diff --git a/README.md b/README.md index 5e7ffdf..a83b468 100644 --- a/README.md +++ b/README.md @@ -217,14 +217,11 @@ That is, this search will return all items from any collection(s) that have eith - item type of "b" -## Viewer - -* Go & ReactJS: https://github.com/voidshard/muninn (simple read-only viewer used in development) - ## Notes -- There will be a delay between when something is created in wysteria, and when it is returnable via a search. This delay should be measured in seconds at most, depending on the 'searchbase' being used. It's possible that different searchbase implementations will overcome this in the future -- "Moving" and/or "renaming" are foreign concepts to wysteria, if you need to move something you should delete and recreate it. Part of this is because of the complications it introduces, and part of this is to be able to support deterministic ids (in a later version). That is, most objects and fields are immutable after creation. +- Unless you are searching by Id, there will be a delay between when something is created in wysteria, and when it is returnable via a search. This delay should be measured in seconds at most, depending on the 'searchbase' being used. + - There is a searchbase config 'ReindexOnWrite' to mitigate this but this is expensive to do: Using this should be considered very carefully. +- "Moving" and/or "renaming" are foreign concepts to wysteria, if you need to move something you should delete and recreate it (or enforce some kind of naming scheme so you don't screw up names..). That is, most objects and fields are immutable after creation. - Wysteria makes no attempt to understand the links you set or sanitize strings given. The meaning behind the resource 'location' for example is left entirely to the user -- it could be a filepath, a url, an id into another system or something else entirely. - There is no maximum number of facets, links or resources that one can attach that is enforced by the system. Practical limits of the underlying systems will begin to apply at some point however. @@ -236,7 +233,6 @@ Also, if (when) you find bugs, let me know. ## ToDo List -- more unittests for business logic - admin console - extend the wysteria server chan to allow realtime management of live server(s) - allow / disallow certain client requests @@ -244,6 +240,34 @@ Also, if (when) you find bugs, let me know. - allow changing of configuration option(s) - add alerts for certain events or server statuses - allow temporary rerouting of client requests -- implement system for deterministic ids -- ability to write to backup db / sb (might be useful for hot swapping or dev dataset) -- ability to swap over to backup db without server restart +- viewer + +## v1.1 +- Elasticsearch v2 support dropped from master +- Elasticsearch v6 (latest) support added +- Searching for an object(s) by Id(s) bypasses the searchbase, meaning ID searches are faster & have no delay. +- Created IDs are now deterministic, and are the same regardless of the database backend used. +- monitor that writes to stdout now writes time taken in call in millis to be more human readable. +- Docker & docker compose support for + - local builds (compiled using the local wysteria src) + - master builds (compiled by cloning github repo) + - multi container (nats-elastic-mongo) & all in one (gRPC-bleve-bolt) builds +- Integration test suite added using all of the above docker builds +- gRPC fixes & timeout improvements +- SSL support added to gRPC middleware +- added some sugar to set a 'FacetLinkType' on a Link obj when created - it's either FacetVersionLink or FacetItemLink +- clientside now sets facets on local objects on a SetFacets() call(s) +- Removed random extra SetFacets() call when a collection is created +- Fixed a few misc nil pointer fixes that could occur on the server +- Removal of cascading deletes -> only links & resources are deleted when their parent goes + - The server should now block deletes if it has children (links & resources do not apply to this) +- Delete calls no longer spawn extra routines +- Renamed lots of funcs & vars so they fit the Go style +- more doc strings +- links are now returned when LinkTo is called. The return signature of item and version .LinkTo is now (*Link, error) +- resources are now returned when AddResource is called. Return signature of version.AddResource is (*Resource, error) +- increased monitoring. There is now monitoring around middleware (enter / exit), database and searchbase calls +- resource uniqueness is enforced for a given location, name, type & parent +- Added config var 'ReindexOnWrite' that ensures that written data is immediately searchable. This is useful in tests + where we want to immediately fetch things and the performance hit isn't considered a problem. + Setting this to true for any prod system should be considered carefully as it's expected to be very costly. diff --git a/client/client.go b/client/client.go index c10344e..ae84262 100644 --- a/client/client.go +++ b/client/client.go @@ -8,14 +8,24 @@ to communicate. package wysteria_client import ( + "errors" + "fmt" wyc "github.com/voidshard/wysteria/common" wcm "github.com/voidshard/wysteria/common/middleware" - "fmt" - "errors" ) const ( defaultSearchLimit = 500 + + // These are copied over from github.com/voidshard/wysteria/common for convenience + // + FacetRootCollection = "/" + FacetCollection = "collection" + FacetItemType = "itemtype" + FacetItemVariant = "variant" + FacetLinkType = "linktype" + FacetVersionLink = "version" + FacetItemLink = "item" ) // Client wraps the desired middleware and supplies a more user friendly interface to users @@ -60,6 +70,39 @@ func Driver(name string) ClientOption { } } +// Set SSL certificate to use +// +func SSLCert(in string) ClientOption { + return func(i *Client) { + i.settings.Middleware.SSLCert = in + } +} + +// Set SSL key to use +// +func SSLKey(in string) ClientOption { + return func(i *Client) { + i.settings.Middleware.SSLKey = in + } +} + +// Verify SSL certificates on connecting +// That is, if this is 'false' we'll accept insecure certificates (like self signed certs for example) +// +func SSLVerify(in bool) ClientOption { + return func(i *Client) { + i.settings.Middleware.SSLVerify = in + } +} + +// Enable SSL +// +func SSLEnable(in bool) ClientOption { + return func(i *Client) { + i.settings.Middleware.SSLEnableTLS = in + } +} + // Create a new client and connect to the server func New(opts ...ClientOption) (*Client, error) { client := &Client{ @@ -117,7 +160,7 @@ type clientStruct interface { initUserFacets(map[string]string) } -// Set the inital Facets on the soon to be created child +// Set the initial Facets on the soon to be created child // Note that you still cannot overwrite client reserved facets this way func Facets(in map[string]string) CreateOption { return func(parent, child clientStruct) { @@ -125,4 +168,4 @@ func Facets(in map[string]string) CreateOption { child.initUserFacets(in) } } -} \ No newline at end of file +} diff --git a/client/collection.go b/client/collection.go index bc20aab..f714e09 100644 --- a/client/collection.go +++ b/client/collection.go @@ -27,7 +27,11 @@ func (c *Collection) ParentId() string { // Return the parent collection of this collection (if any) func (c *Collection) Parent() (*Collection, error) { - return c.conn.Collection(c.ParentId()) + found, err := c.conn.Search(Id(c.ParentId())).FindCollections(Limit(1)) + if err != nil || len(found) != 1 { + return nil, err + } + return found[0], err } // Get the facet value and a bool indicating if the value exists for the given key. @@ -43,6 +47,12 @@ func (i *Collection) Facets() map[string]string { // Set all the key:value pairs given on this Collection's facets. func (i *Collection) SetFacets(in map[string]string) error { + if in == nil { + return nil + } + for k, v := range in { + i.data.Facets[k] = v + } return i.conn.middleware.UpdateCollectionFacets(i.data.Id, in) } @@ -110,8 +120,7 @@ func (w *Client) createCollection(name string, parent *Collection, opts ...Creat for _, opt := range opts { opt(parent, child) } - - if parent == nil { // Nb this will overwrite facets set by users that we're going to use -> this is intentional + if parent == nil { col.Facets[wyc.FacetCollection] = wyc.FacetRootCollection } else { col.Parent = parent.Id() @@ -123,16 +132,16 @@ func (w *Client) createCollection(name string, parent *Collection, opts ...Creat return nil, err } col.Id = collection_id - return child, child.SetFacets(child.Facets()) + return child, nil } // Create a new collection & return it (that is, a collection with no parent) // - The collection name is required to be unique among all collections func (w *Client) CreateCollection(name string, opts ...CreateOption) (*Collection, error) { - return w.createCollection(name, nil, opts...) + return w.createCollection(name, nil, opts...) } // Set initial user defined facets func (c *Collection) initUserFacets(in map[string]string) { c.data.Facets = in -} \ No newline at end of file +} diff --git a/client/config.go b/client/config.go index fbf7e70..b531325 100644 --- a/client/config.go +++ b/client/config.go @@ -21,12 +21,12 @@ type configuration struct { func init() { config = makeDefaults() - config_filepath, err := common.ChooseClientConfig() + configFilepath, err := common.ChooseClientConfig() if err == nil { cnf := &configuration{} - err := common.ReadConfig(config_filepath, cnf) + err := common.ReadConfig(configFilepath, cnf) if err != nil { - log.Println("Unable to read config", config_filepath, err) + log.Println("Unable to read config", configFilepath, err) } else { config = cnf } diff --git a/client/examples/01/main.go b/client/examples/01/main.go index 457d22e..e904c21 100644 --- a/client/examples/01/main.go +++ b/client/examples/01/main.go @@ -35,7 +35,7 @@ func main() { } // Add some kind of resource(s) to our tree - err = oak01.AddResource("default", "png", "url://images/oak01.png") + _, err = oak01.AddResource("default", "png", "url://images/oak01.png") if err != nil { panic(err) } @@ -81,7 +81,7 @@ func main() { forest_map_01.Publish() // Now, let's create links on our forest to it's constituent trees - err = forest_map_01.LinkTo("oak", oak02, wysteria.Facets(customFacets)) + _, err = forest_map_01.LinkTo("oak", oak02, wysteria.Facets(customFacets)) if err != nil { panic(err) } diff --git a/client/examples/07/main.go b/client/examples/07/main.go index c2aae61..3912495 100644 --- a/client/examples/07/main.go +++ b/client/examples/07/main.go @@ -27,20 +27,20 @@ func main() { // Retrieve the current published version (we linked the Version, but we could have linked // items in the same manner - forest_01, err := items[0].PublishedVersion() + forest01, err := items[0].PublishedVersion() if err != nil { panic(err) } // Retrieve all linked versions - linked_versions, err := forest_01.Linked() + linkedVersions, err := forest01.Linked() if err != nil { panic(err) } - for link_name, found_versions := range linked_versions { - for _, version := range found_versions { - fmt.Println(link_name, version.Version()) + for linkName, foundVersions := range linkedVersions { + for _, version := range foundVersions { + fmt.Println(linkName, version.Version()) } } //elm 1 @@ -48,13 +48,13 @@ func main() { //oak 2 // We can also grab links with a specific name - desired_link_name := "elm" - linked, err := forest_01.Linked(wysteria.Name(desired_link_name)) + desiredLinkName := "elm" + linked, err := forest01.Linked(wysteria.Name(desiredLinkName)) if err != nil { panic(err) } - for _, version := range linked[desired_link_name] { - fmt.Println(desired_link_name, version.Version()) + for _, version := range linked[desiredLinkName] { + fmt.Println(desiredLinkName, version.Version()) } //elm 1 } diff --git a/client/examples/08/main.go b/client/examples/08/main.go index ae38454..12852aa 100644 --- a/client/examples/08/main.go +++ b/client/examples/08/main.go @@ -15,42 +15,42 @@ func main() { // Let's get our published pine items, _ := client.Search(wysteria.ItemType("tree"), wysteria.ItemVariant("pine")).FindItems() - published_version, _ := items[0].PublishedVersion() + publishedVersion, _ := items[0].PublishedVersion() // We can grab resources by Name - default_resources, err := published_version.Resources(wysteria.Name("default")) + defaultResources, err := publishedVersion.Resources(wysteria.Name("default")) if err != nil { panic(err) } fmt.Println("--default resources--") - for _, resource := range default_resources { + for _, resource := range defaultResources { fmt.Println(resource.Name(), resource.Type(), resource.Location()) } //--default resources-- //default png /path/to/pine01.png // by Type - json_resources, _ := published_version.Resources(wysteria.ResourceType("json")) + jsonResources, _ := publishedVersion.Resources(wysteria.ResourceType("json")) fmt.Println("--json resources--") - for _, resource := range json_resources { + for _, resource := range jsonResources { fmt.Println(resource.Name(), resource.Type(), resource.Location()) } //--json resources-- //stats json url://file.json // some combination of the two - lowres_jpgs, _ := published_version.Resources(wysteria.Name("lowres"), wysteria.ResourceType("jpeg")) + lowresJpgs, _ := publishedVersion.Resources(wysteria.Name("lowres"), wysteria.ResourceType("jpeg")) fmt.Println("--lowres jpeg resources--") - for _, resource := range lowres_jpgs { + for _, resource := range lowresJpgs { fmt.Println(resource.Name(), resource.Type(), resource.Location()) } //--lowres jpeg resources-- //lowres jpeg /path/lowres/image.jpeg // Or grab all of them - all_resources, _ := published_version.Resources() + allResources, _ := publishedVersion.Resources() fmt.Println("--resources--") - for _, resource := range all_resources { + for _, resource := range allResources { fmt.Println(resource.Name(), resource.Type(), resource.Location()) } //--resources-- diff --git a/client/examples/10/main.go b/client/examples/10/main.go index efdc0ce..933a03f 100644 --- a/client/examples/10/main.go +++ b/client/examples/10/main.go @@ -25,11 +25,22 @@ func main() { if err != nil { panic(err) } - log.Println("Delete maps:", collection.Delete()) - collection, err = client.Collection("tiles") + err = collection.Delete() + if err == nil { + panic(err) + } else { + log.Println("[expected] Can't delete maps:", err) + } + + anotherCollection, err := client.CreateCollection("thisisarandomstring") + if err != nil { + panic(err) + } + err = anotherCollection.Delete() if err != nil { panic(err) + } else { + log.Println("Deleted!") } - log.Println("Delete tiles:", collection.Delete()) } diff --git a/client/item.go b/client/item.go index b3d31a8..fee2e87 100644 --- a/client/item.go +++ b/client/item.go @@ -1,6 +1,7 @@ package wysteria_client import ( + "errors" wyc "github.com/voidshard/wysteria/common" ) @@ -34,9 +35,9 @@ func (i *Item) Delete() error { } // Link this item with a link described by 'name' to some other item. -func (i *Item) LinkTo(name string, other *Item, opts ...CreateOption) error { +func (i *Item) LinkTo(name string, other *Item, opts ...CreateOption) (*Link, error) { if i.Id() == other.Id() { // Prevent linking to oneself - return nil + return nil, errors.New("link src and dst IDs cannot be equal") } lnk := &wyc.Link{ @@ -50,9 +51,11 @@ func (i *Item) LinkTo(name string, other *Item, opts ...CreateOption) error { for _, opt := range opts { opt(i, child) } + lnk.Facets[FacetLinkType] = FacetItemLink - _, err := i.conn.middleware.CreateLink(lnk) - return err + id, err := i.conn.middleware.CreateLink(lnk) + lnk.Id = id + return child, err } // Find and return all linked items for which links exist that name this as the source. @@ -60,13 +63,13 @@ func (i *Item) LinkTo(name string, other *Item, opts ...CreateOption) error { // gets all matching Items. // Since this would cause us to lose the link 'name' we return a map of link name -> []*Item func (i *Item) Linked(opts ...SearchParam) (map[string][]*Item, error) { - opts = append(opts, ChildOf(i.Id())) + opts = append(opts, LinkSource(i.Id())) links, err := i.conn.Search(opts...).FindLinks() if err != nil { return nil, err } - item_id_to_link := map[string]*Link{} + itemIdToLinks := map[string]*Link{} ids := []*wyc.QueryDesc{} for _, link := range links { id := link.SourceId() @@ -75,7 +78,7 @@ func (i *Item) Linked(opts ...SearchParam) (map[string][]*Item, error) { id = link.DestinationId() } - item_id_to_link[id] = link + itemIdToLinks[id] = link ids = append(ids, &wyc.QueryDesc{Id: id}) } @@ -87,23 +90,23 @@ func (i *Item) Linked(opts ...SearchParam) (map[string][]*Item, error) { result := map[string][]*Item{} for _, ver := range items { - lnk, ok := item_id_to_link[ver.Id] + lnk, ok := itemIdToLinks[ver.Id] if !ok { continue } - result_list, ok := result[lnk.Name()] - if result_list == nil { - result_list = []*Item{} + resultLists, ok := result[lnk.Name()] + if resultLists == nil { + resultLists = []*Item{} } - wrapped_item := &Item{ + wrappedItem := &Item{ conn: i.conn, data: ver, } - result_list = append(result_list, wrapped_item) - result[lnk.Name()] = result_list + resultLists = append(resultLists, wrappedItem) + result[lnk.Name()] = resultLists } return result, nil } @@ -132,6 +135,12 @@ func (i *Item) Id() string { // Set all the key:value pairs given on this Item's facets. // Note that the server will ignore the setting of reserved facets. func (i *Item) SetFacets(in map[string]string) error { + if in == nil { + return nil + } + for k, v := range in { + i.data.Facets[k] = v + } return i.conn.middleware.UpdateItemFacets(i.data.Id, in) } diff --git a/client/link.go b/client/link.go index 3d2099a..8b8d469 100644 --- a/client/link.go +++ b/client/link.go @@ -33,6 +33,12 @@ func (i *Link) Facets() map[string]string { // Set all the key:value pairs given on this Link's facets. func (i *Link) SetFacets(in map[string]string) error { + if in == nil { + return nil + } + for k, v := range in { + i.data.Facets[k] = v + } return i.conn.middleware.UpdateLinkFacets(i.data.Id, in) } diff --git a/client/resource.go b/client/resource.go index 4a9959d..aa2abc6 100644 --- a/client/resource.go +++ b/client/resource.go @@ -1,7 +1,6 @@ package wysteria_client import ( - "errors" "fmt" wyc "github.com/voidshard/wysteria/common" ) @@ -45,6 +44,12 @@ func (i *Resource) Facets() map[string]string { // Set all the key:value pairs given on this Resource's facets. func (i *Resource) SetFacets(in map[string]string) error { + if in == nil { + return nil + } + for k, v := range in { + i.data.Facets[k] = v + } return i.conn.middleware.UpdateResourceFacets(i.data.Id, in) } @@ -76,7 +81,7 @@ func (i *Resource) Parent() (*Version, error) { return nil, err } if len(versions) < 1 { - return nil, errors.New(fmt.Sprintf("Version with Id %s not found", i.data.Parent)) + return nil, fmt.Errorf("version with Id %s not found", i.data.Parent) } return &Version{ diff --git a/client/search.go b/client/search.go index af92afc..2915ae7 100644 --- a/client/search.go +++ b/client/search.go @@ -2,6 +2,7 @@ package wysteria_client import ( wyc "github.com/voidshard/wysteria/common" + "time" ) // Search obj represents a query or set of queries that are about to be sent @@ -13,6 +14,8 @@ type Search struct { nextQValid bool limit int32 offset int32 + retries int + retryDelay time.Duration } type SearchParam func(*Search) diff --git a/client/version.go b/client/version.go index 08b2083..d65958d 100644 --- a/client/version.go +++ b/client/version.go @@ -37,6 +37,12 @@ func (i *Version) Id() string { // Set all the key:value pairs given on this Item's facets. // Note that the server will ignore the setting of reserved facets. func (i *Version) SetFacets(in map[string]string) error { + if in == nil { + return nil + } + for k, v := range in { + i.data.Facets[k] = v + } return i.conn.middleware.UpdateVersionFacets(i.data.Id, in) } @@ -51,7 +57,7 @@ func (i *Version) Linked(opts ...SearchParam) (map[string][]*Version, error) { return nil, err } - version_id_to_link := map[string]*Link{} + versionIdToLinks := map[string]*Link{} ids := []*wyc.QueryDesc{} for _, link := range links { id := link.SourceId() @@ -60,7 +66,7 @@ func (i *Version) Linked(opts ...SearchParam) (map[string][]*Version, error) { id = link.DestinationId() } - version_id_to_link[id] = link + versionIdToLinks[id] = link ids = append(ids, &wyc.QueryDesc{Id: id}) } @@ -71,31 +77,31 @@ func (i *Version) Linked(opts ...SearchParam) (map[string][]*Version, error) { result := map[string][]*Version{} for _, ver := range items { - lnk, ok := version_id_to_link[ver.Id] + lnk, ok := versionIdToLinks[ver.Id] if !ok { continue } - result_list, ok := result[lnk.Name()] - if result_list == nil { - result_list = []*Version{} + resultList, ok := result[lnk.Name()] + if resultList == nil { + resultList = []*Version{} } - wrapped_item := &Version{ + wrappedItem := &Version{ conn: i.conn, data: ver, } - result_list = append(result_list, wrapped_item) - result[lnk.Name()] = result_list + resultList = append(resultList, wrappedItem) + result[lnk.Name()] = resultList } return result, nil } // Link this Version with a link described by 'name' to some other Version. -func (i *Version) LinkTo(name string, other *Version, opts ...CreateOption) error { +func (i *Version) LinkTo(name string, other *Version, opts ...CreateOption) (*Link, error) { if i.Id() == other.Id() { // Prevent linking to oneself - return nil + return nil, errors.New("link src and dst IDs cannot be equal") } lnk := &wyc.Link{ @@ -109,9 +115,11 @@ func (i *Version) LinkTo(name string, other *Version, opts ...CreateOption) erro for _, opt := range opts { opt(i, child) } + lnk.Facets[FacetLinkType] = FacetVersionLink - _, err := i.conn.middleware.CreateLink(lnk) - return err + id, err := i.conn.middleware.CreateLink(lnk) + lnk.Id = id + return child, err } // Mark this Version as the published version. @@ -121,7 +129,7 @@ func (i *Version) Publish() error { } // Add a resource with the given name, type and location to this version. -func (i *Version) AddResource(name, rtype, location string, opts ...CreateOption) error { +func (i *Version) AddResource(name, rtype, location string, opts ...CreateOption) (*Resource, error) { res := &wyc.Resource{ Parent: i.data.Id, Name: name, @@ -137,10 +145,10 @@ func (i *Version) AddResource(name, rtype, location string, opts ...CreateOption id, err := i.conn.middleware.CreateResource(res) if err != nil { - return err + return nil, err } res.Id = id - return nil + return child, nil } // Retrieve all child resources of this Version with the given name & resource type diff --git a/common/middleware/grpc.go b/common/middleware/grpc.go index 6b44ae8..202fda7 100644 --- a/common/middleware/grpc.go +++ b/common/middleware/grpc.go @@ -15,6 +15,10 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/reflection" "net" + "time" + "google.golang.org/grpc/keepalive" + "google.golang.org/grpc/credentials" + "fmt" ) var ( @@ -36,7 +40,26 @@ func (c *grpcClient) Connect(config *Settings) error { if config.Config == "" { config.Config = "localhost:50051" } - conn, err := grpc.Dial(config.Config, grpc.WithInsecure()) + + opts := []grpc.DialOption{ + grpc.WithKeepaliveParams(keepalive.ClientParameters{ + Timeout: 60 * time.Second, + Time: 10 * time.Second, + PermitWithoutStream: true, + }), + } + + if config.SSLEnableTLS { + creds, err := config.TLSconfig() + if err != nil { + return fmt.Errorf("unable to load TLS keypair: %s", err) + } + opts = append(opts, grpc.WithTransportCredentials(credentials.NewTLS(creds))) + } else { + opts = append(opts, grpc.WithInsecure()) + } + + conn, err := grpc.Dial(config.Config, opts...) if err != nil { return err } @@ -62,6 +85,7 @@ func (c *grpcClient) CreateCollection(in *wyc.Collection) (string, error) { &wrpc.Collection{ Name: in.Name, Parent: in.Parent, + Facets: in.Facets, }, ) if err != nil { @@ -134,6 +158,7 @@ func convWResource(in *wyc.Resource) *wrpc.Resource { Name: in.Name, Location: in.Location, ResourceType: in.ResourceType, + Facets: in.Facets, } } @@ -160,6 +185,7 @@ func convWLink(in *wyc.Link) *wrpc.Link { Src: in.Src, Name: in.Name, Dst: in.Dst, + Facets: in.Facets, } } @@ -246,6 +272,8 @@ func convRCollections(in ...*wrpc.Collection) []*wyc.Collection { result = append(result, &wyc.Collection{ Id: i.Id, Name: i.Name, + Facets: i.Facets, + Parent: i.Parent, }) } return result @@ -329,6 +357,7 @@ func convRResources(in ...*wrpc.Resource) []*wyc.Resource { Name: i.Name, ResourceType: i.ResourceType, Location: i.Location, + Facets: i.Facets, }) } return result @@ -356,6 +385,7 @@ func convRLinks(in ...*wrpc.Link) []*wyc.Link { Name: i.Name, Src: i.Src, Dst: i.Dst, + Facets: i.Facets, }) } return result @@ -505,13 +535,24 @@ func (s *grpcServer) ListenAndServe(config *Settings, handler ServerHandler) err s.conn = conn s.handler = handler - rpc_server := grpc.NewServer() - wrpc.RegisterWysteriaGrpcServer(rpc_server, s) + var rpcServer *grpc.Server + + if config.SSLEnableTLS { + creds, err := config.TLSconfig() + if err != nil { + return fmt.Errorf("unable to load TLS keypair: %s", err) + } + rpcServer = grpc.NewServer(grpc.Creds(credentials.NewTLS(creds))) + } else { + rpcServer = grpc.NewServer() + } + + wrpc.RegisterWysteriaGrpcServer(rpcServer, s) // Register reflection service on gRPC server. - reflection.Register(rpc_server) + reflection.Register(rpcServer) - return rpc_server.Serve(s.conn) + return rpcServer.Serve(s.conn) } // Close any and all connections @@ -569,7 +610,7 @@ func (s *grpcServer) UpdateLinkFacets(_ context.Context, in *wrpc.IdAndDict) (*w // Given the name of the collection to create, call server side CreateCollection, return result func (s *grpcServer) CreateCollection(_ context.Context, in *wrpc.Collection) (*wrpc.Id, error) { - created_id, err := s.handler.CreateCollection(&wyc.Collection{Name: in.Name, Parent: in.Parent}) + created_id, err := s.handler.CreateCollection(&wyc.Collection{Name: in.Name, Parent: in.Parent, Facets: in.Facets}) if err != nil { return nullWrpcId, err } @@ -674,6 +715,8 @@ func convWCollections(in ...*wyc.Collection) *wrpc.Collections { &wrpc.Collection{ Id: i.Id, Name: i.Name, + Parent: i.Parent, + Facets: i.Facets, }, ) } diff --git a/common/middleware/grpc_proto/wysteria.grpc.pb.go b/common/middleware/grpc_proto/wysteria.grpc.pb.go index 8889ef2..87da9a6 100644 --- a/common/middleware/grpc_proto/wysteria.grpc.pb.go +++ b/common/middleware/grpc_proto/wysteria.grpc.pb.go @@ -145,10 +145,11 @@ func (m *Text) GetText() string { } type Collection struct { - Parent string `protobuf:"bytes,95,opt,name=Parent" json:"Parent,omitempty"` - Id string `protobuf:"bytes,6,opt,name=Id" json:"Id,omitempty"` - Name string `protobuf:"bytes,7,opt,name=Name" json:"Name,omitempty"` - Error *Text `protobuf:"bytes,82,opt,name=error" json:"error,omitempty"` + Parent string `protobuf:"bytes,95,opt,name=Parent" json:"Parent,omitempty"` + Id string `protobuf:"bytes,6,opt,name=Id" json:"Id,omitempty"` + Name string `protobuf:"bytes,7,opt,name=Name" json:"Name,omitempty"` + Facets map[string]string `protobuf:"bytes,94,rep,name=Facets" json:"Facets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Error *Text `protobuf:"bytes,82,opt,name=error" json:"error,omitempty"` } func (m *Collection) Reset() { *m = Collection{} } @@ -177,6 +178,13 @@ func (m *Collection) GetName() string { return "" } +func (m *Collection) GetFacets() map[string]string { + if m != nil { + return m.Facets + } + return nil +} + func (m *Collection) GetError() *Text { if m != nil { return m.Error @@ -289,12 +297,13 @@ func (m *Version) GetError() *Text { } type Resource struct { - Parent string `protobuf:"bytes,36,opt,name=Parent" json:"Parent,omitempty"` - Name string `protobuf:"bytes,37,opt,name=Name" json:"Name,omitempty"` - ResourceType string `protobuf:"bytes,38,opt,name=ResourceType" json:"ResourceType,omitempty"` - Id string `protobuf:"bytes,39,opt,name=Id" json:"Id,omitempty"` - Location string `protobuf:"bytes,40,opt,name=Location" json:"Location,omitempty"` - Error *Text `protobuf:"bytes,85,opt,name=error" json:"error,omitempty"` + Parent string `protobuf:"bytes,36,opt,name=Parent" json:"Parent,omitempty"` + Name string `protobuf:"bytes,37,opt,name=Name" json:"Name,omitempty"` + ResourceType string `protobuf:"bytes,38,opt,name=ResourceType" json:"ResourceType,omitempty"` + Id string `protobuf:"bytes,39,opt,name=Id" json:"Id,omitempty"` + Location string `protobuf:"bytes,40,opt,name=Location" json:"Location,omitempty"` + Facets map[string]string `protobuf:"bytes,102,rep,name=Facets" json:"Facets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Error *Text `protobuf:"bytes,85,opt,name=error" json:"error,omitempty"` } func (m *Resource) Reset() { *m = Resource{} } @@ -337,6 +346,13 @@ func (m *Resource) GetLocation() string { return "" } +func (m *Resource) GetFacets() map[string]string { + if m != nil { + return m.Facets + } + return nil +} + func (m *Resource) GetError() *Text { if m != nil { return m.Error @@ -345,11 +361,12 @@ func (m *Resource) GetError() *Text { } type Link struct { - Name string `protobuf:"bytes,43,opt,name=Name" json:"Name,omitempty"` - Id string `protobuf:"bytes,44,opt,name=Id" json:"Id,omitempty"` - Src string `protobuf:"bytes,45,opt,name=Src" json:"Src,omitempty"` - Dst string `protobuf:"bytes,46,opt,name=Dst" json:"Dst,omitempty"` - Error *Text `protobuf:"bytes,85,opt,name=error" json:"error,omitempty"` + Name string `protobuf:"bytes,43,opt,name=Name" json:"Name,omitempty"` + Id string `protobuf:"bytes,44,opt,name=Id" json:"Id,omitempty"` + Src string `protobuf:"bytes,45,opt,name=Src" json:"Src,omitempty"` + Dst string `protobuf:"bytes,46,opt,name=Dst" json:"Dst,omitempty"` + Facets map[string]string `protobuf:"bytes,103,rep,name=Facets" json:"Facets,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Error *Text `protobuf:"bytes,85,opt,name=error" json:"error,omitempty"` } func (m *Link) Reset() { *m = Link{} } @@ -385,6 +402,13 @@ func (m *Link) GetDst() string { return "" } +func (m *Link) GetFacets() map[string]string { + if m != nil { + return m.Facets + } + return nil +} + func (m *Link) GetError() *Text { if m != nil { return m.Error @@ -1419,69 +1443,72 @@ var _WysteriaGrpc_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("wysteria.grpc.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 1022 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x57, 0x5d, 0x53, 0x23, 0x45, - 0x14, 0x65, 0x12, 0x08, 0xe4, 0x42, 0xd8, 0xd8, 0xa1, 0xa0, 0x19, 0xcb, 0x92, 0x1a, 0x59, 0x8d, - 0xae, 0xe6, 0x81, 0xd5, 0x5d, 0x97, 0xc2, 0xc5, 0x85, 0x6c, 0xd6, 0x28, 0x85, 0x6c, 0x00, 0x75, - 0xfd, 0x28, 0x1c, 0x66, 0x1a, 0x1d, 0x37, 0x5f, 0xd5, 0xdd, 0x51, 0xf3, 0xec, 0x1f, 0xf0, 0xc1, - 0x3f, 0xe2, 0xef, 0xf2, 0xd9, 0x77, 0xab, 0xbb, 0x67, 0x7a, 0x26, 0x43, 0x4f, 0x26, 0x0b, 0xe5, - 0x5b, 0xba, 0xe7, 0xde, 0x73, 0xef, 0x3d, 0xe7, 0x74, 0x37, 0x40, 0xed, 0xb7, 0x31, 0xe3, 0x84, - 0x06, 0x6e, 0xe3, 0x27, 0x3a, 0xf4, 0x1a, 0x43, 0x3a, 0xe0, 0x03, 0x54, 0x89, 0x36, 0x2f, 0xc4, - 0xa6, 0xf3, 0x19, 0x2c, 0xb5, 0xfd, 0x27, 0x7d, 0xff, 0x78, 0xd4, 0x43, 0xab, 0x50, 0x68, 0xfb, - 0xf8, 0xc7, 0x2d, 0xab, 0x5e, 0xee, 0x14, 0xda, 0x3e, 0xc2, 0xb0, 0xf8, 0x15, 0xa1, 0x2c, 0x18, - 0xf4, 0xb1, 0xbf, 0x65, 0xd5, 0x17, 0x3a, 0xd1, 0x12, 0x21, 0x98, 0x3f, 0x23, 0xbf, 0x73, 0x4c, - 0x64, 0xac, 0xfc, 0xed, 0xfc, 0x65, 0x41, 0x59, 0x42, 0x35, 0x03, 0x8f, 0x5f, 0xc3, 0xda, 0x83, - 0x52, 0xcb, 0xf5, 0x08, 0x67, 0xd8, 0xdd, 0x2a, 0xd6, 0x97, 0x77, 0xb6, 0x1b, 0x13, 0x7d, 0x34, - 0x74, 0x66, 0x43, 0x85, 0x3d, 0xed, 0x73, 0x3a, 0xee, 0x84, 0x39, 0xf6, 0x23, 0x58, 0x4e, 0x6c, - 0xa3, 0x2a, 0x14, 0x5f, 0x92, 0x31, 0xb6, 0x24, 0xba, 0xf8, 0x89, 0xd6, 0x60, 0xe1, 0x57, 0xb7, - 0x3b, 0x22, 0xb8, 0x20, 0xf7, 0xd4, 0x62, 0xb7, 0xf0, 0xb1, 0xe5, 0xec, 0x8b, 0x46, 0xc2, 0x76, - 0x2c, 0xdd, 0xce, 0xbb, 0xb0, 0x40, 0x28, 0x1d, 0x50, 0xfc, 0x7c, 0xcb, 0xaa, 0x2f, 0xef, 0xd4, - 0x52, 0xdd, 0x88, 0x81, 0x3a, 0x2a, 0xc2, 0xb1, 0xd5, 0xac, 0x7a, 0xe6, 0x93, 0xc4, 0xcc, 0x0c, - 0xe0, 0x70, 0xd0, 0xed, 0x12, 0x8f, 0x0b, 0x56, 0xd6, 0xa1, 0x74, 0xe2, 0x52, 0xd2, 0xe7, 0xf8, - 0x42, 0xc6, 0x84, 0xab, 0xb0, 0x78, 0x49, 0x17, 0x47, 0x30, 0x7f, 0xec, 0xf6, 0x08, 0x5e, 0x54, - 0x48, 0xe2, 0x77, 0xdc, 0x50, 0x27, 0xb7, 0xa1, 0x3f, 0x0a, 0x30, 0xdf, 0xe6, 0xa4, 0x97, 0xa8, - 0xb7, 0x62, 0xa8, 0x57, 0xd1, 0xf5, 0x6c, 0x58, 0x12, 0xf1, 0x67, 0xe3, 0x21, 0xc1, 0xab, 0x72, - 0x57, 0xaf, 0xa5, 0xc6, 0x2e, 0x0d, 0xdc, 0x3e, 0xc7, 0x77, 0xe4, 0xa7, 0x68, 0x89, 0x1e, 0x6a, - 0xc5, 0xaa, 0x52, 0xb1, 0x37, 0xd3, 0x8a, 0x71, 0xd2, 0x33, 0x89, 0x15, 0x8f, 0x72, 0x9a, 0x37, - 0xca, 0x6d, 0x74, 0xfd, 0xc7, 0xd2, 0xee, 0x4c, 0x10, 0xb1, 0x69, 0x20, 0xc2, 0xd6, 0x44, 0xac, - 0x43, 0xe9, 0x78, 0xd4, 0xbb, 0x24, 0x14, 0xbf, 0x2e, 0xfd, 0x1c, 0xae, 0xd0, 0xae, 0x1e, 0xf5, - 0x0d, 0x39, 0xaa, 0x93, 0x6a, 0x39, 0xac, 0x33, 0x7d, 0xda, 0xb3, 0xff, 0x73, 0xda, 0xbf, 0x2d, - 0x58, 0xea, 0x10, 0x36, 0x18, 0x51, 0x8f, 0x24, 0xc6, 0xdd, 0x9e, 0x18, 0x37, 0xf2, 0xd5, 0xdd, - 0x84, 0xaf, 0x1c, 0x58, 0x89, 0xf2, 0xa4, 0xfe, 0x6f, 0xcb, 0x6f, 0x13, 0x7b, 0x21, 0x4d, 0xef, - 0x24, 0xfd, 0x72, 0x34, 0xf0, 0x5c, 0xe1, 0x69, 0x5c, 0x57, 0x7e, 0x89, 0xd6, 0xf1, 0xb8, 0xe7, - 0xb9, 0x3e, 0x1d, 0xc3, 0xfc, 0x51, 0xd0, 0x7f, 0xa9, 0xdb, 0xba, 0x97, 0x68, 0x4b, 0x95, 0x7c, - 0x5f, 0x97, 0xac, 0x42, 0xf1, 0x94, 0x7a, 0xf8, 0x03, 0xc5, 0xc5, 0x29, 0xf5, 0xc4, 0x4e, 0x93, - 0x71, 0xdc, 0x50, 0x3b, 0x4d, 0xc6, 0x5f, 0xa5, 0xf4, 0x9f, 0x45, 0x28, 0x3f, 0x1f, 0x11, 0x3a, - 0x6e, 0x12, 0xe6, 0x25, 0xf8, 0xda, 0x33, 0xd8, 0xe3, 0x13, 0xdd, 0xc4, 0x36, 0x54, 0x42, 0xa5, - 0x43, 0x97, 0x3c, 0x96, 0x2e, 0x99, 0xdc, 0x9c, 0x38, 0x4d, 0xfb, 0xd9, 0xa7, 0xe9, 0xd3, 0xc9, - 0xd3, 0x14, 0xdf, 0x7f, 0x4f, 0x8c, 0xf7, 0x9f, 0xee, 0xd6, 0x68, 0xb2, 0x88, 0xc2, 0x83, 0x29, - 0xca, 0x1e, 0x1a, 0x94, 0x4d, 0x2a, 0xd9, 0x4c, 0x29, 0x89, 0x61, 0x51, 0xc8, 0x23, 0x68, 0x7f, - 0xaa, 0x7a, 0x0d, 0x97, 0xd1, 0x17, 0x41, 0x7f, 0x2b, 0xfe, 0xd2, 0x64, 0xfc, 0x36, 0x0e, 0xbe, - 0x02, 0xd0, 0x33, 0x32, 0x11, 0x77, 0x14, 0xf4, 0x02, 0x8e, 0x03, 0x49, 0xb1, 0x5a, 0x08, 0xa1, - 0xbe, 0xbc, 0xba, 0x62, 0x84, 0xe3, 0x5f, 0xd4, 0xf9, 0x54, 0x2b, 0xf4, 0x1e, 0x14, 0xdd, 0x6e, - 0x17, 0x7f, 0x21, 0x99, 0xc3, 0x59, 0xcc, 0x75, 0x44, 0x90, 0x73, 0x0e, 0xc5, 0xb6, 0xcf, 0xd0, - 0x5b, 0x2a, 0x65, 0x47, 0xa6, 0xbc, 0x76, 0xed, 0xb1, 0x91, 0xb1, 0xb1, 0xa3, 0xbe, 0xc9, 0x75, - 0x14, 0x81, 0xe5, 0xf8, 0xa6, 0x67, 0xe8, 0x9e, 0x82, 0xbf, 0x2f, 0xe1, 0x37, 0x53, 0x79, 0x71, - 0x60, 0xaa, 0xcc, 0x8b, 0xdc, 0x32, 0x2f, 0x60, 0x41, 0x98, 0x89, 0xa1, 0xbb, 0xaa, 0xc0, 0x87, - 0xb2, 0x40, 0xcd, 0x70, 0xf5, 0xa6, 0xa0, 0xbf, 0xcd, 0x85, 0xbe, 0x80, 0xa5, 0xd0, 0xc8, 0x0c, - 0xd5, 0x15, 0xfa, 0x47, 0x12, 0x7d, 0xdd, 0x7c, 0xdb, 0xa5, 0x0a, 0x7c, 0x97, 0x5b, 0xc0, 0x85, - 0x72, 0x64, 0x3e, 0x71, 0x2d, 0xca, 0x0a, 0x0f, 0x64, 0x85, 0x8d, 0x54, 0x56, 0x14, 0x96, 0x2a, - 0xf1, 0xfd, 0x2c, 0xf4, 0x08, 0x2b, 0x6a, 0x7a, 0x1e, 0x1a, 0xe9, 0x11, 0x21, 0x29, 0xe8, 0x1f, - 0xf2, 0xa0, 0x77, 0xfe, 0x05, 0x58, 0xf9, 0x3a, 0xfc, 0xfa, 0x8c, 0x0e, 0x3d, 0x74, 0x00, 0xd5, - 0x43, 0x4a, 0x5c, 0x4e, 0x12, 0x2f, 0x7c, 0xb6, 0xd2, 0xf6, 0x75, 0x8f, 0x39, 0x73, 0xe8, 0x01, - 0x80, 0xc2, 0x90, 0xef, 0xb5, 0x49, 0x46, 0x73, 0xde, 0x01, 0x54, 0x54, 0x9e, 0x7e, 0xe1, 0xcc, - 0x1a, 0xd9, 0x1b, 0xa6, 0x3f, 0xa3, 0x8e, 0x47, 0x3d, 0x67, 0x0e, 0x3d, 0x86, 0x55, 0x85, 0xa1, - 0xdf, 0x8d, 0x2c, 0x19, 0x72, 0x7a, 0x97, 0x97, 0xb8, 0x89, 0x63, 0x73, 0xde, 0x1e, 0x54, 0x9b, - 0xa4, 0x4b, 0x26, 0x78, 0xbb, 0x1e, 0x68, 0x9b, 0xb4, 0x50, 0x55, 0x55, 0xb6, 0x64, 0x6c, 0xf6, - 0xbc, 0x47, 0x50, 0x51, 0x79, 0x11, 0x63, 0xb3, 0xa7, 0xee, 0xc2, 0xaa, 0x4a, 0xd5, 0x44, 0xcd, - 0x9e, 0xfb, 0x39, 0xdc, 0x69, 0x05, 0x7d, 0x3f, 0x79, 0x35, 0x6c, 0x66, 0xdd, 0x4f, 0xcc, 0xb6, - 0x33, 0xed, 0xc3, 0xa4, 0x60, 0x65, 0x81, 0xa5, 0xce, 0xff, 0x14, 0x94, 0x35, 0x83, 0x8d, 0x44, - 0x7e, 0x13, 0x56, 0x44, 0xbe, 0x3e, 0xe4, 0x53, 0x20, 0x36, 0xcc, 0x76, 0x12, 0x28, 0x2d, 0xa8, - 0x08, 0x94, 0xf8, 0x24, 0x4f, 0x81, 0xc1, 0x19, 0x86, 0x4a, 0x4c, 0xa3, 0x8e, 0xeb, 0x2b, 0x4c, - 0x23, 0x13, 0x9c, 0x39, 0xb4, 0x0f, 0xd5, 0x93, 0xd1, 0x65, 0x37, 0x60, 0x3f, 0x13, 0x7f, 0x8a, - 0xa6, 0x19, 0x07, 0x43, 0x02, 0xd4, 0x4e, 0x09, 0x9f, 0x05, 0x23, 0x43, 0xdb, 0x16, 0xd4, 0xce, - 0x87, 0x7e, 0x7c, 0x08, 0xc3, 0xb7, 0x18, 0x67, 0xfd, 0xe7, 0x92, 0x85, 0x73, 0x08, 0x55, 0x85, - 0x23, 0x84, 0xba, 0x29, 0x48, 0x1b, 0xd6, 0x15, 0x48, 0xec, 0x99, 0x9b, 0x42, 0x3d, 0x83, 0x35, - 0x05, 0x15, 0xc9, 0x75, 0xeb, 0xc1, 0x84, 0x66, 0x37, 0x04, 0xb9, 0x2c, 0xc9, 0x7f, 0x4b, 0xef, - 0xff, 0x17, 0x00, 0x00, 0xff, 0xff, 0x03, 0x39, 0x77, 0x81, 0xad, 0x0e, 0x00, 0x00, + // 1059 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x57, 0x5b, 0x73, 0x1b, 0x35, + 0x14, 0xce, 0xda, 0xb9, 0xf9, 0x24, 0x4e, 0x8d, 0x9c, 0x49, 0x94, 0x65, 0x18, 0x32, 0xdb, 0x04, + 0x0c, 0x05, 0x3f, 0xa4, 0xd0, 0xd2, 0x90, 0x36, 0x34, 0x71, 0x5d, 0x0c, 0x99, 0x90, 0x3a, 0x09, + 0x50, 0x6e, 0x61, 0xb3, 0xab, 0x94, 0xa5, 0xbe, 0x8d, 0x24, 0x03, 0x7e, 0xe6, 0x0f, 0xf0, 0xc0, + 0x9f, 0xe0, 0xb7, 0x31, 0x7d, 0xe4, 0x9d, 0x91, 0xb4, 0xab, 0x5d, 0x6f, 0xb4, 0xb6, 0x49, 0x26, + 0xc3, 0x9b, 0x75, 0x39, 0xdf, 0xd1, 0xf7, 0x9d, 0xef, 0x48, 0x6b, 0x28, 0xff, 0x3a, 0x60, 0x9c, + 0xd0, 0xc0, 0xad, 0xbe, 0xa0, 0x3d, 0xaf, 0xda, 0xa3, 0x5d, 0xde, 0x45, 0xc5, 0x68, 0xf2, 0x4c, + 0x4c, 0x3a, 0x9f, 0xc2, 0x7c, 0xc3, 0x7f, 0xdc, 0xf1, 0x0f, 0xfb, 0x6d, 0xb4, 0x04, 0xb9, 0x86, + 0x8f, 0x7f, 0x5c, 0xb7, 0x2a, 0x85, 0x66, 0xae, 0xe1, 0x23, 0x0c, 0x73, 0x5f, 0x12, 0xca, 0x82, + 0x6e, 0x07, 0xfb, 0xeb, 0x56, 0x65, 0xa6, 0x19, 0x0d, 0x11, 0x82, 0xe9, 0x13, 0xf2, 0x1b, 0xc7, + 0x44, 0xee, 0x95, 0xbf, 0x9d, 0x3f, 0x2d, 0x28, 0x48, 0xa8, 0x5a, 0xe0, 0xf1, 0x4b, 0x58, 0x3b, + 0x30, 0x5b, 0x77, 0x3d, 0xc2, 0x19, 0x76, 0xd7, 0xf3, 0x95, 0x85, 0xad, 0x8d, 0xea, 0xd0, 0x39, + 0xaa, 0x3a, 0xb2, 0xaa, 0xb6, 0x3d, 0xe9, 0x70, 0x3a, 0x68, 0x86, 0x31, 0xf6, 0x03, 0x58, 0x48, + 0x4c, 0xa3, 0x12, 0xe4, 0x5f, 0x92, 0x01, 0xb6, 0x24, 0xba, 0xf8, 0x89, 0x96, 0x61, 0xe6, 0x17, + 0xb7, 0xd5, 0x27, 0x38, 0x27, 0xe7, 0xd4, 0x60, 0x3b, 0xf7, 0x91, 0xe5, 0xec, 0x8a, 0x83, 0x84, + 0xc7, 0xb1, 0xf4, 0x71, 0xde, 0x81, 0x19, 0x42, 0x69, 0x97, 0xe2, 0x67, 0xeb, 0x56, 0x65, 0x61, + 0xab, 0x9c, 0x3a, 0x8d, 0x20, 0xd4, 0x54, 0x3b, 0x1c, 0x5b, 0x71, 0xd5, 0x9c, 0x8f, 0x12, 0x9c, + 0x5f, 0x59, 0x00, 0xfb, 0xdd, 0x56, 0x8b, 0x78, 0x5c, 0xc8, 0xb2, 0x02, 0xb3, 0x47, 0x2e, 0x25, + 0x1d, 0x8e, 0xcf, 0xe4, 0xa6, 0x70, 0x14, 0x66, 0x9f, 0xd5, 0xd9, 0x11, 0x4c, 0x1f, 0xba, 0x6d, + 0x82, 0xe7, 0x14, 0x94, 0xf8, 0x8d, 0x1e, 0x6a, 0x81, 0x7e, 0x90, 0x02, 0x6d, 0xa6, 0x8e, 0x14, + 0xa7, 0x31, 0x29, 0x14, 0x13, 0x6a, 0x8e, 0x23, 0x74, 0x1d, 0x31, 0x7f, 0xcf, 0xc1, 0x74, 0x83, + 0x93, 0x76, 0x82, 0xe9, 0xa2, 0x81, 0x69, 0x51, 0x33, 0xb5, 0x61, 0x5e, 0xec, 0x3f, 0x19, 0xf4, + 0x08, 0x5e, 0x92, 0xb3, 0x7a, 0x2c, 0xed, 0xe5, 0xd2, 0xc0, 0xed, 0x70, 0x7c, 0x4b, 0x2e, 0x45, + 0x43, 0x74, 0x5f, 0x6b, 0x51, 0x92, 0x5a, 0xbc, 0x99, 0x36, 0x0b, 0x27, 0xed, 0xd1, 0x2a, 0x1c, + 0xdf, 0xa4, 0x0a, 0x7f, 0x5b, 0xba, 0x31, 0x12, 0x42, 0xac, 0x19, 0x84, 0xb0, 0xb5, 0x10, 0x2b, + 0x30, 0x7b, 0xd8, 0x6f, 0x9f, 0x13, 0x8a, 0x5f, 0x97, 0xad, 0x14, 0x8e, 0xd0, 0xb6, 0xa6, 0xfa, + 0x86, 0xa4, 0xea, 0xa4, 0x8e, 0x1c, 0xe6, 0x19, 0xcd, 0xf6, 0xe4, 0x26, 0xd9, 0xfe, 0x95, 0x83, + 0xf9, 0x26, 0x61, 0xdd, 0x3e, 0xf5, 0x48, 0x82, 0xee, 0xc6, 0x10, 0xdd, 0xc8, 0xd1, 0x9b, 0x09, + 0x47, 0x3b, 0xb0, 0x18, 0xc5, 0xc9, 0xfa, 0xbf, 0x25, 0xd7, 0x86, 0xe6, 0x42, 0x99, 0xde, 0x4e, + 0xfa, 0xe5, 0xa0, 0xeb, 0xb9, 0xc2, 0xe6, 0xb8, 0xa2, 0xfc, 0x12, 0x8d, 0xd1, 0xc7, 0x5a, 0xaa, + 0x0b, 0x29, 0xd5, 0xed, 0x14, 0xdf, 0x08, 0x78, 0xb4, 0x56, 0xa7, 0x37, 0xa9, 0xd5, 0x2b, 0x0b, + 0xa6, 0x0f, 0x82, 0xce, 0x4b, 0xad, 0xc7, 0x9d, 0x84, 0x1e, 0x8a, 0xeb, 0x7b, 0x9a, 0x6b, 0x09, + 0xf2, 0xc7, 0xd4, 0xc3, 0xef, 0x2b, 0xe0, 0x63, 0xea, 0x89, 0x99, 0x1a, 0xe3, 0xb8, 0xaa, 0x66, + 0x6a, 0x2c, 0xd9, 0x09, 0x2f, 0x8c, 0x9d, 0x20, 0x92, 0xfd, 0x8f, 0x7c, 0xff, 0xc8, 0x43, 0xe1, + 0x59, 0x9f, 0xd0, 0x41, 0x8d, 0x30, 0x2f, 0x61, 0x8e, 0x1d, 0x43, 0x2f, 0x3c, 0xd4, 0xc4, 0x37, + 0xa0, 0x18, 0xda, 0x3a, 0x6c, 0x89, 0x47, 0xb2, 0x25, 0x86, 0x27, 0x87, 0xae, 0x8e, 0xdd, 0xec, + 0xab, 0xe3, 0x93, 0xe1, 0xab, 0x23, 0x7e, 0x67, 0x1e, 0x1b, 0xdf, 0x19, 0x7d, 0x5a, 0xa3, 0x6a, + 0x51, 0xd9, 0xf6, 0x46, 0xd8, 0x78, 0xdf, 0x60, 0xe3, 0xa4, 0x6d, 0x6b, 0x29, 0xdb, 0x62, 0x98, + 0x13, 0x55, 0x12, 0xa5, 0x7e, 0xa2, 0xce, 0x1a, 0x0e, 0xa3, 0x15, 0x51, 0xf2, 0x7a, 0xbc, 0x52, + 0x63, 0xfc, 0x3a, 0x25, 0xb9, 0x00, 0xd0, 0x1c, 0x99, 0xd8, 0x77, 0x10, 0xb4, 0x03, 0x8e, 0x03, + 0x29, 0xb1, 0x1a, 0x88, 0x42, 0x7d, 0x71, 0x71, 0xc1, 0x08, 0xc7, 0x3f, 0xab, 0xcb, 0x48, 0x8d, + 0xd0, 0xbb, 0x90, 0x77, 0x5b, 0x2d, 0xfc, 0xb9, 0x54, 0x0e, 0x67, 0x29, 0xd7, 0x14, 0x9b, 0x9c, + 0x53, 0xc8, 0x37, 0x7c, 0x86, 0x6e, 0xab, 0x90, 0x2d, 0x19, 0xf2, 0xda, 0xa5, 0x47, 0x5d, 0xee, + 0x8d, 0xcd, 0xf8, 0xf5, 0xd8, 0xd7, 0x96, 0xc0, 0x42, 0xfc, 0xd2, 0x31, 0x74, 0x47, 0xc1, 0xdf, + 0x95, 0xf0, 0x6b, 0x99, 0x4f, 0x62, 0x2a, 0xcd, 0xf3, 0xb1, 0x69, 0x9e, 0xc3, 0x8c, 0x30, 0x13, + 0x43, 0x9b, 0x2a, 0xc1, 0x07, 0x32, 0x41, 0xd9, 0xf0, 0xce, 0xa4, 0xa0, 0xbf, 0x19, 0x0b, 0x7d, + 0x06, 0xf3, 0xa1, 0x91, 0x19, 0xaa, 0x28, 0xf4, 0x0f, 0x25, 0xfa, 0x8a, 0xf9, 0x6a, 0x4f, 0x25, + 0xf8, 0x76, 0x6c, 0x02, 0x17, 0x0a, 0x91, 0xf9, 0x44, 0x9f, 0xcb, 0x0c, 0xf7, 0x64, 0x86, 0xd5, + 0x8c, 0x1b, 0x31, 0x95, 0xe2, 0xbb, 0x49, 0xe4, 0x11, 0x56, 0xd4, 0xf2, 0xdc, 0x37, 0xca, 0x23, + 0xb6, 0xa4, 0xa0, 0xbf, 0x1f, 0x07, 0xbd, 0xf5, 0x0f, 0xc0, 0xe2, 0x57, 0xe1, 0xea, 0x53, 0xda, + 0xf3, 0xd0, 0x1e, 0x94, 0xf6, 0x29, 0x71, 0x39, 0x49, 0x7c, 0x48, 0x65, 0x57, 0xda, 0xbe, 0xec, + 0x31, 0x67, 0x0a, 0xdd, 0x03, 0x50, 0x18, 0xf2, 0xe3, 0xc4, 0x54, 0x46, 0x73, 0xdc, 0x1e, 0x14, + 0x55, 0x9c, 0x7e, 0xce, 0xcd, 0x35, 0xb2, 0x57, 0x4d, 0x9f, 0xab, 0x87, 0xfd, 0xb6, 0x33, 0x85, + 0x1e, 0xc1, 0x92, 0xc2, 0xd0, 0x8f, 0x64, 0x56, 0x19, 0xc6, 0x9c, 0x5d, 0x3e, 0x1c, 0x26, 0x8d, + 0xcd, 0x71, 0x3b, 0x50, 0xaa, 0x91, 0x16, 0x19, 0xd2, 0xed, 0xf2, 0x46, 0xdb, 0x54, 0x0b, 0x95, + 0x55, 0x45, 0x4b, 0xc5, 0x26, 0x8f, 0x7b, 0x00, 0x45, 0x15, 0x17, 0x29, 0x36, 0x79, 0xe8, 0x36, + 0x2c, 0xa9, 0x50, 0x2d, 0xd4, 0xe4, 0xb1, 0x9f, 0xc1, 0xad, 0x7a, 0xd0, 0xf1, 0x93, 0x57, 0xc3, + 0x5a, 0xd6, 0xfd, 0xc4, 0x6c, 0x3b, 0xd3, 0x3e, 0x4c, 0x16, 0xac, 0x20, 0xb0, 0x54, 0xff, 0x8f, + 0x40, 0x59, 0x36, 0xd8, 0x48, 0xc4, 0xd7, 0x60, 0x51, 0xc4, 0xeb, 0x26, 0x1f, 0x01, 0xb1, 0x6a, + 0xb6, 0x93, 0x40, 0xa9, 0x43, 0x51, 0xa0, 0xc4, 0x9d, 0x3c, 0x02, 0x06, 0x67, 0x18, 0x2a, 0xc1, + 0x46, 0xb5, 0xeb, 0x7f, 0x60, 0x23, 0x03, 0x9c, 0x29, 0xb4, 0x0b, 0xa5, 0xa3, 0xfe, 0x79, 0x2b, + 0x60, 0x3f, 0x11, 0x7f, 0x44, 0x4d, 0x33, 0x1a, 0x43, 0x02, 0x94, 0x8f, 0x09, 0x9f, 0x04, 0x23, + 0xa3, 0xb6, 0x75, 0x28, 0x9f, 0xf6, 0xfc, 0xb8, 0x09, 0xc3, 0xb7, 0x18, 0x67, 0xfd, 0x43, 0xcc, + 0xc2, 0xd9, 0x87, 0x92, 0xc2, 0x11, 0x85, 0xba, 0x2a, 0x48, 0x03, 0x56, 0x14, 0x48, 0xec, 0x99, + 0xab, 0x42, 0x3d, 0x85, 0x65, 0x05, 0x15, 0x95, 0xeb, 0xda, 0xc4, 0x44, 0xcd, 0xae, 0x08, 0x72, + 0x3e, 0x2b, 0xff, 0xfe, 0xdf, 0xfd, 0x37, 0x00, 0x00, 0xff, 0xff, 0x8a, 0xaa, 0x24, 0xc5, 0x15, + 0x10, 0x00, 0x00, } diff --git a/common/middleware/grpc_proto/wysteria.grpc.proto b/common/middleware/grpc_proto/wysteria.grpc.proto index b8d15e7..b753347 100644 --- a/common/middleware/grpc_proto/wysteria.grpc.proto +++ b/common/middleware/grpc_proto/wysteria.grpc.proto @@ -73,6 +73,7 @@ message Collection { string Parent = 95; string Id = 6; string Name = 7; + map Facets = 94; Text error = 82; } @@ -99,6 +100,7 @@ message Resource { string ResourceType = 38; string Id = 39; string Location = 40; + map Facets = 102; Text error = 85; } @@ -107,6 +109,7 @@ message Link { string Id = 44; string Src = 45; string Dst = 46; + map Facets = 97; Text error = 85; } diff --git a/common/middleware/nats.go b/common/middleware/nats.go index 9064eec..468d64e 100644 --- a/common/middleware/nats.go +++ b/common/middleware/nats.go @@ -17,6 +17,9 @@ import ( const ( // Default nats settings + maxAttempts = 3 // max initial connection attempts + retryAttempts = 3 // retry attempts on failures (for idempotent actions) + natsDefaultHost = "localhost" natsDefaultPort = 4222 natsQueueServer = "server_queue" @@ -92,8 +95,23 @@ func (c *natsClient) Connect(config *Settings) error { } // Send some raw request to the server and await reply -func (c *natsClient) serverRequest(subject string, data []byte) (*nats.Msg, error) { - return c.conn.Request(natsRouteClient+subject, data, timeout) +// - We will also retry requests on failure(s) if they're marked as idempotent +func (c *natsClient) serverRequest(subject string, data []byte, idempotent bool) (*nats.Msg, error) { + attempts := 0 + for { + msg, err := c.conn.Request(natsRouteClient+subject, data, timeout) + if err == nil || !idempotent { + // we don't need to retry or cannot :( + return msg, err + } + + attempts += 1 + if attempts >= retryAttempts { + // no more retries + return msg, err + } + continue + } } // Flush and close connection(s) to server @@ -121,7 +139,7 @@ func (c *natsClient) CreateCollection(in *wyc.Collection) (id string, err error) return } - msg, err := c.serverRequest(callCreateCollection, data) + msg, err := c.serverRequest(callCreateCollection, data, false) if err != nil { return } @@ -149,7 +167,7 @@ func (c *natsClient) CreateItem(in *wyc.Item) (id string, err error) { return } - msg, err := c.serverRequest(callCreateItem, data) + msg, err := c.serverRequest(callCreateItem, data, false) if err != nil { return } @@ -177,7 +195,7 @@ func (c *natsClient) CreateVersion(in *wyc.Version) (id string, num int32, err e return } - msg, err := c.serverRequest(callCreateVersion, data) + msg, err := c.serverRequest(callCreateVersion, data, false) if err != nil { return } @@ -201,7 +219,7 @@ func (c *natsClient) CreateResource(in *wyc.Resource) (id string, err error) { return } - msg, err := c.serverRequest(callCreateResource, data) + msg, err := c.serverRequest(callCreateResource, data, false) if err != nil { return } @@ -226,7 +244,7 @@ func (c *natsClient) CreateLink(in *wyc.Link) (id string, err error) { return } - msg, err := c.serverRequest(callCreateLink, data) + msg, err := c.serverRequest(callCreateLink, data, false) if err != nil { return } @@ -248,7 +266,7 @@ func (c *natsClient) genericDelete(id, subject string) error { return err } - msg, err := c.serverRequest(subject, data) + msg, err := c.serverRequest(subject, data, true) if err != nil { return err } @@ -303,7 +321,7 @@ func (c *natsClient) FindCollections(limit, offset int32, query []*wyc.QueryDesc return } - msg, err := c.serverRequest(callFindCollection, data) + msg, err := c.serverRequest(callFindCollection, data, true) if err != nil { return } @@ -328,7 +346,7 @@ func (c *natsClient) FindItems(limit, offset int32, query []*wyc.QueryDesc) (res return } - msg, err := c.serverRequest(callFindItem, data) + msg, err := c.serverRequest(callFindItem, data, true) if err != nil { return } @@ -353,7 +371,7 @@ func (c *natsClient) FindVersions(limit, offset int32, query []*wyc.QueryDesc) ( return } - msg, err := c.serverRequest(callFindVersion, data) + msg, err := c.serverRequest(callFindVersion, data, true) if err != nil { return } @@ -378,7 +396,7 @@ func (c *natsClient) FindResources(limit, offset int32, query []*wyc.QueryDesc) return } - msg, err := c.serverRequest(callFindResource, data) + msg, err := c.serverRequest(callFindResource, data, true) if err != nil { return } @@ -403,7 +421,7 @@ func (c *natsClient) FindLinks(limit, offset int32, query []*wyc.QueryDesc) (res return } - msg, err := c.serverRequest(callFindLink, data) + msg, err := c.serverRequest(callFindLink, data, true) if err != nil { return } @@ -429,7 +447,7 @@ func (c *natsClient) PublishedVersion(id string) (*wyc.Version, error) { return nil, err } - msg, err := c.serverRequest(callGetPublished, data) + msg, err := c.serverRequest(callGetPublished, data, true) if err != nil { return nil, err } @@ -452,7 +470,7 @@ func (c *natsClient) SetPublishedVersion(id string) error { return err } - msg, err := c.serverRequest(callSetPublished, data) + msg, err := c.serverRequest(callSetPublished, data, true) if err != nil { return err } @@ -478,7 +496,11 @@ func (c *natsClient) genericUpdateFacets(id, subject string, facets map[string]s return err } - msg, err := c.serverRequest(subject, data) + // Update facets only updates given facets to the given values on one particular thing, although we could + // technically set someone's values that've been set in the meantime, this isn't thought to be a huge deal - they + // can always be set again in this event. + // In any event, there is a debate to be had about whether it's a good plan to mark this as idempotent .. + msg, err := c.serverRequest(subject, data, true) if err != nil { return err } @@ -527,13 +549,14 @@ type natsServer struct { // If no nats config is given this is called to spin up a nats server of our own to run embedded. func (s *natsServer) spinup(options *natsd.Options) (string, error) { + log.Println("Spinning up embedded nats server") s.embedded = natsd.New(options) go s.embedded.Start() if s.embedded.ReadyForConnections(timeout) { return fmt.Sprintf("nats://%s:%d", natsDefaultHost, natsDefaultPort), nil } - return "", errors.New("Failed to spin up local nats server") + return "", fmt.Errorf("failed to spin up local nats server") } // Start up and serve client requests. @@ -1138,7 +1161,21 @@ func connect(config *Settings) (*nats.Conn, error) { opts = append(opts, nats.Secure(tlsconf)) } - return nats.Connect(config.Config, opts...) + // Connect to Nats. We'll retry a few times if things go wrong, just to say we've given it a fair + // go before throwing in the towel. + attempts := 0 + for { + conn, err := nats.Connect(config.Config, opts...) + if err != nil { + attempts += 1 + if attempts >= maxAttempts { + return conn, err + } + continue + time.Sleep(1 * time.Second) + } + return conn, err + } } // Shutdown the server and kill connections diff --git a/common/uuid.go b/common/uuid.go new file mode 100644 index 0000000..ee816e2 --- /dev/null +++ b/common/uuid.go @@ -0,0 +1,63 @@ +// Inspired by https://github.com/komuw/yuyuid/blob/master/yuyuid.go +// used to create deterministic UUIDs +// These are not intended to be cryptographically secure - simply deterministic uuid4-esque ids. + +package wysteria_common + +import ( + "crypto/md5" + "fmt" +) + +const ( + RESERVED_NCS byte = 0x80 //Reserved for NCS compatibility + RFC_4122 byte = 0x40 //Specified in RFC 4122 + RESERVED_MICROSOFT byte = 0x20 //Reserved for Microsoft compatibility + RESERVED_FUTURE byte = 0x00 // Reserved for future definition. +) + +type UUID [16]byte + +// Create a new ID string deterministically +func NewId(args ...interface{}) string { + return newUUID(args...).String() +} + +func (u UUID) String() string { + return fmt.Sprintf("%x-%x-%x-%x-%x", u[0:4], u[4:6], u[6:8], u[8:10], u[10:]) +} + +func (u *UUID) setVariant(variant byte) { + switch variant { + case RESERVED_NCS: + u[8] &= 0x7F + case RFC_4122: + u[8] &= 0x3F + u[8] |= 0x80 + case RESERVED_MICROSOFT: + u[8] &= 0x1F + u[8] |= 0xC0 + case RESERVED_FUTURE: + u[8] &= 0x1F + u[8] |= 0xE0 + } +} + +func (u *UUID) setVersion(version byte) { + u[6] = (u[6] & 0x0F) | (version << 4) +} + +func newUUID(args ...interface{}) UUID { + var uuid UUID + var version byte = 4 + + hasher := md5.New() + hasher.Write([]byte(fmt.Sprint(args...))) + + sum := hasher.Sum(nil) + copy(uuid[:], sum[:len(uuid)]) + + uuid.setVariant(RFC_4122) + uuid.setVersion(version) + return uuid +} diff --git a/common/uuid_test.go b/common/uuid_test.go new file mode 100644 index 0000000..6eaf5cf --- /dev/null +++ b/common/uuid_test.go @@ -0,0 +1,54 @@ +package wysteria_common + +import ( + "testing" +) + +func TestNewUUID(t *testing.T) { + // arrange + cases := []struct { + Args []interface{} + }{ + {[]interface{}{1, 2, 3, 4, 5}}, + {[]interface{}{0, 2, 3, 4, 5}}, + {[]interface{}{1, "kljdiad", 3, 4, 5}}, + {[]interface{}{1, 2, 3, "iadiawduiawiduhwad", 5}}, + {[]interface{}{1, 2, 3, 4, 5}}, + {[]interface{}{1, 2, true, 4, 5}}, + {[]interface{}{1, 2, "bananana", 4, 5}}, + {[]interface{}{1, 2, 3, 4, "foo"}}, + {[]interface{}{1, 2, 3, 4, "Foo"}}, + {[]interface{}{1, false, 3, true, "foo"}}, + {[]interface{}{1, false, 3, true, "foo"}}, + {[]interface{}{1, "blah", 3, "bar", "foo"}}, + {[]interface{}{"collection", "foo", "dcaa5941-7670-4fc4-b338-a085881664a1"}}, + {[]interface{}{"collection", "bar", nil}}, + {[]interface{}{"collection", "foo", "dcacc5941-7670-4fc4-b338-a085881664a1"}}, + {[]interface{}{"collection", "foo", "dcaaahww-7670-4fc4-b338-a085881664a1"}}, + {[]interface{}{"collection", "foo", "dcaa5941-7dad0-4fc4-b338-a085881664a1"}}, + {[]interface{}{"resource", "foo", "bar", "dcaa5941-7dad0-4fc4-b338-a085881664a1"}}, + {[]interface{}{"resource", "foo", "z", "dcaa5941-7dad0-4fc4-b338-a085881664a1"}}, + {[]interface{}{"resource", "foo", "thumbnail", "/akjdjw/amdwm/aw"}}, + {[]interface{}{"resource", "foo", "png", "/bar/bar/foo/moo"}}, + {[]interface{}{"resource", "foo", "jpeg", "dcaa5941-7dad0-4fc4-b338-a085881664a1"}}, + } + + soFar := map[string]bool{} + + for i, tst := range cases { + // act + a := newId(tst.Args...) + b := newId(tst.Args...) + + _, ok := soFar[a] + + // assert + if ok { + t.Error(i, "Repeated id formed from", tst.Args) + } + + if a != b { + t.Error(i, "Expected", a, b, "to be equal given", tst.Args) + } + } +} diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 0000000..5e2b288 --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,111 @@ +version: "3" + # + # Simple docker-compose config file. + # Nb. No passwords or SSL are used here, which .. could be important to the reader .. + # +services: + # ------------------------------------------------------------------------ + # Supporting Services + # ------------------------------------------------------------------------ + database: + # vanilla mongo image + image: mongo + ports: + - "27017:27017" + searchbase: + # vanilla elasticsearch image + image: elasticsearch + ports: + - "9200:9200" + middleware: + # vanilla nats.io image + image: nats + ports: + - "4222:4222" + # ------------------------------------------------------------------------ + # Wysteria variants + # ------------------------------------------------------------------------ + sololocal: + # wysteria using all embedded settings & local repository + image: wysteria/wysteria:local + ports: + - "31000:31000" + environment: + WYS_SEARCHBASE_DRIVER: "bleve" + WYS_SEARCHBASE_NAME: "searchdata" + WYS_DATABASE_DRIVER: "bolt" + WYS_DATABASE_NAME: "data" + WYS_MIDDLEWARE_DRIVER: "grpc" + WYS_MIDDLEWARE_CONFIG: ":31000" + WYS_MIDDLEWARE_SSL_CERT: "" + WYS_MIDDLEWARE_SSL_KEY: "" + WYS_MIDDLEWARE_SSL_VERIFY: "false" + WYS_MIDDLEWARE_SSL_ENABLE: "false" + local: + # wysteria using nats.io, mongo & elasticsearch w/ local repository + image: wysteria/wysteria:local + environment: + WYS_SEARCHBASE_DRIVER: "elastic" + WYS_SEARCHBASE_NAME: "data" + WYS_SEARCHBASE_PORT: "9200" + WYS_SEARCHBASE_HOST: "searchbase" + WYS_DATABASE_DRIVER: "mongo" + WYS_DATABASE_NAME: "data" + WYS_DATABASE_PORT: "27017" + WYS_DATABASE_HOST: "database" + WYS_MIDDLEWARE_DRIVER: "nats" + WYS_MIDDLEWARE_CONFIG: "nats://middleware:4222" + WYS_MIDDLEWARE_SSL_CERT: "" + WYS_MIDDLEWARE_SSL_KEY: "" + WYS_MIDDLEWARE_SSL_VERIFY: "false" + WYS_MIDDLEWARE_SSL_ENABLE: "false" + links: + - database + - searchbase + - middleware + depends_on: + - database + - searchbase + - middleware + solomaster: + # wysteria using all embedded settings & repository master + image: wysteria/wysteria:master + ports: + - "31000:31000" + environment: + WYS_SEARCHBASE_DRIVER: "bleve" + WYS_SEARCHBASE_NAME: "searchdata" + WYS_DATABASE_DRIVER: "bolt" + WYS_DATABASE_NAME: "data" + WYS_MIDDLEWARE_DRIVER: "grpc" + WYS_MIDDLEWARE_CONFIG: ":31000" + WYS_MIDDLEWARE_SSL_CERT: "" + WYS_MIDDLEWARE_SSL_KEY: "" + WYS_MIDDLEWARE_SSL_VERIFY: "false" + WYS_MIDDLEWARE_SSL_ENABLE: "false" + master: + # wysteria using nats.io, mongo & elasticsearch w/ repository master + image: wysteria/wysteria:master + environment: + WYS_SEARCHBASE_DRIVER: "elastic" + WYS_SEARCHBASE_NAME: "data" + WYS_SEARCHBASE_PORT: "9200" + WYS_SEARCHBASE_HOST: "searchbase" + WYS_DATABASE_DRIVER: "mongo" + WYS_DATABASE_NAME: "data" + WYS_DATABASE_PORT: "27017" + WYS_DATABASE_HOST: "database" + WYS_MIDDLEWARE_DRIVER: "nats" + WYS_MIDDLEWARE_CONFIG: "nats://middleware:4222" + WYS_MIDDLEWARE_SSL_CERT: "" + WYS_MIDDLEWARE_SSL_KEY: "" + WYS_MIDDLEWARE_SSL_VERIFY: "false" + WYS_MIDDLEWARE_SSL_ENABLE: "false" + links: + - database + - searchbase + - middleware + depends_on: + - database + - searchbase + - middleware diff --git a/docker/images/README.md b/docker/images/README.md new file mode 100644 index 0000000..62b9efe --- /dev/null +++ b/docker/images/README.md @@ -0,0 +1,10 @@ +On generating self signed certs for testing: + +https://www.akadia.com/services/ssh_test_certificate.html + +openssl genrsa -des3 -out server.key 4098 +openssl req -new -key server.key -out server.csr +mv server.key{,.org} +openssl rsa -in server.key.org -out server.key +openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt + diff --git a/docker/images/local/Dockerfile b/docker/images/local/Dockerfile new file mode 100644 index 0000000..c224b85 --- /dev/null +++ b/docker/images/local/Dockerfile @@ -0,0 +1,84 @@ +# Builds server using the local wysteria src code. +# This is used for testing wysteria internally and isn't intended to be generally helpful to others. +# +FROM golang + +# install glide +# > provides 'glide' for installing Go dependencies +RUN curl https://glide.sh/get | sh + +# install 'gettext' +# > provides 'envsubst' command so we can write ENV vars to server ini on RUN +RUN apt-get update +RUN apt-get install -y gettext + +# make dir & install depends +RUN mkdir -p $GOPATH/src/github.com/voidshard/wysteria +WORKDIR $GOPATH/src/github.com/voidshard/wysteria +ADD glide.lock . +ADD glide.yaml . +RUN glide install + +# whack in local wysteria files +ADD server server +ADD client client +ADD common common + +# build server +WORKDIR $GOPATH/src/github.com/voidshard/wysteria/server +RUN go build -o server *.go + +# expose the nats port +EXPOSE 4222 + +# expose the grpc default port +EXPOSE 31000 + +# expose health port +EXPOSE 8150 + +# set up env vars w/ defaults +# > we'll stick defaults in here (or null, if there is none). Our bootstrap will use envsubst to write a final config +# that'll be passed into wysteria on boot +ENV WYS_DATABASE_DRIVER bolt +ENV WYS_DATABASE_NAME wysteria_d +ENV WYS_DATABASE_PORT null +ENV WYS_DATABASE_HOST null +ENV WYS_DATABASE_USER null +ENV WYS_DATABASE_PASS null +ENV WYS_DATABASE_PEM null2 +ENV WYS_SEARCHBASE_DRIVER bleve +ENV WYS_SEARCHBASE_NAME wysteria_s +ENV WYS_SEARCHBASE_PORT null +ENV WYS_SEARCHBASE_HOST null +ENV WYS_SEARCHBASE_USER null +ENV WYS_SEARCHBASE_PASS null +ENV WYS_SEARCHBASE_PEM null +ENV WYS_SEARCHBASE_REINDEX false +ENV WYS_MIDDLEWARE_DRIVER grpc +ENV WYS_MIDDLEWARE_CONFIG :31000 +ENV WYS_MIDDLEWARE_SSL_CERT /usr/ssl/test.crt +ENV WYS_MIDDLEWARE_SSL_KEY /usr/ssl/test.key +ENV WYS_MIDDLEWARE_SSL_VERIFY false +ENV WYS_MIDDLEWARE_SSL_ENABLE false +ENV WYS_HEALTH_PORT 8150 +ENV WYS_HEALTH_ENDPOINT /health +ENV WYS_LOGGER_NAME logs +ENV WYS_LOGGER_DRIVER logfile +ENV WYS_LOGGER_LOCATION /var/log +ENV WYS_LOGGER_TARGET wysteria.log + +# add test certs +RUN mkdir /usr/ssl/ +WORKDIR /usr/ssl/ +ADD test.crt . +ADD test.csr . +ADD test.key . + +# add the template ini, and the env substitution bootstrap +WORKDIR $GOPATH/src/github.com/voidshard/wysteria/server +ADD wysteria-server.ini.template . +ADD start.sh . + +# boot server +ENTRYPOINT ["./start.sh", "-v"] diff --git a/docker/images/local/build.sh b/docker/images/local/build.sh new file mode 100755 index 0000000..7ce25be --- /dev/null +++ b/docker/images/local/build.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +# +# Builds docker from local files +# + +# fail on error +set -eu + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +# set CWD to DIR, just incase +cd ${DIR} + +# make us a temp build dir +mkdir ./build/ + +# whack in all the wysteria files we'll need +cp Dockerfile ./build/ +cp ${DIR}/../start.sh ./build/ +cp ${DIR}/../test.crt ./build/ +cp ${DIR}/../test.key ./build/ +cp ${DIR}/../test.csr ./build/ +cp ${DIR}/../wysteria-server.ini.template ./build/ +cp -r ${DIR}/../../../common ./build/ +cp -r ${DIR}/../../../server ./build/ +cp -r ${DIR}/../../../client ./build/ +cp -r ${DIR}/../../../glide.lock ./build/ +cp -r ${DIR}/../../../glide.yaml ./build/ + +# cd into the build dir +cd ./build/ + +# no fail on err (we want to rm the build file no matter what docker does) +set +e + +# call docker to do it's thing +docker build -t wysteria/wysteria:local ./ + +# fail on error +set -eu + +# finally, we can remove the tmp build dir +rm -r ${DIR}/build diff --git a/docker/images/master/Dockerfile b/docker/images/master/Dockerfile new file mode 100644 index 0000000..b184774 --- /dev/null +++ b/docker/images/master/Dockerfile @@ -0,0 +1,72 @@ +# Builds Wysteria by pulling from github +# +FROM golang + +# install glide +# > provides 'glide' for installing Go dependencies +RUN curl https://glide.sh/get | sh + +# install 'gettext' +# > provides 'envsubst' command so we can write ENV vars to server ini on RUN +RUN apt-get update +RUN apt-get install -y gettext + +# clone wysteria +RUN go get github.com/voidshard/wysteria/server + +# install dependencies via glide +# > glide will perform a whole lot of go getting for us automagically +WORKDIR $GOPATH/src/github.com/voidshard/wysteria +RUN glide install + +# build server +WORKDIR $GOPATH/src/github.com/voidshard/wysteria/server +RUN go build -o server *.go + +# set up env vars w/ defaults +# > we'll stick defaults in here (or null, if there is no value). Our bootstrap will use envsubst to write a final +# config that'll be passed into wysteria on boot +ENV WYS_DATABASE_DRIVER bolt +ENV WYS_DATABASE_NAME wysteria_d +ENV WYS_DATABASE_PORT null +ENV WYS_DATABASE_HOST null +ENV WYS_DATABASE_USER null +ENV WYS_DATABASE_PASS null +ENV WYS_DATABASE_PEM null2 +ENV WYS_SEARCHBASE_DRIVER bleve +ENV WYS_SEARCHBASE_NAME wysteria_s +ENV WYS_SEARCHBASE_PORT null +ENV WYS_SEARCHBASE_HOST null +ENV WYS_SEARCHBASE_USER null +ENV WYS_SEARCHBASE_PASS null +ENV WYS_SEARCHBASE_PEM null +ENV WYS_SEARCHBASE_REINDEX false +ENV WYS_MIDDLEWARE_DRIVER grpc +ENV WYS_MIDDLEWARE_CONFIG :31000 +ENV WYS_MIDDLEWARE_SSL_CERT null +ENV WYS_MIDDLEWARE_SSL_KEY null +ENV WYS_MIDDLEWARE_SSL_VERIFY false +ENV WYS_MIDDLEWARE_SSL_ENABLE false +ENV WYS_HEALTH_PORT 8150 +ENV WYS_HEALTH_ENDPOINT /health +ENV WYS_LOGGER_NAME logs +ENV WYS_LOGGER_DRIVER logfile +ENV WYS_LOGGER_LOCATION /var/log +ENV WYS_LOGGER_TARGET wysteria.log + +# expose the nats port +# > if the WYS_NATS_CONFIG connects to another host this wont get used, otherwise the embedded Nats will listen here. +EXPOSE 4222 + +# expose the grpc default port +EXPOSE 31000 + +# expose health port +EXPOSE 8150 + +# add the template ini, and the env substitution bootstrap +ADD wysteria-server.ini.template . +ADD start.sh . + +# boot server +ENTRYPOINT ["./start.sh"] diff --git a/docker/images/master/build.sh b/docker/images/master/build.sh new file mode 100755 index 0000000..99df63a --- /dev/null +++ b/docker/images/master/build.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +# +# Builds docker pulling master from github.com/voidshard/wysteria +# + +# fail on error +set -eu + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +# set CWD to DIR, just incase +cd ${DIR} + +# make us a temp build dir +mkdir ./build/ + +# whack in all the wysteria files we'll need +cp Dockerfile ./build/ +cp ${DIR}/../start.sh ./build/ +cp ${DIR}/../wysteria-server.ini.template ./build/ + +# move to build dir +cd ${DIR}/build + +# no fail on err (we want to rm the build file no matter what docker does) +set +e + +# call docker to do it's thing +docker build -t wysteria/wysteria:master ./ + +# fail on error +set -eu + +# finally, we can remove the tmp build dir +rm -r ${DIR}/build diff --git a/docker/images/start.sh b/docker/images/start.sh new file mode 100755 index 0000000..6f49c69 --- /dev/null +++ b/docker/images/start.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +# +# This script is copied into a docker image at build time (along with the wysteria-server.ini.template). +# It writes ENV vars given to Docker into the ini.template file & remove empty / null lines before starting +# wysteria. Thus we can change the config file at `docker run` time -> yaaaaay! +# + +# fail on error +set -eu + +# write the WYS_* env variables into our config file +envsubst < wysteria-server.ini.template > ./wysteria-server.ini + +# remove lines containing the null string (INI parser doesn't seem to like placeholder lines) +sed -i '/null/d' ./wysteria-server.ini + +# print out the config to be extra helpful, but don't print any passwords2 +cat ./wysteria-server.ini | grep -v "Pass=" + +# kick off wysteria proper +./server $@ diff --git a/docker/images/test.crt b/docker/images/test.crt new file mode 100644 index 0000000..4cc8202 --- /dev/null +++ b/docker/images/test.crt @@ -0,0 +1,29 @@ +-----BEGIN CERTIFICATE----- +MIIE9TCCAtwCCQCf06HKTmVZXzANBgkqhkiG9w0BAQsFADA8MQswCQYDVQQGEwJ1 +azEPMA0GA1UEBwwGbG9uZG9uMRwwGgYDVQQKDBNEZWZhdWx0IENvbXBhbnkgTHRk +MB4XDTE4MDMyMzIyMTQyM1oXDTE5MDMyMzIyMTQyM1owPDELMAkGA1UEBhMCdWsx +DzANBgNVBAcMBmxvbmRvbjEcMBoGA1UECgwTRGVmYXVsdCBDb21wYW55IEx0ZDCC +AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAt0qpmC0T9ohWUmXDz5DLCxj +6JMNKvEHRH08jfx6+jZOLWz16/rWSeW5R58WTOTeepJybZqcK+yd1Er3FK64upmk +PEUJ3kAzb5F/dM2ZoBG2A5E1OAEqBs4CVryq2ayrFLBIdob8Q/YJXmF30gt/D1pC +aGDlhTtMRijjvjNOdBmsCppbZEjEYnBZL+9wdovJB0I+5nFV1J8HypYSKhRIFFcb +f7O22mqa4Bo717MisRt6kJ4Nw0VOxGXm5wUaeH6EG4y164wiLj1l1bEgJOdiAU8N +NPPJISQL9ZdELcbEukTkawhf2A+sMYofm6TFUu7sR00hAscGpd14Rziltf++Ityq +0zAHe7AtN3xjJCbAH6tMjCyu2ASPOznsJokoUnkmNU2TuS+36GSGYyrrXlvRm77n +kMe4c0qow2b6ev4K8+LLswHbtGNaECQCEBJ3VfzzjlF3eBY1uADd54xF/4XAa+Wf +CIM5oKcmbC6OY1t2Ju96gsgnSHcCUagonFBrV6IvKuCTqqRUUpXXjhjD0j8JY0CE +t2wLLrFQxgkjVAIDZesJL8bobu/6EYuzow97GJWYGLo/Pr2b+Ov2BbbjMwh6ilBO +TEgub9Fbbv12HewBQuAM6w2Jh+G3rZSNJlW4kLEioF1le6j6dge1B+Sa0FCOlp84 +t0sBvqh/yR0uZQF/eOijAgMBAAEwDQYJKoZIhvcNAQELBQADggICAAEI0L5iIGAc +os/CIlcCWeAOboSnylK5/OxVw/0ShTDlwTh+JfspB0jy7LxjpufakgQG3ZupJvUp +CmYLZuKnr1z/DBXXbGqnTM3AtXAwGBM+N5Prknv/ocbriYD9y9sWnGcp3HYVi6hu +t6TOtgElxwbdrNoywhhzK/R4X53/i+uwDN97vR5vKga7Xc1DD0fS1067SyqjKcxv +xJIvaYq6VX+RRhXKK08NwYMhvbxzkgyUEdbf2NV6th25v5L/s0OMu2X34d74sCS1 +gTaad0YmmYecdPcqNIMhO+4JlcKY/K/UD+1WXMzG7DtQhABA3DSofaYE35mUDH6O +gOLUL5huHz0ZGk09+OIN4ggh7QhTZPUjCzqx3ftw4a4gBJHiIYPAnoKdapZdvbDf +9by23brO1abvuqN+R5TawZpkVBl/VveKnvcdmaBMWHzxf91TfPtM+Dz4HLk4Attr +Jp3Il5CJ9NjSXcr7Y11Aps0/B2U5rZz1KUKTbJsGrv+ucP0coAm6bZu/2YZgyquZ +cy4iLapg16Fv0be4teSX3wE8A0a6oo/lSt3jEzdKIhUNpY0WEtAfEHHzID58Gbmg +ySgEm2EhK/uuZIHF+lhx050gezxZkcUFc7HvODf33vp7Q8lsTNcKfITR09B3vxkK +G4W5it9+F/ob99bBezRrVlMYKDp4+lZGzg== +-----END CERTIFICATE----- diff --git a/docker/images/test.csr b/docker/images/test.csr new file mode 100644 index 0000000..0bad166 --- /dev/null +++ b/docker/images/test.csr @@ -0,0 +1,27 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIIEgjCCAmkCAQAwPDELMAkGA1UEBhMCdWsxDzANBgNVBAcMBmxvbmRvbjEcMBoG +A1UECgwTRGVmYXVsdCBDb21wYW55IEx0ZDCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBAt0qpmC0T9ohWUmXDz5DLCxj6JMNKvEHRH08jfx6+jZOLWz16/rW +SeW5R58WTOTeepJybZqcK+yd1Er3FK64upmkPEUJ3kAzb5F/dM2ZoBG2A5E1OAEq +Bs4CVryq2ayrFLBIdob8Q/YJXmF30gt/D1pCaGDlhTtMRijjvjNOdBmsCppbZEjE +YnBZL+9wdovJB0I+5nFV1J8HypYSKhRIFFcbf7O22mqa4Bo717MisRt6kJ4Nw0VO +xGXm5wUaeH6EG4y164wiLj1l1bEgJOdiAU8NNPPJISQL9ZdELcbEukTkawhf2A+s +MYofm6TFUu7sR00hAscGpd14Rziltf++Ityq0zAHe7AtN3xjJCbAH6tMjCyu2ASP +OznsJokoUnkmNU2TuS+36GSGYyrrXlvRm77nkMe4c0qow2b6ev4K8+LLswHbtGNa +ECQCEBJ3VfzzjlF3eBY1uADd54xF/4XAa+WfCIM5oKcmbC6OY1t2Ju96gsgnSHcC +UagonFBrV6IvKuCTqqRUUpXXjhjD0j8JY0CEt2wLLrFQxgkjVAIDZesJL8bobu/6 +EYuzow97GJWYGLo/Pr2b+Ov2BbbjMwh6ilBOTEgub9Fbbv12HewBQuAM6w2Jh+G3 +rZSNJlW4kLEioF1le6j6dge1B+Sa0FCOlp84t0sBvqh/yR0uZQF/eOijAgMBAAGg +ADANBgkqhkiG9w0BAQsFAAOCAgIAAZ/4skxqarveGv6LbeaHllrui+y9lvXLJRcD +33BhwBSbN0KApVixLnEP9IPbx/JoCI+NKRibEEUOMlHrcf72dt25QrIHJIQTPdyu +uBnzRsgbYocsxo3T4pTzFAo+lJYeYeFwttPME5NfFHADdHGJUFQtFUyhy58yXwox +p2yZNyLSGmQ3j89qndXf86gYS5m0nDYlpKHHMo7490KLX5CCAW+KIf8tHYAfkYn7 +xj37MgqsxWBob8GAfyMyqSHx2Ycfuagf+06qNvegTZdfzvUv4qnrKjdP7KVUy4Hj +exHeKFoydi72X6f18yzWBN9KYSMiFBawJWIVwRJcBG+5AR/W1phuZNu2KWT8KYFo +Iuq7D/SWP/+CuRPUSV+KHNn7qGq48IsnyaTe59i6Ro4Jh2WnjUHKL5wgfX9PoWwT +2eaUM160WO9UotDbEFZUY6pOU2ooawWSVQPvq9t9FhH4ZZgQm8AfDUv+En+1/QNt +qVnc0T3jgzwWl04f66+jA+OktTVjkyS5DNYBQEODf/FTICltzais6KcHN1eR3cnn +NQ9YRxi9G3mX8ZvQCdmoBQsBiK31mcKlTvh/9EyMm4NRHPBfnsyvYcYsFHfjWDR8 +BAZJ+P7qbQBt/ldWJnkgVnBEb5I5ymRbmVGyGpLxqhtMvCHdLmCTSKmYOJvPkDsz +1oTMdx2t +-----END CERTIFICATE REQUEST----- diff --git a/docker/images/test.key b/docker/images/test.key new file mode 100644 index 0000000..70eedcc --- /dev/null +++ b/docker/images/test.key @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIJKgIBAAKCAgEC3SqmYLRP2iFZSZcPPkMsLGPokw0q8QdEfTyN/Hr6Nk4tbPXr ++tZJ5blHnxZM5N56knJtmpwr7J3USvcUrri6maQ8RQneQDNvkX90zZmgEbYDkTU4 +ASoGzgJWvKrZrKsUsEh2hvxD9gleYXfSC38PWkJoYOWFO0xGKOO+M050GawKmltk +SMRicFkv73B2i8kHQj7mcVXUnwfKlhIqFEgUVxt/s7baaprgGjvXsyKxG3qQng3D +RU7EZebnBRp4foQbjLXrjCIuPWXVsSAk52IBTw0088khJAv1l0QtxsS6RORrCF/Y +D6wxih+bpMVS7uxHTSECxwal3XhHOKW1/74i3KrTMAd7sC03fGMkJsAfq0yMLK7Y +BI87OewmiShSeSY1TZO5L7foZIZjKuteW9GbvueQx7hzSqjDZvp6/grz4suzAdu0 +Y1oQJAIQEndV/POOUXd4FjW4AN3njEX/hcBr5Z8IgzmgpyZsLo5jW3Ym73qCyCdI +dwJRqCicUGtXoi8q4JOqpFRSldeOGMPSPwljQIS3bAsusVDGCSNUAgNl6wkvxuhu +7/oRi7OjD3sYlZgYuj8+vZv46/YFtuMzCHqKUE5MSC5v0Vtu/XYd7AFC4AzrDYmH +4betlI0mVbiQsSKgXWV7qPp2B7UH5JrQUI6Wnzi3SwG+qH/JHS5lAX946KMCAwEA +AQKCAgA9+fD+k798TP1jPyXGuZ7uUbPDWoWawmaDv66w/SRRmuI0J8W++oZcqQDo +7dWqMzRhVNL3EuSTp/PeMmzJKEx92GhP3bmv66kuv3t8NdRWKvC6QaluT8Mrfv8e +C8NC2WNyU23Rk1mbXsdfreVPm3oMwzhXmI9ep9/2bOoTJDqkQOrUiY08qX04yhFH +SFZ9Eo1OiEqqofrLRrlVXku4Uy+E/YoaAwcLo/P1w8FEH1ahYAcBlWBAZ5wqkQ5O +XCJ7b2d0yZwTyH/oKMebpX/5H0vFBvTG9uWaSniERPsppk+oqzZxCskU6hV1+54I +m7WbBNYyKuw1LtaulhBPNZLg/42qmAKCdYjEr4g15bPMyhb+ye3ZEBF5sRnSk9Bo +ftc208zMU8pOh9Pya774VXMHVDtrY6h+XuX9UK3cb+siZZhinfGN1lp8yFRZpexZ +jCTYBo2HL7LRGWTENSENaqFAcyooGtdAydnSsIYSb1yVTG/NG3IsoqMXQ4qbtSrL +Me+U1hcW0bW/VQmKLOCQ7gvQdIoo9ytQ4ozUWB01Od7PavlRU0KnhzgP+ZurLSw1 +xd9xLh671uf/XY2X02qHCH0q02+5t4yhBviTdvaTV9+dhteuL963lLoKOk9WdaXc +eEFF/6jtbjaNpyNmi5CRqPl/8d/RdiLZaChO/dl72Hi5WXtuYQKCAQEB5Fyrusk4 +UQOx8fYLou/FYI2//KBJQwNRjodZtzqUSXWI6LxMnlSRF4Gnr5A7IrXcHuwFuumA +xm27HuYsEDc92YruxQmct0v0ckKqDXFk3R/UrarJUwhaoavMSHYqIJMfrr3Tz66g +7e+LnGkwH6cxewAWMJDpqil1i7WPZMoU8K3rJlnIW8gNftN08BfJvu2ZJvg4ESQz +Fc454VAqYTyZ7121/sdGSqMQOhdKZoEuXF5txoD1C5m08UQ5uGIsVrRy3NSQM9XM +EMwJefgDq+rth/u+UEIb6910vL8QJ2/Lrr82McU6ixMoil4VfeJQ0E2AhtVe3e+x +n/NKqKVX4zbuZQKCAQEBg4Ay+BPGZvlQ6lroAvM7FtjDqoWm2LelMa1nTCOlgjIt +Qj+Bl4WsoaWfH+yXA200VvlR0nRWbBOh+qdhv9R6grEMn53gkVba/GT/xdTgBG44 +5W9dsiwn51Wxxcbziqej4edxz9rlBrr5kVpBGgGck8iPXJM8ct84uRDhVqTl440u +sJIPCsy9pyiI56gLLYELTUiI6m93KbTWI7MxkR9SXjYegQ5I8CQkMU2HP5o4Nl8V +UHRMSA5gj3XG9n9g01AsllOmEXKJqBHvEOXjmU7XvRVpT79xrcwFtNkIqFZlIdx7 +V8G2cY47FCdxJOqhIqnSFPDqVl/qk0pgYyhhm0wmZwKCAQEBD9YGt1zpE2a8fqx1 +GWvx3V+QqUqX81kwc4p5CoGA6b1iKiRL5+xURdoJb1nGJpPkRyJ1kNIt6K96/jt1 +7V/jgW0c1k6vupuRRHMvlz3Vuth7d0BLnyMoImYVz3Ep8YBAnsSA1KUQQplXRGAw +lwMxnPOOgJFD4rFD/DXYlVto5y7ks3BeJ0yeblhk376qBlK4yosyhERJu2ozR8XD +EzF8vz9bvfK++3KKz990bRUBHOwONgL4BBuu1l1Q+691bO/3KwLNL5pE3gR1KRPN +k7XUu6XIyKhhnT17n9anTUrMCHXeB47GbXlCHm3xJ+ZVLqLgiEvF40775GYZt46c +RbP1lQKCAQEBXsty2NQGG3h+gPo06V7KUl9/muKNbcmqubMyPWJT1e6YvE2DgulX +o6qsyBjFiSuWY1oncW8yQXrwe1qGCkRPd/rR47nn74sCidThG3YgKsKhrUrJNp/0 +q98PJW17Uj17BeohRTrzdMlVXvmmz+U/myXIatU7tv5PenJGnMqA9yP7bYt8JJm+ +4xG2BolBPTuCQL92e0zXQqFb7kuthqQlS/aQXOLSstr1DNETrEdvtgET6Zau69hg +H99OdB5SSFpfUuN9BnR7G/TISLLk/Qe8FIfKo5A7WEvHqrWDuekkeqf/3S0Xfet1 +nkQqkHH718aG0cBbVEBWumptobaPzif85wKCAQEBE9oYFG18yAJllmwHgQZflh8q +F9pjP8Dd/Fs3IJWhov3nG95rcmpVisy/RhNr9BLQ6772RvGD2O9gmVvIyBD5am8c +mCtzmrewrDTTzMBkcMCGRdIf9CdS4dQADtymEp+aEatWxZ2S3aSPbHO2tE5BIQUW +nTYcrAFtPO/LxTztAwZFwzZbPxtZs9G8f//Znk8M5uiJGF+KZzn0K7AIM9Wig/yc +SNBOOFoI58u98Y1vv1lIRYdHZ/d3eScZoYcZcHbBke/GtkL11BR020GShQcmMOoS +bStGXDbsqCBrlaigEhej5W6gSlRbFokN1aS8etdU0V3WoGh0I6ruGu5AC2rUiA== +-----END RSA PRIVATE KEY----- diff --git a/docker/images/wysteria-server.ini.template b/docker/images/wysteria-server.ini.template new file mode 100644 index 0000000..7171305 --- /dev/null +++ b/docker/images/wysteria-server.ini.template @@ -0,0 +1,35 @@ +[Database] +Driver=${WYS_DATABASE_DRIVER} +Database=${WYS_DATABASE_NAME} +Port=${WYS_DATABASE_PORT} +Host=${WYS_DATABASE_HOST} +User=${WYS_DATABASE_USER} +Pass=${WYS_DATABASE_PASS} +PemFile=${WYS_DATABASE_PEM} + +[Searchbase] +Driver=${WYS_SEARCHBASE_DRIVER} +Database=${WYS_SEARCHBASE_NAME} +Port=${WYS_SEARCHBASE_PORT} +Host=${WYS_SEARCHBASE_HOST} +User=${WYS_SEARCHBASE_USER} +Pass=${WYS_SEARCHBASE_PASS} +PemFile=${WYS_SEARCHBASE_PEM} +ReindexOnWrite=${WYS_SEARCHBASE_REINDEX} + +[Middleware] +Driver=${WYS_MIDDLEWARE_DRIVER} +Config=${WYS_MIDDLEWARE_CONFIG} +SSLCert=${WYS_MIDDLEWARE_SSL_CERT} +SSLKey=${WYS_MIDDLEWARE_SSL_KEY} +SSLVerify=${WYS_MIDDLEWARE_SSL_VERIFY} +SSLEnableTLS=${WYS_MIDDLEWARE_SSL_ENABLE} + +[Health] +Port=${WYS_HEALTH_PORT} +EndpointHealth=${WYS_HEALTH_ENDPOINT} + +[Instrumentation "${WYS_LOGGER_NAME}"] +Driver=${WYS_LOGGER_DRIVER} +Location=${WYS_LOGGER_LOCATION} +Target=${WYS_LOGGER_TARGET} diff --git a/glide.lock b/glide.lock index 4c59a89..4157ae7 100644 --- a/glide.lock +++ b/glide.lock @@ -1,8 +1,14 @@ -hash: 30594f3b3c00ad084b3913a37eaac1318a3f017bf0c8abc6b894785d8dca2965 -updated: 2017-05-25T14:38:50.634658677+12:00 +hash: 25bbe74813e445c3895c73faafede9896411720d8fa5faf5a7003304a77c4a87 +updated: 2018-03-24T15:51:56.757994475Z imports: +- name: github.com/alecthomas/template + version: a0175ee3bccc567396460bf5acd36800cb10c49c + subpackages: + - parse +- name: github.com/alecthomas/units + version: 2efee857e7cfd4f3d0138cc3cbb1b4966962b93a - name: github.com/blevesearch/bleve - version: 67bef4e679e07147c541ab21dfa9ae45bf851ced + version: 1f7faf7e0186a260740ce38665c3c3eb2697f728 subpackages: - analysis - analysis/analyzer/standard @@ -16,6 +22,10 @@ imports: - document - geo - index + - index/scorch + - index/scorch/mergeplan + - index/scorch/segment + - index/scorch/segment/zap - index/store - index/store/boltdb - index/store/gtreap @@ -34,6 +44,7 @@ imports: - search/query - search/scorer - search/searcher + - size - name: github.com/blevesearch/go-porterstemmer version: 23a2c8e5cf1f380f27722c6d2ae8896431dc7d0e repo: https://github.com/blevesearch/go-porterstemmer @@ -41,13 +52,38 @@ imports: version: db70c57796cc8c310613541dfade3dce627d09c7 repo: https://github.com/blevesearch/segment - name: github.com/boltdb/bolt - version: 583e8937c61f1af6513608ccc75c97b6abdf4ff9 + version: 2f1ce7a837dcb8da3ec595b1dac9d0632f0f99e8 +- name: github.com/couchbase/vellum + version: 5083a469fcef50a4705e3c90652246ecd6806f2a + subpackages: + - regexp + - utf8 +- name: github.com/edsrzf/mmap-go + version: 935e0e8a636ca4ba70b713f3e38a19e1b77739e8 +- name: github.com/fgrid/uuid + version: 6f72a2d331c927473b9b19f590d43ccb5018c844 +- name: github.com/glycerine/go-unsnap-stream + version: 9f0cb55181dd3a0a4c168d3dbc72d4aca4853126 - name: github.com/golang/protobuf - version: 7a211bcf3bce0e3f1d74f9894916e6f116ae83b4 + version: bbd03ef6da3a115852eaf24c8a1c46aeb39aa175 subpackages: - proto - protoc-gen-go/descriptor + - ptypes - ptypes/any + - ptypes/duration + - ptypes/timestamp +- name: github.com/golang/snappy + version: cef980a12b316c5b7e5bb3a8e168eb43ae999a88 + repo: https://github.com/golang/snappy +- name: github.com/mailru/easyjson + version: 8b799c424f57fa123fc63a99d6383bc6e4c02578 + subpackages: + - buffer + - jlexer + - jwriter +- name: github.com/mschoch/smat + version: 90eadee771aeab36e8bf796039b8c261bebebe4f - name: github.com/nats-io/gnatsd version: 5dcad241bcd7fff3aac6e9f8b47350f071f5fd38 subpackages: @@ -62,18 +98,38 @@ imports: - encoders/builtin - util - name: github.com/nats-io/nuid - version: 289cccf02c178dc782430d534e3c1f5b72af807f - repo: https://github.com/nats-io/nuid + version: 3e58d42c9cfe5cd9429f1a21ad8f35cd859ba829 +- name: github.com/olivere/elastic + version: d78530f6439d6cd674892320b6917d7c4cb25f7f + subpackages: + - config + - uritemplates +- name: github.com/philhofer/fwd + version: bb6d471dc95d4fe11e432687f8b70ff496cf3136 +- name: github.com/pkg/errors + version: 816c9085562cd7ee03e7f8188a1cfd942858cded - name: github.com/pquerna/ffjson - version: 0a1032732ea92f86ab22e27b9d55cd182f2f4a1b + version: d49c2bc1aa135aad0c6f4fc2056623ec78f5d5ac subpackages: - fflib/v1 - fflib/v1/internal +- name: github.com/RoaringBitmap/roaring + version: 01d244c43a7e8d1191a4f369f5908ea9eb9bc9ac + repo: https://github.com/RoaringBitmap/roaring +- name: github.com/Smerity/govarint + version: 7265e41f48f15fd61751e16da866af3c704bb3ab - name: github.com/steveyen/gtreap version: 0abe01ef9be25c4aedc174758ec2d917314d6d70 repo: https://github.com/steveyen/gtreap +- name: github.com/tinylib/msgp + version: 3b5c87ab5fb00c660bf85b888445d9a01db64db4 + subpackages: + - msgp +- name: github.com/willf/bitset + version: 2e6e8094ef4745224150c88c16191c7dceaad16f + repo: https://github.com/willf/bitset - name: golang.org/x/net - version: 7dcfb8076726a3fdd9353b6b8a1f1b6be6811bd6 + version: 6078986fec03a1dcc236c34816c71b0e05018fda subpackages: - context - http2 @@ -83,26 +139,32 @@ imports: - lex/httplex - trace - name: golang.org/x/sys - version: a55a76086885b80f79961eacb876ebd8caf3868d + version: 91ee8cde435411ca3f1cd365e8f20131aed4d0a1 subpackages: - unix - name: golang.org/x/text - version: 19e51611da83d6be54ddafce4a4af510cb3e9ea4 + version: ab48842968a66deafa354805a8b031924668e059 subpackages: - secure/bidirule - transform - unicode/bidi - unicode/norm - name: google.golang.org/genproto - version: d80a6e20e776b0b17a324d0ba1ab50a39c8e8944 + version: ab0870e398d5dd054b868c0db1481ab029b9a9f2 subpackages: - googleapis/rpc/status - name: google.golang.org/grpc - version: 3a46d9d51931de5beee75086205224a540233baa + version: bdb0727fa72e9f94e0b23df2b8c17561956811cd subpackages: + - balancer + - balancer/base + - balancer/roundrobin - codes + - connectivity - credentials - - grpclb/grpc_lb_v1 + - encoding + - encoding/proto + - grpclb/grpc_lb_v1/messages - grpclog - internal - keepalive @@ -111,12 +173,17 @@ imports: - peer - reflection - reflection/grpc_reflection_v1alpha + - resolver + - resolver/dns + - resolver/passthrough - stats - status - tap - transport +- name: gopkg.in/alecthomas/kingpin.v2 + version: 947dcec5ba9c011838740e680966fd7087a71d0d - name: gopkg.in/gcfg.v1 - version: 27e4946190b4a327b539185f2b5b1f7c84730728 + version: 298b7a6a3838f79debfaee8bd3bfb2b8d779e756 subpackages: - scanner - token @@ -128,11 +195,6 @@ imports: - internal/json - internal/sasl - internal/scram -- name: gopkg.in/olivere/elastic.v2 - version: 54283cb278d855e562a3d20f6c5afdbe1decf25b - subpackages: - - backoff - - uritemplates - name: gopkg.in/warnings.v0 - version: 8a331561fe74dadba6edfc59f3be66c22c3b065d + version: ec4a0fea49c7b46c2aeb0b51aac55779c607e52b testImports: [] diff --git a/glide.yaml b/glide.yaml index 0a01f33..e87892a 100644 --- a/glide.yaml +++ b/glide.yaml @@ -37,4 +37,7 @@ import: - package: gopkg.in/mgo.v2 subpackages: - bson -- package: gopkg.in/olivere/elastic.v2 +- package: github.com/olivere/elastic + version: ^6.0.0 +- package: gopkg.in/alecthomas/kingpin.v2 + version: ^2.2.6 diff --git a/server/config.go b/server/config.go index 79e5a87..22da85c 100644 --- a/server/config.go +++ b/server/config.go @@ -12,7 +12,6 @@ import ( "path/filepath" ) - type configuration struct { Database wdb.Settings Searchbase wsb.Settings @@ -32,7 +31,7 @@ func loadConfig(in string) *configuration { if in != "" { err := common.ReadConfig(in, cnf) if err != nil { - panic(err) // We can't read the config explicitly given to us by the user -> panic + panic(err) // We can't read the config explicitly given to us by the user -> panic } return cnf } diff --git a/server/database/bolt.go b/server/database/bolt.go index e9fc1eb..8aed38c 100644 --- a/server/database/bolt.go +++ b/server/database/bolt.go @@ -52,10 +52,10 @@ func boltConnect(settings *Settings) (Database, error) { return nil, err } - bolt_endpoint := &boltDb{ + boltEndpoint := &boltDb{ db: db, } - return bolt_endpoint, bolt_endpoint.createBuckets() + return boltEndpoint, boltEndpoint.createBuckets() } // Set the version with the given Id as the published version @@ -73,18 +73,18 @@ func (b *boltDb) SetPublished(in string) error { return err } - collision_key := []byte(fmt.Sprintf("published:%s", version.Parent)) - return tx.Bucket(bucketCollisions).Put(collision_key, version_id) + collisionKeys := []byte(fmt.Sprintf("published:%s", version.Parent)) + return tx.Bucket(bucketCollisions).Put(collisionKeys, version_id) }) } // Given the Id of some item, return the version we've got marked as published (if any) func (b *boltDb) Published(in string) (*wyc.Version, error) { - collision_key := []byte(fmt.Sprintf("published:%s", in)) + collisionKeys := []byte(fmt.Sprintf("published:%s", in)) val := &wyc.Version{} err := b.db.Update(func(tx *bolt.Tx) error { - version_id := tx.Bucket(bucketCollisions).Get(collision_key) + version_id := tx.Bucket(bucketCollisions).Get(collisionKeys) if version_id == nil { return errors.New(fmt.Sprintf("No published version for item with id %s", in)) } @@ -114,18 +114,22 @@ func (b *boltDb) genericInsert(id string, in wyc.Marshalable, bucket []byte) err } // Insert a collection into the database given the Id and the Collection itself -func (b *boltDb) InsertCollection(id string, in *wyc.Collection) error { +func (b *boltDb) InsertCollection(in *wyc.Collection) (string, error) { // From collision key for a collection name - collision_key := collision_key_collection(in) + collision_key := collisionKeyCollection(in) + id := "" - // Marshal our given collection to []byte - // This is done here so we don't do anything to unnecessary inside our transaction - data, err := in.MarshalJSON() - if err != nil { - return err - } + return id, b.db.Update(func(tx *bolt.Tx) error { + id = NewCollectionId(in) + in.Id = id + + // Marshal our given collection to []byte + // This is done here so we don't do anything to unnecessary inside our transaction + data, err := in.MarshalJSON() + if err != nil { + return err + } - return b.db.Update(func(tx *bolt.Tx) error { // See if our collision key exists already (if so, we've made a collection of this name before) val := tx.Bucket(bucketCollisions).Get(collision_key) if val != nil { @@ -137,7 +141,7 @@ func (b *boltDb) InsertCollection(id string, in *wyc.Collection) error { // locks it for a 'read write' transaction. // Other routines that reach this Update func will also need to lock the db for the whole // transaction. So we should be good .. - err := tx.Bucket(bucketCollisions).Put(collision_key, []byte("x")) // Nb the value here is not used + err = tx.Bucket(bucketCollisions).Put(collision_key, []byte("x")) // Nb the value here is not used if err != nil { return err } @@ -149,21 +153,26 @@ func (b *boltDb) InsertCollection(id string, in *wyc.Collection) error { // Get a unique collision key for the given item. // - We require it to match on any item from the same parent, with the same type and variant -func collision_key_item(in *wyc.Item) []byte { +func collisionKeyItem(in *wyc.Item) []byte { return []byte(fmt.Sprintf("item:%s:%s:%s", in.Parent, in.ItemType, in.Variant)) } -func (b *boltDb) InsertItem(id string, in *wyc.Item) error { +func (b *boltDb) InsertItem(in *wyc.Item) (string, error) { // Form unique collision for items with the same parent, type & variant - collision_key := collision_key_item(in) + collision_key := collisionKeyItem(in) - // Marshal to []byte before transaction - data, err := in.MarshalJSON() - if err != nil { - return err - } + id := "" + + return id, b.db.Update(func(tx *bolt.Tx) error { + id = NewItemId(in) + in.Id = id + + // Marshal to []byte before transaction + data, err := in.MarshalJSON() + if err != nil { + return err + } - return b.db.Update(func(tx *bolt.Tx) error { // Check if we've made this before in the collision bucket val := tx.Bucket(bucketCollisions).Get(collision_key) if val != nil { @@ -171,7 +180,7 @@ func (b *boltDb) InsertItem(id string, in *wyc.Item) error { } // if not, set it in the collision bucket to say we've made it - err := tx.Bucket(bucketCollisions).Put(collision_key, []byte("x")) // Nb the value here is not used + err = tx.Bucket(bucketCollisions).Put(collision_key, []byte("x")) // Nb the value here is not used if err != nil { return err } @@ -210,19 +219,22 @@ func byteToInt32(in []byte) (int32, error) { // Get a unique collision key for the given version. // - We require it to match on any child version of the parent item -func collision_key_version(parent_id string) []byte { +func collisionKeyVersion(parent_id string) []byte { return []byte(fmt.Sprintf("version:%s", parent_id)) } // Insert version into the db & set version number -func (b *boltDb) InsertNextVersion(id string, in *wyc.Version) (int32, error) { +func (b *boltDb) InsertNextVersion(in *wyc.Version) (string, int32, error) { // Create unique key to track the greatest version number yet created for a given Item - collision_key := collision_key_version(in.Parent) + collision_key := collisionKeyVersion(in.Parent) // Initialise version number to 0 new_version := int32(0) - return new_version, b.db.Update(func(tx *bolt.Tx) error { + // We don't know the ID until we have a version number + id := "" + + return id, new_version, b.db.Update(func(tx *bolt.Tx) error { // Get the saved value for our unique key raw_val := tx.Bucket(bucketCollisions).Get(collision_key) if raw_val == nil { @@ -237,6 +249,13 @@ func (b *boltDb) InsertNextVersion(id string, in *wyc.Version) (int32, error) { new_version = int32(val) + 1 } + // Set the version number of our version + in.Number = new_version + + // since we've settled on a version number, we can now set the ID + id = NewVersionId(in) + in.Id = id + // Now we need the version number as a []byte again to store it raw_result, err := int32ToByte(new_version) if err != nil { @@ -249,9 +268,6 @@ func (b *boltDb) InsertNextVersion(id string, in *wyc.Version) (int32, error) { return err } - // Set the version number of our version - in.Number = new_version - // marshal our version to []byte data, err := in.MarshalJSON() if err != nil { @@ -264,13 +280,63 @@ func (b *boltDb) InsertNextVersion(id string, in *wyc.Version) (int32, error) { } // Save the given resource with given Id to the database -func (b *boltDb) InsertResource(id string, in *wyc.Resource) error { - return b.genericInsert(id, in, bucketResource) +func (b *boltDb) InsertResource(in *wyc.Resource) (string, error) { + id := NewResourceId(in) + in.Id = id + collisionKey := collisionKeyResource(in) + + return id, b.db.Update(func(tx *bolt.Tx) error { + // Marshal to []byte before transaction + data, err := in.MarshalJSON() + if err != nil { + return err + } + + // Check if we've made this before in the collision bucket + val := tx.Bucket(bucketCollisions).Get(collisionKey) + if val != nil { + return errors.New(fmt.Sprintf("Unable to insert Resource %s %s %s %s it exists already", in.Parent, in.Name, in.ResourceType, in.Location)) + } + + // if not, set it in the collision bucket to say we've made it + err = tx.Bucket(bucketCollisions).Put(collisionKey, []byte("x")) // Nb the value here is not used + if err != nil { + return err + } + + // finally, save the actual item data + return tx.Bucket(bucketResource).Put([]byte(id), data) + }) } // Save the given link with given Id to the database -func (b *boltDb) InsertLink(id string, in *wyc.Link) error { - return b.genericInsert(id, in, bucketLink) +func (b *boltDb) InsertLink(in *wyc.Link) (string, error) { + id := NewLinkId(in) + in.Id = id + collisionKey := collisionKeyLink(in) + + return id, b.db.Update(func(tx *bolt.Tx) error { + // Marshal to []byte before transaction + data, err := in.MarshalJSON() + if err != nil { + return err + } + + // Check if we've made this before in the collision bucket + val := tx.Bucket(bucketCollisions).Get(collisionKey) + if val != nil { + return errors.New(fmt.Sprintf("Unable to insert Link %s %s %s it exists already", in.Name, in.Src, in.Dst)) + } + + // if not, set it in the collision bucket to say we've made it + err = tx.Bucket(bucketCollisions).Put(collisionKey, []byte("x")) // Nb the value here is not used + if err != nil { + return err + } + + // finally, save the actual item data + return tx.Bucket(bucketLink).Put([]byte(id), data) + }) } // Retrieve all collections that match the given Id(s) @@ -423,8 +489,20 @@ func (b *boltDb) genericDelete(bucket []byte, ids ...string) error { // Get a unique collision key for the given collection. // - We require it to match on any collection of the same name -func collision_key_collection(collection *wyc.Collection) []byte { - return []byte(fmt.Sprintf("collection:%s%s", collection.Name, collection.Parent)) +func collisionKeyCollection(collection *wyc.Collection) []byte { + return []byte(fmt.Sprintf("collection:%s:%s", collection.Name, collection.Parent)) +} + +// Get a unique collision key for the given link. +// - We require it to match on any name, src, dst +func collisionKeyLink(in *wyc.Link) []byte { + return []byte(fmt.Sprintf("link:%s:%s:%s", in.Name, in.Src, in.Dst)) +} + +// Get a unique collision key for the given resource. +// - We require it to match on any resource of the same parent, name, type, location +func collisionKeyResource(in *wyc.Resource) []byte { + return []byte(fmt.Sprintf("resource:%s:%s:%s:%s", in.Parent, in.Name, in.ResourceType, in.Location)) } // Delete collection(s) by Id(s). @@ -438,7 +516,7 @@ func (b *boltDb) DeleteCollection(ids ...string) error { // Remove any recorded collisions for these collections for _, collection := range collections { - collision_key := collision_key_collection(collection) + collision_key := collisionKeyCollection(collection) err = b.db.Update(func(tx *bolt.Tx) error { return tx.Bucket(bucketCollisions).Delete(collision_key) }) @@ -462,8 +540,8 @@ func (b *boltDb) DeleteItem(ids ...string) error { // Remove all matching collision data for our items for _, item := range items { - published_version_collision_key := collision_key_version(item.Id) - item_collision_key := collision_key_item(item) + published_version_collision_key := collisionKeyVersion(item.Id) + item_collision_key := collisionKeyItem(item) // remove unique item type / variant information (item collision key) err = b.db.Update(func(tx *bolt.Tx) error { diff --git a/server/database/database.go b/server/database/database.go index abd07b5..a1395e9 100644 --- a/server/database/database.go +++ b/server/database/database.go @@ -14,6 +14,7 @@ package database import ( "errors" "fmt" + "time" wyc "github.com/voidshard/wysteria/common" ) @@ -21,6 +22,7 @@ const ( // The database driver names that we accept DriverMongo = "mongo" DriverBolt = "bolt" + maxAttempts = 3 ) var ( @@ -38,7 +40,23 @@ func Connect(settings *Settings) (Database, error) { if !ok { return nil, errors.New(fmt.Sprintf("Connector not found for %s", settings.Driver)) } - return connector(settings) + + // Attempt to connect to the given db, if something goes wrong, we'll re-attempt a few times + // before quitting. Mostly this helps in docker setups / test situations where a + // container may not have spun up yet. + attempts := 0 + for { + db, err := connector(settings) + if err != nil { + attempts += 1 + if attempts >= maxAttempts { + return db, err + } + time.Sleep(1 * time.Second) + continue + } + return db, err + } } // Datastore whose primary goal is long term storage, not searching said data @@ -52,25 +70,25 @@ type Database interface { // Given an Item ID, return the ID of the current PublishedVersion version (if any) Published(string) (*wyc.Version, error) - // Insert a collection into the db with the given Id + // Insert a collection into the db, return created Id // - Must: Ensure only one collection with given Name - InsertCollection(string, *wyc.Collection) error + InsertCollection(*wyc.Collection) (string, error) - // Insert an item into the db with the given Id + // Insert an item into the db, return created Id // - Must: Ensure only one item with the same Collection (parent Id), Type and Variant - InsertItem(string, *wyc.Item) error + InsertItem(*wyc.Item) (string, error) - // Insert a Version into the db with the given Id + // Insert a Version into the db, return created Id // - Must: Ensure version number is both set on the obj & returned. - // - Must: Nunber version numbers starting with 1 + // - Must: Number version numbers starting with 1 // - Must: Ensure there is at most one version of a given number - InsertNextVersion(string, *wyc.Version) (int32, error) // Ensure only one version of an Item with a given Number + InsertNextVersion(*wyc.Version) (string, int32, error) // Ensure only one version of an Item with a given Number - // Insert resource into the db with the given Id - InsertResource(string, *wyc.Resource) error + // Insert resource into the db, return created Id + InsertResource(*wyc.Resource) (string, error) - // Insert link into the db with the given Id - InsertLink(string, *wyc.Link) error + // Insert link into the db, return created Id + InsertLink(*wyc.Link) (string, error) // Retrieve collections indicated by the given Id(s) from the db RetrieveCollection(...string) ([]*wyc.Collection, error) diff --git a/server/database/mongo.go b/server/database/mongo.go index 7a060bc..a807f58 100644 --- a/server/database/mongo.go +++ b/server/database/mongo.go @@ -155,23 +155,24 @@ func (e *mongoEndpoint) Published(item_id string) (*wyc.Version, error) { } // Insert a collection into the db with the given Id -func (e *mongoEndpoint) InsertCollection(id string, d *wyc.Collection) error { +func (e *mongoEndpoint) InsertCollection(d *wyc.Collection) (string, error) { collection := e.getCollection(tableCollection) var res []interface{} err := collection.Find(bson.M{"name": d.Name, "parent": d.Parent}).All(&res) if err != nil { - return err + return "", err } if len(res) > 0 { - return errors.New("Unable to create: Would cause duplicate Collection") + return "", errors.New("Unable to create: Would cause duplicate Collection") } - return e.insert(tableCollection, id, d) + d.Id = NewCollectionId(d) + return d.Id, e.insert(tableCollection, d.Id, d) } // Insert a item into the db with the given Id -func (e *mongoEndpoint) InsertItem(id string, d *wyc.Item) error { +func (e *mongoEndpoint) InsertItem(d *wyc.Item) (string, error) { key := fmt.Sprintf("%s:%s:%s:%s", tableItem, d.Parent, d.ItemType, d.Variant) change := mgo.Change{ @@ -184,18 +185,18 @@ func (e *mongoEndpoint) InsertItem(id string, d *wyc.Item) error { col := e.getCollection(countersCollection) details, err := col.Find(bson.M{"CounterFor": key}).Apply(change, &doc) if err != nil { - return err + return "", err } if details.Updated > 0 { - return errors.New(fmt.Sprintf("Unable to insert Item %s %s it exists in collection already", d.ItemType, d.Variant)) + return "", errors.New(fmt.Sprintf("Unable to insert Item %s %s it exists in collection already", d.ItemType, d.Variant)) } - - return e.insert(tableItem, id, d) + d.Id = NewItemId(d) + return d.Id, e.insert(tableItem, d.Id, d) } // Insert a version into the db with the given Id & set version number -func (e *mongoEndpoint) InsertNextVersion(id string, d *wyc.Version) (int32, error) { +func (e *mongoEndpoint) InsertNextVersion(d *wyc.Version) (string, int32, error) { change := mgo.Change{ Update: bson.M{"$inc": bson.M{"Count": 1}, "$set": bson.M{"CounterFor": d.Parent}}, ReturnNew: true, @@ -210,21 +211,62 @@ func (e *mongoEndpoint) InsertNextVersion(id string, d *wyc.Version) (int32, err // Atomic findAndModify call _, err := col.Find(bson.M{"CounterFor": d.Parent}).Apply(change, &doc) if err != nil { - return -1, err + return "", -1, err } d.Number = int32(doc["Count"].(int)) - return d.Number, e.insert(tableVersion, id, d) + d.Id = NewVersionId(d) + return d.Id, d.Number, e.insert(tableVersion, d.Id, d) } // Insert a resource into the db with the given Id -func (e *mongoEndpoint) InsertResource(id string, d *wyc.Resource) error { - return e.insert(tableFileresource, id, d) +func (e *mongoEndpoint) InsertResource(d *wyc.Resource) (string, error) { + key := fmt.Sprintf("%s:%s:%s:%s:%s", tableFileresource, d.Parent, d.Name, d.ResourceType, d.Location) + + change := mgo.Change{ + Update: bson.M{"$set": bson.M{"CounterFor": key}}, + ReturnNew: true, + Upsert: true, + } + + var doc counter + col := e.getCollection(countersCollection) + details, err := col.Find(bson.M{"CounterFor": key}).Apply(change, &doc) + if err != nil { + return "", err + } + + if details.Updated > 0 { + return "", errors.New(fmt.Sprintf("Unable to insert Resource %s %s %s %s it exists already", d.Parent, d.Name, d.ResourceType, d.Location)) + } + + d.Id = NewResourceId(d) + return d.Id, e.insert(tableFileresource, d.Id, d) } // Insert a link into the db with the given Id -func (e *mongoEndpoint) InsertLink(id string, d *wyc.Link) error { - return e.insert(tableLink, id, d) +func (e *mongoEndpoint) InsertLink(d *wyc.Link) (string, error) { + key := fmt.Sprintf("%s:%s:%s:%s", tableLink, d.Name, d.Src, d.Dst) + + change := mgo.Change{ + Update: bson.M{"$set": bson.M{"CounterFor": key}}, + ReturnNew: true, + Upsert: true, + } + + var doc counter + col := e.getCollection(countersCollection) + details, err := col.Find(bson.M{"CounterFor": key}).Apply(change, &doc) + if err != nil { + return "", err + } + + if details.Updated > 0 { + return "", errors.New(fmt.Sprintf("Unable to insert Link %s %s %s it exists already", d.Name, d.Src, d.Dst)) + } + + d.Id = NewLinkId(d) + return d.Id, e.insert(tableLink, d.Id, d) } // Retrieve the collections indicated by the given Id(s) @@ -325,28 +367,16 @@ func (e *mongoEndpoint) DeleteLink(ids ...string) error { // Generic insert of some document into a named column with the given id func (e *mongoEndpoint) insert(col string, sid string, data interface{}) error { - // First, we need to format the Id as a bson - // ToDo: Look at generic-izing the setting / creation of Ids - err := bsonIdCheck(sid) - if err != nil { - return err - } - // get the given collection collection := e.getCollection(col) // upsert our document into mongo, setting the id as desired - _, err = collection.Upsert(bson.M{"_id": bson.ObjectIdHex(sid)}, data) + _, err := collection.Upsert(bson.M{"_id": sid}, data) return err } // Generic retrieve doc(s) by Id(s) from the named database collection -func (e *mongoEndpoint) retrieve(col string, out interface{}, sids ...string) (err error) { - ids, err := toBsonIds(sids...) - if err != nil { - return err - } - +func (e *mongoEndpoint) retrieve(col string, out interface{}, ids ...string) (err error) { collection := e.getCollection(col) err = collection.Find(bson.M{ "_id": bson.M{ @@ -357,12 +387,7 @@ func (e *mongoEndpoint) retrieve(col string, out interface{}, sids ...string) (e } // Generic delete all from the named collection by Id(s) -func (e *mongoEndpoint) deleteById(col string, sids ...string) (err error) { - ids, err := toBsonIds(sids...) - if err != nil { - return err - } - +func (e *mongoEndpoint) deleteById(col string, ids ...string) (err error) { collection := e.getCollection(col) _, err = collection.RemoveAll(bson.M{ "_id": bson.M{ @@ -374,26 +399,8 @@ func (e *mongoEndpoint) deleteById(col string, sids ...string) (err error) { // Generic update document from the named collection with the given Id func (e *mongoEndpoint) update(col, sid string, data interface{}) (err error) { - err = bsonIdCheck(sid) - if err != nil { - return - } - collection := e.getCollection(col) - return collection.UpdateId(bson.ObjectIdHex(sid), data) -} - -// Convert Ids of type string (default) into our mongo format (bson.ObjectId) -func toBsonIds(sids ...string) ([]bson.ObjectId, error) { - ids := []bson.ObjectId{} - for _, sid := range sids { - err := bsonIdCheck(sid) - if err != nil { - return nil, err - } - ids = append(ids, bson.ObjectIdHex(sid)) - } - return ids, nil + return collection.UpdateId(sid, data) } // Form the mongo connection url given the database settings @@ -409,14 +416,6 @@ func formMongoUrl(settings *Settings) string { return url + settings.Host + ":" + strconv.Itoa(settings.Port) + "/" + settings.Database } -// Check if a given Id in it's default string format is a valid mongo bson.ObjectId -func bsonIdCheck(sid string) error { - if bson.IsObjectIdHex(sid) { - return nil - } - - return errors.New(fmt.Sprintf("Invalid ID: %s", sid)) -} // Get named collection from the mongo database func (e *mongoEndpoint) getCollection(name string) *mgo.Collection { diff --git a/server/database/uuid.go b/server/database/uuid.go new file mode 100644 index 0000000..1a35e2b --- /dev/null +++ b/server/database/uuid.go @@ -0,0 +1,34 @@ +package database + +import ( + wyc "github.com/voidshard/wysteria/common" +) + +const ( + divisor = ":" +) + +// Create new collection ID using Parent & Name variables +func NewCollectionId(in *wyc.Collection) string { + return wyc.NewId("collection", divisor, in.Parent, divisor, in.Name) +} + +// Create new item ID using parent type & variant vars +func NewItemId(in *wyc.Item) string { + return wyc.NewId("item", divisor, in.Parent, divisor, in.ItemType, divisor, in.Variant) +} + +// Create new version ID using parent & number +func NewVersionId(in *wyc.Version) string { + return wyc.NewId("version", divisor, in.Parent, divisor, in.Number) +} + +// Create new resource ID using parent, name, type and location +func NewResourceId(in *wyc.Resource) string { + return wyc.NewId("resource", divisor, in.Parent, divisor, in.Name, divisor, in.ResourceType, divisor, in.Location) +} + +// Create new link ID using name, src and dst +func NewLinkId(in *wyc.Link) string { + return wyc.NewId("link", divisor, in.Name, divisor, in.Src, divisor, in.Dst) +} diff --git a/server/instrumentation/elastic.6.go b/server/instrumentation/elastic.6.go new file mode 100644 index 0000000..1347447 --- /dev/null +++ b/server/instrumentation/elastic.6.go @@ -0,0 +1,92 @@ +/*Use Elastic as an instrumentation backend. This is specifically for Elastic 6 +*/ + +package instrumentation + +import ( + "context" + "errors" + "fmt" + "github.com/olivere/elastic" +) + +const defaultMapping = `{ + "mappings": { + "wysterialog": { + "properties": { + "EpochTime": {"type": "date", "format": "epoch_millis"}, + "CallTarget": {"type": "string"}, + "CallType": {"type": "string"}, + "TimeTaken": {"type": "integer"}, + "InFunc": {"type": "string"}, + "Msg": {"type": "string"}, + "Severity": {"type": "string"}, + "Note": {"type": "string"}, + "UTCTime": {"type": "string"} + } + } + } +}` + +// Write log document to Elastic +// +type elasticLogger struct { + url string + index string + client *elastic.Client +} + +// Create a client to write data to elastic +// +func newElasticLogger(settings *Settings) (MonitorOutput, error) { + client, err := elastic.NewClient( + // Set elastic url to the given host / port + elastic.SetURL(settings.Location), + + // If enabled there is some race condition in the underlying lib that can cause use to always + // attempt to connect to the localhost. Assuming you're not running ES on the localhost you'll be + // given a "no available hosts" error or something. + elastic.SetSniff(false), + ) + if err != nil { + return nil, err + } + + e := &elasticLogger{ + url: settings.Location, + index: settings.Target, + client: client, + } + return e, e.createIndexIfNotExists(settings.Target) +} + +// Checks if an index with the given name exists. If not, creates the index. +func (l *elasticLogger) createIndexIfNotExists(index string) error { + ctx := context.Background() + + exists, err := l.client.IndexExists(index).Do(ctx) + if err != nil { + return err + } + if exists { + return nil + } + + createIndex, err := l.client.CreateIndex(index).BodyString(defaultMapping).Do(ctx) + if err != nil { + return err + } + if createIndex.Acknowledged { + return nil + } + + return errors.New(fmt.Sprintf("Creation of index %s not acknowledged", index)) +} + +func (l *elasticLogger) Log(doc *event) { + l.client.Index().Index(l.index).Type(l.index).BodyJson(doc).Do(context.Background()) +} + +func (l *elasticLogger) Close() { + l.client.Stop() +} diff --git a/server/instrumentation/elastic.go b/server/instrumentation/elastic.go deleted file mode 100644 index 319e986..0000000 --- a/server/instrumentation/elastic.go +++ /dev/null @@ -1,86 +0,0 @@ -package instrumentation - -import ( - "errors" - "fmt" - "gopkg.in/olivere/elastic.v2" -) - -const defaultMapping = `{ - "mappings": { - "wysterialog": { - "properties": { - "EpochTime": {"type": "date", "format": "epoch_millis"}, - "CallTarget": {"type": "string"}, - "CallType": {"type": "string"}, - "TimeTaken": {"type": "integer"}, - "InFunc": {"type": "string"}, - "Msg": {"type": "string"}, - "Severity": {"type": "string"}, - "Note": {"type": "string"}, - "UTCTime": {"type": "string"} - } - } - } -}` - -// Write log document to Elastic -// -type elasticLogger struct { - url string - index string - client *elastic.Client -} - -// Create a client to write data to elastic -// -func newElasticLogger(settings *Settings) (MonitorOutput, error) { - client, err := elastic.NewClient( - // Set elastic url to the given host / port - elastic.SetURL(settings.Location), - - // If enabled there is some race condition in the underlying lib that can cause use to always - // attempt to connect to the localhost. Assuming you're not running ES on the localhost you'll be - // given a "no available hosts" error or something. - elastic.SetSniff(false), - ) - if err != nil { - return nil, err - } - - e := &elasticLogger{ - url: settings.Location, - index: settings.Target, - client: client, - } - return e, e.createIndexIfNotExists(settings.Target) -} - -// Checks if an index with the given name exists. If not, creates the index. -func (l *elasticLogger) createIndexIfNotExists(index string) error { - exists, err := l.client.IndexExists(index).Do() - if err != nil { - return err - } - if exists { - return nil - } - - createIndex, err := l.client.CreateIndex(index).BodyString(defaultMapping).Do() - if err != nil { - return err - } - if createIndex.Acknowledged { - return nil - } - - return errors.New(fmt.Sprintf("Creation of index %s not acknowledged", index)) -} - -func (l *elasticLogger) Log(doc *event) { - l.client.Index().Index(l.index).Type(l.index).BodyJson(doc).Do() -} - -func (l *elasticLogger) Close() { - l.client.Stop() -} diff --git a/server/instrumentation/instrumentation.go b/server/instrumentation/instrumentation.go index 718d618..15ebacd 100644 --- a/server/instrumentation/instrumentation.go +++ b/server/instrumentation/instrumentation.go @@ -17,6 +17,7 @@ import ( "errors" "fmt" "time" + "strings" ) const ( @@ -63,6 +64,7 @@ func Connect(settings *Settings) (MonitorOutput, error) { type event struct { Msg string Note string + KeyValues map[string]interface{} InFunc string Severity string EpochTime int64 @@ -82,6 +84,21 @@ func InFunc(msg string) Opt { } } +// Utils +func (e *event) toKeyValueString() string { + valueString := "" + + if e.KeyValues != nil { + values := make([]string, 0) + for k, v := range e.KeyValues { + values = append(values, fmt.Sprintf("%s=%s", k, v)) + } + valueString = strings.Join(values, " ") + } + + return valueString +} + // Record the kind of function call we're making // func IsFind() Opt { @@ -160,11 +177,19 @@ func Time(t int64) Opt { } } +// Set KeyValues - helpful for logging named variables to make log clearer +// +func KeyValues(in map[string]interface{}) Opt { + return func(i *event) { + i.KeyValues = in + } +} + // Set Note value // -func Note(msg string) Opt { +func Note(args ...interface{}) Opt { return func(i *event) { - i.Note = msg + i.Note = fmt.Sprint(args) } } diff --git a/server/instrumentation/monitor.go b/server/instrumentation/monitor.go index 4f5969e..c6076dd 100644 --- a/server/instrumentation/monitor.go +++ b/server/instrumentation/monitor.go @@ -156,7 +156,7 @@ func (m *Monitor) Log(msg string, opts ...Opt) { // Log a warning message // func (m *Monitor) Warn(msg string, opts ...Opt) { - event := newEvent(msg) + event := newEvent(fmt.Sprintf("msg:%s", msg)) for _, o := range opts { o(event) @@ -168,8 +168,8 @@ func (m *Monitor) Warn(msg string, opts ...Opt) { // Log an error message // -func (m *Monitor) Err(err error, opts ...Opt) { - event := newEvent(err.Error()) +func (m *Monitor) Err(err error, msg string, opts ...Opt) { + event := newEvent(fmt.Sprintf("error:%s msg:%s", err.Error(), msg)) for _, o := range opts { o(event) diff --git a/server/instrumentation/stdout.go b/server/instrumentation/stdout.go index b801c66..c2f9e52 100644 --- a/server/instrumentation/stdout.go +++ b/server/instrumentation/stdout.go @@ -1,7 +1,32 @@ +/*The most trivial of all loggers - writes event data to stdout + +Produces lines like: +2018/03/18 17:46:20 | 1521395180000 | 4 | info | create | collection | | database | [ 71415080-8d05-40c4-9615-adea42663b72 TestItemLinkTo1] +2018/03/18 17:46:20 | 1521395180000 | 4 | info | create | collection | | searchbase | [ 71415080-8d05-40c4-9615-adea42663b72 TestItemLinkTo1] +2018/03/18 17:46:20 | 1521395180000 | 8 | info | create | collection | | middleware | [TestItemLinkTo1] +2018/03/18 17:46:20 | 1521395180000 | 3 | info | create | item | | database | [71415080-8d05-40c4-9615-adea42663b72 142316da-fd60-4ed1-a852-1aad732f3f43 super item] +2018/03/18 17:46:20 | 1521395180000 | 8 | info | create | item | | searchbase | [71415080-8d05-40c4-9615-adea42663b72 142316da-fd60-4ed1-a852-1aad732f3f43 super item] +2018/03/18 17:46:20 | 1521395180000 | 12 | info | create | item | | middleware | [71415080-8d05-40c4-9615-adea42663b72 142316da-fd60-4ed1-a852-1aad732f3f43 super item] +2018/03/18 17:46:20 | 1521395180000 | 3 | info | create | item | | database | [71415080-8d05-40c4-9615-adea42663b72 6bf7a22e-0b8e-47c0-bc78-c4fb2219dd15 house brick] +2018/03/18 17:46:20 | 1521395180000 | 8 | info | create | item | | searchbase | [71415080-8d05-40c4-9615-adea42663b72 6bf7a22e-0b8e-47c0-bc78-c4fb2219dd15 house brick] +2018/03/18 17:46:20 | 1521395180000 | 12 | info | create | item | | middleware | [71415080-8d05-40c4-9615-adea42663b72 6bf7a22e-0b8e-47c0-bc78-c4fb2219dd15 house brick] +2018/03/18 17:46:20 | 1521395180000 | 4 | info | create | link | | database | [7177b4b2-17e0-4675-aa2f-da06ab91ac12 142316da-fd60-4ed1-a852-1aad732f3f43 6bf7a22e-0b8e-47c0-bc78-c4fb2219dd15] +2018/03/18 17:46:20 | 1521395180000 | 9 | info | create | version | | searchbase | [7177b4b2-17e0-4675-aa2f-da06ab91ac12 142316da-fd60-4ed1-a852-1aad732f3f43 6bf7a22e-0b8e-47c0-bc78-c4fb2219dd15] + +Ie. +timestamp | epoch time | time taken in milliseconds | severity | action type | object being acted on | | layer | generic info + +Please note: +Usually time taken is logged in nano seconds, but to be more readable for a *human* the stdout logger converts this to millis. +The other loggers write this time taken in nano seconds, as commonly the millis return '0' .. which makes for bad graphs. +And as we all know, logging is all about the sweet sweet graphs. +*/ + package instrumentation import ( "log" + "time" ) @@ -16,12 +41,13 @@ type stdoutLogger struct {} func (l *stdoutLogger) Log(doc *event) { log.Println(logdivider, doc.EpochTime, logdivider, - doc.TimeTaken, logdivider, + doc.TimeTaken / int64(time.Millisecond), logdivider, doc.Severity, logdivider, doc.CallType, logdivider, doc.CallTarget, logdivider, doc.InFunc, logdivider, doc.Msg, logdivider, + doc.toKeyValueString(), logdivider, doc.Note, ) } diff --git a/server/instrumentationLayer.go b/server/instrumentationLayer.go deleted file mode 100644 index 04ba032..0000000 --- a/server/instrumentationLayer.go +++ /dev/null @@ -1,202 +0,0 @@ -/* -As the name 'shim' implies, ths layer sits between the bottom of the middleware and the server itself, -it supplies no business logic at all (nor should it) - no attempt here is made to address errors or -change data, it only logs traffic & events as they pass by. -*/ - -package main - -import ( - "fmt" - wyc "github.com/voidshard/wysteria/common" - wym "github.com/voidshard/wysteria/common/middleware" - wsi "github.com/voidshard/wysteria/server/instrumentation" - "time" -) - -type Shim struct { - server *WysteriaServer -} - -// The server calls us to listen, we'll call the middleware server in turn. -// Essentially, all we have to do is pass back and forth, and be sure not to change any state. -// -func (s *Shim) ListenAndServe(config *wym.Settings, server *WysteriaServer) error { - s.server = server - return server.middleware_server.ListenAndServe(config, s) -} - -// Time is up, kill everything and shutdown the server, kill all connections -// -func (s *Shim) Shutdown() error { - s.server.Shutdown() - return nil -} - -// Call on our monitor to do the actual logging business -// -func (s *Shim) log(err error, t int64, opts ...wsi.Opt) { - go func() { - opts = append(opts, wsi.Time(time.Now().UnixNano()-t)) - if err != nil { - s.server.monitor.Err(err, opts...) - return - } - s.server.monitor.Log("", opts...) - }() -} - -// All following funcs simply record the current time, call the appropriate server call -// and pass the results back to the calling middleware. -// Except of course, we log the call in the middle. -// -func (s *Shim) CreateCollection(in *wyc.Collection) (string, error) { - ts := time.Now().UnixNano() - result, err := s.server.CreateCollection(in) - s.log(err, ts, wsi.IsCreate(), wsi.TargetCollection(), wsi.Note(in.Name)) - return result, err -} - -func (s *Shim) CreateItem(in *wyc.Item) (string, error) { - ts := time.Now().UnixNano() - result, err := s.server.CreateItem(in) - note := fmt.Sprintf("%s %s %s", in.Parent, in.ItemType, in.Variant) - s.log(err, ts, wsi.IsCreate(), wsi.TargetItem(), wsi.Note(note)) - return result, err -} - -func (s *Shim) CreateVersion(in *wyc.Version) (string, int32, error) { - ts := time.Now().UnixNano() - resultId, resultVer, err := s.server.CreateVersion(in) - note := fmt.Sprintf("%s %s %d", in.Parent, resultId, resultVer) - s.log(err, ts, wsi.IsCreate(), wsi.TargetVersion(), wsi.Note(note)) - return resultId, resultVer, err -} - -func (s *Shim) CreateResource(in *wyc.Resource) (string, error) { - ts := time.Now().UnixNano() - result, err := s.server.CreateResource(in) - note := fmt.Sprintf("%s %s %s %s", in.Parent, in.Name, in.ResourceType, in.Location) - s.log(err, ts, wsi.IsCreate(), wsi.TargetResource(), wsi.Note(note)) - return result, err -} - -func (s *Shim) CreateLink(in *wyc.Link) (string, error) { - ts := time.Now().UnixNano() - result, err := s.server.CreateLink(in) - note := fmt.Sprintf("%s %s", in.Src, in.Dst) - s.log(err, ts, wsi.IsCreate(), wsi.TargetLink(), wsi.Note(note)) - return result, err -} - -func (s *Shim) DeleteCollection(in string) error { - ts := time.Now().UnixNano() - err := s.server.DeleteCollection(in) - s.log(err, ts, wsi.IsDelete(), wsi.TargetCollection(), wsi.Note(in)) - return err -} - -func (s *Shim) DeleteItem(in string) error { - ts := time.Now().UnixNano() - err := s.server.DeleteItem(in) - s.log(err, ts, wsi.IsDelete(), wsi.TargetItem(), wsi.Note(in)) - return err -} - -func (s *Shim) DeleteVersion(in string) error { - ts := time.Now().UnixNano() - err := s.server.DeleteVersion(in) - s.log(err, ts, wsi.IsDelete(), wsi.TargetVersion(), wsi.Note(in)) - return err -} - -func (s *Shim) DeleteResource(in string) error { - ts := time.Now().UnixNano() - err := s.server.DeleteResource(in) - s.log(err, ts, wsi.IsDelete(), wsi.TargetResource(), wsi.Note(in)) - return err -} - -func (s *Shim) FindCollections(l int32, o int32, q []*wyc.QueryDesc) ([]*wyc.Collection, error) { - ts := time.Now().UnixNano() - results, err := s.server.FindCollections(l, o, q) - s.log(err, ts, wsi.IsFind(), wsi.TargetCollection(), wsi.Note(fmt.Sprintf("%d %d %d", l, o, len(q)))) - return results, err -} - -func (s *Shim) FindItems(l int32, o int32, q []*wyc.QueryDesc) ([]*wyc.Item, error) { - ts := time.Now().UnixNano() - results, err := s.server.FindItems(l, o, q) - s.log(err, ts, wsi.IsFind(), wsi.TargetItem(), wsi.Note(fmt.Sprintf("%d %d %d", l, o, len(q)))) - return results, err -} - -func (s *Shim) FindVersions(l int32, o int32, q []*wyc.QueryDesc) ([]*wyc.Version, error) { - ts := time.Now().UnixNano() - results, err := s.server.FindVersions(l, o, q) - s.log(err, ts, wsi.IsFind(), wsi.TargetVersion(), wsi.Note(fmt.Sprintf("%d %d %d", l, o, len(q)))) - return results, err -} - -func (s *Shim) FindResources(l int32, o int32, q []*wyc.QueryDesc) ([]*wyc.Resource, error) { - ts := time.Now().UnixNano() - results, err := s.server.FindResources(l, o, q) - s.log(err, ts, wsi.IsFind(), wsi.TargetResource(), wsi.Note(fmt.Sprintf("%d %d %d", l, o, len(q)))) - return results, err -} - -func (s *Shim) FindLinks(l int32, o int32, q []*wyc.QueryDesc) ([]*wyc.Link, error) { - ts := time.Now().UnixNano() - results, err := s.server.FindLinks(l, o, q) - s.log(err, ts, wsi.IsFind(), wsi.TargetLink(), wsi.Note(fmt.Sprintf("%d %d %d", l, o, len(q)))) - return results, err -} - -func (s *Shim) PublishedVersion(in string) (*wyc.Version, error) { - ts := time.Now().UnixNano() - result, err := s.server.PublishedVersion(in) - s.log(err, ts, wsi.IsPublished(), wsi.TargetVersion(), wsi.Note(in)) - return result, err -} - -func (s *Shim) SetPublishedVersion(in string) error { - ts := time.Now().UnixNano() - err := s.server.SetPublishedVersion(in) - s.log(err, ts, wsi.IsPublish(), wsi.TargetVersion(), wsi.Note(in)) - return err -} - -func (s *Shim) UpdateVersionFacets(in string, m map[string]string) error { - ts := time.Now().UnixNano() - err := s.server.UpdateVersionFacets(in, m) - s.log(err, ts, wsi.IsUpdate(), wsi.TargetVersion(), wsi.Note(in)) - return err -} - -func (s *Shim) UpdateItemFacets(in string, m map[string]string) error { - ts := time.Now().UnixNano() - err := s.server.UpdateItemFacets(in, m) - s.log(err, ts, wsi.IsUpdate(), wsi.TargetItem(), wsi.Note(in)) - return err -} - -func (s *Shim) UpdateCollectionFacets(in string, m map[string]string) error { - ts := time.Now().UnixNano() - err := s.server.UpdateCollection(in, m) - s.log(err, ts, wsi.IsUpdate(), wsi.TargetItem(), wsi.Note(in)) - return err -} - -func (s *Shim) UpdateResourceFacets(in string, m map[string]string) error { - ts := time.Now().UnixNano() - err := s.server.UpdateResource(in, m) - s.log(err, ts, wsi.IsUpdate(), wsi.TargetItem(), wsi.Note(in)) - return err -} - -func (s *Shim) UpdateLinkFacets(in string, m map[string]string) error { - ts := time.Now().UnixNano() - err := s.server.UpdateResource(in, m) - s.log(err, ts, wsi.IsUpdate(), wsi.TargetItem(), wsi.Note(in)) - return err -} diff --git a/server/instrumentation_database.go b/server/instrumentation_database.go new file mode 100644 index 0000000..956e62a --- /dev/null +++ b/server/instrumentation_database.go @@ -0,0 +1,238 @@ +/* +Database instrumentation + - This is an implementation of Database that accepts a logging monitor and another implementor + of Database. All this does is pass any calls to the database it wraps & passes + back the result(s). In the process, every action is logged to the given monitor. +*/ + +package main + +import ( + wyc "github.com/voidshard/wysteria/common" + wyd "github.com/voidshard/wysteria/server/database" + wsi "github.com/voidshard/wysteria/server/instrumentation" + "time" +) + +func newDatabaseMonitor(db wyd.Database, monitor *wsi.Monitor) wyd.Database { + return &DatabaseMonitor{database: db, monitor: monitor} +} + +type DatabaseMonitor struct { + database wyd.Database + monitor *wsi.Monitor +} + +// Call on our monitor to do the actual logging business +// +func (s *DatabaseMonitor) log(err error, t int64, opts ...wsi.Opt) { + area := "database" + go func() { + opts = append(opts, wsi.Time(time.Now().UnixNano()-t)) + if err != nil { + s.monitor.Err(err, area, opts...) + return + } + s.monitor.Log(area, opts...) + }() +} + +// Set given version id as published +func (d *DatabaseMonitor) SetPublished(in string) error { + ts := time.Now().UnixNano() + err := d.database.SetPublished(in) + d.log( + err, ts, + wsi.IsPublish(), wsi.TargetVersion(), + wsi.Note(in), + ) + return err +} + +// Given an Item ID, return the ID of the current PublishedVersion version (if any) +func (d *DatabaseMonitor) Published(in string) (*wyc.Version, error) { + ts := time.Now().UnixNano() + result, err := d.database.Published(in) + d.log( + err, ts, + wsi.IsPublished(), wsi.TargetVersion(), + wsi.Note(in), + ) + return result, err +} + +// Insert a collection into the db, return created Id +func (d *DatabaseMonitor) InsertCollection(in *wyc.Collection) (string, error) { + ts := time.Now().UnixNano() + result, err := d.database.InsertCollection(in) + d.log( + err, ts, + wsi.IsCreate(), wsi.TargetCollection(), + wsi.Note(in.Parent, in.Id, in.Name), + ) + return result, err +} + +// Insert an item into the db, return created Id +func (d *DatabaseMonitor) InsertItem(in *wyc.Item) (string, error) { + ts := time.Now().UnixNano() + result, err := d.database.InsertItem(in) + d.log(err, ts, + wsi.IsCreate(), wsi.TargetItem(), + wsi.Note(in.Parent, in.Id, in.ItemType, in.Variant), + ) + return result, err +} + +// Insert a Version into the db, return created Id +func (d *DatabaseMonitor) InsertNextVersion(in *wyc.Version) (string, int32, error) { + ts := time.Now().UnixNano() + resultId, resultVer, err := d.database.InsertNextVersion(in) + d.log( + err, ts, + wsi.IsCreate(), wsi.TargetVersion(), + wsi.Note(in.Parent, in.Id, in.Number), + ) + return resultId, resultVer, err +} + +// Insert resource into the db, return created Id +func (d *DatabaseMonitor) InsertResource(in *wyc.Resource) (string, error) { + ts := time.Now().UnixNano() + result, err := d.database.InsertResource(in) + d.log(err, ts, wsi.IsCreate(), wsi.TargetResource(), wsi.Note(in.Parent, in.Id, in.Name)) + return result, err +} + +// Insert link into the db, return created Id +func (d *DatabaseMonitor) InsertLink(in *wyc.Link) (string, error) { + ts := time.Now().UnixNano() + result, err := d.database.InsertLink(in) + d.log(err, ts, wsi.IsCreate(), wsi.TargetLink(), wsi.Note(in.Id, in.Src, in.Dst)) + return result, err +} + +// Retrieve collections indicated by the given Id(s) from the db +func (d *DatabaseMonitor) RetrieveCollection(in ...string) ([]*wyc.Collection, error) { + ts := time.Now().UnixNano() + results, err := d.database.RetrieveCollection(in...) + d.log(err, ts, wsi.IsFind(), wsi.TargetCollection(), wsi.Note(len(results))) + return results, err +} + +// Retrieve items indicated by the given Id(s) from the db +func (d *DatabaseMonitor) RetrieveItem(in ...string) ([]*wyc.Item, error) { + ts := time.Now().UnixNano() + results, err := d.database.RetrieveItem(in...) + d.log(err, ts, wsi.IsFind(), wsi.TargetItem(), wsi.Note(len(results))) + return results, err +} + +// Retrieve versions indicated by the given Id(s) from the db +func (d *DatabaseMonitor) RetrieveVersion(in ...string) ([]*wyc.Version, error) { + ts := time.Now().UnixNano() + results, err := d.database.RetrieveVersion(in...) + d.log(err, ts, wsi.IsFind(), wsi.TargetVersion(), wsi.Note(len(results))) + return results, err +} + +// Retrieve resources indicated by the given Id(s) from the db +func (d *DatabaseMonitor) RetrieveResource(in ...string) ([]*wyc.Resource, error) { + ts := time.Now().UnixNano() + results, err := d.database.RetrieveResource(in...) + d.log(err, ts, wsi.IsFind(), wsi.TargetResource(), wsi.Note(len(results))) + return results, err +} + +// Retrieve links indicated by the given Id(s) from the db +func (d *DatabaseMonitor) RetrieveLink(in ...string) ([]*wyc.Link, error) { + ts := time.Now().UnixNano() + results, err := d.database.RetrieveLink(in...) + d.log(err, ts, wsi.IsFind(), wsi.TargetLink(), wsi.Note(len(results))) + return results, err +} + +// Save the updated facets on the given version +func (d *DatabaseMonitor) UpdateItem(id string, in *wyc.Item) error { + ts := time.Now().UnixNano() + err := d.database.UpdateItem(id, in) + d.log(err, ts, wsi.IsUpdate(), wsi.TargetItem(), wsi.Note(id)) + return err +} + +// Save the updated facets on the given item +func (d *DatabaseMonitor) UpdateVersion(id string, in *wyc.Version) error { + ts := time.Now().UnixNano() + err := d.database.UpdateVersion(id, in) + d.log(err, ts, wsi.IsUpdate(), wsi.TargetVersion(), wsi.Note(id)) + return err +} + +// Save the updated facets on the given collection +func (d *DatabaseMonitor) UpdateCollection(id string, in *wyc.Collection) error { + ts := time.Now().UnixNano() + err := d.database.UpdateCollection(id, in) + d.log(err, ts, wsi.IsUpdate(), wsi.TargetCollection(), wsi.Note(id)) + return err +} + +// Save the updated facets on the given resource +func (d *DatabaseMonitor) UpdateResource(id string, in *wyc.Resource) error { + ts := time.Now().UnixNano() + err := d.database.UpdateResource(id, in) + d.log(err, ts, wsi.IsUpdate(), wsi.TargetResource(), wsi.Note(id)) + return err +} + +// Save the updated facets on the given link +func (d *DatabaseMonitor) UpdateLink(id string, in *wyc.Link) error { + ts := time.Now().UnixNano() + err := d.database.UpdateLink(id, in) + d.log(err, ts, wsi.IsUpdate(), wsi.TargetLink(), wsi.Note(id)) + return err +} + +// Delete collection(s) with the given Id(s) +func (d *DatabaseMonitor) DeleteCollection(in ...string) error { + ts := time.Now().UnixNano() + err := d.database.DeleteCollection(in...) + d.log(err, ts, wsi.IsDelete(), wsi.TargetCollection(), wsi.Note(in)) + return err +} + +// Delete item(s) with the given Id(s) +func (d *DatabaseMonitor) DeleteItem(in ...string) error { + ts := time.Now().UnixNano() + err := d.database.DeleteItem(in...) + d.log(err, ts, wsi.IsDelete(), wsi.TargetItem(), wsi.Note(in)) + return err +} + +// Delete version(s) with the given Id(s) +func (d *DatabaseMonitor) DeleteVersion(in ...string) error { + ts := time.Now().UnixNano() + err := d.database.DeleteVersion(in...) + d.log(err, ts, wsi.IsDelete(), wsi.TargetVersion(), wsi.Note(in)) + return err +} + +// Delete resource(s) with the given Id(s) +func (d *DatabaseMonitor) DeleteResource(in ...string) error { + ts := time.Now().UnixNano() + err := d.database.DeleteResource(in...) + d.log(err, ts, wsi.IsDelete(), wsi.TargetResource(), wsi.Note(in)) + return err +} + +// Delete link(s) with the given Id(s) +func (d *DatabaseMonitor) DeleteLink(in ...string) error { + ts := time.Now().UnixNano() + err := d.database.DeleteLink(in...) + d.log(err, ts, wsi.IsDelete(), wsi.TargetLink(), wsi.Note(in)) + return err +} + +// kill connection to db +func (d *DatabaseMonitor) Close() error { + return d.database.Close() +} diff --git a/server/instrumentation_middleware.go b/server/instrumentation_middleware.go new file mode 100644 index 0000000..816654f --- /dev/null +++ b/server/instrumentation_middleware.go @@ -0,0 +1,238 @@ +/* +The MiddlewareMonitor layer sits between the bottom of the middleware and the server itself, +it supplies no business logic at all (nor should it) - no attempt here is made to address errors or +change data, it only logs traffic & events as they pass by. +*/ + +package main + +import ( + wyc "github.com/voidshard/wysteria/common" + wym "github.com/voidshard/wysteria/common/middleware" + wsi "github.com/voidshard/wysteria/server/instrumentation" + "time" +) + +const ( + keywordEnter = "enter" + keywordExit = "exit" +) + +type MiddlewareMonitor struct { + // This is the actual server handler that will be called - amidst our logging + server wym.ServerHandler + + // The middleware endpoint to kick off (we'll take input from here and pass them back & forth) + epServer wym.EndpointServer + + // The monitor to use to log things to + monitor *wsi.Monitor +} + +func newMiddlewareMonitor(endpoint wym.EndpointServer, monitor *wsi.Monitor) *MiddlewareMonitor { + return &MiddlewareMonitor{ + epServer: endpoint, + monitor: monitor, + } +} + +// The server calls us to listen, we'll call the middleware server in turn. +// Essentially, all we have to do is pass back and forth, and be sure not to change any state. +// +func (s *MiddlewareMonitor) ListenAndServe(config *wym.Settings, server wym.ServerHandler) error { + s.server = server + return s.epServer.ListenAndServe(config, s) +} + +// Time is up, kill everything and shutdown the server, kill all connections +// +func (s *MiddlewareMonitor) Shutdown() error { + s.epServer.Shutdown() + return nil +} + +// Call on our monitor to do the actual logging business +// +func (s *MiddlewareMonitor) log(err error, t int64, opts ...wsi.Opt) { + area := "middleware" + go func() { + opts = append(opts, wsi.Time(time.Now().UnixNano()-t)) + if err != nil { + s.monitor.Err(err, area, opts...) + return + } + s.monitor.Log(area, opts...) + }() +} + +// All following funcs simply record the current time, call the appropriate server call +// and pass the results back to the calling middleware. +// Except of course, we log the call in the middle. +// +func (s *MiddlewareMonitor) CreateCollection(in *wyc.Collection) (string, error) { + ts := time.Now().UnixNano() + s.log(nil, ts, wsi.IsCreate(), wsi.TargetCollection(), wsi.Note(keywordEnter, in.Name)) + result, err := s.server.CreateCollection(in) + s.log(err, ts, wsi.IsCreate(), wsi.TargetCollection(), wsi.Note(keywordExit, in.Name)) + return result, err +} + +func (s *MiddlewareMonitor) CreateItem(in *wyc.Item) (string, error) { + ts := time.Now().UnixNano() + s.log(nil, ts, wsi.IsCreate(), wsi.TargetItem(), wsi.Note(keywordEnter, in.Parent, in.Id, in.ItemType, in.Variant)) + result, err := s.server.CreateItem(in) + s.log(err, ts, wsi.IsCreate(), wsi.TargetItem(), wsi.Note(keywordExit, in.Parent, in.Id, in.ItemType, in.Variant)) + return result, err +} + +func (s *MiddlewareMonitor) CreateVersion(in *wyc.Version) (string, int32, error) { + ts := time.Now().UnixNano() + s.log(nil, ts, wsi.IsCreate(), wsi.TargetVersion(), wsi.Note(keywordEnter, in.Parent)) + resultId, resultVer, err := s.server.CreateVersion(in) + s.log(err, ts, wsi.IsCreate(), wsi.TargetVersion(), wsi.Note(keywordExit, in.Parent, resultId, resultVer)) + return resultId, resultVer, err +} + +func (s *MiddlewareMonitor) CreateResource(in *wyc.Resource) (string, error) { + ts := time.Now().UnixNano() + s.log(nil, ts, wsi.IsCreate(), wsi.TargetResource(), wsi.Note(keywordEnter, in.Parent, in.Name, in.ResourceType, in.Location)) + result, err := s.server.CreateResource(in) + s.log(err, ts, wsi.IsCreate(), wsi.TargetResource(), wsi.Note(keywordExit, in.Parent, in.Name, in.ResourceType, in.Location)) + return result, err +} + +func (s *MiddlewareMonitor) CreateLink(in *wyc.Link) (string, error) { + ts := time.Now().UnixNano() + s.log(nil, ts, wsi.IsCreate(), wsi.TargetLink(), wsi.Note(keywordEnter, in.Src, in.Dst)) + result, err := s.server.CreateLink(in) + s.log(err, ts, wsi.IsCreate(), wsi.TargetLink(), wsi.Note(keywordExit, in.Src, in.Dst)) + return result, err +} + +func (s *MiddlewareMonitor) DeleteCollection(in string) error { + ts := time.Now().UnixNano() + s.log(nil, ts, wsi.IsDelete(), wsi.TargetCollection(), wsi.Note(keywordEnter, in)) + err := s.server.DeleteCollection(in) + s.log(err, ts, wsi.IsDelete(), wsi.TargetCollection(), wsi.Note(keywordExit, in)) + return err +} + +func (s *MiddlewareMonitor) DeleteItem(in string) error { + ts := time.Now().UnixNano() + s.log(nil, ts, wsi.IsDelete(), wsi.TargetItem(), wsi.Note(keywordEnter, in)) + err := s.server.DeleteItem(in) + s.log(err, ts, wsi.IsDelete(), wsi.TargetItem(), wsi.Note(keywordExit, in)) + return err +} + +func (s *MiddlewareMonitor) DeleteVersion(in string) error { + ts := time.Now().UnixNano() + s.log(nil, ts, wsi.IsDelete(), wsi.TargetVersion(), wsi.Note(keywordEnter, in)) + err := s.server.DeleteVersion(in) + s.log(err, ts, wsi.IsDelete(), wsi.TargetVersion(), wsi.Note(keywordExit, in)) + return err +} + +func (s *MiddlewareMonitor) DeleteResource(in string) error { + ts := time.Now().UnixNano() + s.log(nil, ts, wsi.IsDelete(), wsi.TargetResource(), wsi.Note(keywordEnter, in)) + err := s.server.DeleteResource(in) + s.log(err, ts, wsi.IsDelete(), wsi.TargetResource(), wsi.Note(keywordExit, in)) + return err +} + +func (s *MiddlewareMonitor) FindCollections(l int32, o int32, q []*wyc.QueryDesc) ([]*wyc.Collection, error) { + ts := time.Now().UnixNano() + s.log(nil, ts, wsi.IsFind(), wsi.TargetCollection(), wsi.Note(keywordEnter, l, o)) + results, err := s.server.FindCollections(l, o, q) + s.log(err, ts, wsi.IsFind(), wsi.TargetCollection(), wsi.Note(keywordExit, l, o, len(results))) + return results, err +} + +func (s *MiddlewareMonitor) FindItems(l int32, o int32, q []*wyc.QueryDesc) ([]*wyc.Item, error) { + ts := time.Now().UnixNano() + s.log(nil, ts, wsi.IsFind(), wsi.TargetItem(), wsi.Note(keywordEnter, l, o)) + results, err := s.server.FindItems(l, o, q) + s.log(err, ts, wsi.IsFind(), wsi.TargetItem(), wsi.Note(keywordExit, l, o, len(results))) + return results, err +} + +func (s *MiddlewareMonitor) FindVersions(l int32, o int32, q []*wyc.QueryDesc) ([]*wyc.Version, error) { + ts := time.Now().UnixNano() + s.log(nil, ts, wsi.IsFind(), wsi.TargetVersion(), wsi.Note(keywordEnter, l, o)) + results, err := s.server.FindVersions(l, o, q) + s.log(err, ts, wsi.IsFind(), wsi.TargetVersion(), wsi.Note(keywordExit, l, o, len(results))) + return results, err +} + +func (s *MiddlewareMonitor) FindResources(l int32, o int32, q []*wyc.QueryDesc) ([]*wyc.Resource, error) { + ts := time.Now().UnixNano() + s.log(nil, ts, wsi.IsFind(), wsi.TargetResource(), wsi.Note(keywordEnter, l, o)) + results, err := s.server.FindResources(l, o, q) + s.log(err, ts, wsi.IsFind(), wsi.TargetResource(), wsi.Note(keywordExit, l, o, len(results))) + return results, err +} + +func (s *MiddlewareMonitor) FindLinks(l int32, o int32, q []*wyc.QueryDesc) ([]*wyc.Link, error) { + ts := time.Now().UnixNano() + s.log(nil, ts, wsi.IsFind(), wsi.TargetLink(), wsi.Note(keywordEnter, l, o)) + results, err := s.server.FindLinks(l, o, q) + s.log(err, ts, wsi.IsFind(), wsi.TargetLink(), wsi.Note(keywordExit, l, o, len(results))) + return results, err +} + +func (s *MiddlewareMonitor) PublishedVersion(in string) (*wyc.Version, error) { + ts := time.Now().UnixNano() + s.log(nil, ts, wsi.IsPublished(), wsi.TargetVersion(), wsi.Note(keywordEnter, in)) + result, err := s.server.PublishedVersion(in) + s.log(err, ts, wsi.IsPublished(), wsi.TargetVersion(), wsi.Note(keywordExit, in)) + return result, err +} + +func (s *MiddlewareMonitor) SetPublishedVersion(in string) error { + ts := time.Now().UnixNano() + s.log(nil, ts, wsi.IsPublish(), wsi.TargetVersion(), wsi.Note(keywordEnter, in)) + err := s.server.SetPublishedVersion(in) + s.log(err, ts, wsi.IsPublish(), wsi.TargetVersion(), wsi.Note(keywordExit, in)) + return err +} + +func (s *MiddlewareMonitor) UpdateVersionFacets(in string, m map[string]string) error { + ts := time.Now().UnixNano() + s.log(nil, ts, wsi.IsUpdate(), wsi.TargetVersion(), wsi.Note(keywordEnter, in)) + err := s.server.UpdateVersionFacets(in, m) + s.log(err, ts, wsi.IsUpdate(), wsi.TargetVersion(), wsi.Note(keywordExit, in)) + return err +} + +func (s *MiddlewareMonitor) UpdateItemFacets(in string, m map[string]string) error { + ts := time.Now().UnixNano() + s.log(nil, ts, wsi.IsUpdate(), wsi.TargetItem(), wsi.Note(keywordEnter, in)) + err := s.server.UpdateItemFacets(in, m) + s.log(err, ts, wsi.IsUpdate(), wsi.TargetItem(), wsi.Note(keywordExit, in)) + return err +} + +func (s *MiddlewareMonitor) UpdateCollectionFacets(in string, m map[string]string) error { + ts := time.Now().UnixNano() + s.log(nil, ts, wsi.IsUpdate(), wsi.TargetCollection(), wsi.Note(keywordEnter, in)) + err := s.server.UpdateCollectionFacets(in, m) + s.log(err, ts, wsi.IsUpdate(), wsi.TargetCollection(), wsi.Note(keywordExit, in)) + return err +} + +func (s *MiddlewareMonitor) UpdateResourceFacets(in string, m map[string]string) error { + ts := time.Now().UnixNano() + s.log(nil, ts, wsi.IsUpdate(), wsi.TargetResource(), wsi.Note(keywordEnter, in)) + err := s.server.UpdateResourceFacets(in, m) + s.log(err, ts, wsi.IsUpdate(), wsi.TargetResource(), wsi.Note(keywordExit, in)) + return err +} + +func (s *MiddlewareMonitor) UpdateLinkFacets(in string, m map[string]string) error { + ts := time.Now().UnixNano() + s.log(nil, ts, wsi.IsUpdate(), wsi.TargetLink(), wsi.Note(keywordEnter, in)) + err := s.server.UpdateLinkFacets(in, m) + s.log(err, ts, wsi.IsUpdate(), wsi.TargetLink(), wsi.Note(keywordExit, in)) + return err +} diff --git a/server/instrumentation_searchbase.go b/server/instrumentation_searchbase.go new file mode 100644 index 0000000..df73769 --- /dev/null +++ b/server/instrumentation_searchbase.go @@ -0,0 +1,203 @@ +/* +Database instrumentation + - This is an implementation of Database that accepts a logging monitor and another implementor + of Database. All this does is pass any calls to the database it wraps & passes + back the result(s). In the process, every action is logged to the given monitor. +*/ + +package main + +import ( + wyc "github.com/voidshard/wysteria/common" + wsi "github.com/voidshard/wysteria/server/instrumentation" + wyd "github.com/voidshard/wysteria/server/searchbase" + "time" +) + +func newSearchbaseMonitor(db wyd.Searchbase, monitor *wsi.Monitor) wyd.Searchbase { + return &SearchbaseMonitor{searchbase: db, monitor: monitor} +} + +type SearchbaseMonitor struct { + searchbase wyd.Searchbase + monitor *wsi.Monitor +} + +// Call on our monitor to do the actual logging business +// +func (s *SearchbaseMonitor) log(err error, t int64, opts ...wsi.Opt) { + area := "searchbase" + go func() { + opts = append(opts, wsi.Time(time.Now().UnixNano()-t)) + if err != nil { + s.monitor.Err(err, area, opts...) + return + } + s.monitor.Log(area, opts...) + }() +} + +// Kill connection to remote host(s) +func (s *SearchbaseMonitor) Close() error { + return s.Close() +} + +// Insert collection into the sb with the given Id +func (s *SearchbaseMonitor) InsertCollection(id string, in *wyc.Collection) error { + ts := time.Now().UnixNano() + err := s.searchbase.InsertCollection(id, in) + s.log(err, ts, wsi.IsCreate(), wsi.TargetCollection(), wsi.Note(in.Parent, in.Id, in.Name)) + return err +} + +// Insert item into the sb with the given Id +func (s *SearchbaseMonitor) InsertItem(id string, in *wyc.Item) error { + ts := time.Now().UnixNano() + err := s.searchbase.InsertItem(id, in) + s.log(err, ts, wsi.IsCreate(), wsi.TargetItem(), wsi.Note(in.Parent, in.Id, in.ItemType, in.Variant)) + return err +} + +// Insert version into the sb with the given Id +func (s *SearchbaseMonitor) InsertVersion(id string, in *wyc.Version) error { + ts := time.Now().UnixNano() + err := s.searchbase.InsertVersion(id, in) + s.log(err, ts, wsi.IsCreate(), wsi.TargetVersion(), wsi.Note(in.Parent, in.Id, in.Number)) + return err +} + +// Insert resource into the sb with the given Id +func (s *SearchbaseMonitor) InsertResource(id string, in *wyc.Resource) error { + ts := time.Now().UnixNano() + err := s.searchbase.InsertResource(id, in) + s.log(err, ts, wsi.IsCreate(), wsi.TargetVersion(), wsi.Note(in.Parent, in.Id, in.Name, in.ResourceType, in.Location)) + return err +} + +// Insert link into the sb with the given Id +func (s *SearchbaseMonitor) InsertLink(id string, in *wyc.Link) error { + ts := time.Now().UnixNano() + err := s.searchbase.InsertLink(id, in) + s.log(err, ts, wsi.IsCreate(), wsi.TargetVersion(), wsi.Note(in.Id, in.Src, in.Dst)) + return err +} + +// Update the facets of the collection with the given id with the given facets +func (s *SearchbaseMonitor) UpdateCollection(id string, in *wyc.Collection) error { + ts := time.Now().UnixNano() + err := s.searchbase.UpdateCollection(id, in) + s.log(err, ts, wsi.IsUpdate(), wsi.TargetCollection(), wsi.Note(id)) + return err +} + +// Update the facets of the resource with the given id with the given facets +func (s *SearchbaseMonitor) UpdateResource(id string, in *wyc.Resource) error { + ts := time.Now().UnixNano() + err := s.searchbase.UpdateResource(id, in) + s.log(err, ts, wsi.IsUpdate(), wsi.TargetResource(), wsi.Note(id)) + return err +} + +// Update the facets of the link with the given id with the given facets +func (s *SearchbaseMonitor) UpdateLink(id string, in *wyc.Link) error { + ts := time.Now().UnixNano() + err := s.searchbase.UpdateLink(id, in) + s.log(err, ts, wsi.IsUpdate(), wsi.TargetLink(), wsi.Note(id)) + return err +} + +// Update the facets of the item with the given id with the given facets +func (s *SearchbaseMonitor) UpdateItem(id string, in *wyc.Item) error { + ts := time.Now().UnixNano() + err := s.searchbase.UpdateItem(id, in) + s.log(err, ts, wsi.IsUpdate(), wsi.TargetItem(), wsi.Note(id)) + return err +} + +// Update the facets of the version with the given id with the given facets +func (s *SearchbaseMonitor) UpdateVersion(id string, in *wyc.Version) error { + ts := time.Now().UnixNano() + err := s.searchbase.UpdateVersion(id, in) + s.log(err, ts, wsi.IsUpdate(), wsi.TargetVersion(), wsi.Note(id)) + return err +} + +// Delete collection search data by Id(s) +func (s *SearchbaseMonitor) DeleteCollection(in ...string) error { + ts := time.Now().UnixNano() + err := s.searchbase.DeleteCollection(in...) + s.log(err, ts, wsi.IsDelete(), wsi.TargetCollection(), wsi.Note(in)) + return err +} + +// Delete item search data by Id(s) +func (s *SearchbaseMonitor) DeleteItem(in ...string) error { + ts := time.Now().UnixNano() + err := s.searchbase.DeleteItem(in...) + s.log(err, ts, wsi.IsDelete(), wsi.TargetItem(), wsi.Note(in)) + return err +} + +// Delete version search data by Id(s) +func (s *SearchbaseMonitor) DeleteVersion(in ...string) error { + ts := time.Now().UnixNano() + err := s.searchbase.DeleteVersion(in...) + s.log(err, ts, wsi.IsDelete(), wsi.TargetVersion(), wsi.Note(in)) + return err +} + +// Delete resource search data by Id(s) +func (s *SearchbaseMonitor) DeleteResource(in ...string) error { + ts := time.Now().UnixNano() + err := s.searchbase.DeleteResource(in...) + s.log(err, ts, wsi.IsDelete(), wsi.TargetResource(), wsi.Note(in)) + return err +} + +// Delete link search data by Id(s) +func (s *SearchbaseMonitor) DeleteLink(in ...string) error { + ts := time.Now().UnixNano() + err := s.searchbase.DeleteLink(in...) + s.log(err, ts, wsi.IsDelete(), wsi.TargetLink(), wsi.Note(in)) + return err +} + +// Query for collections +func (s *SearchbaseMonitor) QueryCollection(l, o int, q ...*wyc.QueryDesc) ([]string, error) { + ts := time.Now().UnixNano() + results, err := s.searchbase.QueryCollection(l, o, q...) + s.log(err, ts, wsi.IsFind(), wsi.TargetCollection(), wsi.Note(l, o, len(results))) + return results, err +} + +// Query for items +func (s *SearchbaseMonitor) QueryItem(l, o int, q ...*wyc.QueryDesc) ([]string, error) { + ts := time.Now().UnixNano() + results, err := s.searchbase.QueryItem(l, o, q...) + s.log(err, ts, wsi.IsFind(), wsi.TargetItem(), wsi.Note(l, o, len(results))) + return results, err +} + +// Query for versions +func (s *SearchbaseMonitor) QueryVersion(l, o int, q ...*wyc.QueryDesc) ([]string, error) { + ts := time.Now().UnixNano() + results, err := s.searchbase.QueryVersion(l, o, q...) + s.log(err, ts, wsi.IsFind(), wsi.TargetVersion(), wsi.Note(l, o, len(results))) + return results, err +} + +// Query for resources +func (s *SearchbaseMonitor) QueryResource(l, o int, q ...*wyc.QueryDesc) ([]string, error) { + ts := time.Now().UnixNano() + results, err := s.searchbase.QueryResource(l, o, q...) + s.log(err, ts, wsi.IsFind(), wsi.TargetResource(), wsi.Note(l, o, len(results))) + return results, err +} + +// Query for links +func (s *SearchbaseMonitor) QueryLink(l, o int, q ...*wyc.QueryDesc) ([]string, error) { + ts := time.Now().UnixNano() + results, err := s.searchbase.QueryLink(l, o, q...) + s.log(err, ts, wsi.IsFind(), wsi.TargetLink(), wsi.Note(l, o, len(results))) + return results, err +} diff --git a/server/main.go b/server/main.go index eef6e85..27fd235 100644 --- a/server/main.go +++ b/server/main.go @@ -1,10 +1,76 @@ +/* +Main server entry point. + +Data flow through interfaces during a client request + + [client code] wysteria/client + | + | * ---------------------------- enter middleware ---------------------------- * + | + V + [client transport code] Interface: EndpointClient wysteria/common/middleware.go + | + === \\ network // + | + V + [server transport code] Interface: ServerHandler wysteria/common/middleware.go + | + | * ---------------------------- exit middleware ---------------------------- * + | + V + [middleware shim layer] Interface: EndpointServer wysteria/server/instrumentation_middleware.go + | + | + V + [main server] Interface: EndpointServer wysteria/server/server.go + | + | + | [Nb. What order this goes to the searchbase / database (or even if it does) depends on the operation] + +------/--------+----------------------------------------------------------------------------------+ + | | + V | + [database shim layer] Interface: Database wysteria/server/instrumentation_database.go | + | V + | [searchbase shim layer] Interface: Searchbase wysteria/server/instrumentation_searchbase.go + V | + [database layer] Interface: Database wysteria/server/database/database.go | + | V + | [searchbase layer] Interface: Searchbase wysteria/server/searchbase/searchbase.go + V | + [database shim layer] Interface: Database wysteria/server/instrumentation_database.go | + | V + | [searchbase shim layer] Interface: Searchbase wysteria/server/instrumentation_searchbase.go + | | + | | + +---------------+----------------------------------------------------------------------------------+ + | + V + [middleware shim layer] Interface: EndpointServer wysteria/server/instrumentation_middleware.go + | + | + | * ---------------------------- enter middleware ---------------------------- * + | + V + [server transport code] Interface: ServerHandler wysteria/common/middleware.go + | + === \\ network // + | + V + [client transport code] Interface: EndpointClient wysteria/common/middleware.go + | + | * ---------------------------- exit middleware ---------------------------- * + | + V + [client code] wysteria/client + +*/ package main import ( + wsi "github.com/voidshard/wysteria/server/instrumentation" + kp "gopkg.in/alecthomas/kingpin.v2" "os" "time" - kp "gopkg.in/alecthomas/kingpin.v2" - wsi "github.com/voidshard/wysteria/server/instrumentation" ) func main() { diff --git a/server/searchbase/bleve.go b/server/searchbase/bleve.go index 755786e..e5fa0cf 100644 --- a/server/searchbase/bleve.go +++ b/server/searchbase/bleve.go @@ -334,12 +334,20 @@ func genericQuery(limit, from int, index bleve.Index, convert func(desc *wyc.Que } } - ids := []string{} + ids := map[string]bool{} for _, doc := range result.Hits { - ids = append(ids, doc.ID) + ids[doc.ID] = true } - return ids, nil + // Only return unique IDs + keys := make([]string, len(ids)) + count := 0 + for id := range ids { + keys[count] = id + count += 1 + } + + return keys, nil } // Special case 'match all' query diff --git a/server/searchbase/elastic.6.go b/server/searchbase/elastic.6.go new file mode 100644 index 0000000..da2f826 --- /dev/null +++ b/server/searchbase/elastic.6.go @@ -0,0 +1,417 @@ +/*Use Elastic as a search backend. This is specifically for Elastic 6 + +Elastic includes the helpful notion of tokenizing everything we send it. This is a problem for us because we don't +really enforce any style of ID(s), Names, or other strings which elastic will happily token-ify based on symbols, +spaces or .. other such things. To get around this, we encode strings we send elastic with base64 to make them +continuous non-token-ify-able strings. Not the most efficient approach, but it does save on headaches. +*/ + +package searchends + +import ( + "fmt" + "context" + wyc "github.com/voidshard/wysteria/common" + "github.com/olivere/elastic" +) + + +func elasticSixConnect(settings *Settings) (Searchbase, error) { + clt, err := elastic.NewClient( + // Set elastic url to the given host / port + elastic.SetURL(fmt.Sprintf("http://%s:%d", settings.Host, settings.Port)), + ) + if err != nil { + return nil, err + } + + return &ElasticV6{client: clt, config: settings}, err +} + +type ElasticV6 struct { + config *Settings + client *elastic.Client +} + +// Kill connection to remote host(s) +func (e *ElasticV6) Close() error { + return nil +} + +// Insert collection using the given id +func (e *ElasticV6) InsertCollection(id string, in *wyc.Collection) error { + doc := copyCollection(in) // make copy so we don't modify the original + doc.Id = b64encode(doc.Id) + doc.Parent = b64encode(doc.Parent) + doc.Name = b64encode(doc.Name) // mutate string so we aren't thrown by special chars + for k, v := range in.Facets { + doc.Facets[b64encode(k)] = b64encode(v) + } + return e.insert(tableCollection, id, doc) +} + +// Insert collection using the given id +func (e *ElasticV6) InsertItem(id string, in *wyc.Item) error { + doc := copyItem(in) // make copy so we don't modify the original + doc.Id = b64encode(doc.Id) + doc.Parent = b64encode(doc.Parent) + // mutate user supplied strings so we aren't thrown by special chars + doc.ItemType = b64encode(doc.ItemType) + doc.Variant = b64encode(doc.Variant) + for k, v := range in.Facets { + doc.Facets[b64encode(k)] = b64encode(v) + } + return e.insert(tableItem, id, doc) +} + +// Insert version using the given id +func (e *ElasticV6) InsertVersion(id string, in *wyc.Version) error { + doc := copyVersion(in) // make copy so we don't modify the original + doc.Id = b64encode(doc.Id) + doc.Parent = b64encode(doc.Parent) + // mutate user supplied strings so we aren't thrown by special chars + for k, v := range in.Facets { + doc.Facets[b64encode(k)] = b64encode(v) + } + return e.insert(tableVersion, id, doc) +} + +// Insert resource using the given id +func (e *ElasticV6) InsertResource(id string, in *wyc.Resource) error { + doc := copyResource(in) // make copy so we don't modify the original + doc.Name = b64encode(doc.Name) + doc.Id = b64encode(doc.Id) + doc.Parent = b64encode(doc.Parent) + doc.ResourceType = b64encode(doc.ResourceType) + doc.Location = b64encode(doc.Location) + for k, v := range in.Facets { + doc.Facets[b64encode(k)] = b64encode(v) + } + return e.insert(tableResource, id, doc) +} + +// Insert link using the given id +func (e *ElasticV6) InsertLink(id string, in *wyc.Link) error { + doc := copyLink(in) + doc.Id = b64encode(doc.Id) + doc.Src = b64encode(doc.Src) + doc.Dst = b64encode(doc.Dst) + doc.Name = b64encode(doc.Name) + for k, v := range in.Facets { + doc.Facets[b64encode(k)] = b64encode(v) + } + return e.insert(tableLink, id, doc) +} + +// Update collection with given id +func (e *ElasticV6) UpdateCollection(id string, doc *wyc.Collection) error { + // Explicit insert to ID deletes & replaces doc + return e.InsertCollection(id, doc) +} + +// Update item with given id +func (e *ElasticV6) UpdateItem(id string, doc *wyc.Item) error { + // Explicit insert to ID deletes & replaces doc + return e.InsertItem(id, doc) +} + +// Update version with given id +func (e *ElasticV6) UpdateVersion(id string, doc *wyc.Version) error { + // Explicit insert to ID deletes & replaces doc + return e.InsertVersion(id, doc) +} + +// Update resource with given id +func (e *ElasticV6) UpdateResource(id string, doc *wyc.Resource) error { + // Explicit insert to ID deletes & replaces doc + return e.InsertResource(id, doc) +} + +// Update link with given id +func (e *ElasticV6) UpdateLink(id string, doc *wyc.Link) error { + // Explicit insert to ID deletes & replaces doc + return e.InsertLink(id, doc) +} + +// Delete collections by ID(s) +func (e *ElasticV6) DeleteCollection(ids ...string) error { + return e.delete(tableCollection, ids...) +} + +// Delete items by ID(s) +func (e *ElasticV6) DeleteItem(ids ...string) error { + return e.delete(tableItem, ids...) +} + +// Delete versions by ID(s) +func (e *ElasticV6) DeleteVersion(ids ...string) error { + return e.delete(tableVersion, ids...) +} + +// Delete resources by ID(s) +func (e *ElasticV6) DeleteResource(ids ...string) error { + return e.delete(tableResource, ids...) +} + +// Delete links by ID(s) +func (e *ElasticV6) DeleteLink(ids ...string) error { + return e.delete(tableLink, ids...) +} + +// generic delete all these things +func (e *ElasticV6) delete(index string, in ...string) error { + if len(in) < 1 { + return nil + } + + matchIds := make([]elastic.Query, len(in)) + for i, id := range in { + b := elastic.NewBoolQuery() + b.Must(elastic.NewTermQuery("Id", id)) // Id must match exactly + matchIds[i] = b + } + + oquery := elastic.NewBoolQuery() + oquery.Should(matchIds...) // match any one of these Ids + + _, err := e.client.DeleteByQuery(index).Query(oquery).Do(context.Background()) + return err +} + +// generic `insert this thing` +func (e *ElasticV6) insert(index, id string, in wyc.Marshalable) error { + prep := e.client.Index().Index(index).Type(index).Id(id).BodyJson(in) + + if e.config.ReindexOnWrite { + // If "ReindexOnWrite" is set, we'll send Elastic ?refresh=true and .. wait .. + // https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-refresh.html + prep.Refresh("true") + } + + _, err := prep.Do(context.Background()) + return err +} + +// build term queries for given facets +func facetQuery(in map[string]string) (out []*elastic.TermQuery) { + for k, v := range in { + out = append(out, elastic.NewTermQuery(fmt.Sprintf("Facets.%s", b64encode(k)), b64encode(v))) + } + return +} + +// build term query for some string -> string +func termQuery(name, value string, encode bool) *elastic.TermQuery { + if encode { + value = b64encode(value) + } + return elastic.NewTermQuery(name, value) +} + +// build term queries for the given query description, assuming we're looking for a collection +func collectionQuery(in *wyc.QueryDesc) (out []*elastic.TermQuery) { + if in.Id != "" { + out = append(out, termQuery("Id", in.Id, true)) + } + if in.Parent != "" { + out = append(out, termQuery("Parent", in.Parent, true)) + } + if in.Facets != nil { + out = append(out, facetQuery(in.Facets)...) + } + if in.Name != "" { + out = append(out, termQuery("Name", in.Name, true)) + } + return +} + +// build term queries for the given query description, assuming we're looking for a item +func itemQuery(in *wyc.QueryDesc) (out []*elastic.TermQuery) { + if in.Id != "" { + out = append(out, termQuery("Id", in.Id, true)) + } + if in.Parent != "" { + out = append(out, termQuery("Parent", in.Parent, true)) + } + if in.Facets != nil { + out = append(out, facetQuery(in.Facets)...) + } + if in.ItemType != "" { + out = append(out, termQuery("ItemType", in.ItemType, true)) + } + if in.Variant != "" { + out = append(out, termQuery("Variant", in.Variant, true)) + } + return +} + +// build term queries for the given query description, assuming we're looking for a version +func versionQuery(in *wyc.QueryDesc) (out []*elastic.TermQuery) { + if in.Id != "" { + out = append(out, termQuery("Id", in.Id, true)) + } + if in.Parent != "" { + out = append(out, termQuery("Parent", in.Parent, true)) + } + if in.Facets != nil { + out = append(out, facetQuery(in.Facets)...) + } + if in.VersionNumber > 0 { + out = append(out, termQuery("Number", fmt.Sprintf("%d", in.VersionNumber), false)) + } + return +} + +// build term queries for the given query description, assuming we're looking for a resource +func resourceQuery(in *wyc.QueryDesc) (out []*elastic.TermQuery) { + if in.Id != "" { + out = append(out, termQuery("Id", in.Id, true)) + } + if in.Parent != "" { + out = append(out, termQuery("Parent", in.Parent, true)) + } + if in.Facets != nil { + out = append(out, facetQuery(in.Facets)...) + } + if in.Name != "" { + out = append(out, termQuery("Name", in.Name, true)) + } + if in.Location != "" { + out = append(out, termQuery("Location", in.Location, true)) + } + if in.ResourceType != "" { + out = append(out, termQuery("ResourceType", in.ResourceType, true)) + } + return +} + +// build term queries for the given query description, assuming we're looking for a link +func linkQuery(in *wyc.QueryDesc) (out []*elastic.TermQuery) { + if in.Id != "" { + out = append(out, termQuery("Id", in.Id, true)) + } + if in.Facets != nil { + out = append(out, facetQuery(in.Facets)...) + } + if in.Name != "" { + out = append(out, termQuery("Name", in.Name, true)) + } + if in.LinkSrc != "" { + out = append(out, termQuery("Src", in.LinkSrc, true)) + } + if in.LinkDst != "" { + out = append(out, termQuery("Dst", in.LinkDst, true)) + } + return +} + +// Given some term queries, join them with 'Must' and return the query that contains them in a 'Should'. +// +func joinAnd(in ...*elastic.TermQuery) *elastic.BoolQuery { + must := elastic.NewBoolQuery() + for _, tq := range in { + must.Must(tq) + } + return must +} + +type converter func (*wyc.QueryDesc) ([]*elastic.TermQuery) + +// generic query func +// string: index to check +// int: 'limit' results to at most int (where 0 indicates there is no limit) +// int: 'from' what number to start returning results from +// []*wyc.QueryDesc: queries to build from +// converter: function to use to convert QueryDesc -> elastic.Query +func (e *ElasticV6) query(index string, limit, offset int, queries []*wyc.QueryDesc, fn converter) ([]string, error) { + var q elastic.Query + + if len(queries) == 0 { + // Special case if there are no given QueryDesc items + q = elastic.NewMatchAllQuery() + } else { + // Turn QueryDesc(s) into elastic Query(s) + tmp := elastic.NewBoolQuery() + for _, query := range queries { + terms := fn(query) + if len(terms) == 0 { + continue + } + tmp.Should(joinAnd(terms...)) + } + q = tmp + } + + // prep query + base := e.client.Search().From(offset).Index(index).Type(index).NoStoredFields() + base.Size(matchAllSearchLimit) // default limit + + // be sure to set some kind of limit + if limit > 0 && limit <= matchAllSearchLimit { + base.Size(limit) + } + + hits, err := base.Query(q).Do(context.Background()) + if err != nil { + exists, eerr := e.client.IndexExists(index).Do(context.Background()) + if eerr == nil && !exists { + return make([]string, 0), nil + } + return nil, err + } + + results := make([]string, hits.Hits.TotalHits) + if len(results) == 0 { + return results, nil + } + for i, hit := range hits.Hits.Hits { + results[i] = hit.Id + } + + return results, nil +} + +// Query for collections +// int: 'limit' results to at most int (where 0 indicates there is no limit) +// int: 'from' what number to start returning results from +// ...QueryDes: description(s) of what to search for +// Ids will be returned for any doc matching all of the fields of any of the given QueryDesc +func (e *ElasticV6) QueryCollection(limit, offset int, in ...*wyc.QueryDesc) ([]string, error) { + return e.query(tableCollection, limit, offset, in, collectionQuery) +} + +// Query for items +// int: 'limit' results to at most int (where 0 indicates there is no limit) +// int: 'from' what number to start returning results from +// ...QueryDes: description(s) of what to search for +// Ids will be returned for any doc matching all of the fields of any of the given QueryDesc +func (e *ElasticV6) QueryItem(limit , offset int, in ...*wyc.QueryDesc) ([]string, error) { + return e.query(tableItem, limit, offset, in, itemQuery) +} + +// Query for versions +// int: 'limit' results to at most int (where 0 indicates there is no limit) +// int: 'from' what number to start returning results from +// ...QueryDes: description(s) of what to search for +// Ids will be returned for any doc matching all of the fields of any of the given QueryDesc +func (e *ElasticV6) QueryVersion(limit , offset int, in ...*wyc.QueryDesc) ([]string, error) { + return e.query(tableVersion, limit, offset, in, versionQuery) +} + +// Query for resources +// int: 'limit' results to at most int (where 0 indicates there is no limit) +// int: 'from' what number to start returning results from +// ...QueryDes: description(s) of what to search for +// Ids will be returned for any doc matching all of the fields of any of the given QueryDesc +func (e *ElasticV6) QueryResource(limit , offset int, in ...*wyc.QueryDesc) ([]string, error) { + return e.query(tableResource, limit, offset, in, resourceQuery) +} + +// Query for links +// int: 'limit' results to at most int (where 0 indicates there is no limit) +// int: 'from' what number to start returning results from +// ...QueryDes: description(s) of what to search for +// Ids will be returned for any doc matching all of the fields of any of the given QueryDesc +func (e *ElasticV6) QueryLink(limit , offset int, in ...*wyc.QueryDesc) ([]string, error) { + return e.query(tableLink, limit, offset, in, linkQuery) +} diff --git a/server/searchbase/elastic.go b/server/searchbase/elastic.go deleted file mode 100644 index 009c0c6..0000000 --- a/server/searchbase/elastic.go +++ /dev/null @@ -1,456 +0,0 @@ -package searchends - -import ( - "errors" - "fmt" - wyc "github.com/voidshard/wysteria/common" - "gopkg.in/olivere/elastic.v2" - "sync" - "time" -) - -const ( - // Some number of seconds to back off before retrying in the event a delete fails - errDeleteBackoff = time.Second * 5 -) - -// Create a new elastic searchbase struct and call connect -func elasticConnect(settings *Settings) (Searchbase, error) { - client, err := elastic.NewClient( - // Set elastic url to the given host / port - elastic.SetURL(fmt.Sprintf("http://%s:%d", settings.Host, settings.Port)), - - // If enabled there is some race condition in the underlying lib that can cause use to always - // attempt to connect to the localhost. Assuming you're not running ES on the localhost you'll be - // given a "no available hosts" error or something. - elastic.SetSniff(false), - ) - if err != nil { - return nil, err - } - - e := &elasticSearch{ - Settings: settings, - client: client, - } - - err = e.createIndexIfNotExists(e.Settings.Database) - if err != nil { - return nil, err - } - - return e, nil -} - -// elastic client wrapper struct -type elasticSearch struct { - Settings *Settings - client *elastic.Client -} - -// Insert collection using the given id -func (e *elasticSearch) InsertCollection(id string, in *wyc.Collection) error { - doc := copyCollection(in) // make copy so we don't modify the original - doc.Name = b64encode(doc.Name) // mutate string so we aren't thrown by special chars - for k, v := range in.Facets { - doc.Facets[b64encode(k)] = b64encode(v) - } - return e.insert(tableCollection, id, doc) -} - -// Insert collection using the given id -func (e *elasticSearch) InsertItem(id string, in *wyc.Item) error { - doc := copyItem(in) // make copy so we don't modify the original - - // mutate user supplied strings so we aren't thrown by special chars - doc.ItemType = b64encode(doc.ItemType) - doc.Variant = b64encode(doc.Variant) - for k, v := range in.Facets { - doc.Facets[b64encode(k)] = b64encode(v) - } - return e.insert(tableItem, id, doc) -} - -// Insert version using the given id -func (e *elasticSearch) InsertVersion(id string, in *wyc.Version) error { - doc := copyVersion(in) // make copy so we don't modify the original - - // mutate user supplied strings so we aren't thrown by special chars - for k, v := range in.Facets { - doc.Facets[b64encode(k)] = b64encode(v) - } - return e.insert(tableVersion, id, doc) -} - -// Insert resource using the given id -func (e *elasticSearch) InsertResource(id string, in *wyc.Resource) error { - doc := copyResource(in) // make copy so we don't modify the original - doc.Name = b64encode(doc.Name) - doc.ResourceType = b64encode(doc.ResourceType) - doc.Location = b64encode(doc.Location) - for k, v := range in.Facets { - doc.Facets[b64encode(k)] = b64encode(v) - } - return e.insert(tableResource, id, doc) -} - -// Insert link using the given id -func (e *elasticSearch) InsertLink(id string, in *wyc.Link) error { - doc := copyLink(in) - doc.Name = b64encode(doc.Name) - for k, v := range in.Facets { - doc.Facets[b64encode(k)] = b64encode(v) - } - return e.insert(tableLink, id, doc) -} - -// Update collection with given id -func (e *elasticSearch) UpdateCollection(id string, doc *wyc.Collection) error { - // Explicit insert to ID deletes & replaces doc - return e.InsertCollection(id, doc) -} - -// Update item with given id -func (e *elasticSearch) UpdateItem(id string, doc *wyc.Item) error { - // Explicit insert to ID deletes & replaces doc - return e.InsertItem(id, doc) -} - -// Update version with given id -func (e *elasticSearch) UpdateVersion(id string, doc *wyc.Version) error { - // Explicit insert to ID deletes & replaces doc - return e.InsertVersion(id, doc) -} - -// Update resource with given id -func (e *elasticSearch) UpdateResource(id string, doc *wyc.Resource) error { - // Explicit insert to ID deletes & replaces doc - return e.InsertResource(id, doc) -} - -// Update link with given id -func (e *elasticSearch) UpdateLink(id string, doc *wyc.Link) error { - // Explicit insert to ID deletes & replaces doc - return e.InsertLink(id, doc) -} - -// Delete collections by ID(s) -func (e *elasticSearch) DeleteCollection(ids ...string) error { - return e.generic_delete(tableCollection, ids...) -} - -// Delete items by ID(s) -func (e *elasticSearch) DeleteItem(ids ...string) error { - return e.generic_delete(tableItem, ids...) -} - -// Delete versions by ID(s) -func (e *elasticSearch) DeleteVersion(ids ...string) error { - return e.generic_delete(tableVersion, ids...) -} - -// Delete resources by ID(s) -func (e *elasticSearch) DeleteResource(ids ...string) error { - return e.generic_delete(tableResource, ids...) -} - -// Delete links by ID(s) -func (e *elasticSearch) DeleteLink(ids ...string) error { - return e.generic_delete(tableLink, ids...) -} - -// Special case for a query that has no query args (match all query) -func (e *elasticSearch) emptyQuery(limit, from int, table string) ([]string, error) { - base := e.client.Search().Index(e.Settings.Database).Type(table).Fields("Id").From(from) - if limit > matchAllSearchLimit { - limit = matchAllSearchLimit - } - if limit > 0 { - base.Size(limit) - } - - matchAll := elastic.NewMatchAllQuery() - results := []string{} - - res, err := base.Query(matchAll).Do() // perform the query - if err != nil { - return results, err - } else { - // And pull together all the results - for _, hit := range res.Hits.Hits { - // ToDo: works, but could use some straightening up - // (We only asked for the Id field) - result_id := hit.Fields["Id"].([]interface{})[0].(string) - results = append(results, result_id) - } - } - return results, nil -} - -// Search for collections matching the given query descriptions -func (e *elasticSearch) QueryCollection(limit, from int, qs ...*wyc.QueryDesc) ([]string, error) { - if len(qs) == 0 { - return e.emptyQuery(limit, from, tableCollection) - } - return e.fanSearch(tableCollection, elasticTermsCollection, limit, from, qs...) -} - -// Search for items matching the given query descriptions -func (e *elasticSearch) QueryItem(limit, from int, qs ...*wyc.QueryDesc) ([]string, error) { - if len(qs) == 0 { - return e.emptyQuery(limit, from, tableItem) - } - return e.fanSearch(tableItem, elasticTermsItem, limit, from, qs...) -} - -// Search for versions matching the given query descriptions -func (e *elasticSearch) QueryVersion(limit, from int, qs ...*wyc.QueryDesc) ([]string, error) { - if len(qs) == 0 { - return e.emptyQuery(limit, from, tableVersion) - } - return e.fanSearch(tableVersion, elasticTermsVersion, limit, from, qs...) -} - -// Search for resources matching the given query descriptions -func (e *elasticSearch) QueryResource(limit, from int, qs ...*wyc.QueryDesc) ([]string, error) { - if len(qs) == 0 { - return e.emptyQuery(limit, from, tableResource) - } - return e.fanSearch(tableResource, elasticTermsResource, limit, from, qs...) -} - -// Search for links matching the given query descriptions -func (e *elasticSearch) QueryLink(limit, from int, qs ...*wyc.QueryDesc) ([]string, error) { - if len(qs) == 0 { - return e.emptyQuery(limit, from, tableLink) - } - return e.fanSearch(tableLink, elasticTermsLink, limit, from, qs...) -} - -func (e *elasticSearch) Close() error { - e.client.Stop() - return nil -} - -// Delete the given IDs in the given index name -func (e *elasticSearch) generic_delete(col string, ids ...string) error { - // ToDo: Consider cleaning function - wg := sync.WaitGroup{} - wg.Add(len(ids)) - - err_chan := make(chan error) - all_errors := []error{} - - go func() { - for err := range err_chan { - fmt.Println(err) - all_errors = append(all_errors, err) - } - }() - - for _, id := range ids { - my_id := id - go func() { - _, err := e.client.Delete().Index(e.Settings.Database).Type(col).Id(my_id).Do() - if err != nil { - // If the delete for an ID fails _possibly_ it wasn't found as Elastic is still - // indexing it. To overcome this we'll retry the delete once after a small sleep period - // Delete called too quickly? Give elastic time to index & retry - time.Sleep(errDeleteBackoff) - _, err = e.client.Delete().Index(e.Settings.Database).Type(col).Id(my_id).Do() - } - if err != nil { - err_chan <- err - } - wg.Done() - }() - } - - wg.Wait() - close(err_chan) - - if len(all_errors) > 0 { - return all_errors[0] - } - return nil -} - -// Generic insert func - inserts document into collection with given id -func (e *elasticSearch) insert(col, id string, doc interface{}) error { - _, err := e.client.Index().Index(e.Settings.Database).Type(col).BodyJson(doc).Id(id).Do() - return err -} - -// Checks if an index with the given name exists. If not, creates the index. -func (e *elasticSearch) createIndexIfNotExists(index string) error { - exists, err := e.client.IndexExists(index).Do() - if err != nil { - return err - } - if exists { - return nil - } - - createIndex, err := e.client.CreateIndex(index).Do() - if err != nil { - return err - } - if createIndex.Acknowledged { - return nil - } - - return errors.New(fmt.Sprintf("Creation of index %s not acknowledged", index)) -} - -// Turn a QueryDesc into a set of elastic term queries that'll match a saved resource -func elasticTermsResource(qd *wyc.QueryDesc) (q []elastic.TermQuery) { - if qd.Id != "" { - q = append(q, elastic.NewTermQuery("Id", qd.Id)) - } - if qd.Name != "" { - q = append(q, elastic.NewTermQuery("Name", b64encode(qd.Name))) - } - if qd.ResourceType != "" { - q = append(q, elastic.NewTermQuery("ResourceType", b64encode(qd.ResourceType))) - } - if qd.Parent != "" { - q = append(q, elastic.NewTermQuery("Parent", qd.Parent)) - } - if qd.Location != "" { - q = append(q, elastic.NewTermQuery("Location", b64encode(qd.Location))) - } - for k, v := range qd.Facets { - key_encoded := b64encode(k) - val_encoded := b64encode(v) - q = append(q, elastic.NewTermQuery(fmt.Sprintf("Facets.%s", key_encoded), val_encoded)) - } - return q -} - -// Turn a QueryDesc into a set of elastic term queries that'll match a saved link -func elasticTermsLink(qd *wyc.QueryDesc) (q []elastic.TermQuery) { - if qd.Id != "" { - q = append(q, elastic.NewTermQuery("Id", qd.Id)) - } - if qd.Name != "" { - q = append(q, elastic.NewTermQuery("Name", b64encode(qd.Name))) - } - if qd.LinkSrc != "" { - q = append(q, elastic.NewTermQuery("Src", qd.LinkSrc)) - } - if qd.LinkDst != "" { - q = append(q, elastic.NewTermQuery("Dst", qd.LinkDst)) - } - for k, v := range qd.Facets { - key_encoded := b64encode(k) - val_encoded := b64encode(v) - q = append(q, elastic.NewTermQuery(fmt.Sprintf("Facets.%s", key_encoded), val_encoded)) - } - return q -} - -// Turn a QueryDesc into a set of elastic term queries that'll match a saved collection -func elasticTermsCollection(qd *wyc.QueryDesc) (q []elastic.TermQuery) { - if qd.Id != "" { - q = append(q, elastic.NewTermQuery("Id", qd.Id)) - } - if qd.Name != "" { - q = append(q, elastic.NewTermQuery("Name", b64encode(qd.Name))) - } - for k, v := range qd.Facets { - key_encoded := b64encode(k) - val_encoded := b64encode(v) - q = append(q, elastic.NewTermQuery(fmt.Sprintf("Facets.%s", key_encoded), val_encoded)) - } - if qd.Parent != "" { - q = append(q, elastic.NewTermQuery("Parent", qd.Parent)) - } - return q -} - -// Turn a QueryDesc into a set of elastic term queries that'll match a saved item -func elasticTermsItem(qd *wyc.QueryDesc) (q []elastic.TermQuery) { - if qd.Id != "" { - q = append(q, elastic.NewTermQuery("Id", qd.Id)) - } - if qd.ItemType != "" { - q = append(q, elastic.NewTermQuery("ItemType", b64encode(qd.ItemType))) - } - if qd.Variant != "" { - q = append(q, elastic.NewTermQuery("Variant", b64encode(qd.Variant))) - } - for k, v := range qd.Facets { - key_encoded := b64encode(k) - val_encoded := b64encode(v) - q = append(q, elastic.NewTermQuery(fmt.Sprintf("Facets.%s", key_encoded), val_encoded)) - } - if qd.Parent != "" { - q = append(q, elastic.NewTermQuery("Parent", qd.Parent)) - } - return q -} - -// Turn a QueryDesc into a set of elastic term queries that'll match a saved version -func elasticTermsVersion(qd *wyc.QueryDesc) (q []elastic.TermQuery) { - if qd.Id != "" { - q = append(q, elastic.NewTermQuery("Id", qd.Id)) - } - if qd.VersionNumber > 0 { - q = append(q, elastic.NewTermQuery("Number", qd.VersionNumber)) - } - for k, v := range qd.Facets { - key_encoded := b64encode(k) - val_encoded := b64encode(v) - q = append(q, elastic.NewTermQuery(fmt.Sprintf("Facets.%s", key_encoded), val_encoded)) - } - if qd.Parent != "" { - q = append(q, elastic.NewTermQuery("Parent", qd.Parent)) - } - return q -} - -// Send query to ElasticSearch -// - We only ever return IDs (our search db isn't our canonical data source) -// - Check to ensure we don't return duplicate IDs -// - The terms of each wyc.QueryDesc are joined via Bool query "MUST" thus are "AND" together -// - Because we concatenate all results, multiple wyc.QueryDesc form an "OR" -// -func (e *elasticSearch) fanSearch(table string, makeTerms func(*wyc.QueryDesc) []elastic.TermQuery, limit int, from int, queries ...*wyc.QueryDesc) ([]string, error) { - // Our query base - specify the index, page, limits & desired fields - base := e.client.Search().Index(e.Settings.Database).Type(table).Fields("Id").From(from) - if limit > 0 { - base.Size(limit) - } - - // Ultimately we're doing an "or" query where we're after any result that matches all - // the fields of at least one of our QueryDesc - or_query := elastic.NewBoolQuery() - for _, query := range queries { - - // Represents an individual QueryDesc getting made into a "must" term query - bquery := elastic.NewBoolQuery() - for _, q := range makeTerms(query) { - bquery = bquery.Must(q) - } - - or_query = or_query.Should(bquery) - } - - results := []string{} - - // Finally, perform the query - res, err := base.Query(or_query).Do() - if err != nil { - return results, err - } else { - // And pull together all the results - for _, hit := range res.Hits.Hits { - // ToDo: works, but could use some straightening up - // (We only asked for the Id field) - result_id := hit.Fields["Id"].([]interface{})[0].(string) - results = append(results, result_id) - } - } - - return results, nil -} diff --git a/server/searchbase/searchbase.go b/server/searchbase/searchbase.go index 2408e1f..f0f1ae1 100644 --- a/server/searchbase/searchbase.go +++ b/server/searchbase/searchbase.go @@ -18,12 +18,14 @@ package searchends import ( "errors" "fmt" + "time" wyc "github.com/voidshard/wysteria/common" ) const ( // The most results we'll ever return in one page if no query args are given matchAllSearchLimit = 10000 + maxAttempts = 3 // Driver name strings DriverElastic = "elastic" @@ -33,7 +35,7 @@ const ( var ( // All of the divers we know how to connect to connectors = map[string]func(*Settings) (Searchbase, error){ - DriverElastic: elasticConnect, + DriverElastic: elasticSixConnect, DriverBleve: bleveConnect, } ) @@ -44,7 +46,23 @@ func Connect(settings *Settings) (Searchbase, error) { if !ok { return nil, errors.New(fmt.Sprintf("Connector not found for %s", settings.Driver)) } - return connector(settings) + + // Attempt to connect to the given sb, if something goes wrong, we'll re-attempt a few times + // before quitting. Mostly this helps in docker setups / test situations where a + // container may not have spun up yet. + attempts := 0 + for { + sb, err := connector(settings) + if err != nil { + attempts += 1 + if attempts >= maxAttempts { + return sb, err + } + time.Sleep(1 * time.Second) + continue + } + return sb, err + } } // Interface to a data store whose primary goal is running search queries rather than storage. diff --git a/server/searchbase/settings.go b/server/searchbase/settings.go index ffc40e4..4cd1d90 100644 --- a/server/searchbase/settings.go +++ b/server/searchbase/settings.go @@ -6,7 +6,7 @@ const ( tableCollection = "collections" tableItem = "items" tableVersion = "versions" - tableResource = "fileresource" + tableResource = "resource" tableLink = "link" ) @@ -19,4 +19,5 @@ type Settings struct { Pass string Database string PemFile string + ReindexOnWrite bool } diff --git a/server/server.go b/server/server.go index 41a779e..55f7161 100644 --- a/server/server.go +++ b/server/server.go @@ -44,12 +44,17 @@ type WysteriaServer struct { settings *configuration - database wdb.Database - searchbase wsb.Searchbase - middleware_server wcm.EndpointServer - monitor *wsi.Monitor + database wdb.Database + searchbase wsb.Searchbase + middlewareServer wcm.EndpointServer + monitor *wsi.Monitor } +const ( + // default used internally when making otherwise limitless queries + defaultQueryLimit = 10000 +) + var ( reservedColFacets = []string{wyc.FacetCollection} reservedItemFacets = []string{wyc.FacetCollection} @@ -58,18 +63,21 @@ var ( // Update facets on the collection with the given ID // -func (s *WysteriaServer) UpdateCollection(id string, update map[string]string) error { +func (s *WysteriaServer) UpdateCollectionFacets(id string, update map[string]string) error { err := s.shouldServeRequest() if err != nil { return err } + if update == nil { + return nil + } results, err := s.database.RetrieveCollection(id) if err != nil { return err } if len(results) != 1 { - return errors.New(fmt.Sprintf("No Collection found with id %s", id)) + return fmt.Errorf("no Collection found with id %s", id) } for key, value := range update { @@ -88,18 +96,21 @@ func (s *WysteriaServer) UpdateCollection(id string, update map[string]string) e // Update facets on the resource with the given ID // -func (s *WysteriaServer) UpdateResource(id string, update map[string]string) error { +func (s *WysteriaServer) UpdateResourceFacets(id string, update map[string]string) error { err := s.shouldServeRequest() if err != nil { return err } + if update == nil { + return nil + } results, err := s.database.RetrieveResource(id) if err != nil { return err } if len(results) != 1 { - return errors.New(fmt.Sprintf("No Resource found with id %s", id)) + return fmt.Errorf("no Resource found with id %s", id) } for key, value := range update { @@ -115,18 +126,21 @@ func (s *WysteriaServer) UpdateResource(id string, update map[string]string) err // Update facets on the link with the given ID // -func (s *WysteriaServer) UpdateLink(id string, update map[string]string) error { +func (s *WysteriaServer) UpdateLinkFacets(id string, update map[string]string) error { err := s.shouldServeRequest() if err != nil { return err } + if update == nil { + return nil + } results, err := s.database.RetrieveLink(id) if err != nil { return err } if len(results) != 1 { - return errors.New(fmt.Sprintf("No Link found with id %s", id)) + return fmt.Errorf("no Link found with id %s", id) } for key, value := range update { @@ -147,13 +161,16 @@ func (s *WysteriaServer) UpdateVersionFacets(id string, update map[string]string if err != nil { return err } + if update == nil { + return nil + } vers, err := s.database.RetrieveVersion(id) if err != nil { return err } if len(vers) != 1 { // there must be something to update - return errors.New(fmt.Sprintf("No Version found with id %s", id)) + return fmt.Errorf("no Version found with id %s", id) } version := vers[0] @@ -179,13 +196,16 @@ func (s *WysteriaServer) UpdateItemFacets(id string, update map[string]string) e if err != nil { return err } + if update == nil { + return nil + } vers, err := s.database.RetrieveItem(id) if err != nil { return err } if len(vers) != 1 { // there must be something to update - return errors.New(fmt.Sprintf("No Item found with id %s", id)) + return fmt.Errorf("no Item found with id %s", id) } item := vers[0] @@ -214,20 +234,27 @@ func (s *WysteriaServer) CreateCollection(in *wyc.Collection) (string, error) { } if in.Name == "" { // Check required field - return "", errors.New("Name required for Collection") + return "", errors.New("name required for Collection") + } + if in.Facets == nil { + in.Facets = make(map[string]string) } - parentName, ok := in.Facets[wyc.FacetCollection] - if ok { // Disallow use of root collection name if a parent ID is set - if parentName == wyc.FacetRootCollection && in.Parent != "" { - return "", errors.New(fmt.Sprintf("Parent ID cannot be set for parent collection with name %s", wyc.FacetRootCollection)) + // set the parent name + if in.Parent == "" { + in.Facets[wyc.FacetCollection] = wyc.FacetRootCollection + } else { + parent, err := s.database.RetrieveCollection(in.Parent) + if err != nil { + return "", err } + if len(parent) != 1 { + return "", fmt.Errorf("unable to find parent with id %s", in.Parent) + } + in.Facets[wyc.FacetCollection] = parent[0].Name } - id := NewId() - in.Id = id - - err = s.database.InsertCollection(id, in) + id, err := s.database.InsertCollection(in) if err != nil { return "", err } @@ -246,22 +273,25 @@ func (s *WysteriaServer) CreateItem(in *wyc.Item) (string, error) { } if in.Parent == "" || in.ItemType == "" || in.Variant == "" { - return "", errors.New("Require Parent, ItemType, Variant to be set") + return "", errors.New("require Parent, ItemType, Variant to be set") + } + if in.Facets == nil { + in.Facets = make(map[string]string) } _, ok := in.Facets[wyc.FacetCollection] if !ok { - return "", errors.New(fmt.Sprintf("Required facet %s not set", wyc.FacetCollection)) + return "", fmt.Errorf("required facet %s not set", wyc.FacetCollection) } in.Facets[wyc.FacetItemType] = in.ItemType in.Facets[wyc.FacetItemVariant] = in.Variant - in.Id = NewId() - err = s.database.InsertItem(in.Id, in) + id, err := s.database.InsertItem(in) if err != nil { return "", err } + in.Id = id return in.Id, s.searchbase.InsertItem(in.Id, in) } @@ -276,23 +306,25 @@ func (s *WysteriaServer) CreateVersion(in *wyc.Version) (string, int32, error) { } if in.Parent == "" { - return "", 0, errors.New("Require Parent to be set") + return "", 0, errors.New("require Parent to be set") + } + if in.Facets == nil { + in.Facets = make(map[string]string) } for _, facet_key := range reservedVerFacets { _, ok := in.Facets[facet_key] if !ok { - return "", 0, errors.New(fmt.Sprintf("Required facet '%s' not set", facet_key)) + return "", 0, fmt.Errorf("required facet '%s' not set", facet_key) } } - in.Id = NewId() - version_number, err := s.database.InsertNextVersion(in.Id, in) + id, versionNumber, err := s.database.InsertNextVersion(in) if err != nil { return "", 0, err } - - in.Number = version_number + in.Id = id + in.Number = versionNumber return in.Id, in.Number, s.searchbase.InsertVersion(in.Id, in) } @@ -309,12 +341,15 @@ func (s *WysteriaServer) CreateResource(in *wyc.Resource) (string, error) { if in.Parent == "" || in.Location == "" { return "", errors.New("Require Parent, Location to be set") } + if in.Facets == nil { + in.Facets = make(map[string]string) + } - in.Id = NewId() - err = s.database.InsertResource(in.Id, in) + id, err := s.database.InsertResource(in) if err != nil { return "", err } + in.Id = id return in.Id, s.searchbase.InsertResource(in.Id, in) } @@ -337,13 +372,16 @@ func (s *WysteriaServer) CreateLink(in *wyc.Link) (string, error) { if in.Src == in.Dst { return "", errors.New("You may not link something to itself") } + if in.Facets == nil { + in.Facets = make(map[string]string) + } // We're good to create our link - in.Id = NewId() - err = s.database.InsertLink(in.Id, in) + id, err := s.database.InsertLink(in) if err != nil { return "", err } + in.Id = id return in.Id, s.searchbase.InsertLink(in.Id, in) } @@ -357,15 +395,28 @@ func childrenOf(ids ...string) []*wyc.QueryDesc { } // Delete some collection from the system. -// Assuming this works, we kick off a routine to kill all of the children. -// Please be aware that delete operations, especially of collections, are heavy operations that introduce a number -// of race conditions for people still using the collection (or children of it). func (s *WysteriaServer) DeleteCollection(id string) error { err := s.shouldServeRequest() if err != nil { return err } + childCollections, err := s.searchbase.QueryCollection(defaultQueryLimit, 0, childrenOf(id)...) + if err != nil { + return err + } + if len(childCollections) > 0 { + return fmt.Errorf("unable to delete: There are %d child collections", len(childCollections)) + } + + children, err := s.searchbase.QueryItem(defaultQueryLimit, 0, childrenOf(id)...) + if err != nil { + return err + } + if len(children) > 0 { + return fmt.Errorf("unable to delete: There are %d child items", len(children)) + } + err = s.searchbase.DeleteCollection(id) if err != nil { return err @@ -376,16 +427,7 @@ func (s *WysteriaServer) DeleteCollection(id string) error { return err } - go func() { - // Kick off a routine to slay the children - children, err := s.searchbase.QueryItem(0, 0, childrenOf(id)...) - if err == nil { - for _, child := range children { - s.DeleteItem(child) - } - } - }() - return nil + return err } // Given some ids, build query to find all links mentioning those ids (as either src or dst) @@ -402,13 +444,20 @@ func linkedTo(ids ...string) []*wyc.QueryDesc { } // Delete some item from the system. -// Assuming this works, we kick off a routine to kill all of the children. func (s *WysteriaServer) DeleteItem(id string) error { err := s.shouldServeRequest() if err != nil { return err } + children, err := s.searchbase.QueryVersion(defaultQueryLimit, 0, childrenOf(id)...) + if err != nil { + return err + } + if len(children) > 0 { + return fmt.Errorf("unable to delete: There are %d child versions", len(children)) + } + err = s.searchbase.DeleteItem(id) if err != nil { return err @@ -419,29 +468,16 @@ func (s *WysteriaServer) DeleteItem(id string) error { return err } - go func() { - // kick off a routine to kill links that mention this - linked, err := s.searchbase.QueryLink(0, 0, linkedTo(id)...) - if err == nil { - s.searchbase.DeleteLink(linked...) - s.database.DeleteLink(linked...) - } - }() - - go func() { - // Kick off a routine to slay children - children, err := s.searchbase.QueryVersion(0, 0, childrenOf(id)...) - if err == nil { - for _, child := range children { - s.DeleteVersion(child) - } - } - }() + linked, err := s.searchbase.QueryLink(defaultQueryLimit, 0, linkedTo(id)...) + if err == nil && len(linked) > 0 { + s.searchbase.DeleteLink(linked...) + s.database.DeleteLink(linked...) + } + return nil } // Delete some version from the system. -// Assuming this works, we kick off a routine to kill all of the children. func (s *WysteriaServer) DeleteVersion(id string) error { err := s.shouldServeRequest() if err != nil { @@ -458,24 +494,18 @@ func (s *WysteriaServer) DeleteVersion(id string) error { return err } - go func() { - // kick off a routine to kill links that mention this - linked, err := s.searchbase.QueryLink(0, 0, linkedTo(id)...) - if err == nil { - s.searchbase.DeleteLink(linked...) - s.database.DeleteLink(linked...) - } - }() - - go func() { - // Kick off a routine to slay children - children, err := s.searchbase.QueryResource(0, 0, childrenOf(id)...) - if err == nil { - for _, child := range children { - s.DeleteResource(child) - } - } - }() + linked, err := s.searchbase.QueryLink(defaultQueryLimit, 0, linkedTo(id)...) + if err == nil && len(linked) > 0 { + s.searchbase.DeleteLink(linked...) + s.database.DeleteLink(linked...) + } + + children, err := s.searchbase.QueryResource(defaultQueryLimit, 0, childrenOf(id)...) + if err == nil && len(children) > 0 { + s.searchbase.DeleteResource(children...) + s.database.DeleteResource(children...) + } + return nil } @@ -511,7 +541,7 @@ func (s *WysteriaServer) FindCollections(limit, offset int32, qs []*wyc.QueryDes } if len(ids) < 1 { - return []*wyc.Collection{}, nil + return nil, nil } return s.database.RetrieveCollection(ids...) } @@ -533,7 +563,7 @@ func (s *WysteriaServer) FindItems(limit, offset int32, qs []*wyc.QueryDesc) ([] } if len(ids) < 1 { - return []*wyc.Item{}, nil + return nil, nil } return s.database.RetrieveItem(ids...) } @@ -555,7 +585,7 @@ func (s *WysteriaServer) FindVersions(limit, offset int32, qs []*wyc.QueryDesc) } if len(ids) < 1 { - return []*wyc.Version{}, nil + return nil, nil } return s.database.RetrieveVersion(ids...) } @@ -577,7 +607,7 @@ func (s *WysteriaServer) FindResources(limit, offset int32, qs []*wyc.QueryDesc) } if len(ids) < 1 { - return []*wyc.Resource{}, nil + return nil, nil } return s.database.RetrieveResource(ids...) } @@ -599,7 +629,7 @@ func (s *WysteriaServer) FindLinks(limit, offset int32, qs []*wyc.QueryDesc) ([] } if len(ids) < 1 { - return []*wyc.Link{}, nil + return nil, nil } return s.database.RetrieveLink(ids...) } @@ -624,13 +654,16 @@ func (s *WysteriaServer) SetPublishedVersion(version_id string) error { // Shutdown the main server func (s *WysteriaServer) Shutdown() { - s.middleware_server.Shutdown() + s.monitor.Warn("shutdown", wsi.InFunc("Shutdown()")) + s.middlewareServer.Shutdown() s.database.Close() s.searchbase.Close() } // Set if the server should serve a client request. func (s *WysteriaServer) setRefuseClientRequests(value bool, reason string) { + s.monitor.Warn("refuseClients", wsi.InFunc("setRefuseClientRequests()"), wsi.Note(reason, value)) + s.refuseClientLock.Lock() defer s.refuseClientLock.Unlock() @@ -718,7 +751,8 @@ func (s *WysteriaServer) Run() error { if err != nil { return err } - s.database = database + dblogger := newDatabaseMonitor(database, s.monitor) + s.database = dblogger // [2] Connect / spin up the searchbase log.Println(fmt.Sprintf(msg, "searchbase", s.settings.Searchbase.Driver, s.settings.Searchbase.Host, s.settings.Searchbase.Port)) @@ -726,17 +760,19 @@ func (s *WysteriaServer) Run() error { if err != nil { return err } - s.searchbase = searchbase + sblogger := newSearchbaseMonitor(searchbase, s.monitor) + s.searchbase = sblogger // [4] Spin up or connect to whatever is bring us requests log.Println(fmt.Sprintf("Initializing middleware %s", s.settings.Middleware.Driver)) - mware_server, err := wcm.NewServer(s.settings.Middleware.Driver) + mwareServer, err := wcm.NewServer(s.settings.Middleware.Driver) if err != nil { return err } - s.middleware_server = mware_server + s.middlewareServer = mwareServer + + log.Println("[Booting]") - log.Println("Spinning up middleware & waiting for connections") - shim := Shim{} + shim := newMiddlewareMonitor(s.middlewareServer, s.monitor) return shim.ListenAndServe(&s.settings.Middleware, s) } diff --git a/server/utils.go b/server/utils.go index ab9206b..ea919d1 100644 --- a/server/utils.go +++ b/server/utils.go @@ -1,15 +1,9 @@ package main import ( - "gopkg.in/mgo.v2/bson" wyc "github.com/voidshard/wysteria/common" ) -// Create a new ID string at random -func NewId() string { - return bson.NewObjectId().Hex() -} - // Return if the given key is in the given list func ListContains(key string, values []string) bool { for _, v := range values { diff --git a/server/wysteria-server.ini b/server/wysteria-server.ini deleted file mode 100644 index 9ebf879..0000000 --- a/server/wysteria-server.ini +++ /dev/null @@ -1,104 +0,0 @@ -# Example config file -# -# By default the server is looking for a 'wysteria-server.ini' file in the current working directory -# failing that it'll try to find a file given by the "WYSTERIA_SERVER_INI" environment variable. -# If both methods fail wysteria will fall back to some default hardcoded values and write data to temporary -# folders provided by the OS. -# -# --- -# -# On default values -# -# By default if no config is found wysteria uses some hard coded default values: local nats, boltdb and bleve. -# -# WARNING: with no config data will be written to temp folders which WILL be cleaned up by the OS at some point. -# If you're setting up wysteria outside of a pure test environment you will need to provide some form of config. -# -# --- -# -# Client configuration -# -# Clients also read config files in the same manner, except they only need to know about middleware settings. -# By default the client will attempt to connect to nats on localhost, port 4222 (default nats port). -# -# -- -# -# Examples of various possible settings -# -# At present, you may only supply one of each type of driver (Database, Searchbase and Middleware). -# -# For developers: -# If you add an interface, please add an example config here to show how it might be configured. -# -# [Middleware] # use a specific nats server for transport (highly recommended) -# Driver=nats -# Config=nats://derek:pass@localhost:4222 -# -# [Middleware] # use gRPC for transport -# Driver="grpc" -# Config=":12345" -# -# [Database] # use mongo as a backend store -# Driver=mongo -# Host=192.168.2.100 -# Port=27017 -# User=foo -# Pass=bar -# Database=mycollection -# PemFile=/path/to/some/file.pem # On mongo & ssl https://docs.mongodb.com/manual/tutorial/configure-ssl/ -# -# [Searchbase] # use elastic as the backend search prodivder -# Driver=elastic -# Host=192.168.2.101 -# Port=9200 -# User= -# Pass= -# Database=myindex -# PemFile=/path/to/some/file.pem -# -# [Database] # use boltdb as local datastore, will work in single server setup only -# Driver=bolt -# Database=/path/to/folder/data -# -# [Searchbase] # use bleve as local search provider, will work in single server setup only -# Driver=bleve -# Database=/path/to/folder/search -# -# [Health] # config settings for the http endpoint - allows other services to ping us & see if we're alive -# Port=8080 -# EndpointHealth=/health -# -# -# Note that one can define multiple outputs (of the same or different types) and the server will -# write to each. -# -# [Instrumentation "someName"] # define somewhere we want wysteria to record events to -# Driver=logfile -# Location=/folder/to/log/to -# Target=logfile.log -# -# [Instrumentation "anotherName"] -# Driver=elastic -# Location=http://123.123.123.123:9200 -# Target=logIndex -# - -[Database] -Driver=bolt -Database=wys_db - -[Searchbase] -Driver=bleve -Database=wys_sb - -[Middleware] -Driver=nats - -[Health] -Port=8150 -EndpointHealth=/health - -[Instrumentation "logfile"] -Driver=logfile -Location=wys_logs -Target=wysteria.log diff --git a/server/wysteria-server.ini.example b/server/wysteria-server.ini.example new file mode 100644 index 0000000..12a534b --- /dev/null +++ b/server/wysteria-server.ini.example @@ -0,0 +1,109 @@ +# Example config file +# +# By default the server is looking for a 'wysteria-server.ini' file in the current working directory +# failing that it'll try to find a file given by the "WYSTERIA_SERVER_INI" environment variable. +# If both methods fail wysteria will fall back to some default hardcoded values and write data to temporary +# folders provided by the OS. +# +# --- +# +# On default values +# +# By default if no config is found wysteria uses some hard coded default values: local nats, boltdb and bleve. +# +# WARNING: with no config data will be written to temp folders which WILL be cleaned up by the OS at some point. +# If you're setting up wysteria outside of a pure test environment you will need to provide some form of config. +# +# WARNING (new): Searchbase has an added 'ReindexOnWrite' flag. This enforces a reindex when a write is done so that +# you can immediately search the change(s). This will likely introduce a large performance hit, and is generally +# discouraged for use outside of testing. +# +# --- +# +# Client configuration +# +# Clients also read config files in the same manner, except they only need to know about middleware settings. +# By default the client will attempt to connect to nats on localhost, port 4222 (default nats port). +# +# -- +# +# Examples of various possible settings +# +# At present, you may only supply one of each type of driver (Database, Searchbase and Middleware). +# +# For developers: +# If you add an interface, please add an example config here to show how it might be configured. +# +# [Middleware] # use a specific nats server for transport (highly recommended) +# Driver=nats +# Config=nats://derek:pass@localhost:4222 +# +# [Middleware] # use gRPC for transport +# Driver="grpc" +# Config=":12345" +# +# [Database] # use mongo as a backend store +# Driver=mongo +# Host=192.168.2.100 +# Port=27017 +# User=foo +# Pass=bar +# Database=mycollection +# PemFile=/path/to/some/file.pem # On mongo & ssl https://docs.mongodb.com/manual/tutorial/configure-ssl/ +# +# [Searchbase] # use elastic as the backend search prodivder +# Driver=elastic +# Host=192.168.2.101 +# Port=9200 +# User= +# Pass= +# Database=myindex +# PemFile=/path/to/some/file.pem +# ReindexOnWrite=false +# +# [Database] # use boltdb as local datastore, will work in single server setup only +# Driver=bolt +# Database=/path/to/folder/data +# +# [Searchbase] # use bleve as local search provider, will work in single server setup only +# Driver=bleve +# Database=/path/to/folder/search +# +# [Health] # config settings for the http endpoint - allows other services to ping us & see if we're alive +# Port=8080 +# EndpointHealth=/health +# +# +# Note that one can define multiple outputs (of the same or different types) and the server will +# write to each. +# +# [Instrumentation "someName"] # define somewhere we want wysteria to record events to +# Driver=logfile +# Location=/folder/to/log/to +# Target=logfile.log +# +# [Instrumentation "anotherName"] +# Driver=elastic +# Location=http://123.123.123.123:9200 +# Target=logIndex +# + +[Database] +Driver=bolt +Database=wys_db + +[Searchbase] +Driver=bleve +Database=wys_sb + +[Middleware] +Driver=nats + +[Health] +Port=8150 +EndpointHealth=/health + +[Instrumentation "logfile"] +Driver=logfile +Location=wys_logs +Target=wysteria.log diff --git a/tests/docker-compose.yml.template b/tests/docker-compose.yml.template new file mode 100644 index 0000000..395efce --- /dev/null +++ b/tests/docker-compose.yml.template @@ -0,0 +1,119 @@ +version: "3" + # + # Simple docker-compose config template file. These are all used as part of the test suite. + # +services: + # ------------------------------------------------------------------------ + # Supporting Services + # ------------------------------------------------------------------------ + database: + # vanilla mongo image + image: mongo + ports: + - "27017:27017" + searchbase: + # vanilla elasticsearch image + image: elasticsearch + ports: + - "9200:9200" + middleware: + # vanilla nats.io image + image: nats + ports: + - "4222:4222" + # ------------------------------------------------------------------------ + # Wysteria variants + # ------------------------------------------------------------------------ + sololocal: + # wysteria using all embedded settings & local repository + image: wysteria/wysteria:local + ports: + - "31000:31000" + environment: + WYS_SEARCHBASE_DRIVER: "bleve" + WYS_SEARCHBASE_NAME: "searchdata" + WYS_DATABASE_DRIVER: "bolt" + WYS_DATABASE_NAME: "data" + WYS_MIDDLEWARE_DRIVER: "grpc" + WYS_MIDDLEWARE_CONFIG: ":31000" + WYS_MIDDLEWARE_SSL_CERT: "${WYS_MIDDLEWARE_SSL_CERT}" + WYS_MIDDLEWARE_SSL_KEY: "${WYS_MIDDLEWARE_SSL_KEY}" + WYS_MIDDLEWARE_SSL_VERIFY: "false" + WYS_MIDDLEWARE_SSL_ENABLE: "${WYS_MIDDLEWARE_SSL_ENABLE}" + elastictest: + # wysteria using only elastic as an external service + image: wysteria/wysteria:local + ports: + - "31000:31000" + environment: + WYS_SEARCHBASE_DRIVER: "elastic" + WYS_SEARCHBASE_NAME: "data" + WYS_SEARCHBASE_PORT: "9200" + WYS_SEARCHBASE_HOST: "searchbase" + WYS_SEARCHBASE_REINDEX: "true" + WYS_DATABASE_DRIVER: "bolt" + WYS_DATABASE_NAME: "data" + WYS_MIDDLEWARE_DRIVER: "grpc" + WYS_MIDDLEWARE_CONFIG: ":31000" + WYS_MIDDLEWARE_SSL_CERT: "${WYS_MIDDLEWARE_SSL_CERT}" + WYS_MIDDLEWARE_SSL_KEY: "${WYS_MIDDLEWARE_SSL_KEY}" + WYS_MIDDLEWARE_SSL_VERIFY: "false" + WYS_MIDDLEWARE_SSL_ENABLE: "${WYS_MIDDLEWARE_SSL_ENABLE}" + links: + - searchbase + depends_on: + - searchbase + mongotest: + # wysteria elastic & mongo + image: wysteria/wysteria:local + ports: + - "31000:31000" + environment: + WYS_SEARCHBASE_DRIVER: "elastic" + WYS_SEARCHBASE_NAME: "data" + WYS_SEARCHBASE_PORT: "9200" + WYS_SEARCHBASE_HOST: "searchbase" + WYS_SEARCHBASE_REINDEX: "true" + WYS_DATABASE_DRIVER: "mongo" + WYS_DATABASE_NAME: "data" + WYS_DATABASE_PORT: "27017" + WYS_DATABASE_HOST: "database" + WYS_MIDDLEWARE_DRIVER: "grpc" + WYS_MIDDLEWARE_CONFIG: ":31000" + WYS_MIDDLEWARE_SSL_CERT: "${WYS_MIDDLEWARE_SSL_CERT}" + WYS_MIDDLEWARE_SSL_KEY: "${WYS_MIDDLEWARE_SSL_KEY}" + WYS_MIDDLEWARE_SSL_VERIFY: "false" + WYS_MIDDLEWARE_SSL_ENABLE: "${WYS_MIDDLEWARE_SSL_ENABLE}" + links: + - searchbase + - database + depends_on: + - searchbase + - database + local: + # wysteria using nats.io, mongo & elasticsearch + image: wysteria/wysteria:local + environment: + WYS_SEARCHBASE_DRIVER: "elastic" + WYS_SEARCHBASE_NAME: "data" + WYS_SEARCHBASE_PORT: "9200" + WYS_SEARCHBASE_HOST: "searchbase" + WYS_SEARCHBASE_REINDEX: "true" + WYS_DATABASE_DRIVER: "mongo" + WYS_DATABASE_NAME: "data" + WYS_DATABASE_PORT: "27017" + WYS_DATABASE_HOST: "database" + WYS_MIDDLEWARE_DRIVER: "nats" + WYS_MIDDLEWARE_CONFIG: "nats://middleware:4222" + WYS_MIDDLEWARE_SSL_CERT: "${WYS_MIDDLEWARE_SSL_CERT}" + WYS_MIDDLEWARE_SSL_KEY: "${WYS_MIDDLEWARE_SSL_KEY}" + WYS_MIDDLEWARE_SSL_VERIFY: "false" + WYS_MIDDLEWARE_SSL_ENABLE: "${WYS_MIDDLEWARE_SSL_ENABLE}" + links: + - database + - searchbase + - middleware + depends_on: + - database + - searchbase + - middleware \ No newline at end of file diff --git a/tests/integration/collection_test.go b/tests/integration/collection_test.go new file mode 100644 index 0000000..4bb890c --- /dev/null +++ b/tests/integration/collection_test.go @@ -0,0 +1,392 @@ +package integration + +import ( + "testing" + wyc "github.com/voidshard/wysteria/client" +) + + + +func TestCollectionParentAndChild(t *testing.T) { + // arrange + client := newClient(t) + defer client.Close() + + cases := []struct{ + Name string + Facets map[string]string + }{ + {randomString(), nil}, + {randomString(), map[string]string{"a": "b"}}, + {randomString(), map[string]string{"a": "b", "c": "1", "q": "dino"}}, + } + + parent, err := client.CreateCollection(randomString()) + if err != nil { + t.Skip(err) + } + + // add some extra collections to muddy the waters a bit + fakeparent, err := client.CreateCollection(randomString()) + if err != nil { + t.Skip(err) + } + fakeparent.CreateCollection(randomString()) + fakeparent.CreateCollection(randomString()) + fakeparent.CreateCollection(randomString()) + + for i, tst := range cases { + // act & assert + child, err := parent.CreateCollection(tst.Name, wyc.Facets(tst.Facets)) + if err != nil { + t.Error(i, err) + } + + result, err := child.Parent() + if err != nil { + t.Error(i, err) + } + + if result.Id() != parent.Id() { + t.Error(i, "Expected parent with id", parent.Id(), "got", result.Id()) + } + } + + children, err := parent.Collections() + if err != nil { + t.Error(err) + } + + if len(children) != len(cases) { + t.Error("Expected", len(cases), "children but got", len(children)) + } +} + +func TestDeleteCollectionDeletes(t *testing.T) { + // arrange + client := newClient(t) + defer client.Close() + + cases := []struct{ + Name string + }{ + {randomString()}, + {randomString()}, + {randomString()}, + } + + for i, tst := range cases { + col, err := client.CreateCollection(tst.Name) + if err != nil { + t.Error(i, err) + } + + // act + err = col.Delete() + if err != nil { + t.Error(i, err) + } + + // assert + result, err := client.Search(wyc.Id(col.Id())).Or(wyc.Name(col.Name())).FindCollections() + if err != nil { + t.Error(i, err) + } + if len(result) > 0 { + t.Error(i, "Expected object deleted, but it was not") + } + } +} + +func TestCollectionFacetFunction(t *testing.T) { + // arrange + client := newClient(t) + defer client.Close() + + cases := []struct { + Facets map[string]string + }{ + {map[string]string{"a": "foo", "c": "/adoo/iad/oaowdo/foo.moo", "x": "what"}}, + } + + for i, tst := range cases { + collection, err := client.CreateCollection(randomString(), wyc.Facets(tst.Facets)) + if err != nil { + t.Error(err) + } + + // act & assert + for k, v := range tst.Facets { + result, _ := collection.Facet(k) + + if result != v { + t.Error(i, "Expected", v, "got", result) + } + } + } +} + +func TestUpdateCollectionFacets(t *testing.T) { + // arrange + client := newClient(t) + defer client.Close() + + cases := []struct{ + Facets map[string]string + } { + {map[string]string{"a": "foo", "c": "/adoo/iad/oaowdo/foo.moo", "x": "what"}}, + {map[string]string{"a": "bar", "c": "/adoo/iad/oaowdo/foo.moo", "d": "blah"}}, + } + + collection, err := client.CreateCollection(randomString()) + if err != nil { + t.Skip(err) + } + + expected := map[string]string{} + for k, v := range collection.Facets() { // copy facets + expected[k] = v + } + + for i, tst := range cases { + for k, v := range tst.Facets { // set what we expect + expected[k] = v + } + + // act + err := collection.SetFacets(tst.Facets) + if err != nil { + t.Error(err) + } + + result, err := client.Collection(collection.Id()) // refetch so we're looking at the db copy too + if err != nil { + t.Error(err) + } + + // assert + if !facetsContain(expected, result.Facets()) { + t.Error(i, "[Facets: remote copy] Expected", expected , "got", result.Facets()) + } + if !facetsContain(expected, collection.Facets()) { + t.Error(i, "[Facets: local copy] Expected", expected , "got", collection.Facets()) + } + } +} + +func TestCreateNestedCollection(t *testing.T) { + // arrange + client := newClient(t) + defer client.Close() + + cases := []struct{ + Name string + Facets map[string]string + }{ + {"tcncFoobar", nil}, + {"tcncFoomoo", map[string]string{"a": "b"}}, + {"tcncBarfoo", map[string]string{"a": "b", "c": "9187263-198273812-198263912-123"}}, + {"tcncBarfoo", map[string]string{"a": "b", "c": "1", "q": "dino"}}, + {"tcncBarfoo", map[string]string{}}, + } + + // root level parent + result, err := client.CreateCollection(randomString()) + if err != nil { + t.Skip(err) + } + + previous := result + + for i, tst := range cases { + // act + result, err := previous.CreateCollection(tst.Name, wyc.Facets(tst.Facets)) + if err != nil { + t.Error(err) + } + + remote, err := client.Collection(result.Id()) + if err != nil { + t.Error(err) + } + + // assert + parentName := result.Facets()[wyc.FacetCollection] + + if result.Id() == "" { + t.Error(i, "Expected non empty Id field") + } + if result.ParentId() != previous.Id() { + t.Error(i, "[ParentId] Expected", previous.Id() , "got", result.ParentId()) + } + if parentName != previous.Name() { + t.Error(i, "[FacetCollection] Expected", previous.Name() , "got", parentName) + } + if tst.Facets != nil { + if !facetsContain(tst.Facets, result.Facets()) { + t.Error(i, "[Facets] Expected", tst.Facets , "got", result.Facets()) + } + } + if result.Name() != tst.Name { + t.Error(i, "[Name] Expected", tst.Name , "got", result.Name()) + } + + if remote.Id() == "" { + t.Error(i, "Expected non empty Id field") + } + if remote.ParentId() != previous.Id() { + t.Error(i, "[ParentId: remote] Expected", previous.Id() , "got", remote.ParentId()) + } + if remote.Facets()[wyc.FacetCollection] != previous.Name() { + t.Error(i, "[FacetCollection: remote] Expected", previous.Name() , "got", remote.Facets()[wyc.FacetCollection]) + } + if tst.Facets != nil { + if !facetsContain(tst.Facets, remote.Facets()) { + t.Error(i, "[Facets: remote] Expected", tst.Facets , "got", remote.Facets()) + } + } + if remote.Name() != tst.Name { + t.Error(i, "[Name: remote] Expected", tst.Name , "got", remote.Name()) + } + + previous = result + } +} + +func TestCreateCollectionSameNameAndParentInvalid(t *testing.T) { + // arrange + client := newClient(t) + defer client.Close() + + cases := []struct{ + Name string + }{ + // collections with the same name & parent aren't allowed + {randomString()}, + } + + for i, tst := range cases { + // act + _, err := client.CreateCollection(tst.Name) + if err != nil { + t.Error(err) + } + + result, err := client.CreateCollection(tst.Name) + + // assert + if err == nil || result != nil { + t.Error(i, "Expected err but got collection:", result, "test:", tst) + } + } +} + +func TestCreateCollectionSameNameDifferentParent(t *testing.T) { + // arrange + client := newClient(t) + defer client.Close() + + collectionOne, err := client.CreateCollection(randomString()) + if err != nil { + t.Skip(err) + } + collectionTwo, err := client.CreateCollection(randomString()) + if err != nil { + t.Skip(err) + } + + cases := []struct{ + Name string + ParentA *wyc.Collection + ParentB *wyc.Collection + } { + // since these have different parents, this should be fine + {"tccifoo", collectionOne, collectionTwo}, + } + + for i, tst := range cases { + // act + _, err := tst.ParentA.CreateCollection(tst.Name) + if err != nil { + t.Error(i, err) + } + + _, err = tst.ParentB.CreateCollection(tst.Name) + + // assert + if err != nil { + t.Error(i, err) + } + } +} + +func TestCreateCollection(t *testing.T) { + // arrange + client := newClient(t) + defer client.Close() + + root := wyc.FacetRootCollection + + cases := []struct{ + Name string + Facets map[string]string + }{ + {randomString(), nil}, + {randomString(), map[string]string{}}, + {randomString(), map[string]string{"a": "b"}}, + {randomString(), map[string]string{"a": "b", "c": "9187263-198273812-198263912-123"}}, + } + + for i, tst := range cases { + // act + result, err := client.CreateCollection(tst.Name, wyc.Facets(tst.Facets)) + if err != nil { + t.Error(err) + } + + remote, err := client.Collection(result.Id()) + if err != nil { + t.Error(err) + } + + // assert + if result.Id() == "" { + t.Error(i, "Expected non empty Id field") + } + if result.ParentId() != "" { + t.Error(i, "[ParentId] Expected [empty string] got", result.ParentId()) + } + if result.Facets()[wyc.FacetCollection] != root { + t.Error(i, "[FacetCollection] Expected", root , "got", result.ParentId()) + } + if tst.Facets != nil { + if !facetsContain(tst.Facets, result.Facets()) { + t.Error(i, "[Facets] Expected", tst.Facets , "got", result.Facets()) + } + } + if result.Name() != tst.Name { + t.Error(i, "[Name] Expected", tst.Name , "got", result.Name()) + } + + + if remote.Id() == "" { + t.Error(i, "[remote] Expected non empty Id field") + } + if remote.ParentId() != "" { + t.Error(i, "[ParentId: remote] Expected [empty string] got", remote.ParentId()) + } + if remote.Facets()[wyc.FacetCollection] != root { + t.Error(i, "[FacetCollection: remote] Expected", root , "got", remote.ParentId()) + } + if tst.Facets != nil { + if !facetsContain(tst.Facets, remote.Facets()) { + t.Error(i, "[Facets: remote] Expected", tst.Facets , "got", remote.Facets()) + } + } + if remote.Name() != tst.Name { + t.Error(i, "[Name: remote] Expected", tst.Name , "got", remote.Name()) + } + } +} + + diff --git a/tests/integration/item_test.go b/tests/integration/item_test.go new file mode 100644 index 0000000..878a759 --- /dev/null +++ b/tests/integration/item_test.go @@ -0,0 +1,438 @@ +package integration + + +import ( + "testing" + wyc "github.com/voidshard/wysteria/client" +) + + +func TestItemDeletion(t *testing.T) { + // arrange + client := newClient(t) + defer client.Close() + + collection, err := client.CreateCollection(randomString()) + if err != nil { + t.Skip(err) // can't perform test + } + + fromCentreLinkName := "link" + toCentreLinkName := "centre" + + cases := []struct{ + Type string + Variant string + ExtraLinkName string + LinkFacets map[string]string + } { + {"house", "brick", "foo", map[string]string{"a": "b"}}, + {"tree", "oak", "bar", map[string]string{"madeBy": "batman"}}, + {"person", "male", "moo", map[string]string{"a": "b", "foo": "moo"}}, + } + + centre, err := collection.CreateItem("super", "item") // we'll link all to this + if err != nil { + t.Skip(err) + } + + var previous *wyc.Item + + for i, tst := range cases { + item, err := collection.CreateItem(tst.Type, tst.Variant) + if err != nil { + t.Skip(i, err) + } + + _, err = centre.LinkTo(fromCentreLinkName, item, wyc.Facets(tst.LinkFacets)) + if err != nil { + t.Skip(i, err) + } + + _, err = item.LinkTo(toCentreLinkName, centre) + if err != nil { + t.Skip(i, err) + } + + if previous != nil { // random extra link + _, err = item.LinkTo(tst.ExtraLinkName, previous) + if err != nil { + t.Skip(i, err) + } + } + + // act + err = item.Delete() + if err != nil { + t.Error(i, err) + } + + result, err := client.Search(wyc.Id(item.Id())).FindItems() + if err != nil { + t.Error(i, err) + } + + if len(result) != 0 { + t.Error(i, "Expected not to find item with id", item.Id(), "found", len(result)) + } + + itemLinks, err := client.Search(wyc.LinkSource(item.Id())).Or(wyc.LinkDestination(item.Id())).FindLinks() + if err != nil { + t.Error(i, err) + } + + if len(itemLinks) != 0 { + t.Error(i, "Expected not to find no links to or from id", item.Id(), "found", len(itemLinks)) + } + } +} + +func TestItemParent(t *testing.T) { + // arrange + client := newClient(t) + defer client.Close() + + collection, err := client.CreateCollection(randomString()) + if err != nil { + t.Skip(err) + } + + _, err = client.CreateCollection(randomString()) + if err != nil { // add random extra collection to muddy the waters + t.Skip(err) + } + + cases := []struct{ + Type string + Variant string + } { + {"house", "brick"}, + {"person", "male"}, + } + + for i, tst := range cases { + // act + item, err := collection.CreateItem(tst.Type, tst.Variant) + if err != nil { + t.Skip(i, err) + } + + parent, err := item.Parent() + if err != nil { + t.Error(i, err) + } + + // assert + if parent.Id() != collection.Id() { + t.Error(i, "Expected colletion with id", collection.Id(), "got", parent.Id()) + } + } +} + +func TestItemLinkTo(t *testing.T) { + // arrange + client := newClient(t) + defer client.Close() + + collection, err := client.CreateCollection(randomString()) + if err != nil { + t.Skip(err) // can't perform test + } + + fromCentreLinkName := "link" + toCentreLinkName := "centre" + + cases := []struct{ + Type string + Variant string + ExtraLinkName string + LinkFacets map[string]string + } { + {"house", "brick", "foo", map[string]string{"a": "b"}}, + {"tree", "oak", "bar", map[string]string{"madeBy": "batman"}}, + {"person", "male", "moo", map[string]string{"a": "b", "foo": "moo"}}, + } + + centre, err := collection.CreateItem("super", "item") // we'll link all to this + if err != nil { + t.Skip(err) + } + + var previous *wyc.Item + + for i, tst := range cases { + item, err := collection.CreateItem(tst.Type, tst.Variant) + if err != nil { + t.Skip(i, err) + } + + link, err := centre.LinkTo(fromCentreLinkName, item, wyc.Facets(tst.LinkFacets)) + if err != nil { + t.Error(i, err) + } + + _, err = item.LinkTo(toCentreLinkName, centre) + if err != nil { + t.Error(i, err) + } + + if previous != nil { // random extra link + _, err = item.LinkTo(tst.ExtraLinkName, previous) + if err != nil { + t.Error(i, err) + } + } + + // assert + linked, err := centre.Linked() + if err != nil { + t.Error(i, err) + } + + linkedItems, _ := linked[fromCentreLinkName] + if len(linkedItems) != i + 1 { + if err != nil { + t.Error(i, "Expected", i + 1, "links with name", fromCentreLinkName, "got", len(linkedItems)) + } + } + + linked, err = item.Linked() + if err != nil { + t.Error(i, err) + } + + linkedItems, _ = linked[toCentreLinkName] + if len(linkedItems) != 1 { + t.Error(i, "Expected 1 link to centre item with name", toCentreLinkName) + } + + if previous != nil { + linkedItems, _ = linked[tst.ExtraLinkName] + if len(linkedItems) != 1 { + t.Error(i, "Expected 1 link to previous item with name", tst.ExtraLinkName) + } + } + + if !facetsContain(tst.LinkFacets, link.Facets()) { + t.Error(i, "Expected link facets", link.Facets(), "to contain", tst.LinkFacets) + } + + previous = item + } + +} + +func TestItemUpdateFacets(t *testing.T) { + // arrange + client := newClient(t) + defer client.Close() + + collection, err := client.CreateCollection(randomString()) + if err != nil { + t.Skip(err) // can't perform test + } + + cases := []struct{ + Type string + Variant string + Facets map[string]string + } { + {"house", "brick", map[string]string{"a": "x"}}, + {"tree", "oak", map[string]string{"a": "b", "d": "/aweaw/aweaw/ewea/01"}}, + {"person", "male", map[string]string{"a": "b", "c": "9187263-198273812-198263912-123"}}, + } + + for i, tst := range cases { + expected := map[string]string{ + wyc.FacetCollection: collection.Name(), + wyc.FacetItemType: tst.Type, + wyc.FacetItemVariant: tst.Variant, + } + for k, v := range tst.Facets { + expected[k] = v + } + + item, err := collection.CreateItem(tst.Type, tst.Variant) + if err != nil { + t.Skip(i, err) + } + + // act + err = item.SetFacets(tst.Facets) + if err != nil { + t.Error(i, err) + } + + remote, err := client.Search(wyc.Id(item.Id())).FindItems(wyc.Limit(1)) + if err != nil { + t.Error(i, err) + } + if len(remote) != 1 { + t.Error(i, "Did not find item with id", item.Id()) + } + + // assert + if !facetsContain(item.Facets(), expected) { + t.Error(i, "[Facets] Expected", expected, "got", item.Facets()) + } + if !facetsContain(remote[0].Facets(), expected) { + t.Error(i, "[Facets] Expected", expected, "got", remote[0].Facets()) + } + } +} + +func TestCreateItemFailsOnDuplicate(t *testing.T) { + // arrange + client := newClient(t) + defer client.Close() + + collection, err := client.CreateCollection(randomString()) + if err != nil { + t.Skip(err) // can't perform test + } + + cases := []struct{ + Type string + Variant string + ShouldFail bool + }{ + {"tree", "elm", false}, + {"tree", "oak", false}, + {"tree", "oak", true}, + {"professor", "oak",false}, + } + + for i, tst := range cases { + _, err := collection.CreateItem(tst.Type, tst.Variant) + + if tst.ShouldFail && err == nil { + t.Error(i, "Expected failure when creating", tst) + } else if err != nil && !tst.ShouldFail { + t.Error(i, "Expected success when creating", tst, "got:", err) + } + } +} + +func TestCreateItemDuplicatesInvalid(t *testing.T) { + // arrange + client := newClient(t) + defer client.Close() + + collection, err := client.CreateCollection(randomString()) + if err != nil { + t.Skip(err) // can't perform test + } + + collection2, err := client.CreateCollection(randomString()) + if err != nil { + t.Skip(err) // can't perform test + } + + itype := "foo" + ivar := "bar" + + // act & assert + _, err = collection.CreateItem(itype, ivar) + if err != nil { + t.Error(err) + } + + _, err = collection.CreateItem(itype, ivar) + if err == nil { + t.Error("Expected creation of second item ", itype, ivar, "as child of", collection.Id(), collection.Name(), "to fail") + } + + _, err = collection2.CreateItem(itype, ivar) + if err != nil { + t.Error("Did not expect creationg of item", itype, ivar, "as child of", collection2.Id(), collection2.Name(), "to fail, got:", err) + } +} + +func TestCreateItem(t *testing.T) { + // arrange + client := newClient(t) + defer client.Close() + + collection, err := client.CreateCollection(randomString()) + if err != nil { + t.Skip(err) // can't perform test + } + + cases := []struct{ + Type string + Variant string + Facets map[string]string + }{ + {"house", "brick", nil}, + {"tree", "oak", map[string]string{"a": "b"}}, + {"person", "male", map[string]string{"a": "b", "c": "9187263-198273812-198263912-123"}}, + } + + for i, tst := range cases { + // act + result, err := collection.CreateItem(tst.Type, tst.Variant, wyc.Facets(tst.Facets)) + if err != nil { + t.Error(err) + } + + tmp, err := collection.Items(wyc.Id(result.Id())) + if err != nil { + t.Error(err) + } + if len(tmp) != 1 { + t.Error("Unable to find newly created item by id") + } + remote := tmp[0] + + parent, err := result.Parent() + + // assert + if result.Id() == "" { + t.Error(i, "Expected non empty Id field") + } + if tst.Facets != nil { + if !facetsContain(tst.Facets, result.Facets()) { + t.Error(i, "[Facets] Expected", tst.Facets , "got", result.Facets()) + } + } + if result.Facets()[wyc.FacetCollection] != collection.Name() { + t.Error(i, "[ParentId] FacetCollection", collection.Name() , "got", result.ParentId()) + } + if result.Type() != tst.Type { + t.Error(i, "[Type] Expected", tst.Type , "got", result.Type()) + } + if result.Variant() != tst.Variant { + t.Error(i, "[Variant] Expected", tst.Variant , "got", result.Variant()) + } + if result.ParentId() != collection.Id() { + t.Error(i, "[ParentId] Expected", tst.Facets , "got", result.Facets()) + } + + if remote.Id() == "" { + t.Error(i, "Expected non empty Id field") + } + if tst.Facets != nil { + if !facetsContain(tst.Facets, remote.Facets()) { + t.Error(i, "[Facets] Expected", tst.Facets , "got", remote.Facets()) + } + } + if remote.Facets()[wyc.FacetCollection] != collection.Name() { + t.Error(i, "[ParentId] FacetCollection", collection.Name() , "got", remote.ParentId()) + } + if remote.Type() != tst.Type { + t.Error(i, "[Type] Expected", tst.Type , "got", remote.Type()) + } + if remote.Variant() != tst.Variant { + t.Error(i, "[Variant] Expected", tst.Variant , "got", remote.Variant()) + } + if remote.ParentId() != collection.Id() { + t.Error(i, "[ParentId] Expected", tst.Facets , "got", remote.Facets()) + } + + if parent == nil { + t.Error(i, "[Parent] Expected parent obj got error:", err) + } else if parent.Id() != collection.Id() { + t.Error(i, "[Parent] Expected", collection.Id() , "got", parent.Id()) + } + } +} diff --git a/tests/integration/link_test.go b/tests/integration/link_test.go new file mode 100644 index 0000000..e1cb84f --- /dev/null +++ b/tests/integration/link_test.go @@ -0,0 +1,152 @@ +package integration + +import ( + wyc "github.com/voidshard/wysteria/client" + "testing" +) + +/* +Item & Version test files test the creation & fetching of links. +*/ + +func TestLinkSetFacets(t *testing.T) { + // arrange + client := newClient(t) + defer client.Close() + + collection, err := client.CreateCollection(randomString()) + if err != nil { + t.Skip(err) // can't perform test + } + + item1, err := collection.CreateItem("super1", "item") + if err != nil { + t.Skip(err) + } + + item2, err := collection.CreateItem("super2", "item") + if err != nil { + t.Skip(err) + } + + cases := []struct{ + Facets map[string]string + } { + {map[string]string{"boo": "moo", "hithere": "/omadw/ad", "71dd": "jq9197ee9bweyb8 fy8f8wgf--dqiubwdiyaud-+"}}, + {map[string]string{"ar": "213", "hithere": "+/", "qwd": "()_+_+_+--1203719837639481(&* &!^@#(*!%@(yaud-+"}}, + {map[string]string{"boo": "sha256:33fb5550ce42935faaf86d03284e26219 150c28b 0755 a6f9d e24cc 054e6eb40e"}}, + {map[string]string{"jq9197ee9bweyb8fy8f8wgf--dqiubwdiy aud-+": "6bf7a22e-0b8e-47c0-bc78-c4fb2219dd15"}}, + } + + link, err := item1.LinkTo(randomString(), item2) + if err != nil { + t.Skip(err) + } + + for i, tst := range cases { + // act + err := link.SetFacets(tst.Facets) + if err != nil { + t.Error(i, err) + } + + tmp, err := client.Search(wyc.Id(link.Id())).FindLinks() + if err != nil { + t.Error(i, err) + } + if len(tmp) != 1 { + t.Error(i, "Expected to find 1 link with id", link.Id(), "found", len(tmp)) + } + remote := tmp[0] + + // assert + if !facetsContain(tst.Facets, link.Facets()) { + t.Error(i, "Expected link facets", link.Facets(), "to contain", tst.Facets) + } + if !facetsContain(tst.Facets, remote.Facets()) { + t.Error(i, "[remote] Expected link facets", remote.Facets(), "to contain", tst.Facets) + } + } +} + +func TestLinkCreationViaItems(t *testing.T) { + // arrange + client := newClient(t) + defer client.Close() + + collection, err := client.CreateCollection(randomString()) + if err != nil { + t.Skip(err) // can't perform test + } + + cases := []struct{ + Type string + Variant string + ExtraLinkName string + LinkFacets map[string]string + } { + {"house", "brick", "foo", map[string]string{"a": "b"}}, + {"tree", "oak", "bar", map[string]string{"madeBy": "batman"}}, + {"person", "male", "moo", map[string]string{"a": "b", "foo": "moo"}}, + } + + centre, err := collection.CreateItem("super", "item") // we'll link all to this + if err != nil { + t.Skip(err) + } + + for i, tst := range cases { + item, err := collection.CreateItem(tst.Type, tst.Variant) + if err != nil { + t.Skip(i, err) + } + + link, err := centre.LinkTo(tst.ExtraLinkName, item, wyc.Facets(tst.LinkFacets)) + if err != nil { + t.Error(i, err) + } + + tmp, err := client.Search(wyc.Id(link.Id())).FindLinks() + if err != nil { + t.Error(i, err) + } + if len(tmp) != 1 { + t.Error(i, "Expected to find 1 link with id", link.Id(), "found", len(tmp)) + } + remote := tmp[0] + + // assert + if link.Name() != tst.ExtraLinkName { + t.Error(i, "Expected Name", tst.ExtraLinkName, "got", link.Name()) + } + if link.Id() == "" { + t.Error(i, "Expected non null id") + } + if link.SourceId() != centre.Id() { + t.Error(i, "Expected Src", centre.Id(), "got", link.SourceId()) + } + if link.DestinationId() != item.Id() { + t.Error(i, "Expected Dst", item.Id(), "got", link.DestinationId()) + } + if !facetsContain(tst.LinkFacets, link.Facets()) { + t.Error(i, "Expected link facets", link.Facets(), "to contain", tst.LinkFacets) + } + + if remote.Name() != tst.ExtraLinkName { + t.Error(i, "[remote] Expected Name", tst.ExtraLinkName, "got", remote.Name()) + } + if remote.Id() == "" { + t.Error(i, "[remote] Expected non null id") + } + if remote.SourceId() != centre.Id() { + t.Error(i, "[remote] Expected Src", centre.Id(), "got", remote.SourceId()) + } + if remote.DestinationId() != item.Id() { + t.Error(i, "[remote] Expected Dst", item.Id(), "got", remote.DestinationId()) + } + if !facetsContain(tst.LinkFacets, remote.Facets()) { + t.Error(i, "[remote] Expected link facets", remote.Facets(), "to contain", tst.LinkFacets) + } + } + +} diff --git a/tests/integration/resource_test.go b/tests/integration/resource_test.go new file mode 100644 index 0000000..fda614e --- /dev/null +++ b/tests/integration/resource_test.go @@ -0,0 +1,299 @@ +package integration + +import ( + "testing" + wyc "github.com/voidshard/wysteria/client" +) + +func TestDeleteResource(t *testing.T) { + // arrange + client := newClient(t) + defer client.Close() + + collection, err := client.CreateCollection(randomString()) + if err != nil { + t.Skip(err) + } + + item, err := collection.CreateItem("foo", "bar") + if err != nil { + t.Skip(err) + } + + version, err := item.CreateVersion() + if err != nil { + t.Skip(err) + } + + resource, err := version.AddResource("a","b", "c") + if err != nil { + t.Error(err) + } + + // act + err = resource.Delete() + if err != nil { + t.Error(err) + } + + found, err := client.Search(wyc.Id(resource.Id())).FindResources() + if err != nil { + t.Error(err) + } + + // assert + if len(found) != 0 { + t.Error("Expected not to find anything, found", len(found), "resource(s)") + } + +} + +func TestResourceGetParent(t *testing.T) { + // arrange + client := newClient(t) + defer client.Close() + + collection, err := client.CreateCollection(randomString()) + if err != nil { + t.Skip(err) + } + + item, err := collection.CreateItem("foo", "bar") + if err != nil { + t.Skip(err) + } + + version, err := item.CreateVersion() + if err != nil { + t.Skip(err) + } + + resource, err := version.AddResource("a", "b", "c") + if err != nil { + t.Error(err) + } + + // act + parent, err := resource.Parent() + if err != nil { + t.Error(err) + } + + // assert + if parent.Id() != version.Id() { + t.Error("Expected version with id", version.Id(), "got", parent.Id()) + } +} + +func TestResourceSetFacets(t *testing.T) { + // arrange + client := newClient(t) + defer client.Close() + + collection, err := client.CreateCollection(randomString()) + if err != nil { + t.Skip(err) + } + + item, err := collection.CreateItem("foo", "bar") + if err != nil { + t.Skip(err) + } + + version, err := item.CreateVersion() + if err != nil { + t.Skip(err) + } + + resource, err := version.AddResource("a", "b", "c") + if err != nil { + t.Error(err) + } + + cases := []struct{ + Facets map[string]string + } { + {map[string]string{"a": "b"}}, + { map[string]string{"a": "b", "q": "iuhuifawd"}}, + { map[string]string{"foobar": "/oiaow./awd/adw"}}, + { map[string]string{"foobar": "/daw./awd/adw", "zee": "moo"}}, + } + + expected := map[string]string{} + + // act + for i, tst := range cases { + for k, v := range tst.Facets { + expected[k] = v + } + + err = resource.SetFacets(tst.Facets) + if err != nil { + t.Error(i, err) + } + + tmp, err := client.Search(wyc.Id(resource.Id())).FindResources(wyc.Limit(2)) + if err != nil { + t.Error(i, err) + } + if len(tmp) != 1 { + t.Error(i, "Expected 1 resource with id", resource.Id(), "got", len(tmp)) + } + remote := tmp[0] + + // assert + if !facetsContain(tst.Facets, resource.Facets()) { + t.Error(i, "Expected", resource.Facets(), "to contain", tst.Facets) + } + + if !facetsContain(tst.Facets, remote.Facets()) { + t.Error(i, "[remote] Expected", remote.Facets(), "to contain", tst.Facets) + } + } +} + +func TestCreateResourceFailsWithDuplicateSettings(t *testing.T) { + // arrange + client := newClient(t) + defer client.Close() + + collection, err := client.CreateCollection(randomString()) + if err != nil { + t.Skip(err) + } + + item, err := collection.CreateItem("foo", "bar") + if err != nil { + t.Skip(err) + } + + version1, err := item.CreateVersion() + if err != nil { + t.Skip(err) + } + + version2, err := item.CreateVersion() + if err != nil { + t.Skip(err) + } + + rname := "name" + rtype := "type" + rloc := "location" + + // act & assert + _, err = version1.AddResource(rname, rtype, rloc) + if err != nil { + t.Error(err) + } + + _, err = version1.AddResource(rname, rtype, rloc) + if err == nil { + t.Error("Expected duplicate resource fail", version1.Id(), rname, rtype, rloc) + } + + _, err = version2.AddResource(rname, rtype, rloc) + if err != nil { + t.Error(err) + } +} + +func TestCreateResource(t *testing.T) { + // arrange + client := newClient(t) + defer client.Close() + + collection, err := client.CreateCollection(randomString()) + if err != nil { + t.Skip(err) + } + + item, err := collection.CreateItem("foo", "bar") + if err != nil { + t.Skip(err) + } + + version, err := item.CreateVersion() + if err != nil { + t.Skip(err) + } + + cases := []struct{ + Name string + Type string + Location string + Facets map[string]string + } { + {"foo", "img", "/path/to/image", map[string]string{"a": "b"}}, + {"bar", "xml", "/path/to/xml.xml", map[string]string{"a": "b", "q": "iuhuifawd"}}, + {"baz", "uuid", "8964829374hhludhoi3whr8w7r", map[string]string{"foobar": "/oiaow./awd/adw"}}, + {"moo", "xxx", ">//?o@^#)(^@(#^^%!@$/", map[string]string{}}, + {"moo", "boo", ">dawd@$/", nil}, + } + + for i, tst := range cases { + // act + resource, err := version.AddResource(tst.Name, tst.Type, tst.Location, wyc.Facets(tst.Facets)) + if err != nil { + t.Error(i, err) + } + + found, err := version.Resources(wyc.Id(resource.Id())) + if err != nil { + t.Error(i, err) + } + if len(found) != 1 { + t.Error(i, "Expected to find 1 resource, found", len(found)) + } + remote := found[0] + + + allResources, err := version.Resources() + if err != nil { + t.Error(i, err) + } + + // assert + if len(allResources) != i + 1 { + t.Error(i, "Expected", i + 1, "get", len(allResources)) + } + + if resource.Id() == "" { + t.Error(i, "Expected Id to be set") + } + if resource.ParentId() != version.Id() { + t.Error(i, "Expected ParentId to be", version.Id(), "got", resource.ParentId()) + } + if resource.Name() != tst.Name { + t.Error(i, "Expected", tst.Name, "got", resource.Name()) + } + if resource.Type() != tst.Type { + t.Error(i, "Expected", tst.Type, "got", resource.Type()) + } + if resource.Location() != tst.Location { + t.Error(i, "Expected", tst.Location, "got", resource.Location()) + } + if !facetsContain(tst.Facets, resource.Facets()) { + t.Error(i, "Expected", tst.Facets, "got", resource.Facets()) + } + + if remote.Id() == "" { + t.Error(i, "[remote] Expected Id to be set") + } + if remote.ParentId() != version.Id() { + t.Error(i, "[remote] Expected ParentId to be", version.Id(), "got", remote.ParentId()) + } + if remote.Name() != tst.Name { + t.Error(i, "[remote] Expected", tst.Name, "got", remote.Name()) + } + if remote.Type() != tst.Type { + t.Error(i, "[remote] Expected", tst.Type, "got", remote.Type()) + } + if remote.Location() != tst.Location { + t.Error(i, "[remote] Expected", tst.Location, "got", remote.Location()) + } + if !facetsContain(tst.Facets, remote.Facets()) { + t.Error(i, "[remote] Expected", tst.Facets, "got", remote.Facets()) + } + } +} \ No newline at end of file diff --git a/tests/integration/search_test.go b/tests/integration/search_test.go new file mode 100644 index 0000000..ef9ca8e --- /dev/null +++ b/tests/integration/search_test.go @@ -0,0 +1,102 @@ +package integration + +import ( + "testing" + wyc "github.com/voidshard/wysteria/client" +) + +func TestItemVariantSearch(t *testing.T) { + // arrange + client := newClient(t) + defer client.Close() + + setup := []struct{ + Type string + Variant string + }{ + {"bob", "me"}, + {"bob", "orme"}, + {"james", "orme"}, + {"alice", "notme"}, + } + + collection, err := client.CreateCollection(randomString()) + if err != nil { + t.Skip(err) + } + + for i, s := range setup { + _, err := collection.CreateItem(s.Type, s.Variant) + if err != nil { + t.Skip(i, err) + } + } + + cases := []struct{ + Expect int + Search *wyc.Search + } { + {2, client.Search(wyc.ItemType("bob"))}, + {1, client.Search(wyc.ItemType("bob"), wyc.ItemVariant("me"))}, + {2, client.Search(wyc.ItemVariant("orme"))}, + {3, client.Search(wyc.ItemType("bob")).Or(wyc.ItemVariant("orme"))}, + } + + // act + for i, tst := range cases { + found, err := tst.Search.FindItems() + if err != nil { + t.Error(i, err) + } + + // assert + if len(found) != tst.Expect { + t.Error(i, "Expected", tst.Expect, "found", len(found)) + } + } +} + + +func TestFacetSearch(t *testing.T) { + // arrange + client := newClient(t) + defer client.Close() + + setup := []struct{ + Name string + Facets map[string]string + }{ + {randomString(), map[string]string{"find": "me"}}, + {randomString(), map[string]string{"find": "me", "should": "not_matter"}}, + {randomString(), map[string]string{"find": "notme"}}, + } + + for i, tst := range setup { + _, err := client.CreateCollection(tst.Name, wyc.Facets(tst.Facets)) + if err != nil { + t.Error(i, err) + } + } + + cases := []struct{ + Expect int + Facets map[string]string + } { + {2, map[string]string{"find": "me"}}, + {0, map[string]string{"find": "me", "and": "me"}}, + {0, map[string]string{"nothing": "here"}}, + } + + // act + for i, tst := range cases { + found, err := client.Search(wyc.HasFacets(tst.Facets)).FindCollections() + if err != nil { + t.Error(i, err) + } + + // assert + if len(found) != tst.Expect { + t.Error(i, "Expected", tst.Expect, "found", len(found)) + } + } +} \ No newline at end of file diff --git a/tests/integration/utils.go b/tests/integration/utils.go new file mode 100644 index 0000000..76031e8 --- /dev/null +++ b/tests/integration/utils.go @@ -0,0 +1,51 @@ +package integration + +import ( + "os" + "testing" + "github.com/fgrid/uuid" + wyc "github.com/voidshard/wysteria/client" +) + +var ( + conf = os.Getenv("WYS_MIDDLEWARE_CLIENT_CONFIG") + driver = os.Getenv("WYS_MIDDLEWARE_CLIENT_DRIVER") + + sslcert = os.Getenv("WYS_MIDDLEWARE_CLIENT_SSL_CERT") + sslkey = os.Getenv("WYS_MIDDLEWARE_CLIENT_SSL_KEY") + + sslVerify = os.Getenv("WYS_MIDDLEWARE_SSL_VERIY") == "true" + sslEnable = os.Getenv("WYS_MIDDLEWARE_SSL_ENABLE") == "true" +) + + +// Return random uuid4 (as a string) +// +func randomString() string { + return uuid.NewV4().String() +} + +// Create new wysteria client with config info from ENV vars +// +func newClient(t *testing.T) *wyc.Client { + client, err := wyc.New( + wyc.Host(conf), wyc.Driver(driver), + wyc.SSLKey(sslkey), wyc.SSLCert(sslcert), wyc.SSLVerify(sslVerify), wyc.SSLEnable(sslEnable), + ) + if err != nil { + t.Error(err) + t.Fail() + } + return client +} + +// Test that the first map[string]string is a subset of the second map[string]string +// +func facetsContain(subset, superset map[string]string) bool { + for k, v := range subset { + if superset[k] != v { + return false + } + } + return true +} diff --git a/tests/integration/version_test.go b/tests/integration/version_test.go new file mode 100644 index 0000000..db02a5b --- /dev/null +++ b/tests/integration/version_test.go @@ -0,0 +1,369 @@ +package integration + +import ( + wyc "github.com/voidshard/wysteria/client" + "testing" +) + +func TestVersionDeletion(t *testing.T) { + // arrange + client := newClient(t) + defer client.Close() + + collection, err := client.CreateCollection(randomString()) + if err != nil { + t.Skip(err) + } + + item, err := collection.CreateItem("super", "item") + if err != nil { + t.Skip(err) + } + + fooitem, err := collection.CreateItem("foo", "item") + if err != nil { + t.Skip(err) + } + centre, err := fooitem.CreateVersion() + if err != nil { + t.Skip(err) + } + + for i := 0; i < 10; i ++ { + version, err := item.CreateVersion() + if err != nil { + t.Skip(err) + } + + _, err = version.LinkTo("somelinkname", centre) + if err != nil { + t.Error(i, err) + } + + _, err = version.AddResource("a", "b", "c") + if err != nil { + t.Error(i, err) + } + } + + // act & assert + err = centre.Delete() + if err != nil { + t.Error(err) + } + + foundVersions, err := client.Search(wyc.Id(centre.Id())).FindVersions() + if err != nil { + t.Error(err) + } + if len(foundVersions) != 0 { + t.Error("Expect not to find version with id", centre.Id(), "found", len(foundVersions)) + } + + foundResources, err := client.Search(wyc.ChildOf(centre.Id())).FindResources() + if err != nil { + t.Error(err) + } + if len(foundResources) != 0{ + t.Error("Expect not to child resources of", centre.Id(), "found", len(foundResources)) + } + + foundLinks, err := client.Search(wyc.LinkSource(centre.Id()), wyc.LinkDestination(centre.Id())).FindLinks() + if err != nil { + t.Error(err) + } + if len(foundLinks) != 0{ + t.Error("Expect not to links to/from", centre.Id(), "found", len(foundLinks)) + } +} + +func TestVersionLinkTo(t *testing.T) { + // arrange + client := newClient(t) + defer client.Close() + + collection, err := client.CreateCollection(randomString()) + if err != nil { + t.Skip(err) // can't perform test + } + + fromCentreLinkName := "link" + toCentreLinkName := "centre" + + cases := []struct{ + ExtraLinkName string + LinkFacets map[string]string + } { + { "foo", map[string]string{"a": "b"}}, + {"bar", map[string]string{"madeBy": "batman"}}, + { "moo", map[string]string{"a": "b", "foo": "moo"}}, + } + + item, err := collection.CreateItem("super", "item") + if err != nil { + t.Skip(err) + } + + centre, err := item.CreateVersion() // we'll link all to this + if err != nil { + t.Skip(err) + } + + var previous *wyc.Version + + for i, tst := range cases { + version, err := item.CreateVersion() + if err != nil { + t.Skip(i, err) + } + + link, err := centre.LinkTo(fromCentreLinkName, version, wyc.Facets(tst.LinkFacets)) + if err != nil { + t.Error(i, err) + } + + _, err = version.LinkTo(toCentreLinkName, centre) + if err != nil { + t.Error(i, err) + } + + if previous != nil { // random extra link + _, err = version.LinkTo(tst.ExtraLinkName, previous) + if err != nil { + t.Error(i, err) + } + } + + // assert + linked, err := centre.Linked() + if err != nil { + t.Error(i, err) + } + + linkedItems, _ := linked[fromCentreLinkName] + if len(linkedItems) != i + 1 { + if err != nil { + t.Error(i, "Expected", i + 1, "links with name", fromCentreLinkName, "got", len(linkedItems)) + } + } + + linked, err = version.Linked() + if err != nil { + t.Error(i, err) + } + + linkedItems, _ = linked[toCentreLinkName] + if len(linkedItems) != 1 { + t.Error(i, "Expected 1 link to centre item with name", toCentreLinkName) + } + + if !facetsContain(tst.LinkFacets, link.Facets()) { + t.Error(i, "Expected link facets", link.Facets(), "to contain", tst.LinkFacets) + } + + if previous != nil { + linkedItems, _ = linked[tst.ExtraLinkName] + if len(linkedItems) != 1 { + t.Error(i, "Expected 1 link to previous item with name", tst.ExtraLinkName) + } + } + + previous = version + } + +} + +func TestVersionSetFacets(t *testing.T) { + // arrange + client := newClient(t) + defer client.Close() + + collection, err := client.CreateCollection(randomString()) + if err != nil { + t.Skip(err) // can't perform test + } + + item, err := collection.CreateItem("foo", "bar") + if err != nil { + t.Skip(err) // can't perform test + } + + cases := []struct{ + Facets map[string]string + } { + {map[string]string{"boo": "moo", "hithere": "/omadw/ad", "71dd": "jq9197ee9bweyb8 fy8f8wgf--dqiubwdiyaud-+"}}, + {map[string]string{"ar": "213", "hithere": "+/", "qwd": "()_+_+_+--1203719837639481(&* &!^@#(*!%@(yaud-+"}}, + {map[string]string{"boo": "sha256:33fb5550ce42935faaf86d03284e26219 150c28b 0755 a6f9d e24cc 054e6eb40e"}}, + {map[string]string{"jq9197ee9bweyb8fy8f8wgf--dqiubwdiy aud-+": "6bf7a22e-0b8e-47c0-bc78-c4fb2219dd15"}}, + } + + for i, tst := range cases { + version, err := item.CreateVersion() + if err != nil { + t.Error(i, err) + } + + // act + err = version.SetFacets(tst.Facets) + + results, err := client.Search(wyc.Id(version.Id())).FindVersions() + if err != nil { + t.Error(i, err) + } + if len(results) != 1 { + t.Error(i, "Expected to find version with id", version.Id(), "found", len(results)) + } + remote := results[0] + + // assert + if !facetsContain(tst.Facets, version.Facets()) { + t.Error(i, "Expected facets", version.Facets(), "to contain all of", tst.Facets) + } + + if !facetsContain(tst.Facets, remote.Facets()) { + t.Error(i, "[remote] Expected facets", remote.Facets(), "to contain all of", tst.Facets) + } + } +} + +func TestVersionParent(t *testing.T) { + // arrange + client := newClient(t) + defer client.Close() + + collection, err := client.CreateCollection(randomString()) + if err != nil { + t.Error(err) + } + + item, err := collection.CreateItem("batman", "moo") + if err != nil { // add random extra collection to muddy the waters + t.Skip(err) + } + + fakeCol, err := client.CreateCollection(randomString()) + if err != nil { + t.Error(err) + } + fakeCol.CreateItem("foo", "bar") + + for i := 0 ; i < 5 ; i ++ { + version, err := item.CreateVersion() + if err != nil { + t.Error(i, err) + } + + // act + result, err := version.Parent() + if err != nil { + t.Error(i, err) + } + + // assert + if result.Id() != item.Id() { + t.Error(i, "Expected parent with id", item.Id(), "got", result.Id()) + } + } +} + +func TestCreateVersion(t *testing.T) { + // arrange + client := newClient(t) + defer client.Close() + + collection, err := client.CreateCollection(randomString()) + if err != nil { + t.Skip(err) // can't perform test + } + + item, err := collection.CreateItem("foo", "bar") + if err != nil { + t.Skip(err) // can't perform test + } + + cases := []struct{ + Facets map[string]string + } { + {map[string]string{"boo": "moo", "hithere": "/omadw/ad", "71dd": "jq9197ee9bweyb8 fy8f8wgf--dqiubwdiyaud-+"}}, + {map[string]string{"ar": "213", "hithere": "+/", "qwd": "()_+_+_+--1203719837639481(&* &!^@#(*!%@(yaud-+"}}, + {map[string]string{"boo": "sha256:33fb5550ce42935faaf86d03284e26219 150c28b 0755 a6f9d e24cc 054e6eb40e"}}, + {map[string]string{"jq9197ee9bweyb8fy8f8wgf--dqiubwdiy aud-+": "6bf7a22e-0b8e-47c0-bc78-c4fb2219dd15"}}, + } + + var previous *wyc.Version + + for i, tst := range cases { + // act + version, err := item.CreateVersion(wyc.Facets(tst.Facets)) + if err != nil { + t.Error(i, err) + } + + found, err := client.Search(wyc.Id(version.Id()), wyc.VersionNumber(version.Version())).FindVersions() + if err != nil { + t.Error(i, err) + } + if len(found) != 1 { + t.Error(i, "Expected 1 version with id", version.Id(), version.Version()) + } + remote := found[0] + + err = version.Publish() + if err != nil { + t.Error(i, err) + } + + published, err := item.PublishedVersion() + if err != nil { + t.Error(i, err) + } + + // assert + if published.Id() != version.Id() { + t.Error(i, "Expected published version to be", version.Id(), "got", published.Id()) + } + + if version.Version() != int32(i + 1) { + t.Error(i, "Expected version number", i+1, "got", version.Version()) + } + if version.Id() == "" { + t.Error(i, "Expected version Id to be set") + } + if !facetsContain(tst.Facets, version.Facets()) { + t.Error(i, "Expected facets", tst.Facets, "got", version.Facets()) + } + + if remote.Version() != int32(i + 1) { + t.Error(i, "[remote] Expected version number", i + 1, "got", remote.Version()) + } + if remote.Id() == "" { + t.Error(i, "[remote] Expected version Id to be set") + } + if !facetsContain(tst.Facets, remote.Facets()) { + t.Error(i, "[remote] Expected facets", tst.Facets, "got", remote.Facets()) + } + + if previous != nil { + if version.Version() <= previous.Version() { + t.Error(i, "Expected version number", version.Version(), "greater than previous", previous.Version()) + } + + err = previous.Publish() + if err != nil { + t.Error(i, err) + } + + published, err = item.PublishedVersion() + if err != nil { + t.Error(i, err) + } + + if published.Id() != previous.Id() { + t.Error(i, "Expected published version to be", previous.Id(), "got", published.Id()) + } + } + + previous = version + } + +} diff --git a/tests/run_integration_tests.sh b/tests/run_integration_tests.sh new file mode 100755 index 0000000..7a26bfc --- /dev/null +++ b/tests/run_integration_tests.sh @@ -0,0 +1,119 @@ +#!/bin/bash + +# +# Builds wysteria:local, then kicks off test integration suite +# + +# set fail on error +set -eu + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +# generic test ssl certs +# > Nb. we have to set different paths to these for the test client & the server (docker container) +# > plz don't actually use these .. +export WYS_MIDDLEWARE_CLIENT_SSL_KEY=${DIR}/../docker/images/test.key +export WYS_MIDDLEWARE_CLIENT_SSL_CERT=${DIR}/../docker/images/test.crt +export WYS_MIDDLEWARE_SSL_KEY=/usr/ssl/test.key +export WYS_MIDDLEWARE_SSL_CERT=/usr/ssl/test.crt + +# Args: +# $1 -> name of service (ie, we'll use docker-compose up ) +# $2 -> name of test +# $3 -> some time to wait to allow things to spin up - this isn't ideal but works +dotest () { + echo "> running test:" $2 + + # start test service(s) + cd ${DIR} + + # write out the docker-compose.yml file + envsubst < docker-compose.yml.template > docker-compose.yml + echo "> generated docker-compose.yml" + + docker-compose up -d $1 + + # sleep for a bit to allow things to start up + sleep $3 + + # cd in to integration tests root + cd ${DIR}/integration + + # permit failures (we don't want 'go test' to be able to stop us running) + set +e + + # throw it over to go test + go test -v + + # set fail on error + set -eu + + # tear down test services + cd ${DIR} + echo "> stopping test:" $2 + docker-compose down + + # backup docker-compose file to docker-compose.yml. + # this is useful for testing when things are breaking + # mv docker-compose.yml{,.$2} + + # remove the docker compose file + rm -v docker-compose.yml +} + +echo "--------------------- BUILD -----------------------------" + +${DIR}/../docker/images/local/build.sh + +echo "--------------------- TESTS -----------------------------" +# +# Essentially, we're now going to stand up & tear down wysteria in a whole host of different configurations. +# We'll use each of the middleware, database and searchbase options, with and without SSL. +# +# We start with the most primitive (everything embedded) and slowly add more services. As we go on we have to introduce +# sleep calls to wait for docker containers to spin up & become ready. Elastic in particular seems *very* slow to come +# alive. In order, we test: +# +# mware | ssl | search | db +# ------------------------------ +# grpc | F | bleve | bolt +# grpc | T | bleve | bolt +# grpc | F ] elastic | bolt +# grpc | F ] elastic | mongo +# nats | F ] elastic | mongo +# +# Eagle eyed readers will note that this isn't *every* *possible* combination, but it *does* test pretty much +# all of the server, database, searchbase, transport & client code. +# + +echo "> using grpc" +echo "> using bleve" +echo "> using boltdb" +export WYS_MIDDLEWARE_CLIENT_DRIVER=grpc +export WYS_MIDDLEWARE_CLIENT_CONFIG=localhost:31000 +echo "> disabling SSL" +export WYS_MIDDLEWARE_SSL_ENABLE=false +dotest "sololocal" "grpc_bleve_boltdb_nossl" 0 + +echo "> enabling SSL" +export WYS_MIDDLEWARE_SSL_ENABLE=true +dotest "sololocal" "grpc_bleve_boltdb_ssl" 0 + +echo "> disabling SSL" +echo "> using elasticsearch" +export WYS_MIDDLEWARE_SSL_ENABLE=false +dotest "elastictest" "grpc_elastic_boltdb_nossl" 15 + +echo "> using mongo" +dotest "mongotest" "grpc_elastic_mongo_nossl" 15 + +echo "> using nats.io" +export WYS_MIDDLEWARE_CLIENT_DRIVER=nats +export WYS_MIDDLEWARE_CLIENT_CONFIG=nats://localhost:4222 +echo "> disabling SSL" +export WYS_MIDDLEWARE_SSL_ENABLE=false +dotest "local" "nats_elastic_mongo_nossl" 20 + +echo "--------------------- EXIT -----------------------------" + + diff --git a/vendor/github.com/RoaringBitmap/roaring/.gitignore b/vendor/github.com/RoaringBitmap/roaring/.gitignore new file mode 100644 index 0000000..b7943ab --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/.gitignore @@ -0,0 +1,6 @@ +*~ +roaring-fuzz.zip +workdir +coverage.out +testdata/all3.classic +testdata/all3.msgp.snappy diff --git a/vendor/github.com/RoaringBitmap/roaring/.gitmodules b/vendor/github.com/RoaringBitmap/roaring/.gitmodules new file mode 100644 index 0000000..e69de29 diff --git a/vendor/github.com/RoaringBitmap/roaring/.travis.yml b/vendor/github.com/RoaringBitmap/roaring/.travis.yml new file mode 100644 index 0000000..59e0fbe --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/.travis.yml @@ -0,0 +1,30 @@ +language: go +sudo: false +install: +- go get -t github.com/RoaringBitmap/roaring +- go get -t golang.org/x/tools/cmd/cover +- go get -t github.com/mattn/goveralls +- go get -t github.com/mschoch/smat +notifications: + email: false +go: +- 1.7.x +- 1.8.x +- 1.9.x +- tip + +# Next lines seem to fail horribly +#- go test -v -covermode=count -coverprofile=coverage.out +#- $HOME/gopath/bin/goveralls -coverprofile=coverage.out -service=travis-ci -repotoken KOlKyOXz0qSjAqvfTF28RzNlr3unxjrLh -ignore arraycontainer_gen.go,bitmapcontainer_gen.go,rle16_gen.go,rle_gen.go,roaringarray_gen.go,rle.go + + + +script: +- go test +- go test -race -run TestConcurrent* +- GOARCH=arm64 go build +- GOARCH=386 go build +- GOARCH=arm go build +matrix: + allow_failures: + - go: tip diff --git a/vendor/github.com/RoaringBitmap/roaring/AUTHORS b/vendor/github.com/RoaringBitmap/roaring/AUTHORS new file mode 100644 index 0000000..08c0740 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/AUTHORS @@ -0,0 +1,10 @@ +# This is the official list of roaring authors for copyright purposes. + +Todd Gruben (@tgruben), +Daniel Lemire (@lemire), +Elliot Murphy (@statik), +Bob Potter (@bpot), +Tyson Maly (@tvmaly), +Will Glynn (@willglynn), +Brent Pedersen (@brentp) +Maciej Biłas (@maciej) diff --git a/vendor/github.com/RoaringBitmap/roaring/CONTRIBUTORS b/vendor/github.com/RoaringBitmap/roaring/CONTRIBUTORS new file mode 100644 index 0000000..682f411 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/CONTRIBUTORS @@ -0,0 +1,11 @@ +# This is the official list of roaring contributors + +Todd Gruben (@tgruben), +Daniel Lemire (@lemire), +Elliot Murphy (@statik), +Bob Potter (@bpot), +Tyson Maly (@tvmaly), +Will Glynn (@willglynn), +Brent Pedersen (@brentp), +Jason E. Aten (@glycerine) +Vali Malinoiu (@0x4139) diff --git a/vendor/github.com/RoaringBitmap/roaring/LICENSE b/vendor/github.com/RoaringBitmap/roaring/LICENSE new file mode 100644 index 0000000..aff5f99 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/LICENSE @@ -0,0 +1,202 @@ + + 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 2016 by the authors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/vendor/github.com/RoaringBitmap/roaring/LICENSE-2.0.txt b/vendor/github.com/RoaringBitmap/roaring/LICENSE-2.0.txt new file mode 100644 index 0000000..aff5f99 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/LICENSE-2.0.txt @@ -0,0 +1,202 @@ + + 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 2016 by the authors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/vendor/github.com/RoaringBitmap/roaring/Makefile b/vendor/github.com/RoaringBitmap/roaring/Makefile new file mode 100644 index 0000000..672a4ee --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/Makefile @@ -0,0 +1,109 @@ +.PHONY: help all test format fmtcheck vet lint qa deps clean nuke rle backrle ser fetch-real-roaring-datasets + + + + + + + + +# Display general help about this command +help: + @echo "" + @echo "The following commands are available:" + @echo "" + @echo " make qa : Run all the tests" + @echo " make test : Run the unit tests" + @echo "" + @echo " make format : Format the source code" + @echo " make fmtcheck : Check if the source code has been formatted" + @echo " make vet : Check for suspicious constructs" + @echo " make lint : Check for style errors" + @echo "" + @echo " make deps : Get the dependencies" + @echo " make clean : Remove any build artifact" + @echo " make nuke : Deletes any intermediate file" + @echo "" + @echo " make fuzz : Fuzzy testing" + @echo "" + +# Alias for help target +all: help +test: + go test + go test -race -run TestConcurrent* +# Format the source code +format: + @find ./ -type f -name "*.go" -exec gofmt -w {} \; + +# Check if the source code has been formatted +fmtcheck: + @mkdir -p target + @find ./ -type f -name "*.go" -exec gofmt -d {} \; | tee target/format.diff + @test ! -s target/format.diff || { echo "ERROR: the source code has not been formatted - please use 'make format' or 'gofmt'"; exit 1; } + +# Check for syntax errors +vet: + GOPATH=$(GOPATH) go vet ./... + +# Check for style errors +lint: + GOPATH=$(GOPATH) PATH=$(GOPATH)/bin:$(PATH) golint ./... + + + + + +# Alias to run all quality-assurance checks +qa: fmtcheck test vet lint + +# --- INSTALL --- + +# Get the dependencies +deps: + GOPATH=$(GOPATH) go get github.com/smartystreets/goconvey/convey + GOPATH=$(GOPATH) go get github.com/willf/bitset + GOPATH=$(GOPATH) go get github.com/golang/lint/golint + GOPATH=$(GOPATH) go get github.com/mschoch/smat + GOPATH=$(GOPATH) go get github.com/dvyukov/go-fuzz/go-fuzz + GOPATH=$(GOPATH) go get github.com/dvyukov/go-fuzz/go-fuzz-build + GOPATH=$(GOPATH) go get github.com/glycerine/go-unsnap-stream + GOPATH=$(GOPATH) go get github.com/philhofer/fwd + GOPATH=$(GOPATH) go get github.com/jtolds/gls + +fuzz: + go test -tags=gofuzz -run=TestGenerateSmatCorpus + go-fuzz-build github.com/RoaringBitmap/roaring + go-fuzz -bin=./roaring-fuzz.zip -workdir=workdir/ -timeout=200 + +# Remove any build artifact +clean: + GOPATH=$(GOPATH) go clean ./... + +# Deletes any intermediate file +nuke: + rm -rf ./target + GOPATH=$(GOPATH) go clean -i ./... + +rle: + cp rle.go rle16.go + perl -pi -e 's/32/16/g' rle16.go + cp rle_test.go rle16_test.go + perl -pi -e 's/32/16/g' rle16_test.go + +backrle: + cp rle16.go rle.go + perl -pi -e 's/16/32/g' rle.go + perl -pi -e 's/2032/2016/g' rle.go + +ser: rle + go generate + +cover: + go test -coverprofile=coverage.out + go tool cover -html=coverage.out + +fetch-real-roaring-datasets: + # pull github.com/RoaringBitmap/real-roaring-datasets -> testdata/real-roaring-datasets + git submodule init + git submodule update diff --git a/vendor/github.com/RoaringBitmap/roaring/README.md b/vendor/github.com/RoaringBitmap/roaring/README.md new file mode 100644 index 0000000..deece6d --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/README.md @@ -0,0 +1,231 @@ +roaring [![Build Status](https://travis-ci.org/RoaringBitmap/roaring.png)](https://travis-ci.org/RoaringBitmap/roaring) [![Coverage Status](https://coveralls.io/repos/github/RoaringBitmap/roaring/badge.svg?branch=master)](https://coveralls.io/github/RoaringBitmap/roaring?branch=master) [![GoDoc](https://godoc.org/github.com/RoaringBitmap/roaring?status.svg)](https://godoc.org/github.com/RoaringBitmap/roaring) [![Go Report Card](https://goreportcard.com/badge/RoaringBitmap/roaring)](https://goreportcard.com/report/github.com/RoaringBitmap/roaring) +============= + +This is a go port of the Roaring bitmap data structure. + + +Roaring bitmaps are used by several major systems such as [Apache Lucene][lucene] and derivative systems such as [Solr][solr] and +[Elasticsearch][elasticsearch], [Metamarkets' Druid][druid], [LinkedIn Pinot][pinot], [Netflix Atlas][atlas], [Apache Spark][spark], [OpenSearchServer][opensearchserver], [Cloud Torrent][cloudtorrent], [Whoosh][whoosh], [Pilosa][pilosa], [Microsoft Visual Studio Team Services (VSTS)][vsts], and eBay's [Apache Kylin][kylin]. + +[lucene]: https://lucene.apache.org/ +[solr]: https://lucene.apache.org/solr/ +[elasticsearch]: https://www.elastic.co/products/elasticsearch +[druid]: http://druid.io/ +[spark]: https://spark.apache.org/ +[opensearchserver]: http://www.opensearchserver.com +[cloudtorrent]: https://github.com/jpillora/cloud-torrent +[whoosh]: https://bitbucket.org/mchaput/whoosh/wiki/Home +[pilosa]: https://www.pilosa.com/ +[kylin]: http://kylin.apache.org/ +[pinot]: http://github.com/linkedin/pinot/wiki +[vsts]: https://www.visualstudio.com/team-services/ +[atlas]: https://github.com/Netflix/atlas + +Roaring bitmaps are found to work well in many important applications: + +> Use Roaring for bitmap compression whenever possible. Do not use other bitmap compression methods ([Wang et al., SIGMOD 2017](http://db.ucsd.edu/wp-content/uploads/2017/03/sidm338-wangA.pdf)) + + +The ``roaring`` Go library is used by +* [Cloud Torrent](https://github.com/jpillora/cloud-torrent): a self-hosted remote torrent client +* [runv](https://github.com/hyperhq/runv): an Hypervisor-based runtime for the Open Containers Initiative + +There are also [Java](https://github.com/RoaringBitmap/RoaringBitmap) and [C/C++](https://github.com/RoaringBitmap/CRoaring) versions. The Java, C, C++ and Go version are binary compatible: e.g, you can save bitmaps +from a Java program and load them back in Go, and vice versa. We have a [format specification](https://github.com/RoaringBitmap/RoaringFormatSpec). + + +This code is licensed under Apache License, Version 2.0 (ASL2.0). + +Copyright 2016 by the authors. + + +### References + +- Daniel Lemire, Owen Kaser, Nathan Kurz, Luca Deri, Chris O'Hara, François Saint-Jacques, Gregory Ssi-Yan-Kai, Roaring Bitmaps: Implementation of an Optimized Software Library [arXiv:1709.07821](https://arxiv.org/abs/1709.07821) +- Samy Chambi, Daniel Lemire, Owen Kaser, Robert Godin, +Better bitmap performance with Roaring bitmaps, +Software: Practice and Experience Volume 46, Issue 5, pages 709–719, May 2016 +http://arxiv.org/abs/1402.6407 This paper used data from http://lemire.me/data/realroaring2014.html +- Daniel Lemire, Gregory Ssi-Yan-Kai, Owen Kaser, Consistently faster and smaller compressed bitmaps with Roaring, Software: Practice and Experience (accepted in 2016, to appear) http://arxiv.org/abs/1603.06549 + + +### Dependencies + +Dependencies are fetched automatically by giving the `-t` flag to `go get`. + +they include + - github.com/smartystreets/goconvey/convey + - github.com/willf/bitset + - github.com/mschoch/smat + - github.com/glycerine/go-unsnap-stream + - github.com/philhofer/fwd + - github.com/jtolds/gls + +Note that the smat library requires Go 1.6 or better. + +#### Installation + + - go get -t github.com/RoaringBitmap/roaring + + +### Example + +Here is a simplified but complete example: + +```go +package main + +import ( + "fmt" + "github.com/RoaringBitmap/roaring" + "bytes" +) + + +func main() { + // example inspired by https://github.com/fzandona/goroar + fmt.Println("==roaring==") + rb1 := roaring.BitmapOf(1, 2, 3, 4, 5, 100, 1000) + fmt.Println(rb1.String()) + + rb2 := roaring.BitmapOf(3, 4, 1000) + fmt.Println(rb2.String()) + + rb3 := roaring.NewBitmap() + fmt.Println(rb3.String()) + + fmt.Println("Cardinality: ", rb1.GetCardinality()) + + fmt.Println("Contains 3? ", rb1.Contains(3)) + + rb1.And(rb2) + + rb3.Add(1) + rb3.Add(5) + + rb3.Or(rb1) + + // computes union of the three bitmaps in parallel using 4 workers + ParOr(4, rb1, rb2, rb3) + // computes intersection of the three bitmaps in parallel using 4 workers + ParAnd(4, rb1, rb2, rb3) + + + // prints 1, 3, 4, 5, 1000 + i := rb3.Iterator() + for i.HasNext() { + fmt.Println(i.Next()) + } + fmt.Println() + + // next we include an example of serialization + buf := new(bytes.Buffer) + rb1.WriteTo(buf) // we omit error handling + newrb:= roaring.NewBitmap() + newrb.ReadFrom(buf) + if rb1.Equals(newrb) { + fmt.Println("I wrote the content to a byte stream and read it back.") + } +} +``` + +If you wish to use serialization and handle errors, you might want to +consider the following sample of code: + +```go + rb := BitmapOf(1, 2, 3, 4, 5, 100, 1000) + buf := new(bytes.Buffer) + size,err:=rb.WriteTo(buf) + if err != nil { + t.Errorf("Failed writing") + } + newrb:= NewBitmap() + size,err=newrb.ReadFrom(buf) + if err != nil { + t.Errorf("Failed reading") + } + if ! rb.Equals(newrb) { + t.Errorf("Cannot retrieve serialized version") + } +``` + +Given N integers in [0,x), then the serialized size in bytes of +a Roaring bitmap should never exceed this bound: + +`` 8 + 9 * ((long)x+65535)/65536 + 2 * N `` + +That is, given a fixed overhead for the universe size (x), Roaring +bitmaps never use more than 2 bytes per integer. You can call +``BoundSerializedSizeInBytes`` for a more precise estimate. + + +### Documentation + +Current documentation is available at http://godoc.org/github.com/RoaringBitmap/roaring + +### Goroutine safety + +In general, it should not generally be considered safe to access +the same bitmaps using different goroutines--they are left +unsynchronized for performance. Should you want to access +a Bitmap from more than one goroutine, you should +provide synchronization. Typically this is done by using channels to pass +the *Bitmap around (in Go style; so there is only ever one owner), +or by using `sync.Mutex` to serialize operations on Bitmaps. + +### Coverage + +We test our software. For a report on our test coverage, see + +https://coveralls.io/github/RoaringBitmap/roaring?branch=master + +### Benchmark + +Type + + go test -bench Benchmark -run - + +### Iterative use + +You can use roaring with gore: + +- go get -u github.com/motemen/gore +- Make sure that ``$GOPATH/bin`` is in your ``$PATH``. +- go get github/RoaringBitmap/roaring + +```go +$ gore +gore version 0.2.6 :help for help +gore> :import github.com/RoaringBitmap/roaring +gore> x:=roaring.New() +gore> x.Add(1) +gore> x.String() +"{1}" +``` + + +### Fuzzy testing + +You can help us test further the library with fuzzy testing: + + go get github.com/dvyukov/go-fuzz/go-fuzz + go get github.com/dvyukov/go-fuzz/go-fuzz-build + go test -tags=gofuzz -run=TestGenerateSmatCorpus + go-fuzz-build github.com/RoaringBitmap/roaring + go-fuzz -bin=./roaring-fuzz.zip -workdir=workdir/ -timeout=200 + +Let it run, and if the # of crashers is > 0, check out the reports in +the workdir where you should be able to find the panic goroutine stack +traces. + +### Alternative in Go + +There is a Go version wrapping the C/C++ implementation https://github.com/RoaringBitmap/gocroaring + +For an alternative implementation in Go, see https://github.com/fzandona/goroar +The two versions were written independently. + + +### Mailing list/discussion group + +https://groups.google.com/forum/#!forum/roaring-bitmaps diff --git a/vendor/github.com/RoaringBitmap/roaring/arraycontainer.go b/vendor/github.com/RoaringBitmap/roaring/arraycontainer.go new file mode 100644 index 0000000..f7b8be5 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/arraycontainer.go @@ -0,0 +1,940 @@ +package roaring + +import ( + "fmt" +) + +//go:generate msgp -unexported + +type arrayContainer struct { + content []uint16 +} + +func (ac *arrayContainer) String() string { + s := "{" + for it := ac.getShortIterator(); it.hasNext(); { + s += fmt.Sprintf("%v, ", it.next()) + } + return s + "}" +} + +func (ac *arrayContainer) fillLeastSignificant16bits(x []uint32, i int, mask uint32) { + for k := 0; k < len(ac.content); k++ { + x[k+i] = uint32(ac.content[k]) | mask + } +} + +func (ac *arrayContainer) getShortIterator() shortIterable { + return &shortIterator{ac.content, 0} +} + +func (ac *arrayContainer) minimum() uint16 { + return ac.content[0] // assume not empty +} + +func (ac *arrayContainer) maximum() uint16 { + return ac.content[len(ac.content)-1] // assume not empty +} + +func (ac *arrayContainer) getSizeInBytes() int { + return ac.getCardinality() * 2 +} + +func (ac *arrayContainer) serializedSizeInBytes() int { + return ac.getCardinality() * 2 +} + +func arrayContainerSizeInBytes(card int) int { + return card * 2 +} + +// add the values in the range [firstOfRange,endx) +func (ac *arrayContainer) iaddRange(firstOfRange, endx int) container { + if firstOfRange >= endx { + return ac + } + indexstart := binarySearch(ac.content, uint16(firstOfRange)) + if indexstart < 0 { + indexstart = -indexstart - 1 + } + indexend := binarySearch(ac.content, uint16(endx-1)) + if indexend < 0 { + indexend = -indexend - 1 + } else { + indexend++ + } + rangelength := endx - firstOfRange + newcardinality := indexstart + (ac.getCardinality() - indexend) + rangelength + if newcardinality > arrayDefaultMaxSize { + a := ac.toBitmapContainer() + return a.iaddRange(firstOfRange, endx) + } + if cap(ac.content) < newcardinality { + tmp := make([]uint16, newcardinality, newcardinality) + copy(tmp[:indexstart], ac.content[:indexstart]) + copy(tmp[indexstart+rangelength:], ac.content[indexend:]) + + ac.content = tmp + } else { + ac.content = ac.content[:newcardinality] + copy(ac.content[indexstart+rangelength:], ac.content[indexend:]) + + } + for k := 0; k < rangelength; k++ { + ac.content[k+indexstart] = uint16(firstOfRange + k) + } + return ac +} + +// remove the values in the range [firstOfRange,endx) +func (ac *arrayContainer) iremoveRange(firstOfRange, endx int) container { + if firstOfRange >= endx { + return ac + } + indexstart := binarySearch(ac.content, uint16(firstOfRange)) + if indexstart < 0 { + indexstart = -indexstart - 1 + } + indexend := binarySearch(ac.content, uint16(endx-1)) + if indexend < 0 { + indexend = -indexend - 1 + } else { + indexend++ + } + rangelength := indexend - indexstart + answer := ac + copy(answer.content[indexstart:], ac.content[indexstart+rangelength:]) + answer.content = answer.content[:ac.getCardinality()-rangelength] + return answer +} + +// flip the values in the range [firstOfRange,endx) +func (ac *arrayContainer) not(firstOfRange, endx int) container { + if firstOfRange >= endx { + //p("arrayContainer.not(): exiting early with ac.clone()") + return ac.clone() + } + return ac.notClose(firstOfRange, endx-1) // remove everything in [firstOfRange,endx-1] +} + +// flip the values in the range [firstOfRange,lastOfRange] +func (ac *arrayContainer) notClose(firstOfRange, lastOfRange int) container { + if firstOfRange > lastOfRange { // unlike add and remove, not uses an inclusive range [firstOfRange,lastOfRange] + //p("arrayContainer.notClose(): exiting early with ac.clone()") + return ac.clone() + } + + // determine the span of array indices to be affected^M + startIndex := binarySearch(ac.content, uint16(firstOfRange)) + //p("startIndex=%v", startIndex) + if startIndex < 0 { + startIndex = -startIndex - 1 + } + lastIndex := binarySearch(ac.content, uint16(lastOfRange)) + //p("lastIndex=%v", lastIndex) + if lastIndex < 0 { + lastIndex = -lastIndex - 2 + } + currentValuesInRange := lastIndex - startIndex + 1 + spanToBeFlipped := lastOfRange - firstOfRange + 1 + newValuesInRange := spanToBeFlipped - currentValuesInRange + cardinalityChange := newValuesInRange - currentValuesInRange + newCardinality := len(ac.content) + cardinalityChange + //p("new card is %v", newCardinality) + if newCardinality > arrayDefaultMaxSize { + //p("new card over arrayDefaultMaxSize, so returning bitmap") + return ac.toBitmapContainer().not(firstOfRange, lastOfRange+1) + } + answer := newArrayContainer() + answer.content = make([]uint16, newCardinality, newCardinality) //a hack for sure + + copy(answer.content, ac.content[:startIndex]) + outPos := startIndex + inPos := startIndex + valInRange := firstOfRange + for ; valInRange <= lastOfRange && inPos <= lastIndex; valInRange++ { + if uint16(valInRange) != ac.content[inPos] { + answer.content[outPos] = uint16(valInRange) + outPos++ + } else { + inPos++ + } + } + + for ; valInRange <= lastOfRange; valInRange++ { + answer.content[outPos] = uint16(valInRange) + outPos++ + } + + for i := lastIndex + 1; i < len(ac.content); i++ { + answer.content[outPos] = ac.content[i] + outPos++ + } + answer.content = answer.content[:newCardinality] + return answer + +} + +func (ac *arrayContainer) equals(o container) bool { + + srb, ok := o.(*arrayContainer) + if ok { + // Check if the containers are the same object. + if ac == srb { + return true + } + + if len(srb.content) != len(ac.content) { + return false + } + + for i, v := range ac.content { + if v != srb.content[i] { + return false + } + } + return true + } + + // use generic comparison + bCard := o.getCardinality() + aCard := ac.getCardinality() + if bCard != aCard { + return false + } + + ait := ac.getShortIterator() + bit := o.getShortIterator() + for ait.hasNext() { + if bit.next() != ait.next() { + return false + } + } + return true +} + +func (ac *arrayContainer) toBitmapContainer() *bitmapContainer { + bc := newBitmapContainer() + bc.loadData(ac) + return bc + +} +func (ac *arrayContainer) iadd(x uint16) (wasNew bool) { + // Special case adding to the end of the container. + l := len(ac.content) + if l > 0 && l < arrayDefaultMaxSize && ac.content[l-1] < x { + ac.content = append(ac.content, x) + return true + } + + loc := binarySearch(ac.content, x) + + if loc < 0 { + s := ac.content + i := -loc - 1 + s = append(s, 0) + copy(s[i+1:], s[i:]) + s[i] = x + ac.content = s + return true + } + return false +} + +func (ac *arrayContainer) iaddReturnMinimized(x uint16) container { + // Special case adding to the end of the container. + l := len(ac.content) + if l > 0 && l < arrayDefaultMaxSize && ac.content[l-1] < x { + ac.content = append(ac.content, x) + return ac + } + + loc := binarySearch(ac.content, x) + + if loc < 0 { + if len(ac.content) >= arrayDefaultMaxSize { + a := ac.toBitmapContainer() + a.iadd(x) + return a + } + s := ac.content + i := -loc - 1 + s = append(s, 0) + copy(s[i+1:], s[i:]) + s[i] = x + ac.content = s + } + return ac +} + +// iremoveReturnMinimized is allowed to change the return type to minimize storage. +func (ac *arrayContainer) iremoveReturnMinimized(x uint16) container { + ac.iremove(x) + return ac +} + +func (ac *arrayContainer) iremove(x uint16) bool { + loc := binarySearch(ac.content, x) + if loc >= 0 { + s := ac.content + s = append(s[:loc], s[loc+1:]...) + ac.content = s + return true + } + return false +} + +func (ac *arrayContainer) remove(x uint16) container { + out := &arrayContainer{make([]uint16, len(ac.content))} + copy(out.content, ac.content[:]) + + loc := binarySearch(out.content, x) + if loc >= 0 { + s := out.content + s = append(s[:loc], s[loc+1:]...) + out.content = s + } + return out +} + +func (ac *arrayContainer) or(a container) container { + switch x := a.(type) { + case *arrayContainer: + return ac.orArray(x) + case *bitmapContainer: + return x.orArray(ac) + case *runContainer16: + if x.isFull() { + return x.clone() + } + return x.orArray(ac) + } + panic("unsupported container type") +} + +func (ac *arrayContainer) orCardinality(a container) int { + switch x := a.(type) { + case *arrayContainer: + return ac.orArrayCardinality(x) + case *bitmapContainer: + return x.orArrayCardinality(ac) + case *runContainer16: + return x.orArrayCardinality(ac) + } + panic("unsupported container type") +} + +func (ac *arrayContainer) ior(a container) container { + switch x := a.(type) { + case *arrayContainer: + return ac.iorArray(x) + case *bitmapContainer: + return ac.iorBitmap(x) + case *runContainer16: + if x.isFull() { + return x.clone() + } + return ac.iorRun16(x) + } + panic("unsupported container type") +} + +func (ac *arrayContainer) iorArray(ac2 *arrayContainer) container { + bc1 := ac.toBitmapContainer() + bc2 := ac2.toBitmapContainer() + bc1.iorBitmap(bc2) + *ac = *newArrayContainerFromBitmap(bc1) + return ac +} + +func (ac *arrayContainer) iorBitmap(bc2 *bitmapContainer) container { + bc1 := ac.toBitmapContainer() + bc1.iorBitmap(bc2) + *ac = *newArrayContainerFromBitmap(bc1) + return ac +} + +func (ac *arrayContainer) iorRun16(rc *runContainer16) container { + bc1 := ac.toBitmapContainer() + bc2 := rc.toBitmapContainer() + bc1.iorBitmap(bc2) + *ac = *newArrayContainerFromBitmap(bc1) + return ac +} + +func (ac *arrayContainer) lazyIOR(a container) container { + switch x := a.(type) { + case *arrayContainer: + return ac.lazyIorArray(x) + case *bitmapContainer: + return ac.lazyIorBitmap(x) + case *runContainer16: + if x.isFull() { + return x.clone() + } + return ac.lazyIorRun16(x) + + } + panic("unsupported container type") +} + +func (ac *arrayContainer) lazyIorArray(ac2 *arrayContainer) container { + // TODO actually make this lazy + return ac.iorArray(ac2) +} + +func (ac *arrayContainer) lazyIorBitmap(bc *bitmapContainer) container { + // TODO actually make this lazy + return ac.iorBitmap(bc) +} + +func (ac *arrayContainer) lazyIorRun16(rc *runContainer16) container { + // TODO actually make this lazy + return ac.iorRun16(rc) +} + +func (ac *arrayContainer) lazyOR(a container) container { + switch x := a.(type) { + case *arrayContainer: + return ac.lazyorArray(x) + case *bitmapContainer: + return a.lazyOR(ac) + case *runContainer16: + if x.isFull() { + return x.clone() + } + return x.orArray(ac) + } + panic("unsupported container type") +} + +func (ac *arrayContainer) orArray(value2 *arrayContainer) container { + value1 := ac + maxPossibleCardinality := value1.getCardinality() + value2.getCardinality() + if maxPossibleCardinality > arrayDefaultMaxSize { // it could be a bitmap! + bc := newBitmapContainer() + for k := 0; k < len(value2.content); k++ { + v := value2.content[k] + i := uint(v) >> 6 + mask := uint64(1) << (v % 64) + bc.bitmap[i] |= mask + } + for k := 0; k < len(ac.content); k++ { + v := ac.content[k] + i := uint(v) >> 6 + mask := uint64(1) << (v % 64) + bc.bitmap[i] |= mask + } + bc.cardinality = int(popcntSlice(bc.bitmap)) + if bc.cardinality <= arrayDefaultMaxSize { + return bc.toArrayContainer() + } + return bc + } + answer := newArrayContainerCapacity(maxPossibleCardinality) + nl := union2by2(value1.content, value2.content, answer.content) + answer.content = answer.content[:nl] // reslice to match actual used capacity + return answer +} + +func (ac *arrayContainer) orArrayCardinality(value2 *arrayContainer) int { + return union2by2Cardinality(ac.content, value2.content) +} + +func (ac *arrayContainer) lazyorArray(value2 *arrayContainer) container { + value1 := ac + maxPossibleCardinality := value1.getCardinality() + value2.getCardinality() + if maxPossibleCardinality > arrayLazyLowerBound { // it could be a bitmap!^M + bc := newBitmapContainer() + for k := 0; k < len(value2.content); k++ { + v := value2.content[k] + i := uint(v) >> 6 + mask := uint64(1) << (v % 64) + bc.bitmap[i] |= mask + } + for k := 0; k < len(ac.content); k++ { + v := ac.content[k] + i := uint(v) >> 6 + mask := uint64(1) << (v % 64) + bc.bitmap[i] |= mask + } + bc.cardinality = invalidCardinality + return bc + } + answer := newArrayContainerCapacity(maxPossibleCardinality) + nl := union2by2(value1.content, value2.content, answer.content) + answer.content = answer.content[:nl] // reslice to match actual used capacity + return answer +} + +func (ac *arrayContainer) and(a container) container { + //p("ac.and() called") + switch x := a.(type) { + case *arrayContainer: + return ac.andArray(x) + case *bitmapContainer: + return x.and(ac) + case *runContainer16: + if x.isFull() { + return ac.clone() + } + return x.andArray(ac) + } + panic("unsupported container type") +} + +func (ac *arrayContainer) andCardinality(a container) int { + switch x := a.(type) { + case *arrayContainer: + return ac.andArrayCardinality(x) + case *bitmapContainer: + return x.andCardinality(ac) + case *runContainer16: + return x.andArrayCardinality(ac) + } + panic("unsupported container type") +} + +func (ac *arrayContainer) intersects(a container) bool { + switch x := a.(type) { + case *arrayContainer: + return ac.intersectsArray(x) + case *bitmapContainer: + return x.intersects(ac) + case *runContainer16: + return x.intersects(ac) + } + panic("unsupported container type") +} + +func (ac *arrayContainer) iand(a container) container { + switch x := a.(type) { + case *arrayContainer: + return ac.iandArray(x) + case *bitmapContainer: + return ac.iandBitmap(x) + case *runContainer16: + if x.isFull() { + return ac.clone() + } + return ac.iandRun16(x) + } + panic("unsupported container type") +} + +func (ac *arrayContainer) iandRun16(rc *runContainer16) container { + bc1 := ac.toBitmapContainer() + bc2 := newBitmapContainerFromRun(rc) + bc2.iandBitmap(bc1) + *ac = *newArrayContainerFromBitmap(bc2) + return ac +} + +func (ac *arrayContainer) iandBitmap(bc *bitmapContainer) container { + pos := 0 + c := ac.getCardinality() + for k := 0; k < c; k++ { + // branchless + v := ac.content[k] + ac.content[pos] = v + pos += int(bc.bitValue(v)) + } + ac.content = ac.content[:pos] + return ac + +} + +func (ac *arrayContainer) xor(a container) container { + switch x := a.(type) { + case *arrayContainer: + return ac.xorArray(x) + case *bitmapContainer: + return a.xor(ac) + case *runContainer16: + return x.xorArray(ac) + } + panic("unsupported container type") +} + +func (ac *arrayContainer) xorArray(value2 *arrayContainer) container { + value1 := ac + totalCardinality := value1.getCardinality() + value2.getCardinality() + if totalCardinality > arrayDefaultMaxSize { // it could be a bitmap! + bc := newBitmapContainer() + for k := 0; k < len(value2.content); k++ { + v := value2.content[k] + i := uint(v) >> 6 + bc.bitmap[i] ^= (uint64(1) << (v % 64)) + } + for k := 0; k < len(ac.content); k++ { + v := ac.content[k] + i := uint(v) >> 6 + bc.bitmap[i] ^= (uint64(1) << (v % 64)) + } + bc.computeCardinality() + if bc.cardinality <= arrayDefaultMaxSize { + return bc.toArrayContainer() + } + return bc + } + desiredCapacity := totalCardinality + answer := newArrayContainerCapacity(desiredCapacity) + length := exclusiveUnion2by2(value1.content, value2.content, answer.content) + answer.content = answer.content[:length] + return answer + +} + +func (ac *arrayContainer) andNot(a container) container { + switch x := a.(type) { + case *arrayContainer: + return ac.andNotArray(x) + case *bitmapContainer: + return ac.andNotBitmap(x) + case *runContainer16: + return ac.andNotRun16(x) + } + panic("unsupported container type") +} + +func (ac *arrayContainer) andNotRun16(rc *runContainer16) container { + acb := ac.toBitmapContainer() + rcb := rc.toBitmapContainer() + return acb.andNotBitmap(rcb) +} + +func (ac *arrayContainer) iandNot(a container) container { + switch x := a.(type) { + case *arrayContainer: + return ac.iandNotArray(x) + case *bitmapContainer: + return ac.iandNotBitmap(x) + case *runContainer16: + return ac.iandNotRun16(x) + } + panic("unsupported container type") +} + +func (ac *arrayContainer) iandNotRun16(rc *runContainer16) container { + rcb := rc.toBitmapContainer() + acb := ac.toBitmapContainer() + acb.iandNotBitmapSurely(rcb) + *ac = *(acb.toArrayContainer()) + return ac +} + +func (ac *arrayContainer) andNotArray(value2 *arrayContainer) container { + value1 := ac + desiredcapacity := value1.getCardinality() + answer := newArrayContainerCapacity(desiredcapacity) + length := difference(value1.content, value2.content, answer.content) + answer.content = answer.content[:length] + return answer +} + +func (ac *arrayContainer) iandNotArray(value2 *arrayContainer) container { + length := difference(ac.content, value2.content, ac.content) + ac.content = ac.content[:length] + return ac +} + +func (ac *arrayContainer) andNotBitmap(value2 *bitmapContainer) container { + desiredcapacity := ac.getCardinality() + answer := newArrayContainerCapacity(desiredcapacity) + answer.content = answer.content[:desiredcapacity] + pos := 0 + for _, v := range ac.content { + answer.content[pos] = v + pos += 1 - int(value2.bitValue(v)) + } + answer.content = answer.content[:pos] + return answer +} + +func (ac *arrayContainer) andBitmap(value2 *bitmapContainer) container { + desiredcapacity := ac.getCardinality() + answer := newArrayContainerCapacity(desiredcapacity) + answer.content = answer.content[:desiredcapacity] + pos := 0 + for _, v := range ac.content { + answer.content[pos] = v + pos += int(value2.bitValue(v)) + } + answer.content = answer.content[:pos] + return answer +} + +func (ac *arrayContainer) iandNotBitmap(value2 *bitmapContainer) container { + pos := 0 + for _, v := range ac.content { + ac.content[pos] = v + pos += 1 - int(value2.bitValue(v)) + } + ac.content = ac.content[:pos] + return ac +} + +func copyOf(array []uint16, size int) []uint16 { + result := make([]uint16, size) + for i, x := range array { + if i == size { + break + } + result[i] = x + } + return result +} + +// flip the values in the range [firstOfRange,endx) +func (ac *arrayContainer) inot(firstOfRange, endx int) container { + if firstOfRange >= endx { + return ac + } + return ac.inotClose(firstOfRange, endx-1) // remove everything in [firstOfRange,endx-1] +} + +// flip the values in the range [firstOfRange,lastOfRange] +func (ac *arrayContainer) inotClose(firstOfRange, lastOfRange int) container { + //p("ac.inotClose() starting") + if firstOfRange > lastOfRange { // unlike add and remove, not uses an inclusive range [firstOfRange,lastOfRange] + return ac + } + // determine the span of array indices to be affected + startIndex := binarySearch(ac.content, uint16(firstOfRange)) + if startIndex < 0 { + startIndex = -startIndex - 1 + } + lastIndex := binarySearch(ac.content, uint16(lastOfRange)) + if lastIndex < 0 { + lastIndex = -lastIndex - 1 - 1 + } + currentValuesInRange := lastIndex - startIndex + 1 + spanToBeFlipped := lastOfRange - firstOfRange + 1 + + newValuesInRange := spanToBeFlipped - currentValuesInRange + buffer := make([]uint16, newValuesInRange) + cardinalityChange := newValuesInRange - currentValuesInRange + newCardinality := len(ac.content) + cardinalityChange + if cardinalityChange > 0 { + if newCardinality > len(ac.content) { + if newCardinality > arrayDefaultMaxSize { + //p("ac.inotClose() converting to bitmap and doing inot there") + bcRet := ac.toBitmapContainer() + bcRet.inot(firstOfRange, lastOfRange+1) + *ac = *bcRet.toArrayContainer() + return bcRet + } + ac.content = copyOf(ac.content, newCardinality) + } + base := lastIndex + 1 + copy(ac.content[lastIndex+1+cardinalityChange:], ac.content[base:base+len(ac.content)-1-lastIndex]) + ac.negateRange(buffer, startIndex, lastIndex, firstOfRange, lastOfRange+1) + } else { // no expansion needed + ac.negateRange(buffer, startIndex, lastIndex, firstOfRange, lastOfRange+1) + if cardinalityChange < 0 { + + for i := startIndex + newValuesInRange; i < newCardinality; i++ { + ac.content[i] = ac.content[i-cardinalityChange] + } + } + } + ac.content = ac.content[:newCardinality] + //p("bottom of ac.inotClose(): returning ac") + return ac +} + +func (ac *arrayContainer) negateRange(buffer []uint16, startIndex, lastIndex, startRange, lastRange int) { + // compute the negation into buffer + outPos := 0 + inPos := startIndex // value here always >= valInRange, + // until it is exhausted + // n.b., we can start initially exhausted. + + valInRange := startRange + for ; valInRange < lastRange && inPos <= lastIndex; valInRange++ { + if uint16(valInRange) != ac.content[inPos] { + buffer[outPos] = uint16(valInRange) + outPos++ + } else { + inPos++ + } + } + + // if there are extra items (greater than the biggest + // pre-existing one in range), buffer them + for ; valInRange < lastRange; valInRange++ { + buffer[outPos] = uint16(valInRange) + outPos++ + } + + if outPos != len(buffer) { + panic("negateRange: internal bug") + } + + for i, item := range buffer { + ac.content[i+startIndex] = item + } +} + +func min(a, b int) int { + if a < b { + return a + } + return b +} + +func (ac *arrayContainer) isFull() bool { + return false +} + +func (ac *arrayContainer) andArray(value2 *arrayContainer) container { + desiredcapacity := min(ac.getCardinality(), value2.getCardinality()) + answer := newArrayContainerCapacity(desiredcapacity) + length := intersection2by2( + ac.content, + value2.content, + answer.content) + answer.content = answer.content[:length] + return answer +} + +func (ac *arrayContainer) andArrayCardinality(value2 *arrayContainer) int { + return intersection2by2Cardinality( + ac.content, + value2.content) +} + +func (ac *arrayContainer) intersectsArray(value2 *arrayContainer) bool { + return intersects2by2( + ac.content, + value2.content) +} + +func (ac *arrayContainer) iandArray(value2 *arrayContainer) container { + length := intersection2by2( + ac.content, + value2.content, + ac.content) + ac.content = ac.content[:length] + return ac +} + +func (ac *arrayContainer) getCardinality() int { + return len(ac.content) +} + +func (ac *arrayContainer) rank(x uint16) int { + answer := binarySearch(ac.content, x) + if answer >= 0 { + return answer + 1 + } + return -answer - 1 + +} + +func (ac *arrayContainer) selectInt(x uint16) int { + return int(ac.content[x]) +} + +func (ac *arrayContainer) clone() container { + ptr := arrayContainer{make([]uint16, len(ac.content))} + copy(ptr.content, ac.content[:]) + return &ptr +} + +func (ac *arrayContainer) contains(x uint16) bool { + return binarySearch(ac.content, x) >= 0 +} + +func (ac *arrayContainer) loadData(bitmapContainer *bitmapContainer) { + ac.content = make([]uint16, bitmapContainer.cardinality, bitmapContainer.cardinality) + bitmapContainer.fillArray(ac.content) +} +func newArrayContainer() *arrayContainer { + p := new(arrayContainer) + return p +} + +func newArrayContainerFromBitmap(bc *bitmapContainer) *arrayContainer { + ac := &arrayContainer{} + ac.loadData(bc) + return ac +} + +func newArrayContainerCapacity(size int) *arrayContainer { + p := new(arrayContainer) + p.content = make([]uint16, 0, size) + return p +} + +func newArrayContainerSize(size int) *arrayContainer { + p := new(arrayContainer) + p.content = make([]uint16, size, size) + return p +} + +func newArrayContainerRange(firstOfRun, lastOfRun int) *arrayContainer { + valuesInRange := lastOfRun - firstOfRun + 1 + this := newArrayContainerCapacity(valuesInRange) + for i := 0; i < valuesInRange; i++ { + this.content = append(this.content, uint16(firstOfRun+i)) + } + return this +} + +func (ac *arrayContainer) numberOfRuns() (nr int) { + n := len(ac.content) + var runlen uint16 + var cur, prev uint16 + + switch n { + case 0: + return 0 + case 1: + return 1 + default: + for i := 1; i < n; i++ { + prev = ac.content[i-1] + cur = ac.content[i] + + if cur == prev+1 { + runlen++ + } else { + if cur < prev { + panic("then fundamental arrayContainer assumption of sorted ac.content was broken") + } + if cur == prev { + panic("then fundamental arrayContainer assumption of deduplicated content was broken") + } else { + nr++ + runlen = 0 + } + } + } + nr++ + } + return +} + +// convert to run or array *if needed* +func (ac *arrayContainer) toEfficientContainer() container { + + numRuns := ac.numberOfRuns() + + sizeAsRunContainer := runContainer16SerializedSizeInBytes(numRuns) + sizeAsBitmapContainer := bitmapContainerSizeInBytes() + card := ac.getCardinality() + sizeAsArrayContainer := arrayContainerSizeInBytes(card) + + if sizeAsRunContainer <= min(sizeAsBitmapContainer, sizeAsArrayContainer) { + return newRunContainer16FromArray(ac) + } + if card <= arrayDefaultMaxSize { + return ac + } + return ac.toBitmapContainer() +} + +func (ac *arrayContainer) containerType() contype { + return arrayContype +} diff --git a/vendor/github.com/RoaringBitmap/roaring/arraycontainer_gen.go b/vendor/github.com/RoaringBitmap/roaring/arraycontainer_gen.go new file mode 100644 index 0000000..cba6e53 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/arraycontainer_gen.go @@ -0,0 +1,134 @@ +package roaring + +// NOTE: THIS FILE WAS PRODUCED BY THE +// MSGP CODE GENERATION TOOL (github.com/tinylib/msgp) +// DO NOT EDIT + +import "github.com/tinylib/msgp/msgp" + +// DecodeMsg implements msgp.Decodable +func (z *arrayContainer) DecodeMsg(dc *msgp.Reader) (err error) { + var field []byte + _ = field + var zbzg uint32 + zbzg, err = dc.ReadMapHeader() + if err != nil { + return + } + for zbzg > 0 { + zbzg-- + field, err = dc.ReadMapKeyPtr() + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "content": + var zbai uint32 + zbai, err = dc.ReadArrayHeader() + if err != nil { + return + } + if cap(z.content) >= int(zbai) { + z.content = (z.content)[:zbai] + } else { + z.content = make([]uint16, zbai) + } + for zxvk := range z.content { + z.content[zxvk], err = dc.ReadUint16() + if err != nil { + return + } + } + default: + err = dc.Skip() + if err != nil { + return + } + } + } + return +} + +// EncodeMsg implements msgp.Encodable +func (z *arrayContainer) EncodeMsg(en *msgp.Writer) (err error) { + // map header, size 1 + // write "content" + err = en.Append(0x81, 0xa7, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74) + if err != nil { + return err + } + err = en.WriteArrayHeader(uint32(len(z.content))) + if err != nil { + return + } + for zxvk := range z.content { + err = en.WriteUint16(z.content[zxvk]) + if err != nil { + return + } + } + return +} + +// MarshalMsg implements msgp.Marshaler +func (z *arrayContainer) MarshalMsg(b []byte) (o []byte, err error) { + o = msgp.Require(b, z.Msgsize()) + // map header, size 1 + // string "content" + o = append(o, 0x81, 0xa7, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74) + o = msgp.AppendArrayHeader(o, uint32(len(z.content))) + for zxvk := range z.content { + o = msgp.AppendUint16(o, z.content[zxvk]) + } + return +} + +// UnmarshalMsg implements msgp.Unmarshaler +func (z *arrayContainer) UnmarshalMsg(bts []byte) (o []byte, err error) { + var field []byte + _ = field + var zcmr uint32 + zcmr, bts, err = msgp.ReadMapHeaderBytes(bts) + if err != nil { + return + } + for zcmr > 0 { + zcmr-- + field, bts, err = msgp.ReadMapKeyZC(bts) + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "content": + var zajw uint32 + zajw, bts, err = msgp.ReadArrayHeaderBytes(bts) + if err != nil { + return + } + if cap(z.content) >= int(zajw) { + z.content = (z.content)[:zajw] + } else { + z.content = make([]uint16, zajw) + } + for zxvk := range z.content { + z.content[zxvk], bts, err = msgp.ReadUint16Bytes(bts) + if err != nil { + return + } + } + default: + bts, err = msgp.Skip(bts) + if err != nil { + return + } + } + } + o = bts + return +} + +// Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message +func (z *arrayContainer) Msgsize() (s int) { + s = 1 + 8 + msgp.ArrayHeaderSize + (len(z.content) * (msgp.Uint16Size)) + return +} diff --git a/vendor/github.com/RoaringBitmap/roaring/arraycontainer_gen_test.go b/vendor/github.com/RoaringBitmap/roaring/arraycontainer_gen_test.go new file mode 100644 index 0000000..292afe9 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/arraycontainer_gen_test.go @@ -0,0 +1,125 @@ +package roaring + +// NOTE: THIS FILE WAS PRODUCED BY THE +// MSGP CODE GENERATION TOOL (github.com/tinylib/msgp) +// DO NOT EDIT + +import ( + "bytes" + "testing" + + "github.com/tinylib/msgp/msgp" +) + +func TestMarshalUnmarshalarrayContainer(t *testing.T) { + v := arrayContainer{} + bts, err := v.MarshalMsg(nil) + if err != nil { + t.Fatal(err) + } + left, err := v.UnmarshalMsg(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after UnmarshalMsg(): %q", len(left), left) + } + + left, err = msgp.Skip(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after Skip(): %q", len(left), left) + } +} + +func BenchmarkMarshalMsgarrayContainer(b *testing.B) { + v := arrayContainer{} + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.MarshalMsg(nil) + } +} + +func BenchmarkAppendMsgarrayContainer(b *testing.B) { + v := arrayContainer{} + bts := make([]byte, 0, v.Msgsize()) + bts, _ = v.MarshalMsg(bts[0:0]) + b.SetBytes(int64(len(bts))) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + bts, _ = v.MarshalMsg(bts[0:0]) + } +} + +func BenchmarkUnmarshalarrayContainer(b *testing.B) { + v := arrayContainer{} + bts, _ := v.MarshalMsg(nil) + b.ReportAllocs() + b.SetBytes(int64(len(bts))) + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := v.UnmarshalMsg(bts) + if err != nil { + b.Fatal(err) + } + } +} + +func TestEncodeDecodearrayContainer(t *testing.T) { + v := arrayContainer{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + + m := v.Msgsize() + if buf.Len() > m { + t.Logf("WARNING: Msgsize() for %v is inaccurate", v) + } + + vn := arrayContainer{} + err := msgp.Decode(&buf, &vn) + if err != nil { + t.Error(err) + } + + buf.Reset() + msgp.Encode(&buf, &v) + err = msgp.NewReader(&buf).Skip() + if err != nil { + t.Error(err) + } +} + +func BenchmarkEncodearrayContainer(b *testing.B) { + v := arrayContainer{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + b.SetBytes(int64(buf.Len())) + en := msgp.NewWriter(msgp.Nowhere) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.EncodeMsg(en) + } + en.Flush() +} + +func BenchmarkDecodearrayContainer(b *testing.B) { + v := arrayContainer{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + b.SetBytes(int64(buf.Len())) + rd := msgp.NewEndlessReader(buf.Bytes(), b) + dc := msgp.NewReader(rd) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + err := v.DecodeMsg(dc) + if err != nil { + b.Fatal(err) + } + } +} diff --git a/vendor/github.com/RoaringBitmap/roaring/arraycontainer_test.go b/vendor/github.com/RoaringBitmap/roaring/arraycontainer_test.go new file mode 100644 index 0000000..d3d25a3 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/arraycontainer_test.go @@ -0,0 +1,351 @@ +package roaring + +// to run just these tests: go test -run TestArrayContainer* + +import ( + "math/rand" + "reflect" + "testing" + + . "github.com/smartystreets/goconvey/convey" +) + +func TestArrayContainerTransition(t *testing.T) { + v := container(newArrayContainer()) + arraytype := reflect.TypeOf(v) + for i := 0; i < arrayDefaultMaxSize; i++ { + v = v.iaddReturnMinimized(uint16(i)) + } + if v.getCardinality() != arrayDefaultMaxSize { + t.Errorf("Bad cardinality.") + } + if reflect.TypeOf(v) != arraytype { + t.Errorf("Should be an array.") + } + for i := 0; i < arrayDefaultMaxSize; i++ { + v = v.iaddReturnMinimized(uint16(i)) + } + if v.getCardinality() != arrayDefaultMaxSize { + t.Errorf("Bad cardinality.") + } + if reflect.TypeOf(v) != arraytype { + t.Errorf("Should be an array.") + } + v = v.iaddReturnMinimized(uint16(arrayDefaultMaxSize)) + if v.getCardinality() != arrayDefaultMaxSize+1 { + t.Errorf("Bad cardinality.") + } + if reflect.TypeOf(v) == arraytype { + t.Errorf("Should be a bitmap.") + } + v = v.iremoveReturnMinimized(uint16(arrayDefaultMaxSize)) + if v.getCardinality() != arrayDefaultMaxSize { + t.Errorf("Bad cardinality.") + } + if reflect.TypeOf(v) != arraytype { + t.Errorf("Should be an array.") + } +} + +func TestArrayContainerRank(t *testing.T) { + v := container(newArrayContainer()) + v = v.iaddReturnMinimized(10) + v = v.iaddReturnMinimized(100) + v = v.iaddReturnMinimized(1000) + if v.getCardinality() != 3 { + t.Errorf("Bogus cardinality.") + } + for i := 0; i <= arrayDefaultMaxSize; i++ { + thisrank := v.rank(uint16(i)) + if i < 10 { + if thisrank != 0 { + t.Errorf("At %d should be zero but is %d ", i, thisrank) + } + } else if i < 100 { + if thisrank != 1 { + t.Errorf("At %d should be zero but is %d ", i, thisrank) + } + } else if i < 1000 { + if thisrank != 2 { + t.Errorf("At %d should be zero but is %d ", i, thisrank) + } + } else { + if thisrank != 3 { + t.Errorf("At %d should be zero but is %d ", i, thisrank) + } + } + } +} + +func TestArrayContainerMassiveSetAndGet(t *testing.T) { + v := container(newArrayContainer()) + for j := 0; j <= arrayDefaultMaxSize; j++ { + + v = v.iaddReturnMinimized(uint16(j)) + if v.getCardinality() != 1+j { + t.Errorf("Bogus cardinality %d %d. ", v.getCardinality(), j) + } + for i := 0; i <= arrayDefaultMaxSize; i++ { + if i <= j { + if v.contains(uint16(i)) != true { + t.Errorf("I added a number in vain.") + } + } else { + if v.contains(uint16(i)) != false { + t.Errorf("Ghost content") + break + } + } + } + } +} + +type FakeContainer struct { + arrayContainer +} + +func TestArrayContainerUnsupportedType(t *testing.T) { + a := container(newArrayContainer()) + testContainerPanics(t, a) + b := container(newBitmapContainer()) + testContainerPanics(t, b) +} + +func testContainerPanics(t *testing.T, c container) { + f := &FakeContainer{} + assertPanic(t, func() { + c.or(f) + }) + assertPanic(t, func() { + c.ior(f) + }) + assertPanic(t, func() { + c.lazyIOR(f) + }) + assertPanic(t, func() { + c.lazyOR(f) + }) + assertPanic(t, func() { + c.and(f) + }) + assertPanic(t, func() { + c.intersects(f) + }) + assertPanic(t, func() { + c.iand(f) + }) + assertPanic(t, func() { + c.xor(f) + }) + assertPanic(t, func() { + c.andNot(f) + }) + assertPanic(t, func() { + c.iandNot(f) + }) +} + +func assertPanic(t *testing.T, f func()) { + defer func() { + if r := recover(); r == nil { + t.Errorf("The code did not panic") + } + }() + f() +} + +func TestArrayContainerNumberOfRuns025(t *testing.T) { + + Convey("arrayContainer's numberOfRuns() function should be correct against the runContainer equivalent", + t, func() { + seed := int64(42) + p("seed is %v", seed) + rand.Seed(seed) + + trials := []trial{ + {n: 1000, percentFill: .1, ntrial: 10}, + /* + trial{n: 100, percentFill: .5, ntrial: 10}, + trial{n: 100, percentFill: .01, ntrial: 10}, + trial{n: 100, percentFill: .99, ntrial: 10}, + */ + } + + tester := func(tr trial) { + for j := 0; j < tr.ntrial; j++ { + p("TestArrayContainerNumberOfRuns023 on check# j=%v", j) + ma := make(map[int]bool) + + n := tr.n + a := []uint16{} + + draw := int(float64(n) * tr.percentFill) + for i := 0; i < draw; i++ { + r0 := rand.Intn(n) + a = append(a, uint16(r0)) + ma[r0] = true + } + + showArray16(a, "a") + + // RunContainer computes this automatically + rc := newRunContainer16FromVals(false, a...) + rcNr := rc.numberOfRuns() + + p("rcNr from run container is %v", rcNr) + + // vs arrayContainer + ac := newArrayContainer() + for k := range ma { + ac.iadd(uint16(k)) + } + + acNr := ac.numberOfRuns() + So(acNr, ShouldEqual, rcNr) + + // get coverage of arrayContainer coners... + So(ac.serializedSizeInBytes(), ShouldEqual, 2*len(ma)) + + So(func() { ac.iaddRange(2, 1) }, ShouldNotPanic) + So(func() { ac.iremoveRange(2, 1) }, ShouldNotPanic) + ac.iremoveRange(0, 2) + ac.iremoveRange(0, 2) + delete(ma, 0) + delete(ma, 1) + So(ac.getCardinality(), ShouldEqual, len(ma)) + ac.iadd(0) + ac.iadd(1) + ac.iadd(2) + ma[0] = true + ma[1] = true + ma[2] = true + newguy := ac.not(0, 3).(*arrayContainer) + So(newguy.contains(0), ShouldBeFalse) + So(newguy.contains(1), ShouldBeFalse) + So(newguy.contains(2), ShouldBeFalse) + newguy.notClose(0, 2) + newguy.remove(2) + newguy.remove(2) + newguy.ior(ac) + + messedUp := newArrayContainer() + So(messedUp.numberOfRuns(), ShouldEqual, 0) + + // messed up + messedUp.content = []uint16{1, 1} + So(func() { messedUp.numberOfRuns() }, ShouldPanic) + messedUp.content = []uint16{2, 1} + So(func() { messedUp.numberOfRuns() }, ShouldPanic) + + shouldBeBit := newArrayContainer() + for i := 0; i < arrayDefaultMaxSize+1; i++ { + shouldBeBit.iadd(uint16(i * 2)) + } + bit := shouldBeBit.toEfficientContainer() + _, isBit := bit.(*bitmapContainer) + So(isBit, ShouldBeTrue) + + //fmt.Printf("\nnum runs was: %v\n", rcNr) + } + p("done with randomized arrayContianer.numberOrRuns() checks for trial %#v", tr) + } + + for i := range trials { + tester(trials[i]) + } + + }) +} + +func TestArrayContainerIaddRangeNearMax068(t *testing.T) { + + Convey("arrayContainer iaddRange should work near MaxUint16", t, func() { + + iv := []interval16{{65525, 65527}, {65530, 65530}, {65534, 65535}} + rc := newRunContainer16TakeOwnership(iv) + + ac2 := rc.toArrayContainer() + So(ac2.equals(rc), ShouldBeTrue) + So(rc.equals(ac2), ShouldBeTrue) + + ac := newArrayContainer() + endx := int(MaxUint16) + 1 + first := endx - 3 + ac.iaddRange(first-20, endx-20) + ac.iaddRange(first-6, endx-6) + ac.iaddRange(first, endx) + So(ac.getCardinality(), ShouldEqual, 9) + + }) +} + +func TestArrayContainerEtc070(t *testing.T) { + + Convey("arrayContainer rarely exercised code paths should get some coverage", t, func() { + + iv := []interval16{{65525, 65527}, {65530, 65530}, {65534, 65535}} + rc := newRunContainer16TakeOwnership(iv) + ac := rc.toArrayContainer() + + // not when nothing to do just returns a clone + So(ac.equals(ac.not(0, 0)), ShouldBeTrue) + So(ac.equals(ac.notClose(1, 0)), ShouldBeTrue) + + // not will promote to bitmapContainer if card is big enough + + ac = newArrayContainer() + ac.inot(0, MaxUint16+1) + rc = newRunContainer16Range(0, MaxUint16) + + p("ac.card = %v", ac.getCardinality()) + p("rc.card = %v", rc.getCardinality()) + So(rc.equals(ac), ShouldBeTrue) + + // comparing two array containers with different card + ac2 := newArrayContainer() + So(ac2.equals(ac), ShouldBeFalse) + + // comparing two arrays with same card but different content + ac3 := newArrayContainer() + ac4 := newArrayContainer() + ac3.iadd(1) + ac3.iadd(2) + ac4.iadd(1) + So(ac3.equals(ac4), ShouldBeFalse) + + // compare array vs other with different card + So(ac3.equals(rc), ShouldBeFalse) + + // compare array vs other, same card, different content + rc = newRunContainer16Range(0, 0) + So(ac4.equals(rc), ShouldBeFalse) + + // remove from middle of array + ac5 := newArrayContainer() + ac5.iaddRange(0, 10) + So(ac5.getCardinality(), ShouldEqual, 10) + ac6 := ac5.remove(5) + So(ac6.getCardinality(), ShouldEqual, 9) + + // lazyorArray that converts to bitmap + ac5.iaddRange(0, arrayLazyLowerBound-1) + ac6.iaddRange(arrayLazyLowerBound, 2*arrayLazyLowerBound-2) + ac6a := ac6.(*arrayContainer) + bc := ac5.lazyorArray(ac6a) + _, isBitmap := bc.(*bitmapContainer) + So(isBitmap, ShouldBeTrue) + + // andBitmap + ac = newArrayContainer() + ac.iaddRange(0, 10) + bc9 := newBitmapContainer() + bc9.iaddRange(0, 5) + and := ac.andBitmap(bc9) + So(and.getCardinality(), ShouldEqual, 5) + + // numberOfRuns with 1 member + ac10 := newArrayContainer() + ac10.iadd(1) + So(ac10.numberOfRuns(), ShouldEqual, 1) + }) +} diff --git a/vendor/github.com/RoaringBitmap/roaring/benchmark_test.go b/vendor/github.com/RoaringBitmap/roaring/benchmark_test.go new file mode 100644 index 0000000..c6c338c --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/benchmark_test.go @@ -0,0 +1,535 @@ +package roaring + +import ( + "bytes" + "fmt" + "math/rand" + "runtime" + "testing" + + "github.com/willf/bitset" +) + +// BENCHMARKS, to run them type "go test -bench Benchmark -run -" + +var c9 uint + +// go test -bench BenchmarkMemoryUsage -run - +func BenchmarkMemoryUsage(b *testing.B) { + b.StopTimer() + bitmaps := make([]*Bitmap, 0, 10) + + incr := uint32(1 << 16) + max := uint32(1<<32 - 1) + for x := 0; x < 10; x++ { + rb := NewBitmap() + + var i uint32 + for i = 0; i <= max-incr; i += incr { + rb.Add(i) + } + + bitmaps = append(bitmaps, rb) + } + + var stats runtime.MemStats + runtime.ReadMemStats(&stats) + fmt.Printf("\nHeapInUse %d\n", stats.HeapInuse) + fmt.Printf("HeapObjects %d\n", stats.HeapObjects) + b.StartTimer() +} + +// go test -bench BenchmarkIntersection -run - +func BenchmarkIntersectionBitset(b *testing.B) { + b.StopTimer() + r := rand.New(rand.NewSource(0)) + s1 := bitset.New(0) + sz := 150000 + initsize := 65000 + for i := 0; i < initsize; i++ { + s1.Set(uint(r.Int31n(int32(sz)))) + } + s2 := bitset.New(0) + sz = 100000000 + initsize = 65000 + for i := 0; i < initsize; i++ { + s2.Set(uint(r.Int31n(int32(sz)))) + } + b.StartTimer() + card := uint(0) + for j := 0; j < b.N; j++ { + s3 := s1.Intersection(s2) + card = card + s3.Count() + } +} + +// go test -bench BenchmarkIntersection -run - +func BenchmarkIntersectionRoaring(b *testing.B) { + b.StopTimer() + r := rand.New(rand.NewSource(0)) + s1 := NewBitmap() + sz := 150000 + initsize := 65000 + for i := 0; i < initsize; i++ { + s1.Add(uint32(r.Int31n(int32(sz)))) + } + s2 := NewBitmap() + sz = 100000000 + initsize = 65000 + for i := 0; i < initsize; i++ { + s2.Add(uint32(r.Int31n(int32(sz)))) + } + b.StartTimer() + card := uint64(0) + for j := 0; j < b.N; j++ { + s3 := And(s1, s2) + card = card + s3.GetCardinality() + } +} + +// go test -bench BenchmarkIntersectionCardinalityRoaring -run - +func BenchmarkIntersectionCardinalityRoaring(b *testing.B) { + b.StopTimer() + r := rand.New(rand.NewSource(0)) + s1 := NewBitmap() + sz := 150000 + initsize := 65000 + for i := 0; i < initsize; i++ { + s1.Add(uint32(r.Int31n(int32(sz)))) + } + s2 := NewBitmap() + sz = 100000000 + initsize = 65000 + for i := 0; i < initsize; i++ { + s2.Add(uint32(r.Int31n(int32(sz)))) + } + b.StartTimer() + card := uint64(0) + for j := 0; j < b.N; j++ { + card += s1.AndCardinality(s2) + } +} + +// go test -bench BenchmarkUnion -run - +func BenchmarkUnionBitset(b *testing.B) { + b.StopTimer() + r := rand.New(rand.NewSource(0)) + s1 := bitset.New(0) + sz := 150000 + initsize := 65000 + for i := 0; i < initsize; i++ { + s1.Set(uint(r.Int31n(int32(sz)))) + } + s2 := bitset.New(0) + sz = 100000000 + initsize = 65000 + for i := 0; i < initsize; i++ { + s2.Set(uint(r.Int31n(int32(sz)))) + } + b.StartTimer() + card := uint(0) + for j := 0; j < b.N; j++ { + s3 := s1.Union(s2) + card = card + s3.Count() + } +} + +// go test -bench BenchmarkUnion -run - +func BenchmarkUnionRoaring(b *testing.B) { + b.StopTimer() + r := rand.New(rand.NewSource(0)) + s1 := NewBitmap() + sz := 150000 + initsize := 65000 + for i := 0; i < initsize; i++ { + s1.Add(uint32(r.Int31n(int32(sz)))) + } + s2 := NewBitmap() + sz = 100000000 + initsize = 65000 + for i := 0; i < initsize; i++ { + s2.Add(uint32(r.Int31n(int32(sz)))) + } + b.StartTimer() + card := uint64(0) + for j := 0; j < b.N; j++ { + s3 := Or(s1, s2) + card = card + s3.GetCardinality() + } +} + +// go test -bench BenchmarkSize -run - +func BenchmarkSizeBitset(b *testing.B) { + b.StopTimer() + r := rand.New(rand.NewSource(0)) + s1 := bitset.New(0) + sz := 150000 + initsize := 65000 + for i := 0; i < initsize; i++ { + s1.Set(uint(r.Int31n(int32(sz)))) + } + s2 := bitset.New(0) + sz = 100000000 + initsize = 65000 + for i := 0; i < initsize; i++ { + s2.Set(uint(r.Int31n(int32(sz)))) + } + fmt.Printf("%.1f MB ", float32(s1.BinaryStorageSize()+s2.BinaryStorageSize())/(1024.0*1024)) + +} + +// go test -bench BenchmarkSize -run - +func BenchmarkSizeRoaring(b *testing.B) { + b.StopTimer() + r := rand.New(rand.NewSource(0)) + s1 := NewBitmap() + sz := 150000 + initsize := 65000 + for i := 0; i < initsize; i++ { + s1.Add(uint32(r.Int31n(int32(sz)))) + } + s2 := NewBitmap() + sz = 100000000 + initsize = 65000 + for i := 0; i < initsize; i++ { + s2.Add(uint32(r.Int31n(int32(sz)))) + } + fmt.Printf("%.1f MB ", float32(s1.GetSerializedSizeInBytes()+s2.GetSerializedSizeInBytes())/(1024.0*1024)) + +} + +// go test -bench BenchmarkSet -run - +func BenchmarkSetRoaring(b *testing.B) { + b.StopTimer() + r := rand.New(rand.NewSource(0)) + sz := 1000000 + s := NewBitmap() + b.StartTimer() + for i := 0; i < b.N; i++ { + s.Add(uint32(r.Int31n(int32(sz)))) + } +} + +func BenchmarkSetBitset(b *testing.B) { + b.StopTimer() + r := rand.New(rand.NewSource(0)) + sz := 1000000 + s := bitset.New(0) + b.StartTimer() + for i := 0; i < b.N; i++ { + s.Set(uint(r.Int31n(int32(sz)))) + } +} + +// go test -bench BenchmarkGetTest -run - +func BenchmarkGetTestRoaring(b *testing.B) { + b.StopTimer() + r := rand.New(rand.NewSource(0)) + sz := 1000000 + initsize := 50000 + s := NewBitmap() + for i := 0; i < initsize; i++ { + s.Add(uint32(r.Int31n(int32(sz)))) + } + b.StartTimer() + for i := 0; i < b.N; i++ { + s.Contains(uint32(r.Int31n(int32(sz)))) + } +} + +func BenchmarkGetTestBitSet(b *testing.B) { + b.StopTimer() + r := rand.New(rand.NewSource(0)) + sz := 1000000 + initsize := 50000 + s := bitset.New(0) + for i := 0; i < initsize; i++ { + s.Set(uint(r.Int31n(int32(sz)))) + } + b.StartTimer() + for i := 0; i < b.N; i++ { + s.Test(uint(r.Int31n(int32(sz)))) + } +} + +// go test -bench BenchmarkCount -run - +func BenchmarkCountRoaring(b *testing.B) { + b.StopTimer() + r := rand.New(rand.NewSource(0)) + s := NewBitmap() + sz := 1000000 + initsize := 50000 + for i := 0; i < initsize; i++ { + s.Add(uint32(r.Int31n(int32(sz)))) + } + b.StartTimer() + for i := 0; i < b.N; i++ { + s.GetCardinality() + } +} + +func BenchmarkCountBitset(b *testing.B) { + b.StopTimer() + r := rand.New(rand.NewSource(0)) + s := bitset.New(0) + sz := 1000000 + initsize := 50000 + for i := 0; i < initsize; i++ { + + s.Set(uint(r.Int31n(int32(sz)))) + } + b.StartTimer() + for i := 0; i < b.N; i++ { + s.Count() + } +} + +// go test -bench BenchmarkIterate -run - +func BenchmarkIterateRoaring(b *testing.B) { + b.StopTimer() + r := rand.New(rand.NewSource(0)) + s := NewBitmap() + sz := 150000 + initsize := 65000 + for i := 0; i < initsize; i++ { + s.Add(uint32(r.Int31n(int32(sz)))) + } + b.StartTimer() + for j := 0; j < b.N; j++ { + c9 = uint(0) + i := s.Iterator() + for i.HasNext() { + i.Next() + c9++ + } + } +} + +// go test -bench BenchmarkSparseIterate -run - +func BenchmarkSparseIterateRoaring(b *testing.B) { + b.StopTimer() + r := rand.New(rand.NewSource(0)) + s := NewBitmap() + sz := 100000000 + initsize := 65000 + for i := 0; i < initsize; i++ { + s.Add(uint32(r.Int31n(int32(sz)))) + } + b.StartTimer() + for j := 0; j < b.N; j++ { + c9 = uint(0) + i := s.Iterator() + for i.HasNext() { + i.Next() + c9++ + } + } + +} + +// go test -bench BenchmarkIterate -run - +func BenchmarkIterateBitset(b *testing.B) { + b.StopTimer() + r := rand.New(rand.NewSource(0)) + s := bitset.New(0) + sz := 150000 + initsize := 65000 + for i := 0; i < initsize; i++ { + s.Set(uint(r.Int31n(int32(sz)))) + } + b.StartTimer() + for j := 0; j < b.N; j++ { + c9 = uint(0) + for i, e := s.NextSet(0); e; i, e = s.NextSet(i + 1) { + c9++ + } + } +} + +// go test -bench BenchmarkSparseContains -run - +func BenchmarkSparseContains(b *testing.B) { + b.StopTimer() + r := rand.New(rand.NewSource(0)) + s := NewBitmap() + sz := 10000000 + initsize := 65000 + for i := 0; i < initsize; i++ { + s.Add(uint32(r.Int31n(int32(sz)))) + } + var a [1024]uint32 + for i := 0; i < 1024; i++ { + a[i] = uint32(r.Int31n(int32(sz))) + } + b.StartTimer() + for j := 0; j < b.N; j++ { + c9 = uint(0) + for i := 0; i < 1024; i++ { + if s.Contains(a[i]) { + c9++ + } + + } + } +} + +// go test -bench BenchmarkSparseIterate -run - +func BenchmarkSparseIterateBitset(b *testing.B) { + b.StopTimer() + r := rand.New(rand.NewSource(0)) + s := bitset.New(0) + sz := 100000000 + initsize := 65000 + for i := 0; i < initsize; i++ { + s.Set(uint(r.Int31n(int32(sz)))) + } + b.StartTimer() + for j := 0; j < b.N; j++ { + c9 = uint(0) + for i, e := s.NextSet(0); e; i, e = s.NextSet(i + 1) { + c9++ + } + } +} + +func BenchmarkSerializationSparse(b *testing.B) { + b.StopTimer() + r := rand.New(rand.NewSource(0)) + s := NewBitmap() + sz := 100000000 + initsize := 65000 + for i := 0; i < initsize; i++ { + s.Add(uint32(r.Int31n(int32(sz)))) + } + buf := make([]byte, 0, s.GetSerializedSizeInBytes()) + b.StartTimer() + + for j := 0; j < b.N; j++ { + w := bytes.NewBuffer(buf[:0]) + s.WriteTo(w) + } +} + +func BenchmarkSerializationMid(b *testing.B) { + b.StopTimer() + r := rand.New(rand.NewSource(0)) + s := NewBitmap() + sz := 10000000 + initsize := 65000 + for i := 0; i < initsize; i++ { + s.Add(uint32(r.Int31n(int32(sz)))) + } + buf := make([]byte, 0, s.GetSerializedSizeInBytes()) + b.StartTimer() + + for j := 0; j < b.N; j++ { + w := bytes.NewBuffer(buf[:0]) + s.WriteTo(w) + } +} + +func BenchmarkSerializationDense(b *testing.B) { + b.StopTimer() + r := rand.New(rand.NewSource(0)) + s := NewBitmap() + sz := 150000 + initsize := 65000 + for i := 0; i < initsize; i++ { + s.Add(uint32(r.Int31n(int32(sz)))) + } + buf := make([]byte, 0, s.GetSerializedSizeInBytes()) + b.StartTimer() + + for j := 0; j < b.N; j++ { + w := bytes.NewBuffer(buf[:0]) + s.WriteTo(w) + } +} + +func BenchmarkEqualsSparse(b *testing.B) { + b.StopTimer() + r := rand.New(rand.NewSource(0)) + s := NewBitmap() + t := NewBitmap() + sz := 100000000 + initsize := 65000 + for i := 0; i < initsize; i++ { + n := uint32(r.Int31n(int32(sz))) + s.Add(n) + t.Add(n) + } + b.StartTimer() + + for j := 0; j < b.N; j++ { + s.Equals(t) + } +} + +func BenchmarkEqualsClone(b *testing.B) { + b.StopTimer() + r := rand.New(rand.NewSource(0)) + s := NewBitmap() + sz := 100000000 + initsize := 65000 + for i := 0; i < initsize; i++ { + s.Add(uint32(r.Int31n(int32(sz)))) + } + t := s.Clone() + b.StartTimer() + + for j := 0; j < b.N; j++ { + s.Equals(t) + } +} + +func BenchmarkSequentialAdd(b *testing.B) { + for j := 0; j < b.N; j++ { + s := NewBitmap() + for i := 0; i < 10000000; i += 16 { + s.Add(uint32(i)) + } + } +} + +func BenchmarkXor(b *testing.B) { + b.StopTimer() + r := rand.New(rand.NewSource(0)) + s := NewBitmap() + sz := 100000000 + initsize := 65000 + for i := 0; i < initsize; i++ { + n := uint32(r.Int31n(int32(sz))) + s.Add(n) + } + x2 := NewBitmap() + for i := 0; i < initsize; i++ { + n := uint32(r.Int31n(int32(sz))) + x2.Add(n) + } + b.StartTimer() + + for j := 0; j < b.N; j++ { + s.Clone().Xor(x2) + } +} + +func BenchmarkXorLopsided(b *testing.B) { + b.StopTimer() + r := rand.New(rand.NewSource(0)) + s := NewBitmap() + sz := 100000000 + initsize := 65000 + for i := 0; i < initsize; i++ { + n := uint32(r.Int31n(int32(sz))) + s.Add(n) + } + x2 := NewBitmap() + for i := 0; i < 32; i++ { + n := uint32(r.Int31n(int32(sz))) + x2.Add(n) + } + b.StartTimer() + + for j := 0; j < b.N; j++ { + s.Clone().Xor(x2) + } +} diff --git a/vendor/github.com/RoaringBitmap/roaring/bitmapcontainer.go b/vendor/github.com/RoaringBitmap/roaring/bitmapcontainer.go new file mode 100644 index 0000000..1bcb030 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/bitmapcontainer.go @@ -0,0 +1,925 @@ +package roaring + +import ( + "fmt" + "unsafe" +) + +//go:generate msgp -unexported + +type bitmapContainer struct { + cardinality int + bitmap []uint64 +} + +func (bc bitmapContainer) String() string { + var s string + for it := bc.getShortIterator(); it.hasNext(); { + s += fmt.Sprintf("%v, ", it.next()) + } + return s +} + +func newBitmapContainer() *bitmapContainer { + p := new(bitmapContainer) + size := (1 << 16) / 64 + p.bitmap = make([]uint64, size, size) + return p +} + +func newBitmapContainerwithRange(firstOfRun, lastOfRun int) *bitmapContainer { + bc := newBitmapContainer() + bc.cardinality = lastOfRun - firstOfRun + 1 + if bc.cardinality == maxCapacity { + fill(bc.bitmap, uint64(0xffffffffffffffff)) + } else { + firstWord := firstOfRun / 64 + lastWord := lastOfRun / 64 + zeroPrefixLength := uint64(firstOfRun & 63) + zeroSuffixLength := uint64(63 - (lastOfRun & 63)) + + fillRange(bc.bitmap, firstWord, lastWord+1, uint64(0xffffffffffffffff)) + bc.bitmap[firstWord] ^= ((uint64(1) << zeroPrefixLength) - 1) + blockOfOnes := (uint64(1) << zeroSuffixLength) - 1 + maskOnLeft := blockOfOnes << (uint64(64) - zeroSuffixLength) + bc.bitmap[lastWord] ^= maskOnLeft + } + return bc +} + +func (bc *bitmapContainer) minimum() uint16 { + for i := 0; i < len(bc.bitmap); i++ { + w := bc.bitmap[i] + if w != 0 { + r := countTrailingZeros(w) + return uint16(r + i*64) + } + } + return MaxUint16 +} + +// i should be non-zero +func clz(i uint64) int { + n := 1 + x := uint32(i >> 32) + if x == 0 { + n += 32 + x = uint32(i) + } + if x>>16 == 0 { + n += 16 + x = x << 16 + } + if x>>24 == 0 { + n += 8 + x = x << 8 + } + if x>>28 == 0 { + n += 4 + x = x << 4 + } + if x>>30 == 0 { + n += 2 + x = x << 2 + } + return n - int(x>>31) +} + +func (bc *bitmapContainer) maximum() uint16 { + for i := len(bc.bitmap); i > 0; i-- { + w := bc.bitmap[i-1] + if w != 0 { + r := clz(w) + return uint16((i-1)*64 + 63 - r) + } + } + return uint16(0) +} + +type bitmapContainerShortIterator struct { + ptr *bitmapContainer + i int +} + +func (bcsi *bitmapContainerShortIterator) next() uint16 { + j := bcsi.i + bcsi.i = bcsi.ptr.NextSetBit(bcsi.i + 1) + return uint16(j) +} +func (bcsi *bitmapContainerShortIterator) hasNext() bool { + return bcsi.i >= 0 +} +func newBitmapContainerShortIterator(a *bitmapContainer) *bitmapContainerShortIterator { + return &bitmapContainerShortIterator{a, a.NextSetBit(0)} +} +func (bc *bitmapContainer) getShortIterator() shortIterable { + return newBitmapContainerShortIterator(bc) +} + +func (bc *bitmapContainer) getSizeInBytes() int { + return len(bc.bitmap) * 8 // + bcBaseBytes +} + +func (bc *bitmapContainer) serializedSizeInBytes() int { + return bc.Msgsize() + //return len(bc.bitmap) * 8 // + bcBaseBytes +} + +const bcBaseBytes = int(unsafe.Sizeof(bitmapContainer{})) + +// bitmapContainer doesn't depend on card, always fully allocated +func bitmapContainerSizeInBytes() int { + return bcBaseBytes + (1<<16)/8 +} + +func bitmapEquals(a, b []uint64) bool { + if len(a) != len(b) { + //p("bitmaps differ on length. len(a)=%v; len(b)=%v", len(a), len(b)) + return false + } + for i, v := range a { + if v != b[i] { + //p("bitmaps differ on element i=%v", i) + return false + } + } + //p("bitmapEquals returning true") + return true +} + +func (bc *bitmapContainer) fillLeastSignificant16bits(x []uint32, i int, mask uint32) { + // TODO: should be written as optimized assembly + pos := i + base := mask + for k := 0; k < len(bc.bitmap); k++ { + bitset := bc.bitmap[k] + for bitset != 0 { + t := bitset & -bitset + x[pos] = base + uint32(popcount(t-1)) + pos++ + bitset ^= t + } + base += 64 + } +} + +func (bc *bitmapContainer) equals(o container) bool { + srb, ok := o.(*bitmapContainer) + if ok { + //p("bitmapContainers.equals: both are bitmapContainers") + if srb.cardinality != bc.cardinality { + //p("bitmapContainers.equals: card differs: %v vs %v", srb.cardinality, bc.cardinality) + return false + } + return bitmapEquals(bc.bitmap, srb.bitmap) + } + + // use generic comparison + if bc.getCardinality() != o.getCardinality() { + return false + } + ait := o.getShortIterator() + bit := bc.getShortIterator() + + for ait.hasNext() { + if bit.next() != ait.next() { + return false + } + } + return true +} + +func (bc *bitmapContainer) iaddReturnMinimized(i uint16) container { + bc.iadd(i) + if bc.isFull() { + return newRunContainer16Range(0, MaxUint16) + } + return bc +} + +func (bc *bitmapContainer) iadd(i uint16) bool { + x := int(i) + previous := bc.bitmap[x/64] + mask := uint64(1) << (uint(x) % 64) + newb := previous | mask + bc.bitmap[x/64] = newb + bc.cardinality += int((previous ^ newb) >> (uint(x) % 64)) + return newb != previous +} + +func (bc *bitmapContainer) iremoveReturnMinimized(i uint16) container { + if bc.iremove(i) { + if bc.cardinality == arrayDefaultMaxSize { + return bc.toArrayContainer() + } + } + return bc +} + +// iremove returns true if i was found. +func (bc *bitmapContainer) iremove(i uint16) bool { + /* branchless code + w := bc.bitmap[i>>6] + mask := uint64(1) << (i % 64) + neww := w &^ mask + bc.cardinality -= int((w ^ neww) >> (i % 64)) + bc.bitmap[i>>6] = neww */ + if bc.contains(i) { + bc.cardinality-- + bc.bitmap[i/64] &^= (uint64(1) << (i % 64)) + return true + } + return false +} + +func (bc *bitmapContainer) isFull() bool { + return bc.cardinality == int(MaxUint16)+1 +} + +func (bc *bitmapContainer) getCardinality() int { + return bc.cardinality +} + +func (bc *bitmapContainer) clone() container { + ptr := bitmapContainer{bc.cardinality, make([]uint64, len(bc.bitmap))} + copy(ptr.bitmap, bc.bitmap[:]) + return &ptr +} + +// add all values in range [firstOfRange,lastOfRange) +func (bc *bitmapContainer) iaddRange(firstOfRange, lastOfRange int) container { + bc.cardinality += setBitmapRangeAndCardinalityChange(bc.bitmap, firstOfRange, lastOfRange) + return bc +} + +// remove all values in range [firstOfRange,lastOfRange) +func (bc *bitmapContainer) iremoveRange(firstOfRange, lastOfRange int) container { + bc.cardinality += resetBitmapRangeAndCardinalityChange(bc.bitmap, firstOfRange, lastOfRange) + if bc.getCardinality() <= arrayDefaultMaxSize { + return bc.toArrayContainer() + } + return bc +} + +// flip all values in range [firstOfRange,endx) +func (bc *bitmapContainer) inot(firstOfRange, endx int) container { + p("bc.inot() called with [%v, %v)", firstOfRange, endx) + if endx-firstOfRange == maxCapacity { + //p("endx-firstOfRange == maxCapacity") + flipBitmapRange(bc.bitmap, firstOfRange, endx) + bc.cardinality = maxCapacity - bc.cardinality + //p("bc.cardinality is now %v", bc.cardinality) + } else if endx-firstOfRange > maxCapacity/2 { + //p("endx-firstOfRange > maxCapacity/2") + flipBitmapRange(bc.bitmap, firstOfRange, endx) + bc.computeCardinality() + } else { + bc.cardinality += flipBitmapRangeAndCardinalityChange(bc.bitmap, firstOfRange, endx) + } + if bc.getCardinality() <= arrayDefaultMaxSize { + return bc.toArrayContainer() + } + return bc +} + +// flip all values in range [firstOfRange,endx) +func (bc *bitmapContainer) not(firstOfRange, endx int) container { + answer := bc.clone() + return answer.inot(firstOfRange, endx) +} + +func (bc *bitmapContainer) or(a container) container { + switch x := a.(type) { + case *arrayContainer: + return bc.orArray(x) + case *bitmapContainer: + return bc.orBitmap(x) + case *runContainer16: + if x.isFull() { + return x.clone() + } + return x.orBitmapContainer(bc) + } + panic("unsupported container type") +} + +func (bc *bitmapContainer) orCardinality(a container) int { + switch x := a.(type) { + case *arrayContainer: + return bc.orArrayCardinality(x) + case *bitmapContainer: + return bc.orBitmapCardinality(x) + case *runContainer16: + return x.orBitmapContainerCardinality(bc) + } + panic("unsupported container type") +} + +func (bc *bitmapContainer) ior(a container) container { + switch x := a.(type) { + case *arrayContainer: + return bc.iorArray(x) + case *bitmapContainer: + return bc.iorBitmap(x) + case *runContainer16: + if x.isFull() { + return x.clone() + } + for i := range x.iv { + bc.iaddRange(int(x.iv[i].start), int(x.iv[i].last)+1) + } + if bc.isFull() { + return newRunContainer16Range(0, MaxUint16) + } + //bc.computeCardinality() + return bc + } + panic(fmt.Errorf("unsupported container type %T", a)) +} + +func (bc *bitmapContainer) lazyIOR(a container) container { + switch x := a.(type) { + case *arrayContainer: + return bc.lazyIORArray(x) + case *bitmapContainer: + return bc.lazyIORBitmap(x) + case *runContainer16: + if x.isFull() { + return x.clone() + } + // TODO : implement efficient in-place lazy OR to bitmap + for i := range x.iv { + setBitmapRange(bc.bitmap, int(x.iv[i].start), int(x.iv[i].last)+1) + //bc.iaddRange(int(x.iv[i].start), int(x.iv[i].last)+1) + } + bc.cardinality = invalidCardinality + //bc.computeCardinality() + return bc + } + panic("unsupported container type") +} + +func (bc *bitmapContainer) lazyOR(a container) container { + switch x := a.(type) { + case *arrayContainer: + return bc.lazyORArray(x) + case *bitmapContainer: + return bc.lazyORBitmap(x) + case *runContainer16: + if x.isFull() { + return x.clone() + } + // TODO: implement lazy OR + return x.orBitmapContainer(bc) + + } + panic("unsupported container type") +} + +func (bc *bitmapContainer) orArray(value2 *arrayContainer) container { + answer := bc.clone().(*bitmapContainer) + c := value2.getCardinality() + for k := 0; k < c; k++ { + v := value2.content[k] + i := uint(v) >> 6 + bef := answer.bitmap[i] + aft := bef | (uint64(1) << (v % 64)) + answer.bitmap[i] = aft + answer.cardinality += int((bef - aft) >> 63) + } + return answer +} + +func (bc *bitmapContainer) orArrayCardinality(value2 *arrayContainer) int { + answer := 0 + c := value2.getCardinality() + for k := 0; k < c; k++ { + // branchless: + v := value2.content[k] + i := uint(v) >> 6 + bef := bc.bitmap[i] + aft := bef | (uint64(1) << (v % 64)) + answer += int((bef - aft) >> 63) + } + return answer +} + +func (bc *bitmapContainer) orBitmap(value2 *bitmapContainer) container { + answer := newBitmapContainer() + for k := 0; k < len(answer.bitmap); k++ { + answer.bitmap[k] = bc.bitmap[k] | value2.bitmap[k] + } + answer.computeCardinality() + if answer.isFull() { + return newRunContainer16Range(0, MaxUint16) + } + return answer +} + +func (bc *bitmapContainer) orBitmapCardinality(value2 *bitmapContainer) int { + return int(popcntOrSlice(bc.bitmap, value2.bitmap)) +} + +func (bc *bitmapContainer) andBitmapCardinality(value2 *bitmapContainer) int { + return int(popcntAndSlice(bc.bitmap, value2.bitmap)) +} + +func (bc *bitmapContainer) computeCardinality() { + bc.cardinality = int(popcntSlice(bc.bitmap)) +} + +func (bc *bitmapContainer) iorArray(ac *arrayContainer) container { + for k := range ac.content { + vc := ac.content[k] + i := uint(vc) >> 6 + bef := bc.bitmap[i] + aft := bef | (uint64(1) << (vc % 64)) + bc.bitmap[i] = aft + bc.cardinality += int((bef - aft) >> 63) + } + if bc.isFull() { + return newRunContainer16Range(0, MaxUint16) + } + return bc +} + +func (bc *bitmapContainer) iorBitmap(value2 *bitmapContainer) container { + answer := bc + answer.cardinality = 0 + for k := 0; k < len(answer.bitmap); k++ { + answer.bitmap[k] = bc.bitmap[k] | value2.bitmap[k] + } + answer.computeCardinality() + if bc.isFull() { + return newRunContainer16Range(0, MaxUint16) + } + return answer +} + +func (bc *bitmapContainer) lazyIORArray(value2 *arrayContainer) container { + answer := bc + c := value2.getCardinality() + for k := 0; k < c; k++ { + vc := value2.content[k] + i := uint(vc) >> 6 + answer.bitmap[i] = answer.bitmap[i] | (uint64(1) << (vc % 64)) + } + answer.cardinality = invalidCardinality + return answer +} + +func (bc *bitmapContainer) lazyORArray(value2 *arrayContainer) container { + answer := bc.clone().(*bitmapContainer) + return answer.lazyIORArray(value2) +} + +func (bc *bitmapContainer) lazyIORBitmap(value2 *bitmapContainer) container { + answer := bc + for k := 0; k < len(answer.bitmap); k++ { + answer.bitmap[k] = bc.bitmap[k] | value2.bitmap[k] + } + bc.cardinality = invalidCardinality + return answer +} + +func (bc *bitmapContainer) lazyORBitmap(value2 *bitmapContainer) container { + answer := bc.clone().(*bitmapContainer) + return answer.lazyIORBitmap(value2) +} + +func (bc *bitmapContainer) xor(a container) container { + switch x := a.(type) { + case *arrayContainer: + return bc.xorArray(x) + case *bitmapContainer: + return bc.xorBitmap(x) + case *runContainer16: + return x.xorBitmap(bc) + } + panic("unsupported container type") +} + +func (bc *bitmapContainer) xorArray(value2 *arrayContainer) container { + answer := bc.clone().(*bitmapContainer) + c := value2.getCardinality() + for k := 0; k < c; k++ { + vc := value2.content[k] + index := uint(vc) >> 6 + abi := answer.bitmap[index] + mask := uint64(1) << (vc % 64) + answer.cardinality += 1 - 2*int((abi&mask)>>(vc%64)) + answer.bitmap[index] = abi ^ mask + } + if answer.cardinality <= arrayDefaultMaxSize { + return answer.toArrayContainer() + } + return answer +} + +func (bc *bitmapContainer) rank(x uint16) int { + // TODO: rewrite in assembly + leftover := (uint(x) + 1) & 63 + if leftover == 0 { + return int(popcntSlice(bc.bitmap[:(uint(x)+1)/64])) + } + return int(popcntSlice(bc.bitmap[:(uint(x)+1)/64]) + popcount(bc.bitmap[(uint(x)+1)/64]<<(64-leftover))) +} + +func (bc *bitmapContainer) selectInt(x uint16) int { + remaining := x + for k := 0; k < len(bc.bitmap); k++ { + w := popcount(bc.bitmap[k]) + if uint16(w) > remaining { + return k*64 + selectBitPosition(bc.bitmap[k], int(remaining)) + } + remaining -= uint16(w) + } + return -1 +} + +func (bc *bitmapContainer) xorBitmap(value2 *bitmapContainer) container { + newCardinality := int(popcntXorSlice(bc.bitmap, value2.bitmap)) + + if newCardinality > arrayDefaultMaxSize { + answer := newBitmapContainer() + for k := 0; k < len(answer.bitmap); k++ { + answer.bitmap[k] = bc.bitmap[k] ^ value2.bitmap[k] + } + answer.cardinality = newCardinality + if answer.isFull() { + return newRunContainer16Range(0, MaxUint16) + } + return answer + } + ac := newArrayContainerSize(newCardinality) + fillArrayXOR(ac.content, bc.bitmap, value2.bitmap) + ac.content = ac.content[:newCardinality] + return ac +} + +func (bc *bitmapContainer) and(a container) container { + switch x := a.(type) { + case *arrayContainer: + return bc.andArray(x) + case *bitmapContainer: + return bc.andBitmap(x) + case *runContainer16: + if x.isFull() { + return bc.clone() + } + return x.andBitmapContainer(bc) + } + panic("unsupported container type") +} + +func (bc *bitmapContainer) andCardinality(a container) int { + switch x := a.(type) { + case *arrayContainer: + return bc.andArrayCardinality(x) + case *bitmapContainer: + return bc.andBitmapCardinality(x) + case *runContainer16: + return x.andBitmapContainerCardinality(bc) + } + panic("unsupported container type") +} + +func (bc *bitmapContainer) intersects(a container) bool { + switch x := a.(type) { + case *arrayContainer: + return bc.intersectsArray(x) + case *bitmapContainer: + return bc.intersectsBitmap(x) + case *runContainer16: + return x.intersects(bc) + + } + panic("unsupported container type") +} + +func (bc *bitmapContainer) iand(a container) container { + switch x := a.(type) { + case *arrayContainer: + return bc.iandArray(x) + case *bitmapContainer: + return bc.iandBitmap(x) + case *runContainer16: + if x.isFull() { + return bc.clone() + } + return bc.iandRun16(x) + } + panic("unsupported container type") +} + +func (bc *bitmapContainer) iandRun16(rc *runContainer16) container { + rcb := newBitmapContainerFromRun(rc) + return bc.iandBitmap(rcb) +} + +func (bc *bitmapContainer) iandArray(ac *arrayContainer) container { + acb := ac.toBitmapContainer() + return bc.iandBitmap(acb) +} + +func (bc *bitmapContainer) andArray(value2 *arrayContainer) *arrayContainer { + answer := newArrayContainerCapacity(len(value2.content)) + answer.content = answer.content[:cap(answer.content)] + c := value2.getCardinality() + pos := 0 + for k := 0; k < c; k++ { + v := value2.content[k] + answer.content[pos] = v + pos += int(bc.bitValue(v)) + } + answer.content = answer.content[:pos] + return answer +} + +func (bc *bitmapContainer) andArrayCardinality(value2 *arrayContainer) int { + c := value2.getCardinality() + pos := 0 + for k := 0; k < c; k++ { + v := value2.content[k] + pos += int(bc.bitValue(v)) + } + return pos +} + +func (bc *bitmapContainer) getCardinalityInRange(start, end uint) int { + if start >= end { + return 0 + } + firstword := start / 64 + endword := (end - 1) / 64 + const allones = ^uint64(0) + if firstword == endword { + return int(popcount(bc.bitmap[firstword] & ((allones << (start % 64)) & (allones >> (64 - (end % 64)))))) + } + answer := popcount(bc.bitmap[firstword] & (allones << (start % 64))) + answer += popcntSlice(bc.bitmap[firstword+1 : endword]) + answer += popcount(bc.bitmap[endword] & (allones >> (64 - (end % 64)))) + return int(answer) +} + +func (bc *bitmapContainer) andBitmap(value2 *bitmapContainer) container { + newcardinality := int(popcntAndSlice(bc.bitmap, value2.bitmap)) + if newcardinality > arrayDefaultMaxSize { + answer := newBitmapContainer() + for k := 0; k < len(answer.bitmap); k++ { + answer.bitmap[k] = bc.bitmap[k] & value2.bitmap[k] + } + answer.cardinality = newcardinality + return answer + } + ac := newArrayContainerSize(newcardinality) + fillArrayAND(ac.content, bc.bitmap, value2.bitmap) + ac.content = ac.content[:newcardinality] //not sure why i need this + return ac + +} + +func (bc *bitmapContainer) intersectsArray(value2 *arrayContainer) bool { + c := value2.getCardinality() + for k := 0; k < c; k++ { + v := value2.content[k] + if bc.contains(v) { + return true + } + } + return false +} + +func (bc *bitmapContainer) intersectsBitmap(value2 *bitmapContainer) bool { + for k := 0; k < len(bc.bitmap); k++ { + if (bc.bitmap[k] & value2.bitmap[k]) != 0 { + return true + } + } + return false + +} + +func (bc *bitmapContainer) iandBitmap(value2 *bitmapContainer) container { + newcardinality := int(popcntAndSlice(bc.bitmap, value2.bitmap)) + for k := 0; k < len(bc.bitmap); k++ { + bc.bitmap[k] = bc.bitmap[k] & value2.bitmap[k] + } + bc.cardinality = newcardinality + + if newcardinality <= arrayDefaultMaxSize { + return newArrayContainerFromBitmap(bc) + } + return bc +} + +func (bc *bitmapContainer) andNot(a container) container { + switch x := a.(type) { + case *arrayContainer: + return bc.andNotArray(x) + case *bitmapContainer: + return bc.andNotBitmap(x) + case *runContainer16: + return bc.andNotRun16(x) + } + panic("unsupported container type") +} + +func (bc *bitmapContainer) andNotRun16(rc *runContainer16) container { + rcb := rc.toBitmapContainer() + return bc.andNotBitmap(rcb) +} + +func (bc *bitmapContainer) iandNot(a container) container { + //p("bitmapContainer.iandNot() starting") + + switch x := a.(type) { + case *arrayContainer: + return bc.iandNotArray(x) + case *bitmapContainer: + return bc.iandNotBitmapSurely(x) + case *runContainer16: + return bc.iandNotRun16(x) + } + panic("unsupported container type") +} + +func (bc *bitmapContainer) iandNotArray(ac *arrayContainer) container { + acb := ac.toBitmapContainer() + return bc.iandNotBitmapSurely(acb) +} + +func (bc *bitmapContainer) iandNotRun16(rc *runContainer16) container { + rcb := rc.toBitmapContainer() + return bc.iandNotBitmapSurely(rcb) +} + +func (bc *bitmapContainer) andNotArray(value2 *arrayContainer) container { + answer := bc.clone().(*bitmapContainer) + c := value2.getCardinality() + for k := 0; k < c; k++ { + vc := value2.content[k] + i := uint(vc) >> 6 + oldv := answer.bitmap[i] + newv := oldv &^ (uint64(1) << (vc % 64)) + answer.bitmap[i] = newv + answer.cardinality -= int((oldv ^ newv) >> (vc % 64)) + } + if answer.cardinality <= arrayDefaultMaxSize { + return answer.toArrayContainer() + } + return answer +} + +func (bc *bitmapContainer) andNotBitmap(value2 *bitmapContainer) container { + newCardinality := int(popcntMaskSlice(bc.bitmap, value2.bitmap)) + if newCardinality > arrayDefaultMaxSize { + answer := newBitmapContainer() + for k := 0; k < len(answer.bitmap); k++ { + answer.bitmap[k] = bc.bitmap[k] &^ value2.bitmap[k] + } + answer.cardinality = newCardinality + return answer + } + ac := newArrayContainerSize(newCardinality) + fillArrayANDNOT(ac.content, bc.bitmap, value2.bitmap) + return ac +} + +func (bc *bitmapContainer) iandNotBitmapSurely(value2 *bitmapContainer) *bitmapContainer { + newCardinality := int(popcntMaskSlice(bc.bitmap, value2.bitmap)) + for k := 0; k < len(bc.bitmap); k++ { + bc.bitmap[k] = bc.bitmap[k] &^ value2.bitmap[k] + } + bc.cardinality = newCardinality + return bc +} + +func (bc *bitmapContainer) contains(i uint16) bool { //testbit + x := uint(i) + w := bc.bitmap[x>>6] + mask := uint64(1) << (x & 63) + return (w & mask) != 0 +} + +func (bc *bitmapContainer) bitValue(i uint16) uint64 { + x := uint(i) + w := bc.bitmap[x>>6] + return (w >> (x & 63)) & 1 +} + +func (bc *bitmapContainer) loadData(arrayContainer *arrayContainer) { + bc.cardinality = arrayContainer.getCardinality() + c := arrayContainer.getCardinality() + for k := 0; k < c; k++ { + x := arrayContainer.content[k] + i := int(x) / 64 + bc.bitmap[i] |= (uint64(1) << uint(x%64)) + } +} + +func (bc *bitmapContainer) toArrayContainer() *arrayContainer { + ac := &arrayContainer{} + ac.loadData(bc) + return ac +} + +func (bc *bitmapContainer) fillArray(container []uint16) { + //TODO: rewrite in assembly + pos := 0 + base := 0 + for k := 0; k < len(bc.bitmap); k++ { + bitset := bc.bitmap[k] + for bitset != 0 { + t := bitset & -bitset + container[pos] = uint16((base + int(popcount(t-1)))) + pos = pos + 1 + bitset ^= t + } + base += 64 + } +} + +func (bc *bitmapContainer) NextSetBit(i int) int { + x := i / 64 + if x >= len(bc.bitmap) { + return -1 + } + w := bc.bitmap[x] + w = w >> uint(i%64) + if w != 0 { + return i + countTrailingZeros(w) + } + x++ + for ; x < len(bc.bitmap); x++ { + if bc.bitmap[x] != 0 { + return (x * 64) + countTrailingZeros(bc.bitmap[x]) + } + } + return -1 +} + +// reference the java implementation +// https://github.com/RoaringBitmap/RoaringBitmap/blob/master/src/main/java/org/roaringbitmap/BitmapContainer.java#L875-L892 +// +func (bc *bitmapContainer) numberOfRuns() int { + if bc.cardinality == 0 { + return 0 + } + + var numRuns uint64 + nextWord := bc.bitmap[0] + + for i := 0; i < len(bc.bitmap)-1; i++ { + word := nextWord + nextWord = bc.bitmap[i+1] + numRuns += popcount((^word)&(word<<1)) + ((word >> 63) &^ nextWord) + } + + word := nextWord + numRuns += popcount((^word) & (word << 1)) + if (word & 0x8000000000000000) != 0 { + numRuns++ + } + + return int(numRuns) +} + +// convert to run or array *if needed* +func (bc *bitmapContainer) toEfficientContainer() container { + + numRuns := bc.numberOfRuns() + + sizeAsRunContainer := runContainer16SerializedSizeInBytes(numRuns) + sizeAsBitmapContainer := bitmapContainerSizeInBytes() + card := bc.getCardinality() + sizeAsArrayContainer := arrayContainerSizeInBytes(card) + + if sizeAsRunContainer <= min(sizeAsBitmapContainer, sizeAsArrayContainer) { + return newRunContainer16FromBitmapContainer(bc) + } + if card <= arrayDefaultMaxSize { + return bc.toArrayContainer() + } + return bc +} + +func newBitmapContainerFromRun(rc *runContainer16) *bitmapContainer { + + if len(rc.iv) == 1 { + return newBitmapContainerwithRange(int(rc.iv[0].start), int(rc.iv[0].last)) + } + + bc := newBitmapContainer() + for i := range rc.iv { + setBitmapRange(bc.bitmap, int(rc.iv[i].start), int(rc.iv[i].last)+1) + bc.cardinality += int(rc.iv[i].last) + 1 - int(rc.iv[i].start) + //bc.iaddRange(int(rc.iv[i].start), int(rc.iv[i].last)+1) + } + //bc.computeCardinality() + return bc +} + +func (bc *bitmapContainer) containerType() contype { + return bitmapContype +} diff --git a/vendor/github.com/RoaringBitmap/roaring/bitmapcontainer_gen.go b/vendor/github.com/RoaringBitmap/roaring/bitmapcontainer_gen.go new file mode 100644 index 0000000..f6c053e --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/bitmapcontainer_gen.go @@ -0,0 +1,415 @@ +package roaring + +// NOTE: THIS FILE WAS PRODUCED BY THE +// MSGP CODE GENERATION TOOL (github.com/tinylib/msgp) +// DO NOT EDIT + +import "github.com/tinylib/msgp/msgp" + +// DecodeMsg implements msgp.Decodable +func (z *bitmapContainer) DecodeMsg(dc *msgp.Reader) (err error) { + var field []byte + _ = field + var zbzg uint32 + zbzg, err = dc.ReadMapHeader() + if err != nil { + return + } + for zbzg > 0 { + zbzg-- + field, err = dc.ReadMapKeyPtr() + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "cardinality": + z.cardinality, err = dc.ReadInt() + if err != nil { + return + } + case "bitmap": + var zbai uint32 + zbai, err = dc.ReadArrayHeader() + if err != nil { + return + } + if cap(z.bitmap) >= int(zbai) { + z.bitmap = (z.bitmap)[:zbai] + } else { + z.bitmap = make([]uint64, zbai) + } + for zxvk := range z.bitmap { + z.bitmap[zxvk], err = dc.ReadUint64() + if err != nil { + return + } + } + default: + err = dc.Skip() + if err != nil { + return + } + } + } + return +} + +// EncodeMsg implements msgp.Encodable +func (z *bitmapContainer) EncodeMsg(en *msgp.Writer) (err error) { + // map header, size 2 + // write "cardinality" + err = en.Append(0x82, 0xab, 0x63, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79) + if err != nil { + return err + } + err = en.WriteInt(z.cardinality) + if err != nil { + return + } + // write "bitmap" + err = en.Append(0xa6, 0x62, 0x69, 0x74, 0x6d, 0x61, 0x70) + if err != nil { + return err + } + err = en.WriteArrayHeader(uint32(len(z.bitmap))) + if err != nil { + return + } + for zxvk := range z.bitmap { + err = en.WriteUint64(z.bitmap[zxvk]) + if err != nil { + return + } + } + return +} + +// MarshalMsg implements msgp.Marshaler +func (z *bitmapContainer) MarshalMsg(b []byte) (o []byte, err error) { + o = msgp.Require(b, z.Msgsize()) + // map header, size 2 + // string "cardinality" + o = append(o, 0x82, 0xab, 0x63, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79) + o = msgp.AppendInt(o, z.cardinality) + // string "bitmap" + o = append(o, 0xa6, 0x62, 0x69, 0x74, 0x6d, 0x61, 0x70) + o = msgp.AppendArrayHeader(o, uint32(len(z.bitmap))) + for zxvk := range z.bitmap { + o = msgp.AppendUint64(o, z.bitmap[zxvk]) + } + return +} + +// UnmarshalMsg implements msgp.Unmarshaler +func (z *bitmapContainer) UnmarshalMsg(bts []byte) (o []byte, err error) { + var field []byte + _ = field + var zcmr uint32 + zcmr, bts, err = msgp.ReadMapHeaderBytes(bts) + if err != nil { + return + } + for zcmr > 0 { + zcmr-- + field, bts, err = msgp.ReadMapKeyZC(bts) + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "cardinality": + z.cardinality, bts, err = msgp.ReadIntBytes(bts) + if err != nil { + return + } + case "bitmap": + var zajw uint32 + zajw, bts, err = msgp.ReadArrayHeaderBytes(bts) + if err != nil { + return + } + if cap(z.bitmap) >= int(zajw) { + z.bitmap = (z.bitmap)[:zajw] + } else { + z.bitmap = make([]uint64, zajw) + } + for zxvk := range z.bitmap { + z.bitmap[zxvk], bts, err = msgp.ReadUint64Bytes(bts) + if err != nil { + return + } + } + default: + bts, err = msgp.Skip(bts) + if err != nil { + return + } + } + } + o = bts + return +} + +// Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message +func (z *bitmapContainer) Msgsize() (s int) { + s = 1 + 12 + msgp.IntSize + 7 + msgp.ArrayHeaderSize + (len(z.bitmap) * (msgp.Uint64Size)) + return +} + +// DecodeMsg implements msgp.Decodable +func (z *bitmapContainerShortIterator) DecodeMsg(dc *msgp.Reader) (err error) { + var field []byte + _ = field + var zhct uint32 + zhct, err = dc.ReadMapHeader() + if err != nil { + return + } + for zhct > 0 { + zhct-- + field, err = dc.ReadMapKeyPtr() + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "ptr": + if dc.IsNil() { + err = dc.ReadNil() + if err != nil { + return + } + z.ptr = nil + } else { + if z.ptr == nil { + z.ptr = new(bitmapContainer) + } + var zcua uint32 + zcua, err = dc.ReadMapHeader() + if err != nil { + return + } + for zcua > 0 { + zcua-- + field, err = dc.ReadMapKeyPtr() + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "cardinality": + z.ptr.cardinality, err = dc.ReadInt() + if err != nil { + return + } + case "bitmap": + var zxhx uint32 + zxhx, err = dc.ReadArrayHeader() + if err != nil { + return + } + if cap(z.ptr.bitmap) >= int(zxhx) { + z.ptr.bitmap = (z.ptr.bitmap)[:zxhx] + } else { + z.ptr.bitmap = make([]uint64, zxhx) + } + for zwht := range z.ptr.bitmap { + z.ptr.bitmap[zwht], err = dc.ReadUint64() + if err != nil { + return + } + } + default: + err = dc.Skip() + if err != nil { + return + } + } + } + } + case "i": + z.i, err = dc.ReadInt() + if err != nil { + return + } + default: + err = dc.Skip() + if err != nil { + return + } + } + } + return +} + +// EncodeMsg implements msgp.Encodable +func (z *bitmapContainerShortIterator) EncodeMsg(en *msgp.Writer) (err error) { + // map header, size 2 + // write "ptr" + err = en.Append(0x82, 0xa3, 0x70, 0x74, 0x72) + if err != nil { + return err + } + if z.ptr == nil { + err = en.WriteNil() + if err != nil { + return + } + } else { + // map header, size 2 + // write "cardinality" + err = en.Append(0x82, 0xab, 0x63, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79) + if err != nil { + return err + } + err = en.WriteInt(z.ptr.cardinality) + if err != nil { + return + } + // write "bitmap" + err = en.Append(0xa6, 0x62, 0x69, 0x74, 0x6d, 0x61, 0x70) + if err != nil { + return err + } + err = en.WriteArrayHeader(uint32(len(z.ptr.bitmap))) + if err != nil { + return + } + for zwht := range z.ptr.bitmap { + err = en.WriteUint64(z.ptr.bitmap[zwht]) + if err != nil { + return + } + } + } + // write "i" + err = en.Append(0xa1, 0x69) + if err != nil { + return err + } + err = en.WriteInt(z.i) + if err != nil { + return + } + return +} + +// MarshalMsg implements msgp.Marshaler +func (z *bitmapContainerShortIterator) MarshalMsg(b []byte) (o []byte, err error) { + o = msgp.Require(b, z.Msgsize()) + // map header, size 2 + // string "ptr" + o = append(o, 0x82, 0xa3, 0x70, 0x74, 0x72) + if z.ptr == nil { + o = msgp.AppendNil(o) + } else { + // map header, size 2 + // string "cardinality" + o = append(o, 0x82, 0xab, 0x63, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79) + o = msgp.AppendInt(o, z.ptr.cardinality) + // string "bitmap" + o = append(o, 0xa6, 0x62, 0x69, 0x74, 0x6d, 0x61, 0x70) + o = msgp.AppendArrayHeader(o, uint32(len(z.ptr.bitmap))) + for zwht := range z.ptr.bitmap { + o = msgp.AppendUint64(o, z.ptr.bitmap[zwht]) + } + } + // string "i" + o = append(o, 0xa1, 0x69) + o = msgp.AppendInt(o, z.i) + return +} + +// UnmarshalMsg implements msgp.Unmarshaler +func (z *bitmapContainerShortIterator) UnmarshalMsg(bts []byte) (o []byte, err error) { + var field []byte + _ = field + var zlqf uint32 + zlqf, bts, err = msgp.ReadMapHeaderBytes(bts) + if err != nil { + return + } + for zlqf > 0 { + zlqf-- + field, bts, err = msgp.ReadMapKeyZC(bts) + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "ptr": + if msgp.IsNil(bts) { + bts, err = msgp.ReadNilBytes(bts) + if err != nil { + return + } + z.ptr = nil + } else { + if z.ptr == nil { + z.ptr = new(bitmapContainer) + } + var zdaf uint32 + zdaf, bts, err = msgp.ReadMapHeaderBytes(bts) + if err != nil { + return + } + for zdaf > 0 { + zdaf-- + field, bts, err = msgp.ReadMapKeyZC(bts) + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "cardinality": + z.ptr.cardinality, bts, err = msgp.ReadIntBytes(bts) + if err != nil { + return + } + case "bitmap": + var zpks uint32 + zpks, bts, err = msgp.ReadArrayHeaderBytes(bts) + if err != nil { + return + } + if cap(z.ptr.bitmap) >= int(zpks) { + z.ptr.bitmap = (z.ptr.bitmap)[:zpks] + } else { + z.ptr.bitmap = make([]uint64, zpks) + } + for zwht := range z.ptr.bitmap { + z.ptr.bitmap[zwht], bts, err = msgp.ReadUint64Bytes(bts) + if err != nil { + return + } + } + default: + bts, err = msgp.Skip(bts) + if err != nil { + return + } + } + } + } + case "i": + z.i, bts, err = msgp.ReadIntBytes(bts) + if err != nil { + return + } + default: + bts, err = msgp.Skip(bts) + if err != nil { + return + } + } + } + o = bts + return +} + +// Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message +func (z *bitmapContainerShortIterator) Msgsize() (s int) { + s = 1 + 4 + if z.ptr == nil { + s += msgp.NilSize + } else { + s += 1 + 12 + msgp.IntSize + 7 + msgp.ArrayHeaderSize + (len(z.ptr.bitmap) * (msgp.Uint64Size)) + } + s += 2 + msgp.IntSize + return +} diff --git a/vendor/github.com/RoaringBitmap/roaring/bitmapcontainer_gen_test.go b/vendor/github.com/RoaringBitmap/roaring/bitmapcontainer_gen_test.go new file mode 100644 index 0000000..a4f7af4 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/bitmapcontainer_gen_test.go @@ -0,0 +1,238 @@ +package roaring + +// NOTE: THIS FILE WAS PRODUCED BY THE +// MSGP CODE GENERATION TOOL (github.com/tinylib/msgp) +// DO NOT EDIT + +import ( + "bytes" + "testing" + + "github.com/tinylib/msgp/msgp" +) + +func TestMarshalUnmarshalbitmapContainer(t *testing.T) { + v := bitmapContainer{} + bts, err := v.MarshalMsg(nil) + if err != nil { + t.Fatal(err) + } + left, err := v.UnmarshalMsg(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after UnmarshalMsg(): %q", len(left), left) + } + + left, err = msgp.Skip(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after Skip(): %q", len(left), left) + } +} + +func BenchmarkMarshalMsgbitmapContainer(b *testing.B) { + v := bitmapContainer{} + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.MarshalMsg(nil) + } +} + +func BenchmarkAppendMsgbitmapContainer(b *testing.B) { + v := bitmapContainer{} + bts := make([]byte, 0, v.Msgsize()) + bts, _ = v.MarshalMsg(bts[0:0]) + b.SetBytes(int64(len(bts))) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + bts, _ = v.MarshalMsg(bts[0:0]) + } +} + +func BenchmarkUnmarshalbitmapContainer(b *testing.B) { + v := bitmapContainer{} + bts, _ := v.MarshalMsg(nil) + b.ReportAllocs() + b.SetBytes(int64(len(bts))) + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := v.UnmarshalMsg(bts) + if err != nil { + b.Fatal(err) + } + } +} + +func TestEncodeDecodebitmapContainer(t *testing.T) { + v := bitmapContainer{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + + m := v.Msgsize() + if buf.Len() > m { + t.Logf("WARNING: Msgsize() for %v is inaccurate", v) + } + + vn := bitmapContainer{} + err := msgp.Decode(&buf, &vn) + if err != nil { + t.Error(err) + } + + buf.Reset() + msgp.Encode(&buf, &v) + err = msgp.NewReader(&buf).Skip() + if err != nil { + t.Error(err) + } +} + +func BenchmarkEncodebitmapContainer(b *testing.B) { + v := bitmapContainer{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + b.SetBytes(int64(buf.Len())) + en := msgp.NewWriter(msgp.Nowhere) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.EncodeMsg(en) + } + en.Flush() +} + +func BenchmarkDecodebitmapContainer(b *testing.B) { + v := bitmapContainer{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + b.SetBytes(int64(buf.Len())) + rd := msgp.NewEndlessReader(buf.Bytes(), b) + dc := msgp.NewReader(rd) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + err := v.DecodeMsg(dc) + if err != nil { + b.Fatal(err) + } + } +} + +func TestMarshalUnmarshalbitmapContainerShortIterator(t *testing.T) { + v := bitmapContainerShortIterator{} + bts, err := v.MarshalMsg(nil) + if err != nil { + t.Fatal(err) + } + left, err := v.UnmarshalMsg(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after UnmarshalMsg(): %q", len(left), left) + } + + left, err = msgp.Skip(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after Skip(): %q", len(left), left) + } +} + +func BenchmarkMarshalMsgbitmapContainerShortIterator(b *testing.B) { + v := bitmapContainerShortIterator{} + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.MarshalMsg(nil) + } +} + +func BenchmarkAppendMsgbitmapContainerShortIterator(b *testing.B) { + v := bitmapContainerShortIterator{} + bts := make([]byte, 0, v.Msgsize()) + bts, _ = v.MarshalMsg(bts[0:0]) + b.SetBytes(int64(len(bts))) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + bts, _ = v.MarshalMsg(bts[0:0]) + } +} + +func BenchmarkUnmarshalbitmapContainerShortIterator(b *testing.B) { + v := bitmapContainerShortIterator{} + bts, _ := v.MarshalMsg(nil) + b.ReportAllocs() + b.SetBytes(int64(len(bts))) + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := v.UnmarshalMsg(bts) + if err != nil { + b.Fatal(err) + } + } +} + +func TestEncodeDecodebitmapContainerShortIterator(t *testing.T) { + v := bitmapContainerShortIterator{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + + m := v.Msgsize() + if buf.Len() > m { + t.Logf("WARNING: Msgsize() for %v is inaccurate", v) + } + + vn := bitmapContainerShortIterator{} + err := msgp.Decode(&buf, &vn) + if err != nil { + t.Error(err) + } + + buf.Reset() + msgp.Encode(&buf, &v) + err = msgp.NewReader(&buf).Skip() + if err != nil { + t.Error(err) + } +} + +func BenchmarkEncodebitmapContainerShortIterator(b *testing.B) { + v := bitmapContainerShortIterator{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + b.SetBytes(int64(buf.Len())) + en := msgp.NewWriter(msgp.Nowhere) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.EncodeMsg(en) + } + en.Flush() +} + +func BenchmarkDecodebitmapContainerShortIterator(b *testing.B) { + v := bitmapContainerShortIterator{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + b.SetBytes(int64(buf.Len())) + rd := msgp.NewEndlessReader(buf.Bytes(), b) + dc := msgp.NewReader(rd) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + err := v.DecodeMsg(dc) + if err != nil { + b.Fatal(err) + } + } +} diff --git a/vendor/github.com/RoaringBitmap/roaring/bitmapcontainer_test.go b/vendor/github.com/RoaringBitmap/roaring/bitmapcontainer_test.go new file mode 100644 index 0000000..76384b1 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/bitmapcontainer_test.go @@ -0,0 +1,67 @@ +package roaring + +import ( + . "github.com/smartystreets/goconvey/convey" + "math/rand" + "testing" +) + +func TestBitmapContainerNumberOfRuns024(t *testing.T) { + + Convey("bitmapContainer's numberOfRuns() function should be correct against the runContainer equivalent", + t, func() { + seed := int64(42) + p("seed is %v", seed) + rand.Seed(seed) + + trials := []trial{ + {n: 1000, percentFill: .1, ntrial: 10}, + /* + trial{n: 100, percentFill: .5, ntrial: 10}, + trial{n: 100, percentFill: .01, ntrial: 10}, + trial{n: 100, percentFill: .99, ntrial: 10}, + */ + } + + tester := func(tr trial) { + for j := 0; j < tr.ntrial; j++ { + p("TestBitmapContainerNumberOfRuns023 on check# j=%v", j) + ma := make(map[int]bool) + + n := tr.n + a := []uint16{} + + draw := int(float64(n) * tr.percentFill) + for i := 0; i < draw; i++ { + r0 := rand.Intn(n) + a = append(a, uint16(r0)) + ma[r0] = true + } + + showArray16(a, "a") + + // RunContainer compute this automatically + rc := newRunContainer16FromVals(false, a...) + rcNr := rc.numberOfRuns() + + p("rcNr from run container is %v", rcNr) + + // vs bitmapContainer + bc := newBitmapContainer() + for k := range ma { + bc.iadd(uint16(k)) + } + + bcNr := bc.numberOfRuns() + So(bcNr, ShouldEqual, rcNr) + //fmt.Printf("\nnum runs was: %v\n", rcNr) + } + p("done with randomized bitmapContianer.numberOrRuns() checks for trial %#v", tr) + } + + for i := range trials { + tester(trials[i]) + } + + }) +} diff --git a/vendor/github.com/RoaringBitmap/roaring/container_test.go b/vendor/github.com/RoaringBitmap/roaring/container_test.go new file mode 100644 index 0000000..d69516e --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/container_test.go @@ -0,0 +1,130 @@ +package roaring + +import ( + "log" + "testing" + + . "github.com/smartystreets/goconvey/convey" +) + +func makeContainer(ss []uint16) container { + c := newArrayContainer() + for _, s := range ss { + c.iadd(s) + } + return c +} + +func checkContent(c container, s []uint16) bool { + si := c.getShortIterator() + ctr := 0 + fail := false + for si.hasNext() { + if ctr == len(s) { + log.Println("HERE") + fail = true + break + } + i := si.next() + if i != s[ctr] { + + log.Println("THERE", i, s[ctr]) + fail = true + break + } + ctr++ + } + if ctr != len(s) { + log.Println("LAST") + fail = true + } + if fail { + log.Println("fail, found ") + si = c.getShortIterator() + z := 0 + for si.hasNext() { + si.next() + z++ + } + log.Println(z, len(s)) + } + + return !fail +} + +func TestRoaringContainer(t *testing.T) { + Convey("countTrailingZeros", t, func() { + x := uint64(0) + o := countTrailingZeros(x) + So(o, ShouldEqual, 64) + x = 1 << 3 + o = countTrailingZeros(x) + So(o, ShouldEqual, 3) + }) + Convey("ArrayShortIterator", t, func() { + content := []uint16{1, 3, 5, 7, 9} + c := makeContainer(content) + si := c.getShortIterator() + i := 0 + for si.hasNext() { + si.next() + i++ + } + + So(i, ShouldEqual, 5) + }) + + Convey("BinarySearch", t, func() { + content := []uint16{1, 3, 5, 7, 9} + res := binarySearch(content, 5) + So(res, ShouldEqual, 2) + res = binarySearch(content, 4) + So(res, ShouldBeLessThan, 0) + }) + Convey("bitmapcontainer", t, func() { + content := []uint16{1, 3, 5, 7, 9} + a := newArrayContainer() + b := newBitmapContainer() + for _, v := range content { + a.iadd(v) + b.iadd(v) + } + c := a.toBitmapContainer() + + So(a.getCardinality(), ShouldEqual, b.getCardinality()) + So(c.getCardinality(), ShouldEqual, b.getCardinality()) + + }) + Convey("inottest0", t, func() { + content := []uint16{9} + c := makeContainer(content) + c = c.inot(0, 11) + si := c.getShortIterator() + i := 0 + for si.hasNext() { + si.next() + i++ + } + So(i, ShouldEqual, 10) + }) + + Convey("inotTest1", t, func() { + // Array container, range is complete + content := []uint16{1, 3, 5, 7, 9} + //content := []uint16{1} + edge := 1 << 13 + c := makeContainer(content) + c = c.inot(0, edge+1) + size := edge - len(content) + s := make([]uint16, size+1) + pos := 0 + for i := uint16(0); i < uint16(edge+1); i++ { + if binarySearch(content, i) < 0 { + s[pos] = i + pos++ + } + } + So(checkContent(c, s), ShouldEqual, true) + }) + +} diff --git a/vendor/github.com/RoaringBitmap/roaring/ctz.go b/vendor/github.com/RoaringBitmap/roaring/ctz.go new file mode 100644 index 0000000..e399ddd --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/ctz.go @@ -0,0 +1,11 @@ +// +build go1.9 +// "go1.9", from Go version 1.9 onward +// See https://golang.org/pkg/go/build/#hdr-Build_Constraints + +package roaring + +import "math/bits" + +func countTrailingZeros(x uint64) int { + return bits.TrailingZeros64(x) +} diff --git a/vendor/github.com/RoaringBitmap/roaring/ctz_compat.go b/vendor/github.com/RoaringBitmap/roaring/ctz_compat.go new file mode 100644 index 0000000..80220e6 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/ctz_compat.go @@ -0,0 +1,71 @@ +// +build !go1.9 + +package roaring + +// Reuse of portions of go/src/math/big standard lib code +// under this license: +/* +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +const deBruijn32 = 0x077CB531 + +var deBruijn32Lookup = []byte{ + 0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8, + 31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9, +} + +const deBruijn64 = 0x03f79d71b4ca8b09 + +var deBruijn64Lookup = []byte{ + 0, 1, 56, 2, 57, 49, 28, 3, 61, 58, 42, 50, 38, 29, 17, 4, + 62, 47, 59, 36, 45, 43, 51, 22, 53, 39, 33, 30, 24, 18, 12, 5, + 63, 55, 48, 27, 60, 41, 37, 16, 46, 35, 44, 21, 52, 32, 23, 11, + 54, 26, 40, 15, 34, 20, 31, 10, 25, 14, 19, 9, 13, 8, 7, 6, +} + +// trailingZeroBits returns the number of consecutive least significant zero +// bits of x. +func countTrailingZeros(x uint64) int { + // x & -x leaves only the right-most bit set in the word. Let k be the + // index of that bit. Since only a single bit is set, the value is two + // to the power of k. Multiplying by a power of two is equivalent to + // left shifting, in this case by k bits. The de Bruijn constant is + // such that all six bit, consecutive substrings are distinct. + // Therefore, if we have a left shifted version of this constant we can + // find by how many bits it was shifted by looking at which six bit + // substring ended up at the top of the word. + // (Knuth, volume 4, section 7.3.1) + if x == 0 { + // We have to special case 0; the fomula + // below doesn't work for 0. + return 64 + } + return int(deBruijn64Lookup[((x&-x)*(deBruijn64))>>58]) +} diff --git a/vendor/github.com/RoaringBitmap/roaring/ctz_test.go b/vendor/github.com/RoaringBitmap/roaring/ctz_test.go new file mode 100644 index 0000000..6d8f903 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/ctz_test.go @@ -0,0 +1,114 @@ +package roaring + +import ( + "encoding/binary" + "math/rand" + "testing" + + . "github.com/smartystreets/goconvey/convey" +) + +func TestCountTrailingZeros072(t *testing.T) { + Convey("countTrailingZeros", t, func() { + So(numberOfTrailingZeros(0), ShouldEqual, 64) + So(numberOfTrailingZeros(8), ShouldEqual, 3) + So(numberOfTrailingZeros(7), ShouldEqual, 0) + So(numberOfTrailingZeros(1<<17), ShouldEqual, 17) + So(numberOfTrailingZeros(7<<17), ShouldEqual, 17) + So(numberOfTrailingZeros(255<<33), ShouldEqual, 33) + + So(countTrailingZeros(0), ShouldEqual, 64) + So(countTrailingZeros(8), ShouldEqual, 3) + So(countTrailingZeros(7), ShouldEqual, 0) + So(countTrailingZeros(1<<17), ShouldEqual, 17) + So(countTrailingZeros(7<<17), ShouldEqual, 17) + So(countTrailingZeros(255<<33), ShouldEqual, 33) + + }) +} + +func getRandomUint64Set(n int) []uint64 { + seed := int64(42) + p("seed is %v", seed) + rand.Seed(seed) + + var buf [8]byte + var o []uint64 + for i := 0; i < n; i++ { + rand.Read(buf[:]) + o = append(o, binary.LittleEndian.Uint64(buf[:])) + } + return o +} + +func getAllOneBitUint64Set() []uint64 { + var o []uint64 + for i := uint(0); i < 64; i++ { + o = append(o, 1<>63)) +} diff --git a/vendor/github.com/RoaringBitmap/roaring/example_roaring_test.go b/vendor/github.com/RoaringBitmap/roaring/example_roaring_test.go new file mode 100644 index 0000000..4e270ce --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/example_roaring_test.go @@ -0,0 +1,124 @@ +package roaring + +import ( + "bytes" + "fmt" + "testing" +) + +// Example_roaring demonstrates how to use the roaring library. +func TestExample_roaring060(t *testing.T) { + // example inspired by https://github.com/fzandona/goroar + fmt.Println("==roaring==") + rb1 := BitmapOf(1, 2, 3, 4, 5, 100, 1000) + fmt.Println(rb1.String()) + + rb2 := BitmapOf(3, 4, 1000) + fmt.Println(rb2.String()) + + rb3 := New() + fmt.Println(rb3.String()) + + fmt.Println("Cardinality: ", rb1.GetCardinality()) + if rb1.GetCardinality() != 7 { + t.Errorf("Bad cardinality: %v", rb1.GetCardinality()) + } + + fmt.Println("Contains 3? ", rb1.Contains(3)) + if !rb1.Contains(3) { + t.Errorf("Should contain 3.") + } + + rb1.And(rb2) + + rb3.Add(1) + rb3.Add(5) + + rb3.Or(rb1) + + // prints 1, 3, 4, 5, 1000 + i := rb3.Iterator() + for i.HasNext() { + fmt.Println(i.Next()) + } + fmt.Println() + + // next we include an example of serialization + buf := new(bytes.Buffer) + size, err := rb1.WriteTo(buf) + if err != nil { + fmt.Println("Failed writing") + t.Errorf("Failed writing") + + } else { + fmt.Println("Wrote ", size, " bytes") + } + newrb := New() + _, err = newrb.ReadFrom(buf) + if err != nil { + fmt.Println("Failed reading") + t.Errorf("Failed reading") + + } + if !rb1.Equals(newrb) { + fmt.Println("I did not get back to original bitmap?") + t.Errorf("Bad serialization") + + } else { + fmt.Println("I wrote the content to a byte stream and read it back.") + } +} + +// Example_roaring demonstrates how to use the roaring library with run containers. +func TestExample2_roaring061(t *testing.T) { + + r1 := New() + for i := uint32(100); i < 1000; i++ { + r1.Add(i) + } + if !r1.Contains(500) { + t.Errorf("should contain 500") + } + rb2 := r1.Clone() + // compute how many bits there are: + cardinality := r1.GetCardinality() + + // if your bitmaps have long runs, you can compress them by calling + // run_optimize + size := r1.GetSizeInBytes() + r1.RunOptimize() + if cardinality != r1.GetCardinality() { + t.Errorf("RunOptimize should not change cardinality.") + } + compactSize := r1.GetSizeInBytes() + if compactSize >= size { + t.Errorf("Run optimized size should be smaller.") + } + if !r1.Equals(rb2) { + t.Errorf("RunOptimize should not affect equality.") + } + fmt.Print("size before run optimize: ", size, " bytes, and after: ", compactSize, " bytes.\n") + rb3 := New() + rb3.AddRange(1, 10000000) + r1.Or(rb3) + if !r1.Equals(rb3) { + t.Errorf("union with large run should give back contained set") + } + rb1 := r1.Clone() + rb1.AndNot(rb3) + if !rb1.IsEmpty() { + t.Errorf("And not with large should clear...") + } + for i := uint32(0); i < 10000; i += 3 { + rb1.Add(i) + } + p("rb1card before doing AndNot(rb3): %v, rb3card=%v", + rb1.GetCardinality(), rb3.GetCardinality()) + rb1.AndNot(rb3) + rb1card := rb1.GetCardinality() + if rb1card != 1 { + //rb1.RunOptimize() + //fmt.Printf("\n rb1 = %s\n", rb1) + t.Errorf("Only the value 0 should survive the andNot; rb1card = %v", rb1card) + } +} diff --git a/vendor/github.com/RoaringBitmap/roaring/fastaggregation.go b/vendor/github.com/RoaringBitmap/roaring/fastaggregation.go new file mode 100644 index 0000000..2c28691 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/fastaggregation.go @@ -0,0 +1,216 @@ +package roaring + +import ( + "container/heap" +) + +// Or function that requires repairAfterLazy +func lazyOR(x1, x2 *Bitmap) *Bitmap { + answer := NewBitmap() + pos1 := 0 + pos2 := 0 + length1 := x1.highlowcontainer.size() + length2 := x2.highlowcontainer.size() +main: + for (pos1 < length1) && (pos2 < length2) { + s1 := x1.highlowcontainer.getKeyAtIndex(pos1) + s2 := x2.highlowcontainer.getKeyAtIndex(pos2) + + for { + if s1 < s2 { + answer.highlowcontainer.appendCopy(x1.highlowcontainer, pos1) + pos1++ + if pos1 == length1 { + break main + } + s1 = x1.highlowcontainer.getKeyAtIndex(pos1) + } else if s1 > s2 { + answer.highlowcontainer.appendCopy(x2.highlowcontainer, pos2) + pos2++ + if pos2 == length2 { + break main + } + s2 = x2.highlowcontainer.getKeyAtIndex(pos2) + } else { + c1 := x1.highlowcontainer.getContainerAtIndex(pos1) + switch t := c1.(type) { + case *arrayContainer: + c1 = t.toBitmapContainer() + case *runContainer16: + if !t.isFull() { + c1 = t.toBitmapContainer() + } + } + + answer.highlowcontainer.appendContainer(s1, c1.lazyOR(x2.highlowcontainer.getContainerAtIndex(pos2)), false) + pos1++ + pos2++ + if (pos1 == length1) || (pos2 == length2) { + break main + } + s1 = x1.highlowcontainer.getKeyAtIndex(pos1) + s2 = x2.highlowcontainer.getKeyAtIndex(pos2) + } + } + } + if pos1 == length1 { + answer.highlowcontainer.appendCopyMany(x2.highlowcontainer, pos2, length2) + } else if pos2 == length2 { + answer.highlowcontainer.appendCopyMany(x1.highlowcontainer, pos1, length1) + } + return answer +} + +// In-place Or function that requires repairAfterLazy +func (x1 *Bitmap) lazyOR(x2 *Bitmap) *Bitmap { + answer := NewBitmap() // TODO: we return a new bitmap... could be optimized + pos1 := 0 + pos2 := 0 + length1 := x1.highlowcontainer.size() + length2 := x2.highlowcontainer.size() +main: + for (pos1 < length1) && (pos2 < length2) { + s1 := x1.highlowcontainer.getKeyAtIndex(pos1) + s2 := x2.highlowcontainer.getKeyAtIndex(pos2) + + for { + if s1 < s2 { + answer.highlowcontainer.appendWithoutCopy(x1.highlowcontainer, pos1) + pos1++ + if pos1 == length1 { + break main + } + s1 = x1.highlowcontainer.getKeyAtIndex(pos1) + } else if s1 > s2 { + answer.highlowcontainer.appendCopy(x2.highlowcontainer, pos2) + pos2++ + if pos2 == length2 { + break main + } + s2 = x2.highlowcontainer.getKeyAtIndex(pos2) + } else { + c1 := x1.highlowcontainer.getContainerAtIndex(pos1) + switch t := c1.(type) { + case *arrayContainer: + c1 = t.toBitmapContainer() + case *runContainer16: + if !t.isFull() { + c1 = t.toBitmapContainer() + } + case *bitmapContainer: + c1 = x1.highlowcontainer.getWritableContainerAtIndex(pos1) + } + + answer.highlowcontainer.appendContainer(s1, c1.lazyIOR(x2.highlowcontainer.getContainerAtIndex(pos2)), false) + pos1++ + pos2++ + if (pos1 == length1) || (pos2 == length2) { + break main + } + s1 = x1.highlowcontainer.getKeyAtIndex(pos1) + s2 = x2.highlowcontainer.getKeyAtIndex(pos2) + } + } + } + if pos1 == length1 { + answer.highlowcontainer.appendCopyMany(x2.highlowcontainer, pos2, length2) + } else if pos2 == length2 { + answer.highlowcontainer.appendWithoutCopyMany(x1.highlowcontainer, pos1, length1) + } + return answer +} + +// to be called after lazy aggregates +func (x1 *Bitmap) repairAfterLazy() { + for pos := 0; pos < x1.highlowcontainer.size(); pos++ { + c := x1.highlowcontainer.getContainerAtIndex(pos) + switch c.(type) { + case *bitmapContainer: + if c.(*bitmapContainer).cardinality == invalidCardinality { + c = x1.highlowcontainer.getWritableContainerAtIndex(pos) + c.(*bitmapContainer).computeCardinality() + if c.(*bitmapContainer).getCardinality() <= arrayDefaultMaxSize { + x1.highlowcontainer.setContainerAtIndex(pos, c.(*bitmapContainer).toArrayContainer()) + } else if c.(*bitmapContainer).isFull() { + x1.highlowcontainer.setContainerAtIndex(pos, newRunContainer16Range(0, MaxUint16)) + } + } + } + } +} + +// FastAnd computes the intersection between many bitmaps quickly +// Compared to the And function, it can take many bitmaps as input, thus saving the trouble +// of manually calling "And" many times. +func FastAnd(bitmaps ...*Bitmap) *Bitmap { + if len(bitmaps) == 0 { + return NewBitmap() + } else if len(bitmaps) == 1 { + return bitmaps[0].Clone() + } + answer := And(bitmaps[0], bitmaps[1]) + for _, bm := range bitmaps[2:] { + answer.And(bm) + } + return answer +} + +// FastOr computes the union between many bitmaps quickly, as opposed to having to call Or repeatedly. +// It might also be faster than calling Or repeatedly. +func FastOr(bitmaps ...*Bitmap) *Bitmap { + if len(bitmaps) == 0 { + return NewBitmap() + } else if len(bitmaps) == 1 { + return bitmaps[0].Clone() + } + answer := lazyOR(bitmaps[0], bitmaps[1]) + for _, bm := range bitmaps[2:] { + answer = answer.lazyOR(bm) + } + // here is where repairAfterLazy is called. + answer.repairAfterLazy() + return answer +} + +// HeapOr computes the union between many bitmaps quickly using a heap. +// It might be faster than calling Or repeatedly. +func HeapOr(bitmaps ...*Bitmap) *Bitmap { + if len(bitmaps) == 0 { + return NewBitmap() + } + // TODO: for better speed, we could do the operation lazily, see Java implementation + pq := make(priorityQueue, len(bitmaps)) + for i, bm := range bitmaps { + pq[i] = &item{bm, i} + } + heap.Init(&pq) + + for pq.Len() > 1 { + x1 := heap.Pop(&pq).(*item) + x2 := heap.Pop(&pq).(*item) + heap.Push(&pq, &item{Or(x1.value, x2.value), 0}) + } + return heap.Pop(&pq).(*item).value +} + +// HeapXor computes the symmetric difference between many bitmaps quickly (as opposed to calling Xor repeated). +// Internally, this function uses a heap. +// It might be faster than calling Xor repeatedly. +func HeapXor(bitmaps ...*Bitmap) *Bitmap { + if len(bitmaps) == 0 { + return NewBitmap() + } + + pq := make(priorityQueue, len(bitmaps)) + for i, bm := range bitmaps { + pq[i] = &item{bm, i} + } + heap.Init(&pq) + + for pq.Len() > 1 { + x1 := heap.Pop(&pq).(*item) + x2 := heap.Pop(&pq).(*item) + heap.Push(&pq, &item{Xor(x1.value, x2.value), 0}) + } + return heap.Pop(&pq).(*item).value +} diff --git a/vendor/github.com/RoaringBitmap/roaring/fastaggregation_test.go b/vendor/github.com/RoaringBitmap/roaring/fastaggregation_test.go new file mode 100644 index 0000000..824fabf --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/fastaggregation_test.go @@ -0,0 +1,339 @@ +package roaring + +// to run just these tests: go test -run TestFastAggregations* + +import ( + "container/heap" + . "github.com/smartystreets/goconvey/convey" + "testing" +) + +func TestFastAggregations(t *testing.T) { + Convey("Fast", t, func() { + rb1 := NewBitmap() + rb2 := NewBitmap() + rb1.Add(1) + rb2.Add(2) + + So(FastAnd(rb1, rb2).GetCardinality(), ShouldEqual, 0) + So(FastOr(rb1, rb2).GetCardinality(), ShouldEqual, 2) + So(HeapXor(rb1, rb2).GetCardinality(), ShouldEqual, 2) + }) +} + +func TestFastAggregationsNothing(t *testing.T) { + Convey("Fast", t, func() { + So(FastAnd().GetCardinality(), ShouldEqual, 0) + So(FastOr().GetCardinality(), ShouldEqual, 0) + So(HeapXor().GetCardinality(), ShouldEqual, 0) + }) +} + +func TestFastAggregationsOneEmpty(t *testing.T) { + Convey("Fast", t, func() { + rb1 := NewBitmap() + rb2 := NewBitmap() + rb1.Add(1) + + So(FastAnd(rb1, rb2).GetCardinality(), ShouldEqual, 0) + So(FastOr(rb1, rb2).GetCardinality(), ShouldEqual, 1) + So(HeapXor(rb1, rb2).GetCardinality(), ShouldEqual, 1) + }) +} + +func TestFastAggregationsReversed3COW(t *testing.T) { + Convey("Fast", t, func() { + rb1 := NewBitmap() + rb2 := NewBitmap() + rb3 := NewBitmap() + rb1.SetCopyOnWrite(true) + rb2.SetCopyOnWrite(true) + rb3.SetCopyOnWrite(true) + rb1.Add(1) + rb1.Add(100000) + rb2.Add(200000) + rb3.Add(1) + rb3.Add(300000) + + So(FastAnd(rb2, rb1, rb3).GetCardinality(), ShouldEqual, 0) + So(FastOr(rb2, rb1, rb3).GetCardinality(), ShouldEqual, 4) + So(HeapXor(rb2, rb1, rb3).GetCardinality(), ShouldEqual, 3) + }) +} + +func TestFastAggregationsReversed3(t *testing.T) { + Convey("Fast", t, func() { + rb1 := NewBitmap() + rb2 := NewBitmap() + rb3 := NewBitmap() + rb1.Add(1) + rb1.Add(100000) + rb2.Add(200000) + rb3.Add(1) + rb3.Add(300000) + + So(FastAnd(rb2, rb1, rb3).GetCardinality(), ShouldEqual, 0) + So(FastOr(rb2, rb1, rb3).GetCardinality(), ShouldEqual, 4) + So(HeapXor(rb2, rb1, rb3).GetCardinality(), ShouldEqual, 3) + }) +} + +func TestFastAggregations3(t *testing.T) { + Convey("Fast", t, func() { + rb1 := NewBitmap() + rb2 := NewBitmap() + rb3 := NewBitmap() + rb1.Add(1) + rb1.Add(100000) + rb2.Add(200000) + rb3.Add(1) + rb3.Add(300000) + + So(FastAnd(rb1, rb2, rb3).GetCardinality(), ShouldEqual, 0) + So(FastOr(rb1, rb2, rb3).GetCardinality(), ShouldEqual, 4) + So(HeapXor(rb1, rb2, rb3).GetCardinality(), ShouldEqual, 3) + }) +} + +func TestFastAggregations3COW(t *testing.T) { + Convey("Fast", t, func() { + rb1 := NewBitmap() + rb2 := NewBitmap() + rb3 := NewBitmap() + rb1.SetCopyOnWrite(true) + rb2.SetCopyOnWrite(true) + rb3.SetCopyOnWrite(true) + rb1.Add(1) + rb1.Add(100000) + rb2.Add(200000) + rb3.Add(1) + rb3.Add(300000) + + So(FastAnd(rb1, rb2, rb3).GetCardinality(), ShouldEqual, 0) + So(FastOr(rb1, rb2, rb3).GetCardinality(), ShouldEqual, 4) + So(HeapXor(rb1, rb2, rb3).GetCardinality(), ShouldEqual, 3) + }) +} + +func TestFastAggregationsSize(t *testing.T) { + Convey("Fast", t, func() { + rb1 := NewBitmap() + rb2 := NewBitmap() + rb3 := NewBitmap() + for i := uint32(0); i < 1000000; i += 3 { + rb1.Add(i) + } + for i := uint32(0); i < 1000000; i += 7 { + rb2.Add(i) + } + for i := uint32(0); i < 1000000; i += 1001 { + rb3.Add(i) + } + pq := make(priorityQueue, 3) + pq[0] = &item{rb1, 0} + pq[1] = &item{rb2, 1} + pq[2] = &item{rb3, 2} + heap.Init(&pq) + So(heap.Pop(&pq).(*item).value.GetSizeInBytes(), ShouldEqual, rb3.GetSizeInBytes()) + So(heap.Pop(&pq).(*item).value.GetSizeInBytes(), ShouldEqual, rb2.GetSizeInBytes()) + So(heap.Pop(&pq).(*item).value.GetSizeInBytes(), ShouldEqual, rb1.GetSizeInBytes()) + }) +} + +func TestFastAggregationsCont(t *testing.T) { + Convey("Fast", t, func() { + rb1 := NewBitmap() + rb2 := NewBitmap() + rb3 := NewBitmap() + for i := uint32(0); i < 10; i += 3 { + rb1.Add(i) + } + for i := uint32(0); i < 10; i += 7 { + rb2.Add(i) + } + for i := uint32(0); i < 10; i += 1001 { + rb3.Add(i) + } + for i := uint32(1000000); i < 1000000+10; i += 1001 { + rb1.Add(i) + } + for i := uint32(1000000); i < 1000000+10; i += 7 { + rb2.Add(i) + } + for i := uint32(1000000); i < 1000000+10; i += 3 { + rb3.Add(i) + } + rb1.Add(500000) + pq := make(containerPriorityQueue, 3) + pq[0] = &containeritem{rb1, 0, 0} + pq[1] = &containeritem{rb2, 0, 1} + pq[2] = &containeritem{rb3, 0, 2} + heap.Init(&pq) + expected := []int{6, 4, 5, 6, 5, 4, 6} + counter := 0 + for pq.Len() > 0 { + x1 := heap.Pop(&pq).(*containeritem) + So(x1.value.GetCardinality(), ShouldEqual, expected[counter]) + counter++ + x1.keyindex++ + if x1.keyindex < x1.value.highlowcontainer.size() { + heap.Push(&pq, x1) + } + } + }) +} +func TestFastAggregationsAdvanced(t *testing.T) { + Convey("Fast", t, func() { + rb1 := NewBitmap() + rb2 := NewBitmap() + rb3 := NewBitmap() + for i := uint32(0); i < 1000000; i += 3 { + rb1.Add(i) + } + for i := uint32(0); i < 1000000; i += 7 { + rb2.Add(i) + } + for i := uint32(0); i < 1000000; i += 1001 { + rb3.Add(i) + } + for i := uint32(1000000); i < 2000000; i += 1001 { + rb1.Add(i) + } + for i := uint32(1000000); i < 2000000; i += 3 { + rb2.Add(i) + } + for i := uint32(1000000); i < 2000000; i += 7 { + rb3.Add(i) + } + rb1.Or(rb2) + rb1.Or(rb3) + bigand := And(And(rb1, rb2), rb3) + bigxor := Xor(Xor(rb1, rb2), rb3) + So(FastOr(rb1, rb2, rb3).Equals(rb1), ShouldEqual, true) + So(HeapOr(rb1, rb2, rb3).Equals(rb1), ShouldEqual, true) + So(HeapOr(rb1, rb2, rb3).GetCardinality(), ShouldEqual, rb1.GetCardinality()) + So(HeapXor(rb1, rb2, rb3).Equals(bigxor), ShouldEqual, true) + So(FastAnd(rb1, rb2, rb3).Equals(bigand), ShouldEqual, true) + }) +} + +func TestFastAggregationsAdvanced_run(t *testing.T) { + Convey("Fast", t, func() { + rb1 := NewBitmap() + rb2 := NewBitmap() + rb3 := NewBitmap() + for i := uint32(500); i < 75000; i++ { + rb1.Add(i) + } + for i := uint32(0); i < 1000000; i += 7 { + rb2.Add(i) + } + for i := uint32(0); i < 1000000; i += 1001 { + rb3.Add(i) + } + for i := uint32(1000000); i < 2000000; i += 1001 { + rb1.Add(i) + } + for i := uint32(1000000); i < 2000000; i += 3 { + rb2.Add(i) + } + for i := uint32(1000000); i < 2000000; i += 7 { + rb3.Add(i) + } + rb1.RunOptimize() + rb1.Or(rb2) + rb1.Or(rb3) + bigand := And(And(rb1, rb2), rb3) + bigxor := Xor(Xor(rb1, rb2), rb3) + So(FastOr(rb1, rb2, rb3).Equals(rb1), ShouldEqual, true) + So(HeapOr(rb1, rb2, rb3).Equals(rb1), ShouldEqual, true) + So(HeapOr(rb1, rb2, rb3).GetCardinality(), ShouldEqual, rb1.GetCardinality()) + So(HeapXor(rb1, rb2, rb3).Equals(bigxor), ShouldEqual, true) + So(FastAnd(rb1, rb2, rb3).Equals(bigand), ShouldEqual, true) + }) +} + +func TestFastAggregationsXOR(t *testing.T) { + Convey("Fast", t, func() { + rb1 := NewBitmap() + rb2 := NewBitmap() + rb3 := NewBitmap() + + for i := uint32(0); i < 40000; i++ { + rb1.Add(i) + } + for i := uint32(0); i < 40000; i += 4000 { + rb2.Add(i) + } + for i := uint32(0); i < 40000; i += 5000 { + rb3.Add(i) + } + So(rb1.GetCardinality() == 40000, ShouldEqual, true) + + xor1 := Xor(rb1, rb2) + xor1alt := Xor(rb2, rb1) + So(xor1alt.Equals(xor1), ShouldEqual, true) + So(HeapXor(rb1, rb2).Equals(xor1), ShouldEqual, true) + + xor2 := Xor(rb2, rb3) + xor2alt := Xor(rb3, rb2) + So(xor2alt.Equals(xor2), ShouldEqual, true) + So(HeapXor(rb2, rb3).Equals(xor2), ShouldEqual, true) + + bigxor := Xor(Xor(rb1, rb2), rb3) + bigxoralt1 := Xor(rb1, Xor(rb2, rb3)) + bigxoralt2 := Xor(rb1, Xor(rb3, rb2)) + bigxoralt3 := Xor(rb3, Xor(rb1, rb2)) + bigxoralt4 := Xor(Xor(rb1, rb2), rb3) + + So(bigxoralt2.Equals(bigxor), ShouldEqual, true) + So(bigxoralt1.Equals(bigxor), ShouldEqual, true) + So(bigxoralt3.Equals(bigxor), ShouldEqual, true) + So(bigxoralt4.Equals(bigxor), ShouldEqual, true) + + So(HeapXor(rb1, rb2, rb3).Equals(bigxor), ShouldEqual, true) + }) +} + +func TestFastAggregationsXOR_run(t *testing.T) { + Convey("Fast", t, func() { + rb1 := NewBitmap() + rb2 := NewBitmap() + rb3 := NewBitmap() + + for i := uint32(0); i < 40000; i++ { + rb1.Add(i) + } + rb1.RunOptimize() + for i := uint32(0); i < 40000; i += 4000 { + rb2.Add(i) + } + for i := uint32(0); i < 40000; i += 5000 { + rb3.Add(i) + } + So(rb1.GetCardinality() == 40000, ShouldEqual, true) + + xor1 := Xor(rb1, rb2) + xor1alt := Xor(rb2, rb1) + So(xor1alt.Equals(xor1), ShouldEqual, true) + So(HeapXor(rb1, rb2).Equals(xor1), ShouldEqual, true) + + xor2 := Xor(rb2, rb3) + xor2alt := Xor(rb3, rb2) + So(xor2alt.Equals(xor2), ShouldEqual, true) + So(HeapXor(rb2, rb3).Equals(xor2), ShouldEqual, true) + + bigxor := Xor(Xor(rb1, rb2), rb3) + bigxoralt1 := Xor(rb1, Xor(rb2, rb3)) + bigxoralt2 := Xor(rb1, Xor(rb3, rb2)) + bigxoralt3 := Xor(rb3, Xor(rb1, rb2)) + bigxoralt4 := Xor(Xor(rb1, rb2), rb3) + + So(bigxoralt2.Equals(bigxor), ShouldEqual, true) + So(bigxoralt1.Equals(bigxor), ShouldEqual, true) + So(bigxoralt3.Equals(bigxor), ShouldEqual, true) + So(bigxoralt4.Equals(bigxor), ShouldEqual, true) + + So(HeapXor(rb1, rb2, rb3).Equals(bigxor), ShouldEqual, true) + }) +} diff --git a/vendor/github.com/RoaringBitmap/roaring/parallel.go b/vendor/github.com/RoaringBitmap/roaring/parallel.go new file mode 100644 index 0000000..9a04ffe --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/parallel.go @@ -0,0 +1,323 @@ +package roaring + +import ( + "container/heap" + "runtime" +) + +var defaultWorkerCount = runtime.NumCPU() + +type bitmapContainerKey struct { + bitmap *Bitmap + container container + key uint16 + idx int +} + +type multipleContainers struct { + key uint16 + containers []container + idx int +} + +type keyedContainer struct { + key uint16 + container container + idx int +} + +type bitmapContainerHeap []bitmapContainerKey + +func (h bitmapContainerHeap) Len() int { return len(h) } +func (h bitmapContainerHeap) Less(i, j int) bool { return h[i].key < h[j].key } +func (h bitmapContainerHeap) Swap(i, j int) { h[i], h[j] = h[j], h[i] } + +func (h *bitmapContainerHeap) Push(x interface{}) { + // Push and Pop use pointer receivers because they modify the slice's length, + // not just its contents. + *h = append(*h, x.(bitmapContainerKey)) +} + +func (h *bitmapContainerHeap) Pop() interface{} { + old := *h + n := len(old) + x := old[n-1] + *h = old[0 : n-1] + return x +} + +func (h bitmapContainerHeap) Peek() bitmapContainerKey { + return h[0] +} + +func (h *bitmapContainerHeap) PopIncrementing() bitmapContainerKey { + k := h.Peek() + + newIdx := k.idx + 1 + if newIdx < k.bitmap.highlowcontainer.size() { + newKey := bitmapContainerKey{ + k.bitmap, + k.bitmap.highlowcontainer.containers[newIdx], + k.bitmap.highlowcontainer.keys[newIdx], + newIdx, + } + (*h)[0] = newKey + heap.Fix(h, 0) + } else { + heap.Pop(h) + } + return k +} + +func (h *bitmapContainerHeap) PopNextContainers() multipleContainers { + if h.Len() == 0 { + return multipleContainers{} + } + + containers := make([]container, 0, 4) + bk := h.PopIncrementing() + containers = append(containers, bk.container) + key := bk.key + + for h.Len() > 0 && key == h.Peek().key { + bk = h.PopIncrementing() + containers = append(containers, bk.container) + } + + return multipleContainers{ + key, + containers, + -1, + } +} + +func newBitmapContainerHeap(bitmaps ...*Bitmap) bitmapContainerHeap { + // Initialize heap + var h bitmapContainerHeap = make([]bitmapContainerKey, 0, len(bitmaps)) + for _, bitmap := range bitmaps { + if !bitmap.IsEmpty() { + key := bitmapContainerKey{ + bitmap, + bitmap.highlowcontainer.containers[0], + bitmap.highlowcontainer.keys[0], + 0, + } + h = append(h, key) + } + } + + heap.Init(&h) + + return h +} + +func repairAfterLazy(c container) container { + switch t := c.(type) { + case *bitmapContainer: + if t.cardinality == invalidCardinality { + t.computeCardinality() + } + + if t.getCardinality() <= arrayDefaultMaxSize { + return t.toArrayContainer() + } else if c.(*bitmapContainer).isFull() { + return newRunContainer16Range(0, MaxUint16) + } + } + + return c +} + +func toBitmapContainer(c container) container { + switch t := c.(type) { + case *arrayContainer: + return t.toBitmapContainer() + case *runContainer16: + if !t.isFull() { + return t.toBitmapContainer() + } + } + return c +} + +func appenderRoutine(bitmapChan chan<- *Bitmap, resultChan <-chan keyedContainer, expectedKeysChan <-chan int) { + expectedKeys := -1 + appendedKeys := 0 + keys := make([]uint16, 0) + containers := make([]container, 0) + for appendedKeys != expectedKeys { + select { + case item := <-resultChan: + if len(keys) <= item.idx { + keys = append(keys, make([]uint16, item.idx-len(keys)+1)...) + containers = append(containers, make([]container, item.idx-len(containers)+1)...) + } + keys[item.idx] = item.key + containers[item.idx] = item.container + + appendedKeys++ + case msg := <-expectedKeysChan: + expectedKeys = msg + } + } + answer := &Bitmap{ + roaringArray{ + make([]uint16, 0, expectedKeys), + make([]container, 0, expectedKeys), + make([]bool, 0, expectedKeys), + false, + nil, + }, + } + for i := range keys { + if containers[i] != nil { // in case a resulting container was empty, see ParAnd function + answer.highlowcontainer.appendContainer(keys[i], containers[i], false) + } + } + + bitmapChan <- answer +} + +// ParOr computes the union (OR) of all provided bitmaps in parallel, +// where the parameter "parallelism" determines how many workers are to be used +// (if it is set to 0, a default number of workers is chosen) +func ParOr(parallelism int, bitmaps ...*Bitmap) *Bitmap { + bitmapCount := len(bitmaps) + if bitmapCount == 0 { + return NewBitmap() + } else if bitmapCount == 1 { + return bitmaps[0].Clone() + } + + if parallelism == 0 { + parallelism = defaultWorkerCount + } + + h := newBitmapContainerHeap(bitmaps...) + + bitmapChan := make(chan *Bitmap) + inputChan := make(chan multipleContainers, 128) + resultChan := make(chan keyedContainer, 32) + expectedKeysChan := make(chan int) + + orFunc := func() { + // Assumes only structs with >=2 containers are passed + for input := range inputChan { + c := toBitmapContainer(input.containers[0]).lazyOR(input.containers[1]) + for _, next := range input.containers[2:] { + c = c.lazyIOR(next) + } + c = repairAfterLazy(c) + kx := keyedContainer{ + input.key, + c, + input.idx, + } + resultChan <- kx + } + } + + go appenderRoutine(bitmapChan, resultChan, expectedKeysChan) + + for i := 0; i < parallelism; i++ { + go orFunc() + } + + idx := 0 + for h.Len() > 0 { + ck := h.PopNextContainers() + if len(ck.containers) == 1 { + resultChan <- keyedContainer{ + ck.key, + ck.containers[0], + idx, + } + } else { + ck.idx = idx + inputChan <- ck + } + idx++ + } + expectedKeysChan <- idx + + bitmap := <-bitmapChan + + close(inputChan) + close(resultChan) + close(expectedKeysChan) + + return bitmap +} + +// ParAnd computes the intersection (AND) of all provided bitmaps in parallel, +// where the parameter "parallelism" determines how many workers are to be used +// (if it is set to 0, a default number of workers is chosen) +func ParAnd(parallelism int, bitmaps ...*Bitmap) *Bitmap { + bitmapCount := len(bitmaps) + if bitmapCount == 0 { + return NewBitmap() + } else if bitmapCount == 1 { + return bitmaps[0].Clone() + } + + if parallelism == 0 { + parallelism = defaultWorkerCount + } + + h := newBitmapContainerHeap(bitmaps...) + + bitmapChan := make(chan *Bitmap) + inputChan := make(chan multipleContainers, 128) + resultChan := make(chan keyedContainer, 32) + expectedKeysChan := make(chan int) + + andFunc := func() { + // Assumes only structs with >=2 containers are passed + for input := range inputChan { + c := input.containers[0].and(input.containers[1]) + for _, next := range input.containers[2:] { + if c.getCardinality() == 0 { + break + } + c = c.iand(next) + } + + // Send a nil explicitly if the result of the intersection is an empty container + if c.getCardinality() == 0 { + c = nil + } + + kx := keyedContainer{ + input.key, + c, + input.idx, + } + resultChan <- kx + } + } + + go appenderRoutine(bitmapChan, resultChan, expectedKeysChan) + + for i := 0; i < parallelism; i++ { + go andFunc() + } + + idx := 0 + for h.Len() > 0 { + ck := h.PopNextContainers() + if len(ck.containers) == bitmapCount { + ck.idx = idx + inputChan <- ck + idx++ + } + } + expectedKeysChan <- idx + + bitmap := <-bitmapChan + + close(inputChan) + close(resultChan) + close(expectedKeysChan) + + return bitmap +} diff --git a/vendor/github.com/RoaringBitmap/roaring/parallel_benchmark_test.go b/vendor/github.com/RoaringBitmap/roaring/parallel_benchmark_test.go new file mode 100644 index 0000000..6111186 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/parallel_benchmark_test.go @@ -0,0 +1,57 @@ +package roaring + +import ( + "math/rand" + "testing" +) + +func BenchmarkIntersectionLargeParallel(b *testing.B) { + b.StopTimer() + + initsize := 650000 + r := rand.New(rand.NewSource(0)) + + s1 := NewBitmap() + sz := 150 * 1000 * 1000 + for i := 0; i < initsize; i++ { + s1.Add(uint32(r.Int31n(int32(sz)))) + } + + s2 := NewBitmap() + sz = 100 * 1000 * 1000 + for i := 0; i < initsize; i++ { + s2.Add(uint32(r.Int31n(int32(sz)))) + } + + b.StartTimer() + card := uint64(0) + for j := 0; j < b.N; j++ { + s3 := ParAnd(0, s1, s2) + card = card + s3.GetCardinality() + } +} + +func BenchmarkIntersectionLargeRoaring(b *testing.B) { + b.StopTimer() + initsize := 650000 + r := rand.New(rand.NewSource(0)) + + s1 := NewBitmap() + sz := 150 * 1000 * 1000 + for i := 0; i < initsize; i++ { + s1.Add(uint32(r.Int31n(int32(sz)))) + } + + s2 := NewBitmap() + sz = 100 * 1000 * 1000 + for i := 0; i < initsize; i++ { + s2.Add(uint32(r.Int31n(int32(sz)))) + } + + b.StartTimer() + card := uint64(0) + for j := 0; j < b.N; j++ { + s3 := And(s1, s2) + card = card + s3.GetCardinality() + } +} diff --git a/vendor/github.com/RoaringBitmap/roaring/parallel_test.go b/vendor/github.com/RoaringBitmap/roaring/parallel_test.go new file mode 100644 index 0000000..c784e18 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/parallel_test.go @@ -0,0 +1,189 @@ +package roaring + +// to run just these tests: go test -run TestParAggregations* + +import ( + . "github.com/smartystreets/goconvey/convey" + "testing" +) + +func TestParAggregations(t *testing.T) { + Convey("Par", t, func() { + rb1 := NewBitmap() + rb2 := NewBitmap() + rb1.Add(1) + rb2.Add(2) + + So(ParAnd(0, rb1, rb2).GetCardinality(), ShouldEqual, 0) + So(ParOr(0, rb1, rb2).GetCardinality(), ShouldEqual, 2) + }) +} + +func TestParAggregationsNothing(t *testing.T) { + Convey("Par", t, func() { + So(ParAnd(0).GetCardinality(), ShouldEqual, 0) + So(ParOr(0).GetCardinality(), ShouldEqual, 0) + }) +} + +func TestParAggregationsOneBitmap(t *testing.T) { + Convey("Par", t, func() { + rb := BitmapOf(1, 2, 3) + + So(ParAnd(0, rb).GetCardinality(), ShouldEqual, 3) + So(ParOr(0, rb).GetCardinality(), ShouldEqual, 3) + }) +} + +func TestParAggregationsOneEmpty(t *testing.T) { + Convey("Par", t, func() { + rb1 := NewBitmap() + rb2 := NewBitmap() + rb1.Add(1) + + So(ParAnd(0, rb1, rb2).GetCardinality(), ShouldEqual, 0) + So(ParOr(0, rb1, rb2).GetCardinality(), ShouldEqual, 1) + }) +} + +func TestParAggregationsDisjointSetIntersection(t *testing.T) { + Convey("Par", t, func() { + rb1 := BitmapOf(1) + rb2 := BitmapOf(2) + + So(ParAnd(0, rb1, rb2).Stats().Containers, ShouldEqual, 0) + }) +} + +func TestParAggregationsReversed3COW(t *testing.T) { + Convey("Par", t, func() { + rb1 := NewBitmap() + rb2 := NewBitmap() + rb3 := NewBitmap() + rb1.SetCopyOnWrite(true) + rb2.SetCopyOnWrite(true) + rb3.SetCopyOnWrite(true) + rb1.Add(1) + rb1.Add(100000) + rb2.Add(200000) + rb3.Add(1) + rb3.Add(300000) + + So(ParAnd(0, rb2, rb1, rb3).GetCardinality(), ShouldEqual, 0) + So(ParOr(0, rb2, rb1, rb3).GetCardinality(), ShouldEqual, 4) + }) +} + +func TestParAggregationsReversed3(t *testing.T) { + Convey("Par", t, func() { + rb1 := NewBitmap() + rb2 := NewBitmap() + rb3 := NewBitmap() + rb1.Add(1) + rb1.Add(100000) + rb2.Add(200000) + rb3.Add(1) + rb3.Add(300000) + + So(ParAnd(0, rb2, rb1, rb3).GetCardinality(), ShouldEqual, 0) + So(ParOr(0, rb2, rb1, rb3).GetCardinality(), ShouldEqual, 4) + }) +} + +func TestParAggregations3(t *testing.T) { + Convey("Par", t, func() { + rb1 := NewBitmap() + rb2 := NewBitmap() + rb3 := NewBitmap() + rb1.Add(1) + rb1.Add(100000) + rb2.Add(200000) + rb3.Add(1) + rb3.Add(300000) + + So(ParAnd(0, rb1, rb2, rb3).GetCardinality(), ShouldEqual, 0) + So(ParOr(0, rb1, rb2, rb3).GetCardinality(), ShouldEqual, 4) + }) +} + +func TestParAggregations3COW(t *testing.T) { + Convey("Par", t, func() { + rb1 := NewBitmap() + rb2 := NewBitmap() + rb3 := NewBitmap() + rb1.SetCopyOnWrite(true) + rb2.SetCopyOnWrite(true) + rb3.SetCopyOnWrite(true) + rb1.Add(1) + rb1.Add(100000) + rb2.Add(200000) + rb3.Add(1) + rb3.Add(300000) + + So(ParAnd(0, rb1, rb2, rb3).GetCardinality(), ShouldEqual, 0) + So(ParOr(0, rb1, rb2, rb3).GetCardinality(), ShouldEqual, 4) + }) +} + +func TestParAggregationsAdvanced(t *testing.T) { + Convey("Par", t, func() { + rb1 := NewBitmap() + rb2 := NewBitmap() + rb3 := NewBitmap() + for i := uint32(0); i < 1000000; i += 3 { + rb1.Add(i) + } + for i := uint32(0); i < 1000000; i += 7 { + rb2.Add(i) + } + for i := uint32(0); i < 1000000; i += 1001 { + rb3.Add(i) + } + for i := uint32(1000000); i < 2000000; i += 1001 { + rb1.Add(i) + } + for i := uint32(1000000); i < 2000000; i += 3 { + rb2.Add(i) + } + for i := uint32(1000000); i < 2000000; i += 7 { + rb3.Add(i) + } + rb1.Or(rb2) + rb1.Or(rb3) + bigand := And(And(rb1, rb2), rb3) + So(ParOr(0, rb1, rb2, rb3).Equals(rb1), ShouldEqual, true) + So(ParAnd(0, rb1, rb2, rb3).Equals(bigand), ShouldEqual, true) + }) +} + +func TestParAggregationsAdvanced_run(t *testing.T) { + Convey("Par", t, func() { + rb1 := NewBitmap() + rb2 := NewBitmap() + rb3 := NewBitmap() + for i := uint32(500); i < 75000; i++ { + rb1.Add(i) + } + for i := uint32(0); i < 1000000; i += 7 { + rb2.Add(i) + } + for i := uint32(0); i < 1000000; i += 1001 { + rb3.Add(i) + } + for i := uint32(1000000); i < 2000000; i += 1001 { + rb1.Add(i) + } + for i := uint32(1000000); i < 2000000; i += 3 { + rb2.Add(i) + } + for i := uint32(1000000); i < 2000000; i += 7 { + rb3.Add(i) + } + rb1.RunOptimize() + rb1.Or(rb2) + rb1.Or(rb3) + bigand := And(And(rb1, rb2), rb3) + So(ParOr(0, rb1, rb2, rb3).Equals(rb1), ShouldEqual, true) + So(ParAnd(0, rb1, rb2, rb3).Equals(bigand), ShouldEqual, true) + }) +} diff --git a/vendor/github.com/RoaringBitmap/roaring/popcnt.go b/vendor/github.com/RoaringBitmap/roaring/popcnt.go new file mode 100644 index 0000000..9d99508 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/popcnt.go @@ -0,0 +1,11 @@ +// +build go1.9 +// "go1.9", from Go version 1.9 onward +// See https://golang.org/pkg/go/build/#hdr-Build_Constraints + +package roaring + +import "math/bits" + +func popcount(x uint64) uint64 { + return uint64(bits.OnesCount64(x)) +} diff --git a/vendor/github.com/RoaringBitmap/roaring/popcnt_amd64.s b/vendor/github.com/RoaringBitmap/roaring/popcnt_amd64.s new file mode 100644 index 0000000..1f13fa2 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/popcnt_amd64.s @@ -0,0 +1,103 @@ +// +build amd64,!appengine,!go1.9 + +TEXT ·hasAsm(SB),4,$0-1 +MOVQ $1, AX +CPUID +SHRQ $23, CX +ANDQ $1, CX +MOVB CX, ret+0(FP) +RET + +#define POPCNTQ_DX_DX BYTE $0xf3; BYTE $0x48; BYTE $0x0f; BYTE $0xb8; BYTE $0xd2 + +TEXT ·popcntSliceAsm(SB),4,$0-32 +XORQ AX, AX +MOVQ s+0(FP), SI +MOVQ s_len+8(FP), CX +TESTQ CX, CX +JZ popcntSliceEnd +popcntSliceLoop: +BYTE $0xf3; BYTE $0x48; BYTE $0x0f; BYTE $0xb8; BYTE $0x16 // POPCNTQ (SI), DX +ADDQ DX, AX +ADDQ $8, SI +LOOP popcntSliceLoop +popcntSliceEnd: +MOVQ AX, ret+24(FP) +RET + +TEXT ·popcntMaskSliceAsm(SB),4,$0-56 +XORQ AX, AX +MOVQ s+0(FP), SI +MOVQ s_len+8(FP), CX +TESTQ CX, CX +JZ popcntMaskSliceEnd +MOVQ m+24(FP), DI +popcntMaskSliceLoop: +MOVQ (DI), DX +NOTQ DX +ANDQ (SI), DX +POPCNTQ_DX_DX +ADDQ DX, AX +ADDQ $8, SI +ADDQ $8, DI +LOOP popcntMaskSliceLoop +popcntMaskSliceEnd: +MOVQ AX, ret+48(FP) +RET + +TEXT ·popcntAndSliceAsm(SB),4,$0-56 +XORQ AX, AX +MOVQ s+0(FP), SI +MOVQ s_len+8(FP), CX +TESTQ CX, CX +JZ popcntAndSliceEnd +MOVQ m+24(FP), DI +popcntAndSliceLoop: +MOVQ (DI), DX +ANDQ (SI), DX +POPCNTQ_DX_DX +ADDQ DX, AX +ADDQ $8, SI +ADDQ $8, DI +LOOP popcntAndSliceLoop +popcntAndSliceEnd: +MOVQ AX, ret+48(FP) +RET + +TEXT ·popcntOrSliceAsm(SB),4,$0-56 +XORQ AX, AX +MOVQ s+0(FP), SI +MOVQ s_len+8(FP), CX +TESTQ CX, CX +JZ popcntOrSliceEnd +MOVQ m+24(FP), DI +popcntOrSliceLoop: +MOVQ (DI), DX +ORQ (SI), DX +POPCNTQ_DX_DX +ADDQ DX, AX +ADDQ $8, SI +ADDQ $8, DI +LOOP popcntOrSliceLoop +popcntOrSliceEnd: +MOVQ AX, ret+48(FP) +RET + +TEXT ·popcntXorSliceAsm(SB),4,$0-56 +XORQ AX, AX +MOVQ s+0(FP), SI +MOVQ s_len+8(FP), CX +TESTQ CX, CX +JZ popcntXorSliceEnd +MOVQ m+24(FP), DI +popcntXorSliceLoop: +MOVQ (DI), DX +XORQ (SI), DX +POPCNTQ_DX_DX +ADDQ DX, AX +ADDQ $8, SI +ADDQ $8, DI +LOOP popcntXorSliceLoop +popcntXorSliceEnd: +MOVQ AX, ret+48(FP) +RET diff --git a/vendor/github.com/RoaringBitmap/roaring/popcnt_asm.go b/vendor/github.com/RoaringBitmap/roaring/popcnt_asm.go new file mode 100644 index 0000000..882d7f4 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/popcnt_asm.go @@ -0,0 +1,67 @@ +// +build amd64,!appengine,!go1.9 + +package roaring + +// *** the following functions are defined in popcnt_amd64.s + +//go:noescape + +func hasAsm() bool + +// useAsm is a flag used to select the GO or ASM implementation of the popcnt function +var useAsm = hasAsm() + +//go:noescape + +func popcntSliceAsm(s []uint64) uint64 + +//go:noescape + +func popcntMaskSliceAsm(s, m []uint64) uint64 + +//go:noescape + +func popcntAndSliceAsm(s, m []uint64) uint64 + +//go:noescape + +func popcntOrSliceAsm(s, m []uint64) uint64 + +//go:noescape + +func popcntXorSliceAsm(s, m []uint64) uint64 + +func popcntSlice(s []uint64) uint64 { + if useAsm { + return popcntSliceAsm(s) + } + return popcntSliceGo(s) +} + +func popcntMaskSlice(s, m []uint64) uint64 { + if useAsm { + return popcntMaskSliceAsm(s, m) + } + return popcntMaskSliceGo(s, m) +} + +func popcntAndSlice(s, m []uint64) uint64 { + if useAsm { + return popcntAndSliceAsm(s, m) + } + return popcntAndSliceGo(s, m) +} + +func popcntOrSlice(s, m []uint64) uint64 { + if useAsm { + return popcntOrSliceAsm(s, m) + } + return popcntOrSliceGo(s, m) +} + +func popcntXorSlice(s, m []uint64) uint64 { + if useAsm { + return popcntXorSliceAsm(s, m) + } + return popcntXorSliceGo(s, m) +} diff --git a/vendor/github.com/RoaringBitmap/roaring/popcnt_bench_test.go b/vendor/github.com/RoaringBitmap/roaring/popcnt_bench_test.go new file mode 100644 index 0000000..25a9957 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/popcnt_bench_test.go @@ -0,0 +1,15 @@ +package roaring + +import "testing" + +func BenchmarkPopcount(b *testing.B) { + b.StopTimer() + + r := getRandomUint64Set(64) + + b.ResetTimer() + b.StartTimer() + for i := 0; i < b.N; i++ { + popcntSlice(r) + } +} diff --git a/vendor/github.com/RoaringBitmap/roaring/popcnt_compat.go b/vendor/github.com/RoaringBitmap/roaring/popcnt_compat.go new file mode 100644 index 0000000..7ae82d4 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/popcnt_compat.go @@ -0,0 +1,17 @@ +// +build !go1.9 + +package roaring + +// bit population count, take from +// https://code.google.com/p/go/issues/detail?id=4988#c11 +// credit: https://code.google.com/u/arnehormann/ +// credit: https://play.golang.org/p/U7SogJ7psJ +// credit: http://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetParallel +func popcount(x uint64) uint64 { + x -= (x >> 1) & 0x5555555555555555 + x = (x>>2)&0x3333333333333333 + x&0x3333333333333333 + x += x >> 4 + x &= 0x0f0f0f0f0f0f0f0f + x *= 0x0101010101010101 + return x >> 56 +} diff --git a/vendor/github.com/RoaringBitmap/roaring/popcnt_generic.go b/vendor/github.com/RoaringBitmap/roaring/popcnt_generic.go new file mode 100644 index 0000000..edf2083 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/popcnt_generic.go @@ -0,0 +1,23 @@ +// +build !amd64 appengine go1.9 + +package roaring + +func popcntSlice(s []uint64) uint64 { + return popcntSliceGo(s) +} + +func popcntMaskSlice(s, m []uint64) uint64 { + return popcntMaskSliceGo(s, m) +} + +func popcntAndSlice(s, m []uint64) uint64 { + return popcntAndSliceGo(s, m) +} + +func popcntOrSlice(s, m []uint64) uint64 { + return popcntOrSliceGo(s, m) +} + +func popcntXorSlice(s, m []uint64) uint64 { + return popcntXorSliceGo(s, m) +} diff --git a/vendor/github.com/RoaringBitmap/roaring/popcnt_slices.go b/vendor/github.com/RoaringBitmap/roaring/popcnt_slices.go new file mode 100644 index 0000000..d27c5f3 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/popcnt_slices.go @@ -0,0 +1,41 @@ +package roaring + +func popcntSliceGo(s []uint64) uint64 { + cnt := uint64(0) + for _, x := range s { + cnt += popcount(x) + } + return cnt +} + +func popcntMaskSliceGo(s, m []uint64) uint64 { + cnt := uint64(0) + for i := range s { + cnt += popcount(s[i] &^ m[i]) + } + return cnt +} + +func popcntAndSliceGo(s, m []uint64) uint64 { + cnt := uint64(0) + for i := range s { + cnt += popcount(s[i] & m[i]) + } + return cnt +} + +func popcntOrSliceGo(s, m []uint64) uint64 { + cnt := uint64(0) + for i := range s { + cnt += popcount(s[i] | m[i]) + } + return cnt +} + +func popcntXorSliceGo(s, m []uint64) uint64 { + cnt := uint64(0) + for i := range s { + cnt += popcount(s[i] ^ m[i]) + } + return cnt +} diff --git a/vendor/github.com/RoaringBitmap/roaring/popcnt_slices_test.go b/vendor/github.com/RoaringBitmap/roaring/popcnt_slices_test.go new file mode 100644 index 0000000..93dbd49 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/popcnt_slices_test.go @@ -0,0 +1,78 @@ +// +build amd64,!appengine,!go1.9 + +// This file tests the popcnt functions + +package roaring + +import ( + "testing" +) + +func TestPopcntSlice(t *testing.T) { + s := []uint64{2, 3, 5, 7, 11, 13, 17, 19, 23, 29} + resGo := popcntSliceGo(s) + resAsm := popcntSliceAsm(s) + if resGo != resAsm { + t.Errorf("The implementations are different: GO %d != ASM %d", resGo, resAsm) + } + res := popcntSlice(s) + if res != resGo { + t.Errorf("The implementations are different") + } +} + +func TestPopcntMaskSlice(t *testing.T) { + s := []uint64{2, 3, 5, 7, 11, 13, 17, 19, 23, 29} + m := []uint64{31, 37, 41, 43, 47, 53, 59, 61, 67, 71} + resGo := popcntMaskSliceGo(s, m) + resAsm := popcntMaskSliceAsm(s, m) + if resGo != resAsm { + t.Errorf("The implementations are different: GO %d != ASM %d", resGo, resAsm) + } + res := popcntMaskSlice(s, m) + if res != resGo { + t.Errorf("The implementations are different") + } +} + +func TestPopcntAndSlice(t *testing.T) { + s := []uint64{2, 3, 5, 7, 11, 13, 17, 19, 23, 29} + m := []uint64{31, 37, 41, 43, 47, 53, 59, 61, 67, 71} + resGo := popcntAndSliceGo(s, m) + resAsm := popcntAndSliceAsm(s, m) + if resGo != resAsm { + t.Errorf("The implementations are different: GO %d != ASM %d", resGo, resAsm) + } + res := popcntAndSlice(s, m) + if res != resGo { + t.Errorf("The implementations are different") + } +} + +func TestPopcntOrSlice(t *testing.T) { + s := []uint64{2, 3, 5, 7, 11, 13, 17, 19, 23, 29} + m := []uint64{31, 37, 41, 43, 47, 53, 59, 61, 67, 71} + resGo := popcntOrSliceGo(s, m) + resAsm := popcntOrSliceAsm(s, m) + if resGo != resAsm { + t.Errorf("The implementations are different: GO %d != ASM %d", resGo, resAsm) + } + res := popcntOrSlice(s, m) + if res != resGo { + t.Errorf("The implementations are different") + } +} + +func TestPopcntXorSlice(t *testing.T) { + s := []uint64{2, 3, 5, 7, 11, 13, 17, 19, 23, 29} + m := []uint64{31, 37, 41, 43, 47, 53, 59, 61, 67, 71} + resGo := popcntXorSliceGo(s, m) + resAsm := popcntXorSliceAsm(s, m) + if resGo != resAsm { + t.Errorf("The implementations are different: GO %d != ASM %d", resGo, resAsm) + } + res := popcntXorSlice(s, m) + if res != resGo { + t.Errorf("The implementations are different") + } +} diff --git a/vendor/github.com/RoaringBitmap/roaring/priorityqueue.go b/vendor/github.com/RoaringBitmap/roaring/priorityqueue.go new file mode 100644 index 0000000..9259a68 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/priorityqueue.go @@ -0,0 +1,101 @@ +package roaring + +import "container/heap" + +///////////// +// The priorityQueue is used to keep Bitmaps sorted. +//////////// + +type item struct { + value *Bitmap + index int +} + +type priorityQueue []*item + +func (pq priorityQueue) Len() int { return len(pq) } + +func (pq priorityQueue) Less(i, j int) bool { + return pq[i].value.GetSizeInBytes() < pq[j].value.GetSizeInBytes() +} + +func (pq priorityQueue) Swap(i, j int) { + pq[i], pq[j] = pq[j], pq[i] + pq[i].index = i + pq[j].index = j +} + +func (pq *priorityQueue) Push(x interface{}) { + n := len(*pq) + item := x.(*item) + item.index = n + *pq = append(*pq, item) +} + +func (pq *priorityQueue) Pop() interface{} { + old := *pq + n := len(old) + item := old[n-1] + item.index = -1 // for safety + *pq = old[0 : n-1] + return item +} + +func (pq *priorityQueue) update(item *item, value *Bitmap) { + item.value = value + heap.Fix(pq, item.index) +} + +///////////// +// The containerPriorityQueue is used to keep the containers of various Bitmaps sorted. +//////////// + +type containeritem struct { + value *Bitmap + keyindex int + index int +} + +type containerPriorityQueue []*containeritem + +func (pq containerPriorityQueue) Len() int { return len(pq) } + +func (pq containerPriorityQueue) Less(i, j int) bool { + k1 := pq[i].value.highlowcontainer.getKeyAtIndex(pq[i].keyindex) + k2 := pq[j].value.highlowcontainer.getKeyAtIndex(pq[j].keyindex) + if k1 != k2 { + return k1 < k2 + } + c1 := pq[i].value.highlowcontainer.getContainerAtIndex(pq[i].keyindex) + c2 := pq[j].value.highlowcontainer.getContainerAtIndex(pq[j].keyindex) + + return c1.getCardinality() > c2.getCardinality() +} + +func (pq containerPriorityQueue) Swap(i, j int) { + pq[i], pq[j] = pq[j], pq[i] + pq[i].index = i + pq[j].index = j +} + +func (pq *containerPriorityQueue) Push(x interface{}) { + n := len(*pq) + item := x.(*containeritem) + item.index = n + *pq = append(*pq, item) +} + +func (pq *containerPriorityQueue) Pop() interface{} { + old := *pq + n := len(old) + item := old[n-1] + item.index = -1 // for safety + *pq = old[0 : n-1] + return item +} + +//func (pq *containerPriorityQueue) update(item *containeritem, value *Bitmap, keyindex int) { +// item.value = value +// item.keyindex = keyindex +// heap.Fix(pq, item.index) +//} diff --git a/vendor/github.com/RoaringBitmap/roaring/rle.go b/vendor/github.com/RoaringBitmap/roaring/rle.go new file mode 100644 index 0000000..8f3d4ed --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/rle.go @@ -0,0 +1,1667 @@ +package roaring + +// +// Copyright (c) 2016 by the roaring authors. +// Licensed under the Apache License, Version 2.0. +// +// We derive a few lines of code from the sort.Search +// function in the golang standard library. That function +// is Copyright 2009 The Go Authors, and licensed +// under the following BSD-style license. +/* +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +import ( + "fmt" + "sort" + "unsafe" +) + +//go:generate msgp -unexported + +// runContainer32 does run-length encoding of sets of +// uint32 integers. +type runContainer32 struct { + iv []interval32 + card int64 + + // avoid allocation during search + myOpts searchOptions `msg:"-"` +} + +// interval32 is the internal to runContainer32 +// structure that maintains the individual [Start, last] +// closed intervals. +type interval32 struct { + start uint32 + last uint32 +} + +// runlen returns the count of integers in the interval. +func (iv interval32) runlen() int64 { + return 1 + int64(iv.last) - int64(iv.start) +} + +// String produces a human viewable string of the contents. +func (iv interval32) String() string { + return fmt.Sprintf("[%d, %d]", iv.start, iv.last) +} + +func ivalString32(iv []interval32) string { + var s string + var j int + var p interval32 + for j, p = range iv { + s += fmt.Sprintf("%v:[%d, %d], ", j, p.start, p.last) + } + return s +} + +// String produces a human viewable string of the contents. +func (rc *runContainer32) String() string { + if len(rc.iv) == 0 { + return "runContainer32{}" + } + is := ivalString32(rc.iv) + return `runContainer32{` + is + `}` +} + +// uint32Slice is a sort.Sort convenience method +type uint32Slice []uint32 + +// Len returns the length of p. +func (p uint32Slice) Len() int { return len(p) } + +// Less returns p[i] < p[j] +func (p uint32Slice) Less(i, j int) bool { return p[i] < p[j] } + +// Swap swaps elements i and j. +func (p uint32Slice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } + +//msgp:ignore addHelper + +// addHelper helps build a runContainer32. +type addHelper32 struct { + runstart uint32 + runlen uint32 + actuallyAdded uint32 + m []interval32 + rc *runContainer32 +} + +func (ah *addHelper32) storeIval(runstart, runlen uint32) { + mi := interval32{start: runstart, last: runstart + runlen} + ah.m = append(ah.m, mi) +} + +func (ah *addHelper32) add(cur, prev uint32, i int) { + if cur == prev+1 { + ah.runlen++ + ah.actuallyAdded++ + } else { + if cur < prev { + panic(fmt.Sprintf("newRunContainer32FromVals sees "+ + "unsorted vals; vals[%v]=cur=%v < prev=%v. Sort your vals"+ + " before calling us with alreadySorted == true.", i, cur, prev)) + } + if cur == prev { + // ignore duplicates + } else { + ah.actuallyAdded++ + ah.storeIval(ah.runstart, ah.runlen) + ah.runstart = cur + ah.runlen = 0 + } + } +} + +// newRunContainerRange makes a new container made of just the specified closed interval [rangestart,rangelast] +func newRunContainer32Range(rangestart uint32, rangelast uint32) *runContainer32 { + rc := &runContainer32{} + rc.iv = append(rc.iv, interval32{start: rangestart, last: rangelast}) + return rc +} + +// newRunContainer32FromVals makes a new container from vals. +// +// For efficiency, vals should be sorted in ascending order. +// Ideally vals should not contain duplicates, but we detect and +// ignore them. If vals is already sorted in ascending order, then +// pass alreadySorted = true. Otherwise, for !alreadySorted, +// we will sort vals before creating a runContainer32 of them. +// We sort the original vals, so this will change what the +// caller sees in vals as a side effect. +func newRunContainer32FromVals(alreadySorted bool, vals ...uint32) *runContainer32 { + // keep this in sync with newRunContainer32FromArray below + + rc := &runContainer32{} + ah := addHelper32{rc: rc} + + if !alreadySorted { + sort.Sort(uint32Slice(vals)) + } + n := len(vals) + var cur, prev uint32 + switch { + case n == 0: + // nothing more + case n == 1: + ah.m = append(ah.m, interval32{start: vals[0], last: vals[0]}) + ah.actuallyAdded++ + default: + ah.runstart = vals[0] + ah.actuallyAdded++ + for i := 1; i < n; i++ { + prev = vals[i-1] + cur = vals[i] + ah.add(cur, prev, i) + } + ah.storeIval(ah.runstart, ah.runlen) + } + rc.iv = ah.m + rc.card = int64(ah.actuallyAdded) + return rc +} + +// newRunContainer32FromBitmapContainer makes a new run container from bc, +// somewhat efficiently. For reference, see the Java +// https://github.com/RoaringBitmap/RoaringBitmap/blob/master/src/main/java/org/roaringbitmap/RunContainer.java#L145-L192 +func newRunContainer32FromBitmapContainer(bc *bitmapContainer) *runContainer32 { + + rc := &runContainer32{} + nbrRuns := bc.numberOfRuns() + if nbrRuns == 0 { + return rc + } + rc.iv = make([]interval32, nbrRuns) + + longCtr := 0 // index of current long in bitmap + curWord := bc.bitmap[0] // its value + runCount := 0 + for { + // potentially multiword advance to first 1 bit + for curWord == 0 && longCtr < len(bc.bitmap)-1 { + longCtr++ + curWord = bc.bitmap[longCtr] + } + + if curWord == 0 { + // wrap up, no more runs + return rc + } + localRunStart := countTrailingZeros(curWord) + runStart := localRunStart + 64*longCtr + // stuff 1s into number's LSBs + curWordWith1s := curWord | (curWord - 1) + + // find the next 0, potentially in a later word + runEnd := 0 + for curWordWith1s == maxWord && longCtr < len(bc.bitmap)-1 { + longCtr++ + curWordWith1s = bc.bitmap[longCtr] + } + + if curWordWith1s == maxWord { + // a final unterminated run of 1s + runEnd = wordSizeInBits + longCtr*64 + rc.iv[runCount].start = uint32(runStart) + rc.iv[runCount].last = uint32(runEnd) - 1 + return rc + } + localRunEnd := countTrailingZeros(^curWordWith1s) + runEnd = localRunEnd + longCtr*64 + rc.iv[runCount].start = uint32(runStart) + rc.iv[runCount].last = uint32(runEnd) - 1 + runCount++ + // now, zero out everything right of runEnd. + curWord = curWordWith1s & (curWordWith1s + 1) + // We've lathered and rinsed, so repeat... + } + +} + +// +// newRunContainer32FromArray populates a new +// runContainer32 from the contents of arr. +// +func newRunContainer32FromArray(arr *arrayContainer) *runContainer32 { + // keep this in sync with newRunContainer32FromVals above + + rc := &runContainer32{} + ah := addHelper32{rc: rc} + + n := arr.getCardinality() + var cur, prev uint32 + switch { + case n == 0: + // nothing more + case n == 1: + ah.m = append(ah.m, interval32{start: uint32(arr.content[0]), last: uint32(arr.content[0])}) + ah.actuallyAdded++ + default: + ah.runstart = uint32(arr.content[0]) + ah.actuallyAdded++ + for i := 1; i < n; i++ { + prev = uint32(arr.content[i-1]) + cur = uint32(arr.content[i]) + ah.add(cur, prev, i) + } + ah.storeIval(ah.runstart, ah.runlen) + } + rc.iv = ah.m + rc.card = int64(ah.actuallyAdded) + return rc +} + +// set adds the integers in vals to the set. Vals +// must be sorted in increasing order; if not, you should set +// alreadySorted to false, and we will sort them in place for you. +// (Be aware of this side effect -- it will affect the callers +// view of vals). +// +// If you have a small number of additions to an already +// big runContainer32, calling Add() may be faster. +func (rc *runContainer32) set(alreadySorted bool, vals ...uint32) { + + rc2 := newRunContainer32FromVals(alreadySorted, vals...) + un := rc.union(rc2) + rc.iv = un.iv + rc.card = 0 +} + +// canMerge returns true if the intervals +// a and b either overlap or they are +// contiguous and so can be merged into +// a single interval. +func canMerge32(a, b interval32) bool { + if int64(a.last)+1 < int64(b.start) { + return false + } + return int64(b.last)+1 >= int64(a.start) +} + +// haveOverlap differs from canMerge in that +// it tells you if the intersection of a +// and b would contain an element (otherwise +// it would be the empty set, and we return +// false). +func haveOverlap32(a, b interval32) bool { + if int64(a.last)+1 <= int64(b.start) { + return false + } + return int64(b.last)+1 > int64(a.start) +} + +// mergeInterval32s joins a and b into a +// new interval, and panics if it cannot. +func mergeInterval32s(a, b interval32) (res interval32) { + if !canMerge32(a, b) { + panic(fmt.Sprintf("cannot merge %#v and %#v", a, b)) + } + if b.start < a.start { + res.start = b.start + } else { + res.start = a.start + } + if b.last > a.last { + res.last = b.last + } else { + res.last = a.last + } + return +} + +// intersectInterval32s returns the intersection +// of a and b. The isEmpty flag will be true if +// a and b were disjoint. +func intersectInterval32s(a, b interval32) (res interval32, isEmpty bool) { + if !haveOverlap32(a, b) { + isEmpty = true + return + } + if b.start > a.start { + res.start = b.start + } else { + res.start = a.start + } + if b.last < a.last { + res.last = b.last + } else { + res.last = a.last + } + return +} + +// union merges two runContainer32s, producing +// a new runContainer32 with the union of rc and b. +func (rc *runContainer32) union(b *runContainer32) *runContainer32 { + + // rc is also known as 'a' here, but golint insisted we + // call it rc for consistency with the rest of the methods. + + var m []interval32 + + alim := int64(len(rc.iv)) + blim := int64(len(b.iv)) + + var na int64 // next from a + var nb int64 // next from b + + // merged holds the current merge output, which might + // get additional merges before being appended to m. + var merged interval32 + var mergedUsed bool // is merged being used at the moment? + + var cura interval32 // currently considering this interval32 from a + var curb interval32 // currently considering this interval32 from b + + pass := 0 + for na < alim && nb < blim { + pass++ + cura = rc.iv[na] + curb = b.iv[nb] + + if mergedUsed { + mergedUpdated := false + if canMerge32(cura, merged) { + merged = mergeInterval32s(cura, merged) + na = rc.indexOfIntervalAtOrAfter(int64(merged.last)+1, na+1) + mergedUpdated = true + } + if canMerge32(curb, merged) { + merged = mergeInterval32s(curb, merged) + nb = b.indexOfIntervalAtOrAfter(int64(merged.last)+1, nb+1) + mergedUpdated = true + } + if !mergedUpdated { + // we know that merged is disjoint from cura and curb + m = append(m, merged) + mergedUsed = false + } + continue + + } else { + // !mergedUsed + if !canMerge32(cura, curb) { + if cura.start < curb.start { + m = append(m, cura) + na++ + } else { + m = append(m, curb) + nb++ + } + } else { + merged = mergeInterval32s(cura, curb) + mergedUsed = true + na = rc.indexOfIntervalAtOrAfter(int64(merged.last)+1, na+1) + nb = b.indexOfIntervalAtOrAfter(int64(merged.last)+1, nb+1) + } + } + } + var aDone, bDone bool + if na >= alim { + aDone = true + } + if nb >= blim { + bDone = true + } + // finish by merging anything remaining into merged we can: + if mergedUsed { + if !aDone { + aAdds: + for na < alim { + cura = rc.iv[na] + if canMerge32(cura, merged) { + merged = mergeInterval32s(cura, merged) + na = rc.indexOfIntervalAtOrAfter(int64(merged.last)+1, na+1) + } else { + break aAdds + } + } + + } + + if !bDone { + bAdds: + for nb < blim { + curb = b.iv[nb] + if canMerge32(curb, merged) { + merged = mergeInterval32s(curb, merged) + nb = b.indexOfIntervalAtOrAfter(int64(merged.last)+1, nb+1) + } else { + break bAdds + } + } + + } + + m = append(m, merged) + } + if na < alim { + m = append(m, rc.iv[na:]...) + } + if nb < blim { + m = append(m, b.iv[nb:]...) + } + + res := &runContainer32{iv: m} + return res +} + +// unionCardinality returns the cardinality of the merger of two runContainer32s, the union of rc and b. +func (rc *runContainer32) unionCardinality(b *runContainer32) uint64 { + + // rc is also known as 'a' here, but golint insisted we + // call it rc for consistency with the rest of the methods. + answer := uint64(0) + + alim := int64(len(rc.iv)) + blim := int64(len(b.iv)) + + var na int64 // next from a + var nb int64 // next from b + + // merged holds the current merge output, which might + // get additional merges before being appended to m. + var merged interval32 + var mergedUsed bool // is merged being used at the moment? + + var cura interval32 // currently considering this interval32 from a + var curb interval32 // currently considering this interval32 from b + + pass := 0 + for na < alim && nb < blim { + pass++ + cura = rc.iv[na] + curb = b.iv[nb] + + if mergedUsed { + mergedUpdated := false + if canMerge32(cura, merged) { + merged = mergeInterval32s(cura, merged) + na = rc.indexOfIntervalAtOrAfter(int64(merged.last)+1, na+1) + mergedUpdated = true + } + if canMerge32(curb, merged) { + merged = mergeInterval32s(curb, merged) + nb = b.indexOfIntervalAtOrAfter(int64(merged.last)+1, nb+1) + mergedUpdated = true + } + if !mergedUpdated { + // we know that merged is disjoint from cura and curb + //m = append(m, merged) + answer += uint64(merged.last) - uint64(merged.start) + 1 + mergedUsed = false + } + continue + + } else { + // !mergedUsed + if !canMerge32(cura, curb) { + if cura.start < curb.start { + answer += uint64(cura.last) - uint64(cura.start) + 1 + //m = append(m, cura) + na++ + } else { + answer += uint64(curb.last) - uint64(curb.start) + 1 + //m = append(m, curb) + nb++ + } + } else { + merged = mergeInterval32s(cura, curb) + mergedUsed = true + na = rc.indexOfIntervalAtOrAfter(int64(merged.last)+1, na+1) + nb = b.indexOfIntervalAtOrAfter(int64(merged.last)+1, nb+1) + } + } + } + var aDone, bDone bool + if na >= alim { + aDone = true + } + if nb >= blim { + bDone = true + } + // finish by merging anything remaining into merged we can: + if mergedUsed { + if !aDone { + aAdds: + for na < alim { + cura = rc.iv[na] + if canMerge32(cura, merged) { + merged = mergeInterval32s(cura, merged) + na = rc.indexOfIntervalAtOrAfter(int64(merged.last)+1, na+1) + } else { + break aAdds + } + } + + } + + if !bDone { + bAdds: + for nb < blim { + curb = b.iv[nb] + if canMerge32(curb, merged) { + merged = mergeInterval32s(curb, merged) + nb = b.indexOfIntervalAtOrAfter(int64(merged.last)+1, nb+1) + } else { + break bAdds + } + } + + } + + //m = append(m, merged) + answer += uint64(merged.last) - uint64(merged.start) + 1 + } + for _, r := range rc.iv[na:] { + answer += uint64(r.last) - uint64(r.start) + 1 + } + for _, r := range b.iv[nb:] { + answer += uint64(r.last) - uint64(r.start) + 1 + } + return answer +} + +// indexOfIntervalAtOrAfter is a helper for union. +func (rc *runContainer32) indexOfIntervalAtOrAfter(key int64, startIndex int64) int64 { + rc.myOpts.startIndex = startIndex + rc.myOpts.endxIndex = 0 + + w, already, _ := rc.search(key, &rc.myOpts) + if already { + return w + } + return w + 1 +} + +// intersect returns a new runContainer32 holding the +// intersection of rc (also known as 'a') and b. +func (rc *runContainer32) intersect(b *runContainer32) *runContainer32 { + + a := rc + numa := int64(len(a.iv)) + numb := int64(len(b.iv)) + res := &runContainer32{} + if numa == 0 || numb == 0 { + return res + } + + if numa == 1 && numb == 1 { + if !haveOverlap32(a.iv[0], b.iv[0]) { + return res + } + } + + var output []interval32 + + var acuri int64 + var bcuri int64 + + astart := int64(a.iv[acuri].start) + bstart := int64(b.iv[bcuri].start) + + var intersection interval32 + var leftoverstart int64 + var isOverlap, isLeftoverA, isLeftoverB bool + var done bool + pass := 0 +toploop: + for acuri < numa && bcuri < numb { + pass++ + + isOverlap, isLeftoverA, isLeftoverB, leftoverstart, intersection = intersectWithLeftover32(astart, int64(a.iv[acuri].last), bstart, int64(b.iv[bcuri].last)) + + if !isOverlap { + switch { + case astart < bstart: + acuri, done = a.findNextIntervalThatIntersectsStartingFrom(acuri+1, bstart) + if done { + break toploop + } + astart = int64(a.iv[acuri].start) + + case astart > bstart: + bcuri, done = b.findNextIntervalThatIntersectsStartingFrom(bcuri+1, astart) + if done { + break toploop + } + bstart = int64(b.iv[bcuri].start) + + //default: + // panic("impossible that astart == bstart, since !isOverlap") + } + + } else { + // isOverlap + output = append(output, intersection) + switch { + case isLeftoverA: + // note that we change astart without advancing acuri, + // since we need to capture any 2ndary intersections with a.iv[acuri] + astart = leftoverstart + bcuri++ + if bcuri >= numb { + break toploop + } + bstart = int64(b.iv[bcuri].start) + case isLeftoverB: + // note that we change bstart without advancing bcuri, + // since we need to capture any 2ndary intersections with b.iv[bcuri] + bstart = leftoverstart + acuri++ + if acuri >= numa { + break toploop + } + astart = int64(a.iv[acuri].start) + default: + // neither had leftover, both completely consumed + // optionally, assert for sanity: + //if a.iv[acuri].endx != b.iv[bcuri].endx { + // panic("huh? should only be possible that endx agree now!") + //} + + // advance to next a interval + acuri++ + if acuri >= numa { + break toploop + } + astart = int64(a.iv[acuri].start) + + // advance to next b interval + bcuri++ + if bcuri >= numb { + break toploop + } + bstart = int64(b.iv[bcuri].start) + } + } + } // end for toploop + + if len(output) == 0 { + return res + } + + res.iv = output + return res +} + +// intersectCardinality returns the cardinality of the +// intersection of rc (also known as 'a') and b. +func (rc *runContainer32) intersectCardinality(b *runContainer32) int64 { + answer := int64(0) + + a := rc + numa := int64(len(a.iv)) + numb := int64(len(b.iv)) + if numa == 0 || numb == 0 { + return 0 + } + + if numa == 1 && numb == 1 { + if !haveOverlap32(a.iv[0], b.iv[0]) { + return 0 + } + } + + var acuri int64 + var bcuri int64 + + astart := int64(a.iv[acuri].start) + bstart := int64(b.iv[bcuri].start) + + var intersection interval32 + var leftoverstart int64 + var isOverlap, isLeftoverA, isLeftoverB bool + var done bool + pass := 0 +toploop: + for acuri < numa && bcuri < numb { + pass++ + + isOverlap, isLeftoverA, isLeftoverB, leftoverstart, intersection = intersectWithLeftover32(astart, int64(a.iv[acuri].last), bstart, int64(b.iv[bcuri].last)) + + if !isOverlap { + switch { + case astart < bstart: + acuri, done = a.findNextIntervalThatIntersectsStartingFrom(acuri+1, bstart) + if done { + break toploop + } + astart = int64(a.iv[acuri].start) + + case astart > bstart: + bcuri, done = b.findNextIntervalThatIntersectsStartingFrom(bcuri+1, astart) + if done { + break toploop + } + bstart = int64(b.iv[bcuri].start) + + //default: + // panic("impossible that astart == bstart, since !isOverlap") + } + + } else { + // isOverlap + answer += int64(intersection.last) - int64(intersection.start) + 1 + switch { + case isLeftoverA: + // note that we change astart without advancing acuri, + // since we need to capture any 2ndary intersections with a.iv[acuri] + astart = leftoverstart + bcuri++ + if bcuri >= numb { + break toploop + } + bstart = int64(b.iv[bcuri].start) + case isLeftoverB: + // note that we change bstart without advancing bcuri, + // since we need to capture any 2ndary intersections with b.iv[bcuri] + bstart = leftoverstart + acuri++ + if acuri >= numa { + break toploop + } + astart = int64(a.iv[acuri].start) + default: + // neither had leftover, both completely consumed + // optionally, assert for sanity: + //if a.iv[acuri].endx != b.iv[bcuri].endx { + // panic("huh? should only be possible that endx agree now!") + //} + + // advance to next a interval + acuri++ + if acuri >= numa { + break toploop + } + astart = int64(a.iv[acuri].start) + + // advance to next b interval + bcuri++ + if bcuri >= numb { + break toploop + } + bstart = int64(b.iv[bcuri].start) + } + } + } // end for toploop + + return answer +} + +// get returns true if key is in the container. +func (rc *runContainer32) contains(key uint32) bool { + _, in, _ := rc.search(int64(key), nil) + return in +} + +// numIntervals returns the count of intervals in the container. +func (rc *runContainer32) numIntervals() int { + return len(rc.iv) +} + +// search returns alreadyPresent to indicate if the +// key is already in one of our interval32s. +// +// If key is alreadyPresent, then whichInterval32 tells +// you where. +// +// If key is not already present, then whichInterval32 is +// set as follows: +// +// a) whichInterval32 == len(rc.iv)-1 if key is beyond our +// last interval32 in rc.iv; +// +// b) whichInterval32 == -1 if key is before our first +// interval32 in rc.iv; +// +// c) whichInterval32 is set to the minimum index of rc.iv +// which comes strictly before the key; +// so rc.iv[whichInterval32].last < key, +// and if whichInterval32+1 exists, then key < rc.iv[whichInterval32+1].start +// (Note that whichInterval32+1 won't exist when +// whichInterval32 is the last interval.) +// +// runContainer32.search always returns whichInterval32 < len(rc.iv). +// +// If not nil, opts can be used to further restrict +// the search space. +// +func (rc *runContainer32) search(key int64, opts *searchOptions) (whichInterval32 int64, alreadyPresent bool, numCompares int) { + n := int64(len(rc.iv)) + if n == 0 { + return -1, false, 0 + } + + startIndex := int64(0) + endxIndex := n + if opts != nil { + startIndex = opts.startIndex + + // let endxIndex == 0 mean no effect + if opts.endxIndex > 0 { + endxIndex = opts.endxIndex + } + } + + // sort.Search returns the smallest index i + // in [0, n) at which f(i) is true, assuming that on the range [0, n), + // f(i) == true implies f(i+1) == true. + // If there is no such index, Search returns n. + + // For correctness, this began as verbatim snippet from + // sort.Search in the Go standard lib. + // We inline our comparison function for speed, and + // annotate with numCompares + // to observe and test that extra bounds are utilized. + i, j := startIndex, endxIndex + for i < j { + h := i + (j-i)/2 // avoid overflow when computing h as the bisector + // i <= h < j + numCompares++ + if !(key < int64(rc.iv[h].start)) { + i = h + 1 + } else { + j = h + } + } + below := i + // end std lib snippet. + + // The above is a simple in-lining and annotation of: + /* below := sort.Search(n, + func(i int) bool { + return key < rc.iv[i].start + }) + */ + whichInterval32 = below - 1 + + if below == n { + // all falses => key is >= start of all interval32s + // ... so does it belong to the last interval32? + if key < int64(rc.iv[n-1].last)+1 { + // yes, it belongs to the last interval32 + alreadyPresent = true + return + } + // no, it is beyond the last interval32. + // leave alreadyPreset = false + return + } + + // INVAR: key is below rc.iv[below] + if below == 0 { + // key is before the first first interval32. + // leave alreadyPresent = false + return + } + + // INVAR: key is >= rc.iv[below-1].start and + // key is < rc.iv[below].start + + // is key in below-1 interval32? + if key >= int64(rc.iv[below-1].start) && key < int64(rc.iv[below-1].last)+1 { + // yes, it is. key is in below-1 interval32. + alreadyPresent = true + return + } + + // INVAR: key >= rc.iv[below-1].endx && key < rc.iv[below].start + // leave alreadyPresent = false + return +} + +// cardinality returns the count of the integers stored in the +// runContainer32. +func (rc *runContainer32) cardinality() int64 { + if len(rc.iv) == 0 { + rc.card = 0 + return 0 + } + if rc.card > 0 { + return rc.card // already cached + } + // have to compute it + var n int64 + for _, p := range rc.iv { + n += p.runlen() + } + rc.card = n // cache it + return n +} + +// AsSlice decompresses the contents into a []uint32 slice. +func (rc *runContainer32) AsSlice() []uint32 { + s := make([]uint32, rc.cardinality()) + j := 0 + for _, p := range rc.iv { + for i := p.start; i <= p.last; i++ { + s[j] = i + j++ + } + } + return s +} + +// newRunContainer32 creates an empty run container. +func newRunContainer32() *runContainer32 { + return &runContainer32{} +} + +// newRunContainer32CopyIv creates a run container, initializing +// with a copy of the supplied iv slice. +// +func newRunContainer32CopyIv(iv []interval32) *runContainer32 { + rc := &runContainer32{ + iv: make([]interval32, len(iv)), + } + copy(rc.iv, iv) + return rc +} + +func (rc *runContainer32) Clone() *runContainer32 { + rc2 := newRunContainer32CopyIv(rc.iv) + return rc2 +} + +// newRunContainer32TakeOwnership returns a new runContainer32 +// backed by the provided iv slice, which we will +// assume exclusive control over from now on. +// +func newRunContainer32TakeOwnership(iv []interval32) *runContainer32 { + rc := &runContainer32{ + iv: iv, + } + return rc +} + +const baseRc32Size = int(unsafe.Sizeof(runContainer32{})) +const perIntervalRc32Size = int(unsafe.Sizeof(interval32{})) + +const baseDiskRc32Size = int(unsafe.Sizeof(uint32(0))) + +// see also runContainer32SerializedSizeInBytes(numRuns int) int + +// getSizeInBytes returns the number of bytes of memory +// required by this runContainer32. +func (rc *runContainer32) getSizeInBytes() int { + return perIntervalRc32Size*len(rc.iv) + baseRc32Size +} + +// runContainer32SerializedSizeInBytes returns the number of bytes of disk +// required to hold numRuns in a runContainer32. +func runContainer32SerializedSizeInBytes(numRuns int) int { + return perIntervalRc32Size*numRuns + baseDiskRc32Size +} + +// Add adds a single value k to the set. +func (rc *runContainer32) Add(k uint32) (wasNew bool) { + // TODO comment from runContainer32.java: + // it might be better and simpler to do return + // toBitmapOrArrayContainer(getCardinality()).add(k) + // but note that some unit tests use this method to build up test + // runcontainers without calling runOptimize + + k64 := int64(k) + + index, present, _ := rc.search(k64, nil) + if present { + return // already there + } + wasNew = true + + // increment card if it is cached already + if rc.card > 0 { + rc.card++ + } + n := int64(len(rc.iv)) + if index == -1 { + // we may need to extend the first run + if n > 0 { + if rc.iv[0].start == k+1 { + rc.iv[0].start = k + return + } + } + // nope, k stands alone, starting the new first interval32. + rc.iv = append([]interval32{{start: k, last: k}}, rc.iv...) + return + } + + // are we off the end? handle both index == n and index == n-1: + if index >= n-1 { + if int64(rc.iv[n-1].last)+1 == k64 { + rc.iv[n-1].last++ + return + } + rc.iv = append(rc.iv, interval32{start: k, last: k}) + return + } + + // INVAR: index and index+1 both exist, and k goes between them. + // + // Now: add k into the middle, + // possibly fusing with index or index+1 interval32 + // and possibly resulting in fusing of two interval32s + // that had a one integer gap. + + left := index + right := index + 1 + + // are we fusing left and right by adding k? + if int64(rc.iv[left].last)+1 == k64 && int64(rc.iv[right].start) == k64+1 { + // fuse into left + rc.iv[left].last = rc.iv[right].last + // remove redundant right + rc.iv = append(rc.iv[:left+1], rc.iv[right+1:]...) + return + } + + // are we an addition to left? + if int64(rc.iv[left].last)+1 == k64 { + // yes + rc.iv[left].last++ + return + } + + // are we an addition to right? + if int64(rc.iv[right].start) == k64+1 { + // yes + rc.iv[right].start = k + return + } + + // k makes a standalone new interval32, inserted in the middle + tail := append([]interval32{{start: k, last: k}}, rc.iv[right:]...) + rc.iv = append(rc.iv[:left+1], tail...) + return +} + +//msgp:ignore runIterator + +// runIterator32 advice: you must call Next() at least once +// before calling Cur(); and you should call HasNext() +// before calling Next() to insure there are contents. +type runIterator32 struct { + rc *runContainer32 + curIndex int64 + curPosInIndex uint32 + curSeq int64 +} + +// newRunIterator32 returns a new empty run container. +func (rc *runContainer32) newRunIterator32() *runIterator32 { + return &runIterator32{rc: rc, curIndex: -1} +} + +// HasNext returns false if calling Next will panic. It +// returns true when there is at least one more value +// available in the iteration sequence. +func (ri *runIterator32) hasNext() bool { + if len(ri.rc.iv) == 0 { + return false + } + if ri.curIndex == -1 { + return true + } + return ri.curSeq+1 < ri.rc.cardinality() +} + +// cur returns the current value pointed to by the iterator. +func (ri *runIterator32) cur() uint32 { + return ri.rc.iv[ri.curIndex].start + ri.curPosInIndex +} + +// Next returns the next value in the iteration sequence. +func (ri *runIterator32) next() uint32 { + if !ri.hasNext() { + panic("no Next available") + } + if ri.curIndex >= int64(len(ri.rc.iv)) { + panic("runIterator.Next() going beyond what is available") + } + if ri.curIndex == -1 { + // first time is special + ri.curIndex = 0 + } else { + ri.curPosInIndex++ + if int64(ri.rc.iv[ri.curIndex].start)+int64(ri.curPosInIndex) == int64(ri.rc.iv[ri.curIndex].last)+1 { + ri.curPosInIndex = 0 + ri.curIndex++ + } + ri.curSeq++ + } + return ri.cur() +} + +// remove removes the element that the iterator +// is on from the run container. You can use +// Cur if you want to double check what is about +// to be deleted. +func (ri *runIterator32) remove() uint32 { + n := ri.rc.cardinality() + if n == 0 { + panic("runIterator.Remove called on empty runContainer32") + } + cur := ri.cur() + + ri.rc.deleteAt(&ri.curIndex, &ri.curPosInIndex, &ri.curSeq) + return cur +} + +// remove removes key from the container. +func (rc *runContainer32) removeKey(key uint32) (wasPresent bool) { + + var index int64 + var curSeq int64 + index, wasPresent, _ = rc.search(int64(key), nil) + if !wasPresent { + return // already removed, nothing to do. + } + pos := key - rc.iv[index].start + rc.deleteAt(&index, &pos, &curSeq) + return +} + +// internal helper functions + +func (rc *runContainer32) deleteAt(curIndex *int64, curPosInIndex *uint32, curSeq *int64) { + rc.card-- + (*curSeq)-- + ci := *curIndex + pos := *curPosInIndex + + // are we first, last, or in the middle of our interval32? + switch { + case pos == 0: + if int64(rc.iv[ci].start) == int64(rc.iv[ci].last) { + // our interval disappears + rc.iv = append(rc.iv[:ci], rc.iv[ci+1:]...) + // curIndex stays the same, since the delete did + // the advance for us. + *curPosInIndex = 0 + } else { + rc.iv[ci].start++ // no longer overflowable + } + case int64(pos) == rc.iv[ci].runlen()-1: + // last + rc.iv[ci].last-- + // our interval32 cannot disappear, else we would have been pos == 0, case first above. + (*curPosInIndex)-- + // if we leave *curIndex alone, then Next() will work properly even after the delete. + default: + //middle + // split into two, adding an interval32 + new0 := interval32{ + start: rc.iv[ci].start, + last: rc.iv[ci].start + *curPosInIndex - 1} + + new1start := int64(rc.iv[ci].start) + int64(*curPosInIndex) + 1 + if new1start > int64(MaxUint32) { + panic("overflow?!?!") + } + new1 := interval32{ + start: uint32(new1start), + last: rc.iv[ci].last} + tail := append([]interval32{new0, new1}, rc.iv[ci+1:]...) + rc.iv = append(rc.iv[:ci], tail...) + // update curIndex and curPosInIndex + (*curIndex)++ + *curPosInIndex = 0 + } + +} + +func have4Overlap32(astart, alast, bstart, blast int64) bool { + if alast+1 <= bstart { + return false + } + return blast+1 > astart +} + +func intersectWithLeftover32(astart, alast, bstart, blast int64) (isOverlap, isLeftoverA, isLeftoverB bool, leftoverstart int64, intersection interval32) { + if !have4Overlap32(astart, alast, bstart, blast) { + return + } + isOverlap = true + + // do the intersection: + if bstart > astart { + intersection.start = uint32(bstart) + } else { + intersection.start = uint32(astart) + } + switch { + case blast < alast: + isLeftoverA = true + leftoverstart = blast + 1 + intersection.last = uint32(blast) + case alast < blast: + isLeftoverB = true + leftoverstart = alast + 1 + intersection.last = uint32(alast) + default: + // alast == blast + intersection.last = uint32(alast) + } + + return +} + +func (rc *runContainer32) findNextIntervalThatIntersectsStartingFrom(startIndex int64, key int64) (index int64, done bool) { + + rc.myOpts.startIndex = startIndex + rc.myOpts.endxIndex = 0 + + w, _, _ := rc.search(key, &rc.myOpts) + // rc.search always returns w < len(rc.iv) + if w < startIndex { + // not found and comes before lower bound startIndex, + // so just use the lower bound. + if startIndex == int64(len(rc.iv)) { + // also this bump up means that we are done + return startIndex, true + } + return startIndex, false + } + + return w, false +} + +func sliceToString32(m []interval32) string { + s := "" + for i := range m { + s += fmt.Sprintf("%v: %s, ", i, m[i]) + } + return s +} + +// selectInt32 returns the j-th value in the container. +// We panic of j is out of bounds. +func (rc *runContainer32) selectInt32(j uint32) int { + n := rc.cardinality() + if int64(j) > n { + panic(fmt.Sprintf("Cannot select %v since Cardinality is %v", j, n)) + } + + var offset int64 + for k := range rc.iv { + nextOffset := offset + rc.iv[k].runlen() + 1 + if nextOffset > int64(j) { + return int(int64(rc.iv[k].start) + (int64(j) - offset)) + } + offset = nextOffset + } + panic(fmt.Sprintf("Cannot select %v since Cardinality is %v", j, n)) +} + +// helper for invert +func (rc *runContainer32) invertlastInterval(origin uint32, lastIdx int) []interval32 { + cur := rc.iv[lastIdx] + if cur.last == MaxUint32 { + if cur.start == origin { + return nil // empty container + } + return []interval32{{start: origin, last: cur.start - 1}} + } + if cur.start == origin { + return []interval32{{start: cur.last + 1, last: MaxUint32}} + } + // invert splits + return []interval32{ + {start: origin, last: cur.start - 1}, + {start: cur.last + 1, last: MaxUint32}, + } +} + +// invert returns a new container (not inplace), that is +// the inversion of rc. For each bit b in rc, the +// returned value has !b +func (rc *runContainer32) invert() *runContainer32 { + ni := len(rc.iv) + var m []interval32 + switch ni { + case 0: + return &runContainer32{iv: []interval32{{0, MaxUint32}}} + case 1: + return &runContainer32{iv: rc.invertlastInterval(0, 0)} + } + var invstart int64 + ult := ni - 1 + for i, cur := range rc.iv { + if i == ult { + // invertlastInteval will add both intervals (b) and (c) in + // diagram below. + m = append(m, rc.invertlastInterval(uint32(invstart), i)...) + break + } + // INVAR: i and cur are not the last interval, there is a next at i+1 + // + // ........[cur.start, cur.last] ...... [next.start, next.last].... + // ^ ^ ^ + // (a) (b) (c) + // + // Now: we add interval (a); but if (a) is empty, for cur.start==0, we skip it. + if cur.start > 0 { + m = append(m, interval32{start: uint32(invstart), last: cur.start - 1}) + } + invstart = int64(cur.last + 1) + } + return &runContainer32{iv: m} +} + +func (iv interval32) equal(b interval32) bool { + if iv.start == b.start { + return iv.last == b.last + } + return false +} + +func (iv interval32) isSuperSetOf(b interval32) bool { + return iv.start <= b.start && b.last <= iv.last +} + +func (iv interval32) subtractInterval(del interval32) (left []interval32, delcount int64) { + isect, isEmpty := intersectInterval32s(iv, del) + + if isEmpty { + return nil, 0 + } + if del.isSuperSetOf(iv) { + return nil, iv.runlen() + } + + switch { + case isect.start > iv.start && isect.last < iv.last: + new0 := interval32{start: iv.start, last: isect.start - 1} + new1 := interval32{start: isect.last + 1, last: iv.last} + return []interval32{new0, new1}, isect.runlen() + case isect.start == iv.start: + return []interval32{{start: isect.last + 1, last: iv.last}}, isect.runlen() + default: + return []interval32{{start: iv.start, last: isect.start - 1}}, isect.runlen() + } +} + +func (rc *runContainer32) isubtract(del interval32) { + origiv := make([]interval32, len(rc.iv)) + copy(origiv, rc.iv) + n := int64(len(rc.iv)) + if n == 0 { + return // already done. + } + + _, isEmpty := intersectInterval32s( + interval32{ + start: rc.iv[0].start, + last: rc.iv[n-1].last, + }, del) + if isEmpty { + return // done + } + // INVAR there is some intersection between rc and del + istart, startAlready, _ := rc.search(int64(del.start), nil) + ilast, lastAlready, _ := rc.search(int64(del.last), nil) + rc.card = -1 + if istart == -1 { + if ilast == n-1 && !lastAlready { + rc.iv = nil + return + } + } + // some intervals will remain + switch { + case startAlready && lastAlready: + res0, _ := rc.iv[istart].subtractInterval(del) + + // would overwrite values in iv b/c res0 can have len 2. so + // write to origiv instead. + lost := 1 + ilast - istart + changeSize := int64(len(res0)) - lost + newSize := int64(len(rc.iv)) + changeSize + + // rc.iv = append(pre, caboose...) + // return + + if ilast != istart { + res1, _ := rc.iv[ilast].subtractInterval(del) + res0 = append(res0, res1...) + changeSize = int64(len(res0)) - lost + newSize = int64(len(rc.iv)) + changeSize + } + switch { + case changeSize < 0: + // shrink + copy(rc.iv[istart+int64(len(res0)):], rc.iv[ilast+1:]) + copy(rc.iv[istart:istart+int64(len(res0))], res0) + rc.iv = rc.iv[:newSize] + return + case changeSize == 0: + // stay the same + copy(rc.iv[istart:istart+int64(len(res0))], res0) + return + default: + // changeSize > 0 is only possible when ilast == istart. + // Hence we now know: changeSize == 1 and len(res0) == 2 + rc.iv = append(rc.iv, interval32{}) + // len(rc.iv) is correct now, no need to rc.iv = rc.iv[:newSize] + + // copy the tail into place + copy(rc.iv[ilast+2:], rc.iv[ilast+1:]) + // copy the new item(s) into place + copy(rc.iv[istart:istart+2], res0) + return + } + + case !startAlready && !lastAlready: + // we get to discard whole intervals + + // from the search() definition: + + // if del.start is not present, then istart is + // set as follows: + // + // a) istart == n-1 if del.start is beyond our + // last interval32 in rc.iv; + // + // b) istart == -1 if del.start is before our first + // interval32 in rc.iv; + // + // c) istart is set to the minimum index of rc.iv + // which comes strictly before the del.start; + // so del.start > rc.iv[istart].last, + // and if istart+1 exists, then del.start < rc.iv[istart+1].startx + + // if del.last is not present, then ilast is + // set as follows: + // + // a) ilast == n-1 if del.last is beyond our + // last interval32 in rc.iv; + // + // b) ilast == -1 if del.last is before our first + // interval32 in rc.iv; + // + // c) ilast is set to the minimum index of rc.iv + // which comes strictly before the del.last; + // so del.last > rc.iv[ilast].last, + // and if ilast+1 exists, then del.last < rc.iv[ilast+1].start + + // INVAR: istart >= 0 + pre := rc.iv[:istart+1] + if ilast == n-1 { + rc.iv = pre + return + } + // INVAR: ilast < n-1 + lost := ilast - istart + changeSize := -lost + newSize := int64(len(rc.iv)) + changeSize + if changeSize != 0 { + copy(rc.iv[ilast+1+changeSize:], rc.iv[ilast+1:]) + } + rc.iv = rc.iv[:newSize] + return + + case startAlready && !lastAlready: + // we can only shrink or stay the same size + // i.e. we either eliminate the whole interval, + // or just cut off the right side. + res0, _ := rc.iv[istart].subtractInterval(del) + if len(res0) > 0 { + // len(res) must be 1 + rc.iv[istart] = res0[0] + } + lost := 1 + (ilast - istart) + changeSize := int64(len(res0)) - lost + newSize := int64(len(rc.iv)) + changeSize + if changeSize != 0 { + copy(rc.iv[ilast+1+changeSize:], rc.iv[ilast+1:]) + } + rc.iv = rc.iv[:newSize] + return + + case !startAlready && lastAlready: + // we can only shrink or stay the same size + res1, _ := rc.iv[ilast].subtractInterval(del) + lost := ilast - istart + changeSize := int64(len(res1)) - lost + newSize := int64(len(rc.iv)) + changeSize + if changeSize != 0 { + // move the tail first to make room for res1 + copy(rc.iv[ilast+1+changeSize:], rc.iv[ilast+1:]) + } + copy(rc.iv[istart+1:], res1) + rc.iv = rc.iv[:newSize] + return + } +} + +// compute rc minus b, and return the result as a new value (not inplace). +// port of run_container_andnot from CRoaring... +// https://github.com/RoaringBitmap/CRoaring/blob/master/src/containers/run.c#L435-L496 +func (rc *runContainer32) AndNotRunContainer32(b *runContainer32) *runContainer32 { + + if len(b.iv) == 0 || len(rc.iv) == 0 { + return rc + } + + dst := newRunContainer32() + apos := 0 + bpos := 0 + + a := rc + + astart := a.iv[apos].start + alast := a.iv[apos].last + bstart := b.iv[bpos].start + blast := b.iv[bpos].last + + alen := len(a.iv) + blen := len(b.iv) + + for apos < alen && bpos < blen { + switch { + case alast < bstart: + // output the first run + dst.iv = append(dst.iv, interval32{start: astart, last: alast}) + apos++ + if apos < alen { + astart = a.iv[apos].start + alast = a.iv[apos].last + } + case blast < astart: + // exit the second run + bpos++ + if bpos < blen { + bstart = b.iv[bpos].start + blast = b.iv[bpos].last + } + default: + // a: [ ] + // b: [ ] + // alast >= bstart + // blast >= astart + if astart < bstart { + dst.iv = append(dst.iv, interval32{start: astart, last: bstart - 1}) + } + if alast > blast { + astart = blast + 1 + } else { + apos++ + if apos < alen { + astart = a.iv[apos].start + alast = a.iv[apos].last + } + } + } + } + if apos < alen { + dst.iv = append(dst.iv, interval32{start: astart, last: alast}) + apos++ + if apos < alen { + dst.iv = append(dst.iv, a.iv[apos:]...) + } + } + + return dst +} + +func (rc *runContainer32) numberOfRuns() (nr int) { + return len(rc.iv) +} + +func (rc *runContainer32) containerType() contype { + return run32Contype +} + +func (rc *runContainer32) equals32(srb *runContainer32) bool { + //p("both rc32") + // Check if the containers are the same object. + if rc == srb { + //p("same object") + return true + } + + if len(srb.iv) != len(rc.iv) { + //p("iv len differ") + return false + } + + for i, v := range rc.iv { + if v != srb.iv[i] { + //p("differ at iv i=%v, srb.iv[i]=%v, rc.iv[i]=%v", i, srb.iv[i], rc.iv[i]) + return false + } + } + //p("all intervals same, returning true") + return true +} diff --git a/vendor/github.com/RoaringBitmap/roaring/rle16.go b/vendor/github.com/RoaringBitmap/roaring/rle16.go new file mode 100644 index 0000000..943159b --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/rle16.go @@ -0,0 +1,1667 @@ +package roaring + +// +// Copyright (c) 2016 by the roaring authors. +// Licensed under the Apache License, Version 2.0. +// +// We derive a few lines of code from the sort.Search +// function in the golang standard library. That function +// is Copyright 2009 The Go Authors, and licensed +// under the following BSD-style license. +/* +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +import ( + "fmt" + "sort" + "unsafe" +) + +//go:generate msgp -unexported + +// runContainer16 does run-length encoding of sets of +// uint16 integers. +type runContainer16 struct { + iv []interval16 + card int64 + + // avoid allocation during search + myOpts searchOptions `msg:"-"` +} + +// interval16 is the internal to runContainer16 +// structure that maintains the individual [Start, last] +// closed intervals. +type interval16 struct { + start uint16 + last uint16 +} + +// runlen returns the count of integers in the interval. +func (iv interval16) runlen() int64 { + return 1 + int64(iv.last) - int64(iv.start) +} + +// String produces a human viewable string of the contents. +func (iv interval16) String() string { + return fmt.Sprintf("[%d, %d]", iv.start, iv.last) +} + +func ivalString16(iv []interval16) string { + var s string + var j int + var p interval16 + for j, p = range iv { + s += fmt.Sprintf("%v:[%d, %d], ", j, p.start, p.last) + } + return s +} + +// String produces a human viewable string of the contents. +func (rc *runContainer16) String() string { + if len(rc.iv) == 0 { + return "runContainer16{}" + } + is := ivalString16(rc.iv) + return `runContainer16{` + is + `}` +} + +// uint16Slice is a sort.Sort convenience method +type uint16Slice []uint16 + +// Len returns the length of p. +func (p uint16Slice) Len() int { return len(p) } + +// Less returns p[i] < p[j] +func (p uint16Slice) Less(i, j int) bool { return p[i] < p[j] } + +// Swap swaps elements i and j. +func (p uint16Slice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } + +//msgp:ignore addHelper + +// addHelper helps build a runContainer16. +type addHelper16 struct { + runstart uint16 + runlen uint16 + actuallyAdded uint16 + m []interval16 + rc *runContainer16 +} + +func (ah *addHelper16) storeIval(runstart, runlen uint16) { + mi := interval16{start: runstart, last: runstart + runlen} + ah.m = append(ah.m, mi) +} + +func (ah *addHelper16) add(cur, prev uint16, i int) { + if cur == prev+1 { + ah.runlen++ + ah.actuallyAdded++ + } else { + if cur < prev { + panic(fmt.Sprintf("newRunContainer16FromVals sees "+ + "unsorted vals; vals[%v]=cur=%v < prev=%v. Sort your vals"+ + " before calling us with alreadySorted == true.", i, cur, prev)) + } + if cur == prev { + // ignore duplicates + } else { + ah.actuallyAdded++ + ah.storeIval(ah.runstart, ah.runlen) + ah.runstart = cur + ah.runlen = 0 + } + } +} + +// newRunContainerRange makes a new container made of just the specified closed interval [rangestart,rangelast] +func newRunContainer16Range(rangestart uint16, rangelast uint16) *runContainer16 { + rc := &runContainer16{} + rc.iv = append(rc.iv, interval16{start: rangestart, last: rangelast}) + return rc +} + +// newRunContainer16FromVals makes a new container from vals. +// +// For efficiency, vals should be sorted in ascending order. +// Ideally vals should not contain duplicates, but we detect and +// ignore them. If vals is already sorted in ascending order, then +// pass alreadySorted = true. Otherwise, for !alreadySorted, +// we will sort vals before creating a runContainer16 of them. +// We sort the original vals, so this will change what the +// caller sees in vals as a side effect. +func newRunContainer16FromVals(alreadySorted bool, vals ...uint16) *runContainer16 { + // keep this in sync with newRunContainer16FromArray below + + rc := &runContainer16{} + ah := addHelper16{rc: rc} + + if !alreadySorted { + sort.Sort(uint16Slice(vals)) + } + n := len(vals) + var cur, prev uint16 + switch { + case n == 0: + // nothing more + case n == 1: + ah.m = append(ah.m, interval16{start: vals[0], last: vals[0]}) + ah.actuallyAdded++ + default: + ah.runstart = vals[0] + ah.actuallyAdded++ + for i := 1; i < n; i++ { + prev = vals[i-1] + cur = vals[i] + ah.add(cur, prev, i) + } + ah.storeIval(ah.runstart, ah.runlen) + } + rc.iv = ah.m + rc.card = int64(ah.actuallyAdded) + return rc +} + +// newRunContainer16FromBitmapContainer makes a new run container from bc, +// somewhat efficiently. For reference, see the Java +// https://github.com/RoaringBitmap/RoaringBitmap/blob/master/src/main/java/org/roaringbitmap/RunContainer.java#L145-L192 +func newRunContainer16FromBitmapContainer(bc *bitmapContainer) *runContainer16 { + + rc := &runContainer16{} + nbrRuns := bc.numberOfRuns() + if nbrRuns == 0 { + return rc + } + rc.iv = make([]interval16, nbrRuns) + + longCtr := 0 // index of current long in bitmap + curWord := bc.bitmap[0] // its value + runCount := 0 + for { + // potentially multiword advance to first 1 bit + for curWord == 0 && longCtr < len(bc.bitmap)-1 { + longCtr++ + curWord = bc.bitmap[longCtr] + } + + if curWord == 0 { + // wrap up, no more runs + return rc + } + localRunStart := countTrailingZeros(curWord) + runStart := localRunStart + 64*longCtr + // stuff 1s into number's LSBs + curWordWith1s := curWord | (curWord - 1) + + // find the next 0, potentially in a later word + runEnd := 0 + for curWordWith1s == maxWord && longCtr < len(bc.bitmap)-1 { + longCtr++ + curWordWith1s = bc.bitmap[longCtr] + } + + if curWordWith1s == maxWord { + // a final unterminated run of 1s + runEnd = wordSizeInBits + longCtr*64 + rc.iv[runCount].start = uint16(runStart) + rc.iv[runCount].last = uint16(runEnd) - 1 + return rc + } + localRunEnd := countTrailingZeros(^curWordWith1s) + runEnd = localRunEnd + longCtr*64 + rc.iv[runCount].start = uint16(runStart) + rc.iv[runCount].last = uint16(runEnd) - 1 + runCount++ + // now, zero out everything right of runEnd. + curWord = curWordWith1s & (curWordWith1s + 1) + // We've lathered and rinsed, so repeat... + } + +} + +// +// newRunContainer16FromArray populates a new +// runContainer16 from the contents of arr. +// +func newRunContainer16FromArray(arr *arrayContainer) *runContainer16 { + // keep this in sync with newRunContainer16FromVals above + + rc := &runContainer16{} + ah := addHelper16{rc: rc} + + n := arr.getCardinality() + var cur, prev uint16 + switch { + case n == 0: + // nothing more + case n == 1: + ah.m = append(ah.m, interval16{start: arr.content[0], last: arr.content[0]}) + ah.actuallyAdded++ + default: + ah.runstart = arr.content[0] + ah.actuallyAdded++ + for i := 1; i < n; i++ { + prev = arr.content[i-1] + cur = arr.content[i] + ah.add(cur, prev, i) + } + ah.storeIval(ah.runstart, ah.runlen) + } + rc.iv = ah.m + rc.card = int64(ah.actuallyAdded) + return rc +} + +// set adds the integers in vals to the set. Vals +// must be sorted in increasing order; if not, you should set +// alreadySorted to false, and we will sort them in place for you. +// (Be aware of this side effect -- it will affect the callers +// view of vals). +// +// If you have a small number of additions to an already +// big runContainer16, calling Add() may be faster. +func (rc *runContainer16) set(alreadySorted bool, vals ...uint16) { + + rc2 := newRunContainer16FromVals(alreadySorted, vals...) + un := rc.union(rc2) + rc.iv = un.iv + rc.card = 0 +} + +// canMerge returns true iff the intervals +// a and b either overlap or they are +// contiguous and so can be merged into +// a single interval. +func canMerge16(a, b interval16) bool { + if int64(a.last)+1 < int64(b.start) { + return false + } + return int64(b.last)+1 >= int64(a.start) +} + +// haveOverlap differs from canMerge in that +// it tells you if the intersection of a +// and b would contain an element (otherwise +// it would be the empty set, and we return +// false). +func haveOverlap16(a, b interval16) bool { + if int64(a.last)+1 <= int64(b.start) { + return false + } + return int64(b.last)+1 > int64(a.start) +} + +// mergeInterval16s joins a and b into a +// new interval, and panics if it cannot. +func mergeInterval16s(a, b interval16) (res interval16) { + if !canMerge16(a, b) { + panic(fmt.Sprintf("cannot merge %#v and %#v", a, b)) + } + if b.start < a.start { + res.start = b.start + } else { + res.start = a.start + } + if b.last > a.last { + res.last = b.last + } else { + res.last = a.last + } + return +} + +// intersectInterval16s returns the intersection +// of a and b. The isEmpty flag will be true if +// a and b were disjoint. +func intersectInterval16s(a, b interval16) (res interval16, isEmpty bool) { + if !haveOverlap16(a, b) { + isEmpty = true + return + } + if b.start > a.start { + res.start = b.start + } else { + res.start = a.start + } + if b.last < a.last { + res.last = b.last + } else { + res.last = a.last + } + return +} + +// union merges two runContainer16s, producing +// a new runContainer16 with the union of rc and b. +func (rc *runContainer16) union(b *runContainer16) *runContainer16 { + + // rc is also known as 'a' here, but golint insisted we + // call it rc for consistency with the rest of the methods. + + var m []interval16 + + alim := int64(len(rc.iv)) + blim := int64(len(b.iv)) + + var na int64 // next from a + var nb int64 // next from b + + // merged holds the current merge output, which might + // get additional merges before being appended to m. + var merged interval16 + var mergedUsed bool // is merged being used at the moment? + + var cura interval16 // currently considering this interval16 from a + var curb interval16 // currently considering this interval16 from b + + pass := 0 + for na < alim && nb < blim { + pass++ + cura = rc.iv[na] + curb = b.iv[nb] + + if mergedUsed { + mergedUpdated := false + if canMerge16(cura, merged) { + merged = mergeInterval16s(cura, merged) + na = rc.indexOfIntervalAtOrAfter(int64(merged.last)+1, na+1) + mergedUpdated = true + } + if canMerge16(curb, merged) { + merged = mergeInterval16s(curb, merged) + nb = b.indexOfIntervalAtOrAfter(int64(merged.last)+1, nb+1) + mergedUpdated = true + } + if !mergedUpdated { + // we know that merged is disjoint from cura and curb + m = append(m, merged) + mergedUsed = false + } + continue + + } else { + // !mergedUsed + if !canMerge16(cura, curb) { + if cura.start < curb.start { + m = append(m, cura) + na++ + } else { + m = append(m, curb) + nb++ + } + } else { + merged = mergeInterval16s(cura, curb) + mergedUsed = true + na = rc.indexOfIntervalAtOrAfter(int64(merged.last)+1, na+1) + nb = b.indexOfIntervalAtOrAfter(int64(merged.last)+1, nb+1) + } + } + } + var aDone, bDone bool + if na >= alim { + aDone = true + } + if nb >= blim { + bDone = true + } + // finish by merging anything remaining into merged we can: + if mergedUsed { + if !aDone { + aAdds: + for na < alim { + cura = rc.iv[na] + if canMerge16(cura, merged) { + merged = mergeInterval16s(cura, merged) + na = rc.indexOfIntervalAtOrAfter(int64(merged.last)+1, na+1) + } else { + break aAdds + } + } + + } + + if !bDone { + bAdds: + for nb < blim { + curb = b.iv[nb] + if canMerge16(curb, merged) { + merged = mergeInterval16s(curb, merged) + nb = b.indexOfIntervalAtOrAfter(int64(merged.last)+1, nb+1) + } else { + break bAdds + } + } + + } + + m = append(m, merged) + } + if na < alim { + m = append(m, rc.iv[na:]...) + } + if nb < blim { + m = append(m, b.iv[nb:]...) + } + + res := &runContainer16{iv: m} + return res +} + +// unionCardinality returns the cardinality of the merger of two runContainer16s, the union of rc and b. +func (rc *runContainer16) unionCardinality(b *runContainer16) uint64 { + + // rc is also known as 'a' here, but golint insisted we + // call it rc for consistency with the rest of the methods. + answer := uint64(0) + + alim := int64(len(rc.iv)) + blim := int64(len(b.iv)) + + var na int64 // next from a + var nb int64 // next from b + + // merged holds the current merge output, which might + // get additional merges before being appended to m. + var merged interval16 + var mergedUsed bool // is merged being used at the moment? + + var cura interval16 // currently considering this interval16 from a + var curb interval16 // currently considering this interval16 from b + + pass := 0 + for na < alim && nb < blim { + pass++ + cura = rc.iv[na] + curb = b.iv[nb] + + if mergedUsed { + mergedUpdated := false + if canMerge16(cura, merged) { + merged = mergeInterval16s(cura, merged) + na = rc.indexOfIntervalAtOrAfter(int64(merged.last)+1, na+1) + mergedUpdated = true + } + if canMerge16(curb, merged) { + merged = mergeInterval16s(curb, merged) + nb = b.indexOfIntervalAtOrAfter(int64(merged.last)+1, nb+1) + mergedUpdated = true + } + if !mergedUpdated { + // we know that merged is disjoint from cura and curb + //m = append(m, merged) + answer += uint64(merged.last) - uint64(merged.start) + 1 + mergedUsed = false + } + continue + + } else { + // !mergedUsed + if !canMerge16(cura, curb) { + if cura.start < curb.start { + answer += uint64(cura.last) - uint64(cura.start) + 1 + //m = append(m, cura) + na++ + } else { + answer += uint64(curb.last) - uint64(curb.start) + 1 + //m = append(m, curb) + nb++ + } + } else { + merged = mergeInterval16s(cura, curb) + mergedUsed = true + na = rc.indexOfIntervalAtOrAfter(int64(merged.last)+1, na+1) + nb = b.indexOfIntervalAtOrAfter(int64(merged.last)+1, nb+1) + } + } + } + var aDone, bDone bool + if na >= alim { + aDone = true + } + if nb >= blim { + bDone = true + } + // finish by merging anything remaining into merged we can: + if mergedUsed { + if !aDone { + aAdds: + for na < alim { + cura = rc.iv[na] + if canMerge16(cura, merged) { + merged = mergeInterval16s(cura, merged) + na = rc.indexOfIntervalAtOrAfter(int64(merged.last)+1, na+1) + } else { + break aAdds + } + } + + } + + if !bDone { + bAdds: + for nb < blim { + curb = b.iv[nb] + if canMerge16(curb, merged) { + merged = mergeInterval16s(curb, merged) + nb = b.indexOfIntervalAtOrAfter(int64(merged.last)+1, nb+1) + } else { + break bAdds + } + } + + } + + //m = append(m, merged) + answer += uint64(merged.last) - uint64(merged.start) + 1 + } + for _, r := range rc.iv[na:] { + answer += uint64(r.last) - uint64(r.start) + 1 + } + for _, r := range b.iv[nb:] { + answer += uint64(r.last) - uint64(r.start) + 1 + } + return answer +} + +// indexOfIntervalAtOrAfter is a helper for union. +func (rc *runContainer16) indexOfIntervalAtOrAfter(key int64, startIndex int64) int64 { + rc.myOpts.startIndex = startIndex + rc.myOpts.endxIndex = 0 + + w, already, _ := rc.search(key, &rc.myOpts) + if already { + return w + } + return w + 1 +} + +// intersect returns a new runContainer16 holding the +// intersection of rc (also known as 'a') and b. +func (rc *runContainer16) intersect(b *runContainer16) *runContainer16 { + + a := rc + numa := int64(len(a.iv)) + numb := int64(len(b.iv)) + res := &runContainer16{} + if numa == 0 || numb == 0 { + return res + } + + if numa == 1 && numb == 1 { + if !haveOverlap16(a.iv[0], b.iv[0]) { + return res + } + } + + var output []interval16 + + var acuri int64 + var bcuri int64 + + astart := int64(a.iv[acuri].start) + bstart := int64(b.iv[bcuri].start) + + var intersection interval16 + var leftoverstart int64 + var isOverlap, isLeftoverA, isLeftoverB bool + var done bool + pass := 0 +toploop: + for acuri < numa && bcuri < numb { + pass++ + + isOverlap, isLeftoverA, isLeftoverB, leftoverstart, intersection = intersectWithLeftover16(astart, int64(a.iv[acuri].last), bstart, int64(b.iv[bcuri].last)) + + if !isOverlap { + switch { + case astart < bstart: + acuri, done = a.findNextIntervalThatIntersectsStartingFrom(acuri+1, bstart) + if done { + break toploop + } + astart = int64(a.iv[acuri].start) + + case astart > bstart: + bcuri, done = b.findNextIntervalThatIntersectsStartingFrom(bcuri+1, astart) + if done { + break toploop + } + bstart = int64(b.iv[bcuri].start) + + //default: + // panic("impossible that astart == bstart, since !isOverlap") + } + + } else { + // isOverlap + output = append(output, intersection) + switch { + case isLeftoverA: + // note that we change astart without advancing acuri, + // since we need to capture any 2ndary intersections with a.iv[acuri] + astart = leftoverstart + bcuri++ + if bcuri >= numb { + break toploop + } + bstart = int64(b.iv[bcuri].start) + case isLeftoverB: + // note that we change bstart without advancing bcuri, + // since we need to capture any 2ndary intersections with b.iv[bcuri] + bstart = leftoverstart + acuri++ + if acuri >= numa { + break toploop + } + astart = int64(a.iv[acuri].start) + default: + // neither had leftover, both completely consumed + // optionally, assert for sanity: + //if a.iv[acuri].endx != b.iv[bcuri].endx { + // panic("huh? should only be possible that endx agree now!") + //} + + // advance to next a interval + acuri++ + if acuri >= numa { + break toploop + } + astart = int64(a.iv[acuri].start) + + // advance to next b interval + bcuri++ + if bcuri >= numb { + break toploop + } + bstart = int64(b.iv[bcuri].start) + } + } + } // end for toploop + + if len(output) == 0 { + return res + } + + res.iv = output + return res +} + +// intersectCardinality returns the cardinality of the +// intersection of rc (also known as 'a') and b. +func (rc *runContainer16) intersectCardinality(b *runContainer16) int64 { + answer := int64(0) + + a := rc + numa := int64(len(a.iv)) + numb := int64(len(b.iv)) + if numa == 0 || numb == 0 { + return 0 + } + + if numa == 1 && numb == 1 { + if !haveOverlap16(a.iv[0], b.iv[0]) { + return 0 + } + } + + var acuri int64 + var bcuri int64 + + astart := int64(a.iv[acuri].start) + bstart := int64(b.iv[bcuri].start) + + var intersection interval16 + var leftoverstart int64 + var isOverlap, isLeftoverA, isLeftoverB bool + var done bool + pass := 0 +toploop: + for acuri < numa && bcuri < numb { + pass++ + + isOverlap, isLeftoverA, isLeftoverB, leftoverstart, intersection = intersectWithLeftover16(astart, int64(a.iv[acuri].last), bstart, int64(b.iv[bcuri].last)) + + if !isOverlap { + switch { + case astart < bstart: + acuri, done = a.findNextIntervalThatIntersectsStartingFrom(acuri+1, bstart) + if done { + break toploop + } + astart = int64(a.iv[acuri].start) + + case astart > bstart: + bcuri, done = b.findNextIntervalThatIntersectsStartingFrom(bcuri+1, astart) + if done { + break toploop + } + bstart = int64(b.iv[bcuri].start) + + //default: + // panic("impossible that astart == bstart, since !isOverlap") + } + + } else { + // isOverlap + answer += int64(intersection.last) - int64(intersection.start) + 1 + switch { + case isLeftoverA: + // note that we change astart without advancing acuri, + // since we need to capture any 2ndary intersections with a.iv[acuri] + astart = leftoverstart + bcuri++ + if bcuri >= numb { + break toploop + } + bstart = int64(b.iv[bcuri].start) + case isLeftoverB: + // note that we change bstart without advancing bcuri, + // since we need to capture any 2ndary intersections with b.iv[bcuri] + bstart = leftoverstart + acuri++ + if acuri >= numa { + break toploop + } + astart = int64(a.iv[acuri].start) + default: + // neither had leftover, both completely consumed + // optionally, assert for sanity: + //if a.iv[acuri].endx != b.iv[bcuri].endx { + // panic("huh? should only be possible that endx agree now!") + //} + + // advance to next a interval + acuri++ + if acuri >= numa { + break toploop + } + astart = int64(a.iv[acuri].start) + + // advance to next b interval + bcuri++ + if bcuri >= numb { + break toploop + } + bstart = int64(b.iv[bcuri].start) + } + } + } // end for toploop + + return answer +} + +// get returns true iff key is in the container. +func (rc *runContainer16) contains(key uint16) bool { + _, in, _ := rc.search(int64(key), nil) + return in +} + +// numIntervals returns the count of intervals in the container. +func (rc *runContainer16) numIntervals() int { + return len(rc.iv) +} + +// search returns alreadyPresent to indicate if the +// key is already in one of our interval16s. +// +// If key is alreadyPresent, then whichInterval16 tells +// you where. +// +// If key is not already present, then whichInterval16 is +// set as follows: +// +// a) whichInterval16 == len(rc.iv)-1 if key is beyond our +// last interval16 in rc.iv; +// +// b) whichInterval16 == -1 if key is before our first +// interval16 in rc.iv; +// +// c) whichInterval16 is set to the minimum index of rc.iv +// which comes strictly before the key; +// so rc.iv[whichInterval16].last < key, +// and if whichInterval16+1 exists, then key < rc.iv[whichInterval16+1].start +// (Note that whichInterval16+1 won't exist when +// whichInterval16 is the last interval.) +// +// runContainer16.search always returns whichInterval16 < len(rc.iv). +// +// If not nil, opts can be used to further restrict +// the search space. +// +func (rc *runContainer16) search(key int64, opts *searchOptions) (whichInterval16 int64, alreadyPresent bool, numCompares int) { + n := int64(len(rc.iv)) + if n == 0 { + return -1, false, 0 + } + + startIndex := int64(0) + endxIndex := n + if opts != nil { + startIndex = opts.startIndex + + // let endxIndex == 0 mean no effect + if opts.endxIndex > 0 { + endxIndex = opts.endxIndex + } + } + + // sort.Search returns the smallest index i + // in [0, n) at which f(i) is true, assuming that on the range [0, n), + // f(i) == true implies f(i+1) == true. + // If there is no such index, Search returns n. + + // For correctness, this began as verbatim snippet from + // sort.Search in the Go standard lib. + // We inline our comparison function for speed, and + // annotate with numCompares + // to observe and test that extra bounds are utilized. + i, j := startIndex, endxIndex + for i < j { + h := i + (j-i)/2 // avoid overflow when computing h as the bisector + // i <= h < j + numCompares++ + if !(key < int64(rc.iv[h].start)) { + i = h + 1 + } else { + j = h + } + } + below := i + // end std lib snippet. + + // The above is a simple in-lining and annotation of: + /* below := sort.Search(n, + func(i int) bool { + return key < rc.iv[i].start + }) + */ + whichInterval16 = below - 1 + + if below == n { + // all falses => key is >= start of all interval16s + // ... so does it belong to the last interval16? + if key < int64(rc.iv[n-1].last)+1 { + // yes, it belongs to the last interval16 + alreadyPresent = true + return + } + // no, it is beyond the last interval16. + // leave alreadyPreset = false + return + } + + // INVAR: key is below rc.iv[below] + if below == 0 { + // key is before the first first interval16. + // leave alreadyPresent = false + return + } + + // INVAR: key is >= rc.iv[below-1].start and + // key is < rc.iv[below].start + + // is key in below-1 interval16? + if key >= int64(rc.iv[below-1].start) && key < int64(rc.iv[below-1].last)+1 { + // yes, it is. key is in below-1 interval16. + alreadyPresent = true + return + } + + // INVAR: key >= rc.iv[below-1].endx && key < rc.iv[below].start + // leave alreadyPresent = false + return +} + +// cardinality returns the count of the integers stored in the +// runContainer16. +func (rc *runContainer16) cardinality() int64 { + if len(rc.iv) == 0 { + rc.card = 0 + return 0 + } + if rc.card > 0 { + return rc.card // already cached + } + // have to compute it + var n int64 + for _, p := range rc.iv { + n += p.runlen() + } + rc.card = n // cache it + return n +} + +// AsSlice decompresses the contents into a []uint16 slice. +func (rc *runContainer16) AsSlice() []uint16 { + s := make([]uint16, rc.cardinality()) + j := 0 + for _, p := range rc.iv { + for i := p.start; i <= p.last; i++ { + s[j] = i + j++ + } + } + return s +} + +// newRunContainer16 creates an empty run container. +func newRunContainer16() *runContainer16 { + return &runContainer16{} +} + +// newRunContainer16CopyIv creates a run container, initializing +// with a copy of the supplied iv slice. +// +func newRunContainer16CopyIv(iv []interval16) *runContainer16 { + rc := &runContainer16{ + iv: make([]interval16, len(iv)), + } + copy(rc.iv, iv) + return rc +} + +func (rc *runContainer16) Clone() *runContainer16 { + rc2 := newRunContainer16CopyIv(rc.iv) + return rc2 +} + +// newRunContainer16TakeOwnership returns a new runContainer16 +// backed by the provided iv slice, which we will +// assume exclusive control over from now on. +// +func newRunContainer16TakeOwnership(iv []interval16) *runContainer16 { + rc := &runContainer16{ + iv: iv, + } + return rc +} + +const baseRc16Size = int(unsafe.Sizeof(runContainer16{})) +const perIntervalRc16Size = int(unsafe.Sizeof(interval16{})) + +const baseDiskRc16Size = int(unsafe.Sizeof(uint16(0))) + +// see also runContainer16SerializedSizeInBytes(numRuns int) int + +// getSizeInBytes returns the number of bytes of memory +// required by this runContainer16. +func (rc *runContainer16) getSizeInBytes() int { + return perIntervalRc16Size*len(rc.iv) + baseRc16Size +} + +// runContainer16SerializedSizeInBytes returns the number of bytes of disk +// required to hold numRuns in a runContainer16. +func runContainer16SerializedSizeInBytes(numRuns int) int { + return perIntervalRc16Size*numRuns + baseDiskRc16Size +} + +// Add adds a single value k to the set. +func (rc *runContainer16) Add(k uint16) (wasNew bool) { + // TODO comment from runContainer16.java: + // it might be better and simpler to do return + // toBitmapOrArrayContainer(getCardinality()).add(k) + // but note that some unit tests use this method to build up test + // runcontainers without calling runOptimize + + k64 := int64(k) + + index, present, _ := rc.search(k64, nil) + if present { + return // already there + } + wasNew = true + + // increment card if it is cached already + if rc.card > 0 { + rc.card++ + } + n := int64(len(rc.iv)) + if index == -1 { + // we may need to extend the first run + if n > 0 { + if rc.iv[0].start == k+1 { + rc.iv[0].start = k + return + } + } + // nope, k stands alone, starting the new first interval16. + rc.iv = append([]interval16{{start: k, last: k}}, rc.iv...) + return + } + + // are we off the end? handle both index == n and index == n-1: + if index >= n-1 { + if int64(rc.iv[n-1].last)+1 == k64 { + rc.iv[n-1].last++ + return + } + rc.iv = append(rc.iv, interval16{start: k, last: k}) + return + } + + // INVAR: index and index+1 both exist, and k goes between them. + // + // Now: add k into the middle, + // possibly fusing with index or index+1 interval16 + // and possibly resulting in fusing of two interval16s + // that had a one integer gap. + + left := index + right := index + 1 + + // are we fusing left and right by adding k? + if int64(rc.iv[left].last)+1 == k64 && int64(rc.iv[right].start) == k64+1 { + // fuse into left + rc.iv[left].last = rc.iv[right].last + // remove redundant right + rc.iv = append(rc.iv[:left+1], rc.iv[right+1:]...) + return + } + + // are we an addition to left? + if int64(rc.iv[left].last)+1 == k64 { + // yes + rc.iv[left].last++ + return + } + + // are we an addition to right? + if int64(rc.iv[right].start) == k64+1 { + // yes + rc.iv[right].start = k + return + } + + // k makes a standalone new interval16, inserted in the middle + tail := append([]interval16{{start: k, last: k}}, rc.iv[right:]...) + rc.iv = append(rc.iv[:left+1], tail...) + return +} + +//msgp:ignore runIterator + +// runIterator16 advice: you must call Next() at least once +// before calling Cur(); and you should call HasNext() +// before calling Next() to insure there are contents. +type runIterator16 struct { + rc *runContainer16 + curIndex int64 + curPosInIndex uint16 + curSeq int64 +} + +// newRunIterator16 returns a new empty run container. +func (rc *runContainer16) newRunIterator16() *runIterator16 { + return &runIterator16{rc: rc, curIndex: -1} +} + +// HasNext returns false if calling Next will panic. It +// returns true when there is at least one more value +// available in the iteration sequence. +func (ri *runIterator16) hasNext() bool { + if len(ri.rc.iv) == 0 { + return false + } + if ri.curIndex == -1 { + return true + } + return ri.curSeq+1 < ri.rc.cardinality() +} + +// cur returns the current value pointed to by the iterator. +func (ri *runIterator16) cur() uint16 { + return ri.rc.iv[ri.curIndex].start + ri.curPosInIndex +} + +// Next returns the next value in the iteration sequence. +func (ri *runIterator16) next() uint16 { + if !ri.hasNext() { + panic("no Next available") + } + if ri.curIndex >= int64(len(ri.rc.iv)) { + panic("runIterator.Next() going beyond what is available") + } + if ri.curIndex == -1 { + // first time is special + ri.curIndex = 0 + } else { + ri.curPosInIndex++ + if int64(ri.rc.iv[ri.curIndex].start)+int64(ri.curPosInIndex) == int64(ri.rc.iv[ri.curIndex].last)+1 { + ri.curPosInIndex = 0 + ri.curIndex++ + } + ri.curSeq++ + } + return ri.cur() +} + +// remove removes the element that the iterator +// is on from the run container. You can use +// Cur if you want to double check what is about +// to be deleted. +func (ri *runIterator16) remove() uint16 { + n := ri.rc.cardinality() + if n == 0 { + panic("runIterator.Remove called on empty runContainer16") + } + cur := ri.cur() + + ri.rc.deleteAt(&ri.curIndex, &ri.curPosInIndex, &ri.curSeq) + return cur +} + +// remove removes key from the container. +func (rc *runContainer16) removeKey(key uint16) (wasPresent bool) { + + var index int64 + var curSeq int64 + index, wasPresent, _ = rc.search(int64(key), nil) + if !wasPresent { + return // already removed, nothing to do. + } + pos := key - rc.iv[index].start + rc.deleteAt(&index, &pos, &curSeq) + return +} + +// internal helper functions + +func (rc *runContainer16) deleteAt(curIndex *int64, curPosInIndex *uint16, curSeq *int64) { + rc.card-- + (*curSeq)-- + ci := *curIndex + pos := *curPosInIndex + + // are we first, last, or in the middle of our interval16? + switch { + case pos == 0: + if int64(rc.iv[ci].start) == int64(rc.iv[ci].last) { + // our interval disappears + rc.iv = append(rc.iv[:ci], rc.iv[ci+1:]...) + // curIndex stays the same, since the delete did + // the advance for us. + *curPosInIndex = 0 + } else { + rc.iv[ci].start++ // no longer overflowable + } + case int64(pos) == rc.iv[ci].runlen()-1: + // last + rc.iv[ci].last-- + // our interval16 cannot disappear, else we would have been pos == 0, case first above. + (*curPosInIndex)-- + // if we leave *curIndex alone, then Next() will work properly even after the delete. + default: + //middle + // split into two, adding an interval16 + new0 := interval16{ + start: rc.iv[ci].start, + last: rc.iv[ci].start + *curPosInIndex - 1} + + new1start := int64(rc.iv[ci].start) + int64(*curPosInIndex) + 1 + if new1start > int64(MaxUint16) { + panic("overflow?!?!") + } + new1 := interval16{ + start: uint16(new1start), + last: rc.iv[ci].last} + tail := append([]interval16{new0, new1}, rc.iv[ci+1:]...) + rc.iv = append(rc.iv[:ci], tail...) + // update curIndex and curPosInIndex + (*curIndex)++ + *curPosInIndex = 0 + } + +} + +func have4Overlap16(astart, alast, bstart, blast int64) bool { + if alast+1 <= bstart { + return false + } + return blast+1 > astart +} + +func intersectWithLeftover16(astart, alast, bstart, blast int64) (isOverlap, isLeftoverA, isLeftoverB bool, leftoverstart int64, intersection interval16) { + if !have4Overlap16(astart, alast, bstart, blast) { + return + } + isOverlap = true + + // do the intersection: + if bstart > astart { + intersection.start = uint16(bstart) + } else { + intersection.start = uint16(astart) + } + switch { + case blast < alast: + isLeftoverA = true + leftoverstart = blast + 1 + intersection.last = uint16(blast) + case alast < blast: + isLeftoverB = true + leftoverstart = alast + 1 + intersection.last = uint16(alast) + default: + // alast == blast + intersection.last = uint16(alast) + } + + return +} + +func (rc *runContainer16) findNextIntervalThatIntersectsStartingFrom(startIndex int64, key int64) (index int64, done bool) { + + rc.myOpts.startIndex = startIndex + rc.myOpts.endxIndex = 0 + + w, _, _ := rc.search(key, &rc.myOpts) + // rc.search always returns w < len(rc.iv) + if w < startIndex { + // not found and comes before lower bound startIndex, + // so just use the lower bound. + if startIndex == int64(len(rc.iv)) { + // also this bump up means that we are done + return startIndex, true + } + return startIndex, false + } + + return w, false +} + +func sliceToString16(m []interval16) string { + s := "" + for i := range m { + s += fmt.Sprintf("%v: %s, ", i, m[i]) + } + return s +} + +// selectInt16 returns the j-th value in the container. +// We panic of j is out of bounds. +func (rc *runContainer16) selectInt16(j uint16) int { + n := rc.cardinality() + if int64(j) > n { + panic(fmt.Sprintf("Cannot select %v since Cardinality is %v", j, n)) + } + + var offset int64 + for k := range rc.iv { + nextOffset := offset + rc.iv[k].runlen() + 1 + if nextOffset > int64(j) { + return int(int64(rc.iv[k].start) + (int64(j) - offset)) + } + offset = nextOffset + } + panic(fmt.Sprintf("Cannot select %v since Cardinality is %v", j, n)) +} + +// helper for invert +func (rc *runContainer16) invertlastInterval(origin uint16, lastIdx int) []interval16 { + cur := rc.iv[lastIdx] + if cur.last == MaxUint16 { + if cur.start == origin { + return nil // empty container + } + return []interval16{{start: origin, last: cur.start - 1}} + } + if cur.start == origin { + return []interval16{{start: cur.last + 1, last: MaxUint16}} + } + // invert splits + return []interval16{ + {start: origin, last: cur.start - 1}, + {start: cur.last + 1, last: MaxUint16}, + } +} + +// invert returns a new container (not inplace), that is +// the inversion of rc. For each bit b in rc, the +// returned value has !b +func (rc *runContainer16) invert() *runContainer16 { + ni := len(rc.iv) + var m []interval16 + switch ni { + case 0: + return &runContainer16{iv: []interval16{{0, MaxUint16}}} + case 1: + return &runContainer16{iv: rc.invertlastInterval(0, 0)} + } + var invstart int64 + ult := ni - 1 + for i, cur := range rc.iv { + if i == ult { + // invertlastInteval will add both intervals (b) and (c) in + // diagram below. + m = append(m, rc.invertlastInterval(uint16(invstart), i)...) + break + } + // INVAR: i and cur are not the last interval, there is a next at i+1 + // + // ........[cur.start, cur.last] ...... [next.start, next.last].... + // ^ ^ ^ + // (a) (b) (c) + // + // Now: we add interval (a); but if (a) is empty, for cur.start==0, we skip it. + if cur.start > 0 { + m = append(m, interval16{start: uint16(invstart), last: cur.start - 1}) + } + invstart = int64(cur.last + 1) + } + return &runContainer16{iv: m} +} + +func (iv interval16) equal(b interval16) bool { + if iv.start == b.start { + return iv.last == b.last + } + return false +} + +func (iv interval16) isSuperSetOf(b interval16) bool { + return iv.start <= b.start && b.last <= iv.last +} + +func (iv interval16) subtractInterval(del interval16) (left []interval16, delcount int64) { + isect, isEmpty := intersectInterval16s(iv, del) + + if isEmpty { + return nil, 0 + } + if del.isSuperSetOf(iv) { + return nil, iv.runlen() + } + + switch { + case isect.start > iv.start && isect.last < iv.last: + new0 := interval16{start: iv.start, last: isect.start - 1} + new1 := interval16{start: isect.last + 1, last: iv.last} + return []interval16{new0, new1}, isect.runlen() + case isect.start == iv.start: + return []interval16{{start: isect.last + 1, last: iv.last}}, isect.runlen() + default: + return []interval16{{start: iv.start, last: isect.start - 1}}, isect.runlen() + } +} + +func (rc *runContainer16) isubtract(del interval16) { + origiv := make([]interval16, len(rc.iv)) + copy(origiv, rc.iv) + n := int64(len(rc.iv)) + if n == 0 { + return // already done. + } + + _, isEmpty := intersectInterval16s( + interval16{ + start: rc.iv[0].start, + last: rc.iv[n-1].last, + }, del) + if isEmpty { + return // done + } + // INVAR there is some intersection between rc and del + istart, startAlready, _ := rc.search(int64(del.start), nil) + ilast, lastAlready, _ := rc.search(int64(del.last), nil) + rc.card = -1 + if istart == -1 { + if ilast == n-1 && !lastAlready { + rc.iv = nil + return + } + } + // some intervals will remain + switch { + case startAlready && lastAlready: + res0, _ := rc.iv[istart].subtractInterval(del) + + // would overwrite values in iv b/c res0 can have len 2. so + // write to origiv instead. + lost := 1 + ilast - istart + changeSize := int64(len(res0)) - lost + newSize := int64(len(rc.iv)) + changeSize + + // rc.iv = append(pre, caboose...) + // return + + if ilast != istart { + res1, _ := rc.iv[ilast].subtractInterval(del) + res0 = append(res0, res1...) + changeSize = int64(len(res0)) - lost + newSize = int64(len(rc.iv)) + changeSize + } + switch { + case changeSize < 0: + // shrink + copy(rc.iv[istart+int64(len(res0)):], rc.iv[ilast+1:]) + copy(rc.iv[istart:istart+int64(len(res0))], res0) + rc.iv = rc.iv[:newSize] + return + case changeSize == 0: + // stay the same + copy(rc.iv[istart:istart+int64(len(res0))], res0) + return + default: + // changeSize > 0 is only possible when ilast == istart. + // Hence we now know: changeSize == 1 and len(res0) == 2 + rc.iv = append(rc.iv, interval16{}) + // len(rc.iv) is correct now, no need to rc.iv = rc.iv[:newSize] + + // copy the tail into place + copy(rc.iv[ilast+2:], rc.iv[ilast+1:]) + // copy the new item(s) into place + copy(rc.iv[istart:istart+2], res0) + return + } + + case !startAlready && !lastAlready: + // we get to discard whole intervals + + // from the search() definition: + + // if del.start is not present, then istart is + // set as follows: + // + // a) istart == n-1 if del.start is beyond our + // last interval16 in rc.iv; + // + // b) istart == -1 if del.start is before our first + // interval16 in rc.iv; + // + // c) istart is set to the minimum index of rc.iv + // which comes strictly before the del.start; + // so del.start > rc.iv[istart].last, + // and if istart+1 exists, then del.start < rc.iv[istart+1].startx + + // if del.last is not present, then ilast is + // set as follows: + // + // a) ilast == n-1 if del.last is beyond our + // last interval16 in rc.iv; + // + // b) ilast == -1 if del.last is before our first + // interval16 in rc.iv; + // + // c) ilast is set to the minimum index of rc.iv + // which comes strictly before the del.last; + // so del.last > rc.iv[ilast].last, + // and if ilast+1 exists, then del.last < rc.iv[ilast+1].start + + // INVAR: istart >= 0 + pre := rc.iv[:istart+1] + if ilast == n-1 { + rc.iv = pre + return + } + // INVAR: ilast < n-1 + lost := ilast - istart + changeSize := -lost + newSize := int64(len(rc.iv)) + changeSize + if changeSize != 0 { + copy(rc.iv[ilast+1+changeSize:], rc.iv[ilast+1:]) + } + rc.iv = rc.iv[:newSize] + return + + case startAlready && !lastAlready: + // we can only shrink or stay the same size + // i.e. we either eliminate the whole interval, + // or just cut off the right side. + res0, _ := rc.iv[istart].subtractInterval(del) + if len(res0) > 0 { + // len(res) must be 1 + rc.iv[istart] = res0[0] + } + lost := 1 + (ilast - istart) + changeSize := int64(len(res0)) - lost + newSize := int64(len(rc.iv)) + changeSize + if changeSize != 0 { + copy(rc.iv[ilast+1+changeSize:], rc.iv[ilast+1:]) + } + rc.iv = rc.iv[:newSize] + return + + case !startAlready && lastAlready: + // we can only shrink or stay the same size + res1, _ := rc.iv[ilast].subtractInterval(del) + lost := ilast - istart + changeSize := int64(len(res1)) - lost + newSize := int64(len(rc.iv)) + changeSize + if changeSize != 0 { + // move the tail first to make room for res1 + copy(rc.iv[ilast+1+changeSize:], rc.iv[ilast+1:]) + } + copy(rc.iv[istart+1:], res1) + rc.iv = rc.iv[:newSize] + return + } +} + +// compute rc minus b, and return the result as a new value (not inplace). +// port of run_container_andnot from CRoaring... +// https://github.com/RoaringBitmap/CRoaring/blob/master/src/containers/run.c#L435-L496 +func (rc *runContainer16) AndNotRunContainer16(b *runContainer16) *runContainer16 { + + if len(b.iv) == 0 || len(rc.iv) == 0 { + return rc + } + + dst := newRunContainer16() + apos := 0 + bpos := 0 + + a := rc + + astart := a.iv[apos].start + alast := a.iv[apos].last + bstart := b.iv[bpos].start + blast := b.iv[bpos].last + + alen := len(a.iv) + blen := len(b.iv) + + for apos < alen && bpos < blen { + switch { + case alast < bstart: + // output the first run + dst.iv = append(dst.iv, interval16{start: astart, last: alast}) + apos++ + if apos < alen { + astart = a.iv[apos].start + alast = a.iv[apos].last + } + case blast < astart: + // exit the second run + bpos++ + if bpos < blen { + bstart = b.iv[bpos].start + blast = b.iv[bpos].last + } + default: + // a: [ ] + // b: [ ] + // alast >= bstart + // blast >= astart + if astart < bstart { + dst.iv = append(dst.iv, interval16{start: astart, last: bstart - 1}) + } + if alast > blast { + astart = blast + 1 + } else { + apos++ + if apos < alen { + astart = a.iv[apos].start + alast = a.iv[apos].last + } + } + } + } + if apos < alen { + dst.iv = append(dst.iv, interval16{start: astart, last: alast}) + apos++ + if apos < alen { + dst.iv = append(dst.iv, a.iv[apos:]...) + } + } + + return dst +} + +func (rc *runContainer16) numberOfRuns() (nr int) { + return len(rc.iv) +} + +func (rc *runContainer16) containerType() contype { + return run16Contype +} + +func (rc *runContainer16) equals16(srb *runContainer16) bool { + //p("both rc16") + // Check if the containers are the same object. + if rc == srb { + //p("same object") + return true + } + + if len(srb.iv) != len(rc.iv) { + //p("iv len differ") + return false + } + + for i, v := range rc.iv { + if v != srb.iv[i] { + //p("differ at iv i=%v, srb.iv[i]=%v, rc.iv[i]=%v", i, srb.iv[i], rc.iv[i]) + return false + } + } + //p("all intervals same, returning true") + return true +} diff --git a/vendor/github.com/RoaringBitmap/roaring/rle16_gen.go b/vendor/github.com/RoaringBitmap/roaring/rle16_gen.go new file mode 100644 index 0000000..3889496 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/rle16_gen.go @@ -0,0 +1,1118 @@ +package roaring + +// NOTE: THIS FILE WAS PRODUCED BY THE +// MSGP CODE GENERATION TOOL (github.com/tinylib/msgp) +// DO NOT EDIT + +import "github.com/tinylib/msgp/msgp" + +// DecodeMsg implements msgp.Decodable +func (z *addHelper16) DecodeMsg(dc *msgp.Reader) (err error) { + var field []byte + _ = field + var zbai uint32 + zbai, err = dc.ReadMapHeader() + if err != nil { + return + } + for zbai > 0 { + zbai-- + field, err = dc.ReadMapKeyPtr() + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "runstart": + z.runstart, err = dc.ReadUint16() + if err != nil { + return + } + case "runlen": + z.runlen, err = dc.ReadUint16() + if err != nil { + return + } + case "actuallyAdded": + z.actuallyAdded, err = dc.ReadUint16() + if err != nil { + return + } + case "m": + var zcmr uint32 + zcmr, err = dc.ReadArrayHeader() + if err != nil { + return + } + if cap(z.m) >= int(zcmr) { + z.m = (z.m)[:zcmr] + } else { + z.m = make([]interval16, zcmr) + } + for zxvk := range z.m { + var zajw uint32 + zajw, err = dc.ReadMapHeader() + if err != nil { + return + } + for zajw > 0 { + zajw-- + field, err = dc.ReadMapKeyPtr() + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "start": + z.m[zxvk].start, err = dc.ReadUint16() + if err != nil { + return + } + case "last": + z.m[zxvk].last, err = dc.ReadUint16() + if err != nil { + return + } + default: + err = dc.Skip() + if err != nil { + return + } + } + } + } + case "rc": + if dc.IsNil() { + err = dc.ReadNil() + if err != nil { + return + } + z.rc = nil + } else { + if z.rc == nil { + z.rc = new(runContainer16) + } + var zwht uint32 + zwht, err = dc.ReadMapHeader() + if err != nil { + return + } + for zwht > 0 { + zwht-- + field, err = dc.ReadMapKeyPtr() + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "iv": + var zhct uint32 + zhct, err = dc.ReadArrayHeader() + if err != nil { + return + } + if cap(z.rc.iv) >= int(zhct) { + z.rc.iv = (z.rc.iv)[:zhct] + } else { + z.rc.iv = make([]interval16, zhct) + } + for zbzg := range z.rc.iv { + var zcua uint32 + zcua, err = dc.ReadMapHeader() + if err != nil { + return + } + for zcua > 0 { + zcua-- + field, err = dc.ReadMapKeyPtr() + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "start": + z.rc.iv[zbzg].start, err = dc.ReadUint16() + if err != nil { + return + } + case "last": + z.rc.iv[zbzg].last, err = dc.ReadUint16() + if err != nil { + return + } + default: + err = dc.Skip() + if err != nil { + return + } + } + } + } + case "card": + z.rc.card, err = dc.ReadInt64() + if err != nil { + return + } + default: + err = dc.Skip() + if err != nil { + return + } + } + } + } + default: + err = dc.Skip() + if err != nil { + return + } + } + } + return +} + +// EncodeMsg implements msgp.Encodable +func (z *addHelper16) EncodeMsg(en *msgp.Writer) (err error) { + // map header, size 5 + // write "runstart" + err = en.Append(0x85, 0xa8, 0x72, 0x75, 0x6e, 0x73, 0x74, 0x61, 0x72, 0x74) + if err != nil { + return err + } + err = en.WriteUint16(z.runstart) + if err != nil { + return + } + // write "runlen" + err = en.Append(0xa6, 0x72, 0x75, 0x6e, 0x6c, 0x65, 0x6e) + if err != nil { + return err + } + err = en.WriteUint16(z.runlen) + if err != nil { + return + } + // write "actuallyAdded" + err = en.Append(0xad, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x41, 0x64, 0x64, 0x65, 0x64) + if err != nil { + return err + } + err = en.WriteUint16(z.actuallyAdded) + if err != nil { + return + } + // write "m" + err = en.Append(0xa1, 0x6d) + if err != nil { + return err + } + err = en.WriteArrayHeader(uint32(len(z.m))) + if err != nil { + return + } + for zxvk := range z.m { + // map header, size 2 + // write "start" + err = en.Append(0x82, 0xa5, 0x73, 0x74, 0x61, 0x72, 0x74) + if err != nil { + return err + } + err = en.WriteUint16(z.m[zxvk].start) + if err != nil { + return + } + // write "last" + err = en.Append(0xa4, 0x6c, 0x61, 0x73, 0x74) + if err != nil { + return err + } + err = en.WriteUint16(z.m[zxvk].last) + if err != nil { + return + } + } + // write "rc" + err = en.Append(0xa2, 0x72, 0x63) + if err != nil { + return err + } + if z.rc == nil { + err = en.WriteNil() + if err != nil { + return + } + } else { + // map header, size 2 + // write "iv" + err = en.Append(0x82, 0xa2, 0x69, 0x76) + if err != nil { + return err + } + err = en.WriteArrayHeader(uint32(len(z.rc.iv))) + if err != nil { + return + } + for zbzg := range z.rc.iv { + // map header, size 2 + // write "start" + err = en.Append(0x82, 0xa5, 0x73, 0x74, 0x61, 0x72, 0x74) + if err != nil { + return err + } + err = en.WriteUint16(z.rc.iv[zbzg].start) + if err != nil { + return + } + // write "last" + err = en.Append(0xa4, 0x6c, 0x61, 0x73, 0x74) + if err != nil { + return err + } + err = en.WriteUint16(z.rc.iv[zbzg].last) + if err != nil { + return + } + } + // write "card" + err = en.Append(0xa4, 0x63, 0x61, 0x72, 0x64) + if err != nil { + return err + } + err = en.WriteInt64(z.rc.card) + if err != nil { + return + } + } + return +} + +// MarshalMsg implements msgp.Marshaler +func (z *addHelper16) MarshalMsg(b []byte) (o []byte, err error) { + o = msgp.Require(b, z.Msgsize()) + // map header, size 5 + // string "runstart" + o = append(o, 0x85, 0xa8, 0x72, 0x75, 0x6e, 0x73, 0x74, 0x61, 0x72, 0x74) + o = msgp.AppendUint16(o, z.runstart) + // string "runlen" + o = append(o, 0xa6, 0x72, 0x75, 0x6e, 0x6c, 0x65, 0x6e) + o = msgp.AppendUint16(o, z.runlen) + // string "actuallyAdded" + o = append(o, 0xad, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x41, 0x64, 0x64, 0x65, 0x64) + o = msgp.AppendUint16(o, z.actuallyAdded) + // string "m" + o = append(o, 0xa1, 0x6d) + o = msgp.AppendArrayHeader(o, uint32(len(z.m))) + for zxvk := range z.m { + // map header, size 2 + // string "start" + o = append(o, 0x82, 0xa5, 0x73, 0x74, 0x61, 0x72, 0x74) + o = msgp.AppendUint16(o, z.m[zxvk].start) + // string "last" + o = append(o, 0xa4, 0x6c, 0x61, 0x73, 0x74) + o = msgp.AppendUint16(o, z.m[zxvk].last) + } + // string "rc" + o = append(o, 0xa2, 0x72, 0x63) + if z.rc == nil { + o = msgp.AppendNil(o) + } else { + // map header, size 2 + // string "iv" + o = append(o, 0x82, 0xa2, 0x69, 0x76) + o = msgp.AppendArrayHeader(o, uint32(len(z.rc.iv))) + for zbzg := range z.rc.iv { + // map header, size 2 + // string "start" + o = append(o, 0x82, 0xa5, 0x73, 0x74, 0x61, 0x72, 0x74) + o = msgp.AppendUint16(o, z.rc.iv[zbzg].start) + // string "last" + o = append(o, 0xa4, 0x6c, 0x61, 0x73, 0x74) + o = msgp.AppendUint16(o, z.rc.iv[zbzg].last) + } + // string "card" + o = append(o, 0xa4, 0x63, 0x61, 0x72, 0x64) + o = msgp.AppendInt64(o, z.rc.card) + } + return +} + +// UnmarshalMsg implements msgp.Unmarshaler +func (z *addHelper16) UnmarshalMsg(bts []byte) (o []byte, err error) { + var field []byte + _ = field + var zxhx uint32 + zxhx, bts, err = msgp.ReadMapHeaderBytes(bts) + if err != nil { + return + } + for zxhx > 0 { + zxhx-- + field, bts, err = msgp.ReadMapKeyZC(bts) + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "runstart": + z.runstart, bts, err = msgp.ReadUint16Bytes(bts) + if err != nil { + return + } + case "runlen": + z.runlen, bts, err = msgp.ReadUint16Bytes(bts) + if err != nil { + return + } + case "actuallyAdded": + z.actuallyAdded, bts, err = msgp.ReadUint16Bytes(bts) + if err != nil { + return + } + case "m": + var zlqf uint32 + zlqf, bts, err = msgp.ReadArrayHeaderBytes(bts) + if err != nil { + return + } + if cap(z.m) >= int(zlqf) { + z.m = (z.m)[:zlqf] + } else { + z.m = make([]interval16, zlqf) + } + for zxvk := range z.m { + var zdaf uint32 + zdaf, bts, err = msgp.ReadMapHeaderBytes(bts) + if err != nil { + return + } + for zdaf > 0 { + zdaf-- + field, bts, err = msgp.ReadMapKeyZC(bts) + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "start": + z.m[zxvk].start, bts, err = msgp.ReadUint16Bytes(bts) + if err != nil { + return + } + case "last": + z.m[zxvk].last, bts, err = msgp.ReadUint16Bytes(bts) + if err != nil { + return + } + default: + bts, err = msgp.Skip(bts) + if err != nil { + return + } + } + } + } + case "rc": + if msgp.IsNil(bts) { + bts, err = msgp.ReadNilBytes(bts) + if err != nil { + return + } + z.rc = nil + } else { + if z.rc == nil { + z.rc = new(runContainer16) + } + var zpks uint32 + zpks, bts, err = msgp.ReadMapHeaderBytes(bts) + if err != nil { + return + } + for zpks > 0 { + zpks-- + field, bts, err = msgp.ReadMapKeyZC(bts) + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "iv": + var zjfb uint32 + zjfb, bts, err = msgp.ReadArrayHeaderBytes(bts) + if err != nil { + return + } + if cap(z.rc.iv) >= int(zjfb) { + z.rc.iv = (z.rc.iv)[:zjfb] + } else { + z.rc.iv = make([]interval16, zjfb) + } + for zbzg := range z.rc.iv { + var zcxo uint32 + zcxo, bts, err = msgp.ReadMapHeaderBytes(bts) + if err != nil { + return + } + for zcxo > 0 { + zcxo-- + field, bts, err = msgp.ReadMapKeyZC(bts) + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "start": + z.rc.iv[zbzg].start, bts, err = msgp.ReadUint16Bytes(bts) + if err != nil { + return + } + case "last": + z.rc.iv[zbzg].last, bts, err = msgp.ReadUint16Bytes(bts) + if err != nil { + return + } + default: + bts, err = msgp.Skip(bts) + if err != nil { + return + } + } + } + } + case "card": + z.rc.card, bts, err = msgp.ReadInt64Bytes(bts) + if err != nil { + return + } + default: + bts, err = msgp.Skip(bts) + if err != nil { + return + } + } + } + } + default: + bts, err = msgp.Skip(bts) + if err != nil { + return + } + } + } + o = bts + return +} + +// Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message +func (z *addHelper16) Msgsize() (s int) { + s = 1 + 9 + msgp.Uint16Size + 7 + msgp.Uint16Size + 14 + msgp.Uint16Size + 2 + msgp.ArrayHeaderSize + (len(z.m) * (12 + msgp.Uint16Size + msgp.Uint16Size)) + 3 + if z.rc == nil { + s += msgp.NilSize + } else { + s += 1 + 3 + msgp.ArrayHeaderSize + (len(z.rc.iv) * (12 + msgp.Uint16Size + msgp.Uint16Size)) + 5 + msgp.Int64Size + } + return +} + +// DecodeMsg implements msgp.Decodable +func (z *interval16) DecodeMsg(dc *msgp.Reader) (err error) { + var field []byte + _ = field + var zeff uint32 + zeff, err = dc.ReadMapHeader() + if err != nil { + return + } + for zeff > 0 { + zeff-- + field, err = dc.ReadMapKeyPtr() + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "start": + z.start, err = dc.ReadUint16() + if err != nil { + return + } + case "last": + z.last, err = dc.ReadUint16() + if err != nil { + return + } + default: + err = dc.Skip() + if err != nil { + return + } + } + } + return +} + +// EncodeMsg implements msgp.Encodable +func (z interval16) EncodeMsg(en *msgp.Writer) (err error) { + // map header, size 2 + // write "start" + err = en.Append(0x82, 0xa5, 0x73, 0x74, 0x61, 0x72, 0x74) + if err != nil { + return err + } + err = en.WriteUint16(z.start) + if err != nil { + return + } + // write "last" + err = en.Append(0xa4, 0x6c, 0x61, 0x73, 0x74) + if err != nil { + return err + } + err = en.WriteUint16(z.last) + if err != nil { + return + } + return +} + +// MarshalMsg implements msgp.Marshaler +func (z interval16) MarshalMsg(b []byte) (o []byte, err error) { + o = msgp.Require(b, z.Msgsize()) + // map header, size 2 + // string "start" + o = append(o, 0x82, 0xa5, 0x73, 0x74, 0x61, 0x72, 0x74) + o = msgp.AppendUint16(o, z.start) + // string "last" + o = append(o, 0xa4, 0x6c, 0x61, 0x73, 0x74) + o = msgp.AppendUint16(o, z.last) + return +} + +// UnmarshalMsg implements msgp.Unmarshaler +func (z *interval16) UnmarshalMsg(bts []byte) (o []byte, err error) { + var field []byte + _ = field + var zrsw uint32 + zrsw, bts, err = msgp.ReadMapHeaderBytes(bts) + if err != nil { + return + } + for zrsw > 0 { + zrsw-- + field, bts, err = msgp.ReadMapKeyZC(bts) + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "start": + z.start, bts, err = msgp.ReadUint16Bytes(bts) + if err != nil { + return + } + case "last": + z.last, bts, err = msgp.ReadUint16Bytes(bts) + if err != nil { + return + } + default: + bts, err = msgp.Skip(bts) + if err != nil { + return + } + } + } + o = bts + return +} + +// Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message +func (z interval16) Msgsize() (s int) { + s = 1 + 6 + msgp.Uint16Size + 5 + msgp.Uint16Size + return +} + +// DecodeMsg implements msgp.Decodable +func (z *runContainer16) DecodeMsg(dc *msgp.Reader) (err error) { + var field []byte + _ = field + var zdnj uint32 + zdnj, err = dc.ReadMapHeader() + if err != nil { + return + } + for zdnj > 0 { + zdnj-- + field, err = dc.ReadMapKeyPtr() + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "iv": + var zobc uint32 + zobc, err = dc.ReadArrayHeader() + if err != nil { + return + } + if cap(z.iv) >= int(zobc) { + z.iv = (z.iv)[:zobc] + } else { + z.iv = make([]interval16, zobc) + } + for zxpk := range z.iv { + var zsnv uint32 + zsnv, err = dc.ReadMapHeader() + if err != nil { + return + } + for zsnv > 0 { + zsnv-- + field, err = dc.ReadMapKeyPtr() + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "start": + z.iv[zxpk].start, err = dc.ReadUint16() + if err != nil { + return + } + case "last": + z.iv[zxpk].last, err = dc.ReadUint16() + if err != nil { + return + } + default: + err = dc.Skip() + if err != nil { + return + } + } + } + } + case "card": + z.card, err = dc.ReadInt64() + if err != nil { + return + } + default: + err = dc.Skip() + if err != nil { + return + } + } + } + return +} + +// EncodeMsg implements msgp.Encodable +func (z *runContainer16) EncodeMsg(en *msgp.Writer) (err error) { + // map header, size 2 + // write "iv" + err = en.Append(0x82, 0xa2, 0x69, 0x76) + if err != nil { + return err + } + err = en.WriteArrayHeader(uint32(len(z.iv))) + if err != nil { + return + } + for zxpk := range z.iv { + // map header, size 2 + // write "start" + err = en.Append(0x82, 0xa5, 0x73, 0x74, 0x61, 0x72, 0x74) + if err != nil { + return err + } + err = en.WriteUint16(z.iv[zxpk].start) + if err != nil { + return + } + // write "last" + err = en.Append(0xa4, 0x6c, 0x61, 0x73, 0x74) + if err != nil { + return err + } + err = en.WriteUint16(z.iv[zxpk].last) + if err != nil { + return + } + } + // write "card" + err = en.Append(0xa4, 0x63, 0x61, 0x72, 0x64) + if err != nil { + return err + } + err = en.WriteInt64(z.card) + if err != nil { + return + } + return +} + +// MarshalMsg implements msgp.Marshaler +func (z *runContainer16) MarshalMsg(b []byte) (o []byte, err error) { + o = msgp.Require(b, z.Msgsize()) + // map header, size 2 + // string "iv" + o = append(o, 0x82, 0xa2, 0x69, 0x76) + o = msgp.AppendArrayHeader(o, uint32(len(z.iv))) + for zxpk := range z.iv { + // map header, size 2 + // string "start" + o = append(o, 0x82, 0xa5, 0x73, 0x74, 0x61, 0x72, 0x74) + o = msgp.AppendUint16(o, z.iv[zxpk].start) + // string "last" + o = append(o, 0xa4, 0x6c, 0x61, 0x73, 0x74) + o = msgp.AppendUint16(o, z.iv[zxpk].last) + } + // string "card" + o = append(o, 0xa4, 0x63, 0x61, 0x72, 0x64) + o = msgp.AppendInt64(o, z.card) + return +} + +// UnmarshalMsg implements msgp.Unmarshaler +func (z *runContainer16) UnmarshalMsg(bts []byte) (o []byte, err error) { + var field []byte + _ = field + var zkgt uint32 + zkgt, bts, err = msgp.ReadMapHeaderBytes(bts) + if err != nil { + return + } + for zkgt > 0 { + zkgt-- + field, bts, err = msgp.ReadMapKeyZC(bts) + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "iv": + var zema uint32 + zema, bts, err = msgp.ReadArrayHeaderBytes(bts) + if err != nil { + return + } + if cap(z.iv) >= int(zema) { + z.iv = (z.iv)[:zema] + } else { + z.iv = make([]interval16, zema) + } + for zxpk := range z.iv { + var zpez uint32 + zpez, bts, err = msgp.ReadMapHeaderBytes(bts) + if err != nil { + return + } + for zpez > 0 { + zpez-- + field, bts, err = msgp.ReadMapKeyZC(bts) + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "start": + z.iv[zxpk].start, bts, err = msgp.ReadUint16Bytes(bts) + if err != nil { + return + } + case "last": + z.iv[zxpk].last, bts, err = msgp.ReadUint16Bytes(bts) + if err != nil { + return + } + default: + bts, err = msgp.Skip(bts) + if err != nil { + return + } + } + } + } + case "card": + z.card, bts, err = msgp.ReadInt64Bytes(bts) + if err != nil { + return + } + default: + bts, err = msgp.Skip(bts) + if err != nil { + return + } + } + } + o = bts + return +} + +// Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message +func (z *runContainer16) Msgsize() (s int) { + s = 1 + 3 + msgp.ArrayHeaderSize + (len(z.iv) * (12 + msgp.Uint16Size + msgp.Uint16Size)) + 5 + msgp.Int64Size + return +} + +// DecodeMsg implements msgp.Decodable +func (z *runIterator16) DecodeMsg(dc *msgp.Reader) (err error) { + var field []byte + _ = field + var zqke uint32 + zqke, err = dc.ReadMapHeader() + if err != nil { + return + } + for zqke > 0 { + zqke-- + field, err = dc.ReadMapKeyPtr() + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "rc": + if dc.IsNil() { + err = dc.ReadNil() + if err != nil { + return + } + z.rc = nil + } else { + if z.rc == nil { + z.rc = new(runContainer16) + } + err = z.rc.DecodeMsg(dc) + if err != nil { + return + } + } + case "curIndex": + z.curIndex, err = dc.ReadInt64() + if err != nil { + return + } + case "curPosInIndex": + z.curPosInIndex, err = dc.ReadUint16() + if err != nil { + return + } + case "curSeq": + z.curSeq, err = dc.ReadInt64() + if err != nil { + return + } + default: + err = dc.Skip() + if err != nil { + return + } + } + } + return +} + +// EncodeMsg implements msgp.Encodable +func (z *runIterator16) EncodeMsg(en *msgp.Writer) (err error) { + // map header, size 4 + // write "rc" + err = en.Append(0x84, 0xa2, 0x72, 0x63) + if err != nil { + return err + } + if z.rc == nil { + err = en.WriteNil() + if err != nil { + return + } + } else { + err = z.rc.EncodeMsg(en) + if err != nil { + return + } + } + // write "curIndex" + err = en.Append(0xa8, 0x63, 0x75, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78) + if err != nil { + return err + } + err = en.WriteInt64(z.curIndex) + if err != nil { + return + } + // write "curPosInIndex" + err = en.Append(0xad, 0x63, 0x75, 0x72, 0x50, 0x6f, 0x73, 0x49, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78) + if err != nil { + return err + } + err = en.WriteUint16(z.curPosInIndex) + if err != nil { + return + } + // write "curSeq" + err = en.Append(0xa6, 0x63, 0x75, 0x72, 0x53, 0x65, 0x71) + if err != nil { + return err + } + err = en.WriteInt64(z.curSeq) + if err != nil { + return + } + return +} + +// MarshalMsg implements msgp.Marshaler +func (z *runIterator16) MarshalMsg(b []byte) (o []byte, err error) { + o = msgp.Require(b, z.Msgsize()) + // map header, size 4 + // string "rc" + o = append(o, 0x84, 0xa2, 0x72, 0x63) + if z.rc == nil { + o = msgp.AppendNil(o) + } else { + o, err = z.rc.MarshalMsg(o) + if err != nil { + return + } + } + // string "curIndex" + o = append(o, 0xa8, 0x63, 0x75, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78) + o = msgp.AppendInt64(o, z.curIndex) + // string "curPosInIndex" + o = append(o, 0xad, 0x63, 0x75, 0x72, 0x50, 0x6f, 0x73, 0x49, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78) + o = msgp.AppendUint16(o, z.curPosInIndex) + // string "curSeq" + o = append(o, 0xa6, 0x63, 0x75, 0x72, 0x53, 0x65, 0x71) + o = msgp.AppendInt64(o, z.curSeq) + return +} + +// UnmarshalMsg implements msgp.Unmarshaler +func (z *runIterator16) UnmarshalMsg(bts []byte) (o []byte, err error) { + var field []byte + _ = field + var zqyh uint32 + zqyh, bts, err = msgp.ReadMapHeaderBytes(bts) + if err != nil { + return + } + for zqyh > 0 { + zqyh-- + field, bts, err = msgp.ReadMapKeyZC(bts) + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "rc": + if msgp.IsNil(bts) { + bts, err = msgp.ReadNilBytes(bts) + if err != nil { + return + } + z.rc = nil + } else { + if z.rc == nil { + z.rc = new(runContainer16) + } + bts, err = z.rc.UnmarshalMsg(bts) + if err != nil { + return + } + } + case "curIndex": + z.curIndex, bts, err = msgp.ReadInt64Bytes(bts) + if err != nil { + return + } + case "curPosInIndex": + z.curPosInIndex, bts, err = msgp.ReadUint16Bytes(bts) + if err != nil { + return + } + case "curSeq": + z.curSeq, bts, err = msgp.ReadInt64Bytes(bts) + if err != nil { + return + } + default: + bts, err = msgp.Skip(bts) + if err != nil { + return + } + } + } + o = bts + return +} + +// Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message +func (z *runIterator16) Msgsize() (s int) { + s = 1 + 3 + if z.rc == nil { + s += msgp.NilSize + } else { + s += z.rc.Msgsize() + } + s += 9 + msgp.Int64Size + 14 + msgp.Uint16Size + 7 + msgp.Int64Size + return +} + +// DecodeMsg implements msgp.Decodable +func (z *uint16Slice) DecodeMsg(dc *msgp.Reader) (err error) { + var zjpj uint32 + zjpj, err = dc.ReadArrayHeader() + if err != nil { + return + } + if cap((*z)) >= int(zjpj) { + (*z) = (*z)[:zjpj] + } else { + (*z) = make(uint16Slice, zjpj) + } + for zywj := range *z { + (*z)[zywj], err = dc.ReadUint16() + if err != nil { + return + } + } + return +} + +// EncodeMsg implements msgp.Encodable +func (z uint16Slice) EncodeMsg(en *msgp.Writer) (err error) { + err = en.WriteArrayHeader(uint32(len(z))) + if err != nil { + return + } + for zzpf := range z { + err = en.WriteUint16(z[zzpf]) + if err != nil { + return + } + } + return +} + +// MarshalMsg implements msgp.Marshaler +func (z uint16Slice) MarshalMsg(b []byte) (o []byte, err error) { + o = msgp.Require(b, z.Msgsize()) + o = msgp.AppendArrayHeader(o, uint32(len(z))) + for zzpf := range z { + o = msgp.AppendUint16(o, z[zzpf]) + } + return +} + +// UnmarshalMsg implements msgp.Unmarshaler +func (z *uint16Slice) UnmarshalMsg(bts []byte) (o []byte, err error) { + var zgmo uint32 + zgmo, bts, err = msgp.ReadArrayHeaderBytes(bts) + if err != nil { + return + } + if cap((*z)) >= int(zgmo) { + (*z) = (*z)[:zgmo] + } else { + (*z) = make(uint16Slice, zgmo) + } + for zrfe := range *z { + (*z)[zrfe], bts, err = msgp.ReadUint16Bytes(bts) + if err != nil { + return + } + } + o = bts + return +} + +// Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message +func (z uint16Slice) Msgsize() (s int) { + s = msgp.ArrayHeaderSize + (len(z) * (msgp.Uint16Size)) + return +} diff --git a/vendor/github.com/RoaringBitmap/roaring/rle16_gen_test.go b/vendor/github.com/RoaringBitmap/roaring/rle16_gen_test.go new file mode 100644 index 0000000..092ffe8 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/rle16_gen_test.go @@ -0,0 +1,577 @@ +package roaring + +// NOTE: THIS FILE WAS PRODUCED BY THE +// MSGP CODE GENERATION TOOL (github.com/tinylib/msgp) +// DO NOT EDIT + +import ( + "bytes" + "testing" + + "github.com/tinylib/msgp/msgp" +) + +func TestMarshalUnmarshaladdHelper16(t *testing.T) { + v := addHelper16{} + bts, err := v.MarshalMsg(nil) + if err != nil { + t.Fatal(err) + } + left, err := v.UnmarshalMsg(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after UnmarshalMsg(): %q", len(left), left) + } + + left, err = msgp.Skip(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after Skip(): %q", len(left), left) + } +} + +func BenchmarkMarshalMsgaddHelper16(b *testing.B) { + v := addHelper16{} + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.MarshalMsg(nil) + } +} + +func BenchmarkAppendMsgaddHelper16(b *testing.B) { + v := addHelper16{} + bts := make([]byte, 0, v.Msgsize()) + bts, _ = v.MarshalMsg(bts[0:0]) + b.SetBytes(int64(len(bts))) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + bts, _ = v.MarshalMsg(bts[0:0]) + } +} + +func BenchmarkUnmarshaladdHelper16(b *testing.B) { + v := addHelper16{} + bts, _ := v.MarshalMsg(nil) + b.ReportAllocs() + b.SetBytes(int64(len(bts))) + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := v.UnmarshalMsg(bts) + if err != nil { + b.Fatal(err) + } + } +} + +func TestEncodeDecodeaddHelper16(t *testing.T) { + v := addHelper16{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + + m := v.Msgsize() + if buf.Len() > m { + t.Logf("WARNING: Msgsize() for %v is inaccurate", v) + } + + vn := addHelper16{} + err := msgp.Decode(&buf, &vn) + if err != nil { + t.Error(err) + } + + buf.Reset() + msgp.Encode(&buf, &v) + err = msgp.NewReader(&buf).Skip() + if err != nil { + t.Error(err) + } +} + +func BenchmarkEncodeaddHelper16(b *testing.B) { + v := addHelper16{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + b.SetBytes(int64(buf.Len())) + en := msgp.NewWriter(msgp.Nowhere) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.EncodeMsg(en) + } + en.Flush() +} + +func BenchmarkDecodeaddHelper16(b *testing.B) { + v := addHelper16{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + b.SetBytes(int64(buf.Len())) + rd := msgp.NewEndlessReader(buf.Bytes(), b) + dc := msgp.NewReader(rd) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + err := v.DecodeMsg(dc) + if err != nil { + b.Fatal(err) + } + } +} + +func TestMarshalUnmarshalinterval16(t *testing.T) { + v := interval16{} + bts, err := v.MarshalMsg(nil) + if err != nil { + t.Fatal(err) + } + left, err := v.UnmarshalMsg(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after UnmarshalMsg(): %q", len(left), left) + } + + left, err = msgp.Skip(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after Skip(): %q", len(left), left) + } +} + +func BenchmarkMarshalMsginterval16(b *testing.B) { + v := interval16{} + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.MarshalMsg(nil) + } +} + +func BenchmarkAppendMsginterval16(b *testing.B) { + v := interval16{} + bts := make([]byte, 0, v.Msgsize()) + bts, _ = v.MarshalMsg(bts[0:0]) + b.SetBytes(int64(len(bts))) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + bts, _ = v.MarshalMsg(bts[0:0]) + } +} + +func BenchmarkUnmarshalinterval16(b *testing.B) { + v := interval16{} + bts, _ := v.MarshalMsg(nil) + b.ReportAllocs() + b.SetBytes(int64(len(bts))) + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := v.UnmarshalMsg(bts) + if err != nil { + b.Fatal(err) + } + } +} + +func TestEncodeDecodeinterval16(t *testing.T) { + v := interval16{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + + m := v.Msgsize() + if buf.Len() > m { + t.Logf("WARNING: Msgsize() for %v is inaccurate", v) + } + + vn := interval16{} + err := msgp.Decode(&buf, &vn) + if err != nil { + t.Error(err) + } + + buf.Reset() + msgp.Encode(&buf, &v) + err = msgp.NewReader(&buf).Skip() + if err != nil { + t.Error(err) + } +} + +func BenchmarkEncodeinterval16(b *testing.B) { + v := interval16{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + b.SetBytes(int64(buf.Len())) + en := msgp.NewWriter(msgp.Nowhere) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.EncodeMsg(en) + } + en.Flush() +} + +func BenchmarkDecodeinterval16(b *testing.B) { + v := interval16{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + b.SetBytes(int64(buf.Len())) + rd := msgp.NewEndlessReader(buf.Bytes(), b) + dc := msgp.NewReader(rd) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + err := v.DecodeMsg(dc) + if err != nil { + b.Fatal(err) + } + } +} + +func TestMarshalUnmarshalrunContainer16(t *testing.T) { + v := runContainer16{} + bts, err := v.MarshalMsg(nil) + if err != nil { + t.Fatal(err) + } + left, err := v.UnmarshalMsg(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after UnmarshalMsg(): %q", len(left), left) + } + + left, err = msgp.Skip(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after Skip(): %q", len(left), left) + } +} + +func BenchmarkMarshalMsgrunContainer16(b *testing.B) { + v := runContainer16{} + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.MarshalMsg(nil) + } +} + +func BenchmarkAppendMsgrunContainer16(b *testing.B) { + v := runContainer16{} + bts := make([]byte, 0, v.Msgsize()) + bts, _ = v.MarshalMsg(bts[0:0]) + b.SetBytes(int64(len(bts))) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + bts, _ = v.MarshalMsg(bts[0:0]) + } +} + +func BenchmarkUnmarshalrunContainer16(b *testing.B) { + v := runContainer16{} + bts, _ := v.MarshalMsg(nil) + b.ReportAllocs() + b.SetBytes(int64(len(bts))) + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := v.UnmarshalMsg(bts) + if err != nil { + b.Fatal(err) + } + } +} + +func TestEncodeDecoderunContainer16(t *testing.T) { + v := runContainer16{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + + m := v.Msgsize() + if buf.Len() > m { + t.Logf("WARNING: Msgsize() for %v is inaccurate", v) + } + + vn := runContainer16{} + err := msgp.Decode(&buf, &vn) + if err != nil { + t.Error(err) + } + + buf.Reset() + msgp.Encode(&buf, &v) + err = msgp.NewReader(&buf).Skip() + if err != nil { + t.Error(err) + } +} + +func BenchmarkEncoderunContainer16(b *testing.B) { + v := runContainer16{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + b.SetBytes(int64(buf.Len())) + en := msgp.NewWriter(msgp.Nowhere) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.EncodeMsg(en) + } + en.Flush() +} + +func BenchmarkDecoderunContainer16(b *testing.B) { + v := runContainer16{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + b.SetBytes(int64(buf.Len())) + rd := msgp.NewEndlessReader(buf.Bytes(), b) + dc := msgp.NewReader(rd) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + err := v.DecodeMsg(dc) + if err != nil { + b.Fatal(err) + } + } +} + +func TestMarshalUnmarshalrunIterator16(t *testing.T) { + v := runIterator16{} + bts, err := v.MarshalMsg(nil) + if err != nil { + t.Fatal(err) + } + left, err := v.UnmarshalMsg(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after UnmarshalMsg(): %q", len(left), left) + } + + left, err = msgp.Skip(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after Skip(): %q", len(left), left) + } +} + +func BenchmarkMarshalMsgrunIterator16(b *testing.B) { + v := runIterator16{} + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.MarshalMsg(nil) + } +} + +func BenchmarkAppendMsgrunIterator16(b *testing.B) { + v := runIterator16{} + bts := make([]byte, 0, v.Msgsize()) + bts, _ = v.MarshalMsg(bts[0:0]) + b.SetBytes(int64(len(bts))) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + bts, _ = v.MarshalMsg(bts[0:0]) + } +} + +func BenchmarkUnmarshalrunIterator16(b *testing.B) { + v := runIterator16{} + bts, _ := v.MarshalMsg(nil) + b.ReportAllocs() + b.SetBytes(int64(len(bts))) + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := v.UnmarshalMsg(bts) + if err != nil { + b.Fatal(err) + } + } +} + +func TestEncodeDecoderunIterator16(t *testing.T) { + v := runIterator16{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + + m := v.Msgsize() + if buf.Len() > m { + t.Logf("WARNING: Msgsize() for %v is inaccurate", v) + } + + vn := runIterator16{} + err := msgp.Decode(&buf, &vn) + if err != nil { + t.Error(err) + } + + buf.Reset() + msgp.Encode(&buf, &v) + err = msgp.NewReader(&buf).Skip() + if err != nil { + t.Error(err) + } +} + +func BenchmarkEncoderunIterator16(b *testing.B) { + v := runIterator16{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + b.SetBytes(int64(buf.Len())) + en := msgp.NewWriter(msgp.Nowhere) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.EncodeMsg(en) + } + en.Flush() +} + +func BenchmarkDecoderunIterator16(b *testing.B) { + v := runIterator16{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + b.SetBytes(int64(buf.Len())) + rd := msgp.NewEndlessReader(buf.Bytes(), b) + dc := msgp.NewReader(rd) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + err := v.DecodeMsg(dc) + if err != nil { + b.Fatal(err) + } + } +} + +func TestMarshalUnmarshaluint16Slice(t *testing.T) { + v := uint16Slice{} + bts, err := v.MarshalMsg(nil) + if err != nil { + t.Fatal(err) + } + left, err := v.UnmarshalMsg(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after UnmarshalMsg(): %q", len(left), left) + } + + left, err = msgp.Skip(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after Skip(): %q", len(left), left) + } +} + +func BenchmarkMarshalMsguint16Slice(b *testing.B) { + v := uint16Slice{} + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.MarshalMsg(nil) + } +} + +func BenchmarkAppendMsguint16Slice(b *testing.B) { + v := uint16Slice{} + bts := make([]byte, 0, v.Msgsize()) + bts, _ = v.MarshalMsg(bts[0:0]) + b.SetBytes(int64(len(bts))) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + bts, _ = v.MarshalMsg(bts[0:0]) + } +} + +func BenchmarkUnmarshaluint16Slice(b *testing.B) { + v := uint16Slice{} + bts, _ := v.MarshalMsg(nil) + b.ReportAllocs() + b.SetBytes(int64(len(bts))) + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := v.UnmarshalMsg(bts) + if err != nil { + b.Fatal(err) + } + } +} + +func TestEncodeDecodeuint16Slice(t *testing.T) { + v := uint16Slice{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + + m := v.Msgsize() + if buf.Len() > m { + t.Logf("WARNING: Msgsize() for %v is inaccurate", v) + } + + vn := uint16Slice{} + err := msgp.Decode(&buf, &vn) + if err != nil { + t.Error(err) + } + + buf.Reset() + msgp.Encode(&buf, &v) + err = msgp.NewReader(&buf).Skip() + if err != nil { + t.Error(err) + } +} + +func BenchmarkEncodeuint16Slice(b *testing.B) { + v := uint16Slice{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + b.SetBytes(int64(buf.Len())) + en := msgp.NewWriter(msgp.Nowhere) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.EncodeMsg(en) + } + en.Flush() +} + +func BenchmarkDecodeuint16Slice(b *testing.B) { + v := uint16Slice{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + b.SetBytes(int64(buf.Len())) + rd := msgp.NewEndlessReader(buf.Bytes(), b) + dc := msgp.NewReader(rd) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + err := v.DecodeMsg(dc) + if err != nil { + b.Fatal(err) + } + } +} diff --git a/vendor/github.com/RoaringBitmap/roaring/rle16_test.go b/vendor/github.com/RoaringBitmap/roaring/rle16_test.go new file mode 100644 index 0000000..5329424 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/rle16_test.go @@ -0,0 +1,737 @@ +package roaring + +import ( + "fmt" + "math/rand" + "sort" + "testing" + //"unsafe" + + . "github.com/smartystreets/goconvey/convey" +) + +func init() { + rleVerbose = testing.Verbose() +} + +func TestRleInterval16s(t *testing.T) { + + Convey("canMerge, and mergeInterval16s should do what they say", t, func() { + a := interval16{start: 0, last: 9} + msg := a.String() + p("a is %v", msg) + b := interval16{start: 0, last: 1} + report := sliceToString16([]interval16{a, b}) + _ = report + p("a and b together are: %s", report) + c := interval16{start: 2, last: 4} + d := interval16{start: 2, last: 5} + e := interval16{start: 0, last: 4} + f := interval16{start: 9, last: 9} + g := interval16{start: 8, last: 9} + h := interval16{start: 5, last: 6} + i := interval16{start: 6, last: 6} + + aIb, empty := intersectInterval16s(a, b) + So(empty, ShouldBeFalse) + So(aIb, ShouldResemble, b) + + So(canMerge16(b, c), ShouldBeTrue) + So(canMerge16(c, b), ShouldBeTrue) + So(canMerge16(a, h), ShouldBeTrue) + + So(canMerge16(d, e), ShouldBeTrue) + So(canMerge16(f, g), ShouldBeTrue) + So(canMerge16(c, h), ShouldBeTrue) + + So(canMerge16(b, h), ShouldBeFalse) + So(canMerge16(h, b), ShouldBeFalse) + So(canMerge16(c, i), ShouldBeFalse) + + So(mergeInterval16s(b, c), ShouldResemble, e) + So(mergeInterval16s(c, b), ShouldResemble, e) + + So(mergeInterval16s(h, i), ShouldResemble, h) + So(mergeInterval16s(i, h), ShouldResemble, h) + + ////// start + So(mergeInterval16s(interval16{start: 0, last: 0}, interval16{start: 1, last: 1}), ShouldResemble, interval16{start: 0, last: 1}) + So(mergeInterval16s(interval16{start: 1, last: 1}, interval16{start: 0, last: 0}), ShouldResemble, interval16{start: 0, last: 1}) + So(mergeInterval16s(interval16{start: 0, last: 4}, interval16{start: 3, last: 5}), ShouldResemble, interval16{start: 0, last: 5}) + So(mergeInterval16s(interval16{start: 0, last: 4}, interval16{start: 3, last: 4}), ShouldResemble, interval16{start: 0, last: 4}) + + So(mergeInterval16s(interval16{start: 0, last: 8}, interval16{start: 1, last: 7}), ShouldResemble, interval16{start: 0, last: 8}) + So(mergeInterval16s(interval16{start: 1, last: 7}, interval16{start: 0, last: 8}), ShouldResemble, interval16{start: 0, last: 8}) + + So(func() { _ = mergeInterval16s(interval16{start: 0, last: 0}, interval16{start: 2, last: 3}) }, ShouldPanic) + + }) +} + +func TestRleRunIterator16(t *testing.T) { + + Convey("RunIterator16 unit tests for Cur, Next, HasNext, and Remove should pass", t, func() { + { + rc := newRunContainer16() + msg := rc.String() + _ = msg + p("an empty container: '%s'\n", msg) + So(rc.cardinality(), ShouldEqual, 0) + it := rc.newRunIterator16() + So(it.hasNext(), ShouldBeFalse) + } + { + rc := newRunContainer16TakeOwnership([]interval16{{start: 4, last: 4}}) + So(rc.cardinality(), ShouldEqual, 1) + it := rc.newRunIterator16() + So(it.hasNext(), ShouldBeTrue) + So(it.next(), ShouldResemble, uint16(4)) + So(it.cur(), ShouldResemble, uint16(4)) + } + { + rc := newRunContainer16CopyIv([]interval16{{start: 4, last: 9}}) + So(rc.cardinality(), ShouldEqual, 6) + it := rc.newRunIterator16() + So(it.hasNext(), ShouldBeTrue) + for i := 4; i < 10; i++ { + So(it.next(), ShouldEqual, uint16(i)) + } + So(it.hasNext(), ShouldBeFalse) + } + + { + rc := newRunContainer16TakeOwnership([]interval16{{start: 4, last: 9}}) + card := rc.cardinality() + So(card, ShouldEqual, 6) + //So(rc.serializedSizeInBytes(), ShouldEqual, 2+4*rc.numberOfRuns()) + + it := rc.newRunIterator16() + So(it.hasNext(), ShouldBeTrue) + for i := 4; i < 6; i++ { + So(it.next(), ShouldEqual, uint16(i)) + } + So(it.cur(), ShouldEqual, uint16(5)) + + p("before Remove of 5, rc = '%s'", rc) + + So(it.remove(), ShouldEqual, uint16(5)) + + p("after Remove of 5, rc = '%s'", rc) + So(rc.cardinality(), ShouldEqual, 5) + + it2 := rc.newRunIterator16() + So(rc.cardinality(), ShouldEqual, 5) + So(it2.next(), ShouldEqual, uint16(4)) + for i := 6; i < 10; i++ { + So(it2.next(), ShouldEqual, uint16(i)) + } + } + { + rc := newRunContainer16TakeOwnership([]interval16{ + {start: 0, last: 0}, + {start: 2, last: 2}, + {start: 4, last: 4}, + }) + rc1 := newRunContainer16TakeOwnership([]interval16{ + {start: 6, last: 7}, + {start: 10, last: 11}, + {start: MaxUint16, last: MaxUint16}, + }) + + rc = rc.union(rc1) + + So(rc.cardinality(), ShouldEqual, 8) + it := rc.newRunIterator16() + So(it.next(), ShouldEqual, uint16(0)) + So(it.next(), ShouldEqual, uint16(2)) + So(it.next(), ShouldEqual, uint16(4)) + So(it.next(), ShouldEqual, uint16(6)) + So(it.next(), ShouldEqual, uint16(7)) + So(it.next(), ShouldEqual, uint16(10)) + So(it.next(), ShouldEqual, uint16(11)) + So(it.next(), ShouldEqual, uint16(MaxUint16)) + So(it.hasNext(), ShouldEqual, false) + + rc2 := newRunContainer16TakeOwnership([]interval16{ + {start: 0, last: MaxUint16}, + }) + + p("union with a full [0,2^16-1] container should yield that same single interval run container") + rc2 = rc2.union(rc) + So(rc2.numIntervals(), ShouldEqual, 1) + } + }) +} + +func TestRleRunSearch16(t *testing.T) { + + Convey("RunContainer16.search should respect the prior bounds we provide for efficiency of searching through a subset of the intervals", t, func() { + { + vals := []uint16{0, 2, 4, 6, 8, 10, 12, 14, 16, 18, MaxUint16 - 3, MaxUint16} + exAt := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} // expected at + absent := []uint16{1, 3, 5, 7, 9, 11, 13, 15, 17, 19, MaxUint16 - 2} + + rc := newRunContainer16FromVals(true, vals...) + + So(rc.cardinality(), ShouldEqual, 12) + + var where int64 + var present bool + + for i, v := range vals { + where, present, _ = rc.search(int64(v), nil) + So(present, ShouldBeTrue) + So(where, ShouldEqual, exAt[i]) + } + + for i, v := range absent { + where, present, _ = rc.search(int64(v), nil) + So(present, ShouldBeFalse) + So(where, ShouldEqual, i) + } + + // delete the MaxUint16 so we can test + // the behavior when searching near upper limit. + + p("before removing MaxUint16: %v", rc) + + So(rc.cardinality(), ShouldEqual, 12) + So(rc.numIntervals(), ShouldEqual, 12) + + rc.removeKey(MaxUint16) + p("after removing MaxUint16: %v", rc) + So(rc.cardinality(), ShouldEqual, 11) + So(rc.numIntervals(), ShouldEqual, 11) + + p("search for absent MaxUint16 should return the interval before our key") + where, present, _ = rc.search(MaxUint16, nil) + So(present, ShouldBeFalse) + So(where, ShouldEqual, 10) + + var numCompares int + where, present, numCompares = rc.search(MaxUint16, nil) + So(present, ShouldBeFalse) + So(where, ShouldEqual, 10) + p("numCompares = %v", numCompares) + So(numCompares, ShouldEqual, 3) + + p("confirm that opts searchOptions to search reduces search time") + opts := &searchOptions{ + startIndex: 5, + } + where, present, numCompares = rc.search(MaxUint16, opts) + So(present, ShouldBeFalse) + So(where, ShouldEqual, 10) + p("numCompares = %v", numCompares) + So(numCompares, ShouldEqual, 2) + + p("confirm that opts searchOptions to search is respected") + where, present, _ = rc.search(MaxUint16-3, opts) + So(present, ShouldBeTrue) + So(where, ShouldEqual, 10) + + // with the bound in place, MaxUint16-3 should not be found + opts.endxIndex = 10 + where, present, _ = rc.search(MaxUint16-3, opts) + So(present, ShouldBeFalse) + So(where, ShouldEqual, 9) + + } + }) + +} + +func TestRleIntersection16(t *testing.T) { + + Convey("RunContainer16.intersect of two RunContainer16(s) should return their intersection", t, func() { + { + vals := []uint16{0, 2, 4, 6, 8, 10, 12, 14, 16, 18, MaxUint16 - 3, MaxUint16 - 1} + + a := newRunContainer16FromVals(true, vals[:5]...) + b := newRunContainer16FromVals(true, vals[2:]...) + + p("a is %v", a) + p("b is %v", b) + + So(haveOverlap16(interval16{0, 2}, interval16{2, 2}), ShouldBeTrue) + So(haveOverlap16(interval16{0, 2}, interval16{3, 3}), ShouldBeFalse) + + isect := a.intersect(b) + + p("isect is %v", isect) + + So(isect.cardinality(), ShouldEqual, 3) + So(isect.contains(4), ShouldBeTrue) + So(isect.contains(6), ShouldBeTrue) + So(isect.contains(8), ShouldBeTrue) + + d := newRunContainer16TakeOwnership([]interval16{{start: 0, last: MaxUint16}}) + + isect = isect.intersect(d) + p("isect is %v", isect) + So(isect.cardinality(), ShouldEqual, 3) + So(isect.contains(4), ShouldBeTrue) + So(isect.contains(6), ShouldBeTrue) + So(isect.contains(8), ShouldBeTrue) + + p("test breaking apart intervals") + e := newRunContainer16TakeOwnership([]interval16{{2, 4}, {8, 9}, {14, 16}, {20, 22}}) + f := newRunContainer16TakeOwnership([]interval16{{3, 18}, {22, 23}}) + + p("e = %v", e) + p("f = %v", f) + + { + isect = e.intersect(f) + p("isect of e and f is %v", isect) + So(isect.cardinality(), ShouldEqual, 8) + So(isect.contains(3), ShouldBeTrue) + So(isect.contains(4), ShouldBeTrue) + So(isect.contains(8), ShouldBeTrue) + So(isect.contains(9), ShouldBeTrue) + So(isect.contains(14), ShouldBeTrue) + So(isect.contains(15), ShouldBeTrue) + So(isect.contains(16), ShouldBeTrue) + So(isect.contains(22), ShouldBeTrue) + } + + { + // check for symmetry + isect = f.intersect(e) + p("isect of f and e is %v", isect) + So(isect.cardinality(), ShouldEqual, 8) + So(isect.contains(3), ShouldBeTrue) + So(isect.contains(4), ShouldBeTrue) + So(isect.contains(8), ShouldBeTrue) + So(isect.contains(9), ShouldBeTrue) + So(isect.contains(14), ShouldBeTrue) + So(isect.contains(15), ShouldBeTrue) + So(isect.contains(16), ShouldBeTrue) + So(isect.contains(22), ShouldBeTrue) + } + + } + }) +} + +func TestRleRandomIntersection16(t *testing.T) { + + Convey("RunContainer.intersect of two RunContainers should return their intersection, and this should hold over randomized container content when compared to intersection done with hash maps", t, func() { + + seed := int64(42) + p("seed is %v", seed) + rand.Seed(seed) + + trials := []trial{ + {n: 100, percentFill: .80, ntrial: 10}, + {n: 1000, percentFill: .20, ntrial: 20}, + {n: 10000, percentFill: .01, ntrial: 10}, + {n: 1000, percentFill: .99, ntrial: 10}, + } + + tester := func(tr trial) { + for j := 0; j < tr.ntrial; j++ { + p("TestRleRandomIntersection on check# j=%v", j) + ma := make(map[int]bool) + mb := make(map[int]bool) + + n := tr.n + a := []uint16{} + b := []uint16{} + + var first, second int + + draw := int(float64(n) * tr.percentFill) + for i := 0; i < draw; i++ { + r0 := rand.Intn(n) + a = append(a, uint16(r0)) + ma[r0] = true + if i == 0 { + first = r0 + second = r0 + 1 + p("i is 0, so appending also to a the r0+1 == %v value", second) + a = append(a, uint16(second)) + ma[second] = true + } + + r1 := rand.Intn(n) + b = append(b, uint16(r1)) + mb[r1] = true + } + + // print a; very likely it has dups + sort.Sort(uint16Slice(a)) + stringA := "" + for i := range a { + stringA += fmt.Sprintf("%v, ", a[i]) + } + p("a is '%v'", stringA) + + // hash version of intersect: + hashi := make(map[int]bool) + for k := range ma { + if mb[k] { + hashi[k] = true + } + } + + // RunContainer's Intersect + brle := newRunContainer16FromVals(false, b...) + + //arle := newRunContainer16FromVals(false, a...) + // instead of the above line, create from array + // get better test coverage: + arr := newArrayContainerRange(int(first), int(second)) + arle := newRunContainer16FromArray(arr) + p("after newRunContainer16FromArray(arr), arle is %v", arle) + arle.set(false, a...) + p("after set(false, a), arle is %v", arle) + + isect := arle.intersect(brle) + + p("isect is %v", isect) + + //showHash("hashi", hashi) + + for k := range hashi { + p("hashi has %v, checking in isect", k) + So(isect.contains(uint16(k)), ShouldBeTrue) + } + + p("checking for cardinality agreement: isect is %v, len(hashi) is %v", isect.cardinality(), len(hashi)) + So(isect.cardinality(), ShouldEqual, len(hashi)) + } + p("done with randomized intersect() checks for trial %#v", tr) + } + + for i := range trials { + tester(trials[i]) + } + + }) +} + +func TestRleRandomUnion16(t *testing.T) { + + Convey("RunContainer.union of two RunContainers should return their union, and this should hold over randomized container content when compared to union done with hash maps", t, func() { + + seed := int64(42) + p("seed is %v", seed) + rand.Seed(seed) + + trials := []trial{ + {n: 100, percentFill: .80, ntrial: 10}, + {n: 1000, percentFill: .20, ntrial: 20}, + {n: 10000, percentFill: .01, ntrial: 10}, + {n: 1000, percentFill: .99, ntrial: 10, percentDelete: .04}, + } + + tester := func(tr trial) { + for j := 0; j < tr.ntrial; j++ { + p("TestRleRandomUnion on check# j=%v", j) + ma := make(map[int]bool) + mb := make(map[int]bool) + + n := tr.n + a := []uint16{} + b := []uint16{} + + draw := int(float64(n) * tr.percentFill) + numDel := int(float64(n) * tr.percentDelete) + for i := 0; i < draw; i++ { + r0 := rand.Intn(n) + a = append(a, uint16(r0)) + ma[r0] = true + + r1 := rand.Intn(n) + b = append(b, uint16(r1)) + mb[r1] = true + } + + // hash version of union: + hashu := make(map[int]bool) + for k := range ma { + hashu[k] = true + } + for k := range mb { + hashu[k] = true + } + + //showHash("hashu", hashu) + + // RunContainer's Union + arle := newRunContainer16() + for i := range a { + arle.Add(a[i]) + } + brle := newRunContainer16() + brle.set(false, b...) + + union := arle.union(brle) + + p("union is %v", union) + + p("union.cardinality(): %v, versus len(hashu): %v", union.cardinality(), len(hashu)) + + un := union.AsSlice() + sort.Sort(uint16Slice(un)) + + for kk, v := range un { + p("kk:%v, RunContainer.union has %v, checking hashmap: %v", kk, v, hashu[int(v)]) + _ = kk + So(hashu[int(v)], ShouldBeTrue) + } + + for k := range hashu { + p("hashu has %v, checking in union", k) + So(union.contains(uint16(k)), ShouldBeTrue) + } + + p("checking for cardinality agreement:") + So(union.cardinality(), ShouldEqual, len(hashu)) + + // do the deletes, exercising the remove functionality + for i := 0; i < numDel; i++ { + r1 := rand.Intn(len(a)) + goner := a[r1] + union.removeKey(goner) + delete(hashu, int(goner)) + } + // verify the same as in the hashu + So(union.cardinality(), ShouldEqual, len(hashu)) + for k := range hashu { + p("hashu has %v, checking in union", k) + So(union.contains(uint16(k)), ShouldBeTrue) + } + + } + p("done with randomized Union() checks for trial %#v", tr) + } + + for i := range trials { + tester(trials[i]) + } + + }) +} + +func TestRleAndOrXor16(t *testing.T) { + + Convey("RunContainer And, Or, Xor tests", t, func() { + { + rc := newRunContainer16TakeOwnership([]interval16{ + {start: 0, last: 0}, + {start: 2, last: 2}, + {start: 4, last: 4}, + }) + b0 := NewBitmap() + b0.Add(2) + b0.Add(6) + b0.Add(8) + + and := rc.And(b0) + or := rc.Or(b0) + xor := rc.Xor(b0) + + So(and.GetCardinality(), ShouldEqual, 1) + So(or.GetCardinality(), ShouldEqual, 5) + So(xor.GetCardinality(), ShouldEqual, 4) + + // test creating size 0 and 1 from array + arr := newArrayContainerCapacity(0) + empty := newRunContainer16FromArray(arr) + onceler := newArrayContainerCapacity(1) + onceler.content = append(onceler.content, uint16(0)) + oneZero := newRunContainer16FromArray(onceler) + So(empty.cardinality(), ShouldEqual, 0) + So(oneZero.cardinality(), ShouldEqual, 1) + So(empty.And(b0).GetCardinality(), ShouldEqual, 0) + So(empty.Or(b0).GetCardinality(), ShouldEqual, 3) + + // exercise newRunContainer16FromVals() with 0 and 1 inputs. + empty2 := newRunContainer16FromVals(false, []uint16{}...) + So(empty2.cardinality(), ShouldEqual, 0) + one2 := newRunContainer16FromVals(false, []uint16{1}...) + So(one2.cardinality(), ShouldEqual, 1) + } + }) +} + +func TestRlePanics16(t *testing.T) { + + Convey("Some RunContainer calls/methods should panic if misused", t, func() { + + // newRunContainer16FromVals + So(func() { newRunContainer16FromVals(true, 1, 0) }, ShouldPanic) + + arr := newArrayContainerRange(1, 3) + arr.content = []uint16{2, 3, 3, 2, 1} + So(func() { newRunContainer16FromArray(arr) }, ShouldPanic) + }) +} + +func TestRleCoverageOddsAndEnds16(t *testing.T) { + + Convey("Some RunContainer code paths that don't otherwise get coverage -- these should be tested to increase percentage of code coverage in testing", t, func() { + + // p() code path + cur := rleVerbose + rleVerbose = true + p("") + rleVerbose = cur + + // RunContainer.String() + rc := &runContainer16{} + So(rc.String(), ShouldEqual, "runContainer16{}") + rc.iv = make([]interval16, 1) + rc.iv[0] = interval16{start: 3, last: 4} + So(rc.String(), ShouldEqual, "runContainer16{0:[3, 4], }") + + a := interval16{start: 5, last: 9} + b := interval16{start: 0, last: 1} + c := interval16{start: 1, last: 2} + + // intersectInterval16s(a, b interval16) + isect, isEmpty := intersectInterval16s(a, b) + So(isEmpty, ShouldBeTrue) + // [0,0] can't be trusted: So(isect.runlen(), ShouldEqual, 0) + isect, isEmpty = intersectInterval16s(b, c) + So(isEmpty, ShouldBeFalse) + So(isect.runlen(), ShouldEqual, 1) + + // runContainer16.union + { + ra := newRunContainer16FromVals(false, 4, 5) + rb := newRunContainer16FromVals(false, 4, 6, 8, 9, 10) + ra.union(rb) + So(rb.indexOfIntervalAtOrAfter(4, 2), ShouldEqual, 2) + So(rb.indexOfIntervalAtOrAfter(3, 2), ShouldEqual, 2) + } + + // runContainer.intersect + { + ra := newRunContainer16() + rb := newRunContainer16() + So(ra.intersect(rb).cardinality(), ShouldEqual, 0) + } + { + ra := newRunContainer16FromVals(false, 1) + rb := newRunContainer16FromVals(false, 4) + So(ra.intersect(rb).cardinality(), ShouldEqual, 0) + } + + // runContainer.Add + { + ra := newRunContainer16FromVals(false, 1) + rb := newRunContainer16FromVals(false, 4) + So(ra.cardinality(), ShouldEqual, 1) + So(rb.cardinality(), ShouldEqual, 1) + ra.Add(5) + So(ra.cardinality(), ShouldEqual, 2) + + // newRunIterator16() + empty := newRunContainer16() + it := empty.newRunIterator16() + So(func() { it.next() }, ShouldPanic) + it2 := ra.newRunIterator16() + it2.curIndex = int64(len(it2.rc.iv)) + So(func() { it2.next() }, ShouldPanic) + + // runIterator16.remove() + emptyIt := empty.newRunIterator16() + So(func() { emptyIt.remove() }, ShouldPanic) + + // newRunContainer16FromArray + arr := newArrayContainerRange(1, 6) + arr.content = []uint16{5, 5, 5, 6, 9} + rc3 := newRunContainer16FromArray(arr) + So(rc3.cardinality(), ShouldEqual, 3) + + // runContainer16SerializedSizeInBytes + // runContainer16.SerializedSizeInBytes + _ = runContainer16SerializedSizeInBytes(3) + _ = rc3.serializedSizeInBytes() + + // findNextIntervalThatIntersectsStartingFrom + idx, _ := rc3.findNextIntervalThatIntersectsStartingFrom(0, 100) + So(idx, ShouldEqual, 1) + + // deleteAt / remove + rc3.Add(10) + rc3.removeKey(10) + rc3.removeKey(9) + So(rc3.cardinality(), ShouldEqual, 2) + rc3.Add(9) + rc3.Add(10) + rc3.Add(12) + So(rc3.cardinality(), ShouldEqual, 5) + it3 := rc3.newRunIterator16() + it3.next() + it3.next() + it3.next() + it3.next() + So(it3.cur(), ShouldEqual, uint16(10)) + it3.remove() + So(it3.next(), ShouldEqual, uint16(12)) + } + + // runContainer16.equals + { + rc16 := newRunContainer16() + So(rc16.equals16(rc16), ShouldBeTrue) + rc16b := newRunContainer16() + So(rc16.equals16(rc16b), ShouldBeTrue) + rc16.Add(1) + rc16b.Add(2) + So(rc16.equals16(rc16b), ShouldBeFalse) + } + }) +} + +func TestRleStoringMax16(t *testing.T) { + + Convey("Storing the MaxUint16 should be possible, because it may be necessary to do so--users will assume that any valid uint16 should be storable. In particular the smaller 16-bit version will definitely expect full access to all bits.", t, func() { + + rc := newRunContainer16() + rc.Add(MaxUint16) + So(rc.contains(MaxUint16), ShouldBeTrue) + So(rc.cardinality(), ShouldEqual, 1) + rc.removeKey(MaxUint16) + So(rc.contains(MaxUint16), ShouldBeFalse) + So(rc.cardinality(), ShouldEqual, 0) + + rc.set(false, MaxUint16-1, MaxUint16) + So(rc.cardinality(), ShouldEqual, 2) + + So(rc.contains(MaxUint16-1), ShouldBeTrue) + So(rc.contains(MaxUint16), ShouldBeTrue) + rc.removeKey(MaxUint16 - 1) + So(rc.cardinality(), ShouldEqual, 1) + rc.removeKey(MaxUint16) + So(rc.cardinality(), ShouldEqual, 0) + + rc.set(false, MaxUint16-2, MaxUint16-1, MaxUint16) + So(rc.cardinality(), ShouldEqual, 3) + So(rc.numIntervals(), ShouldEqual, 1) + rc.removeKey(MaxUint16 - 1) + So(rc.numIntervals(), ShouldEqual, 2) + So(rc.cardinality(), ShouldEqual, 2) + + }) +} + +// go test -bench BenchmarkFromBitmap -run - +func BenchmarkFromBitmap16(b *testing.B) { + b.StopTimer() + seed := int64(42) + rand.Seed(seed) + + tr := trial{n: 10000, percentFill: .95, ntrial: 1, numRandomOpsPass: 100} + _, _, bc := getRandomSameThreeContainers(tr) + + b.StartTimer() + + for j := 0; j < b.N; j++ { + newRunContainer16FromBitmapContainer(bc) + } +} diff --git a/vendor/github.com/RoaringBitmap/roaring/rle_gen.go b/vendor/github.com/RoaringBitmap/roaring/rle_gen.go new file mode 100644 index 0000000..bc9da75 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/rle_gen.go @@ -0,0 +1,1118 @@ +package roaring + +// NOTE: THIS FILE WAS PRODUCED BY THE +// MSGP CODE GENERATION TOOL (github.com/tinylib/msgp) +// DO NOT EDIT + +import "github.com/tinylib/msgp/msgp" + +// DecodeMsg implements msgp.Decodable +func (z *addHelper32) DecodeMsg(dc *msgp.Reader) (err error) { + var field []byte + _ = field + var zbai uint32 + zbai, err = dc.ReadMapHeader() + if err != nil { + return + } + for zbai > 0 { + zbai-- + field, err = dc.ReadMapKeyPtr() + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "runstart": + z.runstart, err = dc.ReadUint32() + if err != nil { + return + } + case "runlen": + z.runlen, err = dc.ReadUint32() + if err != nil { + return + } + case "actuallyAdded": + z.actuallyAdded, err = dc.ReadUint32() + if err != nil { + return + } + case "m": + var zcmr uint32 + zcmr, err = dc.ReadArrayHeader() + if err != nil { + return + } + if cap(z.m) >= int(zcmr) { + z.m = (z.m)[:zcmr] + } else { + z.m = make([]interval32, zcmr) + } + for zxvk := range z.m { + var zajw uint32 + zajw, err = dc.ReadMapHeader() + if err != nil { + return + } + for zajw > 0 { + zajw-- + field, err = dc.ReadMapKeyPtr() + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "start": + z.m[zxvk].start, err = dc.ReadUint32() + if err != nil { + return + } + case "last": + z.m[zxvk].last, err = dc.ReadUint32() + if err != nil { + return + } + default: + err = dc.Skip() + if err != nil { + return + } + } + } + } + case "rc": + if dc.IsNil() { + err = dc.ReadNil() + if err != nil { + return + } + z.rc = nil + } else { + if z.rc == nil { + z.rc = new(runContainer32) + } + var zwht uint32 + zwht, err = dc.ReadMapHeader() + if err != nil { + return + } + for zwht > 0 { + zwht-- + field, err = dc.ReadMapKeyPtr() + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "iv": + var zhct uint32 + zhct, err = dc.ReadArrayHeader() + if err != nil { + return + } + if cap(z.rc.iv) >= int(zhct) { + z.rc.iv = (z.rc.iv)[:zhct] + } else { + z.rc.iv = make([]interval32, zhct) + } + for zbzg := range z.rc.iv { + var zcua uint32 + zcua, err = dc.ReadMapHeader() + if err != nil { + return + } + for zcua > 0 { + zcua-- + field, err = dc.ReadMapKeyPtr() + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "start": + z.rc.iv[zbzg].start, err = dc.ReadUint32() + if err != nil { + return + } + case "last": + z.rc.iv[zbzg].last, err = dc.ReadUint32() + if err != nil { + return + } + default: + err = dc.Skip() + if err != nil { + return + } + } + } + } + case "card": + z.rc.card, err = dc.ReadInt64() + if err != nil { + return + } + default: + err = dc.Skip() + if err != nil { + return + } + } + } + } + default: + err = dc.Skip() + if err != nil { + return + } + } + } + return +} + +// EncodeMsg implements msgp.Encodable +func (z *addHelper32) EncodeMsg(en *msgp.Writer) (err error) { + // map header, size 5 + // write "runstart" + err = en.Append(0x85, 0xa8, 0x72, 0x75, 0x6e, 0x73, 0x74, 0x61, 0x72, 0x74) + if err != nil { + return err + } + err = en.WriteUint32(z.runstart) + if err != nil { + return + } + // write "runlen" + err = en.Append(0xa6, 0x72, 0x75, 0x6e, 0x6c, 0x65, 0x6e) + if err != nil { + return err + } + err = en.WriteUint32(z.runlen) + if err != nil { + return + } + // write "actuallyAdded" + err = en.Append(0xad, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x41, 0x64, 0x64, 0x65, 0x64) + if err != nil { + return err + } + err = en.WriteUint32(z.actuallyAdded) + if err != nil { + return + } + // write "m" + err = en.Append(0xa1, 0x6d) + if err != nil { + return err + } + err = en.WriteArrayHeader(uint32(len(z.m))) + if err != nil { + return + } + for zxvk := range z.m { + // map header, size 2 + // write "start" + err = en.Append(0x82, 0xa5, 0x73, 0x74, 0x61, 0x72, 0x74) + if err != nil { + return err + } + err = en.WriteUint32(z.m[zxvk].start) + if err != nil { + return + } + // write "last" + err = en.Append(0xa4, 0x6c, 0x61, 0x73, 0x74) + if err != nil { + return err + } + err = en.WriteUint32(z.m[zxvk].last) + if err != nil { + return + } + } + // write "rc" + err = en.Append(0xa2, 0x72, 0x63) + if err != nil { + return err + } + if z.rc == nil { + err = en.WriteNil() + if err != nil { + return + } + } else { + // map header, size 2 + // write "iv" + err = en.Append(0x82, 0xa2, 0x69, 0x76) + if err != nil { + return err + } + err = en.WriteArrayHeader(uint32(len(z.rc.iv))) + if err != nil { + return + } + for zbzg := range z.rc.iv { + // map header, size 2 + // write "start" + err = en.Append(0x82, 0xa5, 0x73, 0x74, 0x61, 0x72, 0x74) + if err != nil { + return err + } + err = en.WriteUint32(z.rc.iv[zbzg].start) + if err != nil { + return + } + // write "last" + err = en.Append(0xa4, 0x6c, 0x61, 0x73, 0x74) + if err != nil { + return err + } + err = en.WriteUint32(z.rc.iv[zbzg].last) + if err != nil { + return + } + } + // write "card" + err = en.Append(0xa4, 0x63, 0x61, 0x72, 0x64) + if err != nil { + return err + } + err = en.WriteInt64(z.rc.card) + if err != nil { + return + } + } + return +} + +// MarshalMsg implements msgp.Marshaler +func (z *addHelper32) MarshalMsg(b []byte) (o []byte, err error) { + o = msgp.Require(b, z.Msgsize()) + // map header, size 5 + // string "runstart" + o = append(o, 0x85, 0xa8, 0x72, 0x75, 0x6e, 0x73, 0x74, 0x61, 0x72, 0x74) + o = msgp.AppendUint32(o, z.runstart) + // string "runlen" + o = append(o, 0xa6, 0x72, 0x75, 0x6e, 0x6c, 0x65, 0x6e) + o = msgp.AppendUint32(o, z.runlen) + // string "actuallyAdded" + o = append(o, 0xad, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x41, 0x64, 0x64, 0x65, 0x64) + o = msgp.AppendUint32(o, z.actuallyAdded) + // string "m" + o = append(o, 0xa1, 0x6d) + o = msgp.AppendArrayHeader(o, uint32(len(z.m))) + for zxvk := range z.m { + // map header, size 2 + // string "start" + o = append(o, 0x82, 0xa5, 0x73, 0x74, 0x61, 0x72, 0x74) + o = msgp.AppendUint32(o, z.m[zxvk].start) + // string "last" + o = append(o, 0xa4, 0x6c, 0x61, 0x73, 0x74) + o = msgp.AppendUint32(o, z.m[zxvk].last) + } + // string "rc" + o = append(o, 0xa2, 0x72, 0x63) + if z.rc == nil { + o = msgp.AppendNil(o) + } else { + // map header, size 2 + // string "iv" + o = append(o, 0x82, 0xa2, 0x69, 0x76) + o = msgp.AppendArrayHeader(o, uint32(len(z.rc.iv))) + for zbzg := range z.rc.iv { + // map header, size 2 + // string "start" + o = append(o, 0x82, 0xa5, 0x73, 0x74, 0x61, 0x72, 0x74) + o = msgp.AppendUint32(o, z.rc.iv[zbzg].start) + // string "last" + o = append(o, 0xa4, 0x6c, 0x61, 0x73, 0x74) + o = msgp.AppendUint32(o, z.rc.iv[zbzg].last) + } + // string "card" + o = append(o, 0xa4, 0x63, 0x61, 0x72, 0x64) + o = msgp.AppendInt64(o, z.rc.card) + } + return +} + +// UnmarshalMsg implements msgp.Unmarshaler +func (z *addHelper32) UnmarshalMsg(bts []byte) (o []byte, err error) { + var field []byte + _ = field + var zxhx uint32 + zxhx, bts, err = msgp.ReadMapHeaderBytes(bts) + if err != nil { + return + } + for zxhx > 0 { + zxhx-- + field, bts, err = msgp.ReadMapKeyZC(bts) + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "runstart": + z.runstart, bts, err = msgp.ReadUint32Bytes(bts) + if err != nil { + return + } + case "runlen": + z.runlen, bts, err = msgp.ReadUint32Bytes(bts) + if err != nil { + return + } + case "actuallyAdded": + z.actuallyAdded, bts, err = msgp.ReadUint32Bytes(bts) + if err != nil { + return + } + case "m": + var zlqf uint32 + zlqf, bts, err = msgp.ReadArrayHeaderBytes(bts) + if err != nil { + return + } + if cap(z.m) >= int(zlqf) { + z.m = (z.m)[:zlqf] + } else { + z.m = make([]interval32, zlqf) + } + for zxvk := range z.m { + var zdaf uint32 + zdaf, bts, err = msgp.ReadMapHeaderBytes(bts) + if err != nil { + return + } + for zdaf > 0 { + zdaf-- + field, bts, err = msgp.ReadMapKeyZC(bts) + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "start": + z.m[zxvk].start, bts, err = msgp.ReadUint32Bytes(bts) + if err != nil { + return + } + case "last": + z.m[zxvk].last, bts, err = msgp.ReadUint32Bytes(bts) + if err != nil { + return + } + default: + bts, err = msgp.Skip(bts) + if err != nil { + return + } + } + } + } + case "rc": + if msgp.IsNil(bts) { + bts, err = msgp.ReadNilBytes(bts) + if err != nil { + return + } + z.rc = nil + } else { + if z.rc == nil { + z.rc = new(runContainer32) + } + var zpks uint32 + zpks, bts, err = msgp.ReadMapHeaderBytes(bts) + if err != nil { + return + } + for zpks > 0 { + zpks-- + field, bts, err = msgp.ReadMapKeyZC(bts) + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "iv": + var zjfb uint32 + zjfb, bts, err = msgp.ReadArrayHeaderBytes(bts) + if err != nil { + return + } + if cap(z.rc.iv) >= int(zjfb) { + z.rc.iv = (z.rc.iv)[:zjfb] + } else { + z.rc.iv = make([]interval32, zjfb) + } + for zbzg := range z.rc.iv { + var zcxo uint32 + zcxo, bts, err = msgp.ReadMapHeaderBytes(bts) + if err != nil { + return + } + for zcxo > 0 { + zcxo-- + field, bts, err = msgp.ReadMapKeyZC(bts) + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "start": + z.rc.iv[zbzg].start, bts, err = msgp.ReadUint32Bytes(bts) + if err != nil { + return + } + case "last": + z.rc.iv[zbzg].last, bts, err = msgp.ReadUint32Bytes(bts) + if err != nil { + return + } + default: + bts, err = msgp.Skip(bts) + if err != nil { + return + } + } + } + } + case "card": + z.rc.card, bts, err = msgp.ReadInt64Bytes(bts) + if err != nil { + return + } + default: + bts, err = msgp.Skip(bts) + if err != nil { + return + } + } + } + } + default: + bts, err = msgp.Skip(bts) + if err != nil { + return + } + } + } + o = bts + return +} + +// Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message +func (z *addHelper32) Msgsize() (s int) { + s = 1 + 9 + msgp.Uint32Size + 7 + msgp.Uint32Size + 14 + msgp.Uint32Size + 2 + msgp.ArrayHeaderSize + (len(z.m) * (12 + msgp.Uint32Size + msgp.Uint32Size)) + 3 + if z.rc == nil { + s += msgp.NilSize + } else { + s += 1 + 3 + msgp.ArrayHeaderSize + (len(z.rc.iv) * (12 + msgp.Uint32Size + msgp.Uint32Size)) + 5 + msgp.Int64Size + } + return +} + +// DecodeMsg implements msgp.Decodable +func (z *interval32) DecodeMsg(dc *msgp.Reader) (err error) { + var field []byte + _ = field + var zeff uint32 + zeff, err = dc.ReadMapHeader() + if err != nil { + return + } + for zeff > 0 { + zeff-- + field, err = dc.ReadMapKeyPtr() + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "start": + z.start, err = dc.ReadUint32() + if err != nil { + return + } + case "last": + z.last, err = dc.ReadUint32() + if err != nil { + return + } + default: + err = dc.Skip() + if err != nil { + return + } + } + } + return +} + +// EncodeMsg implements msgp.Encodable +func (z interval32) EncodeMsg(en *msgp.Writer) (err error) { + // map header, size 2 + // write "start" + err = en.Append(0x82, 0xa5, 0x73, 0x74, 0x61, 0x72, 0x74) + if err != nil { + return err + } + err = en.WriteUint32(z.start) + if err != nil { + return + } + // write "last" + err = en.Append(0xa4, 0x6c, 0x61, 0x73, 0x74) + if err != nil { + return err + } + err = en.WriteUint32(z.last) + if err != nil { + return + } + return +} + +// MarshalMsg implements msgp.Marshaler +func (z interval32) MarshalMsg(b []byte) (o []byte, err error) { + o = msgp.Require(b, z.Msgsize()) + // map header, size 2 + // string "start" + o = append(o, 0x82, 0xa5, 0x73, 0x74, 0x61, 0x72, 0x74) + o = msgp.AppendUint32(o, z.start) + // string "last" + o = append(o, 0xa4, 0x6c, 0x61, 0x73, 0x74) + o = msgp.AppendUint32(o, z.last) + return +} + +// UnmarshalMsg implements msgp.Unmarshaler +func (z *interval32) UnmarshalMsg(bts []byte) (o []byte, err error) { + var field []byte + _ = field + var zrsw uint32 + zrsw, bts, err = msgp.ReadMapHeaderBytes(bts) + if err != nil { + return + } + for zrsw > 0 { + zrsw-- + field, bts, err = msgp.ReadMapKeyZC(bts) + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "start": + z.start, bts, err = msgp.ReadUint32Bytes(bts) + if err != nil { + return + } + case "last": + z.last, bts, err = msgp.ReadUint32Bytes(bts) + if err != nil { + return + } + default: + bts, err = msgp.Skip(bts) + if err != nil { + return + } + } + } + o = bts + return +} + +// Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message +func (z interval32) Msgsize() (s int) { + s = 1 + 6 + msgp.Uint32Size + 5 + msgp.Uint32Size + return +} + +// DecodeMsg implements msgp.Decodable +func (z *runContainer32) DecodeMsg(dc *msgp.Reader) (err error) { + var field []byte + _ = field + var zdnj uint32 + zdnj, err = dc.ReadMapHeader() + if err != nil { + return + } + for zdnj > 0 { + zdnj-- + field, err = dc.ReadMapKeyPtr() + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "iv": + var zobc uint32 + zobc, err = dc.ReadArrayHeader() + if err != nil { + return + } + if cap(z.iv) >= int(zobc) { + z.iv = (z.iv)[:zobc] + } else { + z.iv = make([]interval32, zobc) + } + for zxpk := range z.iv { + var zsnv uint32 + zsnv, err = dc.ReadMapHeader() + if err != nil { + return + } + for zsnv > 0 { + zsnv-- + field, err = dc.ReadMapKeyPtr() + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "start": + z.iv[zxpk].start, err = dc.ReadUint32() + if err != nil { + return + } + case "last": + z.iv[zxpk].last, err = dc.ReadUint32() + if err != nil { + return + } + default: + err = dc.Skip() + if err != nil { + return + } + } + } + } + case "card": + z.card, err = dc.ReadInt64() + if err != nil { + return + } + default: + err = dc.Skip() + if err != nil { + return + } + } + } + return +} + +// EncodeMsg implements msgp.Encodable +func (z *runContainer32) EncodeMsg(en *msgp.Writer) (err error) { + // map header, size 2 + // write "iv" + err = en.Append(0x82, 0xa2, 0x69, 0x76) + if err != nil { + return err + } + err = en.WriteArrayHeader(uint32(len(z.iv))) + if err != nil { + return + } + for zxpk := range z.iv { + // map header, size 2 + // write "start" + err = en.Append(0x82, 0xa5, 0x73, 0x74, 0x61, 0x72, 0x74) + if err != nil { + return err + } + err = en.WriteUint32(z.iv[zxpk].start) + if err != nil { + return + } + // write "last" + err = en.Append(0xa4, 0x6c, 0x61, 0x73, 0x74) + if err != nil { + return err + } + err = en.WriteUint32(z.iv[zxpk].last) + if err != nil { + return + } + } + // write "card" + err = en.Append(0xa4, 0x63, 0x61, 0x72, 0x64) + if err != nil { + return err + } + err = en.WriteInt64(z.card) + if err != nil { + return + } + return +} + +// MarshalMsg implements msgp.Marshaler +func (z *runContainer32) MarshalMsg(b []byte) (o []byte, err error) { + o = msgp.Require(b, z.Msgsize()) + // map header, size 2 + // string "iv" + o = append(o, 0x82, 0xa2, 0x69, 0x76) + o = msgp.AppendArrayHeader(o, uint32(len(z.iv))) + for zxpk := range z.iv { + // map header, size 2 + // string "start" + o = append(o, 0x82, 0xa5, 0x73, 0x74, 0x61, 0x72, 0x74) + o = msgp.AppendUint32(o, z.iv[zxpk].start) + // string "last" + o = append(o, 0xa4, 0x6c, 0x61, 0x73, 0x74) + o = msgp.AppendUint32(o, z.iv[zxpk].last) + } + // string "card" + o = append(o, 0xa4, 0x63, 0x61, 0x72, 0x64) + o = msgp.AppendInt64(o, z.card) + return +} + +// UnmarshalMsg implements msgp.Unmarshaler +func (z *runContainer32) UnmarshalMsg(bts []byte) (o []byte, err error) { + var field []byte + _ = field + var zkgt uint32 + zkgt, bts, err = msgp.ReadMapHeaderBytes(bts) + if err != nil { + return + } + for zkgt > 0 { + zkgt-- + field, bts, err = msgp.ReadMapKeyZC(bts) + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "iv": + var zema uint32 + zema, bts, err = msgp.ReadArrayHeaderBytes(bts) + if err != nil { + return + } + if cap(z.iv) >= int(zema) { + z.iv = (z.iv)[:zema] + } else { + z.iv = make([]interval32, zema) + } + for zxpk := range z.iv { + var zpez uint32 + zpez, bts, err = msgp.ReadMapHeaderBytes(bts) + if err != nil { + return + } + for zpez > 0 { + zpez-- + field, bts, err = msgp.ReadMapKeyZC(bts) + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "start": + z.iv[zxpk].start, bts, err = msgp.ReadUint32Bytes(bts) + if err != nil { + return + } + case "last": + z.iv[zxpk].last, bts, err = msgp.ReadUint32Bytes(bts) + if err != nil { + return + } + default: + bts, err = msgp.Skip(bts) + if err != nil { + return + } + } + } + } + case "card": + z.card, bts, err = msgp.ReadInt64Bytes(bts) + if err != nil { + return + } + default: + bts, err = msgp.Skip(bts) + if err != nil { + return + } + } + } + o = bts + return +} + +// Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message +func (z *runContainer32) Msgsize() (s int) { + s = 1 + 3 + msgp.ArrayHeaderSize + (len(z.iv) * (12 + msgp.Uint32Size + msgp.Uint32Size)) + 5 + msgp.Int64Size + return +} + +// DecodeMsg implements msgp.Decodable +func (z *runIterator32) DecodeMsg(dc *msgp.Reader) (err error) { + var field []byte + _ = field + var zqke uint32 + zqke, err = dc.ReadMapHeader() + if err != nil { + return + } + for zqke > 0 { + zqke-- + field, err = dc.ReadMapKeyPtr() + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "rc": + if dc.IsNil() { + err = dc.ReadNil() + if err != nil { + return + } + z.rc = nil + } else { + if z.rc == nil { + z.rc = new(runContainer32) + } + err = z.rc.DecodeMsg(dc) + if err != nil { + return + } + } + case "curIndex": + z.curIndex, err = dc.ReadInt64() + if err != nil { + return + } + case "curPosInIndex": + z.curPosInIndex, err = dc.ReadUint32() + if err != nil { + return + } + case "curSeq": + z.curSeq, err = dc.ReadInt64() + if err != nil { + return + } + default: + err = dc.Skip() + if err != nil { + return + } + } + } + return +} + +// EncodeMsg implements msgp.Encodable +func (z *runIterator32) EncodeMsg(en *msgp.Writer) (err error) { + // map header, size 4 + // write "rc" + err = en.Append(0x84, 0xa2, 0x72, 0x63) + if err != nil { + return err + } + if z.rc == nil { + err = en.WriteNil() + if err != nil { + return + } + } else { + err = z.rc.EncodeMsg(en) + if err != nil { + return + } + } + // write "curIndex" + err = en.Append(0xa8, 0x63, 0x75, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78) + if err != nil { + return err + } + err = en.WriteInt64(z.curIndex) + if err != nil { + return + } + // write "curPosInIndex" + err = en.Append(0xad, 0x63, 0x75, 0x72, 0x50, 0x6f, 0x73, 0x49, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78) + if err != nil { + return err + } + err = en.WriteUint32(z.curPosInIndex) + if err != nil { + return + } + // write "curSeq" + err = en.Append(0xa6, 0x63, 0x75, 0x72, 0x53, 0x65, 0x71) + if err != nil { + return err + } + err = en.WriteInt64(z.curSeq) + if err != nil { + return + } + return +} + +// MarshalMsg implements msgp.Marshaler +func (z *runIterator32) MarshalMsg(b []byte) (o []byte, err error) { + o = msgp.Require(b, z.Msgsize()) + // map header, size 4 + // string "rc" + o = append(o, 0x84, 0xa2, 0x72, 0x63) + if z.rc == nil { + o = msgp.AppendNil(o) + } else { + o, err = z.rc.MarshalMsg(o) + if err != nil { + return + } + } + // string "curIndex" + o = append(o, 0xa8, 0x63, 0x75, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78) + o = msgp.AppendInt64(o, z.curIndex) + // string "curPosInIndex" + o = append(o, 0xad, 0x63, 0x75, 0x72, 0x50, 0x6f, 0x73, 0x49, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78) + o = msgp.AppendUint32(o, z.curPosInIndex) + // string "curSeq" + o = append(o, 0xa6, 0x63, 0x75, 0x72, 0x53, 0x65, 0x71) + o = msgp.AppendInt64(o, z.curSeq) + return +} + +// UnmarshalMsg implements msgp.Unmarshaler +func (z *runIterator32) UnmarshalMsg(bts []byte) (o []byte, err error) { + var field []byte + _ = field + var zqyh uint32 + zqyh, bts, err = msgp.ReadMapHeaderBytes(bts) + if err != nil { + return + } + for zqyh > 0 { + zqyh-- + field, bts, err = msgp.ReadMapKeyZC(bts) + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "rc": + if msgp.IsNil(bts) { + bts, err = msgp.ReadNilBytes(bts) + if err != nil { + return + } + z.rc = nil + } else { + if z.rc == nil { + z.rc = new(runContainer32) + } + bts, err = z.rc.UnmarshalMsg(bts) + if err != nil { + return + } + } + case "curIndex": + z.curIndex, bts, err = msgp.ReadInt64Bytes(bts) + if err != nil { + return + } + case "curPosInIndex": + z.curPosInIndex, bts, err = msgp.ReadUint32Bytes(bts) + if err != nil { + return + } + case "curSeq": + z.curSeq, bts, err = msgp.ReadInt64Bytes(bts) + if err != nil { + return + } + default: + bts, err = msgp.Skip(bts) + if err != nil { + return + } + } + } + o = bts + return +} + +// Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message +func (z *runIterator32) Msgsize() (s int) { + s = 1 + 3 + if z.rc == nil { + s += msgp.NilSize + } else { + s += z.rc.Msgsize() + } + s += 9 + msgp.Int64Size + 14 + msgp.Uint32Size + 7 + msgp.Int64Size + return +} + +// DecodeMsg implements msgp.Decodable +func (z *uint32Slice) DecodeMsg(dc *msgp.Reader) (err error) { + var zjpj uint32 + zjpj, err = dc.ReadArrayHeader() + if err != nil { + return + } + if cap((*z)) >= int(zjpj) { + (*z) = (*z)[:zjpj] + } else { + (*z) = make(uint32Slice, zjpj) + } + for zywj := range *z { + (*z)[zywj], err = dc.ReadUint32() + if err != nil { + return + } + } + return +} + +// EncodeMsg implements msgp.Encodable +func (z uint32Slice) EncodeMsg(en *msgp.Writer) (err error) { + err = en.WriteArrayHeader(uint32(len(z))) + if err != nil { + return + } + for zzpf := range z { + err = en.WriteUint32(z[zzpf]) + if err != nil { + return + } + } + return +} + +// MarshalMsg implements msgp.Marshaler +func (z uint32Slice) MarshalMsg(b []byte) (o []byte, err error) { + o = msgp.Require(b, z.Msgsize()) + o = msgp.AppendArrayHeader(o, uint32(len(z))) + for zzpf := range z { + o = msgp.AppendUint32(o, z[zzpf]) + } + return +} + +// UnmarshalMsg implements msgp.Unmarshaler +func (z *uint32Slice) UnmarshalMsg(bts []byte) (o []byte, err error) { + var zgmo uint32 + zgmo, bts, err = msgp.ReadArrayHeaderBytes(bts) + if err != nil { + return + } + if cap((*z)) >= int(zgmo) { + (*z) = (*z)[:zgmo] + } else { + (*z) = make(uint32Slice, zgmo) + } + for zrfe := range *z { + (*z)[zrfe], bts, err = msgp.ReadUint32Bytes(bts) + if err != nil { + return + } + } + o = bts + return +} + +// Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message +func (z uint32Slice) Msgsize() (s int) { + s = msgp.ArrayHeaderSize + (len(z) * (msgp.Uint32Size)) + return +} diff --git a/vendor/github.com/RoaringBitmap/roaring/rle_gen_test.go b/vendor/github.com/RoaringBitmap/roaring/rle_gen_test.go new file mode 100644 index 0000000..945e917 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/rle_gen_test.go @@ -0,0 +1,577 @@ +package roaring + +// NOTE: THIS FILE WAS PRODUCED BY THE +// MSGP CODE GENERATION TOOL (github.com/tinylib/msgp) +// DO NOT EDIT + +import ( + "bytes" + "testing" + + "github.com/tinylib/msgp/msgp" +) + +func TestMarshalUnmarshaladdHelper32(t *testing.T) { + v := addHelper32{} + bts, err := v.MarshalMsg(nil) + if err != nil { + t.Fatal(err) + } + left, err := v.UnmarshalMsg(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after UnmarshalMsg(): %q", len(left), left) + } + + left, err = msgp.Skip(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after Skip(): %q", len(left), left) + } +} + +func BenchmarkMarshalMsgaddHelper32(b *testing.B) { + v := addHelper32{} + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.MarshalMsg(nil) + } +} + +func BenchmarkAppendMsgaddHelper32(b *testing.B) { + v := addHelper32{} + bts := make([]byte, 0, v.Msgsize()) + bts, _ = v.MarshalMsg(bts[0:0]) + b.SetBytes(int64(len(bts))) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + bts, _ = v.MarshalMsg(bts[0:0]) + } +} + +func BenchmarkUnmarshaladdHelper32(b *testing.B) { + v := addHelper32{} + bts, _ := v.MarshalMsg(nil) + b.ReportAllocs() + b.SetBytes(int64(len(bts))) + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := v.UnmarshalMsg(bts) + if err != nil { + b.Fatal(err) + } + } +} + +func TestEncodeDecodeaddHelper32(t *testing.T) { + v := addHelper32{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + + m := v.Msgsize() + if buf.Len() > m { + t.Logf("WARNING: Msgsize() for %v is inaccurate", v) + } + + vn := addHelper32{} + err := msgp.Decode(&buf, &vn) + if err != nil { + t.Error(err) + } + + buf.Reset() + msgp.Encode(&buf, &v) + err = msgp.NewReader(&buf).Skip() + if err != nil { + t.Error(err) + } +} + +func BenchmarkEncodeaddHelper32(b *testing.B) { + v := addHelper32{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + b.SetBytes(int64(buf.Len())) + en := msgp.NewWriter(msgp.Nowhere) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.EncodeMsg(en) + } + en.Flush() +} + +func BenchmarkDecodeaddHelper32(b *testing.B) { + v := addHelper32{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + b.SetBytes(int64(buf.Len())) + rd := msgp.NewEndlessReader(buf.Bytes(), b) + dc := msgp.NewReader(rd) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + err := v.DecodeMsg(dc) + if err != nil { + b.Fatal(err) + } + } +} + +func TestMarshalUnmarshalinterval32(t *testing.T) { + v := interval32{} + bts, err := v.MarshalMsg(nil) + if err != nil { + t.Fatal(err) + } + left, err := v.UnmarshalMsg(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after UnmarshalMsg(): %q", len(left), left) + } + + left, err = msgp.Skip(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after Skip(): %q", len(left), left) + } +} + +func BenchmarkMarshalMsginterval32(b *testing.B) { + v := interval32{} + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.MarshalMsg(nil) + } +} + +func BenchmarkAppendMsginterval32(b *testing.B) { + v := interval32{} + bts := make([]byte, 0, v.Msgsize()) + bts, _ = v.MarshalMsg(bts[0:0]) + b.SetBytes(int64(len(bts))) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + bts, _ = v.MarshalMsg(bts[0:0]) + } +} + +func BenchmarkUnmarshalinterval32(b *testing.B) { + v := interval32{} + bts, _ := v.MarshalMsg(nil) + b.ReportAllocs() + b.SetBytes(int64(len(bts))) + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := v.UnmarshalMsg(bts) + if err != nil { + b.Fatal(err) + } + } +} + +func TestEncodeDecodeinterval32(t *testing.T) { + v := interval32{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + + m := v.Msgsize() + if buf.Len() > m { + t.Logf("WARNING: Msgsize() for %v is inaccurate", v) + } + + vn := interval32{} + err := msgp.Decode(&buf, &vn) + if err != nil { + t.Error(err) + } + + buf.Reset() + msgp.Encode(&buf, &v) + err = msgp.NewReader(&buf).Skip() + if err != nil { + t.Error(err) + } +} + +func BenchmarkEncodeinterval32(b *testing.B) { + v := interval32{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + b.SetBytes(int64(buf.Len())) + en := msgp.NewWriter(msgp.Nowhere) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.EncodeMsg(en) + } + en.Flush() +} + +func BenchmarkDecodeinterval32(b *testing.B) { + v := interval32{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + b.SetBytes(int64(buf.Len())) + rd := msgp.NewEndlessReader(buf.Bytes(), b) + dc := msgp.NewReader(rd) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + err := v.DecodeMsg(dc) + if err != nil { + b.Fatal(err) + } + } +} + +func TestMarshalUnmarshalrunContainer32(t *testing.T) { + v := runContainer32{} + bts, err := v.MarshalMsg(nil) + if err != nil { + t.Fatal(err) + } + left, err := v.UnmarshalMsg(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after UnmarshalMsg(): %q", len(left), left) + } + + left, err = msgp.Skip(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after Skip(): %q", len(left), left) + } +} + +func BenchmarkMarshalMsgrunContainer32(b *testing.B) { + v := runContainer32{} + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.MarshalMsg(nil) + } +} + +func BenchmarkAppendMsgrunContainer32(b *testing.B) { + v := runContainer32{} + bts := make([]byte, 0, v.Msgsize()) + bts, _ = v.MarshalMsg(bts[0:0]) + b.SetBytes(int64(len(bts))) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + bts, _ = v.MarshalMsg(bts[0:0]) + } +} + +func BenchmarkUnmarshalrunContainer32(b *testing.B) { + v := runContainer32{} + bts, _ := v.MarshalMsg(nil) + b.ReportAllocs() + b.SetBytes(int64(len(bts))) + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := v.UnmarshalMsg(bts) + if err != nil { + b.Fatal(err) + } + } +} + +func TestEncodeDecoderunContainer32(t *testing.T) { + v := runContainer32{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + + m := v.Msgsize() + if buf.Len() > m { + t.Logf("WARNING: Msgsize() for %v is inaccurate", v) + } + + vn := runContainer32{} + err := msgp.Decode(&buf, &vn) + if err != nil { + t.Error(err) + } + + buf.Reset() + msgp.Encode(&buf, &v) + err = msgp.NewReader(&buf).Skip() + if err != nil { + t.Error(err) + } +} + +func BenchmarkEncoderunContainer32(b *testing.B) { + v := runContainer32{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + b.SetBytes(int64(buf.Len())) + en := msgp.NewWriter(msgp.Nowhere) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.EncodeMsg(en) + } + en.Flush() +} + +func BenchmarkDecoderunContainer32(b *testing.B) { + v := runContainer32{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + b.SetBytes(int64(buf.Len())) + rd := msgp.NewEndlessReader(buf.Bytes(), b) + dc := msgp.NewReader(rd) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + err := v.DecodeMsg(dc) + if err != nil { + b.Fatal(err) + } + } +} + +func TestMarshalUnmarshalrunIterator32(t *testing.T) { + v := runIterator32{} + bts, err := v.MarshalMsg(nil) + if err != nil { + t.Fatal(err) + } + left, err := v.UnmarshalMsg(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after UnmarshalMsg(): %q", len(left), left) + } + + left, err = msgp.Skip(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after Skip(): %q", len(left), left) + } +} + +func BenchmarkMarshalMsgrunIterator32(b *testing.B) { + v := runIterator32{} + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.MarshalMsg(nil) + } +} + +func BenchmarkAppendMsgrunIterator32(b *testing.B) { + v := runIterator32{} + bts := make([]byte, 0, v.Msgsize()) + bts, _ = v.MarshalMsg(bts[0:0]) + b.SetBytes(int64(len(bts))) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + bts, _ = v.MarshalMsg(bts[0:0]) + } +} + +func BenchmarkUnmarshalrunIterator32(b *testing.B) { + v := runIterator32{} + bts, _ := v.MarshalMsg(nil) + b.ReportAllocs() + b.SetBytes(int64(len(bts))) + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := v.UnmarshalMsg(bts) + if err != nil { + b.Fatal(err) + } + } +} + +func TestEncodeDecoderunIterator32(t *testing.T) { + v := runIterator32{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + + m := v.Msgsize() + if buf.Len() > m { + t.Logf("WARNING: Msgsize() for %v is inaccurate", v) + } + + vn := runIterator32{} + err := msgp.Decode(&buf, &vn) + if err != nil { + t.Error(err) + } + + buf.Reset() + msgp.Encode(&buf, &v) + err = msgp.NewReader(&buf).Skip() + if err != nil { + t.Error(err) + } +} + +func BenchmarkEncoderunIterator32(b *testing.B) { + v := runIterator32{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + b.SetBytes(int64(buf.Len())) + en := msgp.NewWriter(msgp.Nowhere) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.EncodeMsg(en) + } + en.Flush() +} + +func BenchmarkDecoderunIterator32(b *testing.B) { + v := runIterator32{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + b.SetBytes(int64(buf.Len())) + rd := msgp.NewEndlessReader(buf.Bytes(), b) + dc := msgp.NewReader(rd) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + err := v.DecodeMsg(dc) + if err != nil { + b.Fatal(err) + } + } +} + +func TestMarshalUnmarshaluint32Slice(t *testing.T) { + v := uint32Slice{} + bts, err := v.MarshalMsg(nil) + if err != nil { + t.Fatal(err) + } + left, err := v.UnmarshalMsg(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after UnmarshalMsg(): %q", len(left), left) + } + + left, err = msgp.Skip(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after Skip(): %q", len(left), left) + } +} + +func BenchmarkMarshalMsguint32Slice(b *testing.B) { + v := uint32Slice{} + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.MarshalMsg(nil) + } +} + +func BenchmarkAppendMsguint32Slice(b *testing.B) { + v := uint32Slice{} + bts := make([]byte, 0, v.Msgsize()) + bts, _ = v.MarshalMsg(bts[0:0]) + b.SetBytes(int64(len(bts))) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + bts, _ = v.MarshalMsg(bts[0:0]) + } +} + +func BenchmarkUnmarshaluint32Slice(b *testing.B) { + v := uint32Slice{} + bts, _ := v.MarshalMsg(nil) + b.ReportAllocs() + b.SetBytes(int64(len(bts))) + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := v.UnmarshalMsg(bts) + if err != nil { + b.Fatal(err) + } + } +} + +func TestEncodeDecodeuint32Slice(t *testing.T) { + v := uint32Slice{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + + m := v.Msgsize() + if buf.Len() > m { + t.Logf("WARNING: Msgsize() for %v is inaccurate", v) + } + + vn := uint32Slice{} + err := msgp.Decode(&buf, &vn) + if err != nil { + t.Error(err) + } + + buf.Reset() + msgp.Encode(&buf, &v) + err = msgp.NewReader(&buf).Skip() + if err != nil { + t.Error(err) + } +} + +func BenchmarkEncodeuint32Slice(b *testing.B) { + v := uint32Slice{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + b.SetBytes(int64(buf.Len())) + en := msgp.NewWriter(msgp.Nowhere) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.EncodeMsg(en) + } + en.Flush() +} + +func BenchmarkDecodeuint32Slice(b *testing.B) { + v := uint32Slice{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + b.SetBytes(int64(buf.Len())) + rd := msgp.NewEndlessReader(buf.Bytes(), b) + dc := msgp.NewReader(rd) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + err := v.DecodeMsg(dc) + if err != nil { + b.Fatal(err) + } + } +} diff --git a/vendor/github.com/RoaringBitmap/roaring/rle_test.go b/vendor/github.com/RoaringBitmap/roaring/rle_test.go new file mode 100644 index 0000000..44140da --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/rle_test.go @@ -0,0 +1,737 @@ +package roaring + +import ( + "fmt" + "math/rand" + "sort" + "testing" + //"unsafe" + + . "github.com/smartystreets/goconvey/convey" +) + +func init() { + rleVerbose = testing.Verbose() +} + +func TestRleInterval32s(t *testing.T) { + + Convey("canMerge, and mergeInterval32s should do what they say", t, func() { + a := interval32{start: 0, last: 9} + msg := a.String() + p("a is %v", msg) + b := interval32{start: 0, last: 1} + report := sliceToString32([]interval32{a, b}) + _ = report + p("a and b together are: %s", report) + c := interval32{start: 2, last: 4} + d := interval32{start: 2, last: 5} + e := interval32{start: 0, last: 4} + f := interval32{start: 9, last: 9} + g := interval32{start: 8, last: 9} + h := interval32{start: 5, last: 6} + i := interval32{start: 6, last: 6} + + aIb, empty := intersectInterval32s(a, b) + So(empty, ShouldBeFalse) + So(aIb, ShouldResemble, b) + + So(canMerge32(b, c), ShouldBeTrue) + So(canMerge32(c, b), ShouldBeTrue) + So(canMerge32(a, h), ShouldBeTrue) + + So(canMerge32(d, e), ShouldBeTrue) + So(canMerge32(f, g), ShouldBeTrue) + So(canMerge32(c, h), ShouldBeTrue) + + So(canMerge32(b, h), ShouldBeFalse) + So(canMerge32(h, b), ShouldBeFalse) + So(canMerge32(c, i), ShouldBeFalse) + + So(mergeInterval32s(b, c), ShouldResemble, e) + So(mergeInterval32s(c, b), ShouldResemble, e) + + So(mergeInterval32s(h, i), ShouldResemble, h) + So(mergeInterval32s(i, h), ShouldResemble, h) + + ////// start + So(mergeInterval32s(interval32{start: 0, last: 0}, interval32{start: 1, last: 1}), ShouldResemble, interval32{start: 0, last: 1}) + So(mergeInterval32s(interval32{start: 1, last: 1}, interval32{start: 0, last: 0}), ShouldResemble, interval32{start: 0, last: 1}) + So(mergeInterval32s(interval32{start: 0, last: 4}, interval32{start: 3, last: 5}), ShouldResemble, interval32{start: 0, last: 5}) + So(mergeInterval32s(interval32{start: 0, last: 4}, interval32{start: 3, last: 4}), ShouldResemble, interval32{start: 0, last: 4}) + + So(mergeInterval32s(interval32{start: 0, last: 8}, interval32{start: 1, last: 7}), ShouldResemble, interval32{start: 0, last: 8}) + So(mergeInterval32s(interval32{start: 1, last: 7}, interval32{start: 0, last: 8}), ShouldResemble, interval32{start: 0, last: 8}) + + So(func() { _ = mergeInterval32s(interval32{start: 0, last: 0}, interval32{start: 2, last: 3}) }, ShouldPanic) + + }) +} + +func TestRleRunIterator32(t *testing.T) { + + Convey("RunIterator32 unit tests for Cur, Next, HasNext, and Remove should pass", t, func() { + { + rc := newRunContainer32() + msg := rc.String() + _ = msg + p("an empty container: '%s'\n", msg) + So(rc.cardinality(), ShouldEqual, 0) + it := rc.newRunIterator32() + So(it.hasNext(), ShouldBeFalse) + } + { + rc := newRunContainer32TakeOwnership([]interval32{{start: 4, last: 4}}) + So(rc.cardinality(), ShouldEqual, 1) + it := rc.newRunIterator32() + So(it.hasNext(), ShouldBeTrue) + So(it.next(), ShouldResemble, uint32(4)) + So(it.cur(), ShouldResemble, uint32(4)) + } + { + rc := newRunContainer32CopyIv([]interval32{{start: 4, last: 9}}) + So(rc.cardinality(), ShouldEqual, 6) + it := rc.newRunIterator32() + So(it.hasNext(), ShouldBeTrue) + for i := 4; i < 10; i++ { + So(it.next(), ShouldEqual, uint32(i)) + } + So(it.hasNext(), ShouldBeFalse) + } + + { + rc := newRunContainer32TakeOwnership([]interval32{{start: 4, last: 9}}) + card := rc.cardinality() + So(card, ShouldEqual, 6) + //So(rc.serializedSizeInBytes(), ShouldEqual, 2+4*rc.numberOfRuns()) + + it := rc.newRunIterator32() + So(it.hasNext(), ShouldBeTrue) + for i := 4; i < 6; i++ { + So(it.next(), ShouldEqual, uint32(i)) + } + So(it.cur(), ShouldEqual, uint32(5)) + + p("before Remove of 5, rc = '%s'", rc) + + So(it.remove(), ShouldEqual, uint32(5)) + + p("after Remove of 5, rc = '%s'", rc) + So(rc.cardinality(), ShouldEqual, 5) + + it2 := rc.newRunIterator32() + So(rc.cardinality(), ShouldEqual, 5) + So(it2.next(), ShouldEqual, uint32(4)) + for i := 6; i < 10; i++ { + So(it2.next(), ShouldEqual, uint32(i)) + } + } + { + rc := newRunContainer32TakeOwnership([]interval32{ + {start: 0, last: 0}, + {start: 2, last: 2}, + {start: 4, last: 4}, + }) + rc1 := newRunContainer32TakeOwnership([]interval32{ + {start: 6, last: 7}, + {start: 10, last: 11}, + {start: MaxUint32, last: MaxUint32}, + }) + + rc = rc.union(rc1) + + So(rc.cardinality(), ShouldEqual, 8) + it := rc.newRunIterator32() + So(it.next(), ShouldEqual, uint32(0)) + So(it.next(), ShouldEqual, uint32(2)) + So(it.next(), ShouldEqual, uint32(4)) + So(it.next(), ShouldEqual, uint32(6)) + So(it.next(), ShouldEqual, uint32(7)) + So(it.next(), ShouldEqual, uint32(10)) + So(it.next(), ShouldEqual, uint32(11)) + So(it.next(), ShouldEqual, uint32(MaxUint32)) + So(it.hasNext(), ShouldEqual, false) + + rc2 := newRunContainer32TakeOwnership([]interval32{ + {start: 0, last: MaxUint32}, + }) + + p("union with a full [0,2^32-1] container should yield that same single interval run container") + rc2 = rc2.union(rc) + So(rc2.numIntervals(), ShouldEqual, 1) + } + }) +} + +func TestRleRunSearch32(t *testing.T) { + + Convey("RunContainer32.search should respect the prior bounds we provide for efficiency of searching through a subset of the intervals", t, func() { + { + vals := []uint32{0, 2, 4, 6, 8, 10, 12, 14, 16, 18, MaxUint32 - 3, MaxUint32} + exAt := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} // expected at + absent := []uint32{1, 3, 5, 7, 9, 11, 13, 15, 17, 19, MaxUint32 - 2} + + rc := newRunContainer32FromVals(true, vals...) + + So(rc.cardinality(), ShouldEqual, 12) + + var where int64 + var present bool + + for i, v := range vals { + where, present, _ = rc.search(int64(v), nil) + So(present, ShouldBeTrue) + So(where, ShouldEqual, exAt[i]) + } + + for i, v := range absent { + where, present, _ = rc.search(int64(v), nil) + So(present, ShouldBeFalse) + So(where, ShouldEqual, i) + } + + // delete the MaxUint32 so we can test + // the behavior when searching near upper limit. + + p("before removing MaxUint32: %v", rc) + + So(rc.cardinality(), ShouldEqual, 12) + So(rc.numIntervals(), ShouldEqual, 12) + + rc.removeKey(MaxUint32) + p("after removing MaxUint32: %v", rc) + So(rc.cardinality(), ShouldEqual, 11) + So(rc.numIntervals(), ShouldEqual, 11) + + p("search for absent MaxUint32 should return the interval before our key") + where, present, _ = rc.search(MaxUint32, nil) + So(present, ShouldBeFalse) + So(where, ShouldEqual, 10) + + var numCompares int + where, present, numCompares = rc.search(MaxUint32, nil) + So(present, ShouldBeFalse) + So(where, ShouldEqual, 10) + p("numCompares = %v", numCompares) + So(numCompares, ShouldEqual, 3) + + p("confirm that opts searchOptions to search reduces search time") + opts := &searchOptions{ + startIndex: 5, + } + where, present, numCompares = rc.search(MaxUint32, opts) + So(present, ShouldBeFalse) + So(where, ShouldEqual, 10) + p("numCompares = %v", numCompares) + So(numCompares, ShouldEqual, 2) + + p("confirm that opts searchOptions to search is respected") + where, present, _ = rc.search(MaxUint32-3, opts) + So(present, ShouldBeTrue) + So(where, ShouldEqual, 10) + + // with the bound in place, MaxUint32-3 should not be found + opts.endxIndex = 10 + where, present, _ = rc.search(MaxUint32-3, opts) + So(present, ShouldBeFalse) + So(where, ShouldEqual, 9) + + } + }) + +} + +func TestRleIntersection32(t *testing.T) { + + Convey("RunContainer32.intersect of two RunContainer32(s) should return their intersection", t, func() { + { + vals := []uint32{0, 2, 4, 6, 8, 10, 12, 14, 16, 18, MaxUint32 - 3, MaxUint32 - 1} + + a := newRunContainer32FromVals(true, vals[:5]...) + b := newRunContainer32FromVals(true, vals[2:]...) + + p("a is %v", a) + p("b is %v", b) + + So(haveOverlap32(interval32{0, 2}, interval32{2, 2}), ShouldBeTrue) + So(haveOverlap32(interval32{0, 2}, interval32{3, 3}), ShouldBeFalse) + + isect := a.intersect(b) + + p("isect is %v", isect) + + So(isect.cardinality(), ShouldEqual, 3) + So(isect.contains(4), ShouldBeTrue) + So(isect.contains(6), ShouldBeTrue) + So(isect.contains(8), ShouldBeTrue) + + d := newRunContainer32TakeOwnership([]interval32{{start: 0, last: MaxUint32}}) + + isect = isect.intersect(d) + p("isect is %v", isect) + So(isect.cardinality(), ShouldEqual, 3) + So(isect.contains(4), ShouldBeTrue) + So(isect.contains(6), ShouldBeTrue) + So(isect.contains(8), ShouldBeTrue) + + p("test breaking apart intervals") + e := newRunContainer32TakeOwnership([]interval32{{2, 4}, {8, 9}, {14, 16}, {20, 22}}) + f := newRunContainer32TakeOwnership([]interval32{{3, 18}, {22, 23}}) + + p("e = %v", e) + p("f = %v", f) + + { + isect = e.intersect(f) + p("isect of e and f is %v", isect) + So(isect.cardinality(), ShouldEqual, 8) + So(isect.contains(3), ShouldBeTrue) + So(isect.contains(4), ShouldBeTrue) + So(isect.contains(8), ShouldBeTrue) + So(isect.contains(9), ShouldBeTrue) + So(isect.contains(14), ShouldBeTrue) + So(isect.contains(15), ShouldBeTrue) + So(isect.contains(16), ShouldBeTrue) + So(isect.contains(22), ShouldBeTrue) + } + + { + // check for symmetry + isect = f.intersect(e) + p("isect of f and e is %v", isect) + So(isect.cardinality(), ShouldEqual, 8) + So(isect.contains(3), ShouldBeTrue) + So(isect.contains(4), ShouldBeTrue) + So(isect.contains(8), ShouldBeTrue) + So(isect.contains(9), ShouldBeTrue) + So(isect.contains(14), ShouldBeTrue) + So(isect.contains(15), ShouldBeTrue) + So(isect.contains(16), ShouldBeTrue) + So(isect.contains(22), ShouldBeTrue) + } + + } + }) +} + +func TestRleRandomIntersection32(t *testing.T) { + + Convey("RunContainer.intersect of two RunContainers should return their intersection, and this should hold over randomized container content when compared to intersection done with hash maps", t, func() { + + seed := int64(42) + p("seed is %v", seed) + rand.Seed(seed) + + trials := []trial{ + {n: 100, percentFill: .80, ntrial: 10}, + {n: 1000, percentFill: .20, ntrial: 20}, + {n: 10000, percentFill: .01, ntrial: 10}, + {n: 1000, percentFill: .99, ntrial: 10}, + } + + tester := func(tr trial) { + for j := 0; j < tr.ntrial; j++ { + p("TestRleRandomIntersection on check# j=%v", j) + ma := make(map[int]bool) + mb := make(map[int]bool) + + n := tr.n + a := []uint32{} + b := []uint32{} + + var first, second int + + draw := int(float64(n) * tr.percentFill) + for i := 0; i < draw; i++ { + r0 := rand.Intn(n) + a = append(a, uint32(r0)) + ma[r0] = true + if i == 0 { + first = r0 + second = r0 + 1 + p("i is 0, so appending also to a the r0+1 == %v value", second) + a = append(a, uint32(second)) + ma[second] = true + } + + r1 := rand.Intn(n) + b = append(b, uint32(r1)) + mb[r1] = true + } + + // print a; very likely it has dups + sort.Sort(uint32Slice(a)) + stringA := "" + for i := range a { + stringA += fmt.Sprintf("%v, ", a[i]) + } + p("a is '%v'", stringA) + + // hash version of intersect: + hashi := make(map[int]bool) + for k := range ma { + if mb[k] { + hashi[k] = true + } + } + + // RunContainer's Intersect + brle := newRunContainer32FromVals(false, b...) + + //arle := newRunContainer32FromVals(false, a...) + // instead of the above line, create from array + // get better test coverage: + arr := newArrayContainerRange(int(first), int(second)) + arle := newRunContainer32FromArray(arr) + p("after newRunContainer32FromArray(arr), arle is %v", arle) + arle.set(false, a...) + p("after set(false, a), arle is %v", arle) + + isect := arle.intersect(brle) + + p("isect is %v", isect) + + //showHash("hashi", hashi) + + for k := range hashi { + p("hashi has %v, checking in isect", k) + So(isect.contains(uint32(k)), ShouldBeTrue) + } + + p("checking for cardinality agreement: isect is %v, len(hashi) is %v", isect.cardinality(), len(hashi)) + So(isect.cardinality(), ShouldEqual, len(hashi)) + } + p("done with randomized intersect() checks for trial %#v", tr) + } + + for i := range trials { + tester(trials[i]) + } + + }) +} + +func TestRleRandomUnion32(t *testing.T) { + + Convey("RunContainer.union of two RunContainers should return their union, and this should hold over randomized container content when compared to union done with hash maps", t, func() { + + seed := int64(42) + p("seed is %v", seed) + rand.Seed(seed) + + trials := []trial{ + {n: 100, percentFill: .80, ntrial: 10}, + {n: 1000, percentFill: .20, ntrial: 20}, + {n: 10000, percentFill: .01, ntrial: 10}, + {n: 1000, percentFill: .99, ntrial: 10, percentDelete: .04}, + } + + tester := func(tr trial) { + for j := 0; j < tr.ntrial; j++ { + p("TestRleRandomUnion on check# j=%v", j) + ma := make(map[int]bool) + mb := make(map[int]bool) + + n := tr.n + a := []uint32{} + b := []uint32{} + + draw := int(float64(n) * tr.percentFill) + numDel := int(float64(n) * tr.percentDelete) + for i := 0; i < draw; i++ { + r0 := rand.Intn(n) + a = append(a, uint32(r0)) + ma[r0] = true + + r1 := rand.Intn(n) + b = append(b, uint32(r1)) + mb[r1] = true + } + + // hash version of union: + hashu := make(map[int]bool) + for k := range ma { + hashu[k] = true + } + for k := range mb { + hashu[k] = true + } + + //showHash("hashu", hashu) + + // RunContainer's Union + arle := newRunContainer32() + for i := range a { + arle.Add(a[i]) + } + brle := newRunContainer32() + brle.set(false, b...) + + union := arle.union(brle) + + p("union is %v", union) + + p("union.cardinality(): %v, versus len(hashu): %v", union.cardinality(), len(hashu)) + + un := union.AsSlice() + sort.Sort(uint32Slice(un)) + + for kk, v := range un { + p("kk:%v, RunContainer.union has %v, checking hashmap: %v", kk, v, hashu[int(v)]) + _ = kk + So(hashu[int(v)], ShouldBeTrue) + } + + for k := range hashu { + p("hashu has %v, checking in union", k) + So(union.contains(uint32(k)), ShouldBeTrue) + } + + p("checking for cardinality agreement:") + So(union.cardinality(), ShouldEqual, len(hashu)) + + // do the deletes, exercising the remove functionality + for i := 0; i < numDel; i++ { + r1 := rand.Intn(len(a)) + goner := a[r1] + union.removeKey(goner) + delete(hashu, int(goner)) + } + // verify the same as in the hashu + So(union.cardinality(), ShouldEqual, len(hashu)) + for k := range hashu { + p("hashu has %v, checking in union", k) + So(union.contains(uint32(k)), ShouldBeTrue) + } + + } + p("done with randomized Union() checks for trial %#v", tr) + } + + for i := range trials { + tester(trials[i]) + } + + }) +} + +func TestRleAndOrXor32(t *testing.T) { + + Convey("RunContainer And, Or, Xor tests", t, func() { + { + rc := newRunContainer32TakeOwnership([]interval32{ + {start: 0, last: 0}, + {start: 2, last: 2}, + {start: 4, last: 4}, + }) + b0 := NewBitmap() + b0.Add(2) + b0.Add(6) + b0.Add(8) + + and := rc.And(b0) + or := rc.Or(b0) + xor := rc.Xor(b0) + + So(and.GetCardinality(), ShouldEqual, 1) + So(or.GetCardinality(), ShouldEqual, 5) + So(xor.GetCardinality(), ShouldEqual, 4) + + // test creating size 0 and 1 from array + arr := newArrayContainerCapacity(0) + empty := newRunContainer32FromArray(arr) + onceler := newArrayContainerCapacity(1) + onceler.content = append(onceler.content, uint16(0)) + oneZero := newRunContainer32FromArray(onceler) + So(empty.cardinality(), ShouldEqual, 0) + So(oneZero.cardinality(), ShouldEqual, 1) + So(empty.And(b0).GetCardinality(), ShouldEqual, 0) + So(empty.Or(b0).GetCardinality(), ShouldEqual, 3) + + // exercise newRunContainer32FromVals() with 0 and 1 inputs. + empty2 := newRunContainer32FromVals(false, []uint32{}...) + So(empty2.cardinality(), ShouldEqual, 0) + one2 := newRunContainer32FromVals(false, []uint32{1}...) + So(one2.cardinality(), ShouldEqual, 1) + } + }) +} + +func TestRlePanics32(t *testing.T) { + + Convey("Some RunContainer calls/methods should panic if misused", t, func() { + + // newRunContainer32FromVals + So(func() { newRunContainer32FromVals(true, 1, 0) }, ShouldPanic) + + arr := newArrayContainerRange(1, 3) + arr.content = []uint16{2, 3, 3, 2, 1} + So(func() { newRunContainer32FromArray(arr) }, ShouldPanic) + }) +} + +func TestRleCoverageOddsAndEnds32(t *testing.T) { + + Convey("Some RunContainer code paths that don't otherwise get coverage -- these should be tested to increase percentage of code coverage in testing", t, func() { + + // p() code path + cur := rleVerbose + rleVerbose = true + p("") + rleVerbose = cur + + // RunContainer.String() + rc := &runContainer32{} + So(rc.String(), ShouldEqual, "runContainer32{}") + rc.iv = make([]interval32, 1) + rc.iv[0] = interval32{start: 3, last: 4} + So(rc.String(), ShouldEqual, "runContainer32{0:[3, 4], }") + + a := interval32{start: 5, last: 9} + b := interval32{start: 0, last: 1} + c := interval32{start: 1, last: 2} + + // intersectInterval32s(a, b interval32) + isect, isEmpty := intersectInterval32s(a, b) + So(isEmpty, ShouldBeTrue) + // [0,0] can't be trusted: So(isect.runlen(), ShouldEqual, 0) + isect, isEmpty = intersectInterval32s(b, c) + So(isEmpty, ShouldBeFalse) + So(isect.runlen(), ShouldEqual, 1) + + // runContainer32.union + { + ra := newRunContainer32FromVals(false, 4, 5) + rb := newRunContainer32FromVals(false, 4, 6, 8, 9, 10) + ra.union(rb) + So(rb.indexOfIntervalAtOrAfter(4, 2), ShouldEqual, 2) + So(rb.indexOfIntervalAtOrAfter(3, 2), ShouldEqual, 2) + } + + // runContainer.intersect + { + ra := newRunContainer32() + rb := newRunContainer32() + So(ra.intersect(rb).cardinality(), ShouldEqual, 0) + } + { + ra := newRunContainer32FromVals(false, 1) + rb := newRunContainer32FromVals(false, 4) + So(ra.intersect(rb).cardinality(), ShouldEqual, 0) + } + + // runContainer.Add + { + ra := newRunContainer32FromVals(false, 1) + rb := newRunContainer32FromVals(false, 4) + So(ra.cardinality(), ShouldEqual, 1) + So(rb.cardinality(), ShouldEqual, 1) + ra.Add(5) + So(ra.cardinality(), ShouldEqual, 2) + + // newRunIterator32() + empty := newRunContainer32() + it := empty.newRunIterator32() + So(func() { it.next() }, ShouldPanic) + it2 := ra.newRunIterator32() + it2.curIndex = int64(len(it2.rc.iv)) + So(func() { it2.next() }, ShouldPanic) + + // runIterator32.remove() + emptyIt := empty.newRunIterator32() + So(func() { emptyIt.remove() }, ShouldPanic) + + // newRunContainer32FromArray + arr := newArrayContainerRange(1, 6) + arr.content = []uint16{5, 5, 5, 6, 9} + rc3 := newRunContainer32FromArray(arr) + So(rc3.cardinality(), ShouldEqual, 3) + + // runContainer32SerializedSizeInBytes + // runContainer32.SerializedSizeInBytes + _ = runContainer32SerializedSizeInBytes(3) + _ = rc3.serializedSizeInBytes() + + // findNextIntervalThatIntersectsStartingFrom + idx, _ := rc3.findNextIntervalThatIntersectsStartingFrom(0, 100) + So(idx, ShouldEqual, 1) + + // deleteAt / remove + rc3.Add(10) + rc3.removeKey(10) + rc3.removeKey(9) + So(rc3.cardinality(), ShouldEqual, 2) + rc3.Add(9) + rc3.Add(10) + rc3.Add(12) + So(rc3.cardinality(), ShouldEqual, 5) + it3 := rc3.newRunIterator32() + it3.next() + it3.next() + it3.next() + it3.next() + So(it3.cur(), ShouldEqual, uint32(10)) + it3.remove() + So(it3.next(), ShouldEqual, uint32(12)) + } + + // runContainer32.equals + { + rc32 := newRunContainer32() + So(rc32.equals32(rc32), ShouldBeTrue) + rc32b := newRunContainer32() + So(rc32.equals32(rc32b), ShouldBeTrue) + rc32.Add(1) + rc32b.Add(2) + So(rc32.equals32(rc32b), ShouldBeFalse) + } + }) +} + +func TestRleStoringMax32(t *testing.T) { + + Convey("Storing the MaxUint32 should be possible, because it may be necessary to do so--users will assume that any valid uint32 should be storable. In particular the smaller 16-bit version will definitely expect full access to all bits.", t, func() { + + rc := newRunContainer32() + rc.Add(MaxUint32) + So(rc.contains(MaxUint32), ShouldBeTrue) + So(rc.cardinality(), ShouldEqual, 1) + rc.removeKey(MaxUint32) + So(rc.contains(MaxUint32), ShouldBeFalse) + So(rc.cardinality(), ShouldEqual, 0) + + rc.set(false, MaxUint32-1, MaxUint32) + So(rc.cardinality(), ShouldEqual, 2) + + So(rc.contains(MaxUint32-1), ShouldBeTrue) + So(rc.contains(MaxUint32), ShouldBeTrue) + rc.removeKey(MaxUint32 - 1) + So(rc.cardinality(), ShouldEqual, 1) + rc.removeKey(MaxUint32) + So(rc.cardinality(), ShouldEqual, 0) + + rc.set(false, MaxUint32-2, MaxUint32-1, MaxUint32) + So(rc.cardinality(), ShouldEqual, 3) + So(rc.numIntervals(), ShouldEqual, 1) + rc.removeKey(MaxUint32 - 1) + So(rc.numIntervals(), ShouldEqual, 2) + So(rc.cardinality(), ShouldEqual, 2) + + }) +} + +// go test -bench BenchmarkFromBitmap -run - +func BenchmarkFromBitmap32(b *testing.B) { + b.StopTimer() + seed := int64(42) + rand.Seed(seed) + + tr := trial{n: 10000, percentFill: .95, ntrial: 1, numRandomOpsPass: 100} + _, _, bc := getRandomSameThreeContainers(tr) + + b.StartTimer() + + for j := 0; j < b.N; j++ { + newRunContainer16FromBitmapContainer(bc) + } +} diff --git a/vendor/github.com/RoaringBitmap/roaring/rlecommon.go b/vendor/github.com/RoaringBitmap/roaring/rlecommon.go new file mode 100644 index 0000000..152872a --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/rlecommon.go @@ -0,0 +1,161 @@ +package roaring + +import ( + "fmt" +) + +// common to rle32.go and rle16.go + +// rleVerbose controls whether p() prints show up. +// The testing package sets this based on +// testing.Verbose(). +var rleVerbose bool + +// p is a shorthand for fmt.Printf with beginning and +// trailing newlines. p() makes it easy +// to add diagnostic print statements. +func p(format string, args ...interface{}) { + if rleVerbose { + fmt.Printf("\n"+format+"\n", args...) + } +} + +// MaxUint32 is the largest uint32 value. +const MaxUint32 = 4294967295 + +// MaxUint16 is the largest 16 bit unsigned int. +// This is the largest value an interval16 can store. +const MaxUint16 = 65535 + +// searchOptions allows us to accelerate runContainer32.search with +// prior knowledge of (mostly lower) bounds. This is used by Union +// and Intersect. +type searchOptions struct { + + // start here instead of at 0 + startIndex int64 + + // upper bound instead of len(rc.iv); + // endxIndex == 0 means ignore the bound and use + // endxIndex == n ==len(rc.iv) which is also + // naturally the default for search() + // when opt = nil. + endxIndex int64 +} + +// And finds the intersection of rc and b. +func (rc *runContainer32) And(b *Bitmap) *Bitmap { + out := NewBitmap() + for _, p := range rc.iv { + for i := p.start; i <= p.last; i++ { + if b.Contains(i) { + out.Add(i) + } + } + } + return out +} + +// Xor returns the exclusive-or of rc and b. +func (rc *runContainer32) Xor(b *Bitmap) *Bitmap { + out := b.Clone() + for _, p := range rc.iv { + for v := p.start; v <= p.last; v++ { + if out.Contains(v) { + out.RemoveRange(uint64(v), uint64(v+1)) + } else { + out.Add(v) + } + } + } + return out +} + +// Or returns the union of rc and b. +func (rc *runContainer32) Or(b *Bitmap) *Bitmap { + out := b.Clone() + for _, p := range rc.iv { + for v := p.start; v <= p.last; v++ { + out.Add(v) + } + } + return out +} + +// trial is used in the randomized testing of runContainers +type trial struct { + n int + percentFill float64 + ntrial int + + // only in the union test + // only subtract test + percentDelete float64 + + // only in 067 randomized operations + // we do this + 1 passes + numRandomOpsPass int + + // allow sampling range control + // only recent tests respect this. + srang *interval16 +} + +// And finds the intersection of rc and b. +func (rc *runContainer16) And(b *Bitmap) *Bitmap { + out := NewBitmap() + for _, p := range rc.iv { + for i := p.start; i <= p.last; i++ { + if b.Contains(uint32(i)) { + out.Add(uint32(i)) + } + } + } + return out +} + +// Xor returns the exclusive-or of rc and b. +func (rc *runContainer16) Xor(b *Bitmap) *Bitmap { + out := b.Clone() + for _, p := range rc.iv { + for v := p.start; v <= p.last; v++ { + w := uint32(v) + if out.Contains(w) { + out.RemoveRange(uint64(w), uint64(w+1)) + } else { + out.Add(w) + } + } + } + return out +} + +// Or returns the union of rc and b. +func (rc *runContainer16) Or(b *Bitmap) *Bitmap { + out := b.Clone() + for _, p := range rc.iv { + for v := p.start; v <= p.last; v++ { + out.Add(uint32(v)) + } + } + return out +} + +//func (rc *runContainer32) and(container) container { +// panic("TODO. not yet implemented") +//} + +// serializedSizeInBytes returns the number of bytes of memory +// required by this runContainer16. This is for the +// Roaring format, as specified https://github.com/RoaringBitmap/RoaringFormatSpec/ +func (rc *runContainer16) serializedSizeInBytes() int { + // number of runs in one uint16, then each run + // needs two more uint16 + return 2 + len(rc.iv)*4 +} + +// serializedSizeInBytes returns the number of bytes of memory +// required by this runContainer32. +func (rc *runContainer32) serializedSizeInBytes() int { + return 4 + len(rc.iv)*8 +} diff --git a/vendor/github.com/RoaringBitmap/roaring/rlei.go b/vendor/github.com/RoaringBitmap/roaring/rlei.go new file mode 100644 index 0000000..0da3422 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/rlei.go @@ -0,0 +1,701 @@ +package roaring + +/////////////////////////////////////////////////// +// +// container interface methods for runContainer16 +// +/////////////////////////////////////////////////// + +import ( + "fmt" +) + +// compile time verify we meet interface requirements +var _ container = &runContainer16{} + +func (rc *runContainer16) clone() container { + return newRunContainer16CopyIv(rc.iv) +} + +func (rc *runContainer16) minimum() uint16 { + return rc.iv[0].start // assume not empty +} + +func (rc *runContainer16) maximum() uint16 { + return rc.iv[len(rc.iv)-1].last // assume not empty +} + +func (rc *runContainer16) isFull() bool { + return (len(rc.iv) == 1) && ((rc.iv[0].start == 0) && (rc.iv[0].last == MaxUint16)) +} + +func (rc *runContainer16) and(a container) container { + if rc.isFull() { + return a.clone() + } + switch c := a.(type) { + case *runContainer16: + return rc.intersect(c) + case *arrayContainer: + return rc.andArray(c) + case *bitmapContainer: + return rc.andBitmapContainer(c) + } + panic("unsupported container type") +} + +func (rc *runContainer16) andCardinality(a container) int { + switch c := a.(type) { + case *runContainer16: + return int(rc.intersectCardinality(c)) + case *arrayContainer: + return rc.andArrayCardinality(c) + case *bitmapContainer: + return rc.andBitmapContainerCardinality(c) + } + panic("unsupported container type") +} + +// andBitmapContainer finds the intersection of rc and b. +func (rc *runContainer16) andBitmapContainer(bc *bitmapContainer) container { + bc2 := newBitmapContainerFromRun(rc) + return bc2.andBitmap(bc) +} + +func (rc *runContainer16) andArray(ac *arrayContainer) container { + bc1 := ac.toBitmapContainer() + bc2 := newBitmapContainerFromRun(rc) + return bc2.andBitmap(bc1) +} + +func (rc *runContainer16) andArrayCardinality(ac *arrayContainer) int { + pos := 0 + answer := 0 + maxpos := ac.getCardinality() + if maxpos == 0 { + return 0 // won't happen in actual code + } + v := ac.content[pos] +mainloop: + for _, p := range rc.iv { + for v < p.start { + pos++ + if pos == maxpos { + break mainloop + } + v = ac.content[pos] + } + for v <= p.last { + answer++ + pos++ + if pos == maxpos { + break mainloop + } + v = ac.content[pos] + } + } + return answer +} + +func (rc *runContainer16) iand(a container) container { + if rc.isFull() { + return a.clone() + } + switch c := a.(type) { + case *runContainer16: + return rc.inplaceIntersect(c) + case *arrayContainer: + return rc.iandArray(c) + case *bitmapContainer: + return rc.iandBitmapContainer(c) + } + panic("unsupported container type") +} + +func (rc *runContainer16) inplaceIntersect(rc2 *runContainer16) container { + // TODO: optimize by doing less allocation, possibly? + + // sect will be new + sect := rc.intersect(rc2) + *rc = *sect + return rc +} + +func (rc *runContainer16) iandBitmapContainer(bc *bitmapContainer) container { + isect := rc.andBitmapContainer(bc) + *rc = *newRunContainer16FromContainer(isect) + return rc +} + +func (rc *runContainer16) iandArray(ac *arrayContainer) container { + + bc1 := newBitmapContainerFromRun(rc) + bc2 := ac.toBitmapContainer() + and := bc1.andBitmap(bc2) + var rc2 *runContainer16 + switch x := and.(type) { + case *bitmapContainer: + rc2 = newRunContainer16FromBitmapContainer(x) + case *arrayContainer: + rc2 = newRunContainer16FromArray(x) + case *runContainer16: + rc2 = x + default: + panic("unknown container type") + } + *rc = *rc2 + return rc + + /* + // TODO: optimize by doing less allocation, possibly? + out := newRunContainer16() + for _, p := range rc.iv { + for i := p.start; i <= p.last; i++ { + if ac.contains(i) { + out.Add(i) + } + } + } + *rc = *out + return rc + */ +} + +func (rc *runContainer16) andNot(a container) container { + switch c := a.(type) { + case *arrayContainer: + return rc.andNotArray(c) + case *bitmapContainer: + return rc.andNotBitmap(c) + case *runContainer16: + return rc.andNotRunContainer16(c) + } + panic("unsupported container type") +} + +func (rc *runContainer16) fillLeastSignificant16bits(x []uint32, i int, mask uint32) { + k := 0 + var val int64 + for _, p := range rc.iv { + n := p.runlen() + for j := int64(0); j < n; j++ { + val = int64(p.start) + j + x[k+i] = uint32(val) | mask + k++ + } + } +} + +func (rc *runContainer16) getShortIterator() shortIterable { + return rc.newRunIterator16() +} + +// add the values in the range [firstOfRange, endx). endx +// is still abe to express 2^16 because it is an int not an uint16. +func (rc *runContainer16) iaddRange(firstOfRange, endx int) container { + + if firstOfRange >= endx { + panic(fmt.Sprintf("invalid %v = endx >= firstOfRange", endx)) + } + addme := newRunContainer16TakeOwnership([]interval16{ + { + start: uint16(firstOfRange), + last: uint16(endx - 1), + }, + }) + *rc = *rc.union(addme) + return rc +} + +// remove the values in the range [firstOfRange,endx) +func (rc *runContainer16) iremoveRange(firstOfRange, endx int) container { + if firstOfRange >= endx { + panic(fmt.Sprintf("request to iremove empty set [%v, %v),"+ + " nothing to do.", firstOfRange, endx)) + //return rc + } + x := interval16{start: uint16(firstOfRange), last: uint16(endx - 1)} + rc.isubtract(x) + return rc +} + +// not flip the values in the range [firstOfRange,endx) +func (rc *runContainer16) not(firstOfRange, endx int) container { + if firstOfRange >= endx { + panic(fmt.Sprintf("invalid %v = endx >= firstOfRange = %v", endx, firstOfRange)) + } + + return rc.Not(firstOfRange, endx) +} + +// Not flips the values in the range [firstOfRange,endx). +// This is not inplace. Only the returned value has the flipped bits. +// +// Currently implemented as (!A intersect B) union (A minus B), +// where A is rc, and B is the supplied [firstOfRange, endx) interval. +// +// TODO(time optimization): convert this to a single pass +// algorithm by copying AndNotRunContainer16() and modifying it. +// Current routine is correct but +// makes 2 more passes through the arrays than should be +// strictly necessary. Measure both ways though--this may not matter. +// +func (rc *runContainer16) Not(firstOfRange, endx int) *runContainer16 { + + if firstOfRange >= endx { + panic(fmt.Sprintf("invalid %v = endx >= firstOfRange == %v", endx, firstOfRange)) + } + + if firstOfRange >= endx { + return rc.Clone() + } + + a := rc + // algo: + // (!A intersect B) union (A minus B) + + nota := a.invert() + + bs := []interval16{{start: uint16(firstOfRange), last: uint16(endx - 1)}} + b := newRunContainer16TakeOwnership(bs) + + notAintersectB := nota.intersect(b) + + aMinusB := a.AndNotRunContainer16(b) + + rc2 := notAintersectB.union(aMinusB) + return rc2 +} + +// equals is now logical equals; it does not require the +// same underlying container type. +func (rc *runContainer16) equals(o container) bool { + srb, ok := o.(*runContainer16) + + if !ok { + // maybe value instead of pointer + val, valok := o.(*runContainer16) + if valok { + srb = val + ok = true + } + } + if ok { + // Check if the containers are the same object. + if rc == srb { + return true + } + + if len(srb.iv) != len(rc.iv) { + return false + } + + for i, v := range rc.iv { + if v != srb.iv[i] { + return false + } + } + return true + } + + // use generic comparison + if o.getCardinality() != rc.getCardinality() { + return false + } + rit := rc.getShortIterator() + bit := o.getShortIterator() + + //k := 0 + for rit.hasNext() { + if bit.next() != rit.next() { + return false + } + //k++ + } + return true +} + +func (rc *runContainer16) iaddReturnMinimized(x uint16) container { + rc.Add(x) + return rc +} + +func (rc *runContainer16) iadd(x uint16) (wasNew bool) { + return rc.Add(x) +} + +func (rc *runContainer16) iremoveReturnMinimized(x uint16) container { + rc.removeKey(x) + return rc +} + +func (rc *runContainer16) iremove(x uint16) bool { + return rc.removeKey(x) +} + +func (rc *runContainer16) or(a container) container { + if rc.isFull() { + return rc.clone() + } + switch c := a.(type) { + case *runContainer16: + return rc.union(c) + case *arrayContainer: + return rc.orArray(c) + case *bitmapContainer: + return rc.orBitmapContainer(c) + } + panic("unsupported container type") +} + +func (rc *runContainer16) orCardinality(a container) int { + switch c := a.(type) { + case *runContainer16: + return int(rc.unionCardinality(c)) + case *arrayContainer: + return rc.orArrayCardinality(c) + case *bitmapContainer: + return rc.orBitmapContainerCardinality(c) + } + panic("unsupported container type") +} + +// orBitmapContainer finds the union of rc and bc. +func (rc *runContainer16) orBitmapContainer(bc *bitmapContainer) container { + bc2 := newBitmapContainerFromRun(rc) + return bc2.iorBitmap(bc) +} + +func (rc *runContainer16) andBitmapContainerCardinality(bc *bitmapContainer) int { + answer := 0 + for i := range rc.iv { + answer += bc.getCardinalityInRange(uint(rc.iv[i].start), uint(rc.iv[i].last)+1) + } + //bc.computeCardinality() + return answer +} + +func (rc *runContainer16) orBitmapContainerCardinality(bc *bitmapContainer) int { + return rc.getCardinality() + bc.getCardinality() - rc.andBitmapContainerCardinality(bc) +} + +// orArray finds the union of rc and ac. +func (rc *runContainer16) orArray(ac *arrayContainer) container { + bc1 := newBitmapContainerFromRun(rc) + bc2 := ac.toBitmapContainer() + return bc1.orBitmap(bc2) +} + +// orArray finds the union of rc and ac. +func (rc *runContainer16) orArrayCardinality(ac *arrayContainer) int { + return ac.getCardinality() + rc.getCardinality() - rc.andArrayCardinality(ac) +} + +func (rc *runContainer16) ior(a container) container { + if rc.isFull() { + return rc + } + switch c := a.(type) { + case *runContainer16: + return rc.inplaceUnion(c) + case *arrayContainer: + return rc.iorArray(c) + case *bitmapContainer: + return rc.iorBitmapContainer(c) + } + panic("unsupported container type") +} + +func (rc *runContainer16) inplaceUnion(rc2 *runContainer16) container { + p("rc.inplaceUnion with len(rc2.iv)=%v", len(rc2.iv)) + for _, p := range rc2.iv { + last := int64(p.last) + for i := int64(p.start); i <= last; i++ { + rc.Add(uint16(i)) + } + } + return rc +} + +func (rc *runContainer16) iorBitmapContainer(bc *bitmapContainer) container { + + it := bc.getShortIterator() + for it.hasNext() { + rc.Add(it.next()) + } + return rc +} + +func (rc *runContainer16) iorArray(ac *arrayContainer) container { + it := ac.getShortIterator() + for it.hasNext() { + rc.Add(it.next()) + } + return rc +} + +// lazyIOR is described (not yet implemented) in +// this nice note from @lemire on +// https://github.com/RoaringBitmap/roaring/pull/70#issuecomment-263613737 +// +// Description of lazyOR and lazyIOR from @lemire: +// +// Lazy functions are optional and can be simply +// wrapper around non-lazy functions. +// +// The idea of "laziness" is as follows. It is +// inspired by the concept of lazy evaluation +// you might be familiar with (functional programming +// and all that). So a roaring bitmap is +// such that all its containers are, in some +// sense, chosen to use as little memory as +// possible. This is nice. Also, all bitsets +// are "cardinality aware" so that you can do +// fast rank/select queries, or query the +// cardinality of the whole bitmap... very fast, +// without latency. +// +// However, imagine that you are aggregating 100 +// bitmaps together. So you OR the first two, then OR +// that with the third one and so forth. Clearly, +// intermediate bitmaps don't need to be as +// compressed as possible, right? They can be +// in a "dirty state". You only need the end +// result to be in a nice state... which you +// can achieve by calling repairAfterLazy at the end. +// +// The Java/C code does something special for +// the in-place lazy OR runs. The idea is that +// instead of taking two run containers and +// generating a new one, we actually try to +// do the computation in-place through a +// technique invented by @gssiyankai (pinging him!). +// What you do is you check whether the host +// run container has lots of extra capacity. +// If it does, you move its data at the end of +// the backing array, and then you write +// the answer at the beginning. What this +// trick does is minimize memory allocations. +// +func (rc *runContainer16) lazyIOR(a container) container { + // not lazy at the moment + // TODO: make it lazy + return rc.ior(a) + + /* + switch c := a.(type) { + case *arrayContainer: + return rc.lazyIorArray(c) + case *bitmapContainer: + return rc.lazyIorBitmap(c) + case *runContainer16: + return rc.lazyIorRun16(c) + } + panic("unsupported container type") + */ +} + +// lazyOR is described above in lazyIOR. +func (rc *runContainer16) lazyOR(a container) container { + + // not lazy at the moment + // TODO: make it lazy + return rc.or(a) + + /* + switch c := a.(type) { + case *arrayContainer: + return rc.lazyOrArray(c) + case *bitmapContainer: + return rc.lazyOrBitmap(c) + case *runContainer16: + return rc.lazyOrRunContainer16(c) + } + panic("unsupported container type") + */ +} + +func (rc *runContainer16) intersects(a container) bool { + // TODO: optimize by doing inplace/less allocation, possibly? + isect := rc.and(a) + return isect.getCardinality() > 0 +} + +func (rc *runContainer16) xor(a container) container { + switch c := a.(type) { + case *arrayContainer: + return rc.xorArray(c) + case *bitmapContainer: + return rc.xorBitmap(c) + case *runContainer16: + return rc.xorRunContainer16(c) + } + panic("unsupported container type") +} + +func (rc *runContainer16) iandNot(a container) container { + switch c := a.(type) { + case *arrayContainer: + return rc.iandNotArray(c) + case *bitmapContainer: + return rc.iandNotBitmap(c) + case *runContainer16: + return rc.iandNotRunContainer16(c) + } + panic("unsupported container type") +} + +// flip the values in the range [firstOfRange,endx) +func (rc *runContainer16) inot(firstOfRange, endx int) container { + if firstOfRange >= endx { + panic(fmt.Sprintf("invalid %v = endx >= firstOfRange = %v", endx, firstOfRange)) + } + // TODO: minimize copies, do it all inplace; not() makes a copy. + rc = rc.Not(firstOfRange, endx) + return rc +} + +func (rc *runContainer16) getCardinality() int { + return int(rc.cardinality()) +} + +func (rc *runContainer16) rank(x uint16) int { + n := int64(len(rc.iv)) + xx := int64(x) + w, already, _ := rc.search(xx, nil) + if w < 0 { + return 0 + } + if !already && w == n-1 { + return rc.getCardinality() + } + var rnk int64 + if !already { + for i := int64(0); i <= w; i++ { + rnk += rc.iv[i].runlen() + } + return int(rnk) + } + for i := int64(0); i < w; i++ { + rnk += rc.iv[i].runlen() + } + rnk += int64(x-rc.iv[w].start) + 1 + return int(rnk) +} + +func (rc *runContainer16) selectInt(x uint16) int { + return rc.selectInt16(x) +} + +func (rc *runContainer16) andNotRunContainer16(b *runContainer16) container { + return rc.AndNotRunContainer16(b) +} + +func (rc *runContainer16) andNotArray(ac *arrayContainer) container { + rcb := rc.toBitmapContainer() + acb := ac.toBitmapContainer() + return rcb.andNotBitmap(acb) +} + +func (rc *runContainer16) andNotBitmap(bc *bitmapContainer) container { + rcb := rc.toBitmapContainer() + return rcb.andNotBitmap(bc) +} + +func (rc *runContainer16) toBitmapContainer() *bitmapContainer { + p("run16 toBitmap starting; rc has %v ranges", len(rc.iv)) + bc := newBitmapContainer() + for i := range rc.iv { + bc.iaddRange(int(rc.iv[i].start), int(rc.iv[i].last)+1) + } + bc.computeCardinality() + return bc +} + +func (rc *runContainer16) iandNotRunContainer16(x2 *runContainer16) container { + rcb := rc.toBitmapContainer() + x2b := x2.toBitmapContainer() + rcb.iandNotBitmapSurely(x2b) + // TODO: check size and optimize the return value + // TODO: is inplace modification really required? If not, elide the copy. + rc2 := newRunContainer16FromBitmapContainer(rcb) + *rc = *rc2 + return rc +} + +func (rc *runContainer16) iandNotArray(ac *arrayContainer) container { + rcb := rc.toBitmapContainer() + acb := ac.toBitmapContainer() + rcb.iandNotBitmapSurely(acb) + // TODO: check size and optimize the return value + // TODO: is inplace modification really required? If not, elide the copy. + rc2 := newRunContainer16FromBitmapContainer(rcb) + *rc = *rc2 + return rc +} + +func (rc *runContainer16) iandNotBitmap(bc *bitmapContainer) container { + rcb := rc.toBitmapContainer() + rcb.iandNotBitmapSurely(bc) + // TODO: check size and optimize the return value + // TODO: is inplace modification really required? If not, elide the copy. + rc2 := newRunContainer16FromBitmapContainer(rcb) + *rc = *rc2 + return rc +} + +func (rc *runContainer16) xorRunContainer16(x2 *runContainer16) container { + rcb := rc.toBitmapContainer() + x2b := x2.toBitmapContainer() + return rcb.xorBitmap(x2b) +} + +func (rc *runContainer16) xorArray(ac *arrayContainer) container { + rcb := rc.toBitmapContainer() + acb := ac.toBitmapContainer() + return rcb.xorBitmap(acb) +} + +func (rc *runContainer16) xorBitmap(bc *bitmapContainer) container { + rcb := rc.toBitmapContainer() + return rcb.xorBitmap(bc) +} + +// convert to bitmap or array *if needed* +func (rc *runContainer16) toEfficientContainer() container { + + // runContainer16SerializedSizeInBytes(numRuns) + sizeAsRunContainer := rc.getSizeInBytes() + sizeAsBitmapContainer := bitmapContainerSizeInBytes() + card := int(rc.cardinality()) + sizeAsArrayContainer := arrayContainerSizeInBytes(card) + if sizeAsRunContainer <= min(sizeAsBitmapContainer, sizeAsArrayContainer) { + return rc + } + if card <= arrayDefaultMaxSize { + return rc.toArrayContainer() + } + bc := newBitmapContainerFromRun(rc) + return bc +} + +func (rc *runContainer16) toArrayContainer() *arrayContainer { + ac := newArrayContainer() + for i := range rc.iv { + ac.iaddRange(int(rc.iv[i].start), int(rc.iv[i].last)+1) + } + return ac +} + +func newRunContainer16FromContainer(c container) *runContainer16 { + + switch x := c.(type) { + case *runContainer16: + return x.Clone() + case *arrayContainer: + return newRunContainer16FromArray(x) + case *bitmapContainer: + return newRunContainer16FromBitmapContainer(x) + } + panic("unsupported container type") +} diff --git a/vendor/github.com/RoaringBitmap/roaring/rlei_test.go b/vendor/github.com/RoaringBitmap/roaring/rlei_test.go new file mode 100644 index 0000000..80b72d5 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/rlei_test.go @@ -0,0 +1,1794 @@ +package roaring + +import ( + "fmt" + "math/rand" + "sort" + "strings" + "testing" + + . "github.com/smartystreets/goconvey/convey" +) + +// showHash utility really only used in testing +func showHash(name string, h map[int]bool) { + hv := []int{} + for k := range h { + hv = append(hv, k) + } + sort.Sort(sort.IntSlice(hv)) + stringH := "" + for i := range hv { + stringH += fmt.Sprintf("%v, ", hv[i]) + } + + fmt.Printf("%s is (len %v): %s", name, len(h), stringH) +} + +func TestRle16RandomIntersectAgainstOtherContainers010(t *testing.T) { + + Convey("runContainer16 `and` operation against other container types should correctly do the intersection", t, func() { + seed := int64(42) + p("seed is %v", seed) + rand.Seed(seed) + + trials := []trial{ + {n: 100, percentFill: .95, ntrial: 1}, + } + + tester := func(tr trial) { + for j := 0; j < tr.ntrial; j++ { + p("TestRleRandomAndAgainstOtherContainers on check# j=%v", j) + ma := make(map[int]bool) + mb := make(map[int]bool) + + n := tr.n + a := []uint16{} + b := []uint16{} + + draw := int(float64(n) * tr.percentFill) + for i := 0; i < draw; i++ { + r0 := rand.Intn(n) + a = append(a, uint16(r0)) + ma[r0] = true + + r1 := rand.Intn(n) + b = append(b, uint16(r1)) + mb[r1] = true + } + + //showArray16(a, "a") + //showArray16(b, "b") + + // hash version of intersect: + hashi := make(map[int]bool) + for k := range ma { + if mb[k] { + hashi[k] = true + } + } + + // RunContainer's Intersect + rc := newRunContainer16FromVals(false, a...) + + p("rc from a is %v", rc) + + // vs bitmapContainer + bc := newBitmapContainer() + for _, bv := range b { + bc.iadd(bv) + } + + // vs arrayContainer + ac := newArrayContainer() + for _, bv := range b { + ac.iadd(bv) + } + + // vs runContainer + rcb := newRunContainer16FromVals(false, b...) + + rcVsBcIsect := rc.and(bc) + rcVsAcIsect := rc.and(ac) + rcVsRcbIsect := rc.and(rcb) + + p("rcVsBcIsect is %v", rcVsBcIsect) + p("rcVsAcIsect is %v", rcVsAcIsect) + p("rcVsRcbIsect is %v", rcVsRcbIsect) + + //showHash("hashi", hashi) + + for k := range hashi { + p("hashi has %v, checking in rcVsBcIsect", k) + So(rcVsBcIsect.contains(uint16(k)), ShouldBeTrue) + + p("hashi has %v, checking in rcVsAcIsect", k) + So(rcVsAcIsect.contains(uint16(k)), ShouldBeTrue) + + p("hashi has %v, checking in rcVsRcbIsect", k) + So(rcVsRcbIsect.contains(uint16(k)), ShouldBeTrue) + } + + p("checking for cardinality agreement: rcVsBcIsect is %v, len(hashi) is %v", rcVsBcIsect.getCardinality(), len(hashi)) + p("checking for cardinality agreement: rcVsAcIsect is %v, len(hashi) is %v", rcVsAcIsect.getCardinality(), len(hashi)) + p("checking for cardinality agreement: rcVsRcbIsect is %v, len(hashi) is %v", rcVsRcbIsect.getCardinality(), len(hashi)) + So(rcVsBcIsect.getCardinality(), ShouldEqual, len(hashi)) + So(rcVsAcIsect.getCardinality(), ShouldEqual, len(hashi)) + So(rcVsRcbIsect.getCardinality(), ShouldEqual, len(hashi)) + } + p("done with randomized and() vs bitmapContainer and arrayContainer checks for trial %#v", tr) + } + + for i := range trials { + tester(trials[i]) + } + + }) +} + +func TestRle16RandomUnionAgainstOtherContainers011(t *testing.T) { + + Convey("runContainer16 `or` operation against other container types should correctly do the intersection", t, func() { + seed := int64(42) + p("seed is %v", seed) + rand.Seed(seed) + + trials := []trial{ + {n: 100, percentFill: .95, ntrial: 1}, + /* trial{n: 100, percentFill: .01, ntrial: 10}, + trial{n: 100, percentFill: .99, ntrial: 10}, + trial{n: 100, percentFill: .50, ntrial: 10}, + trial{n: 10, percentFill: 1.0, ntrial: 10}, + */ + } + + tester := func(tr trial) { + for j := 0; j < tr.ntrial; j++ { + p("TestRleRandomAndAgainstOtherContainers on check# j=%v", j) + ma := make(map[int]bool) + mb := make(map[int]bool) + + n := tr.n + a := []uint16{} + b := []uint16{} + + draw := int(float64(n) * tr.percentFill) + for i := 0; i < draw; i++ { + r0 := rand.Intn(n) + a = append(a, uint16(r0)) + ma[r0] = true + + r1 := rand.Intn(n) + b = append(b, uint16(r1)) + mb[r1] = true + } + + //showArray16(a, "a") + //showArray16(b, "b") + + // hash version of union + hashi := make(map[int]bool) + for k := range ma { + hashi[k] = true + } + for k := range mb { + hashi[k] = true + } + + // RunContainer's 'or' + rc := newRunContainer16FromVals(false, a...) + + p("rc from a is %v", rc) + + // vs bitmapContainer + bc := newBitmapContainer() + for _, bv := range b { + bc.iadd(bv) + } + + // vs arrayContainer + ac := newArrayContainer() + for _, bv := range b { + ac.iadd(bv) + } + + // vs runContainer + rcb := newRunContainer16FromVals(false, b...) + + rcVsBcUnion := rc.or(bc) + rcVsAcUnion := rc.or(ac) + rcVsRcbUnion := rc.or(rcb) + + p("rcVsBcUnion is %v", rcVsBcUnion) + p("rcVsAcUnion is %v", rcVsAcUnion) + p("rcVsRcbUnion is %v", rcVsRcbUnion) + + //showHash("hashi", hashi) + + for k := range hashi { + p("hashi has %v, checking in rcVsBcUnion", k) + So(rcVsBcUnion.contains(uint16(k)), ShouldBeTrue) + + p("hashi has %v, checking in rcVsAcUnion", k) + So(rcVsAcUnion.contains(uint16(k)), ShouldBeTrue) + + p("hashi has %v, checking in rcVsRcbUnion", k) + So(rcVsRcbUnion.contains(uint16(k)), ShouldBeTrue) + } + + p("checking for cardinality agreement: rcVsBcUnion is %v, len(hashi) is %v", rcVsBcUnion.getCardinality(), len(hashi)) + p("checking for cardinality agreement: rcVsAcUnion is %v, len(hashi) is %v", rcVsAcUnion.getCardinality(), len(hashi)) + p("checking for cardinality agreement: rcVsRcbUnion is %v, len(hashi) is %v", rcVsRcbUnion.getCardinality(), len(hashi)) + So(rcVsBcUnion.getCardinality(), ShouldEqual, len(hashi)) + So(rcVsAcUnion.getCardinality(), ShouldEqual, len(hashi)) + So(rcVsRcbUnion.getCardinality(), ShouldEqual, len(hashi)) + } + p("done with randomized or() vs bitmapContainer and arrayContainer checks for trial %#v", tr) + } + + for i := range trials { + tester(trials[i]) + } + + }) +} + +func TestRle16RandomInplaceUnionAgainstOtherContainers012(t *testing.T) { + + Convey("runContainer16 `ior` inplace union operation against other container types should correctly do the intersection", t, func() { + seed := int64(42) + p("seed is %v", seed) + rand.Seed(seed) + + trials := []trial{ + {n: 10, percentFill: .95, ntrial: 1}, + } + + tester := func(tr trial) { + for j := 0; j < tr.ntrial; j++ { + p("TestRleRandomInplaceUnionAgainstOtherContainers on check# j=%v", j) + ma := make(map[int]bool) + mb := make(map[int]bool) + + n := tr.n + a := []uint16{} + b := []uint16{} + + draw := int(float64(n) * tr.percentFill) + for i := 0; i < draw; i++ { + r0 := rand.Intn(n) + a = append(a, uint16(r0)) + ma[r0] = true + + r1 := rand.Intn(n) + b = append(b, uint16(r1)) + mb[r1] = true + } + + //showArray16(a, "a") + //showArray16(b, "b") + + // hash version of union + hashi := make(map[int]bool) + for k := range ma { + hashi[k] = true + } + for k := range mb { + hashi[k] = true + } + + // RunContainer's 'or' + rc := newRunContainer16FromVals(false, a...) + + p("rc from a is %v", rc) + + rcVsBcUnion := rc.Clone() + rcVsAcUnion := rc.Clone() + rcVsRcbUnion := rc.Clone() + + // vs bitmapContainer + bc := newBitmapContainer() + for _, bv := range b { + bc.iadd(bv) + } + + // vs arrayContainer + ac := newArrayContainer() + for _, bv := range b { + ac.iadd(bv) + } + + // vs runContainer + rcb := newRunContainer16FromVals(false, b...) + + rcVsBcUnion.ior(bc) + rcVsAcUnion.ior(ac) + rcVsRcbUnion.ior(rcb) + + p("rcVsBcUnion is %v", rcVsBcUnion) + p("rcVsAcUnion is %v", rcVsAcUnion) + p("rcVsRcbUnion is %v", rcVsRcbUnion) + + //showHash("hashi", hashi) + + for k := range hashi { + p("hashi has %v, checking in rcVsBcUnion", k) + So(rcVsBcUnion.contains(uint16(k)), ShouldBeTrue) + + p("hashi has %v, checking in rcVsAcUnion", k) + So(rcVsAcUnion.contains(uint16(k)), ShouldBeTrue) + + p("hashi has %v, checking in rcVsRcbUnion", k) + So(rcVsRcbUnion.contains(uint16(k)), ShouldBeTrue) + } + + p("checking for cardinality agreement: rcVsBcUnion is %v, len(hashi) is %v", rcVsBcUnion.getCardinality(), len(hashi)) + p("checking for cardinality agreement: rcVsAcUnion is %v, len(hashi) is %v", rcVsAcUnion.getCardinality(), len(hashi)) + p("checking for cardinality agreement: rcVsRcbUnion is %v, len(hashi) is %v", rcVsRcbUnion.getCardinality(), len(hashi)) + So(rcVsBcUnion.getCardinality(), ShouldEqual, len(hashi)) + So(rcVsAcUnion.getCardinality(), ShouldEqual, len(hashi)) + So(rcVsRcbUnion.getCardinality(), ShouldEqual, len(hashi)) + } + p("done with randomized or() vs bitmapContainer and arrayContainer checks for trial %#v", tr) + } + + for i := range trials { + tester(trials[i]) + } + + }) +} + +func TestRle16RandomInplaceIntersectAgainstOtherContainers014(t *testing.T) { + + Convey("runContainer16 `iand` inplace-and operation against other container types should correctly do the intersection", t, func() { + seed := int64(42) + p("seed is %v", seed) + rand.Seed(seed) + + trials := []trial{ + {n: 100, percentFill: .95, ntrial: 1}, + } + + tester := func(tr trial) { + for j := 0; j < tr.ntrial; j++ { + p("TestRleRandomAndAgainstOtherContainers on check# j=%v", j) + ma := make(map[int]bool) + mb := make(map[int]bool) + + n := tr.n + a := []uint16{} + b := []uint16{} + + draw := int(float64(n) * tr.percentFill) + for i := 0; i < draw; i++ { + r0 := rand.Intn(n) + a = append(a, uint16(r0)) + ma[r0] = true + + r1 := rand.Intn(n) + b = append(b, uint16(r1)) + mb[r1] = true + } + + //showArray16(a, "a") + //showArray16(b, "b") + + // hash version of intersect: + hashi := make(map[int]bool) + for k := range ma { + if mb[k] { + hashi[k] = true + } + } + + // RunContainer's Intersect + rc := newRunContainer16FromVals(false, a...) + + p("rc from a is %v", rc) + + // vs bitmapContainer + bc := newBitmapContainer() + for _, bv := range b { + bc.iadd(bv) + } + + // vs arrayContainer + ac := newArrayContainer() + for _, bv := range b { + ac.iadd(bv) + } + + // vs runContainer + rcb := newRunContainer16FromVals(false, b...) + + rcVsBcIsect := rc.Clone() + rcVsAcIsect := rc.Clone() + rcVsRcbIsect := rc.Clone() + + rcVsBcIsect.iand(bc) + rcVsAcIsect.iand(ac) + rcVsRcbIsect.iand(rcb) + + p("rcVsBcIsect is %v", rcVsBcIsect) + p("rcVsAcIsect is %v", rcVsAcIsect) + p("rcVsRcbIsect is %v", rcVsRcbIsect) + + //showHash("hashi", hashi) + + for k := range hashi { + p("hashi has %v, checking in rcVsBcIsect", k) + So(rcVsBcIsect.contains(uint16(k)), ShouldBeTrue) + + p("hashi has %v, checking in rcVsAcIsect", k) + So(rcVsAcIsect.contains(uint16(k)), ShouldBeTrue) + + p("hashi has %v, checking in rcVsRcbIsect", k) + So(rcVsRcbIsect.contains(uint16(k)), ShouldBeTrue) + } + + p("checking for cardinality agreement: rcVsBcIsect is %v, len(hashi) is %v", rcVsBcIsect.getCardinality(), len(hashi)) + p("checking for cardinality agreement: rcVsAcIsect is %v, len(hashi) is %v", rcVsAcIsect.getCardinality(), len(hashi)) + p("checking for cardinality agreement: rcVsRcbIsect is %v, len(hashi) is %v", rcVsRcbIsect.getCardinality(), len(hashi)) + So(rcVsBcIsect.getCardinality(), ShouldEqual, len(hashi)) + So(rcVsAcIsect.getCardinality(), ShouldEqual, len(hashi)) + So(rcVsRcbIsect.getCardinality(), ShouldEqual, len(hashi)) + } + p("done with randomized and() vs bitmapContainer and arrayContainer checks for trial %#v", tr) + } + + for i := range trials { + tester(trials[i]) + } + + }) +} + +func TestRle16RemoveApi015(t *testing.T) { + + Convey("runContainer16 `remove` (a minus b) should work", t, func() { + seed := int64(42) + p("seed is %v", seed) + rand.Seed(seed) + + trials := []trial{ + {n: 100, percentFill: .95, ntrial: 1}, + } + + tester := func(tr trial) { + for j := 0; j < tr.ntrial; j++ { + p("TestRle16RemoveApi015 on check# j=%v", j) + ma := make(map[int]bool) + mb := make(map[int]bool) + + n := tr.n + a := []uint16{} + b := []uint16{} + + draw := int(float64(n) * tr.percentFill) + for i := 0; i < draw; i++ { + r0 := rand.Intn(n) + a = append(a, uint16(r0)) + ma[r0] = true + + r1 := rand.Intn(n) + b = append(b, uint16(r1)) + mb[r1] = true + } + + //showArray16(a, "a") + //showArray16(b, "b") + + // hash version of remove: + hashrm := make(map[int]bool) + for k := range ma { + hashrm[k] = true + } + for k := range mb { + delete(hashrm, k) + } + + // RunContainer's remove + rc := newRunContainer16FromVals(false, a...) + + p("rc from a, pre-remove, is %v", rc) + + for k := range mb { + rc.iremove(uint16(k)) + } + + p("rc from a, post-iremove, is %v", rc) + + //showHash("correct answer is hashrm", hashrm) + + for k := range hashrm { + p("hashrm has %v, checking in rc", k) + So(rc.contains(uint16(k)), ShouldBeTrue) + } + + p("checking for cardinality agreement: rc is %v, len(hashrm) is %v", rc.getCardinality(), len(hashrm)) + So(rc.getCardinality(), ShouldEqual, len(hashrm)) + } + p("done with randomized remove() checks for trial %#v", tr) + } + + for i := range trials { + tester(trials[i]) + } + + }) +} + +func showArray16(a []uint16, name string) { + sort.Sort(uint16Slice(a)) + stringA := "" + for i := range a { + stringA += fmt.Sprintf("%v, ", a[i]) + } + p("%s is '%v'", name, stringA) +} + +func TestRle16RandomAndNot016(t *testing.T) { + + Convey("runContainer16 `andNot` operation against other container types should correctly do the and-not operation", t, func() { + seed := int64(42) + p("seed is %v", seed) + rand.Seed(seed) + + trials := []trial{ + {n: 1000, percentFill: .95, ntrial: 2}, + } + + tester := func(tr trial) { + for j := 0; j < tr.ntrial; j++ { + p("TestRle16RandomAndNot16 on check# j=%v", j) + ma := make(map[int]bool) + mb := make(map[int]bool) + + n := tr.n + a := []uint16{} + b := []uint16{} + + draw := int(float64(n) * tr.percentFill) + for i := 0; i < draw; i++ { + r0 := rand.Intn(n) + a = append(a, uint16(r0)) + ma[r0] = true + + r1 := rand.Intn(n) + b = append(b, uint16(r1)) + mb[r1] = true + } + + //showArray16(a, "a") + //showArray16(b, "b") + + // hash version of and-not + hashi := make(map[int]bool) + for k := range ma { + hashi[k] = true + } + for k := range mb { + delete(hashi, k) + } + + // RunContainer's and-not + rc := newRunContainer16FromVals(false, a...) + + p("rc from a is %v", rc) + + // vs bitmapContainer + bc := newBitmapContainer() + for _, bv := range b { + bc.iadd(bv) + } + + // vs arrayContainer + ac := newArrayContainer() + for _, bv := range b { + ac.iadd(bv) + } + + // vs runContainer + rcb := newRunContainer16FromVals(false, b...) + + rcVsBcAndnot := rc.andNot(bc) + rcVsAcAndnot := rc.andNot(ac) + rcVsRcbAndnot := rc.andNot(rcb) + + p("rcVsBcAndnot is %v", rcVsBcAndnot) + p("rcVsAcAndnot is %v", rcVsAcAndnot) + p("rcVsRcbAndnot is %v", rcVsRcbAndnot) + + //showHash("hashi", hashi) + + for k := range hashi { + p("hashi has %v, checking in rcVsBcAndnot", k) + So(rcVsBcAndnot.contains(uint16(k)), ShouldBeTrue) + + p("hashi has %v, checking in rcVsAcAndnot", k) + So(rcVsAcAndnot.contains(uint16(k)), ShouldBeTrue) + + p("hashi has %v, checking in rcVsRcbAndnot", k) + So(rcVsRcbAndnot.contains(uint16(k)), ShouldBeTrue) + } + + p("checking for cardinality agreement: rcVsBcAndnot is %v, len(hashi) is %v", rcVsBcAndnot.getCardinality(), len(hashi)) + p("checking for cardinality agreement: rcVsAcAndnot is %v, len(hashi) is %v", rcVsAcAndnot.getCardinality(), len(hashi)) + p("checking for cardinality agreement: rcVsRcbAndnot is %v, len(hashi) is %v", rcVsRcbAndnot.getCardinality(), len(hashi)) + So(rcVsBcAndnot.getCardinality(), ShouldEqual, len(hashi)) + So(rcVsAcAndnot.getCardinality(), ShouldEqual, len(hashi)) + So(rcVsRcbAndnot.getCardinality(), ShouldEqual, len(hashi)) + } + p("done with randomized andNot() vs bitmapContainer and arrayContainer checks for trial %#v", tr) + } + + for i := range trials { + tester(trials[i]) + } + + }) +} + +func TestRle16RandomInplaceAndNot017(t *testing.T) { + + Convey("runContainer16 `iandNot` operation against other container types should correctly do the inplace-and-not operation", t, func() { + seed := int64(42) + p("seed is %v", seed) + rand.Seed(seed) + + trials := []trial{ + {n: 1000, percentFill: .95, ntrial: 2}, + } + + tester := func(tr trial) { + for j := 0; j < tr.ntrial; j++ { + p("TestRle16RandomAndNot16 on check# j=%v", j) + ma := make(map[int]bool) + mb := make(map[int]bool) + + n := tr.n + a := []uint16{} + b := []uint16{} + + draw := int(float64(n) * tr.percentFill) + for i := 0; i < draw; i++ { + r0 := rand.Intn(n) + a = append(a, uint16(r0)) + ma[r0] = true + + r1 := rand.Intn(n) + b = append(b, uint16(r1)) + mb[r1] = true + } + + //showArray16(a, "a") + //showArray16(b, "b") + + // hash version of and-not + hashi := make(map[int]bool) + for k := range ma { + hashi[k] = true + } + for k := range mb { + delete(hashi, k) + } + + // RunContainer's and-not + rc := newRunContainer16FromVals(false, a...) + + p("rc from a is %v", rc) + + // vs bitmapContainer + bc := newBitmapContainer() + for _, bv := range b { + bc.iadd(bv) + } + + // vs arrayContainer + ac := newArrayContainer() + for _, bv := range b { + ac.iadd(bv) + } + + // vs runContainer + rcb := newRunContainer16FromVals(false, b...) + + rcVsBcIandnot := rc.Clone() + rcVsAcIandnot := rc.Clone() + rcVsRcbIandnot := rc.Clone() + + rcVsBcIandnot.iandNot(bc) + rcVsAcIandnot.iandNot(ac) + rcVsRcbIandnot.iandNot(rcb) + + p("rcVsBcIandnot is %v", rcVsBcIandnot) + p("rcVsAcIandnot is %v", rcVsAcIandnot) + p("rcVsRcbIandnot is %v", rcVsRcbIandnot) + + //showHash("hashi", hashi) + + for k := range hashi { + p("hashi has %v, checking in rcVsBcIandnot", k) + So(rcVsBcIandnot.contains(uint16(k)), ShouldBeTrue) + + p("hashi has %v, checking in rcVsAcIandnot", k) + So(rcVsAcIandnot.contains(uint16(k)), ShouldBeTrue) + + p("hashi has %v, checking in rcVsRcbIandnot", k) + So(rcVsRcbIandnot.contains(uint16(k)), ShouldBeTrue) + } + + p("checking for cardinality agreement: rcVsBcIandnot is %v, len(hashi) is %v", rcVsBcIandnot.getCardinality(), len(hashi)) + p("checking for cardinality agreement: rcVsAcIandnot is %v, len(hashi) is %v", rcVsAcIandnot.getCardinality(), len(hashi)) + p("checking for cardinality agreement: rcVsRcbIandnot is %v, len(hashi) is %v", rcVsRcbIandnot.getCardinality(), len(hashi)) + So(rcVsBcIandnot.getCardinality(), ShouldEqual, len(hashi)) + So(rcVsAcIandnot.getCardinality(), ShouldEqual, len(hashi)) + So(rcVsRcbIandnot.getCardinality(), ShouldEqual, len(hashi)) + } + p("done with randomized andNot() vs bitmapContainer and arrayContainer checks for trial %#v", tr) + } + + for i := range trials { + tester(trials[i]) + } + + }) +} + +func TestRle16InversionOfIntervals018(t *testing.T) { + + Convey("runContainer `invert` operation should do a NOT on the set of intervals, in-place", t, func() { + seed := int64(42) + p("seed is %v", seed) + rand.Seed(seed) + + trials := []trial{ + {n: 1000, percentFill: .90, ntrial: 1}, + } + + tester := func(tr trial) { + for j := 0; j < tr.ntrial; j++ { + p("TestRle16InversinoOfIntervals018 on check# j=%v", j) + ma := make(map[int]bool) + hashNotA := make(map[int]bool) + + n := tr.n + a := []uint16{} + + // hashNotA will be NOT ma + //for i := 0; i < n; i++ { + for i := 0; i < MaxUint16+1; i++ { + hashNotA[i] = true + } + + draw := int(float64(n) * tr.percentFill) + for i := 0; i < draw; i++ { + r0 := rand.Intn(n) + a = append(a, uint16(r0)) + ma[r0] = true + delete(hashNotA, r0) + } + + //showArray16(a, "a") + // too big to print: showHash("hashNotA is not a:", hashNotA) + + // RunContainer's invert + rc := newRunContainer16FromVals(false, a...) + + p("rc from a is %v", rc) + p("rc.cardinality = %v", rc.cardinality()) + inv := rc.invert() + + p("inv of a (card=%v) is %v", inv.cardinality(), inv) + + So(inv.cardinality(), ShouldEqual, 1+MaxUint16-rc.cardinality()) + + for k := 0; k < n; k++ { + if hashNotA[k] { + So(inv.contains(uint16(k)), ShouldBeTrue) + } + } + + // skip for now, too big to do 2^16-1 + p("checking for cardinality agreement: inv is %v, len(hashNotA) is %v", inv.getCardinality(), len(hashNotA)) + So(inv.getCardinality(), ShouldEqual, len(hashNotA)) + } + p("done with randomized invert() check for trial %#v", tr) + } + + for i := range trials { + tester(trials[i]) + } + + }) +} + +func TestRle16SubtractionOfIntervals019(t *testing.T) { + + Convey("runContainer `subtract` operation removes an interval in-place", t, func() { + // basics + + i22 := interval16{start: 2, last: 2} + left, _ := i22.subtractInterval(i22) + So(len(left), ShouldResemble, 0) + + v := interval16{start: 1, last: 6} + left, _ = v.subtractInterval(interval16{start: 3, last: 4}) + So(len(left), ShouldResemble, 2) + So(left[0].start, ShouldEqual, 1) + So(left[0].last, ShouldEqual, 2) + So(left[1].start, ShouldEqual, 5) + So(left[1].last, ShouldEqual, 6) + + v = interval16{start: 1, last: 6} + left, _ = v.subtractInterval(interval16{start: 4, last: 10}) + So(len(left), ShouldResemble, 1) + So(left[0].start, ShouldEqual, 1) + So(left[0].last, ShouldEqual, 3) + + v = interval16{start: 5, last: 10} + left, _ = v.subtractInterval(interval16{start: 0, last: 7}) + So(len(left), ShouldResemble, 1) + So(left[0].start, ShouldEqual, 8) + So(left[0].last, ShouldEqual, 10) + + seed := int64(42) + p("seed is %v", seed) + rand.Seed(seed) + + trials := []trial{ + {n: 1000, percentFill: .90, ntrial: 1}, + } + + tester := func(tr trial) { + for j := 0; j < tr.ntrial; j++ { + p("TestRle16SubtractionOfIntervals019 on check# j=%v", j) + ma := make(map[int]bool) + mb := make(map[int]bool) + + n := tr.n + a := []uint16{} + b := []uint16{} + + // hashAminusB will be ma - mb + hashAminusB := make(map[int]bool) + + draw := int(float64(n) * tr.percentFill) + for i := 0; i < draw; i++ { + r0 := rand.Intn(n) + a = append(a, uint16(r0)) + ma[r0] = true + hashAminusB[r0] = true + + r1 := rand.Intn(n) + b = append(b, uint16(r1)) + mb[r1] = true + } + + for k := range mb { + delete(hashAminusB, k) + } + + //showHash("hash a is:", ma) + //showHash("hash b is:", mb) + //showHash("hashAminusB is:", hashAminusB) + + // RunContainer's subtract A - B + rc := newRunContainer16FromVals(false, a...) + rcb := newRunContainer16FromVals(false, b...) + + abkup := rc.Clone() + + p("rc from a is %v", rc) + p("rc.cardinality = %v", rc.cardinality()) + p("rcb from b is %v", rcb) + p("rcb.cardinality = %v", rcb.cardinality()) + it := rcb.newRunIterator16() + for it.hasNext() { + nx := it.next() + rc.isubtract(interval16{start: nx, last: nx}) + } + + // also check full interval subtraction + for _, p := range rcb.iv { + abkup.isubtract(p) + } + + p("rc = a - b; has (card=%v), is %v", rc.cardinality(), rc) + p("abkup = a - b; has (card=%v), is %v", abkup.cardinality(), abkup) + + for k := range hashAminusB { + p("hashAminusB has element %v, checking rc and abkup (which are/should be: A - B)", k) + So(rc.contains(uint16(k)), ShouldBeTrue) + So(abkup.contains(uint16(k)), ShouldBeTrue) + } + p("checking for cardinality agreement: sub is %v, len(hashAminusB) is %v", rc.getCardinality(), len(hashAminusB)) + So(rc.getCardinality(), ShouldEqual, len(hashAminusB)) + p("checking for cardinality agreement: sub is %v, len(hashAminusB) is %v", abkup.getCardinality(), len(hashAminusB)) + So(abkup.getCardinality(), ShouldEqual, len(hashAminusB)) + + } + p("done with randomized subtract() check for trial %#v", tr) + } + + for i := range trials { + tester(trials[i]) + } + + }) +} + +func TestRle16Rank020(t *testing.T) { + v := container(newRunContainer16()) + v = v.iaddReturnMinimized(10) + v = v.iaddReturnMinimized(100) + v = v.iaddReturnMinimized(1000) + if v.getCardinality() != 3 { + t.Errorf("Bogus cardinality.") + } + for i := 0; i <= arrayDefaultMaxSize; i++ { + thisrank := v.rank(uint16(i)) + if i < 10 { + if thisrank != 0 { + t.Errorf("At %d should be zero but is %d ", i, thisrank) + } + } else if i < 100 { + if thisrank != 1 { + t.Errorf("At %d should be zero but is %d ", i, thisrank) + } + } else if i < 1000 { + if thisrank != 2 { + t.Errorf("At %d should be zero but is %d ", i, thisrank) + } + } else { + if thisrank != 3 { + t.Errorf("At %d should be zero but is %d ", i, thisrank) + } + } + } +} + +func TestRle16NotAlsoKnownAsFlipRange021(t *testing.T) { + + Convey("runContainer `Not` operation should flip the bits of a range on the new returned container", t, func() { + seed := int64(42) + p("seed is %v", seed) + rand.Seed(seed) + + trials := []trial{ + {n: 100, percentFill: .8, ntrial: 2}, + /* trial{n: 10, percentFill: .01, ntrial: 10}, + trial{n: 10, percentFill: .50, ntrial: 10}, + trial{n: 1000, percentFill: .50, ntrial: 10}, + trial{n: 1000, percentFill: .99, ntrial: 10}, + */ + } + + tester := func(tr trial) { + for j := 0; j < tr.ntrial; j++ { + p("TestRle16NotAlsoKnownAsFlipRange021 on check# j=%v", j) + + // what is the interval we are going to flip? + + ma := make(map[int]bool) + flipped := make(map[int]bool) + + n := tr.n + a := []uint16{} + + draw := int(float64(n) * tr.percentFill) + p("draw is %v", draw) + for i := 0; i < draw; i++ { + r0 := rand.Intn(n) + a = append(a, uint16(r0)) + ma[r0] = true + flipped[r0] = true + p("draw r0=%v is being added to a and ma", r0) + } + + // pick an interval to flip + begin := rand.Intn(n) + last := rand.Intn(n) + if last < begin { + begin, last = last, begin + } + p("our interval to flip is [%v, %v]", begin, last) + + // do the flip on the hash `flipped` + for i := begin; i <= last; i++ { + if flipped[i] { + delete(flipped, i) + } else { + flipped[i] = true + } + } + + //showArray16(a, "a") + // can be too big to print: + //showHash("hash (correct) version of flipped is:", flipped) + + // RunContainer's Not + rc := newRunContainer16FromVals(false, a...) + flp := rc.Not(begin, last+1) + So(flp.cardinality(), ShouldEqual, len(flipped)) + + for k := 0; k < n; k++ { + if flipped[k] { + So(flp.contains(uint16(k)), ShouldBeTrue) + } else { + So(flp.contains(uint16(k)), ShouldBeFalse) + } + } + + So(flp.getCardinality(), ShouldEqual, len(flipped)) + } + } + + for i := range trials { + tester(trials[i]) + } + + }) +} + +func TestRleEquals022(t *testing.T) { + + Convey("runContainer `equals` should accurately compare contents against other container types", t, func() { + seed := int64(42) + p("seed is %v", seed) + rand.Seed(seed) + + trials := []trial{ + {n: 100, percentFill: .2, ntrial: 10}, + /* + trial{n: 10, percentFill: .01, ntrial: 10}, + trial{n: 10, percentFill: .50, ntrial: 10}, + trial{n: 1000, percentFill: .50, ntrial: 10}, + trial{n: 1000, percentFill: .99, ntrial: 10}, + */ + } + + tester := func(tr trial) { + for j := 0; j < tr.ntrial; j++ { + p("TestRleEquals022 on check# j=%v", j) + + ma := make(map[int]bool) + + n := tr.n + a := []uint16{} + + draw := int(float64(n) * tr.percentFill) + for i := 0; i < draw; i++ { + r0 := rand.Intn(n) + a = append(a, uint16(r0)) + ma[r0] = true + } + + rc := newRunContainer16FromVals(false, a...) + + // make bitmap and array versions: + bc := newBitmapContainer() + ac := newArrayContainer() + for k := range ma { + ac.iadd(uint16(k)) + bc.iadd(uint16(k)) + } + + // compare equals() across all three + So(rc.equals(ac), ShouldBeTrue) + So(rc.equals(bc), ShouldBeTrue) + + So(ac.equals(rc), ShouldBeTrue) + So(ac.equals(bc), ShouldBeTrue) + + So(bc.equals(ac), ShouldBeTrue) + So(bc.equals(rc), ShouldBeTrue) + + // and for good measure, check against the hash + So(rc.getCardinality(), ShouldEqual, len(ma)) + So(ac.getCardinality(), ShouldEqual, len(ma)) + So(bc.getCardinality(), ShouldEqual, len(ma)) + for k := range ma { + So(rc.contains(uint16(k)), ShouldBeTrue) + So(ac.contains(uint16(k)), ShouldBeTrue) + So(bc.contains(uint16(k)), ShouldBeTrue) + } + } + p("done with randomized equals() check for trial %#v", tr) + } + + for i := range trials { + tester(trials[i]) + } + + }) +} + +func TestRleIntersects023(t *testing.T) { + + Convey("runContainer `intersects` query should work against any mix of container types", t, func() { + seed := int64(42) + p("seed is %v", seed) + rand.Seed(seed) + + trials := []trial{ + {n: 10, percentFill: .293, ntrial: 1000}, + /* + trial{n: 10, percentFill: .01, ntrial: 10}, + trial{n: 10, percentFill: .50, ntrial: 10}, + trial{n: 1000, percentFill: .50, ntrial: 10}, + trial{n: 1000, percentFill: .99, ntrial: 10}, + */ + } + + tester := func(tr trial) { + for j := 0; j < tr.ntrial; j++ { + p("TestRleIntersects023 on check# j=%v", j) + + ma := make(map[int]bool) + mb := make(map[int]bool) + + n := tr.n + a := []uint16{} + b := []uint16{} + + draw := int(float64(n) * tr.percentFill) + for i := 0; i < draw; i++ { + r0 := rand.Intn(n) + a = append(a, uint16(r0)) + ma[r0] = true + + r1 := rand.Intn(n) + b = append(b, uint16(r1)) + mb[r1] = true + } + + // determine if they intersect from the maps + isect := false + for k := range ma { + if mb[k] { + isect = true + break + } + } + //fmt.Printf("isect was %v\n", isect) + + //showArray16(a, "a") + // can be too big to print: + //showHash("hash (correct) version of flipped is:", flipped) + + rcA := newRunContainer16FromVals(false, a...) + rcB := newRunContainer16FromVals(false, b...) + + // make bitmap and array versions: + bcA := newBitmapContainer() + bcB := newBitmapContainer() + + acA := newArrayContainer() + acB := newArrayContainer() + for k := range ma { + acA.iadd(uint16(k)) + bcA.iadd(uint16(k)) + } + for k := range mb { + acB.iadd(uint16(k)) + bcB.iadd(uint16(k)) + } + + // compare intersects() across all three + + // same type + So(rcA.intersects(rcB), ShouldEqual, isect) + So(acA.intersects(acB), ShouldEqual, isect) + So(bcA.intersects(bcB), ShouldEqual, isect) + + // across types + So(rcA.intersects(acB), ShouldEqual, isect) + So(rcA.intersects(bcB), ShouldEqual, isect) + + So(acA.intersects(rcB), ShouldEqual, isect) + So(acA.intersects(bcB), ShouldEqual, isect) + + So(bcA.intersects(acB), ShouldEqual, isect) + So(bcA.intersects(rcB), ShouldEqual, isect) + + // and swap the call pattern, so we test B intersects A as well. + + // same type + So(rcB.intersects(rcA), ShouldEqual, isect) + So(acB.intersects(acA), ShouldEqual, isect) + So(bcB.intersects(bcA), ShouldEqual, isect) + + // across types + So(rcB.intersects(acA), ShouldEqual, isect) + So(rcB.intersects(bcA), ShouldEqual, isect) + + So(acB.intersects(rcA), ShouldEqual, isect) + So(acB.intersects(bcA), ShouldEqual, isect) + + So(bcB.intersects(acA), ShouldEqual, isect) + So(bcB.intersects(rcA), ShouldEqual, isect) + + } + p("done with randomized intersects() check for trial %#v", tr) + } + + for i := range trials { + tester(trials[i]) + } + + }) +} + +func TestRleToEfficientContainer027(t *testing.T) { + + Convey("runContainer toEfficientContainer should return equivalent containers", t, func() { + seed := int64(42) + p("seed is %v", seed) + rand.Seed(seed) + + // 4096 or fewer integers -> array typically + + trials := []trial{ + {n: 8000, percentFill: .01, ntrial: 10}, + {n: 8000, percentFill: .99, ntrial: 10}, + /* + trial{n: 10, percentFill: .01, ntrial: 10}, + trial{n: 10, percentFill: .50, ntrial: 10}, + trial{n: 1000, percentFill: .50, ntrial: 10}, + trial{n: 1000, percentFill: .99, ntrial: 10}, + */ + } + + tester := func(tr trial) { + for j := 0; j < tr.ntrial; j++ { + p("TestRleToEfficientContainer027 on check# j=%v", j) + + ma := make(map[int]bool) + + n := tr.n + a := []uint16{} + + draw := int(float64(n) * tr.percentFill) + for i := 0; i < draw; i++ { + r0 := rand.Intn(n) + a = append(a, uint16(r0)) + ma[r0] = true + } + + rc := newRunContainer16FromVals(false, a...) + + c := rc.toEfficientContainer() + So(rc.equals(c), ShouldBeTrue) + + switch tc := c.(type) { + case *bitmapContainer: + p("I see a bitmapContainer with card %v", tc.getCardinality()) + case *arrayContainer: + p("I see a arrayContainer with card %v", tc.getCardinality()) + case *runContainer16: + p("I see a runContainer16 with card %v", tc.getCardinality()) + } + + } + p("done with randomized toEfficientContainer() check for trial %#v", tr) + } + + for i := range trials { + tester(trials[i]) + } + + }) + + Convey("runContainer toEfficientContainer should return an equivalent bitmap when that is efficient", t, func() { + + a := []uint16{} + + // odd intergers should be smallest as a bitmap + for i := 0; i < MaxUint16; i++ { + if i%2 == 1 { + a = append(a, uint16(i)) + } + } + + rc := newRunContainer16FromVals(false, a...) + + c := rc.toEfficientContainer() + So(rc.equals(c), ShouldBeTrue) + + _, isBitmapContainer := c.(*bitmapContainer) + So(isBitmapContainer, ShouldBeTrue) + + switch tc := c.(type) { + case *bitmapContainer: + p("I see a bitmapContainer with card %v", tc.getCardinality()) + case *arrayContainer: + p("I see a arrayContainer with card %v", tc.getCardinality()) + case *runContainer16: + p("I see a runContainer16 with card %v", tc.getCardinality()) + } + + }) +} + +func TestRle16RandomFillLeastSignificant16bits029(t *testing.T) { + + Convey("runContainer16.fillLeastSignificant16bits() should fill contents as expected, matching the same function on bitmap and array containers", t, func() { + seed := int64(42) + p("seed is %v", seed) + rand.Seed(seed) + + trials := []trial{ + {n: 100, percentFill: .95, ntrial: 1}, + } + + tester := func(tr trial) { + for j := 0; j < tr.ntrial; j++ { + p("TestRle16RandomFillLeastSignificant16bits029 on check# j=%v", j) + ma := make(map[int]bool) + + n := tr.n + a := []uint16{} + + draw := int(float64(n) * tr.percentFill) + for i := 0; i < draw; i++ { + r0 := rand.Intn(n) + a = append(a, uint16(r0)) + ma[r0] = true + } + + //showArray16(a, "a") + + // RunContainer + rc := newRunContainer16FromVals(false, a...) + + p("rc from a is %v", rc) + + // vs bitmapContainer + bc := newBitmapContainer() + for _, av := range a { + bc.iadd(av) + } + + // vs arrayContainer + ac := newArrayContainer() + for _, av := range a { + ac.iadd(av) + } + + acOut := make([]uint32, n+10) + bcOut := make([]uint32, n+10) + rcOut := make([]uint32, n+10) + + pos2 := 0 + + // see Bitmap.ToArray() for principal use + hs := uint32(43) << 16 + ac.fillLeastSignificant16bits(acOut, pos2, hs) + bc.fillLeastSignificant16bits(bcOut, pos2, hs) + rc.fillLeastSignificant16bits(rcOut, pos2, hs) + + So(rcOut, ShouldResemble, acOut) + So(rcOut, ShouldResemble, bcOut) + } + p("done with randomized fillLeastSignificant16bits checks for trial %#v", tr) + } + + for i := range trials { + tester(trials[i]) + } + + }) +} + +func TestRle16RandomGetShortIterator030(t *testing.T) { + + Convey("runContainer16.getShortIterator should traverse the contents expected, matching the traversal of the bitmap and array containers", t, func() { + seed := int64(42) + p("seed is %v", seed) + rand.Seed(seed) + + trials := []trial{ + {n: 100, percentFill: .95, ntrial: 1}, + } + + tester := func(tr trial) { + for j := 0; j < tr.ntrial; j++ { + p("TestRle16RandomGetShortIterator030 on check# j=%v", j) + ma := make(map[int]bool) + + n := tr.n + a := []uint16{} + + draw := int(float64(n) * tr.percentFill) + for i := 0; i < draw; i++ { + r0 := rand.Intn(n) + a = append(a, uint16(r0)) + ma[r0] = true + } + + //showArray16(a, "a") + + // RunContainer + rc := newRunContainer16FromVals(false, a...) + + p("rc from a is %v", rc) + + // vs bitmapContainer + bc := newBitmapContainer() + for _, av := range a { + bc.iadd(av) + } + + // vs arrayContainer + ac := newArrayContainer() + for _, av := range a { + ac.iadd(av) + } + + rit := rc.getShortIterator() + ait := ac.getShortIterator() + bit := bc.getShortIterator() + + for ait.hasNext() { + rn := rit.next() + an := ait.next() + bn := bit.next() + So(rn, ShouldEqual, an) + So(rn, ShouldEqual, bn) + } + } + p("done with randomized TestRle16RandomGetShortIterator030 checks for trial %#v", tr) + } + + for i := range trials { + tester(trials[i]) + } + + }) +} + +func TestRle16RandomIaddRangeIremoveRange031(t *testing.T) { + + Convey("runContainer16.iaddRange and iremoveRange should add/remove contents as expected, matching the same operations on the bitmap and array containers and the hashmap pos control", t, func() { + seed := int64(42) + p("seed is %v", seed) + rand.Seed(seed) + + trials := []trial{ + {n: 101, percentFill: .9, ntrial: 10}, + } + + tester := func(tr trial) { + for j := 0; j < tr.ntrial; j++ { + p("TestRle16RandomIaddRangeIremoveRange031 on check# j=%v", j) + ma := make(map[int]bool) + + n := tr.n + a := []uint16{} + + draw := int(float64(n) * tr.percentFill) + for i := 0; i < draw; i++ { + r0 := rand.Intn(n) + a = append(a, uint16(r0)) + ma[r0] = true + } + + //showArray16(a, "a") + + // RunContainer + rc := newRunContainer16FromVals(false, a...) + + p("rc from a is %v", rc) + + // vs bitmapContainer + bc := newBitmapContainer() + for _, av := range a { + bc.iadd(av) + } + + // vs arrayContainer + ac := newArrayContainer() + for _, av := range a { + ac.iadd(av) + } + + // iaddRange and iRemoveRange : pick some distinct random endpoints + a0 := rand.Intn(n) + a1 := a0 + for a1 == a0 { + a1 = rand.Intn(n) + } + if a0 > a1 { + a0, a1 = a1, a0 + } + + r0 := rand.Intn(n) + r1 := r0 + for r1 == r0 { + r1 = rand.Intn(n) + } + if r0 > r1 { + r0, r1 = r1, r0 + } + + // do the add + for i := a0; i <= a1; i++ { + ma[i] = true + } + // then the remove + for i := r0; i <= r1; i++ { + delete(ma, i) + } + + rc.iaddRange(a0, a1+1) + rc.iremoveRange(r0, r1+1) + + bc.iaddRange(a0, a1+1) + bc.iremoveRange(r0, r1+1) + + ac.iaddRange(a0, a1+1) + ac.iremoveRange(r0, r1+1) + + So(rc.getCardinality(), ShouldEqual, len(ma)) + So(rc.getCardinality(), ShouldEqual, ac.getCardinality()) + So(rc.getCardinality(), ShouldEqual, bc.getCardinality()) + + rit := rc.getShortIterator() + ait := ac.getShortIterator() + bit := bc.getShortIterator() + + for ait.hasNext() { + rn := rit.next() + an := ait.next() + bn := bit.next() + So(rn, ShouldEqual, an) + So(rn, ShouldEqual, bn) + } + // verify againt the map + for k := range ma { + So(rc.contains(uint16(k)), ShouldBeTrue) + } + + // coverage for run16 method + So(rc.serializedSizeInBytes(), ShouldEqual, 2+4*rc.numberOfRuns()) + } + p("done with randomized TestRle16RandomIaddRangeIremoveRange031 checks for trial %#v", tr) + } + + for i := range trials { + tester(trials[i]) + } + + }) +} + +func TestAllContainerMethodsAllContainerTypes065(t *testing.T) { + + Convey("each of the container methods that takes two containers should handle all 3x3==9 possible ways of being called -- without panic", t, func() { + a := newArrayContainer() + r := newRunContainer16() + b := newBitmapContainer() + + arr := []container{a, r, b} + for _, i := range arr { + for _, j := range arr { + i.and(j) + i.iand(j) + i.andNot(j) + + i.iandNot(j) + i.xor(j) + i.equals(j) + + i.or(j) + i.ior(j) + i.intersects(j) + + i.lazyOR(j) + i.lazyIOR(j) + } + } + }) + +} + +type twoCall func(r container) container + +type twofer struct { + name string + call twoCall + cn container +} + +func TestAllContainerMethodsAllContainerTypesWithData067(t *testing.T) { + + Convey("each of the container methods that takes two containers should handle all 3x3==9 possible ways of being called -- and return results that agree with each other", t, func() { + + //rleVerbose = true + + seed := int64(42) + p("seed is %v", seed) + rand.Seed(seed) + + trials := []trial{ + {n: 100, percentFill: .7, ntrial: 1, numRandomOpsPass: 100}, + {n: 100, percentFill: .7, ntrial: 1, numRandomOpsPass: 100, srang: &interval16{MaxUint16 - 100, MaxUint16}}} + + tester := func(tr trial) { + for j := 0; j < tr.ntrial; j++ { + p("TestAllContainerMethodsAllContainerTypesWithData067 on check# j=%v", j) + + a, r, b := getRandomSameThreeContainers(tr) + a2, r2, b2 := getRandomSameThreeContainers(tr) + + p("prior to any operations, fresh from getRandom...") + p("receiver (a) is '%s'", a) + p("receiver (r) is '%s'", r) + p("receiver (b) is '%s'", b) + + p("\n argument is '%s'\n", r2) + + m := []string{"array", "run", "bitmap"} + + receiver := []container{a, r, b} + arg := []container{a2, r2, b2} + callme := []twofer{} + + nCalls := 0 + for k, c := range receiver { + callme = append(callme, twofer{"and", c.and, c}) + callme = append(callme, twofer{"iand", c.iand, c}) + callme = append(callme, twofer{"ior", c.ior, c}) + callme = append(callme, twofer{"lazyOR", c.lazyOR, c}) + callme = append(callme, twofer{"lazyIOR", c.lazyIOR, c}) + callme = append(callme, twofer{"or", c.or, c}) + callme = append(callme, twofer{"xor", c.xor, c}) + callme = append(callme, twofer{"andNot", c.andNot, c}) + callme = append(callme, twofer{"iandNot", c.iandNot, c}) + if k == 0 { + nCalls = len(callme) + } + } + + for pass := 0; pass < tr.numRandomOpsPass+1; pass++ { + for k := 0; k < nCalls; k++ { + perm := getRandomPermutation(nCalls) + kk := perm[k] + c1 := callme[kk] // array receiver + c2 := callme[kk+nCalls] // run receiver + c3 := callme[kk+2*nCalls] // bitmap receiver + + if c1.name != c2.name { + panic("internal logic error") + } + if c3.name != c2.name { + panic("internal logic error") + } + + p("\n ========== testing calls to '%s' all match\n", c1.name) + for k2, a := range arg { + + p("\n ------------ on arg as '%s': %s\n", m[k2], a) + p("\n prior to '%s', array receiver c1 is '%s'\n", c1.name, c1.cn) + p("\n prior to '%s', run receiver c2 is '%s'\n", c2.name, c2.cn) + p("\n prior to '%s', bitmap receiver c3 is '%s'\n", c3.name, c3.cn) + if !c1.cn.equals(c2.cn) { + panic("c1 not equal to c2") + } + if !c1.cn.equals(c3.cn) { + panic("c1 not equal to c3") + } + + res1 := c1.call(a) // array + res2 := c2.call(a) // run + res3 := c3.call(a) // bitmap + + z := c1.name + + if strings.HasPrefix(z, "lazy") { + // on purpose, the lazy functions + // do not scan to update their cardinality + if asBc, isBc := res1.(*bitmapContainer); isBc { + asBc.computeCardinality() + } + if asBc, isBc := res2.(*bitmapContainer); isBc { + asBc.computeCardinality() + } + if asBc, isBc := res3.(*bitmapContainer); isBc { + asBc.computeCardinality() + } + } + + // check for equality all ways... + // excercising equals() calls too. + + p("'%s' receiver, '%s' arg, call='%s', res1=%s", + m[0], m[k2], z, res1) + p("'%s' receiver, '%s' arg, call='%s', res2=%s", + m[1], m[k2], z, res2) + p("'%s' receiver, '%s' arg, call='%s', res3=%s", + m[2], m[k2], z, res3) + + if !res1.equals(res2) { + panic(fmt.Sprintf("k:%v, k2:%v, res1 != res2,"+ + " call is '%s'", k, k2, c1.name)) + } + if !res2.equals(res1) { + panic(fmt.Sprintf("k:%v, k2:%v, res2 != res1,"+ + " call is '%s'", k, k2, c1.name)) + } + if !res1.equals(res3) { + p("res1 = %s", res1) + p("res3 = %s", res3) + panic(fmt.Sprintf("k:%v, k2:%v, res1 != res3,"+ + " call is '%s'", k, k2, c1.name)) + } + if !res3.equals(res1) { + panic(fmt.Sprintf("k:%v, k2:%v, res3 != res1,"+ + " call is '%s'", k, k2, c1.name)) + } + if !res2.equals(res3) { + panic(fmt.Sprintf("k:%v, k2:%v, res2 != res3,"+ + " call is '%s'", k, k2, c1.name)) + } + if !res3.equals(res2) { + panic(fmt.Sprintf("k:%v, k2:%v, res3 != res2,"+ + " call is '%s'", k, k2, c1.name)) + } + } + } // end k + } // end pass + + } // end j + p("done with randomized TestAllContainerMethodsAllContainerTypesWithData067 checks for trial %#v", tr) + } // end tester + + for i := range trials { + tester(trials[i]) + } + + }) + +} + +// generate random contents, then return that same +// logical content in three different container types +func getRandomSameThreeContainers(tr trial) (*arrayContainer, *runContainer16, *bitmapContainer) { + + ma := make(map[int]bool) + + n := tr.n + a := []uint16{} + + var samp interval16 + if tr.srang != nil { + samp = *tr.srang + } else { + samp.start = 0 + if n-1 > MaxUint16 { + panic(fmt.Errorf("n out of range: %v", n)) + } + samp.last = uint16(n - 1) + } + + draw := int(float64(n) * tr.percentFill) + for i := 0; i < draw; i++ { + r0 := int(samp.start) + rand.Intn(int(samp.runlen())) + a = append(a, uint16(r0)) + ma[r0] = true + } + + //showArray16(a, "a") + + rc := newRunContainer16FromVals(false, a...) + + p("rc from a is %v", rc) + + // vs bitmapContainer + bc := newBitmapContainerFromRun(rc) + ac := rc.toArrayContainer() + + return ac, rc, bc +} diff --git a/vendor/github.com/RoaringBitmap/roaring/roaring.go b/vendor/github.com/RoaringBitmap/roaring/roaring.go new file mode 100644 index 0000000..7534853 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/roaring.go @@ -0,0 +1,1242 @@ +// Package roaring is an implementation of Roaring Bitmaps in Go. +// They provide fast compressed bitmap data structures (also called bitset). +// They are ideally suited to represent sets of integers over +// relatively small ranges. +// See http://roaringbitmap.org for details. +package roaring + +import ( + "bufio" + "bytes" + "encoding/base64" + "fmt" + "io" + "strconv" +) + +// Bitmap represents a compressed bitmap where you can add integers. +type Bitmap struct { + highlowcontainer roaringArray +} + +// ToBase64 serializes a bitmap as Base64 +func (rb *Bitmap) ToBase64() (string, error) { + buf := new(bytes.Buffer) + _, err := rb.WriteTo(buf) + return base64.StdEncoding.EncodeToString(buf.Bytes()), err + +} + +// FromBase64 deserializes a bitmap from Base64 +func (rb *Bitmap) FromBase64(str string) (int64, error) { + data, err := base64.StdEncoding.DecodeString(str) + if err != nil { + return 0, err + } + buf := bytes.NewBuffer(data) + + return rb.ReadFrom(buf) +} + +// WriteTo writes a serialized version of this bitmap to stream. +// The format is compatible with other RoaringBitmap +// implementations (Java, C) and is documented here: +// https://github.com/RoaringBitmap/RoaringFormatSpec +func (rb *Bitmap) WriteTo(stream io.Writer) (int64, error) { + return rb.highlowcontainer.writeTo(stream) +} + +// ToBytes returns an array of bytes corresponding to what is written +// when calling WriteTo +func (rb *Bitmap) ToBytes() ([]byte, error) { + return rb.highlowcontainer.toBytes() +} + +// WriteToMsgpack writes a msgpack2/snappy-streaming compressed serialized +// version of this bitmap to stream. The format is not +// compatible with the WriteTo() format, and is +// experimental: it may produce smaller on disk +// footprint and/or be faster to read, depending +// on your content. Currently only the Go roaring +// implementation supports this format. +func (rb *Bitmap) WriteToMsgpack(stream io.Writer) (int64, error) { + return 0, rb.highlowcontainer.writeToMsgpack(stream) +} + +// ReadFrom reads a serialized version of this bitmap from stream. +// The format is compatible with other RoaringBitmap +// implementations (Java, C) and is documented here: +// https://github.com/RoaringBitmap/RoaringFormatSpec +func (rb *Bitmap) ReadFrom(stream io.Reader) (int64, error) { + return rb.highlowcontainer.readFrom(stream) +} + +// FromBuffer creates a bitmap from its serialized version stored in buffer +// +// The format specification is available here: +// https://github.com/RoaringBitmap/RoaringFormatSpec +// +// The provided byte array (buf) is expected to be a constant. +// The function makes the best effort attempt not to copy data. +// You should take care not to modify buff as it will +// likely result in unexpected program behavior. +// +// Resulting bitmaps are effectively immutable in the following sense: +// a copy-on-write marker is used so that when you modify the resulting +// bitmap, copies of selected data (containers) are made. +// You should *not* change the copy-on-write status of the resulting +// bitmaps (SetCopyOnWrite). +// +func (rb *Bitmap) FromBuffer(buf []byte) (int64, error) { + return rb.highlowcontainer.fromBuffer(buf) +} + +// RunOptimize attempts to further compress the runs of consecutive values found in the bitmap +func (rb *Bitmap) RunOptimize() { + rb.highlowcontainer.runOptimize() +} + +// HasRunCompression returns true if the bitmap benefits from run compression +func (rb *Bitmap) HasRunCompression() bool { + return rb.highlowcontainer.hasRunCompression() +} + +// ReadFromMsgpack reads a msgpack2/snappy-streaming serialized +// version of this bitmap from stream. The format is +// expected is that written by the WriteToMsgpack() +// call; see additional notes there. +func (rb *Bitmap) ReadFromMsgpack(stream io.Reader) (int64, error) { + return 0, rb.highlowcontainer.readFromMsgpack(stream) +} + +// MarshalBinary implements the encoding.BinaryMarshaler interface for the bitmap +func (rb *Bitmap) MarshalBinary() ([]byte, error) { + var buf bytes.Buffer + writer := bufio.NewWriter(&buf) + _, err := rb.WriteTo(writer) + if err != nil { + return nil, err + } + err = writer.Flush() + if err != nil { + return nil, err + } + return buf.Bytes(), nil +} + +// UnmarshalBinary implements the encoding.BinaryUnmarshaler interface for the bitmap +func (rb *Bitmap) UnmarshalBinary(data []byte) error { + var buf bytes.Buffer + _, err := buf.Write(data) + if err != nil { + return err + } + reader := bufio.NewReader(&buf) + _, err = rb.ReadFrom(reader) + return err +} + +// NewBitmap creates a new empty Bitmap (see also New) +func NewBitmap() *Bitmap { + return &Bitmap{*newRoaringArray()} +} + +// New creates a new empty Bitmap (same as NewBitmap) +func New() *Bitmap { + return &Bitmap{*newRoaringArray()} +} + +// Clear removes all content from the Bitmap and frees the memory +func (rb *Bitmap) Clear() { + rb.highlowcontainer = *newRoaringArray() +} + +// ToArray creates a new slice containing all of the integers stored in the Bitmap in sorted order +func (rb *Bitmap) ToArray() []uint32 { + array := make([]uint32, rb.GetCardinality()) + pos := 0 + pos2 := 0 + + for pos < rb.highlowcontainer.size() { + hs := uint32(rb.highlowcontainer.getKeyAtIndex(pos)) << 16 + c := rb.highlowcontainer.getContainerAtIndex(pos) + pos++ + c.fillLeastSignificant16bits(array, pos2, hs) + pos2 += c.getCardinality() + } + return array +} + +// GetSizeInBytes estimates the memory usage of the Bitmap. Note that this +// might differ slightly from the amount of bytes required for persistent storage +func (rb *Bitmap) GetSizeInBytes() uint64 { + size := uint64(8) + for _, c := range rb.highlowcontainer.containers { + size += uint64(2) + uint64(c.getSizeInBytes()) + } + return size +} + +// GetSerializedSizeInBytes computes the serialized size in bytes +// of the Bitmap. It should correspond to the +// number of bytes written when invoking WriteTo. You can expect +// that this function is much cheaper computationally than WriteTo. +func (rb *Bitmap) GetSerializedSizeInBytes() uint64 { + return rb.highlowcontainer.serializedSizeInBytes() +} + +// BoundSerializedSizeInBytes returns an upper bound on the serialized size in bytes +// assuming that one wants to store "cardinality" integers in [0, universe_size) +func BoundSerializedSizeInBytes(cardinality uint64, universeSize uint64) uint64 { + contnbr := (universeSize + uint64(65535)) / uint64(65536) + if contnbr > cardinality { + contnbr = cardinality + // we can't have more containers than we have values + } + headermax := 8*contnbr + 4 + if 4 > (contnbr+7)/8 { + headermax += 4 + } else { + headermax += (contnbr + 7) / 8 + } + valsarray := uint64(arrayContainerSizeInBytes(int(cardinality))) + valsbitmap := contnbr * uint64(bitmapContainerSizeInBytes()) + valsbest := valsarray + if valsbest > valsbitmap { + valsbest = valsbitmap + } + return valsbest + headermax +} + +// IntIterable allows you to iterate over the values in a Bitmap +type IntIterable interface { + HasNext() bool + Next() uint32 +} + +type intIterator struct { + pos int + hs uint32 + iter shortIterable + highlowcontainer *roaringArray +} + +// HasNext returns true if there are more integers to iterate over +func (ii *intIterator) HasNext() bool { + return ii.pos < ii.highlowcontainer.size() +} + +func (ii *intIterator) init() { + if ii.highlowcontainer.size() > ii.pos { + ii.iter = ii.highlowcontainer.getContainerAtIndex(ii.pos).getShortIterator() + ii.hs = uint32(ii.highlowcontainer.getKeyAtIndex(ii.pos)) << 16 + } +} + +// Next returns the next integer +func (ii *intIterator) Next() uint32 { + x := uint32(ii.iter.next()) | ii.hs + if !ii.iter.hasNext() { + ii.pos = ii.pos + 1 + ii.init() + } + return x +} + +func newIntIterator(a *Bitmap) *intIterator { + p := new(intIterator) + p.pos = 0 + p.highlowcontainer = &a.highlowcontainer + p.init() + return p +} + +// String creates a string representation of the Bitmap +func (rb *Bitmap) String() string { + // inspired by https://github.com/fzandona/goroar/ + var buffer bytes.Buffer + start := []byte("{") + buffer.Write(start) + i := rb.Iterator() + counter := 0 + if i.HasNext() { + counter = counter + 1 + buffer.WriteString(strconv.FormatInt(int64(i.Next()), 10)) + } + for i.HasNext() { + buffer.WriteString(",") + counter = counter + 1 + // to avoid exhausting the memory + if counter > 0x40000 { + buffer.WriteString("...") + break + } + buffer.WriteString(strconv.FormatInt(int64(i.Next()), 10)) + } + buffer.WriteString("}") + return buffer.String() +} + +// Iterator creates a new IntIterable to iterate over the integers contained in the bitmap, in sorted order +func (rb *Bitmap) Iterator() IntIterable { + return newIntIterator(rb) +} + +// Clone creates a copy of the Bitmap +func (rb *Bitmap) Clone() *Bitmap { + ptr := new(Bitmap) + ptr.highlowcontainer = *rb.highlowcontainer.clone() + return ptr +} + +// Minimum get the smallest value stored in this roaring bitmap, assumes that it is not empty +func (rb *Bitmap) Minimum() uint32 { + return uint32(rb.highlowcontainer.containers[0].minimum()) | (uint32(rb.highlowcontainer.keys[0]) << 16) +} + +// Maximum get the largest value stored in this roaring bitmap, assumes that it is not empty +func (rb *Bitmap) Maximum() uint32 { + lastindex := len(rb.highlowcontainer.containers) - 1 + return uint32(rb.highlowcontainer.containers[lastindex].maximum()) | (uint32(rb.highlowcontainer.keys[lastindex]) << 16) +} + +// Contains returns true if the integer is contained in the bitmap +func (rb *Bitmap) Contains(x uint32) bool { + hb := highbits(x) + c := rb.highlowcontainer.getContainer(hb) + return c != nil && c.contains(lowbits(x)) +} + +// ContainsInt returns true if the integer is contained in the bitmap (this is a convenience method, the parameter is casted to uint32 and Contains is called) +func (rb *Bitmap) ContainsInt(x int) bool { + return rb.Contains(uint32(x)) +} + +// Equals returns true if the two bitmaps contain the same integers +func (rb *Bitmap) Equals(o interface{}) bool { + srb, ok := o.(*Bitmap) + if ok { + return srb.highlowcontainer.equals(rb.highlowcontainer) + } + return false +} + +// Add the integer x to the bitmap +func (rb *Bitmap) Add(x uint32) { + hb := highbits(x) + ra := &rb.highlowcontainer + i := ra.getIndex(hb) + if i >= 0 { + var c container + c = ra.getWritableContainerAtIndex(i).iaddReturnMinimized(lowbits(x)) + rb.highlowcontainer.setContainerAtIndex(i, c) + } else { + newac := newArrayContainer() + rb.highlowcontainer.insertNewKeyValueAt(-i-1, hb, newac.iaddReturnMinimized(lowbits(x))) + } +} + +// add the integer x to the bitmap, return the container and its index +func (rb *Bitmap) addwithptr(x uint32) (int, container) { + hb := highbits(x) + ra := &rb.highlowcontainer + i := ra.getIndex(hb) + var c container + if i >= 0 { + c = ra.getWritableContainerAtIndex(i).iaddReturnMinimized(lowbits(x)) + rb.highlowcontainer.setContainerAtIndex(i, c) + return i, c + } + newac := newArrayContainer() + c = newac.iaddReturnMinimized(lowbits(x)) + rb.highlowcontainer.insertNewKeyValueAt(-i-1, hb, c) + return -i - 1, c +} + +// CheckedAdd adds the integer x to the bitmap and return true if it was added (false if the integer was already present) +func (rb *Bitmap) CheckedAdd(x uint32) bool { + // TODO: add unit tests for this method + hb := highbits(x) + i := rb.highlowcontainer.getIndex(hb) + if i >= 0 { + C := rb.highlowcontainer.getWritableContainerAtIndex(i) + oldcard := C.getCardinality() + C = C.iaddReturnMinimized(lowbits(x)) + rb.highlowcontainer.setContainerAtIndex(i, C) + return C.getCardinality() > oldcard + } + newac := newArrayContainer() + rb.highlowcontainer.insertNewKeyValueAt(-i-1, hb, newac.iaddReturnMinimized(lowbits(x))) + return true + +} + +// AddInt adds the integer x to the bitmap (convenience method: the parameter is casted to uint32 and we call Add) +func (rb *Bitmap) AddInt(x int) { + rb.Add(uint32(x)) +} + +// Remove the integer x from the bitmap +func (rb *Bitmap) Remove(x uint32) { + hb := highbits(x) + i := rb.highlowcontainer.getIndex(hb) + if i >= 0 { + c := rb.highlowcontainer.getWritableContainerAtIndex(i).iremoveReturnMinimized(lowbits(x)) + rb.highlowcontainer.setContainerAtIndex(i, c) + if rb.highlowcontainer.getContainerAtIndex(i).getCardinality() == 0 { + rb.highlowcontainer.removeAtIndex(i) + } + } +} + +// CheckedRemove removes the integer x from the bitmap and return true if the integer was effectively remove (and false if the integer was not present) +func (rb *Bitmap) CheckedRemove(x uint32) bool { + // TODO: add unit tests for this method + hb := highbits(x) + i := rb.highlowcontainer.getIndex(hb) + if i >= 0 { + C := rb.highlowcontainer.getWritableContainerAtIndex(i) + oldcard := C.getCardinality() + C = C.iremoveReturnMinimized(lowbits(x)) + rb.highlowcontainer.setContainerAtIndex(i, C) + if rb.highlowcontainer.getContainerAtIndex(i).getCardinality() == 0 { + rb.highlowcontainer.removeAtIndex(i) + return true + } + return C.getCardinality() < oldcard + } + return false + +} + +// IsEmpty returns true if the Bitmap is empty (it is faster than doing (GetCardinality() == 0)) +func (rb *Bitmap) IsEmpty() bool { + return rb.highlowcontainer.size() == 0 +} + +// GetCardinality returns the number of integers contained in the bitmap +func (rb *Bitmap) GetCardinality() uint64 { + size := uint64(0) + for _, c := range rb.highlowcontainer.containers { + size += uint64(c.getCardinality()) + } + return size +} + +// Rank returns the number of integers that are smaller or equal to x (Rank(infinity) would be GetCardinality()) +func (rb *Bitmap) Rank(x uint32) uint64 { + size := uint64(0) + for i := 0; i < rb.highlowcontainer.size(); i++ { + key := rb.highlowcontainer.getKeyAtIndex(i) + if key > highbits(x) { + return size + } + if key < highbits(x) { + size += uint64(rb.highlowcontainer.getContainerAtIndex(i).getCardinality()) + } else { + return size + uint64(rb.highlowcontainer.getContainerAtIndex(i).rank(lowbits(x))) + } + } + return size +} + +// Select returns the xth integer in the bitmap +func (rb *Bitmap) Select(x uint32) (uint32, error) { + if rb.GetCardinality() <= uint64(x) { + return 0, fmt.Errorf("can't find %dth integer in a bitmap with only %d items", x, rb.GetCardinality()) + } + + remaining := x + for i := 0; i < rb.highlowcontainer.size(); i++ { + c := rb.highlowcontainer.getContainerAtIndex(i) + if remaining >= uint32(c.getCardinality()) { + remaining -= uint32(c.getCardinality()) + } else { + key := rb.highlowcontainer.getKeyAtIndex(i) + return uint32(key)<<16 + uint32(c.selectInt(uint16(remaining))), nil + } + } + return 0, fmt.Errorf("can't find %dth integer in a bitmap with only %d items", x, rb.GetCardinality()) +} + +// And computes the intersection between two bitmaps and stores the result in the current bitmap +func (rb *Bitmap) And(x2 *Bitmap) { + pos1 := 0 + pos2 := 0 + intersectionsize := 0 + length1 := rb.highlowcontainer.size() + length2 := x2.highlowcontainer.size() + +main: + for { + if pos1 < length1 && pos2 < length2 { + s1 := rb.highlowcontainer.getKeyAtIndex(pos1) + s2 := x2.highlowcontainer.getKeyAtIndex(pos2) + for { + if s1 == s2 { + c1 := rb.highlowcontainer.getWritableContainerAtIndex(pos1) + c2 := x2.highlowcontainer.getContainerAtIndex(pos2) + diff := c1.iand(c2) + if diff.getCardinality() > 0 { + rb.highlowcontainer.replaceKeyAndContainerAtIndex(intersectionsize, s1, diff, false) + intersectionsize++ + } + pos1++ + pos2++ + if (pos1 == length1) || (pos2 == length2) { + break main + } + s1 = rb.highlowcontainer.getKeyAtIndex(pos1) + s2 = x2.highlowcontainer.getKeyAtIndex(pos2) + } else if s1 < s2 { + pos1 = rb.highlowcontainer.advanceUntil(s2, pos1) + if pos1 == length1 { + break main + } + s1 = rb.highlowcontainer.getKeyAtIndex(pos1) + } else { //s1 > s2 + pos2 = x2.highlowcontainer.advanceUntil(s1, pos2) + if pos2 == length2 { + break main + } + s2 = x2.highlowcontainer.getKeyAtIndex(pos2) + } + } + } else { + break + } + } + rb.highlowcontainer.resize(intersectionsize) +} + +// OrCardinality returns the cardinality of the union between two bitmaps, bitmaps are not modified +func (rb *Bitmap) OrCardinality(x2 *Bitmap) uint64 { + pos1 := 0 + pos2 := 0 + length1 := rb.highlowcontainer.size() + length2 := x2.highlowcontainer.size() + answer := uint64(0) +main: + for { + if (pos1 < length1) && (pos2 < length2) { + s1 := rb.highlowcontainer.getKeyAtIndex(pos1) + s2 := x2.highlowcontainer.getKeyAtIndex(pos2) + + for { + if s1 < s2 { + answer += uint64(rb.highlowcontainer.getContainerAtIndex(pos1).getCardinality()) + pos1++ + if pos1 == length1 { + break main + } + s1 = rb.highlowcontainer.getKeyAtIndex(pos1) + } else if s1 > s2 { + answer += uint64(x2.highlowcontainer.getContainerAtIndex(pos2).getCardinality()) + pos2++ + if pos2 == length2 { + break main + } + s2 = x2.highlowcontainer.getKeyAtIndex(pos2) + } else { + // TODO: could be faster if we did not have to materialize the container + answer += uint64(rb.highlowcontainer.getContainerAtIndex(pos1).or(x2.highlowcontainer.getContainerAtIndex(pos2)).getCardinality()) + pos1++ + pos2++ + if (pos1 == length1) || (pos2 == length2) { + break main + } + s1 = rb.highlowcontainer.getKeyAtIndex(pos1) + s2 = x2.highlowcontainer.getKeyAtIndex(pos2) + } + } + } else { + break + } + } + for ; pos1 < length1; pos1++ { + answer += uint64(rb.highlowcontainer.getContainerAtIndex(pos1).getCardinality()) + } + for ; pos2 < length2; pos2++ { + answer += uint64(x2.highlowcontainer.getContainerAtIndex(pos2).getCardinality()) + } + return answer +} + +// AndCardinality returns the cardinality of the intersection between two bitmaps, bitmaps are not modified +func (rb *Bitmap) AndCardinality(x2 *Bitmap) uint64 { + pos1 := 0 + pos2 := 0 + answer := uint64(0) + length1 := rb.highlowcontainer.size() + length2 := x2.highlowcontainer.size() + +main: + for { + if pos1 < length1 && pos2 < length2 { + s1 := rb.highlowcontainer.getKeyAtIndex(pos1) + s2 := x2.highlowcontainer.getKeyAtIndex(pos2) + for { + if s1 == s2 { + c1 := rb.highlowcontainer.getContainerAtIndex(pos1) + c2 := x2.highlowcontainer.getContainerAtIndex(pos2) + answer += uint64(c1.andCardinality(c2)) + pos1++ + pos2++ + if (pos1 == length1) || (pos2 == length2) { + break main + } + s1 = rb.highlowcontainer.getKeyAtIndex(pos1) + s2 = x2.highlowcontainer.getKeyAtIndex(pos2) + } else if s1 < s2 { + pos1 = rb.highlowcontainer.advanceUntil(s2, pos1) + if pos1 == length1 { + break main + } + s1 = rb.highlowcontainer.getKeyAtIndex(pos1) + } else { //s1 > s2 + pos2 = x2.highlowcontainer.advanceUntil(s1, pos2) + if pos2 == length2 { + break main + } + s2 = x2.highlowcontainer.getKeyAtIndex(pos2) + } + } + } else { + break + } + } + return answer +} + +// Intersects checks whether two bitmap intersects, bitmaps are not modified +func (rb *Bitmap) Intersects(x2 *Bitmap) bool { + pos1 := 0 + pos2 := 0 + length1 := rb.highlowcontainer.size() + length2 := x2.highlowcontainer.size() + +main: + for { + if pos1 < length1 && pos2 < length2 { + s1 := rb.highlowcontainer.getKeyAtIndex(pos1) + s2 := x2.highlowcontainer.getKeyAtIndex(pos2) + for { + if s1 == s2 { + c1 := rb.highlowcontainer.getContainerAtIndex(pos1) + c2 := x2.highlowcontainer.getContainerAtIndex(pos2) + if c1.intersects(c2) { + return true + } + pos1++ + pos2++ + if (pos1 == length1) || (pos2 == length2) { + break main + } + s1 = rb.highlowcontainer.getKeyAtIndex(pos1) + s2 = x2.highlowcontainer.getKeyAtIndex(pos2) + } else if s1 < s2 { + pos1 = rb.highlowcontainer.advanceUntil(s2, pos1) + if pos1 == length1 { + break main + } + s1 = rb.highlowcontainer.getKeyAtIndex(pos1) + } else { //s1 > s2 + pos2 = x2.highlowcontainer.advanceUntil(s1, pos2) + if pos2 == length2 { + break main + } + s2 = x2.highlowcontainer.getKeyAtIndex(pos2) + } + } + } else { + break + } + } + return false +} + +// Xor computes the symmetric difference between two bitmaps and stores the result in the current bitmap +func (rb *Bitmap) Xor(x2 *Bitmap) { + pos1 := 0 + pos2 := 0 + length1 := rb.highlowcontainer.size() + length2 := x2.highlowcontainer.size() + for { + if (pos1 < length1) && (pos2 < length2) { + s1 := rb.highlowcontainer.getKeyAtIndex(pos1) + s2 := x2.highlowcontainer.getKeyAtIndex(pos2) + if s1 < s2 { + pos1 = rb.highlowcontainer.advanceUntil(s2, pos1) + if pos1 == length1 { + break + } + } else if s1 > s2 { + c := x2.highlowcontainer.getWritableContainerAtIndex(pos2) + rb.highlowcontainer.insertNewKeyValueAt(pos1, x2.highlowcontainer.getKeyAtIndex(pos2), c) + length1++ + pos1++ + pos2++ + } else { + // TODO: couple be computed in-place for reduced memory usage + c := rb.highlowcontainer.getContainerAtIndex(pos1).xor(x2.highlowcontainer.getContainerAtIndex(pos2)) + if c.getCardinality() > 0 { + rb.highlowcontainer.setContainerAtIndex(pos1, c) + pos1++ + } else { + rb.highlowcontainer.removeAtIndex(pos1) + length1-- + } + pos2++ + } + } else { + break + } + } + if pos1 == length1 { + rb.highlowcontainer.appendCopyMany(x2.highlowcontainer, pos2, length2) + } +} + +// Or computes the union between two bitmaps and stores the result in the current bitmap +func (rb *Bitmap) Or(x2 *Bitmap) { + results := Or(rb, x2) // Todo: could be computed in-place for reduced memory usage + rb.highlowcontainer = results.highlowcontainer +} + +// AndNot computes the difference between two bitmaps and stores the result in the current bitmap +func (rb *Bitmap) AndNot(x2 *Bitmap) { + pos1 := 0 + pos2 := 0 + intersectionsize := 0 + length1 := rb.highlowcontainer.size() + length2 := x2.highlowcontainer.size() + +main: + for { + if pos1 < length1 && pos2 < length2 { + s1 := rb.highlowcontainer.getKeyAtIndex(pos1) + s2 := x2.highlowcontainer.getKeyAtIndex(pos2) + for { + if s1 == s2 { + c1 := rb.highlowcontainer.getWritableContainerAtIndex(pos1) + c2 := x2.highlowcontainer.getContainerAtIndex(pos2) + diff := c1.iandNot(c2) + if diff.getCardinality() > 0 { + rb.highlowcontainer.replaceKeyAndContainerAtIndex(intersectionsize, s1, diff, false) + intersectionsize++ + } + pos1++ + pos2++ + if (pos1 == length1) || (pos2 == length2) { + break main + } + s1 = rb.highlowcontainer.getKeyAtIndex(pos1) + s2 = x2.highlowcontainer.getKeyAtIndex(pos2) + } else if s1 < s2 { + c1 := rb.highlowcontainer.getContainerAtIndex(pos1) + mustCopyOnWrite := rb.highlowcontainer.needsCopyOnWrite(pos1) + rb.highlowcontainer.replaceKeyAndContainerAtIndex(intersectionsize, s1, c1, mustCopyOnWrite) + intersectionsize++ + pos1++ + if pos1 == length1 { + break main + } + s1 = rb.highlowcontainer.getKeyAtIndex(pos1) + } else { //s1 > s2 + pos2 = x2.highlowcontainer.advanceUntil(s1, pos2) + if pos2 == length2 { + break main + } + s2 = x2.highlowcontainer.getKeyAtIndex(pos2) + } + } + } else { + break + } + } + // TODO:implement as a copy + for pos1 < length1 { + c1 := rb.highlowcontainer.getContainerAtIndex(pos1) + s1 := rb.highlowcontainer.getKeyAtIndex(pos1) + mustCopyOnWrite := rb.highlowcontainer.needsCopyOnWrite(pos1) + rb.highlowcontainer.replaceKeyAndContainerAtIndex(intersectionsize, s1, c1, mustCopyOnWrite) + intersectionsize++ + pos1++ + } + rb.highlowcontainer.resize(intersectionsize) +} + +// Or computes the union between two bitmaps and returns the result +func Or(x1, x2 *Bitmap) *Bitmap { + answer := NewBitmap() + pos1 := 0 + pos2 := 0 + length1 := x1.highlowcontainer.size() + length2 := x2.highlowcontainer.size() +main: + for (pos1 < length1) && (pos2 < length2) { + s1 := x1.highlowcontainer.getKeyAtIndex(pos1) + s2 := x2.highlowcontainer.getKeyAtIndex(pos2) + + for { + if s1 < s2 { + answer.highlowcontainer.appendCopy(x1.highlowcontainer, pos1) + pos1++ + if pos1 == length1 { + break main + } + s1 = x1.highlowcontainer.getKeyAtIndex(pos1) + } else if s1 > s2 { + answer.highlowcontainer.appendCopy(x2.highlowcontainer, pos2) + pos2++ + if pos2 == length2 { + break main + } + s2 = x2.highlowcontainer.getKeyAtIndex(pos2) + } else { + + answer.highlowcontainer.appendContainer(s1, x1.highlowcontainer.getContainerAtIndex(pos1).or(x2.highlowcontainer.getContainerAtIndex(pos2)), false) + pos1++ + pos2++ + if (pos1 == length1) || (pos2 == length2) { + break main + } + s1 = x1.highlowcontainer.getKeyAtIndex(pos1) + s2 = x2.highlowcontainer.getKeyAtIndex(pos2) + } + } + } + if pos1 == length1 { + answer.highlowcontainer.appendCopyMany(x2.highlowcontainer, pos2, length2) + } else if pos2 == length2 { + answer.highlowcontainer.appendCopyMany(x1.highlowcontainer, pos1, length1) + } + return answer +} + +// And computes the intersection between two bitmaps and returns the result +func And(x1, x2 *Bitmap) *Bitmap { + answer := NewBitmap() + pos1 := 0 + pos2 := 0 + length1 := x1.highlowcontainer.size() + length2 := x2.highlowcontainer.size() +main: + for pos1 < length1 && pos2 < length2 { + s1 := x1.highlowcontainer.getKeyAtIndex(pos1) + s2 := x2.highlowcontainer.getKeyAtIndex(pos2) + for { + if s1 == s2 { + C := x1.highlowcontainer.getContainerAtIndex(pos1) + C = C.and(x2.highlowcontainer.getContainerAtIndex(pos2)) + + if C.getCardinality() > 0 { + answer.highlowcontainer.appendContainer(s1, C, false) + } + pos1++ + pos2++ + if (pos1 == length1) || (pos2 == length2) { + break main + } + s1 = x1.highlowcontainer.getKeyAtIndex(pos1) + s2 = x2.highlowcontainer.getKeyAtIndex(pos2) + } else if s1 < s2 { + pos1 = x1.highlowcontainer.advanceUntil(s2, pos1) + if pos1 == length1 { + break main + } + s1 = x1.highlowcontainer.getKeyAtIndex(pos1) + } else { // s1 > s2 + pos2 = x2.highlowcontainer.advanceUntil(s1, pos2) + if pos2 == length2 { + break main + } + s2 = x2.highlowcontainer.getKeyAtIndex(pos2) + } + } + } + return answer +} + +// Xor computes the symmetric difference between two bitmaps and returns the result +func Xor(x1, x2 *Bitmap) *Bitmap { + answer := NewBitmap() + pos1 := 0 + pos2 := 0 + length1 := x1.highlowcontainer.size() + length2 := x2.highlowcontainer.size() + for { + if (pos1 < length1) && (pos2 < length2) { + s1 := x1.highlowcontainer.getKeyAtIndex(pos1) + s2 := x2.highlowcontainer.getKeyAtIndex(pos2) + if s1 < s2 { + answer.highlowcontainer.appendCopy(x1.highlowcontainer, pos1) + pos1++ + } else if s1 > s2 { + answer.highlowcontainer.appendCopy(x2.highlowcontainer, pos2) + pos2++ + } else { + c := x1.highlowcontainer.getContainerAtIndex(pos1).xor(x2.highlowcontainer.getContainerAtIndex(pos2)) + if c.getCardinality() > 0 { + answer.highlowcontainer.appendContainer(s1, c, false) + } + pos1++ + pos2++ + } + } else { + break + } + } + if pos1 == length1 { + answer.highlowcontainer.appendCopyMany(x2.highlowcontainer, pos2, length2) + } else if pos2 == length2 { + answer.highlowcontainer.appendCopyMany(x1.highlowcontainer, pos1, length1) + } + return answer +} + +// AndNot computes the difference between two bitmaps and returns the result +func AndNot(x1, x2 *Bitmap) *Bitmap { + answer := NewBitmap() + pos1 := 0 + pos2 := 0 + length1 := x1.highlowcontainer.size() + length2 := x2.highlowcontainer.size() + +main: + for { + if pos1 < length1 && pos2 < length2 { + s1 := x1.highlowcontainer.getKeyAtIndex(pos1) + s2 := x2.highlowcontainer.getKeyAtIndex(pos2) + for { + if s1 < s2 { + answer.highlowcontainer.appendCopy(x1.highlowcontainer, pos1) + pos1++ + if pos1 == length1 { + break main + } + s1 = x1.highlowcontainer.getKeyAtIndex(pos1) + } else if s1 == s2 { + c1 := x1.highlowcontainer.getContainerAtIndex(pos1) + c2 := x2.highlowcontainer.getContainerAtIndex(pos2) + diff := c1.andNot(c2) + if diff.getCardinality() > 0 { + answer.highlowcontainer.appendContainer(s1, diff, false) + } + pos1++ + pos2++ + if (pos1 == length1) || (pos2 == length2) { + break main + } + s1 = x1.highlowcontainer.getKeyAtIndex(pos1) + s2 = x2.highlowcontainer.getKeyAtIndex(pos2) + } else { //s1 > s2 + pos2 = x2.highlowcontainer.advanceUntil(s1, pos2) + if pos2 == length2 { + break main + } + s2 = x2.highlowcontainer.getKeyAtIndex(pos2) + } + } + } else { + break + } + } + if pos2 == length2 { + answer.highlowcontainer.appendCopyMany(x1.highlowcontainer, pos1, length1) + } + return answer +} + +// AddMany add all of the values in dat +func (rb *Bitmap) AddMany(dat []uint32) { + if len(dat) == 0 { + return + } + prev := dat[0] + idx, c := rb.addwithptr(prev) + for _, i := range dat[1:] { + if highbits(prev) == highbits(i) { + c = c.iaddReturnMinimized(lowbits(i)) + rb.highlowcontainer.setContainerAtIndex(idx, c) + } else { + idx, c = rb.addwithptr(i) + } + prev = i + } +} + +// BitmapOf generates a new bitmap filled with the specified integers +func BitmapOf(dat ...uint32) *Bitmap { + ans := NewBitmap() + ans.AddMany(dat) + return ans +} + +// Flip negates the bits in the given range (i.e., [rangeStart,rangeEnd)), any integer present in this range and in the bitmap is removed, +// and any integer present in the range and not in the bitmap is added. +// The function uses 64-bit parameters even though a Bitmap stores 32-bit values because it is allowed and meaningful to use [0,uint64(0x100000000)) as a range +// while uint64(0x100000000) cannot be represented as a 32-bit value. +func (rb *Bitmap) Flip(rangeStart, rangeEnd uint64) { + + if rangeEnd > MaxUint32+1 { + panic("rangeEnd > MaxUint32+1") + } + if rangeStart > MaxUint32+1 { + panic("rangeStart > MaxUint32+1") + } + + if rangeStart >= rangeEnd { + return + } + + hbStart := highbits(uint32(rangeStart)) + lbStart := lowbits(uint32(rangeStart)) + hbLast := highbits(uint32(rangeEnd - 1)) + lbLast := lowbits(uint32(rangeEnd - 1)) + + var max uint32 = maxLowBit + for hb := hbStart; hb <= hbLast; hb++ { + var containerStart uint32 + if hb == hbStart { + containerStart = uint32(lbStart) + } + containerLast := max + if hb == hbLast { + containerLast = uint32(lbLast) + } + + i := rb.highlowcontainer.getIndex(hb) + + if i >= 0 { + c := rb.highlowcontainer.getWritableContainerAtIndex(i).inot(int(containerStart), int(containerLast)+1) + if c.getCardinality() > 0 { + rb.highlowcontainer.setContainerAtIndex(i, c) + } else { + rb.highlowcontainer.removeAtIndex(i) + } + } else { // *think* the range of ones must never be + // empty. + rb.highlowcontainer.insertNewKeyValueAt(-i-1, hb, rangeOfOnes(int(containerStart), int(containerLast))) + } + } +} + +// FlipInt calls Flip after casting the parameters (convenience method) +func (rb *Bitmap) FlipInt(rangeStart, rangeEnd int) { + rb.Flip(uint64(rangeStart), uint64(rangeEnd)) +} + +// AddRange adds the integers in [rangeStart, rangeEnd) to the bitmap. +// The function uses 64-bit parameters even though a Bitmap stores 32-bit values because it is allowed and meaningful to use [0,uint64(0x100000000)) as a range +// while uint64(0x100000000) cannot be represented as a 32-bit value. +func (rb *Bitmap) AddRange(rangeStart, rangeEnd uint64) { + if rangeStart >= rangeEnd { + return + } + + hbStart := uint32(highbits(uint32(rangeStart))) + lbStart := uint32(lowbits(uint32(rangeStart))) + hbLast := uint32(highbits(uint32(rangeEnd - 1))) + lbLast := uint32(lowbits(uint32(rangeEnd - 1))) + + var max uint32 = maxLowBit + for hb := uint16(hbStart); hb <= uint16(hbLast); hb++ { + containerStart := uint32(0) + if hb == uint16(hbStart) { + containerStart = lbStart + } + containerLast := max + if hb == uint16(hbLast) { + containerLast = lbLast + } + + i := rb.highlowcontainer.getIndex(hb) + + if i >= 0 { + c := rb.highlowcontainer.getWritableContainerAtIndex(i).iaddRange(int(containerStart), int(containerLast)+1) + rb.highlowcontainer.setContainerAtIndex(i, c) + } else { // *think* the range of ones must never be + // empty. + rb.highlowcontainer.insertNewKeyValueAt(-i-1, hb, rangeOfOnes(int(containerStart), int(containerLast))) + } + } +} + +// RemoveRange removes the integers in [rangeStart, rangeEnd) from the bitmap. +// The function uses 64-bit parameters even though a Bitmap stores 32-bit values because it is allowed and meaningful to use [0,uint64(0x100000000)) as a range +// while uint64(0x100000000) cannot be represented as a 32-bit value. +func (rb *Bitmap) RemoveRange(rangeStart, rangeEnd uint64) { + if rangeStart >= rangeEnd { + return + } + + hbStart := uint32(highbits(uint32(rangeStart))) + lbStart := uint32(lowbits(uint32(rangeStart))) + hbLast := uint32(highbits(uint32(rangeEnd - 1))) + lbLast := uint32(lowbits(uint32(rangeEnd - 1))) + + var max uint32 = maxLowBit + + if hbStart == hbLast { + i := rb.highlowcontainer.getIndex(uint16(hbStart)) + if i < 0 { + return + } + c := rb.highlowcontainer.getWritableContainerAtIndex(i).iremoveRange(int(lbStart), int(lbLast+1)) + if c.getCardinality() > 0 { + rb.highlowcontainer.setContainerAtIndex(i, c) + } else { + rb.highlowcontainer.removeAtIndex(i) + } + return + } + ifirst := rb.highlowcontainer.getIndex(uint16(hbStart)) + ilast := rb.highlowcontainer.getIndex(uint16(hbLast)) + + if ifirst >= 0 { + if lbStart != 0 { + c := rb.highlowcontainer.getWritableContainerAtIndex(ifirst).iremoveRange(int(lbStart), int(max+1)) + if c.getCardinality() > 0 { + rb.highlowcontainer.setContainerAtIndex(ifirst, c) + ifirst++ + } + } + } else { + ifirst = -ifirst - 1 + } + if ilast >= 0 { + if lbLast != max { + c := rb.highlowcontainer.getWritableContainerAtIndex(ilast).iremoveRange(int(0), int(lbLast+1)) + if c.getCardinality() > 0 { + rb.highlowcontainer.setContainerAtIndex(ilast, c) + } else { + ilast++ + } + } else { + ilast++ + } + } else { + ilast = -ilast - 1 + } + rb.highlowcontainer.removeIndexRange(ifirst, ilast) +} + +// Flip negates the bits in the given range (i.e., [rangeStart,rangeEnd)), any integer present in this range and in the bitmap is removed, +// and any integer present in the range and not in the bitmap is added, a new bitmap is returned leaving +// the current bitmap unchanged. +// The function uses 64-bit parameters even though a Bitmap stores 32-bit values because it is allowed and meaningful to use [0,uint64(0x100000000)) as a range +// while uint64(0x100000000) cannot be represented as a 32-bit value. +func Flip(bm *Bitmap, rangeStart, rangeEnd uint64) *Bitmap { + if rangeStart >= rangeEnd { + return bm.Clone() + } + + if rangeStart > MaxUint32 { + panic("rangeStart > MaxUint32") + } + if rangeEnd-1 > MaxUint32 { + panic("rangeEnd-1 > MaxUint32") + } + + answer := NewBitmap() + hbStart := highbits(uint32(rangeStart)) + lbStart := lowbits(uint32(rangeStart)) + hbLast := highbits(uint32(rangeEnd - 1)) + lbLast := lowbits(uint32(rangeEnd - 1)) + + // copy the containers before the active area + answer.highlowcontainer.appendCopiesUntil(bm.highlowcontainer, hbStart) + + var max uint32 = maxLowBit + for hb := hbStart; hb <= hbLast; hb++ { + var containerStart uint32 + if hb == hbStart { + containerStart = uint32(lbStart) + } + containerLast := max + if hb == hbLast { + containerLast = uint32(lbLast) + } + + i := bm.highlowcontainer.getIndex(hb) + j := answer.highlowcontainer.getIndex(hb) + + if i >= 0 { + c := bm.highlowcontainer.getContainerAtIndex(i).not(int(containerStart), int(containerLast)+1) + if c.getCardinality() > 0 { + answer.highlowcontainer.insertNewKeyValueAt(-j-1, hb, c) + } + + } else { // *think* the range of ones must never be + // empty. + answer.highlowcontainer.insertNewKeyValueAt(-j-1, hb, + rangeOfOnes(int(containerStart), int(containerLast))) + } + } + // copy the containers after the active area. + answer.highlowcontainer.appendCopiesAfter(bm.highlowcontainer, hbLast) + + return answer +} + +// SetCopyOnWrite sets this bitmap to use copy-on-write so that copies are fast and memory conscious +// if the parameter is true, otherwise we leave the default where hard copies are made +// (copy-on-write requires extra care in a threaded context). +// Calling SetCopyOnWrite(true) on a bitmap created with FromBuffer is unsafe. +func (rb *Bitmap) SetCopyOnWrite(val bool) { + rb.highlowcontainer.copyOnWrite = val +} + +// GetCopyOnWrite gets this bitmap's copy-on-write property +func (rb *Bitmap) GetCopyOnWrite() (val bool) { + return rb.highlowcontainer.copyOnWrite +} + +// FlipInt calls Flip after casting the parameters (convenience method) +func FlipInt(bm *Bitmap, rangeStart, rangeEnd int) *Bitmap { + return Flip(bm, uint64(rangeStart), uint64(rangeEnd)) +} + +// Statistics provides details on the container types in use. +type Statistics struct { + Cardinality uint64 + Containers uint64 + + ArrayContainers uint64 + ArrayContainerBytes uint64 + ArrayContainerValues uint64 + + BitmapContainers uint64 + BitmapContainerBytes uint64 + BitmapContainerValues uint64 + + RunContainers uint64 + RunContainerBytes uint64 + RunContainerValues uint64 +} + +// Stats returns details on container type usage in a Statistics struct. +func (rb *Bitmap) Stats() Statistics { + stats := Statistics{} + stats.Containers = uint64(len(rb.highlowcontainer.containers)) + for _, c := range rb.highlowcontainer.containers { + stats.Cardinality += uint64(c.getCardinality()) + + switch c.(type) { + case *arrayContainer: + stats.ArrayContainers++ + stats.ArrayContainerBytes += uint64(c.getSizeInBytes()) + stats.ArrayContainerValues += uint64(c.getCardinality()) + case *bitmapContainer: + stats.BitmapContainers++ + stats.BitmapContainerBytes += uint64(c.getSizeInBytes()) + stats.BitmapContainerValues += uint64(c.getCardinality()) + case *runContainer16: + stats.RunContainers++ + stats.RunContainerBytes += uint64(c.getSizeInBytes()) + stats.RunContainerValues += uint64(c.getCardinality()) + } + } + return stats +} diff --git a/vendor/github.com/RoaringBitmap/roaring/roaring_test.go b/vendor/github.com/RoaringBitmap/roaring/roaring_test.go new file mode 100644 index 0000000..7dde7d8 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/roaring_test.go @@ -0,0 +1,1875 @@ +package roaring + +import ( + . "github.com/smartystreets/goconvey/convey" + "github.com/willf/bitset" + "log" + "math/rand" + "strconv" + "testing" +) + +func TestFirstLast(t *testing.T) { + bm := New() + bm.AddInt(2) + bm.AddInt(4) + bm.AddInt(8) + if 2 != bm.Minimum() { + t.Errorf("bad minimum") + t.FailNow() + } + if 8 != bm.Maximum() { + t.Errorf("bad maximum") + t.FailNow() + } + i := 1 << 5 + for ; i < (1 << 17); i++ { + bm.AddInt(i) + if 2 != bm.Minimum() { + t.Errorf("bad minimum") + t.FailNow() + } + if uint32(i) != bm.Maximum() { + t.Errorf("bad maximum") + t.FailNow() + } + } + bm.RunOptimize() + if 2 != bm.Minimum() { + t.Errorf("bad minimum") + t.FailNow() + } + if uint32(i-1) != bm.Maximum() { + t.Errorf("bad maximum") + t.FailNow() + } +} + +func TestRoaringBitmapBitmapOf(t *testing.T) { + array := []uint32{5580, 33722, 44031, 57276, 83097} + bmp := BitmapOf(array...) + if len(array) != int(bmp.GetCardinality()) { + t.Errorf("length diff %d!=%d", len(array), bmp.GetCardinality()) + t.FailNow() + } + by, _ := bmp.ToBytes() + if uint64(len(by)) != bmp.GetSerializedSizeInBytes() { + t.Errorf("bad ToBytes") + t.FailNow() + } +} + +func TestRoaringBitmapAdd(t *testing.T) { + array := []uint32{5580, 33722, 44031, 57276, 83097} + bmp := New() + for _, v := range array { + bmp.Add(v) + } + if len(array) != int(bmp.GetCardinality()) { + t.Errorf("length diff %d!=%d", len(array), bmp.GetCardinality()) + t.FailNow() + } +} + +func TestRoaringBitmapAddMany(t *testing.T) { + array := []uint32{5580, 33722, 44031, 57276, 83097} + bmp := NewBitmap() + bmp.AddMany(array) + if len(array) != int(bmp.GetCardinality()) { + t.Errorf("length diff %d!=%d", len(array), bmp.GetCardinality()) + t.FailNow() + } +} + +// https://github.com/RoaringBitmap/roaring/issues/64 +func TestFlip64(t *testing.T) { + bm := New() + bm.AddInt(0) + bm.Flip(1, 2) + i := bm.Iterator() + if i.Next() != 0 || i.Next() != 1 || i.HasNext() { + t.Error("expected {0,1}") + } +} + +// https://github.com/RoaringBitmap/roaring/issues/64 +func TestFlip64Off(t *testing.T) { + bm := New() + bm.AddInt(10) + bm.Flip(11, 12) + i := bm.Iterator() + if i.Next() != 10 || i.Next() != 11 || i.HasNext() { + t.Error("expected {10,11}") + } +} + +func TestStringer(t *testing.T) { + v := NewBitmap() + for i := uint32(0); i < 10; i++ { + v.Add(i) + } + if v.String() != "{0,1,2,3,4,5,6,7,8,9}" { + t.Error("bad string output") + } + v.RunOptimize() + if v.String() != "{0,1,2,3,4,5,6,7,8,9}" { + t.Error("bad string output") + } +} + +func TestFastCard(t *testing.T) { + Convey("fast card", t, func() { + bm := NewBitmap() + bm.Add(1) + bm.AddRange(21, 260000) + bm2 := NewBitmap() + bm2.Add(25) + So(bm2.AndCardinality(bm), ShouldEqual, 1) + So(bm2.OrCardinality(bm), ShouldEqual, bm.GetCardinality()) + So(bm.AndCardinality(bm2), ShouldEqual, 1) + So(bm.OrCardinality(bm2), ShouldEqual, bm.GetCardinality()) + So(bm2.AndCardinality(bm), ShouldEqual, 1) + So(bm2.OrCardinality(bm), ShouldEqual, bm.GetCardinality()) + bm.RunOptimize() + So(bm2.AndCardinality(bm), ShouldEqual, 1) + So(bm2.OrCardinality(bm), ShouldEqual, bm.GetCardinality()) + So(bm.AndCardinality(bm2), ShouldEqual, 1) + So(bm.OrCardinality(bm2), ShouldEqual, bm.GetCardinality()) + So(bm2.AndCardinality(bm), ShouldEqual, 1) + So(bm2.OrCardinality(bm), ShouldEqual, bm.GetCardinality()) + }) +} + +func TestIntersects1(t *testing.T) { + Convey("intersects", t, func() { + bm := NewBitmap() + bm.Add(1) + bm.AddRange(21, 26) + bm2 := NewBitmap() + bm2.Add(25) + So(bm2.Intersects(bm), ShouldEqual, true) + bm.Remove(25) + So(bm2.Intersects(bm), ShouldEqual, false) + bm.AddRange(1, 100000) + So(bm2.Intersects(bm), ShouldEqual, true) + }) +} + +func TestRangePanic(t *testing.T) { + Convey("TestRangePanic", t, func() { + bm := NewBitmap() + bm.Add(1) + bm.AddRange(21, 26) + bm.AddRange(9, 14) + bm.AddRange(11, 16) + }) +} + +func TestRangeRemoval(t *testing.T) { + Convey("TestRangeRemovalPanic", t, func() { + bm := NewBitmap() + bm.Add(1) + bm.AddRange(21, 26) + bm.AddRange(9, 14) + bm.RemoveRange(11, 16) + bm.RemoveRange(1, 26) + c := bm.GetCardinality() + So(c, ShouldEqual, 0) + bm.AddRange(1, 10000) + c = bm.GetCardinality() + So(c, ShouldEqual, 10000-1) + bm.RemoveRange(1, 10000) + c = bm.GetCardinality() + So(c, ShouldEqual, 0) + }) +} + +func TestRangeRemovalFromContent(t *testing.T) { + Convey("TestRangeRemovalPanic", t, func() { + bm := NewBitmap() + for i := 100; i < 10000; i++ { + bm.AddInt(i * 3) + } + bm.AddRange(21, 26) + bm.AddRange(9, 14) + bm.RemoveRange(11, 16) + bm.RemoveRange(0, 30000) + c := bm.GetCardinality() + So(c, ShouldEqual, 00) + }) +} + +func TestFlipOnEmpty(t *testing.T) { + + Convey("TestFlipOnEmpty in-place", t, func() { + bm := NewBitmap() + bm.Flip(0, 10) + c := bm.GetCardinality() + So(c, ShouldEqual, 10) + }) + Convey("TestFlipOnEmpty, generating new result", t, func() { + bm := NewBitmap() + bm = Flip(bm, 0, 10) + c := bm.GetCardinality() + So(c, ShouldEqual, 10) + }) +} + +func TestBitmapRank(t *testing.T) { + for N := uint32(1); N <= 1048576; N *= 2 { + Convey("rank tests"+strconv.Itoa(int(N)), t, func() { + for gap := uint32(1); gap <= 65536; gap *= 2 { + rb1 := NewBitmap() + for x := uint32(0); x <= N; x += gap { + rb1.Add(x) + } + for y := uint32(0); y <= N; y++ { + if rb1.Rank(y) != uint64((y+1+gap-1)/gap) { + So(rb1.Rank(y), ShouldEqual, (y+1+gap-1)/gap) + } + } + } + }) + } +} + +func TestBitmapSelect(t *testing.T) { + for N := uint32(1); N <= 1048576; N *= 2 { + Convey("rank tests"+strconv.Itoa(int(N)), t, func() { + for gap := uint32(1); gap <= 65536; gap *= 2 { + rb1 := NewBitmap() + for x := uint32(0); x <= N; x += gap { + rb1.Add(x) + } + for y := uint32(0); y <= N/gap; y++ { + expectedInt := y * gap + i, err := rb1.Select(y) + if err != nil { + t.Fatal(err) + } + + if i != expectedInt { + So(i, ShouldEqual, expectedInt) + } + } + } + }) + } +} + +// some extra tests +func TestBitmapExtra(t *testing.T) { + for N := uint32(1); N <= 65536; N *= 2 { + Convey("extra tests"+strconv.Itoa(int(N)), t, func() { + for gap := uint32(1); gap <= 65536; gap *= 2 { + bs1 := bitset.New(0) + rb1 := NewBitmap() + for x := uint32(0); x <= N; x += gap { + bs1.Set(uint(x)) + rb1.Add(x) + } + So(bs1.Count(), ShouldEqual, rb1.GetCardinality()) + So(equalsBitSet(bs1, rb1), ShouldEqual, true) + for offset := uint32(1); offset <= gap; offset *= 2 { + bs2 := bitset.New(0) + rb2 := NewBitmap() + for x := uint32(0); x <= N; x += gap { + bs2.Set(uint(x + offset)) + rb2.Add(x + offset) + } + So(bs2.Count(), ShouldEqual, rb2.GetCardinality()) + So(equalsBitSet(bs2, rb2), ShouldEqual, true) + + clonebs1 := bs1.Clone() + clonebs1.InPlaceIntersection(bs2) + if !equalsBitSet(clonebs1, And(rb1, rb2)) { + t := rb1.Clone() + t.And(rb2) + So(equalsBitSet(clonebs1, t), ShouldEqual, true) + } + + // testing OR + clonebs1 = bs1.Clone() + clonebs1.InPlaceUnion(bs2) + + So(equalsBitSet(clonebs1, Or(rb1, rb2)), ShouldEqual, true) + // testing XOR + clonebs1 = bs1.Clone() + clonebs1.InPlaceSymmetricDifference(bs2) + So(equalsBitSet(clonebs1, Xor(rb1, rb2)), ShouldEqual, true) + + //testing NOTAND + clonebs1 = bs1.Clone() + clonebs1.InPlaceDifference(bs2) + So(equalsBitSet(clonebs1, AndNot(rb1, rb2)), ShouldEqual, true) + } + } + }) + } +} + +func FlipRange(start, end int, bs *bitset.BitSet) { + for i := start; i < end; i++ { + bs.Flip(uint(i)) + } +} + +func TestBitmap(t *testing.T) { + + Convey("Test Contains", t, func() { + rbm1 := NewBitmap() + for k := 0; k < 1000; k++ { + rbm1.AddInt(17 * k) + } + for k := 0; k < 17*1000; k++ { + So(rbm1.ContainsInt(k), ShouldEqual, (k/17*17 == k)) + } + }) + + Convey("Test Clone", t, func() { + rb1 := NewBitmap() + rb1.Add(10) + + rb2 := rb1.Clone() + rb2.Remove(10) + + So(rb1.Contains(10), ShouldBeTrue) + }) + Convey("Test run array not equal", t, func() { + rb := NewBitmap() + rb2 := NewBitmap() + rb.AddRange(0, 1<<16) + for i := 0; i < 10; i ++ { + rb2.AddInt(i) + } + So(rb.GetCardinality(), ShouldEqual, 1<<16) + So(rb2.GetCardinality(), ShouldEqual, 10) + So(rb.Equals(rb2), ShouldEqual, false) + rb.RunOptimize() + rb2.RunOptimize() + So(rb.GetCardinality(), ShouldEqual, 1<<16) + So(rb2.GetCardinality(), ShouldEqual, 10) + So(rb.Equals(rb2), ShouldEqual, false) + }) + + Convey("Test ANDNOT4", t, func() { + rb := NewBitmap() + rb2 := NewBitmap() + + for i := 0; i < 200000; i += 4 { + rb2.AddInt(i) + } + for i := 200000; i < 400000; i += 14 { + rb2.AddInt(i) + } + + off := AndNot(rb2, rb) + andNotresult := AndNot(rb, rb2) + + So(rb.Equals(andNotresult), ShouldEqual, true) + So(rb2.Equals(off), ShouldEqual, true) + rb2.AndNot(rb) + So(rb2.Equals(off), ShouldEqual, true) + + }) + + Convey("Test AND", t, func() { + rr := NewBitmap() + for k := 0; k < 4000; k++ { + rr.AddInt(k) + } + rr.Add(100000) + rr.Add(110000) + rr2 := NewBitmap() + rr2.Add(13) + rrand := And(rr, rr2) + array := rrand.ToArray() + + So(len(array), ShouldEqual, 1) + So(array[0], ShouldEqual, 13) + rr.And(rr2) + array = rr.ToArray() + + So(len(array), ShouldEqual, 1) + So(array[0], ShouldEqual, 13) + }) + + Convey("Test AND 2", t, func() { + rr := NewBitmap() + for k := 4000; k < 4256; k++ { + rr.AddInt(k) + } + for k := 65536; k < 65536+4000; k++ { + rr.AddInt(k) + } + for k := 3 * 65536; k < 3*65536+9000; k++ { + rr.AddInt(k) + } + for k := 4 * 65535; k < 4*65535+7000; k++ { + rr.AddInt(k) + } + for k := 6 * 65535; k < 6*65535+10000; k++ { + rr.AddInt(k) + } + for k := 8 * 65535; k < 8*65535+1000; k++ { + rr.AddInt(k) + } + for k := 9 * 65535; k < 9*65535+30000; k++ { + rr.AddInt(k) + } + + rr2 := NewBitmap() + for k := 4000; k < 4256; k++ { + rr2.AddInt(k) + } + for k := 65536; k < 65536+4000; k++ { + rr2.AddInt(k) + } + for k := 3*65536 + 2000; k < 3*65536+6000; k++ { + rr2.AddInt(k) + } + for k := 6 * 65535; k < 6*65535+1000; k++ { + rr2.AddInt(k) + } + for k := 7 * 65535; k < 7*65535+1000; k++ { + rr2.AddInt(k) + } + for k := 10 * 65535; k < 10*65535+5000; k++ { + rr2.AddInt(k) + } + correct := And(rr, rr2) + rr.And(rr2) + So(correct.Equals(rr), ShouldEqual, true) + }) + + Convey("Test AND 2", t, func() { + rr := NewBitmap() + for k := 0; k < 4000; k++ { + rr.AddInt(k) + } + rr.AddInt(100000) + rr.AddInt(110000) + rr2 := NewBitmap() + rr2.AddInt(13) + + rrand := And(rr, rr2) + array := rrand.ToArray() + So(len(array), ShouldEqual, 1) + So(array[0], ShouldEqual, 13) + }) + Convey("Test AND 3a", t, func() { + rr := NewBitmap() + rr2 := NewBitmap() + for k := 6 * 65536; k < 6*65536+10000; k++ { + rr.AddInt(k) + } + for k := 6 * 65536; k < 6*65536+1000; k++ { + rr2.AddInt(k) + } + result := And(rr, rr2) + So(result.GetCardinality(), ShouldEqual, 1000) + }) + Convey("Test AND 3", t, func() { + var arrayand [11256]uint32 + //393,216 + pos := 0 + rr := NewBitmap() + for k := 4000; k < 4256; k++ { + rr.AddInt(k) + } + for k := 65536; k < 65536+4000; k++ { + rr.AddInt(k) + } + for k := 3 * 65536; k < 3*65536+1000; k++ { + rr.AddInt(k) + } + for k := 3*65536 + 1000; k < 3*65536+7000; k++ { + rr.AddInt(k) + } + for k := 3*65536 + 7000; k < 3*65536+9000; k++ { + rr.AddInt(k) + } + for k := 4 * 65536; k < 4*65536+7000; k++ { + rr.AddInt(k) + } + for k := 8 * 65536; k < 8*65536+1000; k++ { + rr.AddInt(k) + } + for k := 9 * 65536; k < 9*65536+30000; k++ { + rr.AddInt(k) + } + + rr2 := NewBitmap() + for k := 4000; k < 4256; k++ { + rr2.AddInt(k) + arrayand[pos] = uint32(k) + pos++ + } + for k := 65536; k < 65536+4000; k++ { + rr2.AddInt(k) + arrayand[pos] = uint32(k) + pos++ + } + for k := 3*65536 + 1000; k < 3*65536+7000; k++ { + rr2.AddInt(k) + arrayand[pos] = uint32(k) + pos++ + } + for k := 6 * 65536; k < 6*65536+10000; k++ { + rr.AddInt(k) + } + for k := 6 * 65536; k < 6*65536+1000; k++ { + rr2.AddInt(k) + arrayand[pos] = uint32(k) + pos++ + } + + for k := 7 * 65536; k < 7*65536+1000; k++ { + rr2.AddInt(k) + } + for k := 10 * 65536; k < 10*65536+5000; k++ { + rr2.AddInt(k) + } + rrand := And(rr, rr2) + + arrayres := rrand.ToArray() + ok := true + for i := range arrayres { + if i < len(arrayand) { + if arrayres[i] != arrayand[i] { + log.Println(i, arrayres[i], arrayand[i]) + ok = false + } + } else { + log.Println('x', arrayres[i]) + ok = false + } + } + + So(len(arrayand), ShouldEqual, len(arrayres)) + So(ok, ShouldEqual, true) + + }) + + Convey("Test AND 4", t, func() { + rb := NewBitmap() + rb2 := NewBitmap() + + for i := 0; i < 200000; i += 4 { + rb2.AddInt(i) + } + for i := 200000; i < 400000; i += 14 { + rb2.AddInt(i) + } + //TODO: Bitmap.And(bm,bm2) + andresult := And(rb, rb2) + off := And(rb2, rb) + So(andresult.Equals(off), ShouldEqual, true) + So(andresult.GetCardinality(), ShouldEqual, 0) + + for i := 500000; i < 600000; i += 14 { + rb.AddInt(i) + } + for i := 200000; i < 400000; i += 3 { + rb2.AddInt(i) + } + andresult2 := And(rb, rb2) + So(andresult.GetCardinality(), ShouldEqual, 0) + So(andresult2.GetCardinality(), ShouldEqual, 0) + + for i := 0; i < 200000; i += 4 { + rb.AddInt(i) + } + for i := 200000; i < 400000; i += 14 { + rb.AddInt(i) + } + So(andresult.GetCardinality(), ShouldEqual, 0) + rc := And(rb, rb2) + rb.And(rb2) + So(rc.GetCardinality(), ShouldEqual, rb.GetCardinality()) + + }) + + Convey("ArrayContainerCardinalityTest", t, func() { + ac := newArrayContainer() + for k := uint16(0); k < 100; k++ { + ac.iadd(k) + So(ac.getCardinality(), ShouldEqual, k+1) + } + for k := uint16(0); k < 100; k++ { + ac.iadd(k) + So(ac.getCardinality(), ShouldEqual, 100) + } + }) + + Convey("or test", t, func() { + rr := NewBitmap() + for k := 0; k < 4000; k++ { + rr.AddInt(k) + } + rr2 := NewBitmap() + for k := 4000; k < 8000; k++ { + rr2.AddInt(k) + } + result := Or(rr, rr2) + So(result.GetCardinality(), ShouldEqual, rr.GetCardinality()+rr2.GetCardinality()) + }) + Convey("basic test", t, func() { + rr := NewBitmap() + var a [4002]uint32 + pos := 0 + for k := 0; k < 4000; k++ { + rr.AddInt(k) + a[pos] = uint32(k) + pos++ + } + rr.AddInt(100000) + a[pos] = 100000 + pos++ + rr.AddInt(110000) + a[pos] = 110000 + pos++ + array := rr.ToArray() + ok := true + for i := range a { + if array[i] != a[i] { + log.Println("rr : ", array[i], " a : ", a[i]) + ok = false + } + } + So(len(array), ShouldEqual, len(a)) + So(ok, ShouldEqual, true) + }) + + Convey("BitmapContainerCardinalityTest", t, func() { + ac := newBitmapContainer() + for k := uint16(0); k < 100; k++ { + ac.iadd(k) + So(ac.getCardinality(), ShouldEqual, k+1) + } + for k := uint16(0); k < 100; k++ { + ac.iadd(k) + So(ac.getCardinality(), ShouldEqual, 100) + } + }) + + Convey("BitmapContainerTest", t, func() { + rr := newBitmapContainer() + rr.iadd(uint16(110)) + rr.iadd(uint16(114)) + rr.iadd(uint16(115)) + var array [3]uint16 + pos := 0 + for itr := rr.getShortIterator(); itr.hasNext(); { + array[pos] = itr.next() + pos++ + } + + So(array[0], ShouldEqual, uint16(110)) + So(array[1], ShouldEqual, uint16(114)) + So(array[2], ShouldEqual, uint16(115)) + }) + Convey("cardinality test", t, func() { + N := 1024 + for gap := 7; gap < 100000; gap *= 10 { + for offset := 2; offset <= 1024; offset *= 2 { + rb := NewBitmap() + for k := 0; k < N; k++ { + rb.AddInt(k * gap) + So(rb.GetCardinality(), ShouldEqual, k+1) + } + So(rb.GetCardinality(), ShouldEqual, N) + // check the add of existing values + for k := 0; k < N; k++ { + rb.AddInt(k * gap) + So(rb.GetCardinality(), ShouldEqual, N) + } + + rb2 := NewBitmap() + + for k := 0; k < N; k++ { + rb2.AddInt(k * gap * offset) + So(rb2.GetCardinality(), ShouldEqual, k+1) + } + + So(rb2.GetCardinality(), ShouldEqual, N) + + for k := 0; k < N; k++ { + rb2.AddInt(k * gap * offset) + So(rb2.GetCardinality(), ShouldEqual, N) + } + So(And(rb, rb2).GetCardinality(), ShouldEqual, N/offset) + So(Xor(rb, rb2).GetCardinality(), ShouldEqual, 2*N-2*N/offset) + So(Or(rb, rb2).GetCardinality(), ShouldEqual, 2*N-N/offset) + } + } + }) + + Convey("clear test", t, func() { + rb := NewBitmap() + for i := 0; i < 200000; i += 7 { + // dense + rb.AddInt(i) + } + for i := 200000; i < 400000; i += 177 { + // sparse + rb.AddInt(i) + } + + rb2 := NewBitmap() + rb3 := NewBitmap() + for i := 0; i < 200000; i += 4 { + rb2.AddInt(i) + } + for i := 200000; i < 400000; i += 14 { + rb2.AddInt(i) + } + + rb.Clear() + So(rb.GetCardinality(), ShouldEqual, 0) + So(rb2.GetCardinality(), ShouldNotEqual, 0) + + rb.AddInt(4) + rb3.AddInt(4) + andresult := And(rb, rb2) + orresult := Or(rb, rb2) + + So(andresult.GetCardinality(), ShouldEqual, 1) + So(orresult.GetCardinality(), ShouldEqual, rb2.GetCardinality()) + + for i := 0; i < 200000; i += 4 { + rb.AddInt(i) + rb3.AddInt(i) + } + for i := 200000; i < 400000; i += 114 { + rb.AddInt(i) + rb3.AddInt(i) + } + + arrayrr := rb.ToArray() + arrayrr3 := rb3.ToArray() + ok := true + for i := range arrayrr { + if arrayrr[i] != arrayrr3[i] { + ok = false + } + } + So(len(arrayrr), ShouldEqual, len(arrayrr3)) + So(ok, ShouldEqual, true) + }) + + Convey("constainer factory ", t, func() { + + bc1 := newBitmapContainer() + bc2 := newBitmapContainer() + bc3 := newBitmapContainer() + ac1 := newArrayContainer() + ac2 := newArrayContainer() + ac3 := newArrayContainer() + + for i := 0; i < 5000; i++ { + bc1.iadd(uint16(i * 70)) + } + for i := 0; i < 5000; i++ { + bc2.iadd(uint16(i * 70)) + } + for i := 0; i < 5000; i++ { + bc3.iadd(uint16(i * 70)) + } + for i := 0; i < 4000; i++ { + ac1.iadd(uint16(i * 50)) + } + for i := 0; i < 4000; i++ { + ac2.iadd(uint16(i * 50)) + } + for i := 0; i < 4000; i++ { + ac3.iadd(uint16(i * 50)) + } + + rbc := ac1.clone().(*arrayContainer).toBitmapContainer() + So(validate(rbc, ac1), ShouldEqual, true) + rbc = ac2.clone().(*arrayContainer).toBitmapContainer() + So(validate(rbc, ac2), ShouldEqual, true) + rbc = ac3.clone().(*arrayContainer).toBitmapContainer() + So(validate(rbc, ac3), ShouldEqual, true) + }) + Convey("flipTest1 ", t, func() { + rb := NewBitmap() + rb.Flip(100000, 200000) // in-place on empty bitmap + rbcard := rb.GetCardinality() + So(100000, ShouldEqual, rbcard) + + bs := bitset.New(20000 - 10000) + for i := uint(100000); i < 200000; i++ { + bs.Set(i) + } + So(equalsBitSet(bs, rb), ShouldEqual, true) + }) + + Convey("flipTest1A", t, func() { + rb := NewBitmap() + rb1 := Flip(rb, 100000, 200000) + rbcard := rb1.GetCardinality() + So(100000, ShouldEqual, rbcard) + So(0, ShouldEqual, rb.GetCardinality()) + + bs := bitset.New(0) + So(equalsBitSet(bs, rb), ShouldEqual, true) + + for i := uint(100000); i < 200000; i++ { + bs.Set(i) + } + So(equalsBitSet(bs, rb1), ShouldEqual, true) + }) + Convey("flipTest2", t, func() { + rb := NewBitmap() + rb.Flip(100000, 100000) + rbcard := rb.GetCardinality() + So(0, ShouldEqual, rbcard) + + bs := bitset.New(0) + So(equalsBitSet(bs, rb), ShouldEqual, true) + }) + + Convey("flipTest2A", t, func() { + rb := NewBitmap() + rb1 := Flip(rb, 100000, 100000) + + rb.AddInt(1) + rbcard := rb1.GetCardinality() + + So(0, ShouldEqual, rbcard) + So(1, ShouldEqual, rb.GetCardinality()) + + bs := bitset.New(0) + So(equalsBitSet(bs, rb1), ShouldEqual, true) + bs.Set(1) + So(equalsBitSet(bs, rb), ShouldEqual, true) + }) + + Convey("flipTest3A", t, func() { + rb := NewBitmap() + rb.Flip(100000, 200000) // got 100k-199999 + rb.Flip(100000, 199991) // give back 100k-199990 + rbcard := rb.GetCardinality() + So(9, ShouldEqual, rbcard) + + bs := bitset.New(0) + for i := uint(199991); i < 200000; i++ { + bs.Set(i) + } + + So(equalsBitSet(bs, rb), ShouldEqual, true) + }) + + Convey("flipTest4A", t, func() { + // fits evenly on both ends + rb := NewBitmap() + rb.Flip(100000, 200000) // got 100k-199999 + rb.Flip(65536, 4*65536) + rbcard := rb.GetCardinality() + + // 65536 to 99999 are 1s + // 200000 to 262143 are 1s: total card + + So(96608, ShouldEqual, rbcard) + + bs := bitset.New(0) + for i := uint(65536); i < 100000; i++ { + bs.Set(i) + } + for i := uint(200000); i < 262144; i++ { + bs.Set(i) + } + + So(equalsBitSet(bs, rb), ShouldEqual, true) + }) + + Convey("flipTest5", t, func() { + // fits evenly on small end, multiple + // containers + rb := NewBitmap() + rb.Flip(100000, 132000) + rb.Flip(65536, 120000) + rbcard := rb.GetCardinality() + + // 65536 to 99999 are 1s + // 120000 to 131999 + + So(46464, ShouldEqual, rbcard) + + bs := bitset.New(0) + for i := uint(65536); i < 100000; i++ { + bs.Set(i) + } + for i := uint(120000); i < 132000; i++ { + bs.Set(i) + } + So(equalsBitSet(bs, rb), ShouldEqual, true) + }) + + Convey("flipTest6", t, func() { + rb := NewBitmap() + rb1 := Flip(rb, 100000, 132000) + rb2 := Flip(rb1, 65536, 120000) + //rbcard := rb2.GetCardinality() + + bs := bitset.New(0) + for i := uint(65536); i < 100000; i++ { + bs.Set(i) + } + for i := uint(120000); i < 132000; i++ { + bs.Set(i) + } + So(equalsBitSet(bs, rb2), ShouldEqual, true) + }) + + Convey("flipTest6A", t, func() { + rb := NewBitmap() + rb1 := Flip(rb, 100000, 132000) + rb2 := Flip(rb1, 99000, 2*65536) + rbcard := rb2.GetCardinality() + + So(1928, ShouldEqual, rbcard) + + bs := bitset.New(0) + for i := uint(99000); i < 100000; i++ { + bs.Set(i) + } + for i := uint(2 * 65536); i < 132000; i++ { + bs.Set(i) + } + So(equalsBitSet(bs, rb2), ShouldEqual, true) + }) + + Convey("flipTest7", t, func() { + // within 1 word, first container + rb := NewBitmap() + rb.Flip(650, 132000) + rb.Flip(648, 651) + rbcard := rb.GetCardinality() + + // 648, 649, 651-131999 + + So(132000-651+2, ShouldEqual, rbcard) + bs := bitset.New(0) + bs.Set(648) + bs.Set(649) + for i := uint(651); i < 132000; i++ { + bs.Set(i) + } + So(equalsBitSet(bs, rb), ShouldEqual, true) + }) + Convey("flipTestBig", t, func() { + numCases := 1000 + rb := NewBitmap() + bs := bitset.New(0) + //Random r = new Random(3333); + checkTime := 2.0 + + for i := 0; i < numCases; i++ { + start := rand.Intn(65536 * 20) + end := rand.Intn(65536 * 20) + if rand.Float64() < float64(0.1) { + end = start + rand.Intn(100) + } + rb.Flip(uint64(start), uint64(end)) + if start < end { + FlipRange(start, end, bs) // throws exception + } + // otherwise + // insert some more ANDs to keep things sparser + if rand.Float64() < 0.2 { + mask := NewBitmap() + mask1 := bitset.New(0) + startM := rand.Intn(65536 * 20) + endM := startM + 100000 + mask.Flip(uint64(startM), uint64(endM)) + FlipRange(startM, endM, mask1) + mask.Flip(0, 65536*20+100000) + FlipRange(0, 65536*20+100000, mask1) + rb.And(mask) + bs.InPlaceIntersection(mask1) + } + // see if we can detect incorrectly shared containers + if rand.Float64() < 0.1 { + irrelevant := Flip(rb, 10, 100000) + irrelevant.Flip(5, 200000) + irrelevant.Flip(190000, 260000) + } + if float64(i) > checkTime { + So(equalsBitSet(bs, rb), ShouldEqual, true) + checkTime *= 1.5 + } + } + }) + + Convey("ortest", t, func() { + rr := NewBitmap() + for k := 0; k < 4000; k++ { + rr.AddInt(k) + } + rr.AddInt(100000) + rr.AddInt(110000) + rr2 := NewBitmap() + for k := 0; k < 4000; k++ { + rr2.AddInt(k) + } + + rror := Or(rr, rr2) + + array := rror.ToArray() + + rr.Or(rr2) + arrayirr := rr.ToArray() + So(IntsEquals(array, arrayirr), ShouldEqual, true) + }) + + Convey("ORtest", t, func() { + rr := NewBitmap() + for k := 4000; k < 4256; k++ { + rr.AddInt(k) + } + for k := 65536; k < 65536+4000; k++ { + rr.AddInt(k) + } + for k := 3 * 65536; k < 3*65536+9000; k++ { + rr.AddInt(k) + } + for k := 4 * 65535; k < 4*65535+7000; k++ { + rr.AddInt(k) + } + for k := 6 * 65535; k < 6*65535+10000; k++ { + rr.AddInt(k) + } + for k := 8 * 65535; k < 8*65535+1000; k++ { + rr.AddInt(k) + } + for k := 9 * 65535; k < 9*65535+30000; k++ { + rr.AddInt(k) + } + + rr2 := NewBitmap() + for k := 4000; k < 4256; k++ { + rr2.AddInt(k) + } + for k := 65536; k < 65536+4000; k++ { + rr2.AddInt(k) + } + for k := 3*65536 + 2000; k < 3*65536+6000; k++ { + rr2.AddInt(k) + } + for k := 6 * 65535; k < 6*65535+1000; k++ { + rr2.AddInt(k) + } + for k := 7 * 65535; k < 7*65535+1000; k++ { + rr2.AddInt(k) + } + for k := 10 * 65535; k < 10*65535+5000; k++ { + rr2.AddInt(k) + } + correct := Or(rr, rr2) + rr.Or(rr2) + So(correct.Equals(rr), ShouldEqual, true) + }) + + Convey("ortest2", t, func() { + arrayrr := make([]uint32, 4000+4000+2) + pos := 0 + rr := NewBitmap() + for k := 0; k < 4000; k++ { + rr.AddInt(k) + arrayrr[pos] = uint32(k) + pos++ + } + rr.AddInt(100000) + rr.AddInt(110000) + rr2 := NewBitmap() + for k := 4000; k < 8000; k++ { + rr2.AddInt(k) + arrayrr[pos] = uint32(k) + pos++ + } + + arrayrr[pos] = 100000 + pos++ + arrayrr[pos] = 110000 + pos++ + + rror := Or(rr, rr2) + + arrayor := rror.ToArray() + + So(IntsEquals(arrayor, arrayrr), ShouldEqual, true) + }) + + Convey("ortest3", t, func() { + V1 := make(map[int]bool) + V2 := make(map[int]bool) + + rr := NewBitmap() + rr2 := NewBitmap() + for k := 0; k < 4000; k++ { + rr2.AddInt(k) + V1[k] = true + } + for k := 3500; k < 4500; k++ { + rr.AddInt(k) + V1[k] = true + } + for k := 4000; k < 65000; k++ { + rr2.AddInt(k) + V1[k] = true + } + + // In the second node of each roaring bitmap, we have two bitmap + // containers. + // So, we will check the union between two BitmapContainers + for k := 65536; k < 65536+10000; k++ { + rr.AddInt(k) + V1[k] = true + } + + for k := 65536; k < 65536+14000; k++ { + rr2.AddInt(k) + V1[k] = true + } + + // In the 3rd node of each Roaring Bitmap, we have an + // ArrayContainer, so, we will try the union between two + // ArrayContainers. + for k := 4 * 65535; k < 4*65535+1000; k++ { + rr.AddInt(k) + V1[k] = true + } + + for k := 4 * 65535; k < 4*65535+800; k++ { + rr2.AddInt(k) + V1[k] = true + } + + // For the rest, we will check if the union will take them in + // the result + for k := 6 * 65535; k < 6*65535+1000; k++ { + rr.AddInt(k) + V1[k] = true + } + + for k := 7 * 65535; k < 7*65535+2000; k++ { + rr2.AddInt(k) + V1[k] = true + } + + rror := Or(rr, rr2) + valide := true + + for _, k := range rror.ToArray() { + _, found := V1[int(k)] + if !found { + valide = false + } + V2[int(k)] = true + } + + for k := range V1 { + _, found := V2[k] + if !found { + valide = false + } + } + + So(valide, ShouldEqual, true) + }) + + Convey("ortest4", t, func() { + rb := NewBitmap() + rb2 := NewBitmap() + + for i := 0; i < 200000; i += 4 { + rb2.AddInt(i) + } + for i := 200000; i < 400000; i += 14 { + rb2.AddInt(i) + } + rb2card := rb2.GetCardinality() + + // check or against an empty bitmap + orresult := Or(rb, rb2) + off := Or(rb2, rb) + So(orresult.Equals(off), ShouldEqual, true) + + So(rb2card, ShouldEqual, orresult.GetCardinality()) + + for i := 500000; i < 600000; i += 14 { + rb.AddInt(i) + } + for i := 200000; i < 400000; i += 3 { + rb2.AddInt(i) + } + // check or against an empty bitmap + orresult2 := Or(rb, rb2) + So(rb2card, ShouldEqual, orresult.GetCardinality()) + So(rb2.GetCardinality()+rb.GetCardinality(), ShouldEqual, + orresult2.GetCardinality()) + rb.Or(rb2) + So(rb.Equals(orresult2), ShouldEqual, true) + + }) + + Convey("randomTest", t, func() { + rTest(15) + rTest(1024) + rTest(4096) + rTest(65536) + rTest(65536 * 16) + }) + + Convey("SimpleCardinality", t, func() { + N := 512 + gap := 70 + + rb := NewBitmap() + for k := 0; k < N; k++ { + rb.AddInt(k * gap) + So(rb.GetCardinality(), ShouldEqual, k+1) + } + So(rb.GetCardinality(), ShouldEqual, N) + for k := 0; k < N; k++ { + rb.AddInt(k * gap) + So(rb.GetCardinality(), ShouldEqual, N) + } + + }) + + Convey("XORtest", t, func() { + rr := NewBitmap() + for k := 4000; k < 4256; k++ { + rr.AddInt(k) + } + for k := 65536; k < 65536+4000; k++ { + rr.AddInt(k) + } + for k := 3 * 65536; k < 3*65536+9000; k++ { + rr.AddInt(k) + } + for k := 4 * 65535; k < 4*65535+7000; k++ { + rr.AddInt(k) + } + for k := 6 * 65535; k < 6*65535+10000; k++ { + rr.AddInt(k) + } + for k := 8 * 65535; k < 8*65535+1000; k++ { + rr.AddInt(k) + } + for k := 9 * 65535; k < 9*65535+30000; k++ { + rr.AddInt(k) + } + + rr2 := NewBitmap() + for k := 4000; k < 4256; k++ { + rr2.AddInt(k) + } + for k := 65536; k < 65536+4000; k++ { + rr2.AddInt(k) + } + for k := 3*65536 + 2000; k < 3*65536+6000; k++ { + rr2.AddInt(k) + } + for k := 6 * 65535; k < 6*65535+1000; k++ { + rr2.AddInt(k) + } + for k := 7 * 65535; k < 7*65535+1000; k++ { + rr2.AddInt(k) + } + for k := 10 * 65535; k < 10*65535+5000; k++ { + rr2.AddInt(k) + } + correct := Xor(rr, rr2) + rr.Xor(rr2) + So(correct.Equals(rr), ShouldEqual, true) + }) + + Convey("xortest1", t, func() { + V1 := make(map[int]bool) + V2 := make(map[int]bool) + + rr := NewBitmap() + rr2 := NewBitmap() + // For the first 65536: rr2 has a bitmap container, and rr has + // an array container. + // We will check the union between a BitmapCintainer and an + // arrayContainer + for k := 0; k < 4000; k++ { + rr2.AddInt(k) + if k < 3500 { + V1[k] = true + } + } + for k := 3500; k < 4500; k++ { + rr.AddInt(k) + } + for k := 4000; k < 65000; k++ { + rr2.AddInt(k) + if k >= 4500 { + V1[k] = true + } + } + + for k := 65536; k < 65536+30000; k++ { + rr.AddInt(k) + } + + for k := 65536; k < 65536+50000; k++ { + rr2.AddInt(k) + if k >= 65536+30000 { + V1[k] = true + } + } + + // In the 3rd node of each Roaring Bitmap, we have an + // ArrayContainer. So, we will try the union between two + // ArrayContainers. + for k := 4 * 65535; k < 4*65535+1000; k++ { + rr.AddInt(k) + if k >= (4*65535 + 800) { + V1[k] = true + } + } + + for k := 4 * 65535; k < 4*65535+800; k++ { + rr2.AddInt(k) + } + + for k := 6 * 65535; k < 6*65535+1000; k++ { + rr.AddInt(k) + V1[k] = true + } + + for k := 7 * 65535; k < 7*65535+2000; k++ { + rr2.AddInt(k) + V1[k] = true + } + + rrxor := Xor(rr, rr2) + valide := true + + for _, i := range rrxor.ToArray() { + _, found := V1[int(i)] + if !found { + valide = false + } + V2[int(i)] = true + } + for k := range V1 { + _, found := V2[k] + if !found { + valide = false + } + } + + So(valide, ShouldEqual, true) + }) +} +func TestXORtest4(t *testing.T) { + Convey("XORtest 4", t, func() { + rb := NewBitmap() + rb2 := NewBitmap() + counter := 0 + + for i := 0; i < 200000; i += 4 { + rb2.AddInt(i) + counter++ + } + So(rb2.GetCardinality(), ShouldEqual, counter) + for i := 200000; i < 400000; i += 14 { + rb2.AddInt(i) + counter++ + } + So(rb2.GetCardinality(), ShouldEqual, counter) + rb2card := rb2.GetCardinality() + So(rb2card, ShouldEqual, counter) + + // check or against an empty bitmap + xorresult := Xor(rb, rb2) + So(xorresult.GetCardinality(), ShouldEqual, counter) + off := Or(rb2, rb) + So(off.GetCardinality(), ShouldEqual, counter) + So(xorresult.Equals(off), ShouldEqual, true) + + So(rb2card, ShouldEqual, xorresult.GetCardinality()) + for i := 500000; i < 600000; i += 14 { + rb.AddInt(i) + } + for i := 200000; i < 400000; i += 3 { + rb2.AddInt(i) + } + // check or against an empty bitmap + xorresult2 := Xor(rb, rb2) + So(rb2card, ShouldEqual, xorresult.GetCardinality()) + + So(rb2.GetCardinality()+rb.GetCardinality(), ShouldEqual, xorresult2.GetCardinality()) + + rb.Xor(rb2) + So(xorresult2.Equals(rb), ShouldEqual, true) + + }) + //need to add the massives +} + +func TestBigRandom(t *testing.T) { + Convey("randomTest", t, func() { + rTest(15) + rTest(100) + rTest(512) + rTest(1023) + rTest(1025) + rTest(4095) + rTest(4096) + rTest(4097) + rTest(65536) + rTest(65536 * 16) + }) +} + +func rTest(N int) { + log.Println("rtest N=", N) + for gap := 1; gap <= 65536; gap *= 2 { + bs1 := bitset.New(0) + rb1 := NewBitmap() + for x := 0; x <= N; x += gap { + bs1.Set(uint(x)) + rb1.AddInt(x) + } + So(bs1.Count(), ShouldEqual, rb1.GetCardinality()) + So(equalsBitSet(bs1, rb1), ShouldEqual, true) + for offset := 1; offset <= gap; offset *= 2 { + bs2 := bitset.New(0) + rb2 := NewBitmap() + for x := 0; x <= N; x += gap { + bs2.Set(uint(x + offset)) + rb2.AddInt(x + offset) + } + So(bs2.Count(), ShouldEqual, rb2.GetCardinality()) + So(equalsBitSet(bs2, rb2), ShouldEqual, true) + + clonebs1 := bs1.Clone() + clonebs1.InPlaceIntersection(bs2) + if !equalsBitSet(clonebs1, And(rb1, rb2)) { + t := rb1.Clone() + t.And(rb2) + So(equalsBitSet(clonebs1, t), ShouldEqual, true) + } + + // testing OR + clonebs1 = bs1.Clone() + clonebs1.InPlaceUnion(bs2) + + So(equalsBitSet(clonebs1, Or(rb1, rb2)), ShouldEqual, true) + // testing XOR + clonebs1 = bs1.Clone() + clonebs1.InPlaceSymmetricDifference(bs2) + So(equalsBitSet(clonebs1, Xor(rb1, rb2)), ShouldEqual, true) + + //testing NOTAND + clonebs1 = bs1.Clone() + clonebs1.InPlaceDifference(bs2) + So(equalsBitSet(clonebs1, AndNot(rb1, rb2)), ShouldEqual, true) + } + } +} + +func equalsBitSet(a *bitset.BitSet, b *Bitmap) bool { + for i, e := a.NextSet(0); e; i, e = a.NextSet(i + 1) { + if !b.ContainsInt(int(i)) { + return false + } + } + i := b.Iterator() + for i.HasNext() { + if !a.Test(uint(i.Next())) { + return false + } + } + return true +} + +func equalsArray(a []int, b *Bitmap) bool { + if uint64(len(a)) != b.GetCardinality() { + return false + } + for _, x := range a { + if !b.ContainsInt(x) { + return false + } + } + return true +} + +func IntsEquals(a, b []uint32) bool { + if len(a) != len(b) { + return false + } + for i, v := range a { + if v != b[i] { + return false + } + } + return true +} + +func validate(bc *bitmapContainer, ac *arrayContainer) bool { + // Checking the cardinalities of each container + + if bc.getCardinality() != ac.getCardinality() { + log.Println("cardinality differs") + return false + } + // Checking that the two containers contain the same values + counter := 0 + + for i := bc.NextSetBit(0); i >= 0; i = bc.NextSetBit(i + 1) { + counter++ + if !ac.contains(uint16(i)) { + log.Println("content differs") + log.Println(bc) + log.Println(ac) + return false + } + + } + + // checking the cardinality of the BitmapContainer + return counter == bc.getCardinality() +} + +func TestRoaringArray(t *testing.T) { + + a := newRoaringArray() + Convey("Test Init", t, func() { + So(a.size(), ShouldEqual, 0) + }) + + Convey("Test Insert", t, func() { + a.appendContainer(0, newArrayContainer(), false) + + So(a.size(), ShouldEqual, 1) + }) + + Convey("Test Remove", t, func() { + a.remove(0) + So(a.size(), ShouldEqual, 0) + }) + + Convey("Test popcount Full", t, func() { + res := popcount(uint64(0xffffffffffffffff)) + So(res, ShouldEqual, 64) + }) + + Convey("Test popcount Empty", t, func() { + res := popcount(0) + So(res, ShouldEqual, 0) + }) + + Convey("Test popcount 16", t, func() { + res := popcount(0xff00ff) + So(res, ShouldEqual, 16) + }) + + Convey("Test ArrayContainer Add", t, func() { + ar := newArrayContainer() + ar.iadd(1) + So(ar.getCardinality(), ShouldEqual, 1) + }) + + Convey("Test ArrayContainer Add wacky", t, func() { + ar := newArrayContainer() + ar.iadd(0) + ar.iadd(5000) + So(ar.getCardinality(), ShouldEqual, 2) + }) + + Convey("Test ArrayContainer Add Reverse", t, func() { + ar := newArrayContainer() + ar.iadd(5000) + ar.iadd(2048) + ar.iadd(0) + So(ar.getCardinality(), ShouldEqual, 3) + }) + + Convey("Test BitmapContainer Add ", t, func() { + bm := newBitmapContainer() + bm.iadd(0) + So(bm.getCardinality(), ShouldEqual, 1) + }) + +} + +func TestFlipBigA(t *testing.T) { + Convey("flipTestBigA ", t, func() { + numCases := 1000 + bs := bitset.New(0) + checkTime := 2.0 + rb1 := NewBitmap() + rb2 := NewBitmap() + + for i := 0; i < numCases; i++ { + start := rand.Intn(65536 * 20) + end := rand.Intn(65536 * 20) + if rand.Float64() < 0.1 { + end = start + rand.Intn(100) + } + + if (i & 1) == 0 { + rb2 = FlipInt(rb1, start, end) + // tweak the other, catch bad sharing + rb1.FlipInt(rand.Intn(65536*20), rand.Intn(65536*20)) + } else { + rb1 = FlipInt(rb2, start, end) + rb2.FlipInt(rand.Intn(65536*20), rand.Intn(65536*20)) + } + + if start < end { + FlipRange(start, end, bs) // throws exception + } + // otherwise + // insert some more ANDs to keep things sparser + if (rand.Float64() < 0.2) && (i&1) == 0 { + mask := NewBitmap() + mask1 := bitset.New(0) + startM := rand.Intn(65536 * 20) + endM := startM + 100000 + mask.FlipInt(startM, endM) + FlipRange(startM, endM, mask1) + mask.FlipInt(0, 65536*20+100000) + FlipRange(0, 65536*20+100000, mask1) + rb2.And(mask) + bs.InPlaceIntersection(mask1) + } + + if float64(i) > checkTime { + var rb *Bitmap + + if (i & 1) == 0 { + rb = rb2 + } else { + rb = rb1 + } + So(equalsBitSet(bs, rb), ShouldEqual, true) + checkTime *= 1.5 + } + } + }) +} + +func TestDoubleAdd(t *testing.T) { + Convey("doubleadd ", t, func() { + rb := NewBitmap() + rb.AddRange(65533, 65536) + rb.AddRange(65530, 65536) + rb2 := NewBitmap() + rb2.AddRange(65530, 65536) + So(rb.Equals(rb2), ShouldEqual, true) + rb2.RemoveRange(65530, 65536) + So(rb2.GetCardinality(), ShouldEqual, 0) + }) +} + +func TestDoubleAdd2(t *testing.T) { + Convey("doubleadd2 ", t, func() { + rb := NewBitmap() + rb.AddRange(65533, 65536*20) + rb.AddRange(65530, 65536*20) + rb2 := NewBitmap() + rb2.AddRange(65530, 65536*20) + So(rb.Equals(rb2), ShouldEqual, true) + rb2.RemoveRange(65530, 65536*20) + So(rb2.GetCardinality(), ShouldEqual, 0) + }) +} + +func TestDoubleAdd3(t *testing.T) { + Convey("doubleadd3 ", t, func() { + rb := NewBitmap() + rb.AddRange(65533, 65536*20+10) + rb.AddRange(65530, 65536*20+10) + rb2 := NewBitmap() + rb2.AddRange(65530, 65536*20+10) + So(rb.Equals(rb2), ShouldEqual, true) + rb2.RemoveRange(65530, 65536*20+1) + So(rb2.GetCardinality(), ShouldEqual, 9) + }) +} + +func TestDoubleAdd4(t *testing.T) { + Convey("doubleadd4 ", t, func() { + rb := NewBitmap() + rb.AddRange(65533, 65536*20) + rb.RemoveRange(65533+5, 65536*20) + So(rb.GetCardinality(), ShouldEqual, 5) + }) +} + +func TestDoubleAdd5(t *testing.T) { + Convey("doubleadd5 ", t, func() { + rb := NewBitmap() + rb.AddRange(65533, 65536*20) + rb.RemoveRange(65533+5, 65536*20-5) + So(rb.GetCardinality(), ShouldEqual, 10) + }) +} + +func TestDoubleAdd6(t *testing.T) { + Convey("doubleadd6 ", t, func() { + rb := NewBitmap() + rb.AddRange(65533, 65536*20-5) + rb.RemoveRange(65533+5, 65536*20-10) + So(rb.GetCardinality(), ShouldEqual, 10) + }) +} + +func TestDoubleAdd7(t *testing.T) { + Convey("doubleadd7 ", t, func() { + rb := NewBitmap() + rb.AddRange(65533, 65536*20+1) + rb.RemoveRange(65533+1, 65536*20) + So(rb.GetCardinality(), ShouldEqual, 2) + }) +} + +func TestDoubleAndNotBug01(t *testing.T) { + Convey("AndNotBug01 ", t, func() { + rb1 := NewBitmap() + rb1.AddRange(0, 60000) + rb2 := NewBitmap() + rb2.AddRange(60000-10, 60000+10) + rb2.AndNot(rb1) + rb3 := NewBitmap() + rb3.AddRange(60000, 60000+10) + + So(rb2.Equals(rb3), ShouldBeTrue) + }) +} + +func TestAndNot(t *testing.T) { + + Convey("Test ANDNOT", t, func() { + rr := NewBitmap() + for k := 4000; k < 4256; k++ { + rr.AddInt(k) + } + for k := 65536; k < 65536+4000; k++ { + rr.AddInt(k) + } + for k := 3 * 65536; k < 3*65536+9000; k++ { + rr.AddInt(k) + } + for k := 4 * 65535; k < 4*65535+7000; k++ { + rr.AddInt(k) + } + for k := 6 * 65535; k < 6*65535+10000; k++ { + rr.AddInt(k) + } + for k := 8 * 65535; k < 8*65535+1000; k++ { + rr.AddInt(k) + } + for k := 9 * 65535; k < 9*65535+30000; k++ { + rr.AddInt(k) + } + + rr2 := NewBitmap() + for k := 4000; k < 4256; k++ { + rr2.AddInt(k) + } + for k := 65536; k < 65536+4000; k++ { + rr2.AddInt(k) + } + for k := 3*65536 + 2000; k < 3*65536+6000; k++ { + rr2.AddInt(k) + } + for k := 6 * 65535; k < 6*65535+1000; k++ { + rr2.AddInt(k) + } + for k := 7 * 65535; k < 7*65535+1000; k++ { + rr2.AddInt(k) + } + for k := 10 * 65535; k < 10*65535+5000; k++ { + rr2.AddInt(k) + } + correct := AndNot(rr, rr2) + rr.AndNot(rr2) + + So(correct.Equals(rr), ShouldEqual, true) + }) +} + +func TestStats(t *testing.T) { + Convey("Test Stats with empty bitmap", t, func() { + expectedStats := Statistics{} + rr := NewBitmap() + So(rr.Stats(), ShouldResemble, expectedStats) + }) + Convey("Test Stats with bitmap Container", t, func() { + // Given a bitmap that should have a single bitmap container + expectedStats := Statistics{ + Cardinality: 60000, + Containers: 1, + + BitmapContainers: 1, + BitmapContainerValues: 60000, + BitmapContainerBytes: 8192, + + RunContainers: 0, + RunContainerBytes: 0, + RunContainerValues: 0, + } + rr := NewBitmap() + for i := uint32(0); i < 60000; i++ { + rr.Add(i) + } + So(rr.Stats(), ShouldResemble, expectedStats) + }) + + Convey("Test Stats with run Container", t, func() { + // Given that we should have a single run container + expectedStats := Statistics{ + Cardinality: 60000, + Containers: 1, + + BitmapContainers: 0, + BitmapContainerValues: 0, + BitmapContainerBytes: 0, + + RunContainers: 1, + RunContainerBytes: 52, + RunContainerValues: 60000, + } + rr := NewBitmap() + rr.AddRange(0, 60000) + So(rr.Stats(), ShouldResemble, expectedStats) + }) + Convey("Test Stats with Array Container", t, func() { + // Given a bitmap that should have a single array container + expectedStats := Statistics{ + Cardinality: 2, + Containers: 1, + + ArrayContainers: 1, + ArrayContainerValues: 2, + ArrayContainerBytes: 4, + } + rr := NewBitmap() + rr.Add(2) + rr.Add(4) + So(rr.Stats(), ShouldResemble, expectedStats) + }) +} + +func TestFlipVerySmall(t *testing.T) { + Convey("very small basic Flip test", t, func() { + rb := NewBitmap() + rb.Flip(0, 10) // got [0,9], card is 10 + rb.Flip(0, 1) // give back the number 0, card goes to 9 + rbcard := rb.GetCardinality() + So(rbcard, ShouldEqual, 9) + }) +} diff --git a/vendor/github.com/RoaringBitmap/roaring/roaringarray.go b/vendor/github.com/RoaringBitmap/roaring/roaringarray.go new file mode 100644 index 0000000..2eb3173 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/roaringarray.go @@ -0,0 +1,849 @@ +package roaring + +import ( + "bytes" + "encoding/binary" + "fmt" + "io" + "io/ioutil" + + snappy "github.com/glycerine/go-unsnap-stream" + "github.com/tinylib/msgp/msgp" +) + +//go:generate msgp -unexported + +type container interface { + clone() container + and(container) container + andCardinality(container) int + iand(container) container // i stands for inplace + andNot(container) container + iandNot(container) container // i stands for inplace + getCardinality() int + // rank returns the number of integers that are + // smaller or equal to x. rank(infinity) would be getCardinality(). + rank(uint16) int + + iadd(x uint16) bool // inplace, returns true if x was new. + iaddReturnMinimized(uint16) container // may change return type to minimize storage. + + //addRange(start, final int) container // range is [firstOfRange,lastOfRange) (unused) + iaddRange(start, endx int) container // i stands for inplace, range is [firstOfRange,endx) + + iremove(x uint16) bool // inplace, returns true if x was present. + iremoveReturnMinimized(uint16) container // may change return type to minimize storage. + + not(start, final int) container // range is [firstOfRange,lastOfRange) + inot(firstOfRange, endx int) container // i stands for inplace, range is [firstOfRange,endx) + xor(r container) container + getShortIterator() shortIterable + contains(i uint16) bool + maximum() uint16 + minimum() uint16 + + // equals is now logical equals; it does not require the + // same underlying container types, but compares across + // any of the implementations. + equals(r container) bool + + fillLeastSignificant16bits(array []uint32, i int, mask uint32) + or(r container) container + orCardinality(r container) int + isFull() bool + ior(r container) container // i stands for inplace + intersects(r container) bool // whether the two containers intersect + lazyOR(r container) container + lazyIOR(r container) container + getSizeInBytes() int + //removeRange(start, final int) container // range is [firstOfRange,lastOfRange) (unused) + iremoveRange(start, final int) container // i stands for inplace, range is [firstOfRange,lastOfRange) + selectInt(x uint16) int // selectInt returns the xth integer in the container + serializedSizeInBytes() int + readFrom(io.Reader) (int, error) + writeTo(io.Writer) (int, error) + + numberOfRuns() int + toEfficientContainer() container + String() string + containerType() contype +} + +type contype uint8 + +const ( + bitmapContype contype = iota + arrayContype + run16Contype + run32Contype +) + +// careful: range is [firstOfRange,lastOfRange] +func rangeOfOnes(start, last int) container { + if start > MaxUint16 { + panic("rangeOfOnes called with start > MaxUint16") + } + if last > MaxUint16 { + panic("rangeOfOnes called with last > MaxUint16") + } + if start < 0 { + panic("rangeOfOnes called with start < 0") + } + if last < 0 { + panic("rangeOfOnes called with last < 0") + } + return newRunContainer16Range(uint16(start), uint16(last)) +} + +type roaringArray struct { + keys []uint16 + containers []container `msg:"-"` // don't try to serialize directly. + needCopyOnWrite []bool + copyOnWrite bool + + // conserz is used at serialization time + // to serialize containers. Otherwise empty. + conserz []containerSerz +} + +// containerSerz facilitates serializing container (tricky to +// serialize because it is an interface) by providing a +// light wrapper with a type identifier. +type containerSerz struct { + t contype `msg:"t"` // type + r msgp.Raw `msg:"r"` // Raw msgpack of the actual container type +} + +func newRoaringArray() *roaringArray { + return &roaringArray{} +} + +// runOptimize compresses the element containers to minimize space consumed. +// Q: how does this interact with copyOnWrite and needCopyOnWrite? +// A: since we aren't changing the logical content, just the representation, +// we don't bother to check the needCopyOnWrite bits. We replace +// (possibly all) elements of ra.containers in-place with space +// optimized versions. +func (ra *roaringArray) runOptimize() { + for i := range ra.containers { + ra.containers[i] = ra.containers[i].toEfficientContainer() + } +} + +func (ra *roaringArray) appendContainer(key uint16, value container, mustCopyOnWrite bool) { + ra.keys = append(ra.keys, key) + ra.containers = append(ra.containers, value) + ra.needCopyOnWrite = append(ra.needCopyOnWrite, mustCopyOnWrite) +} + +func (ra *roaringArray) appendWithoutCopy(sa roaringArray, startingindex int) { + mustCopyOnWrite := sa.needCopyOnWrite[startingindex] + ra.appendContainer(sa.keys[startingindex], sa.containers[startingindex], mustCopyOnWrite) +} + +func (ra *roaringArray) appendCopy(sa roaringArray, startingindex int) { + // cow only if the two request it, or if we already have a lightweight copy + copyonwrite := (ra.copyOnWrite && sa.copyOnWrite) || sa.needsCopyOnWrite(startingindex) + if !copyonwrite { + // since there is no copy-on-write, we need to clone the container (this is important) + ra.appendContainer(sa.keys[startingindex], sa.containers[startingindex].clone(), copyonwrite) + } else { + ra.appendContainer(sa.keys[startingindex], sa.containers[startingindex], copyonwrite) + if !sa.needsCopyOnWrite(startingindex) { + sa.setNeedsCopyOnWrite(startingindex) + } + } +} + +func (ra *roaringArray) appendWithoutCopyMany(sa roaringArray, startingindex, end int) { + for i := startingindex; i < end; i++ { + ra.appendWithoutCopy(sa, i) + } +} + +func (ra *roaringArray) appendCopyMany(sa roaringArray, startingindex, end int) { + for i := startingindex; i < end; i++ { + ra.appendCopy(sa, i) + } +} + +func (ra *roaringArray) appendCopiesUntil(sa roaringArray, stoppingKey uint16) { + // cow only if the two request it, or if we already have a lightweight copy + copyonwrite := ra.copyOnWrite && sa.copyOnWrite + + for i := 0; i < sa.size(); i++ { + if sa.keys[i] >= stoppingKey { + break + } + thiscopyonewrite := copyonwrite || sa.needsCopyOnWrite(i) + if thiscopyonewrite { + ra.appendContainer(sa.keys[i], sa.containers[i], thiscopyonewrite) + if !sa.needsCopyOnWrite(i) { + sa.setNeedsCopyOnWrite(i) + } + + } else { + // since there is no copy-on-write, we need to clone the container (this is important) + ra.appendContainer(sa.keys[i], sa.containers[i].clone(), thiscopyonewrite) + + } + } +} + +func (ra *roaringArray) appendCopiesAfter(sa roaringArray, beforeStart uint16) { + // cow only if the two request it, or if we already have a lightweight copy + copyonwrite := ra.copyOnWrite && sa.copyOnWrite + + startLocation := sa.getIndex(beforeStart) + if startLocation >= 0 { + startLocation++ + } else { + startLocation = -startLocation - 1 + } + + for i := startLocation; i < sa.size(); i++ { + thiscopyonewrite := copyonwrite || sa.needsCopyOnWrite(i) + if thiscopyonewrite { + ra.appendContainer(sa.keys[i], sa.containers[i], thiscopyonewrite) + if !sa.needsCopyOnWrite(i) { + sa.setNeedsCopyOnWrite(i) + } + } else { + // since there is no copy-on-write, we need to clone the container (this is important) + ra.appendContainer(sa.keys[i], sa.containers[i].clone(), thiscopyonewrite) + + } + } +} + +func (ra *roaringArray) removeIndexRange(begin, end int) { + if end <= begin { + return + } + + r := end - begin + + copy(ra.keys[begin:], ra.keys[end:]) + copy(ra.containers[begin:], ra.containers[end:]) + copy(ra.needCopyOnWrite[begin:], ra.needCopyOnWrite[end:]) + + ra.resize(len(ra.keys) - r) +} + +func (ra *roaringArray) resize(newsize int) { + for k := newsize; k < len(ra.containers); k++ { + ra.containers[k] = nil + } + + ra.keys = ra.keys[:newsize] + ra.containers = ra.containers[:newsize] + ra.needCopyOnWrite = ra.needCopyOnWrite[:newsize] +} + +func (ra *roaringArray) clear() { + *ra = roaringArray{} +} + +func (ra *roaringArray) clone() *roaringArray { + + sa := roaringArray{} + sa.copyOnWrite = ra.copyOnWrite + + // this is where copyOnWrite is used. + if ra.copyOnWrite { + sa.keys = make([]uint16, len(ra.keys)) + copy(sa.keys, ra.keys) + sa.containers = make([]container, len(ra.containers)) + copy(sa.containers, ra.containers) + sa.needCopyOnWrite = make([]bool, len(ra.needCopyOnWrite)) + + ra.markAllAsNeedingCopyOnWrite() + sa.markAllAsNeedingCopyOnWrite() + + // sa.needCopyOnWrite is shared + } else { + // make a full copy + + sa.keys = make([]uint16, len(ra.keys)) + copy(sa.keys, ra.keys) + + sa.containers = make([]container, len(ra.containers)) + for i := range sa.containers { + sa.containers[i] = ra.containers[i].clone() + } + + sa.needCopyOnWrite = make([]bool, len(ra.needCopyOnWrite)) + } + return &sa +} + +// unused function: +//func (ra *roaringArray) containsKey(x uint16) bool { +// return (ra.binarySearch(0, int64(len(ra.keys)), x) >= 0) +//} + +func (ra *roaringArray) getContainer(x uint16) container { + i := ra.binarySearch(0, int64(len(ra.keys)), x) + if i < 0 { + return nil + } + return ra.containers[i] +} + +func (ra *roaringArray) getContainerAtIndex(i int) container { + return ra.containers[i] +} + +func (ra *roaringArray) getWritableContainerAtIndex(i int) container { + if ra.needCopyOnWrite[i] { + ra.containers[i] = ra.containers[i].clone() + ra.needCopyOnWrite[i] = false + } + return ra.containers[i] +} + +func (ra *roaringArray) getIndex(x uint16) int { + // before the binary search, we optimize for frequent cases + size := len(ra.keys) + if (size == 0) || (ra.keys[size-1] == x) { + return size - 1 + } + return ra.binarySearch(0, int64(size), x) +} + +func (ra *roaringArray) getKeyAtIndex(i int) uint16 { + return ra.keys[i] +} + +func (ra *roaringArray) insertNewKeyValueAt(i int, key uint16, value container) { + ra.keys = append(ra.keys, 0) + ra.containers = append(ra.containers, nil) + + copy(ra.keys[i+1:], ra.keys[i:]) + copy(ra.containers[i+1:], ra.containers[i:]) + + ra.keys[i] = key + ra.containers[i] = value + + ra.needCopyOnWrite = append(ra.needCopyOnWrite, false) + copy(ra.needCopyOnWrite[i+1:], ra.needCopyOnWrite[i:]) + ra.needCopyOnWrite[i] = false +} + +func (ra *roaringArray) remove(key uint16) bool { + i := ra.binarySearch(0, int64(len(ra.keys)), key) + if i >= 0 { // if a new key + ra.removeAtIndex(i) + return true + } + return false +} + +func (ra *roaringArray) removeAtIndex(i int) { + copy(ra.keys[i:], ra.keys[i+1:]) + copy(ra.containers[i:], ra.containers[i+1:]) + + copy(ra.needCopyOnWrite[i:], ra.needCopyOnWrite[i+1:]) + + ra.resize(len(ra.keys) - 1) +} + +func (ra *roaringArray) setContainerAtIndex(i int, c container) { + ra.containers[i] = c +} + +func (ra *roaringArray) replaceKeyAndContainerAtIndex(i int, key uint16, c container, mustCopyOnWrite bool) { + ra.keys[i] = key + ra.containers[i] = c + ra.needCopyOnWrite[i] = mustCopyOnWrite +} + +func (ra *roaringArray) size() int { + return len(ra.keys) +} + +func (ra *roaringArray) binarySearch(begin, end int64, ikey uint16) int { + low := begin + high := end - 1 + for low+16 <= high { + middleIndex := low + (high-low)/2 // avoid overflow + middleValue := ra.keys[middleIndex] + + if middleValue < ikey { + low = middleIndex + 1 + } else if middleValue > ikey { + high = middleIndex - 1 + } else { + return int(middleIndex) + } + } + for ; low <= high; low++ { + val := ra.keys[low] + if val >= ikey { + if val == ikey { + return int(low) + } + break + } + } + return -int(low + 1) +} + +func (ra *roaringArray) equals(o interface{}) bool { + srb, ok := o.(roaringArray) + if ok { + + if srb.size() != ra.size() { + return false + } + for i, k := range ra.keys { + if k != srb.keys[i] { + return false + } + } + + for i, c := range ra.containers { + if !c.equals(srb.containers[i]) { + return false + } + } + return true + } + return false +} + +func (ra *roaringArray) headerSize() uint64 { + size := uint64(len(ra.keys)) + if ra.hasRunCompression() { + if size < noOffsetThreshold { // for small bitmaps, we omit the offsets + return 4 + (size+7)/8 + 4*size + } + return 4 + (size+7)/8 + 8*size // - 4 because we pack the size with the cookie + } + return 4 + 4 + 8*size + +} + +// should be dirt cheap +func (ra *roaringArray) serializedSizeInBytes() uint64 { + answer := ra.headerSize() + for _, c := range ra.containers { + answer += uint64(c.serializedSizeInBytes()) + } + return answer +} + +// +// spec: https://github.com/RoaringBitmap/RoaringFormatSpec +// +func (ra *roaringArray) toBytes() ([]byte, error) { + stream := &bytes.Buffer{} + hasRun := ra.hasRunCompression() + isRunSizeInBytes := 0 + cookieSize := 8 + if hasRun { + cookieSize = 4 + isRunSizeInBytes = (len(ra.keys) + 7) / 8 + } + descriptiveHeaderSize := 4 * len(ra.keys) + preambleSize := cookieSize + isRunSizeInBytes + descriptiveHeaderSize + + buf := make([]byte, preambleSize+4*len(ra.keys)) + + nw := 0 + + if hasRun { + binary.LittleEndian.PutUint16(buf[0:], uint16(serialCookie)) + nw += 2 + binary.LittleEndian.PutUint16(buf[2:], uint16(len(ra.keys)-1)) + nw += 2 + + // compute isRun bitmap + var ir []byte + + isRun := newBitmapContainer() + for i, c := range ra.containers { + switch c.(type) { + case *runContainer16: + isRun.iadd(uint16(i)) + } + } + // convert to little endian + ir = isRun.asLittleEndianByteSlice()[:isRunSizeInBytes] + nw += copy(buf[nw:], ir) + } else { + binary.LittleEndian.PutUint32(buf[0:], uint32(serialCookieNoRunContainer)) + nw += 4 + binary.LittleEndian.PutUint32(buf[4:], uint32(len(ra.keys))) + nw += 4 + } + + // descriptive header + for i, key := range ra.keys { + binary.LittleEndian.PutUint16(buf[nw:], key) + nw += 2 + c := ra.containers[i] + binary.LittleEndian.PutUint16(buf[nw:], uint16(c.getCardinality()-1)) + nw += 2 + } + + startOffset := int64(preambleSize + 4*len(ra.keys)) + if !hasRun || (len(ra.keys) >= noOffsetThreshold) { + // offset header + for _, c := range ra.containers { + binary.LittleEndian.PutUint32(buf[nw:], uint32(startOffset)) + nw += 4 + switch rc := c.(type) { + case *runContainer16: + startOffset += 2 + int64(len(rc.iv))*4 + default: + startOffset += int64(getSizeInBytesFromCardinality(c.getCardinality())) + } + } + } + + _, err := stream.Write(buf[:nw]) + if err != nil { + return nil, err + } + for i, c := range ra.containers { + _ = i + _, err := c.writeTo(stream) + if err != nil { + return nil, err + } + } + return stream.Bytes(), nil +} + +// +// spec: https://github.com/RoaringBitmap/RoaringFormatSpec +// +func (ra *roaringArray) writeTo(out io.Writer) (int64, error) { + by, err := ra.toBytes() + if err != nil { + return 0, err + } + n, err := out.Write(by) + if err == nil && n < len(by) { + err = io.ErrShortWrite + } + return int64(n), err +} + +func (ra *roaringArray) fromBuffer(buf []byte) (int64, error) { + pos := 0 + if len(buf) < 8 { + return 0, fmt.Errorf("buffer too small, expecting at least 8 bytes, was %d", len(buf)) + } + + cookie := binary.LittleEndian.Uint32(buf) + pos += 4 + var size uint32 + haveRunContainers := false + var isRun *bitmapContainer + + // cookie header + if cookie&0x0000FFFF == serialCookie { + haveRunContainers = true + size = uint32(uint16(cookie>>16) + 1) // number of containers + + // create is-run-container bitmap + bytesToRead := (int(size) + 7) / 8 + by := buf[pos: pos+bytesToRead] + pos += bytesToRead + isRun = newBitmapContainer() + i := 0 + for ; len(by) >= 8; i++ { + isRun.bitmap[i] = binary.LittleEndian.Uint64(by) + by = by[8:] + } + if len(by) > 0 { + bx := make([]byte, 8) + copy(bx, by) + isRun.bitmap[i] = binary.LittleEndian.Uint64(bx) + } + } else if cookie == serialCookieNoRunContainer { + size = binary.LittleEndian.Uint32(buf[pos:]) + pos += 4 + } else { + return 0, fmt.Errorf("error in roaringArray.readFrom: did not find expected serialCookie in header") + } + + // descriptive header + // keycard - is {key, cardinality} tuple slice + keycard := byteSliceAsUint16Slice(buf[pos: pos+2*2*int(size)]) + pos += 2 * 2 * int(size) + + if !haveRunContainers || size >= noOffsetThreshold { + pos += 4 * int(size) + } + + for i := uint32(0); i < size; i++ { + key := uint16(keycard[2*i]) + card := int(keycard[2*i+1]) + 1 + if haveRunContainers && isRun.contains(uint16(i)) { + // run container + nr := binary.LittleEndian.Uint16(buf[pos:]) + pos += 2 + nb := runContainer16{ + iv: byteSliceAsInterval16Slice(buf[pos: pos+int(nr)*4]), + card: int64(card), + } + pos += int(nr) * 4 + ra.appendContainer(key, &nb, true) + } else if card > arrayDefaultMaxSize { + // bitmap container + nb := bitmapContainer{ + cardinality: card, + bitmap: byteSliceAsUint64Slice(buf[pos:pos+arrayDefaultMaxSize*2]), + } + pos += arrayDefaultMaxSize * 2 + ra.appendContainer(key, &nb, true) + } else { + // array container + nb := arrayContainer{ + byteSliceAsUint16Slice(buf[pos:pos+card*2]), + } + pos += card * 2 + ra.appendContainer(key, &nb, true) + } + } + + return int64(pos), nil +} + +func (ra *roaringArray) readFrom(stream io.Reader) (int64, error) { + pos := 0 + var cookie uint32 + err := binary.Read(stream, binary.LittleEndian, &cookie) + if err != nil { + return 0, fmt.Errorf("error in roaringArray.readFrom: could not read initial cookie: %s", err) + } + pos += 4 + var size uint32 + haveRunContainers := false + var isRun *bitmapContainer + if cookie&0x0000FFFF == serialCookie { + haveRunContainers = true + size = uint32(uint16(cookie>>16) + 1) + bytesToRead := (int(size) + 7) / 8 + numwords := (bytesToRead + 7) / 8 + by := make([]byte, bytesToRead, numwords*8) + nr, err := io.ReadFull(stream, by) + if err != nil { + return 8 + int64(nr), fmt.Errorf("error in readFrom: could not read the "+ + "runContainer bit flags of length %v bytes: %v", bytesToRead, err) + } + pos += bytesToRead + by = by[:cap(by)] + isRun = newBitmapContainer() + for i := 0; i < numwords; i++ { + isRun.bitmap[i] = binary.LittleEndian.Uint64(by) + by = by[8:] + } + } else if cookie == serialCookieNoRunContainer { + err = binary.Read(stream, binary.LittleEndian, &size) + if err != nil { + return 0, fmt.Errorf("error in roaringArray.readFrom: when reading size, got: %s", err) + } + pos += 4 + } else { + return 0, fmt.Errorf("error in roaringArray.readFrom: did not find expected serialCookie in header") + } + // descriptive header + keycard := make([]uint16, 2*size, 2*size) + err = binary.Read(stream, binary.LittleEndian, keycard) + if err != nil { + return 0, err + } + pos += 2 * 2 * int(size) + // offset header + if !haveRunContainers || size >= noOffsetThreshold { + io.CopyN(ioutil.Discard, stream, 4*int64(size)) // we never skip ahead so this data can be ignored + pos += 4 * int(size) + } + for i := uint32(0); i < size; i++ { + key := int(keycard[2*i]) + card := int(keycard[2*i+1]) + 1 + if haveRunContainers && isRun.contains(uint16(i)) { + nb := newRunContainer16() + nr, err := nb.readFrom(stream) + if err != nil { + return 0, err + } + pos += nr + ra.appendContainer(uint16(key), nb, false) + } else if card > arrayDefaultMaxSize { + nb := newBitmapContainer() + nr, err := nb.readFrom(stream) + if err != nil { + return 0, err + } + nb.cardinality = card + pos += nr + ra.appendContainer(keycard[2*i], nb, false) + } else { + nb := newArrayContainerSize(card) + nr, err := nb.readFrom(stream) + if err != nil { + return 0, err + } + pos += nr + ra.appendContainer(keycard[2*i], nb, false) + } + } + return int64(pos), nil +} + +func (ra *roaringArray) hasRunCompression() bool { + for _, c := range ra.containers { + switch c.(type) { + case *runContainer16: + return true + } + } + return false +} + +func (ra *roaringArray) writeToMsgpack(stream io.Writer) error { + + ra.conserz = make([]containerSerz, len(ra.containers)) + for i, v := range ra.containers { + switch cn := v.(type) { + case *bitmapContainer: + bts, err := cn.MarshalMsg(nil) + if err != nil { + return err + } + ra.conserz[i].t = bitmapContype + ra.conserz[i].r = bts + case *arrayContainer: + bts, err := cn.MarshalMsg(nil) + if err != nil { + return err + } + ra.conserz[i].t = arrayContype + ra.conserz[i].r = bts + case *runContainer16: + bts, err := cn.MarshalMsg(nil) + if err != nil { + return err + } + ra.conserz[i].t = run16Contype + ra.conserz[i].r = bts + default: + panic(fmt.Errorf("Unrecognized container implementation: %T", cn)) + } + } + w := snappy.NewWriter(stream) + err := msgp.Encode(w, ra) + ra.conserz = nil + return err +} + +func (ra *roaringArray) readFromMsgpack(stream io.Reader) error { + r := snappy.NewReader(stream) + err := msgp.Decode(r, ra) + if err != nil { + return err + } + + if len(ra.containers) != len(ra.keys) { + ra.containers = make([]container, len(ra.keys)) + } + + for i, v := range ra.conserz { + switch v.t { + case bitmapContype: + c := &bitmapContainer{} + _, err = c.UnmarshalMsg(v.r) + if err != nil { + return err + } + ra.containers[i] = c + case arrayContype: + c := &arrayContainer{} + _, err = c.UnmarshalMsg(v.r) + if err != nil { + return err + } + ra.containers[i] = c + case run16Contype: + c := &runContainer16{} + _, err = c.UnmarshalMsg(v.r) + if err != nil { + return err + } + ra.containers[i] = c + default: + return fmt.Errorf("unrecognized contype serialization code: '%v'", v.t) + } + } + ra.conserz = nil + return nil +} + +func (ra *roaringArray) advanceUntil(min uint16, pos int) int { + lower := pos + 1 + + if lower >= len(ra.keys) || ra.keys[lower] >= min { + return lower + } + + spansize := 1 + + for lower+spansize < len(ra.keys) && ra.keys[lower+spansize] < min { + spansize *= 2 + } + var upper int + if lower+spansize < len(ra.keys) { + upper = lower + spansize + } else { + upper = len(ra.keys) - 1 + } + + if ra.keys[upper] == min { + return upper + } + + if ra.keys[upper] < min { + // means + // array + // has no + // item + // >= min + // pos = array.length; + return len(ra.keys) + } + + // we know that the next-smallest span was too small + lower += (spansize >> 1) + + mid := 0 + for lower+1 != upper { + mid = (lower + upper) >> 1 + if ra.keys[mid] == min { + return mid + } else if ra.keys[mid] < min { + lower = mid + } else { + upper = mid + } + } + return upper +} + +func (ra *roaringArray) markAllAsNeedingCopyOnWrite() { + for i := range ra.needCopyOnWrite { + ra.needCopyOnWrite[i] = true + } +} + +func (ra *roaringArray) needsCopyOnWrite(i int) bool { + return ra.needCopyOnWrite[i] +} + +func (ra *roaringArray) setNeedsCopyOnWrite(i int) { + ra.needCopyOnWrite[i] = true +} diff --git a/vendor/github.com/RoaringBitmap/roaring/roaringarray_gen.go b/vendor/github.com/RoaringBitmap/roaring/roaringarray_gen.go new file mode 100644 index 0000000..99fb0f6 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/roaringarray_gen.go @@ -0,0 +1,529 @@ +package roaring + +// NOTE: THIS FILE WAS PRODUCED BY THE +// MSGP CODE GENERATION TOOL (github.com/tinylib/msgp) +// DO NOT EDIT + +import ( + "github.com/tinylib/msgp/msgp" +) + +// DecodeMsg implements msgp.Decodable +func (z *containerSerz) DecodeMsg(dc *msgp.Reader) (err error) { + var field []byte + _ = field + var zxvk uint32 + zxvk, err = dc.ReadMapHeader() + if err != nil { + return + } + for zxvk > 0 { + zxvk-- + field, err = dc.ReadMapKeyPtr() + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "t": + { + var zbzg uint8 + zbzg, err = dc.ReadUint8() + z.t = contype(zbzg) + } + if err != nil { + return + } + case "r": + err = z.r.DecodeMsg(dc) + if err != nil { + return + } + default: + err = dc.Skip() + if err != nil { + return + } + } + } + return +} + +// EncodeMsg implements msgp.Encodable +func (z *containerSerz) EncodeMsg(en *msgp.Writer) (err error) { + // map header, size 2 + // write "t" + err = en.Append(0x82, 0xa1, 0x74) + if err != nil { + return err + } + err = en.WriteUint8(uint8(z.t)) + if err != nil { + return + } + // write "r" + err = en.Append(0xa1, 0x72) + if err != nil { + return err + } + err = z.r.EncodeMsg(en) + if err != nil { + return + } + return +} + +// MarshalMsg implements msgp.Marshaler +func (z *containerSerz) MarshalMsg(b []byte) (o []byte, err error) { + o = msgp.Require(b, z.Msgsize()) + // map header, size 2 + // string "t" + o = append(o, 0x82, 0xa1, 0x74) + o = msgp.AppendUint8(o, uint8(z.t)) + // string "r" + o = append(o, 0xa1, 0x72) + o, err = z.r.MarshalMsg(o) + if err != nil { + return + } + return +} + +// UnmarshalMsg implements msgp.Unmarshaler +func (z *containerSerz) UnmarshalMsg(bts []byte) (o []byte, err error) { + var field []byte + _ = field + var zbai uint32 + zbai, bts, err = msgp.ReadMapHeaderBytes(bts) + if err != nil { + return + } + for zbai > 0 { + zbai-- + field, bts, err = msgp.ReadMapKeyZC(bts) + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "t": + { + var zcmr uint8 + zcmr, bts, err = msgp.ReadUint8Bytes(bts) + z.t = contype(zcmr) + } + if err != nil { + return + } + case "r": + bts, err = z.r.UnmarshalMsg(bts) + if err != nil { + return + } + default: + bts, err = msgp.Skip(bts) + if err != nil { + return + } + } + } + o = bts + return +} + +// Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message +func (z *containerSerz) Msgsize() (s int) { + s = 1 + 2 + msgp.Uint8Size + 2 + z.r.Msgsize() + return +} + +// DecodeMsg implements msgp.Decodable +func (z *contype) DecodeMsg(dc *msgp.Reader) (err error) { + { + var zajw uint8 + zajw, err = dc.ReadUint8() + (*z) = contype(zajw) + } + if err != nil { + return + } + return +} + +// EncodeMsg implements msgp.Encodable +func (z contype) EncodeMsg(en *msgp.Writer) (err error) { + err = en.WriteUint8(uint8(z)) + if err != nil { + return + } + return +} + +// MarshalMsg implements msgp.Marshaler +func (z contype) MarshalMsg(b []byte) (o []byte, err error) { + o = msgp.Require(b, z.Msgsize()) + o = msgp.AppendUint8(o, uint8(z)) + return +} + +// UnmarshalMsg implements msgp.Unmarshaler +func (z *contype) UnmarshalMsg(bts []byte) (o []byte, err error) { + { + var zwht uint8 + zwht, bts, err = msgp.ReadUint8Bytes(bts) + (*z) = contype(zwht) + } + if err != nil { + return + } + o = bts + return +} + +// Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message +func (z contype) Msgsize() (s int) { + s = msgp.Uint8Size + return +} + +// DecodeMsg implements msgp.Decodable +func (z *roaringArray) DecodeMsg(dc *msgp.Reader) (err error) { + var field []byte + _ = field + var zlqf uint32 + zlqf, err = dc.ReadMapHeader() + if err != nil { + return + } + for zlqf > 0 { + zlqf-- + field, err = dc.ReadMapKeyPtr() + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "keys": + var zdaf uint32 + zdaf, err = dc.ReadArrayHeader() + if err != nil { + return + } + if cap(z.keys) >= int(zdaf) { + z.keys = (z.keys)[:zdaf] + } else { + z.keys = make([]uint16, zdaf) + } + for zhct := range z.keys { + z.keys[zhct], err = dc.ReadUint16() + if err != nil { + return + } + } + case "needCopyOnWrite": + var zpks uint32 + zpks, err = dc.ReadArrayHeader() + if err != nil { + return + } + if cap(z.needCopyOnWrite) >= int(zpks) { + z.needCopyOnWrite = (z.needCopyOnWrite)[:zpks] + } else { + z.needCopyOnWrite = make([]bool, zpks) + } + for zcua := range z.needCopyOnWrite { + z.needCopyOnWrite[zcua], err = dc.ReadBool() + if err != nil { + return + } + } + case "copyOnWrite": + z.copyOnWrite, err = dc.ReadBool() + if err != nil { + return + } + case "conserz": + var zjfb uint32 + zjfb, err = dc.ReadArrayHeader() + if err != nil { + return + } + if cap(z.conserz) >= int(zjfb) { + z.conserz = (z.conserz)[:zjfb] + } else { + z.conserz = make([]containerSerz, zjfb) + } + for zxhx := range z.conserz { + var zcxo uint32 + zcxo, err = dc.ReadMapHeader() + if err != nil { + return + } + for zcxo > 0 { + zcxo-- + field, err = dc.ReadMapKeyPtr() + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "t": + { + var zeff uint8 + zeff, err = dc.ReadUint8() + z.conserz[zxhx].t = contype(zeff) + } + if err != nil { + return + } + case "r": + err = z.conserz[zxhx].r.DecodeMsg(dc) + if err != nil { + return + } + default: + err = dc.Skip() + if err != nil { + return + } + } + } + } + default: + err = dc.Skip() + if err != nil { + return + } + } + } + return +} + +// EncodeMsg implements msgp.Encodable +func (z *roaringArray) EncodeMsg(en *msgp.Writer) (err error) { + // map header, size 4 + // write "keys" + err = en.Append(0x84, 0xa4, 0x6b, 0x65, 0x79, 0x73) + if err != nil { + return err + } + err = en.WriteArrayHeader(uint32(len(z.keys))) + if err != nil { + return + } + for zhct := range z.keys { + err = en.WriteUint16(z.keys[zhct]) + if err != nil { + return + } + } + // write "needCopyOnWrite" + err = en.Append(0xaf, 0x6e, 0x65, 0x65, 0x64, 0x43, 0x6f, 0x70, 0x79, 0x4f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65) + if err != nil { + return err + } + err = en.WriteArrayHeader(uint32(len(z.needCopyOnWrite))) + if err != nil { + return + } + for zcua := range z.needCopyOnWrite { + err = en.WriteBool(z.needCopyOnWrite[zcua]) + if err != nil { + return + } + } + // write "copyOnWrite" + err = en.Append(0xab, 0x63, 0x6f, 0x70, 0x79, 0x4f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65) + if err != nil { + return err + } + err = en.WriteBool(z.copyOnWrite) + if err != nil { + return + } + // write "conserz" + err = en.Append(0xa7, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x72, 0x7a) + if err != nil { + return err + } + err = en.WriteArrayHeader(uint32(len(z.conserz))) + if err != nil { + return + } + for zxhx := range z.conserz { + // map header, size 2 + // write "t" + err = en.Append(0x82, 0xa1, 0x74) + if err != nil { + return err + } + err = en.WriteUint8(uint8(z.conserz[zxhx].t)) + if err != nil { + return + } + // write "r" + err = en.Append(0xa1, 0x72) + if err != nil { + return err + } + err = z.conserz[zxhx].r.EncodeMsg(en) + if err != nil { + return + } + } + return +} + +// MarshalMsg implements msgp.Marshaler +func (z *roaringArray) MarshalMsg(b []byte) (o []byte, err error) { + o = msgp.Require(b, z.Msgsize()) + // map header, size 4 + // string "keys" + o = append(o, 0x84, 0xa4, 0x6b, 0x65, 0x79, 0x73) + o = msgp.AppendArrayHeader(o, uint32(len(z.keys))) + for zhct := range z.keys { + o = msgp.AppendUint16(o, z.keys[zhct]) + } + // string "needCopyOnWrite" + o = append(o, 0xaf, 0x6e, 0x65, 0x65, 0x64, 0x43, 0x6f, 0x70, 0x79, 0x4f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65) + o = msgp.AppendArrayHeader(o, uint32(len(z.needCopyOnWrite))) + for zcua := range z.needCopyOnWrite { + o = msgp.AppendBool(o, z.needCopyOnWrite[zcua]) + } + // string "copyOnWrite" + o = append(o, 0xab, 0x63, 0x6f, 0x70, 0x79, 0x4f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65) + o = msgp.AppendBool(o, z.copyOnWrite) + // string "conserz" + o = append(o, 0xa7, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x72, 0x7a) + o = msgp.AppendArrayHeader(o, uint32(len(z.conserz))) + for zxhx := range z.conserz { + // map header, size 2 + // string "t" + o = append(o, 0x82, 0xa1, 0x74) + o = msgp.AppendUint8(o, uint8(z.conserz[zxhx].t)) + // string "r" + o = append(o, 0xa1, 0x72) + o, err = z.conserz[zxhx].r.MarshalMsg(o) + if err != nil { + return + } + } + return +} + +// UnmarshalMsg implements msgp.Unmarshaler +func (z *roaringArray) UnmarshalMsg(bts []byte) (o []byte, err error) { + var field []byte + _ = field + var zrsw uint32 + zrsw, bts, err = msgp.ReadMapHeaderBytes(bts) + if err != nil { + return + } + for zrsw > 0 { + zrsw-- + field, bts, err = msgp.ReadMapKeyZC(bts) + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "keys": + var zxpk uint32 + zxpk, bts, err = msgp.ReadArrayHeaderBytes(bts) + if err != nil { + return + } + if cap(z.keys) >= int(zxpk) { + z.keys = (z.keys)[:zxpk] + } else { + z.keys = make([]uint16, zxpk) + } + for zhct := range z.keys { + z.keys[zhct], bts, err = msgp.ReadUint16Bytes(bts) + if err != nil { + return + } + } + case "needCopyOnWrite": + var zdnj uint32 + zdnj, bts, err = msgp.ReadArrayHeaderBytes(bts) + if err != nil { + return + } + if cap(z.needCopyOnWrite) >= int(zdnj) { + z.needCopyOnWrite = (z.needCopyOnWrite)[:zdnj] + } else { + z.needCopyOnWrite = make([]bool, zdnj) + } + for zcua := range z.needCopyOnWrite { + z.needCopyOnWrite[zcua], bts, err = msgp.ReadBoolBytes(bts) + if err != nil { + return + } + } + case "copyOnWrite": + z.copyOnWrite, bts, err = msgp.ReadBoolBytes(bts) + if err != nil { + return + } + case "conserz": + var zobc uint32 + zobc, bts, err = msgp.ReadArrayHeaderBytes(bts) + if err != nil { + return + } + if cap(z.conserz) >= int(zobc) { + z.conserz = (z.conserz)[:zobc] + } else { + z.conserz = make([]containerSerz, zobc) + } + for zxhx := range z.conserz { + var zsnv uint32 + zsnv, bts, err = msgp.ReadMapHeaderBytes(bts) + if err != nil { + return + } + for zsnv > 0 { + zsnv-- + field, bts, err = msgp.ReadMapKeyZC(bts) + if err != nil { + return + } + switch msgp.UnsafeString(field) { + case "t": + { + var zkgt uint8 + zkgt, bts, err = msgp.ReadUint8Bytes(bts) + z.conserz[zxhx].t = contype(zkgt) + } + if err != nil { + return + } + case "r": + bts, err = z.conserz[zxhx].r.UnmarshalMsg(bts) + if err != nil { + return + } + default: + bts, err = msgp.Skip(bts) + if err != nil { + return + } + } + } + } + default: + bts, err = msgp.Skip(bts) + if err != nil { + return + } + } + } + o = bts + return +} + +// Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message +func (z *roaringArray) Msgsize() (s int) { + s = 1 + 5 + msgp.ArrayHeaderSize + (len(z.keys) * (msgp.Uint16Size)) + 16 + msgp.ArrayHeaderSize + (len(z.needCopyOnWrite) * (msgp.BoolSize)) + 12 + msgp.BoolSize + 8 + msgp.ArrayHeaderSize + for zxhx := range z.conserz { + s += 1 + 2 + msgp.Uint8Size + 2 + z.conserz[zxhx].r.Msgsize() + } + return +} diff --git a/vendor/github.com/RoaringBitmap/roaring/roaringarray_gen_test.go b/vendor/github.com/RoaringBitmap/roaring/roaringarray_gen_test.go new file mode 100644 index 0000000..befca24 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/roaringarray_gen_test.go @@ -0,0 +1,238 @@ +package roaring + +// NOTE: THIS FILE WAS PRODUCED BY THE +// MSGP CODE GENERATION TOOL (github.com/tinylib/msgp) +// DO NOT EDIT + +import ( + "bytes" + "testing" + + "github.com/tinylib/msgp/msgp" +) + +func TestMarshalUnmarshalcontainerSerz(t *testing.T) { + v := containerSerz{} + bts, err := v.MarshalMsg(nil) + if err != nil { + t.Fatal(err) + } + left, err := v.UnmarshalMsg(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after UnmarshalMsg(): %q", len(left), left) + } + + left, err = msgp.Skip(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after Skip(): %q", len(left), left) + } +} + +func BenchmarkMarshalMsgcontainerSerz(b *testing.B) { + v := containerSerz{} + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.MarshalMsg(nil) + } +} + +func BenchmarkAppendMsgcontainerSerz(b *testing.B) { + v := containerSerz{} + bts := make([]byte, 0, v.Msgsize()) + bts, _ = v.MarshalMsg(bts[0:0]) + b.SetBytes(int64(len(bts))) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + bts, _ = v.MarshalMsg(bts[0:0]) + } +} + +func BenchmarkUnmarshalcontainerSerz(b *testing.B) { + v := containerSerz{} + bts, _ := v.MarshalMsg(nil) + b.ReportAllocs() + b.SetBytes(int64(len(bts))) + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := v.UnmarshalMsg(bts) + if err != nil { + b.Fatal(err) + } + } +} + +func TestEncodeDecodecontainerSerz(t *testing.T) { + v := containerSerz{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + + m := v.Msgsize() + if buf.Len() > m { + t.Logf("WARNING: Msgsize() for %v is inaccurate", v) + } + + vn := containerSerz{} + err := msgp.Decode(&buf, &vn) + if err != nil { + t.Error(err) + } + + buf.Reset() + msgp.Encode(&buf, &v) + err = msgp.NewReader(&buf).Skip() + if err != nil { + t.Error(err) + } +} + +func BenchmarkEncodecontainerSerz(b *testing.B) { + v := containerSerz{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + b.SetBytes(int64(buf.Len())) + en := msgp.NewWriter(msgp.Nowhere) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.EncodeMsg(en) + } + en.Flush() +} + +func BenchmarkDecodecontainerSerz(b *testing.B) { + v := containerSerz{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + b.SetBytes(int64(buf.Len())) + rd := msgp.NewEndlessReader(buf.Bytes(), b) + dc := msgp.NewReader(rd) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + err := v.DecodeMsg(dc) + if err != nil { + b.Fatal(err) + } + } +} + +func TestMarshalUnmarshalroaringArray(t *testing.T) { + v := roaringArray{} + bts, err := v.MarshalMsg(nil) + if err != nil { + t.Fatal(err) + } + left, err := v.UnmarshalMsg(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after UnmarshalMsg(): %q", len(left), left) + } + + left, err = msgp.Skip(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after Skip(): %q", len(left), left) + } +} + +func BenchmarkMarshalMsgroaringArray(b *testing.B) { + v := roaringArray{} + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.MarshalMsg(nil) + } +} + +func BenchmarkAppendMsgroaringArray(b *testing.B) { + v := roaringArray{} + bts := make([]byte, 0, v.Msgsize()) + bts, _ = v.MarshalMsg(bts[0:0]) + b.SetBytes(int64(len(bts))) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + bts, _ = v.MarshalMsg(bts[0:0]) + } +} + +func BenchmarkUnmarshalroaringArray(b *testing.B) { + v := roaringArray{} + bts, _ := v.MarshalMsg(nil) + b.ReportAllocs() + b.SetBytes(int64(len(bts))) + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := v.UnmarshalMsg(bts) + if err != nil { + b.Fatal(err) + } + } +} + +func TestEncodeDecoderoaringArray(t *testing.T) { + v := roaringArray{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + + m := v.Msgsize() + if buf.Len() > m { + t.Logf("WARNING: Msgsize() for %v is inaccurate", v) + } + + vn := roaringArray{} + err := msgp.Decode(&buf, &vn) + if err != nil { + t.Error(err) + } + + buf.Reset() + msgp.Encode(&buf, &v) + err = msgp.NewReader(&buf).Skip() + if err != nil { + t.Error(err) + } +} + +func BenchmarkEncoderoaringArray(b *testing.B) { + v := roaringArray{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + b.SetBytes(int64(buf.Len())) + en := msgp.NewWriter(msgp.Nowhere) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.EncodeMsg(en) + } + en.Flush() +} + +func BenchmarkDecoderoaringArray(b *testing.B) { + v := roaringArray{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + b.SetBytes(int64(buf.Len())) + rd := msgp.NewEndlessReader(buf.Bytes(), b) + dc := msgp.NewReader(rd) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + err := v.DecodeMsg(dc) + if err != nil { + b.Fatal(err) + } + } +} diff --git a/vendor/github.com/RoaringBitmap/roaring/roaringcow_test.go b/vendor/github.com/RoaringBitmap/roaring/roaringcow_test.go new file mode 100644 index 0000000..2e8fa62 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/roaringcow_test.go @@ -0,0 +1,1879 @@ +package roaring + +import ( + . "github.com/smartystreets/goconvey/convey" + "github.com/willf/bitset" + "log" + "math/rand" + "strconv" + "testing" +) + +func TestCloneOfCOW(t *testing.T) { + rb1 := NewBitmap() + rb1.SetCopyOnWrite(true) + rb1.Add(10) + rb1.Add(12) + rb1.Remove(12) + + rb2 := rb1.Clone() + + rb3 := rb1.Clone() + + rb2.Remove(10) + + rb3.AddRange(100, 200) + if !rb2.IsEmpty() { + t.Errorf("rb2 should be empty") + } + if rb3.GetCardinality() != 100+1 { + t.Errorf("bad cardinality") + } + if !rb1.Contains(10) { + t.Errorf("bad rb1") + } + if rb1.GetCardinality() != 1 { + t.Errorf("bad cardinality") + } +} + +func TestRoaringBitmapBitmapOfCOW(t *testing.T) { + array := []uint32{5580, 33722, 44031, 57276, 83097} + bmp := BitmapOf(array...) + bmp.SetCopyOnWrite(true) + if len(array) != int(bmp.GetCardinality()) { + t.Errorf("length diff %d!=%d", len(array), bmp.GetCardinality()) + t.FailNow() + } +} + +func TestRoaringBitmapAddCOW(t *testing.T) { + array := []uint32{5580, 33722, 44031, 57276, 83097} + bmp := New() + bmp.SetCopyOnWrite(true) + for _, v := range array { + bmp.Add(v) + } + if len(array) != int(bmp.GetCardinality()) { + t.Errorf("length diff %d!=%d", len(array), bmp.GetCardinality()) + t.FailNow() + } +} + +func TestRoaringBitmapAddManyCOW(t *testing.T) { + array := []uint32{5580, 33722, 44031, 57276, 83097} + bmp := NewBitmap() + bmp.SetCopyOnWrite(true) + + bmp.AddMany(array) + if len(array) != int(bmp.GetCardinality()) { + t.Errorf("length diff %d!=%d", len(array), bmp.GetCardinality()) + t.FailNow() + } +} + +// https://github.com/RoaringBitmap/roaring/issues/64 +func TestFlip64COW(t *testing.T) { + bm := New() + bm.SetCopyOnWrite(true) + + bm.AddInt(0) + bm.Flip(1, 2) + i := bm.Iterator() + if i.Next() != 0 || i.Next() != 1 || i.HasNext() { + t.Error("expected {0,1}") + } +} + +// https://github.com/RoaringBitmap/roaring/issues/64 +func TestFlip64OffCOW(t *testing.T) { + bm := New() + bm.SetCopyOnWrite(true) + + bm.AddInt(10) + bm.Flip(11, 12) + i := bm.Iterator() + if i.Next() != 10 || i.Next() != 11 || i.HasNext() { + t.Error("expected {10,11}") + } +} + +func TestStringerCOW(t *testing.T) { + v := NewBitmap() + v.SetCopyOnWrite(true) + for i := uint32(0); i < 10; i++ { + v.Add(i) + } + if v.String() != "{0,1,2,3,4,5,6,7,8,9}" { + t.Error("bad string output") + } + v.RunOptimize() + if v.String() != "{0,1,2,3,4,5,6,7,8,9}" { + t.Error("bad string output") + } +} + +func TestFastCardCOW(t *testing.T) { + Convey("fast card", t, func() { + bm := NewBitmap() + bm.SetCopyOnWrite(true) + bm.Add(1) + bm.AddRange(21, 260000) + bm2 := NewBitmap() + bm2.SetCopyOnWrite(true) + bm2.Add(25) + So(bm2.AndCardinality(bm), ShouldEqual, 1) + So(bm2.OrCardinality(bm), ShouldEqual, bm.GetCardinality()) + So(bm.AndCardinality(bm2), ShouldEqual, 1) + So(bm.OrCardinality(bm2), ShouldEqual, bm.GetCardinality()) + So(bm2.AndCardinality(bm), ShouldEqual, 1) + So(bm2.OrCardinality(bm), ShouldEqual, bm.GetCardinality()) + bm.RunOptimize() + So(bm2.AndCardinality(bm), ShouldEqual, 1) + So(bm2.OrCardinality(bm), ShouldEqual, bm.GetCardinality()) + So(bm.AndCardinality(bm2), ShouldEqual, 1) + So(bm.OrCardinality(bm2), ShouldEqual, bm.GetCardinality()) + So(bm2.AndCardinality(bm), ShouldEqual, 1) + So(bm2.OrCardinality(bm), ShouldEqual, bm.GetCardinality()) + }) +} + +func TestIntersects1COW(t *testing.T) { + Convey("intersects", t, func() { + bm := NewBitmap() + bm.SetCopyOnWrite(true) + bm.Add(1) + bm.AddRange(21, 26) + bm2 := NewBitmap() + bm2.SetCopyOnWrite(true) + bm2.Add(25) + So(bm2.Intersects(bm), ShouldEqual, true) + bm.Remove(25) + So(bm2.Intersects(bm), ShouldEqual, false) + bm.AddRange(1, 100000) + So(bm2.Intersects(bm), ShouldEqual, true) + }) +} + +func TestRangePanicCOW(t *testing.T) { + Convey("TestRangePanic", t, func() { + bm := NewBitmap() + bm.SetCopyOnWrite(true) + bm.Add(1) + bm.AddRange(21, 26) + bm.AddRange(9, 14) + bm.AddRange(11, 16) + }) +} + +func TestRangeRemovalCOW(t *testing.T) { + Convey("TestRangeRemovalPanic", t, func() { + bm := NewBitmap() + bm.SetCopyOnWrite(true) + bm.Add(1) + bm.AddRange(21, 26) + bm.AddRange(9, 14) + bm.RemoveRange(11, 16) + bm.RemoveRange(1, 26) + c := bm.GetCardinality() + So(c, ShouldEqual, 0) + bm.AddRange(1, 10000) + c = bm.GetCardinality() + So(c, ShouldEqual, 10000-1) + bm.RemoveRange(1, 10000) + c = bm.GetCardinality() + So(c, ShouldEqual, 0) + }) +} + +func TestRangeRemovalFromContentCOW(t *testing.T) { + Convey("TestRangeRemovalPanic", t, func() { + bm := NewBitmap() + bm.SetCopyOnWrite(true) + for i := 100; i < 10000; i++ { + bm.AddInt(i * 3) + } + bm.AddRange(21, 26) + bm.AddRange(9, 14) + bm.RemoveRange(11, 16) + bm.RemoveRange(0, 30000) + c := bm.GetCardinality() + So(c, ShouldEqual, 00) + }) +} + +func TestFlipOnEmptyCOW(t *testing.T) { + + Convey("TestFlipOnEmpty in-place", t, func() { + bm := NewBitmap() + bm.SetCopyOnWrite(true) + bm.Flip(0, 10) + c := bm.GetCardinality() + So(c, ShouldEqual, 10) + }) + Convey("TestFlipOnEmpty, generating new result", t, func() { + bm := NewBitmap() + bm.SetCopyOnWrite(true) + bm = Flip(bm, 0, 10) + c := bm.GetCardinality() + So(c, ShouldEqual, 10) + }) +} + +func TestBitmapRankCOW(t *testing.T) { + for N := uint32(1); N <= 1048576; N *= 2 { + Convey("rank tests"+strconv.Itoa(int(N)), t, func() { + for gap := uint32(1); gap <= 65536; gap *= 2 { + rb1 := NewBitmap() + rb1.SetCopyOnWrite(true) + for x := uint32(0); x <= N; x += gap { + rb1.Add(x) + } + for y := uint32(0); y <= N; y++ { + if rb1.Rank(y) != uint64((y+1+gap-1)/gap) { + So(rb1.Rank(y), ShouldEqual, (y+1+gap-1)/gap) + } + } + } + }) + } +} + +func TestBitmapSelectCOW(t *testing.T) { + for N := uint32(1); N <= 1048576; N *= 2 { + Convey("rank tests"+strconv.Itoa(int(N)), t, func() { + for gap := uint32(1); gap <= 65536; gap *= 2 { + rb1 := NewBitmap() + rb1.SetCopyOnWrite(true) + for x := uint32(0); x <= N; x += gap { + rb1.Add(x) + } + for y := uint32(0); y <= N/gap; y++ { + expectedInt := y * gap + i, err := rb1.Select(y) + if err != nil { + t.Fatal(err) + } + + if i != expectedInt { + So(i, ShouldEqual, expectedInt) + } + } + } + }) + } +} + +// some extra tests +func TestBitmapExtraCOW(t *testing.T) { + for N := uint32(1); N <= 65536; N *= 2 { + Convey("extra tests"+strconv.Itoa(int(N)), t, func() { + for gap := uint32(1); gap <= 65536; gap *= 2 { + bs1 := bitset.New(0) + rb1 := NewBitmap() + rb1.SetCopyOnWrite(true) + rb1.SetCopyOnWrite(true) + + for x := uint32(0); x <= N; x += gap { + bs1.Set(uint(x)) + rb1.Add(x) + } + So(bs1.Count(), ShouldEqual, rb1.GetCardinality()) + So(equalsBitSet(bs1, rb1), ShouldEqual, true) + for offset := uint32(1); offset <= gap; offset *= 2 { + bs2 := bitset.New(0) + rb2 := NewBitmap() + rb2.SetCopyOnWrite(true) + + for x := uint32(0); x <= N; x += gap { + bs2.Set(uint(x + offset)) + rb2.Add(x + offset) + } + So(bs2.Count(), ShouldEqual, rb2.GetCardinality()) + So(equalsBitSet(bs2, rb2), ShouldEqual, true) + + clonebs1 := bs1.Clone() + clonebs1.InPlaceIntersection(bs2) + if !equalsBitSet(clonebs1, And(rb1, rb2)) { + t := rb1.Clone() + t.And(rb2) + So(equalsBitSet(clonebs1, t), ShouldEqual, true) + } + + // testing OR + clonebs1 = bs1.Clone() + clonebs1.InPlaceUnion(bs2) + + So(equalsBitSet(clonebs1, Or(rb1, rb2)), ShouldEqual, true) + // testing XOR + clonebs1 = bs1.Clone() + clonebs1.InPlaceSymmetricDifference(bs2) + So(equalsBitSet(clonebs1, Xor(rb1, rb2)), ShouldEqual, true) + + //testing NOTAND + clonebs1 = bs1.Clone() + clonebs1.InPlaceDifference(bs2) + So(equalsBitSet(clonebs1, AndNot(rb1, rb2)), ShouldEqual, true) + } + } + }) + } +} + +func TestBitmapCOW(t *testing.T) { + + Convey("Test Contains", t, func() { + rbm1 := NewBitmap() + rbm1.SetCopyOnWrite(true) + for k := 0; k < 1000; k++ { + rbm1.AddInt(17 * k) + } + for k := 0; k < 17*1000; k++ { + So(rbm1.ContainsInt(k), ShouldEqual, (k/17*17 == k)) + } + }) + + Convey("Test Clone", t, func() { + rb1 := NewBitmap() + rb1.SetCopyOnWrite(true) + rb1.Add(10) + + rb2 := rb1.Clone() + rb2.Remove(10) + + So(rb1.Contains(10), ShouldBeTrue) + }) + + Convey("Test ANDNOT4", t, func() { + rb := NewBitmap() + rb.SetCopyOnWrite(true) + rb2 := NewBitmap() + rb2.SetCopyOnWrite(true) + + for i := 0; i < 200000; i += 4 { + rb2.AddInt(i) + } + for i := 200000; i < 400000; i += 14 { + rb2.AddInt(i) + } + + off := AndNot(rb2, rb) + andNotresult := AndNot(rb, rb2) + + So(rb.Equals(andNotresult), ShouldEqual, true) + So(rb2.Equals(off), ShouldEqual, true) + rb2.AndNot(rb) + So(rb2.Equals(off), ShouldEqual, true) + + }) + + Convey("Test AND", t, func() { + rr := NewBitmap() + rr.SetCopyOnWrite(true) + for k := 0; k < 4000; k++ { + rr.AddInt(k) + } + rr.Add(100000) + rr.Add(110000) + rr2 := NewBitmap() + rr2.SetCopyOnWrite(true) + rr2.Add(13) + rrand := And(rr, rr2) + array := rrand.ToArray() + + So(len(array), ShouldEqual, 1) + So(array[0], ShouldEqual, 13) + rr.And(rr2) + array = rr.ToArray() + + So(len(array), ShouldEqual, 1) + So(array[0], ShouldEqual, 13) + }) + + Convey("Test AND 2", t, func() { + rr := NewBitmap() + rr.SetCopyOnWrite(true) + for k := 4000; k < 4256; k++ { + rr.AddInt(k) + } + for k := 65536; k < 65536+4000; k++ { + rr.AddInt(k) + } + for k := 3 * 65536; k < 3*65536+9000; k++ { + rr.AddInt(k) + } + for k := 4 * 65535; k < 4*65535+7000; k++ { + rr.AddInt(k) + } + for k := 6 * 65535; k < 6*65535+10000; k++ { + rr.AddInt(k) + } + for k := 8 * 65535; k < 8*65535+1000; k++ { + rr.AddInt(k) + } + for k := 9 * 65535; k < 9*65535+30000; k++ { + rr.AddInt(k) + } + + rr2 := NewBitmap() + rr2.SetCopyOnWrite(true) + for k := 4000; k < 4256; k++ { + rr2.AddInt(k) + } + for k := 65536; k < 65536+4000; k++ { + rr2.AddInt(k) + } + for k := 3*65536 + 2000; k < 3*65536+6000; k++ { + rr2.AddInt(k) + } + for k := 6 * 65535; k < 6*65535+1000; k++ { + rr2.AddInt(k) + } + for k := 7 * 65535; k < 7*65535+1000; k++ { + rr2.AddInt(k) + } + for k := 10 * 65535; k < 10*65535+5000; k++ { + rr2.AddInt(k) + } + correct := And(rr, rr2) + rr.And(rr2) + So(correct.Equals(rr), ShouldEqual, true) + }) + + Convey("Test AND 2", t, func() { + rr := NewBitmap() + rr.SetCopyOnWrite(true) + for k := 0; k < 4000; k++ { + rr.AddInt(k) + } + rr.AddInt(100000) + rr.AddInt(110000) + rr2 := NewBitmap() + rr2.SetCopyOnWrite(true) + rr2.AddInt(13) + + rrand := And(rr, rr2) + array := rrand.ToArray() + So(len(array), ShouldEqual, 1) + So(array[0], ShouldEqual, 13) + }) + Convey("Test AND 3a", t, func() { + rr := NewBitmap() + rr.SetCopyOnWrite(true) + rr2 := NewBitmap() + rr2.SetCopyOnWrite(true) + for k := 6 * 65536; k < 6*65536+10000; k++ { + rr.AddInt(k) + } + for k := 6 * 65536; k < 6*65536+1000; k++ { + rr2.AddInt(k) + } + result := And(rr, rr2) + So(result.GetCardinality(), ShouldEqual, 1000) + }) + Convey("Test AND 3", t, func() { + var arrayand [11256]uint32 + //393,216 + pos := 0 + rr := NewBitmap() + rr.SetCopyOnWrite(true) + for k := 4000; k < 4256; k++ { + rr.AddInt(k) + } + for k := 65536; k < 65536+4000; k++ { + rr.AddInt(k) + } + for k := 3 * 65536; k < 3*65536+1000; k++ { + rr.AddInt(k) + } + for k := 3*65536 + 1000; k < 3*65536+7000; k++ { + rr.AddInt(k) + } + for k := 3*65536 + 7000; k < 3*65536+9000; k++ { + rr.AddInt(k) + } + for k := 4 * 65536; k < 4*65536+7000; k++ { + rr.AddInt(k) + } + for k := 8 * 65536; k < 8*65536+1000; k++ { + rr.AddInt(k) + } + for k := 9 * 65536; k < 9*65536+30000; k++ { + rr.AddInt(k) + } + + rr2 := NewBitmap() + rr2.SetCopyOnWrite(true) + for k := 4000; k < 4256; k++ { + rr2.AddInt(k) + arrayand[pos] = uint32(k) + pos++ + } + for k := 65536; k < 65536+4000; k++ { + rr2.AddInt(k) + arrayand[pos] = uint32(k) + pos++ + } + for k := 3*65536 + 1000; k < 3*65536+7000; k++ { + rr2.AddInt(k) + arrayand[pos] = uint32(k) + pos++ + } + for k := 6 * 65536; k < 6*65536+10000; k++ { + rr.AddInt(k) + } + for k := 6 * 65536; k < 6*65536+1000; k++ { + rr2.AddInt(k) + arrayand[pos] = uint32(k) + pos++ + } + + for k := 7 * 65536; k < 7*65536+1000; k++ { + rr2.AddInt(k) + } + for k := 10 * 65536; k < 10*65536+5000; k++ { + rr2.AddInt(k) + } + rrand := And(rr, rr2) + + arrayres := rrand.ToArray() + ok := true + for i := range arrayres { + if i < len(arrayand) { + if arrayres[i] != arrayand[i] { + log.Println(i, arrayres[i], arrayand[i]) + ok = false + } + } else { + log.Println('x', arrayres[i]) + ok = false + } + } + + So(len(arrayand), ShouldEqual, len(arrayres)) + So(ok, ShouldEqual, true) + + }) + + Convey("Test AND 4", t, func() { + rb := NewBitmap() + rb.SetCopyOnWrite(true) + rb2 := NewBitmap() + rb2.SetCopyOnWrite(true) + + for i := 0; i < 200000; i += 4 { + rb2.AddInt(i) + } + for i := 200000; i < 400000; i += 14 { + rb2.AddInt(i) + } + //TODO: Bitmap.And(bm,bm2) + andresult := And(rb, rb2) + off := And(rb2, rb) + So(andresult.Equals(off), ShouldEqual, true) + So(andresult.GetCardinality(), ShouldEqual, 0) + + for i := 500000; i < 600000; i += 14 { + rb.AddInt(i) + } + for i := 200000; i < 400000; i += 3 { + rb2.AddInt(i) + } + andresult2 := And(rb, rb2) + So(andresult.GetCardinality(), ShouldEqual, 0) + So(andresult2.GetCardinality(), ShouldEqual, 0) + + for i := 0; i < 200000; i += 4 { + rb.AddInt(i) + } + for i := 200000; i < 400000; i += 14 { + rb.AddInt(i) + } + So(andresult.GetCardinality(), ShouldEqual, 0) + rc := And(rb, rb2) + rb.And(rb2) + So(rc.GetCardinality(), ShouldEqual, rb.GetCardinality()) + + }) + + Convey("ArrayContainerCardinalityTest", t, func() { + ac := newArrayContainer() + for k := uint16(0); k < 100; k++ { + ac.iadd(k) + So(ac.getCardinality(), ShouldEqual, k+1) + } + for k := uint16(0); k < 100; k++ { + ac.iadd(k) + So(ac.getCardinality(), ShouldEqual, 100) + } + }) + + Convey("or test", t, func() { + rr := NewBitmap() + rr.SetCopyOnWrite(true) + for k := 0; k < 4000; k++ { + rr.AddInt(k) + } + rr2 := NewBitmap() + rr2.SetCopyOnWrite(true) + for k := 4000; k < 8000; k++ { + rr2.AddInt(k) + } + result := Or(rr, rr2) + So(result.GetCardinality(), ShouldEqual, rr.GetCardinality()+rr2.GetCardinality()) + }) + Convey("basic test", t, func() { + rr := NewBitmap() + rr.SetCopyOnWrite(true) + var a [4002]uint32 + pos := 0 + for k := 0; k < 4000; k++ { + rr.AddInt(k) + a[pos] = uint32(k) + pos++ + } + rr.AddInt(100000) + a[pos] = 100000 + pos++ + rr.AddInt(110000) + a[pos] = 110000 + pos++ + array := rr.ToArray() + ok := true + for i := range a { + if array[i] != a[i] { + log.Println("rr : ", array[i], " a : ", a[i]) + ok = false + } + } + So(len(array), ShouldEqual, len(a)) + So(ok, ShouldEqual, true) + }) + + Convey("BitmapContainerCardinalityTest", t, func() { + ac := newBitmapContainer() + for k := uint16(0); k < 100; k++ { + ac.iadd(k) + So(ac.getCardinality(), ShouldEqual, k+1) + } + for k := uint16(0); k < 100; k++ { + ac.iadd(k) + So(ac.getCardinality(), ShouldEqual, 100) + } + }) + + Convey("BitmapContainerTest", t, func() { + rr := newBitmapContainer() + rr.iadd(uint16(110)) + rr.iadd(uint16(114)) + rr.iadd(uint16(115)) + var array [3]uint16 + pos := 0 + for itr := rr.getShortIterator(); itr.hasNext(); { + array[pos] = itr.next() + pos++ + } + + So(array[0], ShouldEqual, uint16(110)) + So(array[1], ShouldEqual, uint16(114)) + So(array[2], ShouldEqual, uint16(115)) + }) + Convey("cardinality test", t, func() { + N := 1024 + for gap := 7; gap < 100000; gap *= 10 { + for offset := 2; offset <= 1024; offset *= 2 { + rb := NewBitmap() + rb.SetCopyOnWrite(true) + for k := 0; k < N; k++ { + rb.AddInt(k * gap) + So(rb.GetCardinality(), ShouldEqual, k+1) + } + So(rb.GetCardinality(), ShouldEqual, N) + // check the add of existing values + for k := 0; k < N; k++ { + rb.AddInt(k * gap) + So(rb.GetCardinality(), ShouldEqual, N) + } + + rb2 := NewBitmap() + rb2.SetCopyOnWrite(true) + + for k := 0; k < N; k++ { + rb2.AddInt(k * gap * offset) + So(rb2.GetCardinality(), ShouldEqual, k+1) + } + + So(rb2.GetCardinality(), ShouldEqual, N) + + for k := 0; k < N; k++ { + rb2.AddInt(k * gap * offset) + So(rb2.GetCardinality(), ShouldEqual, N) + } + So(And(rb, rb2).GetCardinality(), ShouldEqual, N/offset) + So(Xor(rb, rb2).GetCardinality(), ShouldEqual, 2*N-2*N/offset) + So(Or(rb, rb2).GetCardinality(), ShouldEqual, 2*N-N/offset) + } + } + }) + + Convey("clear test", t, func() { + rb := NewBitmap() + rb.SetCopyOnWrite(true) + for i := 0; i < 200000; i += 7 { + // dense + rb.AddInt(i) + } + for i := 200000; i < 400000; i += 177 { + // sparse + rb.AddInt(i) + } + + rb2 := NewBitmap() + rb2.SetCopyOnWrite(true) + rb3 := NewBitmap() + rb3.SetCopyOnWrite(true) + for i := 0; i < 200000; i += 4 { + rb2.AddInt(i) + } + for i := 200000; i < 400000; i += 14 { + rb2.AddInt(i) + } + + rb.Clear() + So(rb.GetCardinality(), ShouldEqual, 0) + So(rb2.GetCardinality(), ShouldNotEqual, 0) + + rb.AddInt(4) + rb3.AddInt(4) + andresult := And(rb, rb2) + orresult := Or(rb, rb2) + + So(andresult.GetCardinality(), ShouldEqual, 1) + So(orresult.GetCardinality(), ShouldEqual, rb2.GetCardinality()) + + for i := 0; i < 200000; i += 4 { + rb.AddInt(i) + rb3.AddInt(i) + } + for i := 200000; i < 400000; i += 114 { + rb.AddInt(i) + rb3.AddInt(i) + } + + arrayrr := rb.ToArray() + arrayrr3 := rb3.ToArray() + ok := true + for i := range arrayrr { + if arrayrr[i] != arrayrr3[i] { + ok = false + } + } + So(len(arrayrr), ShouldEqual, len(arrayrr3)) + So(ok, ShouldEqual, true) + }) + + Convey("constainer factory ", t, func() { + + bc1 := newBitmapContainer() + bc2 := newBitmapContainer() + bc3 := newBitmapContainer() + ac1 := newArrayContainer() + ac2 := newArrayContainer() + ac3 := newArrayContainer() + + for i := 0; i < 5000; i++ { + bc1.iadd(uint16(i * 70)) + } + for i := 0; i < 5000; i++ { + bc2.iadd(uint16(i * 70)) + } + for i := 0; i < 5000; i++ { + bc3.iadd(uint16(i * 70)) + } + for i := 0; i < 4000; i++ { + ac1.iadd(uint16(i * 50)) + } + for i := 0; i < 4000; i++ { + ac2.iadd(uint16(i * 50)) + } + for i := 0; i < 4000; i++ { + ac3.iadd(uint16(i * 50)) + } + + rbc := ac1.clone().(*arrayContainer).toBitmapContainer() + So(validate(rbc, ac1), ShouldEqual, true) + rbc = ac2.clone().(*arrayContainer).toBitmapContainer() + So(validate(rbc, ac2), ShouldEqual, true) + rbc = ac3.clone().(*arrayContainer).toBitmapContainer() + So(validate(rbc, ac3), ShouldEqual, true) + }) + Convey("flipTest1 ", t, func() { + rb := NewBitmap() + rb.SetCopyOnWrite(true) + rb.Flip(100000, 200000) // in-place on empty bitmap + rbcard := rb.GetCardinality() + So(100000, ShouldEqual, rbcard) + + bs := bitset.New(20000 - 10000) + for i := uint(100000); i < 200000; i++ { + bs.Set(i) + } + So(equalsBitSet(bs, rb), ShouldEqual, true) + }) + + Convey("flipTest1A", t, func() { + rb := NewBitmap() + rb.SetCopyOnWrite(true) + rb1 := Flip(rb, 100000, 200000) + rbcard := rb1.GetCardinality() + So(100000, ShouldEqual, rbcard) + So(0, ShouldEqual, rb.GetCardinality()) + + bs := bitset.New(0) + So(equalsBitSet(bs, rb), ShouldEqual, true) + + for i := uint(100000); i < 200000; i++ { + bs.Set(i) + } + So(equalsBitSet(bs, rb1), ShouldEqual, true) + }) + Convey("flipTest2", t, func() { + rb := NewBitmap() + rb.SetCopyOnWrite(true) + rb.Flip(100000, 100000) + rbcard := rb.GetCardinality() + So(0, ShouldEqual, rbcard) + + bs := bitset.New(0) + So(equalsBitSet(bs, rb), ShouldEqual, true) + }) + + Convey("flipTest2A", t, func() { + rb := NewBitmap() + rb.SetCopyOnWrite(true) + rb1 := Flip(rb, 100000, 100000) + + rb.AddInt(1) + rbcard := rb1.GetCardinality() + + So(0, ShouldEqual, rbcard) + So(1, ShouldEqual, rb.GetCardinality()) + + bs := bitset.New(0) + So(equalsBitSet(bs, rb1), ShouldEqual, true) + bs.Set(1) + So(equalsBitSet(bs, rb), ShouldEqual, true) + }) + + Convey("flipTest3A", t, func() { + rb := NewBitmap() + rb.SetCopyOnWrite(true) + rb.Flip(100000, 200000) // got 100k-199999 + rb.Flip(100000, 199991) // give back 100k-199990 + rbcard := rb.GetCardinality() + So(9, ShouldEqual, rbcard) + + bs := bitset.New(0) + for i := uint(199991); i < 200000; i++ { + bs.Set(i) + } + + So(equalsBitSet(bs, rb), ShouldEqual, true) + }) + + Convey("flipTest4A", t, func() { + // fits evenly on both ends + rb := NewBitmap() + rb.SetCopyOnWrite(true) + rb.Flip(100000, 200000) // got 100k-199999 + rb.Flip(65536, 4*65536) + rbcard := rb.GetCardinality() + + // 65536 to 99999 are 1s + // 200000 to 262143 are 1s: total card + + So(96608, ShouldEqual, rbcard) + + bs := bitset.New(0) + for i := uint(65536); i < 100000; i++ { + bs.Set(i) + } + for i := uint(200000); i < 262144; i++ { + bs.Set(i) + } + + So(equalsBitSet(bs, rb), ShouldEqual, true) + }) + + Convey("flipTest5", t, func() { + // fits evenly on small end, multiple + // containers + rb := NewBitmap() + rb.SetCopyOnWrite(true) + rb.Flip(100000, 132000) + rb.Flip(65536, 120000) + rbcard := rb.GetCardinality() + + // 65536 to 99999 are 1s + // 120000 to 131999 + + So(46464, ShouldEqual, rbcard) + + bs := bitset.New(0) + for i := uint(65536); i < 100000; i++ { + bs.Set(i) + } + for i := uint(120000); i < 132000; i++ { + bs.Set(i) + } + So(equalsBitSet(bs, rb), ShouldEqual, true) + }) + + Convey("flipTest6", t, func() { + rb := NewBitmap() + rb.SetCopyOnWrite(true) + rb1 := Flip(rb, 100000, 132000) + rb2 := Flip(rb1, 65536, 120000) + //rbcard := rb2.GetCardinality() + + bs := bitset.New(0) + for i := uint(65536); i < 100000; i++ { + bs.Set(i) + } + for i := uint(120000); i < 132000; i++ { + bs.Set(i) + } + So(equalsBitSet(bs, rb2), ShouldEqual, true) + }) + + Convey("flipTest6A", t, func() { + rb := NewBitmap() + rb.SetCopyOnWrite(true) + rb1 := Flip(rb, 100000, 132000) + rb2 := Flip(rb1, 99000, 2*65536) + rbcard := rb2.GetCardinality() + + So(1928, ShouldEqual, rbcard) + + bs := bitset.New(0) + for i := uint(99000); i < 100000; i++ { + bs.Set(i) + } + for i := uint(2 * 65536); i < 132000; i++ { + bs.Set(i) + } + So(equalsBitSet(bs, rb2), ShouldEqual, true) + }) + + Convey("flipTest7", t, func() { + // within 1 word, first container + rb := NewBitmap() + rb.SetCopyOnWrite(true) + rb.Flip(650, 132000) + rb.Flip(648, 651) + rbcard := rb.GetCardinality() + + // 648, 649, 651-131999 + + So(132000-651+2, ShouldEqual, rbcard) + bs := bitset.New(0) + bs.Set(648) + bs.Set(649) + for i := uint(651); i < 132000; i++ { + bs.Set(i) + } + So(equalsBitSet(bs, rb), ShouldEqual, true) + }) + Convey("flipTestBig", t, func() { + numCases := 1000 + rb := NewBitmap() + rb.SetCopyOnWrite(true) + bs := bitset.New(0) + //Random r = new Random(3333); + checkTime := 2.0 + + for i := 0; i < numCases; i++ { + start := rand.Intn(65536 * 20) + end := rand.Intn(65536 * 20) + if rand.Float64() < float64(0.1) { + end = start + rand.Intn(100) + } + rb.Flip(uint64(start), uint64(end)) + if start < end { + FlipRange(start, end, bs) // throws exception + } + // otherwise + // insert some more ANDs to keep things sparser + if rand.Float64() < 0.2 { + mask := NewBitmap() + mask.SetCopyOnWrite(true) + mask1 := bitset.New(0) + startM := rand.Intn(65536 * 20) + endM := startM + 100000 + mask.Flip(uint64(startM), uint64(endM)) + FlipRange(startM, endM, mask1) + mask.Flip(0, 65536*20+100000) + FlipRange(0, 65536*20+100000, mask1) + rb.And(mask) + bs.InPlaceIntersection(mask1) + } + // see if we can detect incorrectly shared containers + if rand.Float64() < 0.1 { + irrelevant := Flip(rb, 10, 100000) + irrelevant.Flip(5, 200000) + irrelevant.Flip(190000, 260000) + } + if float64(i) > checkTime { + So(equalsBitSet(bs, rb), ShouldEqual, true) + checkTime *= 1.5 + } + } + }) + + Convey("ortest", t, func() { + rr := NewBitmap() + rr.SetCopyOnWrite(true) + for k := 0; k < 4000; k++ { + rr.AddInt(k) + } + rr.AddInt(100000) + rr.AddInt(110000) + rr2 := NewBitmap() + rr2.SetCopyOnWrite(true) + for k := 0; k < 4000; k++ { + rr2.AddInt(k) + } + + rror := Or(rr, rr2) + + array := rror.ToArray() + + rr.Or(rr2) + arrayirr := rr.ToArray() + So(IntsEquals(array, arrayirr), ShouldEqual, true) + }) + + Convey("ORtest", t, func() { + rr := NewBitmap() + rr.SetCopyOnWrite(true) + for k := 4000; k < 4256; k++ { + rr.AddInt(k) + } + for k := 65536; k < 65536+4000; k++ { + rr.AddInt(k) + } + for k := 3 * 65536; k < 3*65536+9000; k++ { + rr.AddInt(k) + } + for k := 4 * 65535; k < 4*65535+7000; k++ { + rr.AddInt(k) + } + for k := 6 * 65535; k < 6*65535+10000; k++ { + rr.AddInt(k) + } + for k := 8 * 65535; k < 8*65535+1000; k++ { + rr.AddInt(k) + } + for k := 9 * 65535; k < 9*65535+30000; k++ { + rr.AddInt(k) + } + + rr2 := NewBitmap() + rr2.SetCopyOnWrite(true) + for k := 4000; k < 4256; k++ { + rr2.AddInt(k) + } + for k := 65536; k < 65536+4000; k++ { + rr2.AddInt(k) + } + for k := 3*65536 + 2000; k < 3*65536+6000; k++ { + rr2.AddInt(k) + } + for k := 6 * 65535; k < 6*65535+1000; k++ { + rr2.AddInt(k) + } + for k := 7 * 65535; k < 7*65535+1000; k++ { + rr2.AddInt(k) + } + for k := 10 * 65535; k < 10*65535+5000; k++ { + rr2.AddInt(k) + } + correct := Or(rr, rr2) + rr.Or(rr2) + So(correct.Equals(rr), ShouldEqual, true) + }) + + Convey("ortest2", t, func() { + arrayrr := make([]uint32, 4000+4000+2) + pos := 0 + rr := NewBitmap() + rr.SetCopyOnWrite(true) + for k := 0; k < 4000; k++ { + rr.AddInt(k) + arrayrr[pos] = uint32(k) + pos++ + } + rr.AddInt(100000) + rr.AddInt(110000) + rr2 := NewBitmap() + rr2.SetCopyOnWrite(true) + for k := 4000; k < 8000; k++ { + rr2.AddInt(k) + arrayrr[pos] = uint32(k) + pos++ + } + + arrayrr[pos] = 100000 + pos++ + arrayrr[pos] = 110000 + pos++ + + rror := Or(rr, rr2) + + arrayor := rror.ToArray() + + So(IntsEquals(arrayor, arrayrr), ShouldEqual, true) + }) + + Convey("ortest3", t, func() { + V1 := make(map[int]bool) + V2 := make(map[int]bool) + + rr := NewBitmap() + rr.SetCopyOnWrite(true) + rr2 := NewBitmap() + rr2.SetCopyOnWrite(true) + for k := 0; k < 4000; k++ { + rr2.AddInt(k) + V1[k] = true + } + for k := 3500; k < 4500; k++ { + rr.AddInt(k) + V1[k] = true + } + for k := 4000; k < 65000; k++ { + rr2.AddInt(k) + V1[k] = true + } + + // In the second node of each roaring bitmap, we have two bitmap + // containers. + // So, we will check the union between two BitmapContainers + for k := 65536; k < 65536+10000; k++ { + rr.AddInt(k) + V1[k] = true + } + + for k := 65536; k < 65536+14000; k++ { + rr2.AddInt(k) + V1[k] = true + } + + // In the 3rd node of each Roaring Bitmap, we have an + // ArrayContainer, so, we will try the union between two + // ArrayContainers. + for k := 4 * 65535; k < 4*65535+1000; k++ { + rr.AddInt(k) + V1[k] = true + } + + for k := 4 * 65535; k < 4*65535+800; k++ { + rr2.AddInt(k) + V1[k] = true + } + + // For the rest, we will check if the union will take them in + // the result + for k := 6 * 65535; k < 6*65535+1000; k++ { + rr.AddInt(k) + V1[k] = true + } + + for k := 7 * 65535; k < 7*65535+2000; k++ { + rr2.AddInt(k) + V1[k] = true + } + + rror := Or(rr, rr2) + valide := true + + for _, k := range rror.ToArray() { + _, found := V1[int(k)] + if !found { + valide = false + } + V2[int(k)] = true + } + + for k := range V1 { + _, found := V2[k] + if !found { + valide = false + } + } + + So(valide, ShouldEqual, true) + }) + + Convey("ortest4", t, func() { + rb := NewBitmap() + rb.SetCopyOnWrite(true) + rb2 := NewBitmap() + rb2.SetCopyOnWrite(true) + + for i := 0; i < 200000; i += 4 { + rb2.AddInt(i) + } + for i := 200000; i < 400000; i += 14 { + rb2.AddInt(i) + } + rb2card := rb2.GetCardinality() + + // check or against an empty bitmap + orresult := Or(rb, rb2) + off := Or(rb2, rb) + So(orresult.Equals(off), ShouldEqual, true) + + So(rb2card, ShouldEqual, orresult.GetCardinality()) + + for i := 500000; i < 600000; i += 14 { + rb.AddInt(i) + } + for i := 200000; i < 400000; i += 3 { + rb2.AddInt(i) + } + // check or against an empty bitmap + orresult2 := Or(rb, rb2) + So(rb2card, ShouldEqual, orresult.GetCardinality()) + So(rb2.GetCardinality()+rb.GetCardinality(), ShouldEqual, + orresult2.GetCardinality()) + rb.Or(rb2) + So(rb.Equals(orresult2), ShouldEqual, true) + + }) + + Convey("randomTest", t, func() { + rTestCOW(15) + rTestCOW(1024) + rTestCOW(4096) + rTestCOW(65536) + rTestCOW(65536 * 16) + }) + + Convey("SimpleCardinality", t, func() { + N := 512 + gap := 70 + + rb := NewBitmap() + rb.SetCopyOnWrite(true) + for k := 0; k < N; k++ { + rb.AddInt(k * gap) + So(rb.GetCardinality(), ShouldEqual, k+1) + } + So(rb.GetCardinality(), ShouldEqual, N) + for k := 0; k < N; k++ { + rb.AddInt(k * gap) + So(rb.GetCardinality(), ShouldEqual, N) + } + + }) + + Convey("XORtest", t, func() { + rr := NewBitmap() + rr.SetCopyOnWrite(true) + for k := 4000; k < 4256; k++ { + rr.AddInt(k) + } + for k := 65536; k < 65536+4000; k++ { + rr.AddInt(k) + } + for k := 3 * 65536; k < 3*65536+9000; k++ { + rr.AddInt(k) + } + for k := 4 * 65535; k < 4*65535+7000; k++ { + rr.AddInt(k) + } + for k := 6 * 65535; k < 6*65535+10000; k++ { + rr.AddInt(k) + } + for k := 8 * 65535; k < 8*65535+1000; k++ { + rr.AddInt(k) + } + for k := 9 * 65535; k < 9*65535+30000; k++ { + rr.AddInt(k) + } + + rr2 := NewBitmap() + rr2.SetCopyOnWrite(true) + for k := 4000; k < 4256; k++ { + rr2.AddInt(k) + } + for k := 65536; k < 65536+4000; k++ { + rr2.AddInt(k) + } + for k := 3*65536 + 2000; k < 3*65536+6000; k++ { + rr2.AddInt(k) + } + for k := 6 * 65535; k < 6*65535+1000; k++ { + rr2.AddInt(k) + } + for k := 7 * 65535; k < 7*65535+1000; k++ { + rr2.AddInt(k) + } + for k := 10 * 65535; k < 10*65535+5000; k++ { + rr2.AddInt(k) + } + correct := Xor(rr, rr2) + rr.Xor(rr2) + So(correct.Equals(rr), ShouldEqual, true) + }) + + Convey("xortest1", t, func() { + V1 := make(map[int]bool) + V2 := make(map[int]bool) + + rr := NewBitmap() + rr.SetCopyOnWrite(true) + rr2 := NewBitmap() + rr2.SetCopyOnWrite(true) + // For the first 65536: rr2 has a bitmap container, and rr has + // an array container. + // We will check the union between a BitmapCintainer and an + // arrayContainer + for k := 0; k < 4000; k++ { + rr2.AddInt(k) + if k < 3500 { + V1[k] = true + } + } + for k := 3500; k < 4500; k++ { + rr.AddInt(k) + } + for k := 4000; k < 65000; k++ { + rr2.AddInt(k) + if k >= 4500 { + V1[k] = true + } + } + + for k := 65536; k < 65536+30000; k++ { + rr.AddInt(k) + } + + for k := 65536; k < 65536+50000; k++ { + rr2.AddInt(k) + if k >= 65536+30000 { + V1[k] = true + } + } + + // In the 3rd node of each Roaring Bitmap, we have an + // ArrayContainer. So, we will try the union between two + // ArrayContainers. + for k := 4 * 65535; k < 4*65535+1000; k++ { + rr.AddInt(k) + if k >= (4*65535 + 800) { + V1[k] = true + } + } + + for k := 4 * 65535; k < 4*65535+800; k++ { + rr2.AddInt(k) + } + + for k := 6 * 65535; k < 6*65535+1000; k++ { + rr.AddInt(k) + V1[k] = true + } + + for k := 7 * 65535; k < 7*65535+2000; k++ { + rr2.AddInt(k) + V1[k] = true + } + + rrxor := Xor(rr, rr2) + valide := true + + for _, i := range rrxor.ToArray() { + _, found := V1[int(i)] + if !found { + valide = false + } + V2[int(i)] = true + } + for k := range V1 { + _, found := V2[k] + if !found { + valide = false + } + } + + So(valide, ShouldEqual, true) + }) +} +func TestXORtest4COW(t *testing.T) { + Convey("XORtest 4", t, func() { + rb := NewBitmap() + rb.SetCopyOnWrite(true) + rb2 := NewBitmap() + rb2.SetCopyOnWrite(true) + counter := 0 + + for i := 0; i < 200000; i += 4 { + rb2.AddInt(i) + counter++ + } + So(rb2.GetCardinality(), ShouldEqual, counter) + for i := 200000; i < 400000; i += 14 { + rb2.AddInt(i) + counter++ + } + So(rb2.GetCardinality(), ShouldEqual, counter) + rb2card := rb2.GetCardinality() + So(rb2card, ShouldEqual, counter) + + // check or against an empty bitmap + xorresult := Xor(rb, rb2) + So(xorresult.GetCardinality(), ShouldEqual, counter) + off := Or(rb2, rb) + So(off.GetCardinality(), ShouldEqual, counter) + So(xorresult.Equals(off), ShouldEqual, true) + + So(rb2card, ShouldEqual, xorresult.GetCardinality()) + for i := 500000; i < 600000; i += 14 { + rb.AddInt(i) + } + for i := 200000; i < 400000; i += 3 { + rb2.AddInt(i) + } + // check or against an empty bitmap + xorresult2 := Xor(rb, rb2) + So(rb2card, ShouldEqual, xorresult.GetCardinality()) + + So(rb2.GetCardinality()+rb.GetCardinality(), ShouldEqual, xorresult2.GetCardinality()) + + rb.Xor(rb2) + So(xorresult2.Equals(rb), ShouldEqual, true) + + }) + //need to add the massives +} + +func TestBigRandomCOW(t *testing.T) { + Convey("randomTest", t, func() { + rTestCOW(15) + rTestCOW(100) + rTestCOW(512) + rTestCOW(1023) + rTestCOW(1025) + rTestCOW(4095) + rTestCOW(4096) + rTestCOW(4097) + rTestCOW(65536) + rTestCOW(65536 * 16) + }) +} + +func rTestCOW(N int) { + log.Println("rtest N=", N) + for gap := 1; gap <= 65536; gap *= 2 { + bs1 := bitset.New(0) + rb1 := NewBitmap() + rb1.SetCopyOnWrite(true) + for x := 0; x <= N; x += gap { + bs1.Set(uint(x)) + rb1.AddInt(x) + } + So(bs1.Count(), ShouldEqual, rb1.GetCardinality()) + So(equalsBitSet(bs1, rb1), ShouldEqual, true) + for offset := 1; offset <= gap; offset *= 2 { + bs2 := bitset.New(0) + rb2 := NewBitmap() + rb2.SetCopyOnWrite(true) + for x := 0; x <= N; x += gap { + bs2.Set(uint(x + offset)) + rb2.AddInt(x + offset) + } + So(bs2.Count(), ShouldEqual, rb2.GetCardinality()) + So(equalsBitSet(bs2, rb2), ShouldEqual, true) + + clonebs1 := bs1.Clone() + clonebs1.InPlaceIntersection(bs2) + if !equalsBitSet(clonebs1, And(rb1, rb2)) { + t := rb1.Clone() + t.And(rb2) + So(equalsBitSet(clonebs1, t), ShouldEqual, true) + } + + // testing OR + clonebs1 = bs1.Clone() + clonebs1.InPlaceUnion(bs2) + + So(equalsBitSet(clonebs1, Or(rb1, rb2)), ShouldEqual, true) + // testing XOR + clonebs1 = bs1.Clone() + clonebs1.InPlaceSymmetricDifference(bs2) + So(equalsBitSet(clonebs1, Xor(rb1, rb2)), ShouldEqual, true) + + //testing NOTAND + clonebs1 = bs1.Clone() + clonebs1.InPlaceDifference(bs2) + So(equalsBitSet(clonebs1, AndNot(rb1, rb2)), ShouldEqual, true) + } + } +} + +func TestRoaringArrayCOW(t *testing.T) { + + a := newRoaringArray() + Convey("Test Init", t, func() { + So(a.size(), ShouldEqual, 0) + }) + + Convey("Test Insert", t, func() { + a.appendContainer(0, newArrayContainer(), false) + + So(a.size(), ShouldEqual, 1) + }) + + Convey("Test Remove", t, func() { + a.remove(0) + So(a.size(), ShouldEqual, 0) + }) + + Convey("Test popcount Full", t, func() { + res := popcount(uint64(0xffffffffffffffff)) + So(res, ShouldEqual, 64) + }) + + Convey("Test popcount Empty", t, func() { + res := popcount(0) + So(res, ShouldEqual, 0) + }) + + Convey("Test popcount 16", t, func() { + res := popcount(0xff00ff) + So(res, ShouldEqual, 16) + }) + + Convey("Test ArrayContainer Add", t, func() { + ar := newArrayContainer() + ar.iadd(1) + So(ar.getCardinality(), ShouldEqual, 1) + }) + + Convey("Test ArrayContainer Add wacky", t, func() { + ar := newArrayContainer() + ar.iadd(0) + ar.iadd(5000) + So(ar.getCardinality(), ShouldEqual, 2) + }) + + Convey("Test ArrayContainer Add Reverse", t, func() { + ar := newArrayContainer() + ar.iadd(5000) + ar.iadd(2048) + ar.iadd(0) + So(ar.getCardinality(), ShouldEqual, 3) + }) + + Convey("Test BitmapContainer Add ", t, func() { + bm := newBitmapContainer() + bm.iadd(0) + So(bm.getCardinality(), ShouldEqual, 1) + }) + +} + +func TestFlipBigACOW(t *testing.T) { + Convey("flipTestBigA ", t, func() { + numCases := 1000 + bs := bitset.New(0) + checkTime := 2.0 + rb1 := NewBitmap() + rb1.SetCopyOnWrite(true) + rb2 := NewBitmap() + rb2.SetCopyOnWrite(true) + + for i := 0; i < numCases; i++ { + start := rand.Intn(65536 * 20) + end := rand.Intn(65536 * 20) + if rand.Float64() < 0.1 { + end = start + rand.Intn(100) + } + + if (i & 1) == 0 { + rb2 = FlipInt(rb1, start, end) + // tweak the other, catch bad sharing + rb1.FlipInt(rand.Intn(65536*20), rand.Intn(65536*20)) + } else { + rb1 = FlipInt(rb2, start, end) + rb2.FlipInt(rand.Intn(65536*20), rand.Intn(65536*20)) + } + + if start < end { + FlipRange(start, end, bs) // throws exception + } + // otherwise + // insert some more ANDs to keep things sparser + if (rand.Float64() < 0.2) && (i&1) == 0 { + mask := NewBitmap() + mask.SetCopyOnWrite(true) + mask1 := bitset.New(0) + startM := rand.Intn(65536 * 20) + endM := startM + 100000 + mask.FlipInt(startM, endM) + FlipRange(startM, endM, mask1) + mask.FlipInt(0, 65536*20+100000) + FlipRange(0, 65536*20+100000, mask1) + rb2.And(mask) + bs.InPlaceIntersection(mask1) + } + + if float64(i) > checkTime { + var rb *Bitmap + + if (i & 1) == 0 { + rb = rb2 + } else { + rb = rb1 + } + So(equalsBitSet(bs, rb), ShouldEqual, true) + checkTime *= 1.5 + } + } + }) +} + +func TestDoubleAddCOW(t *testing.T) { + Convey("doubleadd ", t, func() { + rb := NewBitmap() + rb.SetCopyOnWrite(true) + rb.AddRange(65533, 65536) + rb.AddRange(65530, 65536) + rb2 := NewBitmap() + rb2.SetCopyOnWrite(true) + rb2.AddRange(65530, 65536) + So(rb.Equals(rb2), ShouldEqual, true) + rb2.RemoveRange(65530, 65536) + So(rb2.GetCardinality(), ShouldEqual, 0) + }) +} + +func TestDoubleAdd2COW(t *testing.T) { + Convey("doubleadd2 ", t, func() { + rb := NewBitmap() + rb.SetCopyOnWrite(true) + rb.AddRange(65533, 65536*20) + rb.AddRange(65530, 65536*20) + rb2 := NewBitmap() + rb2.SetCopyOnWrite(true) + rb2.AddRange(65530, 65536*20) + So(rb.Equals(rb2), ShouldEqual, true) + rb2.RemoveRange(65530, 65536*20) + So(rb2.GetCardinality(), ShouldEqual, 0) + }) +} + +func TestDoubleAdd3COW(t *testing.T) { + Convey("doubleadd3 ", t, func() { + rb := NewBitmap() + rb.SetCopyOnWrite(true) + rb.AddRange(65533, 65536*20+10) + rb.AddRange(65530, 65536*20+10) + rb2 := NewBitmap() + rb2.SetCopyOnWrite(true) + rb2.AddRange(65530, 65536*20+10) + So(rb.Equals(rb2), ShouldEqual, true) + rb2.RemoveRange(65530, 65536*20+1) + So(rb2.GetCardinality(), ShouldEqual, 9) + }) +} + +func TestDoubleAdd4COW(t *testing.T) { + Convey("doubleadd4 ", t, func() { + rb := NewBitmap() + rb.SetCopyOnWrite(true) + rb.AddRange(65533, 65536*20) + rb.RemoveRange(65533+5, 65536*20) + So(rb.GetCardinality(), ShouldEqual, 5) + }) +} + +func TestDoubleAdd5COW(t *testing.T) { + Convey("doubleadd5 ", t, func() { + rb := NewBitmap() + rb.SetCopyOnWrite(true) + rb.AddRange(65533, 65536*20) + rb.RemoveRange(65533+5, 65536*20-5) + So(rb.GetCardinality(), ShouldEqual, 10) + }) +} + +func TestDoubleAdd6COW(t *testing.T) { + Convey("doubleadd6 ", t, func() { + rb := NewBitmap() + rb.SetCopyOnWrite(true) + rb.AddRange(65533, 65536*20-5) + rb.RemoveRange(65533+5, 65536*20-10) + So(rb.GetCardinality(), ShouldEqual, 10) + }) +} + +func TestDoubleAdd7COW(t *testing.T) { + Convey("doubleadd7 ", t, func() { + rb := NewBitmap() + rb.SetCopyOnWrite(true) + rb.AddRange(65533, 65536*20+1) + rb.RemoveRange(65533+1, 65536*20) + So(rb.GetCardinality(), ShouldEqual, 2) + }) +} + +func TestDoubleAndNotBug01COW(t *testing.T) { + Convey("AndNotBug01 ", t, func() { + rb1 := NewBitmap() + rb1.SetCopyOnWrite(true) + rb1.AddRange(0, 60000) + rb2 := NewBitmap() + rb2.SetCopyOnWrite(true) + rb2.AddRange(60000-10, 60000+10) + rb2.AndNot(rb1) + rb3 := NewBitmap() + rb3.SetCopyOnWrite(true) + rb3.AddRange(60000, 60000+10) + + So(rb2.Equals(rb3), ShouldBeTrue) + }) +} + +func TestAndNotCOW(t *testing.T) { + + Convey("Test ANDNOT", t, func() { + rr := NewBitmap() + rr.SetCopyOnWrite(true) + for k := 4000; k < 4256; k++ { + rr.AddInt(k) + } + for k := 65536; k < 65536+4000; k++ { + rr.AddInt(k) + } + for k := 3 * 65536; k < 3*65536+9000; k++ { + rr.AddInt(k) + } + for k := 4 * 65535; k < 4*65535+7000; k++ { + rr.AddInt(k) + } + for k := 6 * 65535; k < 6*65535+10000; k++ { + rr.AddInt(k) + } + for k := 8 * 65535; k < 8*65535+1000; k++ { + rr.AddInt(k) + } + for k := 9 * 65535; k < 9*65535+30000; k++ { + rr.AddInt(k) + } + + rr2 := NewBitmap() + rr2.SetCopyOnWrite(true) + for k := 4000; k < 4256; k++ { + rr2.AddInt(k) + } + for k := 65536; k < 65536+4000; k++ { + rr2.AddInt(k) + } + for k := 3*65536 + 2000; k < 3*65536+6000; k++ { + rr2.AddInt(k) + } + for k := 6 * 65535; k < 6*65535+1000; k++ { + rr2.AddInt(k) + } + for k := 7 * 65535; k < 7*65535+1000; k++ { + rr2.AddInt(k) + } + for k := 10 * 65535; k < 10*65535+5000; k++ { + rr2.AddInt(k) + } + correct := AndNot(rr, rr2) + rr.AndNot(rr2) + + So(correct.Equals(rr), ShouldEqual, true) + }) +} + +func TestStatsCOW(t *testing.T) { + Convey("Test Stats with empty bitmap", t, func() { + expectedStats := Statistics{} + rr := NewBitmap() + rr.SetCopyOnWrite(true) + So(rr.Stats(), ShouldResemble, expectedStats) + }) + Convey("Test Stats with bitmap Container", t, func() { + // Given a bitmap that should have a single bitmap container + expectedStats := Statistics{ + Cardinality: 60000, + Containers: 1, + + BitmapContainers: 1, + BitmapContainerValues: 60000, + BitmapContainerBytes: 8192, + + RunContainers: 0, + RunContainerBytes: 0, + RunContainerValues: 0, + } + rr := NewBitmap() + rr.SetCopyOnWrite(true) + for i := uint32(0); i < 60000; i++ { + rr.Add(i) + } + So(rr.Stats(), ShouldResemble, expectedStats) + }) + + Convey("Test Stats with run Container", t, func() { + // Given that we should have a single run container + expectedStats := Statistics{ + Cardinality: 60000, + Containers: 1, + + BitmapContainers: 0, + BitmapContainerValues: 0, + BitmapContainerBytes: 0, + + RunContainers: 1, + RunContainerBytes: 52, + RunContainerValues: 60000, + } + rr := NewBitmap() + rr.SetCopyOnWrite(true) + rr.AddRange(0, 60000) + So(rr.Stats(), ShouldResemble, expectedStats) + }) + Convey("Test Stats with Array Container", t, func() { + // Given a bitmap that should have a single array container + expectedStats := Statistics{ + Cardinality: 2, + Containers: 1, + + ArrayContainers: 1, + ArrayContainerValues: 2, + ArrayContainerBytes: 4, + } + rr := NewBitmap() + rr.SetCopyOnWrite(true) + rr.Add(2) + rr.Add(4) + So(rr.Stats(), ShouldResemble, expectedStats) + }) +} + +func TestFlipVerySmallCOW(t *testing.T) { + Convey("very small basic Flip test", t, func() { + rb := NewBitmap() + rb.SetCopyOnWrite(true) + rb.Flip(0, 10) // got [0,9], card is 10 + rb.Flip(0, 1) // give back the number 0, card goes to 9 + rbcard := rb.GetCardinality() + So(rbcard, ShouldEqual, 9) + }) +} diff --git a/vendor/github.com/RoaringBitmap/roaring/serialization.go b/vendor/github.com/RoaringBitmap/roaring/serialization.go new file mode 100644 index 0000000..af7b26f --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/serialization.go @@ -0,0 +1,106 @@ +package roaring + +import ( + "encoding/binary" + "fmt" + "io" + + "github.com/tinylib/msgp/msgp" +) + +// writeTo for runContainer16 follows this +// spec: https://github.com/RoaringBitmap/RoaringFormatSpec +// +func (b *runContainer16) writeTo(stream io.Writer) (int, error) { + buf := make([]byte, 2+4*len(b.iv)) + binary.LittleEndian.PutUint16(buf[0:], uint16(len(b.iv))) + for i, v := range b.iv { + binary.LittleEndian.PutUint16(buf[2+i*4:], v.start) + binary.LittleEndian.PutUint16(buf[2+2+i*4:], v.last-v.start) + } + return stream.Write(buf) +} + +func (b *runContainer32) writeToMsgpack(stream io.Writer) (int, error) { + bts, err := b.MarshalMsg(nil) + if err != nil { + return 0, err + } + return stream.Write(bts) +} + +func (b *runContainer16) writeToMsgpack(stream io.Writer) (int, error) { + bts, err := b.MarshalMsg(nil) + if err != nil { + return 0, err + } + return stream.Write(bts) +} + +func (b *runContainer32) readFromMsgpack(stream io.Reader) (int, error) { + err := msgp.Decode(stream, b) + return 0, err +} + +func (b *runContainer16) readFromMsgpack(stream io.Reader) (int, error) { + err := msgp.Decode(stream, b) + return 0, err +} + +func (b *runContainer16) readFrom(stream io.Reader) (int, error) { + b.iv = b.iv[:0] + b.card = 0 + var numRuns uint16 + err := binary.Read(stream, binary.LittleEndian, &numRuns) + if err != nil { + return 0, err + } + encRun := make([]uint16, 2*numRuns) + by := make([]byte, 4*numRuns) + err = binary.Read(stream, binary.LittleEndian, &by) + if err != nil { + return 0, err + } + for i := range encRun { + if len(by) < 2 { + panic("insufficient/odd number of stored bytes, corrupted stream detected") + } + encRun[i] = binary.LittleEndian.Uint16(by) + by = by[2:] + } + nr := int(numRuns) + for i := 0; i < nr; i++ { + if i > 0 && b.iv[i-1].last >= encRun[i*2] { + panic(fmt.Errorf("error: stored runContainer had runs that were not in sorted order!! (b.iv[i-1=%v].last = %v >= encRun[i=%v] = %v)", i-1, b.iv[i-1].last, i, encRun[i*2])) + } + b.iv = append(b.iv, interval16{start: encRun[i*2], last: encRun[i*2] + encRun[i*2+1]}) + b.card += int64(encRun[i*2+1]) + 1 + } + return 0, err +} + +// Converts a byte slice to a interval16 slice. +// The function assumes that the slice byte buffer is run container data +// encoded according to Roaring Format Spec +func byteSliceAsInterval16Slice(byteSlice []byte) []interval16 { + // Since interval16 is currently implemented as a start-last pair + // whereas the Roaring Spec Format says the data is serialized as start-length + // To compensate for this mismatch we have to copy the slice and re-calculate the values + + if len(byteSlice)%4 != 0 { + panic("Slice size should be divisible by 4") + } + + encSlice := byteSliceAsUint16Slice(byteSlice) + + intervalSlice := make([]interval16, len(byteSlice)/4) + + for i := range intervalSlice { + intervalSlice[i] = interval16{ + start: encSlice[2*i], + last: encSlice[2*i] + encSlice[i*2+1], + } + } + + return intervalSlice +} diff --git a/vendor/github.com/RoaringBitmap/roaring/serialization_generic.go b/vendor/github.com/RoaringBitmap/roaring/serialization_generic.go new file mode 100644 index 0000000..b276d6d --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/serialization_generic.go @@ -0,0 +1,87 @@ +// +build !amd64,!386 appengine + +package roaring + +import ( + "encoding/binary" + "io" +) + +func (b *arrayContainer) writeTo(stream io.Writer) (int, error) { + buf := make([]byte, 2*len(b.content)) + for i, v := range b.content { + base := i * 2 + buf[base] = byte(v) + buf[base+1] = byte(v >> 8) + } + return stream.Write(buf) +} + +func (b *arrayContainer) readFrom(stream io.Reader) (int, error) { + err := binary.Read(stream, binary.LittleEndian, b.content) + if err != nil { + return 0, err + } + return 2 * len(b.content), nil +} + +func (b *bitmapContainer) writeTo(stream io.Writer) (int, error) { + // Write set + buf := make([]byte, 8*len(b.bitmap)) + for i, v := range b.bitmap { + base := i * 8 + buf[base] = byte(v) + buf[base+1] = byte(v >> 8) + buf[base+2] = byte(v >> 16) + buf[base+3] = byte(v >> 24) + buf[base+4] = byte(v >> 32) + buf[base+5] = byte(v >> 40) + buf[base+6] = byte(v >> 48) + buf[base+7] = byte(v >> 56) + } + return stream.Write(buf) +} + +func (b *bitmapContainer) readFrom(stream io.Reader) (int, error) { + err := binary.Read(stream, binary.LittleEndian, b.bitmap) + if err != nil { + return 0, err + } + return 8 * len(b.bitmap), nil +} + +func (bc *bitmapContainer) asLittleEndianByteSlice() []byte { + by := make([]byte, len(bc.bitmap)*8) + for i := range bc.bitmap { + binary.LittleEndian.PutUint64(by[i*8:], bc.bitmap[i]) + } + return by +} + +func byteSliceAsUint16Slice(slice []byte) []uint16 { + if len(slice)%2 != 0 { + panic("Slice size should be divisible by 2") + } + + b := make([]uint16, len(slice), len(slice)) + + for i := range b { + b[i] = binary.LittleEndian.Uint16(slice[2*i:]) + } + + return b +} + +func byteSliceAsUint64Slice(slice []byte) []uint64 { + if len(slice)%8 != 0 { + panic("Slice size should be divisible by 8") + } + + b := make([]uint64, len(slice), len(slice)) + + for i := range b { + b[i] = binary.LittleEndian.Uint64(slice[8*i:]) + } + + return b +} diff --git a/vendor/github.com/RoaringBitmap/roaring/serialization_littleendian.go b/vendor/github.com/RoaringBitmap/roaring/serialization_littleendian.go new file mode 100644 index 0000000..0169f35 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/serialization_littleendian.go @@ -0,0 +1,97 @@ +// +build 386 amd64,!appengine + +package roaring + +import ( + "io" + "reflect" + "unsafe" +) + +func (ac *arrayContainer) writeTo(stream io.Writer) (int, error) { + buf := uint16SliceAsByteSlice(ac.content) + return stream.Write(buf) +} + +func (bc *bitmapContainer) writeTo(stream io.Writer) (int, error) { + buf := uint64SliceAsByteSlice(bc.bitmap) + return stream.Write(buf) +} + +// readFrom reads an arrayContainer from stream. +// PRE-REQUISITE: you must size the arrayContainer correctly (allocate b.content) +// *before* you call readFrom. We can't guess the size in the stream +// by this point. +func (ac *arrayContainer) readFrom(stream io.Reader) (int, error) { + buf := uint16SliceAsByteSlice(ac.content) + return io.ReadFull(stream, buf) +} + +func (bc *bitmapContainer) readFrom(stream io.Reader) (int, error) { + buf := uint64SliceAsByteSlice(bc.bitmap) + n, err := io.ReadFull(stream, buf) + bc.computeCardinality() + return n, err +} + +func uint64SliceAsByteSlice(slice []uint64) []byte { + // make a new slice header + header := *(*reflect.SliceHeader)(unsafe.Pointer(&slice)) + + // update its capacity and length + header.Len *= 8 + header.Cap *= 8 + + // return it + return *(*[]byte)(unsafe.Pointer(&header)) +} + +func uint16SliceAsByteSlice(slice []uint16) []byte { + // make a new slice header + header := *(*reflect.SliceHeader)(unsafe.Pointer(&slice)) + + // update its capacity and length + header.Len *= 2 + header.Cap *= 2 + + // return it + return *(*[]byte)(unsafe.Pointer(&header)) +} + +func (bc *bitmapContainer) asLittleEndianByteSlice() []byte { + return uint64SliceAsByteSlice(bc.bitmap) +} + +// Deserialization code follows + +func byteSliceAsUint16Slice(slice []byte) []uint16 { + if len(slice)%2 != 0 { + panic("Slice size should be divisible by 2") + } + + // make a new slice header + header := *(*reflect.SliceHeader)(unsafe.Pointer(&slice)) + + // update its capacity and length + header.Len /= 2 + header.Cap /= 2 + + // return it + return *(*[]uint16)(unsafe.Pointer(&header)) +} + +func byteSliceAsUint64Slice(slice []byte) []uint64 { + if len(slice)%8 != 0 { + panic("Slice size should be divisible by 8") + } + + // make a new slice header + header := *(*reflect.SliceHeader)(unsafe.Pointer(&slice)) + + // update its capacity and length + header.Len /= 8 + header.Cap /= 8 + + // return it + return *(*[]uint64)(unsafe.Pointer(&header)) +} diff --git a/vendor/github.com/RoaringBitmap/roaring/serialization_test.go b/vendor/github.com/RoaringBitmap/roaring/serialization_test.go new file mode 100644 index 0000000..14ccc11 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/serialization_test.go @@ -0,0 +1,945 @@ +package roaring + +// to run just these tests: go test -run TestSerialization* + +import ( + "bytes" + "encoding/binary" + "encoding/gob" + "fmt" + "io/ioutil" + "math/rand" + "os" + "testing" + + . "github.com/smartystreets/goconvey/convey" +) + +func TestSerializationOfEmptyBitmap(t *testing.T) { + rb := NewBitmap() + + buf := &bytes.Buffer{} + _, err := rb.WriteTo(buf) + if err != nil { + t.Errorf("Failed writing") + } + + newrb := NewBitmap() + _, err = newrb.ReadFrom(buf) + if err != nil { + t.Errorf("Failed reading: %v", err) + } + if !rb.Equals(newrb) { + p("rb = '%s'", rb) + p("but newrb = '%s'", newrb) + t.Errorf("Cannot retrieve serialized version; rb != newrb") + } +} + +func TestBase64_036(t *testing.T) { + rb := BitmapOf(1, 2, 3, 4, 5, 100, 1000) + + bstr, _ := rb.ToBase64() + + if bstr == "" { + t.Errorf("ToBase64 failed returned empty string") + } + + newrb := NewBitmap() + + _, err := newrb.FromBase64(bstr) + + if err != nil { + t.Errorf("Failed reading from base64 string") + } + + if !rb.Equals(newrb) { + t.Errorf("comparing the base64 to and from failed cannot retrieve serialized version") + } +} + +func TestSerializationBasic037(t *testing.T) { + + rb := BitmapOf(1, 2, 3, 4, 5, 100, 1000) + + buf := &bytes.Buffer{} + _, err := rb.WriteTo(buf) + if err != nil { + t.Errorf("Failed writing") + } + + newrb := NewBitmap() + _, err = newrb.ReadFrom(buf) + if err != nil { + t.Errorf("Failed reading") + } + if !rb.Equals(newrb) { + p("rb = '%s'", rb) + p("but newrb = '%s'", newrb) + t.Errorf("Cannot retrieve serialized version; rb != newrb") + } +} + +func TestSerializationToFile038(t *testing.T) { + rb := BitmapOf(1, 2, 3, 4, 5, 100, 1000) + fname := "myfile.bin" + fout, err := os.OpenFile(fname, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0660) + if err != nil { + t.Errorf("Can't open a file for writing") + } + _, err = rb.WriteTo(fout) + if err != nil { + t.Errorf("Failed writing") + } + fout.Close() + + newrb := NewBitmap() + fin, err := os.Open(fname) + + if err != nil { + t.Errorf("Failed reading") + } + defer func() { + fin.Close() + err := os.Remove(fname) + if err != nil { + t.Errorf("could not delete %s ", fname) + } + }() + _, _ = newrb.ReadFrom(fin) + if !rb.Equals(newrb) { + t.Errorf("Cannot retrieve serialized version") + } +} + +func TestSerializationReadRunsFromFile039(t *testing.T) { + fn := "testdata/bitmapwithruns.bin" + + p("reading file '%s'", fn) + by, err := ioutil.ReadFile(fn) + if err != nil { + panic(err) + } + + newrb := NewBitmap() + _, err = newrb.ReadFrom(bytes.NewBuffer(by)) + if err != nil { + t.Errorf("Failed reading %s: %s", fn, err) + } +} + +func TestSerializationBasic4WriteAndReadFile040(t *testing.T) { + + //fname := "testdata/all3.msgp.snappy" + fname := "testdata/all3.classic" + + rb := NewBitmap() + for k := uint32(0); k < 100000; k += 1000 { + rb.Add(k) + } + for k := uint32(100000); k < 200000; k++ { + rb.Add(3 * k) + } + for k := uint32(700000); k < 800000; k++ { + rb.Add(k) + } + rb.highlowcontainer.runOptimize() + + p("TestSerializationBasic4WriteAndReadFile is writing to '%s'", fname) + fout, err := os.Create(fname) + if err != nil { + t.Errorf("Failed creating '%s'", fname) + } + _, err = rb.WriteTo(fout) + if err != nil { + t.Errorf("Failed writing to '%s'", fname) + } + fout.Close() + + fin, err := os.Open(fname) + if err != nil { + t.Errorf("Failed to Open '%s'", fname) + } + defer fin.Close() + + newrb := NewBitmap() + _, err = newrb.ReadFrom(fin) + if err != nil { + t.Errorf("Failed reading from '%s': %s", fname, err) + } + if !rb.Equals(newrb) { + t.Errorf("Bad serialization") + } +} + +func TestSerializationFromJava051(t *testing.T) { + fname := "testdata/bitmapwithoutruns.bin" + newrb := NewBitmap() + fin, err := os.Open(fname) + + if err != nil { + t.Errorf("Failed reading") + } + defer func() { + fin.Close() + }() + + _, _ = newrb.ReadFrom(fin) + fmt.Println(newrb.GetCardinality()) + rb := NewBitmap() + for k := uint32(0); k < 100000; k += 1000 { + rb.Add(k) + } + for k := uint32(100000); k < 200000; k++ { + rb.Add(3 * k) + } + for k := uint32(700000); k < 800000; k++ { + rb.Add(k) + } + fmt.Println(rb.GetCardinality()) + if !rb.Equals(newrb) { + t.Errorf("Bad serialization") + } + +} + +func TestSerializationFromJavaWithRuns052(t *testing.T) { + fname := "testdata/bitmapwithruns.bin" + newrb := NewBitmap() + fin, err := os.Open(fname) + + if err != nil { + t.Errorf("Failed reading") + } + defer func() { + fin.Close() + }() + _, _ = newrb.ReadFrom(fin) + rb := NewBitmap() + for k := uint32(0); k < 100000; k += 1000 { + rb.Add(k) + } + for k := uint32(100000); k < 200000; k++ { + rb.Add(3 * k) + } + for k := uint32(700000); k < 800000; k++ { + rb.Add(k) + } + if !rb.Equals(newrb) { + t.Errorf("Bad serialization") + } + +} + +func TestSerializationBasic2_041(t *testing.T) { + + rb := BitmapOf(1, 2, 3, 4, 5, 100, 1000, 10000, 100000, 1000000) + buf := &bytes.Buffer{} + sz := rb.GetSerializedSizeInBytes() + ub := BoundSerializedSizeInBytes(rb.GetCardinality(), 1000001) + if sz > ub+10 { + t.Errorf("Bad GetSerializedSizeInBytes; sz=%v, upper-bound=%v", sz, ub) + } + l := int(rb.GetSerializedSizeInBytes()) + _, err := rb.WriteTo(buf) + if err != nil { + t.Errorf("Failed writing") + } + if l != buf.Len() { + t.Errorf("Bad GetSerializedSizeInBytes") + } + newrb := NewBitmap() + _, err = newrb.ReadFrom(buf) + if err != nil { + t.Errorf("Failed reading") + } + if !rb.Equals(newrb) { + t.Errorf("Cannot retrieve serialized version") + } +} + +func TestSerializationBasic3_042(t *testing.T) { + + Convey("roaringarray.writeTo and .readFrom should serialize and unserialize when containing all 3 container types", t, func() { + rb := BitmapOf(1, 2, 3, 4, 5, 100, 1000, 10000, 100000, 1000000) + for i := 5000000; i < 5000000+2*(1<<16); i++ { + rb.AddInt(i) + } + + // confirm all three types present + var bc, ac, rc bool + for _, v := range rb.highlowcontainer.containers { + switch cn := v.(type) { + case *bitmapContainer: + bc = true + case *arrayContainer: + ac = true + case *runContainer16: + rc = true + default: + panic(fmt.Errorf("Unrecognized container implementation: %T", cn)) + } + } + if !bc { + t.Errorf("no bitmapContainer found, change your test input so we test all three!") + } + if !ac { + t.Errorf("no arrayContainer found, change your test input so we test all three!") + } + if !rc { + t.Errorf("no runContainer16 found, change your test input so we test all three!") + } + + var buf bytes.Buffer + _, err := rb.WriteTo(&buf) + if err != nil { + t.Errorf("Failed writing") + } + + newrb := NewBitmap() + _, err = newrb.ReadFrom(&buf) + if err != nil { + t.Errorf("Failed reading") + } + c1, c2 := rb.GetCardinality(), newrb.GetCardinality() + So(c2, ShouldEqual, c1) + So(newrb.Equals(rb), ShouldBeTrue) + //fmt.Printf("\n Basic3: good: match on card = %v", c1) + }) +} + +func TestGobcoding043(t *testing.T) { + rb := BitmapOf(1, 2, 3, 4, 5, 100, 1000) + + buf := new(bytes.Buffer) + encoder := gob.NewEncoder(buf) + err := encoder.Encode(rb) + if err != nil { + t.Errorf("Gob encoding failed") + } + + var b Bitmap + decoder := gob.NewDecoder(buf) + err = decoder.Decode(&b) + if err != nil { + t.Errorf("Gob decoding failed") + } + + if !b.Equals(rb) { + t.Errorf("Decoded bitmap does not equal input bitmap") + } +} + +func TestSerializationRunContainerMsgpack028(t *testing.T) { + + Convey("runContainer writeTo and readFrom should return logically equivalent containers", t, func() { + seed := int64(42) + p("seed is %v", seed) + rand.Seed(seed) + + trials := []trial{ + {n: 10, percentFill: .2, ntrial: 10}, + {n: 10, percentFill: .8, ntrial: 10}, + {n: 10, percentFill: .50, ntrial: 10}, + /* + trial{n: 10, percentFill: .01, ntrial: 10}, + trial{n: 1000, percentFill: .50, ntrial: 10}, + trial{n: 1000, percentFill: .99, ntrial: 10}, + */ + } + + tester := func(tr trial) { + for j := 0; j < tr.ntrial; j++ { + p("TestSerializationRunContainerMsgpack028 on check# j=%v", j) + + ma := make(map[int]bool) + + n := tr.n + a := []uint16{} + + draw := int(float64(n) * tr.percentFill) + for i := 0; i < draw; i++ { + r0 := rand.Intn(n) + a = append(a, uint16(r0)) + ma[r0] = true + } + + orig := newRunContainer16FromVals(false, a...) + + // serialize + var buf bytes.Buffer + _, err := orig.writeToMsgpack(&buf) + if err != nil { + panic(err) + } + + // deserialize + restored := &runContainer16{} + _, err = restored.readFromMsgpack(&buf) + if err != nil { + panic(err) + } + + // and compare + So(restored.equals(orig), ShouldBeTrue) + + } + p("done with serialization of runContainer16 check for trial %#v", tr) + } + + for i := range trials { + tester(trials[i]) + } + + }) +} + +func TestSerializationArrayOnly032(t *testing.T) { + + Convey("arrayContainer writeTo and readFrom should return logically equivalent containers, so long as you pre-size the write target properly", t, func() { + + seed := int64(42) + p("seed is %v", seed) + rand.Seed(seed) + + trials := []trial{ + {n: 101, percentFill: .50, ntrial: 10}, + } + + tester := func(tr trial) { + for j := 0; j < tr.ntrial; j++ { + p(" on check# j=%v", j) + ma := make(map[int]bool) + + n := tr.n + + draw := int(float64(n) * tr.percentFill) + for i := 0; i < draw; i++ { + r0 := rand.Intn(n) + ma[r0] = true + } + + //showArray16(a, "a") + + // vs arrayContainer + ac := newArrayContainer() + for k := range ma { + ac.iadd(uint16(k)) + } + + buf := &bytes.Buffer{} + _, err := ac.writeTo(buf) + panicOn(err) + + // have to pre-size the array write-target properly + // by telling it the cardinality to read. + ac2 := newArrayContainerSize(int(ac.getCardinality())) + + _, err = ac2.readFrom(buf) + panicOn(err) + So(ac2.String(), ShouldResemble, ac.String()) + } + p("done with randomized writeTo/readFrom for arrayContainer"+ + " checks for trial %#v", tr) + } + + for i := range trials { + tester(trials[i]) + } + }) +} + +func TestSerializationRunOnly033(t *testing.T) { + + Convey("runContainer16 writeTo and readFrom should return logically equivalent containers", t, func() { + + seed := int64(42) + p("seed is %v", seed) + rand.Seed(seed) + + trials := []trial{ + {n: 100, percentFill: .50, ntrial: 1}, + } + + tester := func(tr trial) { + for j := 0; j < tr.ntrial; j++ { + p(" on check# j=%v", j) + ma := make(map[int]bool) + + n := tr.n + + draw := int(float64(n) * tr.percentFill) + for i := 0; i < draw; i++ { + r0 := rand.Intn(n) + ma[r0] = true + } + + ac := newRunContainer16() + for k := range ma { + ac.iadd(uint16(k)) + } + + buf := &bytes.Buffer{} + _, err := ac.writeTo(buf) + panicOn(err) + + ac2 := newRunContainer16() + + _, err = ac2.readFrom(buf) + panicOn(err) + So(ac2.equals(ac), ShouldBeTrue) + So(ac2.String(), ShouldResemble, ac.String()) + } + p("done with randomized writeTo/readFrom for runContainer16"+ + " checks for trial %#v", tr) + } + + for i := range trials { + tester(trials[i]) + } + }) +} + +func TestSerializationBitmapOnly034(t *testing.T) { + + Convey("bitmapContainer writeTo and readFrom should return logically equivalent containers", t, func() { + + seed := int64(42) + p("seed is %v", seed) + rand.Seed(seed) + + trials := []trial{ + {n: 1010, percentFill: .50, ntrial: 10}, + } + + tester := func(tr trial) { + for j := 0; j < tr.ntrial; j++ { + p(" on check# j=%v", j) + ma := make(map[int]bool) + + n := tr.n + + draw := int(float64(n) * tr.percentFill) + for i := 0; i < draw; i++ { + r0 := rand.Intn(n) + ma[r0] = true + } + + //showArray16(a, "a") + + bc := newBitmapContainer() + for k := range ma { + bc.iadd(uint16(k)) + } + + buf := &bytes.Buffer{} + _, err := bc.writeTo(buf) + panicOn(err) + + bc2 := newBitmapContainer() + + _, err = bc2.readFrom(buf) + panicOn(err) + So(bc2.String(), ShouldResemble, bc.String()) + So(bc2.equals(bc), ShouldBeTrue) + } + p("done with randomized writeTo/readFrom for bitmapContainer"+ + " checks for trial %#v", tr) + } + + for i := range trials { + tester(trials[i]) + } + }) +} + +func TestSerializationBasicMsgpack035(t *testing.T) { + + Convey("roaringarray.writeToMsgpack and .readFromMsgpack should serialize and unserialize when containing all 3 container types", t, func() { + rb := BitmapOf(1, 2, 3, 4, 5, 100, 1000, 10000, 100000, 1000000) + for i := 5000000; i < 5000000+2*(1<<16); i++ { + rb.AddInt(i) + } + + // confirm all three types present + var bc, ac, rc bool + for _, v := range rb.highlowcontainer.containers { + switch cn := v.(type) { + case *bitmapContainer: + bc = true + So(cn.containerType(), ShouldEqual, bitmapContype) + case *arrayContainer: + ac = true + So(cn.containerType(), ShouldEqual, arrayContype) + case *runContainer16: + rc = true + So(cn.containerType(), ShouldEqual, run16Contype) + default: + panic(fmt.Errorf("Unrecognized container implementation: %T", cn)) + } + } + if !bc { + t.Errorf("no bitmapContainer found, change your test input so we test all three!") + } + if !ac { + t.Errorf("no arrayContainer found, change your test input so we test all three!") + } + if !rc { + t.Errorf("no runContainer16 found, change your test input so we test all three!") + } + + var buf bytes.Buffer + _, err := rb.WriteToMsgpack(&buf) + if err != nil { + t.Errorf("Failed writing") + } + + newrb := NewBitmap() + _, err = newrb.ReadFromMsgpack(&buf) + if err != nil { + t.Errorf("Failed reading") + } + c1, c2 := rb.GetCardinality(), newrb.GetCardinality() + So(c2, ShouldEqual, c1) + So(newrb.Equals(rb), ShouldBeTrue) + //fmt.Printf("\n Basic3: good: match on card = %v", c1) + }) +} + +func TestSerializationRunContainer32Msgpack050(t *testing.T) { + + Convey("runContainer32 writeToMsgpack and readFromMsgpack should save/load data", t, func() { + seed := int64(42) + p("seed is %v", seed) + rand.Seed(seed) + + trials := []trial{ + {n: 10, percentFill: .2, ntrial: 1}, + /* trial{n: 10, percentFill: .8, ntrial: 10}, + trial{n: 10, percentFill: .50, ntrial: 10}, + + trial{n: 10, percentFill: .01, ntrial: 10}, + trial{n: 1000, percentFill: .50, ntrial: 10}, + trial{n: 1000, percentFill: .99, ntrial: 10}, + */ + } + + tester := func(tr trial) { + for j := 0; j < tr.ntrial; j++ { + p("TestSerializationRunContainer32Msgpack050 on check# j=%v", j) + + ma := make(map[int]bool) + + n := tr.n + a := []uint32{} + + draw := int(float64(n) * tr.percentFill) + for i := 0; i < draw; i++ { + r0 := rand.Intn(n) + a = append(a, uint32(r0)) + ma[r0] = true + } + + orig := newRunContainer32FromVals(false, a...) + + // serialize + var buf bytes.Buffer + _, err := orig.writeToMsgpack(&buf) + if err != nil { + panic(err) + } + + // deserialize + restored := &runContainer32{} + _, err = restored.readFromMsgpack(&buf) + if err != nil { + panic(err) + } + + // and compare + So(restored.equals32(orig), ShouldBeTrue) + orig.removeKey(1) + + // coverage + var notEq = newRunContainer32Range(1, 1) + So(notEq.equals32(orig), ShouldBeFalse) + + bc := newBitmapContainer() + bc.iadd(1) + bc.iadd(2) + rc22 := newRunContainer32FromBitmapContainer(bc) + So(rc22.cardinality(), ShouldEqual, 2) + } + p("done with msgpack serialization of runContainer32 check for trial %#v", tr) + } + + for i := range trials { + tester(trials[i]) + } + + }) +} + +func TestByteSliceAsUint16Slice(t *testing.T) { + t.Run("valid slice", func(t *testing.T) { + expectedSize := 2 + slice := make([]byte, 4) + binary.LittleEndian.PutUint16(slice, 42) + binary.LittleEndian.PutUint16(slice[2:], 43) + + uint16Slice := byteSliceAsUint16Slice(slice) + + if len(uint16Slice) != expectedSize { + t.Errorf("Expected output slice length %d, got %d", expectedSize, len(uint16Slice)) + } + if cap(uint16Slice) != expectedSize { + t.Errorf("Expected output slice cap %d, got %d", expectedSize, cap(uint16Slice)) + } + + if uint16Slice[0] != 42 || uint16Slice[1] != 43 { + t.Errorf("Unexpected value found in result slice") + } + }) + + t.Run("empty slice", func(t *testing.T) { + slice := make([]byte, 0, 0) + + uint16Slice := byteSliceAsUint16Slice(slice) + if len(uint16Slice) != 0 { + t.Errorf("Expected output slice length 0, got %d", len(uint16Slice)) + } + if cap(uint16Slice) != 0 { + t.Errorf("Expected output slice cap 0, got %d", len(uint16Slice)) + } + }) + + t.Run("invalid slice size", func(t *testing.T) { + defer func() { + // All fine + _ = recover() + }() + + slice := make([]byte, 1, 1) + + byteSliceAsUint16Slice(slice) + + t.Errorf("byteSliceAsUint16Slice should panic on invalid slice size") + }) +} + +func TestByteSliceAsUint64Slice(t *testing.T) { + t.Run("valid slice", func(t *testing.T) { + expectedSize := 2 + slice := make([]byte, 16) + binary.LittleEndian.PutUint64(slice, 42) + binary.LittleEndian.PutUint64(slice[8:], 43) + + uint64Slice := byteSliceAsUint64Slice(slice) + + if len(uint64Slice) != expectedSize { + t.Errorf("Expected output slice length %d, got %d", expectedSize, len(uint64Slice)) + } + if cap(uint64Slice) != expectedSize { + t.Errorf("Expected output slice cap %d, got %d", expectedSize, cap(uint64Slice)) + } + + if uint64Slice[0] != 42 || uint64Slice[1] != 43 { + t.Errorf("Unexpected value found in result slice") + } + }) + + t.Run("empty slice", func(t *testing.T) { + slice := make([]byte, 0, 0) + + uint64Slice := byteSliceAsUint64Slice(slice) + if len(uint64Slice) != 0 { + t.Errorf("Expected output slice length 0, got %d", len(uint64Slice)) + } + if len(uint64Slice) != 0 { + t.Errorf("Expected output slice length 0, got %d", len(uint64Slice)) + } + }) + + t.Run("invalid slice size", func(t *testing.T) { + defer func() { + // All fine + _ = recover() + }() + + slice := make([]byte, 1, 1) + + byteSliceAsUint64Slice(slice) + + t.Errorf("byteSliceAsUint64Slice should panic on invalid slice size") + }) +} + +func TestByteSliceAsInterval16Slice(t *testing.T) { + t.Run("valid slice", func(t *testing.T) { + expectedSize := 2 + slice := make([]byte, 8) + binary.LittleEndian.PutUint16(slice, 10) + binary.LittleEndian.PutUint16(slice[2:], 2) + binary.LittleEndian.PutUint16(slice[4:], 20) + binary.LittleEndian.PutUint16(slice[6:], 2) + + intervalSlice := byteSliceAsInterval16Slice(slice) + + if len(intervalSlice) != expectedSize { + t.Errorf("Expected output slice length %d, got %d", expectedSize, len(intervalSlice)) + } + + if cap(intervalSlice) != expectedSize { + t.Errorf("Expected output slice cap %d, got %d", expectedSize, len(intervalSlice)) + } + + i1 := interval16{10, 12} + i2 := interval16{20, 22} + if intervalSlice[0] != i1 || intervalSlice[1] != i2 { + t.Errorf("Unexpected items in result slice") + } + }) + + t.Run("empty slice", func(t *testing.T) { + slice := make([]byte, 0, 0) + + intervalSlice := byteSliceAsInterval16Slice(slice) + if len(intervalSlice) != 0 { + t.Errorf("Expected output slice length 0, got %d", len(intervalSlice)) + } + if len(intervalSlice) != 0 { + t.Errorf("Expected output slice length 0, got %d", len(intervalSlice)) + } + }) + + t.Run("invalid slice length", func(t *testing.T) { + defer func() { + // All fine + _ = recover() + }() + + slice := make([]byte, 1, 1) + + byteSliceAsInterval16Slice(slice) + + t.Errorf("byteSliceAsInterval16Slice should panic on invalid slice size") + + }) + +} + +func TestBitmap_FromBuffer(t *testing.T) { + t.Run("empty bitmap", func(t *testing.T) { + rb := NewBitmap() + + buf := &bytes.Buffer{} + _, err := rb.WriteTo(buf) + if err != nil { + t.Fatalf("Failed writing") + } + + newRb := NewBitmap() + newRb.FromBuffer(buf.Bytes()) + + if err != nil { + t.Errorf("Failed reading: %v", err) + } + if !rb.Equals(newRb) { + t.Errorf("Cannot retrieve serialized version; rb != newRb") + } + }) + + t.Run("basic bitmap of 7 elements", func(t *testing.T) { + rb := BitmapOf(1, 2, 3, 4, 5, 100, 1000) + + buf := &bytes.Buffer{} + _, err := rb.WriteTo(buf) + if err != nil { + t.Fatalf("Failed writing") + } + + newRb := NewBitmap() + _, err = newRb.FromBuffer(buf.Bytes()) + if err != nil { + t.Errorf("Failed reading") + } + if !rb.Equals(newRb) { + t.Errorf("Cannot retrieve serialized version; rb != newRb") + } + }) + + t.Run("bitmap with runs", func(t *testing.T) { + file := "testdata/bitmapwithruns.bin" + + buf, err := ioutil.ReadFile(file) + if err != nil { + t.Fatalf("Failed to read file") + } + + rb := NewBitmap() + _, err = rb.FromBuffer(buf) + + if err != nil { + t.Errorf("Failed reading %s: %s", file, err) + } + if rb.Stats().RunContainers != 3 { + t.Errorf("Bitmap should contain 3 run containers, was: %d", rb.Stats().RunContainers) + } + if rb.Stats().Containers != 11 { + t.Errorf("Bitmap should contain a total of 11 containers, was %d", rb.Stats().Containers) + } + }) + + t.Run("bitmap without runs", func(t *testing.T) { + fn := "testdata/bitmapwithruns.bin" + + buf, err := ioutil.ReadFile(fn) + if err != nil { + t.Fatalf("Failed to read file") + } + + rb := NewBitmap() + _, err = rb.FromBuffer(buf) + if err != nil { + t.Errorf("Failed reading %s: %s", fn, err) + } + }) + + t.Run("all3.classic bitmap", func(t *testing.T) { + file := "testdata/all3.classic" + + buf, err := ioutil.ReadFile(file) + if err != nil { + t.Fatalf("Failed to read file") + } + + rb := NewBitmap() + _, err = rb.FromBuffer(buf) + if err != nil { + t.Errorf("Failed reading %s: %s", file, err) + } + }) + + t.Run("marking all containers as requiring COW", func(t *testing.T) { + file := "testdata/bitmapwithruns.bin" + + buf, err := ioutil.ReadFile(file) + if err != nil { + t.Fatalf("Failed to read file") + } + + rb := NewBitmap() + _, err = rb.FromBuffer(buf) + + if err != nil { + t.Fatalf("Failed reading %s: %s", file, err) + } + + for i, cow := range rb.highlowcontainer.needCopyOnWrite { + if !cow { + t.Errorf("Container at pos %d was not marked as needs-copy-on-write", i) + } + } + }) + +} diff --git a/vendor/github.com/RoaringBitmap/roaring/setutil.go b/vendor/github.com/RoaringBitmap/roaring/setutil.go new file mode 100644 index 0000000..3e8c01d --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/setutil.go @@ -0,0 +1,609 @@ +package roaring + +func equal(a, b []uint16) bool { + if len(a) != len(b) { + return false + } + for i := range a { + if a[i] != b[i] { + return false + } + } + return true +} + +func difference(set1 []uint16, set2 []uint16, buffer []uint16) int { + if 0 == len(set2) { + for k := 0; k < len(set1); k++ { + buffer[k] = set1[k] + } + return len(set1) + } + if 0 == len(set1) { + return 0 + } + pos := 0 + k1 := 0 + k2 := 0 + buffer = buffer[:cap(buffer)] + s1 := set1[k1] + s2 := set2[k2] + for { + if s1 < s2 { + buffer[pos] = s1 + pos++ + k1++ + if k1 >= len(set1) { + break + } + s1 = set1[k1] + } else if s1 == s2 { + k1++ + k2++ + if k1 >= len(set1) { + break + } + s1 = set1[k1] + if k2 >= len(set2) { + for ; k1 < len(set1); k1++ { + buffer[pos] = set1[k1] + pos++ + } + break + } + s2 = set2[k2] + } else { // if (val1>val2) + k2++ + if k2 >= len(set2) { + for ; k1 < len(set1); k1++ { + buffer[pos] = set1[k1] + pos++ + } + break + } + s2 = set2[k2] + } + } + return pos + +} + +func exclusiveUnion2by2(set1 []uint16, set2 []uint16, buffer []uint16) int { + if 0 == len(set2) { + buffer = buffer[:len(set1)] + copy(buffer, set1[:]) + return len(set1) + } + if 0 == len(set1) { + buffer = buffer[:len(set2)] + copy(buffer, set2[:]) + return len(set2) + } + pos := 0 + k1 := 0 + k2 := 0 + s1 := set1[k1] + s2 := set2[k2] + buffer = buffer[:cap(buffer)] + for { + if s1 < s2 { + buffer[pos] = s1 + pos++ + k1++ + if k1 >= len(set1) { + for ; k2 < len(set2); k2++ { + buffer[pos] = set2[k2] + pos++ + } + break + } + s1 = set1[k1] + } else if s1 == s2 { + k1++ + k2++ + if k1 >= len(set1) { + for ; k2 < len(set2); k2++ { + buffer[pos] = set2[k2] + pos++ + } + break + } + if k2 >= len(set2) { + for ; k1 < len(set1); k1++ { + buffer[pos] = set1[k1] + pos++ + } + break + } + s1 = set1[k1] + s2 = set2[k2] + } else { // if (val1>val2) + buffer[pos] = s2 + pos++ + k2++ + if k2 >= len(set2) { + for ; k1 < len(set1); k1++ { + buffer[pos] = set1[k1] + pos++ + } + break + } + s2 = set2[k2] + } + } + return pos +} + +func union2by2(set1 []uint16, set2 []uint16, buffer []uint16) int { + pos := 0 + k1 := 0 + k2 := 0 + if 0 == len(set2) { + buffer = buffer[:len(set1)] + copy(buffer, set1[:]) + return len(set1) + } + if 0 == len(set1) { + buffer = buffer[:len(set2)] + copy(buffer, set2[:]) + return len(set2) + } + s1 := set1[k1] + s2 := set2[k2] + buffer = buffer[:cap(buffer)] + for { + if s1 < s2 { + buffer[pos] = s1 + pos++ + k1++ + if k1 >= len(set1) { + copy(buffer[pos:], set2[k2:]) + pos += len(set2) - k2 + break + } + s1 = set1[k1] + } else if s1 == s2 { + buffer[pos] = s1 + pos++ + k1++ + k2++ + if k1 >= len(set1) { + copy(buffer[pos:], set2[k2:]) + pos += len(set2) - k2 + break + } + if k2 >= len(set2) { + copy(buffer[pos:], set1[k1:]) + pos += len(set1) - k1 + break + } + s1 = set1[k1] + s2 = set2[k2] + } else { // if (set1[k1]>set2[k2]) + buffer[pos] = s2 + pos++ + k2++ + if k2 >= len(set2) { + copy(buffer[pos:], set1[k1:]) + pos += len(set1) - k1 + break + } + s2 = set2[k2] + } + } + return pos +} + +func union2by2Cardinality(set1 []uint16, set2 []uint16) int { + pos := 0 + k1 := 0 + k2 := 0 + if 0 == len(set2) { + return len(set1) + } + if 0 == len(set1) { + return len(set2) + } + s1 := set1[k1] + s2 := set2[k2] + for { + if s1 < s2 { + pos++ + k1++ + if k1 >= len(set1) { + pos += len(set2) - k2 + break + } + s1 = set1[k1] + } else if s1 == s2 { + pos++ + k1++ + k2++ + if k1 >= len(set1) { + pos += len(set2) - k2 + break + } + if k2 >= len(set2) { + pos += len(set1) - k1 + break + } + s1 = set1[k1] + s2 = set2[k2] + } else { // if (set1[k1]>set2[k2]) + pos++ + k2++ + if k2 >= len(set2) { + pos += len(set1) - k1 + break + } + s2 = set2[k2] + } + } + return pos +} + +func intersection2by2( + set1 []uint16, + set2 []uint16, + buffer []uint16) int { + + if len(set1)*64 < len(set2) { + return onesidedgallopingintersect2by2(set1, set2, buffer) + } else if len(set2)*64 < len(set1) { + return onesidedgallopingintersect2by2(set2, set1, buffer) + } else { + return localintersect2by2(set1, set2, buffer) + } +} + +func intersection2by2Cardinality( + set1 []uint16, + set2 []uint16) int { + + if len(set1)*64 < len(set2) { + return onesidedgallopingintersect2by2Cardinality(set1, set2) + } else if len(set2)*64 < len(set1) { + return onesidedgallopingintersect2by2Cardinality(set2, set1) + } else { + return localintersect2by2Cardinality(set1, set2) + } +} + +func intersects2by2( + set1 []uint16, + set2 []uint16) bool { + // could be optimized if one set is much larger than the other one + if (0 == len(set1)) || (0 == len(set2)) { + return false + } + k1 := 0 + k2 := 0 + s1 := set1[k1] + s2 := set2[k2] +mainwhile: + for { + + if s2 < s1 { + for { + k2++ + if k2 == len(set2) { + break mainwhile + } + s2 = set2[k2] + if s2 >= s1 { + break + } + } + } + if s1 < s2 { + for { + k1++ + if k1 == len(set1) { + break mainwhile + } + s1 = set1[k1] + if s1 >= s2 { + break + } + } + + } else { + // (set2[k2] == set1[k1]) + return true + } + } + return false +} + +func localintersect2by2( + set1 []uint16, + set2 []uint16, + buffer []uint16) int { + + if (0 == len(set1)) || (0 == len(set2)) { + return 0 + } + k1 := 0 + k2 := 0 + pos := 0 + buffer = buffer[:cap(buffer)] + s1 := set1[k1] + s2 := set2[k2] +mainwhile: + for { + if s2 < s1 { + for { + k2++ + if k2 == len(set2) { + break mainwhile + } + s2 = set2[k2] + if s2 >= s1 { + break + } + } + } + if s1 < s2 { + for { + k1++ + if k1 == len(set1) { + break mainwhile + } + s1 = set1[k1] + if s1 >= s2 { + break + } + } + + } else { + // (set2[k2] == set1[k1]) + buffer[pos] = s1 + pos++ + k1++ + if k1 == len(set1) { + break + } + s1 = set1[k1] + k2++ + if k2 == len(set2) { + break + } + s2 = set2[k2] + } + } + return pos +} + +func localintersect2by2Cardinality( + set1 []uint16, + set2 []uint16) int { + + if (0 == len(set1)) || (0 == len(set2)) { + return 0 + } + k1 := 0 + k2 := 0 + pos := 0 + s1 := set1[k1] + s2 := set2[k2] +mainwhile: + for { + if s2 < s1 { + for { + k2++ + if k2 == len(set2) { + break mainwhile + } + s2 = set2[k2] + if s2 >= s1 { + break + } + } + } + if s1 < s2 { + for { + k1++ + if k1 == len(set1) { + break mainwhile + } + s1 = set1[k1] + if s1 >= s2 { + break + } + } + + } else { + // (set2[k2] == set1[k1]) + pos++ + k1++ + if k1 == len(set1) { + break + } + s1 = set1[k1] + k2++ + if k2 == len(set2) { + break + } + s2 = set2[k2] + } + } + return pos +} + +func advanceUntil( + array []uint16, + pos int, + length int, + min uint16) int { + lower := pos + 1 + + if lower >= length || array[lower] >= min { + return lower + } + + spansize := 1 + + for lower+spansize < length && array[lower+spansize] < min { + spansize *= 2 + } + var upper int + if lower+spansize < length { + upper = lower + spansize + } else { + upper = length - 1 + } + + if array[upper] == min { + return upper + } + + if array[upper] < min { + // means + // array + // has no + // item + // >= min + // pos = array.length; + return length + } + + // we know that the next-smallest span was too small + lower += (spansize >> 1) + + mid := 0 + for lower+1 != upper { + mid = (lower + upper) >> 1 + if array[mid] == min { + return mid + } else if array[mid] < min { + lower = mid + } else { + upper = mid + } + } + return upper + +} + +func onesidedgallopingintersect2by2( + smallset []uint16, + largeset []uint16, + buffer []uint16) int { + + if 0 == len(smallset) { + return 0 + } + buffer = buffer[:cap(buffer)] + k1 := 0 + k2 := 0 + pos := 0 + s1 := largeset[k1] + s2 := smallset[k2] +mainwhile: + + for { + if s1 < s2 { + k1 = advanceUntil(largeset, k1, len(largeset), s2) + if k1 == len(largeset) { + break mainwhile + } + s1 = largeset[k1] + } + if s2 < s1 { + k2++ + if k2 == len(smallset) { + break mainwhile + } + s2 = smallset[k2] + } else { + + buffer[pos] = s2 + pos++ + k2++ + if k2 == len(smallset) { + break + } + s2 = smallset[k2] + k1 = advanceUntil(largeset, k1, len(largeset), s2) + if k1 == len(largeset) { + break mainwhile + } + s1 = largeset[k1] + } + + } + return pos +} + +func onesidedgallopingintersect2by2Cardinality( + smallset []uint16, + largeset []uint16) int { + + if 0 == len(smallset) { + return 0 + } + k1 := 0 + k2 := 0 + pos := 0 + s1 := largeset[k1] + s2 := smallset[k2] +mainwhile: + + for { + if s1 < s2 { + k1 = advanceUntil(largeset, k1, len(largeset), s2) + if k1 == len(largeset) { + break mainwhile + } + s1 = largeset[k1] + } + if s2 < s1 { + k2++ + if k2 == len(smallset) { + break mainwhile + } + s2 = smallset[k2] + } else { + + pos++ + k2++ + if k2 == len(smallset) { + break + } + s2 = smallset[k2] + k1 = advanceUntil(largeset, k1, len(largeset), s2) + if k1 == len(largeset) { + break mainwhile + } + s1 = largeset[k1] + } + + } + return pos +} + +func binarySearch(array []uint16, ikey uint16) int { + low := 0 + high := len(array) - 1 + for low+16 <= high { + middleIndex := int(uint32(low+high) >> 1) + middleValue := array[middleIndex] + if middleValue < ikey { + low = middleIndex + 1 + } else if middleValue > ikey { + high = middleIndex - 1 + } else { + return middleIndex + } + } + for ; low <= high; low++ { + val := array[low] + if val >= ikey { + if val == ikey { + return low + } + break + } + } + return -(low + 1) +} diff --git a/vendor/github.com/RoaringBitmap/roaring/setutil_test.go b/vendor/github.com/RoaringBitmap/roaring/setutil_test.go new file mode 100644 index 0000000..43d82cc --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/setutil_test.go @@ -0,0 +1,130 @@ +package roaring + +// to run just these tests: go test -run TestSetUtil* + +import ( + "testing" +) + +func TestSetUtilDifference(t *testing.T) { + data1 := []uint16{0, 1, 2, 3, 4, 9} + data2 := []uint16{2, 3, 4, 5, 8, 9, 11} + result := make([]uint16, 0, len(data1)+len(data2)) + expectedresult := []uint16{0, 1} + nl := difference(data1, data2, result) + result = result[:nl] + if !equal(result, expectedresult) { + t.Errorf("Difference is broken") + } + expectedresult = []uint16{5, 8, 11} + nl = difference(data2, data1, result) + result = result[:nl] + if !equal(result, expectedresult) { + t.Errorf("Difference is broken") + } +} + +func TestSetUtilUnion(t *testing.T) { + data1 := []uint16{0, 1, 2, 3, 4, 9} + data2 := []uint16{2, 3, 4, 5, 8, 9, 11} + result := make([]uint16, 0, len(data1)+len(data2)) + expectedresult := []uint16{0, 1, 2, 3, 4, 5, 8, 9, 11} + nl := union2by2(data1, data2, result) + result = result[:nl] + if !equal(result, expectedresult) { + t.Errorf("Union is broken") + } + nl = union2by2(data2, data1, result) + result = result[:nl] + if !equal(result, expectedresult) { + t.Errorf("Union is broken") + } +} + +func TestSetUtilExclusiveUnion(t *testing.T) { + data1 := []uint16{0, 1, 2, 3, 4, 9} + data2 := []uint16{2, 3, 4, 5, 8, 9, 11} + result := make([]uint16, 0, len(data1)+len(data2)) + expectedresult := []uint16{0, 1, 5, 8, 11} + nl := exclusiveUnion2by2(data1, data2, result) + result = result[:nl] + if !equal(result, expectedresult) { + t.Errorf("Exclusive Union is broken") + } + nl = exclusiveUnion2by2(data2, data1, result) + result = result[:nl] + if !equal(result, expectedresult) { + t.Errorf("Exclusive Union is broken") + } +} + +func TestSetUtilIntersection(t *testing.T) { + data1 := []uint16{0, 1, 2, 3, 4, 9} + data2 := []uint16{2, 3, 4, 5, 8, 9, 11} + result := make([]uint16, 0, len(data1)+len(data2)) + expectedresult := []uint16{2, 3, 4, 9} + nl := intersection2by2(data1, data2, result) + result = result[:nl] + result = result[:len(expectedresult)] + if !equal(result, expectedresult) { + t.Errorf("Intersection is broken") + } + nl = intersection2by2(data2, data1, result) + result = result[:nl] + if !equal(result, expectedresult) { + t.Errorf("Intersection is broken") + } + data1 = []uint16{4} + + data2 = make([]uint16, 10000) + for i := range data2 { + data2[i] = uint16(i) + } + result = make([]uint16, 0, len(data1)+len(data2)) + expectedresult = data1 + nl = intersection2by2(data1, data2, result) + result = result[:nl] + + if !equal(result, expectedresult) { + t.Errorf("Long intersection is broken") + } + nl = intersection2by2(data2, data1, result) + result = result[:nl] + if !equal(result, expectedresult) { + t.Errorf("Long intersection is broken") + } + +} + +func TestSetUtilIntersection2(t *testing.T) { + data1 := []uint16{0, 2, 4, 6, 8, 10, 12, 14, 16, 18} + data2 := []uint16{0, 3, 6, 9, 12, 15, 18} + result := make([]uint16, 0, len(data1)+len(data2)) + expectedresult := []uint16{0, 6, 12, 18} + nl := intersection2by2(data1, data2, result) + result = result[:nl] + result = result[:len(expectedresult)] + if !equal(result, expectedresult) { + t.Errorf("Intersection is broken") + } +} + +func TestSetUtilBinarySearch(t *testing.T) { + data := make([]uint16, 256) + for i := range data { + data[i] = uint16(2 * i) + } + for i := 0; i < 2*len(data); i++ { + key := uint16(i) + loc := binarySearch(data, key) + if (key & 1) == 0 { + if loc != int(key)/2 { + t.Errorf("binary search is broken") + } + } else { + if loc != -int(key)/2-2 { + t.Errorf("neg binary search is broken") + } + } + } +} diff --git a/vendor/github.com/RoaringBitmap/roaring/shortiterator.go b/vendor/github.com/RoaringBitmap/roaring/shortiterator.go new file mode 100644 index 0000000..ef0acbd --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/shortiterator.go @@ -0,0 +1,21 @@ +package roaring + +type shortIterable interface { + hasNext() bool + next() uint16 +} + +type shortIterator struct { + slice []uint16 + loc int +} + +func (si *shortIterator) hasNext() bool { + return si.loc < len(si.slice) +} + +func (si *shortIterator) next() uint16 { + a := si.slice[si.loc] + si.loc++ + return a +} diff --git a/vendor/github.com/RoaringBitmap/roaring/smat.go b/vendor/github.com/RoaringBitmap/roaring/smat.go new file mode 100644 index 0000000..a09450b --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/smat.go @@ -0,0 +1,383 @@ +// +build gofuzz + +/* +# Instructions for smat testing for roaring + +[smat](https://github.com/mschoch/smat) is a framework that provides +state machine assisted fuzz testing. + +To run the smat tests for roaring... + +## Prerequisites + + $ go get github.com/dvyukov/go-fuzz/go-fuzz + $ go get github.com/dvyukov/go-fuzz/go-fuzz-build + +## Steps + +1. Generate initial smat corpus: +``` + go test -tags=gofuzz -run=TestGenerateSmatCorpus +``` + +2. Build go-fuzz test program with instrumentation: +``` + go-fuzz-build github.com/RoaringBitmap/roaring +``` + +3. Run go-fuzz: +``` + go-fuzz -bin=./roaring-fuzz.zip -workdir=workdir/ -timeout=200 +``` + +You should see output like... +``` +2016/09/16 13:58:35 slaves: 8, corpus: 1 (3s ago), crashers: 0, restarts: 1/0, execs: 0 (0/sec), cover: 0, uptime: 3s +2016/09/16 13:58:38 slaves: 8, corpus: 1 (6s ago), crashers: 0, restarts: 1/0, execs: 0 (0/sec), cover: 0, uptime: 6s +2016/09/16 13:58:41 slaves: 8, corpus: 1 (9s ago), crashers: 0, restarts: 1/44, execs: 44 (5/sec), cover: 0, uptime: 9s +2016/09/16 13:58:44 slaves: 8, corpus: 1 (12s ago), crashers: 0, restarts: 1/45, execs: 45 (4/sec), cover: 0, uptime: 12s +2016/09/16 13:58:47 slaves: 8, corpus: 1 (15s ago), crashers: 0, restarts: 1/46, execs: 46 (3/sec), cover: 0, uptime: 15s +2016/09/16 13:58:50 slaves: 8, corpus: 1 (18s ago), crashers: 0, restarts: 1/47, execs: 47 (3/sec), cover: 0, uptime: 18s +2016/09/16 13:58:53 slaves: 8, corpus: 1 (21s ago), crashers: 0, restarts: 1/63, execs: 63 (3/sec), cover: 0, uptime: 21s +2016/09/16 13:58:56 slaves: 8, corpus: 1 (24s ago), crashers: 0, restarts: 1/65, execs: 65 (3/sec), cover: 0, uptime: 24s +2016/09/16 13:58:59 slaves: 8, corpus: 1 (27s ago), crashers: 0, restarts: 1/66, execs: 66 (2/sec), cover: 0, uptime: 27s +2016/09/16 13:59:02 slaves: 8, corpus: 1 (30s ago), crashers: 0, restarts: 1/67, execs: 67 (2/sec), cover: 0, uptime: 30s +2016/09/16 13:59:05 slaves: 8, corpus: 1 (33s ago), crashers: 0, restarts: 1/83, execs: 83 (3/sec), cover: 0, uptime: 33s +2016/09/16 13:59:08 slaves: 8, corpus: 1 (36s ago), crashers: 0, restarts: 1/84, execs: 84 (2/sec), cover: 0, uptime: 36s +2016/09/16 13:59:11 slaves: 8, corpus: 2 (0s ago), crashers: 0, restarts: 1/85, execs: 85 (2/sec), cover: 0, uptime: 39s +2016/09/16 13:59:14 slaves: 8, corpus: 17 (2s ago), crashers: 0, restarts: 1/86, execs: 86 (2/sec), cover: 480, uptime: 42s +2016/09/16 13:59:17 slaves: 8, corpus: 17 (5s ago), crashers: 0, restarts: 1/66, execs: 132 (3/sec), cover: 487, uptime: 45s +2016/09/16 13:59:20 slaves: 8, corpus: 17 (8s ago), crashers: 0, restarts: 1/440, execs: 2645 (55/sec), cover: 487, uptime: 48s + +``` + +Let it run, and if the # of crashers is > 0, check out the reports in +the workdir where you should be able to find the panic goroutine stack +traces. +*/ + +package roaring + +import ( + "fmt" + "sort" + + "github.com/mschoch/smat" + "github.com/willf/bitset" +) + +// fuzz test using state machine driven by byte stream. +func Fuzz(data []byte) int { + return smat.Fuzz(&smatContext{}, smat.ActionID('S'), smat.ActionID('T'), + smatActionMap, data) +} + +var smatDebug = false + +func smatLog(prefix, format string, args ...interface{}) { + if smatDebug { + fmt.Print(prefix) + fmt.Printf(format, args...) + } +} + +type smatContext struct { + pairs []*smatPair + + // Two registers, x & y. + x int + y int + + actions int +} + +type smatPair struct { + bm *Bitmap + bs *bitset.BitSet +} + +// ------------------------------------------------------------------ + +var smatActionMap = smat.ActionMap{ + smat.ActionID('X'): smatAction("x++", smatWrap(func(c *smatContext) { c.x++ })), + smat.ActionID('x'): smatAction("x--", smatWrap(func(c *smatContext) { c.x-- })), + smat.ActionID('Y'): smatAction("y++", smatWrap(func(c *smatContext) { c.y++ })), + smat.ActionID('y'): smatAction("y--", smatWrap(func(c *smatContext) { c.y-- })), + smat.ActionID('*'): smatAction("x*y", smatWrap(func(c *smatContext) { c.x = c.x * c.y })), + smat.ActionID('<'): smatAction("x<<", smatWrap(func(c *smatContext) { c.x = c.x << 1 })), + + smat.ActionID('^'): smatAction("swap", smatWrap(func(c *smatContext) { c.x, c.y = c.y, c.x })), + + smat.ActionID('['): smatAction(" pushPair", smatWrap(smatPushPair)), + smat.ActionID(']'): smatAction(" popPair", smatWrap(smatPopPair)), + + smat.ActionID('B'): smatAction(" setBit", smatWrap(smatSetBit)), + smat.ActionID('b'): smatAction(" removeBit", smatWrap(smatRemoveBit)), + + smat.ActionID('o'): smatAction(" or", smatWrap(smatOr)), + smat.ActionID('a'): smatAction(" and", smatWrap(smatAnd)), + + smat.ActionID('#'): smatAction(" cardinality", smatWrap(smatCardinality)), + + smat.ActionID('O'): smatAction(" orCardinality", smatWrap(smatOrCardinality)), + smat.ActionID('A'): smatAction(" andCardinality", smatWrap(smatAndCardinality)), + + smat.ActionID('c'): smatAction(" clear", smatWrap(smatClear)), + smat.ActionID('r'): smatAction(" runOptimize", smatWrap(smatRunOptimize)), + + smat.ActionID('e'): smatAction(" isEmpty", smatWrap(smatIsEmpty)), + + smat.ActionID('i'): smatAction(" intersects", smatWrap(smatIntersects)), + + smat.ActionID('f'): smatAction(" flip", smatWrap(smatFlip)), + + smat.ActionID('-'): smatAction(" difference", smatWrap(smatDifference)), +} + +var smatRunningPercentActions []smat.PercentAction + +func init() { + var ids []int + for actionId := range smatActionMap { + ids = append(ids, int(actionId)) + } + sort.Ints(ids) + + pct := 100 / len(smatActionMap) + for _, actionId := range ids { + smatRunningPercentActions = append(smatRunningPercentActions, + smat.PercentAction{pct, smat.ActionID(actionId)}) + } + + smatActionMap[smat.ActionID('S')] = smatAction("SETUP", smatSetupFunc) + smatActionMap[smat.ActionID('T')] = smatAction("TEARDOWN", smatTeardownFunc) +} + +// We only have one smat state: running. +func smatRunning(next byte) smat.ActionID { + return smat.PercentExecute(next, smatRunningPercentActions...) +} + +func smatAction(name string, f func(ctx smat.Context) (smat.State, error)) func(smat.Context) (smat.State, error) { + return func(ctx smat.Context) (smat.State, error) { + c := ctx.(*smatContext) + c.actions++ + + smatLog(" ", "%s\n", name) + + return f(ctx) + } +} + +// Creates an smat action func based on a simple callback. +func smatWrap(cb func(c *smatContext)) func(smat.Context) (next smat.State, err error) { + return func(ctx smat.Context) (next smat.State, err error) { + c := ctx.(*smatContext) + cb(c) + return smatRunning, nil + } +} + +// Invokes a callback function with the input v bounded to len(c.pairs). +func (c *smatContext) withPair(v int, cb func(*smatPair)) { + if len(c.pairs) > 0 { + if v < 0 { + v = -v + } + v = v % len(c.pairs) + cb(c.pairs[v]) + } +} + +// ------------------------------------------------------------------ + +func smatSetupFunc(ctx smat.Context) (next smat.State, err error) { + return smatRunning, nil +} + +func smatTeardownFunc(ctx smat.Context) (next smat.State, err error) { + return nil, err +} + +// ------------------------------------------------------------------ + +func smatPushPair(c *smatContext) { + c.pairs = append(c.pairs, &smatPair{ + bm: NewBitmap(), + bs: bitset.New(100), + }) +} + +func smatPopPair(c *smatContext) { + if len(c.pairs) > 0 { + c.pairs = c.pairs[0 : len(c.pairs)-1] + } +} + +func smatSetBit(c *smatContext) { + c.withPair(c.x, func(p *smatPair) { + y := uint32(c.y) + p.bm.AddInt(int(y)) + p.bs.Set(uint(y)) + p.checkEquals() + }) +} + +func smatRemoveBit(c *smatContext) { + c.withPair(c.x, func(p *smatPair) { + y := uint32(c.y) + p.bm.Remove(y) + p.bs.Clear(uint(y)) + p.checkEquals() + }) +} + +func smatAnd(c *smatContext) { + c.withPair(c.x, func(px *smatPair) { + c.withPair(c.y, func(py *smatPair) { + px.bm.And(py.bm) + px.bs = px.bs.Intersection(py.bs) + px.checkEquals() + py.checkEquals() + }) + }) +} + +func smatOr(c *smatContext) { + c.withPair(c.x, func(px *smatPair) { + c.withPair(c.y, func(py *smatPair) { + px.bm.Or(py.bm) + px.bs = px.bs.Union(py.bs) + px.checkEquals() + py.checkEquals() + }) + }) +} + +func smatAndCardinality(c *smatContext) { + c.withPair(c.x, func(px *smatPair) { + c.withPair(c.y, func(py *smatPair) { + c0 := px.bm.AndCardinality(py.bm) + c1 := px.bs.IntersectionCardinality(py.bs) + if c0 != uint64(c1) { + panic("expected same add cardinality") + } + px.checkEquals() + py.checkEquals() + }) + }) +} + +func smatOrCardinality(c *smatContext) { + c.withPair(c.x, func(px *smatPair) { + c.withPair(c.y, func(py *smatPair) { + c0 := px.bm.OrCardinality(py.bm) + c1 := px.bs.UnionCardinality(py.bs) + if c0 != uint64(c1) { + panic("expected same or cardinality") + } + px.checkEquals() + py.checkEquals() + }) + }) +} + +func smatRunOptimize(c *smatContext) { + c.withPair(c.x, func(px *smatPair) { + px.bm.RunOptimize() + px.checkEquals() + }) +} + +func smatClear(c *smatContext) { + c.withPair(c.x, func(px *smatPair) { + px.bm.Clear() + px.bs = px.bs.ClearAll() + px.checkEquals() + }) +} + +func smatCardinality(c *smatContext) { + c.withPair(c.x, func(px *smatPair) { + c0 := px.bm.GetCardinality() + c1 := px.bs.Count() + if c0 != uint64(c1) { + panic("expected same cardinality") + } + }) +} + +func smatIsEmpty(c *smatContext) { + c.withPair(c.x, func(px *smatPair) { + c0 := px.bm.IsEmpty() + c1 := px.bs.None() + if c0 != c1 { + panic("expected same is empty") + } + }) +} + +func smatIntersects(c *smatContext) { + c.withPair(c.x, func(px *smatPair) { + c.withPair(c.y, func(py *smatPair) { + v0 := px.bm.Intersects(py.bm) + v1 := px.bs.IntersectionCardinality(py.bs) > 0 + if v0 != v1 { + panic("intersects not equal") + } + + px.checkEquals() + py.checkEquals() + }) + }) +} + +func smatFlip(c *smatContext) { + c.withPair(c.x, func(p *smatPair) { + y := uint32(c.y) + p.bm.Flip(uint64(y), uint64(y)+1) + p.bs = p.bs.Flip(uint(y)) + p.checkEquals() + }) +} + +func smatDifference(c *smatContext) { + c.withPair(c.x, func(px *smatPair) { + c.withPair(c.y, func(py *smatPair) { + px.bm.AndNot(py.bm) + px.bs = px.bs.Difference(py.bs) + px.checkEquals() + py.checkEquals() + }) + }) +} + +func (p *smatPair) checkEquals() { + if !p.equalsBitSet(p.bs, p.bm) { + panic("bitset mismatch") + } +} + +func (p *smatPair) equalsBitSet(a *bitset.BitSet, b *Bitmap) bool { + for i, e := a.NextSet(0); e; i, e = a.NextSet(i + 1) { + if !b.ContainsInt(int(i)) { + fmt.Printf("in a bitset, not b bitmap, i: %d\n", i) + fmt.Printf(" a bitset: %s\n b bitmap: %s\n", + a.String(), b.String()) + return false + } + } + + i := b.Iterator() + for i.HasNext() { + v := i.Next() + if !a.Test(uint(v)) { + fmt.Printf("in b bitmap, not a bitset, v: %d\n", v) + fmt.Printf(" a bitset: %s\n b bitmap: %s\n", + a.String(), b.String()) + return false + } + } + + return true +} diff --git a/vendor/github.com/RoaringBitmap/roaring/smat_generate_test.go b/vendor/github.com/RoaringBitmap/roaring/smat_generate_test.go new file mode 100644 index 0000000..3d0f5c4 --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/smat_generate_test.go @@ -0,0 +1,55 @@ +// +build gofuzz + +package roaring + +import ( + "fmt" + "io/ioutil" + "os" + "testing" + + "github.com/mschoch/smat" +) + +func TestGenerateSmatCorpus(t *testing.T) { + for i, actionSeq := range smatActionSeqs { + byteSequence, err := actionSeq.ByteEncoding(&smatContext{}, + smat.ActionID('S'), smat.ActionID('T'), smatActionMap) + if err != nil { + t.Fatalf("error from ByteEncoding, err: %v, i: %d, actonSeq: %#v", + err, i, actionSeq) + } + os.MkdirAll("workdir/corpus", 0700) + ioutil.WriteFile(fmt.Sprintf("workdir/corpus/%d", i), byteSequence, 0600) + } +} + +var smatActionSeqs = []smat.ActionSeq{ + { + smat.ActionID('X'), + smat.ActionID('X'), + smat.ActionID('Y'), + smat.ActionID('Y'), + smat.ActionID('<'), + smat.ActionID('<'), + smat.ActionID('*'), + smat.ActionID('x'), + smat.ActionID('y'), + smat.ActionID('*'), + smat.ActionID('['), + smat.ActionID('['), + smat.ActionID('B'), + smat.ActionID('a'), + smat.ActionID('o'), + smat.ActionID('A'), + smat.ActionID('O'), + smat.ActionID('#'), + smat.ActionID('X'), + smat.ActionID('Y'), + smat.ActionID('B'), + smat.ActionID('e'), + smat.ActionID('f'), + smat.ActionID('-'), + smat.ActionID('e'), + }, +} diff --git a/vendor/github.com/RoaringBitmap/roaring/smat_hits_test.go b/vendor/github.com/RoaringBitmap/roaring/smat_hits_test.go new file mode 100644 index 0000000..5369a3e --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/smat_hits_test.go @@ -0,0 +1,56 @@ +// Copyright (c) 2016 Couchbase, 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. + +// +build gofuzz + +package roaring + +import ( + "log" + "testing" + + "github.com/mschoch/smat" +) + +// Crashers reported by smat, captured as pairs of strings. A pair is +// a short descrption of the crash then the corresponding crash-input. +var smatHits = []string{ + "0001:\n" + + "in a bitset, not b bitmap, pos: 0\n" + + " a bitset: {0,1}\n" + + " b bitmap: {1,0}\n" + + "panic: bitset mismatch\n" + + " SETUP\n" + + " pushPair\n" + + " setBit\n" + + " y++\n" + + " flip\n", + "]5S\xa5", +} + +// Test the previous issues found by smat. +func TestSmatHits(t *testing.T) { + smatDebugPrev := smatDebug + smatDebug = true // Use true when diagnosing a crash. + + for i := 0; i < len(smatHits); i += 2 { + desc := smatHits[i] + hit := []byte(smatHits[i+1]) + + log.Printf("testing smat hit: (%d) %s\n", i/2, desc) + + // fuzz the hit input + smat.Fuzz(&smatContext{}, smat.ActionID('S'), smat.ActionID('T'), + smatActionMap, hit) + } + + smatDebug = smatDebugPrev +} diff --git a/vendor/github.com/RoaringBitmap/roaring/testdata/bitmapwithoutruns.bin b/vendor/github.com/RoaringBitmap/roaring/testdata/bitmapwithoutruns.bin new file mode 100644 index 0000000..a99fd50 Binary files /dev/null and b/vendor/github.com/RoaringBitmap/roaring/testdata/bitmapwithoutruns.bin differ diff --git a/vendor/github.com/RoaringBitmap/roaring/testdata/bitmapwithruns.bin b/vendor/github.com/RoaringBitmap/roaring/testdata/bitmapwithruns.bin new file mode 100644 index 0000000..5ed2437 Binary files /dev/null and b/vendor/github.com/RoaringBitmap/roaring/testdata/bitmapwithruns.bin differ diff --git a/vendor/github.com/RoaringBitmap/roaring/util.go b/vendor/github.com/RoaringBitmap/roaring/util.go new file mode 100644 index 0000000..89aca5a --- /dev/null +++ b/vendor/github.com/RoaringBitmap/roaring/util.go @@ -0,0 +1,270 @@ +package roaring + +import ( + "math/rand" + "sort" +) + +const ( + arrayDefaultMaxSize = 4096 // containers with 4096 or fewer integers should be array containers. + arrayLazyLowerBound = 1024 + maxCapacity = 1 << 16 + serialCookieNoRunContainer = 12346 // only arrays and bitmaps + invalidCardinality = -1 + serialCookie = 12347 // runs, arrays, and bitmaps + noOffsetThreshold = 4 + + // Compute wordSizeInBytes, the size of a word in bytes. + _m = ^word(0) + _logS = _m>>8&1 + _m>>16&1 + _m>>32&1 + wordSizeInBytes = 1 << _logS + + // other constants used in ctz_generic.go + wordSizeInBits = wordSizeInBytes << 3 // word size in bits + digitBase = 1 << wordSizeInBits // digit base + digitMask = digitBase - 1 // digit mask +) + +type word uintptr + +const maxWord = 1< arrayDefaultMaxSize { + // bitmapContainer + return maxCapacity / 8 + } + // arrayContainer + return 2 * card +} + +func fill(arr []uint64, val uint64) { + for i := range arr { + arr[i] = val + } +} +func fillRange(arr []uint64, start, end int, val uint64) { + for i := start; i < end; i++ { + arr[i] = val + } +} + +func fillArrayAND(container []uint16, bitmap1, bitmap2 []uint64) { + if len(bitmap1) != len(bitmap2) { + panic("array lengths don't match") + } + // TODO: rewrite in assembly + pos := 0 + for k := range bitmap1 { + bitset := bitmap1[k] & bitmap2[k] + for bitset != 0 { + t := bitset & -bitset + container[pos] = uint16((k*64 + int(popcount(t-1)))) + pos = pos + 1 + bitset ^= t + } + } +} + +func fillArrayANDNOT(container []uint16, bitmap1, bitmap2 []uint64) { + if len(bitmap1) != len(bitmap2) { + panic("array lengths don't match") + } + // TODO: rewrite in assembly + pos := 0 + for k := range bitmap1 { + bitset := bitmap1[k] &^ bitmap2[k] + for bitset != 0 { + t := bitset & -bitset + container[pos] = uint16((k*64 + int(popcount(t-1)))) + pos = pos + 1 + bitset ^= t + } + } +} + +func fillArrayXOR(container []uint16, bitmap1, bitmap2 []uint64) { + if len(bitmap1) != len(bitmap2) { + panic("array lengths don't match") + } + // TODO: rewrite in assembly + pos := 0 + for k := 0; k < len(bitmap1); k++ { + bitset := bitmap1[k] ^ bitmap2[k] + for bitset != 0 { + t := bitset & -bitset + container[pos] = uint16((k*64 + int(popcount(t-1)))) + pos = pos + 1 + bitset ^= t + } + } +} + +func highbits(x uint32) uint16 { + return uint16(x >> 16) +} +func lowbits(x uint32) uint16 { + return uint16(x & 0xFFFF) +} + +const maxLowBit = 0xFFFF + +func flipBitmapRange(bitmap []uint64, start int, end int) { + if start >= end { + return + } + firstword := start / 64 + endword := (end - 1) / 64 + bitmap[firstword] ^= ^(^uint64(0) << uint(start%64)) + for i := firstword; i < endword; i++ { + //p("flipBitmapRange on i=%v", i) + bitmap[i] = ^bitmap[i] + } + bitmap[endword] ^= ^uint64(0) >> (uint(-end) % 64) +} + +func resetBitmapRange(bitmap []uint64, start int, end int) { + if start >= end { + return + } + firstword := start / 64 + endword := (end - 1) / 64 + if firstword == endword { + bitmap[firstword] &= ^((^uint64(0) << uint(start%64)) & (^uint64(0) >> (uint(-end) % 64))) + return + } + bitmap[firstword] &= ^(^uint64(0) << uint(start%64)) + for i := firstword + 1; i < endword; i++ { + bitmap[i] = 0 + } + bitmap[endword] &= ^(^uint64(0) >> (uint(-end) % 64)) + +} + +func setBitmapRange(bitmap []uint64, start int, end int) { + if start >= end { + return + } + firstword := start / 64 + endword := (end - 1) / 64 + if firstword == endword { + bitmap[firstword] |= (^uint64(0) << uint(start%64)) & (^uint64(0) >> (uint(-end) % 64)) + return + } + bitmap[firstword] |= ^uint64(0) << uint(start%64) + for i := firstword + 1; i < endword; i++ { + bitmap[i] = ^uint64(0) + } + bitmap[endword] |= ^uint64(0) >> (uint(-end) % 64) +} + +func flipBitmapRangeAndCardinalityChange(bitmap []uint64, start int, end int) int { + before := wordCardinalityForBitmapRange(bitmap, start, end) + flipBitmapRange(bitmap, start, end) + after := wordCardinalityForBitmapRange(bitmap, start, end) + return int(after - before) +} + +func resetBitmapRangeAndCardinalityChange(bitmap []uint64, start int, end int) int { + before := wordCardinalityForBitmapRange(bitmap, start, end) + resetBitmapRange(bitmap, start, end) + after := wordCardinalityForBitmapRange(bitmap, start, end) + return int(after - before) +} + +func setBitmapRangeAndCardinalityChange(bitmap []uint64, start int, end int) int { + before := wordCardinalityForBitmapRange(bitmap, start, end) + setBitmapRange(bitmap, start, end) + after := wordCardinalityForBitmapRange(bitmap, start, end) + return int(after - before) +} + +func wordCardinalityForBitmapRange(bitmap []uint64, start int, end int) uint64 { + answer := uint64(0) + if start >= end { + return answer + } + firstword := start / 64 + endword := (end - 1) / 64 + for i := firstword; i <= endword; i++ { + answer += popcount(bitmap[i]) + } + return answer +} + +func selectBitPosition(w uint64, j int) int { + seen := 0 + + // Divide 64bit + part := w & 0xFFFFFFFF + n := popcount(part) + if n <= uint64(j) { + part = w >> 32 + seen += 32 + j -= int(n) + } + w = part + + // Divide 32bit + part = w & 0xFFFF + n = popcount(part) + if n <= uint64(j) { + part = w >> 16 + seen += 16 + j -= int(n) + } + w = part + + // Divide 16bit + part = w & 0xFF + n = popcount(part) + if n <= uint64(j) { + part = w >> 8 + seen += 8 + j -= int(n) + } + w = part + + // Lookup in final byte + var counter uint + for counter = 0; counter < 8; counter++ { + j -= int((w >> counter) & 1) + if j < 0 { + break + } + } + return seen + int(counter) + +} + +func panicOn(err error) { + if err != nil { + panic(err) + } +} + +type ph struct { + orig int + rand int +} + +type pha []ph + +func (p pha) Len() int { return len(p) } +func (p pha) Less(i, j int) bool { return p[i].rand < p[j].rand } +func (p pha) Swap(i, j int) { p[i], p[j] = p[j], p[i] } + +func getRandomPermutation(n int) []int { + r := make([]ph, n) + for i := 0; i < n; i++ { + r[i].orig = i + r[i].rand = rand.Intn(1 << 29) + } + sort.Sort(pha(r)) + m := make([]int, n) + for i := range m { + m[i] = r[i].orig + } + return m +} diff --git a/vendor/github.com/Smerity/govarint/.gitignore b/vendor/github.com/Smerity/govarint/.gitignore new file mode 100644 index 0000000..daf913b --- /dev/null +++ b/vendor/github.com/Smerity/govarint/.gitignore @@ -0,0 +1,24 @@ +# 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 +*.test +*.prof diff --git a/vendor/github.com/Smerity/govarint/LICENSE b/vendor/github.com/Smerity/govarint/LICENSE new file mode 100644 index 0000000..be09cac --- /dev/null +++ b/vendor/github.com/Smerity/govarint/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Stephen Merity + +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/Smerity/govarint/README.md b/vendor/github.com/Smerity/govarint/README.md new file mode 100644 index 0000000..5b82dcc --- /dev/null +++ b/vendor/github.com/Smerity/govarint/README.md @@ -0,0 +1,67 @@ +# Govarint + +This project aims to provide a simple API for the performant encoding and decoding of 32 and 64 bit integers using a variety of algorithms. + +[![](http://i.imgur.com/mpgC23U.jpg)](https://www.flickr.com/photos/tsevis/8648521649/) + +## Usage + +Each integer encoding algorithm conforms to an encoding and decoding interface. +The interfaces also specify the size of the unsigned integer, either 32 or 64 bits, and will be referred to as XX below. +To create an encoder: + + NewU32Base128Encoder(w io.Writer) + NewU64Base128Encoder(w io.Writer) + NewU32GroupVarintEncoder(w io.Writer) + +For encoders, the only two commands are `PutUXX` and `Close`. +`Close` must be called as some integer encoding algorithms write in multiples. + + var buf bytes.Buffer + enc := NewU32Base128Encoder(&buf) + enc.PutU32(117) + enc.PutU32(343) + enc.Close() + +To create a decoder: + + NewU32Base128Decoder(r io.ByteReader) + NewU64Base128Decoder(r io.ByteReader) + NewU32GroupVarintDecoder(r io.ByteReader) + +For decoders, the only command is `GetUXX`. +`GetUXX` returns the value and any potential errors. +When reading is complete, `GetUXX` will return an `EOF` (End Of File). + + dec := NewU32Base128Decoder(&buf) + x, err := dec.GetU32() + +## Use Cases + +Using fixed width integers, such as uint32 and uint64, usually waste large amounts of space, especially when encoding small values. +Optimally, smaller numbers should take less space to represent. + +Using integer encoding algorithms is especially common in specific applications, such as storing edge lists or indexes for search engines. +In these situations, you have a sorted list of numbers that you want to keep as compactly as possible in memory. +Additionally, by storing only the difference between the given number and the previous (delta encoding), the numbers are quite small, and thus compress well. + +For an explicit example, the Web Data Commons Hyperlink Graph contains 128 billion edges linking page A to page B, where each page is represented by a 32 bit integer. +By converting all these edges to 64 bit integers (32 | 32), sorting them, and then using delta encoding, memory usage can be reduced from 64 bits per edge down to only 9 bits per edge using the Base128 integer encoding algorithm. +This figure improves even further if compressed using conventional compression algorithms (3 bits per edge). + +## Encodings supported + +`govarint` supports: + ++ Base128 [32, 64] - each byte uses 7 bits for encoding the integer and 1 bit for indicating if the integer requires another byte ++ Group Varint [32] - integers are encoded in blocks of four - one byte encodes the size of the following four integers, then the values of the four integers follows + +Group Varint consistently beats Base128 in decompression speed but Base128 may offer improved compression ratios depending on the distribution of the supplied integers. + +## Tests + + go test -v -bench=. + +## License + +MIT License, as per `LICENSE` diff --git a/vendor/github.com/Smerity/govarint/govarint.go b/vendor/github.com/Smerity/govarint/govarint.go new file mode 100644 index 0000000..61328a3 --- /dev/null +++ b/vendor/github.com/Smerity/govarint/govarint.go @@ -0,0 +1,229 @@ +package govarint + +import "encoding/binary" +import "io" + +type U32VarintEncoder interface { + PutU32(x uint32) int + Close() +} + +type U32VarintDecoder interface { + GetU32() (uint32, error) +} + +/// + +type U64VarintEncoder interface { + PutU64(x uint64) int + Close() +} + +type U64VarintDecoder interface { + GetU64() (uint64, error) +} + +/// + +type U32GroupVarintEncoder struct { + w io.Writer + index int + store [4]uint32 + temp [17]byte +} + +func NewU32GroupVarintEncoder(w io.Writer) *U32GroupVarintEncoder { return &U32GroupVarintEncoder{w: w} } + +func (b *U32GroupVarintEncoder) Flush() (int, error) { + // TODO: Is it more efficient to have a tailored version that's called only in Close()? + // If index is zero, there are no integers to flush + if b.index == 0 { + return 0, nil + } + // In the case we're flushing (the group isn't of size four), the non-values should be zero + // This ensures the unused entries are all zero in the sizeByte + for i := b.index; i < 4; i++ { + b.store[i] = 0 + } + length := 1 + // We need to reset the size byte to zero as we only bitwise OR into it, we don't overwrite it + b.temp[0] = 0 + for i, x := range b.store { + size := byte(0) + shifts := []byte{24, 16, 8, 0} + for _, shift := range shifts { + // Always writes at least one byte -- the first one (shift = 0) + // Will write more bytes until the rest of the integer is all zeroes + if (x>>shift) != 0 || shift == 0 { + size += 1 + b.temp[length] = byte(x >> shift) + length += 1 + } + } + // We store the size in two of the eight bits in the first byte (sizeByte) + // 0 means there is one byte in total, hence why we subtract one from size + b.temp[0] |= (size - 1) << (uint8(3-i) * 2) + } + // If we're flushing without a full group of four, remove the unused bytes we computed + // This enables us to realize it's a partial group on decoding thanks to EOF + if b.index != 4 { + length -= 4 - b.index + } + _, err := b.w.Write(b.temp[:length]) + return length, err +} + +func (b *U32GroupVarintEncoder) PutU32(x uint32) (int, error) { + bytesWritten := 0 + b.store[b.index] = x + b.index += 1 + if b.index == 4 { + n, err := b.Flush() + if err != nil { + return n, err + } + bytesWritten += n + b.index = 0 + } + return bytesWritten, nil +} + +func (b *U32GroupVarintEncoder) Close() { + // On Close, we flush any remaining values that might not have been in a full group + b.Flush() +} + +/// + +type U32GroupVarintDecoder struct { + r io.ByteReader + group [4]uint32 + pos int + finished bool + capacity int +} + +func NewU32GroupVarintDecoder(r io.ByteReader) *U32GroupVarintDecoder { + return &U32GroupVarintDecoder{r: r, pos: 4, capacity: 4} +} + +func (b *U32GroupVarintDecoder) getGroup() error { + // We should always receive a sizeByte if there are more values to read + sizeByte, err := b.r.ReadByte() + if err != nil { + return err + } + // Calculate the size of the four incoming 32 bit integers + // 0b00 means 1 byte to read, 0b01 = 2, etc + b.group[0] = uint32((sizeByte >> 6) & 3) + b.group[1] = uint32((sizeByte >> 4) & 3) + b.group[2] = uint32((sizeByte >> 2) & 3) + b.group[3] = uint32(sizeByte & 3) + // + for index, size := range b.group { + b.group[index] = 0 + // Any error that occurs in earlier byte reads should be repeated at the end one + // Hence we only catch and report the final ReadByte's error + var err error + switch size { + case 0: + var x byte + x, err = b.r.ReadByte() + b.group[index] = uint32(x) + case 1: + var x, y byte + x, _ = b.r.ReadByte() + y, err = b.r.ReadByte() + b.group[index] = uint32(x)<<8 | uint32(y) + case 2: + var x, y, z byte + x, _ = b.r.ReadByte() + y, _ = b.r.ReadByte() + z, err = b.r.ReadByte() + b.group[index] = uint32(x)<<16 | uint32(y)<<8 | uint32(z) + case 3: + var x, y, z, zz byte + x, _ = b.r.ReadByte() + y, _ = b.r.ReadByte() + z, _ = b.r.ReadByte() + zz, err = b.r.ReadByte() + b.group[index] = uint32(x)<<24 | uint32(y)<<16 | uint32(z)<<8 | uint32(zz) + } + if err != nil { + if err == io.EOF { + // If we hit EOF here, we have found a partial group + // We've return any valid entries we have read and return EOF once we run out + b.capacity = index + b.finished = true + break + } else { + return err + } + } + } + // Reset the pos pointer to the beginning of the read values + b.pos = 0 + return nil +} + +func (b *U32GroupVarintDecoder) GetU32() (uint32, error) { + // Check if we have any more values to give out - if not, let's get them + if b.pos == b.capacity { + // If finished is set, there is nothing else to do + if b.finished { + return 0, io.EOF + } + err := b.getGroup() + if err != nil { + return 0, err + } + } + // Increment pointer and return the value stored at that point + b.pos += 1 + return b.group[b.pos-1], nil +} + +/// + +type Base128Encoder struct { + w io.Writer + tmpBytes []byte +} + +func NewU32Base128Encoder(w io.Writer) *Base128Encoder { + return &Base128Encoder{w: w, tmpBytes: make([]byte, binary.MaxVarintLen32)} +} +func NewU64Base128Encoder(w io.Writer) *Base128Encoder { + return &Base128Encoder{w: w, tmpBytes: make([]byte, binary.MaxVarintLen64)} +} + +func (b *Base128Encoder) PutU32(x uint32) (int, error) { + writtenBytes := binary.PutUvarint(b.tmpBytes, uint64(x)) + return b.w.Write(b.tmpBytes[:writtenBytes]) +} + +func (b *Base128Encoder) PutU64(x uint64) (int, error) { + writtenBytes := binary.PutUvarint(b.tmpBytes, x) + return b.w.Write(b.tmpBytes[:writtenBytes]) +} + +func (b *Base128Encoder) Close() { +} + +/// + +type Base128Decoder struct { + r io.ByteReader +} + +func NewU32Base128Decoder(r io.ByteReader) *Base128Decoder { return &Base128Decoder{r: r} } +func NewU64Base128Decoder(r io.ByteReader) *Base128Decoder { return &Base128Decoder{r: r} } + +func (b *Base128Decoder) GetU32() (uint32, error) { + v, err := binary.ReadUvarint(b.r) + return uint32(v), err +} + +func (b *Base128Decoder) GetU64() (uint64, error) { + return binary.ReadUvarint(b.r) +} diff --git a/vendor/github.com/Smerity/govarint/govarint_test.go b/vendor/github.com/Smerity/govarint/govarint_test.go new file mode 100644 index 0000000..1d4b496 --- /dev/null +++ b/vendor/github.com/Smerity/govarint/govarint_test.go @@ -0,0 +1,259 @@ +package govarint + +import "bytes" +import "io" +import "math/rand" +import "testing" + +var fourU32 = []uint32{ + 0, + 1, + 0, + 256, +} + +var fiveU32 = []uint32{ + 42, + 4294967196, + 384, + 9716053, + 1024 + 256 + 3, +} + +var testU32 = []uint32{ + 0, + 1, + 2, + 10, + 20, + 63, + 64, + 65, + 127, + 128, + 129, + 255, + 256, + 257, +} + +var testU64 = []uint64{ + 0, + 1, + 2, + 10, + 20, + 63, + 64, + 65, + 127, + 128, + 129, + 255, + 256, + 257, + /// + 1<<32 - 1, + 1 << 32, + 1 << 33, + 1 << 42, + 1<<63 - 1, + 1 << 63, +} + +func TestEncodeAndDecodeU32(t *testing.T) { + for _, expected := range testU32 { + var buf bytes.Buffer + enc := NewU32Base128Encoder(&buf) + enc.PutU32(expected) + enc.Close() + dec := NewU32Base128Decoder(&buf) + x, err := dec.GetU32() + if x != expected || err != nil { + t.Errorf("ReadUvarint(%v): got x = %d, expected = %d, err = %s", buf, x, expected, err) + } + } + var buf bytes.Buffer + enc := NewU32Base128Encoder(&buf) + for _, expected := range testU32 { + enc.PutU32(expected) + } + enc.Close() + dec := NewU32Base128Decoder(&buf) + i := 0 + for { + x, err := dec.GetU32() + if err == io.EOF { + break + } + if x != testU32[i] || err != nil { + t.Errorf("ReadUvarint(%v): got x = %d, expected = %d, err = %s", buf, x, testU32[i], err) + } + i += 1 + } + if i != len(testU32) { + t.Errorf("Only %d integers were decoded when %d were encoded", i, len(testU32)) + } +} + +func TestEncodeAndDecodeU64(t *testing.T) { + for _, expected := range testU64 { + var buf bytes.Buffer + enc := NewU64Base128Encoder(&buf) + enc.PutU64(expected) + enc.Close() + dec := NewU64Base128Decoder(&buf) + x, err := dec.GetU64() + if x != expected || err != nil { + t.Errorf("ReadUvarint(%v): got x = %d, expected = %d, err = %s", buf, x, expected, err) + } + } +} + +func TestU32GroupVarintFour(t *testing.T) { + var buf bytes.Buffer + enc := NewU32GroupVarintEncoder(&buf) + for _, expected := range fourU32 { + enc.PutU32(expected) + } + enc.Close() + dec := NewU32GroupVarintDecoder(&buf) + i := 0 + for { + x, err := dec.GetU32() + if err == io.EOF { + break + } + if err != nil && x != fourU32[i] { + t.Errorf("ReadUvarint(%v): got x = %d, expected = %d, err = %s", buf, x, testU32[i], err) + } + i += 1 + } + if i != len(fourU32) { + t.Errorf("%d integers were decoded when %d were encoded", i, len(fourU32)) + } +} + +func TestU32GroupVarintFive(t *testing.T) { + var buf bytes.Buffer + enc := NewU32GroupVarintEncoder(&buf) + for _, expected := range fiveU32 { + enc.PutU32(expected) + } + enc.Close() + dec := NewU32GroupVarintDecoder(&buf) + i := 0 + for { + x, err := dec.GetU32() + if err == io.EOF { + break + } + if err != nil && x != fiveU32[i] { + t.Errorf("ReadUvarint(%v): got x = %d, expected = %d, err = %s", buf, x, testU32[i], err) + } + i += 1 + } + if i != len(fiveU32) { + t.Errorf("%d integers were decoded when %d were encoded", i, len(fiveU32)) + } +} + +func TestU32GroupVarint14(t *testing.T) { + var buf bytes.Buffer + for length := 0; length < len(testU32); length++ { + subset := testU32[:length] + enc := NewU32GroupVarintEncoder(&buf) + for _, expected := range subset { + enc.PutU32(expected) + } + enc.Close() + dec := NewU32GroupVarintDecoder(&buf) + i := 0 + for { + x, err := dec.GetU32() + if err == io.EOF { + break + } + if err != nil && x != subset[i] { + t.Errorf("ReadUvarint(%v): got x = %d, expected = %d, err = %s", buf, x, subset[i], err) + } + i += 1 + } + if i != len(subset) { + t.Errorf("%d integers were decoded when %d were encoded", i, len(subset)) + } + } +} + +func generateRandomU14() (uint64, []uint32) { + // Need to be aware to make it fair for Base128 + // Base128 has 7 usable bits per byte + rand.Seed(42) + testSize := 1000000 + data := make([]uint32, testSize, testSize) + total := uint64(0) + for i := range data { + data[i] = rand.Uint32() % 16384 + total += uint64(data[i]) + } + return total, data +} + +func speedTest(b *testing.B, dec U32VarintDecoder, readBuf *bytes.Reader, expectedTotal uint64) { + total := uint64(0) + idx := 0 + for { + x, err := dec.GetU32() + if err == io.EOF { + break + } + if err != nil { + b.Errorf("Hit err: %v", err) + } + total += uint64(x) + idx += 1 + } + if total != expectedTotal { + b.Errorf("Total was %d when %d was expected, having read %d integers", total, expectedTotal, idx) + } +} + +func BenchmarkBase128(b *testing.B) { + b.StopTimer() + // + var buf bytes.Buffer + enc := NewU32Base128Encoder(&buf) + expectedTotal, data := generateRandomU14() + for _, expected := range data { + enc.PutU32(expected) + } + enc.Close() + // + readBuf := bytes.NewReader(buf.Bytes()) + b.StartTimer() + for i := 0; i < b.N; i++ { + readBuf.Seek(0, 0) + dec := NewU32Base128Decoder(readBuf) + speedTest(b, dec, readBuf, expectedTotal) + } +} + +func BenchmarkGroupVarint(b *testing.B) { + b.StopTimer() + // + var buf bytes.Buffer + enc := NewU32GroupVarintEncoder(&buf) + expectedTotal, data := generateRandomU14() + for _, expected := range data { + enc.PutU32(expected) + } + enc.Close() + // + readBuf := bytes.NewReader(buf.Bytes()) + b.StartTimer() + for i := 0; i < b.N; i++ { + readBuf.Seek(0, 0) + dec := NewU32GroupVarintDecoder(readBuf) + speedTest(b, dec, readBuf, expectedTotal) + } +} diff --git a/vendor/github.com/alecthomas/template/LICENSE b/vendor/github.com/alecthomas/template/LICENSE new file mode 100644 index 0000000..7448756 --- /dev/null +++ b/vendor/github.com/alecthomas/template/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2012 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/alecthomas/template/README.md b/vendor/github.com/alecthomas/template/README.md new file mode 100644 index 0000000..ef6a8ee --- /dev/null +++ b/vendor/github.com/alecthomas/template/README.md @@ -0,0 +1,25 @@ +# Go's `text/template` package with newline elision + +This is a fork of Go 1.4's [text/template](http://golang.org/pkg/text/template/) package with one addition: a backslash immediately after a closing delimiter will delete all subsequent newlines until a non-newline. + +eg. + +``` +{{if true}}\ +hello +{{end}}\ +``` + +Will result in: + +``` +hello\n +``` + +Rather than: + +``` +\n +hello\n +\n +``` diff --git a/vendor/github.com/alecthomas/template/doc.go b/vendor/github.com/alecthomas/template/doc.go new file mode 100644 index 0000000..223c595 --- /dev/null +++ b/vendor/github.com/alecthomas/template/doc.go @@ -0,0 +1,406 @@ +// Copyright 2011 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. + +/* +Package template implements data-driven templates for generating textual output. + +To generate HTML output, see package html/template, which has the same interface +as this package but automatically secures HTML output against certain attacks. + +Templates are executed by applying them to a data structure. Annotations in the +template refer to elements of the data structure (typically a field of a struct +or a key in a map) to control execution and derive values to be displayed. +Execution of the template walks the structure and sets the cursor, represented +by a period '.' and called "dot", to the value at the current location in the +structure as execution proceeds. + +The input text for a template is UTF-8-encoded text in any format. +"Actions"--data evaluations or control structures--are delimited by +"{{" and "}}"; all text outside actions is copied to the output unchanged. +Actions may not span newlines, although comments can. + +Once parsed, a template may be executed safely in parallel. + +Here is a trivial example that prints "17 items are made of wool". + + type Inventory struct { + Material string + Count uint + } + sweaters := Inventory{"wool", 17} + tmpl, err := template.New("test").Parse("{{.Count}} items are made of {{.Material}}") + if err != nil { panic(err) } + err = tmpl.Execute(os.Stdout, sweaters) + if err != nil { panic(err) } + +More intricate examples appear below. + +Actions + +Here is the list of actions. "Arguments" and "pipelines" are evaluations of +data, defined in detail below. + +*/ +// {{/* a comment */}} +// A comment; discarded. May contain newlines. +// Comments do not nest and must start and end at the +// delimiters, as shown here. +/* + + {{pipeline}} + The default textual representation of the value of the pipeline + is copied to the output. + + {{if pipeline}} T1 {{end}} + If the value of the pipeline is empty, no output is generated; + otherwise, T1 is executed. The empty values are false, 0, any + nil pointer or interface value, and any array, slice, map, or + string of length zero. + Dot is unaffected. + + {{if pipeline}} T1 {{else}} T0 {{end}} + If the value of the pipeline is empty, T0 is executed; + otherwise, T1 is executed. Dot is unaffected. + + {{if pipeline}} T1 {{else if pipeline}} T0 {{end}} + To simplify the appearance of if-else chains, the else action + of an if may include another if directly; the effect is exactly + the same as writing + {{if pipeline}} T1 {{else}}{{if pipeline}} T0 {{end}}{{end}} + + {{range pipeline}} T1 {{end}} + The value of the pipeline must be an array, slice, map, or channel. + If the value of the pipeline has length zero, nothing is output; + otherwise, dot is set to the successive elements of the array, + slice, or map and T1 is executed. If the value is a map and the + keys are of basic type with a defined order ("comparable"), the + elements will be visited in sorted key order. + + {{range pipeline}} T1 {{else}} T0 {{end}} + The value of the pipeline must be an array, slice, map, or channel. + If the value of the pipeline has length zero, dot is unaffected and + T0 is executed; otherwise, dot is set to the successive elements + of the array, slice, or map and T1 is executed. + + {{template "name"}} + The template with the specified name is executed with nil data. + + {{template "name" pipeline}} + The template with the specified name is executed with dot set + to the value of the pipeline. + + {{with pipeline}} T1 {{end}} + If the value of the pipeline is empty, no output is generated; + otherwise, dot is set to the value of the pipeline and T1 is + executed. + + {{with pipeline}} T1 {{else}} T0 {{end}} + If the value of the pipeline is empty, dot is unaffected and T0 + is executed; otherwise, dot is set to the value of the pipeline + and T1 is executed. + +Arguments + +An argument is a simple value, denoted by one of the following. + + - A boolean, string, character, integer, floating-point, imaginary + or complex constant in Go syntax. These behave like Go's untyped + constants, although raw strings may not span newlines. + - The keyword nil, representing an untyped Go nil. + - The character '.' (period): + . + The result is the value of dot. + - A variable name, which is a (possibly empty) alphanumeric string + preceded by a dollar sign, such as + $piOver2 + or + $ + The result is the value of the variable. + Variables are described below. + - The name of a field of the data, which must be a struct, preceded + by a period, such as + .Field + The result is the value of the field. Field invocations may be + chained: + .Field1.Field2 + Fields can also be evaluated on variables, including chaining: + $x.Field1.Field2 + - The name of a key of the data, which must be a map, preceded + by a period, such as + .Key + The result is the map element value indexed by the key. + Key invocations may be chained and combined with fields to any + depth: + .Field1.Key1.Field2.Key2 + Although the key must be an alphanumeric identifier, unlike with + field names they do not need to start with an upper case letter. + Keys can also be evaluated on variables, including chaining: + $x.key1.key2 + - The name of a niladic method of the data, preceded by a period, + such as + .Method + The result is the value of invoking the method with dot as the + receiver, dot.Method(). Such a method must have one return value (of + any type) or two return values, the second of which is an error. + If it has two and the returned error is non-nil, execution terminates + and an error is returned to the caller as the value of Execute. + Method invocations may be chained and combined with fields and keys + to any depth: + .Field1.Key1.Method1.Field2.Key2.Method2 + Methods can also be evaluated on variables, including chaining: + $x.Method1.Field + - The name of a niladic function, such as + fun + The result is the value of invoking the function, fun(). The return + types and values behave as in methods. Functions and function + names are described below. + - A parenthesized instance of one the above, for grouping. The result + may be accessed by a field or map key invocation. + print (.F1 arg1) (.F2 arg2) + (.StructValuedMethod "arg").Field + +Arguments may evaluate to any type; if they are pointers the implementation +automatically indirects to the base type when required. +If an evaluation yields a function value, such as a function-valued +field of a struct, the function is not invoked automatically, but it +can be used as a truth value for an if action and the like. To invoke +it, use the call function, defined below. + +A pipeline is a possibly chained sequence of "commands". A command is a simple +value (argument) or a function or method call, possibly with multiple arguments: + + Argument + The result is the value of evaluating the argument. + .Method [Argument...] + The method can be alone or the last element of a chain but, + unlike methods in the middle of a chain, it can take arguments. + The result is the value of calling the method with the + arguments: + dot.Method(Argument1, etc.) + functionName [Argument...] + The result is the value of calling the function associated + with the name: + function(Argument1, etc.) + Functions and function names are described below. + +Pipelines + +A pipeline may be "chained" by separating a sequence of commands with pipeline +characters '|'. In a chained pipeline, the result of the each command is +passed as the last argument of the following command. The output of the final +command in the pipeline is the value of the pipeline. + +The output of a command will be either one value or two values, the second of +which has type error. If that second value is present and evaluates to +non-nil, execution terminates and the error is returned to the caller of +Execute. + +Variables + +A pipeline inside an action may initialize a variable to capture the result. +The initialization has syntax + + $variable := pipeline + +where $variable is the name of the variable. An action that declares a +variable produces no output. + +If a "range" action initializes a variable, the variable is set to the +successive elements of the iteration. Also, a "range" may declare two +variables, separated by a comma: + + range $index, $element := pipeline + +in which case $index and $element are set to the successive values of the +array/slice index or map key and element, respectively. Note that if there is +only one variable, it is assigned the element; this is opposite to the +convention in Go range clauses. + +A variable's scope extends to the "end" action of the control structure ("if", +"with", or "range") in which it is declared, or to the end of the template if +there is no such control structure. A template invocation does not inherit +variables from the point of its invocation. + +When execution begins, $ is set to the data argument passed to Execute, that is, +to the starting value of dot. + +Examples + +Here are some example one-line templates demonstrating pipelines and variables. +All produce the quoted word "output": + + {{"\"output\""}} + A string constant. + {{`"output"`}} + A raw string constant. + {{printf "%q" "output"}} + A function call. + {{"output" | printf "%q"}} + A function call whose final argument comes from the previous + command. + {{printf "%q" (print "out" "put")}} + A parenthesized argument. + {{"put" | printf "%s%s" "out" | printf "%q"}} + A more elaborate call. + {{"output" | printf "%s" | printf "%q"}} + A longer chain. + {{with "output"}}{{printf "%q" .}}{{end}} + A with action using dot. + {{with $x := "output" | printf "%q"}}{{$x}}{{end}} + A with action that creates and uses a variable. + {{with $x := "output"}}{{printf "%q" $x}}{{end}} + A with action that uses the variable in another action. + {{with $x := "output"}}{{$x | printf "%q"}}{{end}} + The same, but pipelined. + +Functions + +During execution functions are found in two function maps: first in the +template, then in the global function map. By default, no functions are defined +in the template but the Funcs method can be used to add them. + +Predefined global functions are named as follows. + + and + Returns the boolean AND of its arguments by returning the + first empty argument or the last argument, that is, + "and x y" behaves as "if x then y else x". All the + arguments are evaluated. + call + Returns the result of calling the first argument, which + must be a function, with the remaining arguments as parameters. + Thus "call .X.Y 1 2" is, in Go notation, dot.X.Y(1, 2) where + Y is a func-valued field, map entry, or the like. + The first argument must be the result of an evaluation + that yields a value of function type (as distinct from + a predefined function such as print). The function must + return either one or two result values, the second of which + is of type error. If the arguments don't match the function + or the returned error value is non-nil, execution stops. + html + Returns the escaped HTML equivalent of the textual + representation of its arguments. + index + Returns the result of indexing its first argument by the + following arguments. Thus "index x 1 2 3" is, in Go syntax, + x[1][2][3]. Each indexed item must be a map, slice, or array. + js + Returns the escaped JavaScript equivalent of the textual + representation of its arguments. + len + Returns the integer length of its argument. + not + Returns the boolean negation of its single argument. + or + Returns the boolean OR of its arguments by returning the + first non-empty argument or the last argument, that is, + "or x y" behaves as "if x then x else y". All the + arguments are evaluated. + print + An alias for fmt.Sprint + printf + An alias for fmt.Sprintf + println + An alias for fmt.Sprintln + urlquery + Returns the escaped value of the textual representation of + its arguments in a form suitable for embedding in a URL query. + +The boolean functions take any zero value to be false and a non-zero +value to be true. + +There is also a set of binary comparison operators defined as +functions: + + eq + Returns the boolean truth of arg1 == arg2 + ne + Returns the boolean truth of arg1 != arg2 + lt + Returns the boolean truth of arg1 < arg2 + le + Returns the boolean truth of arg1 <= arg2 + gt + Returns the boolean truth of arg1 > arg2 + ge + Returns the boolean truth of arg1 >= arg2 + +For simpler multi-way equality tests, eq (only) accepts two or more +arguments and compares the second and subsequent to the first, +returning in effect + + arg1==arg2 || arg1==arg3 || arg1==arg4 ... + +(Unlike with || in Go, however, eq is a function call and all the +arguments will be evaluated.) + +The comparison functions work on basic types only (or named basic +types, such as "type Celsius float32"). They implement the Go rules +for comparison of values, except that size and exact type are +ignored, so any integer value, signed or unsigned, may be compared +with any other integer value. (The arithmetic value is compared, +not the bit pattern, so all negative integers are less than all +unsigned integers.) However, as usual, one may not compare an int +with a float32 and so on. + +Associated templates + +Each template is named by a string specified when it is created. Also, each +template is associated with zero or more other templates that it may invoke by +name; such associations are transitive and form a name space of templates. + +A template may use a template invocation to instantiate another associated +template; see the explanation of the "template" action above. The name must be +that of a template associated with the template that contains the invocation. + +Nested template definitions + +When parsing a template, another template may be defined and associated with the +template being parsed. Template definitions must appear at the top level of the +template, much like global variables in a Go program. + +The syntax of such definitions is to surround each template declaration with a +"define" and "end" action. + +The define action names the template being created by providing a string +constant. Here is a simple example: + + `{{define "T1"}}ONE{{end}} + {{define "T2"}}TWO{{end}} + {{define "T3"}}{{template "T1"}} {{template "T2"}}{{end}} + {{template "T3"}}` + +This defines two templates, T1 and T2, and a third T3 that invokes the other two +when it is executed. Finally it invokes T3. If executed this template will +produce the text + + ONE TWO + +By construction, a template may reside in only one association. If it's +necessary to have a template addressable from multiple associations, the +template definition must be parsed multiple times to create distinct *Template +values, or must be copied with the Clone or AddParseTree method. + +Parse may be called multiple times to assemble the various associated templates; +see the ParseFiles and ParseGlob functions and methods for simple ways to parse +related templates stored in files. + +A template may be executed directly or through ExecuteTemplate, which executes +an associated template identified by name. To invoke our example above, we +might write, + + err := tmpl.Execute(os.Stdout, "no data needed") + if err != nil { + log.Fatalf("execution failed: %s", err) + } + +or to invoke a particular template explicitly by name, + + err := tmpl.ExecuteTemplate(os.Stdout, "T2", "no data needed") + if err != nil { + log.Fatalf("execution failed: %s", err) + } + +*/ +package template diff --git a/vendor/github.com/alecthomas/template/example_test.go b/vendor/github.com/alecthomas/template/example_test.go new file mode 100644 index 0000000..461ec05 --- /dev/null +++ b/vendor/github.com/alecthomas/template/example_test.go @@ -0,0 +1,72 @@ +// Copyright 2011 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. + +package template_test + +import ( + "log" + "os" + + "github.com/alecthomas/template" +) + +func ExampleTemplate() { + // Define a template. + const letter = ` +Dear {{.Name}}, +{{if .Attended}} +It was a pleasure to see you at the wedding.{{else}} +It is a shame you couldn't make it to the wedding.{{end}} +{{with .Gift}}Thank you for the lovely {{.}}. +{{end}} +Best wishes, +Josie +` + + // Prepare some data to insert into the template. + type Recipient struct { + Name, Gift string + Attended bool + } + var recipients = []Recipient{ + {"Aunt Mildred", "bone china tea set", true}, + {"Uncle John", "moleskin pants", false}, + {"Cousin Rodney", "", false}, + } + + // Create a new template and parse the letter into it. + t := template.Must(template.New("letter").Parse(letter)) + + // Execute the template for each recipient. + for _, r := range recipients { + err := t.Execute(os.Stdout, r) + if err != nil { + log.Println("executing template:", err) + } + } + + // Output: + // Dear Aunt Mildred, + // + // It was a pleasure to see you at the wedding. + // Thank you for the lovely bone china tea set. + // + // Best wishes, + // Josie + // + // Dear Uncle John, + // + // It is a shame you couldn't make it to the wedding. + // Thank you for the lovely moleskin pants. + // + // Best wishes, + // Josie + // + // Dear Cousin Rodney, + // + // It is a shame you couldn't make it to the wedding. + // + // Best wishes, + // Josie +} diff --git a/vendor/github.com/alecthomas/template/examplefiles_test.go b/vendor/github.com/alecthomas/template/examplefiles_test.go new file mode 100644 index 0000000..0c7181d --- /dev/null +++ b/vendor/github.com/alecthomas/template/examplefiles_test.go @@ -0,0 +1,183 @@ +// Copyright 2012 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. + +package template_test + +import ( + "io" + "io/ioutil" + "log" + "os" + "path/filepath" + + "github.com/alecthomas/template" +) + +// templateFile defines the contents of a template to be stored in a file, for testing. +type templateFile struct { + name string + contents string +} + +func createTestDir(files []templateFile) string { + dir, err := ioutil.TempDir("", "template") + if err != nil { + log.Fatal(err) + } + for _, file := range files { + f, err := os.Create(filepath.Join(dir, file.name)) + if err != nil { + log.Fatal(err) + } + defer f.Close() + _, err = io.WriteString(f, file.contents) + if err != nil { + log.Fatal(err) + } + } + return dir +} + +// Here we demonstrate loading a set of templates from a directory. +func ExampleTemplate_glob() { + // Here we create a temporary directory and populate it with our sample + // template definition files; usually the template files would already + // exist in some location known to the program. + dir := createTestDir([]templateFile{ + // T0.tmpl is a plain template file that just invokes T1. + {"T0.tmpl", `T0 invokes T1: ({{template "T1"}})`}, + // T1.tmpl defines a template, T1 that invokes T2. + {"T1.tmpl", `{{define "T1"}}T1 invokes T2: ({{template "T2"}}){{end}}`}, + // T2.tmpl defines a template T2. + {"T2.tmpl", `{{define "T2"}}This is T2{{end}}`}, + }) + // Clean up after the test; another quirk of running as an example. + defer os.RemoveAll(dir) + + // pattern is the glob pattern used to find all the template files. + pattern := filepath.Join(dir, "*.tmpl") + + // Here starts the example proper. + // T0.tmpl is the first name matched, so it becomes the starting template, + // the value returned by ParseGlob. + tmpl := template.Must(template.ParseGlob(pattern)) + + err := tmpl.Execute(os.Stdout, nil) + if err != nil { + log.Fatalf("template execution: %s", err) + } + // Output: + // T0 invokes T1: (T1 invokes T2: (This is T2)) +} + +// This example demonstrates one way to share some templates +// and use them in different contexts. In this variant we add multiple driver +// templates by hand to an existing bundle of templates. +func ExampleTemplate_helpers() { + // Here we create a temporary directory and populate it with our sample + // template definition files; usually the template files would already + // exist in some location known to the program. + dir := createTestDir([]templateFile{ + // T1.tmpl defines a template, T1 that invokes T2. + {"T1.tmpl", `{{define "T1"}}T1 invokes T2: ({{template "T2"}}){{end}}`}, + // T2.tmpl defines a template T2. + {"T2.tmpl", `{{define "T2"}}This is T2{{end}}`}, + }) + // Clean up after the test; another quirk of running as an example. + defer os.RemoveAll(dir) + + // pattern is the glob pattern used to find all the template files. + pattern := filepath.Join(dir, "*.tmpl") + + // Here starts the example proper. + // Load the helpers. + templates := template.Must(template.ParseGlob(pattern)) + // Add one driver template to the bunch; we do this with an explicit template definition. + _, err := templates.Parse("{{define `driver1`}}Driver 1 calls T1: ({{template `T1`}})\n{{end}}") + if err != nil { + log.Fatal("parsing driver1: ", err) + } + // Add another driver template. + _, err = templates.Parse("{{define `driver2`}}Driver 2 calls T2: ({{template `T2`}})\n{{end}}") + if err != nil { + log.Fatal("parsing driver2: ", err) + } + // We load all the templates before execution. This package does not require + // that behavior but html/template's escaping does, so it's a good habit. + err = templates.ExecuteTemplate(os.Stdout, "driver1", nil) + if err != nil { + log.Fatalf("driver1 execution: %s", err) + } + err = templates.ExecuteTemplate(os.Stdout, "driver2", nil) + if err != nil { + log.Fatalf("driver2 execution: %s", err) + } + // Output: + // Driver 1 calls T1: (T1 invokes T2: (This is T2)) + // Driver 2 calls T2: (This is T2) +} + +// This example demonstrates how to use one group of driver +// templates with distinct sets of helper templates. +func ExampleTemplate_share() { + // Here we create a temporary directory and populate it with our sample + // template definition files; usually the template files would already + // exist in some location known to the program. + dir := createTestDir([]templateFile{ + // T0.tmpl is a plain template file that just invokes T1. + {"T0.tmpl", "T0 ({{.}} version) invokes T1: ({{template `T1`}})\n"}, + // T1.tmpl defines a template, T1 that invokes T2. Note T2 is not defined + {"T1.tmpl", `{{define "T1"}}T1 invokes T2: ({{template "T2"}}){{end}}`}, + }) + // Clean up after the test; another quirk of running as an example. + defer os.RemoveAll(dir) + + // pattern is the glob pattern used to find all the template files. + pattern := filepath.Join(dir, "*.tmpl") + + // Here starts the example proper. + // Load the drivers. + drivers := template.Must(template.ParseGlob(pattern)) + + // We must define an implementation of the T2 template. First we clone + // the drivers, then add a definition of T2 to the template name space. + + // 1. Clone the helper set to create a new name space from which to run them. + first, err := drivers.Clone() + if err != nil { + log.Fatal("cloning helpers: ", err) + } + // 2. Define T2, version A, and parse it. + _, err = first.Parse("{{define `T2`}}T2, version A{{end}}") + if err != nil { + log.Fatal("parsing T2: ", err) + } + + // Now repeat the whole thing, using a different version of T2. + // 1. Clone the drivers. + second, err := drivers.Clone() + if err != nil { + log.Fatal("cloning drivers: ", err) + } + // 2. Define T2, version B, and parse it. + _, err = second.Parse("{{define `T2`}}T2, version B{{end}}") + if err != nil { + log.Fatal("parsing T2: ", err) + } + + // Execute the templates in the reverse order to verify the + // first is unaffected by the second. + err = second.ExecuteTemplate(os.Stdout, "T0.tmpl", "second") + if err != nil { + log.Fatalf("second execution: %s", err) + } + err = first.ExecuteTemplate(os.Stdout, "T0.tmpl", "first") + if err != nil { + log.Fatalf("first: execution: %s", err) + } + + // Output: + // T0 (second version) invokes T1: (T1 invokes T2: (T2, version B)) + // T0 (first version) invokes T1: (T1 invokes T2: (T2, version A)) +} diff --git a/vendor/github.com/alecthomas/template/examplefunc_test.go b/vendor/github.com/alecthomas/template/examplefunc_test.go new file mode 100644 index 0000000..8767cfd --- /dev/null +++ b/vendor/github.com/alecthomas/template/examplefunc_test.go @@ -0,0 +1,55 @@ +// Copyright 2012 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. + +package template_test + +import ( + "log" + "os" + "strings" + + "github.com/alecthomas/template" +) + +// This example demonstrates a custom function to process template text. +// It installs the strings.Title function and uses it to +// Make Title Text Look Good In Our Template's Output. +func ExampleTemplate_func() { + // First we create a FuncMap with which to register the function. + funcMap := template.FuncMap{ + // The name "title" is what the function will be called in the template text. + "title": strings.Title, + } + + // A simple template definition to test our function. + // We print the input text several ways: + // - the original + // - title-cased + // - title-cased and then printed with %q + // - printed with %q and then title-cased. + const templateText = ` +Input: {{printf "%q" .}} +Output 0: {{title .}} +Output 1: {{title . | printf "%q"}} +Output 2: {{printf "%q" . | title}} +` + + // Create a template, add the function map, and parse the text. + tmpl, err := template.New("titleTest").Funcs(funcMap).Parse(templateText) + if err != nil { + log.Fatalf("parsing: %s", err) + } + + // Run the template to verify the output. + err = tmpl.Execute(os.Stdout, "the go programming language") + if err != nil { + log.Fatalf("execution: %s", err) + } + + // Output: + // Input: "the go programming language" + // Output 0: The Go Programming Language + // Output 1: "The Go Programming Language" + // Output 2: "The Go Programming Language" +} diff --git a/vendor/github.com/alecthomas/template/exec.go b/vendor/github.com/alecthomas/template/exec.go new file mode 100644 index 0000000..c3078e5 --- /dev/null +++ b/vendor/github.com/alecthomas/template/exec.go @@ -0,0 +1,845 @@ +// Copyright 2011 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. + +package template + +import ( + "bytes" + "fmt" + "io" + "reflect" + "runtime" + "sort" + "strings" + + "github.com/alecthomas/template/parse" +) + +// state represents the state of an execution. It's not part of the +// template so that multiple executions of the same template +// can execute in parallel. +type state struct { + tmpl *Template + wr io.Writer + node parse.Node // current node, for errors + vars []variable // push-down stack of variable values. +} + +// variable holds the dynamic value of a variable such as $, $x etc. +type variable struct { + name string + value reflect.Value +} + +// push pushes a new variable on the stack. +func (s *state) push(name string, value reflect.Value) { + s.vars = append(s.vars, variable{name, value}) +} + +// mark returns the length of the variable stack. +func (s *state) mark() int { + return len(s.vars) +} + +// pop pops the variable stack up to the mark. +func (s *state) pop(mark int) { + s.vars = s.vars[0:mark] +} + +// setVar overwrites the top-nth variable on the stack. Used by range iterations. +func (s *state) setVar(n int, value reflect.Value) { + s.vars[len(s.vars)-n].value = value +} + +// varValue returns the value of the named variable. +func (s *state) varValue(name string) reflect.Value { + for i := s.mark() - 1; i >= 0; i-- { + if s.vars[i].name == name { + return s.vars[i].value + } + } + s.errorf("undefined variable: %s", name) + return zero +} + +var zero reflect.Value + +// at marks the state to be on node n, for error reporting. +func (s *state) at(node parse.Node) { + s.node = node +} + +// doublePercent returns the string with %'s replaced by %%, if necessary, +// so it can be used safely inside a Printf format string. +func doublePercent(str string) string { + if strings.Contains(str, "%") { + str = strings.Replace(str, "%", "%%", -1) + } + return str +} + +// errorf formats the error and terminates processing. +func (s *state) errorf(format string, args ...interface{}) { + name := doublePercent(s.tmpl.Name()) + if s.node == nil { + format = fmt.Sprintf("template: %s: %s", name, format) + } else { + location, context := s.tmpl.ErrorContext(s.node) + format = fmt.Sprintf("template: %s: executing %q at <%s>: %s", location, name, doublePercent(context), format) + } + panic(fmt.Errorf(format, args...)) +} + +// errRecover is the handler that turns panics into returns from the top +// level of Parse. +func errRecover(errp *error) { + e := recover() + if e != nil { + switch err := e.(type) { + case runtime.Error: + panic(e) + case error: + *errp = err + default: + panic(e) + } + } +} + +// ExecuteTemplate applies the template associated with t that has the given name +// to the specified data object and writes the output to wr. +// If an error occurs executing the template or writing its output, +// execution stops, but partial results may already have been written to +// the output writer. +// A template may be executed safely in parallel. +func (t *Template) ExecuteTemplate(wr io.Writer, name string, data interface{}) error { + tmpl := t.tmpl[name] + if tmpl == nil { + return fmt.Errorf("template: no template %q associated with template %q", name, t.name) + } + return tmpl.Execute(wr, data) +} + +// Execute applies a parsed template to the specified data object, +// and writes the output to wr. +// If an error occurs executing the template or writing its output, +// execution stops, but partial results may already have been written to +// the output writer. +// A template may be executed safely in parallel. +func (t *Template) Execute(wr io.Writer, data interface{}) (err error) { + defer errRecover(&err) + value := reflect.ValueOf(data) + state := &state{ + tmpl: t, + wr: wr, + vars: []variable{{"$", value}}, + } + t.init() + if t.Tree == nil || t.Root == nil { + var b bytes.Buffer + for name, tmpl := range t.tmpl { + if tmpl.Tree == nil || tmpl.Root == nil { + continue + } + if b.Len() > 0 { + b.WriteString(", ") + } + fmt.Fprintf(&b, "%q", name) + } + var s string + if b.Len() > 0 { + s = "; defined templates are: " + b.String() + } + state.errorf("%q is an incomplete or empty template%s", t.Name(), s) + } + state.walk(value, t.Root) + return +} + +// Walk functions step through the major pieces of the template structure, +// generating output as they go. +func (s *state) walk(dot reflect.Value, node parse.Node) { + s.at(node) + switch node := node.(type) { + case *parse.ActionNode: + // Do not pop variables so they persist until next end. + // Also, if the action declares variables, don't print the result. + val := s.evalPipeline(dot, node.Pipe) + if len(node.Pipe.Decl) == 0 { + s.printValue(node, val) + } + case *parse.IfNode: + s.walkIfOrWith(parse.NodeIf, dot, node.Pipe, node.List, node.ElseList) + case *parse.ListNode: + for _, node := range node.Nodes { + s.walk(dot, node) + } + case *parse.RangeNode: + s.walkRange(dot, node) + case *parse.TemplateNode: + s.walkTemplate(dot, node) + case *parse.TextNode: + if _, err := s.wr.Write(node.Text); err != nil { + s.errorf("%s", err) + } + case *parse.WithNode: + s.walkIfOrWith(parse.NodeWith, dot, node.Pipe, node.List, node.ElseList) + default: + s.errorf("unknown node: %s", node) + } +} + +// walkIfOrWith walks an 'if' or 'with' node. The two control structures +// are identical in behavior except that 'with' sets dot. +func (s *state) walkIfOrWith(typ parse.NodeType, dot reflect.Value, pipe *parse.PipeNode, list, elseList *parse.ListNode) { + defer s.pop(s.mark()) + val := s.evalPipeline(dot, pipe) + truth, ok := isTrue(val) + if !ok { + s.errorf("if/with can't use %v", val) + } + if truth { + if typ == parse.NodeWith { + s.walk(val, list) + } else { + s.walk(dot, list) + } + } else if elseList != nil { + s.walk(dot, elseList) + } +} + +// isTrue reports whether the value is 'true', in the sense of not the zero of its type, +// and whether the value has a meaningful truth value. +func isTrue(val reflect.Value) (truth, ok bool) { + if !val.IsValid() { + // Something like var x interface{}, never set. It's a form of nil. + return false, true + } + switch val.Kind() { + case reflect.Array, reflect.Map, reflect.Slice, reflect.String: + truth = val.Len() > 0 + case reflect.Bool: + truth = val.Bool() + case reflect.Complex64, reflect.Complex128: + truth = val.Complex() != 0 + case reflect.Chan, reflect.Func, reflect.Ptr, reflect.Interface: + truth = !val.IsNil() + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + truth = val.Int() != 0 + case reflect.Float32, reflect.Float64: + truth = val.Float() != 0 + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + truth = val.Uint() != 0 + case reflect.Struct: + truth = true // Struct values are always true. + default: + return + } + return truth, true +} + +func (s *state) walkRange(dot reflect.Value, r *parse.RangeNode) { + s.at(r) + defer s.pop(s.mark()) + val, _ := indirect(s.evalPipeline(dot, r.Pipe)) + // mark top of stack before any variables in the body are pushed. + mark := s.mark() + oneIteration := func(index, elem reflect.Value) { + // Set top var (lexically the second if there are two) to the element. + if len(r.Pipe.Decl) > 0 { + s.setVar(1, elem) + } + // Set next var (lexically the first if there are two) to the index. + if len(r.Pipe.Decl) > 1 { + s.setVar(2, index) + } + s.walk(elem, r.List) + s.pop(mark) + } + switch val.Kind() { + case reflect.Array, reflect.Slice: + if val.Len() == 0 { + break + } + for i := 0; i < val.Len(); i++ { + oneIteration(reflect.ValueOf(i), val.Index(i)) + } + return + case reflect.Map: + if val.Len() == 0 { + break + } + for _, key := range sortKeys(val.MapKeys()) { + oneIteration(key, val.MapIndex(key)) + } + return + case reflect.Chan: + if val.IsNil() { + break + } + i := 0 + for ; ; i++ { + elem, ok := val.Recv() + if !ok { + break + } + oneIteration(reflect.ValueOf(i), elem) + } + if i == 0 { + break + } + return + case reflect.Invalid: + break // An invalid value is likely a nil map, etc. and acts like an empty map. + default: + s.errorf("range can't iterate over %v", val) + } + if r.ElseList != nil { + s.walk(dot, r.ElseList) + } +} + +func (s *state) walkTemplate(dot reflect.Value, t *parse.TemplateNode) { + s.at(t) + tmpl := s.tmpl.tmpl[t.Name] + if tmpl == nil { + s.errorf("template %q not defined", t.Name) + } + // Variables declared by the pipeline persist. + dot = s.evalPipeline(dot, t.Pipe) + newState := *s + newState.tmpl = tmpl + // No dynamic scoping: template invocations inherit no variables. + newState.vars = []variable{{"$", dot}} + newState.walk(dot, tmpl.Root) +} + +// Eval functions evaluate pipelines, commands, and their elements and extract +// values from the data structure by examining fields, calling methods, and so on. +// The printing of those values happens only through walk functions. + +// evalPipeline returns the value acquired by evaluating a pipeline. If the +// pipeline has a variable declaration, the variable will be pushed on the +// stack. Callers should therefore pop the stack after they are finished +// executing commands depending on the pipeline value. +func (s *state) evalPipeline(dot reflect.Value, pipe *parse.PipeNode) (value reflect.Value) { + if pipe == nil { + return + } + s.at(pipe) + for _, cmd := range pipe.Cmds { + value = s.evalCommand(dot, cmd, value) // previous value is this one's final arg. + // If the object has type interface{}, dig down one level to the thing inside. + if value.Kind() == reflect.Interface && value.Type().NumMethod() == 0 { + value = reflect.ValueOf(value.Interface()) // lovely! + } + } + for _, variable := range pipe.Decl { + s.push(variable.Ident[0], value) + } + return value +} + +func (s *state) notAFunction(args []parse.Node, final reflect.Value) { + if len(args) > 1 || final.IsValid() { + s.errorf("can't give argument to non-function %s", args[0]) + } +} + +func (s *state) evalCommand(dot reflect.Value, cmd *parse.CommandNode, final reflect.Value) reflect.Value { + firstWord := cmd.Args[0] + switch n := firstWord.(type) { + case *parse.FieldNode: + return s.evalFieldNode(dot, n, cmd.Args, final) + case *parse.ChainNode: + return s.evalChainNode(dot, n, cmd.Args, final) + case *parse.IdentifierNode: + // Must be a function. + return s.evalFunction(dot, n, cmd, cmd.Args, final) + case *parse.PipeNode: + // Parenthesized pipeline. The arguments are all inside the pipeline; final is ignored. + return s.evalPipeline(dot, n) + case *parse.VariableNode: + return s.evalVariableNode(dot, n, cmd.Args, final) + } + s.at(firstWord) + s.notAFunction(cmd.Args, final) + switch word := firstWord.(type) { + case *parse.BoolNode: + return reflect.ValueOf(word.True) + case *parse.DotNode: + return dot + case *parse.NilNode: + s.errorf("nil is not a command") + case *parse.NumberNode: + return s.idealConstant(word) + case *parse.StringNode: + return reflect.ValueOf(word.Text) + } + s.errorf("can't evaluate command %q", firstWord) + panic("not reached") +} + +// idealConstant is called to return the value of a number in a context where +// we don't know the type. In that case, the syntax of the number tells us +// its type, and we use Go rules to resolve. Note there is no such thing as +// a uint ideal constant in this situation - the value must be of int type. +func (s *state) idealConstant(constant *parse.NumberNode) reflect.Value { + // These are ideal constants but we don't know the type + // and we have no context. (If it was a method argument, + // we'd know what we need.) The syntax guides us to some extent. + s.at(constant) + switch { + case constant.IsComplex: + return reflect.ValueOf(constant.Complex128) // incontrovertible. + case constant.IsFloat && !isHexConstant(constant.Text) && strings.IndexAny(constant.Text, ".eE") >= 0: + return reflect.ValueOf(constant.Float64) + case constant.IsInt: + n := int(constant.Int64) + if int64(n) != constant.Int64 { + s.errorf("%s overflows int", constant.Text) + } + return reflect.ValueOf(n) + case constant.IsUint: + s.errorf("%s overflows int", constant.Text) + } + return zero +} + +func isHexConstant(s string) bool { + return len(s) > 2 && s[0] == '0' && (s[1] == 'x' || s[1] == 'X') +} + +func (s *state) evalFieldNode(dot reflect.Value, field *parse.FieldNode, args []parse.Node, final reflect.Value) reflect.Value { + s.at(field) + return s.evalFieldChain(dot, dot, field, field.Ident, args, final) +} + +func (s *state) evalChainNode(dot reflect.Value, chain *parse.ChainNode, args []parse.Node, final reflect.Value) reflect.Value { + s.at(chain) + // (pipe).Field1.Field2 has pipe as .Node, fields as .Field. Eval the pipeline, then the fields. + pipe := s.evalArg(dot, nil, chain.Node) + if len(chain.Field) == 0 { + s.errorf("internal error: no fields in evalChainNode") + } + return s.evalFieldChain(dot, pipe, chain, chain.Field, args, final) +} + +func (s *state) evalVariableNode(dot reflect.Value, variable *parse.VariableNode, args []parse.Node, final reflect.Value) reflect.Value { + // $x.Field has $x as the first ident, Field as the second. Eval the var, then the fields. + s.at(variable) + value := s.varValue(variable.Ident[0]) + if len(variable.Ident) == 1 { + s.notAFunction(args, final) + return value + } + return s.evalFieldChain(dot, value, variable, variable.Ident[1:], args, final) +} + +// evalFieldChain evaluates .X.Y.Z possibly followed by arguments. +// dot is the environment in which to evaluate arguments, while +// receiver is the value being walked along the chain. +func (s *state) evalFieldChain(dot, receiver reflect.Value, node parse.Node, ident []string, args []parse.Node, final reflect.Value) reflect.Value { + n := len(ident) + for i := 0; i < n-1; i++ { + receiver = s.evalField(dot, ident[i], node, nil, zero, receiver) + } + // Now if it's a method, it gets the arguments. + return s.evalField(dot, ident[n-1], node, args, final, receiver) +} + +func (s *state) evalFunction(dot reflect.Value, node *parse.IdentifierNode, cmd parse.Node, args []parse.Node, final reflect.Value) reflect.Value { + s.at(node) + name := node.Ident + function, ok := findFunction(name, s.tmpl) + if !ok { + s.errorf("%q is not a defined function", name) + } + return s.evalCall(dot, function, cmd, name, args, final) +} + +// evalField evaluates an expression like (.Field) or (.Field arg1 arg2). +// The 'final' argument represents the return value from the preceding +// value of the pipeline, if any. +func (s *state) evalField(dot reflect.Value, fieldName string, node parse.Node, args []parse.Node, final, receiver reflect.Value) reflect.Value { + if !receiver.IsValid() { + return zero + } + typ := receiver.Type() + receiver, _ = indirect(receiver) + // Unless it's an interface, need to get to a value of type *T to guarantee + // we see all methods of T and *T. + ptr := receiver + if ptr.Kind() != reflect.Interface && ptr.CanAddr() { + ptr = ptr.Addr() + } + if method := ptr.MethodByName(fieldName); method.IsValid() { + return s.evalCall(dot, method, node, fieldName, args, final) + } + hasArgs := len(args) > 1 || final.IsValid() + // It's not a method; must be a field of a struct or an element of a map. The receiver must not be nil. + receiver, isNil := indirect(receiver) + if isNil { + s.errorf("nil pointer evaluating %s.%s", typ, fieldName) + } + switch receiver.Kind() { + case reflect.Struct: + tField, ok := receiver.Type().FieldByName(fieldName) + if ok { + field := receiver.FieldByIndex(tField.Index) + if tField.PkgPath != "" { // field is unexported + s.errorf("%s is an unexported field of struct type %s", fieldName, typ) + } + // If it's a function, we must call it. + if hasArgs { + s.errorf("%s has arguments but cannot be invoked as function", fieldName) + } + return field + } + s.errorf("%s is not a field of struct type %s", fieldName, typ) + case reflect.Map: + // If it's a map, attempt to use the field name as a key. + nameVal := reflect.ValueOf(fieldName) + if nameVal.Type().AssignableTo(receiver.Type().Key()) { + if hasArgs { + s.errorf("%s is not a method but has arguments", fieldName) + } + return receiver.MapIndex(nameVal) + } + } + s.errorf("can't evaluate field %s in type %s", fieldName, typ) + panic("not reached") +} + +var ( + errorType = reflect.TypeOf((*error)(nil)).Elem() + fmtStringerType = reflect.TypeOf((*fmt.Stringer)(nil)).Elem() +) + +// evalCall executes a function or method call. If it's a method, fun already has the receiver bound, so +// it looks just like a function call. The arg list, if non-nil, includes (in the manner of the shell), arg[0] +// as the function itself. +func (s *state) evalCall(dot, fun reflect.Value, node parse.Node, name string, args []parse.Node, final reflect.Value) reflect.Value { + if args != nil { + args = args[1:] // Zeroth arg is function name/node; not passed to function. + } + typ := fun.Type() + numIn := len(args) + if final.IsValid() { + numIn++ + } + numFixed := len(args) + if typ.IsVariadic() { + numFixed = typ.NumIn() - 1 // last arg is the variadic one. + if numIn < numFixed { + s.errorf("wrong number of args for %s: want at least %d got %d", name, typ.NumIn()-1, len(args)) + } + } else if numIn < typ.NumIn()-1 || !typ.IsVariadic() && numIn != typ.NumIn() { + s.errorf("wrong number of args for %s: want %d got %d", name, typ.NumIn(), len(args)) + } + if !goodFunc(typ) { + // TODO: This could still be a confusing error; maybe goodFunc should provide info. + s.errorf("can't call method/function %q with %d results", name, typ.NumOut()) + } + // Build the arg list. + argv := make([]reflect.Value, numIn) + // Args must be evaluated. Fixed args first. + i := 0 + for ; i < numFixed && i < len(args); i++ { + argv[i] = s.evalArg(dot, typ.In(i), args[i]) + } + // Now the ... args. + if typ.IsVariadic() { + argType := typ.In(typ.NumIn() - 1).Elem() // Argument is a slice. + for ; i < len(args); i++ { + argv[i] = s.evalArg(dot, argType, args[i]) + } + } + // Add final value if necessary. + if final.IsValid() { + t := typ.In(typ.NumIn() - 1) + if typ.IsVariadic() { + t = t.Elem() + } + argv[i] = s.validateType(final, t) + } + result := fun.Call(argv) + // If we have an error that is not nil, stop execution and return that error to the caller. + if len(result) == 2 && !result[1].IsNil() { + s.at(node) + s.errorf("error calling %s: %s", name, result[1].Interface().(error)) + } + return result[0] +} + +// canBeNil reports whether an untyped nil can be assigned to the type. See reflect.Zero. +func canBeNil(typ reflect.Type) bool { + switch typ.Kind() { + case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice: + return true + } + return false +} + +// validateType guarantees that the value is valid and assignable to the type. +func (s *state) validateType(value reflect.Value, typ reflect.Type) reflect.Value { + if !value.IsValid() { + if typ == nil || canBeNil(typ) { + // An untyped nil interface{}. Accept as a proper nil value. + return reflect.Zero(typ) + } + s.errorf("invalid value; expected %s", typ) + } + if typ != nil && !value.Type().AssignableTo(typ) { + if value.Kind() == reflect.Interface && !value.IsNil() { + value = value.Elem() + if value.Type().AssignableTo(typ) { + return value + } + // fallthrough + } + // Does one dereference or indirection work? We could do more, as we + // do with method receivers, but that gets messy and method receivers + // are much more constrained, so it makes more sense there than here. + // Besides, one is almost always all you need. + switch { + case value.Kind() == reflect.Ptr && value.Type().Elem().AssignableTo(typ): + value = value.Elem() + if !value.IsValid() { + s.errorf("dereference of nil pointer of type %s", typ) + } + case reflect.PtrTo(value.Type()).AssignableTo(typ) && value.CanAddr(): + value = value.Addr() + default: + s.errorf("wrong type for value; expected %s; got %s", typ, value.Type()) + } + } + return value +} + +func (s *state) evalArg(dot reflect.Value, typ reflect.Type, n parse.Node) reflect.Value { + s.at(n) + switch arg := n.(type) { + case *parse.DotNode: + return s.validateType(dot, typ) + case *parse.NilNode: + if canBeNil(typ) { + return reflect.Zero(typ) + } + s.errorf("cannot assign nil to %s", typ) + case *parse.FieldNode: + return s.validateType(s.evalFieldNode(dot, arg, []parse.Node{n}, zero), typ) + case *parse.VariableNode: + return s.validateType(s.evalVariableNode(dot, arg, nil, zero), typ) + case *parse.PipeNode: + return s.validateType(s.evalPipeline(dot, arg), typ) + case *parse.IdentifierNode: + return s.evalFunction(dot, arg, arg, nil, zero) + case *parse.ChainNode: + return s.validateType(s.evalChainNode(dot, arg, nil, zero), typ) + } + switch typ.Kind() { + case reflect.Bool: + return s.evalBool(typ, n) + case reflect.Complex64, reflect.Complex128: + return s.evalComplex(typ, n) + case reflect.Float32, reflect.Float64: + return s.evalFloat(typ, n) + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return s.evalInteger(typ, n) + case reflect.Interface: + if typ.NumMethod() == 0 { + return s.evalEmptyInterface(dot, n) + } + case reflect.String: + return s.evalString(typ, n) + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return s.evalUnsignedInteger(typ, n) + } + s.errorf("can't handle %s for arg of type %s", n, typ) + panic("not reached") +} + +func (s *state) evalBool(typ reflect.Type, n parse.Node) reflect.Value { + s.at(n) + if n, ok := n.(*parse.BoolNode); ok { + value := reflect.New(typ).Elem() + value.SetBool(n.True) + return value + } + s.errorf("expected bool; found %s", n) + panic("not reached") +} + +func (s *state) evalString(typ reflect.Type, n parse.Node) reflect.Value { + s.at(n) + if n, ok := n.(*parse.StringNode); ok { + value := reflect.New(typ).Elem() + value.SetString(n.Text) + return value + } + s.errorf("expected string; found %s", n) + panic("not reached") +} + +func (s *state) evalInteger(typ reflect.Type, n parse.Node) reflect.Value { + s.at(n) + if n, ok := n.(*parse.NumberNode); ok && n.IsInt { + value := reflect.New(typ).Elem() + value.SetInt(n.Int64) + return value + } + s.errorf("expected integer; found %s", n) + panic("not reached") +} + +func (s *state) evalUnsignedInteger(typ reflect.Type, n parse.Node) reflect.Value { + s.at(n) + if n, ok := n.(*parse.NumberNode); ok && n.IsUint { + value := reflect.New(typ).Elem() + value.SetUint(n.Uint64) + return value + } + s.errorf("expected unsigned integer; found %s", n) + panic("not reached") +} + +func (s *state) evalFloat(typ reflect.Type, n parse.Node) reflect.Value { + s.at(n) + if n, ok := n.(*parse.NumberNode); ok && n.IsFloat { + value := reflect.New(typ).Elem() + value.SetFloat(n.Float64) + return value + } + s.errorf("expected float; found %s", n) + panic("not reached") +} + +func (s *state) evalComplex(typ reflect.Type, n parse.Node) reflect.Value { + if n, ok := n.(*parse.NumberNode); ok && n.IsComplex { + value := reflect.New(typ).Elem() + value.SetComplex(n.Complex128) + return value + } + s.errorf("expected complex; found %s", n) + panic("not reached") +} + +func (s *state) evalEmptyInterface(dot reflect.Value, n parse.Node) reflect.Value { + s.at(n) + switch n := n.(type) { + case *parse.BoolNode: + return reflect.ValueOf(n.True) + case *parse.DotNode: + return dot + case *parse.FieldNode: + return s.evalFieldNode(dot, n, nil, zero) + case *parse.IdentifierNode: + return s.evalFunction(dot, n, n, nil, zero) + case *parse.NilNode: + // NilNode is handled in evalArg, the only place that calls here. + s.errorf("evalEmptyInterface: nil (can't happen)") + case *parse.NumberNode: + return s.idealConstant(n) + case *parse.StringNode: + return reflect.ValueOf(n.Text) + case *parse.VariableNode: + return s.evalVariableNode(dot, n, nil, zero) + case *parse.PipeNode: + return s.evalPipeline(dot, n) + } + s.errorf("can't handle assignment of %s to empty interface argument", n) + panic("not reached") +} + +// indirect returns the item at the end of indirection, and a bool to indicate if it's nil. +// We indirect through pointers and empty interfaces (only) because +// non-empty interfaces have methods we might need. +func indirect(v reflect.Value) (rv reflect.Value, isNil bool) { + for ; v.Kind() == reflect.Ptr || v.Kind() == reflect.Interface; v = v.Elem() { + if v.IsNil() { + return v, true + } + if v.Kind() == reflect.Interface && v.NumMethod() > 0 { + break + } + } + return v, false +} + +// printValue writes the textual representation of the value to the output of +// the template. +func (s *state) printValue(n parse.Node, v reflect.Value) { + s.at(n) + iface, ok := printableValue(v) + if !ok { + s.errorf("can't print %s of type %s", n, v.Type()) + } + fmt.Fprint(s.wr, iface) +} + +// printableValue returns the, possibly indirected, interface value inside v that +// is best for a call to formatted printer. +func printableValue(v reflect.Value) (interface{}, bool) { + if v.Kind() == reflect.Ptr { + v, _ = indirect(v) // fmt.Fprint handles nil. + } + if !v.IsValid() { + return "", true + } + + if !v.Type().Implements(errorType) && !v.Type().Implements(fmtStringerType) { + if v.CanAddr() && (reflect.PtrTo(v.Type()).Implements(errorType) || reflect.PtrTo(v.Type()).Implements(fmtStringerType)) { + v = v.Addr() + } else { + switch v.Kind() { + case reflect.Chan, reflect.Func: + return nil, false + } + } + } + return v.Interface(), true +} + +// Types to help sort the keys in a map for reproducible output. + +type rvs []reflect.Value + +func (x rvs) Len() int { return len(x) } +func (x rvs) Swap(i, j int) { x[i], x[j] = x[j], x[i] } + +type rvInts struct{ rvs } + +func (x rvInts) Less(i, j int) bool { return x.rvs[i].Int() < x.rvs[j].Int() } + +type rvUints struct{ rvs } + +func (x rvUints) Less(i, j int) bool { return x.rvs[i].Uint() < x.rvs[j].Uint() } + +type rvFloats struct{ rvs } + +func (x rvFloats) Less(i, j int) bool { return x.rvs[i].Float() < x.rvs[j].Float() } + +type rvStrings struct{ rvs } + +func (x rvStrings) Less(i, j int) bool { return x.rvs[i].String() < x.rvs[j].String() } + +// sortKeys sorts (if it can) the slice of reflect.Values, which is a slice of map keys. +func sortKeys(v []reflect.Value) []reflect.Value { + if len(v) <= 1 { + return v + } + switch v[0].Kind() { + case reflect.Float32, reflect.Float64: + sort.Sort(rvFloats{v}) + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + sort.Sort(rvInts{v}) + case reflect.String: + sort.Sort(rvStrings{v}) + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + sort.Sort(rvUints{v}) + } + return v +} diff --git a/vendor/github.com/alecthomas/template/exec_test.go b/vendor/github.com/alecthomas/template/exec_test.go new file mode 100644 index 0000000..69c213e --- /dev/null +++ b/vendor/github.com/alecthomas/template/exec_test.go @@ -0,0 +1,1044 @@ +// Copyright 2011 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. + +package template + +import ( + "bytes" + "errors" + "flag" + "fmt" + "reflect" + "strings" + "testing" +) + +var debug = flag.Bool("debug", false, "show the errors produced by the tests") + +// T has lots of interesting pieces to use to test execution. +type T struct { + // Basics + True bool + I int + U16 uint16 + X string + FloatZero float64 + ComplexZero complex128 + // Nested structs. + U *U + // Struct with String method. + V0 V + V1, V2 *V + // Struct with Error method. + W0 W + W1, W2 *W + // Slices + SI []int + SIEmpty []int + SB []bool + // Maps + MSI map[string]int + MSIone map[string]int // one element, for deterministic output + MSIEmpty map[string]int + MXI map[interface{}]int + MII map[int]int + SMSI []map[string]int + // Empty interfaces; used to see if we can dig inside one. + Empty0 interface{} // nil + Empty1 interface{} + Empty2 interface{} + Empty3 interface{} + Empty4 interface{} + // Non-empty interface. + NonEmptyInterface I + // Stringer. + Str fmt.Stringer + Err error + // Pointers + PI *int + PS *string + PSI *[]int + NIL *int + // Function (not method) + BinaryFunc func(string, string) string + VariadicFunc func(...string) string + VariadicFuncInt func(int, ...string) string + NilOKFunc func(*int) bool + ErrFunc func() (string, error) + // Template to test evaluation of templates. + Tmpl *Template + // Unexported field; cannot be accessed by template. + unexported int +} + +type U struct { + V string +} + +type V struct { + j int +} + +func (v *V) String() string { + if v == nil { + return "nilV" + } + return fmt.Sprintf("<%d>", v.j) +} + +type W struct { + k int +} + +func (w *W) Error() string { + if w == nil { + return "nilW" + } + return fmt.Sprintf("[%d]", w.k) +} + +var tVal = &T{ + True: true, + I: 17, + U16: 16, + X: "x", + U: &U{"v"}, + V0: V{6666}, + V1: &V{7777}, // leave V2 as nil + W0: W{888}, + W1: &W{999}, // leave W2 as nil + SI: []int{3, 4, 5}, + SB: []bool{true, false}, + MSI: map[string]int{"one": 1, "two": 2, "three": 3}, + MSIone: map[string]int{"one": 1}, + MXI: map[interface{}]int{"one": 1}, + MII: map[int]int{1: 1}, + SMSI: []map[string]int{ + {"one": 1, "two": 2}, + {"eleven": 11, "twelve": 12}, + }, + Empty1: 3, + Empty2: "empty2", + Empty3: []int{7, 8}, + Empty4: &U{"UinEmpty"}, + NonEmptyInterface: new(T), + Str: bytes.NewBuffer([]byte("foozle")), + Err: errors.New("erroozle"), + PI: newInt(23), + PS: newString("a string"), + PSI: newIntSlice(21, 22, 23), + BinaryFunc: func(a, b string) string { return fmt.Sprintf("[%s=%s]", a, b) }, + VariadicFunc: func(s ...string) string { return fmt.Sprint("<", strings.Join(s, "+"), ">") }, + VariadicFuncInt: func(a int, s ...string) string { return fmt.Sprint(a, "=<", strings.Join(s, "+"), ">") }, + NilOKFunc: func(s *int) bool { return s == nil }, + ErrFunc: func() (string, error) { return "bla", nil }, + Tmpl: Must(New("x").Parse("test template")), // "x" is the value of .X +} + +// A non-empty interface. +type I interface { + Method0() string +} + +var iVal I = tVal + +// Helpers for creation. +func newInt(n int) *int { + return &n +} + +func newString(s string) *string { + return &s +} + +func newIntSlice(n ...int) *[]int { + p := new([]int) + *p = make([]int, len(n)) + copy(*p, n) + return p +} + +// Simple methods with and without arguments. +func (t *T) Method0() string { + return "M0" +} + +func (t *T) Method1(a int) int { + return a +} + +func (t *T) Method2(a uint16, b string) string { + return fmt.Sprintf("Method2: %d %s", a, b) +} + +func (t *T) Method3(v interface{}) string { + return fmt.Sprintf("Method3: %v", v) +} + +func (t *T) Copy() *T { + n := new(T) + *n = *t + return n +} + +func (t *T) MAdd(a int, b []int) []int { + v := make([]int, len(b)) + for i, x := range b { + v[i] = x + a + } + return v +} + +var myError = errors.New("my error") + +// MyError returns a value and an error according to its argument. +func (t *T) MyError(error bool) (bool, error) { + if error { + return true, myError + } + return false, nil +} + +// A few methods to test chaining. +func (t *T) GetU() *U { + return t.U +} + +func (u *U) TrueFalse(b bool) string { + if b { + return "true" + } + return "" +} + +func typeOf(arg interface{}) string { + return fmt.Sprintf("%T", arg) +} + +type execTest struct { + name string + input string + output string + data interface{} + ok bool +} + +// bigInt and bigUint are hex string representing numbers either side +// of the max int boundary. +// We do it this way so the test doesn't depend on ints being 32 bits. +var ( + bigInt = fmt.Sprintf("0x%x", int(1<", tVal, true}, + {"map .one interface", "{{.MXI.one}}", "1", tVal, true}, + {"map .WRONG args", "{{.MSI.one 1}}", "", tVal, false}, + {"map .WRONG type", "{{.MII.one}}", "", tVal, false}, + + // Dots of all kinds to test basic evaluation. + {"dot int", "<{{.}}>", "<13>", 13, true}, + {"dot uint", "<{{.}}>", "<14>", uint(14), true}, + {"dot float", "<{{.}}>", "<15.1>", 15.1, true}, + {"dot bool", "<{{.}}>", "", true, true}, + {"dot complex", "<{{.}}>", "<(16.2-17i)>", 16.2 - 17i, true}, + {"dot string", "<{{.}}>", "", "hello", true}, + {"dot slice", "<{{.}}>", "<[-1 -2 -3]>", []int{-1, -2, -3}, true}, + {"dot map", "<{{.}}>", "", map[string]int{"two": 22}, true}, + {"dot struct", "<{{.}}>", "<{7 seven}>", struct { + a int + b string + }{7, "seven"}, true}, + + // Variables. + {"$ int", "{{$}}", "123", 123, true}, + {"$.I", "{{$.I}}", "17", tVal, true}, + {"$.U.V", "{{$.U.V}}", "v", tVal, true}, + {"declare in action", "{{$x := $.U.V}}{{$x}}", "v", tVal, true}, + + // Type with String method. + {"V{6666}.String()", "-{{.V0}}-", "-<6666>-", tVal, true}, + {"&V{7777}.String()", "-{{.V1}}-", "-<7777>-", tVal, true}, + {"(*V)(nil).String()", "-{{.V2}}-", "-nilV-", tVal, true}, + + // Type with Error method. + {"W{888}.Error()", "-{{.W0}}-", "-[888]-", tVal, true}, + {"&W{999}.Error()", "-{{.W1}}-", "-[999]-", tVal, true}, + {"(*W)(nil).Error()", "-{{.W2}}-", "-nilW-", tVal, true}, + + // Pointers. + {"*int", "{{.PI}}", "23", tVal, true}, + {"*string", "{{.PS}}", "a string", tVal, true}, + {"*[]int", "{{.PSI}}", "[21 22 23]", tVal, true}, + {"*[]int[1]", "{{index .PSI 1}}", "22", tVal, true}, + {"NIL", "{{.NIL}}", "", tVal, true}, + + // Empty interfaces holding values. + {"empty nil", "{{.Empty0}}", "", tVal, true}, + {"empty with int", "{{.Empty1}}", "3", tVal, true}, + {"empty with string", "{{.Empty2}}", "empty2", tVal, true}, + {"empty with slice", "{{.Empty3}}", "[7 8]", tVal, true}, + {"empty with struct", "{{.Empty4}}", "{UinEmpty}", tVal, true}, + {"empty with struct, field", "{{.Empty4.V}}", "UinEmpty", tVal, true}, + + // Method calls. + {".Method0", "-{{.Method0}}-", "-M0-", tVal, true}, + {".Method1(1234)", "-{{.Method1 1234}}-", "-1234-", tVal, true}, + {".Method1(.I)", "-{{.Method1 .I}}-", "-17-", tVal, true}, + {".Method2(3, .X)", "-{{.Method2 3 .X}}-", "-Method2: 3 x-", tVal, true}, + {".Method2(.U16, `str`)", "-{{.Method2 .U16 `str`}}-", "-Method2: 16 str-", tVal, true}, + {".Method2(.U16, $x)", "{{if $x := .X}}-{{.Method2 .U16 $x}}{{end}}-", "-Method2: 16 x-", tVal, true}, + {".Method3(nil constant)", "-{{.Method3 nil}}-", "-Method3: -", tVal, true}, + {".Method3(nil value)", "-{{.Method3 .MXI.unset}}-", "-Method3: -", tVal, true}, + {"method on var", "{{if $x := .}}-{{$x.Method2 .U16 $x.X}}{{end}}-", "-Method2: 16 x-", tVal, true}, + {"method on chained var", + "{{range .MSIone}}{{if $.U.TrueFalse $.True}}{{$.U.TrueFalse $.True}}{{else}}WRONG{{end}}{{end}}", + "true", tVal, true}, + {"chained method", + "{{range .MSIone}}{{if $.GetU.TrueFalse $.True}}{{$.U.TrueFalse $.True}}{{else}}WRONG{{end}}{{end}}", + "true", tVal, true}, + {"chained method on variable", + "{{with $x := .}}{{with .SI}}{{$.GetU.TrueFalse $.True}}{{end}}{{end}}", + "true", tVal, true}, + {".NilOKFunc not nil", "{{call .NilOKFunc .PI}}", "false", tVal, true}, + {".NilOKFunc nil", "{{call .NilOKFunc nil}}", "true", tVal, true}, + + // Function call builtin. + {".BinaryFunc", "{{call .BinaryFunc `1` `2`}}", "[1=2]", tVal, true}, + {".VariadicFunc0", "{{call .VariadicFunc}}", "<>", tVal, true}, + {".VariadicFunc2", "{{call .VariadicFunc `he` `llo`}}", "", tVal, true}, + {".VariadicFuncInt", "{{call .VariadicFuncInt 33 `he` `llo`}}", "33=", tVal, true}, + {"if .BinaryFunc call", "{{ if .BinaryFunc}}{{call .BinaryFunc `1` `2`}}{{end}}", "[1=2]", tVal, true}, + {"if not .BinaryFunc call", "{{ if not .BinaryFunc}}{{call .BinaryFunc `1` `2`}}{{else}}No{{end}}", "No", tVal, true}, + {"Interface Call", `{{stringer .S}}`, "foozle", map[string]interface{}{"S": bytes.NewBufferString("foozle")}, true}, + {".ErrFunc", "{{call .ErrFunc}}", "bla", tVal, true}, + + // Erroneous function calls (check args). + {".BinaryFuncTooFew", "{{call .BinaryFunc `1`}}", "", tVal, false}, + {".BinaryFuncTooMany", "{{call .BinaryFunc `1` `2` `3`}}", "", tVal, false}, + {".BinaryFuncBad0", "{{call .BinaryFunc 1 3}}", "", tVal, false}, + {".BinaryFuncBad1", "{{call .BinaryFunc `1` 3}}", "", tVal, false}, + {".VariadicFuncBad0", "{{call .VariadicFunc 3}}", "", tVal, false}, + {".VariadicFuncIntBad0", "{{call .VariadicFuncInt}}", "", tVal, false}, + {".VariadicFuncIntBad`", "{{call .VariadicFuncInt `x`}}", "", tVal, false}, + {".VariadicFuncNilBad", "{{call .VariadicFunc nil}}", "", tVal, false}, + + // Pipelines. + {"pipeline", "-{{.Method0 | .Method2 .U16}}-", "-Method2: 16 M0-", tVal, true}, + {"pipeline func", "-{{call .VariadicFunc `llo` | call .VariadicFunc `he` }}-", "->-", tVal, true}, + + // Parenthesized expressions + {"parens in pipeline", "{{printf `%d %d %d` (1) (2 | add 3) (add 4 (add 5 6))}}", "1 5 15", tVal, true}, + + // Parenthesized expressions with field accesses + {"parens: $ in paren", "{{($).X}}", "x", tVal, true}, + {"parens: $.GetU in paren", "{{($.GetU).V}}", "v", tVal, true}, + {"parens: $ in paren in pipe", "{{($ | echo).X}}", "x", tVal, true}, + {"parens: spaces and args", `{{(makemap "up" "down" "left" "right").left}}`, "right", tVal, true}, + + // If. + {"if true", "{{if true}}TRUE{{end}}", "TRUE", tVal, true}, + {"if false", "{{if false}}TRUE{{else}}FALSE{{end}}", "FALSE", tVal, true}, + {"if nil", "{{if nil}}TRUE{{end}}", "", tVal, false}, + {"if 1", "{{if 1}}NON-ZERO{{else}}ZERO{{end}}", "NON-ZERO", tVal, true}, + {"if 0", "{{if 0}}NON-ZERO{{else}}ZERO{{end}}", "ZERO", tVal, true}, + {"if 1.5", "{{if 1.5}}NON-ZERO{{else}}ZERO{{end}}", "NON-ZERO", tVal, true}, + {"if 0.0", "{{if .FloatZero}}NON-ZERO{{else}}ZERO{{end}}", "ZERO", tVal, true}, + {"if 1.5i", "{{if 1.5i}}NON-ZERO{{else}}ZERO{{end}}", "NON-ZERO", tVal, true}, + {"if 0.0i", "{{if .ComplexZero}}NON-ZERO{{else}}ZERO{{end}}", "ZERO", tVal, true}, + {"if emptystring", "{{if ``}}NON-EMPTY{{else}}EMPTY{{end}}", "EMPTY", tVal, true}, + {"if string", "{{if `notempty`}}NON-EMPTY{{else}}EMPTY{{end}}", "NON-EMPTY", tVal, true}, + {"if emptyslice", "{{if .SIEmpty}}NON-EMPTY{{else}}EMPTY{{end}}", "EMPTY", tVal, true}, + {"if slice", "{{if .SI}}NON-EMPTY{{else}}EMPTY{{end}}", "NON-EMPTY", tVal, true}, + {"if emptymap", "{{if .MSIEmpty}}NON-EMPTY{{else}}EMPTY{{end}}", "EMPTY", tVal, true}, + {"if map", "{{if .MSI}}NON-EMPTY{{else}}EMPTY{{end}}", "NON-EMPTY", tVal, true}, + {"if map unset", "{{if .MXI.none}}NON-ZERO{{else}}ZERO{{end}}", "ZERO", tVal, true}, + {"if map not unset", "{{if not .MXI.none}}ZERO{{else}}NON-ZERO{{end}}", "ZERO", tVal, true}, + {"if $x with $y int", "{{if $x := true}}{{with $y := .I}}{{$x}},{{$y}}{{end}}{{end}}", "true,17", tVal, true}, + {"if $x with $x int", "{{if $x := true}}{{with $x := .I}}{{$x}},{{end}}{{$x}}{{end}}", "17,true", tVal, true}, + {"if else if", "{{if false}}FALSE{{else if true}}TRUE{{end}}", "TRUE", tVal, true}, + {"if else chain", "{{if eq 1 3}}1{{else if eq 2 3}}2{{else if eq 3 3}}3{{end}}", "3", tVal, true}, + + // Print etc. + {"print", `{{print "hello, print"}}`, "hello, print", tVal, true}, + {"print 123", `{{print 1 2 3}}`, "1 2 3", tVal, true}, + {"print nil", `{{print nil}}`, "", tVal, true}, + {"println", `{{println 1 2 3}}`, "1 2 3\n", tVal, true}, + {"printf int", `{{printf "%04x" 127}}`, "007f", tVal, true}, + {"printf float", `{{printf "%g" 3.5}}`, "3.5", tVal, true}, + {"printf complex", `{{printf "%g" 1+7i}}`, "(1+7i)", tVal, true}, + {"printf string", `{{printf "%s" "hello"}}`, "hello", tVal, true}, + {"printf function", `{{printf "%#q" zeroArgs}}`, "`zeroArgs`", tVal, true}, + {"printf field", `{{printf "%s" .U.V}}`, "v", tVal, true}, + {"printf method", `{{printf "%s" .Method0}}`, "M0", tVal, true}, + {"printf dot", `{{with .I}}{{printf "%d" .}}{{end}}`, "17", tVal, true}, + {"printf var", `{{with $x := .I}}{{printf "%d" $x}}{{end}}`, "17", tVal, true}, + {"printf lots", `{{printf "%d %s %g %s" 127 "hello" 7-3i .Method0}}`, "127 hello (7-3i) M0", tVal, true}, + + // HTML. + {"html", `{{html ""}}`, + "<script>alert("XSS");</script>", nil, true}, + {"html pipeline", `{{printf "" | html}}`, + "<script>alert("XSS");</script>", nil, true}, + {"html", `{{html .PS}}`, "a string", tVal, true}, + + // JavaScript. + {"js", `{{js .}}`, `It\'d be nice.`, `It'd be nice.`, true}, + + // URL query. + {"urlquery", `{{"http://www.example.org/"|urlquery}}`, "http%3A%2F%2Fwww.example.org%2F", nil, true}, + + // Booleans + {"not", "{{not true}} {{not false}}", "false true", nil, true}, + {"and", "{{and false 0}} {{and 1 0}} {{and 0 true}} {{and 1 1}}", "false 0 0 1", nil, true}, + {"or", "{{or 0 0}} {{or 1 0}} {{or 0 true}} {{or 1 1}}", "0 1 true 1", nil, true}, + {"boolean if", "{{if and true 1 `hi`}}TRUE{{else}}FALSE{{end}}", "TRUE", tVal, true}, + {"boolean if not", "{{if and true 1 `hi` | not}}TRUE{{else}}FALSE{{end}}", "FALSE", nil, true}, + + // Indexing. + {"slice[0]", "{{index .SI 0}}", "3", tVal, true}, + {"slice[1]", "{{index .SI 1}}", "4", tVal, true}, + {"slice[HUGE]", "{{index .SI 10}}", "", tVal, false}, + {"slice[WRONG]", "{{index .SI `hello`}}", "", tVal, false}, + {"map[one]", "{{index .MSI `one`}}", "1", tVal, true}, + {"map[two]", "{{index .MSI `two`}}", "2", tVal, true}, + {"map[NO]", "{{index .MSI `XXX`}}", "0", tVal, true}, + {"map[nil]", "{{index .MSI nil}}", "0", tVal, true}, + {"map[WRONG]", "{{index .MSI 10}}", "", tVal, false}, + {"double index", "{{index .SMSI 1 `eleven`}}", "11", tVal, true}, + + // Len. + {"slice", "{{len .SI}}", "3", tVal, true}, + {"map", "{{len .MSI }}", "3", tVal, true}, + {"len of int", "{{len 3}}", "", tVal, false}, + {"len of nothing", "{{len .Empty0}}", "", tVal, false}, + + // With. + {"with true", "{{with true}}{{.}}{{end}}", "true", tVal, true}, + {"with false", "{{with false}}{{.}}{{else}}FALSE{{end}}", "FALSE", tVal, true}, + {"with 1", "{{with 1}}{{.}}{{else}}ZERO{{end}}", "1", tVal, true}, + {"with 0", "{{with 0}}{{.}}{{else}}ZERO{{end}}", "ZERO", tVal, true}, + {"with 1.5", "{{with 1.5}}{{.}}{{else}}ZERO{{end}}", "1.5", tVal, true}, + {"with 0.0", "{{with .FloatZero}}{{.}}{{else}}ZERO{{end}}", "ZERO", tVal, true}, + {"with 1.5i", "{{with 1.5i}}{{.}}{{else}}ZERO{{end}}", "(0+1.5i)", tVal, true}, + {"with 0.0i", "{{with .ComplexZero}}{{.}}{{else}}ZERO{{end}}", "ZERO", tVal, true}, + {"with emptystring", "{{with ``}}{{.}}{{else}}EMPTY{{end}}", "EMPTY", tVal, true}, + {"with string", "{{with `notempty`}}{{.}}{{else}}EMPTY{{end}}", "notempty", tVal, true}, + {"with emptyslice", "{{with .SIEmpty}}{{.}}{{else}}EMPTY{{end}}", "EMPTY", tVal, true}, + {"with slice", "{{with .SI}}{{.}}{{else}}EMPTY{{end}}", "[3 4 5]", tVal, true}, + {"with emptymap", "{{with .MSIEmpty}}{{.}}{{else}}EMPTY{{end}}", "EMPTY", tVal, true}, + {"with map", "{{with .MSIone}}{{.}}{{else}}EMPTY{{end}}", "map[one:1]", tVal, true}, + {"with empty interface, struct field", "{{with .Empty4}}{{.V}}{{end}}", "UinEmpty", tVal, true}, + {"with $x int", "{{with $x := .I}}{{$x}}{{end}}", "17", tVal, true}, + {"with $x struct.U.V", "{{with $x := $}}{{$x.U.V}}{{end}}", "v", tVal, true}, + {"with variable and action", "{{with $x := $}}{{$y := $.U.V}}{{$y}}{{end}}", "v", tVal, true}, + + // Range. + {"range []int", "{{range .SI}}-{{.}}-{{end}}", "-3--4--5-", tVal, true}, + {"range empty no else", "{{range .SIEmpty}}-{{.}}-{{end}}", "", tVal, true}, + {"range []int else", "{{range .SI}}-{{.}}-{{else}}EMPTY{{end}}", "-3--4--5-", tVal, true}, + {"range empty else", "{{range .SIEmpty}}-{{.}}-{{else}}EMPTY{{end}}", "EMPTY", tVal, true}, + {"range []bool", "{{range .SB}}-{{.}}-{{end}}", "-true--false-", tVal, true}, + {"range []int method", "{{range .SI | .MAdd .I}}-{{.}}-{{end}}", "-20--21--22-", tVal, true}, + {"range map", "{{range .MSI}}-{{.}}-{{end}}", "-1--3--2-", tVal, true}, + {"range empty map no else", "{{range .MSIEmpty}}-{{.}}-{{end}}", "", tVal, true}, + {"range map else", "{{range .MSI}}-{{.}}-{{else}}EMPTY{{end}}", "-1--3--2-", tVal, true}, + {"range empty map else", "{{range .MSIEmpty}}-{{.}}-{{else}}EMPTY{{end}}", "EMPTY", tVal, true}, + {"range empty interface", "{{range .Empty3}}-{{.}}-{{else}}EMPTY{{end}}", "-7--8-", tVal, true}, + {"range empty nil", "{{range .Empty0}}-{{.}}-{{end}}", "", tVal, true}, + {"range $x SI", "{{range $x := .SI}}<{{$x}}>{{end}}", "<3><4><5>", tVal, true}, + {"range $x $y SI", "{{range $x, $y := .SI}}<{{$x}}={{$y}}>{{end}}", "<0=3><1=4><2=5>", tVal, true}, + {"range $x MSIone", "{{range $x := .MSIone}}<{{$x}}>{{end}}", "<1>", tVal, true}, + {"range $x $y MSIone", "{{range $x, $y := .MSIone}}<{{$x}}={{$y}}>{{end}}", "", tVal, true}, + {"range $x PSI", "{{range $x := .PSI}}<{{$x}}>{{end}}", "<21><22><23>", tVal, true}, + {"declare in range", "{{range $x := .PSI}}<{{$foo:=$x}}{{$x}}>{{end}}", "<21><22><23>", tVal, true}, + {"range count", `{{range $i, $x := count 5}}[{{$i}}]{{$x}}{{end}}`, "[0]a[1]b[2]c[3]d[4]e", tVal, true}, + {"range nil count", `{{range $i, $x := count 0}}{{else}}empty{{end}}`, "empty", tVal, true}, + + // Cute examples. + {"or as if true", `{{or .SI "slice is empty"}}`, "[3 4 5]", tVal, true}, + {"or as if false", `{{or .SIEmpty "slice is empty"}}`, "slice is empty", tVal, true}, + + // Error handling. + {"error method, error", "{{.MyError true}}", "", tVal, false}, + {"error method, no error", "{{.MyError false}}", "false", tVal, true}, + + // Fixed bugs. + // Must separate dot and receiver; otherwise args are evaluated with dot set to variable. + {"bug0", "{{range .MSIone}}{{if $.Method1 .}}X{{end}}{{end}}", "X", tVal, true}, + // Do not loop endlessly in indirect for non-empty interfaces. + // The bug appears with *interface only; looped forever. + {"bug1", "{{.Method0}}", "M0", &iVal, true}, + // Was taking address of interface field, so method set was empty. + {"bug2", "{{$.NonEmptyInterface.Method0}}", "M0", tVal, true}, + // Struct values were not legal in with - mere oversight. + {"bug3", "{{with $}}{{.Method0}}{{end}}", "M0", tVal, true}, + // Nil interface values in if. + {"bug4", "{{if .Empty0}}non-nil{{else}}nil{{end}}", "nil", tVal, true}, + // Stringer. + {"bug5", "{{.Str}}", "foozle", tVal, true}, + {"bug5a", "{{.Err}}", "erroozle", tVal, true}, + // Args need to be indirected and dereferenced sometimes. + {"bug6a", "{{vfunc .V0 .V1}}", "vfunc", tVal, true}, + {"bug6b", "{{vfunc .V0 .V0}}", "vfunc", tVal, true}, + {"bug6c", "{{vfunc .V1 .V0}}", "vfunc", tVal, true}, + {"bug6d", "{{vfunc .V1 .V1}}", "vfunc", tVal, true}, + // Legal parse but illegal execution: non-function should have no arguments. + {"bug7a", "{{3 2}}", "", tVal, false}, + {"bug7b", "{{$x := 1}}{{$x 2}}", "", tVal, false}, + {"bug7c", "{{$x := 1}}{{3 | $x}}", "", tVal, false}, + // Pipelined arg was not being type-checked. + {"bug8a", "{{3|oneArg}}", "", tVal, false}, + {"bug8b", "{{4|dddArg 3}}", "", tVal, false}, + // A bug was introduced that broke map lookups for lower-case names. + {"bug9", "{{.cause}}", "neglect", map[string]string{"cause": "neglect"}, true}, + // Field chain starting with function did not work. + {"bug10", "{{mapOfThree.three}}-{{(mapOfThree).three}}", "3-3", 0, true}, + // Dereferencing nil pointer while evaluating function arguments should not panic. Issue 7333. + {"bug11", "{{valueString .PS}}", "", T{}, false}, + // 0xef gave constant type float64. Issue 8622. + {"bug12xe", "{{printf `%T` 0xef}}", "int", T{}, true}, + {"bug12xE", "{{printf `%T` 0xEE}}", "int", T{}, true}, + {"bug12Xe", "{{printf `%T` 0Xef}}", "int", T{}, true}, + {"bug12XE", "{{printf `%T` 0XEE}}", "int", T{}, true}, + // Chained nodes did not work as arguments. Issue 8473. + {"bug13", "{{print (.Copy).I}}", "17", tVal, true}, +} + +func zeroArgs() string { + return "zeroArgs" +} + +func oneArg(a string) string { + return "oneArg=" + a +} + +func dddArg(a int, b ...string) string { + return fmt.Sprintln(a, b) +} + +// count returns a channel that will deliver n sequential 1-letter strings starting at "a" +func count(n int) chan string { + if n == 0 { + return nil + } + c := make(chan string) + go func() { + for i := 0; i < n; i++ { + c <- "abcdefghijklmnop"[i : i+1] + } + close(c) + }() + return c +} + +// vfunc takes a *V and a V +func vfunc(V, *V) string { + return "vfunc" +} + +// valueString takes a string, not a pointer. +func valueString(v string) string { + return "value is ignored" +} + +func add(args ...int) int { + sum := 0 + for _, x := range args { + sum += x + } + return sum +} + +func echo(arg interface{}) interface{} { + return arg +} + +func makemap(arg ...string) map[string]string { + if len(arg)%2 != 0 { + panic("bad makemap") + } + m := make(map[string]string) + for i := 0; i < len(arg); i += 2 { + m[arg[i]] = arg[i+1] + } + return m +} + +func stringer(s fmt.Stringer) string { + return s.String() +} + +func mapOfThree() interface{} { + return map[string]int{"three": 3} +} + +func testExecute(execTests []execTest, template *Template, t *testing.T) { + b := new(bytes.Buffer) + funcs := FuncMap{ + "add": add, + "count": count, + "dddArg": dddArg, + "echo": echo, + "makemap": makemap, + "mapOfThree": mapOfThree, + "oneArg": oneArg, + "stringer": stringer, + "typeOf": typeOf, + "valueString": valueString, + "vfunc": vfunc, + "zeroArgs": zeroArgs, + } + for _, test := range execTests { + var tmpl *Template + var err error + if template == nil { + tmpl, err = New(test.name).Funcs(funcs).Parse(test.input) + } else { + tmpl, err = template.New(test.name).Funcs(funcs).Parse(test.input) + } + if err != nil { + t.Errorf("%s: parse error: %s", test.name, err) + continue + } + b.Reset() + err = tmpl.Execute(b, test.data) + switch { + case !test.ok && err == nil: + t.Errorf("%s: expected error; got none", test.name) + continue + case test.ok && err != nil: + t.Errorf("%s: unexpected execute error: %s", test.name, err) + continue + case !test.ok && err != nil: + // expected error, got one + if *debug { + fmt.Printf("%s: %s\n\t%s\n", test.name, test.input, err) + } + } + result := b.String() + if result != test.output { + t.Errorf("%s: expected\n\t%q\ngot\n\t%q", test.name, test.output, result) + } + } +} + +func TestExecute(t *testing.T) { + testExecute(execTests, nil, t) +} + +var delimPairs = []string{ + "", "", // default + "{{", "}}", // same as default + "<<", ">>", // distinct + "|", "|", // same + "(日)", "(本)", // peculiar +} + +func TestDelims(t *testing.T) { + const hello = "Hello, world" + var value = struct{ Str string }{hello} + for i := 0; i < len(delimPairs); i += 2 { + text := ".Str" + left := delimPairs[i+0] + trueLeft := left + right := delimPairs[i+1] + trueRight := right + if left == "" { // default case + trueLeft = "{{" + } + if right == "" { // default case + trueRight = "}}" + } + text = trueLeft + text + trueRight + // Now add a comment + text += trueLeft + "/*comment*/" + trueRight + // Now add an action containing a string. + text += trueLeft + `"` + trueLeft + `"` + trueRight + // At this point text looks like `{{.Str}}{{/*comment*/}}{{"{{"}}`. + tmpl, err := New("delims").Delims(left, right).Parse(text) + if err != nil { + t.Fatalf("delim %q text %q parse err %s", left, text, err) + } + var b = new(bytes.Buffer) + err = tmpl.Execute(b, value) + if err != nil { + t.Fatalf("delim %q exec err %s", left, err) + } + if b.String() != hello+trueLeft { + t.Errorf("expected %q got %q", hello+trueLeft, b.String()) + } + } +} + +// Check that an error from a method flows back to the top. +func TestExecuteError(t *testing.T) { + b := new(bytes.Buffer) + tmpl := New("error") + _, err := tmpl.Parse("{{.MyError true}}") + if err != nil { + t.Fatalf("parse error: %s", err) + } + err = tmpl.Execute(b, tVal) + if err == nil { + t.Errorf("expected error; got none") + } else if !strings.Contains(err.Error(), myError.Error()) { + if *debug { + fmt.Printf("test execute error: %s\n", err) + } + t.Errorf("expected myError; got %s", err) + } +} + +const execErrorText = `line 1 +line 2 +line 3 +{{template "one" .}} +{{define "one"}}{{template "two" .}}{{end}} +{{define "two"}}{{template "three" .}}{{end}} +{{define "three"}}{{index "hi" $}}{{end}}` + +// Check that an error from a nested template contains all the relevant information. +func TestExecError(t *testing.T) { + tmpl, err := New("top").Parse(execErrorText) + if err != nil { + t.Fatal("parse error:", err) + } + var b bytes.Buffer + err = tmpl.Execute(&b, 5) // 5 is out of range indexing "hi" + if err == nil { + t.Fatal("expected error") + } + const want = `template: top:7:20: executing "three" at : error calling index: index out of range: 5` + got := err.Error() + if got != want { + t.Errorf("expected\n%q\ngot\n%q", want, got) + } +} + +func TestJSEscaping(t *testing.T) { + testCases := []struct { + in, exp string + }{ + {`a`, `a`}, + {`'foo`, `\'foo`}, + {`Go "jump" \`, `Go \"jump\" \\`}, + {`Yukihiro says "今日は世界"`, `Yukihiro says \"今日は世界\"`}, + {"unprintable \uFDFF", `unprintable \uFDFF`}, + {``, `\x3Chtml\x3E`}, + } + for _, tc := range testCases { + s := JSEscapeString(tc.in) + if s != tc.exp { + t.Errorf("JS escaping [%s] got [%s] want [%s]", tc.in, s, tc.exp) + } + } +} + +// A nice example: walk a binary tree. + +type Tree struct { + Val int + Left, Right *Tree +} + +// Use different delimiters to test Set.Delims. +const treeTemplate = ` + (define "tree") + [ + (.Val) + (with .Left) + (template "tree" .) + (end) + (with .Right) + (template "tree" .) + (end) + ] + (end) +` + +func TestTree(t *testing.T) { + var tree = &Tree{ + 1, + &Tree{ + 2, &Tree{ + 3, + &Tree{ + 4, nil, nil, + }, + nil, + }, + &Tree{ + 5, + &Tree{ + 6, nil, nil, + }, + nil, + }, + }, + &Tree{ + 7, + &Tree{ + 8, + &Tree{ + 9, nil, nil, + }, + nil, + }, + &Tree{ + 10, + &Tree{ + 11, nil, nil, + }, + nil, + }, + }, + } + tmpl, err := New("root").Delims("(", ")").Parse(treeTemplate) + if err != nil { + t.Fatal("parse error:", err) + } + var b bytes.Buffer + stripSpace := func(r rune) rune { + if r == '\t' || r == '\n' { + return -1 + } + return r + } + const expect = "[1[2[3[4]][5[6]]][7[8[9]][10[11]]]]" + // First by looking up the template. + err = tmpl.Lookup("tree").Execute(&b, tree) + if err != nil { + t.Fatal("exec error:", err) + } + result := strings.Map(stripSpace, b.String()) + if result != expect { + t.Errorf("expected %q got %q", expect, result) + } + // Then direct to execution. + b.Reset() + err = tmpl.ExecuteTemplate(&b, "tree", tree) + if err != nil { + t.Fatal("exec error:", err) + } + result = strings.Map(stripSpace, b.String()) + if result != expect { + t.Errorf("expected %q got %q", expect, result) + } +} + +func TestExecuteOnNewTemplate(t *testing.T) { + // This is issue 3872. + _ = New("Name").Templates() +} + +const testTemplates = `{{define "one"}}one{{end}}{{define "two"}}two{{end}}` + +func TestMessageForExecuteEmpty(t *testing.T) { + // Test a truly empty template. + tmpl := New("empty") + var b bytes.Buffer + err := tmpl.Execute(&b, 0) + if err == nil { + t.Fatal("expected initial error") + } + got := err.Error() + want := `template: empty: "empty" is an incomplete or empty template` + if got != want { + t.Errorf("expected error %s got %s", want, got) + } + // Add a non-empty template to check that the error is helpful. + tests, err := New("").Parse(testTemplates) + if err != nil { + t.Fatal(err) + } + tmpl.AddParseTree("secondary", tests.Tree) + err = tmpl.Execute(&b, 0) + if err == nil { + t.Fatal("expected second error") + } + got = err.Error() + want = `template: empty: "empty" is an incomplete or empty template; defined templates are: "secondary"` + if got != want { + t.Errorf("expected error %s got %s", want, got) + } + // Make sure we can execute the secondary. + err = tmpl.ExecuteTemplate(&b, "secondary", 0) + if err != nil { + t.Fatal(err) + } +} + +func TestFinalForPrintf(t *testing.T) { + tmpl, err := New("").Parse(`{{"x" | printf}}`) + if err != nil { + t.Fatal(err) + } + var b bytes.Buffer + err = tmpl.Execute(&b, 0) + if err != nil { + t.Fatal(err) + } +} + +type cmpTest struct { + expr string + truth string + ok bool +} + +var cmpTests = []cmpTest{ + {"eq true true", "true", true}, + {"eq true false", "false", true}, + {"eq 1+2i 1+2i", "true", true}, + {"eq 1+2i 1+3i", "false", true}, + {"eq 1.5 1.5", "true", true}, + {"eq 1.5 2.5", "false", true}, + {"eq 1 1", "true", true}, + {"eq 1 2", "false", true}, + {"eq `xy` `xy`", "true", true}, + {"eq `xy` `xyz`", "false", true}, + {"eq .Uthree .Uthree", "true", true}, + {"eq .Uthree .Ufour", "false", true}, + {"eq 3 4 5 6 3", "true", true}, + {"eq 3 4 5 6 7", "false", true}, + {"ne true true", "false", true}, + {"ne true false", "true", true}, + {"ne 1+2i 1+2i", "false", true}, + {"ne 1+2i 1+3i", "true", true}, + {"ne 1.5 1.5", "false", true}, + {"ne 1.5 2.5", "true", true}, + {"ne 1 1", "false", true}, + {"ne 1 2", "true", true}, + {"ne `xy` `xy`", "false", true}, + {"ne `xy` `xyz`", "true", true}, + {"ne .Uthree .Uthree", "false", true}, + {"ne .Uthree .Ufour", "true", true}, + {"lt 1.5 1.5", "false", true}, + {"lt 1.5 2.5", "true", true}, + {"lt 1 1", "false", true}, + {"lt 1 2", "true", true}, + {"lt `xy` `xy`", "false", true}, + {"lt `xy` `xyz`", "true", true}, + {"lt .Uthree .Uthree", "false", true}, + {"lt .Uthree .Ufour", "true", true}, + {"le 1.5 1.5", "true", true}, + {"le 1.5 2.5", "true", true}, + {"le 2.5 1.5", "false", true}, + {"le 1 1", "true", true}, + {"le 1 2", "true", true}, + {"le 2 1", "false", true}, + {"le `xy` `xy`", "true", true}, + {"le `xy` `xyz`", "true", true}, + {"le `xyz` `xy`", "false", true}, + {"le .Uthree .Uthree", "true", true}, + {"le .Uthree .Ufour", "true", true}, + {"le .Ufour .Uthree", "false", true}, + {"gt 1.5 1.5", "false", true}, + {"gt 1.5 2.5", "false", true}, + {"gt 1 1", "false", true}, + {"gt 2 1", "true", true}, + {"gt 1 2", "false", true}, + {"gt `xy` `xy`", "false", true}, + {"gt `xy` `xyz`", "false", true}, + {"gt .Uthree .Uthree", "false", true}, + {"gt .Uthree .Ufour", "false", true}, + {"gt .Ufour .Uthree", "true", true}, + {"ge 1.5 1.5", "true", true}, + {"ge 1.5 2.5", "false", true}, + {"ge 2.5 1.5", "true", true}, + {"ge 1 1", "true", true}, + {"ge 1 2", "false", true}, + {"ge 2 1", "true", true}, + {"ge `xy` `xy`", "true", true}, + {"ge `xy` `xyz`", "false", true}, + {"ge `xyz` `xy`", "true", true}, + {"ge .Uthree .Uthree", "true", true}, + {"ge .Uthree .Ufour", "false", true}, + {"ge .Ufour .Uthree", "true", true}, + // Mixing signed and unsigned integers. + {"eq .Uthree .Three", "true", true}, + {"eq .Three .Uthree", "true", true}, + {"le .Uthree .Three", "true", true}, + {"le .Three .Uthree", "true", true}, + {"ge .Uthree .Three", "true", true}, + {"ge .Three .Uthree", "true", true}, + {"lt .Uthree .Three", "false", true}, + {"lt .Three .Uthree", "false", true}, + {"gt .Uthree .Three", "false", true}, + {"gt .Three .Uthree", "false", true}, + {"eq .Ufour .Three", "false", true}, + {"lt .Ufour .Three", "false", true}, + {"gt .Ufour .Three", "true", true}, + {"eq .NegOne .Uthree", "false", true}, + {"eq .Uthree .NegOne", "false", true}, + {"ne .NegOne .Uthree", "true", true}, + {"ne .Uthree .NegOne", "true", true}, + {"lt .NegOne .Uthree", "true", true}, + {"lt .Uthree .NegOne", "false", true}, + {"le .NegOne .Uthree", "true", true}, + {"le .Uthree .NegOne", "false", true}, + {"gt .NegOne .Uthree", "false", true}, + {"gt .Uthree .NegOne", "true", true}, + {"ge .NegOne .Uthree", "false", true}, + {"ge .Uthree .NegOne", "true", true}, + {"eq (index `x` 0) 'x'", "true", true}, // The example that triggered this rule. + {"eq (index `x` 0) 'y'", "false", true}, + // Errors + {"eq `xy` 1", "", false}, // Different types. + {"eq 2 2.0", "", false}, // Different types. + {"lt true true", "", false}, // Unordered types. + {"lt 1+0i 1+0i", "", false}, // Unordered types. +} + +func TestComparison(t *testing.T) { + b := new(bytes.Buffer) + var cmpStruct = struct { + Uthree, Ufour uint + NegOne, Three int + }{3, 4, -1, 3} + for _, test := range cmpTests { + text := fmt.Sprintf("{{if %s}}true{{else}}false{{end}}", test.expr) + tmpl, err := New("empty").Parse(text) + if err != nil { + t.Fatalf("%q: %s", test.expr, err) + } + b.Reset() + err = tmpl.Execute(b, &cmpStruct) + if test.ok && err != nil { + t.Errorf("%s errored incorrectly: %s", test.expr, err) + continue + } + if !test.ok && err == nil { + t.Errorf("%s did not error", test.expr) + continue + } + if b.String() != test.truth { + t.Errorf("%s: want %s; got %s", test.expr, test.truth, b.String()) + } + } +} diff --git a/vendor/github.com/alecthomas/template/funcs.go b/vendor/github.com/alecthomas/template/funcs.go new file mode 100644 index 0000000..39ee5ed --- /dev/null +++ b/vendor/github.com/alecthomas/template/funcs.go @@ -0,0 +1,598 @@ +// Copyright 2011 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. + +package template + +import ( + "bytes" + "errors" + "fmt" + "io" + "net/url" + "reflect" + "strings" + "unicode" + "unicode/utf8" +) + +// FuncMap is the type of the map defining the mapping from names to functions. +// Each function must have either a single return value, or two return values of +// which the second has type error. In that case, if the second (error) +// return value evaluates to non-nil during execution, execution terminates and +// Execute returns that error. +type FuncMap map[string]interface{} + +var builtins = FuncMap{ + "and": and, + "call": call, + "html": HTMLEscaper, + "index": index, + "js": JSEscaper, + "len": length, + "not": not, + "or": or, + "print": fmt.Sprint, + "printf": fmt.Sprintf, + "println": fmt.Sprintln, + "urlquery": URLQueryEscaper, + + // Comparisons + "eq": eq, // == + "ge": ge, // >= + "gt": gt, // > + "le": le, // <= + "lt": lt, // < + "ne": ne, // != +} + +var builtinFuncs = createValueFuncs(builtins) + +// createValueFuncs turns a FuncMap into a map[string]reflect.Value +func createValueFuncs(funcMap FuncMap) map[string]reflect.Value { + m := make(map[string]reflect.Value) + addValueFuncs(m, funcMap) + return m +} + +// addValueFuncs adds to values the functions in funcs, converting them to reflect.Values. +func addValueFuncs(out map[string]reflect.Value, in FuncMap) { + for name, fn := range in { + v := reflect.ValueOf(fn) + if v.Kind() != reflect.Func { + panic("value for " + name + " not a function") + } + if !goodFunc(v.Type()) { + panic(fmt.Errorf("can't install method/function %q with %d results", name, v.Type().NumOut())) + } + out[name] = v + } +} + +// addFuncs adds to values the functions in funcs. It does no checking of the input - +// call addValueFuncs first. +func addFuncs(out, in FuncMap) { + for name, fn := range in { + out[name] = fn + } +} + +// goodFunc checks that the function or method has the right result signature. +func goodFunc(typ reflect.Type) bool { + // We allow functions with 1 result or 2 results where the second is an error. + switch { + case typ.NumOut() == 1: + return true + case typ.NumOut() == 2 && typ.Out(1) == errorType: + return true + } + return false +} + +// findFunction looks for a function in the template, and global map. +func findFunction(name string, tmpl *Template) (reflect.Value, bool) { + if tmpl != nil && tmpl.common != nil { + if fn := tmpl.execFuncs[name]; fn.IsValid() { + return fn, true + } + } + if fn := builtinFuncs[name]; fn.IsValid() { + return fn, true + } + return reflect.Value{}, false +} + +// Indexing. + +// index returns the result of indexing its first argument by the following +// arguments. Thus "index x 1 2 3" is, in Go syntax, x[1][2][3]. Each +// indexed item must be a map, slice, or array. +func index(item interface{}, indices ...interface{}) (interface{}, error) { + v := reflect.ValueOf(item) + for _, i := range indices { + index := reflect.ValueOf(i) + var isNil bool + if v, isNil = indirect(v); isNil { + return nil, fmt.Errorf("index of nil pointer") + } + switch v.Kind() { + case reflect.Array, reflect.Slice, reflect.String: + var x int64 + switch index.Kind() { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + x = index.Int() + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + x = int64(index.Uint()) + default: + return nil, fmt.Errorf("cannot index slice/array with type %s", index.Type()) + } + if x < 0 || x >= int64(v.Len()) { + return nil, fmt.Errorf("index out of range: %d", x) + } + v = v.Index(int(x)) + case reflect.Map: + if !index.IsValid() { + index = reflect.Zero(v.Type().Key()) + } + if !index.Type().AssignableTo(v.Type().Key()) { + return nil, fmt.Errorf("%s is not index type for %s", index.Type(), v.Type()) + } + if x := v.MapIndex(index); x.IsValid() { + v = x + } else { + v = reflect.Zero(v.Type().Elem()) + } + default: + return nil, fmt.Errorf("can't index item of type %s", v.Type()) + } + } + return v.Interface(), nil +} + +// Length + +// length returns the length of the item, with an error if it has no defined length. +func length(item interface{}) (int, error) { + v, isNil := indirect(reflect.ValueOf(item)) + if isNil { + return 0, fmt.Errorf("len of nil pointer") + } + switch v.Kind() { + case reflect.Array, reflect.Chan, reflect.Map, reflect.Slice, reflect.String: + return v.Len(), nil + } + return 0, fmt.Errorf("len of type %s", v.Type()) +} + +// Function invocation + +// call returns the result of evaluating the first argument as a function. +// The function must return 1 result, or 2 results, the second of which is an error. +func call(fn interface{}, args ...interface{}) (interface{}, error) { + v := reflect.ValueOf(fn) + typ := v.Type() + if typ.Kind() != reflect.Func { + return nil, fmt.Errorf("non-function of type %s", typ) + } + if !goodFunc(typ) { + return nil, fmt.Errorf("function called with %d args; should be 1 or 2", typ.NumOut()) + } + numIn := typ.NumIn() + var dddType reflect.Type + if typ.IsVariadic() { + if len(args) < numIn-1 { + return nil, fmt.Errorf("wrong number of args: got %d want at least %d", len(args), numIn-1) + } + dddType = typ.In(numIn - 1).Elem() + } else { + if len(args) != numIn { + return nil, fmt.Errorf("wrong number of args: got %d want %d", len(args), numIn) + } + } + argv := make([]reflect.Value, len(args)) + for i, arg := range args { + value := reflect.ValueOf(arg) + // Compute the expected type. Clumsy because of variadics. + var argType reflect.Type + if !typ.IsVariadic() || i < numIn-1 { + argType = typ.In(i) + } else { + argType = dddType + } + if !value.IsValid() && canBeNil(argType) { + value = reflect.Zero(argType) + } + if !value.Type().AssignableTo(argType) { + return nil, fmt.Errorf("arg %d has type %s; should be %s", i, value.Type(), argType) + } + argv[i] = value + } + result := v.Call(argv) + if len(result) == 2 && !result[1].IsNil() { + return result[0].Interface(), result[1].Interface().(error) + } + return result[0].Interface(), nil +} + +// Boolean logic. + +func truth(a interface{}) bool { + t, _ := isTrue(reflect.ValueOf(a)) + return t +} + +// and computes the Boolean AND of its arguments, returning +// the first false argument it encounters, or the last argument. +func and(arg0 interface{}, args ...interface{}) interface{} { + if !truth(arg0) { + return arg0 + } + for i := range args { + arg0 = args[i] + if !truth(arg0) { + break + } + } + return arg0 +} + +// or computes the Boolean OR of its arguments, returning +// the first true argument it encounters, or the last argument. +func or(arg0 interface{}, args ...interface{}) interface{} { + if truth(arg0) { + return arg0 + } + for i := range args { + arg0 = args[i] + if truth(arg0) { + break + } + } + return arg0 +} + +// not returns the Boolean negation of its argument. +func not(arg interface{}) (truth bool) { + truth, _ = isTrue(reflect.ValueOf(arg)) + return !truth +} + +// Comparison. + +// TODO: Perhaps allow comparison between signed and unsigned integers. + +var ( + errBadComparisonType = errors.New("invalid type for comparison") + errBadComparison = errors.New("incompatible types for comparison") + errNoComparison = errors.New("missing argument for comparison") +) + +type kind int + +const ( + invalidKind kind = iota + boolKind + complexKind + intKind + floatKind + integerKind + stringKind + uintKind +) + +func basicKind(v reflect.Value) (kind, error) { + switch v.Kind() { + case reflect.Bool: + return boolKind, nil + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return intKind, nil + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return uintKind, nil + case reflect.Float32, reflect.Float64: + return floatKind, nil + case reflect.Complex64, reflect.Complex128: + return complexKind, nil + case reflect.String: + return stringKind, nil + } + return invalidKind, errBadComparisonType +} + +// eq evaluates the comparison a == b || a == c || ... +func eq(arg1 interface{}, arg2 ...interface{}) (bool, error) { + v1 := reflect.ValueOf(arg1) + k1, err := basicKind(v1) + if err != nil { + return false, err + } + if len(arg2) == 0 { + return false, errNoComparison + } + for _, arg := range arg2 { + v2 := reflect.ValueOf(arg) + k2, err := basicKind(v2) + if err != nil { + return false, err + } + truth := false + if k1 != k2 { + // Special case: Can compare integer values regardless of type's sign. + switch { + case k1 == intKind && k2 == uintKind: + truth = v1.Int() >= 0 && uint64(v1.Int()) == v2.Uint() + case k1 == uintKind && k2 == intKind: + truth = v2.Int() >= 0 && v1.Uint() == uint64(v2.Int()) + default: + return false, errBadComparison + } + } else { + switch k1 { + case boolKind: + truth = v1.Bool() == v2.Bool() + case complexKind: + truth = v1.Complex() == v2.Complex() + case floatKind: + truth = v1.Float() == v2.Float() + case intKind: + truth = v1.Int() == v2.Int() + case stringKind: + truth = v1.String() == v2.String() + case uintKind: + truth = v1.Uint() == v2.Uint() + default: + panic("invalid kind") + } + } + if truth { + return true, nil + } + } + return false, nil +} + +// ne evaluates the comparison a != b. +func ne(arg1, arg2 interface{}) (bool, error) { + // != is the inverse of ==. + equal, err := eq(arg1, arg2) + return !equal, err +} + +// lt evaluates the comparison a < b. +func lt(arg1, arg2 interface{}) (bool, error) { + v1 := reflect.ValueOf(arg1) + k1, err := basicKind(v1) + if err != nil { + return false, err + } + v2 := reflect.ValueOf(arg2) + k2, err := basicKind(v2) + if err != nil { + return false, err + } + truth := false + if k1 != k2 { + // Special case: Can compare integer values regardless of type's sign. + switch { + case k1 == intKind && k2 == uintKind: + truth = v1.Int() < 0 || uint64(v1.Int()) < v2.Uint() + case k1 == uintKind && k2 == intKind: + truth = v2.Int() >= 0 && v1.Uint() < uint64(v2.Int()) + default: + return false, errBadComparison + } + } else { + switch k1 { + case boolKind, complexKind: + return false, errBadComparisonType + case floatKind: + truth = v1.Float() < v2.Float() + case intKind: + truth = v1.Int() < v2.Int() + case stringKind: + truth = v1.String() < v2.String() + case uintKind: + truth = v1.Uint() < v2.Uint() + default: + panic("invalid kind") + } + } + return truth, nil +} + +// le evaluates the comparison <= b. +func le(arg1, arg2 interface{}) (bool, error) { + // <= is < or ==. + lessThan, err := lt(arg1, arg2) + if lessThan || err != nil { + return lessThan, err + } + return eq(arg1, arg2) +} + +// gt evaluates the comparison a > b. +func gt(arg1, arg2 interface{}) (bool, error) { + // > is the inverse of <=. + lessOrEqual, err := le(arg1, arg2) + if err != nil { + return false, err + } + return !lessOrEqual, nil +} + +// ge evaluates the comparison a >= b. +func ge(arg1, arg2 interface{}) (bool, error) { + // >= is the inverse of <. + lessThan, err := lt(arg1, arg2) + if err != nil { + return false, err + } + return !lessThan, nil +} + +// HTML escaping. + +var ( + htmlQuot = []byte(""") // shorter than """ + htmlApos = []byte("'") // shorter than "'" and apos was not in HTML until HTML5 + htmlAmp = []byte("&") + htmlLt = []byte("<") + htmlGt = []byte(">") +) + +// HTMLEscape writes to w the escaped HTML equivalent of the plain text data b. +func HTMLEscape(w io.Writer, b []byte) { + last := 0 + for i, c := range b { + var html []byte + switch c { + case '"': + html = htmlQuot + case '\'': + html = htmlApos + case '&': + html = htmlAmp + case '<': + html = htmlLt + case '>': + html = htmlGt + default: + continue + } + w.Write(b[last:i]) + w.Write(html) + last = i + 1 + } + w.Write(b[last:]) +} + +// HTMLEscapeString returns the escaped HTML equivalent of the plain text data s. +func HTMLEscapeString(s string) string { + // Avoid allocation if we can. + if strings.IndexAny(s, `'"&<>`) < 0 { + return s + } + var b bytes.Buffer + HTMLEscape(&b, []byte(s)) + return b.String() +} + +// HTMLEscaper returns the escaped HTML equivalent of the textual +// representation of its arguments. +func HTMLEscaper(args ...interface{}) string { + return HTMLEscapeString(evalArgs(args)) +} + +// JavaScript escaping. + +var ( + jsLowUni = []byte(`\u00`) + hex = []byte("0123456789ABCDEF") + + jsBackslash = []byte(`\\`) + jsApos = []byte(`\'`) + jsQuot = []byte(`\"`) + jsLt = []byte(`\x3C`) + jsGt = []byte(`\x3E`) +) + +// JSEscape writes to w the escaped JavaScript equivalent of the plain text data b. +func JSEscape(w io.Writer, b []byte) { + last := 0 + for i := 0; i < len(b); i++ { + c := b[i] + + if !jsIsSpecial(rune(c)) { + // fast path: nothing to do + continue + } + w.Write(b[last:i]) + + if c < utf8.RuneSelf { + // Quotes, slashes and angle brackets get quoted. + // Control characters get written as \u00XX. + switch c { + case '\\': + w.Write(jsBackslash) + case '\'': + w.Write(jsApos) + case '"': + w.Write(jsQuot) + case '<': + w.Write(jsLt) + case '>': + w.Write(jsGt) + default: + w.Write(jsLowUni) + t, b := c>>4, c&0x0f + w.Write(hex[t : t+1]) + w.Write(hex[b : b+1]) + } + } else { + // Unicode rune. + r, size := utf8.DecodeRune(b[i:]) + if unicode.IsPrint(r) { + w.Write(b[i : i+size]) + } else { + fmt.Fprintf(w, "\\u%04X", r) + } + i += size - 1 + } + last = i + 1 + } + w.Write(b[last:]) +} + +// JSEscapeString returns the escaped JavaScript equivalent of the plain text data s. +func JSEscapeString(s string) string { + // Avoid allocation if we can. + if strings.IndexFunc(s, jsIsSpecial) < 0 { + return s + } + var b bytes.Buffer + JSEscape(&b, []byte(s)) + return b.String() +} + +func jsIsSpecial(r rune) bool { + switch r { + case '\\', '\'', '"', '<', '>': + return true + } + return r < ' ' || utf8.RuneSelf <= r +} + +// JSEscaper returns the escaped JavaScript equivalent of the textual +// representation of its arguments. +func JSEscaper(args ...interface{}) string { + return JSEscapeString(evalArgs(args)) +} + +// URLQueryEscaper returns the escaped value of the textual representation of +// its arguments in a form suitable for embedding in a URL query. +func URLQueryEscaper(args ...interface{}) string { + return url.QueryEscape(evalArgs(args)) +} + +// evalArgs formats the list of arguments into a string. It is therefore equivalent to +// fmt.Sprint(args...) +// except that each argument is indirected (if a pointer), as required, +// using the same rules as the default string evaluation during template +// execution. +func evalArgs(args []interface{}) string { + ok := false + var s string + // Fast path for simple common case. + if len(args) == 1 { + s, ok = args[0].(string) + } + if !ok { + for i, arg := range args { + a, ok := printableValue(reflect.ValueOf(arg)) + if ok { + args[i] = a + } // else left fmt do its thing + } + s = fmt.Sprint(args...) + } + return s +} diff --git a/vendor/github.com/alecthomas/template/helper.go b/vendor/github.com/alecthomas/template/helper.go new file mode 100644 index 0000000..3636fb5 --- /dev/null +++ b/vendor/github.com/alecthomas/template/helper.go @@ -0,0 +1,108 @@ +// Copyright 2011 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. + +// Helper functions to make constructing templates easier. + +package template + +import ( + "fmt" + "io/ioutil" + "path/filepath" +) + +// Functions and methods to parse templates. + +// Must is a helper that wraps a call to a function returning (*Template, error) +// and panics if the error is non-nil. It is intended for use in variable +// initializations such as +// var t = template.Must(template.New("name").Parse("text")) +func Must(t *Template, err error) *Template { + if err != nil { + panic(err) + } + return t +} + +// ParseFiles creates a new Template and parses the template definitions from +// the named files. The returned template's name will have the (base) name and +// (parsed) contents of the first file. There must be at least one file. +// If an error occurs, parsing stops and the returned *Template is nil. +func ParseFiles(filenames ...string) (*Template, error) { + return parseFiles(nil, filenames...) +} + +// ParseFiles parses the named files and associates the resulting templates with +// t. If an error occurs, parsing stops and the returned template is nil; +// otherwise it is t. There must be at least one file. +func (t *Template) ParseFiles(filenames ...string) (*Template, error) { + return parseFiles(t, filenames...) +} + +// parseFiles is the helper for the method and function. If the argument +// template is nil, it is created from the first file. +func parseFiles(t *Template, filenames ...string) (*Template, error) { + if len(filenames) == 0 { + // Not really a problem, but be consistent. + return nil, fmt.Errorf("template: no files named in call to ParseFiles") + } + for _, filename := range filenames { + b, err := ioutil.ReadFile(filename) + if err != nil { + return nil, err + } + s := string(b) + name := filepath.Base(filename) + // First template becomes return value if not already defined, + // and we use that one for subsequent New calls to associate + // all the templates together. Also, if this file has the same name + // as t, this file becomes the contents of t, so + // t, err := New(name).Funcs(xxx).ParseFiles(name) + // works. Otherwise we create a new template associated with t. + var tmpl *Template + if t == nil { + t = New(name) + } + if name == t.Name() { + tmpl = t + } else { + tmpl = t.New(name) + } + _, err = tmpl.Parse(s) + if err != nil { + return nil, err + } + } + return t, nil +} + +// ParseGlob creates a new Template and parses the template definitions from the +// files identified by the pattern, which must match at least one file. The +// returned template will have the (base) name and (parsed) contents of the +// first file matched by the pattern. ParseGlob is equivalent to calling +// ParseFiles with the list of files matched by the pattern. +func ParseGlob(pattern string) (*Template, error) { + return parseGlob(nil, pattern) +} + +// ParseGlob parses the template definitions in the files identified by the +// pattern and associates the resulting templates with t. The pattern is +// processed by filepath.Glob and must match at least one file. ParseGlob is +// equivalent to calling t.ParseFiles with the list of files matched by the +// pattern. +func (t *Template) ParseGlob(pattern string) (*Template, error) { + return parseGlob(t, pattern) +} + +// parseGlob is the implementation of the function and method ParseGlob. +func parseGlob(t *Template, pattern string) (*Template, error) { + filenames, err := filepath.Glob(pattern) + if err != nil { + return nil, err + } + if len(filenames) == 0 { + return nil, fmt.Errorf("template: pattern matches no files: %#q", pattern) + } + return parseFiles(t, filenames...) +} diff --git a/vendor/github.com/alecthomas/template/multi_test.go b/vendor/github.com/alecthomas/template/multi_test.go new file mode 100644 index 0000000..8d10362 --- /dev/null +++ b/vendor/github.com/alecthomas/template/multi_test.go @@ -0,0 +1,293 @@ +// Copyright 2011 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. + +package template + +// Tests for mulitple-template parsing and execution. + +import ( + "bytes" + "fmt" + "strings" + "testing" + + "github.com/alecthomas/template/parse" +) + +const ( + noError = true + hasError = false +) + +type multiParseTest struct { + name string + input string + ok bool + names []string + results []string +} + +var multiParseTests = []multiParseTest{ + {"empty", "", noError, + nil, + nil}, + {"one", `{{define "foo"}} FOO {{end}}`, noError, + []string{"foo"}, + []string{" FOO "}}, + {"two", `{{define "foo"}} FOO {{end}}{{define "bar"}} BAR {{end}}`, noError, + []string{"foo", "bar"}, + []string{" FOO ", " BAR "}}, + // errors + {"missing end", `{{define "foo"}} FOO `, hasError, + nil, + nil}, + {"malformed name", `{{define "foo}} FOO `, hasError, + nil, + nil}, +} + +func TestMultiParse(t *testing.T) { + for _, test := range multiParseTests { + template, err := New("root").Parse(test.input) + switch { + case err == nil && !test.ok: + t.Errorf("%q: expected error; got none", test.name) + continue + case err != nil && test.ok: + t.Errorf("%q: unexpected error: %v", test.name, err) + continue + case err != nil && !test.ok: + // expected error, got one + if *debug { + fmt.Printf("%s: %s\n\t%s\n", test.name, test.input, err) + } + continue + } + if template == nil { + continue + } + if len(template.tmpl) != len(test.names)+1 { // +1 for root + t.Errorf("%s: wrong number of templates; wanted %d got %d", test.name, len(test.names), len(template.tmpl)) + continue + } + for i, name := range test.names { + tmpl, ok := template.tmpl[name] + if !ok { + t.Errorf("%s: can't find template %q", test.name, name) + continue + } + result := tmpl.Root.String() + if result != test.results[i] { + t.Errorf("%s=(%q): got\n\t%v\nexpected\n\t%v", test.name, test.input, result, test.results[i]) + } + } + } +} + +var multiExecTests = []execTest{ + {"empty", "", "", nil, true}, + {"text", "some text", "some text", nil, true}, + {"invoke x", `{{template "x" .SI}}`, "TEXT", tVal, true}, + {"invoke x no args", `{{template "x"}}`, "TEXT", tVal, true}, + {"invoke dot int", `{{template "dot" .I}}`, "17", tVal, true}, + {"invoke dot []int", `{{template "dot" .SI}}`, "[3 4 5]", tVal, true}, + {"invoke dotV", `{{template "dotV" .U}}`, "v", tVal, true}, + {"invoke nested int", `{{template "nested" .I}}`, "17", tVal, true}, + {"variable declared by template", `{{template "nested" $x:=.SI}},{{index $x 1}}`, "[3 4 5],4", tVal, true}, + + // User-defined function: test argument evaluator. + {"testFunc literal", `{{oneArg "joe"}}`, "oneArg=joe", tVal, true}, + {"testFunc .", `{{oneArg .}}`, "oneArg=joe", "joe", true}, +} + +// These strings are also in testdata/*. +const multiText1 = ` + {{define "x"}}TEXT{{end}} + {{define "dotV"}}{{.V}}{{end}} +` + +const multiText2 = ` + {{define "dot"}}{{.}}{{end}} + {{define "nested"}}{{template "dot" .}}{{end}} +` + +func TestMultiExecute(t *testing.T) { + // Declare a couple of templates first. + template, err := New("root").Parse(multiText1) + if err != nil { + t.Fatalf("parse error for 1: %s", err) + } + _, err = template.Parse(multiText2) + if err != nil { + t.Fatalf("parse error for 2: %s", err) + } + testExecute(multiExecTests, template, t) +} + +func TestParseFiles(t *testing.T) { + _, err := ParseFiles("DOES NOT EXIST") + if err == nil { + t.Error("expected error for non-existent file; got none") + } + template := New("root") + _, err = template.ParseFiles("testdata/file1.tmpl", "testdata/file2.tmpl") + if err != nil { + t.Fatalf("error parsing files: %v", err) + } + testExecute(multiExecTests, template, t) +} + +func TestParseGlob(t *testing.T) { + _, err := ParseGlob("DOES NOT EXIST") + if err == nil { + t.Error("expected error for non-existent file; got none") + } + _, err = New("error").ParseGlob("[x") + if err == nil { + t.Error("expected error for bad pattern; got none") + } + template := New("root") + _, err = template.ParseGlob("testdata/file*.tmpl") + if err != nil { + t.Fatalf("error parsing files: %v", err) + } + testExecute(multiExecTests, template, t) +} + +// In these tests, actual content (not just template definitions) comes from the parsed files. + +var templateFileExecTests = []execTest{ + {"test", `{{template "tmpl1.tmpl"}}{{template "tmpl2.tmpl"}}`, "template1\n\ny\ntemplate2\n\nx\n", 0, true}, +} + +func TestParseFilesWithData(t *testing.T) { + template, err := New("root").ParseFiles("testdata/tmpl1.tmpl", "testdata/tmpl2.tmpl") + if err != nil { + t.Fatalf("error parsing files: %v", err) + } + testExecute(templateFileExecTests, template, t) +} + +func TestParseGlobWithData(t *testing.T) { + template, err := New("root").ParseGlob("testdata/tmpl*.tmpl") + if err != nil { + t.Fatalf("error parsing files: %v", err) + } + testExecute(templateFileExecTests, template, t) +} + +const ( + cloneText1 = `{{define "a"}}{{template "b"}}{{template "c"}}{{end}}` + cloneText2 = `{{define "b"}}b{{end}}` + cloneText3 = `{{define "c"}}root{{end}}` + cloneText4 = `{{define "c"}}clone{{end}}` +) + +func TestClone(t *testing.T) { + // Create some templates and clone the root. + root, err := New("root").Parse(cloneText1) + if err != nil { + t.Fatal(err) + } + _, err = root.Parse(cloneText2) + if err != nil { + t.Fatal(err) + } + clone := Must(root.Clone()) + // Add variants to both. + _, err = root.Parse(cloneText3) + if err != nil { + t.Fatal(err) + } + _, err = clone.Parse(cloneText4) + if err != nil { + t.Fatal(err) + } + // Verify that the clone is self-consistent. + for k, v := range clone.tmpl { + if k == clone.name && v.tmpl[k] != clone { + t.Error("clone does not contain root") + } + if v != v.tmpl[v.name] { + t.Errorf("clone does not contain self for %q", k) + } + } + // Execute root. + var b bytes.Buffer + err = root.ExecuteTemplate(&b, "a", 0) + if err != nil { + t.Fatal(err) + } + if b.String() != "broot" { + t.Errorf("expected %q got %q", "broot", b.String()) + } + // Execute copy. + b.Reset() + err = clone.ExecuteTemplate(&b, "a", 0) + if err != nil { + t.Fatal(err) + } + if b.String() != "bclone" { + t.Errorf("expected %q got %q", "bclone", b.String()) + } +} + +func TestAddParseTree(t *testing.T) { + // Create some templates. + root, err := New("root").Parse(cloneText1) + if err != nil { + t.Fatal(err) + } + _, err = root.Parse(cloneText2) + if err != nil { + t.Fatal(err) + } + // Add a new parse tree. + tree, err := parse.Parse("cloneText3", cloneText3, "", "", nil, builtins) + if err != nil { + t.Fatal(err) + } + added, err := root.AddParseTree("c", tree["c"]) + // Execute. + var b bytes.Buffer + err = added.ExecuteTemplate(&b, "a", 0) + if err != nil { + t.Fatal(err) + } + if b.String() != "broot" { + t.Errorf("expected %q got %q", "broot", b.String()) + } +} + +// Issue 7032 +func TestAddParseTreeToUnparsedTemplate(t *testing.T) { + master := "{{define \"master\"}}{{end}}" + tmpl := New("master") + tree, err := parse.Parse("master", master, "", "", nil) + if err != nil { + t.Fatalf("unexpected parse err: %v", err) + } + masterTree := tree["master"] + tmpl.AddParseTree("master", masterTree) // used to panic +} + +func TestRedefinition(t *testing.T) { + var tmpl *Template + var err error + if tmpl, err = New("tmpl1").Parse(`{{define "test"}}foo{{end}}`); err != nil { + t.Fatalf("parse 1: %v", err) + } + if _, err = tmpl.Parse(`{{define "test"}}bar{{end}}`); err == nil { + t.Fatal("expected error") + } + if !strings.Contains(err.Error(), "redefinition") { + t.Fatalf("expected redefinition error; got %v", err) + } + if _, err = tmpl.New("tmpl2").Parse(`{{define "test"}}bar{{end}}`); err == nil { + t.Fatal("expected error") + } + if !strings.Contains(err.Error(), "redefinition") { + t.Fatalf("expected redefinition error; got %v", err) + } +} diff --git a/vendor/github.com/alecthomas/template/parse/lex.go b/vendor/github.com/alecthomas/template/parse/lex.go new file mode 100644 index 0000000..55f1c05 --- /dev/null +++ b/vendor/github.com/alecthomas/template/parse/lex.go @@ -0,0 +1,556 @@ +// Copyright 2011 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. + +package parse + +import ( + "fmt" + "strings" + "unicode" + "unicode/utf8" +) + +// item represents a token or text string returned from the scanner. +type item struct { + typ itemType // The type of this item. + pos Pos // The starting position, in bytes, of this item in the input string. + val string // The value of this item. +} + +func (i item) String() string { + switch { + case i.typ == itemEOF: + return "EOF" + case i.typ == itemError: + return i.val + case i.typ > itemKeyword: + return fmt.Sprintf("<%s>", i.val) + case len(i.val) > 10: + return fmt.Sprintf("%.10q...", i.val) + } + return fmt.Sprintf("%q", i.val) +} + +// itemType identifies the type of lex items. +type itemType int + +const ( + itemError itemType = iota // error occurred; value is text of error + itemBool // boolean constant + itemChar // printable ASCII character; grab bag for comma etc. + itemCharConstant // character constant + itemComplex // complex constant (1+2i); imaginary is just a number + itemColonEquals // colon-equals (':=') introducing a declaration + itemEOF + itemField // alphanumeric identifier starting with '.' + itemIdentifier // alphanumeric identifier not starting with '.' + itemLeftDelim // left action delimiter + itemLeftParen // '(' inside action + itemNumber // simple number, including imaginary + itemPipe // pipe symbol + itemRawString // raw quoted string (includes quotes) + itemRightDelim // right action delimiter + itemElideNewline // elide newline after right delim + itemRightParen // ')' inside action + itemSpace // run of spaces separating arguments + itemString // quoted string (includes quotes) + itemText // plain text + itemVariable // variable starting with '$', such as '$' or '$1' or '$hello' + // Keywords appear after all the rest. + itemKeyword // used only to delimit the keywords + itemDot // the cursor, spelled '.' + itemDefine // define keyword + itemElse // else keyword + itemEnd // end keyword + itemIf // if keyword + itemNil // the untyped nil constant, easiest to treat as a keyword + itemRange // range keyword + itemTemplate // template keyword + itemWith // with keyword +) + +var key = map[string]itemType{ + ".": itemDot, + "define": itemDefine, + "else": itemElse, + "end": itemEnd, + "if": itemIf, + "range": itemRange, + "nil": itemNil, + "template": itemTemplate, + "with": itemWith, +} + +const eof = -1 + +// stateFn represents the state of the scanner as a function that returns the next state. +type stateFn func(*lexer) stateFn + +// lexer holds the state of the scanner. +type lexer struct { + name string // the name of the input; used only for error reports + input string // the string being scanned + leftDelim string // start of action + rightDelim string // end of action + state stateFn // the next lexing function to enter + pos Pos // current position in the input + start Pos // start position of this item + width Pos // width of last rune read from input + lastPos Pos // position of most recent item returned by nextItem + items chan item // channel of scanned items + parenDepth int // nesting depth of ( ) exprs +} + +// next returns the next rune in the input. +func (l *lexer) next() rune { + if int(l.pos) >= len(l.input) { + l.width = 0 + return eof + } + r, w := utf8.DecodeRuneInString(l.input[l.pos:]) + l.width = Pos(w) + l.pos += l.width + return r +} + +// peek returns but does not consume the next rune in the input. +func (l *lexer) peek() rune { + r := l.next() + l.backup() + return r +} + +// backup steps back one rune. Can only be called once per call of next. +func (l *lexer) backup() { + l.pos -= l.width +} + +// emit passes an item back to the client. +func (l *lexer) emit(t itemType) { + l.items <- item{t, l.start, l.input[l.start:l.pos]} + l.start = l.pos +} + +// ignore skips over the pending input before this point. +func (l *lexer) ignore() { + l.start = l.pos +} + +// accept consumes the next rune if it's from the valid set. +func (l *lexer) accept(valid string) bool { + if strings.IndexRune(valid, l.next()) >= 0 { + return true + } + l.backup() + return false +} + +// acceptRun consumes a run of runes from the valid set. +func (l *lexer) acceptRun(valid string) { + for strings.IndexRune(valid, l.next()) >= 0 { + } + l.backup() +} + +// lineNumber reports which line we're on, based on the position of +// the previous item returned by nextItem. Doing it this way +// means we don't have to worry about peek double counting. +func (l *lexer) lineNumber() int { + return 1 + strings.Count(l.input[:l.lastPos], "\n") +} + +// errorf returns an error token and terminates the scan by passing +// back a nil pointer that will be the next state, terminating l.nextItem. +func (l *lexer) errorf(format string, args ...interface{}) stateFn { + l.items <- item{itemError, l.start, fmt.Sprintf(format, args...)} + return nil +} + +// nextItem returns the next item from the input. +func (l *lexer) nextItem() item { + item := <-l.items + l.lastPos = item.pos + return item +} + +// lex creates a new scanner for the input string. +func lex(name, input, left, right string) *lexer { + if left == "" { + left = leftDelim + } + if right == "" { + right = rightDelim + } + l := &lexer{ + name: name, + input: input, + leftDelim: left, + rightDelim: right, + items: make(chan item), + } + go l.run() + return l +} + +// run runs the state machine for the lexer. +func (l *lexer) run() { + for l.state = lexText; l.state != nil; { + l.state = l.state(l) + } +} + +// state functions + +const ( + leftDelim = "{{" + rightDelim = "}}" + leftComment = "/*" + rightComment = "*/" +) + +// lexText scans until an opening action delimiter, "{{". +func lexText(l *lexer) stateFn { + for { + if strings.HasPrefix(l.input[l.pos:], l.leftDelim) { + if l.pos > l.start { + l.emit(itemText) + } + return lexLeftDelim + } + if l.next() == eof { + break + } + } + // Correctly reached EOF. + if l.pos > l.start { + l.emit(itemText) + } + l.emit(itemEOF) + return nil +} + +// lexLeftDelim scans the left delimiter, which is known to be present. +func lexLeftDelim(l *lexer) stateFn { + l.pos += Pos(len(l.leftDelim)) + if strings.HasPrefix(l.input[l.pos:], leftComment) { + return lexComment + } + l.emit(itemLeftDelim) + l.parenDepth = 0 + return lexInsideAction +} + +// lexComment scans a comment. The left comment marker is known to be present. +func lexComment(l *lexer) stateFn { + l.pos += Pos(len(leftComment)) + i := strings.Index(l.input[l.pos:], rightComment) + if i < 0 { + return l.errorf("unclosed comment") + } + l.pos += Pos(i + len(rightComment)) + if !strings.HasPrefix(l.input[l.pos:], l.rightDelim) { + return l.errorf("comment ends before closing delimiter") + + } + l.pos += Pos(len(l.rightDelim)) + l.ignore() + return lexText +} + +// lexRightDelim scans the right delimiter, which is known to be present. +func lexRightDelim(l *lexer) stateFn { + l.pos += Pos(len(l.rightDelim)) + l.emit(itemRightDelim) + if l.peek() == '\\' { + l.pos++ + l.emit(itemElideNewline) + } + return lexText +} + +// lexInsideAction scans the elements inside action delimiters. +func lexInsideAction(l *lexer) stateFn { + // Either number, quoted string, or identifier. + // Spaces separate arguments; runs of spaces turn into itemSpace. + // Pipe symbols separate and are emitted. + if strings.HasPrefix(l.input[l.pos:], l.rightDelim+"\\") || strings.HasPrefix(l.input[l.pos:], l.rightDelim) { + if l.parenDepth == 0 { + return lexRightDelim + } + return l.errorf("unclosed left paren") + } + switch r := l.next(); { + case r == eof || isEndOfLine(r): + return l.errorf("unclosed action") + case isSpace(r): + return lexSpace + case r == ':': + if l.next() != '=' { + return l.errorf("expected :=") + } + l.emit(itemColonEquals) + case r == '|': + l.emit(itemPipe) + case r == '"': + return lexQuote + case r == '`': + return lexRawQuote + case r == '$': + return lexVariable + case r == '\'': + return lexChar + case r == '.': + // special look-ahead for ".field" so we don't break l.backup(). + if l.pos < Pos(len(l.input)) { + r := l.input[l.pos] + if r < '0' || '9' < r { + return lexField + } + } + fallthrough // '.' can start a number. + case r == '+' || r == '-' || ('0' <= r && r <= '9'): + l.backup() + return lexNumber + case isAlphaNumeric(r): + l.backup() + return lexIdentifier + case r == '(': + l.emit(itemLeftParen) + l.parenDepth++ + return lexInsideAction + case r == ')': + l.emit(itemRightParen) + l.parenDepth-- + if l.parenDepth < 0 { + return l.errorf("unexpected right paren %#U", r) + } + return lexInsideAction + case r <= unicode.MaxASCII && unicode.IsPrint(r): + l.emit(itemChar) + return lexInsideAction + default: + return l.errorf("unrecognized character in action: %#U", r) + } + return lexInsideAction +} + +// lexSpace scans a run of space characters. +// One space has already been seen. +func lexSpace(l *lexer) stateFn { + for isSpace(l.peek()) { + l.next() + } + l.emit(itemSpace) + return lexInsideAction +} + +// lexIdentifier scans an alphanumeric. +func lexIdentifier(l *lexer) stateFn { +Loop: + for { + switch r := l.next(); { + case isAlphaNumeric(r): + // absorb. + default: + l.backup() + word := l.input[l.start:l.pos] + if !l.atTerminator() { + return l.errorf("bad character %#U", r) + } + switch { + case key[word] > itemKeyword: + l.emit(key[word]) + case word[0] == '.': + l.emit(itemField) + case word == "true", word == "false": + l.emit(itemBool) + default: + l.emit(itemIdentifier) + } + break Loop + } + } + return lexInsideAction +} + +// lexField scans a field: .Alphanumeric. +// The . has been scanned. +func lexField(l *lexer) stateFn { + return lexFieldOrVariable(l, itemField) +} + +// lexVariable scans a Variable: $Alphanumeric. +// The $ has been scanned. +func lexVariable(l *lexer) stateFn { + if l.atTerminator() { // Nothing interesting follows -> "$". + l.emit(itemVariable) + return lexInsideAction + } + return lexFieldOrVariable(l, itemVariable) +} + +// lexVariable scans a field or variable: [.$]Alphanumeric. +// The . or $ has been scanned. +func lexFieldOrVariable(l *lexer, typ itemType) stateFn { + if l.atTerminator() { // Nothing interesting follows -> "." or "$". + if typ == itemVariable { + l.emit(itemVariable) + } else { + l.emit(itemDot) + } + return lexInsideAction + } + var r rune + for { + r = l.next() + if !isAlphaNumeric(r) { + l.backup() + break + } + } + if !l.atTerminator() { + return l.errorf("bad character %#U", r) + } + l.emit(typ) + return lexInsideAction +} + +// atTerminator reports whether the input is at valid termination character to +// appear after an identifier. Breaks .X.Y into two pieces. Also catches cases +// like "$x+2" not being acceptable without a space, in case we decide one +// day to implement arithmetic. +func (l *lexer) atTerminator() bool { + r := l.peek() + if isSpace(r) || isEndOfLine(r) { + return true + } + switch r { + case eof, '.', ',', '|', ':', ')', '(': + return true + } + // Does r start the delimiter? This can be ambiguous (with delim=="//", $x/2 will + // succeed but should fail) but only in extremely rare cases caused by willfully + // bad choice of delimiter. + if rd, _ := utf8.DecodeRuneInString(l.rightDelim); rd == r { + return true + } + return false +} + +// lexChar scans a character constant. The initial quote is already +// scanned. Syntax checking is done by the parser. +func lexChar(l *lexer) stateFn { +Loop: + for { + switch l.next() { + case '\\': + if r := l.next(); r != eof && r != '\n' { + break + } + fallthrough + case eof, '\n': + return l.errorf("unterminated character constant") + case '\'': + break Loop + } + } + l.emit(itemCharConstant) + return lexInsideAction +} + +// lexNumber scans a number: decimal, octal, hex, float, or imaginary. This +// isn't a perfect number scanner - for instance it accepts "." and "0x0.2" +// and "089" - but when it's wrong the input is invalid and the parser (via +// strconv) will notice. +func lexNumber(l *lexer) stateFn { + if !l.scanNumber() { + return l.errorf("bad number syntax: %q", l.input[l.start:l.pos]) + } + if sign := l.peek(); sign == '+' || sign == '-' { + // Complex: 1+2i. No spaces, must end in 'i'. + if !l.scanNumber() || l.input[l.pos-1] != 'i' { + return l.errorf("bad number syntax: %q", l.input[l.start:l.pos]) + } + l.emit(itemComplex) + } else { + l.emit(itemNumber) + } + return lexInsideAction +} + +func (l *lexer) scanNumber() bool { + // Optional leading sign. + l.accept("+-") + // Is it hex? + digits := "0123456789" + if l.accept("0") && l.accept("xX") { + digits = "0123456789abcdefABCDEF" + } + l.acceptRun(digits) + if l.accept(".") { + l.acceptRun(digits) + } + if l.accept("eE") { + l.accept("+-") + l.acceptRun("0123456789") + } + // Is it imaginary? + l.accept("i") + // Next thing mustn't be alphanumeric. + if isAlphaNumeric(l.peek()) { + l.next() + return false + } + return true +} + +// lexQuote scans a quoted string. +func lexQuote(l *lexer) stateFn { +Loop: + for { + switch l.next() { + case '\\': + if r := l.next(); r != eof && r != '\n' { + break + } + fallthrough + case eof, '\n': + return l.errorf("unterminated quoted string") + case '"': + break Loop + } + } + l.emit(itemString) + return lexInsideAction +} + +// lexRawQuote scans a raw quoted string. +func lexRawQuote(l *lexer) stateFn { +Loop: + for { + switch l.next() { + case eof, '\n': + return l.errorf("unterminated raw quoted string") + case '`': + break Loop + } + } + l.emit(itemRawString) + return lexInsideAction +} + +// isSpace reports whether r is a space character. +func isSpace(r rune) bool { + return r == ' ' || r == '\t' +} + +// isEndOfLine reports whether r is an end-of-line character. +func isEndOfLine(r rune) bool { + return r == '\r' || r == '\n' +} + +// isAlphaNumeric reports whether r is an alphabetic, digit, or underscore. +func isAlphaNumeric(r rune) bool { + return r == '_' || unicode.IsLetter(r) || unicode.IsDigit(r) +} diff --git a/vendor/github.com/alecthomas/template/parse/lex_test.go b/vendor/github.com/alecthomas/template/parse/lex_test.go new file mode 100644 index 0000000..3b92107 --- /dev/null +++ b/vendor/github.com/alecthomas/template/parse/lex_test.go @@ -0,0 +1,468 @@ +// Copyright 2011 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. + +package parse + +import ( + "fmt" + "testing" +) + +// Make the types prettyprint. +var itemName = map[itemType]string{ + itemError: "error", + itemBool: "bool", + itemChar: "char", + itemCharConstant: "charconst", + itemComplex: "complex", + itemColonEquals: ":=", + itemEOF: "EOF", + itemField: "field", + itemIdentifier: "identifier", + itemLeftDelim: "left delim", + itemLeftParen: "(", + itemNumber: "number", + itemPipe: "pipe", + itemRawString: "raw string", + itemRightDelim: "right delim", + itemElideNewline: "elide newline", + itemRightParen: ")", + itemSpace: "space", + itemString: "string", + itemVariable: "variable", + + // keywords + itemDot: ".", + itemDefine: "define", + itemElse: "else", + itemIf: "if", + itemEnd: "end", + itemNil: "nil", + itemRange: "range", + itemTemplate: "template", + itemWith: "with", +} + +func (i itemType) String() string { + s := itemName[i] + if s == "" { + return fmt.Sprintf("item%d", int(i)) + } + return s +} + +type lexTest struct { + name string + input string + items []item +} + +var ( + tEOF = item{itemEOF, 0, ""} + tFor = item{itemIdentifier, 0, "for"} + tLeft = item{itemLeftDelim, 0, "{{"} + tLpar = item{itemLeftParen, 0, "("} + tPipe = item{itemPipe, 0, "|"} + tQuote = item{itemString, 0, `"abc \n\t\" "`} + tRange = item{itemRange, 0, "range"} + tRight = item{itemRightDelim, 0, "}}"} + tElideNewline = item{itemElideNewline, 0, "\\"} + tRpar = item{itemRightParen, 0, ")"} + tSpace = item{itemSpace, 0, " "} + raw = "`" + `abc\n\t\" ` + "`" + tRawQuote = item{itemRawString, 0, raw} +) + +var lexTests = []lexTest{ + {"empty", "", []item{tEOF}}, + {"spaces", " \t\n", []item{{itemText, 0, " \t\n"}, tEOF}}, + {"text", `now is the time`, []item{{itemText, 0, "now is the time"}, tEOF}}, + {"elide newline", "{{}}\\", []item{tLeft, tRight, tElideNewline, tEOF}}, + {"text with comment", "hello-{{/* this is a comment */}}-world", []item{ + {itemText, 0, "hello-"}, + {itemText, 0, "-world"}, + tEOF, + }}, + {"punctuation", "{{,@% }}", []item{ + tLeft, + {itemChar, 0, ","}, + {itemChar, 0, "@"}, + {itemChar, 0, "%"}, + tSpace, + tRight, + tEOF, + }}, + {"parens", "{{((3))}}", []item{ + tLeft, + tLpar, + tLpar, + {itemNumber, 0, "3"}, + tRpar, + tRpar, + tRight, + tEOF, + }}, + {"empty action", `{{}}`, []item{tLeft, tRight, tEOF}}, + {"for", `{{for}}`, []item{tLeft, tFor, tRight, tEOF}}, + {"quote", `{{"abc \n\t\" "}}`, []item{tLeft, tQuote, tRight, tEOF}}, + {"raw quote", "{{" + raw + "}}", []item{tLeft, tRawQuote, tRight, tEOF}}, + {"numbers", "{{1 02 0x14 -7.2i 1e3 +1.2e-4 4.2i 1+2i}}", []item{ + tLeft, + {itemNumber, 0, "1"}, + tSpace, + {itemNumber, 0, "02"}, + tSpace, + {itemNumber, 0, "0x14"}, + tSpace, + {itemNumber, 0, "-7.2i"}, + tSpace, + {itemNumber, 0, "1e3"}, + tSpace, + {itemNumber, 0, "+1.2e-4"}, + tSpace, + {itemNumber, 0, "4.2i"}, + tSpace, + {itemComplex, 0, "1+2i"}, + tRight, + tEOF, + }}, + {"characters", `{{'a' '\n' '\'' '\\' '\u00FF' '\xFF' '本'}}`, []item{ + tLeft, + {itemCharConstant, 0, `'a'`}, + tSpace, + {itemCharConstant, 0, `'\n'`}, + tSpace, + {itemCharConstant, 0, `'\''`}, + tSpace, + {itemCharConstant, 0, `'\\'`}, + tSpace, + {itemCharConstant, 0, `'\u00FF'`}, + tSpace, + {itemCharConstant, 0, `'\xFF'`}, + tSpace, + {itemCharConstant, 0, `'本'`}, + tRight, + tEOF, + }}, + {"bools", "{{true false}}", []item{ + tLeft, + {itemBool, 0, "true"}, + tSpace, + {itemBool, 0, "false"}, + tRight, + tEOF, + }}, + {"dot", "{{.}}", []item{ + tLeft, + {itemDot, 0, "."}, + tRight, + tEOF, + }}, + {"nil", "{{nil}}", []item{ + tLeft, + {itemNil, 0, "nil"}, + tRight, + tEOF, + }}, + {"dots", "{{.x . .2 .x.y.z}}", []item{ + tLeft, + {itemField, 0, ".x"}, + tSpace, + {itemDot, 0, "."}, + tSpace, + {itemNumber, 0, ".2"}, + tSpace, + {itemField, 0, ".x"}, + {itemField, 0, ".y"}, + {itemField, 0, ".z"}, + tRight, + tEOF, + }}, + {"keywords", "{{range if else end with}}", []item{ + tLeft, + {itemRange, 0, "range"}, + tSpace, + {itemIf, 0, "if"}, + tSpace, + {itemElse, 0, "else"}, + tSpace, + {itemEnd, 0, "end"}, + tSpace, + {itemWith, 0, "with"}, + tRight, + tEOF, + }}, + {"variables", "{{$c := printf $ $hello $23 $ $var.Field .Method}}", []item{ + tLeft, + {itemVariable, 0, "$c"}, + tSpace, + {itemColonEquals, 0, ":="}, + tSpace, + {itemIdentifier, 0, "printf"}, + tSpace, + {itemVariable, 0, "$"}, + tSpace, + {itemVariable, 0, "$hello"}, + tSpace, + {itemVariable, 0, "$23"}, + tSpace, + {itemVariable, 0, "$"}, + tSpace, + {itemVariable, 0, "$var"}, + {itemField, 0, ".Field"}, + tSpace, + {itemField, 0, ".Method"}, + tRight, + tEOF, + }}, + {"variable invocation", "{{$x 23}}", []item{ + tLeft, + {itemVariable, 0, "$x"}, + tSpace, + {itemNumber, 0, "23"}, + tRight, + tEOF, + }}, + {"pipeline", `intro {{echo hi 1.2 |noargs|args 1 "hi"}} outro`, []item{ + {itemText, 0, "intro "}, + tLeft, + {itemIdentifier, 0, "echo"}, + tSpace, + {itemIdentifier, 0, "hi"}, + tSpace, + {itemNumber, 0, "1.2"}, + tSpace, + tPipe, + {itemIdentifier, 0, "noargs"}, + tPipe, + {itemIdentifier, 0, "args"}, + tSpace, + {itemNumber, 0, "1"}, + tSpace, + {itemString, 0, `"hi"`}, + tRight, + {itemText, 0, " outro"}, + tEOF, + }}, + {"declaration", "{{$v := 3}}", []item{ + tLeft, + {itemVariable, 0, "$v"}, + tSpace, + {itemColonEquals, 0, ":="}, + tSpace, + {itemNumber, 0, "3"}, + tRight, + tEOF, + }}, + {"2 declarations", "{{$v , $w := 3}}", []item{ + tLeft, + {itemVariable, 0, "$v"}, + tSpace, + {itemChar, 0, ","}, + tSpace, + {itemVariable, 0, "$w"}, + tSpace, + {itemColonEquals, 0, ":="}, + tSpace, + {itemNumber, 0, "3"}, + tRight, + tEOF, + }}, + {"field of parenthesized expression", "{{(.X).Y}}", []item{ + tLeft, + tLpar, + {itemField, 0, ".X"}, + tRpar, + {itemField, 0, ".Y"}, + tRight, + tEOF, + }}, + // errors + {"badchar", "#{{\x01}}", []item{ + {itemText, 0, "#"}, + tLeft, + {itemError, 0, "unrecognized character in action: U+0001"}, + }}, + {"unclosed action", "{{\n}}", []item{ + tLeft, + {itemError, 0, "unclosed action"}, + }}, + {"EOF in action", "{{range", []item{ + tLeft, + tRange, + {itemError, 0, "unclosed action"}, + }}, + {"unclosed quote", "{{\"\n\"}}", []item{ + tLeft, + {itemError, 0, "unterminated quoted string"}, + }}, + {"unclosed raw quote", "{{`xx\n`}}", []item{ + tLeft, + {itemError, 0, "unterminated raw quoted string"}, + }}, + {"unclosed char constant", "{{'\n}}", []item{ + tLeft, + {itemError, 0, "unterminated character constant"}, + }}, + {"bad number", "{{3k}}", []item{ + tLeft, + {itemError, 0, `bad number syntax: "3k"`}, + }}, + {"unclosed paren", "{{(3}}", []item{ + tLeft, + tLpar, + {itemNumber, 0, "3"}, + {itemError, 0, `unclosed left paren`}, + }}, + {"extra right paren", "{{3)}}", []item{ + tLeft, + {itemNumber, 0, "3"}, + tRpar, + {itemError, 0, `unexpected right paren U+0029 ')'`}, + }}, + + // Fixed bugs + // Many elements in an action blew the lookahead until + // we made lexInsideAction not loop. + {"long pipeline deadlock", "{{|||||}}", []item{ + tLeft, + tPipe, + tPipe, + tPipe, + tPipe, + tPipe, + tRight, + tEOF, + }}, + {"text with bad comment", "hello-{{/*/}}-world", []item{ + {itemText, 0, "hello-"}, + {itemError, 0, `unclosed comment`}, + }}, + {"text with comment close separted from delim", "hello-{{/* */ }}-world", []item{ + {itemText, 0, "hello-"}, + {itemError, 0, `comment ends before closing delimiter`}, + }}, + // This one is an error that we can't catch because it breaks templates with + // minimized JavaScript. Should have fixed it before Go 1.1. + {"unmatched right delimiter", "hello-{.}}-world", []item{ + {itemText, 0, "hello-{.}}-world"}, + tEOF, + }}, +} + +// collect gathers the emitted items into a slice. +func collect(t *lexTest, left, right string) (items []item) { + l := lex(t.name, t.input, left, right) + for { + item := l.nextItem() + items = append(items, item) + if item.typ == itemEOF || item.typ == itemError { + break + } + } + return +} + +func equal(i1, i2 []item, checkPos bool) bool { + if len(i1) != len(i2) { + return false + } + for k := range i1 { + if i1[k].typ != i2[k].typ { + return false + } + if i1[k].val != i2[k].val { + return false + } + if checkPos && i1[k].pos != i2[k].pos { + return false + } + } + return true +} + +func TestLex(t *testing.T) { + for _, test := range lexTests { + items := collect(&test, "", "") + if !equal(items, test.items, false) { + t.Errorf("%s: got\n\t%+v\nexpected\n\t%v", test.name, items, test.items) + } + } +} + +// Some easy cases from above, but with delimiters $$ and @@ +var lexDelimTests = []lexTest{ + {"punctuation", "$$,@%{{}}@@", []item{ + tLeftDelim, + {itemChar, 0, ","}, + {itemChar, 0, "@"}, + {itemChar, 0, "%"}, + {itemChar, 0, "{"}, + {itemChar, 0, "{"}, + {itemChar, 0, "}"}, + {itemChar, 0, "}"}, + tRightDelim, + tEOF, + }}, + {"empty action", `$$@@`, []item{tLeftDelim, tRightDelim, tEOF}}, + {"for", `$$for@@`, []item{tLeftDelim, tFor, tRightDelim, tEOF}}, + {"quote", `$$"abc \n\t\" "@@`, []item{tLeftDelim, tQuote, tRightDelim, tEOF}}, + {"raw quote", "$$" + raw + "@@", []item{tLeftDelim, tRawQuote, tRightDelim, tEOF}}, +} + +var ( + tLeftDelim = item{itemLeftDelim, 0, "$$"} + tRightDelim = item{itemRightDelim, 0, "@@"} +) + +func TestDelims(t *testing.T) { + for _, test := range lexDelimTests { + items := collect(&test, "$$", "@@") + if !equal(items, test.items, false) { + t.Errorf("%s: got\n\t%v\nexpected\n\t%v", test.name, items, test.items) + } + } +} + +var lexPosTests = []lexTest{ + {"empty", "", []item{tEOF}}, + {"punctuation", "{{,@%#}}", []item{ + {itemLeftDelim, 0, "{{"}, + {itemChar, 2, ","}, + {itemChar, 3, "@"}, + {itemChar, 4, "%"}, + {itemChar, 5, "#"}, + {itemRightDelim, 6, "}}"}, + {itemEOF, 8, ""}, + }}, + {"sample", "0123{{hello}}xyz", []item{ + {itemText, 0, "0123"}, + {itemLeftDelim, 4, "{{"}, + {itemIdentifier, 6, "hello"}, + {itemRightDelim, 11, "}}"}, + {itemText, 13, "xyz"}, + {itemEOF, 16, ""}, + }}, +} + +// The other tests don't check position, to make the test cases easier to construct. +// This one does. +func TestPos(t *testing.T) { + for _, test := range lexPosTests { + items := collect(&test, "", "") + if !equal(items, test.items, true) { + t.Errorf("%s: got\n\t%v\nexpected\n\t%v", test.name, items, test.items) + if len(items) == len(test.items) { + // Detailed print; avoid item.String() to expose the position value. + for i := range items { + if !equal(items[i:i+1], test.items[i:i+1], true) { + i1 := items[i] + i2 := test.items[i] + t.Errorf("\t#%d: got {%v %d %q} expected {%v %d %q}", i, i1.typ, i1.pos, i1.val, i2.typ, i2.pos, i2.val) + } + } + } + } + } +} diff --git a/vendor/github.com/alecthomas/template/parse/node.go b/vendor/github.com/alecthomas/template/parse/node.go new file mode 100644 index 0000000..55c37f6 --- /dev/null +++ b/vendor/github.com/alecthomas/template/parse/node.go @@ -0,0 +1,834 @@ +// Copyright 2011 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. + +// Parse nodes. + +package parse + +import ( + "bytes" + "fmt" + "strconv" + "strings" +) + +var textFormat = "%s" // Changed to "%q" in tests for better error messages. + +// A Node is an element in the parse tree. The interface is trivial. +// The interface contains an unexported method so that only +// types local to this package can satisfy it. +type Node interface { + Type() NodeType + String() string + // Copy does a deep copy of the Node and all its components. + // To avoid type assertions, some XxxNodes also have specialized + // CopyXxx methods that return *XxxNode. + Copy() Node + Position() Pos // byte position of start of node in full original input string + // tree returns the containing *Tree. + // It is unexported so all implementations of Node are in this package. + tree() *Tree +} + +// NodeType identifies the type of a parse tree node. +type NodeType int + +// Pos represents a byte position in the original input text from which +// this template was parsed. +type Pos int + +func (p Pos) Position() Pos { + return p +} + +// Type returns itself and provides an easy default implementation +// for embedding in a Node. Embedded in all non-trivial Nodes. +func (t NodeType) Type() NodeType { + return t +} + +const ( + NodeText NodeType = iota // Plain text. + NodeAction // A non-control action such as a field evaluation. + NodeBool // A boolean constant. + NodeChain // A sequence of field accesses. + NodeCommand // An element of a pipeline. + NodeDot // The cursor, dot. + nodeElse // An else action. Not added to tree. + nodeEnd // An end action. Not added to tree. + NodeField // A field or method name. + NodeIdentifier // An identifier; always a function name. + NodeIf // An if action. + NodeList // A list of Nodes. + NodeNil // An untyped nil constant. + NodeNumber // A numerical constant. + NodePipe // A pipeline of commands. + NodeRange // A range action. + NodeString // A string constant. + NodeTemplate // A template invocation action. + NodeVariable // A $ variable. + NodeWith // A with action. +) + +// Nodes. + +// ListNode holds a sequence of nodes. +type ListNode struct { + NodeType + Pos + tr *Tree + Nodes []Node // The element nodes in lexical order. +} + +func (t *Tree) newList(pos Pos) *ListNode { + return &ListNode{tr: t, NodeType: NodeList, Pos: pos} +} + +func (l *ListNode) append(n Node) { + l.Nodes = append(l.Nodes, n) +} + +func (l *ListNode) tree() *Tree { + return l.tr +} + +func (l *ListNode) String() string { + b := new(bytes.Buffer) + for _, n := range l.Nodes { + fmt.Fprint(b, n) + } + return b.String() +} + +func (l *ListNode) CopyList() *ListNode { + if l == nil { + return l + } + n := l.tr.newList(l.Pos) + for _, elem := range l.Nodes { + n.append(elem.Copy()) + } + return n +} + +func (l *ListNode) Copy() Node { + return l.CopyList() +} + +// TextNode holds plain text. +type TextNode struct { + NodeType + Pos + tr *Tree + Text []byte // The text; may span newlines. +} + +func (t *Tree) newText(pos Pos, text string) *TextNode { + return &TextNode{tr: t, NodeType: NodeText, Pos: pos, Text: []byte(text)} +} + +func (t *TextNode) String() string { + return fmt.Sprintf(textFormat, t.Text) +} + +func (t *TextNode) tree() *Tree { + return t.tr +} + +func (t *TextNode) Copy() Node { + return &TextNode{tr: t.tr, NodeType: NodeText, Pos: t.Pos, Text: append([]byte{}, t.Text...)} +} + +// PipeNode holds a pipeline with optional declaration +type PipeNode struct { + NodeType + Pos + tr *Tree + Line int // The line number in the input (deprecated; kept for compatibility) + Decl []*VariableNode // Variable declarations in lexical order. + Cmds []*CommandNode // The commands in lexical order. +} + +func (t *Tree) newPipeline(pos Pos, line int, decl []*VariableNode) *PipeNode { + return &PipeNode{tr: t, NodeType: NodePipe, Pos: pos, Line: line, Decl: decl} +} + +func (p *PipeNode) append(command *CommandNode) { + p.Cmds = append(p.Cmds, command) +} + +func (p *PipeNode) String() string { + s := "" + if len(p.Decl) > 0 { + for i, v := range p.Decl { + if i > 0 { + s += ", " + } + s += v.String() + } + s += " := " + } + for i, c := range p.Cmds { + if i > 0 { + s += " | " + } + s += c.String() + } + return s +} + +func (p *PipeNode) tree() *Tree { + return p.tr +} + +func (p *PipeNode) CopyPipe() *PipeNode { + if p == nil { + return p + } + var decl []*VariableNode + for _, d := range p.Decl { + decl = append(decl, d.Copy().(*VariableNode)) + } + n := p.tr.newPipeline(p.Pos, p.Line, decl) + for _, c := range p.Cmds { + n.append(c.Copy().(*CommandNode)) + } + return n +} + +func (p *PipeNode) Copy() Node { + return p.CopyPipe() +} + +// ActionNode holds an action (something bounded by delimiters). +// Control actions have their own nodes; ActionNode represents simple +// ones such as field evaluations and parenthesized pipelines. +type ActionNode struct { + NodeType + Pos + tr *Tree + Line int // The line number in the input (deprecated; kept for compatibility) + Pipe *PipeNode // The pipeline in the action. +} + +func (t *Tree) newAction(pos Pos, line int, pipe *PipeNode) *ActionNode { + return &ActionNode{tr: t, NodeType: NodeAction, Pos: pos, Line: line, Pipe: pipe} +} + +func (a *ActionNode) String() string { + return fmt.Sprintf("{{%s}}", a.Pipe) + +} + +func (a *ActionNode) tree() *Tree { + return a.tr +} + +func (a *ActionNode) Copy() Node { + return a.tr.newAction(a.Pos, a.Line, a.Pipe.CopyPipe()) + +} + +// CommandNode holds a command (a pipeline inside an evaluating action). +type CommandNode struct { + NodeType + Pos + tr *Tree + Args []Node // Arguments in lexical order: Identifier, field, or constant. +} + +func (t *Tree) newCommand(pos Pos) *CommandNode { + return &CommandNode{tr: t, NodeType: NodeCommand, Pos: pos} +} + +func (c *CommandNode) append(arg Node) { + c.Args = append(c.Args, arg) +} + +func (c *CommandNode) String() string { + s := "" + for i, arg := range c.Args { + if i > 0 { + s += " " + } + if arg, ok := arg.(*PipeNode); ok { + s += "(" + arg.String() + ")" + continue + } + s += arg.String() + } + return s +} + +func (c *CommandNode) tree() *Tree { + return c.tr +} + +func (c *CommandNode) Copy() Node { + if c == nil { + return c + } + n := c.tr.newCommand(c.Pos) + for _, c := range c.Args { + n.append(c.Copy()) + } + return n +} + +// IdentifierNode holds an identifier. +type IdentifierNode struct { + NodeType + Pos + tr *Tree + Ident string // The identifier's name. +} + +// NewIdentifier returns a new IdentifierNode with the given identifier name. +func NewIdentifier(ident string) *IdentifierNode { + return &IdentifierNode{NodeType: NodeIdentifier, Ident: ident} +} + +// SetPos sets the position. NewIdentifier is a public method so we can't modify its signature. +// Chained for convenience. +// TODO: fix one day? +func (i *IdentifierNode) SetPos(pos Pos) *IdentifierNode { + i.Pos = pos + return i +} + +// SetTree sets the parent tree for the node. NewIdentifier is a public method so we can't modify its signature. +// Chained for convenience. +// TODO: fix one day? +func (i *IdentifierNode) SetTree(t *Tree) *IdentifierNode { + i.tr = t + return i +} + +func (i *IdentifierNode) String() string { + return i.Ident +} + +func (i *IdentifierNode) tree() *Tree { + return i.tr +} + +func (i *IdentifierNode) Copy() Node { + return NewIdentifier(i.Ident).SetTree(i.tr).SetPos(i.Pos) +} + +// VariableNode holds a list of variable names, possibly with chained field +// accesses. The dollar sign is part of the (first) name. +type VariableNode struct { + NodeType + Pos + tr *Tree + Ident []string // Variable name and fields in lexical order. +} + +func (t *Tree) newVariable(pos Pos, ident string) *VariableNode { + return &VariableNode{tr: t, NodeType: NodeVariable, Pos: pos, Ident: strings.Split(ident, ".")} +} + +func (v *VariableNode) String() string { + s := "" + for i, id := range v.Ident { + if i > 0 { + s += "." + } + s += id + } + return s +} + +func (v *VariableNode) tree() *Tree { + return v.tr +} + +func (v *VariableNode) Copy() Node { + return &VariableNode{tr: v.tr, NodeType: NodeVariable, Pos: v.Pos, Ident: append([]string{}, v.Ident...)} +} + +// DotNode holds the special identifier '.'. +type DotNode struct { + NodeType + Pos + tr *Tree +} + +func (t *Tree) newDot(pos Pos) *DotNode { + return &DotNode{tr: t, NodeType: NodeDot, Pos: pos} +} + +func (d *DotNode) Type() NodeType { + // Override method on embedded NodeType for API compatibility. + // TODO: Not really a problem; could change API without effect but + // api tool complains. + return NodeDot +} + +func (d *DotNode) String() string { + return "." +} + +func (d *DotNode) tree() *Tree { + return d.tr +} + +func (d *DotNode) Copy() Node { + return d.tr.newDot(d.Pos) +} + +// NilNode holds the special identifier 'nil' representing an untyped nil constant. +type NilNode struct { + NodeType + Pos + tr *Tree +} + +func (t *Tree) newNil(pos Pos) *NilNode { + return &NilNode{tr: t, NodeType: NodeNil, Pos: pos} +} + +func (n *NilNode) Type() NodeType { + // Override method on embedded NodeType for API compatibility. + // TODO: Not really a problem; could change API without effect but + // api tool complains. + return NodeNil +} + +func (n *NilNode) String() string { + return "nil" +} + +func (n *NilNode) tree() *Tree { + return n.tr +} + +func (n *NilNode) Copy() Node { + return n.tr.newNil(n.Pos) +} + +// FieldNode holds a field (identifier starting with '.'). +// The names may be chained ('.x.y'). +// The period is dropped from each ident. +type FieldNode struct { + NodeType + Pos + tr *Tree + Ident []string // The identifiers in lexical order. +} + +func (t *Tree) newField(pos Pos, ident string) *FieldNode { + return &FieldNode{tr: t, NodeType: NodeField, Pos: pos, Ident: strings.Split(ident[1:], ".")} // [1:] to drop leading period +} + +func (f *FieldNode) String() string { + s := "" + for _, id := range f.Ident { + s += "." + id + } + return s +} + +func (f *FieldNode) tree() *Tree { + return f.tr +} + +func (f *FieldNode) Copy() Node { + return &FieldNode{tr: f.tr, NodeType: NodeField, Pos: f.Pos, Ident: append([]string{}, f.Ident...)} +} + +// ChainNode holds a term followed by a chain of field accesses (identifier starting with '.'). +// The names may be chained ('.x.y'). +// The periods are dropped from each ident. +type ChainNode struct { + NodeType + Pos + tr *Tree + Node Node + Field []string // The identifiers in lexical order. +} + +func (t *Tree) newChain(pos Pos, node Node) *ChainNode { + return &ChainNode{tr: t, NodeType: NodeChain, Pos: pos, Node: node} +} + +// Add adds the named field (which should start with a period) to the end of the chain. +func (c *ChainNode) Add(field string) { + if len(field) == 0 || field[0] != '.' { + panic("no dot in field") + } + field = field[1:] // Remove leading dot. + if field == "" { + panic("empty field") + } + c.Field = append(c.Field, field) +} + +func (c *ChainNode) String() string { + s := c.Node.String() + if _, ok := c.Node.(*PipeNode); ok { + s = "(" + s + ")" + } + for _, field := range c.Field { + s += "." + field + } + return s +} + +func (c *ChainNode) tree() *Tree { + return c.tr +} + +func (c *ChainNode) Copy() Node { + return &ChainNode{tr: c.tr, NodeType: NodeChain, Pos: c.Pos, Node: c.Node, Field: append([]string{}, c.Field...)} +} + +// BoolNode holds a boolean constant. +type BoolNode struct { + NodeType + Pos + tr *Tree + True bool // The value of the boolean constant. +} + +func (t *Tree) newBool(pos Pos, true bool) *BoolNode { + return &BoolNode{tr: t, NodeType: NodeBool, Pos: pos, True: true} +} + +func (b *BoolNode) String() string { + if b.True { + return "true" + } + return "false" +} + +func (b *BoolNode) tree() *Tree { + return b.tr +} + +func (b *BoolNode) Copy() Node { + return b.tr.newBool(b.Pos, b.True) +} + +// NumberNode holds a number: signed or unsigned integer, float, or complex. +// The value is parsed and stored under all the types that can represent the value. +// This simulates in a small amount of code the behavior of Go's ideal constants. +type NumberNode struct { + NodeType + Pos + tr *Tree + IsInt bool // Number has an integral value. + IsUint bool // Number has an unsigned integral value. + IsFloat bool // Number has a floating-point value. + IsComplex bool // Number is complex. + Int64 int64 // The signed integer value. + Uint64 uint64 // The unsigned integer value. + Float64 float64 // The floating-point value. + Complex128 complex128 // The complex value. + Text string // The original textual representation from the input. +} + +func (t *Tree) newNumber(pos Pos, text string, typ itemType) (*NumberNode, error) { + n := &NumberNode{tr: t, NodeType: NodeNumber, Pos: pos, Text: text} + switch typ { + case itemCharConstant: + rune, _, tail, err := strconv.UnquoteChar(text[1:], text[0]) + if err != nil { + return nil, err + } + if tail != "'" { + return nil, fmt.Errorf("malformed character constant: %s", text) + } + n.Int64 = int64(rune) + n.IsInt = true + n.Uint64 = uint64(rune) + n.IsUint = true + n.Float64 = float64(rune) // odd but those are the rules. + n.IsFloat = true + return n, nil + case itemComplex: + // fmt.Sscan can parse the pair, so let it do the work. + if _, err := fmt.Sscan(text, &n.Complex128); err != nil { + return nil, err + } + n.IsComplex = true + n.simplifyComplex() + return n, nil + } + // Imaginary constants can only be complex unless they are zero. + if len(text) > 0 && text[len(text)-1] == 'i' { + f, err := strconv.ParseFloat(text[:len(text)-1], 64) + if err == nil { + n.IsComplex = true + n.Complex128 = complex(0, f) + n.simplifyComplex() + return n, nil + } + } + // Do integer test first so we get 0x123 etc. + u, err := strconv.ParseUint(text, 0, 64) // will fail for -0; fixed below. + if err == nil { + n.IsUint = true + n.Uint64 = u + } + i, err := strconv.ParseInt(text, 0, 64) + if err == nil { + n.IsInt = true + n.Int64 = i + if i == 0 { + n.IsUint = true // in case of -0. + n.Uint64 = u + } + } + // If an integer extraction succeeded, promote the float. + if n.IsInt { + n.IsFloat = true + n.Float64 = float64(n.Int64) + } else if n.IsUint { + n.IsFloat = true + n.Float64 = float64(n.Uint64) + } else { + f, err := strconv.ParseFloat(text, 64) + if err == nil { + n.IsFloat = true + n.Float64 = f + // If a floating-point extraction succeeded, extract the int if needed. + if !n.IsInt && float64(int64(f)) == f { + n.IsInt = true + n.Int64 = int64(f) + } + if !n.IsUint && float64(uint64(f)) == f { + n.IsUint = true + n.Uint64 = uint64(f) + } + } + } + if !n.IsInt && !n.IsUint && !n.IsFloat { + return nil, fmt.Errorf("illegal number syntax: %q", text) + } + return n, nil +} + +// simplifyComplex pulls out any other types that are represented by the complex number. +// These all require that the imaginary part be zero. +func (n *NumberNode) simplifyComplex() { + n.IsFloat = imag(n.Complex128) == 0 + if n.IsFloat { + n.Float64 = real(n.Complex128) + n.IsInt = float64(int64(n.Float64)) == n.Float64 + if n.IsInt { + n.Int64 = int64(n.Float64) + } + n.IsUint = float64(uint64(n.Float64)) == n.Float64 + if n.IsUint { + n.Uint64 = uint64(n.Float64) + } + } +} + +func (n *NumberNode) String() string { + return n.Text +} + +func (n *NumberNode) tree() *Tree { + return n.tr +} + +func (n *NumberNode) Copy() Node { + nn := new(NumberNode) + *nn = *n // Easy, fast, correct. + return nn +} + +// StringNode holds a string constant. The value has been "unquoted". +type StringNode struct { + NodeType + Pos + tr *Tree + Quoted string // The original text of the string, with quotes. + Text string // The string, after quote processing. +} + +func (t *Tree) newString(pos Pos, orig, text string) *StringNode { + return &StringNode{tr: t, NodeType: NodeString, Pos: pos, Quoted: orig, Text: text} +} + +func (s *StringNode) String() string { + return s.Quoted +} + +func (s *StringNode) tree() *Tree { + return s.tr +} + +func (s *StringNode) Copy() Node { + return s.tr.newString(s.Pos, s.Quoted, s.Text) +} + +// endNode represents an {{end}} action. +// It does not appear in the final parse tree. +type endNode struct { + NodeType + Pos + tr *Tree +} + +func (t *Tree) newEnd(pos Pos) *endNode { + return &endNode{tr: t, NodeType: nodeEnd, Pos: pos} +} + +func (e *endNode) String() string { + return "{{end}}" +} + +func (e *endNode) tree() *Tree { + return e.tr +} + +func (e *endNode) Copy() Node { + return e.tr.newEnd(e.Pos) +} + +// elseNode represents an {{else}} action. Does not appear in the final tree. +type elseNode struct { + NodeType + Pos + tr *Tree + Line int // The line number in the input (deprecated; kept for compatibility) +} + +func (t *Tree) newElse(pos Pos, line int) *elseNode { + return &elseNode{tr: t, NodeType: nodeElse, Pos: pos, Line: line} +} + +func (e *elseNode) Type() NodeType { + return nodeElse +} + +func (e *elseNode) String() string { + return "{{else}}" +} + +func (e *elseNode) tree() *Tree { + return e.tr +} + +func (e *elseNode) Copy() Node { + return e.tr.newElse(e.Pos, e.Line) +} + +// BranchNode is the common representation of if, range, and with. +type BranchNode struct { + NodeType + Pos + tr *Tree + Line int // The line number in the input (deprecated; kept for compatibility) + Pipe *PipeNode // The pipeline to be evaluated. + List *ListNode // What to execute if the value is non-empty. + ElseList *ListNode // What to execute if the value is empty (nil if absent). +} + +func (b *BranchNode) String() string { + name := "" + switch b.NodeType { + case NodeIf: + name = "if" + case NodeRange: + name = "range" + case NodeWith: + name = "with" + default: + panic("unknown branch type") + } + if b.ElseList != nil { + return fmt.Sprintf("{{%s %s}}%s{{else}}%s{{end}}", name, b.Pipe, b.List, b.ElseList) + } + return fmt.Sprintf("{{%s %s}}%s{{end}}", name, b.Pipe, b.List) +} + +func (b *BranchNode) tree() *Tree { + return b.tr +} + +func (b *BranchNode) Copy() Node { + switch b.NodeType { + case NodeIf: + return b.tr.newIf(b.Pos, b.Line, b.Pipe, b.List, b.ElseList) + case NodeRange: + return b.tr.newRange(b.Pos, b.Line, b.Pipe, b.List, b.ElseList) + case NodeWith: + return b.tr.newWith(b.Pos, b.Line, b.Pipe, b.List, b.ElseList) + default: + panic("unknown branch type") + } +} + +// IfNode represents an {{if}} action and its commands. +type IfNode struct { + BranchNode +} + +func (t *Tree) newIf(pos Pos, line int, pipe *PipeNode, list, elseList *ListNode) *IfNode { + return &IfNode{BranchNode{tr: t, NodeType: NodeIf, Pos: pos, Line: line, Pipe: pipe, List: list, ElseList: elseList}} +} + +func (i *IfNode) Copy() Node { + return i.tr.newIf(i.Pos, i.Line, i.Pipe.CopyPipe(), i.List.CopyList(), i.ElseList.CopyList()) +} + +// RangeNode represents a {{range}} action and its commands. +type RangeNode struct { + BranchNode +} + +func (t *Tree) newRange(pos Pos, line int, pipe *PipeNode, list, elseList *ListNode) *RangeNode { + return &RangeNode{BranchNode{tr: t, NodeType: NodeRange, Pos: pos, Line: line, Pipe: pipe, List: list, ElseList: elseList}} +} + +func (r *RangeNode) Copy() Node { + return r.tr.newRange(r.Pos, r.Line, r.Pipe.CopyPipe(), r.List.CopyList(), r.ElseList.CopyList()) +} + +// WithNode represents a {{with}} action and its commands. +type WithNode struct { + BranchNode +} + +func (t *Tree) newWith(pos Pos, line int, pipe *PipeNode, list, elseList *ListNode) *WithNode { + return &WithNode{BranchNode{tr: t, NodeType: NodeWith, Pos: pos, Line: line, Pipe: pipe, List: list, ElseList: elseList}} +} + +func (w *WithNode) Copy() Node { + return w.tr.newWith(w.Pos, w.Line, w.Pipe.CopyPipe(), w.List.CopyList(), w.ElseList.CopyList()) +} + +// TemplateNode represents a {{template}} action. +type TemplateNode struct { + NodeType + Pos + tr *Tree + Line int // The line number in the input (deprecated; kept for compatibility) + Name string // The name of the template (unquoted). + Pipe *PipeNode // The command to evaluate as dot for the template. +} + +func (t *Tree) newTemplate(pos Pos, line int, name string, pipe *PipeNode) *TemplateNode { + return &TemplateNode{tr: t, NodeType: NodeTemplate, Pos: pos, Line: line, Name: name, Pipe: pipe} +} + +func (t *TemplateNode) String() string { + if t.Pipe == nil { + return fmt.Sprintf("{{template %q}}", t.Name) + } + return fmt.Sprintf("{{template %q %s}}", t.Name, t.Pipe) +} + +func (t *TemplateNode) tree() *Tree { + return t.tr +} + +func (t *TemplateNode) Copy() Node { + return t.tr.newTemplate(t.Pos, t.Line, t.Name, t.Pipe.CopyPipe()) +} diff --git a/vendor/github.com/alecthomas/template/parse/parse.go b/vendor/github.com/alecthomas/template/parse/parse.go new file mode 100644 index 0000000..0d77ade --- /dev/null +++ b/vendor/github.com/alecthomas/template/parse/parse.go @@ -0,0 +1,700 @@ +// Copyright 2011 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. + +// Package parse builds parse trees for templates as defined by text/template +// and html/template. Clients should use those packages to construct templates +// rather than this one, which provides shared internal data structures not +// intended for general use. +package parse + +import ( + "bytes" + "fmt" + "runtime" + "strconv" + "strings" +) + +// Tree is the representation of a single parsed template. +type Tree struct { + Name string // name of the template represented by the tree. + ParseName string // name of the top-level template during parsing, for error messages. + Root *ListNode // top-level root of the tree. + text string // text parsed to create the template (or its parent) + // Parsing only; cleared after parse. + funcs []map[string]interface{} + lex *lexer + token [3]item // three-token lookahead for parser. + peekCount int + vars []string // variables defined at the moment. +} + +// Copy returns a copy of the Tree. Any parsing state is discarded. +func (t *Tree) Copy() *Tree { + if t == nil { + return nil + } + return &Tree{ + Name: t.Name, + ParseName: t.ParseName, + Root: t.Root.CopyList(), + text: t.text, + } +} + +// Parse returns a map from template name to parse.Tree, created by parsing the +// templates described in the argument string. The top-level template will be +// given the specified name. If an error is encountered, parsing stops and an +// empty map is returned with the error. +func Parse(name, text, leftDelim, rightDelim string, funcs ...map[string]interface{}) (treeSet map[string]*Tree, err error) { + treeSet = make(map[string]*Tree) + t := New(name) + t.text = text + _, err = t.Parse(text, leftDelim, rightDelim, treeSet, funcs...) + return +} + +// next returns the next token. +func (t *Tree) next() item { + if t.peekCount > 0 { + t.peekCount-- + } else { + t.token[0] = t.lex.nextItem() + } + return t.token[t.peekCount] +} + +// backup backs the input stream up one token. +func (t *Tree) backup() { + t.peekCount++ +} + +// backup2 backs the input stream up two tokens. +// The zeroth token is already there. +func (t *Tree) backup2(t1 item) { + t.token[1] = t1 + t.peekCount = 2 +} + +// backup3 backs the input stream up three tokens +// The zeroth token is already there. +func (t *Tree) backup3(t2, t1 item) { // Reverse order: we're pushing back. + t.token[1] = t1 + t.token[2] = t2 + t.peekCount = 3 +} + +// peek returns but does not consume the next token. +func (t *Tree) peek() item { + if t.peekCount > 0 { + return t.token[t.peekCount-1] + } + t.peekCount = 1 + t.token[0] = t.lex.nextItem() + return t.token[0] +} + +// nextNonSpace returns the next non-space token. +func (t *Tree) nextNonSpace() (token item) { + for { + token = t.next() + if token.typ != itemSpace { + break + } + } + return token +} + +// peekNonSpace returns but does not consume the next non-space token. +func (t *Tree) peekNonSpace() (token item) { + for { + token = t.next() + if token.typ != itemSpace { + break + } + } + t.backup() + return token +} + +// Parsing. + +// New allocates a new parse tree with the given name. +func New(name string, funcs ...map[string]interface{}) *Tree { + return &Tree{ + Name: name, + funcs: funcs, + } +} + +// ErrorContext returns a textual representation of the location of the node in the input text. +// The receiver is only used when the node does not have a pointer to the tree inside, +// which can occur in old code. +func (t *Tree) ErrorContext(n Node) (location, context string) { + pos := int(n.Position()) + tree := n.tree() + if tree == nil { + tree = t + } + text := tree.text[:pos] + byteNum := strings.LastIndex(text, "\n") + if byteNum == -1 { + byteNum = pos // On first line. + } else { + byteNum++ // After the newline. + byteNum = pos - byteNum + } + lineNum := 1 + strings.Count(text, "\n") + context = n.String() + if len(context) > 20 { + context = fmt.Sprintf("%.20s...", context) + } + return fmt.Sprintf("%s:%d:%d", tree.ParseName, lineNum, byteNum), context +} + +// errorf formats the error and terminates processing. +func (t *Tree) errorf(format string, args ...interface{}) { + t.Root = nil + format = fmt.Sprintf("template: %s:%d: %s", t.ParseName, t.lex.lineNumber(), format) + panic(fmt.Errorf(format, args...)) +} + +// error terminates processing. +func (t *Tree) error(err error) { + t.errorf("%s", err) +} + +// expect consumes the next token and guarantees it has the required type. +func (t *Tree) expect(expected itemType, context string) item { + token := t.nextNonSpace() + if token.typ != expected { + t.unexpected(token, context) + } + return token +} + +// expectOneOf consumes the next token and guarantees it has one of the required types. +func (t *Tree) expectOneOf(expected1, expected2 itemType, context string) item { + token := t.nextNonSpace() + if token.typ != expected1 && token.typ != expected2 { + t.unexpected(token, context) + } + return token +} + +// unexpected complains about the token and terminates processing. +func (t *Tree) unexpected(token item, context string) { + t.errorf("unexpected %s in %s", token, context) +} + +// recover is the handler that turns panics into returns from the top level of Parse. +func (t *Tree) recover(errp *error) { + e := recover() + if e != nil { + if _, ok := e.(runtime.Error); ok { + panic(e) + } + if t != nil { + t.stopParse() + } + *errp = e.(error) + } + return +} + +// startParse initializes the parser, using the lexer. +func (t *Tree) startParse(funcs []map[string]interface{}, lex *lexer) { + t.Root = nil + t.lex = lex + t.vars = []string{"$"} + t.funcs = funcs +} + +// stopParse terminates parsing. +func (t *Tree) stopParse() { + t.lex = nil + t.vars = nil + t.funcs = nil +} + +// Parse parses the template definition string to construct a representation of +// the template for execution. If either action delimiter string is empty, the +// default ("{{" or "}}") is used. Embedded template definitions are added to +// the treeSet map. +func (t *Tree) Parse(text, leftDelim, rightDelim string, treeSet map[string]*Tree, funcs ...map[string]interface{}) (tree *Tree, err error) { + defer t.recover(&err) + t.ParseName = t.Name + t.startParse(funcs, lex(t.Name, text, leftDelim, rightDelim)) + t.text = text + t.parse(treeSet) + t.add(treeSet) + t.stopParse() + return t, nil +} + +// add adds tree to the treeSet. +func (t *Tree) add(treeSet map[string]*Tree) { + tree := treeSet[t.Name] + if tree == nil || IsEmptyTree(tree.Root) { + treeSet[t.Name] = t + return + } + if !IsEmptyTree(t.Root) { + t.errorf("template: multiple definition of template %q", t.Name) + } +} + +// IsEmptyTree reports whether this tree (node) is empty of everything but space. +func IsEmptyTree(n Node) bool { + switch n := n.(type) { + case nil: + return true + case *ActionNode: + case *IfNode: + case *ListNode: + for _, node := range n.Nodes { + if !IsEmptyTree(node) { + return false + } + } + return true + case *RangeNode: + case *TemplateNode: + case *TextNode: + return len(bytes.TrimSpace(n.Text)) == 0 + case *WithNode: + default: + panic("unknown node: " + n.String()) + } + return false +} + +// parse is the top-level parser for a template, essentially the same +// as itemList except it also parses {{define}} actions. +// It runs to EOF. +func (t *Tree) parse(treeSet map[string]*Tree) (next Node) { + t.Root = t.newList(t.peek().pos) + for t.peek().typ != itemEOF { + if t.peek().typ == itemLeftDelim { + delim := t.next() + if t.nextNonSpace().typ == itemDefine { + newT := New("definition") // name will be updated once we know it. + newT.text = t.text + newT.ParseName = t.ParseName + newT.startParse(t.funcs, t.lex) + newT.parseDefinition(treeSet) + continue + } + t.backup2(delim) + } + n := t.textOrAction() + if n.Type() == nodeEnd { + t.errorf("unexpected %s", n) + } + t.Root.append(n) + } + return nil +} + +// parseDefinition parses a {{define}} ... {{end}} template definition and +// installs the definition in the treeSet map. The "define" keyword has already +// been scanned. +func (t *Tree) parseDefinition(treeSet map[string]*Tree) { + const context = "define clause" + name := t.expectOneOf(itemString, itemRawString, context) + var err error + t.Name, err = strconv.Unquote(name.val) + if err != nil { + t.error(err) + } + t.expect(itemRightDelim, context) + var end Node + t.Root, end = t.itemList() + if end.Type() != nodeEnd { + t.errorf("unexpected %s in %s", end, context) + } + t.add(treeSet) + t.stopParse() +} + +// itemList: +// textOrAction* +// Terminates at {{end}} or {{else}}, returned separately. +func (t *Tree) itemList() (list *ListNode, next Node) { + list = t.newList(t.peekNonSpace().pos) + for t.peekNonSpace().typ != itemEOF { + n := t.textOrAction() + switch n.Type() { + case nodeEnd, nodeElse: + return list, n + } + list.append(n) + } + t.errorf("unexpected EOF") + return +} + +// textOrAction: +// text | action +func (t *Tree) textOrAction() Node { + switch token := t.nextNonSpace(); token.typ { + case itemElideNewline: + return t.elideNewline() + case itemText: + return t.newText(token.pos, token.val) + case itemLeftDelim: + return t.action() + default: + t.unexpected(token, "input") + } + return nil +} + +// elideNewline: +// Remove newlines trailing rightDelim if \\ is present. +func (t *Tree) elideNewline() Node { + token := t.peek() + if token.typ != itemText { + t.unexpected(token, "input") + return nil + } + + t.next() + stripped := strings.TrimLeft(token.val, "\n\r") + diff := len(token.val) - len(stripped) + if diff > 0 { + // This is a bit nasty. We mutate the token in-place to remove + // preceding newlines. + token.pos += Pos(diff) + token.val = stripped + } + return t.newText(token.pos, token.val) +} + +// Action: +// control +// command ("|" command)* +// Left delim is past. Now get actions. +// First word could be a keyword such as range. +func (t *Tree) action() (n Node) { + switch token := t.nextNonSpace(); token.typ { + case itemElse: + return t.elseControl() + case itemEnd: + return t.endControl() + case itemIf: + return t.ifControl() + case itemRange: + return t.rangeControl() + case itemTemplate: + return t.templateControl() + case itemWith: + return t.withControl() + } + t.backup() + // Do not pop variables; they persist until "end". + return t.newAction(t.peek().pos, t.lex.lineNumber(), t.pipeline("command")) +} + +// Pipeline: +// declarations? command ('|' command)* +func (t *Tree) pipeline(context string) (pipe *PipeNode) { + var decl []*VariableNode + pos := t.peekNonSpace().pos + // Are there declarations? + for { + if v := t.peekNonSpace(); v.typ == itemVariable { + t.next() + // Since space is a token, we need 3-token look-ahead here in the worst case: + // in "$x foo" we need to read "foo" (as opposed to ":=") to know that $x is an + // argument variable rather than a declaration. So remember the token + // adjacent to the variable so we can push it back if necessary. + tokenAfterVariable := t.peek() + if next := t.peekNonSpace(); next.typ == itemColonEquals || (next.typ == itemChar && next.val == ",") { + t.nextNonSpace() + variable := t.newVariable(v.pos, v.val) + decl = append(decl, variable) + t.vars = append(t.vars, v.val) + if next.typ == itemChar && next.val == "," { + if context == "range" && len(decl) < 2 { + continue + } + t.errorf("too many declarations in %s", context) + } + } else if tokenAfterVariable.typ == itemSpace { + t.backup3(v, tokenAfterVariable) + } else { + t.backup2(v) + } + } + break + } + pipe = t.newPipeline(pos, t.lex.lineNumber(), decl) + for { + switch token := t.nextNonSpace(); token.typ { + case itemRightDelim, itemRightParen: + if len(pipe.Cmds) == 0 { + t.errorf("missing value for %s", context) + } + if token.typ == itemRightParen { + t.backup() + } + return + case itemBool, itemCharConstant, itemComplex, itemDot, itemField, itemIdentifier, + itemNumber, itemNil, itemRawString, itemString, itemVariable, itemLeftParen: + t.backup() + pipe.append(t.command()) + default: + t.unexpected(token, context) + } + } +} + +func (t *Tree) parseControl(allowElseIf bool, context string) (pos Pos, line int, pipe *PipeNode, list, elseList *ListNode) { + defer t.popVars(len(t.vars)) + line = t.lex.lineNumber() + pipe = t.pipeline(context) + var next Node + list, next = t.itemList() + switch next.Type() { + case nodeEnd: //done + case nodeElse: + if allowElseIf { + // Special case for "else if". If the "else" is followed immediately by an "if", + // the elseControl will have left the "if" token pending. Treat + // {{if a}}_{{else if b}}_{{end}} + // as + // {{if a}}_{{else}}{{if b}}_{{end}}{{end}}. + // To do this, parse the if as usual and stop at it {{end}}; the subsequent{{end}} + // is assumed. This technique works even for long if-else-if chains. + // TODO: Should we allow else-if in with and range? + if t.peek().typ == itemIf { + t.next() // Consume the "if" token. + elseList = t.newList(next.Position()) + elseList.append(t.ifControl()) + // Do not consume the next item - only one {{end}} required. + break + } + } + elseList, next = t.itemList() + if next.Type() != nodeEnd { + t.errorf("expected end; found %s", next) + } + } + return pipe.Position(), line, pipe, list, elseList +} + +// If: +// {{if pipeline}} itemList {{end}} +// {{if pipeline}} itemList {{else}} itemList {{end}} +// If keyword is past. +func (t *Tree) ifControl() Node { + return t.newIf(t.parseControl(true, "if")) +} + +// Range: +// {{range pipeline}} itemList {{end}} +// {{range pipeline}} itemList {{else}} itemList {{end}} +// Range keyword is past. +func (t *Tree) rangeControl() Node { + return t.newRange(t.parseControl(false, "range")) +} + +// With: +// {{with pipeline}} itemList {{end}} +// {{with pipeline}} itemList {{else}} itemList {{end}} +// If keyword is past. +func (t *Tree) withControl() Node { + return t.newWith(t.parseControl(false, "with")) +} + +// End: +// {{end}} +// End keyword is past. +func (t *Tree) endControl() Node { + return t.newEnd(t.expect(itemRightDelim, "end").pos) +} + +// Else: +// {{else}} +// Else keyword is past. +func (t *Tree) elseControl() Node { + // Special case for "else if". + peek := t.peekNonSpace() + if peek.typ == itemIf { + // We see "{{else if ... " but in effect rewrite it to {{else}}{{if ... ". + return t.newElse(peek.pos, t.lex.lineNumber()) + } + return t.newElse(t.expect(itemRightDelim, "else").pos, t.lex.lineNumber()) +} + +// Template: +// {{template stringValue pipeline}} +// Template keyword is past. The name must be something that can evaluate +// to a string. +func (t *Tree) templateControl() Node { + var name string + token := t.nextNonSpace() + switch token.typ { + case itemString, itemRawString: + s, err := strconv.Unquote(token.val) + if err != nil { + t.error(err) + } + name = s + default: + t.unexpected(token, "template invocation") + } + var pipe *PipeNode + if t.nextNonSpace().typ != itemRightDelim { + t.backup() + // Do not pop variables; they persist until "end". + pipe = t.pipeline("template") + } + return t.newTemplate(token.pos, t.lex.lineNumber(), name, pipe) +} + +// command: +// operand (space operand)* +// space-separated arguments up to a pipeline character or right delimiter. +// we consume the pipe character but leave the right delim to terminate the action. +func (t *Tree) command() *CommandNode { + cmd := t.newCommand(t.peekNonSpace().pos) + for { + t.peekNonSpace() // skip leading spaces. + operand := t.operand() + if operand != nil { + cmd.append(operand) + } + switch token := t.next(); token.typ { + case itemSpace: + continue + case itemError: + t.errorf("%s", token.val) + case itemRightDelim, itemRightParen: + t.backup() + case itemPipe: + default: + t.errorf("unexpected %s in operand; missing space?", token) + } + break + } + if len(cmd.Args) == 0 { + t.errorf("empty command") + } + return cmd +} + +// operand: +// term .Field* +// An operand is a space-separated component of a command, +// a term possibly followed by field accesses. +// A nil return means the next item is not an operand. +func (t *Tree) operand() Node { + node := t.term() + if node == nil { + return nil + } + if t.peek().typ == itemField { + chain := t.newChain(t.peek().pos, node) + for t.peek().typ == itemField { + chain.Add(t.next().val) + } + // Compatibility with original API: If the term is of type NodeField + // or NodeVariable, just put more fields on the original. + // Otherwise, keep the Chain node. + // TODO: Switch to Chains always when we can. + switch node.Type() { + case NodeField: + node = t.newField(chain.Position(), chain.String()) + case NodeVariable: + node = t.newVariable(chain.Position(), chain.String()) + default: + node = chain + } + } + return node +} + +// term: +// literal (number, string, nil, boolean) +// function (identifier) +// . +// .Field +// $ +// '(' pipeline ')' +// A term is a simple "expression". +// A nil return means the next item is not a term. +func (t *Tree) term() Node { + switch token := t.nextNonSpace(); token.typ { + case itemError: + t.errorf("%s", token.val) + case itemIdentifier: + if !t.hasFunction(token.val) { + t.errorf("function %q not defined", token.val) + } + return NewIdentifier(token.val).SetTree(t).SetPos(token.pos) + case itemDot: + return t.newDot(token.pos) + case itemNil: + return t.newNil(token.pos) + case itemVariable: + return t.useVar(token.pos, token.val) + case itemField: + return t.newField(token.pos, token.val) + case itemBool: + return t.newBool(token.pos, token.val == "true") + case itemCharConstant, itemComplex, itemNumber: + number, err := t.newNumber(token.pos, token.val, token.typ) + if err != nil { + t.error(err) + } + return number + case itemLeftParen: + pipe := t.pipeline("parenthesized pipeline") + if token := t.next(); token.typ != itemRightParen { + t.errorf("unclosed right paren: unexpected %s", token) + } + return pipe + case itemString, itemRawString: + s, err := strconv.Unquote(token.val) + if err != nil { + t.error(err) + } + return t.newString(token.pos, token.val, s) + } + t.backup() + return nil +} + +// hasFunction reports if a function name exists in the Tree's maps. +func (t *Tree) hasFunction(name string) bool { + for _, funcMap := range t.funcs { + if funcMap == nil { + continue + } + if funcMap[name] != nil { + return true + } + } + return false +} + +// popVars trims the variable list to the specified length +func (t *Tree) popVars(n int) { + t.vars = t.vars[:n] +} + +// useVar returns a node for a variable reference. It errors if the +// variable is not defined. +func (t *Tree) useVar(pos Pos, name string) Node { + v := t.newVariable(pos, name) + for _, varName := range t.vars { + if varName == v.Ident[0] { + return v + } + } + t.errorf("undefined variable %q", v.Ident[0]) + return nil +} diff --git a/vendor/github.com/alecthomas/template/parse/parse_test.go b/vendor/github.com/alecthomas/template/parse/parse_test.go new file mode 100644 index 0000000..c73640f --- /dev/null +++ b/vendor/github.com/alecthomas/template/parse/parse_test.go @@ -0,0 +1,426 @@ +// Copyright 2011 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. + +package parse + +import ( + "flag" + "fmt" + "strings" + "testing" +) + +var debug = flag.Bool("debug", false, "show the errors produced by the main tests") + +type numberTest struct { + text string + isInt bool + isUint bool + isFloat bool + isComplex bool + int64 + uint64 + float64 + complex128 +} + +var numberTests = []numberTest{ + // basics + {"0", true, true, true, false, 0, 0, 0, 0}, + {"-0", true, true, true, false, 0, 0, 0, 0}, // check that -0 is a uint. + {"73", true, true, true, false, 73, 73, 73, 0}, + {"073", true, true, true, false, 073, 073, 073, 0}, + {"0x73", true, true, true, false, 0x73, 0x73, 0x73, 0}, + {"-73", true, false, true, false, -73, 0, -73, 0}, + {"+73", true, false, true, false, 73, 0, 73, 0}, + {"100", true, true, true, false, 100, 100, 100, 0}, + {"1e9", true, true, true, false, 1e9, 1e9, 1e9, 0}, + {"-1e9", true, false, true, false, -1e9, 0, -1e9, 0}, + {"-1.2", false, false, true, false, 0, 0, -1.2, 0}, + {"1e19", false, true, true, false, 0, 1e19, 1e19, 0}, + {"-1e19", false, false, true, false, 0, 0, -1e19, 0}, + {"4i", false, false, false, true, 0, 0, 0, 4i}, + {"-1.2+4.2i", false, false, false, true, 0, 0, 0, -1.2 + 4.2i}, + {"073i", false, false, false, true, 0, 0, 0, 73i}, // not octal! + // complex with 0 imaginary are float (and maybe integer) + {"0i", true, true, true, true, 0, 0, 0, 0}, + {"-1.2+0i", false, false, true, true, 0, 0, -1.2, -1.2}, + {"-12+0i", true, false, true, true, -12, 0, -12, -12}, + {"13+0i", true, true, true, true, 13, 13, 13, 13}, + // funny bases + {"0123", true, true, true, false, 0123, 0123, 0123, 0}, + {"-0x0", true, true, true, false, 0, 0, 0, 0}, + {"0xdeadbeef", true, true, true, false, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0}, + // character constants + {`'a'`, true, true, true, false, 'a', 'a', 'a', 0}, + {`'\n'`, true, true, true, false, '\n', '\n', '\n', 0}, + {`'\\'`, true, true, true, false, '\\', '\\', '\\', 0}, + {`'\''`, true, true, true, false, '\'', '\'', '\'', 0}, + {`'\xFF'`, true, true, true, false, 0xFF, 0xFF, 0xFF, 0}, + {`'パ'`, true, true, true, false, 0x30d1, 0x30d1, 0x30d1, 0}, + {`'\u30d1'`, true, true, true, false, 0x30d1, 0x30d1, 0x30d1, 0}, + {`'\U000030d1'`, true, true, true, false, 0x30d1, 0x30d1, 0x30d1, 0}, + // some broken syntax + {text: "+-2"}, + {text: "0x123."}, + {text: "1e."}, + {text: "0xi."}, + {text: "1+2."}, + {text: "'x"}, + {text: "'xx'"}, + // Issue 8622 - 0xe parsed as floating point. Very embarrassing. + {"0xef", true, true, true, false, 0xef, 0xef, 0xef, 0}, +} + +func TestNumberParse(t *testing.T) { + for _, test := range numberTests { + // If fmt.Sscan thinks it's complex, it's complex. We can't trust the output + // because imaginary comes out as a number. + var c complex128 + typ := itemNumber + var tree *Tree + if test.text[0] == '\'' { + typ = itemCharConstant + } else { + _, err := fmt.Sscan(test.text, &c) + if err == nil { + typ = itemComplex + } + } + n, err := tree.newNumber(0, test.text, typ) + ok := test.isInt || test.isUint || test.isFloat || test.isComplex + if ok && err != nil { + t.Errorf("unexpected error for %q: %s", test.text, err) + continue + } + if !ok && err == nil { + t.Errorf("expected error for %q", test.text) + continue + } + if !ok { + if *debug { + fmt.Printf("%s\n\t%s\n", test.text, err) + } + continue + } + if n.IsComplex != test.isComplex { + t.Errorf("complex incorrect for %q; should be %t", test.text, test.isComplex) + } + if test.isInt { + if !n.IsInt { + t.Errorf("expected integer for %q", test.text) + } + if n.Int64 != test.int64 { + t.Errorf("int64 for %q should be %d Is %d", test.text, test.int64, n.Int64) + } + } else if n.IsInt { + t.Errorf("did not expect integer for %q", test.text) + } + if test.isUint { + if !n.IsUint { + t.Errorf("expected unsigned integer for %q", test.text) + } + if n.Uint64 != test.uint64 { + t.Errorf("uint64 for %q should be %d Is %d", test.text, test.uint64, n.Uint64) + } + } else if n.IsUint { + t.Errorf("did not expect unsigned integer for %q", test.text) + } + if test.isFloat { + if !n.IsFloat { + t.Errorf("expected float for %q", test.text) + } + if n.Float64 != test.float64 { + t.Errorf("float64 for %q should be %g Is %g", test.text, test.float64, n.Float64) + } + } else if n.IsFloat { + t.Errorf("did not expect float for %q", test.text) + } + if test.isComplex { + if !n.IsComplex { + t.Errorf("expected complex for %q", test.text) + } + if n.Complex128 != test.complex128 { + t.Errorf("complex128 for %q should be %g Is %g", test.text, test.complex128, n.Complex128) + } + } else if n.IsComplex { + t.Errorf("did not expect complex for %q", test.text) + } + } +} + +type parseTest struct { + name string + input string + ok bool + result string // what the user would see in an error message. +} + +const ( + noError = true + hasError = false +) + +var parseTests = []parseTest{ + {"empty", "", noError, + ``}, + {"comment", "{{/*\n\n\n*/}}", noError, + ``}, + {"spaces", " \t\n", noError, + `" \t\n"`}, + {"text", "some text", noError, + `"some text"`}, + {"emptyAction", "{{}}", hasError, + `{{}}`}, + {"field", "{{.X}}", noError, + `{{.X}}`}, + {"simple command", "{{printf}}", noError, + `{{printf}}`}, + {"$ invocation", "{{$}}", noError, + "{{$}}"}, + {"variable invocation", "{{with $x := 3}}{{$x 23}}{{end}}", noError, + "{{with $x := 3}}{{$x 23}}{{end}}"}, + {"variable with fields", "{{$.I}}", noError, + "{{$.I}}"}, + {"multi-word command", "{{printf `%d` 23}}", noError, + "{{printf `%d` 23}}"}, + {"pipeline", "{{.X|.Y}}", noError, + `{{.X | .Y}}`}, + {"pipeline with decl", "{{$x := .X|.Y}}", noError, + `{{$x := .X | .Y}}`}, + {"nested pipeline", "{{.X (.Y .Z) (.A | .B .C) (.E)}}", noError, + `{{.X (.Y .Z) (.A | .B .C) (.E)}}`}, + {"field applied to parentheses", "{{(.Y .Z).Field}}", noError, + `{{(.Y .Z).Field}}`}, + {"simple if", "{{if .X}}hello{{end}}", noError, + `{{if .X}}"hello"{{end}}`}, + {"if with else", "{{if .X}}true{{else}}false{{end}}", noError, + `{{if .X}}"true"{{else}}"false"{{end}}`}, + {"if with else if", "{{if .X}}true{{else if .Y}}false{{end}}", noError, + `{{if .X}}"true"{{else}}{{if .Y}}"false"{{end}}{{end}}`}, + {"if else chain", "+{{if .X}}X{{else if .Y}}Y{{else if .Z}}Z{{end}}+", noError, + `"+"{{if .X}}"X"{{else}}{{if .Y}}"Y"{{else}}{{if .Z}}"Z"{{end}}{{end}}{{end}}"+"`}, + {"simple range", "{{range .X}}hello{{end}}", noError, + `{{range .X}}"hello"{{end}}`}, + {"chained field range", "{{range .X.Y.Z}}hello{{end}}", noError, + `{{range .X.Y.Z}}"hello"{{end}}`}, + {"nested range", "{{range .X}}hello{{range .Y}}goodbye{{end}}{{end}}", noError, + `{{range .X}}"hello"{{range .Y}}"goodbye"{{end}}{{end}}`}, + {"range with else", "{{range .X}}true{{else}}false{{end}}", noError, + `{{range .X}}"true"{{else}}"false"{{end}}`}, + {"range over pipeline", "{{range .X|.M}}true{{else}}false{{end}}", noError, + `{{range .X | .M}}"true"{{else}}"false"{{end}}`}, + {"range []int", "{{range .SI}}{{.}}{{end}}", noError, + `{{range .SI}}{{.}}{{end}}`}, + {"range 1 var", "{{range $x := .SI}}{{.}}{{end}}", noError, + `{{range $x := .SI}}{{.}}{{end}}`}, + {"range 2 vars", "{{range $x, $y := .SI}}{{.}}{{end}}", noError, + `{{range $x, $y := .SI}}{{.}}{{end}}`}, + {"constants", "{{range .SI 1 -3.2i true false 'a' nil}}{{end}}", noError, + `{{range .SI 1 -3.2i true false 'a' nil}}{{end}}`}, + {"template", "{{template `x`}}", noError, + `{{template "x"}}`}, + {"template with arg", "{{template `x` .Y}}", noError, + `{{template "x" .Y}}`}, + {"with", "{{with .X}}hello{{end}}", noError, + `{{with .X}}"hello"{{end}}`}, + {"with with else", "{{with .X}}hello{{else}}goodbye{{end}}", noError, + `{{with .X}}"hello"{{else}}"goodbye"{{end}}`}, + {"elide newline", "{{true}}\\\n ", noError, + `{{true}}" "`}, + // Errors. + {"unclosed action", "hello{{range", hasError, ""}, + {"unmatched end", "{{end}}", hasError, ""}, + {"missing end", "hello{{range .x}}", hasError, ""}, + {"missing end after else", "hello{{range .x}}{{else}}", hasError, ""}, + {"undefined function", "hello{{undefined}}", hasError, ""}, + {"undefined variable", "{{$x}}", hasError, ""}, + {"variable undefined after end", "{{with $x := 4}}{{end}}{{$x}}", hasError, ""}, + {"variable undefined in template", "{{template $v}}", hasError, ""}, + {"declare with field", "{{with $x.Y := 4}}{{end}}", hasError, ""}, + {"template with field ref", "{{template .X}}", hasError, ""}, + {"template with var", "{{template $v}}", hasError, ""}, + {"invalid punctuation", "{{printf 3, 4}}", hasError, ""}, + {"multidecl outside range", "{{with $v, $u := 3}}{{end}}", hasError, ""}, + {"too many decls in range", "{{range $u, $v, $w := 3}}{{end}}", hasError, ""}, + {"dot applied to parentheses", "{{printf (printf .).}}", hasError, ""}, + {"adjacent args", "{{printf 3`x`}}", hasError, ""}, + {"adjacent args with .", "{{printf `x`.}}", hasError, ""}, + {"extra end after if", "{{if .X}}a{{else if .Y}}b{{end}}{{end}}", hasError, ""}, + {"invalid newline elision", "{{true}}\\{{true}}", hasError, ""}, + // Equals (and other chars) do not assignments make (yet). + {"bug0a", "{{$x := 0}}{{$x}}", noError, "{{$x := 0}}{{$x}}"}, + {"bug0b", "{{$x = 1}}{{$x}}", hasError, ""}, + {"bug0c", "{{$x ! 2}}{{$x}}", hasError, ""}, + {"bug0d", "{{$x % 3}}{{$x}}", hasError, ""}, + // Check the parse fails for := rather than comma. + {"bug0e", "{{range $x := $y := 3}}{{end}}", hasError, ""}, + // Another bug: variable read must ignore following punctuation. + {"bug1a", "{{$x:=.}}{{$x!2}}", hasError, ""}, // ! is just illegal here. + {"bug1b", "{{$x:=.}}{{$x+2}}", hasError, ""}, // $x+2 should not parse as ($x) (+2). + {"bug1c", "{{$x:=.}}{{$x +2}}", noError, "{{$x := .}}{{$x +2}}"}, // It's OK with a space. +} + +var builtins = map[string]interface{}{ + "printf": fmt.Sprintf, +} + +func testParse(doCopy bool, t *testing.T) { + textFormat = "%q" + defer func() { textFormat = "%s" }() + for _, test := range parseTests { + tmpl, err := New(test.name).Parse(test.input, "", "", make(map[string]*Tree), builtins) + switch { + case err == nil && !test.ok: + t.Errorf("%q: expected error; got none", test.name) + continue + case err != nil && test.ok: + t.Errorf("%q: unexpected error: %v", test.name, err) + continue + case err != nil && !test.ok: + // expected error, got one + if *debug { + fmt.Printf("%s: %s\n\t%s\n", test.name, test.input, err) + } + continue + } + var result string + if doCopy { + result = tmpl.Root.Copy().String() + } else { + result = tmpl.Root.String() + } + if result != test.result { + t.Errorf("%s=(%q): got\n\t%v\nexpected\n\t%v", test.name, test.input, result, test.result) + } + } +} + +func TestParse(t *testing.T) { + testParse(false, t) +} + +// Same as TestParse, but we copy the node first +func TestParseCopy(t *testing.T) { + testParse(true, t) +} + +type isEmptyTest struct { + name string + input string + empty bool +} + +var isEmptyTests = []isEmptyTest{ + {"empty", ``, true}, + {"nonempty", `hello`, false}, + {"spaces only", " \t\n \t\n", true}, + {"definition", `{{define "x"}}something{{end}}`, true}, + {"definitions and space", "{{define `x`}}something{{end}}\n\n{{define `y`}}something{{end}}\n\n", true}, + {"definitions and text", "{{define `x`}}something{{end}}\nx\n{{define `y`}}something{{end}}\ny\n", false}, + {"definition and action", "{{define `x`}}something{{end}}{{if 3}}foo{{end}}", false}, +} + +func TestIsEmpty(t *testing.T) { + if !IsEmptyTree(nil) { + t.Errorf("nil tree is not empty") + } + for _, test := range isEmptyTests { + tree, err := New("root").Parse(test.input, "", "", make(map[string]*Tree), nil) + if err != nil { + t.Errorf("%q: unexpected error: %v", test.name, err) + continue + } + if empty := IsEmptyTree(tree.Root); empty != test.empty { + t.Errorf("%q: expected %t got %t", test.name, test.empty, empty) + } + } +} + +func TestErrorContextWithTreeCopy(t *testing.T) { + tree, err := New("root").Parse("{{if true}}{{end}}", "", "", make(map[string]*Tree), nil) + if err != nil { + t.Fatalf("unexpected tree parse failure: %v", err) + } + treeCopy := tree.Copy() + wantLocation, wantContext := tree.ErrorContext(tree.Root.Nodes[0]) + gotLocation, gotContext := treeCopy.ErrorContext(treeCopy.Root.Nodes[0]) + if wantLocation != gotLocation { + t.Errorf("wrong error location want %q got %q", wantLocation, gotLocation) + } + if wantContext != gotContext { + t.Errorf("wrong error location want %q got %q", wantContext, gotContext) + } +} + +// All failures, and the result is a string that must appear in the error message. +var errorTests = []parseTest{ + // Check line numbers are accurate. + {"unclosed1", + "line1\n{{", + hasError, `unclosed1:2: unexpected unclosed action in command`}, + {"unclosed2", + "line1\n{{define `x`}}line2\n{{", + hasError, `unclosed2:3: unexpected unclosed action in command`}, + // Specific errors. + {"function", + "{{foo}}", + hasError, `function "foo" not defined`}, + {"comment", + "{{/*}}", + hasError, `unclosed comment`}, + {"lparen", + "{{.X (1 2 3}}", + hasError, `unclosed left paren`}, + {"rparen", + "{{.X 1 2 3)}}", + hasError, `unexpected ")"`}, + {"space", + "{{`x`3}}", + hasError, `missing space?`}, + {"idchar", + "{{a#}}", + hasError, `'#'`}, + {"charconst", + "{{'a}}", + hasError, `unterminated character constant`}, + {"stringconst", + `{{"a}}`, + hasError, `unterminated quoted string`}, + {"rawstringconst", + "{{`a}}", + hasError, `unterminated raw quoted string`}, + {"number", + "{{0xi}}", + hasError, `number syntax`}, + {"multidefine", + "{{define `a`}}a{{end}}{{define `a`}}b{{end}}", + hasError, `multiple definition of template`}, + {"eof", + "{{range .X}}", + hasError, `unexpected EOF`}, + {"variable", + // Declare $x so it's defined, to avoid that error, and then check we don't parse a declaration. + "{{$x := 23}}{{with $x.y := 3}}{{$x 23}}{{end}}", + hasError, `unexpected ":="`}, + {"multidecl", + "{{$a,$b,$c := 23}}", + hasError, `too many declarations`}, + {"undefvar", + "{{$a}}", + hasError, `undefined variable`}, +} + +func TestErrors(t *testing.T) { + for _, test := range errorTests { + _, err := New(test.name).Parse(test.input, "", "", make(map[string]*Tree)) + if err == nil { + t.Errorf("%q: expected error", test.name) + continue + } + if !strings.Contains(err.Error(), test.result) { + t.Errorf("%q: error %q does not contain %q", test.name, err, test.result) + } + } +} diff --git a/vendor/github.com/alecthomas/template/template.go b/vendor/github.com/alecthomas/template/template.go new file mode 100644 index 0000000..447ed2a --- /dev/null +++ b/vendor/github.com/alecthomas/template/template.go @@ -0,0 +1,218 @@ +// Copyright 2011 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. + +package template + +import ( + "fmt" + "reflect" + + "github.com/alecthomas/template/parse" +) + +// common holds the information shared by related templates. +type common struct { + tmpl map[string]*Template + // We use two maps, one for parsing and one for execution. + // This separation makes the API cleaner since it doesn't + // expose reflection to the client. + parseFuncs FuncMap + execFuncs map[string]reflect.Value +} + +// Template is the representation of a parsed template. The *parse.Tree +// field is exported only for use by html/template and should be treated +// as unexported by all other clients. +type Template struct { + name string + *parse.Tree + *common + leftDelim string + rightDelim string +} + +// New allocates a new template with the given name. +func New(name string) *Template { + return &Template{ + name: name, + } +} + +// Name returns the name of the template. +func (t *Template) Name() string { + return t.name +} + +// New allocates a new template associated with the given one and with the same +// delimiters. The association, which is transitive, allows one template to +// invoke another with a {{template}} action. +func (t *Template) New(name string) *Template { + t.init() + return &Template{ + name: name, + common: t.common, + leftDelim: t.leftDelim, + rightDelim: t.rightDelim, + } +} + +func (t *Template) init() { + if t.common == nil { + t.common = new(common) + t.tmpl = make(map[string]*Template) + t.parseFuncs = make(FuncMap) + t.execFuncs = make(map[string]reflect.Value) + } +} + +// Clone returns a duplicate of the template, including all associated +// templates. The actual representation is not copied, but the name space of +// associated templates is, so further calls to Parse in the copy will add +// templates to the copy but not to the original. Clone can be used to prepare +// common templates and use them with variant definitions for other templates +// by adding the variants after the clone is made. +func (t *Template) Clone() (*Template, error) { + nt := t.copy(nil) + nt.init() + nt.tmpl[t.name] = nt + for k, v := range t.tmpl { + if k == t.name { // Already installed. + continue + } + // The associated templates share nt's common structure. + tmpl := v.copy(nt.common) + nt.tmpl[k] = tmpl + } + for k, v := range t.parseFuncs { + nt.parseFuncs[k] = v + } + for k, v := range t.execFuncs { + nt.execFuncs[k] = v + } + return nt, nil +} + +// copy returns a shallow copy of t, with common set to the argument. +func (t *Template) copy(c *common) *Template { + nt := New(t.name) + nt.Tree = t.Tree + nt.common = c + nt.leftDelim = t.leftDelim + nt.rightDelim = t.rightDelim + return nt +} + +// AddParseTree creates a new template with the name and parse tree +// and associates it with t. +func (t *Template) AddParseTree(name string, tree *parse.Tree) (*Template, error) { + if t.common != nil && t.tmpl[name] != nil { + return nil, fmt.Errorf("template: redefinition of template %q", name) + } + nt := t.New(name) + nt.Tree = tree + t.tmpl[name] = nt + return nt, nil +} + +// Templates returns a slice of the templates associated with t, including t +// itself. +func (t *Template) Templates() []*Template { + if t.common == nil { + return nil + } + // Return a slice so we don't expose the map. + m := make([]*Template, 0, len(t.tmpl)) + for _, v := range t.tmpl { + m = append(m, v) + } + return m +} + +// Delims sets the action delimiters to the specified strings, to be used in +// subsequent calls to Parse, ParseFiles, or ParseGlob. Nested template +// definitions will inherit the settings. An empty delimiter stands for the +// corresponding default: {{ or }}. +// The return value is the template, so calls can be chained. +func (t *Template) Delims(left, right string) *Template { + t.leftDelim = left + t.rightDelim = right + return t +} + +// Funcs adds the elements of the argument map to the template's function map. +// It panics if a value in the map is not a function with appropriate return +// type. However, it is legal to overwrite elements of the map. The return +// value is the template, so calls can be chained. +func (t *Template) Funcs(funcMap FuncMap) *Template { + t.init() + addValueFuncs(t.execFuncs, funcMap) + addFuncs(t.parseFuncs, funcMap) + return t +} + +// Lookup returns the template with the given name that is associated with t, +// or nil if there is no such template. +func (t *Template) Lookup(name string) *Template { + if t.common == nil { + return nil + } + return t.tmpl[name] +} + +// Parse parses a string into a template. Nested template definitions will be +// associated with the top-level template t. Parse may be called multiple times +// to parse definitions of templates to associate with t. It is an error if a +// resulting template is non-empty (contains content other than template +// definitions) and would replace a non-empty template with the same name. +// (In multiple calls to Parse with the same receiver template, only one call +// can contain text other than space, comments, and template definitions.) +func (t *Template) Parse(text string) (*Template, error) { + t.init() + trees, err := parse.Parse(t.name, text, t.leftDelim, t.rightDelim, t.parseFuncs, builtins) + if err != nil { + return nil, err + } + // Add the newly parsed trees, including the one for t, into our common structure. + for name, tree := range trees { + // If the name we parsed is the name of this template, overwrite this template. + // The associate method checks it's not a redefinition. + tmpl := t + if name != t.name { + tmpl = t.New(name) + } + // Even if t == tmpl, we need to install it in the common.tmpl map. + if replace, err := t.associate(tmpl, tree); err != nil { + return nil, err + } else if replace { + tmpl.Tree = tree + } + tmpl.leftDelim = t.leftDelim + tmpl.rightDelim = t.rightDelim + } + return t, nil +} + +// associate installs the new template into the group of templates associated +// with t. It is an error to reuse a name except to overwrite an empty +// template. The two are already known to share the common structure. +// The boolean return value reports wither to store this tree as t.Tree. +func (t *Template) associate(new *Template, tree *parse.Tree) (bool, error) { + if new.common != t.common { + panic("internal error: associate not common") + } + name := new.name + if old := t.tmpl[name]; old != nil { + oldIsEmpty := parse.IsEmptyTree(old.Root) + newIsEmpty := parse.IsEmptyTree(tree.Root) + if newIsEmpty { + // Whether old is empty or not, new is empty; no reason to replace old. + return false, nil + } + if !oldIsEmpty { + return false, fmt.Errorf("template: redefinition of template %q", name) + } + } + t.tmpl[name] = new + return true, nil +} diff --git a/vendor/github.com/alecthomas/template/testdata/file1.tmpl b/vendor/github.com/alecthomas/template/testdata/file1.tmpl new file mode 100644 index 0000000..febf9d9 --- /dev/null +++ b/vendor/github.com/alecthomas/template/testdata/file1.tmpl @@ -0,0 +1,2 @@ +{{define "x"}}TEXT{{end}} +{{define "dotV"}}{{.V}}{{end}} diff --git a/vendor/github.com/alecthomas/template/testdata/file2.tmpl b/vendor/github.com/alecthomas/template/testdata/file2.tmpl new file mode 100644 index 0000000..39bf6fb --- /dev/null +++ b/vendor/github.com/alecthomas/template/testdata/file2.tmpl @@ -0,0 +1,2 @@ +{{define "dot"}}{{.}}{{end}} +{{define "nested"}}{{template "dot" .}}{{end}} diff --git a/vendor/github.com/alecthomas/template/testdata/tmpl1.tmpl b/vendor/github.com/alecthomas/template/testdata/tmpl1.tmpl new file mode 100644 index 0000000..b72b3a3 --- /dev/null +++ b/vendor/github.com/alecthomas/template/testdata/tmpl1.tmpl @@ -0,0 +1,3 @@ +template1 +{{define "x"}}x{{end}} +{{template "y"}} diff --git a/vendor/github.com/alecthomas/template/testdata/tmpl2.tmpl b/vendor/github.com/alecthomas/template/testdata/tmpl2.tmpl new file mode 100644 index 0000000..16beba6 --- /dev/null +++ b/vendor/github.com/alecthomas/template/testdata/tmpl2.tmpl @@ -0,0 +1,3 @@ +template2 +{{define "y"}}y{{end}} +{{template "x"}} diff --git a/vendor/github.com/alecthomas/units/COPYING b/vendor/github.com/alecthomas/units/COPYING new file mode 100644 index 0000000..2993ec0 --- /dev/null +++ b/vendor/github.com/alecthomas/units/COPYING @@ -0,0 +1,19 @@ +Copyright (C) 2014 Alec Thomas + +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/alecthomas/units/README.md b/vendor/github.com/alecthomas/units/README.md new file mode 100644 index 0000000..bee884e --- /dev/null +++ b/vendor/github.com/alecthomas/units/README.md @@ -0,0 +1,11 @@ +# Units - Helpful unit multipliers and functions for Go + +The goal of this package is to have functionality similar to the [time](http://golang.org/pkg/time/) package. + +It allows for code like this: + +```go +n, err := ParseBase2Bytes("1KB") +// n == 1024 +n = units.Mebibyte * 512 +``` diff --git a/vendor/github.com/alecthomas/units/bytes.go b/vendor/github.com/alecthomas/units/bytes.go new file mode 100644 index 0000000..eaadeb8 --- /dev/null +++ b/vendor/github.com/alecthomas/units/bytes.go @@ -0,0 +1,83 @@ +package units + +// Base2Bytes is the old non-SI power-of-2 byte scale (1024 bytes in a kilobyte, +// etc.). +type Base2Bytes int64 + +// Base-2 byte units. +const ( + Kibibyte Base2Bytes = 1024 + KiB = Kibibyte + Mebibyte = Kibibyte * 1024 + MiB = Mebibyte + Gibibyte = Mebibyte * 1024 + GiB = Gibibyte + Tebibyte = Gibibyte * 1024 + TiB = Tebibyte + Pebibyte = Tebibyte * 1024 + PiB = Pebibyte + Exbibyte = Pebibyte * 1024 + EiB = Exbibyte +) + +var ( + bytesUnitMap = MakeUnitMap("iB", "B", 1024) + oldBytesUnitMap = MakeUnitMap("B", "B", 1024) +) + +// ParseBase2Bytes supports both iB and B in base-2 multipliers. That is, KB +// and KiB are both 1024. +func ParseBase2Bytes(s string) (Base2Bytes, error) { + n, err := ParseUnit(s, bytesUnitMap) + if err != nil { + n, err = ParseUnit(s, oldBytesUnitMap) + } + return Base2Bytes(n), err +} + +func (b Base2Bytes) String() string { + return ToString(int64(b), 1024, "iB", "B") +} + +var ( + metricBytesUnitMap = MakeUnitMap("B", "B", 1000) +) + +// MetricBytes are SI byte units (1000 bytes in a kilobyte). +type MetricBytes SI + +// SI base-10 byte units. +const ( + Kilobyte MetricBytes = 1000 + KB = Kilobyte + Megabyte = Kilobyte * 1000 + MB = Megabyte + Gigabyte = Megabyte * 1000 + GB = Gigabyte + Terabyte = Gigabyte * 1000 + TB = Terabyte + Petabyte = Terabyte * 1000 + PB = Petabyte + Exabyte = Petabyte * 1000 + EB = Exabyte +) + +// ParseMetricBytes parses base-10 metric byte units. That is, KB is 1000 bytes. +func ParseMetricBytes(s string) (MetricBytes, error) { + n, err := ParseUnit(s, metricBytesUnitMap) + return MetricBytes(n), err +} + +func (m MetricBytes) String() string { + return ToString(int64(m), 1000, "B", "B") +} + +// ParseStrictBytes supports both iB and B suffixes for base 2 and metric, +// respectively. That is, KiB represents 1024 and KB represents 1000. +func ParseStrictBytes(s string) (int64, error) { + n, err := ParseUnit(s, bytesUnitMap) + if err != nil { + n, err = ParseUnit(s, metricBytesUnitMap) + } + return int64(n), err +} diff --git a/vendor/github.com/alecthomas/units/bytes_test.go b/vendor/github.com/alecthomas/units/bytes_test.go new file mode 100644 index 0000000..6cbc79d --- /dev/null +++ b/vendor/github.com/alecthomas/units/bytes_test.go @@ -0,0 +1,49 @@ +package units + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestBase2BytesString(t *testing.T) { + assert.Equal(t, Base2Bytes(0).String(), "0B") + assert.Equal(t, Base2Bytes(1025).String(), "1KiB1B") + assert.Equal(t, Base2Bytes(1048577).String(), "1MiB1B") +} + +func TestParseBase2Bytes(t *testing.T) { + n, err := ParseBase2Bytes("0B") + assert.NoError(t, err) + assert.Equal(t, 0, int(n)) + n, err = ParseBase2Bytes("1KB") + assert.NoError(t, err) + assert.Equal(t, 1024, int(n)) + n, err = ParseBase2Bytes("1MB1KB25B") + assert.NoError(t, err) + assert.Equal(t, 1049625, int(n)) + n, err = ParseBase2Bytes("1.5MB") + assert.NoError(t, err) + assert.Equal(t, 1572864, int(n)) +} + +func TestMetricBytesString(t *testing.T) { + assert.Equal(t, MetricBytes(0).String(), "0B") + assert.Equal(t, MetricBytes(1001).String(), "1KB1B") + assert.Equal(t, MetricBytes(1001025).String(), "1MB1KB25B") +} + +func TestParseMetricBytes(t *testing.T) { + n, err := ParseMetricBytes("0B") + assert.NoError(t, err) + assert.Equal(t, 0, int(n)) + n, err = ParseMetricBytes("1KB1B") + assert.NoError(t, err) + assert.Equal(t, 1001, int(n)) + n, err = ParseMetricBytes("1MB1KB25B") + assert.NoError(t, err) + assert.Equal(t, 1001025, int(n)) + n, err = ParseMetricBytes("1.5MB") + assert.NoError(t, err) + assert.Equal(t, 1500000, int(n)) +} diff --git a/vendor/github.com/alecthomas/units/doc.go b/vendor/github.com/alecthomas/units/doc.go new file mode 100644 index 0000000..156ae38 --- /dev/null +++ b/vendor/github.com/alecthomas/units/doc.go @@ -0,0 +1,13 @@ +// Package units provides helpful unit multipliers and functions for Go. +// +// The goal of this package is to have functionality similar to the time [1] package. +// +// +// [1] http://golang.org/pkg/time/ +// +// It allows for code like this: +// +// n, err := ParseBase2Bytes("1KB") +// // n == 1024 +// n = units.Mebibyte * 512 +package units diff --git a/vendor/github.com/alecthomas/units/si.go b/vendor/github.com/alecthomas/units/si.go new file mode 100644 index 0000000..8234a9d --- /dev/null +++ b/vendor/github.com/alecthomas/units/si.go @@ -0,0 +1,26 @@ +package units + +// SI units. +type SI int64 + +// SI unit multiples. +const ( + Kilo SI = 1000 + Mega = Kilo * 1000 + Giga = Mega * 1000 + Tera = Giga * 1000 + Peta = Tera * 1000 + Exa = Peta * 1000 +) + +func MakeUnitMap(suffix, shortSuffix string, scale int64) map[string]float64 { + return map[string]float64{ + shortSuffix: 1, + "K" + suffix: float64(scale), + "M" + suffix: float64(scale * scale), + "G" + suffix: float64(scale * scale * scale), + "T" + suffix: float64(scale * scale * scale * scale), + "P" + suffix: float64(scale * scale * scale * scale * scale), + "E" + suffix: float64(scale * scale * scale * scale * scale * scale), + } +} diff --git a/vendor/github.com/alecthomas/units/util.go b/vendor/github.com/alecthomas/units/util.go new file mode 100644 index 0000000..6527e92 --- /dev/null +++ b/vendor/github.com/alecthomas/units/util.go @@ -0,0 +1,138 @@ +package units + +import ( + "errors" + "fmt" + "strings" +) + +var ( + siUnits = []string{"", "K", "M", "G", "T", "P", "E"} +) + +func ToString(n int64, scale int64, suffix, baseSuffix string) string { + mn := len(siUnits) + out := make([]string, mn) + for i, m := range siUnits { + if n%scale != 0 || i == 0 && n == 0 { + s := suffix + if i == 0 { + s = baseSuffix + } + out[mn-1-i] = fmt.Sprintf("%d%s%s", n%scale, m, s) + } + n /= scale + if n == 0 { + break + } + } + return strings.Join(out, "") +} + +// Below code ripped straight from http://golang.org/src/pkg/time/format.go?s=33392:33438#L1123 +var errLeadingInt = errors.New("units: bad [0-9]*") // never printed + +// leadingInt consumes the leading [0-9]* from s. +func leadingInt(s string) (x int64, rem string, err error) { + i := 0 + for ; i < len(s); i++ { + c := s[i] + if c < '0' || c > '9' { + break + } + if x >= (1<<63-10)/10 { + // overflow + return 0, "", errLeadingInt + } + x = x*10 + int64(c) - '0' + } + return x, s[i:], nil +} + +func ParseUnit(s string, unitMap map[string]float64) (int64, error) { + // [-+]?([0-9]*(\.[0-9]*)?[a-z]+)+ + orig := s + f := float64(0) + neg := false + + // Consume [-+]? + if s != "" { + c := s[0] + if c == '-' || c == '+' { + neg = c == '-' + s = s[1:] + } + } + // Special case: if all that is left is "0", this is zero. + if s == "0" { + return 0, nil + } + if s == "" { + return 0, errors.New("units: invalid " + orig) + } + for s != "" { + g := float64(0) // this element of the sequence + + var x int64 + var err error + + // The next character must be [0-9.] + if !(s[0] == '.' || ('0' <= s[0] && s[0] <= '9')) { + return 0, errors.New("units: invalid " + orig) + } + // Consume [0-9]* + pl := len(s) + x, s, err = leadingInt(s) + if err != nil { + return 0, errors.New("units: invalid " + orig) + } + g = float64(x) + pre := pl != len(s) // whether we consumed anything before a period + + // Consume (\.[0-9]*)? + post := false + if s != "" && s[0] == '.' { + s = s[1:] + pl := len(s) + x, s, err = leadingInt(s) + if err != nil { + return 0, errors.New("units: invalid " + orig) + } + scale := 1.0 + for n := pl - len(s); n > 0; n-- { + scale *= 10 + } + g += float64(x) / scale + post = pl != len(s) + } + if !pre && !post { + // no digits (e.g. ".s" or "-.s") + return 0, errors.New("units: invalid " + orig) + } + + // Consume unit. + i := 0 + for ; i < len(s); i++ { + c := s[i] + if c == '.' || ('0' <= c && c <= '9') { + break + } + } + u := s[:i] + s = s[i:] + unit, ok := unitMap[u] + if !ok { + return 0, errors.New("units: unknown unit " + u + " in " + orig) + } + + f += g * unit + } + + if neg { + f = -f + } + if f < float64(-1<<63) || f > float64(1<<63-1) { + return 0, errors.New("units: overflow parsing unit") + } + return int64(f), nil +} diff --git a/vendor/github.com/blevesearch/bleve/.travis.yml b/vendor/github.com/blevesearch/bleve/.travis.yml index e24506e..775fed3 100644 --- a/vendor/github.com/blevesearch/bleve/.travis.yml +++ b/vendor/github.com/blevesearch/bleve/.travis.yml @@ -3,7 +3,10 @@ sudo: false language: go go: - - 1.6 + - 1.7.x + - 1.8.x + - 1.9.x + - "1.10" script: - go get golang.org/x/tools/cmd/cover diff --git a/vendor/github.com/blevesearch/bleve/README.md b/vendor/github.com/blevesearch/bleve/README.md index fa11f90..7c1a7c7 100644 --- a/vendor/github.com/blevesearch/bleve/README.md +++ b/vendor/github.com/blevesearch/bleve/README.md @@ -1,6 +1,6 @@ # ![bleve](docs/bleve.png) bleve -[![Build Status](https://travis-ci.org/blevesearch/bleve.svg?branch=master)](https://travis-ci.org/blevesearch/bleve) [![Coverage Status](https://coveralls.io/repos/blevesearch/bleve/badge.png?branch=master)](https://coveralls.io/r/blevesearch/bleve?branch=master) [![GoDoc](https://godoc.org/github.com/blevesearch/bleve?status.svg)](https://godoc.org/github.com/blevesearch/bleve) +[![Build Status](https://travis-ci.org/blevesearch/bleve.svg?branch=master)](https://travis-ci.org/blevesearch/bleve) [![Coverage Status](https://coveralls.io/repos/github/blevesearch/bleve/badge.svg?branch=master)](https://coveralls.io/github/blevesearch/bleve?branch=master) [![GoDoc](https://godoc.org/github.com/blevesearch/bleve?status.svg)](https://godoc.org/github.com/blevesearch/bleve) [![Join the chat at https://gitter.im/blevesearch/bleve](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/blevesearch/bleve?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![codebeat](https://codebeat.co/badges/38a7cbc9-9cf5-41c0-a315-0746178230f4)](https://codebeat.co/projects/github-com-blevesearch-bleve) [![Go Report Card](https://goreportcard.com/badge/blevesearch/bleve)](https://goreportcard.com/report/blevesearch/bleve) diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/da/analyzer_da.go b/vendor/github.com/blevesearch/bleve/analysis/lang/da/analyzer_da.go new file mode 100644 index 0000000..dca1417 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/da/analyzer_da.go @@ -0,0 +1,56 @@ +// Copyright (c) 2018 Couchbase, 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 da + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/analysis/token/lowercase" + "github.com/blevesearch/bleve/analysis/tokenizer/unicode" + "github.com/blevesearch/bleve/registry" +) + +const AnalyzerName = "da" + +func AnalyzerConstructor(config map[string]interface{}, cache *registry.Cache) (*analysis.Analyzer, error) { + unicodeTokenizer, err := cache.TokenizerNamed(unicode.Name) + if err != nil { + return nil, err + } + toLowerFilter, err := cache.TokenFilterNamed(lowercase.Name) + if err != nil { + return nil, err + } + stopDaFilter, err := cache.TokenFilterNamed(StopName) + if err != nil { + return nil, err + } + stemmerDaFilter, err := cache.TokenFilterNamed(SnowballStemmerName) + if err != nil { + return nil, err + } + rv := analysis.Analyzer{ + Tokenizer: unicodeTokenizer, + TokenFilters: []analysis.TokenFilter{ + toLowerFilter, + stopDaFilter, + stemmerDaFilter, + }, + } + return &rv, nil +} + +func init() { + registry.RegisterAnalyzer(AnalyzerName, AnalyzerConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/da/analyzer_da_test.go b/vendor/github.com/blevesearch/bleve/analysis/lang/da/analyzer_da_test.go new file mode 100644 index 0000000..d6a1c51 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/da/analyzer_da_test.go @@ -0,0 +1,71 @@ +// Copyright (c) 2018 Couchbase, 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 da + +import ( + "reflect" + "testing" + + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" +) + +func TestDanishAnalyzer(t *testing.T) { + tests := []struct { + input []byte + output analysis.TokenStream + }{ + // stemming + { + input: []byte("undersøg"), + output: analysis.TokenStream{ + &analysis.Token{ + Term: []byte("undersøg"), + Position: 1, + Start: 0, + End: 9, + }, + }, + }, + { + input: []byte("undersøgelse"), + output: analysis.TokenStream{ + &analysis.Token{ + Term: []byte("undersøg"), + Position: 1, + Start: 0, + End: 13, + }, + }, + }, + // stop word + { + input: []byte("på"), + output: analysis.TokenStream{}, + }, + } + + cache := registry.NewCache() + analyzer, err := cache.AnalyzerNamed(AnalyzerName) + if err != nil { + t.Fatal(err) + } + for _, test := range tests { + actual := analyzer.Analyze(test.input) + if !reflect.DeepEqual(actual, test.output) { + t.Errorf("expected %v, got %v", test.output, actual) + } + } +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/da/stemmer_da.go b/vendor/github.com/blevesearch/bleve/analysis/lang/da/stemmer_da.go new file mode 100644 index 0000000..e40e623 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/da/stemmer_da.go @@ -0,0 +1,49 @@ +// Copyright (c) 2018 Couchbase, 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 da + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" + + "github.com/blevesearch/snowballstem" + "github.com/blevesearch/snowballstem/danish" +) + +const SnowballStemmerName = "stemmer_da_snowball" + +type DanishStemmerFilter struct { +} + +func NewDanishStemmerFilter() *DanishStemmerFilter { + return &DanishStemmerFilter{} +} + +func (s *DanishStemmerFilter) Filter(input analysis.TokenStream) analysis.TokenStream { + for _, token := range input { + env := snowballstem.NewEnv(string(token.Term)) + danish.Stem(env) + token.Term = []byte(env.Current()) + } + return input +} + +func DanishStemmerFilterConstructor(config map[string]interface{}, cache *registry.Cache) (analysis.TokenFilter, error) { + return NewDanishStemmerFilter(), nil +} + +func init() { + registry.RegisterTokenFilter(SnowballStemmerName, DanishStemmerFilterConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/da/stop_filter_da.go b/vendor/github.com/blevesearch/bleve/analysis/lang/da/stop_filter_da.go new file mode 100644 index 0000000..a146d0b --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/da/stop_filter_da.go @@ -0,0 +1,33 @@ +// Copyright (c) 2018 Couchbase, 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 da + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/analysis/token/stop" + "github.com/blevesearch/bleve/registry" +) + +func StopTokenFilterConstructor(config map[string]interface{}, cache *registry.Cache) (analysis.TokenFilter, error) { + tokenMap, err := cache.TokenMapNamed(StopName) + if err != nil { + return nil, err + } + return stop.NewStopTokensFilter(tokenMap), nil +} + +func init() { + registry.RegisterTokenFilter(StopName, StopTokenFilterConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/da/stop_words_da.go b/vendor/github.com/blevesearch/bleve/analysis/lang/da/stop_words_da.go new file mode 100644 index 0000000..63a407a --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/da/stop_words_da.go @@ -0,0 +1,134 @@ +package da + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" +) + +const StopName = "stop_da" + +// this content was obtained from: +// lucene-4.7.2/analysis/common/src/resources/org/apache/lucene/analysis/snowball/ +// ` was changed to ' to allow for literal string + +var DanishStopWords = []byte(` | From svn.tartarus.org/snowball/trunk/website/algorithms/danish/stop.txt + | This file is distributed under the BSD License. + | See http://snowball.tartarus.org/license.php + | Also see http://www.opensource.org/licenses/bsd-license.html + | - Encoding was converted to UTF-8. + | - This notice was added. + | + | NOTE: To use this file with StopFilterFactory, you must specify format="snowball" + + | A Danish stop word list. Comments begin with vertical bar. Each stop + | word is at the start of a line. + + | This is a ranked list (commonest to rarest) of stopwords derived from + | a large text sample. + + +og | and +i | in +jeg | I +det | that (dem. pronoun)/it (pers. pronoun) +at | that (in front of a sentence)/to (with infinitive) +en | a/an +den | it (pers. pronoun)/that (dem. pronoun) +til | to/at/for/until/against/by/of/into, more +er | present tense of "to be" +som | who, as +på | on/upon/in/on/at/to/after/of/with/for, on +de | they +med | with/by/in, along +han | he +af | of/by/from/off/for/in/with/on, off +for | at/for/to/from/by/of/ago, in front/before, because +ikke | not +der | who/which, there/those +var | past tense of "to be" +mig | me/myself +sig | oneself/himself/herself/itself/themselves +men | but +et | a/an/one, one (number), someone/somebody/one +har | present tense of "to have" +om | round/about/for/in/a, about/around/down, if +vi | we +min | my +havde | past tense of "to have" +ham | him +hun | she +nu | now +over | over/above/across/by/beyond/past/on/about, over/past +da | then, when/as/since +fra | from/off/since, off, since +du | you +ud | out +sin | his/her/its/one's +dem | them +os | us/ourselves +op | up +man | you/one +hans | his +hvor | where +eller | or +hvad | what +skal | must/shall etc. +selv | myself/youself/herself/ourselves etc., even +her | here +alle | all/everyone/everybody etc. +vil | will (verb) +blev | past tense of "to stay/to remain/to get/to become" +kunne | could +ind | in +når | when +være | present tense of "to be" +dog | however/yet/after all +noget | something +ville | would +jo | you know/you see (adv), yes +deres | their/theirs +efter | after/behind/according to/for/by/from, later/afterwards +ned | down +skulle | should +denne | this +end | than +dette | this +mit | my/mine +også | also +under | under/beneath/below/during, below/underneath +have | have +dig | you +anden | other +hende | her +mine | my +alt | everything +meget | much/very, plenty of +sit | his, her, its, one's +sine | his, her, its, one's +vor | our +mod | against +disse | these +hvis | if +din | your/yours +nogle | some +hos | by/at +blive | be/become +mange | many +ad | by/through +bliver | present tense of "to be/to become" +hendes | her/hers +været | be +thi | for (conj) +jer | you +sådan | such, like this/like that +`) + +func TokenMapConstructor(config map[string]interface{}, cache *registry.Cache) (analysis.TokenMap, error) { + rv := analysis.NewTokenMap() + err := rv.LoadBytes(DanishStopWords) + return rv, err +} + +func init() { + registry.RegisterTokenMap(StopName, TokenMapConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/fi/analyzer_fi.go b/vendor/github.com/blevesearch/bleve/analysis/lang/fi/analyzer_fi.go new file mode 100644 index 0000000..9482e6b --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/fi/analyzer_fi.go @@ -0,0 +1,57 @@ +// Copyright (c) 2018 Couchbase, 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 fi + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" + + "github.com/blevesearch/bleve/analysis/token/lowercase" + "github.com/blevesearch/bleve/analysis/tokenizer/unicode" +) + +const AnalyzerName = "fi" + +func AnalyzerConstructor(config map[string]interface{}, cache *registry.Cache) (*analysis.Analyzer, error) { + unicodeTokenizer, err := cache.TokenizerNamed(unicode.Name) + if err != nil { + return nil, err + } + toLowerFilter, err := cache.TokenFilterNamed(lowercase.Name) + if err != nil { + return nil, err + } + stopFiFilter, err := cache.TokenFilterNamed(StopName) + if err != nil { + return nil, err + } + stemmerFiFilter, err := cache.TokenFilterNamed(SnowballStemmerName) + if err != nil { + return nil, err + } + rv := analysis.Analyzer{ + Tokenizer: unicodeTokenizer, + TokenFilters: []analysis.TokenFilter{ + toLowerFilter, + stopFiFilter, + stemmerFiFilter, + }, + } + return &rv, nil +} + +func init() { + registry.RegisterAnalyzer(AnalyzerName, AnalyzerConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/fi/analyzer_fi_test.go b/vendor/github.com/blevesearch/bleve/analysis/lang/fi/analyzer_fi_test.go new file mode 100644 index 0000000..035e7fd --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/fi/analyzer_fi_test.go @@ -0,0 +1,70 @@ +// Copyright (c) 2018 Couchbase, 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 fi + +import ( + "reflect" + "testing" + + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" +) + +func TestFinishAnalyzer(t *testing.T) { + tests := []struct { + input []byte + output analysis.TokenStream + }{ + // stemming + { + input: []byte("edeltäjiinsä"), + output: analysis.TokenStream{ + &analysis.Token{ + Term: []byte("edeltäj"), + }, + }, + }, + { + input: []byte("edeltäjistään"), + output: analysis.TokenStream{ + &analysis.Token{ + Term: []byte("edeltäj"), + }, + }, + }, + // stop word + { + input: []byte("olla"), + output: analysis.TokenStream{}, + }, + } + + cache := registry.NewCache() + analyzer, err := cache.AnalyzerNamed(AnalyzerName) + if err != nil { + t.Fatal(err) + } + for _, test := range tests { + actual := analyzer.Analyze(test.input) + if len(actual) != len(test.output) { + t.Fatalf("expected length: %d, got %d", len(test.output), len(actual)) + } + for i, tok := range actual { + if !reflect.DeepEqual(tok.Term, test.output[i].Term) { + t.Errorf("expected term %s (% x) got %s (% x)", test.output[i].Term, test.output[i].Term, tok.Term, tok.Term) + } + } + } +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/fi/stemmer_fi.go b/vendor/github.com/blevesearch/bleve/analysis/lang/fi/stemmer_fi.go new file mode 100644 index 0000000..14a6a1c --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/fi/stemmer_fi.go @@ -0,0 +1,49 @@ +// Copyright (c) 2018 Couchbase, 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 fi + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" + + "github.com/blevesearch/snowballstem" + "github.com/blevesearch/snowballstem/finnish" +) + +const SnowballStemmerName = "stemmer_fi_snowball" + +type FinnishStemmerFilter struct { +} + +func NewFinnishStemmerFilter() *FinnishStemmerFilter { + return &FinnishStemmerFilter{} +} + +func (s *FinnishStemmerFilter) Filter(input analysis.TokenStream) analysis.TokenStream { + for _, token := range input { + env := snowballstem.NewEnv(string(token.Term)) + finnish.Stem(env) + token.Term = []byte(env.Current()) + } + return input +} + +func FinnishStemmerFilterConstructor(config map[string]interface{}, cache *registry.Cache) (analysis.TokenFilter, error) { + return NewFinnishStemmerFilter(), nil +} + +func init() { + registry.RegisterTokenFilter(SnowballStemmerName, FinnishStemmerFilterConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/fi/stop_filter_fi.go b/vendor/github.com/blevesearch/bleve/analysis/lang/fi/stop_filter_fi.go new file mode 100644 index 0000000..f3576a2 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/fi/stop_filter_fi.go @@ -0,0 +1,33 @@ +// Copyright (c) 2018 Couchbase, 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 fi + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/analysis/token/stop" + "github.com/blevesearch/bleve/registry" +) + +func StopTokenFilterConstructor(config map[string]interface{}, cache *registry.Cache) (analysis.TokenFilter, error) { + tokenMap, err := cache.TokenMapNamed(StopName) + if err != nil { + return nil, err + } + return stop.NewStopTokensFilter(tokenMap), nil +} + +func init() { + registry.RegisterTokenFilter(StopName, StopTokenFilterConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/fi/stop_words_fi.go b/vendor/github.com/blevesearch/bleve/analysis/lang/fi/stop_words_fi.go new file mode 100644 index 0000000..7cf0c9c --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/fi/stop_words_fi.go @@ -0,0 +1,121 @@ +package fi + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" +) + +const StopName = "stop_fi" + +// this content was obtained from: +// lucene-4.7.2/analysis/common/src/resources/org/apache/lucene/analysis/snowball/ +// ` was changed to ' to allow for literal string + +var FinnishStopWords = []byte(` | From svn.tartarus.org/snowball/trunk/website/algorithms/finnish/stop.txt + | This file is distributed under the BSD License. + | See http://snowball.tartarus.org/license.php + | Also see http://www.opensource.org/licenses/bsd-license.html + | - Encoding was converted to UTF-8. + | - This notice was added. + | + | NOTE: To use this file with StopFilterFactory, you must specify format="snowball" + +| forms of BE + +olla +olen +olet +on +olemme +olette +ovat +ole | negative form + +oli +olisi +olisit +olisin +olisimme +olisitte +olisivat +olit +olin +olimme +olitte +olivat +ollut +olleet + +en | negation +et +ei +emme +ette +eivät + +|Nom Gen Acc Part Iness Elat Illat Adess Ablat Allat Ess Trans +minä minun minut minua minussa minusta minuun minulla minulta minulle | I +sinä sinun sinut sinua sinussa sinusta sinuun sinulla sinulta sinulle | you +hän hänen hänet häntä hänessä hänestä häneen hänellä häneltä hänelle | he she +me meidän meidät meitä meissä meistä meihin meillä meiltä meille | we +te teidän teidät teitä teissä teistä teihin teillä teiltä teille | you +he heidän heidät heitä heissä heistä heihin heillä heiltä heille | they + +tämä tämän tätä tässä tästä tähän tallä tältä tälle tänä täksi | this +tuo tuon tuotä tuossa tuosta tuohon tuolla tuolta tuolle tuona tuoksi | that +se sen sitä siinä siitä siihen sillä siltä sille sinä siksi | it +nämä näiden näitä näissä näistä näihin näillä näiltä näille näinä näiksi | these +nuo noiden noita noissa noista noihin noilla noilta noille noina noiksi | those +ne niiden niitä niissä niistä niihin niillä niiltä niille niinä niiksi | they + +kuka kenen kenet ketä kenessä kenestä keneen kenellä keneltä kenelle kenenä keneksi| who +ketkä keiden ketkä keitä keissä keistä keihin keillä keiltä keille keinä keiksi | (pl) +mikä minkä minkä mitä missä mistä mihin millä miltä mille minä miksi | which what +mitkä | (pl) + +joka jonka jota jossa josta johon jolla jolta jolle jona joksi | who which +jotka joiden joita joissa joista joihin joilla joilta joille joina joiksi | (pl) + +| conjunctions + +että | that +ja | and +jos | if +koska | because +kuin | than +mutta | but +niin | so +sekä | and +sillä | for +tai | or +vaan | but +vai | or +vaikka | although + + +| prepositions + +kanssa | with +mukaan | according to +noin | about +poikki | across +yli | over, across + +| other + +kun | when +niin | so +nyt | now +itse | self + +`) + +func TokenMapConstructor(config map[string]interface{}, cache *registry.Cache) (analysis.TokenMap, error) { + rv := analysis.NewTokenMap() + err := rv.LoadBytes(FinnishStopWords) + return rv, err +} + +func init() { + registry.RegisterTokenMap(StopName, TokenMapConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/hu/analyzer_hu.go b/vendor/github.com/blevesearch/bleve/analysis/lang/hu/analyzer_hu.go new file mode 100644 index 0000000..6797a91 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/hu/analyzer_hu.go @@ -0,0 +1,57 @@ +// Copyright (c) 2018 Couchbase, 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 hu + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" + + "github.com/blevesearch/bleve/analysis/token/lowercase" + "github.com/blevesearch/bleve/analysis/tokenizer/unicode" +) + +const AnalyzerName = "hu" + +func AnalyzerConstructor(config map[string]interface{}, cache *registry.Cache) (*analysis.Analyzer, error) { + unicodeTokenizer, err := cache.TokenizerNamed(unicode.Name) + if err != nil { + return nil, err + } + toLowerFilter, err := cache.TokenFilterNamed(lowercase.Name) + if err != nil { + return nil, err + } + stopHuFilter, err := cache.TokenFilterNamed(StopName) + if err != nil { + return nil, err + } + stemmerHuFilter, err := cache.TokenFilterNamed(SnowballStemmerName) + if err != nil { + return nil, err + } + rv := analysis.Analyzer{ + Tokenizer: unicodeTokenizer, + TokenFilters: []analysis.TokenFilter{ + toLowerFilter, + stopHuFilter, + stemmerHuFilter, + }, + } + return &rv, nil +} + +func init() { + registry.RegisterAnalyzer(AnalyzerName, AnalyzerConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/hu/analyzer_hu_test.go b/vendor/github.com/blevesearch/bleve/analysis/lang/hu/analyzer_hu_test.go new file mode 100644 index 0000000..4a14dff --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/hu/analyzer_hu_test.go @@ -0,0 +1,70 @@ +// Copyright (c) 2018 Couchbase, 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 hu + +import ( + "reflect" + "testing" + + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" +) + +func TestHungarianAnalyzer(t *testing.T) { + tests := []struct { + input []byte + output analysis.TokenStream + }{ + // stemming + { + input: []byte("babakocsi"), + output: analysis.TokenStream{ + &analysis.Token{ + Term: []byte("babakocs"), + }, + }, + }, + { + input: []byte("babakocsijáért"), + output: analysis.TokenStream{ + &analysis.Token{ + Term: []byte("babakocs"), + }, + }, + }, + // stop word + { + input: []byte("által"), + output: analysis.TokenStream{}, + }, + } + + cache := registry.NewCache() + analyzer, err := cache.AnalyzerNamed(AnalyzerName) + if err != nil { + t.Fatal(err) + } + for _, test := range tests { + actual := analyzer.Analyze(test.input) + if len(actual) != len(test.output) { + t.Fatalf("expected length: %d, got %d", len(test.output), len(actual)) + } + for i, tok := range actual { + if !reflect.DeepEqual(tok.Term, test.output[i].Term) { + t.Errorf("expected term %s (% x) got %s (% x)", test.output[i].Term, test.output[i].Term, tok.Term, tok.Term) + } + } + } +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/hu/stemmer_hu.go b/vendor/github.com/blevesearch/bleve/analysis/lang/hu/stemmer_hu.go new file mode 100644 index 0000000..b380818 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/hu/stemmer_hu.go @@ -0,0 +1,49 @@ +// Copyright (c) 2018 Couchbase, 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 hu + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" + + "github.com/blevesearch/snowballstem" + "github.com/blevesearch/snowballstem/hungarian" +) + +const SnowballStemmerName = "stemmer_hu_snowball" + +type HungarianStemmerFilter struct { +} + +func NewHungarianStemmerFilter() *HungarianStemmerFilter { + return &HungarianStemmerFilter{} +} + +func (s *HungarianStemmerFilter) Filter(input analysis.TokenStream) analysis.TokenStream { + for _, token := range input { + env := snowballstem.NewEnv(string(token.Term)) + hungarian.Stem(env) + token.Term = []byte(env.Current()) + } + return input +} + +func HungarianStemmerFilterConstructor(config map[string]interface{}, cache *registry.Cache) (analysis.TokenFilter, error) { + return NewHungarianStemmerFilter(), nil +} + +func init() { + registry.RegisterTokenFilter(SnowballStemmerName, HungarianStemmerFilterConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/hu/stop_filter_hu.go b/vendor/github.com/blevesearch/bleve/analysis/lang/hu/stop_filter_hu.go new file mode 100644 index 0000000..a83fd4c --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/hu/stop_filter_hu.go @@ -0,0 +1,33 @@ +// Copyright (c) 2018 Couchbase, 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 hu + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/analysis/token/stop" + "github.com/blevesearch/bleve/registry" +) + +func StopTokenFilterConstructor(config map[string]interface{}, cache *registry.Cache) (analysis.TokenFilter, error) { + tokenMap, err := cache.TokenMapNamed(StopName) + if err != nil { + return nil, err + } + return stop.NewStopTokensFilter(tokenMap), nil +} + +func init() { + registry.RegisterTokenFilter(StopName, StopTokenFilterConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/hu/stop_words_hu.go b/vendor/github.com/blevesearch/bleve/analysis/lang/hu/stop_words_hu.go new file mode 100644 index 0000000..fe45d55 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/hu/stop_words_hu.go @@ -0,0 +1,235 @@ +package hu + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" +) + +const StopName = "stop_hu" + +// this content was obtained from: +// lucene-4.7.2/analysis/common/src/resources/org/apache/lucene/analysis/snowball/ +// ` was changed to ' to allow for literal string + +var HungarianStopWords = []byte(` | From svn.tartarus.org/snowball/trunk/website/algorithms/hungarian/stop.txt + | This file is distributed under the BSD License. + | See http://snowball.tartarus.org/license.php + | Also see http://www.opensource.org/licenses/bsd-license.html + | - Encoding was converted to UTF-8. + | - This notice was added. + | + | NOTE: To use this file with StopFilterFactory, you must specify format="snowball" + +| Hungarian stop word list +| prepared by Anna Tordai + +a +ahogy +ahol +aki +akik +akkor +alatt +által +általában +amely +amelyek +amelyekben +amelyeket +amelyet +amelynek +ami +amit +amolyan +amíg +amikor +át +abban +ahhoz +annak +arra +arról +az +azok +azon +azt +azzal +azért +aztán +azután +azonban +bár +be +belül +benne +cikk +cikkek +cikkeket +csak +de +e +eddig +egész +egy +egyes +egyetlen +egyéb +egyik +egyre +ekkor +el +elég +ellen +elő +először +előtt +első +én +éppen +ebben +ehhez +emilyen +ennek +erre +ez +ezt +ezek +ezen +ezzel +ezért +és +fel +felé +hanem +hiszen +hogy +hogyan +igen +így +illetve +ill. +ill +ilyen +ilyenkor +ison +ismét +itt +jó +jól +jobban +kell +kellett +keresztül +keressünk +ki +kívül +között +közül +legalább +lehet +lehetett +legyen +lenne +lenni +lesz +lett +maga +magát +majd +majd +már +más +másik +meg +még +mellett +mert +mely +melyek +mi +mit +míg +miért +milyen +mikor +minden +mindent +mindenki +mindig +mint +mintha +mivel +most +nagy +nagyobb +nagyon +ne +néha +nekem +neki +nem +néhány +nélkül +nincs +olyan +ott +össze +ő +ők +őket +pedig +persze +rá +s +saját +sem +semmi +sok +sokat +sokkal +számára +szemben +szerint +szinte +talán +tehát +teljes +tovább +továbbá +több +úgy +ugyanis +új +újabb +újra +után +utána +utolsó +vagy +vagyis +valaki +valami +valamint +való +vagyok +van +vannak +volt +voltam +voltak +voltunk +vissza +vele +viszont +volna +`) + +func TokenMapConstructor(config map[string]interface{}, cache *registry.Cache) (analysis.TokenMap, error) { + rv := analysis.NewTokenMap() + err := rv.LoadBytes(HungarianStopWords) + return rv, err +} + +func init() { + registry.RegisterTokenMap(StopName, TokenMapConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/nl/analyzer_nl.go b/vendor/github.com/blevesearch/bleve/analysis/lang/nl/analyzer_nl.go new file mode 100644 index 0000000..69853a9 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/nl/analyzer_nl.go @@ -0,0 +1,57 @@ +// Copyright (c) 2018 Couchbase, 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 nl + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" + + "github.com/blevesearch/bleve/analysis/token/lowercase" + "github.com/blevesearch/bleve/analysis/tokenizer/unicode" +) + +const AnalyzerName = "nl" + +func AnalyzerConstructor(config map[string]interface{}, cache *registry.Cache) (*analysis.Analyzer, error) { + unicodeTokenizer, err := cache.TokenizerNamed(unicode.Name) + if err != nil { + return nil, err + } + toLowerFilter, err := cache.TokenFilterNamed(lowercase.Name) + if err != nil { + return nil, err + } + stopNlFilter, err := cache.TokenFilterNamed(StopName) + if err != nil { + return nil, err + } + stemmerNlFilter, err := cache.TokenFilterNamed(SnowballStemmerName) + if err != nil { + return nil, err + } + rv := analysis.Analyzer{ + Tokenizer: unicodeTokenizer, + TokenFilters: []analysis.TokenFilter{ + toLowerFilter, + stopNlFilter, + stemmerNlFilter, + }, + } + return &rv, nil +} + +func init() { + registry.RegisterAnalyzer(AnalyzerName, AnalyzerConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/nl/analyzer_nl_test.go b/vendor/github.com/blevesearch/bleve/analysis/lang/nl/analyzer_nl_test.go new file mode 100644 index 0000000..21e851c --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/nl/analyzer_nl_test.go @@ -0,0 +1,70 @@ +// Copyright (c) 2018 Couchbase, 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 nl + +import ( + "reflect" + "testing" + + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" +) + +func TestDutchAnalyzer(t *testing.T) { + tests := []struct { + input []byte + output analysis.TokenStream + }{ + // stemming + { + input: []byte("lichamelijk"), + output: analysis.TokenStream{ + &analysis.Token{ + Term: []byte("licham"), + }, + }, + }, + { + input: []byte("lichamelijke"), + output: analysis.TokenStream{ + &analysis.Token{ + Term: []byte("licham"), + }, + }, + }, + // stop word + { + input: []byte("van"), + output: analysis.TokenStream{}, + }, + } + + cache := registry.NewCache() + analyzer, err := cache.AnalyzerNamed(AnalyzerName) + if err != nil { + t.Fatal(err) + } + for _, test := range tests { + actual := analyzer.Analyze(test.input) + if len(actual) != len(test.output) { + t.Fatalf("expected length: %d, got %d", len(test.output), len(actual)) + } + for i, tok := range actual { + if !reflect.DeepEqual(tok.Term, test.output[i].Term) { + t.Errorf("expected term %s (% x) got %s (% x)", test.output[i].Term, test.output[i].Term, tok.Term, tok.Term) + } + } + } +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/nl/stemmer_nl.go b/vendor/github.com/blevesearch/bleve/analysis/lang/nl/stemmer_nl.go new file mode 100644 index 0000000..049d921 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/nl/stemmer_nl.go @@ -0,0 +1,49 @@ +// Copyright (c) 2018 Couchbase, 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 nl + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" + + "github.com/blevesearch/snowballstem" + "github.com/blevesearch/snowballstem/dutch" +) + +const SnowballStemmerName = "stemmer_nl_snowball" + +type DutchStemmerFilter struct { +} + +func NewDutchStemmerFilter() *DutchStemmerFilter { + return &DutchStemmerFilter{} +} + +func (s *DutchStemmerFilter) Filter(input analysis.TokenStream) analysis.TokenStream { + for _, token := range input { + env := snowballstem.NewEnv(string(token.Term)) + dutch.Stem(env) + token.Term = []byte(env.Current()) + } + return input +} + +func DutchStemmerFilterConstructor(config map[string]interface{}, cache *registry.Cache) (analysis.TokenFilter, error) { + return NewDutchStemmerFilter(), nil +} + +func init() { + registry.RegisterTokenFilter(SnowballStemmerName, DutchStemmerFilterConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/nl/stop_filter_nl.go b/vendor/github.com/blevesearch/bleve/analysis/lang/nl/stop_filter_nl.go new file mode 100644 index 0000000..218f0f4 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/nl/stop_filter_nl.go @@ -0,0 +1,33 @@ +// Copyright (c) 2018 Couchbase, 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 nl + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/analysis/token/stop" + "github.com/blevesearch/bleve/registry" +) + +func StopTokenFilterConstructor(config map[string]interface{}, cache *registry.Cache) (analysis.TokenFilter, error) { + tokenMap, err := cache.TokenMapNamed(StopName) + if err != nil { + return nil, err + } + return stop.NewStopTokensFilter(tokenMap), nil +} + +func init() { + registry.RegisterTokenFilter(StopName, StopTokenFilterConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/nl/stop_words_nl.go b/vendor/github.com/blevesearch/bleve/analysis/lang/nl/stop_words_nl.go new file mode 100644 index 0000000..4adae10 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/nl/stop_words_nl.go @@ -0,0 +1,143 @@ +package nl + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" +) + +const StopName = "stop_nl" + +// this content was obtained from: +// lucene-4.7.2/analysis/common/src/resources/org/apache/lucene/analysis/snowball/ +// ` was changed to ' to allow for literal string + +var DutchStopWords = []byte(` | From svn.tartarus.org/snowball/trunk/website/algorithms/dutch/stop.txt + | This file is distributed under the BSD License. + | See http://snowball.tartarus.org/license.php + | Also see http://www.opensource.org/licenses/bsd-license.html + | - Encoding was converted to UTF-8. + | - This notice was added. + | + | NOTE: To use this file with StopFilterFactory, you must specify format="snowball" + + | A Dutch stop word list. Comments begin with vertical bar. Each stop + | word is at the start of a line. + + | This is a ranked list (commonest to rarest) of stopwords derived from + | a large sample of Dutch text. + + | Dutch stop words frequently exhibit homonym clashes. These are indicated + | clearly below. + +de | the +en | and +van | of, from +ik | I, the ego +te | (1) chez, at etc, (2) to, (3) too +dat | that, which +die | that, those, who, which +in | in, inside +een | a, an, one +hij | he +het | the, it +niet | not, nothing, naught +zijn | (1) to be, being, (2) his, one's, its +is | is +was | (1) was, past tense of all persons sing. of 'zijn' (to be) (2) wax, (3) the washing, (4) rise of river +op | on, upon, at, in, up, used up +aan | on, upon, to (as dative) +met | with, by +als | like, such as, when +voor | (1) before, in front of, (2) furrow +had | had, past tense all persons sing. of 'hebben' (have) +er | there +maar | but, only +om | round, about, for etc +hem | him +dan | then +zou | should/would, past tense all persons sing. of 'zullen' +of | or, whether, if +wat | what, something, anything +mijn | possessive and noun 'mine' +men | people, 'one' +dit | this +zo | so, thus, in this way +door | through by +over | over, across +ze | she, her, they, them +zich | oneself +bij | (1) a bee, (2) by, near, at +ook | also, too +tot | till, until +je | you +mij | me +uit | out of, from +der | Old Dutch form of 'van der' still found in surnames +daar | (1) there, (2) because +haar | (1) her, their, them, (2) hair +naar | (1) unpleasant, unwell etc, (2) towards, (3) as +heb | present first person sing. of 'to have' +hoe | how, why +heeft | present third person sing. of 'to have' +hebben | 'to have' and various parts thereof +deze | this +u | you +want | (1) for, (2) mitten, (3) rigging +nog | yet, still +zal | 'shall', first and third person sing. of verb 'zullen' (will) +me | me +zij | she, they +nu | now +ge | 'thou', still used in Belgium and south Netherlands +geen | none +omdat | because +iets | something, somewhat +worden | to become, grow, get +toch | yet, still +al | all, every, each +waren | (1) 'were' (2) to wander, (3) wares, (3) +veel | much, many +meer | (1) more, (2) lake +doen | to do, to make +toen | then, when +moet | noun 'spot/mote' and present form of 'to must' +ben | (1) am, (2) 'are' in interrogative second person singular of 'to be' +zonder | without +kan | noun 'can' and present form of 'to be able' +hun | their, them +dus | so, consequently +alles | all, everything, anything +onder | under, beneath +ja | yes, of course +eens | once, one day +hier | here +wie | who +werd | imperfect third person sing. of 'become' +altijd | always +doch | yet, but etc +wordt | present third person sing. of 'become' +wezen | (1) to be, (2) 'been' as in 'been fishing', (3) orphans +kunnen | to be able +ons | us/our +zelf | self +tegen | against, towards, at +na | after, near +reeds | already +wil | (1) present tense of 'want', (2) 'will', noun, (3) fender +kon | could; past tense of 'to be able' +niets | nothing +uw | your +iemand | somebody +geweest | been; past participle of 'be' +andere | other +`) + +func TokenMapConstructor(config map[string]interface{}, cache *registry.Cache) (analysis.TokenMap, error) { + rv := analysis.NewTokenMap() + err := rv.LoadBytes(DutchStopWords) + return rv, err +} + +func init() { + registry.RegisterTokenMap(StopName, TokenMapConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/no/analyzer_no.go b/vendor/github.com/blevesearch/bleve/analysis/lang/no/analyzer_no.go new file mode 100644 index 0000000..57d749e --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/no/analyzer_no.go @@ -0,0 +1,57 @@ +// Copyright (c) 2018 Couchbase, 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 no + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" + + "github.com/blevesearch/bleve/analysis/token/lowercase" + "github.com/blevesearch/bleve/analysis/tokenizer/unicode" +) + +const AnalyzerName = "no" + +func AnalyzerConstructor(config map[string]interface{}, cache *registry.Cache) (*analysis.Analyzer, error) { + unicodeTokenizer, err := cache.TokenizerNamed(unicode.Name) + if err != nil { + return nil, err + } + toLowerFilter, err := cache.TokenFilterNamed(lowercase.Name) + if err != nil { + return nil, err + } + stopNoFilter, err := cache.TokenFilterNamed(StopName) + if err != nil { + return nil, err + } + stemmerNoFilter, err := cache.TokenFilterNamed(SnowballStemmerName) + if err != nil { + return nil, err + } + rv := analysis.Analyzer{ + Tokenizer: unicodeTokenizer, + TokenFilters: []analysis.TokenFilter{ + toLowerFilter, + stopNoFilter, + stemmerNoFilter, + }, + } + return &rv, nil +} + +func init() { + registry.RegisterAnalyzer(AnalyzerName, AnalyzerConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/no/analyzer_no_test.go b/vendor/github.com/blevesearch/bleve/analysis/lang/no/analyzer_no_test.go new file mode 100644 index 0000000..c73f5f7 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/no/analyzer_no_test.go @@ -0,0 +1,70 @@ +// Copyright (c) 2018 Couchbase, 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 no + +import ( + "reflect" + "testing" + + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" +) + +func TestNorwegianAnalyzer(t *testing.T) { + tests := []struct { + input []byte + output analysis.TokenStream + }{ + // stemming + { + input: []byte("havnedistriktene"), + output: analysis.TokenStream{ + &analysis.Token{ + Term: []byte("havnedistrikt"), + }, + }, + }, + { + input: []byte("havnedistrikter"), + output: analysis.TokenStream{ + &analysis.Token{ + Term: []byte("havnedistrikt"), + }, + }, + }, + // stop word + { + input: []byte("det"), + output: analysis.TokenStream{}, + }, + } + + cache := registry.NewCache() + analyzer, err := cache.AnalyzerNamed(AnalyzerName) + if err != nil { + t.Fatal(err) + } + for _, test := range tests { + actual := analyzer.Analyze(test.input) + if len(actual) != len(test.output) { + t.Fatalf("expected length: %d, got %d", len(test.output), len(actual)) + } + for i, tok := range actual { + if !reflect.DeepEqual(tok.Term, test.output[i].Term) { + t.Errorf("expected term %s (% x) got %s (% x)", test.output[i].Term, test.output[i].Term, tok.Term, tok.Term) + } + } + } +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/no/stemmer_no.go b/vendor/github.com/blevesearch/bleve/analysis/lang/no/stemmer_no.go new file mode 100644 index 0000000..e61e024 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/no/stemmer_no.go @@ -0,0 +1,49 @@ +// Copyright (c) 2018 Couchbase, 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 no + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" + + "github.com/blevesearch/snowballstem" + "github.com/blevesearch/snowballstem/norwegian" +) + +const SnowballStemmerName = "stemmer_no_snowball" + +type NorwegianStemmerFilter struct { +} + +func NewNorwegianStemmerFilter() *NorwegianStemmerFilter { + return &NorwegianStemmerFilter{} +} + +func (s *NorwegianStemmerFilter) Filter(input analysis.TokenStream) analysis.TokenStream { + for _, token := range input { + env := snowballstem.NewEnv(string(token.Term)) + norwegian.Stem(env) + token.Term = []byte(env.Current()) + } + return input +} + +func NorwegianStemmerFilterConstructor(config map[string]interface{}, cache *registry.Cache) (analysis.TokenFilter, error) { + return NewNorwegianStemmerFilter(), nil +} + +func init() { + registry.RegisterTokenFilter(SnowballStemmerName, NorwegianStemmerFilterConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/no/stop_filter_no.go b/vendor/github.com/blevesearch/bleve/analysis/lang/no/stop_filter_no.go new file mode 100644 index 0000000..093688f --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/no/stop_filter_no.go @@ -0,0 +1,33 @@ +// Copyright (c) 2018 Couchbase, 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 no + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/analysis/token/stop" + "github.com/blevesearch/bleve/registry" +) + +func StopTokenFilterConstructor(config map[string]interface{}, cache *registry.Cache) (analysis.TokenFilter, error) { + tokenMap, err := cache.TokenMapNamed(StopName) + if err != nil { + return nil, err + } + return stop.NewStopTokensFilter(tokenMap), nil +} + +func init() { + registry.RegisterTokenFilter(StopName, StopTokenFilterConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/no/stop_words_no.go b/vendor/github.com/blevesearch/bleve/analysis/lang/no/stop_words_no.go new file mode 100644 index 0000000..bfca348 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/no/stop_words_no.go @@ -0,0 +1,218 @@ +package no + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" +) + +const StopName = "stop_no" + +// this content was obtained from: +// lucene-4.7.2/analysis/common/src/resources/org/apache/lucene/analysis/snowball/ +// ` was changed to ' to allow for literal string + +var NorwegianStopWords = []byte(` | From svn.tartarus.org/snowball/trunk/website/algorithms/norwegian/stop.txt + | This file is distributed under the BSD License. + | See http://snowball.tartarus.org/license.php + | Also see http://www.opensource.org/licenses/bsd-license.html + | - Encoding was converted to UTF-8. + | - This notice was added. + | + | NOTE: To use this file with StopFilterFactory, you must specify format="snowball" + + | A Norwegian stop word list. Comments begin with vertical bar. Each stop + | word is at the start of a line. + + | This stop word list is for the dominant bokmål dialect. Words unique + | to nynorsk are marked *. + + | Revised by Jan Bruusgaard , Jan 2005 + +og | and +i | in +jeg | I +det | it/this/that +at | to (w. inf.) +en | a/an +et | a/an +den | it/this/that +til | to +er | is/am/are +som | who/that +på | on +de | they / you(formal) +med | with +han | he +av | of +ikke | not +ikkje | not * +der | there +så | so +var | was/were +meg | me +seg | you +men | but +ett | one +har | have +om | about +vi | we +min | my +mitt | my +ha | have +hadde | had +hun | she +nå | now +over | over +da | when/as +ved | by/know +fra | from +du | you +ut | out +sin | your +dem | them +oss | us +opp | up +man | you/one +kan | can +hans | his +hvor | where +eller | or +hva | what +skal | shall/must +selv | self (reflective) +sjøl | self (reflective) +her | here +alle | all +vil | will +bli | become +ble | became +blei | became * +blitt | have become +kunne | could +inn | in +når | when +være | be +kom | come +noen | some +noe | some +ville | would +dere | you +som | who/which/that +deres | their/theirs +kun | only/just +ja | yes +etter | after +ned | down +skulle | should +denne | this +for | for/because +deg | you +si | hers/his +sine | hers/his +sitt | hers/his +mot | against +å | to +meget | much +hvorfor | why +dette | this +disse | these/those +uten | without +hvordan | how +ingen | none +din | your +ditt | your +blir | become +samme | same +hvilken | which +hvilke | which (plural) +sånn | such a +inni | inside/within +mellom | between +vår | our +hver | each +hvem | who +vors | us/ours +hvis | whose +både | both +bare | only/just +enn | than +fordi | as/because +før | before +mange | many +også | also +slik | just +vært | been +være | to be +båe | both * +begge | both +siden | since +dykk | your * +dykkar | yours * +dei | they * +deira | them * +deires | theirs * +deim | them * +di | your (fem.) * +då | as/when * +eg | I * +ein | a/an * +eit | a/an * +eitt | a/an * +elles | or * +honom | he * +hjå | at * +ho | she * +hoe | she * +henne | her +hennar | her/hers +hennes | hers +hoss | how * +hossen | how * +ikkje | not * +ingi | noone * +inkje | noone * +korleis | how * +korso | how * +kva | what/which * +kvar | where * +kvarhelst | where * +kven | who/whom * +kvi | why * +kvifor | why * +me | we * +medan | while * +mi | my * +mine | my * +mykje | much * +no | now * +nokon | some (masc./neut.) * +noka | some (fem.) * +nokor | some * +noko | some * +nokre | some * +si | his/hers * +sia | since * +sidan | since * +so | so * +somt | some * +somme | some * +um | about* +upp | up * +vere | be * +vore | was * +verte | become * +vort | become * +varte | became * +vart | became * + +`) + +func TokenMapConstructor(config map[string]interface{}, cache *registry.Cache) (analysis.TokenMap, error) { + rv := analysis.NewTokenMap() + err := rv.LoadBytes(NorwegianStopWords) + return rv, err +} + +func init() { + registry.RegisterTokenMap(StopName, TokenMapConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/ro/analyzer_ro.go b/vendor/github.com/blevesearch/bleve/analysis/lang/ro/analyzer_ro.go new file mode 100644 index 0000000..e293881 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/ro/analyzer_ro.go @@ -0,0 +1,57 @@ +// Copyright (c) 2018 Couchbase, 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 ro + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" + + "github.com/blevesearch/bleve/analysis/token/lowercase" + "github.com/blevesearch/bleve/analysis/tokenizer/unicode" +) + +const AnalyzerName = "ro" + +func AnalyzerConstructor(config map[string]interface{}, cache *registry.Cache) (*analysis.Analyzer, error) { + unicodeTokenizer, err := cache.TokenizerNamed(unicode.Name) + if err != nil { + return nil, err + } + toLowerFilter, err := cache.TokenFilterNamed(lowercase.Name) + if err != nil { + return nil, err + } + stopRoFilter, err := cache.TokenFilterNamed(StopName) + if err != nil { + return nil, err + } + stemmerRoFilter, err := cache.TokenFilterNamed(SnowballStemmerName) + if err != nil { + return nil, err + } + rv := analysis.Analyzer{ + Tokenizer: unicodeTokenizer, + TokenFilters: []analysis.TokenFilter{ + toLowerFilter, + stopRoFilter, + stemmerRoFilter, + }, + } + return &rv, nil +} + +func init() { + registry.RegisterAnalyzer(AnalyzerName, AnalyzerConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/ro/analyzer_ro_test.go b/vendor/github.com/blevesearch/bleve/analysis/lang/ro/analyzer_ro_test.go new file mode 100644 index 0000000..ee8b88f --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/ro/analyzer_ro_test.go @@ -0,0 +1,70 @@ +// Copyright (c) 2018 Couchbase, 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 ro + +import ( + "reflect" + "testing" + + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" +) + +func TestRomanianAnalyzer(t *testing.T) { + tests := []struct { + input []byte + output analysis.TokenStream + }{ + // stemming + { + input: []byte("absenţa"), + output: analysis.TokenStream{ + &analysis.Token{ + Term: []byte("absenţ"), + }, + }, + }, + { + input: []byte("absenţi"), + output: analysis.TokenStream{ + &analysis.Token{ + Term: []byte("absenţ"), + }, + }, + }, + // stop word + { + input: []byte("îl"), + output: analysis.TokenStream{}, + }, + } + + cache := registry.NewCache() + analyzer, err := cache.AnalyzerNamed(AnalyzerName) + if err != nil { + t.Fatal(err) + } + for _, test := range tests { + actual := analyzer.Analyze(test.input) + if len(actual) != len(test.output) { + t.Fatalf("expected length: %d, got %d", len(test.output), len(actual)) + } + for i, tok := range actual { + if !reflect.DeepEqual(tok.Term, test.output[i].Term) { + t.Errorf("expected term %s (% x) got %s (% x)", test.output[i].Term, test.output[i].Term, tok.Term, tok.Term) + } + } + } +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/ro/stemmer_ro.go b/vendor/github.com/blevesearch/bleve/analysis/lang/ro/stemmer_ro.go new file mode 100644 index 0000000..3966215 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/ro/stemmer_ro.go @@ -0,0 +1,49 @@ +// Copyright (c) 2018 Couchbase, 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 ro + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" + + "github.com/blevesearch/snowballstem" + "github.com/blevesearch/snowballstem/romanian" +) + +const SnowballStemmerName = "stemmer_ro_snowball" + +type RomanianStemmerFilter struct { +} + +func NewRomanianStemmerFilter() *RomanianStemmerFilter { + return &RomanianStemmerFilter{} +} + +func (s *RomanianStemmerFilter) Filter(input analysis.TokenStream) analysis.TokenStream { + for _, token := range input { + env := snowballstem.NewEnv(string(token.Term)) + romanian.Stem(env) + token.Term = []byte(env.Current()) + } + return input +} + +func RomanianStemmerFilterConstructor(config map[string]interface{}, cache *registry.Cache) (analysis.TokenFilter, error) { + return NewRomanianStemmerFilter(), nil +} + +func init() { + registry.RegisterTokenFilter(SnowballStemmerName, RomanianStemmerFilterConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/ro/stop_filter_ro.go b/vendor/github.com/blevesearch/bleve/analysis/lang/ro/stop_filter_ro.go new file mode 100644 index 0000000..a2f7f6d --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/ro/stop_filter_ro.go @@ -0,0 +1,33 @@ +// Copyright (c) 2018 Couchbase, 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 ro + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/analysis/token/stop" + "github.com/blevesearch/bleve/registry" +) + +func StopTokenFilterConstructor(config map[string]interface{}, cache *registry.Cache) (analysis.TokenFilter, error) { + tokenMap, err := cache.TokenMapNamed(StopName) + if err != nil { + return nil, err + } + return stop.NewStopTokensFilter(tokenMap), nil +} + +func init() { + registry.RegisterTokenFilter(StopName, StopTokenFilterConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/ro/stop_words_ro.go b/vendor/github.com/blevesearch/bleve/analysis/lang/ro/stop_words_ro.go new file mode 100644 index 0000000..e7d62d4 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/ro/stop_words_ro.go @@ -0,0 +1,257 @@ +package ro + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" +) + +const StopName = "stop_ro" + +// this content was obtained from: +// lucene-4.7.2/analysis/common/src/resources/org/apache/lucene/analysis/ +// ` was changed to ' to allow for literal string + +var RomanianStopWords = []byte(`# This file was created by Jacques Savoy and is distributed under the BSD license. +# See http://members.unine.ch/jacques.savoy/clef/index.html. +# Also see http://www.opensource.org/licenses/bsd-license.html +acea +aceasta +această +aceea +acei +aceia +acel +acela +acele +acelea +acest +acesta +aceste +acestea +aceşti +aceştia +acolo +acum +ai +aia +aibă +aici +al +ăla +ale +alea +ălea +altceva +altcineva +am +ar +are +aş +aşadar +asemenea +asta +ăsta +astăzi +astea +ăstea +ăştia +asupra +aţi +au +avea +avem +aveţi +azi +bine +bucur +bună +ca +că +căci +când +care +cărei +căror +cărui +cât +câte +câţi +către +câtva +ce +cel +ceva +chiar +cînd +cine +cineva +cît +cîte +cîţi +cîtva +contra +cu +cum +cumva +curând +curînd +da +dă +dacă +dar +datorită +de +deci +deja +deoarece +departe +deşi +din +dinaintea +dintr +dintre +drept +după +ea +ei +el +ele +eram +este +eşti +eu +face +fără +fi +fie +fiecare +fii +fim +fiţi +iar +ieri +îi +îl +îmi +împotriva +în +înainte +înaintea +încât +încît +încotro +între +întrucât +întrucît +îţi +la +lângă +le +li +lîngă +lor +lui +mă +mâine +mea +mei +mele +mereu +meu +mi +mine +mult +multă +mulţi +ne +nicăieri +nici +nimeni +nişte +noastră +noastre +noi +noştri +nostru +nu +ori +oricând +oricare +oricât +orice +oricînd +oricine +oricît +oricum +oriunde +până +pe +pentru +peste +pînă +poate +pot +prea +prima +primul +prin +printr +sa +să +săi +sale +sau +său +se +şi +sînt +sîntem +sînteţi +spre +sub +sunt +suntem +sunteţi +ta +tăi +tale +tău +te +ţi +ţie +tine +toată +toate +tot +toţi +totuşi +tu +un +una +unde +undeva +unei +unele +uneori +unor +vă +vi +voastră +voastre +voi +voştri +vostru +vouă +vreo +vreun +`) + +func TokenMapConstructor(config map[string]interface{}, cache *registry.Cache) (analysis.TokenMap, error) { + rv := analysis.NewTokenMap() + err := rv.LoadBytes(RomanianStopWords) + return rv, err +} + +func init() { + registry.RegisterTokenMap(StopName, TokenMapConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/ru/analyzer_ru.go b/vendor/github.com/blevesearch/bleve/analysis/lang/ru/analyzer_ru.go new file mode 100644 index 0000000..d1b7688 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/ru/analyzer_ru.go @@ -0,0 +1,57 @@ +// Copyright (c) 2018 Couchbase, 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 ru + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" + + "github.com/blevesearch/bleve/analysis/token/lowercase" + "github.com/blevesearch/bleve/analysis/tokenizer/unicode" +) + +const AnalyzerName = "ru" + +func AnalyzerConstructor(config map[string]interface{}, cache *registry.Cache) (*analysis.Analyzer, error) { + tokenizer, err := cache.TokenizerNamed(unicode.Name) + if err != nil { + return nil, err + } + toLowerFilter, err := cache.TokenFilterNamed(lowercase.Name) + if err != nil { + return nil, err + } + stopRuFilter, err := cache.TokenFilterNamed(StopName) + if err != nil { + return nil, err + } + stemmerRuFilter, err := cache.TokenFilterNamed(SnowballStemmerName) + if err != nil { + return nil, err + } + rv := analysis.Analyzer{ + Tokenizer: tokenizer, + TokenFilters: []analysis.TokenFilter{ + toLowerFilter, + stopRuFilter, + stemmerRuFilter, + }, + } + return &rv, nil +} + +func init() { + registry.RegisterAnalyzer(AnalyzerName, AnalyzerConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/ru/analyzer_ru_test.go b/vendor/github.com/blevesearch/bleve/analysis/lang/ru/analyzer_ru_test.go new file mode 100644 index 0000000..6cda4a5 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/ru/analyzer_ru_test.go @@ -0,0 +1,122 @@ +// Copyright (c) 2018 Couchbase, 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 ru + +import ( + "reflect" + "testing" + + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" +) + +func TestRussianAnalyzer(t *testing.T) { + tests := []struct { + input []byte + output analysis.TokenStream + }{ + // stemming + { + input: []byte("километрах"), + output: analysis.TokenStream{ + &analysis.Token{ + Term: []byte("километр"), + }, + }, + }, + { + input: []byte("актеров"), + output: analysis.TokenStream{ + &analysis.Token{ + Term: []byte("актер"), + }, + }, + }, + // stop word + { + input: []byte("как"), + output: analysis.TokenStream{}, + }, + // digits safe + { + input: []byte("text 1000"), + output: analysis.TokenStream{ + &analysis.Token{ + Term: []byte("text"), + }, + &analysis.Token{ + Term: []byte("1000"), + }, + }, + }, + { + input: []byte("Вместе с тем о силе электромагнитной энергии имели представление еще"), + output: analysis.TokenStream{ + &analysis.Token{ + Term: []byte("вмест"), + }, + &analysis.Token{ + Term: []byte("сил"), + }, + &analysis.Token{ + Term: []byte("электромагнитн"), + }, + &analysis.Token{ + Term: []byte("энерг"), + }, + &analysis.Token{ + Term: []byte("имел"), + }, + &analysis.Token{ + Term: []byte("представлен"), + }, + }, + }, + { + input: []byte("Но знание это хранилось в тайне"), + output: analysis.TokenStream{ + &analysis.Token{ + Term: []byte("знан"), + }, + &analysis.Token{ + Term: []byte("эт"), + }, + &analysis.Token{ + Term: []byte("хран"), + }, + &analysis.Token{ + Term: []byte("тайн"), + }, + }, + }, + } + + cache := registry.NewCache() + analyzer, err := cache.AnalyzerNamed(AnalyzerName) + if err != nil { + t.Fatal(err) + } + for _, test := range tests { + actual := analyzer.Analyze(test.input) + if len(actual) != len(test.output) { + t.Fatalf("expected length: %d, got %d", len(test.output), len(actual)) + } + for i, tok := range actual { + if !reflect.DeepEqual(tok.Term, test.output[i].Term) { + t.Errorf("expected term %s (% x) got %s (% x)", test.output[i].Term, test.output[i].Term, tok.Term, tok.Term) + } + } + } +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/ru/stemmer_ru.go b/vendor/github.com/blevesearch/bleve/analysis/lang/ru/stemmer_ru.go new file mode 100644 index 0000000..47a9045 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/ru/stemmer_ru.go @@ -0,0 +1,49 @@ +// Copyright (c) 2018 Couchbase, 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 ru + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" + + "github.com/blevesearch/snowballstem" + "github.com/blevesearch/snowballstem/russian" +) + +const SnowballStemmerName = "stemmer_ru_snowball" + +type RussianStemmerFilter struct { +} + +func NewRussianStemmerFilter() *RussianStemmerFilter { + return &RussianStemmerFilter{} +} + +func (s *RussianStemmerFilter) Filter(input analysis.TokenStream) analysis.TokenStream { + for _, token := range input { + env := snowballstem.NewEnv(string(token.Term)) + russian.Stem(env) + token.Term = []byte(env.Current()) + } + return input +} + +func RussianStemmerFilterConstructor(config map[string]interface{}, cache *registry.Cache) (analysis.TokenFilter, error) { + return NewRussianStemmerFilter(), nil +} + +func init() { + registry.RegisterTokenFilter(SnowballStemmerName, RussianStemmerFilterConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/ru/stemmer_ru_test.go b/vendor/github.com/blevesearch/bleve/analysis/lang/ru/stemmer_ru_test.go new file mode 100644 index 0000000..39949fc --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/ru/stemmer_ru_test.go @@ -0,0 +1,67 @@ +// Copyright (c) 2018 Couchbase, 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 ru + +import ( + "reflect" + "testing" + + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" +) + +func TestSnowballRussianStemmer(t *testing.T) { + tests := []struct { + input analysis.TokenStream + output analysis.TokenStream + }{ + { + input: analysis.TokenStream{ + &analysis.Token{ + Term: []byte("актеров"), + }, + }, + output: analysis.TokenStream{ + &analysis.Token{ + Term: []byte("актер"), + }, + }, + }, + { + input: analysis.TokenStream{ + &analysis.Token{ + Term: []byte("километров"), + }, + }, + output: analysis.TokenStream{ + &analysis.Token{ + Term: []byte("километр"), + }, + }, + }, + } + + cache := registry.NewCache() + filter, err := cache.TokenFilterNamed(SnowballStemmerName) + if err != nil { + t.Fatal(err) + } + for _, test := range tests { + actual := filter.Filter(test.input) + if !reflect.DeepEqual(actual, test.output) { + t.Errorf("expected %s, got %s", test.output[0].Term, actual[0].Term) + } + } +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/ru/stop_filter_ru.go b/vendor/github.com/blevesearch/bleve/analysis/lang/ru/stop_filter_ru.go new file mode 100644 index 0000000..326fb9d --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/ru/stop_filter_ru.go @@ -0,0 +1,33 @@ +// Copyright (c) 2018 Couchbase, 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 ru + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/analysis/token/stop" + "github.com/blevesearch/bleve/registry" +) + +func StopTokenFilterConstructor(config map[string]interface{}, cache *registry.Cache) (analysis.TokenFilter, error) { + tokenMap, err := cache.TokenMapNamed(StopName) + if err != nil { + return nil, err + } + return stop.NewStopTokensFilter(tokenMap), nil +} + +func init() { + registry.RegisterTokenFilter(StopName, StopTokenFilterConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/ru/stop_words_ru.go b/vendor/github.com/blevesearch/bleve/analysis/lang/ru/stop_words_ru.go new file mode 100644 index 0000000..0129f48 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/ru/stop_words_ru.go @@ -0,0 +1,267 @@ +package ru + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" +) + +const StopName = "stop_ru" + +// this content was obtained from: +// lucene-4.7.2/analysis/common/src/resources/org/apache/lucene/analysis/snowball/ +// ` was changed to ' to allow for literal string + +var RussianStopWords = []byte(` | From svn.tartarus.org/snowball/trunk/website/algorithms/russian/stop.txt + | This file is distributed under the BSD License. + | See http://snowball.tartarus.org/license.php + | Also see http://www.opensource.org/licenses/bsd-license.html + | - Encoding was converted to UTF-8. + | - This notice was added. + | + | NOTE: To use this file with StopFilterFactory, you must specify format="snowball" + + | a russian stop word list. comments begin with vertical bar. each stop + | word is at the start of a line. + + | this is a ranked list (commonest to rarest) of stopwords derived from + | a large text sample. + + | letter 'ё' is translated to 'е'. + +и | and +в | in/into +во | alternative form +не | not +что | what/that +он | he +на | on/onto +я | i +с | from +со | alternative form +как | how +а | milder form of 'no' (but) +то | conjunction and form of 'that' +все | all +она | she +так | so, thus +его | him +но | but +да | yes/and +ты | thou +к | towards, by +у | around, chez +же | intensifier particle +вы | you +за | beyond, behind +бы | conditional/subj. particle +по | up to, along +только | only +ее | her +мне | to me +было | it was +вот | here is/are, particle +от | away from +меня | me +еще | still, yet, more +нет | no, there isnt/arent +о | about +из | out of +ему | to him +теперь | now +когда | when +даже | even +ну | so, well +вдруг | suddenly +ли | interrogative particle +если | if +уже | already, but homonym of 'narrower' +или | or +ни | neither +быть | to be +был | he was +него | prepositional form of его +до | up to +вас | you accusative +нибудь | indef. suffix preceded by hyphen +опять | again +уж | already, but homonym of 'adder' +вам | to you +сказал | he said +ведь | particle 'after all' +там | there +потом | then +себя | oneself +ничего | nothing +ей | to her +может | usually with 'быть' as 'maybe' +они | they +тут | here +где | where +есть | there is/are +надо | got to, must +ней | prepositional form of ей +для | for +мы | we +тебя | thee +их | them, their +чем | than +была | she was +сам | self +чтоб | in order to +без | without +будто | as if +человек | man, person, one +чего | genitive form of 'what' +раз | once +тоже | also +себе | to oneself +под | beneath +жизнь | life +будет | will be +ж | short form of intensifer particle 'же' +тогда | then +кто | who +этот | this +говорил | was saying +того | genitive form of 'that' +потому | for that reason +этого | genitive form of 'this' +какой | which +совсем | altogether +ним | prepositional form of 'его', 'они' +здесь | here +этом | prepositional form of 'этот' +один | one +почти | almost +мой | my +тем | instrumental/dative plural of 'тот', 'то' +чтобы | full form of 'in order that' +нее | her (acc.) +кажется | it seems +сейчас | now +были | they were +куда | where to +зачем | why +сказать | to say +всех | all (acc., gen. preposn. plural) +никогда | never +сегодня | today +можно | possible, one can +при | by +наконец | finally +два | two +об | alternative form of 'о', about +другой | another +хоть | even +после | after +над | above +больше | more +тот | that one (masc.) +через | across, in +эти | these +нас | us +про | about +всего | in all, only, of all +них | prepositional form of 'они' (they) +какая | which, feminine +много | lots +разве | interrogative particle +сказала | she said +три | three +эту | this, acc. fem. sing. +моя | my, feminine +впрочем | moreover, besides +хорошо | good +свою | ones own, acc. fem. sing. +этой | oblique form of 'эта', fem. 'this' +перед | in front of +иногда | sometimes +лучше | better +чуть | a little +том | preposn. form of 'that one' +нельзя | one must not +такой | such a one +им | to them +более | more +всегда | always +конечно | of course +всю | acc. fem. sing of 'all' +между | between + + + | b: some paradigms + | + | personal pronouns + | + | я меня мне мной [мною] + | ты тебя тебе тобой [тобою] + | он его ему им [него, нему, ним] + | она ее эи ею [нее, нэи, нею] + | оно его ему им [него, нему, ним] + | + | мы нас нам нами + | вы вас вам вами + | они их им ими [них, ним, ними] + | + | себя себе собой [собою] + | + | demonstrative pronouns: этот (this), тот (that) + | + | этот эта это эти + | этого эты это эти + | этого этой этого этих + | этому этой этому этим + | этим этой этим [этою] этими + | этом этой этом этих + | + | тот та то те + | того ту то те + | того той того тех + | тому той тому тем + | тем той тем [тою] теми + | том той том тех + | + | determinative pronouns + | + | (a) весь (all) + | + | весь вся все все + | всего всю все все + | всего всей всего всех + | всему всей всему всем + | всем всей всем [всею] всеми + | всем всей всем всех + | + | (b) сам (himself etc) + | + | сам сама само сами + | самого саму само самих + | самого самой самого самих + | самому самой самому самим + | самим самой самим [самою] самими + | самом самой самом самих + | + | stems of verbs 'to be', 'to have', 'to do' and modal + | + | быть бы буд быв есть суть + | име + | дел + | мог мож мочь + | уме + | хоч хот + | долж + | можн + | нужн + | нельзя + +`) + +func TokenMapConstructor(config map[string]interface{}, cache *registry.Cache) (analysis.TokenMap, error) { + rv := analysis.NewTokenMap() + err := rv.LoadBytes(RussianStopWords) + return rv, err +} + +func init() { + registry.RegisterTokenMap(StopName, TokenMapConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/sv/analyzer_sv.go b/vendor/github.com/blevesearch/bleve/analysis/lang/sv/analyzer_sv.go new file mode 100644 index 0000000..f650158 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/sv/analyzer_sv.go @@ -0,0 +1,57 @@ +// Copyright (c) 2018 Couchbase, 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 sv + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" + + "github.com/blevesearch/bleve/analysis/token/lowercase" + "github.com/blevesearch/bleve/analysis/tokenizer/unicode" +) + +const AnalyzerName = "sv" + +func AnalyzerConstructor(config map[string]interface{}, cache *registry.Cache) (*analysis.Analyzer, error) { + unicodeTokenizer, err := cache.TokenizerNamed(unicode.Name) + if err != nil { + return nil, err + } + toLowerFilter, err := cache.TokenFilterNamed(lowercase.Name) + if err != nil { + return nil, err + } + stopSvFilter, err := cache.TokenFilterNamed(StopName) + if err != nil { + return nil, err + } + stemmerSvFilter, err := cache.TokenFilterNamed(SnowballStemmerName) + if err != nil { + return nil, err + } + rv := analysis.Analyzer{ + Tokenizer: unicodeTokenizer, + TokenFilters: []analysis.TokenFilter{ + toLowerFilter, + stopSvFilter, + stemmerSvFilter, + }, + } + return &rv, nil +} + +func init() { + registry.RegisterAnalyzer(AnalyzerName, AnalyzerConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/sv/analyzer_sv_test.go b/vendor/github.com/blevesearch/bleve/analysis/lang/sv/analyzer_sv_test.go new file mode 100644 index 0000000..2d358b6 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/sv/analyzer_sv_test.go @@ -0,0 +1,70 @@ +// Copyright (c) 2018 Couchbase, 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 sv + +import ( + "reflect" + "testing" + + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" +) + +func TestSwedishAnalyzer(t *testing.T) { + tests := []struct { + input []byte + output analysis.TokenStream + }{ + // stemming + { + input: []byte("jaktkarlarne"), + output: analysis.TokenStream{ + &analysis.Token{ + Term: []byte("jaktkarl"), + }, + }, + }, + { + input: []byte("jaktkarlens"), + output: analysis.TokenStream{ + &analysis.Token{ + Term: []byte("jaktkarl"), + }, + }, + }, + // stop word + { + input: []byte("och"), + output: analysis.TokenStream{}, + }, + } + + cache := registry.NewCache() + analyzer, err := cache.AnalyzerNamed(AnalyzerName) + if err != nil { + t.Fatal(err) + } + for _, test := range tests { + actual := analyzer.Analyze(test.input) + if len(actual) != len(test.output) { + t.Fatalf("expected length: %d, got %d", len(test.output), len(actual)) + } + for i, tok := range actual { + if !reflect.DeepEqual(tok.Term, test.output[i].Term) { + t.Errorf("expected term %s (% x) got %s (% x)", test.output[i].Term, test.output[i].Term, tok.Term, tok.Term) + } + } + } +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/sv/stemmer_sv.go b/vendor/github.com/blevesearch/bleve/analysis/lang/sv/stemmer_sv.go new file mode 100644 index 0000000..247f11b --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/sv/stemmer_sv.go @@ -0,0 +1,49 @@ +// Copyright (c) 2018 Couchbase, 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 sv + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" + + "github.com/blevesearch/snowballstem" + "github.com/blevesearch/snowballstem/swedish" +) + +const SnowballStemmerName = "stemmer_sv_snowball" + +type SwedishStemmerFilter struct { +} + +func NewSwedishStemmerFilter() *SwedishStemmerFilter { + return &SwedishStemmerFilter{} +} + +func (s *SwedishStemmerFilter) Filter(input analysis.TokenStream) analysis.TokenStream { + for _, token := range input { + env := snowballstem.NewEnv(string(token.Term)) + swedish.Stem(env) + token.Term = []byte(env.Current()) + } + return input +} + +func SwedishStemmerFilterConstructor(config map[string]interface{}, cache *registry.Cache) (analysis.TokenFilter, error) { + return NewSwedishStemmerFilter(), nil +} + +func init() { + registry.RegisterTokenFilter(SnowballStemmerName, SwedishStemmerFilterConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/sv/stop_filter_sv.go b/vendor/github.com/blevesearch/bleve/analysis/lang/sv/stop_filter_sv.go new file mode 100644 index 0000000..46a533d --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/sv/stop_filter_sv.go @@ -0,0 +1,33 @@ +// Copyright (c) 2018 Couchbase, 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 sv + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/analysis/token/stop" + "github.com/blevesearch/bleve/registry" +) + +func StopTokenFilterConstructor(config map[string]interface{}, cache *registry.Cache) (analysis.TokenFilter, error) { + tokenMap, err := cache.TokenMapNamed(StopName) + if err != nil { + return nil, err + } + return stop.NewStopTokensFilter(tokenMap), nil +} + +func init() { + registry.RegisterTokenFilter(StopName, StopTokenFilterConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/sv/stop_words_sv.go b/vendor/github.com/blevesearch/bleve/analysis/lang/sv/stop_words_sv.go new file mode 100644 index 0000000..b4022fd --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/sv/stop_words_sv.go @@ -0,0 +1,157 @@ +package sv + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" +) + +const StopName = "stop_sv" + +// this content was obtained from: +// lucene-4.7.2/analysis/common/src/resources/org/apache/lucene/analysis/snowball/ +// ` was changed to ' to allow for literal string + +var SwedishStopWords = []byte(` | From svn.tartarus.org/snowball/trunk/website/algorithms/swedish/stop.txt + | This file is distributed under the BSD License. + | See http://snowball.tartarus.org/license.php + | Also see http://www.opensource.org/licenses/bsd-license.html + | - Encoding was converted to UTF-8. + | - This notice was added. + | + | NOTE: To use this file with StopFilterFactory, you must specify format="snowball" + + | A Swedish stop word list. Comments begin with vertical bar. Each stop + | word is at the start of a line. + + | This is a ranked list (commonest to rarest) of stopwords derived from + | a large text sample. + + | Swedish stop words occasionally exhibit homonym clashes. For example + | så = so, but also seed. These are indicated clearly below. + +och | and +det | it, this/that +att | to (with infinitive) +i | in, at +en | a +jag | I +hon | she +som | who, that +han | he +på | on +den | it, this/that +med | with +var | where, each +sig | him(self) etc +för | for +så | so (also: seed) +till | to +är | is +men | but +ett | a +om | if; around, about +hade | had +de | they, these/those +av | of +icke | not, no +mig | me +du | you +henne | her +då | then, when +sin | his +nu | now +har | have +inte | inte någon = no one +hans | his +honom | him +skulle | 'sake' +hennes | her +där | there +min | my +man | one (pronoun) +ej | nor +vid | at, by, on (also: vast) +kunde | could +något | some etc +från | from, off +ut | out +när | when +efter | after, behind +upp | up +vi | we +dem | them +vara | be +vad | what +över | over +än | than +dig | you +kan | can +sina | his +här | here +ha | have +mot | towards +alla | all +under | under (also: wonder) +någon | some etc +eller | or (else) +allt | all +mycket | much +sedan | since +ju | why +denna | this/that +själv | myself, yourself etc +detta | this/that +åt | to +utan | without +varit | was +hur | how +ingen | no +mitt | my +ni | you +bli | to be, become +blev | from bli +oss | us +din | thy +dessa | these/those +några | some etc +deras | their +blir | from bli +mina | my +samma | (the) same +vilken | who, that +er | you, your +sådan | such a +vår | our +blivit | from bli +dess | its +inom | within +mellan | between +sådant | such a +varför | why +varje | each +vilka | who, that +ditt | thy +vem | who +vilket | who, that +sitta | his +sådana | such a +vart | each +dina | thy +vars | whose +vårt | our +våra | our +ert | your +era | your +vilkas | whose + +`) + +func TokenMapConstructor(config map[string]interface{}, cache *registry.Cache) (analysis.TokenMap, error) { + rv := analysis.NewTokenMap() + err := rv.LoadBytes(SwedishStopWords) + return rv, err +} + +func init() { + registry.RegisterTokenMap(StopName, TokenMapConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/tr/analyzer_tr.go b/vendor/github.com/blevesearch/bleve/analysis/lang/tr/analyzer_tr.go new file mode 100644 index 0000000..d52a1d5 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/tr/analyzer_tr.go @@ -0,0 +1,63 @@ +// Copyright (c) 2018 Couchbase, 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 tr + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" + + "github.com/blevesearch/bleve/analysis/token/apostrophe" + "github.com/blevesearch/bleve/analysis/token/lowercase" + "github.com/blevesearch/bleve/analysis/tokenizer/unicode" +) + +const AnalyzerName = "tr" + +func AnalyzerConstructor(config map[string]interface{}, cache *registry.Cache) (*analysis.Analyzer, error) { + unicodeTokenizer, err := cache.TokenizerNamed(unicode.Name) + if err != nil { + return nil, err + } + aposFilter, err := cache.TokenFilterNamed(apostrophe.Name) + if err != nil { + return nil, err + } + toLowerFilter, err := cache.TokenFilterNamed(lowercase.Name) + if err != nil { + return nil, err + } + stopTrFilter, err := cache.TokenFilterNamed(StopName) + if err != nil { + return nil, err + } + stemmerTrFilter, err := cache.TokenFilterNamed(SnowballStemmerName) + if err != nil { + return nil, err + } + rv := analysis.Analyzer{ + Tokenizer: unicodeTokenizer, + TokenFilters: []analysis.TokenFilter{ + aposFilter, + toLowerFilter, + stopTrFilter, + stemmerTrFilter, + }, + } + return &rv, nil +} + +func init() { + registry.RegisterAnalyzer(AnalyzerName, AnalyzerConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/tr/analyzer_tr_test.go b/vendor/github.com/blevesearch/bleve/analysis/lang/tr/analyzer_tr_test.go new file mode 100644 index 0000000..fe89809 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/tr/analyzer_tr_test.go @@ -0,0 +1,90 @@ +// Copyright (c) 2018 Couchbase, 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 tr + +import ( + "reflect" + "testing" + + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" +) + +func TestTurkishAnalyzer(t *testing.T) { + tests := []struct { + input []byte + output analysis.TokenStream + }{ + // stemming + { + input: []byte("ağacı"), + output: analysis.TokenStream{ + &analysis.Token{ + Term: []byte("ağaç"), + }, + }, + }, + { + input: []byte("ağaç"), + output: analysis.TokenStream{ + &analysis.Token{ + Term: []byte("ağaç"), + }, + }, + }, + // stop word + { + input: []byte("dolayı"), + output: analysis.TokenStream{}, + }, + // apostrophes + { + input: []byte("Kıbrıs'ta"), + output: analysis.TokenStream{ + &analysis.Token{ + Term: []byte("kıbrıs"), + }, + }, + }, + { + input: []byte("Van Gölü'ne"), + output: analysis.TokenStream{ + &analysis.Token{ + Term: []byte("van"), + }, + &analysis.Token{ + Term: []byte("göl"), + }, + }, + }, + } + + cache := registry.NewCache() + analyzer, err := cache.AnalyzerNamed(AnalyzerName) + if err != nil { + t.Fatal(err) + } + for _, test := range tests { + actual := analyzer.Analyze(test.input) + if len(actual) != len(test.output) { + t.Fatalf("expected length: %d, got %d", len(test.output), len(actual)) + } + for i, tok := range actual { + if !reflect.DeepEqual(tok.Term, test.output[i].Term) { + t.Errorf("expected term %s (% x) got %s (% x)", test.output[i].Term, test.output[i].Term, tok.Term, tok.Term) + } + } + } +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/tr/stemmer_tr.go b/vendor/github.com/blevesearch/bleve/analysis/lang/tr/stemmer_tr.go new file mode 100644 index 0000000..ba3034e --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/tr/stemmer_tr.go @@ -0,0 +1,49 @@ +// Copyright (c) 2018 Couchbase, 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 tr + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" + + "github.com/blevesearch/snowballstem" + "github.com/blevesearch/snowballstem/turkish" +) + +const SnowballStemmerName = "stemmer_tr_snowball" + +type TurkishStemmerFilter struct { +} + +func NewTurkishStemmerFilter() *TurkishStemmerFilter { + return &TurkishStemmerFilter{} +} + +func (s *TurkishStemmerFilter) Filter(input analysis.TokenStream) analysis.TokenStream { + for _, token := range input { + env := snowballstem.NewEnv(string(token.Term)) + turkish.Stem(env) + token.Term = []byte(env.Current()) + } + return input +} + +func TurkishStemmerFilterConstructor(config map[string]interface{}, cache *registry.Cache) (analysis.TokenFilter, error) { + return NewTurkishStemmerFilter(), nil +} + +func init() { + registry.RegisterTokenFilter(SnowballStemmerName, TurkishStemmerFilterConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/tr/stop_filter_tr.go b/vendor/github.com/blevesearch/bleve/analysis/lang/tr/stop_filter_tr.go new file mode 100644 index 0000000..5b616eb --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/tr/stop_filter_tr.go @@ -0,0 +1,33 @@ +// Copyright (c) 2018 Couchbase, 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 tr + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/analysis/token/stop" + "github.com/blevesearch/bleve/registry" +) + +func StopTokenFilterConstructor(config map[string]interface{}, cache *registry.Cache) (analysis.TokenFilter, error) { + tokenMap, err := cache.TokenMapNamed(StopName) + if err != nil { + return nil, err + } + return stop.NewStopTokensFilter(tokenMap), nil +} + +func init() { + registry.RegisterTokenFilter(StopName, StopTokenFilterConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/lang/tr/stop_words_tr.go b/vendor/github.com/blevesearch/bleve/analysis/lang/tr/stop_words_tr.go new file mode 100644 index 0000000..f96fb07 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/lang/tr/stop_words_tr.go @@ -0,0 +1,236 @@ +package tr + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" +) + +const StopName = "stop_tr" + +// this content was obtained from: +// lucene-4.7.2/analysis/common/src/resources/org/apache/lucene/analysis/snowball/ +// ` was changed to ' to allow for literal string + +var TurkishStopWords = []byte(`# Turkish stopwords from LUCENE-559 +# merged with the list from "Information Retrieval on Turkish Texts" +# (http://www.users.muohio.edu/canf/papers/JASIST2008offPrint.pdf) +acaba +altmış +altı +ama +ancak +arada +aslında +ayrıca +bana +bazı +belki +ben +benden +beni +benim +beri +beş +bile +bin +bir +birçok +biri +birkaç +birkez +birşey +birşeyi +biz +bize +bizden +bizi +bizim +böyle +böylece +bu +buna +bunda +bundan +bunlar +bunları +bunların +bunu +bunun +burada +çok +çünkü +da +daha +dahi +de +defa +değil +diğer +diye +doksan +dokuz +dolayı +dolayısıyla +dört +edecek +eden +ederek +edilecek +ediliyor +edilmesi +ediyor +eğer +elli +en +etmesi +etti +ettiği +ettiğini +gibi +göre +halen +hangi +hatta +hem +henüz +hep +hepsi +her +herhangi +herkesin +hiç +hiçbir +için +iki +ile +ilgili +ise +işte +itibaren +itibariyle +kadar +karşın +katrilyon +kendi +kendilerine +kendini +kendisi +kendisine +kendisini +kez +ki +kim +kimden +kime +kimi +kimse +kırk +milyar +milyon +mu +mü +mı +nasıl +ne +neden +nedenle +nerde +nerede +nereye +niye +niçin +o +olan +olarak +oldu +olduğu +olduğunu +olduklarını +olmadı +olmadığı +olmak +olması +olmayan +olmaz +olsa +olsun +olup +olur +olursa +oluyor +on +ona +ondan +onlar +onlardan +onları +onların +onu +onun +otuz +oysa +öyle +pek +rağmen +sadece +sanki +sekiz +seksen +sen +senden +seni +senin +siz +sizden +sizi +sizin +şey +şeyden +şeyi +şeyler +şöyle +şu +şuna +şunda +şundan +şunları +şunu +tarafından +trilyon +tüm +üç +üzere +var +vardı +ve +veya +ya +yani +yapacak +yapılan +yapılması +yapıyor +yapmak +yaptı +yaptığı +yaptığını +yaptıkları +yedi +yerine +yetmiş +yine +yirmi +yoksa +yüz +zaten +`) + +func TokenMapConstructor(config map[string]interface{}, cache *registry.Cache) (analysis.TokenMap, error) { + rv := analysis.NewTokenMap() + err := rv.LoadBytes(TurkishStopWords) + return rv, err +} + +func init() { + registry.RegisterTokenMap(StopName, TokenMapConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/token/camelcase/camelcase.go b/vendor/github.com/blevesearch/bleve/analysis/token/camelcase/camelcase.go index 1e65154..42b7483 100644 --- a/vendor/github.com/blevesearch/bleve/analysis/token/camelcase/camelcase.go +++ b/vendor/github.com/blevesearch/bleve/analysis/token/camelcase/camelcase.go @@ -50,11 +50,12 @@ func NewCamelCaseFilter() *CamelCaseFilter { func (f *CamelCaseFilter) Filter(input analysis.TokenStream) analysis.TokenStream { rv := make(analysis.TokenStream, 0, len(input)) + nextPosition := 1 for _, token := range input { runeCount := utf8.RuneCount(token.Term) runes := bytes.Runes(token.Term) - p := NewParser(runeCount) + p := NewParser(runeCount, nextPosition, token.Start) for i := 0; i < runeCount; i++ { if i+1 >= runeCount { p.Push(runes[i], nil) @@ -63,6 +64,7 @@ func (f *CamelCaseFilter) Filter(input analysis.TokenStream) analysis.TokenStrea } } rv = append(rv, p.FlushTokens()...) + nextPosition = p.NextPosition() } return rv } diff --git a/vendor/github.com/blevesearch/bleve/analysis/token/camelcase/camelcase_test.go b/vendor/github.com/blevesearch/bleve/analysis/token/camelcase/camelcase_test.go index dacf7f4..8b7c20c 100644 --- a/vendor/github.com/blevesearch/bleve/analysis/token/camelcase/camelcase_test.go +++ b/vendor/github.com/blevesearch/bleve/analysis/token/camelcase/camelcase_test.go @@ -28,176 +28,45 @@ func TestCamelCaseFilter(t *testing.T) { output analysis.TokenStream }{ { - input: analysis.TokenStream{ - &analysis.Token{ - Term: []byte(""), - }, - }, - output: analysis.TokenStream{ - &analysis.Token{ - Term: []byte(""), - }, - }, + input: tokenStream(""), + output: tokenStream(""), }, { - input: analysis.TokenStream{ - &analysis.Token{ - Term: []byte("a"), - }, - }, - output: analysis.TokenStream{ - &analysis.Token{ - Term: []byte("a"), - }, - }, + input: tokenStream("a"), + output: tokenStream("a"), }, { - input: analysis.TokenStream{ - &analysis.Token{ - Term: []byte("...aMACMac123macILoveGolang"), - }, - }, - output: analysis.TokenStream{ - &analysis.Token{ - Term: []byte("..."), - }, - &analysis.Token{ - Term: []byte("a"), - }, - &analysis.Token{ - Term: []byte("MAC"), - }, - &analysis.Token{ - Term: []byte("Mac"), - }, - &analysis.Token{ - Term: []byte("123"), - }, - &analysis.Token{ - Term: []byte("mac"), - }, - &analysis.Token{ - Term: []byte("I"), - }, - &analysis.Token{ - Term: []byte("Love"), - }, - &analysis.Token{ - Term: []byte("Golang"), - }, - }, + input: tokenStream("...aMACMac123macILoveGolang"), + output: tokenStream("...", "a", "MAC", "Mac", "123", "mac", "I", "Love", "Golang"), }, { - input: analysis.TokenStream{ - &analysis.Token{ - Term: []byte("Lang"), - }, - }, - output: analysis.TokenStream{ - &analysis.Token{ - Term: []byte("Lang"), - }, - }, + input: tokenStream("Lang"), + output: tokenStream("Lang"), }, { - input: analysis.TokenStream{ - &analysis.Token{ - Term: []byte("GLang"), - }, - }, - output: analysis.TokenStream{ - &analysis.Token{ - Term: []byte("G"), - }, - &analysis.Token{ - Term: []byte("Lang"), - }, - }, + input: tokenStream("GLang"), + output: tokenStream("G", "Lang"), }, { - input: analysis.TokenStream{ - &analysis.Token{ - Term: []byte("GOLang"), - }, - }, - output: analysis.TokenStream{ - &analysis.Token{ - Term: []byte("GO"), - }, - &analysis.Token{ - Term: []byte("Lang"), - }, - }, + input: tokenStream("GOLang"), + output: tokenStream("GO", "Lang"), }, { - input: analysis.TokenStream{ - &analysis.Token{ - Term: []byte("GOOLang"), - }, - }, - output: analysis.TokenStream{ - &analysis.Token{ - Term: []byte("GOO"), - }, - &analysis.Token{ - Term: []byte("Lang"), - }, - }, + input: tokenStream("GOOLang"), + output: tokenStream("GOO", "Lang"), }, { - input: analysis.TokenStream{ - &analysis.Token{ - Term: []byte("1234"), - }, - }, - output: analysis.TokenStream{ - &analysis.Token{ - Term: []byte("1234"), - }, - }, + input: tokenStream("1234"), + output: tokenStream("1234"), }, { - input: analysis.TokenStream{ - &analysis.Token{ - Term: []byte("starbucks"), - }, - }, - output: analysis.TokenStream{ - &analysis.Token{ - Term: []byte("starbucks"), - }, - }, + input: tokenStream("starbucks"), + output: tokenStream("starbucks"), }, { - input: analysis.TokenStream{ - &analysis.Token{ - Term: []byte("Starbucks TVSamsungIsGREAT000"), - }, - }, - output: analysis.TokenStream{ - &analysis.Token{ - Term: []byte("Starbucks"), - }, - &analysis.Token{ - Term: []byte(" "), - }, - &analysis.Token{ - Term: []byte("TV"), - }, - &analysis.Token{ - Term: []byte("Samsung"), - }, - &analysis.Token{ - Term: []byte("Is"), - }, - &analysis.Token{ - Term: []byte("GREAT"), - }, - &analysis.Token{ - Term: []byte("000"), - }, - }, + input: tokenStream("Starbucks TVSamsungIsGREAT000"), + output: tokenStream("Starbucks", " ", "TV", "Samsung", "Is", "GREAT", "000"), }, } @@ -209,3 +78,18 @@ func TestCamelCaseFilter(t *testing.T) { } } } + +func tokenStream(termStrs ...string) analysis.TokenStream { + tokenStream := make([]*analysis.Token, len(termStrs)) + index := 0 + for i, termStr := range termStrs { + tokenStream[i] = &analysis.Token{ + Term: []byte(termStr), + Position: i + 1, + Start: index, + End: index + len(termStr), + } + index += len(termStr) + } + return analysis.TokenStream(tokenStream) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/token/camelcase/parser.go b/vendor/github.com/blevesearch/bleve/analysis/token/camelcase/parser.go index cbfa6da..d691e56 100644 --- a/vendor/github.com/blevesearch/bleve/analysis/token/camelcase/parser.go +++ b/vendor/github.com/blevesearch/bleve/analysis/token/camelcase/parser.go @@ -18,10 +18,17 @@ import ( "github.com/blevesearch/bleve/analysis" ) -func buildTokenFromTerm(buffer []rune) *analysis.Token { - return &analysis.Token{ - Term: analysis.BuildTermFromRunes(buffer), +func (p *Parser) buildTokenFromTerm(buffer []rune) *analysis.Token { + term := analysis.BuildTermFromRunes(buffer) + token := &analysis.Token{ + Term: term, + Position: p.position, + Start: p.index, + End: p.index + len(term), } + p.position++ + p.index += len(term) + return token } // Parser accepts a symbol and passes it to the current state (representing a class). @@ -35,13 +42,17 @@ type Parser struct { buffer []rune current State tokens []*analysis.Token + position int + index int } -func NewParser(len int) *Parser { +func NewParser(len, position, index int) *Parser { return &Parser{ bufferLen: len, buffer: make([]rune, 0, len), tokens: make([]*analysis.Token, 0, len), + position: position, + index: index, } } @@ -57,7 +68,7 @@ func (p *Parser) Push(sym rune, peek *rune) { } else { // the old state is no more, thus convert the buffer - p.tokens = append(p.tokens, buildTokenFromTerm(p.buffer)) + p.tokens = append(p.tokens, p.buildTokenFromTerm(p.buffer)) // let the new state begin p.current = p.NewState(sym) @@ -89,6 +100,10 @@ func (p *Parser) NewState(sym rune) State { } func (p *Parser) FlushTokens() []*analysis.Token { - p.tokens = append(p.tokens, buildTokenFromTerm(p.buffer)) + p.tokens = append(p.tokens, p.buildTokenFromTerm(p.buffer)) return p.tokens } + +func (p *Parser) NextPosition() int { + return p.position +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/token/snowball/snowball.go b/vendor/github.com/blevesearch/bleve/analysis/token/snowball/snowball.go new file mode 100644 index 0000000..ae87613 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/token/snowball/snowball.go @@ -0,0 +1,59 @@ +// Copyright (c) 2014 Couchbase, 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 snowball + +import ( + "fmt" + + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" + + "github.com/kljensen/snowball" +) + +const Name = "stemmer_snowball" + +type SnowballStemmer struct { + langauge string +} + +func NewSnowballStemmer(language string) *SnowballStemmer { + return &SnowballStemmer{ + langauge: language, + } +} + +func (s *SnowballStemmer) Filter(input analysis.TokenStream) analysis.TokenStream { + for _, token := range input { + // if it is not a protected keyword, stem it + if !token.KeyWord { + stemmed, _ := snowball.Stem(string(token.Term), s.langauge, true) + token.Term = []byte(stemmed) + } + } + return input +} + +func SnowballStemmerConstructor(config map[string]interface{}, cache *registry.Cache) (analysis.TokenFilter, error) { + language, ok := config["language"].(string) + if !ok { + return nil, fmt.Errorf("must specify language") + } + return NewSnowballStemmer(language), nil +} + +func init() { + registry.RegisterTokenFilter(Name, SnowballStemmerConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/token/snowball/snowball_test.go b/vendor/github.com/blevesearch/bleve/analysis/token/snowball/snowball_test.go new file mode 100644 index 0000000..80c2f6f --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/token/snowball/snowball_test.go @@ -0,0 +1,115 @@ +// Copyright (c) 2014 Couchbase, 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 snowball + +import ( + "reflect" + "testing" + + "github.com/blevesearch/bleve/analysis" +) + +func TestSnowballStemmer(t *testing.T) { + + inputTokenStream := analysis.TokenStream{ + &analysis.Token{ + Term: []byte("walking"), + }, + &analysis.Token{ + Term: []byte("talked"), + }, + &analysis.Token{ + Term: []byte("business"), + }, + &analysis.Token{ + Term: []byte("protected"), + KeyWord: true, + }, + &analysis.Token{ + Term: []byte("cat"), + }, + &analysis.Token{ + Term: []byte("done"), + }, + // a term which does stem, but does not change length + &analysis.Token{ + Term: []byte("marty"), + }, + } + + expectedTokenStream := analysis.TokenStream{ + &analysis.Token{ + Term: []byte("walk"), + }, + &analysis.Token{ + Term: []byte("talk"), + }, + &analysis.Token{ + Term: []byte("busi"), + }, + &analysis.Token{ + Term: []byte("protected"), + KeyWord: true, + }, + &analysis.Token{ + Term: []byte("cat"), + }, + &analysis.Token{ + Term: []byte("done"), + }, + &analysis.Token{ + Term: []byte("marti"), + }, + } + + filter := NewSnowballStemmer("english") + ouputTokenStream := filter.Filter(inputTokenStream) + if !reflect.DeepEqual(ouputTokenStream, expectedTokenStream) { + t.Errorf("expected %#v got %#v", expectedTokenStream[3], ouputTokenStream[3]) + } +} + +func BenchmarkSnowballStemmer(b *testing.B) { + + inputTokenStream := analysis.TokenStream{ + &analysis.Token{ + Term: []byte("walking"), + }, + &analysis.Token{ + Term: []byte("talked"), + }, + &analysis.Token{ + Term: []byte("business"), + }, + &analysis.Token{ + Term: []byte("protected"), + KeyWord: true, + }, + &analysis.Token{ + Term: []byte("cat"), + }, + &analysis.Token{ + Term: []byte("done"), + }, + } + + filter := NewSnowballStemmer("english") + b.ResetTimer() + + for i := 0; i < b.N; i++ { + filter.Filter(inputTokenStream) + } + +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/token/unique/unique.go b/vendor/github.com/blevesearch/bleve/analysis/token/unique/unique.go new file mode 100644 index 0000000..f0d96c5 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/token/unique/unique.go @@ -0,0 +1,53 @@ +// Copyright (c) 2018 Couchbase, 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 unique + +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/registry" +) + +const Name = "unique" + +// UniqueTermFilter retains only the tokens which mark the first occurence of +// a term. Tokens whose term appears in a preceding token are dropped. +type UniqueTermFilter struct{} + +func NewUniqueTermFilter() *UniqueTermFilter { + return &UniqueTermFilter{} +} + +func (f *UniqueTermFilter) Filter(input analysis.TokenStream) analysis.TokenStream { + encounteredTerms := make(map[string]struct{}, len(input)/4) + j := 0 + for _, token := range input { + term := string(token.Term) + if _, ok := encounteredTerms[term]; ok { + continue + } + encounteredTerms[term] = struct{}{} + input[j] = token + j++ + } + return input[:j] +} + +func UniqueTermFilterConstructor(config map[string]interface{}, cache *registry.Cache) (analysis.TokenFilter, error) { + return NewUniqueTermFilter(), nil +} + +func init() { + registry.RegisterTokenFilter(Name, UniqueTermFilterConstructor) +} diff --git a/vendor/github.com/blevesearch/bleve/analysis/token/unique/unique_test.go b/vendor/github.com/blevesearch/bleve/analysis/token/unique/unique_test.go new file mode 100644 index 0000000..216d8f1 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/analysis/token/unique/unique_test.go @@ -0,0 +1,84 @@ +// Copyright (c) 2018 Couchbase, 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 unique + +import ( + "reflect" + "testing" + + "github.com/blevesearch/bleve/analysis" +) + +func TestUniqueTermFilter(t *testing.T) { + var tests = []struct { + input analysis.TokenStream + // expected indices of input which should be included in the output. We + // use indices instead of another TokenStream, since position/start/end + // should be preserved. + expectedIndices []int + }{ + { + input: tokenStream(), + expectedIndices: []int{}, + }, + { + input: tokenStream("a"), + expectedIndices: []int{0}, + }, + { + input: tokenStream("each", "term", "in", "this", "sentence", "is", "unique"), + expectedIndices: []int{0, 1, 2, 3, 4, 5, 6}, + }, + { + input: tokenStream("Lui", "è", "alto", "e", "lei", "è", "bassa"), + expectedIndices: []int{0, 1, 2, 3, 4, 6}, + }, + { + input: tokenStream("a", "a", "A", "a", "a", "A"), + expectedIndices: []int{0, 2}, + }, + } + uniqueTermFilter := NewUniqueTermFilter() + for _, test := range tests { + expected := subStream(test.input, test.expectedIndices) + actual := uniqueTermFilter.Filter(test.input) + if !reflect.DeepEqual(actual, expected) { + t.Errorf("expected %s \n\n got %s", expected, actual) + } + } +} + +func tokenStream(termStrs ...string) analysis.TokenStream { + tokenStream := make([]*analysis.Token, len(termStrs)) + index := 0 + for i, termStr := range termStrs { + tokenStream[i] = &analysis.Token{ + Term: []byte(termStr), + Position: i + 1, + Start: index, + End: index + len(termStr), + } + index += len(termStr) + } + return analysis.TokenStream(tokenStream) +} + +func subStream(stream analysis.TokenStream, indices []int) analysis.TokenStream { + result := make(analysis.TokenStream, len(indices)) + for i, index := range indices { + result[i] = stream[index] + } + return result +} diff --git a/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/index.go b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/index.go index 63ad5f3..c8925b4 100644 --- a/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/index.go +++ b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/index.go @@ -111,7 +111,7 @@ func getAllFiles(args []string, rv chan file) { func init() { RootCmd.AddCommand(indexCmd) - indexCmd.Flags().BoolVarP(&keepDir, "keepDir", "d", false, "Keep the directory in the dodcument id, defaults false.") + indexCmd.Flags().BoolVarP(&keepDir, "keepDir", "d", false, "Keep the directory in the document id, defaults false.") indexCmd.Flags().BoolVarP(&keepExt, "keepExt", "x", false, "Keep the extension in the document id, defaults false.") indexCmd.Flags().BoolVarP(&parseJSON, "json", "j", true, "Parse the contents as JSON, defaults true.") } diff --git a/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/query.go b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/query.go index 97aa364..e0babc8 100644 --- a/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/query.go +++ b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/query.go @@ -25,7 +25,7 @@ import ( var limit, skip, repeat int var explain, highlight, fields bool -var qtype, qfield string +var qtype, qfield, sortby string // queryCmd represents the query command var queryCmd = &cobra.Command{ @@ -46,6 +46,13 @@ var queryCmd = &cobra.Command{ if fields { req.Fields = []string{"*"} } + if sortby != "" { + if strings.Contains(sortby, ",") { + req.SortBy(strings.Split(sortby, ",")) + } else { + req.SortBy([]string{sortby}) + } + } res, err := idx.Search(req) if err != nil { return fmt.Errorf("error running query: %v", err) @@ -90,4 +97,5 @@ func init() { queryCmd.Flags().BoolVar(&fields, "fields", false, "Load stored fields, default false.") queryCmd.Flags().StringVarP(&qtype, "type", "t", "query_string", "Type of query to run, defaults to 'query_string'") queryCmd.Flags().StringVarP(&qfield, "field", "f", "", "Restrict query to field, by default no restriction, not applicable to query_string queries.") + queryCmd.Flags().StringVarP(&sortby, "sort-by", "b", "", "Sort by field.") } diff --git a/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/scorch.go b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/scorch.go new file mode 100644 index 0000000..781db70 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/scorch.go @@ -0,0 +1,25 @@ +// Copyright (c) 2017 Couchbase, 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 cmd + +import ( + "github.com/blevesearch/bleve/cmd/bleve/cmd/scorch" +) + +// make scorch command-line tool a bleve sub-command + +func init() { + RootCmd.AddCommand(scorch.RootCmd) +} diff --git a/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/scorch/ascii.go b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/scorch/ascii.go new file mode 100644 index 0000000..34fb1ed --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/scorch/ascii.go @@ -0,0 +1,59 @@ +// Copyright (c) 2017 Couchbase, 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 scorch + +import ( + "fmt" + "strconv" + + "github.com/blevesearch/bleve/index/scorch/mergeplan" + "github.com/spf13/cobra" +) + +// asciiCmd represents the ascii command +var asciiCmd = &cobra.Command{ + Use: "ascii", + Short: "ascii prints an ascii representation of the segments in a snapshot", + Long: `The ascii command prints an ascii representation of the segments in a given snapshot.`, + RunE: func(cmd *cobra.Command, args []string) error { + + if len(args) < 2 { + return fmt.Errorf("snapshot epoch required") + } else if len(args) < 3 { + snapshotEpoch, err := strconv.ParseUint(args[1], 10, 64) + if err != nil { + return err + } + snapshot, err := index.LoadSnapshot(snapshotEpoch) + if err != nil { + return err + } + segments := snapshot.Segments() + var mergePlanSegments []mergeplan.Segment + for _, v := range segments { + mergePlanSegments = append(mergePlanSegments, v) + } + + str := mergeplan.ToBarChart(args[1], 25, mergePlanSegments, nil) + fmt.Printf("%s\n", str) + } + + return nil + }, +} + +func init() { + RootCmd.AddCommand(asciiCmd) +} diff --git a/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/scorch/deleted.go b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/scorch/deleted.go new file mode 100644 index 0000000..cb2a924 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/scorch/deleted.go @@ -0,0 +1,55 @@ +// Copyright (c) 2017 Couchbase, 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 scorch + +import ( + "fmt" + "strconv" + + "github.com/spf13/cobra" +) + +// deletedCmd represents the deleted command +var deletedCmd = &cobra.Command{ + Use: "deleted", + Short: "deleted prints the deleted bitmap for segments in the index snapshot", + Long: `The delete command prints the deleted bitmap for segments in the index snapshot.`, + RunE: func(cmd *cobra.Command, args []string) error { + + if len(args) < 2 { + return fmt.Errorf("snapshot epoch required") + } else if len(args) < 3 { + snapshotEpoch, err := strconv.ParseUint(args[1], 10, 64) + if err != nil { + return err + } + snapshot, err := index.LoadSnapshot(snapshotEpoch) + if err != nil { + return err + } + segments := snapshot.Segments() + for i, segmentSnap := range segments { + deleted := segmentSnap.Deleted() + fmt.Printf("%d %v\n", i, deleted) + } + } + + return nil + }, +} + +func init() { + RootCmd.AddCommand(deletedCmd) +} diff --git a/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/scorch/info.go b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/scorch/info.go new file mode 100644 index 0000000..2b4674f --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/scorch/info.go @@ -0,0 +1,59 @@ +// Copyright (c) 2017 Couchbase, 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 scorch + +import ( + "fmt" + + "github.com/spf13/cobra" +) + +// dictCmd represents the dict command +var infoCmd = &cobra.Command{ + Use: "info", + Short: "info prints basic info about the index", + Long: `The info command prints basic info about the index.`, + RunE: func(cmd *cobra.Command, args []string) error { + + reader, err := index.Reader() + if err != nil { + return err + } + + count, err := reader.DocCount() + if err != nil { + return err + } + + fmt.Printf("count: %d\n", count) + + // var numSnapshots int + // var rootSnapshot uint64 + // index.VisitBoltSnapshots(func(snapshotEpoch uint64) error { + // if rootSnapshot == 0 { + // rootSnapshot = snapshotEpoch + // } + // numSnapshots++ + // return nil + // }) + // fmt.Printf("has %d snapshot(s), root: %d\n", numSnapshots, rootSnapshot) + + return nil + }, +} + +func init() { + RootCmd.AddCommand(infoCmd) +} diff --git a/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/scorch/internal.go b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/scorch/internal.go new file mode 100644 index 0000000..dc94979 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/scorch/internal.go @@ -0,0 +1,61 @@ +// Copyright (c) 2017 Couchbase, 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 scorch + +import ( + "fmt" + "strconv" + + "github.com/spf13/cobra" +) + +var ascii bool + +// internalCmd represents the internal command +var internalCmd = &cobra.Command{ + Use: "internal", + Short: "internal prints the internal k/v pairs in a snapshot", + Long: `The internal command prints the internal k/v pairs in a snapshot.`, + RunE: func(cmd *cobra.Command, args []string) error { + + if len(args) < 2 { + return fmt.Errorf("snapshot epoch required") + } else if len(args) < 3 { + snapshotEpoch, err := strconv.ParseUint(args[1], 10, 64) + if err != nil { + return err + } + snapshot, err := index.LoadSnapshot(snapshotEpoch) + if err != nil { + return err + } + internal := snapshot.Internal() + for k, v := range internal { + if ascii { + fmt.Printf("%s %s\n", k, string(v)) + } else { + fmt.Printf("%x %x\n", k, v) + } + } + } + + return nil + }, +} + +func init() { + RootCmd.AddCommand(internalCmd) + internalCmd.Flags().BoolVarP(&ascii, "ascii", "a", false, "print key/value in ascii") +} diff --git a/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/scorch/root.go b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/scorch/root.go new file mode 100644 index 0000000..b27992e --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/scorch/root.go @@ -0,0 +1,70 @@ +// Copyright (c) 2017 Couchbase, 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 scorch + +import ( + "fmt" + "os" + + "github.com/blevesearch/bleve/index/scorch" + "github.com/spf13/cobra" +) + +var index *scorch.Scorch + +// RootCmd represents the base command when called without any subcommands +var RootCmd = &cobra.Command{ + Use: "scorch", + Short: "command-line tool to interact with a scorch index", + Long: `Scorch is a command-line tool to interact with a scorch index.`, + PersistentPreRunE: func(cmd *cobra.Command, args []string) error { + + if len(args) < 1 { + return fmt.Errorf("must specify path to scorch index") + } + + readOnly := true + config := map[string]interface{}{ + "read_only": readOnly, + "path": args[0], + } + + idx, err := scorch.NewScorch(scorch.Name, config, nil) + if err != nil { + return err + } + + err = idx.Open() + if err != nil { + return fmt.Errorf("error opening: %v", err) + } + + index = idx.(*scorch.Scorch) + + return nil + }, + PersistentPostRunE: func(cmd *cobra.Command, args []string) error { + return nil + }, +} + +// Execute adds all child commands to the root command sets flags appropriately. +// This is called by main.main(). It only needs to happen once to the rootCmd. +func Execute() { + if err := RootCmd.Execute(); err != nil { + fmt.Println(err) + os.Exit(-1) + } +} diff --git a/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/scorch/snapshot.go b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/scorch/snapshot.go new file mode 100644 index 0000000..bb035ce --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/scorch/snapshot.go @@ -0,0 +1,64 @@ +// Copyright (c) 2017 Couchbase, 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 scorch + +import ( + "fmt" + "strconv" + + "github.com/blevesearch/bleve/index/scorch/segment/zap" + "github.com/spf13/cobra" +) + +// snapshotCmd represents the snapshot command +var snapshotCmd = &cobra.Command{ + Use: "snapshot", + Short: "info prints details about the snapshots in the index", + Long: `The snapshot command prints details about the snapshots in the index.`, + RunE: func(cmd *cobra.Command, args []string) error { + + if len(args) < 2 { + snapshotEpochs, err := index.RootBoltSnapshotEpochs() + if err != nil { + return err + } + for _, snapshotEpoch := range snapshotEpochs { + fmt.Printf("%d\n", snapshotEpoch) + } + } else if len(args) < 3 { + snapshotEpoch, err := strconv.ParseUint(args[1], 10, 64) + if err != nil { + return err + } + snapshot, err := index.LoadSnapshot(snapshotEpoch) + if err != nil { + return err + } + segments := snapshot.Segments() + for i, segmentSnap := range segments { + segment := segmentSnap.Segment() + if segment, ok := segment.(*zap.Segment); ok { + fmt.Printf("%d %s\n", i, segment.Path()) + } + } + } + + return nil + }, +} + +func init() { + RootCmd.AddCommand(snapshotCmd) +} diff --git a/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/zap.go b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/zap.go new file mode 100644 index 0000000..b84d5f2 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/zap.go @@ -0,0 +1,25 @@ +// Copyright (c) 2017 Couchbase, 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 cmd + +import ( + "github.com/blevesearch/bleve/cmd/bleve/cmd/zap" +) + +// make zap command-line tool a bleve sub-command + +func init() { + RootCmd.AddCommand(zap.RootCmd) +} diff --git a/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/zap/dict.go b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/zap/dict.go new file mode 100644 index 0000000..e80be36 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/zap/dict.go @@ -0,0 +1,81 @@ +// Copyright (c) 2017 Couchbase, 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 zap + +import ( + "encoding/binary" + "fmt" + "math" + + "github.com/blevesearch/bleve/index/scorch/segment/zap" + "github.com/couchbase/vellum" + "github.com/spf13/cobra" +) + +// dictCmd represents the dict command +var dictCmd = &cobra.Command{ + Use: "dict [path] [field]", + Short: "dict prints the term dictionary for the specified field", + Long: `The dict command lets you print the term dictionary for the specified field.`, + RunE: func(cmd *cobra.Command, args []string) error { + if len(args) < 2 { + return fmt.Errorf("must specify field") + } + + data := segment.Data() + + addr, err := segment.DictAddr(args[1]) + if err != nil { + return fmt.Errorf("error determing address: %v", err) + } + fmt.Printf("dictionary for field starts at %d (%x)\n", addr, addr) + + vellumLen, read := binary.Uvarint(data[addr : addr+binary.MaxVarintLen64]) + fmt.Printf("vellum length: %d\n", vellumLen) + fstBytes := data[addr+uint64(read) : addr+uint64(read)+vellumLen] + fmt.Printf("raw vellum data % x\n", fstBytes) + fmt.Printf("dictionary:\n\n") + if fstBytes != nil { + fst, err := vellum.Load(fstBytes) + if err != nil { + return fmt.Errorf("dictionary field %s vellum err: %v", args[1], err) + } + + itr, err := fst.Iterator(nil, nil) + for err == nil { + currTerm, currVal := itr.Current() + extra := "" + if currVal&zap.FSTValEncodingMask == zap.FSTValEncoding1Hit { + docNum, normBits := zap.FSTValDecode1Hit(currVal) + norm := math.Float32frombits(uint32(normBits)) + extra = fmt.Sprintf("-- docNum: %d, norm: %f", docNum, norm) + } + + fmt.Printf("%s - %d (%x) %s\n", currTerm, currVal, currVal, extra) + err = itr.Next() + } + if err != nil && err != vellum.ErrIteratorDone { + return fmt.Errorf("error iterating dictionary: %v", err) + } + + } + + return nil + }, +} + +func init() { + RootCmd.AddCommand(dictCmd) +} diff --git a/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/zap/docvalue.go b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/zap/docvalue.go new file mode 100644 index 0000000..dcfa58d --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/zap/docvalue.go @@ -0,0 +1,271 @@ +// Copyright (c) 2017 Couchbase, 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 zap + +import ( + "bytes" + "encoding/binary" + "fmt" + "log" + "math" + "sort" + "strconv" + + "github.com/blevesearch/bleve/index/scorch/segment/zap" + "github.com/golang/snappy" + "github.com/spf13/cobra" +) + +// docvalueCmd represents the docvalue command +var docvalueCmd = &cobra.Command{ + Use: "docvalue [path] optional optional", + Short: "docvalue prints the docvalue details by field, and docNum", + Long: `The docvalue command lets you explore the docValues in order of field and by doc number.`, + RunE: func(cmd *cobra.Command, args []string) error { + if len(args) < 1 { + return fmt.Errorf("must specify index file path") + } + + data := segment.Data() + crcOffset := len(data) - 4 + verOffset := crcOffset - 4 + chunkOffset := verOffset - 4 + fieldsOffset := chunkOffset - 16 + fieldsIndexOffset := binary.BigEndian.Uint64(data[fieldsOffset : fieldsOffset+8]) + fieldsIndexEnd := uint64(len(data) - zap.FooterSize) + + // iterate through fields index + var fieldInv []string + var id, read, fieldLoc uint64 + var nread int + for fieldsIndexOffset+(8*id) < fieldsIndexEnd { + addr := binary.BigEndian.Uint64(data[fieldsIndexOffset+(8*id) : fieldsIndexOffset+(8*id)+8]) + var n uint64 + _, read := binary.Uvarint(data[addr+n : fieldsIndexEnd]) + n += uint64(read) + + var nameLen uint64 + nameLen, read = binary.Uvarint(data[addr+n : fieldsIndexEnd]) + n += uint64(read) + + name := string(data[addr+n : addr+n+nameLen]) + + id++ + fieldInv = append(fieldInv, name) + } + + dvLoc := segment.DocValueOffset() + fieldDvLoc, total, fdvread := uint64(0), uint64(0), int(0) + + var fieldName string + var fieldID uint16 + + // if no fields are specified then print the docValue offsets for all fields set + for id, field := range fieldInv { + fieldLoc, fdvread = binary.Uvarint(data[dvLoc+read : dvLoc+read+binary.MaxVarintLen64]) + if fdvread <= 0 { + return fmt.Errorf("loadDvIterators: failed to read the docvalue offsets for field %d", fieldID) + } + read += uint64(fdvread) + if fieldLoc == math.MaxUint64 { + fmt.Printf("fieldID: %d '%s' docvalue at %d (%x) not persisted \n", id, field, fieldLoc, fieldLoc) + continue + } + + var offset, clen, numChunks uint64 + numChunks, nread = binary.Uvarint(data[fieldLoc : fieldLoc+binary.MaxVarintLen64]) + if nread <= 0 { + return fmt.Errorf("failed to read the field "+ + "doc values for field %s", fieldName) + } + offset += uint64(nread) + + // read the length of chunks + totalSize := uint64(0) + chunkLens := make([]uint64, numChunks) + for i := 0; i < int(numChunks); i++ { + clen, nread = binary.Uvarint(data[fieldLoc+offset : fieldLoc+offset+binary.MaxVarintLen64]) + if nread <= 0 { + return fmt.Errorf("corrupted chunk length for chunk number: %d", i) + } + + chunkLens[i] = clen + totalSize += clen + offset += uint64(nread) + } + + total += totalSize + if len(args) == 1 { + // if no field args are given, then print out the dv locations for all fields + mbsize := float64(totalSize) / (1024 * 1024) + fmt.Printf("fieldID: %d '%s' docvalue at %d (%x) numChunks %d diskSize %.3f MB\n", id, field, fieldLoc, fieldLoc, numChunks, mbsize) + continue + } + + if field != args[1] { + continue + } else { + fieldDvLoc = fieldLoc + fieldName = field + fieldID = uint16(id) + } + + } + + mbsize := float64(total) / (1024 * 1024) + fmt.Printf("Total Doc Values Size on Disk: %.3f MB\n", mbsize) + + // done with the fields dv locs printing for the given zap file + if len(args) == 1 { + return nil + } + + if fieldName == "" || fieldDvLoc == 0 { + return fmt.Errorf("no field found for given field arg: %s", args[1]) + } + + // read the number of chunks + var offset, clen, numChunks uint64 + numChunks, nread = binary.Uvarint(data[fieldDvLoc : fieldDvLoc+binary.MaxVarintLen64]) + if nread <= 0 { + return fmt.Errorf("failed to read the field "+ + "doc values for field %s", fieldName) + } + offset += uint64(nread) + + if len(args) == 2 { + fmt.Printf("number of chunks: %d\n", numChunks) + } + + // read the length of chunks + chunkLens := make([]uint64, numChunks) + for i := 0; i < int(numChunks); i++ { + clen, nread = binary.Uvarint(data[fieldDvLoc+offset : fieldDvLoc+offset+binary.MaxVarintLen64]) + if nread <= 0 { + return fmt.Errorf("corrupted chunk length for chunk number: %d", i) + } + + chunkLens[i] = clen + offset += uint64(nread) + if len(args) == 2 { + fmt.Printf("chunk: %d size: %d \n", i, clen) + } + /* + TODO => dump all chunk headers?? + if len(args) == 3 && args[2] == ">" { + dumpChunkDocNums(data, ) + + }*/ + } + + if len(args) == 2 { + return nil + } + + localDocNum, err := strconv.Atoi(args[2]) + if err != nil { + return fmt.Errorf("unable to parse doc number: %v", err) + } + + if localDocNum >= int(segment.NumDocs()) { + return fmt.Errorf("invalid doc number %d (valid 0 - %d)", localDocNum, segment.NumDocs()-1) + } + + // find the chunkNumber where the docValues are stored + docInChunk := uint64(localDocNum) / uint64(segment.ChunkFactor()) + + if numChunks < docInChunk { + return fmt.Errorf("no chunk exists for chunk number: %d for localDocNum: %d", docInChunk, localDocNum) + } + + destChunkDataLoc := fieldDvLoc + offset + for i := 0; i < int(docInChunk); i++ { + destChunkDataLoc += chunkLens[i] + } + curChunkSize := chunkLens[docInChunk] + + // read the number of docs reside in the chunk + numDocs := uint64(0) + numDocs, nread = binary.Uvarint(data[destChunkDataLoc : destChunkDataLoc+binary.MaxVarintLen64]) + if nread <= 0 { + return fmt.Errorf("failed to read the target chunk: %d", docInChunk) + } + chunkMetaLoc := destChunkDataLoc + uint64(nread) + + offset = uint64(0) + curChunkHeader := make([]zap.MetaData, int(numDocs)) + for i := 0; i < int(numDocs); i++ { + curChunkHeader[i].DocNum, nread = binary.Uvarint(data[chunkMetaLoc+offset : chunkMetaLoc+offset+binary.MaxVarintLen64]) + offset += uint64(nread) + curChunkHeader[i].DocDvOffset, nread = binary.Uvarint(data[chunkMetaLoc+offset : chunkMetaLoc+offset+binary.MaxVarintLen64]) + offset += uint64(nread) + } + + compressedDataLoc := chunkMetaLoc + offset + dataLength := destChunkDataLoc + curChunkSize - compressedDataLoc + curChunkData := data[compressedDataLoc : compressedDataLoc+dataLength] + + start, length := getDocValueLocs(uint64(localDocNum), curChunkHeader) + if start == math.MaxUint64 || length == math.MaxUint64 { + fmt.Printf("no field values found for localDocNum: %d\n", localDocNum) + fmt.Printf("Try docNums present in chunk: %s\n", metaDataDocNums(curChunkHeader)) + return nil + } + // uncompress the already loaded data + uncompressed, err := snappy.Decode(nil, curChunkData) + if err != nil { + log.Printf("snappy err %+v ", err) + return err + } + + var termSeparator byte = 0xff + var termSeparatorSplitSlice = []byte{termSeparator} + // pick the terms for the given docNum + uncompressed = uncompressed[start : start+length] + for { + i := bytes.Index(uncompressed, termSeparatorSplitSlice) + if i < 0 { + break + } + + fmt.Printf(" %s ", uncompressed[0:i]) + uncompressed = uncompressed[i+1:] + } + fmt.Printf(" \n ") + return nil + }, +} + +func getDocValueLocs(docNum uint64, metaHeader []zap.MetaData) (uint64, uint64) { + i := sort.Search(len(metaHeader), func(i int) bool { + return metaHeader[i].DocNum >= docNum + }) + if i < len(metaHeader) && metaHeader[i].DocNum == docNum { + return zap.ReadDocValueBoundary(i, metaHeader) + } + return math.MaxUint64, math.MaxUint64 +} + +func metaDataDocNums(metaHeader []zap.MetaData) string { + docNums := "" + for _, meta := range metaHeader { + docNums += fmt.Sprintf("%d", meta.DocNum) + ", " + } + return docNums +} + +func init() { + RootCmd.AddCommand(docvalueCmd) +} diff --git a/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/zap/explore.go b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/zap/explore.go new file mode 100644 index 0000000..225b737 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/zap/explore.go @@ -0,0 +1,148 @@ +// Copyright (c) 2017 Couchbase, 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 zap + +import ( + "encoding/binary" + "fmt" + "math" + + "github.com/RoaringBitmap/roaring" + "github.com/blevesearch/bleve/index/scorch/segment/zap" + "github.com/couchbase/vellum" + "github.com/spf13/cobra" +) + +// exploreCmd represents the explore command +var exploreCmd = &cobra.Command{ + Use: "explore [path] [field] ", + Short: "explores the index by field, then term (optional), and then docNum (optional)", + Long: `The explore command lets you explore the index in order of field, then optionally by term, then optionally again by doc number.`, + RunE: func(cmd *cobra.Command, args []string) error { + if len(args) < 2 { + return fmt.Errorf("must specify field") + } + + data := segment.Data() + + addr, err := segment.DictAddr(args[1]) + if err != nil { + return fmt.Errorf("error determing address: %v", err) + } + fmt.Printf("dictionary for field starts at %d (%x)\n", addr, addr) + + vellumLen, read := binary.Uvarint(data[addr : addr+binary.MaxVarintLen64]) + fmt.Printf("vellum length: %d\n", vellumLen) + fstBytes := data[addr+uint64(read) : addr+uint64(read)+vellumLen] + fmt.Printf("raw vellum data % x\n", fstBytes) + + if len(args) >= 3 { + if fstBytes != nil { + fst, err := vellum.Load(fstBytes) + if err != nil { + return fmt.Errorf("dictionary field %s vellum err: %v", args[1], err) + } + postingsAddr, exists, err := fst.Get([]byte(args[2])) + if err != nil { + return fmt.Errorf("error looking for term : %v", err) + } + if exists { + fmt.Printf("FST val is %d (%x)\n", postingsAddr, postingsAddr) + + if postingsAddr&zap.FSTValEncodingMask == zap.FSTValEncoding1Hit { + docNum, normBits := zap.FSTValDecode1Hit(postingsAddr) + norm := math.Float32frombits(uint32(normBits)) + fmt.Printf("Posting List is 1-hit encoded, docNum: %d, norm: %f\n", + docNum, norm) + return nil + } + + if postingsAddr&zap.FSTValEncodingMask != zap.FSTValEncodingGeneral { + return fmt.Errorf("unknown fst val encoding") + } + + var n uint64 + freqAddr, read := binary.Uvarint(data[postingsAddr : postingsAddr+binary.MaxVarintLen64]) + n += uint64(read) + + var locAddr uint64 + locAddr, read = binary.Uvarint(data[postingsAddr+n : postingsAddr+n+binary.MaxVarintLen64]) + n += uint64(read) + + var locBitmapAddr uint64 + locBitmapAddr, read = binary.Uvarint(data[postingsAddr+n : postingsAddr+n+binary.MaxVarintLen64]) + n += uint64(read) + + var postingListLen uint64 + postingListLen, read = binary.Uvarint(data[postingsAddr+n : postingsAddr+n+binary.MaxVarintLen64]) + n += uint64(read) + + fmt.Printf("Posting List Length: %d\n", postingListLen) + bitmap := roaring.New() + _, err = bitmap.FromBuffer(data[postingsAddr+n : postingsAddr+n+postingListLen]) + if err != nil { + return err + } + fmt.Printf("Posting List: %v\n", bitmap) + + fmt.Printf("Freq details at: %d (%x)\n", freqAddr, freqAddr) + numChunks, r2 := binary.Uvarint(data[freqAddr : freqAddr+binary.MaxVarintLen64]) + n = uint64(r2) + + var freqOffsets []uint64 + for j := uint64(0); j < numChunks; j++ { + chunkLen, r3 := binary.Uvarint(data[freqAddr+n : freqAddr+n+binary.MaxVarintLen64]) + n += uint64(r3) + freqOffsets = append(freqOffsets, chunkLen) + } + running := freqAddr + n + for k, offset := range freqOffsets { + fmt.Printf("freq chunk: %d, len %d, start at %d (%x) end %d (%x)\n", k, offset, running, running, running+offset, running+offset) + running += offset + } + + fmt.Printf("Loc details at: %d (%x)\n", locAddr, locAddr) + numLChunks, r4 := binary.Uvarint(data[locAddr : locAddr+binary.MaxVarintLen64]) + n = uint64(r4) + fmt.Printf("there are %d loc chunks\n", numLChunks) + + var locOffsets []uint64 + for j := uint64(0); j < numLChunks; j++ { + lchunkLen, r4 := binary.Uvarint(data[locAddr+n : locAddr+n+binary.MaxVarintLen64]) + n += uint64(r4) + locOffsets = append(locOffsets, lchunkLen) + } + + running2 := locAddr + n + for k, offset := range locOffsets { + fmt.Printf("loc chunk: %d, len %d(%x), start at %d (%x) end %d (%x)\n", k, offset, offset, running2, running2, running2+offset, running2+offset) + running2 += offset + } + + fmt.Printf("Loc Bitmap at: %d (%x)\n", locBitmapAddr, locBitmapAddr) + + } else { + fmt.Printf("dictionary does not contain term '%s'\n", args[2]) + } + } + } + + return nil + }, +} + +func init() { + RootCmd.AddCommand(exploreCmd) +} diff --git a/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/zap/fields.go b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/zap/fields.go new file mode 100644 index 0000000..cf8cc3d --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/zap/fields.go @@ -0,0 +1,66 @@ +// Copyright (c) 2017 Couchbase, 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 zap + +import ( + "encoding/binary" + "fmt" + + "github.com/blevesearch/bleve/index/scorch/segment/zap" + "github.com/spf13/cobra" +) + +// fieldsCmd represents the fields command +var fieldsCmd = &cobra.Command{ + Use: "fields [path]", + Short: "fields prints the fields in the specified file", + Long: `The fields command lets you print the fields in the specified file.`, + RunE: func(cmd *cobra.Command, args []string) error { + + data := segment.Data() + + crcOffset := len(data) - 4 + verOffset := crcOffset - 4 + chunkOffset := verOffset - 4 + fieldsOffset := chunkOffset - 16 + fieldsIndexOffset := binary.BigEndian.Uint64(data[fieldsOffset : fieldsOffset+8]) + fieldsIndexEnd := uint64(len(data) - zap.FooterSize) + + // iterate through fields index + var fieldID uint64 + for fieldsIndexOffset+(8*fieldID) < fieldsIndexEnd { + addr := binary.BigEndian.Uint64(data[fieldsIndexOffset+(8*fieldID) : fieldsIndexOffset+(8*fieldID)+8]) + var n uint64 + dictLoc, read := binary.Uvarint(data[addr+n : fieldsIndexEnd]) + n += uint64(read) + + var nameLen uint64 + nameLen, read = binary.Uvarint(data[addr+n : fieldsIndexEnd]) + n += uint64(read) + + name := string(data[addr+n : addr+n+nameLen]) + + fmt.Printf("field %d '%s' starts at %d (%x)\n", fieldID, name, dictLoc, dictLoc) + + fieldID++ + } + + return nil + }, +} + +func init() { + RootCmd.AddCommand(fieldsCmd) +} diff --git a/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/zap/footer.go b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/zap/footer.go new file mode 100644 index 0000000..96078de --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/zap/footer.go @@ -0,0 +1,44 @@ +// Copyright (c) 2017 Couchbase, 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 zap + +import ( + "fmt" + + "github.com/spf13/cobra" +) + +// footerCmd represents the footer command +var footerCmd = &cobra.Command{ + Use: "footer [path]", + Short: "prints the contents of the zap footer", + Long: `The footer command will print the contents of the footer.`, + RunE: func(cmd *cobra.Command, args []string) error { + data := segment.Data() + fmt.Printf("Length: %d\n", len(data)) + fmt.Printf("CRC: %#x\n", segment.CRC()) + fmt.Printf("Version: %d\n", segment.Version()) + fmt.Printf("Chunk Factor: %d\n", segment.ChunkFactor()) + fmt.Printf("Fields Idx: %d (%#x)\n", segment.FieldsIndexOffset(), segment.FieldsIndexOffset()) + fmt.Printf("Stored Idx: %d (%#x)\n", segment.StoredIndexOffset(), segment.StoredIndexOffset()) + fmt.Printf("DocValue Idx: %d (%#x)\n", segment.DocValueOffset(), segment.DocValueOffset()) + fmt.Printf("Num Docs: %d\n", segment.NumDocs()) + return nil + }, +} + +func init() { + RootCmd.AddCommand(footerCmd) +} diff --git a/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/zap/root.go b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/zap/root.go new file mode 100644 index 0000000..ee2b626 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/zap/root.go @@ -0,0 +1,58 @@ +// Copyright (c) 2017 Couchbase, 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 zap + +import ( + "fmt" + "os" + + "github.com/blevesearch/bleve/index/scorch/segment/zap" + "github.com/spf13/cobra" +) + +var segment *zap.Segment + +// RootCmd represents the base command when called without any subcommands +var RootCmd = &cobra.Command{ + Use: "zap", + Short: "command-line tool to interact with a zap file", + Long: `Zap is a command-line tool to interact with a zap file.`, + PersistentPreRunE: func(cmd *cobra.Command, args []string) error { + + if len(args) < 1 { + return fmt.Errorf("must specify path to zap file") + } + + segInf, err := zap.Open(args[0]) + if err != nil { + return fmt.Errorf("error opening zap file: %v", err) + } + segment = segInf.(*zap.Segment) + + return nil + }, + PersistentPostRunE: func(cmd *cobra.Command, args []string) error { + return nil + }, +} + +// Execute adds all child commands to the root command sets flags appropriately. +// This is called by main.main(). It only needs to happen once to the rootCmd. +func Execute() { + if err := RootCmd.Execute(); err != nil { + fmt.Println(err) + os.Exit(-1) + } +} diff --git a/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/zap/stored.go b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/zap/stored.go new file mode 100644 index 0000000..ba1143c --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/cmd/bleve/cmd/zap/stored.go @@ -0,0 +1,73 @@ +// Copyright (c) 2017 Couchbase, 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 zap + +import ( + "encoding/binary" + "fmt" + "strconv" + + "github.com/golang/snappy" + "github.com/spf13/cobra" +) + +// storedCmd represents the stored command +var storedCmd = &cobra.Command{ + Use: "stored [path] [docNum]", + Short: "prints the stored section for a doc number", + Long: `The stored command will print the raw stored data bytes for the specified document number.`, + RunE: func(cmd *cobra.Command, args []string) error { + if len(args) < 2 { + return fmt.Errorf("must specify doc number") + } + docNum, err := strconv.Atoi(args[1]) + if err != nil { + return fmt.Errorf("unable to parse doc number: %v", err) + } + if docNum >= int(segment.NumDocs()) { + return fmt.Errorf("invalid doc number %d (valid 0 - %d)", docNum, segment.NumDocs()-1) + } + data := segment.Data() + storedIdx := segment.StoredIndexOffset() + // read docNum entry in the index + indexPos := storedIdx + (8 * uint64(docNum)) + storedStartAddr := binary.BigEndian.Uint64(data[indexPos : indexPos+8]) + fmt.Printf("Stored field starts at %d (%#x)\n", storedStartAddr, storedStartAddr) + + var n uint64 + metaLen, read := binary.Uvarint(data[storedStartAddr : storedStartAddr+binary.MaxVarintLen64]) + n += uint64(read) + fmt.Printf("Meta Len: %d\n", metaLen) + var dataLen uint64 + dataLen, read = binary.Uvarint(data[storedStartAddr+n : storedStartAddr+n+binary.MaxVarintLen64]) + n += uint64(read) + fmt.Printf("Data Len: %d\n", dataLen) + meta := data[storedStartAddr+n : storedStartAddr+n+metaLen] + fmt.Printf("Raw meta: % x\n", meta) + raw := data[storedStartAddr+n+metaLen : storedStartAddr+n+metaLen+dataLen] + fmt.Printf("Raw data (len %d): % x\n", len(raw), raw) + uncompressed, err := snappy.Decode(nil, raw) + if err != nil { + panic(err) + } + fmt.Printf("Uncompressed data (len %d): % x\n", len(uncompressed), uncompressed) + + return nil + }, +} + +func init() { + RootCmd.AddCommand(storedCmd) +} diff --git a/vendor/github.com/blevesearch/bleve/config.go b/vendor/github.com/blevesearch/bleve/config.go index 74d407f..482efb4 100644 --- a/vendor/github.com/blevesearch/bleve/config.go +++ b/vendor/github.com/blevesearch/bleve/config.go @@ -25,6 +25,9 @@ import ( "github.com/blevesearch/bleve/index/upsidedown" "github.com/blevesearch/bleve/registry" "github.com/blevesearch/bleve/search/highlight/highlighter/html" + + // force import of scorch so its accessible by default + _ "github.com/blevesearch/bleve/index/scorch" ) var bleveExpVar = expvar.NewMap("bleve") diff --git a/vendor/github.com/blevesearch/bleve/config/config.go b/vendor/github.com/blevesearch/bleve/config/config.go index c4c5e91..ad0bdcb 100644 --- a/vendor/github.com/blevesearch/bleve/config/config.go +++ b/vendor/github.com/blevesearch/bleve/config/config.go @@ -75,19 +75,30 @@ import ( _ "github.com/blevesearch/bleve/analysis/lang/cjk" _ "github.com/blevesearch/bleve/analysis/lang/ckb" _ "github.com/blevesearch/bleve/analysis/lang/cs" + _ "github.com/blevesearch/bleve/analysis/lang/da" + _ "github.com/blevesearch/bleve/analysis/lang/de" _ "github.com/blevesearch/bleve/analysis/lang/el" _ "github.com/blevesearch/bleve/analysis/lang/en" + _ "github.com/blevesearch/bleve/analysis/lang/es" _ "github.com/blevesearch/bleve/analysis/lang/eu" _ "github.com/blevesearch/bleve/analysis/lang/fa" + _ "github.com/blevesearch/bleve/analysis/lang/fi" _ "github.com/blevesearch/bleve/analysis/lang/fr" _ "github.com/blevesearch/bleve/analysis/lang/ga" _ "github.com/blevesearch/bleve/analysis/lang/gl" _ "github.com/blevesearch/bleve/analysis/lang/hi" + _ "github.com/blevesearch/bleve/analysis/lang/hu" _ "github.com/blevesearch/bleve/analysis/lang/hy" _ "github.com/blevesearch/bleve/analysis/lang/id" _ "github.com/blevesearch/bleve/analysis/lang/in" _ "github.com/blevesearch/bleve/analysis/lang/it" + _ "github.com/blevesearch/bleve/analysis/lang/nl" + _ "github.com/blevesearch/bleve/analysis/lang/no" _ "github.com/blevesearch/bleve/analysis/lang/pt" + _ "github.com/blevesearch/bleve/analysis/lang/ro" + _ "github.com/blevesearch/bleve/analysis/lang/ru" + _ "github.com/blevesearch/bleve/analysis/lang/sv" + _ "github.com/blevesearch/bleve/analysis/lang/tr" // kv stores _ "github.com/blevesearch/bleve/index/store/boltdb" diff --git a/vendor/github.com/blevesearch/bleve/document/document.go b/vendor/github.com/blevesearch/bleve/document/document.go index ed36b12..921098b 100644 --- a/vendor/github.com/blevesearch/bleve/document/document.go +++ b/vendor/github.com/blevesearch/bleve/document/document.go @@ -14,13 +14,24 @@ package document -import "fmt" +import ( + "fmt" + "reflect" + + "github.com/blevesearch/bleve/size" +) + +var reflectStaticSizeDocument int + +func init() { + var d Document + reflectStaticSizeDocument = int(reflect.TypeOf(d).Size()) +} type Document struct { ID string `json:"id"` Fields []Field `json:"fields"` CompositeFields []*CompositeField - Number uint64 `json:"-"` } func NewDocument(id string) *Document { @@ -31,6 +42,13 @@ func NewDocument(id string) *Document { } } +func (d *Document) Size() int { + return reflectStaticSizeDocument + size.SizeOfPtr + + len(d.ID) + + len(d.Fields)*size.SizeOfPtr + + len(d.CompositeFields)*(size.SizeOfPtr+reflectStaticSizeCompositeField) +} + func (d *Document) AddField(f Field) *Document { switch f := f.(type) { case *CompositeField: diff --git a/vendor/github.com/blevesearch/bleve/document/field_boolean.go b/vendor/github.com/blevesearch/bleve/document/field_boolean.go index 668b431..c226374 100644 --- a/vendor/github.com/blevesearch/bleve/document/field_boolean.go +++ b/vendor/github.com/blevesearch/bleve/document/field_boolean.go @@ -20,7 +20,7 @@ import ( "github.com/blevesearch/bleve/analysis" ) -const DefaultBooleanIndexingOptions = StoreField | IndexField +const DefaultBooleanIndexingOptions = StoreField | IndexField | DocValues type BooleanField struct { name string diff --git a/vendor/github.com/blevesearch/bleve/document/field_composite.go b/vendor/github.com/blevesearch/bleve/document/field_composite.go index b41b1b8..e53cd45 100644 --- a/vendor/github.com/blevesearch/bleve/document/field_composite.go +++ b/vendor/github.com/blevesearch/bleve/document/field_composite.go @@ -15,9 +15,18 @@ package document import ( + "reflect" + "github.com/blevesearch/bleve/analysis" ) +var reflectStaticSizeCompositeField int + +func init() { + var cf CompositeField + reflectStaticSizeCompositeField = int(reflect.TypeOf(cf).Size()) +} + const DefaultCompositeIndexingOptions = IndexField type CompositeField struct { diff --git a/vendor/github.com/blevesearch/bleve/document/field_datetime.go b/vendor/github.com/blevesearch/bleve/document/field_datetime.go index 6783d53..1db068c 100644 --- a/vendor/github.com/blevesearch/bleve/document/field_datetime.go +++ b/vendor/github.com/blevesearch/bleve/document/field_datetime.go @@ -23,7 +23,7 @@ import ( "github.com/blevesearch/bleve/numeric" ) -const DefaultDateTimeIndexingOptions = StoreField | IndexField +const DefaultDateTimeIndexingOptions = StoreField | IndexField | DocValues const DefaultDateTimePrecisionStep uint = 4 var MinTimeRepresentable = time.Unix(0, math.MinInt64) diff --git a/vendor/github.com/blevesearch/bleve/document/field_numeric.go b/vendor/github.com/blevesearch/bleve/document/field_numeric.go index 7faae2b..e32993c 100644 --- a/vendor/github.com/blevesearch/bleve/document/field_numeric.go +++ b/vendor/github.com/blevesearch/bleve/document/field_numeric.go @@ -21,7 +21,7 @@ import ( "github.com/blevesearch/bleve/numeric" ) -const DefaultNumericIndexingOptions = StoreField | IndexField +const DefaultNumericIndexingOptions = StoreField | IndexField | DocValues const DefaultPrecisionStep uint = 4 diff --git a/vendor/github.com/blevesearch/bleve/document/field_text.go b/vendor/github.com/blevesearch/bleve/document/field_text.go index 37873d3..5f7a3ab 100644 --- a/vendor/github.com/blevesearch/bleve/document/field_text.go +++ b/vendor/github.com/blevesearch/bleve/document/field_text.go @@ -20,7 +20,7 @@ import ( "github.com/blevesearch/bleve/analysis" ) -const DefaultTextIndexingOptions = IndexField +const DefaultTextIndexingOptions = IndexField | DocValues type TextField struct { name string diff --git a/vendor/github.com/blevesearch/bleve/document/indexing_options.go b/vendor/github.com/blevesearch/bleve/document/indexing_options.go index 5d562c1..44498a8 100644 --- a/vendor/github.com/blevesearch/bleve/document/indexing_options.go +++ b/vendor/github.com/blevesearch/bleve/document/indexing_options.go @@ -20,6 +20,7 @@ const ( IndexField IndexingOptions = 1 << iota StoreField IncludeTermVectors + DocValues ) func (o IndexingOptions) IsIndexed() bool { @@ -34,6 +35,10 @@ func (o IndexingOptions) IncludeTermVectors() bool { return o&IncludeTermVectors != 0 } +func (o IndexingOptions) IncludeDocValues() bool { + return o&DocValues != 0 +} + func (o IndexingOptions) String() string { rv := "" if o.IsIndexed() { @@ -51,5 +56,11 @@ func (o IndexingOptions) String() string { } rv += "TV" } + if o.IncludeDocValues() { + if rv != "" { + rv += ", " + } + rv += "DV" + } return rv } diff --git a/vendor/github.com/blevesearch/bleve/document/indexing_options_test.go b/vendor/github.com/blevesearch/bleve/document/indexing_options_test.go index f6c6c99..d88c410 100644 --- a/vendor/github.com/blevesearch/bleve/document/indexing_options_test.go +++ b/vendor/github.com/blevesearch/bleve/document/indexing_options_test.go @@ -24,36 +24,56 @@ func TestIndexingOptions(t *testing.T) { isIndexed bool isStored bool includeTermVectors bool + docValues bool }{ { options: IndexField | StoreField | IncludeTermVectors, isIndexed: true, isStored: true, includeTermVectors: true, + docValues: false, }, { options: IndexField | IncludeTermVectors, isIndexed: true, isStored: false, includeTermVectors: true, + docValues: false, }, { options: StoreField | IncludeTermVectors, isIndexed: false, isStored: true, includeTermVectors: true, + docValues: false, }, { options: IndexField, isIndexed: true, isStored: false, includeTermVectors: false, + docValues: false, }, { options: StoreField, isIndexed: false, isStored: true, includeTermVectors: false, + docValues: false, + }, + { + options: DocValues, + isIndexed: false, + isStored: false, + includeTermVectors: false, + docValues: true, + }, + { + options: IndexField | StoreField | IncludeTermVectors | DocValues, + isIndexed: true, + isStored: true, + includeTermVectors: true, + docValues: true, }, } @@ -70,5 +90,9 @@ func TestIndexingOptions(t *testing.T) { if actuallyIncludeTermVectors != test.includeTermVectors { t.Errorf("expected includeTermVectors to be %v, got %v for %d", test.includeTermVectors, actuallyIncludeTermVectors, test.options) } + actuallyDocValues := test.options.IncludeDocValues() + if actuallyDocValues != test.docValues { + t.Errorf("expected docValue to be %v, got %v for %d", test.docValues, actuallyDocValues, test.options) + } } } diff --git a/vendor/github.com/blevesearch/bleve/http/handlers_test.go b/vendor/github.com/blevesearch/bleve/http/handlers_test.go index 830260a..b6911b0 100644 --- a/vendor/github.com/blevesearch/bleve/http/handlers_test.go +++ b/vendor/github.com/blevesearch/bleve/http/handlers_test.go @@ -500,33 +500,6 @@ func TestHandlers(t *testing.T) { Status: http.StatusNotFound, ResponseBody: []byte(`no such index 'tix'`), }, - { - Desc: "debug doc", - Handler: debugHandler, - Path: "/ti1/a/debug", - Method: "GET", - Params: url.Values{ - "indexName": []string{"ti1"}, - "docID": []string{"a"}, - }, - Status: http.StatusOK, - ResponseMatch: map[string]bool{ - `"key"`: true, - `"val"`: true, - }, - }, - { - Desc: "debug doc invalid index", - Handler: debugHandler, - Path: "/ti1/a/debug", - Method: "GET", - Params: url.Values{ - "indexName": []string{"tix"}, - "docID": []string{"a"}, - }, - Status: http.StatusNotFound, - ResponseBody: []byte(`no such index 'tix'`), - }, { Desc: "create alias", Handler: aliasHandler, diff --git a/vendor/github.com/blevesearch/bleve/index.go b/vendor/github.com/blevesearch/bleve/index.go index 293ec98..ea7b383 100644 --- a/vendor/github.com/blevesearch/bleve/index.go +++ b/vendor/github.com/blevesearch/bleve/index.go @@ -15,11 +15,12 @@ package bleve import ( + "context" + "github.com/blevesearch/bleve/document" "github.com/blevesearch/bleve/index" "github.com/blevesearch/bleve/index/store" "github.com/blevesearch/bleve/mapping" - "golang.org/x/net/context" ) // A Batch groups together multiple Index and Delete @@ -76,7 +77,7 @@ func (b *Batch) SetInternal(key, val []byte) { b.internal.SetInternal(key, val) } -// SetInternal adds the specified delete internal +// DeleteInternal adds the specified delete internal // operation to the batch. NOTE: the bleve Index is // not updated until the batch is executed. func (b *Batch) DeleteInternal(key []byte) { diff --git a/vendor/github.com/blevesearch/bleve/index/analysis.go b/vendor/github.com/blevesearch/bleve/index/analysis.go index b626b9f..840dad9 100644 --- a/vendor/github.com/blevesearch/bleve/index/analysis.go +++ b/vendor/github.com/blevesearch/bleve/index/analysis.go @@ -14,7 +14,10 @@ package index -import "github.com/blevesearch/bleve/document" +import ( + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/document" +) type IndexRow interface { KeySize() int @@ -29,6 +32,11 @@ type IndexRow interface { type AnalysisResult struct { DocID string Rows []IndexRow + + // scorch + Document *document.Document + Analyzed []analysis.TokenFrequencies + Length []int } type AnalysisWork struct { diff --git a/vendor/github.com/blevesearch/bleve/index/index.go b/vendor/github.com/blevesearch/bleve/index/index.go index 9870b41..e5a6929 100644 --- a/vendor/github.com/blevesearch/bleve/index/index.go +++ b/vendor/github.com/blevesearch/bleve/index/index.go @@ -18,11 +18,23 @@ import ( "bytes" "encoding/json" "fmt" + "reflect" "github.com/blevesearch/bleve/document" "github.com/blevesearch/bleve/index/store" + "github.com/blevesearch/bleve/size" ) +var reflectStaticSizeTermFieldDoc int +var reflectStaticSizeTermFieldVector int + +func init() { + var tfd TermFieldDoc + reflectStaticSizeTermFieldDoc = int(reflect.TypeOf(tfd).Size()) + var tfv TermFieldVector + reflectStaticSizeTermFieldVector = int(reflect.TypeOf(tfv).Size()) +} + var ErrorUnknownStorageType = fmt.Errorf("unknown storage type") type Index interface { @@ -115,6 +127,11 @@ type TermFieldVector struct { End uint64 } +func (tfv *TermFieldVector) Size() int { + return reflectStaticSizeTermFieldVector + size.SizeOfPtr + + len(tfv.Field) + len(tfv.ArrayPositions)*size.SizeOfUint64 +} + // IndexInternalID is an opaque document identifier interal to the index impl type IndexInternalID []byte @@ -134,6 +151,17 @@ type TermFieldDoc struct { Vectors []*TermFieldVector } +func (tfd *TermFieldDoc) Size() int { + sizeInBytes := reflectStaticSizeTermFieldDoc + size.SizeOfPtr + + len(tfd.Term) + len(tfd.ID) + + for _, entry := range tfd.Vectors { + sizeInBytes += entry.Size() + } + + return sizeInBytes +} + // Reset allows an already allocated TermFieldDoc to be reused func (tfd *TermFieldDoc) Reset() *TermFieldDoc { // remember the []byte used for the ID @@ -161,6 +189,8 @@ type TermFieldReader interface { // Count returns the number of documents contains the term in this field. Count() uint64 Close() error + + Size() int } type DictEntry struct { @@ -185,6 +215,9 @@ type DocIDReader interface { // will start there instead. If ID is greater than or equal to the end of // the range, Next() call will return io.EOF. Advance(ID IndexInternalID) (IndexInternalID, error) + + Size() int + Close() error } diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/README.md b/vendor/github.com/blevesearch/bleve/index/scorch/README.md new file mode 100644 index 0000000..861335a --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/README.md @@ -0,0 +1,367 @@ +# scorch + +## Definitions + +Batch +- A collection of Documents to mutate in the index. + +Document +- Has a unique identifier (arbitrary bytes). +- Is comprised of a list of fields. + +Field +- Has a name (string). +- Has a type (text, number, date, geopoint). +- Has a value (depending on type). +- Can be indexed, stored, or both. +- If indexed, can be analyzed. +-m If indexed, can optionally store term vectors. + +## Scope + +Scorch *MUST* implement the bleve.index API without requiring any changes to this API. + +Scorch *MAY* introduce new interfaces, which can be discovered to allow use of new capabilities not in the current API. + +## Implementation + +The scorch implementation starts with the concept of a segmented index. + +A segment is simply a slice, subset, or portion of the entire index. A segmented index is one which is composed of one or more segments. Although segments are created in a particular order, knowing this ordering is not required to achieve correct semantics when querying. Because there is no ordering, this means that when searching an index, you can (and should) search all the segments concurrently. + +### Internal Wrapper + +In order to accommodate the existing APIs while also improving the implementation, the scorch implementation includes some wrapper functionality that must be described. + +#### \_id field + +In scorch, field 0 is prearranged to be named \_id. All documents have a value for this field, which is the documents external identifier. In this version the field *MUST* be both indexed AND stored. The scorch wrapper adds this field, as it will not be present in the Document from the calling bleve code. + +NOTE: If a document already contains a field \_id, it will be replaced. If this is problematic, the caller must ensure such a scenario does not happen. + +### Proposed Structures + +``` +type Segment interface { + + Dictionary(field string) TermDictionary + +} + +type TermDictionary interface { + + PostingsList(term string, excluding PostingsList) PostingsList + +} + +type PostingsList interface { + + Next() Posting + + And(other PostingsList) PostingsList + Or(other PostingsList) PostingsList + +} + +type Posting interface { + Number() uint64 + + Frequency() uint64 + Norm() float64 + + Locations() Locations +} + +type Locations interface { + Start() uint64 + End() uint64 + Pos() uint64 + ArrayPositions() ... +} + +type DeletedDocs { + +} + +type SegmentSnapshot struct { + segment Segment + deleted PostingsList +} + +type IndexSnapshot struct { + segment []SegmentSnapshot +} +``` +**What about errors?** +**What about memory mgmnt or context?** +**Postings List separate iterator to separate stateful from stateless** +### Mutating the Index + +The bleve.index API has methods for directly making individual mutations (Update/Delete/SetInternal/DeleteInternal), however for this first implementation, we assume that all of these calls can simply be turned into a Batch of size 1. This may be highly inefficient, but it will be correct. This decision is made based on the fact that Couchbase FTS always uses Batches. + +NOTE: As a side-effect of this decision, it should be clear that performance tuning may depend on the batch size, which may in-turn require changes in FTS. + +From this point forward, only Batch mutations will be discussed. + +Sequence of Operations: + +1. For each document in the batch, search through all existing segments. The goal is to build up a per-segment bitset which tells us which documents in that segment are obsoleted by the addition of the new segment we're currently building. NOTE: we're not ready for this change to take effect yet, so rather than this operation mutating anything, they simply return bitsets, which we can apply later. Logically, this is something like: + + ``` + foreach segment { + dict := segment.Dictionary("\_id") + postings := empty postings list + foreach docID { + postings = postings.Or(dict.PostingsList(docID, nil)) + } + } + ``` + + NOTE: it is illustrated above as nested for loops, but some or all of these could be concurrently. The end result is that for each segment, we have (possibly empty) bitset. + +2. Also concurrent with 1, the documents in the batch are analyzed. This analysis proceeds using the existing analyzer pool. + +3. (after 2 completes) Analyzed documents are fed into a function which builds a new Segment representing this information. + +4. We now have everything we need to update the state of the system to include this new snapshot. + + - Acquire a lock + - Create a new IndexSnapshot + - For each SegmentSnapshot in the IndexSnapshot, take the deleted PostingsList and OR it with the new postings list for this Segment. Construct a new SegmentSnapshot for the segment using this new deleted PostingsList. Append this SegmentSnapshot to the IndexSnapshot. + - Create a new SegmentSnapshot wrapping our new segment with nil deleted docs. + - Append the new SegmentSnapshot to the IndexSnapshot + - Release the lock + +An ASCII art example: + ``` + 0 - Empty Index + + No segments + + IndexSnapshot + segments [] + deleted [] + + + 1 - Index Batch [ A B C ] + + segment 0 + numbers [ 1 2 3 ] + \_id [ A B C ] + + IndexSnapshot + segments [ 0 ] + deleted [ nil ] + + + 2 - Index Batch [ B' ] + + segment 0 1 + numbers [ 1 2 3 ] [ 1 ] + \_id [ A B C ] [ B ] + + Compute bitset segment-0-deleted-by-1: + [ 0 1 0 ] + + OR it with previous (nil) (call it 0-1) + [ 0 1 0 ] + + IndexSnapshot + segments [ 0 1 ] + deleted [ 0-1 nil ] + + 3 - Index Batch [ C' ] + + segment 0 1 2 + numbers [ 1 2 3 ] [ 1 ] [ 1 ] + \_id [ A B C ] [ B ] [ C ] + + Compute bitset segment-0-deleted-by-2: + [ 0 0 1 ] + + OR it with previous ([ 0 1 0 ]) (call it 0-12) + [ 0 1 1 ] + + Compute bitset segment-1-deleted-by-2: + [ 0 ] + + OR it with previous (nil) + still just nil + + + IndexSnapshot + segments [ 0 1 2 ] + deleted [ 0-12 nil nil ] + ``` + +**is there opportunity to stop early when doc is found in one segment** +**also, more efficient way to find bits for long lists of ids?** + +### Searching + +In the bleve.index API all searching starts by getting an IndexReader, which represents a snapshot of the index at a point in time. + +As described in the section above, our index implementation maintains a pointer to the current IndexSnapshot. When a caller gets an IndexReader, they get a copy of this pointer, and can use it as long as they like. The IndexSnapshot contains SegmentSnapshots, which only contain pointers to immutable segments. The deleted posting lists associated with a segment change over time, but the particular deleted posting list in YOUR snapshot is immutable. This gives a stable view of the data. + +#### Term Search + +Term search is the only searching primitive exposed in today's bleve.index API. This ultimately could limit our ability to take advantage of the indexing improvements, but it also means it will be easier to get a first version of this working. + +A term search for term T in field F will look something like this: + +``` + searchResultPostings = empty + foreach segment { + dict := segment.Dictionary(F) + segmentResultPostings = dict.PostingsList(T, segmentSnapshotDeleted) + // make segmentLocal numbers into global numbers, and flip bits in searchResultPostings + } +``` + +The searchResultPostings will be a new implementation of the TermFieldReader inteface. + +As a reminder this interface is: + +``` +// TermFieldReader is the interface exposing the enumeration of documents +// containing a given term in a given field. Documents are returned in byte +// lexicographic order over their identifiers. +type TermFieldReader interface { + // Next returns the next document containing the term in this field, or nil + // when it reaches the end of the enumeration. The preAlloced TermFieldDoc + // is optional, and when non-nil, will be used instead of allocating memory. + Next(preAlloced *TermFieldDoc) (*TermFieldDoc, error) + + // Advance resets the enumeration at specified document or its immediate + // follower. + Advance(ID IndexInternalID, preAlloced *TermFieldDoc) (*TermFieldDoc, error) + + // Count returns the number of documents contains the term in this field. + Count() uint64 + Close() error +} +``` + +At first glance this appears problematic, we have no way to return documents in order of their identifiers. But it turns out the wording of this perhaps too strong, or a bit ambiguous. Originally, this referred to the external identifiers, but with the introduction of a distinction between internal/external identifiers, returning them in order of their internal identifiers is also acceptable. **ASIDE**: the reason for this is that most callers just use Next() and literally don't care what the order is, they could be in any order and it would be fine. There is only one search that cares and that is the ConjunctionSearcher, which relies on Next/Advance having very specific semantics. Later in this document we will have a proposal to split into multiple interfaces: + +- The weakest interface, only supports Next() no ordering at all. +- Ordered, supporting Advance() +- And/Or'able capable of internally efficiently doing these ops with like interfaces (if not capable then can always fall back to external walking) + +But, the good news is that we don't even have to do that for our first implementation. As long as the global numbers we use for internal identifiers are consistent within this IndexSnapshot, then Next() will be ordered by ascending document number, and Advance() will still work correctly. + +NOTE: there is another place where we rely on the ordering of these hits, and that is in the "\_id" sort order. Previously this was the natural order, and a NOOP for the collector, now it must be implemented by actually sorting on the "\_id" field. We probably should introduce at least a marker interface to detect this. + +An ASCII art example: + +``` +Let's start with the IndexSnapshot we ended with earlier: + +3 - Index Batch [ C' ] + + segment 0 1 2 + numbers [ 1 2 3 ] [ 1 ] [ 1 ] + \_id [ A B C ] [ B ] [ C ] + + Compute bitset segment-0-deleted-by-2: + [ 0 0 1 ] + + OR it with previous ([ 0 1 0 ]) (call it 0-12) + [ 0 1 1 ] + +Compute bitset segment-1-deleted-by-2: + [ 0 0 0 ] + +OR it with previous (nil) + still just nil + + + IndexSnapshot + segments [ 0 1 2 ] + deleted [ 0-12 nil nil ] + +Now let's search for the term 'cat' in the field 'desc' and let's assume that Document C (both versions) would match it. + +Concurrently: + + - Segment 0 + - Get Term Dictionary For Field 'desc' + - From it get Postings List for term 'cat' EXCLUDING 0-12 + - raw segment matches [ 0 0 1 ] but excluding [ 0 1 1 ] gives [ 0 0 0 ] + - Segment 1 + - Get Term Dictionary For Field 'desc' + - From it get Postings List for term 'cat' excluding nil + - [ 0 ] + - Segment 2 + - Get Term Dictionary For Field 'desc' + - From it get Postings List for term 'cat' excluding nil + - [ 1 ] + +Map local bitsets into global number space (global meaning cross-segment but still unique to this snapshot) + +IndexSnapshot already should have mapping something like: +0 - Offset 0 +1 - Offset 3 (because segment 0 had 3 docs) +2 - Offset 4 (becuase segment 1 had 1 doc) + +This maps to search result bitset: + +[ 0 0 0 0 1] + +Caller would call Next() and get doc number 5 (assuming 1 based indexing for now) + +Caller could then ask to get term locations, stored fields, external doc ID for document number 5. Internally in the IndexSnapshot, we can now convert that back, and realize doc number 5 comes from segment 2, 5-4=1 so we're looking for doc number 1 in segment 2. That happens to be C... + +``` + +#### Future improvements + +In the future, interfaces to detect these non-serially operating TermFieldReaders could expose their own And() and Or() up to the higher level Conjunction/Disjunction searchers. Doing this alone offers some win, but also means there would be greater burden on the Searcher code rewriting logical expressions for maximum performance. + +Another related topic is that of peak memory usage. With serially operating TermFieldReaders it was necessary to start them all at the same time and operate in unison. However, with these non-serially operating TermFieldReaders we have the option of doing a few at a time, consolidating them, dispoting the intermediaries, and then doing a few more. For very complex queries with many clauses this could reduce peak memory usage. + + +### Memory Tracking + +All segments must be able to produce two statistics, an estimate of their explicit memory usage, and their actual size on disk (if any). For in-memory segments, disk usage could be zero, and the memory usage represents the entire information content. For mmap-based disk segments, the memory could be as low as the size of tracking structure itself (say just a few pointers). + +This would allow the implementation to throttle or block incoming mutations when a threshold memory usage has (or would be) exceeded. + +### Persistence + +Obviously, we want to support (but maybe not require) asynchronous persistence of segments. My expectation is that segments are initially built in memory. At some point they are persisted to disk. This poses some interesting challenges. + +At runtime, the state of an index (it's IndexSnapshot) is not only the contents of the segments, but also the bitmasks of deleted documents. These bitmasks indirectly encode an ordering in which the segments were added. The reason is that the bitmasks encode which items have been obsoleted by other (subsequent or more future) segments. In the runtime implementation we compute bitmask deltas and then merge them at the same time we bring the new segment in. One idea is that we could take a similar approach on disk. When we persist a segment, we persist the bitmask deltas of segments known to exist at that time, and eventually these can get merged up into a base segment deleted bitmask. + +This also relates to the topic rollback, addressed next... + + +### Rollback + +One desirable property in the Couchbase ecosystem is the ability to rollback to some previous (though typically not long ago) state. One idea for keeping this property in this design is to protect some of the most recent segments from merging. Then, if necessary, they could be "undone" to reveal previous states of the system. In these scenarios "undone" has to properly undo the deleted bitmasks on the other segments. Again, the current thinking is that rather than "undo" anything, it could be work that was deferred in the first place, thus making it easier to logically undo. + +Another possibly related approach would be to tie this into our existing snapshot mechanism. Perhaps simulating a slow reader (holding onto index snapshots) for some period of time, can be the mechanism to achieve the desired end goal. + + +### Internal Storage + +The bleve.index API has support for "internal storage". The ability to store information under a separate name space. + +This is not used for high volume storage, so it is tempting to think we could just put a small k/v store alongside the rest of the index. But, the reality is that this storage is used to maintain key information related to the rollback scenario. Because of this, its crucial that ordering and overwriting of key/value pairs correspond with actual segment persistence in the index. Based on this, I believe its important to put the internal key/value pairs inside the segments themselves. But, this also means that they must follow a similar "deleted" bitmask approach to obsolete values in older segments. But, this also seems to substantially increase the complexity of the solution because of the separate name space, it would appear to require its own bitmask. Further keys aren't numeric, which then implies yet another mapping from internal key to number, etc. + +More thought is required here. + +### Merging + +The segmented index approach requires merging to prevent the number of segments from growing too large. + +Recent experience with LSMs has taught us that having the correct merge strategy can make a huge difference in the overall performance of the system. In particular, a simple merge strategy which merges segments too aggressively can lead to high write amplification and unnecessarily rendering cached data useless. + +A few simple principles have been identified. + +- Roughly we merge multiple smaller segments into a single larger one. +- The larger a segment gets the less likely we should be to ever merge it. +- Segments with large numbers of deleted/obsoleted items are good candidates as the merge will result in a space savings. +- Segments with all items deleted/obsoleted can be dropped. + +Merging of a segment should be able to proceed even if that segment is held by an ongoing snapshot, it should only delay the removal of it. diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/event.go b/vendor/github.com/blevesearch/bleve/index/scorch/event.go new file mode 100644 index 0000000..dd79d6d --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/event.go @@ -0,0 +1,56 @@ +// Copyright (c) 2018 Couchbase, 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 scorch + +import "time" + +// RegistryAsyncErrorCallbacks should be treated as read-only after +// process init()'ialization. +var RegistryAsyncErrorCallbacks = map[string]func(error){} + +// RegistryEventCallbacks should be treated as read-only after +// process init()'ialization. +var RegistryEventCallbacks = map[string]func(Event){} + +// Event represents the information provided in an OnEvent() callback. +type Event struct { + Kind EventKind + Scorch *Scorch + Duration time.Duration +} + +// EventKind represents an event code for OnEvent() callbacks. +type EventKind int + +// EventKindCloseStart is fired when a Scorch.Close() has begun. +var EventKindCloseStart = EventKind(1) + +// EventKindClose is fired when a scorch index has been fully closed. +var EventKindClose = EventKind(2) + +// EventKindMergerProgress is fired when the merger has completed a +// round of merge processing. +var EventKindMergerProgress = EventKind(3) + +// EventKindPersisterProgress is fired when the persister has completed +// a round of persistence processing. +var EventKindPersisterProgress = EventKind(4) + +// EventKindBatchIntroductionStart is fired when Batch() is invoked which +// introduces a new segment. +var EventKindBatchIntroductionStart = EventKind(5) + +// EventKindBatchIntroduction is fired when Batch() completes. +var EventKindBatchIntroduction = EventKind(6) diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/event_test.go b/vendor/github.com/blevesearch/bleve/index/scorch/event_test.go new file mode 100644 index 0000000..92b49d2 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/event_test.go @@ -0,0 +1,73 @@ +// Copyright (c) 2018 Couchbase, 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 scorch + +import ( + "testing" + + "github.com/blevesearch/bleve/document" + "github.com/blevesearch/bleve/index" +) + +func TestEventBatchIntroductionStart(t *testing.T) { + defer func() { + err := DestroyTest() + if err != nil { + t.Fatal(err) + } + }() + + var count int + RegistryEventCallbacks["test"] = func(e Event) { + if e.Kind == EventKindBatchIntroductionStart { + count++ + } + } + + ourConfig := make(map[string]interface{}, len(testConfig)) + for k, v := range testConfig { + ourConfig[k] = v + } + ourConfig["eventCallbackName"] = "test" + + analysisQueue := index.NewAnalysisQueue(1) + idx, err := NewScorch(Name, ourConfig, analysisQueue) + if err != nil { + t.Fatal(err) + } + + err = idx.Open() + if err != nil { + t.Fatalf("error opening index: %v", err) + } + + doc := document.NewDocument("1") + doc.AddField(document.NewTextField("name", []uint64{}, []byte("test"))) + err = idx.Update(doc) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + + defer func() { + err := idx.Close() + if err != nil { + t.Fatal(err) + } + }() + + if count != 1 { + t.Fatalf("expected to see 1 batch introduction event event, saw %d", count) + } +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/field_dict_test.go b/vendor/github.com/blevesearch/bleve/index/scorch/field_dict_test.go new file mode 100644 index 0000000..a25c5c9 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/field_dict_test.go @@ -0,0 +1,184 @@ +// Copyright (c) 2017 Couchbase, 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 scorch + +import ( + "reflect" + "testing" + + "github.com/blevesearch/bleve/document" + "github.com/blevesearch/bleve/index" +) + +func TestIndexFieldDict(t *testing.T) { + defer func() { + err := DestroyTest() + if err != nil { + t.Fatal(err) + } + }() + + analysisQueue := index.NewAnalysisQueue(1) + idx, err := NewScorch(Name, testConfig, analysisQueue) + if err != nil { + t.Fatal(err) + } + err = idx.Open() + if err != nil { + t.Fatalf("error opening index: %v", err) + } + defer func() { + cerr := idx.Close() + if cerr != nil { + t.Fatal(cerr) + } + }() + + var expectedCount uint64 + doc := document.NewDocument("1") + doc.AddField(document.NewTextField("name", []uint64{}, []byte("test"))) + err = idx.Update(doc) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + expectedCount++ + + doc = document.NewDocument("2") + doc.AddField(document.NewTextFieldWithAnalyzer("name", []uint64{}, []byte("test test test"), testAnalyzer)) + doc.AddField(document.NewTextFieldCustom("desc", []uint64{}, []byte("eat more rice"), document.IndexField|document.IncludeTermVectors, testAnalyzer)) + doc.AddField(document.NewTextFieldCustom("prefix", []uint64{}, []byte("bob cat cats catting dog doggy zoo"), document.IndexField|document.IncludeTermVectors, testAnalyzer)) + err = idx.Update(doc) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + expectedCount++ + + indexReader, err := idx.Reader() + if err != nil { + t.Error(err) + } + defer func() { + err := indexReader.Close() + if err != nil { + t.Fatal(err) + } + }() + + dict, err := indexReader.FieldDict("name") + if err != nil { + t.Errorf("error creating reader: %v", err) + } + defer func() { + err := dict.Close() + if err != nil { + t.Fatal(err) + } + }() + + termCount := 0 + curr, err := dict.Next() + for err == nil && curr != nil { + termCount++ + if curr.Term != "test" { + t.Errorf("expected term to be 'test', got '%s'", curr.Term) + } + curr, err = dict.Next() + } + if termCount != 1 { + t.Errorf("expected 1 term for this field, got %d", termCount) + } + + dict2, err := indexReader.FieldDict("desc") + if err != nil { + t.Fatalf("error creating reader: %v", err) + } + defer func() { + err := dict2.Close() + if err != nil { + t.Fatal(err) + } + }() + + termCount = 0 + terms := make([]string, 0) + curr, err = dict2.Next() + for err == nil && curr != nil { + termCount++ + terms = append(terms, curr.Term) + curr, err = dict2.Next() + } + if termCount != 3 { + t.Errorf("expected 3 term for this field, got %d", termCount) + } + expectedTerms := []string{"eat", "more", "rice"} + if !reflect.DeepEqual(expectedTerms, terms) { + t.Errorf("expected %#v, got %#v", expectedTerms, terms) + } + // test start and end range + dict3, err := indexReader.FieldDictRange("desc", []byte("fun"), []byte("nice")) + if err != nil { + t.Errorf("error creating reader: %v", err) + } + defer func() { + err := dict3.Close() + if err != nil { + t.Fatal(err) + } + }() + + termCount = 0 + terms = make([]string, 0) + curr, err = dict3.Next() + for err == nil && curr != nil { + termCount++ + terms = append(terms, curr.Term) + curr, err = dict3.Next() + } + if termCount != 1 { + t.Errorf("expected 1 term for this field, got %d", termCount) + } + expectedTerms = []string{"more"} + if !reflect.DeepEqual(expectedTerms, terms) { + t.Errorf("expected %#v, got %#v", expectedTerms, terms) + } + + // test use case for prefix + dict4, err := indexReader.FieldDictPrefix("prefix", []byte("cat")) + if err != nil { + t.Errorf("error creating reader: %v", err) + } + defer func() { + err := dict4.Close() + if err != nil { + t.Fatal(err) + } + }() + + termCount = 0 + terms = make([]string, 0) + curr, err = dict4.Next() + for err == nil && curr != nil { + termCount++ + terms = append(terms, curr.Term) + curr, err = dict4.Next() + } + if termCount != 3 { + t.Errorf("expected 3 term for this field, got %d", termCount) + } + expectedTerms = []string{"cat", "cats", "catting"} + if !reflect.DeepEqual(expectedTerms, terms) { + t.Errorf("expected %#v, got %#v", expectedTerms, terms) + } +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/introducer.go b/vendor/github.com/blevesearch/bleve/index/scorch/introducer.go new file mode 100644 index 0000000..627d4e4 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/introducer.go @@ -0,0 +1,429 @@ +// Copyright (c) 2017 Couchbase, 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 scorch + +import ( + "fmt" + "sync/atomic" + + "github.com/RoaringBitmap/roaring" + "github.com/blevesearch/bleve/index/scorch/segment" +) + +type segmentIntroduction struct { + id uint64 + data segment.Segment + obsoletes map[uint64]*roaring.Bitmap + ids []string + internal map[string][]byte + + applied chan error + persisted chan error +} + +type persistIntroduction struct { + persisted map[uint64]segment.Segment + applied notificationChan +} + +type epochWatcher struct { + epoch uint64 + notifyCh notificationChan +} + +type snapshotReversion struct { + snapshot *IndexSnapshot + applied chan error + persisted chan error +} + +func (s *Scorch) mainLoop() { + var epochWatchers []*epochWatcher +OUTER: + for { + atomic.AddUint64(&s.stats.TotIntroduceLoop, 1) + + select { + case <-s.closeCh: + break OUTER + + case epochWatcher := <-s.introducerNotifier: + epochWatchers = append(epochWatchers, epochWatcher) + + case nextMerge := <-s.merges: + s.introduceMerge(nextMerge) + + case next := <-s.introductions: + err := s.introduceSegment(next) + if err != nil { + continue OUTER + } + + case persist := <-s.persists: + s.introducePersist(persist) + + case revertTo := <-s.revertToSnapshots: + err := s.revertToSnapshot(revertTo) + if err != nil { + continue OUTER + } + } + + var epochCurr uint64 + s.rootLock.RLock() + if s.root != nil { + epochCurr = s.root.epoch + } + s.rootLock.RUnlock() + var epochWatchersNext []*epochWatcher + for _, w := range epochWatchers { + if w.epoch < epochCurr { + close(w.notifyCh) + } else { + epochWatchersNext = append(epochWatchersNext, w) + } + } + epochWatchers = epochWatchersNext + } + + s.asyncTasks.Done() +} + +func (s *Scorch) introduceSegment(next *segmentIntroduction) error { + atomic.AddUint64(&s.stats.TotIntroduceSegmentBeg, 1) + defer atomic.AddUint64(&s.stats.TotIntroduceSegmentEnd, 1) + + s.rootLock.RLock() + root := s.root + s.rootLock.RUnlock() + + nsegs := len(root.segment) + + // prepare new index snapshot + newSnapshot := &IndexSnapshot{ + parent: s, + segment: make([]*SegmentSnapshot, 0, nsegs+1), + offsets: make([]uint64, 0, nsegs+1), + internal: make(map[string][]byte, len(root.internal)), + refs: 1, + } + + // iterate through current segments + var running uint64 + for i := range root.segment { + // see if optimistic work included this segment + delta, ok := next.obsoletes[root.segment[i].id] + if !ok { + var err error + delta, err = root.segment[i].segment.DocNumbers(next.ids) + if err != nil { + next.applied <- fmt.Errorf("error computing doc numbers: %v", err) + close(next.applied) + _ = newSnapshot.DecRef() + return err + } + } + + newss := &SegmentSnapshot{ + id: root.segment[i].id, + segment: root.segment[i].segment, + cachedDocs: root.segment[i].cachedDocs, + } + + // apply new obsoletions + if root.segment[i].deleted == nil { + newss.deleted = delta + } else { + newss.deleted = roaring.Or(root.segment[i].deleted, delta) + } + + // check for live size before copying + if newss.LiveSize() > 0 { + newSnapshot.segment = append(newSnapshot.segment, newss) + root.segment[i].segment.AddRef() + newSnapshot.offsets = append(newSnapshot.offsets, running) + running += newss.segment.Count() + } + } + + // append new segment, if any, to end of the new index snapshot + if next.data != nil { + newSegmentSnapshot := &SegmentSnapshot{ + id: next.id, + segment: next.data, // take ownership of next.data's ref-count + cachedDocs: &cachedDocs{cache: nil}, + } + newSnapshot.segment = append(newSnapshot.segment, newSegmentSnapshot) + newSnapshot.offsets = append(newSnapshot.offsets, running) + + // increment numItemsIntroduced which tracks the number of items + // queued for persistence. + atomic.AddUint64(&s.stats.TotIntroducedItems, newSegmentSnapshot.Count()) + atomic.AddUint64(&s.stats.TotIntroducedSegmentsBatch, 1) + } + // copy old values + for key, oldVal := range root.internal { + newSnapshot.internal[key] = oldVal + } + // set new values and apply deletes + for key, newVal := range next.internal { + if newVal != nil { + newSnapshot.internal[key] = newVal + } else { + delete(newSnapshot.internal, key) + } + } + + newSnapshot.updateSize() + s.rootLock.Lock() + if next.persisted != nil { + s.rootPersisted = append(s.rootPersisted, next.persisted) + } + // swap in new index snapshot + newSnapshot.epoch = s.nextSnapshotEpoch + s.nextSnapshotEpoch++ + rootPrev := s.root + s.root = newSnapshot + // release lock + s.rootLock.Unlock() + + if rootPrev != nil { + _ = rootPrev.DecRef() + } + + close(next.applied) + + return nil +} + +func (s *Scorch) introducePersist(persist *persistIntroduction) { + atomic.AddUint64(&s.stats.TotIntroducePersistBeg, 1) + defer atomic.AddUint64(&s.stats.TotIntroducePersistEnd, 1) + + s.rootLock.RLock() + root := s.root + s.rootLock.RUnlock() + + newIndexSnapshot := &IndexSnapshot{ + parent: s, + epoch: s.nextSnapshotEpoch, + segment: make([]*SegmentSnapshot, len(root.segment)), + offsets: make([]uint64, len(root.offsets)), + internal: make(map[string][]byte, len(root.internal)), + refs: 1, + } + s.nextSnapshotEpoch++ + + for i, segmentSnapshot := range root.segment { + // see if this segment has been replaced + if replacement, ok := persist.persisted[segmentSnapshot.id]; ok { + newSegmentSnapshot := &SegmentSnapshot{ + id: segmentSnapshot.id, + segment: replacement, + deleted: segmentSnapshot.deleted, + cachedDocs: segmentSnapshot.cachedDocs, + } + newIndexSnapshot.segment[i] = newSegmentSnapshot + delete(persist.persisted, segmentSnapshot.id) + + // update items persisted incase of a new segment snapshot + atomic.AddUint64(&s.stats.TotPersistedItems, newSegmentSnapshot.Count()) + atomic.AddUint64(&s.stats.TotPersistedSegments, 1) + } else { + newIndexSnapshot.segment[i] = root.segment[i] + newIndexSnapshot.segment[i].segment.AddRef() + } + newIndexSnapshot.offsets[i] = root.offsets[i] + } + + for k, v := range root.internal { + newIndexSnapshot.internal[k] = v + } + + newIndexSnapshot.updateSize() + s.rootLock.Lock() + rootPrev := s.root + s.root = newIndexSnapshot + s.rootLock.Unlock() + + if rootPrev != nil { + _ = rootPrev.DecRef() + } + + close(persist.applied) +} + +func (s *Scorch) introduceMerge(nextMerge *segmentMerge) { + atomic.AddUint64(&s.stats.TotIntroduceMergeBeg, 1) + defer atomic.AddUint64(&s.stats.TotIntroduceMergeEnd, 1) + + s.rootLock.RLock() + root := s.root + s.rootLock.RUnlock() + + newSnapshot := &IndexSnapshot{ + parent: s, + internal: root.internal, + refs: 1, + } + + // iterate through current segments + newSegmentDeleted := roaring.NewBitmap() + var running uint64 + for i := range root.segment { + segmentID := root.segment[i].id + if segSnapAtMerge, ok := nextMerge.old[segmentID]; ok { + // this segment is going away, see if anything else was deleted since we started the merge + if segSnapAtMerge != nil && root.segment[i].deleted != nil { + // assume all these deletes are new + deletedSince := root.segment[i].deleted + // if we already knew about some of them, remove + if segSnapAtMerge.deleted != nil { + deletedSince = roaring.AndNot(root.segment[i].deleted, segSnapAtMerge.deleted) + } + deletedSinceItr := deletedSince.Iterator() + for deletedSinceItr.HasNext() { + oldDocNum := deletedSinceItr.Next() + newDocNum := nextMerge.oldNewDocNums[segmentID][oldDocNum] + newSegmentDeleted.Add(uint32(newDocNum)) + } + } + // clean up the old segment map to figure out the + // obsolete segments wrt root in meantime, whatever + // segments left behind in old map after processing + // the root segments would be the obsolete segment set + delete(nextMerge.old, segmentID) + } else if root.segment[i].LiveSize() > 0 { + // this segment is staying + newSnapshot.segment = append(newSnapshot.segment, &SegmentSnapshot{ + id: root.segment[i].id, + segment: root.segment[i].segment, + deleted: root.segment[i].deleted, + cachedDocs: root.segment[i].cachedDocs, + }) + root.segment[i].segment.AddRef() + newSnapshot.offsets = append(newSnapshot.offsets, running) + running += root.segment[i].segment.Count() + } + } + + // before the newMerge introduction, need to clean the newly + // merged segment wrt the current root segments, hence + // applying the obsolete segment contents to newly merged segment + for segID, ss := range nextMerge.old { + obsoleted := ss.DocNumbersLive() + if obsoleted != nil { + obsoletedIter := obsoleted.Iterator() + for obsoletedIter.HasNext() { + oldDocNum := obsoletedIter.Next() + newDocNum := nextMerge.oldNewDocNums[segID][oldDocNum] + newSegmentDeleted.Add(uint32(newDocNum)) + } + } + } + // In case where all the docs in the newly merged segment getting + // deleted by the time we reach here, can skip the introduction. + if nextMerge.new != nil && + nextMerge.new.Count() > newSegmentDeleted.GetCardinality() { + // put new segment at end + newSnapshot.segment = append(newSnapshot.segment, &SegmentSnapshot{ + id: nextMerge.id, + segment: nextMerge.new, // take ownership for nextMerge.new's ref-count + deleted: newSegmentDeleted, + cachedDocs: &cachedDocs{cache: nil}, + }) + newSnapshot.offsets = append(newSnapshot.offsets, running) + atomic.AddUint64(&s.stats.TotIntroducedSegmentsMerge, 1) + } + + newSnapshot.AddRef() // 1 ref for the nextMerge.notify response + + newSnapshot.updateSize() + s.rootLock.Lock() + // swap in new index snapshot + newSnapshot.epoch = s.nextSnapshotEpoch + s.nextSnapshotEpoch++ + rootPrev := s.root + s.root = newSnapshot + // release lock + s.rootLock.Unlock() + + if rootPrev != nil { + _ = rootPrev.DecRef() + } + + // notify requester that we incorporated this + nextMerge.notify <- newSnapshot + close(nextMerge.notify) +} + +func (s *Scorch) revertToSnapshot(revertTo *snapshotReversion) error { + atomic.AddUint64(&s.stats.TotIntroduceRevertBeg, 1) + defer atomic.AddUint64(&s.stats.TotIntroduceRevertEnd, 1) + + if revertTo.snapshot == nil { + err := fmt.Errorf("Cannot revert to a nil snapshot") + revertTo.applied <- err + return err + } + + // acquire lock + s.rootLock.Lock() + + // prepare a new index snapshot, based on next snapshot + newSnapshot := &IndexSnapshot{ + parent: s, + segment: make([]*SegmentSnapshot, len(revertTo.snapshot.segment)), + offsets: revertTo.snapshot.offsets, + internal: revertTo.snapshot.internal, + epoch: s.nextSnapshotEpoch, + refs: 1, + } + s.nextSnapshotEpoch++ + + // iterate through segments + for i, segmentSnapshot := range revertTo.snapshot.segment { + newSnapshot.segment[i] = &SegmentSnapshot{ + id: segmentSnapshot.id, + segment: segmentSnapshot.segment, + deleted: segmentSnapshot.deleted, + cachedDocs: segmentSnapshot.cachedDocs, + } + newSnapshot.segment[i].segment.AddRef() + + // remove segment from ineligibleForRemoval map + filename := zapFileName(segmentSnapshot.id) + delete(s.ineligibleForRemoval, filename) + } + + if revertTo.persisted != nil { + s.rootPersisted = append(s.rootPersisted, revertTo.persisted) + } + + newSnapshot.updateSize() + // swap in new snapshot + rootPrev := s.root + s.root = newSnapshot + // release lock + s.rootLock.Unlock() + + if rootPrev != nil { + _ = rootPrev.DecRef() + } + + close(revertTo.applied) + + return nil +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/merge.go b/vendor/github.com/blevesearch/bleve/index/scorch/merge.go new file mode 100644 index 0000000..42b5e95 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/merge.go @@ -0,0 +1,357 @@ +// Copyright (c) 2017 Couchbase, 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 scorch + +import ( + "bytes" + "encoding/json" + "fmt" + "os" + "sync/atomic" + "time" + + "github.com/RoaringBitmap/roaring" + "github.com/blevesearch/bleve/index/scorch/mergeplan" + "github.com/blevesearch/bleve/index/scorch/segment" + "github.com/blevesearch/bleve/index/scorch/segment/zap" +) + +func (s *Scorch) mergerLoop() { + var lastEpochMergePlanned uint64 + mergePlannerOptions, err := s.parseMergePlannerOptions() + if err != nil { + s.fireAsyncError(fmt.Errorf("mergePlannerOption json parsing err: %v", err)) + s.asyncTasks.Done() + return + } + +OUTER: + for { + atomic.AddUint64(&s.stats.TotFileMergeLoopBeg, 1) + + select { + case <-s.closeCh: + break OUTER + + default: + // check to see if there is a new snapshot to persist + s.rootLock.RLock() + ourSnapshot := s.root + ourSnapshot.AddRef() + s.rootLock.RUnlock() + + if ourSnapshot.epoch != lastEpochMergePlanned { + startTime := time.Now() + + // lets get started + err := s.planMergeAtSnapshot(ourSnapshot, mergePlannerOptions) + if err != nil { + if err == ErrClosed { + // index has been closed + _ = ourSnapshot.DecRef() + break OUTER + } + s.fireAsyncError(fmt.Errorf("merging err: %v", err)) + _ = ourSnapshot.DecRef() + atomic.AddUint64(&s.stats.TotFileMergeLoopErr, 1) + continue OUTER + } + lastEpochMergePlanned = ourSnapshot.epoch + + s.fireEvent(EventKindMergerProgress, time.Since(startTime)) + } + _ = ourSnapshot.DecRef() + + // tell the persister we're waiting for changes + // first make a epochWatcher chan + ew := &epochWatcher{ + epoch: lastEpochMergePlanned, + notifyCh: make(notificationChan, 1), + } + + // give it to the persister + select { + case <-s.closeCh: + break OUTER + case s.persisterNotifier <- ew: + } + + // now wait for persister (but also detect close) + select { + case <-s.closeCh: + break OUTER + case <-ew.notifyCh: + } + } + + atomic.AddUint64(&s.stats.TotFileMergeLoopEnd, 1) + } + + s.asyncTasks.Done() +} + +func (s *Scorch) parseMergePlannerOptions() (*mergeplan.MergePlanOptions, + error) { + mergePlannerOptions := mergeplan.DefaultMergePlanOptions + if v, ok := s.config["scorchMergePlanOptions"]; ok { + b, err := json.Marshal(v) + if err != nil { + return &mergePlannerOptions, err + } + + err = json.Unmarshal(b, &mergePlannerOptions) + if err != nil { + return &mergePlannerOptions, err + } + + err = mergeplan.ValidateMergePlannerOptions(&mergePlannerOptions) + if err != nil { + return nil, err + } + } + return &mergePlannerOptions, nil +} + +func (s *Scorch) planMergeAtSnapshot(ourSnapshot *IndexSnapshot, + options *mergeplan.MergePlanOptions) error { + // build list of zap segments in this snapshot + var onlyZapSnapshots []mergeplan.Segment + for _, segmentSnapshot := range ourSnapshot.segment { + if _, ok := segmentSnapshot.segment.(*zap.Segment); ok { + onlyZapSnapshots = append(onlyZapSnapshots, segmentSnapshot) + } + } + + atomic.AddUint64(&s.stats.TotFileMergePlan, 1) + + // give this list to the planner + resultMergePlan, err := mergeplan.Plan(onlyZapSnapshots, options) + if err != nil { + atomic.AddUint64(&s.stats.TotFileMergePlanErr, 1) + return fmt.Errorf("merge planning err: %v", err) + } + if resultMergePlan == nil { + // nothing to do + atomic.AddUint64(&s.stats.TotFileMergePlanNone, 1) + return nil + } + + atomic.AddUint64(&s.stats.TotFileMergePlanOk, 1) + + atomic.AddUint64(&s.stats.TotFileMergePlanTasks, uint64(len(resultMergePlan.Tasks))) + + // process tasks in serial for now + var notifications []chan *IndexSnapshot + for _, task := range resultMergePlan.Tasks { + if len(task.Segments) == 0 { + atomic.AddUint64(&s.stats.TotFileMergePlanTasksSegmentsEmpty, 1) + continue + } + + atomic.AddUint64(&s.stats.TotFileMergePlanTasksSegments, uint64(len(task.Segments))) + + oldMap := make(map[uint64]*SegmentSnapshot) + newSegmentID := atomic.AddUint64(&s.nextSegmentID, 1) + segmentsToMerge := make([]*zap.Segment, 0, len(task.Segments)) + docsToDrop := make([]*roaring.Bitmap, 0, len(task.Segments)) + + for _, planSegment := range task.Segments { + if segSnapshot, ok := planSegment.(*SegmentSnapshot); ok { + oldMap[segSnapshot.id] = segSnapshot + if zapSeg, ok := segSnapshot.segment.(*zap.Segment); ok { + if segSnapshot.LiveSize() == 0 { + atomic.AddUint64(&s.stats.TotFileMergeSegmentsEmpty, 1) + oldMap[segSnapshot.id] = nil + } else { + segmentsToMerge = append(segmentsToMerge, zapSeg) + docsToDrop = append(docsToDrop, segSnapshot.deleted) + } + } + } + } + + var oldNewDocNums map[uint64][]uint64 + var segment segment.Segment + if len(segmentsToMerge) > 0 { + filename := zapFileName(newSegmentID) + s.markIneligibleForRemoval(filename) + path := s.path + string(os.PathSeparator) + filename + + fileMergeZapStartTime := time.Now() + + atomic.AddUint64(&s.stats.TotFileMergeZapBeg, 1) + newDocNums, nBytes, err := zap.Merge(segmentsToMerge, docsToDrop, path, 1024) + atomic.AddUint64(&s.stats.TotFileMergeZapEnd, 1) + atomic.AddUint64(&s.stats.TotFileMergeWrittenBytes, nBytes) + + fileMergeZapTime := uint64(time.Since(fileMergeZapStartTime)) + atomic.AddUint64(&s.stats.TotFileMergeZapTime, fileMergeZapTime) + if atomic.LoadUint64(&s.stats.MaxFileMergeZapTime) < fileMergeZapTime { + atomic.StoreUint64(&s.stats.MaxFileMergeZapTime, fileMergeZapTime) + } + + if err != nil { + s.unmarkIneligibleForRemoval(filename) + atomic.AddUint64(&s.stats.TotFileMergePlanTasksErr, 1) + return fmt.Errorf("merging failed: %v", err) + } + + segment, err = zap.Open(path) + if err != nil { + s.unmarkIneligibleForRemoval(filename) + atomic.AddUint64(&s.stats.TotFileMergePlanTasksErr, 1) + return err + } + oldNewDocNums = make(map[uint64][]uint64) + for i, segNewDocNums := range newDocNums { + oldNewDocNums[task.Segments[i].Id()] = segNewDocNums + } + + atomic.AddUint64(&s.stats.TotFileMergeSegments, uint64(len(segmentsToMerge))) + } + + sm := &segmentMerge{ + id: newSegmentID, + old: oldMap, + oldNewDocNums: oldNewDocNums, + new: segment, + notify: make(chan *IndexSnapshot, 1), + } + notifications = append(notifications, sm.notify) + + // give it to the introducer + select { + case <-s.closeCh: + _ = segment.Close() + return ErrClosed + case s.merges <- sm: + atomic.AddUint64(&s.stats.TotFileMergeIntroductions, 1) + } + + atomic.AddUint64(&s.stats.TotFileMergePlanTasksDone, 1) + } + + for _, notification := range notifications { + select { + case <-s.closeCh: + return ErrClosed + case newSnapshot := <-notification: + atomic.AddUint64(&s.stats.TotFileMergeIntroductionsDone, 1) + if newSnapshot != nil { + _ = newSnapshot.DecRef() + } + } + } + + return nil +} + +type segmentMerge struct { + id uint64 + old map[uint64]*SegmentSnapshot + oldNewDocNums map[uint64][]uint64 + new segment.Segment + notify chan *IndexSnapshot +} + +// perform a merging of the given SegmentBase instances into a new, +// persisted segment, and synchronously introduce that new segment +// into the root +func (s *Scorch) mergeSegmentBases(snapshot *IndexSnapshot, + sbs []*zap.SegmentBase, sbsDrops []*roaring.Bitmap, sbsIndexes []int, + chunkFactor uint32) (uint64, *IndexSnapshot, uint64, error) { + atomic.AddUint64(&s.stats.TotMemMergeBeg, 1) + + var br bytes.Buffer + + cr := zap.NewCountHashWriter(&br) + + memMergeZapStartTime := time.Now() + + atomic.AddUint64(&s.stats.TotMemMergeZapBeg, 1) + newDocNums, numDocs, storedIndexOffset, fieldsIndexOffset, + docValueOffset, dictLocs, fieldsInv, fieldsMap, err := + zap.MergeToWriter(sbs, sbsDrops, chunkFactor, cr) + atomic.AddUint64(&s.stats.TotMemMergeZapEnd, 1) + + memMergeZapTime := uint64(time.Since(memMergeZapStartTime)) + atomic.AddUint64(&s.stats.TotMemMergeZapTime, memMergeZapTime) + if atomic.LoadUint64(&s.stats.MaxMemMergeZapTime) < memMergeZapTime { + atomic.StoreUint64(&s.stats.MaxMemMergeZapTime, memMergeZapTime) + } + + if err != nil { + atomic.AddUint64(&s.stats.TotMemMergeErr, 1) + return 0, nil, 0, err + } + + sb, err := zap.InitSegmentBase(br.Bytes(), cr.Sum32(), chunkFactor, + fieldsMap, fieldsInv, numDocs, storedIndexOffset, fieldsIndexOffset, + docValueOffset, dictLocs) + if err != nil { + atomic.AddUint64(&s.stats.TotMemMergeErr, 1) + return 0, nil, 0, err + } + + newSegmentID := atomic.AddUint64(&s.nextSegmentID, 1) + + filename := zapFileName(newSegmentID) + path := s.path + string(os.PathSeparator) + filename + err = zap.PersistSegmentBase(sb, path) + if err != nil { + atomic.AddUint64(&s.stats.TotMemMergeErr, 1) + return 0, nil, 0, err + } + + segment, err := zap.Open(path) + if err != nil { + atomic.AddUint64(&s.stats.TotMemMergeErr, 1) + return 0, nil, 0, err + } + + // update persisted stats + atomic.AddUint64(&s.stats.TotPersistedItems, segment.Count()) + atomic.AddUint64(&s.stats.TotPersistedSegments, 1) + + sm := &segmentMerge{ + id: newSegmentID, + old: make(map[uint64]*SegmentSnapshot), + oldNewDocNums: make(map[uint64][]uint64), + new: segment, + notify: make(chan *IndexSnapshot, 1), + } + + for i, idx := range sbsIndexes { + ss := snapshot.segment[idx] + sm.old[ss.id] = ss + sm.oldNewDocNums[ss.id] = newDocNums[i] + } + + select { // send to introducer + case <-s.closeCh: + _ = segment.DecRef() + return 0, nil, 0, ErrClosed + case s.merges <- sm: + } + + select { // wait for introduction to complete + case <-s.closeCh: + return 0, nil, 0, ErrClosed + case newSnapshot := <-sm.notify: + atomic.AddUint64(&s.stats.TotMemMergeSegments, uint64(len(sbs))) + atomic.AddUint64(&s.stats.TotMemMergeDone, 1) + return numDocs, newSnapshot, newSegmentID, nil + } +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/mergeplan/merge_plan.go b/vendor/github.com/blevesearch/bleve/index/scorch/mergeplan/merge_plan.go new file mode 100644 index 0000000..b09e538 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/mergeplan/merge_plan.go @@ -0,0 +1,386 @@ +// Copyright (c) 2017 Couchbase, 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 mergeplan provides a segment merge planning approach that's +// inspired by Lucene's TieredMergePolicy.java and descriptions like +// http://blog.mikemccandless.com/2011/02/visualizing-lucenes-segment-merges.html +package mergeplan + +import ( + "errors" + "fmt" + "math" + "sort" + "strings" +) + +// A Segment represents the information that the planner needs to +// calculate segment merging. +type Segment interface { + // Unique id of the segment -- used for sorting. + Id() uint64 + + // Full segment size (the size before any logical deletions). + FullSize() int64 + + // Size of the live data of the segment; i.e., FullSize() minus + // any logical deletions. + LiveSize() int64 +} + +// Plan() will functionally compute a merge plan. A segment will be +// assigned to at most a single MergeTask in the output MergePlan. A +// segment not assigned to any MergeTask means the segment should +// remain unmerged. +func Plan(segments []Segment, o *MergePlanOptions) (*MergePlan, error) { + return plan(segments, o) +} + +// A MergePlan is the result of the Plan() API. +// +// The planner doesn’t know how or whether these tasks are executed -- +// that’s up to a separate merge execution system, which might execute +// these tasks concurrently or not, and which might execute all the +// tasks or not. +type MergePlan struct { + Tasks []*MergeTask +} + +// A MergeTask represents several segments that should be merged +// together into a single segment. +type MergeTask struct { + Segments []Segment +} + +// The MergePlanOptions is designed to be reusable between planning calls. +type MergePlanOptions struct { + // Max # segments per logarithmic tier, or max width of any + // logarithmic “step”. Smaller values mean more merging but fewer + // segments. Should be >= SegmentsPerMergeTask, else you'll have + // too much merging. + MaxSegmentsPerTier int + + // Max size of any segment produced after merging. Actual + // merging, however, may produce segment sizes different than the + // planner’s predicted sizes. + MaxSegmentSize int64 + + // The growth factor for each tier in a staircase of idealized + // segments computed by CalcBudget(). + TierGrowth float64 + + // The number of segments in any resulting MergeTask. e.g., + // len(result.Tasks[ * ].Segments) == SegmentsPerMergeTask. + SegmentsPerMergeTask int + + // Small segments are rounded up to this size, i.e., treated as + // equal (floor) size for consideration. This is to prevent lots + // of tiny segments from resulting in a long tail in the index. + FloorSegmentSize int64 + + // Controls how aggressively merges that reclaim more deletions + // are favored. Higher values will more aggressively target + // merges that reclaim deletions, but be careful not to go so high + // that way too much merging takes place; a value of 3.0 is + // probably nearly too high. A value of 0.0 means deletions don't + // impact merge selection. + ReclaimDeletesWeight float64 + + // Optional, defaults to mergeplan.CalcBudget(). + CalcBudget func(totalSize int64, firstTierSize int64, + o *MergePlanOptions) (budgetNumSegments int) + + // Optional, defaults to mergeplan.ScoreSegments(). + ScoreSegments func(segments []Segment, o *MergePlanOptions) float64 + + // Optional. + Logger func(string) +} + +// Returns the higher of the input or FloorSegmentSize. +func (o *MergePlanOptions) RaiseToFloorSegmentSize(s int64) int64 { + if s > o.FloorSegmentSize { + return s + } + return o.FloorSegmentSize +} + +// MaxSegmentSizeLimit represents the maximum size of a segment, +// this limit comes with hit-1 optimisation/max encoding limit uint31. +const MaxSegmentSizeLimit = 1<<31 - 1 + +// ErrMaxSegmentSizeTooLarge is returned when the size of the segment +// exceeds the MaxSegmentSizeLimit +var ErrMaxSegmentSizeTooLarge = errors.New("MaxSegmentSize exceeds the size limit") + +// DefaultMergePlanOptions suggests the default options. +var DefaultMergePlanOptions = MergePlanOptions{ + MaxSegmentsPerTier: 10, + MaxSegmentSize: 5000000, + TierGrowth: 10.0, + SegmentsPerMergeTask: 10, + FloorSegmentSize: 2000, + ReclaimDeletesWeight: 2.0, +} + +// ------------------------------------------- + +func plan(segmentsIn []Segment, o *MergePlanOptions) (*MergePlan, error) { + if len(segmentsIn) <= 1 { + return nil, nil + } + + if o == nil { + o = &DefaultMergePlanOptions + } + + segments := append([]Segment(nil), segmentsIn...) // Copy. + + sort.Sort(byLiveSizeDescending(segments)) + + var minLiveSize int64 = math.MaxInt64 + + var eligibles []Segment + var eligiblesLiveSize int64 + + for _, segment := range segments { + if minLiveSize > segment.LiveSize() { + minLiveSize = segment.LiveSize() + } + + // Only small-enough segments are eligible. + if segment.LiveSize() < o.MaxSegmentSize/2 { + eligibles = append(eligibles, segment) + eligiblesLiveSize += segment.LiveSize() + } + } + + minLiveSize = o.RaiseToFloorSegmentSize(minLiveSize) + + calcBudget := o.CalcBudget + if calcBudget == nil { + calcBudget = CalcBudget + } + + budgetNumSegments := CalcBudget(eligiblesLiveSize, minLiveSize, o) + + scoreSegments := o.ScoreSegments + if scoreSegments == nil { + scoreSegments = ScoreSegments + } + + rv := &MergePlan{} + + var empties []Segment + for _, eligible := range eligibles { + if eligible.LiveSize() <= 0 { + empties = append(empties, eligible) + } + } + if len(empties) > 0 { + rv.Tasks = append(rv.Tasks, &MergeTask{Segments: empties}) + eligibles = removeSegments(eligibles, empties) + } + + // While we’re over budget, keep looping, which might produce + // another MergeTask. + for len(eligibles) > 0 && (len(eligibles)+len(rv.Tasks)) > budgetNumSegments { + // Track a current best roster as we examine and score + // potential rosters of merges. + var bestRoster []Segment + var bestRosterScore float64 // Lower score is better. + + for startIdx := 0; startIdx < len(eligibles); startIdx++ { + var roster []Segment + var rosterLiveSize int64 + + for idx := startIdx; idx < len(eligibles) && len(roster) < o.SegmentsPerMergeTask; idx++ { + eligible := eligibles[idx] + + if rosterLiveSize+eligible.LiveSize() < o.MaxSegmentSize { + roster = append(roster, eligible) + rosterLiveSize += eligible.LiveSize() + } + } + + if len(roster) > 0 { + rosterScore := scoreSegments(roster, o) + + if len(bestRoster) <= 0 || rosterScore < bestRosterScore { + bestRoster = roster + bestRosterScore = rosterScore + } + } + } + + if len(bestRoster) <= 0 { + return rv, nil + } + + rv.Tasks = append(rv.Tasks, &MergeTask{Segments: bestRoster}) + + eligibles = removeSegments(eligibles, bestRoster) + } + + return rv, nil +} + +// Compute the number of segments that would be needed to cover the +// totalSize, by climbing up a logarithmically growing staircase of +// segment tiers. +func CalcBudget(totalSize int64, firstTierSize int64, o *MergePlanOptions) ( + budgetNumSegments int) { + tierSize := firstTierSize + if tierSize < 1 { + tierSize = 1 + } + + maxSegmentsPerTier := o.MaxSegmentsPerTier + if maxSegmentsPerTier < 1 { + maxSegmentsPerTier = 1 + } + + tierGrowth := o.TierGrowth + if tierGrowth < 1.0 { + tierGrowth = 1.0 + } + + for totalSize > 0 { + segmentsInTier := float64(totalSize) / float64(tierSize) + if segmentsInTier < float64(maxSegmentsPerTier) { + budgetNumSegments += int(math.Ceil(segmentsInTier)) + break + } + + budgetNumSegments += maxSegmentsPerTier + totalSize -= int64(maxSegmentsPerTier) * tierSize + tierSize = int64(float64(tierSize) * tierGrowth) + } + + return budgetNumSegments +} + +// Of note, removeSegments() keeps the ordering of the results stable. +func removeSegments(segments []Segment, toRemove []Segment) []Segment { + rv := make([]Segment, 0, len(segments)-len(toRemove)) +OUTER: + for _, segment := range segments { + for _, r := range toRemove { + if segment == r { + continue OUTER + } + } + rv = append(rv, segment) + } + return rv +} + +// Smaller result score is better. +func ScoreSegments(segments []Segment, o *MergePlanOptions) float64 { + var totBeforeSize int64 + var totAfterSize int64 + var totAfterSizeFloored int64 + + for _, segment := range segments { + totBeforeSize += segment.FullSize() + totAfterSize += segment.LiveSize() + totAfterSizeFloored += o.RaiseToFloorSegmentSize(segment.LiveSize()) + } + + if totBeforeSize <= 0 || totAfterSize <= 0 || totAfterSizeFloored <= 0 { + return 0 + } + + // Roughly guess the "balance" of the segments -- whether the + // segments are about the same size. + balance := + float64(o.RaiseToFloorSegmentSize(segments[0].LiveSize())) / + float64(totAfterSizeFloored) + + // Gently favor smaller merges over bigger ones. We don't want to + // make the exponent too large else we end up with poor merges of + // small segments in order to avoid the large merges. + score := balance * math.Pow(float64(totAfterSize), 0.05) + + // Strongly favor merges that reclaim deletes. + nonDelRatio := float64(totAfterSize) / float64(totBeforeSize) + + score *= math.Pow(nonDelRatio, o.ReclaimDeletesWeight) + + return score +} + +// ------------------------------------------ + +// ToBarChart returns an ASCII rendering of the segments and the plan. +// The barMax is the max width of the bars in the bar chart. +func ToBarChart(prefix string, barMax int, segments []Segment, plan *MergePlan) string { + rv := make([]string, 0, len(segments)) + + var maxFullSize int64 + for _, segment := range segments { + if maxFullSize < segment.FullSize() { + maxFullSize = segment.FullSize() + } + } + if maxFullSize < 0 { + maxFullSize = 1 + } + + for _, segment := range segments { + barFull := int(segment.FullSize()) + barLive := int(segment.LiveSize()) + + if maxFullSize > int64(barMax) { + barFull = int(float64(barMax) * float64(barFull) / float64(maxFullSize)) + barLive = int(float64(barMax) * float64(barLive) / float64(maxFullSize)) + } + + barKind := " " + barChar := "." + + if plan != nil { + TASK_LOOP: + for taski, task := range plan.Tasks { + for _, taskSegment := range task.Segments { + if taskSegment == segment { + barKind = "*" + barChar = fmt.Sprintf("%d", taski) + break TASK_LOOP + } + } + } + } + + bar := + strings.Repeat(barChar, barLive)[0:barLive] + + strings.Repeat("x", barFull-barLive)[0:barFull-barLive] + + rv = append(rv, fmt.Sprintf("%s %5d: %5d /%5d - %s %s", prefix, + segment.Id(), + segment.LiveSize(), + segment.FullSize(), + barKind, bar)) + } + + return strings.Join(rv, "\n") +} + +// ValidateMergePlannerOptions validates the merge planner options +func ValidateMergePlannerOptions(options *MergePlanOptions) error { + if options.MaxSegmentSize > MaxSegmentSizeLimit { + return ErrMaxSegmentSizeTooLarge + } + return nil +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/mergeplan/merge_plan_test.go b/vendor/github.com/blevesearch/bleve/index/scorch/mergeplan/merge_plan_test.go new file mode 100644 index 0000000..3adc1f4 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/mergeplan/merge_plan_test.go @@ -0,0 +1,552 @@ +// Copyright (c) 2017 Couchbase, 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 mergeplan + +import ( + "encoding/json" + "fmt" + "math/rand" + "os" + "reflect" + "sort" + "testing" + "time" +) + +// Implements the Segment interface for testing, +type segment struct { + MyId uint64 + MyFullSize int64 + MyLiveSize int64 +} + +func (s *segment) Id() uint64 { return s.MyId } +func (s *segment) FullSize() int64 { return s.MyFullSize } +func (s *segment) LiveSize() int64 { return s.MyLiveSize } + +func makeLinearSegments(n int) (rv []Segment) { + for i := 0; i < n; i++ { + rv = append(rv, &segment{ + MyId: uint64(i), + MyFullSize: int64(i), + MyLiveSize: int64(i), + }) + } + return rv +} + +// ---------------------------------------- + +func TestSimplePlan(t *testing.T) { + segs := makeLinearSegments(10) + + tests := []struct { + Desc string + Segments []Segment + Options *MergePlanOptions + ExpectPlan *MergePlan + ExpectErr error + }{ + {"nil segments", + nil, nil, nil, nil}, + {"empty segments", + []Segment{}, nil, nil, nil}, + {"1 segment", + []Segment{segs[1]}, + nil, + nil, + nil, + }, + {"2 segments", + []Segment{ + segs[1], + segs[2], + }, + nil, + &MergePlan{ + Tasks: []*MergeTask{ + &MergeTask{ + Segments: []Segment{ + segs[2], + segs[1], + }, + }, + }, + }, + nil, + }, + {"3 segments", + []Segment{ + segs[1], + segs[2], + segs[9], + }, + nil, + &MergePlan{ + Tasks: []*MergeTask{ + &MergeTask{ + Segments: []Segment{ + segs[9], + segs[2], + segs[1], + }, + }, + }, + }, + nil, + }, + {"many segments", + []Segment{ + segs[1], + segs[2], + segs[3], + segs[4], + segs[5], + segs[6], + }, + &MergePlanOptions{ + MaxSegmentsPerTier: 1, + MaxSegmentSize: 1000, + TierGrowth: 2.0, + SegmentsPerMergeTask: 2, + FloorSegmentSize: 1, + }, + &MergePlan{ + Tasks: []*MergeTask{ + &MergeTask{ + Segments: []Segment{ + segs[6], + segs[5], + }, + }, + }, + }, + nil, + }, + } + + for testi, test := range tests { + plan, err := Plan(test.Segments, test.Options) + if err != test.ExpectErr { + testj, _ := json.Marshal(&test) + t.Errorf("testi: %d, test: %s, got err: %v", + testi, testj, err) + } + if !reflect.DeepEqual(plan, test.ExpectPlan) { + testj, _ := json.Marshal(&test) + planj, _ := json.Marshal(&plan) + t.Errorf("testi: %d, test: %s, got plan: %s", + testi, testj, planj) + } + } +} + +// ---------------------------------------- + +func TestSort(t *testing.T) { + segs := makeLinearSegments(10) + + sort.Sort(byLiveSizeDescending(segs)) + + for i := 1; i < len(segs); i++ { + if segs[i].LiveSize() >= segs[i-1].LiveSize() { + t.Errorf("not descending") + } + } +} + +// ---------------------------------------- + +func TestCalcBudget(t *testing.T) { + tests := []struct { + totalSize int64 + firstTierSize int64 + o MergePlanOptions + expect int + }{ + {0, 0, MergePlanOptions{}, 0}, + {1, 0, MergePlanOptions{}, 1}, + {9, 0, MergePlanOptions{}, 9}, + {1, 1, + MergePlanOptions{ + MaxSegmentsPerTier: 1, + MaxSegmentSize: 1000, + TierGrowth: 2.0, + SegmentsPerMergeTask: 2, + FloorSegmentSize: 1, + }, + 1, + }, + {21, 1, + MergePlanOptions{ + MaxSegmentsPerTier: 1, + MaxSegmentSize: 1000, + TierGrowth: 2.0, + SegmentsPerMergeTask: 2, + FloorSegmentSize: 1, + }, + 5, + }, + {21, 1, + MergePlanOptions{ + MaxSegmentsPerTier: 2, + MaxSegmentSize: 1000, + TierGrowth: 2.0, + SegmentsPerMergeTask: 2, + FloorSegmentSize: 1, + }, + 7, + }, + {1000, 2000, DefaultMergePlanOptions, + 1}, + {5000, 2000, DefaultMergePlanOptions, + 3}, + {10000, 2000, DefaultMergePlanOptions, + 5}, + {30000, 2000, DefaultMergePlanOptions, + 11}, + {1000000, 2000, DefaultMergePlanOptions, + 24}, + {1000000000, 2000, DefaultMergePlanOptions, + 54}, + } + + for testi, test := range tests { + res := CalcBudget(test.totalSize, test.firstTierSize, &test.o) + if res != test.expect { + t.Errorf("testi: %d, test: %#v, res: %v", + testi, test, res) + } + } +} + +// ---------------------------------------- + +func TestInsert1SameSizedSegmentBetweenMerges(t *testing.T) { + o := &MergePlanOptions{ + MaxSegmentSize: 1000, + MaxSegmentsPerTier: 3, + TierGrowth: 3.0, + SegmentsPerMergeTask: 3, + } + + spec := testCyclesSpec{ + descrip: "i1sssbm", + verbose: os.Getenv("VERBOSE") == "i1sssbm" || os.Getenv("VERBOSE") == "y", + n: 200, + o: o, + beforePlan: func(spec *testCyclesSpec) { + spec.segments = append(spec.segments, &segment{ + MyId: spec.nextSegmentId, + MyFullSize: 1, + MyLiveSize: 1, + }) + spec.nextSegmentId++ + }, + } + + spec.runCycles(t) +} + +func TestInsertManySameSizedSegmentsBetweenMerges(t *testing.T) { + o := &MergePlanOptions{ + MaxSegmentSize: 1000, + MaxSegmentsPerTier: 3, + TierGrowth: 3.0, + SegmentsPerMergeTask: 3, + } + + spec := testCyclesSpec{ + descrip: "imsssbm", + verbose: os.Getenv("VERBOSE") == "imsssbm" || os.Getenv("VERBOSE") == "y", + n: 20, + o: o, + beforePlan: func(spec *testCyclesSpec) { + for i := 0; i < 10; i++ { + spec.segments = append(spec.segments, &segment{ + MyId: spec.nextSegmentId, + MyFullSize: 1, + MyLiveSize: 1, + }) + spec.nextSegmentId++ + } + }, + } + + spec.runCycles(t) +} + +func TestInsertManySameSizedSegmentsWithDeletionsBetweenMerges(t *testing.T) { + o := &MergePlanOptions{ + MaxSegmentSize: 1000, + MaxSegmentsPerTier: 3, + TierGrowth: 3.0, + SegmentsPerMergeTask: 3, + } + + spec := testCyclesSpec{ + descrip: "imssswdbm", + verbose: os.Getenv("VERBOSE") == "imssswdbm" || os.Getenv("VERBOSE") == "y", + n: 20, + o: o, + beforePlan: func(spec *testCyclesSpec) { + for i := 0; i < 10; i++ { + // Deletions are a shrinking of the live size. + for i, seg := range spec.segments { + if (spec.cycle+i)%5 == 0 { + s := seg.(*segment) + if s.MyLiveSize > 0 { + s.MyLiveSize -= 1 + } + } + } + + spec.segments = append(spec.segments, &segment{ + MyId: spec.nextSegmentId, + MyFullSize: 1, + MyLiveSize: 1, + }) + spec.nextSegmentId++ + } + }, + } + + spec.runCycles(t) +} + +func TestInsertManyDifferentSizedSegmentsBetweenMerges(t *testing.T) { + o := &MergePlanOptions{ + MaxSegmentSize: 1000, + MaxSegmentsPerTier: 3, + TierGrowth: 3.0, + SegmentsPerMergeTask: 3, + } + + spec := testCyclesSpec{ + descrip: "imdssbm", + verbose: os.Getenv("VERBOSE") == "imdssbm" || os.Getenv("VERBOSE") == "y", + n: 20, + o: o, + beforePlan: func(spec *testCyclesSpec) { + for i := 0; i < 10; i++ { + spec.segments = append(spec.segments, &segment{ + MyId: spec.nextSegmentId, + MyFullSize: int64(1 + (i % 5)), + MyLiveSize: int64(1 + (i % 5)), + }) + spec.nextSegmentId++ + } + }, + } + + spec.runCycles(t) +} + +func TestManySameSizedSegmentsWithDeletesBetweenMerges(t *testing.T) { + o := &MergePlanOptions{ + MaxSegmentSize: 1000, + MaxSegmentsPerTier: 3, + TierGrowth: 3.0, + SegmentsPerMergeTask: 3, + } + + var numPlansWithTasks int + + spec := testCyclesSpec{ + descrip: "mssswdbm", + verbose: os.Getenv("VERBOSE") == "mssswdbm" || os.Getenv("VERBOSE") == "y", + n: 20, + o: o, + beforePlan: func(spec *testCyclesSpec) { + // Deletions are a shrinking of the live size. + for i, seg := range spec.segments { + if (spec.cycle+i)%5 == 0 { + s := seg.(*segment) + if s.MyLiveSize > 0 { + s.MyLiveSize -= 1 + } + } + } + + for i := 0; i < 10; i++ { + spec.segments = append(spec.segments, &segment{ + MyId: spec.nextSegmentId, + MyFullSize: 1, + MyLiveSize: 1, + }) + spec.nextSegmentId++ + } + }, + afterPlan: func(spec *testCyclesSpec, plan *MergePlan) { + if plan != nil && len(plan.Tasks) > 0 { + numPlansWithTasks++ + } + }, + } + + spec.runCycles(t) + + if numPlansWithTasks <= 0 { + t.Errorf("expected some plans with tasks") + } +} + +func TestValidateMergePlannerOptions(t *testing.T) { + o := &MergePlanOptions{ + MaxSegmentSize: 1 << 32, + MaxSegmentsPerTier: 3, + TierGrowth: 3.0, + SegmentsPerMergeTask: 3, + } + err := ValidateMergePlannerOptions(o) + if err != ErrMaxSegmentSizeTooLarge { + t.Error("Validation expected to fail as the MaxSegmentSize exceeds limit") + } +} + +func TestPlanMaxSegmentSizeLimit(t *testing.T) { + o := &MergePlanOptions{ + MaxSegmentSize: 20, + MaxSegmentsPerTier: 5, + TierGrowth: 3.0, + SegmentsPerMergeTask: 5, + FloorSegmentSize: 5, + } + segments := makeLinearSegments(20) + + s := rand.NewSource(time.Now().UnixNano()) + r := rand.New(s) + + max := 20 + min := 5 + randomInRange := func() int64 { + return int64(r.Intn(max-min) + min) + } + for i := 1; i < 20; i++ { + o.MaxSegmentSize = randomInRange() + plans, err := Plan(segments, o) + if err != nil { + t.Errorf("Plan failed, err: %v", err) + } + if len(plans.Tasks) == 0 { + t.Errorf("expected some plans with tasks") + } + + for _, task := range plans.Tasks { + var totalLiveSize int64 + for _, segs := range task.Segments { + totalLiveSize += segs.LiveSize() + + } + if totalLiveSize >= o.MaxSegmentSize { + t.Errorf("merged segments size: %d exceeding the MaxSegmentSize"+ + "limit: %d", totalLiveSize, o.MaxSegmentSize) + } + } + } + +} + +// ---------------------------------------- + +type testCyclesSpec struct { + descrip string + verbose bool + + n int // Number of cycles to run. + o *MergePlanOptions + + beforePlan func(*testCyclesSpec) + afterPlan func(*testCyclesSpec, *MergePlan) + + cycle int + segments []Segment + nextSegmentId uint64 +} + +func (spec *testCyclesSpec) runCycles(t *testing.T) { + numPlansWithTasks := 0 + + for spec.cycle < spec.n { + if spec.verbose { + emit(spec.descrip, spec.cycle, 0, spec.segments, nil) + } + + if spec.beforePlan != nil { + spec.beforePlan(spec) + } + + if spec.verbose { + emit(spec.descrip, spec.cycle, 1, spec.segments, nil) + } + + plan, err := Plan(spec.segments, spec.o) + if err != nil { + t.Fatalf("expected no err, got: %v", err) + } + + if spec.afterPlan != nil { + spec.afterPlan(spec, plan) + } + + if spec.verbose { + emit(spec.descrip, spec.cycle, 2, spec.segments, plan) + } + + if plan != nil { + if len(plan.Tasks) > 0 { + numPlansWithTasks++ + } + + for _, task := range plan.Tasks { + spec.segments = removeSegments(spec.segments, task.Segments) + + var totLiveSize int64 + for _, segment := range task.Segments { + totLiveSize += segment.LiveSize() + } + + if totLiveSize > 0 { + spec.segments = append(spec.segments, &segment{ + MyId: spec.nextSegmentId, + MyFullSize: totLiveSize, + MyLiveSize: totLiveSize, + }) + spec.nextSegmentId++ + } + } + } + + spec.cycle++ + } + + if numPlansWithTasks <= 0 { + t.Errorf("expected some plans with tasks") + } +} + +func emit(descrip string, cycle int, step int, segments []Segment, plan *MergePlan) { + if os.Getenv("VERBOSE") == "" { + return + } + + suffix := "" + if plan != nil && len(plan.Tasks) > 0 { + suffix = "hasPlan" + } + + fmt.Printf("%s %d.%d ---------- %s\n", descrip, cycle, step, suffix) + fmt.Printf("%s\n", ToBarChart(descrip, 100, segments, plan)) +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/mergeplan/sort.go b/vendor/github.com/blevesearch/bleve/index/scorch/mergeplan/sort.go new file mode 100644 index 0000000..d044b8d --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/mergeplan/sort.go @@ -0,0 +1,28 @@ +// Copyright (c) 2017 Couchbase, 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 mergeplan + +type byLiveSizeDescending []Segment + +func (a byLiveSizeDescending) Len() int { return len(a) } + +func (a byLiveSizeDescending) Swap(i, j int) { a[i], a[j] = a[j], a[i] } + +func (a byLiveSizeDescending) Less(i, j int) bool { + if a[i].LiveSize() != a[j].LiveSize() { + return a[i].LiveSize() > a[j].LiveSize() + } + return a[i].Id() < a[j].Id() +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/persister.go b/vendor/github.com/blevesearch/bleve/index/scorch/persister.go new file mode 100644 index 0000000..2fab532 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/persister.go @@ -0,0 +1,813 @@ +// Copyright (c) 2017 Couchbase, 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 scorch + +import ( + "bytes" + "fmt" + "io/ioutil" + "log" + "os" + "path/filepath" + "strconv" + "strings" + "sync/atomic" + "time" + + "github.com/RoaringBitmap/roaring" + "github.com/blevesearch/bleve/index/scorch/segment" + "github.com/blevesearch/bleve/index/scorch/segment/zap" + "github.com/boltdb/bolt" +) + +var DefaultChunkFactor uint32 = 1024 + +// Arbitrary number, need to make it configurable. +// Lower values like 10/making persister really slow +// doesn't work well as it is creating more files to +// persist for in next persist iteration and spikes the # FDs. +// Ideal value should let persister also proceed at +// an optimum pace so that the merger can skip +// many intermediate snapshots. +// This needs to be based on empirical data. +// TODO - may need to revisit this approach/value. +var epochDistance = uint64(5) + +type notificationChan chan struct{} + +func (s *Scorch) persisterLoop() { + defer s.asyncTasks.Done() + + var persistWatchers []*epochWatcher + var lastPersistedEpoch, lastMergedEpoch uint64 + var ew *epochWatcher +OUTER: + for { + atomic.AddUint64(&s.stats.TotPersistLoopBeg, 1) + + select { + case <-s.closeCh: + break OUTER + case ew = <-s.persisterNotifier: + persistWatchers = append(persistWatchers, ew) + default: + } + if ew != nil && ew.epoch > lastMergedEpoch { + lastMergedEpoch = ew.epoch + } + lastMergedEpoch, persistWatchers = s.pausePersisterForMergerCatchUp(lastPersistedEpoch, + lastMergedEpoch, persistWatchers) + + var ourSnapshot *IndexSnapshot + var ourPersisted []chan error + + // check to see if there is a new snapshot to persist + s.rootLock.Lock() + if s.root != nil && s.root.epoch > lastPersistedEpoch { + ourSnapshot = s.root + ourSnapshot.AddRef() + ourPersisted = s.rootPersisted + s.rootPersisted = nil + } + s.rootLock.Unlock() + + if ourSnapshot != nil { + startTime := time.Now() + + err := s.persistSnapshot(ourSnapshot) + for _, ch := range ourPersisted { + if err != nil { + ch <- err + } + close(ch) + } + if err != nil { + if err == ErrClosed { + // index has been closed + _ = ourSnapshot.DecRef() + break OUTER + } + s.fireAsyncError(fmt.Errorf("got err persisting snapshot: %v", err)) + _ = ourSnapshot.DecRef() + atomic.AddUint64(&s.stats.TotPersistLoopErr, 1) + continue OUTER + } + + lastPersistedEpoch = ourSnapshot.epoch + for _, ew := range persistWatchers { + close(ew.notifyCh) + } + + persistWatchers = nil + _ = ourSnapshot.DecRef() + + changed := false + s.rootLock.RLock() + if s.root != nil && s.root.epoch != lastPersistedEpoch { + changed = true + } + s.rootLock.RUnlock() + + s.fireEvent(EventKindPersisterProgress, time.Since(startTime)) + + if changed { + atomic.AddUint64(&s.stats.TotPersistLoopProgress, 1) + continue OUTER + } + } + + // tell the introducer we're waiting for changes + w := &epochWatcher{ + epoch: lastPersistedEpoch, + notifyCh: make(notificationChan, 1), + } + + select { + case <-s.closeCh: + break OUTER + case s.introducerNotifier <- w: + } + + s.removeOldData() // might as well cleanup while waiting + + atomic.AddUint64(&s.stats.TotPersistLoopWait, 1) + + select { + case <-s.closeCh: + break OUTER + case <-w.notifyCh: + // woken up, next loop should pick up work + atomic.AddUint64(&s.stats.TotPersistLoopWaitNotified, 1) + case ew = <-s.persisterNotifier: + // if the watchers are already caught up then let them wait, + // else let them continue to do the catch up + persistWatchers = append(persistWatchers, ew) + } + + atomic.AddUint64(&s.stats.TotPersistLoopEnd, 1) + } +} + +func notifyMergeWatchers(lastPersistedEpoch uint64, + persistWatchers []*epochWatcher) []*epochWatcher { + var watchersNext []*epochWatcher + for _, w := range persistWatchers { + if w.epoch < lastPersistedEpoch { + close(w.notifyCh) + } else { + watchersNext = append(watchersNext, w) + } + } + return watchersNext +} + +func (s *Scorch) pausePersisterForMergerCatchUp(lastPersistedEpoch uint64, lastMergedEpoch uint64, + persistWatchers []*epochWatcher) (uint64, []*epochWatcher) { + + // first, let the watchers proceed if they lag behind + persistWatchers = notifyMergeWatchers(lastPersistedEpoch, persistWatchers) + +OUTER: + // check for slow merger and await until the merger catch up + for lastPersistedEpoch > lastMergedEpoch+epochDistance { + atomic.AddUint64(&s.stats.TotPersisterSlowMergerPause, 1) + + select { + case <-s.closeCh: + break OUTER + case ew := <-s.persisterNotifier: + persistWatchers = append(persistWatchers, ew) + lastMergedEpoch = ew.epoch + } + + atomic.AddUint64(&s.stats.TotPersisterSlowMergerResume, 1) + + // let the watchers proceed if they lag behind + persistWatchers = notifyMergeWatchers(lastPersistedEpoch, persistWatchers) + } + + return lastMergedEpoch, persistWatchers +} + +func (s *Scorch) persistSnapshot(snapshot *IndexSnapshot) error { + persisted, err := s.persistSnapshotMaybeMerge(snapshot) + if err != nil { + return err + } + if persisted { + return nil + } + + return s.persistSnapshotDirect(snapshot) +} + +// DefaultMinSegmentsForInMemoryMerge represents the default number of +// in-memory zap segments that persistSnapshotMaybeMerge() needs to +// see in an IndexSnapshot before it decides to merge and persist +// those segments +var DefaultMinSegmentsForInMemoryMerge = 2 + +// persistSnapshotMaybeMerge examines the snapshot and might merge and +// persist the in-memory zap segments if there are enough of them +func (s *Scorch) persistSnapshotMaybeMerge(snapshot *IndexSnapshot) ( + bool, error) { + // collect the in-memory zap segments (SegmentBase instances) + var sbs []*zap.SegmentBase + var sbsDrops []*roaring.Bitmap + var sbsIndexes []int + + for i, segmentSnapshot := range snapshot.segment { + if sb, ok := segmentSnapshot.segment.(*zap.SegmentBase); ok { + sbs = append(sbs, sb) + sbsDrops = append(sbsDrops, segmentSnapshot.deleted) + sbsIndexes = append(sbsIndexes, i) + } + } + + if len(sbs) < DefaultMinSegmentsForInMemoryMerge { + return false, nil + } + + _, newSnapshot, newSegmentID, err := s.mergeSegmentBases( + snapshot, sbs, sbsDrops, sbsIndexes, DefaultChunkFactor) + if err != nil { + return false, err + } + if newSnapshot == nil { + return false, nil + } + + defer func() { + _ = newSnapshot.DecRef() + }() + + mergedSegmentIDs := map[uint64]struct{}{} + for _, idx := range sbsIndexes { + mergedSegmentIDs[snapshot.segment[idx].id] = struct{}{} + } + + // construct a snapshot that's logically equivalent to the input + // snapshot, but with merged segments replaced by the new segment + equiv := &IndexSnapshot{ + parent: snapshot.parent, + segment: make([]*SegmentSnapshot, 0, len(snapshot.segment)), + internal: snapshot.internal, + epoch: snapshot.epoch, + } + + // copy to the equiv the segments that weren't replaced + for _, segment := range snapshot.segment { + if _, wasMerged := mergedSegmentIDs[segment.id]; !wasMerged { + equiv.segment = append(equiv.segment, segment) + } + } + + // append to the equiv the new segment + for _, segment := range newSnapshot.segment { + if segment.id == newSegmentID { + equiv.segment = append(equiv.segment, &SegmentSnapshot{ + id: newSegmentID, + segment: segment.segment, + deleted: nil, // nil since merging handled deletions + }) + break + } + } + + err = s.persistSnapshotDirect(equiv) + if err != nil { + return false, err + } + + return true, nil +} + +func (s *Scorch) persistSnapshotDirect(snapshot *IndexSnapshot) (err error) { + // start a write transaction + tx, err := s.rootBolt.Begin(true) + if err != nil { + return err + } + // defer rollback on error + defer func() { + if err != nil { + _ = tx.Rollback() + } + }() + + snapshotsBucket, err := tx.CreateBucketIfNotExists(boltSnapshotsBucket) + if err != nil { + return err + } + newSnapshotKey := segment.EncodeUvarintAscending(nil, snapshot.epoch) + snapshotBucket, err := snapshotsBucket.CreateBucketIfNotExists(newSnapshotKey) + if err != nil { + return err + } + + // persist internal values + internalBucket, err := snapshotBucket.CreateBucketIfNotExists(boltInternalKey) + if err != nil { + return err + } + // TODO optimize writing these in order? + for k, v := range snapshot.internal { + err = internalBucket.Put([]byte(k), v) + if err != nil { + return err + } + } + + var filenames []string + newSegmentPaths := make(map[uint64]string) + + // first ensure that each segment in this snapshot has been persisted + for _, segmentSnapshot := range snapshot.segment { + snapshotSegmentKey := segment.EncodeUvarintAscending(nil, segmentSnapshot.id) + snapshotSegmentBucket, err := snapshotBucket.CreateBucketIfNotExists(snapshotSegmentKey) + if err != nil { + return err + } + switch seg := segmentSnapshot.segment.(type) { + case *zap.SegmentBase: + // need to persist this to disk + filename := zapFileName(segmentSnapshot.id) + path := s.path + string(os.PathSeparator) + filename + err = zap.PersistSegmentBase(seg, path) + if err != nil { + return fmt.Errorf("error persisting segment: %v", err) + } + newSegmentPaths[segmentSnapshot.id] = path + err = snapshotSegmentBucket.Put(boltPathKey, []byte(filename)) + if err != nil { + return err + } + filenames = append(filenames, filename) + case *zap.Segment: + path := seg.Path() + filename := strings.TrimPrefix(path, s.path+string(os.PathSeparator)) + err = snapshotSegmentBucket.Put(boltPathKey, []byte(filename)) + if err != nil { + return err + } + filenames = append(filenames, filename) + default: + return fmt.Errorf("unknown segment type: %T", seg) + } + // store current deleted bits + var roaringBuf bytes.Buffer + if segmentSnapshot.deleted != nil { + _, err = segmentSnapshot.deleted.WriteTo(&roaringBuf) + if err != nil { + return fmt.Errorf("error persisting roaring bytes: %v", err) + } + err = snapshotSegmentBucket.Put(boltDeletedKey, roaringBuf.Bytes()) + if err != nil { + return err + } + } + } + + // we need to swap in a new root only when we've persisted 1 or + // more segments -- whereby the new root would have 1-for-1 + // replacements of in-memory segments with file-based segments + // + // other cases like updates to internal values only, and/or when + // there are only deletions, are already covered and persisted by + // the newly populated boltdb snapshotBucket above + if len(newSegmentPaths) > 0 { + // now try to open all the new snapshots + newSegments := make(map[uint64]segment.Segment) + defer func() { + for _, s := range newSegments { + if s != nil { + // cleanup segments that were opened but not + // swapped into the new root + _ = s.Close() + } + } + }() + for segmentID, path := range newSegmentPaths { + newSegments[segmentID], err = zap.Open(path) + if err != nil { + return fmt.Errorf("error opening new segment at %s, %v", path, err) + } + } + + persist := &persistIntroduction{ + persisted: newSegments, + applied: make(notificationChan), + } + + select { + case <-s.closeCh: + err = ErrClosed + return err + case s.persists <- persist: + } + + select { + case <-s.closeCh: + err = ErrClosed + return err + case <-persist.applied: + } + } + + err = tx.Commit() + if err != nil { + return err + } + + err = s.rootBolt.Sync() + if err != nil { + return err + } + + // allow files to become eligible for removal after commit, such + // as file segments from snapshots that came from the merger + s.rootLock.Lock() + for _, filename := range filenames { + delete(s.ineligibleForRemoval, filename) + } + s.rootLock.Unlock() + + return nil +} + +func zapFileName(epoch uint64) string { + return fmt.Sprintf("%012x.zap", epoch) +} + +// bolt snapshot code + +var boltSnapshotsBucket = []byte{'s'} +var boltPathKey = []byte{'p'} +var boltDeletedKey = []byte{'d'} +var boltInternalKey = []byte{'i'} + +func (s *Scorch) loadFromBolt() error { + return s.rootBolt.View(func(tx *bolt.Tx) error { + snapshots := tx.Bucket(boltSnapshotsBucket) + if snapshots == nil { + return nil + } + foundRoot := false + c := snapshots.Cursor() + for k, _ := c.Last(); k != nil; k, _ = c.Prev() { + _, snapshotEpoch, err := segment.DecodeUvarintAscending(k) + if err != nil { + log.Printf("unable to parse segment epoch %x, continuing", k) + continue + } + if foundRoot { + s.eligibleForRemoval = append(s.eligibleForRemoval, snapshotEpoch) + continue + } + snapshot := snapshots.Bucket(k) + if snapshot == nil { + log.Printf("snapshot key, but bucket missing %x, continuing", k) + s.eligibleForRemoval = append(s.eligibleForRemoval, snapshotEpoch) + continue + } + indexSnapshot, err := s.loadSnapshot(snapshot) + if err != nil { + log.Printf("unable to load snapshot, %v, continuing", err) + s.eligibleForRemoval = append(s.eligibleForRemoval, snapshotEpoch) + continue + } + indexSnapshot.epoch = snapshotEpoch + // set the nextSegmentID + s.nextSegmentID, err = s.maxSegmentIDOnDisk() + if err != nil { + return err + } + s.nextSegmentID++ + s.nextSnapshotEpoch = snapshotEpoch + 1 + s.rootLock.Lock() + if s.root != nil { + _ = s.root.DecRef() + } + s.root = indexSnapshot + s.rootLock.Unlock() + foundRoot = true + } + return nil + }) +} + +// LoadSnapshot loads the segment with the specified epoch +// NOTE: this is currently ONLY intended to be used by the command-line tool +func (s *Scorch) LoadSnapshot(epoch uint64) (rv *IndexSnapshot, err error) { + err = s.rootBolt.View(func(tx *bolt.Tx) error { + snapshots := tx.Bucket(boltSnapshotsBucket) + if snapshots == nil { + return nil + } + snapshotKey := segment.EncodeUvarintAscending(nil, epoch) + snapshot := snapshots.Bucket(snapshotKey) + if snapshot == nil { + return fmt.Errorf("snapshot with epoch: %v - doesn't exist", epoch) + } + rv, err = s.loadSnapshot(snapshot) + return err + }) + if err != nil { + return nil, err + } + return rv, nil +} + +func (s *Scorch) loadSnapshot(snapshot *bolt.Bucket) (*IndexSnapshot, error) { + + rv := &IndexSnapshot{ + parent: s, + internal: make(map[string][]byte), + refs: 1, + } + var running uint64 + c := snapshot.Cursor() + for k, _ := c.First(); k != nil; k, _ = c.Next() { + if k[0] == boltInternalKey[0] { + internalBucket := snapshot.Bucket(k) + err := internalBucket.ForEach(func(key []byte, val []byte) error { + copiedVal := append([]byte(nil), val...) + rv.internal[string(key)] = copiedVal + return nil + }) + if err != nil { + _ = rv.DecRef() + return nil, err + } + } else { + segmentBucket := snapshot.Bucket(k) + if segmentBucket == nil { + _ = rv.DecRef() + return nil, fmt.Errorf("segment key, but bucket missing % x", k) + } + segmentSnapshot, err := s.loadSegment(segmentBucket) + if err != nil { + _ = rv.DecRef() + return nil, fmt.Errorf("failed to load segment: %v", err) + } + _, segmentSnapshot.id, err = segment.DecodeUvarintAscending(k) + if err != nil { + _ = rv.DecRef() + return nil, fmt.Errorf("failed to decode segment id: %v", err) + } + rv.segment = append(rv.segment, segmentSnapshot) + rv.offsets = append(rv.offsets, running) + running += segmentSnapshot.segment.Count() + } + } + return rv, nil +} + +func (s *Scorch) loadSegment(segmentBucket *bolt.Bucket) (*SegmentSnapshot, error) { + pathBytes := segmentBucket.Get(boltPathKey) + if pathBytes == nil { + return nil, fmt.Errorf("segment path missing") + } + segmentPath := s.path + string(os.PathSeparator) + string(pathBytes) + segment, err := zap.Open(segmentPath) + if err != nil { + return nil, fmt.Errorf("error opening bolt segment: %v", err) + } + + rv := &SegmentSnapshot{ + segment: segment, + cachedDocs: &cachedDocs{cache: nil}, + } + deletedBytes := segmentBucket.Get(boltDeletedKey) + if deletedBytes != nil { + deletedBitmap := roaring.NewBitmap() + r := bytes.NewReader(deletedBytes) + _, err := deletedBitmap.ReadFrom(r) + if err != nil { + _ = segment.Close() + return nil, fmt.Errorf("error reading deleted bytes: %v", err) + } + rv.deleted = deletedBitmap + } + + return rv, nil +} + +type uint64Descending []uint64 + +func (p uint64Descending) Len() int { return len(p) } +func (p uint64Descending) Less(i, j int) bool { return p[i] > p[j] } +func (p uint64Descending) Swap(i, j int) { p[i], p[j] = p[j], p[i] } + +func (s *Scorch) removeOldData() { + removed, err := s.removeOldBoltSnapshots() + if err != nil { + s.fireAsyncError(fmt.Errorf("got err removing old bolt snapshots: %v", err)) + } + + if removed > 0 { + err = s.removeOldZapFiles() + if err != nil { + s.fireAsyncError(fmt.Errorf("got err removing old zap files: %v", err)) + } + } +} + +// NumSnapshotsToKeep represents how many recent, old snapshots to +// keep around per Scorch instance. Useful for apps that require +// rollback'ability. +var NumSnapshotsToKeep = 1 + +// Removes enough snapshots from the rootBolt so that the +// s.eligibleForRemoval stays under the NumSnapshotsToKeep policy. +func (s *Scorch) removeOldBoltSnapshots() (numRemoved int, err error) { + persistedEpochs, err := s.RootBoltSnapshotEpochs() + if err != nil { + return 0, err + } + + if len(persistedEpochs) <= s.numSnapshotsToKeep { + // we need to keep everything + return 0, nil + } + + // make a map of epochs to protect from deletion + protectedEpochs := make(map[uint64]struct{}, s.numSnapshotsToKeep) + for _, epoch := range persistedEpochs[0:s.numSnapshotsToKeep] { + protectedEpochs[epoch] = struct{}{} + } + + var epochsToRemove []uint64 + var newEligible []uint64 + s.rootLock.Lock() + for _, epoch := range s.eligibleForRemoval { + if _, ok := protectedEpochs[epoch]; ok { + // protected + newEligible = append(newEligible, epoch) + } else { + epochsToRemove = append(epochsToRemove, epoch) + } + } + s.eligibleForRemoval = newEligible + s.rootLock.Unlock() + + if len(epochsToRemove) <= 0 { + return 0, nil + } + + tx, err := s.rootBolt.Begin(true) + if err != nil { + return 0, err + } + defer func() { + if err == nil { + err = tx.Commit() + } else { + _ = tx.Rollback() + } + if err == nil { + err = s.rootBolt.Sync() + } + }() + + snapshots := tx.Bucket(boltSnapshotsBucket) + if snapshots == nil { + return 0, nil + } + + for _, epochToRemove := range epochsToRemove { + k := segment.EncodeUvarintAscending(nil, epochToRemove) + err = snapshots.DeleteBucket(k) + if err == bolt.ErrBucketNotFound { + err = nil + } + if err == nil { + numRemoved++ + } + } + + return numRemoved, err +} + +func (s *Scorch) maxSegmentIDOnDisk() (uint64, error) { + currFileInfos, err := ioutil.ReadDir(s.path) + if err != nil { + return 0, err + } + + var rv uint64 + for _, finfo := range currFileInfos { + fname := finfo.Name() + if filepath.Ext(fname) == ".zap" { + prefix := strings.TrimSuffix(fname, ".zap") + id, err2 := strconv.ParseUint(prefix, 16, 64) + if err2 != nil { + return 0, err2 + } + if id > rv { + rv = id + } + } + } + return rv, err +} + +// Removes any *.zap files which aren't listed in the rootBolt. +func (s *Scorch) removeOldZapFiles() error { + liveFileNames, err := s.loadZapFileNames() + if err != nil { + return err + } + + currFileInfos, err := ioutil.ReadDir(s.path) + if err != nil { + return err + } + + s.rootLock.RLock() + + for _, finfo := range currFileInfos { + fname := finfo.Name() + if filepath.Ext(fname) == ".zap" { + if _, exists := liveFileNames[fname]; !exists && !s.ineligibleForRemoval[fname] { + err := os.Remove(s.path + string(os.PathSeparator) + fname) + if err != nil { + log.Printf("got err removing file: %s, err: %v", fname, err) + } + } + } + } + + s.rootLock.RUnlock() + + return nil +} + +func (s *Scorch) RootBoltSnapshotEpochs() ([]uint64, error) { + var rv []uint64 + err := s.rootBolt.View(func(tx *bolt.Tx) error { + snapshots := tx.Bucket(boltSnapshotsBucket) + if snapshots == nil { + return nil + } + sc := snapshots.Cursor() + for sk, _ := sc.Last(); sk != nil; sk, _ = sc.Prev() { + _, snapshotEpoch, err := segment.DecodeUvarintAscending(sk) + if err != nil { + continue + } + rv = append(rv, snapshotEpoch) + } + return nil + }) + return rv, err +} + +// Returns the *.zap file names that are listed in the rootBolt. +func (s *Scorch) loadZapFileNames() (map[string]struct{}, error) { + rv := map[string]struct{}{} + err := s.rootBolt.View(func(tx *bolt.Tx) error { + snapshots := tx.Bucket(boltSnapshotsBucket) + if snapshots == nil { + return nil + } + sc := snapshots.Cursor() + for sk, _ := sc.First(); sk != nil; sk, _ = sc.Next() { + snapshot := snapshots.Bucket(sk) + if snapshot == nil { + continue + } + segc := snapshot.Cursor() + for segk, _ := segc.First(); segk != nil; segk, _ = segc.Next() { + if segk[0] == boltInternalKey[0] { + continue + } + segmentBucket := snapshot.Bucket(segk) + if segmentBucket == nil { + continue + } + pathBytes := segmentBucket.Get(boltPathKey) + if pathBytes == nil { + continue + } + pathString := string(pathBytes) + rv[string(pathString)] = struct{}{} + } + } + return nil + }) + + return rv, err +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/reader_test.go b/vendor/github.com/blevesearch/bleve/index/scorch/reader_test.go new file mode 100644 index 0000000..4eb9b5f --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/reader_test.go @@ -0,0 +1,663 @@ +// Copyright (c) 2017 Couchbase, 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 scorch + +import ( + "reflect" + "testing" + + "github.com/blevesearch/bleve/document" + "github.com/blevesearch/bleve/index" +) + +func TestIndexReader(t *testing.T) { + defer func() { + err := DestroyTest() + if err != nil { + t.Fatal(err) + } + }() + + analysisQueue := index.NewAnalysisQueue(1) + idx, err := NewScorch(Name, testConfig, analysisQueue) + if err != nil { + t.Fatal(err) + } + err = idx.Open() + if err != nil { + t.Fatalf("error opening index: %v", err) + } + defer func() { + err := idx.Close() + if err != nil { + t.Fatal(err) + } + }() + + var expectedCount uint64 + doc := document.NewDocument("1") + doc.AddField(document.NewTextField("name", []uint64{}, []byte("test"))) + err = idx.Update(doc) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + expectedCount++ + + doc = document.NewDocument("2") + doc.AddField(document.NewTextFieldWithAnalyzer("name", []uint64{}, []byte("test test test"), testAnalyzer)) + doc.AddField(document.NewTextFieldCustom("desc", []uint64{}, []byte("eat more rice"), document.IndexField|document.IncludeTermVectors, testAnalyzer)) + err = idx.Update(doc) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + expectedCount++ + + indexReader, err := idx.Reader() + if err != nil { + t.Error(err) + } + defer func() { + err := indexReader.Close() + if err != nil { + t.Fatal(err) + } + }() + + // first look for a term that doesn't exist + reader, err := indexReader.TermFieldReader([]byte("nope"), "name", true, true, true) + if err != nil { + t.Errorf("Error accessing term field reader: %v", err) + } + count := reader.Count() + if count != 0 { + t.Errorf("Expected doc count to be: %d got: %d", 0, count) + } + err = reader.Close() + if err != nil { + t.Fatal(err) + } + + reader, err = indexReader.TermFieldReader([]byte("test"), "name", true, true, true) + if err != nil { + t.Errorf("Error accessing term field reader: %v", err) + } + + expectedCount = 2 + count = reader.Count() + if count != expectedCount { + t.Errorf("Exptected doc count to be: %d got: %d", expectedCount, count) + } + + var match *index.TermFieldDoc + var actualCount uint64 + match, err = reader.Next(nil) + for err == nil && match != nil { + match, err = reader.Next(nil) + if err != nil { + t.Errorf("unexpected error reading next") + } + actualCount++ + } + if actualCount != count { + t.Errorf("count was 2, but only saw %d", actualCount) + } + + internalIDBogus, err := indexReader.InternalID("a-bogus-docId") + if err != nil { + t.Fatal(err) + } + if internalIDBogus != nil { + t.Errorf("expected bogus docId to have nil InternalID") + } + + internalID2, err := indexReader.InternalID("2") + if err != nil { + t.Fatal(err) + } + expectedMatch := &index.TermFieldDoc{ + ID: internalID2, + Freq: 1, + Norm: 0.5773502588272095, + Vectors: []*index.TermFieldVector{ + { + Field: "desc", + Pos: 3, + Start: 9, + End: 13, + }, + }, + } + tfr, err := indexReader.TermFieldReader([]byte("rice"), "desc", true, true, true) + if err != nil { + t.Errorf("unexpected error: %v", err) + } + match, err = tfr.Next(nil) + if err != nil { + t.Errorf("unexpected error: %v", err) + } + if !reflect.DeepEqual(expectedMatch, match) { + t.Errorf("got %#v, expected %#v", match, expectedMatch) + } + err = reader.Close() + if err != nil { + t.Fatal(err) + } + + // now test usage of advance + reader, err = indexReader.TermFieldReader([]byte("test"), "name", true, true, true) + if err != nil { + t.Errorf("Error accessing term field reader: %v", err) + } + + match, err = reader.Advance(internalID2, nil) + if err != nil { + t.Errorf("unexpected error: %v", err) + } + if match == nil { + t.Fatalf("Expected match, got nil") + } + if !match.ID.Equals(internalID2) { + t.Errorf("Expected ID '2', got '%s'", match.ID) + } + // NOTE: no point in changing this to internal id 3, there is no id 3 + // the test is looking for something that doens't exist and this doesn't + match, err = reader.Advance(index.IndexInternalID("3"), nil) + if err != nil { + t.Errorf("unexpected error: %v", err) + } + if match != nil { + t.Errorf("expected nil, got %v", match) + } + err = reader.Close() + if err != nil { + t.Fatal(err) + } + + // now test creating a reader for a field that doesn't exist + reader, err = indexReader.TermFieldReader([]byte("water"), "doesnotexist", true, true, true) + if err != nil { + t.Errorf("Error accessing term field reader: %v", err) + } + count = reader.Count() + if count != 0 { + t.Errorf("expected count 0 for reader of non-existent field") + } + match, err = reader.Next(nil) + if err != nil { + t.Errorf("unexpected error: %v", err) + } + if match != nil { + t.Errorf("expected nil, got %v", match) + } + match, err = reader.Advance(index.IndexInternalID("anywhere"), nil) + if err != nil { + t.Errorf("unexpected error: %v", err) + } + if match != nil { + t.Errorf("expected nil, got %v", match) + } + +} + +func TestIndexDocIdReader(t *testing.T) { + defer func() { + err := DestroyTest() + if err != nil { + t.Fatal(err) + } + }() + + analysisQueue := index.NewAnalysisQueue(1) + idx, err := NewScorch(Name, testConfig, analysisQueue) + if err != nil { + t.Fatal(err) + } + err = idx.Open() + if err != nil { + t.Fatalf("error opening index: %v", err) + } + defer func() { + err := idx.Close() + if err != nil { + t.Fatal(err) + } + }() + + var expectedCount uint64 + doc := document.NewDocument("1") + doc.AddField(document.NewTextField("name", []uint64{}, []byte("test"))) + err = idx.Update(doc) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + expectedCount++ + + doc = document.NewDocument("2") + doc.AddField(document.NewTextField("name", []uint64{}, []byte("test test test"))) + doc.AddField(document.NewTextFieldWithIndexingOptions("desc", []uint64{}, []byte("eat more rice"), document.IndexField|document.IncludeTermVectors)) + err = idx.Update(doc) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + expectedCount++ + + indexReader, err := idx.Reader() + if err != nil { + t.Error(err) + } + defer func() { + err := indexReader.Close() + if err != nil { + t.Error(err) + } + }() + + // first get all doc ids + reader, err := indexReader.DocIDReaderAll() + if err != nil { + t.Errorf("Error accessing doc id reader: %v", err) + } + defer func() { + err := reader.Close() + if err != nil { + t.Fatal(err) + } + }() + + id, err := reader.Next() + count := uint64(0) + for id != nil { + count++ + id, err = reader.Next() + } + if count != expectedCount { + t.Errorf("expected %d, got %d", expectedCount, count) + } + + // try it again, but jump to the second doc this time + reader2, err := indexReader.DocIDReaderAll() + if err != nil { + t.Errorf("Error accessing doc id reader: %v", err) + } + defer func() { + err := reader2.Close() + if err != nil { + t.Error(err) + } + }() + + internalID2, err := indexReader.InternalID("2") + if err != nil { + t.Fatal(err) + } + + id, err = reader2.Advance(internalID2) + if err != nil { + t.Error(err) + } + if !id.Equals(internalID2) { + t.Errorf("expected to find id '2', got '%s'", id) + } + + // again 3 doesn't exist cannot use internal id for 3 as there is none + // the important aspect is that this id doesn't exist, so its ok + id, err = reader2.Advance(index.IndexInternalID("3")) + if err != nil { + t.Error(err) + } + if id != nil { + t.Errorf("expected to find id '', got '%s'", id) + } +} + +func TestIndexDocIdOnlyReader(t *testing.T) { + defer func() { + err := DestroyTest() + if err != nil { + t.Fatal(err) + } + }() + + analysisQueue := index.NewAnalysisQueue(1) + idx, err := NewScorch(Name, testConfig, analysisQueue) + if err != nil { + t.Fatal(err) + } + err = idx.Open() + if err != nil { + t.Fatalf("error opening index: %v", err) + } + defer func() { + err := idx.Close() + if err != nil { + t.Fatal(err) + } + }() + + doc := document.NewDocument("1") + err = idx.Update(doc) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + + doc = document.NewDocument("3") + err = idx.Update(doc) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + + doc = document.NewDocument("5") + err = idx.Update(doc) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + + doc = document.NewDocument("7") + err = idx.Update(doc) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + + doc = document.NewDocument("9") + err = idx.Update(doc) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + + indexReader, err := idx.Reader() + if err != nil { + t.Error(err) + } + defer func() { + err := indexReader.Close() + if err != nil { + t.Error(err) + } + }() + + onlyIds := []string{"1", "5", "9"} + reader, err := indexReader.DocIDReaderOnly(onlyIds) + if err != nil { + t.Errorf("Error accessing doc id reader: %v", err) + } + defer func() { + err := reader.Close() + if err != nil { + t.Fatal(err) + } + }() + + id, err := reader.Next() + count := uint64(0) + for id != nil { + count++ + id, err = reader.Next() + if err != nil { + t.Fatal(err) + } + } + if count != 3 { + t.Errorf("expected 3, got %d", count) + } + + // commented out because advance works with internal ids + // this test presumes we see items in external doc id order + // which is no longer the case, so simply converting external ids + // to internal ones is not logically correct + // not removing though because we need some way to test Advance() + + // // try it again, but jump + // reader2, err := indexReader.DocIDReaderOnly(onlyIds) + // if err != nil { + // t.Errorf("Error accessing doc id reader: %v", err) + // } + // defer func() { + // err := reader2.Close() + // if err != nil { + // t.Error(err) + // } + // }() + // + // id, err = reader2.Advance(index.IndexInternalID("5")) + // if err != nil { + // t.Error(err) + // } + // if !id.Equals(index.IndexInternalID("5")) { + // t.Errorf("expected to find id '5', got '%s'", id) + // } + // + // id, err = reader2.Advance(index.IndexInternalID("a")) + // if err != nil { + // t.Error(err) + // } + // if id != nil { + // t.Errorf("expected to find id '', got '%s'", id) + // } + + // some keys aren't actually there + onlyIds = []string{"0", "2", "4", "5", "6", "8", "a"} + reader3, err := indexReader.DocIDReaderOnly(onlyIds) + if err != nil { + t.Errorf("Error accessing doc id reader: %v", err) + } + defer func() { + err := reader3.Close() + if err != nil { + t.Error(err) + } + }() + + id, err = reader3.Next() + count = uint64(0) + for id != nil { + count++ + id, err = reader3.Next() + } + if count != 1 { + t.Errorf("expected 1, got %d", count) + } + + // commented out because advance works with internal ids + // this test presumes we see items in external doc id order + // which is no longer the case, so simply converting external ids + // to internal ones is not logically correct + // not removing though because we need some way to test Advance() + + // // mix advance and next + // onlyIds = []string{"0", "1", "3", "5", "6", "9"} + // reader4, err := indexReader.DocIDReaderOnly(onlyIds) + // if err != nil { + // t.Errorf("Error accessing doc id reader: %v", err) + // } + // defer func() { + // err := reader4.Close() + // if err != nil { + // t.Error(err) + // } + // }() + // + // // first key is "1" + // id, err = reader4.Next() + // if err != nil { + // t.Error(err) + // } + // if !id.Equals(index.IndexInternalID("1")) { + // t.Errorf("expected to find id '1', got '%s'", id) + // } + // + // // advancing to key we dont have gives next + // id, err = reader4.Advance(index.IndexInternalID("2")) + // if err != nil { + // t.Error(err) + // } + // if !id.Equals(index.IndexInternalID("3")) { + // t.Errorf("expected to find id '3', got '%s'", id) + // } + // + // // next after advance works + // id, err = reader4.Next() + // if err != nil { + // t.Error(err) + // } + // if !id.Equals(index.IndexInternalID("5")) { + // t.Errorf("expected to find id '5', got '%s'", id) + // } + // + // // advancing to key we do have works + // id, err = reader4.Advance(index.IndexInternalID("9")) + // if err != nil { + // t.Error(err) + // } + // if !id.Equals(index.IndexInternalID("9")) { + // t.Errorf("expected to find id '9', got '%s'", id) + // } + // + // // advance backwards at end + // id, err = reader4.Advance(index.IndexInternalID("4")) + // if err != nil { + // t.Error(err) + // } + // if !id.Equals(index.IndexInternalID("5")) { + // t.Errorf("expected to find id '5', got '%s'", id) + // } + // + // // next after advance works + // id, err = reader4.Next() + // if err != nil { + // t.Error(err) + // } + // if !id.Equals(index.IndexInternalID("9")) { + // t.Errorf("expected to find id '9', got '%s'", id) + // } + // + // // advance backwards to key that exists, but not in only set + // id, err = reader4.Advance(index.IndexInternalID("7")) + // if err != nil { + // t.Error(err) + // } + // if !id.Equals(index.IndexInternalID("9")) { + // t.Errorf("expected to find id '9', got '%s'", id) + // } + +} + +func TestSegmentIndexAndLocalDocNumFromGlobal(t *testing.T) { + tests := []struct { + offsets []uint64 + globalDocNum uint64 + segmentIndex int + localDocNum uint64 + }{ + // just 1 segment + { + offsets: []uint64{0}, + globalDocNum: 0, + segmentIndex: 0, + localDocNum: 0, + }, + { + offsets: []uint64{0}, + globalDocNum: 1, + segmentIndex: 0, + localDocNum: 1, + }, + { + offsets: []uint64{0}, + globalDocNum: 25, + segmentIndex: 0, + localDocNum: 25, + }, + // now 2 segments, 30 docs in first + { + offsets: []uint64{0, 30}, + globalDocNum: 0, + segmentIndex: 0, + localDocNum: 0, + }, + { + offsets: []uint64{0, 30}, + globalDocNum: 1, + segmentIndex: 0, + localDocNum: 1, + }, + { + offsets: []uint64{0, 30}, + globalDocNum: 25, + segmentIndex: 0, + localDocNum: 25, + }, + { + offsets: []uint64{0, 30}, + globalDocNum: 30, + segmentIndex: 1, + localDocNum: 0, + }, + { + offsets: []uint64{0, 30}, + globalDocNum: 35, + segmentIndex: 1, + localDocNum: 5, + }, + // lots of segments + { + offsets: []uint64{0, 30, 40, 70, 99, 172, 800, 25000}, + globalDocNum: 0, + segmentIndex: 0, + localDocNum: 0, + }, + { + offsets: []uint64{0, 30, 40, 70, 99, 172, 800, 25000}, + globalDocNum: 25, + segmentIndex: 0, + localDocNum: 25, + }, + { + offsets: []uint64{0, 30, 40, 70, 99, 172, 800, 25000}, + globalDocNum: 35, + segmentIndex: 1, + localDocNum: 5, + }, + { + offsets: []uint64{0, 30, 40, 70, 99, 172, 800, 25000}, + globalDocNum: 100, + segmentIndex: 4, + localDocNum: 1, + }, + { + offsets: []uint64{0, 30, 40, 70, 99, 172, 800, 25000}, + globalDocNum: 825, + segmentIndex: 6, + localDocNum: 25, + }, + } + + for _, test := range tests { + i := &IndexSnapshot{ + offsets: test.offsets, + refs: 1, + } + gotSegmentIndex, gotLocalDocNum := i.segmentIndexAndLocalDocNumFromGlobal(test.globalDocNum) + if gotSegmentIndex != test.segmentIndex { + t.Errorf("got segment index %d expected %d for offsets %v globalDocNum %d", gotSegmentIndex, test.segmentIndex, test.offsets, test.globalDocNum) + } + if gotLocalDocNum != test.localDocNum { + t.Errorf("got localDocNum %d expected %d for offsets %v globalDocNum %d", gotLocalDocNum, test.localDocNum, test.offsets, test.globalDocNum) + } + err := i.DecRef() + if err != nil { + t.Errorf("expected no err, got: %v", err) + } + } +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/scorch.go b/vendor/github.com/blevesearch/bleve/index/scorch/scorch.go new file mode 100644 index 0000000..cc47cda --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/scorch.go @@ -0,0 +1,524 @@ +// Copyright (c) 2018 Couchbase, 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 scorch + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "os" + "sync" + "sync/atomic" + "time" + + "github.com/RoaringBitmap/roaring" + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/document" + "github.com/blevesearch/bleve/index" + "github.com/blevesearch/bleve/index/scorch/segment" + "github.com/blevesearch/bleve/index/scorch/segment/zap" + "github.com/blevesearch/bleve/index/store" + "github.com/blevesearch/bleve/registry" + "github.com/boltdb/bolt" +) + +const Name = "scorch" + +const Version uint8 = 1 + +var ErrClosed = fmt.Errorf("scorch closed") + +type Scorch struct { + readOnly bool + version uint8 + config map[string]interface{} + analysisQueue *index.AnalysisQueue + stats Stats + nextSegmentID uint64 + path string + + unsafeBatch bool + + rootLock sync.RWMutex + root *IndexSnapshot // holds 1 ref-count on the root + rootPersisted []chan error // closed when root is persisted + nextSnapshotEpoch uint64 + eligibleForRemoval []uint64 // Index snapshot epochs that are safe to GC. + ineligibleForRemoval map[string]bool // Filenames that should not be GC'ed yet. + numSnapshotsToKeep int + + closeCh chan struct{} + introductions chan *segmentIntroduction + persists chan *persistIntroduction + merges chan *segmentMerge + introducerNotifier chan *epochWatcher + revertToSnapshots chan *snapshotReversion + persisterNotifier chan *epochWatcher + rootBolt *bolt.DB + asyncTasks sync.WaitGroup + + onEvent func(event Event) + onAsyncError func(err error) +} + +func NewScorch(storeName string, + config map[string]interface{}, + analysisQueue *index.AnalysisQueue) (index.Index, error) { + rv := &Scorch{ + version: Version, + config: config, + analysisQueue: analysisQueue, + nextSnapshotEpoch: 1, + closeCh: make(chan struct{}), + ineligibleForRemoval: map[string]bool{}, + } + rv.root = &IndexSnapshot{parent: rv, refs: 1} + ro, ok := config["read_only"].(bool) + if ok { + rv.readOnly = ro + } + ub, ok := config["unsafe_batch"].(bool) + if ok { + rv.unsafeBatch = ub + } + ecbName, ok := config["eventCallbackName"].(string) + if ok { + rv.onEvent = RegistryEventCallbacks[ecbName] + } + aecbName, ok := config["asyncErrorCallbackName"].(string) + if ok { + rv.onAsyncError = RegistryAsyncErrorCallbacks[aecbName] + } + return rv, nil +} + +func (s *Scorch) fireEvent(kind EventKind, dur time.Duration) { + if s.onEvent != nil { + s.onEvent(Event{Kind: kind, Scorch: s, Duration: dur}) + } +} + +func (s *Scorch) fireAsyncError(err error) { + if s.onAsyncError != nil { + s.onAsyncError(err) + } + atomic.AddUint64(&s.stats.TotOnErrors, 1) +} + +func (s *Scorch) Open() error { + err := s.openBolt() + if err != nil { + return err + } + + s.asyncTasks.Add(1) + go s.mainLoop() + + if !s.readOnly && s.path != "" { + s.asyncTasks.Add(1) + go s.persisterLoop() + s.asyncTasks.Add(1) + go s.mergerLoop() + } + + return nil +} + +func (s *Scorch) openBolt() error { + var ok bool + s.path, ok = s.config["path"].(string) + if !ok { + return fmt.Errorf("must specify path") + } + if s.path == "" { + s.unsafeBatch = true + } + + var rootBoltOpt *bolt.Options + if s.readOnly { + rootBoltOpt = &bolt.Options{ + ReadOnly: true, + } + } else { + if s.path != "" { + err := os.MkdirAll(s.path, 0700) + if err != nil { + return err + } + } + } + + rootBoltPath := s.path + string(os.PathSeparator) + "root.bolt" + var err error + if s.path != "" { + s.rootBolt, err = bolt.Open(rootBoltPath, 0600, rootBoltOpt) + if err != nil { + return err + } + + // now see if there is any existing state to load + err = s.loadFromBolt() + if err != nil { + _ = s.Close() + return err + } + } + + s.introductions = make(chan *segmentIntroduction) + s.persists = make(chan *persistIntroduction) + s.merges = make(chan *segmentMerge) + s.introducerNotifier = make(chan *epochWatcher, 1) + s.revertToSnapshots = make(chan *snapshotReversion) + s.persisterNotifier = make(chan *epochWatcher, 1) + + if !s.readOnly && s.path != "" { + err := s.removeOldZapFiles() // Before persister or merger create any new files. + if err != nil { + _ = s.Close() + return err + } + } + + s.numSnapshotsToKeep = NumSnapshotsToKeep + if v, ok := s.config["numSnapshotsToKeep"]; ok { + var t int + if t, err = parseToInteger(v); err != nil { + return fmt.Errorf("numSnapshotsToKeep parse err: %v", err) + } + if t > 0 { + s.numSnapshotsToKeep = t + } + } + + return nil +} + +func (s *Scorch) Close() (err error) { + startTime := time.Now() + defer func() { + s.fireEvent(EventKindClose, time.Since(startTime)) + }() + + s.fireEvent(EventKindCloseStart, 0) + + // signal to async tasks we want to close + close(s.closeCh) + // wait for them to close + s.asyncTasks.Wait() + // now close the root bolt + if s.rootBolt != nil { + err = s.rootBolt.Close() + s.rootLock.Lock() + if s.root != nil { + _ = s.root.DecRef() + } + s.root = nil + s.rootLock.Unlock() + } + + return +} + +func (s *Scorch) Update(doc *document.Document) error { + b := index.NewBatch() + b.Update(doc) + return s.Batch(b) +} + +func (s *Scorch) Delete(id string) error { + b := index.NewBatch() + b.Delete(id) + return s.Batch(b) +} + +// Batch applices a batch of changes to the index atomically +func (s *Scorch) Batch(batch *index.Batch) (err error) { + start := time.Now() + + defer func() { + s.fireEvent(EventKindBatchIntroduction, time.Since(start)) + }() + + resultChan := make(chan *index.AnalysisResult, len(batch.IndexOps)) + + var numUpdates uint64 + var numDeletes uint64 + var numPlainTextBytes uint64 + var ids []string + for docID, doc := range batch.IndexOps { + if doc != nil { + // insert _id field + doc.AddField(document.NewTextFieldCustom("_id", nil, []byte(doc.ID), document.IndexField|document.StoreField, nil)) + numUpdates++ + numPlainTextBytes += doc.NumPlainTextBytes() + } else { + numDeletes++ + } + ids = append(ids, docID) + } + + // FIXME could sort ids list concurrent with analysis? + + go func() { + for _, doc := range batch.IndexOps { + if doc != nil { + aw := index.NewAnalysisWork(s, doc, resultChan) + // put the work on the queue + s.analysisQueue.Queue(aw) + } + } + }() + + // wait for analysis result + analysisResults := make([]*index.AnalysisResult, int(numUpdates)) + var itemsDeQueued uint64 + for itemsDeQueued < numUpdates { + result := <-resultChan + analysisResults[itemsDeQueued] = result + itemsDeQueued++ + } + close(resultChan) + + atomic.AddUint64(&s.stats.TotAnalysisTime, uint64(time.Since(start))) + + indexStart := time.Now() + + // notify handlers that we're about to introduce a segment + s.fireEvent(EventKindBatchIntroductionStart, 0) + + var newSegment segment.Segment + if len(analysisResults) > 0 { + newSegment, err = zap.AnalysisResultsToSegmentBase(analysisResults, DefaultChunkFactor) + if err != nil { + return err + } + } else { + atomic.AddUint64(&s.stats.TotBatchesEmpty, 1) + } + + err = s.prepareSegment(newSegment, ids, batch.InternalOps) + if err != nil { + if newSegment != nil { + _ = newSegment.Close() + } + atomic.AddUint64(&s.stats.TotOnErrors, 1) + } else { + atomic.AddUint64(&s.stats.TotUpdates, numUpdates) + atomic.AddUint64(&s.stats.TotDeletes, numDeletes) + atomic.AddUint64(&s.stats.TotBatches, 1) + atomic.AddUint64(&s.stats.TotIndexedPlainTextBytes, numPlainTextBytes) + } + + atomic.AddUint64(&s.stats.TotIndexTime, uint64(time.Since(indexStart))) + + return err +} + +func (s *Scorch) prepareSegment(newSegment segment.Segment, ids []string, + internalOps map[string][]byte) error { + + // new introduction + introduction := &segmentIntroduction{ + id: atomic.AddUint64(&s.nextSegmentID, 1), + data: newSegment, + ids: ids, + obsoletes: make(map[uint64]*roaring.Bitmap), + internal: internalOps, + applied: make(chan error), + } + + if !s.unsafeBatch { + introduction.persisted = make(chan error, 1) + } + + // optimistically prepare obsoletes outside of rootLock + s.rootLock.RLock() + root := s.root + root.AddRef() + s.rootLock.RUnlock() + + for _, seg := range root.segment { + delta, err := seg.segment.DocNumbers(ids) + if err != nil { + return err + } + introduction.obsoletes[seg.id] = delta + } + + _ = root.DecRef() + + introStartTime := time.Now() + + s.introductions <- introduction + + // block until this segment is applied + err := <-introduction.applied + if err != nil { + return err + } + + if introduction.persisted != nil { + err = <-introduction.persisted + } + + introTime := uint64(time.Since(introStartTime)) + atomic.AddUint64(&s.stats.TotBatchIntroTime, introTime) + if atomic.LoadUint64(&s.stats.MaxBatchIntroTime) < introTime { + atomic.StoreUint64(&s.stats.MaxBatchIntroTime, introTime) + } + + return err +} + +func (s *Scorch) SetInternal(key, val []byte) error { + b := index.NewBatch() + b.SetInternal(key, val) + return s.Batch(b) +} + +func (s *Scorch) DeleteInternal(key []byte) error { + b := index.NewBatch() + b.DeleteInternal(key) + return s.Batch(b) +} + +// Reader returns a low-level accessor on the index data. Close it to +// release associated resources. +func (s *Scorch) Reader() (index.IndexReader, error) { + return s.currentSnapshot(), nil +} + +func (s *Scorch) currentSnapshot() *IndexSnapshot { + s.rootLock.RLock() + rv := s.root + rv.AddRef() + s.rootLock.RUnlock() + return rv +} + +func (s *Scorch) Stats() json.Marshaler { + return &s.stats +} +func (s *Scorch) StatsMap() map[string]interface{} { + m := s.stats.ToMap() + + if s.path != "" { + finfos, err := ioutil.ReadDir(s.path) + if err == nil { + var numFilesOnDisk, numBytesUsedDisk uint64 + for _, finfo := range finfos { + if !finfo.IsDir() { + numBytesUsedDisk += uint64(finfo.Size()) + numFilesOnDisk++ + } + } + + m["CurOnDiskBytes"] = numBytesUsedDisk + m["CurOnDiskFiles"] = numFilesOnDisk + } + } + + // TODO: consider one day removing these backwards compatible + // names for apps using the old names + m["updates"] = m["TotUpdates"] + m["deletes"] = m["TotDeletes"] + m["batches"] = m["TotBatches"] + m["errors"] = m["TotOnErrors"] + m["analysis_time"] = m["TotAnalysisTime"] + m["index_time"] = m["TotIndexTime"] + m["term_searchers_started"] = m["TotTermSearchersStarted"] + m["term_searchers_finished"] = m["TotTermSearchersFinished"] + m["num_plain_text_bytes_indexed"] = m["TotIndexedPlainTextBytes"] + m["num_items_introduced"] = m["TotIntroducedItems"] + m["num_items_persisted"] = m["TotPersistedItems"] + m["num_bytes_used_disk"] = m["CurOnDiskBytes"] + m["num_files_on_disk"] = m["CurOnDiskFiles"] + m["total_compaction_written_bytes"] = m["TotFileMergeWrittenBytes"] + + return m +} + +func (s *Scorch) Analyze(d *document.Document) *index.AnalysisResult { + rv := &index.AnalysisResult{ + Document: d, + Analyzed: make([]analysis.TokenFrequencies, len(d.Fields)+len(d.CompositeFields)), + Length: make([]int, len(d.Fields)+len(d.CompositeFields)), + } + + for i, field := range d.Fields { + if field.Options().IsIndexed() { + fieldLength, tokenFreqs := field.Analyze() + rv.Analyzed[i] = tokenFreqs + rv.Length[i] = fieldLength + + if len(d.CompositeFields) > 0 { + // see if any of the composite fields need this + for _, compositeField := range d.CompositeFields { + compositeField.Compose(field.Name(), fieldLength, tokenFreqs) + } + } + } + } + + return rv +} + +func (s *Scorch) Advanced() (store.KVStore, error) { + return nil, nil +} + +func (s *Scorch) AddEligibleForRemoval(epoch uint64) { + s.rootLock.Lock() + if s.root == nil || s.root.epoch != epoch { + s.eligibleForRemoval = append(s.eligibleForRemoval, epoch) + } + s.rootLock.Unlock() +} + +func (s *Scorch) MemoryUsed() uint64 { + indexSnapshot := s.currentSnapshot() + defer func() { + _ = indexSnapshot.Close() + }() + return uint64(indexSnapshot.Size()) +} + +func (s *Scorch) markIneligibleForRemoval(filename string) { + s.rootLock.Lock() + s.ineligibleForRemoval[filename] = true + s.rootLock.Unlock() +} + +func (s *Scorch) unmarkIneligibleForRemoval(filename string) { + s.rootLock.Lock() + delete(s.ineligibleForRemoval, filename) + s.rootLock.Unlock() +} + +func init() { + registry.RegisterIndexType(Name, NewScorch) +} + +func parseToInteger(i interface{}) (int, error) { + switch v := i.(type) { + case float64: + return int(v), nil + case int: + return v, nil + + default: + return 0, fmt.Errorf("expects int or float64 value") + } +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/scorch_test.go b/vendor/github.com/blevesearch/bleve/index/scorch/scorch_test.go new file mode 100644 index 0000000..3be52cb --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/scorch_test.go @@ -0,0 +1,1709 @@ +// Copyright (c) 2017 Couchbase, 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 scorch + +import ( + "log" + "os" + "reflect" + "regexp" + "strconv" + "sync" + "testing" + "time" + + "github.com/blevesearch/bleve/analysis" + regexpTokenizer "github.com/blevesearch/bleve/analysis/tokenizer/regexp" + "github.com/blevesearch/bleve/document" + "github.com/blevesearch/bleve/index" +) + +func DestroyTest() error { + return os.RemoveAll("/tmp/bleve-scorch-test") +} + +var testConfig = map[string]interface{}{ + "path": "/tmp/bleve-scorch-test", +} + +var testAnalyzer = &analysis.Analyzer{ + Tokenizer: regexpTokenizer.NewRegexpTokenizer(regexp.MustCompile(`\w+`)), +} + +func TestIndexOpenReopen(t *testing.T) { + defer func() { + err := DestroyTest() + if err != nil { + t.Fatal(err) + } + }() + + analysisQueue := index.NewAnalysisQueue(1) + idx, err := NewScorch(Name, testConfig, analysisQueue) + if err != nil { + t.Fatal(err) + } + err = idx.Open() + if err != nil { + t.Errorf("error opening index: %v", err) + } + + var expectedCount uint64 + reader, err := idx.Reader() + if err != nil { + t.Fatal(err) + } + docCount, err := reader.DocCount() + if err != nil { + t.Error(err) + } + if docCount != expectedCount { + t.Errorf("Expected document count to be %d got %d", expectedCount, docCount) + } + err = reader.Close() + if err != nil { + t.Fatal(err) + } + + // insert a doc + doc := document.NewDocument("1") + doc.AddField(document.NewTextField("name", []uint64{}, []byte("test"))) + err = idx.Update(doc) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + expectedCount++ + + reader, err = idx.Reader() + if err != nil { + t.Fatal(err) + } + docCount, err = reader.DocCount() + if err != nil { + t.Error(err) + } + if docCount != expectedCount { + t.Errorf("Expected document count to be %d got %d", expectedCount, docCount) + } + err = reader.Close() + if err != nil { + t.Fatal(err) + } + + // now close it + err = idx.Close() + if err != nil { + t.Fatal(err) + } + + idx, err = NewScorch(Name, testConfig, analysisQueue) + if err != nil { + t.Fatal(err) + } + err = idx.Open() + if err != nil { + t.Errorf("error opening index: %v", err) + } + + // check the doc count again after reopening it + reader, err = idx.Reader() + if err != nil { + t.Fatal(err) + } + docCount, err = reader.DocCount() + if err != nil { + t.Error(err) + } + if docCount != expectedCount { + t.Errorf("Expected document count to be %d got %d", expectedCount, docCount) + } + err = reader.Close() + if err != nil { + t.Fatal(err) + } + + // now close it + err = idx.Close() + if err != nil { + t.Fatal(err) + } +} + +func TestIndexInsert(t *testing.T) { + defer func() { + err := DestroyTest() + if err != nil { + t.Fatal(err) + } + }() + + analysisQueue := index.NewAnalysisQueue(1) + idx, err := NewScorch(Name, testConfig, analysisQueue) + if err != nil { + t.Fatal(err) + } + err = idx.Open() + if err != nil { + t.Fatalf("error opening index: %v", err) + } + defer func() { + err := idx.Close() + if err != nil { + t.Fatal(err) + } + }() + + var expectedCount uint64 + reader, err := idx.Reader() + if err != nil { + t.Fatal(err) + } + docCount, err := reader.DocCount() + if err != nil { + t.Error(err) + } + if docCount != expectedCount { + t.Errorf("Expected document count to be %d got %d", expectedCount, docCount) + } + err = reader.Close() + if err != nil { + t.Fatal(err) + } + + doc := document.NewDocument("1") + doc.AddField(document.NewTextField("name", []uint64{}, []byte("test"))) + err = idx.Update(doc) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + expectedCount++ + + reader, err = idx.Reader() + if err != nil { + t.Fatal(err) + } + docCount, err = reader.DocCount() + if err != nil { + t.Error(err) + } + if docCount != expectedCount { + t.Errorf("Expected document count to be %d got %d", expectedCount, docCount) + } + err = reader.Close() + if err != nil { + t.Fatal(err) + } +} + +func TestIndexInsertThenDelete(t *testing.T) { + defer func() { + err := DestroyTest() + if err != nil { + t.Fatal(err) + } + }() + + analysisQueue := index.NewAnalysisQueue(1) + idx, err := NewScorch(Name, testConfig, analysisQueue) + if err != nil { + t.Fatal(err) + } + err = idx.Open() + if err != nil { + t.Fatalf("error opening index: %v", err) + } + defer func() { + err := idx.Close() + if err != nil { + t.Fatal(err) + } + }() + + var expectedCount uint64 + reader, err := idx.Reader() + if err != nil { + t.Fatal(err) + } + docCount, err := reader.DocCount() + if err != nil { + t.Error(err) + } + if docCount != expectedCount { + t.Errorf("Expected document count to be %d got %d", expectedCount, docCount) + } + err = reader.Close() + if err != nil { + t.Fatal(err) + } + + doc := document.NewDocument("1") + doc.AddField(document.NewTextField("name", []uint64{}, []byte("test"))) + err = idx.Update(doc) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + expectedCount++ + + doc2 := document.NewDocument("2") + doc2.AddField(document.NewTextField("name", []uint64{}, []byte("test"))) + err = idx.Update(doc2) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + expectedCount++ + + reader, err = idx.Reader() + if err != nil { + t.Fatal(err) + } + docCount, err = reader.DocCount() + if err != nil { + t.Error(err) + } + if docCount != expectedCount { + t.Errorf("Expected document count to be %d got %d", expectedCount, docCount) + } + iid, err := reader.InternalID("1") + if err != nil || iid == nil { + t.Errorf("unexpected on doc id 1") + } + iid, err = reader.InternalID("2") + if err != nil || iid == nil { + t.Errorf("unexpected on doc id 2") + } + iid, err = reader.InternalID("3") + if err != nil || iid != nil { + t.Errorf("unexpected on doc id 3") + } + err = reader.Close() + if err != nil { + t.Fatal(err) + } + + err = idx.Delete("1") + if err != nil { + t.Errorf("Error deleting entry from index: %v", err) + } + expectedCount-- + + reader, err = idx.Reader() + if err != nil { + t.Fatal(err) + } + docCount, err = reader.DocCount() + if err != nil { + t.Error(err) + } + if docCount != expectedCount { + t.Errorf("Expected document count to be %d got %d", expectedCount, docCount) + } + storedDoc, err := reader.Document("1") + if err != nil { + t.Error(err) + } + if storedDoc != nil { + t.Errorf("expected nil for deleted stored doc #1, got %v", storedDoc) + } + storedDoc, err = reader.Document("2") + if err != nil { + t.Error(err) + } + if storedDoc == nil { + t.Errorf("expected stored doc for #2, got nil") + } + err = reader.Close() + if err != nil { + t.Fatal(err) + } + + // now close it + err = idx.Close() + if err != nil { + t.Fatal(err) + } + + idx, err = NewScorch(Name, testConfig, analysisQueue) // reopen + if err != nil { + t.Fatal(err) + } + err = idx.Open() + if err != nil { + t.Errorf("error reopening index: %v", err) + } + + reader, err = idx.Reader() + if err != nil { + t.Fatal(err) + } + docCount, err = reader.DocCount() + if err != nil { + t.Error(err) + } + if docCount != expectedCount { + t.Errorf("Expected document count to be %d got %d", expectedCount, docCount) + } + storedDoc, err = reader.Document("1") + if err != nil { + t.Error(err) + } + if storedDoc != nil { + t.Errorf("expected nil for deleted stored doc #1, got %v", storedDoc) + } + storedDoc, err = reader.Document("2") + if err != nil { + t.Error(err) + } + if storedDoc == nil { + t.Errorf("expected stored doc for #2, got nil") + } + iid, err = reader.InternalID("1") + if err != nil || iid != nil { + t.Errorf("unexpected on doc id 1") + } + iid, err = reader.InternalID("2") + if err != nil || iid == nil { + t.Errorf("unexpected on doc id 2, should exist") + } + err = reader.Close() + if err != nil { + t.Fatal(err) + } + + err = idx.Delete("2") + if err != nil { + t.Errorf("Error deleting entry from index: %v", err) + } + expectedCount-- + + reader, err = idx.Reader() + if err != nil { + t.Fatal(err) + } + docCount, err = reader.DocCount() + if err != nil { + t.Error(err) + } + if docCount != expectedCount { + t.Errorf("Expected document count to be %d got %d", expectedCount, docCount) + } + storedDoc, err = reader.Document("1") + if err != nil { + t.Error(err) + } + if storedDoc != nil { + t.Errorf("expected nil for deleted stored doc #1, got %v", storedDoc) + } + storedDoc, err = reader.Document("2") + if err != nil { + t.Error(err) + } + if storedDoc != nil { + t.Errorf("expected nil for deleted stored doc #2, got nil") + } + err = reader.Close() + if err != nil { + t.Fatal(err) + } +} + +func TestIndexInsertThenUpdate(t *testing.T) { + defer func() { + err := DestroyTest() + if err != nil { + t.Fatal(err) + } + }() + + analysisQueue := index.NewAnalysisQueue(1) + idx, err := NewScorch(Name, testConfig, analysisQueue) + if err != nil { + t.Fatal(err) + } + + var expectedCount uint64 + err = idx.Open() + if err != nil { + t.Fatalf("error opening index: %v", err) + } + defer func() { + err := idx.Close() + if err != nil { + t.Fatal(err) + } + }() + + doc := document.NewDocument("1") + doc.AddField(document.NewTextField("name", []uint64{}, []byte("test"))) + err = idx.Update(doc) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + expectedCount++ + + // this update should overwrite one term, and introduce one new one + doc = document.NewDocument("1") + doc.AddField(document.NewTextFieldWithAnalyzer("name", []uint64{}, []byte("test fail"), testAnalyzer)) + err = idx.Update(doc) + if err != nil { + t.Errorf("Error deleting entry from index: %v", err) + } + + // now do another update that should remove one of the terms + doc = document.NewDocument("1") + doc.AddField(document.NewTextField("name", []uint64{}, []byte("fail"))) + err = idx.Update(doc) + if err != nil { + t.Errorf("Error deleting entry from index: %v", err) + } + + reader, err := idx.Reader() + if err != nil { + t.Fatal(err) + } + docCount, err := reader.DocCount() + if err != nil { + t.Error(err) + } + if docCount != expectedCount { + t.Errorf("Expected document count to be %d got %d", expectedCount, docCount) + } + err = reader.Close() + if err != nil { + t.Fatal(err) + } +} + +func TestIndexInsertMultiple(t *testing.T) { + defer func() { + err := DestroyTest() + if err != nil { + t.Fatal(err) + } + }() + + analysisQueue := index.NewAnalysisQueue(1) + idx, err := NewScorch(Name, testConfig, analysisQueue) + if err != nil { + t.Fatal(err) + } + err = idx.Open() + if err != nil { + t.Fatalf("error opening index: %v", err) + } + defer func() { + err := idx.Close() + if err != nil { + t.Fatal(err) + } + }() + + var expectedCount uint64 + + doc := document.NewDocument("1") + doc.AddField(document.NewTextField("name", []uint64{}, []byte("test"))) + err = idx.Update(doc) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + expectedCount++ + + doc = document.NewDocument("2") + doc.AddField(document.NewTextField("name", []uint64{}, []byte("test"))) + err = idx.Update(doc) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + expectedCount++ + + doc = document.NewDocument("3") + doc.AddField(document.NewTextField("name", []uint64{}, []byte("test"))) + err = idx.Update(doc) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + expectedCount++ + + reader, err := idx.Reader() + if err != nil { + t.Fatal(err) + } + docCount, err := reader.DocCount() + if err != nil { + t.Error(err) + } + if docCount != expectedCount { + t.Errorf("Expected document count to be %d got %d", expectedCount, docCount) + } + err = reader.Close() + if err != nil { + t.Fatal(err) + } +} + +func TestIndexInsertWithStore(t *testing.T) { + defer func() { + err := DestroyTest() + if err != nil { + t.Fatal(err) + } + }() + + analysisQueue := index.NewAnalysisQueue(1) + idx, err := NewScorch(Name, testConfig, analysisQueue) + if err != nil { + t.Fatal(err) + } + err = idx.Open() + if err != nil { + t.Fatalf("error opening index: %v", err) + } + defer func() { + cerr := idx.Close() + if err != nil { + t.Fatal(cerr) + } + }() + + var expectedCount uint64 + reader, err := idx.Reader() + if err != nil { + t.Fatal(err) + } + docCount, err := reader.DocCount() + if err != nil { + t.Error(err) + } + if docCount != expectedCount { + t.Errorf("Expected document count to be %d got %d", expectedCount, docCount) + } + err = reader.Close() + if err != nil { + t.Fatal(err) + } + + doc := document.NewDocument("1") + doc.AddField(document.NewTextFieldWithIndexingOptions("name", []uint64{}, []byte("test"), document.IndexField|document.StoreField)) + err = idx.Update(doc) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + expectedCount++ + + reader, err = idx.Reader() + if err != nil { + t.Fatal(err) + } + docCount, err = reader.DocCount() + if err != nil { + t.Error(err) + } + if docCount != expectedCount { + t.Errorf("Expected document count to be %d got %d", expectedCount, docCount) + } + err = reader.Close() + if err != nil { + t.Fatal(err) + } + + indexReader, err := idx.Reader() + if err != nil { + t.Error(err) + } + defer func() { + err := indexReader.Close() + if err != nil { + t.Fatal(err) + } + }() + + storedDoc, err := indexReader.Document("1") + if err != nil { + t.Error(err) + } + + if len(storedDoc.Fields) != 1 { + t.Errorf("expected 1 stored field, got %d", len(storedDoc.Fields)) + } + for _, field := range storedDoc.Fields { + if field.Name() == "name" { + textField, ok := field.(*document.TextField) + if !ok { + t.Errorf("expected text field") + } + if string(textField.Value()) != "test" { + t.Errorf("expected field content 'test', got '%s'", string(textField.Value())) + } + } else if field.Name() == "_id" { + t.Errorf("not expecting _id field") + } + } +} + +func TestIndexInternalCRUD(t *testing.T) { + defer func() { + err := DestroyTest() + if err != nil { + t.Fatal(err) + } + }() + + analysisQueue := index.NewAnalysisQueue(1) + idx, err := NewScorch(Name, testConfig, analysisQueue) + if err != nil { + t.Fatal(err) + } + err = idx.Open() + if err != nil { + t.Fatalf("error opening index: %v", err) + } + defer func() { + err := idx.Close() + if err != nil { + t.Fatal(err) + } + }() + + indexReader, err := idx.Reader() + if err != nil { + t.Error(err) + } + + if len(indexReader.(*IndexSnapshot).segment) != 0 { + t.Errorf("expected 0 segments") + } + + // get something that doesn't exist yet + val, err := indexReader.GetInternal([]byte("key")) + if err != nil { + t.Error(err) + } + if val != nil { + t.Errorf("expected nil, got %s", val) + } + + err = indexReader.Close() + if err != nil { + t.Fatal(err) + } + + // set + err = idx.SetInternal([]byte("key"), []byte("abc")) + if err != nil { + t.Error(err) + } + + indexReader2, err := idx.Reader() + if err != nil { + t.Error(err) + } + + if len(indexReader2.(*IndexSnapshot).segment) != 0 { + t.Errorf("expected 0 segments") + } + + // get + val, err = indexReader2.GetInternal([]byte("key")) + if err != nil { + t.Error(err) + } + if string(val) != "abc" { + t.Errorf("expected %s, got '%s'", "abc", val) + } + + err = indexReader2.Close() + if err != nil { + t.Fatal(err) + } + + // delete + err = idx.DeleteInternal([]byte("key")) + if err != nil { + t.Error(err) + } + + indexReader3, err := idx.Reader() + if err != nil { + t.Error(err) + } + + if len(indexReader3.(*IndexSnapshot).segment) != 0 { + t.Errorf("expected 0 segments") + } + + // get again + val, err = indexReader3.GetInternal([]byte("key")) + if err != nil { + t.Error(err) + } + if val != nil { + t.Errorf("expected nil, got %s", val) + } + + err = indexReader3.Close() + if err != nil { + t.Fatal(err) + } +} + +func TestIndexBatch(t *testing.T) { + defer func() { + err := DestroyTest() + if err != nil { + t.Fatal(err) + } + }() + + analysisQueue := index.NewAnalysisQueue(1) + idx, err := NewScorch(Name, testConfig, analysisQueue) + if err != nil { + t.Fatal(err) + } + err = idx.Open() + if err != nil { + t.Fatalf("error opening index: %v", err) + } + defer func() { + err := idx.Close() + if err != nil { + t.Fatal(err) + } + }() + + var expectedCount uint64 + + // first create 2 docs the old fashioned way + doc := document.NewDocument("1") + doc.AddField(document.NewTextField("name", []uint64{}, []byte("test"))) + err = idx.Update(doc) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + expectedCount++ + + doc = document.NewDocument("2") + doc.AddField(document.NewTextField("name", []uint64{}, []byte("test2"))) + err = idx.Update(doc) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + expectedCount++ + + // now create a batch which does 3 things + // insert new doc + // update existing doc + // delete existing doc + // net document count change 0 + + batch := index.NewBatch() + doc = document.NewDocument("3") + doc.AddField(document.NewTextField("name", []uint64{}, []byte("test3"))) + batch.Update(doc) + doc = document.NewDocument("2") + doc.AddField(document.NewTextField("name", []uint64{}, []byte("test2updated"))) + batch.Update(doc) + batch.Delete("1") + + err = idx.Batch(batch) + if err != nil { + t.Error(err) + } + + indexReader, err := idx.Reader() + if err != nil { + t.Error(err) + } + defer func() { + err := indexReader.Close() + if err != nil { + t.Fatal(err) + } + }() + + numSegments := len(indexReader.(*IndexSnapshot).segment) + if numSegments <= 0 { + t.Errorf("expected some segments, got: %d", numSegments) + } + + docCount, err := indexReader.DocCount() + if err != nil { + t.Fatal(err) + } + if docCount != expectedCount { + t.Errorf("Expected document count to be %d got %d", expectedCount, docCount) + } + + docIDReader, err := indexReader.DocIDReaderAll() + if err != nil { + t.Error(err) + } + var docIds []index.IndexInternalID + docID, err := docIDReader.Next() + for docID != nil && err == nil { + docIds = append(docIds, docID) + docID, err = docIDReader.Next() + } + if err != nil { + t.Error(err) + } + externalDocIds := map[string]struct{}{} + // convert back to external doc ids + for _, id := range docIds { + externalID, err := indexReader.ExternalID(id) + if err != nil { + t.Fatal(err) + } + externalDocIds[externalID] = struct{}{} + } + expectedDocIds := map[string]struct{}{ + "2": struct{}{}, + "3": struct{}{}, + } + if !reflect.DeepEqual(externalDocIds, expectedDocIds) { + t.Errorf("expected ids: %v, got ids: %v", expectedDocIds, externalDocIds) + } +} + +func TestIndexInsertUpdateDeleteWithMultipleTypesStored(t *testing.T) { + defer func() { + err := DestroyTest() + if err != nil { + t.Fatal(err) + } + }() + + analysisQueue := index.NewAnalysisQueue(1) + idx, err := NewScorch(Name, testConfig, analysisQueue) + if err != nil { + t.Fatal(err) + } + err = idx.Open() + if err != nil { + t.Fatalf("error opening index: %v", err) + } + defer func() { + err := idx.Close() + if err != nil { + t.Fatal(err) + } + }() + + var expectedCount uint64 + reader, err := idx.Reader() + if err != nil { + t.Fatal(err) + } + docCount, err := reader.DocCount() + if err != nil { + t.Error(err) + } + if docCount != expectedCount { + t.Errorf("Expected document count to be %d got %d", expectedCount, docCount) + } + err = reader.Close() + if err != nil { + t.Fatal(err) + } + + doc := document.NewDocument("1") + doc.AddField(document.NewTextFieldWithIndexingOptions("name", []uint64{}, []byte("test"), document.IndexField|document.StoreField)) + doc.AddField(document.NewNumericFieldWithIndexingOptions("age", []uint64{}, 35.99, document.IndexField|document.StoreField)) + df, err := document.NewDateTimeFieldWithIndexingOptions("unixEpoch", []uint64{}, time.Unix(0, 0), document.IndexField|document.StoreField) + if err != nil { + t.Error(err) + } + doc.AddField(df) + err = idx.Update(doc) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + expectedCount++ + + reader, err = idx.Reader() + if err != nil { + t.Fatal(err) + } + docCount, err = reader.DocCount() + if err != nil { + t.Error(err) + } + if docCount != expectedCount { + t.Errorf("Expected document count to be %d got %d", expectedCount, docCount) + } + err = reader.Close() + if err != nil { + t.Fatal(err) + } + + indexReader, err := idx.Reader() + if err != nil { + t.Error(err) + } + + storedDoc, err := indexReader.Document("1") + if err != nil { + t.Error(err) + } + + err = indexReader.Close() + if err != nil { + t.Error(err) + } + + if len(storedDoc.Fields) != 3 { + t.Errorf("expected 3 stored field, got %d", len(storedDoc.Fields)) + } + for _, field := range storedDoc.Fields { + + if field.Name() == "name" { + textField, ok := field.(*document.TextField) + if !ok { + t.Errorf("expected text field") + } + if string(textField.Value()) != "test" { + t.Errorf("expected field content 'test', got '%s'", string(textField.Value())) + } + } else if field.Name() == "age" { + numField, ok := field.(*document.NumericField) + if !ok { + t.Errorf("expected numeric field") + } + numFieldNumer, err := numField.Number() + if err != nil { + t.Error(err) + } else { + if numFieldNumer != 35.99 { + t.Errorf("expeted numeric value 35.99, got %f", numFieldNumer) + } + } + } else if field.Name() == "unixEpoch" { + dateField, ok := field.(*document.DateTimeField) + if !ok { + t.Errorf("expected date field") + } + dateFieldDate, err := dateField.DateTime() + if err != nil { + t.Error(err) + } else { + if dateFieldDate != time.Unix(0, 0).UTC() { + t.Errorf("expected date value unix epoch, got %v", dateFieldDate) + } + } + } else if field.Name() == "_id" { + t.Errorf("not expecting _id field") + } + } + + // now update the document, but omit one of the fields + doc = document.NewDocument("1") + doc.AddField(document.NewTextFieldWithIndexingOptions("name", []uint64{}, []byte("testup"), document.IndexField|document.StoreField)) + doc.AddField(document.NewNumericFieldWithIndexingOptions("age", []uint64{}, 36.99, document.IndexField|document.StoreField)) + err = idx.Update(doc) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + + indexReader2, err := idx.Reader() + if err != nil { + t.Error(err) + } + + // expected doc count shouldn't have changed + docCount, err = indexReader2.DocCount() + if err != nil { + t.Fatal(err) + } + if docCount != expectedCount { + t.Errorf("Expected document count to be %d got %d", expectedCount, docCount) + } + + // should only get 2 fields back now though + storedDoc, err = indexReader2.Document("1") + if err != nil { + t.Error(err) + } + + err = indexReader2.Close() + if err != nil { + t.Error(err) + } + + if len(storedDoc.Fields) != 2 { + t.Errorf("expected 2 stored field, got %d", len(storedDoc.Fields)) + } + + for _, field := range storedDoc.Fields { + + if field.Name() == "name" { + textField, ok := field.(*document.TextField) + if !ok { + t.Errorf("expected text field") + } + if string(textField.Value()) != "testup" { + t.Errorf("expected field content 'testup', got '%s'", string(textField.Value())) + } + } else if field.Name() == "age" { + numField, ok := field.(*document.NumericField) + if !ok { + t.Errorf("expected numeric field") + } + numFieldNumer, err := numField.Number() + if err != nil { + t.Error(err) + } else { + if numFieldNumer != 36.99 { + t.Errorf("expeted numeric value 36.99, got %f", numFieldNumer) + } + } + } else if field.Name() == "_id" { + t.Errorf("not expecting _id field") + } + } + + // now delete the document + err = idx.Delete("1") + expectedCount-- + + // expected doc count shouldn't have changed + reader, err = idx.Reader() + if err != nil { + t.Fatal(err) + } + docCount, err = reader.DocCount() + if err != nil { + t.Error(err) + } + if docCount != expectedCount { + t.Errorf("Expected document count to be %d got %d", expectedCount, docCount) + } + err = reader.Close() + if err != nil { + t.Fatal(err) + } +} + +func TestIndexInsertFields(t *testing.T) { + defer func() { + err := DestroyTest() + if err != nil { + t.Fatal(err) + } + }() + + analysisQueue := index.NewAnalysisQueue(1) + idx, err := NewScorch(Name, testConfig, analysisQueue) + if err != nil { + t.Fatal(err) + } + err = idx.Open() + if err != nil { + t.Fatalf("error opening index: %v", err) + } + defer func() { + err := idx.Close() + if err != nil { + t.Fatal(err) + } + }() + + doc := document.NewDocument("1") + doc.AddField(document.NewTextFieldWithIndexingOptions("name", []uint64{}, []byte("test"), document.IndexField|document.StoreField)) + doc.AddField(document.NewNumericFieldWithIndexingOptions("age", []uint64{}, 35.99, document.IndexField|document.StoreField)) + dateField, err := document.NewDateTimeFieldWithIndexingOptions("unixEpoch", []uint64{}, time.Unix(0, 0), document.IndexField|document.StoreField) + if err != nil { + t.Error(err) + } + doc.AddField(dateField) + err = idx.Update(doc) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + + indexReader, err := idx.Reader() + if err != nil { + t.Error(err) + } + defer func() { + err := indexReader.Close() + if err != nil { + t.Fatal(err) + } + }() + + fields, err := indexReader.Fields() + if err != nil { + t.Error(err) + } else { + fieldsMap := map[string]struct{}{} + for _, field := range fields { + fieldsMap[field] = struct{}{} + } + expectedFieldsMap := map[string]struct{}{ + "_id": struct{}{}, + "name": struct{}{}, + "age": struct{}{}, + "unixEpoch": struct{}{}, + } + if !reflect.DeepEqual(fieldsMap, expectedFieldsMap) { + t.Errorf("expected fields: %v, got %v", expectedFieldsMap, fieldsMap) + } + } + +} + +func TestIndexUpdateComposites(t *testing.T) { + defer func() { + err := DestroyTest() + if err != nil { + t.Fatal(err) + } + }() + + analysisQueue := index.NewAnalysisQueue(1) + idx, err := NewScorch(Name, testConfig, analysisQueue) + if err != nil { + t.Fatal(err) + } + err = idx.Open() + if err != nil { + t.Fatalf("error opening index: %v", err) + } + defer func() { + err := idx.Close() + if err != nil { + t.Fatal(err) + } + }() + + doc := document.NewDocument("1") + doc.AddField(document.NewTextFieldWithIndexingOptions("name", []uint64{}, []byte("test"), document.IndexField|document.StoreField)) + doc.AddField(document.NewTextFieldWithIndexingOptions("title", []uint64{}, []byte("mister"), document.IndexField|document.StoreField)) + doc.AddField(document.NewCompositeFieldWithIndexingOptions("_all", true, nil, nil, document.IndexField)) + err = idx.Update(doc) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + + // now lets update it + doc = document.NewDocument("1") + doc.AddField(document.NewTextFieldWithIndexingOptions("name", []uint64{}, []byte("testupdated"), document.IndexField|document.StoreField)) + doc.AddField(document.NewTextFieldWithIndexingOptions("title", []uint64{}, []byte("misterupdated"), document.IndexField|document.StoreField)) + doc.AddField(document.NewCompositeFieldWithIndexingOptions("_all", true, nil, nil, document.IndexField)) + err = idx.Update(doc) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + + indexReader, err := idx.Reader() + if err != nil { + t.Error(err) + } + defer func() { + err := indexReader.Close() + if err != nil { + t.Fatal(err) + } + }() + + // make sure new values are in index + storedDoc, err := indexReader.Document("1") + if err != nil { + t.Error(err) + } + if len(storedDoc.Fields) != 2 { + t.Errorf("expected 2 stored field, got %d", len(storedDoc.Fields)) + } + for _, field := range storedDoc.Fields { + if field.Name() == "name" { + textField, ok := field.(*document.TextField) + if !ok { + t.Errorf("expected text field") + } + if string(textField.Value()) != "testupdated" { + t.Errorf("expected field content 'test', got '%s'", string(textField.Value())) + } + } else if field.Name() == "_id" { + t.Errorf("not expecting _id field") + } + } +} + +func TestIndexTermReaderCompositeFields(t *testing.T) { + defer func() { + err := DestroyTest() + if err != nil { + t.Fatal(err) + } + }() + + analysisQueue := index.NewAnalysisQueue(1) + idx, err := NewScorch(Name, testConfig, analysisQueue) + if err != nil { + t.Fatal(err) + } + err = idx.Open() + if err != nil { + t.Fatalf("error opening index: %v", err) + } + defer func() { + err := idx.Close() + if err != nil { + t.Fatal(err) + } + }() + + doc := document.NewDocument("1") + doc.AddField(document.NewTextFieldWithIndexingOptions("name", []uint64{}, []byte("test"), document.IndexField|document.StoreField|document.IncludeTermVectors)) + doc.AddField(document.NewTextFieldWithIndexingOptions("title", []uint64{}, []byte("mister"), document.IndexField|document.StoreField|document.IncludeTermVectors)) + doc.AddField(document.NewCompositeFieldWithIndexingOptions("_all", true, nil, nil, document.IndexField|document.IncludeTermVectors)) + err = idx.Update(doc) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + + indexReader, err := idx.Reader() + if err != nil { + t.Error(err) + } + defer func() { + err := indexReader.Close() + if err != nil { + t.Fatal(err) + } + }() + + termFieldReader, err := indexReader.TermFieldReader([]byte("mister"), "_all", true, true, true) + if err != nil { + t.Error(err) + } + + tfd, err := termFieldReader.Next(nil) + for tfd != nil && err == nil { + externalID, err := indexReader.ExternalID(tfd.ID) + if err != nil { + t.Fatal(err) + } + if externalID != "1" { + t.Errorf("expected to find document id 1") + } + tfd, err = termFieldReader.Next(nil) + } + if err != nil { + t.Error(err) + } +} + +func TestIndexDocumentVisitFieldTerms(t *testing.T) { + defer func() { + err := DestroyTest() + if err != nil { + t.Fatal(err) + } + }() + + analysisQueue := index.NewAnalysisQueue(1) + idx, err := NewScorch(Name, testConfig, analysisQueue) + if err != nil { + t.Fatal(err) + } + err = idx.Open() + if err != nil { + t.Errorf("error opening index: %v", err) + } + defer func() { + err := idx.Close() + if err != nil { + t.Fatal(err) + } + }() + + doc := document.NewDocument("1") + doc.AddField(document.NewTextFieldWithIndexingOptions("name", []uint64{}, []byte("test"), document.IndexField|document.StoreField|document.IncludeTermVectors)) + doc.AddField(document.NewTextFieldWithIndexingOptions("title", []uint64{}, []byte("mister"), document.IndexField|document.StoreField|document.IncludeTermVectors)) + err = idx.Update(doc) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + + indexReader, err := idx.Reader() + if err != nil { + t.Error(err) + } + defer func() { + err := indexReader.Close() + if err != nil { + t.Fatal(err) + } + }() + + fieldTerms := make(index.FieldTerms) + + internalID, err := indexReader.InternalID("1") + if err != nil { + t.Fatal(err) + } + + err = indexReader.DocumentVisitFieldTerms(internalID, []string{"name", "title"}, func(field string, term []byte) { + fieldTerms[field] = append(fieldTerms[field], string(term)) + }) + if err != nil { + t.Error(err) + } + expectedFieldTerms := index.FieldTerms{ + "name": []string{"test"}, + "title": []string{"mister"}, + } + if !reflect.DeepEqual(fieldTerms, expectedFieldTerms) { + t.Errorf("expected field terms: %#v, got: %#v", expectedFieldTerms, fieldTerms) + } +} + +func TestConcurrentUpdate(t *testing.T) { + defer func() { + err := DestroyTest() + if err != nil { + t.Fatal(err) + } + }() + + analysisQueue := index.NewAnalysisQueue(1) + idx, err := NewScorch(Name, testConfig, analysisQueue) + if err != nil { + t.Fatal(err) + } + err = idx.Open() + if err != nil { + t.Fatalf("error opening index: %v", err) + } + defer func() { + err := idx.Close() + if err != nil { + t.Fatal(err) + } + }() + + // do some concurrent updates + var wg sync.WaitGroup + for i := 0; i < 100; i++ { + wg.Add(1) + go func(i int) { + doc := document.NewDocument("1") + doc.AddField(document.NewTextFieldWithIndexingOptions(strconv.Itoa(i), []uint64{}, []byte(strconv.Itoa(i)), document.StoreField)) + err := idx.Update(doc) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + wg.Done() + }(i) + } + wg.Wait() + + // now load the name field and see what we get + r, err := idx.Reader() + if err != nil { + log.Fatal(err) + } + + doc, err := r.Document("1") + if err != nil { + log.Fatal(err) + } + + if len(doc.Fields) > 2 { + t.Errorf("expected no more than 2 fields, found %d", len(doc.Fields)) + } +} + +func TestLargeField(t *testing.T) { + defer func() { + err := DestroyTest() + if err != nil { + t.Fatal(err) + } + }() + + analysisQueue := index.NewAnalysisQueue(1) + idx, err := NewScorch(Name, testConfig, analysisQueue) + if err != nil { + t.Fatal(err) + } + err = idx.Open() + if err != nil { + t.Fatalf("error opening index: %v", err) + } + defer func() { + err := idx.Close() + if err != nil { + t.Fatal(err) + } + }() + + var largeFieldValue []byte + for len(largeFieldValue) < 4096 { + largeFieldValue = append(largeFieldValue, bleveWikiArticle1K...) + } + + d := document.NewDocument("large") + f := document.NewTextFieldWithIndexingOptions("desc", nil, largeFieldValue, document.IndexField|document.StoreField) + d.AddField(f) + + err = idx.Update(d) + if err != nil { + t.Fatal(err) + } +} + +var bleveWikiArticle1K = []byte(`Boiling liquid expanding vapor explosion +From Wikipedia, the free encyclopedia +See also: Boiler explosion and Steam explosion + +Flames subsequent to a flammable liquid BLEVE from a tanker. BLEVEs do not necessarily involve fire. + +This article's tone or style may not reflect the encyclopedic tone used on Wikipedia. See Wikipedia's guide to writing better articles for suggestions. (July 2013) +A boiling liquid expanding vapor explosion (BLEVE, /ˈblɛviː/ blev-ee) is an explosion caused by the rupture of a vessel containing a pressurized liquid above its boiling point.[1] +Contents [hide] +1 Mechanism +1.1 Water example +1.2 BLEVEs without chemical reactions +2 Fires +3 Incidents +4 Safety measures +5 See also +6 References +7 External links +Mechanism[edit] + +This section needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed. (July 2013) +There are three characteristics of liquids which are relevant to the discussion of a BLEVE:`) + +func TestIndexDocumentVisitFieldTermsWithMultipleDocs(t *testing.T) { + defer func() { + err := DestroyTest() + if err != nil { + t.Fatal(err) + } + }() + + analysisQueue := index.NewAnalysisQueue(1) + idx, err := NewScorch(Name, testConfig, analysisQueue) + if err != nil { + t.Fatal(err) + } + err = idx.Open() + if err != nil { + t.Fatalf("error opening index: %v", err) + } + defer func() { + err := idx.Close() + if err != nil { + t.Fatal(err) + } + }() + + doc := document.NewDocument("1") + doc.AddField(document.NewTextFieldWithIndexingOptions("name", []uint64{}, []byte("test"), document.IndexField|document.StoreField|document.IncludeTermVectors)) + doc.AddField(document.NewTextFieldWithIndexingOptions("title", []uint64{}, []byte("mister"), document.IndexField|document.StoreField|document.IncludeTermVectors)) + + err = idx.Update(doc) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + + indexReader, err := idx.Reader() + if err != nil { + t.Error(err) + } + + fieldTerms := make(index.FieldTerms) + docNumber, err := indexReader.InternalID("1") + if err != nil { + t.Fatal(err) + } + err = indexReader.DocumentVisitFieldTerms(docNumber, []string{"name", "title"}, func(field string, term []byte) { + fieldTerms[field] = append(fieldTerms[field], string(term)) + }) + if err != nil { + t.Error(err) + } + expectedFieldTerms := index.FieldTerms{ + "name": []string{"test"}, + "title": []string{"mister"}, + } + if !reflect.DeepEqual(fieldTerms, expectedFieldTerms) { + t.Errorf("expected field terms: %#v, got: %#v", expectedFieldTerms, fieldTerms) + } + err = indexReader.Close() + if err != nil { + t.Fatal(err) + } + + doc2 := document.NewDocument("2") + doc2.AddField(document.NewTextFieldWithIndexingOptions("name", []uint64{}, []byte("test2"), document.IndexField|document.StoreField|document.IncludeTermVectors)) + doc2.AddField(document.NewTextFieldWithIndexingOptions("title", []uint64{}, []byte("mister2"), document.IndexField|document.StoreField|document.IncludeTermVectors)) + err = idx.Update(doc2) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + indexReader, err = idx.Reader() + if err != nil { + t.Error(err) + } + + fieldTerms = make(index.FieldTerms) + docNumber, err = indexReader.InternalID("2") + if err != nil { + t.Fatal(err) + } + err = indexReader.DocumentVisitFieldTerms(docNumber, []string{"name", "title"}, func(field string, term []byte) { + fieldTerms[field] = append(fieldTerms[field], string(term)) + }) + if err != nil { + t.Error(err) + } + expectedFieldTerms = index.FieldTerms{ + "name": []string{"test2"}, + "title": []string{"mister2"}, + } + if !reflect.DeepEqual(fieldTerms, expectedFieldTerms) { + t.Errorf("expected field terms: %#v, got: %#v", expectedFieldTerms, fieldTerms) + } + err = indexReader.Close() + if err != nil { + t.Fatal(err) + } + + doc3 := document.NewDocument("3") + doc3.AddField(document.NewTextFieldWithIndexingOptions("name3", []uint64{}, []byte("test3"), document.IndexField|document.StoreField|document.IncludeTermVectors)) + doc3.AddField(document.NewTextFieldWithIndexingOptions("title3", []uint64{}, []byte("mister3"), document.IndexField|document.StoreField|document.IncludeTermVectors)) + err = idx.Update(doc3) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + indexReader, err = idx.Reader() + if err != nil { + t.Error(err) + } + + fieldTerms = make(index.FieldTerms) + docNumber, err = indexReader.InternalID("3") + if err != nil { + t.Fatal(err) + } + err = indexReader.DocumentVisitFieldTerms(docNumber, []string{"name3", "title3"}, func(field string, term []byte) { + fieldTerms[field] = append(fieldTerms[field], string(term)) + }) + if err != nil { + t.Error(err) + } + expectedFieldTerms = index.FieldTerms{ + "name3": []string{"test3"}, + "title3": []string{"mister3"}, + } + if !reflect.DeepEqual(fieldTerms, expectedFieldTerms) { + t.Errorf("expected field terms: %#v, got: %#v", expectedFieldTerms, fieldTerms) + } + + fieldTerms = make(index.FieldTerms) + docNumber, err = indexReader.InternalID("1") + if err != nil { + t.Fatal(err) + } + err = indexReader.DocumentVisitFieldTerms(docNumber, []string{"name", "title"}, func(field string, term []byte) { + fieldTerms[field] = append(fieldTerms[field], string(term)) + }) + if err != nil { + t.Error(err) + } + expectedFieldTerms = index.FieldTerms{ + "name": []string{"test"}, + "title": []string{"mister"}, + } + if !reflect.DeepEqual(fieldTerms, expectedFieldTerms) { + t.Errorf("expected field terms: %#v, got: %#v", expectedFieldTerms, fieldTerms) + } + err = indexReader.Close() + if err != nil { + t.Fatal(err) + } + +} + +func TestIndexDocumentVisitFieldTermsWithMultipleFieldOptions(t *testing.T) { + defer func() { + err := DestroyTest() + if err != nil { + t.Fatal(err) + } + }() + + analysisQueue := index.NewAnalysisQueue(1) + idx, err := NewScorch(Name, testConfig, analysisQueue) + if err != nil { + t.Fatal(err) + } + err = idx.Open() + if err != nil { + t.Fatalf("error opening index: %v", err) + } + defer func() { + err := idx.Close() + if err != nil { + t.Fatal(err) + } + }() + + // mix of field options, this exercises the run time/ on the fly un inverting of + // doc values for custom options enabled field like designation, dept. + options := document.IndexField | document.StoreField | document.IncludeTermVectors + doc := document.NewDocument("1") + doc.AddField(document.NewTextField("name", []uint64{}, []byte("test"))) // default doc value persisted + doc.AddField(document.NewTextField("title", []uint64{}, []byte("mister"))) // default doc value persisted + doc.AddField(document.NewTextFieldWithIndexingOptions("designation", []uint64{}, []byte("engineer"), options)) + doc.AddField(document.NewTextFieldWithIndexingOptions("dept", []uint64{}, []byte("bleve"), options)) + + err = idx.Update(doc) + if err != nil { + t.Errorf("Error updating index: %v", err) + } + + indexReader, err := idx.Reader() + if err != nil { + t.Error(err) + } + + fieldTerms := make(index.FieldTerms) + docNumber, err := indexReader.InternalID("1") + if err != nil { + t.Fatal(err) + } + err = indexReader.DocumentVisitFieldTerms(docNumber, []string{"name", "designation", "dept"}, func(field string, term []byte) { + fieldTerms[field] = append(fieldTerms[field], string(term)) + }) + if err != nil { + t.Error(err) + } + expectedFieldTerms := index.FieldTerms{ + "name": []string{"test"}, + "designation": []string{"engineer"}, + "dept": []string{"bleve"}, + } + if !reflect.DeepEqual(fieldTerms, expectedFieldTerms) { + t.Errorf("expected field terms: %#v, got: %#v", expectedFieldTerms, fieldTerms) + } + err = indexReader.Close() + if err != nil { + t.Fatal(err) + } + +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/segment/empty.go b/vendor/github.com/blevesearch/bleve/index/scorch/segment/empty.go new file mode 100644 index 0000000..6c19f60 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/segment/empty.go @@ -0,0 +1,107 @@ +// Copyright (c) 2017 Couchbase, 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 segment + +import ( + "github.com/RoaringBitmap/roaring" + "github.com/blevesearch/bleve/index" +) + +type EmptySegment struct{} + +func (e *EmptySegment) Dictionary(field string) (TermDictionary, error) { + return &EmptyDictionary{}, nil +} + +func (e *EmptySegment) VisitDocument(num uint64, visitor DocumentFieldValueVisitor) error { + return nil +} + +func (e *EmptySegment) Count() uint64 { + return 0 +} + +func (e *EmptySegment) DocNumbers([]string) (*roaring.Bitmap, error) { + r := roaring.NewBitmap() + return r, nil +} + +func (e *EmptySegment) Fields() []string { + return []string{} +} + +func (e *EmptySegment) Close() error { + return nil +} + +func (e *EmptySegment) Size() uint64 { + return 0 +} + +func (e *EmptySegment) AddRef() { +} + +func (e *EmptySegment) DecRef() error { + return nil +} + +type EmptyDictionary struct{} + +func (e *EmptyDictionary) PostingsList(term string, + except *roaring.Bitmap) (PostingsList, error) { + return &EmptyPostingsList{}, nil +} + +func (e *EmptyDictionary) Iterator() DictionaryIterator { + return &EmptyDictionaryIterator{} +} + +func (e *EmptyDictionary) PrefixIterator(prefix string) DictionaryIterator { + return &EmptyDictionaryIterator{} +} + +func (e *EmptyDictionary) RangeIterator(start, end string) DictionaryIterator { + return &EmptyDictionaryIterator{} +} + +type EmptyDictionaryIterator struct{} + +func (e *EmptyDictionaryIterator) Next() (*index.DictEntry, error) { + return nil, nil +} + +type EmptyPostingsList struct{} + +func (e *EmptyPostingsList) Iterator() PostingsIterator { + return &EmptyPostingsIterator{} +} + +func (e *EmptyPostingsList) Size() int { + return 0 +} + +func (e *EmptyPostingsList) Count() uint64 { + return 0 +} + +type EmptyPostingsIterator struct{} + +func (e *EmptyPostingsIterator) Next() (Posting, error) { + return nil, nil +} + +func (e *EmptyPostingsIterator) Size() int { + return 0 +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/segment/int.go b/vendor/github.com/blevesearch/bleve/index/scorch/segment/int.go new file mode 100644 index 0000000..a4836eb --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/segment/int.go @@ -0,0 +1,94 @@ +// Copyright 2014 The Cockroach Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. + +// This code originated from: +// https://github.com/cockroachdb/cockroach/blob/2dd65dde5d90c157f4b93f92502ca1063b904e1d/pkg/util/encoding/encoding.go + +// Modified to not use pkg/errors + +package segment + +import "fmt" + +const ( + MaxVarintSize = 9 + + // IntMin is chosen such that the range of int tags does not overlap the + // ascii character set that is frequently used in testing. + IntMin = 0x80 // 128 + intMaxWidth = 8 + intZero = IntMin + intMaxWidth // 136 + intSmall = IntMax - intZero - intMaxWidth // 109 + // IntMax is the maximum int tag value. + IntMax = 0xfd // 253 +) + +// EncodeUvarintAscending encodes the uint64 value using a variable length +// (length-prefixed) representation. The length is encoded as a single +// byte indicating the number of encoded bytes (-8) to follow. See +// EncodeVarintAscending for rationale. The encoded bytes are appended to the +// supplied buffer and the final buffer is returned. +func EncodeUvarintAscending(b []byte, v uint64) []byte { + switch { + case v <= intSmall: + return append(b, intZero+byte(v)) + case v <= 0xff: + return append(b, IntMax-7, byte(v)) + case v <= 0xffff: + return append(b, IntMax-6, byte(v>>8), byte(v)) + case v <= 0xffffff: + return append(b, IntMax-5, byte(v>>16), byte(v>>8), byte(v)) + case v <= 0xffffffff: + return append(b, IntMax-4, byte(v>>24), byte(v>>16), byte(v>>8), byte(v)) + case v <= 0xffffffffff: + return append(b, IntMax-3, byte(v>>32), byte(v>>24), byte(v>>16), byte(v>>8), + byte(v)) + case v <= 0xffffffffffff: + return append(b, IntMax-2, byte(v>>40), byte(v>>32), byte(v>>24), byte(v>>16), + byte(v>>8), byte(v)) + case v <= 0xffffffffffffff: + return append(b, IntMax-1, byte(v>>48), byte(v>>40), byte(v>>32), byte(v>>24), + byte(v>>16), byte(v>>8), byte(v)) + default: + return append(b, IntMax, byte(v>>56), byte(v>>48), byte(v>>40), byte(v>>32), + byte(v>>24), byte(v>>16), byte(v>>8), byte(v)) + } +} + +// DecodeUvarintAscending decodes a varint encoded uint64 from the input +// buffer. The remainder of the input buffer and the decoded uint64 +// are returned. +func DecodeUvarintAscending(b []byte) ([]byte, uint64, error) { + if len(b) == 0 { + return nil, 0, fmt.Errorf("insufficient bytes to decode uvarint value") + } + length := int(b[0]) - intZero + b = b[1:] // skip length byte + if length <= intSmall { + return b, uint64(length), nil + } + length -= intSmall + if length < 0 || length > 8 { + return nil, 0, fmt.Errorf("invalid uvarint length of %d", length) + } else if len(b) < length { + return nil, 0, fmt.Errorf("insufficient bytes to decode uvarint value: %q", b) + } + var v uint64 + // It is faster to range over the elements in a slice than to index + // into the slice on each loop iteration. + for _, t := range b[:length] { + v = (v << 8) | uint64(t) + } + return b[length:], v, nil +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/segment/int_test.go b/vendor/github.com/blevesearch/bleve/index/scorch/segment/int_test.go new file mode 100644 index 0000000..3d2ab6f --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/segment/int_test.go @@ -0,0 +1,96 @@ +// Copyright 2014 The Cockroach Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. + +// This code originated from: +// https://github.com/cockroachdb/cockroach/blob/2dd65dde5d90c157f4b93f92502ca1063b904e1d/pkg/util/encoding/encoding_test.go + +// Modified to only test the parts we borrowed + +package segment + +import ( + "bytes" + "math" + "testing" +) + +type testCaseUint64 struct { + value uint64 + expEnc []byte +} + +func TestEncodeDecodeUvarint(t *testing.T) { + testBasicEncodeDecodeUint64(EncodeUvarintAscending, DecodeUvarintAscending, false, t) + testCases := []testCaseUint64{ + {0, []byte{0x88}}, + {1, []byte{0x89}}, + {109, []byte{0xf5}}, + {110, []byte{0xf6, 0x6e}}, + {1 << 8, []byte{0xf7, 0x01, 0x00}}, + {math.MaxUint64, []byte{0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}}, + } + testCustomEncodeUint64(testCases, EncodeUvarintAscending, t) +} + +func testBasicEncodeDecodeUint64( + encFunc func([]byte, uint64) []byte, + decFunc func([]byte) ([]byte, uint64, error), + descending bool, t *testing.T, +) { + testCases := []uint64{ + 0, 1, + 1<<8 - 1, 1 << 8, + 1<<16 - 1, 1 << 16, + 1<<24 - 1, 1 << 24, + 1<<32 - 1, 1 << 32, + 1<<40 - 1, 1 << 40, + 1<<48 - 1, 1 << 48, + 1<<56 - 1, 1 << 56, + math.MaxUint64 - 1, math.MaxUint64, + } + + var lastEnc []byte + for i, v := range testCases { + enc := encFunc(nil, v) + if i > 0 { + if (descending && bytes.Compare(enc, lastEnc) >= 0) || + (!descending && bytes.Compare(enc, lastEnc) < 0) { + t.Errorf("ordered constraint violated for %d: [% x] vs. [% x]", v, enc, lastEnc) + } + } + b, decode, err := decFunc(enc) + if err != nil { + t.Error(err) + continue + } + if len(b) != 0 { + t.Errorf("leftover bytes: [% x]", b) + } + if decode != v { + t.Errorf("decode yielded different value than input: %d vs. %d", decode, v) + } + lastEnc = enc + } +} + +func testCustomEncodeUint64( + testCases []testCaseUint64, encFunc func([]byte, uint64) []byte, t *testing.T, +) { + for _, test := range testCases { + enc := encFunc(nil, test.value) + if !bytes.Equal(enc, test.expEnc) { + t.Errorf("expected [% x]; got [% x] (value: %d)", test.expEnc, enc, test.value) + } + } +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/segment/mem/build.go b/vendor/github.com/blevesearch/bleve/index/scorch/segment/mem/build.go new file mode 100644 index 0000000..0b32970 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/segment/mem/build.go @@ -0,0 +1,347 @@ +// Copyright (c) 2017 Couchbase, 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 mem + +import ( + "math" + "sort" + + "github.com/RoaringBitmap/roaring" + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/document" + "github.com/blevesearch/bleve/index" +) + +// NewFromAnalyzedDocs places the analyzed document mutations into a new segment +func NewFromAnalyzedDocs(results []*index.AnalysisResult) *Segment { + s := New() + + // ensure that _id field get fieldID 0 + s.getOrDefineField("_id") + + // fill Dicts/DictKeys and preallocate memory + s.initializeDict(results) + + // walk each doc + fieldLensReuse := make([]int, len(s.FieldsMap)) + docMapReuse := make([]analysis.TokenFrequencies, len(s.FieldsMap)) + for _, result := range results { + s.processDocument(result, fieldLensReuse, docMapReuse) + } + + // go back and sort the dictKeys + for _, dict := range s.DictKeys { + sort.Strings(dict) + } + + // compute memory usage of segment + s.updateSize() + + // professional debugging + // + // log.Printf("fields: %v\n", s.FieldsMap) + // log.Printf("fieldsInv: %v\n", s.FieldsInv) + // log.Printf("fieldsLoc: %v\n", s.FieldsLoc) + // log.Printf("dicts: %v\n", s.Dicts) + // log.Printf("dict keys: %v\n", s.DictKeys) + // for i, posting := range s.Postings { + // log.Printf("posting %d: %v\n", i, posting) + // } + // for i, freq := range s.Freqs { + // log.Printf("freq %d: %v\n", i, freq) + // } + // for i, norm := range s.Norms { + // log.Printf("norm %d: %v\n", i, norm) + // } + // for i, field := range s.Locfields { + // log.Printf("field %d: %v\n", i, field) + // } + // for i, start := range s.Locstarts { + // log.Printf("start %d: %v\n", i, start) + // } + // for i, end := range s.Locends { + // log.Printf("end %d: %v\n", i, end) + // } + // for i, pos := range s.Locpos { + // log.Printf("pos %d: %v\n", i, pos) + // } + // for i, apos := range s.Locarraypos { + // log.Printf("apos %d: %v\n", i, apos) + // } + // log.Printf("stored: %v\n", s.Stored) + // log.Printf("stored types: %v\n", s.StoredTypes) + // log.Printf("stored pos: %v\n", s.StoredPos) + + return s +} + +// fill Dicts/DictKeys and preallocate memory for postings +func (s *Segment) initializeDict(results []*index.AnalysisResult) { + var numPostingsLists int + + numTermsPerPostingsList := make([]int, 0, 64) // Keyed by postings list id. + numLocsPerPostingsList := make([]int, 0, 64) // Keyed by postings list id. + + var numTokenFrequencies int + var totLocs int + + // initial scan for all fieldID's to sort them + for _, result := range results { + for _, field := range result.Document.CompositeFields { + s.getOrDefineField(field.Name()) + } + for _, field := range result.Document.Fields { + s.getOrDefineField(field.Name()) + } + } + sort.Strings(s.FieldsInv[1:]) // keep _id as first field + s.FieldsMap = make(map[string]uint16, len(s.FieldsInv)) + for fieldID, fieldName := range s.FieldsInv { + s.FieldsMap[fieldName] = uint16(fieldID + 1) + } + + processField := func(fieldID uint16, tfs analysis.TokenFrequencies) { + dict := s.Dicts[fieldID] + dictKeys := s.DictKeys[fieldID] + for term, tf := range tfs { + pidPlus1, exists := dict[term] + if !exists { + numPostingsLists++ + pidPlus1 = uint64(numPostingsLists) + dict[term] = pidPlus1 + dictKeys = append(dictKeys, term) + numTermsPerPostingsList = append(numTermsPerPostingsList, 0) + numLocsPerPostingsList = append(numLocsPerPostingsList, 0) + } + pid := pidPlus1 - 1 + numTermsPerPostingsList[pid] += 1 + numLocsPerPostingsList[pid] += len(tf.Locations) + totLocs += len(tf.Locations) + } + numTokenFrequencies += len(tfs) + s.DictKeys[fieldID] = dictKeys + } + + for _, result := range results { + // walk each composite field + for _, field := range result.Document.CompositeFields { + fieldID := uint16(s.getOrDefineField(field.Name())) + _, tf := field.Analyze() + processField(fieldID, tf) + } + + // walk each field + for i, field := range result.Document.Fields { + fieldID := uint16(s.getOrDefineField(field.Name())) + tf := result.Analyzed[i] + processField(fieldID, tf) + } + } + + s.Postings = make([]*roaring.Bitmap, numPostingsLists) + for i := 0; i < numPostingsLists; i++ { + s.Postings[i] = roaring.New() + } + s.PostingsLocs = make([]*roaring.Bitmap, numPostingsLists) + for i := 0; i < numPostingsLists; i++ { + s.PostingsLocs[i] = roaring.New() + } + + // Preallocate big, contiguous backing arrays. + auint64Backing := make([][]uint64, numPostingsLists*4+totLocs) // For Freqs, Locstarts, Locends, Locpos, sub-Locarraypos. + uint64Backing := make([]uint64, numTokenFrequencies+totLocs*3) // For sub-Freqs, sub-Locstarts, sub-Locends, sub-Locpos. + float32Backing := make([]float32, numTokenFrequencies) // For sub-Norms. + uint16Backing := make([]uint16, totLocs) // For sub-Locfields. + + // Point top-level slices to the backing arrays. + s.Freqs = auint64Backing[0:numPostingsLists] + auint64Backing = auint64Backing[numPostingsLists:] + + s.Norms = make([][]float32, numPostingsLists) + + s.Locfields = make([][]uint16, numPostingsLists) + + s.Locstarts = auint64Backing[0:numPostingsLists] + auint64Backing = auint64Backing[numPostingsLists:] + + s.Locends = auint64Backing[0:numPostingsLists] + auint64Backing = auint64Backing[numPostingsLists:] + + s.Locpos = auint64Backing[0:numPostingsLists] + auint64Backing = auint64Backing[numPostingsLists:] + + s.Locarraypos = make([][][]uint64, numPostingsLists) + + // Point sub-slices to the backing arrays. + for pid, numTerms := range numTermsPerPostingsList { + s.Freqs[pid] = uint64Backing[0:0] + uint64Backing = uint64Backing[numTerms:] + + s.Norms[pid] = float32Backing[0:0] + float32Backing = float32Backing[numTerms:] + } + + for pid, numLocs := range numLocsPerPostingsList { + s.Locfields[pid] = uint16Backing[0:0] + uint16Backing = uint16Backing[numLocs:] + + s.Locstarts[pid] = uint64Backing[0:0] + uint64Backing = uint64Backing[numLocs:] + + s.Locends[pid] = uint64Backing[0:0] + uint64Backing = uint64Backing[numLocs:] + + s.Locpos[pid] = uint64Backing[0:0] + uint64Backing = uint64Backing[numLocs:] + + s.Locarraypos[pid] = auint64Backing[0:0] + auint64Backing = auint64Backing[numLocs:] + } +} + +func (s *Segment) processDocument(result *index.AnalysisResult, + fieldLens []int, docMap []analysis.TokenFrequencies) { + // clear the fieldLens and docMap for reuse + n := len(s.FieldsMap) + for i := 0; i < n; i++ { + fieldLens[i] = 0 + docMap[i] = nil + } + + docNum := uint64(s.addDocument()) + + processField := func(fieldID uint16, name string, l int, tf analysis.TokenFrequencies) { + fieldLens[fieldID] += l + + existingFreqs := docMap[fieldID] + if existingFreqs != nil { + existingFreqs.MergeAll(name, tf) + } else { + docMap[fieldID] = tf + } + } + + // walk each composite field + for _, field := range result.Document.CompositeFields { + fieldID := uint16(s.getOrDefineField(field.Name())) + l, tf := field.Analyze() + processField(fieldID, field.Name(), l, tf) + } + + docStored := s.Stored[docNum] + docStoredTypes := s.StoredTypes[docNum] + docStoredPos := s.StoredPos[docNum] + + // walk each field + for i, field := range result.Document.Fields { + fieldID := uint16(s.getOrDefineField(field.Name())) + l := result.Length[i] + tf := result.Analyzed[i] + processField(fieldID, field.Name(), l, tf) + if field.Options().IsStored() { + docStored[fieldID] = append(docStored[fieldID], field.Value()) + docStoredTypes[fieldID] = append(docStoredTypes[fieldID], encodeFieldType(field)) + docStoredPos[fieldID] = append(docStoredPos[fieldID], field.ArrayPositions()) + } + + if field.Options().IncludeDocValues() { + s.DocValueFields[fieldID] = true + } + } + + // now that its been rolled up into docMap, walk that + for fieldID, tokenFrequencies := range docMap { + dict := s.Dicts[fieldID] + norm := float32(1.0 / math.Sqrt(float64(fieldLens[fieldID]))) + for term, tokenFreq := range tokenFrequencies { + pid := dict[term] - 1 + bs := s.Postings[pid] + bs.AddInt(int(docNum)) + s.Freqs[pid] = append(s.Freqs[pid], uint64(tokenFreq.Frequency())) + s.Norms[pid] = append(s.Norms[pid], norm) + locationBS := s.PostingsLocs[pid] + if len(tokenFreq.Locations) > 0 { + locationBS.AddInt(int(docNum)) + + locfields := s.Locfields[pid] + locstarts := s.Locstarts[pid] + locends := s.Locends[pid] + locpos := s.Locpos[pid] + locarraypos := s.Locarraypos[pid] + + for _, loc := range tokenFreq.Locations { + var locf = uint16(fieldID) + if loc.Field != "" { + locf = uint16(s.getOrDefineField(loc.Field)) + } + locfields = append(locfields, locf) + locstarts = append(locstarts, uint64(loc.Start)) + locends = append(locends, uint64(loc.End)) + locpos = append(locpos, uint64(loc.Position)) + if len(loc.ArrayPositions) > 0 { + locarraypos = append(locarraypos, loc.ArrayPositions) + } else { + locarraypos = append(locarraypos, nil) + } + } + + s.Locfields[pid] = locfields + s.Locstarts[pid] = locstarts + s.Locends[pid] = locends + s.Locpos[pid] = locpos + s.Locarraypos[pid] = locarraypos + } + } + } +} + +func (s *Segment) getOrDefineField(name string) int { + fieldIDPlus1, ok := s.FieldsMap[name] + if !ok { + fieldIDPlus1 = uint16(len(s.FieldsInv) + 1) + s.FieldsMap[name] = fieldIDPlus1 + s.FieldsInv = append(s.FieldsInv, name) + s.Dicts = append(s.Dicts, make(map[string]uint64)) + s.DictKeys = append(s.DictKeys, make([]string, 0)) + } + return int(fieldIDPlus1 - 1) +} + +func (s *Segment) addDocument() int { + docNum := len(s.Stored) + s.Stored = append(s.Stored, map[uint16][][]byte{}) + s.StoredTypes = append(s.StoredTypes, map[uint16][]byte{}) + s.StoredPos = append(s.StoredPos, map[uint16][][]uint64{}) + return docNum +} + +func encodeFieldType(f document.Field) byte { + fieldType := byte('x') + switch f.(type) { + case *document.TextField: + fieldType = 't' + case *document.NumericField: + fieldType = 'n' + case *document.DateTimeField: + fieldType = 'd' + case *document.BooleanField: + fieldType = 'b' + case *document.GeoPointField: + fieldType = 'g' + case *document.CompositeField: + fieldType = 'c' + } + return fieldType +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/segment/mem/dict.go b/vendor/github.com/blevesearch/bleve/index/scorch/segment/mem/dict.go new file mode 100644 index 0000000..9f5a873 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/segment/mem/dict.go @@ -0,0 +1,131 @@ +// Copyright (c) 2017 Couchbase, 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 mem + +import ( + "reflect" + "sort" + "strings" + + "github.com/RoaringBitmap/roaring" + "github.com/blevesearch/bleve/index" + "github.com/blevesearch/bleve/index/scorch/segment" + "github.com/blevesearch/bleve/size" +) + +var reflectStaticSizeDictionary int + +func init() { + var d Dictionary + reflectStaticSizeDictionary = int(reflect.TypeOf(d).Size()) +} + +// Dictionary is the in-memory representation of the term dictionary +type Dictionary struct { + segment *Segment + field string + fieldID uint16 +} + +func (d *Dictionary) Size() int { + sizeInBytes := reflectStaticSizeDictionary + size.SizeOfPtr + + len(d.field) + + if d.segment != nil { + sizeInBytes += int(d.segment.Size()) + } + + return sizeInBytes +} + +// PostingsList returns the postings list for the specified term +func (d *Dictionary) PostingsList(term string, + except *roaring.Bitmap) (segment.PostingsList, error) { + return d.InitPostingsList(term, except, nil) +} + +func (d *Dictionary) InitPostingsList(term string, except *roaring.Bitmap, + prealloc *PostingsList) (*PostingsList, error) { + rv := prealloc + if rv == nil { + rv = &PostingsList{} + } + rv.dictionary = d + rv.term = term + rv.postingsID = d.segment.Dicts[d.fieldID][term] + rv.except = except + return rv, nil +} + +// Iterator returns an iterator for this dictionary +func (d *Dictionary) Iterator() segment.DictionaryIterator { + return &DictionaryIterator{ + d: d, + } +} + +// PrefixIterator returns an iterator which only visits terms having the +// the specified prefix +func (d *Dictionary) PrefixIterator(prefix string) segment.DictionaryIterator { + offset := sort.SearchStrings(d.segment.DictKeys[d.fieldID], prefix) + return &DictionaryIterator{ + d: d, + prefix: prefix, + offset: offset, + } +} + +// RangeIterator returns an iterator which only visits terms between the +// start and end terms. NOTE: bleve.index API specifies the end is inclusive. +func (d *Dictionary) RangeIterator(start, end string) segment.DictionaryIterator { + offset := sort.SearchStrings(d.segment.DictKeys[d.fieldID], start) + return &DictionaryIterator{ + d: d, + offset: offset, + end: end, + } +} + +// DictionaryIterator is an iterator for term dictionary +type DictionaryIterator struct { + d *Dictionary + prefix string + end string + offset int + + dictEntry index.DictEntry // reused across Next()'s +} + +// Next returns the next entry in the dictionary +func (d *DictionaryIterator) Next() (*index.DictEntry, error) { + if d.offset > len(d.d.segment.DictKeys[d.d.fieldID])-1 { + return nil, nil + } + next := d.d.segment.DictKeys[d.d.fieldID][d.offset] + // check prefix + if d.prefix != "" && !strings.HasPrefix(next, d.prefix) { + return nil, nil + } + // check end (bleve.index API demands inclusive end) + if d.end != "" && next > d.end { + return nil, nil + } + + d.offset++ + postingID := d.d.segment.Dicts[d.d.fieldID][next] + d.dictEntry.Term = next + d.dictEntry.Count = d.d.segment.Postings[postingID-1].GetCardinality() + return &d.dictEntry, nil +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/segment/mem/dict_test.go b/vendor/github.com/blevesearch/bleve/index/scorch/segment/mem/dict_test.go new file mode 100644 index 0000000..adfa495 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/segment/mem/dict_test.go @@ -0,0 +1,160 @@ +// Copyright (c) 2017 Couchbase, 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 mem + +import ( + "reflect" + "testing" + + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/document" + "github.com/blevesearch/bleve/index" +) + +func TestDictionary(t *testing.T) { + doc := &document.Document{ + ID: "a", + Fields: []document.Field{ + document.NewTextFieldCustom("_id", nil, []byte("a"), document.IndexField|document.StoreField, nil), + document.NewTextFieldCustom("desc", nil, []byte("apple ball cat dog egg fish bat"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + }, + } + + // forge analyzed docs + results := []*index.AnalysisResult{ + &index.AnalysisResult{ + Document: doc, + Analyzed: []analysis.TokenFrequencies{ + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 1, + Position: 1, + Term: []byte("a"), + }, + }, nil, false), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 5, + Position: 1, + Term: []byte("apple"), + }, + &analysis.Token{ + Start: 6, + End: 10, + Position: 2, + Term: []byte("ball"), + }, + &analysis.Token{ + Start: 11, + End: 14, + Position: 3, + Term: []byte("cat"), + }, + &analysis.Token{ + Start: 15, + End: 18, + Position: 4, + Term: []byte("dog"), + }, + &analysis.Token{ + Start: 19, + End: 22, + Position: 5, + Term: []byte("egg"), + }, + &analysis.Token{ + Start: 20, + End: 24, + Position: 6, + Term: []byte("fish"), + }, + &analysis.Token{ + Start: 25, + End: 28, + Position: 7, + Term: []byte("bat"), + }, + }, nil, true), + }, + Length: []int{ + 1, + 7, + }, + }, + } + + segment := NewFromAnalyzedDocs(results) + if segment == nil { + t.Fatalf("segment nil, not expected") + } + + dict, err := segment.Dictionary("desc") + if err != nil { + t.Fatal(err) + } + + // test basic full iterator + expected := []string{"apple", "ball", "bat", "cat", "dog", "egg", "fish"} + var got []string + itr := dict.Iterator() + next, err := itr.Next() + for next != nil && err == nil { + got = append(got, next.Term) + next, err = itr.Next() + } + if err != nil { + t.Fatalf("dict itr error: %v", err) + } + + if !reflect.DeepEqual(expected, got) { + t.Errorf("expected: %v, got: %v", expected, got) + } + + // test prefix iterator + expected = []string{"ball", "bat"} + got = got[:0] + itr = dict.PrefixIterator("b") + next, err = itr.Next() + for next != nil && err == nil { + got = append(got, next.Term) + next, err = itr.Next() + } + if err != nil { + t.Fatalf("dict itr error: %v", err) + } + + if !reflect.DeepEqual(expected, got) { + t.Errorf("expected: %v, got: %v", expected, got) + } + + // test range iterator + expected = []string{"cat", "dog", "egg"} + got = got[:0] + itr = dict.RangeIterator("cat", "egg") + next, err = itr.Next() + for next != nil && err == nil { + got = append(got, next.Term) + next, err = itr.Next() + } + if err != nil { + t.Fatalf("dict itr error: %v", err) + } + + if !reflect.DeepEqual(expected, got) { + t.Errorf("expected: %v, got: %v", expected, got) + } +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/segment/mem/posting.go b/vendor/github.com/blevesearch/bleve/index/scorch/segment/mem/posting.go new file mode 100644 index 0000000..4203acb --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/segment/mem/posting.go @@ -0,0 +1,247 @@ +// Copyright (c) 2017 Couchbase, 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 mem + +import ( + "reflect" + + "github.com/RoaringBitmap/roaring" + "github.com/blevesearch/bleve/index/scorch/segment" + "github.com/blevesearch/bleve/size" +) + +var reflectStaticSizePostingsList int +var reflectStaticSizePostingsIterator int +var reflectStaticSizePosting int +var reflectStaticSizeLocation int + +func init() { + var pl PostingsList + reflectStaticSizePostingsList = int(reflect.TypeOf(pl).Size()) + var pi PostingsIterator + reflectStaticSizePostingsIterator = int(reflect.TypeOf(pi).Size()) + var p Posting + reflectStaticSizePosting = int(reflect.TypeOf(p).Size()) + var l Location + reflectStaticSizeLocation = int(reflect.TypeOf(l).Size()) +} + +// PostingsList is an in-memory represenation of a postings list +type PostingsList struct { + dictionary *Dictionary + term string + postingsID uint64 + except *roaring.Bitmap +} + +func (p *PostingsList) Size() int { + sizeInBytes := reflectStaticSizePostingsList + size.SizeOfPtr + + if p.dictionary != nil { + sizeInBytes += p.dictionary.Size() + } + + if p.except != nil { + sizeInBytes += int(p.except.GetSizeInBytes()) + } + + return sizeInBytes +} + +// Count returns the number of items on this postings list +func (p *PostingsList) Count() uint64 { + var rv uint64 + if p.postingsID > 0 { + rv = p.dictionary.segment.Postings[p.postingsID-1].GetCardinality() + if p.except != nil { + except := p.except.GetCardinality() + if except > rv { + // avoid underflow + except = rv + } + rv -= except + } + } + return rv +} + +// Iterator returns an iterator for this postings list +func (p *PostingsList) Iterator() segment.PostingsIterator { + return p.InitIterator(nil) +} +func (p *PostingsList) InitIterator(prealloc *PostingsIterator) *PostingsIterator { + rv := prealloc + if rv == nil { + rv = &PostingsIterator{postings: p} + } else { + *rv = PostingsIterator{postings: p} + } + + if p.postingsID > 0 { + allbits := p.dictionary.segment.Postings[p.postingsID-1] + rv.locations = p.dictionary.segment.PostingsLocs[p.postingsID-1] + rv.all = allbits.Iterator() + if p.except != nil { + allExcept := allbits.Clone() + allExcept.AndNot(p.except) + rv.actual = allExcept.Iterator() + } else { + rv.actual = allbits.Iterator() + } + } + + return rv +} + +// PostingsIterator provides a way to iterate through the postings list +type PostingsIterator struct { + postings *PostingsList + all roaring.IntIterable + locations *roaring.Bitmap + offset int + locoffset int + actual roaring.IntIterable + reuse Posting +} + +func (i *PostingsIterator) Size() int { + sizeInBytes := reflectStaticSizePostingsIterator + size.SizeOfPtr + + if i.locations != nil { + sizeInBytes += int(i.locations.GetSizeInBytes()) + } + + return sizeInBytes +} + +// Next returns the next posting on the postings list, or nil at the end +func (i *PostingsIterator) Next() (segment.Posting, error) { + if i.actual == nil || !i.actual.HasNext() { + return nil, nil + } + n := i.actual.Next() + allN := i.all.Next() + + // n is the next actual hit (excluding some postings) + // allN is the next hit in the full postings + // if they don't match, adjust offsets to factor in item we're skipping over + // incr the all iterator, and check again + for allN != n { + i.locoffset += int(i.postings.dictionary.segment.Freqs[i.postings.postingsID-1][i.offset]) + i.offset++ + allN = i.all.Next() + } + i.reuse = Posting{ + iterator: i, + docNum: uint64(n), + offset: i.offset, + locoffset: i.locoffset, + hasLoc: i.locations.Contains(n), + } + i.locoffset += int(i.postings.dictionary.segment.Freqs[i.postings.postingsID-1][i.offset]) + i.offset++ + return &i.reuse, nil +} + +// Posting is a single entry in a postings list +type Posting struct { + iterator *PostingsIterator + docNum uint64 + offset int + locoffset int + hasLoc bool +} + +func (p *Posting) Size() int { + sizeInBytes := reflectStaticSizePosting + size.SizeOfPtr + + if p.iterator != nil { + sizeInBytes += p.iterator.Size() + } + + return sizeInBytes +} + +// Number returns the document number of this posting in this segment +func (p *Posting) Number() uint64 { + return p.docNum +} + +// Frequency returns the frequence of occurance of this term in this doc/field +func (p *Posting) Frequency() uint64 { + return p.iterator.postings.dictionary.segment.Freqs[p.iterator.postings.postingsID-1][p.offset] +} + +// Norm returns the normalization factor for this posting +func (p *Posting) Norm() float64 { + return float64(p.iterator.postings.dictionary.segment.Norms[p.iterator.postings.postingsID-1][p.offset]) +} + +// Locations returns the location information for each occurance +func (p *Posting) Locations() []segment.Location { + if !p.hasLoc { + return nil + } + freq := int(p.Frequency()) + rv := make([]segment.Location, freq) + for i := 0; i < freq; i++ { + rv[i] = &Location{ + p: p, + offset: p.locoffset + i, + } + } + return rv +} + +// Location represents the location of a single occurance +type Location struct { + p *Posting + offset int +} + +func (l *Location) Size() int { + sizeInBytes := reflectStaticSizeLocation + if l.p != nil { + sizeInBytes += l.p.Size() + } + + return sizeInBytes +} + +// Field returns the name of the field (useful in composite fields to know +// which original field the value came from) +func (l *Location) Field() string { + return l.p.iterator.postings.dictionary.segment.FieldsInv[l.p.iterator.postings.dictionary.segment.Locfields[l.p.iterator.postings.postingsID-1][l.offset]] +} + +// Start returns the start byte offset of this occurance +func (l *Location) Start() uint64 { + return l.p.iterator.postings.dictionary.segment.Locstarts[l.p.iterator.postings.postingsID-1][l.offset] +} + +// End returns the end byte offset of this occurance +func (l *Location) End() uint64 { + return l.p.iterator.postings.dictionary.segment.Locends[l.p.iterator.postings.postingsID-1][l.offset] +} + +// Pos returns the 1-based phrase position of this occurance +func (l *Location) Pos() uint64 { + return l.p.iterator.postings.dictionary.segment.Locpos[l.p.iterator.postings.postingsID-1][l.offset] +} + +// ArrayPositions returns the array position vector associated with this occurance +func (l *Location) ArrayPositions() []uint64 { + return l.p.iterator.postings.dictionary.segment.Locarraypos[l.p.iterator.postings.postingsID-1][l.offset] +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/segment/mem/segment.go b/vendor/github.com/blevesearch/bleve/index/scorch/segment/mem/segment.go new file mode 100644 index 0000000..e9c4a27 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/segment/mem/segment.go @@ -0,0 +1,286 @@ +// Copyright (c) 2017 Couchbase, 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 mem + +import ( + "fmt" + "reflect" + + "github.com/RoaringBitmap/roaring" + "github.com/blevesearch/bleve/index/scorch/segment" + "github.com/blevesearch/bleve/size" +) + +var reflectStaticSizeSegment int + +func init() { + var s Segment + reflectStaticSizeSegment = int(reflect.TypeOf(s).Size()) +} + +// _id field is always guaranteed to have fieldID of 0 +const idFieldID uint16 = 0 + +// KNOWN ISSUES +// - LIMITATION - we decided whether or not to store term vectors for a field +// at the segment level, based on the first definition of a +// field we see. in normal bleve usage this is fine, all +// instances of a field definition will be the same. however, +// advanced users may violate this and provide unique field +// definitions with each document. this segment does not +// support this usage. + +// TODO +// - need better testing of multiple docs, iterating freqs, locations and +// and verifying the correct results are returned + +// Segment is an in memory implementation of scorch.Segment +type Segment struct { + + // FieldsMap adds 1 to field id to avoid zero value issues + // name -> field id + 1 + FieldsMap map[string]uint16 + + // FieldsInv is the inverse of FieldsMap + // field id -> name + FieldsInv []string + + // Term dictionaries for each field + // field id -> term -> postings list id + 1 + Dicts []map[string]uint64 + + // Terms for each field, where terms are sorted ascending + // field id -> []term + DictKeys [][]string + + // Postings list + // postings list id -> bitmap by docNum + Postings []*roaring.Bitmap + + // Postings list has locations + PostingsLocs []*roaring.Bitmap + + // Term frequencies + // postings list id -> Freqs (one for each hit in bitmap) + Freqs [][]uint64 + + // Field norms + // postings list id -> Norms (one for each hit in bitmap) + Norms [][]float32 + + // Field/start/end/pos/locarraypos + // postings list id -> start/end/pos/locarraypos (one for each freq) + Locfields [][]uint16 + Locstarts [][]uint64 + Locends [][]uint64 + Locpos [][]uint64 + Locarraypos [][][]uint64 + + // Stored field values + // docNum -> field id -> slice of values (each value []byte) + Stored []map[uint16][][]byte + + // Stored field types + // docNum -> field id -> slice of types (each type byte) + StoredTypes []map[uint16][]byte + + // Stored field array positions + // docNum -> field id -> slice of array positions (each is []uint64) + StoredPos []map[uint16][][]uint64 + + // For storing the docValue persisted fields + DocValueFields map[uint16]bool + + // Footprint of the segment, updated when analyzed document mutations + // are added into the segment + sizeInBytes int +} + +// New builds a new empty Segment +func New() *Segment { + return &Segment{ + FieldsMap: map[string]uint16{}, + DocValueFields: map[uint16]bool{}, + } +} + +func (s *Segment) updateSize() { + sizeInBytes := reflectStaticSizeSegment + + // FieldsMap, FieldsInv + for k, _ := range s.FieldsMap { + sizeInBytes += (len(k)+size.SizeOfString)*2 + + size.SizeOfUint16 + } + + // Dicts, DictKeys + for _, entry := range s.Dicts { + for k, _ := range entry { + sizeInBytes += (len(k)+size.SizeOfString)*2 + + size.SizeOfUint64 + } + // overhead from the data structures + sizeInBytes += (size.SizeOfMap + size.SizeOfSlice) + } + + // Postings, PostingsLocs + for i := 0; i < len(s.Postings); i++ { + sizeInBytes += (int(s.Postings[i].GetSizeInBytes()) + size.SizeOfPtr) + + (int(s.PostingsLocs[i].GetSizeInBytes()) + size.SizeOfPtr) + } + + // Freqs, Norms + for i := 0; i < len(s.Freqs); i++ { + sizeInBytes += (len(s.Freqs[i])*size.SizeOfUint64 + + len(s.Norms[i])*size.SizeOfFloat32) + + (size.SizeOfSlice * 2) + } + + // Location data + for i := 0; i < len(s.Locfields); i++ { + sizeInBytes += len(s.Locfields[i])*size.SizeOfUint16 + + len(s.Locstarts[i])*size.SizeOfUint64 + + len(s.Locends[i])*size.SizeOfUint64 + + len(s.Locpos[i])*size.SizeOfUint64 + + for j := 0; j < len(s.Locarraypos[i]); j++ { + sizeInBytes += len(s.Locarraypos[i][j])*size.SizeOfUint64 + + size.SizeOfSlice + } + + sizeInBytes += (size.SizeOfSlice * 5) + } + + // Stored data + for i := 0; i < len(s.Stored); i++ { + for _, v := range s.Stored[i] { + sizeInBytes += size.SizeOfUint16 + for _, arr := range v { + sizeInBytes += len(arr) + size.SizeOfSlice + } + sizeInBytes += size.SizeOfSlice + } + + for _, v := range s.StoredTypes[i] { + sizeInBytes += size.SizeOfUint16 + len(v) + size.SizeOfSlice + } + + for _, v := range s.StoredPos[i] { + sizeInBytes += size.SizeOfUint16 + for _, arr := range v { + sizeInBytes += len(arr)*size.SizeOfUint64 + + size.SizeOfSlice + } + sizeInBytes += size.SizeOfSlice + } + + // overhead from map(s) within Stored, StoredTypes, StoredPos + sizeInBytes += (size.SizeOfMap * 3) + } + + // DocValueFields + sizeInBytes += len(s.DocValueFields) * (size.SizeOfUint16 + size.SizeOfBool) + + s.sizeInBytes = sizeInBytes +} + +func (s *Segment) Size() int { + return s.sizeInBytes +} + +func (s *Segment) AddRef() { +} + +func (s *Segment) DecRef() error { + return nil +} + +// Fields returns the field names used in this segment +func (s *Segment) Fields() []string { + return s.FieldsInv +} + +// VisitDocument invokes the DocFieldValueVistor for each stored field +// for the specified doc number +func (s *Segment) VisitDocument(num uint64, visitor segment.DocumentFieldValueVisitor) error { + // ensure document number exists + if int(num) > len(s.Stored)-1 { + return nil + } + docFields := s.Stored[int(num)] + st := s.StoredTypes[int(num)] + sp := s.StoredPos[int(num)] + for field, values := range docFields { + for i, value := range values { + keepGoing := visitor(s.FieldsInv[field], st[field][i], value, sp[field][i]) + if !keepGoing { + return nil + } + } + } + return nil +} + +func (s *Segment) getField(name string) (int, error) { + fieldID, ok := s.FieldsMap[name] + if !ok { + return 0, fmt.Errorf("no field named %s", name) + } + return int(fieldID - 1), nil +} + +// Dictionary returns the term dictionary for the specified field +func (s *Segment) Dictionary(field string) (segment.TermDictionary, error) { + fieldID, err := s.getField(field) + if err != nil { + // no such field, return empty dictionary + return &segment.EmptyDictionary{}, nil + } + return &Dictionary{ + segment: s, + field: field, + fieldID: uint16(fieldID), + }, nil +} + +// Count returns the number of documents in this segment +// (this has no notion of deleted docs) +func (s *Segment) Count() uint64 { + return uint64(len(s.Stored)) +} + +// DocNumbers returns a bitset corresponding to the doc numbers of all the +// provided _id strings +func (s *Segment) DocNumbers(ids []string) (*roaring.Bitmap, error) { + rv := roaring.New() + + // guard against empty segment + if len(s.FieldsMap) > 0 { + idDictionary := s.Dicts[idFieldID] + + for _, id := range ids { + postingID := idDictionary[id] + if postingID > 0 { + rv.Or(s.Postings[postingID-1]) + } + } + } + return rv, nil +} + +// Close releases all resources associated with this segment +func (s *Segment) Close() error { + return nil +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/segment/mem/segment_test.go b/vendor/github.com/blevesearch/bleve/index/scorch/segment/mem/segment_test.go new file mode 100644 index 0000000..6c5625d --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/segment/mem/segment_test.go @@ -0,0 +1,699 @@ +// Copyright (c) 2017 Couchbase, 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 mem + +import ( + "math" + "reflect" + "testing" + + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/document" + "github.com/blevesearch/bleve/index" +) + +func TestEmpty(t *testing.T) { + + emptySegment := New() + + if emptySegment.Count() != 0 { + t.Errorf("expected count 0, got %d", emptySegment.Count()) + } + + dict, err := emptySegment.Dictionary("name") + if err != nil { + t.Fatal(err) + } + if dict == nil { + t.Fatal("got nil dict, expected non-nil") + } + + postingsList, err := dict.PostingsList("marty", nil) + if err != nil { + t.Fatal(err) + } + if postingsList == nil { + t.Fatal("got nil postings list, expected non-nil") + } + + postingsItr := postingsList.Iterator() + if postingsItr == nil { + t.Fatal("got nil iterator, expected non-nil") + } + + count := 0 + nextPosting, err := postingsItr.Next() + for nextPosting != nil && err == nil { + count++ + nextPosting, err = postingsItr.Next() + } + if err != nil { + t.Fatal(err) + } + + if count != 0 { + t.Errorf("expected count to be 0, got %d", count) + } + + // now try and visit a document + err = emptySegment.VisitDocument(0, func(field string, typ byte, value []byte, pos []uint64) bool { + t.Errorf("document visitor called, not expected") + return true + }) + if err != nil { + t.Fatal(err) + } +} + +func TestSingle(t *testing.T) { + + doc := &document.Document{ + ID: "a", + Fields: []document.Field{ + document.NewTextFieldCustom("_id", nil, []byte("a"), document.IndexField|document.StoreField, nil), + document.NewTextFieldCustom("name", nil, []byte("wow"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + document.NewTextFieldCustom("desc", nil, []byte("some thing"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + document.NewTextFieldCustom("tag", []uint64{0}, []byte("cold"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + document.NewTextFieldCustom("tag", []uint64{1}, []byte("dark"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + }, + CompositeFields: []*document.CompositeField{ + document.NewCompositeField("_all", true, nil, nil), + }, + } + + // forge analyzed docs + results := []*index.AnalysisResult{ + &index.AnalysisResult{ + Document: doc, + Analyzed: []analysis.TokenFrequencies{ + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 1, + Position: 1, + Term: []byte("a"), + }, + }, nil, false), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 3, + Position: 1, + Term: []byte("wow"), + }, + }, nil, true), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 4, + Position: 1, + Term: []byte("some"), + }, + &analysis.Token{ + Start: 5, + End: 10, + Position: 2, + Term: []byte("thing"), + }, + }, nil, true), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 4, + Position: 1, + Term: []byte("cold"), + }, + }, []uint64{0}, true), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 4, + Position: 1, + Term: []byte("dark"), + }, + }, []uint64{1}, true), + }, + Length: []int{ + 1, + 1, + 2, + 1, + 1, + }, + }, + } + + // fix up composite fields + for _, ar := range results { + for i, f := range ar.Document.Fields { + for _, cf := range ar.Document.CompositeFields { + cf.Compose(f.Name(), ar.Length[i], ar.Analyzed[i]) + } + } + } + + segment := NewFromAnalyzedDocs(results) + if segment == nil { + t.Fatalf("segment nil, not expected") + } + + if segment.Size() <= 0 { + t.Fatalf("segment size not updated") + } + + expectFields := map[string]struct{}{ + "_id": struct{}{}, + "_all": struct{}{}, + "name": struct{}{}, + "desc": struct{}{}, + "tag": struct{}{}, + } + fields := segment.Fields() + if len(fields) != len(expectFields) { + t.Errorf("expected %d fields, only got %d", len(expectFields), len(fields)) + } + for _, field := range fields { + if _, ok := expectFields[field]; !ok { + t.Errorf("got unexpected field: %s", field) + } + } + + if segment.Count() != 1 { + t.Errorf("expected count 1, got %d", segment.Count()) + } + + // check the _id field + dict, err := segment.Dictionary("_id") + if err != nil { + t.Fatal(err) + } + if dict == nil { + t.Fatal("got nil dict, expected non-nil") + } + + postingsList, err := dict.PostingsList("a", nil) + if err != nil { + t.Fatal(err) + } + if postingsList == nil { + t.Fatal("got nil postings list, expected non-nil") + } + + postingsItr := postingsList.Iterator() + if postingsItr == nil { + t.Fatal("got nil iterator, expected non-nil") + } + + count := 0 + nextPosting, err := postingsItr.Next() + for nextPosting != nil && err == nil { + count++ + if nextPosting.Frequency() != 1 { + t.Errorf("expected frequency 1, got %d", nextPosting.Frequency()) + } + if nextPosting.Number() != 0 { + t.Errorf("expected doc number 0, got %d", nextPosting.Number()) + } + if nextPosting.Norm() != 1.0 { + t.Errorf("expected norm 1.0, got %f", nextPosting.Norm()) + } + + nextPosting, err = postingsItr.Next() + } + if err != nil { + t.Fatal(err) + } + + if count != 1 { + t.Errorf("expected count to be 1, got %d", count) + } + + // check the name field + dict, err = segment.Dictionary("name") + if err != nil { + t.Fatal(err) + } + if dict == nil { + t.Fatal("got nil dict, expected non-nil") + } + + postingsList, err = dict.PostingsList("wow", nil) + if err != nil { + t.Fatal(err) + } + if postingsList == nil { + t.Fatal("got nil postings list, expected non-nil") + } + + postingsItr = postingsList.Iterator() + if postingsItr == nil { + t.Fatal("got nil iterator, expected non-nil") + } + + count = 0 + nextPosting, err = postingsItr.Next() + for nextPosting != nil && err == nil { + count++ + if nextPosting.Frequency() != 1 { + t.Errorf("expected frequency 1, got %d", nextPosting.Frequency()) + } + if nextPosting.Number() != 0 { + t.Errorf("expected doc number 0, got %d", nextPosting.Number()) + } + if nextPosting.Norm() != 1.0 { + t.Errorf("expected norm 1.0, got %f", nextPosting.Norm()) + } + var numLocs uint64 + for _, loc := range nextPosting.Locations() { + numLocs++ + if loc.Field() != "name" { + t.Errorf("expected loc field to be 'name', got '%s'", loc.Field()) + } + if loc.Start() != 0 { + t.Errorf("expected loc start to be 0, got %d", loc.Start()) + } + if loc.End() != 3 { + t.Errorf("expected loc end to be 3, got %d", loc.End()) + } + if loc.Pos() != 1 { + t.Errorf("expected loc pos to be 1, got %d", loc.Pos()) + } + if loc.ArrayPositions() != nil { + t.Errorf("expect loc array pos to be nil, got %v", loc.ArrayPositions()) + } + } + if numLocs != nextPosting.Frequency() { + t.Errorf("expected %d locations, got %d", nextPosting.Frequency(), numLocs) + } + + nextPosting, err = postingsItr.Next() + } + if err != nil { + t.Fatal(err) + } + + if count != 1 { + t.Errorf("expected count to be 1, got %d", count) + } + + // check the _all field (composite) + dict, err = segment.Dictionary("_all") + if err != nil { + t.Fatal(err) + } + if dict == nil { + t.Fatal("got nil dict, expected non-nil") + } + + postingsList, err = dict.PostingsList("wow", nil) + if err != nil { + t.Fatal(err) + } + if postingsList == nil { + t.Fatal("got nil postings list, expected non-nil") + } + + postingsItr = postingsList.Iterator() + if postingsItr == nil { + t.Fatal("got nil iterator, expected non-nil") + } + + count = 0 + nextPosting, err = postingsItr.Next() + for nextPosting != nil && err == nil { + count++ + if nextPosting.Frequency() != 1 { + t.Errorf("expected frequency 1, got %d", nextPosting.Frequency()) + } + if nextPosting.Number() != 0 { + t.Errorf("expected doc number 0, got %d", nextPosting.Number()) + } + expectedNorm := float32(1.0 / math.Sqrt(float64(6))) + if nextPosting.Norm() != float64(expectedNorm) { + t.Errorf("expected norm %f, got %f", expectedNorm, nextPosting.Norm()) + } + var numLocs uint64 + for _, loc := range nextPosting.Locations() { + numLocs++ + if loc.Field() != "name" { + t.Errorf("expected loc field to be 'name', got '%s'", loc.Field()) + } + if loc.Start() != 0 { + t.Errorf("expected loc start to be 0, got %d", loc.Start()) + } + if loc.End() != 3 { + t.Errorf("expected loc end to be 3, got %d", loc.End()) + } + if loc.Pos() != 1 { + t.Errorf("expected loc pos to be 1, got %d", loc.Pos()) + } + if loc.ArrayPositions() != nil { + t.Errorf("expect loc array pos to be nil, got %v", loc.ArrayPositions()) + } + } + if numLocs != nextPosting.Frequency() { + t.Errorf("expected %d locations, got %d", nextPosting.Frequency(), numLocs) + } + + nextPosting, err = postingsItr.Next() + } + if err != nil { + t.Fatal(err) + } + + if count != 1 { + t.Errorf("expected count to be 1, got %d", count) + } + + // now try a field with array positions + dict, err = segment.Dictionary("tag") + if err != nil { + t.Fatal(err) + } + if dict == nil { + t.Fatal("got nil dict, expected non-nil") + } + + postingsList, err = dict.PostingsList("dark", nil) + if err != nil { + t.Fatal(err) + } + if postingsList == nil { + t.Fatal("got nil postings list, expected non-nil") + } + + postingsItr = postingsList.Iterator() + if postingsItr == nil { + t.Fatal("got nil iterator, expected non-nil") + } + + nextPosting, err = postingsItr.Next() + for nextPosting != nil && err == nil { + + if nextPosting.Frequency() != 1 { + t.Errorf("expected frequency 1, got %d", nextPosting.Frequency()) + } + if nextPosting.Number() != 0 { + t.Errorf("expected doc number 0, got %d", nextPosting.Number()) + } + var numLocs uint64 + for _, loc := range nextPosting.Locations() { + numLocs++ + if loc.Field() != "tag" { + t.Errorf("expected loc field to be 'name', got '%s'", loc.Field()) + } + if loc.Start() != 0 { + t.Errorf("expected loc start to be 0, got %d", loc.Start()) + } + if loc.End() != 4 { + t.Errorf("expected loc end to be 3, got %d", loc.End()) + } + if loc.Pos() != 1 { + t.Errorf("expected loc pos to be 1, got %d", loc.Pos()) + } + expectArrayPos := []uint64{1} + if !reflect.DeepEqual(loc.ArrayPositions(), expectArrayPos) { + t.Errorf("expect loc array pos to be %v, got %v", expectArrayPos, loc.ArrayPositions()) + } + } + if numLocs != nextPosting.Frequency() { + t.Errorf("expected %d locations, got %d", nextPosting.Frequency(), numLocs) + } + + nextPosting, err = postingsItr.Next() + } + if err != nil { + t.Fatal(err) + } + + // now try and visit a document + var fieldValuesSeen int + err = segment.VisitDocument(0, func(field string, typ byte, value []byte, pos []uint64) bool { + fieldValuesSeen++ + return true + }) + if err != nil { + t.Fatal(err) + } + if fieldValuesSeen != 5 { + t.Errorf("expected 5 field values, got %d", fieldValuesSeen) + } + +} + +func TestMultiple(t *testing.T) { + + doc := &document.Document{ + ID: "a", + Fields: []document.Field{ + document.NewTextFieldCustom("_id", nil, []byte("a"), document.IndexField|document.StoreField, nil), + document.NewTextFieldCustom("name", nil, []byte("wow"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + document.NewTextFieldCustom("desc", nil, []byte("some thing"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + document.NewTextFieldCustom("tag", []uint64{0}, []byte("cold"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + document.NewTextFieldCustom("tag", []uint64{1}, []byte("dark"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + }, + CompositeFields: []*document.CompositeField{ + document.NewCompositeField("_all", true, nil, nil), + }, + } + + doc2 := &document.Document{ + ID: "b", + Fields: []document.Field{ + document.NewTextFieldCustom("_id", nil, []byte("b"), document.IndexField|document.StoreField, nil), + document.NewTextFieldCustom("name", nil, []byte("who"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + document.NewTextFieldCustom("desc", nil, []byte("some thing"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + document.NewTextFieldCustom("tag", []uint64{0}, []byte("cold"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + document.NewTextFieldCustom("tag", []uint64{1}, []byte("dark"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + }, + CompositeFields: []*document.CompositeField{ + document.NewCompositeField("_all", true, nil, nil), + }, + } + + // forge analyzed docs + results := []*index.AnalysisResult{ + &index.AnalysisResult{ + Document: doc, + Analyzed: []analysis.TokenFrequencies{ + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 1, + Position: 1, + Term: []byte("a"), + }, + }, nil, false), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 3, + Position: 1, + Term: []byte("wow"), + }, + }, nil, true), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 4, + Position: 1, + Term: []byte("some"), + }, + &analysis.Token{ + Start: 5, + End: 10, + Position: 2, + Term: []byte("thing"), + }, + }, nil, true), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 4, + Position: 1, + Term: []byte("cold"), + }, + }, []uint64{0}, true), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 4, + Position: 1, + Term: []byte("dark"), + }, + }, []uint64{1}, true), + }, + Length: []int{ + 1, + 1, + 2, + 1, + 1, + }, + }, + &index.AnalysisResult{ + Document: doc2, + Analyzed: []analysis.TokenFrequencies{ + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 1, + Position: 1, + Term: []byte("b"), + }, + }, nil, false), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 3, + Position: 1, + Term: []byte("who"), + }, + }, nil, true), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 4, + Position: 1, + Term: []byte("some"), + }, + &analysis.Token{ + Start: 5, + End: 10, + Position: 2, + Term: []byte("thing"), + }, + }, nil, true), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 4, + Position: 1, + Term: []byte("cold"), + }, + }, []uint64{0}, true), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 4, + Position: 1, + Term: []byte("dark"), + }, + }, []uint64{1}, true), + }, + Length: []int{ + 1, + 1, + 2, + 1, + 1, + }, + }, + } + + // fix up composite fields + for _, ar := range results { + for i, f := range ar.Document.Fields { + for _, cf := range ar.Document.CompositeFields { + cf.Compose(f.Name(), ar.Length[i], ar.Analyzed[i]) + } + } + } + + segment := NewFromAnalyzedDocs(results) + if segment == nil { + t.Fatalf("segment nil, not expected") + } + + if segment.Count() != 2 { + t.Errorf("expected count 2, got %d", segment.Count()) + } + + // check the desc field + dict, err := segment.Dictionary("desc") + if err != nil { + t.Fatal(err) + } + if dict == nil { + t.Fatal("got nil dict, expected non-nil") + } + + postingsList, err := dict.PostingsList("thing", nil) + if err != nil { + t.Fatal(err) + } + if postingsList == nil { + t.Fatal("got nil postings list, expected non-nil") + } + + postingsItr := postingsList.Iterator() + if postingsItr == nil { + t.Fatal("got nil iterator, expected non-nil") + } + + count := 0 + nextPosting, err := postingsItr.Next() + for nextPosting != nil && err == nil { + count++ + nextPosting, err = postingsItr.Next() + } + if err != nil { + t.Fatal(err) + } + + if count != 2 { + t.Errorf("expected count to be 2, got %d", count) + } + + // get docnum of a + exclude, err := segment.DocNumbers([]string{"a"}) + if err != nil { + t.Fatal(err) + } + + // look for term 'thing' excluding doc 'a' + postingsListExcluding, err := dict.PostingsList("thing", exclude) + if err != nil { + t.Fatal(err) + } + if postingsList == nil { + t.Fatal("got nil postings list, expected non-nil") + } + + postingsListExcludingCount := postingsListExcluding.Count() + if postingsListExcludingCount != 1 { + t.Errorf("expected count from postings list to be 1, got %d", postingsListExcludingCount) + } + + postingsItrExcluding := postingsListExcluding.Iterator() + if postingsItr == nil { + t.Fatal("got nil iterator, expected non-nil") + } + + count = 0 + nextPosting, err = postingsItrExcluding.Next() + for nextPosting != nil && err == nil { + count++ + nextPosting, err = postingsItrExcluding.Next() + } + if err != nil { + t.Fatal(err) + } + + if count != 1 { + t.Errorf("expected count to be 1, got %d", count) + } + +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/segment/segment.go b/vendor/github.com/blevesearch/bleve/index/scorch/segment/segment.go new file mode 100644 index 0000000..8eee5f7 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/segment/segment.go @@ -0,0 +1,111 @@ +// Copyright (c) 2017 Couchbase, 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 segment + +import ( + "github.com/RoaringBitmap/roaring" + "github.com/blevesearch/bleve/index" +) + +// DocumentFieldValueVisitor defines a callback to be visited for each +// stored field value. The return value determines if the visitor +// should keep going. Returning true continues visiting, false stops. +type DocumentFieldValueVisitor func(field string, typ byte, value []byte, pos []uint64) bool + +type Segment interface { + Dictionary(field string) (TermDictionary, error) + + VisitDocument(num uint64, visitor DocumentFieldValueVisitor) error + Count() uint64 + + DocNumbers([]string) (*roaring.Bitmap, error) + + Fields() []string + + Close() error + + Size() int + + AddRef() + DecRef() error +} + +type TermDictionary interface { + PostingsList(term string, except *roaring.Bitmap) (PostingsList, error) + + Iterator() DictionaryIterator + PrefixIterator(prefix string) DictionaryIterator + RangeIterator(start, end string) DictionaryIterator +} + +type DictionaryIterator interface { + Next() (*index.DictEntry, error) +} + +type PostingsList interface { + Iterator() PostingsIterator + + Size() int + + Count() uint64 + + // NOTE deferred for future work + + // And(other PostingsList) PostingsList + // Or(other PostingsList) PostingsList +} + +type PostingsIterator interface { + // The caller is responsible for copying whatever it needs from + // the returned Posting instance before calling Next(), as some + // implementations may return a shared instance to reduce memory + // allocations. + Next() (Posting, error) + + Size() int +} + +type Posting interface { + Number() uint64 + + Frequency() uint64 + Norm() float64 + + Locations() []Location + + Size() int +} + +type Location interface { + Field() string + Start() uint64 + End() uint64 + Pos() uint64 + ArrayPositions() []uint64 + Size() int +} + +// DocumentFieldTermVisitable is implemented by various scorch segment +// implementations with persistence for the un inverting of the +// postings or other indexed values. +type DocumentFieldTermVisitable interface { + VisitDocumentFieldTerms(localDocNum uint64, fields []string, + visitor index.DocumentFieldTermVisitor) error + + // VisitableDocValueFields implementation should return + // the list of fields which are document value persisted and + // therefore visitable by the above VisitDocumentFieldTerms method. + VisitableDocValueFields() ([]string, error) +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/README.md b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/README.md new file mode 100644 index 0000000..179adce --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/README.md @@ -0,0 +1,167 @@ +# zap file format + +The file is written in the reverse order that we typically access data. This helps us write in one pass since later sections of the file require file offsets of things we've already written. + +Current usage: + +- mmap the entire file +- crc-32 bytes and version are in fixed position at end of the file +- reading remainder of footer could be version specific +- remainder of footer gives us: + - 3 important offsets (docValue , fields index and stored data index) + - 2 important values (number of docs and chunk factor) +- field data is processed once and memoized onto the heap so that we never have to go back to disk for it +- access to stored data by doc number means first navigating to the stored data index, then accessing a fixed position offset into that slice, which gives us the actual address of the data. the first bytes of that section tell us the size of data so that we know where it ends. +- access to all other indexed data follows the following pattern: + - first know the field name -> convert to id + - next navigate to term dictionary for that field + - some operations stop here and do dictionary ops + - next use dictionary to navigate to posting list for a specific term + - walk posting list + - if necessary, walk posting details as we go + - if location info is desired, consult location bitmap to see if it is there + +## stored fields section + +- for each document + - preparation phase: + - produce a slice of metadata bytes and data bytes + - produce these slices in field id order + - field value is appended to the data slice + - metadata slice is govarint encoded with the following values for each field value + - field id (uint16) + - field type (byte) + - field value start offset in uncompressed data slice (uint64) + - field value length (uint64) + - field number of array positions (uint64) + - one additional value for each array position (uint64) + - compress the data slice using snappy + - file writing phase: + - remember the start offset for this document + - write out meta data length (varint uint64) + - write out compressed data length (varint uint64) + - write out the metadata bytes + - write out the compressed data bytes + +## stored fields idx + +- for each document + - write start offset (remembered from previous section) of stored data (big endian uint64) + +With this index and a known document number, we have direct access to all the stored field data. + +## posting details (freq/norm) section + +- for each posting list + - produce a slice containing multiple consecutive chunks (each chunk is govarint stream) + - produce a slice remembering offsets of where each chunk starts + - preparation phase: + - for each hit in the posting list + - if this hit is in next chunk close out encoding of last chunk and record offset start of next + - encode term frequency (uint64) + - encode norm factor (float32) + - file writing phase: + - remember start position for this posting list details + - write out number of chunks that follow (varint uint64) + - write out length of each chunk (each a varint uint64) + - write out the byte slice containing all the chunk data + +If you know the doc number you're interested in, this format lets you jump to the correct chunk (docNum/chunkFactor) directly and then seek within that chunk until you find it. + +## posting details (location) section + +- for each posting list + - produce a slice containing multiple consecutive chunks (each chunk is govarint stream) + - produce a slice remembering offsets of where each chunk starts + - preparation phase: + - for each hit in the posting list + - if this hit is in next chunk close out encoding of last chunk and record offset start of next + - encode field (uint16) + - encode field pos (uint64) + - encode field start (uint64) + - encode field end (uint64) + - encode number of array positions to follow (uint64) + - encode each array position (each uint64) + - file writing phase: + - remember start position for this posting list details + - write out number of chunks that follow (varint uint64) + - write out length of each chunk (each a varint uint64) + - write out the byte slice containing all the chunk data + +If you know the doc number you're interested in, this format lets you jump to the correct chunk (docNum/chunkFactor) directly and then seek within that chunk until you find it. + +## bitmaps of hits with location info + +- for each posting list + - preparation phase: + - encode roaring bitmap (inidicating which hits have location details indexed) posting list to bytes (so we know the length) + - file writing phase: + - remember the start position for this bitmap + - write length of encoded roaring bitmap + - write the serialized roaring bitmap data + +## postings list section + +- for each posting list + - preparation phase: + - encode roaring bitmap posting list to bytes (so we know the length) + - file writing phase: + - remember the start position for this posting list + - write freq/norm details offset (remembered from previous, as varint uint64) + - write location details offset (remembered from previous, as varint uint64) + - write location bitmap offset (remembered from pervious, as varint uint64) + - write length of encoded roaring bitmap + - write the serialized roaring bitmap data + +## dictionary + +- for each field + - preparation phase: + - encode vellum FST with dictionary data pointing to file offset of posting list (remembered from previous) + - file writing phase: + - remember the start position of this persistDictionary + - write length of vellum data (varint uint64) + - write out vellum data + +## fields section + +- for each field + - file writing phase: + - remember start offset for each field + - write dictionary address (remembered from previous) (varint uint64) + - write length of field name (varint uint64) + - write field name bytes + +## fields idx + +- for each field + - file writing phase: + - write big endian uint64 of start offset for each field + +NOTE: currently we don't know or record the length of this fields index. Instead we rely on the fact that we know it immediately precedes a footer of known size. + +## fields DocValue + +- for each field + - preparation phase: + - produce a slice containing multiple consecutive chunks, where each chunk is composed of a meta section followed by compressed columnar field data + - produce a slice remembering the length of each chunk + - file writing phase: + - remember the start position of this first field DocValue offset in the footer + - write out number of chunks that follow (varint uint64) + - write out length of each chunk (each a varint uint64) + - write out the byte slice containing all the chunk data + +NOTE: currently the meta header inside each chunk gives clue to the location offsets and size of the data pertaining to a given docID and any +read operation leverage that meta information to extract the document specific data from the file. + +## footer + +- file writing phase + - write number of docs (big endian uint64) + - write stored field index location (big endian uint64) + - write field index location (big endian uint64) + - write field docValue location (big endian uint64) + - write out chunk factor (big endian uint32) + - write out version (big endian uint32) + - write out file CRC of everything preceding this (big endian uint32) diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/build.go b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/build.go new file mode 100644 index 0000000..20b892c --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/build.go @@ -0,0 +1,149 @@ +// Copyright (c) 2017 Couchbase, 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 zap + +import ( + "bufio" + "math" + "os" + + "github.com/Smerity/govarint" +) + +const version uint32 = 6 + +const fieldNotUninverted = math.MaxUint64 + +// PersistSegmentBase persists SegmentBase in the zap file format. +func PersistSegmentBase(sb *SegmentBase, path string) error { + flag := os.O_RDWR | os.O_CREATE + + f, err := os.OpenFile(path, flag, 0600) + if err != nil { + return err + } + + cleanup := func() { + _ = f.Close() + _ = os.Remove(path) + } + + br := bufio.NewWriter(f) + + _, err = br.Write(sb.mem) + if err != nil { + cleanup() + return err + } + + err = persistFooter(sb.numDocs, sb.storedIndexOffset, sb.fieldsIndexOffset, sb.docValueOffset, + sb.chunkFactor, sb.memCRC, br) + if err != nil { + cleanup() + return err + } + + err = br.Flush() + if err != nil { + cleanup() + return err + } + + err = f.Sync() + if err != nil { + cleanup() + return err + } + + err = f.Close() + if err != nil { + cleanup() + return err + } + + return nil +} + +func persistStoredFieldValues(fieldID int, + storedFieldValues [][]byte, stf []byte, spf [][]uint64, + curr int, metaEncoder *govarint.Base128Encoder, data []byte) ( + int, []byte, error) { + for i := 0; i < len(storedFieldValues); i++ { + // encode field + _, err := metaEncoder.PutU64(uint64(fieldID)) + if err != nil { + return 0, nil, err + } + // encode type + _, err = metaEncoder.PutU64(uint64(stf[i])) + if err != nil { + return 0, nil, err + } + // encode start offset + _, err = metaEncoder.PutU64(uint64(curr)) + if err != nil { + return 0, nil, err + } + // end len + _, err = metaEncoder.PutU64(uint64(len(storedFieldValues[i]))) + if err != nil { + return 0, nil, err + } + // encode number of array pos + _, err = metaEncoder.PutU64(uint64(len(spf[i]))) + if err != nil { + return 0, nil, err + } + // encode all array positions + for _, pos := range spf[i] { + _, err = metaEncoder.PutU64(pos) + if err != nil { + return 0, nil, err + } + } + + data = append(data, storedFieldValues[i]...) + curr += len(storedFieldValues[i]) + } + + return curr, data, nil +} + +func InitSegmentBase(mem []byte, memCRC uint32, chunkFactor uint32, + fieldsMap map[string]uint16, fieldsInv []string, numDocs uint64, + storedIndexOffset uint64, fieldsIndexOffset uint64, docValueOffset uint64, + dictLocs []uint64) (*SegmentBase, error) { + sb := &SegmentBase{ + mem: mem, + memCRC: memCRC, + chunkFactor: chunkFactor, + fieldsMap: fieldsMap, + fieldsInv: fieldsInv, + numDocs: numDocs, + storedIndexOffset: storedIndexOffset, + fieldsIndexOffset: fieldsIndexOffset, + docValueOffset: docValueOffset, + dictLocs: dictLocs, + fieldDvIterMap: make(map[uint16]*docValueIterator), + } + sb.updateSize() + + err := sb.loadDvIterators() + if err != nil { + return nil, err + } + + return sb, nil +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/build_test.go b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/build_test.go new file mode 100644 index 0000000..65de793 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/build_test.go @@ -0,0 +1,388 @@ +// Copyright (c) 2017 Couchbase, 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 zap + +import ( + "os" + "testing" + + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/document" + "github.com/blevesearch/bleve/index" +) + +func TestBuild(t *testing.T) { + _ = os.RemoveAll("/tmp/scorch.zap") + + sb, err := buildTestSegment() + if err != nil { + t.Fatal(err) + } + err = PersistSegmentBase(sb, "/tmp/scorch.zap") + if err != nil { + t.Fatal(err) + } +} + +func buildTestSegment() (*SegmentBase, error) { + doc := &document.Document{ + ID: "a", + Fields: []document.Field{ + document.NewTextFieldCustom("_id", nil, []byte("a"), document.IndexField|document.StoreField, nil), + document.NewTextFieldCustom("name", nil, []byte("wow"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + document.NewTextFieldCustom("desc", nil, []byte("some thing"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + document.NewTextFieldCustom("tag", []uint64{0}, []byte("cold"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + document.NewTextFieldCustom("tag", []uint64{1}, []byte("dark"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + }, + CompositeFields: []*document.CompositeField{ + document.NewCompositeField("_all", true, nil, []string{"_id"}), + }, + } + + // forge analyzed docs + results := []*index.AnalysisResult{ + &index.AnalysisResult{ + Document: doc, + Analyzed: []analysis.TokenFrequencies{ + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 1, + Position: 1, + Term: []byte("a"), + }, + }, nil, false), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 3, + Position: 1, + Term: []byte("wow"), + }, + }, nil, true), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 4, + Position: 1, + Term: []byte("some"), + }, + &analysis.Token{ + Start: 5, + End: 10, + Position: 2, + Term: []byte("thing"), + }, + }, nil, true), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 4, + Position: 1, + Term: []byte("cold"), + }, + }, []uint64{0}, true), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 4, + Position: 1, + Term: []byte("dark"), + }, + }, []uint64{1}, true), + }, + Length: []int{ + 1, + 1, + 2, + 1, + 1, + }, + }, + } + + // fix up composite fields + for _, ar := range results { + for i, f := range ar.Document.Fields { + for _, cf := range ar.Document.CompositeFields { + cf.Compose(f.Name(), ar.Length[i], ar.Analyzed[i]) + } + } + } + + return AnalysisResultsToSegmentBase(results, 1024) +} + +func buildTestSegmentMulti() (*SegmentBase, error) { + results := buildTestAnalysisResultsMulti() + + return AnalysisResultsToSegmentBase(results, 1024) +} + +func buildTestSegmentMultiWithChunkFactor(chunkFactor uint32) (*SegmentBase, error) { + results := buildTestAnalysisResultsMulti() + + return AnalysisResultsToSegmentBase(results, chunkFactor) +} + +func buildTestAnalysisResultsMulti() []*index.AnalysisResult { + doc := &document.Document{ + ID: "a", + Fields: []document.Field{ + document.NewTextFieldCustom("_id", nil, []byte("a"), document.IndexField|document.StoreField, nil), + document.NewTextFieldCustom("name", nil, []byte("wow"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + document.NewTextFieldCustom("desc", nil, []byte("some thing"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + document.NewTextFieldCustom("tag", []uint64{0}, []byte("cold"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + document.NewTextFieldCustom("tag", []uint64{1}, []byte("dark"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + }, + CompositeFields: []*document.CompositeField{ + document.NewCompositeField("_all", true, nil, []string{"_id"}), + }, + } + + doc2 := &document.Document{ + ID: "b", + Fields: []document.Field{ + document.NewTextFieldCustom("_id", nil, []byte("b"), document.IndexField|document.StoreField, nil), + document.NewTextFieldCustom("name", nil, []byte("who"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + document.NewTextFieldCustom("desc", nil, []byte("some thing"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + document.NewTextFieldCustom("tag", []uint64{0}, []byte("cold"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + document.NewTextFieldCustom("tag", []uint64{1}, []byte("dark"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + }, + CompositeFields: []*document.CompositeField{ + document.NewCompositeField("_all", true, nil, []string{"_id"}), + }, + } + + // forge analyzed docs + results := []*index.AnalysisResult{ + &index.AnalysisResult{ + Document: doc, + Analyzed: []analysis.TokenFrequencies{ + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 1, + Position: 1, + Term: []byte("a"), + }, + }, nil, false), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 3, + Position: 1, + Term: []byte("wow"), + }, + }, nil, true), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 4, + Position: 1, + Term: []byte("some"), + }, + &analysis.Token{ + Start: 5, + End: 10, + Position: 2, + Term: []byte("thing"), + }, + }, nil, true), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 4, + Position: 1, + Term: []byte("cold"), + }, + }, []uint64{0}, true), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 4, + Position: 1, + Term: []byte("dark"), + }, + }, []uint64{1}, true), + }, + Length: []int{ + 1, + 1, + 2, + 1, + 1, + }, + }, + &index.AnalysisResult{ + Document: doc2, + Analyzed: []analysis.TokenFrequencies{ + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 1, + Position: 1, + Term: []byte("b"), + }, + }, nil, false), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 3, + Position: 1, + Term: []byte("who"), + }, + }, nil, true), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 4, + Position: 1, + Term: []byte("some"), + }, + &analysis.Token{ + Start: 5, + End: 10, + Position: 2, + Term: []byte("thing"), + }, + }, nil, true), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 4, + Position: 1, + Term: []byte("cold"), + }, + }, []uint64{0}, true), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 4, + Position: 1, + Term: []byte("dark"), + }, + }, []uint64{1}, true), + }, + Length: []int{ + 1, + 1, + 2, + 1, + 1, + }, + }, + } + + // fix up composite fields + for _, ar := range results { + for i, f := range ar.Document.Fields { + for _, cf := range ar.Document.CompositeFields { + cf.Compose(f.Name(), ar.Length[i], ar.Analyzed[i]) + } + } + } + + return results +} + +func buildTestSegmentWithDefaultFieldMapping(chunkFactor uint32) ( + *SegmentBase, []string, error) { + doc := &document.Document{ + ID: "a", + Fields: []document.Field{ + document.NewTextField("_id", nil, []byte("a")), + document.NewTextField("name", nil, []byte("wow")), + document.NewTextField("desc", nil, []byte("some thing")), + document.NewTextField("tag", []uint64{0}, []byte("cold")), + }, + CompositeFields: []*document.CompositeField{ + document.NewCompositeField("_all", true, nil, []string{"_id"}), + }, + } + + var fields []string + fields = append(fields, "_id") + fields = append(fields, "name") + fields = append(fields, "desc") + fields = append(fields, "tag") + + // forge analyzed docs + results := []*index.AnalysisResult{ + &index.AnalysisResult{ + Document: doc, + Analyzed: []analysis.TokenFrequencies{ + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 1, + Position: 1, + Term: []byte("a"), + }, + }, nil, false), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 3, + Position: 1, + Term: []byte("wow"), + }, + }, nil, true), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 4, + Position: 1, + Term: []byte("some"), + }, + &analysis.Token{ + Start: 5, + End: 10, + Position: 2, + Term: []byte("thing"), + }, + }, nil, true), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 4, + Position: 1, + Term: []byte("cold"), + }, + }, []uint64{0}, true), + }, + Length: []int{ + 1, + 1, + 2, + 1, + 1, + }, + }, + } + + // fix up composite fields + for _, ar := range results { + for i, f := range ar.Document.Fields { + for _, cf := range ar.Document.CompositeFields { + cf.Compose(f.Name(), ar.Length[i], ar.Analyzed[i]) + } + } + } + + sb, err := AnalysisResultsToSegmentBase(results, chunkFactor) + + return sb, fields, err +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/contentcoder.go b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/contentcoder.go new file mode 100644 index 0000000..1e7a785 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/contentcoder.go @@ -0,0 +1,185 @@ +// Copyright (c) 2017 Couchbase, 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 zap + +import ( + "bytes" + "encoding/binary" + "io" + "reflect" + + "github.com/golang/snappy" +) + +var reflectStaticSizeMetaData int + +func init() { + var md MetaData + reflectStaticSizeMetaData = int(reflect.TypeOf(md).Size()) +} + +var termSeparator byte = 0xff +var termSeparatorSplitSlice = []byte{termSeparator} + +type chunkedContentCoder struct { + final []byte + chunkSize uint64 + currChunk uint64 + chunkLens []uint64 + chunkMetaBuf bytes.Buffer + chunkBuf bytes.Buffer + + chunkMeta []MetaData +} + +// MetaData represents the data information inside a +// chunk. +type MetaData struct { + DocNum uint64 // docNum of the data inside the chunk + DocDvOffset uint64 // offset of data inside the chunk for the given docid +} + +// newChunkedContentCoder returns a new chunk content coder which +// packs data into chunks based on the provided chunkSize +func newChunkedContentCoder(chunkSize uint64, + maxDocNum uint64) *chunkedContentCoder { + total := maxDocNum/chunkSize + 1 + rv := &chunkedContentCoder{ + chunkSize: chunkSize, + chunkLens: make([]uint64, total), + chunkMeta: make([]MetaData, 0, total), + } + + return rv +} + +// Reset lets you reuse this chunked content coder. Buffers are reset +// and re used. You cannot change the chunk size. +func (c *chunkedContentCoder) Reset() { + c.currChunk = 0 + c.final = c.final[:0] + c.chunkBuf.Reset() + c.chunkMetaBuf.Reset() + for i := range c.chunkLens { + c.chunkLens[i] = 0 + } + c.chunkMeta = c.chunkMeta[:0] +} + +// Close indicates you are done calling Add() this allows +// the final chunk to be encoded. +func (c *chunkedContentCoder) Close() error { + return c.flushContents() +} + +func (c *chunkedContentCoder) flushContents() error { + // flush the contents, with meta information at first + buf := make([]byte, binary.MaxVarintLen64) + n := binary.PutUvarint(buf, uint64(len(c.chunkMeta))) + _, err := c.chunkMetaBuf.Write(buf[:n]) + if err != nil { + return err + } + + // write out the metaData slice + for _, meta := range c.chunkMeta { + _, err := writeUvarints(&c.chunkMetaBuf, meta.DocNum, meta.DocDvOffset) + if err != nil { + return err + } + } + + // write the metadata to final data + metaData := c.chunkMetaBuf.Bytes() + c.final = append(c.final, c.chunkMetaBuf.Bytes()...) + // write the compressed data to the final data + compressedData := snappy.Encode(nil, c.chunkBuf.Bytes()) + c.final = append(c.final, compressedData...) + + c.chunkLens[c.currChunk] = uint64(len(compressedData) + len(metaData)) + return nil +} + +// Add encodes the provided byte slice into the correct chunk for the provided +// doc num. You MUST call Add() with increasing docNums. +func (c *chunkedContentCoder) Add(docNum uint64, vals []byte) error { + chunk := docNum / c.chunkSize + if chunk != c.currChunk { + // flush out the previous chunk details + err := c.flushContents() + if err != nil { + return err + } + // clearing the chunk specific meta for next chunk + c.chunkBuf.Reset() + c.chunkMetaBuf.Reset() + c.chunkMeta = c.chunkMeta[:0] + c.currChunk = chunk + } + + // get the starting offset for this doc + dvOffset := c.chunkBuf.Len() + dvSize, err := c.chunkBuf.Write(vals) + if err != nil { + return err + } + + c.chunkMeta = append(c.chunkMeta, MetaData{ + DocNum: docNum, + DocDvOffset: uint64(dvOffset + dvSize), + }) + return nil +} + +// Write commits all the encoded chunked contents to the provided writer. +func (c *chunkedContentCoder) Write(w io.Writer) (int, error) { + var tw int + buf := make([]byte, binary.MaxVarintLen64) + // write out the number of chunks + n := binary.PutUvarint(buf, uint64(len(c.chunkLens))) + nw, err := w.Write(buf[:n]) + tw += nw + if err != nil { + return tw, err + } + + chunkOffsets := modifyLengthsToEndOffsets(c.chunkLens) + // write out the chunk offsets + for _, chunkOffset := range chunkOffsets { + n := binary.PutUvarint(buf, chunkOffset) + nw, err = w.Write(buf[:n]) + tw += nw + if err != nil { + return tw, err + } + } + // write out the data + nw, err = w.Write(c.final) + tw += nw + if err != nil { + return tw, err + } + return tw, nil +} + +// ReadDocValueBoundary elicits the start, end offsets from a +// metaData header slice +func ReadDocValueBoundary(chunk int, metaHeaders []MetaData) (uint64, uint64) { + var start uint64 + if chunk > 0 { + start = metaHeaders[chunk-1].DocDvOffset + } + return start, metaHeaders[chunk].DocDvOffset +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/contentcoder_test.go b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/contentcoder_test.go new file mode 100644 index 0000000..ff26138 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/contentcoder_test.go @@ -0,0 +1,75 @@ +// Copyright (c) 2017 Couchbase, 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 zap + +import ( + "bytes" + "reflect" + "testing" +) + +func TestChunkContentCoder(t *testing.T) { + + tests := []struct { + maxDocNum uint64 + chunkSize uint64 + docNums []uint64 + vals [][]byte + expected string + }{ + { + maxDocNum: 0, + chunkSize: 1, + docNums: []uint64{0}, + vals: [][]byte{[]byte("bleve")}, + // 1 chunk, chunk-0 length 11(b), value + expected: string([]byte{0x1, 0xa, 0x1, 0x0, 0x05, 0x05, 0x10, 0x62, 0x6c, 0x65, 0x76, 0x65}), + }, + { + maxDocNum: 1, + chunkSize: 1, + docNums: []uint64{0, 1}, + vals: [][]byte{ + []byte("upside"), + []byte("scorch"), + }, + + expected: string([]byte{0x02, 0x0b, 0x16, 0x01, 0x00, 0x06, 0x06, 0x14, + 0x75, 0x70, 0x73, 0x69, 0x64, 0x65, 0x01, 0x01, 0x06, 0x06, + 0x14, 0x73, 0x63, 0x6f, 0x72, 0x63, 0x68}), + }, + } + + for _, test := range tests { + + cic := newChunkedContentCoder(test.chunkSize, test.maxDocNum) + for i, docNum := range test.docNums { + err := cic.Add(docNum, test.vals[i]) + if err != nil { + t.Fatalf("error adding to intcoder: %v", err) + } + } + _ = cic.Close() + var actual bytes.Buffer + _, err := cic.Write(&actual) + if err != nil { + t.Fatalf("error writing: %v", err) + } + + if !reflect.DeepEqual(test.expected, string(actual.Bytes())) { + t.Errorf("got:%s, expected:%s", string(actual.Bytes()), test.expected) + } + } +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/count.go b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/count.go new file mode 100644 index 0000000..d75e83c --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/count.go @@ -0,0 +1,51 @@ +// Copyright (c) 2017 Couchbase, 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 zap + +import ( + "hash/crc32" + "io" +) + +// CountHashWriter is a wrapper around a Writer which counts the number of +// bytes which have been written and computes a crc32 hash +type CountHashWriter struct { + w io.Writer + crc uint32 + n int +} + +// NewCountHashWriter returns a CountHashWriter which wraps the provided Writer +func NewCountHashWriter(w io.Writer) *CountHashWriter { + return &CountHashWriter{w: w} +} + +// Write writes the provided bytes to the wrapped writer and counts the bytes +func (c *CountHashWriter) Write(b []byte) (int, error) { + n, err := c.w.Write(b) + c.crc = crc32.Update(c.crc, crc32.IEEETable, b[:n]) + c.n += n + return n, err +} + +// Count returns the number of bytes written +func (c *CountHashWriter) Count() int { + return c.n +} + +// Sum32 returns the CRC-32 hash of the content written to this writer +func (c *CountHashWriter) Sum32() uint32 { + return c.crc +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/dict.go b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/dict.go new file mode 100644 index 0000000..3b8132f --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/dict.go @@ -0,0 +1,177 @@ +// Copyright (c) 2017 Couchbase, 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 zap + +import ( + "fmt" + + "github.com/RoaringBitmap/roaring" + "github.com/blevesearch/bleve/index" + "github.com/blevesearch/bleve/index/scorch/segment" + "github.com/couchbase/vellum" + "github.com/couchbase/vellum/regexp" +) + +// Dictionary is the zap representation of the term dictionary +type Dictionary struct { + sb *SegmentBase + field string + fieldID uint16 + fst *vellum.FST +} + +// PostingsList returns the postings list for the specified term +func (d *Dictionary) PostingsList(term string, except *roaring.Bitmap) (segment.PostingsList, error) { + return d.postingsList([]byte(term), except, nil) +} + +func (d *Dictionary) postingsList(term []byte, except *roaring.Bitmap, rv *PostingsList) (*PostingsList, error) { + if d.fst == nil { + return d.postingsListInit(rv, except), nil + } + + postingsOffset, exists, err := d.fst.Get(term) + if err != nil { + return nil, fmt.Errorf("vellum err: %v", err) + } + if !exists { + return d.postingsListInit(rv, except), nil + } + + return d.postingsListFromOffset(postingsOffset, except, rv) +} + +func (d *Dictionary) postingsListFromOffset(postingsOffset uint64, except *roaring.Bitmap, rv *PostingsList) (*PostingsList, error) { + rv = d.postingsListInit(rv, except) + + err := rv.read(postingsOffset, d) + if err != nil { + return nil, err + } + + return rv, nil +} + +func (d *Dictionary) postingsListInit(rv *PostingsList, except *roaring.Bitmap) *PostingsList { + if rv == nil { + rv = &PostingsList{} + } else { + postings := rv.postings + if postings != nil { + postings.Clear() + } + locBitmap := rv.locBitmap + if locBitmap != nil { + locBitmap.Clear() + } + + *rv = PostingsList{} // clear the struct + + rv.postings = postings + rv.locBitmap = locBitmap + } + rv.sb = d.sb + rv.except = except + return rv +} + +// Iterator returns an iterator for this dictionary +func (d *Dictionary) Iterator() segment.DictionaryIterator { + rv := &DictionaryIterator{ + d: d, + } + + if d.fst != nil { + itr, err := d.fst.Iterator(nil, nil) + if err == nil { + rv.itr = itr + } + } + + return rv +} + +// PrefixIterator returns an iterator which only visits terms having the +// the specified prefix +func (d *Dictionary) PrefixIterator(prefix string) segment.DictionaryIterator { + rv := &DictionaryIterator{ + d: d, + } + + if d.fst != nil { + r, err := regexp.New(prefix + ".*") + if err == nil { + itr, err := d.fst.Search(r, nil, nil) + if err == nil { + rv.itr = itr + } + } + } + + return rv +} + +// RangeIterator returns an iterator which only visits terms between the +// start and end terms. NOTE: bleve.index API specifies the end is inclusive. +func (d *Dictionary) RangeIterator(start, end string) segment.DictionaryIterator { + rv := &DictionaryIterator{ + d: d, + } + + // need to increment the end position to be inclusive + endBytes := []byte(end) + if endBytes[len(endBytes)-1] < 0xff { + endBytes[len(endBytes)-1]++ + } else { + endBytes = append(endBytes, 0xff) + } + + if d.fst != nil { + itr, err := d.fst.Iterator([]byte(start), endBytes) + if err == nil { + rv.itr = itr + } + } + + return rv +} + +// DictionaryIterator is an iterator for term dictionary +type DictionaryIterator struct { + d *Dictionary + itr vellum.Iterator + err error + tmp PostingsList +} + +// Next returns the next entry in the dictionary +func (i *DictionaryIterator) Next() (*index.DictEntry, error) { + if i.itr == nil || i.err == vellum.ErrIteratorDone { + return nil, nil + } else if i.err != nil { + return nil, i.err + } + term, postingsOffset := i.itr.Current() + i.err = i.tmp.read(postingsOffset, i.d) + if i.err != nil { + return nil, i.err + } + rv := &index.DictEntry{ + Term: string(term), + Count: i.tmp.Count(), + } + i.err = i.itr.Next() + return rv, nil +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/dict_test.go b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/dict_test.go new file mode 100644 index 0000000..b70f2ad --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/dict_test.go @@ -0,0 +1,180 @@ +// Copyright (c) 2017 Couchbase, 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 zap + +import ( + "os" + "reflect" + "testing" + + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/document" + "github.com/blevesearch/bleve/index" +) + +func buildTestSegmentForDict() (*SegmentBase, error) { + doc := &document.Document{ + ID: "a", + Fields: []document.Field{ + document.NewTextFieldCustom("_id", nil, []byte("a"), document.IndexField|document.StoreField, nil), + document.NewTextFieldCustom("desc", nil, []byte("apple ball cat dog egg fish bat"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + }, + } + + // forge analyzed docs + results := []*index.AnalysisResult{ + &index.AnalysisResult{ + Document: doc, + Analyzed: []analysis.TokenFrequencies{ + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 1, + Position: 1, + Term: []byte("a"), + }, + }, nil, false), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 5, + Position: 1, + Term: []byte("apple"), + }, + &analysis.Token{ + Start: 6, + End: 10, + Position: 2, + Term: []byte("ball"), + }, + &analysis.Token{ + Start: 11, + End: 14, + Position: 3, + Term: []byte("cat"), + }, + &analysis.Token{ + Start: 15, + End: 18, + Position: 4, + Term: []byte("dog"), + }, + &analysis.Token{ + Start: 19, + End: 22, + Position: 5, + Term: []byte("egg"), + }, + &analysis.Token{ + Start: 20, + End: 24, + Position: 6, + Term: []byte("fish"), + }, + &analysis.Token{ + Start: 25, + End: 28, + Position: 7, + Term: []byte("bat"), + }, + }, nil, true), + }, + Length: []int{ + 1, + 7, + }, + }, + } + + return AnalysisResultsToSegmentBase(results, 1024) +} + +func TestDictionary(t *testing.T) { + + _ = os.RemoveAll("/tmp/scorch.zap") + + testSeg, _ := buildTestSegmentForDict() + err := PersistSegmentBase(testSeg, "/tmp/scorch.zap") + if err != nil { + t.Fatalf("error persisting segment: %v", err) + } + + segment, err := Open("/tmp/scorch.zap") + if err != nil { + t.Fatalf("error opening segment: %v", err) + } + defer func() { + cerr := segment.Close() + if cerr != nil { + t.Fatalf("error closing segment: %v", err) + } + }() + + dict, err := segment.Dictionary("desc") + if err != nil { + t.Fatal(err) + } + + // test basic full iterator + expected := []string{"apple", "ball", "bat", "cat", "dog", "egg", "fish"} + var got []string + itr := dict.Iterator() + next, err := itr.Next() + for next != nil && err == nil { + got = append(got, next.Term) + next, err = itr.Next() + } + if err != nil { + t.Fatalf("dict itr error: %v", err) + } + + if !reflect.DeepEqual(expected, got) { + t.Errorf("expected: %v, got: %v", expected, got) + } + + // test prefix iterator + expected = []string{"ball", "bat"} + got = got[:0] + itr = dict.PrefixIterator("b") + next, err = itr.Next() + for next != nil && err == nil { + got = append(got, next.Term) + next, err = itr.Next() + } + if err != nil { + t.Fatalf("dict itr error: %v", err) + } + + if !reflect.DeepEqual(expected, got) { + t.Errorf("expected: %v, got: %v", expected, got) + } + + // test range iterator + expected = []string{"cat", "dog", "egg"} + got = got[:0] + itr = dict.RangeIterator("cat", "egg") + next, err = itr.Next() + for next != nil && err == nil { + got = append(got, next.Term) + next, err = itr.Next() + } + if err != nil { + t.Fatalf("dict itr error: %v", err) + } + + if !reflect.DeepEqual(expected, got) { + t.Errorf("expected: %v, got: %v", expected, got) + } +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/docvalues.go b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/docvalues.go new file mode 100644 index 0000000..8442719 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/docvalues.go @@ -0,0 +1,209 @@ +// Copyright (c) 2017 Couchbase, 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 zap + +import ( + "bytes" + "encoding/binary" + "fmt" + "math" + "reflect" + "sort" + + "github.com/blevesearch/bleve/index" + "github.com/blevesearch/bleve/size" + "github.com/golang/snappy" +) + +var reflectStaticSizedocValueIterator int + +func init() { + var dvi docValueIterator + reflectStaticSizedocValueIterator = int(reflect.TypeOf(dvi).Size()) +} + +type docValueIterator struct { + field string + curChunkNum uint64 + numChunks uint64 + chunkOffsets []uint64 + dvDataLoc uint64 + curChunkHeader []MetaData + curChunkData []byte // compressed data cache +} + +func (di *docValueIterator) size() int { + return reflectStaticSizedocValueIterator + size.SizeOfPtr + + len(di.field) + + len(di.chunkOffsets)*size.SizeOfUint64 + + len(di.curChunkHeader)*reflectStaticSizeMetaData + + len(di.curChunkData) +} + +func (di *docValueIterator) fieldName() string { + return di.field +} + +func (di *docValueIterator) curChunkNumber() uint64 { + return di.curChunkNum +} + +func (s *SegmentBase) loadFieldDocValueIterator(field string, + fieldDvLoc uint64) (*docValueIterator, error) { + // get the docValue offset for the given fields + if fieldDvLoc == fieldNotUninverted { + return nil, fmt.Errorf("loadFieldDocValueIterator: "+ + "no docValues found for field: %s", field) + } + + // read the number of chunks, chunk lengths + var offset, loc uint64 + numChunks, read := binary.Uvarint(s.mem[fieldDvLoc : fieldDvLoc+binary.MaxVarintLen64]) + if read <= 0 { + return nil, fmt.Errorf("failed to read the field "+ + "doc values for field %s", field) + } + offset += uint64(read) + + fdvIter := &docValueIterator{ + curChunkNum: math.MaxUint64, + field: field, + chunkOffsets: make([]uint64, int(numChunks)), + } + for i := 0; i < int(numChunks); i++ { + loc, read = binary.Uvarint(s.mem[fieldDvLoc+offset : fieldDvLoc+offset+binary.MaxVarintLen64]) + if read <= 0 { + return nil, fmt.Errorf("corrupted chunk offset during segment load") + } + fdvIter.chunkOffsets[i] = loc + offset += uint64(read) + } + + fdvIter.dvDataLoc = fieldDvLoc + offset + return fdvIter, nil +} + +func (di *docValueIterator) loadDvChunk(chunkNumber, + localDocNum uint64, s *SegmentBase) error { + // advance to the chunk where the docValues + // reside for the given docNum + destChunkDataLoc, curChunkEnd := di.dvDataLoc, di.dvDataLoc + start, end := readChunkBoundary(int(chunkNumber), di.chunkOffsets) + destChunkDataLoc += start + curChunkEnd += end + + // read the number of docs reside in the chunk + numDocs, read := binary.Uvarint(s.mem[destChunkDataLoc : destChunkDataLoc+binary.MaxVarintLen64]) + if read <= 0 { + return fmt.Errorf("failed to read the chunk") + } + chunkMetaLoc := destChunkDataLoc + uint64(read) + + offset := uint64(0) + di.curChunkHeader = make([]MetaData, int(numDocs)) + for i := 0; i < int(numDocs); i++ { + di.curChunkHeader[i].DocNum, read = binary.Uvarint(s.mem[chunkMetaLoc+offset : chunkMetaLoc+offset+binary.MaxVarintLen64]) + offset += uint64(read) + di.curChunkHeader[i].DocDvOffset, read = binary.Uvarint(s.mem[chunkMetaLoc+offset : chunkMetaLoc+offset+binary.MaxVarintLen64]) + offset += uint64(read) + } + + compressedDataLoc := chunkMetaLoc + offset + dataLength := curChunkEnd - compressedDataLoc + di.curChunkData = s.mem[compressedDataLoc : compressedDataLoc+dataLength] + di.curChunkNum = chunkNumber + return nil +} + +func (di *docValueIterator) visitDocValues(docNum uint64, + visitor index.DocumentFieldTermVisitor) error { + // binary search the term locations for the docNum + start, end := di.getDocValueLocs(docNum) + if start == math.MaxUint64 || end == math.MaxUint64 { + return nil + } + // uncompress the already loaded data + uncompressed, err := snappy.Decode(nil, di.curChunkData) + if err != nil { + return err + } + + // pick the terms for the given docNum + uncompressed = uncompressed[start:end] + for { + i := bytes.Index(uncompressed, termSeparatorSplitSlice) + if i < 0 { + break + } + + visitor(di.field, uncompressed[0:i]) + uncompressed = uncompressed[i+1:] + } + + return nil +} + +func (di *docValueIterator) getDocValueLocs(docNum uint64) (uint64, uint64) { + i := sort.Search(len(di.curChunkHeader), func(i int) bool { + return di.curChunkHeader[i].DocNum >= docNum + }) + if i < len(di.curChunkHeader) && di.curChunkHeader[i].DocNum == docNum { + return ReadDocValueBoundary(i, di.curChunkHeader) + } + return math.MaxUint64, math.MaxUint64 +} + +// VisitDocumentFieldTerms is an implementation of the +// DocumentFieldTermVisitable interface +func (s *SegmentBase) VisitDocumentFieldTerms(localDocNum uint64, fields []string, + visitor index.DocumentFieldTermVisitor) error { + fieldIDPlus1 := uint16(0) + ok := true + for _, field := range fields { + if fieldIDPlus1, ok = s.fieldsMap[field]; !ok { + continue + } + // find the chunkNumber where the docValues are stored + docInChunk := localDocNum / uint64(s.chunkFactor) + + if dvIter, exists := s.fieldDvIterMap[fieldIDPlus1-1]; exists && + dvIter != nil { + // check if the chunk is already loaded + if docInChunk != dvIter.curChunkNumber() { + err := dvIter.loadDvChunk(docInChunk, localDocNum, s) + if err != nil { + continue + } + } + + _ = dvIter.visitDocValues(localDocNum, visitor) + } + } + return nil +} + +// VisitableDocValueFields returns the list of fields with +// persisted doc value terms ready to be visitable using the +// VisitDocumentFieldTerms method. +func (s *Segment) VisitableDocValueFields() ([]string, error) { + var rv []string + for fieldID, field := range s.fieldsInv { + if dvIter, ok := s.fieldDvIterMap[uint16(fieldID)]; ok && + dvIter != nil { + rv = append(rv, field) + } + } + return rv, nil +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/enumerator.go b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/enumerator.go new file mode 100644 index 0000000..3c708dd --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/enumerator.go @@ -0,0 +1,124 @@ +// Copyright (c) 2018 Couchbase, 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 zap + +import ( + "bytes" + + "github.com/couchbase/vellum" +) + +// enumerator provides an ordered traversal of multiple vellum +// iterators. Like JOIN of iterators, the enumerator produces a +// sequence of (key, iteratorIndex, value) tuples, sorted by key ASC, +// then iteratorIndex ASC, where the same key might be seen or +// repeated across multiple child iterators. +type enumerator struct { + itrs []vellum.Iterator + currKs [][]byte + currVs []uint64 + + lowK []byte + lowIdxs []int + lowCurr int +} + +// newEnumerator returns a new enumerator over the vellum Iterators +func newEnumerator(itrs []vellum.Iterator) (*enumerator, error) { + rv := &enumerator{ + itrs: itrs, + currKs: make([][]byte, len(itrs)), + currVs: make([]uint64, len(itrs)), + lowIdxs: make([]int, 0, len(itrs)), + } + for i, itr := range rv.itrs { + rv.currKs[i], rv.currVs[i] = itr.Current() + } + rv.updateMatches() + if rv.lowK == nil { + return rv, vellum.ErrIteratorDone + } + return rv, nil +} + +// updateMatches maintains the low key matches based on the currKs +func (m *enumerator) updateMatches() { + m.lowK = nil + m.lowIdxs = m.lowIdxs[:0] + m.lowCurr = 0 + + for i, key := range m.currKs { + if key == nil { + continue + } + + cmp := bytes.Compare(key, m.lowK) + if cmp < 0 || m.lowK == nil { + // reached a new low + m.lowK = key + m.lowIdxs = m.lowIdxs[:0] + m.lowIdxs = append(m.lowIdxs, i) + } else if cmp == 0 { + m.lowIdxs = append(m.lowIdxs, i) + } + } +} + +// Current returns the enumerator's current key, iterator-index, and +// value. If the enumerator is not pointing at a valid value (because +// Next returned an error previously), Current will return nil,0,0. +func (m *enumerator) Current() ([]byte, int, uint64) { + var i int + var v uint64 + if m.lowCurr < len(m.lowIdxs) { + i = m.lowIdxs[m.lowCurr] + v = m.currVs[i] + } + return m.lowK, i, v +} + +// Next advances the enumerator to the next key/iterator/value result, +// else vellum.ErrIteratorDone is returned. +func (m *enumerator) Next() error { + m.lowCurr += 1 + if m.lowCurr >= len(m.lowIdxs) { + // move all the current low iterators forwards + for _, vi := range m.lowIdxs { + err := m.itrs[vi].Next() + if err != nil && err != vellum.ErrIteratorDone { + return err + } + m.currKs[vi], m.currVs[vi] = m.itrs[vi].Current() + } + m.updateMatches() + } + if m.lowK == nil { + return vellum.ErrIteratorDone + } + return nil +} + +// Close all the underlying Iterators. The first error, if any, will +// be returned. +func (m *enumerator) Close() error { + var rv error + for _, itr := range m.itrs { + err := itr.Close() + if rv == nil { + rv = err + } + } + return rv +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/enumerator_test.go b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/enumerator_test.go new file mode 100644 index 0000000..b277889 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/enumerator_test.go @@ -0,0 +1,233 @@ +// Copyright (c) 2018 Couchbase, 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 zap + +import ( + "fmt" + "testing" + + "github.com/couchbase/vellum" +) + +type enumTestEntry struct { + key string + val uint64 +} + +type enumTestWant struct { + key string + idx int + val uint64 +} + +func TestEnumerator(t *testing.T) { + tests := []struct { + desc string + in [][]enumTestEntry + want []enumTestWant + }{ + { + desc: "two non-empty enumerators with no duplicate keys", + in: [][]enumTestEntry{ + []enumTestEntry{ + {"a", 1}, + {"c", 3}, + {"e", 5}, + }, + []enumTestEntry{ + {"b", 2}, + {"d", 4}, + {"f", 6}, + }, + }, + want: []enumTestWant{ + {"a", 0, 1}, + {"b", 1, 2}, + {"c", 0, 3}, + {"d", 1, 4}, + {"e", 0, 5}, + {"f", 1, 6}, + }, + }, + { + desc: "two non-empty enumerators with duplicate keys", + in: [][]enumTestEntry{ + []enumTestEntry{ + {"a", 1}, + {"c", 3}, + {"e", 5}, + }, + []enumTestEntry{ + {"a", 2}, + {"c", 4}, + {"e", 6}, + }, + }, + want: []enumTestWant{ + {"a", 0, 1}, + {"a", 1, 2}, + {"c", 0, 3}, + {"c", 1, 4}, + {"e", 0, 5}, + {"e", 1, 6}, + }, + }, + { + desc: "first iterator is empty", + in: [][]enumTestEntry{ + []enumTestEntry{}, + []enumTestEntry{ + {"a", 2}, + {"c", 4}, + {"e", 6}, + }, + }, + want: []enumTestWant{ + {"a", 1, 2}, + {"c", 1, 4}, + {"e", 1, 6}, + }, + }, + { + desc: "last iterator is empty", + in: [][]enumTestEntry{ + []enumTestEntry{ + {"a", 1}, + {"c", 3}, + {"e", 5}, + }, + []enumTestEntry{}, + }, + want: []enumTestWant{ + {"a", 0, 1}, + {"c", 0, 3}, + {"e", 0, 5}, + }, + }, + { + desc: "two different length enumerators with duplicate keys", + in: [][]enumTestEntry{ + []enumTestEntry{ + {"a", 1}, + {"c", 3}, + {"e", 5}, + }, + []enumTestEntry{ + {"a", 2}, + {"b", 4}, + {"d", 1000}, + {"e", 6}, + }, + }, + want: []enumTestWant{ + {"a", 0, 1}, + {"a", 1, 2}, + {"b", 1, 4}, + {"c", 0, 3}, + {"d", 1, 1000}, + {"e", 0, 5}, + {"e", 1, 6}, + }, + }, + } + + for _, test := range tests { + var itrs []vellum.Iterator + for _, entries := range test.in { + itrs = append(itrs, &testIterator{entries: entries}) + } + + enumerator, err := newEnumerator(itrs) + if err != nil { + t.Fatalf("%s - expected no err on newNumerator, got: %v", test.desc, err) + } + + wanti := 0 + for wanti < len(test.want) { + if err != nil { + t.Fatalf("%s - wanted no err, got: %v", test.desc, err) + } + + currK, currIdx, currV := enumerator.Current() + + want := test.want[wanti] + if want.key != string(currK) { + t.Fatalf("%s - wrong key, wanted: %#v, got: %q, %d, %d", test.desc, + want, currK, currIdx, currV) + } + if want.idx != currIdx { + t.Fatalf("%s - wrong idx, wanted: %#v, got: %q, %d, %d", test.desc, + want, currK, currIdx, currV) + } + if want.val != currV { + t.Fatalf("%s - wrong val, wanted: %#v, got: %q, %d, %d", test.desc, + want, currK, currIdx, currV) + } + + wanti += 1 + + err = enumerator.Next() + } + + if err != vellum.ErrIteratorDone { + t.Fatalf("%s - expected ErrIteratorDone, got: %v", test.desc, err) + } + + err = enumerator.Close() + if err != nil { + t.Fatalf("%s - expected nil err on close, got: %v", test.desc, err) + } + + for _, itr := range itrs { + if itr.(*testIterator).curr != 654321 { + t.Fatalf("%s - expected child iter to be closed", test.desc) + } + } + } +} + +type testIterator struct { + entries []enumTestEntry + curr int +} + +func (m *testIterator) Current() ([]byte, uint64) { + if m.curr >= len(m.entries) { + return nil, 0 + } + return []byte(m.entries[m.curr].key), m.entries[m.curr].val +} + +func (m *testIterator) Next() error { + m.curr++ + if m.curr >= len(m.entries) { + return vellum.ErrIteratorDone + } + return nil +} + +func (m *testIterator) Seek(key []byte) error { + return fmt.Errorf("not implemented for enumerator unit tests") +} + +func (m *testIterator) Reset(f *vellum.FST, + startKeyInclusive, endKeyExclusive []byte, aut vellum.Automaton) error { + return fmt.Errorf("not implemented for enumerator unit tests") +} + +func (m *testIterator) Close() error { + m.curr = 654321 + return nil +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/intcoder.go b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/intcoder.go new file mode 100644 index 0000000..81ef8bb --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/intcoder.go @@ -0,0 +1,172 @@ +// Copyright (c) 2017 Couchbase, 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 zap + +import ( + "bytes" + "encoding/binary" + "io" + + "github.com/Smerity/govarint" +) + +type chunkedIntCoder struct { + final []byte + chunkSize uint64 + chunkBuf bytes.Buffer + encoder *govarint.Base128Encoder + chunkLens []uint64 + currChunk uint64 + + buf []byte +} + +// newChunkedIntCoder returns a new chunk int coder which packs data into +// chunks based on the provided chunkSize and supports up to the specified +// maxDocNum +func newChunkedIntCoder(chunkSize uint64, maxDocNum uint64) *chunkedIntCoder { + total := maxDocNum/chunkSize + 1 + rv := &chunkedIntCoder{ + chunkSize: chunkSize, + chunkLens: make([]uint64, total), + final: make([]byte, 0, 64), + } + rv.encoder = govarint.NewU64Base128Encoder(&rv.chunkBuf) + + return rv +} + +// Reset lets you reuse this chunked int coder. buffers are reset and reused +// from previous use. you cannot change the chunk size or max doc num. +func (c *chunkedIntCoder) Reset() { + c.final = c.final[:0] + c.chunkBuf.Reset() + c.currChunk = 0 + for i := range c.chunkLens { + c.chunkLens[i] = 0 + } +} + +// Add encodes the provided integers into the correct chunk for the provided +// doc num. You MUST call Add() with increasing docNums. +func (c *chunkedIntCoder) Add(docNum uint64, vals ...uint64) error { + chunk := docNum / c.chunkSize + if chunk != c.currChunk { + // starting a new chunk + c.Close() + c.chunkBuf.Reset() + c.currChunk = chunk + } + + for _, val := range vals { + _, err := c.encoder.PutU64(val) + if err != nil { + return err + } + } + + return nil +} + +func (c *chunkedIntCoder) AddBytes(docNum uint64, buf []byte) error { + chunk := docNum / c.chunkSize + if chunk != c.currChunk { + // starting a new chunk + c.Close() + c.chunkBuf.Reset() + c.currChunk = chunk + } + + _, err := c.chunkBuf.Write(buf) + return err +} + +// Close indicates you are done calling Add() this allows the final chunk +// to be encoded. +func (c *chunkedIntCoder) Close() { + c.encoder.Close() + encodingBytes := c.chunkBuf.Bytes() + c.chunkLens[c.currChunk] = uint64(len(encodingBytes)) + c.final = append(c.final, encodingBytes...) + c.currChunk = uint64(cap(c.chunkLens)) // sentinel to detect double close +} + +// Write commits all the encoded chunked integers to the provided writer. +func (c *chunkedIntCoder) Write(w io.Writer) (int, error) { + bufNeeded := binary.MaxVarintLen64 * (1 + len(c.chunkLens)) + if len(c.buf) < bufNeeded { + c.buf = make([]byte, bufNeeded) + } + buf := c.buf + + // convert the chunk lengths into chunk offsets + chunkOffsets := modifyLengthsToEndOffsets(c.chunkLens) + + // write out the number of chunks & each chunk offsets + n := binary.PutUvarint(buf, uint64(len(chunkOffsets))) + for _, chunkOffset := range chunkOffsets { + n += binary.PutUvarint(buf[n:], chunkOffset) + } + + tw, err := w.Write(buf[:n]) + if err != nil { + return tw, err + } + + // write out the data + nw, err := w.Write(c.final) + tw += nw + if err != nil { + return tw, err + } + return tw, nil +} + +func (c *chunkedIntCoder) FinalSize() int { + return len(c.final) +} + +// modifyLengthsToEndOffsets converts the chunk length array +// to a chunk offset array. The readChunkBoundary +// will figure out the start and end of every chunk from +// these offsets. Starting offset of i'th index is stored +// in i-1'th position except for 0'th index and ending offset +// is stored at i'th index position. +// For 0'th element, starting position is always zero. +// eg: +// Lens -> 5 5 5 5 => 5 10 15 20 +// Lens -> 0 5 0 5 => 0 5 5 10 +// Lens -> 0 0 0 5 => 0 0 0 5 +// Lens -> 5 0 0 0 => 5 5 5 5 +// Lens -> 0 5 0 0 => 0 5 5 5 +// Lens -> 0 0 5 0 => 0 0 5 5 +func modifyLengthsToEndOffsets(lengths []uint64) []uint64 { + var runningOffset uint64 + var index, i int + for i = 1; i <= len(lengths); i++ { + runningOffset += lengths[i-1] + lengths[index] = runningOffset + index++ + } + return lengths +} + +func readChunkBoundary(chunk int, offsets []uint64) (uint64, uint64) { + var start uint64 + if chunk > 0 { + start = offsets[chunk-1] + } + return start, offsets[chunk] +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/intcoder_test.go b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/intcoder_test.go new file mode 100644 index 0000000..952e066 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/intcoder_test.go @@ -0,0 +1,269 @@ +// Copyright (c) 2017 Couchbase, 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 zap + +import ( + "bytes" + "reflect" + "testing" +) + +func TestChunkIntCoder(t *testing.T) { + tests := []struct { + maxDocNum uint64 + chunkSize uint64 + docNums []uint64 + vals [][]uint64 + expected []byte + }{ + { + maxDocNum: 0, + chunkSize: 1, + docNums: []uint64{0}, + vals: [][]uint64{ + []uint64{3}, + }, + // 1 chunk, chunk-0 length 1, value 3 + expected: []byte{0x1, 0x1, 0x3}, + }, + { + maxDocNum: 1, + chunkSize: 1, + docNums: []uint64{0, 1}, + vals: [][]uint64{ + []uint64{3}, + []uint64{7}, + }, + // 2 chunks, chunk-0 offset 1, chunk-1 offset 2, value 3, value 7 + expected: []byte{0x2, 0x1, 0x2, 0x3, 0x7}, + }, + } + + for _, test := range tests { + + cic := newChunkedIntCoder(test.chunkSize, test.maxDocNum) + for i, docNum := range test.docNums { + err := cic.Add(docNum, test.vals[i]...) + if err != nil { + t.Fatalf("error adding to intcoder: %v", err) + } + } + cic.Close() + var actual bytes.Buffer + _, err := cic.Write(&actual) + if err != nil { + t.Fatalf("error writing: %v", err) + } + if !reflect.DeepEqual(test.expected, actual.Bytes()) { + t.Errorf("got % x, expected % x", actual.Bytes(), test.expected) + } + } +} + +func TestChunkLengthToOffsets(t *testing.T) { + + tests := []struct { + lengths []uint64 + expectedOffsets []uint64 + }{ + { + lengths: []uint64{5, 5, 5, 5, 5}, + expectedOffsets: []uint64{5, 10, 15, 20, 25}, + }, + { + lengths: []uint64{0, 5, 0, 5, 0}, + expectedOffsets: []uint64{0, 5, 5, 10, 10}, + }, + { + lengths: []uint64{0, 0, 0, 0, 5}, + expectedOffsets: []uint64{0, 0, 0, 0, 5}, + }, + { + lengths: []uint64{5, 0, 0, 0, 0}, + expectedOffsets: []uint64{5, 5, 5, 5, 5}, + }, + { + lengths: []uint64{0, 5, 0, 0, 0}, + expectedOffsets: []uint64{0, 5, 5, 5, 5}, + }, + { + lengths: []uint64{0, 0, 0, 5, 0}, + expectedOffsets: []uint64{0, 0, 0, 5, 5}, + }, + { + lengths: []uint64{0, 0, 0, 5, 5}, + expectedOffsets: []uint64{0, 0, 0, 5, 10}, + }, + { + lengths: []uint64{5, 5, 5, 0, 0}, + expectedOffsets: []uint64{5, 10, 15, 15, 15}, + }, + { + lengths: []uint64{5}, + expectedOffsets: []uint64{5}, + }, + { + lengths: []uint64{5, 5}, + expectedOffsets: []uint64{5, 10}, + }, + } + + for i, test := range tests { + modifyLengthsToEndOffsets(test.lengths) + if !reflect.DeepEqual(test.expectedOffsets, test.lengths) { + t.Errorf("Test: %d failed, got %+v, expected %+v", i, test.lengths, test.expectedOffsets) + } + } +} + +func TestChunkReadBoundaryFromOffsets(t *testing.T) { + + tests := []struct { + chunkNumber int + offsets []uint64 + expectedStart uint64 + expectedEnd uint64 + }{ + { + offsets: []uint64{5, 10, 15, 20, 25}, + chunkNumber: 4, + expectedStart: 20, + expectedEnd: 25, + }, + { + offsets: []uint64{5, 10, 15, 20, 25}, + chunkNumber: 0, + expectedStart: 0, + expectedEnd: 5, + }, + { + offsets: []uint64{5, 10, 15, 20, 25}, + chunkNumber: 2, + expectedStart: 10, + expectedEnd: 15, + }, + { + offsets: []uint64{0, 5, 5, 10, 10}, + chunkNumber: 4, + expectedStart: 10, + expectedEnd: 10, + }, + { + offsets: []uint64{0, 5, 5, 10, 10}, + chunkNumber: 1, + expectedStart: 0, + expectedEnd: 5, + }, + { + offsets: []uint64{5, 5, 5, 5, 5}, + chunkNumber: 0, + expectedStart: 0, + expectedEnd: 5, + }, + { + offsets: []uint64{5, 5, 5, 5, 5}, + chunkNumber: 4, + expectedStart: 5, + expectedEnd: 5, + }, + { + offsets: []uint64{5, 5, 5, 5, 5}, + chunkNumber: 1, + expectedStart: 5, + expectedEnd: 5, + }, + { + offsets: []uint64{0, 5, 5, 5, 5}, + chunkNumber: 1, + expectedStart: 0, + expectedEnd: 5, + }, + { + offsets: []uint64{0, 5, 5, 5, 5}, + chunkNumber: 0, + expectedStart: 0, + expectedEnd: 0, + }, + { + offsets: []uint64{0, 0, 0, 5, 5}, + chunkNumber: 2, + expectedStart: 0, + expectedEnd: 0, + }, + { + offsets: []uint64{0, 0, 0, 5, 5}, + chunkNumber: 1, + expectedStart: 0, + expectedEnd: 0, + }, + { + offsets: []uint64{0, 0, 0, 0, 5}, + chunkNumber: 4, + expectedStart: 0, + expectedEnd: 5, + }, + { + offsets: []uint64{0, 0, 0, 0, 5}, + chunkNumber: 2, + expectedStart: 0, + expectedEnd: 0, + }, + { + offsets: []uint64{5, 10, 15, 15, 15}, + chunkNumber: 0, + expectedStart: 0, + expectedEnd: 5, + }, + { + offsets: []uint64{5, 10, 15, 15, 15}, + chunkNumber: 1, + expectedStart: 5, + expectedEnd: 10, + }, + { + offsets: []uint64{5, 10, 15, 15, 15}, + chunkNumber: 2, + expectedStart: 10, + expectedEnd: 15, + }, + { + offsets: []uint64{5, 10, 15, 15, 15}, + chunkNumber: 3, + expectedStart: 15, + expectedEnd: 15, + }, + { + offsets: []uint64{5, 10, 15, 15, 15}, + chunkNumber: 4, + expectedStart: 15, + expectedEnd: 15, + }, + { + offsets: []uint64{5}, + chunkNumber: 0, + expectedStart: 0, + expectedEnd: 5, + }, + } + + for i, test := range tests { + s, e := readChunkBoundary(test.chunkNumber, test.offsets) + if test.expectedStart != s || test.expectedEnd != e { + t.Errorf("Test: %d failed for chunkNumber: %d got start: %d end: %d,"+ + " expected start: %d end: %d", i, test.chunkNumber, s, e, + test.expectedStart, test.expectedEnd) + } + } +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/merge.go b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/merge.go new file mode 100644 index 0000000..1da5e52 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/merge.go @@ -0,0 +1,773 @@ +// Copyright (c) 2017 Couchbase, 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 zap + +import ( + "bufio" + "bytes" + "encoding/binary" + "fmt" + "math" + "os" + "sort" + + "github.com/RoaringBitmap/roaring" + "github.com/Smerity/govarint" + "github.com/couchbase/vellum" + "github.com/golang/snappy" +) + +var DefaultFileMergerBufferSize = 1024 * 1024 + +const docDropped = math.MaxUint64 // sentinel docNum to represent a deleted doc + +// Merge takes a slice of zap segments and bit masks describing which +// documents may be dropped, and creates a new segment containing the +// remaining data. This new segment is built at the specified path, +// with the provided chunkFactor. +func Merge(segments []*Segment, drops []*roaring.Bitmap, path string, + chunkFactor uint32) ([][]uint64, uint64, error) { + flag := os.O_RDWR | os.O_CREATE + + f, err := os.OpenFile(path, flag, 0600) + if err != nil { + return nil, 0, err + } + + cleanup := func() { + _ = f.Close() + _ = os.Remove(path) + } + + segmentBases := make([]*SegmentBase, len(segments)) + for segmenti, segment := range segments { + segmentBases[segmenti] = &segment.SegmentBase + } + + // buffer the output + br := bufio.NewWriterSize(f, DefaultFileMergerBufferSize) + + // wrap it for counting (tracking offsets) + cr := NewCountHashWriter(br) + + newDocNums, numDocs, storedIndexOffset, fieldsIndexOffset, docValueOffset, _, _, _, err := + MergeToWriter(segmentBases, drops, chunkFactor, cr) + if err != nil { + cleanup() + return nil, 0, err + } + + err = persistFooter(numDocs, storedIndexOffset, fieldsIndexOffset, + docValueOffset, chunkFactor, cr.Sum32(), cr) + if err != nil { + cleanup() + return nil, 0, err + } + + err = br.Flush() + if err != nil { + cleanup() + return nil, 0, err + } + + err = f.Sync() + if err != nil { + cleanup() + return nil, 0, err + } + + err = f.Close() + if err != nil { + cleanup() + return nil, 0, err + } + + return newDocNums, uint64(cr.Count()), nil +} + +func MergeToWriter(segments []*SegmentBase, drops []*roaring.Bitmap, + chunkFactor uint32, cr *CountHashWriter) ( + newDocNums [][]uint64, + numDocs, storedIndexOffset, fieldsIndexOffset, docValueOffset uint64, + dictLocs []uint64, fieldsInv []string, fieldsMap map[string]uint16, + err error) { + docValueOffset = uint64(fieldNotUninverted) + + var fieldsSame bool + fieldsSame, fieldsInv = mergeFields(segments) + fieldsMap = mapFields(fieldsInv) + + numDocs = computeNewDocCount(segments, drops) + if numDocs > 0 { + storedIndexOffset, newDocNums, err = mergeStoredAndRemap(segments, drops, + fieldsMap, fieldsInv, fieldsSame, numDocs, cr) + if err != nil { + return nil, 0, 0, 0, 0, nil, nil, nil, err + } + + dictLocs, docValueOffset, err = persistMergedRest(segments, drops, + fieldsInv, fieldsMap, fieldsSame, + newDocNums, numDocs, chunkFactor, cr) + if err != nil { + return nil, 0, 0, 0, 0, nil, nil, nil, err + } + } else { + dictLocs = make([]uint64, len(fieldsInv)) + } + + fieldsIndexOffset, err = persistFields(fieldsInv, cr, dictLocs) + if err != nil { + return nil, 0, 0, 0, 0, nil, nil, nil, err + } + + return newDocNums, numDocs, storedIndexOffset, fieldsIndexOffset, docValueOffset, dictLocs, fieldsInv, fieldsMap, nil +} + +// mapFields takes the fieldsInv list and returns a map of fieldName +// to fieldID+1 +func mapFields(fields []string) map[string]uint16 { + rv := make(map[string]uint16, len(fields)) + for i, fieldName := range fields { + rv[fieldName] = uint16(i) + 1 + } + return rv +} + +// computeNewDocCount determines how many documents will be in the newly +// merged segment when obsoleted docs are dropped +func computeNewDocCount(segments []*SegmentBase, drops []*roaring.Bitmap) uint64 { + var newDocCount uint64 + for segI, segment := range segments { + newDocCount += segment.numDocs + if drops[segI] != nil { + newDocCount -= drops[segI].GetCardinality() + } + } + return newDocCount +} + +func persistMergedRest(segments []*SegmentBase, dropsIn []*roaring.Bitmap, + fieldsInv []string, fieldsMap map[string]uint16, fieldsSame bool, + newDocNumsIn [][]uint64, newSegDocCount uint64, chunkFactor uint32, + w *CountHashWriter) ([]uint64, uint64, error) { + + var bufMaxVarintLen64 []byte = make([]byte, binary.MaxVarintLen64) + var bufLoc []uint64 + + var postings *PostingsList + var postItr *PostingsIterator + + rv := make([]uint64, len(fieldsInv)) + fieldDvLocs := make([]uint64, len(fieldsInv)) + + tfEncoder := newChunkedIntCoder(uint64(chunkFactor), newSegDocCount-1) + locEncoder := newChunkedIntCoder(uint64(chunkFactor), newSegDocCount-1) + + // docTermMap is keyed by docNum, where the array impl provides + // better memory usage behavior than a sparse-friendlier hashmap + // for when docs have much structural similarity (i.e., every doc + // has a given field) + var docTermMap [][]byte + + var vellumBuf bytes.Buffer + newVellum, err := vellum.New(&vellumBuf, nil) + if err != nil { + return nil, 0, err + } + + newRoaring := roaring.NewBitmap() + newRoaringLocs := roaring.NewBitmap() + + // for each field + for fieldID, fieldName := range fieldsInv { + + // collect FST iterators from all active segments for this field + var newDocNums [][]uint64 + var drops []*roaring.Bitmap + var dicts []*Dictionary + var itrs []vellum.Iterator + + for segmentI, segment := range segments { + dict, err2 := segment.dictionary(fieldName) + if err2 != nil { + return nil, 0, err2 + } + if dict != nil && dict.fst != nil { + itr, err2 := dict.fst.Iterator(nil, nil) + if err2 != nil && err2 != vellum.ErrIteratorDone { + return nil, 0, err2 + } + if itr != nil { + newDocNums = append(newDocNums, newDocNumsIn[segmentI]) + if dropsIn[segmentI] != nil && !dropsIn[segmentI].IsEmpty() { + drops = append(drops, dropsIn[segmentI]) + } else { + drops = append(drops, nil) + } + dicts = append(dicts, dict) + itrs = append(itrs, itr) + } + } + } + + if uint64(cap(docTermMap)) < newSegDocCount { + docTermMap = make([][]byte, newSegDocCount) + } else { + docTermMap = docTermMap[0:newSegDocCount] + for docNum := range docTermMap { // reset the docTermMap + docTermMap[docNum] = docTermMap[docNum][:0] + } + } + + var prevTerm []byte + + newRoaring.Clear() + newRoaringLocs.Clear() + + var lastDocNum, lastFreq, lastNorm uint64 + + // determines whether to use "1-hit" encoding optimization + // when a term appears in only 1 doc, with no loc info, + // has freq of 1, and the docNum fits into 31-bits + use1HitEncoding := func(termCardinality uint64) (bool, uint64, uint64) { + if termCardinality == uint64(1) && locEncoder.FinalSize() <= 0 { + docNum := uint64(newRoaring.Minimum()) + if under32Bits(docNum) && docNum == lastDocNum && lastFreq == 1 { + return true, docNum, lastNorm + } + } + return false, 0, 0 + } + + finishTerm := func(term []byte) error { + if term == nil { + return nil + } + + tfEncoder.Close() + locEncoder.Close() + + postingsOffset, err := writePostings( + newRoaring, newRoaringLocs, tfEncoder, locEncoder, + use1HitEncoding, w, bufMaxVarintLen64) + if err != nil { + return err + } + + if postingsOffset > 0 { + err = newVellum.Insert(term, postingsOffset) + if err != nil { + return err + } + } + + newRoaring.Clear() + newRoaringLocs.Clear() + + tfEncoder.Reset() + locEncoder.Reset() + + lastDocNum = 0 + lastFreq = 0 + lastNorm = 0 + + return nil + } + + enumerator, err := newEnumerator(itrs) + + for err == nil { + term, itrI, postingsOffset := enumerator.Current() + + if !bytes.Equal(prevTerm, term) { + // if the term changed, write out the info collected + // for the previous term + err2 := finishTerm(prevTerm) + if err2 != nil { + return nil, 0, err2 + } + } + + var err2 error + postings, err2 = dicts[itrI].postingsListFromOffset( + postingsOffset, drops[itrI], postings) + if err2 != nil { + return nil, 0, err2 + } + + postItr = postings.iterator(postItr) + + if fieldsSame { + // can optimize by copying freq/norm/loc bytes directly + lastDocNum, lastFreq, lastNorm, err = mergeTermFreqNormLocsByCopying( + term, postItr, newDocNums[itrI], newRoaring, newRoaringLocs, + tfEncoder, locEncoder, docTermMap) + } else { + lastDocNum, lastFreq, lastNorm, bufLoc, err = mergeTermFreqNormLocs( + fieldsMap, term, postItr, newDocNums[itrI], newRoaring, newRoaringLocs, + tfEncoder, locEncoder, docTermMap, bufLoc) + } + if err != nil { + return nil, 0, err + } + + prevTerm = prevTerm[:0] // copy to prevTerm in case Next() reuses term mem + prevTerm = append(prevTerm, term...) + + err = enumerator.Next() + } + if err != nil && err != vellum.ErrIteratorDone { + return nil, 0, err + } + + err = finishTerm(prevTerm) + if err != nil { + return nil, 0, err + } + + dictOffset := uint64(w.Count()) + + err = newVellum.Close() + if err != nil { + return nil, 0, err + } + vellumData := vellumBuf.Bytes() + + // write out the length of the vellum data + n := binary.PutUvarint(bufMaxVarintLen64, uint64(len(vellumData))) + _, err = w.Write(bufMaxVarintLen64[:n]) + if err != nil { + return nil, 0, err + } + + // write this vellum to disk + _, err = w.Write(vellumData) + if err != nil { + return nil, 0, err + } + + rv[fieldID] = dictOffset + + // update the field doc values + fdvEncoder := newChunkedContentCoder(uint64(chunkFactor), newSegDocCount-1) + for docNum, docTerms := range docTermMap { + if len(docTerms) > 0 { + err = fdvEncoder.Add(uint64(docNum), docTerms) + if err != nil { + return nil, 0, err + } + } + } + err = fdvEncoder.Close() + if err != nil { + return nil, 0, err + } + + // get the field doc value offset + fieldDvLocs[fieldID] = uint64(w.Count()) + + // persist the doc value details for this field + _, err = fdvEncoder.Write(w) + if err != nil { + return nil, 0, err + } + + // reset vellum buffer and vellum builder + vellumBuf.Reset() + err = newVellum.Reset(&vellumBuf) + if err != nil { + return nil, 0, err + } + } + + fieldDvLocsOffset := uint64(w.Count()) + + buf := bufMaxVarintLen64 + for _, offset := range fieldDvLocs { + n := binary.PutUvarint(buf, uint64(offset)) + _, err := w.Write(buf[:n]) + if err != nil { + return nil, 0, err + } + } + + return rv, fieldDvLocsOffset, nil +} + +func mergeTermFreqNormLocs(fieldsMap map[string]uint16, term []byte, postItr *PostingsIterator, + newDocNums []uint64, newRoaring *roaring.Bitmap, newRoaringLocs *roaring.Bitmap, + tfEncoder *chunkedIntCoder, locEncoder *chunkedIntCoder, docTermMap [][]byte, + bufLoc []uint64) ( + lastDocNum uint64, lastFreq uint64, lastNorm uint64, bufLocOut []uint64, err error) { + next, err := postItr.Next() + for next != nil && err == nil { + hitNewDocNum := newDocNums[next.Number()] + if hitNewDocNum == docDropped { + return 0, 0, 0, nil, fmt.Errorf("see hit with dropped docNum") + } + + newRoaring.Add(uint32(hitNewDocNum)) + + nextFreq := next.Frequency() + nextNorm := uint64(math.Float32bits(float32(next.Norm()))) + + err = tfEncoder.Add(hitNewDocNum, nextFreq, nextNorm) + if err != nil { + return 0, 0, 0, nil, err + } + + locs := next.Locations() + if len(locs) > 0 { + newRoaringLocs.Add(uint32(hitNewDocNum)) + + for _, loc := range locs { + if cap(bufLoc) < 5+len(loc.ArrayPositions()) { + bufLoc = make([]uint64, 0, 5+len(loc.ArrayPositions())) + } + args := bufLoc[0:5] + args[0] = uint64(fieldsMap[loc.Field()] - 1) + args[1] = loc.Pos() + args[2] = loc.Start() + args[3] = loc.End() + args[4] = uint64(len(loc.ArrayPositions())) + args = append(args, loc.ArrayPositions()...) + err = locEncoder.Add(hitNewDocNum, args...) + if err != nil { + return 0, 0, 0, nil, err + } + } + } + + docTermMap[hitNewDocNum] = + append(append(docTermMap[hitNewDocNum], term...), termSeparator) + + lastDocNum = hitNewDocNum + lastFreq = nextFreq + lastNorm = nextNorm + + next, err = postItr.Next() + } + + return lastDocNum, lastFreq, lastNorm, bufLoc, err +} + +func mergeTermFreqNormLocsByCopying(term []byte, postItr *PostingsIterator, + newDocNums []uint64, newRoaring *roaring.Bitmap, newRoaringLocs *roaring.Bitmap, + tfEncoder *chunkedIntCoder, locEncoder *chunkedIntCoder, docTermMap [][]byte) ( + lastDocNum uint64, lastFreq uint64, lastNorm uint64, err error) { + nextDocNum, nextFreq, nextNorm, nextFreqNormBytes, nextLocBytes, err := + postItr.nextBytes() + for err == nil && len(nextFreqNormBytes) > 0 { + hitNewDocNum := newDocNums[nextDocNum] + if hitNewDocNum == docDropped { + return 0, 0, 0, fmt.Errorf("see hit with dropped doc num") + } + + newRoaring.Add(uint32(hitNewDocNum)) + err = tfEncoder.AddBytes(hitNewDocNum, nextFreqNormBytes) + if err != nil { + return 0, 0, 0, err + } + + if len(nextLocBytes) > 0 { + newRoaringLocs.Add(uint32(hitNewDocNum)) + err = locEncoder.AddBytes(hitNewDocNum, nextLocBytes) + if err != nil { + return 0, 0, 0, err + } + } + + docTermMap[hitNewDocNum] = + append(append(docTermMap[hitNewDocNum], term...), termSeparator) + + lastDocNum = hitNewDocNum + lastFreq = nextFreq + lastNorm = nextNorm + + nextDocNum, nextFreq, nextNorm, nextFreqNormBytes, nextLocBytes, err = + postItr.nextBytes() + } + + return lastDocNum, lastFreq, lastNorm, err +} + +func writePostings(postings, postingLocs *roaring.Bitmap, + tfEncoder, locEncoder *chunkedIntCoder, + use1HitEncoding func(uint64) (bool, uint64, uint64), + w *CountHashWriter, bufMaxVarintLen64 []byte) ( + offset uint64, err error) { + termCardinality := postings.GetCardinality() + if termCardinality <= 0 { + return 0, nil + } + + if use1HitEncoding != nil { + encodeAs1Hit, docNum1Hit, normBits1Hit := use1HitEncoding(termCardinality) + if encodeAs1Hit { + return FSTValEncode1Hit(docNum1Hit, normBits1Hit), nil + } + } + + tfOffset := uint64(w.Count()) + _, err = tfEncoder.Write(w) + if err != nil { + return 0, err + } + + locOffset := uint64(w.Count()) + _, err = locEncoder.Write(w) + if err != nil { + return 0, err + } + + postingLocsOffset := uint64(w.Count()) + _, err = writeRoaringWithLen(postingLocs, w, bufMaxVarintLen64) + if err != nil { + return 0, err + } + + postingsOffset := uint64(w.Count()) + + n := binary.PutUvarint(bufMaxVarintLen64, tfOffset) + _, err = w.Write(bufMaxVarintLen64[:n]) + if err != nil { + return 0, err + } + + n = binary.PutUvarint(bufMaxVarintLen64, locOffset) + _, err = w.Write(bufMaxVarintLen64[:n]) + if err != nil { + return 0, err + } + + n = binary.PutUvarint(bufMaxVarintLen64, postingLocsOffset) + _, err = w.Write(bufMaxVarintLen64[:n]) + if err != nil { + return 0, err + } + + _, err = writeRoaringWithLen(postings, w, bufMaxVarintLen64) + if err != nil { + return 0, err + } + + return postingsOffset, nil +} + +func mergeStoredAndRemap(segments []*SegmentBase, drops []*roaring.Bitmap, + fieldsMap map[string]uint16, fieldsInv []string, fieldsSame bool, newSegDocCount uint64, + w *CountHashWriter) (uint64, [][]uint64, error) { + var rv [][]uint64 // The remapped or newDocNums for each segment. + + var newDocNum uint64 + + var curr int + var metaBuf bytes.Buffer + var data, compressed []byte + + metaEncoder := govarint.NewU64Base128Encoder(&metaBuf) + + vals := make([][][]byte, len(fieldsInv)) + typs := make([][]byte, len(fieldsInv)) + poss := make([][][]uint64, len(fieldsInv)) + + docNumOffsets := make([]uint64, newSegDocCount) + + // for each segment + for segI, segment := range segments { + segNewDocNums := make([]uint64, segment.numDocs) + + dropsI := drops[segI] + + // optimize when the field mapping is the same across all + // segments and there are no deletions, via byte-copying + // of stored docs bytes directly to the writer + if fieldsSame && (dropsI == nil || dropsI.GetCardinality() == 0) { + err := segment.copyStoredDocs(newDocNum, docNumOffsets, w) + if err != nil { + return 0, nil, err + } + + for i := uint64(0); i < segment.numDocs; i++ { + segNewDocNums[i] = newDocNum + newDocNum++ + } + rv = append(rv, segNewDocNums) + + continue + } + + // for each doc num + for docNum := uint64(0); docNum < segment.numDocs; docNum++ { + // TODO: roaring's API limits docNums to 32-bits? + if dropsI != nil && dropsI.Contains(uint32(docNum)) { + segNewDocNums[docNum] = docDropped + continue + } + + segNewDocNums[docNum] = newDocNum + + curr = 0 + metaBuf.Reset() + data = data[:0] + compressed = compressed[:0] + + // collect all the data + for i := 0; i < len(fieldsInv); i++ { + vals[i] = vals[i][:0] + typs[i] = typs[i][:0] + poss[i] = poss[i][:0] + } + err := segment.VisitDocument(docNum, func(field string, typ byte, value []byte, pos []uint64) bool { + fieldID := int(fieldsMap[field]) - 1 + vals[fieldID] = append(vals[fieldID], value) + typs[fieldID] = append(typs[fieldID], typ) + poss[fieldID] = append(poss[fieldID], pos) + return true + }) + if err != nil { + return 0, nil, err + } + + // now walk the fields in order + for fieldID := range fieldsInv { + storedFieldValues := vals[int(fieldID)] + + stf := typs[int(fieldID)] + spf := poss[int(fieldID)] + + var err2 error + curr, data, err2 = persistStoredFieldValues(fieldID, + storedFieldValues, stf, spf, curr, metaEncoder, data) + if err2 != nil { + return 0, nil, err2 + } + } + + metaEncoder.Close() + metaBytes := metaBuf.Bytes() + + compressed = snappy.Encode(compressed, data) + + // record where we're about to start writing + docNumOffsets[newDocNum] = uint64(w.Count()) + + // write out the meta len and compressed data len + _, err = writeUvarints(w, uint64(len(metaBytes)), uint64(len(compressed))) + if err != nil { + return 0, nil, err + } + // now write the meta + _, err = w.Write(metaBytes) + if err != nil { + return 0, nil, err + } + // now write the compressed data + _, err = w.Write(compressed) + if err != nil { + return 0, nil, err + } + + newDocNum++ + } + + rv = append(rv, segNewDocNums) + } + + // return value is the start of the stored index + storedIndexOffset := uint64(w.Count()) + + // now write out the stored doc index + for _, docNumOffset := range docNumOffsets { + err := binary.Write(w, binary.BigEndian, docNumOffset) + if err != nil { + return 0, nil, err + } + } + + return storedIndexOffset, rv, nil +} + +// copyStoredDocs writes out a segment's stored doc info, optimized by +// using a single Write() call for the entire set of bytes. The +// newDocNumOffsets is filled with the new offsets for each doc. +func (s *SegmentBase) copyStoredDocs(newDocNum uint64, newDocNumOffsets []uint64, + w *CountHashWriter) error { + if s.numDocs <= 0 { + return nil + } + + indexOffset0, storedOffset0, _, _, _ := + s.getDocStoredOffsets(0) // the segment's first doc + + indexOffsetN, storedOffsetN, readN, metaLenN, dataLenN := + s.getDocStoredOffsets(s.numDocs - 1) // the segment's last doc + + storedOffset0New := uint64(w.Count()) + + storedBytes := s.mem[storedOffset0 : storedOffsetN+readN+metaLenN+dataLenN] + _, err := w.Write(storedBytes) + if err != nil { + return err + } + + // remap the storedOffset's for the docs into new offsets relative + // to storedOffset0New, filling the given docNumOffsetsOut array + for indexOffset := indexOffset0; indexOffset <= indexOffsetN; indexOffset += 8 { + storedOffset := binary.BigEndian.Uint64(s.mem[indexOffset : indexOffset+8]) + storedOffsetNew := storedOffset - storedOffset0 + storedOffset0New + newDocNumOffsets[newDocNum] = storedOffsetNew + newDocNum += 1 + } + + return nil +} + +// mergeFields builds a unified list of fields used across all the +// input segments, and computes whether the fields are the same across +// segments (which depends on fields to be sorted in the same way +// across segments) +func mergeFields(segments []*SegmentBase) (bool, []string) { + fieldsSame := true + + var segment0Fields []string + if len(segments) > 0 { + segment0Fields = segments[0].Fields() + } + + fieldsExist := map[string]struct{}{} + for _, segment := range segments { + fields := segment.Fields() + for fieldi, field := range fields { + fieldsExist[field] = struct{}{} + if len(segment0Fields) != len(fields) || segment0Fields[fieldi] != field { + fieldsSame = false + } + } + } + + rv := make([]string, 0, len(fieldsExist)) + // ensure _id stays first + rv = append(rv, "_id") + for k := range fieldsExist { + if k != "_id" { + rv = append(rv, k) + } + } + + sort.Strings(rv[1:]) // leave _id as first + + return fieldsSame, rv +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/merge_test.go b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/merge_test.go new file mode 100644 index 0000000..d931f6c --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/merge_test.go @@ -0,0 +1,867 @@ +// Copyright (c) 2017 Couchbase, 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 zap + +import ( + "fmt" + "os" + "reflect" + "sort" + "strings" + "testing" + + "github.com/RoaringBitmap/roaring" + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/document" + "github.com/blevesearch/bleve/index" +) + +func TestMerge(t *testing.T) { + _ = os.RemoveAll("/tmp/scorch.zap") + _ = os.RemoveAll("/tmp/scorch2.zap") + _ = os.RemoveAll("/tmp/scorch3.zap") + + testSeg, _ := buildTestSegmentMulti() + err := PersistSegmentBase(testSeg, "/tmp/scorch.zap") + if err != nil { + t.Fatal(err) + } + + testSeg2, _ := buildTestSegmentMulti2() + err = PersistSegmentBase(testSeg2, "/tmp/scorch2.zap") + if err != nil { + t.Fatal(err) + } + + segment, err := Open("/tmp/scorch.zap") + if err != nil { + t.Fatalf("error opening segment: %v", err) + } + defer func() { + cerr := segment.Close() + if cerr != nil { + t.Fatalf("error closing segment: %v", err) + } + }() + + segment2, err := Open("/tmp/scorch2.zap") + if err != nil { + t.Fatalf("error opening segment: %v", err) + } + defer func() { + cerr := segment2.Close() + if cerr != nil { + t.Fatalf("error closing segment: %v", err) + } + }() + + segsToMerge := make([]*Segment, 2) + segsToMerge[0] = segment.(*Segment) + segsToMerge[1] = segment2.(*Segment) + + _, _, err = Merge(segsToMerge, []*roaring.Bitmap{nil, nil}, "/tmp/scorch3.zap", 1024) + if err != nil { + t.Fatal(err) + } + + segm, err := Open("/tmp/scorch3.zap") + if err != nil { + t.Fatalf("error opening merged segment: %v", err) + } + seg3 := segm.(*Segment) + defer func() { + cerr := seg3.Close() + if cerr != nil { + t.Fatalf("error closing segment: %v", err) + } + }() + + if seg3.Path() != "/tmp/scorch3.zap" { + t.Fatalf("wrong path") + } + if seg3.Count() != 4 { + t.Fatalf("wrong count") + } + if len(seg3.Fields()) != 5 { + t.Fatalf("wrong # fields: %#v\n", seg3.Fields()) + } + + testMergeWithSelf(t, seg3, 4) +} + +func TestMergeWithEmptySegment(t *testing.T) { + testMergeWithEmptySegments(t, true, 1) +} + +func TestMergeWithEmptySegments(t *testing.T) { + testMergeWithEmptySegments(t, true, 5) +} + +func TestMergeWithEmptySegmentFirst(t *testing.T) { + testMergeWithEmptySegments(t, false, 1) +} + +func TestMergeWithEmptySegmentsFirst(t *testing.T) { + testMergeWithEmptySegments(t, false, 5) +} + +func testMergeWithEmptySegments(t *testing.T, before bool, numEmptySegments int) { + _ = os.RemoveAll("/tmp/scorch.zap") + + testSeg, _ := buildTestSegmentMulti() + err := PersistSegmentBase(testSeg, "/tmp/scorch.zap") + if err != nil { + t.Fatal(err) + } + segment, err := Open("/tmp/scorch.zap") + if err != nil { + t.Fatalf("error opening segment: %v", err) + } + defer func() { + cerr := segment.Close() + if cerr != nil { + t.Fatalf("error closing segment: %v", err) + } + }() + + var segsToMerge []*Segment + + if before { + segsToMerge = append(segsToMerge, segment.(*Segment)) + } + + for i := 0; i < numEmptySegments; i++ { + fname := fmt.Sprintf("scorch-empty-%d.zap", i) + + _ = os.RemoveAll("/tmp/" + fname) + + emptySegment, _ := AnalysisResultsToSegmentBase([]*index.AnalysisResult{}, 1024) + err = PersistSegmentBase(emptySegment, "/tmp/"+fname) + if err != nil { + t.Fatal(err) + } + + emptyFileSegment, err := Open("/tmp/" + fname) + if err != nil { + t.Fatalf("error opening segment: %v", err) + } + defer func(emptyFileSegment *Segment) { + cerr := emptyFileSegment.Close() + if cerr != nil { + t.Fatalf("error closing segment: %v", err) + } + }(emptyFileSegment.(*Segment)) + + segsToMerge = append(segsToMerge, emptyFileSegment.(*Segment)) + } + + if !before { + segsToMerge = append(segsToMerge, segment.(*Segment)) + } + + _ = os.RemoveAll("/tmp/scorch3.zap") + + drops := make([]*roaring.Bitmap, len(segsToMerge)) + + _, _, err = Merge(segsToMerge, drops, "/tmp/scorch3.zap", 1024) + if err != nil { + t.Fatal(err) + } + + segm, err := Open("/tmp/scorch3.zap") + if err != nil { + t.Fatalf("error opening merged segment: %v", err) + } + segCur := segm.(*Segment) + defer func() { + cerr := segCur.Close() + if cerr != nil { + t.Fatalf("error closing segment: %v", err) + } + }() + + if segCur.Path() != "/tmp/scorch3.zap" { + t.Fatalf("wrong path") + } + if segCur.Count() != 2 { + t.Fatalf("wrong count, numEmptySegments: %d, got count: %d", numEmptySegments, segCur.Count()) + } + if len(segCur.Fields()) != 5 { + t.Fatalf("wrong # fields: %#v\n", segCur.Fields()) + } + + testMergeWithSelf(t, segCur, 2) +} + +func testMergeWithSelf(t *testing.T, segCur *Segment, expectedCount uint64) { + // trying merging the segment with itself for a few rounds + var diffs []string + + for i := 0; i < 10; i++ { + fname := fmt.Sprintf("scorch-self-%d.zap", i) + + _ = os.RemoveAll("/tmp/" + fname) + + segsToMerge := make([]*Segment, 1) + segsToMerge[0] = segCur + + _, _, err := Merge(segsToMerge, []*roaring.Bitmap{nil, nil}, "/tmp/"+fname, 1024) + if err != nil { + t.Fatal(err) + } + + segm, err := Open("/tmp/" + fname) + if err != nil { + t.Fatalf("error opening merged segment: %v", err) + } + segNew := segm.(*Segment) + defer func(s *Segment) { + cerr := s.Close() + if cerr != nil { + t.Fatalf("error closing segment: %v", err) + } + }(segNew) + + if segNew.Count() != expectedCount { + t.Fatalf("wrong count") + } + if len(segNew.Fields()) != 5 { + t.Fatalf("wrong # fields: %#v\n", segNew.Fields()) + } + + diff := compareSegments(segCur, segNew) + if diff != "" { + diffs = append(diffs, fname+" is different than previous:\n"+diff) + } + + segCur = segNew + } + + if len(diffs) > 0 { + t.Errorf("mismatches after repeated self-merging: %v", strings.Join(diffs, "\n")) + } +} + +func compareSegments(a, b *Segment) string { + var rv []string + + if a.Count() != b.Count() { + return "counts" + } + + afields := append([]string(nil), a.Fields()...) + bfields := append([]string(nil), b.Fields()...) + sort.Strings(afields) + sort.Strings(bfields) + if !reflect.DeepEqual(afields, bfields) { + return "fields" + } + + for _, fieldName := range afields { + adict, err := a.Dictionary(fieldName) + if err != nil { + return fmt.Sprintf("adict err: %v", err) + } + bdict, err := b.Dictionary(fieldName) + if err != nil { + return fmt.Sprintf("bdict err: %v", err) + } + + if adict.(*Dictionary).fst.Len() != bdict.(*Dictionary).fst.Len() { + rv = append(rv, fmt.Sprintf("field %s, dict fst Len()'s different: %v %v", + fieldName, adict.(*Dictionary).fst.Len(), bdict.(*Dictionary).fst.Len())) + } + + aitr := adict.Iterator() + bitr := bdict.Iterator() + for { + anext, aerr := aitr.Next() + bnext, berr := bitr.Next() + if aerr != berr { + rv = append(rv, fmt.Sprintf("field %s, dict iterator Next() errors different: %v %v", + fieldName, aerr, berr)) + break + } + if !reflect.DeepEqual(anext, bnext) { + rv = append(rv, fmt.Sprintf("field %s, dict iterator Next() results different: %#v %#v", + fieldName, anext, bnext)) + // keep going to try to see more diff details at the postingsList level + } + if aerr != nil || anext == nil || + berr != nil || bnext == nil { + break + } + + for _, next := range []*index.DictEntry{anext, bnext} { + if next == nil { + continue + } + + aplist, aerr := adict.(*Dictionary).postingsList([]byte(next.Term), nil, nil) + bplist, berr := bdict.(*Dictionary).postingsList([]byte(next.Term), nil, nil) + if aerr != berr { + rv = append(rv, fmt.Sprintf("field %s, term: %s, postingsList() errors different: %v %v", + fieldName, next.Term, aerr, berr)) + } + + if (aplist != nil) != (bplist != nil) { + rv = append(rv, fmt.Sprintf("field %s, term: %s, postingsList() results different: %v %v", + fieldName, next.Term, aplist, bplist)) + break + } + + if aerr != nil || aplist == nil || + berr != nil || bplist == nil { + break + } + + if aplist.Count() != bplist.Count() { + rv = append(rv, fmt.Sprintf("field %s, term: %s, postingsList().Count()'s different: %v %v", + fieldName, next.Term, aplist.Count(), bplist.Count())) + } + + apitr := aplist.Iterator() + bpitr := bplist.Iterator() + if (apitr != nil) != (bpitr != nil) { + rv = append(rv, fmt.Sprintf("field %s, term: %s, postingsList.Iterator() results different: %v %v", + fieldName, next.Term, apitr, bpitr)) + break + } + + for { + apitrn, aerr := apitr.Next() + bpitrn, aerr := bpitr.Next() + if aerr != berr { + rv = append(rv, fmt.Sprintf("field %s, term: %s, postingsListIterator Next() errors different: %v %v", + fieldName, next.Term, aerr, berr)) + } + + if (apitrn != nil) != (bpitrn != nil) { + rv = append(rv, fmt.Sprintf("field %s, term: %s, postingsListIterator Next() results different: %v %v", + fieldName, next.Term, apitrn, bpitrn)) + break + } + + if aerr != nil || apitrn == nil || + berr != nil || bpitrn == nil { + break + } + + if apitrn.Number() != bpitrn.Number() { + rv = append(rv, fmt.Sprintf("field %s, term: %s, postingsListIterator Next() Number()'s different: %v %v", + fieldName, next.Term, apitrn.Number(), bpitrn.Number())) + } + + if apitrn.Frequency() != bpitrn.Frequency() { + rv = append(rv, fmt.Sprintf("field %s, term: %s, postingsListIterator Next() Frequency()'s different: %v %v", + fieldName, next.Term, apitrn.Frequency(), bpitrn.Frequency())) + } + + if apitrn.Norm() != bpitrn.Norm() { + rv = append(rv, fmt.Sprintf("field %s, term: %s, postingsListIterator Next() Norm()'s different: %v %v", + fieldName, next.Term, apitrn.Norm(), bpitrn.Norm())) + } + + if len(apitrn.Locations()) != len(bpitrn.Locations()) { + rv = append(rv, fmt.Sprintf("field %s, term: %s, postingsListIterator Next() Locations() len's different: %v %v", + fieldName, next.Term, len(apitrn.Locations()), len(bpitrn.Locations()))) + } + + for loci, aloc := range apitrn.Locations() { + bloc := bpitrn.Locations()[loci] + + if (aloc != nil) != (bloc != nil) { + rv = append(rv, fmt.Sprintf("field %s, term: %s, postingsListIterator Next() loc different: %v %v", + fieldName, next.Term, aloc, bloc)) + break + } + + if aloc.Field() != bloc.Field() || + aloc.Start() != bloc.Start() || + aloc.End() != bloc.End() || + aloc.Pos() != bloc.Pos() || + !reflect.DeepEqual(aloc.ArrayPositions(), bloc.ArrayPositions()) { + rv = append(rv, fmt.Sprintf("field %s, term: %s, postingsListIterator Next() loc details different: %v %v", + fieldName, next.Term, aloc, bloc)) + } + } + + if fieldName == "_id" { + docId := next.Term + docNumA := apitrn.Number() + docNumB := bpitrn.Number() + afields := map[string]interface{}{} + err = a.VisitDocument(apitrn.Number(), + func(field string, typ byte, value []byte, pos []uint64) bool { + afields[field+"-typ"] = typ + afields[field+"-value"] = value + afields[field+"-pos"] = pos + return true + }) + if err != nil { + rv = append(rv, fmt.Sprintf("a.VisitDocument err: %v", err)) + } + bfields := map[string]interface{}{} + err = b.VisitDocument(bpitrn.Number(), + func(field string, typ byte, value []byte, pos []uint64) bool { + bfields[field+"-typ"] = typ + bfields[field+"-value"] = value + bfields[field+"-pos"] = pos + return true + }) + if err != nil { + rv = append(rv, fmt.Sprintf("b.VisitDocument err: %v", err)) + } + if !reflect.DeepEqual(afields, bfields) { + rv = append(rv, fmt.Sprintf("afields != bfields,"+ + " id: %s, docNumA: %d, docNumB: %d,"+ + " afields: %#v, bfields: %#v", + docId, docNumA, docNumB, afields, bfields)) + } + } + } + } + } + } + + return strings.Join(rv, "\n") +} + +func TestMergeAndDrop(t *testing.T) { + docsToDrop := make([]*roaring.Bitmap, 2) + docsToDrop[0] = roaring.NewBitmap() + docsToDrop[0].AddInt(1) + docsToDrop[1] = roaring.NewBitmap() + docsToDrop[1].AddInt(1) + testMergeAndDrop(t, docsToDrop) +} + +func TestMergeAndDropAllFromOneSegment(t *testing.T) { + docsToDrop := make([]*roaring.Bitmap, 2) + docsToDrop[0] = roaring.NewBitmap() + docsToDrop[0].AddInt(0) + docsToDrop[0].AddInt(1) + docsToDrop[1] = roaring.NewBitmap() + testMergeAndDrop(t, docsToDrop) +} + +func testMergeAndDrop(t *testing.T, docsToDrop []*roaring.Bitmap) { + _ = os.RemoveAll("/tmp/scorch.zap") + _ = os.RemoveAll("/tmp/scorch2.zap") + + testSeg, _ := buildTestSegmentMulti() + err := PersistSegmentBase(testSeg, "/tmp/scorch.zap") + if err != nil { + t.Fatal(err) + } + segment, err := Open("/tmp/scorch.zap") + if err != nil { + t.Fatalf("error opening segment: %v", err) + } + defer func() { + cerr := segment.Close() + if cerr != nil { + t.Fatalf("error closing segment: %v", err) + } + }() + + testSeg2, _ := buildTestSegmentMulti2() + err = PersistSegmentBase(testSeg2, "/tmp/scorch2.zap") + if err != nil { + t.Fatal(err) + } + + segment2, err := Open("/tmp/scorch2.zap") + if err != nil { + t.Fatalf("error opening segment: %v", err) + } + defer func() { + cerr := segment2.Close() + if cerr != nil { + t.Fatalf("error closing segment: %v", err) + } + }() + + segsToMerge := make([]*Segment, 2) + segsToMerge[0] = segment.(*Segment) + segsToMerge[1] = segment2.(*Segment) + + testMergeAndDropSegments(t, segsToMerge, docsToDrop, 2) +} + +func TestMergeWithUpdates(t *testing.T) { + segmentDocIds := [][]string{ + []string{"a", "b"}, + []string{"b", "c"}, // doc "b" updated + } + + docsToDrop := make([]*roaring.Bitmap, 2) + docsToDrop[0] = roaring.NewBitmap() + docsToDrop[0].AddInt(1) // doc "b" updated + docsToDrop[1] = roaring.NewBitmap() + + testMergeWithUpdates(t, segmentDocIds, docsToDrop, 3) +} + +func TestMergeWithUpdatesOnManySegments(t *testing.T) { + segmentDocIds := [][]string{ + []string{"a", "b"}, + []string{"b", "c"}, // doc "b" updated + []string{"c", "d"}, // doc "c" updated + []string{"d", "e"}, // doc "d" updated + } + + docsToDrop := make([]*roaring.Bitmap, 4) + docsToDrop[0] = roaring.NewBitmap() + docsToDrop[0].AddInt(1) // doc "b" updated + docsToDrop[1] = roaring.NewBitmap() + docsToDrop[1].AddInt(1) // doc "c" updated + docsToDrop[2] = roaring.NewBitmap() + docsToDrop[2].AddInt(1) // doc "d" updated + docsToDrop[3] = roaring.NewBitmap() + + testMergeWithUpdates(t, segmentDocIds, docsToDrop, 5) +} + +func TestMergeWithUpdatesOnOneDoc(t *testing.T) { + segmentDocIds := [][]string{ + []string{"a", "b"}, + []string{"a", "c"}, // doc "a" updated + []string{"a", "d"}, // doc "a" updated + []string{"a", "e"}, // doc "a" updated + } + + docsToDrop := make([]*roaring.Bitmap, 4) + docsToDrop[0] = roaring.NewBitmap() + docsToDrop[0].AddInt(0) // doc "a" updated + docsToDrop[1] = roaring.NewBitmap() + docsToDrop[1].AddInt(0) // doc "a" updated + docsToDrop[2] = roaring.NewBitmap() + docsToDrop[2].AddInt(0) // doc "a" updated + docsToDrop[3] = roaring.NewBitmap() + + testMergeWithUpdates(t, segmentDocIds, docsToDrop, 5) +} + +func testMergeWithUpdates(t *testing.T, segmentDocIds [][]string, docsToDrop []*roaring.Bitmap, expectedNumDocs uint64) { + var segsToMerge []*Segment + + // convert segmentDocIds to segsToMerge + for i, docIds := range segmentDocIds { + fname := fmt.Sprintf("scorch%d.zap", i) + + _ = os.RemoveAll("/tmp/" + fname) + + testSeg, _ := buildTestSegmentMultiHelper(docIds) + err := PersistSegmentBase(testSeg, "/tmp/"+fname) + if err != nil { + t.Fatal(err) + } + segment, err := Open("/tmp/" + fname) + if err != nil { + t.Fatalf("error opening segment: %v", err) + } + defer func(segment *Segment) { + cerr := segment.Close() + if cerr != nil { + t.Fatalf("error closing segment: %v", err) + } + }(segment.(*Segment)) + + segsToMerge = append(segsToMerge, segment.(*Segment)) + } + + testMergeAndDropSegments(t, segsToMerge, docsToDrop, expectedNumDocs) +} + +func testMergeAndDropSegments(t *testing.T, segsToMerge []*Segment, docsToDrop []*roaring.Bitmap, expectedNumDocs uint64) { + _ = os.RemoveAll("/tmp/scorch-merged.zap") + + _, _, err := Merge(segsToMerge, docsToDrop, "/tmp/scorch-merged.zap", 1024) + if err != nil { + t.Fatal(err) + } + + segm, err := Open("/tmp/scorch-merged.zap") + if err != nil { + t.Fatalf("error opening merged segment: %v", err) + } + defer func() { + cerr := segm.Close() + if cerr != nil { + t.Fatalf("error closing segment: %v", err) + } + }() + + if segm.Count() != expectedNumDocs { + t.Fatalf("wrong count, got: %d, wanted: %d", segm.Count(), expectedNumDocs) + } + if len(segm.Fields()) != 5 { + t.Fatalf("wrong # fields: %#v\n", segm.Fields()) + } + + testMergeWithSelf(t, segm.(*Segment), expectedNumDocs) +} + +func buildTestSegmentMulti2() (*SegmentBase, error) { + return buildTestSegmentMultiHelper([]string{"c", "d"}) +} + +func buildTestSegmentMultiHelper(docIds []string) (*SegmentBase, error) { + doc := &document.Document{ + ID: "c", + Fields: []document.Field{ + document.NewTextFieldCustom("_id", nil, []byte(docIds[0]), document.IndexField|document.StoreField, nil), + document.NewTextFieldCustom("name", nil, []byte("mat"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + document.NewTextFieldCustom("desc", nil, []byte("some thing"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + document.NewTextFieldCustom("tag", []uint64{0}, []byte("cold"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + document.NewTextFieldCustom("tag", []uint64{1}, []byte("dark"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + }, + CompositeFields: []*document.CompositeField{ + document.NewCompositeField("_all", true, nil, []string{"_id"}), + }, + } + + doc2 := &document.Document{ + ID: "d", + Fields: []document.Field{ + document.NewTextFieldCustom("_id", nil, []byte(docIds[1]), document.IndexField|document.StoreField, nil), + document.NewTextFieldCustom("name", nil, []byte("joa"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + document.NewTextFieldCustom("desc", nil, []byte("some thing"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + document.NewTextFieldCustom("tag", []uint64{0}, []byte("cold"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + document.NewTextFieldCustom("tag", []uint64{1}, []byte("dark"), document.IndexField|document.StoreField|document.IncludeTermVectors, nil), + }, + CompositeFields: []*document.CompositeField{ + document.NewCompositeField("_all", true, nil, []string{"_id"}), + }, + } + + // forge analyzed docs + results := []*index.AnalysisResult{ + &index.AnalysisResult{ + Document: doc, + Analyzed: []analysis.TokenFrequencies{ + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 1, + Position: 1, + Term: []byte(docIds[0]), + }, + }, nil, false), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 3, + Position: 1, + Term: []byte("mat"), + }, + }, nil, true), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 4, + Position: 1, + Term: []byte("some"), + }, + &analysis.Token{ + Start: 5, + End: 10, + Position: 2, + Term: []byte("thing"), + }, + }, nil, true), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 4, + Position: 1, + Term: []byte("cold"), + }, + }, []uint64{0}, true), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 4, + Position: 1, + Term: []byte("dark"), + }, + }, []uint64{1}, true), + }, + Length: []int{ + 1, + 1, + 2, + 1, + 1, + }, + }, + &index.AnalysisResult{ + Document: doc2, + Analyzed: []analysis.TokenFrequencies{ + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 1, + Position: 1, + Term: []byte(docIds[1]), + }, + }, nil, false), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 3, + Position: 1, + Term: []byte("joa"), + }, + }, nil, true), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 4, + Position: 1, + Term: []byte("some"), + }, + &analysis.Token{ + Start: 5, + End: 10, + Position: 2, + Term: []byte("thing"), + }, + }, nil, true), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 4, + Position: 1, + Term: []byte("cold"), + }, + }, []uint64{0}, true), + analysis.TokenFrequency(analysis.TokenStream{ + &analysis.Token{ + Start: 0, + End: 4, + Position: 1, + Term: []byte("dark"), + }, + }, []uint64{1}, true), + }, + Length: []int{ + 1, + 1, + 2, + 1, + 1, + }, + }, + } + + // fix up composite fields + for _, ar := range results { + for i, f := range ar.Document.Fields { + for _, cf := range ar.Document.CompositeFields { + cf.Compose(f.Name(), ar.Length[i], ar.Analyzed[i]) + } + } + } + + return AnalysisResultsToSegmentBase(results, 1024) +} + +func TestMergeBytesWritten(t *testing.T) { + _ = os.RemoveAll("/tmp/scorch.zap") + _ = os.RemoveAll("/tmp/scorch2.zap") + _ = os.RemoveAll("/tmp/scorch3.zap") + + testSeg, _ := buildTestSegmentMulti() + err := PersistSegmentBase(testSeg, "/tmp/scorch.zap") + if err != nil { + t.Fatal(err) + } + + testSeg2, _ := buildTestSegmentMulti2() + err = PersistSegmentBase(testSeg2, "/tmp/scorch2.zap") + if err != nil { + t.Fatal(err) + } + + segment, err := Open("/tmp/scorch.zap") + if err != nil { + t.Fatalf("error opening segment: %v", err) + } + defer func() { + cerr := segment.Close() + if cerr != nil { + t.Fatalf("error closing segment: %v", err) + } + }() + + segment2, err := Open("/tmp/scorch2.zap") + if err != nil { + t.Fatalf("error opening segment: %v", err) + } + defer func() { + cerr := segment2.Close() + if cerr != nil { + t.Fatalf("error closing segment: %v", err) + } + }() + + segsToMerge := make([]*Segment, 2) + segsToMerge[0] = segment.(*Segment) + segsToMerge[1] = segment2.(*Segment) + + _, nBytes, err := Merge(segsToMerge, []*roaring.Bitmap{nil, nil}, "/tmp/scorch3.zap", 1024) + if err != nil { + t.Fatal(err) + } + + if nBytes == 0 { + t.Fatalf("expected a non zero total_compaction_written_bytes") + } + + segm, err := Open("/tmp/scorch3.zap") + if err != nil { + t.Fatalf("error opening merged segment: %v", err) + } + seg3 := segm.(*Segment) + defer func() { + cerr := seg3.Close() + if cerr != nil { + t.Fatalf("error closing segment: %v", err) + } + }() + + if seg3.Path() != "/tmp/scorch3.zap" { + t.Fatalf("wrong path") + } + if seg3.Count() != 4 { + t.Fatalf("wrong count") + } + if len(seg3.Fields()) != 5 { + t.Fatalf("wrong # fields: %#v\n", seg3.Fields()) + } + + testMergeWithSelf(t, seg3, 4) +} + +func TestUnder32Bits(t *testing.T) { + if !under32Bits(0) || !under32Bits(uint64(0x7fffffff)) { + t.Errorf("under32Bits bad") + } + if under32Bits(uint64(0x80000000)) || under32Bits(uint64(0x80000001)) { + t.Errorf("under32Bits wrong") + } +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/new.go b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/new.go new file mode 100644 index 0000000..7d09834 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/new.go @@ -0,0 +1,785 @@ +// Copyright (c) 2018 Couchbase, 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 zap + +import ( + "bytes" + "encoding/binary" + "math" + "sort" + "sync" + + "github.com/RoaringBitmap/roaring" + "github.com/Smerity/govarint" + "github.com/blevesearch/bleve/analysis" + "github.com/blevesearch/bleve/document" + "github.com/blevesearch/bleve/index" + "github.com/couchbase/vellum" + "github.com/golang/snappy" +) + +// AnalysisResultsToSegmentBase produces an in-memory zap-encoded +// SegmentBase from analysis results +func AnalysisResultsToSegmentBase(results []*index.AnalysisResult, + chunkFactor uint32) (*SegmentBase, error) { + s := interimPool.Get().(*interim) + + var br bytes.Buffer + if s.lastNumDocs > 0 { + // use previous results to initialize the buf with an estimate + // size, but note that the interim instance comes from a + // global interimPool, so multiple scorch instances indexing + // different docs can lead to low quality estimates + avgBytesPerDoc := s.lastOutSize / s.lastNumDocs + br.Grow(avgBytesPerDoc * (len(results) + 1)) + } + + s.results = results + s.chunkFactor = chunkFactor + s.w = NewCountHashWriter(&br) + + storedIndexOffset, fieldsIndexOffset, fdvIndexOffset, dictOffsets, + err := s.convert() + if err != nil { + return nil, err + } + + sb, err := InitSegmentBase(br.Bytes(), s.w.Sum32(), chunkFactor, + s.FieldsMap, s.FieldsInv, uint64(len(results)), + storedIndexOffset, fieldsIndexOffset, fdvIndexOffset, dictOffsets) + + if err == nil && s.reset() == nil { + s.lastNumDocs = len(results) + s.lastOutSize = len(br.Bytes()) + interimPool.Put(s) + } + + return sb, err +} + +var interimPool = sync.Pool{New: func() interface{} { return &interim{} }} + +// interim holds temporary working data used while converting from +// analysis results to a zap-encoded segment +type interim struct { + results []*index.AnalysisResult + + chunkFactor uint32 + + w *CountHashWriter + + // FieldsMap adds 1 to field id to avoid zero value issues + // name -> field id + 1 + FieldsMap map[string]uint16 + + // FieldsInv is the inverse of FieldsMap + // field id -> name + FieldsInv []string + + // Term dictionaries for each field + // field id -> term -> postings list id + 1 + Dicts []map[string]uint64 + + // Terms for each field, where terms are sorted ascending + // field id -> []term + DictKeys [][]string + + // Fields whose IncludeDocValues is true + // field id -> bool + IncludeDocValues []bool + + // postings id -> bitmap of docNums + Postings []*roaring.Bitmap + + // postings id -> bitmap of docNums that have locations + PostingsLocs []*roaring.Bitmap + + // postings id -> freq/norm's, one for each docNum in postings + FreqNorms [][]interimFreqNorm + freqNormsBacking []interimFreqNorm + + // postings id -> locs, one for each freq + Locs [][]interimLoc + locsBacking []interimLoc + + numTermsPerPostingsList []int // key is postings list id + numLocsPerPostingsList []int // key is postings list id + + builder *vellum.Builder + builderBuf bytes.Buffer + + metaBuf bytes.Buffer + + tmp0 []byte + tmp1 []byte + + lastNumDocs int + lastOutSize int +} + +func (s *interim) reset() (err error) { + s.results = nil + s.chunkFactor = 0 + s.w = nil + s.FieldsMap = nil + s.FieldsInv = nil + for i := range s.Dicts { + s.Dicts[i] = nil + } + s.Dicts = s.Dicts[:0] + for i := range s.DictKeys { + s.DictKeys[i] = s.DictKeys[i][:0] + } + s.DictKeys = s.DictKeys[:0] + for i := range s.IncludeDocValues { + s.IncludeDocValues[i] = false + } + s.IncludeDocValues = s.IncludeDocValues[:0] + for _, idn := range s.Postings { + idn.Clear() + } + s.Postings = s.Postings[:0] + for _, idn := range s.PostingsLocs { + idn.Clear() + } + s.PostingsLocs = s.PostingsLocs[:0] + s.FreqNorms = s.FreqNorms[:0] + for i := range s.freqNormsBacking { + s.freqNormsBacking[i] = interimFreqNorm{} + } + s.freqNormsBacking = s.freqNormsBacking[:0] + s.Locs = s.Locs[:0] + for i := range s.locsBacking { + s.locsBacking[i] = interimLoc{} + } + s.locsBacking = s.locsBacking[:0] + s.numTermsPerPostingsList = s.numTermsPerPostingsList[:0] + s.numLocsPerPostingsList = s.numLocsPerPostingsList[:0] + s.builderBuf.Reset() + if s.builder != nil { + err = s.builder.Reset(&s.builderBuf) + } + s.metaBuf.Reset() + s.tmp0 = s.tmp0[:0] + s.tmp1 = s.tmp1[:0] + s.lastNumDocs = 0 + s.lastOutSize = 0 + + return err +} + +func (s *interim) grabBuf(size int) []byte { + buf := s.tmp0 + if cap(buf) < size { + buf = make([]byte, size) + s.tmp0 = buf + } + return buf[0:size] +} + +type interimStoredField struct { + vals [][]byte + typs []byte + arrayposs [][]uint64 // array positions +} + +type interimFreqNorm struct { + freq uint64 + norm float32 +} + +type interimLoc struct { + fieldID uint16 + pos uint64 + start uint64 + end uint64 + arrayposs []uint64 +} + +func (s *interim) convert() (uint64, uint64, uint64, []uint64, error) { + s.FieldsMap = map[string]uint16{} + + s.getOrDefineField("_id") // _id field is fieldID 0 + + for _, result := range s.results { + for _, field := range result.Document.CompositeFields { + s.getOrDefineField(field.Name()) + } + for _, field := range result.Document.Fields { + s.getOrDefineField(field.Name()) + } + } + + sort.Strings(s.FieldsInv[1:]) // keep _id as first field + + for fieldID, fieldName := range s.FieldsInv { + s.FieldsMap[fieldName] = uint16(fieldID + 1) + } + + if cap(s.IncludeDocValues) >= len(s.FieldsInv) { + s.IncludeDocValues = s.IncludeDocValues[:len(s.FieldsInv)] + } else { + s.IncludeDocValues = make([]bool, len(s.FieldsInv)) + } + + s.prepareDicts() + + for _, dict := range s.DictKeys { + sort.Strings(dict) + } + + s.processDocuments() + + storedIndexOffset, err := s.writeStoredFields() + if err != nil { + return 0, 0, 0, nil, err + } + + var fdvIndexOffset uint64 + var dictOffsets []uint64 + + if len(s.results) > 0 { + fdvIndexOffset, dictOffsets, err = s.writeDicts() + if err != nil { + return 0, 0, 0, nil, err + } + } else { + dictOffsets = make([]uint64, len(s.FieldsInv)) + } + + fieldsIndexOffset, err := persistFields(s.FieldsInv, s.w, dictOffsets) + if err != nil { + return 0, 0, 0, nil, err + } + + return storedIndexOffset, fieldsIndexOffset, fdvIndexOffset, dictOffsets, nil +} + +func (s *interim) getOrDefineField(fieldName string) int { + fieldIDPlus1, exists := s.FieldsMap[fieldName] + if !exists { + fieldIDPlus1 = uint16(len(s.FieldsInv) + 1) + s.FieldsMap[fieldName] = fieldIDPlus1 + s.FieldsInv = append(s.FieldsInv, fieldName) + + s.Dicts = append(s.Dicts, make(map[string]uint64)) + + n := len(s.DictKeys) + if n < cap(s.DictKeys) { + s.DictKeys = s.DictKeys[:n+1] + s.DictKeys[n] = s.DictKeys[n][:0] + } else { + s.DictKeys = append(s.DictKeys, []string(nil)) + } + } + + return int(fieldIDPlus1 - 1) +} + +// fill Dicts and DictKeys from analysis results +func (s *interim) prepareDicts() { + var pidNext int + + var totTFs int + var totLocs int + + visitField := func(fieldID uint16, tfs analysis.TokenFrequencies) { + dict := s.Dicts[fieldID] + dictKeys := s.DictKeys[fieldID] + + for term, tf := range tfs { + pidPlus1, exists := dict[term] + if !exists { + pidNext++ + pidPlus1 = uint64(pidNext) + + dict[term] = pidPlus1 + dictKeys = append(dictKeys, term) + + s.numTermsPerPostingsList = append(s.numTermsPerPostingsList, 0) + s.numLocsPerPostingsList = append(s.numLocsPerPostingsList, 0) + } + + pid := pidPlus1 - 1 + + s.numTermsPerPostingsList[pid] += 1 + s.numLocsPerPostingsList[pid] += len(tf.Locations) + + totLocs += len(tf.Locations) + } + + totTFs += len(tfs) + + s.DictKeys[fieldID] = dictKeys + } + + for _, result := range s.results { + // walk each composite field + for _, field := range result.Document.CompositeFields { + fieldID := uint16(s.getOrDefineField(field.Name())) + _, tf := field.Analyze() + visitField(fieldID, tf) + } + + // walk each field + for i, field := range result.Document.Fields { + fieldID := uint16(s.getOrDefineField(field.Name())) + tf := result.Analyzed[i] + visitField(fieldID, tf) + } + } + + numPostingsLists := pidNext + + if cap(s.Postings) >= numPostingsLists { + s.Postings = s.Postings[:numPostingsLists] + } else { + postings := make([]*roaring.Bitmap, numPostingsLists) + copy(postings, s.Postings[:cap(s.Postings)]) + for i := 0; i < numPostingsLists; i++ { + if postings[i] == nil { + postings[i] = roaring.New() + } + } + s.Postings = postings + } + + if cap(s.PostingsLocs) >= numPostingsLists { + s.PostingsLocs = s.PostingsLocs[:numPostingsLists] + } else { + postingsLocs := make([]*roaring.Bitmap, numPostingsLists) + copy(postingsLocs, s.PostingsLocs[:cap(s.PostingsLocs)]) + for i := 0; i < numPostingsLists; i++ { + if postingsLocs[i] == nil { + postingsLocs[i] = roaring.New() + } + } + s.PostingsLocs = postingsLocs + } + + if cap(s.FreqNorms) >= numPostingsLists { + s.FreqNorms = s.FreqNorms[:numPostingsLists] + } else { + s.FreqNorms = make([][]interimFreqNorm, numPostingsLists) + } + + if cap(s.freqNormsBacking) >= totTFs { + s.freqNormsBacking = s.freqNormsBacking[:totTFs] + } else { + s.freqNormsBacking = make([]interimFreqNorm, totTFs) + } + + freqNormsBacking := s.freqNormsBacking + for pid, numTerms := range s.numTermsPerPostingsList { + s.FreqNorms[pid] = freqNormsBacking[0:0] + freqNormsBacking = freqNormsBacking[numTerms:] + } + + if cap(s.Locs) >= numPostingsLists { + s.Locs = s.Locs[:numPostingsLists] + } else { + s.Locs = make([][]interimLoc, numPostingsLists) + } + + if cap(s.locsBacking) >= totLocs { + s.locsBacking = s.locsBacking[:totLocs] + } else { + s.locsBacking = make([]interimLoc, totLocs) + } + + locsBacking := s.locsBacking + for pid, numLocs := range s.numLocsPerPostingsList { + s.Locs[pid] = locsBacking[0:0] + locsBacking = locsBacking[numLocs:] + } +} + +func (s *interim) processDocuments() { + numFields := len(s.FieldsInv) + reuseFieldLens := make([]int, numFields) + reuseFieldTFs := make([]analysis.TokenFrequencies, numFields) + + for docNum, result := range s.results { + for i := 0; i < numFields; i++ { // clear these for reuse + reuseFieldLens[i] = 0 + reuseFieldTFs[i] = nil + } + + s.processDocument(uint64(docNum), result, + reuseFieldLens, reuseFieldTFs) + } +} + +func (s *interim) processDocument(docNum uint64, + result *index.AnalysisResult, + fieldLens []int, fieldTFs []analysis.TokenFrequencies) { + visitField := func(fieldID uint16, fieldName string, + ln int, tf analysis.TokenFrequencies) { + fieldLens[fieldID] += ln + + existingFreqs := fieldTFs[fieldID] + if existingFreqs != nil { + existingFreqs.MergeAll(fieldName, tf) + } else { + fieldTFs[fieldID] = tf + } + } + + // walk each composite field + for _, field := range result.Document.CompositeFields { + fieldID := uint16(s.getOrDefineField(field.Name())) + ln, tf := field.Analyze() + visitField(fieldID, field.Name(), ln, tf) + } + + // walk each field + for i, field := range result.Document.Fields { + fieldID := uint16(s.getOrDefineField(field.Name())) + ln := result.Length[i] + tf := result.Analyzed[i] + visitField(fieldID, field.Name(), ln, tf) + } + + // now that it's been rolled up into fieldTFs, walk that + for fieldID, tfs := range fieldTFs { + dict := s.Dicts[fieldID] + norm := float32(1.0 / math.Sqrt(float64(fieldLens[fieldID]))) + + for term, tf := range tfs { + pid := dict[term] - 1 + bs := s.Postings[pid] + bs.Add(uint32(docNum)) + + s.FreqNorms[pid] = append(s.FreqNorms[pid], + interimFreqNorm{ + freq: uint64(tf.Frequency()), + norm: norm, + }) + + if len(tf.Locations) > 0 { + locBS := s.PostingsLocs[pid] + locBS.Add(uint32(docNum)) + + locs := s.Locs[pid] + + for _, loc := range tf.Locations { + var locf = uint16(fieldID) + if loc.Field != "" { + locf = uint16(s.getOrDefineField(loc.Field)) + } + var arrayposs []uint64 + if len(loc.ArrayPositions) > 0 { + arrayposs = loc.ArrayPositions + } + locs = append(locs, interimLoc{ + fieldID: locf, + pos: uint64(loc.Position), + start: uint64(loc.Start), + end: uint64(loc.End), + arrayposs: arrayposs, + }) + } + + s.Locs[pid] = locs + } + } + } +} + +func (s *interim) writeStoredFields() ( + storedIndexOffset uint64, err error) { + metaEncoder := govarint.NewU64Base128Encoder(&s.metaBuf) + + data, compressed := s.tmp0[:0], s.tmp1[:0] + defer func() { s.tmp0, s.tmp1 = data, compressed }() + + // keyed by docNum + docStoredOffsets := make([]uint64, len(s.results)) + + // keyed by fieldID, for the current doc in the loop + docStoredFields := map[uint16]interimStoredField{} + + for docNum, result := range s.results { + for fieldID := range docStoredFields { // reset for next doc + delete(docStoredFields, fieldID) + } + + for _, field := range result.Document.Fields { + fieldID := uint16(s.getOrDefineField(field.Name())) + + opts := field.Options() + + if opts.IsStored() { + isf := docStoredFields[fieldID] + isf.vals = append(isf.vals, field.Value()) + isf.typs = append(isf.typs, encodeFieldType(field)) + isf.arrayposs = append(isf.arrayposs, field.ArrayPositions()) + docStoredFields[fieldID] = isf + } + + if opts.IncludeDocValues() { + s.IncludeDocValues[fieldID] = true + } + } + + var curr int + + s.metaBuf.Reset() + data = data[:0] + compressed = compressed[:0] + + for fieldID := range s.FieldsInv { + isf, exists := docStoredFields[uint16(fieldID)] + if exists { + curr, data, err = persistStoredFieldValues( + fieldID, isf.vals, isf.typs, isf.arrayposs, + curr, metaEncoder, data) + if err != nil { + return 0, err + } + } + } + + metaEncoder.Close() + metaBytes := s.metaBuf.Bytes() + + compressed = snappy.Encode(compressed, data) + + docStoredOffsets[docNum] = uint64(s.w.Count()) + + _, err := writeUvarints(s.w, + uint64(len(metaBytes)), + uint64(len(compressed))) + if err != nil { + return 0, err + } + + _, err = s.w.Write(metaBytes) + if err != nil { + return 0, err + } + + _, err = s.w.Write(compressed) + if err != nil { + return 0, err + } + } + + storedIndexOffset = uint64(s.w.Count()) + + for _, docStoredOffset := range docStoredOffsets { + err = binary.Write(s.w, binary.BigEndian, docStoredOffset) + if err != nil { + return 0, err + } + } + + return storedIndexOffset, nil +} + +func (s *interim) writeDicts() (fdvIndexOffset uint64, dictOffsets []uint64, err error) { + dictOffsets = make([]uint64, len(s.FieldsInv)) + + fdvOffsets := make([]uint64, len(s.FieldsInv)) + + buf := s.grabBuf(binary.MaxVarintLen64) + + tfEncoder := newChunkedIntCoder(uint64(s.chunkFactor), uint64(len(s.results)-1)) + locEncoder := newChunkedIntCoder(uint64(s.chunkFactor), uint64(len(s.results)-1)) + fdvEncoder := newChunkedContentCoder(uint64(s.chunkFactor), uint64(len(s.results)-1)) + + var docTermMap [][]byte + + if s.builder == nil { + s.builder, err = vellum.New(&s.builderBuf, nil) + if err != nil { + return 0, nil, err + } + } + + for fieldID, terms := range s.DictKeys { + if cap(docTermMap) < len(s.results) { + docTermMap = make([][]byte, len(s.results)) + } else { + docTermMap = docTermMap[0:len(s.results)] + for docNum := range docTermMap { // reset the docTermMap + docTermMap[docNum] = docTermMap[docNum][:0] + } + } + + dict := s.Dicts[fieldID] + + for _, term := range terms { // terms are already sorted + pid := dict[term] - 1 + + postingsBS := s.Postings[pid] + postingsLocsBS := s.PostingsLocs[pid] + + freqNorms := s.FreqNorms[pid] + freqNormOffset := 0 + + locs := s.Locs[pid] + locOffset := 0 + + postingsItr := postingsBS.Iterator() + for postingsItr.HasNext() { + docNum := uint64(postingsItr.Next()) + + freqNorm := freqNorms[freqNormOffset] + + err = tfEncoder.Add(docNum, freqNorm.freq, + uint64(math.Float32bits(freqNorm.norm))) + if err != nil { + return 0, nil, err + } + + for i := uint64(0); i < freqNorm.freq; i++ { + if len(locs) > 0 { + loc := locs[locOffset] + + err = locEncoder.Add(docNum, uint64(loc.fieldID), + loc.pos, loc.start, loc.end, + uint64(len(loc.arrayposs))) + if err != nil { + return 0, nil, err + } + + err = locEncoder.Add(docNum, loc.arrayposs...) + if err != nil { + return 0, nil, err + } + } + + locOffset++ + } + + freqNormOffset++ + + docTermMap[docNum] = append( + append(docTermMap[docNum], term...), + termSeparator) + } + + tfEncoder.Close() + locEncoder.Close() + + postingsOffset, err := writePostings( + postingsBS, postingsLocsBS, tfEncoder, locEncoder, + nil, s.w, buf) + if err != nil { + return 0, nil, err + } + + if postingsOffset > uint64(0) { + err = s.builder.Insert([]byte(term), postingsOffset) + if err != nil { + return 0, nil, err + } + } + + tfEncoder.Reset() + locEncoder.Reset() + } + + err = s.builder.Close() + if err != nil { + return 0, nil, err + } + + // record where this dictionary starts + dictOffsets[fieldID] = uint64(s.w.Count()) + + vellumData := s.builderBuf.Bytes() + + // write out the length of the vellum data + n := binary.PutUvarint(buf, uint64(len(vellumData))) + _, err = s.w.Write(buf[:n]) + if err != nil { + return 0, nil, err + } + + // write this vellum to disk + _, err = s.w.Write(vellumData) + if err != nil { + return 0, nil, err + } + + // reset vellum for reuse + s.builderBuf.Reset() + + err = s.builder.Reset(&s.builderBuf) + if err != nil { + return 0, nil, err + } + + // write the field doc values + if s.IncludeDocValues[fieldID] { + for docNum, docTerms := range docTermMap { + if len(docTerms) > 0 { + err = fdvEncoder.Add(uint64(docNum), docTerms) + if err != nil { + return 0, nil, err + } + } + } + err = fdvEncoder.Close() + if err != nil { + return 0, nil, err + } + + fdvOffsets[fieldID] = uint64(s.w.Count()) + + _, err = fdvEncoder.Write(s.w) + if err != nil { + return 0, nil, err + } + + fdvEncoder.Reset() + } else { + fdvOffsets[fieldID] = fieldNotUninverted + } + } + + fdvIndexOffset = uint64(s.w.Count()) + + for _, fdvOffset := range fdvOffsets { + n := binary.PutUvarint(buf, fdvOffset) + _, err := s.w.Write(buf[:n]) + if err != nil { + return 0, nil, err + } + } + + return fdvIndexOffset, dictOffsets, nil +} + +func encodeFieldType(f document.Field) byte { + fieldType := byte('x') + switch f.(type) { + case *document.TextField: + fieldType = 't' + case *document.NumericField: + fieldType = 'n' + case *document.DateTimeField: + fieldType = 'd' + case *document.BooleanField: + fieldType = 'b' + case *document.GeoPointField: + fieldType = 'g' + case *document.CompositeField: + fieldType = 'c' + } + return fieldType +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/posting.go b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/posting.go new file mode 100644 index 0000000..f5ccad1 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/posting.go @@ -0,0 +1,704 @@ +// Copyright (c) 2017 Couchbase, 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 zap + +import ( + "bytes" + "encoding/binary" + "fmt" + "math" + "reflect" + + "github.com/RoaringBitmap/roaring" + "github.com/Smerity/govarint" + "github.com/blevesearch/bleve/index/scorch/segment" + "github.com/blevesearch/bleve/size" +) + +var reflectStaticSizePostingsList int +var reflectStaticSizePostingsIterator int +var reflectStaticSizePosting int +var reflectStaticSizeLocation int + +func init() { + var pl PostingsList + reflectStaticSizePostingsList = int(reflect.TypeOf(pl).Size()) + var pi PostingsIterator + reflectStaticSizePostingsIterator = int(reflect.TypeOf(pi).Size()) + var p Posting + reflectStaticSizePosting = int(reflect.TypeOf(p).Size()) + var l Location + reflectStaticSizeLocation = int(reflect.TypeOf(l).Size()) +} + +// FST or vellum value (uint64) encoding is determined by the top two +// highest-order or most significant bits... +// +// encoding : MSB +// name : 63 62 61...to...bit #0 (LSB) +// ----------+---+---+--------------------------------------------------- +// general : 0 | 0 | 62-bits of postingsOffset. +// ~ : 0 | 1 | reserved for future. +// 1-hit : 1 | 0 | 31-bits of positive float31 norm | 31-bits docNum. +// ~ : 1 | 1 | reserved for future. +// +// Encoding "general" is able to handle all cases, where the +// postingsOffset points to more information about the postings for +// the term. +// +// Encoding "1-hit" is used to optimize a commonly seen case when a +// term has only a single hit. For example, a term in the _id field +// will have only 1 hit. The "1-hit" encoding is used for a term +// in a field when... +// +// - term vector info is disabled for that field; +// - and, the term appears in only a single doc for that field; +// - and, the term's freq is exactly 1 in that single doc for that field; +// - and, the docNum must fit into 31-bits; +// +// Otherwise, the "general" encoding is used instead. +// +// In the "1-hit" encoding, the field in that single doc may have +// other terms, which is supported in the "1-hit" encoding by the +// positive float31 norm. + +const FSTValEncodingMask = uint64(0xc000000000000000) +const FSTValEncodingGeneral = uint64(0x0000000000000000) +const FSTValEncoding1Hit = uint64(0x8000000000000000) + +func FSTValEncode1Hit(docNum uint64, normBits uint64) uint64 { + return FSTValEncoding1Hit | ((mask31Bits & normBits) << 31) | (mask31Bits & docNum) +} + +func FSTValDecode1Hit(v uint64) (docNum uint64, normBits uint64) { + return (mask31Bits & v), (mask31Bits & (v >> 31)) +} + +const mask31Bits = uint64(0x000000007fffffff) + +func under32Bits(x uint64) bool { + return x <= mask31Bits +} + +const docNum1HitFinished = math.MaxUint64 + +// PostingsList is an in-memory represenation of a postings list +type PostingsList struct { + sb *SegmentBase + postingsOffset uint64 + freqOffset uint64 + locOffset uint64 + locBitmap *roaring.Bitmap + postings *roaring.Bitmap + except *roaring.Bitmap + + // when normBits1Hit != 0, then this postings list came from a + // 1-hit encoding, and only the docNum1Hit & normBits1Hit apply + docNum1Hit uint64 + normBits1Hit uint64 +} + +func (p *PostingsList) Size() int { + sizeInBytes := reflectStaticSizePostingsList + size.SizeOfPtr + + if p.except != nil { + sizeInBytes += int(p.except.GetSizeInBytes()) + } + + return sizeInBytes +} + +func (p *PostingsList) OrInto(receiver *roaring.Bitmap) { + if p.normBits1Hit != 0 { + receiver.Add(uint32(p.docNum1Hit)) + return + } + + if p.postings != nil { + receiver.Or(p.postings) + } +} + +// Iterator returns an iterator for this postings list +func (p *PostingsList) Iterator() segment.PostingsIterator { + return p.iterator(nil) +} + +func (p *PostingsList) iterator(rv *PostingsIterator) *PostingsIterator { + if rv == nil { + rv = &PostingsIterator{} + } else { + freqNormReader := rv.freqNormReader + if freqNormReader != nil { + freqNormReader.Reset([]byte(nil)) + } + freqNormDecoder := rv.freqNormDecoder + + locReader := rv.locReader + if locReader != nil { + locReader.Reset([]byte(nil)) + } + locDecoder := rv.locDecoder + + freqChunkOffsets := rv.freqChunkOffsets[:0] + locChunkOffsets := rv.locChunkOffsets[:0] + + buf := rv.buf + + *rv = PostingsIterator{} // clear the struct + + rv.freqNormReader = freqNormReader + rv.freqNormDecoder = freqNormDecoder + + rv.locReader = locReader + rv.locDecoder = locDecoder + + rv.freqChunkOffsets = freqChunkOffsets + rv.locChunkOffsets = locChunkOffsets + + rv.buf = buf + } + rv.postings = p + + if p.normBits1Hit != 0 { + // "1-hit" encoding + rv.docNum1Hit = p.docNum1Hit + rv.normBits1Hit = p.normBits1Hit + + if p.except != nil && p.except.Contains(uint32(rv.docNum1Hit)) { + rv.docNum1Hit = docNum1HitFinished + } + + return rv + } + + // "general" encoding, check if empty + if p.postings == nil { + return rv + } + + // prepare the freq chunk details + var n uint64 + var read int + var numFreqChunks uint64 + numFreqChunks, read = binary.Uvarint(p.sb.mem[p.freqOffset+n : p.freqOffset+n+binary.MaxVarintLen64]) + n += uint64(read) + if cap(rv.freqChunkOffsets) >= int(numFreqChunks) { + rv.freqChunkOffsets = rv.freqChunkOffsets[:int(numFreqChunks)] + } else { + rv.freqChunkOffsets = make([]uint64, int(numFreqChunks)) + } + for i := 0; i < int(numFreqChunks); i++ { + rv.freqChunkOffsets[i], read = binary.Uvarint(p.sb.mem[p.freqOffset+n : p.freqOffset+n+binary.MaxVarintLen64]) + n += uint64(read) + } + rv.freqChunkStart = p.freqOffset + n + + // prepare the loc chunk details + n = 0 + var numLocChunks uint64 + numLocChunks, read = binary.Uvarint(p.sb.mem[p.locOffset+n : p.locOffset+n+binary.MaxVarintLen64]) + n += uint64(read) + if cap(rv.locChunkOffsets) >= int(numLocChunks) { + rv.locChunkOffsets = rv.locChunkOffsets[:int(numLocChunks)] + } else { + rv.locChunkOffsets = make([]uint64, int(numLocChunks)) + } + for i := 0; i < int(numLocChunks); i++ { + rv.locChunkOffsets[i], read = binary.Uvarint(p.sb.mem[p.locOffset+n : p.locOffset+n+binary.MaxVarintLen64]) + n += uint64(read) + } + rv.locChunkStart = p.locOffset + n + + rv.locBitmap = p.locBitmap + + rv.all = p.postings.Iterator() + if p.except != nil { + allExcept := roaring.AndNot(p.postings, p.except) + rv.actual = allExcept.Iterator() + } else { + rv.actual = p.postings.Iterator() + } + + return rv +} + +// Count returns the number of items on this postings list +func (p *PostingsList) Count() uint64 { + var n uint64 + if p.normBits1Hit != 0 { + n = 1 + } else if p.postings != nil { + n = p.postings.GetCardinality() + } + var e uint64 + if p.except != nil { + e = p.except.GetCardinality() + } + if n <= e { + return 0 + } + return n - e +} + +func (rv *PostingsList) read(postingsOffset uint64, d *Dictionary) error { + rv.postingsOffset = postingsOffset + + // handle "1-hit" encoding special case + if rv.postingsOffset&FSTValEncodingMask == FSTValEncoding1Hit { + return rv.init1Hit(postingsOffset) + } + + // read the location of the freq/norm details + var n uint64 + var read int + + rv.freqOffset, read = binary.Uvarint(d.sb.mem[postingsOffset+n : postingsOffset+binary.MaxVarintLen64]) + n += uint64(read) + + rv.locOffset, read = binary.Uvarint(d.sb.mem[postingsOffset+n : postingsOffset+n+binary.MaxVarintLen64]) + n += uint64(read) + + var locBitmapOffset uint64 + locBitmapOffset, read = binary.Uvarint(d.sb.mem[postingsOffset+n : postingsOffset+n+binary.MaxVarintLen64]) + n += uint64(read) + + var locBitmapLen uint64 + locBitmapLen, read = binary.Uvarint(d.sb.mem[locBitmapOffset : locBitmapOffset+binary.MaxVarintLen64]) + + locRoaringBytes := d.sb.mem[locBitmapOffset+uint64(read) : locBitmapOffset+uint64(read)+locBitmapLen] + + if rv.locBitmap == nil { + rv.locBitmap = roaring.NewBitmap() + } + _, err := rv.locBitmap.FromBuffer(locRoaringBytes) + if err != nil { + return fmt.Errorf("error loading roaring bitmap of locations with hits: %v", err) + } + + var postingsLen uint64 + postingsLen, read = binary.Uvarint(d.sb.mem[postingsOffset+n : postingsOffset+n+binary.MaxVarintLen64]) + n += uint64(read) + + roaringBytes := d.sb.mem[postingsOffset+n : postingsOffset+n+postingsLen] + + if rv.postings == nil { + rv.postings = roaring.NewBitmap() + } + _, err = rv.postings.FromBuffer(roaringBytes) + if err != nil { + return fmt.Errorf("error loading roaring bitmap: %v", err) + } + + return nil +} + +func (rv *PostingsList) init1Hit(fstVal uint64) error { + docNum, normBits := FSTValDecode1Hit(fstVal) + + rv.docNum1Hit = docNum + rv.normBits1Hit = normBits + + return nil +} + +// PostingsIterator provides a way to iterate through the postings list +type PostingsIterator struct { + postings *PostingsList + all roaring.IntIterable + actual roaring.IntIterable + + currChunk uint32 + currChunkFreqNorm []byte + currChunkLoc []byte + freqNormDecoder *govarint.Base128Decoder + freqNormReader *bytes.Reader + locDecoder *govarint.Base128Decoder + locReader *bytes.Reader + + freqChunkOffsets []uint64 + freqChunkStart uint64 + + locChunkOffsets []uint64 + locChunkStart uint64 + + locBitmap *roaring.Bitmap + + next Posting // reused across Next() calls + nextLocs []Location // reused across Next() calls + + docNum1Hit uint64 + normBits1Hit uint64 + + buf []byte +} + +func (i *PostingsIterator) Size() int { + sizeInBytes := reflectStaticSizePostingsIterator + size.SizeOfPtr + + len(i.currChunkFreqNorm) + + len(i.currChunkLoc) + + len(i.freqChunkOffsets)*size.SizeOfUint64 + + len(i.locChunkOffsets)*size.SizeOfUint64 + + i.next.Size() + + if i.locBitmap != nil { + sizeInBytes += int(i.locBitmap.GetSizeInBytes()) + } + + for _, entry := range i.nextLocs { + sizeInBytes += entry.Size() + } + + return sizeInBytes +} + +func (i *PostingsIterator) loadChunk(chunk int) error { + if chunk >= len(i.freqChunkOffsets) || chunk >= len(i.locChunkOffsets) { + return fmt.Errorf("tried to load chunk that doesn't exist %d/(%d %d)", chunk, len(i.freqChunkOffsets), len(i.locChunkOffsets)) + } + + end, start := i.freqChunkStart, i.freqChunkStart + s, e := readChunkBoundary(chunk, i.freqChunkOffsets) + start += s + end += e + i.currChunkFreqNorm = i.postings.sb.mem[start:end] + if i.freqNormReader == nil { + i.freqNormReader = bytes.NewReader(i.currChunkFreqNorm) + i.freqNormDecoder = govarint.NewU64Base128Decoder(i.freqNormReader) + } else { + i.freqNormReader.Reset(i.currChunkFreqNorm) + } + + end, start = i.locChunkStart, i.locChunkStart + s, e = readChunkBoundary(chunk, i.locChunkOffsets) + start += s + end += e + i.currChunkLoc = i.postings.sb.mem[start:end] + if i.locReader == nil { + i.locReader = bytes.NewReader(i.currChunkLoc) + i.locDecoder = govarint.NewU64Base128Decoder(i.locReader) + } else { + i.locReader.Reset(i.currChunkLoc) + } + + i.currChunk = uint32(chunk) + return nil +} + +func (i *PostingsIterator) readFreqNorm() (uint64, uint64, error) { + if i.normBits1Hit != 0 { + return 1, i.normBits1Hit, nil + } + + freq, err := i.freqNormDecoder.GetU64() + if err != nil { + return 0, 0, fmt.Errorf("error reading frequency: %v", err) + } + normBits, err := i.freqNormDecoder.GetU64() + if err != nil { + return 0, 0, fmt.Errorf("error reading norm: %v", err) + } + return freq, normBits, err +} + +// readLocation processes all the integers on the stream representing a single +// location. if you care about it, pass in a non-nil location struct, and we +// will fill it. if you don't care about it, pass in nil and we safely consume +// the contents. +func (i *PostingsIterator) readLocation(l *Location) error { + // read off field + fieldID, err := i.locDecoder.GetU64() + if err != nil { + return fmt.Errorf("error reading location field: %v", err) + } + // read off pos + pos, err := i.locDecoder.GetU64() + if err != nil { + return fmt.Errorf("error reading location pos: %v", err) + } + // read off start + start, err := i.locDecoder.GetU64() + if err != nil { + return fmt.Errorf("error reading location start: %v", err) + } + // read off end + end, err := i.locDecoder.GetU64() + if err != nil { + return fmt.Errorf("error reading location end: %v", err) + } + // read off num array pos + numArrayPos, err := i.locDecoder.GetU64() + if err != nil { + return fmt.Errorf("error reading location num array pos: %v", err) + } + + // group these together for less branching + if l != nil { + l.field = i.postings.sb.fieldsInv[fieldID] + l.pos = pos + l.start = start + l.end = end + if numArrayPos > 0 { + l.ap = make([]uint64, int(numArrayPos)) + } else { + l.ap = l.ap[:0] + } + } + + // read off array positions + for k := 0; k < int(numArrayPos); k++ { + ap, err := i.locDecoder.GetU64() + if err != nil { + return fmt.Errorf("error reading array position: %v", err) + } + if l != nil { + l.ap[k] = ap + } + } + + return nil +} + +// Next returns the next posting on the postings list, or nil at the end +func (i *PostingsIterator) Next() (segment.Posting, error) { + docNum, exists, err := i.nextDocNum() + if err != nil || !exists { + return nil, err + } + + reuseLocs := i.next.locs // hold for reuse before struct clearing + i.next = Posting{} // clear the struct + rv := &i.next + rv.docNum = docNum + + var normBits uint64 + rv.freq, normBits, err = i.readFreqNorm() + if err != nil { + return nil, err + } + rv.norm = math.Float32frombits(uint32(normBits)) + + if i.locBitmap != nil && i.locBitmap.Contains(uint32(docNum)) { + // read off 'freq' locations, into reused slices + if cap(i.nextLocs) >= int(rv.freq) { + i.nextLocs = i.nextLocs[0:rv.freq] + } else { + i.nextLocs = make([]Location, rv.freq) + } + if cap(reuseLocs) >= int(rv.freq) { + rv.locs = reuseLocs[0:rv.freq] + } else { + rv.locs = make([]segment.Location, rv.freq) + } + for j := 0; j < int(rv.freq); j++ { + err := i.readLocation(&i.nextLocs[j]) + if err != nil { + return nil, err + } + rv.locs[j] = &i.nextLocs[j] + } + } + + return rv, nil +} + +// nextBytes returns the docNum and the encoded freq & loc bytes for +// the next posting +func (i *PostingsIterator) nextBytes() ( + docNumOut uint64, freq uint64, normBits uint64, + bytesFreqNorm []byte, bytesLoc []byte, err error) { + docNum, exists, err := i.nextDocNum() + if err != nil || !exists { + return 0, 0, 0, nil, nil, err + } + + if i.normBits1Hit != 0 { + if i.buf == nil { + i.buf = make([]byte, binary.MaxVarintLen64*2) + } + n := binary.PutUvarint(i.buf, uint64(1)) + n += binary.PutUvarint(i.buf, i.normBits1Hit) + return docNum, uint64(1), i.normBits1Hit, i.buf[:n], nil, nil + } + + startFreqNorm := len(i.currChunkFreqNorm) - i.freqNormReader.Len() + + freq, normBits, err = i.readFreqNorm() + if err != nil { + return 0, 0, 0, nil, nil, err + } + + endFreqNorm := len(i.currChunkFreqNorm) - i.freqNormReader.Len() + bytesFreqNorm = i.currChunkFreqNorm[startFreqNorm:endFreqNorm] + + if i.locBitmap != nil && i.locBitmap.Contains(uint32(docNum)) { + startLoc := len(i.currChunkLoc) - i.locReader.Len() + + for j := uint64(0); j < freq; j++ { + err := i.readLocation(nil) + if err != nil { + return 0, 0, 0, nil, nil, err + } + } + + endLoc := len(i.currChunkLoc) - i.locReader.Len() + bytesLoc = i.currChunkLoc[startLoc:endLoc] + } + + return docNum, freq, normBits, bytesFreqNorm, bytesLoc, nil +} + +// nextDocNum returns the next docNum on the postings list, and also +// sets up the currChunk / loc related fields of the iterator. +func (i *PostingsIterator) nextDocNum() (uint64, bool, error) { + if i.normBits1Hit != 0 { + if i.docNum1Hit == docNum1HitFinished { + return 0, false, nil + } + docNum := i.docNum1Hit + i.docNum1Hit = docNum1HitFinished // consume our 1-hit docNum + return docNum, true, nil + } + + if i.actual == nil || !i.actual.HasNext() { + return 0, false, nil + } + + n := i.actual.Next() + allN := i.all.Next() + + nChunk := n / i.postings.sb.chunkFactor + allNChunk := allN / i.postings.sb.chunkFactor + + // n is the next actual hit (excluding some postings), and + // allN is the next hit in the full postings, and + // if they don't match, move 'all' forwards until they do + for allN != n { + // in the same chunk, so move the freq/norm/loc decoders forward + if allNChunk == nChunk { + if i.currChunk != nChunk || i.currChunkFreqNorm == nil { + err := i.loadChunk(int(nChunk)) + if err != nil { + return 0, false, fmt.Errorf("error loading chunk: %v", err) + } + } + + // read off freq/offsets even though we don't care about them + freq, _, err := i.readFreqNorm() + if err != nil { + return 0, false, err + } + if i.locBitmap.Contains(allN) { + for j := 0; j < int(freq); j++ { + err := i.readLocation(nil) + if err != nil { + return 0, false, err + } + } + } + } + + allN = i.all.Next() + allNChunk = allN / i.postings.sb.chunkFactor + } + + if i.currChunk != nChunk || i.currChunkFreqNorm == nil { + err := i.loadChunk(int(nChunk)) + if err != nil { + return 0, false, fmt.Errorf("error loading chunk: %v", err) + } + } + + return uint64(n), true, nil +} + +// Posting is a single entry in a postings list +type Posting struct { + docNum uint64 + freq uint64 + norm float32 + locs []segment.Location +} + +func (p *Posting) Size() int { + sizeInBytes := reflectStaticSizePosting + + for _, entry := range p.locs { + sizeInBytes += entry.Size() + } + + return sizeInBytes +} + +// Number returns the document number of this posting in this segment +func (p *Posting) Number() uint64 { + return p.docNum +} + +// Frequency returns the frequence of occurance of this term in this doc/field +func (p *Posting) Frequency() uint64 { + return p.freq +} + +// Norm returns the normalization factor for this posting +func (p *Posting) Norm() float64 { + return float64(p.norm) +} + +// Locations returns the location information for each occurance +func (p *Posting) Locations() []segment.Location { + return p.locs +} + +// Location represents the location of a single occurance +type Location struct { + field string + pos uint64 + start uint64 + end uint64 + ap []uint64 +} + +func (l *Location) Size() int { + return reflectStaticSizeLocation + + len(l.field) + + len(l.ap)*size.SizeOfUint64 +} + +// Field returns the name of the field (useful in composite fields to know +// which original field the value came from) +func (l *Location) Field() string { + return l.field +} + +// Start returns the start byte offset of this occurance +func (l *Location) Start() uint64 { + return l.start +} + +// End returns the end byte offset of this occurance +func (l *Location) End() uint64 { + return l.end +} + +// Pos returns the 1-based phrase position of this occurance +func (l *Location) Pos() uint64 { + return l.pos +} + +// ArrayPositions returns the array position vector associated with this occurance +func (l *Location) ArrayPositions() []uint64 { + return l.ap +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/read.go b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/read.go new file mode 100644 index 0000000..e47d4c6 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/read.go @@ -0,0 +1,43 @@ +// Copyright (c) 2017 Couchbase, 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 zap + +import "encoding/binary" + +func (s *SegmentBase) getDocStoredMetaAndCompressed(docNum uint64) ([]byte, []byte) { + _, storedOffset, n, metaLen, dataLen := s.getDocStoredOffsets(docNum) + + meta := s.mem[storedOffset+n : storedOffset+n+metaLen] + data := s.mem[storedOffset+n+metaLen : storedOffset+n+metaLen+dataLen] + + return meta, data +} + +func (s *SegmentBase) getDocStoredOffsets(docNum uint64) ( + uint64, uint64, uint64, uint64, uint64) { + indexOffset := s.storedIndexOffset + (8 * docNum) + + storedOffset := binary.BigEndian.Uint64(s.mem[indexOffset : indexOffset+8]) + + var n uint64 + + metaLen, read := binary.Uvarint(s.mem[storedOffset : storedOffset+binary.MaxVarintLen64]) + n += uint64(read) + + dataLen, read := binary.Uvarint(s.mem[storedOffset+n : storedOffset+n+binary.MaxVarintLen64]) + n += uint64(read) + + return indexOffset, storedOffset, n, metaLen, dataLen +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/segment.go b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/segment.go new file mode 100644 index 0000000..0d2ad07 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/segment.go @@ -0,0 +1,461 @@ +// Copyright (c) 2017 Couchbase, 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 zap + +import ( + "bytes" + "encoding/binary" + "fmt" + "io" + "os" + "reflect" + "sync" + + "github.com/RoaringBitmap/roaring" + "github.com/Smerity/govarint" + "github.com/blevesearch/bleve/index/scorch/segment" + "github.com/blevesearch/bleve/size" + "github.com/couchbase/vellum" + mmap "github.com/edsrzf/mmap-go" + "github.com/golang/snappy" +) + +var reflectStaticSizeSegmentBase int + +func init() { + var sb SegmentBase + reflectStaticSizeSegmentBase = int(reflect.TypeOf(sb).Size()) +} + +// Open returns a zap impl of a segment +func Open(path string) (segment.Segment, error) { + f, err := os.Open(path) + if err != nil { + return nil, err + } + mm, err := mmap.Map(f, mmap.RDONLY, 0) + if err != nil { + // mmap failed, try to close the file + _ = f.Close() + return nil, err + } + + rv := &Segment{ + SegmentBase: SegmentBase{ + mem: mm[0 : len(mm)-FooterSize], + fieldsMap: make(map[string]uint16), + fieldDvIterMap: make(map[uint16]*docValueIterator), + }, + f: f, + mm: mm, + path: path, + refs: 1, + } + rv.SegmentBase.updateSize() + + err = rv.loadConfig() + if err != nil { + _ = rv.Close() + return nil, err + } + + err = rv.loadFields() + if err != nil { + _ = rv.Close() + return nil, err + } + + err = rv.loadDvIterators() + if err != nil { + _ = rv.Close() + return nil, err + } + + return rv, nil +} + +// SegmentBase is a memory only, read-only implementation of the +// segment.Segment interface, using zap's data representation. +type SegmentBase struct { + mem []byte + memCRC uint32 + chunkFactor uint32 + fieldsMap map[string]uint16 // fieldName -> fieldID+1 + fieldsInv []string // fieldID -> fieldName + numDocs uint64 + storedIndexOffset uint64 + fieldsIndexOffset uint64 + docValueOffset uint64 + dictLocs []uint64 + fieldDvIterMap map[uint16]*docValueIterator // naive chunk cache per field + size uint64 +} + +func (sb *SegmentBase) Size() int { + return int(sb.size) +} + +func (sb *SegmentBase) updateSize() { + sizeInBytes := reflectStaticSizeSegmentBase + + len(sb.mem) + + // fieldsMap + for k, _ := range sb.fieldsMap { + sizeInBytes += (len(k) + size.SizeOfString) + size.SizeOfUint16 + } + + // fieldsInv, dictLocs + for _, entry := range sb.fieldsInv { + sizeInBytes += len(entry) + size.SizeOfString + } + sizeInBytes += len(sb.dictLocs) * size.SizeOfUint64 + + // fieldDvIterMap + for _, v := range sb.fieldDvIterMap { + sizeInBytes += size.SizeOfUint16 + size.SizeOfPtr + if v != nil { + sizeInBytes += v.size() + } + } + + sb.size = uint64(sizeInBytes) +} + +func (sb *SegmentBase) AddRef() {} +func (sb *SegmentBase) DecRef() (err error) { return nil } +func (sb *SegmentBase) Close() (err error) { return nil } + +// Segment implements a persisted segment.Segment interface, by +// embedding an mmap()'ed SegmentBase. +type Segment struct { + SegmentBase + + f *os.File + mm mmap.MMap + path string + version uint32 + crc uint32 + + m sync.Mutex // Protects the fields that follow. + refs int64 +} + +func (s *Segment) Size() int { + // 8 /* size of file pointer */ + // 4 /* size of version -> uint32 */ + // 4 /* size of crc -> uint32 */ + sizeOfUints := 16 + + sizeInBytes := (len(s.path) + size.SizeOfString) + sizeOfUints + + // mutex, refs -> int64 + sizeInBytes += 16 + + // do not include the mmap'ed part + return sizeInBytes + s.SegmentBase.Size() - len(s.mem) +} + +func (s *Segment) AddRef() { + s.m.Lock() + s.refs++ + s.m.Unlock() +} + +func (s *Segment) DecRef() (err error) { + s.m.Lock() + s.refs-- + if s.refs == 0 { + err = s.closeActual() + } + s.m.Unlock() + return err +} + +func (s *Segment) loadConfig() error { + crcOffset := len(s.mm) - 4 + s.crc = binary.BigEndian.Uint32(s.mm[crcOffset : crcOffset+4]) + + verOffset := crcOffset - 4 + s.version = binary.BigEndian.Uint32(s.mm[verOffset : verOffset+4]) + if s.version != version { + return fmt.Errorf("unsupported version %d", s.version) + } + + chunkOffset := verOffset - 4 + s.chunkFactor = binary.BigEndian.Uint32(s.mm[chunkOffset : chunkOffset+4]) + + docValueOffset := chunkOffset - 8 + s.docValueOffset = binary.BigEndian.Uint64(s.mm[docValueOffset : docValueOffset+8]) + + fieldsIndexOffset := docValueOffset - 8 + s.fieldsIndexOffset = binary.BigEndian.Uint64(s.mm[fieldsIndexOffset : fieldsIndexOffset+8]) + + storedIndexOffset := fieldsIndexOffset - 8 + s.storedIndexOffset = binary.BigEndian.Uint64(s.mm[storedIndexOffset : storedIndexOffset+8]) + + numDocsOffset := storedIndexOffset - 8 + s.numDocs = binary.BigEndian.Uint64(s.mm[numDocsOffset : numDocsOffset+8]) + return nil +} + +func (s *SegmentBase) loadFields() error { + // NOTE for now we assume the fields index immediately preceeds + // the footer, and if this changes, need to adjust accordingly (or + // store explicit length), where s.mem was sliced from s.mm in Open(). + fieldsIndexEnd := uint64(len(s.mem)) + + // iterate through fields index + var fieldID uint64 + for s.fieldsIndexOffset+(8*fieldID) < fieldsIndexEnd { + addr := binary.BigEndian.Uint64(s.mem[s.fieldsIndexOffset+(8*fieldID) : s.fieldsIndexOffset+(8*fieldID)+8]) + + dictLoc, read := binary.Uvarint(s.mem[addr:fieldsIndexEnd]) + n := uint64(read) + s.dictLocs = append(s.dictLocs, dictLoc) + + var nameLen uint64 + nameLen, read = binary.Uvarint(s.mem[addr+n : fieldsIndexEnd]) + n += uint64(read) + + name := string(s.mem[addr+n : addr+n+nameLen]) + s.fieldsInv = append(s.fieldsInv, name) + s.fieldsMap[name] = uint16(fieldID + 1) + + fieldID++ + } + return nil +} + +// Dictionary returns the term dictionary for the specified field +func (s *SegmentBase) Dictionary(field string) (segment.TermDictionary, error) { + dict, err := s.dictionary(field) + if err == nil && dict == nil { + return &segment.EmptyDictionary{}, nil + } + return dict, err +} + +func (sb *SegmentBase) dictionary(field string) (rv *Dictionary, err error) { + fieldIDPlus1 := sb.fieldsMap[field] + if fieldIDPlus1 > 0 { + rv = &Dictionary{ + sb: sb, + field: field, + fieldID: fieldIDPlus1 - 1, + } + + dictStart := sb.dictLocs[rv.fieldID] + if dictStart > 0 { + // read the length of the vellum data + vellumLen, read := binary.Uvarint(sb.mem[dictStart : dictStart+binary.MaxVarintLen64]) + fstBytes := sb.mem[dictStart+uint64(read) : dictStart+uint64(read)+vellumLen] + if fstBytes != nil { + rv.fst, err = vellum.Load(fstBytes) + if err != nil { + return nil, fmt.Errorf("dictionary field %s vellum err: %v", field, err) + } + } + } + } + + return rv, nil +} + +// VisitDocument invokes the DocFieldValueVistor for each stored field +// for the specified doc number +func (s *SegmentBase) VisitDocument(num uint64, visitor segment.DocumentFieldValueVisitor) error { + // first make sure this is a valid number in this segment + if num < s.numDocs { + meta, compressed := s.getDocStoredMetaAndCompressed(num) + uncompressed, err := snappy.Decode(nil, compressed) + if err != nil { + return err + } + // now decode meta and process + reader := bytes.NewReader(meta) + decoder := govarint.NewU64Base128Decoder(reader) + + keepGoing := true + for keepGoing { + field, err := decoder.GetU64() + if err == io.EOF { + break + } + if err != nil { + return err + } + typ, err := decoder.GetU64() + if err != nil { + return err + } + offset, err := decoder.GetU64() + if err != nil { + return err + } + l, err := decoder.GetU64() + if err != nil { + return err + } + numap, err := decoder.GetU64() + if err != nil { + return err + } + var arrayPos []uint64 + if numap > 0 { + arrayPos = make([]uint64, numap) + for i := 0; i < int(numap); i++ { + ap, err := decoder.GetU64() + if err != nil { + return err + } + arrayPos[i] = ap + } + } + + value := uncompressed[offset : offset+l] + keepGoing = visitor(s.fieldsInv[field], byte(typ), value, arrayPos) + } + } + return nil +} + +// Count returns the number of documents in this segment. +func (s *SegmentBase) Count() uint64 { + return s.numDocs +} + +// DocNumbers returns a bitset corresponding to the doc numbers of all the +// provided _id strings +func (s *SegmentBase) DocNumbers(ids []string) (*roaring.Bitmap, error) { + rv := roaring.New() + + if len(s.fieldsMap) > 0 { + idDict, err := s.dictionary("_id") + if err != nil { + return nil, err + } + + var postingsList *PostingsList + for _, id := range ids { + postingsList, err = idDict.postingsList([]byte(id), nil, postingsList) + if err != nil { + return nil, err + } + postingsList.OrInto(rv) + } + } + + return rv, nil +} + +// Fields returns the field names used in this segment +func (s *SegmentBase) Fields() []string { + return s.fieldsInv +} + +// Path returns the path of this segment on disk +func (s *Segment) Path() string { + return s.path +} + +// Close releases all resources associated with this segment +func (s *Segment) Close() (err error) { + return s.DecRef() +} + +func (s *Segment) closeActual() (err error) { + if s.mm != nil { + err = s.mm.Unmap() + } + // try to close file even if unmap failed + if s.f != nil { + err2 := s.f.Close() + if err == nil { + // try to return first error + err = err2 + } + } + return +} + +// some helpers i started adding for the command-line utility + +// Data returns the underlying mmaped data slice +func (s *Segment) Data() []byte { + return s.mm +} + +// CRC returns the CRC value stored in the file footer +func (s *Segment) CRC() uint32 { + return s.crc +} + +// Version returns the file version in the file footer +func (s *Segment) Version() uint32 { + return s.version +} + +// ChunkFactor returns the chunk factor in the file footer +func (s *Segment) ChunkFactor() uint32 { + return s.chunkFactor +} + +// FieldsIndexOffset returns the fields index offset in the file footer +func (s *Segment) FieldsIndexOffset() uint64 { + return s.fieldsIndexOffset +} + +// StoredIndexOffset returns the stored value index offset in the file footer +func (s *Segment) StoredIndexOffset() uint64 { + return s.storedIndexOffset +} + +// DocValueOffset returns the docValue offset in the file footer +func (s *Segment) DocValueOffset() uint64 { + return s.docValueOffset +} + +// NumDocs returns the number of documents in the file footer +func (s *Segment) NumDocs() uint64 { + return s.numDocs +} + +// DictAddr is a helper function to compute the file offset where the +// dictionary is stored for the specified field. +func (s *Segment) DictAddr(field string) (uint64, error) { + fieldIDPlus1, ok := s.fieldsMap[field] + if !ok { + return 0, fmt.Errorf("no such field '%s'", field) + } + + return s.dictLocs[fieldIDPlus1-1], nil +} + +func (s *SegmentBase) loadDvIterators() error { + if s.docValueOffset == fieldNotUninverted { + return nil + } + + var read uint64 + for fieldID, field := range s.fieldsInv { + fieldLoc, n := binary.Uvarint(s.mem[s.docValueOffset+read : s.docValueOffset+read+binary.MaxVarintLen64]) + if n <= 0 { + return fmt.Errorf("loadDvIterators: failed to read the docvalue offsets for field %d", fieldID) + } + s.fieldDvIterMap[uint16(fieldID)], _ = s.loadFieldDocValueIterator(field, fieldLoc) + read += uint64(n) + } + return nil +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/segment_test.go b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/segment_test.go new file mode 100644 index 0000000..50d5dbd --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/segment_test.go @@ -0,0 +1,602 @@ +// Copyright (c) 2017 Couchbase, 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 zap + +import ( + "math" + "os" + "reflect" + "sort" + "testing" + + "github.com/blevesearch/bleve/index" + "github.com/blevesearch/bleve/index/scorch/segment" +) + +func TestOpen(t *testing.T) { + _ = os.RemoveAll("/tmp/scorch.zap") + + testSeg, _ := buildTestSegment() + err := PersistSegmentBase(testSeg, "/tmp/scorch.zap") + if err != nil { + t.Fatalf("error persisting segment: %v", err) + } + + segment, err := Open("/tmp/scorch.zap") + if err != nil { + t.Fatalf("error opening segment: %v", err) + } + defer func() { + cerr := segment.Close() + if cerr != nil { + t.Fatalf("error closing segment: %v", cerr) + } + }() + + expectFields := map[string]struct{}{ + "_id": struct{}{}, + "_all": struct{}{}, + "name": struct{}{}, + "desc": struct{}{}, + "tag": struct{}{}, + } + fields := segment.Fields() + if len(fields) != len(expectFields) { + t.Errorf("expected %d fields, only got %d", len(expectFields), len(fields)) + } + for _, field := range fields { + if _, ok := expectFields[field]; !ok { + t.Errorf("got unexpected field: %s", field) + } + } + + docCount := segment.Count() + if docCount != 1 { + t.Errorf("expected count 1, got %d", docCount) + } + + // check the _id field + dict, err := segment.Dictionary("_id") + if err != nil { + t.Fatal(err) + } + if dict == nil { + t.Fatal("got nil dict, expected non-nil") + } + + postingsList, err := dict.PostingsList("a", nil) + if err != nil { + t.Fatal(err) + } + if postingsList == nil { + t.Fatal("got nil postings list, expected non-nil") + } + + postingsItr := postingsList.Iterator() + if postingsItr == nil { + t.Fatal("got nil iterator, expected non-nil") + } + + count := 0 + nextPosting, err := postingsItr.Next() + for nextPosting != nil && err == nil { + count++ + if nextPosting.Frequency() != 1 { + t.Errorf("expected frequency 1, got %d", nextPosting.Frequency()) + } + if nextPosting.Number() != 0 { + t.Errorf("expected doc number 0, got %d", nextPosting.Number()) + } + if nextPosting.Norm() != 1.0 { + t.Errorf("expected norm 1.0, got %f", nextPosting.Norm()) + } + + nextPosting, err = postingsItr.Next() + } + if err != nil { + t.Fatal(err) + } + + if count != 1 { + t.Errorf("expected count to be 1, got %d", count) + } + + // check the name field + dict, err = segment.Dictionary("name") + if err != nil { + t.Fatal(err) + } + if dict == nil { + t.Fatal("got nil dict, expected non-nil") + } + + postingsList, err = dict.PostingsList("wow", nil) + if err != nil { + t.Fatal(err) + } + if postingsList == nil { + t.Fatal("got nil postings list, expected non-nil") + } + + postingsItr = postingsList.Iterator() + if postingsItr == nil { + t.Fatal("got nil iterator, expected non-nil") + } + + count = 0 + nextPosting, err = postingsItr.Next() + for nextPosting != nil && err == nil { + count++ + if nextPosting.Frequency() != 1 { + t.Errorf("expected frequency 1, got %d", nextPosting.Frequency()) + } + if nextPosting.Number() != 0 { + t.Errorf("expected doc number 0, got %d", nextPosting.Number()) + } + if nextPosting.Norm() != 1.0 { + t.Errorf("expected norm 1.0, got %f", nextPosting.Norm()) + } + var numLocs uint64 + for _, loc := range nextPosting.Locations() { + numLocs++ + if loc.Field() != "name" { + t.Errorf("expected loc field to be 'name', got '%s'", loc.Field()) + } + if loc.Start() != 0 { + t.Errorf("expected loc start to be 0, got %d", loc.Start()) + } + if loc.End() != 3 { + t.Errorf("expected loc end to be 3, got %d", loc.End()) + } + if loc.Pos() != 1 { + t.Errorf("expected loc pos to be 1, got %d", loc.Pos()) + } + if loc.ArrayPositions() != nil { + t.Errorf("expect loc array pos to be nil, got %v", loc.ArrayPositions()) + } + } + if numLocs != nextPosting.Frequency() { + t.Errorf("expected %d locations, got %d", nextPosting.Frequency(), numLocs) + } + + nextPosting, err = postingsItr.Next() + } + if err != nil { + t.Fatal(err) + } + + if count != 1 { + t.Errorf("expected count to be 1, got %d", count) + } + + // check the _all field (composite) + dict, err = segment.Dictionary("_all") + if err != nil { + t.Fatal(err) + } + if dict == nil { + t.Fatal("got nil dict, expected non-nil") + } + + postingsList, err = dict.PostingsList("wow", nil) + if err != nil { + t.Fatal(err) + } + if postingsList == nil { + t.Fatal("got nil postings list, expected non-nil") + } + + postingsItr = postingsList.Iterator() + if postingsItr == nil { + t.Fatal("got nil iterator, expected non-nil") + } + + count = 0 + nextPosting, err = postingsItr.Next() + for nextPosting != nil && err == nil { + count++ + if nextPosting.Frequency() != 1 { + t.Errorf("expected frequency 1, got %d", nextPosting.Frequency()) + } + if nextPosting.Number() != 0 { + t.Errorf("expected doc number 0, got %d", nextPosting.Number()) + } + expectedNorm := float32(1.0 / math.Sqrt(float64(5))) + if nextPosting.Norm() != float64(expectedNorm) { + t.Errorf("expected norm %f, got %f", expectedNorm, nextPosting.Norm()) + } + var numLocs uint64 + for _, loc := range nextPosting.Locations() { + numLocs++ + if loc.Field() != "name" { + t.Errorf("expected loc field to be 'name', got '%s'", loc.Field()) + } + if loc.Start() != 0 { + t.Errorf("expected loc start to be 0, got %d", loc.Start()) + } + if loc.End() != 3 { + t.Errorf("expected loc end to be 3, got %d", loc.End()) + } + if loc.Pos() != 1 { + t.Errorf("expected loc pos to be 1, got %d", loc.Pos()) + } + if loc.ArrayPositions() != nil { + t.Errorf("expect loc array pos to be nil, got %v", loc.ArrayPositions()) + } + } + if numLocs != nextPosting.Frequency() { + t.Errorf("expected %d locations, got %d", nextPosting.Frequency(), numLocs) + } + + nextPosting, err = postingsItr.Next() + } + if err != nil { + t.Fatal(err) + } + + if count != 1 { + t.Errorf("expected count to be 1, got %d", count) + } + + // now try a field with array positions + dict, err = segment.Dictionary("tag") + if err != nil { + t.Fatal(err) + } + if dict == nil { + t.Fatal("got nil dict, expected non-nil") + } + + postingsList, err = dict.PostingsList("dark", nil) + if err != nil { + t.Fatal(err) + } + if postingsList == nil { + t.Fatal("got nil postings list, expected non-nil") + } + + postingsItr = postingsList.Iterator() + if postingsItr == nil { + t.Fatal("got nil iterator, expected non-nil") + } + + nextPosting, err = postingsItr.Next() + for nextPosting != nil && err == nil { + + if nextPosting.Frequency() != 1 { + t.Errorf("expected frequency 1, got %d", nextPosting.Frequency()) + } + if nextPosting.Number() != 0 { + t.Errorf("expected doc number 0, got %d", nextPosting.Number()) + } + var numLocs uint64 + for _, loc := range nextPosting.Locations() { + numLocs++ + if loc.Field() != "tag" { + t.Errorf("expected loc field to be 'name', got '%s'", loc.Field()) + } + if loc.Start() != 0 { + t.Errorf("expected loc start to be 0, got %d", loc.Start()) + } + if loc.End() != 4 { + t.Errorf("expected loc end to be 3, got %d", loc.End()) + } + if loc.Pos() != 1 { + t.Errorf("expected loc pos to be 1, got %d", loc.Pos()) + } + expectArrayPos := []uint64{1} + if !reflect.DeepEqual(loc.ArrayPositions(), expectArrayPos) { + t.Errorf("expect loc array pos to be %v, got %v", expectArrayPos, loc.ArrayPositions()) + } + } + if numLocs != nextPosting.Frequency() { + t.Errorf("expected %d locations, got %d", nextPosting.Frequency(), numLocs) + } + + nextPosting, err = postingsItr.Next() + } + if err != nil { + t.Fatal(err) + } + + // now try and visit a document + var fieldValuesSeen int + err = segment.VisitDocument(0, func(field string, typ byte, value []byte, pos []uint64) bool { + fieldValuesSeen++ + return true + }) + if err != nil { + t.Fatal(err) + } + if fieldValuesSeen != 5 { + t.Errorf("expected 5 field values, got %d", fieldValuesSeen) + } +} + +func TestOpenMulti(t *testing.T) { + _ = os.RemoveAll("/tmp/scorch.zap") + + testSeg, _ := buildTestSegmentMulti() + err := PersistSegmentBase(testSeg, "/tmp/scorch.zap") + if err != nil { + t.Fatalf("error persisting segment: %v", err) + } + + segment, err := Open("/tmp/scorch.zap") + if err != nil { + t.Fatalf("error opening segment: %v", err) + } + defer func() { + cerr := segment.Close() + if cerr != nil { + t.Fatalf("error closing segment: %v", cerr) + } + }() + + if segment.Count() != 2 { + t.Errorf("expected count 2, got %d", segment.Count()) + } + + // check the desc field + dict, err := segment.Dictionary("desc") + if err != nil { + t.Fatal(err) + } + if dict == nil { + t.Fatal("got nil dict, expected non-nil") + } + + postingsList, err := dict.PostingsList("thing", nil) + if err != nil { + t.Fatal(err) + } + if postingsList == nil { + t.Fatal("got nil postings list, expected non-nil") + } + + postingsItr := postingsList.Iterator() + if postingsItr == nil { + t.Fatal("got nil iterator, expected non-nil") + } + + count := 0 + nextPosting, err := postingsItr.Next() + for nextPosting != nil && err == nil { + count++ + nextPosting, err = postingsItr.Next() + } + if err != nil { + t.Fatal(err) + } + + if count != 2 { + t.Errorf("expected count to be 2, got %d", count) + } + + // get docnum of a + exclude, err := segment.DocNumbers([]string{"a"}) + if err != nil { + t.Fatal(err) + } + + // look for term 'thing' excluding doc 'a' + postingsListExcluding, err := dict.PostingsList("thing", exclude) + if err != nil { + t.Fatal(err) + } + if postingsList == nil { + t.Fatal("got nil postings list, expected non-nil") + } + + postingsListExcludingCount := postingsListExcluding.Count() + if postingsListExcludingCount != 1 { + t.Errorf("expected count from postings list to be 1, got %d", postingsListExcludingCount) + } + + postingsItrExcluding := postingsListExcluding.Iterator() + if postingsItr == nil { + t.Fatal("got nil iterator, expected non-nil") + } + + count = 0 + nextPosting, err = postingsItrExcluding.Next() + for nextPosting != nil && err == nil { + count++ + nextPosting, err = postingsItrExcluding.Next() + } + if err != nil { + t.Fatal(err) + } + + if count != 1 { + t.Errorf("expected count to be 1, got %d", count) + } +} + +func TestOpenMultiWithTwoChunks(t *testing.T) { + _ = os.RemoveAll("/tmp/scorch.zap") + + testSeg, _ := buildTestSegmentMultiWithChunkFactor(1) + err := PersistSegmentBase(testSeg, "/tmp/scorch.zap") + if err != nil { + t.Fatalf("error persisting segment: %v", err) + } + + segment, err := Open("/tmp/scorch.zap") + if err != nil { + t.Fatalf("error opening segment: %v", err) + } + defer func() { + cerr := segment.Close() + if cerr != nil { + t.Fatalf("error closing segment: %v", cerr) + } + }() + + if segment.Count() != 2 { + t.Errorf("expected count 2, got %d", segment.Count()) + } + + // check the desc field + dict, err := segment.Dictionary("desc") + if err != nil { + t.Fatal(err) + } + if dict == nil { + t.Fatal("got nil dict, expected non-nil") + } + + postingsList, err := dict.PostingsList("thing", nil) + if err != nil { + t.Fatal(err) + } + if postingsList == nil { + t.Fatal("got nil postings list, expected non-nil") + } + + postingsItr := postingsList.Iterator() + if postingsItr == nil { + t.Fatal("got nil iterator, expected non-nil") + } + + count := 0 + nextPosting, err := postingsItr.Next() + for nextPosting != nil && err == nil { + count++ + nextPosting, err = postingsItr.Next() + } + if err != nil { + t.Fatal(err) + } + + if count != 2 { + t.Errorf("expected count to be 2, got %d", count) + } + + // get docnum of a + exclude, err := segment.DocNumbers([]string{"a"}) + if err != nil { + t.Fatal(err) + } + + // look for term 'thing' excluding doc 'a' + postingsListExcluding, err := dict.PostingsList("thing", exclude) + if err != nil { + t.Fatal(err) + } + if postingsList == nil { + t.Fatal("got nil postings list, expected non-nil") + } + + postingsItrExcluding := postingsListExcluding.Iterator() + if postingsItr == nil { + t.Fatal("got nil iterator, expected non-nil") + } + + count = 0 + nextPosting, err = postingsItrExcluding.Next() + for nextPosting != nil && err == nil { + count++ + nextPosting, err = postingsItrExcluding.Next() + } + if err != nil { + t.Fatal(err) + } + + if count != 1 { + t.Errorf("expected count to be 1, got %d", count) + } +} + +func TestSegmentVisitableDocValueFieldsList(t *testing.T) { + _ = os.RemoveAll("/tmp/scorch.zap") + + testSeg, _ := buildTestSegmentMultiWithChunkFactor(1) + err := PersistSegmentBase(testSeg, "/tmp/scorch.zap") + if err != nil { + t.Fatalf("error persisting segment: %v", err) + } + + seg, err := Open("/tmp/scorch.zap") + if err != nil { + t.Fatalf("error opening segment: %v", err) + } + + if zaps, ok := seg.(segment.DocumentFieldTermVisitable); ok { + fields, err := zaps.VisitableDocValueFields() + if err != nil { + t.Fatalf("segment VisitableDocValueFields err: %v", err) + } + // no persisted doc value fields + if len(fields) != 0 { + t.Errorf("expected no persisted fields for doc values, got: %#v", fields) + } + } + + err = seg.Close() + if err != nil { + t.Fatalf("error closing segment: %v", err) + } + _ = os.RemoveAll("/tmp/scorch.zap") + + testSeg, expectedFields, _ := buildTestSegmentWithDefaultFieldMapping(1) + err = PersistSegmentBase(testSeg, "/tmp/scorch.zap") + if err != nil { + t.Fatalf("error persisting segment: %v", err) + } + + seg, err = Open("/tmp/scorch.zap") + if err != nil { + t.Fatalf("error opening segment: %v", err) + } + + defer func() { + cerr := seg.Close() + if cerr != nil { + t.Fatalf("error closing segment: %v", cerr) + } + }() + + if zaps, ok := seg.(segment.DocumentFieldTermVisitable); ok { + fields, err := zaps.VisitableDocValueFields() + if err != nil { + t.Fatalf("segment VisitableDocValueFields err: %v", err) + } + + sort.Strings(expectedFields[1:]) // keep _id as first field + if !reflect.DeepEqual(fields, expectedFields) { + t.Errorf("expected field terms: %#v, got: %#v", expectedFields, fields) + } + + fieldTerms := make(index.FieldTerms) + err = zaps.VisitDocumentFieldTerms(0, fields, func(field string, term []byte) { + fieldTerms[field] = append(fieldTerms[field], string(term)) + }) + if err != nil { + t.Error(err) + } + + expectedFieldTerms := index.FieldTerms{ + "name": []string{"wow"}, + "desc": []string{"some", "thing"}, + "tag": []string{"cold"}, + "_id": []string{"a"}, + } + if !reflect.DeepEqual(fieldTerms, expectedFieldTerms) { + t.Errorf("expected field terms: %#v, got: %#v", expectedFieldTerms, fieldTerms) + } + + } +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/write.go b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/write.go new file mode 100644 index 0000000..7f4f5a8 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/write.go @@ -0,0 +1,145 @@ +// Copyright (c) 2017 Couchbase, 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 zap + +import ( + "encoding/binary" + "io" + + "github.com/RoaringBitmap/roaring" +) + +// writes out the length of the roaring bitmap in bytes as varint +// then writes out the roaring bitmap itself +func writeRoaringWithLen(r *roaring.Bitmap, w io.Writer, + reuseBufVarint []byte) (int, error) { + buf, err := r.ToBytes() + if err != nil { + return 0, err + } + + var tw int + + // write out the length + n := binary.PutUvarint(reuseBufVarint, uint64(len(buf))) + nw, err := w.Write(reuseBufVarint[:n]) + tw += nw + if err != nil { + return tw, err + } + + // write out the roaring bytes + nw, err = w.Write(buf) + tw += nw + if err != nil { + return tw, err + } + + return tw, nil +} + +func persistFields(fieldsInv []string, w *CountHashWriter, dictLocs []uint64) (uint64, error) { + var rv uint64 + var fieldsOffsets []uint64 + + for fieldID, fieldName := range fieldsInv { + // record start of this field + fieldsOffsets = append(fieldsOffsets, uint64(w.Count())) + + // write out the dict location and field name length + _, err := writeUvarints(w, dictLocs[fieldID], uint64(len(fieldName))) + if err != nil { + return 0, err + } + + // write out the field name + _, err = w.Write([]byte(fieldName)) + if err != nil { + return 0, err + } + } + + // now write out the fields index + rv = uint64(w.Count()) + for fieldID := range fieldsInv { + err := binary.Write(w, binary.BigEndian, fieldsOffsets[fieldID]) + if err != nil { + return 0, err + } + } + + return rv, nil +} + +// FooterSize is the size of the footer record in bytes +// crc + ver + chunk + field offset + stored offset + num docs + docValueOffset +const FooterSize = 4 + 4 + 4 + 8 + 8 + 8 + 8 + +func persistFooter(numDocs, storedIndexOffset, fieldsIndexOffset, docValueOffset uint64, + chunkFactor uint32, crcBeforeFooter uint32, writerIn io.Writer) error { + w := NewCountHashWriter(writerIn) + w.crc = crcBeforeFooter + + // write out the number of docs + err := binary.Write(w, binary.BigEndian, numDocs) + if err != nil { + return err + } + // write out the stored field index location: + err = binary.Write(w, binary.BigEndian, storedIndexOffset) + if err != nil { + return err + } + // write out the field index location + err = binary.Write(w, binary.BigEndian, fieldsIndexOffset) + if err != nil { + return err + } + // write out the fieldDocValue location + err = binary.Write(w, binary.BigEndian, docValueOffset) + if err != nil { + return err + } + // write out 32-bit chunk factor + err = binary.Write(w, binary.BigEndian, chunkFactor) + if err != nil { + return err + } + // write out 32-bit version + err = binary.Write(w, binary.BigEndian, version) + if err != nil { + return err + } + // write out CRC-32 of everything upto but not including this CRC + err = binary.Write(w, binary.BigEndian, w.crc) + if err != nil { + return err + } + return nil +} + +func writeUvarints(w io.Writer, vals ...uint64) (tw int, err error) { + buf := make([]byte, binary.MaxVarintLen64) + for _, val := range vals { + n := binary.PutUvarint(buf, val) + var nw int + nw, err = w.Write(buf[:n]) + tw += nw + if err != nil { + return tw, err + } + } + return tw, err +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/write_test.go b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/write_test.go new file mode 100644 index 0000000..2e72d4b --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/segment/zap/write_test.go @@ -0,0 +1,86 @@ +// Copyright (c) 2018 Couchbase, 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 zap + +import ( + "math" + "testing" + + "github.com/RoaringBitmap/roaring" +) + +func TestRoaringSizes(t *testing.T) { + tests := []struct { + vals []uint32 + expectedSize int // expected serialized # bytes + optimizedSize int // after calling roaring's RunOptimize() API + }{ + {[]uint32{}, 8, 8}, // empty roaring is 8 bytes + + {[]uint32{0}, 18, 18}, // single entry roaring is 18 bytes + {[]uint32{1}, 18, 18}, + {[]uint32{4}, 18, 18}, + {[]uint32{4000}, 18, 18}, + {[]uint32{40000000}, 18, 18}, + {[]uint32{math.MaxUint32}, 18, 18}, + {[]uint32{math.MaxUint32 - 1}, 18, 18}, + + {[]uint32{0, 1}, 20, 20}, + {[]uint32{0, 10000000}, 28, 28}, + + {[]uint32{0, 1, 2}, 22, 15}, + {[]uint32{0, 1, 20000000}, 30, 30}, + + {[]uint32{0, 1, 2, 3}, 24, 15}, + {[]uint32{0, 1, 2, 30000000}, 32, 21}, + } + + for _, test := range tests { + bm := roaring.New() + for _, val := range test.vals { + bm.Add(val) + } + + b, err := bm.ToBytes() + if err != nil { + t.Errorf("expected no ToBytes() err, got: %v", err) + } + if len(b) != test.expectedSize { + t.Errorf("size did not match,"+ + " got: %d, test: %#v", len(b), test) + } + if int(bm.GetSerializedSizeInBytes()) != test.expectedSize { + t.Errorf("GetSerializedSizeInBytes did not match,"+ + " got: %d, test: %#v", + bm.GetSerializedSizeInBytes(), test) + } + + bm.RunOptimize() + + b, err = bm.ToBytes() + if err != nil { + t.Errorf("expected no ToBytes() err, got: %v", err) + } + if len(b) != test.optimizedSize { + t.Errorf("optimized size did not match,"+ + " got: %d, test: %#v", len(b), test) + } + if int(bm.GetSerializedSizeInBytes()) != test.optimizedSize { + t.Errorf("optimized GetSerializedSizeInBytes did not match,"+ + " got: %d, test: %#v", + bm.GetSerializedSizeInBytes(), test) + } + } +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/snapshot_index.go b/vendor/github.com/blevesearch/bleve/index/scorch/snapshot_index.go new file mode 100644 index 0000000..6f4b028 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/snapshot_index.go @@ -0,0 +1,551 @@ +// Copyright (c) 2017 Couchbase, 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 scorch + +import ( + "bytes" + "container/heap" + "encoding/binary" + "fmt" + "reflect" + "sort" + "sync" + "sync/atomic" + + "github.com/RoaringBitmap/roaring" + "github.com/blevesearch/bleve/document" + "github.com/blevesearch/bleve/index" + "github.com/blevesearch/bleve/index/scorch/segment" +) + +type asynchSegmentResult struct { + dictItr segment.DictionaryIterator + + index int + docs *roaring.Bitmap + + postings segment.PostingsList + + err error +} + +var reflectStaticSizeIndexSnapshot int + +func init() { + var is interface{} = IndexSnapshot{} + reflectStaticSizeIndexSnapshot = int(reflect.TypeOf(is).Size()) +} + +type IndexSnapshot struct { + parent *Scorch + segment []*SegmentSnapshot + offsets []uint64 + internal map[string][]byte + epoch uint64 + size uint64 + + m sync.Mutex // Protects the fields that follow. + refs int64 +} + +func (i *IndexSnapshot) Segments() []*SegmentSnapshot { + return i.segment +} + +func (i *IndexSnapshot) Internal() map[string][]byte { + return i.internal +} + +func (i *IndexSnapshot) AddRef() { + i.m.Lock() + i.refs++ + i.m.Unlock() +} + +func (i *IndexSnapshot) DecRef() (err error) { + i.m.Lock() + i.refs-- + if i.refs == 0 { + for _, s := range i.segment { + if s != nil { + err2 := s.segment.DecRef() + if err == nil { + err = err2 + } + } + } + if i.parent != nil { + go i.parent.AddEligibleForRemoval(i.epoch) + } + } + i.m.Unlock() + return err +} + +func (i *IndexSnapshot) Close() error { + return i.DecRef() +} + +func (i *IndexSnapshot) Size() int { + return int(i.size) +} + +func (i *IndexSnapshot) updateSize() { + i.size += uint64(reflectStaticSizeIndexSnapshot) + for _, s := range i.segment { + i.size += uint64(s.Size()) + } +} + +func (i *IndexSnapshot) newIndexSnapshotFieldDict(field string, makeItr func(i segment.TermDictionary) segment.DictionaryIterator) (*IndexSnapshotFieldDict, error) { + + results := make(chan *asynchSegmentResult) + for index, segment := range i.segment { + go func(index int, segment *SegmentSnapshot) { + dict, err := segment.Dictionary(field) + if err != nil { + results <- &asynchSegmentResult{err: err} + } else { + results <- &asynchSegmentResult{dictItr: makeItr(dict)} + } + }(index, segment) + } + + var err error + rv := &IndexSnapshotFieldDict{ + snapshot: i, + cursors: make([]*segmentDictCursor, 0, len(i.segment)), + } + for count := 0; count < len(i.segment); count++ { + asr := <-results + if asr.err != nil && err == nil { + err = asr.err + } else { + next, err2 := asr.dictItr.Next() + if err2 != nil && err == nil { + err = err2 + } + if next != nil { + rv.cursors = append(rv.cursors, &segmentDictCursor{ + itr: asr.dictItr, + curr: next, + }) + } + } + } + // after ensuring we've read all items on channel + if err != nil { + return nil, err + } + // prepare heap + heap.Init(rv) + + return rv, nil +} + +func (i *IndexSnapshot) FieldDict(field string) (index.FieldDict, error) { + return i.newIndexSnapshotFieldDict(field, func(i segment.TermDictionary) segment.DictionaryIterator { + return i.Iterator() + }) +} + +func (i *IndexSnapshot) FieldDictRange(field string, startTerm []byte, + endTerm []byte) (index.FieldDict, error) { + return i.newIndexSnapshotFieldDict(field, func(i segment.TermDictionary) segment.DictionaryIterator { + return i.RangeIterator(string(startTerm), string(endTerm)) + }) +} + +func (i *IndexSnapshot) FieldDictPrefix(field string, + termPrefix []byte) (index.FieldDict, error) { + return i.newIndexSnapshotFieldDict(field, func(i segment.TermDictionary) segment.DictionaryIterator { + return i.PrefixIterator(string(termPrefix)) + }) +} + +func (i *IndexSnapshot) DocIDReaderAll() (index.DocIDReader, error) { + results := make(chan *asynchSegmentResult) + for index, segment := range i.segment { + go func(index int, segment *SegmentSnapshot) { + results <- &asynchSegmentResult{ + index: index, + docs: segment.DocNumbersLive(), + } + }(index, segment) + } + + return i.newDocIDReader(results) +} + +func (i *IndexSnapshot) DocIDReaderOnly(ids []string) (index.DocIDReader, error) { + results := make(chan *asynchSegmentResult) + for index, segment := range i.segment { + go func(index int, segment *SegmentSnapshot) { + docs, err := segment.DocNumbers(ids) + if err != nil { + results <- &asynchSegmentResult{err: err} + } else { + results <- &asynchSegmentResult{ + index: index, + docs: docs, + } + } + }(index, segment) + } + + return i.newDocIDReader(results) +} + +func (i *IndexSnapshot) newDocIDReader(results chan *asynchSegmentResult) (index.DocIDReader, error) { + rv := &IndexSnapshotDocIDReader{ + snapshot: i, + iterators: make([]roaring.IntIterable, len(i.segment)), + } + var err error + for count := 0; count < len(i.segment); count++ { + asr := <-results + if asr.err != nil && err != nil { + err = asr.err + } else { + rv.iterators[asr.index] = asr.docs.Iterator() + } + } + + if err != nil { + return nil, err + } + + return rv, nil +} + +func (i *IndexSnapshot) Fields() ([]string, error) { + // FIXME not making this concurrent for now as it's not used in hot path + // of any searches at the moment (just a debug aid) + fieldsMap := map[string]struct{}{} + for _, segment := range i.segment { + fields := segment.Fields() + for _, field := range fields { + fieldsMap[field] = struct{}{} + } + } + rv := make([]string, 0, len(fieldsMap)) + for k := range fieldsMap { + rv = append(rv, k) + } + return rv, nil +} + +func (i *IndexSnapshot) GetInternal(key []byte) ([]byte, error) { + return i.internal[string(key)], nil +} + +func (i *IndexSnapshot) DocCount() (uint64, error) { + var rv uint64 + for _, segment := range i.segment { + rv += segment.Count() + } + return rv, nil +} + +func (i *IndexSnapshot) Document(id string) (rv *document.Document, err error) { + // FIXME could be done more efficiently directly, but reusing for simplicity + tfr, err := i.TermFieldReader([]byte(id), "_id", false, false, false) + if err != nil { + return nil, err + } + defer func() { + if cerr := tfr.Close(); err == nil && cerr != nil { + err = cerr + } + }() + + next, err := tfr.Next(nil) + if err != nil { + return nil, err + } + + if next == nil { + // no such doc exists + return nil, nil + } + + docNum, err := docInternalToNumber(next.ID) + if err != nil { + return nil, err + } + segmentIndex, localDocNum := i.segmentIndexAndLocalDocNumFromGlobal(docNum) + + rv = document.NewDocument(id) + err = i.segment[segmentIndex].VisitDocument(localDocNum, func(name string, typ byte, value []byte, pos []uint64) bool { + if name == "_id" { + return true + } + switch typ { + case 't': + rv.AddField(document.NewTextField(name, pos, value)) + case 'n': + rv.AddField(document.NewNumericFieldFromBytes(name, pos, value)) + case 'd': + rv.AddField(document.NewDateTimeFieldFromBytes(name, pos, value)) + case 'b': + rv.AddField(document.NewBooleanFieldFromBytes(name, pos, value)) + case 'g': + rv.AddField(document.NewGeoPointFieldFromBytes(name, pos, value)) + } + + return true + }) + if err != nil { + return nil, err + } + + return rv, nil +} + +func (i *IndexSnapshot) segmentIndexAndLocalDocNumFromGlobal(docNum uint64) (int, uint64) { + segmentIndex := sort.Search(len(i.offsets), + func(x int) bool { + return i.offsets[x] > docNum + }) - 1 + + localDocNum := docNum - i.offsets[segmentIndex] + return int(segmentIndex), localDocNum +} + +func (i *IndexSnapshot) ExternalID(id index.IndexInternalID) (string, error) { + docNum, err := docInternalToNumber(id) + if err != nil { + return "", err + } + segmentIndex, localDocNum := i.segmentIndexAndLocalDocNumFromGlobal(docNum) + + var found bool + var rv string + err = i.segment[segmentIndex].VisitDocument(localDocNum, func(field string, typ byte, value []byte, pos []uint64) bool { + if field == "_id" { + found = true + rv = string(value) + return false + } + return true + }) + if err != nil { + return "", err + } + + if found { + return rv, nil + } + return "", fmt.Errorf("document number %d not found", docNum) +} + +func (i *IndexSnapshot) InternalID(id string) (rv index.IndexInternalID, err error) { + // FIXME could be done more efficiently directly, but reusing for simplicity + tfr, err := i.TermFieldReader([]byte(id), "_id", false, false, false) + if err != nil { + return nil, err + } + defer func() { + if cerr := tfr.Close(); err == nil && cerr != nil { + err = cerr + } + }() + + next, err := tfr.Next(nil) + if err != nil || next == nil { + return nil, err + } + + return next.ID, nil +} + +func (i *IndexSnapshot) TermFieldReader(term []byte, field string, includeFreq, + includeNorm, includeTermVectors bool) (index.TermFieldReader, error) { + + rv := &IndexSnapshotTermFieldReader{ + term: term, + field: field, + snapshot: i, + postings: make([]segment.PostingsList, len(i.segment)), + iterators: make([]segment.PostingsIterator, len(i.segment)), + includeFreq: includeFreq, + includeNorm: includeNorm, + includeTermVectors: includeTermVectors, + } + for i, segment := range i.segment { + dict, err := segment.Dictionary(field) + if err != nil { + return nil, err + } + pl, err := dict.PostingsList(string(term), nil) + if err != nil { + return nil, err + } + rv.postings[i] = pl + rv.iterators[i] = pl.Iterator() + } + atomic.AddUint64(&i.parent.stats.TotTermSearchersStarted, uint64(1)) + return rv, nil +} + +func docNumberToBytes(buf []byte, in uint64) []byte { + if len(buf) != 8 { + if cap(buf) >= 8 { + buf = buf[0:8] + } else { + buf = make([]byte, 8) + } + } + binary.BigEndian.PutUint64(buf, in) + return buf +} + +func docInternalToNumber(in index.IndexInternalID) (uint64, error) { + var res uint64 + err := binary.Read(bytes.NewReader(in), binary.BigEndian, &res) + if err != nil { + return 0, err + } + return res, nil +} + +func (i *IndexSnapshot) DocumentVisitFieldTerms(id index.IndexInternalID, + fields []string, visitor index.DocumentFieldTermVisitor) error { + + docNum, err := docInternalToNumber(id) + if err != nil { + return err + } + segmentIndex, localDocNum := i.segmentIndexAndLocalDocNumFromGlobal(docNum) + if segmentIndex >= len(i.segment) { + return nil + } + + ss := i.segment[segmentIndex] + + if zaps, ok := ss.segment.(segment.DocumentFieldTermVisitable); ok { + // get the list of doc value persisted fields + pFields, err := zaps.VisitableDocValueFields() + if err != nil { + return err + } + // assort the fields for which terms look up have to + // be performed runtime + dvPendingFields := extractDvPendingFields(fields, pFields) + if len(dvPendingFields) == 0 { + // all fields are doc value persisted + return zaps.VisitDocumentFieldTerms(localDocNum, fields, visitor) + } + + // concurrently trigger the runtime doc value preparations for + // pending fields as well as the visit of the persisted doc values + errCh := make(chan error, 1) + + go func() { + defer close(errCh) + err := ss.cachedDocs.prepareFields(fields, ss) + if err != nil { + errCh <- err + } + }() + + // visit the persisted dv while the cache preparation is in progress + err = zaps.VisitDocumentFieldTerms(localDocNum, fields, visitor) + if err != nil { + return err + } + + // err out if fieldCache preparation failed + err = <-errCh + if err != nil { + return err + } + + visitDocumentFieldCacheTerms(localDocNum, dvPendingFields, ss, visitor) + return nil + } + + return prepareCacheVisitDocumentFieldTerms(localDocNum, fields, ss, visitor) +} + +func prepareCacheVisitDocumentFieldTerms(localDocNum uint64, fields []string, + ss *SegmentSnapshot, visitor index.DocumentFieldTermVisitor) error { + err := ss.cachedDocs.prepareFields(fields, ss) + if err != nil { + return err + } + + visitDocumentFieldCacheTerms(localDocNum, fields, ss, visitor) + return nil +} + +func visitDocumentFieldCacheTerms(localDocNum uint64, fields []string, + ss *SegmentSnapshot, visitor index.DocumentFieldTermVisitor) { + + for _, field := range fields { + if cachedFieldDocs, exists := ss.cachedDocs.cache[field]; exists { + if tlist, exists := cachedFieldDocs.docs[localDocNum]; exists { + for { + i := bytes.Index(tlist, TermSeparatorSplitSlice) + if i < 0 { + break + } + visitor(field, tlist[0:i]) + tlist = tlist[i+1:] + } + } + } + } + +} + +func extractDvPendingFields(requestedFields, persistedFields []string) []string { + removeMap := map[string]struct{}{} + for _, str := range persistedFields { + removeMap[str] = struct{}{} + } + + rv := make([]string, 0, len(requestedFields)) + for _, s := range requestedFields { + if _, ok := removeMap[s]; !ok { + rv = append(rv, s) + } + } + return rv +} + +func (i *IndexSnapshot) DumpAll() chan interface{} { + rv := make(chan interface{}) + go func() { + close(rv) + }() + return rv +} + +func (i *IndexSnapshot) DumpDoc(id string) chan interface{} { + rv := make(chan interface{}) + go func() { + close(rv) + }() + return rv +} + +func (i *IndexSnapshot) DumpFields() chan interface{} { + rv := make(chan interface{}) + go func() { + close(rv) + }() + return rv +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/snapshot_index_dict.go b/vendor/github.com/blevesearch/bleve/index/scorch/snapshot_index_dict.go new file mode 100644 index 0000000..3c902ca --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/snapshot_index_dict.go @@ -0,0 +1,92 @@ +// Copyright (c) 2017 Couchbase, 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 scorch + +import ( + "container/heap" + + "github.com/blevesearch/bleve/index" + "github.com/blevesearch/bleve/index/scorch/segment" +) + +type segmentDictCursor struct { + itr segment.DictionaryIterator + curr *index.DictEntry +} + +type IndexSnapshotFieldDict struct { + snapshot *IndexSnapshot + cursors []*segmentDictCursor +} + +func (i *IndexSnapshotFieldDict) Len() int { return len(i.cursors) } +func (i *IndexSnapshotFieldDict) Less(a, b int) bool { + return i.cursors[a].curr.Term < i.cursors[b].curr.Term +} +func (i *IndexSnapshotFieldDict) Swap(a, b int) { + i.cursors[a], i.cursors[b] = i.cursors[b], i.cursors[a] +} + +func (i *IndexSnapshotFieldDict) Push(x interface{}) { + i.cursors = append(i.cursors, x.(*segmentDictCursor)) +} + +func (i *IndexSnapshotFieldDict) Pop() interface{} { + n := len(i.cursors) + x := i.cursors[n-1] + i.cursors = i.cursors[0 : n-1] + return x +} + +func (i *IndexSnapshotFieldDict) Next() (*index.DictEntry, error) { + if len(i.cursors) <= 0 { + return nil, nil + } + rv := i.cursors[0].curr + next, err := i.cursors[0].itr.Next() + if err != nil { + return nil, err + } + if next == nil { + // at end of this cursor, remove it + heap.Pop(i) + } else { + // modified heap, fix it + i.cursors[0].curr = next + heap.Fix(i, 0) + } + // look for any other entries with the exact same term + for len(i.cursors) > 0 && i.cursors[0].curr.Term == rv.Term { + rv.Count += i.cursors[0].curr.Count + next, err := i.cursors[0].itr.Next() + if err != nil { + return nil, err + } + if next == nil { + // at end of this cursor, remove it + heap.Pop(i) + } else { + // modified heap, fix it + i.cursors[0].curr = next + heap.Fix(i, 0) + } + } + + return rv, nil +} + +func (i *IndexSnapshotFieldDict) Close() error { + return nil +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/snapshot_index_doc.go b/vendor/github.com/blevesearch/bleve/index/scorch/snapshot_index_doc.go new file mode 100644 index 0000000..27da208 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/snapshot_index_doc.go @@ -0,0 +1,80 @@ +// Copyright (c) 2017 Couchbase, 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 scorch + +import ( + "bytes" + "reflect" + + "github.com/RoaringBitmap/roaring" + "github.com/blevesearch/bleve/index" + "github.com/blevesearch/bleve/size" +) + +var reflectStaticSizeIndexSnapshotDocIDReader int + +func init() { + var isdr IndexSnapshotDocIDReader + reflectStaticSizeIndexSnapshotDocIDReader = int(reflect.TypeOf(isdr).Size()) +} + +type IndexSnapshotDocIDReader struct { + snapshot *IndexSnapshot + iterators []roaring.IntIterable + segmentOffset int +} + +func (i *IndexSnapshotDocIDReader) Size() int { + return reflectStaticSizeIndexSnapshotDocIDReader + size.SizeOfPtr +} + +func (i *IndexSnapshotDocIDReader) Next() (index.IndexInternalID, error) { + for i.segmentOffset < len(i.iterators) { + if !i.iterators[i.segmentOffset].HasNext() { + i.segmentOffset++ + continue + } + next := i.iterators[i.segmentOffset].Next() + // make segment number into global number by adding offset + globalOffset := i.snapshot.offsets[i.segmentOffset] + return docNumberToBytes(nil, uint64(next)+globalOffset), nil + } + return nil, nil +} + +func (i *IndexSnapshotDocIDReader) Advance(ID index.IndexInternalID) (index.IndexInternalID, error) { + // FIXME do something better + next, err := i.Next() + if err != nil { + return nil, err + } + if next == nil { + return nil, nil + } + for bytes.Compare(next, ID) < 0 { + next, err = i.Next() + if err != nil { + return nil, err + } + if next == nil { + break + } + } + return next, nil +} + +func (i *IndexSnapshotDocIDReader) Close() error { + return nil +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/snapshot_index_tfr.go b/vendor/github.com/blevesearch/bleve/index/scorch/snapshot_index_tfr.go new file mode 100644 index 0000000..e1a0e9a --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/snapshot_index_tfr.go @@ -0,0 +1,162 @@ +// Copyright (c) 2017 Couchbase, 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 scorch + +import ( + "bytes" + "reflect" + "sync/atomic" + + "github.com/blevesearch/bleve/index" + "github.com/blevesearch/bleve/index/scorch/segment" + "github.com/blevesearch/bleve/size" +) + +var reflectStaticSizeIndexSnapshotTermFieldReader int + +func init() { + var istfr IndexSnapshotTermFieldReader + reflectStaticSizeIndexSnapshotTermFieldReader = int(reflect.TypeOf(istfr).Size()) +} + +type IndexSnapshotTermFieldReader struct { + term []byte + field string + snapshot *IndexSnapshot + postings []segment.PostingsList + iterators []segment.PostingsIterator + segmentOffset int + includeFreq bool + includeNorm bool + includeTermVectors bool + currPosting segment.Posting + currID index.IndexInternalID +} + +func (i *IndexSnapshotTermFieldReader) Size() int { + sizeInBytes := reflectStaticSizeIndexSnapshotTermFieldReader + size.SizeOfPtr + + len(i.term) + + len(i.field) + + len(i.currID) + + for _, entry := range i.postings { + sizeInBytes += entry.Size() + } + + for _, entry := range i.iterators { + sizeInBytes += entry.Size() + } + + if i.currPosting != nil { + sizeInBytes += i.currPosting.Size() + } + + return sizeInBytes +} + +func (i *IndexSnapshotTermFieldReader) Next(preAlloced *index.TermFieldDoc) (*index.TermFieldDoc, error) { + rv := preAlloced + if rv == nil { + rv = &index.TermFieldDoc{} + } + // find the next hit + for i.segmentOffset < len(i.postings) { + next, err := i.iterators[i.segmentOffset].Next() + if err != nil { + return nil, err + } + if next != nil { + // make segment number into global number by adding offset + globalOffset := i.snapshot.offsets[i.segmentOffset] + nnum := next.Number() + rv.ID = docNumberToBytes(rv.ID, nnum+globalOffset) + i.postingToTermFieldDoc(next, rv) + + i.currID = rv.ID + i.currPosting = next + return rv, nil + } + i.segmentOffset++ + } + return nil, nil +} + +func (i *IndexSnapshotTermFieldReader) postingToTermFieldDoc(next segment.Posting, rv *index.TermFieldDoc) { + if i.includeFreq { + rv.Freq = next.Frequency() + } + if i.includeNorm { + rv.Norm = next.Norm() + } + if i.includeTermVectors { + locs := next.Locations() + rv.Vectors = make([]*index.TermFieldVector, len(locs)) + for i, loc := range locs { + rv.Vectors[i] = &index.TermFieldVector{ + Start: loc.Start(), + End: loc.End(), + Pos: loc.Pos(), + ArrayPositions: loc.ArrayPositions(), + Field: loc.Field(), + } + } + } +} + +func (i *IndexSnapshotTermFieldReader) Advance(ID index.IndexInternalID, preAlloced *index.TermFieldDoc) (*index.TermFieldDoc, error) { + // FIXME do something better + // for now, if we need to seek backwards, then restart from the beginning + if i.currPosting != nil && bytes.Compare(i.currID, ID) >= 0 { + i2, err := i.snapshot.TermFieldReader(i.term, i.field, + i.includeFreq, i.includeNorm, i.includeTermVectors) + if err != nil { + return nil, err + } + *i = *(i2.(*IndexSnapshotTermFieldReader)) + } + // FIXME do something better + next, err := i.Next(preAlloced) + if err != nil { + return nil, err + } + if next == nil { + return nil, nil + } + for bytes.Compare(next.ID, ID) < 0 { + next, err = i.Next(preAlloced) + if err != nil { + return nil, err + } + if next == nil { + break + } + } + return next, nil +} + +func (i *IndexSnapshotTermFieldReader) Count() uint64 { + var rv uint64 + for _, posting := range i.postings { + rv += posting.Count() + } + return rv +} + +func (i *IndexSnapshotTermFieldReader) Close() error { + if i.snapshot != nil { + atomic.AddUint64(&i.snapshot.parent.stats.TotTermSearchersFinished, uint64(1)) + } + return nil +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/snapshot_rollback.go b/vendor/github.com/blevesearch/bleve/index/scorch/snapshot_rollback.go new file mode 100644 index 0000000..2470033 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/snapshot_rollback.go @@ -0,0 +1,173 @@ +// Copyright (c) 2017 Couchbase, 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 scorch + +import ( + "fmt" + "log" + + "github.com/blevesearch/bleve/index/scorch/segment" + "github.com/boltdb/bolt" +) + +type RollbackPoint struct { + epoch uint64 + meta map[string][]byte +} + +func (r *RollbackPoint) GetInternal(key []byte) []byte { + return r.meta[string(key)] +} + +// RollbackPoints returns an array of rollback points available for +// the application to rollback to, with more recent rollback points +// (higher epochs) coming first. +func (s *Scorch) RollbackPoints() ([]*RollbackPoint, error) { + if s.rootBolt == nil { + return nil, fmt.Errorf("RollbackPoints: root is nil") + } + + // start a read-only bolt transaction + tx, err := s.rootBolt.Begin(false) + if err != nil { + return nil, fmt.Errorf("RollbackPoints: failed to start" + + " read-only transaction") + } + + // read-only bolt transactions to be rolled back + defer func() { + _ = tx.Rollback() + }() + + snapshots := tx.Bucket(boltSnapshotsBucket) + if snapshots == nil { + return nil, nil + } + + rollbackPoints := []*RollbackPoint{} + + c1 := snapshots.Cursor() + for k, _ := c1.Last(); k != nil; k, _ = c1.Prev() { + _, snapshotEpoch, err := segment.DecodeUvarintAscending(k) + if err != nil { + log.Printf("RollbackPoints:"+ + " unable to parse segment epoch %x, continuing", k) + continue + } + + snapshot := snapshots.Bucket(k) + if snapshot == nil { + log.Printf("RollbackPoints:"+ + " snapshot key, but bucket missing %x, continuing", k) + continue + } + + meta := map[string][]byte{} + c2 := snapshot.Cursor() + for j, _ := c2.First(); j != nil; j, _ = c2.Next() { + if j[0] == boltInternalKey[0] { + internalBucket := snapshot.Bucket(j) + err = internalBucket.ForEach(func(key []byte, val []byte) error { + copiedVal := append([]byte(nil), val...) + meta[string(key)] = copiedVal + return nil + }) + if err != nil { + break + } + } + } + + if err != nil { + log.Printf("RollbackPoints:"+ + " failed in fetching internal data: %v", err) + continue + } + + rollbackPoints = append(rollbackPoints, &RollbackPoint{ + epoch: snapshotEpoch, + meta: meta, + }) + } + + return rollbackPoints, nil +} + +// Rollback atomically and durably (if unsafeBatch is unset) brings +// the store back to the point in time as represented by the +// RollbackPoint. Rollback() should only be passed a RollbackPoint +// that came from the same store using the RollbackPoints() API. +func (s *Scorch) Rollback(to *RollbackPoint) error { + if to == nil { + return fmt.Errorf("Rollback: RollbackPoint is nil") + } + + if s.rootBolt == nil { + return fmt.Errorf("Rollback: root is nil") + } + + revert := &snapshotReversion{} + + s.rootLock.Lock() + + err := s.rootBolt.View(func(tx *bolt.Tx) error { + snapshots := tx.Bucket(boltSnapshotsBucket) + if snapshots == nil { + return fmt.Errorf("Rollback: no snapshots available") + } + + pos := segment.EncodeUvarintAscending(nil, to.epoch) + + snapshot := snapshots.Bucket(pos) + if snapshot == nil { + return fmt.Errorf("Rollback: snapshot not found") + } + + indexSnapshot, err := s.loadSnapshot(snapshot) + if err != nil { + return fmt.Errorf("Rollback: unable to load snapshot: %v", err) + } + + // add segments referenced by loaded index snapshot to the + // ineligibleForRemoval map + for _, segSnap := range indexSnapshot.segment { + filename := zapFileName(segSnap.id) + s.ineligibleForRemoval[filename] = true + } + + revert.snapshot = indexSnapshot + revert.applied = make(chan error) + revert.persisted = make(chan error) + + return nil + }) + + s.rootLock.Unlock() + + if err != nil { + return err + } + + // introduce the reversion + s.revertToSnapshots <- revert + + // block until this snapshot is applied + err = <-revert.applied + if err != nil { + return fmt.Errorf("Rollback: failed with err: %v", err) + } + + return <-revert.persisted +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/snapshot_rollback_test.go b/vendor/github.com/blevesearch/bleve/index/scorch/snapshot_rollback_test.go new file mode 100644 index 0000000..0065a74 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/snapshot_rollback_test.go @@ -0,0 +1,215 @@ +// Copyright (c) 2017 Couchbase, 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 scorch + +import ( + "testing" + + "github.com/blevesearch/bleve/document" + "github.com/blevesearch/bleve/index" +) + +func TestIndexRollback(t *testing.T) { + numSnapshotsToKeepOrig := NumSnapshotsToKeep + NumSnapshotsToKeep = 1000 + + defer func() { + NumSnapshotsToKeep = numSnapshotsToKeepOrig + + err := DestroyTest() + if err != nil { + t.Fatal(err) + } + }() + + analysisQueue := index.NewAnalysisQueue(1) + idx, err := NewScorch(Name, testConfig, analysisQueue) + if err != nil { + t.Fatal(err) + } + defer func() { + err := idx.Close() + if err != nil { + t.Fatal(err) + } + }() + + sh, ok := idx.(*Scorch) + if !ok { + t.Fatalf("Not a scorch index?") + } + + err = sh.openBolt() + if err != nil { + t.Fatalf("error opening index: %v", err) + } + + // start background goroutines except for the merger, which + // simulates a super slow merger + sh.asyncTasks.Add(2) + go sh.mainLoop() + go sh.persisterLoop() + + // should have no rollback points initially + rollbackPoints, err := sh.RollbackPoints() + if err != nil { + t.Fatalf("expected no err, got: %v, %d", err, len(rollbackPoints)) + } + if len(rollbackPoints) != 0 { + t.Fatalf("expected no rollbackPoints, got %d", len(rollbackPoints)) + } + + // create a batch, insert 2 new documents + batch := index.NewBatch() + doc := document.NewDocument("1") + doc.AddField(document.NewTextField("name", []uint64{}, []byte("test1"))) + batch.Update(doc) + doc = document.NewDocument("2") + doc.AddField(document.NewTextField("name", []uint64{}, []byte("test2"))) + batch.Update(doc) + + err = idx.Batch(batch) + if err != nil { + t.Fatal(err) + } + + readerSlow, err := idx.Reader() // keep snapshot around so it's not cleaned up + if err != nil { + t.Fatal(err) + } + defer func() { + _ = readerSlow.Close() + }() + + // fetch rollback points after first batch + rollbackPoints, err = sh.RollbackPoints() + if err != nil { + t.Fatalf("expected no err, got: %v, %d", err, len(rollbackPoints)) + } + if len(rollbackPoints) == 0 { + t.Fatalf("expected some rollbackPoints, got none") + } + + // set this as a rollback point for the future + rollbackPoint := rollbackPoints[0] + + // create another batch, insert 2 new documents, and delete an existing one + batch = index.NewBatch() + doc = document.NewDocument("3") + doc.AddField(document.NewTextField("name", []uint64{}, []byte("test3"))) + batch.Update(doc) + doc = document.NewDocument("4") + doc.AddField(document.NewTextField("name", []uint64{}, []byte("test4"))) + batch.Update(doc) + batch.Delete("1") + + err = idx.Batch(batch) + if err != nil { + t.Fatal(err) + } + + rollbackPointsB, err := sh.RollbackPoints() + if err != nil || len(rollbackPointsB) <= len(rollbackPoints) { + t.Fatalf("expected no err, got: %v, %d", err, len(rollbackPointsB)) + } + + found := false + for _, p := range rollbackPointsB { + if rollbackPoint.epoch == p.epoch { + found = true + } + } + if !found { + t.Fatalf("expected rollbackPoint epoch to still be available") + } + + reader, err := idx.Reader() + if err != nil { + t.Fatal(err) + } + + docCount, err := reader.DocCount() + if err != nil { + t.Fatal(err) + } + + // expect docs 2, 3, 4 + if docCount != 3 { + t.Fatalf("unexpected doc count: %v", docCount) + } + ret, err := reader.Document("1") + if err != nil || ret != nil { + t.Fatal(ret, err) + } + ret, err = reader.Document("2") + if err != nil || ret == nil { + t.Fatal(ret, err) + } + ret, err = reader.Document("3") + if err != nil || ret == nil { + t.Fatal(ret, err) + } + ret, err = reader.Document("4") + if err != nil || ret == nil { + t.Fatal(ret, err) + } + + err = reader.Close() + if err != nil { + t.Fatal(err) + } + + // rollback to the selected rollback point + err = sh.Rollback(rollbackPoint) + if err != nil { + t.Fatal(err) + } + + reader, err = idx.Reader() + if err != nil { + t.Fatal(err) + } + + docCount, err = reader.DocCount() + if err != nil { + t.Fatal(err) + } + + // expect only docs 1, 2 + if docCount != 2 { + t.Fatalf("unexpected doc count: %v", docCount) + } + ret, err = reader.Document("1") + if err != nil || ret == nil { + t.Fatal(ret, err) + } + ret, err = reader.Document("2") + if err != nil || ret == nil { + t.Fatal(ret, err) + } + ret, err = reader.Document("3") + if err != nil || ret != nil { + t.Fatal(ret, err) + } + ret, err = reader.Document("4") + if err != nil || ret != nil { + t.Fatal(ret, err) + } + + err = reader.Close() + if err != nil { + t.Fatal(err) + } +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/snapshot_segment.go b/vendor/github.com/blevesearch/bleve/index/scorch/snapshot_segment.go new file mode 100644 index 0000000..edf52a6 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/snapshot_segment.go @@ -0,0 +1,247 @@ +// Copyright (c) 2017 Couchbase, 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 scorch + +import ( + "sync" + + "github.com/RoaringBitmap/roaring" + "github.com/blevesearch/bleve/index/scorch/segment" + "github.com/blevesearch/bleve/size" +) + +var TermSeparator byte = 0xff + +var TermSeparatorSplitSlice = []byte{TermSeparator} + +type SegmentDictionarySnapshot struct { + s *SegmentSnapshot + d segment.TermDictionary +} + +func (s *SegmentDictionarySnapshot) PostingsList(term string, except *roaring.Bitmap) (segment.PostingsList, error) { + // TODO: if except is non-nil, perhaps need to OR it with s.s.deleted? + return s.d.PostingsList(term, s.s.deleted) +} + +func (s *SegmentDictionarySnapshot) Iterator() segment.DictionaryIterator { + return s.d.Iterator() +} + +func (s *SegmentDictionarySnapshot) PrefixIterator(prefix string) segment.DictionaryIterator { + return s.d.PrefixIterator(prefix) +} + +func (s *SegmentDictionarySnapshot) RangeIterator(start, end string) segment.DictionaryIterator { + return s.d.RangeIterator(start, end) +} + +type SegmentSnapshot struct { + id uint64 + segment segment.Segment + deleted *roaring.Bitmap + + cachedDocs *cachedDocs +} + +func (s *SegmentSnapshot) Segment() segment.Segment { + return s.segment +} + +func (s *SegmentSnapshot) Deleted() *roaring.Bitmap { + return s.deleted +} + +func (s *SegmentSnapshot) Id() uint64 { + return s.id +} + +func (s *SegmentSnapshot) FullSize() int64 { + return int64(s.segment.Count()) +} + +func (s SegmentSnapshot) LiveSize() int64 { + return int64(s.Count()) +} + +func (s *SegmentSnapshot) Close() error { + return s.segment.Close() +} + +func (s *SegmentSnapshot) VisitDocument(num uint64, visitor segment.DocumentFieldValueVisitor) error { + return s.segment.VisitDocument(num, visitor) +} + +func (s *SegmentSnapshot) Count() uint64 { + + rv := s.segment.Count() + if s.deleted != nil { + rv -= s.deleted.GetCardinality() + } + return rv +} + +func (s *SegmentSnapshot) Dictionary(field string) (segment.TermDictionary, error) { + d, err := s.segment.Dictionary(field) + if err != nil { + return nil, err + } + return &SegmentDictionarySnapshot{ + s: s, + d: d, + }, nil +} + +func (s *SegmentSnapshot) DocNumbers(docIDs []string) (*roaring.Bitmap, error) { + rv, err := s.segment.DocNumbers(docIDs) + if err != nil { + return nil, err + } + if s.deleted != nil { + rv.AndNot(s.deleted) + } + return rv, nil +} + +// DocNumbersLive returns bitsit containing doc numbers for all live docs +func (s *SegmentSnapshot) DocNumbersLive() *roaring.Bitmap { + rv := roaring.NewBitmap() + rv.AddRange(0, s.segment.Count()) + if s.deleted != nil { + rv.AndNot(s.deleted) + } + return rv +} + +func (s *SegmentSnapshot) Fields() []string { + return s.segment.Fields() +} + +func (s *SegmentSnapshot) Size() (rv int) { + rv = s.segment.Size() + if s.deleted != nil { + rv += int(s.deleted.GetSizeInBytes()) + } + rv += s.cachedDocs.Size() + return +} + +type cachedFieldDocs struct { + readyCh chan struct{} // closed when the cachedFieldDocs.docs is ready to be used. + err error // Non-nil if there was an error when preparing this cachedFieldDocs. + docs map[uint64][]byte // Keyed by localDocNum, value is a list of terms delimited by 0xFF. + size uint64 +} + +func (cfd *cachedFieldDocs) prepareFields(field string, ss *SegmentSnapshot) { + defer close(cfd.readyCh) + + cfd.size += uint64(size.SizeOfUint64) /* size field */ + dict, err := ss.segment.Dictionary(field) + if err != nil { + cfd.err = err + return + } + + dictItr := dict.Iterator() + next, err := dictItr.Next() + for err == nil && next != nil { + postings, err1 := dict.PostingsList(next.Term, nil) + if err1 != nil { + cfd.err = err1 + return + } + + cfd.size += uint64(size.SizeOfUint64) /* map key */ + postingsItr := postings.Iterator() + nextPosting, err2 := postingsItr.Next() + for err2 == nil && nextPosting != nil { + docNum := nextPosting.Number() + cfd.docs[docNum] = append(cfd.docs[docNum], []byte(next.Term)...) + cfd.docs[docNum] = append(cfd.docs[docNum], TermSeparator) + cfd.size += uint64(len(next.Term) + 1) // map value + nextPosting, err2 = postingsItr.Next() + } + + if err2 != nil { + cfd.err = err2 + return + } + + next, err = dictItr.Next() + } + + if err != nil { + cfd.err = err + return + } +} + +type cachedDocs struct { + m sync.Mutex // As the cache is asynchronously prepared, need a lock + cache map[string]*cachedFieldDocs // Keyed by field + size uint64 +} + +func (c *cachedDocs) prepareFields(wantedFields []string, ss *SegmentSnapshot) error { + c.m.Lock() + if c.cache == nil { + c.cache = make(map[string]*cachedFieldDocs, len(ss.Fields())) + } + + for _, field := range wantedFields { + _, exists := c.cache[field] + if !exists { + c.cache[field] = &cachedFieldDocs{ + readyCh: make(chan struct{}), + docs: make(map[uint64][]byte), + } + + go c.cache[field].prepareFields(field, ss) + } + } + + for _, field := range wantedFields { + cachedFieldDocs := c.cache[field] + c.m.Unlock() + <-cachedFieldDocs.readyCh + + if cachedFieldDocs.err != nil { + return cachedFieldDocs.err + } + c.m.Lock() + } + c.updateSizeLOCKED() + + c.m.Unlock() + return nil +} + +func (c *cachedDocs) Size() int { + return int(c.size) +} + +func (c *cachedDocs) updateSizeLOCKED() { + sizeInBytes := 0 + for k, v := range c.cache { // cachedFieldDocs + sizeInBytes += len(k) + if v != nil { + for _, entry := range v.docs { // docs + sizeInBytes += 8 /* size of uint64 */ + len(entry) + } + } + } + c.size = uint64(sizeInBytes) +} diff --git a/vendor/github.com/blevesearch/bleve/index/scorch/stats.go b/vendor/github.com/blevesearch/bleve/index/scorch/stats.go new file mode 100644 index 0000000..e9bcd91 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/index/scorch/stats.go @@ -0,0 +1,129 @@ +// Copyright (c) 2017 Couchbase, 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 scorch + +import ( + "encoding/json" + "reflect" + "sync/atomic" +) + +// Stats tracks statistics about the index, fields that are +// prefixed like CurXxxx are gauges (can go up and down), +// and fields that are prefixed like TotXxxx are monotonically +// increasing counters. +type Stats struct { + TotUpdates uint64 + TotDeletes uint64 + + TotBatches uint64 + TotBatchesEmpty uint64 + TotBatchIntroTime uint64 + MaxBatchIntroTime uint64 + + TotOnErrors uint64 + + TotAnalysisTime uint64 + TotIndexTime uint64 + + TotIndexedPlainTextBytes uint64 + + TotTermSearchersStarted uint64 + TotTermSearchersFinished uint64 + + TotIntroduceLoop uint64 + TotIntroduceSegmentBeg uint64 + TotIntroduceSegmentEnd uint64 + TotIntroducePersistBeg uint64 + TotIntroducePersistEnd uint64 + TotIntroduceMergeBeg uint64 + TotIntroduceMergeEnd uint64 + TotIntroduceRevertBeg uint64 + TotIntroduceRevertEnd uint64 + + TotIntroducedItems uint64 + TotIntroducedSegmentsBatch uint64 + TotIntroducedSegmentsMerge uint64 + + TotPersistLoopBeg uint64 + TotPersistLoopErr uint64 + TotPersistLoopProgress uint64 + TotPersistLoopWait uint64 + TotPersistLoopWaitNotified uint64 + TotPersistLoopEnd uint64 + + TotPersistedItems uint64 + TotPersistedSegments uint64 + + TotPersisterSlowMergerPause uint64 + TotPersisterSlowMergerResume uint64 + + TotFileMergeLoopBeg uint64 + TotFileMergeLoopErr uint64 + TotFileMergeLoopEnd uint64 + + TotFileMergePlan uint64 + TotFileMergePlanErr uint64 + TotFileMergePlanNone uint64 + TotFileMergePlanOk uint64 + + TotFileMergePlanTasks uint64 + TotFileMergePlanTasksDone uint64 + TotFileMergePlanTasksErr uint64 + TotFileMergePlanTasksSegments uint64 + TotFileMergePlanTasksSegmentsEmpty uint64 + + TotFileMergeSegmentsEmpty uint64 + TotFileMergeSegments uint64 + TotFileMergeWrittenBytes uint64 + + TotFileMergeZapBeg uint64 + TotFileMergeZapEnd uint64 + TotFileMergeZapTime uint64 + MaxFileMergeZapTime uint64 + + TotFileMergeIntroductions uint64 + TotFileMergeIntroductionsDone uint64 + + TotMemMergeBeg uint64 + TotMemMergeErr uint64 + TotMemMergeDone uint64 + TotMemMergeZapBeg uint64 + TotMemMergeZapEnd uint64 + TotMemMergeZapTime uint64 + MaxMemMergeZapTime uint64 + TotMemMergeSegments uint64 +} + +// atomically populates the returned map +func (s *Stats) ToMap() map[string]interface{} { + m := map[string]interface{}{} + sve := reflect.ValueOf(s).Elem() + svet := sve.Type() + for i := 0; i < svet.NumField(); i++ { + svef := sve.Field(i) + if svef.CanAddr() { + svefp := svef.Addr().Interface() + m[svet.Field(i).Name] = atomic.LoadUint64(svefp.(*uint64)) + } + } + return m +} + +// MarshalJSON implements json.Marshaler, and in contrast to standard +// json marshaling provides atomic safety +func (s *Stats) MarshalJSON() ([]byte, error) { + return json.Marshal(s.ToMap()) +} diff --git a/vendor/github.com/blevesearch/bleve/index/store/moss/lower.go b/vendor/github.com/blevesearch/bleve/index/store/moss/lower.go index 2aff2ae..1133f95 100644 --- a/vendor/github.com/blevesearch/bleve/index/store/moss/lower.go +++ b/vendor/github.com/blevesearch/bleve/index/store/moss/lower.go @@ -13,7 +13,7 @@ // limitations under the License. // Package moss provides a KVStore implementation based on the -// github.com/couchbaselabs/moss library. +// github.com/couchbase/moss library. package moss diff --git a/vendor/github.com/blevesearch/bleve/index/store/moss/stats.go b/vendor/github.com/blevesearch/bleve/index/store/moss/stats.go index 9eda1f2..4a64936 100644 --- a/vendor/github.com/blevesearch/bleve/index/store/moss/stats.go +++ b/vendor/github.com/blevesearch/bleve/index/store/moss/stats.go @@ -44,6 +44,12 @@ func (s *stats) statsMap() map[string]interface{} { ms["kv"] = s.s.llstats() } + if msw, ok := s.s.llstore.(*mossStoreWrapper); ok { + ms["store_histograms"] = msw.Actual().Histograms().String() + } + + ms["coll_histograms"] = s.s.ms.Histograms().String() + return ms } diff --git a/vendor/github.com/blevesearch/bleve/index/store/moss/store.go b/vendor/github.com/blevesearch/bleve/index/store/moss/store.go index a7aa4d4..89ea553 100644 --- a/vendor/github.com/blevesearch/bleve/index/store/moss/store.go +++ b/vendor/github.com/blevesearch/bleve/index/store/moss/store.go @@ -13,7 +13,7 @@ // limitations under the License. // Package moss provides a KVStore implementation based on the -// github.com/couchbaselabs/moss library. +// github.com/couchbase/moss library. package moss diff --git a/vendor/github.com/blevesearch/bleve/index/upsidedown/index_reader.go b/vendor/github.com/blevesearch/bleve/index/upsidedown/index_reader.go index 77d523c..e045f67 100644 --- a/vendor/github.com/blevesearch/bleve/index/upsidedown/index_reader.go +++ b/vendor/github.com/blevesearch/bleve/index/upsidedown/index_reader.go @@ -15,11 +15,20 @@ package upsidedown import ( + "reflect" + "github.com/blevesearch/bleve/document" "github.com/blevesearch/bleve/index" "github.com/blevesearch/bleve/index/store" ) +var reflectStaticSizeIndexReader int + +func init() { + var ir IndexReader + reflectStaticSizeIndexReader = int(reflect.TypeOf(ir).Size()) +} + type IndexReader struct { index *UpsideDownCouch kvreader store.KVReader diff --git a/vendor/github.com/blevesearch/bleve/index/upsidedown/reader.go b/vendor/github.com/blevesearch/bleve/index/upsidedown/reader.go index 76032bf..bc0fef1 100644 --- a/vendor/github.com/blevesearch/bleve/index/upsidedown/reader.go +++ b/vendor/github.com/blevesearch/bleve/index/upsidedown/reader.go @@ -16,13 +16,27 @@ package upsidedown import ( "bytes" + "reflect" "sort" "sync/atomic" "github.com/blevesearch/bleve/index" "github.com/blevesearch/bleve/index/store" + "github.com/blevesearch/bleve/size" ) +var reflectStaticSizeUpsideDownCouchTermFieldReader int +var reflectStaticSizeUpsideDownCouchDocIDReader int + +func init() { + var tfr UpsideDownCouchTermFieldReader + reflectStaticSizeUpsideDownCouchTermFieldReader = + int(reflect.TypeOf(tfr).Size()) + var cdr UpsideDownCouchDocIDReader + reflectStaticSizeUpsideDownCouchDocIDReader = + int(reflect.TypeOf(cdr).Size()) +} + type UpsideDownCouchTermFieldReader struct { count uint64 indexReader *IndexReader @@ -35,6 +49,19 @@ type UpsideDownCouchTermFieldReader struct { includeTermVectors bool } +func (r *UpsideDownCouchTermFieldReader) Size() int { + sizeInBytes := reflectStaticSizeUpsideDownCouchTermFieldReader + size.SizeOfPtr + + len(r.term) + + r.tfrPrealloc.Size() + + len(r.keyBuf) + + if r.tfrNext != nil { + sizeInBytes += r.tfrNext.Size() + } + + return sizeInBytes +} + func newUpsideDownCouchTermFieldReader(indexReader *IndexReader, term []byte, field uint16, includeFreq, includeNorm, includeTermVectors bool) (*UpsideDownCouchTermFieldReader, error) { bufNeeded := termFrequencyRowKeySize(term, nil) if bufNeeded < dictionaryRowKeySize(term) { @@ -174,8 +201,18 @@ type UpsideDownCouchDocIDReader struct { onlyMode bool } -func newUpsideDownCouchDocIDReader(indexReader *IndexReader) (*UpsideDownCouchDocIDReader, error) { +func (r *UpsideDownCouchDocIDReader) Size() int { + sizeInBytes := reflectStaticSizeUpsideDownCouchDocIDReader + + reflectStaticSizeIndexReader + size.SizeOfPtr + + for _, entry := range r.only { + sizeInBytes += size.SizeOfString + len(entry) + } + return sizeInBytes +} + +func newUpsideDownCouchDocIDReader(indexReader *IndexReader) (*UpsideDownCouchDocIDReader, error) { startBytes := []byte{0x0} endBytes := []byte{0xff} @@ -190,15 +227,18 @@ func newUpsideDownCouchDocIDReader(indexReader *IndexReader) (*UpsideDownCouchDo } func newUpsideDownCouchDocIDReaderOnly(indexReader *IndexReader, ids []string) (*UpsideDownCouchDocIDReader, error) { + // we don't actually own the list of ids, so if before we sort we must copy + idsCopy := make([]string, len(ids)) + copy(idsCopy, ids) // ensure ids are sorted - sort.Strings(ids) + sort.Strings(idsCopy) startBytes := []byte{0x0} - if len(ids) > 0 { - startBytes = []byte(ids[0]) + if len(idsCopy) > 0 { + startBytes = []byte(idsCopy[0]) } endBytes := []byte{0xff} - if len(ids) > 0 { - endBytes = incrementBytes([]byte(ids[len(ids)-1])) + if len(idsCopy) > 0 { + endBytes = incrementBytes([]byte(idsCopy[len(idsCopy)-1])) } bisr := NewBackIndexRow(startBytes, nil, nil) bier := NewBackIndexRow(endBytes, nil, nil) @@ -207,7 +247,7 @@ func newUpsideDownCouchDocIDReaderOnly(indexReader *IndexReader, ids []string) ( return &UpsideDownCouchDocIDReader{ indexReader: indexReader, iterator: it, - only: ids, + only: idsCopy, onlyMode: true, }, nil } diff --git a/vendor/github.com/blevesearch/bleve/index/upsidedown/row.go b/vendor/github.com/blevesearch/bleve/index/upsidedown/row.go index 7e503ae..ba50314 100644 --- a/vendor/github.com/blevesearch/bleve/index/upsidedown/row.go +++ b/vendor/github.com/blevesearch/bleve/index/upsidedown/row.go @@ -20,10 +20,22 @@ import ( "fmt" "io" "math" + "reflect" + "github.com/blevesearch/bleve/size" "github.com/golang/protobuf/proto" ) +var reflectStaticSizeTermFrequencyRow int +var reflectStaticSizeTermVector int + +func init() { + var tfr TermFrequencyRow + reflectStaticSizeTermFrequencyRow = int(reflect.TypeOf(tfr).Size()) + var tv TermVector + reflectStaticSizeTermVector = int(reflect.TypeOf(tv).Size()) +} + const ByteSeparator byte = 0xff type UpsideDownCouchRowStream chan UpsideDownCouchRow @@ -358,6 +370,11 @@ type TermVector struct { end uint64 } +func (tv *TermVector) Size() int { + return reflectStaticSizeTermVector + size.SizeOfPtr + + len(tv.arrayPositions)*size.SizeOfUint64 +} + func (tv *TermVector) String() string { return fmt.Sprintf("Field: %d Pos: %d Start: %d End %d ArrayPositions: %#v", tv.field, tv.pos, tv.start, tv.end, tv.arrayPositions) } @@ -371,6 +388,18 @@ type TermFrequencyRow struct { field uint16 } +func (tfr *TermFrequencyRow) Size() int { + sizeInBytes := reflectStaticSizeTermFrequencyRow + + len(tfr.term) + + len(tfr.doc) + + for _, entry := range tfr.vectors { + sizeInBytes += entry.Size() + } + + return sizeInBytes +} + func (tfr *TermFrequencyRow) Term() []byte { return tfr.term } diff --git a/vendor/github.com/blevesearch/bleve/index/upsidedown/upsidedown.go b/vendor/github.com/blevesearch/bleve/index/upsidedown/upsidedown.go index a8ef538..70e6e45 100644 --- a/vendor/github.com/blevesearch/bleve/index/upsidedown/upsidedown.go +++ b/vendor/github.com/blevesearch/bleve/index/upsidedown/upsidedown.go @@ -293,7 +293,7 @@ func (udc *UpsideDownCouch) batchRows(writer store.KVWriter, addRowsAll [][]Upsi } func (udc *UpsideDownCouch) Open() (err error) { - //acquire the write mutex for the duratin of Open() + // acquire the write mutex for the duration of Open() udc.writeMutex.Lock() defer udc.writeMutex.Unlock() @@ -837,6 +837,11 @@ func (udc *UpsideDownCouch) Batch(batch *index.Batch) (err error) { docBackIndexRowErr = err return } + defer func() { + if cerr := kvreader.Close(); err == nil && cerr != nil { + docBackIndexRowErr = cerr + } + }() for docID, doc := range batch.IndexOps { backIndexRow, err := backIndexRowForDoc(kvreader, index.IndexInternalID(docID)) @@ -847,12 +852,6 @@ func (udc *UpsideDownCouch) Batch(batch *index.Batch) (err error) { docBackIndexRowCh <- &docBackIndexRow{docID, doc, backIndexRow} } - - err = kvreader.Close() - if err != nil { - docBackIndexRowErr = err - return - } }() // wait for analysis result diff --git a/vendor/github.com/blevesearch/bleve/index_alias_impl.go b/vendor/github.com/blevesearch/bleve/index_alias_impl.go index 9e9a359..f678a05 100644 --- a/vendor/github.com/blevesearch/bleve/index_alias_impl.go +++ b/vendor/github.com/blevesearch/bleve/index_alias_impl.go @@ -15,12 +15,11 @@ package bleve import ( + "context" "sort" "sync" "time" - "golang.org/x/net/context" - "github.com/blevesearch/bleve/document" "github.com/blevesearch/bleve/index" "github.com/blevesearch/bleve/index/store" diff --git a/vendor/github.com/blevesearch/bleve/index_alias_impl_test.go b/vendor/github.com/blevesearch/bleve/index_alias_impl_test.go index a594066..9599b89 100644 --- a/vendor/github.com/blevesearch/bleve/index_alias_impl_test.go +++ b/vendor/github.com/blevesearch/bleve/index_alias_impl_test.go @@ -15,13 +15,12 @@ package bleve import ( + "context" "fmt" "reflect" "testing" "time" - "golang.org/x/net/context" - "github.com/blevesearch/bleve/document" "github.com/blevesearch/bleve/index" "github.com/blevesearch/bleve/index/store" @@ -783,7 +782,9 @@ func TestMultiSearchTimeout(t *testing.T) { }} // first run with absurdly long time out, should succeed - ctx, _ = context.WithTimeout(context.Background(), 10*time.Second) + var cancel context.CancelFunc + ctx, cancel = context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() query := NewTermQuery("test") sr := NewSearchRequest(query) res, err := MultiSearch(ctx, sr, ei1, ei2) @@ -804,7 +805,8 @@ func TestMultiSearchTimeout(t *testing.T) { } // now run a search again with an absurdly low timeout (should timeout) - ctx, _ = context.WithTimeout(context.Background(), 1*time.Microsecond) + ctx, cancel = context.WithTimeout(context.Background(), 1*time.Microsecond) + defer cancel() res, err = MultiSearch(ctx, sr, ei1, ei2) if err != nil { t.Errorf("expected no error, got %v", err) @@ -830,7 +832,6 @@ func TestMultiSearchTimeout(t *testing.T) { } // now run a search again with a normal timeout, but cancel it first - var cancel context.CancelFunc ctx, cancel = context.WithTimeout(context.Background(), 5*time.Second) cancel() res, err = MultiSearch(ctx, sr, ei1, ei2) @@ -937,7 +938,9 @@ func TestMultiSearchTimeoutPartial(t *testing.T) { // ei3 is set to take >50ms, so run search with timeout less than // this, this should return partial results - ctx, _ = context.WithTimeout(context.Background(), 25*time.Millisecond) + var cancel context.CancelFunc + ctx, cancel = context.WithTimeout(context.Background(), 25*time.Millisecond) + defer cancel() query := NewTermQuery("test") sr := NewSearchRequest(query) expected := &SearchResult{ @@ -1090,8 +1093,9 @@ func TestIndexAliasMultipleLayer(t *testing.T) { // ei2 and ei3 have 50ms delay // search across aliasTop should still get results from ei1 and ei4 // total should still be 4 - - ctx, _ = context.WithTimeout(context.Background(), 25*time.Millisecond) + var cancel context.CancelFunc + ctx, cancel = context.WithTimeout(context.Background(), 25*time.Millisecond) + defer cancel() query := NewTermQuery("test") sr := NewSearchRequest(query) expected := &SearchResult{ diff --git a/vendor/github.com/blevesearch/bleve/index_impl.go b/vendor/github.com/blevesearch/bleve/index_impl.go index 799b582..4d03b78 100644 --- a/vendor/github.com/blevesearch/bleve/index_impl.go +++ b/vendor/github.com/blevesearch/bleve/index_impl.go @@ -15,6 +15,7 @@ package bleve import ( + "context" "encoding/json" "fmt" "os" @@ -22,8 +23,6 @@ import ( "sync/atomic" "time" - "golang.org/x/net/context" - "github.com/blevesearch/bleve/document" "github.com/blevesearch/bleve/index" "github.com/blevesearch/bleve/index/store" @@ -51,6 +50,12 @@ const storePath = "store" var mappingInternalKey = []byte("_mapping") +const SearchQueryStartCallbackKey = "_search_query_start_callback_key" +const SearchQueryEndCallbackKey = "_search_query_end_callback_key" + +type SearchQueryStartCallbackFn func(size uint64) error +type SearchQueryEndCallbackFn func(size uint64) error + func indexStorePath(path string) string { return path + string(os.PathSeparator) + storePath } @@ -363,8 +368,59 @@ func (i *indexImpl) Search(req *SearchRequest) (sr *SearchResult, err error) { return i.SearchInContext(context.Background(), req) } +// memNeededForSearch is a helper function that returns an estimate of RAM +// needed to execute a search request. +func memNeededForSearch(req *SearchRequest, + searcher search.Searcher, + topnCollector *collector.TopNCollector) uint64 { + + backingSize := req.Size + req.From + 1 + if req.Size+req.From > collector.PreAllocSizeSkipCap { + backingSize = collector.PreAllocSizeSkipCap + 1 + } + numDocMatches := backingSize + searcher.DocumentMatchPoolSize() + + estimate := 0 + + // overhead, size in bytes from collector + estimate += topnCollector.Size() + + var dm search.DocumentMatch + sizeOfDocumentMatch := dm.Size() + + // pre-allocing DocumentMatchPool + var sc search.SearchContext + estimate += sc.Size() + numDocMatches*sizeOfDocumentMatch + + // searcher overhead + estimate += searcher.Size() + + // overhead from results, lowestMatchOutsideResults + estimate += (numDocMatches + 1) * sizeOfDocumentMatch + + // additional overhead from SearchResult + var sr SearchResult + estimate += sr.Size() + + // overhead from facet results + if req.Facets != nil { + var fr search.FacetResult + estimate += len(req.Facets) * fr.Size() + } + + // highlighting, store + var d document.Document + if len(req.Fields) > 0 || req.Highlight != nil { + for i := 0; i < (req.Size + req.From); i++ { // size + from => number of hits + estimate += (req.Size + req.From) * d.Size() + } + } + + return uint64(estimate) +} + // SearchInContext executes a search request operation within the provided -// Context. Returns a SearchResult object or an error. +// Context. Returns a SearchResult object or an error. func (i *indexImpl) SearchInContext(ctx context.Context, req *SearchRequest) (sr *SearchResult, err error) { i.mutex.RLock() defer i.mutex.RUnlock() @@ -429,6 +485,24 @@ func (i *indexImpl) SearchInContext(ctx context.Context, req *SearchRequest) (sr collector.SetFacetsBuilder(facetsBuilder) } + memNeeded := memNeededForSearch(req, searcher, collector) + if cb := ctx.Value(SearchQueryStartCallbackKey); cb != nil { + if cbF, ok := cb.(SearchQueryStartCallbackFn); ok { + err = cbF(memNeeded) + } + } + if err != nil { + return nil, err + } + + if cb := ctx.Value(SearchQueryEndCallbackKey); cb != nil { + if cbF, ok := cb.(SearchQueryEndCallbackFn); ok { + defer func() { + _ = cbF(memNeeded) + }() + } + } + err = collector.Collect(ctx, searcher, indexReader) if err != nil { return nil, err @@ -460,7 +534,8 @@ func (i *indexImpl) SearchInContext(ctx context.Context, req *SearchRequest) (sr doc, err := indexReader.Document(hit.ID) if err == nil && doc != nil { if len(req.Fields) > 0 { - for _, f := range req.Fields { + fieldsToLoad := deDuplicate(req.Fields) + for _, f := range fieldsToLoad { for _, docF := range doc.Fields { if f == "*" || docF.Name() == f { var value interface{} @@ -756,3 +831,16 @@ func (f *indexImplFieldDict) Close() error { } return f.indexReader.Close() } + +// helper function to remove duplicate entries from slice of strings +func deDuplicate(fields []string) []string { + entries := make(map[string]struct{}) + ret := []string{} + for _, entry := range fields { + if _, exists := entries[entry]; !exists { + entries[entry] = struct{}{} + ret = append(ret, entry) + } + } + return ret +} diff --git a/vendor/github.com/blevesearch/bleve/index_test.go b/vendor/github.com/blevesearch/bleve/index_test.go index c4e99ce..69ca61a 100644 --- a/vendor/github.com/blevesearch/bleve/index_test.go +++ b/vendor/github.com/blevesearch/bleve/index_test.go @@ -15,6 +15,7 @@ package bleve import ( + "context" "fmt" "io/ioutil" "log" @@ -28,8 +29,6 @@ import ( "testing" "time" - "golang.org/x/net/context" - "github.com/blevesearch/bleve/analysis/analyzer/keyword" "github.com/blevesearch/bleve/document" "github.com/blevesearch/bleve/index" @@ -37,6 +36,9 @@ import ( "github.com/blevesearch/bleve/mapping" "github.com/blevesearch/bleve/search" "github.com/blevesearch/bleve/search/query" + + "github.com/blevesearch/bleve/index/scorch" + "github.com/blevesearch/bleve/index/upsidedown" ) func TestCrud(t *testing.T) { @@ -674,16 +676,19 @@ func TestIndexMetadataRaceBug198(t *testing.T) { } }() + wg := sync.WaitGroup{} + wg.Add(1) done := make(chan struct{}) go func() { for { select { case <-done: + wg.Done() return default: - _, err := index.DocCount() - if err != nil { - t.Fatal(err) + _, err2 := index.DocCount() + if err2 != nil { + t.Fatal(err2) } } } @@ -701,6 +706,7 @@ func TestIndexMetadataRaceBug198(t *testing.T) { } } close(done) + wg.Wait() } func TestSortMatchSearch(t *testing.T) { @@ -1504,7 +1510,8 @@ func TestSearchTimeout(t *testing.T) { }() // first run a search with an absurdly long timeout (should succeeed) - ctx, _ := context.WithTimeout(context.Background(), 10*time.Second) + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() query := NewTermQuery("water") req := NewSearchRequest(query) _, err = index.SearchInContext(ctx, req) @@ -1513,7 +1520,8 @@ func TestSearchTimeout(t *testing.T) { } // now run a search again with an absurdly low timeout (should timeout) - ctx, _ = context.WithTimeout(context.Background(), 1*time.Microsecond) + ctx, cancel = context.WithTimeout(context.Background(), 1*time.Microsecond) + defer cancel() sq := &slowQuery{ actual: query, delay: 50 * time.Millisecond, // on Windows timer resolution is 15ms @@ -1525,7 +1533,7 @@ func TestSearchTimeout(t *testing.T) { } // now run a search with a long timeout, but with a long query, and cancel it - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + ctx, cancel = context.WithTimeout(context.Background(), 10*time.Second) sq = &slowQuery{ actual: query, delay: 100 * time.Millisecond, // on Windows timer resolution is 15ms @@ -1561,6 +1569,12 @@ func TestBatchRaceBug260(t *testing.T) { if err != nil { t.Fatal(err) } + defer func() { + err := i.Close() + if err != nil { + t.Fatal(err) + } + }() b := i.NewBatch() err = b.Index("1", 1) if err != nil { @@ -1804,3 +1818,102 @@ func TestIndexAdvancedCountMatchSearch(t *testing.T) { t.Fatal(err) } } + +func benchmarkSearchOverhead(indexType string, b *testing.B) { + defer func() { + err := os.RemoveAll("testidx") + if err != nil { + b.Fatal(err) + } + }() + + index, err := NewUsing("testidx", NewIndexMapping(), + indexType, Config.DefaultKVStore, nil) + if err != nil { + b.Fatal(err) + } + defer func() { + err := index.Close() + if err != nil { + b.Fatal(err) + } + }() + + elements := []string{"air", "water", "fire", "earth"} + for j := 0; j < 10000; j++ { + err = index.Index(fmt.Sprintf("%d", j), + map[string]interface{}{"name": elements[j%len(elements)]}) + if err != nil { + b.Fatal(err) + } + } + + query1 := NewTermQuery("water") + query2 := NewTermQuery("fire") + query := NewDisjunctionQuery(query1, query2) + req := NewSearchRequest(query) + + b.ResetTimer() + + for n := 0; n < b.N; n++ { + _, err = index.Search(req) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkUpsidedownSearchOverhead(b *testing.B) { + benchmarkSearchOverhead(upsidedown.Name, b) +} + +func BenchmarkScorchSearchOverhead(b *testing.B) { + benchmarkSearchOverhead(scorch.Name, b) +} + +func TestSearchQueryCallback(t *testing.T) { + defer func() { + err := os.RemoveAll("testidx") + if err != nil { + t.Fatal(err) + } + }() + + index, err := New("testidx", NewIndexMapping()) + if err != nil { + t.Fatal(err) + } + defer func() { + err := index.Close() + if err != nil { + t.Fatal(err) + } + }() + + elements := []string{"air", "water", "fire", "earth"} + for j := 0; j < 10000; j++ { + err = index.Index(fmt.Sprintf("%d", j), + map[string]interface{}{"name": elements[j%len(elements)]}) + if err != nil { + t.Fatal(err) + } + } + + query := NewTermQuery("water") + req := NewSearchRequest(query) + + expErr := fmt.Errorf("MEM_LIMIT_EXCEEDED") + f := func(size uint64) error { + if size > 1000 { + return expErr + } + return nil + } + + ctx := context.WithValue(context.Background(), SearchQueryStartCallbackKey, + SearchQueryStartCallbackFn(f)) + _, err = index.SearchInContext(ctx, req) + if err != expErr { + t.Fatalf("Expected: %v, Got: %v", expErr, err) + } +} diff --git a/vendor/github.com/blevesearch/bleve/mapping/document.go b/vendor/github.com/blevesearch/bleve/mapping/document.go index 6b90388..6ec0c66 100644 --- a/vendor/github.com/blevesearch/bleve/mapping/document.go +++ b/vendor/github.com/blevesearch/bleve/mapping/document.go @@ -179,6 +179,7 @@ OUTER: continue OUTER } } + break } return current } @@ -503,7 +504,7 @@ func (dm *DocumentMapping) processProperty(property interface{}, path []string, } dm.walkDocument(property, path, indexes, context) } - case reflect.Map: + case reflect.Map, reflect.Slice: if subDocMapping != nil { for _, fieldMapping := range subDocMapping.Fields { if fieldMapping.Type == "geopoint" { @@ -513,21 +514,25 @@ func (dm *DocumentMapping) processProperty(property interface{}, path []string, } dm.walkDocument(property, path, indexes, context) case reflect.Ptr: - switch property := property.(type) { - case encoding.TextMarshaler: - txt, err := property.MarshalText() - if err == nil && subDocMapping != nil { - // index by explicit mapping - for _, fieldMapping := range subDocMapping.Fields { - if fieldMapping.Type == "text" { - fieldMapping.processString(string(txt), pathString, path, indexes, context) + if !propertyValue.IsNil() { + switch property := property.(type) { + case encoding.TextMarshaler: + + txt, err := property.MarshalText() + if err == nil && subDocMapping != nil { + // index by explicit mapping + for _, fieldMapping := range subDocMapping.Fields { + if fieldMapping.Type == "text" { + fieldMapping.processString(string(txt), pathString, path, indexes, context) + } } + } else { + dm.walkDocument(property, path, indexes, context) } - } else { + + default: dm.walkDocument(property, path, indexes, context) } - default: - dm.walkDocument(property, path, indexes, context) } default: dm.walkDocument(property, path, indexes, context) diff --git a/vendor/github.com/blevesearch/bleve/mapping/field.go b/vendor/github.com/blevesearch/bleve/mapping/field.go index 9f1928c..278faa1 100644 --- a/vendor/github.com/blevesearch/bleve/mapping/field.go +++ b/vendor/github.com/blevesearch/bleve/mapping/field.go @@ -26,8 +26,9 @@ import ( // control the default behavior for dynamic fields (those not explicitly mapped) var ( - IndexDynamic = true - StoreDynamic = true + IndexDynamic = true + StoreDynamic = true + DocValuesDynamic = true // TODO revisit default? ) // A FieldMapping describes how a specific item @@ -54,6 +55,10 @@ type FieldMapping struct { IncludeTermVectors bool `json:"include_term_vectors,omitempty"` IncludeInAll bool `json:"include_in_all,omitempty"` DateFormat string `json:"date_format,omitempty"` + + // DocValues, if true makes the index uninverting possible for this field + // It is useful for faceting and sorting queries. + DocValues bool `json:"docvalues,omitempty"` } // NewTextFieldMapping returns a default field mapping for text @@ -64,6 +69,7 @@ func NewTextFieldMapping() *FieldMapping { Index: true, IncludeTermVectors: true, IncludeInAll: true, + DocValues: true, } } @@ -71,6 +77,7 @@ func newTextFieldMappingDynamic(im *IndexMappingImpl) *FieldMapping { rv := NewTextFieldMapping() rv.Store = im.StoreDynamic rv.Index = im.IndexDynamic + rv.DocValues = im.DocValuesDynamic return rv } @@ -81,6 +88,7 @@ func NewNumericFieldMapping() *FieldMapping { Store: true, Index: true, IncludeInAll: true, + DocValues: true, } } @@ -88,6 +96,7 @@ func newNumericFieldMappingDynamic(im *IndexMappingImpl) *FieldMapping { rv := NewNumericFieldMapping() rv.Store = im.StoreDynamic rv.Index = im.IndexDynamic + rv.DocValues = im.DocValuesDynamic return rv } @@ -98,6 +107,7 @@ func NewDateTimeFieldMapping() *FieldMapping { Store: true, Index: true, IncludeInAll: true, + DocValues: true, } } @@ -105,6 +115,7 @@ func newDateTimeFieldMappingDynamic(im *IndexMappingImpl) *FieldMapping { rv := NewDateTimeFieldMapping() rv.Store = im.StoreDynamic rv.Index = im.IndexDynamic + rv.DocValues = im.DocValuesDynamic return rv } @@ -115,6 +126,7 @@ func NewBooleanFieldMapping() *FieldMapping { Store: true, Index: true, IncludeInAll: true, + DocValues: true, } } @@ -122,6 +134,7 @@ func newBooleanFieldMappingDynamic(im *IndexMappingImpl) *FieldMapping { rv := NewBooleanFieldMapping() rv.Store = im.StoreDynamic rv.Index = im.IndexDynamic + rv.DocValues = im.DocValuesDynamic return rv } @@ -132,6 +145,7 @@ func NewGeoPointFieldMapping() *FieldMapping { Store: true, Index: true, IncludeInAll: true, + DocValues: true, } } @@ -147,6 +161,9 @@ func (fm *FieldMapping) Options() document.IndexingOptions { if fm.IncludeTermVectors { rv |= document.IncludeTermVectors } + if fm.DocValues { + rv |= document.DocValues + } return rv } @@ -308,6 +325,11 @@ func (fm *FieldMapping) UnmarshalJSON(data []byte) error { if err != nil { return err } + case "docvalues": + err := json.Unmarshal(v, &fm.DocValues) + if err != nil { + return err + } default: invalidKeys = append(invalidKeys, k) } diff --git a/vendor/github.com/blevesearch/bleve/mapping/index.go b/vendor/github.com/blevesearch/bleve/mapping/index.go index 86100cf..fc5d12a 100644 --- a/vendor/github.com/blevesearch/bleve/mapping/index.go +++ b/vendor/github.com/blevesearch/bleve/mapping/index.go @@ -50,6 +50,7 @@ type IndexMappingImpl struct { DefaultField string `json:"default_field"` StoreDynamic bool `json:"store_dynamic"` IndexDynamic bool `json:"index_dynamic"` + DocValuesDynamic bool `json:"docvalues_dynamic,omitempty"` CustomAnalysis *customAnalysis `json:"analysis,omitempty"` cache *registry.Cache } @@ -154,6 +155,7 @@ func NewIndexMapping() *IndexMappingImpl { DefaultField: defaultField, IndexDynamic: IndexDynamic, StoreDynamic: StoreDynamic, + DocValuesDynamic: DocValuesDynamic, CustomAnalysis: newCustomAnalysis(), cache: registry.NewCache(), } @@ -217,6 +219,7 @@ func (im *IndexMappingImpl) UnmarshalJSON(data []byte) error { im.TypeMapping = make(map[string]*DocumentMapping) im.StoreDynamic = StoreDynamic im.IndexDynamic = IndexDynamic + im.DocValuesDynamic = DocValuesDynamic var invalidKeys []string for k, v := range tmp { @@ -271,6 +274,11 @@ func (im *IndexMappingImpl) UnmarshalJSON(data []byte) error { if err != nil { return err } + case "docvalues_dynamic": + err := json.Unmarshal(v, &im.DocValuesDynamic) + if err != nil { + return err + } default: invalidKeys = append(invalidKeys, k) } @@ -318,7 +326,7 @@ func (im *IndexMappingImpl) MapDocument(doc *document.Document, data interface{} // see if the _all field was disabled allMapping := docMapping.documentMappingForPath("_all") - if allMapping == nil || (allMapping.Enabled != false) { + if allMapping == nil || allMapping.Enabled { field := document.NewCompositeFieldWithIndexingOptions("_all", true, []string{}, walkContext.excludedFromAll, document.IndexField|document.IncludeTermVectors) doc.AddField(field) } @@ -339,7 +347,7 @@ func (im *IndexMappingImpl) newWalkContext(doc *document.Document, dm *DocumentM doc: doc, im: im, dm: dm, - excludedFromAll: []string{}, + excludedFromAll: []string{"_id"}, } } diff --git a/vendor/github.com/blevesearch/bleve/mapping/mapping_test.go b/vendor/github.com/blevesearch/bleve/mapping/mapping_test.go index e16052b..1a77090 100644 --- a/vendor/github.com/blevesearch/bleve/mapping/mapping_test.go +++ b/vendor/github.com/blevesearch/bleve/mapping/mapping_test.go @@ -19,6 +19,7 @@ import ( "fmt" "reflect" "testing" + "time" "github.com/blevesearch/bleve/analysis/tokenizer/exception" "github.com/blevesearch/bleve/analysis/tokenizer/regexp" @@ -39,7 +40,8 @@ var mappingSource = []byte(`{ "store": true, "index": true, "include_term_vectors": true, - "include_in_all": true + "include_in_all": true, + "docvalues": true } ] } @@ -867,37 +869,65 @@ func TestMappingForGeo(t *testing.T) { mapping := NewIndexMapping() mapping.DefaultMapping = thingMapping - x := struct { + geopoints := []interface{}{} + + // geopoint as a struct + geopoints = append(geopoints, struct { Name string `json:"name"` Location *Location `json:"location"` }{ - Name: "marty", + Name: "struct", Location: &Location{ Lon: -180, Lat: -90, }, - } + }) - doc := document.NewDocument("1") - err := mapping.MapDocument(doc, x) - if err != nil { - t.Fatal(err) - } + // geopoint as a map + geopoints = append(geopoints, struct { + Name string `json:"name"` + Location map[string]interface{} `json:"location"` + }{ + Name: "map", + Location: map[string]interface{}{ + "lon": -180, + "lat": -90, + }, + }) - var foundGeo bool - for _, f := range doc.Fields { - if f.Name() == "location" { - foundGeo = true - got := f.Value() - expect := []byte(numeric.MustNewPrefixCodedInt64(0, 0)) - if !reflect.DeepEqual(got, expect) { - t.Errorf("expected geo value: %v, got %v", expect, got) + // geopoint as a slice + geopoints = append(geopoints, struct { + Name string `json:"name"` + Location []interface{} `json:"location"` + }{ + Name: "slice", + Location: []interface{}{ + -180, -90, + }, + }) + + for i, geopoint := range geopoints { + doc := document.NewDocument(string(i)) + err := mapping.MapDocument(doc, geopoint) + if err != nil { + t.Fatal(err) + } + + var foundGeo bool + for _, f := range doc.Fields { + if f.Name() == "location" { + foundGeo = true + got := f.Value() + expect := []byte(numeric.MustNewPrefixCodedInt64(0, 0)) + if !reflect.DeepEqual(got, expect) { + t.Errorf("expected geo value: %v, got %v", expect, got) + } } } - } - if !foundGeo { - t.Errorf("expected to find geo point, did not") + if !foundGeo { + t.Errorf("expected to find geo point, did not") + } } } @@ -966,3 +996,50 @@ func TestMappingForTextMarshaler(t *testing.T) { } } + +func TestMappingForNilTextMarshaler(t *testing.T) { + tm := struct { + Marshalable *time.Time + }{ + Marshalable: nil, + } + + // now verify that when a mapping explicity + m := NewIndexMapping() + txt := NewTextFieldMapping() + m.DefaultMapping.AddFieldMappingsAt("Marshalable", txt) + doc := document.NewDocument("x") + err := m.MapDocument(doc, tm) + if err != nil { + t.Fatal(err) + } + + if len(doc.Fields) != 0 { + t.Fatalf("expected 1 field, got: %d", len(doc.Fields)) + + } + +} + +func TestClosestDocDynamicMapping(t *testing.T) { + mapping := NewIndexMapping() + mapping.IndexDynamic = false + mapping.DefaultMapping = NewDocumentStaticMapping() + mapping.DefaultMapping.AddFieldMappingsAt("foo", NewTextFieldMapping()) + + doc := document.NewDocument("x") + err := mapping.MapDocument(doc, map[string]interface{}{ + "foo": "value", + "bar": map[string]string{ + "foo": "value2", + "baz": "value3", + }, + }) + if err != nil { + t.Fatal(err) + } + + if len(doc.Fields) != 1 { + t.Fatalf("expected 1 field, got: %d", len(doc.Fields)) + } +} diff --git a/vendor/github.com/blevesearch/bleve/query.go b/vendor/github.com/blevesearch/bleve/query.go index 1fecfa2..523db5e 100644 --- a/vendor/github.com/blevesearch/bleve/query.go +++ b/vendor/github.com/blevesearch/bleve/query.go @@ -209,8 +209,8 @@ func NewGeoBoundingBoxQuery(topLeftLon, topLeftLat, bottomRightLon, bottomRightL return query.NewGeoBoundingBoxQuery(topLeftLon, topLeftLat, bottomRightLon, bottomRightLat) } -// NewGeoDistanceQuery creates a new Query for performing geo bounding -// box searches. The arguments describe a position and a distance. Documents +// NewGeoDistanceQuery creates a new Query for performing geo distance +// searches. The arguments describe a position and a distance. Documents // which have an indexed geo point which is less than or equal to the provided // distance from the given position will be returned. func NewGeoDistanceQuery(lon, lat float64, distance string) *query.GeoDistanceQuery { diff --git a/vendor/github.com/blevesearch/bleve/search.go b/vendor/github.com/blevesearch/bleve/search.go index 98790c9..86ea419 100644 --- a/vendor/github.com/blevesearch/bleve/search.go +++ b/vendor/github.com/blevesearch/bleve/search.go @@ -17,15 +17,29 @@ package bleve import ( "encoding/json" "fmt" + "reflect" "time" "github.com/blevesearch/bleve/analysis" "github.com/blevesearch/bleve/analysis/datetime/optional" + "github.com/blevesearch/bleve/document" "github.com/blevesearch/bleve/registry" "github.com/blevesearch/bleve/search" + "github.com/blevesearch/bleve/search/collector" "github.com/blevesearch/bleve/search/query" + "github.com/blevesearch/bleve/size" ) +var reflectStaticSizeSearchResult int +var reflectStaticSizeSearchStatus int + +func init() { + var sr SearchResult + reflectStaticSizeSearchResult = int(reflect.TypeOf(sr).Size()) + var ss SearchStatus + reflectStaticSizeSearchStatus = int(reflect.TypeOf(ss).Size()) +} + var cache = registry.NewCache() const defaultDateTimeParser = optional.Name @@ -170,6 +184,16 @@ func (fr *FacetRequest) AddDateTimeRange(name string, start, end time.Time) { fr.DateTimeRanges = append(fr.DateTimeRanges, &dateTimeRange{Name: name, Start: start, End: end}) } +// AddDateTimeRangeString adds a bucket to a field +// containing date values. +func (fr *FacetRequest) AddDateTimeRangeString(name string, start, end *string) { + if fr.DateTimeRanges == nil { + fr.DateTimeRanges = make([]*dateTimeRange, 0, 1) + } + fr.DateTimeRanges = append(fr.DateTimeRanges, + &dateTimeRange{Name: name, startString: start, endString: end}) +} + // AddNumericRange adds a bucket to a field // containing numeric values. Documents with a // numeric value falling into this range are @@ -422,6 +446,24 @@ type SearchResult struct { Facets search.FacetResults `json:"facets"` } +func (sr *SearchResult) Size() int { + sizeInBytes := reflectStaticSizeSearchResult + size.SizeOfPtr + + reflectStaticSizeSearchStatus + + for _, entry := range sr.Hits { + if entry != nil { + sizeInBytes += entry.Size() + } + } + + for k, v := range sr.Facets { + sizeInBytes += size.SizeOfString + len(k) + + v.Size() + } + + return sizeInBytes +} + func (sr *SearchResult) String() string { rv := "" if sr.Total > 0 { @@ -471,5 +513,51 @@ func (sr *SearchResult) Merge(other *SearchResult) { if other.MaxScore > sr.MaxScore { sr.MaxScore = other.MaxScore } + if sr.Facets == nil && len(other.Facets) != 0 { + sr.Facets = other.Facets + return + } + sr.Facets.Merge(other.Facets) } + +// MemoryNeededForSearchResult is an exported helper function to determine the RAM +// needed to accommodate the results for a given search request. +func MemoryNeededForSearchResult(req *SearchRequest) uint64 { + if req == nil { + return 0 + } + + numDocMatches := req.Size + req.From + if req.Size+req.From > collector.PreAllocSizeSkipCap { + numDocMatches = collector.PreAllocSizeSkipCap + } + + estimate := 0 + + // overhead from the SearchResult structure + var sr SearchResult + estimate += sr.Size() + + var dm search.DocumentMatch + sizeOfDocumentMatch := dm.Size() + + // overhead from results + estimate += numDocMatches * sizeOfDocumentMatch + + // overhead from facet results + if req.Facets != nil { + var fr search.FacetResult + estimate += len(req.Facets) * fr.Size() + } + + // highlighting, store + var d document.Document + if len(req.Fields) > 0 || req.Highlight != nil { + for i := 0; i < (req.Size + req.From); i++ { + estimate += (req.Size + req.From) * d.Size() + } + } + + return uint64(estimate) +} diff --git a/vendor/github.com/blevesearch/bleve/search/collector.go b/vendor/github.com/blevesearch/bleve/search/collector.go index cba4829..0d163a9 100644 --- a/vendor/github.com/blevesearch/bleve/search/collector.go +++ b/vendor/github.com/blevesearch/bleve/search/collector.go @@ -15,11 +15,10 @@ package search import ( + "context" "time" "github.com/blevesearch/bleve/index" - - "golang.org/x/net/context" ) type Collector interface { diff --git a/vendor/github.com/blevesearch/bleve/search/collector/bench_test.go b/vendor/github.com/blevesearch/bleve/search/collector/bench_test.go index e75613c..e6a786f 100644 --- a/vendor/github.com/blevesearch/bleve/search/collector/bench_test.go +++ b/vendor/github.com/blevesearch/bleve/search/collector/bench_test.go @@ -15,13 +15,13 @@ package collector import ( + "context" "math/rand" "strconv" "testing" "github.com/blevesearch/bleve/index" "github.com/blevesearch/bleve/search" - "golang.org/x/net/context" ) type createCollector func() search.Collector diff --git a/vendor/github.com/blevesearch/bleve/search/collector/search_test.go b/vendor/github.com/blevesearch/bleve/search/collector/search_test.go index 8457fb9..3ba71c1 100644 --- a/vendor/github.com/blevesearch/bleve/search/collector/search_test.go +++ b/vendor/github.com/blevesearch/bleve/search/collector/search_test.go @@ -15,6 +15,8 @@ package collector import ( + "reflect" + "github.com/blevesearch/bleve/document" "github.com/blevesearch/bleve/index" "github.com/blevesearch/bleve/search" @@ -25,6 +27,18 @@ type stubSearcher struct { matches []*search.DocumentMatch } +func (ss *stubSearcher) Size() int { + sizeInBytes := int(reflect.TypeOf(*ss).Size()) + + for _, entry := range ss.matches { + if entry != nil { + sizeInBytes += entry.Size() + } + } + + return sizeInBytes +} + func (ss *stubSearcher) Next(ctx *search.SearchContext) (*search.DocumentMatch, error) { if ss.index < len(ss.matches) { rv := ctx.DocumentMatchPool.Get() @@ -76,6 +90,10 @@ func (ss *stubSearcher) DocumentMatchPoolSize() int { type stubReader struct{} +func (sr *stubReader) Size() int { + return 0 +} + func (sr *stubReader) TermFieldReader(term []byte, field string, includeFreq, includeNorm, includeTermVectors bool) (index.TermFieldReader, error) { return nil, nil } diff --git a/vendor/github.com/blevesearch/bleve/search/collector/topn.go b/vendor/github.com/blevesearch/bleve/search/collector/topn.go index 2c7c675..d684868 100644 --- a/vendor/github.com/blevesearch/bleve/search/collector/topn.go +++ b/vendor/github.com/blevesearch/bleve/search/collector/topn.go @@ -15,13 +15,22 @@ package collector import ( + "context" + "reflect" "time" "github.com/blevesearch/bleve/index" "github.com/blevesearch/bleve/search" - "golang.org/x/net/context" + "github.com/blevesearch/bleve/size" ) +var reflectStaticSizeTopNCollector int + +func init() { + var coll TopNCollector + reflectStaticSizeTopNCollector = int(reflect.TypeOf(coll).Size()) +} + type collectorStore interface { // Add the document, and if the new store size exceeds the provided size // the last element is removed and returned. If the size has not been @@ -98,6 +107,22 @@ func NewTopNCollector(size int, skip int, sort search.SortOrder) *TopNCollector return hc } +func (hc *TopNCollector) Size() int { + sizeInBytes := reflectStaticSizeTopNCollector + size.SizeOfPtr + + if hc.facetsBuilder != nil { + sizeInBytes += hc.facetsBuilder.Size() + } + + for _, entry := range hc.neededFields { + sizeInBytes += len(entry) + size.SizeOfString + } + + sizeInBytes += len(hc.cachedScoring) + len(hc.cachedDesc) + + return sizeInBytes +} + // Collect goes to the index to find the matching documents func (hc *TopNCollector) Collect(ctx context.Context, searcher search.Searcher, reader index.IndexReader) error { startTime := time.Now() diff --git a/vendor/github.com/blevesearch/bleve/search/collector/topn_test.go b/vendor/github.com/blevesearch/bleve/search/collector/topn_test.go index b8c331a..d50e38a 100644 --- a/vendor/github.com/blevesearch/bleve/search/collector/topn_test.go +++ b/vendor/github.com/blevesearch/bleve/search/collector/topn_test.go @@ -15,10 +15,9 @@ package collector import ( + "context" "testing" - "golang.org/x/net/context" - "github.com/blevesearch/bleve/index" "github.com/blevesearch/bleve/search" ) diff --git a/vendor/github.com/blevesearch/bleve/search/explanation.go b/vendor/github.com/blevesearch/bleve/search/explanation.go index 766367d..3b81737 100644 --- a/vendor/github.com/blevesearch/bleve/search/explanation.go +++ b/vendor/github.com/blevesearch/bleve/search/explanation.go @@ -17,8 +17,18 @@ package search import ( "encoding/json" "fmt" + "reflect" + + "github.com/blevesearch/bleve/size" ) +var reflectStaticSizeExplanation int + +func init() { + var e Explanation + reflectStaticSizeExplanation = int(reflect.TypeOf(e).Size()) +} + type Explanation struct { Value float64 `json:"value"` Message string `json:"message"` @@ -32,3 +42,14 @@ func (expl *Explanation) String() string { } return string(js) } + +func (expl *Explanation) Size() int { + sizeInBytes := reflectStaticSizeExplanation + size.SizeOfPtr + + len(expl.Message) + + for _, entry := range expl.Children { + sizeInBytes += entry.Size() + } + + return sizeInBytes +} diff --git a/vendor/github.com/blevesearch/bleve/search/facet/facet_builder_datetime.go b/vendor/github.com/blevesearch/bleve/search/facet/facet_builder_datetime.go index 8657a55..c45442e 100644 --- a/vendor/github.com/blevesearch/bleve/search/facet/facet_builder_datetime.go +++ b/vendor/github.com/blevesearch/bleve/search/facet/facet_builder_datetime.go @@ -15,13 +15,25 @@ package facet import ( + "reflect" "sort" "time" "github.com/blevesearch/bleve/numeric" "github.com/blevesearch/bleve/search" + "github.com/blevesearch/bleve/size" ) +var reflectStaticSizeDateTimeFacetBuilder int +var reflectStaticSizedateTimeRange int + +func init() { + var dtfb DateTimeFacetBuilder + reflectStaticSizeDateTimeFacetBuilder = int(reflect.TypeOf(dtfb).Size()) + var dtr dateTimeRange + reflectStaticSizedateTimeRange = int(reflect.TypeOf(dtr).Size()) +} + type dateTimeRange struct { start time.Time end time.Time @@ -46,6 +58,23 @@ func NewDateTimeFacetBuilder(field string, size int) *DateTimeFacetBuilder { } } +func (fb *DateTimeFacetBuilder) Size() int { + sizeInBytes := reflectStaticSizeDateTimeFacetBuilder + size.SizeOfPtr + + len(fb.field) + + for k, _ := range fb.termsCount { + sizeInBytes += size.SizeOfString + len(k) + + size.SizeOfInt + } + + for k, _ := range fb.ranges { + sizeInBytes += size.SizeOfString + len(k) + + size.SizeOfPtr + reflectStaticSizedateTimeRange + } + + return sizeInBytes +} + func (fb *DateTimeFacetBuilder) AddRange(name string, start, end time.Time) { r := dateTimeRange{ start: start, diff --git a/vendor/github.com/blevesearch/bleve/search/facet/facet_builder_numeric.go b/vendor/github.com/blevesearch/bleve/search/facet/facet_builder_numeric.go index 2ab5f27..c1692b5 100644 --- a/vendor/github.com/blevesearch/bleve/search/facet/facet_builder_numeric.go +++ b/vendor/github.com/blevesearch/bleve/search/facet/facet_builder_numeric.go @@ -15,12 +15,24 @@ package facet import ( + "reflect" "sort" "github.com/blevesearch/bleve/numeric" "github.com/blevesearch/bleve/search" + "github.com/blevesearch/bleve/size" ) +var reflectStaticSizeNumericFacetBuilder int +var reflectStaticSizenumericRange int + +func init() { + var nfb NumericFacetBuilder + reflectStaticSizeNumericFacetBuilder = int(reflect.TypeOf(nfb).Size()) + var nr numericRange + reflectStaticSizenumericRange = int(reflect.TypeOf(nr).Size()) +} + type numericRange struct { min *float64 max *float64 @@ -45,6 +57,23 @@ func NewNumericFacetBuilder(field string, size int) *NumericFacetBuilder { } } +func (fb *NumericFacetBuilder) Size() int { + sizeInBytes := reflectStaticSizeNumericFacetBuilder + size.SizeOfPtr + + len(fb.field) + + for k, _ := range fb.termsCount { + sizeInBytes += size.SizeOfString + len(k) + + size.SizeOfInt + } + + for k, _ := range fb.ranges { + sizeInBytes += size.SizeOfString + len(k) + + size.SizeOfPtr + reflectStaticSizenumericRange + } + + return sizeInBytes +} + func (fb *NumericFacetBuilder) AddRange(name string, min, max *float64) { r := numericRange{ min: min, diff --git a/vendor/github.com/blevesearch/bleve/search/facet/facet_builder_terms.go b/vendor/github.com/blevesearch/bleve/search/facet/facet_builder_terms.go index a41e475..5b5901e 100644 --- a/vendor/github.com/blevesearch/bleve/search/facet/facet_builder_terms.go +++ b/vendor/github.com/blevesearch/bleve/search/facet/facet_builder_terms.go @@ -15,11 +15,20 @@ package facet import ( + "reflect" "sort" "github.com/blevesearch/bleve/search" + "github.com/blevesearch/bleve/size" ) +var reflectStaticSizeTermsFacetBuilder int + +func init() { + var tfb TermsFacetBuilder + reflectStaticSizeTermsFacetBuilder = int(reflect.TypeOf(tfb).Size()) +} + type TermsFacetBuilder struct { size int field string @@ -37,6 +46,18 @@ func NewTermsFacetBuilder(field string, size int) *TermsFacetBuilder { } } +func (fb *TermsFacetBuilder) Size() int { + sizeInBytes := reflectStaticSizeTermsFacetBuilder + size.SizeOfPtr + + len(fb.field) + + for k, _ := range fb.termsCount { + sizeInBytes += size.SizeOfString + len(k) + + size.SizeOfInt + } + + return sizeInBytes +} + func (fb *TermsFacetBuilder) Field() string { return fb.field } diff --git a/vendor/github.com/blevesearch/bleve/search/facets_builder.go b/vendor/github.com/blevesearch/bleve/search/facets_builder.go index 05e2704..c5d41e2 100644 --- a/vendor/github.com/blevesearch/bleve/search/facets_builder.go +++ b/vendor/github.com/blevesearch/bleve/search/facets_builder.go @@ -15,11 +15,32 @@ package search import ( + "reflect" "sort" "github.com/blevesearch/bleve/index" + "github.com/blevesearch/bleve/size" ) +var reflectStaticSizeFacetsBuilder int +var reflectStaticSizeFacetResult int +var reflectStaticSizeTermFacet int +var reflectStaticSizeNumericRangeFacet int +var reflectStaticSizeDateRangeFacet int + +func init() { + var fb FacetsBuilder + reflectStaticSizeFacetsBuilder = int(reflect.TypeOf(fb).Size()) + var fr FacetResult + reflectStaticSizeFacetResult = int(reflect.TypeOf(fr).Size()) + var tf TermFacet + reflectStaticSizeTermFacet = int(reflect.TypeOf(tf).Size()) + var nrf NumericRangeFacet + reflectStaticSizeNumericRangeFacet = int(reflect.TypeOf(nrf).Size()) + var drf DateRangeFacet + reflectStaticSizeDateRangeFacet = int(reflect.TypeOf(drf).Size()) +} + type FacetBuilder interface { StartDoc() UpdateVisitor(field string, term []byte) @@ -27,6 +48,8 @@ type FacetBuilder interface { Result() *FacetResult Field() string + + Size() int } type FacetsBuilder struct { @@ -42,6 +65,21 @@ func NewFacetsBuilder(indexReader index.IndexReader) *FacetsBuilder { } } +func (fb *FacetsBuilder) Size() int { + sizeInBytes := reflectStaticSizeFacetsBuilder + size.SizeOfPtr + + for k, v := range fb.facets { + sizeInBytes += size.SizeOfString + len(k) + + v.Size() + } + + for _, entry := range fb.fields { + sizeInBytes += size.SizeOfString + len(entry) + } + + return sizeInBytes +} + func (fb *FacetsBuilder) Add(name string, facetBuilder FacetBuilder) { fb.facets[name] = facetBuilder fb.fields = append(fb.fields, facetBuilder.Field()) @@ -213,6 +251,14 @@ type FacetResult struct { DateRanges DateRangeFacets `json:"date_ranges,omitempty"` } +func (fr *FacetResult) Size() int { + return reflectStaticSizeFacetResult + size.SizeOfPtr + + len(fr.Field) + + len(fr.Terms)*(reflectStaticSizeTermFacet+size.SizeOfPtr) + + len(fr.NumericRanges)*(reflectStaticSizeNumericRangeFacet+size.SizeOfPtr) + + len(fr.DateRanges)*(reflectStaticSizeDateRangeFacet+size.SizeOfPtr) +} + func (fr *FacetResult) Merge(other *FacetResult) { fr.Total += other.Total fr.Missing += other.Missing diff --git a/vendor/github.com/blevesearch/bleve/search/pool.go b/vendor/github.com/blevesearch/bleve/search/pool.go index b9b52a6..ba8be8f 100644 --- a/vendor/github.com/blevesearch/bleve/search/pool.go +++ b/vendor/github.com/blevesearch/bleve/search/pool.go @@ -14,6 +14,17 @@ package search +import ( + "reflect" +) + +var reflectStaticSizeDocumentMatchPool int + +func init() { + var dmp DocumentMatchPool + reflectStaticSizeDocumentMatchPool = int(reflect.TypeOf(dmp).Size()) +} + // DocumentMatchPoolTooSmall is a callback function that can be executed // when the DocumentMatchPool does not have sufficient capacity // By default we just perform just-in-time allocation, but you could log diff --git a/vendor/github.com/blevesearch/bleve/search/query/query_string.go b/vendor/github.com/blevesearch/bleve/search/query/query_string.go index 7d93d34..ecafe6b 100644 --- a/vendor/github.com/blevesearch/bleve/search/query/query_string.go +++ b/vendor/github.com/blevesearch/bleve/search/query/query_string.go @@ -43,6 +43,10 @@ func (q *QueryStringQuery) Boost() float64 { return q.BoostVal.Value() } +func (q *QueryStringQuery) Parse() (Query, error) { + return parseQuerySyntax(q.Query) +} + func (q *QueryStringQuery) Searcher(i index.IndexReader, m mapping.IndexMapping, options search.SearcherOptions) (search.Searcher, error) { newQuery, err := parseQuerySyntax(q.Query) if err != nil { diff --git a/vendor/github.com/blevesearch/bleve/search/scorer/scorer_conjunction.go b/vendor/github.com/blevesearch/bleve/search/scorer/scorer_conjunction.go index aad6f9c..b866293 100644 --- a/vendor/github.com/blevesearch/bleve/search/scorer/scorer_conjunction.go +++ b/vendor/github.com/blevesearch/bleve/search/scorer/scorer_conjunction.go @@ -15,13 +15,27 @@ package scorer import ( + "reflect" + "github.com/blevesearch/bleve/search" + "github.com/blevesearch/bleve/size" ) +var reflectStaticSizeConjunctionQueryScorer int + +func init() { + var cqs ConjunctionQueryScorer + reflectStaticSizeConjunctionQueryScorer = int(reflect.TypeOf(cqs).Size()) +} + type ConjunctionQueryScorer struct { options search.SearcherOptions } +func (s *ConjunctionQueryScorer) Size() int { + return reflectStaticSizeConjunctionQueryScorer + size.SizeOfPtr +} + func NewConjunctionQueryScorer(options search.SearcherOptions) *ConjunctionQueryScorer { return &ConjunctionQueryScorer{ options: options, diff --git a/vendor/github.com/blevesearch/bleve/search/scorer/scorer_constant.go b/vendor/github.com/blevesearch/bleve/search/scorer/scorer_constant.go index a65a826..dc10fda 100644 --- a/vendor/github.com/blevesearch/bleve/search/scorer/scorer_constant.go +++ b/vendor/github.com/blevesearch/bleve/search/scorer/scorer_constant.go @@ -16,11 +16,20 @@ package scorer import ( "fmt" + "reflect" "github.com/blevesearch/bleve/index" "github.com/blevesearch/bleve/search" + "github.com/blevesearch/bleve/size" ) +var reflectStaticSizeConstantScorer int + +func init() { + var cs ConstantScorer + reflectStaticSizeConstantScorer = int(reflect.TypeOf(cs).Size()) +} + type ConstantScorer struct { constant float64 boost float64 @@ -30,6 +39,16 @@ type ConstantScorer struct { queryWeightExplanation *search.Explanation } +func (s *ConstantScorer) Size() int { + sizeInBytes := reflectStaticSizeConstantScorer + size.SizeOfPtr + + if s.queryWeightExplanation != nil { + sizeInBytes += s.queryWeightExplanation.Size() + } + + return sizeInBytes +} + func NewConstantScorer(constant float64, boost float64, options search.SearcherOptions) *ConstantScorer { rv := ConstantScorer{ options: options, diff --git a/vendor/github.com/blevesearch/bleve/search/scorer/scorer_disjunction.go b/vendor/github.com/blevesearch/bleve/search/scorer/scorer_disjunction.go index 184a15d..36a601c 100644 --- a/vendor/github.com/blevesearch/bleve/search/scorer/scorer_disjunction.go +++ b/vendor/github.com/blevesearch/bleve/search/scorer/scorer_disjunction.go @@ -16,14 +16,27 @@ package scorer import ( "fmt" + "reflect" "github.com/blevesearch/bleve/search" + "github.com/blevesearch/bleve/size" ) +var reflectStaticSizeDisjunctionQueryScorer int + +func init() { + var dqs DisjunctionQueryScorer + reflectStaticSizeDisjunctionQueryScorer = int(reflect.TypeOf(dqs).Size()) +} + type DisjunctionQueryScorer struct { options search.SearcherOptions } +func (s *DisjunctionQueryScorer) Size() int { + return reflectStaticSizeDisjunctionQueryScorer + size.SizeOfPtr +} + func NewDisjunctionQueryScorer(options search.SearcherOptions) *DisjunctionQueryScorer { return &DisjunctionQueryScorer{ options: options, diff --git a/vendor/github.com/blevesearch/bleve/search/scorer/scorer_term.go b/vendor/github.com/blevesearch/bleve/search/scorer/scorer_term.go index b5f4632..077e38e 100644 --- a/vendor/github.com/blevesearch/bleve/search/scorer/scorer_term.go +++ b/vendor/github.com/blevesearch/bleve/search/scorer/scorer_term.go @@ -17,11 +17,20 @@ package scorer import ( "fmt" "math" + "reflect" "github.com/blevesearch/bleve/index" "github.com/blevesearch/bleve/search" + "github.com/blevesearch/bleve/size" ) +var reflectStaticSizeTermQueryScorer int + +func init() { + var tqs TermQueryScorer + reflectStaticSizeTermQueryScorer = int(reflect.TypeOf(tqs).Size()) +} + type TermQueryScorer struct { queryTerm []byte queryField string @@ -36,6 +45,21 @@ type TermQueryScorer struct { queryWeightExplanation *search.Explanation } +func (s *TermQueryScorer) Size() int { + sizeInBytes := reflectStaticSizeTermQueryScorer + size.SizeOfPtr + + len(s.queryTerm) + len(s.queryField) + + if s.idfExplanation != nil { + sizeInBytes += s.idfExplanation.Size() + } + + if s.queryWeightExplanation != nil { + sizeInBytes += s.queryWeightExplanation.Size() + } + + return sizeInBytes +} + func NewTermQueryScorer(queryTerm []byte, queryField string, queryBoost float64, docTotal, docTerm uint64, options search.SearcherOptions) *TermQueryScorer { rv := TermQueryScorer{ queryTerm: queryTerm, diff --git a/vendor/github.com/blevesearch/bleve/search/search.go b/vendor/github.com/blevesearch/bleve/search/search.go index a9bf9db..ca030df 100644 --- a/vendor/github.com/blevesearch/bleve/search/search.go +++ b/vendor/github.com/blevesearch/bleve/search/search.go @@ -16,11 +16,26 @@ package search import ( "fmt" + "reflect" "github.com/blevesearch/bleve/document" "github.com/blevesearch/bleve/index" + "github.com/blevesearch/bleve/size" ) +var reflectStaticSizeDocumentMatch int +var reflectStaticSizeSearchContext int +var reflectStaticSizeLocation int + +func init() { + var dm DocumentMatch + reflectStaticSizeDocumentMatch = int(reflect.TypeOf(dm).Size()) + var sc SearchContext + reflectStaticSizeSearchContext = int(reflect.TypeOf(sc).Size()) + var l Location + reflectStaticSizeLocation = int(reflect.TypeOf(l).Size()) +} + type ArrayPositions []uint64 func (ap ArrayPositions) Equals(other ArrayPositions) bool { @@ -36,12 +51,22 @@ func (ap ArrayPositions) Equals(other ArrayPositions) bool { } type Location struct { - Pos uint64 `json:"pos"` - Start uint64 `json:"start"` - End uint64 `json:"end"` + // Pos is the position of the term within the field, starting at 1 + Pos uint64 `json:"pos"` + + // Start and End are the byte offsets of the term in the field + Start uint64 `json:"start"` + End uint64 `json:"end"` + + // ArrayPositions contains the positions of the term within any elements. ArrayPositions ArrayPositions `json:"array_positions"` } +func (l *Location) Size() int { + return reflectStaticSizeLocation + size.SizeOfPtr + + len(l.ArrayPositions)*size.SizeOfUint64 +} + type Locations []*Location type TermLocationMap map[string]Locations @@ -112,6 +137,52 @@ func (dm *DocumentMatch) Reset() *DocumentMatch { return dm } +func (dm *DocumentMatch) Size() int { + sizeInBytes := reflectStaticSizeDocumentMatch + size.SizeOfPtr + + len(dm.Index) + + len(dm.ID) + + len(dm.IndexInternalID) + + if dm.Expl != nil { + sizeInBytes += dm.Expl.Size() + } + + for k, v := range dm.Locations { + sizeInBytes += size.SizeOfString + len(k) + for k1, v1 := range v { + sizeInBytes += size.SizeOfString + len(k1) + + size.SizeOfSlice + for _, entry := range v1 { + sizeInBytes += entry.Size() + } + } + } + + for k, v := range dm.Fragments { + sizeInBytes += size.SizeOfString + len(k) + + size.SizeOfSlice + + for _, entry := range v { + sizeInBytes += size.SizeOfString + len(entry) + } + } + + for _, entry := range dm.Sort { + sizeInBytes += size.SizeOfString + len(entry) + } + + for k, _ := range dm.Fields { + sizeInBytes += size.SizeOfString + len(k) + + size.SizeOfPtr + } + + if dm.Document != nil { + sizeInBytes += dm.Document.Size() + } + + return sizeInBytes +} + func (dm *DocumentMatch) String() string { return fmt.Sprintf("[%s-%f]", string(dm.IndexInternalID), dm.Score) } @@ -130,6 +201,7 @@ type Searcher interface { SetQueryNorm(float64) Count() uint64 Min() int + Size() int DocumentMatchPoolSize() int } @@ -143,3 +215,18 @@ type SearcherOptions struct { type SearchContext struct { DocumentMatchPool *DocumentMatchPool } + +func (sc *SearchContext) Size() int { + sizeInBytes := reflectStaticSizeSearchContext + size.SizeOfPtr + + reflectStaticSizeDocumentMatchPool + size.SizeOfPtr + + if sc.DocumentMatchPool != nil { + for _, entry := range sc.DocumentMatchPool.avail { + if entry != nil { + sizeInBytes += entry.Size() + } + } + } + + return sizeInBytes +} diff --git a/vendor/github.com/blevesearch/bleve/search/searcher/search_boolean.go b/vendor/github.com/blevesearch/bleve/search/searcher/search_boolean.go index a905c29..f7ee2cd 100644 --- a/vendor/github.com/blevesearch/bleve/search/searcher/search_boolean.go +++ b/vendor/github.com/blevesearch/bleve/search/searcher/search_boolean.go @@ -16,12 +16,21 @@ package searcher import ( "math" + "reflect" "github.com/blevesearch/bleve/index" "github.com/blevesearch/bleve/search" "github.com/blevesearch/bleve/search/scorer" + "github.com/blevesearch/bleve/size" ) +var reflectStaticSizeBooleanSearcher int + +func init() { + var bs BooleanSearcher + reflectStaticSizeBooleanSearcher = int(reflect.TypeOf(bs).Size()) +} + type BooleanSearcher struct { indexReader index.IndexReader mustSearcher search.Searcher @@ -52,6 +61,32 @@ func NewBooleanSearcher(indexReader index.IndexReader, mustSearcher search.Searc return &rv, nil } +func (s *BooleanSearcher) Size() int { + sizeInBytes := reflectStaticSizeBooleanSearcher + size.SizeOfPtr + + if s.mustSearcher != nil { + sizeInBytes += s.mustSearcher.Size() + } + + if s.shouldSearcher != nil { + sizeInBytes += s.shouldSearcher.Size() + } + + if s.mustNotSearcher != nil { + sizeInBytes += s.mustNotSearcher.Size() + } + + sizeInBytes += s.scorer.Size() + + for _, entry := range s.matches { + if entry != nil { + sizeInBytes += entry.Size() + } + } + + return sizeInBytes +} + func (s *BooleanSearcher) computeQueryNorm() { // first calculate sum of squared weights sumOfSquaredWeights := 0.0 diff --git a/vendor/github.com/blevesearch/bleve/search/searcher/search_conjunction.go b/vendor/github.com/blevesearch/bleve/search/searcher/search_conjunction.go index 9ab0e7f..da65f39 100644 --- a/vendor/github.com/blevesearch/bleve/search/searcher/search_conjunction.go +++ b/vendor/github.com/blevesearch/bleve/search/searcher/search_conjunction.go @@ -16,13 +16,22 @@ package searcher import ( "math" + "reflect" "sort" "github.com/blevesearch/bleve/index" "github.com/blevesearch/bleve/search" "github.com/blevesearch/bleve/search/scorer" + "github.com/blevesearch/bleve/size" ) +var reflectStaticSizeConjunctionSearcher int + +func init() { + var cs ConjunctionSearcher + reflectStaticSizeConjunctionSearcher = int(reflect.TypeOf(cs).Size()) +} + type ConjunctionSearcher struct { indexReader index.IndexReader searchers OrderedSearcherList @@ -54,28 +63,45 @@ func NewConjunctionSearcher(indexReader index.IndexReader, qsearchers []search.S return &rv, nil } +func (s *ConjunctionSearcher) Size() int { + sizeInBytes := reflectStaticSizeConjunctionSearcher + size.SizeOfPtr + + s.scorer.Size() + + for _, entry := range s.searchers { + sizeInBytes += entry.Size() + } + + for _, entry := range s.currs { + if entry != nil { + sizeInBytes += entry.Size() + } + } + + return sizeInBytes +} + func (s *ConjunctionSearcher) computeQueryNorm() { // first calculate sum of squared weights sumOfSquaredWeights := 0.0 - for _, termSearcher := range s.searchers { - sumOfSquaredWeights += termSearcher.Weight() + for _, searcher := range s.searchers { + sumOfSquaredWeights += searcher.Weight() } // now compute query norm from this s.queryNorm = 1.0 / math.Sqrt(sumOfSquaredWeights) // finally tell all the downstream searchers the norm - for _, termSearcher := range s.searchers { - termSearcher.SetQueryNorm(s.queryNorm) + for _, searcher := range s.searchers { + searcher.SetQueryNorm(s.queryNorm) } } func (s *ConjunctionSearcher) initSearchers(ctx *search.SearchContext) error { var err error // get all searchers pointing at their first match - for i, termSearcher := range s.searchers { + for i, searcher := range s.searchers { if s.currs[i] != nil { ctx.DocumentMatchPool.Put(s.currs[i]) } - s.currs[i], err = termSearcher.Next(ctx) + s.currs[i], err = searcher.Next(ctx) if err != nil { return err } @@ -160,11 +186,11 @@ OUTER: // we know all the searchers are pointing at the same thing // so they all need to be bumped - for i, termSearcher := range s.searchers { + for i, searcher := range s.searchers { if s.currs[i] != rv { ctx.DocumentMatchPool.Put(s.currs[i]) } - s.currs[i], err = termSearcher.Next(ctx) + s.currs[i], err = searcher.Next(ctx) if err != nil { return nil, err } @@ -184,6 +210,9 @@ func (s *ConjunctionSearcher) Advance(ctx *search.SearchContext, ID index.IndexI } } for i := range s.searchers { + if s.currs[i] != nil && s.currs[i].IndexInternalID.Compare(ID) >= 0 { + continue + } err := s.advanceChild(ctx, i, ID) if err != nil { return nil, err diff --git a/vendor/github.com/blevesearch/bleve/search/searcher/search_disjunction.go b/vendor/github.com/blevesearch/bleve/search/searcher/search_disjunction.go index 96bd544..32d6148 100644 --- a/vendor/github.com/blevesearch/bleve/search/searcher/search_disjunction.go +++ b/vendor/github.com/blevesearch/bleve/search/searcher/search_disjunction.go @@ -17,13 +17,22 @@ package searcher import ( "fmt" "math" + "reflect" "sort" "github.com/blevesearch/bleve/index" "github.com/blevesearch/bleve/search" "github.com/blevesearch/bleve/search/scorer" + "github.com/blevesearch/bleve/size" ) +var reflectStaticSizeDisjunctionSearcher int + +func init() { + var ds DisjunctionSearcher + reflectStaticSizeDisjunctionSearcher = int(reflect.TypeOf(ds).Size()) +} + // DisjunctionMaxClauseCount is a compile time setting that applications can // adjust to non-zero value to cause the DisjunctionSearcher to return an // error instead of exeucting searches when the size exceeds this value. @@ -90,28 +99,53 @@ func newDisjunctionSearcher(indexReader index.IndexReader, return &rv, nil } +func (s *DisjunctionSearcher) Size() int { + sizeInBytes := reflectStaticSizeDisjunctionSearcher + size.SizeOfPtr + + s.scorer.Size() + + for _, entry := range s.searchers { + sizeInBytes += entry.Size() + } + + for _, entry := range s.currs { + if entry != nil { + sizeInBytes += entry.Size() + } + } + + for _, entry := range s.matching { + if entry != nil { + sizeInBytes += entry.Size() + } + } + + sizeInBytes += len(s.matchingIdxs) * size.SizeOfInt + + return sizeInBytes +} + func (s *DisjunctionSearcher) computeQueryNorm() { // first calculate sum of squared weights sumOfSquaredWeights := 0.0 - for _, termSearcher := range s.searchers { - sumOfSquaredWeights += termSearcher.Weight() + for _, searcher := range s.searchers { + sumOfSquaredWeights += searcher.Weight() } // now compute query norm from this s.queryNorm = 1.0 / math.Sqrt(sumOfSquaredWeights) // finally tell all the downstream searchers the norm - for _, termSearcher := range s.searchers { - termSearcher.SetQueryNorm(s.queryNorm) + for _, searcher := range s.searchers { + searcher.SetQueryNorm(s.queryNorm) } } func (s *DisjunctionSearcher) initSearchers(ctx *search.SearchContext) error { var err error // get all searchers pointing at their first match - for i, termSearcher := range s.searchers { + for i, searcher := range s.searchers { if s.currs[i] != nil { ctx.DocumentMatchPool.Put(s.currs[i]) } - s.currs[i], err = termSearcher.Next(ctx) + s.currs[i], err = searcher.Next(ctx) if err != nil { return err } @@ -221,11 +255,14 @@ func (s *DisjunctionSearcher) Advance(ctx *search.SearchContext, } // get all searchers pointing at their first match var err error - for i, termSearcher := range s.searchers { + for i, searcher := range s.searchers { if s.currs[i] != nil { + if s.currs[i].IndexInternalID.Compare(ID) >= 0 { + continue + } ctx.DocumentMatchPool.Put(s.currs[i]) } - s.currs[i], err = termSearcher.Advance(ctx, ID) + s.currs[i], err = searcher.Advance(ctx, ID) if err != nil { return nil, err } diff --git a/vendor/github.com/blevesearch/bleve/search/searcher/search_docid.go b/vendor/github.com/blevesearch/bleve/search/searcher/search_docid.go index 06351b4..3b258a5 100644 --- a/vendor/github.com/blevesearch/bleve/search/searcher/search_docid.go +++ b/vendor/github.com/blevesearch/bleve/search/searcher/search_docid.go @@ -15,11 +15,21 @@ package searcher import ( + "reflect" + "github.com/blevesearch/bleve/index" "github.com/blevesearch/bleve/search" "github.com/blevesearch/bleve/search/scorer" + "github.com/blevesearch/bleve/size" ) +var reflectStaticSizeDocIDSearcher int + +func init() { + var ds DocIDSearcher + reflectStaticSizeDocIDSearcher = int(reflect.TypeOf(ds).Size()) +} + // DocIDSearcher returns documents matching a predefined set of identifiers. type DocIDSearcher struct { reader index.DocIDReader @@ -42,6 +52,12 @@ func NewDocIDSearcher(indexReader index.IndexReader, ids []string, boost float64 }, nil } +func (s *DocIDSearcher) Size() int { + return reflectStaticSizeDocIDSearcher + size.SizeOfPtr + + s.reader.Size() + + s.scorer.Size() +} + func (s *DocIDSearcher) Count() uint64 { return uint64(s.count) } diff --git a/vendor/github.com/blevesearch/bleve/search/searcher/search_filter.go b/vendor/github.com/blevesearch/bleve/search/searcher/search_filter.go index 219f2ee..7c95fb4 100644 --- a/vendor/github.com/blevesearch/bleve/search/searcher/search_filter.go +++ b/vendor/github.com/blevesearch/bleve/search/searcher/search_filter.go @@ -15,10 +15,20 @@ package searcher import ( + "reflect" + "github.com/blevesearch/bleve/index" "github.com/blevesearch/bleve/search" + "github.com/blevesearch/bleve/size" ) +var reflectStaticSizeFilteringSearcher int + +func init() { + var fs FilteringSearcher + reflectStaticSizeFilteringSearcher = int(reflect.TypeOf(fs).Size()) +} + // FilterFunc defines a function which can filter documents // returning true means keep the document // returning false means do not keep the document @@ -38,6 +48,11 @@ func NewFilteringSearcher(s search.Searcher, filter FilterFunc) *FilteringSearch } } +func (f *FilteringSearcher) Size() int { + return reflectStaticSizeFilteringSearcher + size.SizeOfPtr + + f.child.Size() +} + func (f *FilteringSearcher) Next(ctx *search.SearchContext) (*search.DocumentMatch, error) { next, err := f.child.Next(ctx) for next != nil && err == nil { diff --git a/vendor/github.com/blevesearch/bleve/search/searcher/search_match_all.go b/vendor/github.com/blevesearch/bleve/search/searcher/search_match_all.go index 822db2e..bb66401 100644 --- a/vendor/github.com/blevesearch/bleve/search/searcher/search_match_all.go +++ b/vendor/github.com/blevesearch/bleve/search/searcher/search_match_all.go @@ -15,11 +15,21 @@ package searcher import ( + "reflect" + "github.com/blevesearch/bleve/index" "github.com/blevesearch/bleve/search" "github.com/blevesearch/bleve/search/scorer" + "github.com/blevesearch/bleve/size" ) +var reflectStaticSizeMatchAllSearcher int + +func init() { + var mas MatchAllSearcher + reflectStaticSizeMatchAllSearcher = int(reflect.TypeOf(mas).Size()) +} + type MatchAllSearcher struct { indexReader index.IndexReader reader index.DocIDReader @@ -46,6 +56,12 @@ func NewMatchAllSearcher(indexReader index.IndexReader, boost float64, options s }, nil } +func (s *MatchAllSearcher) Size() int { + return reflectStaticSizeMatchAllSearcher + size.SizeOfPtr + + s.reader.Size() + + s.scorer.Size() +} + func (s *MatchAllSearcher) Count() uint64 { return s.count } diff --git a/vendor/github.com/blevesearch/bleve/search/searcher/search_match_none.go b/vendor/github.com/blevesearch/bleve/search/searcher/search_match_none.go index 9475967..a345e17 100644 --- a/vendor/github.com/blevesearch/bleve/search/searcher/search_match_none.go +++ b/vendor/github.com/blevesearch/bleve/search/searcher/search_match_none.go @@ -15,10 +15,20 @@ package searcher import ( + "reflect" + "github.com/blevesearch/bleve/index" "github.com/blevesearch/bleve/search" + "github.com/blevesearch/bleve/size" ) +var reflectStaticSizeMatchNoneSearcher int + +func init() { + var mns MatchNoneSearcher + reflectStaticSizeMatchNoneSearcher = int(reflect.TypeOf(mns).Size()) +} + type MatchNoneSearcher struct { indexReader index.IndexReader } @@ -29,6 +39,10 @@ func NewMatchNoneSearcher(indexReader index.IndexReader) (*MatchNoneSearcher, er }, nil } +func (s *MatchNoneSearcher) Size() int { + return reflectStaticSizeMatchNoneSearcher + size.SizeOfPtr +} + func (s *MatchNoneSearcher) Count() uint64 { return uint64(0) } diff --git a/vendor/github.com/blevesearch/bleve/search/searcher/search_numeric_range.go b/vendor/github.com/blevesearch/bleve/search/searcher/search_numeric_range.go index 224cc9e..7f42d72 100644 --- a/vendor/github.com/blevesearch/bleve/search/searcher/search_numeric_range.go +++ b/vendor/github.com/blevesearch/bleve/search/searcher/search_numeric_range.go @@ -17,6 +17,7 @@ package searcher import ( "bytes" "math" + "sort" "github.com/blevesearch/bleve/index" "github.com/blevesearch/bleve/numeric" @@ -55,6 +56,17 @@ func NewNumericRangeSearcher(indexReader index.IndexReader, // FIXME hard-coded precision, should match field declaration termRanges := splitInt64Range(minInt64, maxInt64, 4) terms := termRanges.Enumerate() + if len(terms) < 1 { + // cannot return MatchNoneSearcher because of interaction with + // commit f391b991c20f02681bacd197afc6d8aed444e132 + return NewMultiTermSearcherBytes(indexReader, terms, field, boost, options, + true) + } + var err error + terms, err = filterCandidateTerms(indexReader, terms, field) + if err != nil { + return nil, err + } if tooManyClauses(len(terms)) { return nil, tooManyClausesErr() } @@ -63,6 +75,32 @@ func NewNumericRangeSearcher(indexReader index.IndexReader, true) } +func filterCandidateTerms(indexReader index.IndexReader, + terms [][]byte, field string) (rv [][]byte, err error) { + fieldDict, err := indexReader.FieldDictRange(field, terms[0], terms[len(terms)-1]) + if err != nil { + return nil, err + } + + // enumerate the terms and check against list of terms + tfd, err := fieldDict.Next() + for err == nil && tfd != nil { + termBytes := []byte(tfd.Term) + i := sort.Search(len(terms), func(i int) bool { return bytes.Compare(terms[i], termBytes) >= 0 }) + if i < len(terms) && bytes.Compare(terms[i], termBytes) == 0 { + rv = append(rv, terms[i]) + } + terms = terms[i:] + tfd, err = fieldDict.Next() + } + + if cerr := fieldDict.Close(); cerr != nil && err == nil { + err = cerr + } + + return rv, err +} + type termRange struct { startTerm []byte endTerm []byte diff --git a/vendor/github.com/blevesearch/bleve/search/searcher/search_phrase.go b/vendor/github.com/blevesearch/bleve/search/searcher/search_phrase.go index e3fa089..0026794 100644 --- a/vendor/github.com/blevesearch/bleve/search/searcher/search_phrase.go +++ b/vendor/github.com/blevesearch/bleve/search/searcher/search_phrase.go @@ -17,11 +17,20 @@ package searcher import ( "fmt" "math" + "reflect" "github.com/blevesearch/bleve/index" "github.com/blevesearch/bleve/search" + "github.com/blevesearch/bleve/size" ) +var reflectStaticSizePhraseSearcher int + +func init() { + var ps PhraseSearcher + reflectStaticSizePhraseSearcher = int(reflect.TypeOf(ps).Size()) +} + type PhraseSearcher struct { indexReader index.IndexReader mustSearcher *ConjunctionSearcher @@ -32,6 +41,27 @@ type PhraseSearcher struct { initialized bool } +func (s *PhraseSearcher) Size() int { + sizeInBytes := reflectStaticSizePhraseSearcher + size.SizeOfPtr + + if s.mustSearcher != nil { + sizeInBytes += s.mustSearcher.Size() + } + + if s.currMust != nil { + sizeInBytes += s.currMust.Size() + } + + for _, entry := range s.terms { + sizeInBytes += size.SizeOfSlice + for _, entry1 := range entry { + sizeInBytes += size.SizeOfString + len(entry1) + } + } + + return sizeInBytes +} + func NewPhraseSearcher(indexReader index.IndexReader, terms []string, field string, options search.SearcherOptions) (*PhraseSearcher, error) { // turn flat terms []string into [][]string mterms := make([][]string, len(terms)) @@ -226,6 +256,10 @@ type phrasePart struct { loc *search.Location } +func (p *phrasePart) String() string { + return fmt.Sprintf("[%s %v]", p.term, p.loc) +} + type phrasePath []*phrasePart func (p phrasePath) MergeInto(in search.TermLocationMap) { @@ -309,6 +343,15 @@ func (s *PhraseSearcher) Advance(ctx *search.SearchContext, ID index.IndexIntern return nil, err } } + if s.currMust != nil { + if s.currMust.IndexInternalID.Compare(ID) >= 0 { + return s.Next(ctx) + } + ctx.DocumentMatchPool.Put(s.currMust) + } + if s.currMust == nil { + return nil, nil + } var err error s.currMust, err = s.mustSearcher.Advance(ctx, ID) if err != nil { diff --git a/vendor/github.com/blevesearch/bleve/search/searcher/search_term.go b/vendor/github.com/blevesearch/bleve/search/searcher/search_term.go index 6fae6ae..b99e4c2 100644 --- a/vendor/github.com/blevesearch/bleve/search/searcher/search_term.go +++ b/vendor/github.com/blevesearch/bleve/search/searcher/search_term.go @@ -15,11 +15,21 @@ package searcher import ( + "reflect" + "github.com/blevesearch/bleve/index" "github.com/blevesearch/bleve/search" "github.com/blevesearch/bleve/search/scorer" + "github.com/blevesearch/bleve/size" ) +var reflectStaticSizeTermSearcher int + +func init() { + var ts TermSearcher + reflectStaticSizeTermSearcher = int(reflect.TypeOf(ts).Size()) +} + type TermSearcher struct { indexReader index.IndexReader reader index.TermFieldReader @@ -63,6 +73,13 @@ func NewTermSearcherBytes(indexReader index.IndexReader, term []byte, field stri }, nil } +func (s *TermSearcher) Size() int { + return reflectStaticSizeTermSearcher + size.SizeOfPtr + + s.reader.Size() + + s.tfd.Size() + + s.scorer.Size() +} + func (s *TermSearcher) Count() uint64 { return s.reader.Count() } diff --git a/vendor/github.com/blevesearch/bleve/search_test.go b/vendor/github.com/blevesearch/bleve/search_test.go index 7f50189..87a7182 100644 --- a/vendor/github.com/blevesearch/bleve/search_test.go +++ b/vendor/github.com/blevesearch/bleve/search_test.go @@ -326,3 +326,91 @@ func TestFacetNumericDateRangeRequests(t *testing.T) { } } + +func TestSearchResultFacetsMerge(t *testing.T) { + lowmed := "2010-01-01" + medhi := "2011-01-01" + hihigher := "2012-01-01" + + fr := &search.FacetResult{ + Field: "birthday", + Total: 100, + Missing: 25, + Other: 25, + DateRanges: []*search.DateRangeFacet{ + { + Name: "low", + End: &lowmed, + Count: 25, + }, + { + Name: "med", + Count: 24, + Start: &lowmed, + End: &medhi, + }, + { + Name: "hi", + Count: 1, + Start: &medhi, + End: &hihigher, + }, + }, + } + frs := search.FacetResults{ + "birthdays": fr, + } + + l := &SearchResult{ + Status: &SearchStatus{ + Total: 10, + Successful: 1, + Errors: make(map[string]error), + }, + Total: 10, + MaxScore: 1, + } + + r := &SearchResult{ + Status: &SearchStatus{ + Total: 1, + Successful: 1, + Errors: make(map[string]error), + }, + Total: 1, + MaxScore: 2, + Facets: frs, + } + + expected := &SearchResult{ + Status: &SearchStatus{ + Total: 11, + Successful: 2, + Errors: make(map[string]error), + }, + Total: 11, + MaxScore: 2, + Facets: frs, + } + + l.Merge(r) + + if !reflect.DeepEqual(l, expected) { + t.Errorf("expected %#v, got %#v", expected, l) + } +} + +func TestMemoryNeededForSearchResult(t *testing.T) { + query := NewTermQuery("blah") + req := NewSearchRequest(query) + + var sr SearchResult + expect := sr.Size() + var dm search.DocumentMatch + expect += 10 * dm.Size() + + estimate := MemoryNeededForSearchResult(req) + if estimate != uint64(expect) { + t.Errorf("estimate not what is expected: %v != %v", estimate, expect) + } +} diff --git a/vendor/github.com/blevesearch/bleve/size/sizes.go b/vendor/github.com/blevesearch/bleve/size/sizes.go new file mode 100644 index 0000000..4ba544a --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/size/sizes.go @@ -0,0 +1,57 @@ +// Copyright (c) 2018 Couchbase, 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 size + +import ( + "reflect" +) + +func init() { + var a bool + SizeOfBool = int(reflect.TypeOf(a).Size()) + var b float32 + SizeOfFloat32 = int(reflect.TypeOf(b).Size()) + var c float64 + SizeOfFloat64 = int(reflect.TypeOf(c).Size()) + var d map[int]int + SizeOfMap = int(reflect.TypeOf(d).Size()) + var e *int + SizeOfPtr = int(reflect.TypeOf(e).Size()) + var f []int + SizeOfSlice = int(reflect.TypeOf(f).Size()) + var g string + SizeOfString = int(reflect.TypeOf(g).Size()) + var h uint8 + SizeOfUint8 = int(reflect.TypeOf(h).Size()) + var i uint16 + SizeOfUint16 = int(reflect.TypeOf(i).Size()) + var j uint32 + SizeOfUint32 = int(reflect.TypeOf(j).Size()) + var k uint64 + SizeOfUint64 = int(reflect.TypeOf(k).Size()) +} + +var SizeOfBool int +var SizeOfFloat32 int +var SizeOfFloat64 int +var SizeOfInt int +var SizeOfMap int +var SizeOfPtr int +var SizeOfSlice int +var SizeOfString int +var SizeOfUint8 int +var SizeOfUint16 int +var SizeOfUint32 int +var SizeOfUint64 int diff --git a/vendor/github.com/blevesearch/bleve/test/versus_test.go b/vendor/github.com/blevesearch/bleve/test/versus_test.go new file mode 100644 index 0000000..70463a9 --- /dev/null +++ b/vendor/github.com/blevesearch/bleve/test/versus_test.go @@ -0,0 +1,497 @@ +// Copyright (c) 2014 Couchbase, 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 test + +import ( + "bytes" + "encoding/json" + "fmt" + "math" + "math/rand" + "os" + "reflect" + "strconv" + "strings" + "testing" + "text/template" + + "github.com/blevesearch/bleve" + "github.com/blevesearch/bleve/index/scorch" + "github.com/blevesearch/bleve/index/store/boltdb" + "github.com/blevesearch/bleve/index/upsidedown" + "github.com/blevesearch/bleve/mapping" + "github.com/blevesearch/bleve/search" +) + +// Tests scorch indexer versus upsidedown/bolt indexer against various +// templated queries. Example usage from the bleve top-level directory... +// +// go test -v -run TestScorchVersusUpsideDownBolt ./test +// VERBOSE=1 FOCUS=Trista go test -v -run TestScorchVersusUpsideDownBolt ./test +// +func TestScorchVersusUpsideDownBoltAll(t *testing.T) { + (&VersusTest{ + t: t, + NumDocs: 1000, + MaxWordsPerDoc: 20, + NumWords: 10, + BatchSize: 10, + NumAttemptsPerSearch: 100, + }).run(scorch.Name, boltdb.Name, upsidedown.Name, boltdb.Name, nil, nil) +} + +func TestScorchVersusUpsideDownBoltSmallMNSAM(t *testing.T) { + (&VersusTest{ + t: t, + Focus: "must-not-same-as-must", + NumDocs: 5, + MaxWordsPerDoc: 2, + NumWords: 1, + BatchSize: 1, + NumAttemptsPerSearch: 1, + }).run(scorch.Name, boltdb.Name, upsidedown.Name, boltdb.Name, nil, nil) +} + +func TestScorchVersusUpsideDownBoltSmallCMP11(t *testing.T) { + (&VersusTest{ + t: t, + Focus: "conjuncts-match-phrase-1-1", + NumDocs: 30, + MaxWordsPerDoc: 8, + NumWords: 2, + BatchSize: 1, + NumAttemptsPerSearch: 1, + }).run(scorch.Name, boltdb.Name, upsidedown.Name, boltdb.Name, nil, nil) +} + +// ------------------------------------------------------- + +// Templates used to compare search results in the "versus" tests. +var testVersusSearchTemplates = []string{ + `{ + "about": "expected to return zero hits", + "query": { + "query": "title:notARealTitle" + } + }`, + `{ + "about": "try straight word()'s", + "query": { + "query": "body:{{word}}" + } + }`, + `{ + "about": "conjuncts on same term", + "query": { + "conjuncts": [ + { "field": "body", "term": "{{word}}", "boost": 1.0 }, + { "field": "body", "term": "{{word}}", "boost": 1.0 } + ] + } + }`, + `{ + "about": "disjuncts on same term", + "query": { + "disjuncts": [ + { "field": "body", "term": "{{word}}", "boost": 1.0 }, + { "field": "body", "term": "{{word}}", "boost": 1.0 } + ] + } + }`, + `{ + "about": "never-matching-title-conjuncts", + "query": { + "conjuncts": [ + {"field": "body", "match": "{{word}}"}, + {"field": "body", "match": "{{word}}"}, + {"field": "title", "match": "notAnActualTitle"} + ] + } + }`, + `{ + "about": "never-matching-title-disjuncts", + "query": { + "disjuncts": [ + {"field": "body", "match": "{{word}}"}, + {"field": "body", "match": "{{word}}"}, + {"field": "title", "match": "notAnActualTitle"} + ] + } + }`, + `{ + "about": "must-not-never-matches", + "query": { + "must_not": {"disjuncts": [ + {"field": "title", "match": "notAnActualTitle"} + ]}, + "should": {"disjuncts": [ + {"field": "body", "match": "{{word}}"} + ]} + } + }`, + `{ + "about": "must-not-only", + "query": { + "must_not": {"disjuncts": [ + {"field": "body", "term": "{{word}}"} + ]} + } + }`, + `{ + "about": "must-not-same-as-must -- see: MB-27291", + "query": { + "must_not": {"disjuncts": [ + {"field": "body", "match": "{{word}}"} + ]}, + "must": {"conjuncts": [ + {"field": "body", "match": "{{word}}"} + ]} + } + }`, + `{ + "about": "must-not-same-as-should", + "query": { + "must_not": {"disjuncts": [ + {"field": "body", "match": "{{word}}"} + ]}, + "should": {"disjuncts": [ + {"field": "body", "match": "{{word}}"} + ]} + } + }`, + `{ + "about": "inspired by testrunner RQG issue -- see: MB-27291", + "query": { + "must_not": {"disjuncts": [ + {"field": "title", "match": "Trista Allen"}, + {"field": "body", "match": "{{word}}"} + ]}, + "should": {"disjuncts": [ + {"field": "title", "match": "Kallie Safiya Amara"}, + {"field": "body", "match": "{{word}}"} + ]} + } + }`, + `{ + "about": "conjuncts-match-phrase-1-1 inspired by testrunner RQG issue -- see: MB-27291", + "query": { + "conjuncts": [ + {"field": "body", "match": "{{bodyWord 0}}"}, + {"field": "body", "match_phrase": "{{bodyWord 1}} {{bodyWord 1}}"} + ] + } + }`, + `{ + "about": "conjuncts-match-phrase-1-2 inspired by testrunner RQG issue -- see: MB-27291 -- FAILS!!", + "query": { + "conjuncts": [ + {"field": "body", "match": "{{bodyWord 0}}"}, + {"field": "body", "match_phrase": "{{bodyWord 1}} {{bodyWord 2}}"} + ] + } + }`, +} + +// ------------------------------------------------------- + +type VersusTest struct { + t *testing.T + + // Use environment variable VERBOSE= that's > 0 for more + // verbose output. + Verbose int + + // Allow user to focus on particular search templates, where + // where the search template must contain the Focus string. + Focus string + + NumDocs int // Number of docs to insert. + MaxWordsPerDoc int // Max number words in each doc's Body field. + NumWords int // Total number of words in the dictionary. + BatchSize int // Batch size when inserting docs. + NumAttemptsPerSearch int // For each search template, number of searches to try. + + // The Bodies is an array with length NumDocs, where each entry + // is the words in a doc's Body field. + Bodies [][]string + + CurAttempt int + TotAttempts int +} + +// ------------------------------------------------------- + +func testVersusSearches(vt *VersusTest, searchTemplates []string, idxA, idxB bleve.Index) { + t := vt.t + + funcMap := template.FuncMap{ + // Returns a word. The word may or may not be in any + // document's body. + "word": func() string { + return vt.genWord(vt.CurAttempt % vt.NumWords) + }, + // Picks a document and returns the i'th word in that + // document's body. You can use this in searches to + // definitely find at least one document. + "bodyWord": func(i int) string { + body := vt.Bodies[vt.CurAttempt%len(vt.Bodies)] + if len(body) <= 0 { + return "" + } + return body[i%len(body)] + }, + } + + // Optionally allow call to focus on a particular search templates, + // where the search template must contain the vt.Focus string. + if vt.Focus == "" { + vt.Focus = os.Getenv("FOCUS") + } + + for i, searchTemplate := range searchTemplates { + if vt.Focus != "" && !strings.Contains(searchTemplate, vt.Focus) { + continue + } + + tmpl, err := template.New("search").Funcs(funcMap).Parse(searchTemplate) + if err != nil { + t.Fatalf("could not parse search template: %s, err: %v", searchTemplate, err) + } + + for j := 0; j < vt.NumAttemptsPerSearch; j++ { + vt.CurAttempt = j + + var buf bytes.Buffer + err = tmpl.Execute(&buf, vt) + if err != nil { + t.Fatalf("could not execute search template: %s, err: %v", searchTemplate, err) + } + + bufBytes := buf.Bytes() + + if vt.Verbose > 0 { + fmt.Printf(" %s\n", bufBytes) + } + + var search bleve.SearchRequest + err = json.Unmarshal(bufBytes, &search) + if err != nil { + t.Fatalf("could not unmarshal search: %s, err: %v", bufBytes, err) + } + + search.Size = vt.NumDocs * 10 // Crank up limit to get all results. + + searchA := search + searchB := search + + resA, errA := idxA.Search(&searchA) + resB, errB := idxB.Search(&searchB) + if errA != errB { + t.Errorf("search: (%d) %s,\n err mismatch, errA: %v, errB: %v", + i, bufBytes, errA, errB) + } + + // Scores might have float64 vs float32 wobbles, so truncate precision. + resA.MaxScore = math.Trunc(resA.MaxScore*1000.0) / 1000.0 + resB.MaxScore = math.Trunc(resB.MaxScore*1000.0) / 1000.0 + + // Timings may be different between A & B, so force equality. + resA.Took = resB.Took + + // Hits might have different ordering since some indexers + // (like upsidedown) have a natural secondary sort on id + // while others (like scorch) don't. So, we compare by + // putting the hits from A & B into maps. + hitsA := hitsById(resA) + hitsB := hitsById(resB) + if !reflect.DeepEqual(hitsA, hitsB) { + t.Errorf("=========\nsearch: (%d) %s,\n res hits mismatch,\n len(hitsA): %d,\n len(hitsB): %d", + i, bufBytes, len(hitsA), len(hitsB)) + t.Errorf("\n hitsA: %#v,\n hitsB: %#v", + hitsA, hitsB) + for id, hitA := range hitsA { + hitB := hitsB[id] + if !reflect.DeepEqual(hitA, hitB) { + t.Errorf("\n driving from hitsA\n hitA: %#v,\n hitB: %#v", hitA, hitB) + idx, _ := strconv.Atoi(id) + t.Errorf("\n doc: %d, body: %s", idx, strings.Join(vt.Bodies[idx], " ")) + } + } + for id, hitB := range hitsB { + hitA := hitsA[id] + if !reflect.DeepEqual(hitA, hitB) { + t.Errorf("\n driving from hitsB\n hitA: %#v,\n hitB: %#v", hitA, hitB) + idx, _ := strconv.Atoi(id) + t.Errorf("\n doc: %d, body: %s", idx, strings.Join(vt.Bodies[idx], " ")) + } + } + } + + resA.Hits = nil + resB.Hits = nil + + if !reflect.DeepEqual(resA, resB) { + resAj, _ := json.Marshal(resA) + resBj, _ := json.Marshal(resB) + t.Errorf("search: (%d) %s,\n res mismatch,\n resA: %s,\n resB: %s", + i, bufBytes, resAj, resBj) + } + + if vt.Verbose > 0 { + fmt.Printf(" Total: (%t) %d\n", resA.Total == resB.Total, resA.Total) + } + + vt.TotAttempts++ + } + } +} + +// Organizes the hits into a map keyed by id. +func hitsById(res *bleve.SearchResult) map[string]*search.DocumentMatch { + rv := make(map[string]*search.DocumentMatch, len(res.Hits)) + + for _, hit := range res.Hits { + // Clear out or truncate precision of hit fields that might be + // different across different indexer implementations. + hit.Index = "" + hit.Score = math.Trunc(hit.Score*1000.0) / 1000.0 + hit.IndexInternalID = nil + hit.HitNumber = 0 + + rv[hit.ID] = hit + } + + return rv +} + +// ------------------------------------------------------- + +func (vt *VersusTest) run(indexTypeA, kvStoreA, indexTypeB, kvStoreB string, + cb func(versusTest *VersusTest, searchTemplates []string, idxA, idxB bleve.Index), + searchTemplates []string) { + if cb == nil { + cb = testVersusSearches + } + + if searchTemplates == nil { + searchTemplates = testVersusSearchTemplates + } + + if vt.Verbose <= 0 { + vt.Verbose, _ = strconv.Atoi(os.Getenv("VERBOSE")) + } + + dirA := "/tmp/bleve-versus-test-a" + dirB := "/tmp/bleve-versus-test-b" + + defer func() { + _ = os.RemoveAll(dirA) + _ = os.RemoveAll(dirB) + }() + + _ = os.RemoveAll(dirA) + _ = os.RemoveAll(dirB) + + imA := vt.makeIndexMapping() + imB := vt.makeIndexMapping() + + kvConfigA := map[string]interface{}{} + kvConfigB := map[string]interface{}{} + + idxA, err := bleve.NewUsing(dirA, imA, indexTypeA, kvStoreA, kvConfigA) + if err != nil || idxA == nil { + vt.t.Fatalf("new using err: %v", err) + } + defer func() { _ = idxA.Close() }() + + idxB, err := bleve.NewUsing(dirB, imB, indexTypeB, kvStoreB, kvConfigB) + if err != nil || idxB == nil { + vt.t.Fatalf("new using err: %v", err) + } + defer func() { _ = idxB.Close() }() + + rand.Seed(0) + + if vt.Bodies == nil { + vt.Bodies = vt.genBodies() + } + + vt.insertBodies(idxA) + vt.insertBodies(idxB) + + cb(vt, searchTemplates, idxA, idxB) +} + +// ------------------------------------------------------- + +func (vt *VersusTest) makeIndexMapping() mapping.IndexMapping { + standardFM := bleve.NewTextFieldMapping() + standardFM.Store = false + standardFM.IncludeInAll = false + standardFM.IncludeTermVectors = true + standardFM.Analyzer = "standard" + + dm := bleve.NewDocumentMapping() + dm.AddFieldMappingsAt("title", standardFM) + dm.AddFieldMappingsAt("body", standardFM) + + im := bleve.NewIndexMapping() + im.DefaultMapping = dm + im.DefaultAnalyzer = "standard" + + return im +} + +func (vt *VersusTest) insertBodies(idx bleve.Index) { + batch := idx.NewBatch() + for i, bodyWords := range vt.Bodies { + title := fmt.Sprintf("%d", i) + body := strings.Join(bodyWords, " ") + err := batch.Index(title, map[string]interface{}{"title": title, "body": body}) + if err != nil { + vt.t.Fatalf("batch.Index err: %v", err) + } + if i%vt.BatchSize == 0 { + err = idx.Batch(batch) + if err != nil { + vt.t.Fatalf("batch err: %v", err) + } + batch.Reset() + } + } + err := idx.Batch(batch) + if err != nil { + vt.t.Fatalf("last batch err: %v", err) + } +} + +func (vt *VersusTest) genBodies() (rv [][]string) { + for i := 0; i < vt.NumDocs; i++ { + rv = append(rv, vt.genBody()) + } + return rv +} + +func (vt *VersusTest) genBody() (rv []string) { + m := rand.Intn(vt.MaxWordsPerDoc) + for j := 0; j < m; j++ { + rv = append(rv, vt.genWord(rand.Intn(vt.NumWords))) + } + return rv +} + +func (vt *VersusTest) genWord(i int) string { + return fmt.Sprintf("%x", i) +} diff --git a/vendor/github.com/blevesearch/bleve/vendor/manifest b/vendor/github.com/blevesearch/bleve/vendor/manifest index 839e6fe..1883de7 100644 --- a/vendor/github.com/blevesearch/bleve/vendor/manifest +++ b/vendor/github.com/blevesearch/bleve/vendor/manifest @@ -17,11 +17,19 @@ "branch": "master", "notests": true }, + { + "importpath": "github.com/blevesearch/snowballstem", + "repository": "https://github.com/blevesearch/snowballstem", + "vcs": "", + "revision": "26b06a2c243d4f8ca5db3486f94409dd5b2a7467", + "branch": "master", + "notests": true + }, { "importpath": "github.com/boltdb/bolt", "repository": "https://github.com/boltdb/bolt", "vcs": "", - "revision": "144418e1475d8bf7abbdc48583500f1a20c62ea7", + "revision": "9da31745363232bc1e27dbab3569e77383a51585", "branch": "master", "notests": true }, @@ -29,7 +37,7 @@ "importpath": "github.com/couchbase/moss", "repository": "https://github.com/couchbase/moss", "vcs": "git", - "revision": "fc637b3f82ec5b8139b0d295f6588c6a2bea5a16", + "revision": "013a19c55df3e689a66b632c7c8074e37162217d", "branch": "master", "notests": true }, @@ -66,6 +74,14 @@ "branch": "master", "notests": true }, + { + "importpath": "github.com/RoaringBitmap/roaring", + "repository": "https://github.com/RoaringBitmap/roaring", + "vcs": "", + "revision": "01d244c43a7e8d1191a4f369f5908ea9eb9bc9ac", + "branch": "master", + "notests": true + }, { "importpath": "github.com/seiflotfy/cuckoofilter", "repository": "https://github.com/seiflotfy/cuckoofilter", @@ -99,15 +115,6 @@ "branch": "master", "notests": true }, - { - "importpath": "golang.org/x/net/context", - "repository": "https://go.googlesource.com/net", - "vcs": "", - "revision": "e45385e9b226f570b1f086bf287b25d3d4117776", - "branch": "master", - "path": "/context", - "notests": true - }, { "importpath": "golang.org/x/text/transform", "repository": "https://go.googlesource.com/text", @@ -127,4 +134,4 @@ "notests": true } ] -} \ No newline at end of file +} diff --git a/vendor/github.com/boltdb/bolt/README.md b/vendor/github.com/boltdb/bolt/README.md index 8523e33..7d43a15 100644 --- a/vendor/github.com/boltdb/bolt/README.md +++ b/vendor/github.com/boltdb/bolt/README.md @@ -15,11 +15,11 @@ and setting values. That's it. ## Project Status -Bolt is stable and the API is fixed. Full unit test coverage and randomized -black box testing are used to ensure database consistency and thread safety. -Bolt is currently in high-load production environments serving databases as -large as 1TB. Many companies such as Shopify and Heroku use Bolt-backed -services every day. +Bolt is stable, the API is fixed, and the file format is fixed. Full unit +test coverage and randomized black box testing are used to ensure database +consistency and thread safety. Bolt is currently used in high-load production +environments serving databases as large as 1TB. Many companies such as +Shopify and Heroku use Bolt-backed services every day. ## Table of Contents @@ -209,7 +209,7 @@ and then safely close your transaction if an error is returned. This is the recommended way to use Bolt transactions. However, sometimes you may want to manually start and end your transactions. -You can use the `Tx.Begin()` function directly but **please** be sure to close +You can use the `DB.Begin()` function directly but **please** be sure to close the transaction. ```go @@ -395,7 +395,7 @@ db.View(func(tx *bolt.Tx) error { c := tx.Bucket([]byte("MyBucket")).Cursor() prefix := []byte("1234") - for k, v := c.Seek(prefix); bytes.HasPrefix(k, prefix); k, v = c.Next() { + for k, v := c.Seek(prefix); k != nil && bytes.HasPrefix(k, prefix); k, v = c.Next() { fmt.Printf("key=%s, value=%s\n", k, v) } @@ -448,6 +448,10 @@ db.View(func(tx *bolt.Tx) error { }) ``` +Please note that keys and values in `ForEach()` are only valid while +the transaction is open. If you need to use a key or value outside of +the transaction, you must use `copy()` to copy it to another byte +slice. ### Nested buckets @@ -460,6 +464,55 @@ func (*Bucket) CreateBucketIfNotExists(key []byte) (*Bucket, error) func (*Bucket) DeleteBucket(key []byte) error ``` +Say you had a multi-tenant application where the root level bucket was the account bucket. Inside of this bucket was a sequence of accounts which themselves are buckets. And inside the sequence bucket you could have many buckets pertaining to the Account itself (Users, Notes, etc) isolating the information into logical groupings. + +```go + +// createUser creates a new user in the given account. +func createUser(accountID int, u *User) error { + // Start the transaction. + tx, err := db.Begin(true) + if err != nil { + return err + } + defer tx.Rollback() + + // Retrieve the root bucket for the account. + // Assume this has already been created when the account was set up. + root := tx.Bucket([]byte(strconv.FormatUint(accountID, 10))) + + // Setup the users bucket. + bkt, err := root.CreateBucketIfNotExists([]byte("USERS")) + if err != nil { + return err + } + + // Generate an ID for the new user. + userID, err := bkt.NextSequence() + if err != nil { + return err + } + u.ID = userID + + // Marshal and save the encoded user. + if buf, err := json.Marshal(u); err != nil { + return err + } else if err := bkt.Put([]byte(strconv.FormatUint(u.ID, 10)), buf); err != nil { + return err + } + + // Commit the transaction. + if err := tx.Commit(); err != nil { + return err + } + + return nil +} + +``` + + + ### Database backups @@ -715,6 +768,9 @@ Here are a few things to note when evaluating and using Bolt: can be reused by a new page or can be unmapped from virtual memory and you'll see an `unexpected fault address` panic when accessing it. +* Bolt uses an exclusive write lock on the database file so it cannot be + shared by multiple processes. + * Be careful when using `Bucket.FillPercent`. Setting a high fill percent for buckets that have random inserts will cause your database to have very poor page utilization. @@ -848,5 +904,13 @@ Below is a list of public, open source projects that use Bolt: * [Algernon](https://github.com/xyproto/algernon) - A HTTP/2 web server with built-in support for Lua. Uses BoltDB as the default database backend. * [MuLiFS](https://github.com/dankomiocevic/mulifs) - Music Library Filesystem creates a filesystem to organise your music files. * [GoShort](https://github.com/pankajkhairnar/goShort) - GoShort is a URL shortener written in Golang and BoltDB for persistent key/value storage and for routing it's using high performent HTTPRouter. +* [torrent](https://github.com/anacrolix/torrent) - Full-featured BitTorrent client package and utilities in Go. BoltDB is a storage backend in development. +* [gopherpit](https://github.com/gopherpit/gopherpit) - A web service to manage Go remote import paths with custom domains +* [bolter](https://github.com/hasit/bolter) - Command-line app for viewing BoltDB file in your terminal. +* [btcwallet](https://github.com/btcsuite/btcwallet) - A bitcoin wallet. +* [dcrwallet](https://github.com/decred/dcrwallet) - A wallet for the Decred cryptocurrency. +* [Ironsmith](https://github.com/timshannon/ironsmith) - A simple, script-driven continuous integration (build - > test -> release) tool, with no external dependencies +* [BoltHold](https://github.com/timshannon/bolthold) - An embeddable NoSQL store for Go types built on BoltDB +* [Ponzu CMS](https://ponzu-cms.org) - Headless CMS + automatic JSON API with auto-HTTPS, HTTP/2 Server Push, and flexible server framework. If you are using Bolt in a project please send a pull request to add it to the list. diff --git a/vendor/github.com/boltdb/bolt/bolt_386.go b/vendor/github.com/boltdb/bolt/bolt_386.go index e659bfb..820d533 100644 --- a/vendor/github.com/boltdb/bolt/bolt_386.go +++ b/vendor/github.com/boltdb/bolt/bolt_386.go @@ -5,3 +5,6 @@ const maxMapSize = 0x7FFFFFFF // 2GB // maxAllocSize is the size used when creating array pointers. const maxAllocSize = 0xFFFFFFF + +// Are unaligned load/stores broken on this arch? +var brokenUnaligned = false diff --git a/vendor/github.com/boltdb/bolt/bolt_amd64.go b/vendor/github.com/boltdb/bolt/bolt_amd64.go index cca6b7e..98fafdb 100644 --- a/vendor/github.com/boltdb/bolt/bolt_amd64.go +++ b/vendor/github.com/boltdb/bolt/bolt_amd64.go @@ -5,3 +5,6 @@ const maxMapSize = 0xFFFFFFFFFFFF // 256TB // maxAllocSize is the size used when creating array pointers. const maxAllocSize = 0x7FFFFFFF + +// Are unaligned load/stores broken on this arch? +var brokenUnaligned = false diff --git a/vendor/github.com/boltdb/bolt/bolt_arm.go b/vendor/github.com/boltdb/bolt/bolt_arm.go index e659bfb..7e5cb4b 100644 --- a/vendor/github.com/boltdb/bolt/bolt_arm.go +++ b/vendor/github.com/boltdb/bolt/bolt_arm.go @@ -1,7 +1,28 @@ package bolt +import "unsafe" + // maxMapSize represents the largest mmap size supported by Bolt. const maxMapSize = 0x7FFFFFFF // 2GB // maxAllocSize is the size used when creating array pointers. const maxAllocSize = 0xFFFFFFF + +// Are unaligned load/stores broken on this arch? +var brokenUnaligned bool + +func init() { + // Simple check to see whether this arch handles unaligned load/stores + // correctly. + + // ARM9 and older devices require load/stores to be from/to aligned + // addresses. If not, the lower 2 bits are cleared and that address is + // read in a jumbled up order. + + // See http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka15414.html + + raw := [6]byte{0xfe, 0xef, 0x11, 0x22, 0x22, 0x11} + val := *(*uint32)(unsafe.Pointer(uintptr(unsafe.Pointer(&raw)) + 2)) + + brokenUnaligned = val != 0x11222211 +} diff --git a/vendor/github.com/boltdb/bolt/bolt_arm64.go b/vendor/github.com/boltdb/bolt/bolt_arm64.go index 6d23093..b26d84f 100644 --- a/vendor/github.com/boltdb/bolt/bolt_arm64.go +++ b/vendor/github.com/boltdb/bolt/bolt_arm64.go @@ -7,3 +7,6 @@ const maxMapSize = 0xFFFFFFFFFFFF // 256TB // maxAllocSize is the size used when creating array pointers. const maxAllocSize = 0x7FFFFFFF + +// Are unaligned load/stores broken on this arch? +var brokenUnaligned = false diff --git a/vendor/github.com/boltdb/bolt/bolt_ppc64.go b/vendor/github.com/boltdb/bolt/bolt_ppc64.go index 2dc6be0..9331d97 100644 --- a/vendor/github.com/boltdb/bolt/bolt_ppc64.go +++ b/vendor/github.com/boltdb/bolt/bolt_ppc64.go @@ -7,3 +7,6 @@ const maxMapSize = 0xFFFFFFFFFFFF // 256TB // maxAllocSize is the size used when creating array pointers. const maxAllocSize = 0x7FFFFFFF + +// Are unaligned load/stores broken on this arch? +var brokenUnaligned = false diff --git a/vendor/github.com/boltdb/bolt/bolt_ppc64le.go b/vendor/github.com/boltdb/bolt/bolt_ppc64le.go index 8351e12..8c143bc 100644 --- a/vendor/github.com/boltdb/bolt/bolt_ppc64le.go +++ b/vendor/github.com/boltdb/bolt/bolt_ppc64le.go @@ -7,3 +7,6 @@ const maxMapSize = 0xFFFFFFFFFFFF // 256TB // maxAllocSize is the size used when creating array pointers. const maxAllocSize = 0x7FFFFFFF + +// Are unaligned load/stores broken on this arch? +var brokenUnaligned = false diff --git a/vendor/github.com/boltdb/bolt/bolt_s390x.go b/vendor/github.com/boltdb/bolt/bolt_s390x.go index f4dd26b..d7c39af 100644 --- a/vendor/github.com/boltdb/bolt/bolt_s390x.go +++ b/vendor/github.com/boltdb/bolt/bolt_s390x.go @@ -7,3 +7,6 @@ const maxMapSize = 0xFFFFFFFFFFFF // 256TB // maxAllocSize is the size used when creating array pointers. const maxAllocSize = 0x7FFFFFFF + +// Are unaligned load/stores broken on this arch? +var brokenUnaligned = false diff --git a/vendor/github.com/boltdb/bolt/bolt_windows.go b/vendor/github.com/boltdb/bolt/bolt_windows.go index d538e6a..b00fb07 100644 --- a/vendor/github.com/boltdb/bolt/bolt_windows.go +++ b/vendor/github.com/boltdb/bolt/bolt_windows.go @@ -89,7 +89,7 @@ func flock(db *DB, mode os.FileMode, exclusive bool, timeout time.Duration) erro func funlock(db *DB) error { err := unlockFileEx(syscall.Handle(db.lockfile.Fd()), 0, 1, 0, &syscall.Overlapped{}) db.lockfile.Close() - os.Remove(db.path+lockExt) + os.Remove(db.path + lockExt) return err } diff --git a/vendor/github.com/boltdb/bolt/bucket.go b/vendor/github.com/boltdb/bolt/bucket.go index d2f8c52..0c5bf27 100644 --- a/vendor/github.com/boltdb/bolt/bucket.go +++ b/vendor/github.com/boltdb/bolt/bucket.go @@ -130,9 +130,17 @@ func (b *Bucket) Bucket(name []byte) *Bucket { func (b *Bucket) openBucket(value []byte) *Bucket { var child = newBucket(b.tx) + // If unaligned load/stores are broken on this arch and value is + // unaligned simply clone to an aligned byte array. + unaligned := brokenUnaligned && uintptr(unsafe.Pointer(&value[0]))&3 != 0 + + if unaligned { + value = cloneBytes(value) + } + // If this is a writable transaction then we need to copy the bucket entry. // Read-only transactions can point directly at the mmap entry. - if b.tx.writable { + if b.tx.writable && !unaligned { child.bucket = &bucket{} *child.bucket = *(*bucket)(unsafe.Pointer(&value[0])) } else { @@ -167,9 +175,8 @@ func (b *Bucket) CreateBucket(key []byte) (*Bucket, error) { if bytes.Equal(key, k) { if (flags & bucketLeafFlag) != 0 { return nil, ErrBucketExists - } else { - return nil, ErrIncompatibleValue } + return nil, ErrIncompatibleValue } // Create empty, inline bucket. @@ -329,6 +336,28 @@ func (b *Bucket) Delete(key []byte) error { return nil } +// Sequence returns the current integer for the bucket without incrementing it. +func (b *Bucket) Sequence() uint64 { return b.bucket.sequence } + +// SetSequence updates the sequence number for the bucket. +func (b *Bucket) SetSequence(v uint64) error { + if b.tx.db == nil { + return ErrTxClosed + } else if !b.Writable() { + return ErrTxNotWritable + } + + // Materialize the root node if it hasn't been already so that the + // bucket will be saved during commit. + if b.rootNode == nil { + _ = b.node(b.root, nil) + } + + // Increment and return the sequence. + b.bucket.sequence = v + return nil +} + // NextSequence returns an autoincrementing integer for the bucket. func (b *Bucket) NextSequence() (uint64, error) { if b.tx.db == nil { diff --git a/vendor/github.com/boltdb/bolt/bucket_test.go b/vendor/github.com/boltdb/bolt/bucket_test.go index 528fec2..cddbe27 100644 --- a/vendor/github.com/boltdb/bolt/bucket_test.go +++ b/vendor/github.com/boltdb/bolt/bucket_test.go @@ -782,6 +782,48 @@ func TestBucket_DeleteBucket_IncompatibleValue(t *testing.T) { } } +// Ensure bucket can set and update its sequence number. +func TestBucket_Sequence(t *testing.T) { + db := MustOpenDB() + defer db.MustClose() + + if err := db.Update(func(tx *bolt.Tx) error { + bkt, err := tx.CreateBucket([]byte("0")) + if err != nil { + t.Fatal(err) + } + + // Retrieve sequence. + if v := bkt.Sequence(); v != 0 { + t.Fatalf("unexpected sequence: %d", v) + } + + // Update sequence. + if err := bkt.SetSequence(1000); err != nil { + t.Fatal(err) + } + + // Read sequence again. + if v := bkt.Sequence(); v != 1000 { + t.Fatalf("unexpected sequence: %d", v) + } + + return nil + }); err != nil { + t.Fatal(err) + } + + // Verify sequence in separate transaction. + if err := db.View(func(tx *bolt.Tx) error { + if v := tx.Bucket([]byte("0")).Sequence(); v != 1000 { + t.Fatalf("unexpected sequence: %d", v) + } + return nil + }); err != nil { + t.Fatal(err) + } +} + // Ensure that a bucket can return an autoincrementing sequence. func TestBucket_NextSequence(t *testing.T) { db := MustOpenDB() diff --git a/vendor/github.com/boltdb/bolt/cmd/bolt/main.go b/vendor/github.com/boltdb/bolt/cmd/bolt/main.go index b96e6f7..057eca5 100644 --- a/vendor/github.com/boltdb/bolt/cmd/bolt/main.go +++ b/vendor/github.com/boltdb/bolt/cmd/bolt/main.go @@ -102,6 +102,8 @@ func (m *Main) Run(args ...string) error { return newBenchCommand(m).Run(args[1:]...) case "check": return newCheckCommand(m).Run(args[1:]...) + case "compact": + return newCompactCommand(m).Run(args[1:]...) case "dump": return newDumpCommand(m).Run(args[1:]...) case "info": @@ -130,6 +132,7 @@ The commands are: bench run synthetic benchmark against bolt check verifies integrity of bolt database + compact copies a bolt database, compacting it in the process info print basic info help print this screen pages print list of pages with their types @@ -356,7 +359,7 @@ func (cmd *DumpCommand) Run(args ...string) error { return nil } -// PrintPage prints a given page as hexidecimal. +// PrintPage prints a given page as hexadecimal. func (cmd *DumpCommand) PrintPage(w io.Writer, r io.ReaderAt, pageID int, pageSize int) error { const bytesPerLineN = 16 @@ -406,7 +409,7 @@ func (cmd *DumpCommand) Usage() string { return strings.TrimLeft(` usage: bolt dump -page PAGEID PATH -Dump prints a hexidecimal dump of a single page. +Dump prints a hexadecimal dump of a single page. `, "\n") } @@ -539,9 +542,9 @@ func (cmd *PageCommand) PrintLeaf(w io.Writer, buf []byte) error { b := (*bucket)(unsafe.Pointer(&e.value()[0])) v = fmt.Sprintf("", b.root, b.sequence) } else if isPrintable(string(e.value())) { - k = fmt.Sprintf("%q", string(e.value())) + v = fmt.Sprintf("%q", string(e.value())) } else { - k = fmt.Sprintf("%x", string(e.value())) + v = fmt.Sprintf("%x", string(e.value())) } fmt.Fprintf(w, "%s: %s\n", k, v) @@ -593,7 +596,7 @@ func (cmd *PageCommand) PrintFreelist(w io.Writer, buf []byte) error { return nil } -// PrintPage prints a given page as hexidecimal. +// PrintPage prints a given page as hexadecimal. func (cmd *PageCommand) PrintPage(w io.Writer, r io.ReaderAt, pageID int, pageSize int) error { const bytesPerLineN = 16 @@ -1530,3 +1533,208 @@ func (n *leafPageElement) value() []byte { buf := (*[maxAllocSize]byte)(unsafe.Pointer(n)) return buf[n.pos+n.ksize : n.pos+n.ksize+n.vsize] } + +// CompactCommand represents the "compact" command execution. +type CompactCommand struct { + Stdin io.Reader + Stdout io.Writer + Stderr io.Writer + + SrcPath string + DstPath string + TxMaxSize int64 +} + +// newCompactCommand returns a CompactCommand. +func newCompactCommand(m *Main) *CompactCommand { + return &CompactCommand{ + Stdin: m.Stdin, + Stdout: m.Stdout, + Stderr: m.Stderr, + } +} + +// Run executes the command. +func (cmd *CompactCommand) Run(args ...string) (err error) { + // Parse flags. + fs := flag.NewFlagSet("", flag.ContinueOnError) + fs.SetOutput(ioutil.Discard) + fs.StringVar(&cmd.DstPath, "o", "", "") + fs.Int64Var(&cmd.TxMaxSize, "tx-max-size", 65536, "") + if err := fs.Parse(args); err == flag.ErrHelp { + fmt.Fprintln(cmd.Stderr, cmd.Usage()) + return ErrUsage + } else if err != nil { + return err + } else if cmd.DstPath == "" { + return fmt.Errorf("output file required") + } + + // Require database paths. + cmd.SrcPath = fs.Arg(0) + if cmd.SrcPath == "" { + return ErrPathRequired + } + + // Ensure source file exists. + fi, err := os.Stat(cmd.SrcPath) + if os.IsNotExist(err) { + return ErrFileNotFound + } else if err != nil { + return err + } + initialSize := fi.Size() + + // Open source database. + src, err := bolt.Open(cmd.SrcPath, 0444, nil) + if err != nil { + return err + } + defer src.Close() + + // Open destination database. + dst, err := bolt.Open(cmd.DstPath, fi.Mode(), nil) + if err != nil { + return err + } + defer dst.Close() + + // Run compaction. + if err := cmd.compact(dst, src); err != nil { + return err + } + + // Report stats on new size. + fi, err = os.Stat(cmd.DstPath) + if err != nil { + return err + } else if fi.Size() == 0 { + return fmt.Errorf("zero db size") + } + fmt.Fprintf(cmd.Stdout, "%d -> %d bytes (gain=%.2fx)\n", initialSize, fi.Size(), float64(initialSize)/float64(fi.Size())) + + return nil +} + +func (cmd *CompactCommand) compact(dst, src *bolt.DB) error { + // commit regularly, or we'll run out of memory for large datasets if using one transaction. + var size int64 + tx, err := dst.Begin(true) + if err != nil { + return err + } + defer tx.Rollback() + + if err := cmd.walk(src, func(keys [][]byte, k, v []byte, seq uint64) error { + // On each key/value, check if we have exceeded tx size. + sz := int64(len(k) + len(v)) + if size+sz > cmd.TxMaxSize && cmd.TxMaxSize != 0 { + // Commit previous transaction. + if err := tx.Commit(); err != nil { + return err + } + + // Start new transaction. + tx, err = dst.Begin(true) + if err != nil { + return err + } + size = 0 + } + size += sz + + // Create bucket on the root transaction if this is the first level. + nk := len(keys) + if nk == 0 { + bkt, err := tx.CreateBucket(k) + if err != nil { + return err + } + if err := bkt.SetSequence(seq); err != nil { + return err + } + return nil + } + + // Create buckets on subsequent levels, if necessary. + b := tx.Bucket(keys[0]) + if nk > 1 { + for _, k := range keys[1:] { + b = b.Bucket(k) + } + } + + // If there is no value then this is a bucket call. + if v == nil { + bkt, err := b.CreateBucket(k) + if err != nil { + return err + } + if err := bkt.SetSequence(seq); err != nil { + return err + } + return nil + } + + // Otherwise treat it as a key/value pair. + return b.Put(k, v) + }); err != nil { + return err + } + + return tx.Commit() +} + +// walkFunc is the type of the function called for keys (buckets and "normal" +// values) discovered by Walk. keys is the list of keys to descend to the bucket +// owning the discovered key/value pair k/v. +type walkFunc func(keys [][]byte, k, v []byte, seq uint64) error + +// walk walks recursively the bolt database db, calling walkFn for each key it finds. +func (cmd *CompactCommand) walk(db *bolt.DB, walkFn walkFunc) error { + return db.View(func(tx *bolt.Tx) error { + return tx.ForEach(func(name []byte, b *bolt.Bucket) error { + return cmd.walkBucket(b, nil, name, nil, b.Sequence(), walkFn) + }) + }) +} + +func (cmd *CompactCommand) walkBucket(b *bolt.Bucket, keypath [][]byte, k, v []byte, seq uint64, fn walkFunc) error { + // Execute callback. + if err := fn(keypath, k, v, seq); err != nil { + return err + } + + // If this is not a bucket then stop. + if v != nil { + return nil + } + + // Iterate over each child key/value. + keypath = append(keypath, k) + return b.ForEach(func(k, v []byte) error { + if v == nil { + bkt := b.Bucket(k) + return cmd.walkBucket(bkt, keypath, k, nil, bkt.Sequence(), fn) + } + return cmd.walkBucket(b, keypath, k, v, b.Sequence(), fn) + }) +} + +// Usage returns the help message. +func (cmd *CompactCommand) Usage() string { + return strings.TrimLeft(` +usage: bolt compact [options] -o DST SRC + +Compact opens a database at SRC path and walks it recursively, copying keys +as they are found from all buckets, to a newly created database at DST path. + +The original database is left untouched. + +Additional options include: + + -tx-max-size NUM + Specifies the maximum size of individual transactions. + Defaults to 64KB. +`, "\n") +} diff --git a/vendor/github.com/boltdb/bolt/cmd/bolt/main_test.go b/vendor/github.com/boltdb/bolt/cmd/bolt/main_test.go index c378b79..0a11ff3 100644 --- a/vendor/github.com/boltdb/bolt/cmd/bolt/main_test.go +++ b/vendor/github.com/boltdb/bolt/cmd/bolt/main_test.go @@ -2,7 +2,12 @@ package main_test import ( "bytes" + crypto "crypto/rand" + "encoding/binary" + "fmt" + "io" "io/ioutil" + "math/rand" "os" "strconv" "testing" @@ -183,3 +188,169 @@ func (db *DB) Close() error { defer os.Remove(db.Path) return db.DB.Close() } + +func TestCompactCommand_Run(t *testing.T) { + var s int64 + if err := binary.Read(crypto.Reader, binary.BigEndian, &s); err != nil { + t.Fatal(err) + } + rand.Seed(s) + + dstdb := MustOpen(0666, nil) + dstdb.Close() + + // fill the db + db := MustOpen(0666, nil) + if err := db.Update(func(tx *bolt.Tx) error { + n := 2 + rand.Intn(5) + for i := 0; i < n; i++ { + k := []byte(fmt.Sprintf("b%d", i)) + b, err := tx.CreateBucketIfNotExists(k) + if err != nil { + return err + } + if err := b.SetSequence(uint64(i)); err != nil { + return err + } + if err := fillBucket(b, append(k, '.')); err != nil { + return err + } + } + return nil + }); err != nil { + db.Close() + t.Fatal(err) + } + + // make the db grow by adding large values, and delete them. + if err := db.Update(func(tx *bolt.Tx) error { + b, err := tx.CreateBucketIfNotExists([]byte("large_vals")) + if err != nil { + return err + } + n := 5 + rand.Intn(5) + for i := 0; i < n; i++ { + v := make([]byte, 1000*1000*(1+rand.Intn(5))) + _, err := crypto.Read(v) + if err != nil { + return err + } + if err := b.Put([]byte(fmt.Sprintf("l%d", i)), v); err != nil { + return err + } + } + return nil + }); err != nil { + db.Close() + t.Fatal(err) + } + if err := db.Update(func(tx *bolt.Tx) error { + c := tx.Bucket([]byte("large_vals")).Cursor() + for k, _ := c.First(); k != nil; k, _ = c.Next() { + if err := c.Delete(); err != nil { + return err + } + } + return tx.DeleteBucket([]byte("large_vals")) + }); err != nil { + db.Close() + t.Fatal(err) + } + db.DB.Close() + defer db.Close() + defer dstdb.Close() + + dbChk, err := chkdb(db.Path) + if err != nil { + t.Fatal(err) + } + + m := NewMain() + if err := m.Run("compact", "-o", dstdb.Path, db.Path); err != nil { + t.Fatal(err) + } + + dbChkAfterCompact, err := chkdb(db.Path) + if err != nil { + t.Fatal(err) + } + + dstdbChk, err := chkdb(dstdb.Path) + if err != nil { + t.Fatal(err) + } + + if !bytes.Equal(dbChk, dbChkAfterCompact) { + t.Error("the original db has been touched") + } + if !bytes.Equal(dbChk, dstdbChk) { + t.Error("the compacted db data isn't the same than the original db") + } +} + +func fillBucket(b *bolt.Bucket, prefix []byte) error { + n := 10 + rand.Intn(50) + for i := 0; i < n; i++ { + v := make([]byte, 10*(1+rand.Intn(4))) + _, err := crypto.Read(v) + if err != nil { + return err + } + k := append(prefix, []byte(fmt.Sprintf("k%d", i))...) + if err := b.Put(k, v); err != nil { + return err + } + } + // limit depth of subbuckets + s := 2 + rand.Intn(4) + if len(prefix) > (2*s + 1) { + return nil + } + n = 1 + rand.Intn(3) + for i := 0; i < n; i++ { + k := append(prefix, []byte(fmt.Sprintf("b%d", i))...) + sb, err := b.CreateBucket(k) + if err != nil { + return err + } + if err := fillBucket(sb, append(k, '.')); err != nil { + return err + } + } + return nil +} + +func chkdb(path string) ([]byte, error) { + db, err := bolt.Open(path, 0666, nil) + if err != nil { + return nil, err + } + defer db.Close() + var buf bytes.Buffer + err = db.View(func(tx *bolt.Tx) error { + return tx.ForEach(func(name []byte, b *bolt.Bucket) error { + return walkBucket(b, name, nil, &buf) + }) + }) + if err != nil { + return nil, err + } + return buf.Bytes(), nil +} + +func walkBucket(parent *bolt.Bucket, k []byte, v []byte, w io.Writer) error { + if _, err := fmt.Fprintf(w, "%d:%x=%x\n", parent.Sequence(), k, v); err != nil { + return err + } + + // not a bucket, exit. + if v != nil { + return nil + } + return parent.ForEach(func(k, v []byte) error { + if v == nil { + return walkBucket(parent.Bucket(k), k, nil, w) + } + return walkBucket(parent, k, v, w) + }) +} diff --git a/vendor/github.com/boltdb/bolt/db.go b/vendor/github.com/boltdb/bolt/db.go index 1223493..f352ff1 100644 --- a/vendor/github.com/boltdb/bolt/db.go +++ b/vendor/github.com/boltdb/bolt/db.go @@ -552,7 +552,10 @@ func (db *DB) removeTx(tx *Tx) { // Remove the transaction. for i, t := range db.txs { if t == tx { - db.txs = append(db.txs[:i], db.txs[i+1:]...) + last := len(db.txs) - 1 + db.txs[i] = db.txs[last] + db.txs[last] = nil + db.txs = db.txs[:last] break } } @@ -952,7 +955,7 @@ func (s *Stats) Sub(other *Stats) Stats { diff.PendingPageN = s.PendingPageN diff.FreeAlloc = s.FreeAlloc diff.FreelistInuse = s.FreelistInuse - diff.TxN = other.TxN - s.TxN + diff.TxN = s.TxN - other.TxN diff.TxStats = s.TxStats.Sub(&other.TxStats) return diff } diff --git a/vendor/github.com/boltdb/bolt/db_test.go b/vendor/github.com/boltdb/bolt/db_test.go index 74ff93a..3034d4f 100644 --- a/vendor/github.com/boltdb/bolt/db_test.go +++ b/vendor/github.com/boltdb/bolt/db_test.go @@ -12,7 +12,6 @@ import ( "os" "path/filepath" "regexp" - "runtime" "sort" "strings" "sync" @@ -180,69 +179,6 @@ func TestOpen_ErrChecksum(t *testing.T) { } } -// Ensure that opening an already open database file will timeout. -func TestOpen_Timeout(t *testing.T) { - if runtime.GOOS == "solaris" { - t.Skip("solaris fcntl locks don't support intra-process locking") - } - - path := tempfile() - - // Open a data file. - db0, err := bolt.Open(path, 0666, nil) - if err != nil { - t.Fatal(err) - } else if db0 == nil { - t.Fatal("expected database") - } - - // Attempt to open the database again. - start := time.Now() - db1, err := bolt.Open(path, 0666, &bolt.Options{Timeout: 100 * time.Millisecond}) - if err != bolt.ErrTimeout { - t.Fatalf("unexpected timeout: %s", err) - } else if db1 != nil { - t.Fatal("unexpected database") - } else if time.Since(start) <= 100*time.Millisecond { - t.Fatal("expected to wait at least timeout duration") - } - - if err := db0.Close(); err != nil { - t.Fatal(err) - } -} - -// Ensure that opening an already open database file will wait until its closed. -func TestOpen_Wait(t *testing.T) { - if runtime.GOOS == "solaris" { - t.Skip("solaris fcntl locks don't support intra-process locking") - } - - path := tempfile() - - // Open a data file. - db0, err := bolt.Open(path, 0666, nil) - if err != nil { - t.Fatal(err) - } - - // Close it in just a bit. - time.AfterFunc(100*time.Millisecond, func() { _ = db0.Close() }) - - // Attempt to open the database again. - start := time.Now() - db1, err := bolt.Open(path, 0666, &bolt.Options{Timeout: 200 * time.Millisecond}) - if err != nil { - t.Fatal(err) - } else if time.Since(start) <= 100*time.Millisecond { - t.Fatal("expected to wait at least timeout duration") - } - - if err := db1.Close(); err != nil { - t.Fatal(err) - } -} - // Ensure that opening a database does not increase its size. // https://github.com/boltdb/bolt/issues/291 func TestOpen_Size(t *testing.T) { @@ -426,103 +362,6 @@ func TestOpen_FileTooSmall(t *testing.T) { } } -// Ensure that a database can be opened in read-only mode by multiple processes -// and that a database can not be opened in read-write mode and in read-only -// mode at the same time. -func TestOpen_ReadOnly(t *testing.T) { - if runtime.GOOS == "solaris" { - t.Skip("solaris fcntl locks don't support intra-process locking") - } - - bucket, key, value := []byte(`bucket`), []byte(`key`), []byte(`value`) - - path := tempfile() - - // Open in read-write mode. - db, err := bolt.Open(path, 0666, nil) - if err != nil { - t.Fatal(err) - } else if db.IsReadOnly() { - t.Fatal("db should not be in read only mode") - } - if err := db.Update(func(tx *bolt.Tx) error { - b, err := tx.CreateBucket(bucket) - if err != nil { - return err - } - if err := b.Put(key, value); err != nil { - t.Fatal(err) - } - return nil - }); err != nil { - t.Fatal(err) - } - if err := db.Close(); err != nil { - t.Fatal(err) - } - - // Open in read-only mode. - db0, err := bolt.Open(path, 0666, &bolt.Options{ReadOnly: true}) - if err != nil { - t.Fatal(err) - } - - // Opening in read-write mode should return an error. - if _, err = bolt.Open(path, 0666, &bolt.Options{Timeout: time.Millisecond * 100}); err == nil { - t.Fatal("expected error") - } - - // And again (in read-only mode). - db1, err := bolt.Open(path, 0666, &bolt.Options{ReadOnly: true}) - if err != nil { - t.Fatal(err) - } - - // Verify both read-only databases are accessible. - for _, db := range []*bolt.DB{db0, db1} { - // Verify is is in read only mode indeed. - if !db.IsReadOnly() { - t.Fatal("expected read only mode") - } - - // Read-only databases should not allow updates. - if err := db.Update(func(*bolt.Tx) error { - panic(`should never get here`) - }); err != bolt.ErrDatabaseReadOnly { - t.Fatalf("unexpected error: %s", err) - } - - // Read-only databases should not allow beginning writable txns. - if _, err := db.Begin(true); err != bolt.ErrDatabaseReadOnly { - t.Fatalf("unexpected error: %s", err) - } - - // Verify the data. - if err := db.View(func(tx *bolt.Tx) error { - b := tx.Bucket(bucket) - if b == nil { - return fmt.Errorf("expected bucket `%s`", string(bucket)) - } - - got := string(b.Get(key)) - expected := string(value) - if got != expected { - return fmt.Errorf("expected `%s`, got `%s`", expected, got) - } - return nil - }); err != nil { - t.Fatal(err) - } - } - - if err := db0.Close(); err != nil { - t.Fatal(err) - } - if err := db1.Close(); err != nil { - t.Fatal(err) - } -} - // TestDB_Open_InitialMmapSize tests if having InitialMmapSize large enough // to hold data from concurrent write transaction resolves the issue that // read transaction blocks the write transaction and causes deadlock. diff --git a/vendor/github.com/boltdb/bolt/freelist.go b/vendor/github.com/boltdb/bolt/freelist.go index 1b7ba91..aba48f5 100644 --- a/vendor/github.com/boltdb/bolt/freelist.go +++ b/vendor/github.com/boltdb/bolt/freelist.go @@ -24,7 +24,12 @@ func newFreelist() *freelist { // size returns the size of the page after serialization. func (f *freelist) size() int { - return pageHeaderSize + (int(unsafe.Sizeof(pgid(0))) * f.count()) + n := f.count() + if n >= 0xFFFF { + // The first element will be used to store the count. See freelist.write. + n++ + } + return pageHeaderSize + (int(unsafe.Sizeof(pgid(0))) * n) } // count returns count of pages on the freelist @@ -46,16 +51,15 @@ func (f *freelist) pending_count() int { return count } -// all returns a list of all free ids and all pending ids in one sorted list. -func (f *freelist) all() []pgid { - m := make(pgids, 0) - +// copyall copies into dst a list of all free ids and all pending ids in one sorted list. +// f.count returns the minimum length required for dst. +func (f *freelist) copyall(dst []pgid) { + m := make(pgids, 0, f.pending_count()) for _, list := range f.pending { m = append(m, list...) } - sort.Sort(m) - return pgids(f.ids).merge(m) + mergepgids(dst, f.ids, m) } // allocate returns the starting page id of a contiguous list of pages of a given size. @@ -186,22 +190,22 @@ func (f *freelist) read(p *page) { // become free. func (f *freelist) write(p *page) error { // Combine the old free pgids and pgids waiting on an open transaction. - ids := f.all() // Update the header flag. p.flags |= freelistPageFlag // The page.count can only hold up to 64k elements so if we overflow that // number then we handle it by putting the size in the first element. - if len(ids) == 0 { - p.count = uint16(len(ids)) - } else if len(ids) < 0xFFFF { - p.count = uint16(len(ids)) - copy(((*[maxAllocSize]pgid)(unsafe.Pointer(&p.ptr)))[:], ids) + lenids := f.count() + if lenids == 0 { + p.count = uint16(lenids) + } else if lenids < 0xFFFF { + p.count = uint16(lenids) + f.copyall(((*[maxAllocSize]pgid)(unsafe.Pointer(&p.ptr)))[:]) } else { p.count = 0xFFFF - ((*[maxAllocSize]pgid)(unsafe.Pointer(&p.ptr)))[0] = pgid(len(ids)) - copy(((*[maxAllocSize]pgid)(unsafe.Pointer(&p.ptr)))[1:], ids) + ((*[maxAllocSize]pgid)(unsafe.Pointer(&p.ptr)))[0] = pgid(lenids) + f.copyall(((*[maxAllocSize]pgid)(unsafe.Pointer(&p.ptr)))[1:]) } return nil @@ -236,7 +240,7 @@ func (f *freelist) reload(p *page) { // reindex rebuilds the free cache based on available and pending free lists. func (f *freelist) reindex() { - f.cache = make(map[pgid]bool) + f.cache = make(map[pgid]bool, len(f.ids)) for _, id := range f.ids { f.cache[id] = true } diff --git a/vendor/github.com/boltdb/bolt/page.go b/vendor/github.com/boltdb/bolt/page.go index 7651a6b..cde403a 100644 --- a/vendor/github.com/boltdb/bolt/page.go +++ b/vendor/github.com/boltdb/bolt/page.go @@ -145,12 +145,33 @@ func (a pgids) merge(b pgids) pgids { // Return the opposite slice if one is nil. if len(a) == 0 { return b - } else if len(b) == 0 { + } + if len(b) == 0 { return a } + merged := make(pgids, len(a)+len(b)) + mergepgids(merged, a, b) + return merged +} + +// mergepgids copies the sorted union of a and b into dst. +// If dst is too small, it panics. +func mergepgids(dst, a, b pgids) { + if len(dst) < len(a)+len(b) { + panic(fmt.Errorf("mergepgids bad len %d < %d + %d", len(dst), len(a), len(b))) + } + // Copy in the opposite slice if one is nil. + if len(a) == 0 { + copy(dst, b) + return + } + if len(b) == 0 { + copy(dst, a) + return + } - // Create a list to hold all elements from both lists. - merged := make(pgids, 0, len(a)+len(b)) + // Merged will hold all elements from both lists. + merged := dst[:0] // Assign lead to the slice with a lower starting value, follow to the higher value. lead, follow := a, b @@ -172,7 +193,5 @@ func (a pgids) merge(b pgids) pgids { } // Append what's left in follow. - merged = append(merged, follow...) - - return merged + _ = append(merged, follow...) } diff --git a/vendor/github.com/boltdb/bolt/quick_test.go b/vendor/github.com/boltdb/bolt/quick_test.go index 4da5817..9e27792 100644 --- a/vendor/github.com/boltdb/bolt/quick_test.go +++ b/vendor/github.com/boltdb/bolt/quick_test.go @@ -50,9 +50,17 @@ func (t testdata) Less(i, j int) bool { return bytes.Compare(t[i].Key, t[j].Key) func (t testdata) Generate(rand *rand.Rand, size int) reflect.Value { n := rand.Intn(qmaxitems-1) + 1 items := make(testdata, n) + used := make(map[string]bool) for i := 0; i < n; i++ { item := &items[i] - item.Key = randByteSlice(rand, 1, qmaxksize) + // Ensure that keys are unique by looping until we find one that we have not already used. + for { + item.Key = randByteSlice(rand, 1, qmaxksize) + if !used[string(item.Key)] { + used[string(item.Key)] = true + break + } + } item.Value = randByteSlice(rand, 0, qmaxvsize) } return reflect.ValueOf(items) diff --git a/vendor/github.com/boltdb/bolt/tx.go b/vendor/github.com/boltdb/bolt/tx.go index 1cfb4cd..6700308 100644 --- a/vendor/github.com/boltdb/bolt/tx.go +++ b/vendor/github.com/boltdb/bolt/tx.go @@ -381,7 +381,9 @@ func (tx *Tx) Check() <-chan error { func (tx *Tx) check(ch chan error) { // Check if any pages are double freed. freed := make(map[pgid]bool) - for _, id := range tx.db.freelist.all() { + all := make([]pgid, tx.db.freelist.count()) + tx.db.freelist.copyall(all) + for _, id := range all { if freed[id] { ch <- fmt.Errorf("page %d: already freed", id) } diff --git a/vendor/github.com/couchbase/vellum/.travis.yml b/vendor/github.com/couchbase/vellum/.travis.yml new file mode 100644 index 0000000..c30a4fa --- /dev/null +++ b/vendor/github.com/couchbase/vellum/.travis.yml @@ -0,0 +1,20 @@ +sudo: false + +language: go + +go: + - 1.8 + +script: + - go get github.com/mattn/goveralls + - go get github.com/kisielk/errcheck + - go test -v $(go list ./... | grep -v vendor/) + - go test -race + - go vet + - errcheck + - go test -coverprofile=profile.out -covermode=count + - 'if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then goveralls -service=travis-ci -coverprofile=profile.out -repotoken $COVERALLS; fi' + +notifications: + email: + - marty.schoch@gmail.com diff --git a/vendor/github.com/couchbase/vellum/CONTRIBUTING.md b/vendor/github.com/couchbase/vellum/CONTRIBUTING.md new file mode 100644 index 0000000..b85ec82 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/CONTRIBUTING.md @@ -0,0 +1,16 @@ +# Contributing to Vellum + +We look forward to your contributions, but ask that you first review these guidelines. + +### Sign the CLA + +As Vellum is a Couchbase project we require contributors accept the [Couchbase Contributor License Agreement](http://review.couchbase.org/static/individual_agreement.html). To sign this agreement log into the Couchbase [code review tool](http://review.couchbase.org/). The Vellum project does not use this code review tool but it is still used to track acceptance of the contributor license agreements. + +### Submitting a Pull Request + +All types of contributions are welcome, but please keep the following in mind: + +- If you're planning a large change, you should really discuss it in a github issue first. This helps avoid duplicate effort and spending time on something that may not be merged. +- Existing tests should continue to pass, new tests for the contribution are nice to have. +- All code should have gone through `go fmt` +- All code should pass `go vet` diff --git a/vendor/github.com/couchbase/vellum/LICENSE b/vendor/github.com/couchbase/vellum/LICENSE new file mode 100644 index 0000000..7a4a3ea --- /dev/null +++ b/vendor/github.com/couchbase/vellum/LICENSE @@ -0,0 +1,202 @@ + + 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. \ No newline at end of file diff --git a/vendor/github.com/couchbase/vellum/README.md b/vendor/github.com/couchbase/vellum/README.md new file mode 100644 index 0000000..0c0759a --- /dev/null +++ b/vendor/github.com/couchbase/vellum/README.md @@ -0,0 +1,168 @@ +# ![vellum](docs/logo.png) vellum + +[![Build Status](https://travis-ci.org/couchbase/vellum.svg?branch=master)](https://travis-ci.org/couchbase/vellum) +[![Coverage Status](https://coveralls.io/repos/github/couchbase/vellum/badge.svg?branch=master)](https://coveralls.io/github/couchbase/vellum?branch=master) +[![GoDoc](https://godoc.org/github.com/couchbase/vellum?status.svg)](https://godoc.org/github.com/couchbase/vellum) +[![Go Report Card](https://goreportcard.com/badge/github.com/couchbase/vellum)](https://goreportcard.com/report/github.com/couchbase/vellum) +[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) + +A Go library implementing an FST (finite state transducer) capable of: + - mapping between keys ([]byte) and a value (uint64) + - enumerating keys in lexicographic order + +Some additional goals of this implementation: + - bounded memory use while building the FST + - streaming out FST data while building + - mmap FST runtime to support very large FTSs (optional) + +## Usage + +### Building an FST + +To build an FST, create a new builder using the `New()` method. This method takes an `io.Writer` as an argument. As the FST is being built, data will be streamed to the writer as soon as possible. With this builder you **MUST** insert keys in lexicographic order. Inserting keys out of order will result in an error. After inserting the last key into the builder, you **MUST** call `Close()` on the builder. This will flush all remaining data to the underlying writer. + +In memory: +```go + var buf bytes.Buffer + builder, err := vellum.New(&buf, nil) + if err != nil { + log.Fatal(err) + } +``` + +To disk: +```go + f, err := os.Create("/tmp/vellum.fst") + if err != nil { + log.Fatal(err) + } + builder, err := vellum.New(f, nil) + if err != nil { + log.Fatal(err) + } +``` + +**MUST** insert keys in lexicographic order: +```go +err = builder.Insert([]byte("cat"), 1) +if err != nil { + log.Fatal(err) +} + +err = builder.Insert([]byte("dog"), 2) +if err != nil { + log.Fatal(err) +} + +err = builder.Insert([]byte("fish"), 3) +if err != nil { + log.Fatal(err) +} + +err = builder.Close() +if err != nil { + log.Fatal(err) +} +``` + +### Using an FST + +After closing the builder, the data can be used to instantiate an FST. If the data was written to disk, you can use the `Open()` method to mmap the file. If the data is already in memory, or you wish to load/mmap the data yourself, you can instantiate the FST with the `Load()` method. + +Load in memory: +```go + fst, err := vellum.Load(buf.Bytes()) + if err != nil { + log.Fatal(err) + } +``` + +Open from disk: +```go + fst, err := vellum.Open("/tmp/vellum.fst") + if err != nil { + log.Fatal(err) + } +``` + +Get key/value: +```go + val, exists, err = fst.Get([]byte("dog")) + if err != nil { + log.Fatal(err) + } + if exists { + fmt.Printf("contains dog with val: %d\n", val) + } else { + fmt.Printf("does not contain dog") + } +``` + +Iterate key/values: +```go + itr, err := fst.Iterator(startKeyInclusive, endKeyExclusive) + for err == nil { + key, val := itr.Current() + fmt.Printf("contains key: %s val: %d", key, val) + err = itr.Next() + } + if err != nil { + log.Fatal(err) + } +``` + +### How does the FST get built? + +A full example of the implementation is beyond the scope of this README, but let's consider a small example where we want to insert 3 key/value pairs. + +First we insert "are" with the value 4. + +![step1](docs/demo1.png) + +Next, we insert "ate" with the value 2. + +![step2](docs/demo2.png) + +Notice how the values associated with the transitions were adjusted so that by summing them while traversing we still get the expected value. + +At this point, we see that state 5 looks like state 3, and state 4 looks like state 2. But, we cannot yet combine them because future inserts could change this. + +Now, we insert "see" with value 3. Once it has been added, we now know that states 5 and 4 can longer change. Since they are identical to 3 and 2, we replace them. + +![step3](docs/demo3.png) + +Again, we see that states 7 and 8 appear to be identical to 2 and 3. + +Having inserted our last key, we call `Close()` on the builder. + +![step4](docs/demo4.png) + +Now, states 7 and 8 can safely be replaced with 2 and 3. + +For additional information, see the references at the bottom of this document. + +### What does the serialized format look like? + +We've broken out a separate document on the [vellum disk format v1](docs/format.md). + +### What if I want to use this on a system that doesn't have mmap? + +The mmap library itself is guarded with system/architecture build tags, but we've also added an additional build tag in vellum. If you'd like to Open() a file based representation of an FST, but not use mmap, you can build the library with the `nommap` build tag. NOTE: if you do this, the entire FST will be read into memory. + +### Can I use this with Unicode strings? + +Yes, however this implementation is only aware of the byte representation you choose. In order to find matches, you must work with some canonical byte representation of the string. In the future, some encoding-aware traversals may be possible on top of the lower-level byte transitions. + +### How did this library come to be? + +In my work on the [Bleve](https://github.com/blevesearch/bleve) project I became aware of the power of the FST for many search-related tasks. The obvious starting point for such a thing in Go was the [mafsa](https://github.com/smartystreets/mafsa) project. While working with mafsa I encountered some issues. First, it did not stream data to disk while building. Second, it chose to use a rune as the fundamental unit of transition in the FST, but I felt using a byte would be more powerful in the end. My hope is that higher-level encoding-aware traversals will be possible when necessary. Finally, as I reported bugs and submitted PRs I learned that the mafsa project was mainly a research project and no longer being maintained. I wanted to build something that could be used in production. As the project advanced more and more techniques from the [BurntSushi/fst](https://github.com/BurntSushi/fst) were adapted to our implementation. + +## Related Work + +Much credit goes to two existing projects: + - [mafsa](https://github.com/smartystreets/mafsa) + - [BurntSushi/fst](https://github.com/BurntSushi/fst) + +Most of the original implementation here started with my digging into the internals of mafsa. As the implementation progressed, I continued to borrow ideas/approaches from the BurntSushi/fst library as well. + +For a great introduction to this topic, please read the blog post [Index 1,600,000,000 Keys with Automata and Rust](http://blog.burntsushi.net/transducers/) diff --git a/vendor/github.com/couchbase/vellum/automaton.go b/vendor/github.com/couchbase/vellum/automaton.go new file mode 100644 index 0000000..4752659 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/automaton.go @@ -0,0 +1,85 @@ +// Copyright (c) 2017 Couchbase, 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 vellum + +// Automaton represents the general contract of a byte-based finite automaton +type Automaton interface { + + // Start returns the start state + Start() int + + // IsMatch returns true if and only if the state is a match + IsMatch(int) bool + + // CanMatch returns true if and only if it is possible to reach a match + // in zero or more steps + CanMatch(int) bool + + // WillAlwaysMatch returns true if and only if the current state matches + // and will always match no matter what steps are taken + WillAlwaysMatch(int) bool + + // Accept returns the next state given the input to the specified state + Accept(int, byte) int +} + +// AutomatonContains implements an generic Contains() method which works +// on any implementation of Automaton +func AutomatonContains(a Automaton, k []byte) bool { + i := 0 + curr := a.Start() + for a.CanMatch(curr) && i < len(k) { + curr = a.Accept(curr, k[i]) + if curr == noneAddr { + break + } + i++ + } + if i != len(k) { + return false + } + return a.IsMatch(curr) +} + +// AlwaysMatch is an Automaton implementation which always matches +type AlwaysMatch struct{} + +// Start returns the AlwaysMatch start state +func (m *AlwaysMatch) Start() int { + return 0 +} + +// IsMatch always returns true +func (m *AlwaysMatch) IsMatch(int) bool { + return true +} + +// CanMatch always returns true +func (m *AlwaysMatch) CanMatch(int) bool { + return true +} + +// WillAlwaysMatch always returns true +func (m *AlwaysMatch) WillAlwaysMatch(int) bool { + return true +} + +// Accept returns the next AlwaysMatch state +func (m *AlwaysMatch) Accept(int, byte) int { + return 0 +} + +// creating an alwaysMatchAutomaton to avoid unnecesary repeated allocations. +var alwaysMatchAutomaton = &AlwaysMatch{} diff --git a/vendor/github.com/couchbase/vellum/builder.go b/vendor/github.com/couchbase/vellum/builder.go new file mode 100644 index 0000000..b21db98 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/builder.go @@ -0,0 +1,453 @@ +// Copyright (c) 2017 Couchbase, 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 vellum + +import ( + "bytes" + "io" +) + +var defaultBuilderOpts = &BuilderOpts{ + Encoder: 1, + RegistryTableSize: 10000, + RegistryMRUSize: 2, +} + +// A Builder is used to build a new FST. When possible data is +// streamed out to the underlying Writer as soon as possible. +type Builder struct { + unfinished *unfinishedNodes + registry *registry + last []byte + len int + + lastAddr int + + encoder encoder + opts *BuilderOpts + + builderNodePool builderNodePool + transitionPool transitionPool +} + +const noneAddr = 1 +const emptyAddr = 0 + +// NewBuilder returns a new Builder which will stream out the +// underlying representation to the provided Writer as the set is built. +func newBuilder(w io.Writer, opts *BuilderOpts) (*Builder, error) { + if opts == nil { + opts = defaultBuilderOpts + } + rv := &Builder{ + registry: newRegistry(opts.RegistryTableSize, opts.RegistryMRUSize), + opts: opts, + lastAddr: noneAddr, + } + rv.unfinished = newUnfinishedNodes(&rv.builderNodePool) + + var err error + rv.encoder, err = loadEncoder(opts.Encoder, w) + if err != nil { + return nil, err + } + err = rv.encoder.start() + if err != nil { + return nil, err + } + return rv, nil +} + +func (b *Builder) Reset(w io.Writer) error { + b.transitionPool.reset() + b.builderNodePool.reset() + b.unfinished.Reset(&b.builderNodePool) + b.registry.Reset() + b.lastAddr = noneAddr + b.encoder.reset(w) + b.last = nil + b.len = 0 + + err := b.encoder.start() + if err != nil { + return err + } + return nil +} + +// Insert the provided value to the set being built. +// NOTE: values must be inserted in lexicographical order. +func (b *Builder) Insert(key []byte, val uint64) error { + // ensure items are added in lexicographic order + if bytes.Compare(key, b.last) < 0 { + return ErrOutOfOrder + } + if len(key) == 0 { + b.len = 1 + b.unfinished.setRootOutput(val) + return nil + } + + prefixLen, out := b.unfinished.findCommonPrefixAndSetOutput(key, val) + b.len++ + err := b.compileFrom(prefixLen) + if err != nil { + return err + } + b.copyLastKey(key) + b.unfinished.addSuffix(key[prefixLen:], out, &b.builderNodePool) + + return nil +} + +func (b *Builder) copyLastKey(key []byte) { + if b.last == nil { + b.last = make([]byte, 0, 64) + } else { + b.last = b.last[:0] + } + b.last = append(b.last, key...) +} + +// Close MUST be called after inserting all values. +func (b *Builder) Close() error { + err := b.compileFrom(0) + if err != nil { + return err + } + root := b.unfinished.popRoot() + rootAddr, err := b.compile(root) + if err != nil { + return err + } + return b.encoder.finish(b.len, rootAddr) +} + +func (b *Builder) compileFrom(iState int) error { + addr := noneAddr + for iState+1 < len(b.unfinished.stack) { + var node *builderNode + if addr == noneAddr { + node = b.unfinished.popEmpty() + } else { + node = b.unfinished.popFreeze(addr, &b.transitionPool) + } + var err error + addr, err = b.compile(node) + if err != nil { + return nil + } + } + b.unfinished.topLastFreeze(addr, &b.transitionPool) + return nil +} + +func (b *Builder) compile(node *builderNode) (int, error) { + if node.final && len(node.trans) == 0 && + node.finalOutput == 0 { + return 0, nil + } + found, addr, entry := b.registry.entry(node) + if found { + return addr, nil + } + addr, err := b.encoder.encodeState(node, b.lastAddr) + if err != nil { + return 0, err + } + + b.lastAddr = addr + entry.addr = addr + return addr, nil +} + +type unfinishedNodes struct { + stack []*builderNodeUnfinished + + // cache allocates a reasonable number of builderNodeUnfinished + // objects up front and tries to keep reusing them + // because the main data structure is a stack, we assume the + // same access pattern, and don't track items separately + // this means calls get() and pushXYZ() must be paired, + // as well as calls put() and popXYZ() + cache []builderNodeUnfinished +} + +func (u *unfinishedNodes) Reset(p *builderNodePool) { + u.stack = u.stack[:0] + for i := 0; i < len(u.cache); i++ { + u.cache[i] = builderNodeUnfinished{} + } + u.pushEmpty(false, p) +} + +func newUnfinishedNodes(p *builderNodePool) *unfinishedNodes { + rv := &unfinishedNodes{ + stack: make([]*builderNodeUnfinished, 0, 64), + cache: make([]builderNodeUnfinished, 64), + } + rv.pushEmpty(false, p) + return rv +} + +// get new builderNodeUnfinished, reusing cache if possible +func (u *unfinishedNodes) get() *builderNodeUnfinished { + if len(u.stack) < len(u.cache) { + return &u.cache[len(u.stack)] + } + // full now allocate a new one + return &builderNodeUnfinished{} +} + +// return builderNodeUnfinished, clearing it for reuse +func (u *unfinishedNodes) put() { + if len(u.stack) >= len(u.cache) { + return + // do nothing, not part of cache + } + u.cache[len(u.stack)] = builderNodeUnfinished{} +} + +func (u *unfinishedNodes) findCommonPrefixAndSetOutput(key []byte, + out uint64) (int, uint64) { + var i int + for i < len(key) { + if i >= len(u.stack) { + break + } + var addPrefix uint64 + if !u.stack[i].hasLastT { + break + } + if u.stack[i].lastIn == key[i] { + commonPre := outputPrefix(u.stack[i].lastOut, out) + addPrefix = outputSub(u.stack[i].lastOut, commonPre) + out = outputSub(out, commonPre) + u.stack[i].lastOut = commonPre + i++ + } else { + break + } + + if addPrefix != 0 { + u.stack[i].addOutputPrefix(addPrefix) + } + } + + return i, out +} + +func (u *unfinishedNodes) pushEmpty(final bool, p *builderNodePool) { + next := u.get() + next.node = p.alloc() + next.node.final = final + u.stack = append(u.stack, next) +} + +func (u *unfinishedNodes) popRoot() *builderNode { + l := len(u.stack) + var unfinished *builderNodeUnfinished + u.stack, unfinished = u.stack[:l-1], u.stack[l-1] + rv := unfinished.node + u.put() + return rv +} + +func (u *unfinishedNodes) popFreeze(addr int, tp *transitionPool) *builderNode { + l := len(u.stack) + var unfinished *builderNodeUnfinished + u.stack, unfinished = u.stack[:l-1], u.stack[l-1] + unfinished.lastCompiled(addr, tp) + rv := unfinished.node + u.put() + return rv +} + +func (u *unfinishedNodes) popEmpty() *builderNode { + l := len(u.stack) + var unfinished *builderNodeUnfinished + u.stack, unfinished = u.stack[:l-1], u.stack[l-1] + rv := unfinished.node + u.put() + return rv +} + +func (u *unfinishedNodes) setRootOutput(out uint64) { + u.stack[0].node.final = true + u.stack[0].node.finalOutput = out +} + +func (u *unfinishedNodes) topLastFreeze(addr int, tp *transitionPool) { + last := len(u.stack) - 1 + u.stack[last].lastCompiled(addr, tp) +} + +func (u *unfinishedNodes) addSuffix(bs []byte, out uint64, p *builderNodePool) { + if len(bs) == 0 { + return + } + last := len(u.stack) - 1 + u.stack[last].hasLastT = true + u.stack[last].lastIn = bs[0] + u.stack[last].lastOut = out + for _, b := range bs[1:] { + next := u.get() + next.node = p.alloc() + next.hasLastT = true + next.lastIn = b + next.lastOut = 0 + u.stack = append(u.stack, next) + } + u.pushEmpty(true, p) +} + +type builderNodeUnfinished struct { + node *builderNode + lastOut uint64 + lastIn byte + hasLastT bool +} + +func (b *builderNodeUnfinished) lastCompiled(addr int, tp *transitionPool) { + if b.hasLastT { + transIn := b.lastIn + transOut := b.lastOut + b.hasLastT = false + b.lastOut = 0 + trans := tp.alloc() + trans.in = transIn + trans.out = transOut + trans.addr = addr + b.node.trans = append(b.node.trans, trans) + } +} + +func (b *builderNodeUnfinished) addOutputPrefix(prefix uint64) { + if b.node.final { + b.node.finalOutput = outputCat(prefix, b.node.finalOutput) + } + for _, t := range b.node.trans { + t.out = outputCat(prefix, t.out) + } + if b.hasLastT { + b.lastOut = outputCat(prefix, b.lastOut) + } +} + +type builderNode struct { + finalOutput uint64 + trans []*transition + final bool +} + +func (n *builderNode) equiv(o *builderNode) bool { + if n.final != o.final { + return false + } + if n.finalOutput != o.finalOutput { + return false + } + if len(n.trans) != len(o.trans) { + return false + } + for i, ntrans := range n.trans { + otrans := o.trans[i] + if ntrans.in != otrans.in { + return false + } + if ntrans.addr != otrans.addr { + return false + } + if ntrans.out != otrans.out { + return false + } + } + return true +} + +type transition struct { + out uint64 + addr int + in byte +} + +func outputPrefix(l, r uint64) uint64 { + if l < r { + return l + } + return r +} + +func outputSub(l, r uint64) uint64 { + return l - r +} + +func outputCat(l, r uint64) uint64 { + return l + r +} + +// the next builderNode to alloc() will be all[nextOuter][nextInner] +type builderNodePool struct { + all [][]builderNode + nextOuter int + nextInner int +} + +func (p *builderNodePool) reset() { + p.nextOuter = 0 + p.nextInner = 0 +} + +func (p *builderNodePool) alloc() *builderNode { + if p.nextOuter >= len(p.all) { + p.all = append(p.all, make([]builderNode, 256)) + } + rv := &p.all[p.nextOuter][p.nextInner] + p.nextInner += 1 + if p.nextInner >= len(p.all[p.nextOuter]) { + p.nextOuter += 1 + p.nextInner = 0 + } + rv.finalOutput = 0 + rv.trans = rv.trans[:0] + rv.final = false + return rv +} + +// the next transition to alloc() will be all[nextOuter][nextInner] +type transitionPool struct { + all [][]transition + nextOuter int + nextInner int +} + +func (p *transitionPool) reset() { + p.nextOuter = 0 + p.nextInner = 0 +} + +func (p *transitionPool) alloc() *transition { + if p.nextOuter >= len(p.all) { + p.all = append(p.all, make([]transition, 256)) + } + rv := &p.all[p.nextOuter][p.nextInner] + p.nextInner += 1 + if p.nextInner >= len(p.all[p.nextOuter]) { + p.nextOuter += 1 + p.nextInner = 0 + } + *rv = transition{} + return rv +} diff --git a/vendor/github.com/couchbase/vellum/builder_test.go b/vendor/github.com/couchbase/vellum/builder_test.go new file mode 100644 index 0000000..fe35e44 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/builder_test.go @@ -0,0 +1,256 @@ +// Copyright (c) 2017 Couchbase, 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 vellum + +import ( + "bufio" + "io/ioutil" + "math/rand" + "os" + "sort" + "testing" +) + +func init() { + thousandTestWords, _ = loadWords("data/words-1000.txt") +} + +// this simple test case only has a shared final state +// it also tests out of order insert +func TestBuilderSimple(t *testing.T) { + b, err := New(ioutil.Discard, nil) + if err != nil { + t.Fatalf("error creating builder: %v", err) + } + + // add our first string + err = b.Insert([]byte("jul"), 0) + if err != nil { + t.Errorf("got error inserting string: %v", err) + } + // expect len to be 1 + if b.len != 1 { + t.Errorf("expected node count to be 1, got %v", b.len) + } + + // try to add a value out of order (not allowed) + err = b.Insert([]byte("abc"), 0) + if err == nil { + t.Errorf("expected err, got nil") + } + + // add a second string + err = b.Insert([]byte("mar"), 0) + if err != nil { + t.Errorf("got error inserting string: %v", err) + } + // expect len to grow by 1 + if b.len != 2 { + t.Errorf("expected node count to be 2, got %v", b.len) + } + + // now close the builder + err = b.Close() + if err != nil { + t.Errorf("got error closing set builder: %v", err) + } +} + +func TestBuilderSharedPrefix(t *testing.T) { + b, err := New(ioutil.Discard, nil) + if err != nil { + t.Fatalf("error creating builder: %v", err) + } + + // add our first string + err = b.Insert([]byte("car"), 0) + if err != nil { + t.Errorf("got error inserting string: %v", err) + } + // expect len to be 1 + if b.len != 1 { + t.Errorf("expected node count to be 1, got %v", b.len) + } + + // add a second string + err = b.Insert([]byte("cat"), 0) + if err != nil { + t.Errorf("got error inserting string: %v", err) + } + // expect len to be 2 + if b.len != 2 { + t.Errorf("expected node count to be 2, got %v", b.len) + } + + // now close the builder + err = b.Close() + if err != nil { + t.Errorf("got error closing set builder: %v", err) + } +} + +func randomValues(list []string) []uint64 { + rv := make([]uint64, len(list)) + for i := range list { + rv[i] = uint64(rand.Uint64()) + } + return rv +} + +func insertStrings(b *Builder, list []string, vals []uint64) error { + for i, item := range list { + err := b.Insert([]byte(item), vals[i]) + if err != nil { + return err + } + } + return nil +} + +var smallSample = map[string]uint64{ + "mon": 2, + "tues": 3, + "thurs": 5, + "tye": 99, +} + +func insertStringMap(b *Builder, m map[string]uint64) error { + // make list of keys + keys := make([]string, 0, len(m)) + for k := range m { + keys = append(keys, k) + } + // sort it + sort.Strings(keys) + // insert in sorted order + for _, k := range keys { + err := b.Insert([]byte(k), m[k]) + if err != nil { + return err + } + } + return nil +} + +func TestBuilderNodeEquiv(t *testing.T) { + tests := []struct { + desc string + a *builderNode + b *builderNode + want bool + }{ + { + "both states final", + &builderNode{ + final: true, + }, + &builderNode{ + final: true, + }, + true, + }, + { + "both states final, different final val", + &builderNode{ + final: true, + finalOutput: 7, + }, + &builderNode{ + final: true, + finalOutput: 9, + }, + false, + }, + { + "both states final, same transitions, but different trans val", + &builderNode{ + final: true, + trans: []*transition{ + {in: 'a', out: 7}, + }, + }, + &builderNode{ + final: true, + trans: []*transition{ + {in: 'a', out: 9}, + }, + }, + false, + }, + } + + for _, test := range tests { + t.Run(test.desc, func(t *testing.T) { + got := test.a.equiv(test.b) + if got != test.want { + t.Errorf("wanted: %t, got: %t", test.want, got) + } + }) + } +} + +func loadWords(path string) ([]string, error) { + var rv []string + + file, err := os.Open(path) + if err != nil { + return nil, err + } + + scanner := bufio.NewScanner(file) + for scanner.Scan() { + word := append([]byte(nil), scanner.Bytes()...) + rv = append(rv, string(word)) + if err != nil { + return nil, err + } + } + + if err = scanner.Err(); err != nil { + return nil, err + } + + err = file.Close() + if err != nil { + return nil, err + } + + return rv, nil +} + +var thousandTestWords []string + +func BenchmarkBuilder(b *testing.B) { + dataset := thousandTestWords + randomThousandVals := randomValues(dataset) + + b.ResetTimer() + + for i := 0; i < b.N; i++ { + + builder, err := New(ioutil.Discard, nil) + if err != nil { + b.Fatalf("error creating builder: %v", err) + } + err = insertStrings(builder, dataset, randomThousandVals) + if err != nil { + b.Fatalf("error inserting thousand words: %v", err) + } + err = builder.Close() + if err != nil { + b.Fatalf("error closing builder: %v", err) + } + } +} diff --git a/vendor/github.com/couchbase/vellum/cmd/vellum/cmd/dot.go b/vendor/github.com/couchbase/vellum/cmd/vellum/cmd/dot.go new file mode 100644 index 0000000..4f6fd25 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/cmd/vellum/cmd/dot.go @@ -0,0 +1,86 @@ +// Copyright (c) 2017 Couchbase, 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 cmd + +import ( + "fmt" + "io" + "os" + + "github.com/couchbase/vellum" + "github.com/spf13/cobra" +) + +var dotCmd = &cobra.Command{ + Use: "dot", + Short: "Dot prints the contents of this vellum FST file in the dot format", + Long: `Dot prints the contents of this vellum FST file in the dot format.`, + PreRunE: func(cmd *cobra.Command, args []string) error { + if len(args) < 1 { + return fmt.Errorf("path is required") + } + return nil + }, + RunE: func(cmd *cobra.Command, args []string) error { + fst, err := vellum.Open(args[0]) + if err != nil { + return err + } + + return dotToWriter(fst, os.Stdout) + }, +} + +func dotToWriter(fst *vellum.FST, w io.Writer) error { + _, err := fmt.Fprint(w, dotHeader) + if err != nil { + return err + } + err = fst.Debug(func(n int, state interface{}) error { + if d, ok := state.(dotStringer); ok { + _, err = fmt.Fprintf(w, "%s", d.DotString(n)) + if err != nil { + return err + } + } + return nil + }) + if err != nil { + return err + } + _, err = fmt.Fprint(w, dotFooter) + if err != nil { + return err + } + return nil +} + +const dotHeader = ` +digraph automaton { + labelloc="l"; + labeljust="l"; + rankdir="LR"; + +` +const dotFooter = `} +` + +type dotStringer interface { + DotString(int) string +} + +func init() { + RootCmd.AddCommand(dotCmd) +} diff --git a/vendor/github.com/couchbase/vellum/cmd/vellum/cmd/dump.go b/vendor/github.com/couchbase/vellum/cmd/vellum/cmd/dump.go new file mode 100644 index 0000000..33a1d52 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/cmd/vellum/cmd/dump.go @@ -0,0 +1,51 @@ +// Copyright (c) 2017 Couchbase, 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 cmd + +import ( + "fmt" + + "github.com/couchbase/vellum" + "github.com/spf13/cobra" +) + +// dumpCmd represents the dump command +var dumpCmd = &cobra.Command{ + Use: "dump", + Short: "Dumps the contents of this vellum FST file", + Long: `Dumps the contents of this vellum FST file.`, + PreRunE: func(cmd *cobra.Command, args []string) error { + if len(args) < 1 { + return fmt.Errorf("path is required") + } + return nil + }, + RunE: func(cmd *cobra.Command, args []string) error { + fst, err := vellum.Open(args[0]) + if err != nil { + return err + } + return fst.Debug(debugPrint) + }, +} + +func debugPrint(n int, state interface{}) error { + fmt.Printf("%v\n", state) + return nil +} + +func init() { + RootCmd.AddCommand(dumpCmd) +} diff --git a/vendor/github.com/couchbase/vellum/cmd/vellum/cmd/fuzzy.go b/vendor/github.com/couchbase/vellum/cmd/vellum/cmd/fuzzy.go new file mode 100644 index 0000000..8372696 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/cmd/vellum/cmd/fuzzy.go @@ -0,0 +1,74 @@ +// Copyright (c) 2017 Couchbase, 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 cmd + +import ( + "fmt" + + "github.com/couchbase/vellum" + "github.com/couchbase/vellum/levenshtein" + "github.com/spf13/cobra" +) + +var query string +var distance int + +var fuzzyCmd = &cobra.Command{ + Use: "fuzzy", + Short: "Fuzzy runs a fuzzy query over the contents of this vellum FST file", + Long: `Fuzzy runs a fuzzy query over the contents of this vellum FST file.`, + PreRunE: func(cmd *cobra.Command, args []string) error { + if len(args) < 1 { + return fmt.Errorf("path is required") + } + if len(args) > 1 { + query = args[1] + } + + return nil + }, + RunE: func(cmd *cobra.Command, args []string) error { + fst, err := vellum.Open(args[0]) + if err != nil { + return err + } + fuzzy, err := levenshtein.New(query, distance) + if err != nil { + return err + } + var startKeyB, endKeyB []byte + if startKey != "" { + startKeyB = []byte(startKey) + } + if endKey != "" { + endKeyB = []byte(endKey) + } + itr, err := fst.Search(fuzzy, startKeyB, endKeyB) + for err == nil { + key, val := itr.Current() + fmt.Printf("%s - %d\n", key, val) + err = itr.Next() + } + + return nil + }, +} + +func init() { + RootCmd.AddCommand(fuzzyCmd) + fuzzyCmd.Flags().StringVar(&startKey, "start", "", "start key inclusive") + fuzzyCmd.Flags().StringVar(&endKey, "end", "", "end key inclusive") + fuzzyCmd.Flags().IntVar(&distance, "distance", 1, "edit distance in Unicode codepoints") +} diff --git a/vendor/github.com/couchbase/vellum/cmd/vellum/cmd/grep.go b/vendor/github.com/couchbase/vellum/cmd/vellum/cmd/grep.go new file mode 100644 index 0000000..dac2553 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/cmd/vellum/cmd/grep.go @@ -0,0 +1,72 @@ +// Copyright (c) 2017 Couchbase, 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 cmd + +import ( + "fmt" + + "github.com/couchbase/vellum" + "github.com/couchbase/vellum/regexp" + "github.com/spf13/cobra" +) + +var grepCmd = &cobra.Command{ + Use: "grep", + Short: "Grep runs regular expression searches over the contents of this " + + "vellum FST file.", + Long: `Grep runs regular expression searches over the contents of this ` + + `vellum FST file.`, + PreRunE: func(cmd *cobra.Command, args []string) error { + if len(args) < 1 { + return fmt.Errorf("path is required") + } + if len(args) > 1 { + query = args[1] + } + + return nil + }, + RunE: func(cmd *cobra.Command, args []string) error { + fst, err := vellum.Open(args[0]) + if err != nil { + return err + } + r, err := regexp.New(query) + if err != nil { + return err + } + var startKeyB, endKeyB []byte + if startKey != "" { + startKeyB = []byte(startKey) + } + if endKey != "" { + endKeyB = []byte(endKey) + } + itr, err := fst.Search(r, startKeyB, endKeyB) + for err == nil { + key, val := itr.Current() + fmt.Printf("%s - %d\n", key, val) + err = itr.Next() + } + + return nil + }, +} + +func init() { + RootCmd.AddCommand(grepCmd) + grepCmd.Flags().StringVar(&startKey, "start", "", "start key inclusive") + grepCmd.Flags().StringVar(&endKey, "end", "", "end key inclusive") +} diff --git a/vendor/github.com/couchbase/vellum/cmd/vellum/cmd/info.go b/vendor/github.com/couchbase/vellum/cmd/vellum/cmd/info.go new file mode 100644 index 0000000..5176e39 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/cmd/vellum/cmd/info.go @@ -0,0 +1,47 @@ +// Copyright (c) 2017 Couchbase, 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 cmd + +import ( + "fmt" + + "github.com/couchbase/vellum" + "github.com/spf13/cobra" +) + +var infoCmd = &cobra.Command{ + Use: "info", + Short: "Prints info about this vellum FST file", + Long: `Prints info about this vellum FST file.`, + PreRunE: func(cmd *cobra.Command, args []string) error { + if len(args) < 1 { + return fmt.Errorf("path is required") + } + return nil + }, + RunE: func(cmd *cobra.Command, args []string) error { + fst, err := vellum.Open(args[0]) + if err != nil { + return err + } + fmt.Printf("version: %d\n", fst.Version()) + fmt.Printf("length: %d\n", fst.Len()) + return nil + }, +} + +func init() { + RootCmd.AddCommand(infoCmd) +} diff --git a/vendor/github.com/couchbase/vellum/cmd/vellum/cmd/map.go b/vendor/github.com/couchbase/vellum/cmd/vellum/cmd/map.go new file mode 100644 index 0000000..3aafb6b --- /dev/null +++ b/vendor/github.com/couchbase/vellum/cmd/vellum/cmd/map.go @@ -0,0 +1,98 @@ +// Copyright (c) 2017 Couchbase, 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 cmd + +import ( + "encoding/csv" + "fmt" + "io" + "log" + "os" + "strconv" + + "github.com/couchbase/vellum" + "github.com/spf13/cobra" +) + +var mapCmd = &cobra.Command{ + Use: "map", + Short: "Map builds a new FST from a CSV file containing key,val pairs", + Long: `Map builds a new FST from a CSV file containing key,val pairs.`, + PreRunE: func(cmd *cobra.Command, args []string) error { + if len(args) < 1 { + return fmt.Errorf("source and target paths are required") + } + if len(args) < 2 { + return fmt.Errorf("target path is required") + } + return nil + }, + RunE: func(cmd *cobra.Command, args []string) error { + + if !sorted { + return fmt.Errorf("only sorted input supported at this time") + } + + file, err := os.Open(args[0]) + if err != nil { + log.Fatal(err) + } + defer file.Close() + + f, err := os.Create(args[1]) + if err != nil { + return err + } + + b, err := vellum.New(f, nil) + if err != nil { + return err + } + + reader := csv.NewReader(file) + reader.FieldsPerRecord = 2 + + var record []string + record, err = reader.Read() + for err == nil { + var v uint64 + v, err = strconv.ParseUint(record[1], 10, 64) + if err != nil { + return err + } + err = b.Insert([]byte(record[0]), v) + if err != nil { + return err + } + + record, err = reader.Read() + } + if err != io.EOF { + return err + } + + err = b.Close() + if err != nil { + return err + } + + return nil + }, +} + +func init() { + RootCmd.AddCommand(mapCmd) + mapCmd.Flags().BoolVar(&sorted, "sorted", false, "input already sorted") +} diff --git a/vendor/github.com/couchbase/vellum/cmd/vellum/cmd/range.go b/vendor/github.com/couchbase/vellum/cmd/vellum/cmd/range.go new file mode 100644 index 0000000..311122a --- /dev/null +++ b/vendor/github.com/couchbase/vellum/cmd/vellum/cmd/range.go @@ -0,0 +1,64 @@ +// Copyright (c) 2017 Couchbase, 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 cmd + +import ( + "fmt" + + "github.com/couchbase/vellum" + "github.com/spf13/cobra" +) + +var startKey string +var endKey string + +var rangeCmd = &cobra.Command{ + Use: "range", + Short: "Range iterates over the contents of this vellum FST file", + Long: `Range iterates over the contents of this vellum FST file. You can optionally specify start/end keys after the filename.`, + PreRunE: func(cmd *cobra.Command, args []string) error { + if len(args) < 1 { + return fmt.Errorf("path is required") + } + return nil + }, + RunE: func(cmd *cobra.Command, args []string) error { + fst, err := vellum.Open(args[0]) + if err != nil { + return err + } + var startKeyB, endKeyB []byte + if startKey != "" { + startKeyB = []byte(startKey) + } + if endKey != "" { + endKeyB = []byte(endKey) + } + itr, err := fst.Iterator(startKeyB, endKeyB) + for err == nil { + key, val := itr.Current() + fmt.Printf("%s - %d\n", key, val) + err = itr.Next() + } + + return nil + }, +} + +func init() { + RootCmd.AddCommand(rangeCmd) + rangeCmd.Flags().StringVar(&startKey, "start", "", "start key inclusive") + rangeCmd.Flags().StringVar(&endKey, "end", "", "end key inclusive") +} diff --git a/vendor/github.com/couchbase/vellum/cmd/vellum/cmd/root.go b/vendor/github.com/couchbase/vellum/cmd/vellum/cmd/root.go new file mode 100644 index 0000000..62faf1d --- /dev/null +++ b/vendor/github.com/couchbase/vellum/cmd/vellum/cmd/root.go @@ -0,0 +1,51 @@ +// Copyright (c) 2017 Couchbase, 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 cmd + +import ( + "fmt" + "net/http" + "os" + + "github.com/spf13/cobra" +) + +var expvarBind string + +// RootCmd represents the base command when called without any subcommands +var RootCmd = &cobra.Command{ + Use: "vellum", + Short: "A utility to work with vellum FST files", + Long: `A utility to work with vellum FST files.`, + PersistentPreRunE: func(cmd *cobra.Command, args []string) error { + if expvarBind != "" { + go http.ListenAndServe(expvarBind, nil) + } + return nil + }, +} + +// Execute adds all child commands to the root command sets flags appropriately. +// This is called by main.main(). It only needs to happen once to the rootCmd. +func Execute() { + if err := RootCmd.Execute(); err != nil { + fmt.Println(err) + os.Exit(-1) + } +} + +func init() { + RootCmd.PersistentFlags().StringVar(&expvarBind, "expvar", "", "bind address for expvar, default none") +} diff --git a/vendor/github.com/couchbase/vellum/cmd/vellum/cmd/set.go b/vendor/github.com/couchbase/vellum/cmd/vellum/cmd/set.go new file mode 100644 index 0000000..d1c970c --- /dev/null +++ b/vendor/github.com/couchbase/vellum/cmd/vellum/cmd/set.go @@ -0,0 +1,89 @@ +// Copyright (c) 2017 Couchbase, 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 cmd + +import ( + "bufio" + "fmt" + "log" + "os" + + "github.com/couchbase/vellum" + "github.com/spf13/cobra" +) + +var sorted bool + +var setCmd = &cobra.Command{ + Use: "set", + Short: "Set builds a new FST from a file containing new-line separated values", + Long: `Set builds a new FST from a file containing new-line separated values.`, + PreRunE: func(cmd *cobra.Command, args []string) error { + if len(args) < 1 { + return fmt.Errorf("source and target paths are required") + } + if len(args) < 2 { + return fmt.Errorf("target path is required") + } + return nil + }, + RunE: func(cmd *cobra.Command, args []string) error { + + if !sorted { + return fmt.Errorf("only sorted input supported at this time") + } + + file, err := os.Open(args[0]) + if err != nil { + log.Fatal(err) + } + defer file.Close() + + f, err := os.Create(args[1]) + if err != nil { + return err + } + + b, err := vellum.New(f, nil) + if err != nil { + return err + } + + scanner := bufio.NewScanner(file) + for scanner.Scan() { + word := append([]byte(nil), scanner.Bytes()...) + err = b.Insert(word, 0) + if err != nil { + return err + } + } + + if err = scanner.Err(); err != nil { + log.Fatal(err) + } + + err = b.Close() + if err != nil { + return err + } + + return nil + }, +} + +func init() { + RootCmd.AddCommand(setCmd) + setCmd.Flags().BoolVar(&sorted, "sorted", false, "input already sorted") +} diff --git a/vendor/github.com/couchbase/vellum/cmd/vellum/cmd/svg.go b/vendor/github.com/couchbase/vellum/cmd/vellum/cmd/svg.go new file mode 100644 index 0000000..711341c --- /dev/null +++ b/vendor/github.com/couchbase/vellum/cmd/vellum/cmd/svg.go @@ -0,0 +1,69 @@ +// Copyright (c) 2017 Couchbase, 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 cmd + +import ( + "fmt" + "io" + "io/ioutil" + "os" + "os/exec" + + "github.com/couchbase/vellum" + "github.com/spf13/cobra" +) + +var svgCmd = &cobra.Command{ + Use: "svg", + Short: "SVG prints the contents of this vellum FST file in the SVG format", + Long: `SVG prints the contents of this vellum FST file in the SVG format.`, + PreRunE: func(cmd *cobra.Command, args []string) error { + if len(args) < 1 { + return fmt.Errorf("path is required") + } + return nil + }, + RunE: func(cmd *cobra.Command, args []string) error { + fst, err := vellum.Open(args[0]) + if err != nil { + return err + } + + return svgToWriter(fst, os.Stdout) + }, +} + +func svgToWriter(fst *vellum.FST, w io.Writer) error { + pr, pw := io.Pipe() + go func() { + defer func() { + _ = pw.Close() + }() + _ = dotToWriter(fst, pw) + }() + cmd := exec.Command("dot", "-Tsvg") + cmd.Stdin = pr + cmd.Stdout = w + cmd.Stderr = ioutil.Discard + err := cmd.Run() + if err != nil { + return err + } + return nil +} + +func init() { + RootCmd.AddCommand(svgCmd) +} diff --git a/vendor/github.com/couchbase/vellum/cmd/vellum/main.go b/vendor/github.com/couchbase/vellum/cmd/vellum/main.go new file mode 100644 index 0000000..4279d9f --- /dev/null +++ b/vendor/github.com/couchbase/vellum/cmd/vellum/main.go @@ -0,0 +1,25 @@ +// Copyright (c) 2017 Couchbase, 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 main + +import ( + _ "expvar" + + "github.com/couchbase/vellum/cmd/vellum/cmd" +) + +func main() { + cmd.Execute() +} diff --git a/vendor/github.com/couchbase/vellum/common.go b/vendor/github.com/couchbase/vellum/common.go new file mode 100644 index 0000000..cd3e6a0 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/common.go @@ -0,0 +1,547 @@ +// Copyright (c) 2017 Couchbase, 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 vellum + +const maxCommon = 1<<6 - 1 + +func encodeCommon(in byte) byte { + val := byte((int(commonInputs[in]) + 1) % 256) + if val > maxCommon { + return 0 + } + return val +} + +func decodeCommon(in byte) byte { + return commonInputsInv[in-1] +} + +var commonInputs = []byte{ + 84, // '\x00' + 85, // '\x01' + 86, // '\x02' + 87, // '\x03' + 88, // '\x04' + 89, // '\x05' + 90, // '\x06' + 91, // '\x07' + 92, // '\x08' + 93, // '\t' + 94, // '\n' + 95, // '\x0b' + 96, // '\x0c' + 97, // '\r' + 98, // '\x0e' + 99, // '\x0f' + 100, // '\x10' + 101, // '\x11' + 102, // '\x12' + 103, // '\x13' + 104, // '\x14' + 105, // '\x15' + 106, // '\x16' + 107, // '\x17' + 108, // '\x18' + 109, // '\x19' + 110, // '\x1a' + 111, // '\x1b' + 112, // '\x1c' + 113, // '\x1d' + 114, // '\x1e' + 115, // '\x1f' + 116, // ' ' + 80, // '!' + 117, // '"' + 118, // '#' + 79, // '$' + 39, // '%' + 30, // '&' + 81, // "'" + 75, // '(' + 74, // ')' + 82, // '*' + 57, // '+' + 66, // ',' + 16, // '-' + 12, // '.' + 2, // '/' + 19, // '0' + 20, // '1' + 21, // '2' + 27, // '3' + 32, // '4' + 29, // '5' + 35, // '6' + 36, // '7' + 37, // '8' + 34, // '9' + 24, // ':' + 73, // ';' + 119, // '<' + 23, // '=' + 120, // '>' + 40, // '?' + 83, // '@' + 44, // 'A' + 48, // 'B' + 42, // 'C' + 43, // 'D' + 49, // 'E' + 46, // 'F' + 62, // 'G' + 61, // 'H' + 47, // 'I' + 69, // 'J' + 68, // 'K' + 58, // 'L' + 56, // 'M' + 55, // 'N' + 59, // 'O' + 51, // 'P' + 72, // 'Q' + 54, // 'R' + 45, // 'S' + 52, // 'T' + 64, // 'U' + 65, // 'V' + 63, // 'W' + 71, // 'X' + 67, // 'Y' + 70, // 'Z' + 77, // '[' + 121, // '\\' + 78, // ']' + 122, // '^' + 31, // '_' + 123, // '`' + 4, // 'a' + 25, // 'b' + 9, // 'c' + 17, // 'd' + 1, // 'e' + 26, // 'f' + 22, // 'g' + 13, // 'h' + 7, // 'i' + 50, // 'j' + 38, // 'k' + 14, // 'l' + 15, // 'm' + 10, // 'n' + 3, // 'o' + 8, // 'p' + 60, // 'q' + 6, // 'r' + 5, // 's' + 0, // 't' + 18, // 'u' + 33, // 'v' + 11, // 'w' + 41, // 'x' + 28, // 'y' + 53, // 'z' + 124, // '{' + 125, // '|' + 126, // '}' + 76, // '~' + 127, // '\x7f' + 128, // '\x80' + 129, // '\x81' + 130, // '\x82' + 131, // '\x83' + 132, // '\x84' + 133, // '\x85' + 134, // '\x86' + 135, // '\x87' + 136, // '\x88' + 137, // '\x89' + 138, // '\x8a' + 139, // '\x8b' + 140, // '\x8c' + 141, // '\x8d' + 142, // '\x8e' + 143, // '\x8f' + 144, // '\x90' + 145, // '\x91' + 146, // '\x92' + 147, // '\x93' + 148, // '\x94' + 149, // '\x95' + 150, // '\x96' + 151, // '\x97' + 152, // '\x98' + 153, // '\x99' + 154, // '\x9a' + 155, // '\x9b' + 156, // '\x9c' + 157, // '\x9d' + 158, // '\x9e' + 159, // '\x9f' + 160, // '\xa0' + 161, // '¡' + 162, // '¢' + 163, // '£' + 164, // '¤' + 165, // '¥' + 166, // '¦' + 167, // '§' + 168, // '¨' + 169, // '©' + 170, // 'ª' + 171, // '«' + 172, // '¬' + 173, // '\xad' + 174, // '®' + 175, // '¯' + 176, // '°' + 177, // '±' + 178, // '²' + 179, // '³' + 180, // '´' + 181, // 'µ' + 182, // '¶' + 183, // '·' + 184, // '¸' + 185, // '¹' + 186, // 'º' + 187, // '»' + 188, // '¼' + 189, // '½' + 190, // '¾' + 191, // '¿' + 192, // 'À' + 193, // 'Á' + 194, // 'Â' + 195, // 'Ã' + 196, // 'Ä' + 197, // 'Å' + 198, // 'Æ' + 199, // 'Ç' + 200, // 'È' + 201, // 'É' + 202, // 'Ê' + 203, // 'Ë' + 204, // 'Ì' + 205, // 'Í' + 206, // 'Î' + 207, // 'Ï' + 208, // 'Ð' + 209, // 'Ñ' + 210, // 'Ò' + 211, // 'Ó' + 212, // 'Ô' + 213, // 'Õ' + 214, // 'Ö' + 215, // '×' + 216, // 'Ø' + 217, // 'Ù' + 218, // 'Ú' + 219, // 'Û' + 220, // 'Ü' + 221, // 'Ý' + 222, // 'Þ' + 223, // 'ß' + 224, // 'à' + 225, // 'á' + 226, // 'â' + 227, // 'ã' + 228, // 'ä' + 229, // 'å' + 230, // 'æ' + 231, // 'ç' + 232, // 'è' + 233, // 'é' + 234, // 'ê' + 235, // 'ë' + 236, // 'ì' + 237, // 'í' + 238, // 'î' + 239, // 'ï' + 240, // 'ð' + 241, // 'ñ' + 242, // 'ò' + 243, // 'ó' + 244, // 'ô' + 245, // 'õ' + 246, // 'ö' + 247, // '÷' + 248, // 'ø' + 249, // 'ù' + 250, // 'ú' + 251, // 'û' + 252, // 'ü' + 253, // 'ý' + 254, // 'þ' + 255, // 'ÿ' +} + +var commonInputsInv = []byte{ + 't', + 'e', + '/', + 'o', + 'a', + 's', + 'r', + 'i', + 'p', + 'c', + 'n', + 'w', + '.', + 'h', + 'l', + 'm', + '-', + 'd', + 'u', + '0', + '1', + '2', + 'g', + '=', + ':', + 'b', + 'f', + '3', + 'y', + '5', + '&', + '_', + '4', + 'v', + '9', + '6', + '7', + '8', + 'k', + '%', + '?', + 'x', + 'C', + 'D', + 'A', + 'S', + 'F', + 'I', + 'B', + 'E', + 'j', + 'P', + 'T', + 'z', + 'R', + 'N', + 'M', + '+', + 'L', + 'O', + 'q', + 'H', + 'G', + 'W', + 'U', + 'V', + ',', + 'Y', + 'K', + 'J', + 'Z', + 'X', + 'Q', + ';', + ')', + '(', + '~', + '[', + ']', + '$', + '!', + '\'', + '*', + '@', + '\x00', + '\x01', + '\x02', + '\x03', + '\x04', + '\x05', + '\x06', + '\x07', + '\x08', + '\t', + '\n', + '\x0b', + '\x0c', + '\r', + '\x0e', + '\x0f', + '\x10', + '\x11', + '\x12', + '\x13', + '\x14', + '\x15', + '\x16', + '\x17', + '\x18', + '\x19', + '\x1a', + '\x1b', + '\x1c', + '\x1d', + '\x1e', + '\x1f', + ' ', + '"', + '#', + '<', + '>', + '\\', + '^', + '`', + '{', + '|', + '}', + '\x7f', + '\x80', + '\x81', + '\x82', + '\x83', + '\x84', + '\x85', + '\x86', + '\x87', + '\x88', + '\x89', + '\x8a', + '\x8b', + '\x8c', + '\x8d', + '\x8e', + '\x8f', + '\x90', + '\x91', + '\x92', + '\x93', + '\x94', + '\x95', + '\x96', + '\x97', + '\x98', + '\x99', + '\x9a', + '\x9b', + '\x9c', + '\x9d', + '\x9e', + '\x9f', + '\xa0', + '\xa1', + '\xa2', + '\xa3', + '\xa4', + '\xa5', + '\xa6', + '\xa7', + '\xa8', + '\xa9', + '\xaa', + '\xab', + '\xac', + '\xad', + '\xae', + '\xaf', + '\xb0', + '\xb1', + '\xb2', + '\xb3', + '\xb4', + '\xb5', + '\xb6', + '\xb7', + '\xb8', + '\xb9', + '\xba', + '\xbb', + '\xbc', + '\xbd', + '\xbe', + '\xbf', + '\xc0', + '\xc1', + '\xc2', + '\xc3', + '\xc4', + '\xc5', + '\xc6', + '\xc7', + '\xc8', + '\xc9', + '\xca', + '\xcb', + '\xcc', + '\xcd', + '\xce', + '\xcf', + '\xd0', + '\xd1', + '\xd2', + '\xd3', + '\xd4', + '\xd5', + '\xd6', + '\xd7', + '\xd8', + '\xd9', + '\xda', + '\xdb', + '\xdc', + '\xdd', + '\xde', + '\xdf', + '\xe0', + '\xe1', + '\xe2', + '\xe3', + '\xe4', + '\xe5', + '\xe6', + '\xe7', + '\xe8', + '\xe9', + '\xea', + '\xeb', + '\xec', + '\xed', + '\xee', + '\xef', + '\xf0', + '\xf1', + '\xf2', + '\xf3', + '\xf4', + '\xf5', + '\xf6', + '\xf7', + '\xf8', + '\xf9', + '\xfa', + '\xfb', + '\xfc', + '\xfd', + '\xfe', + '\xff', +} diff --git a/vendor/github.com/couchbase/vellum/common_test.go b/vendor/github.com/couchbase/vellum/common_test.go new file mode 100644 index 0000000..ea5893b --- /dev/null +++ b/vendor/github.com/couchbase/vellum/common_test.go @@ -0,0 +1,47 @@ +// Copyright (c) 2017 Couchbase, 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 vellum + +import "testing" + +func TestCommonInputs(t *testing.T) { + + // first ensure items that can be encoded round trip properly + for i := 0; i < 256; i++ { + roundTrip(t, byte(i)) + } + + // G maps to 62, +1 is 63, which is highest 6-bit value we can encode + enc := encodeCommon('G') + if enc != 63 { + t.Errorf("expected G to encode to 63, got %d", enc) + } + + // W encodes to 63, +1 is 64, which is too big to fit + enc = encodeCommon('W') + if enc != 0 { + t.Errorf("expected W to encode to 0, got %d", enc) + } +} + +func roundTrip(t *testing.T, b byte) { + enc := encodeCommon(b) + if enc > 0 { + dec := decodeCommon(enc) + if dec != b { + t.Errorf("error round trip common input: %d", b) + } + } +} diff --git a/vendor/github.com/couchbase/vellum/data/words-1000.txt b/vendor/github.com/couchbase/vellum/data/words-1000.txt new file mode 100644 index 0000000..029a649 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/data/words-1000.txt @@ -0,0 +1,1000 @@ +American +Congress +Democrat +I +Mr +Mrs +PM +Republican +TV +a +ability +able +about +above +accept +according +account +across +act +action +activity +actually +add +address +administration +admit +adult +affect +after +again +against +age +agency +agent +ago +agree +agreement +ahead +air +all +allow +almost +alone +along +already +also +although +always +among +amount +analysis +and +animal +another +answer +any +anyone +anything +appear +apply +approach +area +argue +arm +around +arrive +art +article +artist +as +ask +assume +at +attack +attention +attorney +audience +author +authority +available +avoid +away +baby +back +bad +bag +ball +bank +bar +base +be +beat +beautiful +because +become +bed +before +begin +behavior +behind +believe +benefit +best +better +between +beyond +big +bill +billion +bit +black +blood +blue +board +body +book +born +both +box +boy +break +bring +brother +budget +build +building +business +but +buy +by +call +camera +campaign +can +cancer +candidate +capital +car +card +care +career +carry +case +catch +cause +cell +center +central +century +certain +certainly +chair +challenge +chance +change +character +charge +check +child +choice +choose +church +citizen +city +civil +claim +class +clear +clearly +close +coach +cold +collection +college +color +come +commercial +common +community +company +compare +computer +concern +condition +conference +consider +consumer +contain +continue +control +cost +could +country +couple +course +court +cover +create +crime +cultural +culture +cup +current +customer +cut +dark +data +daughter +day +dead +deal +death +debate +decade +decide +decision +deep +defense +degree +democratic +describe +design +despite +detail +determine +develop +development +die +difference +different +difficult +dinner +direction +director +discover +discuss +discussion +disease +do +doctor +dog +door +down +draw +dream +drive +drop +drug +during +each +early +east +easy +eat +economic +economy +edge +education +effect +effort +eight +either +election +else +employee +end +energy +enjoy +enough +enter +entire +environment +environmental +especially +establish +even +evening +event +ever +every +everybody +everyone +everything +evidence +exactly +example +executive +exist +expect +experience +expert +explain +eye +face +fact +factor +fail +fall +family +far +fast +father +fear +federal +feel +feeling +few +field +fight +figure +fill +film +final +finally +financial +find +fine +finger +finish +fire +firm +first +fish +five +floor +fly +focus +follow +food +foot +for +force +foreign +forget +form +former +forward +four +free +friend +from +front +full +fund +future +game +garden +gas +general +generation +get +girl +give +glass +go +goal +good +government +great +green +ground +group +grow +growth +guess +gun +guy +hair +half +hand +hang +happen +happy +hard +have +he +head +health +hear +heart +heat +heavy +help +her +here +herself +high +him +himself +his +history +hit +hold +home +hope +hospital +hot +hotel +hour +house +how +however +huge +human +hundred +husband +idea +identify +if +image +imagine +impact +important +improve +in +include +including +increase +indeed +indicate +individual +industry +information +inside +instead +institution +interest +interesting +international +interview +into +investment +involve +issue +it +item +its +itself +job +join +just +keep +key +kid +kill +kind +kitchen +know +knowledge +land +language +large +last +late +later +laugh +law +lawyer +lay +lead +leader +learn +least +leave +left +leg +legal +less +let +letter +level +lie +life +light +like +likely +line +list +listen +little +live +local +long +look +lose +loss +lot +love +low +machine +magazine +main +maintain +major +majority +make +man +manage +management +manager +many +market +marriage +material +matter +may +maybe +me +mean +measure +media +medical +meet +meeting +member +memory +mention +message +method +middle +might +military +million +mind +minute +miss +mission +model +modern +moment +money +month +more +morning +most +mother +mouth +move +movement +movie +much +music +must +my +myself +n't +name +nation +national +natural +nature +near +nearly +necessary +need +network +never +new +news +newspaper +next +nice +night +no +none +nor +north +not +note +nothing +notice +now +number +occur +of +off +offer +office +officer +official +often +oh +oil +ok +old +on +once +one +only +onto +open +operation +opportunity +option +or +order +organization +other +others +our +out +outside +over +own +owner +page +pain +painting +paper +parent +part +participant +particular +particularly +partner +party +pass +past +patient +pattern +pay +peace +people +per +perform +performance +perhaps +period +person +personal +phone +physical +pick +picture +piece +place +plan +plant +play +player +point +police +policy +political +politics +poor +popular +population +position +positive +possible +power +practice +prepare +present +president +pressure +pretty +prevent +price +private +probably +problem +process +produce +product +production +professional +professor +program +project +property +protect +prove +provide +public +pull +purpose +push +put +quality +question +quickly +quite +race +radio +raise +range +rate +rather +reach +read +ready +real +reality +realize +really +reason +receive +recent +recently +recognize +record +red +reduce +reflect +region +relate +relationship +religious +remain +remember +remove +report +represent +require +research +resource +respond +response +responsibility +rest +result +return +reveal +rich +right +rise +risk +road +rock +role +room +rule +run +safe +same +save +say +scene +school +science +scientist +score +sea +season +seat +second +section +security +see +seek +seem +sell +send +senior +sense +series +serious +serve +service +set +seven +several +sex +sexual +shake +share +she +shoot +short +shot +should +shoulder +show +side +sign +significant +similar +simple +simply +since +sing +single +sister +sit +site +situation +six +size +skill +skin +small +smile +so +social +society +soldier +some +somebody +someone +something +sometimes +son +song +soon +sort +sound +source +south +southern +space +speak +special +specific +speech +spend +sport +spring +staff +stage +stand +standard +star +start +state +statement +station +stay +step +still +stock +stop +store +story +strategy +street +strong +structure +student +study +stuff +style +subject +success +successful +such +suddenly +suffer +suggest +summer +support +sure +surface +system +table +take +talk +task +tax +teach +teacher +team +technology +television +tell +ten +tend +term +test +than +thank +that +the +their +them +themselves +then +theory +there +these +they +thing +think +third +this +those +though +thought +thousand +threat +three +through +throughout +throw +thus +time +to +today +together +tonight +too +top +total +tough +toward +town +trade +traditional +training +travel +treat +treatment +tree +trial +trip +trouble +true +truth +try +turn +two +type +under +understand +unit +until +up +upon +us +use +usually +value +various +very +victim +view +violence +visit +voice +vote +wait +walk +wall +want +war +watch +water +way +we +weapon +wear +week +weight +well +west +western +what +whatever +when +where +whether +which +while +white +who +whole +whom +whose +why +wide +wife +will +win +wind +window +wish +with +within +without +woman +wonder +word +work +worker +world +worry +would +write +writer +wrong +yard +yeah +year +yes +yet +you +young +your +yourself diff --git a/vendor/github.com/couchbase/vellum/decoder_v1.go b/vendor/github.com/couchbase/vellum/decoder_v1.go new file mode 100644 index 0000000..c1e2af9 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/decoder_v1.go @@ -0,0 +1,315 @@ +// Copyright (c) 2017 Couchbase, 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 vellum + +import ( + "bytes" + "encoding/binary" + "fmt" + "strconv" +) + +func init() { + registerDecoder(versionV1, func(data []byte) decoder { + return newDecoderV1(data) + }) +} + +type decoderV1 struct { + data []byte + root uint64 + len uint64 +} + +func newDecoderV1(data []byte) *decoderV1 { + return &decoderV1{ + data: data, + } +} + +func (d *decoderV1) getRoot() int { + if len(d.data) < footerSizeV1 { + return noneAddr + } + footer := d.data[len(d.data)-footerSizeV1:] + root := binary.LittleEndian.Uint64(footer[8:]) + return int(root) +} + +func (d *decoderV1) getLen() int { + if len(d.data) < footerSizeV1 { + return 0 + } + footer := d.data[len(d.data)-footerSizeV1:] + dlen := binary.LittleEndian.Uint64(footer) + return int(dlen) +} + +func (d *decoderV1) stateAt(addr int, prealloc fstState) (fstState, error) { + state, ok := prealloc.(*fstStateV1) + if ok && state != nil { + *state = fstStateV1{} // clear the struct + } else { + state = &fstStateV1{} + } + err := state.at(d.data, addr) + if err != nil { + return nil, err + } + return state, nil +} + +type fstStateV1 struct { + data []byte + top int + bottom int + numTrans int + + // single trans only + singleTransChar byte + singleTransNext bool + singleTransAddr uint64 + singleTransOut uint64 + + // shared + transSize int + outSize int + + // multiple trans only + final bool + transTop int + transBottom int + destTop int + destBottom int + outTop int + outBottom int + outFinal int +} + +func (f *fstStateV1) isEncodedSingle() bool { + if f.data[f.top]>>7 > 0 { + return true + } + return false +} + +func (f *fstStateV1) at(data []byte, addr int) error { + f.data = data + if addr == emptyAddr { + return f.atZero() + } else if addr == noneAddr { + return f.atNone() + } + if addr > len(data) || addr < 16 { + return fmt.Errorf("invalid address %d/%d", addr, len(data)) + } + f.top = addr + f.bottom = addr + if f.isEncodedSingle() { + return f.atSingle(data, addr) + } + return f.atMulti(data, addr) +} + +func (f *fstStateV1) atZero() error { + f.top = 0 + f.bottom = 1 + f.numTrans = 0 + f.final = true + f.outFinal = 0 + return nil +} + +func (f *fstStateV1) atNone() error { + f.top = 0 + f.bottom = 1 + f.numTrans = 0 + f.final = false + f.outFinal = 0 + return nil +} + +func (f *fstStateV1) atSingle(data []byte, addr int) error { + // handle single transition case + f.numTrans = 1 + f.singleTransNext = data[f.top]&transitionNext > 0 + f.singleTransChar = data[f.top] & maxCommon + if f.singleTransChar == 0 { + f.bottom-- // extra byte for uncommon + f.singleTransChar = data[f.bottom] + } else { + f.singleTransChar = decodeCommon(f.singleTransChar) + } + if f.singleTransNext { + // now we know the bottom, can compute next addr + f.singleTransAddr = uint64(f.bottom - 1) + f.singleTransOut = 0 + } else { + f.bottom-- // extra byte with pack sizes + f.transSize, f.outSize = decodePackSize(data[f.bottom]) + f.bottom -= f.transSize // exactly one trans + f.singleTransAddr = readPackedUint(data[f.bottom : f.bottom+f.transSize]) + if f.outSize > 0 { + f.bottom -= f.outSize // exactly one out (could be length 0 though) + f.singleTransOut = readPackedUint(data[f.bottom : f.bottom+f.outSize]) + } else { + f.singleTransOut = 0 + } + // need to wait till we know bottom + if f.singleTransAddr != 0 { + f.singleTransAddr = uint64(f.bottom) - f.singleTransAddr + } + } + return nil +} + +func (f *fstStateV1) atMulti(data []byte, addr int) error { + // handle multiple transitions case + f.final = data[f.top]&stateFinal > 0 + f.numTrans = int(data[f.top] & maxNumTrans) + if f.numTrans == 0 { + f.bottom-- // extra byte for number of trans + f.numTrans = int(data[f.bottom]) + if f.numTrans == 1 { + // can't really be 1 here, this is special case that means 256 + f.numTrans = 256 + } + } + f.bottom-- // extra byte with pack sizes + f.transSize, f.outSize = decodePackSize(data[f.bottom]) + f.bottom -= f.numTrans // one byte for each transition + f.transBottom = f.bottom + f.transTop = f.bottom + f.numTrans + + f.bottom -= f.numTrans * f.transSize + f.destBottom = f.bottom + f.destTop = f.bottom + (f.numTrans * f.transSize) + + if f.outSize > 0 { + f.bottom -= f.numTrans * f.outSize + f.outBottom = f.bottom + f.outTop = f.bottom + (f.numTrans * f.outSize) + if f.final { + f.bottom -= f.outSize + f.outFinal = f.bottom + } + } + return nil +} + +func (f *fstStateV1) Address() int { + return f.top +} + +func (f *fstStateV1) Final() bool { + return f.final +} + +func (f *fstStateV1) FinalOutput() uint64 { + if f.numTrans > 0 && f.final && f.outSize > 0 { + return readPackedUint(f.data[f.outFinal : f.outFinal+f.outSize]) + } + return 0 +} + +func (f *fstStateV1) NumTransitions() int { + return f.numTrans +} + +func (f *fstStateV1) TransitionAt(i int) byte { + if f.isEncodedSingle() { + return f.singleTransChar + } + transitionKeys := f.data[f.transBottom:f.transTop] + return transitionKeys[f.numTrans-i-1] +} + +func (f *fstStateV1) TransitionFor(b byte) (int, int, uint64) { + if f.isEncodedSingle() { + if f.singleTransChar == b { + return 0, int(f.singleTransAddr), f.singleTransOut + } + return -1, noneAddr, 0 + } + transitionKeys := f.data[f.transBottom:f.transTop] + pos := bytes.IndexByte(transitionKeys, b) + if pos < 0 { + return -1, noneAddr, 0 + } + transDests := f.data[f.destBottom:f.destTop] + dest := int(readPackedUint(transDests[pos*f.transSize : pos*f.transSize+f.transSize])) + if dest > 0 { + // convert delta + dest = f.bottom - dest + } + transVals := f.data[f.outBottom:f.outTop] + var out uint64 + if f.outSize > 0 { + out = readPackedUint(transVals[pos*f.outSize : pos*f.outSize+f.outSize]) + } + return f.numTrans - pos - 1, dest, out +} + +func (f *fstStateV1) String() string { + rv := "" + rv += fmt.Sprintf("State: %d (%#x)", f.top, f.top) + if f.final { + rv += " final" + fout := f.FinalOutput() + if fout != 0 { + rv += fmt.Sprintf(" (%d)", fout) + } + } + rv += "\n" + rv += fmt.Sprintf("Data: % x\n", f.data[f.bottom:f.top+1]) + + for i := 0; i < f.numTrans; i++ { + transChar := f.TransitionAt(i) + _, transDest, transOut := f.TransitionFor(transChar) + rv += fmt.Sprintf(" - %d (%#x) '%s' ---> %d (%#x) with output: %d", transChar, transChar, string(transChar), transDest, transDest, transOut) + rv += "\n" + } + if f.numTrans == 0 { + rv += "\n" + } + return rv +} + +func (f *fstStateV1) DotString(num int) string { + rv := "" + label := fmt.Sprintf("%d", num) + final := "" + if f.final { + final = ",peripheries=2" + } + rv += fmt.Sprintf(" %d [label=\"%s\"%s];\n", f.top, label, final) + + for i := 0; i < f.numTrans; i++ { + transChar := f.TransitionAt(i) + _, transDest, transOut := f.TransitionFor(transChar) + out := "" + if transOut != 0 { + out = fmt.Sprintf("/%d", transOut) + } + rv += fmt.Sprintf(" %d -> %d [label=\"%s%s\"];\n", f.top, transDest, escapeInput(transChar), out) + } + + return rv +} + +func escapeInput(b byte) string { + x := strconv.AppendQuoteRune(nil, rune(b)) + return string(x[1:(len(x) - 1)]) +} diff --git a/vendor/github.com/couchbase/vellum/decoder_v1_test.go b/vendor/github.com/couchbase/vellum/decoder_v1_test.go new file mode 100644 index 0000000..69667c8 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/decoder_v1_test.go @@ -0,0 +1,456 @@ +// Copyright (c) 2017 Couchbase, 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 vellum + +import ( + "reflect" + "testing" +) + +func TestDecoderVersionError(t *testing.T) { + _, err := loadDecoder(629, nil) + if err == nil { + t.Errorf("expected error loading decoder version 629, got nil") + } +} + +func TestShortHeader(t *testing.T) { + header := make([]byte, 15) + _, _, err := decodeHeader(header) + if err == nil { + t.Errorf("expected error decoding short header, got nil") + } +} + +func TestDecoderRootLen(t *testing.T) { + d := newDecoderV1([]byte{1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0}) + if d.getLen() != 1 { + t.Fatalf("expected parsed footer length 1, got %d", d.len) + } + if d.getRoot() != 2 { + t.Fatalf("expected parsed footer length 2, got %d", d.len) + } +} + +func TestDecoderStateAt(t *testing.T) { + tests := []struct { + desc string + data []byte + want *fstStateV1 + }{ + { + "one trans, trans next, common char", + []byte{ + // header + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // test node data + oneTransition | transitionNext | encodeCommon('a'), + // footer + 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, + }, + &fstStateV1{ + numTrans: 1, + top: 16, + bottom: 16, + singleTransChar: 'a', + singleTransNext: true, + singleTransAddr: 15, + }, + }, + { + "one trans, trans next, uncommon char", + []byte{ + // header + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // test node data + 0xff, + oneTransition | transitionNext, + // footer + 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, + }, + &fstStateV1{ + numTrans: 1, + top: 17, + bottom: 16, + singleTransChar: 0xff, + singleTransNext: true, + singleTransAddr: 15, + }, + }, + { + "one trans, trans not next, common char", + []byte{ + // header + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // test node data + 4, // delta address packed + 1<<4 | 0, // pack sizes + oneTransition | encodeCommon('a'), + // footer + 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, + }, + &fstStateV1{ + numTrans: 1, + top: 18, + bottom: 16, + singleTransChar: 'a', + singleTransNext: false, + singleTransAddr: 12, + transSize: 1, + }, + }, + { + "one trans, trans not next, uncommon char", + []byte{ + // header + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // test node data + 4, // delta address packed + 1<<4 | 0, // pack sizes + 0xff, + oneTransition, + // footer + 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, + }, + &fstStateV1{ + numTrans: 1, + top: 19, + bottom: 16, + singleTransChar: 0xff, + singleTransNext: false, + singleTransAddr: 12, + transSize: 1, + }, + }, + { + "one trans, trans not next, common char, with value", + []byte{ + // header + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // test node data + 27, // trans value + 4, // delta address packed + 1<<4 | 1, // pack sizes + oneTransition | encodeCommon('a'), + // footer + 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, + }, + &fstStateV1{ + numTrans: 1, + top: 19, + bottom: 16, + singleTransChar: 'a', + singleTransNext: false, + singleTransAddr: 12, + singleTransOut: 27, + transSize: 1, + outSize: 1, + }, + }, + { + "one trans, trans not next, uncommon char, with value", + []byte{ + // header + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // test node data + 39, // trans val + 4, // delta address packed + 1<<4 | 1, // pack sizes + 0xff, + oneTransition, + // footer + 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, + }, + &fstStateV1{ + numTrans: 1, + top: 20, + bottom: 16, + singleTransChar: 0xff, + singleTransNext: false, + singleTransAddr: 12, + singleTransOut: 39, + transSize: 1, + outSize: 1, + }, + }, + { + "many trans, not final, no values", + []byte{ + // header + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // test node data + 2, // delta addresses packed + 3, + 4, + 'c', // encoded keys reversed + 'b', + 'a', + 1<<4 | 0, // pack sizes + encodeNumTrans(3), + // footer + 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, + }, + &fstStateV1{ + numTrans: 3, + top: 23, + bottom: 16, + transSize: 1, + destBottom: 16, + destTop: 19, + transBottom: 19, + transTop: 22, + }, + }, + { + "many trans, not final, with values", + []byte{ + // header + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // test node data + 7, // values reversed + 0, + 3, + 2, // delta addresses reversed + 3, + 4, + 'c', // encoded keys reversed + 'b', + 'a', + 1<<4 | 1, // pack sizes + encodeNumTrans(3), + // footer + 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, + }, + &fstStateV1{ + numTrans: 3, + top: 26, + bottom: 16, + transSize: 1, + outSize: 1, + outBottom: 16, + outTop: 19, + destBottom: 19, + destTop: 22, + transBottom: 22, + transTop: 25, + }, + }, + { + "many trans, final, with values", + []byte{ + // header + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // test node data + 9, // node final val + 7, // values reversed + 0, + 3, + 2, // delta addresses reversed + 3, + 4, + 'c', // encoded keys reversed + 'b', + 'a', + 1<<4 | 1, // pack sizes + stateFinal | encodeNumTrans(3), + // footer + 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, + }, + &fstStateV1{ + final: true, + numTrans: 3, + top: 27, + bottom: 16, + transSize: 1, + outSize: 1, + outBottom: 17, + outTop: 20, + destBottom: 20, + destTop: 23, + transBottom: 23, + transTop: 26, + outFinal: 16, + }, + }, + { + "max trans, ", + []byte{ + // header + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // test node data + // delta addresses packed + 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, + 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, + 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, + 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, + 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, + 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, + 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, + 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, + 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, + 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, + 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, + 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, + 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, + 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, + 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, + 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, + // encoded keys reversed + 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, + 1<<4 | 0, // pack sizes + 1, // actual trans 1 == 256 + 0, // zero trans (wont fit) + // footer + 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, + }, + &fstStateV1{ + numTrans: 256, + top: 530, + bottom: 16, + transSize: 1, + destBottom: 16, + destTop: 272, + transBottom: 272, + transTop: 528, + }, + }, + } + + for _, test := range tests { + t.Run(test.desc, func(t *testing.T) { + d := newDecoderV1(test.data) + test.want.data = test.data + got, err := d.stateAt(len(test.data)-17, nil) + if err != nil { + t.Fatal(err) + } + if !reflect.DeepEqual(got, test.want) { + t.Errorf("wanted: %+v, got: %+v", test.want, got) + } + addr := got.Address() + if addr != test.want.top { + t.Errorf("expected address to match: %d - %d", addr, test.want.top) + } + fin := got.Final() + if fin != test.want.final { + t.Errorf("expected final to match: %t - %t", fin, test.want.final) + } + ntrans := got.NumTransitions() + if ntrans != test.want.numTrans { + t.Errorf("expected num trans to match: %d - %d", ntrans, test.want.numTrans) + } + }) + } +} + +func TestFSTStateFinalOutput(t *testing.T) { + tests := []struct { + desc string + in *fstStateV1 + want uint64 + }{ + { + "final output for final state", + &fstStateV1{ + data: []byte{7}, + numTrans: 2, + final: true, + outSize: 1, + outFinal: 0, + }, + 7, + }, + { + "final output for non-final state", + &fstStateV1{ + data: []byte{7}, + numTrans: 2, + final: false, + outSize: 1, + }, + 0, + }, + } + + for _, test := range tests { + t.Run(test.desc, func(t *testing.T) { + got := test.in.FinalOutput() + if got != test.want { + t.Errorf("wanted: %d, got: %d", test.want, got) + } + }) + } +} + +func TestDecodeStateZero(t *testing.T) { + var state fstStateV1 + err := state.at(nil, 0) + if err != nil { + t.Fatal(err) + } + if state.numTrans != 0 { + t.Errorf("expected 0 states, got %d", state.numTrans) + } + if !state.final { + t.Errorf("expected state final, got %t", state.final) + } +} + +func TestDecodeAtInvalid(t *testing.T) { + var state fstStateV1 + err := state.at(nil, 15) + if err == nil { + t.Errorf("expected error invalid address, got nil") + } +} + +func TestFSTStateTransitionAt(t *testing.T) { + state := fstStateV1{ + data: []byte{oneTransition | encodeCommon('a')}, + numTrans: 1, + singleTransChar: 'a', + } + got := state.TransitionAt(0) + if got != state.singleTransChar { + t.Errorf("expected %s got %s", string(state.singleTransChar), string(got)) + } + + state = fstStateV1{ + data: []byte{'b', 'a'}, + numTrans: 2, + transBottom: 0, + transTop: 2, + } + got = state.TransitionAt(0) + if got != 'a' { + t.Errorf("expected %s got %s", string('a'), string(got)) + } + +} diff --git a/vendor/github.com/couchbase/vellum/docs/demo1.png b/vendor/github.com/couchbase/vellum/docs/demo1.png new file mode 100644 index 0000000..a875e05 Binary files /dev/null and b/vendor/github.com/couchbase/vellum/docs/demo1.png differ diff --git a/vendor/github.com/couchbase/vellum/docs/demo1.svg b/vendor/github.com/couchbase/vellum/docs/demo1.svg new file mode 100644 index 0000000..e896d25 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/docs/demo1.svg @@ -0,0 +1,52 @@ + + + + + + +g + + +0 + +0 + + +1 + +1 + + +0->1 + + +a/4 + + +2 + +2 + + +1->2 + + +r + + +3 + + +3 + + +2->3 + + +e + + + diff --git a/vendor/github.com/couchbase/vellum/docs/demo2.png b/vendor/github.com/couchbase/vellum/docs/demo2.png new file mode 100644 index 0000000..e0a3597 Binary files /dev/null and b/vendor/github.com/couchbase/vellum/docs/demo2.png differ diff --git a/vendor/github.com/couchbase/vellum/docs/demo2.svg b/vendor/github.com/couchbase/vellum/docs/demo2.svg new file mode 100644 index 0000000..dcce1ce --- /dev/null +++ b/vendor/github.com/couchbase/vellum/docs/demo2.svg @@ -0,0 +1,75 @@ + + + + + + +g + + +0 + +0 + + +1 + +1 + + +0->1 + + +a/2 + + +2 + +2 + + +1->2 + + +r/2 + + +4 + +4 + + +1->4 + + +t + + +3 + + +3 + + +2->3 + + +e + + +5 + + +5 + + +4->5 + + +e + + + diff --git a/vendor/github.com/couchbase/vellum/docs/demo3.png b/vendor/github.com/couchbase/vellum/docs/demo3.png new file mode 100644 index 0000000..2ba85be Binary files /dev/null and b/vendor/github.com/couchbase/vellum/docs/demo3.png differ diff --git a/vendor/github.com/couchbase/vellum/docs/demo3.svg b/vendor/github.com/couchbase/vellum/docs/demo3.svg new file mode 100644 index 0000000..484fad9 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/docs/demo3.svg @@ -0,0 +1,92 @@ + + + + + + +g + + +0 + +0 + + +1 + +1 + + +0->1 + + +a/2 + + +6 + +6 + + +0->6 + + +s/3 + + +2 + +2 + + +1->2 + + +r/2 + + +1->2 + + +t + + +7 + +7 + + +6->7 + + +e + + +3 + + +3 + + +2->3 + + +e + + +8 + + +8 + + +7->8 + + +e + + + diff --git a/vendor/github.com/couchbase/vellum/docs/demo4.png b/vendor/github.com/couchbase/vellum/docs/demo4.png new file mode 100644 index 0000000..621f636 Binary files /dev/null and b/vendor/github.com/couchbase/vellum/docs/demo4.png differ diff --git a/vendor/github.com/couchbase/vellum/docs/demo4.svg b/vendor/github.com/couchbase/vellum/docs/demo4.svg new file mode 100644 index 0000000..ccdc0e0 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/docs/demo4.svg @@ -0,0 +1,75 @@ + + + + + + +g + + +0 + +0 + + +1 + +1 + + +0->1 + + +a/2 + + +6 + +6 + + +0->6 + + +s/3 + + +2 + +2 + + +1->2 + + +r/2 + + +1->2 + + +t + + +6->2 + + +e + + +3 + + +3 + + +2->3 + + +e + + + diff --git a/vendor/github.com/couchbase/vellum/docs/format.md b/vendor/github.com/couchbase/vellum/docs/format.md new file mode 100644 index 0000000..810c0b5 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/docs/format.md @@ -0,0 +1,80 @@ +# vellum file format v1 + +The v1 file format for vellum has been designed by trying to understand the file format used by [BurntSushi/fst](https://github.com/BurntSushi/fst) library. It should be binary compatible, but no attempt has been made to verify this. + +## Overview + +The file has 3 sections: + - header + - edge/transition data + - footer + +### Header + +The header is 16 bytes in total. + - 8 bytes version, uint64 little-endian + - 8 bytes type, uint64 little-endian (currently always 0, no meaning assigned) + +A side-effect of this header is that when computing transition target addresses at runtime, any address < 16 is invalid. + +### State/Transition Data + +A state is encoded with the following sections, HOWEVER, many sections are optional and omitted for various combinations of settings. In the order they occur: + +- node final output value (packed integer of the computed output size for this node) +- n transition output values (packed integers, of the computed output size for this node, in REVERSE transition order) +- n transition addresses (delta encoded, relative the lowest byte of this node, packed at the computed transition address size for this node, in REVERSE transition order) +- n transition bytes (1 byte for each transition, in REVERSE transition order) +- pack sizes, 1 byte, high 4 bits transition address size, low 4 bits output size +- number of transitions, 1 byte (ONLY if it didn't fit in the top byte), value of 1 in this byte means 256 (1 would have fit into the top byte) +- single transition byte, 1 byte (ONLY if it didn't fit in the top byte) +- top byte, encodes various flags, and uses remaining bits depending on those flags, broken out separate below + +#### State Top Byte + + - high bit + - 1 means, this edge has just 1 transition + - 0 means, this edge has multiple transitions + +##### 1 transition States + + - second bit flags jump to previous + - 1 means this transition target is the immediately preceding state + - 0 means there will transition address in the rest of the data + + - remaining 6 bits attempt to encode the transition byte + - Obviously this requires 8 bits, but we map the most frequently used bytes into the lowest 6 bits (see common.go). If the byte we need to encode doesn't fit, we encode 0, and read it fully in the following byte. This allows the most common bytes in a single transition edge to fit into just a single byte. + +##### Multiple Transition States + + - second bit flags final states + - 1 means this is a final state + - 0 means this is not a final state + + - remaining 6 bits attempt to encode the number of transitions + - Obviously, this can require 8 bits, be we assume that many states have fewer transition, and will fit. If the number won't fit, we encode 0 here, and read it fully in the following byte. Because we could 256 transitions, that full byte still isn't enough, so we reuse the value 1 to mean 256. The value of 1 would never naturally occur in this position, since 1 transition would have fit into the top byte (NOTE: single transition states that are final are encoded as multi-transition states, but the value of 1 would fit in the top 6 bytes). + +### Single Transition Jump To Previous + +The flag marking that a single transition state should jump to the previous state works because we encode all of the node data backwards (ie, we start processing state date with the last byte). Since, at runtime, we can always compute the lowest byte of the state we're in, we can trivially compute the start address of the previous node, just by subtracting one. This allows saving another set of bytes in many cases which would have otherwise been needed to encode that address. + +### Delta Addresses + +All transition target addresses are delta encoded, relative to the lowest byte in the current state. + +### Packed Integer Encoding + +For both the output values and transition target addresses, we choose a fixed size number of bytes that will work for encoding all the appropriate values in this state. Because this length will be recorded (in the pack sizes section), we don't need to use varint encoding, we can instead simply use the minimum number of bytes required. So, 8-bit values take just 1 byte, etc. This has the advantage that small values take less space, but the sizes are still fixed, so we can easily navigate without excessive computation. + + +### Footer + +The footer is 16 bytes in total. +- 8 bytes number of keys, uint64 little-endian +- 8 bytes root address (absolute, not delta encoded like other addresses in file), uint64 little-endian + +## Encoding Streaming + +States are written out to the underlying writer as soon as possible. This allows us to get an early start on I/O while still building the FST, reducing the overall time to build, and it also allows us to reduce the memory consumed during the build process. + +Because of this, the root node will always be the last node written in the file. diff --git a/vendor/github.com/couchbase/vellum/docs/logo.png b/vendor/github.com/couchbase/vellum/docs/logo.png new file mode 100644 index 0000000..aa53ed2 Binary files /dev/null and b/vendor/github.com/couchbase/vellum/docs/logo.png differ diff --git a/vendor/github.com/couchbase/vellum/encoder_v1.go b/vendor/github.com/couchbase/vellum/encoder_v1.go new file mode 100644 index 0000000..0651fc8 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/encoder_v1.go @@ -0,0 +1,227 @@ +// Copyright (c) 2017 Couchbase, 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 vellum + +import ( + "encoding/binary" + "fmt" + "io" +) + +const versionV1 = 1 +const oneTransition = 1 << 7 +const transitionNext = 1 << 6 +const stateFinal = 1 << 6 +const footerSizeV1 = 16 + +func init() { + registerEncoder(versionV1, func(w io.Writer) encoder { + return newEncoderV1(w) + }) +} + +type encoderV1 struct { + bw *writer +} + +func newEncoderV1(w io.Writer) *encoderV1 { + return &encoderV1{ + bw: newWriter(w), + } +} + +func (e *encoderV1) reset(w io.Writer) { + e.bw.Reset(w) +} + +func (e *encoderV1) start() error { + header := make([]byte, headerSize) + binary.LittleEndian.PutUint64(header, versionV1) + binary.LittleEndian.PutUint64(header[8:], uint64(0)) // type + n, err := e.bw.Write(header) + if err != nil { + return err + } + if n != headerSize { + return fmt.Errorf("short write of header %d/%d", n, headerSize) + } + return nil +} + +func (e *encoderV1) encodeState(s *builderNode, lastAddr int) (int, error) { + if len(s.trans) == 0 && s.final && s.finalOutput == 0 { + return 0, nil + } else if len(s.trans) != 1 || s.final { + return e.encodeStateMany(s) + } else if !s.final && s.trans[0].out == 0 && s.trans[0].addr == lastAddr { + return e.encodeStateOneFinish(s, transitionNext) + } + return e.encodeStateOne(s) +} + +func (e *encoderV1) encodeStateOne(s *builderNode) (int, error) { + start := uint64(e.bw.counter) + outPackSize := 0 + if s.trans[0].out != 0 { + outPackSize = packedSize(s.trans[0].out) + err := e.bw.WritePackedUintIn(s.trans[0].out, outPackSize) + if err != nil { + return 0, err + } + } + delta := deltaAddr(start, uint64(s.trans[0].addr)) + transPackSize := packedSize(delta) + err := e.bw.WritePackedUintIn(delta, transPackSize) + if err != nil { + return 0, err + } + + packSize := encodePackSize(transPackSize, outPackSize) + err = e.bw.WriteByte(packSize) + if err != nil { + return 0, err + } + + return e.encodeStateOneFinish(s, 0) +} + +func (e *encoderV1) encodeStateOneFinish(s *builderNode, next byte) (int, error) { + enc := encodeCommon(s.trans[0].in) + + // not a common input + if enc == 0 { + err := e.bw.WriteByte(s.trans[0].in) + if err != nil { + return 0, err + } + } + err := e.bw.WriteByte(oneTransition | next | enc) + if err != nil { + return 0, err + } + + return e.bw.counter - 1, nil +} + +func (e *encoderV1) encodeStateMany(s *builderNode) (int, error) { + start := uint64(e.bw.counter) + transPackSize := 0 + outPackSize := packedSize(s.finalOutput) + anyOutputs := s.finalOutput != 0 + for i := range s.trans { + delta := deltaAddr(start, uint64(s.trans[i].addr)) + tsize := packedSize(delta) + if tsize > transPackSize { + transPackSize = tsize + } + osize := packedSize(s.trans[i].out) + if osize > outPackSize { + outPackSize = osize + } + anyOutputs = anyOutputs || s.trans[i].out != 0 + } + if !anyOutputs { + outPackSize = 0 + } + + if anyOutputs { + // output final value + if s.final { + err := e.bw.WritePackedUintIn(s.finalOutput, outPackSize) + if err != nil { + return 0, err + } + } + // output transition values (in reverse) + for j := len(s.trans) - 1; j >= 0; j-- { + err := e.bw.WritePackedUintIn(s.trans[j].out, outPackSize) + if err != nil { + return 0, err + } + } + } + + // output transition dests (in reverse) + for j := len(s.trans) - 1; j >= 0; j-- { + delta := deltaAddr(start, uint64(s.trans[j].addr)) + err := e.bw.WritePackedUintIn(delta, transPackSize) + if err != nil { + return 0, err + } + } + + // output transition keys (in reverse) + for j := len(s.trans) - 1; j >= 0; j-- { + err := e.bw.WriteByte(s.trans[j].in) + if err != nil { + return 0, err + } + } + + packSize := encodePackSize(transPackSize, outPackSize) + err := e.bw.WriteByte(packSize) + if err != nil { + return 0, err + } + + numTrans := encodeNumTrans(len(s.trans)) + + // if number of transitions wont fit in edge header byte + // write out separately + if numTrans == 0 { + if len(s.trans) == 256 { + // this wouldn't fit in single byte, but reuse value 1 + // which would have always fit in the edge header instead + err = e.bw.WriteByte(1) + if err != nil { + return 0, err + } + } else { + err = e.bw.WriteByte(byte(len(s.trans))) + if err != nil { + return 0, err + } + } + } + + // finally write edge header + if s.final { + numTrans |= stateFinal + } + err = e.bw.WriteByte(numTrans) + if err != nil { + return 0, err + } + + return e.bw.counter - 1, nil +} + +func (e *encoderV1) finish(count, rootAddr int) error { + footer := make([]byte, footerSizeV1) + binary.LittleEndian.PutUint64(footer, uint64(count)) // root addr + binary.LittleEndian.PutUint64(footer[8:], uint64(rootAddr)) // root addr + n, err := e.bw.Write(footer) + if err != nil { + return err + } + if n != footerSizeV1 { + return fmt.Errorf("short write of footer %d/%d", n, footerSizeV1) + } + err = e.bw.Flush() + if err != nil { + return err + } + return nil +} diff --git a/vendor/github.com/couchbase/vellum/encoder_v1_test.go b/vendor/github.com/couchbase/vellum/encoder_v1_test.go new file mode 100644 index 0000000..8357a7f --- /dev/null +++ b/vendor/github.com/couchbase/vellum/encoder_v1_test.go @@ -0,0 +1,482 @@ +// Copyright (c) 2017 Couchbase, 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 vellum + +import ( + "bytes" + "reflect" + "testing" +) + +// FIXME add tests for longjmp (wider delta address) +// FIXME add tests for wider values +// FIXME add tests for mixed value sizes in same edge (fixed size, but padded) +// FIXME add test for final state (must include final val even if 0) + +func TestEncoderVersionError(t *testing.T) { + _, err := loadEncoder(629, nil) + if err == nil { + t.Errorf("expected error loading encoder version 629, got nil") + } +} + +func TestEncoderStart(t *testing.T) { + + var headerV1 = []byte{ + 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + } + + var buf bytes.Buffer + e := newEncoderV1(&buf) + err := e.start() + if err != nil { + t.Fatal(err) + } + // manually flush + err = e.bw.Flush() + if err != nil { + t.Fatal(err) + } + got := buf.Bytes() + if !reflect.DeepEqual(got, headerV1) { + t.Errorf("expected header: %v, got %v", headerV1, got) + } +} + +func TestEncoderStateOneNextWithCommonInput(t *testing.T) { + + curr := &builderNode{ + trans: []*transition{ + { + in: 'a', + addr: 27, + }, + }, + } + + var buf bytes.Buffer + e := newEncoderV1(&buf) + + // now encode the curr state + _, err := e.encodeState(curr, 27) + if err != nil { + t.Fatal(err) + } + + // manually flush + err = e.bw.Flush() + if err != nil { + t.Fatal(err) + } + + // now look at the bytes produced + var want = []byte{ + oneTransition | transitionNext | encodeCommon('a'), + } + got := buf.Bytes() + if !reflect.DeepEqual(got, want) { + t.Errorf("expected bytes: %v, got %v", want, got) + } +} + +func TestEncoderStateOneNextWithUncommonInput(t *testing.T) { + + curr := &builderNode{ + trans: []*transition{ + { + in: 0xff, + addr: 27, + }, + }, + } + + var buf bytes.Buffer + e := newEncoderV1(&buf) + + // now encode the curr state + _, err := e.encodeState(curr, 27) + if err != nil { + t.Fatal(err) + } + + // manually flush + err = e.bw.Flush() + if err != nil { + t.Fatal(err) + } + + // now look at the bytes produced + var want = []byte{ + 0xff, + oneTransition | transitionNext, + } + got := buf.Bytes() + if !reflect.DeepEqual(got, want) { + t.Errorf("expected bytes: %v, got %v", want, got) + } +} + +func TestEncoderStateOneNotNextWithCommonInputNoValue(t *testing.T) { + + curr := &builderNode{ + trans: []*transition{ + { + in: 'a', + addr: 32, + }, + }, + } + + var buf bytes.Buffer + e := newEncoderV1(&buf) + + // pretend we're at a position in the file + e.bw.counter = 64 + + // now encode the curr state + _, err := e.encodeState(curr, 64) + if err != nil { + t.Fatal(err) + } + + // manually flush + err = e.bw.Flush() + if err != nil { + t.Fatal(err) + } + + // now look at the bytes produced + var want = []byte{ + 32, // delta address packed + 1<<4 | 0, // pack sizes + oneTransition | encodeCommon('a'), + } + got := buf.Bytes() + if !reflect.DeepEqual(got, want) { + t.Errorf("expected bytes: %v, got %v", want, got) + } +} + +func TestEncoderStateOneNotNextWithUncommonInputNoValue(t *testing.T) { + + curr := &builderNode{ + trans: []*transition{ + { + in: 0xff, + addr: 32, + }, + }, + } + + var buf bytes.Buffer + e := newEncoderV1(&buf) + + // pretend we're at a position in the file + e.bw.counter = 64 + + // now encode the curr state + _, err := e.encodeState(curr, 64) + if err != nil { + t.Fatal(err) + } + + // manually flush + err = e.bw.Flush() + if err != nil { + t.Fatal(err) + } + + // now look at the bytes produced + var want = []byte{ + 32, // delta address packed + 1<<4 | 0, // pack sizes + 0xff, + oneTransition, + } + got := buf.Bytes() + if !reflect.DeepEqual(got, want) { + t.Errorf("expected bytes: %v, got %v", want, got) + } +} + +func TestEncoderStateOneNotNextWithCommonInputWithValue(t *testing.T) { + + curr := &builderNode{ + trans: []*transition{ + { + in: 'a', + addr: 32, + out: 27, + }, + }, + } + + var buf bytes.Buffer + e := newEncoderV1(&buf) + + // pretend we're at a position in the file + e.bw.counter = 64 + + // now encode the curr state + _, err := e.encodeState(curr, 64) + if err != nil { + t.Fatal(err) + } + + // manually flush + err = e.bw.Flush() + if err != nil { + t.Fatal(err) + } + + // now look at the bytes produced + var want = []byte{ + 27, // trans value + 32, // delta address packed + 1<<4 | 1, // pack sizes + oneTransition | encodeCommon('a'), + } + got := buf.Bytes() + if !reflect.DeepEqual(got, want) { + t.Errorf("expected bytes: %v, got %v", want, got) + } +} + +func TestEncoderStateOneNotNextWithUncommonInputWithValue(t *testing.T) { + + curr := &builderNode{ + trans: []*transition{ + { + in: 0xff, + addr: 32, + out: 39, + }, + }, + } + + var buf bytes.Buffer + e := newEncoderV1(&buf) + + // pretend we're at a position in the file + e.bw.counter = 64 + + // now encode the curr state + _, err := e.encodeState(curr, 64) + if err != nil { + t.Fatal(err) + } + + // manually flush + err = e.bw.Flush() + if err != nil { + t.Fatal(err) + } + + // now look at the bytes produced + var want = []byte{ + 39, // trans val + 32, // delta address packed + 1<<4 | 1, // pack sizes + 0xff, + oneTransition, + } + got := buf.Bytes() + if !reflect.DeepEqual(got, want) { + t.Errorf("expected bytes: %v, got %v", want, got) + } +} + +func TestEncoderStateManyWithNoValues(t *testing.T) { + + curr := &builderNode{ + trans: []*transition{ + { + in: 'a', + addr: 32, + }, + { + in: 'b', + addr: 45, + }, + { + in: 'c', + addr: 52, + }, + }, + } + + var buf bytes.Buffer + e := newEncoderV1(&buf) + + // pretend we're at a position in the file + e.bw.counter = 64 + + // now encode the curr state + _, err := e.encodeState(curr, 64) + if err != nil { + t.Fatal(err) + } + + // manually flush + err = e.bw.Flush() + if err != nil { + t.Fatal(err) + } + + // now look at the bytes produced + var want = []byte{ + 12, // delta addresses packed + 19, + 32, + 'c', // encoded keys reversed + 'b', + 'a', + 1<<4 | 0, // pack sizes + encodeNumTrans(3), + } + got := buf.Bytes() + if !reflect.DeepEqual(got, want) { + t.Errorf("expected bytes: %v, got %v", want, got) + } +} + +func TestEncoderStateManyWithValues(t *testing.T) { + + curr := &builderNode{ + trans: []*transition{ + { + in: 'a', + addr: 32, + out: 3, + }, + { + in: 'b', + addr: 45, + out: 0, + }, + { + in: 'c', + addr: 52, + out: 7, + }, + }, + } + + var buf bytes.Buffer + e := newEncoderV1(&buf) + + // pretend we're at a position in the file + e.bw.counter = 64 + + // now encode the curr state + _, err := e.encodeState(curr, 64) + if err != nil { + t.Fatal(err) + } + + // manually flush + err = e.bw.Flush() + if err != nil { + t.Fatal(err) + } + + // now look at the bytes produced + var want = []byte{ + 7, // values reversed + 0, + 3, + 12, // delta addresses reversed + 19, + 32, + 'c', // encoded keys reversed + 'b', + 'a', + 1<<4 | 1, // pack sizes + encodeNumTrans(3), + } + got := buf.Bytes() + if !reflect.DeepEqual(got, want) { + t.Errorf("expected bytes: %v, got %v", want, got) + } +} + +func TestEncoderStateMaxTransitions(t *testing.T) { + testEncoderStateNTransitions(t, 256) +} + +func TestEncoderStateMoreTransitionsThanFitInHeader(t *testing.T) { + testEncoderStateNTransitions(t, 1<<6) +} + +func testEncoderStateNTransitions(t *testing.T, n int) { + + curr := &builderNode{ + trans: make([]*transition, n), + } + for i := 0; i < n; i++ { + curr.trans[i] = &transition{ + in: byte(i), + addr: 32, + } + } + + var buf bytes.Buffer + e := newEncoderV1(&buf) + + // pretend we're at a position in the file + e.bw.counter = 64 + + // now encode the curr state + _, err := e.encodeState(curr, 64) + if err != nil { + t.Fatal(err) + } + + // manually flush + err = e.bw.Flush() + if err != nil { + t.Fatal(err) + } + + // now look at the bytes produced + var want []byte + // append 256 delta addresses + for i := 0; i < n; i++ { + want = append(want, 32) + } + // append transition keys (reversed) + for i := n - 1; i >= 0; i-- { + want = append(want, byte(i)) + } + // append pack sizes + want = append(want, 1<<4|0) + + if n > 1<<6-1 { + // append separate byte of pack sizes + if n == 256 { // 256 is specially encoded as 1 + want = append(want, 1) + } else { + want = append(want, byte(n)) + } + + } + // append header byte, which is all 0 in this case + want = append(want, 0) + got := buf.Bytes() + if !reflect.DeepEqual(got, want) { + t.Errorf("expected bytes: %v, got %v", want, got) + } +} diff --git a/vendor/github.com/couchbase/vellum/encoding.go b/vendor/github.com/couchbase/vellum/encoding.go new file mode 100644 index 0000000..988d486 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/encoding.go @@ -0,0 +1,87 @@ +// Copyright (c) 2017 Couchbase, 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 vellum + +import ( + "encoding/binary" + "fmt" + "io" +) + +const headerSize = 16 + +type encoderConstructor func(w io.Writer) encoder +type decoderConstructor func([]byte) decoder + +var encoders = map[int]encoderConstructor{} +var decoders = map[int]decoderConstructor{} + +type encoder interface { + start() error + encodeState(s *builderNode, addr int) (int, error) + finish(count, rootAddr int) error + reset(w io.Writer) +} + +func loadEncoder(ver int, w io.Writer) (encoder, error) { + if cons, ok := encoders[ver]; ok { + return cons(w), nil + } + return nil, fmt.Errorf("no encoder for version %d registered", ver) +} + +func registerEncoder(ver int, cons encoderConstructor) { + encoders[ver] = cons +} + +type decoder interface { + getRoot() int + getLen() int + stateAt(addr int, prealloc fstState) (fstState, error) +} + +func loadDecoder(ver int, data []byte) (decoder, error) { + if cons, ok := decoders[ver]; ok { + return cons(data), nil + } + return nil, fmt.Errorf("no decoder for version %d registered", ver) +} + +func registerDecoder(ver int, cons decoderConstructor) { + decoders[ver] = cons +} + +func decodeHeader(header []byte) (ver int, typ int, err error) { + if len(header) < headerSize { + err = fmt.Errorf("invalid header < 16 bytes") + return + } + ver = int(binary.LittleEndian.Uint64(header[0:8])) + typ = int(binary.LittleEndian.Uint64(header[8:16])) + return +} + +// fstState represents a state inside the FTS runtime +// It is the main contract between the FST impl and the decoder +// The FST impl should work only with this interface, while only the decoder +// impl knows the physical representation. +type fstState interface { + Address() int + Final() bool + FinalOutput() uint64 + NumTransitions() int + TransitionFor(b byte) (int, int, uint64) + TransitionAt(i int) byte +} diff --git a/vendor/github.com/couchbase/vellum/example_test.go b/vendor/github.com/couchbase/vellum/example_test.go new file mode 100644 index 0000000..c7d3208 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/example_test.go @@ -0,0 +1,85 @@ +// Copyright (c) 2017 Couchbase, 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 vellum_test + +import ( + "bytes" + "fmt" + "log" + + "github.com/couchbase/vellum" +) + +func Example() { + + var buf bytes.Buffer + builder, err := vellum.New(&buf, nil) + if err != nil { + log.Fatal(err) + } + + err = builder.Insert([]byte("cat"), 1) + if err != nil { + log.Fatal(err) + } + + err = builder.Insert([]byte("dog"), 2) + if err != nil { + log.Fatal(err) + } + + err = builder.Insert([]byte("fish"), 3) + if err != nil { + log.Fatal(err) + } + + err = builder.Close() + if err != nil { + log.Fatal(err) + } + + fst, err := vellum.Load(buf.Bytes()) + if err != nil { + log.Fatal(err) + } + + val, exists, err := fst.Get([]byte("cat")) + if err != nil { + log.Fatal(err) + } + if exists { + fmt.Println(val) + } + + val, exists, err = fst.Get([]byte("dog")) + if err != nil { + log.Fatal(err) + } + if exists { + fmt.Println(val) + } + + val, exists, err = fst.Get([]byte("fish")) + if err != nil { + log.Fatal(err) + } + if exists { + fmt.Println(val) + } + + // Output: 1 + // 2 + // 3 +} diff --git a/vendor/github.com/couchbase/vellum/fst.go b/vendor/github.com/couchbase/vellum/fst.go new file mode 100644 index 0000000..6d6165a --- /dev/null +++ b/vendor/github.com/couchbase/vellum/fst.go @@ -0,0 +1,235 @@ +// Copyright (c) 2017 Couchbase, 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 vellum + +import ( + "io" + + "github.com/willf/bitset" +) + +// FST is an in-memory representation of a finite state transducer, +// capable of returning the uint64 value associated with +// each []byte key stored, as well as enumerating all of the keys +// in order. +type FST struct { + f io.Closer + ver int + len int + typ int + data []byte + decoder decoder +} + +func new(data []byte, f io.Closer) (rv *FST, err error) { + rv = &FST{ + data: data, + f: f, + } + + rv.ver, rv.typ, err = decodeHeader(data) + if err != nil { + return nil, err + } + + rv.decoder, err = loadDecoder(rv.ver, rv.data) + if err != nil { + return nil, err + } + + rv.len = rv.decoder.getLen() + + return rv, nil +} + +// Contains returns true if this FST contains the specified key. +func (f *FST) Contains(val []byte) (bool, error) { + _, exists, err := f.Get(val) + return exists, err +} + +// Get returns the value associated with the key. NOTE: a value of zero +// does not imply the key does not exist, you must consult the second +// return value as well. +func (f *FST) Get(input []byte) (uint64, bool, error) { + + var total uint64 + curr := f.decoder.getRoot() + state, err := f.decoder.stateAt(curr, nil) + if err != nil { + return 0, false, err + } + for i := range input { + _, curr, output := state.TransitionFor(input[i]) + if curr == noneAddr { + return 0, false, nil + } + + state, err = f.decoder.stateAt(curr, state) + if err != nil { + return 0, false, err + } + + total += output + } + + if state.Final() { + total += state.FinalOutput() + return total, true, nil + } + return 0, false, nil +} + +// Version returns the encoding version used by this FST instance. +func (f *FST) Version() int { + return f.ver +} + +// Len returns the number of entries in this FST instance. +func (f *FST) Len() int { + return f.len +} + +// Type returns the type of this FST instance. +func (f *FST) Type() int { + return f.typ +} + +// Close will unmap any mmap'd data (if managed by vellum) and it will close +// the backing file (if managed by vellum). You MUST call Close() for any +// FST instance that is created. +func (f *FST) Close() error { + if f.f != nil { + err := f.f.Close() + if err != nil { + return err + } + } + f.data = nil + f.decoder = nil + return nil +} + +// Start returns the start state of this Automaton +func (f *FST) Start() int { + return f.decoder.getRoot() +} + +// IsMatch returns if this state is a matching state in this Automaton +func (f *FST) IsMatch(addr int) bool { + match, _ := f.IsMatchWithVal(addr) + return match +} + +// CanMatch returns if this state can ever transition to a matching state +// in this Automaton +func (f *FST) CanMatch(addr int) bool { + if addr == noneAddr { + return false + } + return true +} + +// WillAlwaysMatch returns if from this state the Automaton will always +// be in a matching state +func (f *FST) WillAlwaysMatch(int) bool { + return false +} + +// Accept returns the next state for this Automaton on input of byte b +func (f *FST) Accept(addr int, b byte) int { + next, _ := f.AcceptWithVal(addr, b) + return next +} + +// IsMatchWithVal returns if this state is a matching state in this Automaton +// and also returns the final output value for this state +func (f *FST) IsMatchWithVal(addr int) (bool, uint64) { + s, err := f.decoder.stateAt(addr, nil) + if err != nil { + return false, 0 + } + return s.Final(), s.FinalOutput() +} + +// AcceptWithVal returns the next state for this Automaton on input of byte b +// and also returns the output value for the transition +func (f *FST) AcceptWithVal(addr int, b byte) (int, uint64) { + s, err := f.decoder.stateAt(addr, nil) + if err != nil { + return noneAddr, 0 + } + _, next, output := s.TransitionFor(b) + return next, output +} + +// Iterator returns a new Iterator capable of enumerating the key/value pairs +// between the provided startKeyInclusive and endKeyExclusive. +func (f *FST) Iterator(startKeyInclusive, endKeyExclusive []byte) (*FSTIterator, error) { + return newIterator(f, startKeyInclusive, endKeyExclusive, nil) +} + +// Search returns a new Iterator capable of enumerating the key/value pairs +// between the provided startKeyInclusive and endKeyExclusive that also +// satisfy the provided automaton. +func (f *FST) Search(aut Automaton, startKeyInclusive, endKeyExclusive []byte) (*FSTIterator, error) { + return newIterator(f, startKeyInclusive, endKeyExclusive, aut) +} + +// Debug is only intended for debug purposes, it simply asks the underlying +// decoder visit each state, and pass it to the provided callback. +func (f *FST) Debug(callback func(int, interface{}) error) error { + + addr := f.decoder.getRoot() + set := bitset.New(uint(addr)) + stack := addrStack{addr} + + stateNumber := 0 + stack, addr = stack[:len(stack)-1], stack[len(stack)-1] + for addr != noneAddr { + if set.Test(uint(addr)) { + stack, addr = stack.Pop() + continue + } + set.Set(uint(addr)) + state, err := f.decoder.stateAt(addr, nil) + if err != nil { + return err + } + err = callback(stateNumber, state) + if err != nil { + return err + } + for i := 0; i < state.NumTransitions(); i++ { + tchar := state.TransitionAt(i) + _, dest, _ := state.TransitionFor(tchar) + stack = append(stack, dest) + } + stateNumber++ + stack, addr = stack.Pop() + } + + return nil +} + +type addrStack []int + +func (a addrStack) Pop() (addrStack, int) { + l := len(a) + if l < 1 { + return a, noneAddr + } + return a[:l-1], a[l-1] +} diff --git a/vendor/github.com/couchbase/vellum/fst_iterator.go b/vendor/github.com/couchbase/vellum/fst_iterator.go new file mode 100644 index 0000000..389ac64 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/fst_iterator.go @@ -0,0 +1,276 @@ +// Copyright (c) 2017 Couchbase, 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 vellum + +import ( + "bytes" +) + +// Iterator represents a means of visity key/value pairs in order. +type Iterator interface { + + // Current() returns the key/value pair currently pointed to. + // The []byte of the key is ONLY guaranteed to be valid until + // another call to Next/Seek/Close. If you need it beyond that + // point you MUST make a copy. + Current() ([]byte, uint64) + + // Next() advances the iterator to the next key/value pair. + // If no more key/value pairs exist, ErrIteratorDone is returned. + Next() error + + // Seek() advances the iterator the specified key, or the next key + // if it does not exist. + // If no keys exist after that point, ErrIteratorDone is returned. + Seek(key []byte) error + + // Reset resets the Iterator' internal state to allow for iterator + // reuse (e.g. pooling). + Reset(f *FST, startKeyInclusive, endKeyExclusive []byte, aut Automaton) error + + // Close() frees any resources held by this iterator. + Close() error +} + +// FSTIterator is a structure for iterating key/value pairs in this FST in +// lexicographic order. Iterators should be constructed with the FSTIterator +// method on the parent FST structure. +type FSTIterator struct { + f *FST + aut Automaton + + startKeyInclusive []byte + endKeyExclusive []byte + + statesStack []fstState + keysStack []byte + keysPosStack []int + valsStack []uint64 + autStatesStack []int + + nextStart []byte +} + +func newIterator(f *FST, startKeyInclusive, endKeyExclusive []byte, + aut Automaton) (*FSTIterator, error) { + + rv := &FSTIterator{} + err := rv.Reset(f, startKeyInclusive, endKeyExclusive, aut) + if err != nil { + return nil, err + } + return rv, nil +} + +// Reset resets the Iterator' internal state to allow for iterator +// reuse (e.g. pooling). +func (i *FSTIterator) Reset(f *FST, startKeyInclusive, endKeyExclusive []byte, aut Automaton) error { + if aut == nil { + aut = alwaysMatchAutomaton + } + + i.f = f + i.startKeyInclusive = startKeyInclusive + i.endKeyExclusive = endKeyExclusive + i.aut = aut + + return i.pointTo(startKeyInclusive) +} + +// pointTo attempts to point us to the specified location +func (i *FSTIterator) pointTo(key []byte) error { + + // tried to seek before start + if bytes.Compare(key, i.startKeyInclusive) < 0 { + key = i.startKeyInclusive + } + + // trid to see past end + if i.endKeyExclusive != nil && bytes.Compare(key, i.endKeyExclusive) > 0 { + key = i.endKeyExclusive + } + + // reset any state, pointTo always starts over + i.statesStack = i.statesStack[:0] + i.keysStack = i.keysStack[:0] + i.keysPosStack = i.keysPosStack[:0] + i.valsStack = i.valsStack[:0] + i.autStatesStack = i.autStatesStack[:0] + + root, err := i.f.decoder.stateAt(i.f.decoder.getRoot(), nil) + if err != nil { + return err + } + + autStart := i.aut.Start() + + maxQ := -1 + // root is always part of the path + i.statesStack = append(i.statesStack, root) + i.autStatesStack = append(i.autStatesStack, autStart) + for j := 0; j < len(key); j++ { + curr := i.statesStack[len(i.statesStack)-1] + autCurr := i.autStatesStack[len(i.autStatesStack)-1] + + pos, nextAddr, nextVal := curr.TransitionFor(key[j]) + if nextAddr == noneAddr { + // needed transition doesn't exist + // find last trans before the one we needed + for q := 0; q < curr.NumTransitions(); q++ { + if curr.TransitionAt(q) < key[j] { + maxQ = q + } + } + break + } + autNext := i.aut.Accept(autCurr, key[j]) + + next, err := i.f.decoder.stateAt(nextAddr, nil) + if err != nil { + return err + } + + i.statesStack = append(i.statesStack, next) + i.keysStack = append(i.keysStack, key[j]) + i.keysPosStack = append(i.keysPosStack, pos) + i.valsStack = append(i.valsStack, nextVal) + i.autStatesStack = append(i.autStatesStack, autNext) + continue + } + + if !i.statesStack[len(i.statesStack)-1].Final() || !i.aut.IsMatch(i.autStatesStack[len(i.autStatesStack)-1]) || bytes.Compare(i.keysStack, key) < 0 { + return i.next(maxQ) + } + + return nil +} + +// Current returns the key and value currently pointed to by the iterator. +// If the iterator is not pointing at a valid value (because Iterator/Next/Seek) +// returned an error previously, it may return nil,0. +func (i *FSTIterator) Current() ([]byte, uint64) { + curr := i.statesStack[len(i.statesStack)-1] + if curr.Final() { + var total uint64 + for _, v := range i.valsStack { + total += v + } + total += curr.FinalOutput() + return i.keysStack, total + } + return nil, 0 +} + +// Next advances this iterator to the next key/value pair. If there is none +// or the advancement goes beyond the configured endKeyExclusive, then +// ErrIteratorDone is returned. +func (i *FSTIterator) Next() error { + return i.next(-1) +} + +func (i *FSTIterator) next(lastOffset int) error { + + // remember where we started + if cap(i.nextStart) < len(i.keysStack) { + i.nextStart = make([]byte, len(i.keysStack)) + } else { + i.nextStart = i.nextStart[0:len(i.keysStack)] + } + copy(i.nextStart, i.keysStack) + + for true { + curr := i.statesStack[len(i.statesStack)-1] + autCurr := i.autStatesStack[len(i.autStatesStack)-1] + + if curr.Final() && i.aut.IsMatch(autCurr) && + bytes.Compare(i.keysStack, i.nextStart) > 0 { + // in final state greater than start key + return nil + } + + nextOffset := lastOffset + 1 + if nextOffset < curr.NumTransitions() { + t := curr.TransitionAt(nextOffset) + autNext := i.aut.Accept(autCurr, t) + if i.aut.CanMatch(autNext) { + pos, nextAddr, v := curr.TransitionFor(t) + + // the next slot in the statesStack might have an + // fstState instance that we can reuse + var nextPrealloc fstState + if len(i.statesStack) < cap(i.statesStack) { + nextPrealloc = i.statesStack[0:cap(i.statesStack)][len(i.statesStack)] + } + + // push onto stack + next, err := i.f.decoder.stateAt(nextAddr, nextPrealloc) + if err != nil { + return err + } + i.statesStack = append(i.statesStack, next) + i.keysStack = append(i.keysStack, t) + i.keysPosStack = append(i.keysPosStack, pos) + i.valsStack = append(i.valsStack, v) + i.autStatesStack = append(i.autStatesStack, autNext) + lastOffset = -1 + + // check to see if new keystack might have gone too far + if i.endKeyExclusive != nil && bytes.Compare(i.keysStack, i.endKeyExclusive) >= 0 { + return ErrIteratorDone + } + } else { + lastOffset = nextOffset + } + + continue + } + + if len(i.statesStack) > 1 { + // no transitions, and still room to pop + i.statesStack = i.statesStack[:len(i.statesStack)-1] + i.keysStack = i.keysStack[:len(i.keysStack)-1] + lastOffset = i.keysPosStack[len(i.keysPosStack)-1] + + i.keysPosStack = i.keysPosStack[:len(i.keysPosStack)-1] + i.valsStack = i.valsStack[:len(i.valsStack)-1] + i.autStatesStack = i.autStatesStack[:len(i.autStatesStack)-1] + continue + } else { + // stack len is 1 (root), can't go back further, we're done + break + } + + } + + return ErrIteratorDone +} + +// Seek advances this iterator to the specified key/value pair. If this key +// is not in the FST, Current() will return the next largest key. If this +// seek operation would go past the last key, or outside the configured +// startKeyInclusive/endKeyExclusive then ErrIteratorDone is returned. +func (i *FSTIterator) Seek(key []byte) error { + err := i.pointTo(key) + if err != nil { + return err + } + return nil +} + +// Close will free any resources held by this iterator. +func (i *FSTIterator) Close() error { + // at the moment we don't do anything, but wanted this for API completeness + return nil +} diff --git a/vendor/github.com/couchbase/vellum/fst_iterator_test.go b/vendor/github.com/couchbase/vellum/fst_iterator_test.go new file mode 100644 index 0000000..f98b3a5 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/fst_iterator_test.go @@ -0,0 +1,618 @@ +// Copyright (c) 2017 Couchbase, 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 vellum + +import ( + "bytes" + "reflect" + "testing" + + "github.com/couchbase/vellum/levenshtein" + "github.com/couchbase/vellum/regexp" +) + +func TestIterator(t *testing.T) { + var buf bytes.Buffer + b, err := New(&buf, nil) + if err != nil { + t.Fatalf("error creating builder: %v", err) + } + + err = insertStringMap(b, smallSample) + if err != nil { + t.Fatalf("error building: %v", err) + } + + err = b.Close() + if err != nil { + t.Fatalf("error closing: %v", err) + } + + fst, err := Load(buf.Bytes()) + if err != nil { + t.Fatalf("error loading set: %v", err) + } + + got := map[string]uint64{} + itr, err := fst.Iterator(nil, nil) + for err == nil { + key, val := itr.Current() + got[string(key)] = val + err = itr.Next() + } + if err != ErrIteratorDone { + t.Errorf("iterator error: %v", err) + } + if !reflect.DeepEqual(smallSample, got) { + t.Errorf("expected %v, got: %v", smallSample, got) + } +} + +func TestIteratorReset(t *testing.T) { + var buf bytes.Buffer + b, err := New(&buf, nil) + if err != nil { + t.Fatalf("error creating builder: %v", err) + } + + err = insertStringMap(b, smallSample) + if err != nil { + t.Fatalf("error building: %v", err) + } + + err = b.Close() + if err != nil { + t.Fatalf("error closing: %v", err) + } + + fst, err := Load(buf.Bytes()) + if err != nil { + t.Fatalf("error loading set: %v", err) + } + + itr, err := fst.Iterator(nil, nil) + + buf.Reset() + b, err = New(&buf, nil) + if err != nil { + t.Fatalf("error creating builder: %v", err) + } + + smallSample2 := map[string]uint64{ + "bold": 25, + "last": 1, + "next": 500, + "tank": 0, + } + err = insertStringMap(b, smallSample2) + if err != nil { + t.Fatalf("error building: %v", err) + } + + err = b.Close() + if err != nil { + t.Fatalf("error closing: %v", err) + } + + fst, err = Load(buf.Bytes()) + if err != nil { + t.Fatalf("error loading set: %v", err) + } + + got := map[string]uint64{} + err = itr.Reset(fst, nil, nil, nil) + for err == nil { + key, val := itr.Current() + got[string(key)] = val + err = itr.Next() + } + if err != ErrIteratorDone { + t.Errorf("iterator error: %v", err) + } + if !reflect.DeepEqual(smallSample2, got) { + t.Errorf("expected %v, got: %v", smallSample2, got) + } + +} + +func TestIteratorStartKey(t *testing.T) { + var buf bytes.Buffer + b, err := New(&buf, nil) + if err != nil { + t.Fatalf("error creating builder: %v", err) + } + + err = insertStringMap(b, smallSample) + if err != nil { + t.Fatalf("error building: %v", err) + } + + err = b.Close() + if err != nil { + t.Fatalf("error closing: %v", err) + } + + fst, err := Load(buf.Bytes()) + if err != nil { + t.Fatalf("error loading set: %v", err) + } + + // with start key < "mon", we should still get it + got := map[string]uint64{} + itr, err := fst.Iterator([]byte("a"), nil) + for err == nil { + key, val := itr.Current() + got[string(key)] = val + err = itr.Next() + } + if err != ErrIteratorDone { + t.Errorf("iterator error: %v", err) + } + if !reflect.DeepEqual(smallSample, got) { + t.Errorf("expected %v, got: %v", smallSample, got) + } + + // with start key = "mon", we should still get it + got = map[string]uint64{} + itr, err = fst.Iterator([]byte("mon"), nil) + for err == nil { + key, val := itr.Current() + got[string(key)] = val + err = itr.Next() + } + if err != ErrIteratorDone { + t.Errorf("iterator error: %v", err) + } + if !reflect.DeepEqual(smallSample, got) { + t.Errorf("expected %v, got: %v", smallSample, got) + } + + // with start key > "mon", we don't expect to get it + expect := map[string]uint64{ + "tues": smallSample["tues"], + "thurs": smallSample["thurs"], + "tye": smallSample["tye"], + } + got = map[string]uint64{} + itr, err = fst.Iterator([]byte("mona"), nil) + for err == nil { + key, val := itr.Current() + got[string(key)] = val + err = itr.Next() + } + if err != ErrIteratorDone { + t.Errorf("iterator error: %v", err) + } + if !reflect.DeepEqual(expect, got) { + t.Errorf("expected %v, got: %v", expect, got) + } + + // with start key > "mon", we don't expect to get it + expect = map[string]uint64{ + "tues": smallSample["tues"], + "thurs": smallSample["thurs"], + "tye": smallSample["tye"], + } + got = map[string]uint64{} + itr, err = fst.Iterator([]byte("my"), nil) + for err == nil { + key, val := itr.Current() + got[string(key)] = val + err = itr.Next() + } + if err != ErrIteratorDone { + t.Errorf("iterator error: %v", err) + } + if !reflect.DeepEqual(expect, got) { + t.Errorf("expected %v, got: %v", expect, got) + } +} + +func TestIteratorEndKey(t *testing.T) { + var buf bytes.Buffer + b, err := New(&buf, nil) + if err != nil { + t.Fatalf("error creating builder: %v", err) + } + + err = insertStringMap(b, smallSample) + if err != nil { + t.Fatalf("error building: %v", err) + } + + err = b.Close() + if err != nil { + t.Fatalf("error closing: %v", err) + } + + fst, err := Load(buf.Bytes()) + if err != nil { + t.Fatalf("error loading set: %v", err) + } + + // with end key > "tye", we should still get it + got := map[string]uint64{} + itr, err := fst.Iterator(nil, []byte("zeus")) + for err == nil { + key, val := itr.Current() + got[string(key)] = val + err = itr.Next() + } + if err != ErrIteratorDone { + t.Errorf("iterator error: %v", err) + } + if !reflect.DeepEqual(smallSample, got) { + t.Errorf("expected %v, got: %v", smallSample, got) + } + + // with end key = "tye", we should NOT get it (end key exclusive) + expect := map[string]uint64{ + "mon": smallSample["mon"], + "tues": smallSample["tues"], + "thurs": smallSample["thurs"], + } + got = map[string]uint64{} + itr, err = fst.Iterator(nil, []byte("tye")) + for err == nil { + key, val := itr.Current() + got[string(key)] = val + err = itr.Next() + } + if err != ErrIteratorDone { + t.Errorf("iterator error: %v", err) + } + if !reflect.DeepEqual(expect, got) { + t.Errorf("expected %v, got: %v", expect, got) + } + + // with start key < "tye", we don't expect to get it + got = map[string]uint64{} + itr, err = fst.Iterator(nil, []byte("tv")) + for err == nil { + key, val := itr.Current() + got[string(key)] = val + err = itr.Next() + } + if err != ErrIteratorDone { + t.Errorf("iterator error: %v", err) + } + if !reflect.DeepEqual(expect, got) { + t.Errorf("expected %v, got: %v", expect, got) + } +} + +func TestIteratorSeek(t *testing.T) { + var buf bytes.Buffer + b, err := New(&buf, nil) + if err != nil { + t.Fatalf("error creating builder: %v", err) + } + + err = insertStringMap(b, smallSample) + if err != nil { + t.Fatalf("error building: %v", err) + } + + err = b.Close() + if err != nil { + t.Fatalf("error closing: %v", err) + } + + fst, err := Load(buf.Bytes()) + if err != nil { + t.Fatalf("error loading set: %v", err) + } + + // seek past thurs (exactly to tues) + expect := map[string]uint64{ + "mon": smallSample["mon"], + "tues": smallSample["tues"], + "tye": smallSample["tye"], + } + got := map[string]uint64{} + itr, err := fst.Iterator(nil, nil) + for err == nil { + key, val := itr.Current() + got[string(key)] = val + + if string(key) == "mon" { + err = itr.Seek([]byte("tue")) + } else { + err = itr.Next() + } + } + if err != ErrIteratorDone { + t.Errorf("iterator error: %v", err) + } + if !reflect.DeepEqual(expect, got) { + t.Errorf("expected %v, got: %v", expect, got) + } + + // similar but seek to something after thurs before tues + got = map[string]uint64{} + itr, err = fst.Iterator(nil, nil) + for err == nil { + key, val := itr.Current() + got[string(key)] = val + + if string(key) == "mon" { + err = itr.Seek([]byte("thv")) + } else { + err = itr.Next() + } + } + if err != ErrIteratorDone { + t.Errorf("iterator error: %v", err) + } + if !reflect.DeepEqual(expect, got) { + t.Errorf("expected %v, got: %v", expect, got) + } + + // similar but seek to thurs+suffix + got = map[string]uint64{} + itr, err = fst.Iterator(nil, nil) + for err == nil { + key, val := itr.Current() + got[string(key)] = val + + if string(key) == "mon" { + err = itr.Seek([]byte("thursday")) + } else { + err = itr.Next() + } + } + if err != ErrIteratorDone { + t.Errorf("iterator error: %v", err) + } + if !reflect.DeepEqual(expect, got) { + t.Errorf("expected %v, got: %v", expect, got) + } + + // seek past last key (still inside iterator boundaries) + expect = map[string]uint64{ + "mon": smallSample["mon"], + } + got = map[string]uint64{} + itr, err = fst.Iterator(nil, nil) + for err == nil { + key, val := itr.Current() + got[string(key)] = val + + if string(key) == "mon" { + err = itr.Seek([]byte("zzz")) + } else { + err = itr.Next() + } + } + if err != ErrIteratorDone { + t.Errorf("iterator error: %v", err) + } + if !reflect.DeepEqual(expect, got) { + t.Errorf("expected %v, got: %v", expect, got) + } +} + +func TestIteratorSeekOutsideBoundaries(t *testing.T) { + var buf bytes.Buffer + b, err := New(&buf, nil) + if err != nil { + t.Fatalf("error creating builder: %v", err) + } + + err = insertStringMap(b, smallSample) + if err != nil { + t.Fatalf("error building: %v", err) + } + + err = b.Close() + if err != nil { + t.Fatalf("error closing: %v", err) + } + + fst, err := Load(buf.Bytes()) + if err != nil { + t.Fatalf("error loading set: %v", err) + } + + // first test with boundaries should just see thurs/tues + expect := map[string]uint64{ + "thurs": smallSample["thurs"], + "tues": smallSample["tues"], + } + got := map[string]uint64{} + itr, err := fst.Iterator([]byte("th"), []byte("tuesd")) + for err == nil { + key, val := itr.Current() + got[string(key)] = val + err = itr.Next() + } + if err != ErrIteratorDone { + t.Errorf("iterator error: %v", err) + } + if !reflect.DeepEqual(expect, got) { + t.Errorf("expected %v, got: %v", expect, got) + } + + // this time try to seek before the start, + // still shouldn't see mon + got = map[string]uint64{} + itr, err = fst.Iterator([]byte("th"), []byte("tuesd")) + if err != nil { + t.Fatalf("error before seeking: %v", err) + } + err = itr.Seek([]byte("cat")) + for err == nil { + key, val := itr.Current() + got[string(key)] = val + err = itr.Next() + } + if err != ErrIteratorDone { + t.Errorf("iterator error: %v", err) + } + if !reflect.DeepEqual(expect, got) { + t.Errorf("expected %v, got: %v", expect, got) + } + + // this time try to seek past the end + // should see nothing + + itr, err = fst.Iterator([]byte("th"), []byte("tuesd")) + if err != nil { + t.Fatalf("error before seeking: %v", err) + } + err = itr.Seek([]byte("ty")) + if err != ErrIteratorDone { + t.Fatalf("expected ErrIteratorDone, got %v", err) + } +} + +var key []byte +var val uint64 + +func BenchmarkFSTIteratorAllInMem(b *testing.B) { + // first build the FST once + dataset := thousandTestWords + randomThousandVals := randomValues(dataset) + var buf bytes.Buffer + builder, err := New(&buf, nil) + if err != nil { + b.Fatalf("error creating builder: %v", err) + } + err = insertStrings(builder, dataset, randomThousandVals) + if err != nil { + b.Fatalf("error inserting thousand words: %v", err) + } + err = builder.Close() + if err != nil { + b.Fatalf("error closing builder: %v", err) + } + + b.ResetTimer() + + for i := 0; i < b.N; i++ { + + fst, err := Load(buf.Bytes()) + if err != nil { + b.Fatalf("error loading FST: %v", err) + } + + itr, err := fst.Iterator(nil, nil) + for err == nil { + key, val = itr.Current() + err = itr.Next() + } + if err != ErrIteratorDone { + b.Fatalf("iterator error: %v", err) + } + + err = fst.Close() + if err != nil { + b.Fatalf("error closing FST: %v", err) + } + + } +} + +func TestFuzzySearch(t *testing.T) { + var buf bytes.Buffer + b, err := New(&buf, nil) + if err != nil { + t.Fatalf("error creating builder: %v", err) + } + + err = insertStringMap(b, smallSample) + if err != nil { + t.Fatalf("error building: %v", err) + } + + err = b.Close() + if err != nil { + t.Fatalf("error closing: %v", err) + } + + fst, err := Load(buf.Bytes()) + if err != nil { + t.Fatalf("error loading set: %v", err) + } + + fuzzy, err := levenshtein.New("tue", 1) + if err != nil { + t.Fatalf("error building levenshtein automaton: %v", err) + } + + want := map[string]uint64{ + "tues": 3, + "tye": 99, + } + got := map[string]uint64{} + itr, err := fst.Search(fuzzy, nil, nil) + for err == nil { + key, val := itr.Current() + got[string(key)] = val + err = itr.Next() + } + if err != ErrIteratorDone { + t.Errorf("iterator error: %v", err) + } + if !reflect.DeepEqual(want, got) { + t.Errorf("expected %v, got: %v", want, got) + } +} + +func TestRegexpSearch(t *testing.T) { + var buf bytes.Buffer + b, err := New(&buf, nil) + if err != nil { + t.Fatalf("error creating builder: %v", err) + } + + err = insertStringMap(b, smallSample) + if err != nil { + t.Fatalf("error building: %v", err) + } + + err = b.Close() + if err != nil { + t.Fatalf("error closing: %v", err) + } + + fst, err := Load(buf.Bytes()) + if err != nil { + t.Fatalf("error loading set: %v", err) + } + + r, err := regexp.New(`t.*s`) + if err != nil { + t.Fatalf("error building regexp automaton: %v", err) + } + + want := map[string]uint64{ + "thurs": 5, + "tues": 3, + } + got := map[string]uint64{} + itr, err := fst.Search(r, nil, nil) + for err == nil { + key, val := itr.Current() + got[string(key)] = val + err = itr.Next() + } + if err != ErrIteratorDone { + t.Errorf("iterator error: %v", err) + } + if !reflect.DeepEqual(want, got) { + t.Errorf("expected %v, got: %v", want, got) + } +} diff --git a/vendor/github.com/couchbase/vellum/levenshtein/dfa.go b/vendor/github.com/couchbase/vellum/levenshtein/dfa.go new file mode 100644 index 0000000..5eb7a40 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/levenshtein/dfa.go @@ -0,0 +1,192 @@ +// Copyright (c) 2017 Couchbase, 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 levenshtein + +import ( + "fmt" + "unicode" + + "github.com/couchbase/vellum/utf8" +) + +type dfa struct { + states statesStack +} + +type state struct { + next []int + match bool +} + +func (s *state) String() string { + rv := " |" + for i := 0; i < 16; i++ { + rv += fmt.Sprintf("% 5x", i) + } + rv += "\n" + for i := 0; i < len(s.next); i++ { + if i%16 == 0 { + rv += fmt.Sprintf("%x |", i/16) + } + if s.next[i] != 0 { + rv += fmt.Sprintf("% 5d", s.next[i]) + } else { + rv += " -" + } + if i%16 == 15 { + rv += "\n" + } + } + return rv +} + +type dfaBuilder struct { + dfa *dfa + lev *dynamicLevenshtein + cache map[string]int +} + +func newDfaBuilder(lev *dynamicLevenshtein) *dfaBuilder { + dfab := &dfaBuilder{ + dfa: &dfa{ + states: make([]*state, 0, 16), + }, + lev: lev, + cache: make(map[string]int, 1024), + } + dfab.newState(false) // create state 0, invalid + return dfab +} + +func (b *dfaBuilder) build() (*dfa, error) { + var stack intsStack + stack = stack.Push(b.lev.start()) + seen := make(map[int]struct{}) + + var levState []int + stack, levState = stack.Pop() + for levState != nil { + dfaSi := b.cachedState(levState) + mmToSi, mmMismatchState, err := b.addMismatchUtf8States(dfaSi, levState) + if err != nil { + return nil, err + } + if mmToSi != 0 { + if _, ok := seen[mmToSi]; !ok { + seen[mmToSi] = struct{}{} + stack = stack.Push(mmMismatchState) + } + } + + i := 0 + for _, r := range b.lev.query { + if uint(levState[i]) > b.lev.distance { + i++ + continue + } + levNext := b.lev.accept(levState, &r) + nextSi := b.cachedState(levNext) + if nextSi != 0 { + err = b.addUtf8Sequences(true, dfaSi, nextSi, r, r) + if err != nil { + return nil, err + } + if _, ok := seen[nextSi]; !ok { + seen[nextSi] = struct{}{} + stack = stack.Push(levNext) + } + } + i++ + } + + if len(b.dfa.states) > StateLimit { + return nil, ErrTooManyStates + } + + stack, levState = stack.Pop() + } + + return b.dfa, nil +} + +func (b *dfaBuilder) cachedState(levState []int) int { + rv, _ := b.cached(levState) + return rv +} + +func (b *dfaBuilder) cached(levState []int) (int, bool) { + if !b.lev.canMatch(levState) { + return 0, true + } + k := fmt.Sprintf("%v", levState) + v, ok := b.cache[k] + if ok { + return v, true + } + match := b.lev.isMatch(levState) + b.dfa.states = b.dfa.states.Push(&state{ + next: make([]int, 256), + match: match, + }) + newV := len(b.dfa.states) - 1 + b.cache[k] = newV + return newV, false +} + +func (b *dfaBuilder) addMismatchUtf8States(fromSi int, levState []int) (int, []int, error) { + mmState := b.lev.accept(levState, nil) + toSi, _ := b.cached(mmState) + if toSi == 0 { + return 0, nil, nil + } + err := b.addUtf8Sequences(false, fromSi, toSi, 0, unicode.MaxRune) + if err != nil { + return 0, nil, err + } + return toSi, mmState, nil +} + +func (b *dfaBuilder) addUtf8Sequences(overwrite bool, fromSi, toSi int, fromChar, toChar rune) error { + sequences, err := utf8.NewSequences(fromChar, toChar) + if err != nil { + return err + } + for _, seq := range sequences { + fsi := fromSi + for _, utf8r := range seq[:len(seq)-1] { + tsi := b.newState(false) + b.addUtf8Range(overwrite, fsi, tsi, utf8r) + fsi = tsi + } + b.addUtf8Range(overwrite, fsi, toSi, seq[len(seq)-1]) + } + return nil +} + +func (b *dfaBuilder) addUtf8Range(overwrite bool, from, to int, rang *utf8.Range) { + for by := rang.Start; by <= rang.End; by++ { + if overwrite || b.dfa.states[from].next[by] == 0 { + b.dfa.states[from].next[by] = to + } + } +} + +func (b *dfaBuilder) newState(match bool) int { + b.dfa.states = append(b.dfa.states, &state{ + next: make([]int, 256), + match: match, + }) + return len(b.dfa.states) - 1 +} diff --git a/vendor/github.com/couchbase/vellum/levenshtein/levenshtein.go b/vendor/github.com/couchbase/vellum/levenshtein/levenshtein.go new file mode 100644 index 0000000..49519bf --- /dev/null +++ b/vendor/github.com/couchbase/vellum/levenshtein/levenshtein.go @@ -0,0 +1,90 @@ +// Copyright (c) 2017 Couchbase, 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 levenshtein + +import ( + "fmt" +) + +// StateLimit is the maximum number of states allowed +const StateLimit = 10000 + +// ErrTooManyStates is returned if you attempt to build a Levenshtein +// automaton which requries too many states. +var ErrTooManyStates = fmt.Errorf("dfa contains more than %d states", StateLimit) + +// Levenshtein implements the vellum.Automaton interface for matching +// terms within the specified Levenshtein edit-distance of the queried +// term. This automaton recognizes utf-8 encoded bytes and computes +// the edit distance on the result code-points, not on the raw bytes. +type Levenshtein struct { + prog *dynamicLevenshtein + dfa *dfa +} + +// NewLevenshtein creates a new Levenshtein automaton for the specified +// query string and edit distance. +func New(query string, distance int) (*Levenshtein, error) { + lev := &dynamicLevenshtein{ + query: query, + distance: uint(distance), + } + dfabuilder := newDfaBuilder(lev) + dfa, err := dfabuilder.build() + if err != nil { + return nil, err + } + return &Levenshtein{ + prog: lev, + dfa: dfa, + }, nil +} + +// Start returns the start state of this automaton. +func (l *Levenshtein) Start() int { + return 1 +} + +// IsMatch returns if the specified state is a matching state. +func (l *Levenshtein) IsMatch(s int) bool { + if s < len(l.dfa.states) { + return l.dfa.states[s].match + } + return false +} + +// CanMatch returns if the specified state can ever transition to a matching +// state. +func (l *Levenshtein) CanMatch(s int) bool { + if s < len(l.dfa.states) && s > 0 { + return true + } + return false +} + +// WillAlwaysMatch returns if the specified state will always end in a +// matching state. +func (l *Levenshtein) WillAlwaysMatch(s int) bool { + return false +} + +// Accept returns the new state, resulting from the transite byte b +// when currently in the state s. +func (l *Levenshtein) Accept(s int, b byte) int { + if s < len(l.dfa.states) { + return l.dfa.states[s].next[b] + } + return 0 +} diff --git a/vendor/github.com/couchbase/vellum/levenshtein/levenshtein_test.go b/vendor/github.com/couchbase/vellum/levenshtein/levenshtein_test.go new file mode 100644 index 0000000..4112ca9 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/levenshtein/levenshtein_test.go @@ -0,0 +1,216 @@ +// Copyright (c) 2017 Couchbase, 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 levenshtein + +import ( + "testing" +) + +func TestLevenshtein(t *testing.T) { + + tests := []struct { + desc string + query string + distance int + seq []byte + isMatch bool + canMatch bool + }{ + { + desc: "cat/0 - c a t", + query: "cat", + distance: 0, + seq: []byte{'c', 'a', 't'}, + isMatch: true, + canMatch: true, + }, + { + desc: "cat/1 - c a", + query: "cat", + distance: 1, + seq: []byte{'c', 'a'}, + isMatch: true, + canMatch: true, + }, + { + desc: "cat/1 - c a t s", + query: "cat", + distance: 1, + seq: []byte{'c', 'a', 't', 's'}, + isMatch: true, + canMatch: true, + }, + { + desc: "cat/0 - c a", + query: "cat", + distance: 0, + seq: []byte{'c', 'a'}, + isMatch: false, + canMatch: true, + }, + { + desc: "cat/0 - c a t s", + query: "cat", + distance: 0, + seq: []byte{'c', 'a', 't', 's'}, + isMatch: false, + canMatch: false, + }, + // this section contains cases where the sequence + // of bytes encountered contains utf-8 encoded + // multi-byte characters, which should count as 1 + // for the purposes of the levenshtein edit distance + { + desc: "cat/0 - c 0xc3 0xa1 t (cát)", + query: "cat", + distance: 0, + seq: []byte{'c', 0xc3, 0xa1, 't'}, + isMatch: false, + canMatch: false, + }, + { + desc: "cat/1 - c 0xc3 0xa1 t (cát)", + query: "cat", + distance: 1, + seq: []byte{'c', 0xc3, 0xa1, 't'}, + isMatch: true, + canMatch: true, + }, + { + desc: "cat/1 - c 0xc3 0xa1 t (cáts)", + query: "cat", + distance: 1, + seq: []byte{'c', 0xc3, 0xa1, 't', 's'}, + isMatch: false, + canMatch: false, + }, + { + desc: "cat/1 - 0xc3 0xa1 (á)", + query: "cat", + distance: 1, + seq: []byte{0xc3, 0xa1}, + isMatch: false, + canMatch: true, + }, + { + desc: "cat/1 - c 0xc3 0xa1 t (ácat)", + query: "cat", + distance: 1, + seq: []byte{0xc3, 0xa1, 'c', 'a', 't'}, + isMatch: true, + canMatch: true, + }, + // this section has utf-8 encoded multi-byte characters + // in the query, which should still just count as 1 + // for the purposes of the levenshtein edit distance + { + desc: "cát/0 - c a t (cat)", + query: "cát", + distance: 0, + seq: []byte{'c', 'a', 't'}, + isMatch: false, + canMatch: false, + }, + { + desc: "cát/1 - c 0xc3 0xa1 (cá)", + query: "cát", + distance: 1, + seq: []byte{'c', 0xc3, 0xa1}, + isMatch: true, + canMatch: true, + }, + { + desc: "cát/1 - c 0xc3 0xa1 s (cás)", + query: "cát", + distance: 1, + seq: []byte{'c', 0xc3, 0xa1, 's'}, + isMatch: true, + canMatch: true, + }, + { + desc: "cát/1 - c 0xc3 0xa1 t a (cáta)", + query: "cát", + distance: 1, + seq: []byte{'c', 0xc3, 0xa1, 't', 'a'}, + isMatch: true, + canMatch: true, + }, + { + desc: "cát/1 - d 0xc3 0xa1 (dát)", + query: "cát", + distance: 1, + seq: []byte{'d', 0xc3, 0xa1, 't'}, + isMatch: true, + canMatch: true, + }, + { + desc: "cát/1 - c a t (cat)", + query: "cát", + distance: 1, + seq: []byte{'c', 'a', 't'}, + isMatch: true, + canMatch: true, + }, + + { + desc: "cát/1 - c a t (cats)", + query: "cát", + distance: 1, + seq: []byte{'c', 'a', 't', 's'}, + isMatch: false, + canMatch: false, + }, + { + desc: "cát/1 - 0xc3, 0xa (á)", + query: "cát", + distance: 1, + seq: []byte{0xc3, 0xa1}, + isMatch: false, + canMatch: true, + }, + { + desc: "cát/1 - a c 0xc3 0xa1 t (acát)", + query: "cát", + distance: 1, + seq: []byte{'a', 'c', 0xc3, 0xa1, 't'}, + isMatch: true, + canMatch: true, + }, + } + + for _, test := range tests { + t.Run(test.desc, func(t *testing.T) { + l, err := New(test.query, test.distance) + if err != nil { + t.Fatal(err) + } + + s := l.Start() + for _, b := range test.seq { + s = l.Accept(s, b) + } + + isMatch := l.IsMatch(s) + if isMatch != test.isMatch { + t.Errorf("expected isMatch %t, got %t", test.isMatch, isMatch) + } + + canMatch := l.CanMatch(s) + if canMatch != test.canMatch { + t.Errorf("expectec canMatch %t, got %t", test.canMatch, canMatch) + } + }) + } +} diff --git a/vendor/github.com/couchbase/vellum/levenshtein/rune.go b/vendor/github.com/couchbase/vellum/levenshtein/rune.go new file mode 100644 index 0000000..0fefa77 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/levenshtein/rune.go @@ -0,0 +1,78 @@ +// Copyright (c) 2017 Couchbase, 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 levenshtein + +import "unicode/utf8" + +// dynamicLevenshtein is the rune-based automaton, which is used +// during the building of the ut8-aware byte-based automaton +type dynamicLevenshtein struct { + query string + distance uint +} + +func (d *dynamicLevenshtein) start() []int { + runeCount := utf8.RuneCountInString(d.query) + rv := make([]int, runeCount+1) + for i := 0; i < runeCount+1; i++ { + rv[i] = i + } + return rv +} + +func (d *dynamicLevenshtein) isMatch(state []int) bool { + last := state[len(state)-1] + if uint(last) <= d.distance { + return true + } + return false +} + +func (d *dynamicLevenshtein) canMatch(state []int) bool { + if len(state) > 0 { + min := state[0] + for i := 1; i < len(state); i++ { + if state[i] < min { + min = state[i] + } + } + if uint(min) <= d.distance { + return true + } + } + return false +} + +func (d *dynamicLevenshtein) accept(state []int, r *rune) []int { + next := []int{state[0] + 1} + i := 0 + for _, c := range d.query { + var cost int + if r == nil || c != *r { + cost = 1 + } + v := min(min(next[i]+1, state[i+1]+1), state[i]+cost) + next = append(next, min(v, int(d.distance)+1)) + i++ + } + return next +} + +func min(a, b int) int { + if a < b { + return a + } + return b +} diff --git a/vendor/github.com/couchbase/vellum/levenshtein/rune_test.go b/vendor/github.com/couchbase/vellum/levenshtein/rune_test.go new file mode 100644 index 0000000..fdda0b8 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/levenshtein/rune_test.go @@ -0,0 +1,94 @@ +// Copyright (c) 2017 Couchbase, 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 levenshtein + +import "testing" + +func TestDynamicLevenshtein(t *testing.T) { + + tests := []struct { + desc string + query string + distance uint + seq []rune + isMatch bool + canMatch bool + }{ + { + desc: "cat/0 - c a t", + query: "cat", + distance: 0, + seq: []rune{'c', 'a', 't'}, + isMatch: true, + canMatch: true, + }, + { + desc: "cat/1 - c a", + query: "cat", + distance: 1, + seq: []rune{'c', 'a'}, + isMatch: true, + canMatch: true, + }, + { + desc: "cat/1 - c a t s", + query: "cat", + distance: 1, + seq: []rune{'c', 'a', 't', 's'}, + isMatch: true, + canMatch: true, + }, + { + desc: "cat/0 - c a", + query: "cat", + distance: 0, + seq: []rune{'c', 'a'}, + isMatch: false, + canMatch: true, + }, + { + desc: "cat/0 - c a t s", + query: "cat", + distance: 0, + seq: []rune{'c', 'a', 't', 's'}, + isMatch: false, + canMatch: false, + }, + } + + for _, test := range tests { + t.Run(test.desc, func(t *testing.T) { + dl := &dynamicLevenshtein{ + query: test.query, + distance: test.distance, + } + + s := dl.start() + for _, c := range test.seq { + s = dl.accept(s, &c) + } + + isMatch := dl.isMatch(s) + if isMatch != test.isMatch { + t.Errorf("expected isMatch %t, got %t", test.isMatch, isMatch) + } + + canMatch := dl.canMatch(s) + if canMatch != test.canMatch { + t.Errorf("expectec canMatch %t, got %t", test.canMatch, canMatch) + } + }) + } +} diff --git a/vendor/github.com/couchbase/vellum/levenshtein/stack.go b/vendor/github.com/couchbase/vellum/levenshtein/stack.go new file mode 100644 index 0000000..d42f601 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/levenshtein/stack.go @@ -0,0 +1,49 @@ +// Copyright (c) 2017 Couchbase, 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 levenshtein + +import "fmt" + +type statesStack []*state + +func (s statesStack) String() string { + rv := "" + for i := 0; i < len(s); i++ { + matchStr := "" + if s[i].match { + matchStr = " (MATCH) " + } + rv += fmt.Sprintf("state %d%s:\n%v\n", i, matchStr, s[i]) + } + return rv +} + +func (s statesStack) Push(v *state) statesStack { + return append(s, v) +} + +type intsStack [][]int + +func (s intsStack) Push(v []int) intsStack { + return append(s, v) +} + +func (s intsStack) Pop() (intsStack, []int) { + l := len(s) + if l < 1 { + return s, nil + } + return s[:l-1], s[l-1] +} diff --git a/vendor/github.com/couchbase/vellum/merge_iterator.go b/vendor/github.com/couchbase/vellum/merge_iterator.go new file mode 100644 index 0000000..f00f778 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/merge_iterator.go @@ -0,0 +1,188 @@ +// Copyright (c) 2017 Couchbase, 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 vellum + +import ( + "bytes" +) + +// MergeFunc is used to choose the new value for a key when merging a slice +// of iterators, and the same key is observed with multiple values. +// Values presented to the MergeFunc will be in the same order as the +// original slice creating the MergeIterator. This allows some MergeFunc +// implementations to prioritize one iterator over another. +type MergeFunc func([]uint64) uint64 + +// MergeIterator implements the Iterator interface by traversing a slice +// of iterators and merging the contents of them. If the same key exists +// in mulitipe underlying iterators, a user-provided MergeFunc will be +// invoked to choose the new value. +type MergeIterator struct { + itrs []Iterator + f MergeFunc + currKs [][]byte + currVs []uint64 + + lowK []byte + lowV uint64 + lowIdxs []int + + mergeV []uint64 +} + +// NewMergeIterator creates a new MergeIterator over the provided slice of +// Iterators and with the specified MergeFunc to resolve duplicate keys. +func NewMergeIterator(itrs []Iterator, f MergeFunc) (*MergeIterator, error) { + rv := &MergeIterator{ + itrs: itrs, + f: f, + currKs: make([][]byte, len(itrs)), + currVs: make([]uint64, len(itrs)), + lowIdxs: make([]int, 0, len(itrs)), + mergeV: make([]uint64, 0, len(itrs)), + } + rv.init() + if rv.lowK == nil { + return rv, ErrIteratorDone + } + return rv, nil +} + +func (m *MergeIterator) init() { + for i, itr := range m.itrs { + m.currKs[i], m.currVs[i] = itr.Current() + } + m.updateMatches() +} + +func (m *MergeIterator) updateMatches() { + if len(m.itrs) < 1 { + return + } + m.lowK = m.currKs[0] + m.lowIdxs = m.lowIdxs[:0] + m.lowIdxs = append(m.lowIdxs, 0) + for i := 1; i < len(m.itrs); i++ { + if m.currKs[i] == nil { + continue + } + cmp := bytes.Compare(m.currKs[i], m.lowK) + if m.lowK == nil || cmp < 0 { + // reached a new low + m.lowK = m.currKs[i] + m.lowIdxs = m.lowIdxs[:0] + m.lowIdxs = append(m.lowIdxs, i) + } else if cmp == 0 { + m.lowIdxs = append(m.lowIdxs, i) + } + } + if len(m.lowIdxs) > 1 { + // merge multiple values + m.mergeV = m.mergeV[:0] + for _, vi := range m.lowIdxs { + m.mergeV = append(m.mergeV, m.currVs[vi]) + } + m.lowV = m.f(m.mergeV) + } else if len(m.lowIdxs) == 1 { + m.lowV = m.currVs[m.lowIdxs[0]] + } +} + +// Current returns the key and value currently pointed to by this iterator. +// If the iterator is not pointing at a valid value (because Iterator/Next/Seek) +// returned an error previously, it may return nil,0. +func (m *MergeIterator) Current() ([]byte, uint64) { + return m.lowK, m.lowV +} + +// Next advances this iterator to the next key/value pair. If there is none, +// then ErrIteratorDone is returned. +func (m *MergeIterator) Next() error { + // move all the current low iterators to next + for _, vi := range m.lowIdxs { + err := m.itrs[vi].Next() + if err != nil && err != ErrIteratorDone { + return err + } + m.currKs[vi], m.currVs[vi] = m.itrs[vi].Current() + } + m.updateMatches() + if m.lowK == nil { + return ErrIteratorDone + } + return nil +} + +// Seek advances this iterator to the specified key/value pair. If this key +// is not in the FST, Current() will return the next largest key. If this +// seek operation would go past the last key, then ErrIteratorDone is returned. +func (m *MergeIterator) Seek(key []byte) error { + for i := range m.itrs { + err := m.itrs[i].Seek(key) + if err != nil && err != ErrIteratorDone { + return err + } + } + m.updateMatches() + if m.lowK == nil { + return ErrIteratorDone + } + return nil +} + +// Close will attempt to close all the underlying Iterators. If any errors +// are encountered, the first will be returned. +func (m *MergeIterator) Close() error { + var rv error + for i := range m.itrs { + // close all iterators, return first error if any + err := m.itrs[i].Close() + if rv == nil { + rv = err + } + } + return rv +} + +// MergeMin chooses the minimum value +func MergeMin(vals []uint64) uint64 { + rv := vals[0] + for _, v := range vals[1:] { + if v < rv { + rv = v + } + } + return rv +} + +// MergeMax chooses the maximum value +func MergeMax(vals []uint64) uint64 { + rv := vals[0] + for _, v := range vals[1:] { + if v > rv { + rv = v + } + } + return rv +} + +// MergeSum sums the values +func MergeSum(vals []uint64) uint64 { + rv := vals[0] + for _, v := range vals[1:] { + rv += v + } + return rv +} diff --git a/vendor/github.com/couchbase/vellum/merge_iterator_test.go b/vendor/github.com/couchbase/vellum/merge_iterator_test.go new file mode 100644 index 0000000..1515159 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/merge_iterator_test.go @@ -0,0 +1,273 @@ +// Copyright (c) 2017 Couchbase, 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 vellum + +import ( + "reflect" + "sort" + "testing" +) + +func TestMergeIterator(t *testing.T) { + + tests := []struct { + desc string + in []map[string]uint64 + merge MergeFunc + want map[string]uint64 + }{ + { + desc: "two non-empty iterators with no duplicate keys", + in: []map[string]uint64{ + map[string]uint64{ + "a": 1, + "c": 3, + "e": 5, + }, + map[string]uint64{ + "b": 2, + "d": 4, + "f": 6, + }, + }, + merge: func(mvs []uint64) uint64 { + return mvs[0] + }, + want: map[string]uint64{ + "a": 1, + "c": 3, + "e": 5, + "b": 2, + "d": 4, + "f": 6, + }, + }, + { + desc: "two non-empty iterators with duplicate keys summed", + in: []map[string]uint64{ + map[string]uint64{ + "a": 1, + "c": 3, + "e": 5, + }, + map[string]uint64{ + "a": 2, + "c": 4, + "e": 6, + }, + }, + merge: func(mvs []uint64) uint64 { + var rv uint64 + for _, mv := range mvs { + rv += mv + } + return rv + }, + want: map[string]uint64{ + "a": 3, + "c": 7, + "e": 11, + }, + }, + + { + desc: "non-working example", + in: []map[string]uint64{ + map[string]uint64{ + "mon": 2, + "tues": 3, + "thurs": 5, + "tye": 99, + }, + map[string]uint64{ + "bold": 25, + "last": 1, + "next": 500, + "tank": 0, + }, + }, + merge: func(mvs []uint64) uint64 { + return mvs[0] + }, + want: map[string]uint64{ + "mon": 2, + "tues": 3, + "thurs": 5, + "tye": 99, + "bold": 25, + "last": 1, + "next": 500, + "tank": 0, + }, + }, + } + + for _, test := range tests { + t.Run(test.desc, func(t *testing.T) { + var itrs []Iterator + for i := range test.in { + itr, err := newTestIterator(test.in[i]) + if err != nil && err != ErrIteratorDone { + t.Fatalf("error creating iterator: %v", err) + } + if err == nil { + itrs = append(itrs, itr) + } + } + mi, err := NewMergeIterator(itrs, test.merge) + if err != nil && err != ErrIteratorDone { + t.Fatalf("error creating iterator: %v", err) + } + got := make(map[string]uint64) + for err == nil { + currk, currv := mi.Current() + err = mi.Next() + got[string(currk)] = currv + } + if err != nil && err != ErrIteratorDone { + t.Fatalf("error iterating: %v", err) + } + + if !reflect.DeepEqual(got, test.want) { + t.Errorf("expected %v, got %v", test.want, got) + } + }) + } +} + +type testIterator struct { + vals map[int]uint64 + keys []string + curr int +} + +func newTestIterator(in map[string]uint64) (*testIterator, error) { + rv := &testIterator{ + vals: make(map[int]uint64, len(in)), + } + for k := range in { + rv.keys = append(rv.keys, k) + } + sort.Strings(rv.keys) + for i, k := range rv.keys { + rv.vals[i] = in[k] + } + return rv, nil +} + +func (m *testIterator) Current() ([]byte, uint64) { + if m.curr >= len(m.keys) { + return nil, 0 + } + return []byte(m.keys[m.curr]), m.vals[m.curr] +} + +func (m *testIterator) Next() error { + m.curr++ + if m.curr >= len(m.keys) { + return ErrIteratorDone + } + return nil +} + +func (m *testIterator) Seek(key []byte) error { + m.curr = sort.SearchStrings(m.keys, string(key)) + if m.curr >= len(m.keys) { + return ErrIteratorDone + } + return nil +} + +func (m *testIterator) Reset(f *FST, startKeyInclusive, endKeyExclusive []byte, aut Automaton) error { + return nil +} + +func (m *testIterator) Close() error { + return nil +} + +func TestMergeFunc(t *testing.T) { + tests := []struct { + desc string + in []uint64 + merge MergeFunc + want uint64 + }{ + { + desc: "min", + in: []uint64{5, 99, 1}, + merge: MergeMin, + want: 1, + }, + { + desc: "max", + in: []uint64{5, 99, 1}, + merge: MergeMax, + want: 99, + }, + { + desc: "sum", + in: []uint64{5, 99, 1}, + merge: MergeSum, + want: 105, + }, + } + + for _, test := range tests { + t.Run(test.desc, func(t *testing.T) { + got := test.merge(test.in) + if test.want != got { + t.Errorf("expected %d, got %d", test.want, got) + } + }) + } +} + +func TestEmptyMergeIterator(t *testing.T) { + mi, err := NewMergeIterator([]Iterator{}, MergeMin) + if err != ErrIteratorDone { + t.Fatalf("expected iterator done, got %v", err) + } + + // should get valid merge iterator anyway + if mi == nil { + t.Fatalf("expected non-nil merge iterator") + } + + // current returns nil, 0 per interface spec + ck, cv := mi.Current() + if ck != nil { + t.Errorf("expected current to return nil key, got %v", ck) + } + if cv != 0 { + t.Errorf("expected current to return 0 val, got %d", cv) + } + + // calling Next/Seek continues to return ErrIteratorDone + err = mi.Next() + if err != ErrIteratorDone { + t.Errorf("expected iterator done, got %v", err) + } + err = mi.Seek([]byte("anywhere")) + if err != ErrIteratorDone { + t.Errorf("expected iterator done, got %v", err) + } + + err = mi.Close() + if err != nil { + t.Errorf("error closing %v", err) + } + +} diff --git a/vendor/github.com/couchbase/vellum/pack.go b/vendor/github.com/couchbase/vellum/pack.go new file mode 100644 index 0000000..78f3dcd --- /dev/null +++ b/vendor/github.com/couchbase/vellum/pack.go @@ -0,0 +1,55 @@ +// Copyright (c) 2017 Couchbase, 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 vellum + +func deltaAddr(base, trans uint64) uint64 { + // transition dest of 0 is special case + if trans == 0 { + return 0 + } + return base - trans +} + +const packOutMask = 1<<4 - 1 + +func encodePackSize(transSize, outSize int) byte { + var rv byte + rv = byte(transSize << 4) + rv |= byte(outSize) + return rv +} + +func decodePackSize(pack byte) (transSize int, packSize int) { + transSize = int(pack >> 4) + packSize = int(pack & packOutMask) + return +} + +const maxNumTrans = 1<<6 - 1 + +func encodeNumTrans(n int) byte { + if n <= maxNumTrans { + return byte(n) + } + return 0 +} + +func readPackedUint(data []byte) (rv uint64) { + for i := range data { + shifted := uint64(data[i]) << uint(i*8) + rv |= shifted + } + return +} diff --git a/vendor/github.com/couchbase/vellum/pack_test.go b/vendor/github.com/couchbase/vellum/pack_test.go new file mode 100644 index 0000000..929d60f --- /dev/null +++ b/vendor/github.com/couchbase/vellum/pack_test.go @@ -0,0 +1,54 @@ +// Copyright (c) 2017 Couchbase, 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 vellum + +import ( + "fmt" + "testing" +) + +func TestEncodeDecodePackSize(t *testing.T) { + + for i := 0; i <= 8; i++ { + for j := 0; j <= 8; j++ { + got := encodePackSize(i, j) + goti, gotj := decodePackSize(got) + if goti != i || gotj != j { + t.Errorf("failed to round trip %d,%d packed as %b to %d,%d", i, j, got, goti, gotj) + } + } + } +} + +func TestEncodeNumTrans(t *testing.T) { + tests := []struct { + input int + want byte + }{ + {0, 0}, + {5, 5}, + {1<<6 - 1, 1<<6 - 1}, + {1 << 6, 0}, + } + + for _, test := range tests { + t.Run(fmt.Sprintf("input %d", test.input), func(t *testing.T) { + got := encodeNumTrans(test.input) + if got != test.want { + t.Errorf("wanted: %d, got: %d", test.want, got) + } + }) + } +} diff --git a/vendor/github.com/couchbase/vellum/regexp/compile.go b/vendor/github.com/couchbase/vellum/regexp/compile.go new file mode 100644 index 0000000..6922b74 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/regexp/compile.go @@ -0,0 +1,316 @@ +// Copyright (c) 2017 Couchbase, 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 regexp + +import ( + "regexp/syntax" + "unicode" + + "github.com/couchbase/vellum/utf8" +) + +type compiler struct { + sizeLimit uint + insts prog +} + +func newCompiler(sizeLimit uint) *compiler { + return &compiler{ + sizeLimit: sizeLimit, + } +} + +func (c *compiler) compile(ast *syntax.Regexp) (prog, error) { + err := c.c(ast) + if err != nil { + return nil, err + } + c.insts = append(c.insts, &inst{ + op: OpMatch, + }) + return c.insts, nil +} + +func (c *compiler) c(ast *syntax.Regexp) error { + if ast.Flags&syntax.NonGreedy > 1 { + return ErrNoLazy + } + + switch ast.Op { + case syntax.OpEndLine, syntax.OpBeginLine, + syntax.OpBeginText, syntax.OpEndText: + return ErrNoEmpty + case syntax.OpWordBoundary, syntax.OpNoWordBoundary: + return ErrNoWordBoundary + case syntax.OpEmptyMatch: + return nil + case syntax.OpLiteral: + for _, r := range ast.Rune { + if ast.Flags&syntax.FoldCase > 0 { + next := syntax.Regexp{ + Op: syntax.OpCharClass, + Flags: ast.Flags & syntax.FoldCase, + Rune0: [2]rune{r, r}, + } + next.Rune = next.Rune0[0:2] + return c.c(&next) + } + seqs, err := utf8.NewSequences(r, r) + if err != nil { + return err + } + for _, seq := range seqs { + c.compileUtf8Ranges(seq) + } + } + case syntax.OpAnyChar: + next := syntax.Regexp{ + Op: syntax.OpCharClass, + Flags: ast.Flags & syntax.FoldCase, + Rune0: [2]rune{0, unicode.MaxRune}, + } + next.Rune = next.Rune0[:2] + return c.c(&next) + case syntax.OpAnyCharNotNL: + next := syntax.Regexp{ + Op: syntax.OpCharClass, + Flags: ast.Flags & syntax.FoldCase, + Rune: []rune{0, 0x09, 0x0B, unicode.MaxRune}, + } + return c.c(&next) + case syntax.OpCharClass: + return c.compileClass(ast) + case syntax.OpCapture: + return c.c(ast.Sub[0]) + case syntax.OpConcat: + for _, sub := range ast.Sub { + err := c.c(sub) + if err != nil { + return err + } + } + return nil + case syntax.OpAlternate: + if len(ast.Sub) == 0 { + return nil + } + jmpsToEnd := []uint{} + + // does not handle last entry + for i := 0; i < len(ast.Sub)-1; i++ { + sub := ast.Sub[i] + split := c.emptySplit() + j1 := c.top() + err := c.c(sub) + if err != nil { + return err + } + jmpsToEnd = append(jmpsToEnd, c.emptyJump()) + j2 := c.top() + c.setSplit(split, j1, j2) + } + // handle last entry + err := c.c(ast.Sub[len(ast.Sub)-1]) + if err != nil { + return err + } + end := uint(len(c.insts)) + for _, jmpToEnd := range jmpsToEnd { + c.setJump(jmpToEnd, end) + } + case syntax.OpQuest: + split := c.emptySplit() + j1 := c.top() + err := c.c(ast.Sub[0]) + if err != nil { + return err + } + j2 := c.top() + c.setSplit(split, j1, j2) + + case syntax.OpStar: + j1 := c.top() + split := c.emptySplit() + j2 := c.top() + err := c.c(ast.Sub[0]) + if err != nil { + return err + } + jmp := c.emptyJump() + j3 := uint(len(c.insts)) + + c.setJump(jmp, j1) + c.setSplit(split, j2, j3) + + case syntax.OpPlus: + j1 := c.top() + err := c.c(ast.Sub[0]) + if err != nil { + return err + } + split := c.emptySplit() + j2 := c.top() + c.setSplit(split, j1, j2) + + case syntax.OpRepeat: + if ast.Max == -1 { + for i := 0; i < ast.Min; i++ { + err := c.c(ast.Sub[0]) + if err != nil { + return err + } + } + next := syntax.Regexp{ + Op: syntax.OpStar, + Flags: ast.Flags, + Sub: ast.Sub, + Sub0: ast.Sub0, + Rune: ast.Rune, + Rune0: ast.Rune0, + } + return c.c(&next) + } + for i := 0; i < ast.Min; i++ { + err := c.c(ast.Sub[0]) + if err != nil { + return err + } + } + var splits, starts []uint + for i := ast.Min; i < ast.Max; i++ { + splits = append(splits, c.emptySplit()) + starts = append(starts, uint(len(c.insts))) + err := c.c(ast.Sub[0]) + if err != nil { + return err + } + } + end := uint(len(c.insts)) + for i := 0; i < len(splits); i++ { + c.setSplit(splits[i], starts[i], end) + } + + } + + return c.checkSize() +} + +func (c *compiler) checkSize() error { + if uint(len(c.insts)*instSize) > c.sizeLimit { + return ErrCompiledTooBig + } + return nil +} + +func (c *compiler) compileClass(ast *syntax.Regexp) error { + if len(ast.Rune) == 0 { + return nil + } + var jmps []uint + + // does not do last pair + for i := 0; i < len(ast.Rune)-2; i += 2 { + rstart := ast.Rune[i] + rend := ast.Rune[i+1] + + split := c.emptySplit() + j1 := c.top() + err := c.compileClassRange(rstart, rend) + if err != nil { + return err + } + jmps = append(jmps, c.emptyJump()) + j2 := c.top() + c.setSplit(split, j1, j2) + } + // handle last pair + rstart := ast.Rune[len(ast.Rune)-2] + rend := ast.Rune[len(ast.Rune)-1] + err := c.compileClassRange(rstart, rend) + if err != nil { + return err + } + end := c.top() + for _, jmp := range jmps { + c.setJump(jmp, end) + } + return nil +} + +func (c *compiler) compileClassRange(startR, endR rune) error { + seqs, err := utf8.NewSequences(startR, endR) + if err != nil { + return err + } + var jmps []uint + + // does not do last entry + for i := 0; i < len(seqs)-1; i++ { + seq := seqs[i] + split := c.emptySplit() + j1 := c.top() + c.compileUtf8Ranges(seq) + jmps = append(jmps, c.emptyJump()) + j2 := c.top() + c.setSplit(split, j1, j2) + } + // handle last entry + c.compileUtf8Ranges(seqs[len(seqs)-1]) + end := c.top() + for _, jmp := range jmps { + c.setJump(jmp, end) + } + + return nil +} + +func (c *compiler) compileUtf8Ranges(seq utf8.Sequence) { + for _, r := range seq { + c.insts = append(c.insts, &inst{ + op: OpRange, + rangeStart: r.Start, + rangeEnd: r.End, + }) + } +} + +func (c *compiler) emptySplit() uint { + c.insts = append(c.insts, &inst{ + op: OpSplit, + }) + return c.top() - 1 +} + +func (c *compiler) emptyJump() uint { + c.insts = append(c.insts, &inst{ + op: OpJmp, + }) + return c.top() - 1 +} + +func (c *compiler) setSplit(i, pc1, pc2 uint) { + split := c.insts[i] + split.splitA = pc1 + split.splitB = pc2 +} + +func (c *compiler) setJump(i, pc uint) { + jmp := c.insts[i] + jmp.to = pc +} + +func (c *compiler) top() uint { + return uint(len(c.insts)) +} diff --git a/vendor/github.com/couchbase/vellum/regexp/compile_test.go b/vendor/github.com/couchbase/vellum/regexp/compile_test.go new file mode 100644 index 0000000..b4d5008 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/regexp/compile_test.go @@ -0,0 +1,211 @@ +// Copyright (c) 2017 Couchbase, 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 regexp + +import ( + "reflect" + "regexp/syntax" + "testing" +) + +func TestCompiler(t *testing.T) { + + tests := []struct { + query string + wantInsts prog + wantErr error + }{ + { + query: "", + wantInsts: []*inst{ + &inst{op: OpMatch}, + }, + wantErr: nil, + }, + { + query: "^", + wantErr: ErrNoEmpty, + }, + { + query: `\b`, + wantErr: ErrNoWordBoundary, + }, + { + query: `.*?`, + wantErr: ErrNoLazy, + }, + { + query: `a`, + wantInsts: []*inst{ + &inst{op: OpRange, rangeStart: 'a', rangeEnd: 'a'}, + &inst{op: OpMatch}, + }, + }, + { + query: `[a-c]`, + wantInsts: []*inst{ + &inst{op: OpRange, rangeStart: 'a', rangeEnd: 'c'}, + &inst{op: OpMatch}, + }, + }, + { + query: `(a)`, + wantInsts: []*inst{ + &inst{op: OpRange, rangeStart: 'a', rangeEnd: 'a'}, + &inst{op: OpMatch}, + }, + }, + { + query: `a?`, + wantInsts: []*inst{ + &inst{op: OpSplit, splitA: 1, splitB: 2}, + &inst{op: OpRange, rangeStart: 'a', rangeEnd: 'a'}, + &inst{op: OpMatch}, + }, + }, + { + query: `a*`, + wantInsts: []*inst{ + &inst{op: OpSplit, splitA: 1, splitB: 3}, + &inst{op: OpRange, rangeStart: 'a', rangeEnd: 'a'}, + &inst{op: OpJmp, to: 0}, + &inst{op: OpMatch}, + }, + }, + { + query: `a+`, + wantInsts: []*inst{ + &inst{op: OpRange, rangeStart: 'a', rangeEnd: 'a'}, + &inst{op: OpSplit, splitA: 0, splitB: 2}, + &inst{op: OpMatch}, + }, + }, + { + query: `a{2,4}`, + wantInsts: []*inst{ + &inst{op: OpRange, rangeStart: 'a', rangeEnd: 'a'}, + &inst{op: OpRange, rangeStart: 'a', rangeEnd: 'a'}, + &inst{op: OpSplit, splitA: 3, splitB: 6}, + &inst{op: OpRange, rangeStart: 'a', rangeEnd: 'a'}, + &inst{op: OpSplit, splitA: 5, splitB: 6}, + &inst{op: OpRange, rangeStart: 'a', rangeEnd: 'a'}, + &inst{op: OpMatch}, + }, + }, + { + query: `a{3,}`, + wantInsts: []*inst{ + &inst{op: OpRange, rangeStart: 'a', rangeEnd: 'a'}, + &inst{op: OpRange, rangeStart: 'a', rangeEnd: 'a'}, + &inst{op: OpRange, rangeStart: 'a', rangeEnd: 'a'}, + &inst{op: OpSplit, splitA: 4, splitB: 6}, + &inst{op: OpRange, rangeStart: 'a', rangeEnd: 'a'}, + &inst{op: OpJmp, to: 3}, + &inst{op: OpMatch}, + }, + }, + { + query: `a+|b+`, + wantInsts: []*inst{ + &inst{op: OpSplit, splitA: 1, splitB: 4}, + &inst{op: OpRange, rangeStart: 'a', rangeEnd: 'a'}, + &inst{op: OpSplit, splitA: 1, splitB: 3}, + &inst{op: OpJmp, to: 6}, + &inst{op: OpRange, rangeStart: 'b', rangeEnd: 'b'}, + &inst{op: OpSplit, splitA: 4, splitB: 6}, + &inst{op: OpMatch}, + }, + }, + { + query: `a+b+`, + wantInsts: []*inst{ + &inst{op: OpRange, rangeStart: 'a', rangeEnd: 'a'}, + &inst{op: OpSplit, splitA: 0, splitB: 2}, + &inst{op: OpRange, rangeStart: 'b', rangeEnd: 'b'}, + &inst{op: OpSplit, splitA: 2, splitB: 4}, + &inst{op: OpMatch}, + }, + }, + { + query: `.`, + wantInsts: []*inst{ + &inst{op: OpSplit, splitA: 1, splitB: 3}, + &inst{op: OpRange, rangeStart: 0, rangeEnd: 0x09}, + &inst{op: OpJmp, to: 46}, // match ascii, less than 0x0a + &inst{op: OpSplit, splitA: 4, splitB: 6}, + &inst{op: OpRange, rangeStart: 0x0b, rangeEnd: 0x7f}, + &inst{op: OpJmp, to: 46}, // match rest ascii + &inst{op: OpSplit, splitA: 7, splitB: 10}, + &inst{op: OpRange, rangeStart: 0xc2, rangeEnd: 0xdf}, + &inst{op: OpRange, rangeStart: 0x80, rangeEnd: 0xbf}, + &inst{op: OpJmp, to: 46}, // match + &inst{op: OpSplit, splitA: 11, splitB: 15}, + &inst{op: OpRange, rangeStart: 0xe0, rangeEnd: 0xe0}, + &inst{op: OpRange, rangeStart: 0xa0, rangeEnd: 0xbf}, + &inst{op: OpRange, rangeStart: 0x80, rangeEnd: 0xbf}, + &inst{op: OpJmp, to: 46}, // match + &inst{op: OpSplit, splitA: 16, splitB: 20}, + &inst{op: OpRange, rangeStart: 0xe1, rangeEnd: 0xec}, + &inst{op: OpRange, rangeStart: 0x80, rangeEnd: 0xbf}, + &inst{op: OpRange, rangeStart: 0x80, rangeEnd: 0xbf}, + &inst{op: OpJmp, to: 46}, // match + &inst{op: OpSplit, splitA: 21, splitB: 25}, + &inst{op: OpRange, rangeStart: 0xed, rangeEnd: 0xed}, + &inst{op: OpRange, rangeStart: 0x80, rangeEnd: 0x9f}, + &inst{op: OpRange, rangeStart: 0x80, rangeEnd: 0xbf}, + &inst{op: OpJmp, to: 46}, // match + &inst{op: OpSplit, splitA: 26, splitB: 30}, + &inst{op: OpRange, rangeStart: 0xee, rangeEnd: 0xef}, + &inst{op: OpRange, rangeStart: 0x80, rangeEnd: 0xbf}, + &inst{op: OpRange, rangeStart: 0x80, rangeEnd: 0xbf}, + &inst{op: OpJmp, to: 46}, // match + &inst{op: OpSplit, splitA: 31, splitB: 36}, + &inst{op: OpRange, rangeStart: 0xf0, rangeEnd: 0xf0}, + &inst{op: OpRange, rangeStart: 0x90, rangeEnd: 0xbf}, + &inst{op: OpRange, rangeStart: 0x80, rangeEnd: 0xbf}, + &inst{op: OpRange, rangeStart: 0x80, rangeEnd: 0xbf}, + &inst{op: OpJmp, to: 46}, // match + &inst{op: OpSplit, splitA: 37, splitB: 42}, + &inst{op: OpRange, rangeStart: 0xf1, rangeEnd: 0xf3}, + &inst{op: OpRange, rangeStart: 0x80, rangeEnd: 0xbf}, + &inst{op: OpRange, rangeStart: 0x80, rangeEnd: 0xbf}, + &inst{op: OpRange, rangeStart: 0x80, rangeEnd: 0xbf}, + &inst{op: OpJmp, to: 46}, // match + &inst{op: OpRange, rangeStart: 0xf4, rangeEnd: 0xf4}, + &inst{op: OpRange, rangeStart: 0x80, rangeEnd: 0x8f}, + &inst{op: OpRange, rangeStart: 0x80, rangeEnd: 0xbf}, + &inst{op: OpRange, rangeStart: 0x80, rangeEnd: 0xbf}, + &inst{op: OpMatch}, + }, + }, + } + + for _, test := range tests { + t.Run(test.query, func(t *testing.T) { + p, err := syntax.Parse(test.query, syntax.Perl) + if err != nil { + t.Fatalf("error parsing regexp: %v", err) + } + c := newCompiler(10000) + gotInsts, gotErr := c.compile(p) + if !reflect.DeepEqual(test.wantErr, gotErr) { + t.Errorf("expected error: %v, got error: %v", test.wantErr, gotErr) + } + if !reflect.DeepEqual(test.wantInsts, gotInsts) { + t.Errorf("expected insts: %v, got insts:%v", test.wantInsts, gotInsts) + } + }) + } +} diff --git a/vendor/github.com/couchbase/vellum/regexp/dfa.go b/vendor/github.com/couchbase/vellum/regexp/dfa.go new file mode 100644 index 0000000..ac38ec3 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/regexp/dfa.go @@ -0,0 +1,172 @@ +// Copyright (c) 2017 Couchbase, 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 regexp + +import "fmt" + +// StateLimit is the maximum number of states allowed +const StateLimit = 10000 + +// ErrTooManyStates is returned if you attempt to build a Levenshtein +// automaton which requries too many states. +var ErrTooManyStates = fmt.Errorf("dfa contains more than %d states", + StateLimit) + +type dfaBuilder struct { + dfa *dfa + cache map[string]int +} + +func newDfaBuilder(insts prog) *dfaBuilder { + d := &dfaBuilder{ + dfa: &dfa{ + insts: insts, + states: make([]*state, 0, 16), + }, + cache: make(map[string]int, 1024), + } + // add 0 state that is invalid + d.dfa.states = append(d.dfa.states, &state{ + next: make([]int, 256), + match: false, + }) + return d +} + +func (d *dfaBuilder) build() (*dfa, error) { + cur := newSparseSet(uint(len(d.dfa.insts))) + next := newSparseSet(uint(len(d.dfa.insts))) + + d.dfa.add(cur, 0) + states := intStack{d.cachedState(cur)} + seen := make(map[int]struct{}) + var s int + states, s = states.Pop() + for s != 0 { + for b := 0; b < 256; b++ { + ns := d.runState(cur, next, s, byte(b)) + if ns != 0 { + if _, ok := seen[ns]; !ok { + seen[ns] = struct{}{} + states = states.Push(ns) + } + } + if len(d.dfa.states) > StateLimit { + return nil, ErrTooManyStates + } + } + states, s = states.Pop() + } + return d.dfa, nil +} + +func (d *dfaBuilder) runState(cur, next *sparseSet, state int, b byte) int { + cur.Clear() + for _, ip := range d.dfa.states[state].insts { + cur.Add(ip) + } + d.dfa.run(cur, next, b) + nextState := d.cachedState(next) + d.dfa.states[state].next[b] = nextState + return nextState +} + +func (d *dfaBuilder) cachedState(set *sparseSet) int { + var insts []uint + var isMatch bool + for i := uint(0); i < uint(set.Len()); i++ { + ip := set.Get(i) + switch d.dfa.insts[ip].op { + case OpRange: + insts = append(insts, ip) + case OpMatch: + isMatch = true + insts = append(insts, ip) + } + } + if len(insts) == 0 { + return 0 + } + k := fmt.Sprintf("%v", insts) + v, ok := d.cache[k] + if ok { + return v + } + d.dfa.states = append(d.dfa.states, &state{ + insts: insts, + next: make([]int, 256), + match: isMatch, + }) + newV := len(d.dfa.states) - 1 + d.cache[k] = newV + return newV +} + +type dfa struct { + insts prog + states []*state +} + +func (d *dfa) add(set *sparseSet, ip uint) { + if set.Contains(ip) { + return + } + set.Add(ip) + switch d.insts[ip].op { + case OpJmp: + d.add(set, d.insts[ip].to) + case OpSplit: + d.add(set, d.insts[ip].splitA) + d.add(set, d.insts[ip].splitB) + } +} + +func (d *dfa) run(from, to *sparseSet, b byte) bool { + to.Clear() + var isMatch bool + for i := uint(0); i < uint(from.Len()); i++ { + ip := from.Get(i) + switch d.insts[ip].op { + case OpMatch: + isMatch = true + case OpRange: + if d.insts[ip].rangeStart <= b && + b <= d.insts[ip].rangeEnd { + d.add(to, ip+1) + } + } + } + return isMatch +} + +type state struct { + insts []uint + next []int + match bool +} + +type intStack []int + +func (s intStack) Push(v int) intStack { + return append(s, v) +} + +func (s intStack) Pop() (intStack, int) { + l := len(s) + if l < 1 { + return s, 0 + } + return s[:l-1], s[l-1] +} diff --git a/vendor/github.com/couchbase/vellum/regexp/inst.go b/vendor/github.com/couchbase/vellum/regexp/inst.go new file mode 100644 index 0000000..61cbf2f --- /dev/null +++ b/vendor/github.com/couchbase/vellum/regexp/inst.go @@ -0,0 +1,62 @@ +// Copyright (c) 2017 Couchbase, 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 regexp + +import "fmt" + +// instOp represents a instruction operation +type instOp int + +// the enumeration of operations +const ( + OpMatch instOp = iota + OpJmp + OpSplit + OpRange +) + +// instSize is the approxmiate size of the an inst struct in bytes +const instSize = 40 + +type inst struct { + op instOp + to uint + splitA uint + splitB uint + rangeStart byte + rangeEnd byte +} + +func (i *inst) String() string { + switch i.op { + case OpJmp: + return fmt.Sprintf("JMP: %d", i.to) + case OpSplit: + return fmt.Sprintf("SPLIT: %d - %d", i.splitA, i.splitB) + case OpRange: + return fmt.Sprintf("RANGE: %x - %x", i.rangeStart, i.rangeEnd) + } + return "MATCH" +} + +type prog []*inst + +func (p prog) String() string { + rv := "\n" + for i, pi := range p { + rv += fmt.Sprintf("%d %v\n", i, pi) + } + return rv +} diff --git a/vendor/github.com/couchbase/vellum/regexp/regexp.go b/vendor/github.com/couchbase/vellum/regexp/regexp.go new file mode 100644 index 0000000..ed0e782 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/regexp/regexp.go @@ -0,0 +1,113 @@ +// Copyright (c) 2017 Couchbase, 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 regexp + +import ( + "fmt" + "regexp/syntax" +) + +// ErrNoEmpty returned when "zero width assertions" are used +var ErrNoEmpty = fmt.Errorf("zero width assertions not allowed") + +// ErrNoWordBoundary returned when word boundaries are used +var ErrNoWordBoundary = fmt.Errorf("word boundaries are not allowed") + +// ErrNoBytes returned when byte literals are used +var ErrNoBytes = fmt.Errorf("byte literals are not allowed") + +// ErrNoLazy returned when lazy quantifiers are used +var ErrNoLazy = fmt.Errorf("lazy quantifiers are not allowed") + +// ErrCompiledTooBig returned when regular expression parses into +// too many instructions +var ErrCompiledTooBig = fmt.Errorf("too many instructions") + +// Regexp implements the vellum.Automaton interface for matcing a user +// specified regular expression. +type Regexp struct { + orig string + dfa *dfa +} + +// NewRegexp creates a new Regular Expression automaton with the specified +// expression. By default it is limited to approximately 10MB for the +// compiled finite state automaton. If this size is exceeded, +// ErrCompiledTooBig will be returned. +func New(expr string) (*Regexp, error) { + return NewWithLimit(expr, 10*(1<<20)) +} + +// NewRegexpWithLimit creates a new Regular Expression automaton with +// the specified expression. The size of the compiled finite state +// automaton exceeds the user specified size, ErrCompiledTooBig will be +// returned. +func NewWithLimit(expr string, size uint) (*Regexp, error) { + parsed, err := syntax.Parse(expr, syntax.Perl) + if err != nil { + return nil, err + } + compiler := newCompiler(size) + insts, err := compiler.compile(parsed) + if err != nil { + return nil, err + } + dfaBuilder := newDfaBuilder(insts) + dfa, err := dfaBuilder.build() + if err != nil { + return nil, err + } + return &Regexp{ + orig: expr, + dfa: dfa, + }, nil +} + +// Start returns the start state of this automaton. +func (r *Regexp) Start() int { + return 1 +} + +// IsMatch returns if the specified state is a matching state. +func (r *Regexp) IsMatch(s int) bool { + if s < len(r.dfa.states) { + return r.dfa.states[s].match + } + return false +} + +// CanMatch returns if the specified state can ever transition to a matching +// state. +func (r *Regexp) CanMatch(s int) bool { + if s < len(r.dfa.states) && s > 0 { + return true + } + return false +} + +// WillAlwaysMatch returns if the specified state will always end in a +// matching state. +func (r *Regexp) WillAlwaysMatch(int) bool { + return false +} + +// Accept returns the new state, resulting from the transite byte b +// when currently in the state s. +func (r *Regexp) Accept(s int, b byte) int { + if s < len(r.dfa.states) { + return r.dfa.states[s].next[b] + } + return 0 +} diff --git a/vendor/github.com/couchbase/vellum/regexp/regexp_test.go b/vendor/github.com/couchbase/vellum/regexp/regexp_test.go new file mode 100644 index 0000000..527479b --- /dev/null +++ b/vendor/github.com/couchbase/vellum/regexp/regexp_test.go @@ -0,0 +1,191 @@ +// Copyright (c) 2017 Couchbase, 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 regexp + +import ( + "fmt" + "testing" +) + +func TestRegexp(t *testing.T) { + tests := []struct { + query string + seq []byte + isMatch bool + canMatch bool + }{ + { + query: ``, + seq: []byte{}, + isMatch: true, + canMatch: true, + }, + // test simple literal + { + query: `a`, + seq: []byte{'a'}, + isMatch: true, + canMatch: true, + }, + { + query: `a`, + seq: []byte{}, + isMatch: false, + canMatch: true, + }, + { + query: `a`, + seq: []byte{'a', 'b'}, + isMatch: false, + canMatch: false, + }, + // test actual pattern + { + query: `wat.r`, + seq: []byte{'x'}, + isMatch: false, + canMatch: false, + }, + { + query: `wat.r`, + seq: []byte{'w', 'a', 't'}, + isMatch: false, + canMatch: true, + }, + { + query: `wat.r`, + seq: []byte{'w', 'a', 't', 'e'}, + isMatch: false, + canMatch: true, + }, + { + query: `wat.r`, + seq: []byte{'w', 'a', 't', 'e', 'r'}, + isMatch: true, + canMatch: true, + }, + { + query: `wat.r`, + seq: []byte{'w', 'a', 't', 'e', 'r', 's'}, + isMatch: false, + canMatch: false, + }, + // test alternation + { + query: `a+|b+`, + seq: []byte{}, + isMatch: false, + canMatch: true, + }, + { + query: `a+|b+`, + seq: []byte{'a'}, + isMatch: true, + canMatch: true, + }, + { + query: `a+|b+`, + seq: []byte{'b'}, + isMatch: true, + canMatch: true, + }, + { + query: `a+|b+`, + seq: []byte{'a', 'a'}, + isMatch: true, + canMatch: true, + }, + { + query: `a+|b+`, + seq: []byte{'b', 'b'}, + isMatch: true, + canMatch: true, + }, + { + query: `a+|b+`, + seq: []byte{'a', 'b'}, + isMatch: false, + canMatch: false, + }, + { + query: `a+|b+`, + seq: []byte{'b', 'a'}, + isMatch: false, + canMatch: false, + }, + // test others + { + query: `[a-z]?[1-9]*`, + seq: []byte{}, + isMatch: true, + canMatch: true, + }, + { + query: `[a-z]?[1-9]*`, + seq: []byte{'a'}, + isMatch: true, + canMatch: true, + }, + { + query: `[a-z]?[1-9]*`, + seq: []byte{'a', '1'}, + isMatch: true, + canMatch: true, + }, + { + query: `[a-z]?[1-9]*`, + seq: []byte{'a', '1', '2'}, + isMatch: true, + canMatch: true, + }, + { + query: `[a-z]?[1-9]*`, + seq: []byte{'a', '1', '2', 'z'}, + isMatch: false, + canMatch: false, + }, + { + query: `[a-z]?[1-9]*`, + seq: []byte{'a', 'b'}, + isMatch: false, + canMatch: false, + }, + } + + for _, test := range tests { + t.Run(fmt.Sprintf("%s - %v", test.query, test.seq), func(t *testing.T) { + r, err := New(test.query) + if err != nil { + t.Fatal(err) + } + + s := r.Start() + for _, b := range test.seq { + s = r.Accept(s, b) + } + + isMatch := r.IsMatch(s) + if isMatch != test.isMatch { + t.Errorf("expected isMatch %t, got %t", test.isMatch, isMatch) + } + + canMatch := r.CanMatch(s) + if canMatch != test.canMatch { + t.Errorf("expectec canMatch %t, got %t", test.canMatch, canMatch) + } + }) + } + +} diff --git a/vendor/github.com/couchbase/vellum/regexp/sparse.go b/vendor/github.com/couchbase/vellum/regexp/sparse.go new file mode 100644 index 0000000..7afbfce --- /dev/null +++ b/vendor/github.com/couchbase/vellum/regexp/sparse.go @@ -0,0 +1,54 @@ +// Copyright (c) 2017 Couchbase, 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 regexp + +type sparseSet struct { + dense []uint + sparse []uint + size uint +} + +func newSparseSet(size uint) *sparseSet { + return &sparseSet{ + dense: make([]uint, size), + sparse: make([]uint, size), + size: 0, + } +} + +func (s *sparseSet) Len() int { + return int(s.size) +} + +func (s *sparseSet) Add(ip uint) uint { + i := s.size + s.dense[i] = ip + s.sparse[ip] = i + s.size++ + return i +} + +func (s *sparseSet) Get(i uint) uint { + return s.dense[i] +} + +func (s *sparseSet) Contains(ip uint) bool { + i := s.sparse[ip] + return i < s.size && s.dense[i] == ip +} + +func (s *sparseSet) Clear() { + s.size = 0 +} diff --git a/vendor/github.com/couchbase/vellum/regexp/sparse_test.go b/vendor/github.com/couchbase/vellum/regexp/sparse_test.go new file mode 100644 index 0000000..b8184aa --- /dev/null +++ b/vendor/github.com/couchbase/vellum/regexp/sparse_test.go @@ -0,0 +1,44 @@ +// Copyright (c) 2017 Couchbase, 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 regexp + +import "testing" + +func TestSparse(t *testing.T) { + + s := newSparseSet(10) + if s.Contains(0) { + t.Errorf("expected not to contain 0") + } + + s.Add(3) + if !s.Contains(3) { + t.Errorf("expected to contains 3, did not") + } + + if s.Len() != 1 { + t.Errorf("expected len 1, got %d", s.Len()) + } + + if s.Get(0) != 3 { + t.Errorf("expected 10, got %d", s.Get(0)) + } + + s.Clear() + + if s.Len() != 0 { + t.Errorf("expected len 0, got %d", s.Len()) + } +} diff --git a/vendor/github.com/couchbase/vellum/registry.go b/vendor/github.com/couchbase/vellum/registry.go new file mode 100644 index 0000000..3721a7c --- /dev/null +++ b/vendor/github.com/couchbase/vellum/registry.go @@ -0,0 +1,116 @@ +// Copyright (c) 2017 Couchbase, 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 vellum + +import ( + "hash" + "hash/fnv" +) + +type registryCell struct { + addr int + node *builderNode +} + +type registry struct { + table []registryCell + tableSize uint + mruSize uint + hasher hash.Hash64 +} + +func newRegistry(tableSize, mruSize int) *registry { + nsize := tableSize * mruSize + rv := ®istry{ + table: make([]registryCell, nsize), + tableSize: uint(tableSize), + mruSize: uint(mruSize), + hasher: fnv.New64a(), + } + return rv +} + +func (r *registry) Reset() { + for i := 0; i < len(r.table); i++ { + r.table[i] = registryCell{} + } + r.hasher.Reset() +} + +func (r *registry) entry(node *builderNode) (bool, int, *registryCell) { + if len(r.table) == 0 { + return false, 0, nil + } + bucket := r.hash(node) + start := r.mruSize * uint(bucket) + end := start + r.mruSize + rc := registryCache(r.table[start:end]) + return rc.entry(node) +} + +const fnvPrime = 1099511628211 + +func (r *registry) hash(b *builderNode) int { + var final uint64 + if b.final { + final = 1 + } + + var h uint64 = 14695981039346656037 + h = (h ^ final) * fnvPrime + h = (h ^ b.finalOutput) * fnvPrime + for _, t := range b.trans { + h = (h ^ uint64(t.in)) * fnvPrime + h = (h ^ t.out) * fnvPrime + h = (h ^ uint64(t.addr)) * fnvPrime + } + return int(h % uint64(r.tableSize)) +} + +type registryCache []registryCell + +func (r registryCache) entry(node *builderNode) (bool, int, *registryCell) { + if len(r) == 1 { + if r[0].node != nil && r[0].node.equiv(node) { + return true, r[0].addr, nil + } + r[0].node = node + return false, 0, &r[0] + } + for i := range r { + if r[i].node != nil && r[i].node.equiv(node) { + addr := r[i].addr + r.promote(i) + return true, addr, nil + } + } + // no match + last := len(r) - 1 + r[last].node = node // discard LRU + r.promote(last) + return false, 0, &r[0] + +} + +func (r registryCache) promote(i int) { + for i > 0 { + r.swap(i-1, i) + i-- + } +} + +func (r registryCache) swap(i, j int) { + r[i], r[j] = r[j], r[i] +} diff --git a/vendor/github.com/couchbase/vellum/registry_test.go b/vendor/github.com/couchbase/vellum/registry_test.go new file mode 100644 index 0000000..d4511ee --- /dev/null +++ b/vendor/github.com/couchbase/vellum/registry_test.go @@ -0,0 +1,58 @@ +// Copyright (c) 2017 Couchbase, 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 vellum + +import "testing" + +// FIXME add tests for MRU + +func TestRegistry(t *testing.T) { + r := newRegistry(10, 1) + + n1 := &builderNode{ + trans: []*transition{ + { + in: 'a', + addr: 1, + }, + { + in: 'b', + addr: 2, + }, + { + in: 'c', + addr: 3, + }, + }, + } + + // first look, doesn't exist + found, _, cell := r.entry(n1) + if found { + t.Errorf("expected empty registry to not have equivalent") + } + + cell.addr = 276 + + // second look, does + var nowAddr int + found, nowAddr, _ = r.entry(n1) + if !found { + t.Errorf("expected to find equivalent after registering it") + } + if nowAddr != 276 { + t.Errorf("expected to get addr 276, got %d", nowAddr) + } +} diff --git a/vendor/github.com/couchbase/vellum/transducer.go b/vendor/github.com/couchbase/vellum/transducer.go new file mode 100644 index 0000000..753c422 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/transducer.go @@ -0,0 +1,55 @@ +// Copyright (c) 2017 Couchbase, 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 vellum + +// Transducer represents the general contract of a byte-based finite transducer +type Transducer interface { + + // all transducers are also automatons + Automaton + + // IsMatchWithValue returns true if and only if the state is a match + // additionally it returns a states final value (if any) + IsMatchWithVal(int) (bool, uint64) + + // Accept returns the next state given the input to the specified state + // additionally it returns the value associated with the transition + AcceptWithVal(int, byte) (int, uint64) +} + +// TransducerGet implements an generic Get() method which works +// on any implementation of Transducer +// The caller MUST check the boolean return value for a match. +// Zero is a valid value regardless of match status, +// and if it is NOT a match, the value collected so far is returned. +func TransducerGet(t Transducer, k []byte) (bool, uint64) { + var total uint64 + i := 0 + curr := t.Start() + for t.CanMatch(curr) && i < len(k) { + var transVal uint64 + curr, transVal = t.AcceptWithVal(curr, k[i]) + if curr == noneAddr { + break + } + total += transVal + i++ + } + if i != len(k) { + return false, total + } + match, finalVal := t.IsMatchWithVal(curr) + return match, total + finalVal +} diff --git a/vendor/github.com/couchbase/vellum/utf8/utf8.go b/vendor/github.com/couchbase/vellum/utf8/utf8.go new file mode 100644 index 0000000..47dbe9d --- /dev/null +++ b/vendor/github.com/couchbase/vellum/utf8/utf8.go @@ -0,0 +1,246 @@ +// Copyright (c) 2017 Couchbase, 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 utf8 + +import ( + "fmt" + "unicode/utf8" +) + +// Sequences is a collection of Sequence +type Sequences []Sequence + +// NewSequences constructs a collection of Sequence which describe the +// byte ranges covered between the start and end runes. +func NewSequences(start, end rune) (Sequences, error) { + var rv Sequences + + var rangeStack rangeStack + rangeStack = rangeStack.Push(&scalarRange{start, end}) + + rangeStack, r := rangeStack.Pop() +TOP: + for r != nil { + INNER: + for { + r1, r2 := r.split() + if r1 != nil { + rangeStack = rangeStack.Push(&scalarRange{r2.start, r2.end}) + r.start = r1.start + r.end = r1.end + continue INNER + } + if !r.valid() { + rangeStack, r = rangeStack.Pop() + continue TOP + } + for i := 1; i < utf8.UTFMax; i++ { + max := maxScalarValue(i) + if r.start <= max && max < r.end { + rangeStack = rangeStack.Push(&scalarRange{max + 1, r.end}) + r.end = max + continue INNER + } + } + asciiRange := r.ascii() + if asciiRange != nil { + rv = append(rv, Sequence{ + asciiRange, + }) + rangeStack, r = rangeStack.Pop() + continue TOP + } + for i := uint(1); i < utf8.UTFMax; i++ { + m := rune((1 << (6 * i)) - 1) + if (r.start & ^m) != (r.end & ^m) { + if (r.start & m) != 0 { + rangeStack = rangeStack.Push(&scalarRange{(r.start | m) + 1, r.end}) + r.end = r.start | m + continue INNER + } + if (r.end & m) != m { + rangeStack = rangeStack.Push(&scalarRange{r.end & ^m, r.end}) + r.end = (r.end & ^m) - 1 + continue INNER + } + } + } + start := make([]byte, utf8.UTFMax) + end := make([]byte, utf8.UTFMax) + n, m := r.encode(start, end) + seq, err := SequenceFromEncodedRange(start[0:n], end[0:m]) + if err != nil { + return nil, err + } + rv = append(rv, seq) + rangeStack, r = rangeStack.Pop() + continue TOP + } + } + + return rv, nil +} + +// Sequence is a collection of *Range +type Sequence []*Range + +// SequenceFromEncodedRange creates sequence from the encoded bytes +func SequenceFromEncodedRange(start, end []byte) (Sequence, error) { + if len(start) != len(end) { + return nil, fmt.Errorf("byte slices must be the same length") + } + switch len(start) { + case 2: + return Sequence{ + &Range{start[0], end[0]}, + &Range{start[1], end[1]}, + }, nil + case 3: + return Sequence{ + &Range{start[0], end[0]}, + &Range{start[1], end[1]}, + &Range{start[2], end[2]}, + }, nil + case 4: + return Sequence{ + &Range{start[0], end[0]}, + &Range{start[1], end[1]}, + &Range{start[2], end[2]}, + &Range{start[3], end[3]}, + }, nil + } + + return nil, fmt.Errorf("invalid encoded byte length") +} + +// Matches checks to see if the provided byte slice matches the Sequence +func (u Sequence) Matches(bytes []byte) bool { + if len(bytes) < len(u) { + return false + } + for i := 0; i < len(u); i++ { + if !u[i].matches(bytes[i]) { + return false + } + } + return true +} + +func (u Sequence) String() string { + switch len(u) { + case 1: + return fmt.Sprintf("%v", u[0]) + case 2: + return fmt.Sprintf("%v%v", u[0], u[1]) + case 3: + return fmt.Sprintf("%v%v%v", u[0], u[1], u[2]) + case 4: + return fmt.Sprintf("%v%v%v%v", u[0], u[1], u[2], u[3]) + default: + return fmt.Sprintf("invalid utf8 sequence") + } +} + +// Range describes a single range of byte values +type Range struct { + Start byte + End byte +} + +func (u Range) matches(b byte) bool { + if u.Start <= b && b <= u.End { + return true + } + return false +} + +func (u Range) String() string { + if u.Start == u.End { + return fmt.Sprintf("[%X]", u.Start) + } + return fmt.Sprintf("[%X-%X]", u.Start, u.End) +} + +type scalarRange struct { + start rune + end rune +} + +func (s *scalarRange) String() string { + return fmt.Sprintf("ScalarRange(%d,%d)", s.start, s.end) +} + +// split this scalar range if it overlaps with a surrogate codepoint +func (s *scalarRange) split() (*scalarRange, *scalarRange) { + if s.start < 0xe000 && s.end > 0xd7ff { + return &scalarRange{ + start: s.start, + end: 0xd7ff, + }, + &scalarRange{ + start: 0xe000, + end: s.end, + } + } + return nil, nil +} + +func (s *scalarRange) valid() bool { + return s.start <= s.end +} + +func (s *scalarRange) ascii() *Range { + if s.valid() && s.end <= 0x7f { + return &Range{ + Start: byte(s.start), + End: byte(s.end), + } + } + return nil +} + +// start and end MUST have capacity for utf8.UTFMax bytes +func (s *scalarRange) encode(start, end []byte) (int, int) { + n := utf8.EncodeRune(start, s.start) + m := utf8.EncodeRune(end, s.end) + return n, m +} + +type rangeStack []*scalarRange + +func (s rangeStack) Push(v *scalarRange) rangeStack { + return append(s, v) +} + +func (s rangeStack) Pop() (rangeStack, *scalarRange) { + l := len(s) + if l < 1 { + return s, nil + } + return s[:l-1], s[l-1] +} + +func maxScalarValue(nbytes int) rune { + switch nbytes { + case 1: + return 0x007f + case 2: + return 0x07FF + case 3: + return 0xFFFF + default: + return 0x10FFFF + } +} diff --git a/vendor/github.com/couchbase/vellum/utf8/utf8_test.go b/vendor/github.com/couchbase/vellum/utf8/utf8_test.go new file mode 100644 index 0000000..b1a02a2 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/utf8/utf8_test.go @@ -0,0 +1,88 @@ +// Copyright (c) 2017 Couchbase, 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 utf8 + +import ( + "fmt" + "reflect" + "testing" + "unicode/utf8" +) + +func TestUtf8Sequences(t *testing.T) { + + want := Sequences{ + Sequence{ + &Range{0x0, 0x7f}, + }, + Sequence{ + &Range{0xc2, 0xdf}, + &Range{0x80, 0xbf}, + }, + Sequence{ + &Range{0xe0, 0xe0}, + &Range{0xa0, 0xbf}, + &Range{0x80, 0xbf}, + }, + Sequence{ + &Range{0xe1, 0xec}, + &Range{0x80, 0xbf}, + &Range{0x80, 0xbf}, + }, + Sequence{ + &Range{0xed, 0xed}, + &Range{0x80, 0x9f}, + &Range{0x80, 0xbf}, + }, + Sequence{ + &Range{0xee, 0xef}, + &Range{0x80, 0xbf}, + &Range{0x80, 0xbf}, + }, + } + + got, err := NewSequences(0, 0xffff) + if err != nil { + t.Fatal(err) + } + if !reflect.DeepEqual(want, got) { + t.Errorf("wanted: %v, got %v", want, got) + } +} + +func TestCodepointsNoSurrogates(t *testing.T) { + neverAcceptsSurrogateCodepoints(0x0, 0xFFFF) + neverAcceptsSurrogateCodepoints(0x0, 0x10FFFF) + neverAcceptsSurrogateCodepoints(0x0, 0x10FFFE) + neverAcceptsSurrogateCodepoints(0x80, 0x10FFFF) + neverAcceptsSurrogateCodepoints(0xD7FF, 0xE000) +} + +func neverAcceptsSurrogateCodepoints(start, end rune) error { + var buf = make([]byte, utf8.UTFMax) + sequences, err := NewSequences(start, end) + if err != nil { + return err + } + for i := start; i < end; i++ { + n := utf8.EncodeRune(buf, i) + for _, seq := range sequences { + if seq.Matches(buf[:n]) { + return fmt.Errorf("utf8 seq: %v matches surrogate %d", seq, i) + } + } + } + return nil +} diff --git a/vendor/github.com/couchbase/vellum/vellum.go b/vendor/github.com/couchbase/vellum/vellum.go new file mode 100644 index 0000000..b2537b3 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vellum.go @@ -0,0 +1,111 @@ +// Copyright (c) 2017 Couchbase, 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 vellum is a library for building, serializing and executing an FST (finite +state transducer). + +There are two distinct phases, building an FST and using it. + +When building an FST, you insert keys ([]byte) and their associated value +(uint64). Insert operations MUST be done in lexicographic order. While +building the FST, data is streamed to an underlying Writer. At the conclusion +of building, you MUST call Close() on the builder. + +After completion of the build phase, you can either Open() the FST if you +serialized it to disk. Alternatively, if you already have the bytes in +memory, you can use Load(). By default, Open() will use mmap to avoid loading +the entire file into memory. + +Once the FST is ready, you can use the Contains() method to see if a keys is +in the FST. You can use the Get() method to see if a key is in the FST and +retrieve it's associated value. And, you can use the Iterator method to +enumerate key/value pairs within a specified range. + +*/ +package vellum + +import ( + "errors" + "io" +) + +// ErrOutOfOrder is returned when values are not inserted in +// lexicographic order. +var ErrOutOfOrder = errors.New("values not inserted in lexicographic order") + +// ErrIteratorDone is returned by Iterator/Next/Seek methods when the +// Current() value pointed to by the iterator is greater than the last +// key in this FST, or outside the configured startKeyInclusive/endKeyExclusive +// range of the Iterator. +var ErrIteratorDone = errors.New("iterator-done") + +// BuilderOpts is a structure to let advanced users customize the behavior +// of the builder and some aspects of the generated FST. +type BuilderOpts struct { + Encoder int + RegistryTableSize int + RegistryMRUSize int +} + +// New returns a new Builder which will stream out the +// underlying representation to the provided Writer as the set is built. +func New(w io.Writer, opts *BuilderOpts) (*Builder, error) { + return newBuilder(w, opts) +} + +// Open loads the FST stored in the provided path +func Open(path string) (*FST, error) { + return open(path) +} + +// Load will return the FST represented by the provided byte slice. +func Load(data []byte) (*FST, error) { + return new(data, nil) +} + +// Merge will iterate through the provided Iterators, merge duplicate keys +// with the provided MergeFunc, and build a new FST to the provided Writer. +func Merge(w io.Writer, opts *BuilderOpts, itrs []Iterator, f MergeFunc) error { + builder, err := New(w, opts) + if err != nil { + return err + } + + itr, err := NewMergeIterator(itrs, f) + for err == nil { + k, v := itr.Current() + err = builder.Insert(k, v) + if err != nil { + return err + } + err = itr.Next() + } + + if err != nil && err != ErrIteratorDone { + return err + } + + err = itr.Close() + if err != nil { + return err + } + + err = builder.Close() + if err != nil { + return err + } + + return nil +} diff --git a/vendor/github.com/couchbase/vellum/vellum_mmap.go b/vendor/github.com/couchbase/vellum/vellum_mmap.go new file mode 100644 index 0000000..5acd2f4 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vellum_mmap.go @@ -0,0 +1,60 @@ +// Copyright (c) 2017 Couchbase, 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. + +// +build !nommap + +package vellum + +import ( + "os" + + mmap "github.com/edsrzf/mmap-go" +) + +type mmapWrapper struct { + f *os.File + mm mmap.MMap +} + +func (m *mmapWrapper) Close() (err error) { + if m.mm != nil { + err = m.mm.Unmap() + } + // try to close file even if unmap failed + if m.f != nil { + err2 := m.f.Close() + if err == nil { + // try to return first error + err = err2 + } + } + return +} + +func open(path string) (*FST, error) { + f, err := os.Open(path) + if err != nil { + return nil, err + } + mm, err := mmap.Map(f, mmap.RDONLY, 0) + if err != nil { + // mmap failed, try to close the file + _ = f.Close() + return nil, err + } + return new(mm, &mmapWrapper{ + f: f, + mm: mm, + }) +} diff --git a/vendor/github.com/couchbase/vellum/vellum_nommap.go b/vendor/github.com/couchbase/vellum/vellum_nommap.go new file mode 100644 index 0000000..e985272 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vellum_nommap.go @@ -0,0 +1,27 @@ +// Copyright (c) 2017 Couchbase, 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. + +// +build nommap + +package vellum + +import "io/ioutil" + +func open(path string) (*FST, error) { + data, err := ioutil.ReadFile(string) + if err != nil { + return nil, err + } + return new(data, nil) +} diff --git a/vendor/github.com/couchbase/vellum/vellum_test.go b/vendor/github.com/couchbase/vellum/vellum_test.go new file mode 100644 index 0000000..70ab6d7 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vellum_test.go @@ -0,0 +1,586 @@ +// Copyright (c) 2017 Couchbase, 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 vellum + +import ( + "io/ioutil" + "os" + "reflect" + "testing" +) + +func TestRoundTripSimple(t *testing.T) { + f, err := ioutil.TempFile("", "vellum") + if err != nil { + t.Fatal(err) + } + defer func() { + err = f.Close() + if err != nil { + t.Fatal(err) + } + }() + defer func() { + err = os.Remove(f.Name()) + if err != nil { + t.Fatal(err) + } + }() + + b, err := New(f, nil) + if err != nil { + t.Fatalf("error creating builder: %v", err) + } + + err = insertStringMap(b, smallSample) + if err != nil { + t.Fatalf("error building: %v", err) + } + + err = b.Close() + if err != nil { + t.Fatalf("err closing: %v", err) + } + + fst, err := Open(f.Name()) + if err != nil { + t.Fatalf("error loading set: %v", err) + } + defer func() { + err = fst.Close() + if err != nil { + t.Fatal(err) + } + }() + + // first check all the expected values + got := map[string]uint64{} + itr, err := fst.Iterator(nil, nil) + for err == nil { + key, val := itr.Current() + got[string(key)] = val + err = itr.Next() + } + if err != ErrIteratorDone { + t.Errorf("iterator error: %v", err) + } + if !reflect.DeepEqual(smallSample, got) { + t.Errorf("expected %v, got: %v", smallSample, got) + } + + // some additional tests for items that should not exist + if ok, _ := fst.Contains([]byte("mo")); ok { + t.Errorf("expected to not contain mo, but did") + } + + if ok, _ := fst.Contains([]byte("monr")); ok { + t.Errorf("expected to not contain monr, but did") + } + + if ok, _ := fst.Contains([]byte("thur")); ok { + t.Errorf("expected to not contain thur, but did") + } + + if ok, _ := fst.Contains([]byte("thurp")); ok { + t.Errorf("expected to not contain thurp, but did") + } + + if ok, _ := fst.Contains([]byte("tue")); ok { + t.Errorf("expected to not contain tue, but did") + } + + if ok, _ := fst.Contains([]byte("tuesd")); ok { + t.Errorf("expected to not contain tuesd, but did") + } + + // a few more misc non-existent values to increase coverage + if ok, _ := fst.Contains([]byte("x")); ok { + t.Errorf("expected to not contain x, but did") + } + + // now try accessing it through the Automaton interface + exists := AutomatonContains(fst, []byte("mon")) + if !exists { + t.Errorf("expected key 'mon' to exist, doesn't") + } + + exists = AutomatonContains(fst, []byte("mons")) + if exists { + t.Errorf("expected key 'mo' to not exist, does") + } + + // now try accessing it through the Transducer interface + var val uint64 + exists, val = TransducerGet(fst, []byte("mon")) + if !exists { + t.Errorf("expected key 'mon' to exist, doesn't") + } + if val != 2 { + t.Errorf("expected val 2, got %d", val) + } + + // now try accessing it through the Transducer interface + // for key that doesn't exist + exists, _ = TransducerGet(fst, []byte("mons")) + if exists { + t.Errorf("expected key 'mo' to not exist, does") + } +} + +func TestRoundTripThousand(t *testing.T) { + dataset := thousandTestWords + randomThousandVals := randomValues(dataset) + + f, err := ioutil.TempFile("", "vellum") + if err != nil { + t.Fatal(err) + } + defer func() { + err = f.Close() + if err != nil { + t.Fatal(err) + } + }() + defer func() { + err = os.Remove(f.Name()) + if err != nil { + t.Fatal(err) + } + }() + + b, err := New(f, nil) + if err != nil { + t.Fatalf("error creating builder: %v", err) + } + + err = insertStrings(b, dataset, randomThousandVals) + if err != nil { + t.Fatalf("error inserting thousand words: %v", err) + } + err = b.Close() + if err != nil { + t.Fatalf("error closing builder: %v", err) + } + + fst, err := Open(f.Name()) + if err != nil { + t.Fatalf("error loading set: %v", err) + } + defer func() { + err = fst.Close() + if err != nil { + t.Fatal(err) + } + }() + + // first check all the expected values + got := map[string]uint64{} + itr, err := fst.Iterator(nil, nil) + for err == nil { + key, val := itr.Current() + got[string(key)] = val + err = itr.Next() + } + if err != ErrIteratorDone { + t.Errorf("iterator error: %v", err) + } + + for i := 0; i < len(dataset); i++ { + foundVal, ok := got[dataset[i]] + if !ok { + t.Fatalf("expected to find key, but didn't: %s", dataset[i]) + } + + if foundVal != randomThousandVals[i] { + t.Fatalf("expected value %d for key %s, but got %d", randomThousandVals[i], dataset[i], foundVal) + } + + // now remove it + delete(got, dataset[i]) + } + + if len(got) != 0 { + t.Fatalf("expected got map to be empty after checking, still has %v", got) + } +} + +func TestRoundTripEmpty(t *testing.T) { + f, err := ioutil.TempFile("", "vellum") + if err != nil { + t.Fatal(err) + } + defer func() { + err = f.Close() + if err != nil { + t.Fatal(err) + } + }() + defer func() { + err = os.Remove(f.Name()) + if err != nil { + t.Fatal(err) + } + }() + + b, err := New(f, nil) + if err != nil { + t.Fatalf("error creating builder: %v", err) + } + + err = b.Close() + if err != nil { + t.Fatalf("error closing: %v", err) + } + + fst, err := Open(f.Name()) + if err != nil { + t.Fatalf("error loading set: %v", err) + } + defer func() { + err = fst.Close() + if err != nil { + t.Fatal(err) + } + }() + + if fst.Len() != 0 { + t.Fatalf("expected length 0, got %d", fst.Len()) + } + + // first check all the expected values + got := map[string]uint64{} + itr, err := fst.Iterator(nil, nil) + for err == nil { + key, val := itr.Current() + got[string(key)] = val + err = itr.Next() + } + if err != ErrIteratorDone { + t.Errorf("iterator error: %v", err) + } + if len(got) > 0 { + t.Errorf("expected not to see anything, got %v", got) + } +} + +func TestRoundTripEmptyString(t *testing.T) { + f, err := ioutil.TempFile("", "vellum") + if err != nil { + t.Fatal(err) + } + defer func() { + err = f.Close() + if err != nil { + t.Fatal(err) + } + }() + defer func() { + err = os.Remove(f.Name()) + if err != nil { + t.Fatal(err) + } + }() + + b, err := New(f, nil) + if err != nil { + t.Fatalf("error creating builder: %v", err) + } + + err = b.Insert([]byte(""), 0) + if err != nil { + t.Fatalf("error inserting empty string") + } + + err = b.Close() + if err != nil { + t.Fatalf("error closing: %v", err) + } + + fst, err := Open(f.Name()) + if err != nil { + t.Fatalf("error loading set: %v", err) + } + defer func() { + err = fst.Close() + if err != nil { + t.Fatal(err) + } + }() + + if fst.Len() != 1 { + t.Fatalf("expected length 1, got %d", fst.Len()) + } + + // first check all the expected values + want := map[string]uint64{ + "": 0, + } + got := map[string]uint64{} + itr, err := fst.Iterator(nil, nil) + for err == nil { + key, val := itr.Current() + got[string(key)] = val + err = itr.Next() + } + if err != ErrIteratorDone { + t.Errorf("iterator error: %v", err) + } + if !reflect.DeepEqual(want, got) { + t.Errorf("expected %v, got: %v", want, got) + } +} + +func TestRoundTripEmptyStringAndOthers(t *testing.T) { + f, err := ioutil.TempFile("", "vellum") + if err != nil { + t.Fatal(err) + } + defer func() { + err = f.Close() + if err != nil { + t.Fatal(err) + } + }() + defer func() { + err = os.Remove(f.Name()) + if err != nil { + t.Fatal(err) + } + }() + + b, err := New(f, nil) + if err != nil { + t.Fatalf("error creating builder: %v", err) + } + + err = b.Insert([]byte(""), 0) + if err != nil { + t.Fatalf("error inserting empty string") + } + err = b.Insert([]byte("a"), 0) + if err != nil { + t.Fatalf("error inserting empty string") + } + + err = b.Close() + if err != nil { + t.Fatalf("error closing: %v", err) + } + + fst, err := Open(f.Name()) + if err != nil { + t.Fatalf("error loading set: %v", err) + } + defer func() { + err = fst.Close() + if err != nil { + t.Fatal(err) + } + }() + + if fst.Len() != 2 { + t.Fatalf("expected length 2, got %d", fst.Len()) + } + + // first check all the expected values + want := map[string]uint64{ + "": 0, + "a": 0, + } + got := map[string]uint64{} + itr, err := fst.Iterator(nil, nil) + for err == nil { + key, val := itr.Current() + got[string(key)] = val + err = itr.Next() + } + if err != ErrIteratorDone { + t.Errorf("iterator error: %v", err) + } + if !reflect.DeepEqual(want, got) { + t.Errorf("expected %v, got: %v", want, got) + } +} + +func TestMerge(t *testing.T) { + + // first create a file with the smallSample data + f, err := ioutil.TempFile("", "vellum1") + if err != nil { + t.Fatal(err) + } + defer func() { + err = f.Close() + if err != nil { + t.Fatal(err) + } + }() + defer func() { + err = os.Remove(f.Name()) + if err != nil { + t.Fatal(err) + } + }() + + b, err := New(f, nil) + if err != nil { + t.Fatalf("error creating builder: %v", err) + } + + err = insertStringMap(b, smallSample) + if err != nil { + t.Fatalf("error building: %v", err) + } + + err = b.Close() + if err != nil { + t.Fatalf("err closing: %v", err) + } + + smallSample2 := map[string]uint64{ + "bold": 25, + "last": 1, + "next": 500, + "tank": 0, + } + + // next create a file with the smallSample2 data + f2, err := ioutil.TempFile("", "vellum1") + if err != nil { + t.Fatal(err) + } + defer func() { + err = f2.Close() + if err != nil { + t.Fatal(err) + } + }() + defer func() { + err = os.Remove(f2.Name()) + if err != nil { + t.Fatal(err) + } + }() + + b, err = New(f2, nil) + if err != nil { + t.Fatalf("error creating builder: %v", err) + } + + err = insertStringMap(b, smallSample2) + if err != nil { + t.Fatalf("error building: %v", err) + } + + err = b.Close() + if err != nil { + t.Fatalf("err closing: %v", err) + } + + // now open them both up + fst, err := Open(f.Name()) + if err != nil { + t.Fatalf("error loading set: %v", err) + } + defer func() { + err = fst.Close() + if err != nil { + t.Fatal(err) + } + }() + fst2, err := Open(f2.Name()) + if err != nil { + t.Fatalf("error loading set: %v", err) + } + defer func() { + err = fst2.Close() + if err != nil { + t.Fatal(err) + } + }() + + // create full range iterators on both + itr, err := fst.Iterator(nil, nil) + if err != nil { + t.Fatalf("error opening iterator: %v", err) + } + itr2, err := fst2.Iterator(nil, nil) + if err != nil { + t.Fatalf("error opening iterator: %v", err) + } + + f3, err := ioutil.TempFile("", "vellum1") + if err != nil { + t.Fatal(err) + } + defer func() { + err = f3.Close() + if err != nil { + t.Fatal(err) + } + }() + defer func() { + err = os.Remove(f3.Name()) + if err != nil { + t.Fatal(err) + } + }() + + err = Merge(f3, nil, []Iterator{itr, itr2}, MergeSum) + if err != nil { + t.Fatalf("error merging iterators: %v", err) + } + + // now check it + fstc, err := Open(f3.Name()) + if err != nil { + t.Fatalf("error loading set: %v", err) + } + defer func() { + err = fstc.Close() + if err != nil { + t.Fatal(err) + } + }() + + if fstc.Len() != 8 { + t.Fatalf("expected length 8, got %d", fst.Len()) + } + + // now check all the expected values + want := map[string]uint64{ + "mon": 2, + "tues": 3, + "thurs": 5, + "tye": 99, + "bold": 25, + "last": 1, + "next": 500, + "tank": 0, + } + got := map[string]uint64{} + itrc, err := fstc.Iterator(nil, nil) + for err == nil { + key, val := itrc.Current() + got[string(key)] = val + err = itrc.Next() + } + if err != ErrIteratorDone { + t.Errorf("iterator error: %v", err) + } + if !reflect.DeepEqual(want, got) { + t.Errorf("expected %v, got: %v", want, got) + } +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/edsrzf/mmap-go/LICENSE b/vendor/github.com/couchbase/vellum/vendor/github.com/edsrzf/mmap-go/LICENSE new file mode 100644 index 0000000..8f05f33 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/edsrzf/mmap-go/LICENSE @@ -0,0 +1,25 @@ +Copyright (c) 2011, Evan Shaw +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the copyright holder nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/edsrzf/mmap-go/mmap.go b/vendor/github.com/couchbase/vellum/vendor/github.com/edsrzf/mmap-go/mmap.go new file mode 100644 index 0000000..7bb4965 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/edsrzf/mmap-go/mmap.go @@ -0,0 +1,112 @@ +// Copyright 2011 Evan Shaw. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This file defines the common package interface and contains a little bit of +// factored out logic. + +// Package mmap allows mapping files into memory. It tries to provide a simple, reasonably portable interface, +// but doesn't go out of its way to abstract away every little platform detail. +// This specifically means: +// * forked processes may or may not inherit mappings +// * a file's timestamp may or may not be updated by writes through mappings +// * specifying a size larger than the file's actual size can increase the file's size +// * If the mapped file is being modified by another process while your program's running, don't expect consistent results between platforms +package mmap + +import ( + "errors" + "os" + "reflect" + "unsafe" +) + +const ( + // RDONLY maps the memory read-only. + // Attempts to write to the MMap object will result in undefined behavior. + RDONLY = 0 + // RDWR maps the memory as read-write. Writes to the MMap object will update the + // underlying file. + RDWR = 1 << iota + // COPY maps the memory as copy-on-write. Writes to the MMap object will affect + // memory, but the underlying file will remain unchanged. + COPY + // If EXEC is set, the mapped memory is marked as executable. + EXEC +) + +const ( + // If the ANON flag is set, the mapped memory will not be backed by a file. + ANON = 1 << iota +) + +// MMap represents a file mapped into memory. +type MMap []byte + +// Map maps an entire file into memory. +// If ANON is set in flags, f is ignored. +func Map(f *os.File, prot, flags int) (MMap, error) { + return MapRegion(f, -1, prot, flags, 0) +} + +// MapRegion maps part of a file into memory. +// The offset parameter must be a multiple of the system's page size. +// If length < 0, the entire file will be mapped. +// If ANON is set in flags, f is ignored. +func MapRegion(f *os.File, length int, prot, flags int, offset int64) (MMap, error) { + var fd uintptr + if flags&ANON == 0 { + fd = uintptr(f.Fd()) + if length < 0 { + fi, err := f.Stat() + if err != nil { + return nil, err + } + length = int(fi.Size()) + } + } else { + if length <= 0 { + return nil, errors.New("anonymous mapping requires non-zero length") + } + fd = ^uintptr(0) + } + return mmap(length, uintptr(prot), uintptr(flags), fd, offset) +} + +func (m *MMap) header() *reflect.SliceHeader { + return (*reflect.SliceHeader)(unsafe.Pointer(m)) +} + +// Lock keeps the mapped region in physical memory, ensuring that it will not be +// swapped out. +func (m MMap) Lock() error { + dh := m.header() + return lock(dh.Data, uintptr(dh.Len)) +} + +// Unlock reverses the effect of Lock, allowing the mapped region to potentially +// be swapped out. +// If m is already unlocked, aan error will result. +func (m MMap) Unlock() error { + dh := m.header() + return unlock(dh.Data, uintptr(dh.Len)) +} + +// Flush synchronizes the mapping's contents to the file's contents on disk. +func (m MMap) Flush() error { + dh := m.header() + return flush(dh.Data, uintptr(dh.Len)) +} + +// Unmap deletes the memory mapped region, flushes any remaining changes, and sets +// m to nil. +// Trying to read or write any remaining references to m after Unmap is called will +// result in undefined behavior. +// Unmap should only be called on the slice value that was originally returned from +// a call to Map. Calling Unmap on a derived slice may cause errors. +func (m *MMap) Unmap() error { + dh := m.header() + err := unmap(dh.Data, uintptr(dh.Len)) + *m = nil + return err +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/edsrzf/mmap-go/mmap_unix.go b/vendor/github.com/couchbase/vellum/vendor/github.com/edsrzf/mmap-go/mmap_unix.go new file mode 100644 index 0000000..4af9842 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/edsrzf/mmap-go/mmap_unix.go @@ -0,0 +1,67 @@ +// Copyright 2011 Evan Shaw. 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 dragonfly freebsd linux openbsd solaris netbsd + +package mmap + +import ( + "syscall" +) + +func mmap(len int, inprot, inflags, fd uintptr, off int64) ([]byte, error) { + flags := syscall.MAP_SHARED + prot := syscall.PROT_READ + switch { + case inprot© != 0: + prot |= syscall.PROT_WRITE + flags = syscall.MAP_PRIVATE + case inprot&RDWR != 0: + prot |= syscall.PROT_WRITE + } + if inprot&EXEC != 0 { + prot |= syscall.PROT_EXEC + } + if inflags&ANON != 0 { + flags |= syscall.MAP_ANON + } + + b, err := syscall.Mmap(int(fd), off, len, prot, flags) + if err != nil { + return nil, err + } + return b, nil +} + +func flush(addr, len uintptr) error { + _, _, errno := syscall.Syscall(_SYS_MSYNC, addr, len, _MS_SYNC) + if errno != 0 { + return syscall.Errno(errno) + } + return nil +} + +func lock(addr, len uintptr) error { + _, _, errno := syscall.Syscall(syscall.SYS_MLOCK, addr, len, 0) + if errno != 0 { + return syscall.Errno(errno) + } + return nil +} + +func unlock(addr, len uintptr) error { + _, _, errno := syscall.Syscall(syscall.SYS_MUNLOCK, addr, len, 0) + if errno != 0 { + return syscall.Errno(errno) + } + return nil +} + +func unmap(addr, len uintptr) error { + _, _, errno := syscall.Syscall(syscall.SYS_MUNMAP, addr, len, 0) + if errno != 0 { + return syscall.Errno(errno) + } + return nil +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/edsrzf/mmap-go/mmap_windows.go b/vendor/github.com/couchbase/vellum/vendor/github.com/edsrzf/mmap-go/mmap_windows.go new file mode 100644 index 0000000..c3d2d02 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/edsrzf/mmap-go/mmap_windows.go @@ -0,0 +1,125 @@ +// Copyright 2011 Evan Shaw. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package mmap + +import ( + "errors" + "os" + "sync" + "syscall" +) + +// mmap on Windows is a two-step process. +// First, we call CreateFileMapping to get a handle. +// Then, we call MapviewToFile to get an actual pointer into memory. +// Because we want to emulate a POSIX-style mmap, we don't want to expose +// the handle -- only the pointer. We also want to return only a byte slice, +// not a struct, so it's convenient to manipulate. + +// We keep this map so that we can get back the original handle from the memory address. +var handleLock sync.Mutex +var handleMap = map[uintptr]syscall.Handle{} + +func mmap(len int, prot, flags, hfile uintptr, off int64) ([]byte, error) { + flProtect := uint32(syscall.PAGE_READONLY) + dwDesiredAccess := uint32(syscall.FILE_MAP_READ) + switch { + case prot© != 0: + flProtect = syscall.PAGE_WRITECOPY + dwDesiredAccess = syscall.FILE_MAP_COPY + case prot&RDWR != 0: + flProtect = syscall.PAGE_READWRITE + dwDesiredAccess = syscall.FILE_MAP_WRITE + } + if prot&EXEC != 0 { + flProtect <<= 4 + dwDesiredAccess |= syscall.FILE_MAP_EXECUTE + } + + // The maximum size is the area of the file, starting from 0, + // that we wish to allow to be mappable. It is the sum of + // the length the user requested, plus the offset where that length + // is starting from. This does not map the data into memory. + maxSizeHigh := uint32((off + int64(len)) >> 32) + maxSizeLow := uint32((off + int64(len)) & 0xFFFFFFFF) + // TODO: Do we need to set some security attributes? It might help portability. + h, errno := syscall.CreateFileMapping(syscall.Handle(hfile), nil, flProtect, maxSizeHigh, maxSizeLow, nil) + if h == 0 { + return nil, os.NewSyscallError("CreateFileMapping", errno) + } + + // Actually map a view of the data into memory. The view's size + // is the length the user requested. + fileOffsetHigh := uint32(off >> 32) + fileOffsetLow := uint32(off & 0xFFFFFFFF) + addr, errno := syscall.MapViewOfFile(h, dwDesiredAccess, fileOffsetHigh, fileOffsetLow, uintptr(len)) + if addr == 0 { + return nil, os.NewSyscallError("MapViewOfFile", errno) + } + handleLock.Lock() + handleMap[addr] = h + handleLock.Unlock() + + m := MMap{} + dh := m.header() + dh.Data = addr + dh.Len = len + dh.Cap = dh.Len + + return m, nil +} + +func flush(addr, len uintptr) error { + errno := syscall.FlushViewOfFile(addr, len) + if errno != nil { + return os.NewSyscallError("FlushViewOfFile", errno) + } + + handleLock.Lock() + defer handleLock.Unlock() + handle, ok := handleMap[addr] + if !ok { + // should be impossible; we would've errored above + return errors.New("unknown base address") + } + + errno = syscall.FlushFileBuffers(handle) + return os.NewSyscallError("FlushFileBuffers", errno) +} + +func lock(addr, len uintptr) error { + errno := syscall.VirtualLock(addr, len) + return os.NewSyscallError("VirtualLock", errno) +} + +func unlock(addr, len uintptr) error { + errno := syscall.VirtualUnlock(addr, len) + return os.NewSyscallError("VirtualUnlock", errno) +} + +func unmap(addr, len uintptr) error { + flush(addr, len) + // Lock the UnmapViewOfFile along with the handleMap deletion. + // As soon as we unmap the view, the OS is free to give the + // same addr to another new map. We don't want another goroutine + // to insert and remove the same addr into handleMap while + // we're trying to remove our old addr/handle pair. + handleLock.Lock() + defer handleLock.Unlock() + err := syscall.UnmapViewOfFile(addr) + if err != nil { + return err + } + + handle, ok := handleMap[addr] + if !ok { + // should be impossible; we would've errored above + return errors.New("unknown base address") + } + delete(handleMap, addr) + + e := syscall.CloseHandle(syscall.Handle(handle)) + return os.NewSyscallError("CloseHandle", e) +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/edsrzf/mmap-go/msync_netbsd.go b/vendor/github.com/couchbase/vellum/vendor/github.com/edsrzf/mmap-go/msync_netbsd.go new file mode 100644 index 0000000..a64b003 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/edsrzf/mmap-go/msync_netbsd.go @@ -0,0 +1,8 @@ +// Copyright 2011 Evan Shaw. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package mmap + +const _SYS_MSYNC = 277 +const _MS_SYNC = 0x04 diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/edsrzf/mmap-go/msync_unix.go b/vendor/github.com/couchbase/vellum/vendor/github.com/edsrzf/mmap-go/msync_unix.go new file mode 100644 index 0000000..91ee5f4 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/edsrzf/mmap-go/msync_unix.go @@ -0,0 +1,14 @@ +// Copyright 2011 Evan Shaw. 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 dragonfly freebsd linux openbsd solaris + +package mmap + +import ( + "syscall" +) + +const _SYS_MSYNC = syscall.SYS_MSYNC +const _MS_SYNC = syscall.MS_SYNC diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/inconshreveable/mousetrap/LICENSE b/vendor/github.com/couchbase/vellum/vendor/github.com/inconshreveable/mousetrap/LICENSE new file mode 100644 index 0000000..5f0d1fb --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/inconshreveable/mousetrap/LICENSE @@ -0,0 +1,13 @@ +Copyright 2014 Alan Shreve + +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/couchbase/vellum/vendor/github.com/inconshreveable/mousetrap/trap_others.go b/vendor/github.com/couchbase/vellum/vendor/github.com/inconshreveable/mousetrap/trap_others.go new file mode 100644 index 0000000..9d2d8a4 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/inconshreveable/mousetrap/trap_others.go @@ -0,0 +1,15 @@ +// +build !windows + +package mousetrap + +// StartedByExplorer returns true if the program was invoked by the user +// double-clicking on the executable from explorer.exe +// +// It is conservative and returns false if any of the internal calls fail. +// It does not guarantee that the program was run from a terminal. It only can tell you +// whether it was launched from explorer.exe +// +// On non-Windows platforms, it always returns false. +func StartedByExplorer() bool { + return false +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/inconshreveable/mousetrap/trap_windows.go b/vendor/github.com/couchbase/vellum/vendor/github.com/inconshreveable/mousetrap/trap_windows.go new file mode 100644 index 0000000..336142a --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/inconshreveable/mousetrap/trap_windows.go @@ -0,0 +1,98 @@ +// +build windows +// +build !go1.4 + +package mousetrap + +import ( + "fmt" + "os" + "syscall" + "unsafe" +) + +const ( + // defined by the Win32 API + th32cs_snapprocess uintptr = 0x2 +) + +var ( + kernel = syscall.MustLoadDLL("kernel32.dll") + CreateToolhelp32Snapshot = kernel.MustFindProc("CreateToolhelp32Snapshot") + Process32First = kernel.MustFindProc("Process32FirstW") + Process32Next = kernel.MustFindProc("Process32NextW") +) + +// ProcessEntry32 structure defined by the Win32 API +type processEntry32 struct { + dwSize uint32 + cntUsage uint32 + th32ProcessID uint32 + th32DefaultHeapID int + th32ModuleID uint32 + cntThreads uint32 + th32ParentProcessID uint32 + pcPriClassBase int32 + dwFlags uint32 + szExeFile [syscall.MAX_PATH]uint16 +} + +func getProcessEntry(pid int) (pe *processEntry32, err error) { + snapshot, _, e1 := CreateToolhelp32Snapshot.Call(th32cs_snapprocess, uintptr(0)) + if snapshot == uintptr(syscall.InvalidHandle) { + err = fmt.Errorf("CreateToolhelp32Snapshot: %v", e1) + return + } + defer syscall.CloseHandle(syscall.Handle(snapshot)) + + var processEntry processEntry32 + processEntry.dwSize = uint32(unsafe.Sizeof(processEntry)) + ok, _, e1 := Process32First.Call(snapshot, uintptr(unsafe.Pointer(&processEntry))) + if ok == 0 { + err = fmt.Errorf("Process32First: %v", e1) + return + } + + for { + if processEntry.th32ProcessID == uint32(pid) { + pe = &processEntry + return + } + + ok, _, e1 = Process32Next.Call(snapshot, uintptr(unsafe.Pointer(&processEntry))) + if ok == 0 { + err = fmt.Errorf("Process32Next: %v", e1) + return + } + } +} + +func getppid() (pid int, err error) { + pe, err := getProcessEntry(os.Getpid()) + if err != nil { + return + } + + pid = int(pe.th32ParentProcessID) + return +} + +// StartedByExplorer returns true if the program was invoked by the user double-clicking +// on the executable from explorer.exe +// +// It is conservative and returns false if any of the internal calls fail. +// It does not guarantee that the program was run from a terminal. It only can tell you +// whether it was launched from explorer.exe +func StartedByExplorer() bool { + ppid, err := getppid() + if err != nil { + return false + } + + pe, err := getProcessEntry(ppid) + if err != nil { + return false + } + + name := syscall.UTF16ToString(pe.szExeFile[:]) + return name == "explorer.exe" +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/inconshreveable/mousetrap/trap_windows_1.4.go b/vendor/github.com/couchbase/vellum/vendor/github.com/inconshreveable/mousetrap/trap_windows_1.4.go new file mode 100644 index 0000000..9a28e57 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/inconshreveable/mousetrap/trap_windows_1.4.go @@ -0,0 +1,46 @@ +// +build windows +// +build go1.4 + +package mousetrap + +import ( + "os" + "syscall" + "unsafe" +) + +func getProcessEntry(pid int) (*syscall.ProcessEntry32, error) { + snapshot, err := syscall.CreateToolhelp32Snapshot(syscall.TH32CS_SNAPPROCESS, 0) + if err != nil { + return nil, err + } + defer syscall.CloseHandle(snapshot) + var procEntry syscall.ProcessEntry32 + procEntry.Size = uint32(unsafe.Sizeof(procEntry)) + if err = syscall.Process32First(snapshot, &procEntry); err != nil { + return nil, err + } + for { + if procEntry.ProcessID == uint32(pid) { + return &procEntry, nil + } + err = syscall.Process32Next(snapshot, &procEntry) + if err != nil { + return nil, err + } + } +} + +// StartedByExplorer returns true if the program was invoked by the user double-clicking +// on the executable from explorer.exe +// +// It is conservative and returns false if any of the internal calls fail. +// It does not guarantee that the program was run from a terminal. It only can tell you +// whether it was launched from explorer.exe +func StartedByExplorer() bool { + pe, err := getProcessEntry(os.Getppid()) + if err != nil { + return false + } + return "explorer.exe" == syscall.UTF16ToString(pe.ExeFile[:]) +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/cobra/LICENSE.txt b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/cobra/LICENSE.txt new file mode 100644 index 0000000..298f0e2 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/cobra/LICENSE.txt @@ -0,0 +1,174 @@ + 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. diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/cobra/bash_completions.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/cobra/bash_completions.go new file mode 100644 index 0000000..8820ba8 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/cobra/bash_completions.go @@ -0,0 +1,645 @@ +package cobra + +import ( + "fmt" + "io" + "os" + "sort" + "strings" + + "github.com/spf13/pflag" +) + +// Annotations for Bash completion. +const ( + BashCompFilenameExt = "cobra_annotation_bash_completion_filename_extensions" + BashCompCustom = "cobra_annotation_bash_completion_custom" + BashCompOneRequiredFlag = "cobra_annotation_bash_completion_one_required_flag" + BashCompSubdirsInDir = "cobra_annotation_bash_completion_subdirs_in_dir" +) + +func preamble(out io.Writer, name string) error { + _, err := fmt.Fprintf(out, "# bash completion for %-36s -*- shell-script -*-\n", name) + if err != nil { + return err + } + preamStr := ` +__debug() +{ + if [[ -n ${BASH_COMP_DEBUG_FILE} ]]; then + echo "$*" >> "${BASH_COMP_DEBUG_FILE}" + fi +} + +# Homebrew on Macs have version 1.3 of bash-completion which doesn't include +# _init_completion. This is a very minimal version of that function. +__my_init_completion() +{ + COMPREPLY=() + _get_comp_words_by_ref "$@" cur prev words cword +} + +__index_of_word() +{ + local w word=$1 + shift + index=0 + for w in "$@"; do + [[ $w = "$word" ]] && return + index=$((index+1)) + done + index=-1 +} + +__contains_word() +{ + local w word=$1; shift + for w in "$@"; do + [[ $w = "$word" ]] && return + done + return 1 +} + +__handle_reply() +{ + __debug "${FUNCNAME[0]}" + case $cur in + -*) + if [[ $(type -t compopt) = "builtin" ]]; then + compopt -o nospace + fi + local allflags + if [ ${#must_have_one_flag[@]} -ne 0 ]; then + allflags=("${must_have_one_flag[@]}") + else + allflags=("${flags[*]} ${two_word_flags[*]}") + fi + COMPREPLY=( $(compgen -W "${allflags[*]}" -- "$cur") ) + if [[ $(type -t compopt) = "builtin" ]]; then + [[ "${COMPREPLY[0]}" == *= ]] || compopt +o nospace + fi + + # complete after --flag=abc + if [[ $cur == *=* ]]; then + if [[ $(type -t compopt) = "builtin" ]]; then + compopt +o nospace + fi + + local index flag + flag="${cur%%=*}" + __index_of_word "${flag}" "${flags_with_completion[@]}" + if [[ ${index} -ge 0 ]]; then + COMPREPLY=() + PREFIX="" + cur="${cur#*=}" + ${flags_completion[${index}]} + if [ -n "${ZSH_VERSION}" ]; then + # zfs completion needs --flag= prefix + eval "COMPREPLY=( \"\${COMPREPLY[@]/#/${flag}=}\" )" + fi + fi + fi + return 0; + ;; + esac + + # check if we are handling a flag with special work handling + local index + __index_of_word "${prev}" "${flags_with_completion[@]}" + if [[ ${index} -ge 0 ]]; then + ${flags_completion[${index}]} + return + fi + + # we are parsing a flag and don't have a special handler, no completion + if [[ ${cur} != "${words[cword]}" ]]; then + return + fi + + local completions + completions=("${commands[@]}") + if [[ ${#must_have_one_noun[@]} -ne 0 ]]; then + completions=("${must_have_one_noun[@]}") + fi + if [[ ${#must_have_one_flag[@]} -ne 0 ]]; then + completions+=("${must_have_one_flag[@]}") + fi + COMPREPLY=( $(compgen -W "${completions[*]}" -- "$cur") ) + + if [[ ${#COMPREPLY[@]} -eq 0 && ${#noun_aliases[@]} -gt 0 && ${#must_have_one_noun[@]} -ne 0 ]]; then + COMPREPLY=( $(compgen -W "${noun_aliases[*]}" -- "$cur") ) + fi + + if [[ ${#COMPREPLY[@]} -eq 0 ]]; then + declare -F __custom_func >/dev/null && __custom_func + fi + + __ltrim_colon_completions "$cur" +} + +# The arguments should be in the form "ext1|ext2|extn" +__handle_filename_extension_flag() +{ + local ext="$1" + _filedir "@(${ext})" +} + +__handle_subdirs_in_dir_flag() +{ + local dir="$1" + pushd "${dir}" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1 +} + +__handle_flag() +{ + __debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}" + + # if a command required a flag, and we found it, unset must_have_one_flag() + local flagname=${words[c]} + local flagvalue + # if the word contained an = + if [[ ${words[c]} == *"="* ]]; then + flagvalue=${flagname#*=} # take in as flagvalue after the = + flagname=${flagname%%=*} # strip everything after the = + flagname="${flagname}=" # but put the = back + fi + __debug "${FUNCNAME[0]}: looking for ${flagname}" + if __contains_word "${flagname}" "${must_have_one_flag[@]}"; then + must_have_one_flag=() + fi + + # if you set a flag which only applies to this command, don't show subcommands + if __contains_word "${flagname}" "${local_nonpersistent_flags[@]}"; then + commands=() + fi + + # keep flag value with flagname as flaghash + if [ -n "${flagvalue}" ] ; then + flaghash[${flagname}]=${flagvalue} + elif [ -n "${words[ $((c+1)) ]}" ] ; then + flaghash[${flagname}]=${words[ $((c+1)) ]} + else + flaghash[${flagname}]="true" # pad "true" for bool flag + fi + + # skip the argument to a two word flag + if __contains_word "${words[c]}" "${two_word_flags[@]}"; then + c=$((c+1)) + # if we are looking for a flags value, don't show commands + if [[ $c -eq $cword ]]; then + commands=() + fi + fi + + c=$((c+1)) + +} + +__handle_noun() +{ + __debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}" + + if __contains_word "${words[c]}" "${must_have_one_noun[@]}"; then + must_have_one_noun=() + elif __contains_word "${words[c]}" "${noun_aliases[@]}"; then + must_have_one_noun=() + fi + + nouns+=("${words[c]}") + c=$((c+1)) +} + +__handle_command() +{ + __debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}" + + local next_command + if [[ -n ${last_command} ]]; then + next_command="_${last_command}_${words[c]//:/__}" + else + if [[ $c -eq 0 ]]; then + next_command="_$(basename "${words[c]//:/__}")" + else + next_command="_${words[c]//:/__}" + fi + fi + c=$((c+1)) + __debug "${FUNCNAME[0]}: looking for ${next_command}" + declare -F $next_command >/dev/null && $next_command +} + +__handle_word() +{ + if [[ $c -ge $cword ]]; then + __handle_reply + return + fi + __debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}" + if [[ "${words[c]}" == -* ]]; then + __handle_flag + elif __contains_word "${words[c]}" "${commands[@]}"; then + __handle_command + elif [[ $c -eq 0 ]] && __contains_word "$(basename "${words[c]}")" "${commands[@]}"; then + __handle_command + else + __handle_noun + fi + __handle_word +} + +` + _, err = fmt.Fprint(out, preamStr) + return err +} + +func postscript(w io.Writer, name string) error { + name = strings.Replace(name, ":", "__", -1) + _, err := fmt.Fprintf(w, "__start_%s()\n", name) + if err != nil { + return err + } + _, err = fmt.Fprintf(w, `{ + local cur prev words cword + declare -A flaghash 2>/dev/null || : + if declare -F _init_completion >/dev/null 2>&1; then + _init_completion -s || return + else + __my_init_completion -n "=" || return + fi + + local c=0 + local flags=() + local two_word_flags=() + local local_nonpersistent_flags=() + local flags_with_completion=() + local flags_completion=() + local commands=("%s") + local must_have_one_flag=() + local must_have_one_noun=() + local last_command + local nouns=() + + __handle_word +} + +`, name) + if err != nil { + return err + } + _, err = fmt.Fprintf(w, `if [[ $(type -t compopt) = "builtin" ]]; then + complete -o default -F __start_%s %s +else + complete -o default -o nospace -F __start_%s %s +fi + +`, name, name, name, name) + if err != nil { + return err + } + _, err = fmt.Fprintf(w, "# ex: ts=4 sw=4 et filetype=sh\n") + return err +} + +func writeCommands(cmd *Command, w io.Writer) error { + if _, err := fmt.Fprintf(w, " commands=()\n"); err != nil { + return err + } + for _, c := range cmd.Commands() { + if !c.IsAvailableCommand() || c == cmd.helpCommand { + continue + } + if _, err := fmt.Fprintf(w, " commands+=(%q)\n", c.Name()); err != nil { + return err + } + } + _, err := fmt.Fprintf(w, "\n") + return err +} + +func writeFlagHandler(name string, annotations map[string][]string, w io.Writer) error { + for key, value := range annotations { + switch key { + case BashCompFilenameExt: + _, err := fmt.Fprintf(w, " flags_with_completion+=(%q)\n", name) + if err != nil { + return err + } + + if len(value) > 0 { + ext := "__handle_filename_extension_flag " + strings.Join(value, "|") + _, err = fmt.Fprintf(w, " flags_completion+=(%q)\n", ext) + } else { + ext := "_filedir" + _, err = fmt.Fprintf(w, " flags_completion+=(%q)\n", ext) + } + if err != nil { + return err + } + case BashCompCustom: + _, err := fmt.Fprintf(w, " flags_with_completion+=(%q)\n", name) + if err != nil { + return err + } + if len(value) > 0 { + handlers := strings.Join(value, "; ") + _, err = fmt.Fprintf(w, " flags_completion+=(%q)\n", handlers) + } else { + _, err = fmt.Fprintf(w, " flags_completion+=(:)\n") + } + if err != nil { + return err + } + case BashCompSubdirsInDir: + _, err := fmt.Fprintf(w, " flags_with_completion+=(%q)\n", name) + + if len(value) == 1 { + ext := "__handle_subdirs_in_dir_flag " + value[0] + _, err = fmt.Fprintf(w, " flags_completion+=(%q)\n", ext) + } else { + ext := "_filedir -d" + _, err = fmt.Fprintf(w, " flags_completion+=(%q)\n", ext) + } + if err != nil { + return err + } + } + } + return nil +} + +func writeShortFlag(flag *pflag.Flag, w io.Writer) error { + b := (len(flag.NoOptDefVal) > 0) + name := flag.Shorthand + format := " " + if !b { + format += "two_word_" + } + format += "flags+=(\"-%s\")\n" + if _, err := fmt.Fprintf(w, format, name); err != nil { + return err + } + return writeFlagHandler("-"+name, flag.Annotations, w) +} + +func writeFlag(flag *pflag.Flag, w io.Writer) error { + b := (len(flag.NoOptDefVal) > 0) + name := flag.Name + format := " flags+=(\"--%s" + if !b { + format += "=" + } + format += "\")\n" + if _, err := fmt.Fprintf(w, format, name); err != nil { + return err + } + return writeFlagHandler("--"+name, flag.Annotations, w) +} + +func writeLocalNonPersistentFlag(flag *pflag.Flag, w io.Writer) error { + b := (len(flag.NoOptDefVal) > 0) + name := flag.Name + format := " local_nonpersistent_flags+=(\"--%s" + if !b { + format += "=" + } + format += "\")\n" + _, err := fmt.Fprintf(w, format, name) + return err +} + +func writeFlags(cmd *Command, w io.Writer) error { + _, err := fmt.Fprintf(w, ` flags=() + two_word_flags=() + local_nonpersistent_flags=() + flags_with_completion=() + flags_completion=() + +`) + if err != nil { + return err + } + localNonPersistentFlags := cmd.LocalNonPersistentFlags() + var visitErr error + cmd.NonInheritedFlags().VisitAll(func(flag *pflag.Flag) { + if nonCompletableFlag(flag) { + return + } + if err := writeFlag(flag, w); err != nil { + visitErr = err + return + } + if len(flag.Shorthand) > 0 { + if err := writeShortFlag(flag, w); err != nil { + visitErr = err + return + } + } + if localNonPersistentFlags.Lookup(flag.Name) != nil { + if err := writeLocalNonPersistentFlag(flag, w); err != nil { + visitErr = err + return + } + } + }) + if visitErr != nil { + return visitErr + } + cmd.InheritedFlags().VisitAll(func(flag *pflag.Flag) { + if nonCompletableFlag(flag) { + return + } + if err := writeFlag(flag, w); err != nil { + visitErr = err + return + } + if len(flag.Shorthand) > 0 { + if err := writeShortFlag(flag, w); err != nil { + visitErr = err + return + } + } + }) + if visitErr != nil { + return visitErr + } + + _, err = fmt.Fprintf(w, "\n") + return err +} + +func writeRequiredFlag(cmd *Command, w io.Writer) error { + if _, err := fmt.Fprintf(w, " must_have_one_flag=()\n"); err != nil { + return err + } + flags := cmd.NonInheritedFlags() + var visitErr error + flags.VisitAll(func(flag *pflag.Flag) { + if nonCompletableFlag(flag) { + return + } + for key := range flag.Annotations { + switch key { + case BashCompOneRequiredFlag: + format := " must_have_one_flag+=(\"--%s" + b := (flag.Value.Type() == "bool") + if !b { + format += "=" + } + format += "\")\n" + if _, err := fmt.Fprintf(w, format, flag.Name); err != nil { + visitErr = err + return + } + + if len(flag.Shorthand) > 0 { + if _, err := fmt.Fprintf(w, " must_have_one_flag+=(\"-%s\")\n", flag.Shorthand); err != nil { + visitErr = err + return + } + } + } + } + }) + return visitErr +} + +func writeRequiredNouns(cmd *Command, w io.Writer) error { + if _, err := fmt.Fprintf(w, " must_have_one_noun=()\n"); err != nil { + return err + } + sort.Sort(sort.StringSlice(cmd.ValidArgs)) + for _, value := range cmd.ValidArgs { + if _, err := fmt.Fprintf(w, " must_have_one_noun+=(%q)\n", value); err != nil { + return err + } + } + return nil +} + +func writeArgAliases(cmd *Command, w io.Writer) error { + if _, err := fmt.Fprintf(w, " noun_aliases=()\n"); err != nil { + return err + } + sort.Sort(sort.StringSlice(cmd.ArgAliases)) + for _, value := range cmd.ArgAliases { + if _, err := fmt.Fprintf(w, " noun_aliases+=(%q)\n", value); err != nil { + return err + } + } + return nil +} + +func gen(cmd *Command, w io.Writer) error { + for _, c := range cmd.Commands() { + if !c.IsAvailableCommand() || c == cmd.helpCommand { + continue + } + if err := gen(c, w); err != nil { + return err + } + } + commandName := cmd.CommandPath() + commandName = strings.Replace(commandName, " ", "_", -1) + commandName = strings.Replace(commandName, ":", "__", -1) + if _, err := fmt.Fprintf(w, "_%s()\n{\n", commandName); err != nil { + return err + } + if _, err := fmt.Fprintf(w, " last_command=%q\n", commandName); err != nil { + return err + } + if err := writeCommands(cmd, w); err != nil { + return err + } + if err := writeFlags(cmd, w); err != nil { + return err + } + if err := writeRequiredFlag(cmd, w); err != nil { + return err + } + if err := writeRequiredNouns(cmd, w); err != nil { + return err + } + if err := writeArgAliases(cmd, w); err != nil { + return err + } + if _, err := fmt.Fprintf(w, "}\n\n"); err != nil { + return err + } + return nil +} + +// GenBashCompletion generates bash completion file and writes to the passed writer. +func (cmd *Command) GenBashCompletion(w io.Writer) error { + if err := preamble(w, cmd.Name()); err != nil { + return err + } + if len(cmd.BashCompletionFunction) > 0 { + if _, err := fmt.Fprintf(w, "%s\n", cmd.BashCompletionFunction); err != nil { + return err + } + } + if err := gen(cmd, w); err != nil { + return err + } + return postscript(w, cmd.Name()) +} + +func nonCompletableFlag(flag *pflag.Flag) bool { + return flag.Hidden || len(flag.Deprecated) > 0 +} + +// GenBashCompletionFile generates bash completion file. +func (cmd *Command) GenBashCompletionFile(filename string) error { + outFile, err := os.Create(filename) + if err != nil { + return err + } + defer outFile.Close() + + return cmd.GenBashCompletion(outFile) +} + +// MarkFlagRequired adds the BashCompOneRequiredFlag annotation to the named flag, if it exists. +func (cmd *Command) MarkFlagRequired(name string) error { + return MarkFlagRequired(cmd.Flags(), name) +} + +// MarkPersistentFlagRequired adds the BashCompOneRequiredFlag annotation to the named persistent flag, if it exists. +func (cmd *Command) MarkPersistentFlagRequired(name string) error { + return MarkFlagRequired(cmd.PersistentFlags(), name) +} + +// MarkFlagRequired adds the BashCompOneRequiredFlag annotation to the named flag in the flag set, if it exists. +func MarkFlagRequired(flags *pflag.FlagSet, name string) error { + return flags.SetAnnotation(name, BashCompOneRequiredFlag, []string{"true"}) +} + +// MarkFlagFilename adds the BashCompFilenameExt annotation to the named flag, if it exists. +// Generated bash autocompletion will select filenames for the flag, limiting to named extensions if provided. +func (cmd *Command) MarkFlagFilename(name string, extensions ...string) error { + return MarkFlagFilename(cmd.Flags(), name, extensions...) +} + +// MarkFlagCustom adds the BashCompCustom annotation to the named flag, if it exists. +// Generated bash autocompletion will call the bash function f for the flag. +func (cmd *Command) MarkFlagCustom(name string, f string) error { + return MarkFlagCustom(cmd.Flags(), name, f) +} + +// MarkPersistentFlagFilename adds the BashCompFilenameExt annotation to the named persistent flag, if it exists. +// Generated bash autocompletion will select filenames for the flag, limiting to named extensions if provided. +func (cmd *Command) MarkPersistentFlagFilename(name string, extensions ...string) error { + return MarkFlagFilename(cmd.PersistentFlags(), name, extensions...) +} + +// MarkFlagFilename adds the BashCompFilenameExt annotation to the named flag in the flag set, if it exists. +// Generated bash autocompletion will select filenames for the flag, limiting to named extensions if provided. +func MarkFlagFilename(flags *pflag.FlagSet, name string, extensions ...string) error { + return flags.SetAnnotation(name, BashCompFilenameExt, extensions) +} + +// MarkFlagCustom adds the BashCompCustom annotation to the named flag in the flag set, if it exists. +// Generated bash autocompletion will call the bash function f for the flag. +func MarkFlagCustom(flags *pflag.FlagSet, name string, f string) error { + return flags.SetAnnotation(name, BashCompCustom, []string{f}) +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/cobra/cobra.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/cobra/cobra.go new file mode 100644 index 0000000..9605b98 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/cobra/cobra.go @@ -0,0 +1,174 @@ +// Copyright © 2013 Steve Francia . +// +// 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. + +// Commands similar to git, go tools and other modern CLI tools +// inspired by go, go-Commander, gh and subcommand + +package cobra + +import ( + "fmt" + "io" + "reflect" + "strconv" + "strings" + "text/template" + "unicode" +) + +var templateFuncs = template.FuncMap{ + "trim": strings.TrimSpace, + "trimRightSpace": trimRightSpace, + "appendIfNotPresent": appendIfNotPresent, + "rpad": rpad, + "gt": Gt, + "eq": Eq, +} + +var initializers []func() + +// EnablePrefixMatching allows to set automatic prefix matching. Automatic prefix matching can be a dangerous thing +// to automatically enable in CLI tools. +// Set this to true to enable it. +var EnablePrefixMatching = false + +// EnableCommandSorting controls sorting of the slice of commands, which is turned on by default. +// To disable sorting, set it to false. +var EnableCommandSorting = true + +// AddTemplateFunc adds a template function that's available to Usage and Help +// template generation. +func AddTemplateFunc(name string, tmplFunc interface{}) { + templateFuncs[name] = tmplFunc +} + +// AddTemplateFuncs adds multiple template functions availalble to Usage and +// Help template generation. +func AddTemplateFuncs(tmplFuncs template.FuncMap) { + for k, v := range tmplFuncs { + templateFuncs[k] = v + } +} + +// OnInitialize takes a series of func() arguments and appends them to a slice of func(). +func OnInitialize(y ...func()) { + initializers = append(initializers, y...) +} + +// Gt takes two types and checks whether the first type is greater than the second. In case of types Arrays, Chans, +// Maps and Slices, Gt will compare their lengths. Ints are compared directly while strings are first parsed as +// ints and then compared. +func Gt(a interface{}, b interface{}) bool { + var left, right int64 + av := reflect.ValueOf(a) + + switch av.Kind() { + case reflect.Array, reflect.Chan, reflect.Map, reflect.Slice: + left = int64(av.Len()) + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + left = av.Int() + case reflect.String: + left, _ = strconv.ParseInt(av.String(), 10, 64) + } + + bv := reflect.ValueOf(b) + + switch bv.Kind() { + case reflect.Array, reflect.Chan, reflect.Map, reflect.Slice: + right = int64(bv.Len()) + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + right = bv.Int() + case reflect.String: + right, _ = strconv.ParseInt(bv.String(), 10, 64) + } + + return left > right +} + +// Eq takes two types and checks whether they are equal. Supported types are int and string. Unsupported types will panic. +func Eq(a interface{}, b interface{}) bool { + av := reflect.ValueOf(a) + bv := reflect.ValueOf(b) + + switch av.Kind() { + case reflect.Array, reflect.Chan, reflect.Map, reflect.Slice: + panic("Eq called on unsupported type") + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return av.Int() == bv.Int() + case reflect.String: + return av.String() == bv.String() + } + return false +} + +func trimRightSpace(s string) string { + return strings.TrimRightFunc(s, unicode.IsSpace) +} + +// appendIfNotPresent will append stringToAppend to the end of s, but only if it's not yet present in s. +func appendIfNotPresent(s, stringToAppend string) string { + if strings.Contains(s, stringToAppend) { + return s + } + return s + " " + stringToAppend +} + +// rpad adds padding to the right of a string. +func rpad(s string, padding int) string { + template := fmt.Sprintf("%%-%ds", padding) + return fmt.Sprintf(template, s) +} + +// tmpl executes the given template text on data, writing the result to w. +func tmpl(w io.Writer, text string, data interface{}) error { + t := template.New("top") + t.Funcs(templateFuncs) + template.Must(t.Parse(text)) + return t.Execute(w, data) +} + +// ld compares two strings and returns the levenshtein distance between them. +func ld(s, t string, ignoreCase bool) int { + if ignoreCase { + s = strings.ToLower(s) + t = strings.ToLower(t) + } + d := make([][]int, len(s)+1) + for i := range d { + d[i] = make([]int, len(t)+1) + } + for i := range d { + d[i][0] = i + } + for j := range d[0] { + d[0][j] = j + } + for j := 1; j <= len(t); j++ { + for i := 1; i <= len(s); i++ { + if s[i-1] == t[j-1] { + d[i][j] = d[i-1][j-1] + } else { + min := d[i-1][j] + if d[i][j-1] < min { + min = d[i][j-1] + } + if d[i-1][j-1] < min { + min = d[i-1][j-1] + } + d[i][j] = min + 1 + } + } + + } + return d[len(s)][len(t)] +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/cobra/command.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/cobra/command.go new file mode 100644 index 0000000..ae3930d --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/cobra/command.go @@ -0,0 +1,1305 @@ +// Copyright © 2013 Steve Francia . +// +// 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 cobra is a commander providing a simple interface to create powerful modern CLI interfaces. +//In addition to providing an interface, Cobra simultaneously provides a controller to organize your application code. +package cobra + +import ( + "bytes" + "fmt" + "io" + "os" + "path/filepath" + "sort" + "strings" + + flag "github.com/spf13/pflag" +) + +// Command is just that, a command for your application. +// eg. 'go run' ... 'run' is the command. Cobra requires +// you to define the usage and description as part of your command +// definition to ensure usability. +type Command struct { + // Name is the command name, usually the executable's name. + name string + // The one-line usage message. + Use string + // An array of aliases that can be used instead of the first word in Use. + Aliases []string + // An array of command names for which this command will be suggested - similar to aliases but only suggests. + SuggestFor []string + // The short description shown in the 'help' output. + Short string + // The long message shown in the 'help ' output. + Long string + // Examples of how to use the command + Example string + // List of all valid non-flag arguments that are accepted in bash completions + ValidArgs []string + // List of aliases for ValidArgs. These are not suggested to the user in the bash + // completion, but accepted if entered manually. + ArgAliases []string + // Custom functions used by the bash autocompletion generator + BashCompletionFunction string + // Is this command deprecated and should print this string when used? + Deprecated string + // Is this command hidden and should NOT show up in the list of available commands? + Hidden bool + // Annotations are key/value pairs that can be used by applications to identify or + // group commands + Annotations map[string]string + // Full set of flags + flags *flag.FlagSet + // Set of flags childrens of this command will inherit + pflags *flag.FlagSet + // Flags that are declared specifically by this command (not inherited). + lflags *flag.FlagSet + // SilenceErrors is an option to quiet errors down stream + SilenceErrors bool + // Silence Usage is an option to silence usage when an error occurs. + SilenceUsage bool + // The *Run functions are executed in the following order: + // * PersistentPreRun() + // * PreRun() + // * Run() + // * PostRun() + // * PersistentPostRun() + // All functions get the same args, the arguments after the command name + // PersistentPreRun: children of this command will inherit and execute + PersistentPreRun func(cmd *Command, args []string) + // PersistentPreRunE: PersistentPreRun but returns an error + PersistentPreRunE func(cmd *Command, args []string) error + // PreRun: children of this command will not inherit. + PreRun func(cmd *Command, args []string) + // PreRunE: PreRun but returns an error + PreRunE func(cmd *Command, args []string) error + // Run: Typically the actual work function. Most commands will only implement this + Run func(cmd *Command, args []string) + // RunE: Run but returns an error + RunE func(cmd *Command, args []string) error + // PostRun: run after the Run command. + PostRun func(cmd *Command, args []string) + // PostRunE: PostRun but returns an error + PostRunE func(cmd *Command, args []string) error + // PersistentPostRun: children of this command will inherit and execute after PostRun + PersistentPostRun func(cmd *Command, args []string) + // PersistentPostRunE: PersistentPostRun but returns an error + PersistentPostRunE func(cmd *Command, args []string) error + // DisableAutoGenTag remove + DisableAutoGenTag bool + // Commands is the list of commands supported by this program. + commands []*Command + // Parent Command for this command + parent *Command + // max lengths of commands' string lengths for use in padding + commandsMaxUseLen int + commandsMaxCommandPathLen int + commandsMaxNameLen int + // is commands slice are sorted or not + commandsAreSorted bool + + flagErrorBuf *bytes.Buffer + + args []string // actual args parsed from flags + output *io.Writer // out writer if set in SetOutput(w) + usageFunc func(*Command) error // Usage can be defined by application + usageTemplate string // Can be defined by Application + flagErrorFunc func(*Command, error) error + helpTemplate string // Can be defined by Application + helpFunc func(*Command, []string) // Help can be defined by application + helpCommand *Command // The help command + // The global normalization function that we can use on every pFlag set and children commands + globNormFunc func(f *flag.FlagSet, name string) flag.NormalizedName + + // Disable the suggestions based on Levenshtein distance that go along with 'unknown command' messages + DisableSuggestions bool + // If displaying suggestions, allows to set the minimum levenshtein distance to display, must be > 0 + SuggestionsMinimumDistance int + + // Disable the flag parsing. If this is true all flags will be passed to the command as arguments. + DisableFlagParsing bool +} + +// SetArgs sets arguments for the command. It is set to os.Args[1:] by default, if desired, can be overridden +// particularly useful when testing. +func (c *Command) SetArgs(a []string) { + c.args = a +} + +// SetOutput sets the destination for usage and error messages. +// If output is nil, os.Stderr is used. +func (c *Command) SetOutput(output io.Writer) { + c.output = &output +} + +// SetUsageFunc sets usage function. Usage can be defined by application. +func (c *Command) SetUsageFunc(f func(*Command) error) { + c.usageFunc = f +} + +// SetUsageTemplate sets usage template. Can be defined by Application. +func (c *Command) SetUsageTemplate(s string) { + c.usageTemplate = s +} + +// SetFlagErrorFunc sets a function to generate an error when flag parsing +// fails. +func (c *Command) SetFlagErrorFunc(f func(*Command, error) error) { + c.flagErrorFunc = f +} + +// SetHelpFunc sets help function. Can be defined by Application. +func (c *Command) SetHelpFunc(f func(*Command, []string)) { + c.helpFunc = f +} + +// SetHelpCommand sets help command. +func (c *Command) SetHelpCommand(cmd *Command) { + c.helpCommand = cmd +} + +// SetHelpTemplate sets help template to be used. Application can use it to set custom template. +func (c *Command) SetHelpTemplate(s string) { + c.helpTemplate = s +} + +// SetGlobalNormalizationFunc sets a normalization function to all flag sets and also to child commands. +// The user should not have a cyclic dependency on commands. +func (c *Command) SetGlobalNormalizationFunc(n func(f *flag.FlagSet, name string) flag.NormalizedName) { + c.Flags().SetNormalizeFunc(n) + c.PersistentFlags().SetNormalizeFunc(n) + c.globNormFunc = n + + for _, command := range c.commands { + command.SetGlobalNormalizationFunc(n) + } +} + +// OutOrStdout returns output to stdout. +func (c *Command) OutOrStdout() io.Writer { + return c.getOut(os.Stdout) +} + +// OutOrStderr returns output to stderr +func (c *Command) OutOrStderr() io.Writer { + return c.getOut(os.Stderr) +} + +func (c *Command) getOut(def io.Writer) io.Writer { + if c.output != nil { + return *c.output + } + if c.HasParent() { + return c.parent.getOut(def) + } + return def +} + +// UsageFunc returns either the function set by SetUsageFunc for this command +// or a parent, or it returns a default usage function. +func (c *Command) UsageFunc() (f func(*Command) error) { + if c.usageFunc != nil { + return c.usageFunc + } + + if c.HasParent() { + return c.parent.UsageFunc() + } + return func(c *Command) error { + c.mergePersistentFlags() + err := tmpl(c.OutOrStderr(), c.UsageTemplate(), c) + if err != nil { + c.Println(err) + } + return err + } +} + +// Usage puts out the usage for the command. +// Used when a user provides invalid input. +// Can be defined by user by overriding UsageFunc. +func (c *Command) Usage() error { + return c.UsageFunc()(c) +} + +// HelpFunc returns either the function set by SetHelpFunc for this command +// or a parent, or it returns a function with default help behavior. +func (c *Command) HelpFunc() func(*Command, []string) { + if helpFunc := c.checkHelpFunc(); helpFunc != nil { + return helpFunc + } + return func(*Command, []string) { + c.mergePersistentFlags() + err := tmpl(c.OutOrStdout(), c.HelpTemplate(), c) + if err != nil { + c.Println(err) + } + } +} + +// checkHelpFunc checks if there is helpFunc in ancestors of c. +func (c *Command) checkHelpFunc() func(*Command, []string) { + if c == nil { + return nil + } + if c.helpFunc != nil { + return c.helpFunc + } + if c.HasParent() { + return c.parent.checkHelpFunc() + } + return nil +} + +// Help puts out the help for the command. +// Used when a user calls help [command]. +// Can be defined by user by overriding HelpFunc. +func (c *Command) Help() error { + c.HelpFunc()(c, []string{}) + return nil +} + +// UsageString return usage string. +func (c *Command) UsageString() string { + tmpOutput := c.output + bb := new(bytes.Buffer) + c.SetOutput(bb) + c.Usage() + c.output = tmpOutput + return bb.String() +} + +// FlagErrorFunc returns either the function set by SetFlagErrorFunc for this +// command or a parent, or it returns a function which returns the original +// error. +func (c *Command) FlagErrorFunc() (f func(*Command, error) error) { + if c.flagErrorFunc != nil { + return c.flagErrorFunc + } + + if c.HasParent() { + return c.parent.FlagErrorFunc() + } + return func(c *Command, err error) error { + return err + } +} + +var minUsagePadding = 25 + +// UsagePadding return padding for the usage. +func (c *Command) UsagePadding() int { + if c.parent == nil || minUsagePadding > c.parent.commandsMaxUseLen { + return minUsagePadding + } + return c.parent.commandsMaxUseLen +} + +var minCommandPathPadding = 11 + +// CommandPathPadding return padding for the command path. +func (c *Command) CommandPathPadding() int { + if c.parent == nil || minCommandPathPadding > c.parent.commandsMaxCommandPathLen { + return minCommandPathPadding + } + return c.parent.commandsMaxCommandPathLen +} + +var minNamePadding = 11 + +// NamePadding returns padding for the name. +func (c *Command) NamePadding() int { + if c.parent == nil || minNamePadding > c.parent.commandsMaxNameLen { + return minNamePadding + } + return c.parent.commandsMaxNameLen +} + +// UsageTemplate returns usage template for the command. +func (c *Command) UsageTemplate() string { + if c.usageTemplate != "" { + return c.usageTemplate + } + + if c.HasParent() { + return c.parent.UsageTemplate() + } + return `Usage:{{if .Runnable}} + {{if .HasAvailableFlags}}{{appendIfNotPresent .UseLine "[flags]"}}{{else}}{{.UseLine}}{{end}}{{end}}{{if .HasAvailableSubCommands}} + {{ .CommandPath}} [command]{{end}}{{if gt .Aliases 0}} + +Aliases: + {{.NameAndAliases}} +{{end}}{{if .HasExample}} + +Examples: +{{ .Example }}{{end}}{{if .HasAvailableSubCommands}} + +Available Commands:{{range .Commands}}{{if (or .IsAvailableCommand (eq .Name "help"))}} + {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}} + +Flags: +{{.LocalFlags.FlagUsages | trimRightSpace}}{{end}}{{if .HasAvailableInheritedFlags}} + +Global Flags: +{{.InheritedFlags.FlagUsages | trimRightSpace}}{{end}}{{if .HasHelpSubCommands}} + +Additional help topics:{{range .Commands}}{{if .IsAdditionalHelpTopicCommand}} + {{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableSubCommands}} + +Use "{{.CommandPath}} [command] --help" for more information about a command.{{end}} +` +} + +// HelpTemplate return help template for the command. +func (c *Command) HelpTemplate() string { + if c.helpTemplate != "" { + return c.helpTemplate + } + + if c.HasParent() { + return c.parent.HelpTemplate() + } + return `{{with or .Long .Short }}{{. | trim}} + +{{end}}{{if or .Runnable .HasSubCommands}}{{.UsageString}}{{end}}` +} + +// Really only used when casting a command to a commander. +func (c *Command) resetChildrensParents() { + for _, x := range c.commands { + x.parent = c + } +} + +func hasNoOptDefVal(name string, f *flag.FlagSet) bool { + flag := f.Lookup(name) + if flag == nil { + return false + } + return len(flag.NoOptDefVal) > 0 +} + +func shortHasNoOptDefVal(name string, fs *flag.FlagSet) bool { + result := false + fs.VisitAll(func(flag *flag.Flag) { + if flag.Shorthand == name && len(flag.NoOptDefVal) > 0 { + result = true + } + }) + return result +} + +func stripFlags(args []string, c *Command) []string { + if len(args) < 1 { + return args + } + c.mergePersistentFlags() + + commands := []string{} + + inQuote := false + inFlag := false + for _, y := range args { + if !inQuote { + switch { + case strings.HasPrefix(y, "\""): + inQuote = true + case strings.Contains(y, "=\""): + inQuote = true + case strings.HasPrefix(y, "--") && !strings.Contains(y, "="): + // TODO: this isn't quite right, we should really check ahead for 'true' or 'false' + inFlag = !hasNoOptDefVal(y[2:], c.Flags()) + case strings.HasPrefix(y, "-") && !strings.Contains(y, "=") && len(y) == 2 && !shortHasNoOptDefVal(y[1:], c.Flags()): + inFlag = true + case inFlag: + inFlag = false + case y == "": + // strip empty commands, as the go tests expect this to be ok.... + case !strings.HasPrefix(y, "-"): + commands = append(commands, y) + inFlag = false + } + } + + if strings.HasSuffix(y, "\"") && !strings.HasSuffix(y, "\\\"") { + inQuote = false + } + } + + return commands +} + +// argsMinusFirstX removes only the first x from args. Otherwise, commands that look like +// openshift admin policy add-role-to-user admin my-user, lose the admin argument (arg[4]). +func argsMinusFirstX(args []string, x string) []string { + for i, y := range args { + if x == y { + ret := []string{} + ret = append(ret, args[:i]...) + ret = append(ret, args[i+1:]...) + return ret + } + } + return args +} + +// Find the target command given the args and command tree +// Meant to be run on the highest node. Only searches down. +func (c *Command) Find(args []string) (*Command, []string, error) { + if c == nil { + return nil, nil, fmt.Errorf("Called find() on a nil Command") + } + + var innerfind func(*Command, []string) (*Command, []string) + + innerfind = func(c *Command, innerArgs []string) (*Command, []string) { + argsWOflags := stripFlags(innerArgs, c) + if len(argsWOflags) == 0 { + return c, innerArgs + } + nextSubCmd := argsWOflags[0] + matches := make([]*Command, 0) + for _, cmd := range c.commands { + if cmd.Name() == nextSubCmd || cmd.HasAlias(nextSubCmd) { // exact name or alias match + return innerfind(cmd, argsMinusFirstX(innerArgs, nextSubCmd)) + } + if EnablePrefixMatching { + if strings.HasPrefix(cmd.Name(), nextSubCmd) { // prefix match + matches = append(matches, cmd) + } + for _, x := range cmd.Aliases { + if strings.HasPrefix(x, nextSubCmd) { + matches = append(matches, cmd) + } + } + } + } + + // only accept a single prefix match - multiple matches would be ambiguous + if len(matches) == 1 { + return innerfind(matches[0], argsMinusFirstX(innerArgs, argsWOflags[0])) + } + + return c, innerArgs + } + + commandFound, a := innerfind(c, args) + argsWOflags := stripFlags(a, commandFound) + + // no subcommand, always take args + if !commandFound.HasSubCommands() { + return commandFound, a, nil + } + + // root command with subcommands, do subcommand checking + if commandFound == c && len(argsWOflags) > 0 { + suggestionsString := "" + if !c.DisableSuggestions { + if c.SuggestionsMinimumDistance <= 0 { + c.SuggestionsMinimumDistance = 2 + } + if suggestions := c.SuggestionsFor(argsWOflags[0]); len(suggestions) > 0 { + suggestionsString += "\n\nDid you mean this?\n" + for _, s := range suggestions { + suggestionsString += fmt.Sprintf("\t%v\n", s) + } + } + } + return commandFound, a, fmt.Errorf("unknown command %q for %q%s", argsWOflags[0], commandFound.CommandPath(), suggestionsString) + } + + return commandFound, a, nil +} + +// SuggestionsFor provides suggestions for the typedName. +func (c *Command) SuggestionsFor(typedName string) []string { + suggestions := []string{} + for _, cmd := range c.commands { + if cmd.IsAvailableCommand() { + levenshteinDistance := ld(typedName, cmd.Name(), true) + suggestByLevenshtein := levenshteinDistance <= c.SuggestionsMinimumDistance + suggestByPrefix := strings.HasPrefix(strings.ToLower(cmd.Name()), strings.ToLower(typedName)) + if suggestByLevenshtein || suggestByPrefix { + suggestions = append(suggestions, cmd.Name()) + } + for _, explicitSuggestion := range cmd.SuggestFor { + if strings.EqualFold(typedName, explicitSuggestion) { + suggestions = append(suggestions, cmd.Name()) + } + } + } + } + return suggestions +} + +// VisitParents visits all parents of the command and invokes fn on each parent. +func (c *Command) VisitParents(fn func(*Command)) { + var traverse func(*Command) *Command + + traverse = func(x *Command) *Command { + if x != c { + fn(x) + } + if x.HasParent() { + return traverse(x.parent) + } + return x + } + traverse(c) +} + +// Root finds root command. +func (c *Command) Root() *Command { + var findRoot func(*Command) *Command + + findRoot = func(x *Command) *Command { + if x.HasParent() { + return findRoot(x.parent) + } + return x + } + + return findRoot(c) +} + +// ArgsLenAtDash will return the length of f.Args at the moment when a -- was +// found during arg parsing. This allows your program to know which args were +// before the -- and which came after. (Description from +// https://godoc.org/github.com/spf13/pflag#FlagSet.ArgsLenAtDash). +func (c *Command) ArgsLenAtDash() int { + return c.Flags().ArgsLenAtDash() +} + +func (c *Command) execute(a []string) (err error) { + if c == nil { + return fmt.Errorf("Called Execute() on a nil Command") + } + + if len(c.Deprecated) > 0 { + c.Printf("Command %q is deprecated, %s\n", c.Name(), c.Deprecated) + } + + // initialize help flag as the last point possible to allow for user + // overriding + c.initHelpFlag() + + err = c.ParseFlags(a) + if err != nil { + return c.FlagErrorFunc()(c, err) + } + // If help is called, regardless of other flags, return we want help + // Also say we need help if the command isn't runnable. + helpVal, err := c.Flags().GetBool("help") + if err != nil { + // should be impossible to get here as we always declare a help + // flag in initHelpFlag() + c.Println("\"help\" flag declared as non-bool. Please correct your code") + return err + } + + if helpVal || !c.Runnable() { + return flag.ErrHelp + } + + c.preRun() + + argWoFlags := c.Flags().Args() + if c.DisableFlagParsing { + argWoFlags = a + } + + for p := c; p != nil; p = p.Parent() { + if p.PersistentPreRunE != nil { + if err := p.PersistentPreRunE(c, argWoFlags); err != nil { + return err + } + break + } else if p.PersistentPreRun != nil { + p.PersistentPreRun(c, argWoFlags) + break + } + } + if c.PreRunE != nil { + if err := c.PreRunE(c, argWoFlags); err != nil { + return err + } + } else if c.PreRun != nil { + c.PreRun(c, argWoFlags) + } + + if c.RunE != nil { + if err := c.RunE(c, argWoFlags); err != nil { + return err + } + } else { + c.Run(c, argWoFlags) + } + if c.PostRunE != nil { + if err := c.PostRunE(c, argWoFlags); err != nil { + return err + } + } else if c.PostRun != nil { + c.PostRun(c, argWoFlags) + } + for p := c; p != nil; p = p.Parent() { + if p.PersistentPostRunE != nil { + if err := p.PersistentPostRunE(c, argWoFlags); err != nil { + return err + } + break + } else if p.PersistentPostRun != nil { + p.PersistentPostRun(c, argWoFlags) + break + } + } + + return nil +} + +func (c *Command) preRun() { + for _, x := range initializers { + x() + } +} + +func (c *Command) errorMsgFromParse() string { + s := c.flagErrorBuf.String() + + x := strings.Split(s, "\n") + + if len(x) > 0 { + return x[0] + } + return "" +} + +// Execute Call execute to use the args (os.Args[1:] by default) +// and run through the command tree finding appropriate matches +// for commands and then corresponding flags. +func (c *Command) Execute() error { + _, err := c.ExecuteC() + return err +} + +// ExecuteC executes the command. +func (c *Command) ExecuteC() (cmd *Command, err error) { + // Regardless of what command execute is called on, run on Root only + if c.HasParent() { + return c.Root().ExecuteC() + } + + // windows hook + if preExecHookFn != nil { + preExecHookFn(c) + } + + // initialize help as the last point possible to allow for user + // overriding + c.initHelpCmd() + + var args []string + + // Workaround FAIL with "go test -v" or "cobra.test -test.v", see #155 + if c.args == nil && filepath.Base(os.Args[0]) != "cobra.test" { + args = os.Args[1:] + } else { + args = c.args + } + + cmd, flags, err := c.Find(args) + if err != nil { + // If found parse to a subcommand and then failed, talk about the subcommand + if cmd != nil { + c = cmd + } + if !c.SilenceErrors { + c.Println("Error:", err.Error()) + c.Printf("Run '%v --help' for usage.\n", c.CommandPath()) + } + return c, err + } + err = cmd.execute(flags) + if err != nil { + // Always show help if requested, even if SilenceErrors is in + // effect + if err == flag.ErrHelp { + cmd.HelpFunc()(cmd, args) + return cmd, nil + } + + // If root command has SilentErrors flagged, + // all subcommands should respect it + if !cmd.SilenceErrors && !c.SilenceErrors { + c.Println("Error:", err.Error()) + } + + // If root command has SilentUsage flagged, + // all subcommands should respect it + if !cmd.SilenceUsage && !c.SilenceUsage { + c.Println(cmd.UsageString()) + } + return cmd, err + } + return cmd, nil +} + +func (c *Command) initHelpFlag() { + c.mergePersistentFlags() + if c.Flags().Lookup("help") == nil { + c.Flags().BoolP("help", "h", false, "help for "+c.Name()) + } +} + +func (c *Command) initHelpCmd() { + if c.helpCommand == nil { + if !c.HasSubCommands() { + return + } + + c.helpCommand = &Command{ + Use: "help [command]", + Short: "Help about any command", + Long: `Help provides help for any command in the application. + Simply type ` + c.Name() + ` help [path to command] for full details.`, + PersistentPreRun: func(cmd *Command, args []string) {}, + PersistentPostRun: func(cmd *Command, args []string) {}, + + Run: func(c *Command, args []string) { + cmd, _, e := c.Root().Find(args) + if cmd == nil || e != nil { + c.Printf("Unknown help topic %#q\n", args) + c.Root().Usage() + } else { + cmd.Help() + } + }, + } + } + c.AddCommand(c.helpCommand) +} + +// ResetCommands used for testing. +func (c *Command) ResetCommands() { + c.commands = nil + c.helpCommand = nil +} + +// Sorts commands by their names. +type commandSorterByName []*Command + +func (c commandSorterByName) Len() int { return len(c) } +func (c commandSorterByName) Swap(i, j int) { c[i], c[j] = c[j], c[i] } +func (c commandSorterByName) Less(i, j int) bool { return c[i].Name() < c[j].Name() } + +// Commands returns a sorted slice of child commands. +func (c *Command) Commands() []*Command { + // do not sort commands if it already sorted or sorting was disabled + if EnableCommandSorting && !c.commandsAreSorted { + sort.Sort(commandSorterByName(c.commands)) + c.commandsAreSorted = true + } + return c.commands +} + +// AddCommand adds one or more commands to this parent command. +func (c *Command) AddCommand(cmds ...*Command) { + for i, x := range cmds { + if cmds[i] == c { + panic("Command can't be a child of itself") + } + cmds[i].parent = c + // update max lengths + usageLen := len(x.Use) + if usageLen > c.commandsMaxUseLen { + c.commandsMaxUseLen = usageLen + } + commandPathLen := len(x.CommandPath()) + if commandPathLen > c.commandsMaxCommandPathLen { + c.commandsMaxCommandPathLen = commandPathLen + } + nameLen := len(x.Name()) + if nameLen > c.commandsMaxNameLen { + c.commandsMaxNameLen = nameLen + } + // If global normalization function exists, update all children + if c.globNormFunc != nil { + x.SetGlobalNormalizationFunc(c.globNormFunc) + } + c.commands = append(c.commands, x) + c.commandsAreSorted = false + } +} + +// RemoveCommand removes one or more commands from a parent command. +func (c *Command) RemoveCommand(cmds ...*Command) { + commands := []*Command{} +main: + for _, command := range c.commands { + for _, cmd := range cmds { + if command == cmd { + command.parent = nil + continue main + } + } + commands = append(commands, command) + } + c.commands = commands + // recompute all lengths + c.commandsMaxUseLen = 0 + c.commandsMaxCommandPathLen = 0 + c.commandsMaxNameLen = 0 + for _, command := range c.commands { + usageLen := len(command.Use) + if usageLen > c.commandsMaxUseLen { + c.commandsMaxUseLen = usageLen + } + commandPathLen := len(command.CommandPath()) + if commandPathLen > c.commandsMaxCommandPathLen { + c.commandsMaxCommandPathLen = commandPathLen + } + nameLen := len(command.Name()) + if nameLen > c.commandsMaxNameLen { + c.commandsMaxNameLen = nameLen + } + } +} + +// Print is a convenience method to Print to the defined output, fallback to Stderr if not set. +func (c *Command) Print(i ...interface{}) { + fmt.Fprint(c.OutOrStderr(), i...) +} + +// Println is a convenience method to Println to the defined output, fallback to Stderr if not set. +func (c *Command) Println(i ...interface{}) { + str := fmt.Sprintln(i...) + c.Print(str) +} + +// Printf is a convenience method to Printf to the defined output, fallback to Stderr if not set. +func (c *Command) Printf(format string, i ...interface{}) { + str := fmt.Sprintf(format, i...) + c.Print(str) +} + +// CommandPath returns the full path to this command. +func (c *Command) CommandPath() string { + str := c.Name() + x := c + for x.HasParent() { + str = x.parent.Name() + " " + str + x = x.parent + } + return str +} + +// UseLine puts out the full usage for a given command (including parents). +func (c *Command) UseLine() string { + str := "" + if c.HasParent() { + str = c.parent.CommandPath() + " " + } + return str + c.Use +} + +// DebugFlags used to determine which flags have been assigned to which commands +// and which persist. +func (c *Command) DebugFlags() { + c.Println("DebugFlags called on", c.Name()) + var debugflags func(*Command) + + debugflags = func(x *Command) { + if x.HasFlags() || x.HasPersistentFlags() { + c.Println(x.Name()) + } + if x.HasFlags() { + x.flags.VisitAll(func(f *flag.Flag) { + if x.HasPersistentFlags() { + if x.persistentFlag(f.Name) == nil { + c.Println(" -"+f.Shorthand+",", "--"+f.Name, "["+f.DefValue+"]", "", f.Value, " [L]") + } else { + c.Println(" -"+f.Shorthand+",", "--"+f.Name, "["+f.DefValue+"]", "", f.Value, " [LP]") + } + } else { + c.Println(" -"+f.Shorthand+",", "--"+f.Name, "["+f.DefValue+"]", "", f.Value, " [L]") + } + }) + } + if x.HasPersistentFlags() { + x.pflags.VisitAll(func(f *flag.Flag) { + if x.HasFlags() { + if x.flags.Lookup(f.Name) == nil { + c.Println(" -"+f.Shorthand+",", "--"+f.Name, "["+f.DefValue+"]", "", f.Value, " [P]") + } + } else { + c.Println(" -"+f.Shorthand+",", "--"+f.Name, "["+f.DefValue+"]", "", f.Value, " [P]") + } + }) + } + c.Println(x.flagErrorBuf) + if x.HasSubCommands() { + for _, y := range x.commands { + debugflags(y) + } + } + } + + debugflags(c) +} + +// Name returns the command's name: the first word in the use line. +func (c *Command) Name() string { + if c.name != "" { + return c.name + } + name := c.Use + i := strings.Index(name, " ") + if i >= 0 { + name = name[:i] + } + c.name = name + return c.name +} + +// HasAlias determines if a given string is an alias of the command. +func (c *Command) HasAlias(s string) bool { + for _, a := range c.Aliases { + if a == s { + return true + } + } + return false +} + +// NameAndAliases returns string containing name and all aliases +func (c *Command) NameAndAliases() string { + return strings.Join(append([]string{c.Name()}, c.Aliases...), ", ") +} + +// HasExample determines if the command has example. +func (c *Command) HasExample() bool { + return len(c.Example) > 0 +} + +// Runnable determines if the command is itself runnable. +func (c *Command) Runnable() bool { + return c.Run != nil || c.RunE != nil +} + +// HasSubCommands determines if the command has children commands. +func (c *Command) HasSubCommands() bool { + return len(c.commands) > 0 +} + +// IsAvailableCommand determines if a command is available as a non-help command +// (this includes all non deprecated/hidden commands). +func (c *Command) IsAvailableCommand() bool { + if len(c.Deprecated) != 0 || c.Hidden { + return false + } + + if c.HasParent() && c.Parent().helpCommand == c { + return false + } + + if c.Runnable() || c.HasAvailableSubCommands() { + return true + } + + return false +} + +// IsAdditionalHelpTopicCommand determines if a command is an additional +// help topic command; additional help topic command is determined by the +// fact that it is NOT runnable/hidden/deprecated, and has no sub commands that +// are runnable/hidden/deprecated. +// Concrete example: https://github.com/spf13/cobra/issues/393#issuecomment-282741924. +func (c *Command) IsAdditionalHelpTopicCommand() bool { + // if a command is runnable, deprecated, or hidden it is not a 'help' command + if c.Runnable() || len(c.Deprecated) != 0 || c.Hidden { + return false + } + + // if any non-help sub commands are found, the command is not a 'help' command + for _, sub := range c.commands { + if !sub.IsAdditionalHelpTopicCommand() { + return false + } + } + + // the command either has no sub commands, or no non-help sub commands + return true +} + +// HasHelpSubCommands determines if a command has any available 'help' sub commands +// that need to be shown in the usage/help default template under 'additional help +// topics'. +func (c *Command) HasHelpSubCommands() bool { + // return true on the first found available 'help' sub command + for _, sub := range c.commands { + if sub.IsAdditionalHelpTopicCommand() { + return true + } + } + + // the command either has no sub commands, or no available 'help' sub commands + return false +} + +// HasAvailableSubCommands determines if a command has available sub commands that +// need to be shown in the usage/help default template under 'available commands'. +func (c *Command) HasAvailableSubCommands() bool { + // return true on the first found available (non deprecated/help/hidden) + // sub command + for _, sub := range c.commands { + if sub.IsAvailableCommand() { + return true + } + } + + // the command either has no sub comamnds, or no available (non deprecated/help/hidden) + // sub commands + return false +} + +// HasParent determines if the command is a child command. +func (c *Command) HasParent() bool { + return c.parent != nil +} + +// GlobalNormalizationFunc returns the global normalization function or nil if doesn't exists. +func (c *Command) GlobalNormalizationFunc() func(f *flag.FlagSet, name string) flag.NormalizedName { + return c.globNormFunc +} + +// Flags returns the complete FlagSet that applies +// to this command (local and persistent declared here and by all parents). +func (c *Command) Flags() *flag.FlagSet { + if c.flags == nil { + c.flags = flag.NewFlagSet(c.Name(), flag.ContinueOnError) + if c.flagErrorBuf == nil { + c.flagErrorBuf = new(bytes.Buffer) + } + c.flags.SetOutput(c.flagErrorBuf) + } + return c.flags +} + +// LocalNonPersistentFlags are flags specific to this command which will NOT persist to subcommands. +func (c *Command) LocalNonPersistentFlags() *flag.FlagSet { + persistentFlags := c.PersistentFlags() + + out := flag.NewFlagSet(c.Name(), flag.ContinueOnError) + c.LocalFlags().VisitAll(func(f *flag.Flag) { + if persistentFlags.Lookup(f.Name) == nil { + out.AddFlag(f) + } + }) + return out +} + +// LocalFlags returns the local FlagSet specifically set in the current command. +func (c *Command) LocalFlags() *flag.FlagSet { + c.mergePersistentFlags() + + local := flag.NewFlagSet(c.Name(), flag.ContinueOnError) + c.lflags.VisitAll(func(f *flag.Flag) { + local.AddFlag(f) + }) + if !c.HasParent() { + flag.CommandLine.VisitAll(func(f *flag.Flag) { + if local.Lookup(f.Name) == nil { + local.AddFlag(f) + } + }) + } + return local +} + +// InheritedFlags returns all flags which were inherited from parents commands. +func (c *Command) InheritedFlags() *flag.FlagSet { + c.mergePersistentFlags() + + inherited := flag.NewFlagSet(c.Name(), flag.ContinueOnError) + local := c.LocalFlags() + + var rmerge func(x *Command) + + rmerge = func(x *Command) { + if x.HasPersistentFlags() { + x.PersistentFlags().VisitAll(func(f *flag.Flag) { + if inherited.Lookup(f.Name) == nil && local.Lookup(f.Name) == nil { + inherited.AddFlag(f) + } + }) + } + if x.HasParent() { + rmerge(x.parent) + } + } + + if c.HasParent() { + rmerge(c.parent) + } + + return inherited +} + +// NonInheritedFlags returns all flags which were not inherited from parent commands. +func (c *Command) NonInheritedFlags() *flag.FlagSet { + return c.LocalFlags() +} + +// PersistentFlags returns the persistent FlagSet specifically set in the current command. +func (c *Command) PersistentFlags() *flag.FlagSet { + if c.pflags == nil { + c.pflags = flag.NewFlagSet(c.Name(), flag.ContinueOnError) + if c.flagErrorBuf == nil { + c.flagErrorBuf = new(bytes.Buffer) + } + c.pflags.SetOutput(c.flagErrorBuf) + } + return c.pflags +} + +// ResetFlags is used in testing. +func (c *Command) ResetFlags() { + c.flagErrorBuf = new(bytes.Buffer) + c.flagErrorBuf.Reset() + c.flags = flag.NewFlagSet(c.Name(), flag.ContinueOnError) + c.flags.SetOutput(c.flagErrorBuf) + c.pflags = flag.NewFlagSet(c.Name(), flag.ContinueOnError) + c.pflags.SetOutput(c.flagErrorBuf) +} + +// HasFlags checks if the command contains any flags (local plus persistent from the entire structure). +func (c *Command) HasFlags() bool { + return c.Flags().HasFlags() +} + +// HasPersistentFlags checks if the command contains persistent flags. +func (c *Command) HasPersistentFlags() bool { + return c.PersistentFlags().HasFlags() +} + +// HasLocalFlags checks if the command has flags specifically declared locally. +func (c *Command) HasLocalFlags() bool { + return c.LocalFlags().HasFlags() +} + +// HasInheritedFlags checks if the command has flags inherited from its parent command. +func (c *Command) HasInheritedFlags() bool { + return c.InheritedFlags().HasFlags() +} + +// HasAvailableFlags checks if the command contains any flags (local plus persistent from the entire +// structure) which are not hidden or deprecated. +func (c *Command) HasAvailableFlags() bool { + return c.Flags().HasAvailableFlags() +} + +// HasAvailablePersistentFlags checks if the command contains persistent flags which are not hidden or deprecated. +func (c *Command) HasAvailablePersistentFlags() bool { + return c.PersistentFlags().HasAvailableFlags() +} + +// HasAvailableLocalFlags checks if the command has flags specifically declared locally which are not hidden +// or deprecated. +func (c *Command) HasAvailableLocalFlags() bool { + return c.LocalFlags().HasAvailableFlags() +} + +// HasAvailableInheritedFlags checks if the command has flags inherited from its parent command which are +// not hidden or deprecated. +func (c *Command) HasAvailableInheritedFlags() bool { + return c.InheritedFlags().HasAvailableFlags() +} + +// Flag climbs up the command tree looking for matching flag. +func (c *Command) Flag(name string) (flag *flag.Flag) { + flag = c.Flags().Lookup(name) + + if flag == nil { + flag = c.persistentFlag(name) + } + + return +} + +// Recursively find matching persistent flag. +func (c *Command) persistentFlag(name string) (flag *flag.Flag) { + if c.HasPersistentFlags() { + flag = c.PersistentFlags().Lookup(name) + } + + if flag == nil && c.HasParent() { + flag = c.parent.persistentFlag(name) + } + return +} + +// ParseFlags parses persistent flag tree and local flags. +func (c *Command) ParseFlags(args []string) (err error) { + if c.DisableFlagParsing { + return nil + } + c.mergePersistentFlags() + err = c.Flags().Parse(args) + return +} + +// Parent returns a commands parent command. +func (c *Command) Parent() *Command { + return c.parent +} + +func (c *Command) mergePersistentFlags() { + var rmerge func(x *Command) + + // Save the set of local flags + if c.lflags == nil { + c.lflags = flag.NewFlagSet(c.Name(), flag.ContinueOnError) + if c.flagErrorBuf == nil { + c.flagErrorBuf = new(bytes.Buffer) + } + c.lflags.SetOutput(c.flagErrorBuf) + addtolocal := func(f *flag.Flag) { + c.lflags.AddFlag(f) + } + c.Flags().VisitAll(addtolocal) + c.PersistentFlags().VisitAll(addtolocal) + } + rmerge = func(x *Command) { + if !x.HasParent() { + flag.CommandLine.VisitAll(func(f *flag.Flag) { + if x.PersistentFlags().Lookup(f.Name) == nil { + x.PersistentFlags().AddFlag(f) + } + }) + } + if x.HasPersistentFlags() { + x.PersistentFlags().VisitAll(func(f *flag.Flag) { + if c.Flags().Lookup(f.Name) == nil { + c.Flags().AddFlag(f) + } + }) + } + if x.HasParent() { + rmerge(x.parent) + } + } + + rmerge(c) +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/cobra/command_notwin.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/cobra/command_notwin.go new file mode 100644 index 0000000..6159c1c --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/cobra/command_notwin.go @@ -0,0 +1,5 @@ +// +build !windows + +package cobra + +var preExecHookFn func(*Command) diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/cobra/command_win.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/cobra/command_win.go new file mode 100644 index 0000000..4b0eaa1 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/cobra/command_win.go @@ -0,0 +1,26 @@ +// +build windows + +package cobra + +import ( + "os" + "time" + + "github.com/inconshreveable/mousetrap" +) + +var preExecHookFn = preExecHook + +// enables an information splash screen on Windows if the CLI is started from explorer.exe. +var MousetrapHelpText string = `This is a command line tool + +You need to open cmd.exe and run it from there. +` + +func preExecHook(c *Command) { + if mousetrap.StartedByExplorer() { + c.Print(MousetrapHelpText) + time.Sleep(5 * time.Second) + os.Exit(1) + } +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/cobra/doc/man_docs.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/cobra/doc/man_docs.go new file mode 100644 index 0000000..b9266c3 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/cobra/doc/man_docs.go @@ -0,0 +1,231 @@ +// Copyright 2015 Red Hat Inc. All rights reserved. +// +// 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 doc + +import ( + "bytes" + "fmt" + "io" + "os" + "path/filepath" + "sort" + "strings" + "time" + + mangen "github.com/cpuguy83/go-md2man/md2man" + "github.com/spf13/cobra" + "github.com/spf13/pflag" +) + +// GenManTree will generate a man page for this command and all descendants +// in the directory given. The header may be nil. This function may not work +// correctly if your command names have - in them. If you have `cmd` with two +// subcmds, `sub` and `sub-third`. And `sub` has a subcommand called `third` +// it is undefined which help output will be in the file `cmd-sub-third.1`. +func GenManTree(cmd *cobra.Command, header *GenManHeader, dir string) error { + return GenManTreeFromOpts(cmd, GenManTreeOptions{ + Header: header, + Path: dir, + CommandSeparator: "-", + }) +} + +// GenManTreeFromOpts generates a man page for the command and all descendants. +// The pages are written to the opts.Path directory. +func GenManTreeFromOpts(cmd *cobra.Command, opts GenManTreeOptions) error { + header := opts.Header + if header == nil { + header = &GenManHeader{} + } + for _, c := range cmd.Commands() { + if !c.IsAvailableCommand() || c.IsAdditionalHelpTopicCommand() { + continue + } + if err := GenManTreeFromOpts(c, opts); err != nil { + return err + } + } + section := "1" + if header.Section != "" { + section = header.Section + } + + separator := "_" + if opts.CommandSeparator != "" { + separator = opts.CommandSeparator + } + basename := strings.Replace(cmd.CommandPath(), " ", separator, -1) + filename := filepath.Join(opts.Path, basename+"."+section) + f, err := os.Create(filename) + if err != nil { + return err + } + defer f.Close() + + headerCopy := *header + return GenMan(cmd, &headerCopy, f) +} + +type GenManTreeOptions struct { + Header *GenManHeader + Path string + CommandSeparator string +} + +// GenManHeader is a lot like the .TH header at the start of man pages. These +// include the title, section, date, source, and manual. We will use the +// current time if Date if unset and will use "Auto generated by spf13/cobra" +// if the Source is unset. +type GenManHeader struct { + Title string + Section string + Date *time.Time + date string + Source string + Manual string +} + +// GenMan will generate a man page for the given command and write it to +// w. The header argument may be nil, however obviously w may not. +func GenMan(cmd *cobra.Command, header *GenManHeader, w io.Writer) error { + if header == nil { + header = &GenManHeader{} + } + fillHeader(header, cmd.CommandPath()) + + b := genMan(cmd, header) + _, err := w.Write(mangen.Render(b)) + return err +} + +func fillHeader(header *GenManHeader, name string) { + if header.Title == "" { + header.Title = strings.ToUpper(strings.Replace(name, " ", "\\-", -1)) + } + if header.Section == "" { + header.Section = "1" + } + if header.Date == nil { + now := time.Now() + header.Date = &now + } + header.date = (*header.Date).Format("Jan 2006") + if header.Source == "" { + header.Source = "Auto generated by spf13/cobra" + } +} + +func manPreamble(out io.Writer, header *GenManHeader, cmd *cobra.Command, dashedName string) { + description := cmd.Long + if len(description) == 0 { + description = cmd.Short + } + + fmt.Fprintf(out, `%% %s(%s)%s +%% %s +%% %s +# NAME +`, header.Title, header.Section, header.date, header.Source, header.Manual) + fmt.Fprintf(out, "%s \\- %s\n\n", dashedName, cmd.Short) + fmt.Fprintf(out, "# SYNOPSIS\n") + fmt.Fprintf(out, "**%s**\n\n", cmd.UseLine()) + fmt.Fprintf(out, "# DESCRIPTION\n") + fmt.Fprintf(out, "%s\n\n", description) +} + +func manPrintFlags(out io.Writer, flags *pflag.FlagSet) { + flags.VisitAll(func(flag *pflag.Flag) { + if len(flag.Deprecated) > 0 || flag.Hidden { + return + } + format := "" + if len(flag.Shorthand) > 0 && len(flag.ShorthandDeprecated) == 0 { + format = fmt.Sprintf("**-%s**, **--%s**", flag.Shorthand, flag.Name) + } else { + format = fmt.Sprintf("**--%s**", flag.Name) + } + if len(flag.NoOptDefVal) > 0 { + format = format + "[" + } + if flag.Value.Type() == "string" { + // put quotes on the value + format = format + "=%q" + } else { + format = format + "=%s" + } + if len(flag.NoOptDefVal) > 0 { + format = format + "]" + } + format = format + "\n\t%s\n\n" + fmt.Fprintf(out, format, flag.DefValue, flag.Usage) + }) +} + +func manPrintOptions(out io.Writer, command *cobra.Command) { + flags := command.NonInheritedFlags() + if flags.HasFlags() { + fmt.Fprintf(out, "# OPTIONS\n") + manPrintFlags(out, flags) + fmt.Fprintf(out, "\n") + } + flags = command.InheritedFlags() + if flags.HasFlags() { + fmt.Fprintf(out, "# OPTIONS INHERITED FROM PARENT COMMANDS\n") + manPrintFlags(out, flags) + fmt.Fprintf(out, "\n") + } +} + +func genMan(cmd *cobra.Command, header *GenManHeader) []byte { + // something like `rootcmd-subcmd1-subcmd2` + dashCommandName := strings.Replace(cmd.CommandPath(), " ", "-", -1) + + buf := new(bytes.Buffer) + + manPreamble(buf, header, cmd, dashCommandName) + manPrintOptions(buf, cmd) + if len(cmd.Example) > 0 { + fmt.Fprintf(buf, "# EXAMPLE\n") + fmt.Fprintf(buf, "```\n%s\n```\n", cmd.Example) + } + if hasSeeAlso(cmd) { + fmt.Fprintf(buf, "# SEE ALSO\n") + seealsos := make([]string, 0) + if cmd.HasParent() { + parentPath := cmd.Parent().CommandPath() + dashParentPath := strings.Replace(parentPath, " ", "-", -1) + seealso := fmt.Sprintf("**%s(%s)**", dashParentPath, header.Section) + seealsos = append(seealsos, seealso) + cmd.VisitParents(func(c *cobra.Command) { + if c.DisableAutoGenTag { + cmd.DisableAutoGenTag = c.DisableAutoGenTag + } + }) + } + children := cmd.Commands() + sort.Sort(byName(children)) + for _, c := range children { + if !c.IsAvailableCommand() || c.IsAdditionalHelpTopicCommand() { + continue + } + seealso := fmt.Sprintf("**%s-%s(%s)**", dashCommandName, c.Name(), header.Section) + seealsos = append(seealsos, seealso) + } + fmt.Fprintf(buf, "%s\n", strings.Join(seealsos, ", ")) + } + if !cmd.DisableAutoGenTag { + fmt.Fprintf(buf, "# HISTORY\n%s Auto generated by spf13/cobra\n", header.Date.Format("2-Jan-2006")) + } + return buf.Bytes() +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/cobra/doc/md_docs.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/cobra/doc/md_docs.go new file mode 100644 index 0000000..8d159c1 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/cobra/doc/md_docs.go @@ -0,0 +1,175 @@ +//Copyright 2015 Red Hat Inc. All rights reserved. +// +// 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 doc + +import ( + "fmt" + "io" + "os" + "path/filepath" + "sort" + "strings" + "time" + + "github.com/spf13/cobra" +) + +func printOptions(w io.Writer, cmd *cobra.Command, name string) error { + flags := cmd.NonInheritedFlags() + flags.SetOutput(w) + if flags.HasFlags() { + if _, err := fmt.Fprintf(w, "### Options\n\n```\n"); err != nil { + return err + } + flags.PrintDefaults() + if _, err := fmt.Fprintf(w, "```\n\n"); err != nil { + return err + } + } + + parentFlags := cmd.InheritedFlags() + parentFlags.SetOutput(w) + if parentFlags.HasFlags() { + if _, err := fmt.Fprintf(w, "### Options inherited from parent commands\n\n```\n"); err != nil { + return err + } + parentFlags.PrintDefaults() + if _, err := fmt.Fprintf(w, "```\n\n"); err != nil { + return err + } + } + return nil +} + +func GenMarkdown(cmd *cobra.Command, w io.Writer) error { + return GenMarkdownCustom(cmd, w, func(s string) string { return s }) +} + +func GenMarkdownCustom(cmd *cobra.Command, w io.Writer, linkHandler func(string) string) error { + name := cmd.CommandPath() + + short := cmd.Short + long := cmd.Long + if len(long) == 0 { + long = short + } + + if _, err := fmt.Fprintf(w, "## %s\n\n", name); err != nil { + return err + } + if _, err := fmt.Fprintf(w, "%s\n\n", short); err != nil { + return err + } + if _, err := fmt.Fprintf(w, "### Synopsis\n\n"); err != nil { + return err + } + if _, err := fmt.Fprintf(w, "\n%s\n\n", long); err != nil { + return err + } + + if cmd.Runnable() { + if _, err := fmt.Fprintf(w, "```\n%s\n```\n\n", cmd.UseLine()); err != nil { + return err + } + } + + if len(cmd.Example) > 0 { + if _, err := fmt.Fprintf(w, "### Examples\n\n"); err != nil { + return err + } + if _, err := fmt.Fprintf(w, "```\n%s\n```\n\n", cmd.Example); err != nil { + return err + } + } + + if err := printOptions(w, cmd, name); err != nil { + return err + } + if hasSeeAlso(cmd) { + if _, err := fmt.Fprintf(w, "### SEE ALSO\n"); err != nil { + return err + } + if cmd.HasParent() { + parent := cmd.Parent() + pname := parent.CommandPath() + link := pname + ".md" + link = strings.Replace(link, " ", "_", -1) + if _, err := fmt.Fprintf(w, "* [%s](%s)\t - %s\n", pname, linkHandler(link), parent.Short); err != nil { + return err + } + cmd.VisitParents(func(c *cobra.Command) { + if c.DisableAutoGenTag { + cmd.DisableAutoGenTag = c.DisableAutoGenTag + } + }) + } + + children := cmd.Commands() + sort.Sort(byName(children)) + + for _, child := range children { + if !child.IsAvailableCommand() || child.IsAdditionalHelpTopicCommand() { + continue + } + cname := name + " " + child.Name() + link := cname + ".md" + link = strings.Replace(link, " ", "_", -1) + if _, err := fmt.Fprintf(w, "* [%s](%s)\t - %s\n", cname, linkHandler(link), child.Short); err != nil { + return err + } + } + if _, err := fmt.Fprintf(w, "\n"); err != nil { + return err + } + } + if !cmd.DisableAutoGenTag { + if _, err := fmt.Fprintf(w, "###### Auto generated by spf13/cobra on %s\n", time.Now().Format("2-Jan-2006")); err != nil { + return err + } + } + return nil +} + +func GenMarkdownTree(cmd *cobra.Command, dir string) error { + identity := func(s string) string { return s } + emptyStr := func(s string) string { return "" } + return GenMarkdownTreeCustom(cmd, dir, emptyStr, identity) +} + +func GenMarkdownTreeCustom(cmd *cobra.Command, dir string, filePrepender, linkHandler func(string) string) error { + for _, c := range cmd.Commands() { + if !c.IsAvailableCommand() || c.IsAdditionalHelpTopicCommand() { + continue + } + if err := GenMarkdownTreeCustom(c, dir, filePrepender, linkHandler); err != nil { + return err + } + } + + basename := strings.Replace(cmd.CommandPath(), " ", "_", -1) + ".md" + filename := filepath.Join(dir, basename) + f, err := os.Create(filename) + if err != nil { + return err + } + defer f.Close() + + if _, err := io.WriteString(f, filePrepender(filename)); err != nil { + return err + } + if err := GenMarkdownCustom(cmd, f, linkHandler); err != nil { + return err + } + return nil +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/cobra/doc/util.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/cobra/doc/util.go new file mode 100644 index 0000000..8d3dbec --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/cobra/doc/util.go @@ -0,0 +1,51 @@ +// Copyright 2015 Red Hat Inc. All rights reserved. +// +// 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 doc + +import ( + "strings" + + "github.com/spf13/cobra" +) + +// Test to see if we have a reason to print See Also information in docs +// Basically this is a test for a parent commend or a subcommand which is +// both not deprecated and not the autogenerated help command. +func hasSeeAlso(cmd *cobra.Command) bool { + if cmd.HasParent() { + return true + } + for _, c := range cmd.Commands() { + if !c.IsAvailableCommand() || c.IsAdditionalHelpTopicCommand() { + continue + } + return true + } + return false +} + +// Temporary workaround for yaml lib generating incorrect yaml with long strings +// that do not contain \n. +func forceMultiLine(s string) string { + if len(s) > 60 && !strings.Contains(s, "\n") { + s = s + "\n" + } + return s +} + +type byName []*cobra.Command + +func (s byName) Len() int { return len(s) } +func (s byName) Swap(i, j int) { s[i], s[j] = s[j], s[i] } +func (s byName) Less(i, j int) bool { return s[i].Name() < s[j].Name() } diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/cobra/doc/yaml_docs.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/cobra/doc/yaml_docs.go new file mode 100644 index 0000000..ac8db89 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/cobra/doc/yaml_docs.go @@ -0,0 +1,165 @@ +// Copyright 2016 French Ben. All rights reserved. +// +// 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 doc + +import ( + "fmt" + "io" + "os" + "path/filepath" + "sort" + "strings" + + "github.com/spf13/cobra" + "github.com/spf13/pflag" + "gopkg.in/yaml.v2" +) + +type cmdOption struct { + Name string + Shorthand string `yaml:",omitempty"` + DefaultValue string `yaml:"default_value,omitempty"` + Usage string `yaml:",omitempty"` +} + +type cmdDoc struct { + Name string + Synopsis string `yaml:",omitempty"` + Description string `yaml:",omitempty"` + Options []cmdOption `yaml:",omitempty"` + InheritedOptions []cmdOption `yaml:"inherited_options,omitempty"` + Example string `yaml:",omitempty"` + SeeAlso []string `yaml:"see_also,omitempty"` +} + +// GenYamlTree creates yaml structured ref files for this command and all descendants +// in the directory given. This function may not work +// correctly if your command names have - in them. If you have `cmd` with two +// subcmds, `sub` and `sub-third`. And `sub` has a subcommand called `third` +// it is undefined which help output will be in the file `cmd-sub-third.1`. +func GenYamlTree(cmd *cobra.Command, dir string) error { + identity := func(s string) string { return s } + emptyStr := func(s string) string { return "" } + return GenYamlTreeCustom(cmd, dir, emptyStr, identity) +} + +// GenYamlTreeCustom creates yaml structured ref files +func GenYamlTreeCustom(cmd *cobra.Command, dir string, filePrepender, linkHandler func(string) string) error { + for _, c := range cmd.Commands() { + if !c.IsAvailableCommand() || c.IsAdditionalHelpTopicCommand() { + continue + } + if err := GenYamlTreeCustom(c, dir, filePrepender, linkHandler); err != nil { + return err + } + } + + basename := strings.Replace(cmd.CommandPath(), " ", "_", -1) + ".yaml" + filename := filepath.Join(dir, basename) + f, err := os.Create(filename) + if err != nil { + return err + } + defer f.Close() + + if _, err := io.WriteString(f, filePrepender(filename)); err != nil { + return err + } + if err := GenYamlCustom(cmd, f, linkHandler); err != nil { + return err + } + return nil +} + +// GenYaml creates yaml output +func GenYaml(cmd *cobra.Command, w io.Writer) error { + return GenYamlCustom(cmd, w, func(s string) string { return s }) +} + +// GenYamlCustom creates custom yaml output +func GenYamlCustom(cmd *cobra.Command, w io.Writer, linkHandler func(string) string) error { + yamlDoc := cmdDoc{} + yamlDoc.Name = cmd.CommandPath() + + yamlDoc.Synopsis = forceMultiLine(cmd.Short) + yamlDoc.Description = forceMultiLine(cmd.Long) + + if len(cmd.Example) > 0 { + yamlDoc.Example = cmd.Example + } + + flags := cmd.NonInheritedFlags() + if flags.HasFlags() { + yamlDoc.Options = genFlagResult(flags) + } + flags = cmd.InheritedFlags() + if flags.HasFlags() { + yamlDoc.InheritedOptions = genFlagResult(flags) + } + + if hasSeeAlso(cmd) { + result := []string{} + if cmd.HasParent() { + parent := cmd.Parent() + result = append(result, parent.CommandPath()+" - "+parent.Short) + } + children := cmd.Commands() + sort.Sort(byName(children)) + for _, child := range children { + if !child.IsAvailableCommand() || child.IsAdditionalHelpTopicCommand() { + continue + } + result = append(result, child.Name()+" - "+child.Short) + } + yamlDoc.SeeAlso = result + } + + final, err := yaml.Marshal(&yamlDoc) + if err != nil { + fmt.Println(err) + os.Exit(1) + } + if _, err := fmt.Fprintf(w, string(final)); err != nil { + return err + } + return nil +} + +func genFlagResult(flags *pflag.FlagSet) []cmdOption { + var result []cmdOption + + flags.VisitAll(func(flag *pflag.Flag) { + // Todo, when we mark a shorthand is deprecated, but specify an empty message. + // The flag.ShorthandDeprecated is empty as the shorthand is deprecated. + // Using len(flag.ShorthandDeprecated) > 0 can't handle this, others are ok. + if !(len(flag.ShorthandDeprecated) > 0) && len(flag.Shorthand) > 0 { + opt := cmdOption{ + flag.Name, + flag.Shorthand, + flag.DefValue, + forceMultiLine(flag.Usage), + } + result = append(result, opt) + } else { + opt := cmdOption{ + Name: flag.Name, + DefaultValue: forceMultiLine(flag.DefValue), + Usage: forceMultiLine(flag.Usage), + } + result = append(result, opt) + } + }) + + return result +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/LICENSE b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/LICENSE new file mode 100644 index 0000000..63ed1cf --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/LICENSE @@ -0,0 +1,28 @@ +Copyright (c) 2012 Alex Ogier. All rights reserved. +Copyright (c) 2012 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/bool.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/bool.go new file mode 100644 index 0000000..c4c5c0b --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/bool.go @@ -0,0 +1,94 @@ +package pflag + +import "strconv" + +// optional interface to indicate boolean flags that can be +// supplied without "=value" text +type boolFlag interface { + Value + IsBoolFlag() bool +} + +// -- bool Value +type boolValue bool + +func newBoolValue(val bool, p *bool) *boolValue { + *p = val + return (*boolValue)(p) +} + +func (b *boolValue) Set(s string) error { + v, err := strconv.ParseBool(s) + *b = boolValue(v) + return err +} + +func (b *boolValue) Type() string { + return "bool" +} + +func (b *boolValue) String() string { return strconv.FormatBool(bool(*b)) } + +func (b *boolValue) IsBoolFlag() bool { return true } + +func boolConv(sval string) (interface{}, error) { + return strconv.ParseBool(sval) +} + +// GetBool return the bool value of a flag with the given name +func (f *FlagSet) GetBool(name string) (bool, error) { + val, err := f.getFlagType(name, "bool", boolConv) + if err != nil { + return false, err + } + return val.(bool), nil +} + +// BoolVar defines a bool flag with specified name, default value, and usage string. +// The argument p points to a bool variable in which to store the value of the flag. +func (f *FlagSet) BoolVar(p *bool, name string, value bool, usage string) { + f.BoolVarP(p, name, "", value, usage) +} + +// BoolVarP is like BoolVar, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) BoolVarP(p *bool, name, shorthand string, value bool, usage string) { + flag := f.VarPF(newBoolValue(value, p), name, shorthand, usage) + flag.NoOptDefVal = "true" +} + +// BoolVar defines a bool flag with specified name, default value, and usage string. +// The argument p points to a bool variable in which to store the value of the flag. +func BoolVar(p *bool, name string, value bool, usage string) { + BoolVarP(p, name, "", value, usage) +} + +// BoolVarP is like BoolVar, but accepts a shorthand letter that can be used after a single dash. +func BoolVarP(p *bool, name, shorthand string, value bool, usage string) { + flag := CommandLine.VarPF(newBoolValue(value, p), name, shorthand, usage) + flag.NoOptDefVal = "true" +} + +// Bool defines a bool flag with specified name, default value, and usage string. +// The return value is the address of a bool variable that stores the value of the flag. +func (f *FlagSet) Bool(name string, value bool, usage string) *bool { + return f.BoolP(name, "", value, usage) +} + +// BoolP is like Bool, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) BoolP(name, shorthand string, value bool, usage string) *bool { + p := new(bool) + f.BoolVarP(p, name, shorthand, value, usage) + return p +} + +// Bool defines a bool flag with specified name, default value, and usage string. +// The return value is the address of a bool variable that stores the value of the flag. +func Bool(name string, value bool, usage string) *bool { + return BoolP(name, "", value, usage) +} + +// BoolP is like Bool, but accepts a shorthand letter that can be used after a single dash. +func BoolP(name, shorthand string, value bool, usage string) *bool { + b := CommandLine.BoolP(name, shorthand, value, usage) + return b +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/bool_slice.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/bool_slice.go new file mode 100644 index 0000000..5af02f1 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/bool_slice.go @@ -0,0 +1,147 @@ +package pflag + +import ( + "io" + "strconv" + "strings" +) + +// -- boolSlice Value +type boolSliceValue struct { + value *[]bool + changed bool +} + +func newBoolSliceValue(val []bool, p *[]bool) *boolSliceValue { + bsv := new(boolSliceValue) + bsv.value = p + *bsv.value = val + return bsv +} + +// Set converts, and assigns, the comma-separated boolean argument string representation as the []bool value of this flag. +// If Set is called on a flag that already has a []bool assigned, the newly converted values will be appended. +func (s *boolSliceValue) Set(val string) error { + + // remove all quote characters + rmQuote := strings.NewReplacer(`"`, "", `'`, "", "`", "") + + // read flag arguments with CSV parser + boolStrSlice, err := readAsCSV(rmQuote.Replace(val)) + if err != nil && err != io.EOF { + return err + } + + // parse boolean values into slice + out := make([]bool, 0, len(boolStrSlice)) + for _, boolStr := range boolStrSlice { + b, err := strconv.ParseBool(strings.TrimSpace(boolStr)) + if err != nil { + return err + } + out = append(out, b) + } + + if !s.changed { + *s.value = out + } else { + *s.value = append(*s.value, out...) + } + + s.changed = true + + return nil +} + +// Type returns a string that uniquely represents this flag's type. +func (s *boolSliceValue) Type() string { + return "boolSlice" +} + +// String defines a "native" format for this boolean slice flag value. +func (s *boolSliceValue) String() string { + + boolStrSlice := make([]string, len(*s.value)) + for i, b := range *s.value { + boolStrSlice[i] = strconv.FormatBool(b) + } + + out, _ := writeAsCSV(boolStrSlice) + + return "[" + out + "]" +} + +func boolSliceConv(val string) (interface{}, error) { + val = strings.Trim(val, "[]") + // Empty string would cause a slice with one (empty) entry + if len(val) == 0 { + return []bool{}, nil + } + ss := strings.Split(val, ",") + out := make([]bool, len(ss)) + for i, t := range ss { + var err error + out[i], err = strconv.ParseBool(t) + if err != nil { + return nil, err + } + } + return out, nil +} + +// GetBoolSlice returns the []bool value of a flag with the given name. +func (f *FlagSet) GetBoolSlice(name string) ([]bool, error) { + val, err := f.getFlagType(name, "boolSlice", boolSliceConv) + if err != nil { + return []bool{}, err + } + return val.([]bool), nil +} + +// BoolSliceVar defines a boolSlice flag with specified name, default value, and usage string. +// The argument p points to a []bool variable in which to store the value of the flag. +func (f *FlagSet) BoolSliceVar(p *[]bool, name string, value []bool, usage string) { + f.VarP(newBoolSliceValue(value, p), name, "", usage) +} + +// BoolSliceVarP is like BoolSliceVar, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) BoolSliceVarP(p *[]bool, name, shorthand string, value []bool, usage string) { + f.VarP(newBoolSliceValue(value, p), name, shorthand, usage) +} + +// BoolSliceVar defines a []bool flag with specified name, default value, and usage string. +// The argument p points to a []bool variable in which to store the value of the flag. +func BoolSliceVar(p *[]bool, name string, value []bool, usage string) { + CommandLine.VarP(newBoolSliceValue(value, p), name, "", usage) +} + +// BoolSliceVarP is like BoolSliceVar, but accepts a shorthand letter that can be used after a single dash. +func BoolSliceVarP(p *[]bool, name, shorthand string, value []bool, usage string) { + CommandLine.VarP(newBoolSliceValue(value, p), name, shorthand, usage) +} + +// BoolSlice defines a []bool flag with specified name, default value, and usage string. +// The return value is the address of a []bool variable that stores the value of the flag. +func (f *FlagSet) BoolSlice(name string, value []bool, usage string) *[]bool { + p := []bool{} + f.BoolSliceVarP(&p, name, "", value, usage) + return &p +} + +// BoolSliceP is like BoolSlice, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) BoolSliceP(name, shorthand string, value []bool, usage string) *[]bool { + p := []bool{} + f.BoolSliceVarP(&p, name, shorthand, value, usage) + return &p +} + +// BoolSlice defines a []bool flag with specified name, default value, and usage string. +// The return value is the address of a []bool variable that stores the value of the flag. +func BoolSlice(name string, value []bool, usage string) *[]bool { + return CommandLine.BoolSliceP(name, "", value, usage) +} + +// BoolSliceP is like BoolSlice, but accepts a shorthand letter that can be used after a single dash. +func BoolSliceP(name, shorthand string, value []bool, usage string) *[]bool { + return CommandLine.BoolSliceP(name, shorthand, value, usage) +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/count.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/count.go new file mode 100644 index 0000000..d22be41 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/count.go @@ -0,0 +1,94 @@ +package pflag + +import "strconv" + +// -- count Value +type countValue int + +func newCountValue(val int, p *int) *countValue { + *p = val + return (*countValue)(p) +} + +func (i *countValue) Set(s string) error { + v, err := strconv.ParseInt(s, 0, 64) + // -1 means that no specific value was passed, so increment + if v == -1 { + *i = countValue(*i + 1) + } else { + *i = countValue(v) + } + return err +} + +func (i *countValue) Type() string { + return "count" +} + +func (i *countValue) String() string { return strconv.Itoa(int(*i)) } + +func countConv(sval string) (interface{}, error) { + i, err := strconv.Atoi(sval) + if err != nil { + return nil, err + } + return i, nil +} + +// GetCount return the int value of a flag with the given name +func (f *FlagSet) GetCount(name string) (int, error) { + val, err := f.getFlagType(name, "count", countConv) + if err != nil { + return 0, err + } + return val.(int), nil +} + +// CountVar defines a count flag with specified name, default value, and usage string. +// The argument p points to an int variable in which to store the value of the flag. +// A count flag will add 1 to its value evey time it is found on the command line +func (f *FlagSet) CountVar(p *int, name string, usage string) { + f.CountVarP(p, name, "", usage) +} + +// CountVarP is like CountVar only take a shorthand for the flag name. +func (f *FlagSet) CountVarP(p *int, name, shorthand string, usage string) { + flag := f.VarPF(newCountValue(0, p), name, shorthand, usage) + flag.NoOptDefVal = "-1" +} + +// CountVar like CountVar only the flag is placed on the CommandLine instead of a given flag set +func CountVar(p *int, name string, usage string) { + CommandLine.CountVar(p, name, usage) +} + +// CountVarP is like CountVar only take a shorthand for the flag name. +func CountVarP(p *int, name, shorthand string, usage string) { + CommandLine.CountVarP(p, name, shorthand, usage) +} + +// Count defines a count flag with specified name, default value, and usage string. +// The return value is the address of an int variable that stores the value of the flag. +// A count flag will add 1 to its value evey time it is found on the command line +func (f *FlagSet) Count(name string, usage string) *int { + p := new(int) + f.CountVarP(p, name, "", usage) + return p +} + +// CountP is like Count only takes a shorthand for the flag name. +func (f *FlagSet) CountP(name, shorthand string, usage string) *int { + p := new(int) + f.CountVarP(p, name, shorthand, usage) + return p +} + +// Count like Count only the flag is placed on the CommandLine isntead of a given flag set +func Count(name string, usage string) *int { + return CommandLine.CountP(name, "", usage) +} + +// CountP is like Count only takes a shorthand for the flag name. +func CountP(name, shorthand string, usage string) *int { + return CommandLine.CountP(name, shorthand, usage) +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/duration.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/duration.go new file mode 100644 index 0000000..e9debef --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/duration.go @@ -0,0 +1,86 @@ +package pflag + +import ( + "time" +) + +// -- time.Duration Value +type durationValue time.Duration + +func newDurationValue(val time.Duration, p *time.Duration) *durationValue { + *p = val + return (*durationValue)(p) +} + +func (d *durationValue) Set(s string) error { + v, err := time.ParseDuration(s) + *d = durationValue(v) + return err +} + +func (d *durationValue) Type() string { + return "duration" +} + +func (d *durationValue) String() string { return (*time.Duration)(d).String() } + +func durationConv(sval string) (interface{}, error) { + return time.ParseDuration(sval) +} + +// GetDuration return the duration value of a flag with the given name +func (f *FlagSet) GetDuration(name string) (time.Duration, error) { + val, err := f.getFlagType(name, "duration", durationConv) + if err != nil { + return 0, err + } + return val.(time.Duration), nil +} + +// DurationVar defines a time.Duration flag with specified name, default value, and usage string. +// The argument p points to a time.Duration variable in which to store the value of the flag. +func (f *FlagSet) DurationVar(p *time.Duration, name string, value time.Duration, usage string) { + f.VarP(newDurationValue(value, p), name, "", usage) +} + +// DurationVarP is like DurationVar, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) DurationVarP(p *time.Duration, name, shorthand string, value time.Duration, usage string) { + f.VarP(newDurationValue(value, p), name, shorthand, usage) +} + +// DurationVar defines a time.Duration flag with specified name, default value, and usage string. +// The argument p points to a time.Duration variable in which to store the value of the flag. +func DurationVar(p *time.Duration, name string, value time.Duration, usage string) { + CommandLine.VarP(newDurationValue(value, p), name, "", usage) +} + +// DurationVarP is like DurationVar, but accepts a shorthand letter that can be used after a single dash. +func DurationVarP(p *time.Duration, name, shorthand string, value time.Duration, usage string) { + CommandLine.VarP(newDurationValue(value, p), name, shorthand, usage) +} + +// Duration defines a time.Duration flag with specified name, default value, and usage string. +// The return value is the address of a time.Duration variable that stores the value of the flag. +func (f *FlagSet) Duration(name string, value time.Duration, usage string) *time.Duration { + p := new(time.Duration) + f.DurationVarP(p, name, "", value, usage) + return p +} + +// DurationP is like Duration, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) DurationP(name, shorthand string, value time.Duration, usage string) *time.Duration { + p := new(time.Duration) + f.DurationVarP(p, name, shorthand, value, usage) + return p +} + +// Duration defines a time.Duration flag with specified name, default value, and usage string. +// The return value is the address of a time.Duration variable that stores the value of the flag. +func Duration(name string, value time.Duration, usage string) *time.Duration { + return CommandLine.DurationP(name, "", value, usage) +} + +// DurationP is like Duration, but accepts a shorthand letter that can be used after a single dash. +func DurationP(name, shorthand string, value time.Duration, usage string) *time.Duration { + return CommandLine.DurationP(name, shorthand, value, usage) +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/flag.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/flag.go new file mode 100644 index 0000000..746af63 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/flag.go @@ -0,0 +1,1063 @@ +// Copyright 2009 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. + +/* +Package pflag is a drop-in replacement for Go's flag package, implementing +POSIX/GNU-style --flags. + +pflag is compatible with the GNU extensions to the POSIX recommendations +for command-line options. See +http://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html + +Usage: + +pflag is a drop-in replacement of Go's native flag package. If you import +pflag under the name "flag" then all code should continue to function +with no changes. + + import flag "github.com/ogier/pflag" + + There is one exception to this: if you directly instantiate the Flag struct +there is one more field "Shorthand" that you will need to set. +Most code never instantiates this struct directly, and instead uses +functions such as String(), BoolVar(), and Var(), and is therefore +unaffected. + +Define flags using flag.String(), Bool(), Int(), etc. + +This declares an integer flag, -flagname, stored in the pointer ip, with type *int. + var ip = flag.Int("flagname", 1234, "help message for flagname") +If you like, you can bind the flag to a variable using the Var() functions. + var flagvar int + func init() { + flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname") + } +Or you can create custom flags that satisfy the Value interface (with +pointer receivers) and couple them to flag parsing by + flag.Var(&flagVal, "name", "help message for flagname") +For such flags, the default value is just the initial value of the variable. + +After all flags are defined, call + flag.Parse() +to parse the command line into the defined flags. + +Flags may then be used directly. If you're using the flags themselves, +they are all pointers; if you bind to variables, they're values. + fmt.Println("ip has value ", *ip) + fmt.Println("flagvar has value ", flagvar) + +After parsing, the arguments after the flag are available as the +slice flag.Args() or individually as flag.Arg(i). +The arguments are indexed from 0 through flag.NArg()-1. + +The pflag package also defines some new functions that are not in flag, +that give one-letter shorthands for flags. You can use these by appending +'P' to the name of any function that defines a flag. + var ip = flag.IntP("flagname", "f", 1234, "help message") + var flagvar bool + func init() { + flag.BoolVarP("boolname", "b", true, "help message") + } + flag.VarP(&flagVar, "varname", "v", 1234, "help message") +Shorthand letters can be used with single dashes on the command line. +Boolean shorthand flags can be combined with other shorthand flags. + +Command line flag syntax: + --flag // boolean flags only + --flag=x + +Unlike the flag package, a single dash before an option means something +different than a double dash. Single dashes signify a series of shorthand +letters for flags. All but the last shorthand letter must be boolean flags. + // boolean flags + -f + -abc + // non-boolean flags + -n 1234 + -Ifile + // mixed + -abcs "hello" + -abcn1234 + +Flag parsing stops after the terminator "--". Unlike the flag package, +flags can be interspersed with arguments anywhere on the command line +before this terminator. + +Integer flags accept 1234, 0664, 0x1234 and may be negative. +Boolean flags (in their long form) accept 1, 0, t, f, true, false, +TRUE, FALSE, True, False. +Duration flags accept any input valid for time.ParseDuration. + +The default set of command-line flags is controlled by +top-level functions. The FlagSet type allows one to define +independent sets of flags, such as to implement subcommands +in a command-line interface. The methods of FlagSet are +analogous to the top-level functions for the command-line +flag set. +*/ +package pflag + +import ( + "bytes" + "errors" + "fmt" + "io" + "os" + "sort" + "strings" +) + +// ErrHelp is the error returned if the flag -help is invoked but no such flag is defined. +var ErrHelp = errors.New("pflag: help requested") + +// ErrorHandling defines how to handle flag parsing errors. +type ErrorHandling int + +const ( + // ContinueOnError will return an err from Parse() if an error is found + ContinueOnError ErrorHandling = iota + // ExitOnError will call os.Exit(2) if an error is found when parsing + ExitOnError + // PanicOnError will panic() if an error is found when parsing flags + PanicOnError +) + +// NormalizedName is a flag name that has been normalized according to rules +// for the FlagSet (e.g. making '-' and '_' equivalent). +type NormalizedName string + +// A FlagSet represents a set of defined flags. +type FlagSet struct { + // Usage is the function called when an error occurs while parsing flags. + // The field is a function (not a method) that may be changed to point to + // a custom error handler. + Usage func() + + name string + parsed bool + actual map[NormalizedName]*Flag + formal map[NormalizedName]*Flag + shorthands map[byte]*Flag + args []string // arguments after flags + argsLenAtDash int // len(args) when a '--' was located when parsing, or -1 if no -- + exitOnError bool // does the program exit if there's an error? + errorHandling ErrorHandling + output io.Writer // nil means stderr; use out() accessor + interspersed bool // allow interspersed option/non-option args + normalizeNameFunc func(f *FlagSet, name string) NormalizedName +} + +// A Flag represents the state of a flag. +type Flag struct { + Name string // name as it appears on command line + Shorthand string // one-letter abbreviated flag + Usage string // help message + Value Value // value as set + DefValue string // default value (as text); for usage message + Changed bool // If the user set the value (or if left to default) + NoOptDefVal string //default value (as text); if the flag is on the command line without any options + Deprecated string // If this flag is deprecated, this string is the new or now thing to use + Hidden bool // used by cobra.Command to allow flags to be hidden from help/usage text + ShorthandDeprecated string // If the shorthand of this flag is deprecated, this string is the new or now thing to use + Annotations map[string][]string // used by cobra.Command bash autocomple code +} + +// Value is the interface to the dynamic value stored in a flag. +// (The default value is represented as a string.) +type Value interface { + String() string + Set(string) error + Type() string +} + +// sortFlags returns the flags as a slice in lexicographical sorted order. +func sortFlags(flags map[NormalizedName]*Flag) []*Flag { + list := make(sort.StringSlice, len(flags)) + i := 0 + for k := range flags { + list[i] = string(k) + i++ + } + list.Sort() + result := make([]*Flag, len(list)) + for i, name := range list { + result[i] = flags[NormalizedName(name)] + } + return result +} + +// SetNormalizeFunc allows you to add a function which can translate flag names. +// Flags added to the FlagSet will be translated and then when anything tries to +// look up the flag that will also be translated. So it would be possible to create +// a flag named "getURL" and have it translated to "geturl". A user could then pass +// "--getUrl" which may also be translated to "geturl" and everything will work. +func (f *FlagSet) SetNormalizeFunc(n func(f *FlagSet, name string) NormalizedName) { + f.normalizeNameFunc = n + for k, v := range f.formal { + delete(f.formal, k) + nname := f.normalizeFlagName(string(k)) + f.formal[nname] = v + v.Name = string(nname) + } +} + +// GetNormalizeFunc returns the previously set NormalizeFunc of a function which +// does no translation, if not set previously. +func (f *FlagSet) GetNormalizeFunc() func(f *FlagSet, name string) NormalizedName { + if f.normalizeNameFunc != nil { + return f.normalizeNameFunc + } + return func(f *FlagSet, name string) NormalizedName { return NormalizedName(name) } +} + +func (f *FlagSet) normalizeFlagName(name string) NormalizedName { + n := f.GetNormalizeFunc() + return n(f, name) +} + +func (f *FlagSet) out() io.Writer { + if f.output == nil { + return os.Stderr + } + return f.output +} + +// SetOutput sets the destination for usage and error messages. +// If output is nil, os.Stderr is used. +func (f *FlagSet) SetOutput(output io.Writer) { + f.output = output +} + +// VisitAll visits the flags in lexicographical order, calling fn for each. +// It visits all flags, even those not set. +func (f *FlagSet) VisitAll(fn func(*Flag)) { + for _, flag := range sortFlags(f.formal) { + fn(flag) + } +} + +// HasFlags returns a bool to indicate if the FlagSet has any flags definied. +func (f *FlagSet) HasFlags() bool { + return len(f.formal) > 0 +} + +// HasAvailableFlags returns a bool to indicate if the FlagSet has any flags +// definied that are not hidden or deprecated. +func (f *FlagSet) HasAvailableFlags() bool { + for _, flag := range f.formal { + if !flag.Hidden && len(flag.Deprecated) == 0 { + return true + } + } + return false +} + +// VisitAll visits the command-line flags in lexicographical order, calling +// fn for each. It visits all flags, even those not set. +func VisitAll(fn func(*Flag)) { + CommandLine.VisitAll(fn) +} + +// Visit visits the flags in lexicographical order, calling fn for each. +// It visits only those flags that have been set. +func (f *FlagSet) Visit(fn func(*Flag)) { + for _, flag := range sortFlags(f.actual) { + fn(flag) + } +} + +// Visit visits the command-line flags in lexicographical order, calling fn +// for each. It visits only those flags that have been set. +func Visit(fn func(*Flag)) { + CommandLine.Visit(fn) +} + +// Lookup returns the Flag structure of the named flag, returning nil if none exists. +func (f *FlagSet) Lookup(name string) *Flag { + return f.lookup(f.normalizeFlagName(name)) +} + +// lookup returns the Flag structure of the named flag, returning nil if none exists. +func (f *FlagSet) lookup(name NormalizedName) *Flag { + return f.formal[name] +} + +// func to return a given type for a given flag name +func (f *FlagSet) getFlagType(name string, ftype string, convFunc func(sval string) (interface{}, error)) (interface{}, error) { + flag := f.Lookup(name) + if flag == nil { + err := fmt.Errorf("flag accessed but not defined: %s", name) + return nil, err + } + + if flag.Value.Type() != ftype { + err := fmt.Errorf("trying to get %s value of flag of type %s", ftype, flag.Value.Type()) + return nil, err + } + + sval := flag.Value.String() + result, err := convFunc(sval) + if err != nil { + return nil, err + } + return result, nil +} + +// ArgsLenAtDash will return the length of f.Args at the moment when a -- was +// found during arg parsing. This allows your program to know which args were +// before the -- and which came after. +func (f *FlagSet) ArgsLenAtDash() int { + return f.argsLenAtDash +} + +// MarkDeprecated indicated that a flag is deprecated in your program. It will +// continue to function but will not show up in help or usage messages. Using +// this flag will also print the given usageMessage. +func (f *FlagSet) MarkDeprecated(name string, usageMessage string) error { + flag := f.Lookup(name) + if flag == nil { + return fmt.Errorf("flag %q does not exist", name) + } + if len(usageMessage) == 0 { + return fmt.Errorf("deprecated message for flag %q must be set", name) + } + flag.Deprecated = usageMessage + return nil +} + +// MarkShorthandDeprecated will mark the shorthand of a flag deprecated in your +// program. It will continue to function but will not show up in help or usage +// messages. Using this flag will also print the given usageMessage. +func (f *FlagSet) MarkShorthandDeprecated(name string, usageMessage string) error { + flag := f.Lookup(name) + if flag == nil { + return fmt.Errorf("flag %q does not exist", name) + } + if len(usageMessage) == 0 { + return fmt.Errorf("deprecated message for flag %q must be set", name) + } + flag.ShorthandDeprecated = usageMessage + return nil +} + +// MarkHidden sets a flag to 'hidden' in your program. It will continue to +// function but will not show up in help or usage messages. +func (f *FlagSet) MarkHidden(name string) error { + flag := f.Lookup(name) + if flag == nil { + return fmt.Errorf("flag %q does not exist", name) + } + flag.Hidden = true + return nil +} + +// Lookup returns the Flag structure of the named command-line flag, +// returning nil if none exists. +func Lookup(name string) *Flag { + return CommandLine.Lookup(name) +} + +// Set sets the value of the named flag. +func (f *FlagSet) Set(name, value string) error { + normalName := f.normalizeFlagName(name) + flag, ok := f.formal[normalName] + if !ok { + return fmt.Errorf("no such flag -%v", name) + } + err := flag.Value.Set(value) + if err != nil { + return err + } + if f.actual == nil { + f.actual = make(map[NormalizedName]*Flag) + } + f.actual[normalName] = flag + flag.Changed = true + if len(flag.Deprecated) > 0 { + fmt.Fprintf(os.Stderr, "Flag --%s has been deprecated, %s\n", flag.Name, flag.Deprecated) + } + return nil +} + +// SetAnnotation allows one to set arbitrary annotations on a flag in the FlagSet. +// This is sometimes used by spf13/cobra programs which want to generate additional +// bash completion information. +func (f *FlagSet) SetAnnotation(name, key string, values []string) error { + normalName := f.normalizeFlagName(name) + flag, ok := f.formal[normalName] + if !ok { + return fmt.Errorf("no such flag -%v", name) + } + if flag.Annotations == nil { + flag.Annotations = map[string][]string{} + } + flag.Annotations[key] = values + return nil +} + +// Changed returns true if the flag was explicitly set during Parse() and false +// otherwise +func (f *FlagSet) Changed(name string) bool { + flag := f.Lookup(name) + // If a flag doesn't exist, it wasn't changed.... + if flag == nil { + return false + } + return flag.Changed +} + +// Set sets the value of the named command-line flag. +func Set(name, value string) error { + return CommandLine.Set(name, value) +} + +// PrintDefaults prints, to standard error unless configured +// otherwise, the default values of all defined flags in the set. +func (f *FlagSet) PrintDefaults() { + usages := f.FlagUsages() + fmt.Fprint(f.out(), usages) +} + +// defaultIsZeroValue returns true if the default value for this flag represents +// a zero value. +func (f *Flag) defaultIsZeroValue() bool { + switch f.Value.(type) { + case boolFlag: + return f.DefValue == "false" + case *durationValue: + // Beginning in Go 1.7, duration zero values are "0s" + return f.DefValue == "0" || f.DefValue == "0s" + case *intValue, *int8Value, *int32Value, *int64Value, *uintValue, *uint8Value, *uint16Value, *uint32Value, *uint64Value, *countValue, *float32Value, *float64Value: + return f.DefValue == "0" + case *stringValue: + return f.DefValue == "" + case *ipValue, *ipMaskValue, *ipNetValue: + return f.DefValue == "" + case *intSliceValue, *stringSliceValue, *stringArrayValue: + return f.DefValue == "[]" + default: + switch f.Value.String() { + case "false": + return true + case "": + return true + case "": + return true + case "0": + return true + } + return false + } +} + +// UnquoteUsage extracts a back-quoted name from the usage +// string for a flag and returns it and the un-quoted usage. +// Given "a `name` to show" it returns ("name", "a name to show"). +// If there are no back quotes, the name is an educated guess of the +// type of the flag's value, or the empty string if the flag is boolean. +func UnquoteUsage(flag *Flag) (name string, usage string) { + // Look for a back-quoted name, but avoid the strings package. + usage = flag.Usage + for i := 0; i < len(usage); i++ { + if usage[i] == '`' { + for j := i + 1; j < len(usage); j++ { + if usage[j] == '`' { + name = usage[i+1 : j] + usage = usage[:i] + name + usage[j+1:] + return name, usage + } + } + break // Only one back quote; use type name. + } + } + + name = flag.Value.Type() + switch name { + case "bool": + name = "" + case "float64": + name = "float" + case "int64": + name = "int" + case "uint64": + name = "uint" + } + + return +} + +// Splits the string `s` on whitespace into an initial substring up to +// `i` runes in length and the remainder. Will go `slop` over `i` if +// that encompasses the entire string (which allows the caller to +// avoid short orphan words on the final line). +func wrapN(i, slop int, s string) (string, string) { + if i+slop > len(s) { + return s, "" + } + + w := strings.LastIndexAny(s[:i], " \t") + if w <= 0 { + return s, "" + } + + return s[:w], s[w+1:] +} + +// Wraps the string `s` to a maximum width `w` with leading indent +// `i`. The first line is not indented (this is assumed to be done by +// caller). Pass `w` == 0 to do no wrapping +func wrap(i, w int, s string) string { + if w == 0 { + return s + } + + // space between indent i and end of line width w into which + // we should wrap the text. + wrap := w - i + + var r, l string + + // Not enough space for sensible wrapping. Wrap as a block on + // the next line instead. + if wrap < 24 { + i = 16 + wrap = w - i + r += "\n" + strings.Repeat(" ", i) + } + // If still not enough space then don't even try to wrap. + if wrap < 24 { + return s + } + + // Try to avoid short orphan words on the final line, by + // allowing wrapN to go a bit over if that would fit in the + // remainder of the line. + slop := 5 + wrap = wrap - slop + + // Handle first line, which is indented by the caller (or the + // special case above) + l, s = wrapN(wrap, slop, s) + r = r + l + + // Now wrap the rest + for s != "" { + var t string + + t, s = wrapN(wrap, slop, s) + r = r + "\n" + strings.Repeat(" ", i) + t + } + + return r + +} + +// FlagUsagesWrapped returns a string containing the usage information +// for all flags in the FlagSet. Wrapped to `cols` columns (0 for no +// wrapping) +func (f *FlagSet) FlagUsagesWrapped(cols int) string { + x := new(bytes.Buffer) + + lines := make([]string, 0, len(f.formal)) + + maxlen := 0 + f.VisitAll(func(flag *Flag) { + if len(flag.Deprecated) > 0 || flag.Hidden { + return + } + + line := "" + if len(flag.Shorthand) > 0 && len(flag.ShorthandDeprecated) == 0 { + line = fmt.Sprintf(" -%s, --%s", flag.Shorthand, flag.Name) + } else { + line = fmt.Sprintf(" --%s", flag.Name) + } + + varname, usage := UnquoteUsage(flag) + if len(varname) > 0 { + line += " " + varname + } + if len(flag.NoOptDefVal) > 0 { + switch flag.Value.Type() { + case "string": + line += fmt.Sprintf("[=\"%s\"]", flag.NoOptDefVal) + case "bool": + if flag.NoOptDefVal != "true" { + line += fmt.Sprintf("[=%s]", flag.NoOptDefVal) + } + default: + line += fmt.Sprintf("[=%s]", flag.NoOptDefVal) + } + } + + // This special character will be replaced with spacing once the + // correct alignment is calculated + line += "\x00" + if len(line) > maxlen { + maxlen = len(line) + } + + line += usage + if !flag.defaultIsZeroValue() { + if flag.Value.Type() == "string" { + line += fmt.Sprintf(" (default \"%s\")", flag.DefValue) + } else { + line += fmt.Sprintf(" (default %s)", flag.DefValue) + } + } + + lines = append(lines, line) + }) + + for _, line := range lines { + sidx := strings.Index(line, "\x00") + spacing := strings.Repeat(" ", maxlen-sidx) + // maxlen + 2 comes from + 1 for the \x00 and + 1 for the (deliberate) off-by-one in maxlen-sidx + fmt.Fprintln(x, line[:sidx], spacing, wrap(maxlen+2, cols, line[sidx+1:])) + } + + return x.String() +} + +// FlagUsages returns a string containing the usage information for all flags in +// the FlagSet +func (f *FlagSet) FlagUsages() string { + return f.FlagUsagesWrapped(0) +} + +// PrintDefaults prints to standard error the default values of all defined command-line flags. +func PrintDefaults() { + CommandLine.PrintDefaults() +} + +// defaultUsage is the default function to print a usage message. +func defaultUsage(f *FlagSet) { + fmt.Fprintf(f.out(), "Usage of %s:\n", f.name) + f.PrintDefaults() +} + +// NOTE: Usage is not just defaultUsage(CommandLine) +// because it serves (via godoc flag Usage) as the example +// for how to write your own usage function. + +// Usage prints to standard error a usage message documenting all defined command-line flags. +// The function is a variable that may be changed to point to a custom function. +// By default it prints a simple header and calls PrintDefaults; for details about the +// format of the output and how to control it, see the documentation for PrintDefaults. +var Usage = func() { + fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0]) + PrintDefaults() +} + +// NFlag returns the number of flags that have been set. +func (f *FlagSet) NFlag() int { return len(f.actual) } + +// NFlag returns the number of command-line flags that have been set. +func NFlag() int { return len(CommandLine.actual) } + +// Arg returns the i'th argument. Arg(0) is the first remaining argument +// after flags have been processed. +func (f *FlagSet) Arg(i int) string { + if i < 0 || i >= len(f.args) { + return "" + } + return f.args[i] +} + +// Arg returns the i'th command-line argument. Arg(0) is the first remaining argument +// after flags have been processed. +func Arg(i int) string { + return CommandLine.Arg(i) +} + +// NArg is the number of arguments remaining after flags have been processed. +func (f *FlagSet) NArg() int { return len(f.args) } + +// NArg is the number of arguments remaining after flags have been processed. +func NArg() int { return len(CommandLine.args) } + +// Args returns the non-flag arguments. +func (f *FlagSet) Args() []string { return f.args } + +// Args returns the non-flag command-line arguments. +func Args() []string { return CommandLine.args } + +// Var defines a flag with the specified name and usage string. The type and +// value of the flag are represented by the first argument, of type Value, which +// typically holds a user-defined implementation of Value. For instance, the +// caller could create a flag that turns a comma-separated string into a slice +// of strings by giving the slice the methods of Value; in particular, Set would +// decompose the comma-separated string into the slice. +func (f *FlagSet) Var(value Value, name string, usage string) { + f.VarP(value, name, "", usage) +} + +// VarPF is like VarP, but returns the flag created +func (f *FlagSet) VarPF(value Value, name, shorthand, usage string) *Flag { + // Remember the default value as a string; it won't change. + flag := &Flag{ + Name: name, + Shorthand: shorthand, + Usage: usage, + Value: value, + DefValue: value.String(), + } + f.AddFlag(flag) + return flag +} + +// VarP is like Var, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) VarP(value Value, name, shorthand, usage string) { + f.VarPF(value, name, shorthand, usage) +} + +// AddFlag will add the flag to the FlagSet +func (f *FlagSet) AddFlag(flag *Flag) { + // Call normalizeFlagName function only once + normalizedFlagName := f.normalizeFlagName(flag.Name) + + _, alreadythere := f.formal[normalizedFlagName] + if alreadythere { + msg := fmt.Sprintf("%s flag redefined: %s", f.name, flag.Name) + fmt.Fprintln(f.out(), msg) + panic(msg) // Happens only if flags are declared with identical names + } + if f.formal == nil { + f.formal = make(map[NormalizedName]*Flag) + } + + flag.Name = string(normalizedFlagName) + f.formal[normalizedFlagName] = flag + + if len(flag.Shorthand) == 0 { + return + } + if len(flag.Shorthand) > 1 { + fmt.Fprintf(f.out(), "%s shorthand more than ASCII character: %s\n", f.name, flag.Shorthand) + panic("shorthand is more than one character") + } + if f.shorthands == nil { + f.shorthands = make(map[byte]*Flag) + } + c := flag.Shorthand[0] + old, alreadythere := f.shorthands[c] + if alreadythere { + fmt.Fprintf(f.out(), "%s shorthand reused: %q for %s already used for %s\n", f.name, c, flag.Name, old.Name) + panic("shorthand redefinition") + } + f.shorthands[c] = flag +} + +// AddFlagSet adds one FlagSet to another. If a flag is already present in f +// the flag from newSet will be ignored +func (f *FlagSet) AddFlagSet(newSet *FlagSet) { + if newSet == nil { + return + } + newSet.VisitAll(func(flag *Flag) { + if f.Lookup(flag.Name) == nil { + f.AddFlag(flag) + } + }) +} + +// Var defines a flag with the specified name and usage string. The type and +// value of the flag are represented by the first argument, of type Value, which +// typically holds a user-defined implementation of Value. For instance, the +// caller could create a flag that turns a comma-separated string into a slice +// of strings by giving the slice the methods of Value; in particular, Set would +// decompose the comma-separated string into the slice. +func Var(value Value, name string, usage string) { + CommandLine.VarP(value, name, "", usage) +} + +// VarP is like Var, but accepts a shorthand letter that can be used after a single dash. +func VarP(value Value, name, shorthand, usage string) { + CommandLine.VarP(value, name, shorthand, usage) +} + +// failf prints to standard error a formatted error and usage message and +// returns the error. +func (f *FlagSet) failf(format string, a ...interface{}) error { + err := fmt.Errorf(format, a...) + fmt.Fprintln(f.out(), err) + f.usage() + return err +} + +// usage calls the Usage method for the flag set, or the usage function if +// the flag set is CommandLine. +func (f *FlagSet) usage() { + if f == CommandLine { + Usage() + } else if f.Usage == nil { + defaultUsage(f) + } else { + f.Usage() + } +} + +func (f *FlagSet) setFlag(flag *Flag, value string, origArg string) error { + if err := flag.Value.Set(value); err != nil { + return f.failf("invalid argument %q for %s: %v", value, origArg, err) + } + // mark as visited for Visit() + if f.actual == nil { + f.actual = make(map[NormalizedName]*Flag) + } + f.actual[f.normalizeFlagName(flag.Name)] = flag + flag.Changed = true + if len(flag.Deprecated) > 0 { + fmt.Fprintf(os.Stderr, "Flag --%s has been deprecated, %s\n", flag.Name, flag.Deprecated) + } + if len(flag.ShorthandDeprecated) > 0 && containsShorthand(origArg, flag.Shorthand) { + fmt.Fprintf(os.Stderr, "Flag shorthand -%s has been deprecated, %s\n", flag.Shorthand, flag.ShorthandDeprecated) + } + return nil +} + +func containsShorthand(arg, shorthand string) bool { + // filter out flags -- + if strings.HasPrefix(arg, "-") { + return false + } + arg = strings.SplitN(arg, "=", 2)[0] + return strings.Contains(arg, shorthand) +} + +func (f *FlagSet) parseLongArg(s string, args []string, fn parseFunc) (a []string, err error) { + a = args + name := s[2:] + if len(name) == 0 || name[0] == '-' || name[0] == '=' { + err = f.failf("bad flag syntax: %s", s) + return + } + split := strings.SplitN(name, "=", 2) + name = split[0] + flag, alreadythere := f.formal[f.normalizeFlagName(name)] + if !alreadythere { + if name == "help" { // special case for nice help message. + f.usage() + return a, ErrHelp + } + err = f.failf("unknown flag: --%s", name) + return + } + var value string + if len(split) == 2 { + // '--flag=arg' + value = split[1] + } else if len(flag.NoOptDefVal) > 0 { + // '--flag' (arg was optional) + value = flag.NoOptDefVal + } else if len(a) > 0 { + // '--flag arg' + value = a[0] + a = a[1:] + } else { + // '--flag' (arg was required) + err = f.failf("flag needs an argument: %s", s) + return + } + err = fn(flag, value, s) + return +} + +func (f *FlagSet) parseSingleShortArg(shorthands string, args []string, fn parseFunc) (outShorts string, outArgs []string, err error) { + if strings.HasPrefix(shorthands, "test.") { + return + } + outArgs = args + outShorts = shorthands[1:] + c := shorthands[0] + + flag, alreadythere := f.shorthands[c] + if !alreadythere { + if c == 'h' { // special case for nice help message. + f.usage() + err = ErrHelp + return + } + //TODO continue on error + err = f.failf("unknown shorthand flag: %q in -%s", c, shorthands) + return + } + var value string + if len(shorthands) > 2 && shorthands[1] == '=' { + value = shorthands[2:] + outShorts = "" + } else if len(flag.NoOptDefVal) > 0 { + value = flag.NoOptDefVal + } else if len(shorthands) > 1 { + value = shorthands[1:] + outShorts = "" + } else if len(args) > 0 { + value = args[0] + outArgs = args[1:] + } else { + err = f.failf("flag needs an argument: %q in -%s", c, shorthands) + return + } + err = fn(flag, value, shorthands) + return +} + +func (f *FlagSet) parseShortArg(s string, args []string, fn parseFunc) (a []string, err error) { + a = args + shorthands := s[1:] + + for len(shorthands) > 0 { + shorthands, a, err = f.parseSingleShortArg(shorthands, args, fn) + if err != nil { + return + } + } + + return +} + +func (f *FlagSet) parseArgs(args []string, fn parseFunc) (err error) { + for len(args) > 0 { + s := args[0] + args = args[1:] + if len(s) == 0 || s[0] != '-' || len(s) == 1 { + if !f.interspersed { + f.args = append(f.args, s) + f.args = append(f.args, args...) + return nil + } + f.args = append(f.args, s) + continue + } + + if s[1] == '-' { + if len(s) == 2 { // "--" terminates the flags + f.argsLenAtDash = len(f.args) + f.args = append(f.args, args...) + break + } + args, err = f.parseLongArg(s, args, fn) + } else { + args, err = f.parseShortArg(s, args, fn) + } + if err != nil { + return + } + } + return +} + +// Parse parses flag definitions from the argument list, which should not +// include the command name. Must be called after all flags in the FlagSet +// are defined and before flags are accessed by the program. +// The return value will be ErrHelp if -help was set but not defined. +func (f *FlagSet) Parse(arguments []string) error { + f.parsed = true + f.args = make([]string, 0, len(arguments)) + + assign := func(flag *Flag, value, origArg string) error { + return f.setFlag(flag, value, origArg) + } + + err := f.parseArgs(arguments, assign) + if err != nil { + switch f.errorHandling { + case ContinueOnError: + return err + case ExitOnError: + os.Exit(2) + case PanicOnError: + panic(err) + } + } + return nil +} + +type parseFunc func(flag *Flag, value, origArg string) error + +// ParseAll parses flag definitions from the argument list, which should not +// include the command name. The arguments for fn are flag and value. Must be +// called after all flags in the FlagSet are defined and before flags are +// accessed by the program. The return value will be ErrHelp if -help was set +// but not defined. +func (f *FlagSet) ParseAll(arguments []string, fn func(flag *Flag, value string) error) error { + f.parsed = true + f.args = make([]string, 0, len(arguments)) + + assign := func(flag *Flag, value, origArg string) error { + return fn(flag, value) + } + + err := f.parseArgs(arguments, assign) + if err != nil { + switch f.errorHandling { + case ContinueOnError: + return err + case ExitOnError: + os.Exit(2) + case PanicOnError: + panic(err) + } + } + return nil +} + +// Parsed reports whether f.Parse has been called. +func (f *FlagSet) Parsed() bool { + return f.parsed +} + +// Parse parses the command-line flags from os.Args[1:]. Must be called +// after all flags are defined and before flags are accessed by the program. +func Parse() { + // Ignore errors; CommandLine is set for ExitOnError. + CommandLine.Parse(os.Args[1:]) +} + +// ParseAll parses the command-line flags from os.Args[1:] and called fn for each. +// The arguments for fn are flag and value. Must be called after all flags are +// defined and before flags are accessed by the program. +func ParseAll(fn func(flag *Flag, value string) error) { + // Ignore errors; CommandLine is set for ExitOnError. + CommandLine.ParseAll(os.Args[1:], fn) +} + +// SetInterspersed sets whether to support interspersed option/non-option arguments. +func SetInterspersed(interspersed bool) { + CommandLine.SetInterspersed(interspersed) +} + +// Parsed returns true if the command-line flags have been parsed. +func Parsed() bool { + return CommandLine.Parsed() +} + +// CommandLine is the default set of command-line flags, parsed from os.Args. +var CommandLine = NewFlagSet(os.Args[0], ExitOnError) + +// NewFlagSet returns a new, empty flag set with the specified name and +// error handling property. +func NewFlagSet(name string, errorHandling ErrorHandling) *FlagSet { + f := &FlagSet{ + name: name, + errorHandling: errorHandling, + argsLenAtDash: -1, + interspersed: true, + } + return f +} + +// SetInterspersed sets whether to support interspersed option/non-option arguments. +func (f *FlagSet) SetInterspersed(interspersed bool) { + f.interspersed = interspersed +} + +// Init sets the name and error handling property for a flag set. +// By default, the zero FlagSet uses an empty name and the +// ContinueOnError error handling policy. +func (f *FlagSet) Init(name string, errorHandling ErrorHandling) { + f.name = name + f.errorHandling = errorHandling + f.argsLenAtDash = -1 +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/float32.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/float32.go new file mode 100644 index 0000000..a243f81 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/float32.go @@ -0,0 +1,88 @@ +package pflag + +import "strconv" + +// -- float32 Value +type float32Value float32 + +func newFloat32Value(val float32, p *float32) *float32Value { + *p = val + return (*float32Value)(p) +} + +func (f *float32Value) Set(s string) error { + v, err := strconv.ParseFloat(s, 32) + *f = float32Value(v) + return err +} + +func (f *float32Value) Type() string { + return "float32" +} + +func (f *float32Value) String() string { return strconv.FormatFloat(float64(*f), 'g', -1, 32) } + +func float32Conv(sval string) (interface{}, error) { + v, err := strconv.ParseFloat(sval, 32) + if err != nil { + return 0, err + } + return float32(v), nil +} + +// GetFloat32 return the float32 value of a flag with the given name +func (f *FlagSet) GetFloat32(name string) (float32, error) { + val, err := f.getFlagType(name, "float32", float32Conv) + if err != nil { + return 0, err + } + return val.(float32), nil +} + +// Float32Var defines a float32 flag with specified name, default value, and usage string. +// The argument p points to a float32 variable in which to store the value of the flag. +func (f *FlagSet) Float32Var(p *float32, name string, value float32, usage string) { + f.VarP(newFloat32Value(value, p), name, "", usage) +} + +// Float32VarP is like Float32Var, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) Float32VarP(p *float32, name, shorthand string, value float32, usage string) { + f.VarP(newFloat32Value(value, p), name, shorthand, usage) +} + +// Float32Var defines a float32 flag with specified name, default value, and usage string. +// The argument p points to a float32 variable in which to store the value of the flag. +func Float32Var(p *float32, name string, value float32, usage string) { + CommandLine.VarP(newFloat32Value(value, p), name, "", usage) +} + +// Float32VarP is like Float32Var, but accepts a shorthand letter that can be used after a single dash. +func Float32VarP(p *float32, name, shorthand string, value float32, usage string) { + CommandLine.VarP(newFloat32Value(value, p), name, shorthand, usage) +} + +// Float32 defines a float32 flag with specified name, default value, and usage string. +// The return value is the address of a float32 variable that stores the value of the flag. +func (f *FlagSet) Float32(name string, value float32, usage string) *float32 { + p := new(float32) + f.Float32VarP(p, name, "", value, usage) + return p +} + +// Float32P is like Float32, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) Float32P(name, shorthand string, value float32, usage string) *float32 { + p := new(float32) + f.Float32VarP(p, name, shorthand, value, usage) + return p +} + +// Float32 defines a float32 flag with specified name, default value, and usage string. +// The return value is the address of a float32 variable that stores the value of the flag. +func Float32(name string, value float32, usage string) *float32 { + return CommandLine.Float32P(name, "", value, usage) +} + +// Float32P is like Float32, but accepts a shorthand letter that can be used after a single dash. +func Float32P(name, shorthand string, value float32, usage string) *float32 { + return CommandLine.Float32P(name, shorthand, value, usage) +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/float64.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/float64.go new file mode 100644 index 0000000..04b5492 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/float64.go @@ -0,0 +1,84 @@ +package pflag + +import "strconv" + +// -- float64 Value +type float64Value float64 + +func newFloat64Value(val float64, p *float64) *float64Value { + *p = val + return (*float64Value)(p) +} + +func (f *float64Value) Set(s string) error { + v, err := strconv.ParseFloat(s, 64) + *f = float64Value(v) + return err +} + +func (f *float64Value) Type() string { + return "float64" +} + +func (f *float64Value) String() string { return strconv.FormatFloat(float64(*f), 'g', -1, 64) } + +func float64Conv(sval string) (interface{}, error) { + return strconv.ParseFloat(sval, 64) +} + +// GetFloat64 return the float64 value of a flag with the given name +func (f *FlagSet) GetFloat64(name string) (float64, error) { + val, err := f.getFlagType(name, "float64", float64Conv) + if err != nil { + return 0, err + } + return val.(float64), nil +} + +// Float64Var defines a float64 flag with specified name, default value, and usage string. +// The argument p points to a float64 variable in which to store the value of the flag. +func (f *FlagSet) Float64Var(p *float64, name string, value float64, usage string) { + f.VarP(newFloat64Value(value, p), name, "", usage) +} + +// Float64VarP is like Float64Var, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) Float64VarP(p *float64, name, shorthand string, value float64, usage string) { + f.VarP(newFloat64Value(value, p), name, shorthand, usage) +} + +// Float64Var defines a float64 flag with specified name, default value, and usage string. +// The argument p points to a float64 variable in which to store the value of the flag. +func Float64Var(p *float64, name string, value float64, usage string) { + CommandLine.VarP(newFloat64Value(value, p), name, "", usage) +} + +// Float64VarP is like Float64Var, but accepts a shorthand letter that can be used after a single dash. +func Float64VarP(p *float64, name, shorthand string, value float64, usage string) { + CommandLine.VarP(newFloat64Value(value, p), name, shorthand, usage) +} + +// Float64 defines a float64 flag with specified name, default value, and usage string. +// The return value is the address of a float64 variable that stores the value of the flag. +func (f *FlagSet) Float64(name string, value float64, usage string) *float64 { + p := new(float64) + f.Float64VarP(p, name, "", value, usage) + return p +} + +// Float64P is like Float64, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) Float64P(name, shorthand string, value float64, usage string) *float64 { + p := new(float64) + f.Float64VarP(p, name, shorthand, value, usage) + return p +} + +// Float64 defines a float64 flag with specified name, default value, and usage string. +// The return value is the address of a float64 variable that stores the value of the flag. +func Float64(name string, value float64, usage string) *float64 { + return CommandLine.Float64P(name, "", value, usage) +} + +// Float64P is like Float64, but accepts a shorthand letter that can be used after a single dash. +func Float64P(name, shorthand string, value float64, usage string) *float64 { + return CommandLine.Float64P(name, shorthand, value, usage) +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/golangflag.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/golangflag.go new file mode 100644 index 0000000..c4f47eb --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/golangflag.go @@ -0,0 +1,101 @@ +// Copyright 2009 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. + +package pflag + +import ( + goflag "flag" + "reflect" + "strings" +) + +// flagValueWrapper implements pflag.Value around a flag.Value. The main +// difference here is the addition of the Type method that returns a string +// name of the type. As this is generally unknown, we approximate that with +// reflection. +type flagValueWrapper struct { + inner goflag.Value + flagType string +} + +// We are just copying the boolFlag interface out of goflag as that is what +// they use to decide if a flag should get "true" when no arg is given. +type goBoolFlag interface { + goflag.Value + IsBoolFlag() bool +} + +func wrapFlagValue(v goflag.Value) Value { + // If the flag.Value happens to also be a pflag.Value, just use it directly. + if pv, ok := v.(Value); ok { + return pv + } + + pv := &flagValueWrapper{ + inner: v, + } + + t := reflect.TypeOf(v) + if t.Kind() == reflect.Interface || t.Kind() == reflect.Ptr { + t = t.Elem() + } + + pv.flagType = strings.TrimSuffix(t.Name(), "Value") + return pv +} + +func (v *flagValueWrapper) String() string { + return v.inner.String() +} + +func (v *flagValueWrapper) Set(s string) error { + return v.inner.Set(s) +} + +func (v *flagValueWrapper) Type() string { + return v.flagType +} + +// PFlagFromGoFlag will return a *pflag.Flag given a *flag.Flag +// If the *flag.Flag.Name was a single character (ex: `v`) it will be accessiblei +// with both `-v` and `--v` in flags. If the golang flag was more than a single +// character (ex: `verbose`) it will only be accessible via `--verbose` +func PFlagFromGoFlag(goflag *goflag.Flag) *Flag { + // Remember the default value as a string; it won't change. + flag := &Flag{ + Name: goflag.Name, + Usage: goflag.Usage, + Value: wrapFlagValue(goflag.Value), + // Looks like golang flags don't set DefValue correctly :-( + //DefValue: goflag.DefValue, + DefValue: goflag.Value.String(), + } + // Ex: if the golang flag was -v, allow both -v and --v to work + if len(flag.Name) == 1 { + flag.Shorthand = flag.Name + } + if fv, ok := goflag.Value.(goBoolFlag); ok && fv.IsBoolFlag() { + flag.NoOptDefVal = "true" + } + return flag +} + +// AddGoFlag will add the given *flag.Flag to the pflag.FlagSet +func (f *FlagSet) AddGoFlag(goflag *goflag.Flag) { + if f.Lookup(goflag.Name) != nil { + return + } + newflag := PFlagFromGoFlag(goflag) + f.AddFlag(newflag) +} + +// AddGoFlagSet will add the given *flag.FlagSet to the pflag.FlagSet +func (f *FlagSet) AddGoFlagSet(newSet *goflag.FlagSet) { + if newSet == nil { + return + } + newSet.VisitAll(func(goflag *goflag.Flag) { + f.AddGoFlag(goflag) + }) +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/int.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/int.go new file mode 100644 index 0000000..1474b89 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/int.go @@ -0,0 +1,84 @@ +package pflag + +import "strconv" + +// -- int Value +type intValue int + +func newIntValue(val int, p *int) *intValue { + *p = val + return (*intValue)(p) +} + +func (i *intValue) Set(s string) error { + v, err := strconv.ParseInt(s, 0, 64) + *i = intValue(v) + return err +} + +func (i *intValue) Type() string { + return "int" +} + +func (i *intValue) String() string { return strconv.Itoa(int(*i)) } + +func intConv(sval string) (interface{}, error) { + return strconv.Atoi(sval) +} + +// GetInt return the int value of a flag with the given name +func (f *FlagSet) GetInt(name string) (int, error) { + val, err := f.getFlagType(name, "int", intConv) + if err != nil { + return 0, err + } + return val.(int), nil +} + +// IntVar defines an int flag with specified name, default value, and usage string. +// The argument p points to an int variable in which to store the value of the flag. +func (f *FlagSet) IntVar(p *int, name string, value int, usage string) { + f.VarP(newIntValue(value, p), name, "", usage) +} + +// IntVarP is like IntVar, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) IntVarP(p *int, name, shorthand string, value int, usage string) { + f.VarP(newIntValue(value, p), name, shorthand, usage) +} + +// IntVar defines an int flag with specified name, default value, and usage string. +// The argument p points to an int variable in which to store the value of the flag. +func IntVar(p *int, name string, value int, usage string) { + CommandLine.VarP(newIntValue(value, p), name, "", usage) +} + +// IntVarP is like IntVar, but accepts a shorthand letter that can be used after a single dash. +func IntVarP(p *int, name, shorthand string, value int, usage string) { + CommandLine.VarP(newIntValue(value, p), name, shorthand, usage) +} + +// Int defines an int flag with specified name, default value, and usage string. +// The return value is the address of an int variable that stores the value of the flag. +func (f *FlagSet) Int(name string, value int, usage string) *int { + p := new(int) + f.IntVarP(p, name, "", value, usage) + return p +} + +// IntP is like Int, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) IntP(name, shorthand string, value int, usage string) *int { + p := new(int) + f.IntVarP(p, name, shorthand, value, usage) + return p +} + +// Int defines an int flag with specified name, default value, and usage string. +// The return value is the address of an int variable that stores the value of the flag. +func Int(name string, value int, usage string) *int { + return CommandLine.IntP(name, "", value, usage) +} + +// IntP is like Int, but accepts a shorthand letter that can be used after a single dash. +func IntP(name, shorthand string, value int, usage string) *int { + return CommandLine.IntP(name, shorthand, value, usage) +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/int32.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/int32.go new file mode 100644 index 0000000..9b95944 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/int32.go @@ -0,0 +1,88 @@ +package pflag + +import "strconv" + +// -- int32 Value +type int32Value int32 + +func newInt32Value(val int32, p *int32) *int32Value { + *p = val + return (*int32Value)(p) +} + +func (i *int32Value) Set(s string) error { + v, err := strconv.ParseInt(s, 0, 32) + *i = int32Value(v) + return err +} + +func (i *int32Value) Type() string { + return "int32" +} + +func (i *int32Value) String() string { return strconv.FormatInt(int64(*i), 10) } + +func int32Conv(sval string) (interface{}, error) { + v, err := strconv.ParseInt(sval, 0, 32) + if err != nil { + return 0, err + } + return int32(v), nil +} + +// GetInt32 return the int32 value of a flag with the given name +func (f *FlagSet) GetInt32(name string) (int32, error) { + val, err := f.getFlagType(name, "int32", int32Conv) + if err != nil { + return 0, err + } + return val.(int32), nil +} + +// Int32Var defines an int32 flag with specified name, default value, and usage string. +// The argument p points to an int32 variable in which to store the value of the flag. +func (f *FlagSet) Int32Var(p *int32, name string, value int32, usage string) { + f.VarP(newInt32Value(value, p), name, "", usage) +} + +// Int32VarP is like Int32Var, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) Int32VarP(p *int32, name, shorthand string, value int32, usage string) { + f.VarP(newInt32Value(value, p), name, shorthand, usage) +} + +// Int32Var defines an int32 flag with specified name, default value, and usage string. +// The argument p points to an int32 variable in which to store the value of the flag. +func Int32Var(p *int32, name string, value int32, usage string) { + CommandLine.VarP(newInt32Value(value, p), name, "", usage) +} + +// Int32VarP is like Int32Var, but accepts a shorthand letter that can be used after a single dash. +func Int32VarP(p *int32, name, shorthand string, value int32, usage string) { + CommandLine.VarP(newInt32Value(value, p), name, shorthand, usage) +} + +// Int32 defines an int32 flag with specified name, default value, and usage string. +// The return value is the address of an int32 variable that stores the value of the flag. +func (f *FlagSet) Int32(name string, value int32, usage string) *int32 { + p := new(int32) + f.Int32VarP(p, name, "", value, usage) + return p +} + +// Int32P is like Int32, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) Int32P(name, shorthand string, value int32, usage string) *int32 { + p := new(int32) + f.Int32VarP(p, name, shorthand, value, usage) + return p +} + +// Int32 defines an int32 flag with specified name, default value, and usage string. +// The return value is the address of an int32 variable that stores the value of the flag. +func Int32(name string, value int32, usage string) *int32 { + return CommandLine.Int32P(name, "", value, usage) +} + +// Int32P is like Int32, but accepts a shorthand letter that can be used after a single dash. +func Int32P(name, shorthand string, value int32, usage string) *int32 { + return CommandLine.Int32P(name, shorthand, value, usage) +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/int64.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/int64.go new file mode 100644 index 0000000..0026d78 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/int64.go @@ -0,0 +1,84 @@ +package pflag + +import "strconv" + +// -- int64 Value +type int64Value int64 + +func newInt64Value(val int64, p *int64) *int64Value { + *p = val + return (*int64Value)(p) +} + +func (i *int64Value) Set(s string) error { + v, err := strconv.ParseInt(s, 0, 64) + *i = int64Value(v) + return err +} + +func (i *int64Value) Type() string { + return "int64" +} + +func (i *int64Value) String() string { return strconv.FormatInt(int64(*i), 10) } + +func int64Conv(sval string) (interface{}, error) { + return strconv.ParseInt(sval, 0, 64) +} + +// GetInt64 return the int64 value of a flag with the given name +func (f *FlagSet) GetInt64(name string) (int64, error) { + val, err := f.getFlagType(name, "int64", int64Conv) + if err != nil { + return 0, err + } + return val.(int64), nil +} + +// Int64Var defines an int64 flag with specified name, default value, and usage string. +// The argument p points to an int64 variable in which to store the value of the flag. +func (f *FlagSet) Int64Var(p *int64, name string, value int64, usage string) { + f.VarP(newInt64Value(value, p), name, "", usage) +} + +// Int64VarP is like Int64Var, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) Int64VarP(p *int64, name, shorthand string, value int64, usage string) { + f.VarP(newInt64Value(value, p), name, shorthand, usage) +} + +// Int64Var defines an int64 flag with specified name, default value, and usage string. +// The argument p points to an int64 variable in which to store the value of the flag. +func Int64Var(p *int64, name string, value int64, usage string) { + CommandLine.VarP(newInt64Value(value, p), name, "", usage) +} + +// Int64VarP is like Int64Var, but accepts a shorthand letter that can be used after a single dash. +func Int64VarP(p *int64, name, shorthand string, value int64, usage string) { + CommandLine.VarP(newInt64Value(value, p), name, shorthand, usage) +} + +// Int64 defines an int64 flag with specified name, default value, and usage string. +// The return value is the address of an int64 variable that stores the value of the flag. +func (f *FlagSet) Int64(name string, value int64, usage string) *int64 { + p := new(int64) + f.Int64VarP(p, name, "", value, usage) + return p +} + +// Int64P is like Int64, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) Int64P(name, shorthand string, value int64, usage string) *int64 { + p := new(int64) + f.Int64VarP(p, name, shorthand, value, usage) + return p +} + +// Int64 defines an int64 flag with specified name, default value, and usage string. +// The return value is the address of an int64 variable that stores the value of the flag. +func Int64(name string, value int64, usage string) *int64 { + return CommandLine.Int64P(name, "", value, usage) +} + +// Int64P is like Int64, but accepts a shorthand letter that can be used after a single dash. +func Int64P(name, shorthand string, value int64, usage string) *int64 { + return CommandLine.Int64P(name, shorthand, value, usage) +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/int8.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/int8.go new file mode 100644 index 0000000..4da9222 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/int8.go @@ -0,0 +1,88 @@ +package pflag + +import "strconv" + +// -- int8 Value +type int8Value int8 + +func newInt8Value(val int8, p *int8) *int8Value { + *p = val + return (*int8Value)(p) +} + +func (i *int8Value) Set(s string) error { + v, err := strconv.ParseInt(s, 0, 8) + *i = int8Value(v) + return err +} + +func (i *int8Value) Type() string { + return "int8" +} + +func (i *int8Value) String() string { return strconv.FormatInt(int64(*i), 10) } + +func int8Conv(sval string) (interface{}, error) { + v, err := strconv.ParseInt(sval, 0, 8) + if err != nil { + return 0, err + } + return int8(v), nil +} + +// GetInt8 return the int8 value of a flag with the given name +func (f *FlagSet) GetInt8(name string) (int8, error) { + val, err := f.getFlagType(name, "int8", int8Conv) + if err != nil { + return 0, err + } + return val.(int8), nil +} + +// Int8Var defines an int8 flag with specified name, default value, and usage string. +// The argument p points to an int8 variable in which to store the value of the flag. +func (f *FlagSet) Int8Var(p *int8, name string, value int8, usage string) { + f.VarP(newInt8Value(value, p), name, "", usage) +} + +// Int8VarP is like Int8Var, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) Int8VarP(p *int8, name, shorthand string, value int8, usage string) { + f.VarP(newInt8Value(value, p), name, shorthand, usage) +} + +// Int8Var defines an int8 flag with specified name, default value, and usage string. +// The argument p points to an int8 variable in which to store the value of the flag. +func Int8Var(p *int8, name string, value int8, usage string) { + CommandLine.VarP(newInt8Value(value, p), name, "", usage) +} + +// Int8VarP is like Int8Var, but accepts a shorthand letter that can be used after a single dash. +func Int8VarP(p *int8, name, shorthand string, value int8, usage string) { + CommandLine.VarP(newInt8Value(value, p), name, shorthand, usage) +} + +// Int8 defines an int8 flag with specified name, default value, and usage string. +// The return value is the address of an int8 variable that stores the value of the flag. +func (f *FlagSet) Int8(name string, value int8, usage string) *int8 { + p := new(int8) + f.Int8VarP(p, name, "", value, usage) + return p +} + +// Int8P is like Int8, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) Int8P(name, shorthand string, value int8, usage string) *int8 { + p := new(int8) + f.Int8VarP(p, name, shorthand, value, usage) + return p +} + +// Int8 defines an int8 flag with specified name, default value, and usage string. +// The return value is the address of an int8 variable that stores the value of the flag. +func Int8(name string, value int8, usage string) *int8 { + return CommandLine.Int8P(name, "", value, usage) +} + +// Int8P is like Int8, but accepts a shorthand letter that can be used after a single dash. +func Int8P(name, shorthand string, value int8, usage string) *int8 { + return CommandLine.Int8P(name, shorthand, value, usage) +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/int_slice.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/int_slice.go new file mode 100644 index 0000000..1e7c9ed --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/int_slice.go @@ -0,0 +1,128 @@ +package pflag + +import ( + "fmt" + "strconv" + "strings" +) + +// -- intSlice Value +type intSliceValue struct { + value *[]int + changed bool +} + +func newIntSliceValue(val []int, p *[]int) *intSliceValue { + isv := new(intSliceValue) + isv.value = p + *isv.value = val + return isv +} + +func (s *intSliceValue) Set(val string) error { + ss := strings.Split(val, ",") + out := make([]int, len(ss)) + for i, d := range ss { + var err error + out[i], err = strconv.Atoi(d) + if err != nil { + return err + } + + } + if !s.changed { + *s.value = out + } else { + *s.value = append(*s.value, out...) + } + s.changed = true + return nil +} + +func (s *intSliceValue) Type() string { + return "intSlice" +} + +func (s *intSliceValue) String() string { + out := make([]string, len(*s.value)) + for i, d := range *s.value { + out[i] = fmt.Sprintf("%d", d) + } + return "[" + strings.Join(out, ",") + "]" +} + +func intSliceConv(val string) (interface{}, error) { + val = strings.Trim(val, "[]") + // Empty string would cause a slice with one (empty) entry + if len(val) == 0 { + return []int{}, nil + } + ss := strings.Split(val, ",") + out := make([]int, len(ss)) + for i, d := range ss { + var err error + out[i], err = strconv.Atoi(d) + if err != nil { + return nil, err + } + + } + return out, nil +} + +// GetIntSlice return the []int value of a flag with the given name +func (f *FlagSet) GetIntSlice(name string) ([]int, error) { + val, err := f.getFlagType(name, "intSlice", intSliceConv) + if err != nil { + return []int{}, err + } + return val.([]int), nil +} + +// IntSliceVar defines a intSlice flag with specified name, default value, and usage string. +// The argument p points to a []int variable in which to store the value of the flag. +func (f *FlagSet) IntSliceVar(p *[]int, name string, value []int, usage string) { + f.VarP(newIntSliceValue(value, p), name, "", usage) +} + +// IntSliceVarP is like IntSliceVar, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) IntSliceVarP(p *[]int, name, shorthand string, value []int, usage string) { + f.VarP(newIntSliceValue(value, p), name, shorthand, usage) +} + +// IntSliceVar defines a int[] flag with specified name, default value, and usage string. +// The argument p points to a int[] variable in which to store the value of the flag. +func IntSliceVar(p *[]int, name string, value []int, usage string) { + CommandLine.VarP(newIntSliceValue(value, p), name, "", usage) +} + +// IntSliceVarP is like IntSliceVar, but accepts a shorthand letter that can be used after a single dash. +func IntSliceVarP(p *[]int, name, shorthand string, value []int, usage string) { + CommandLine.VarP(newIntSliceValue(value, p), name, shorthand, usage) +} + +// IntSlice defines a []int flag with specified name, default value, and usage string. +// The return value is the address of a []int variable that stores the value of the flag. +func (f *FlagSet) IntSlice(name string, value []int, usage string) *[]int { + p := []int{} + f.IntSliceVarP(&p, name, "", value, usage) + return &p +} + +// IntSliceP is like IntSlice, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) IntSliceP(name, shorthand string, value []int, usage string) *[]int { + p := []int{} + f.IntSliceVarP(&p, name, shorthand, value, usage) + return &p +} + +// IntSlice defines a []int flag with specified name, default value, and usage string. +// The return value is the address of a []int variable that stores the value of the flag. +func IntSlice(name string, value []int, usage string) *[]int { + return CommandLine.IntSliceP(name, "", value, usage) +} + +// IntSliceP is like IntSlice, but accepts a shorthand letter that can be used after a single dash. +func IntSliceP(name, shorthand string, value []int, usage string) *[]int { + return CommandLine.IntSliceP(name, shorthand, value, usage) +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/ip.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/ip.go new file mode 100644 index 0000000..3d414ba --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/ip.go @@ -0,0 +1,94 @@ +package pflag + +import ( + "fmt" + "net" + "strings" +) + +// -- net.IP value +type ipValue net.IP + +func newIPValue(val net.IP, p *net.IP) *ipValue { + *p = val + return (*ipValue)(p) +} + +func (i *ipValue) String() string { return net.IP(*i).String() } +func (i *ipValue) Set(s string) error { + ip := net.ParseIP(strings.TrimSpace(s)) + if ip == nil { + return fmt.Errorf("failed to parse IP: %q", s) + } + *i = ipValue(ip) + return nil +} + +func (i *ipValue) Type() string { + return "ip" +} + +func ipConv(sval string) (interface{}, error) { + ip := net.ParseIP(sval) + if ip != nil { + return ip, nil + } + return nil, fmt.Errorf("invalid string being converted to IP address: %s", sval) +} + +// GetIP return the net.IP value of a flag with the given name +func (f *FlagSet) GetIP(name string) (net.IP, error) { + val, err := f.getFlagType(name, "ip", ipConv) + if err != nil { + return nil, err + } + return val.(net.IP), nil +} + +// IPVar defines an net.IP flag with specified name, default value, and usage string. +// The argument p points to an net.IP variable in which to store the value of the flag. +func (f *FlagSet) IPVar(p *net.IP, name string, value net.IP, usage string) { + f.VarP(newIPValue(value, p), name, "", usage) +} + +// IPVarP is like IPVar, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) IPVarP(p *net.IP, name, shorthand string, value net.IP, usage string) { + f.VarP(newIPValue(value, p), name, shorthand, usage) +} + +// IPVar defines an net.IP flag with specified name, default value, and usage string. +// The argument p points to an net.IP variable in which to store the value of the flag. +func IPVar(p *net.IP, name string, value net.IP, usage string) { + CommandLine.VarP(newIPValue(value, p), name, "", usage) +} + +// IPVarP is like IPVar, but accepts a shorthand letter that can be used after a single dash. +func IPVarP(p *net.IP, name, shorthand string, value net.IP, usage string) { + CommandLine.VarP(newIPValue(value, p), name, shorthand, usage) +} + +// IP defines an net.IP flag with specified name, default value, and usage string. +// The return value is the address of an net.IP variable that stores the value of the flag. +func (f *FlagSet) IP(name string, value net.IP, usage string) *net.IP { + p := new(net.IP) + f.IPVarP(p, name, "", value, usage) + return p +} + +// IPP is like IP, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) IPP(name, shorthand string, value net.IP, usage string) *net.IP { + p := new(net.IP) + f.IPVarP(p, name, shorthand, value, usage) + return p +} + +// IP defines an net.IP flag with specified name, default value, and usage string. +// The return value is the address of an net.IP variable that stores the value of the flag. +func IP(name string, value net.IP, usage string) *net.IP { + return CommandLine.IPP(name, "", value, usage) +} + +// IPP is like IP, but accepts a shorthand letter that can be used after a single dash. +func IPP(name, shorthand string, value net.IP, usage string) *net.IP { + return CommandLine.IPP(name, shorthand, value, usage) +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/ip_slice.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/ip_slice.go new file mode 100644 index 0000000..7dd196f --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/ip_slice.go @@ -0,0 +1,148 @@ +package pflag + +import ( + "fmt" + "io" + "net" + "strings" +) + +// -- ipSlice Value +type ipSliceValue struct { + value *[]net.IP + changed bool +} + +func newIPSliceValue(val []net.IP, p *[]net.IP) *ipSliceValue { + ipsv := new(ipSliceValue) + ipsv.value = p + *ipsv.value = val + return ipsv +} + +// Set converts, and assigns, the comma-separated IP argument string representation as the []net.IP value of this flag. +// If Set is called on a flag that already has a []net.IP assigned, the newly converted values will be appended. +func (s *ipSliceValue) Set(val string) error { + + // remove all quote characters + rmQuote := strings.NewReplacer(`"`, "", `'`, "", "`", "") + + // read flag arguments with CSV parser + ipStrSlice, err := readAsCSV(rmQuote.Replace(val)) + if err != nil && err != io.EOF { + return err + } + + // parse ip values into slice + out := make([]net.IP, 0, len(ipStrSlice)) + for _, ipStr := range ipStrSlice { + ip := net.ParseIP(strings.TrimSpace(ipStr)) + if ip == nil { + return fmt.Errorf("invalid string being converted to IP address: %s", ipStr) + } + out = append(out, ip) + } + + if !s.changed { + *s.value = out + } else { + *s.value = append(*s.value, out...) + } + + s.changed = true + + return nil +} + +// Type returns a string that uniquely represents this flag's type. +func (s *ipSliceValue) Type() string { + return "ipSlice" +} + +// String defines a "native" format for this net.IP slice flag value. +func (s *ipSliceValue) String() string { + + ipStrSlice := make([]string, len(*s.value)) + for i, ip := range *s.value { + ipStrSlice[i] = ip.String() + } + + out, _ := writeAsCSV(ipStrSlice) + + return "[" + out + "]" +} + +func ipSliceConv(val string) (interface{}, error) { + val = strings.Trim(val, "[]") + // Emtpy string would cause a slice with one (empty) entry + if len(val) == 0 { + return []net.IP{}, nil + } + ss := strings.Split(val, ",") + out := make([]net.IP, len(ss)) + for i, sval := range ss { + ip := net.ParseIP(strings.TrimSpace(sval)) + if ip == nil { + return nil, fmt.Errorf("invalid string being converted to IP address: %s", sval) + } + out[i] = ip + } + return out, nil +} + +// GetIPSlice returns the []net.IP value of a flag with the given name +func (f *FlagSet) GetIPSlice(name string) ([]net.IP, error) { + val, err := f.getFlagType(name, "ipSlice", ipSliceConv) + if err != nil { + return []net.IP{}, err + } + return val.([]net.IP), nil +} + +// IPSliceVar defines a ipSlice flag with specified name, default value, and usage string. +// The argument p points to a []net.IP variable in which to store the value of the flag. +func (f *FlagSet) IPSliceVar(p *[]net.IP, name string, value []net.IP, usage string) { + f.VarP(newIPSliceValue(value, p), name, "", usage) +} + +// IPSliceVarP is like IPSliceVar, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) IPSliceVarP(p *[]net.IP, name, shorthand string, value []net.IP, usage string) { + f.VarP(newIPSliceValue(value, p), name, shorthand, usage) +} + +// IPSliceVar defines a []net.IP flag with specified name, default value, and usage string. +// The argument p points to a []net.IP variable in which to store the value of the flag. +func IPSliceVar(p *[]net.IP, name string, value []net.IP, usage string) { + CommandLine.VarP(newIPSliceValue(value, p), name, "", usage) +} + +// IPSliceVarP is like IPSliceVar, but accepts a shorthand letter that can be used after a single dash. +func IPSliceVarP(p *[]net.IP, name, shorthand string, value []net.IP, usage string) { + CommandLine.VarP(newIPSliceValue(value, p), name, shorthand, usage) +} + +// IPSlice defines a []net.IP flag with specified name, default value, and usage string. +// The return value is the address of a []net.IP variable that stores the value of that flag. +func (f *FlagSet) IPSlice(name string, value []net.IP, usage string) *[]net.IP { + p := []net.IP{} + f.IPSliceVarP(&p, name, "", value, usage) + return &p +} + +// IPSliceP is like IPSlice, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) IPSliceP(name, shorthand string, value []net.IP, usage string) *[]net.IP { + p := []net.IP{} + f.IPSliceVarP(&p, name, shorthand, value, usage) + return &p +} + +// IPSlice defines a []net.IP flag with specified name, default value, and usage string. +// The return value is the address of a []net.IP variable that stores the value of the flag. +func IPSlice(name string, value []net.IP, usage string) *[]net.IP { + return CommandLine.IPSliceP(name, "", value, usage) +} + +// IPSliceP is like IPSlice, but accepts a shorthand letter that can be used after a single dash. +func IPSliceP(name, shorthand string, value []net.IP, usage string) *[]net.IP { + return CommandLine.IPSliceP(name, shorthand, value, usage) +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/ipmask.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/ipmask.go new file mode 100644 index 0000000..5bd44bd --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/ipmask.go @@ -0,0 +1,122 @@ +package pflag + +import ( + "fmt" + "net" + "strconv" +) + +// -- net.IPMask value +type ipMaskValue net.IPMask + +func newIPMaskValue(val net.IPMask, p *net.IPMask) *ipMaskValue { + *p = val + return (*ipMaskValue)(p) +} + +func (i *ipMaskValue) String() string { return net.IPMask(*i).String() } +func (i *ipMaskValue) Set(s string) error { + ip := ParseIPv4Mask(s) + if ip == nil { + return fmt.Errorf("failed to parse IP mask: %q", s) + } + *i = ipMaskValue(ip) + return nil +} + +func (i *ipMaskValue) Type() string { + return "ipMask" +} + +// ParseIPv4Mask written in IP form (e.g. 255.255.255.0). +// This function should really belong to the net package. +func ParseIPv4Mask(s string) net.IPMask { + mask := net.ParseIP(s) + if mask == nil { + if len(s) != 8 { + return nil + } + // net.IPMask.String() actually outputs things like ffffff00 + // so write a horrible parser for that as well :-( + m := []int{} + for i := 0; i < 4; i++ { + b := "0x" + s[2*i:2*i+2] + d, err := strconv.ParseInt(b, 0, 0) + if err != nil { + return nil + } + m = append(m, int(d)) + } + s := fmt.Sprintf("%d.%d.%d.%d", m[0], m[1], m[2], m[3]) + mask = net.ParseIP(s) + if mask == nil { + return nil + } + } + return net.IPv4Mask(mask[12], mask[13], mask[14], mask[15]) +} + +func parseIPv4Mask(sval string) (interface{}, error) { + mask := ParseIPv4Mask(sval) + if mask == nil { + return nil, fmt.Errorf("unable to parse %s as net.IPMask", sval) + } + return mask, nil +} + +// GetIPv4Mask return the net.IPv4Mask value of a flag with the given name +func (f *FlagSet) GetIPv4Mask(name string) (net.IPMask, error) { + val, err := f.getFlagType(name, "ipMask", parseIPv4Mask) + if err != nil { + return nil, err + } + return val.(net.IPMask), nil +} + +// IPMaskVar defines an net.IPMask flag with specified name, default value, and usage string. +// The argument p points to an net.IPMask variable in which to store the value of the flag. +func (f *FlagSet) IPMaskVar(p *net.IPMask, name string, value net.IPMask, usage string) { + f.VarP(newIPMaskValue(value, p), name, "", usage) +} + +// IPMaskVarP is like IPMaskVar, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) IPMaskVarP(p *net.IPMask, name, shorthand string, value net.IPMask, usage string) { + f.VarP(newIPMaskValue(value, p), name, shorthand, usage) +} + +// IPMaskVar defines an net.IPMask flag with specified name, default value, and usage string. +// The argument p points to an net.IPMask variable in which to store the value of the flag. +func IPMaskVar(p *net.IPMask, name string, value net.IPMask, usage string) { + CommandLine.VarP(newIPMaskValue(value, p), name, "", usage) +} + +// IPMaskVarP is like IPMaskVar, but accepts a shorthand letter that can be used after a single dash. +func IPMaskVarP(p *net.IPMask, name, shorthand string, value net.IPMask, usage string) { + CommandLine.VarP(newIPMaskValue(value, p), name, shorthand, usage) +} + +// IPMask defines an net.IPMask flag with specified name, default value, and usage string. +// The return value is the address of an net.IPMask variable that stores the value of the flag. +func (f *FlagSet) IPMask(name string, value net.IPMask, usage string) *net.IPMask { + p := new(net.IPMask) + f.IPMaskVarP(p, name, "", value, usage) + return p +} + +// IPMaskP is like IPMask, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) IPMaskP(name, shorthand string, value net.IPMask, usage string) *net.IPMask { + p := new(net.IPMask) + f.IPMaskVarP(p, name, shorthand, value, usage) + return p +} + +// IPMask defines an net.IPMask flag with specified name, default value, and usage string. +// The return value is the address of an net.IPMask variable that stores the value of the flag. +func IPMask(name string, value net.IPMask, usage string) *net.IPMask { + return CommandLine.IPMaskP(name, "", value, usage) +} + +// IPMaskP is like IP, but accepts a shorthand letter that can be used after a single dash. +func IPMaskP(name, shorthand string, value net.IPMask, usage string) *net.IPMask { + return CommandLine.IPMaskP(name, shorthand, value, usage) +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/ipnet.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/ipnet.go new file mode 100644 index 0000000..e2c1b8b --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/ipnet.go @@ -0,0 +1,98 @@ +package pflag + +import ( + "fmt" + "net" + "strings" +) + +// IPNet adapts net.IPNet for use as a flag. +type ipNetValue net.IPNet + +func (ipnet ipNetValue) String() string { + n := net.IPNet(ipnet) + return n.String() +} + +func (ipnet *ipNetValue) Set(value string) error { + _, n, err := net.ParseCIDR(strings.TrimSpace(value)) + if err != nil { + return err + } + *ipnet = ipNetValue(*n) + return nil +} + +func (*ipNetValue) Type() string { + return "ipNet" +} + +func newIPNetValue(val net.IPNet, p *net.IPNet) *ipNetValue { + *p = val + return (*ipNetValue)(p) +} + +func ipNetConv(sval string) (interface{}, error) { + _, n, err := net.ParseCIDR(strings.TrimSpace(sval)) + if err == nil { + return *n, nil + } + return nil, fmt.Errorf("invalid string being converted to IPNet: %s", sval) +} + +// GetIPNet return the net.IPNet value of a flag with the given name +func (f *FlagSet) GetIPNet(name string) (net.IPNet, error) { + val, err := f.getFlagType(name, "ipNet", ipNetConv) + if err != nil { + return net.IPNet{}, err + } + return val.(net.IPNet), nil +} + +// IPNetVar defines an net.IPNet flag with specified name, default value, and usage string. +// The argument p points to an net.IPNet variable in which to store the value of the flag. +func (f *FlagSet) IPNetVar(p *net.IPNet, name string, value net.IPNet, usage string) { + f.VarP(newIPNetValue(value, p), name, "", usage) +} + +// IPNetVarP is like IPNetVar, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) IPNetVarP(p *net.IPNet, name, shorthand string, value net.IPNet, usage string) { + f.VarP(newIPNetValue(value, p), name, shorthand, usage) +} + +// IPNetVar defines an net.IPNet flag with specified name, default value, and usage string. +// The argument p points to an net.IPNet variable in which to store the value of the flag. +func IPNetVar(p *net.IPNet, name string, value net.IPNet, usage string) { + CommandLine.VarP(newIPNetValue(value, p), name, "", usage) +} + +// IPNetVarP is like IPNetVar, but accepts a shorthand letter that can be used after a single dash. +func IPNetVarP(p *net.IPNet, name, shorthand string, value net.IPNet, usage string) { + CommandLine.VarP(newIPNetValue(value, p), name, shorthand, usage) +} + +// IPNet defines an net.IPNet flag with specified name, default value, and usage string. +// The return value is the address of an net.IPNet variable that stores the value of the flag. +func (f *FlagSet) IPNet(name string, value net.IPNet, usage string) *net.IPNet { + p := new(net.IPNet) + f.IPNetVarP(p, name, "", value, usage) + return p +} + +// IPNetP is like IPNet, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) IPNetP(name, shorthand string, value net.IPNet, usage string) *net.IPNet { + p := new(net.IPNet) + f.IPNetVarP(p, name, shorthand, value, usage) + return p +} + +// IPNet defines an net.IPNet flag with specified name, default value, and usage string. +// The return value is the address of an net.IPNet variable that stores the value of the flag. +func IPNet(name string, value net.IPNet, usage string) *net.IPNet { + return CommandLine.IPNetP(name, "", value, usage) +} + +// IPNetP is like IPNet, but accepts a shorthand letter that can be used after a single dash. +func IPNetP(name, shorthand string, value net.IPNet, usage string) *net.IPNet { + return CommandLine.IPNetP(name, shorthand, value, usage) +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/string.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/string.go new file mode 100644 index 0000000..04e0a26 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/string.go @@ -0,0 +1,80 @@ +package pflag + +// -- string Value +type stringValue string + +func newStringValue(val string, p *string) *stringValue { + *p = val + return (*stringValue)(p) +} + +func (s *stringValue) Set(val string) error { + *s = stringValue(val) + return nil +} +func (s *stringValue) Type() string { + return "string" +} + +func (s *stringValue) String() string { return string(*s) } + +func stringConv(sval string) (interface{}, error) { + return sval, nil +} + +// GetString return the string value of a flag with the given name +func (f *FlagSet) GetString(name string) (string, error) { + val, err := f.getFlagType(name, "string", stringConv) + if err != nil { + return "", err + } + return val.(string), nil +} + +// StringVar defines a string flag with specified name, default value, and usage string. +// The argument p points to a string variable in which to store the value of the flag. +func (f *FlagSet) StringVar(p *string, name string, value string, usage string) { + f.VarP(newStringValue(value, p), name, "", usage) +} + +// StringVarP is like StringVar, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) StringVarP(p *string, name, shorthand string, value string, usage string) { + f.VarP(newStringValue(value, p), name, shorthand, usage) +} + +// StringVar defines a string flag with specified name, default value, and usage string. +// The argument p points to a string variable in which to store the value of the flag. +func StringVar(p *string, name string, value string, usage string) { + CommandLine.VarP(newStringValue(value, p), name, "", usage) +} + +// StringVarP is like StringVar, but accepts a shorthand letter that can be used after a single dash. +func StringVarP(p *string, name, shorthand string, value string, usage string) { + CommandLine.VarP(newStringValue(value, p), name, shorthand, usage) +} + +// String defines a string flag with specified name, default value, and usage string. +// The return value is the address of a string variable that stores the value of the flag. +func (f *FlagSet) String(name string, value string, usage string) *string { + p := new(string) + f.StringVarP(p, name, "", value, usage) + return p +} + +// StringP is like String, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) StringP(name, shorthand string, value string, usage string) *string { + p := new(string) + f.StringVarP(p, name, shorthand, value, usage) + return p +} + +// String defines a string flag with specified name, default value, and usage string. +// The return value is the address of a string variable that stores the value of the flag. +func String(name string, value string, usage string) *string { + return CommandLine.StringP(name, "", value, usage) +} + +// StringP is like String, but accepts a shorthand letter that can be used after a single dash. +func StringP(name, shorthand string, value string, usage string) *string { + return CommandLine.StringP(name, shorthand, value, usage) +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/string_array.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/string_array.go new file mode 100644 index 0000000..276b7ed --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/string_array.go @@ -0,0 +1,103 @@ +package pflag + +// -- stringArray Value +type stringArrayValue struct { + value *[]string + changed bool +} + +func newStringArrayValue(val []string, p *[]string) *stringArrayValue { + ssv := new(stringArrayValue) + ssv.value = p + *ssv.value = val + return ssv +} + +func (s *stringArrayValue) Set(val string) error { + if !s.changed { + *s.value = []string{val} + s.changed = true + } else { + *s.value = append(*s.value, val) + } + return nil +} + +func (s *stringArrayValue) Type() string { + return "stringArray" +} + +func (s *stringArrayValue) String() string { + str, _ := writeAsCSV(*s.value) + return "[" + str + "]" +} + +func stringArrayConv(sval string) (interface{}, error) { + sval = sval[1 : len(sval)-1] + // An empty string would cause a array with one (empty) string + if len(sval) == 0 { + return []string{}, nil + } + return readAsCSV(sval) +} + +// GetStringArray return the []string value of a flag with the given name +func (f *FlagSet) GetStringArray(name string) ([]string, error) { + val, err := f.getFlagType(name, "stringArray", stringArrayConv) + if err != nil { + return []string{}, err + } + return val.([]string), nil +} + +// StringArrayVar defines a string flag with specified name, default value, and usage string. +// The argument p points to a []string variable in which to store the values of the multiple flags. +// The value of each argument will not try to be separated by comma +func (f *FlagSet) StringArrayVar(p *[]string, name string, value []string, usage string) { + f.VarP(newStringArrayValue(value, p), name, "", usage) +} + +// StringArrayVarP is like StringArrayVar, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) StringArrayVarP(p *[]string, name, shorthand string, value []string, usage string) { + f.VarP(newStringArrayValue(value, p), name, shorthand, usage) +} + +// StringArrayVar defines a string flag with specified name, default value, and usage string. +// The argument p points to a []string variable in which to store the value of the flag. +// The value of each argument will not try to be separated by comma +func StringArrayVar(p *[]string, name string, value []string, usage string) { + CommandLine.VarP(newStringArrayValue(value, p), name, "", usage) +} + +// StringArrayVarP is like StringArrayVar, but accepts a shorthand letter that can be used after a single dash. +func StringArrayVarP(p *[]string, name, shorthand string, value []string, usage string) { + CommandLine.VarP(newStringArrayValue(value, p), name, shorthand, usage) +} + +// StringArray defines a string flag with specified name, default value, and usage string. +// The return value is the address of a []string variable that stores the value of the flag. +// The value of each argument will not try to be separated by comma +func (f *FlagSet) StringArray(name string, value []string, usage string) *[]string { + p := []string{} + f.StringArrayVarP(&p, name, "", value, usage) + return &p +} + +// StringArrayP is like StringArray, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) StringArrayP(name, shorthand string, value []string, usage string) *[]string { + p := []string{} + f.StringArrayVarP(&p, name, shorthand, value, usage) + return &p +} + +// StringArray defines a string flag with specified name, default value, and usage string. +// The return value is the address of a []string variable that stores the value of the flag. +// The value of each argument will not try to be separated by comma +func StringArray(name string, value []string, usage string) *[]string { + return CommandLine.StringArrayP(name, "", value, usage) +} + +// StringArrayP is like StringArray, but accepts a shorthand letter that can be used after a single dash. +func StringArrayP(name, shorthand string, value []string, usage string) *[]string { + return CommandLine.StringArrayP(name, shorthand, value, usage) +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/string_slice.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/string_slice.go new file mode 100644 index 0000000..05eee75 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/string_slice.go @@ -0,0 +1,129 @@ +package pflag + +import ( + "bytes" + "encoding/csv" + "strings" +) + +// -- stringSlice Value +type stringSliceValue struct { + value *[]string + changed bool +} + +func newStringSliceValue(val []string, p *[]string) *stringSliceValue { + ssv := new(stringSliceValue) + ssv.value = p + *ssv.value = val + return ssv +} + +func readAsCSV(val string) ([]string, error) { + if val == "" { + return []string{}, nil + } + stringReader := strings.NewReader(val) + csvReader := csv.NewReader(stringReader) + return csvReader.Read() +} + +func writeAsCSV(vals []string) (string, error) { + b := &bytes.Buffer{} + w := csv.NewWriter(b) + err := w.Write(vals) + if err != nil { + return "", err + } + w.Flush() + return strings.TrimSuffix(b.String(), "\n"), nil +} + +func (s *stringSliceValue) Set(val string) error { + v, err := readAsCSV(val) + if err != nil { + return err + } + if !s.changed { + *s.value = v + } else { + *s.value = append(*s.value, v...) + } + s.changed = true + return nil +} + +func (s *stringSliceValue) Type() string { + return "stringSlice" +} + +func (s *stringSliceValue) String() string { + str, _ := writeAsCSV(*s.value) + return "[" + str + "]" +} + +func stringSliceConv(sval string) (interface{}, error) { + sval = sval[1 : len(sval)-1] + // An empty string would cause a slice with one (empty) string + if len(sval) == 0 { + return []string{}, nil + } + return readAsCSV(sval) +} + +// GetStringSlice return the []string value of a flag with the given name +func (f *FlagSet) GetStringSlice(name string) ([]string, error) { + val, err := f.getFlagType(name, "stringSlice", stringSliceConv) + if err != nil { + return []string{}, err + } + return val.([]string), nil +} + +// StringSliceVar defines a string flag with specified name, default value, and usage string. +// The argument p points to a []string variable in which to store the value of the flag. +func (f *FlagSet) StringSliceVar(p *[]string, name string, value []string, usage string) { + f.VarP(newStringSliceValue(value, p), name, "", usage) +} + +// StringSliceVarP is like StringSliceVar, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) StringSliceVarP(p *[]string, name, shorthand string, value []string, usage string) { + f.VarP(newStringSliceValue(value, p), name, shorthand, usage) +} + +// StringSliceVar defines a string flag with specified name, default value, and usage string. +// The argument p points to a []string variable in which to store the value of the flag. +func StringSliceVar(p *[]string, name string, value []string, usage string) { + CommandLine.VarP(newStringSliceValue(value, p), name, "", usage) +} + +// StringSliceVarP is like StringSliceVar, but accepts a shorthand letter that can be used after a single dash. +func StringSliceVarP(p *[]string, name, shorthand string, value []string, usage string) { + CommandLine.VarP(newStringSliceValue(value, p), name, shorthand, usage) +} + +// StringSlice defines a string flag with specified name, default value, and usage string. +// The return value is the address of a []string variable that stores the value of the flag. +func (f *FlagSet) StringSlice(name string, value []string, usage string) *[]string { + p := []string{} + f.StringSliceVarP(&p, name, "", value, usage) + return &p +} + +// StringSliceP is like StringSlice, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) StringSliceP(name, shorthand string, value []string, usage string) *[]string { + p := []string{} + f.StringSliceVarP(&p, name, shorthand, value, usage) + return &p +} + +// StringSlice defines a string flag with specified name, default value, and usage string. +// The return value is the address of a []string variable that stores the value of the flag. +func StringSlice(name string, value []string, usage string) *[]string { + return CommandLine.StringSliceP(name, "", value, usage) +} + +// StringSliceP is like StringSlice, but accepts a shorthand letter that can be used after a single dash. +func StringSliceP(name, shorthand string, value []string, usage string) *[]string { + return CommandLine.StringSliceP(name, shorthand, value, usage) +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/uint.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/uint.go new file mode 100644 index 0000000..dcbc2b7 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/uint.go @@ -0,0 +1,88 @@ +package pflag + +import "strconv" + +// -- uint Value +type uintValue uint + +func newUintValue(val uint, p *uint) *uintValue { + *p = val + return (*uintValue)(p) +} + +func (i *uintValue) Set(s string) error { + v, err := strconv.ParseUint(s, 0, 64) + *i = uintValue(v) + return err +} + +func (i *uintValue) Type() string { + return "uint" +} + +func (i *uintValue) String() string { return strconv.FormatUint(uint64(*i), 10) } + +func uintConv(sval string) (interface{}, error) { + v, err := strconv.ParseUint(sval, 0, 0) + if err != nil { + return 0, err + } + return uint(v), nil +} + +// GetUint return the uint value of a flag with the given name +func (f *FlagSet) GetUint(name string) (uint, error) { + val, err := f.getFlagType(name, "uint", uintConv) + if err != nil { + return 0, err + } + return val.(uint), nil +} + +// UintVar defines a uint flag with specified name, default value, and usage string. +// The argument p points to a uint variable in which to store the value of the flag. +func (f *FlagSet) UintVar(p *uint, name string, value uint, usage string) { + f.VarP(newUintValue(value, p), name, "", usage) +} + +// UintVarP is like UintVar, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) UintVarP(p *uint, name, shorthand string, value uint, usage string) { + f.VarP(newUintValue(value, p), name, shorthand, usage) +} + +// UintVar defines a uint flag with specified name, default value, and usage string. +// The argument p points to a uint variable in which to store the value of the flag. +func UintVar(p *uint, name string, value uint, usage string) { + CommandLine.VarP(newUintValue(value, p), name, "", usage) +} + +// UintVarP is like UintVar, but accepts a shorthand letter that can be used after a single dash. +func UintVarP(p *uint, name, shorthand string, value uint, usage string) { + CommandLine.VarP(newUintValue(value, p), name, shorthand, usage) +} + +// Uint defines a uint flag with specified name, default value, and usage string. +// The return value is the address of a uint variable that stores the value of the flag. +func (f *FlagSet) Uint(name string, value uint, usage string) *uint { + p := new(uint) + f.UintVarP(p, name, "", value, usage) + return p +} + +// UintP is like Uint, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) UintP(name, shorthand string, value uint, usage string) *uint { + p := new(uint) + f.UintVarP(p, name, shorthand, value, usage) + return p +} + +// Uint defines a uint flag with specified name, default value, and usage string. +// The return value is the address of a uint variable that stores the value of the flag. +func Uint(name string, value uint, usage string) *uint { + return CommandLine.UintP(name, "", value, usage) +} + +// UintP is like Uint, but accepts a shorthand letter that can be used after a single dash. +func UintP(name, shorthand string, value uint, usage string) *uint { + return CommandLine.UintP(name, shorthand, value, usage) +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/uint16.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/uint16.go new file mode 100644 index 0000000..7e9914e --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/uint16.go @@ -0,0 +1,88 @@ +package pflag + +import "strconv" + +// -- uint16 value +type uint16Value uint16 + +func newUint16Value(val uint16, p *uint16) *uint16Value { + *p = val + return (*uint16Value)(p) +} + +func (i *uint16Value) Set(s string) error { + v, err := strconv.ParseUint(s, 0, 16) + *i = uint16Value(v) + return err +} + +func (i *uint16Value) Type() string { + return "uint16" +} + +func (i *uint16Value) String() string { return strconv.FormatUint(uint64(*i), 10) } + +func uint16Conv(sval string) (interface{}, error) { + v, err := strconv.ParseUint(sval, 0, 16) + if err != nil { + return 0, err + } + return uint16(v), nil +} + +// GetUint16 return the uint16 value of a flag with the given name +func (f *FlagSet) GetUint16(name string) (uint16, error) { + val, err := f.getFlagType(name, "uint16", uint16Conv) + if err != nil { + return 0, err + } + return val.(uint16), nil +} + +// Uint16Var defines a uint flag with specified name, default value, and usage string. +// The argument p points to a uint variable in which to store the value of the flag. +func (f *FlagSet) Uint16Var(p *uint16, name string, value uint16, usage string) { + f.VarP(newUint16Value(value, p), name, "", usage) +} + +// Uint16VarP is like Uint16Var, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) Uint16VarP(p *uint16, name, shorthand string, value uint16, usage string) { + f.VarP(newUint16Value(value, p), name, shorthand, usage) +} + +// Uint16Var defines a uint flag with specified name, default value, and usage string. +// The argument p points to a uint variable in which to store the value of the flag. +func Uint16Var(p *uint16, name string, value uint16, usage string) { + CommandLine.VarP(newUint16Value(value, p), name, "", usage) +} + +// Uint16VarP is like Uint16Var, but accepts a shorthand letter that can be used after a single dash. +func Uint16VarP(p *uint16, name, shorthand string, value uint16, usage string) { + CommandLine.VarP(newUint16Value(value, p), name, shorthand, usage) +} + +// Uint16 defines a uint flag with specified name, default value, and usage string. +// The return value is the address of a uint variable that stores the value of the flag. +func (f *FlagSet) Uint16(name string, value uint16, usage string) *uint16 { + p := new(uint16) + f.Uint16VarP(p, name, "", value, usage) + return p +} + +// Uint16P is like Uint16, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) Uint16P(name, shorthand string, value uint16, usage string) *uint16 { + p := new(uint16) + f.Uint16VarP(p, name, shorthand, value, usage) + return p +} + +// Uint16 defines a uint flag with specified name, default value, and usage string. +// The return value is the address of a uint variable that stores the value of the flag. +func Uint16(name string, value uint16, usage string) *uint16 { + return CommandLine.Uint16P(name, "", value, usage) +} + +// Uint16P is like Uint16, but accepts a shorthand letter that can be used after a single dash. +func Uint16P(name, shorthand string, value uint16, usage string) *uint16 { + return CommandLine.Uint16P(name, shorthand, value, usage) +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/uint32.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/uint32.go new file mode 100644 index 0000000..d802453 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/uint32.go @@ -0,0 +1,88 @@ +package pflag + +import "strconv" + +// -- uint32 value +type uint32Value uint32 + +func newUint32Value(val uint32, p *uint32) *uint32Value { + *p = val + return (*uint32Value)(p) +} + +func (i *uint32Value) Set(s string) error { + v, err := strconv.ParseUint(s, 0, 32) + *i = uint32Value(v) + return err +} + +func (i *uint32Value) Type() string { + return "uint32" +} + +func (i *uint32Value) String() string { return strconv.FormatUint(uint64(*i), 10) } + +func uint32Conv(sval string) (interface{}, error) { + v, err := strconv.ParseUint(sval, 0, 32) + if err != nil { + return 0, err + } + return uint32(v), nil +} + +// GetUint32 return the uint32 value of a flag with the given name +func (f *FlagSet) GetUint32(name string) (uint32, error) { + val, err := f.getFlagType(name, "uint32", uint32Conv) + if err != nil { + return 0, err + } + return val.(uint32), nil +} + +// Uint32Var defines a uint32 flag with specified name, default value, and usage string. +// The argument p points to a uint32 variable in which to store the value of the flag. +func (f *FlagSet) Uint32Var(p *uint32, name string, value uint32, usage string) { + f.VarP(newUint32Value(value, p), name, "", usage) +} + +// Uint32VarP is like Uint32Var, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) Uint32VarP(p *uint32, name, shorthand string, value uint32, usage string) { + f.VarP(newUint32Value(value, p), name, shorthand, usage) +} + +// Uint32Var defines a uint32 flag with specified name, default value, and usage string. +// The argument p points to a uint32 variable in which to store the value of the flag. +func Uint32Var(p *uint32, name string, value uint32, usage string) { + CommandLine.VarP(newUint32Value(value, p), name, "", usage) +} + +// Uint32VarP is like Uint32Var, but accepts a shorthand letter that can be used after a single dash. +func Uint32VarP(p *uint32, name, shorthand string, value uint32, usage string) { + CommandLine.VarP(newUint32Value(value, p), name, shorthand, usage) +} + +// Uint32 defines a uint32 flag with specified name, default value, and usage string. +// The return value is the address of a uint32 variable that stores the value of the flag. +func (f *FlagSet) Uint32(name string, value uint32, usage string) *uint32 { + p := new(uint32) + f.Uint32VarP(p, name, "", value, usage) + return p +} + +// Uint32P is like Uint32, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) Uint32P(name, shorthand string, value uint32, usage string) *uint32 { + p := new(uint32) + f.Uint32VarP(p, name, shorthand, value, usage) + return p +} + +// Uint32 defines a uint32 flag with specified name, default value, and usage string. +// The return value is the address of a uint32 variable that stores the value of the flag. +func Uint32(name string, value uint32, usage string) *uint32 { + return CommandLine.Uint32P(name, "", value, usage) +} + +// Uint32P is like Uint32, but accepts a shorthand letter that can be used after a single dash. +func Uint32P(name, shorthand string, value uint32, usage string) *uint32 { + return CommandLine.Uint32P(name, shorthand, value, usage) +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/uint64.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/uint64.go new file mode 100644 index 0000000..f62240f --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/uint64.go @@ -0,0 +1,88 @@ +package pflag + +import "strconv" + +// -- uint64 Value +type uint64Value uint64 + +func newUint64Value(val uint64, p *uint64) *uint64Value { + *p = val + return (*uint64Value)(p) +} + +func (i *uint64Value) Set(s string) error { + v, err := strconv.ParseUint(s, 0, 64) + *i = uint64Value(v) + return err +} + +func (i *uint64Value) Type() string { + return "uint64" +} + +func (i *uint64Value) String() string { return strconv.FormatUint(uint64(*i), 10) } + +func uint64Conv(sval string) (interface{}, error) { + v, err := strconv.ParseUint(sval, 0, 64) + if err != nil { + return 0, err + } + return uint64(v), nil +} + +// GetUint64 return the uint64 value of a flag with the given name +func (f *FlagSet) GetUint64(name string) (uint64, error) { + val, err := f.getFlagType(name, "uint64", uint64Conv) + if err != nil { + return 0, err + } + return val.(uint64), nil +} + +// Uint64Var defines a uint64 flag with specified name, default value, and usage string. +// The argument p points to a uint64 variable in which to store the value of the flag. +func (f *FlagSet) Uint64Var(p *uint64, name string, value uint64, usage string) { + f.VarP(newUint64Value(value, p), name, "", usage) +} + +// Uint64VarP is like Uint64Var, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) Uint64VarP(p *uint64, name, shorthand string, value uint64, usage string) { + f.VarP(newUint64Value(value, p), name, shorthand, usage) +} + +// Uint64Var defines a uint64 flag with specified name, default value, and usage string. +// The argument p points to a uint64 variable in which to store the value of the flag. +func Uint64Var(p *uint64, name string, value uint64, usage string) { + CommandLine.VarP(newUint64Value(value, p), name, "", usage) +} + +// Uint64VarP is like Uint64Var, but accepts a shorthand letter that can be used after a single dash. +func Uint64VarP(p *uint64, name, shorthand string, value uint64, usage string) { + CommandLine.VarP(newUint64Value(value, p), name, shorthand, usage) +} + +// Uint64 defines a uint64 flag with specified name, default value, and usage string. +// The return value is the address of a uint64 variable that stores the value of the flag. +func (f *FlagSet) Uint64(name string, value uint64, usage string) *uint64 { + p := new(uint64) + f.Uint64VarP(p, name, "", value, usage) + return p +} + +// Uint64P is like Uint64, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) Uint64P(name, shorthand string, value uint64, usage string) *uint64 { + p := new(uint64) + f.Uint64VarP(p, name, shorthand, value, usage) + return p +} + +// Uint64 defines a uint64 flag with specified name, default value, and usage string. +// The return value is the address of a uint64 variable that stores the value of the flag. +func Uint64(name string, value uint64, usage string) *uint64 { + return CommandLine.Uint64P(name, "", value, usage) +} + +// Uint64P is like Uint64, but accepts a shorthand letter that can be used after a single dash. +func Uint64P(name, shorthand string, value uint64, usage string) *uint64 { + return CommandLine.Uint64P(name, shorthand, value, usage) +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/uint8.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/uint8.go new file mode 100644 index 0000000..bb0e83c --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/uint8.go @@ -0,0 +1,88 @@ +package pflag + +import "strconv" + +// -- uint8 Value +type uint8Value uint8 + +func newUint8Value(val uint8, p *uint8) *uint8Value { + *p = val + return (*uint8Value)(p) +} + +func (i *uint8Value) Set(s string) error { + v, err := strconv.ParseUint(s, 0, 8) + *i = uint8Value(v) + return err +} + +func (i *uint8Value) Type() string { + return "uint8" +} + +func (i *uint8Value) String() string { return strconv.FormatUint(uint64(*i), 10) } + +func uint8Conv(sval string) (interface{}, error) { + v, err := strconv.ParseUint(sval, 0, 8) + if err != nil { + return 0, err + } + return uint8(v), nil +} + +// GetUint8 return the uint8 value of a flag with the given name +func (f *FlagSet) GetUint8(name string) (uint8, error) { + val, err := f.getFlagType(name, "uint8", uint8Conv) + if err != nil { + return 0, err + } + return val.(uint8), nil +} + +// Uint8Var defines a uint8 flag with specified name, default value, and usage string. +// The argument p points to a uint8 variable in which to store the value of the flag. +func (f *FlagSet) Uint8Var(p *uint8, name string, value uint8, usage string) { + f.VarP(newUint8Value(value, p), name, "", usage) +} + +// Uint8VarP is like Uint8Var, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) Uint8VarP(p *uint8, name, shorthand string, value uint8, usage string) { + f.VarP(newUint8Value(value, p), name, shorthand, usage) +} + +// Uint8Var defines a uint8 flag with specified name, default value, and usage string. +// The argument p points to a uint8 variable in which to store the value of the flag. +func Uint8Var(p *uint8, name string, value uint8, usage string) { + CommandLine.VarP(newUint8Value(value, p), name, "", usage) +} + +// Uint8VarP is like Uint8Var, but accepts a shorthand letter that can be used after a single dash. +func Uint8VarP(p *uint8, name, shorthand string, value uint8, usage string) { + CommandLine.VarP(newUint8Value(value, p), name, shorthand, usage) +} + +// Uint8 defines a uint8 flag with specified name, default value, and usage string. +// The return value is the address of a uint8 variable that stores the value of the flag. +func (f *FlagSet) Uint8(name string, value uint8, usage string) *uint8 { + p := new(uint8) + f.Uint8VarP(p, name, "", value, usage) + return p +} + +// Uint8P is like Uint8, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) Uint8P(name, shorthand string, value uint8, usage string) *uint8 { + p := new(uint8) + f.Uint8VarP(p, name, shorthand, value, usage) + return p +} + +// Uint8 defines a uint8 flag with specified name, default value, and usage string. +// The return value is the address of a uint8 variable that stores the value of the flag. +func Uint8(name string, value uint8, usage string) *uint8 { + return CommandLine.Uint8P(name, "", value, usage) +} + +// Uint8P is like Uint8, but accepts a shorthand letter that can be used after a single dash. +func Uint8P(name, shorthand string, value uint8, usage string) *uint8 { + return CommandLine.Uint8P(name, shorthand, value, usage) +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/uint_slice.go b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/uint_slice.go new file mode 100644 index 0000000..edd94c6 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/spf13/pflag/uint_slice.go @@ -0,0 +1,126 @@ +package pflag + +import ( + "fmt" + "strconv" + "strings" +) + +// -- uintSlice Value +type uintSliceValue struct { + value *[]uint + changed bool +} + +func newUintSliceValue(val []uint, p *[]uint) *uintSliceValue { + uisv := new(uintSliceValue) + uisv.value = p + *uisv.value = val + return uisv +} + +func (s *uintSliceValue) Set(val string) error { + ss := strings.Split(val, ",") + out := make([]uint, len(ss)) + for i, d := range ss { + u, err := strconv.ParseUint(d, 10, 0) + if err != nil { + return err + } + out[i] = uint(u) + } + if !s.changed { + *s.value = out + } else { + *s.value = append(*s.value, out...) + } + s.changed = true + return nil +} + +func (s *uintSliceValue) Type() string { + return "uintSlice" +} + +func (s *uintSliceValue) String() string { + out := make([]string, len(*s.value)) + for i, d := range *s.value { + out[i] = fmt.Sprintf("%d", d) + } + return "[" + strings.Join(out, ",") + "]" +} + +func uintSliceConv(val string) (interface{}, error) { + val = strings.Trim(val, "[]") + // Empty string would cause a slice with one (empty) entry + if len(val) == 0 { + return []uint{}, nil + } + ss := strings.Split(val, ",") + out := make([]uint, len(ss)) + for i, d := range ss { + u, err := strconv.ParseUint(d, 10, 0) + if err != nil { + return nil, err + } + out[i] = uint(u) + } + return out, nil +} + +// GetUintSlice returns the []uint value of a flag with the given name. +func (f *FlagSet) GetUintSlice(name string) ([]uint, error) { + val, err := f.getFlagType(name, "uintSlice", uintSliceConv) + if err != nil { + return []uint{}, err + } + return val.([]uint), nil +} + +// UintSliceVar defines a uintSlice flag with specified name, default value, and usage string. +// The argument p points to a []uint variable in which to store the value of the flag. +func (f *FlagSet) UintSliceVar(p *[]uint, name string, value []uint, usage string) { + f.VarP(newUintSliceValue(value, p), name, "", usage) +} + +// UintSliceVarP is like UintSliceVar, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) UintSliceVarP(p *[]uint, name, shorthand string, value []uint, usage string) { + f.VarP(newUintSliceValue(value, p), name, shorthand, usage) +} + +// UintSliceVar defines a uint[] flag with specified name, default value, and usage string. +// The argument p points to a uint[] variable in which to store the value of the flag. +func UintSliceVar(p *[]uint, name string, value []uint, usage string) { + CommandLine.VarP(newUintSliceValue(value, p), name, "", usage) +} + +// UintSliceVarP is like the UintSliceVar, but accepts a shorthand letter that can be used after a single dash. +func UintSliceVarP(p *[]uint, name, shorthand string, value []uint, usage string) { + CommandLine.VarP(newUintSliceValue(value, p), name, shorthand, usage) +} + +// UintSlice defines a []uint flag with specified name, default value, and usage string. +// The return value is the address of a []uint variable that stores the value of the flag. +func (f *FlagSet) UintSlice(name string, value []uint, usage string) *[]uint { + p := []uint{} + f.UintSliceVarP(&p, name, "", value, usage) + return &p +} + +// UintSliceP is like UintSlice, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) UintSliceP(name, shorthand string, value []uint, usage string) *[]uint { + p := []uint{} + f.UintSliceVarP(&p, name, shorthand, value, usage) + return &p +} + +// UintSlice defines a []uint flag with specified name, default value, and usage string. +// The return value is the address of a []uint variable that stores the value of the flag. +func UintSlice(name string, value []uint, usage string) *[]uint { + return CommandLine.UintSliceP(name, "", value, usage) +} + +// UintSliceP is like UintSlice, but accepts a shorthand letter that can be used after a single dash. +func UintSliceP(name, shorthand string, value []uint, usage string) *[]uint { + return CommandLine.UintSliceP(name, shorthand, value, usage) +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/willf/bitset/LICENSE b/vendor/github.com/couchbase/vellum/vendor/github.com/willf/bitset/LICENSE new file mode 100644 index 0000000..59cab8a --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/willf/bitset/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2014 Will Fitzgerald. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/willf/bitset/bitset.go b/vendor/github.com/couchbase/vellum/vendor/github.com/willf/bitset/bitset.go new file mode 100644 index 0000000..9c7d1c6 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/willf/bitset/bitset.go @@ -0,0 +1,719 @@ +/* +Package bitset implements bitsets, a mapping +between non-negative integers and boolean values. It should be more +efficient than map[uint] bool. + +It provides methods for setting, clearing, flipping, and testing +individual integers. + +But it also provides set intersection, union, difference, +complement, and symmetric operations, as well as tests to +check whether any, all, or no bits are set, and querying a +bitset's current length and number of positive bits. + +BitSets are expanded to the size of the largest set bit; the +memory allocation is approximately Max bits, where Max is +the largest set bit. BitSets are never shrunk. On creation, +a hint can be given for the number of bits that will be used. + +Many of the methods, including Set,Clear, and Flip, return +a BitSet pointer, which allows for chaining. + +Example use: + + import "bitset" + var b BitSet + b.Set(10).Set(11) + if b.Test(1000) { + b.Clear(1000) + } + if B.Intersection(bitset.New(100).Set(10)).Count() > 1 { + fmt.Println("Intersection works.") + } + +As an alternative to BitSets, one should check out the 'big' package, +which provides a (less set-theoretical) view of bitsets. + +*/ +package bitset + +import ( + "bufio" + "bytes" + "encoding/base64" + "encoding/binary" + "encoding/json" + "errors" + "fmt" + "io" + "strconv" +) + +// the wordSize of a bit set +const wordSize = uint(64) + +// log2WordSize is lg(wordSize) +const log2WordSize = uint(6) + +// allBits has every bit set +const allBits uint64 = 0xffffffffffffffff + +// A BitSet is a set of bits. The zero value of a BitSet is an empty set of length 0. +type BitSet struct { + length uint + set []uint64 +} + +// Error is used to distinguish errors (panics) generated in this package. +type Error string + +// safeSet will fixup b.set to be non-nil and return the field value +func (b *BitSet) safeSet() []uint64 { + if b.set == nil { + b.set = make([]uint64, wordsNeeded(0)) + } + return b.set +} + +// From is a constructor used to create a BitSet from an array of integers +func From(buf []uint64) *BitSet { + return &BitSet{uint(len(buf)) * 64, buf} +} + +// Bytes returns the bitset as array of integers +func (b *BitSet) Bytes() []uint64 { + return b.set +} + +// wordsNeeded calculates the number of words needed for i bits +func wordsNeeded(i uint) int { + if i > ((^uint(0)) - wordSize + 1) { + return int((^uint(0)) >> log2WordSize) + } + return int((i + (wordSize - 1)) >> log2WordSize) +} + +// New creates a new BitSet with a hint that length bits will be required +func New(length uint) (bset *BitSet) { + defer func() { + if r := recover(); r != nil { + bset = &BitSet{ + 0, + make([]uint64, 0), + } + } + }() + + bset = &BitSet{ + length, + make([]uint64, wordsNeeded(length)), + } + + return bset +} + +// Cap returns the total possible capicity, or number of bits +func Cap() uint { + return ^uint(0) +} + +// Len returns the length of the BitSet in words +func (b *BitSet) Len() uint { + return b.length +} + +// extendSetMaybe adds additional words to incorporate new bits if needed +func (b *BitSet) extendSetMaybe(i uint) { + if i >= b.length { // if we need more bits, make 'em + nsize := wordsNeeded(i + 1) + if b.set == nil { + b.set = make([]uint64, nsize) + } else if cap(b.set) >= nsize { + b.set = b.set[:nsize] // fast resize + } else if len(b.set) < nsize { + newset := make([]uint64, nsize, 2*nsize) // increase capacity 2x + copy(newset, b.set) + b.set = newset + } + b.length = i + 1 + } +} + +// Test whether bit i is set. +func (b *BitSet) Test(i uint) bool { + if i >= b.length { + return false + } + return b.set[i>>log2WordSize]&(1<<(i&(wordSize-1))) != 0 +} + +// Set bit i to 1 +func (b *BitSet) Set(i uint) *BitSet { + b.extendSetMaybe(i) + b.set[i>>log2WordSize] |= 1 << (i & (wordSize - 1)) + return b +} + +// Clear bit i to 0 +func (b *BitSet) Clear(i uint) *BitSet { + if i >= b.length { + return b + } + b.set[i>>log2WordSize] &^= 1 << (i & (wordSize - 1)) + return b +} + +// SetTo sets bit i to value +func (b *BitSet) SetTo(i uint, value bool) *BitSet { + if value { + return b.Set(i) + } + return b.Clear(i) +} + +// Flip bit at i +func (b *BitSet) Flip(i uint) *BitSet { + if i >= b.length { + return b.Set(i) + } + b.set[i>>log2WordSize] ^= 1 << (i & (wordSize - 1)) + return b +} + +// String creates a string representation of the Bitmap +func (b *BitSet) String() string { + // follows code from https://github.com/RoaringBitmap/roaring + var buffer bytes.Buffer + start := []byte("{") + buffer.Write(start) + counter := 0 + i, e := b.NextSet(0) + for e { + counter = counter + 1 + // to avoid exhausting the memory + if counter > 0x40000 { + buffer.WriteString("...") + break + } + buffer.WriteString(strconv.FormatInt(int64(i), 10)) + i, e = b.NextSet(i + 1) + if e { + buffer.WriteString(",") + } + } + buffer.WriteString("}") + return buffer.String() +} + +// NextSet returns the next bit set from the specified index, +// including possibly the current index +// along with an error code (true = valid, false = no set bit found) +// for i,e := v.NextSet(0); e; i,e = v.NextSet(i + 1) {...} +func (b *BitSet) NextSet(i uint) (uint, bool) { + x := int(i >> log2WordSize) + if x >= len(b.set) { + return 0, false + } + w := b.set[x] + w = w >> (i & (wordSize - 1)) + if w != 0 { + return i + trailingZeroes64(w), true + } + x = x + 1 + for x < len(b.set) { + if b.set[x] != 0 { + return uint(x)*wordSize + trailingZeroes64(b.set[x]), true + } + x = x + 1 + + } + return 0, false +} + +// NextClear returns the next clear bit from the specified index, +// including possibly the current index +// along with an error code (true = valid, false = no bit found i.e. all bits are set) +func (b *BitSet) NextClear(i uint) (uint, bool) { + x := int(i >> log2WordSize) + if x >= len(b.set) { + return 0, false + } + w := b.set[x] + w = w >> (i & (wordSize - 1)) + wA := allBits >> (i & (wordSize - 1)) + if w != wA { + return i + trailingZeroes64(^w), true + } + x++ + for x < len(b.set) { + if b.set[x] != allBits { + return uint(x)*wordSize + trailingZeroes64(^b.set[x]), true + } + x++ + } + return 0, false +} + +// ClearAll clears the entire BitSet +func (b *BitSet) ClearAll() *BitSet { + if b != nil && b.set != nil { + for i := range b.set { + b.set[i] = 0 + } + } + return b +} + +// wordCount returns the number of words used in a bit set +func (b *BitSet) wordCount() int { + return len(b.set) +} + +// Clone this BitSet +func (b *BitSet) Clone() *BitSet { + c := New(b.length) + if b.set != nil { // Clone should not modify current object + copy(c.set, b.set) + } + return c +} + +// Copy into a destination BitSet +// Returning the size of the destination BitSet +// like array copy +func (b *BitSet) Copy(c *BitSet) (count uint) { + if c == nil { + return + } + if b.set != nil { // Copy should not modify current object + copy(c.set, b.set) + } + count = c.length + if b.length < c.length { + count = b.length + } + return +} + +// Count (number of set bits) +func (b *BitSet) Count() uint { + if b != nil && b.set != nil { + return uint(popcntSlice(b.set)) + } + return 0 +} + +var deBruijn = [...]byte{ + 0, 1, 56, 2, 57, 49, 28, 3, 61, 58, 42, 50, 38, 29, 17, 4, + 62, 47, 59, 36, 45, 43, 51, 22, 53, 39, 33, 30, 24, 18, 12, 5, + 63, 55, 48, 27, 60, 41, 37, 16, 46, 35, 44, 21, 52, 32, 23, 11, + 54, 26, 40, 15, 34, 20, 31, 10, 25, 14, 19, 9, 13, 8, 7, 6, +} + +func trailingZeroes64(v uint64) uint { + return uint(deBruijn[((v&-v)*0x03f79d71b4ca8b09)>>58]) +} + +// Equal tests the equvalence of two BitSets. +// False if they are of different sizes, otherwise true +// only if all the same bits are set +func (b *BitSet) Equal(c *BitSet) bool { + if c == nil { + return false + } + if b.length != c.length { + return false + } + if b.length == 0 { // if they have both length == 0, then could have nil set + return true + } + // testing for equality shoud not transform the bitset (no call to safeSet) + + for p, v := range b.set { + if c.set[p] != v { + return false + } + } + return true +} + +func panicIfNull(b *BitSet) { + if b == nil { + panic(Error("BitSet must not be null")) + } +} + +// Difference of base set and other set +// This is the BitSet equivalent of &^ (and not) +func (b *BitSet) Difference(compare *BitSet) (result *BitSet) { + panicIfNull(b) + panicIfNull(compare) + result = b.Clone() // clone b (in case b is bigger than compare) + l := int(compare.wordCount()) + if l > int(b.wordCount()) { + l = int(b.wordCount()) + } + for i := 0; i < l; i++ { + result.set[i] = b.set[i] &^ compare.set[i] + } + return +} + +// DifferenceCardinality computes the cardinality of the differnce +func (b *BitSet) DifferenceCardinality(compare *BitSet) uint { + panicIfNull(b) + panicIfNull(compare) + l := int(compare.wordCount()) + if l > int(b.wordCount()) { + l = int(b.wordCount()) + } + cnt := uint64(0) + cnt += popcntMaskSlice(b.set[:l], compare.set[:l]) + cnt += popcntSlice(b.set[l:]) + return uint(cnt) +} + +// InPlaceDifference computes the difference of base set and other set +// This is the BitSet equivalent of &^ (and not) +func (b *BitSet) InPlaceDifference(compare *BitSet) { + panicIfNull(b) + panicIfNull(compare) + l := int(compare.wordCount()) + if l > int(b.wordCount()) { + l = int(b.wordCount()) + } + for i := 0; i < l; i++ { + b.set[i] &^= compare.set[i] + } +} + +// Convenience function: return two bitsets ordered by +// increasing length. Note: neither can be nil +func sortByLength(a *BitSet, b *BitSet) (ap *BitSet, bp *BitSet) { + if a.length <= b.length { + ap, bp = a, b + } else { + ap, bp = b, a + } + return +} + +// Intersection of base set and other set +// This is the BitSet equivalent of & (and) +func (b *BitSet) Intersection(compare *BitSet) (result *BitSet) { + panicIfNull(b) + panicIfNull(compare) + b, compare = sortByLength(b, compare) + result = New(b.length) + for i, word := range b.set { + result.set[i] = word & compare.set[i] + } + return +} + +// IntersectionCardinality computes the cardinality of the union +func (b *BitSet) IntersectionCardinality(compare *BitSet) uint { + panicIfNull(b) + panicIfNull(compare) + b, compare = sortByLength(b, compare) + cnt := popcntAndSlice(b.set, compare.set) + return uint(cnt) +} + +// InPlaceIntersection destructively computes the intersection of +// base set and the compare set. +// This is the BitSet equivalent of & (and) +func (b *BitSet) InPlaceIntersection(compare *BitSet) { + panicIfNull(b) + panicIfNull(compare) + l := int(compare.wordCount()) + if l > int(b.wordCount()) { + l = int(b.wordCount()) + } + for i := 0; i < l; i++ { + b.set[i] &= compare.set[i] + } + for i := l; i < len(b.set); i++ { + b.set[i] = 0 + } + if compare.length > 0 { + b.extendSetMaybe(compare.length - 1) + } + return +} + +// Union of base set and other set +// This is the BitSet equivalent of | (or) +func (b *BitSet) Union(compare *BitSet) (result *BitSet) { + panicIfNull(b) + panicIfNull(compare) + b, compare = sortByLength(b, compare) + result = compare.Clone() + for i, word := range b.set { + result.set[i] = word | compare.set[i] + } + return +} + +// UnionCardinality computes the cardinality of the uniton of the base set +// and the compare set. +func (b *BitSet) UnionCardinality(compare *BitSet) uint { + panicIfNull(b) + panicIfNull(compare) + b, compare = sortByLength(b, compare) + cnt := popcntOrSlice(b.set, compare.set) + if len(compare.set) > len(b.set) { + cnt += popcntSlice(compare.set[len(b.set):]) + } + return uint(cnt) +} + +// InPlaceUnion creates the destructive union of base set and compare set. +// This is the BitSet equivalent of | (or). +func (b *BitSet) InPlaceUnion(compare *BitSet) { + panicIfNull(b) + panicIfNull(compare) + l := int(compare.wordCount()) + if l > int(b.wordCount()) { + l = int(b.wordCount()) + } + if compare.length > 0 { + b.extendSetMaybe(compare.length - 1) + } + for i := 0; i < l; i++ { + b.set[i] |= compare.set[i] + } + if len(compare.set) > l { + for i := l; i < len(compare.set); i++ { + b.set[i] = compare.set[i] + } + } +} + +// SymmetricDifference of base set and other set +// This is the BitSet equivalent of ^ (xor) +func (b *BitSet) SymmetricDifference(compare *BitSet) (result *BitSet) { + panicIfNull(b) + panicIfNull(compare) + b, compare = sortByLength(b, compare) + // compare is bigger, so clone it + result = compare.Clone() + for i, word := range b.set { + result.set[i] = word ^ compare.set[i] + } + return +} + +// SymmetricDifferenceCardinality computes the cardinality of the symmetric difference +func (b *BitSet) SymmetricDifferenceCardinality(compare *BitSet) uint { + panicIfNull(b) + panicIfNull(compare) + b, compare = sortByLength(b, compare) + cnt := popcntXorSlice(b.set, compare.set) + if len(compare.set) > len(b.set) { + cnt += popcntSlice(compare.set[len(b.set):]) + } + return uint(cnt) +} + +// InPlaceSymmetricDifference creates the destructive SymmetricDifference of base set and other set +// This is the BitSet equivalent of ^ (xor) +func (b *BitSet) InPlaceSymmetricDifference(compare *BitSet) { + panicIfNull(b) + panicIfNull(compare) + l := int(compare.wordCount()) + if l > int(b.wordCount()) { + l = int(b.wordCount()) + } + if compare.length > 0 { + b.extendSetMaybe(compare.length - 1) + } + for i := 0; i < l; i++ { + b.set[i] ^= compare.set[i] + } + if len(compare.set) > l { + for i := l; i < len(compare.set); i++ { + b.set[i] = compare.set[i] + } + } +} + +// Is the length an exact multiple of word sizes? +func (b *BitSet) isLenExactMultiple() bool { + return b.length%wordSize == 0 +} + +// Clean last word by setting unused bits to 0 +func (b *BitSet) cleanLastWord() { + if !b.isLenExactMultiple() { + b.set[len(b.set)-1] &= allBits >> (wordSize - b.length%wordSize) + } +} + +// Complement computes the (local) complement of a biset (up to length bits) +func (b *BitSet) Complement() (result *BitSet) { + panicIfNull(b) + result = New(b.length) + for i, word := range b.set { + result.set[i] = ^word + } + result.cleanLastWord() + return +} + +// All returns true if all bits are set, false otherwise. Returns true for +// empty sets. +func (b *BitSet) All() bool { + panicIfNull(b) + return b.Count() == b.length +} + +// None returns true if no bit is set, false otherwise. Retursn true for +// empty sets. +func (b *BitSet) None() bool { + panicIfNull(b) + if b != nil && b.set != nil { + for _, word := range b.set { + if word > 0 { + return false + } + } + return true + } + return true +} + +// Any returns true if any bit is set, false otherwise +func (b *BitSet) Any() bool { + panicIfNull(b) + return !b.None() +} + +// IsSuperSet returns true if this is a superset of the other set +func (b *BitSet) IsSuperSet(other *BitSet) bool { + for i, e := other.NextSet(0); e; i, e = other.NextSet(i + 1) { + if !b.Test(i) { + return false + } + } + return true +} + +// IsStrictSuperSet returns true if this is a strict superset of the other set +func (b *BitSet) IsStrictSuperSet(other *BitSet) bool { + return b.Count() > other.Count() && b.IsSuperSet(other) +} + +// DumpAsBits dumps a bit set as a string of bits +func (b *BitSet) DumpAsBits() string { + if b.set == nil { + return "." + } + buffer := bytes.NewBufferString("") + i := len(b.set) - 1 + for ; i >= 0; i-- { + fmt.Fprintf(buffer, "%064b.", b.set[i]) + } + return string(buffer.Bytes()) +} + +// BinaryStorageSize returns the binary storage requirements +func (b *BitSet) BinaryStorageSize() int { + return binary.Size(uint64(0)) + binary.Size(b.set) +} + +// WriteTo writes a BitSet to a stream +func (b *BitSet) WriteTo(stream io.Writer) (int64, error) { + length := uint64(b.length) + + // Write length + err := binary.Write(stream, binary.BigEndian, length) + if err != nil { + return 0, err + } + + // Write set + err = binary.Write(stream, binary.BigEndian, b.set) + return int64(b.BinaryStorageSize()), err +} + +// ReadFrom reads a BitSet from a stream written using WriteTo +func (b *BitSet) ReadFrom(stream io.Reader) (int64, error) { + var length uint64 + + // Read length first + err := binary.Read(stream, binary.BigEndian, &length) + if err != nil { + return 0, err + } + newset := New(uint(length)) + + if uint64(newset.length) != length { + return 0, errors.New("Unmarshalling error: type mismatch") + } + + // Read remaining bytes as set + err = binary.Read(stream, binary.BigEndian, newset.set) + if err != nil { + return 0, err + } + + *b = *newset + return int64(b.BinaryStorageSize()), nil +} + +// MarshalBinary encodes a BitSet into a binary form and returns the result. +func (b *BitSet) MarshalBinary() ([]byte, error) { + var buf bytes.Buffer + writer := bufio.NewWriter(&buf) + + _, err := b.WriteTo(writer) + if err != nil { + return []byte{}, err + } + + err = writer.Flush() + + return buf.Bytes(), err +} + +// UnmarshalBinary decodes the binary form generated by MarshalBinary. +func (b *BitSet) UnmarshalBinary(data []byte) error { + buf := bytes.NewReader(data) + reader := bufio.NewReader(buf) + + _, err := b.ReadFrom(reader) + + return err +} + +// MarshalJSON marshals a BitSet as a JSON structure +func (b *BitSet) MarshalJSON() ([]byte, error) { + buffer := bytes.NewBuffer(make([]byte, 0, b.BinaryStorageSize())) + _, err := b.WriteTo(buffer) + if err != nil { + return nil, err + } + + // URLEncode all bytes + return json.Marshal(base64.URLEncoding.EncodeToString(buffer.Bytes())) +} + +// UnmarshalJSON unmarshals a BitSet from JSON created using MarshalJSON +func (b *BitSet) UnmarshalJSON(data []byte) error { + // Unmarshal as string + var s string + err := json.Unmarshal(data, &s) + if err != nil { + return err + } + + // URLDecode string + buf, err := base64.URLEncoding.DecodeString(s) + if err != nil { + return err + } + + _, err = b.ReadFrom(bytes.NewReader(buf)) + return err +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/willf/bitset/popcnt.go b/vendor/github.com/couchbase/vellum/vendor/github.com/willf/bitset/popcnt.go new file mode 100644 index 0000000..76577a8 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/willf/bitset/popcnt.go @@ -0,0 +1,53 @@ +package bitset + +// bit population count, take from +// https://code.google.com/p/go/issues/detail?id=4988#c11 +// credit: https://code.google.com/u/arnehormann/ +func popcount(x uint64) (n uint64) { + x -= (x >> 1) & 0x5555555555555555 + x = (x>>2)&0x3333333333333333 + x&0x3333333333333333 + x += x >> 4 + x &= 0x0f0f0f0f0f0f0f0f + x *= 0x0101010101010101 + return x >> 56 +} + +func popcntSliceGo(s []uint64) uint64 { + cnt := uint64(0) + for _, x := range s { + cnt += popcount(x) + } + return cnt +} + +func popcntMaskSliceGo(s, m []uint64) uint64 { + cnt := uint64(0) + for i := range s { + cnt += popcount(s[i] &^ m[i]) + } + return cnt +} + +func popcntAndSliceGo(s, m []uint64) uint64 { + cnt := uint64(0) + for i := range s { + cnt += popcount(s[i] & m[i]) + } + return cnt +} + +func popcntOrSliceGo(s, m []uint64) uint64 { + cnt := uint64(0) + for i := range s { + cnt += popcount(s[i] | m[i]) + } + return cnt +} + +func popcntXorSliceGo(s, m []uint64) uint64 { + cnt := uint64(0) + for i := range s { + cnt += popcount(s[i] ^ m[i]) + } + return cnt +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/willf/bitset/popcnt_amd64.go b/vendor/github.com/couchbase/vellum/vendor/github.com/willf/bitset/popcnt_amd64.go new file mode 100644 index 0000000..665a864 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/willf/bitset/popcnt_amd64.go @@ -0,0 +1,67 @@ +// +build amd64,!appengine + +package bitset + +// *** the following functions are defined in popcnt_amd64.s + +//go:noescape + +func hasAsm() bool + +// useAsm is a flag used to select the GO or ASM implementation of the popcnt function +var useAsm = hasAsm() + +//go:noescape + +func popcntSliceAsm(s []uint64) uint64 + +//go:noescape + +func popcntMaskSliceAsm(s, m []uint64) uint64 + +//go:noescape + +func popcntAndSliceAsm(s, m []uint64) uint64 + +//go:noescape + +func popcntOrSliceAsm(s, m []uint64) uint64 + +//go:noescape + +func popcntXorSliceAsm(s, m []uint64) uint64 + +func popcntSlice(s []uint64) uint64 { + if useAsm { + return popcntSliceAsm(s) + } + return popcntSliceGo(s) +} + +func popcntMaskSlice(s, m []uint64) uint64 { + if useAsm { + return popcntMaskSliceAsm(s, m) + } + return popcntMaskSliceGo(s, m) +} + +func popcntAndSlice(s, m []uint64) uint64 { + if useAsm { + return popcntAndSliceAsm(s, m) + } + return popcntAndSliceGo(s, m) +} + +func popcntOrSlice(s, m []uint64) uint64 { + if useAsm { + return popcntOrSliceAsm(s, m) + } + return popcntOrSliceGo(s, m) +} + +func popcntXorSlice(s, m []uint64) uint64 { + if useAsm { + return popcntXorSliceAsm(s, m) + } + return popcntXorSliceGo(s, m) +} diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/willf/bitset/popcnt_amd64.s b/vendor/github.com/couchbase/vellum/vendor/github.com/willf/bitset/popcnt_amd64.s new file mode 100644 index 0000000..18f5878 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/willf/bitset/popcnt_amd64.s @@ -0,0 +1,103 @@ +// +build amd64,!appengine + +TEXT ·hasAsm(SB),4,$0-1 +MOVQ $1, AX +CPUID +SHRQ $23, CX +ANDQ $1, CX +MOVB CX, ret+0(FP) +RET + +#define POPCNTQ_DX_DX BYTE $0xf3; BYTE $0x48; BYTE $0x0f; BYTE $0xb8; BYTE $0xd2 + +TEXT ·popcntSliceAsm(SB),4,$0-32 +XORQ AX, AX +MOVQ s+0(FP), SI +MOVQ s_len+8(FP), CX +TESTQ CX, CX +JZ popcntSliceEnd +popcntSliceLoop: +BYTE $0xf3; BYTE $0x48; BYTE $0x0f; BYTE $0xb8; BYTE $0x16 // POPCNTQ (SI), DX +ADDQ DX, AX +ADDQ $8, SI +LOOP popcntSliceLoop +popcntSliceEnd: +MOVQ AX, ret+24(FP) +RET + +TEXT ·popcntMaskSliceAsm(SB),4,$0-56 +XORQ AX, AX +MOVQ s+0(FP), SI +MOVQ s_len+8(FP), CX +TESTQ CX, CX +JZ popcntMaskSliceEnd +MOVQ m+24(FP), DI +popcntMaskSliceLoop: +MOVQ (DI), DX +NOTQ DX +ANDQ (SI), DX +POPCNTQ_DX_DX +ADDQ DX, AX +ADDQ $8, SI +ADDQ $8, DI +LOOP popcntMaskSliceLoop +popcntMaskSliceEnd: +MOVQ AX, ret+48(FP) +RET + +TEXT ·popcntAndSliceAsm(SB),4,$0-56 +XORQ AX, AX +MOVQ s+0(FP), SI +MOVQ s_len+8(FP), CX +TESTQ CX, CX +JZ popcntAndSliceEnd +MOVQ m+24(FP), DI +popcntAndSliceLoop: +MOVQ (DI), DX +ANDQ (SI), DX +POPCNTQ_DX_DX +ADDQ DX, AX +ADDQ $8, SI +ADDQ $8, DI +LOOP popcntAndSliceLoop +popcntAndSliceEnd: +MOVQ AX, ret+48(FP) +RET + +TEXT ·popcntOrSliceAsm(SB),4,$0-56 +XORQ AX, AX +MOVQ s+0(FP), SI +MOVQ s_len+8(FP), CX +TESTQ CX, CX +JZ popcntOrSliceEnd +MOVQ m+24(FP), DI +popcntOrSliceLoop: +MOVQ (DI), DX +ORQ (SI), DX +POPCNTQ_DX_DX +ADDQ DX, AX +ADDQ $8, SI +ADDQ $8, DI +LOOP popcntOrSliceLoop +popcntOrSliceEnd: +MOVQ AX, ret+48(FP) +RET + +TEXT ·popcntXorSliceAsm(SB),4,$0-56 +XORQ AX, AX +MOVQ s+0(FP), SI +MOVQ s_len+8(FP), CX +TESTQ CX, CX +JZ popcntXorSliceEnd +MOVQ m+24(FP), DI +popcntXorSliceLoop: +MOVQ (DI), DX +XORQ (SI), DX +POPCNTQ_DX_DX +ADDQ DX, AX +ADDQ $8, SI +ADDQ $8, DI +LOOP popcntXorSliceLoop +popcntXorSliceEnd: +MOVQ AX, ret+48(FP) +RET diff --git a/vendor/github.com/couchbase/vellum/vendor/github.com/willf/bitset/popcnt_generic.go b/vendor/github.com/couchbase/vellum/vendor/github.com/willf/bitset/popcnt_generic.go new file mode 100644 index 0000000..6b21cb7 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/github.com/willf/bitset/popcnt_generic.go @@ -0,0 +1,23 @@ +// +build !amd64 appengine + +package bitset + +func popcntSlice(s []uint64) uint64 { + return popcntSliceGo(s) +} + +func popcntMaskSlice(s, m []uint64) uint64 { + return popcntMaskSliceGo(s, m) +} + +func popcntAndSlice(s, m []uint64) uint64 { + return popcntAndSliceGo(s, m) +} + +func popcntOrSlice(s, m []uint64) uint64 { + return popcntOrSliceGo(s, m) +} + +func popcntXorSlice(s, m []uint64) uint64 { + return popcntXorSliceGo(s, m) +} diff --git a/vendor/github.com/couchbase/vellum/vendor/manifest b/vendor/github.com/couchbase/vellum/vendor/manifest new file mode 100644 index 0000000..c19cc7f --- /dev/null +++ b/vendor/github.com/couchbase/vellum/vendor/manifest @@ -0,0 +1,45 @@ +{ + "version": 0, + "dependencies": [ + { + "importpath": "github.com/edsrzf/mmap-go", + "repository": "https://github.com/edsrzf/mmap-go", + "vcs": "git", + "revision": "935e0e8a636ca4ba70b713f3e38a19e1b77739e8", + "branch": "master", + "notests": true + }, + { + "importpath": "github.com/inconshreveable/mousetrap", + "repository": "https://github.com/inconshreveable/mousetrap", + "vcs": "git", + "revision": "76626ae9c91c4f2a10f34cad8ce83ea42c93bb75", + "branch": "master", + "notests": true + }, + { + "importpath": "github.com/spf13/cobra", + "repository": "https://github.com/spf13/cobra", + "vcs": "git", + "revision": "16c014f1a19d865b765b420e74508f80eb831ada", + "branch": "master", + "notests": true + }, + { + "importpath": "github.com/spf13/pflag", + "repository": "https://github.com/spf13/pflag", + "vcs": "git", + "revision": "9ff6c6923cfffbcd502984b8e0c80539a94968b7", + "branch": "master", + "notests": true + }, + { + "importpath": "github.com/willf/bitset", + "repository": "https://github.com/willf/bitset", + "vcs": "git", + "revision": "5c3c0fce48842b2c0bbaa99b4e61b0175d84b47c", + "branch": "master", + "notests": true + } + ] +} \ No newline at end of file diff --git a/vendor/github.com/couchbase/vellum/writer.go b/vendor/github.com/couchbase/vellum/writer.go new file mode 100644 index 0000000..d655d47 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/writer.go @@ -0,0 +1,92 @@ +// Copyright (c) 2017 Couchbase, 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 vellum + +import ( + "bufio" + "io" +) + +// A writer is a buffered writer used by vellum. It counts how many bytes have +// been written and has some convenience methods used for encoding the data. +type writer struct { + w *bufio.Writer + counter int +} + +func newWriter(w io.Writer) *writer { + return &writer{ + w: bufio.NewWriter(w), + } +} + +func (w *writer) Reset(newWriter io.Writer) { + w.w.Reset(newWriter) + w.counter = 0 +} + +func (w *writer) WriteByte(c byte) error { + err := w.w.WriteByte(c) + if err != nil { + return err + } + w.counter++ + return nil +} + +func (w *writer) Write(p []byte) (int, error) { + n, err := w.w.Write(p) + w.counter += n + return n, err +} + +func (w *writer) Flush() error { + return w.w.Flush() +} + +func (w *writer) WritePackedUintIn(v uint64, n int) error { + for shift := uint(0); shift < uint(n*8); shift += 8 { + err := w.WriteByte(byte(v >> shift)) + if err != nil { + return err + } + } + + return nil +} + +func (w *writer) WritePackedUint(v uint64) error { + n := packedSize(v) + return w.WritePackedUintIn(v, n) +} + +func packedSize(n uint64) int { + if n < 1<<8 { + return 1 + } else if n < 1<<16 { + return 2 + } else if n < 1<<24 { + return 3 + } else if n < 1<<32 { + return 4 + } else if n < 1<<40 { + return 5 + } else if n < 1<<48 { + return 6 + } else if n < 1<<56 { + return 7 + } + return 8 +} diff --git a/vendor/github.com/couchbase/vellum/writer_test.go b/vendor/github.com/couchbase/vellum/writer_test.go new file mode 100644 index 0000000..a8aa395 --- /dev/null +++ b/vendor/github.com/couchbase/vellum/writer_test.go @@ -0,0 +1,92 @@ +// Copyright (c) 2017 Couchbase, 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 vellum + +import ( + "bufio" + "errors" + "fmt" + "testing" +) + +func TestPackedSize(t *testing.T) { + tests := []struct { + input uint64 + want int + }{ + {0, 1}, + {1<<8 - 1, 1}, + {1 << 8, 2}, + {1<<16 - 1, 2}, + {1 << 16, 3}, + {1<<24 - 1, 3}, + {1 << 24, 4}, + {1<<32 - 1, 4}, + {1 << 32, 5}, + {1<<40 - 1, 5}, + {1 << 40, 6}, + {1<<48 - 1, 6}, + {1 << 48, 7}, + {1<<56 - 1, 7}, + {1 << 56, 8}, + {1<<64 - 1, 8}, + } + + for _, test := range tests { + t.Run(fmt.Sprintf("input %d", test.input), func(t *testing.T) { + got := packedSize(test.input) + if got != test.want { + t.Errorf("wanted: %d, got: %d", test.want, got) + } + }) + } +} + +var errStub = errors.New("stub error") + +type stubWriter struct { + err error +} + +func (s *stubWriter) Write(p []byte) (n int, err error) { + err = s.err + return +} + +func TestWriteByteErr(t *testing.T) { + // create writer, force underlying buffered writer to size 1 + w := &writer{ + w: bufio.NewWriterSize(&stubWriter{errStub}, 1), + } + + // then write 2 bytes, which should force error + _ = w.WriteByte('a') + err := w.WriteByte('a') + if err != errStub { + t.Errorf("expected %v, got %v", errStub, err) + } +} + +func TestWritePackedUintErr(t *testing.T) { + // create writer, force underlying buffered writer to size 1 + w := &writer{ + w: bufio.NewWriterSize(&stubWriter{errStub}, 1), + } + + err := w.WritePackedUint(36592) + if err != errStub { + t.Errorf("expected %v, got %v", errStub, err) + } +} diff --git a/vendor/github.com/edsrzf/mmap-go/.gitignore b/vendor/github.com/edsrzf/mmap-go/.gitignore new file mode 100644 index 0000000..9aa02c1 --- /dev/null +++ b/vendor/github.com/edsrzf/mmap-go/.gitignore @@ -0,0 +1,8 @@ +*.out +*.5 +*.6 +*.8 +*.swp +_obj +_test +testdata diff --git a/vendor/github.com/edsrzf/mmap-go/LICENSE b/vendor/github.com/edsrzf/mmap-go/LICENSE new file mode 100644 index 0000000..8f05f33 --- /dev/null +++ b/vendor/github.com/edsrzf/mmap-go/LICENSE @@ -0,0 +1,25 @@ +Copyright (c) 2011, Evan Shaw +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the copyright holder nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/vendor/github.com/edsrzf/mmap-go/README.md b/vendor/github.com/edsrzf/mmap-go/README.md new file mode 100644 index 0000000..4cc2bfe --- /dev/null +++ b/vendor/github.com/edsrzf/mmap-go/README.md @@ -0,0 +1,12 @@ +mmap-go +======= + +mmap-go is a portable mmap package for the [Go programming language](http://golang.org). +It has been tested on Linux (386, amd64), OS X, and Windows (386). It should also +work on other Unix-like platforms, but hasn't been tested with them. I'm interested +to hear about the results. + +I haven't been able to add more features without adding significant complexity, +so mmap-go doesn't support mprotect, mincore, and maybe a few other things. +If you're running on a Unix-like platform and need some of these features, +I suggest Gustavo Niemeyer's [gommap](http://labix.org/gommap). diff --git a/vendor/github.com/edsrzf/mmap-go/mmap.go b/vendor/github.com/edsrzf/mmap-go/mmap.go new file mode 100644 index 0000000..7bb4965 --- /dev/null +++ b/vendor/github.com/edsrzf/mmap-go/mmap.go @@ -0,0 +1,112 @@ +// Copyright 2011 Evan Shaw. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This file defines the common package interface and contains a little bit of +// factored out logic. + +// Package mmap allows mapping files into memory. It tries to provide a simple, reasonably portable interface, +// but doesn't go out of its way to abstract away every little platform detail. +// This specifically means: +// * forked processes may or may not inherit mappings +// * a file's timestamp may or may not be updated by writes through mappings +// * specifying a size larger than the file's actual size can increase the file's size +// * If the mapped file is being modified by another process while your program's running, don't expect consistent results between platforms +package mmap + +import ( + "errors" + "os" + "reflect" + "unsafe" +) + +const ( + // RDONLY maps the memory read-only. + // Attempts to write to the MMap object will result in undefined behavior. + RDONLY = 0 + // RDWR maps the memory as read-write. Writes to the MMap object will update the + // underlying file. + RDWR = 1 << iota + // COPY maps the memory as copy-on-write. Writes to the MMap object will affect + // memory, but the underlying file will remain unchanged. + COPY + // If EXEC is set, the mapped memory is marked as executable. + EXEC +) + +const ( + // If the ANON flag is set, the mapped memory will not be backed by a file. + ANON = 1 << iota +) + +// MMap represents a file mapped into memory. +type MMap []byte + +// Map maps an entire file into memory. +// If ANON is set in flags, f is ignored. +func Map(f *os.File, prot, flags int) (MMap, error) { + return MapRegion(f, -1, prot, flags, 0) +} + +// MapRegion maps part of a file into memory. +// The offset parameter must be a multiple of the system's page size. +// If length < 0, the entire file will be mapped. +// If ANON is set in flags, f is ignored. +func MapRegion(f *os.File, length int, prot, flags int, offset int64) (MMap, error) { + var fd uintptr + if flags&ANON == 0 { + fd = uintptr(f.Fd()) + if length < 0 { + fi, err := f.Stat() + if err != nil { + return nil, err + } + length = int(fi.Size()) + } + } else { + if length <= 0 { + return nil, errors.New("anonymous mapping requires non-zero length") + } + fd = ^uintptr(0) + } + return mmap(length, uintptr(prot), uintptr(flags), fd, offset) +} + +func (m *MMap) header() *reflect.SliceHeader { + return (*reflect.SliceHeader)(unsafe.Pointer(m)) +} + +// Lock keeps the mapped region in physical memory, ensuring that it will not be +// swapped out. +func (m MMap) Lock() error { + dh := m.header() + return lock(dh.Data, uintptr(dh.Len)) +} + +// Unlock reverses the effect of Lock, allowing the mapped region to potentially +// be swapped out. +// If m is already unlocked, aan error will result. +func (m MMap) Unlock() error { + dh := m.header() + return unlock(dh.Data, uintptr(dh.Len)) +} + +// Flush synchronizes the mapping's contents to the file's contents on disk. +func (m MMap) Flush() error { + dh := m.header() + return flush(dh.Data, uintptr(dh.Len)) +} + +// Unmap deletes the memory mapped region, flushes any remaining changes, and sets +// m to nil. +// Trying to read or write any remaining references to m after Unmap is called will +// result in undefined behavior. +// Unmap should only be called on the slice value that was originally returned from +// a call to Map. Calling Unmap on a derived slice may cause errors. +func (m *MMap) Unmap() error { + dh := m.header() + err := unmap(dh.Data, uintptr(dh.Len)) + *m = nil + return err +} diff --git a/vendor/github.com/edsrzf/mmap-go/mmap_test.go b/vendor/github.com/edsrzf/mmap-go/mmap_test.go new file mode 100644 index 0000000..96cf4e1 --- /dev/null +++ b/vendor/github.com/edsrzf/mmap-go/mmap_test.go @@ -0,0 +1,143 @@ +// Copyright 2011 Evan Shaw. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// These tests are adapted from gommap: http://labix.org/gommap +// Copyright (c) 2010, Gustavo Niemeyer + +package mmap + +import ( + "bytes" + "io/ioutil" + "os" + "path/filepath" + "testing" +) + +var testData = []byte("0123456789ABCDEF") +var testPath = filepath.Join(os.TempDir(), "testdata") + +func init() { + f := openFile(os.O_RDWR | os.O_CREATE | os.O_TRUNC) + f.Write(testData) + f.Close() +} + +func openFile(flags int) *os.File { + f, err := os.OpenFile(testPath, flags, 0644) + if err != nil { + panic(err.Error()) + } + return f +} + +func TestUnmap(t *testing.T) { + f := openFile(os.O_RDONLY) + defer f.Close() + mmap, err := Map(f, RDONLY, 0) + if err != nil { + t.Errorf("error mapping: %s", err) + } + if err := mmap.Unmap(); err != nil { + t.Errorf("error unmapping: %s", err) + } +} + +func TestReadWrite(t *testing.T) { + f := openFile(os.O_RDWR) + defer f.Close() + mmap, err := Map(f, RDWR, 0) + if err != nil { + t.Errorf("error mapping: %s", err) + } + defer mmap.Unmap() + if !bytes.Equal(testData, mmap) { + t.Errorf("mmap != testData: %q, %q", mmap, testData) + } + + mmap[9] = 'X' + mmap.Flush() + + fileData, err := ioutil.ReadAll(f) + if err != nil { + t.Errorf("error reading file: %s", err) + } + if !bytes.Equal(fileData, []byte("012345678XABCDEF")) { + t.Errorf("file wasn't modified") + } + + // leave things how we found them + mmap[9] = '9' + mmap.Flush() +} + +func TestProtFlagsAndErr(t *testing.T) { + f := openFile(os.O_RDONLY) + defer f.Close() + if _, err := Map(f, RDWR, 0); err == nil { + t.Errorf("expected error") + } +} + +func TestFlags(t *testing.T) { + f := openFile(os.O_RDWR) + defer f.Close() + mmap, err := Map(f, COPY, 0) + if err != nil { + t.Errorf("error mapping: %s", err) + } + defer mmap.Unmap() + + mmap[9] = 'X' + mmap.Flush() + + fileData, err := ioutil.ReadAll(f) + if err != nil { + t.Errorf("error reading file: %s", err) + } + if !bytes.Equal(fileData, testData) { + t.Errorf("file was modified") + } +} + +// Test that we can map files from non-0 offsets +// The page size on most Unixes is 4KB, but on Windows it's 64KB +func TestNonZeroOffset(t *testing.T) { + const pageSize = 65536 + + // Create a 2-page sized file + bigFilePath := filepath.Join(os.TempDir(), "nonzero") + fileobj, err := os.OpenFile(bigFilePath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644) + if err != nil { + panic(err.Error()) + } + + bigData := make([]byte, 2*pageSize, 2*pageSize) + fileobj.Write(bigData) + fileobj.Close() + + // Map the first page by itself + fileobj, err = os.OpenFile(bigFilePath, os.O_RDONLY, 0) + if err != nil { + panic(err.Error()) + } + m, err := MapRegion(fileobj, pageSize, RDONLY, 0, 0) + if err != nil { + t.Errorf("error mapping file: %s", err) + } + m.Unmap() + fileobj.Close() + + // Map the second page by itself + fileobj, err = os.OpenFile(bigFilePath, os.O_RDONLY, 0) + if err != nil { + panic(err.Error()) + } + m, err = MapRegion(fileobj, pageSize, RDONLY, 0, pageSize) + if err != nil { + t.Errorf("error mapping file: %s", err) + } + m.Unmap() + fileobj.Close() +} diff --git a/vendor/github.com/edsrzf/mmap-go/mmap_unix.go b/vendor/github.com/edsrzf/mmap-go/mmap_unix.go new file mode 100644 index 0000000..4af9842 --- /dev/null +++ b/vendor/github.com/edsrzf/mmap-go/mmap_unix.go @@ -0,0 +1,67 @@ +// Copyright 2011 Evan Shaw. 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 dragonfly freebsd linux openbsd solaris netbsd + +package mmap + +import ( + "syscall" +) + +func mmap(len int, inprot, inflags, fd uintptr, off int64) ([]byte, error) { + flags := syscall.MAP_SHARED + prot := syscall.PROT_READ + switch { + case inprot© != 0: + prot |= syscall.PROT_WRITE + flags = syscall.MAP_PRIVATE + case inprot&RDWR != 0: + prot |= syscall.PROT_WRITE + } + if inprot&EXEC != 0 { + prot |= syscall.PROT_EXEC + } + if inflags&ANON != 0 { + flags |= syscall.MAP_ANON + } + + b, err := syscall.Mmap(int(fd), off, len, prot, flags) + if err != nil { + return nil, err + } + return b, nil +} + +func flush(addr, len uintptr) error { + _, _, errno := syscall.Syscall(_SYS_MSYNC, addr, len, _MS_SYNC) + if errno != 0 { + return syscall.Errno(errno) + } + return nil +} + +func lock(addr, len uintptr) error { + _, _, errno := syscall.Syscall(syscall.SYS_MLOCK, addr, len, 0) + if errno != 0 { + return syscall.Errno(errno) + } + return nil +} + +func unlock(addr, len uintptr) error { + _, _, errno := syscall.Syscall(syscall.SYS_MUNLOCK, addr, len, 0) + if errno != 0 { + return syscall.Errno(errno) + } + return nil +} + +func unmap(addr, len uintptr) error { + _, _, errno := syscall.Syscall(syscall.SYS_MUNMAP, addr, len, 0) + if errno != 0 { + return syscall.Errno(errno) + } + return nil +} diff --git a/vendor/github.com/edsrzf/mmap-go/mmap_windows.go b/vendor/github.com/edsrzf/mmap-go/mmap_windows.go new file mode 100644 index 0000000..c3d2d02 --- /dev/null +++ b/vendor/github.com/edsrzf/mmap-go/mmap_windows.go @@ -0,0 +1,125 @@ +// Copyright 2011 Evan Shaw. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package mmap + +import ( + "errors" + "os" + "sync" + "syscall" +) + +// mmap on Windows is a two-step process. +// First, we call CreateFileMapping to get a handle. +// Then, we call MapviewToFile to get an actual pointer into memory. +// Because we want to emulate a POSIX-style mmap, we don't want to expose +// the handle -- only the pointer. We also want to return only a byte slice, +// not a struct, so it's convenient to manipulate. + +// We keep this map so that we can get back the original handle from the memory address. +var handleLock sync.Mutex +var handleMap = map[uintptr]syscall.Handle{} + +func mmap(len int, prot, flags, hfile uintptr, off int64) ([]byte, error) { + flProtect := uint32(syscall.PAGE_READONLY) + dwDesiredAccess := uint32(syscall.FILE_MAP_READ) + switch { + case prot© != 0: + flProtect = syscall.PAGE_WRITECOPY + dwDesiredAccess = syscall.FILE_MAP_COPY + case prot&RDWR != 0: + flProtect = syscall.PAGE_READWRITE + dwDesiredAccess = syscall.FILE_MAP_WRITE + } + if prot&EXEC != 0 { + flProtect <<= 4 + dwDesiredAccess |= syscall.FILE_MAP_EXECUTE + } + + // The maximum size is the area of the file, starting from 0, + // that we wish to allow to be mappable. It is the sum of + // the length the user requested, plus the offset where that length + // is starting from. This does not map the data into memory. + maxSizeHigh := uint32((off + int64(len)) >> 32) + maxSizeLow := uint32((off + int64(len)) & 0xFFFFFFFF) + // TODO: Do we need to set some security attributes? It might help portability. + h, errno := syscall.CreateFileMapping(syscall.Handle(hfile), nil, flProtect, maxSizeHigh, maxSizeLow, nil) + if h == 0 { + return nil, os.NewSyscallError("CreateFileMapping", errno) + } + + // Actually map a view of the data into memory. The view's size + // is the length the user requested. + fileOffsetHigh := uint32(off >> 32) + fileOffsetLow := uint32(off & 0xFFFFFFFF) + addr, errno := syscall.MapViewOfFile(h, dwDesiredAccess, fileOffsetHigh, fileOffsetLow, uintptr(len)) + if addr == 0 { + return nil, os.NewSyscallError("MapViewOfFile", errno) + } + handleLock.Lock() + handleMap[addr] = h + handleLock.Unlock() + + m := MMap{} + dh := m.header() + dh.Data = addr + dh.Len = len + dh.Cap = dh.Len + + return m, nil +} + +func flush(addr, len uintptr) error { + errno := syscall.FlushViewOfFile(addr, len) + if errno != nil { + return os.NewSyscallError("FlushViewOfFile", errno) + } + + handleLock.Lock() + defer handleLock.Unlock() + handle, ok := handleMap[addr] + if !ok { + // should be impossible; we would've errored above + return errors.New("unknown base address") + } + + errno = syscall.FlushFileBuffers(handle) + return os.NewSyscallError("FlushFileBuffers", errno) +} + +func lock(addr, len uintptr) error { + errno := syscall.VirtualLock(addr, len) + return os.NewSyscallError("VirtualLock", errno) +} + +func unlock(addr, len uintptr) error { + errno := syscall.VirtualUnlock(addr, len) + return os.NewSyscallError("VirtualUnlock", errno) +} + +func unmap(addr, len uintptr) error { + flush(addr, len) + // Lock the UnmapViewOfFile along with the handleMap deletion. + // As soon as we unmap the view, the OS is free to give the + // same addr to another new map. We don't want another goroutine + // to insert and remove the same addr into handleMap while + // we're trying to remove our old addr/handle pair. + handleLock.Lock() + defer handleLock.Unlock() + err := syscall.UnmapViewOfFile(addr) + if err != nil { + return err + } + + handle, ok := handleMap[addr] + if !ok { + // should be impossible; we would've errored above + return errors.New("unknown base address") + } + delete(handleMap, addr) + + e := syscall.CloseHandle(syscall.Handle(handle)) + return os.NewSyscallError("CloseHandle", e) +} diff --git a/vendor/github.com/edsrzf/mmap-go/msync_netbsd.go b/vendor/github.com/edsrzf/mmap-go/msync_netbsd.go new file mode 100644 index 0000000..a64b003 --- /dev/null +++ b/vendor/github.com/edsrzf/mmap-go/msync_netbsd.go @@ -0,0 +1,8 @@ +// Copyright 2011 Evan Shaw. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package mmap + +const _SYS_MSYNC = 277 +const _MS_SYNC = 0x04 diff --git a/vendor/github.com/edsrzf/mmap-go/msync_unix.go b/vendor/github.com/edsrzf/mmap-go/msync_unix.go new file mode 100644 index 0000000..91ee5f4 --- /dev/null +++ b/vendor/github.com/edsrzf/mmap-go/msync_unix.go @@ -0,0 +1,14 @@ +// Copyright 2011 Evan Shaw. 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 dragonfly freebsd linux openbsd solaris + +package mmap + +import ( + "syscall" +) + +const _SYS_MSYNC = syscall.SYS_MSYNC +const _MS_SYNC = syscall.MS_SYNC diff --git a/vendor/github.com/fgrid/uuid/.gitignore b/vendor/github.com/fgrid/uuid/.gitignore new file mode 100644 index 0000000..daf913b --- /dev/null +++ b/vendor/github.com/fgrid/uuid/.gitignore @@ -0,0 +1,24 @@ +# 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 +*.test +*.prof diff --git a/vendor/github.com/fgrid/uuid/LICENSE b/vendor/github.com/fgrid/uuid/LICENSE new file mode 100644 index 0000000..4cc09c6 --- /dev/null +++ b/vendor/github.com/fgrid/uuid/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 by Stephan Heinze + +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/fgrid/uuid/README.md b/vendor/github.com/fgrid/uuid/README.md new file mode 100644 index 0000000..3d9b5fc --- /dev/null +++ b/vendor/github.com/fgrid/uuid/README.md @@ -0,0 +1,24 @@ +[![Stories in Ready](https://badge.waffle.io/fgrid/uuid.png?label=ready&title=Ready)](https://waffle.io/fgrid/uuid) +# uuid +golang uuid generator + +## install + ``` + go get github.com/fgrid/uuid + ``` + +## benchmarks + ``` + BenchmarkNewV1 2000000 725 ns/op + BenchmarkNewV3 2000000 746 ns/op + BenchmarkNewV4 1000000 1942 ns/op + BenchmarkNewV5 2000000 784 ns/op + ``` +## documentation +* @[Sourcegraph](http://sourcegraph.com/github.com/fgrid/uuid) + +## links +* [RFC 4122](http://tools.ietf.org/html/rfc4122) + +## badges +[![status](https://sourcegraph.com/api/repos/github.com/fgrid/uuid/.badges/status.svg)](https://sourcegraph.com/github.com/fgrid/uuid) [![library users](https://sourcegraph.com/api/repos/github.com/fgrid/uuid/.badges/library-users.svg)](https://sourcegraph.com/github.com/fgrid/uuid) [![dependents](https://sourcegraph.com/api/repos/github.com/fgrid/uuid/.badges/dependents.svg)](https://sourcegraph.com/github.com/fgrid/uuid) [![views](https://sourcegraph.com/api/repos/github.com/fgrid/uuid/.counters/views.svg)](https://sourcegraph.com/github.com/fgrid/uuid) [![Go Report Card](http://goreportcard.com/badge/fgrid/uuid)](http://goreportcard.com/report/fgrid/uuid) diff --git a/vendor/github.com/fgrid/uuid/uuid.go b/vendor/github.com/fgrid/uuid/uuid.go new file mode 100644 index 0000000..120a791 --- /dev/null +++ b/vendor/github.com/fgrid/uuid/uuid.go @@ -0,0 +1,56 @@ +package uuid + +import ( + "encoding/binary" + "fmt" +) + +// The UUID represents Universally Unique IDentifier (which is 128 bit long). +type UUID [16]byte + +var ( + // NIL is defined in RFC 4122 section 4.1.7. + // The nil UUID is special form of UUID that is specified to have all 128 bits set to zero. + NIL = &UUID{ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + } + // NameSpaceDNS assume name to be a fully-qualified domain name. + // Declared in RFC 4122 Appendix C. + NameSpaceDNS = &UUID{ + 0x6b, 0xa7, 0xb8, 0x10, 0x9d, 0xad, 0x11, 0xd1, + 0x80, 0xb4, 0x00, 0xc0, 0x4f, 0xd4, 0x30, 0xc8, + } + // NameSpaceURL assume name to be a URL. + // Declared in RFC 4122 Appendix C. + NameSpaceURL = &UUID{ + 0x6b, 0xa7, 0xb8, 0x11, 0x9d, 0xad, 0x11, 0xd1, + 0x80, 0xb4, 0x00, 0xc0, 0x4f, 0xd4, 0x30, 0xc8, + } + // NameSpaceOID assume name to be an ISO OID. + // Declared in RFC 4122 Appendix C. + NameSpaceOID = &UUID{ + 0x6b, 0xa7, 0xb8, 0x12, 0x9d, 0xad, 0x11, 0xd1, + 0x80, 0xb4, 0x00, 0xc0, 0x4f, 0xd4, 0x30, 0xc8, + } + // NameSpaceX500 assume name to be a X.500 DN (in DER or a text output format). + // Declared in RFC 4122 Appendix C. + NameSpaceX500 = &UUID{ + 0x6b, 0xa7, 0xb8, 0x14, 0x9d, 0xad, 0x11, 0xd1, + 0x80, 0xb4, 0x00, 0xc0, 0x4f, 0xd4, 0x30, 0xc8, + } +) + +// Version of the UUID represents a kind of subtype specifier. +func (u *UUID) Version() int { + return int(binary.BigEndian.Uint16(u[6:8]) >> 12) +} + +// String returns the human readable form of the UUID. +func (u *UUID) String() string { + return fmt.Sprintf("%x-%x-%x-%x-%x", u[0:4], u[4:6], u[6:8], u[8:10], u[10:]) +} + +func (u *UUID) variantRFC4122() { + u[8] = (u[8] & 0x3f) | 0x80 +} diff --git a/vendor/github.com/fgrid/uuid/uuid_test.go b/vendor/github.com/fgrid/uuid/uuid_test.go new file mode 100644 index 0000000..90ea63a --- /dev/null +++ b/vendor/github.com/fgrid/uuid/uuid_test.go @@ -0,0 +1,42 @@ +package uuid + +import ( + "fmt" + "testing" +) + +func TestVersion(t *testing.T) { + uuid := UUID{ + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, + 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} + uuid[6] = 0x10 + if uuid.Version() != 1 { + t.Errorf("invalid version %d - expected 1", uuid.Version()) + } + uuid[6] = 0x20 + if uuid.Version() != 2 { + t.Errorf("invalid version %d - expected 2", uuid.Version()) + } + uuid[6] = 0x30 + if uuid.Version() != 3 { + t.Errorf("invalid version %d - expected 3", uuid.Version()) + } + uuid[6] = 0x40 + if uuid.Version() != 4 { + t.Errorf("invalid version %d - expected 4", uuid.Version()) + } + uuid[6] = 0x50 + if uuid.Version() != 5 { + t.Errorf("invalid version %d - expected 5", uuid.Version()) + } +} + +func ExampleString_NIL() { + fmt.Printf("NIL-UUID: %s", NIL.String()) + // Output: + // NIL-UUID: 00000000-0000-0000-0000-000000000000 +} diff --git a/vendor/github.com/fgrid/uuid/v1.go b/vendor/github.com/fgrid/uuid/v1.go new file mode 100644 index 0000000..8eafc4e --- /dev/null +++ b/vendor/github.com/fgrid/uuid/v1.go @@ -0,0 +1,77 @@ +package uuid + +import ( + "crypto/rand" + "encoding/binary" + "net" + "time" +) + +type stamp [10]byte + +var ( + mac []byte + requests chan bool + answers chan stamp +) + +const gregorianUnix = 122192928000000000 // nanoseconds between gregorion zero and unix zero + +func init() { + mac = make([]byte, 6) + rand.Read(mac) + requests = make(chan bool) + answers = make(chan stamp) + go unique() + i, err := net.Interfaces() + if err != nil { + return + } + for _, d := range i { + if len(d.HardwareAddr) == 6 { + mac = d.HardwareAddr[:6] + return + } + } +} + +// NewV1 creates a new UUID with variant 1 as described in RFC 4122. +// Variant 1 is based on hosts MAC address and actual timestamp (as count of 100-nanosecond intervals since +// 00:00:00.00, 15 October 1582 (the date of Gregorian reform to the Christian calendar). +func NewV1() *UUID { + var uuid UUID + requests <- true + s := <-answers + copy(uuid[:4], s[4:]) + copy(uuid[4:6], s[2:4]) + copy(uuid[6:8], s[:2]) + uuid[6] = (uuid[6] & 0x0f) | 0x10 + copy(uuid[8:10], s[8:]) + copy(uuid[10:], mac) + uuid.variantRFC4122() + return &uuid +} + +func unique() { + var ( + lastNanoTicks uint64 + clockSequence [2]byte + ) + rand.Read(clockSequence[:]) + + for range requests { + var s stamp + nanoTicks := uint64((time.Now().UTC().UnixNano() / 100) + gregorianUnix) + if nanoTicks < lastNanoTicks { + lastNanoTicks = nanoTicks + rand.Read(clockSequence[:]) + } else if nanoTicks == lastNanoTicks { + lastNanoTicks = nanoTicks + 1 + } else { + lastNanoTicks = nanoTicks + } + binary.BigEndian.PutUint64(s[:], lastNanoTicks) + copy(s[8:], clockSequence[:]) + answers <- s + } +} diff --git a/vendor/github.com/fgrid/uuid/v1_test.go b/vendor/github.com/fgrid/uuid/v1_test.go new file mode 100644 index 0000000..b8fd80b --- /dev/null +++ b/vendor/github.com/fgrid/uuid/v1_test.go @@ -0,0 +1,17 @@ +package uuid + +import "testing" + +func TestNewV1(t *testing.T) { + uuid := NewV1() + if uuid.Version() != 1 { + t.Errorf("invalid version %d - expected 1", uuid.Version()) + } + t.Logf("UUID V1: %s", uuid) +} + +func BenchmarkNewV1(b *testing.B) { + for i := 0; i < b.N; i++ { + NewV1() + } +} diff --git a/vendor/github.com/fgrid/uuid/v3.go b/vendor/github.com/fgrid/uuid/v3.go new file mode 100644 index 0000000..8446130 --- /dev/null +++ b/vendor/github.com/fgrid/uuid/v3.go @@ -0,0 +1,24 @@ +package uuid + +import ( + "crypto/md5" + "hash" +) + +// NewV3 creates a new UUID with variant 3 as described in RFC 4122. +// Variant 3 based namespace-uuid and name and MD-5 hash calculation. +func NewV3(namespace *UUID, name []byte) *UUID { + uuid := newByHash(md5.New(), namespace, name) + uuid[6] = (uuid[6] & 0x0f) | 0x30 + return uuid +} + +func newByHash(hash hash.Hash, namespace *UUID, name []byte) *UUID { + hash.Write(namespace[:]) + hash.Write(name[:]) + + var uuid UUID + copy(uuid[:], hash.Sum(nil)[:16]) + uuid.variantRFC4122() + return &uuid +} diff --git a/vendor/github.com/fgrid/uuid/v3_test.go b/vendor/github.com/fgrid/uuid/v3_test.go new file mode 100644 index 0000000..6d7a738 --- /dev/null +++ b/vendor/github.com/fgrid/uuid/v3_test.go @@ -0,0 +1,19 @@ +package uuid + +import "testing" + +func TestNewV3(t *testing.T) { + namespace := NewNamespaceUUID("test") + uuid := NewV3(namespace, []byte("test name")) + if uuid.Version() != 3 { + t.Errorf("invalid version %d - expected 3", uuid.Version()) + } + t.Logf("UUID V3: %s", uuid) +} + +func BenchmarkNewV3(b *testing.B) { + test := NewNamespaceUUID("test") + for i := 0; i < b.N; i++ { + NewV3(test, []byte("example")) + } +} diff --git a/vendor/github.com/fgrid/uuid/v4.go b/vendor/github.com/fgrid/uuid/v4.go new file mode 100644 index 0000000..1da6d2a --- /dev/null +++ b/vendor/github.com/fgrid/uuid/v4.go @@ -0,0 +1,14 @@ +package uuid + +import "crypto/rand" + +// NewV4 creates a new UUID with variant 4 as described in RFC 4122. Variant 4 based on pure random bytes. +func NewV4() *UUID { + buf := make([]byte, 16) + rand.Read(buf) + buf[6] = (buf[6] & 0x0f) | 0x40 + var uuid UUID + copy(uuid[:], buf[:]) + uuid.variantRFC4122() + return &uuid +} diff --git a/vendor/github.com/fgrid/uuid/v4_test.go b/vendor/github.com/fgrid/uuid/v4_test.go new file mode 100644 index 0000000..cd74d00 --- /dev/null +++ b/vendor/github.com/fgrid/uuid/v4_test.go @@ -0,0 +1,17 @@ +package uuid + +import "testing" + +func TestNewV4(t *testing.T) { + uuid := NewV4() + if uuid.Version() != 4 { + t.Errorf("invalid version %d - expected 4", uuid.Version()) + } + t.Logf("UUID V4: %s", uuid) +} + +func BenchmarkNewV4(b *testing.B) { + for i := 0; i < b.N; i++ { + NewV4() + } +} diff --git a/vendor/github.com/fgrid/uuid/v5.go b/vendor/github.com/fgrid/uuid/v5.go new file mode 100644 index 0000000..537113d --- /dev/null +++ b/vendor/github.com/fgrid/uuid/v5.go @@ -0,0 +1,17 @@ +package uuid + +import "crypto/sha1" + +// NewV5 creates a new UUID with variant 5 as described in RFC 4122. +// Variant 5 based namespace-uuid and name and SHA-1 hash calculation. +func NewV5(namespaceUUID *UUID, name []byte) *UUID { + uuid := newByHash(sha1.New(), namespaceUUID, name) + uuid[6] = (uuid[6] & 0x0f) | 0x50 + return uuid +} + +// NewNamespaceUUID creates a namespace UUID by using the namespace name in the NIL name space. +// This is a different approach as the 4 "standard" namespace UUIDs which are timebased UUIDs (V1). +func NewNamespaceUUID(namespace string) *UUID { + return NewV5(NIL, []byte(namespace)) +} diff --git a/vendor/github.com/fgrid/uuid/v5_test.go b/vendor/github.com/fgrid/uuid/v5_test.go new file mode 100644 index 0000000..a7282aa --- /dev/null +++ b/vendor/github.com/fgrid/uuid/v5_test.go @@ -0,0 +1,31 @@ +package uuid + +import ( + "fmt" + "testing" +) + +func TestNewV5(t *testing.T) { + namespace := NewNamespaceUUID("test") + uuid := NewV5(namespace, []byte("test name")) + if uuid.Version() != 5 { + t.Errorf("invalid version %d - expected 5", uuid.Version()) + } + t.Logf("UUID V5: %s", uuid) +} + +func BenchmarkNewV5(b *testing.B) { + test := NewNamespaceUUID("test") + for i := 0; i < b.N; i++ { + NewV5(test, []byte("example")) + } +} + +func ExampleNewNamespaceUUID() { + fmt.Printf("UUID(test): %s\n", NewNamespaceUUID("test")) + fmt.Printf("UUID(myNameSpace): %s\n", NewNamespaceUUID("myNameSpace")) + // Output: + // UUID(test): e8b764da-5fe5-51ed-8af8-c5c6eca28d7a + // UUID(myNameSpace): 40e41e4d-01d6-5e36-8c6b-93edcdf1442d + // +} diff --git a/vendor/github.com/glycerine/go-unsnap-stream/.gitignore b/vendor/github.com/glycerine/go-unsnap-stream/.gitignore new file mode 100644 index 0000000..0026861 --- /dev/null +++ b/vendor/github.com/glycerine/go-unsnap-stream/.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/glycerine/go-unsnap-stream/LICENSE b/vendor/github.com/glycerine/go-unsnap-stream/LICENSE new file mode 100644 index 0000000..31671ea --- /dev/null +++ b/vendor/github.com/glycerine/go-unsnap-stream/LICENSE @@ -0,0 +1,18 @@ +Copyright (c) 2014 the go-unsnap-stream authors. + +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 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. + +Permission is explicitly granted to relicense this material under new terms of +your choice when integrating this library with another library or project. diff --git a/vendor/github.com/glycerine/go-unsnap-stream/README.md b/vendor/github.com/glycerine/go-unsnap-stream/README.md new file mode 100644 index 0000000..b1b8c74 --- /dev/null +++ b/vendor/github.com/glycerine/go-unsnap-stream/README.md @@ -0,0 +1,20 @@ +go-unsnap-stream +================ + +This is a small golang library for decoding and encoding the snappy *streaming* format, specified here: https://github.com/google/snappy/blob/master/framing_format.txt + +Note that the *streaming or framing format* for snappy is different from snappy itself. Think of it as a train of boxcars: the streaming format breaks your data in chunks, applies snappy to each chunk alone, then puts a thin wrapper around the chunk, and sends it along in turn. You can begin decoding before receiving everything. And memory requirements for decoding are sane. + +Strangely, though the streaming format was first proposed in Go[1][2], it was never upated, and I could not locate any other library for Go that would handle the streaming/framed snappy format. Hence this implementation of the spec. There is a command line tool[3] that has a C implementation, but this is the only Go implementation that I am aware of. The reference for the framing/streaming spec seems to be the python implementation[4]. + +For binary compatibility with the python implementation, one could use the C-snappy compressor/decompressor code directly; using github.com/dgryski/go-csnappy. In fact we did this for a while to verify byte-for-byte compatiblity, as the native Go implementation produces slightly different binary compression (still conformant with the standard of course), which made test-diffs harder, and some have complained about it being slower than the C. + +However, while the c-snappy was useful for checking compatibility, it introduced dependencies on external C libraries (both the c-snappy library and the C standard library). Our go binary executable that used the go-unsnap-stream library was no longer standalone, and deployment was painful if not impossible if the target had a different C standard library. So we've gone back to using the snappy-go implementation (entirely in Go) for ease of deployment. See the comments at the top of unsnap.go if you wish to use c-snappy instead. + +[1] https://groups.google.com/forum/#!msg/snappy-compression/qvLNe2cSH9s/R19oBC-p7g4J + +[2] https://codereview.appspot.com/5167058 + +[3] https://github.com/kubo/snzip + +[4] https://pypi.python.org/pypi/python-snappy \ No newline at end of file diff --git a/vendor/github.com/glycerine/go-unsnap-stream/binary.dat b/vendor/github.com/glycerine/go-unsnap-stream/binary.dat new file mode 100644 index 0000000..f31eee2 Binary files /dev/null and b/vendor/github.com/glycerine/go-unsnap-stream/binary.dat differ diff --git a/vendor/github.com/glycerine/go-unsnap-stream/binary.dat.snappy b/vendor/github.com/glycerine/go-unsnap-stream/binary.dat.snappy new file mode 100644 index 0000000..ed37024 Binary files /dev/null and b/vendor/github.com/glycerine/go-unsnap-stream/binary.dat.snappy differ diff --git a/vendor/github.com/glycerine/go-unsnap-stream/cmd/deflate/deflate.go b/vendor/github.com/glycerine/go-unsnap-stream/cmd/deflate/deflate.go new file mode 100644 index 0000000..f7decbb --- /dev/null +++ b/vendor/github.com/glycerine/go-unsnap-stream/cmd/deflate/deflate.go @@ -0,0 +1,28 @@ +package main + +import ( + "fmt" + "io" + "os" + + "compress/flate" +) + +func main() { + + if len(os.Args) > 1 && os.Args[1] == "--help" { + fmt.Fprintf(os.Stderr, "deflate: compress stdin with DEFLATE (RFC 1951) best-compression setting, write to stdout.\n") + os.Exit(1) + } + + deflated, err := flate.NewWriter(os.Stdout, flate.BestCompression) + if err != nil { + panic(err) + } + defer deflated.Close() + + _, err = io.Copy(deflated, os.Stdin) + if err != nil { + panic(err) + } +} diff --git a/vendor/github.com/glycerine/go-unsnap-stream/cmd/huff/huff.go b/vendor/github.com/glycerine/go-unsnap-stream/cmd/huff/huff.go new file mode 100644 index 0000000..99843f2 --- /dev/null +++ b/vendor/github.com/glycerine/go-unsnap-stream/cmd/huff/huff.go @@ -0,0 +1,28 @@ +package main + +import ( + "fmt" + "io" + "os" + + "compress/flate" +) + +func main() { + + if len(os.Args) > 1 && os.Args[1] == "--help" { + fmt.Fprintf(os.Stderr, "huff: compress stdin with Huffman-only DEFLATE (RFC 1951) compression, write to stdout.\n") + os.Exit(1) + } + + deflated, err := flate.NewWriter(os.Stdout, flate.HuffmanOnly) + if err != nil { + panic(err) + } + defer deflated.Close() + + _, err = io.Copy(deflated, os.Stdin) + if err != nil { + panic(err) + } +} diff --git a/vendor/github.com/glycerine/go-unsnap-stream/cmd/inflate/inflate.go b/vendor/github.com/glycerine/go-unsnap-stream/cmd/inflate/inflate.go new file mode 100644 index 0000000..2595b2a --- /dev/null +++ b/vendor/github.com/glycerine/go-unsnap-stream/cmd/inflate/inflate.go @@ -0,0 +1,25 @@ +package main + +import ( + "fmt" + "io" + "os" + + "compress/flate" +) + +func main() { + + if len(os.Args) > 1 && os.Args[1] == "--help" { + fmt.Fprintf(os.Stderr, "inflate: decompress stdin with DEFLATE (RFC 1951) decompression, write to stdout.\n") + os.Exit(1) + } + + inflated := flate.NewReader(os.Stdin) + defer inflated.Close() + + _, err := io.Copy(os.Stdout, inflated) + if err != nil { + panic(err) + } +} diff --git a/vendor/github.com/glycerine/go-unsnap-stream/cmd/snap/snap.go b/vendor/github.com/glycerine/go-unsnap-stream/cmd/snap/snap.go new file mode 100644 index 0000000..ed61d03 --- /dev/null +++ b/vendor/github.com/glycerine/go-unsnap-stream/cmd/snap/snap.go @@ -0,0 +1,31 @@ +package main + +import ( + "fmt" + "io" + "os" + + unsnap "github.com/glycerine/go-unsnap-stream" +) + +func main() { + + if len(os.Args) > 1 && os.Args[1] == "--help" { + fmt.Fprintf(os.Stderr, "snap: compress stdin with snappy[1] and the snappy-framing-format[2][3]. Writes to stdout.\n [1]http://code.google.com/p/snappy\n [2]https://github.com/glycerine/go-unsnap-stream\n [3]http://code.google.com/p/snappy/source/browse/trunk/framing_format.txt\n") + os.Exit(1) + } + + snap := &unsnap.SnappyFile{ + Fname: "stdout", + Writer: os.Stdout, + EncBuf: *unsnap.NewFixedSizeRingBuf(unsnap.CHUNK_MAX * 2), // on writing: temp for testing compression + DecBuf: *unsnap.NewFixedSizeRingBuf(unsnap.CHUNK_MAX * 2), // on writing: final buffer of snappy framed and encoded bytes + Writing: true, + } + defer snap.Close() + + _, err := io.Copy(snap, os.Stdin) + if err != nil { + panic(err) + } +} diff --git a/vendor/github.com/glycerine/go-unsnap-stream/cmd/unhuff/unhuff.go b/vendor/github.com/glycerine/go-unsnap-stream/cmd/unhuff/unhuff.go new file mode 100644 index 0000000..2c9d1d5 --- /dev/null +++ b/vendor/github.com/glycerine/go-unsnap-stream/cmd/unhuff/unhuff.go @@ -0,0 +1,25 @@ +package main + +import ( + "fmt" + "io" + "os" + + "compress/flate" +) + +func main() { + + if len(os.Args) > 1 && os.Args[1] == "--help" { + fmt.Fprintf(os.Stderr, "unhuff: decompress stdin with Huffman-only DEFLATE (RFC 1951) decompression, write to stdout.\n") + os.Exit(1) + } + + inflated := flate.NewReader(os.Stdin) + defer inflated.Close() + + _, err := io.Copy(os.Stdout, inflated) + if err != nil { + panic(err) + } +} diff --git a/vendor/github.com/glycerine/go-unsnap-stream/cmd/unsnap/unsnap.go b/vendor/github.com/glycerine/go-unsnap-stream/cmd/unsnap/unsnap.go new file mode 100644 index 0000000..f207fc6 --- /dev/null +++ b/vendor/github.com/glycerine/go-unsnap-stream/cmd/unsnap/unsnap.go @@ -0,0 +1,31 @@ +package main + +import ( + "fmt" + "io" + "os" + + unsnap "github.com/glycerine/go-unsnap-stream" +) + +func main() { + + if len(os.Args) > 1 && os.Args[1] == "--help" { + fmt.Fprintf(os.Stderr, "unsnap: decode from stdin the snappy-framing-format[1][2] that wraps snappy[3] compressed chunks of data. Writes to stdout.\n [1]https://github.com/glycerine/go-unsnap-stream\n [2]http://code.google.com/p/snappy/source/browse/trunk/framing_format.txt\n [3]http://code.google.com/p/snappy\n") + os.Exit(1) + } + + snap := &unsnap.SnappyFile{ + Fname: "stdin", + Reader: os.Stdin, + EncBuf: *unsnap.NewFixedSizeRingBuf(unsnap.CHUNK_MAX * 2), // buffer of snappy encoded bytes + DecBuf: *unsnap.NewFixedSizeRingBuf(unsnap.CHUNK_MAX * 2), // buffer of snapppy decoded bytes + Writing: false, + } + defer snap.Close() + + _, err := io.Copy(os.Stdout, snap) + if err != nil { + panic(err) + } +} diff --git a/vendor/github.com/glycerine/go-unsnap-stream/rbuf.go b/vendor/github.com/glycerine/go-unsnap-stream/rbuf.go new file mode 100644 index 0000000..f771c39 --- /dev/null +++ b/vendor/github.com/glycerine/go-unsnap-stream/rbuf.go @@ -0,0 +1,375 @@ +package unsnap + +// copyright (c) 2014, Jason E. Aten +// license: MIT + +// Some text from the Golang standard library doc is adapted and +// reproduced in fragments below to document the expected behaviors +// of the interface functions Read()/Write()/ReadFrom()/WriteTo() that +// are implemented here. Those descriptions (see +// http://golang.org/pkg/io/#Reader for example) are +// copyright 2010 The Go Authors. + +import "io" + +// FixedSizeRingBuf: +// +// a fixed-size circular ring buffer. Yes, just what is says. +// +// We keep a pair of ping/pong buffers so that we can linearize +// the circular buffer into a contiguous slice if need be. +// +// For efficiency, a FixedSizeRingBuf may be vastly preferred to +// a bytes.Buffer. The ReadWithoutAdvance(), Advance(), and Adopt() +// methods are all non-standard methods written for speed. +// +// For an I/O heavy application, I have replaced bytes.Buffer with +// FixedSizeRingBuf and seen memory consumption go from 8GB to 25MB. +// Yes, that is a 300x reduction in memory footprint. Everything ran +// faster too. +// +// Note that Bytes(), while inescapable at times, is expensive: avoid +// it if possible. Instead it is better to use the FixedSizeRingBuf.Readable +// member to get the number of bytes available. Bytes() is expensive because +// it may copy the back and then the front of a wrapped buffer A[Use] +// into A[1-Use] in order to get a contiguous slice. If possible use ContigLen() +// first to get the size that can be read without copying, Read() that +// amount, and then Read() a second time -- to avoid the copy. + +type FixedSizeRingBuf struct { + A [2][]byte // a pair of ping/pong buffers. Only one is active. + Use int // which A buffer is in active use, 0 or 1 + N int // MaxViewInBytes, the size of A[0] and A[1] in bytes. + Beg int // start of data in A[Use] + Readable int // number of bytes available to read in A[Use] + + OneMade bool // lazily instantiate the [1] buffer. If we never call Bytes(), + // we may never need it. If OneMade is false, the Use must be = 0. +} + +func (b *FixedSizeRingBuf) Make2ndBuffer() { + if b.OneMade { + return + } + b.A[1] = make([]byte, b.N, b.N) + b.OneMade = true +} + +// get the length of the largest read that we can provide to a contiguous slice +// without an extra linearizing copy of all bytes internally. +func (b *FixedSizeRingBuf) ContigLen() int { + extent := b.Beg + b.Readable + firstContigLen := intMin(extent, b.N) - b.Beg + return firstContigLen +} + +func NewFixedSizeRingBuf(maxViewInBytes int) *FixedSizeRingBuf { + n := maxViewInBytes + r := &FixedSizeRingBuf{ + Use: 0, // 0 or 1, whichever is actually in use at the moment. + // If we are asked for Bytes() and we wrap, linearize into the other. + + N: n, + Beg: 0, + Readable: 0, + OneMade: false, + } + r.A[0] = make([]byte, n, n) + + // r.A[1] initialized lazily now. + + return r +} + +// from the standard library description of Bytes(): +// Bytes() returns a slice of the contents of the unread portion of the buffer. +// If the caller changes the contents of the +// returned slice, the contents of the buffer will change provided there +// are no intervening method calls on the Buffer. +// +func (b *FixedSizeRingBuf) Bytes() []byte { + + extent := b.Beg + b.Readable + if extent <= b.N { + // we fit contiguously in this buffer without wrapping to the other + return b.A[b.Use][b.Beg:(b.Beg + b.Readable)] + } + + // wrap into the other buffer + b.Make2ndBuffer() + + src := b.Use + dest := 1 - b.Use + + n := copy(b.A[dest], b.A[src][b.Beg:]) + n += copy(b.A[dest][n:], b.A[src][0:(extent%b.N)]) + + b.Use = dest + b.Beg = 0 + + return b.A[b.Use][:n] +} + +// Read(): +// +// from bytes.Buffer.Read(): Read reads the next len(p) bytes +// from the buffer or until the buffer is drained. The return +// value n is the number of bytes read. If the buffer has no data +// to return, err is io.EOF (unless len(p) is zero); otherwise it is nil. +// +// from the description of the Reader interface, +// http://golang.org/pkg/io/#Reader +// +/* +Reader is the interface that wraps the basic Read method. + +Read reads up to len(p) bytes into p. It returns the number +of bytes read (0 <= n <= len(p)) and any error encountered. +Even if Read returns n < len(p), it may use all of p as scratch +space during the call. If some data is available but not +len(p) bytes, Read conventionally returns what is available +instead of waiting for more. + +When Read encounters an error or end-of-file condition after +successfully reading n > 0 bytes, it returns the number of bytes +read. It may return the (non-nil) error from the same call or +return the error (and n == 0) from a subsequent call. An instance +of this general case is that a Reader returning a non-zero number +of bytes at the end of the input stream may return +either err == EOF or err == nil. The next Read should +return 0, EOF regardless. + +Callers should always process the n > 0 bytes returned before +considering the error err. Doing so correctly handles I/O errors +that happen after reading some bytes and also both of the +allowed EOF behaviors. + +Implementations of Read are discouraged from returning a zero +byte count with a nil error, and callers should treat that +situation as a no-op. +*/ +// + +func (b *FixedSizeRingBuf) Read(p []byte) (n int, err error) { + return b.ReadAndMaybeAdvance(p, true) +} + +// if you want to Read the data and leave it in the buffer, so as +// to peek ahead for example. +func (b *FixedSizeRingBuf) ReadWithoutAdvance(p []byte) (n int, err error) { + return b.ReadAndMaybeAdvance(p, false) +} + +func (b *FixedSizeRingBuf) ReadAndMaybeAdvance(p []byte, doAdvance bool) (n int, err error) { + if len(p) == 0 { + return 0, nil + } + if b.Readable == 0 { + return 0, io.EOF + } + extent := b.Beg + b.Readable + if extent <= b.N { + n += copy(p, b.A[b.Use][b.Beg:extent]) + } else { + n += copy(p, b.A[b.Use][b.Beg:b.N]) + if n < len(p) { + n += copy(p[n:], b.A[b.Use][0:(extent%b.N)]) + } + } + if doAdvance { + b.Advance(n) + } + return +} + +// +// Write writes len(p) bytes from p to the underlying data stream. +// It returns the number of bytes written from p (0 <= n <= len(p)) +// and any error encountered that caused the write to stop early. +// Write must return a non-nil error if it returns n < len(p). +// +func (b *FixedSizeRingBuf) Write(p []byte) (n int, err error) { + for { + if len(p) == 0 { + // nothing (left) to copy in; notice we shorten our + // local copy p (below) as we read from it. + return + } + + writeCapacity := b.N - b.Readable + if writeCapacity <= 0 { + // we are all full up already. + return n, io.ErrShortWrite + } + if len(p) > writeCapacity { + err = io.ErrShortWrite + // leave err set and + // keep going, write what we can. + } + + writeStart := (b.Beg + b.Readable) % b.N + + upperLim := intMin(writeStart+writeCapacity, b.N) + + k := copy(b.A[b.Use][writeStart:upperLim], p) + + n += k + b.Readable += k + p = p[k:] + + // we can fill from b.A[b.Use][0:something] from + // p's remainder, so loop + } +} + +// WriteTo and ReadFrom avoid intermediate allocation and copies. + +// WriteTo writes data to w until there's no more data to write +// or when an error occurs. The return value n is the number of +// bytes written. Any error encountered during the write is also returned. +func (b *FixedSizeRingBuf) WriteTo(w io.Writer) (n int64, err error) { + + if b.Readable == 0 { + return 0, io.EOF + } + + extent := b.Beg + b.Readable + firstWriteLen := intMin(extent, b.N) - b.Beg + secondWriteLen := b.Readable - firstWriteLen + if firstWriteLen > 0 { + m, e := w.Write(b.A[b.Use][b.Beg:(b.Beg + firstWriteLen)]) + n += int64(m) + b.Advance(m) + + if e != nil { + return n, e + } + // all bytes should have been written, by definition of + // Write method in io.Writer + if m != firstWriteLen { + return n, io.ErrShortWrite + } + } + if secondWriteLen > 0 { + m, e := w.Write(b.A[b.Use][0:secondWriteLen]) + n += int64(m) + b.Advance(m) + + if e != nil { + return n, e + } + // all bytes should have been written, by definition of + // Write method in io.Writer + if m != secondWriteLen { + return n, io.ErrShortWrite + } + } + + return n, nil +} + +// ReadFrom() reads data from r until EOF or error. The return value n +// is the number of bytes read. Any error except io.EOF encountered +// during the read is also returned. +func (b *FixedSizeRingBuf) ReadFrom(r io.Reader) (n int64, err error) { + for { + writeCapacity := b.N - b.Readable + if writeCapacity <= 0 { + // we are all full + return n, nil + } + writeStart := (b.Beg + b.Readable) % b.N + upperLim := intMin(writeStart+writeCapacity, b.N) + + m, e := r.Read(b.A[b.Use][writeStart:upperLim]) + n += int64(m) + b.Readable += m + if e == io.EOF { + return n, nil + } + if e != nil { + return n, e + } + } +} + +func (b *FixedSizeRingBuf) Reset() { + b.Beg = 0 + b.Readable = 0 + b.Use = 0 +} + +// Advance(): non-standard, but better than Next(), +// because we don't have to unwrap our buffer and pay the cpu time +// for the copy that unwrapping may need. +// Useful in conjuction/after ReadWithoutAdvance() above. +func (b *FixedSizeRingBuf) Advance(n int) { + if n <= 0 { + return + } + if n > b.Readable { + n = b.Readable + } + b.Readable -= n + b.Beg = (b.Beg + n) % b.N +} + +// Adopt(): non-standard. +// +// For efficiency's sake, (possibly) take ownership of +// already allocated slice offered in me. +// +// If me is large we will adopt it, and we will potentially then +// write to the me buffer. +// If we already have a bigger buffer, copy me into the existing +// buffer instead. +func (b *FixedSizeRingBuf) Adopt(me []byte) { + n := len(me) + if n > b.N { + b.A[0] = me + b.OneMade = false + b.N = n + b.Use = 0 + b.Beg = 0 + b.Readable = n + } else { + // we already have a larger buffer, reuse it. + copy(b.A[0], me) + b.Use = 0 + b.Beg = 0 + b.Readable = n + } +} + +func intMax(a, b int) int { + if a > b { + return a + } else { + return b + } +} + +func intMin(a, b int) int { + if a < b { + return a + } else { + return b + } +} + +// Get the (beg, end] indices of the tailing empty buffer of bytes slice that from that is free for writing. +// Note: not guaranteed to be zeroed. At all. +func (b *FixedSizeRingBuf) GetEndmostWritable() (beg int, end int) { + extent := b.Beg + b.Readable + if extent < b.N { + return extent, b.N + } + + return extent % b.N, b.Beg +} + +// Note: not guaranteed to be zeroed. +func (b *FixedSizeRingBuf) GetEndmostWritableSlice() []byte { + beg, e := b.GetEndmostWritable() + return b.A[b.Use][beg:e] +} diff --git a/vendor/github.com/glycerine/go-unsnap-stream/rbuf_test.go b/vendor/github.com/glycerine/go-unsnap-stream/rbuf_test.go new file mode 100644 index 0000000..732126a --- /dev/null +++ b/vendor/github.com/glycerine/go-unsnap-stream/rbuf_test.go @@ -0,0 +1,164 @@ +package unsnap + +import ( + "bytes" + "fmt" + "io" + "testing" + + cv "github.com/glycerine/goconvey/convey" +) + +func TestRingBufReadWrite(t *testing.T) { + b := NewFixedSizeRingBuf(5) + + data := []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} + + cv.Convey("Given a FixedSizeRingBuf of size 5", t, func() { + cv.Convey("Write(), Bytes(), and Read() should put and get bytes", func() { + n, err := b.Write(data[0:5]) + cv.So(n, cv.ShouldEqual, 5) + cv.So(err, cv.ShouldEqual, nil) + cv.So(b.Readable, cv.ShouldEqual, 5) + if n != 5 { + fmt.Printf("should have been able to write 5 bytes.\n") + } + if err != nil { + panic(err) + } + cv.So(b.Bytes(), cv.ShouldResemble, data[0:5]) + + sink := make([]byte, 3) + n, err = b.Read(sink) + cv.So(n, cv.ShouldEqual, 3) + cv.So(b.Bytes(), cv.ShouldResemble, data[3:5]) + cv.So(sink, cv.ShouldResemble, data[0:3]) + }) + + cv.Convey("Write() more than 5 should give back ErrShortWrite", func() { + b.Reset() + cv.So(b.Readable, cv.ShouldEqual, 0) + n, err := b.Write(data[0:10]) + cv.So(n, cv.ShouldEqual, 5) + cv.So(err, cv.ShouldEqual, io.ErrShortWrite) + cv.So(b.Readable, cv.ShouldEqual, 5) + if n != 5 { + fmt.Printf("should have been able to write 5 bytes.\n") + } + cv.So(b.Bytes(), cv.ShouldResemble, data[0:5]) + + sink := make([]byte, 3) + n, err = b.Read(sink) + cv.So(n, cv.ShouldEqual, 3) + cv.So(b.Bytes(), cv.ShouldResemble, data[3:5]) + cv.So(sink, cv.ShouldResemble, data[0:3]) + }) + + cv.Convey("we should be able to wrap data and then get it back in Bytes()", func() { + b.Reset() + + n, err := b.Write(data[0:3]) + cv.So(n, cv.ShouldEqual, 3) + cv.So(err, cv.ShouldEqual, nil) + + sink := make([]byte, 3) + n, err = b.Read(sink) // put b.beg at 3 + cv.So(n, cv.ShouldEqual, 3) + cv.So(err, cv.ShouldEqual, nil) + cv.So(b.Readable, cv.ShouldEqual, 0) + + n, err = b.Write(data[3:8]) // wrap 3 bytes around to the front + cv.So(n, cv.ShouldEqual, 5) + cv.So(err, cv.ShouldEqual, nil) + + by := b.Bytes() + cv.So(by, cv.ShouldResemble, data[3:8]) // but still get them back from the ping-pong buffering + + }) + + cv.Convey("FixedSizeRingBuf::WriteTo() should work with wrapped data", func() { + b.Reset() + + n, err := b.Write(data[0:3]) + cv.So(n, cv.ShouldEqual, 3) + cv.So(err, cv.ShouldEqual, nil) + + sink := make([]byte, 3) + n, err = b.Read(sink) // put b.beg at 3 + cv.So(n, cv.ShouldEqual, 3) + cv.So(err, cv.ShouldEqual, nil) + cv.So(b.Readable, cv.ShouldEqual, 0) + + n, err = b.Write(data[3:8]) // wrap 3 bytes around to the front + + var bb bytes.Buffer + m, err := b.WriteTo(&bb) + + cv.So(m, cv.ShouldEqual, 5) + cv.So(err, cv.ShouldEqual, nil) + + by := bb.Bytes() + cv.So(by, cv.ShouldResemble, data[3:8]) // but still get them back from the ping-pong buffering + + }) + + cv.Convey("FixedSizeRingBuf::ReadFrom() should work with wrapped data", func() { + b.Reset() + var bb bytes.Buffer + n, err := b.ReadFrom(&bb) + cv.So(n, cv.ShouldEqual, 0) + cv.So(err, cv.ShouldEqual, nil) + + // write 4, then read 4 bytes + m, err := b.Write(data[0:4]) + cv.So(m, cv.ShouldEqual, 4) + cv.So(err, cv.ShouldEqual, nil) + + sink := make([]byte, 4) + k, err := b.Read(sink) // put b.beg at 4 + cv.So(k, cv.ShouldEqual, 4) + cv.So(err, cv.ShouldEqual, nil) + cv.So(b.Readable, cv.ShouldEqual, 0) + cv.So(b.Beg, cv.ShouldEqual, 4) + + bbread := bytes.NewBuffer(data[4:9]) + n, err = b.ReadFrom(bbread) // wrap 4 bytes around to the front, 5 bytes total. + + by := b.Bytes() + cv.So(by, cv.ShouldResemble, data[4:9]) // but still get them back continguous from the ping-pong buffering + + }) + + cv.Convey("FixedSizeRingBuf::GetEndmostWritableSlice() should return the slice size we expect.", func() { + b.Reset() + var bb bytes.Buffer + n, err := b.ReadFrom(&bb) + cv.So(n, cv.ShouldEqual, 0) + cv.So(err, cv.ShouldEqual, nil) + cv.So(len(b.GetEndmostWritableSlice()), cv.ShouldEqual, 5) + + // write 4, then read 4 bytes + m, err := b.Write(data[0:4]) + cv.So(m, cv.ShouldEqual, 4) + cv.So(err, cv.ShouldEqual, nil) + cv.So(len(b.GetEndmostWritableSlice()), cv.ShouldEqual, 1) + + sink := make([]byte, 4) + k, err := b.Read(sink) // put b.beg at 4 + cv.So(k, cv.ShouldEqual, 4) + cv.So(err, cv.ShouldEqual, nil) + cv.So(b.Readable, cv.ShouldEqual, 0) + cv.So(b.Beg, cv.ShouldEqual, 4) + + bbread := bytes.NewBuffer(data[4:9]) + n, err = b.ReadFrom(bbread) // wrap 4 bytes around to the front, 5 bytes total. + + by := b.Bytes() + cv.So(by, cv.ShouldResemble, data[4:9]) // but still get them back continguous from the ping-pong buffering + + cv.So(len(b.GetEndmostWritableSlice()), cv.ShouldEqual, 0) + }) + + }) + +} diff --git a/vendor/github.com/glycerine/go-unsnap-stream/snap.go b/vendor/github.com/glycerine/go-unsnap-stream/snap.go new file mode 100644 index 0000000..12a8d40 --- /dev/null +++ b/vendor/github.com/glycerine/go-unsnap-stream/snap.go @@ -0,0 +1,100 @@ +package unsnap + +import ( + "encoding/binary" + + // no c lib dependency + snappy "github.com/golang/snappy" + // or, use the C wrapper for speed + //snappy "github.com/dgryski/go-csnappy" +) + +// add Write() method for SnappyFile (see unsnap.go) + +// reference for snappy framing/streaming format: +// http://code.google.com/p/snappy/source/browse/trunk/framing_format.txt +// ?spec=svn68&r=71 + +// +// Write writes len(p) bytes from p to the underlying data stream. +// It returns the number of bytes written from p (0 <= n <= len(p)) and +// any error encountered that caused the write to stop early. Write +// must return a non-nil error if it returns n < len(p). +// +func (sf *SnappyFile) Write(p []byte) (n int, err error) { + + if sf.SnappyEncodeDecodeOff { + return sf.Writer.Write(p) + } + + if !sf.Writing { + panic("Writing on a read-only SnappyFile") + } + + // encoding in snappy can apparently go beyond the original size, beware. + // so our buffers must be sized 2*max snappy chunk => 2 * CHUNK_MAX(65536) + + sf.DecBuf.Reset() + sf.EncBuf.Reset() + + if !sf.HeaderChunkWritten { + sf.HeaderChunkWritten = true + _, err = sf.Writer.Write(SnappyStreamHeaderMagic) + if err != nil { + return + } + } + var chunk []byte + var chunk_type byte + var crc uint32 + + for len(p) > 0 { + + // chunk points to input p by default, unencoded input. + chunk = p[:IntMin(len(p), CHUNK_MAX)] + crc = masked_crc32c(chunk) + + writeme := chunk[:] + + // first write to EncBuf, as a temp, in case we want + // to discard and send uncompressed instead. + compressed_chunk := snappy.Encode(sf.EncBuf.GetEndmostWritableSlice(), chunk) + + if len(compressed_chunk) <= int((1-_COMPRESSION_THRESHOLD)*float64(len(chunk))) { + writeme = compressed_chunk + chunk_type = _COMPRESSED_CHUNK + } else { + // keep writeme pointing at original chunk (uncompressed) + chunk_type = _UNCOMPRESSED_CHUNK + } + + const crc32Sz = 4 + var tag32 uint32 = uint32(chunk_type) + (uint32(len(writeme)+crc32Sz) << 8) + + err = binary.Write(sf.Writer, binary.LittleEndian, tag32) + if err != nil { + return + } + + err = binary.Write(sf.Writer, binary.LittleEndian, crc) + if err != nil { + return + } + + _, err = sf.Writer.Write(writeme) + if err != nil { + return + } + + n += len(chunk) + p = p[len(chunk):] + } + return n, nil +} + +func IntMin(a int, b int) int { + if a < b { + return a + } + return b +} diff --git a/vendor/github.com/glycerine/go-unsnap-stream/snap_test.go b/vendor/github.com/glycerine/go-unsnap-stream/snap_test.go new file mode 100644 index 0000000..b070ed1 --- /dev/null +++ b/vendor/github.com/glycerine/go-unsnap-stream/snap_test.go @@ -0,0 +1,42 @@ +package unsnap + +// copyright (c) 2013-2016, Jason E. Aten. +// License: MIT. + +import ( + "bytes" + "math/rand" + "testing" + + cv "github.com/glycerine/goconvey/convey" +) + +func TestNewReaderNewWriterAndIllustrateBasicUse(t *testing.T) { + + cv.Convey("NewReader and NewWrite basic example", t, func() { + rand.Seed(29) + data := make([]byte, 2048) + rand.Read(data) + + var buf bytes.Buffer + w := NewWriter(&buf) + + // compress + _, err := w.Write(data) + if err != nil { + panic(err) + } + w.Close() + + // uncompress + r := NewReader(&buf) + data2 := make([]byte, len(data)) + _, err = r.Read(data2) + if err != nil { + panic(err) + } + + cv.So(data2, cv.ShouldResemble, data) + + }) +} diff --git a/vendor/github.com/glycerine/go-unsnap-stream/unenc.txt b/vendor/github.com/glycerine/go-unsnap-stream/unenc.txt new file mode 100644 index 0000000..5f50279 --- /dev/null +++ b/vendor/github.com/glycerine/go-unsnap-stream/unenc.txt @@ -0,0 +1 @@ +hello_snappy diff --git a/vendor/github.com/glycerine/go-unsnap-stream/unenc.txt.snappy b/vendor/github.com/glycerine/go-unsnap-stream/unenc.txt.snappy new file mode 100644 index 0000000..ba45ecd Binary files /dev/null and b/vendor/github.com/glycerine/go-unsnap-stream/unenc.txt.snappy differ diff --git a/vendor/github.com/glycerine/go-unsnap-stream/unsnap.go b/vendor/github.com/glycerine/go-unsnap-stream/unsnap.go new file mode 100644 index 0000000..8789445 --- /dev/null +++ b/vendor/github.com/glycerine/go-unsnap-stream/unsnap.go @@ -0,0 +1,513 @@ +package unsnap + +import ( + "bytes" + "encoding/binary" + "fmt" + "io" + "io/ioutil" + "os" + + "hash/crc32" + + snappy "github.com/golang/snappy" + // The C library can be used, but this makes the binary dependent + // lots of extraneous c-libraries; it is no longer stand-alone. Yuck. + // + // Therefore we comment out the "dgryski/go-csnappy" path and use the + // "github.com/golang/snappy/snappy" above instead. If you are + // performance limited and can deal with distributing more libraries, + // then this is easy to swap. + // + // If you swap, note that some of the tests won't pass + // because snappy-go produces slightly different (but still + // conformant) encodings on some data. Here are bindings + // to the C-snappy: + // snappy "github.com/dgryski/go-csnappy" +) + +// SnappyFile: create a drop-in-replacement/wrapper for an *os.File that handles doing the unsnappification online as more is read from it + +type SnappyFile struct { + Fname string + + Reader io.Reader + Writer io.Writer + + // allow clients to substitute us for an os.File and just switch + // off compression if they don't want it. + SnappyEncodeDecodeOff bool // if true, we bypass straight to Filep + + EncBuf FixedSizeRingBuf // holds any extra that isn't yet returned, encoded + DecBuf FixedSizeRingBuf // holds any extra that isn't yet returned, decoded + + // for writing to stream-framed snappy + HeaderChunkWritten bool + + // Sanity check: we can only read, or only write, to one SnappyFile. + // EncBuf and DecBuf are used differently in each mode. Verify + // that we are consistent with this flag. + Writing bool +} + +var total int + +// for debugging, show state of buffers +func (f *SnappyFile) Dump() { + fmt.Printf("EncBuf has length %d and contents:\n%s\n", len(f.EncBuf.Bytes()), string(f.EncBuf.Bytes())) + fmt.Printf("DecBuf has length %d and contents:\n%s\n", len(f.DecBuf.Bytes()), string(f.DecBuf.Bytes())) +} + +func (f *SnappyFile) Read(p []byte) (n int, err error) { + + if f.SnappyEncodeDecodeOff { + return f.Reader.Read(p) + } + + if f.Writing { + panic("Reading on a write-only SnappyFile") + } + + // before we unencrypt more, try to drain the DecBuf first + n, _ = f.DecBuf.Read(p) + if n > 0 { + total += n + return n, nil + } + + //nEncRead, nDecAdded, err := UnsnapOneFrame(f.Filep, &f.EncBuf, &f.DecBuf, f.Fname) + _, _, err = UnsnapOneFrame(f.Reader, &f.EncBuf, &f.DecBuf, f.Fname) + if err != nil && err != io.EOF { + panic(err) + } + + n, _ = f.DecBuf.Read(p) + + if n > 0 { + total += n + return n, nil + } + if f.DecBuf.Readable == 0 { + if f.DecBuf.Readable == 0 && f.EncBuf.Readable == 0 { + // only now (when EncBuf is empty) can we give io.EOF. + // Any earlier, and we leave stuff un-decoded! + return 0, io.EOF + } + } + return 0, nil +} + +func Open(name string) (file *SnappyFile, err error) { + fp, err := os.Open(name) + if err != nil { + return nil, err + } + // encoding in snappy can apparently go beyond the original size, so + // we make our buffers big enough, 2*max snappy chunk => 2 * CHUNK_MAX(65536) + + snap := NewReader(fp) + snap.Fname = name + return snap, nil +} + +func NewReader(r io.Reader) *SnappyFile { + return &SnappyFile{ + Reader: r, + EncBuf: *NewFixedSizeRingBuf(CHUNK_MAX * 2), // buffer of snappy encoded bytes + DecBuf: *NewFixedSizeRingBuf(CHUNK_MAX * 2), // buffer of snapppy decoded bytes + Writing: false, + } +} + +func NewWriter(w io.Writer) *SnappyFile { + return &SnappyFile{ + Writer: w, + EncBuf: *NewFixedSizeRingBuf(65536), // on writing: temp for testing compression + DecBuf: *NewFixedSizeRingBuf(65536 * 2), // on writing: final buffer of snappy framed and encoded bytes + Writing: true, + } +} + +func Create(name string) (file *SnappyFile, err error) { + fp, err := os.Create(name) + if err != nil { + return nil, err + } + snap := NewWriter(fp) + snap.Fname = name + return snap, nil +} + +func (f *SnappyFile) Close() error { + if f.Writing { + wc, ok := f.Writer.(io.WriteCloser) + if ok { + return wc.Close() + } + return nil + } + rc, ok := f.Reader.(io.ReadCloser) + if ok { + return rc.Close() + } + return nil +} + +func (f *SnappyFile) Sync() error { + file, ok := f.Writer.(*os.File) + if ok { + return file.Sync() + } + return nil +} + +// for an increment of a frame at a time: +// read from r into encBuf (encBuf is still encoded, thus the name), and write unsnappified frames into outDecodedBuf +// the returned n: number of bytes read from the encrypted encBuf +func UnsnapOneFrame(r io.Reader, encBuf *FixedSizeRingBuf, outDecodedBuf *FixedSizeRingBuf, fname string) (nEnc int64, nDec int64, err error) { + // b, err := ioutil.ReadAll(r) + // if err != nil { + // panic(err) + // } + + nEnc = 0 + nDec = 0 + + // read up to 65536 bytes from r into encBuf, at least a snappy frame + nread, err := io.CopyN(encBuf, r, 65536) // returns nwrotebytes, err + nEnc += nread + if err != nil { + if err == io.EOF { + if nread == 0 { + if encBuf.Readable == 0 { + return nEnc, nDec, io.EOF + } + // else we have bytes in encBuf, so decode them! + err = nil + } else { + // continue below, processing the nread bytes + err = nil + } + } else { + panic(err) + } + } + + // flag for printing chunk size alignment messages + verbose := false + + const snappyStreamHeaderSz = 10 + const headerSz = 4 + const crc32Sz = 4 + // the magic 18 bytes accounts for the snappy streaming header and the first chunks size and checksum + // http://code.google.com/p/snappy/source/browse/trunk/framing_format.txt + + chunk := (*encBuf).Bytes() + + // however we exit, advance as + // defer func() { (*encBuf).Next(N) }() + + // 65536 is the max size of a snappy framed chunk. See + // http://code.google.com/p/snappy/source/browse/trunk/framing_format.txt:91 + // buf := make([]byte, 65536) + + // fmt.Printf("read from file, b is len:%d with value: %#v\n", len(b), b) + // fmt.Printf("read from file, bcut is len:%d with value: %#v\n", len(bcut), bcut) + + //fmt.Printf("raw bytes of chunksz are: %v\n", b[11:14]) + + fourbytes := make([]byte, 4) + chunkCount := 0 + + for nDec < 65536 { + if len(chunk) == 0 { + break + } + chunkCount++ + fourbytes[3] = 0 + copy(fourbytes, chunk[1:4]) + chunksz := binary.LittleEndian.Uint32(fourbytes) + chunk_type := chunk[0] + + switch true { + case chunk_type == 0xff: + { // stream identifier + + streamHeader := chunk[:snappyStreamHeaderSz] + if 0 != bytes.Compare(streamHeader, []byte{0xff, 0x06, 0x00, 0x00, 0x73, 0x4e, 0x61, 0x50, 0x70, 0x59}) { + panic("file had chunk starting with 0xff but then no magic snappy streaming protocol bytes, aborting.") + } else { + //fmt.Printf("got streaming snappy magic header just fine.\n") + } + chunk = chunk[snappyStreamHeaderSz:] + (*encBuf).Advance(snappyStreamHeaderSz) + nEnc += snappyStreamHeaderSz + continue + } + case chunk_type == 0x00: + { // compressed data + if verbose { + fmt.Fprintf(os.Stderr, "chunksz is %d while total bytes avail are: %d\n", int(chunksz), len(chunk)-4) + } + + crc := binary.LittleEndian.Uint32(chunk[headerSz:(headerSz + crc32Sz)]) + section := chunk[(headerSz + crc32Sz):(headerSz + chunksz)] + + dec, ok := snappy.Decode(nil, section) + if ok != nil { + // we've probably truncated a snappy frame at this point + // ok=snappy: corrupt input + // len(dec) == 0 + // + panic(fmt.Sprintf("could not decode snappy stream: '%s' and len dec=%d and ok=%v\n", fname, len(dec), ok)) + + // get back to caller with what we've got so far + return nEnc, nDec, nil + } + // fmt.Printf("ok, b is %#v , %#v\n", ok, dec) + + // spit out decoded text + // n, err := w.Write(dec) + //fmt.Printf("len(dec) = %d, outDecodedBuf.Readable=%d\n", len(dec), outDecodedBuf.Readable) + bnb := bytes.NewBuffer(dec) + n, err := io.Copy(outDecodedBuf, bnb) + if err != nil { + //fmt.Printf("got n=%d, err= %s ; when trying to io.Copy(outDecodedBuf: N=%d, Readable=%d)\n", n, err, outDecodedBuf.N, outDecodedBuf.Readable) + panic(err) + } + if n != int64(len(dec)) { + panic("could not write all bytes to outDecodedBuf") + } + nDec += n + + // verify the crc32 rotated checksum + m32 := masked_crc32c(dec) + if m32 != crc { + panic(fmt.Sprintf("crc32 masked failiure. expected: %v but got: %v", crc, m32)) + } else { + //fmt.Printf("\nchecksums match: %v == %v\n", crc, m32) + } + + // move to next header + inc := (headerSz + int(chunksz)) + chunk = chunk[inc:] + (*encBuf).Advance(inc) + nEnc += int64(inc) + continue + } + case chunk_type == 0x01: + { // uncompressed data + + //n, err := w.Write(chunk[(headerSz+crc32Sz):(headerSz + int(chunksz))]) + n, err := io.Copy(outDecodedBuf, bytes.NewBuffer(chunk[(headerSz+crc32Sz):(headerSz+int(chunksz))])) + if verbose { + //fmt.Printf("debug: n=%d err=%v chunksz=%d outDecodedBuf='%v'\n", n, err, chunksz, outDecodedBuf) + } + if err != nil { + panic(err) + } + if n != int64(chunksz-crc32Sz) { + panic("could not write all bytes to stdout") + } + nDec += n + + inc := (headerSz + int(chunksz)) + chunk = chunk[inc:] + (*encBuf).Advance(inc) + nEnc += int64(inc) + continue + } + case chunk_type == 0xfe: + fallthrough // padding, just skip it + case chunk_type >= 0x80 && chunk_type <= 0xfd: + { // Reserved skippable chunks + //fmt.Printf("\nin reserved skippable chunks, at nEnc=%v\n", nEnc) + inc := (headerSz + int(chunksz)) + chunk = chunk[inc:] + nEnc += int64(inc) + (*encBuf).Advance(inc) + continue + } + + default: + panic(fmt.Sprintf("unrecognized/unsupported chunk type %#v", chunk_type)) + } + + } // end for{} + + return nEnc, nDec, err + //return int64(N), nil +} + +// for whole file at once: +// +// receive on stdin a stream of bytes in the snappy-streaming framed +// format, defined here: http://code.google.com/p/snappy/source/browse/trunk/framing_format.txt +// Grab each frame, run it through the snappy decoder, and spit out +// each frame all joined back-to-back on stdout. +// +func Unsnappy(r io.Reader, w io.Writer) (err error) { + b, err := ioutil.ReadAll(r) + if err != nil { + panic(err) + } + + // flag for printing chunk size alignment messages + verbose := false + + const snappyStreamHeaderSz = 10 + const headerSz = 4 + const crc32Sz = 4 + // the magic 18 bytes accounts for the snappy streaming header and the first chunks size and checksum + // http://code.google.com/p/snappy/source/browse/trunk/framing_format.txt + + chunk := b[:] + + // 65536 is the max size of a snappy framed chunk. See + // http://code.google.com/p/snappy/source/browse/trunk/framing_format.txt:91 + //buf := make([]byte, 65536) + + // fmt.Printf("read from file, b is len:%d with value: %#v\n", len(b), b) + // fmt.Printf("read from file, bcut is len:%d with value: %#v\n", len(bcut), bcut) + + //fmt.Printf("raw bytes of chunksz are: %v\n", b[11:14]) + + fourbytes := make([]byte, 4) + chunkCount := 0 + + for { + if len(chunk) == 0 { + break + } + chunkCount++ + fourbytes[3] = 0 + copy(fourbytes, chunk[1:4]) + chunksz := binary.LittleEndian.Uint32(fourbytes) + chunk_type := chunk[0] + + switch true { + case chunk_type == 0xff: + { // stream identifier + + streamHeader := chunk[:snappyStreamHeaderSz] + if 0 != bytes.Compare(streamHeader, []byte{0xff, 0x06, 0x00, 0x00, 0x73, 0x4e, 0x61, 0x50, 0x70, 0x59}) { + panic("file had chunk starting with 0xff but then no magic snappy streaming protocol bytes, aborting.") + } else { + //fmt.Printf("got streaming snappy magic header just fine.\n") + } + chunk = chunk[snappyStreamHeaderSz:] + continue + } + case chunk_type == 0x00: + { // compressed data + if verbose { + fmt.Fprintf(os.Stderr, "chunksz is %d while total bytes avail are: %d\n", int(chunksz), len(chunk)-4) + } + + //crc := binary.LittleEndian.Uint32(chunk[headerSz:(headerSz + crc32Sz)]) + section := chunk[(headerSz + crc32Sz):(headerSz + chunksz)] + + dec, ok := snappy.Decode(nil, section) + if ok != nil { + panic("could not decode snappy stream") + } + // fmt.Printf("ok, b is %#v , %#v\n", ok, dec) + + // spit out decoded text + n, err := w.Write(dec) + if err != nil { + panic(err) + } + if n != len(dec) { + panic("could not write all bytes to stdout") + } + + // TODO: verify the crc32 rotated checksum? + + // move to next header + chunk = chunk[(headerSz + int(chunksz)):] + continue + } + case chunk_type == 0x01: + { // uncompressed data + + //crc := binary.LittleEndian.Uint32(chunk[headerSz:(headerSz + crc32Sz)]) + section := chunk[(headerSz + crc32Sz):(headerSz + chunksz)] + + n, err := w.Write(section) + if err != nil { + panic(err) + } + if n != int(chunksz-crc32Sz) { + panic("could not write all bytes to stdout") + } + + chunk = chunk[(headerSz + int(chunksz)):] + continue + } + case chunk_type == 0xfe: + fallthrough // padding, just skip it + case chunk_type >= 0x80 && chunk_type <= 0xfd: + { // Reserved skippable chunks + chunk = chunk[(headerSz + int(chunksz)):] + continue + } + + default: + panic(fmt.Sprintf("unrecognized/unsupported chunk type %#v", chunk_type)) + } + + } // end for{} + + return nil +} + +// 0xff 0x06 0x00 0x00 sNaPpY +var SnappyStreamHeaderMagic = []byte{0xff, 0x06, 0x00, 0x00, 0x73, 0x4e, 0x61, 0x50, 0x70, 0x59} + +const CHUNK_MAX = 65536 +const _STREAM_TO_STREAM_BLOCK_SIZE = CHUNK_MAX +const _STREAM_IDENTIFIER = `sNaPpY` +const _COMPRESSED_CHUNK = 0x00 +const _UNCOMPRESSED_CHUNK = 0x01 +const _IDENTIFIER_CHUNK = 0xff +const _RESERVED_UNSKIPPABLE0 = 0x02 // chunk ranges are [inclusive, exclusive) +const _RESERVED_UNSKIPPABLE1 = 0x80 +const _RESERVED_SKIPPABLE0 = 0x80 +const _RESERVED_SKIPPABLE1 = 0xff + +// the minimum percent of bytes compression must save to be enabled in automatic +// mode +const _COMPRESSION_THRESHOLD = .125 + +var crctab *crc32.Table + +func init() { + crctab = crc32.MakeTable(crc32.Castagnoli) // this is correct table, matches the crc32c.c code used by python +} + +func masked_crc32c(data []byte) uint32 { + + // see the framing format specification, http://code.google.com/p/snappy/source/browse/trunk/framing_format.txt + var crc uint32 = crc32.Checksum(data, crctab) + return (uint32((crc>>15)|(crc<<17)) + 0xa282ead8) +} + +func ReadSnappyStreamCompressedFile(filename string) ([]byte, error) { + + snappyFile, err := Open(filename) + if err != nil { + return []byte{}, err + } + + var bb bytes.Buffer + _, err = bb.ReadFrom(snappyFile) + if err == io.EOF { + err = nil + } + if err != nil { + panic(err) + } + + return bb.Bytes(), err +} diff --git a/vendor/github.com/glycerine/go-unsnap-stream/unsnap_test.go b/vendor/github.com/glycerine/go-unsnap-stream/unsnap_test.go new file mode 100644 index 0000000..945beb9 --- /dev/null +++ b/vendor/github.com/glycerine/go-unsnap-stream/unsnap_test.go @@ -0,0 +1,111 @@ +package unsnap + +// copyright (c) 2013-2014, Jason E. Aten. +// License: MIT. + +import ( + "fmt" + "io" + "os" + "os/exec" + "testing" + + cv "github.com/glycerine/goconvey/convey" +) + +func TestSnappyFileUncompressedChunk(t *testing.T) { + orig := "unenc.txt" + compressed := "unenc.txt.snappy" + myUncomp := "testout.unsnap" + + cv.Convey("SnappyFile should read snappy compressed with uncompressed chunk file.", t, func() { + f, err := Open(compressed) + + out, err := os.Create(myUncomp) + if err != nil { + panic(err) + } + + io.Copy(out, f) + out.Close() + f.Close() + + cs := []string{orig, myUncomp} + cmd := exec.Command("/usr/bin/diff", cs...) + bs, err := cmd.Output() + if err != nil { + fmt.Printf("\nproblem attempting: diff %s %s\n", cs[0], cs[1]) + fmt.Printf("output: %v\n", string(bs)) + panic(err) + } + cv.So(len(bs), cv.ShouldEqual, 0) + + }) +} + +func TestSnappyFileCompressed(t *testing.T) { + orig := "binary.dat" + compressed := "binary.dat.snappy" + myUncomp := "testout2.unsnap" + + cv.Convey("SnappyFile should read snappy compressed with compressed chunk file.", t, func() { + f, err := Open(compressed) + + out, err := os.Create(myUncomp) + if err != nil { + panic(err) + } + + io.Copy(out, f) + out.Close() + f.Close() + + cs := []string{orig, myUncomp} + cmd := exec.Command("/usr/bin/diff", cs...) + bs, err := cmd.Output() + if err != nil { + fmt.Printf("\nproblem attempting: diff %s %s\n", cs[0], cs[1]) + fmt.Printf("output: %v\n", string(bs)) + panic(err) + } + cv.So(len(bs), cv.ShouldEqual, 0) + + }) +} + +func TestSnappyOnBinaryHardToCompress(t *testing.T) { + + // now we check our Write() method, in snap.go + + orig := "binary.dat" + myCompressed := "testout_binary.dat.snappy" + knownGoodCompressed := "binary.dat.snappy" + + cv.Convey("SnappyFile should write snappy compressed in streaming format, when fed lots of compressing stuff.", t, func() { + + f, err := os.Open(orig) + if err != nil { + panic(err) + } + + out, err := Create(myCompressed) + if err != nil { + panic(err) + } + + io.Copy(out, f) + out.Close() + f.Close() + + cs := []string{knownGoodCompressed, myCompressed} + cmd := exec.Command("/usr/bin/diff", cs...) + bs, err := cmd.Output() + if err != nil { + fmt.Printf("\nproblem attempting: diff %s %s\n", cs[0], cs[1]) + fmt.Printf("output: %v\n", string(bs)) + panic(err) + } + cv.So(len(bs), cv.ShouldEqual, 0) + + }) +} diff --git a/vendor/github.com/golang/protobuf/.travis.yml b/vendor/github.com/golang/protobuf/.travis.yml new file mode 100644 index 0000000..93c6780 --- /dev/null +++ b/vendor/github.com/golang/protobuf/.travis.yml @@ -0,0 +1,18 @@ +sudo: false +language: go +go: +- 1.6.x +- 1.7.x +- 1.8.x +- 1.9.x + +install: + - go get -v -d -t github.com/golang/protobuf/... + - curl -L https://github.com/google/protobuf/releases/download/v3.3.0/protoc-3.3.0-linux-x86_64.zip -o /tmp/protoc.zip + - unzip /tmp/protoc.zip -d $HOME/protoc + +env: + - PATH=$HOME/protoc/bin:$PATH + +script: + - make all test diff --git a/vendor/github.com/golang/protobuf/README.md b/vendor/github.com/golang/protobuf/README.md index aa933d7..9c4c815 100644 --- a/vendor/github.com/golang/protobuf/README.md +++ b/vendor/github.com/golang/protobuf/README.md @@ -1,5 +1,8 @@ # Go support for Protocol Buffers +[![Build Status](https://travis-ci.org/golang/protobuf.svg?branch=master)](https://travis-ci.org/golang/protobuf) +[![GoDoc](https://godoc.org/github.com/golang/protobuf?status.svg)](https://godoc.org/github.com/golang/protobuf) + Google's data interchange format. Copyright 2010 The Go Authors. https://github.com/golang/protobuf @@ -104,12 +107,12 @@ for a protocol buffer variable v: When the .proto file specifies `syntax="proto3"`, there are some differences: - Non-repeated fields of non-message type are values instead of pointers. - - Getters are only generated for message and oneof fields. - Enum types do not get an Enum method. Consider file test.proto, containing ```proto + syntax = "proto2"; package example; enum FOO { X = 17; }; diff --git a/vendor/github.com/golang/protobuf/jsonpb/jsonpb.go b/vendor/github.com/golang/protobuf/jsonpb/jsonpb.go index 6231fb2..110ae13 100644 --- a/vendor/github.com/golang/protobuf/jsonpb/jsonpb.go +++ b/vendor/github.com/golang/protobuf/jsonpb/jsonpb.go @@ -44,6 +44,7 @@ import ( "errors" "fmt" "io" + "math" "reflect" "sort" "strconv" @@ -72,6 +73,31 @@ type Marshaler struct { // Whether to use the original (.proto) name for fields. OrigName bool + + // A custom URL resolver to use when marshaling Any messages to JSON. + // If unset, the default resolution strategy is to extract the + // fully-qualified type name from the type URL and pass that to + // proto.MessageType(string). + AnyResolver AnyResolver +} + +// AnyResolver takes a type URL, present in an Any message, and resolves it into +// an instance of the associated message. +type AnyResolver interface { + Resolve(typeUrl string) (proto.Message, error) +} + +func defaultResolveAny(typeUrl string) (proto.Message, error) { + // Only the part of typeUrl after the last slash is relevant. + mname := typeUrl + if slash := strings.LastIndex(mname, "/"); slash >= 0 { + mname = mname[slash+1:] + } + mt := proto.MessageType(mname) + if mt == nil { + return nil, fmt.Errorf("unknown message type %q", mname) + } + return reflect.New(mt.Elem()).Interface().(proto.Message), nil } // JSONPBMarshaler is implemented by protobuf messages that customize the @@ -107,6 +133,12 @@ func (m *Marshaler) MarshalToString(pb proto.Message) (string, error) { type int32Slice []int32 +var nonFinite = map[string]float64{ + `"NaN"`: math.NaN(), + `"Infinity"`: math.Inf(1), + `"-Infinity"`: math.Inf(-1), +} + // For sorting extensions ids to ensure stable output. func (s int32Slice) Len() int { return len(s) } func (s int32Slice) Less(i, j int) bool { return s[i] < s[j] } @@ -123,6 +155,22 @@ func (m *Marshaler) marshalObject(out *errWriter, v proto.Message, indent, typeU if err != nil { return err } + if typeURL != "" { + // we are marshaling this object to an Any type + var js map[string]*json.RawMessage + if err = json.Unmarshal(b, &js); err != nil { + return fmt.Errorf("type %T produced invalid JSON: %v", v, err) + } + turl, err := json.Marshal(typeURL) + if err != nil { + return fmt.Errorf("failed to marshal type URL %q to JSON: %v", typeURL, err) + } + js["@type"] = (*json.RawMessage)(&turl) + if b, err = json.Marshal(js); err != nil { + return err + } + } + out.write(string(b)) return out.err } @@ -321,16 +369,17 @@ func (m *Marshaler) marshalAny(out *errWriter, any proto.Message, indent string) turl := v.Field(0).String() val := v.Field(1).Bytes() - // Only the part of type_url after the last slash is relevant. - mname := turl - if slash := strings.LastIndex(mname, "/"); slash >= 0 { - mname = mname[slash+1:] + var msg proto.Message + var err error + if m.AnyResolver != nil { + msg, err = m.AnyResolver.Resolve(turl) + } else { + msg, err = defaultResolveAny(turl) } - mt := proto.MessageType(mname) - if mt == nil { - return fmt.Errorf("unknown message type %q", mname) + if err != nil { + return err } - msg := reflect.New(mt.Elem()).Interface().(proto.Message) + if err := proto.Unmarshal(val, msg); err != nil { return err } @@ -402,7 +451,6 @@ func (m *Marshaler) marshalField(out *errWriter, prop *proto.Properties, v refle // marshalValue writes the value to the Writer. func (m *Marshaler) marshalValue(out *errWriter, prop *proto.Properties, v reflect.Value, indent string) error { - var err error v = reflect.Indirect(v) @@ -441,9 +489,6 @@ func (m *Marshaler) marshalValue(out *errWriter, prop *proto.Properties, v refle // Handle well-known types. // Most are handled up in marshalObject (because 99% are messages). - type wkt interface { - XXX_WellKnownType() string - } if wkt, ok := v.Interface().(wkt); ok { switch wkt.XXX_WellKnownType() { case "NullValue": @@ -531,6 +576,24 @@ func (m *Marshaler) marshalValue(out *errWriter, prop *proto.Properties, v refle return out.err } + // Handle non-finite floats, e.g. NaN, Infinity and -Infinity. + if v.Kind() == reflect.Float32 || v.Kind() == reflect.Float64 { + f := v.Float() + var sval string + switch { + case math.IsInf(f, 1): + sval = `"Infinity"` + case math.IsInf(f, -1): + sval = `"-Infinity"` + case math.IsNaN(f): + sval = `"NaN"` + } + if sval != "" { + out.write(sval) + return out.err + } + } + // Default handling defers to the encoding/json library. b, err := json.Marshal(v.Interface()) if err != nil { @@ -553,6 +616,12 @@ type Unmarshaler struct { // Whether to allow messages to contain unknown fields, as opposed to // failing to unmarshal. AllowUnknownFields bool + + // A custom URL resolver to use when unmarshaling Any messages from JSON. + // If unset, the default resolution strategy is to extract the + // fully-qualified type name from the type URL and pass that to + // proto.MessageType(string). + AnyResolver AnyResolver } // UnmarshalNext unmarshals the next protocol buffer from a JSON object stream. @@ -602,7 +671,14 @@ func (u *Unmarshaler) unmarshalValue(target reflect.Value, inputValue json.RawMe // Allocate memory for pointer fields. if targetType.Kind() == reflect.Ptr { + // If input value is "null" and target is a pointer type, then the field should be treated as not set + // UNLESS the target is structpb.Value, in which case it should be set to structpb.NullValue. + _, isJSONPBUnmarshaler := target.Interface().(JSONPBUnmarshaler) + if string(inputValue) == "null" && targetType != reflect.TypeOf(&stpb.Value{}) && !isJSONPBUnmarshaler { + return nil + } target.Set(reflect.New(targetType.Elem())) + return u.unmarshalValue(target.Elem(), inputValue, prop) } @@ -610,54 +686,51 @@ func (u *Unmarshaler) unmarshalValue(target reflect.Value, inputValue json.RawMe return jsu.UnmarshalJSONPB(u, []byte(inputValue)) } - // Handle well-known types. - type wkt interface { - XXX_WellKnownType() string - } + // Handle well-known types that are not pointers. if w, ok := target.Addr().Interface().(wkt); ok { switch w.XXX_WellKnownType() { case "DoubleValue", "FloatValue", "Int64Value", "UInt64Value", "Int32Value", "UInt32Value", "BoolValue", "StringValue", "BytesValue": - // "Wrappers use the same representation in JSON - // as the wrapped primitive type, except that null is allowed." - // encoding/json will turn JSON `null` into Go `nil`, - // so we don't have to do any extra work. return u.unmarshalValue(target.Field(0), inputValue, prop) case "Any": - var jsonFields map[string]json.RawMessage + // Use json.RawMessage pointer type instead of value to support pre-1.8 version. + // 1.8 changed RawMessage.MarshalJSON from pointer type to value type, see + // https://github.com/golang/go/issues/14493 + var jsonFields map[string]*json.RawMessage if err := json.Unmarshal(inputValue, &jsonFields); err != nil { return err } val, ok := jsonFields["@type"] - if !ok { + if !ok || val == nil { return errors.New("Any JSON doesn't have '@type'") } var turl string - if err := json.Unmarshal([]byte(val), &turl); err != nil { - return fmt.Errorf("can't unmarshal Any's '@type': %q", val) + if err := json.Unmarshal([]byte(*val), &turl); err != nil { + return fmt.Errorf("can't unmarshal Any's '@type': %q", *val) } target.Field(0).SetString(turl) - mname := turl - if slash := strings.LastIndex(mname, "/"); slash >= 0 { - mname = mname[slash+1:] + var m proto.Message + var err error + if u.AnyResolver != nil { + m, err = u.AnyResolver.Resolve(turl) + } else { + m, err = defaultResolveAny(turl) } - mt := proto.MessageType(mname) - if mt == nil { - return fmt.Errorf("unknown message type %q", mname) + if err != nil { + return err } - m := reflect.New(mt.Elem()).Interface().(proto.Message) if _, ok := m.(wkt); ok { val, ok := jsonFields["value"] if !ok { return errors.New("Any JSON doesn't have 'value'") } - if err := u.unmarshalValue(reflect.ValueOf(m).Elem(), val, nil); err != nil { - return fmt.Errorf("can't unmarshal Any's WKT: %v", err) + if err := u.unmarshalValue(reflect.ValueOf(m).Elem(), *val, nil); err != nil { + return fmt.Errorf("can't unmarshal Any nested proto %T: %v", m, err) } } else { delete(jsonFields, "@type") @@ -667,33 +740,28 @@ func (u *Unmarshaler) unmarshalValue(target reflect.Value, inputValue json.RawMe } if err = u.unmarshalValue(reflect.ValueOf(m).Elem(), nestedProto, nil); err != nil { - return fmt.Errorf("can't unmarshal nested Any proto: %v", err) + return fmt.Errorf("can't unmarshal Any nested proto %T: %v", m, err) } } b, err := proto.Marshal(m) if err != nil { - return fmt.Errorf("can't marshal proto into Any.Value: %v", err) + return fmt.Errorf("can't marshal proto %T into Any.Value: %v", m, err) } target.Field(1).SetBytes(b) return nil case "Duration": - ivStr := string(inputValue) - if ivStr == "null" { - target.Field(0).SetInt(0) - target.Field(1).SetInt(0) - return nil - } - - unq, err := strconv.Unquote(ivStr) + unq, err := strconv.Unquote(string(inputValue)) if err != nil { return err } + d, err := time.ParseDuration(unq) if err != nil { return fmt.Errorf("bad Duration: %v", err) } + ns := d.Nanoseconds() s := ns / 1e9 ns %= 1e9 @@ -701,33 +769,25 @@ func (u *Unmarshaler) unmarshalValue(target reflect.Value, inputValue json.RawMe target.Field(1).SetInt(ns) return nil case "Timestamp": - ivStr := string(inputValue) - if ivStr == "null" { - target.Field(0).SetInt(0) - target.Field(1).SetInt(0) - return nil - } - - unq, err := strconv.Unquote(ivStr) + unq, err := strconv.Unquote(string(inputValue)) if err != nil { return err } + t, err := time.Parse(time.RFC3339Nano, unq) if err != nil { return fmt.Errorf("bad Timestamp: %v", err) } - target.Field(0).SetInt(int64(t.Unix())) + + target.Field(0).SetInt(t.Unix()) target.Field(1).SetInt(int64(t.Nanosecond())) return nil case "Struct": - if string(inputValue) == "null" { - // Interpret a null struct as empty. - return nil - } var m map[string]json.RawMessage if err := json.Unmarshal(inputValue, &m); err != nil { return fmt.Errorf("bad StructValue: %v", err) } + target.Field(0).Set(reflect.ValueOf(map[string]*stpb.Value{})) for k, jv := range m { pv := &stpb.Value{} @@ -738,14 +798,11 @@ func (u *Unmarshaler) unmarshalValue(target reflect.Value, inputValue json.RawMe } return nil case "ListValue": - if string(inputValue) == "null" { - // Interpret a null ListValue as empty. - return nil - } var s []json.RawMessage if err := json.Unmarshal(inputValue, &s); err != nil { return fmt.Errorf("bad ListValue: %v", err) } + target.Field(0).Set(reflect.ValueOf(make([]*stpb.Value, len(s), len(s)))) for i, sv := range s { if err := u.unmarshalValue(target.Field(0).Index(i), sv, prop); err != nil { @@ -896,11 +953,13 @@ func (u *Unmarshaler) unmarshalValue(target reflect.Value, inputValue json.RawMe if err := json.Unmarshal(inputValue, &slc); err != nil { return err } - len := len(slc) - target.Set(reflect.MakeSlice(targetType, len, len)) - for i := 0; i < len; i++ { - if err := u.unmarshalValue(target.Index(i), slc[i], prop); err != nil { - return err + if slc != nil { + l := len(slc) + target.Set(reflect.MakeSlice(targetType, l, l)) + for i := 0; i < l; i++ { + if err := u.unmarshalValue(target.Index(i), slc[i], prop); err != nil { + return err + } } } return nil @@ -912,33 +971,35 @@ func (u *Unmarshaler) unmarshalValue(target reflect.Value, inputValue json.RawMe if err := json.Unmarshal(inputValue, &mp); err != nil { return err } - target.Set(reflect.MakeMap(targetType)) - var keyprop, valprop *proto.Properties - if prop != nil { - // These could still be nil if the protobuf metadata is broken somehow. - // TODO: This won't work because the fields are unexported. - // We should probably just reparse them. - //keyprop, valprop = prop.mkeyprop, prop.mvalprop - } - for ks, raw := range mp { - // Unmarshal map key. The core json library already decoded the key into a - // string, so we handle that specially. Other types were quoted post-serialization. - var k reflect.Value - if targetType.Key().Kind() == reflect.String { - k = reflect.ValueOf(ks) - } else { - k = reflect.New(targetType.Key()).Elem() - if err := u.unmarshalValue(k, json.RawMessage(ks), keyprop); err != nil { - return err - } + if mp != nil { + target.Set(reflect.MakeMap(targetType)) + var keyprop, valprop *proto.Properties + if prop != nil { + // These could still be nil if the protobuf metadata is broken somehow. + // TODO: This won't work because the fields are unexported. + // We should probably just reparse them. + //keyprop, valprop = prop.mkeyprop, prop.mvalprop } + for ks, raw := range mp { + // Unmarshal map key. The core json library already decoded the key into a + // string, so we handle that specially. Other types were quoted post-serialization. + var k reflect.Value + if targetType.Key().Kind() == reflect.String { + k = reflect.ValueOf(ks) + } else { + k = reflect.New(targetType.Key()).Elem() + if err := u.unmarshalValue(k, json.RawMessage(ks), keyprop); err != nil { + return err + } + } - // Unmarshal map value. - v := reflect.New(targetType.Elem()).Elem() - if err := u.unmarshalValue(v, raw, valprop); err != nil { - return err + // Unmarshal map value. + v := reflect.New(targetType.Elem()).Elem() + if err := u.unmarshalValue(v, raw, valprop); err != nil { + return err + } + target.SetMapIndex(k, v) } - target.SetMapIndex(k, v) } return nil } @@ -950,6 +1011,15 @@ func (u *Unmarshaler) unmarshalValue(target reflect.Value, inputValue json.RawMe inputValue = inputValue[1 : len(inputValue)-1] } + // Non-finite numbers can be encoded as strings. + isFloat := targetType.Kind() == reflect.Float32 || targetType.Kind() == reflect.Float64 + if isFloat { + if num, ok := nonFinite[string(inputValue)]; ok { + target.SetFloat(num) + return nil + } + } + // Use the encoding/json for parsing other value types. return json.Unmarshal(inputValue, target.Addr().Interface()) } diff --git a/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test.go b/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test.go index 4a13fda..2428d05 100644 --- a/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test.go +++ b/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test.go @@ -35,6 +35,7 @@ import ( "bytes" "encoding/json" "io" + "math" "reflect" "strings" "testing" @@ -43,6 +44,7 @@ import ( pb "github.com/golang/protobuf/jsonpb/jsonpb_test_proto" proto3pb "github.com/golang/protobuf/proto/proto3_proto" + "github.com/golang/protobuf/ptypes" anypb "github.com/golang/protobuf/ptypes/any" durpb "github.com/golang/protobuf/ptypes/duration" stpb "github.com/golang/protobuf/ptypes/struct" @@ -307,6 +309,23 @@ var ( "value": "1.212s" } }` + + nonFinites = &pb.NonFinites{ + FNan: proto.Float32(float32(math.NaN())), + FPinf: proto.Float32(float32(math.Inf(1))), + FNinf: proto.Float32(float32(math.Inf(-1))), + DNan: proto.Float64(float64(math.NaN())), + DPinf: proto.Float64(float64(math.Inf(1))), + DNinf: proto.Float64(float64(math.Inf(-1))), + } + nonFinitesJSON = `{` + + `"fNan":"NaN",` + + `"fPinf":"Infinity",` + + `"fNinf":"-Infinity",` + + `"dNan":"NaN",` + + `"dPinf":"Infinity",` + + `"dNinf":"-Infinity"` + + `}` ) func init() { @@ -326,6 +345,7 @@ var marshalingTests = []struct { }{ {"simple flat object", marshaler, simpleObject, simpleObjectJSON}, {"simple pretty object", marshalerAllOptions, simpleObject, simpleObjectPrettyJSON}, + {"non-finite floats fields object", marshaler, nonFinites, nonFinitesJSON}, {"repeated fields flat object", marshaler, repeatsObject, repeatsObjectJSON}, {"repeated fields pretty object", marshalerAllOptions, repeatsObject, repeatsObjectPrettyJSON}, {"nested message/enum flat object", marshaler, complexObject, complexObjectJSON}, @@ -359,9 +379,9 @@ var marshalingTests = []struct { &pb.Mappy{Strry: map[string]string{`"one"`: "two", "three": "four"}}, `{"strry":{"\"one\"":"two","three":"four"}}`}, {"map", marshaler, - &pb.Mappy{Objjy: map[int32]*pb.Simple3{1: &pb.Simple3{Dub: 1}}}, `{"objjy":{"1":{"dub":1}}}`}, + &pb.Mappy{Objjy: map[int32]*pb.Simple3{1: {Dub: 1}}}, `{"objjy":{"1":{"dub":1}}}`}, {"map", marshalerAllOptions, - &pb.Mappy{Objjy: map[int32]*pb.Simple3{1: &pb.Simple3{Dub: 1}}}, objjyPrettyJSON}, + &pb.Mappy{Objjy: map[int32]*pb.Simple3{1: {Dub: 1}}}, objjyPrettyJSON}, {"map", marshaler, &pb.Mappy{Buggy: map[int64]string{1234: "yup"}}, `{"buggy":{"1234":"yup"}}`}, {"map", marshaler, &pb.Mappy{Booly: map[bool]bool{false: true}}, `{"booly":{"false":true}}`}, @@ -375,7 +395,7 @@ var marshalingTests = []struct { {"proto2 map", marshaler, &pb.Maps{MInt64Str: map[int64]string{213: "cat"}}, `{"mInt64Str":{"213":"cat"}}`}, {"proto2 map", marshaler, - &pb.Maps{MBoolSimple: map[bool]*pb.Simple{true: &pb.Simple{OInt32: proto.Int32(1)}}}, + &pb.Maps{MBoolSimple: map[bool]*pb.Simple{true: {OInt32: proto.Int32(1)}}}, `{"mBoolSimple":{"true":{"oInt32":1}}}`}, {"oneof, not set", marshaler, &pb.MsgWithOneof{}, `{}`}, {"oneof, set", marshaler, &pb.MsgWithOneof{Union: &pb.MsgWithOneof_Title{"Grand Poobah"}}, `{"title":"Grand Poobah"}`}, @@ -442,7 +462,7 @@ func TestMarshaling(t *testing.T) { } } -func TestMarshalingWithJSONPBMarshaler(t *testing.T) { +func TestMarshalJSONPBMarshaler(t *testing.T) { rawJson := `{ "foo": "bar", "baz": [0, 1, 2, 3] }` msg := dynamicMessage{rawJson: rawJson} str, err := new(Marshaler).MarshalToString(&msg) @@ -454,6 +474,24 @@ func TestMarshalingWithJSONPBMarshaler(t *testing.T) { } } +func TestMarshalAnyJSONPBMarshaler(t *testing.T) { + msg := dynamicMessage{rawJson: `{ "foo": "bar", "baz": [0, 1, 2, 3] }`} + a, err := ptypes.MarshalAny(&msg) + if err != nil { + t.Errorf("an unexpected error occurred when marshalling to Any: %v", err) + } + str, err := new(Marshaler).MarshalToString(a) + if err != nil { + t.Errorf("an unexpected error occurred when marshalling Any to JSON: %v", err) + } + // after custom marshaling, it's round-tripped through JSON decoding/encoding already, + // so the keys are sorted, whitespace is compacted, and "@type" key has been added + expected := `{"@type":"type.googleapis.com/` + dynamicMessageName + `","baz":[0,1,2,3],"foo":"bar"}` + if str != expected { + t.Errorf("marshalling JSON produced incorrect output: got %s, wanted %s", str, expected) + } +} + var unmarshalingTests = []struct { desc string unmarshaler Unmarshaler @@ -492,9 +530,12 @@ var unmarshalingTests = []struct { }}}, {"unquoted int64 object", Unmarshaler{}, `{"oInt64":-314}`, &pb.Simple{OInt64: proto.Int64(-314)}}, {"unquoted uint64 object", Unmarshaler{}, `{"oUint64":123}`, &pb.Simple{OUint64: proto.Uint64(123)}}, + {"NaN", Unmarshaler{}, `{"oDouble":"NaN"}`, &pb.Simple{ODouble: proto.Float64(math.NaN())}}, + {"Inf", Unmarshaler{}, `{"oFloat":"Infinity"}`, &pb.Simple{OFloat: proto.Float32(float32(math.Inf(1)))}}, + {"-Inf", Unmarshaler{}, `{"oDouble":"-Infinity"}`, &pb.Simple{ODouble: proto.Float64(math.Inf(-1))}}, {"map", Unmarshaler{}, `{"nummy":{"1":2,"3":4}}`, &pb.Mappy{Nummy: map[int64]int32{1: 2, 3: 4}}}, {"map", Unmarshaler{}, `{"strry":{"\"one\"":"two","three":"four"}}`, &pb.Mappy{Strry: map[string]string{`"one"`: "two", "three": "four"}}}, - {"map", Unmarshaler{}, `{"objjy":{"1":{"dub":1}}}`, &pb.Mappy{Objjy: map[int32]*pb.Simple3{1: &pb.Simple3{Dub: 1}}}}, + {"map", Unmarshaler{}, `{"objjy":{"1":{"dub":1}}}`, &pb.Mappy{Objjy: map[int32]*pb.Simple3{1: {Dub: 1}}}}, {"proto2 extension", Unmarshaler{}, realNumberJSON, realNumber}, {"Any with message", Unmarshaler{}, anySimpleJSON, anySimple}, {"Any with message and indent", Unmarshaler{}, anySimplePrettyJSON, anySimple}, @@ -512,12 +553,12 @@ var unmarshalingTests = []struct { {"camelName input", Unmarshaler{}, `{"oBool":true}`, &pb.Simple{OBool: proto.Bool(true)}}, {"Duration", Unmarshaler{}, `{"dur":"3.000s"}`, &pb.KnownTypes{Dur: &durpb.Duration{Seconds: 3}}}, - {"null Duration", Unmarshaler{}, `{"dur":null}`, &pb.KnownTypes{Dur: &durpb.Duration{Seconds: 0}}}, + {"null Duration", Unmarshaler{}, `{"dur":null}`, &pb.KnownTypes{Dur: nil}}, {"Timestamp", Unmarshaler{}, `{"ts":"2014-05-13T16:53:20.021Z"}`, &pb.KnownTypes{Ts: &tspb.Timestamp{Seconds: 14e8, Nanos: 21e6}}}, {"PreEpochTimestamp", Unmarshaler{}, `{"ts":"1969-12-31T23:59:58.999999995Z"}`, &pb.KnownTypes{Ts: &tspb.Timestamp{Seconds: -2, Nanos: 999999995}}}, {"ZeroTimeTimestamp", Unmarshaler{}, `{"ts":"0001-01-01T00:00:00Z"}`, &pb.KnownTypes{Ts: &tspb.Timestamp{Seconds: -62135596800, Nanos: 0}}}, - {"null Timestamp", Unmarshaler{}, `{"ts":null}`, &pb.KnownTypes{Ts: &tspb.Timestamp{Seconds: 0, Nanos: 0}}}, - {"null Struct", Unmarshaler{}, `{"st": null}`, &pb.KnownTypes{St: &stpb.Struct{}}}, + {"null Timestamp", Unmarshaler{}, `{"ts":null}`, &pb.KnownTypes{Ts: nil}}, + {"null Struct", Unmarshaler{}, `{"st": null}`, &pb.KnownTypes{St: nil}}, {"empty Struct", Unmarshaler{}, `{"st": {}}`, &pb.KnownTypes{St: &stpb.Struct{}}}, {"basic Struct", Unmarshaler{}, `{"st": {"a": "x", "b": null, "c": 3, "d": true}}`, &pb.KnownTypes{St: &stpb.Struct{Fields: map[string]*stpb.Value{ "a": {Kind: &stpb.Value_StringValue{"x"}}, @@ -534,7 +575,7 @@ var unmarshalingTests = []struct { }}}}, }}}}, }}}}, - {"null ListValue", Unmarshaler{}, `{"lv": null}`, &pb.KnownTypes{Lv: &stpb.ListValue{}}}, + {"null ListValue", Unmarshaler{}, `{"lv": null}`, &pb.KnownTypes{Lv: nil}}, {"empty ListValue", Unmarshaler{}, `{"lv": []}`, &pb.KnownTypes{Lv: &stpb.ListValue{}}}, {"basic ListValue", Unmarshaler{}, `{"lv": ["x", null, 3, true]}`, &pb.KnownTypes{Lv: &stpb.ListValue{Values: []*stpb.Value{ {Kind: &stpb.Value_StringValue{"x"}}, @@ -571,8 +612,17 @@ var unmarshalingTests = []struct { {"BoolValue", Unmarshaler{}, `{"bool":true}`, &pb.KnownTypes{Bool: &wpb.BoolValue{Value: true}}}, {"StringValue", Unmarshaler{}, `{"str":"plush"}`, &pb.KnownTypes{Str: &wpb.StringValue{Value: "plush"}}}, {"BytesValue", Unmarshaler{}, `{"bytes":"d293"}`, &pb.KnownTypes{Bytes: &wpb.BytesValue{Value: []byte("wow")}}}, - // `null` is also a permissible value. Let's just test one. - {"null DoubleValue", Unmarshaler{}, `{"dbl":null}`, &pb.KnownTypes{Dbl: &wpb.DoubleValue{}}}, + + // Ensure that `null` as a value ends up with a nil pointer instead of a [type]Value struct. + {"null DoubleValue", Unmarshaler{}, `{"dbl":null}`, &pb.KnownTypes{Dbl: nil}}, + {"null FloatValue", Unmarshaler{}, `{"flt":null}`, &pb.KnownTypes{Flt: nil}}, + {"null Int64Value", Unmarshaler{}, `{"i64":null}`, &pb.KnownTypes{I64: nil}}, + {"null UInt64Value", Unmarshaler{}, `{"u64":null}`, &pb.KnownTypes{U64: nil}}, + {"null Int32Value", Unmarshaler{}, `{"i32":null}`, &pb.KnownTypes{I32: nil}}, + {"null UInt32Value", Unmarshaler{}, `{"u32":null}`, &pb.KnownTypes{U32: nil}}, + {"null BoolValue", Unmarshaler{}, `{"bool":null}`, &pb.KnownTypes{Bool: nil}}, + {"null StringValue", Unmarshaler{}, `{"str":null}`, &pb.KnownTypes{Str: nil}}, + {"null BytesValue", Unmarshaler{}, `{"bytes":null}`, &pb.KnownTypes{Bytes: nil}}, } func TestUnmarshaling(t *testing.T) { @@ -595,6 +645,26 @@ func TestUnmarshaling(t *testing.T) { } } +func TestUnmarshalNullArray(t *testing.T) { + var repeats pb.Repeats + if err := UnmarshalString(`{"rBool":null}`, &repeats); err != nil { + t.Fatal(err) + } + if !reflect.DeepEqual(repeats, pb.Repeats{}) { + t.Errorf("got non-nil fields in [%#v]", repeats) + } +} + +func TestUnmarshalNullObject(t *testing.T) { + var maps pb.Maps + if err := UnmarshalString(`{"mInt64Str":null}`, &maps); err != nil { + t.Fatal(err) + } + if !reflect.DeepEqual(maps, pb.Maps{}) { + t.Errorf("got non-nil fields in [%#v]", maps) + } +} + func TestUnmarshalNext(t *testing.T) { // We only need to check against a few, not all of them. tests := unmarshalingTests[:5] @@ -651,11 +721,69 @@ func TestUnmarshalingBadInput(t *testing.T) { } } -func TestUnmarshalWithJSONPBUnmarshaler(t *testing.T) { +type funcResolver func(turl string) (proto.Message, error) + +func (fn funcResolver) Resolve(turl string) (proto.Message, error) { + return fn(turl) +} + +func TestAnyWithCustomResolver(t *testing.T) { + var resolvedTypeUrls []string + resolver := funcResolver(func(turl string) (proto.Message, error) { + resolvedTypeUrls = append(resolvedTypeUrls, turl) + return new(pb.Simple), nil + }) + msg := &pb.Simple{ + OBytes: []byte{1, 2, 3, 4}, + OBool: proto.Bool(true), + OString: proto.String("foobar"), + OInt64: proto.Int64(1020304), + } + msgBytes, err := proto.Marshal(msg) + if err != nil { + t.Errorf("an unexpected error occurred when marshaling message: %v", err) + } + // make an Any with a type URL that won't resolve w/out custom resolver + any := &anypb.Any{ + TypeUrl: "https://foobar.com/some.random.MessageKind", + Value: msgBytes, + } + + m := Marshaler{AnyResolver: resolver} + js, err := m.MarshalToString(any) + if err != nil { + t.Errorf("an unexpected error occurred when marshaling any to JSON: %v", err) + } + if len(resolvedTypeUrls) != 1 { + t.Errorf("custom resolver was not invoked during marshaling") + } else if resolvedTypeUrls[0] != "https://foobar.com/some.random.MessageKind" { + t.Errorf("custom resolver was invoked with wrong URL: got %q, wanted %q", resolvedTypeUrls[0], "https://foobar.com/some.random.MessageKind") + } + wanted := `{"@type":"https://foobar.com/some.random.MessageKind","oBool":true,"oInt64":"1020304","oString":"foobar","oBytes":"AQIDBA=="}` + if js != wanted { + t.Errorf("marshalling JSON produced incorrect output: got %s, wanted %s", js, wanted) + } + + u := Unmarshaler{AnyResolver: resolver} + roundTrip := &anypb.Any{} + err = u.Unmarshal(bytes.NewReader([]byte(js)), roundTrip) + if err != nil { + t.Errorf("an unexpected error occurred when unmarshaling any from JSON: %v", err) + } + if len(resolvedTypeUrls) != 2 { + t.Errorf("custom resolver was not invoked during marshaling") + } else if resolvedTypeUrls[1] != "https://foobar.com/some.random.MessageKind" { + t.Errorf("custom resolver was invoked with wrong URL: got %q, wanted %q", resolvedTypeUrls[1], "https://foobar.com/some.random.MessageKind") + } + if !proto.Equal(any, roundTrip) { + t.Errorf("message contents not set correctly after unmarshalling JSON: got %s, wanted %s", roundTrip, any) + } +} + +func TestUnmarshalJSONPBUnmarshaler(t *testing.T) { rawJson := `{ "foo": "bar", "baz": [0, 1, 2, 3] }` var msg dynamicMessage - err := Unmarshal(strings.NewReader(rawJson), &msg) - if err != nil { + if err := Unmarshal(strings.NewReader(rawJson), &msg); err != nil { t.Errorf("an unexpected error occurred when parsing into JSONPBUnmarshaler: %v", err) } if msg.rawJson != rawJson { @@ -663,10 +791,88 @@ func TestUnmarshalWithJSONPBUnmarshaler(t *testing.T) { } } +func TestUnmarshalNullWithJSONPBUnmarshaler(t *testing.T) { + rawJson := `{"stringField":null}` + var ptrFieldMsg ptrFieldMessage + if err := Unmarshal(strings.NewReader(rawJson), &ptrFieldMsg); err != nil { + t.Errorf("unmarshal error: %v", err) + } + + want := ptrFieldMessage{StringField: &stringField{IsSet: true, StringValue: "null"}} + if !proto.Equal(&ptrFieldMsg, &want) { + t.Errorf("unmarshal result StringField: got %v, want %v", ptrFieldMsg, want) + } +} + +func TestUnmarshalAnyJSONPBUnmarshaler(t *testing.T) { + rawJson := `{ "@type": "blah.com/` + dynamicMessageName + `", "foo": "bar", "baz": [0, 1, 2, 3] }` + var got anypb.Any + if err := Unmarshal(strings.NewReader(rawJson), &got); err != nil { + t.Errorf("an unexpected error occurred when parsing into JSONPBUnmarshaler: %v", err) + } + + dm := &dynamicMessage{rawJson: `{"baz":[0,1,2,3],"foo":"bar"}`} + var want anypb.Any + if b, err := proto.Marshal(dm); err != nil { + t.Errorf("an unexpected error occurred when marshaling message: %v", err) + } else { + want.TypeUrl = "blah.com/" + dynamicMessageName + want.Value = b + } + + if !proto.Equal(&got, &want) { + t.Errorf("message contents not set correctly after unmarshalling JSON: got %s, wanted %s", got, want) + } +} + +const ( + dynamicMessageName = "google.protobuf.jsonpb.testing.dynamicMessage" +) + +func init() { + // we register the custom type below so that we can use it in Any types + proto.RegisterType((*dynamicMessage)(nil), dynamicMessageName) +} + +type ptrFieldMessage struct { + StringField *stringField `protobuf:"bytes,1,opt,name=stringField"` +} + +func (m *ptrFieldMessage) Reset() { +} + +func (m *ptrFieldMessage) String() string { + return m.StringField.StringValue +} + +func (m *ptrFieldMessage) ProtoMessage() { +} + +type stringField struct { + IsSet bool `protobuf:"varint,1,opt,name=isSet"` + StringValue string `protobuf:"bytes,2,opt,name=stringValue"` +} + +func (s *stringField) Reset() { +} + +func (s *stringField) String() string { + return s.StringValue +} + +func (s *stringField) ProtoMessage() { +} + +func (s *stringField) UnmarshalJSONPB(jum *Unmarshaler, js []byte) error { + s.IsSet = true + s.StringValue = string(js) + return nil +} + // dynamicMessage implements protobuf.Message but is not a normal generated message type. // It provides implementations of JSONPBMarshaler and JSONPBUnmarshaler for JSON support. type dynamicMessage struct { - rawJson string + rawJson string `protobuf:"bytes,1,opt,name=rawJson"` } func (m *dynamicMessage) Reset() { @@ -684,7 +890,7 @@ func (m *dynamicMessage) MarshalJSONPB(jm *Marshaler) ([]byte, error) { return []byte(m.rawJson), nil } -func (m *dynamicMessage) UnmarshalJSONPB(jum *Unmarshaler, json []byte) error { - m.rawJson = string(json) +func (m *dynamicMessage) UnmarshalJSONPB(jum *Unmarshaler, js []byte) error { + m.rawJson = string(js) return nil } diff --git a/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.pb.go b/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.pb.go index d183384..ebb180e 100644 --- a/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.pb.go +++ b/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.pb.go @@ -15,6 +15,7 @@ It has these top-level messages: SimpleNull3 Mappy Simple + NonFinites Repeats Widget Maps diff --git a/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.pb.go b/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.pb.go index a95f947..d413d74 100644 --- a/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.pb.go +++ b/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.pb.go @@ -52,7 +52,7 @@ func (x *Widget_Color) UnmarshalJSON(data []byte) error { *x = Widget_Color(value) return nil } -func (Widget_Color) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{2, 0} } +func (Widget_Color) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{3, 0} } // Test message for holding primitive types. type Simple struct { @@ -152,6 +152,64 @@ func (m *Simple) GetOBytes() []byte { return nil } +// Test message for holding special non-finites primitives. +type NonFinites struct { + FNan *float32 `protobuf:"fixed32,1,opt,name=f_nan,json=fNan" json:"f_nan,omitempty"` + FPinf *float32 `protobuf:"fixed32,2,opt,name=f_pinf,json=fPinf" json:"f_pinf,omitempty"` + FNinf *float32 `protobuf:"fixed32,3,opt,name=f_ninf,json=fNinf" json:"f_ninf,omitempty"` + DNan *float64 `protobuf:"fixed64,4,opt,name=d_nan,json=dNan" json:"d_nan,omitempty"` + DPinf *float64 `protobuf:"fixed64,5,opt,name=d_pinf,json=dPinf" json:"d_pinf,omitempty"` + DNinf *float64 `protobuf:"fixed64,6,opt,name=d_ninf,json=dNinf" json:"d_ninf,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *NonFinites) Reset() { *m = NonFinites{} } +func (m *NonFinites) String() string { return proto.CompactTextString(m) } +func (*NonFinites) ProtoMessage() {} +func (*NonFinites) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +func (m *NonFinites) GetFNan() float32 { + if m != nil && m.FNan != nil { + return *m.FNan + } + return 0 +} + +func (m *NonFinites) GetFPinf() float32 { + if m != nil && m.FPinf != nil { + return *m.FPinf + } + return 0 +} + +func (m *NonFinites) GetFNinf() float32 { + if m != nil && m.FNinf != nil { + return *m.FNinf + } + return 0 +} + +func (m *NonFinites) GetDNan() float64 { + if m != nil && m.DNan != nil { + return *m.DNan + } + return 0 +} + +func (m *NonFinites) GetDPinf() float64 { + if m != nil && m.DPinf != nil { + return *m.DPinf + } + return 0 +} + +func (m *NonFinites) GetDNinf() float64 { + if m != nil && m.DNinf != nil { + return *m.DNinf + } + return 0 +} + // Test message for holding repeated primitives. type Repeats struct { RBool []bool `protobuf:"varint,1,rep,name=r_bool,json=rBool" json:"r_bool,omitempty"` @@ -171,7 +229,7 @@ type Repeats struct { func (m *Repeats) Reset() { *m = Repeats{} } func (m *Repeats) String() string { return proto.CompactTextString(m) } func (*Repeats) ProtoMessage() {} -func (*Repeats) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } +func (*Repeats) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } func (m *Repeats) GetRBool() []bool { if m != nil { @@ -264,7 +322,7 @@ type Widget struct { func (m *Widget) Reset() { *m = Widget{} } func (m *Widget) String() string { return proto.CompactTextString(m) } func (*Widget) ProtoMessage() {} -func (*Widget) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } +func (*Widget) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } func (m *Widget) GetColor() Widget_Color { if m != nil && m.Color != nil { @@ -317,7 +375,7 @@ type Maps struct { func (m *Maps) Reset() { *m = Maps{} } func (m *Maps) String() string { return proto.CompactTextString(m) } func (*Maps) ProtoMessage() {} -func (*Maps) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } +func (*Maps) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } func (m *Maps) GetMInt64Str() map[int64]string { if m != nil { @@ -346,7 +404,7 @@ type MsgWithOneof struct { func (m *MsgWithOneof) Reset() { *m = MsgWithOneof{} } func (m *MsgWithOneof) String() string { return proto.CompactTextString(m) } func (*MsgWithOneof) ProtoMessage() {} -func (*MsgWithOneof) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } +func (*MsgWithOneof) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } type isMsgWithOneof_Union interface { isMsgWithOneof_Union() @@ -509,7 +567,7 @@ type Real struct { func (m *Real) Reset() { *m = Real{} } func (m *Real) String() string { return proto.CompactTextString(m) } func (*Real) ProtoMessage() {} -func (*Real) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } +func (*Real) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } var extRange_Real = []proto.ExtensionRange{ {100, 536870911}, @@ -535,7 +593,7 @@ type Complex struct { func (m *Complex) Reset() { *m = Complex{} } func (m *Complex) String() string { return proto.CompactTextString(m) } func (*Complex) ProtoMessage() {} -func (*Complex) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } +func (*Complex) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} } var extRange_Complex = []proto.ExtensionRange{ {100, 536870911}, @@ -583,7 +641,7 @@ type KnownTypes struct { func (m *KnownTypes) Reset() { *m = KnownTypes{} } func (m *KnownTypes) String() string { return proto.CompactTextString(m) } func (*KnownTypes) ProtoMessage() {} -func (*KnownTypes) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} } +func (*KnownTypes) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} } func (m *KnownTypes) GetAn() *google_protobuf.Any { if m != nil { @@ -701,6 +759,7 @@ var E_Name = &proto.ExtensionDesc{ func init() { proto.RegisterType((*Simple)(nil), "jsonpb.Simple") + proto.RegisterType((*NonFinites)(nil), "jsonpb.NonFinites") proto.RegisterType((*Repeats)(nil), "jsonpb.Repeats") proto.RegisterType((*Widget)(nil), "jsonpb.Widget") proto.RegisterType((*Maps)(nil), "jsonpb.Maps") @@ -716,73 +775,78 @@ func init() { func init() { proto.RegisterFile("test_objects.proto", fileDescriptor1) } var fileDescriptor1 = []byte{ - // 1085 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x95, 0xd1, 0x72, 0xdb, 0x44, - 0x17, 0xc7, 0x2b, 0xc9, 0x92, 0xed, 0x75, 0x9a, 0xfa, 0xdb, 0x49, 0x5b, 0xc5, 0x5f, 0x00, 0x8d, - 0x29, 0x45, 0x14, 0xea, 0x0e, 0x8a, 0xc7, 0xc3, 0x14, 0x6e, 0x92, 0xc6, 0x50, 0x86, 0xa6, 0xcc, - 0x6c, 0x1a, 0x7a, 0xe9, 0x91, 0xe3, 0x8d, 0xab, 0x22, 0x6b, 0x3d, 0xbb, 0xab, 0xa4, 0x1e, 0xb8, - 0xc8, 0x35, 0xd7, 0xbc, 0x02, 0x3c, 0x02, 0x17, 0x3c, 0x1d, 0x73, 0xce, 0x4a, 0x56, 0x62, 0xc7, - 0x57, 0xf1, 0xd1, 0xf9, 0x9f, 0x7f, 0x76, 0x7f, 0x7b, 0x76, 0x0f, 0xa1, 0x9a, 0x2b, 0x3d, 0x12, - 0xe3, 0xf7, 0xfc, 0x4c, 0xab, 0xde, 0x5c, 0x0a, 0x2d, 0xa8, 0xf7, 0x5e, 0x89, 0x6c, 0x3e, 0xee, - 0xec, 0x4e, 0x85, 0x98, 0xa6, 0xfc, 0x19, 0x7e, 0x1d, 0xe7, 0xe7, 0xcf, 0xe2, 0x6c, 0x61, 0x24, - 0x9d, 0x8f, 0x57, 0x53, 0x93, 0x5c, 0xc6, 0x3a, 0x11, 0x59, 0x91, 0xdf, 0x5b, 0xcd, 0x2b, 0x2d, - 0xf3, 0x33, 0x5d, 0x64, 0x3f, 0x59, 0xcd, 0xea, 0x64, 0xc6, 0x95, 0x8e, 0x67, 0xf3, 0x4d, 0xf6, - 0x97, 0x32, 0x9e, 0xcf, 0xb9, 0x2c, 0x56, 0xd8, 0xfd, 0xcb, 0x26, 0xde, 0x49, 0x32, 0x9b, 0xa7, - 0x9c, 0xde, 0x27, 0x9e, 0x18, 0x8d, 0x85, 0x48, 0x7d, 0x2b, 0xb0, 0xc2, 0x06, 0x73, 0xc5, 0xa1, - 0x10, 0x29, 0x7d, 0x48, 0xea, 0x62, 0x94, 0x64, 0x7a, 0x3f, 0xf2, 0xed, 0xc0, 0x0a, 0x5d, 0xe6, - 0x89, 0x1f, 0x21, 0x5a, 0x26, 0x06, 0x7d, 0xdf, 0x09, 0xac, 0xd0, 0x31, 0x89, 0x41, 0x9f, 0xee, - 0x92, 0x86, 0x18, 0xe5, 0xa6, 0xa4, 0x16, 0x58, 0xe1, 0x5d, 0x56, 0x17, 0xa7, 0x18, 0x56, 0xa9, - 0x41, 0xdf, 0x77, 0x03, 0x2b, 0xac, 0x15, 0xa9, 0xb2, 0x4a, 0x99, 0x2a, 0x2f, 0xb0, 0xc2, 0xff, - 0xb1, 0xba, 0x38, 0xb9, 0x56, 0xa5, 0x4c, 0x55, 0x3d, 0xb0, 0x42, 0x5a, 0xa4, 0x06, 0x7d, 0xb3, - 0x88, 0xf3, 0x54, 0xc4, 0xda, 0x6f, 0x04, 0x56, 0x68, 0x33, 0x4f, 0x7c, 0x0f, 0x91, 0xa9, 0x99, - 0x88, 0x7c, 0x9c, 0x72, 0xbf, 0x19, 0x58, 0xa1, 0xc5, 0xea, 0xe2, 0x08, 0xc3, 0xc2, 0x4e, 0xcb, - 0x24, 0x9b, 0xfa, 0x24, 0xb0, 0xc2, 0x26, 0xd8, 0x61, 0x68, 0xec, 0xc6, 0x0b, 0xcd, 0x95, 0xdf, - 0x0a, 0xac, 0x70, 0x8b, 0x79, 0xe2, 0x10, 0xa2, 0xee, 0xdf, 0x36, 0xa9, 0x33, 0x3e, 0xe7, 0xb1, - 0x56, 0x00, 0x4a, 0x96, 0xa0, 0x1c, 0x00, 0x25, 0x4b, 0x50, 0x72, 0x09, 0xca, 0x01, 0x50, 0x72, - 0x09, 0x4a, 0x2e, 0x41, 0x39, 0x00, 0x4a, 0x2e, 0x41, 0xc9, 0x0a, 0x94, 0x03, 0xa0, 0x64, 0x05, - 0x4a, 0x56, 0xa0, 0x1c, 0x00, 0x25, 0x2b, 0x50, 0xb2, 0x02, 0xe5, 0x00, 0x28, 0x79, 0x72, 0xad, - 0x6a, 0x09, 0xca, 0x01, 0x50, 0xb2, 0x02, 0x25, 0x97, 0xa0, 0x1c, 0x00, 0x25, 0x97, 0xa0, 0x64, - 0x05, 0xca, 0x01, 0x50, 0xb2, 0x02, 0x25, 0x2b, 0x50, 0x0e, 0x80, 0x92, 0x15, 0x28, 0xb9, 0x04, - 0xe5, 0x00, 0x28, 0x69, 0x40, 0xfd, 0x63, 0x13, 0xef, 0x6d, 0x32, 0x99, 0x72, 0x4d, 0x9f, 0x10, - 0xf7, 0x4c, 0xa4, 0x42, 0x62, 0x3f, 0x6d, 0x47, 0x3b, 0x3d, 0x73, 0x1b, 0x7a, 0x26, 0xdd, 0x7b, - 0x01, 0x39, 0x66, 0x24, 0xf4, 0x29, 0xf8, 0x19, 0x35, 0xc0, 0xdb, 0xa4, 0xf6, 0x24, 0xfe, 0xa5, - 0x8f, 0x89, 0xa7, 0xb0, 0x6b, 0xf1, 0x00, 0x5b, 0xd1, 0x76, 0xa9, 0x36, 0xbd, 0xcc, 0x8a, 0x2c, - 0xfd, 0xc2, 0x00, 0x41, 0x25, 0xac, 0x73, 0x5d, 0x09, 0x80, 0x0a, 0x69, 0x5d, 0x9a, 0x03, 0xf6, - 0x77, 0xd0, 0xf3, 0x5e, 0xa9, 0x2c, 0xce, 0x9d, 0x95, 0x79, 0xfa, 0x15, 0x69, 0xca, 0x51, 0x29, - 0xbe, 0x8f, 0xb6, 0x6b, 0xe2, 0x86, 0x2c, 0x7e, 0x75, 0x3f, 0x23, 0xae, 0x59, 0x74, 0x9d, 0x38, - 0x6c, 0x78, 0xd4, 0xbe, 0x43, 0x9b, 0xc4, 0xfd, 0x81, 0x0d, 0x87, 0xaf, 0xdb, 0x16, 0x6d, 0x90, - 0xda, 0xe1, 0xab, 0xd3, 0x61, 0xdb, 0xee, 0xfe, 0x69, 0x93, 0xda, 0x71, 0x3c, 0x57, 0xf4, 0x5b, - 0xd2, 0x9a, 0x99, 0x76, 0x01, 0xf6, 0xd8, 0x63, 0xad, 0xe8, 0xff, 0xa5, 0x3f, 0x48, 0x7a, 0xc7, - 0xd8, 0x3f, 0x27, 0x5a, 0x0e, 0x33, 0x2d, 0x17, 0xac, 0x39, 0x2b, 0x63, 0x7a, 0x40, 0xee, 0xce, - 0xb0, 0x37, 0xcb, 0x5d, 0xdb, 0x58, 0xfe, 0xd1, 0xcd, 0x72, 0xe8, 0x57, 0xb3, 0x6d, 0x63, 0xd0, - 0x9a, 0x55, 0x5f, 0x3a, 0xdf, 0x91, 0xed, 0x9b, 0xfe, 0xb4, 0x4d, 0x9c, 0x5f, 0xf9, 0x02, 0x8f, - 0xd1, 0x61, 0xf0, 0x93, 0xee, 0x10, 0xf7, 0x22, 0x4e, 0x73, 0x8e, 0x4f, 0x42, 0x93, 0x99, 0xe0, - 0xb9, 0xfd, 0x8d, 0xd5, 0x79, 0x4d, 0xda, 0xab, 0xf6, 0xd7, 0xeb, 0x1b, 0xa6, 0xfe, 0xd1, 0xf5, - 0xfa, 0xf5, 0x43, 0xa9, 0xfc, 0xba, 0x7f, 0x58, 0x64, 0xeb, 0x58, 0x4d, 0xdf, 0x26, 0xfa, 0xdd, - 0xcf, 0x19, 0x17, 0xe7, 0xf4, 0x01, 0x71, 0x75, 0xa2, 0x53, 0x8e, 0x76, 0xcd, 0x97, 0x77, 0x98, - 0x09, 0xa9, 0x4f, 0x3c, 0x15, 0xa7, 0xb1, 0x5c, 0xa0, 0xa7, 0xf3, 0xf2, 0x0e, 0x2b, 0x62, 0xda, - 0x21, 0xf5, 0x17, 0x22, 0x87, 0x95, 0xe0, 0x43, 0x05, 0x35, 0xe5, 0x07, 0xfa, 0x29, 0xd9, 0x7a, - 0x27, 0x66, 0x7c, 0x14, 0x4f, 0x26, 0x92, 0x2b, 0x85, 0xef, 0x15, 0x08, 0x5a, 0xf0, 0xf5, 0xc0, - 0x7c, 0x3c, 0xac, 0x13, 0x37, 0xcf, 0x12, 0x91, 0x75, 0x1f, 0x93, 0x1a, 0xe3, 0x71, 0x5a, 0x6d, - 0xdf, 0xc2, 0x97, 0xc5, 0x04, 0x4f, 0x1a, 0x8d, 0x49, 0xfb, 0xea, 0xea, 0xea, 0xca, 0xee, 0x5e, - 0xc2, 0x7f, 0x84, 0x9d, 0x7c, 0xa0, 0x7b, 0xa4, 0x99, 0xcc, 0xe2, 0x69, 0x92, 0xc1, 0xca, 0x8c, - 0xbc, 0xfa, 0x50, 0x95, 0x44, 0x47, 0x64, 0x5b, 0xf2, 0x38, 0x1d, 0xf1, 0x0f, 0x9a, 0x67, 0x2a, - 0x11, 0x19, 0xdd, 0xaa, 0x5a, 0x2a, 0x4e, 0xfd, 0xdf, 0x6e, 0xf6, 0x64, 0x61, 0xcf, 0xee, 0x42, - 0xd1, 0xb0, 0xac, 0xe9, 0xfe, 0xeb, 0x12, 0xf2, 0x53, 0x26, 0x2e, 0xb3, 0x37, 0x8b, 0x39, 0x57, - 0xf4, 0x11, 0xb1, 0xe3, 0xcc, 0xdf, 0xc6, 0xd2, 0x9d, 0x9e, 0x19, 0x05, 0xbd, 0x72, 0x14, 0xf4, - 0x0e, 0xb2, 0x05, 0xb3, 0xe3, 0x8c, 0x7e, 0x49, 0x9c, 0x49, 0x6e, 0x6e, 0x69, 0x2b, 0xda, 0x5d, - 0x93, 0x1d, 0x15, 0x03, 0x89, 0x81, 0x8a, 0x7e, 0x4e, 0x6c, 0xa5, 0xfd, 0x2d, 0xd4, 0x3e, 0x5c, - 0xd3, 0x9e, 0xe0, 0x70, 0x62, 0xb6, 0x82, 0xdb, 0x6f, 0x6b, 0x55, 0x9c, 0x6f, 0x67, 0x4d, 0xf8, - 0xa6, 0x9c, 0x53, 0xcc, 0xd6, 0x0a, 0xb4, 0xe9, 0x85, 0x7f, 0x6f, 0x83, 0xf6, 0x55, 0xa2, 0xf4, - 0x2f, 0x40, 0x98, 0xd9, 0xe9, 0x05, 0x0d, 0x89, 0x73, 0x11, 0xa7, 0x7e, 0x1b, 0xc5, 0x0f, 0xd6, - 0xc4, 0x46, 0x08, 0x12, 0xda, 0x23, 0xce, 0x64, 0x9c, 0xe2, 0x99, 0xb7, 0xa2, 0xbd, 0xf5, 0x7d, - 0xe1, 0x23, 0x57, 0xe8, 0x27, 0xe3, 0x94, 0x3e, 0x25, 0xce, 0x79, 0xaa, 0xb1, 0x05, 0xe0, 0xc2, - 0xad, 0xea, 0xf1, 0xb9, 0x2c, 0xe4, 0xe7, 0xa9, 0x06, 0x79, 0x52, 0x8c, 0xb1, 0xdb, 0xe4, 0x78, - 0x85, 0x0a, 0x79, 0x32, 0xe8, 0xc3, 0x6a, 0xf2, 0x41, 0x1f, 0x47, 0xdb, 0x6d, 0xab, 0x39, 0xbd, - 0xae, 0xcf, 0x07, 0x7d, 0xb4, 0xdf, 0x8f, 0x70, 0xde, 0x6d, 0xb0, 0xdf, 0x8f, 0x4a, 0xfb, 0xfd, - 0x08, 0xed, 0xf7, 0x23, 0x1c, 0x82, 0x9b, 0xec, 0x97, 0xfa, 0x1c, 0xf5, 0x35, 0x1c, 0x61, 0xcd, - 0x0d, 0xd0, 0xe1, 0x0e, 0x1b, 0x39, 0xea, 0xc0, 0x1f, 0x5e, 0x23, 0xb2, 0xc1, 0xdf, 0x8c, 0x85, - 0xc2, 0x5f, 0x69, 0x49, 0xbf, 0x26, 0x6e, 0x35, 0x47, 0x6f, 0xdb, 0x00, 0x8e, 0x0b, 0x53, 0x60, - 0x94, 0xcf, 0x03, 0x52, 0xcb, 0xe2, 0x19, 0x5f, 0x69, 0xfc, 0xdf, 0xf1, 0x85, 0xc1, 0xcc, 0x7f, - 0x01, 0x00, 0x00, 0xff, 0xff, 0x46, 0x96, 0x41, 0x24, 0x64, 0x09, 0x00, 0x00, + // 1160 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x95, 0x41, 0x73, 0xdb, 0x44, + 0x14, 0xc7, 0x23, 0xc9, 0x92, 0xed, 0x75, 0x92, 0x9a, 0x6d, 0xda, 0x2a, 0x26, 0x80, 0xc6, 0x94, + 0x22, 0x0a, 0x75, 0x07, 0xc7, 0xe3, 0x61, 0x0a, 0x97, 0xa4, 0x71, 0x29, 0x43, 0x13, 0x98, 0x4d, + 0x43, 0x8f, 0x1e, 0x39, 0x5a, 0xbb, 0x2a, 0xf2, 0xae, 0x67, 0x77, 0x95, 0xd4, 0x03, 0x87, 0x9c, + 0x39, 0x32, 0x7c, 0x05, 0xf8, 0x08, 0x1c, 0xf8, 0x74, 0xcc, 0xdb, 0x95, 0xac, 0xc4, 0x8e, 0x4f, + 0xf1, 0x7b, 0xef, 0xff, 0xfe, 0x59, 0xed, 0x6f, 0x77, 0x1f, 0xc2, 0x8a, 0x4a, 0x35, 0xe4, 0xa3, + 0x77, 0xf4, 0x5c, 0xc9, 0xce, 0x4c, 0x70, 0xc5, 0xb1, 0xf7, 0x4e, 0x72, 0x36, 0x1b, 0xb5, 0x76, + 0x27, 0x9c, 0x4f, 0x52, 0xfa, 0x54, 0x67, 0x47, 0xd9, 0xf8, 0x69, 0xc4, 0xe6, 0x46, 0xd2, 0xfa, + 0x78, 0xb9, 0x14, 0x67, 0x22, 0x52, 0x09, 0x67, 0x79, 0x7d, 0x6f, 0xb9, 0x2e, 0x95, 0xc8, 0xce, + 0x55, 0x5e, 0xfd, 0x64, 0xb9, 0xaa, 0x92, 0x29, 0x95, 0x2a, 0x9a, 0xce, 0xd6, 0xd9, 0x5f, 0x8a, + 0x68, 0x36, 0xa3, 0x22, 0x5f, 0x61, 0xfb, 0x6f, 0x1b, 0x79, 0xa7, 0xc9, 0x74, 0x96, 0x52, 0x7c, + 0x0f, 0x79, 0x7c, 0x38, 0xe2, 0x3c, 0xf5, 0xad, 0xc0, 0x0a, 0x6b, 0xc4, 0xe5, 0x87, 0x9c, 0xa7, + 0xf8, 0x01, 0xaa, 0xf2, 0x61, 0xc2, 0xd4, 0x7e, 0xd7, 0xb7, 0x03, 0x2b, 0x74, 0x89, 0xc7, 0x7f, + 0x80, 0x68, 0x51, 0xe8, 0xf7, 0x7c, 0x27, 0xb0, 0x42, 0xc7, 0x14, 0xfa, 0x3d, 0xbc, 0x8b, 0x6a, + 0x7c, 0x98, 0x99, 0x96, 0x4a, 0x60, 0x85, 0x5b, 0xa4, 0xca, 0xcf, 0x74, 0x58, 0x96, 0xfa, 0x3d, + 0xdf, 0x0d, 0xac, 0xb0, 0x92, 0x97, 0x8a, 0x2e, 0x69, 0xba, 0xbc, 0xc0, 0x0a, 0x3f, 0x20, 0x55, + 0x7e, 0x7a, 0xad, 0x4b, 0x9a, 0xae, 0x6a, 0x60, 0x85, 0x38, 0x2f, 0xf5, 0x7b, 0x66, 0x11, 0xe3, + 0x94, 0x47, 0xca, 0xaf, 0x05, 0x56, 0x68, 0x13, 0x8f, 0xbf, 0x80, 0xc8, 0xf4, 0xc4, 0x3c, 0x1b, + 0xa5, 0xd4, 0xaf, 0x07, 0x56, 0x68, 0x91, 0x2a, 0x3f, 0xd2, 0x61, 0x6e, 0xa7, 0x44, 0xc2, 0x26, + 0x3e, 0x0a, 0xac, 0xb0, 0x0e, 0x76, 0x3a, 0x34, 0x76, 0xa3, 0xb9, 0xa2, 0xd2, 0x6f, 0x04, 0x56, + 0xb8, 0x49, 0x3c, 0x7e, 0x08, 0x51, 0xfb, 0x4f, 0x0b, 0xa1, 0x13, 0xce, 0x5e, 0x24, 0x2c, 0x51, + 0x54, 0xe2, 0xbb, 0xc8, 0x1d, 0x0f, 0x59, 0xc4, 0xf4, 0x56, 0xd9, 0xa4, 0x32, 0x3e, 0x89, 0x18, + 0x6c, 0xe0, 0x78, 0x38, 0x4b, 0xd8, 0x58, 0x6f, 0x94, 0x4d, 0xdc, 0xf1, 0xcf, 0x09, 0x1b, 0x9b, + 0x34, 0x83, 0xb4, 0x93, 0xa7, 0x4f, 0x20, 0x7d, 0x17, 0xb9, 0xb1, 0xb6, 0xa8, 0xe8, 0xd5, 0x55, + 0xe2, 0xdc, 0x22, 0x36, 0x16, 0xae, 0xce, 0xba, 0x71, 0x61, 0x11, 0x1b, 0x0b, 0x2f, 0x4f, 0x83, + 0x45, 0xfb, 0x1f, 0x1b, 0x55, 0x09, 0x9d, 0xd1, 0x48, 0x49, 0x90, 0x88, 0x82, 0x9e, 0x03, 0xf4, + 0x44, 0x41, 0x4f, 0x2c, 0xe8, 0x39, 0x40, 0x4f, 0x2c, 0xe8, 0x89, 0x05, 0x3d, 0x07, 0xe8, 0x89, + 0x05, 0x3d, 0x51, 0xd2, 0x73, 0x80, 0x9e, 0x28, 0xe9, 0x89, 0x92, 0x9e, 0x03, 0xf4, 0x44, 0x49, + 0x4f, 0x94, 0xf4, 0x1c, 0xa0, 0x27, 0x4e, 0xaf, 0x75, 0x2d, 0xe8, 0x39, 0x40, 0x4f, 0x94, 0xf4, + 0xc4, 0x82, 0x9e, 0x03, 0xf4, 0xc4, 0x82, 0x9e, 0x28, 0xe9, 0x39, 0x40, 0x4f, 0x94, 0xf4, 0x44, + 0x49, 0xcf, 0x01, 0x7a, 0xa2, 0xa4, 0x27, 0x16, 0xf4, 0x1c, 0xa0, 0x27, 0x0c, 0xbd, 0x7f, 0x6d, + 0xe4, 0xbd, 0x49, 0xe2, 0x09, 0x55, 0xf8, 0x31, 0x72, 0xcf, 0x79, 0xca, 0x85, 0x26, 0xb7, 0xdd, + 0xdd, 0xe9, 0x98, 0x2b, 0xda, 0x31, 0xe5, 0xce, 0x73, 0xa8, 0x11, 0x23, 0xc1, 0x4f, 0xc0, 0xcf, + 0xa8, 0x61, 0xf3, 0xd6, 0xa9, 0x3d, 0xa1, 0xff, 0xe2, 0x47, 0xc8, 0x93, 0xfa, 0x2a, 0xe9, 0x53, + 0xd5, 0xe8, 0x6e, 0x17, 0x6a, 0x73, 0xc1, 0x48, 0x5e, 0xc5, 0x5f, 0x98, 0x0d, 0xd1, 0x4a, 0x58, + 0xe7, 0xaa, 0x12, 0x36, 0x28, 0x97, 0x56, 0x85, 0x01, 0xec, 0xef, 0x68, 0xcf, 0x3b, 0x85, 0x32, + 0xe7, 0x4e, 0x8a, 0x3a, 0xfe, 0x0a, 0xd5, 0xc5, 0xb0, 0x10, 0xdf, 0xd3, 0xb6, 0x2b, 0xe2, 0x9a, + 0xc8, 0x7f, 0xb5, 0x3f, 0x43, 0xae, 0x59, 0x74, 0x15, 0x39, 0x64, 0x70, 0xd4, 0xdc, 0xc0, 0x75, + 0xe4, 0x7e, 0x4f, 0x06, 0x83, 0x93, 0xa6, 0x85, 0x6b, 0xa8, 0x72, 0xf8, 0xea, 0x6c, 0xd0, 0xb4, + 0xdb, 0x7f, 0xd9, 0xa8, 0x72, 0x1c, 0xcd, 0x24, 0xfe, 0x16, 0x35, 0xa6, 0xe6, 0xb8, 0xc0, 0xde, + 0xeb, 0x33, 0xd6, 0xe8, 0x7e, 0x58, 0xf8, 0x83, 0xa4, 0x73, 0xac, 0xcf, 0xcf, 0xa9, 0x12, 0x03, + 0xa6, 0xc4, 0x9c, 0xd4, 0xa7, 0x45, 0x8c, 0x0f, 0xd0, 0xd6, 0x54, 0x9f, 0xcd, 0xe2, 0xab, 0x6d, + 0xdd, 0xfe, 0xd1, 0xcd, 0x76, 0x38, 0xaf, 0xe6, 0xb3, 0x8d, 0x41, 0x63, 0x5a, 0x66, 0x5a, 0xdf, + 0xa1, 0xed, 0x9b, 0xfe, 0xb8, 0x89, 0x9c, 0x5f, 0xe9, 0x5c, 0x63, 0x74, 0x08, 0xfc, 0xc4, 0x3b, + 0xc8, 0xbd, 0x88, 0xd2, 0x8c, 0xea, 0xeb, 0x57, 0x27, 0x26, 0x78, 0x66, 0x7f, 0x63, 0xb5, 0x4e, + 0x50, 0x73, 0xd9, 0xfe, 0x7a, 0x7f, 0xcd, 0xf4, 0x3f, 0xbc, 0xde, 0xbf, 0x0a, 0xa5, 0xf4, 0x6b, + 0xff, 0x61, 0xa1, 0xcd, 0x63, 0x39, 0x79, 0x93, 0xa8, 0xb7, 0x3f, 0x31, 0xca, 0xc7, 0xf8, 0x3e, + 0x72, 0x55, 0xa2, 0x52, 0xaa, 0xed, 0xea, 0x2f, 0x37, 0x88, 0x09, 0xb1, 0x8f, 0x3c, 0x19, 0xa5, + 0x91, 0x98, 0x6b, 0x4f, 0xe7, 0xe5, 0x06, 0xc9, 0x63, 0xdc, 0x42, 0xd5, 0xe7, 0x3c, 0x83, 0x95, + 0xe8, 0x67, 0x01, 0x7a, 0x8a, 0x04, 0xfe, 0x14, 0x6d, 0xbe, 0xe5, 0x53, 0x3a, 0x8c, 0xe2, 0x58, + 0x50, 0x29, 0xf5, 0x0b, 0x01, 0x82, 0x06, 0x64, 0x0f, 0x4c, 0xf2, 0xb0, 0x8a, 0xdc, 0x8c, 0x25, + 0x9c, 0xb5, 0x1f, 0xa1, 0x0a, 0xa1, 0x51, 0x5a, 0x7e, 0xbe, 0x65, 0xde, 0x08, 0x1d, 0x3c, 0xae, + 0xd5, 0xe2, 0xe6, 0xd5, 0xd5, 0xd5, 0x95, 0xdd, 0xbe, 0x84, 0xff, 0x08, 0x5f, 0xf2, 0x1e, 0xef, + 0xa1, 0x7a, 0x32, 0x8d, 0x26, 0x09, 0x83, 0x95, 0x19, 0x79, 0x99, 0x28, 0x5b, 0xba, 0x47, 0x68, + 0x5b, 0xd0, 0x28, 0x1d, 0xd2, 0xf7, 0x8a, 0x32, 0x99, 0x70, 0x86, 0x37, 0xcb, 0x23, 0x15, 0xa5, + 0xfe, 0x6f, 0x37, 0xcf, 0x64, 0x6e, 0x4f, 0xb6, 0xa0, 0x69, 0x50, 0xf4, 0xb4, 0xff, 0x73, 0x11, + 0xfa, 0x91, 0xf1, 0x4b, 0xf6, 0x7a, 0x3e, 0xa3, 0x12, 0x3f, 0x44, 0x76, 0xc4, 0xfc, 0x6d, 0xdd, + 0xba, 0xd3, 0x31, 0xf3, 0xa9, 0x53, 0xcc, 0xa7, 0xce, 0x01, 0x9b, 0x13, 0x3b, 0x62, 0xf8, 0x4b, + 0xe4, 0xc4, 0x99, 0xb9, 0xa5, 0x8d, 0xee, 0xee, 0x8a, 0xec, 0x28, 0x9f, 0x92, 0x04, 0x54, 0xf8, + 0x73, 0x64, 0x4b, 0xe5, 0x6f, 0x6a, 0xed, 0x83, 0x15, 0xed, 0xa9, 0x9e, 0x98, 0xc4, 0x96, 0x70, + 0xfb, 0x6d, 0x25, 0x73, 0xbe, 0xad, 0x15, 0xe1, 0xeb, 0x62, 0x78, 0x12, 0x5b, 0x49, 0xd0, 0xa6, + 0x17, 0xfe, 0x9d, 0x35, 0xda, 0x57, 0x89, 0x54, 0xbf, 0xc0, 0x0e, 0x13, 0x3b, 0xbd, 0xc0, 0x21, + 0x72, 0x2e, 0xa2, 0xd4, 0x6f, 0x6a, 0xf1, 0xfd, 0x15, 0xb1, 0x11, 0x82, 0x04, 0x77, 0x90, 0x13, + 0x8f, 0x52, 0xcd, 0xbc, 0xd1, 0xdd, 0x5b, 0xfd, 0x2e, 0xfd, 0xc8, 0xe5, 0xfa, 0x78, 0x94, 0xe2, + 0x27, 0xc8, 0x19, 0xa7, 0x4a, 0x1f, 0x01, 0xb8, 0x70, 0xcb, 0x7a, 0xfd, 0x5c, 0xe6, 0xf2, 0x71, + 0xaa, 0x40, 0x9e, 0xe4, 0xb3, 0xf5, 0x36, 0xb9, 0xbe, 0x42, 0xb9, 0x3c, 0xe9, 0xf7, 0x60, 0x35, + 0x59, 0xbf, 0xa7, 0xa7, 0xca, 0x6d, 0xab, 0x39, 0xbb, 0xae, 0xcf, 0xfa, 0x3d, 0x6d, 0xbf, 0xdf, + 0xd5, 0x43, 0x78, 0x8d, 0xfd, 0x7e, 0xb7, 0xb0, 0xdf, 0xef, 0x6a, 0xfb, 0xfd, 0xae, 0x9e, 0xcc, + 0xeb, 0xec, 0x17, 0xfa, 0x4c, 0xeb, 0x2b, 0x7a, 0x84, 0xd5, 0xd7, 0x6c, 0x3a, 0xdc, 0x61, 0x23, + 0xd7, 0x3a, 0xf0, 0x87, 0xd7, 0x08, 0xad, 0xf1, 0x37, 0x63, 0x21, 0xf7, 0x97, 0x4a, 0xe0, 0xaf, + 0x91, 0x5b, 0x0e, 0xf7, 0xdb, 0x3e, 0x40, 0x8f, 0x0b, 0xd3, 0x60, 0x94, 0xcf, 0x02, 0x54, 0x61, + 0xd1, 0x94, 0x2e, 0x1d, 0xfc, 0xdf, 0xf5, 0x0b, 0xa3, 0x2b, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, + 0xd5, 0x39, 0x32, 0x09, 0xf9, 0x09, 0x00, 0x00, } diff --git a/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.proto b/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.proto index a493ecc..0d2fc1f 100644 --- a/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.proto +++ b/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.proto @@ -54,6 +54,16 @@ message Simple { optional bytes o_bytes = 11; } +// Test message for holding special non-finites primitives. +message NonFinites { + optional float f_nan = 1; + optional float f_pinf = 2; + optional float f_ninf = 3; + optional double d_nan = 4; + optional double d_pinf = 5; + optional double d_ninf = 6; +} + // Test message for holding repeated primitives. message Repeats { repeated bool r_bool = 1; diff --git a/vendor/github.com/golang/protobuf/proto/decode_test.go b/vendor/github.com/golang/protobuf/proto/decode_test.go index b1f1304..2c4c31d 100644 --- a/vendor/github.com/golang/protobuf/proto/decode_test.go +++ b/vendor/github.com/golang/protobuf/proto/decode_test.go @@ -29,6 +29,8 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +build go1.7 + package proto_test import ( diff --git a/vendor/github.com/golang/protobuf/proto/discard.go b/vendor/github.com/golang/protobuf/proto/discard.go new file mode 100644 index 0000000..bd0e3bb --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/discard.go @@ -0,0 +1,151 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2017 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +import ( + "fmt" + "reflect" + "strings" +) + +// DiscardUnknown recursively discards all unknown fields from this message +// and all embedded messages. +// +// When unmarshaling a message with unrecognized fields, the tags and values +// of such fields are preserved in the Message. This allows a later call to +// marshal to be able to produce a message that continues to have those +// unrecognized fields. To avoid this, DiscardUnknown is used to +// explicitly clear the unknown fields after unmarshaling. +// +// For proto2 messages, the unknown fields of message extensions are only +// discarded from messages that have been accessed via GetExtension. +func DiscardUnknown(m Message) { + discardLegacy(m) +} + +func discardLegacy(m Message) { + v := reflect.ValueOf(m) + if v.Kind() != reflect.Ptr || v.IsNil() { + return + } + v = v.Elem() + if v.Kind() != reflect.Struct { + return + } + t := v.Type() + + for i := 0; i < v.NumField(); i++ { + f := t.Field(i) + if strings.HasPrefix(f.Name, "XXX_") { + continue + } + vf := v.Field(i) + tf := f.Type + + // Unwrap tf to get its most basic type. + var isPointer, isSlice bool + if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 { + isSlice = true + tf = tf.Elem() + } + if tf.Kind() == reflect.Ptr { + isPointer = true + tf = tf.Elem() + } + if isPointer && isSlice && tf.Kind() != reflect.Struct { + panic(fmt.Sprintf("%T.%s cannot be a slice of pointers to primitive types", m, f.Name)) + } + + switch tf.Kind() { + case reflect.Struct: + switch { + case !isPointer: + panic(fmt.Sprintf("%T.%s cannot be a direct struct value", m, f.Name)) + case isSlice: // E.g., []*pb.T + for j := 0; j < vf.Len(); j++ { + discardLegacy(vf.Index(j).Interface().(Message)) + } + default: // E.g., *pb.T + discardLegacy(vf.Interface().(Message)) + } + case reflect.Map: + switch { + case isPointer || isSlice: + panic(fmt.Sprintf("%T.%s cannot be a pointer to a map or a slice of map values", m, f.Name)) + default: // E.g., map[K]V + tv := vf.Type().Elem() + if tv.Kind() == reflect.Ptr && tv.Implements(protoMessageType) { // Proto struct (e.g., *T) + for _, key := range vf.MapKeys() { + val := vf.MapIndex(key) + discardLegacy(val.Interface().(Message)) + } + } + } + case reflect.Interface: + // Must be oneof field. + switch { + case isPointer || isSlice: + panic(fmt.Sprintf("%T.%s cannot be a pointer to a interface or a slice of interface values", m, f.Name)) + default: // E.g., test_proto.isCommunique_Union interface + if !vf.IsNil() && f.Tag.Get("protobuf_oneof") != "" { + vf = vf.Elem() // E.g., *test_proto.Communique_Msg + if !vf.IsNil() { + vf = vf.Elem() // E.g., test_proto.Communique_Msg + vf = vf.Field(0) // E.g., Proto struct (e.g., *T) or primitive value + if vf.Kind() == reflect.Ptr { + discardLegacy(vf.Interface().(Message)) + } + } + } + } + } + } + + if vf := v.FieldByName("XXX_unrecognized"); vf.IsValid() { + if vf.Type() != reflect.TypeOf([]byte{}) { + panic("expected XXX_unrecognized to be of type []byte") + } + vf.Set(reflect.ValueOf([]byte(nil))) + } + + // For proto2 messages, only discard unknown fields in message extensions + // that have been accessed via GetExtension. + if em, ok := extendable(m); ok { + // Ignore lock since discardLegacy is not concurrency safe. + emm, _ := em.extensionsRead() + for _, mx := range emm { + if m, ok := mx.value.(Message); ok { + discardLegacy(m) + } + } + } +} diff --git a/vendor/github.com/golang/protobuf/proto/encode.go b/vendor/github.com/golang/protobuf/proto/encode.go index 2b30f84..8b84d1b 100644 --- a/vendor/github.com/golang/protobuf/proto/encode.go +++ b/vendor/github.com/golang/protobuf/proto/encode.go @@ -174,11 +174,11 @@ func sizeFixed32(x uint64) int { // This is the format used for the sint64 protocol buffer type. func (p *Buffer) EncodeZigzag64(x uint64) error { // use signed number to get arithmetic right shift. - return p.EncodeVarint(uint64((x << 1) ^ uint64((int64(x) >> 63)))) + return p.EncodeVarint((x << 1) ^ uint64((int64(x) >> 63))) } func sizeZigzag64(x uint64) int { - return sizeVarint(uint64((x << 1) ^ uint64((int64(x) >> 63)))) + return sizeVarint((x << 1) ^ uint64((int64(x) >> 63))) } // EncodeZigzag32 writes a zigzag-encoded 32-bit integer diff --git a/vendor/github.com/golang/protobuf/proto/encode_test.go b/vendor/github.com/golang/protobuf/proto/encode_test.go index 0b36a0e..a720947 100644 --- a/vendor/github.com/golang/protobuf/proto/encode_test.go +++ b/vendor/github.com/golang/protobuf/proto/encode_test.go @@ -29,6 +29,8 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +build go1.7 + package proto_test import ( diff --git a/vendor/github.com/golang/protobuf/proto/extensions_test.go b/vendor/github.com/golang/protobuf/proto/extensions_test.go index b6d9114..a255030 100644 --- a/vendor/github.com/golang/protobuf/proto/extensions_test.go +++ b/vendor/github.com/golang/protobuf/proto/extensions_test.go @@ -478,7 +478,7 @@ func TestUnmarshalRepeatingNonRepeatedExtension(t *testing.T) { t.Fatalf("[%s] Invalid extension", test.name) } if !reflect.DeepEqual(*ext, want) { - t.Errorf("[%s] Wrong value for ComplexExtension: got: %s want: %s\n", test.name, ext, want) + t.Errorf("[%s] Wrong value for ComplexExtension: got: %s want: %s\n", test.name, ext, &want) } } } diff --git a/vendor/github.com/golang/protobuf/proto/lib.go b/vendor/github.com/golang/protobuf/proto/lib.go index ac4ddbc..1c22550 100644 --- a/vendor/github.com/golang/protobuf/proto/lib.go +++ b/vendor/github.com/golang/protobuf/proto/lib.go @@ -73,7 +73,6 @@ for a protocol buffer variable v: When the .proto file specifies `syntax="proto3"`, there are some differences: - Non-repeated fields of non-message type are values instead of pointers. - - Getters are only generated for message and oneof fields. - Enum types do not get an Enum method. The simplest way to describe this is to see an example. diff --git a/vendor/github.com/golang/protobuf/proto/text_parser.go b/vendor/github.com/golang/protobuf/proto/text_parser.go index 61f83c1..5e14513 100644 --- a/vendor/github.com/golang/protobuf/proto/text_parser.go +++ b/vendor/github.com/golang/protobuf/proto/text_parser.go @@ -865,7 +865,7 @@ func (p *textParser) readAny(v reflect.Value, props *Properties) error { return p.readStruct(fv, terminator) case reflect.Uint32: if x, err := strconv.ParseUint(tok.value, 0, 32); err == nil { - fv.SetUint(uint64(x)) + fv.SetUint(x) return nil } case reflect.Uint64: diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/Makefile b/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/Makefile index 41a2d04..f706871 100644 --- a/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/Makefile +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/Makefile @@ -33,4 +33,5 @@ # at src/google/protobuf/descriptor.proto regenerate: @echo WARNING! THIS RULE IS PROBABLY NOT RIGHT FOR YOUR INSTALLATION + cp $(HOME)/src/protobuf/include/google/protobuf/descriptor.proto . protoc --go_out=../../../../.. -I$(HOME)/src/protobuf/include $(HOME)/src/protobuf/include/google/protobuf/descriptor.proto diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go b/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go index 63cf2c8..c6a91bc 100644 --- a/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go @@ -11,6 +11,7 @@ It has these top-level messages: FileDescriptorSet FileDescriptorProto DescriptorProto + ExtensionRangeOptions FieldDescriptorProto OneofDescriptorProto EnumDescriptorProto @@ -137,7 +138,7 @@ func (x *FieldDescriptorProto_Type) UnmarshalJSON(data []byte) error { *x = FieldDescriptorProto_Type(value) return nil } -func (FieldDescriptorProto_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{3, 0} } +func (FieldDescriptorProto_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{4, 0} } type FieldDescriptorProto_Label int32 @@ -176,7 +177,7 @@ func (x *FieldDescriptorProto_Label) UnmarshalJSON(data []byte) error { return nil } func (FieldDescriptorProto_Label) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{3, 1} + return fileDescriptor0, []int{4, 1} } // Generated classes can be optimized for speed or code size. @@ -216,7 +217,7 @@ func (x *FileOptions_OptimizeMode) UnmarshalJSON(data []byte) error { *x = FileOptions_OptimizeMode(value) return nil } -func (FileOptions_OptimizeMode) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{9, 0} } +func (FileOptions_OptimizeMode) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{10, 0} } type FieldOptions_CType int32 @@ -254,7 +255,7 @@ func (x *FieldOptions_CType) UnmarshalJSON(data []byte) error { *x = FieldOptions_CType(value) return nil } -func (FieldOptions_CType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{11, 0} } +func (FieldOptions_CType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{12, 0} } type FieldOptions_JSType int32 @@ -294,7 +295,7 @@ func (x *FieldOptions_JSType) UnmarshalJSON(data []byte) error { *x = FieldOptions_JSType(value) return nil } -func (FieldOptions_JSType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{11, 1} } +func (FieldOptions_JSType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{12, 1} } // Is this method side-effect-free (or safe in HTTP parlance), or idempotent, // or neither? HTTP based RPC implementation may choose GET verb for safe @@ -335,7 +336,7 @@ func (x *MethodOptions_IdempotencyLevel) UnmarshalJSON(data []byte) error { return nil } func (MethodOptions_IdempotencyLevel) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{16, 0} + return fileDescriptor0, []int{17, 0} } // The protocol compiler can output a FileDescriptorSet containing the .proto @@ -567,9 +568,10 @@ func (m *DescriptorProto) GetReservedName() []string { } type DescriptorProto_ExtensionRange struct { - Start *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` - End *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` - XXX_unrecognized []byte `json:"-"` + Start *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` + End *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` + Options *ExtensionRangeOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` + XXX_unrecognized []byte `json:"-"` } func (m *DescriptorProto_ExtensionRange) Reset() { *m = DescriptorProto_ExtensionRange{} } @@ -593,6 +595,13 @@ func (m *DescriptorProto_ExtensionRange) GetEnd() int32 { return 0 } +func (m *DescriptorProto_ExtensionRange) GetOptions() *ExtensionRangeOptions { + if m != nil { + return m.Options + } + return nil +} + // Range of reserved tag numbers. Reserved tag numbers may not be used by // fields or extension ranges in the same message. Reserved ranges may // not overlap. @@ -623,6 +632,33 @@ func (m *DescriptorProto_ReservedRange) GetEnd() int32 { return 0 } +type ExtensionRangeOptions struct { + // The parser stores options it doesn't recognize here. See above. + UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ExtensionRangeOptions) Reset() { *m = ExtensionRangeOptions{} } +func (m *ExtensionRangeOptions) String() string { return proto.CompactTextString(m) } +func (*ExtensionRangeOptions) ProtoMessage() {} +func (*ExtensionRangeOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +var extRange_ExtensionRangeOptions = []proto.ExtensionRange{ + {1000, 536870911}, +} + +func (*ExtensionRangeOptions) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_ExtensionRangeOptions +} + +func (m *ExtensionRangeOptions) GetUninterpretedOption() []*UninterpretedOption { + if m != nil { + return m.UninterpretedOption + } + return nil +} + // Describes a field within a message. type FieldDescriptorProto struct { Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` @@ -661,7 +697,7 @@ type FieldDescriptorProto struct { func (m *FieldDescriptorProto) Reset() { *m = FieldDescriptorProto{} } func (m *FieldDescriptorProto) String() string { return proto.CompactTextString(m) } func (*FieldDescriptorProto) ProtoMessage() {} -func (*FieldDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } +func (*FieldDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } func (m *FieldDescriptorProto) GetName() string { if m != nil && m.Name != nil { @@ -743,7 +779,7 @@ type OneofDescriptorProto struct { func (m *OneofDescriptorProto) Reset() { *m = OneofDescriptorProto{} } func (m *OneofDescriptorProto) String() string { return proto.CompactTextString(m) } func (*OneofDescriptorProto) ProtoMessage() {} -func (*OneofDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } +func (*OneofDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } func (m *OneofDescriptorProto) GetName() string { if m != nil && m.Name != nil { @@ -770,7 +806,7 @@ type EnumDescriptorProto struct { func (m *EnumDescriptorProto) Reset() { *m = EnumDescriptorProto{} } func (m *EnumDescriptorProto) String() string { return proto.CompactTextString(m) } func (*EnumDescriptorProto) ProtoMessage() {} -func (*EnumDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } +func (*EnumDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } func (m *EnumDescriptorProto) GetName() string { if m != nil && m.Name != nil { @@ -804,7 +840,7 @@ type EnumValueDescriptorProto struct { func (m *EnumValueDescriptorProto) Reset() { *m = EnumValueDescriptorProto{} } func (m *EnumValueDescriptorProto) String() string { return proto.CompactTextString(m) } func (*EnumValueDescriptorProto) ProtoMessage() {} -func (*EnumValueDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } +func (*EnumValueDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } func (m *EnumValueDescriptorProto) GetName() string { if m != nil && m.Name != nil { @@ -838,7 +874,7 @@ type ServiceDescriptorProto struct { func (m *ServiceDescriptorProto) Reset() { *m = ServiceDescriptorProto{} } func (m *ServiceDescriptorProto) String() string { return proto.CompactTextString(m) } func (*ServiceDescriptorProto) ProtoMessage() {} -func (*ServiceDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } +func (*ServiceDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } func (m *ServiceDescriptorProto) GetName() string { if m != nil && m.Name != nil { @@ -879,7 +915,7 @@ type MethodDescriptorProto struct { func (m *MethodDescriptorProto) Reset() { *m = MethodDescriptorProto{} } func (m *MethodDescriptorProto) String() string { return proto.CompactTextString(m) } func (*MethodDescriptorProto) ProtoMessage() {} -func (*MethodDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } +func (*MethodDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } const Default_MethodDescriptorProto_ClientStreaming bool = false const Default_MethodDescriptorProto_ServerStreaming bool = false @@ -974,6 +1010,7 @@ type FileOptions struct { CcGenericServices *bool `protobuf:"varint,16,opt,name=cc_generic_services,json=ccGenericServices,def=0" json:"cc_generic_services,omitempty"` JavaGenericServices *bool `protobuf:"varint,17,opt,name=java_generic_services,json=javaGenericServices,def=0" json:"java_generic_services,omitempty"` PyGenericServices *bool `protobuf:"varint,18,opt,name=py_generic_services,json=pyGenericServices,def=0" json:"py_generic_services,omitempty"` + PhpGenericServices *bool `protobuf:"varint,42,opt,name=php_generic_services,json=phpGenericServices,def=0" json:"php_generic_services,omitempty"` // Is this file deprecated? // Depending on the target platform, this can emit Deprecated annotations // for everything in the file, or it will be completely ignored; in the very @@ -995,6 +1032,10 @@ type FileOptions struct { // Sets the php class prefix which is prepended to all php generated classes // from this .proto. Default is empty. PhpClassPrefix *string `protobuf:"bytes,40,opt,name=php_class_prefix,json=phpClassPrefix" json:"php_class_prefix,omitempty"` + // Use this option to change the namespace of php generated classes. Default + // is empty. When this option is empty, the package name will be used for + // determining the namespace. + PhpNamespace *string `protobuf:"bytes,41,opt,name=php_namespace,json=phpNamespace" json:"php_namespace,omitempty"` // The parser stores options it doesn't recognize here. See above. UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` proto.XXX_InternalExtensions `json:"-"` @@ -1004,7 +1045,7 @@ type FileOptions struct { func (m *FileOptions) Reset() { *m = FileOptions{} } func (m *FileOptions) String() string { return proto.CompactTextString(m) } func (*FileOptions) ProtoMessage() {} -func (*FileOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } +func (*FileOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } var extRange_FileOptions = []proto.ExtensionRange{ {1000, 536870911}, @@ -1020,6 +1061,7 @@ const Default_FileOptions_OptimizeFor FileOptions_OptimizeMode = FileOptions_SPE const Default_FileOptions_CcGenericServices bool = false const Default_FileOptions_JavaGenericServices bool = false const Default_FileOptions_PyGenericServices bool = false +const Default_FileOptions_PhpGenericServices bool = false const Default_FileOptions_Deprecated bool = false const Default_FileOptions_CcEnableArenas bool = false @@ -1093,6 +1135,13 @@ func (m *FileOptions) GetPyGenericServices() bool { return Default_FileOptions_PyGenericServices } +func (m *FileOptions) GetPhpGenericServices() bool { + if m != nil && m.PhpGenericServices != nil { + return *m.PhpGenericServices + } + return Default_FileOptions_PhpGenericServices +} + func (m *FileOptions) GetDeprecated() bool { if m != nil && m.Deprecated != nil { return *m.Deprecated @@ -1135,6 +1184,13 @@ func (m *FileOptions) GetPhpClassPrefix() string { return "" } +func (m *FileOptions) GetPhpNamespace() string { + if m != nil && m.PhpNamespace != nil { + return *m.PhpNamespace + } + return "" +} + func (m *FileOptions) GetUninterpretedOption() []*UninterpretedOption { if m != nil { return m.UninterpretedOption @@ -1202,7 +1258,7 @@ type MessageOptions struct { func (m *MessageOptions) Reset() { *m = MessageOptions{} } func (m *MessageOptions) String() string { return proto.CompactTextString(m) } func (*MessageOptions) ProtoMessage() {} -func (*MessageOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } +func (*MessageOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } var extRange_MessageOptions = []proto.ExtensionRange{ {1000, 536870911}, @@ -1265,13 +1321,15 @@ type FieldOptions struct { Packed *bool `protobuf:"varint,2,opt,name=packed" json:"packed,omitempty"` // The jstype option determines the JavaScript type used for values of the // field. The option is permitted only for 64 bit integral and fixed types - // (int64, uint64, sint64, fixed64, sfixed64). By default these types are - // represented as JavaScript strings. This avoids loss of precision that can - // happen when a large value is converted to a floating point JavaScript - // numbers. Specifying JS_NUMBER for the jstype causes the generated - // JavaScript code to use the JavaScript "number" type instead of strings. - // This option is an enum to permit additional types to be added, - // e.g. goog.math.Integer. + // (int64, uint64, sint64, fixed64, sfixed64). A field with jstype JS_STRING + // is represented as JavaScript string, which avoids loss of precision that + // can happen when a large value is converted to a floating point JavaScript. + // Specifying JS_NUMBER for the jstype causes the generated JavaScript code to + // use the JavaScript "number" type. The behavior of the default option + // JS_NORMAL is implementation dependent. + // + // This option is an enum to permit additional types to be added, e.g. + // goog.math.Integer. Jstype *FieldOptions_JSType `protobuf:"varint,6,opt,name=jstype,enum=google.protobuf.FieldOptions_JSType,def=0" json:"jstype,omitempty"` // Should this field be parsed lazily? Lazy applies only to message-type // fields. It means that when the outer message is initially parsed, the @@ -1318,7 +1376,7 @@ type FieldOptions struct { func (m *FieldOptions) Reset() { *m = FieldOptions{} } func (m *FieldOptions) String() string { return proto.CompactTextString(m) } func (*FieldOptions) ProtoMessage() {} -func (*FieldOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } +func (*FieldOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } var extRange_FieldOptions = []proto.ExtensionRange{ {1000, 536870911}, @@ -1393,7 +1451,7 @@ type OneofOptions struct { func (m *OneofOptions) Reset() { *m = OneofOptions{} } func (m *OneofOptions) String() string { return proto.CompactTextString(m) } func (*OneofOptions) ProtoMessage() {} -func (*OneofOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } +func (*OneofOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } var extRange_OneofOptions = []proto.ExtensionRange{ {1000, 536870911}, @@ -1428,7 +1486,7 @@ type EnumOptions struct { func (m *EnumOptions) Reset() { *m = EnumOptions{} } func (m *EnumOptions) String() string { return proto.CompactTextString(m) } func (*EnumOptions) ProtoMessage() {} -func (*EnumOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } +func (*EnumOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } var extRange_EnumOptions = []proto.ExtensionRange{ {1000, 536870911}, @@ -1476,7 +1534,7 @@ type EnumValueOptions struct { func (m *EnumValueOptions) Reset() { *m = EnumValueOptions{} } func (m *EnumValueOptions) String() string { return proto.CompactTextString(m) } func (*EnumValueOptions) ProtoMessage() {} -func (*EnumValueOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } +func (*EnumValueOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } var extRange_EnumValueOptions = []proto.ExtensionRange{ {1000, 536870911}, @@ -1517,7 +1575,7 @@ type ServiceOptions struct { func (m *ServiceOptions) Reset() { *m = ServiceOptions{} } func (m *ServiceOptions) String() string { return proto.CompactTextString(m) } func (*ServiceOptions) ProtoMessage() {} -func (*ServiceOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } +func (*ServiceOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } var extRange_ServiceOptions = []proto.ExtensionRange{ {1000, 536870911}, @@ -1559,7 +1617,7 @@ type MethodOptions struct { func (m *MethodOptions) Reset() { *m = MethodOptions{} } func (m *MethodOptions) String() string { return proto.CompactTextString(m) } func (*MethodOptions) ProtoMessage() {} -func (*MethodOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } +func (*MethodOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } var extRange_MethodOptions = []proto.ExtensionRange{ {1000, 536870911}, @@ -1615,7 +1673,7 @@ type UninterpretedOption struct { func (m *UninterpretedOption) Reset() { *m = UninterpretedOption{} } func (m *UninterpretedOption) String() string { return proto.CompactTextString(m) } func (*UninterpretedOption) ProtoMessage() {} -func (*UninterpretedOption) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } +func (*UninterpretedOption) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } func (m *UninterpretedOption) GetName() []*UninterpretedOption_NamePart { if m != nil { @@ -1681,7 +1739,7 @@ func (m *UninterpretedOption_NamePart) Reset() { *m = UninterpretedOptio func (m *UninterpretedOption_NamePart) String() string { return proto.CompactTextString(m) } func (*UninterpretedOption_NamePart) ProtoMessage() {} func (*UninterpretedOption_NamePart) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{17, 0} + return fileDescriptor0, []int{18, 0} } func (m *UninterpretedOption_NamePart) GetNamePart() string { @@ -1751,7 +1809,7 @@ type SourceCodeInfo struct { func (m *SourceCodeInfo) Reset() { *m = SourceCodeInfo{} } func (m *SourceCodeInfo) String() string { return proto.CompactTextString(m) } func (*SourceCodeInfo) ProtoMessage() {} -func (*SourceCodeInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } +func (*SourceCodeInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } func (m *SourceCodeInfo) GetLocation() []*SourceCodeInfo_Location { if m != nil { @@ -1847,7 +1905,7 @@ type SourceCodeInfo_Location struct { func (m *SourceCodeInfo_Location) Reset() { *m = SourceCodeInfo_Location{} } func (m *SourceCodeInfo_Location) String() string { return proto.CompactTextString(m) } func (*SourceCodeInfo_Location) ProtoMessage() {} -func (*SourceCodeInfo_Location) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18, 0} } +func (*SourceCodeInfo_Location) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19, 0} } func (m *SourceCodeInfo_Location) GetPath() []int32 { if m != nil { @@ -1897,7 +1955,7 @@ type GeneratedCodeInfo struct { func (m *GeneratedCodeInfo) Reset() { *m = GeneratedCodeInfo{} } func (m *GeneratedCodeInfo) String() string { return proto.CompactTextString(m) } func (*GeneratedCodeInfo) ProtoMessage() {} -func (*GeneratedCodeInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } +func (*GeneratedCodeInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } func (m *GeneratedCodeInfo) GetAnnotation() []*GeneratedCodeInfo_Annotation { if m != nil { @@ -1926,7 +1984,7 @@ func (m *GeneratedCodeInfo_Annotation) Reset() { *m = GeneratedCodeInfo_ func (m *GeneratedCodeInfo_Annotation) String() string { return proto.CompactTextString(m) } func (*GeneratedCodeInfo_Annotation) ProtoMessage() {} func (*GeneratedCodeInfo_Annotation) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{19, 0} + return fileDescriptor0, []int{20, 0} } func (m *GeneratedCodeInfo_Annotation) GetPath() []int32 { @@ -1963,6 +2021,7 @@ func init() { proto.RegisterType((*DescriptorProto)(nil), "google.protobuf.DescriptorProto") proto.RegisterType((*DescriptorProto_ExtensionRange)(nil), "google.protobuf.DescriptorProto.ExtensionRange") proto.RegisterType((*DescriptorProto_ReservedRange)(nil), "google.protobuf.DescriptorProto.ReservedRange") + proto.RegisterType((*ExtensionRangeOptions)(nil), "google.protobuf.ExtensionRangeOptions") proto.RegisterType((*FieldDescriptorProto)(nil), "google.protobuf.FieldDescriptorProto") proto.RegisterType((*OneofDescriptorProto)(nil), "google.protobuf.OneofDescriptorProto") proto.RegisterType((*EnumDescriptorProto)(nil), "google.protobuf.EnumDescriptorProto") @@ -1994,159 +2053,163 @@ func init() { func init() { proto.RegisterFile("google/protobuf/descriptor.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 2460 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0x5b, 0x6f, 0xdb, 0xc8, - 0x15, 0x5e, 0x5d, 0x2d, 0x1d, 0xc9, 0xf2, 0x78, 0xec, 0x4d, 0x18, 0xef, 0x25, 0x8e, 0xf6, 0x12, - 0x6f, 0xd2, 0xc8, 0x0b, 0xe7, 0xb2, 0x59, 0xa7, 0x48, 0x21, 0x4b, 0x8c, 0x57, 0xa9, 0x2c, 0xa9, - 0x94, 0xdc, 0x4d, 0xf6, 0x85, 0x18, 0x93, 0x23, 0x99, 0x09, 0x45, 0x72, 0x49, 0x2a, 0x89, 0xf7, - 0x29, 0x40, 0x9f, 0x0a, 0xf4, 0x07, 0x14, 0x45, 0xd1, 0x87, 0x7d, 0x59, 0xa0, 0x3f, 0xa0, 0xcf, - 0xfd, 0x05, 0x05, 0xf6, 0xb9, 0x2f, 0x45, 0x51, 0xa0, 0xfd, 0x07, 0x7d, 0x2d, 0x66, 0x86, 0xa4, - 0x48, 0x5d, 0x12, 0x77, 0x81, 0xec, 0x3e, 0xd9, 0x73, 0xce, 0x77, 0x0e, 0xcf, 0x9c, 0xf9, 0x66, - 0xce, 0x99, 0x11, 0x6c, 0x8f, 0x6c, 0x7b, 0x64, 0xd2, 0x5d, 0xc7, 0xb5, 0x7d, 0xfb, 0x64, 0x32, - 0xdc, 0xd5, 0xa9, 0xa7, 0xb9, 0x86, 0xe3, 0xdb, 0x6e, 0x8d, 0xcb, 0xf0, 0x9a, 0x40, 0xd4, 0x42, - 0x44, 0xf5, 0x08, 0xd6, 0x1f, 0x18, 0x26, 0x6d, 0x46, 0xc0, 0x3e, 0xf5, 0xf1, 0x5d, 0xc8, 0x0e, - 0x0d, 0x93, 0x4a, 0xa9, 0xed, 0xcc, 0x4e, 0x69, 0xef, 0xc3, 0xda, 0x8c, 0x51, 0x2d, 0x69, 0xd1, - 0x63, 0x62, 0x85, 0x5b, 0x54, 0xff, 0x95, 0x85, 0x8d, 0x05, 0x5a, 0x8c, 0x21, 0x6b, 0x91, 0x31, - 0xf3, 0x98, 0xda, 0x29, 0x2a, 0xfc, 0x7f, 0x2c, 0xc1, 0x8a, 0x43, 0xb4, 0xa7, 0x64, 0x44, 0xa5, - 0x34, 0x17, 0x87, 0x43, 0xfc, 0x3e, 0x80, 0x4e, 0x1d, 0x6a, 0xe9, 0xd4, 0xd2, 0xce, 0xa4, 0xcc, - 0x76, 0x66, 0xa7, 0xa8, 0xc4, 0x24, 0xf8, 0x3a, 0xac, 0x3b, 0x93, 0x13, 0xd3, 0xd0, 0xd4, 0x18, - 0x0c, 0xb6, 0x33, 0x3b, 0x39, 0x05, 0x09, 0x45, 0x73, 0x0a, 0xbe, 0x0a, 0x6b, 0xcf, 0x29, 0x79, - 0x1a, 0x87, 0x96, 0x38, 0xb4, 0xc2, 0xc4, 0x31, 0x60, 0x03, 0xca, 0x63, 0xea, 0x79, 0x64, 0x44, - 0x55, 0xff, 0xcc, 0xa1, 0x52, 0x96, 0xcf, 0x7e, 0x7b, 0x6e, 0xf6, 0xb3, 0x33, 0x2f, 0x05, 0x56, - 0x83, 0x33, 0x87, 0xe2, 0x3a, 0x14, 0xa9, 0x35, 0x19, 0x0b, 0x0f, 0xb9, 0x25, 0xf9, 0x93, 0xad, - 0xc9, 0x78, 0xd6, 0x4b, 0x81, 0x99, 0x05, 0x2e, 0x56, 0x3c, 0xea, 0x3e, 0x33, 0x34, 0x2a, 0xe5, - 0xb9, 0x83, 0xab, 0x73, 0x0e, 0xfa, 0x42, 0x3f, 0xeb, 0x23, 0xb4, 0xc3, 0x0d, 0x28, 0xd2, 0x17, - 0x3e, 0xb5, 0x3c, 0xc3, 0xb6, 0xa4, 0x15, 0xee, 0xe4, 0xa3, 0x05, 0xab, 0x48, 0x4d, 0x7d, 0xd6, - 0xc5, 0xd4, 0x0e, 0xdf, 0x81, 0x15, 0xdb, 0xf1, 0x0d, 0xdb, 0xf2, 0xa4, 0xc2, 0x76, 0x6a, 0xa7, - 0xb4, 0xf7, 0xee, 0x42, 0x22, 0x74, 0x05, 0x46, 0x09, 0xc1, 0xb8, 0x05, 0xc8, 0xb3, 0x27, 0xae, - 0x46, 0x55, 0xcd, 0xd6, 0xa9, 0x6a, 0x58, 0x43, 0x5b, 0x2a, 0x72, 0x07, 0x97, 0xe7, 0x27, 0xc2, - 0x81, 0x0d, 0x5b, 0xa7, 0x2d, 0x6b, 0x68, 0x2b, 0x15, 0x2f, 0x31, 0xc6, 0x17, 0x20, 0xef, 0x9d, - 0x59, 0x3e, 0x79, 0x21, 0x95, 0x39, 0x43, 0x82, 0x51, 0xf5, 0xbf, 0x39, 0x58, 0x3b, 0x0f, 0xc5, - 0xee, 0x41, 0x6e, 0xc8, 0x66, 0x29, 0xa5, 0xff, 0x9f, 0x1c, 0x08, 0x9b, 0x64, 0x12, 0xf3, 0x3f, - 0x30, 0x89, 0x75, 0x28, 0x59, 0xd4, 0xf3, 0xa9, 0x2e, 0x18, 0x91, 0x39, 0x27, 0xa7, 0x40, 0x18, - 0xcd, 0x53, 0x2a, 0xfb, 0x83, 0x28, 0xf5, 0x08, 0xd6, 0xa2, 0x90, 0x54, 0x97, 0x58, 0xa3, 0x90, - 0x9b, 0xbb, 0xaf, 0x8b, 0xa4, 0x26, 0x87, 0x76, 0x0a, 0x33, 0x53, 0x2a, 0x34, 0x31, 0xc6, 0x4d, - 0x00, 0xdb, 0xa2, 0xf6, 0x50, 0xd5, 0xa9, 0x66, 0x4a, 0x85, 0x25, 0x59, 0xea, 0x32, 0xc8, 0x5c, - 0x96, 0x6c, 0x21, 0xd5, 0x4c, 0xfc, 0xf9, 0x94, 0x6a, 0x2b, 0x4b, 0x98, 0x72, 0x24, 0x36, 0xd9, - 0x1c, 0xdb, 0x8e, 0xa1, 0xe2, 0x52, 0xc6, 0x7b, 0xaa, 0x07, 0x33, 0x2b, 0xf2, 0x20, 0x6a, 0xaf, - 0x9d, 0x99, 0x12, 0x98, 0x89, 0x89, 0xad, 0xba, 0xf1, 0x21, 0xfe, 0x00, 0x22, 0x81, 0xca, 0x69, - 0x05, 0xfc, 0x14, 0x2a, 0x87, 0xc2, 0x0e, 0x19, 0xd3, 0xad, 0xbb, 0x50, 0x49, 0xa6, 0x07, 0x6f, - 0x42, 0xce, 0xf3, 0x89, 0xeb, 0x73, 0x16, 0xe6, 0x14, 0x31, 0xc0, 0x08, 0x32, 0xd4, 0xd2, 0xf9, - 0x29, 0x97, 0x53, 0xd8, 0xbf, 0x5b, 0x9f, 0xc1, 0x6a, 0xe2, 0xf3, 0xe7, 0x35, 0xac, 0xfe, 0x3e, - 0x0f, 0x9b, 0x8b, 0x38, 0xb7, 0x90, 0xfe, 0x17, 0x20, 0x6f, 0x4d, 0xc6, 0x27, 0xd4, 0x95, 0x32, - 0xdc, 0x43, 0x30, 0xc2, 0x75, 0xc8, 0x99, 0xe4, 0x84, 0x9a, 0x52, 0x76, 0x3b, 0xb5, 0x53, 0xd9, - 0xbb, 0x7e, 0x2e, 0x56, 0xd7, 0xda, 0xcc, 0x44, 0x11, 0x96, 0xf8, 0x3e, 0x64, 0x83, 0x23, 0x8e, - 0x79, 0xb8, 0x76, 0x3e, 0x0f, 0x8c, 0x8b, 0x0a, 0xb7, 0xc3, 0xef, 0x40, 0x91, 0xfd, 0x15, 0xb9, - 0xcd, 0xf3, 0x98, 0x0b, 0x4c, 0xc0, 0xf2, 0x8a, 0xb7, 0xa0, 0xc0, 0x69, 0xa6, 0xd3, 0xb0, 0x34, - 0x44, 0x63, 0xb6, 0x30, 0x3a, 0x1d, 0x92, 0x89, 0xe9, 0xab, 0xcf, 0x88, 0x39, 0xa1, 0x9c, 0x30, - 0x45, 0xa5, 0x1c, 0x08, 0x7f, 0xcd, 0x64, 0xf8, 0x32, 0x94, 0x04, 0x2b, 0x0d, 0x4b, 0xa7, 0x2f, - 0xf8, 0xe9, 0x93, 0x53, 0x04, 0x51, 0x5b, 0x4c, 0xc2, 0x3e, 0xff, 0xc4, 0xb3, 0xad, 0x70, 0x69, - 0xf9, 0x27, 0x98, 0x80, 0x7f, 0xfe, 0xb3, 0xd9, 0x83, 0xef, 0xbd, 0xc5, 0xd3, 0x9b, 0xe5, 0x62, - 0xf5, 0x2f, 0x69, 0xc8, 0xf2, 0xfd, 0xb6, 0x06, 0xa5, 0xc1, 0xe3, 0x9e, 0xac, 0x36, 0xbb, 0xc7, - 0x07, 0x6d, 0x19, 0xa5, 0x70, 0x05, 0x80, 0x0b, 0x1e, 0xb4, 0xbb, 0xf5, 0x01, 0x4a, 0x47, 0xe3, - 0x56, 0x67, 0x70, 0xe7, 0x16, 0xca, 0x44, 0x06, 0xc7, 0x42, 0x90, 0x8d, 0x03, 0x6e, 0xee, 0xa1, - 0x1c, 0x46, 0x50, 0x16, 0x0e, 0x5a, 0x8f, 0xe4, 0xe6, 0x9d, 0x5b, 0x28, 0x9f, 0x94, 0xdc, 0xdc, - 0x43, 0x2b, 0x78, 0x15, 0x8a, 0x5c, 0x72, 0xd0, 0xed, 0xb6, 0x51, 0x21, 0xf2, 0xd9, 0x1f, 0x28, - 0xad, 0xce, 0x21, 0x2a, 0x46, 0x3e, 0x0f, 0x95, 0xee, 0x71, 0x0f, 0x41, 0xe4, 0xe1, 0x48, 0xee, - 0xf7, 0xeb, 0x87, 0x32, 0x2a, 0x45, 0x88, 0x83, 0xc7, 0x03, 0xb9, 0x8f, 0xca, 0x89, 0xb0, 0x6e, - 0xee, 0xa1, 0xd5, 0xe8, 0x13, 0x72, 0xe7, 0xf8, 0x08, 0x55, 0xf0, 0x3a, 0xac, 0x8a, 0x4f, 0x84, - 0x41, 0xac, 0xcd, 0x88, 0xee, 0xdc, 0x42, 0x68, 0x1a, 0x88, 0xf0, 0xb2, 0x9e, 0x10, 0xdc, 0xb9, - 0x85, 0x70, 0xb5, 0x01, 0x39, 0xce, 0x2e, 0x8c, 0xa1, 0xd2, 0xae, 0x1f, 0xc8, 0x6d, 0xb5, 0xdb, - 0x1b, 0xb4, 0xba, 0x9d, 0x7a, 0x1b, 0xa5, 0xa6, 0x32, 0x45, 0xfe, 0xd5, 0x71, 0x4b, 0x91, 0x9b, - 0x28, 0x1d, 0x97, 0xf5, 0xe4, 0xfa, 0x40, 0x6e, 0xa2, 0x4c, 0x55, 0x83, 0xcd, 0x45, 0xe7, 0xcc, - 0xc2, 0x9d, 0x11, 0x5b, 0xe2, 0xf4, 0x92, 0x25, 0xe6, 0xbe, 0xe6, 0x96, 0xf8, 0xdb, 0x14, 0x6c, - 0x2c, 0x38, 0x6b, 0x17, 0x7e, 0xe4, 0x17, 0x90, 0x13, 0x14, 0x15, 0xd5, 0xe7, 0x93, 0x85, 0x87, - 0x36, 0x27, 0xec, 0x5c, 0x05, 0xe2, 0x76, 0xf1, 0x0a, 0x9c, 0x59, 0x52, 0x81, 0x99, 0x8b, 0xb9, - 0x20, 0x7f, 0x93, 0x02, 0x69, 0x99, 0xef, 0xd7, 0x1c, 0x14, 0xe9, 0xc4, 0x41, 0x71, 0x6f, 0x36, - 0x80, 0x2b, 0xcb, 0xe7, 0x30, 0x17, 0xc5, 0x77, 0x29, 0xb8, 0xb0, 0xb8, 0x51, 0x59, 0x18, 0xc3, - 0x7d, 0xc8, 0x8f, 0xa9, 0x7f, 0x6a, 0x87, 0xc5, 0xfa, 0xe3, 0x05, 0x25, 0x80, 0xa9, 0x67, 0x73, - 0x15, 0x58, 0xc5, 0x6b, 0x48, 0x66, 0x59, 0xb7, 0x21, 0xa2, 0x99, 0x8b, 0xf4, 0xb7, 0x69, 0x78, - 0x7b, 0xa1, 0xf3, 0x85, 0x81, 0xbe, 0x07, 0x60, 0x58, 0xce, 0xc4, 0x17, 0x05, 0x59, 0x9c, 0x4f, - 0x45, 0x2e, 0xe1, 0x7b, 0x9f, 0x9d, 0x3d, 0x13, 0x3f, 0xd2, 0x67, 0xb8, 0x1e, 0x84, 0x88, 0x03, - 0xee, 0x4e, 0x03, 0xcd, 0xf2, 0x40, 0xdf, 0x5f, 0x32, 0xd3, 0xb9, 0x5a, 0xf7, 0x29, 0x20, 0xcd, - 0x34, 0xa8, 0xe5, 0xab, 0x9e, 0xef, 0x52, 0x32, 0x36, 0xac, 0x11, 0x3f, 0x80, 0x0b, 0xfb, 0xb9, - 0x21, 0x31, 0x3d, 0xaa, 0xac, 0x09, 0x75, 0x3f, 0xd4, 0x32, 0x0b, 0x5e, 0x65, 0xdc, 0x98, 0x45, - 0x3e, 0x61, 0x21, 0xd4, 0x91, 0x45, 0xf5, 0xef, 0x2b, 0x50, 0x8a, 0xb5, 0x75, 0xf8, 0x0a, 0x94, - 0x9f, 0x90, 0x67, 0x44, 0x0d, 0x5b, 0x75, 0x91, 0x89, 0x12, 0x93, 0xf5, 0x82, 0x76, 0xfd, 0x53, - 0xd8, 0xe4, 0x10, 0x7b, 0xe2, 0x53, 0x57, 0xd5, 0x4c, 0xe2, 0x79, 0x3c, 0x69, 0x05, 0x0e, 0xc5, - 0x4c, 0xd7, 0x65, 0xaa, 0x46, 0xa8, 0xc1, 0xb7, 0x61, 0x83, 0x5b, 0x8c, 0x27, 0xa6, 0x6f, 0x38, - 0x26, 0x55, 0xd9, 0xe5, 0xc1, 0xe3, 0x07, 0x71, 0x14, 0xd9, 0x3a, 0x43, 0x1c, 0x05, 0x00, 0x16, - 0x91, 0x87, 0x9b, 0xf0, 0x1e, 0x37, 0x1b, 0x51, 0x8b, 0xba, 0xc4, 0xa7, 0x2a, 0xfd, 0x7a, 0x42, - 0x4c, 0x4f, 0x25, 0x96, 0xae, 0x9e, 0x12, 0xef, 0x54, 0xda, 0x64, 0x0e, 0x0e, 0xd2, 0x52, 0x4a, - 0xb9, 0xc4, 0x80, 0x87, 0x01, 0x4e, 0xe6, 0xb0, 0xba, 0xa5, 0x7f, 0x41, 0xbc, 0x53, 0xbc, 0x0f, - 0x17, 0xb8, 0x17, 0xcf, 0x77, 0x0d, 0x6b, 0xa4, 0x6a, 0xa7, 0x54, 0x7b, 0xaa, 0x4e, 0xfc, 0xe1, - 0x5d, 0xe9, 0x9d, 0xf8, 0xf7, 0x79, 0x84, 0x7d, 0x8e, 0x69, 0x30, 0xc8, 0xb1, 0x3f, 0xbc, 0x8b, - 0xfb, 0x50, 0x66, 0x8b, 0x31, 0x36, 0xbe, 0xa1, 0xea, 0xd0, 0x76, 0x79, 0x65, 0xa9, 0x2c, 0xd8, - 0xd9, 0xb1, 0x0c, 0xd6, 0xba, 0x81, 0xc1, 0x91, 0xad, 0xd3, 0xfd, 0x5c, 0xbf, 0x27, 0xcb, 0x4d, - 0xa5, 0x14, 0x7a, 0x79, 0x60, 0xbb, 0x8c, 0x50, 0x23, 0x3b, 0x4a, 0x70, 0x49, 0x10, 0x6a, 0x64, - 0x87, 0xe9, 0xbd, 0x0d, 0x1b, 0x9a, 0x26, 0xe6, 0x6c, 0x68, 0x6a, 0xd0, 0xe2, 0x7b, 0x12, 0x4a, - 0x24, 0x4b, 0xd3, 0x0e, 0x05, 0x20, 0xe0, 0xb8, 0x87, 0x3f, 0x87, 0xb7, 0xa7, 0xc9, 0x8a, 0x1b, - 0xae, 0xcf, 0xcd, 0x72, 0xd6, 0xf4, 0x36, 0x6c, 0x38, 0x67, 0xf3, 0x86, 0x38, 0xf1, 0x45, 0xe7, - 0x6c, 0xd6, 0xec, 0x23, 0x7e, 0x6d, 0x73, 0xa9, 0x46, 0x7c, 0xaa, 0x4b, 0x17, 0xe3, 0xe8, 0x98, - 0x02, 0xef, 0x02, 0xd2, 0x34, 0x95, 0x5a, 0xe4, 0xc4, 0xa4, 0x2a, 0x71, 0xa9, 0x45, 0x3c, 0xe9, - 0x72, 0x1c, 0x5c, 0xd1, 0x34, 0x99, 0x6b, 0xeb, 0x5c, 0x89, 0xaf, 0xc1, 0xba, 0x7d, 0xf2, 0x44, - 0x13, 0xcc, 0x52, 0x1d, 0x97, 0x0e, 0x8d, 0x17, 0xd2, 0x87, 0x3c, 0x4d, 0x6b, 0x4c, 0xc1, 0x79, - 0xd5, 0xe3, 0x62, 0xfc, 0x09, 0x20, 0xcd, 0x3b, 0x25, 0xae, 0xc3, 0x4b, 0xbb, 0xe7, 0x10, 0x8d, - 0x4a, 0x1f, 0x09, 0xa8, 0x90, 0x77, 0x42, 0x31, 0x63, 0xb6, 0xf7, 0xdc, 0x18, 0xfa, 0xa1, 0xc7, - 0xab, 0x82, 0xd9, 0x5c, 0x16, 0x78, 0xdb, 0x01, 0xe4, 0x9c, 0x3a, 0xc9, 0x0f, 0xef, 0x70, 0x58, - 0xc5, 0x39, 0x75, 0xe2, 0xdf, 0x7d, 0x04, 0x9b, 0x13, 0xcb, 0xb0, 0x7c, 0xea, 0x3a, 0x2e, 0x65, - 0xed, 0xbe, 0xd8, 0xb3, 0xd2, 0xbf, 0x57, 0x96, 0x34, 0xec, 0xc7, 0x71, 0xb4, 0xa0, 0x8a, 0xb2, - 0x31, 0x99, 0x17, 0x56, 0xf7, 0xa1, 0x1c, 0x67, 0x10, 0x2e, 0x82, 0xe0, 0x10, 0x4a, 0xb1, 0x6a, - 0xdc, 0xe8, 0x36, 0x59, 0x1d, 0xfd, 0x4a, 0x46, 0x69, 0x56, 0xcf, 0xdb, 0xad, 0x81, 0xac, 0x2a, - 0xc7, 0x9d, 0x41, 0xeb, 0x48, 0x46, 0x99, 0x6b, 0xc5, 0xc2, 0x7f, 0x56, 0xd0, 0xcb, 0x97, 0x2f, - 0x5f, 0xa6, 0x1f, 0x66, 0x0b, 0x1f, 0xa3, 0xab, 0xd5, 0xef, 0xd3, 0x50, 0x49, 0x76, 0xd2, 0xf8, - 0xe7, 0x70, 0x31, 0xbc, 0xf6, 0x7a, 0xd4, 0x57, 0x9f, 0x1b, 0x2e, 0xa7, 0xf6, 0x98, 0x88, 0x5e, - 0x34, 0x5a, 0x95, 0xcd, 0x00, 0xd5, 0xa7, 0xfe, 0x97, 0x86, 0xcb, 0x88, 0x3b, 0x26, 0x3e, 0x6e, - 0xc3, 0x65, 0xcb, 0x56, 0x3d, 0x9f, 0x58, 0x3a, 0x71, 0x75, 0x75, 0xfa, 0xe0, 0xa0, 0x12, 0x4d, - 0xa3, 0x9e, 0x67, 0x8b, 0x92, 0x12, 0x79, 0x79, 0xd7, 0xb2, 0xfb, 0x01, 0x78, 0x7a, 0xd6, 0xd6, - 0x03, 0xe8, 0x0c, 0x83, 0x32, 0xcb, 0x18, 0xf4, 0x0e, 0x14, 0xc7, 0xc4, 0x51, 0xa9, 0xe5, 0xbb, - 0x67, 0xbc, 0xff, 0x2b, 0x28, 0x85, 0x31, 0x71, 0x64, 0x36, 0x7e, 0x73, 0x2b, 0x91, 0xcc, 0x66, - 0x01, 0x15, 0x1f, 0x66, 0x0b, 0x45, 0x04, 0xd5, 0x7f, 0x66, 0xa0, 0x1c, 0xef, 0x07, 0x59, 0x7b, - 0xad, 0xf1, 0xb3, 0x3f, 0xc5, 0x4f, 0x87, 0x0f, 0x5e, 0xd9, 0x3d, 0xd6, 0x1a, 0xac, 0x28, 0xec, - 0xe7, 0x45, 0x97, 0xa6, 0x08, 0x4b, 0x56, 0x90, 0xd9, 0x79, 0x40, 0x45, 0xef, 0x5f, 0x50, 0x82, - 0x11, 0x3e, 0x84, 0xfc, 0x13, 0x8f, 0xfb, 0xce, 0x73, 0xdf, 0x1f, 0xbe, 0xda, 0xf7, 0xc3, 0x3e, - 0x77, 0x5e, 0x7c, 0xd8, 0x57, 0x3b, 0x5d, 0xe5, 0xa8, 0xde, 0x56, 0x02, 0x73, 0x7c, 0x09, 0xb2, - 0x26, 0xf9, 0xe6, 0x2c, 0x59, 0x3e, 0xb8, 0xe8, 0xbc, 0x8b, 0x70, 0x09, 0xb2, 0xcf, 0x29, 0x79, - 0x9a, 0x3c, 0xb4, 0xb9, 0xe8, 0x0d, 0x6e, 0x86, 0x5d, 0xc8, 0xf1, 0x7c, 0x61, 0x80, 0x20, 0x63, - 0xe8, 0x2d, 0x5c, 0x80, 0x6c, 0xa3, 0xab, 0xb0, 0x0d, 0x81, 0xa0, 0x2c, 0xa4, 0x6a, 0xaf, 0x25, - 0x37, 0x64, 0x94, 0xae, 0xde, 0x86, 0xbc, 0x48, 0x02, 0xdb, 0x2c, 0x51, 0x1a, 0xd0, 0x5b, 0xc1, - 0x30, 0xf0, 0x91, 0x0a, 0xb5, 0xc7, 0x47, 0x07, 0xb2, 0x82, 0xd2, 0xc9, 0xa5, 0xce, 0xa2, 0x5c, - 0xd5, 0x83, 0x72, 0xbc, 0x21, 0xfc, 0x51, 0x58, 0x56, 0xfd, 0x6b, 0x0a, 0x4a, 0xb1, 0x06, 0x8f, - 0xb5, 0x16, 0xc4, 0x34, 0xed, 0xe7, 0x2a, 0x31, 0x0d, 0xe2, 0x05, 0xd4, 0x00, 0x2e, 0xaa, 0x33, - 0xc9, 0x79, 0x97, 0xee, 0x47, 0xda, 0x22, 0x39, 0x94, 0xaf, 0xfe, 0x29, 0x05, 0x68, 0xb6, 0x45, - 0x9c, 0x09, 0x33, 0xf5, 0x53, 0x86, 0x59, 0xfd, 0x63, 0x0a, 0x2a, 0xc9, 0xbe, 0x70, 0x26, 0xbc, - 0x2b, 0x3f, 0x69, 0x78, 0xff, 0x48, 0xc3, 0x6a, 0xa2, 0x1b, 0x3c, 0x6f, 0x74, 0x5f, 0xc3, 0xba, - 0xa1, 0xd3, 0xb1, 0x63, 0xfb, 0xd4, 0xd2, 0xce, 0x54, 0x93, 0x3e, 0xa3, 0xa6, 0x54, 0xe5, 0x87, - 0xc6, 0xee, 0xab, 0xfb, 0xcd, 0x5a, 0x6b, 0x6a, 0xd7, 0x66, 0x66, 0xfb, 0x1b, 0xad, 0xa6, 0x7c, - 0xd4, 0xeb, 0x0e, 0xe4, 0x4e, 0xe3, 0xb1, 0x7a, 0xdc, 0xf9, 0x65, 0xa7, 0xfb, 0x65, 0x47, 0x41, - 0xc6, 0x0c, 0xec, 0x0d, 0x6e, 0xfb, 0x1e, 0xa0, 0xd9, 0xa0, 0xf0, 0x45, 0x58, 0x14, 0x16, 0x7a, - 0x0b, 0x6f, 0xc0, 0x5a, 0xa7, 0xab, 0xf6, 0x5b, 0x4d, 0x59, 0x95, 0x1f, 0x3c, 0x90, 0x1b, 0x83, - 0xbe, 0xb8, 0x80, 0x47, 0xe8, 0x41, 0x62, 0x83, 0x57, 0xff, 0x90, 0x81, 0x8d, 0x05, 0x91, 0xe0, - 0x7a, 0xd0, 0xfb, 0x8b, 0xeb, 0xc8, 0x8d, 0xf3, 0x44, 0x5f, 0x63, 0xdd, 0x45, 0x8f, 0xb8, 0x7e, - 0x70, 0x55, 0xf8, 0x04, 0x58, 0x96, 0x2c, 0xdf, 0x18, 0x1a, 0xd4, 0x0d, 0xde, 0x2b, 0xc4, 0x85, - 0x60, 0x6d, 0x2a, 0x17, 0x4f, 0x16, 0x3f, 0x03, 0xec, 0xd8, 0x9e, 0xe1, 0x1b, 0xcf, 0xa8, 0x6a, - 0x58, 0xe1, 0xe3, 0x06, 0xbb, 0x20, 0x64, 0x15, 0x14, 0x6a, 0x5a, 0x96, 0x1f, 0xa1, 0x2d, 0x3a, - 0x22, 0x33, 0x68, 0x76, 0x98, 0x67, 0x14, 0x14, 0x6a, 0x22, 0xf4, 0x15, 0x28, 0xeb, 0xf6, 0x84, - 0xb5, 0x5b, 0x02, 0xc7, 0x6a, 0x47, 0x4a, 0x29, 0x09, 0x59, 0x04, 0x09, 0xfa, 0xe1, 0xe9, 0xab, - 0x4a, 0x59, 0x29, 0x09, 0x99, 0x80, 0x5c, 0x85, 0x35, 0x32, 0x1a, 0xb9, 0xcc, 0x79, 0xe8, 0x48, - 0x74, 0xf8, 0x95, 0x48, 0xcc, 0x81, 0x5b, 0x0f, 0xa1, 0x10, 0xe6, 0x81, 0x95, 0x6a, 0x96, 0x09, - 0xd5, 0x11, 0x6f, 0x5b, 0xe9, 0x9d, 0xa2, 0x52, 0xb0, 0x42, 0xe5, 0x15, 0x28, 0x1b, 0x9e, 0x3a, - 0x7d, 0x64, 0x4d, 0x6f, 0xa7, 0x77, 0x0a, 0x4a, 0xc9, 0xf0, 0xa2, 0x57, 0xb5, 0xea, 0x77, 0x69, - 0xa8, 0x24, 0x1f, 0x89, 0x71, 0x13, 0x0a, 0xa6, 0xad, 0x11, 0x4e, 0x2d, 0xf1, 0x0b, 0xc5, 0xce, - 0x6b, 0xde, 0x95, 0x6b, 0xed, 0x00, 0xaf, 0x44, 0x96, 0x5b, 0x7f, 0x4b, 0x41, 0x21, 0x14, 0xe3, - 0x0b, 0x90, 0x75, 0x88, 0x7f, 0xca, 0xdd, 0xe5, 0x0e, 0xd2, 0x28, 0xa5, 0xf0, 0x31, 0x93, 0x7b, - 0x0e, 0xb1, 0x38, 0x05, 0x02, 0x39, 0x1b, 0xb3, 0x75, 0x35, 0x29, 0xd1, 0xf9, 0xf5, 0xc1, 0x1e, - 0x8f, 0xa9, 0xe5, 0x7b, 0xe1, 0xba, 0x06, 0xf2, 0x46, 0x20, 0xc6, 0xd7, 0x61, 0xdd, 0x77, 0x89, - 0x61, 0x26, 0xb0, 0x59, 0x8e, 0x45, 0xa1, 0x22, 0x02, 0xef, 0xc3, 0xa5, 0xd0, 0xaf, 0x4e, 0x7d, - 0xa2, 0x9d, 0x52, 0x7d, 0x6a, 0x94, 0xe7, 0x2f, 0x90, 0x17, 0x03, 0x40, 0x33, 0xd0, 0x87, 0xb6, - 0xd5, 0xef, 0x53, 0xb0, 0x1e, 0x5e, 0x78, 0xf4, 0x28, 0x59, 0x47, 0x00, 0xc4, 0xb2, 0x6c, 0x3f, - 0x9e, 0xae, 0x79, 0x2a, 0xcf, 0xd9, 0xd5, 0xea, 0x91, 0x91, 0x12, 0x73, 0xb0, 0x35, 0x06, 0x98, - 0x6a, 0x96, 0xa6, 0xed, 0x32, 0x94, 0x82, 0x5f, 0x00, 0xf8, 0xcf, 0x48, 0xe2, 0x8a, 0x0c, 0x42, - 0xc4, 0x6e, 0x46, 0x78, 0x13, 0x72, 0x27, 0x74, 0x64, 0x58, 0xc1, 0xbb, 0xa4, 0x18, 0x84, 0xaf, - 0x9d, 0xd9, 0xe8, 0xb5, 0xf3, 0xe0, 0x77, 0x29, 0xd8, 0xd0, 0xec, 0xf1, 0x6c, 0xbc, 0x07, 0x68, - 0xe6, 0x9e, 0xee, 0x7d, 0x91, 0xfa, 0xea, 0xfe, 0xc8, 0xf0, 0x4f, 0x27, 0x27, 0x35, 0xcd, 0x1e, - 0xef, 0x8e, 0x6c, 0x93, 0x58, 0xa3, 0xe9, 0xef, 0x60, 0xfc, 0x1f, 0xed, 0xc6, 0x88, 0x5a, 0x37, - 0x46, 0x76, 0xec, 0x57, 0xb1, 0x7b, 0xd3, 0x7f, 0xbf, 0x4d, 0x67, 0x0e, 0x7b, 0x07, 0x7f, 0x4e, - 0x6f, 0x1d, 0x8a, 0x6f, 0xf5, 0xc2, 0xdc, 0x28, 0x74, 0x68, 0x52, 0x8d, 0xcd, 0xf7, 0x7f, 0x01, - 0x00, 0x00, 0xff, 0xff, 0x8e, 0x54, 0xe7, 0xef, 0x60, 0x1b, 0x00, 0x00, + // 2519 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0xdd, 0x6e, 0x1b, 0xc7, + 0x15, 0x0e, 0x7f, 0x45, 0x1e, 0x52, 0xd4, 0x68, 0xa4, 0xd8, 0x6b, 0xe5, 0xc7, 0x32, 0xf3, 0x63, + 0xd9, 0x69, 0xa8, 0x40, 0xb1, 0x1d, 0x47, 0x29, 0xd2, 0x52, 0xe4, 0x5a, 0xa1, 0x4a, 0x91, 0xec, + 0x92, 0x6a, 0x7e, 0x6e, 0x16, 0xa3, 0xdd, 0x21, 0xb9, 0xf6, 0x72, 0x77, 0xb3, 0xbb, 0xb4, 0xad, + 0xa0, 0x17, 0x06, 0x7a, 0x55, 0xa0, 0x0f, 0x50, 0x14, 0x45, 0x2f, 0x72, 0x13, 0xa0, 0x0f, 0x50, + 0x20, 0x77, 0x7d, 0x82, 0x02, 0x79, 0x83, 0xa2, 0x28, 0xd0, 0x3e, 0x46, 0x31, 0x33, 0xbb, 0xcb, + 0x5d, 0xfe, 0xc4, 0x6a, 0x80, 0x38, 0x57, 0xe4, 0x7c, 0xe7, 0x3b, 0x67, 0xce, 0x9c, 0x39, 0x33, + 0x73, 0x66, 0x16, 0x76, 0x47, 0xb6, 0x3d, 0x32, 0xe9, 0xbe, 0xe3, 0xda, 0xbe, 0x7d, 0x3e, 0x1d, + 0xee, 0xeb, 0xd4, 0xd3, 0x5c, 0xc3, 0xf1, 0x6d, 0xb7, 0xc6, 0x31, 0xbc, 0x21, 0x18, 0xb5, 0x90, + 0x51, 0x3d, 0x85, 0xcd, 0x07, 0x86, 0x49, 0x9b, 0x11, 0xb1, 0x4f, 0x7d, 0x7c, 0x1f, 0xb2, 0x43, + 0xc3, 0xa4, 0x52, 0x6a, 0x37, 0xb3, 0x57, 0x3a, 0x78, 0xb3, 0x36, 0xa7, 0x54, 0x4b, 0x6a, 0xf4, + 0x18, 0xac, 0x70, 0x8d, 0xea, 0xbf, 0xb3, 0xb0, 0xb5, 0x44, 0x8a, 0x31, 0x64, 0x2d, 0x32, 0x61, + 0x16, 0x53, 0x7b, 0x45, 0x85, 0xff, 0xc7, 0x12, 0xac, 0x39, 0x44, 0x7b, 0x44, 0x46, 0x54, 0x4a, + 0x73, 0x38, 0x6c, 0xe2, 0xd7, 0x01, 0x74, 0xea, 0x50, 0x4b, 0xa7, 0x96, 0x76, 0x21, 0x65, 0x76, + 0x33, 0x7b, 0x45, 0x25, 0x86, 0xe0, 0x77, 0x60, 0xd3, 0x99, 0x9e, 0x9b, 0x86, 0xa6, 0xc6, 0x68, + 0xb0, 0x9b, 0xd9, 0xcb, 0x29, 0x48, 0x08, 0x9a, 0x33, 0xf2, 0x4d, 0xd8, 0x78, 0x42, 0xc9, 0xa3, + 0x38, 0xb5, 0xc4, 0xa9, 0x15, 0x06, 0xc7, 0x88, 0x0d, 0x28, 0x4f, 0xa8, 0xe7, 0x91, 0x11, 0x55, + 0xfd, 0x0b, 0x87, 0x4a, 0x59, 0x3e, 0xfa, 0xdd, 0x85, 0xd1, 0xcf, 0x8f, 0xbc, 0x14, 0x68, 0x0d, + 0x2e, 0x1c, 0x8a, 0xeb, 0x50, 0xa4, 0xd6, 0x74, 0x22, 0x2c, 0xe4, 0x56, 0xc4, 0x4f, 0xb6, 0xa6, + 0x93, 0x79, 0x2b, 0x05, 0xa6, 0x16, 0x98, 0x58, 0xf3, 0xa8, 0xfb, 0xd8, 0xd0, 0xa8, 0x94, 0xe7, + 0x06, 0x6e, 0x2e, 0x18, 0xe8, 0x0b, 0xf9, 0xbc, 0x8d, 0x50, 0x0f, 0x37, 0xa0, 0x48, 0x9f, 0xfa, + 0xd4, 0xf2, 0x0c, 0xdb, 0x92, 0xd6, 0xb8, 0x91, 0xb7, 0x96, 0xcc, 0x22, 0x35, 0xf5, 0x79, 0x13, + 0x33, 0x3d, 0x7c, 0x0f, 0xd6, 0x6c, 0xc7, 0x37, 0x6c, 0xcb, 0x93, 0x0a, 0xbb, 0xa9, 0xbd, 0xd2, + 0xc1, 0xab, 0x4b, 0x13, 0xa1, 0x2b, 0x38, 0x4a, 0x48, 0xc6, 0x2d, 0x40, 0x9e, 0x3d, 0x75, 0x35, + 0xaa, 0x6a, 0xb6, 0x4e, 0x55, 0xc3, 0x1a, 0xda, 0x52, 0x91, 0x1b, 0xb8, 0xbe, 0x38, 0x10, 0x4e, + 0x6c, 0xd8, 0x3a, 0x6d, 0x59, 0x43, 0x5b, 0xa9, 0x78, 0x89, 0x36, 0xbe, 0x02, 0x79, 0xef, 0xc2, + 0xf2, 0xc9, 0x53, 0xa9, 0xcc, 0x33, 0x24, 0x68, 0x55, 0xbf, 0xcd, 0xc3, 0xc6, 0x65, 0x52, 0xec, + 0x23, 0xc8, 0x0d, 0xd9, 0x28, 0xa5, 0xf4, 0xff, 0x13, 0x03, 0xa1, 0x93, 0x0c, 0x62, 0xfe, 0x07, + 0x06, 0xb1, 0x0e, 0x25, 0x8b, 0x7a, 0x3e, 0xd5, 0x45, 0x46, 0x64, 0x2e, 0x99, 0x53, 0x20, 0x94, + 0x16, 0x53, 0x2a, 0xfb, 0x83, 0x52, 0xea, 0x33, 0xd8, 0x88, 0x5c, 0x52, 0x5d, 0x62, 0x8d, 0xc2, + 0xdc, 0xdc, 0x7f, 0x9e, 0x27, 0x35, 0x39, 0xd4, 0x53, 0x98, 0x9a, 0x52, 0xa1, 0x89, 0x36, 0x6e, + 0x02, 0xd8, 0x16, 0xb5, 0x87, 0xaa, 0x4e, 0x35, 0x53, 0x2a, 0xac, 0x88, 0x52, 0x97, 0x51, 0x16, + 0xa2, 0x64, 0x0b, 0x54, 0x33, 0xf1, 0x87, 0xb3, 0x54, 0x5b, 0x5b, 0x91, 0x29, 0xa7, 0x62, 0x91, + 0x2d, 0x64, 0xdb, 0x19, 0x54, 0x5c, 0xca, 0xf2, 0x9e, 0xea, 0xc1, 0xc8, 0x8a, 0xdc, 0x89, 0xda, + 0x73, 0x47, 0xa6, 0x04, 0x6a, 0x62, 0x60, 0xeb, 0x6e, 0xbc, 0x89, 0xdf, 0x80, 0x08, 0x50, 0x79, + 0x5a, 0x01, 0xdf, 0x85, 0xca, 0x21, 0xd8, 0x21, 0x13, 0xba, 0xf3, 0x15, 0x54, 0x92, 0xe1, 0xc1, + 0xdb, 0x90, 0xf3, 0x7c, 0xe2, 0xfa, 0x3c, 0x0b, 0x73, 0x8a, 0x68, 0x60, 0x04, 0x19, 0x6a, 0xe9, + 0x7c, 0x97, 0xcb, 0x29, 0xec, 0x2f, 0xfe, 0xe5, 0x6c, 0xc0, 0x19, 0x3e, 0xe0, 0xb7, 0x17, 0x67, + 0x34, 0x61, 0x79, 0x7e, 0xdc, 0x3b, 0x1f, 0xc0, 0x7a, 0x62, 0x00, 0x97, 0xed, 0xba, 0xfa, 0x5b, + 0x78, 0x79, 0xa9, 0x69, 0xfc, 0x19, 0x6c, 0x4f, 0x2d, 0xc3, 0xf2, 0xa9, 0xeb, 0xb8, 0x94, 0x65, + 0xac, 0xe8, 0x4a, 0xfa, 0xcf, 0xda, 0x8a, 0x9c, 0x3b, 0x8b, 0xb3, 0x85, 0x15, 0x65, 0x6b, 0xba, + 0x08, 0xde, 0x2e, 0x16, 0xfe, 0xbb, 0x86, 0x9e, 0x3d, 0x7b, 0xf6, 0x2c, 0x5d, 0xfd, 0x63, 0x1e, + 0xb6, 0x97, 0xad, 0x99, 0xa5, 0xcb, 0xf7, 0x0a, 0xe4, 0xad, 0xe9, 0xe4, 0x9c, 0xba, 0x3c, 0x48, + 0x39, 0x25, 0x68, 0xe1, 0x3a, 0xe4, 0x4c, 0x72, 0x4e, 0x4d, 0x29, 0xbb, 0x9b, 0xda, 0xab, 0x1c, + 0xbc, 0x73, 0xa9, 0x55, 0x59, 0x6b, 0x33, 0x15, 0x45, 0x68, 0xe2, 0x8f, 0x21, 0x1b, 0x6c, 0xd1, + 0xcc, 0xc2, 0xed, 0xcb, 0x59, 0x60, 0x6b, 0x49, 0xe1, 0x7a, 0xf8, 0x15, 0x28, 0xb2, 0x5f, 0x91, + 0x1b, 0x79, 0xee, 0x73, 0x81, 0x01, 0x2c, 0x2f, 0xf0, 0x0e, 0x14, 0xf8, 0x32, 0xd1, 0x69, 0x78, + 0xb4, 0x45, 0x6d, 0x96, 0x58, 0x3a, 0x1d, 0x92, 0xa9, 0xe9, 0xab, 0x8f, 0x89, 0x39, 0xa5, 0x3c, + 0xe1, 0x8b, 0x4a, 0x39, 0x00, 0x7f, 0xc3, 0x30, 0x7c, 0x1d, 0x4a, 0x62, 0x55, 0x19, 0x96, 0x4e, + 0x9f, 0xf2, 0xdd, 0x33, 0xa7, 0x88, 0x85, 0xd6, 0x62, 0x08, 0xeb, 0xfe, 0xa1, 0x67, 0x5b, 0x61, + 0x6a, 0xf2, 0x2e, 0x18, 0xc0, 0xbb, 0xff, 0x60, 0x7e, 0xe3, 0x7e, 0x6d, 0xf9, 0xf0, 0xe6, 0x73, + 0xaa, 0xfa, 0xb7, 0x34, 0x64, 0xf9, 0x7e, 0xb1, 0x01, 0xa5, 0xc1, 0xe7, 0x3d, 0x59, 0x6d, 0x76, + 0xcf, 0x8e, 0xda, 0x32, 0x4a, 0xe1, 0x0a, 0x00, 0x07, 0x1e, 0xb4, 0xbb, 0xf5, 0x01, 0x4a, 0x47, + 0xed, 0x56, 0x67, 0x70, 0xef, 0x0e, 0xca, 0x44, 0x0a, 0x67, 0x02, 0xc8, 0xc6, 0x09, 0xef, 0x1f, + 0xa0, 0x1c, 0x46, 0x50, 0x16, 0x06, 0x5a, 0x9f, 0xc9, 0xcd, 0x7b, 0x77, 0x50, 0x3e, 0x89, 0xbc, + 0x7f, 0x80, 0xd6, 0xf0, 0x3a, 0x14, 0x39, 0x72, 0xd4, 0xed, 0xb6, 0x51, 0x21, 0xb2, 0xd9, 0x1f, + 0x28, 0xad, 0xce, 0x31, 0x2a, 0x46, 0x36, 0x8f, 0x95, 0xee, 0x59, 0x0f, 0x41, 0x64, 0xe1, 0x54, + 0xee, 0xf7, 0xeb, 0xc7, 0x32, 0x2a, 0x45, 0x8c, 0xa3, 0xcf, 0x07, 0x72, 0x1f, 0x95, 0x13, 0x6e, + 0xbd, 0x7f, 0x80, 0xd6, 0xa3, 0x2e, 0xe4, 0xce, 0xd9, 0x29, 0xaa, 0xe0, 0x4d, 0x58, 0x17, 0x5d, + 0x84, 0x4e, 0x6c, 0xcc, 0x41, 0xf7, 0xee, 0x20, 0x34, 0x73, 0x44, 0x58, 0xd9, 0x4c, 0x00, 0xf7, + 0xee, 0x20, 0x5c, 0x6d, 0x40, 0x8e, 0x67, 0x17, 0xc6, 0x50, 0x69, 0xd7, 0x8f, 0xe4, 0xb6, 0xda, + 0xed, 0x0d, 0x5a, 0xdd, 0x4e, 0xbd, 0x8d, 0x52, 0x33, 0x4c, 0x91, 0x7f, 0x7d, 0xd6, 0x52, 0xe4, + 0x26, 0x4a, 0xc7, 0xb1, 0x9e, 0x5c, 0x1f, 0xc8, 0x4d, 0x94, 0xa9, 0x6a, 0xb0, 0xbd, 0x6c, 0x9f, + 0x5c, 0xba, 0x32, 0x62, 0x53, 0x9c, 0x5e, 0x31, 0xc5, 0xdc, 0xd6, 0xc2, 0x14, 0x7f, 0x9d, 0x82, + 0xad, 0x25, 0x67, 0xc5, 0xd2, 0x4e, 0x7e, 0x01, 0x39, 0x91, 0xa2, 0xe2, 0xf4, 0xbc, 0xb5, 0xf4, + 0xd0, 0xe1, 0x09, 0xbb, 0x70, 0x82, 0x72, 0xbd, 0x78, 0x05, 0x91, 0x59, 0x51, 0x41, 0x30, 0x13, + 0x0b, 0x4e, 0xfe, 0x2e, 0x05, 0xd2, 0x2a, 0xdb, 0xcf, 0xd9, 0x28, 0xd2, 0x89, 0x8d, 0xe2, 0xa3, + 0x79, 0x07, 0x6e, 0xac, 0x1e, 0xc3, 0x82, 0x17, 0xdf, 0xa4, 0xe0, 0xca, 0xf2, 0x42, 0x6b, 0xa9, + 0x0f, 0x1f, 0x43, 0x7e, 0x42, 0xfd, 0xb1, 0x1d, 0x16, 0x1b, 0x6f, 0x2f, 0x39, 0xc2, 0x98, 0x78, + 0x3e, 0x56, 0x81, 0x56, 0xfc, 0x0c, 0xcc, 0xac, 0xaa, 0x96, 0x84, 0x37, 0x0b, 0x9e, 0xfe, 0x3e, + 0x0d, 0x2f, 0x2f, 0x35, 0xbe, 0xd4, 0xd1, 0xd7, 0x00, 0x0c, 0xcb, 0x99, 0xfa, 0xa2, 0xa0, 0x10, + 0xfb, 0x53, 0x91, 0x23, 0x7c, 0xed, 0xb3, 0xbd, 0x67, 0xea, 0x47, 0xf2, 0x0c, 0x97, 0x83, 0x80, + 0x38, 0xe1, 0xfe, 0xcc, 0xd1, 0x2c, 0x77, 0xf4, 0xf5, 0x15, 0x23, 0x5d, 0x38, 0xab, 0xdf, 0x03, + 0xa4, 0x99, 0x06, 0xb5, 0x7c, 0xd5, 0xf3, 0x5d, 0x4a, 0x26, 0x86, 0x35, 0xe2, 0x1b, 0x70, 0xe1, + 0x30, 0x37, 0x24, 0xa6, 0x47, 0x95, 0x0d, 0x21, 0xee, 0x87, 0x52, 0xa6, 0xc1, 0xcf, 0x38, 0x37, + 0xa6, 0x91, 0x4f, 0x68, 0x08, 0x71, 0xa4, 0x51, 0xfd, 0xb6, 0x00, 0xa5, 0x58, 0x59, 0x8a, 0x6f, + 0x40, 0xf9, 0x21, 0x79, 0x4c, 0xd4, 0xf0, 0xaa, 0x21, 0x22, 0x51, 0x62, 0x58, 0x2f, 0xb8, 0x6e, + 0xbc, 0x07, 0xdb, 0x9c, 0x62, 0x4f, 0x7d, 0xea, 0xaa, 0x9a, 0x49, 0x3c, 0x8f, 0x07, 0xad, 0xc0, + 0xa9, 0x98, 0xc9, 0xba, 0x4c, 0xd4, 0x08, 0x25, 0xf8, 0x2e, 0x6c, 0x71, 0x8d, 0xc9, 0xd4, 0xf4, + 0x0d, 0xc7, 0xa4, 0x2a, 0xbb, 0xfc, 0x78, 0x7c, 0x23, 0x8e, 0x3c, 0xdb, 0x64, 0x8c, 0xd3, 0x80, + 0xc0, 0x3c, 0xf2, 0x70, 0x13, 0x5e, 0xe3, 0x6a, 0x23, 0x6a, 0x51, 0x97, 0xf8, 0x54, 0xa5, 0x5f, + 0x4e, 0x89, 0xe9, 0xa9, 0xc4, 0xd2, 0xd5, 0x31, 0xf1, 0xc6, 0xd2, 0x36, 0x33, 0x70, 0x94, 0x96, + 0x52, 0xca, 0x35, 0x46, 0x3c, 0x0e, 0x78, 0x32, 0xa7, 0xd5, 0x2d, 0xfd, 0x13, 0xe2, 0x8d, 0xf1, + 0x21, 0x5c, 0xe1, 0x56, 0x3c, 0xdf, 0x35, 0xac, 0x91, 0xaa, 0x8d, 0xa9, 0xf6, 0x48, 0x9d, 0xfa, + 0xc3, 0xfb, 0xd2, 0x2b, 0xf1, 0xfe, 0xb9, 0x87, 0x7d, 0xce, 0x69, 0x30, 0xca, 0x99, 0x3f, 0xbc, + 0x8f, 0xfb, 0x50, 0x66, 0x93, 0x31, 0x31, 0xbe, 0xa2, 0xea, 0xd0, 0x76, 0xf9, 0xc9, 0x52, 0x59, + 0xb2, 0xb2, 0x63, 0x11, 0xac, 0x75, 0x03, 0x85, 0x53, 0x5b, 0xa7, 0x87, 0xb9, 0x7e, 0x4f, 0x96, + 0x9b, 0x4a, 0x29, 0xb4, 0xf2, 0xc0, 0x76, 0x59, 0x42, 0x8d, 0xec, 0x28, 0xc0, 0x25, 0x91, 0x50, + 0x23, 0x3b, 0x0c, 0xef, 0x5d, 0xd8, 0xd2, 0x34, 0x31, 0x66, 0x43, 0x53, 0x83, 0x2b, 0x8a, 0x27, + 0xa1, 0x44, 0xb0, 0x34, 0xed, 0x58, 0x10, 0x82, 0x1c, 0xf7, 0xf0, 0x87, 0xf0, 0xf2, 0x2c, 0x58, + 0x71, 0xc5, 0xcd, 0x85, 0x51, 0xce, 0xab, 0xde, 0x85, 0x2d, 0xe7, 0x62, 0x51, 0x11, 0x27, 0x7a, + 0x74, 0x2e, 0xe6, 0xd5, 0x3e, 0x80, 0x6d, 0x67, 0xec, 0x2c, 0xea, 0xdd, 0x8e, 0xeb, 0x61, 0x67, + 0xec, 0xcc, 0x2b, 0xbe, 0xc5, 0xef, 0xab, 0x2e, 0xd5, 0x88, 0x4f, 0x75, 0xe9, 0x6a, 0x9c, 0x1e, + 0x13, 0xe0, 0x7d, 0x40, 0x9a, 0xa6, 0x52, 0x8b, 0x9c, 0x9b, 0x54, 0x25, 0x2e, 0xb5, 0x88, 0x27, + 0x5d, 0x8f, 0x93, 0x2b, 0x9a, 0x26, 0x73, 0x69, 0x9d, 0x0b, 0xf1, 0x6d, 0xd8, 0xb4, 0xcf, 0x1f, + 0x6a, 0x22, 0x25, 0x55, 0xc7, 0xa5, 0x43, 0xe3, 0xa9, 0xf4, 0x26, 0x8f, 0xef, 0x06, 0x13, 0xf0, + 0x84, 0xec, 0x71, 0x18, 0xdf, 0x02, 0xa4, 0x79, 0x63, 0xe2, 0x3a, 0xbc, 0x26, 0xf0, 0x1c, 0xa2, + 0x51, 0xe9, 0x2d, 0x41, 0x15, 0x78, 0x27, 0x84, 0xd9, 0x92, 0xf0, 0x9e, 0x18, 0x43, 0x3f, 0xb4, + 0x78, 0x53, 0x2c, 0x09, 0x8e, 0x05, 0xd6, 0xf6, 0x00, 0xb1, 0x50, 0x24, 0x3a, 0xde, 0xe3, 0xb4, + 0x8a, 0x33, 0x76, 0xe2, 0xfd, 0xbe, 0x01, 0xeb, 0x8c, 0x39, 0xeb, 0xf4, 0x96, 0xa8, 0x67, 0x9c, + 0x71, 0xac, 0xc7, 0x1f, 0xad, 0xb4, 0xac, 0x1e, 0x42, 0x39, 0x9e, 0x9f, 0xb8, 0x08, 0x22, 0x43, + 0x51, 0x8a, 0x9d, 0xf5, 0x8d, 0x6e, 0x93, 0x9d, 0xd2, 0x5f, 0xc8, 0x28, 0xcd, 0xaa, 0x85, 0x76, + 0x6b, 0x20, 0xab, 0xca, 0x59, 0x67, 0xd0, 0x3a, 0x95, 0x51, 0x26, 0x56, 0x96, 0x9e, 0x64, 0x0b, + 0x6f, 0xa3, 0x9b, 0xd5, 0xef, 0xd2, 0x50, 0x49, 0xde, 0x33, 0xf0, 0xcf, 0xe1, 0x6a, 0xf8, 0x28, + 0xe0, 0x51, 0x5f, 0x7d, 0x62, 0xb8, 0x7c, 0xe1, 0x4c, 0x88, 0xa8, 0xb3, 0xa3, 0xa9, 0xdb, 0x0e, + 0x58, 0x7d, 0xea, 0x7f, 0x6a, 0xb8, 0x6c, 0x59, 0x4c, 0x88, 0x8f, 0xdb, 0x70, 0xdd, 0xb2, 0x55, + 0xcf, 0x27, 0x96, 0x4e, 0x5c, 0x5d, 0x9d, 0x3d, 0xc7, 0xa8, 0x44, 0xd3, 0xa8, 0xe7, 0xd9, 0xe2, + 0xc0, 0x8a, 0xac, 0xbc, 0x6a, 0xd9, 0xfd, 0x80, 0x3c, 0xdb, 0xc9, 0xeb, 0x01, 0x75, 0x2e, 0xcd, + 0x32, 0xab, 0xd2, 0xec, 0x15, 0x28, 0x4e, 0x88, 0xa3, 0x52, 0xcb, 0x77, 0x2f, 0x78, 0x75, 0x59, + 0x50, 0x0a, 0x13, 0xe2, 0xc8, 0xac, 0xfd, 0x42, 0x8a, 0xfc, 0x93, 0x6c, 0xa1, 0x80, 0x8a, 0x27, + 0xd9, 0x42, 0x11, 0x41, 0xf5, 0x5f, 0x19, 0x28, 0xc7, 0xab, 0x4d, 0x56, 0xbc, 0x6b, 0xfc, 0x64, + 0x49, 0xf1, 0xbd, 0xe7, 0x8d, 0xef, 0xad, 0x4d, 0x6b, 0x0d, 0x76, 0xe4, 0x1c, 0xe6, 0x45, 0x0d, + 0xa8, 0x08, 0x4d, 0x76, 0xdc, 0xb3, 0xdd, 0x86, 0x8a, 0x7b, 0x4d, 0x41, 0x09, 0x5a, 0xf8, 0x18, + 0xf2, 0x0f, 0x3d, 0x6e, 0x3b, 0xcf, 0x6d, 0xbf, 0xf9, 0xfd, 0xb6, 0x4f, 0xfa, 0xdc, 0x78, 0xf1, + 0xa4, 0xaf, 0x76, 0xba, 0xca, 0x69, 0xbd, 0xad, 0x04, 0xea, 0xf8, 0x1a, 0x64, 0x4d, 0xf2, 0xd5, + 0x45, 0xf2, 0x70, 0xe2, 0xd0, 0x65, 0x27, 0xe1, 0x1a, 0x64, 0x9f, 0x50, 0xf2, 0x28, 0x79, 0x24, + 0x70, 0xe8, 0x47, 0x5c, 0x0c, 0xfb, 0x90, 0xe3, 0xf1, 0xc2, 0x00, 0x41, 0xc4, 0xd0, 0x4b, 0xb8, + 0x00, 0xd9, 0x46, 0x57, 0x61, 0x0b, 0x02, 0x41, 0x59, 0xa0, 0x6a, 0xaf, 0x25, 0x37, 0x64, 0x94, + 0xae, 0xde, 0x85, 0xbc, 0x08, 0x02, 0x5b, 0x2c, 0x51, 0x18, 0xd0, 0x4b, 0x41, 0x33, 0xb0, 0x91, + 0x0a, 0xa5, 0x67, 0xa7, 0x47, 0xb2, 0x82, 0xd2, 0xc9, 0xa9, 0xce, 0xa2, 0x5c, 0xd5, 0x83, 0x72, + 0xbc, 0xdc, 0x7c, 0x31, 0x57, 0xc9, 0xbf, 0xa7, 0xa0, 0x14, 0x2b, 0x1f, 0x59, 0xe1, 0x42, 0x4c, + 0xd3, 0x7e, 0xa2, 0x12, 0xd3, 0x20, 0x5e, 0x90, 0x1a, 0xc0, 0xa1, 0x3a, 0x43, 0x2e, 0x3b, 0x75, + 0x2f, 0x68, 0x89, 0xe4, 0x50, 0xbe, 0xfa, 0x97, 0x14, 0xa0, 0xf9, 0x02, 0x74, 0xce, 0xcd, 0xd4, + 0x4f, 0xe9, 0x66, 0xf5, 0xcf, 0x29, 0xa8, 0x24, 0xab, 0xce, 0x39, 0xf7, 0x6e, 0xfc, 0xa4, 0xee, + 0xfd, 0x33, 0x0d, 0xeb, 0x89, 0x5a, 0xf3, 0xb2, 0xde, 0x7d, 0x09, 0x9b, 0x86, 0x4e, 0x27, 0x8e, + 0xed, 0x53, 0x4b, 0xbb, 0x50, 0x4d, 0xfa, 0x98, 0x9a, 0x52, 0x95, 0x6f, 0x1a, 0xfb, 0xdf, 0x5f, + 0xcd, 0xd6, 0x5a, 0x33, 0xbd, 0x36, 0x53, 0x3b, 0xdc, 0x6a, 0x35, 0xe5, 0xd3, 0x5e, 0x77, 0x20, + 0x77, 0x1a, 0x9f, 0xab, 0x67, 0x9d, 0x5f, 0x75, 0xba, 0x9f, 0x76, 0x14, 0x64, 0xcc, 0xd1, 0x7e, + 0xc4, 0x65, 0xdf, 0x03, 0x34, 0xef, 0x14, 0xbe, 0x0a, 0xcb, 0xdc, 0x42, 0x2f, 0xe1, 0x2d, 0xd8, + 0xe8, 0x74, 0xd5, 0x7e, 0xab, 0x29, 0xab, 0xf2, 0x83, 0x07, 0x72, 0x63, 0xd0, 0x17, 0xd7, 0xfb, + 0x88, 0x3d, 0x48, 0x2c, 0xf0, 0xea, 0x9f, 0x32, 0xb0, 0xb5, 0xc4, 0x13, 0x5c, 0x0f, 0x6e, 0x16, + 0xe2, 0xb2, 0xf3, 0xee, 0x65, 0xbc, 0xaf, 0xb1, 0x82, 0xa0, 0x47, 0x5c, 0x3f, 0xb8, 0x88, 0xdc, + 0x02, 0x16, 0x25, 0xcb, 0x37, 0x86, 0x06, 0x75, 0x83, 0xd7, 0x10, 0x71, 0xdd, 0xd8, 0x98, 0xe1, + 0xe2, 0x41, 0xe4, 0x67, 0x80, 0x1d, 0xdb, 0x33, 0x7c, 0xe3, 0x31, 0x55, 0x0d, 0x2b, 0x7c, 0x3a, + 0x61, 0xd7, 0x8f, 0xac, 0x82, 0x42, 0x49, 0xcb, 0xf2, 0x23, 0xb6, 0x45, 0x47, 0x64, 0x8e, 0xcd, + 0x36, 0xf3, 0x8c, 0x82, 0x42, 0x49, 0xc4, 0xbe, 0x01, 0x65, 0xdd, 0x9e, 0xb2, 0x9a, 0x4c, 0xf0, + 0xd8, 0xd9, 0x91, 0x52, 0x4a, 0x02, 0x8b, 0x28, 0x41, 0xb5, 0x3d, 0x7b, 0xb3, 0x29, 0x2b, 0x25, + 0x81, 0x09, 0xca, 0x4d, 0xd8, 0x20, 0xa3, 0x91, 0xcb, 0x8c, 0x87, 0x86, 0xc4, 0xfd, 0xa1, 0x12, + 0xc1, 0x9c, 0xb8, 0x73, 0x02, 0x85, 0x30, 0x0e, 0xec, 0xa8, 0x66, 0x91, 0x50, 0x1d, 0xf1, 0x6e, + 0x97, 0xde, 0x2b, 0x2a, 0x05, 0x2b, 0x14, 0xde, 0x80, 0xb2, 0xe1, 0xa9, 0xb3, 0x27, 0xe8, 0xf4, + 0x6e, 0x7a, 0xaf, 0xa0, 0x94, 0x0c, 0x2f, 0x7a, 0xbe, 0xab, 0x7e, 0x93, 0x86, 0x4a, 0xf2, 0x09, + 0x1d, 0x37, 0xa1, 0x60, 0xda, 0x1a, 0xe1, 0xa9, 0x25, 0xbe, 0xdf, 0xec, 0x3d, 0xe7, 0xd5, 0xbd, + 0xd6, 0x0e, 0xf8, 0x4a, 0xa4, 0xb9, 0xf3, 0x8f, 0x14, 0x14, 0x42, 0x18, 0x5f, 0x81, 0xac, 0x43, + 0xfc, 0x31, 0x37, 0x97, 0x3b, 0x4a, 0xa3, 0x94, 0xc2, 0xdb, 0x0c, 0xf7, 0x1c, 0x62, 0xf1, 0x14, + 0x08, 0x70, 0xd6, 0x66, 0xf3, 0x6a, 0x52, 0xa2, 0xf3, 0xcb, 0x89, 0x3d, 0x99, 0x50, 0xcb, 0xf7, + 0xc2, 0x79, 0x0d, 0xf0, 0x46, 0x00, 0xe3, 0x77, 0x60, 0xd3, 0x77, 0x89, 0x61, 0x26, 0xb8, 0x59, + 0xce, 0x45, 0xa1, 0x20, 0x22, 0x1f, 0xc2, 0xb5, 0xd0, 0xae, 0x4e, 0x7d, 0xa2, 0x8d, 0xa9, 0x3e, + 0x53, 0xca, 0xf3, 0xf7, 0xd9, 0xab, 0x01, 0xa1, 0x19, 0xc8, 0x43, 0xdd, 0xea, 0x77, 0x29, 0xd8, + 0x0c, 0xaf, 0x53, 0x7a, 0x14, 0xac, 0x53, 0x00, 0x62, 0x59, 0xb6, 0x1f, 0x0f, 0xd7, 0x62, 0x2a, + 0x2f, 0xe8, 0xd5, 0xea, 0x91, 0x92, 0x12, 0x33, 0xb0, 0x33, 0x01, 0x98, 0x49, 0x56, 0x86, 0xed, + 0x3a, 0x94, 0x82, 0xef, 0x23, 0xfc, 0x23, 0x9b, 0xb8, 0x80, 0x83, 0x80, 0xd8, 0xbd, 0x0b, 0x6f, + 0x43, 0xee, 0x9c, 0x8e, 0x0c, 0x2b, 0x78, 0xf5, 0x14, 0x8d, 0xf0, 0x25, 0x37, 0x1b, 0xbd, 0xe4, + 0x1e, 0xfd, 0x21, 0x05, 0x5b, 0x9a, 0x3d, 0x99, 0xf7, 0xf7, 0x08, 0xcd, 0xbd, 0x02, 0x78, 0x9f, + 0xa4, 0xbe, 0xf8, 0x78, 0x64, 0xf8, 0xe3, 0xe9, 0x79, 0x4d, 0xb3, 0x27, 0xfb, 0x23, 0xdb, 0x24, + 0xd6, 0x68, 0xf6, 0x95, 0x90, 0xff, 0xd1, 0xde, 0x1d, 0x51, 0xeb, 0xdd, 0x91, 0x1d, 0xfb, 0x66, + 0xf8, 0xd1, 0xec, 0xef, 0xd7, 0xe9, 0xcc, 0x71, 0xef, 0xe8, 0xaf, 0xe9, 0x9d, 0x63, 0xd1, 0x57, + 0x2f, 0x8c, 0x8d, 0x42, 0x87, 0x26, 0xd5, 0xd8, 0x78, 0xff, 0x17, 0x00, 0x00, 0xff, 0xff, 0x0c, + 0xab, 0xb6, 0x37, 0x7e, 0x1c, 0x00, 0x00, } diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.proto b/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.proto new file mode 100644 index 0000000..4d4fb37 --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.proto @@ -0,0 +1,849 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// The messages in this file describe the definitions found in .proto files. +// A valid .proto file can be translated directly to a FileDescriptorProto +// without any other information (e.g. without reading its imports). + + +syntax = "proto2"; + +package google.protobuf; +option go_package = "github.com/golang/protobuf/protoc-gen-go/descriptor;descriptor"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "DescriptorProtos"; +option csharp_namespace = "Google.Protobuf.Reflection"; +option objc_class_prefix = "GPB"; + +// descriptor.proto must be optimized for speed because reflection-based +// algorithms don't work during bootstrapping. +option optimize_for = SPEED; + +// The protocol compiler can output a FileDescriptorSet containing the .proto +// files it parses. +message FileDescriptorSet { + repeated FileDescriptorProto file = 1; +} + +// Describes a complete .proto file. +message FileDescriptorProto { + optional string name = 1; // file name, relative to root of source tree + optional string package = 2; // e.g. "foo", "foo.bar", etc. + + // Names of files imported by this file. + repeated string dependency = 3; + // Indexes of the public imported files in the dependency list above. + repeated int32 public_dependency = 10; + // Indexes of the weak imported files in the dependency list. + // For Google-internal migration only. Do not use. + repeated int32 weak_dependency = 11; + + // All top-level definitions in this file. + repeated DescriptorProto message_type = 4; + repeated EnumDescriptorProto enum_type = 5; + repeated ServiceDescriptorProto service = 6; + repeated FieldDescriptorProto extension = 7; + + optional FileOptions options = 8; + + // This field contains optional information about the original source code. + // You may safely remove this entire field without harming runtime + // functionality of the descriptors -- the information is needed only by + // development tools. + optional SourceCodeInfo source_code_info = 9; + + // The syntax of the proto file. + // The supported values are "proto2" and "proto3". + optional string syntax = 12; +} + +// Describes a message type. +message DescriptorProto { + optional string name = 1; + + repeated FieldDescriptorProto field = 2; + repeated FieldDescriptorProto extension = 6; + + repeated DescriptorProto nested_type = 3; + repeated EnumDescriptorProto enum_type = 4; + + message ExtensionRange { + optional int32 start = 1; + optional int32 end = 2; + + optional ExtensionRangeOptions options = 3; + } + repeated ExtensionRange extension_range = 5; + + repeated OneofDescriptorProto oneof_decl = 8; + + optional MessageOptions options = 7; + + // Range of reserved tag numbers. Reserved tag numbers may not be used by + // fields or extension ranges in the same message. Reserved ranges may + // not overlap. + message ReservedRange { + optional int32 start = 1; // Inclusive. + optional int32 end = 2; // Exclusive. + } + repeated ReservedRange reserved_range = 9; + // Reserved field names, which may not be used by fields in the same message. + // A given name may only be reserved once. + repeated string reserved_name = 10; +} + +message ExtensionRangeOptions { + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +// Describes a field within a message. +message FieldDescriptorProto { + enum Type { + // 0 is reserved for errors. + // Order is weird for historical reasons. + TYPE_DOUBLE = 1; + TYPE_FLOAT = 2; + // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT64 if + // negative values are likely. + TYPE_INT64 = 3; + TYPE_UINT64 = 4; + // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT32 if + // negative values are likely. + TYPE_INT32 = 5; + TYPE_FIXED64 = 6; + TYPE_FIXED32 = 7; + TYPE_BOOL = 8; + TYPE_STRING = 9; + // Tag-delimited aggregate. + // Group type is deprecated and not supported in proto3. However, Proto3 + // implementations should still be able to parse the group wire format and + // treat group fields as unknown fields. + TYPE_GROUP = 10; + TYPE_MESSAGE = 11; // Length-delimited aggregate. + + // New in version 2. + TYPE_BYTES = 12; + TYPE_UINT32 = 13; + TYPE_ENUM = 14; + TYPE_SFIXED32 = 15; + TYPE_SFIXED64 = 16; + TYPE_SINT32 = 17; // Uses ZigZag encoding. + TYPE_SINT64 = 18; // Uses ZigZag encoding. + }; + + enum Label { + // 0 is reserved for errors + LABEL_OPTIONAL = 1; + LABEL_REQUIRED = 2; + LABEL_REPEATED = 3; + }; + + optional string name = 1; + optional int32 number = 3; + optional Label label = 4; + + // If type_name is set, this need not be set. If both this and type_name + // are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP. + optional Type type = 5; + + // For message and enum types, this is the name of the type. If the name + // starts with a '.', it is fully-qualified. Otherwise, C++-like scoping + // rules are used to find the type (i.e. first the nested types within this + // message are searched, then within the parent, on up to the root + // namespace). + optional string type_name = 6; + + // For extensions, this is the name of the type being extended. It is + // resolved in the same manner as type_name. + optional string extendee = 2; + + // For numeric types, contains the original text representation of the value. + // For booleans, "true" or "false". + // For strings, contains the default text contents (not escaped in any way). + // For bytes, contains the C escaped value. All bytes >= 128 are escaped. + // TODO(kenton): Base-64 encode? + optional string default_value = 7; + + // If set, gives the index of a oneof in the containing type's oneof_decl + // list. This field is a member of that oneof. + optional int32 oneof_index = 9; + + // JSON name of this field. The value is set by protocol compiler. If the + // user has set a "json_name" option on this field, that option's value + // will be used. Otherwise, it's deduced from the field's name by converting + // it to camelCase. + optional string json_name = 10; + + optional FieldOptions options = 8; +} + +// Describes a oneof. +message OneofDescriptorProto { + optional string name = 1; + optional OneofOptions options = 2; +} + +// Describes an enum type. +message EnumDescriptorProto { + optional string name = 1; + + repeated EnumValueDescriptorProto value = 2; + + optional EnumOptions options = 3; +} + +// Describes a value within an enum. +message EnumValueDescriptorProto { + optional string name = 1; + optional int32 number = 2; + + optional EnumValueOptions options = 3; +} + +// Describes a service. +message ServiceDescriptorProto { + optional string name = 1; + repeated MethodDescriptorProto method = 2; + + optional ServiceOptions options = 3; +} + +// Describes a method of a service. +message MethodDescriptorProto { + optional string name = 1; + + // Input and output type names. These are resolved in the same way as + // FieldDescriptorProto.type_name, but must refer to a message type. + optional string input_type = 2; + optional string output_type = 3; + + optional MethodOptions options = 4; + + // Identifies if client streams multiple client messages + optional bool client_streaming = 5 [default=false]; + // Identifies if server streams multiple server messages + optional bool server_streaming = 6 [default=false]; +} + + +// =================================================================== +// Options + +// Each of the definitions above may have "options" attached. These are +// just annotations which may cause code to be generated slightly differently +// or may contain hints for code that manipulates protocol messages. +// +// Clients may define custom options as extensions of the *Options messages. +// These extensions may not yet be known at parsing time, so the parser cannot +// store the values in them. Instead it stores them in a field in the *Options +// message called uninterpreted_option. This field must have the same name +// across all *Options messages. We then use this field to populate the +// extensions when we build a descriptor, at which point all protos have been +// parsed and so all extensions are known. +// +// Extension numbers for custom options may be chosen as follows: +// * For options which will only be used within a single application or +// organization, or for experimental options, use field numbers 50000 +// through 99999. It is up to you to ensure that you do not use the +// same number for multiple options. +// * For options which will be published and used publicly by multiple +// independent entities, e-mail protobuf-global-extension-registry@google.com +// to reserve extension numbers. Simply provide your project name (e.g. +// Objective-C plugin) and your project website (if available) -- there's no +// need to explain how you intend to use them. Usually you only need one +// extension number. You can declare multiple options with only one extension +// number by putting them in a sub-message. See the Custom Options section of +// the docs for examples: +// https://developers.google.com/protocol-buffers/docs/proto#options +// If this turns out to be popular, a web service will be set up +// to automatically assign option numbers. + + +message FileOptions { + + // Sets the Java package where classes generated from this .proto will be + // placed. By default, the proto package is used, but this is often + // inappropriate because proto packages do not normally start with backwards + // domain names. + optional string java_package = 1; + + + // If set, all the classes from the .proto file are wrapped in a single + // outer class with the given name. This applies to both Proto1 + // (equivalent to the old "--one_java_file" option) and Proto2 (where + // a .proto always translates to a single class, but you may want to + // explicitly choose the class name). + optional string java_outer_classname = 8; + + // If set true, then the Java code generator will generate a separate .java + // file for each top-level message, enum, and service defined in the .proto + // file. Thus, these types will *not* be nested inside the outer class + // named by java_outer_classname. However, the outer class will still be + // generated to contain the file's getDescriptor() method as well as any + // top-level extensions defined in the file. + optional bool java_multiple_files = 10 [default=false]; + + // This option does nothing. + optional bool java_generate_equals_and_hash = 20 [deprecated=true]; + + // If set true, then the Java2 code generator will generate code that + // throws an exception whenever an attempt is made to assign a non-UTF-8 + // byte sequence to a string field. + // Message reflection will do the same. + // However, an extension field still accepts non-UTF-8 byte sequences. + // This option has no effect on when used with the lite runtime. + optional bool java_string_check_utf8 = 27 [default=false]; + + + // Generated classes can be optimized for speed or code size. + enum OptimizeMode { + SPEED = 1; // Generate complete code for parsing, serialization, + // etc. + CODE_SIZE = 2; // Use ReflectionOps to implement these methods. + LITE_RUNTIME = 3; // Generate code using MessageLite and the lite runtime. + } + optional OptimizeMode optimize_for = 9 [default=SPEED]; + + // Sets the Go package where structs generated from this .proto will be + // placed. If omitted, the Go package will be derived from the following: + // - The basename of the package import path, if provided. + // - Otherwise, the package statement in the .proto file, if present. + // - Otherwise, the basename of the .proto file, without extension. + optional string go_package = 11; + + + + // Should generic services be generated in each language? "Generic" services + // are not specific to any particular RPC system. They are generated by the + // main code generators in each language (without additional plugins). + // Generic services were the only kind of service generation supported by + // early versions of google.protobuf. + // + // Generic services are now considered deprecated in favor of using plugins + // that generate code specific to your particular RPC system. Therefore, + // these default to false. Old code which depends on generic services should + // explicitly set them to true. + optional bool cc_generic_services = 16 [default=false]; + optional bool java_generic_services = 17 [default=false]; + optional bool py_generic_services = 18 [default=false]; + optional bool php_generic_services = 42 [default=false]; + + // Is this file deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for everything in the file, or it will be completely ignored; in the very + // least, this is a formalization for deprecating files. + optional bool deprecated = 23 [default=false]; + + // Enables the use of arenas for the proto messages in this file. This applies + // only to generated classes for C++. + optional bool cc_enable_arenas = 31 [default=false]; + + + // Sets the objective c class prefix which is prepended to all objective c + // generated classes from this .proto. There is no default. + optional string objc_class_prefix = 36; + + // Namespace for generated classes; defaults to the package. + optional string csharp_namespace = 37; + + // By default Swift generators will take the proto package and CamelCase it + // replacing '.' with underscore and use that to prefix the types/symbols + // defined. When this options is provided, they will use this value instead + // to prefix the types/symbols defined. + optional string swift_prefix = 39; + + // Sets the php class prefix which is prepended to all php generated classes + // from this .proto. Default is empty. + optional string php_class_prefix = 40; + + // Use this option to change the namespace of php generated classes. Default + // is empty. When this option is empty, the package name will be used for + // determining the namespace. + optional string php_namespace = 41; + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; + + reserved 38; +} + +message MessageOptions { + // Set true to use the old proto1 MessageSet wire format for extensions. + // This is provided for backwards-compatibility with the MessageSet wire + // format. You should not use this for any other reason: It's less + // efficient, has fewer features, and is more complicated. + // + // The message must be defined exactly as follows: + // message Foo { + // option message_set_wire_format = true; + // extensions 4 to max; + // } + // Note that the message cannot have any defined fields; MessageSets only + // have extensions. + // + // All extensions of your type must be singular messages; e.g. they cannot + // be int32s, enums, or repeated messages. + // + // Because this is an option, the above two restrictions are not enforced by + // the protocol compiler. + optional bool message_set_wire_format = 1 [default=false]; + + // Disables the generation of the standard "descriptor()" accessor, which can + // conflict with a field of the same name. This is meant to make migration + // from proto1 easier; new code should avoid fields named "descriptor". + optional bool no_standard_descriptor_accessor = 2 [default=false]; + + // Is this message deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the message, or it will be completely ignored; in the very least, + // this is a formalization for deprecating messages. + optional bool deprecated = 3 [default=false]; + + // Whether the message is an automatically generated map entry type for the + // maps field. + // + // For maps fields: + // map map_field = 1; + // The parsed descriptor looks like: + // message MapFieldEntry { + // option map_entry = true; + // optional KeyType key = 1; + // optional ValueType value = 2; + // } + // repeated MapFieldEntry map_field = 1; + // + // Implementations may choose not to generate the map_entry=true message, but + // use a native map in the target language to hold the keys and values. + // The reflection APIs in such implementions still need to work as + // if the field is a repeated message field. + // + // NOTE: Do not set the option in .proto files. Always use the maps syntax + // instead. The option should only be implicitly set by the proto compiler + // parser. + optional bool map_entry = 7; + + reserved 8; // javalite_serializable + reserved 9; // javanano_as_lite + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message FieldOptions { + // The ctype option instructs the C++ code generator to use a different + // representation of the field than it normally would. See the specific + // options below. This option is not yet implemented in the open source + // release -- sorry, we'll try to include it in a future version! + optional CType ctype = 1 [default = STRING]; + enum CType { + // Default mode. + STRING = 0; + + CORD = 1; + + STRING_PIECE = 2; + } + // The packed option can be enabled for repeated primitive fields to enable + // a more efficient representation on the wire. Rather than repeatedly + // writing the tag and type for each element, the entire array is encoded as + // a single length-delimited blob. In proto3, only explicit setting it to + // false will avoid using packed encoding. + optional bool packed = 2; + + // The jstype option determines the JavaScript type used for values of the + // field. The option is permitted only for 64 bit integral and fixed types + // (int64, uint64, sint64, fixed64, sfixed64). A field with jstype JS_STRING + // is represented as JavaScript string, which avoids loss of precision that + // can happen when a large value is converted to a floating point JavaScript. + // Specifying JS_NUMBER for the jstype causes the generated JavaScript code to + // use the JavaScript "number" type. The behavior of the default option + // JS_NORMAL is implementation dependent. + // + // This option is an enum to permit additional types to be added, e.g. + // goog.math.Integer. + optional JSType jstype = 6 [default = JS_NORMAL]; + enum JSType { + // Use the default type. + JS_NORMAL = 0; + + // Use JavaScript strings. + JS_STRING = 1; + + // Use JavaScript numbers. + JS_NUMBER = 2; + } + + // Should this field be parsed lazily? Lazy applies only to message-type + // fields. It means that when the outer message is initially parsed, the + // inner message's contents will not be parsed but instead stored in encoded + // form. The inner message will actually be parsed when it is first accessed. + // + // This is only a hint. Implementations are free to choose whether to use + // eager or lazy parsing regardless of the value of this option. However, + // setting this option true suggests that the protocol author believes that + // using lazy parsing on this field is worth the additional bookkeeping + // overhead typically needed to implement it. + // + // This option does not affect the public interface of any generated code; + // all method signatures remain the same. Furthermore, thread-safety of the + // interface is not affected by this option; const methods remain safe to + // call from multiple threads concurrently, while non-const methods continue + // to require exclusive access. + // + // + // Note that implementations may choose not to check required fields within + // a lazy sub-message. That is, calling IsInitialized() on the outer message + // may return true even if the inner message has missing required fields. + // This is necessary because otherwise the inner message would have to be + // parsed in order to perform the check, defeating the purpose of lazy + // parsing. An implementation which chooses not to check required fields + // must be consistent about it. That is, for any particular sub-message, the + // implementation must either *always* check its required fields, or *never* + // check its required fields, regardless of whether or not the message has + // been parsed. + optional bool lazy = 5 [default=false]; + + // Is this field deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for accessors, or it will be completely ignored; in the very least, this + // is a formalization for deprecating fields. + optional bool deprecated = 3 [default=false]; + + // For Google-internal migration only. Do not use. + optional bool weak = 10 [default=false]; + + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; + + reserved 4; // removed jtype +} + +message OneofOptions { + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message EnumOptions { + + // Set this option to true to allow mapping different tag names to the same + // value. + optional bool allow_alias = 2; + + // Is this enum deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the enum, or it will be completely ignored; in the very least, this + // is a formalization for deprecating enums. + optional bool deprecated = 3 [default=false]; + + reserved 5; // javanano_as_lite + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message EnumValueOptions { + // Is this enum value deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the enum value, or it will be completely ignored; in the very least, + // this is a formalization for deprecating enum values. + optional bool deprecated = 1 [default=false]; + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message ServiceOptions { + + // Note: Field numbers 1 through 32 are reserved for Google's internal RPC + // framework. We apologize for hoarding these numbers to ourselves, but + // we were already using them long before we decided to release Protocol + // Buffers. + + // Is this service deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the service, or it will be completely ignored; in the very least, + // this is a formalization for deprecating services. + optional bool deprecated = 33 [default=false]; + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message MethodOptions { + + // Note: Field numbers 1 through 32 are reserved for Google's internal RPC + // framework. We apologize for hoarding these numbers to ourselves, but + // we were already using them long before we decided to release Protocol + // Buffers. + + // Is this method deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the method, or it will be completely ignored; in the very least, + // this is a formalization for deprecating methods. + optional bool deprecated = 33 [default=false]; + + // Is this method side-effect-free (or safe in HTTP parlance), or idempotent, + // or neither? HTTP based RPC implementation may choose GET verb for safe + // methods, and PUT verb for idempotent methods instead of the default POST. + enum IdempotencyLevel { + IDEMPOTENCY_UNKNOWN = 0; + NO_SIDE_EFFECTS = 1; // implies idempotent + IDEMPOTENT = 2; // idempotent, but may have side effects + } + optional IdempotencyLevel idempotency_level = + 34 [default=IDEMPOTENCY_UNKNOWN]; + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + + +// A message representing a option the parser does not recognize. This only +// appears in options protos created by the compiler::Parser class. +// DescriptorPool resolves these when building Descriptor objects. Therefore, +// options protos in descriptor objects (e.g. returned by Descriptor::options(), +// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions +// in them. +message UninterpretedOption { + // The name of the uninterpreted option. Each string represents a segment in + // a dot-separated name. is_extension is true iff a segment represents an + // extension (denoted with parentheses in options specs in .proto files). + // E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents + // "foo.(bar.baz).qux". + message NamePart { + required string name_part = 1; + required bool is_extension = 2; + } + repeated NamePart name = 2; + + // The value of the uninterpreted option, in whatever type the tokenizer + // identified it as during parsing. Exactly one of these should be set. + optional string identifier_value = 3; + optional uint64 positive_int_value = 4; + optional int64 negative_int_value = 5; + optional double double_value = 6; + optional bytes string_value = 7; + optional string aggregate_value = 8; +} + +// =================================================================== +// Optional source code info + +// Encapsulates information about the original source file from which a +// FileDescriptorProto was generated. +message SourceCodeInfo { + // A Location identifies a piece of source code in a .proto file which + // corresponds to a particular definition. This information is intended + // to be useful to IDEs, code indexers, documentation generators, and similar + // tools. + // + // For example, say we have a file like: + // message Foo { + // optional string foo = 1; + // } + // Let's look at just the field definition: + // optional string foo = 1; + // ^ ^^ ^^ ^ ^^^ + // a bc de f ghi + // We have the following locations: + // span path represents + // [a,i) [ 4, 0, 2, 0 ] The whole field definition. + // [a,b) [ 4, 0, 2, 0, 4 ] The label (optional). + // [c,d) [ 4, 0, 2, 0, 5 ] The type (string). + // [e,f) [ 4, 0, 2, 0, 1 ] The name (foo). + // [g,h) [ 4, 0, 2, 0, 3 ] The number (1). + // + // Notes: + // - A location may refer to a repeated field itself (i.e. not to any + // particular index within it). This is used whenever a set of elements are + // logically enclosed in a single code segment. For example, an entire + // extend block (possibly containing multiple extension definitions) will + // have an outer location whose path refers to the "extensions" repeated + // field without an index. + // - Multiple locations may have the same path. This happens when a single + // logical declaration is spread out across multiple places. The most + // obvious example is the "extend" block again -- there may be multiple + // extend blocks in the same scope, each of which will have the same path. + // - A location's span is not always a subset of its parent's span. For + // example, the "extendee" of an extension declaration appears at the + // beginning of the "extend" block and is shared by all extensions within + // the block. + // - Just because a location's span is a subset of some other location's span + // does not mean that it is a descendent. For example, a "group" defines + // both a type and a field in a single declaration. Thus, the locations + // corresponding to the type and field and their components will overlap. + // - Code which tries to interpret locations should probably be designed to + // ignore those that it doesn't understand, as more types of locations could + // be recorded in the future. + repeated Location location = 1; + message Location { + // Identifies which part of the FileDescriptorProto was defined at this + // location. + // + // Each element is a field number or an index. They form a path from + // the root FileDescriptorProto to the place where the definition. For + // example, this path: + // [ 4, 3, 2, 7, 1 ] + // refers to: + // file.message_type(3) // 4, 3 + // .field(7) // 2, 7 + // .name() // 1 + // This is because FileDescriptorProto.message_type has field number 4: + // repeated DescriptorProto message_type = 4; + // and DescriptorProto.field has field number 2: + // repeated FieldDescriptorProto field = 2; + // and FieldDescriptorProto.name has field number 1: + // optional string name = 1; + // + // Thus, the above path gives the location of a field name. If we removed + // the last element: + // [ 4, 3, 2, 7 ] + // this path refers to the whole field declaration (from the beginning + // of the label to the terminating semicolon). + repeated int32 path = 1 [packed=true]; + + // Always has exactly three or four elements: start line, start column, + // end line (optional, otherwise assumed same as start line), end column. + // These are packed into a single field for efficiency. Note that line + // and column numbers are zero-based -- typically you will want to add + // 1 to each before displaying to a user. + repeated int32 span = 2 [packed=true]; + + // If this SourceCodeInfo represents a complete declaration, these are any + // comments appearing before and after the declaration which appear to be + // attached to the declaration. + // + // A series of line comments appearing on consecutive lines, with no other + // tokens appearing on those lines, will be treated as a single comment. + // + // leading_detached_comments will keep paragraphs of comments that appear + // before (but not connected to) the current element. Each paragraph, + // separated by empty lines, will be one comment element in the repeated + // field. + // + // Only the comment content is provided; comment markers (e.g. //) are + // stripped out. For block comments, leading whitespace and an asterisk + // will be stripped from the beginning of each line other than the first. + // Newlines are included in the output. + // + // Examples: + // + // optional int32 foo = 1; // Comment attached to foo. + // // Comment attached to bar. + // optional int32 bar = 2; + // + // optional string baz = 3; + // // Comment attached to baz. + // // Another line attached to baz. + // + // // Comment attached to qux. + // // + // // Another line attached to qux. + // optional double qux = 4; + // + // // Detached comment for corge. This is not leading or trailing comments + // // to qux or corge because there are blank lines separating it from + // // both. + // + // // Detached comment for corge paragraph 2. + // + // optional string corge = 5; + // /* Block comment attached + // * to corge. Leading asterisks + // * will be removed. */ + // /* Block comment attached to + // * grault. */ + // optional int32 grault = 6; + // + // // ignored detached comments. + optional string leading_comments = 3; + optional string trailing_comments = 4; + repeated string leading_detached_comments = 6; + } +} + +// Describes the relationship between generated code and its original source +// file. A GeneratedCodeInfo message is associated with only one generated +// source file, but may contain references to different source .proto files. +message GeneratedCodeInfo { + // An Annotation connects some span of text in generated code to an element + // of its generating .proto file. + repeated Annotation annotation = 1; + message Annotation { + // Identifies the element in the original source .proto file. This field + // is formatted the same as SourceCodeInfo.Location.path. + repeated int32 path = 1 [packed=true]; + + // Identifies the filesystem path to the original source .proto. + optional string source_file = 2; + + // Identifies the starting offset in bytes in the generated code + // that relates to the identified object. + optional int32 begin = 3; + + // Identifies the ending offset in bytes in the generated code that + // relates to the identified offset. The end offset should be one past + // the last relevant byte (so the length of the text = end - begin). + optional int32 end = 4; + } +} diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/generator/generator.go b/vendor/github.com/golang/protobuf/protoc-gen-go/generator/generator.go index 211ab5d..569451f 100644 --- a/vendor/github.com/golang/protobuf/protoc-gen-go/generator/generator.go +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/generator/generator.go @@ -1984,7 +1984,7 @@ func (g *Generator) generateMessage(message *Descriptor) { case typename == "string": def = strconv.Quote(def) case typename == "[]byte": - def = "[]byte(" + strconv.Quote(def) + ")" + def = "[]byte(" + strconv.Quote(unescape(def)) + ")" kind = "var " case def == "inf", def == "-inf", def == "nan": // These names are known to, and defined by, the protocol language. @@ -2029,7 +2029,11 @@ func (g *Generator) generateMessage(message *Descriptor) { // TODO: Revisit this and consider reverting back to anonymous interfaces. for oi := range message.OneofDecl { dname := oneofDisc[int32(oi)] - g.P("type ", dname, " interface { ", dname, "() }") + g.P("type ", dname, " interface {") + g.In() + g.P(dname, "()") + g.Out() + g.P("}") } g.P() for _, field := range message.Field { @@ -2508,6 +2512,67 @@ func (g *Generator) generateMessage(message *Descriptor) { g.addInitf("%s.RegisterType((*%s)(nil), %q)", g.Pkg["proto"], ccTypeName, fullName) } +var escapeChars = [256]byte{ + 'a': '\a', 'b': '\b', 'f': '\f', 'n': '\n', 'r': '\r', 't': '\t', 'v': '\v', '\\': '\\', '"': '"', '\'': '\'', '?': '?', +} + +// unescape reverses the "C" escaping that protoc does for default values of bytes fields. +// It is best effort in that it effectively ignores malformed input. Seemingly invalid escape +// sequences are conveyed, unmodified, into the decoded result. +func unescape(s string) string { + // NB: Sadly, we can't use strconv.Unquote because protoc will escape both + // single and double quotes, but strconv.Unquote only allows one or the + // other (based on actual surrounding quotes of its input argument). + + var out []byte + for len(s) > 0 { + // regular character, or too short to be valid escape + if s[0] != '\\' || len(s) < 2 { + out = append(out, s[0]) + s = s[1:] + } else if c := escapeChars[s[1]]; c != 0 { + // escape sequence + out = append(out, c) + s = s[2:] + } else if s[1] == 'x' || s[1] == 'X' { + // hex escape, e.g. "\x80 + if len(s) < 4 { + // too short to be valid + out = append(out, s[:2]...) + s = s[2:] + continue + } + v, err := strconv.ParseUint(s[2:4], 16, 8) + if err != nil { + out = append(out, s[:4]...) + } else { + out = append(out, byte(v)) + } + s = s[4:] + } else if '0' <= s[1] && s[1] <= '7' { + // octal escape, can vary from 1 to 3 octal digits; e.g., "\0" "\40" or "\164" + // so consume up to 2 more bytes or up to end-of-string + n := len(s[1:]) - len(strings.TrimLeft(s[1:], "01234567")) + if n > 3 { + n = 3 + } + v, err := strconv.ParseUint(s[1:1+n], 8, 8) + if err != nil { + out = append(out, s[:1+n]...) + } else { + out = append(out, byte(v)) + } + s = s[1+n:] + } else { + // bad escape, just propagate the slash as-is + out = append(out, s[0]) + s = s[1:] + } + } + + return string(out) +} + func (g *Generator) generateExtension(ext *ExtensionDescriptor) { ccTypeName := ext.DescName() diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/generator/name_test.go b/vendor/github.com/golang/protobuf/protoc-gen-go/generator/name_test.go index a5ebc85..76808f3 100644 --- a/vendor/github.com/golang/protobuf/protoc-gen-go/generator/name_test.go +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/generator/name_test.go @@ -83,3 +83,32 @@ func TestGoPackageOption(t *testing.T) { } } } + +func TestUnescape(t *testing.T) { + tests := []struct { + in string + out string + }{ + // successful cases, including all kinds of escapes + {"", ""}, + {"foo bar baz frob nitz", "foo bar baz frob nitz"}, + {`\000\001\002\003\004\005\006\007`, string([]byte{0, 1, 2, 3, 4, 5, 6, 7})}, + {`\a\b\f\n\r\t\v\\\?\'\"`, string([]byte{'\a', '\b', '\f', '\n', '\r', '\t', '\v', '\\', '?', '\'', '"'})}, + {`\x10\x20\x30\x40\x50\x60\x70\x80`, string([]byte{16, 32, 48, 64, 80, 96, 112, 128})}, + // variable length octal escapes + {`\0\018\222\377\3\04\005\6\07`, string([]byte{0, 1, '8', 0222, 255, 3, 4, 5, 6, 7})}, + // malformed escape sequences left as is + {"foo \\g bar", "foo \\g bar"}, + {"foo \\xg0 bar", "foo \\xg0 bar"}, + {"\\", "\\"}, + {"\\x", "\\x"}, + {"\\xf", "\\xf"}, + {"\\777", "\\777"}, // overflows byte + } + for _, tc := range tests { + s := unescape(tc.in) + if s != tc.out { + t.Errorf("doUnescape(%q) = %q; should have been %q", tc.in, s, tc.out) + } + } +} diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/Makefile b/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/Makefile index 4095623..bc0463d 100644 --- a/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/Makefile +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/Makefile @@ -34,6 +34,7 @@ # Also we need to fix an import. regenerate: @echo WARNING! THIS RULE IS PROBABLY NOT RIGHT FOR YOUR INSTALLATION + cp $(HOME)/src/protobuf/include/google/protobuf/compiler/plugin.proto . protoc --go_out=Mgoogle/protobuf/descriptor.proto=github.com/golang/protobuf/protoc-gen-go/descriptor:../../../../.. \ -I$(HOME)/src/protobuf/include $(HOME)/src/protobuf/include/google/protobuf/compiler/plugin.proto diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.proto b/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.proto new file mode 100644 index 0000000..5b55745 --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.proto @@ -0,0 +1,167 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// +// WARNING: The plugin interface is currently EXPERIMENTAL and is subject to +// change. +// +// protoc (aka the Protocol Compiler) can be extended via plugins. A plugin is +// just a program that reads a CodeGeneratorRequest from stdin and writes a +// CodeGeneratorResponse to stdout. +// +// Plugins written using C++ can use google/protobuf/compiler/plugin.h instead +// of dealing with the raw protocol defined here. +// +// A plugin executable needs only to be placed somewhere in the path. The +// plugin should be named "protoc-gen-$NAME", and will then be used when the +// flag "--${NAME}_out" is passed to protoc. + +syntax = "proto2"; +package google.protobuf.compiler; +option java_package = "com.google.protobuf.compiler"; +option java_outer_classname = "PluginProtos"; + +option go_package = "github.com/golang/protobuf/protoc-gen-go/plugin;plugin_go"; + +import "google/protobuf/descriptor.proto"; + +// The version number of protocol compiler. +message Version { + optional int32 major = 1; + optional int32 minor = 2; + optional int32 patch = 3; + // A suffix for alpha, beta or rc release, e.g., "alpha-1", "rc2". It should + // be empty for mainline stable releases. + optional string suffix = 4; +} + +// An encoded CodeGeneratorRequest is written to the plugin's stdin. +message CodeGeneratorRequest { + // The .proto files that were explicitly listed on the command-line. The + // code generator should generate code only for these files. Each file's + // descriptor will be included in proto_file, below. + repeated string file_to_generate = 1; + + // The generator parameter passed on the command-line. + optional string parameter = 2; + + // FileDescriptorProtos for all files in files_to_generate and everything + // they import. The files will appear in topological order, so each file + // appears before any file that imports it. + // + // protoc guarantees that all proto_files will be written after + // the fields above, even though this is not technically guaranteed by the + // protobuf wire format. This theoretically could allow a plugin to stream + // in the FileDescriptorProtos and handle them one by one rather than read + // the entire set into memory at once. However, as of this writing, this + // is not similarly optimized on protoc's end -- it will store all fields in + // memory at once before sending them to the plugin. + // + // Type names of fields and extensions in the FileDescriptorProto are always + // fully qualified. + repeated FileDescriptorProto proto_file = 15; + + // The version number of protocol compiler. + optional Version compiler_version = 3; + +} + +// The plugin writes an encoded CodeGeneratorResponse to stdout. +message CodeGeneratorResponse { + // Error message. If non-empty, code generation failed. The plugin process + // should exit with status code zero even if it reports an error in this way. + // + // This should be used to indicate errors in .proto files which prevent the + // code generator from generating correct code. Errors which indicate a + // problem in protoc itself -- such as the input CodeGeneratorRequest being + // unparseable -- should be reported by writing a message to stderr and + // exiting with a non-zero status code. + optional string error = 1; + + // Represents a single generated file. + message File { + // The file name, relative to the output directory. The name must not + // contain "." or ".." components and must be relative, not be absolute (so, + // the file cannot lie outside the output directory). "/" must be used as + // the path separator, not "\". + // + // If the name is omitted, the content will be appended to the previous + // file. This allows the generator to break large files into small chunks, + // and allows the generated text to be streamed back to protoc so that large + // files need not reside completely in memory at one time. Note that as of + // this writing protoc does not optimize for this -- it will read the entire + // CodeGeneratorResponse before writing files to disk. + optional string name = 1; + + // If non-empty, indicates that the named file should already exist, and the + // content here is to be inserted into that file at a defined insertion + // point. This feature allows a code generator to extend the output + // produced by another code generator. The original generator may provide + // insertion points by placing special annotations in the file that look + // like: + // @@protoc_insertion_point(NAME) + // The annotation can have arbitrary text before and after it on the line, + // which allows it to be placed in a comment. NAME should be replaced with + // an identifier naming the point -- this is what other generators will use + // as the insertion_point. Code inserted at this point will be placed + // immediately above the line containing the insertion point (thus multiple + // insertions to the same point will come out in the order they were added). + // The double-@ is intended to make it unlikely that the generated code + // could contain things that look like insertion points by accident. + // + // For example, the C++ code generator places the following line in the + // .pb.h files that it generates: + // // @@protoc_insertion_point(namespace_scope) + // This line appears within the scope of the file's package namespace, but + // outside of any particular class. Another plugin can then specify the + // insertion_point "namespace_scope" to generate additional classes or + // other declarations that should be placed in this scope. + // + // Note that if the line containing the insertion point begins with + // whitespace, the same whitespace will be added to every line of the + // inserted text. This is useful for languages like Python, where + // indentation matters. In these languages, the insertion point comment + // should be indented the same amount as any inserted code will need to be + // in order to work correctly in that context. + // + // The code generator that generates the initial file and the one which + // inserts into it must both run as part of a single invocation of protoc. + // Code generators are executed in the order in which they appear on the + // command line. + // + // If |insertion_point| is present, |name| must also be present. + optional string insertion_point = 2; + + // The file contents. + optional string content = 15; + } + repeated File file = 15; +} diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go index d8717d5..1954e3f 100644 --- a/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: my_test/test.proto -// DO NOT EDIT! /* Package my_test is a generated protocol buffer package. diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go.golden b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go.golden index d8717d5..1954e3f 100644 --- a/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go.golden +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go.golden @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: my_test/test.proto -// DO NOT EDIT! /* Package my_test is a generated protocol buffer package. diff --git a/vendor/github.com/golang/protobuf/ptypes/any.go b/vendor/github.com/golang/protobuf/ptypes/any.go index 89e07ae..b2af97f 100644 --- a/vendor/github.com/golang/protobuf/ptypes/any.go +++ b/vendor/github.com/golang/protobuf/ptypes/any.go @@ -51,6 +51,9 @@ const googleApis = "type.googleapis.com/" // function. AnyMessageName is provided for less common use cases like filtering a // sequence of Any messages based on a set of allowed message type names. func AnyMessageName(any *any.Any) (string, error) { + if any == nil { + return "", fmt.Errorf("message is nil") + } slash := strings.LastIndex(any.TypeUrl, "/") if slash < 0 { return "", fmt.Errorf("message type url %q is invalid", any.TypeUrl) diff --git a/vendor/github.com/golang/protobuf/ptypes/any/any.pb.go b/vendor/github.com/golang/protobuf/ptypes/any/any.pb.go index 1fbaa44..f346017 100644 --- a/vendor/github.com/golang/protobuf/ptypes/any/any.pb.go +++ b/vendor/github.com/golang/protobuf/ptypes/any/any.pb.go @@ -1,11 +1,11 @@ // Code generated by protoc-gen-go. DO NOT EDIT. -// source: github.com/golang/protobuf/ptypes/any/any.proto +// source: google/protobuf/any.proto /* Package any is a generated protocol buffer package. It is generated from these files: - github.com/golang/protobuf/ptypes/any/any.proto + google/protobuf/any.proto It has these top-level messages: Any @@ -62,6 +62,16 @@ const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package // any.Unpack(foo) // ... // +// Example 4: Pack and unpack a message in Go +// +// foo := &pb.Foo{...} +// any, err := ptypes.MarshalAny(foo) +// ... +// foo := &pb.Foo{} +// if err := ptypes.UnmarshalAny(any, foo); err != nil { +// ... +// } +// // The pack methods provided by protobuf library will by default use // 'type.googleapis.com/full.type.name' as the type URL and the unpack // methods only use the fully qualified type name after the last '/' @@ -149,20 +159,20 @@ func init() { proto.RegisterType((*Any)(nil), "google.protobuf.Any") } -func init() { proto.RegisterFile("github.com/golang/protobuf/ptypes/any/any.proto", fileDescriptor0) } +func init() { proto.RegisterFile("google/protobuf/any.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 184 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4f, 0xcf, 0x2c, 0xc9, - 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xcf, 0xcf, 0x49, 0xcc, 0x4b, 0xd7, 0x2f, 0x28, - 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x2f, 0x28, 0xa9, 0x2c, 0x48, 0x2d, 0xd6, 0x4f, 0xcc, - 0xab, 0x04, 0x61, 0x3d, 0xb0, 0xb8, 0x10, 0x7f, 0x7a, 0x7e, 0x7e, 0x7a, 0x4e, 0xaa, 0x1e, 0x4c, - 0x95, 0x92, 0x19, 0x17, 0xb3, 0x63, 0x5e, 0xa5, 0x90, 0x24, 0x17, 0x07, 0x48, 0x79, 0x7c, 0x69, - 0x51, 0x8e, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0x67, 0x10, 0x3b, 0x88, 0x1f, 0x5a, 0x94, 0x23, 0x24, - 0xc2, 0xc5, 0x5a, 0x96, 0x98, 0x53, 0x9a, 0x2a, 0xc1, 0xa4, 0xc0, 0xa8, 0xc1, 0x13, 0x04, 0xe1, - 0x38, 0xe5, 0x73, 0x09, 0x27, 0xe7, 0xe7, 0xea, 0xa1, 0x19, 0xe7, 0xc4, 0xe1, 0x98, 0x57, 0x19, - 0x00, 0xe2, 0x04, 0x30, 0x46, 0xa9, 0x12, 0xe5, 0xb8, 0x45, 0x4c, 0xcc, 0xee, 0x01, 0x4e, 0xab, - 0x98, 0xe4, 0xdc, 0x21, 0x46, 0x05, 0x40, 0x95, 0xe8, 0x85, 0xa7, 0xe6, 0xe4, 0x78, 0xe7, 0xe5, - 0x97, 0xe7, 0x85, 0x80, 0x94, 0x26, 0xb1, 0x81, 0xf5, 0x1a, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, - 0x45, 0x1f, 0x1a, 0xf2, 0xf3, 0x00, 0x00, 0x00, + // 185 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4c, 0xcf, 0xcf, 0x4f, + 0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x4f, 0xcc, 0xab, 0xd4, + 0x03, 0x73, 0x84, 0xf8, 0x21, 0x52, 0x7a, 0x30, 0x29, 0x25, 0x33, 0x2e, 0x66, 0xc7, 0xbc, 0x4a, + 0x21, 0x49, 0x2e, 0x8e, 0x92, 0xca, 0x82, 0xd4, 0xf8, 0xd2, 0xa2, 0x1c, 0x09, 0x46, 0x05, 0x46, + 0x0d, 0xce, 0x20, 0x76, 0x10, 0x3f, 0xb4, 0x28, 0x47, 0x48, 0x84, 0x8b, 0xb5, 0x2c, 0x31, 0xa7, + 0x34, 0x55, 0x82, 0x49, 0x81, 0x51, 0x83, 0x27, 0x08, 0xc2, 0x71, 0xca, 0xe7, 0x12, 0x4e, 0xce, + 0xcf, 0xd5, 0x43, 0x33, 0xce, 0x89, 0xc3, 0x31, 0xaf, 0x32, 0x00, 0xc4, 0x09, 0x60, 0x8c, 0x52, + 0x4d, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xcf, 0xcf, 0x49, 0xcc, + 0x4b, 0x47, 0xb8, 0xa8, 0x00, 0x64, 0x7a, 0x31, 0xc8, 0x61, 0x8b, 0x98, 0x98, 0xdd, 0x03, 0x9c, + 0x56, 0x31, 0xc9, 0xb9, 0x43, 0x8c, 0x0a, 0x80, 0x2a, 0xd1, 0x0b, 0x4f, 0xcd, 0xc9, 0xf1, 0xce, + 0xcb, 0x2f, 0xcf, 0x0b, 0x01, 0x29, 0x4d, 0x62, 0x03, 0xeb, 0x35, 0x06, 0x04, 0x00, 0x00, 0xff, + 0xff, 0x13, 0xf8, 0xe8, 0x42, 0xdd, 0x00, 0x00, 0x00, } diff --git a/vendor/github.com/golang/protobuf/ptypes/any/any.proto b/vendor/github.com/golang/protobuf/ptypes/any/any.proto index 9bd3f50..c748667 100644 --- a/vendor/github.com/golang/protobuf/ptypes/any/any.proto +++ b/vendor/github.com/golang/protobuf/ptypes/any/any.proto @@ -74,6 +74,16 @@ option objc_class_prefix = "GPB"; // any.Unpack(foo) // ... // +// Example 4: Pack and unpack a message in Go +// +// foo := &pb.Foo{...} +// any, err := ptypes.MarshalAny(foo) +// ... +// foo := &pb.Foo{} +// if err := ptypes.UnmarshalAny(any, foo); err != nil { +// ... +// } +// // The pack methods provided by protobuf library will by default use // 'type.googleapis.com/full.type.name' as the type URL and the unpack // methods only use the fully qualified type name after the last '/' diff --git a/vendor/github.com/golang/protobuf/ptypes/duration/duration.pb.go b/vendor/github.com/golang/protobuf/ptypes/duration/duration.pb.go index fe3350b..b2410a0 100644 --- a/vendor/github.com/golang/protobuf/ptypes/duration/duration.pb.go +++ b/vendor/github.com/golang/protobuf/ptypes/duration/duration.pb.go @@ -1,11 +1,11 @@ // Code generated by protoc-gen-go. DO NOT EDIT. -// source: github.com/golang/protobuf/ptypes/duration/duration.proto +// source: google/protobuf/duration.proto /* Package duration is a generated protocol buffer package. It is generated from these files: - github.com/golang/protobuf/ptypes/duration/duration.proto + google/protobuf/duration.proto It has these top-level messages: Duration @@ -125,22 +125,20 @@ func init() { proto.RegisterType((*Duration)(nil), "google.protobuf.Duration") } -func init() { - proto.RegisterFile("github.com/golang/protobuf/ptypes/duration/duration.proto", fileDescriptor0) -} +func init() { proto.RegisterFile("google/protobuf/duration.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 189 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4c, 0xcf, 0x2c, 0xc9, - 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xcf, 0xcf, 0x49, 0xcc, 0x4b, 0xd7, 0x2f, 0x28, - 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x2f, 0x28, 0xa9, 0x2c, 0x48, 0x2d, 0xd6, 0x4f, 0x29, - 0x2d, 0x4a, 0x2c, 0xc9, 0xcc, 0xcf, 0x83, 0x33, 0xf4, 0xc0, 0x2a, 0x84, 0xf8, 0xd3, 0xf3, 0xf3, - 0xd3, 0x73, 0x52, 0xf5, 0x60, 0xea, 0x95, 0xac, 0xb8, 0x38, 0x5c, 0xa0, 0x4a, 0x84, 0x24, 0xb8, - 0xd8, 0x8b, 0x53, 0x93, 0xf3, 0xf3, 0x52, 0x8a, 0x25, 0x18, 0x15, 0x18, 0x35, 0x98, 0x83, 0x60, - 0x5c, 0x21, 0x11, 0x2e, 0xd6, 0xbc, 0xc4, 0xbc, 0xfc, 0x62, 0x09, 0x26, 0x05, 0x46, 0x0d, 0xd6, - 0x20, 0x08, 0xc7, 0xa9, 0x86, 0x4b, 0x38, 0x39, 0x3f, 0x57, 0x0f, 0xcd, 0x48, 0x27, 0x5e, 0x98, - 0x81, 0x01, 0x20, 0x91, 0x00, 0xc6, 0x28, 0x2d, 0xe2, 0xdd, 0xfb, 0x83, 0x91, 0x71, 0x11, 0x13, - 0xb3, 0x7b, 0x80, 0xd3, 0x2a, 0x26, 0x39, 0x77, 0x88, 0xb9, 0x01, 0x50, 0xa5, 0x7a, 0xe1, 0xa9, - 0x39, 0x39, 0xde, 0x79, 0xf9, 0xe5, 0x79, 0x21, 0x20, 0x2d, 0x49, 0x6c, 0x60, 0x33, 0x8c, 0x01, - 0x01, 0x00, 0x00, 0xff, 0xff, 0x45, 0x5a, 0x81, 0x3d, 0x0e, 0x01, 0x00, 0x00, + // 190 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4b, 0xcf, 0xcf, 0x4f, + 0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x4f, 0x29, 0x2d, 0x4a, + 0x2c, 0xc9, 0xcc, 0xcf, 0xd3, 0x03, 0x8b, 0x08, 0xf1, 0x43, 0xe4, 0xf5, 0x60, 0xf2, 0x4a, 0x56, + 0x5c, 0x1c, 0x2e, 0x50, 0x25, 0x42, 0x12, 0x5c, 0xec, 0xc5, 0xa9, 0xc9, 0xf9, 0x79, 0x29, 0xc5, + 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0xcc, 0x41, 0x30, 0xae, 0x90, 0x08, 0x17, 0x6b, 0x5e, 0x62, 0x5e, + 0x7e, 0xb1, 0x04, 0x93, 0x02, 0xa3, 0x06, 0x6b, 0x10, 0x84, 0xe3, 0x54, 0xc3, 0x25, 0x9c, 0x9c, + 0x9f, 0xab, 0x87, 0x66, 0xa4, 0x13, 0x2f, 0xcc, 0xc0, 0x00, 0x90, 0x48, 0x00, 0x63, 0x94, 0x56, + 0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x7e, 0x7a, 0x7e, 0x4e, 0x62, 0x5e, + 0x3a, 0xc2, 0x7d, 0x05, 0x25, 0x95, 0x05, 0xa9, 0xc5, 0x70, 0x67, 0xfe, 0x60, 0x64, 0x5c, 0xc4, + 0xc4, 0xec, 0x1e, 0xe0, 0xb4, 0x8a, 0x49, 0xce, 0x1d, 0x62, 0x6e, 0x00, 0x54, 0xa9, 0x5e, 0x78, + 0x6a, 0x4e, 0x8e, 0x77, 0x5e, 0x7e, 0x79, 0x5e, 0x08, 0x48, 0x4b, 0x12, 0x1b, 0xd8, 0x0c, 0x63, + 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdc, 0x84, 0x30, 0xff, 0xf3, 0x00, 0x00, 0x00, } diff --git a/vendor/github.com/golang/protobuf/ptypes/duration_test.go b/vendor/github.com/golang/protobuf/ptypes/duration_test.go index e761289..e00491a 100644 --- a/vendor/github.com/golang/protobuf/ptypes/duration_test.go +++ b/vendor/github.com/golang/protobuf/ptypes/duration_test.go @@ -52,37 +52,37 @@ var durationTests = []struct { dur time.Duration }{ // The zero duration. - {&durpb.Duration{0, 0}, true, true, 0}, + {&durpb.Duration{Seconds: 0, Nanos: 0}, true, true, 0}, // Some ordinary non-zero durations. - {&durpb.Duration{100, 0}, true, true, 100 * time.Second}, - {&durpb.Duration{-100, 0}, true, true, -100 * time.Second}, - {&durpb.Duration{100, 987}, true, true, 100*time.Second + 987}, - {&durpb.Duration{-100, -987}, true, true, -(100*time.Second + 987)}, + {&durpb.Duration{Seconds: 100, Nanos: 0}, true, true, 100 * time.Second}, + {&durpb.Duration{Seconds: -100, Nanos: 0}, true, true, -100 * time.Second}, + {&durpb.Duration{Seconds: 100, Nanos: 987}, true, true, 100*time.Second + 987}, + {&durpb.Duration{Seconds: -100, Nanos: -987}, true, true, -(100*time.Second + 987)}, // The largest duration representable in Go. - {&durpb.Duration{maxGoSeconds, int32(math.MaxInt64 - 1e9*maxGoSeconds)}, true, true, math.MaxInt64}, + {&durpb.Duration{Seconds: maxGoSeconds, Nanos: int32(math.MaxInt64 - 1e9*maxGoSeconds)}, true, true, math.MaxInt64}, // The smallest duration representable in Go. - {&durpb.Duration{minGoSeconds, int32(math.MinInt64 - 1e9*minGoSeconds)}, true, true, math.MinInt64}, + {&durpb.Duration{Seconds: minGoSeconds, Nanos: int32(math.MinInt64 - 1e9*minGoSeconds)}, true, true, math.MinInt64}, {nil, false, false, 0}, - {&durpb.Duration{-100, 987}, false, false, 0}, - {&durpb.Duration{100, -987}, false, false, 0}, - {&durpb.Duration{math.MinInt64, 0}, false, false, 0}, - {&durpb.Duration{math.MaxInt64, 0}, false, false, 0}, + {&durpb.Duration{Seconds: -100, Nanos: 987}, false, false, 0}, + {&durpb.Duration{Seconds: 100, Nanos: -987}, false, false, 0}, + {&durpb.Duration{Seconds: math.MinInt64, Nanos: 0}, false, false, 0}, + {&durpb.Duration{Seconds: math.MaxInt64, Nanos: 0}, false, false, 0}, // The largest valid duration. - {&durpb.Duration{maxSeconds, 1e9 - 1}, true, false, 0}, + {&durpb.Duration{Seconds: maxSeconds, Nanos: 1e9 - 1}, true, false, 0}, // The smallest valid duration. - {&durpb.Duration{minSeconds, -(1e9 - 1)}, true, false, 0}, + {&durpb.Duration{Seconds: minSeconds, Nanos: -(1e9 - 1)}, true, false, 0}, // The smallest invalid duration above the valid range. - {&durpb.Duration{maxSeconds + 1, 0}, false, false, 0}, + {&durpb.Duration{Seconds: maxSeconds + 1, Nanos: 0}, false, false, 0}, // The largest invalid duration below the valid range. - {&durpb.Duration{minSeconds - 1, -(1e9 - 1)}, false, false, 0}, + {&durpb.Duration{Seconds: minSeconds - 1, Nanos: -(1e9 - 1)}, false, false, 0}, // One nanosecond past the largest duration representable in Go. - {&durpb.Duration{maxGoSeconds, int32(math.MaxInt64-1e9*maxGoSeconds) + 1}, true, false, 0}, + {&durpb.Duration{Seconds: maxGoSeconds, Nanos: int32(math.MaxInt64-1e9*maxGoSeconds) + 1}, true, false, 0}, // One nanosecond past the smallest duration representable in Go. - {&durpb.Duration{minGoSeconds, int32(math.MinInt64-1e9*minGoSeconds) - 1}, true, false, 0}, + {&durpb.Duration{Seconds: minGoSeconds, Nanos: int32(math.MinInt64-1e9*minGoSeconds) - 1}, true, false, 0}, // One second past the largest duration representable in Go. - {&durpb.Duration{maxGoSeconds + 1, int32(math.MaxInt64 - 1e9*maxGoSeconds)}, true, false, 0}, + {&durpb.Duration{Seconds: maxGoSeconds + 1, Nanos: int32(math.MaxInt64 - 1e9*maxGoSeconds)}, true, false, 0}, // One second past the smallest duration representable in Go. - {&durpb.Duration{minGoSeconds - 1, int32(math.MinInt64 - 1e9*minGoSeconds)}, true, false, 0}, + {&durpb.Duration{Seconds: minGoSeconds - 1, Nanos: int32(math.MinInt64 - 1e9*minGoSeconds)}, true, false, 0}, } func TestValidateDuration(t *testing.T) { diff --git a/vendor/github.com/golang/protobuf/ptypes/empty/empty.pb.go b/vendor/github.com/golang/protobuf/ptypes/empty/empty.pb.go index ae15941..e877b72 100644 --- a/vendor/github.com/golang/protobuf/ptypes/empty/empty.pb.go +++ b/vendor/github.com/golang/protobuf/ptypes/empty/empty.pb.go @@ -1,11 +1,11 @@ // Code generated by protoc-gen-go. DO NOT EDIT. -// source: github.com/golang/protobuf/ptypes/empty/empty.proto +// source: google/protobuf/empty.proto /* Package empty is a generated protocol buffer package. It is generated from these files: - github.com/golang/protobuf/ptypes/empty/empty.proto + google/protobuf/empty.proto It has these top-level messages: Empty @@ -49,20 +49,18 @@ func init() { proto.RegisterType((*Empty)(nil), "google.protobuf.Empty") } -func init() { - proto.RegisterFile("github.com/golang/protobuf/ptypes/empty/empty.proto", fileDescriptor0) -} +func init() { proto.RegisterFile("google/protobuf/empty.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 147 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4e, 0xcf, 0x2c, 0xc9, - 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xcf, 0xcf, 0x49, 0xcc, 0x4b, 0xd7, 0x2f, 0x28, - 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x2f, 0x28, 0xa9, 0x2c, 0x48, 0x2d, 0xd6, 0x4f, 0xcd, - 0x2d, 0x28, 0xa9, 0x84, 0x90, 0x7a, 0x60, 0x39, 0x21, 0xfe, 0xf4, 0xfc, 0xfc, 0xf4, 0x9c, 0x54, - 0x3d, 0x98, 0x4a, 0x25, 0x76, 0x2e, 0x56, 0x57, 0x90, 0xbc, 0x53, 0x19, 0x97, 0x70, 0x72, 0x7e, - 0xae, 0x1e, 0x9a, 0xbc, 0x13, 0x17, 0x58, 0x36, 0x00, 0xc4, 0x0d, 0x60, 0x8c, 0x52, 0x27, 0xd2, - 0xce, 0x1f, 0x8c, 0x8c, 0x8b, 0x98, 0x98, 0xdd, 0x03, 0x9c, 0x56, 0x31, 0xc9, 0xb9, 0x43, 0x4c, - 0x0c, 0x80, 0xaa, 0xd3, 0x0b, 0x4f, 0xcd, 0xc9, 0xf1, 0xce, 0xcb, 0x2f, 0xcf, 0x0b, 0x01, 0xa9, - 0x4f, 0x62, 0x03, 0x1b, 0x60, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0x6e, 0x8e, 0x0a, 0x06, 0xcf, - 0x00, 0x00, 0x00, + // 148 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4e, 0xcf, 0xcf, 0x4f, + 0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x4f, 0xcd, 0x2d, 0x28, + 0xa9, 0xd4, 0x03, 0x73, 0x85, 0xf8, 0x21, 0x92, 0x7a, 0x30, 0x49, 0x25, 0x76, 0x2e, 0x56, 0x57, + 0x90, 0xbc, 0x53, 0x19, 0x97, 0x70, 0x72, 0x7e, 0xae, 0x1e, 0x9a, 0xbc, 0x13, 0x17, 0x58, 0x36, + 0x00, 0xc4, 0x0d, 0x60, 0x8c, 0x52, 0x4f, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, + 0xd5, 0x4f, 0xcf, 0xcf, 0x49, 0xcc, 0x4b, 0x47, 0x58, 0x53, 0x50, 0x52, 0x59, 0x90, 0x5a, 0x0c, + 0xb1, 0xed, 0x07, 0x23, 0xe3, 0x22, 0x26, 0x66, 0xf7, 0x00, 0xa7, 0x55, 0x4c, 0x72, 0xee, 0x10, + 0x13, 0x03, 0xa0, 0xea, 0xf4, 0xc2, 0x53, 0x73, 0x72, 0xbc, 0xf3, 0xf2, 0xcb, 0xf3, 0x42, 0x40, + 0xea, 0x93, 0xd8, 0xc0, 0x06, 0x18, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x64, 0xd4, 0xb3, 0xa6, + 0xb7, 0x00, 0x00, 0x00, } diff --git a/vendor/github.com/golang/protobuf/ptypes/regen.sh b/vendor/github.com/golang/protobuf/ptypes/regen.sh index 2a5b4e8..b50a941 100755 --- a/vendor/github.com/golang/protobuf/ptypes/regen.sh +++ b/vendor/github.com/golang/protobuf/ptypes/regen.sh @@ -8,14 +8,7 @@ PKG=github.com/golang/protobuf/ptypes UPSTREAM=https://github.com/google/protobuf UPSTREAM_SUBDIR=src/google/protobuf -PROTO_FILES=' - any.proto - duration.proto - empty.proto - struct.proto - timestamp.proto - wrappers.proto -' +PROTO_FILES=(any duration empty struct timestamp wrappers) function die() { echo 1>&2 $* @@ -36,31 +29,15 @@ pkgdir=$(go list -f '{{.Dir}}' $PKG) echo 1>&2 $pkgdir base=$(echo $pkgdir | sed "s,/$PKG\$,,") echo 1>&2 "base: $base" -cd $base +cd "$base" echo 1>&2 "fetching latest protos... " git clone -q $UPSTREAM $tmpdir -# Pass 1: build mapping from upstream filename to our filename. -declare -A filename_map -for f in $(cd $PKG && find * -name '*.proto'); do - echo -n 1>&2 "looking for latest version of $f... " - up=$(cd $tmpdir/$UPSTREAM_SUBDIR && find * -name $(basename $f) | grep -v /testdata/) - echo 1>&2 $up - if [ $(echo $up | wc -w) != "1" ]; then - die "not exactly one match" - fi - filename_map[$up]=$f -done -# Pass 2: copy files -for up in "${!filename_map[@]}"; do - f=${filename_map[$up]} - shortname=$(basename $f | sed 's,\.proto$,,') - cp $tmpdir/$UPSTREAM_SUBDIR/$up $PKG/$f -done -# Run protoc once per package. -for dir in $(find $PKG -name '*.proto' | xargs dirname | sort | uniq); do - echo 1>&2 "* $dir" - protoc --go_out=. $dir/*.proto +for file in ${PROTO_FILES[@]}; do + echo 1>&2 "* $file" + protoc --go_out=. -I$tmpdir/src $tmpdir/src/google/protobuf/$file.proto || die + cp $tmpdir/src/google/protobuf/$file.proto $PKG/$file done + echo 1>&2 "All OK" diff --git a/vendor/github.com/golang/protobuf/ptypes/struct/struct.pb.go b/vendor/github.com/golang/protobuf/ptypes/struct/struct.pb.go index 35a8ec5..4cfe608 100644 --- a/vendor/github.com/golang/protobuf/ptypes/struct/struct.pb.go +++ b/vendor/github.com/golang/protobuf/ptypes/struct/struct.pb.go @@ -1,11 +1,11 @@ // Code generated by protoc-gen-go. DO NOT EDIT. -// source: github.com/golang/protobuf/ptypes/struct/struct.proto +// source: google/protobuf/struct.proto /* Package structpb is a generated protocol buffer package. It is generated from these files: - github.com/golang/protobuf/ptypes/struct/struct.proto + google/protobuf/struct.proto It has these top-level messages: Struct @@ -346,37 +346,35 @@ func init() { proto.RegisterEnum("google.protobuf.NullValue", NullValue_name, NullValue_value) } -func init() { - proto.RegisterFile("github.com/golang/protobuf/ptypes/struct/struct.proto", fileDescriptor0) -} +func init() { proto.RegisterFile("google/protobuf/struct.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ // 417 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x41, 0x8b, 0xd3, 0x40, - 0x14, 0x80, 0x3b, 0xc9, 0x36, 0x98, 0x17, 0x59, 0x97, 0x11, 0xb4, 0xac, 0xa0, 0xa1, 0x7b, 0x09, - 0x22, 0x09, 0x56, 0x04, 0x31, 0x5e, 0x0c, 0xac, 0xbb, 0x60, 0x58, 0x62, 0x74, 0x57, 0xf0, 0x52, - 0x9a, 0x34, 0x8d, 0xa1, 0xd3, 0x99, 0x90, 0xcc, 0x28, 0x3d, 0xfa, 0x2f, 0x3c, 0x7b, 0xf4, 0xe8, - 0xaf, 0xf3, 0x28, 0x33, 0x93, 0x44, 0x69, 0x29, 0x78, 0x9a, 0xbe, 0x37, 0xdf, 0xfb, 0xe6, 0xbd, - 0xd7, 0xc0, 0xf3, 0xb2, 0xe2, 0x9f, 0x45, 0xe6, 0xe7, 0x6c, 0x13, 0x94, 0x8c, 0x2c, 0x68, 0x19, - 0xd4, 0x0d, 0xe3, 0x2c, 0x13, 0xab, 0xa0, 0xe6, 0xdb, 0xba, 0x68, 0x83, 0x96, 0x37, 0x22, 0xe7, - 0xdd, 0xe1, 0xab, 0x5b, 0x7c, 0xa7, 0x64, 0xac, 0x24, 0x85, 0xdf, 0xb3, 0xd3, 0xef, 0x08, 0xac, - 0xf7, 0x8a, 0xc0, 0x21, 0x58, 0xab, 0xaa, 0x20, 0xcb, 0x76, 0x82, 0x5c, 0xd3, 0x73, 0x66, 0x67, - 0xfe, 0x0e, 0xec, 0x6b, 0xd0, 0x7f, 0xa3, 0xa8, 0x73, 0xca, 0x9b, 0x6d, 0xda, 0x95, 0x9c, 0xbe, - 0x03, 0xe7, 0x9f, 0x34, 0x3e, 0x01, 0x73, 0x5d, 0x6c, 0x27, 0xc8, 0x45, 0x9e, 0x9d, 0xca, 0x9f, - 0xf8, 0x09, 0x8c, 0xbf, 0x2c, 0x88, 0x28, 0x26, 0x86, 0x8b, 0x3c, 0x67, 0x76, 0x6f, 0x4f, 0x7e, - 0x23, 0x6f, 0x53, 0x0d, 0xbd, 0x34, 0x5e, 0xa0, 0xe9, 0x2f, 0x03, 0xc6, 0x2a, 0x89, 0x43, 0x00, - 0x2a, 0x08, 0x99, 0x6b, 0x81, 0x94, 0x1e, 0xcf, 0x4e, 0xf7, 0x04, 0x57, 0x82, 0x10, 0xc5, 0x5f, - 0x8e, 0x52, 0x9b, 0xf6, 0x01, 0x3e, 0x83, 0xdb, 0x54, 0x6c, 0xb2, 0xa2, 0x99, 0xff, 0x7d, 0x1f, - 0x5d, 0x8e, 0x52, 0x47, 0x67, 0x07, 0xa8, 0xe5, 0x4d, 0x45, 0xcb, 0x0e, 0x32, 0x65, 0xe3, 0x12, - 0xd2, 0x59, 0x0d, 0x3d, 0x02, 0xc8, 0x18, 0xeb, 0xdb, 0x38, 0x72, 0x91, 0x77, 0x4b, 0x3e, 0x25, - 0x73, 0x1a, 0x78, 0xa5, 0x2c, 0x22, 0xe7, 0x1d, 0x32, 0x56, 0xa3, 0xde, 0x3f, 0xb0, 0xc7, 0x4e, - 0x2f, 0x72, 0x3e, 0x4c, 0x49, 0xaa, 0xb6, 0xaf, 0xb5, 0x54, 0xed, 0xfe, 0x94, 0x71, 0xd5, 0xf2, - 0x61, 0x4a, 0xd2, 0x07, 0x91, 0x05, 0x47, 0xeb, 0x8a, 0x2e, 0xa7, 0x21, 0xd8, 0x03, 0x81, 0x7d, - 0xb0, 0x94, 0xac, 0xff, 0x47, 0x0f, 0x2d, 0xbd, 0xa3, 0x1e, 0x3f, 0x00, 0x7b, 0x58, 0x22, 0x3e, - 0x06, 0xb8, 0xba, 0x8e, 0xe3, 0xf9, 0xcd, 0xeb, 0xf8, 0xfa, 0xfc, 0x64, 0x14, 0x7d, 0x43, 0x70, - 0x37, 0x67, 0x9b, 0x5d, 0x45, 0xe4, 0xe8, 0x69, 0x12, 0x19, 0x27, 0xe8, 0xd3, 0xd3, 0xff, 0xfd, - 0x30, 0x43, 0x7d, 0xd4, 0xd9, 0x6f, 0x84, 0x7e, 0x18, 0xe6, 0x45, 0x12, 0xfd, 0x34, 0x1e, 0x5e, - 0x68, 0x79, 0xd2, 0xf7, 0xf7, 0xb1, 0x20, 0xe4, 0x2d, 0x65, 0x5f, 0xe9, 0x07, 0x59, 0x99, 0x59, - 0x4a, 0xf5, 0xec, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x9b, 0x6e, 0x5d, 0x3c, 0xfe, 0x02, 0x00, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0x41, 0x8b, 0xd3, 0x40, + 0x14, 0xc7, 0x3b, 0xc9, 0x36, 0x98, 0x17, 0x59, 0x97, 0x11, 0xb4, 0xac, 0xa2, 0xa1, 0x7b, 0x09, + 0x22, 0x29, 0xd6, 0x8b, 0x18, 0x2f, 0x06, 0xd6, 0x5d, 0x30, 0x2c, 0x31, 0xba, 0x15, 0xbc, 0x94, + 0x26, 0x4d, 0x63, 0xe8, 0x74, 0x26, 0x24, 0x33, 0x4a, 0x8f, 0x7e, 0x0b, 0xcf, 0x1e, 0x3d, 0xfa, + 0xe9, 0x3c, 0xca, 0xcc, 0x24, 0xa9, 0xb4, 0xf4, 0x94, 0xbc, 0xf7, 0x7e, 0xef, 0x3f, 0xef, 0xff, + 0x66, 0xe0, 0x71, 0xc1, 0x58, 0x41, 0xf2, 0x49, 0x55, 0x33, 0xce, 0x52, 0xb1, 0x9a, 0x34, 0xbc, + 0x16, 0x19, 0xf7, 0x55, 0x8c, 0xef, 0xe9, 0xaa, 0xdf, 0x55, 0xc7, 0x3f, 0x11, 0x58, 0x1f, 0x15, + 0x81, 0x03, 0xb0, 0x56, 0x65, 0x4e, 0x96, 0xcd, 0x08, 0xb9, 0xa6, 0xe7, 0x4c, 0x2f, 0xfc, 0x3d, + 0xd8, 0xd7, 0xa0, 0xff, 0x4e, 0x51, 0x97, 0x94, 0xd7, 0xdb, 0xa4, 0x6d, 0x39, 0xff, 0x00, 0xce, + 0x7f, 0x69, 0x7c, 0x06, 0xe6, 0x3a, 0xdf, 0x8e, 0x90, 0x8b, 0x3c, 0x3b, 0x91, 0xbf, 0xf8, 0x39, + 0x0c, 0xbf, 0x2d, 0x88, 0xc8, 0x47, 0x86, 0x8b, 0x3c, 0x67, 0xfa, 0xe0, 0x40, 0x7c, 0x26, 0xab, + 0x89, 0x86, 0x5e, 0x1b, 0xaf, 0xd0, 0xf8, 0x8f, 0x01, 0x43, 0x95, 0xc4, 0x01, 0x00, 0x15, 0x84, + 0xcc, 0xb5, 0x80, 0x14, 0x3d, 0x9d, 0x9e, 0x1f, 0x08, 0xdc, 0x08, 0x42, 0x14, 0x7f, 0x3d, 0x48, + 0x6c, 0xda, 0x05, 0xf8, 0x02, 0xee, 0x52, 0xb1, 0x49, 0xf3, 0x7a, 0xbe, 0x3b, 0x1f, 0x5d, 0x0f, + 0x12, 0x47, 0x67, 0x7b, 0xa8, 0xe1, 0x75, 0x49, 0x8b, 0x16, 0x32, 0xe5, 0xe0, 0x12, 0xd2, 0x59, + 0x0d, 0x3d, 0x05, 0x48, 0x19, 0xeb, 0xc6, 0x38, 0x71, 0x91, 0x77, 0x47, 0x1e, 0x25, 0x73, 0x1a, + 0x78, 0xa3, 0x54, 0x44, 0xc6, 0x5b, 0x64, 0xa8, 0xac, 0x3e, 0x3c, 0xb2, 0xc7, 0x56, 0x5e, 0x64, + 0xbc, 0x77, 0x49, 0xca, 0xa6, 0xeb, 0xb5, 0x54, 0xef, 0xa1, 0xcb, 0xa8, 0x6c, 0x78, 0xef, 0x92, + 0x74, 0x41, 0x68, 0xc1, 0xc9, 0xba, 0xa4, 0xcb, 0x71, 0x00, 0x76, 0x4f, 0x60, 0x1f, 0x2c, 0x25, + 0xd6, 0xdd, 0xe8, 0xb1, 0xa5, 0xb7, 0xd4, 0xb3, 0x47, 0x60, 0xf7, 0x4b, 0xc4, 0xa7, 0x00, 0x37, + 0xb7, 0x51, 0x34, 0x9f, 0xbd, 0x8d, 0x6e, 0x2f, 0xcf, 0x06, 0xe1, 0x0f, 0x04, 0xf7, 0x33, 0xb6, + 0xd9, 0x97, 0x08, 0x1d, 0xed, 0x26, 0x96, 0x71, 0x8c, 0xbe, 0xbc, 0x28, 0x4a, 0xfe, 0x55, 0xa4, + 0x7e, 0xc6, 0x36, 0x93, 0x82, 0x91, 0x05, 0x2d, 0x76, 0x4f, 0xb1, 0xe2, 0xdb, 0x2a, 0x6f, 0xda, + 0x17, 0x19, 0xe8, 0x4f, 0x95, 0xfe, 0x45, 0xe8, 0x97, 0x61, 0x5e, 0xc5, 0xe1, 0x6f, 0xe3, 0xc9, + 0x95, 0x16, 0x8f, 0xbb, 0xf9, 0x3e, 0xe7, 0x84, 0xbc, 0xa7, 0xec, 0x3b, 0xfd, 0x24, 0x3b, 0x53, + 0x4b, 0x49, 0xbd, 0xfc, 0x17, 0x00, 0x00, 0xff, 0xff, 0xe8, 0x1b, 0x59, 0xf8, 0xe5, 0x02, 0x00, 0x00, } diff --git a/vendor/github.com/golang/protobuf/ptypes/timestamp.go b/vendor/github.com/golang/protobuf/ptypes/timestamp.go index 1b36576..47f10db 100644 --- a/vendor/github.com/golang/protobuf/ptypes/timestamp.go +++ b/vendor/github.com/golang/protobuf/ptypes/timestamp.go @@ -99,6 +99,15 @@ func Timestamp(ts *tspb.Timestamp) (time.Time, error) { return t, validateTimestamp(ts) } +// TimestampNow returns a google.protobuf.Timestamp for the current time. +func TimestampNow() *tspb.Timestamp { + ts, err := TimestampProto(time.Now()) + if err != nil { + panic("ptypes: time.Now() out of Timestamp range") + } + return ts +} + // TimestampProto converts the time.Time to a google.protobuf.Timestamp proto. // It returns an error if the resulting Timestamp is invalid. func TimestampProto(t time.Time) (*tspb.Timestamp, error) { diff --git a/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go b/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go index 3b76261..e23e4a2 100644 --- a/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go +++ b/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go @@ -1,11 +1,11 @@ // Code generated by protoc-gen-go. DO NOT EDIT. -// source: github.com/golang/protobuf/ptypes/timestamp/timestamp.proto +// source: google/protobuf/timestamp.proto /* Package timestamp is a generated protocol buffer package. It is generated from these files: - github.com/golang/protobuf/ptypes/timestamp/timestamp.proto + google/protobuf/timestamp.proto It has these top-level messages: Timestamp @@ -141,22 +141,20 @@ func init() { proto.RegisterType((*Timestamp)(nil), "google.protobuf.Timestamp") } -func init() { - proto.RegisterFile("github.com/golang/protobuf/ptypes/timestamp/timestamp.proto", fileDescriptor0) -} +func init() { proto.RegisterFile("google/protobuf/timestamp.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 190 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4e, 0xcf, 0x2c, 0xc9, - 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xcf, 0xcf, 0x49, 0xcc, 0x4b, 0xd7, 0x2f, 0x28, - 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x2f, 0x28, 0xa9, 0x2c, 0x48, 0x2d, 0xd6, 0x2f, 0xc9, - 0xcc, 0x4d, 0x2d, 0x2e, 0x49, 0xcc, 0x2d, 0x40, 0xb0, 0xf4, 0xc0, 0x6a, 0x84, 0xf8, 0xd3, 0xf3, - 0xf3, 0xd3, 0x73, 0x52, 0xf5, 0x60, 0x3a, 0x94, 0xac, 0xb9, 0x38, 0x43, 0x60, 0x6a, 0x84, 0x24, - 0xb8, 0xd8, 0x8b, 0x53, 0x93, 0xf3, 0xf3, 0x52, 0x8a, 0x25, 0x18, 0x15, 0x18, 0x35, 0x98, 0x83, - 0x60, 0x5c, 0x21, 0x11, 0x2e, 0xd6, 0xbc, 0xc4, 0xbc, 0xfc, 0x62, 0x09, 0x26, 0x05, 0x46, 0x0d, - 0xd6, 0x20, 0x08, 0xc7, 0xa9, 0x8e, 0x4b, 0x38, 0x39, 0x3f, 0x57, 0x0f, 0xcd, 0x4c, 0x27, 0x3e, - 0xb8, 0x89, 0x01, 0x20, 0xa1, 0x00, 0xc6, 0x28, 0x6d, 0x12, 0xdc, 0xfc, 0x83, 0x91, 0x71, 0x11, - 0x13, 0xb3, 0x7b, 0x80, 0xd3, 0x2a, 0x26, 0x39, 0x77, 0x88, 0xc9, 0x01, 0x50, 0xb5, 0x7a, 0xe1, - 0xa9, 0x39, 0x39, 0xde, 0x79, 0xf9, 0xe5, 0x79, 0x21, 0x20, 0x3d, 0x49, 0x6c, 0x60, 0x43, 0x8c, - 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x6b, 0x59, 0x0a, 0x4d, 0x13, 0x01, 0x00, 0x00, + // 191 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4f, 0xcf, 0xcf, 0x4f, + 0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x2f, 0xc9, 0xcc, 0x4d, + 0x2d, 0x2e, 0x49, 0xcc, 0x2d, 0xd0, 0x03, 0x0b, 0x09, 0xf1, 0x43, 0x14, 0xe8, 0xc1, 0x14, 0x28, + 0x59, 0x73, 0x71, 0x86, 0xc0, 0xd4, 0x08, 0x49, 0x70, 0xb1, 0x17, 0xa7, 0x26, 0xe7, 0xe7, 0xa5, + 0x14, 0x4b, 0x30, 0x2a, 0x30, 0x6a, 0x30, 0x07, 0xc1, 0xb8, 0x42, 0x22, 0x5c, 0xac, 0x79, 0x89, + 0x79, 0xf9, 0xc5, 0x12, 0x4c, 0x0a, 0x8c, 0x1a, 0xac, 0x41, 0x10, 0x8e, 0x53, 0x1d, 0x97, 0x70, + 0x72, 0x7e, 0xae, 0x1e, 0x9a, 0x99, 0x4e, 0x7c, 0x70, 0x13, 0x03, 0x40, 0x42, 0x01, 0x8c, 0x51, + 0xda, 0xe9, 0x99, 0x25, 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0xe9, 0xf9, 0x39, 0x89, + 0x79, 0xe9, 0x08, 0x27, 0x16, 0x94, 0x54, 0x16, 0xa4, 0x16, 0x23, 0x5c, 0xfa, 0x83, 0x91, 0x71, + 0x11, 0x13, 0xb3, 0x7b, 0x80, 0xd3, 0x2a, 0x26, 0x39, 0x77, 0x88, 0xc9, 0x01, 0x50, 0xb5, 0x7a, + 0xe1, 0xa9, 0x39, 0x39, 0xde, 0x79, 0xf9, 0xe5, 0x79, 0x21, 0x20, 0x3d, 0x49, 0x6c, 0x60, 0x43, + 0x8c, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xbc, 0x77, 0x4a, 0x07, 0xf7, 0x00, 0x00, 0x00, } diff --git a/vendor/github.com/golang/protobuf/ptypes/timestamp_test.go b/vendor/github.com/golang/protobuf/ptypes/timestamp_test.go index 114a7f9..6e3c969 100644 --- a/vendor/github.com/golang/protobuf/ptypes/timestamp_test.go +++ b/vendor/github.com/golang/protobuf/ptypes/timestamp_test.go @@ -46,32 +46,32 @@ var tests = []struct { t time.Time }{ // The timestamp representing the Unix epoch date. - {&tspb.Timestamp{0, 0}, true, utcDate(1970, 1, 1)}, + {&tspb.Timestamp{Seconds: 0, Nanos: 0}, true, utcDate(1970, 1, 1)}, // The smallest representable timestamp. - {&tspb.Timestamp{math.MinInt64, math.MinInt32}, false, + {&tspb.Timestamp{Seconds: math.MinInt64, Nanos: math.MinInt32}, false, time.Unix(math.MinInt64, math.MinInt32).UTC()}, // The smallest representable timestamp with non-negative nanos. - {&tspb.Timestamp{math.MinInt64, 0}, false, time.Unix(math.MinInt64, 0).UTC()}, + {&tspb.Timestamp{Seconds: math.MinInt64, Nanos: 0}, false, time.Unix(math.MinInt64, 0).UTC()}, // The earliest valid timestamp. - {&tspb.Timestamp{minValidSeconds, 0}, true, utcDate(1, 1, 1)}, + {&tspb.Timestamp{Seconds: minValidSeconds, Nanos: 0}, true, utcDate(1, 1, 1)}, //"0001-01-01T00:00:00Z"}, // The largest representable timestamp. - {&tspb.Timestamp{math.MaxInt64, math.MaxInt32}, false, + {&tspb.Timestamp{Seconds: math.MaxInt64, Nanos: math.MaxInt32}, false, time.Unix(math.MaxInt64, math.MaxInt32).UTC()}, // The largest representable timestamp with nanos in range. - {&tspb.Timestamp{math.MaxInt64, 1e9 - 1}, false, + {&tspb.Timestamp{Seconds: math.MaxInt64, Nanos: 1e9 - 1}, false, time.Unix(math.MaxInt64, 1e9-1).UTC()}, // The largest valid timestamp. - {&tspb.Timestamp{maxValidSeconds - 1, 1e9 - 1}, true, + {&tspb.Timestamp{Seconds: maxValidSeconds - 1, Nanos: 1e9 - 1}, true, time.Date(9999, 12, 31, 23, 59, 59, 1e9-1, time.UTC)}, // The smallest invalid timestamp that is larger than the valid range. - {&tspb.Timestamp{maxValidSeconds, 0}, false, time.Unix(maxValidSeconds, 0).UTC()}, + {&tspb.Timestamp{Seconds: maxValidSeconds, Nanos: 0}, false, time.Unix(maxValidSeconds, 0).UTC()}, // A date before the epoch. - {&tspb.Timestamp{-281836800, 0}, true, utcDate(1961, 1, 26)}, + {&tspb.Timestamp{Seconds: -281836800, Nanos: 0}, true, utcDate(1961, 1, 26)}, // A date after the epoch. - {&tspb.Timestamp{1296000000, 0}, true, utcDate(2011, 1, 26)}, + {&tspb.Timestamp{Seconds: 1296000000, Nanos: 0}, true, utcDate(2011, 1, 26)}, // A date after the epoch, in the middle of the day. - {&tspb.Timestamp{1296012345, 940483}, true, + {&tspb.Timestamp{Seconds: 1296012345, Nanos: 940483}, true, time.Date(2011, 1, 26, 3, 25, 45, 940483, time.UTC)}, } @@ -123,8 +123,8 @@ func TestTimestampString(t *testing.T) { }{ // Not much testing needed because presumably time.Format is // well-tested. - {&tspb.Timestamp{0, 0}, "1970-01-01T00:00:00Z"}, - {&tspb.Timestamp{minValidSeconds - 1, 0}, "(timestamp: seconds:-62135596801 before 0001-01-01)"}, + {&tspb.Timestamp{Seconds: 0, Nanos: 0}, "1970-01-01T00:00:00Z"}, + {&tspb.Timestamp{Seconds: minValidSeconds - 1, Nanos: 0}, "(timestamp: seconds:-62135596801 before 0001-01-01)"}, } { got := TimestampString(test.ts) if got != test.want { @@ -136,3 +136,18 @@ func TestTimestampString(t *testing.T) { func utcDate(year, month, day int) time.Time { return time.Date(year, time.Month(month), day, 0, 0, 0, 0, time.UTC) } + +func TestTimestampNow(t *testing.T) { + // Bracket the expected time. + before := time.Now() + ts := TimestampNow() + after := time.Now() + + tm, err := Timestamp(ts) + if err != nil { + t.Errorf("between %v and %v\nTimestampNow() = %v\nwhich is invalid (%v)", before, after, ts, err) + } + if tm.Before(before) || tm.After(after) { + t.Errorf("between %v and %v\nTimestamp(TimestampNow()) = %v", before, after, tm) + } +} diff --git a/vendor/github.com/golang/protobuf/ptypes/wrappers/wrappers.pb.go b/vendor/github.com/golang/protobuf/ptypes/wrappers/wrappers.pb.go index 1328bd2..0ed59bf 100644 --- a/vendor/github.com/golang/protobuf/ptypes/wrappers/wrappers.pb.go +++ b/vendor/github.com/golang/protobuf/ptypes/wrappers/wrappers.pb.go @@ -1,11 +1,11 @@ // Code generated by protoc-gen-go. DO NOT EDIT. -// source: github.com/golang/protobuf/ptypes/wrappers/wrappers.proto +// source: google/protobuf/wrappers.proto /* Package wrappers is a generated protocol buffer package. It is generated from these files: - github.com/golang/protobuf/ptypes/wrappers/wrappers.proto + google/protobuf/wrappers.proto It has these top-level messages: DoubleValue @@ -236,27 +236,25 @@ func init() { proto.RegisterType((*BytesValue)(nil), "google.protobuf.BytesValue") } -func init() { - proto.RegisterFile("github.com/golang/protobuf/ptypes/wrappers/wrappers.proto", fileDescriptor0) -} +func init() { proto.RegisterFile("google/protobuf/wrappers.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 257 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4c, 0xcf, 0x2c, 0xc9, - 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xcf, 0xcf, 0x49, 0xcc, 0x4b, 0xd7, 0x2f, 0x28, - 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x2f, 0x28, 0xa9, 0x2c, 0x48, 0x2d, 0xd6, 0x2f, 0x2f, - 0x4a, 0x2c, 0x28, 0x48, 0x2d, 0x42, 0x30, 0xf4, 0xc0, 0x2a, 0x84, 0xf8, 0xd3, 0xf3, 0xf3, 0xd3, - 0x73, 0x52, 0xf5, 0x60, 0xea, 0x95, 0x94, 0xb9, 0xb8, 0x5d, 0xf2, 0x4b, 0x93, 0x72, 0x52, 0xc3, - 0x12, 0x73, 0x4a, 0x53, 0x85, 0x44, 0xb8, 0x58, 0xcb, 0x40, 0x0c, 0x09, 0x46, 0x05, 0x46, 0x0d, - 0xc6, 0x20, 0x08, 0x47, 0x49, 0x89, 0x8b, 0xcb, 0x2d, 0x27, 0x3f, 0xb1, 0x04, 0x8b, 0x1a, 0x26, - 0x24, 0x35, 0x9e, 0x79, 0x25, 0x66, 0x26, 0x58, 0xd4, 0x30, 0xc3, 0xd4, 0x28, 0x73, 0x71, 0x87, - 0xe2, 0x52, 0xc4, 0x82, 0x6a, 0x90, 0xb1, 0x11, 0x16, 0x35, 0xac, 0x68, 0x06, 0x61, 0x55, 0xc4, - 0x0b, 0x53, 0xa4, 0xc8, 0xc5, 0xe9, 0x94, 0x9f, 0x9f, 0x83, 0x45, 0x09, 0x07, 0x92, 0x39, 0xc1, - 0x25, 0x45, 0x99, 0x79, 0xe9, 0x58, 0x14, 0x71, 0x22, 0x39, 0xc8, 0xa9, 0xb2, 0x24, 0xb5, 0x18, - 0x8b, 0x1a, 0x1e, 0xa8, 0x1a, 0xa7, 0x1a, 0x2e, 0xe1, 0xe4, 0xfc, 0x5c, 0x3d, 0xb4, 0xd0, 0x75, - 0xe2, 0x0d, 0x87, 0x06, 0x7f, 0x00, 0x48, 0x24, 0x80, 0x31, 0x4a, 0x8b, 0xf8, 0xa8, 0xfb, 0xc1, - 0xc8, 0xb8, 0x88, 0x89, 0xd9, 0x3d, 0xc0, 0x69, 0x15, 0x93, 0x9c, 0x3b, 0xc4, 0xdc, 0x00, 0xa8, - 0x52, 0xbd, 0xf0, 0xd4, 0x9c, 0x1c, 0xef, 0xbc, 0xfc, 0xf2, 0xbc, 0x10, 0x90, 0x96, 0x24, 0x36, - 0xb0, 0x19, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xee, 0x36, 0x8d, 0xd8, 0x19, 0x02, 0x00, - 0x00, + // 259 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4b, 0xcf, 0xcf, 0x4f, + 0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x2f, 0x2f, 0x4a, 0x2c, + 0x28, 0x48, 0x2d, 0x2a, 0xd6, 0x03, 0x8b, 0x08, 0xf1, 0x43, 0xe4, 0xf5, 0x60, 0xf2, 0x4a, 0xca, + 0x5c, 0xdc, 0x2e, 0xf9, 0xa5, 0x49, 0x39, 0xa9, 0x61, 0x89, 0x39, 0xa5, 0xa9, 0x42, 0x22, 0x5c, + 0xac, 0x65, 0x20, 0x86, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0x63, 0x10, 0x84, 0xa3, 0xa4, 0xc4, 0xc5, + 0xe5, 0x96, 0x93, 0x9f, 0x58, 0x82, 0x45, 0x0d, 0x13, 0x92, 0x1a, 0xcf, 0xbc, 0x12, 0x33, 0x13, + 0x2c, 0x6a, 0x98, 0x61, 0x6a, 0x94, 0xb9, 0xb8, 0x43, 0x71, 0x29, 0x62, 0x41, 0x35, 0xc8, 0xd8, + 0x08, 0x8b, 0x1a, 0x56, 0x34, 0x83, 0xb0, 0x2a, 0xe2, 0x85, 0x29, 0x52, 0xe4, 0xe2, 0x74, 0xca, + 0xcf, 0xcf, 0xc1, 0xa2, 0x84, 0x03, 0xc9, 0x9c, 0xe0, 0x92, 0xa2, 0xcc, 0xbc, 0x74, 0x2c, 0x8a, + 0x38, 0x91, 0x1c, 0xe4, 0x54, 0x59, 0x92, 0x5a, 0x8c, 0x45, 0x0d, 0x0f, 0x54, 0x8d, 0x53, 0x0d, + 0x97, 0x70, 0x72, 0x7e, 0xae, 0x1e, 0x5a, 0xe8, 0x3a, 0xf1, 0x86, 0x43, 0x83, 0x3f, 0x00, 0x24, + 0x12, 0xc0, 0x18, 0xa5, 0x95, 0x9e, 0x59, 0x92, 0x51, 0x9a, 0xa4, 0x97, 0x9c, 0x9f, 0xab, 0x9f, + 0x9e, 0x9f, 0x93, 0x98, 0x97, 0x8e, 0x88, 0xaa, 0x82, 0x92, 0xca, 0x82, 0xd4, 0x62, 0x78, 0x8c, + 0xfd, 0x60, 0x64, 0x5c, 0xc4, 0xc4, 0xec, 0x1e, 0xe0, 0xb4, 0x8a, 0x49, 0xce, 0x1d, 0x62, 0x6e, + 0x00, 0x54, 0xa9, 0x5e, 0x78, 0x6a, 0x4e, 0x8e, 0x77, 0x5e, 0x7e, 0x79, 0x5e, 0x08, 0x48, 0x4b, + 0x12, 0x1b, 0xd8, 0x0c, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x19, 0x6c, 0xb9, 0xb8, 0xfe, + 0x01, 0x00, 0x00, } diff --git a/vendor/github.com/golang/snappy/.gitignore b/vendor/github.com/golang/snappy/.gitignore new file mode 100644 index 0000000..042091d --- /dev/null +++ b/vendor/github.com/golang/snappy/.gitignore @@ -0,0 +1,16 @@ +cmd/snappytool/snappytool +testdata/bench + +# These explicitly listed benchmark data files are for an obsolete version of +# snappy_test.go. +testdata/alice29.txt +testdata/asyoulik.txt +testdata/fireworks.jpeg +testdata/geo.protodata +testdata/html +testdata/html_x_4 +testdata/kppkn.gtb +testdata/lcet10.txt +testdata/paper-100k.pdf +testdata/plrabn12.txt +testdata/urls.10K diff --git a/vendor/github.com/golang/snappy/AUTHORS b/vendor/github.com/golang/snappy/AUTHORS new file mode 100644 index 0000000..bcfa195 --- /dev/null +++ b/vendor/github.com/golang/snappy/AUTHORS @@ -0,0 +1,15 @@ +# This is the official list of Snappy-Go authors for copyright purposes. +# This file is distinct from the CONTRIBUTORS files. +# See the latter for an explanation. + +# Names should be added to this file as +# Name or Organization +# The email address is not required for organizations. + +# Please keep the list sorted. + +Damian Gryski +Google Inc. +Jan Mercl <0xjnml@gmail.com> +Rodolfo Carvalho +Sebastien Binet diff --git a/vendor/github.com/golang/snappy/CONTRIBUTORS b/vendor/github.com/golang/snappy/CONTRIBUTORS new file mode 100644 index 0000000..931ae31 --- /dev/null +++ b/vendor/github.com/golang/snappy/CONTRIBUTORS @@ -0,0 +1,37 @@ +# This is the official list of people who can contribute +# (and typically have contributed) code to the Snappy-Go repository. +# The AUTHORS file lists the copyright holders; this file +# lists people. For example, Google employees are listed here +# but not in AUTHORS, because Google holds the copyright. +# +# The submission process automatically checks to make sure +# that people submitting code are listed in this file (by email address). +# +# Names should be added to this file only after verifying that +# the individual or the individual's organization has agreed to +# the appropriate Contributor License Agreement, found here: +# +# http://code.google.com/legal/individual-cla-v1.0.html +# http://code.google.com/legal/corporate-cla-v1.0.html +# +# The agreement for individuals can be filled out on the web. +# +# When adding J Random Contributor's name to this file, +# either J's name or J's organization's name should be +# added to the AUTHORS file, depending on whether the +# individual or corporate CLA was used. + +# Names should be added to this file like so: +# Name + +# Please keep the list sorted. + +Damian Gryski +Jan Mercl <0xjnml@gmail.com> +Kai Backman +Marc-Antoine Ruel +Nigel Tao +Rob Pike +Rodolfo Carvalho +Russ Cox +Sebastien Binet diff --git a/vendor/github.com/golang/snappy/LICENSE b/vendor/github.com/golang/snappy/LICENSE new file mode 100644 index 0000000..6050c10 --- /dev/null +++ b/vendor/github.com/golang/snappy/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2011 The Snappy-Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/golang/snappy/README b/vendor/github.com/golang/snappy/README new file mode 100644 index 0000000..5074bba --- /dev/null +++ b/vendor/github.com/golang/snappy/README @@ -0,0 +1,7 @@ +The Snappy compression format in the Go programming language. + +To download and install from source: +$ go get github.com/golang/snappy + +Unless otherwise noted, the Snappy-Go source files are distributed +under the BSD-style license found in the LICENSE file. diff --git a/vendor/github.com/golang/snappy/cmd/snappytool/main.cpp b/vendor/github.com/golang/snappy/cmd/snappytool/main.cpp new file mode 100644 index 0000000..db28a89 --- /dev/null +++ b/vendor/github.com/golang/snappy/cmd/snappytool/main.cpp @@ -0,0 +1,74 @@ +/* +To build the snappytool binary: +g++ main.cpp /usr/lib/libsnappy.a -o snappytool +*/ + +#include +#include +#include +#include + +#include "snappy.h" + +#define N 1000000 + +char dst[N]; +char src[N]; + +int main(int argc, char** argv) { + // Parse args. + if (argc != 2) { + fprintf(stderr, "exactly one of -d or -e must be given\n"); + return 1; + } + bool decode = strcmp(argv[1], "-d") == 0; + bool encode = strcmp(argv[1], "-e") == 0; + if (decode == encode) { + fprintf(stderr, "exactly one of -d or -e must be given\n"); + return 1; + } + + // Read all of stdin into src[:s]. + size_t s = 0; + while (1) { + if (s == N) { + fprintf(stderr, "input too large\n"); + return 1; + } + ssize_t n = read(0, src+s, N-s); + if (n == 0) { + break; + } + if (n < 0) { + fprintf(stderr, "read error: %s\n", strerror(errno)); + // TODO: handle EAGAIN, EINTR? + return 1; + } + s += n; + } + + // Encode or decode src[:s] to dst[:d], and write to stdout. + size_t d = 0; + if (encode) { + if (N < snappy::MaxCompressedLength(s)) { + fprintf(stderr, "input too large after encoding\n"); + return 1; + } + snappy::RawCompress(src, s, dst, &d); + } else { + if (!snappy::GetUncompressedLength(src, s, &d)) { + fprintf(stderr, "could not get uncompressed length\n"); + return 1; + } + if (N < d) { + fprintf(stderr, "input too large after decoding\n"); + return 1; + } + if (!snappy::RawUncompress(src, s, dst)) { + fprintf(stderr, "input was not valid Snappy-compressed data\n"); + return 1; + } + } + write(1, dst, d); + return 0; +} diff --git a/vendor/github.com/golang/snappy/decode.go b/vendor/github.com/golang/snappy/decode.go new file mode 100644 index 0000000..819c717 --- /dev/null +++ b/vendor/github.com/golang/snappy/decode.go @@ -0,0 +1,241 @@ +// Copyright 2011 The Snappy-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. + +package snappy + +import ( + "encoding/binary" + "errors" + "io" +) + +var ( + // ErrCorrupt reports that the input is invalid. + ErrCorrupt = errors.New("snappy: corrupt input") + // ErrTooLarge reports that the uncompressed length is too large. + ErrTooLarge = errors.New("snappy: decoded block is too large") + // ErrUnsupported reports that the input isn't supported. + ErrUnsupported = errors.New("snappy: unsupported input") + + errUnsupportedCopy4Tag = errors.New("snappy: unsupported COPY_4 tag") + errUnsupportedLiteralLength = errors.New("snappy: unsupported literal length") +) + +// DecodedLen returns the length of the decoded block. +func DecodedLen(src []byte) (int, error) { + v, _, err := decodedLen(src) + return v, err +} + +// decodedLen returns the length of the decoded block and the number of bytes +// that the length header occupied. +func decodedLen(src []byte) (blockLen, headerLen int, err error) { + v, n := binary.Uvarint(src) + if n <= 0 || v > 0xffffffff { + return 0, 0, ErrCorrupt + } + + const wordSize = 32 << (^uint(0) >> 32 & 1) + if wordSize == 32 && v > 0x7fffffff { + return 0, 0, ErrTooLarge + } + return int(v), n, nil +} + +const ( + decodeErrCodeCorrupt = 1 + decodeErrCodeUnsupportedLiteralLength = 2 + decodeErrCodeUnsupportedCopy4Tag = 3 +) + +// Decode returns the decoded form of src. The returned slice may be a sub- +// slice of dst if dst was large enough to hold the entire decoded block. +// Otherwise, a newly allocated slice will be returned. +// +// The dst and src must not overlap. It is valid to pass a nil dst. +func Decode(dst, src []byte) ([]byte, error) { + dLen, s, err := decodedLen(src) + if err != nil { + return nil, err + } + if dLen <= len(dst) { + dst = dst[:dLen] + } else { + dst = make([]byte, dLen) + } + switch decode(dst, src[s:]) { + case 0: + return dst, nil + case decodeErrCodeUnsupportedLiteralLength: + return nil, errUnsupportedLiteralLength + case decodeErrCodeUnsupportedCopy4Tag: + return nil, errUnsupportedCopy4Tag + } + return nil, ErrCorrupt +} + +// NewReader returns a new Reader that decompresses from r, using the framing +// format described at +// https://github.com/google/snappy/blob/master/framing_format.txt +func NewReader(r io.Reader) *Reader { + return &Reader{ + r: r, + decoded: make([]byte, maxBlockSize), + buf: make([]byte, maxEncodedLenOfMaxBlockSize+checksumSize), + } +} + +// Reader is an io.Reader that can read Snappy-compressed bytes. +type Reader struct { + r io.Reader + err error + decoded []byte + buf []byte + // decoded[i:j] contains decoded bytes that have not yet been passed on. + i, j int + readHeader bool +} + +// Reset discards any buffered data, resets all state, and switches the Snappy +// reader to read from r. This permits reusing a Reader rather than allocating +// a new one. +func (r *Reader) Reset(reader io.Reader) { + r.r = reader + r.err = nil + r.i = 0 + r.j = 0 + r.readHeader = false +} + +func (r *Reader) readFull(p []byte, allowEOF bool) (ok bool) { + if _, r.err = io.ReadFull(r.r, p); r.err != nil { + if r.err == io.ErrUnexpectedEOF || (r.err == io.EOF && !allowEOF) { + r.err = ErrCorrupt + } + return false + } + return true +} + +// Read satisfies the io.Reader interface. +func (r *Reader) Read(p []byte) (int, error) { + if r.err != nil { + return 0, r.err + } + for { + if r.i < r.j { + n := copy(p, r.decoded[r.i:r.j]) + r.i += n + return n, nil + } + if !r.readFull(r.buf[:4], true) { + return 0, r.err + } + chunkType := r.buf[0] + if !r.readHeader { + if chunkType != chunkTypeStreamIdentifier { + r.err = ErrCorrupt + return 0, r.err + } + r.readHeader = true + } + chunkLen := int(r.buf[1]) | int(r.buf[2])<<8 | int(r.buf[3])<<16 + if chunkLen > len(r.buf) { + r.err = ErrUnsupported + return 0, r.err + } + + // The chunk types are specified at + // https://github.com/google/snappy/blob/master/framing_format.txt + switch chunkType { + case chunkTypeCompressedData: + // Section 4.2. Compressed data (chunk type 0x00). + if chunkLen < checksumSize { + r.err = ErrCorrupt + return 0, r.err + } + buf := r.buf[:chunkLen] + if !r.readFull(buf, false) { + return 0, r.err + } + checksum := uint32(buf[0]) | uint32(buf[1])<<8 | uint32(buf[2])<<16 | uint32(buf[3])<<24 + buf = buf[checksumSize:] + + n, err := DecodedLen(buf) + if err != nil { + r.err = err + return 0, r.err + } + if n > len(r.decoded) { + r.err = ErrCorrupt + return 0, r.err + } + if _, err := Decode(r.decoded, buf); err != nil { + r.err = err + return 0, r.err + } + if crc(r.decoded[:n]) != checksum { + r.err = ErrCorrupt + return 0, r.err + } + r.i, r.j = 0, n + continue + + case chunkTypeUncompressedData: + // Section 4.3. Uncompressed data (chunk type 0x01). + if chunkLen < checksumSize { + r.err = ErrCorrupt + return 0, r.err + } + buf := r.buf[:checksumSize] + if !r.readFull(buf, false) { + return 0, r.err + } + checksum := uint32(buf[0]) | uint32(buf[1])<<8 | uint32(buf[2])<<16 | uint32(buf[3])<<24 + // Read directly into r.decoded instead of via r.buf. + n := chunkLen - checksumSize + if n > len(r.decoded) { + r.err = ErrCorrupt + return 0, r.err + } + if !r.readFull(r.decoded[:n], false) { + return 0, r.err + } + if crc(r.decoded[:n]) != checksum { + r.err = ErrCorrupt + return 0, r.err + } + r.i, r.j = 0, n + continue + + case chunkTypeStreamIdentifier: + // Section 4.1. Stream identifier (chunk type 0xff). + if chunkLen != len(magicBody) { + r.err = ErrCorrupt + return 0, r.err + } + if !r.readFull(r.buf[:len(magicBody)], false) { + return 0, r.err + } + for i := 0; i < len(magicBody); i++ { + if r.buf[i] != magicBody[i] { + r.err = ErrCorrupt + return 0, r.err + } + } + continue + } + + if chunkType <= 0x7f { + // Section 4.5. Reserved unskippable chunks (chunk types 0x02-0x7f). + r.err = ErrUnsupported + return 0, r.err + } + // Section 4.4 Padding (chunk type 0xfe). + // Section 4.6. Reserved skippable chunks (chunk types 0x80-0xfd). + if !r.readFull(r.buf[:chunkLen], false) { + return 0, r.err + } + } +} diff --git a/vendor/github.com/golang/snappy/decode_amd64.go b/vendor/github.com/golang/snappy/decode_amd64.go new file mode 100644 index 0000000..cbcd464 --- /dev/null +++ b/vendor/github.com/golang/snappy/decode_amd64.go @@ -0,0 +1,12 @@ +// Copyright 2016 The Snappy-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 gc + +package snappy + +// decode has the same semantics as in decode_other.go. +// +//go:noescape +func decode(dst, src []byte) int diff --git a/vendor/github.com/golang/snappy/decode_amd64.s b/vendor/github.com/golang/snappy/decode_amd64.s new file mode 100644 index 0000000..099d096 --- /dev/null +++ b/vendor/github.com/golang/snappy/decode_amd64.s @@ -0,0 +1,474 @@ +// Copyright 2016 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 gc + +#include "textflag.h" + +// func decode(dst, src []byte) int +// +// The asm code generally follows the pure Go code in decode_other.go, except +// where marked with a "!!!". +// +// All local variables fit into registers. The non-zero stack size is only to +// spill registers and push args when issuing a CALL. The register allocation: +// - AX scratch +// - BX scratch +// - CX length or x +// - DX offset +// - SI &src[s] +// - DI &dst[d] +// + R8 dst_base +// + R9 dst_len +// + R10 dst_base + dst_len +// + R11 src_base +// + R12 src_len +// + R13 src_base + src_len +// - R14 used by doCopy +// - R15 used by doCopy +// +// The registers R8-R13 (marked with a "+") are set at the start of the +// function, and after a CALL returns, and are not otherwise modified. +// +// The d variable is implicitly DI - R8, and len(dst)-d is R10 - DI. +// The s variable is implicitly SI - R11, and len(src)-s is R13 - SI. +TEXT ·decode(SB), NOSPLIT, $48-56 + // Initialize SI, DI and R8-R13. + MOVQ dst_base+0(FP), R8 + MOVQ dst_len+8(FP), R9 + MOVQ R8, DI + MOVQ R8, R10 + ADDQ R9, R10 + MOVQ src_base+24(FP), R11 + MOVQ src_len+32(FP), R12 + MOVQ R11, SI + MOVQ R11, R13 + ADDQ R12, R13 + +loop: + // for s < len(src) + CMPQ SI, R13 + JEQ end + + // CX = uint32(src[s]) + // + // switch src[s] & 0x03 + MOVBLZX (SI), CX + MOVL CX, BX + ANDL $3, BX + CMPL BX, $1 + JAE tagCopy + + // ---------------------------------------- + // The code below handles literal tags. + + // case tagLiteral: + // x := uint32(src[s] >> 2) + // switch + SHRL $2, CX + CMPL CX, $60 + JAE tagLit60Plus + + // case x < 60: + // s++ + INCQ SI + +doLit: + // This is the end of the inner "switch", when we have a literal tag. + // + // We assume that CX == x and x fits in a uint32, where x is the variable + // used in the pure Go decode_other.go code. + + // length = int(x) + 1 + // + // Unlike the pure Go code, we don't need to check if length <= 0 because + // CX can hold 64 bits, so the increment cannot overflow. + INCQ CX + + // Prepare to check if copying length bytes will run past the end of dst or + // src. + // + // AX = len(dst) - d + // BX = len(src) - s + MOVQ R10, AX + SUBQ DI, AX + MOVQ R13, BX + SUBQ SI, BX + + // !!! Try a faster technique for short (16 or fewer bytes) copies. + // + // if length > 16 || len(dst)-d < 16 || len(src)-s < 16 { + // goto callMemmove // Fall back on calling runtime·memmove. + // } + // + // The C++ snappy code calls this TryFastAppend. It also checks len(src)-s + // against 21 instead of 16, because it cannot assume that all of its input + // is contiguous in memory and so it needs to leave enough source bytes to + // read the next tag without refilling buffers, but Go's Decode assumes + // contiguousness (the src argument is a []byte). + CMPQ CX, $16 + JGT callMemmove + CMPQ AX, $16 + JLT callMemmove + CMPQ BX, $16 + JLT callMemmove + + // !!! Implement the copy from src to dst as a 16-byte load and store. + // (Decode's documentation says that dst and src must not overlap.) + // + // This always copies 16 bytes, instead of only length bytes, but that's + // OK. If the input is a valid Snappy encoding then subsequent iterations + // will fix up the overrun. Otherwise, Decode returns a nil []byte (and a + // non-nil error), so the overrun will be ignored. + // + // Note that on amd64, it is legal and cheap to issue unaligned 8-byte or + // 16-byte loads and stores. This technique probably wouldn't be as + // effective on architectures that are fussier about alignment. + MOVOU 0(SI), X0 + MOVOU X0, 0(DI) + + // d += length + // s += length + ADDQ CX, DI + ADDQ CX, SI + JMP loop + +callMemmove: + // if length > len(dst)-d || length > len(src)-s { etc } + CMPQ CX, AX + JGT errCorrupt + CMPQ CX, BX + JGT errCorrupt + + // copy(dst[d:], src[s:s+length]) + // + // This means calling runtime·memmove(&dst[d], &src[s], length), so we push + // DI, SI and CX as arguments. Coincidentally, we also need to spill those + // three registers to the stack, to save local variables across the CALL. + MOVQ DI, 0(SP) + MOVQ SI, 8(SP) + MOVQ CX, 16(SP) + MOVQ DI, 24(SP) + MOVQ SI, 32(SP) + MOVQ CX, 40(SP) + CALL runtime·memmove(SB) + + // Restore local variables: unspill registers from the stack and + // re-calculate R8-R13. + MOVQ 24(SP), DI + MOVQ 32(SP), SI + MOVQ 40(SP), CX + MOVQ dst_base+0(FP), R8 + MOVQ dst_len+8(FP), R9 + MOVQ R8, R10 + ADDQ R9, R10 + MOVQ src_base+24(FP), R11 + MOVQ src_len+32(FP), R12 + MOVQ R11, R13 + ADDQ R12, R13 + + // d += length + // s += length + ADDQ CX, DI + ADDQ CX, SI + JMP loop + +tagLit60Plus: + // !!! This fragment does the + // + // s += x - 58; if uint(s) > uint(len(src)) { etc } + // + // checks. In the asm version, we code it once instead of once per switch case. + ADDQ CX, SI + SUBQ $58, SI + MOVQ SI, BX + SUBQ R11, BX + CMPQ BX, R12 + JA errCorrupt + + // case x == 60: + CMPL CX, $61 + JEQ tagLit61 + JA tagLit62Plus + + // x = uint32(src[s-1]) + MOVBLZX -1(SI), CX + JMP doLit + +tagLit61: + // case x == 61: + // x = uint32(src[s-2]) | uint32(src[s-1])<<8 + MOVWLZX -2(SI), CX + JMP doLit + +tagLit62Plus: + CMPL CX, $62 + JA tagLit63 + + // case x == 62: + // x = uint32(src[s-3]) | uint32(src[s-2])<<8 | uint32(src[s-1])<<16 + MOVWLZX -3(SI), CX + MOVBLZX -1(SI), BX + SHLL $16, BX + ORL BX, CX + JMP doLit + +tagLit63: + // case x == 63: + // x = uint32(src[s-4]) | uint32(src[s-3])<<8 | uint32(src[s-2])<<16 | uint32(src[s-1])<<24 + MOVL -4(SI), CX + JMP doLit + +// The code above handles literal tags. +// ---------------------------------------- +// The code below handles copy tags. + +tagCopy2: + // case tagCopy2: + // s += 3 + ADDQ $3, SI + + // if uint(s) > uint(len(src)) { etc } + MOVQ SI, BX + SUBQ R11, BX + CMPQ BX, R12 + JA errCorrupt + + // length = 1 + int(src[s-3])>>2 + SHRQ $2, CX + INCQ CX + + // offset = int(src[s-2]) | int(src[s-1])<<8 + MOVWQZX -2(SI), DX + JMP doCopy + +tagCopy: + // We have a copy tag. We assume that: + // - BX == src[s] & 0x03 + // - CX == src[s] + CMPQ BX, $2 + JEQ tagCopy2 + JA errUC4T + + // case tagCopy1: + // s += 2 + ADDQ $2, SI + + // if uint(s) > uint(len(src)) { etc } + MOVQ SI, BX + SUBQ R11, BX + CMPQ BX, R12 + JA errCorrupt + + // offset = int(src[s-2])&0xe0<<3 | int(src[s-1]) + MOVQ CX, DX + ANDQ $0xe0, DX + SHLQ $3, DX + MOVBQZX -1(SI), BX + ORQ BX, DX + + // length = 4 + int(src[s-2])>>2&0x7 + SHRQ $2, CX + ANDQ $7, CX + ADDQ $4, CX + +doCopy: + // This is the end of the outer "switch", when we have a copy tag. + // + // We assume that: + // - CX == length && CX > 0 + // - DX == offset + + // if offset <= 0 { etc } + CMPQ DX, $0 + JLE errCorrupt + + // if d < offset { etc } + MOVQ DI, BX + SUBQ R8, BX + CMPQ BX, DX + JLT errCorrupt + + // if length > len(dst)-d { etc } + MOVQ R10, BX + SUBQ DI, BX + CMPQ CX, BX + JGT errCorrupt + + // forwardCopy(dst[d:d+length], dst[d-offset:]); d += length + // + // Set: + // - R14 = len(dst)-d + // - R15 = &dst[d-offset] + MOVQ R10, R14 + SUBQ DI, R14 + MOVQ DI, R15 + SUBQ DX, R15 + + // !!! Try a faster technique for short (16 or fewer bytes) forward copies. + // + // First, try using two 8-byte load/stores, similar to the doLit technique + // above. Even if dst[d:d+length] and dst[d-offset:] can overlap, this is + // still OK if offset >= 8. Note that this has to be two 8-byte load/stores + // and not one 16-byte load/store, and the first store has to be before the + // second load, due to the overlap if offset is in the range [8, 16). + // + // if length > 16 || offset < 8 || len(dst)-d < 16 { + // goto slowForwardCopy + // } + // copy 16 bytes + // d += length + CMPQ CX, $16 + JGT slowForwardCopy + CMPQ DX, $8 + JLT slowForwardCopy + CMPQ R14, $16 + JLT slowForwardCopy + MOVQ 0(R15), AX + MOVQ AX, 0(DI) + MOVQ 8(R15), BX + MOVQ BX, 8(DI) + ADDQ CX, DI + JMP loop + +slowForwardCopy: + // !!! If the forward copy is longer than 16 bytes, or if offset < 8, we + // can still try 8-byte load stores, provided we can overrun up to 10 extra + // bytes. As above, the overrun will be fixed up by subsequent iterations + // of the outermost loop. + // + // The C++ snappy code calls this technique IncrementalCopyFastPath. Its + // commentary says: + // + // ---- + // + // The main part of this loop is a simple copy of eight bytes at a time + // until we've copied (at least) the requested amount of bytes. However, + // if d and d-offset are less than eight bytes apart (indicating a + // repeating pattern of length < 8), we first need to expand the pattern in + // order to get the correct results. For instance, if the buffer looks like + // this, with the eight-byte and patterns marked as + // intervals: + // + // abxxxxxxxxxxxx + // [------] d-offset + // [------] d + // + // a single eight-byte copy from to will repeat the pattern + // once, after which we can move two bytes without moving : + // + // ababxxxxxxxxxx + // [------] d-offset + // [------] d + // + // and repeat the exercise until the two no longer overlap. + // + // This allows us to do very well in the special case of one single byte + // repeated many times, without taking a big hit for more general cases. + // + // The worst case of extra writing past the end of the match occurs when + // offset == 1 and length == 1; the last copy will read from byte positions + // [0..7] and write to [4..11], whereas it was only supposed to write to + // position 1. Thus, ten excess bytes. + // + // ---- + // + // That "10 byte overrun" worst case is confirmed by Go's + // TestSlowForwardCopyOverrun, which also tests the fixUpSlowForwardCopy + // and finishSlowForwardCopy algorithm. + // + // if length > len(dst)-d-10 { + // goto verySlowForwardCopy + // } + SUBQ $10, R14 + CMPQ CX, R14 + JGT verySlowForwardCopy + +makeOffsetAtLeast8: + // !!! As above, expand the pattern so that offset >= 8 and we can use + // 8-byte load/stores. + // + // for offset < 8 { + // copy 8 bytes from dst[d-offset:] to dst[d:] + // length -= offset + // d += offset + // offset += offset + // // The two previous lines together means that d-offset, and therefore + // // R15, is unchanged. + // } + CMPQ DX, $8 + JGE fixUpSlowForwardCopy + MOVQ (R15), BX + MOVQ BX, (DI) + SUBQ DX, CX + ADDQ DX, DI + ADDQ DX, DX + JMP makeOffsetAtLeast8 + +fixUpSlowForwardCopy: + // !!! Add length (which might be negative now) to d (implied by DI being + // &dst[d]) so that d ends up at the right place when we jump back to the + // top of the loop. Before we do that, though, we save DI to AX so that, if + // length is positive, copying the remaining length bytes will write to the + // right place. + MOVQ DI, AX + ADDQ CX, DI + +finishSlowForwardCopy: + // !!! Repeat 8-byte load/stores until length <= 0. Ending with a negative + // length means that we overrun, but as above, that will be fixed up by + // subsequent iterations of the outermost loop. + CMPQ CX, $0 + JLE loop + MOVQ (R15), BX + MOVQ BX, (AX) + ADDQ $8, R15 + ADDQ $8, AX + SUBQ $8, CX + JMP finishSlowForwardCopy + +verySlowForwardCopy: + // verySlowForwardCopy is a simple implementation of forward copy. In C + // parlance, this is a do/while loop instead of a while loop, since we know + // that length > 0. In Go syntax: + // + // for { + // dst[d] = dst[d - offset] + // d++ + // length-- + // if length == 0 { + // break + // } + // } + MOVB (R15), BX + MOVB BX, (DI) + INCQ R15 + INCQ DI + DECQ CX + JNZ verySlowForwardCopy + JMP loop + +// The code above handles copy tags. +// ---------------------------------------- + +end: + // This is the end of the "for s < len(src)". + // + // if d != len(dst) { etc } + CMPQ DI, R10 + JNE errCorrupt + + // return 0 + MOVQ $0, ret+48(FP) + RET + +errCorrupt: + // return decodeErrCodeCorrupt + MOVQ $1, ret+48(FP) + RET + +errUC4T: + // return decodeErrCodeUnsupportedCopy4Tag + MOVQ $3, ret+48(FP) + RET diff --git a/vendor/github.com/golang/snappy/decode_other.go b/vendor/github.com/golang/snappy/decode_other.go new file mode 100644 index 0000000..b557136 --- /dev/null +++ b/vendor/github.com/golang/snappy/decode_other.go @@ -0,0 +1,96 @@ +// Copyright 2016 The Snappy-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 !amd64 !gc + +package snappy + +// decode writes the decoding of src to dst. It assumes that the varint-encoded +// length of the decompressed bytes has already been read, and that len(dst) +// equals that length. +// +// It returns 0 on success or a decodeErrCodeXxx error code on failure. +func decode(dst, src []byte) int { + var d, s, offset, length int + for s < len(src) { + switch src[s] & 0x03 { + case tagLiteral: + x := uint32(src[s] >> 2) + switch { + case x < 60: + s++ + case x == 60: + s += 2 + if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line. + return decodeErrCodeCorrupt + } + x = uint32(src[s-1]) + case x == 61: + s += 3 + if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line. + return decodeErrCodeCorrupt + } + x = uint32(src[s-2]) | uint32(src[s-1])<<8 + case x == 62: + s += 4 + if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line. + return decodeErrCodeCorrupt + } + x = uint32(src[s-3]) | uint32(src[s-2])<<8 | uint32(src[s-1])<<16 + case x == 63: + s += 5 + if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line. + return decodeErrCodeCorrupt + } + x = uint32(src[s-4]) | uint32(src[s-3])<<8 | uint32(src[s-2])<<16 | uint32(src[s-1])<<24 + } + length = int(x) + 1 + if length <= 0 { + return decodeErrCodeUnsupportedLiteralLength + } + if length > len(dst)-d || length > len(src)-s { + return decodeErrCodeCorrupt + } + copy(dst[d:], src[s:s+length]) + d += length + s += length + continue + + case tagCopy1: + s += 2 + if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line. + return decodeErrCodeCorrupt + } + length = 4 + int(src[s-2])>>2&0x7 + offset = int(src[s-2])&0xe0<<3 | int(src[s-1]) + + case tagCopy2: + s += 3 + if uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line. + return decodeErrCodeCorrupt + } + length = 1 + int(src[s-3])>>2 + offset = int(src[s-2]) | int(src[s-1])<<8 + + case tagCopy4: + return decodeErrCodeUnsupportedCopy4Tag + } + + if offset <= 0 || d < offset || length > len(dst)-d { + return decodeErrCodeCorrupt + } + // Copy from an earlier sub-slice of dst to a later sub-slice. Unlike + // the built-in copy function, this byte-by-byte copy always runs + // forwards, even if the slices overlap. Conceptually, this is: + // + // d += forwardCopy(dst[d:d+length], dst[d-offset:]) + for end := d + length; d != end; d++ { + dst[d] = dst[d-offset] + } + } + if d != len(dst) { + return decodeErrCodeCorrupt + } + return 0 +} diff --git a/vendor/github.com/golang/snappy/encode.go b/vendor/github.com/golang/snappy/encode.go new file mode 100644 index 0000000..0fc1cc9 --- /dev/null +++ b/vendor/github.com/golang/snappy/encode.go @@ -0,0 +1,502 @@ +// Copyright 2011 The Snappy-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. + +package snappy + +import ( + "encoding/binary" + "errors" + "io" +) + +// maxOffset limits how far copy back-references can go, the same as the C++ +// code. +const maxOffset = 1 << 15 + +func load32(b []byte, i int) uint32 { + b = b[i : i+4 : len(b)] // Help the compiler eliminate bounds checks on the next line. + return uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 +} + +func load64(b []byte, i int) uint64 { + b = b[i : i+8 : len(b)] // Help the compiler eliminate bounds checks on the next line. + return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | + uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 +} + +// emitLiteral writes a literal chunk and returns the number of bytes written. +func emitLiteral(dst, lit []byte) int { + i, n := 0, uint(len(lit)-1) + switch { + case n < 60: + dst[0] = uint8(n)<<2 | tagLiteral + i = 1 + case n < 1<<8: + dst[0] = 60<<2 | tagLiteral + dst[1] = uint8(n) + i = 2 + case n < 1<<16: + dst[0] = 61<<2 | tagLiteral + dst[1] = uint8(n) + dst[2] = uint8(n >> 8) + i = 3 + case n < 1<<24: + dst[0] = 62<<2 | tagLiteral + dst[1] = uint8(n) + dst[2] = uint8(n >> 8) + dst[3] = uint8(n >> 16) + i = 4 + case int64(n) < 1<<32: + dst[0] = 63<<2 | tagLiteral + dst[1] = uint8(n) + dst[2] = uint8(n >> 8) + dst[3] = uint8(n >> 16) + dst[4] = uint8(n >> 24) + i = 5 + default: + panic("snappy: source buffer is too long") + } + if copy(dst[i:], lit) != len(lit) { + panic("snappy: destination buffer is too short") + } + return i + len(lit) +} + +// emitCopy writes a copy chunk and returns the number of bytes written. +func emitCopy(dst []byte, offset, length int) int { + i := 0 + // The maximum length for a single tagCopy1 or tagCopy2 op is 64 bytes. The + // threshold for this loop is a little higher (at 68 = 64 + 4), and the + // length emitted down below is is a little lower (at 60 = 64 - 4), because + // it's shorter to encode a length 67 copy as a length 60 tagCopy2 followed + // by a length 7 tagCopy1 (which encodes as 3+2 bytes) than to encode it as + // a length 64 tagCopy2 followed by a length 3 tagCopy2 (which encodes as + // 3+3 bytes). The magic 4 in the 64±4 is because the minimum length for a + // tagCopy1 op is 4 bytes, which is why a length 3 copy has to be an + // encodes-as-3-bytes tagCopy2 instead of an encodes-as-2-bytes tagCopy1. + for length >= 68 { + // Emit a length 64 copy, encoded as 3 bytes. + dst[i+0] = 63<<2 | tagCopy2 + dst[i+1] = uint8(offset) + dst[i+2] = uint8(offset >> 8) + i += 3 + length -= 64 + } + if length > 64 { + // Emit a length 60 copy, encoded as 3 bytes. + dst[i+0] = 59<<2 | tagCopy2 + dst[i+1] = uint8(offset) + dst[i+2] = uint8(offset >> 8) + i += 3 + length -= 60 + } + if length >= 12 || offset >= 2048 { + // Emit the remaining copy, encoded as 3 bytes. + dst[i+0] = uint8(length-1)<<2 | tagCopy2 + dst[i+1] = uint8(offset) + dst[i+2] = uint8(offset >> 8) + return i + 3 + } + // Emit the remaining copy, encoded as 2 bytes. + dst[i+0] = uint8(offset>>8)<<5 | uint8(length-4)<<2 | tagCopy1 + dst[i+1] = uint8(offset) + return i + 2 +} + +// Encode returns the encoded form of src. The returned slice may be a sub- +// slice of dst if dst was large enough to hold the entire encoded block. +// Otherwise, a newly allocated slice will be returned. +// +// It is valid to pass a nil dst. +func Encode(dst, src []byte) []byte { + if n := MaxEncodedLen(len(src)); n < 0 { + panic(ErrTooLarge) + } else if len(dst) < n { + dst = make([]byte, n) + } + + // The block starts with the varint-encoded length of the decompressed bytes. + d := binary.PutUvarint(dst, uint64(len(src))) + + for len(src) > 0 { + p := src + src = nil + if len(p) > maxBlockSize { + p, src = p[:maxBlockSize], p[maxBlockSize:] + } + if len(p) < minNonLiteralBlockSize { + d += emitLiteral(dst[d:], p) + } else { + d += encodeBlock(dst[d:], p) + } + } + return dst[:d] +} + +// inputMargin is the minimum number of extra input bytes to keep, inside +// encodeBlock's inner loop. On some architectures, this margin lets us +// implement a fast path for emitLiteral, where the copy of short (<= 16 byte) +// literals can be implemented as a single load to and store from a 16-byte +// register. That literal's actual length can be as short as 1 byte, so this +// can copy up to 15 bytes too much, but that's OK as subsequent iterations of +// the encoding loop will fix up the copy overrun, and this inputMargin ensures +// that we don't overrun the dst and src buffers. +// +// TODO: implement this fast path. +const inputMargin = 16 - 1 + +// minNonLiteralBlockSize is the minimum size of the input to encodeBlock that +// could be encoded with a copy tag. This is the minimum with respect to the +// algorithm used by encodeBlock, not a minimum enforced by the file format. +// +// The encoded output must start with at least a 1 byte literal, as there are +// no previous bytes to copy. A minimal (1 byte) copy after that, generated +// from an emitCopy call in encodeBlock's main loop, would require at least +// another inputMargin bytes, for the reason above: we want any emitLiteral +// calls inside encodeBlock's main loop to use the fast path if possible, which +// requires being able to overrun by inputMargin bytes. Thus, +// minNonLiteralBlockSize equals 1 + 1 + inputMargin. +// +// The C++ code doesn't use this exact threshold, but it could, as discussed at +// https://groups.google.com/d/topic/snappy-compression/oGbhsdIJSJ8/discussion +// The difference between Go (2+inputMargin) and C++ (inputMargin) is purely an +// optimization. It should not affect the encoded form. This is tested by +// TestSameEncodingAsCppShortCopies. +const minNonLiteralBlockSize = 1 + 1 + inputMargin + +func hash(u, shift uint32) uint32 { + return (u * 0x1e35a7bd) >> shift +} + +// encodeBlock encodes a non-empty src to a guaranteed-large-enough dst. It +// assumes that the varint-encoded length of the decompressed bytes has already +// been written. +// +// It also assumes that: +// len(dst) >= MaxEncodedLen(len(src)) && +// minNonLiteralBlockSize <= len(src) && len(src) <= maxBlockSize +func encodeBlock(dst, src []byte) (d int) { + // Initialize the hash table. Its size ranges from 1<<8 to 1<<14 inclusive. + const maxTableSize = 1 << 14 + shift, tableSize := uint32(32-8), 1<<8 + for tableSize < maxTableSize && tableSize < len(src) { + shift-- + tableSize *= 2 + } + var table [maxTableSize]int32 + + // sLimit is when to stop looking for offset/length copies. The inputMargin + // lets us use a fast path for emitLiteral in the main loop, while we are + // looking for copies. + sLimit := len(src) - inputMargin + + // nextEmit is where in src the next emitLiteral should start from. + nextEmit := 0 + + // The encoded form must start with a literal, as there are no previous + // bytes to copy, so we start looking for hash matches at s == 1. + s := 1 + nextHash := hash(load32(src, s), shift) + + for { + // Copied from the C++ snappy implementation: + // + // Heuristic match skipping: If 32 bytes are scanned with no matches + // found, start looking only at every other byte. If 32 more bytes are + // scanned, look at every third byte, etc.. When a match is found, + // immediately go back to looking at every byte. This is a small loss + // (~5% performance, ~0.1% density) for compressible data due to more + // bookkeeping, but for non-compressible data (such as JPEG) it's a + // huge win since the compressor quickly "realizes" the data is + // incompressible and doesn't bother looking for matches everywhere. + // + // The "skip" variable keeps track of how many bytes there are since + // the last match; dividing it by 32 (ie. right-shifting by five) gives + // the number of bytes to move ahead for each iteration. + skip := 32 + + nextS := s + candidate := 0 + for { + s = nextS + nextS = s + skip>>5 + skip++ + if nextS > sLimit { + goto emitRemainder + } + candidate = int(table[nextHash]) + table[nextHash] = int32(s) + nextHash = hash(load32(src, nextS), shift) + if load32(src, s) == load32(src, candidate) { + break + } + } + + // A 4-byte match has been found. We'll later see if more than 4 bytes + // match. But, prior to the match, src[nextEmit:s] are unmatched. Emit + // them as literal bytes. + d += emitLiteral(dst[d:], src[nextEmit:s]) + + // Call emitCopy, and then see if another emitCopy could be our next + // move. Repeat until we find no match for the input immediately after + // what was consumed by the last emitCopy call. + // + // If we exit this loop normally then we need to call emitLiteral next, + // though we don't yet know how big the literal will be. We handle that + // by proceeding to the next iteration of the main loop. We also can + // exit this loop via goto if we get close to exhausting the input. + for { + // Invariant: we have a 4-byte match at s, and no need to emit any + // literal bytes prior to s. + base := s + s += 4 + for i := candidate + 4; s < len(src) && src[i] == src[s]; i, s = i+1, s+1 { + } + d += emitCopy(dst[d:], base-candidate, s-base) + nextEmit = s + if s >= sLimit { + goto emitRemainder + } + + // We could immediately start working at s now, but to improve + // compression we first update the hash table at s-1 and at s. If + // another emitCopy is not our next move, also calculate nextHash + // at s+1. At least on GOARCH=amd64, these three hash calculations + // are faster as one load64 call (with some shifts) instead of + // three load32 calls. + x := load64(src, s-1) + prevHash := hash(uint32(x>>0), shift) + table[prevHash] = int32(s - 1) + currHash := hash(uint32(x>>8), shift) + candidate = int(table[currHash]) + table[currHash] = int32(s) + if uint32(x>>8) != load32(src, candidate) { + nextHash = hash(uint32(x>>16), shift) + s++ + break + } + } + } + +emitRemainder: + if nextEmit < len(src) { + d += emitLiteral(dst[d:], src[nextEmit:]) + } + return d +} + +// MaxEncodedLen returns the maximum length of a snappy block, given its +// uncompressed length. +// +// It will return a negative value if srcLen is too large to encode. +func MaxEncodedLen(srcLen int) int { + n := uint64(srcLen) + if n > 0xffffffff { + return -1 + } + // Compressed data can be defined as: + // compressed := item* literal* + // item := literal* copy + // + // The trailing literal sequence has a space blowup of at most 62/60 + // since a literal of length 60 needs one tag byte + one extra byte + // for length information. + // + // Item blowup is trickier to measure. Suppose the "copy" op copies + // 4 bytes of data. Because of a special check in the encoding code, + // we produce a 4-byte copy only if the offset is < 65536. Therefore + // the copy op takes 3 bytes to encode, and this type of item leads + // to at most the 62/60 blowup for representing literals. + // + // Suppose the "copy" op copies 5 bytes of data. If the offset is big + // enough, it will take 5 bytes to encode the copy op. Therefore the + // worst case here is a one-byte literal followed by a five-byte copy. + // That is, 6 bytes of input turn into 7 bytes of "compressed" data. + // + // This last factor dominates the blowup, so the final estimate is: + n = 32 + n + n/6 + if n > 0xffffffff { + return -1 + } + return int(n) +} + +var errClosed = errors.New("snappy: Writer is closed") + +// NewWriter returns a new Writer that compresses to w. +// +// The Writer returned does not buffer writes. There is no need to Flush or +// Close such a Writer. +// +// Deprecated: the Writer returned is not suitable for many small writes, only +// for few large writes. Use NewBufferedWriter instead, which is efficient +// regardless of the frequency and shape of the writes, and remember to Close +// that Writer when done. +func NewWriter(w io.Writer) *Writer { + return &Writer{ + w: w, + obuf: make([]byte, obufLen), + } +} + +// NewBufferedWriter returns a new Writer that compresses to w, using the +// framing format described at +// https://github.com/google/snappy/blob/master/framing_format.txt +// +// The Writer returned buffers writes. Users must call Close to guarantee all +// data has been forwarded to the underlying io.Writer. They may also call +// Flush zero or more times before calling Close. +func NewBufferedWriter(w io.Writer) *Writer { + return &Writer{ + w: w, + ibuf: make([]byte, 0, maxBlockSize), + obuf: make([]byte, obufLen), + } +} + +// Writer is an io.Writer than can write Snappy-compressed bytes. +type Writer struct { + w io.Writer + err error + + // ibuf is a buffer for the incoming (uncompressed) bytes. + // + // Its use is optional. For backwards compatibility, Writers created by the + // NewWriter function have ibuf == nil, do not buffer incoming bytes, and + // therefore do not need to be Flush'ed or Close'd. + ibuf []byte + + // obuf is a buffer for the outgoing (compressed) bytes. + obuf []byte + + // wroteStreamHeader is whether we have written the stream header. + wroteStreamHeader bool +} + +// Reset discards the writer's state and switches the Snappy writer to write to +// w. This permits reusing a Writer rather than allocating a new one. +func (w *Writer) Reset(writer io.Writer) { + w.w = writer + w.err = nil + if w.ibuf != nil { + w.ibuf = w.ibuf[:0] + } + w.wroteStreamHeader = false +} + +// Write satisfies the io.Writer interface. +func (w *Writer) Write(p []byte) (nRet int, errRet error) { + if w.ibuf == nil { + // Do not buffer incoming bytes. This does not perform or compress well + // if the caller of Writer.Write writes many small slices. This + // behavior is therefore deprecated, but still supported for backwards + // compatibility with code that doesn't explicitly Flush or Close. + return w.write(p) + } + + // The remainder of this method is based on bufio.Writer.Write from the + // standard library. + + for len(p) > (cap(w.ibuf)-len(w.ibuf)) && w.err == nil { + var n int + if len(w.ibuf) == 0 { + // Large write, empty buffer. + // Write directly from p to avoid copy. + n, _ = w.write(p) + } else { + n = copy(w.ibuf[len(w.ibuf):cap(w.ibuf)], p) + w.ibuf = w.ibuf[:len(w.ibuf)+n] + w.Flush() + } + nRet += n + p = p[n:] + } + if w.err != nil { + return nRet, w.err + } + n := copy(w.ibuf[len(w.ibuf):cap(w.ibuf)], p) + w.ibuf = w.ibuf[:len(w.ibuf)+n] + nRet += n + return nRet, nil +} + +func (w *Writer) write(p []byte) (nRet int, errRet error) { + if w.err != nil { + return 0, w.err + } + for len(p) > 0 { + obufStart := len(magicChunk) + if !w.wroteStreamHeader { + w.wroteStreamHeader = true + copy(w.obuf, magicChunk) + obufStart = 0 + } + + var uncompressed []byte + if len(p) > maxBlockSize { + uncompressed, p = p[:maxBlockSize], p[maxBlockSize:] + } else { + uncompressed, p = p, nil + } + checksum := crc(uncompressed) + + // Compress the buffer, discarding the result if the improvement + // isn't at least 12.5%. + compressed := Encode(w.obuf[obufHeaderLen:], uncompressed) + chunkType := uint8(chunkTypeCompressedData) + chunkLen := 4 + len(compressed) + obufEnd := obufHeaderLen + len(compressed) + if len(compressed) >= len(uncompressed)-len(uncompressed)/8 { + chunkType = chunkTypeUncompressedData + chunkLen = 4 + len(uncompressed) + obufEnd = obufHeaderLen + } + + // Fill in the per-chunk header that comes before the body. + w.obuf[len(magicChunk)+0] = chunkType + w.obuf[len(magicChunk)+1] = uint8(chunkLen >> 0) + w.obuf[len(magicChunk)+2] = uint8(chunkLen >> 8) + w.obuf[len(magicChunk)+3] = uint8(chunkLen >> 16) + w.obuf[len(magicChunk)+4] = uint8(checksum >> 0) + w.obuf[len(magicChunk)+5] = uint8(checksum >> 8) + w.obuf[len(magicChunk)+6] = uint8(checksum >> 16) + w.obuf[len(magicChunk)+7] = uint8(checksum >> 24) + + if _, err := w.w.Write(w.obuf[obufStart:obufEnd]); err != nil { + w.err = err + return nRet, err + } + if chunkType == chunkTypeUncompressedData { + if _, err := w.w.Write(uncompressed); err != nil { + w.err = err + return nRet, err + } + } + nRet += len(uncompressed) + } + return nRet, nil +} + +// Flush flushes the Writer to its underlying io.Writer. +func (w *Writer) Flush() error { + if w.err != nil { + return w.err + } + if len(w.ibuf) == 0 { + return nil + } + w.write(w.ibuf) + w.ibuf = w.ibuf[:0] + return w.err +} + +// Close calls Flush and then closes the Writer. +func (w *Writer) Close() error { + w.Flush() + ret := w.err + if w.err == nil { + w.err = errClosed + } + return ret +} diff --git a/vendor/github.com/golang/snappy/snappy.go b/vendor/github.com/golang/snappy/snappy.go new file mode 100644 index 0000000..0102542 --- /dev/null +++ b/vendor/github.com/golang/snappy/snappy.go @@ -0,0 +1,84 @@ +// Copyright 2011 The Snappy-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. + +// Package snappy implements the snappy block-based compression format. +// It aims for very high speeds and reasonable compression. +// +// The C++ snappy implementation is at https://github.com/google/snappy +package snappy // import "github.com/golang/snappy" + +import ( + "hash/crc32" +) + +/* +Each encoded block begins with the varint-encoded length of the decoded data, +followed by a sequence of chunks. Chunks begin and end on byte boundaries. The +first byte of each chunk is broken into its 2 least and 6 most significant bits +called l and m: l ranges in [0, 4) and m ranges in [0, 64). l is the chunk tag. +Zero means a literal tag. All other values mean a copy tag. + +For literal tags: + - If m < 60, the next 1 + m bytes are literal bytes. + - Otherwise, let n be the little-endian unsigned integer denoted by the next + m - 59 bytes. The next 1 + n bytes after that are literal bytes. + +For copy tags, length bytes are copied from offset bytes ago, in the style of +Lempel-Ziv compression algorithms. In particular: + - For l == 1, the offset ranges in [0, 1<<11) and the length in [4, 12). + The length is 4 + the low 3 bits of m. The high 3 bits of m form bits 8-10 + of the offset. The next byte is bits 0-7 of the offset. + - For l == 2, the offset ranges in [0, 1<<16) and the length in [1, 65). + The length is 1 + m. The offset is the little-endian unsigned integer + denoted by the next 2 bytes. + - For l == 3, this tag is a legacy format that is no longer supported. +*/ +const ( + tagLiteral = 0x00 + tagCopy1 = 0x01 + tagCopy2 = 0x02 + tagCopy4 = 0x03 +) + +const ( + checksumSize = 4 + chunkHeaderSize = 4 + magicChunk = "\xff\x06\x00\x00" + magicBody + magicBody = "sNaPpY" + + // maxBlockSize is the maximum size of the input to encodeBlock. It is not + // part of the wire format per se, but some parts of the encoder assume + // that an offset fits into a uint16. + // + // Also, for the framing format (Writer type instead of Encode function), + // https://github.com/google/snappy/blob/master/framing_format.txt says + // that "the uncompressed data in a chunk must be no longer than 65536 + // bytes". + maxBlockSize = 65536 + + // maxEncodedLenOfMaxBlockSize equals MaxEncodedLen(maxBlockSize), but is + // hard coded to be a const instead of a variable, so that obufLen can also + // be a const. Their equivalence is confirmed by + // TestMaxEncodedLenOfMaxBlockSize. + maxEncodedLenOfMaxBlockSize = 76490 + + obufHeaderLen = len(magicChunk) + checksumSize + chunkHeaderSize + obufLen = obufHeaderLen + maxEncodedLenOfMaxBlockSize +) + +const ( + chunkTypeCompressedData = 0x00 + chunkTypeUncompressedData = 0x01 + chunkTypePadding = 0xfe + chunkTypeStreamIdentifier = 0xff +) + +var crcTable = crc32.MakeTable(crc32.Castagnoli) + +// crc implements the checksum specified in section 3 of +// https://github.com/google/snappy/blob/master/framing_format.txt +func crc(b []byte) uint32 { + c := crc32.Update(0, crcTable, b) + return uint32(c>>15|c<<17) + 0xa282ead8 +} diff --git a/vendor/github.com/golang/snappy/snappy_test.go b/vendor/github.com/golang/snappy/snappy_test.go new file mode 100644 index 0000000..714e2a2 --- /dev/null +++ b/vendor/github.com/golang/snappy/snappy_test.go @@ -0,0 +1,1131 @@ +// Copyright 2011 The Snappy-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. + +package snappy + +import ( + "bytes" + "encoding/binary" + "flag" + "fmt" + "io" + "io/ioutil" + "math/rand" + "net/http" + "os" + "os/exec" + "path/filepath" + "runtime" + "strings" + "testing" +) + +var download = flag.Bool("download", false, "If true, download any missing files before running benchmarks") + +// goEncoderShouldMatchCppEncoder is whether to test that the algorithm used by +// Go's encoder matches byte-for-byte what the C++ snappy encoder produces, on +// this GOARCH. There is more than one valid encoding of any given input, and +// there is more than one good algorithm along the frontier of trading off +// throughput for output size. Nonetheless, we presume that the C++ encoder's +// algorithm is a good one and has been tested on a wide range of inputs, so +// matching that exactly should mean that the Go encoder's algorithm is also +// good, without needing to gather our own corpus of test data. +// +// The exact algorithm used by the C++ code is potentially endian dependent, as +// it puns a byte pointer to a uint32 pointer to load, hash and compare 4 bytes +// at a time. The Go implementation is endian agnostic, in that its output is +// the same (as little-endian C++ code), regardless of the CPU's endianness. +// +// Thus, when comparing Go's output to C++ output generated beforehand, such as +// the "testdata/pi.txt.rawsnappy" file generated by C++ code on a little- +// endian system, we can run that test regardless of the runtime.GOARCH value. +// +// When comparing Go's output to dynamically generated C++ output, i.e. the +// result of fork/exec'ing a C++ program, we can run that test only on +// little-endian systems, because the C++ output might be different on +// big-endian systems. The runtime package doesn't export endianness per se, +// but we can restrict this match-C++ test to common little-endian systems. +const goEncoderShouldMatchCppEncoder = runtime.GOARCH == "386" || runtime.GOARCH == "amd64" || runtime.GOARCH == "arm" + +func TestMaxEncodedLenOfMaxBlockSize(t *testing.T) { + got := maxEncodedLenOfMaxBlockSize + want := MaxEncodedLen(maxBlockSize) + if got != want { + t.Fatalf("got %d, want %d", got, want) + } +} + +func cmp(a, b []byte) error { + if bytes.Equal(a, b) { + return nil + } + if len(a) != len(b) { + return fmt.Errorf("got %d bytes, want %d", len(a), len(b)) + } + for i := range a { + if a[i] != b[i] { + return fmt.Errorf("byte #%d: got 0x%02x, want 0x%02x", i, a[i], b[i]) + } + } + return nil +} + +func roundtrip(b, ebuf, dbuf []byte) error { + d, err := Decode(dbuf, Encode(ebuf, b)) + if err != nil { + return fmt.Errorf("decoding error: %v", err) + } + if err := cmp(d, b); err != nil { + return fmt.Errorf("roundtrip mismatch: %v", err) + } + return nil +} + +func TestEmpty(t *testing.T) { + if err := roundtrip(nil, nil, nil); err != nil { + t.Fatal(err) + } +} + +func TestSmallCopy(t *testing.T) { + for _, ebuf := range [][]byte{nil, make([]byte, 20), make([]byte, 64)} { + for _, dbuf := range [][]byte{nil, make([]byte, 20), make([]byte, 64)} { + for i := 0; i < 32; i++ { + s := "aaaa" + strings.Repeat("b", i) + "aaaabbbb" + if err := roundtrip([]byte(s), ebuf, dbuf); err != nil { + t.Errorf("len(ebuf)=%d, len(dbuf)=%d, i=%d: %v", len(ebuf), len(dbuf), i, err) + } + } + } + } +} + +func TestSmallRand(t *testing.T) { + rng := rand.New(rand.NewSource(1)) + for n := 1; n < 20000; n += 23 { + b := make([]byte, n) + for i := range b { + b[i] = uint8(rng.Intn(256)) + } + if err := roundtrip(b, nil, nil); err != nil { + t.Fatal(err) + } + } +} + +func TestSmallRegular(t *testing.T) { + for n := 1; n < 20000; n += 23 { + b := make([]byte, n) + for i := range b { + b[i] = uint8(i%10 + 'a') + } + if err := roundtrip(b, nil, nil); err != nil { + t.Fatal(err) + } + } +} + +func TestInvalidVarint(t *testing.T) { + testCases := []struct { + desc string + input string + }{{ + "invalid varint, final byte has continuation bit set", + "\xff", + }, { + "invalid varint, value overflows uint64", + "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00", + }, { + // https://github.com/google/snappy/blob/master/format_description.txt + // says that "the stream starts with the uncompressed length [as a + // varint] (up to a maximum of 2^32 - 1)". + "valid varint (as uint64), but value overflows uint32", + "\x80\x80\x80\x80\x10", + }} + + for _, tc := range testCases { + input := []byte(tc.input) + if _, err := DecodedLen(input); err != ErrCorrupt { + t.Errorf("%s: DecodedLen: got %v, want ErrCorrupt", tc.desc, err) + } + if _, err := Decode(nil, input); err != ErrCorrupt { + t.Errorf("%s: Decode: got %v, want ErrCorrupt", tc.desc, err) + } + } +} + +func TestDecode(t *testing.T) { + lit40Bytes := make([]byte, 40) + for i := range lit40Bytes { + lit40Bytes[i] = byte(i) + } + lit40 := string(lit40Bytes) + + testCases := []struct { + desc string + input string + want string + wantErr error + }{{ + `decodedLen=0; valid input`, + "\x00", + "", + nil, + }, { + `decodedLen=3; tagLiteral, 0-byte length; length=3; valid input`, + "\x03" + "\x08\xff\xff\xff", + "\xff\xff\xff", + nil, + }, { + `decodedLen=2; tagLiteral, 0-byte length; length=3; not enough dst bytes`, + "\x02" + "\x08\xff\xff\xff", + "", + ErrCorrupt, + }, { + `decodedLen=3; tagLiteral, 0-byte length; length=3; not enough src bytes`, + "\x03" + "\x08\xff\xff", + "", + ErrCorrupt, + }, { + `decodedLen=40; tagLiteral, 0-byte length; length=40; valid input`, + "\x28" + "\x9c" + lit40, + lit40, + nil, + }, { + `decodedLen=1; tagLiteral, 1-byte length; not enough length bytes`, + "\x01" + "\xf0", + "", + ErrCorrupt, + }, { + `decodedLen=3; tagLiteral, 1-byte length; length=3; valid input`, + "\x03" + "\xf0\x02\xff\xff\xff", + "\xff\xff\xff", + nil, + }, { + `decodedLen=1; tagLiteral, 2-byte length; not enough length bytes`, + "\x01" + "\xf4\x00", + "", + ErrCorrupt, + }, { + `decodedLen=3; tagLiteral, 2-byte length; length=3; valid input`, + "\x03" + "\xf4\x02\x00\xff\xff\xff", + "\xff\xff\xff", + nil, + }, { + `decodedLen=1; tagLiteral, 3-byte length; not enough length bytes`, + "\x01" + "\xf8\x00\x00", + "", + ErrCorrupt, + }, { + `decodedLen=3; tagLiteral, 3-byte length; length=3; valid input`, + "\x03" + "\xf8\x02\x00\x00\xff\xff\xff", + "\xff\xff\xff", + nil, + }, { + `decodedLen=1; tagLiteral, 4-byte length; not enough length bytes`, + "\x01" + "\xfc\x00\x00\x00", + "", + ErrCorrupt, + }, { + `decodedLen=1; tagLiteral, 4-byte length; length=3; not enough dst bytes`, + "\x01" + "\xfc\x02\x00\x00\x00\xff\xff\xff", + "", + ErrCorrupt, + }, { + `decodedLen=4; tagLiteral, 4-byte length; length=3; not enough src bytes`, + "\x04" + "\xfc\x02\x00\x00\x00\xff", + "", + ErrCorrupt, + }, { + `decodedLen=3; tagLiteral, 4-byte length; length=3; valid input`, + "\x03" + "\xfc\x02\x00\x00\x00\xff\xff\xff", + "\xff\xff\xff", + nil, + }, { + `decodedLen=4; tagCopy1, 1 extra length|offset byte; not enough extra bytes`, + "\x04" + "\x01", + "", + ErrCorrupt, + }, { + `decodedLen=4; tagCopy2, 2 extra length|offset bytes; not enough extra bytes`, + "\x04" + "\x02\x00", + "", + ErrCorrupt, + }, { + `decodedLen=4; tagCopy4; unsupported COPY_4 tag`, + "\x04" + "\x03\x00\x00\x00\x00", + "", + errUnsupportedCopy4Tag, + }, { + `decodedLen=4; tagLiteral (4 bytes "abcd"); valid input`, + "\x04" + "\x0cabcd", + "abcd", + nil, + }, { + `decodedLen=13; tagLiteral (4 bytes "abcd"); tagCopy1; length=9 offset=4; valid input`, + "\x0d" + "\x0cabcd" + "\x15\x04", + "abcdabcdabcda", + nil, + }, { + `decodedLen=8; tagLiteral (4 bytes "abcd"); tagCopy1; length=4 offset=4; valid input`, + "\x08" + "\x0cabcd" + "\x01\x04", + "abcdabcd", + nil, + }, { + `decodedLen=8; tagLiteral (4 bytes "abcd"); tagCopy1; length=4 offset=2; valid input`, + "\x08" + "\x0cabcd" + "\x01\x02", + "abcdcdcd", + nil, + }, { + `decodedLen=8; tagLiteral (4 bytes "abcd"); tagCopy1; length=4 offset=1; valid input`, + "\x08" + "\x0cabcd" + "\x01\x01", + "abcddddd", + nil, + }, { + `decodedLen=8; tagLiteral (4 bytes "abcd"); tagCopy1; length=4 offset=0; zero offset`, + "\x08" + "\x0cabcd" + "\x01\x00", + "", + ErrCorrupt, + }, { + `decodedLen=9; tagLiteral (4 bytes "abcd"); tagCopy1; length=4 offset=4; inconsistent dLen`, + "\x09" + "\x0cabcd" + "\x01\x04", + "", + ErrCorrupt, + }, { + `decodedLen=8; tagLiteral (4 bytes "abcd"); tagCopy1; length=4 offset=5; offset too large`, + "\x08" + "\x0cabcd" + "\x01\x05", + "", + ErrCorrupt, + }, { + `decodedLen=7; tagLiteral (4 bytes "abcd"); tagCopy1; length=4 offset=4; length too large`, + "\x07" + "\x0cabcd" + "\x01\x04", + "", + ErrCorrupt, + }, { + `decodedLen=6; tagLiteral (4 bytes "abcd"); tagCopy2; length=2 offset=3; valid input`, + "\x06" + "\x0cabcd" + "\x06\x03\x00", + "abcdbc", + nil, + }} + + const ( + // notPresentXxx defines a range of byte values [0xa0, 0xc5) that are + // not present in either the input or the output. It is written to dBuf + // to check that Decode does not write bytes past the end of + // dBuf[:dLen]. + // + // The magic number 37 was chosen because it is prime. A more 'natural' + // number like 32 might lead to a false negative if, for example, a + // byte was incorrectly copied 4*8 bytes later. + notPresentBase = 0xa0 + notPresentLen = 37 + ) + + var dBuf [100]byte +loop: + for i, tc := range testCases { + input := []byte(tc.input) + for _, x := range input { + if notPresentBase <= x && x < notPresentBase+notPresentLen { + t.Errorf("#%d (%s): input shouldn't contain %#02x\ninput: % x", i, tc.desc, x, input) + continue loop + } + } + + dLen, n := binary.Uvarint(input) + if n <= 0 { + t.Errorf("#%d (%s): invalid varint-encoded dLen", i, tc.desc) + continue + } + if dLen > uint64(len(dBuf)) { + t.Errorf("#%d (%s): dLen %d is too large", i, tc.desc, dLen) + continue + } + + for j := range dBuf { + dBuf[j] = byte(notPresentBase + j%notPresentLen) + } + g, gotErr := Decode(dBuf[:], input) + if got := string(g); got != tc.want || gotErr != tc.wantErr { + t.Errorf("#%d (%s):\ngot %q, %v\nwant %q, %v", + i, tc.desc, got, gotErr, tc.want, tc.wantErr) + continue + } + for j, x := range dBuf { + if uint64(j) < dLen { + continue + } + if w := byte(notPresentBase + j%notPresentLen); x != w { + t.Errorf("#%d (%s): Decode overrun: dBuf[%d] was modified: got %#02x, want %#02x\ndBuf: % x", + i, tc.desc, j, x, w, dBuf) + continue loop + } + } + } +} + +// TestDecodeLengthOffset tests decoding an encoding of the form literal + +// copy-length-offset + literal. For example: "abcdefghijkl" + "efghij" + "AB". +func TestDecodeLengthOffset(t *testing.T) { + const ( + prefix = "abcdefghijklmnopqr" + suffix = "ABCDEFGHIJKLMNOPQR" + + // notPresentXxx defines a range of byte values [0xa0, 0xc5) that are + // not present in either the input or the output. It is written to + // gotBuf to check that Decode does not write bytes past the end of + // gotBuf[:totalLen]. + // + // The magic number 37 was chosen because it is prime. A more 'natural' + // number like 32 might lead to a false negative if, for example, a + // byte was incorrectly copied 4*8 bytes later. + notPresentBase = 0xa0 + notPresentLen = 37 + ) + var gotBuf, wantBuf, inputBuf [128]byte + for length := 1; length <= 18; length++ { + for offset := 1; offset <= 18; offset++ { + loop: + for suffixLen := 0; suffixLen <= 18; suffixLen++ { + totalLen := len(prefix) + length + suffixLen + + inputLen := binary.PutUvarint(inputBuf[:], uint64(totalLen)) + inputBuf[inputLen] = tagLiteral + 4*byte(len(prefix)-1) + inputLen++ + inputLen += copy(inputBuf[inputLen:], prefix) + inputBuf[inputLen+0] = tagCopy2 + 4*byte(length-1) + inputBuf[inputLen+1] = byte(offset) + inputBuf[inputLen+2] = 0x00 + inputLen += 3 + if suffixLen > 0 { + inputBuf[inputLen] = tagLiteral + 4*byte(suffixLen-1) + inputLen++ + inputLen += copy(inputBuf[inputLen:], suffix[:suffixLen]) + } + input := inputBuf[:inputLen] + + for i := range gotBuf { + gotBuf[i] = byte(notPresentBase + i%notPresentLen) + } + got, err := Decode(gotBuf[:], input) + if err != nil { + t.Errorf("length=%d, offset=%d; suffixLen=%d: %v", length, offset, suffixLen, err) + continue + } + + wantLen := 0 + wantLen += copy(wantBuf[wantLen:], prefix) + for i := 0; i < length; i++ { + wantBuf[wantLen] = wantBuf[wantLen-offset] + wantLen++ + } + wantLen += copy(wantBuf[wantLen:], suffix[:suffixLen]) + want := wantBuf[:wantLen] + + for _, x := range input { + if notPresentBase <= x && x < notPresentBase+notPresentLen { + t.Errorf("length=%d, offset=%d; suffixLen=%d: input shouldn't contain %#02x\ninput: % x", + length, offset, suffixLen, x, input) + continue loop + } + } + for i, x := range gotBuf { + if i < totalLen { + continue + } + if w := byte(notPresentBase + i%notPresentLen); x != w { + t.Errorf("length=%d, offset=%d; suffixLen=%d; totalLen=%d: "+ + "Decode overrun: gotBuf[%d] was modified: got %#02x, want %#02x\ngotBuf: % x", + length, offset, suffixLen, totalLen, i, x, w, gotBuf) + continue loop + } + } + for _, x := range want { + if notPresentBase <= x && x < notPresentBase+notPresentLen { + t.Errorf("length=%d, offset=%d; suffixLen=%d: want shouldn't contain %#02x\nwant: % x", + length, offset, suffixLen, x, want) + continue loop + } + } + + if !bytes.Equal(got, want) { + t.Errorf("length=%d, offset=%d; suffixLen=%d:\ninput % x\ngot % x\nwant % x", + length, offset, suffixLen, input, got, want) + continue + } + } + } + } +} + +func TestDecodeGoldenInput(t *testing.T) { + src, err := ioutil.ReadFile("testdata/pi.txt.rawsnappy") + if err != nil { + t.Fatalf("ReadFile: %v", err) + } + got, err := Decode(nil, src) + if err != nil { + t.Fatalf("Decode: %v", err) + } + want, err := ioutil.ReadFile("testdata/pi.txt") + if err != nil { + t.Fatalf("ReadFile: %v", err) + } + if err := cmp(got, want); err != nil { + t.Fatal(err) + } +} + +func TestEncodeGoldenInput(t *testing.T) { + src, err := ioutil.ReadFile("testdata/pi.txt") + if err != nil { + t.Fatalf("ReadFile: %v", err) + } + got := Encode(nil, src) + want, err := ioutil.ReadFile("testdata/pi.txt.rawsnappy") + if err != nil { + t.Fatalf("ReadFile: %v", err) + } + if err := cmp(got, want); err != nil { + t.Fatal(err) + } +} + +const snappytoolCmdName = "cmd/snappytool/snappytool" + +func skipTestSameEncodingAsCpp() (msg string) { + if !goEncoderShouldMatchCppEncoder { + return fmt.Sprintf("skipping testing that the encoding is byte-for-byte identical to C++: GOARCH=%s", runtime.GOARCH) + } + if _, err := os.Stat(snappytoolCmdName); err != nil { + return fmt.Sprintf("could not find snappytool: %v", err) + } + return "" +} + +func runTestSameEncodingAsCpp(src []byte) error { + got := Encode(nil, src) + + cmd := exec.Command(snappytoolCmdName, "-e") + cmd.Stdin = bytes.NewReader(src) + want, err := cmd.Output() + if err != nil { + return fmt.Errorf("could not run snappytool: %v", err) + } + return cmp(got, want) +} + +func TestSameEncodingAsCppShortCopies(t *testing.T) { + if msg := skipTestSameEncodingAsCpp(); msg != "" { + t.Skip(msg) + } + src := bytes.Repeat([]byte{'a'}, 20) + for i := 0; i <= len(src); i++ { + if err := runTestSameEncodingAsCpp(src[:i]); err != nil { + t.Errorf("i=%d: %v", i, err) + } + } +} + +func TestSameEncodingAsCppLongFiles(t *testing.T) { + if msg := skipTestSameEncodingAsCpp(); msg != "" { + t.Skip(msg) + } + for i, tf := range testFiles { + if err := downloadBenchmarkFiles(t, tf.filename); err != nil { + t.Fatalf("failed to download testdata: %s", err) + } + data := readFile(t, filepath.Join(benchDir, tf.filename)) + if n := tf.sizeLimit; 0 < n && n < len(data) { + data = data[:n] + } + if err := runTestSameEncodingAsCpp(data); err != nil { + t.Errorf("i=%d: %v", i, err) + } + } +} + +// TestSlowForwardCopyOverrun tests the "expand the pattern" algorithm +// described in decode_amd64.s and its claim of a 10 byte overrun worst case. +func TestSlowForwardCopyOverrun(t *testing.T) { + const base = 100 + + for length := 1; length < 18; length++ { + for offset := 1; offset < 18; offset++ { + highWaterMark := base + d := base + l := length + o := offset + + // makeOffsetAtLeast8 + for o < 8 { + if end := d + 8; highWaterMark < end { + highWaterMark = end + } + l -= o + d += o + o += o + } + + // fixUpSlowForwardCopy + a := d + d += l + + // finishSlowForwardCopy + for l > 0 { + if end := a + 8; highWaterMark < end { + highWaterMark = end + } + a += 8 + l -= 8 + } + + dWant := base + length + overrun := highWaterMark - dWant + if d != dWant || overrun < 0 || 10 < overrun { + t.Errorf("length=%d, offset=%d: d and overrun: got (%d, %d), want (%d, something in [0, 10])", + length, offset, d, overrun, dWant) + } + } + } +} + +// TestEncodeNoiseThenRepeats encodes input for which the first half is very +// incompressible and the second half is very compressible. The encoded form's +// length should be closer to 50% of the original length than 100%. +func TestEncodeNoiseThenRepeats(t *testing.T) { + for _, origLen := range []int{32 * 1024, 256 * 1024, 2048 * 1024} { + src := make([]byte, origLen) + rng := rand.New(rand.NewSource(1)) + firstHalf, secondHalf := src[:origLen/2], src[origLen/2:] + for i := range firstHalf { + firstHalf[i] = uint8(rng.Intn(256)) + } + for i := range secondHalf { + secondHalf[i] = uint8(i >> 8) + } + dst := Encode(nil, src) + if got, want := len(dst), origLen*3/4; got >= want { + t.Errorf("origLen=%d: got %d encoded bytes, want less than %d", origLen, got, want) + } + } +} + +func TestFramingFormat(t *testing.T) { + // src is comprised of alternating 1e5-sized sequences of random + // (incompressible) bytes and repeated (compressible) bytes. 1e5 was chosen + // because it is larger than maxBlockSize (64k). + src := make([]byte, 1e6) + rng := rand.New(rand.NewSource(1)) + for i := 0; i < 10; i++ { + if i%2 == 0 { + for j := 0; j < 1e5; j++ { + src[1e5*i+j] = uint8(rng.Intn(256)) + } + } else { + for j := 0; j < 1e5; j++ { + src[1e5*i+j] = uint8(i) + } + } + } + + buf := new(bytes.Buffer) + if _, err := NewWriter(buf).Write(src); err != nil { + t.Fatalf("Write: encoding: %v", err) + } + dst, err := ioutil.ReadAll(NewReader(buf)) + if err != nil { + t.Fatalf("ReadAll: decoding: %v", err) + } + if err := cmp(dst, src); err != nil { + t.Fatal(err) + } +} + +func TestWriterGoldenOutput(t *testing.T) { + buf := new(bytes.Buffer) + w := NewBufferedWriter(buf) + defer w.Close() + w.Write([]byte("abcd")) // Not compressible. + w.Flush() + w.Write(bytes.Repeat([]byte{'A'}, 150)) // Compressible. + w.Flush() + // The next chunk is also compressible, but a naive, greedy encoding of the + // overall length 67 copy as a length 64 copy (the longest expressible as a + // tagCopy1 or tagCopy2) plus a length 3 remainder would be two 3-byte + // tagCopy2 tags (6 bytes), since the minimum length for a tagCopy1 is 4 + // bytes. Instead, we could do it shorter, in 5 bytes: a 3-byte tagCopy2 + // (of length 60) and a 2-byte tagCopy1 (of length 7). + w.Write(bytes.Repeat([]byte{'B'}, 68)) + w.Flush() + + got := buf.String() + want := strings.Join([]string{ + magicChunk, + "\x01\x08\x00\x00", // Uncompressed chunk, 8 bytes long (including 4 byte checksum). + "\x68\x10\xe6\xb6", // Checksum. + "\x61\x62\x63\x64", // Uncompressed payload: "abcd". + "\x00\x11\x00\x00", // Compressed chunk, 17 bytes long (including 4 byte checksum). + "\x5f\xeb\xf2\x10", // Checksum. + "\x96\x01", // Compressed payload: Uncompressed length (varint encoded): 150. + "\x00\x41", // Compressed payload: tagLiteral, length=1, "A". + "\xfe\x01\x00", // Compressed payload: tagCopy2, length=64, offset=1. + "\xfe\x01\x00", // Compressed payload: tagCopy2, length=64, offset=1. + "\x52\x01\x00", // Compressed payload: tagCopy2, length=21, offset=1. + "\x00\x0c\x00\x00", // Compressed chunk, 12 bytes long (including 4 byte checksum). + "\x27\x50\xe4\x4e", // Checksum. + "\x44", // Compressed payload: Uncompressed length (varint encoded): 68. + "\x00\x42", // Compressed payload: tagLiteral, length=1, "B". + "\xee\x01\x00", // Compressed payload: tagCopy2, length=60, offset=1. + "\x0d\x01", // Compressed payload: tagCopy1, length=7, offset=1. + }, "") + if got != want { + t.Fatalf("\ngot: % x\nwant: % x", got, want) + } +} + +func TestNewBufferedWriter(t *testing.T) { + // Test all 32 possible sub-sequences of these 5 input slices. + // + // Their lengths sum to 400,000, which is over 6 times the Writer ibuf + // capacity: 6 * maxBlockSize is 393,216. + inputs := [][]byte{ + bytes.Repeat([]byte{'a'}, 40000), + bytes.Repeat([]byte{'b'}, 150000), + bytes.Repeat([]byte{'c'}, 60000), + bytes.Repeat([]byte{'d'}, 120000), + bytes.Repeat([]byte{'e'}, 30000), + } +loop: + for i := 0; i < 1< 0; { + i := copy(x, src) + x = x[i:] + } + return dst +} + +func benchWords(b *testing.B, n int, decode bool) { + // Note: the file is OS-language dependent so the resulting values are not + // directly comparable for non-US-English OS installations. + data := expand(readFile(b, "/usr/share/dict/words"), n) + if decode { + benchDecode(b, data) + } else { + benchEncode(b, data) + } +} + +func BenchmarkWordsDecode1e1(b *testing.B) { benchWords(b, 1e1, true) } +func BenchmarkWordsDecode1e2(b *testing.B) { benchWords(b, 1e2, true) } +func BenchmarkWordsDecode1e3(b *testing.B) { benchWords(b, 1e3, true) } +func BenchmarkWordsDecode1e4(b *testing.B) { benchWords(b, 1e4, true) } +func BenchmarkWordsDecode1e5(b *testing.B) { benchWords(b, 1e5, true) } +func BenchmarkWordsDecode1e6(b *testing.B) { benchWords(b, 1e6, true) } +func BenchmarkWordsEncode1e1(b *testing.B) { benchWords(b, 1e1, false) } +func BenchmarkWordsEncode1e2(b *testing.B) { benchWords(b, 1e2, false) } +func BenchmarkWordsEncode1e3(b *testing.B) { benchWords(b, 1e3, false) } +func BenchmarkWordsEncode1e4(b *testing.B) { benchWords(b, 1e4, false) } +func BenchmarkWordsEncode1e5(b *testing.B) { benchWords(b, 1e5, false) } +func BenchmarkWordsEncode1e6(b *testing.B) { benchWords(b, 1e6, false) } + +func BenchmarkRandomEncode(b *testing.B) { + rng := rand.New(rand.NewSource(1)) + data := make([]byte, 1<<20) + for i := range data { + data[i] = uint8(rng.Intn(256)) + } + benchEncode(b, data) +} + +// testFiles' values are copied directly from +// https://raw.githubusercontent.com/google/snappy/master/snappy_unittest.cc +// The label field is unused in snappy-go. +var testFiles = []struct { + label string + filename string + sizeLimit int +}{ + {"html", "html", 0}, + {"urls", "urls.10K", 0}, + {"jpg", "fireworks.jpeg", 0}, + {"jpg_200", "fireworks.jpeg", 200}, + {"pdf", "paper-100k.pdf", 0}, + {"html4", "html_x_4", 0}, + {"txt1", "alice29.txt", 0}, + {"txt2", "asyoulik.txt", 0}, + {"txt3", "lcet10.txt", 0}, + {"txt4", "plrabn12.txt", 0}, + {"pb", "geo.protodata", 0}, + {"gaviota", "kppkn.gtb", 0}, +} + +const ( + // The benchmark data files are at this canonical URL. + benchURL = "https://raw.githubusercontent.com/google/snappy/master/testdata/" + + // They are copied to this local directory. + benchDir = "testdata/bench" +) + +func downloadBenchmarkFiles(b testing.TB, basename string) (errRet error) { + filename := filepath.Join(benchDir, basename) + if stat, err := os.Stat(filename); err == nil && stat.Size() != 0 { + return nil + } + + if !*download { + b.Skipf("test data not found; skipping %s without the -download flag", testOrBenchmark(b)) + } + // Download the official snappy C++ implementation reference test data + // files for benchmarking. + if err := os.MkdirAll(benchDir, 0777); err != nil && !os.IsExist(err) { + return fmt.Errorf("failed to create %s: %s", benchDir, err) + } + + f, err := os.Create(filename) + if err != nil { + return fmt.Errorf("failed to create %s: %s", filename, err) + } + defer f.Close() + defer func() { + if errRet != nil { + os.Remove(filename) + } + }() + url := benchURL + basename + resp, err := http.Get(url) + if err != nil { + return fmt.Errorf("failed to download %s: %s", url, err) + } + defer resp.Body.Close() + if s := resp.StatusCode; s != http.StatusOK { + return fmt.Errorf("downloading %s: HTTP status code %d (%s)", url, s, http.StatusText(s)) + } + _, err = io.Copy(f, resp.Body) + if err != nil { + return fmt.Errorf("failed to download %s to %s: %s", url, filename, err) + } + return nil +} + +func benchFile(b *testing.B, i int, decode bool) { + if err := downloadBenchmarkFiles(b, testFiles[i].filename); err != nil { + b.Fatalf("failed to download testdata: %s", err) + } + data := readFile(b, filepath.Join(benchDir, testFiles[i].filename)) + if n := testFiles[i].sizeLimit; 0 < n && n < len(data) { + data = data[:n] + } + if decode { + benchDecode(b, data) + } else { + benchEncode(b, data) + } +} + +// Naming convention is kept similar to what snappy's C++ implementation uses. +func Benchmark_UFlat0(b *testing.B) { benchFile(b, 0, true) } +func Benchmark_UFlat1(b *testing.B) { benchFile(b, 1, true) } +func Benchmark_UFlat2(b *testing.B) { benchFile(b, 2, true) } +func Benchmark_UFlat3(b *testing.B) { benchFile(b, 3, true) } +func Benchmark_UFlat4(b *testing.B) { benchFile(b, 4, true) } +func Benchmark_UFlat5(b *testing.B) { benchFile(b, 5, true) } +func Benchmark_UFlat6(b *testing.B) { benchFile(b, 6, true) } +func Benchmark_UFlat7(b *testing.B) { benchFile(b, 7, true) } +func Benchmark_UFlat8(b *testing.B) { benchFile(b, 8, true) } +func Benchmark_UFlat9(b *testing.B) { benchFile(b, 9, true) } +func Benchmark_UFlat10(b *testing.B) { benchFile(b, 10, true) } +func Benchmark_UFlat11(b *testing.B) { benchFile(b, 11, true) } +func Benchmark_ZFlat0(b *testing.B) { benchFile(b, 0, false) } +func Benchmark_ZFlat1(b *testing.B) { benchFile(b, 1, false) } +func Benchmark_ZFlat2(b *testing.B) { benchFile(b, 2, false) } +func Benchmark_ZFlat3(b *testing.B) { benchFile(b, 3, false) } +func Benchmark_ZFlat4(b *testing.B) { benchFile(b, 4, false) } +func Benchmark_ZFlat5(b *testing.B) { benchFile(b, 5, false) } +func Benchmark_ZFlat6(b *testing.B) { benchFile(b, 6, false) } +func Benchmark_ZFlat7(b *testing.B) { benchFile(b, 7, false) } +func Benchmark_ZFlat8(b *testing.B) { benchFile(b, 8, false) } +func Benchmark_ZFlat9(b *testing.B) { benchFile(b, 9, false) } +func Benchmark_ZFlat10(b *testing.B) { benchFile(b, 10, false) } +func Benchmark_ZFlat11(b *testing.B) { benchFile(b, 11, false) } diff --git a/vendor/github.com/golang/snappy/testdata/pi.txt b/vendor/github.com/golang/snappy/testdata/pi.txt new file mode 100644 index 0000000..563af41 --- /dev/null +++ b/vendor/github.com/golang/snappy/testdata/pi.txt @@ -0,0 +1 @@ +3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881097566593344612847564823378678316527120190914564856692346034861045432664821339360726024914127372458700660631558817488152092096282925409171536436789259036001133053054882046652138414695194151160943305727036575959195309218611738193261179310511854807446237996274956735188575272489122793818301194912983367336244065664308602139494639522473719070217986094370277053921717629317675238467481846766940513200056812714526356082778577134275778960917363717872146844090122495343014654958537105079227968925892354201995611212902196086403441815981362977477130996051870721134999999837297804995105973173281609631859502445945534690830264252230825334468503526193118817101000313783875288658753320838142061717766914730359825349042875546873115956286388235378759375195778185778053217122680661300192787661119590921642019893809525720106548586327886593615338182796823030195203530185296899577362259941389124972177528347913151557485724245415069595082953311686172785588907509838175463746493931925506040092770167113900984882401285836160356370766010471018194295559619894676783744944825537977472684710404753464620804668425906949129331367702898915210475216205696602405803815019351125338243003558764024749647326391419927260426992279678235478163600934172164121992458631503028618297455570674983850549458858692699569092721079750930295532116534498720275596023648066549911988183479775356636980742654252786255181841757467289097777279380008164706001614524919217321721477235014144197356854816136115735255213347574184946843852332390739414333454776241686251898356948556209921922218427255025425688767179049460165346680498862723279178608578438382796797668145410095388378636095068006422512520511739298489608412848862694560424196528502221066118630674427862203919494504712371378696095636437191728746776465757396241389086583264599581339047802759009946576407895126946839835259570982582262052248940772671947826848260147699090264013639443745530506820349625245174939965143142980919065925093722169646151570985838741059788595977297549893016175392846813826868386894277415599185592524595395943104997252468084598727364469584865383673622262609912460805124388439045124413654976278079771569143599770012961608944169486855584840635342207222582848864815845602850601684273945226746767889525213852254995466672782398645659611635488623057745649803559363456817432411251507606947945109659609402522887971089314566913686722874894056010150330861792868092087476091782493858900971490967598526136554978189312978482168299894872265880485756401427047755513237964145152374623436454285844479526586782105114135473573952311342716610213596953623144295248493718711014576540359027993440374200731057853906219838744780847848968332144571386875194350643021845319104848100537061468067491927819119793995206141966342875444064374512371819217999839101591956181467514269123974894090718649423196156794520809514655022523160388193014209376213785595663893778708303906979207734672218256259966150142150306803844773454920260541466592520149744285073251866600213243408819071048633173464965145390579626856100550810665879699816357473638405257145910289706414011097120628043903975951567715770042033786993600723055876317635942187312514712053292819182618612586732157919841484882916447060957527069572209175671167229109816909152801735067127485832228718352093539657251210835791513698820914442100675103346711031412671113699086585163983150197016515116851714376576183515565088490998985998238734552833163550764791853589322618548963213293308985706420467525907091548141654985946163718027098199430992448895757128289059232332609729971208443357326548938239119325974636673058360414281388303203824903758985243744170291327656180937734440307074692112019130203303801976211011004492932151608424448596376698389522868478312355265821314495768572624334418930396864262434107732269780280731891544110104468232527162010526522721116603966655730925471105578537634668206531098965269186205647693125705863566201855810072936065987648611791045334885034611365768675324944166803962657978771855608455296541266540853061434443185867697514566140680070023787765913440171274947042056223053899456131407112700040785473326993908145466464588079727082668306343285878569830523580893306575740679545716377525420211495576158140025012622859413021647155097925923099079654737612551765675135751782966645477917450112996148903046399471329621073404375189573596145890193897131117904297828564750320319869151402870808599048010941214722131794764777262241425485454033215718530614228813758504306332175182979866223717215916077166925474873898665494945011465406284336639379003976926567214638530673609657120918076383271664162748888007869256029022847210403172118608204190004229661711963779213375751149595015660496318629472654736425230817703675159067350235072835405670403867435136222247715891504953098444893330963408780769325993978054193414473774418426312986080998886874132604721569516239658645730216315981931951673538129741677294786724229246543668009806769282382806899640048243540370141631496589794092432378969070697794223625082216889573837986230015937764716512289357860158816175578297352334460428151262720373431465319777741603199066554187639792933441952154134189948544473456738316249934191318148092777710386387734317720754565453220777092120190516609628049092636019759882816133231666365286193266863360627356763035447762803504507772355471058595487027908143562401451718062464362679456127531813407833033625423278394497538243720583531147711992606381334677687969597030983391307710987040859133746414428227726346594704745878477872019277152807317679077071572134447306057007334924369311383504931631284042512192565179806941135280131470130478164378851852909285452011658393419656213491434159562586586557055269049652098580338507224264829397285847831630577775606888764462482468579260395352773480304802900587607582510474709164396136267604492562742042083208566119062545433721315359584506877246029016187667952406163425225771954291629919306455377991403734043287526288896399587947572917464263574552540790914513571113694109119393251910760208252026187985318877058429725916778131496990090192116971737278476847268608490033770242429165130050051683233643503895170298939223345172201381280696501178440874519601212285993716231301711444846409038906449544400619869075485160263275052983491874078668088183385102283345085048608250393021332197155184306354550076682829493041377655279397517546139539846833936383047461199665385815384205685338621867252334028308711232827892125077126294632295639898989358211674562701021835646220134967151881909730381198004973407239610368540664319395097901906996395524530054505806855019567302292191393391856803449039820595510022635353619204199474553859381023439554495977837790237421617271117236434354394782218185286240851400666044332588856986705431547069657474585503323233421073015459405165537906866273337995851156257843229882737231989875714159578111963583300594087306812160287649628674460477464915995054973742562690104903778198683593814657412680492564879855614537234786733039046883834363465537949864192705638729317487233208376011230299113679386270894387993620162951541337142489283072201269014754668476535761647737946752004907571555278196536213239264061601363581559074220202031872776052772190055614842555187925303435139844253223415762336106425063904975008656271095359194658975141310348227693062474353632569160781547818115284366795706110861533150445212747392454494542368288606134084148637767009612071512491404302725386076482363414334623518975766452164137679690314950191085759844239198629164219399490723623464684411739403265918404437805133389452574239950829659122850855582157250310712570126683024029295252201187267675622041542051618416348475651699981161410100299607838690929160302884002691041407928862150784245167090870006992821206604183718065355672525325675328612910424877618258297651579598470356222629348600341587229805349896502262917487882027342092222453398562647669149055628425039127577102840279980663658254889264880254566101729670266407655904290994568150652653053718294127033693137851786090407086671149655834343476933857817113864558736781230145876871266034891390956200993936103102916161528813843790990423174733639480457593149314052976347574811935670911013775172100803155902485309066920376719220332290943346768514221447737939375170344366199104033751117354719185504644902636551281622882446257591633303910722538374218214088350865739177150968288747826569959957449066175834413752239709683408005355984917541738188399944697486762655165827658483588453142775687900290951702835297163445621296404352311760066510124120065975585127617858382920419748442360800719304576189323492292796501987518721272675079812554709589045563579212210333466974992356302549478024901141952123828153091140790738602515227429958180724716259166854513331239480494707911915326734302824418604142636395480004480026704962482017928964766975831832713142517029692348896276684403232609275249603579964692565049368183609003238092934595889706953653494060340216654437558900456328822505452556405644824651518754711962184439658253375438856909411303150952617937800297412076651479394259029896959469955657612186561967337862362561252163208628692221032748892186543648022967807057656151446320469279068212073883778142335628236089632080682224680122482611771858963814091839036736722208883215137556003727983940041529700287830766709444745601345564172543709069793961225714298946715435784687886144458123145935719849225284716050492212424701412147805734551050080190869960330276347870810817545011930714122339086639383395294257869050764310063835198343893415961318543475464955697810382930971646514384070070736041123735998434522516105070270562352660127648483084076118301305279320542746286540360367453286510570658748822569815793678976697422057505968344086973502014102067235850200724522563265134105592401902742162484391403599895353945909440704691209140938700126456001623742880210927645793106579229552498872758461012648369998922569596881592056001016552563756785 \ No newline at end of file diff --git a/vendor/github.com/golang/snappy/testdata/pi.txt.rawsnappy b/vendor/github.com/golang/snappy/testdata/pi.txt.rawsnappy new file mode 100644 index 0000000..3378c72 Binary files /dev/null and b/vendor/github.com/golang/snappy/testdata/pi.txt.rawsnappy differ diff --git a/vendor/github.com/mailru/easyjson/.gitignore b/vendor/github.com/mailru/easyjson/.gitignore new file mode 100644 index 0000000..db8c66e --- /dev/null +++ b/vendor/github.com/mailru/easyjson/.gitignore @@ -0,0 +1,4 @@ +.root +*_easyjson.go +*.iml +.idea diff --git a/vendor/github.com/mailru/easyjson/.travis.yml b/vendor/github.com/mailru/easyjson/.travis.yml new file mode 100644 index 0000000..884f8bb --- /dev/null +++ b/vendor/github.com/mailru/easyjson/.travis.yml @@ -0,0 +1,9 @@ +language: go + +go: + - tip +install: + - go get github.com/ugorji/go/codec + - go get github.com/pquerna/ffjson/fflib/v1 + - go get github.com/json-iterator/go + - go get github.com/golang/lint/golint diff --git a/vendor/github.com/mailru/easyjson/LICENSE b/vendor/github.com/mailru/easyjson/LICENSE new file mode 100644 index 0000000..fbff658 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/LICENSE @@ -0,0 +1,7 @@ +Copyright (c) 2016 Mail.Ru Group + +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/mailru/easyjson/Makefile b/vendor/github.com/mailru/easyjson/Makefile new file mode 100644 index 0000000..49c80f3 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/Makefile @@ -0,0 +1,60 @@ +PKG=github.com/mailru/easyjson +GOPATH:=$(PWD)/.root:$(GOPATH) +export GOPATH + +all: test + +.root/src/$(PKG): + mkdir -p $@ + for i in $$PWD/* ; do ln -s $$i $@/`basename $$i` ; done + +root: .root/src/$(PKG) + +clean: + rm -rf .root + rm -rf tests/*_easyjson.go + +build: + go build -i -o .root/bin/easyjson $(PKG)/easyjson + +generate: root build + .root/bin/easyjson -stubs \ + .root/src/$(PKG)/tests/snake.go \ + .root/src/$(PKG)/tests/data.go \ + .root/src/$(PKG)/tests/omitempty.go \ + .root/src/$(PKG)/tests/nothing.go \ + .root/src/$(PKG)/tests/named_type.go \ + .root/src/$(PKG)/tests/custom_map_key_type.go \ + .root/src/$(PKG)/tests/embedded_type.go + + .root/bin/easyjson -all .root/src/$(PKG)/tests/data.go + .root/bin/easyjson -all .root/src/$(PKG)/tests/nothing.go + .root/bin/easyjson -all .root/src/$(PKG)/tests/errors.go + .root/bin/easyjson -snake_case .root/src/$(PKG)/tests/snake.go + .root/bin/easyjson -omit_empty .root/src/$(PKG)/tests/omitempty.go + .root/bin/easyjson -build_tags=use_easyjson .root/src/$(PKG)/benchmark/data.go + .root/bin/easyjson .root/src/$(PKG)/tests/nested_easy.go + .root/bin/easyjson .root/src/$(PKG)/tests/named_type.go + .root/bin/easyjson .root/src/$(PKG)/tests/custom_map_key_type.go + .root/bin/easyjson .root/src/$(PKG)/tests/embedded_type.go + +test: generate root + go test \ + $(PKG)/tests \ + $(PKG)/jlexer \ + $(PKG)/gen \ + $(PKG)/buffer + go test -benchmem -tags use_easyjson -bench . $(PKG)/benchmark + golint -set_exit_status .root/src/$(PKG)/tests/*_easyjson.go + +bench-other: generate root + @go test -benchmem -bench . $(PKG)/benchmark + @go test -benchmem -tags use_ffjson -bench . $(PKG)/benchmark + @go test -benchmem -tags use_jsoniter -bench . $(PKG)/benchmark + @go test -benchmem -tags use_codec -bench . $(PKG)/benchmark + +bench-python: + benchmark/ujson.sh + + +.PHONY: root clean generate test build diff --git a/vendor/github.com/mailru/easyjson/README.md b/vendor/github.com/mailru/easyjson/README.md new file mode 100644 index 0000000..9366e3f --- /dev/null +++ b/vendor/github.com/mailru/easyjson/README.md @@ -0,0 +1,331 @@ +# easyjson [![Build Status](https://travis-ci.org/mailru/easyjson.svg?branch=master)](https://travis-ci.org/mailru/easyjson) [![Go Report Card](https://goreportcard.com/badge/github.com/mailru/easyjson)](https://goreportcard.com/report/github.com/mailru/easyjson) + +Package easyjson provides a fast and easy way to marshal/unmarshal Go structs +to/from JSON without the use of reflection. In performance tests, easyjson +outperforms the standard `encoding/json` package by a factor of 4-5x, and other +JSON encoding packages by a factor of 2-3x. + +easyjson aims to keep generated Go code simple enough so that it can be easily +optimized or fixed. Another goal is to provide users with the ability to +customize the generated code by providing options not available with the +standard `encoding/json` package, such as generating "snake_case" names or +enabling `omitempty` behavior by default. + +## Usage +```sh +# install +go get -u github.com/mailru/easyjson/... + +# run +easyjson -all .go +``` + +The above will generate `_easyjson.go` containing the appropriate marshaler and +unmarshaler funcs for all structs contained in `.go`. + +Please note that easyjson requires a full Go build environment and the `GOPATH` +environment variable to be set. This is because easyjson code generation +invokes `go run` on a temporary file (an approach to code generation borrowed +from [ffjson](https://github.com/pquerna/ffjson)). + +## Options +```txt +Usage of easyjson: + -all + generate marshaler/unmarshalers for all structs in a file + -build_tags string + build tags to add to generated file + -leave_temps + do not delete temporary files + -no_std_marshalers + don't generate MarshalJSON/UnmarshalJSON funcs + -noformat + do not run 'gofmt -w' on output file + -omit_empty + omit empty fields by default + -output_filename string + specify the filename of the output + -pkg + process the whole package instead of just the given file + -snake_case + use snake_case names instead of CamelCase by default + -lower_camel_case + use lowerCamelCase instead of CamelCase by default + -stubs + only generate stubs for marshaler/unmarshaler funcs +``` + +Using `-all` will generate marshalers/unmarshalers for all Go structs in the +file. If `-all` is not provided, then only those structs whose preceding +comment starts with `easyjson:json` will have marshalers/unmarshalers +generated. For example: + +```go +//easyjson:json +type A struct {} +``` + +Additional option notes: + +* `-snake_case` tells easyjson to generate snake\_case field names by default + (unless overridden by a field tag). The CamelCase to snake\_case conversion + algorithm should work in most cases (ie, HTTPVersion will be converted to + "http_version"). + +* `-build_tags` will add the specified build tags to generated Go sources. + +## Generated Marshaler/Unmarshaler Funcs + +For Go struct types, easyjson generates the funcs `MarshalEasyJSON` / +`UnmarshalEasyJSON` for marshaling/unmarshaling JSON. In turn, these satisify +the `easyjson.Marshaler` and `easyjson.Unmarshaler` interfaces and when used in +conjunction with `easyjson.Marshal` / `easyjson.Unmarshal` avoid unnecessary +reflection / type assertions during marshaling/unmarshaling to/from JSON for Go +structs. + +easyjson also generates `MarshalJSON` and `UnmarshalJSON` funcs for Go struct +types compatible with the standard `json.Marshaler` and `json.Unmarshaler` +interfaces. Please be aware that using the standard `json.Marshal` / +`json.Unmarshal` for marshaling/unmarshaling will incur a significant +performance penalty when compared to using `easyjson.Marshal` / +`easyjson.Unmarshal`. + +Additionally, easyjson exposes utility funcs that use the `MarshalEasyJSON` and +`UnmarshalEasyJSON` for marshaling/unmarshaling to and from standard readers +and writers. For example, easyjson provides `easyjson.MarshalToHTTPResponseWriter` +which marshals to the standard `http.ResponseWriter`. Please see the [GoDoc +listing](https://godoc.org/github.com/mailru/easyjson) for the full listing of +utility funcs that are available. + +## Controlling easyjson Marshaling and Unmarshaling Behavior + +Go types can provide their own `MarshalEasyJSON` and `UnmarshalEasyJSON` funcs +that satisify the `easyjson.Marshaler` / `easyjson.Unmarshaler` interfaces. +These will be used by `easyjson.Marshal` and `easyjson.Unmarshal` when defined +for a Go type. + +Go types can also satisify the `easyjson.Optional` interface, which allows the +type to define its own `omitempty` logic. + +## Type Wrappers + +easyjson provides additional type wrappers defined in the `easyjson/opt` +package. These wrap the standard Go primitives and in turn satisify the +easyjson interfaces. + +The `easyjson/opt` type wrappers are useful when needing to distinguish between +a missing value and/or when needing to specifying a default value. Type +wrappers allow easyjson to avoid additional pointers and heap allocations and +can significantly increase performance when used properly. + +## Memory Pooling + +easyjson uses a buffer pool that allocates data in increasing chunks from 128 +to 32768 bytes. Chunks of 512 bytes and larger will be reused with the help of +`sync.Pool`. The maximum size of a chunk is bounded to reduce redundant memory +allocation and to allow larger reusable buffers. + +easyjson's custom allocation buffer pool is defined in the `easyjson/buffer` +package, and the default behavior pool behavior can be modified (if necessary) +through a call to `buffer.Init()` prior to any marshaling or unmarshaling. +Please see the [GoDoc listing](https://godoc.org/github.com/mailru/easyjson/buffer) +for more information. + +## Issues, Notes, and Limitations + +* easyjson is still early in its development. As such, there are likely to be + bugs and missing features when compared to `encoding/json`. In the case of a + missing feature or bug, please create a GitHub issue. Pull requests are + welcome! + +* Unlike `encoding/json`, object keys are case-sensitive. Case-insensitive + matching is not currently provided due to the significant performance hit + when doing case-insensitive key matching. In the future, case-insensitive + object key matching may be provided via an option to the generator. + +* easyjson makes use of `unsafe`, which simplifies the code and + provides significant performance benefits by allowing no-copy + conversion from `[]byte` to `string`. That said, `unsafe` is used + only when unmarshaling and parsing JSON, and any `unsafe` operations + / memory allocations done will be safely deallocated by + easyjson. Set the build tag `easyjson_nounsafe` to compile it + without `unsafe`. + +* easyjson is compatible with Google App Engine. The `appengine` build + tag (set by App Engine's environment) will automatically disable the + use of `unsafe`, which is not allowed in App Engine's Standard + Environment. Note that the use with App Engine is still experimental. + +* Floats are formatted using the default precision from Go's `strconv` package. + As such, easyjson will not correctly handle high precision floats when + marshaling/unmarshaling JSON. Note, however, that there are very few/limited + uses where this behavior is not sufficient for general use. That said, a + different package may be needed if precise marshaling/unmarshaling of high + precision floats to/from JSON is required. + +* While unmarshaling, the JSON parser does the minimal amount of work needed to + skip over unmatching parens, and as such full validation is not done for the + entire JSON value being unmarshaled/parsed. + +* Currently there is no true streaming support for encoding/decoding as + typically for many uses/protocols the final, marshaled length of the JSON + needs to be known prior to sending the data. Currently this is not possible + with easyjson's architecture. + +## Benchmarks + +Most benchmarks were done using the example +[13kB example JSON](https://dev.twitter.com/rest/reference/get/search/tweets) +(9k after eliminating whitespace). This example is similar to real-world data, +is well-structured, and contains a healthy variety of different types, making +it ideal for JSON serialization benchmarks. + +Note: + +* For small request benchmarks, an 80 byte portion of the above example was + used. + +* For large request marshaling benchmarks, a struct containing 50 regular + samples was used, making a ~500kB output JSON. + +* Benchmarks are showing the results of easyjson's default behaviour, + which makes use of `unsafe`. + +Benchmarks are available in the repository and can be run by invoking `make`. + +### easyjson vs. encoding/json + +easyjson is roughly 5-6 times faster than the standard `encoding/json` for +unmarshaling, and 3-4 times faster for non-concurrent marshaling. Concurrent +marshaling is 6-7x faster if marshaling to a writer. + +### easyjson vs. ffjson + +easyjson uses the same approach for JSON marshaling as +[ffjson](https://github.com/pquerna/ffjson), but takes a significantly +different approach to lexing and parsing JSON during unmarshaling. This means +easyjson is roughly 2-3x faster for unmarshaling and 1.5-2x faster for +non-concurrent unmarshaling. + +As of this writing, `ffjson` seems to have issues when used concurrently: +specifically, large request pooling hurts `ffjson`'s performance and causes +scalability issues. These issues with `ffjson` can likely be fixed, but as of +writing remain outstanding/known issues with `ffjson`. + +easyjson and `ffjson` have similar performance for small requests, however +easyjson outperforms `ffjson` by roughly 2-5x times for large requests when +used with a writer. + +### easyjson vs. go/codec + +[go/codec](https://github.com/ugorji/go) provides +compile-time helpers for JSON generation. In this case, helpers do not work +like marshalers as they are encoding-independent. + +easyjson is generally 2x faster than `go/codec` for non-concurrent benchmarks +and about 3x faster for concurrent encoding (without marshaling to a writer). + +In an attempt to measure marshaling performance of `go/codec` (as opposed to +allocations/memcpy/writer interface invocations), a benchmark was done with +resetting length of a byte slice rather than resetting the whole slice to nil. +However, the optimization in this exact form may not be applicable in practice, +since the memory is not freed between marshaling operations. + +### easyjson vs 'ujson' python module + +[ujson](https://github.com/esnme/ultrajson) is using C code for parsing, so it +is interesting to see how plain golang compares to that. It is imporant to note +that the resulting object for python is slower to access, since the library +parses JSON object into dictionaries. + +easyjson is slightly faster for unmarshaling and 2-3x faster than `ujson` for +marshaling. + +### Benchmark Results + +`ffjson` results are from February 4th, 2016, using the latest `ffjson` and go1.6. +`go/codec` results are from March 4th, 2016, using the latest `go/codec` and go1.6. + +#### Unmarshaling + +| lib | json size | MB/s | allocs/op | B/op | +|:---------|:----------|-----:|----------:|------:| +| standard | regular | 22 | 218 | 10229 | +| standard | small | 9.7 | 14 | 720 | +| | | | | | +| easyjson | regular | 125 | 128 | 9794 | +| easyjson | small | 67 | 3 | 128 | +| | | | | | +| ffjson | regular | 66 | 141 | 9985 | +| ffjson | small | 17.6 | 10 | 488 | +| | | | | | +| codec | regular | 55 | 434 | 19299 | +| codec | small | 29 | 7 | 336 | +| | | | | | +| ujson | regular | 103 | N/A | N/A | + +#### Marshaling, one goroutine. + +| lib | json size | MB/s | allocs/op | B/op | +|:----------|:----------|-----:|----------:|------:| +| standard | regular | 75 | 9 | 23256 | +| standard | small | 32 | 3 | 328 | +| standard | large | 80 | 17 | 1.2M | +| | | | | | +| easyjson | regular | 213 | 9 | 10260 | +| easyjson* | regular | 263 | 8 | 742 | +| easyjson | small | 125 | 1 | 128 | +| easyjson | large | 212 | 33 | 490k | +| easyjson* | large | 262 | 25 | 2879 | +| | | | | | +| ffjson | regular | 122 | 153 | 21340 | +| ffjson** | regular | 146 | 152 | 4897 | +| ffjson | small | 36 | 5 | 384 | +| ffjson** | small | 64 | 4 | 128 | +| ffjson | large | 134 | 7317 | 818k | +| ffjson** | large | 125 | 7320 | 827k | +| | | | | | +| codec | regular | 80 | 17 | 33601 | +| codec*** | regular | 108 | 9 | 1153 | +| codec | small | 42 | 3 | 304 | +| codec*** | small | 56 | 1 | 48 | +| codec | large | 73 | 483 | 2.5M | +| codec*** | large | 103 | 451 | 66007 | +| | | | | | +| ujson | regular | 92 | N/A | N/A | + +\* marshaling to a writer, +\*\* using `ffjson.Pool()`, +\*\*\* reusing output slice instead of resetting it to nil + +#### Marshaling, concurrent. + +| lib | json size | MB/s | allocs/op | B/op | +|:----------|:----------|-----:|----------:|------:| +| standard | regular | 252 | 9 | 23257 | +| standard | small | 124 | 3 | 328 | +| standard | large | 289 | 17 | 1.2M | +| | | | | | +| easyjson | regular | 792 | 9 | 10597 | +| easyjson* | regular | 1748 | 8 | 779 | +| easyjson | small | 333 | 1 | 128 | +| easyjson | large | 718 | 36 | 548k | +| easyjson* | large | 2134 | 25 | 4957 | +| | | | | | +| ffjson | regular | 301 | 153 | 21629 | +| ffjson** | regular | 707 | 152 | 5148 | +| ffjson | small | 62 | 5 | 384 | +| ffjson** | small | 282 | 4 | 128 | +| ffjson | large | 438 | 7330 | 1.0M | +| ffjson** | large | 131 | 7319 | 820k | +| | | | | | +| codec | regular | 183 | 17 | 33603 | +| codec*** | regular | 671 | 9 | 1157 | +| codec | small | 147 | 3 | 304 | +| codec*** | small | 299 | 1 | 48 | +| codec | large | 190 | 483 | 2.5M | +| codec*** | large | 752 | 451 | 77574 | + +\* marshaling to a writer, +\*\* using `ffjson.Pool()`, +\*\*\* reusing output slice instead of resetting it to nil diff --git a/vendor/github.com/mailru/easyjson/benchmark/codec_test.go b/vendor/github.com/mailru/easyjson/benchmark/codec_test.go new file mode 100644 index 0000000..5c77072 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/benchmark/codec_test.go @@ -0,0 +1,279 @@ +// +build use_codec + +package benchmark + +import ( + "testing" + + "github.com/ugorji/go/codec" +) + +func BenchmarkCodec_Unmarshal_M(b *testing.B) { + var h codec.Handle = new(codec.JsonHandle) + dec := codec.NewDecoderBytes(nil, h) + + b.SetBytes(int64(len(largeStructText))) + for i := 0; i < b.N; i++ { + var s LargeStruct + dec.ResetBytes(largeStructText) + if err := dec.Decode(&s); err != nil { + b.Error(err) + } + } +} + +func BenchmarkCodec_Unmarshal_S(b *testing.B) { + var h codec.Handle = new(codec.JsonHandle) + dec := codec.NewDecoderBytes(nil, h) + + b.SetBytes(int64(len(smallStructText))) + for i := 0; i < b.N; i++ { + var s LargeStruct + dec.ResetBytes(smallStructText) + if err := dec.Decode(&s); err != nil { + b.Error(err) + } + } +} + +func BenchmarkCodec_Marshal_S(b *testing.B) { + var h codec.Handle = new(codec.JsonHandle) + + var out []byte + enc := codec.NewEncoderBytes(&out, h) + + var l int64 + for i := 0; i < b.N; i++ { + enc.ResetBytes(&out) + if err := enc.Encode(&smallStructData); err != nil { + b.Error(err) + } + l = int64(len(out)) + out = nil + } + + b.SetBytes(l) +} + +func BenchmarkCodec_Marshal_M(b *testing.B) { + var h codec.Handle = new(codec.JsonHandle) + + var out []byte + enc := codec.NewEncoderBytes(&out, h) + + var l int64 + for i := 0; i < b.N; i++ { + enc.ResetBytes(&out) + if err := enc.Encode(&largeStructData); err != nil { + b.Error(err) + } + l = int64(len(out)) + out = nil + } + + b.SetBytes(l) +} + +func BenchmarkCodec_Marshal_L(b *testing.B) { + var h codec.Handle = new(codec.JsonHandle) + + var out []byte + enc := codec.NewEncoderBytes(&out, h) + + var l int64 + for i := 0; i < b.N; i++ { + enc.ResetBytes(&out) + if err := enc.Encode(&xlStructData); err != nil { + b.Error(err) + } + l = int64(len(out)) + out = nil + } + + b.SetBytes(l) +} + +func BenchmarkCodec_Marshal_S_Reuse(b *testing.B) { + var h codec.Handle = new(codec.JsonHandle) + + var out []byte + enc := codec.NewEncoderBytes(&out, h) + + var l int64 + for i := 0; i < b.N; i++ { + enc.ResetBytes(&out) + if err := enc.Encode(&smallStructData); err != nil { + b.Error(err) + } + l = int64(len(out)) + out = out[:0] + } + + b.SetBytes(l) +} + +func BenchmarkCodec_Marshal_M_Reuse(b *testing.B) { + var h codec.Handle = new(codec.JsonHandle) + + var out []byte + enc := codec.NewEncoderBytes(&out, h) + + var l int64 + for i := 0; i < b.N; i++ { + enc.ResetBytes(&out) + if err := enc.Encode(&largeStructData); err != nil { + b.Error(err) + } + l = int64(len(out)) + out = out[:0] + } + + b.SetBytes(l) +} + +func BenchmarkCodec_Marshal_L_Reuse(b *testing.B) { + var h codec.Handle = new(codec.JsonHandle) + + var out []byte + enc := codec.NewEncoderBytes(&out, h) + + var l int64 + for i := 0; i < b.N; i++ { + enc.ResetBytes(&out) + if err := enc.Encode(&xlStructData); err != nil { + b.Error(err) + } + l = int64(len(out)) + out = out[:0] + } + + b.SetBytes(l) +} + +func BenchmarkCodec_Marshal_S_Parallel(b *testing.B) { + var l int64 + + b.RunParallel(func(pb *testing.PB) { + var out []byte + + var h codec.Handle = new(codec.JsonHandle) + enc := codec.NewEncoderBytes(&out, h) + + for pb.Next() { + enc.ResetBytes(&out) + if err := enc.Encode(&smallStructData); err != nil { + b.Error(err) + } + l = int64(len(out)) + out = nil + } + }) + + b.SetBytes(l) +} + +func BenchmarkCodec_Marshal_M_Parallel(b *testing.B) { + var l int64 + + b.RunParallel(func(pb *testing.PB) { + var h codec.Handle = new(codec.JsonHandle) + + var out []byte + enc := codec.NewEncoderBytes(&out, h) + + for pb.Next() { + enc.ResetBytes(&out) + if err := enc.Encode(&largeStructData); err != nil { + b.Error(err) + } + l = int64(len(out)) + out = nil + } + }) + b.SetBytes(l) +} + +func BenchmarkCodec_Marshal_L_Parallel(b *testing.B) { + var l int64 + + b.RunParallel(func(pb *testing.PB) { + var h codec.Handle = new(codec.JsonHandle) + + var out []byte + enc := codec.NewEncoderBytes(&out, h) + + for pb.Next() { + enc.ResetBytes(&out) + if err := enc.Encode(&xlStructData); err != nil { + b.Error(err) + } + l = int64(len(out)) + out = nil + } + }) + b.SetBytes(l) +} + +func BenchmarkCodec_Marshal_S_Parallel_Reuse(b *testing.B) { + var l int64 + + b.RunParallel(func(pb *testing.PB) { + var out []byte + + var h codec.Handle = new(codec.JsonHandle) + enc := codec.NewEncoderBytes(&out, h) + + for pb.Next() { + enc.ResetBytes(&out) + if err := enc.Encode(&smallStructData); err != nil { + b.Error(err) + } + l = int64(len(out)) + out = out[:0] + } + }) + + b.SetBytes(l) +} + +func BenchmarkCodec_Marshal_M_Parallel_Reuse(b *testing.B) { + var l int64 + + b.RunParallel(func(pb *testing.PB) { + var h codec.Handle = new(codec.JsonHandle) + + var out []byte + enc := codec.NewEncoderBytes(&out, h) + + for pb.Next() { + enc.ResetBytes(&out) + if err := enc.Encode(&largeStructData); err != nil { + b.Error(err) + } + l = int64(len(out)) + out = out[:0] + } + }) + b.SetBytes(l) +} + +func BenchmarkCodec_Marshal_L_Parallel_Reuse(b *testing.B) { + var l int64 + + b.RunParallel(func(pb *testing.PB) { + var h codec.Handle = new(codec.JsonHandle) + + var out []byte + enc := codec.NewEncoderBytes(&out, h) + + for pb.Next() { + enc.ResetBytes(&out) + if err := enc.Encode(&xlStructData); err != nil { + b.Error(err) + } + l = int64(len(out)) + out = out[:0] + } + }) + b.SetBytes(l) +} diff --git a/vendor/github.com/mailru/easyjson/benchmark/data.go b/vendor/github.com/mailru/easyjson/benchmark/data.go new file mode 100644 index 0000000..71eb91a --- /dev/null +++ b/vendor/github.com/mailru/easyjson/benchmark/data.go @@ -0,0 +1,148 @@ +// Package benchmark provides a simple benchmark for easyjson against default serialization and ffjson. +// The data example is taken from https://dev.twitter.com/rest/reference/get/search/tweets +package benchmark + +import ( + "io/ioutil" +) + +var largeStructText, _ = ioutil.ReadFile("example.json") +var xlStructData XLStruct + +func init() { + for i := 0; i < 50; i++ { + xlStructData.Data = append(xlStructData.Data, largeStructData) + } +} + +var smallStructText = []byte(`{"hashtags":[{"indices":[5, 10],"text":"some-text"}],"urls":[],"user_mentions":[]}`) +var smallStructData = Entities{ + Hashtags: []Hashtag{{Indices: []int{5, 10}, Text: "some-text"}}, + Urls: []*string{}, + UserMentions: []*string{}, +} + +type SearchMetadata struct { + CompletedIn float64 `json:"completed_in"` + Count int `json:"count"` + MaxID int64 `json:"max_id"` + MaxIDStr string `json:"max_id_str"` + NextResults string `json:"next_results"` + Query string `json:"query"` + RefreshURL string `json:"refresh_url"` + SinceID int64 `json:"since_id"` + SinceIDStr string `json:"since_id_str"` +} + +type Hashtag struct { + Indices []int `json:"indices"` + Text string `json:"text"` +} + +//easyjson:json +type Entities struct { + Hashtags []Hashtag `json:"hashtags"` + Urls []*string `json:"urls"` + UserMentions []*string `json:"user_mentions"` +} + +type UserEntityDescription struct { + Urls []*string `json:"urls"` +} + +type URL struct { + ExpandedURL *string `json:"expanded_url"` + Indices []int `json:"indices"` + URL string `json:"url"` +} + +type UserEntityURL struct { + Urls []URL `json:"urls"` +} + +type UserEntities struct { + Description UserEntityDescription `json:"description"` + URL UserEntityURL `json:"url"` +} + +type User struct { + ContributorsEnabled bool `json:"contributors_enabled"` + CreatedAt string `json:"created_at"` + DefaultProfile bool `json:"default_profile"` + DefaultProfileImage bool `json:"default_profile_image"` + Description string `json:"description"` + Entities UserEntities `json:"entities"` + FavouritesCount int `json:"favourites_count"` + FollowRequestSent *string `json:"follow_request_sent"` + FollowersCount int `json:"followers_count"` + Following *string `json:"following"` + FriendsCount int `json:"friends_count"` + GeoEnabled bool `json:"geo_enabled"` + ID int `json:"id"` + IDStr string `json:"id_str"` + IsTranslator bool `json:"is_translator"` + Lang string `json:"lang"` + ListedCount int `json:"listed_count"` + Location string `json:"location"` + Name string `json:"name"` + Notifications *string `json:"notifications"` + ProfileBackgroundColor string `json:"profile_background_color"` + ProfileBackgroundImageURL string `json:"profile_background_image_url"` + ProfileBackgroundImageURLHTTPS string `json:"profile_background_image_url_https"` + ProfileBackgroundTile bool `json:"profile_background_tile"` + ProfileImageURL string `json:"profile_image_url"` + ProfileImageURLHTTPS string `json:"profile_image_url_https"` + ProfileLinkColor string `json:"profile_link_color"` + ProfileSidebarBorderColor string `json:"profile_sidebar_border_color"` + ProfileSidebarFillColor string `json:"profile_sidebar_fill_color"` + ProfileTextColor string `json:"profile_text_color"` + ProfileUseBackgroundImage bool `json:"profile_use_background_image"` + Protected bool `json:"protected"` + ScreenName string `json:"screen_name"` + ShowAllInlineMedia bool `json:"show_all_inline_media"` + StatusesCount int `json:"statuses_count"` + TimeZone string `json:"time_zone"` + URL *string `json:"url"` + UtcOffset int `json:"utc_offset"` + Verified bool `json:"verified"` +} + +type StatusMetadata struct { + IsoLanguageCode string `json:"iso_language_code"` + ResultType string `json:"result_type"` +} + +type Status struct { + Contributors *string `json:"contributors"` + Coordinates *string `json:"coordinates"` + CreatedAt string `json:"created_at"` + Entities Entities `json:"entities"` + Favorited bool `json:"favorited"` + Geo *string `json:"geo"` + ID int64 `json:"id"` + IDStr string `json:"id_str"` + InReplyToScreenName *string `json:"in_reply_to_screen_name"` + InReplyToStatusID *string `json:"in_reply_to_status_id"` + InReplyToStatusIDStr *string `json:"in_reply_to_status_id_str"` + InReplyToUserID *string `json:"in_reply_to_user_id"` + InReplyToUserIDStr *string `json:"in_reply_to_user_id_str"` + Metadata StatusMetadata `json:"metadata"` + Place *string `json:"place"` + RetweetCount int `json:"retweet_count"` + Retweeted bool `json:"retweeted"` + Source string `json:"source"` + Text string `json:"text"` + Truncated bool `json:"truncated"` + User User `json:"user"` +} + +//easyjson:json +type LargeStruct struct { + SearchMetadata SearchMetadata `json:"search_metadata"` + Statuses []Status `json:"statuses"` +} + +//easyjson:json +type XLStruct struct { + Data []LargeStruct +} diff --git a/vendor/github.com/mailru/easyjson/benchmark/data_codec.go b/vendor/github.com/mailru/easyjson/benchmark/data_codec.go new file mode 100644 index 0000000..d2d83fa --- /dev/null +++ b/vendor/github.com/mailru/easyjson/benchmark/data_codec.go @@ -0,0 +1,6914 @@ +//+build use_codec +//+build !easyjson_nounsafe +//+build !appengine + +// ************************************************************ +// DO NOT EDIT. +// THIS FILE IS AUTO-GENERATED BY codecgen. +// ************************************************************ + +package benchmark + +import ( + "errors" + "fmt" + "reflect" + "runtime" + "unsafe" + + codec1978 "github.com/ugorji/go/codec" +) + +const ( + // ----- content types ---- + codecSelferC_UTF89225 = 1 + codecSelferC_RAW9225 = 0 + // ----- value types used ---- + codecSelferValueTypeArray9225 = 10 + codecSelferValueTypeMap9225 = 9 + // ----- containerStateValues ---- + codecSelfer_containerMapKey9225 = 2 + codecSelfer_containerMapValue9225 = 3 + codecSelfer_containerMapEnd9225 = 4 + codecSelfer_containerArrayElem9225 = 6 + codecSelfer_containerArrayEnd9225 = 7 +) + +var ( + codecSelferBitsize9225 = uint8(reflect.TypeOf(uint(0)).Bits()) + codecSelferOnlyMapOrArrayEncodeToStructErr9225 = errors.New(`only encoded map or array can be decoded into a struct`) +) + +type codecSelferUnsafeString9225 struct { + Data uintptr + Len int +} + +type codecSelfer9225 struct{} + +func init() { + if codec1978.GenVersion != 5 { + _, file, _, _ := runtime.Caller(0) + err := fmt.Errorf("codecgen version mismatch: current: %v, need %v. Re-generate file: %v", + 5, codec1978.GenVersion, file) + panic(err) + } + if false { // reference the types, but skip this branch at build/run time + var v0 unsafe.Pointer + _ = v0 + } +} + +func (x *SearchMetadata) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1 := z.EncBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + var yyq2 [9]bool + _, _, _ = yysep2, yyq2, yy2arr2 + const yyr2 bool = false + var yynn2 int + if yyr2 || yy2arr2 { + r.EncodeArrayStart(9) + } else { + yynn2 = 9 + for _, b := range yyq2 { + if b { + yynn2++ + } + } + r.EncodeMapStart(yynn2) + yynn2 = 0 + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym4 := z.EncBinary() + _ = yym4 + if false { + } else { + r.EncodeFloat64(float64(x.CompletedIn)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("completed_in")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym5 := z.EncBinary() + _ = yym5 + if false { + } else { + r.EncodeFloat64(float64(x.CompletedIn)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym7 := z.EncBinary() + _ = yym7 + if false { + } else { + r.EncodeInt(int64(x.Count)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("count")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym8 := z.EncBinary() + _ = yym8 + if false { + } else { + r.EncodeInt(int64(x.Count)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym10 := z.EncBinary() + _ = yym10 + if false { + } else { + r.EncodeInt(int64(x.MaxID)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("max_id")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym11 := z.EncBinary() + _ = yym11 + if false { + } else { + r.EncodeInt(int64(x.MaxID)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym13 := z.EncBinary() + _ = yym13 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.MaxIDStr)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("max_id_str")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym14 := z.EncBinary() + _ = yym14 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.MaxIDStr)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym16 := z.EncBinary() + _ = yym16 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.NextResults)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("next_results")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym17 := z.EncBinary() + _ = yym17 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.NextResults)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym19 := z.EncBinary() + _ = yym19 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.Query)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("query")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym20 := z.EncBinary() + _ = yym20 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.Query)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym22 := z.EncBinary() + _ = yym22 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.RefreshURL)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("refresh_url")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym23 := z.EncBinary() + _ = yym23 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.RefreshURL)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym25 := z.EncBinary() + _ = yym25 + if false { + } else { + r.EncodeInt(int64(x.SinceID)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("since_id")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym26 := z.EncBinary() + _ = yym26 + if false { + } else { + r.EncodeInt(int64(x.SinceID)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym28 := z.EncBinary() + _ = yym28 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.SinceIDStr)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("since_id_str")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym29 := z.EncBinary() + _ = yym29 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.SinceIDStr)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayEnd9225) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd9225) + } + } + } +} + +func (x *SearchMetadata) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1 := z.DecBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap9225 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd9225) + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray9225 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr9225) + } + } +} + +func (x *SearchMetadata) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3Slc + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey9225) + yys3Slc = r.DecodeBytes(yys3Slc, true, true) + yys3SlcHdr := codecSelferUnsafeString9225{uintptr(unsafe.Pointer(&yys3Slc[0])), len(yys3Slc)} + yys3 := *(*string)(unsafe.Pointer(&yys3SlcHdr)) + z.DecSendContainerState(codecSelfer_containerMapValue9225) + switch yys3 { + case "completed_in": + if r.TryDecodeAsNil() { + x.CompletedIn = 0 + } else { + yyv4 := &x.CompletedIn + yym5 := z.DecBinary() + _ = yym5 + if false { + } else { + *((*float64)(yyv4)) = float64(r.DecodeFloat(false)) + } + } + case "count": + if r.TryDecodeAsNil() { + x.Count = 0 + } else { + yyv6 := &x.Count + yym7 := z.DecBinary() + _ = yym7 + if false { + } else { + *((*int)(yyv6)) = int(r.DecodeInt(codecSelferBitsize9225)) + } + } + case "max_id": + if r.TryDecodeAsNil() { + x.MaxID = 0 + } else { + yyv8 := &x.MaxID + yym9 := z.DecBinary() + _ = yym9 + if false { + } else { + *((*int)(yyv8)) = int(r.DecodeInt(codecSelferBitsize9225)) + } + } + case "max_id_str": + if r.TryDecodeAsNil() { + x.MaxIDStr = "" + } else { + yyv10 := &x.MaxIDStr + yym11 := z.DecBinary() + _ = yym11 + if false { + } else { + *((*string)(yyv10)) = r.DecodeString() + } + } + case "next_results": + if r.TryDecodeAsNil() { + x.NextResults = "" + } else { + yyv12 := &x.NextResults + yym13 := z.DecBinary() + _ = yym13 + if false { + } else { + *((*string)(yyv12)) = r.DecodeString() + } + } + case "query": + if r.TryDecodeAsNil() { + x.Query = "" + } else { + yyv14 := &x.Query + yym15 := z.DecBinary() + _ = yym15 + if false { + } else { + *((*string)(yyv14)) = r.DecodeString() + } + } + case "refresh_url": + if r.TryDecodeAsNil() { + x.RefreshURL = "" + } else { + yyv16 := &x.RefreshURL + yym17 := z.DecBinary() + _ = yym17 + if false { + } else { + *((*string)(yyv16)) = r.DecodeString() + } + } + case "since_id": + if r.TryDecodeAsNil() { + x.SinceID = 0 + } else { + yyv18 := &x.SinceID + yym19 := z.DecBinary() + _ = yym19 + if false { + } else { + *((*int)(yyv18)) = int(r.DecodeInt(codecSelferBitsize9225)) + } + } + case "since_id_str": + if r.TryDecodeAsNil() { + x.SinceIDStr = "" + } else { + yyv20 := &x.SinceIDStr + yym21 := z.DecBinary() + _ = yym21 + if false { + } else { + *((*string)(yyv20)) = r.DecodeString() + } + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + z.DecSendContainerState(codecSelfer_containerMapEnd9225) +} + +func (x *SearchMetadata) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj22 int + var yyb22 bool + var yyhl22 bool = l >= 0 + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l + } else { + yyb22 = r.CheckBreak() + } + if yyb22 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.CompletedIn = 0 + } else { + yyv23 := &x.CompletedIn + yym24 := z.DecBinary() + _ = yym24 + if false { + } else { + *((*float64)(yyv23)) = float64(r.DecodeFloat(false)) + } + } + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l + } else { + yyb22 = r.CheckBreak() + } + if yyb22 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.Count = 0 + } else { + yyv25 := &x.Count + yym26 := z.DecBinary() + _ = yym26 + if false { + } else { + *((*int)(yyv25)) = int(r.DecodeInt(codecSelferBitsize9225)) + } + } + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l + } else { + yyb22 = r.CheckBreak() + } + if yyb22 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.MaxID = 0 + } else { + yyv27 := &x.MaxID + yym28 := z.DecBinary() + _ = yym28 + if false { + } else { + *((*int)(yyv27)) = int(r.DecodeInt(codecSelferBitsize9225)) + } + } + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l + } else { + yyb22 = r.CheckBreak() + } + if yyb22 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.MaxIDStr = "" + } else { + yyv29 := &x.MaxIDStr + yym30 := z.DecBinary() + _ = yym30 + if false { + } else { + *((*string)(yyv29)) = r.DecodeString() + } + } + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l + } else { + yyb22 = r.CheckBreak() + } + if yyb22 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.NextResults = "" + } else { + yyv31 := &x.NextResults + yym32 := z.DecBinary() + _ = yym32 + if false { + } else { + *((*string)(yyv31)) = r.DecodeString() + } + } + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l + } else { + yyb22 = r.CheckBreak() + } + if yyb22 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.Query = "" + } else { + yyv33 := &x.Query + yym34 := z.DecBinary() + _ = yym34 + if false { + } else { + *((*string)(yyv33)) = r.DecodeString() + } + } + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l + } else { + yyb22 = r.CheckBreak() + } + if yyb22 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.RefreshURL = "" + } else { + yyv35 := &x.RefreshURL + yym36 := z.DecBinary() + _ = yym36 + if false { + } else { + *((*string)(yyv35)) = r.DecodeString() + } + } + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l + } else { + yyb22 = r.CheckBreak() + } + if yyb22 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.SinceID = 0 + } else { + yyv37 := &x.SinceID + yym38 := z.DecBinary() + _ = yym38 + if false { + } else { + *((*int)(yyv37)) = int(r.DecodeInt(codecSelferBitsize9225)) + } + } + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l + } else { + yyb22 = r.CheckBreak() + } + if yyb22 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.SinceIDStr = "" + } else { + yyv39 := &x.SinceIDStr + yym40 := z.DecBinary() + _ = yym40 + if false { + } else { + *((*string)(yyv39)) = r.DecodeString() + } + } + for { + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l + } else { + yyb22 = r.CheckBreak() + } + if yyb22 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + z.DecStructFieldNotFound(yyj22-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) +} + +func (x *Hashtag) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1 := z.EncBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + var yyq2 [2]bool + _, _, _ = yysep2, yyq2, yy2arr2 + const yyr2 bool = false + var yynn2 int + if yyr2 || yy2arr2 { + r.EncodeArrayStart(2) + } else { + yynn2 = 2 + for _, b := range yyq2 { + if b { + yynn2++ + } + } + r.EncodeMapStart(yynn2) + yynn2 = 0 + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + if x.Indices == nil { + r.EncodeNil() + } else { + yym4 := z.EncBinary() + _ = yym4 + if false { + } else { + z.F.EncSliceIntV(x.Indices, false, e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("indices")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + if x.Indices == nil { + r.EncodeNil() + } else { + yym5 := z.EncBinary() + _ = yym5 + if false { + } else { + z.F.EncSliceIntV(x.Indices, false, e) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym7 := z.EncBinary() + _ = yym7 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.Text)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("text")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym8 := z.EncBinary() + _ = yym8 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.Text)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayEnd9225) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd9225) + } + } + } +} + +func (x *Hashtag) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1 := z.DecBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap9225 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd9225) + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray9225 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr9225) + } + } +} + +func (x *Hashtag) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3Slc + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey9225) + yys3Slc = r.DecodeBytes(yys3Slc, true, true) + yys3SlcHdr := codecSelferUnsafeString9225{uintptr(unsafe.Pointer(&yys3Slc[0])), len(yys3Slc)} + yys3 := *(*string)(unsafe.Pointer(&yys3SlcHdr)) + z.DecSendContainerState(codecSelfer_containerMapValue9225) + switch yys3 { + case "indices": + if r.TryDecodeAsNil() { + x.Indices = nil + } else { + yyv4 := &x.Indices + yym5 := z.DecBinary() + _ = yym5 + if false { + } else { + z.F.DecSliceIntX(yyv4, false, d) + } + } + case "text": + if r.TryDecodeAsNil() { + x.Text = "" + } else { + yyv6 := &x.Text + yym7 := z.DecBinary() + _ = yym7 + if false { + } else { + *((*string)(yyv6)) = r.DecodeString() + } + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + z.DecSendContainerState(codecSelfer_containerMapEnd9225) +} + +func (x *Hashtag) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj8 int + var yyb8 bool + var yyhl8 bool = l >= 0 + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l + } else { + yyb8 = r.CheckBreak() + } + if yyb8 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.Indices = nil + } else { + yyv9 := &x.Indices + yym10 := z.DecBinary() + _ = yym10 + if false { + } else { + z.F.DecSliceIntX(yyv9, false, d) + } + } + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l + } else { + yyb8 = r.CheckBreak() + } + if yyb8 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.Text = "" + } else { + yyv11 := &x.Text + yym12 := z.DecBinary() + _ = yym12 + if false { + } else { + *((*string)(yyv11)) = r.DecodeString() + } + } + for { + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l + } else { + yyb8 = r.CheckBreak() + } + if yyb8 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + z.DecStructFieldNotFound(yyj8-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) +} + +func (x *Entities) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1 := z.EncBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + var yyq2 [3]bool + _, _, _ = yysep2, yyq2, yy2arr2 + const yyr2 bool = false + var yynn2 int + if yyr2 || yy2arr2 { + r.EncodeArrayStart(3) + } else { + yynn2 = 3 + for _, b := range yyq2 { + if b { + yynn2++ + } + } + r.EncodeMapStart(yynn2) + yynn2 = 0 + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + if x.Hashtags == nil { + r.EncodeNil() + } else { + yym4 := z.EncBinary() + _ = yym4 + if false { + } else { + h.encSliceHashtag(([]Hashtag)(x.Hashtags), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("hashtags")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + if x.Hashtags == nil { + r.EncodeNil() + } else { + yym5 := z.EncBinary() + _ = yym5 + if false { + } else { + h.encSliceHashtag(([]Hashtag)(x.Hashtags), e) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + if x.Urls == nil { + r.EncodeNil() + } else { + yym7 := z.EncBinary() + _ = yym7 + if false { + } else { + h.encSlicePtrtostring(([]*string)(x.Urls), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("urls")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + if x.Urls == nil { + r.EncodeNil() + } else { + yym8 := z.EncBinary() + _ = yym8 + if false { + } else { + h.encSlicePtrtostring(([]*string)(x.Urls), e) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + if x.UserMentions == nil { + r.EncodeNil() + } else { + yym10 := z.EncBinary() + _ = yym10 + if false { + } else { + h.encSlicePtrtostring(([]*string)(x.UserMentions), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("user_mentions")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + if x.UserMentions == nil { + r.EncodeNil() + } else { + yym11 := z.EncBinary() + _ = yym11 + if false { + } else { + h.encSlicePtrtostring(([]*string)(x.UserMentions), e) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayEnd9225) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd9225) + } + } + } +} + +func (x *Entities) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1 := z.DecBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap9225 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd9225) + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray9225 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr9225) + } + } +} + +func (x *Entities) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3Slc + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey9225) + yys3Slc = r.DecodeBytes(yys3Slc, true, true) + yys3SlcHdr := codecSelferUnsafeString9225{uintptr(unsafe.Pointer(&yys3Slc[0])), len(yys3Slc)} + yys3 := *(*string)(unsafe.Pointer(&yys3SlcHdr)) + z.DecSendContainerState(codecSelfer_containerMapValue9225) + switch yys3 { + case "hashtags": + if r.TryDecodeAsNil() { + x.Hashtags = nil + } else { + yyv4 := &x.Hashtags + yym5 := z.DecBinary() + _ = yym5 + if false { + } else { + h.decSliceHashtag((*[]Hashtag)(yyv4), d) + } + } + case "urls": + if r.TryDecodeAsNil() { + x.Urls = nil + } else { + yyv6 := &x.Urls + yym7 := z.DecBinary() + _ = yym7 + if false { + } else { + h.decSlicePtrtostring((*[]*string)(yyv6), d) + } + } + case "user_mentions": + if r.TryDecodeAsNil() { + x.UserMentions = nil + } else { + yyv8 := &x.UserMentions + yym9 := z.DecBinary() + _ = yym9 + if false { + } else { + h.decSlicePtrtostring((*[]*string)(yyv8), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + z.DecSendContainerState(codecSelfer_containerMapEnd9225) +} + +func (x *Entities) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj10 int + var yyb10 bool + var yyhl10 bool = l >= 0 + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.Hashtags = nil + } else { + yyv11 := &x.Hashtags + yym12 := z.DecBinary() + _ = yym12 + if false { + } else { + h.decSliceHashtag((*[]Hashtag)(yyv11), d) + } + } + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.Urls = nil + } else { + yyv13 := &x.Urls + yym14 := z.DecBinary() + _ = yym14 + if false { + } else { + h.decSlicePtrtostring((*[]*string)(yyv13), d) + } + } + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.UserMentions = nil + } else { + yyv15 := &x.UserMentions + yym16 := z.DecBinary() + _ = yym16 + if false { + } else { + h.decSlicePtrtostring((*[]*string)(yyv15), d) + } + } + for { + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + z.DecStructFieldNotFound(yyj10-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) +} + +func (x *UserEntityDescription) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1 := z.EncBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + var yyq2 [1]bool + _, _, _ = yysep2, yyq2, yy2arr2 + const yyr2 bool = false + var yynn2 int + if yyr2 || yy2arr2 { + r.EncodeArrayStart(1) + } else { + yynn2 = 1 + for _, b := range yyq2 { + if b { + yynn2++ + } + } + r.EncodeMapStart(yynn2) + yynn2 = 0 + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + if x.Urls == nil { + r.EncodeNil() + } else { + yym4 := z.EncBinary() + _ = yym4 + if false { + } else { + h.encSlicePtrtostring(([]*string)(x.Urls), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("urls")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + if x.Urls == nil { + r.EncodeNil() + } else { + yym5 := z.EncBinary() + _ = yym5 + if false { + } else { + h.encSlicePtrtostring(([]*string)(x.Urls), e) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayEnd9225) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd9225) + } + } + } +} + +func (x *UserEntityDescription) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1 := z.DecBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap9225 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd9225) + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray9225 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr9225) + } + } +} + +func (x *UserEntityDescription) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3Slc + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey9225) + yys3Slc = r.DecodeBytes(yys3Slc, true, true) + yys3SlcHdr := codecSelferUnsafeString9225{uintptr(unsafe.Pointer(&yys3Slc[0])), len(yys3Slc)} + yys3 := *(*string)(unsafe.Pointer(&yys3SlcHdr)) + z.DecSendContainerState(codecSelfer_containerMapValue9225) + switch yys3 { + case "urls": + if r.TryDecodeAsNil() { + x.Urls = nil + } else { + yyv4 := &x.Urls + yym5 := z.DecBinary() + _ = yym5 + if false { + } else { + h.decSlicePtrtostring((*[]*string)(yyv4), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + z.DecSendContainerState(codecSelfer_containerMapEnd9225) +} + +func (x *UserEntityDescription) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj6 int + var yyb6 bool + var yyhl6 bool = l >= 0 + yyj6++ + if yyhl6 { + yyb6 = yyj6 > l + } else { + yyb6 = r.CheckBreak() + } + if yyb6 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.Urls = nil + } else { + yyv7 := &x.Urls + yym8 := z.DecBinary() + _ = yym8 + if false { + } else { + h.decSlicePtrtostring((*[]*string)(yyv7), d) + } + } + for { + yyj6++ + if yyhl6 { + yyb6 = yyj6 > l + } else { + yyb6 = r.CheckBreak() + } + if yyb6 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + z.DecStructFieldNotFound(yyj6-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) +} + +func (x *URL) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1 := z.EncBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + var yyq2 [3]bool + _, _, _ = yysep2, yyq2, yy2arr2 + const yyr2 bool = false + var yynn2 int + if yyr2 || yy2arr2 { + r.EncodeArrayStart(3) + } else { + yynn2 = 3 + for _, b := range yyq2 { + if b { + yynn2++ + } + } + r.EncodeMapStart(yynn2) + yynn2 = 0 + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + if x.ExpandedURL == nil { + r.EncodeNil() + } else { + yy4 := *x.ExpandedURL + yym5 := z.EncBinary() + _ = yym5 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(yy4)) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("expanded_url")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + if x.ExpandedURL == nil { + r.EncodeNil() + } else { + yy6 := *x.ExpandedURL + yym7 := z.EncBinary() + _ = yym7 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(yy6)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + if x.Indices == nil { + r.EncodeNil() + } else { + yym9 := z.EncBinary() + _ = yym9 + if false { + } else { + z.F.EncSliceIntV(x.Indices, false, e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("indices")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + if x.Indices == nil { + r.EncodeNil() + } else { + yym10 := z.EncBinary() + _ = yym10 + if false { + } else { + z.F.EncSliceIntV(x.Indices, false, e) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym12 := z.EncBinary() + _ = yym12 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.URL)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("url")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym13 := z.EncBinary() + _ = yym13 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.URL)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayEnd9225) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd9225) + } + } + } +} + +func (x *URL) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1 := z.DecBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap9225 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd9225) + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray9225 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr9225) + } + } +} + +func (x *URL) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3Slc + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey9225) + yys3Slc = r.DecodeBytes(yys3Slc, true, true) + yys3SlcHdr := codecSelferUnsafeString9225{uintptr(unsafe.Pointer(&yys3Slc[0])), len(yys3Slc)} + yys3 := *(*string)(unsafe.Pointer(&yys3SlcHdr)) + z.DecSendContainerState(codecSelfer_containerMapValue9225) + switch yys3 { + case "expanded_url": + if r.TryDecodeAsNil() { + if x.ExpandedURL != nil { + x.ExpandedURL = nil + } + } else { + if x.ExpandedURL == nil { + x.ExpandedURL = new(string) + } + yym5 := z.DecBinary() + _ = yym5 + if false { + } else { + *((*string)(x.ExpandedURL)) = r.DecodeString() + } + } + case "indices": + if r.TryDecodeAsNil() { + x.Indices = nil + } else { + yyv6 := &x.Indices + yym7 := z.DecBinary() + _ = yym7 + if false { + } else { + z.F.DecSliceIntX(yyv6, false, d) + } + } + case "url": + if r.TryDecodeAsNil() { + x.URL = "" + } else { + yyv8 := &x.URL + yym9 := z.DecBinary() + _ = yym9 + if false { + } else { + *((*string)(yyv8)) = r.DecodeString() + } + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + z.DecSendContainerState(codecSelfer_containerMapEnd9225) +} + +func (x *URL) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj10 int + var yyb10 bool + var yyhl10 bool = l >= 0 + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + if x.ExpandedURL != nil { + x.ExpandedURL = nil + } + } else { + if x.ExpandedURL == nil { + x.ExpandedURL = new(string) + } + yym12 := z.DecBinary() + _ = yym12 + if false { + } else { + *((*string)(x.ExpandedURL)) = r.DecodeString() + } + } + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.Indices = nil + } else { + yyv13 := &x.Indices + yym14 := z.DecBinary() + _ = yym14 + if false { + } else { + z.F.DecSliceIntX(yyv13, false, d) + } + } + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.URL = "" + } else { + yyv15 := &x.URL + yym16 := z.DecBinary() + _ = yym16 + if false { + } else { + *((*string)(yyv15)) = r.DecodeString() + } + } + for { + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + z.DecStructFieldNotFound(yyj10-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) +} + +func (x *UserEntityURL) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1 := z.EncBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + var yyq2 [1]bool + _, _, _ = yysep2, yyq2, yy2arr2 + const yyr2 bool = false + var yynn2 int + if yyr2 || yy2arr2 { + r.EncodeArrayStart(1) + } else { + yynn2 = 1 + for _, b := range yyq2 { + if b { + yynn2++ + } + } + r.EncodeMapStart(yynn2) + yynn2 = 0 + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + if x.Urls == nil { + r.EncodeNil() + } else { + yym4 := z.EncBinary() + _ = yym4 + if false { + } else { + h.encSliceURL(([]URL)(x.Urls), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("urls")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + if x.Urls == nil { + r.EncodeNil() + } else { + yym5 := z.EncBinary() + _ = yym5 + if false { + } else { + h.encSliceURL(([]URL)(x.Urls), e) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayEnd9225) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd9225) + } + } + } +} + +func (x *UserEntityURL) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1 := z.DecBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap9225 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd9225) + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray9225 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr9225) + } + } +} + +func (x *UserEntityURL) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3Slc + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey9225) + yys3Slc = r.DecodeBytes(yys3Slc, true, true) + yys3SlcHdr := codecSelferUnsafeString9225{uintptr(unsafe.Pointer(&yys3Slc[0])), len(yys3Slc)} + yys3 := *(*string)(unsafe.Pointer(&yys3SlcHdr)) + z.DecSendContainerState(codecSelfer_containerMapValue9225) + switch yys3 { + case "urls": + if r.TryDecodeAsNil() { + x.Urls = nil + } else { + yyv4 := &x.Urls + yym5 := z.DecBinary() + _ = yym5 + if false { + } else { + h.decSliceURL((*[]URL)(yyv4), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + z.DecSendContainerState(codecSelfer_containerMapEnd9225) +} + +func (x *UserEntityURL) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj6 int + var yyb6 bool + var yyhl6 bool = l >= 0 + yyj6++ + if yyhl6 { + yyb6 = yyj6 > l + } else { + yyb6 = r.CheckBreak() + } + if yyb6 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.Urls = nil + } else { + yyv7 := &x.Urls + yym8 := z.DecBinary() + _ = yym8 + if false { + } else { + h.decSliceURL((*[]URL)(yyv7), d) + } + } + for { + yyj6++ + if yyhl6 { + yyb6 = yyj6 > l + } else { + yyb6 = r.CheckBreak() + } + if yyb6 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + z.DecStructFieldNotFound(yyj6-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) +} + +func (x *UserEntities) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1 := z.EncBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + var yyq2 [2]bool + _, _, _ = yysep2, yyq2, yy2arr2 + const yyr2 bool = false + var yynn2 int + if yyr2 || yy2arr2 { + r.EncodeArrayStart(2) + } else { + yynn2 = 2 + for _, b := range yyq2 { + if b { + yynn2++ + } + } + r.EncodeMapStart(yynn2) + yynn2 = 0 + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yy4 := &x.Description + yy4.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("description")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yy6 := &x.Description + yy6.CodecEncodeSelf(e) + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yy9 := &x.URL + yy9.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("url")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yy11 := &x.URL + yy11.CodecEncodeSelf(e) + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayEnd9225) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd9225) + } + } + } +} + +func (x *UserEntities) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1 := z.DecBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap9225 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd9225) + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray9225 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr9225) + } + } +} + +func (x *UserEntities) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3Slc + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey9225) + yys3Slc = r.DecodeBytes(yys3Slc, true, true) + yys3SlcHdr := codecSelferUnsafeString9225{uintptr(unsafe.Pointer(&yys3Slc[0])), len(yys3Slc)} + yys3 := *(*string)(unsafe.Pointer(&yys3SlcHdr)) + z.DecSendContainerState(codecSelfer_containerMapValue9225) + switch yys3 { + case "description": + if r.TryDecodeAsNil() { + x.Description = UserEntityDescription{} + } else { + yyv4 := &x.Description + yyv4.CodecDecodeSelf(d) + } + case "url": + if r.TryDecodeAsNil() { + x.URL = UserEntityURL{} + } else { + yyv5 := &x.URL + yyv5.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + z.DecSendContainerState(codecSelfer_containerMapEnd9225) +} + +func (x *UserEntities) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj6 int + var yyb6 bool + var yyhl6 bool = l >= 0 + yyj6++ + if yyhl6 { + yyb6 = yyj6 > l + } else { + yyb6 = r.CheckBreak() + } + if yyb6 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.Description = UserEntityDescription{} + } else { + yyv7 := &x.Description + yyv7.CodecDecodeSelf(d) + } + yyj6++ + if yyhl6 { + yyb6 = yyj6 > l + } else { + yyb6 = r.CheckBreak() + } + if yyb6 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.URL = UserEntityURL{} + } else { + yyv8 := &x.URL + yyv8.CodecDecodeSelf(d) + } + for { + yyj6++ + if yyhl6 { + yyb6 = yyj6 > l + } else { + yyb6 = r.CheckBreak() + } + if yyb6 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + z.DecStructFieldNotFound(yyj6-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) +} + +func (x *User) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1 := z.EncBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + var yyq2 [39]bool + _, _, _ = yysep2, yyq2, yy2arr2 + const yyr2 bool = false + var yynn2 int + if yyr2 || yy2arr2 { + r.EncodeArrayStart(39) + } else { + yynn2 = 39 + for _, b := range yyq2 { + if b { + yynn2++ + } + } + r.EncodeMapStart(yynn2) + yynn2 = 0 + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym4 := z.EncBinary() + _ = yym4 + if false { + } else { + r.EncodeBool(bool(x.ContributorsEnabled)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("contributors_enabled")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym5 := z.EncBinary() + _ = yym5 + if false { + } else { + r.EncodeBool(bool(x.ContributorsEnabled)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym7 := z.EncBinary() + _ = yym7 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.CreatedAt)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("created_at")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym8 := z.EncBinary() + _ = yym8 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.CreatedAt)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym10 := z.EncBinary() + _ = yym10 + if false { + } else { + r.EncodeBool(bool(x.DefaultProfile)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("default_profile")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym11 := z.EncBinary() + _ = yym11 + if false { + } else { + r.EncodeBool(bool(x.DefaultProfile)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym13 := z.EncBinary() + _ = yym13 + if false { + } else { + r.EncodeBool(bool(x.DefaultProfileImage)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("default_profile_image")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym14 := z.EncBinary() + _ = yym14 + if false { + } else { + r.EncodeBool(bool(x.DefaultProfileImage)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym16 := z.EncBinary() + _ = yym16 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.Description)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("description")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym17 := z.EncBinary() + _ = yym17 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.Description)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yy19 := &x.Entities + yy19.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("entities")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yy21 := &x.Entities + yy21.CodecEncodeSelf(e) + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym24 := z.EncBinary() + _ = yym24 + if false { + } else { + r.EncodeInt(int64(x.FavouritesCount)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("favourites_count")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym25 := z.EncBinary() + _ = yym25 + if false { + } else { + r.EncodeInt(int64(x.FavouritesCount)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + if x.FollowRequestSent == nil { + r.EncodeNil() + } else { + yy27 := *x.FollowRequestSent + yym28 := z.EncBinary() + _ = yym28 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(yy27)) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("follow_request_sent")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + if x.FollowRequestSent == nil { + r.EncodeNil() + } else { + yy29 := *x.FollowRequestSent + yym30 := z.EncBinary() + _ = yym30 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(yy29)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym32 := z.EncBinary() + _ = yym32 + if false { + } else { + r.EncodeInt(int64(x.FollowersCount)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("followers_count")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym33 := z.EncBinary() + _ = yym33 + if false { + } else { + r.EncodeInt(int64(x.FollowersCount)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + if x.Following == nil { + r.EncodeNil() + } else { + yy35 := *x.Following + yym36 := z.EncBinary() + _ = yym36 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(yy35)) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("following")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + if x.Following == nil { + r.EncodeNil() + } else { + yy37 := *x.Following + yym38 := z.EncBinary() + _ = yym38 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(yy37)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym40 := z.EncBinary() + _ = yym40 + if false { + } else { + r.EncodeInt(int64(x.FriendsCount)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("friends_count")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym41 := z.EncBinary() + _ = yym41 + if false { + } else { + r.EncodeInt(int64(x.FriendsCount)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym43 := z.EncBinary() + _ = yym43 + if false { + } else { + r.EncodeBool(bool(x.GeoEnabled)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("geo_enabled")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym44 := z.EncBinary() + _ = yym44 + if false { + } else { + r.EncodeBool(bool(x.GeoEnabled)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym46 := z.EncBinary() + _ = yym46 + if false { + } else { + r.EncodeInt(int64(x.ID)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("id")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym47 := z.EncBinary() + _ = yym47 + if false { + } else { + r.EncodeInt(int64(x.ID)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym49 := z.EncBinary() + _ = yym49 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.IDStr)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("id_str")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym50 := z.EncBinary() + _ = yym50 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.IDStr)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym52 := z.EncBinary() + _ = yym52 + if false { + } else { + r.EncodeBool(bool(x.IsTranslator)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("is_translator")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym53 := z.EncBinary() + _ = yym53 + if false { + } else { + r.EncodeBool(bool(x.IsTranslator)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym55 := z.EncBinary() + _ = yym55 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.Lang)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("lang")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym56 := z.EncBinary() + _ = yym56 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.Lang)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym58 := z.EncBinary() + _ = yym58 + if false { + } else { + r.EncodeInt(int64(x.ListedCount)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("listed_count")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym59 := z.EncBinary() + _ = yym59 + if false { + } else { + r.EncodeInt(int64(x.ListedCount)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym61 := z.EncBinary() + _ = yym61 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.Location)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("location")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym62 := z.EncBinary() + _ = yym62 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.Location)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym64 := z.EncBinary() + _ = yym64 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.Name)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym65 := z.EncBinary() + _ = yym65 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.Name)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + if x.Notifications == nil { + r.EncodeNil() + } else { + yy67 := *x.Notifications + yym68 := z.EncBinary() + _ = yym68 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(yy67)) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("notifications")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + if x.Notifications == nil { + r.EncodeNil() + } else { + yy69 := *x.Notifications + yym70 := z.EncBinary() + _ = yym70 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(yy69)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym72 := z.EncBinary() + _ = yym72 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.ProfileBackgroundColor)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("profile_background_color")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym73 := z.EncBinary() + _ = yym73 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.ProfileBackgroundColor)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym75 := z.EncBinary() + _ = yym75 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.ProfileBackgroundImageURL)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("profile_background_image_url")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym76 := z.EncBinary() + _ = yym76 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.ProfileBackgroundImageURL)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym78 := z.EncBinary() + _ = yym78 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.ProfileBackgroundImageURLHTTPS)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("profile_background_image_url_https")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym79 := z.EncBinary() + _ = yym79 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.ProfileBackgroundImageURLHTTPS)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym81 := z.EncBinary() + _ = yym81 + if false { + } else { + r.EncodeBool(bool(x.ProfileBackgroundTile)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("profile_background_tile")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym82 := z.EncBinary() + _ = yym82 + if false { + } else { + r.EncodeBool(bool(x.ProfileBackgroundTile)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym84 := z.EncBinary() + _ = yym84 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.ProfileImageURL)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("profile_image_url")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym85 := z.EncBinary() + _ = yym85 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.ProfileImageURL)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym87 := z.EncBinary() + _ = yym87 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.ProfileImageURLHTTPS)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("profile_image_url_https")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym88 := z.EncBinary() + _ = yym88 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.ProfileImageURLHTTPS)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym90 := z.EncBinary() + _ = yym90 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.ProfileLinkColor)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("profile_link_color")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym91 := z.EncBinary() + _ = yym91 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.ProfileLinkColor)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym93 := z.EncBinary() + _ = yym93 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.ProfileSidebarBorderColor)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("profile_sidebar_border_color")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym94 := z.EncBinary() + _ = yym94 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.ProfileSidebarBorderColor)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym96 := z.EncBinary() + _ = yym96 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.ProfileSidebarFillColor)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("profile_sidebar_fill_color")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym97 := z.EncBinary() + _ = yym97 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.ProfileSidebarFillColor)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym99 := z.EncBinary() + _ = yym99 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.ProfileTextColor)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("profile_text_color")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym100 := z.EncBinary() + _ = yym100 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.ProfileTextColor)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym102 := z.EncBinary() + _ = yym102 + if false { + } else { + r.EncodeBool(bool(x.ProfileUseBackgroundImage)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("profile_use_background_image")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym103 := z.EncBinary() + _ = yym103 + if false { + } else { + r.EncodeBool(bool(x.ProfileUseBackgroundImage)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym105 := z.EncBinary() + _ = yym105 + if false { + } else { + r.EncodeBool(bool(x.Protected)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("protected")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym106 := z.EncBinary() + _ = yym106 + if false { + } else { + r.EncodeBool(bool(x.Protected)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym108 := z.EncBinary() + _ = yym108 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.ScreenName)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("screen_name")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym109 := z.EncBinary() + _ = yym109 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.ScreenName)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym111 := z.EncBinary() + _ = yym111 + if false { + } else { + r.EncodeBool(bool(x.ShowAllInlineMedia)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("show_all_inline_media")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym112 := z.EncBinary() + _ = yym112 + if false { + } else { + r.EncodeBool(bool(x.ShowAllInlineMedia)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym114 := z.EncBinary() + _ = yym114 + if false { + } else { + r.EncodeInt(int64(x.StatusesCount)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("statuses_count")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym115 := z.EncBinary() + _ = yym115 + if false { + } else { + r.EncodeInt(int64(x.StatusesCount)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym117 := z.EncBinary() + _ = yym117 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.TimeZone)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("time_zone")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym118 := z.EncBinary() + _ = yym118 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.TimeZone)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + if x.URL == nil { + r.EncodeNil() + } else { + yy120 := *x.URL + yym121 := z.EncBinary() + _ = yym121 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(yy120)) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("url")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + if x.URL == nil { + r.EncodeNil() + } else { + yy122 := *x.URL + yym123 := z.EncBinary() + _ = yym123 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(yy122)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym125 := z.EncBinary() + _ = yym125 + if false { + } else { + r.EncodeInt(int64(x.UtcOffset)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("utc_offset")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym126 := z.EncBinary() + _ = yym126 + if false { + } else { + r.EncodeInt(int64(x.UtcOffset)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym128 := z.EncBinary() + _ = yym128 + if false { + } else { + r.EncodeBool(bool(x.Verified)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("verified")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym129 := z.EncBinary() + _ = yym129 + if false { + } else { + r.EncodeBool(bool(x.Verified)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayEnd9225) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd9225) + } + } + } +} + +func (x *User) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1 := z.DecBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap9225 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd9225) + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray9225 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr9225) + } + } +} + +func (x *User) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3Slc + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey9225) + yys3Slc = r.DecodeBytes(yys3Slc, true, true) + yys3SlcHdr := codecSelferUnsafeString9225{uintptr(unsafe.Pointer(&yys3Slc[0])), len(yys3Slc)} + yys3 := *(*string)(unsafe.Pointer(&yys3SlcHdr)) + z.DecSendContainerState(codecSelfer_containerMapValue9225) + switch yys3 { + case "contributors_enabled": + if r.TryDecodeAsNil() { + x.ContributorsEnabled = false + } else { + yyv4 := &x.ContributorsEnabled + yym5 := z.DecBinary() + _ = yym5 + if false { + } else { + *((*bool)(yyv4)) = r.DecodeBool() + } + } + case "created_at": + if r.TryDecodeAsNil() { + x.CreatedAt = "" + } else { + yyv6 := &x.CreatedAt + yym7 := z.DecBinary() + _ = yym7 + if false { + } else { + *((*string)(yyv6)) = r.DecodeString() + } + } + case "default_profile": + if r.TryDecodeAsNil() { + x.DefaultProfile = false + } else { + yyv8 := &x.DefaultProfile + yym9 := z.DecBinary() + _ = yym9 + if false { + } else { + *((*bool)(yyv8)) = r.DecodeBool() + } + } + case "default_profile_image": + if r.TryDecodeAsNil() { + x.DefaultProfileImage = false + } else { + yyv10 := &x.DefaultProfileImage + yym11 := z.DecBinary() + _ = yym11 + if false { + } else { + *((*bool)(yyv10)) = r.DecodeBool() + } + } + case "description": + if r.TryDecodeAsNil() { + x.Description = "" + } else { + yyv12 := &x.Description + yym13 := z.DecBinary() + _ = yym13 + if false { + } else { + *((*string)(yyv12)) = r.DecodeString() + } + } + case "entities": + if r.TryDecodeAsNil() { + x.Entities = UserEntities{} + } else { + yyv14 := &x.Entities + yyv14.CodecDecodeSelf(d) + } + case "favourites_count": + if r.TryDecodeAsNil() { + x.FavouritesCount = 0 + } else { + yyv15 := &x.FavouritesCount + yym16 := z.DecBinary() + _ = yym16 + if false { + } else { + *((*int)(yyv15)) = int(r.DecodeInt(codecSelferBitsize9225)) + } + } + case "follow_request_sent": + if r.TryDecodeAsNil() { + if x.FollowRequestSent != nil { + x.FollowRequestSent = nil + } + } else { + if x.FollowRequestSent == nil { + x.FollowRequestSent = new(string) + } + yym18 := z.DecBinary() + _ = yym18 + if false { + } else { + *((*string)(x.FollowRequestSent)) = r.DecodeString() + } + } + case "followers_count": + if r.TryDecodeAsNil() { + x.FollowersCount = 0 + } else { + yyv19 := &x.FollowersCount + yym20 := z.DecBinary() + _ = yym20 + if false { + } else { + *((*int)(yyv19)) = int(r.DecodeInt(codecSelferBitsize9225)) + } + } + case "following": + if r.TryDecodeAsNil() { + if x.Following != nil { + x.Following = nil + } + } else { + if x.Following == nil { + x.Following = new(string) + } + yym22 := z.DecBinary() + _ = yym22 + if false { + } else { + *((*string)(x.Following)) = r.DecodeString() + } + } + case "friends_count": + if r.TryDecodeAsNil() { + x.FriendsCount = 0 + } else { + yyv23 := &x.FriendsCount + yym24 := z.DecBinary() + _ = yym24 + if false { + } else { + *((*int)(yyv23)) = int(r.DecodeInt(codecSelferBitsize9225)) + } + } + case "geo_enabled": + if r.TryDecodeAsNil() { + x.GeoEnabled = false + } else { + yyv25 := &x.GeoEnabled + yym26 := z.DecBinary() + _ = yym26 + if false { + } else { + *((*bool)(yyv25)) = r.DecodeBool() + } + } + case "id": + if r.TryDecodeAsNil() { + x.ID = 0 + } else { + yyv27 := &x.ID + yym28 := z.DecBinary() + _ = yym28 + if false { + } else { + *((*int)(yyv27)) = int(r.DecodeInt(codecSelferBitsize9225)) + } + } + case "id_str": + if r.TryDecodeAsNil() { + x.IDStr = "" + } else { + yyv29 := &x.IDStr + yym30 := z.DecBinary() + _ = yym30 + if false { + } else { + *((*string)(yyv29)) = r.DecodeString() + } + } + case "is_translator": + if r.TryDecodeAsNil() { + x.IsTranslator = false + } else { + yyv31 := &x.IsTranslator + yym32 := z.DecBinary() + _ = yym32 + if false { + } else { + *((*bool)(yyv31)) = r.DecodeBool() + } + } + case "lang": + if r.TryDecodeAsNil() { + x.Lang = "" + } else { + yyv33 := &x.Lang + yym34 := z.DecBinary() + _ = yym34 + if false { + } else { + *((*string)(yyv33)) = r.DecodeString() + } + } + case "listed_count": + if r.TryDecodeAsNil() { + x.ListedCount = 0 + } else { + yyv35 := &x.ListedCount + yym36 := z.DecBinary() + _ = yym36 + if false { + } else { + *((*int)(yyv35)) = int(r.DecodeInt(codecSelferBitsize9225)) + } + } + case "location": + if r.TryDecodeAsNil() { + x.Location = "" + } else { + yyv37 := &x.Location + yym38 := z.DecBinary() + _ = yym38 + if false { + } else { + *((*string)(yyv37)) = r.DecodeString() + } + } + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + yyv39 := &x.Name + yym40 := z.DecBinary() + _ = yym40 + if false { + } else { + *((*string)(yyv39)) = r.DecodeString() + } + } + case "notifications": + if r.TryDecodeAsNil() { + if x.Notifications != nil { + x.Notifications = nil + } + } else { + if x.Notifications == nil { + x.Notifications = new(string) + } + yym42 := z.DecBinary() + _ = yym42 + if false { + } else { + *((*string)(x.Notifications)) = r.DecodeString() + } + } + case "profile_background_color": + if r.TryDecodeAsNil() { + x.ProfileBackgroundColor = "" + } else { + yyv43 := &x.ProfileBackgroundColor + yym44 := z.DecBinary() + _ = yym44 + if false { + } else { + *((*string)(yyv43)) = r.DecodeString() + } + } + case "profile_background_image_url": + if r.TryDecodeAsNil() { + x.ProfileBackgroundImageURL = "" + } else { + yyv45 := &x.ProfileBackgroundImageURL + yym46 := z.DecBinary() + _ = yym46 + if false { + } else { + *((*string)(yyv45)) = r.DecodeString() + } + } + case "profile_background_image_url_https": + if r.TryDecodeAsNil() { + x.ProfileBackgroundImageURLHTTPS = "" + } else { + yyv47 := &x.ProfileBackgroundImageURLHTTPS + yym48 := z.DecBinary() + _ = yym48 + if false { + } else { + *((*string)(yyv47)) = r.DecodeString() + } + } + case "profile_background_tile": + if r.TryDecodeAsNil() { + x.ProfileBackgroundTile = false + } else { + yyv49 := &x.ProfileBackgroundTile + yym50 := z.DecBinary() + _ = yym50 + if false { + } else { + *((*bool)(yyv49)) = r.DecodeBool() + } + } + case "profile_image_url": + if r.TryDecodeAsNil() { + x.ProfileImageURL = "" + } else { + yyv51 := &x.ProfileImageURL + yym52 := z.DecBinary() + _ = yym52 + if false { + } else { + *((*string)(yyv51)) = r.DecodeString() + } + } + case "profile_image_url_https": + if r.TryDecodeAsNil() { + x.ProfileImageURLHTTPS = "" + } else { + yyv53 := &x.ProfileImageURLHTTPS + yym54 := z.DecBinary() + _ = yym54 + if false { + } else { + *((*string)(yyv53)) = r.DecodeString() + } + } + case "profile_link_color": + if r.TryDecodeAsNil() { + x.ProfileLinkColor = "" + } else { + yyv55 := &x.ProfileLinkColor + yym56 := z.DecBinary() + _ = yym56 + if false { + } else { + *((*string)(yyv55)) = r.DecodeString() + } + } + case "profile_sidebar_border_color": + if r.TryDecodeAsNil() { + x.ProfileSidebarBorderColor = "" + } else { + yyv57 := &x.ProfileSidebarBorderColor + yym58 := z.DecBinary() + _ = yym58 + if false { + } else { + *((*string)(yyv57)) = r.DecodeString() + } + } + case "profile_sidebar_fill_color": + if r.TryDecodeAsNil() { + x.ProfileSidebarFillColor = "" + } else { + yyv59 := &x.ProfileSidebarFillColor + yym60 := z.DecBinary() + _ = yym60 + if false { + } else { + *((*string)(yyv59)) = r.DecodeString() + } + } + case "profile_text_color": + if r.TryDecodeAsNil() { + x.ProfileTextColor = "" + } else { + yyv61 := &x.ProfileTextColor + yym62 := z.DecBinary() + _ = yym62 + if false { + } else { + *((*string)(yyv61)) = r.DecodeString() + } + } + case "profile_use_background_image": + if r.TryDecodeAsNil() { + x.ProfileUseBackgroundImage = false + } else { + yyv63 := &x.ProfileUseBackgroundImage + yym64 := z.DecBinary() + _ = yym64 + if false { + } else { + *((*bool)(yyv63)) = r.DecodeBool() + } + } + case "protected": + if r.TryDecodeAsNil() { + x.Protected = false + } else { + yyv65 := &x.Protected + yym66 := z.DecBinary() + _ = yym66 + if false { + } else { + *((*bool)(yyv65)) = r.DecodeBool() + } + } + case "screen_name": + if r.TryDecodeAsNil() { + x.ScreenName = "" + } else { + yyv67 := &x.ScreenName + yym68 := z.DecBinary() + _ = yym68 + if false { + } else { + *((*string)(yyv67)) = r.DecodeString() + } + } + case "show_all_inline_media": + if r.TryDecodeAsNil() { + x.ShowAllInlineMedia = false + } else { + yyv69 := &x.ShowAllInlineMedia + yym70 := z.DecBinary() + _ = yym70 + if false { + } else { + *((*bool)(yyv69)) = r.DecodeBool() + } + } + case "statuses_count": + if r.TryDecodeAsNil() { + x.StatusesCount = 0 + } else { + yyv71 := &x.StatusesCount + yym72 := z.DecBinary() + _ = yym72 + if false { + } else { + *((*int)(yyv71)) = int(r.DecodeInt(codecSelferBitsize9225)) + } + } + case "time_zone": + if r.TryDecodeAsNil() { + x.TimeZone = "" + } else { + yyv73 := &x.TimeZone + yym74 := z.DecBinary() + _ = yym74 + if false { + } else { + *((*string)(yyv73)) = r.DecodeString() + } + } + case "url": + if r.TryDecodeAsNil() { + if x.URL != nil { + x.URL = nil + } + } else { + if x.URL == nil { + x.URL = new(string) + } + yym76 := z.DecBinary() + _ = yym76 + if false { + } else { + *((*string)(x.URL)) = r.DecodeString() + } + } + case "utc_offset": + if r.TryDecodeAsNil() { + x.UtcOffset = 0 + } else { + yyv77 := &x.UtcOffset + yym78 := z.DecBinary() + _ = yym78 + if false { + } else { + *((*int)(yyv77)) = int(r.DecodeInt(codecSelferBitsize9225)) + } + } + case "verified": + if r.TryDecodeAsNil() { + x.Verified = false + } else { + yyv79 := &x.Verified + yym80 := z.DecBinary() + _ = yym80 + if false { + } else { + *((*bool)(yyv79)) = r.DecodeBool() + } + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + z.DecSendContainerState(codecSelfer_containerMapEnd9225) +} + +func (x *User) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj81 int + var yyb81 bool + var yyhl81 bool = l >= 0 + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.ContributorsEnabled = false + } else { + yyv82 := &x.ContributorsEnabled + yym83 := z.DecBinary() + _ = yym83 + if false { + } else { + *((*bool)(yyv82)) = r.DecodeBool() + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.CreatedAt = "" + } else { + yyv84 := &x.CreatedAt + yym85 := z.DecBinary() + _ = yym85 + if false { + } else { + *((*string)(yyv84)) = r.DecodeString() + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.DefaultProfile = false + } else { + yyv86 := &x.DefaultProfile + yym87 := z.DecBinary() + _ = yym87 + if false { + } else { + *((*bool)(yyv86)) = r.DecodeBool() + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.DefaultProfileImage = false + } else { + yyv88 := &x.DefaultProfileImage + yym89 := z.DecBinary() + _ = yym89 + if false { + } else { + *((*bool)(yyv88)) = r.DecodeBool() + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.Description = "" + } else { + yyv90 := &x.Description + yym91 := z.DecBinary() + _ = yym91 + if false { + } else { + *((*string)(yyv90)) = r.DecodeString() + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.Entities = UserEntities{} + } else { + yyv92 := &x.Entities + yyv92.CodecDecodeSelf(d) + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.FavouritesCount = 0 + } else { + yyv93 := &x.FavouritesCount + yym94 := z.DecBinary() + _ = yym94 + if false { + } else { + *((*int)(yyv93)) = int(r.DecodeInt(codecSelferBitsize9225)) + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + if x.FollowRequestSent != nil { + x.FollowRequestSent = nil + } + } else { + if x.FollowRequestSent == nil { + x.FollowRequestSent = new(string) + } + yym96 := z.DecBinary() + _ = yym96 + if false { + } else { + *((*string)(x.FollowRequestSent)) = r.DecodeString() + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.FollowersCount = 0 + } else { + yyv97 := &x.FollowersCount + yym98 := z.DecBinary() + _ = yym98 + if false { + } else { + *((*int)(yyv97)) = int(r.DecodeInt(codecSelferBitsize9225)) + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + if x.Following != nil { + x.Following = nil + } + } else { + if x.Following == nil { + x.Following = new(string) + } + yym100 := z.DecBinary() + _ = yym100 + if false { + } else { + *((*string)(x.Following)) = r.DecodeString() + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.FriendsCount = 0 + } else { + yyv101 := &x.FriendsCount + yym102 := z.DecBinary() + _ = yym102 + if false { + } else { + *((*int)(yyv101)) = int(r.DecodeInt(codecSelferBitsize9225)) + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.GeoEnabled = false + } else { + yyv103 := &x.GeoEnabled + yym104 := z.DecBinary() + _ = yym104 + if false { + } else { + *((*bool)(yyv103)) = r.DecodeBool() + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.ID = 0 + } else { + yyv105 := &x.ID + yym106 := z.DecBinary() + _ = yym106 + if false { + } else { + *((*int)(yyv105)) = int(r.DecodeInt(codecSelferBitsize9225)) + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.IDStr = "" + } else { + yyv107 := &x.IDStr + yym108 := z.DecBinary() + _ = yym108 + if false { + } else { + *((*string)(yyv107)) = r.DecodeString() + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.IsTranslator = false + } else { + yyv109 := &x.IsTranslator + yym110 := z.DecBinary() + _ = yym110 + if false { + } else { + *((*bool)(yyv109)) = r.DecodeBool() + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.Lang = "" + } else { + yyv111 := &x.Lang + yym112 := z.DecBinary() + _ = yym112 + if false { + } else { + *((*string)(yyv111)) = r.DecodeString() + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.ListedCount = 0 + } else { + yyv113 := &x.ListedCount + yym114 := z.DecBinary() + _ = yym114 + if false { + } else { + *((*int)(yyv113)) = int(r.DecodeInt(codecSelferBitsize9225)) + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.Location = "" + } else { + yyv115 := &x.Location + yym116 := z.DecBinary() + _ = yym116 + if false { + } else { + *((*string)(yyv115)) = r.DecodeString() + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + yyv117 := &x.Name + yym118 := z.DecBinary() + _ = yym118 + if false { + } else { + *((*string)(yyv117)) = r.DecodeString() + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + if x.Notifications != nil { + x.Notifications = nil + } + } else { + if x.Notifications == nil { + x.Notifications = new(string) + } + yym120 := z.DecBinary() + _ = yym120 + if false { + } else { + *((*string)(x.Notifications)) = r.DecodeString() + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.ProfileBackgroundColor = "" + } else { + yyv121 := &x.ProfileBackgroundColor + yym122 := z.DecBinary() + _ = yym122 + if false { + } else { + *((*string)(yyv121)) = r.DecodeString() + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.ProfileBackgroundImageURL = "" + } else { + yyv123 := &x.ProfileBackgroundImageURL + yym124 := z.DecBinary() + _ = yym124 + if false { + } else { + *((*string)(yyv123)) = r.DecodeString() + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.ProfileBackgroundImageURLHTTPS = "" + } else { + yyv125 := &x.ProfileBackgroundImageURLHTTPS + yym126 := z.DecBinary() + _ = yym126 + if false { + } else { + *((*string)(yyv125)) = r.DecodeString() + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.ProfileBackgroundTile = false + } else { + yyv127 := &x.ProfileBackgroundTile + yym128 := z.DecBinary() + _ = yym128 + if false { + } else { + *((*bool)(yyv127)) = r.DecodeBool() + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.ProfileImageURL = "" + } else { + yyv129 := &x.ProfileImageURL + yym130 := z.DecBinary() + _ = yym130 + if false { + } else { + *((*string)(yyv129)) = r.DecodeString() + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.ProfileImageURLHTTPS = "" + } else { + yyv131 := &x.ProfileImageURLHTTPS + yym132 := z.DecBinary() + _ = yym132 + if false { + } else { + *((*string)(yyv131)) = r.DecodeString() + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.ProfileLinkColor = "" + } else { + yyv133 := &x.ProfileLinkColor + yym134 := z.DecBinary() + _ = yym134 + if false { + } else { + *((*string)(yyv133)) = r.DecodeString() + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.ProfileSidebarBorderColor = "" + } else { + yyv135 := &x.ProfileSidebarBorderColor + yym136 := z.DecBinary() + _ = yym136 + if false { + } else { + *((*string)(yyv135)) = r.DecodeString() + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.ProfileSidebarFillColor = "" + } else { + yyv137 := &x.ProfileSidebarFillColor + yym138 := z.DecBinary() + _ = yym138 + if false { + } else { + *((*string)(yyv137)) = r.DecodeString() + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.ProfileTextColor = "" + } else { + yyv139 := &x.ProfileTextColor + yym140 := z.DecBinary() + _ = yym140 + if false { + } else { + *((*string)(yyv139)) = r.DecodeString() + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.ProfileUseBackgroundImage = false + } else { + yyv141 := &x.ProfileUseBackgroundImage + yym142 := z.DecBinary() + _ = yym142 + if false { + } else { + *((*bool)(yyv141)) = r.DecodeBool() + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.Protected = false + } else { + yyv143 := &x.Protected + yym144 := z.DecBinary() + _ = yym144 + if false { + } else { + *((*bool)(yyv143)) = r.DecodeBool() + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.ScreenName = "" + } else { + yyv145 := &x.ScreenName + yym146 := z.DecBinary() + _ = yym146 + if false { + } else { + *((*string)(yyv145)) = r.DecodeString() + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.ShowAllInlineMedia = false + } else { + yyv147 := &x.ShowAllInlineMedia + yym148 := z.DecBinary() + _ = yym148 + if false { + } else { + *((*bool)(yyv147)) = r.DecodeBool() + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.StatusesCount = 0 + } else { + yyv149 := &x.StatusesCount + yym150 := z.DecBinary() + _ = yym150 + if false { + } else { + *((*int)(yyv149)) = int(r.DecodeInt(codecSelferBitsize9225)) + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.TimeZone = "" + } else { + yyv151 := &x.TimeZone + yym152 := z.DecBinary() + _ = yym152 + if false { + } else { + *((*string)(yyv151)) = r.DecodeString() + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + if x.URL != nil { + x.URL = nil + } + } else { + if x.URL == nil { + x.URL = new(string) + } + yym154 := z.DecBinary() + _ = yym154 + if false { + } else { + *((*string)(x.URL)) = r.DecodeString() + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.UtcOffset = 0 + } else { + yyv155 := &x.UtcOffset + yym156 := z.DecBinary() + _ = yym156 + if false { + } else { + *((*int)(yyv155)) = int(r.DecodeInt(codecSelferBitsize9225)) + } + } + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.Verified = false + } else { + yyv157 := &x.Verified + yym158 := z.DecBinary() + _ = yym158 + if false { + } else { + *((*bool)(yyv157)) = r.DecodeBool() + } + } + for { + yyj81++ + if yyhl81 { + yyb81 = yyj81 > l + } else { + yyb81 = r.CheckBreak() + } + if yyb81 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + z.DecStructFieldNotFound(yyj81-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) +} + +func (x *StatusMetadata) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1 := z.EncBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + var yyq2 [2]bool + _, _, _ = yysep2, yyq2, yy2arr2 + const yyr2 bool = false + var yynn2 int + if yyr2 || yy2arr2 { + r.EncodeArrayStart(2) + } else { + yynn2 = 2 + for _, b := range yyq2 { + if b { + yynn2++ + } + } + r.EncodeMapStart(yynn2) + yynn2 = 0 + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym4 := z.EncBinary() + _ = yym4 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.IsoLanguageCode)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("iso_language_code")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym5 := z.EncBinary() + _ = yym5 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.IsoLanguageCode)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym7 := z.EncBinary() + _ = yym7 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.ResultType)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("result_type")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym8 := z.EncBinary() + _ = yym8 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.ResultType)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayEnd9225) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd9225) + } + } + } +} + +func (x *StatusMetadata) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1 := z.DecBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap9225 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd9225) + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray9225 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr9225) + } + } +} + +func (x *StatusMetadata) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3Slc + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey9225) + yys3Slc = r.DecodeBytes(yys3Slc, true, true) + yys3SlcHdr := codecSelferUnsafeString9225{uintptr(unsafe.Pointer(&yys3Slc[0])), len(yys3Slc)} + yys3 := *(*string)(unsafe.Pointer(&yys3SlcHdr)) + z.DecSendContainerState(codecSelfer_containerMapValue9225) + switch yys3 { + case "iso_language_code": + if r.TryDecodeAsNil() { + x.IsoLanguageCode = "" + } else { + yyv4 := &x.IsoLanguageCode + yym5 := z.DecBinary() + _ = yym5 + if false { + } else { + *((*string)(yyv4)) = r.DecodeString() + } + } + case "result_type": + if r.TryDecodeAsNil() { + x.ResultType = "" + } else { + yyv6 := &x.ResultType + yym7 := z.DecBinary() + _ = yym7 + if false { + } else { + *((*string)(yyv6)) = r.DecodeString() + } + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + z.DecSendContainerState(codecSelfer_containerMapEnd9225) +} + +func (x *StatusMetadata) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj8 int + var yyb8 bool + var yyhl8 bool = l >= 0 + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l + } else { + yyb8 = r.CheckBreak() + } + if yyb8 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.IsoLanguageCode = "" + } else { + yyv9 := &x.IsoLanguageCode + yym10 := z.DecBinary() + _ = yym10 + if false { + } else { + *((*string)(yyv9)) = r.DecodeString() + } + } + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l + } else { + yyb8 = r.CheckBreak() + } + if yyb8 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.ResultType = "" + } else { + yyv11 := &x.ResultType + yym12 := z.DecBinary() + _ = yym12 + if false { + } else { + *((*string)(yyv11)) = r.DecodeString() + } + } + for { + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l + } else { + yyb8 = r.CheckBreak() + } + if yyb8 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + z.DecStructFieldNotFound(yyj8-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) +} + +func (x *Status) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1 := z.EncBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + var yyq2 [21]bool + _, _, _ = yysep2, yyq2, yy2arr2 + const yyr2 bool = false + var yynn2 int + if yyr2 || yy2arr2 { + r.EncodeArrayStart(21) + } else { + yynn2 = 21 + for _, b := range yyq2 { + if b { + yynn2++ + } + } + r.EncodeMapStart(yynn2) + yynn2 = 0 + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + if x.Contributors == nil { + r.EncodeNil() + } else { + yy4 := *x.Contributors + yym5 := z.EncBinary() + _ = yym5 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(yy4)) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("contributors")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + if x.Contributors == nil { + r.EncodeNil() + } else { + yy6 := *x.Contributors + yym7 := z.EncBinary() + _ = yym7 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(yy6)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + if x.Coordinates == nil { + r.EncodeNil() + } else { + yy9 := *x.Coordinates + yym10 := z.EncBinary() + _ = yym10 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(yy9)) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("coordinates")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + if x.Coordinates == nil { + r.EncodeNil() + } else { + yy11 := *x.Coordinates + yym12 := z.EncBinary() + _ = yym12 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(yy11)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym14 := z.EncBinary() + _ = yym14 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.CreatedAt)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("created_at")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym15 := z.EncBinary() + _ = yym15 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.CreatedAt)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yy17 := &x.Entities + yy17.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("entities")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yy19 := &x.Entities + yy19.CodecEncodeSelf(e) + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym22 := z.EncBinary() + _ = yym22 + if false { + } else { + r.EncodeBool(bool(x.Favorited)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("favorited")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym23 := z.EncBinary() + _ = yym23 + if false { + } else { + r.EncodeBool(bool(x.Favorited)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + if x.Geo == nil { + r.EncodeNil() + } else { + yy25 := *x.Geo + yym26 := z.EncBinary() + _ = yym26 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(yy25)) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("geo")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + if x.Geo == nil { + r.EncodeNil() + } else { + yy27 := *x.Geo + yym28 := z.EncBinary() + _ = yym28 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(yy27)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym30 := z.EncBinary() + _ = yym30 + if false { + } else { + r.EncodeInt(int64(x.ID)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("id")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym31 := z.EncBinary() + _ = yym31 + if false { + } else { + r.EncodeInt(int64(x.ID)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym33 := z.EncBinary() + _ = yym33 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.IDStr)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("id_str")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym34 := z.EncBinary() + _ = yym34 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.IDStr)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + if x.InReplyToScreenName == nil { + r.EncodeNil() + } else { + yy36 := *x.InReplyToScreenName + yym37 := z.EncBinary() + _ = yym37 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(yy36)) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("in_reply_to_screen_name")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + if x.InReplyToScreenName == nil { + r.EncodeNil() + } else { + yy38 := *x.InReplyToScreenName + yym39 := z.EncBinary() + _ = yym39 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(yy38)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + if x.InReplyToStatusID == nil { + r.EncodeNil() + } else { + yy41 := *x.InReplyToStatusID + yym42 := z.EncBinary() + _ = yym42 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(yy41)) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("in_reply_to_status_id")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + if x.InReplyToStatusID == nil { + r.EncodeNil() + } else { + yy43 := *x.InReplyToStatusID + yym44 := z.EncBinary() + _ = yym44 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(yy43)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + if x.InReplyToStatusIDStr == nil { + r.EncodeNil() + } else { + yy46 := *x.InReplyToStatusIDStr + yym47 := z.EncBinary() + _ = yym47 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(yy46)) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("in_reply_to_status_id_str")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + if x.InReplyToStatusIDStr == nil { + r.EncodeNil() + } else { + yy48 := *x.InReplyToStatusIDStr + yym49 := z.EncBinary() + _ = yym49 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(yy48)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + if x.InReplyToUserID == nil { + r.EncodeNil() + } else { + yy51 := *x.InReplyToUserID + yym52 := z.EncBinary() + _ = yym52 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(yy51)) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("in_reply_to_user_id")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + if x.InReplyToUserID == nil { + r.EncodeNil() + } else { + yy53 := *x.InReplyToUserID + yym54 := z.EncBinary() + _ = yym54 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(yy53)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + if x.InReplyToUserIDStr == nil { + r.EncodeNil() + } else { + yy56 := *x.InReplyToUserIDStr + yym57 := z.EncBinary() + _ = yym57 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(yy56)) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("in_reply_to_user_id_str")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + if x.InReplyToUserIDStr == nil { + r.EncodeNil() + } else { + yy58 := *x.InReplyToUserIDStr + yym59 := z.EncBinary() + _ = yym59 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(yy58)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yy61 := &x.Metadata + yy61.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yy63 := &x.Metadata + yy63.CodecEncodeSelf(e) + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + if x.Place == nil { + r.EncodeNil() + } else { + yy66 := *x.Place + yym67 := z.EncBinary() + _ = yym67 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(yy66)) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("place")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + if x.Place == nil { + r.EncodeNil() + } else { + yy68 := *x.Place + yym69 := z.EncBinary() + _ = yym69 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(yy68)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym71 := z.EncBinary() + _ = yym71 + if false { + } else { + r.EncodeInt(int64(x.RetweetCount)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("retweet_count")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym72 := z.EncBinary() + _ = yym72 + if false { + } else { + r.EncodeInt(int64(x.RetweetCount)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym74 := z.EncBinary() + _ = yym74 + if false { + } else { + r.EncodeBool(bool(x.Retweeted)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("retweeted")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym75 := z.EncBinary() + _ = yym75 + if false { + } else { + r.EncodeBool(bool(x.Retweeted)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym77 := z.EncBinary() + _ = yym77 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.Source)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("source")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym78 := z.EncBinary() + _ = yym78 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.Source)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym80 := z.EncBinary() + _ = yym80 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.Text)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("text")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym81 := z.EncBinary() + _ = yym81 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(x.Text)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yym83 := z.EncBinary() + _ = yym83 + if false { + } else { + r.EncodeBool(bool(x.Truncated)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("truncated")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yym84 := z.EncBinary() + _ = yym84 + if false { + } else { + r.EncodeBool(bool(x.Truncated)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yy86 := &x.User + yy86.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("user")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yy88 := &x.User + yy88.CodecEncodeSelf(e) + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayEnd9225) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd9225) + } + } + } +} + +func (x *Status) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1 := z.DecBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap9225 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd9225) + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray9225 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr9225) + } + } +} + +func (x *Status) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3Slc + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey9225) + yys3Slc = r.DecodeBytes(yys3Slc, true, true) + yys3SlcHdr := codecSelferUnsafeString9225{uintptr(unsafe.Pointer(&yys3Slc[0])), len(yys3Slc)} + yys3 := *(*string)(unsafe.Pointer(&yys3SlcHdr)) + z.DecSendContainerState(codecSelfer_containerMapValue9225) + switch yys3 { + case "contributors": + if r.TryDecodeAsNil() { + if x.Contributors != nil { + x.Contributors = nil + } + } else { + if x.Contributors == nil { + x.Contributors = new(string) + } + yym5 := z.DecBinary() + _ = yym5 + if false { + } else { + *((*string)(x.Contributors)) = r.DecodeString() + } + } + case "coordinates": + if r.TryDecodeAsNil() { + if x.Coordinates != nil { + x.Coordinates = nil + } + } else { + if x.Coordinates == nil { + x.Coordinates = new(string) + } + yym7 := z.DecBinary() + _ = yym7 + if false { + } else { + *((*string)(x.Coordinates)) = r.DecodeString() + } + } + case "created_at": + if r.TryDecodeAsNil() { + x.CreatedAt = "" + } else { + yyv8 := &x.CreatedAt + yym9 := z.DecBinary() + _ = yym9 + if false { + } else { + *((*string)(yyv8)) = r.DecodeString() + } + } + case "entities": + if r.TryDecodeAsNil() { + x.Entities = Entities{} + } else { + yyv10 := &x.Entities + yyv10.CodecDecodeSelf(d) + } + case "favorited": + if r.TryDecodeAsNil() { + x.Favorited = false + } else { + yyv11 := &x.Favorited + yym12 := z.DecBinary() + _ = yym12 + if false { + } else { + *((*bool)(yyv11)) = r.DecodeBool() + } + } + case "geo": + if r.TryDecodeAsNil() { + if x.Geo != nil { + x.Geo = nil + } + } else { + if x.Geo == nil { + x.Geo = new(string) + } + yym14 := z.DecBinary() + _ = yym14 + if false { + } else { + *((*string)(x.Geo)) = r.DecodeString() + } + } + case "id": + if r.TryDecodeAsNil() { + x.ID = 0 + } else { + yyv15 := &x.ID + yym16 := z.DecBinary() + _ = yym16 + if false { + } else { + *((*int64)(yyv15)) = int64(r.DecodeInt(64)) + } + } + case "id_str": + if r.TryDecodeAsNil() { + x.IDStr = "" + } else { + yyv17 := &x.IDStr + yym18 := z.DecBinary() + _ = yym18 + if false { + } else { + *((*string)(yyv17)) = r.DecodeString() + } + } + case "in_reply_to_screen_name": + if r.TryDecodeAsNil() { + if x.InReplyToScreenName != nil { + x.InReplyToScreenName = nil + } + } else { + if x.InReplyToScreenName == nil { + x.InReplyToScreenName = new(string) + } + yym20 := z.DecBinary() + _ = yym20 + if false { + } else { + *((*string)(x.InReplyToScreenName)) = r.DecodeString() + } + } + case "in_reply_to_status_id": + if r.TryDecodeAsNil() { + if x.InReplyToStatusID != nil { + x.InReplyToStatusID = nil + } + } else { + if x.InReplyToStatusID == nil { + x.InReplyToStatusID = new(string) + } + yym22 := z.DecBinary() + _ = yym22 + if false { + } else { + *((*string)(x.InReplyToStatusID)) = r.DecodeString() + } + } + case "in_reply_to_status_id_str": + if r.TryDecodeAsNil() { + if x.InReplyToStatusIDStr != nil { + x.InReplyToStatusIDStr = nil + } + } else { + if x.InReplyToStatusIDStr == nil { + x.InReplyToStatusIDStr = new(string) + } + yym24 := z.DecBinary() + _ = yym24 + if false { + } else { + *((*string)(x.InReplyToStatusIDStr)) = r.DecodeString() + } + } + case "in_reply_to_user_id": + if r.TryDecodeAsNil() { + if x.InReplyToUserID != nil { + x.InReplyToUserID = nil + } + } else { + if x.InReplyToUserID == nil { + x.InReplyToUserID = new(string) + } + yym26 := z.DecBinary() + _ = yym26 + if false { + } else { + *((*string)(x.InReplyToUserID)) = r.DecodeString() + } + } + case "in_reply_to_user_id_str": + if r.TryDecodeAsNil() { + if x.InReplyToUserIDStr != nil { + x.InReplyToUserIDStr = nil + } + } else { + if x.InReplyToUserIDStr == nil { + x.InReplyToUserIDStr = new(string) + } + yym28 := z.DecBinary() + _ = yym28 + if false { + } else { + *((*string)(x.InReplyToUserIDStr)) = r.DecodeString() + } + } + case "metadata": + if r.TryDecodeAsNil() { + x.Metadata = StatusMetadata{} + } else { + yyv29 := &x.Metadata + yyv29.CodecDecodeSelf(d) + } + case "place": + if r.TryDecodeAsNil() { + if x.Place != nil { + x.Place = nil + } + } else { + if x.Place == nil { + x.Place = new(string) + } + yym31 := z.DecBinary() + _ = yym31 + if false { + } else { + *((*string)(x.Place)) = r.DecodeString() + } + } + case "retweet_count": + if r.TryDecodeAsNil() { + x.RetweetCount = 0 + } else { + yyv32 := &x.RetweetCount + yym33 := z.DecBinary() + _ = yym33 + if false { + } else { + *((*int)(yyv32)) = int(r.DecodeInt(codecSelferBitsize9225)) + } + } + case "retweeted": + if r.TryDecodeAsNil() { + x.Retweeted = false + } else { + yyv34 := &x.Retweeted + yym35 := z.DecBinary() + _ = yym35 + if false { + } else { + *((*bool)(yyv34)) = r.DecodeBool() + } + } + case "source": + if r.TryDecodeAsNil() { + x.Source = "" + } else { + yyv36 := &x.Source + yym37 := z.DecBinary() + _ = yym37 + if false { + } else { + *((*string)(yyv36)) = r.DecodeString() + } + } + case "text": + if r.TryDecodeAsNil() { + x.Text = "" + } else { + yyv38 := &x.Text + yym39 := z.DecBinary() + _ = yym39 + if false { + } else { + *((*string)(yyv38)) = r.DecodeString() + } + } + case "truncated": + if r.TryDecodeAsNil() { + x.Truncated = false + } else { + yyv40 := &x.Truncated + yym41 := z.DecBinary() + _ = yym41 + if false { + } else { + *((*bool)(yyv40)) = r.DecodeBool() + } + } + case "user": + if r.TryDecodeAsNil() { + x.User = User{} + } else { + yyv42 := &x.User + yyv42.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + z.DecSendContainerState(codecSelfer_containerMapEnd9225) +} + +func (x *Status) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj43 int + var yyb43 bool + var yyhl43 bool = l >= 0 + yyj43++ + if yyhl43 { + yyb43 = yyj43 > l + } else { + yyb43 = r.CheckBreak() + } + if yyb43 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + if x.Contributors != nil { + x.Contributors = nil + } + } else { + if x.Contributors == nil { + x.Contributors = new(string) + } + yym45 := z.DecBinary() + _ = yym45 + if false { + } else { + *((*string)(x.Contributors)) = r.DecodeString() + } + } + yyj43++ + if yyhl43 { + yyb43 = yyj43 > l + } else { + yyb43 = r.CheckBreak() + } + if yyb43 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + if x.Coordinates != nil { + x.Coordinates = nil + } + } else { + if x.Coordinates == nil { + x.Coordinates = new(string) + } + yym47 := z.DecBinary() + _ = yym47 + if false { + } else { + *((*string)(x.Coordinates)) = r.DecodeString() + } + } + yyj43++ + if yyhl43 { + yyb43 = yyj43 > l + } else { + yyb43 = r.CheckBreak() + } + if yyb43 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.CreatedAt = "" + } else { + yyv48 := &x.CreatedAt + yym49 := z.DecBinary() + _ = yym49 + if false { + } else { + *((*string)(yyv48)) = r.DecodeString() + } + } + yyj43++ + if yyhl43 { + yyb43 = yyj43 > l + } else { + yyb43 = r.CheckBreak() + } + if yyb43 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.Entities = Entities{} + } else { + yyv50 := &x.Entities + yyv50.CodecDecodeSelf(d) + } + yyj43++ + if yyhl43 { + yyb43 = yyj43 > l + } else { + yyb43 = r.CheckBreak() + } + if yyb43 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.Favorited = false + } else { + yyv51 := &x.Favorited + yym52 := z.DecBinary() + _ = yym52 + if false { + } else { + *((*bool)(yyv51)) = r.DecodeBool() + } + } + yyj43++ + if yyhl43 { + yyb43 = yyj43 > l + } else { + yyb43 = r.CheckBreak() + } + if yyb43 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + if x.Geo != nil { + x.Geo = nil + } + } else { + if x.Geo == nil { + x.Geo = new(string) + } + yym54 := z.DecBinary() + _ = yym54 + if false { + } else { + *((*string)(x.Geo)) = r.DecodeString() + } + } + yyj43++ + if yyhl43 { + yyb43 = yyj43 > l + } else { + yyb43 = r.CheckBreak() + } + if yyb43 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.ID = 0 + } else { + yyv55 := &x.ID + yym56 := z.DecBinary() + _ = yym56 + if false { + } else { + *((*int64)(yyv55)) = int64(r.DecodeInt(64)) + } + } + yyj43++ + if yyhl43 { + yyb43 = yyj43 > l + } else { + yyb43 = r.CheckBreak() + } + if yyb43 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.IDStr = "" + } else { + yyv57 := &x.IDStr + yym58 := z.DecBinary() + _ = yym58 + if false { + } else { + *((*string)(yyv57)) = r.DecodeString() + } + } + yyj43++ + if yyhl43 { + yyb43 = yyj43 > l + } else { + yyb43 = r.CheckBreak() + } + if yyb43 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + if x.InReplyToScreenName != nil { + x.InReplyToScreenName = nil + } + } else { + if x.InReplyToScreenName == nil { + x.InReplyToScreenName = new(string) + } + yym60 := z.DecBinary() + _ = yym60 + if false { + } else { + *((*string)(x.InReplyToScreenName)) = r.DecodeString() + } + } + yyj43++ + if yyhl43 { + yyb43 = yyj43 > l + } else { + yyb43 = r.CheckBreak() + } + if yyb43 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + if x.InReplyToStatusID != nil { + x.InReplyToStatusID = nil + } + } else { + if x.InReplyToStatusID == nil { + x.InReplyToStatusID = new(string) + } + yym62 := z.DecBinary() + _ = yym62 + if false { + } else { + *((*string)(x.InReplyToStatusID)) = r.DecodeString() + } + } + yyj43++ + if yyhl43 { + yyb43 = yyj43 > l + } else { + yyb43 = r.CheckBreak() + } + if yyb43 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + if x.InReplyToStatusIDStr != nil { + x.InReplyToStatusIDStr = nil + } + } else { + if x.InReplyToStatusIDStr == nil { + x.InReplyToStatusIDStr = new(string) + } + yym64 := z.DecBinary() + _ = yym64 + if false { + } else { + *((*string)(x.InReplyToStatusIDStr)) = r.DecodeString() + } + } + yyj43++ + if yyhl43 { + yyb43 = yyj43 > l + } else { + yyb43 = r.CheckBreak() + } + if yyb43 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + if x.InReplyToUserID != nil { + x.InReplyToUserID = nil + } + } else { + if x.InReplyToUserID == nil { + x.InReplyToUserID = new(string) + } + yym66 := z.DecBinary() + _ = yym66 + if false { + } else { + *((*string)(x.InReplyToUserID)) = r.DecodeString() + } + } + yyj43++ + if yyhl43 { + yyb43 = yyj43 > l + } else { + yyb43 = r.CheckBreak() + } + if yyb43 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + if x.InReplyToUserIDStr != nil { + x.InReplyToUserIDStr = nil + } + } else { + if x.InReplyToUserIDStr == nil { + x.InReplyToUserIDStr = new(string) + } + yym68 := z.DecBinary() + _ = yym68 + if false { + } else { + *((*string)(x.InReplyToUserIDStr)) = r.DecodeString() + } + } + yyj43++ + if yyhl43 { + yyb43 = yyj43 > l + } else { + yyb43 = r.CheckBreak() + } + if yyb43 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.Metadata = StatusMetadata{} + } else { + yyv69 := &x.Metadata + yyv69.CodecDecodeSelf(d) + } + yyj43++ + if yyhl43 { + yyb43 = yyj43 > l + } else { + yyb43 = r.CheckBreak() + } + if yyb43 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + if x.Place != nil { + x.Place = nil + } + } else { + if x.Place == nil { + x.Place = new(string) + } + yym71 := z.DecBinary() + _ = yym71 + if false { + } else { + *((*string)(x.Place)) = r.DecodeString() + } + } + yyj43++ + if yyhl43 { + yyb43 = yyj43 > l + } else { + yyb43 = r.CheckBreak() + } + if yyb43 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.RetweetCount = 0 + } else { + yyv72 := &x.RetweetCount + yym73 := z.DecBinary() + _ = yym73 + if false { + } else { + *((*int)(yyv72)) = int(r.DecodeInt(codecSelferBitsize9225)) + } + } + yyj43++ + if yyhl43 { + yyb43 = yyj43 > l + } else { + yyb43 = r.CheckBreak() + } + if yyb43 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.Retweeted = false + } else { + yyv74 := &x.Retweeted + yym75 := z.DecBinary() + _ = yym75 + if false { + } else { + *((*bool)(yyv74)) = r.DecodeBool() + } + } + yyj43++ + if yyhl43 { + yyb43 = yyj43 > l + } else { + yyb43 = r.CheckBreak() + } + if yyb43 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.Source = "" + } else { + yyv76 := &x.Source + yym77 := z.DecBinary() + _ = yym77 + if false { + } else { + *((*string)(yyv76)) = r.DecodeString() + } + } + yyj43++ + if yyhl43 { + yyb43 = yyj43 > l + } else { + yyb43 = r.CheckBreak() + } + if yyb43 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.Text = "" + } else { + yyv78 := &x.Text + yym79 := z.DecBinary() + _ = yym79 + if false { + } else { + *((*string)(yyv78)) = r.DecodeString() + } + } + yyj43++ + if yyhl43 { + yyb43 = yyj43 > l + } else { + yyb43 = r.CheckBreak() + } + if yyb43 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.Truncated = false + } else { + yyv80 := &x.Truncated + yym81 := z.DecBinary() + _ = yym81 + if false { + } else { + *((*bool)(yyv80)) = r.DecodeBool() + } + } + yyj43++ + if yyhl43 { + yyb43 = yyj43 > l + } else { + yyb43 = r.CheckBreak() + } + if yyb43 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.User = User{} + } else { + yyv82 := &x.User + yyv82.CodecDecodeSelf(d) + } + for { + yyj43++ + if yyhl43 { + yyb43 = yyj43 > l + } else { + yyb43 = r.CheckBreak() + } + if yyb43 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + z.DecStructFieldNotFound(yyj43-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) +} + +func (x *LargeStruct) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1 := z.EncBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + var yyq2 [2]bool + _, _, _ = yysep2, yyq2, yy2arr2 + const yyr2 bool = false + var yynn2 int + if yyr2 || yy2arr2 { + r.EncodeArrayStart(2) + } else { + yynn2 = 2 + for _, b := range yyq2 { + if b { + yynn2++ + } + } + r.EncodeMapStart(yynn2) + yynn2 = 0 + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yy4 := &x.SearchMetadata + yy4.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("search_metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + yy6 := &x.SearchMetadata + yy6.CodecEncodeSelf(e) + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + if x.Statuses == nil { + r.EncodeNil() + } else { + yym9 := z.EncBinary() + _ = yym9 + if false { + } else { + h.encSliceStatus(([]Status)(x.Statuses), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("statuses")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + if x.Statuses == nil { + r.EncodeNil() + } else { + yym10 := z.EncBinary() + _ = yym10 + if false { + } else { + h.encSliceStatus(([]Status)(x.Statuses), e) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayEnd9225) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd9225) + } + } + } +} + +func (x *LargeStruct) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1 := z.DecBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap9225 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd9225) + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray9225 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr9225) + } + } +} + +func (x *LargeStruct) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3Slc + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey9225) + yys3Slc = r.DecodeBytes(yys3Slc, true, true) + yys3SlcHdr := codecSelferUnsafeString9225{uintptr(unsafe.Pointer(&yys3Slc[0])), len(yys3Slc)} + yys3 := *(*string)(unsafe.Pointer(&yys3SlcHdr)) + z.DecSendContainerState(codecSelfer_containerMapValue9225) + switch yys3 { + case "search_metadata": + if r.TryDecodeAsNil() { + x.SearchMetadata = SearchMetadata{} + } else { + yyv4 := &x.SearchMetadata + yyv4.CodecDecodeSelf(d) + } + case "statuses": + if r.TryDecodeAsNil() { + x.Statuses = nil + } else { + yyv5 := &x.Statuses + yym6 := z.DecBinary() + _ = yym6 + if false { + } else { + h.decSliceStatus((*[]Status)(yyv5), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + z.DecSendContainerState(codecSelfer_containerMapEnd9225) +} + +func (x *LargeStruct) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj7 int + var yyb7 bool + var yyhl7 bool = l >= 0 + yyj7++ + if yyhl7 { + yyb7 = yyj7 > l + } else { + yyb7 = r.CheckBreak() + } + if yyb7 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.SearchMetadata = SearchMetadata{} + } else { + yyv8 := &x.SearchMetadata + yyv8.CodecDecodeSelf(d) + } + yyj7++ + if yyhl7 { + yyb7 = yyj7 > l + } else { + yyb7 = r.CheckBreak() + } + if yyb7 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.Statuses = nil + } else { + yyv9 := &x.Statuses + yym10 := z.DecBinary() + _ = yym10 + if false { + } else { + h.decSliceStatus((*[]Status)(yyv9), d) + } + } + for { + yyj7++ + if yyhl7 { + yyb7 = yyj7 > l + } else { + yyb7 = r.CheckBreak() + } + if yyb7 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + z.DecStructFieldNotFound(yyj7-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) +} + +func (x *XLStruct) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1 := z.EncBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + var yyq2 [1]bool + _, _, _ = yysep2, yyq2, yy2arr2 + const yyr2 bool = false + var yynn2 int + if yyr2 || yy2arr2 { + r.EncodeArrayStart(1) + } else { + yynn2 = 1 + for _, b := range yyq2 { + if b { + yynn2++ + } + } + r.EncodeMapStart(yynn2) + yynn2 = 0 + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + if x.Data == nil { + r.EncodeNil() + } else { + yym4 := z.EncBinary() + _ = yym4 + if false { + } else { + h.encSliceLargeStruct(([]LargeStruct)(x.Data), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey9225) + r.EncodeString(codecSelferC_UTF89225, string("Data")) + z.EncSendContainerState(codecSelfer_containerMapValue9225) + if x.Data == nil { + r.EncodeNil() + } else { + yym5 := z.EncBinary() + _ = yym5 + if false { + } else { + h.encSliceLargeStruct(([]LargeStruct)(x.Data), e) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayEnd9225) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd9225) + } + } + } +} + +func (x *XLStruct) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1 := z.DecBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap9225 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd9225) + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray9225 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr9225) + } + } +} + +func (x *XLStruct) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3Slc + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey9225) + yys3Slc = r.DecodeBytes(yys3Slc, true, true) + yys3SlcHdr := codecSelferUnsafeString9225{uintptr(unsafe.Pointer(&yys3Slc[0])), len(yys3Slc)} + yys3 := *(*string)(unsafe.Pointer(&yys3SlcHdr)) + z.DecSendContainerState(codecSelfer_containerMapValue9225) + switch yys3 { + case "Data": + if r.TryDecodeAsNil() { + x.Data = nil + } else { + yyv4 := &x.Data + yym5 := z.DecBinary() + _ = yym5 + if false { + } else { + h.decSliceLargeStruct((*[]LargeStruct)(yyv4), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + z.DecSendContainerState(codecSelfer_containerMapEnd9225) +} + +func (x *XLStruct) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj6 int + var yyb6 bool + var yyhl6 bool = l >= 0 + yyj6++ + if yyhl6 { + yyb6 = yyj6 > l + } else { + yyb6 = r.CheckBreak() + } + if yyb6 { + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + if r.TryDecodeAsNil() { + x.Data = nil + } else { + yyv7 := &x.Data + yym8 := z.DecBinary() + _ = yym8 + if false { + } else { + h.decSliceLargeStruct((*[]LargeStruct)(yyv7), d) + } + } + for { + yyj6++ + if yyhl6 { + yyb6 = yyj6 > l + } else { + yyb6 = r.CheckBreak() + } + if yyb6 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem9225) + z.DecStructFieldNotFound(yyj6-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd9225) +} + +func (x codecSelfer9225) encSliceHashtag(v []Hashtag, e *codec1978.Encoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv1 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yy2 := &yyv1 + yy2.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd9225) +} + +func (x codecSelfer9225) decSliceHashtag(v *[]Hashtag, d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1 := *v + yyh1, yyl1 := z.DecSliceHelperStart() + var yyc1 bool + _ = yyc1 + if yyl1 == 0 { + if yyv1 == nil { + yyv1 = []Hashtag{} + yyc1 = true + } else if len(yyv1) != 0 { + yyv1 = yyv1[:0] + yyc1 = true + } + } else if yyl1 > 0 { + var yyrr1, yyrl1 int + var yyrt1 bool + _, _ = yyrl1, yyrt1 + yyrr1 = yyl1 // len(yyv1) + if yyl1 > cap(yyv1) { + + yyrg1 := len(yyv1) > 0 + yyv21 := yyv1 + yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 40) + if yyrt1 { + if yyrl1 <= cap(yyv1) { + yyv1 = yyv1[:yyrl1] + } else { + yyv1 = make([]Hashtag, yyrl1) + } + } else { + yyv1 = make([]Hashtag, yyrl1) + } + yyc1 = true + yyrr1 = len(yyv1) + if yyrg1 { + copy(yyv1, yyv21) + } + } else if yyl1 != len(yyv1) { + yyv1 = yyv1[:yyl1] + yyc1 = true + } + yyj1 := 0 + for ; yyj1 < yyrr1; yyj1++ { + yyh1.ElemContainerState(yyj1) + if r.TryDecodeAsNil() { + yyv1[yyj1] = Hashtag{} + } else { + yyv2 := &yyv1[yyj1] + yyv2.CodecDecodeSelf(d) + } + + } + if yyrt1 { + for ; yyj1 < yyl1; yyj1++ { + yyv1 = append(yyv1, Hashtag{}) + yyh1.ElemContainerState(yyj1) + if r.TryDecodeAsNil() { + yyv1[yyj1] = Hashtag{} + } else { + yyv3 := &yyv1[yyj1] + yyv3.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj1 := 0 + for ; !r.CheckBreak(); yyj1++ { + + if yyj1 >= len(yyv1) { + yyv1 = append(yyv1, Hashtag{}) // var yyz1 Hashtag + yyc1 = true + } + yyh1.ElemContainerState(yyj1) + if yyj1 < len(yyv1) { + if r.TryDecodeAsNil() { + yyv1[yyj1] = Hashtag{} + } else { + yyv4 := &yyv1[yyj1] + yyv4.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj1 < len(yyv1) { + yyv1 = yyv1[:yyj1] + yyc1 = true + } else if yyj1 == 0 && yyv1 == nil { + yyv1 = []Hashtag{} + yyc1 = true + } + } + yyh1.End() + if yyc1 { + *v = yyv1 + } +} + +func (x codecSelfer9225) encSlicePtrtostring(v []*string, e *codec1978.Encoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv1 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + if yyv1 == nil { + r.EncodeNil() + } else { + yy2 := *yyv1 + yym3 := z.EncBinary() + _ = yym3 + if false { + } else { + r.EncodeString(codecSelferC_UTF89225, string(yy2)) + } + } + } + z.EncSendContainerState(codecSelfer_containerArrayEnd9225) +} + +func (x codecSelfer9225) decSlicePtrtostring(v *[]*string, d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1 := *v + yyh1, yyl1 := z.DecSliceHelperStart() + var yyc1 bool + _ = yyc1 + if yyl1 == 0 { + if yyv1 == nil { + yyv1 = []*string{} + yyc1 = true + } else if len(yyv1) != 0 { + yyv1 = yyv1[:0] + yyc1 = true + } + } else if yyl1 > 0 { + var yyrr1, yyrl1 int + var yyrt1 bool + _, _ = yyrl1, yyrt1 + yyrr1 = yyl1 // len(yyv1) + if yyl1 > cap(yyv1) { + + yyrg1 := len(yyv1) > 0 + yyv21 := yyv1 + yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 8) + if yyrt1 { + if yyrl1 <= cap(yyv1) { + yyv1 = yyv1[:yyrl1] + } else { + yyv1 = make([]*string, yyrl1) + } + } else { + yyv1 = make([]*string, yyrl1) + } + yyc1 = true + yyrr1 = len(yyv1) + if yyrg1 { + copy(yyv1, yyv21) + } + } else if yyl1 != len(yyv1) { + yyv1 = yyv1[:yyl1] + yyc1 = true + } + yyj1 := 0 + for ; yyj1 < yyrr1; yyj1++ { + yyh1.ElemContainerState(yyj1) + if r.TryDecodeAsNil() { + if yyv1[yyj1] != nil { + *yyv1[yyj1] = "" + } + } else { + if yyv1[yyj1] == nil { + yyv1[yyj1] = new(string) + } + yyw2 := yyv1[yyj1] + yym3 := z.DecBinary() + _ = yym3 + if false { + } else { + *((*string)(yyw2)) = r.DecodeString() + } + } + + } + if yyrt1 { + for ; yyj1 < yyl1; yyj1++ { + yyv1 = append(yyv1, nil) + yyh1.ElemContainerState(yyj1) + if r.TryDecodeAsNil() { + if yyv1[yyj1] != nil { + *yyv1[yyj1] = "" + } + } else { + if yyv1[yyj1] == nil { + yyv1[yyj1] = new(string) + } + yyw4 := yyv1[yyj1] + yym5 := z.DecBinary() + _ = yym5 + if false { + } else { + *((*string)(yyw4)) = r.DecodeString() + } + } + + } + } + + } else { + yyj1 := 0 + for ; !r.CheckBreak(); yyj1++ { + + if yyj1 >= len(yyv1) { + yyv1 = append(yyv1, nil) // var yyz1 *string + yyc1 = true + } + yyh1.ElemContainerState(yyj1) + if yyj1 < len(yyv1) { + if r.TryDecodeAsNil() { + if yyv1[yyj1] != nil { + *yyv1[yyj1] = "" + } + } else { + if yyv1[yyj1] == nil { + yyv1[yyj1] = new(string) + } + yyw6 := yyv1[yyj1] + yym7 := z.DecBinary() + _ = yym7 + if false { + } else { + *((*string)(yyw6)) = r.DecodeString() + } + } + + } else { + z.DecSwallow() + } + + } + if yyj1 < len(yyv1) { + yyv1 = yyv1[:yyj1] + yyc1 = true + } else if yyj1 == 0 && yyv1 == nil { + yyv1 = []*string{} + yyc1 = true + } + } + yyh1.End() + if yyc1 { + *v = yyv1 + } +} + +func (x codecSelfer9225) encSliceURL(v []URL, e *codec1978.Encoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv1 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yy2 := &yyv1 + yy2.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd9225) +} + +func (x codecSelfer9225) decSliceURL(v *[]URL, d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1 := *v + yyh1, yyl1 := z.DecSliceHelperStart() + var yyc1 bool + _ = yyc1 + if yyl1 == 0 { + if yyv1 == nil { + yyv1 = []URL{} + yyc1 = true + } else if len(yyv1) != 0 { + yyv1 = yyv1[:0] + yyc1 = true + } + } else if yyl1 > 0 { + var yyrr1, yyrl1 int + var yyrt1 bool + _, _ = yyrl1, yyrt1 + yyrr1 = yyl1 // len(yyv1) + if yyl1 > cap(yyv1) { + + yyrg1 := len(yyv1) > 0 + yyv21 := yyv1 + yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 48) + if yyrt1 { + if yyrl1 <= cap(yyv1) { + yyv1 = yyv1[:yyrl1] + } else { + yyv1 = make([]URL, yyrl1) + } + } else { + yyv1 = make([]URL, yyrl1) + } + yyc1 = true + yyrr1 = len(yyv1) + if yyrg1 { + copy(yyv1, yyv21) + } + } else if yyl1 != len(yyv1) { + yyv1 = yyv1[:yyl1] + yyc1 = true + } + yyj1 := 0 + for ; yyj1 < yyrr1; yyj1++ { + yyh1.ElemContainerState(yyj1) + if r.TryDecodeAsNil() { + yyv1[yyj1] = URL{} + } else { + yyv2 := &yyv1[yyj1] + yyv2.CodecDecodeSelf(d) + } + + } + if yyrt1 { + for ; yyj1 < yyl1; yyj1++ { + yyv1 = append(yyv1, URL{}) + yyh1.ElemContainerState(yyj1) + if r.TryDecodeAsNil() { + yyv1[yyj1] = URL{} + } else { + yyv3 := &yyv1[yyj1] + yyv3.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj1 := 0 + for ; !r.CheckBreak(); yyj1++ { + + if yyj1 >= len(yyv1) { + yyv1 = append(yyv1, URL{}) // var yyz1 URL + yyc1 = true + } + yyh1.ElemContainerState(yyj1) + if yyj1 < len(yyv1) { + if r.TryDecodeAsNil() { + yyv1[yyj1] = URL{} + } else { + yyv4 := &yyv1[yyj1] + yyv4.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj1 < len(yyv1) { + yyv1 = yyv1[:yyj1] + yyc1 = true + } else if yyj1 == 0 && yyv1 == nil { + yyv1 = []URL{} + yyc1 = true + } + } + yyh1.End() + if yyc1 { + *v = yyv1 + } +} + +func (x codecSelfer9225) encSliceStatus(v []Status, e *codec1978.Encoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv1 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yy2 := &yyv1 + yy2.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd9225) +} + +func (x codecSelfer9225) decSliceStatus(v *[]Status, d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1 := *v + yyh1, yyl1 := z.DecSliceHelperStart() + var yyc1 bool + _ = yyc1 + if yyl1 == 0 { + if yyv1 == nil { + yyv1 = []Status{} + yyc1 = true + } else if len(yyv1) != 0 { + yyv1 = yyv1[:0] + yyc1 = true + } + } else if yyl1 > 0 { + var yyrr1, yyrl1 int + var yyrt1 bool + _, _ = yyrl1, yyrt1 + yyrr1 = yyl1 // len(yyv1) + if yyl1 > cap(yyv1) { + + yyrg1 := len(yyv1) > 0 + yyv21 := yyv1 + yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 752) + if yyrt1 { + if yyrl1 <= cap(yyv1) { + yyv1 = yyv1[:yyrl1] + } else { + yyv1 = make([]Status, yyrl1) + } + } else { + yyv1 = make([]Status, yyrl1) + } + yyc1 = true + yyrr1 = len(yyv1) + if yyrg1 { + copy(yyv1, yyv21) + } + } else if yyl1 != len(yyv1) { + yyv1 = yyv1[:yyl1] + yyc1 = true + } + yyj1 := 0 + for ; yyj1 < yyrr1; yyj1++ { + yyh1.ElemContainerState(yyj1) + if r.TryDecodeAsNil() { + yyv1[yyj1] = Status{} + } else { + yyv2 := &yyv1[yyj1] + yyv2.CodecDecodeSelf(d) + } + + } + if yyrt1 { + for ; yyj1 < yyl1; yyj1++ { + yyv1 = append(yyv1, Status{}) + yyh1.ElemContainerState(yyj1) + if r.TryDecodeAsNil() { + yyv1[yyj1] = Status{} + } else { + yyv3 := &yyv1[yyj1] + yyv3.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj1 := 0 + for ; !r.CheckBreak(); yyj1++ { + + if yyj1 >= len(yyv1) { + yyv1 = append(yyv1, Status{}) // var yyz1 Status + yyc1 = true + } + yyh1.ElemContainerState(yyj1) + if yyj1 < len(yyv1) { + if r.TryDecodeAsNil() { + yyv1[yyj1] = Status{} + } else { + yyv4 := &yyv1[yyj1] + yyv4.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj1 < len(yyv1) { + yyv1 = yyv1[:yyj1] + yyc1 = true + } else if yyj1 == 0 && yyv1 == nil { + yyv1 = []Status{} + yyc1 = true + } + } + yyh1.End() + if yyc1 { + *v = yyv1 + } +} + +func (x codecSelfer9225) encSliceLargeStruct(v []LargeStruct, e *codec1978.Encoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv1 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem9225) + yy2 := &yyv1 + yy2.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd9225) +} + +func (x codecSelfer9225) decSliceLargeStruct(v *[]LargeStruct, d *codec1978.Decoder) { + var h codecSelfer9225 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1 := *v + yyh1, yyl1 := z.DecSliceHelperStart() + var yyc1 bool + _ = yyc1 + if yyl1 == 0 { + if yyv1 == nil { + yyv1 = []LargeStruct{} + yyc1 = true + } else if len(yyv1) != 0 { + yyv1 = yyv1[:0] + yyc1 = true + } + } else if yyl1 > 0 { + var yyrr1, yyrl1 int + var yyrt1 bool + _, _ = yyrl1, yyrt1 + yyrr1 = yyl1 // len(yyv1) + if yyl1 > cap(yyv1) { + + yyrg1 := len(yyv1) > 0 + yyv21 := yyv1 + yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 136) + if yyrt1 { + if yyrl1 <= cap(yyv1) { + yyv1 = yyv1[:yyrl1] + } else { + yyv1 = make([]LargeStruct, yyrl1) + } + } else { + yyv1 = make([]LargeStruct, yyrl1) + } + yyc1 = true + yyrr1 = len(yyv1) + if yyrg1 { + copy(yyv1, yyv21) + } + } else if yyl1 != len(yyv1) { + yyv1 = yyv1[:yyl1] + yyc1 = true + } + yyj1 := 0 + for ; yyj1 < yyrr1; yyj1++ { + yyh1.ElemContainerState(yyj1) + if r.TryDecodeAsNil() { + yyv1[yyj1] = LargeStruct{} + } else { + yyv2 := &yyv1[yyj1] + yyv2.CodecDecodeSelf(d) + } + + } + if yyrt1 { + for ; yyj1 < yyl1; yyj1++ { + yyv1 = append(yyv1, LargeStruct{}) + yyh1.ElemContainerState(yyj1) + if r.TryDecodeAsNil() { + yyv1[yyj1] = LargeStruct{} + } else { + yyv3 := &yyv1[yyj1] + yyv3.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj1 := 0 + for ; !r.CheckBreak(); yyj1++ { + + if yyj1 >= len(yyv1) { + yyv1 = append(yyv1, LargeStruct{}) // var yyz1 LargeStruct + yyc1 = true + } + yyh1.ElemContainerState(yyj1) + if yyj1 < len(yyv1) { + if r.TryDecodeAsNil() { + yyv1[yyj1] = LargeStruct{} + } else { + yyv4 := &yyv1[yyj1] + yyv4.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj1 < len(yyv1) { + yyv1 = yyv1[:yyj1] + yyc1 = true + } else if yyj1 == 0 && yyv1 == nil { + yyv1 = []LargeStruct{} + yyc1 = true + } + } + yyh1.End() + if yyc1 { + *v = yyv1 + } +} diff --git a/vendor/github.com/mailru/easyjson/benchmark/data_ffjson.go b/vendor/github.com/mailru/easyjson/benchmark/data_ffjson.go new file mode 100644 index 0000000..9f000d3 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/benchmark/data_ffjson.go @@ -0,0 +1,6723 @@ +// +build use_ffjson + +// DO NOT EDIT! +// Code generated by ffjson +// source: .root/src/github.com/mailru/easyjson/benchmark/data.go +// DO NOT EDIT! + +package benchmark + +import ( + "bytes" + "errors" + "fmt" + fflib "github.com/pquerna/ffjson/fflib/v1" +) + +func (mj *Entities) MarshalJSON() ([]byte, error) { + var buf fflib.Buffer + if mj == nil { + buf.WriteString("null") + return buf.Bytes(), nil + } + err := mj.MarshalJSONBuf(&buf) + if err != nil { + return nil, err + } + return buf.Bytes(), nil +} +func (mj *Entities) MarshalJSONBuf(buf fflib.EncodingBuffer) error { + if mj == nil { + buf.WriteString("null") + return nil + } + var err error + var obj []byte + _ = obj + _ = err + buf.WriteString(`{"hashtags":`) + if mj.Hashtags != nil { + buf.WriteString(`[`) + for i, v := range mj.Hashtags { + if i != 0 { + buf.WriteString(`,`) + } + + { + + err = v.MarshalJSONBuf(buf) + if err != nil { + return err + } + + } + } + buf.WriteString(`]`) + } else { + buf.WriteString(`null`) + } + buf.WriteString(`,"urls":`) + if mj.Urls != nil { + buf.WriteString(`[`) + for i, v := range mj.Urls { + if i != 0 { + buf.WriteString(`,`) + } + if v != nil { + fflib.WriteJsonString(buf, string(*v)) + } else { + buf.WriteString(`null`) + } + } + buf.WriteString(`]`) + } else { + buf.WriteString(`null`) + } + buf.WriteString(`,"user_mentions":`) + if mj.UserMentions != nil { + buf.WriteString(`[`) + for i, v := range mj.UserMentions { + if i != 0 { + buf.WriteString(`,`) + } + if v != nil { + fflib.WriteJsonString(buf, string(*v)) + } else { + buf.WriteString(`null`) + } + } + buf.WriteString(`]`) + } else { + buf.WriteString(`null`) + } + buf.WriteByte('}') + return nil +} + +const ( + ffj_t_Entitiesbase = iota + ffj_t_Entitiesno_such_key + + ffj_t_Entities_Hashtags + + ffj_t_Entities_Urls + + ffj_t_Entities_UserMentions +) + +var ffj_key_Entities_Hashtags = []byte("hashtags") + +var ffj_key_Entities_Urls = []byte("urls") + +var ffj_key_Entities_UserMentions = []byte("user_mentions") + +func (uj *Entities) UnmarshalJSON(input []byte) error { + fs := fflib.NewFFLexer(input) + return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start) +} + +func (uj *Entities) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error { + var err error = nil + currentKey := ffj_t_Entitiesbase + _ = currentKey + tok := fflib.FFTok_init + wantedTok := fflib.FFTok_init + +mainparse: + for { + tok = fs.Scan() + // println(fmt.Sprintf("debug: tok: %v state: %v", tok, state)) + if tok == fflib.FFTok_error { + goto tokerror + } + + switch state { + + case fflib.FFParse_map_start: + if tok != fflib.FFTok_left_bracket { + wantedTok = fflib.FFTok_left_bracket + goto wrongtokenerror + } + state = fflib.FFParse_want_key + continue + + case fflib.FFParse_after_value: + if tok == fflib.FFTok_comma { + state = fflib.FFParse_want_key + } else if tok == fflib.FFTok_right_bracket { + goto done + } else { + wantedTok = fflib.FFTok_comma + goto wrongtokenerror + } + + case fflib.FFParse_want_key: + // json {} ended. goto exit. woo. + if tok == fflib.FFTok_right_bracket { + goto done + } + if tok != fflib.FFTok_string { + wantedTok = fflib.FFTok_string + goto wrongtokenerror + } + + kn := fs.Output.Bytes() + if len(kn) <= 0 { + // "" case. hrm. + currentKey = ffj_t_Entitiesno_such_key + state = fflib.FFParse_want_colon + goto mainparse + } else { + switch kn[0] { + + case 'h': + + if bytes.Equal(ffj_key_Entities_Hashtags, kn) { + currentKey = ffj_t_Entities_Hashtags + state = fflib.FFParse_want_colon + goto mainparse + } + + case 'u': + + if bytes.Equal(ffj_key_Entities_Urls, kn) { + currentKey = ffj_t_Entities_Urls + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_Entities_UserMentions, kn) { + currentKey = ffj_t_Entities_UserMentions + state = fflib.FFParse_want_colon + goto mainparse + } + + } + + if fflib.EqualFoldRight(ffj_key_Entities_UserMentions, kn) { + currentKey = ffj_t_Entities_UserMentions + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_Entities_Urls, kn) { + currentKey = ffj_t_Entities_Urls + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_Entities_Hashtags, kn) { + currentKey = ffj_t_Entities_Hashtags + state = fflib.FFParse_want_colon + goto mainparse + } + + currentKey = ffj_t_Entitiesno_such_key + state = fflib.FFParse_want_colon + goto mainparse + } + + case fflib.FFParse_want_colon: + if tok != fflib.FFTok_colon { + wantedTok = fflib.FFTok_colon + goto wrongtokenerror + } + state = fflib.FFParse_want_value + continue + case fflib.FFParse_want_value: + + if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null { + switch currentKey { + + case ffj_t_Entities_Hashtags: + goto handle_Hashtags + + case ffj_t_Entities_Urls: + goto handle_Urls + + case ffj_t_Entities_UserMentions: + goto handle_UserMentions + + case ffj_t_Entitiesno_such_key: + err = fs.SkipField(tok) + if err != nil { + return fs.WrapErr(err) + } + state = fflib.FFParse_after_value + goto mainparse + } + } else { + goto wantedvalue + } + } + } + +handle_Hashtags: + + /* handler: uj.Hashtags type=[]benchmark.Hashtag kind=slice quoted=false*/ + + { + + { + if tok != fflib.FFTok_left_brace && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for ", tok)) + } + } + + if tok == fflib.FFTok_null { + uj.Hashtags = nil + } else { + + uj.Hashtags = make([]Hashtag, 0) + + wantVal := true + + for { + + var tmp_uj__Hashtags Hashtag + + tok = fs.Scan() + if tok == fflib.FFTok_error { + goto tokerror + } + if tok == fflib.FFTok_right_brace { + break + } + + if tok == fflib.FFTok_comma { + if wantVal == true { + // TODO(pquerna): this isn't an ideal error message, this handles + // things like [,,,] as an array value. + return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) + } + continue + } else { + wantVal = true + } + + /* handler: tmp_uj__Hashtags type=benchmark.Hashtag kind=struct quoted=false*/ + + { + if tok == fflib.FFTok_null { + + state = fflib.FFParse_after_value + goto mainparse + } + + err = tmp_uj__Hashtags.UnmarshalJSONFFLexer(fs, fflib.FFParse_want_key) + if err != nil { + return err + } + state = fflib.FFParse_after_value + } + + uj.Hashtags = append(uj.Hashtags, tmp_uj__Hashtags) + wantVal = false + } + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_Urls: + + /* handler: uj.Urls type=[]*string kind=slice quoted=false*/ + + { + + { + if tok != fflib.FFTok_left_brace && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for ", tok)) + } + } + + if tok == fflib.FFTok_null { + uj.Urls = nil + } else { + + uj.Urls = make([]*string, 0) + + wantVal := true + + for { + + var tmp_uj__Urls *string + + tok = fs.Scan() + if tok == fflib.FFTok_error { + goto tokerror + } + if tok == fflib.FFTok_right_brace { + break + } + + if tok == fflib.FFTok_comma { + if wantVal == true { + // TODO(pquerna): this isn't an ideal error message, this handles + // things like [,,,] as an array value. + return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) + } + continue + } else { + wantVal = true + } + + /* handler: tmp_uj__Urls type=*string kind=ptr quoted=false*/ + + { + + if tok == fflib.FFTok_null { + tmp_uj__Urls = nil + } else { + if tmp_uj__Urls == nil { + tmp_uj__Urls = new(string) + } + + /* handler: tmp_uj__Urls type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + tmp_uj__Urls = nil + + } else { + + var tval string + outBuf := fs.Output.Bytes() + + tval = string(string(outBuf)) + tmp_uj__Urls = &tval + + } + } + + } + } + + uj.Urls = append(uj.Urls, tmp_uj__Urls) + wantVal = false + } + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_UserMentions: + + /* handler: uj.UserMentions type=[]*string kind=slice quoted=false*/ + + { + + { + if tok != fflib.FFTok_left_brace && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for ", tok)) + } + } + + if tok == fflib.FFTok_null { + uj.UserMentions = nil + } else { + + uj.UserMentions = make([]*string, 0) + + wantVal := true + + for { + + var tmp_uj__UserMentions *string + + tok = fs.Scan() + if tok == fflib.FFTok_error { + goto tokerror + } + if tok == fflib.FFTok_right_brace { + break + } + + if tok == fflib.FFTok_comma { + if wantVal == true { + // TODO(pquerna): this isn't an ideal error message, this handles + // things like [,,,] as an array value. + return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) + } + continue + } else { + wantVal = true + } + + /* handler: tmp_uj__UserMentions type=*string kind=ptr quoted=false*/ + + { + + if tok == fflib.FFTok_null { + tmp_uj__UserMentions = nil + } else { + if tmp_uj__UserMentions == nil { + tmp_uj__UserMentions = new(string) + } + + /* handler: tmp_uj__UserMentions type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + tmp_uj__UserMentions = nil + + } else { + + var tval string + outBuf := fs.Output.Bytes() + + tval = string(string(outBuf)) + tmp_uj__UserMentions = &tval + + } + } + + } + } + + uj.UserMentions = append(uj.UserMentions, tmp_uj__UserMentions) + wantVal = false + } + } + } + + state = fflib.FFParse_after_value + goto mainparse + +wantedvalue: + return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) +wrongtokenerror: + return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String())) +tokerror: + if fs.BigError != nil { + return fs.WrapErr(fs.BigError) + } + err = fs.Error.ToError() + if err != nil { + return fs.WrapErr(err) + } + panic("ffjson-generated: unreachable, please report bug.") +done: + return nil +} + +func (mj *Hashtag) MarshalJSON() ([]byte, error) { + var buf fflib.Buffer + if mj == nil { + buf.WriteString("null") + return buf.Bytes(), nil + } + err := mj.MarshalJSONBuf(&buf) + if err != nil { + return nil, err + } + return buf.Bytes(), nil +} +func (mj *Hashtag) MarshalJSONBuf(buf fflib.EncodingBuffer) error { + if mj == nil { + buf.WriteString("null") + return nil + } + var err error + var obj []byte + _ = obj + _ = err + buf.WriteString(`{"indices":`) + if mj.Indices != nil { + buf.WriteString(`[`) + for i, v := range mj.Indices { + if i != 0 { + buf.WriteString(`,`) + } + fflib.FormatBits2(buf, uint64(v), 10, v < 0) + } + buf.WriteString(`]`) + } else { + buf.WriteString(`null`) + } + buf.WriteString(`,"text":`) + fflib.WriteJsonString(buf, string(mj.Text)) + buf.WriteByte('}') + return nil +} + +const ( + ffj_t_Hashtagbase = iota + ffj_t_Hashtagno_such_key + + ffj_t_Hashtag_Indices + + ffj_t_Hashtag_Text +) + +var ffj_key_Hashtag_Indices = []byte("indices") + +var ffj_key_Hashtag_Text = []byte("text") + +func (uj *Hashtag) UnmarshalJSON(input []byte) error { + fs := fflib.NewFFLexer(input) + return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start) +} + +func (uj *Hashtag) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error { + var err error = nil + currentKey := ffj_t_Hashtagbase + _ = currentKey + tok := fflib.FFTok_init + wantedTok := fflib.FFTok_init + +mainparse: + for { + tok = fs.Scan() + // println(fmt.Sprintf("debug: tok: %v state: %v", tok, state)) + if tok == fflib.FFTok_error { + goto tokerror + } + + switch state { + + case fflib.FFParse_map_start: + if tok != fflib.FFTok_left_bracket { + wantedTok = fflib.FFTok_left_bracket + goto wrongtokenerror + } + state = fflib.FFParse_want_key + continue + + case fflib.FFParse_after_value: + if tok == fflib.FFTok_comma { + state = fflib.FFParse_want_key + } else if tok == fflib.FFTok_right_bracket { + goto done + } else { + wantedTok = fflib.FFTok_comma + goto wrongtokenerror + } + + case fflib.FFParse_want_key: + // json {} ended. goto exit. woo. + if tok == fflib.FFTok_right_bracket { + goto done + } + if tok != fflib.FFTok_string { + wantedTok = fflib.FFTok_string + goto wrongtokenerror + } + + kn := fs.Output.Bytes() + if len(kn) <= 0 { + // "" case. hrm. + currentKey = ffj_t_Hashtagno_such_key + state = fflib.FFParse_want_colon + goto mainparse + } else { + switch kn[0] { + + case 'i': + + if bytes.Equal(ffj_key_Hashtag_Indices, kn) { + currentKey = ffj_t_Hashtag_Indices + state = fflib.FFParse_want_colon + goto mainparse + } + + case 't': + + if bytes.Equal(ffj_key_Hashtag_Text, kn) { + currentKey = ffj_t_Hashtag_Text + state = fflib.FFParse_want_colon + goto mainparse + } + + } + + if fflib.SimpleLetterEqualFold(ffj_key_Hashtag_Text, kn) { + currentKey = ffj_t_Hashtag_Text + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_Hashtag_Indices, kn) { + currentKey = ffj_t_Hashtag_Indices + state = fflib.FFParse_want_colon + goto mainparse + } + + currentKey = ffj_t_Hashtagno_such_key + state = fflib.FFParse_want_colon + goto mainparse + } + + case fflib.FFParse_want_colon: + if tok != fflib.FFTok_colon { + wantedTok = fflib.FFTok_colon + goto wrongtokenerror + } + state = fflib.FFParse_want_value + continue + case fflib.FFParse_want_value: + + if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null { + switch currentKey { + + case ffj_t_Hashtag_Indices: + goto handle_Indices + + case ffj_t_Hashtag_Text: + goto handle_Text + + case ffj_t_Hashtagno_such_key: + err = fs.SkipField(tok) + if err != nil { + return fs.WrapErr(err) + } + state = fflib.FFParse_after_value + goto mainparse + } + } else { + goto wantedvalue + } + } + } + +handle_Indices: + + /* handler: uj.Indices type=[]int kind=slice quoted=false*/ + + { + + { + if tok != fflib.FFTok_left_brace && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for ", tok)) + } + } + + if tok == fflib.FFTok_null { + uj.Indices = nil + } else { + + uj.Indices = make([]int, 0) + + wantVal := true + + for { + + var tmp_uj__Indices int + + tok = fs.Scan() + if tok == fflib.FFTok_error { + goto tokerror + } + if tok == fflib.FFTok_right_brace { + break + } + + if tok == fflib.FFTok_comma { + if wantVal == true { + // TODO(pquerna): this isn't an ideal error message, this handles + // things like [,,,] as an array value. + return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) + } + continue + } else { + wantVal = true + } + + /* handler: tmp_uj__Indices type=int kind=int quoted=false*/ + + { + if tok != fflib.FFTok_integer && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok)) + } + } + + { + + if tok == fflib.FFTok_null { + + } else { + + tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64) + + if err != nil { + return fs.WrapErr(err) + } + + tmp_uj__Indices = int(tval) + + } + } + + uj.Indices = append(uj.Indices, tmp_uj__Indices) + wantVal = false + } + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_Text: + + /* handler: uj.Text type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + } else { + + outBuf := fs.Output.Bytes() + + uj.Text = string(string(outBuf)) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +wantedvalue: + return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) +wrongtokenerror: + return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String())) +tokerror: + if fs.BigError != nil { + return fs.WrapErr(fs.BigError) + } + err = fs.Error.ToError() + if err != nil { + return fs.WrapErr(err) + } + panic("ffjson-generated: unreachable, please report bug.") +done: + return nil +} + +func (mj *LargeStruct) MarshalJSON() ([]byte, error) { + var buf fflib.Buffer + if mj == nil { + buf.WriteString("null") + return buf.Bytes(), nil + } + err := mj.MarshalJSONBuf(&buf) + if err != nil { + return nil, err + } + return buf.Bytes(), nil +} +func (mj *LargeStruct) MarshalJSONBuf(buf fflib.EncodingBuffer) error { + if mj == nil { + buf.WriteString("null") + return nil + } + var err error + var obj []byte + _ = obj + _ = err + buf.WriteString(`{"search_metadata":`) + + { + + err = mj.SearchMetadata.MarshalJSONBuf(buf) + if err != nil { + return err + } + + } + buf.WriteString(`,"statuses":`) + if mj.Statuses != nil { + buf.WriteString(`[`) + for i, v := range mj.Statuses { + if i != 0 { + buf.WriteString(`,`) + } + + { + + err = v.MarshalJSONBuf(buf) + if err != nil { + return err + } + + } + } + buf.WriteString(`]`) + } else { + buf.WriteString(`null`) + } + buf.WriteByte('}') + return nil +} + +const ( + ffj_t_LargeStructbase = iota + ffj_t_LargeStructno_such_key + + ffj_t_LargeStruct_SearchMetadata + + ffj_t_LargeStruct_Statuses +) + +var ffj_key_LargeStruct_SearchMetadata = []byte("search_metadata") + +var ffj_key_LargeStruct_Statuses = []byte("statuses") + +func (uj *LargeStruct) UnmarshalJSON(input []byte) error { + fs := fflib.NewFFLexer(input) + return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start) +} + +func (uj *LargeStruct) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error { + var err error = nil + currentKey := ffj_t_LargeStructbase + _ = currentKey + tok := fflib.FFTok_init + wantedTok := fflib.FFTok_init + +mainparse: + for { + tok = fs.Scan() + // println(fmt.Sprintf("debug: tok: %v state: %v", tok, state)) + if tok == fflib.FFTok_error { + goto tokerror + } + + switch state { + + case fflib.FFParse_map_start: + if tok != fflib.FFTok_left_bracket { + wantedTok = fflib.FFTok_left_bracket + goto wrongtokenerror + } + state = fflib.FFParse_want_key + continue + + case fflib.FFParse_after_value: + if tok == fflib.FFTok_comma { + state = fflib.FFParse_want_key + } else if tok == fflib.FFTok_right_bracket { + goto done + } else { + wantedTok = fflib.FFTok_comma + goto wrongtokenerror + } + + case fflib.FFParse_want_key: + // json {} ended. goto exit. woo. + if tok == fflib.FFTok_right_bracket { + goto done + } + if tok != fflib.FFTok_string { + wantedTok = fflib.FFTok_string + goto wrongtokenerror + } + + kn := fs.Output.Bytes() + if len(kn) <= 0 { + // "" case. hrm. + currentKey = ffj_t_LargeStructno_such_key + state = fflib.FFParse_want_colon + goto mainparse + } else { + switch kn[0] { + + case 's': + + if bytes.Equal(ffj_key_LargeStruct_SearchMetadata, kn) { + currentKey = ffj_t_LargeStruct_SearchMetadata + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_LargeStruct_Statuses, kn) { + currentKey = ffj_t_LargeStruct_Statuses + state = fflib.FFParse_want_colon + goto mainparse + } + + } + + if fflib.EqualFoldRight(ffj_key_LargeStruct_Statuses, kn) { + currentKey = ffj_t_LargeStruct_Statuses + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_LargeStruct_SearchMetadata, kn) { + currentKey = ffj_t_LargeStruct_SearchMetadata + state = fflib.FFParse_want_colon + goto mainparse + } + + currentKey = ffj_t_LargeStructno_such_key + state = fflib.FFParse_want_colon + goto mainparse + } + + case fflib.FFParse_want_colon: + if tok != fflib.FFTok_colon { + wantedTok = fflib.FFTok_colon + goto wrongtokenerror + } + state = fflib.FFParse_want_value + continue + case fflib.FFParse_want_value: + + if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null { + switch currentKey { + + case ffj_t_LargeStruct_SearchMetadata: + goto handle_SearchMetadata + + case ffj_t_LargeStruct_Statuses: + goto handle_Statuses + + case ffj_t_LargeStructno_such_key: + err = fs.SkipField(tok) + if err != nil { + return fs.WrapErr(err) + } + state = fflib.FFParse_after_value + goto mainparse + } + } else { + goto wantedvalue + } + } + } + +handle_SearchMetadata: + + /* handler: uj.SearchMetadata type=benchmark.SearchMetadata kind=struct quoted=false*/ + + { + if tok == fflib.FFTok_null { + + state = fflib.FFParse_after_value + goto mainparse + } + + err = uj.SearchMetadata.UnmarshalJSONFFLexer(fs, fflib.FFParse_want_key) + if err != nil { + return err + } + state = fflib.FFParse_after_value + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_Statuses: + + /* handler: uj.Statuses type=[]benchmark.Status kind=slice quoted=false*/ + + { + + { + if tok != fflib.FFTok_left_brace && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for ", tok)) + } + } + + if tok == fflib.FFTok_null { + uj.Statuses = nil + } else { + + uj.Statuses = make([]Status, 0) + + wantVal := true + + for { + + var tmp_uj__Statuses Status + + tok = fs.Scan() + if tok == fflib.FFTok_error { + goto tokerror + } + if tok == fflib.FFTok_right_brace { + break + } + + if tok == fflib.FFTok_comma { + if wantVal == true { + // TODO(pquerna): this isn't an ideal error message, this handles + // things like [,,,] as an array value. + return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) + } + continue + } else { + wantVal = true + } + + /* handler: tmp_uj__Statuses type=benchmark.Status kind=struct quoted=false*/ + + { + if tok == fflib.FFTok_null { + + state = fflib.FFParse_after_value + goto mainparse + } + + err = tmp_uj__Statuses.UnmarshalJSONFFLexer(fs, fflib.FFParse_want_key) + if err != nil { + return err + } + state = fflib.FFParse_after_value + } + + uj.Statuses = append(uj.Statuses, tmp_uj__Statuses) + wantVal = false + } + } + } + + state = fflib.FFParse_after_value + goto mainparse + +wantedvalue: + return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) +wrongtokenerror: + return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String())) +tokerror: + if fs.BigError != nil { + return fs.WrapErr(fs.BigError) + } + err = fs.Error.ToError() + if err != nil { + return fs.WrapErr(err) + } + panic("ffjson-generated: unreachable, please report bug.") +done: + return nil +} + +func (mj *SearchMetadata) MarshalJSON() ([]byte, error) { + var buf fflib.Buffer + if mj == nil { + buf.WriteString("null") + return buf.Bytes(), nil + } + err := mj.MarshalJSONBuf(&buf) + if err != nil { + return nil, err + } + return buf.Bytes(), nil +} +func (mj *SearchMetadata) MarshalJSONBuf(buf fflib.EncodingBuffer) error { + if mj == nil { + buf.WriteString("null") + return nil + } + var err error + var obj []byte + _ = obj + _ = err + buf.WriteString(`{"completed_in":`) + fflib.AppendFloat(buf, float64(mj.CompletedIn), 'g', -1, 64) + buf.WriteString(`,"count":`) + fflib.FormatBits2(buf, uint64(mj.Count), 10, mj.Count < 0) + buf.WriteString(`,"max_id":`) + fflib.FormatBits2(buf, uint64(mj.MaxID), 10, mj.MaxID < 0) + buf.WriteString(`,"max_id_str":`) + fflib.WriteJsonString(buf, string(mj.MaxIDStr)) + buf.WriteString(`,"next_results":`) + fflib.WriteJsonString(buf, string(mj.NextResults)) + buf.WriteString(`,"query":`) + fflib.WriteJsonString(buf, string(mj.Query)) + buf.WriteString(`,"refresh_url":`) + fflib.WriteJsonString(buf, string(mj.RefreshURL)) + buf.WriteString(`,"since_id":`) + fflib.FormatBits2(buf, uint64(mj.SinceID), 10, mj.SinceID < 0) + buf.WriteString(`,"since_id_str":`) + fflib.WriteJsonString(buf, string(mj.SinceIDStr)) + buf.WriteByte('}') + return nil +} + +const ( + ffj_t_SearchMetadatabase = iota + ffj_t_SearchMetadatano_such_key + + ffj_t_SearchMetadata_CompletedIn + + ffj_t_SearchMetadata_Count + + ffj_t_SearchMetadata_MaxID + + ffj_t_SearchMetadata_MaxIDStr + + ffj_t_SearchMetadata_NextResults + + ffj_t_SearchMetadata_Query + + ffj_t_SearchMetadata_RefreshURL + + ffj_t_SearchMetadata_SinceID + + ffj_t_SearchMetadata_SinceIDStr +) + +var ffj_key_SearchMetadata_CompletedIn = []byte("completed_in") + +var ffj_key_SearchMetadata_Count = []byte("count") + +var ffj_key_SearchMetadata_MaxID = []byte("max_id") + +var ffj_key_SearchMetadata_MaxIDStr = []byte("max_id_str") + +var ffj_key_SearchMetadata_NextResults = []byte("next_results") + +var ffj_key_SearchMetadata_Query = []byte("query") + +var ffj_key_SearchMetadata_RefreshURL = []byte("refresh_url") + +var ffj_key_SearchMetadata_SinceID = []byte("since_id") + +var ffj_key_SearchMetadata_SinceIDStr = []byte("since_id_str") + +func (uj *SearchMetadata) UnmarshalJSON(input []byte) error { + fs := fflib.NewFFLexer(input) + return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start) +} + +func (uj *SearchMetadata) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error { + var err error = nil + currentKey := ffj_t_SearchMetadatabase + _ = currentKey + tok := fflib.FFTok_init + wantedTok := fflib.FFTok_init + +mainparse: + for { + tok = fs.Scan() + // println(fmt.Sprintf("debug: tok: %v state: %v", tok, state)) + if tok == fflib.FFTok_error { + goto tokerror + } + + switch state { + + case fflib.FFParse_map_start: + if tok != fflib.FFTok_left_bracket { + wantedTok = fflib.FFTok_left_bracket + goto wrongtokenerror + } + state = fflib.FFParse_want_key + continue + + case fflib.FFParse_after_value: + if tok == fflib.FFTok_comma { + state = fflib.FFParse_want_key + } else if tok == fflib.FFTok_right_bracket { + goto done + } else { + wantedTok = fflib.FFTok_comma + goto wrongtokenerror + } + + case fflib.FFParse_want_key: + // json {} ended. goto exit. woo. + if tok == fflib.FFTok_right_bracket { + goto done + } + if tok != fflib.FFTok_string { + wantedTok = fflib.FFTok_string + goto wrongtokenerror + } + + kn := fs.Output.Bytes() + if len(kn) <= 0 { + // "" case. hrm. + currentKey = ffj_t_SearchMetadatano_such_key + state = fflib.FFParse_want_colon + goto mainparse + } else { + switch kn[0] { + + case 'c': + + if bytes.Equal(ffj_key_SearchMetadata_CompletedIn, kn) { + currentKey = ffj_t_SearchMetadata_CompletedIn + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_SearchMetadata_Count, kn) { + currentKey = ffj_t_SearchMetadata_Count + state = fflib.FFParse_want_colon + goto mainparse + } + + case 'm': + + if bytes.Equal(ffj_key_SearchMetadata_MaxID, kn) { + currentKey = ffj_t_SearchMetadata_MaxID + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_SearchMetadata_MaxIDStr, kn) { + currentKey = ffj_t_SearchMetadata_MaxIDStr + state = fflib.FFParse_want_colon + goto mainparse + } + + case 'n': + + if bytes.Equal(ffj_key_SearchMetadata_NextResults, kn) { + currentKey = ffj_t_SearchMetadata_NextResults + state = fflib.FFParse_want_colon + goto mainparse + } + + case 'q': + + if bytes.Equal(ffj_key_SearchMetadata_Query, kn) { + currentKey = ffj_t_SearchMetadata_Query + state = fflib.FFParse_want_colon + goto mainparse + } + + case 'r': + + if bytes.Equal(ffj_key_SearchMetadata_RefreshURL, kn) { + currentKey = ffj_t_SearchMetadata_RefreshURL + state = fflib.FFParse_want_colon + goto mainparse + } + + case 's': + + if bytes.Equal(ffj_key_SearchMetadata_SinceID, kn) { + currentKey = ffj_t_SearchMetadata_SinceID + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_SearchMetadata_SinceIDStr, kn) { + currentKey = ffj_t_SearchMetadata_SinceIDStr + state = fflib.FFParse_want_colon + goto mainparse + } + + } + + if fflib.EqualFoldRight(ffj_key_SearchMetadata_SinceIDStr, kn) { + currentKey = ffj_t_SearchMetadata_SinceIDStr + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_SearchMetadata_SinceID, kn) { + currentKey = ffj_t_SearchMetadata_SinceID + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_SearchMetadata_RefreshURL, kn) { + currentKey = ffj_t_SearchMetadata_RefreshURL + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.SimpleLetterEqualFold(ffj_key_SearchMetadata_Query, kn) { + currentKey = ffj_t_SearchMetadata_Query + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_SearchMetadata_NextResults, kn) { + currentKey = ffj_t_SearchMetadata_NextResults + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_SearchMetadata_MaxIDStr, kn) { + currentKey = ffj_t_SearchMetadata_MaxIDStr + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.AsciiEqualFold(ffj_key_SearchMetadata_MaxID, kn) { + currentKey = ffj_t_SearchMetadata_MaxID + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.SimpleLetterEqualFold(ffj_key_SearchMetadata_Count, kn) { + currentKey = ffj_t_SearchMetadata_Count + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.AsciiEqualFold(ffj_key_SearchMetadata_CompletedIn, kn) { + currentKey = ffj_t_SearchMetadata_CompletedIn + state = fflib.FFParse_want_colon + goto mainparse + } + + currentKey = ffj_t_SearchMetadatano_such_key + state = fflib.FFParse_want_colon + goto mainparse + } + + case fflib.FFParse_want_colon: + if tok != fflib.FFTok_colon { + wantedTok = fflib.FFTok_colon + goto wrongtokenerror + } + state = fflib.FFParse_want_value + continue + case fflib.FFParse_want_value: + + if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null { + switch currentKey { + + case ffj_t_SearchMetadata_CompletedIn: + goto handle_CompletedIn + + case ffj_t_SearchMetadata_Count: + goto handle_Count + + case ffj_t_SearchMetadata_MaxID: + goto handle_MaxID + + case ffj_t_SearchMetadata_MaxIDStr: + goto handle_MaxIDStr + + case ffj_t_SearchMetadata_NextResults: + goto handle_NextResults + + case ffj_t_SearchMetadata_Query: + goto handle_Query + + case ffj_t_SearchMetadata_RefreshURL: + goto handle_RefreshURL + + case ffj_t_SearchMetadata_SinceID: + goto handle_SinceID + + case ffj_t_SearchMetadata_SinceIDStr: + goto handle_SinceIDStr + + case ffj_t_SearchMetadatano_such_key: + err = fs.SkipField(tok) + if err != nil { + return fs.WrapErr(err) + } + state = fflib.FFParse_after_value + goto mainparse + } + } else { + goto wantedvalue + } + } + } + +handle_CompletedIn: + + /* handler: uj.CompletedIn type=float64 kind=float64 quoted=false*/ + + { + if tok != fflib.FFTok_double && tok != fflib.FFTok_integer && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for float64", tok)) + } + } + + { + + if tok == fflib.FFTok_null { + + } else { + + tval, err := fflib.ParseFloat(fs.Output.Bytes(), 64) + + if err != nil { + return fs.WrapErr(err) + } + + uj.CompletedIn = float64(tval) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_Count: + + /* handler: uj.Count type=int kind=int quoted=false*/ + + { + if tok != fflib.FFTok_integer && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok)) + } + } + + { + + if tok == fflib.FFTok_null { + + } else { + + tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64) + + if err != nil { + return fs.WrapErr(err) + } + + uj.Count = int(tval) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_MaxID: + + /* handler: uj.MaxID type=int kind=int quoted=false*/ + + { + if tok != fflib.FFTok_integer && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok)) + } + } + + { + + if tok == fflib.FFTok_null { + + } else { + + tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64) + + if err != nil { + return fs.WrapErr(err) + } + + uj.MaxID = int(tval) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_MaxIDStr: + + /* handler: uj.MaxIDStr type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + } else { + + outBuf := fs.Output.Bytes() + + uj.MaxIDStr = string(string(outBuf)) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_NextResults: + + /* handler: uj.NextResults type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + } else { + + outBuf := fs.Output.Bytes() + + uj.NextResults = string(string(outBuf)) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_Query: + + /* handler: uj.Query type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + } else { + + outBuf := fs.Output.Bytes() + + uj.Query = string(string(outBuf)) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_RefreshURL: + + /* handler: uj.RefreshURL type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + } else { + + outBuf := fs.Output.Bytes() + + uj.RefreshURL = string(string(outBuf)) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_SinceID: + + /* handler: uj.SinceID type=int kind=int quoted=false*/ + + { + if tok != fflib.FFTok_integer && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok)) + } + } + + { + + if tok == fflib.FFTok_null { + + } else { + + tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64) + + if err != nil { + return fs.WrapErr(err) + } + + uj.SinceID = int(tval) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_SinceIDStr: + + /* handler: uj.SinceIDStr type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + } else { + + outBuf := fs.Output.Bytes() + + uj.SinceIDStr = string(string(outBuf)) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +wantedvalue: + return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) +wrongtokenerror: + return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String())) +tokerror: + if fs.BigError != nil { + return fs.WrapErr(fs.BigError) + } + err = fs.Error.ToError() + if err != nil { + return fs.WrapErr(err) + } + panic("ffjson-generated: unreachable, please report bug.") +done: + return nil +} + +func (mj *Status) MarshalJSON() ([]byte, error) { + var buf fflib.Buffer + if mj == nil { + buf.WriteString("null") + return buf.Bytes(), nil + } + err := mj.MarshalJSONBuf(&buf) + if err != nil { + return nil, err + } + return buf.Bytes(), nil +} +func (mj *Status) MarshalJSONBuf(buf fflib.EncodingBuffer) error { + if mj == nil { + buf.WriteString("null") + return nil + } + var err error + var obj []byte + _ = obj + _ = err + if mj.Contributors != nil { + buf.WriteString(`{"contributors":`) + fflib.WriteJsonString(buf, string(*mj.Contributors)) + } else { + buf.WriteString(`{"contributors":null`) + } + if mj.Coordinates != nil { + buf.WriteString(`,"coordinates":`) + fflib.WriteJsonString(buf, string(*mj.Coordinates)) + } else { + buf.WriteString(`,"coordinates":null`) + } + buf.WriteString(`,"created_at":`) + fflib.WriteJsonString(buf, string(mj.CreatedAt)) + buf.WriteString(`,"entities":`) + + { + + err = mj.Entities.MarshalJSONBuf(buf) + if err != nil { + return err + } + + } + if mj.Favorited { + buf.WriteString(`,"favorited":true`) + } else { + buf.WriteString(`,"favorited":false`) + } + if mj.Geo != nil { + buf.WriteString(`,"geo":`) + fflib.WriteJsonString(buf, string(*mj.Geo)) + } else { + buf.WriteString(`,"geo":null`) + } + buf.WriteString(`,"id":`) + fflib.FormatBits2(buf, uint64(mj.ID), 10, mj.ID < 0) + buf.WriteString(`,"id_str":`) + fflib.WriteJsonString(buf, string(mj.IDStr)) + if mj.InReplyToScreenName != nil { + buf.WriteString(`,"in_reply_to_screen_name":`) + fflib.WriteJsonString(buf, string(*mj.InReplyToScreenName)) + } else { + buf.WriteString(`,"in_reply_to_screen_name":null`) + } + if mj.InReplyToStatusID != nil { + buf.WriteString(`,"in_reply_to_status_id":`) + fflib.WriteJsonString(buf, string(*mj.InReplyToStatusID)) + } else { + buf.WriteString(`,"in_reply_to_status_id":null`) + } + if mj.InReplyToStatusIDStr != nil { + buf.WriteString(`,"in_reply_to_status_id_str":`) + fflib.WriteJsonString(buf, string(*mj.InReplyToStatusIDStr)) + } else { + buf.WriteString(`,"in_reply_to_status_id_str":null`) + } + if mj.InReplyToUserID != nil { + buf.WriteString(`,"in_reply_to_user_id":`) + fflib.WriteJsonString(buf, string(*mj.InReplyToUserID)) + } else { + buf.WriteString(`,"in_reply_to_user_id":null`) + } + if mj.InReplyToUserIDStr != nil { + buf.WriteString(`,"in_reply_to_user_id_str":`) + fflib.WriteJsonString(buf, string(*mj.InReplyToUserIDStr)) + } else { + buf.WriteString(`,"in_reply_to_user_id_str":null`) + } + buf.WriteString(`,"metadata":`) + + { + + err = mj.Metadata.MarshalJSONBuf(buf) + if err != nil { + return err + } + + } + if mj.Place != nil { + buf.WriteString(`,"place":`) + fflib.WriteJsonString(buf, string(*mj.Place)) + } else { + buf.WriteString(`,"place":null`) + } + buf.WriteString(`,"retweet_count":`) + fflib.FormatBits2(buf, uint64(mj.RetweetCount), 10, mj.RetweetCount < 0) + if mj.Retweeted { + buf.WriteString(`,"retweeted":true`) + } else { + buf.WriteString(`,"retweeted":false`) + } + buf.WriteString(`,"source":`) + fflib.WriteJsonString(buf, string(mj.Source)) + buf.WriteString(`,"text":`) + fflib.WriteJsonString(buf, string(mj.Text)) + if mj.Truncated { + buf.WriteString(`,"truncated":true`) + } else { + buf.WriteString(`,"truncated":false`) + } + buf.WriteString(`,"user":`) + + { + + err = mj.User.MarshalJSONBuf(buf) + if err != nil { + return err + } + + } + buf.WriteByte('}') + return nil +} + +const ( + ffj_t_Statusbase = iota + ffj_t_Statusno_such_key + + ffj_t_Status_Contributors + + ffj_t_Status_Coordinates + + ffj_t_Status_CreatedAt + + ffj_t_Status_Entities + + ffj_t_Status_Favorited + + ffj_t_Status_Geo + + ffj_t_Status_ID + + ffj_t_Status_IDStr + + ffj_t_Status_InReplyToScreenName + + ffj_t_Status_InReplyToStatusID + + ffj_t_Status_InReplyToStatusIDStr + + ffj_t_Status_InReplyToUserID + + ffj_t_Status_InReplyToUserIDStr + + ffj_t_Status_Metadata + + ffj_t_Status_Place + + ffj_t_Status_RetweetCount + + ffj_t_Status_Retweeted + + ffj_t_Status_Source + + ffj_t_Status_Text + + ffj_t_Status_Truncated + + ffj_t_Status_User +) + +var ffj_key_Status_Contributors = []byte("contributors") + +var ffj_key_Status_Coordinates = []byte("coordinates") + +var ffj_key_Status_CreatedAt = []byte("created_at") + +var ffj_key_Status_Entities = []byte("entities") + +var ffj_key_Status_Favorited = []byte("favorited") + +var ffj_key_Status_Geo = []byte("geo") + +var ffj_key_Status_ID = []byte("id") + +var ffj_key_Status_IDStr = []byte("id_str") + +var ffj_key_Status_InReplyToScreenName = []byte("in_reply_to_screen_name") + +var ffj_key_Status_InReplyToStatusID = []byte("in_reply_to_status_id") + +var ffj_key_Status_InReplyToStatusIDStr = []byte("in_reply_to_status_id_str") + +var ffj_key_Status_InReplyToUserID = []byte("in_reply_to_user_id") + +var ffj_key_Status_InReplyToUserIDStr = []byte("in_reply_to_user_id_str") + +var ffj_key_Status_Metadata = []byte("metadata") + +var ffj_key_Status_Place = []byte("place") + +var ffj_key_Status_RetweetCount = []byte("retweet_count") + +var ffj_key_Status_Retweeted = []byte("retweeted") + +var ffj_key_Status_Source = []byte("source") + +var ffj_key_Status_Text = []byte("text") + +var ffj_key_Status_Truncated = []byte("truncated") + +var ffj_key_Status_User = []byte("user") + +func (uj *Status) UnmarshalJSON(input []byte) error { + fs := fflib.NewFFLexer(input) + return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start) +} + +func (uj *Status) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error { + var err error = nil + currentKey := ffj_t_Statusbase + _ = currentKey + tok := fflib.FFTok_init + wantedTok := fflib.FFTok_init + +mainparse: + for { + tok = fs.Scan() + // println(fmt.Sprintf("debug: tok: %v state: %v", tok, state)) + if tok == fflib.FFTok_error { + goto tokerror + } + + switch state { + + case fflib.FFParse_map_start: + if tok != fflib.FFTok_left_bracket { + wantedTok = fflib.FFTok_left_bracket + goto wrongtokenerror + } + state = fflib.FFParse_want_key + continue + + case fflib.FFParse_after_value: + if tok == fflib.FFTok_comma { + state = fflib.FFParse_want_key + } else if tok == fflib.FFTok_right_bracket { + goto done + } else { + wantedTok = fflib.FFTok_comma + goto wrongtokenerror + } + + case fflib.FFParse_want_key: + // json {} ended. goto exit. woo. + if tok == fflib.FFTok_right_bracket { + goto done + } + if tok != fflib.FFTok_string { + wantedTok = fflib.FFTok_string + goto wrongtokenerror + } + + kn := fs.Output.Bytes() + if len(kn) <= 0 { + // "" case. hrm. + currentKey = ffj_t_Statusno_such_key + state = fflib.FFParse_want_colon + goto mainparse + } else { + switch kn[0] { + + case 'c': + + if bytes.Equal(ffj_key_Status_Contributors, kn) { + currentKey = ffj_t_Status_Contributors + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_Status_Coordinates, kn) { + currentKey = ffj_t_Status_Coordinates + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_Status_CreatedAt, kn) { + currentKey = ffj_t_Status_CreatedAt + state = fflib.FFParse_want_colon + goto mainparse + } + + case 'e': + + if bytes.Equal(ffj_key_Status_Entities, kn) { + currentKey = ffj_t_Status_Entities + state = fflib.FFParse_want_colon + goto mainparse + } + + case 'f': + + if bytes.Equal(ffj_key_Status_Favorited, kn) { + currentKey = ffj_t_Status_Favorited + state = fflib.FFParse_want_colon + goto mainparse + } + + case 'g': + + if bytes.Equal(ffj_key_Status_Geo, kn) { + currentKey = ffj_t_Status_Geo + state = fflib.FFParse_want_colon + goto mainparse + } + + case 'i': + + if bytes.Equal(ffj_key_Status_ID, kn) { + currentKey = ffj_t_Status_ID + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_Status_IDStr, kn) { + currentKey = ffj_t_Status_IDStr + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_Status_InReplyToScreenName, kn) { + currentKey = ffj_t_Status_InReplyToScreenName + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_Status_InReplyToStatusID, kn) { + currentKey = ffj_t_Status_InReplyToStatusID + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_Status_InReplyToStatusIDStr, kn) { + currentKey = ffj_t_Status_InReplyToStatusIDStr + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_Status_InReplyToUserID, kn) { + currentKey = ffj_t_Status_InReplyToUserID + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_Status_InReplyToUserIDStr, kn) { + currentKey = ffj_t_Status_InReplyToUserIDStr + state = fflib.FFParse_want_colon + goto mainparse + } + + case 'm': + + if bytes.Equal(ffj_key_Status_Metadata, kn) { + currentKey = ffj_t_Status_Metadata + state = fflib.FFParse_want_colon + goto mainparse + } + + case 'p': + + if bytes.Equal(ffj_key_Status_Place, kn) { + currentKey = ffj_t_Status_Place + state = fflib.FFParse_want_colon + goto mainparse + } + + case 'r': + + if bytes.Equal(ffj_key_Status_RetweetCount, kn) { + currentKey = ffj_t_Status_RetweetCount + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_Status_Retweeted, kn) { + currentKey = ffj_t_Status_Retweeted + state = fflib.FFParse_want_colon + goto mainparse + } + + case 's': + + if bytes.Equal(ffj_key_Status_Source, kn) { + currentKey = ffj_t_Status_Source + state = fflib.FFParse_want_colon + goto mainparse + } + + case 't': + + if bytes.Equal(ffj_key_Status_Text, kn) { + currentKey = ffj_t_Status_Text + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_Status_Truncated, kn) { + currentKey = ffj_t_Status_Truncated + state = fflib.FFParse_want_colon + goto mainparse + } + + case 'u': + + if bytes.Equal(ffj_key_Status_User, kn) { + currentKey = ffj_t_Status_User + state = fflib.FFParse_want_colon + goto mainparse + } + + } + + if fflib.EqualFoldRight(ffj_key_Status_User, kn) { + currentKey = ffj_t_Status_User + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.SimpleLetterEqualFold(ffj_key_Status_Truncated, kn) { + currentKey = ffj_t_Status_Truncated + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.SimpleLetterEqualFold(ffj_key_Status_Text, kn) { + currentKey = ffj_t_Status_Text + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_Status_Source, kn) { + currentKey = ffj_t_Status_Source + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.SimpleLetterEqualFold(ffj_key_Status_Retweeted, kn) { + currentKey = ffj_t_Status_Retweeted + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.AsciiEqualFold(ffj_key_Status_RetweetCount, kn) { + currentKey = ffj_t_Status_RetweetCount + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.SimpleLetterEqualFold(ffj_key_Status_Place, kn) { + currentKey = ffj_t_Status_Place + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.SimpleLetterEqualFold(ffj_key_Status_Metadata, kn) { + currentKey = ffj_t_Status_Metadata + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_Status_InReplyToUserIDStr, kn) { + currentKey = ffj_t_Status_InReplyToUserIDStr + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_Status_InReplyToUserID, kn) { + currentKey = ffj_t_Status_InReplyToUserID + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_Status_InReplyToStatusIDStr, kn) { + currentKey = ffj_t_Status_InReplyToStatusIDStr + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_Status_InReplyToStatusID, kn) { + currentKey = ffj_t_Status_InReplyToStatusID + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_Status_InReplyToScreenName, kn) { + currentKey = ffj_t_Status_InReplyToScreenName + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_Status_IDStr, kn) { + currentKey = ffj_t_Status_IDStr + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.SimpleLetterEqualFold(ffj_key_Status_ID, kn) { + currentKey = ffj_t_Status_ID + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.SimpleLetterEqualFold(ffj_key_Status_Geo, kn) { + currentKey = ffj_t_Status_Geo + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.SimpleLetterEqualFold(ffj_key_Status_Favorited, kn) { + currentKey = ffj_t_Status_Favorited + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_Status_Entities, kn) { + currentKey = ffj_t_Status_Entities + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.AsciiEqualFold(ffj_key_Status_CreatedAt, kn) { + currentKey = ffj_t_Status_CreatedAt + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_Status_Coordinates, kn) { + currentKey = ffj_t_Status_Coordinates + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_Status_Contributors, kn) { + currentKey = ffj_t_Status_Contributors + state = fflib.FFParse_want_colon + goto mainparse + } + + currentKey = ffj_t_Statusno_such_key + state = fflib.FFParse_want_colon + goto mainparse + } + + case fflib.FFParse_want_colon: + if tok != fflib.FFTok_colon { + wantedTok = fflib.FFTok_colon + goto wrongtokenerror + } + state = fflib.FFParse_want_value + continue + case fflib.FFParse_want_value: + + if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null { + switch currentKey { + + case ffj_t_Status_Contributors: + goto handle_Contributors + + case ffj_t_Status_Coordinates: + goto handle_Coordinates + + case ffj_t_Status_CreatedAt: + goto handle_CreatedAt + + case ffj_t_Status_Entities: + goto handle_Entities + + case ffj_t_Status_Favorited: + goto handle_Favorited + + case ffj_t_Status_Geo: + goto handle_Geo + + case ffj_t_Status_ID: + goto handle_ID + + case ffj_t_Status_IDStr: + goto handle_IDStr + + case ffj_t_Status_InReplyToScreenName: + goto handle_InReplyToScreenName + + case ffj_t_Status_InReplyToStatusID: + goto handle_InReplyToStatusID + + case ffj_t_Status_InReplyToStatusIDStr: + goto handle_InReplyToStatusIDStr + + case ffj_t_Status_InReplyToUserID: + goto handle_InReplyToUserID + + case ffj_t_Status_InReplyToUserIDStr: + goto handle_InReplyToUserIDStr + + case ffj_t_Status_Metadata: + goto handle_Metadata + + case ffj_t_Status_Place: + goto handle_Place + + case ffj_t_Status_RetweetCount: + goto handle_RetweetCount + + case ffj_t_Status_Retweeted: + goto handle_Retweeted + + case ffj_t_Status_Source: + goto handle_Source + + case ffj_t_Status_Text: + goto handle_Text + + case ffj_t_Status_Truncated: + goto handle_Truncated + + case ffj_t_Status_User: + goto handle_User + + case ffj_t_Statusno_such_key: + err = fs.SkipField(tok) + if err != nil { + return fs.WrapErr(err) + } + state = fflib.FFParse_after_value + goto mainparse + } + } else { + goto wantedvalue + } + } + } + +handle_Contributors: + + /* handler: uj.Contributors type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + uj.Contributors = nil + + } else { + + var tval string + outBuf := fs.Output.Bytes() + + tval = string(string(outBuf)) + uj.Contributors = &tval + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_Coordinates: + + /* handler: uj.Coordinates type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + uj.Coordinates = nil + + } else { + + var tval string + outBuf := fs.Output.Bytes() + + tval = string(string(outBuf)) + uj.Coordinates = &tval + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_CreatedAt: + + /* handler: uj.CreatedAt type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + } else { + + outBuf := fs.Output.Bytes() + + uj.CreatedAt = string(string(outBuf)) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_Entities: + + /* handler: uj.Entities type=benchmark.Entities kind=struct quoted=false*/ + + { + if tok == fflib.FFTok_null { + + state = fflib.FFParse_after_value + goto mainparse + } + + err = uj.Entities.UnmarshalJSONFFLexer(fs, fflib.FFParse_want_key) + if err != nil { + return err + } + state = fflib.FFParse_after_value + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_Favorited: + + /* handler: uj.Favorited type=bool kind=bool quoted=false*/ + + { + if tok != fflib.FFTok_bool && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for bool", tok)) + } + } + + { + if tok == fflib.FFTok_null { + + } else { + tmpb := fs.Output.Bytes() + + if bytes.Compare([]byte{'t', 'r', 'u', 'e'}, tmpb) == 0 { + + uj.Favorited = true + + } else if bytes.Compare([]byte{'f', 'a', 'l', 's', 'e'}, tmpb) == 0 { + + uj.Favorited = false + + } else { + err = errors.New("unexpected bytes for true/false value") + return fs.WrapErr(err) + } + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_Geo: + + /* handler: uj.Geo type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + uj.Geo = nil + + } else { + + var tval string + outBuf := fs.Output.Bytes() + + tval = string(string(outBuf)) + uj.Geo = &tval + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_ID: + + /* handler: uj.ID type=int64 kind=int64 quoted=false*/ + + { + if tok != fflib.FFTok_integer && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int64", tok)) + } + } + + { + + if tok == fflib.FFTok_null { + + } else { + + tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64) + + if err != nil { + return fs.WrapErr(err) + } + + uj.ID = int64(tval) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_IDStr: + + /* handler: uj.IDStr type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + } else { + + outBuf := fs.Output.Bytes() + + uj.IDStr = string(string(outBuf)) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_InReplyToScreenName: + + /* handler: uj.InReplyToScreenName type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + uj.InReplyToScreenName = nil + + } else { + + var tval string + outBuf := fs.Output.Bytes() + + tval = string(string(outBuf)) + uj.InReplyToScreenName = &tval + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_InReplyToStatusID: + + /* handler: uj.InReplyToStatusID type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + uj.InReplyToStatusID = nil + + } else { + + var tval string + outBuf := fs.Output.Bytes() + + tval = string(string(outBuf)) + uj.InReplyToStatusID = &tval + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_InReplyToStatusIDStr: + + /* handler: uj.InReplyToStatusIDStr type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + uj.InReplyToStatusIDStr = nil + + } else { + + var tval string + outBuf := fs.Output.Bytes() + + tval = string(string(outBuf)) + uj.InReplyToStatusIDStr = &tval + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_InReplyToUserID: + + /* handler: uj.InReplyToUserID type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + uj.InReplyToUserID = nil + + } else { + + var tval string + outBuf := fs.Output.Bytes() + + tval = string(string(outBuf)) + uj.InReplyToUserID = &tval + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_InReplyToUserIDStr: + + /* handler: uj.InReplyToUserIDStr type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + uj.InReplyToUserIDStr = nil + + } else { + + var tval string + outBuf := fs.Output.Bytes() + + tval = string(string(outBuf)) + uj.InReplyToUserIDStr = &tval + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_Metadata: + + /* handler: uj.Metadata type=benchmark.StatusMetadata kind=struct quoted=false*/ + + { + if tok == fflib.FFTok_null { + + state = fflib.FFParse_after_value + goto mainparse + } + + err = uj.Metadata.UnmarshalJSONFFLexer(fs, fflib.FFParse_want_key) + if err != nil { + return err + } + state = fflib.FFParse_after_value + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_Place: + + /* handler: uj.Place type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + uj.Place = nil + + } else { + + var tval string + outBuf := fs.Output.Bytes() + + tval = string(string(outBuf)) + uj.Place = &tval + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_RetweetCount: + + /* handler: uj.RetweetCount type=int kind=int quoted=false*/ + + { + if tok != fflib.FFTok_integer && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok)) + } + } + + { + + if tok == fflib.FFTok_null { + + } else { + + tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64) + + if err != nil { + return fs.WrapErr(err) + } + + uj.RetweetCount = int(tval) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_Retweeted: + + /* handler: uj.Retweeted type=bool kind=bool quoted=false*/ + + { + if tok != fflib.FFTok_bool && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for bool", tok)) + } + } + + { + if tok == fflib.FFTok_null { + + } else { + tmpb := fs.Output.Bytes() + + if bytes.Compare([]byte{'t', 'r', 'u', 'e'}, tmpb) == 0 { + + uj.Retweeted = true + + } else if bytes.Compare([]byte{'f', 'a', 'l', 's', 'e'}, tmpb) == 0 { + + uj.Retweeted = false + + } else { + err = errors.New("unexpected bytes for true/false value") + return fs.WrapErr(err) + } + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_Source: + + /* handler: uj.Source type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + } else { + + outBuf := fs.Output.Bytes() + + uj.Source = string(string(outBuf)) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_Text: + + /* handler: uj.Text type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + } else { + + outBuf := fs.Output.Bytes() + + uj.Text = string(string(outBuf)) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_Truncated: + + /* handler: uj.Truncated type=bool kind=bool quoted=false*/ + + { + if tok != fflib.FFTok_bool && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for bool", tok)) + } + } + + { + if tok == fflib.FFTok_null { + + } else { + tmpb := fs.Output.Bytes() + + if bytes.Compare([]byte{'t', 'r', 'u', 'e'}, tmpb) == 0 { + + uj.Truncated = true + + } else if bytes.Compare([]byte{'f', 'a', 'l', 's', 'e'}, tmpb) == 0 { + + uj.Truncated = false + + } else { + err = errors.New("unexpected bytes for true/false value") + return fs.WrapErr(err) + } + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_User: + + /* handler: uj.User type=benchmark.User kind=struct quoted=false*/ + + { + if tok == fflib.FFTok_null { + + state = fflib.FFParse_after_value + goto mainparse + } + + err = uj.User.UnmarshalJSONFFLexer(fs, fflib.FFParse_want_key) + if err != nil { + return err + } + state = fflib.FFParse_after_value + } + + state = fflib.FFParse_after_value + goto mainparse + +wantedvalue: + return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) +wrongtokenerror: + return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String())) +tokerror: + if fs.BigError != nil { + return fs.WrapErr(fs.BigError) + } + err = fs.Error.ToError() + if err != nil { + return fs.WrapErr(err) + } + panic("ffjson-generated: unreachable, please report bug.") +done: + return nil +} + +func (mj *StatusMetadata) MarshalJSON() ([]byte, error) { + var buf fflib.Buffer + if mj == nil { + buf.WriteString("null") + return buf.Bytes(), nil + } + err := mj.MarshalJSONBuf(&buf) + if err != nil { + return nil, err + } + return buf.Bytes(), nil +} +func (mj *StatusMetadata) MarshalJSONBuf(buf fflib.EncodingBuffer) error { + if mj == nil { + buf.WriteString("null") + return nil + } + var err error + var obj []byte + _ = obj + _ = err + buf.WriteString(`{"iso_language_code":`) + fflib.WriteJsonString(buf, string(mj.IsoLanguageCode)) + buf.WriteString(`,"result_type":`) + fflib.WriteJsonString(buf, string(mj.ResultType)) + buf.WriteByte('}') + return nil +} + +const ( + ffj_t_StatusMetadatabase = iota + ffj_t_StatusMetadatano_such_key + + ffj_t_StatusMetadata_IsoLanguageCode + + ffj_t_StatusMetadata_ResultType +) + +var ffj_key_StatusMetadata_IsoLanguageCode = []byte("iso_language_code") + +var ffj_key_StatusMetadata_ResultType = []byte("result_type") + +func (uj *StatusMetadata) UnmarshalJSON(input []byte) error { + fs := fflib.NewFFLexer(input) + return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start) +} + +func (uj *StatusMetadata) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error { + var err error = nil + currentKey := ffj_t_StatusMetadatabase + _ = currentKey + tok := fflib.FFTok_init + wantedTok := fflib.FFTok_init + +mainparse: + for { + tok = fs.Scan() + // println(fmt.Sprintf("debug: tok: %v state: %v", tok, state)) + if tok == fflib.FFTok_error { + goto tokerror + } + + switch state { + + case fflib.FFParse_map_start: + if tok != fflib.FFTok_left_bracket { + wantedTok = fflib.FFTok_left_bracket + goto wrongtokenerror + } + state = fflib.FFParse_want_key + continue + + case fflib.FFParse_after_value: + if tok == fflib.FFTok_comma { + state = fflib.FFParse_want_key + } else if tok == fflib.FFTok_right_bracket { + goto done + } else { + wantedTok = fflib.FFTok_comma + goto wrongtokenerror + } + + case fflib.FFParse_want_key: + // json {} ended. goto exit. woo. + if tok == fflib.FFTok_right_bracket { + goto done + } + if tok != fflib.FFTok_string { + wantedTok = fflib.FFTok_string + goto wrongtokenerror + } + + kn := fs.Output.Bytes() + if len(kn) <= 0 { + // "" case. hrm. + currentKey = ffj_t_StatusMetadatano_such_key + state = fflib.FFParse_want_colon + goto mainparse + } else { + switch kn[0] { + + case 'i': + + if bytes.Equal(ffj_key_StatusMetadata_IsoLanguageCode, kn) { + currentKey = ffj_t_StatusMetadata_IsoLanguageCode + state = fflib.FFParse_want_colon + goto mainparse + } + + case 'r': + + if bytes.Equal(ffj_key_StatusMetadata_ResultType, kn) { + currentKey = ffj_t_StatusMetadata_ResultType + state = fflib.FFParse_want_colon + goto mainparse + } + + } + + if fflib.EqualFoldRight(ffj_key_StatusMetadata_ResultType, kn) { + currentKey = ffj_t_StatusMetadata_ResultType + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_StatusMetadata_IsoLanguageCode, kn) { + currentKey = ffj_t_StatusMetadata_IsoLanguageCode + state = fflib.FFParse_want_colon + goto mainparse + } + + currentKey = ffj_t_StatusMetadatano_such_key + state = fflib.FFParse_want_colon + goto mainparse + } + + case fflib.FFParse_want_colon: + if tok != fflib.FFTok_colon { + wantedTok = fflib.FFTok_colon + goto wrongtokenerror + } + state = fflib.FFParse_want_value + continue + case fflib.FFParse_want_value: + + if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null { + switch currentKey { + + case ffj_t_StatusMetadata_IsoLanguageCode: + goto handle_IsoLanguageCode + + case ffj_t_StatusMetadata_ResultType: + goto handle_ResultType + + case ffj_t_StatusMetadatano_such_key: + err = fs.SkipField(tok) + if err != nil { + return fs.WrapErr(err) + } + state = fflib.FFParse_after_value + goto mainparse + } + } else { + goto wantedvalue + } + } + } + +handle_IsoLanguageCode: + + /* handler: uj.IsoLanguageCode type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + } else { + + outBuf := fs.Output.Bytes() + + uj.IsoLanguageCode = string(string(outBuf)) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_ResultType: + + /* handler: uj.ResultType type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + } else { + + outBuf := fs.Output.Bytes() + + uj.ResultType = string(string(outBuf)) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +wantedvalue: + return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) +wrongtokenerror: + return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String())) +tokerror: + if fs.BigError != nil { + return fs.WrapErr(fs.BigError) + } + err = fs.Error.ToError() + if err != nil { + return fs.WrapErr(err) + } + panic("ffjson-generated: unreachable, please report bug.") +done: + return nil +} + +func (mj *URL) MarshalJSON() ([]byte, error) { + var buf fflib.Buffer + if mj == nil { + buf.WriteString("null") + return buf.Bytes(), nil + } + err := mj.MarshalJSONBuf(&buf) + if err != nil { + return nil, err + } + return buf.Bytes(), nil +} +func (mj *URL) MarshalJSONBuf(buf fflib.EncodingBuffer) error { + if mj == nil { + buf.WriteString("null") + return nil + } + var err error + var obj []byte + _ = obj + _ = err + if mj.ExpandedURL != nil { + buf.WriteString(`{"expanded_url":`) + fflib.WriteJsonString(buf, string(*mj.ExpandedURL)) + } else { + buf.WriteString(`{"expanded_url":null`) + } + buf.WriteString(`,"indices":`) + if mj.Indices != nil { + buf.WriteString(`[`) + for i, v := range mj.Indices { + if i != 0 { + buf.WriteString(`,`) + } + fflib.FormatBits2(buf, uint64(v), 10, v < 0) + } + buf.WriteString(`]`) + } else { + buf.WriteString(`null`) + } + buf.WriteString(`,"url":`) + fflib.WriteJsonString(buf, string(mj.URL)) + buf.WriteByte('}') + return nil +} + +const ( + ffj_t_URLbase = iota + ffj_t_URLno_such_key + + ffj_t_URL_ExpandedURL + + ffj_t_URL_Indices + + ffj_t_URL_URL +) + +var ffj_key_URL_ExpandedURL = []byte("expanded_url") + +var ffj_key_URL_Indices = []byte("indices") + +var ffj_key_URL_URL = []byte("url") + +func (uj *URL) UnmarshalJSON(input []byte) error { + fs := fflib.NewFFLexer(input) + return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start) +} + +func (uj *URL) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error { + var err error = nil + currentKey := ffj_t_URLbase + _ = currentKey + tok := fflib.FFTok_init + wantedTok := fflib.FFTok_init + +mainparse: + for { + tok = fs.Scan() + // println(fmt.Sprintf("debug: tok: %v state: %v", tok, state)) + if tok == fflib.FFTok_error { + goto tokerror + } + + switch state { + + case fflib.FFParse_map_start: + if tok != fflib.FFTok_left_bracket { + wantedTok = fflib.FFTok_left_bracket + goto wrongtokenerror + } + state = fflib.FFParse_want_key + continue + + case fflib.FFParse_after_value: + if tok == fflib.FFTok_comma { + state = fflib.FFParse_want_key + } else if tok == fflib.FFTok_right_bracket { + goto done + } else { + wantedTok = fflib.FFTok_comma + goto wrongtokenerror + } + + case fflib.FFParse_want_key: + // json {} ended. goto exit. woo. + if tok == fflib.FFTok_right_bracket { + goto done + } + if tok != fflib.FFTok_string { + wantedTok = fflib.FFTok_string + goto wrongtokenerror + } + + kn := fs.Output.Bytes() + if len(kn) <= 0 { + // "" case. hrm. + currentKey = ffj_t_URLno_such_key + state = fflib.FFParse_want_colon + goto mainparse + } else { + switch kn[0] { + + case 'e': + + if bytes.Equal(ffj_key_URL_ExpandedURL, kn) { + currentKey = ffj_t_URL_ExpandedURL + state = fflib.FFParse_want_colon + goto mainparse + } + + case 'i': + + if bytes.Equal(ffj_key_URL_Indices, kn) { + currentKey = ffj_t_URL_Indices + state = fflib.FFParse_want_colon + goto mainparse + } + + case 'u': + + if bytes.Equal(ffj_key_URL_URL, kn) { + currentKey = ffj_t_URL_URL + state = fflib.FFParse_want_colon + goto mainparse + } + + } + + if fflib.SimpleLetterEqualFold(ffj_key_URL_URL, kn) { + currentKey = ffj_t_URL_URL + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_URL_Indices, kn) { + currentKey = ffj_t_URL_Indices + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.AsciiEqualFold(ffj_key_URL_ExpandedURL, kn) { + currentKey = ffj_t_URL_ExpandedURL + state = fflib.FFParse_want_colon + goto mainparse + } + + currentKey = ffj_t_URLno_such_key + state = fflib.FFParse_want_colon + goto mainparse + } + + case fflib.FFParse_want_colon: + if tok != fflib.FFTok_colon { + wantedTok = fflib.FFTok_colon + goto wrongtokenerror + } + state = fflib.FFParse_want_value + continue + case fflib.FFParse_want_value: + + if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null { + switch currentKey { + + case ffj_t_URL_ExpandedURL: + goto handle_ExpandedURL + + case ffj_t_URL_Indices: + goto handle_Indices + + case ffj_t_URL_URL: + goto handle_URL + + case ffj_t_URLno_such_key: + err = fs.SkipField(tok) + if err != nil { + return fs.WrapErr(err) + } + state = fflib.FFParse_after_value + goto mainparse + } + } else { + goto wantedvalue + } + } + } + +handle_ExpandedURL: + + /* handler: uj.ExpandedURL type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + uj.ExpandedURL = nil + + } else { + + var tval string + outBuf := fs.Output.Bytes() + + tval = string(string(outBuf)) + uj.ExpandedURL = &tval + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_Indices: + + /* handler: uj.Indices type=[]int kind=slice quoted=false*/ + + { + + { + if tok != fflib.FFTok_left_brace && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for ", tok)) + } + } + + if tok == fflib.FFTok_null { + uj.Indices = nil + } else { + + uj.Indices = make([]int, 0) + + wantVal := true + + for { + + var tmp_uj__Indices int + + tok = fs.Scan() + if tok == fflib.FFTok_error { + goto tokerror + } + if tok == fflib.FFTok_right_brace { + break + } + + if tok == fflib.FFTok_comma { + if wantVal == true { + // TODO(pquerna): this isn't an ideal error message, this handles + // things like [,,,] as an array value. + return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) + } + continue + } else { + wantVal = true + } + + /* handler: tmp_uj__Indices type=int kind=int quoted=false*/ + + { + if tok != fflib.FFTok_integer && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok)) + } + } + + { + + if tok == fflib.FFTok_null { + + } else { + + tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64) + + if err != nil { + return fs.WrapErr(err) + } + + tmp_uj__Indices = int(tval) + + } + } + + uj.Indices = append(uj.Indices, tmp_uj__Indices) + wantVal = false + } + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_URL: + + /* handler: uj.URL type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + } else { + + outBuf := fs.Output.Bytes() + + uj.URL = string(string(outBuf)) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +wantedvalue: + return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) +wrongtokenerror: + return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String())) +tokerror: + if fs.BigError != nil { + return fs.WrapErr(fs.BigError) + } + err = fs.Error.ToError() + if err != nil { + return fs.WrapErr(err) + } + panic("ffjson-generated: unreachable, please report bug.") +done: + return nil +} + +func (mj *User) MarshalJSON() ([]byte, error) { + var buf fflib.Buffer + if mj == nil { + buf.WriteString("null") + return buf.Bytes(), nil + } + err := mj.MarshalJSONBuf(&buf) + if err != nil { + return nil, err + } + return buf.Bytes(), nil +} +func (mj *User) MarshalJSONBuf(buf fflib.EncodingBuffer) error { + if mj == nil { + buf.WriteString("null") + return nil + } + var err error + var obj []byte + _ = obj + _ = err + if mj.ContributorsEnabled { + buf.WriteString(`{"contributors_enabled":true`) + } else { + buf.WriteString(`{"contributors_enabled":false`) + } + buf.WriteString(`,"created_at":`) + fflib.WriteJsonString(buf, string(mj.CreatedAt)) + if mj.DefaultProfile { + buf.WriteString(`,"default_profile":true`) + } else { + buf.WriteString(`,"default_profile":false`) + } + if mj.DefaultProfileImage { + buf.WriteString(`,"default_profile_image":true`) + } else { + buf.WriteString(`,"default_profile_image":false`) + } + buf.WriteString(`,"description":`) + fflib.WriteJsonString(buf, string(mj.Description)) + buf.WriteString(`,"entities":`) + + { + + err = mj.Entities.MarshalJSONBuf(buf) + if err != nil { + return err + } + + } + buf.WriteString(`,"favourites_count":`) + fflib.FormatBits2(buf, uint64(mj.FavouritesCount), 10, mj.FavouritesCount < 0) + if mj.FollowRequestSent != nil { + buf.WriteString(`,"follow_request_sent":`) + fflib.WriteJsonString(buf, string(*mj.FollowRequestSent)) + } else { + buf.WriteString(`,"follow_request_sent":null`) + } + buf.WriteString(`,"followers_count":`) + fflib.FormatBits2(buf, uint64(mj.FollowersCount), 10, mj.FollowersCount < 0) + if mj.Following != nil { + buf.WriteString(`,"following":`) + fflib.WriteJsonString(buf, string(*mj.Following)) + } else { + buf.WriteString(`,"following":null`) + } + buf.WriteString(`,"friends_count":`) + fflib.FormatBits2(buf, uint64(mj.FriendsCount), 10, mj.FriendsCount < 0) + if mj.GeoEnabled { + buf.WriteString(`,"geo_enabled":true`) + } else { + buf.WriteString(`,"geo_enabled":false`) + } + buf.WriteString(`,"id":`) + fflib.FormatBits2(buf, uint64(mj.ID), 10, mj.ID < 0) + buf.WriteString(`,"id_str":`) + fflib.WriteJsonString(buf, string(mj.IDStr)) + if mj.IsTranslator { + buf.WriteString(`,"is_translator":true`) + } else { + buf.WriteString(`,"is_translator":false`) + } + buf.WriteString(`,"lang":`) + fflib.WriteJsonString(buf, string(mj.Lang)) + buf.WriteString(`,"listed_count":`) + fflib.FormatBits2(buf, uint64(mj.ListedCount), 10, mj.ListedCount < 0) + buf.WriteString(`,"location":`) + fflib.WriteJsonString(buf, string(mj.Location)) + buf.WriteString(`,"name":`) + fflib.WriteJsonString(buf, string(mj.Name)) + if mj.Notifications != nil { + buf.WriteString(`,"notifications":`) + fflib.WriteJsonString(buf, string(*mj.Notifications)) + } else { + buf.WriteString(`,"notifications":null`) + } + buf.WriteString(`,"profile_background_color":`) + fflib.WriteJsonString(buf, string(mj.ProfileBackgroundColor)) + buf.WriteString(`,"profile_background_image_url":`) + fflib.WriteJsonString(buf, string(mj.ProfileBackgroundImageURL)) + buf.WriteString(`,"profile_background_image_url_https":`) + fflib.WriteJsonString(buf, string(mj.ProfileBackgroundImageURLHTTPS)) + if mj.ProfileBackgroundTile { + buf.WriteString(`,"profile_background_tile":true`) + } else { + buf.WriteString(`,"profile_background_tile":false`) + } + buf.WriteString(`,"profile_image_url":`) + fflib.WriteJsonString(buf, string(mj.ProfileImageURL)) + buf.WriteString(`,"profile_image_url_https":`) + fflib.WriteJsonString(buf, string(mj.ProfileImageURLHTTPS)) + buf.WriteString(`,"profile_link_color":`) + fflib.WriteJsonString(buf, string(mj.ProfileLinkColor)) + buf.WriteString(`,"profile_sidebar_border_color":`) + fflib.WriteJsonString(buf, string(mj.ProfileSidebarBorderColor)) + buf.WriteString(`,"profile_sidebar_fill_color":`) + fflib.WriteJsonString(buf, string(mj.ProfileSidebarFillColor)) + buf.WriteString(`,"profile_text_color":`) + fflib.WriteJsonString(buf, string(mj.ProfileTextColor)) + if mj.ProfileUseBackgroundImage { + buf.WriteString(`,"profile_use_background_image":true`) + } else { + buf.WriteString(`,"profile_use_background_image":false`) + } + if mj.Protected { + buf.WriteString(`,"protected":true`) + } else { + buf.WriteString(`,"protected":false`) + } + buf.WriteString(`,"screen_name":`) + fflib.WriteJsonString(buf, string(mj.ScreenName)) + if mj.ShowAllInlineMedia { + buf.WriteString(`,"show_all_inline_media":true`) + } else { + buf.WriteString(`,"show_all_inline_media":false`) + } + buf.WriteString(`,"statuses_count":`) + fflib.FormatBits2(buf, uint64(mj.StatusesCount), 10, mj.StatusesCount < 0) + buf.WriteString(`,"time_zone":`) + fflib.WriteJsonString(buf, string(mj.TimeZone)) + if mj.URL != nil { + buf.WriteString(`,"url":`) + fflib.WriteJsonString(buf, string(*mj.URL)) + } else { + buf.WriteString(`,"url":null`) + } + buf.WriteString(`,"utc_offset":`) + fflib.FormatBits2(buf, uint64(mj.UtcOffset), 10, mj.UtcOffset < 0) + if mj.Verified { + buf.WriteString(`,"verified":true`) + } else { + buf.WriteString(`,"verified":false`) + } + buf.WriteByte('}') + return nil +} + +const ( + ffj_t_Userbase = iota + ffj_t_Userno_such_key + + ffj_t_User_ContributorsEnabled + + ffj_t_User_CreatedAt + + ffj_t_User_DefaultProfile + + ffj_t_User_DefaultProfileImage + + ffj_t_User_Description + + ffj_t_User_Entities + + ffj_t_User_FavouritesCount + + ffj_t_User_FollowRequestSent + + ffj_t_User_FollowersCount + + ffj_t_User_Following + + ffj_t_User_FriendsCount + + ffj_t_User_GeoEnabled + + ffj_t_User_ID + + ffj_t_User_IDStr + + ffj_t_User_IsTranslator + + ffj_t_User_Lang + + ffj_t_User_ListedCount + + ffj_t_User_Location + + ffj_t_User_Name + + ffj_t_User_Notifications + + ffj_t_User_ProfileBackgroundColor + + ffj_t_User_ProfileBackgroundImageURL + + ffj_t_User_ProfileBackgroundImageURLHTTPS + + ffj_t_User_ProfileBackgroundTile + + ffj_t_User_ProfileImageURL + + ffj_t_User_ProfileImageURLHTTPS + + ffj_t_User_ProfileLinkColor + + ffj_t_User_ProfileSidebarBorderColor + + ffj_t_User_ProfileSidebarFillColor + + ffj_t_User_ProfileTextColor + + ffj_t_User_ProfileUseBackgroundImage + + ffj_t_User_Protected + + ffj_t_User_ScreenName + + ffj_t_User_ShowAllInlineMedia + + ffj_t_User_StatusesCount + + ffj_t_User_TimeZone + + ffj_t_User_URL + + ffj_t_User_UtcOffset + + ffj_t_User_Verified +) + +var ffj_key_User_ContributorsEnabled = []byte("contributors_enabled") + +var ffj_key_User_CreatedAt = []byte("created_at") + +var ffj_key_User_DefaultProfile = []byte("default_profile") + +var ffj_key_User_DefaultProfileImage = []byte("default_profile_image") + +var ffj_key_User_Description = []byte("description") + +var ffj_key_User_Entities = []byte("entities") + +var ffj_key_User_FavouritesCount = []byte("favourites_count") + +var ffj_key_User_FollowRequestSent = []byte("follow_request_sent") + +var ffj_key_User_FollowersCount = []byte("followers_count") + +var ffj_key_User_Following = []byte("following") + +var ffj_key_User_FriendsCount = []byte("friends_count") + +var ffj_key_User_GeoEnabled = []byte("geo_enabled") + +var ffj_key_User_ID = []byte("id") + +var ffj_key_User_IDStr = []byte("id_str") + +var ffj_key_User_IsTranslator = []byte("is_translator") + +var ffj_key_User_Lang = []byte("lang") + +var ffj_key_User_ListedCount = []byte("listed_count") + +var ffj_key_User_Location = []byte("location") + +var ffj_key_User_Name = []byte("name") + +var ffj_key_User_Notifications = []byte("notifications") + +var ffj_key_User_ProfileBackgroundColor = []byte("profile_background_color") + +var ffj_key_User_ProfileBackgroundImageURL = []byte("profile_background_image_url") + +var ffj_key_User_ProfileBackgroundImageURLHTTPS = []byte("profile_background_image_url_https") + +var ffj_key_User_ProfileBackgroundTile = []byte("profile_background_tile") + +var ffj_key_User_ProfileImageURL = []byte("profile_image_url") + +var ffj_key_User_ProfileImageURLHTTPS = []byte("profile_image_url_https") + +var ffj_key_User_ProfileLinkColor = []byte("profile_link_color") + +var ffj_key_User_ProfileSidebarBorderColor = []byte("profile_sidebar_border_color") + +var ffj_key_User_ProfileSidebarFillColor = []byte("profile_sidebar_fill_color") + +var ffj_key_User_ProfileTextColor = []byte("profile_text_color") + +var ffj_key_User_ProfileUseBackgroundImage = []byte("profile_use_background_image") + +var ffj_key_User_Protected = []byte("protected") + +var ffj_key_User_ScreenName = []byte("screen_name") + +var ffj_key_User_ShowAllInlineMedia = []byte("show_all_inline_media") + +var ffj_key_User_StatusesCount = []byte("statuses_count") + +var ffj_key_User_TimeZone = []byte("time_zone") + +var ffj_key_User_URL = []byte("url") + +var ffj_key_User_UtcOffset = []byte("utc_offset") + +var ffj_key_User_Verified = []byte("verified") + +func (uj *User) UnmarshalJSON(input []byte) error { + fs := fflib.NewFFLexer(input) + return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start) +} + +func (uj *User) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error { + var err error = nil + currentKey := ffj_t_Userbase + _ = currentKey + tok := fflib.FFTok_init + wantedTok := fflib.FFTok_init + +mainparse: + for { + tok = fs.Scan() + // println(fmt.Sprintf("debug: tok: %v state: %v", tok, state)) + if tok == fflib.FFTok_error { + goto tokerror + } + + switch state { + + case fflib.FFParse_map_start: + if tok != fflib.FFTok_left_bracket { + wantedTok = fflib.FFTok_left_bracket + goto wrongtokenerror + } + state = fflib.FFParse_want_key + continue + + case fflib.FFParse_after_value: + if tok == fflib.FFTok_comma { + state = fflib.FFParse_want_key + } else if tok == fflib.FFTok_right_bracket { + goto done + } else { + wantedTok = fflib.FFTok_comma + goto wrongtokenerror + } + + case fflib.FFParse_want_key: + // json {} ended. goto exit. woo. + if tok == fflib.FFTok_right_bracket { + goto done + } + if tok != fflib.FFTok_string { + wantedTok = fflib.FFTok_string + goto wrongtokenerror + } + + kn := fs.Output.Bytes() + if len(kn) <= 0 { + // "" case. hrm. + currentKey = ffj_t_Userno_such_key + state = fflib.FFParse_want_colon + goto mainparse + } else { + switch kn[0] { + + case 'c': + + if bytes.Equal(ffj_key_User_ContributorsEnabled, kn) { + currentKey = ffj_t_User_ContributorsEnabled + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_User_CreatedAt, kn) { + currentKey = ffj_t_User_CreatedAt + state = fflib.FFParse_want_colon + goto mainparse + } + + case 'd': + + if bytes.Equal(ffj_key_User_DefaultProfile, kn) { + currentKey = ffj_t_User_DefaultProfile + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_User_DefaultProfileImage, kn) { + currentKey = ffj_t_User_DefaultProfileImage + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_User_Description, kn) { + currentKey = ffj_t_User_Description + state = fflib.FFParse_want_colon + goto mainparse + } + + case 'e': + + if bytes.Equal(ffj_key_User_Entities, kn) { + currentKey = ffj_t_User_Entities + state = fflib.FFParse_want_colon + goto mainparse + } + + case 'f': + + if bytes.Equal(ffj_key_User_FavouritesCount, kn) { + currentKey = ffj_t_User_FavouritesCount + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_User_FollowRequestSent, kn) { + currentKey = ffj_t_User_FollowRequestSent + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_User_FollowersCount, kn) { + currentKey = ffj_t_User_FollowersCount + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_User_Following, kn) { + currentKey = ffj_t_User_Following + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_User_FriendsCount, kn) { + currentKey = ffj_t_User_FriendsCount + state = fflib.FFParse_want_colon + goto mainparse + } + + case 'g': + + if bytes.Equal(ffj_key_User_GeoEnabled, kn) { + currentKey = ffj_t_User_GeoEnabled + state = fflib.FFParse_want_colon + goto mainparse + } + + case 'i': + + if bytes.Equal(ffj_key_User_ID, kn) { + currentKey = ffj_t_User_ID + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_User_IDStr, kn) { + currentKey = ffj_t_User_IDStr + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_User_IsTranslator, kn) { + currentKey = ffj_t_User_IsTranslator + state = fflib.FFParse_want_colon + goto mainparse + } + + case 'l': + + if bytes.Equal(ffj_key_User_Lang, kn) { + currentKey = ffj_t_User_Lang + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_User_ListedCount, kn) { + currentKey = ffj_t_User_ListedCount + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_User_Location, kn) { + currentKey = ffj_t_User_Location + state = fflib.FFParse_want_colon + goto mainparse + } + + case 'n': + + if bytes.Equal(ffj_key_User_Name, kn) { + currentKey = ffj_t_User_Name + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_User_Notifications, kn) { + currentKey = ffj_t_User_Notifications + state = fflib.FFParse_want_colon + goto mainparse + } + + case 'p': + + if bytes.Equal(ffj_key_User_ProfileBackgroundColor, kn) { + currentKey = ffj_t_User_ProfileBackgroundColor + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_User_ProfileBackgroundImageURL, kn) { + currentKey = ffj_t_User_ProfileBackgroundImageURL + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_User_ProfileBackgroundImageURLHTTPS, kn) { + currentKey = ffj_t_User_ProfileBackgroundImageURLHTTPS + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_User_ProfileBackgroundTile, kn) { + currentKey = ffj_t_User_ProfileBackgroundTile + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_User_ProfileImageURL, kn) { + currentKey = ffj_t_User_ProfileImageURL + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_User_ProfileImageURLHTTPS, kn) { + currentKey = ffj_t_User_ProfileImageURLHTTPS + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_User_ProfileLinkColor, kn) { + currentKey = ffj_t_User_ProfileLinkColor + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_User_ProfileSidebarBorderColor, kn) { + currentKey = ffj_t_User_ProfileSidebarBorderColor + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_User_ProfileSidebarFillColor, kn) { + currentKey = ffj_t_User_ProfileSidebarFillColor + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_User_ProfileTextColor, kn) { + currentKey = ffj_t_User_ProfileTextColor + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_User_ProfileUseBackgroundImage, kn) { + currentKey = ffj_t_User_ProfileUseBackgroundImage + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_User_Protected, kn) { + currentKey = ffj_t_User_Protected + state = fflib.FFParse_want_colon + goto mainparse + } + + case 's': + + if bytes.Equal(ffj_key_User_ScreenName, kn) { + currentKey = ffj_t_User_ScreenName + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_User_ShowAllInlineMedia, kn) { + currentKey = ffj_t_User_ShowAllInlineMedia + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_User_StatusesCount, kn) { + currentKey = ffj_t_User_StatusesCount + state = fflib.FFParse_want_colon + goto mainparse + } + + case 't': + + if bytes.Equal(ffj_key_User_TimeZone, kn) { + currentKey = ffj_t_User_TimeZone + state = fflib.FFParse_want_colon + goto mainparse + } + + case 'u': + + if bytes.Equal(ffj_key_User_URL, kn) { + currentKey = ffj_t_User_URL + state = fflib.FFParse_want_colon + goto mainparse + + } else if bytes.Equal(ffj_key_User_UtcOffset, kn) { + currentKey = ffj_t_User_UtcOffset + state = fflib.FFParse_want_colon + goto mainparse + } + + case 'v': + + if bytes.Equal(ffj_key_User_Verified, kn) { + currentKey = ffj_t_User_Verified + state = fflib.FFParse_want_colon + goto mainparse + } + + } + + if fflib.SimpleLetterEqualFold(ffj_key_User_Verified, kn) { + currentKey = ffj_t_User_Verified + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_User_UtcOffset, kn) { + currentKey = ffj_t_User_UtcOffset + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.SimpleLetterEqualFold(ffj_key_User_URL, kn) { + currentKey = ffj_t_User_URL + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.AsciiEqualFold(ffj_key_User_TimeZone, kn) { + currentKey = ffj_t_User_TimeZone + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_User_StatusesCount, kn) { + currentKey = ffj_t_User_StatusesCount + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_User_ShowAllInlineMedia, kn) { + currentKey = ffj_t_User_ShowAllInlineMedia + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_User_ScreenName, kn) { + currentKey = ffj_t_User_ScreenName + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.SimpleLetterEqualFold(ffj_key_User_Protected, kn) { + currentKey = ffj_t_User_Protected + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_User_ProfileUseBackgroundImage, kn) { + currentKey = ffj_t_User_ProfileUseBackgroundImage + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.AsciiEqualFold(ffj_key_User_ProfileTextColor, kn) { + currentKey = ffj_t_User_ProfileTextColor + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_User_ProfileSidebarFillColor, kn) { + currentKey = ffj_t_User_ProfileSidebarFillColor + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_User_ProfileSidebarBorderColor, kn) { + currentKey = ffj_t_User_ProfileSidebarBorderColor + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_User_ProfileLinkColor, kn) { + currentKey = ffj_t_User_ProfileLinkColor + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_User_ProfileImageURLHTTPS, kn) { + currentKey = ffj_t_User_ProfileImageURLHTTPS + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.AsciiEqualFold(ffj_key_User_ProfileImageURL, kn) { + currentKey = ffj_t_User_ProfileImageURL + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_User_ProfileBackgroundTile, kn) { + currentKey = ffj_t_User_ProfileBackgroundTile + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_User_ProfileBackgroundImageURLHTTPS, kn) { + currentKey = ffj_t_User_ProfileBackgroundImageURLHTTPS + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_User_ProfileBackgroundImageURL, kn) { + currentKey = ffj_t_User_ProfileBackgroundImageURL + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_User_ProfileBackgroundColor, kn) { + currentKey = ffj_t_User_ProfileBackgroundColor + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_User_Notifications, kn) { + currentKey = ffj_t_User_Notifications + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.SimpleLetterEqualFold(ffj_key_User_Name, kn) { + currentKey = ffj_t_User_Name + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.SimpleLetterEqualFold(ffj_key_User_Location, kn) { + currentKey = ffj_t_User_Location + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_User_ListedCount, kn) { + currentKey = ffj_t_User_ListedCount + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.SimpleLetterEqualFold(ffj_key_User_Lang, kn) { + currentKey = ffj_t_User_Lang + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_User_IsTranslator, kn) { + currentKey = ffj_t_User_IsTranslator + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_User_IDStr, kn) { + currentKey = ffj_t_User_IDStr + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.SimpleLetterEqualFold(ffj_key_User_ID, kn) { + currentKey = ffj_t_User_ID + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.AsciiEqualFold(ffj_key_User_GeoEnabled, kn) { + currentKey = ffj_t_User_GeoEnabled + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_User_FriendsCount, kn) { + currentKey = ffj_t_User_FriendsCount + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.SimpleLetterEqualFold(ffj_key_User_Following, kn) { + currentKey = ffj_t_User_Following + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_User_FollowersCount, kn) { + currentKey = ffj_t_User_FollowersCount + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_User_FollowRequestSent, kn) { + currentKey = ffj_t_User_FollowRequestSent + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_User_FavouritesCount, kn) { + currentKey = ffj_t_User_FavouritesCount + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_User_Entities, kn) { + currentKey = ffj_t_User_Entities + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_User_Description, kn) { + currentKey = ffj_t_User_Description + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.AsciiEqualFold(ffj_key_User_DefaultProfileImage, kn) { + currentKey = ffj_t_User_DefaultProfileImage + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.AsciiEqualFold(ffj_key_User_DefaultProfile, kn) { + currentKey = ffj_t_User_DefaultProfile + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.AsciiEqualFold(ffj_key_User_CreatedAt, kn) { + currentKey = ffj_t_User_CreatedAt + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_User_ContributorsEnabled, kn) { + currentKey = ffj_t_User_ContributorsEnabled + state = fflib.FFParse_want_colon + goto mainparse + } + + currentKey = ffj_t_Userno_such_key + state = fflib.FFParse_want_colon + goto mainparse + } + + case fflib.FFParse_want_colon: + if tok != fflib.FFTok_colon { + wantedTok = fflib.FFTok_colon + goto wrongtokenerror + } + state = fflib.FFParse_want_value + continue + case fflib.FFParse_want_value: + + if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null { + switch currentKey { + + case ffj_t_User_ContributorsEnabled: + goto handle_ContributorsEnabled + + case ffj_t_User_CreatedAt: + goto handle_CreatedAt + + case ffj_t_User_DefaultProfile: + goto handle_DefaultProfile + + case ffj_t_User_DefaultProfileImage: + goto handle_DefaultProfileImage + + case ffj_t_User_Description: + goto handle_Description + + case ffj_t_User_Entities: + goto handle_Entities + + case ffj_t_User_FavouritesCount: + goto handle_FavouritesCount + + case ffj_t_User_FollowRequestSent: + goto handle_FollowRequestSent + + case ffj_t_User_FollowersCount: + goto handle_FollowersCount + + case ffj_t_User_Following: + goto handle_Following + + case ffj_t_User_FriendsCount: + goto handle_FriendsCount + + case ffj_t_User_GeoEnabled: + goto handle_GeoEnabled + + case ffj_t_User_ID: + goto handle_ID + + case ffj_t_User_IDStr: + goto handle_IDStr + + case ffj_t_User_IsTranslator: + goto handle_IsTranslator + + case ffj_t_User_Lang: + goto handle_Lang + + case ffj_t_User_ListedCount: + goto handle_ListedCount + + case ffj_t_User_Location: + goto handle_Location + + case ffj_t_User_Name: + goto handle_Name + + case ffj_t_User_Notifications: + goto handle_Notifications + + case ffj_t_User_ProfileBackgroundColor: + goto handle_ProfileBackgroundColor + + case ffj_t_User_ProfileBackgroundImageURL: + goto handle_ProfileBackgroundImageURL + + case ffj_t_User_ProfileBackgroundImageURLHTTPS: + goto handle_ProfileBackgroundImageURLHTTPS + + case ffj_t_User_ProfileBackgroundTile: + goto handle_ProfileBackgroundTile + + case ffj_t_User_ProfileImageURL: + goto handle_ProfileImageURL + + case ffj_t_User_ProfileImageURLHTTPS: + goto handle_ProfileImageURLHTTPS + + case ffj_t_User_ProfileLinkColor: + goto handle_ProfileLinkColor + + case ffj_t_User_ProfileSidebarBorderColor: + goto handle_ProfileSidebarBorderColor + + case ffj_t_User_ProfileSidebarFillColor: + goto handle_ProfileSidebarFillColor + + case ffj_t_User_ProfileTextColor: + goto handle_ProfileTextColor + + case ffj_t_User_ProfileUseBackgroundImage: + goto handle_ProfileUseBackgroundImage + + case ffj_t_User_Protected: + goto handle_Protected + + case ffj_t_User_ScreenName: + goto handle_ScreenName + + case ffj_t_User_ShowAllInlineMedia: + goto handle_ShowAllInlineMedia + + case ffj_t_User_StatusesCount: + goto handle_StatusesCount + + case ffj_t_User_TimeZone: + goto handle_TimeZone + + case ffj_t_User_URL: + goto handle_URL + + case ffj_t_User_UtcOffset: + goto handle_UtcOffset + + case ffj_t_User_Verified: + goto handle_Verified + + case ffj_t_Userno_such_key: + err = fs.SkipField(tok) + if err != nil { + return fs.WrapErr(err) + } + state = fflib.FFParse_after_value + goto mainparse + } + } else { + goto wantedvalue + } + } + } + +handle_ContributorsEnabled: + + /* handler: uj.ContributorsEnabled type=bool kind=bool quoted=false*/ + + { + if tok != fflib.FFTok_bool && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for bool", tok)) + } + } + + { + if tok == fflib.FFTok_null { + + } else { + tmpb := fs.Output.Bytes() + + if bytes.Compare([]byte{'t', 'r', 'u', 'e'}, tmpb) == 0 { + + uj.ContributorsEnabled = true + + } else if bytes.Compare([]byte{'f', 'a', 'l', 's', 'e'}, tmpb) == 0 { + + uj.ContributorsEnabled = false + + } else { + err = errors.New("unexpected bytes for true/false value") + return fs.WrapErr(err) + } + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_CreatedAt: + + /* handler: uj.CreatedAt type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + } else { + + outBuf := fs.Output.Bytes() + + uj.CreatedAt = string(string(outBuf)) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_DefaultProfile: + + /* handler: uj.DefaultProfile type=bool kind=bool quoted=false*/ + + { + if tok != fflib.FFTok_bool && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for bool", tok)) + } + } + + { + if tok == fflib.FFTok_null { + + } else { + tmpb := fs.Output.Bytes() + + if bytes.Compare([]byte{'t', 'r', 'u', 'e'}, tmpb) == 0 { + + uj.DefaultProfile = true + + } else if bytes.Compare([]byte{'f', 'a', 'l', 's', 'e'}, tmpb) == 0 { + + uj.DefaultProfile = false + + } else { + err = errors.New("unexpected bytes for true/false value") + return fs.WrapErr(err) + } + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_DefaultProfileImage: + + /* handler: uj.DefaultProfileImage type=bool kind=bool quoted=false*/ + + { + if tok != fflib.FFTok_bool && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for bool", tok)) + } + } + + { + if tok == fflib.FFTok_null { + + } else { + tmpb := fs.Output.Bytes() + + if bytes.Compare([]byte{'t', 'r', 'u', 'e'}, tmpb) == 0 { + + uj.DefaultProfileImage = true + + } else if bytes.Compare([]byte{'f', 'a', 'l', 's', 'e'}, tmpb) == 0 { + + uj.DefaultProfileImage = false + + } else { + err = errors.New("unexpected bytes for true/false value") + return fs.WrapErr(err) + } + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_Description: + + /* handler: uj.Description type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + } else { + + outBuf := fs.Output.Bytes() + + uj.Description = string(string(outBuf)) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_Entities: + + /* handler: uj.Entities type=benchmark.UserEntities kind=struct quoted=false*/ + + { + if tok == fflib.FFTok_null { + + state = fflib.FFParse_after_value + goto mainparse + } + + err = uj.Entities.UnmarshalJSONFFLexer(fs, fflib.FFParse_want_key) + if err != nil { + return err + } + state = fflib.FFParse_after_value + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_FavouritesCount: + + /* handler: uj.FavouritesCount type=int kind=int quoted=false*/ + + { + if tok != fflib.FFTok_integer && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok)) + } + } + + { + + if tok == fflib.FFTok_null { + + } else { + + tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64) + + if err != nil { + return fs.WrapErr(err) + } + + uj.FavouritesCount = int(tval) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_FollowRequestSent: + + /* handler: uj.FollowRequestSent type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + uj.FollowRequestSent = nil + + } else { + + var tval string + outBuf := fs.Output.Bytes() + + tval = string(string(outBuf)) + uj.FollowRequestSent = &tval + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_FollowersCount: + + /* handler: uj.FollowersCount type=int kind=int quoted=false*/ + + { + if tok != fflib.FFTok_integer && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok)) + } + } + + { + + if tok == fflib.FFTok_null { + + } else { + + tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64) + + if err != nil { + return fs.WrapErr(err) + } + + uj.FollowersCount = int(tval) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_Following: + + /* handler: uj.Following type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + uj.Following = nil + + } else { + + var tval string + outBuf := fs.Output.Bytes() + + tval = string(string(outBuf)) + uj.Following = &tval + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_FriendsCount: + + /* handler: uj.FriendsCount type=int kind=int quoted=false*/ + + { + if tok != fflib.FFTok_integer && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok)) + } + } + + { + + if tok == fflib.FFTok_null { + + } else { + + tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64) + + if err != nil { + return fs.WrapErr(err) + } + + uj.FriendsCount = int(tval) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_GeoEnabled: + + /* handler: uj.GeoEnabled type=bool kind=bool quoted=false*/ + + { + if tok != fflib.FFTok_bool && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for bool", tok)) + } + } + + { + if tok == fflib.FFTok_null { + + } else { + tmpb := fs.Output.Bytes() + + if bytes.Compare([]byte{'t', 'r', 'u', 'e'}, tmpb) == 0 { + + uj.GeoEnabled = true + + } else if bytes.Compare([]byte{'f', 'a', 'l', 's', 'e'}, tmpb) == 0 { + + uj.GeoEnabled = false + + } else { + err = errors.New("unexpected bytes for true/false value") + return fs.WrapErr(err) + } + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_ID: + + /* handler: uj.ID type=int kind=int quoted=false*/ + + { + if tok != fflib.FFTok_integer && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok)) + } + } + + { + + if tok == fflib.FFTok_null { + + } else { + + tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64) + + if err != nil { + return fs.WrapErr(err) + } + + uj.ID = int(tval) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_IDStr: + + /* handler: uj.IDStr type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + } else { + + outBuf := fs.Output.Bytes() + + uj.IDStr = string(string(outBuf)) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_IsTranslator: + + /* handler: uj.IsTranslator type=bool kind=bool quoted=false*/ + + { + if tok != fflib.FFTok_bool && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for bool", tok)) + } + } + + { + if tok == fflib.FFTok_null { + + } else { + tmpb := fs.Output.Bytes() + + if bytes.Compare([]byte{'t', 'r', 'u', 'e'}, tmpb) == 0 { + + uj.IsTranslator = true + + } else if bytes.Compare([]byte{'f', 'a', 'l', 's', 'e'}, tmpb) == 0 { + + uj.IsTranslator = false + + } else { + err = errors.New("unexpected bytes for true/false value") + return fs.WrapErr(err) + } + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_Lang: + + /* handler: uj.Lang type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + } else { + + outBuf := fs.Output.Bytes() + + uj.Lang = string(string(outBuf)) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_ListedCount: + + /* handler: uj.ListedCount type=int kind=int quoted=false*/ + + { + if tok != fflib.FFTok_integer && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok)) + } + } + + { + + if tok == fflib.FFTok_null { + + } else { + + tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64) + + if err != nil { + return fs.WrapErr(err) + } + + uj.ListedCount = int(tval) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_Location: + + /* handler: uj.Location type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + } else { + + outBuf := fs.Output.Bytes() + + uj.Location = string(string(outBuf)) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_Name: + + /* handler: uj.Name type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + } else { + + outBuf := fs.Output.Bytes() + + uj.Name = string(string(outBuf)) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_Notifications: + + /* handler: uj.Notifications type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + uj.Notifications = nil + + } else { + + var tval string + outBuf := fs.Output.Bytes() + + tval = string(string(outBuf)) + uj.Notifications = &tval + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_ProfileBackgroundColor: + + /* handler: uj.ProfileBackgroundColor type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + } else { + + outBuf := fs.Output.Bytes() + + uj.ProfileBackgroundColor = string(string(outBuf)) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_ProfileBackgroundImageURL: + + /* handler: uj.ProfileBackgroundImageURL type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + } else { + + outBuf := fs.Output.Bytes() + + uj.ProfileBackgroundImageURL = string(string(outBuf)) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_ProfileBackgroundImageURLHTTPS: + + /* handler: uj.ProfileBackgroundImageURLHTTPS type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + } else { + + outBuf := fs.Output.Bytes() + + uj.ProfileBackgroundImageURLHTTPS = string(string(outBuf)) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_ProfileBackgroundTile: + + /* handler: uj.ProfileBackgroundTile type=bool kind=bool quoted=false*/ + + { + if tok != fflib.FFTok_bool && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for bool", tok)) + } + } + + { + if tok == fflib.FFTok_null { + + } else { + tmpb := fs.Output.Bytes() + + if bytes.Compare([]byte{'t', 'r', 'u', 'e'}, tmpb) == 0 { + + uj.ProfileBackgroundTile = true + + } else if bytes.Compare([]byte{'f', 'a', 'l', 's', 'e'}, tmpb) == 0 { + + uj.ProfileBackgroundTile = false + + } else { + err = errors.New("unexpected bytes for true/false value") + return fs.WrapErr(err) + } + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_ProfileImageURL: + + /* handler: uj.ProfileImageURL type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + } else { + + outBuf := fs.Output.Bytes() + + uj.ProfileImageURL = string(string(outBuf)) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_ProfileImageURLHTTPS: + + /* handler: uj.ProfileImageURLHTTPS type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + } else { + + outBuf := fs.Output.Bytes() + + uj.ProfileImageURLHTTPS = string(string(outBuf)) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_ProfileLinkColor: + + /* handler: uj.ProfileLinkColor type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + } else { + + outBuf := fs.Output.Bytes() + + uj.ProfileLinkColor = string(string(outBuf)) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_ProfileSidebarBorderColor: + + /* handler: uj.ProfileSidebarBorderColor type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + } else { + + outBuf := fs.Output.Bytes() + + uj.ProfileSidebarBorderColor = string(string(outBuf)) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_ProfileSidebarFillColor: + + /* handler: uj.ProfileSidebarFillColor type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + } else { + + outBuf := fs.Output.Bytes() + + uj.ProfileSidebarFillColor = string(string(outBuf)) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_ProfileTextColor: + + /* handler: uj.ProfileTextColor type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + } else { + + outBuf := fs.Output.Bytes() + + uj.ProfileTextColor = string(string(outBuf)) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_ProfileUseBackgroundImage: + + /* handler: uj.ProfileUseBackgroundImage type=bool kind=bool quoted=false*/ + + { + if tok != fflib.FFTok_bool && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for bool", tok)) + } + } + + { + if tok == fflib.FFTok_null { + + } else { + tmpb := fs.Output.Bytes() + + if bytes.Compare([]byte{'t', 'r', 'u', 'e'}, tmpb) == 0 { + + uj.ProfileUseBackgroundImage = true + + } else if bytes.Compare([]byte{'f', 'a', 'l', 's', 'e'}, tmpb) == 0 { + + uj.ProfileUseBackgroundImage = false + + } else { + err = errors.New("unexpected bytes for true/false value") + return fs.WrapErr(err) + } + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_Protected: + + /* handler: uj.Protected type=bool kind=bool quoted=false*/ + + { + if tok != fflib.FFTok_bool && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for bool", tok)) + } + } + + { + if tok == fflib.FFTok_null { + + } else { + tmpb := fs.Output.Bytes() + + if bytes.Compare([]byte{'t', 'r', 'u', 'e'}, tmpb) == 0 { + + uj.Protected = true + + } else if bytes.Compare([]byte{'f', 'a', 'l', 's', 'e'}, tmpb) == 0 { + + uj.Protected = false + + } else { + err = errors.New("unexpected bytes for true/false value") + return fs.WrapErr(err) + } + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_ScreenName: + + /* handler: uj.ScreenName type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + } else { + + outBuf := fs.Output.Bytes() + + uj.ScreenName = string(string(outBuf)) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_ShowAllInlineMedia: + + /* handler: uj.ShowAllInlineMedia type=bool kind=bool quoted=false*/ + + { + if tok != fflib.FFTok_bool && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for bool", tok)) + } + } + + { + if tok == fflib.FFTok_null { + + } else { + tmpb := fs.Output.Bytes() + + if bytes.Compare([]byte{'t', 'r', 'u', 'e'}, tmpb) == 0 { + + uj.ShowAllInlineMedia = true + + } else if bytes.Compare([]byte{'f', 'a', 'l', 's', 'e'}, tmpb) == 0 { + + uj.ShowAllInlineMedia = false + + } else { + err = errors.New("unexpected bytes for true/false value") + return fs.WrapErr(err) + } + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_StatusesCount: + + /* handler: uj.StatusesCount type=int kind=int quoted=false*/ + + { + if tok != fflib.FFTok_integer && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok)) + } + } + + { + + if tok == fflib.FFTok_null { + + } else { + + tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64) + + if err != nil { + return fs.WrapErr(err) + } + + uj.StatusesCount = int(tval) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_TimeZone: + + /* handler: uj.TimeZone type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + } else { + + outBuf := fs.Output.Bytes() + + uj.TimeZone = string(string(outBuf)) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_URL: + + /* handler: uj.URL type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + uj.URL = nil + + } else { + + var tval string + outBuf := fs.Output.Bytes() + + tval = string(string(outBuf)) + uj.URL = &tval + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_UtcOffset: + + /* handler: uj.UtcOffset type=int kind=int quoted=false*/ + + { + if tok != fflib.FFTok_integer && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok)) + } + } + + { + + if tok == fflib.FFTok_null { + + } else { + + tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64) + + if err != nil { + return fs.WrapErr(err) + } + + uj.UtcOffset = int(tval) + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_Verified: + + /* handler: uj.Verified type=bool kind=bool quoted=false*/ + + { + if tok != fflib.FFTok_bool && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for bool", tok)) + } + } + + { + if tok == fflib.FFTok_null { + + } else { + tmpb := fs.Output.Bytes() + + if bytes.Compare([]byte{'t', 'r', 'u', 'e'}, tmpb) == 0 { + + uj.Verified = true + + } else if bytes.Compare([]byte{'f', 'a', 'l', 's', 'e'}, tmpb) == 0 { + + uj.Verified = false + + } else { + err = errors.New("unexpected bytes for true/false value") + return fs.WrapErr(err) + } + + } + } + + state = fflib.FFParse_after_value + goto mainparse + +wantedvalue: + return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) +wrongtokenerror: + return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String())) +tokerror: + if fs.BigError != nil { + return fs.WrapErr(fs.BigError) + } + err = fs.Error.ToError() + if err != nil { + return fs.WrapErr(err) + } + panic("ffjson-generated: unreachable, please report bug.") +done: + return nil +} + +func (mj *UserEntities) MarshalJSON() ([]byte, error) { + var buf fflib.Buffer + if mj == nil { + buf.WriteString("null") + return buf.Bytes(), nil + } + err := mj.MarshalJSONBuf(&buf) + if err != nil { + return nil, err + } + return buf.Bytes(), nil +} +func (mj *UserEntities) MarshalJSONBuf(buf fflib.EncodingBuffer) error { + if mj == nil { + buf.WriteString("null") + return nil + } + var err error + var obj []byte + _ = obj + _ = err + buf.WriteString(`{"description":`) + + { + + err = mj.Description.MarshalJSONBuf(buf) + if err != nil { + return err + } + + } + buf.WriteString(`,"url":`) + + { + + err = mj.URL.MarshalJSONBuf(buf) + if err != nil { + return err + } + + } + buf.WriteByte('}') + return nil +} + +const ( + ffj_t_UserEntitiesbase = iota + ffj_t_UserEntitiesno_such_key + + ffj_t_UserEntities_Description + + ffj_t_UserEntities_URL +) + +var ffj_key_UserEntities_Description = []byte("description") + +var ffj_key_UserEntities_URL = []byte("url") + +func (uj *UserEntities) UnmarshalJSON(input []byte) error { + fs := fflib.NewFFLexer(input) + return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start) +} + +func (uj *UserEntities) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error { + var err error = nil + currentKey := ffj_t_UserEntitiesbase + _ = currentKey + tok := fflib.FFTok_init + wantedTok := fflib.FFTok_init + +mainparse: + for { + tok = fs.Scan() + // println(fmt.Sprintf("debug: tok: %v state: %v", tok, state)) + if tok == fflib.FFTok_error { + goto tokerror + } + + switch state { + + case fflib.FFParse_map_start: + if tok != fflib.FFTok_left_bracket { + wantedTok = fflib.FFTok_left_bracket + goto wrongtokenerror + } + state = fflib.FFParse_want_key + continue + + case fflib.FFParse_after_value: + if tok == fflib.FFTok_comma { + state = fflib.FFParse_want_key + } else if tok == fflib.FFTok_right_bracket { + goto done + } else { + wantedTok = fflib.FFTok_comma + goto wrongtokenerror + } + + case fflib.FFParse_want_key: + // json {} ended. goto exit. woo. + if tok == fflib.FFTok_right_bracket { + goto done + } + if tok != fflib.FFTok_string { + wantedTok = fflib.FFTok_string + goto wrongtokenerror + } + + kn := fs.Output.Bytes() + if len(kn) <= 0 { + // "" case. hrm. + currentKey = ffj_t_UserEntitiesno_such_key + state = fflib.FFParse_want_colon + goto mainparse + } else { + switch kn[0] { + + case 'd': + + if bytes.Equal(ffj_key_UserEntities_Description, kn) { + currentKey = ffj_t_UserEntities_Description + state = fflib.FFParse_want_colon + goto mainparse + } + + case 'u': + + if bytes.Equal(ffj_key_UserEntities_URL, kn) { + currentKey = ffj_t_UserEntities_URL + state = fflib.FFParse_want_colon + goto mainparse + } + + } + + if fflib.SimpleLetterEqualFold(ffj_key_UserEntities_URL, kn) { + currentKey = ffj_t_UserEntities_URL + state = fflib.FFParse_want_colon + goto mainparse + } + + if fflib.EqualFoldRight(ffj_key_UserEntities_Description, kn) { + currentKey = ffj_t_UserEntities_Description + state = fflib.FFParse_want_colon + goto mainparse + } + + currentKey = ffj_t_UserEntitiesno_such_key + state = fflib.FFParse_want_colon + goto mainparse + } + + case fflib.FFParse_want_colon: + if tok != fflib.FFTok_colon { + wantedTok = fflib.FFTok_colon + goto wrongtokenerror + } + state = fflib.FFParse_want_value + continue + case fflib.FFParse_want_value: + + if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null { + switch currentKey { + + case ffj_t_UserEntities_Description: + goto handle_Description + + case ffj_t_UserEntities_URL: + goto handle_URL + + case ffj_t_UserEntitiesno_such_key: + err = fs.SkipField(tok) + if err != nil { + return fs.WrapErr(err) + } + state = fflib.FFParse_after_value + goto mainparse + } + } else { + goto wantedvalue + } + } + } + +handle_Description: + + /* handler: uj.Description type=benchmark.UserEntityDescription kind=struct quoted=false*/ + + { + if tok == fflib.FFTok_null { + + state = fflib.FFParse_after_value + goto mainparse + } + + err = uj.Description.UnmarshalJSONFFLexer(fs, fflib.FFParse_want_key) + if err != nil { + return err + } + state = fflib.FFParse_after_value + } + + state = fflib.FFParse_after_value + goto mainparse + +handle_URL: + + /* handler: uj.URL type=benchmark.UserEntityURL kind=struct quoted=false*/ + + { + if tok == fflib.FFTok_null { + + state = fflib.FFParse_after_value + goto mainparse + } + + err = uj.URL.UnmarshalJSONFFLexer(fs, fflib.FFParse_want_key) + if err != nil { + return err + } + state = fflib.FFParse_after_value + } + + state = fflib.FFParse_after_value + goto mainparse + +wantedvalue: + return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) +wrongtokenerror: + return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String())) +tokerror: + if fs.BigError != nil { + return fs.WrapErr(fs.BigError) + } + err = fs.Error.ToError() + if err != nil { + return fs.WrapErr(err) + } + panic("ffjson-generated: unreachable, please report bug.") +done: + return nil +} + +func (mj *UserEntityDescription) MarshalJSON() ([]byte, error) { + var buf fflib.Buffer + if mj == nil { + buf.WriteString("null") + return buf.Bytes(), nil + } + err := mj.MarshalJSONBuf(&buf) + if err != nil { + return nil, err + } + return buf.Bytes(), nil +} +func (mj *UserEntityDescription) MarshalJSONBuf(buf fflib.EncodingBuffer) error { + if mj == nil { + buf.WriteString("null") + return nil + } + var err error + var obj []byte + _ = obj + _ = err + buf.WriteString(`{"urls":`) + if mj.Urls != nil { + buf.WriteString(`[`) + for i, v := range mj.Urls { + if i != 0 { + buf.WriteString(`,`) + } + if v != nil { + fflib.WriteJsonString(buf, string(*v)) + } else { + buf.WriteString(`null`) + } + } + buf.WriteString(`]`) + } else { + buf.WriteString(`null`) + } + buf.WriteByte('}') + return nil +} + +const ( + ffj_t_UserEntityDescriptionbase = iota + ffj_t_UserEntityDescriptionno_such_key + + ffj_t_UserEntityDescription_Urls +) + +var ffj_key_UserEntityDescription_Urls = []byte("urls") + +func (uj *UserEntityDescription) UnmarshalJSON(input []byte) error { + fs := fflib.NewFFLexer(input) + return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start) +} + +func (uj *UserEntityDescription) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error { + var err error = nil + currentKey := ffj_t_UserEntityDescriptionbase + _ = currentKey + tok := fflib.FFTok_init + wantedTok := fflib.FFTok_init + +mainparse: + for { + tok = fs.Scan() + // println(fmt.Sprintf("debug: tok: %v state: %v", tok, state)) + if tok == fflib.FFTok_error { + goto tokerror + } + + switch state { + + case fflib.FFParse_map_start: + if tok != fflib.FFTok_left_bracket { + wantedTok = fflib.FFTok_left_bracket + goto wrongtokenerror + } + state = fflib.FFParse_want_key + continue + + case fflib.FFParse_after_value: + if tok == fflib.FFTok_comma { + state = fflib.FFParse_want_key + } else if tok == fflib.FFTok_right_bracket { + goto done + } else { + wantedTok = fflib.FFTok_comma + goto wrongtokenerror + } + + case fflib.FFParse_want_key: + // json {} ended. goto exit. woo. + if tok == fflib.FFTok_right_bracket { + goto done + } + if tok != fflib.FFTok_string { + wantedTok = fflib.FFTok_string + goto wrongtokenerror + } + + kn := fs.Output.Bytes() + if len(kn) <= 0 { + // "" case. hrm. + currentKey = ffj_t_UserEntityDescriptionno_such_key + state = fflib.FFParse_want_colon + goto mainparse + } else { + switch kn[0] { + + case 'u': + + if bytes.Equal(ffj_key_UserEntityDescription_Urls, kn) { + currentKey = ffj_t_UserEntityDescription_Urls + state = fflib.FFParse_want_colon + goto mainparse + } + + } + + if fflib.EqualFoldRight(ffj_key_UserEntityDescription_Urls, kn) { + currentKey = ffj_t_UserEntityDescription_Urls + state = fflib.FFParse_want_colon + goto mainparse + } + + currentKey = ffj_t_UserEntityDescriptionno_such_key + state = fflib.FFParse_want_colon + goto mainparse + } + + case fflib.FFParse_want_colon: + if tok != fflib.FFTok_colon { + wantedTok = fflib.FFTok_colon + goto wrongtokenerror + } + state = fflib.FFParse_want_value + continue + case fflib.FFParse_want_value: + + if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null { + switch currentKey { + + case ffj_t_UserEntityDescription_Urls: + goto handle_Urls + + case ffj_t_UserEntityDescriptionno_such_key: + err = fs.SkipField(tok) + if err != nil { + return fs.WrapErr(err) + } + state = fflib.FFParse_after_value + goto mainparse + } + } else { + goto wantedvalue + } + } + } + +handle_Urls: + + /* handler: uj.Urls type=[]*string kind=slice quoted=false*/ + + { + + { + if tok != fflib.FFTok_left_brace && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for ", tok)) + } + } + + if tok == fflib.FFTok_null { + uj.Urls = nil + } else { + + uj.Urls = make([]*string, 0) + + wantVal := true + + for { + + var tmp_uj__Urls *string + + tok = fs.Scan() + if tok == fflib.FFTok_error { + goto tokerror + } + if tok == fflib.FFTok_right_brace { + break + } + + if tok == fflib.FFTok_comma { + if wantVal == true { + // TODO(pquerna): this isn't an ideal error message, this handles + // things like [,,,] as an array value. + return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) + } + continue + } else { + wantVal = true + } + + /* handler: tmp_uj__Urls type=*string kind=ptr quoted=false*/ + + { + + if tok == fflib.FFTok_null { + tmp_uj__Urls = nil + } else { + if tmp_uj__Urls == nil { + tmp_uj__Urls = new(string) + } + + /* handler: tmp_uj__Urls type=string kind=string quoted=false*/ + + { + + { + if tok != fflib.FFTok_string && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok)) + } + } + + if tok == fflib.FFTok_null { + + tmp_uj__Urls = nil + + } else { + + var tval string + outBuf := fs.Output.Bytes() + + tval = string(string(outBuf)) + tmp_uj__Urls = &tval + + } + } + + } + } + + uj.Urls = append(uj.Urls, tmp_uj__Urls) + wantVal = false + } + } + } + + state = fflib.FFParse_after_value + goto mainparse + +wantedvalue: + return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) +wrongtokenerror: + return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String())) +tokerror: + if fs.BigError != nil { + return fs.WrapErr(fs.BigError) + } + err = fs.Error.ToError() + if err != nil { + return fs.WrapErr(err) + } + panic("ffjson-generated: unreachable, please report bug.") +done: + return nil +} + +func (mj *UserEntityURL) MarshalJSON() ([]byte, error) { + var buf fflib.Buffer + if mj == nil { + buf.WriteString("null") + return buf.Bytes(), nil + } + err := mj.MarshalJSONBuf(&buf) + if err != nil { + return nil, err + } + return buf.Bytes(), nil +} +func (mj *UserEntityURL) MarshalJSONBuf(buf fflib.EncodingBuffer) error { + if mj == nil { + buf.WriteString("null") + return nil + } + var err error + var obj []byte + _ = obj + _ = err + buf.WriteString(`{"urls":`) + if mj.Urls != nil { + buf.WriteString(`[`) + for i, v := range mj.Urls { + if i != 0 { + buf.WriteString(`,`) + } + + { + + err = v.MarshalJSONBuf(buf) + if err != nil { + return err + } + + } + } + buf.WriteString(`]`) + } else { + buf.WriteString(`null`) + } + buf.WriteByte('}') + return nil +} + +const ( + ffj_t_UserEntityURLbase = iota + ffj_t_UserEntityURLno_such_key + + ffj_t_UserEntityURL_Urls +) + +var ffj_key_UserEntityURL_Urls = []byte("urls") + +func (uj *UserEntityURL) UnmarshalJSON(input []byte) error { + fs := fflib.NewFFLexer(input) + return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start) +} + +func (uj *UserEntityURL) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error { + var err error = nil + currentKey := ffj_t_UserEntityURLbase + _ = currentKey + tok := fflib.FFTok_init + wantedTok := fflib.FFTok_init + +mainparse: + for { + tok = fs.Scan() + // println(fmt.Sprintf("debug: tok: %v state: %v", tok, state)) + if tok == fflib.FFTok_error { + goto tokerror + } + + switch state { + + case fflib.FFParse_map_start: + if tok != fflib.FFTok_left_bracket { + wantedTok = fflib.FFTok_left_bracket + goto wrongtokenerror + } + state = fflib.FFParse_want_key + continue + + case fflib.FFParse_after_value: + if tok == fflib.FFTok_comma { + state = fflib.FFParse_want_key + } else if tok == fflib.FFTok_right_bracket { + goto done + } else { + wantedTok = fflib.FFTok_comma + goto wrongtokenerror + } + + case fflib.FFParse_want_key: + // json {} ended. goto exit. woo. + if tok == fflib.FFTok_right_bracket { + goto done + } + if tok != fflib.FFTok_string { + wantedTok = fflib.FFTok_string + goto wrongtokenerror + } + + kn := fs.Output.Bytes() + if len(kn) <= 0 { + // "" case. hrm. + currentKey = ffj_t_UserEntityURLno_such_key + state = fflib.FFParse_want_colon + goto mainparse + } else { + switch kn[0] { + + case 'u': + + if bytes.Equal(ffj_key_UserEntityURL_Urls, kn) { + currentKey = ffj_t_UserEntityURL_Urls + state = fflib.FFParse_want_colon + goto mainparse + } + + } + + if fflib.EqualFoldRight(ffj_key_UserEntityURL_Urls, kn) { + currentKey = ffj_t_UserEntityURL_Urls + state = fflib.FFParse_want_colon + goto mainparse + } + + currentKey = ffj_t_UserEntityURLno_such_key + state = fflib.FFParse_want_colon + goto mainparse + } + + case fflib.FFParse_want_colon: + if tok != fflib.FFTok_colon { + wantedTok = fflib.FFTok_colon + goto wrongtokenerror + } + state = fflib.FFParse_want_value + continue + case fflib.FFParse_want_value: + + if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null { + switch currentKey { + + case ffj_t_UserEntityURL_Urls: + goto handle_Urls + + case ffj_t_UserEntityURLno_such_key: + err = fs.SkipField(tok) + if err != nil { + return fs.WrapErr(err) + } + state = fflib.FFParse_after_value + goto mainparse + } + } else { + goto wantedvalue + } + } + } + +handle_Urls: + + /* handler: uj.Urls type=[]benchmark.URL kind=slice quoted=false*/ + + { + + { + if tok != fflib.FFTok_left_brace && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for ", tok)) + } + } + + if tok == fflib.FFTok_null { + uj.Urls = nil + } else { + + uj.Urls = make([]URL, 0) + + wantVal := true + + for { + + var tmp_uj__Urls URL + + tok = fs.Scan() + if tok == fflib.FFTok_error { + goto tokerror + } + if tok == fflib.FFTok_right_brace { + break + } + + if tok == fflib.FFTok_comma { + if wantVal == true { + // TODO(pquerna): this isn't an ideal error message, this handles + // things like [,,,] as an array value. + return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) + } + continue + } else { + wantVal = true + } + + /* handler: tmp_uj__Urls type=benchmark.URL kind=struct quoted=false*/ + + { + if tok == fflib.FFTok_null { + + state = fflib.FFParse_after_value + goto mainparse + } + + err = tmp_uj__Urls.UnmarshalJSONFFLexer(fs, fflib.FFParse_want_key) + if err != nil { + return err + } + state = fflib.FFParse_after_value + } + + uj.Urls = append(uj.Urls, tmp_uj__Urls) + wantVal = false + } + } + } + + state = fflib.FFParse_after_value + goto mainparse + +wantedvalue: + return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) +wrongtokenerror: + return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String())) +tokerror: + if fs.BigError != nil { + return fs.WrapErr(fs.BigError) + } + err = fs.Error.ToError() + if err != nil { + return fs.WrapErr(err) + } + panic("ffjson-generated: unreachable, please report bug.") +done: + return nil +} + +func (mj *XLStruct) MarshalJSON() ([]byte, error) { + var buf fflib.Buffer + if mj == nil { + buf.WriteString("null") + return buf.Bytes(), nil + } + err := mj.MarshalJSONBuf(&buf) + if err != nil { + return nil, err + } + return buf.Bytes(), nil +} +func (mj *XLStruct) MarshalJSONBuf(buf fflib.EncodingBuffer) error { + if mj == nil { + buf.WriteString("null") + return nil + } + var err error + var obj []byte + _ = obj + _ = err + buf.WriteString(`{"Data":`) + if mj.Data != nil { + buf.WriteString(`[`) + for i, v := range mj.Data { + if i != 0 { + buf.WriteString(`,`) + } + + { + + err = v.MarshalJSONBuf(buf) + if err != nil { + return err + } + + } + } + buf.WriteString(`]`) + } else { + buf.WriteString(`null`) + } + buf.WriteByte('}') + return nil +} + +const ( + ffj_t_XLStructbase = iota + ffj_t_XLStructno_such_key + + ffj_t_XLStruct_Data +) + +var ffj_key_XLStruct_Data = []byte("Data") + +func (uj *XLStruct) UnmarshalJSON(input []byte) error { + fs := fflib.NewFFLexer(input) + return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start) +} + +func (uj *XLStruct) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error { + var err error = nil + currentKey := ffj_t_XLStructbase + _ = currentKey + tok := fflib.FFTok_init + wantedTok := fflib.FFTok_init + +mainparse: + for { + tok = fs.Scan() + // println(fmt.Sprintf("debug: tok: %v state: %v", tok, state)) + if tok == fflib.FFTok_error { + goto tokerror + } + + switch state { + + case fflib.FFParse_map_start: + if tok != fflib.FFTok_left_bracket { + wantedTok = fflib.FFTok_left_bracket + goto wrongtokenerror + } + state = fflib.FFParse_want_key + continue + + case fflib.FFParse_after_value: + if tok == fflib.FFTok_comma { + state = fflib.FFParse_want_key + } else if tok == fflib.FFTok_right_bracket { + goto done + } else { + wantedTok = fflib.FFTok_comma + goto wrongtokenerror + } + + case fflib.FFParse_want_key: + // json {} ended. goto exit. woo. + if tok == fflib.FFTok_right_bracket { + goto done + } + if tok != fflib.FFTok_string { + wantedTok = fflib.FFTok_string + goto wrongtokenerror + } + + kn := fs.Output.Bytes() + if len(kn) <= 0 { + // "" case. hrm. + currentKey = ffj_t_XLStructno_such_key + state = fflib.FFParse_want_colon + goto mainparse + } else { + switch kn[0] { + + case 'D': + + if bytes.Equal(ffj_key_XLStruct_Data, kn) { + currentKey = ffj_t_XLStruct_Data + state = fflib.FFParse_want_colon + goto mainparse + } + + } + + if fflib.SimpleLetterEqualFold(ffj_key_XLStruct_Data, kn) { + currentKey = ffj_t_XLStruct_Data + state = fflib.FFParse_want_colon + goto mainparse + } + + currentKey = ffj_t_XLStructno_such_key + state = fflib.FFParse_want_colon + goto mainparse + } + + case fflib.FFParse_want_colon: + if tok != fflib.FFTok_colon { + wantedTok = fflib.FFTok_colon + goto wrongtokenerror + } + state = fflib.FFParse_want_value + continue + case fflib.FFParse_want_value: + + if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null { + switch currentKey { + + case ffj_t_XLStruct_Data: + goto handle_Data + + case ffj_t_XLStructno_such_key: + err = fs.SkipField(tok) + if err != nil { + return fs.WrapErr(err) + } + state = fflib.FFParse_after_value + goto mainparse + } + } else { + goto wantedvalue + } + } + } + +handle_Data: + + /* handler: uj.Data type=[]benchmark.LargeStruct kind=slice quoted=false*/ + + { + + { + if tok != fflib.FFTok_left_brace && tok != fflib.FFTok_null { + return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for ", tok)) + } + } + + if tok == fflib.FFTok_null { + uj.Data = nil + } else { + + uj.Data = make([]LargeStruct, 0) + + wantVal := true + + for { + + var tmp_uj__Data LargeStruct + + tok = fs.Scan() + if tok == fflib.FFTok_error { + goto tokerror + } + if tok == fflib.FFTok_right_brace { + break + } + + if tok == fflib.FFTok_comma { + if wantVal == true { + // TODO(pquerna): this isn't an ideal error message, this handles + // things like [,,,] as an array value. + return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) + } + continue + } else { + wantVal = true + } + + /* handler: tmp_uj__Data type=benchmark.LargeStruct kind=struct quoted=false*/ + + { + if tok == fflib.FFTok_null { + + state = fflib.FFParse_after_value + goto mainparse + } + + err = tmp_uj__Data.UnmarshalJSONFFLexer(fs, fflib.FFParse_want_key) + if err != nil { + return err + } + state = fflib.FFParse_after_value + } + + uj.Data = append(uj.Data, tmp_uj__Data) + wantVal = false + } + } + } + + state = fflib.FFParse_after_value + goto mainparse + +wantedvalue: + return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok)) +wrongtokenerror: + return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String())) +tokerror: + if fs.BigError != nil { + return fs.WrapErr(fs.BigError) + } + err = fs.Error.ToError() + if err != nil { + return fs.WrapErr(err) + } + panic("ffjson-generated: unreachable, please report bug.") +done: + return nil +} diff --git a/vendor/github.com/mailru/easyjson/benchmark/data_var.go b/vendor/github.com/mailru/easyjson/benchmark/data_var.go new file mode 100644 index 0000000..ea4202d --- /dev/null +++ b/vendor/github.com/mailru/easyjson/benchmark/data_var.go @@ -0,0 +1,350 @@ +package benchmark + +var largeStructData = LargeStruct{ + SearchMetadata: SearchMetadata{ + CompletedIn: 0.035, + Count: 4, + MaxID: 250126199840518145, + MaxIDStr: "250126199840518145", + NextResults: "?max_id=249279667666817023&q=%23freebandnames&count=4&include_entities=1&result_type=mixed", + Query: "%23freebandnames", + RefreshURL: "?since_id=250126199840518145&q=%23freebandnames&result_type=mixed&include_entities=1", + SinceID: 24012619984051000, + SinceIDStr: "24012619984051000", + }, + Statuses: []Status{ + { + Contributors: nil, + Coordinates: nil, + CreatedAt: "Mon Sep 24 03:35:21 +0000 2012", + Entities: Entities{ + Hashtags: []Hashtag{{ + Indices: []int{20, 34}, + Text: "freebandnames"}, + }, + Urls: []*string{}, + UserMentions: []*string{}, + }, + Favorited: false, + Geo: nil, + ID: 250075927172759552, + IDStr: "250075927172759552", + InReplyToScreenName: nil, + InReplyToStatusID: nil, + InReplyToStatusIDStr: nil, + InReplyToUserID: nil, + InReplyToUserIDStr: nil, + Metadata: StatusMetadata{ + IsoLanguageCode: "en", + ResultType: "recent", + }, + Place: nil, + RetweetCount: 0, + Retweeted: false, + Source: "Twitter for Mac", + Text: "Aggressive Ponytail #freebandnames", + Truncated: false, + User: User{ + ContributorsEnabled: false, + CreatedAt: "Mon Apr 26 06:01:55 +0000 2010", + DefaultProfile: true, + DefaultProfileImage: false, + Description: "Born 330 Live 310", + Entities: UserEntities{ + Description: UserEntityDescription{ + Urls: []*string{}, + }, + URL: UserEntityURL{ + Urls: []URL{{ + ExpandedURL: nil, + Indices: []int{0, 0}, + URL: "", + }}, + }, + }, + FavouritesCount: 0, + FollowRequestSent: nil, + FollowersCount: 70, + Following: nil, + FriendsCount: 110, + GeoEnabled: true, + ID: 137238150, + IDStr: "137238150", + IsTranslator: false, + Lang: "en", + ListedCount: 2, + Location: "LA, CA", + Name: "Sean Cummings", + Notifications: nil, + ProfileBackgroundColor: "C0DEED", + ProfileBackgroundImageURL: "http://a0.twimg.com/images/themes/theme1/bg.png", + ProfileBackgroundImageURLHTTPS: "https://si0.twimg.com/images/themes/theme1/bg.png", + ProfileBackgroundTile: false, + ProfileImageURL: "http://a0.twimg.com/profile_images/2359746665/1v6zfgqo8g0d3mk7ii5s_normal.jpeg", + ProfileImageURLHTTPS: "https://si0.twimg.com/profile_images/2359746665/1v6zfgqo8g0d3mk7ii5s_normal.jpeg", + ProfileLinkColor: "0084B4", + ProfileSidebarBorderColor: "C0DEED", + ProfileSidebarFillColor: "DDEEF6", + ProfileTextColor: "333333", + ProfileUseBackgroundImage: true, + Protected: false, + ScreenName: "sean_cummings", + ShowAllInlineMedia: false, + StatusesCount: 579, + TimeZone: "Pacific Time (US & Canada)", + URL: nil, + UtcOffset: -28800, + Verified: false, + }, + }, + { + Contributors: nil, + Coordinates: nil, + CreatedAt: "Fri Sep 21 23:40:54 +0000 2012", + Entities: Entities{ + Hashtags: []Hashtag{{ + Indices: []int{20, 34}, + Text: "FreeBandNames", + }}, + Urls: []*string{}, + UserMentions: []*string{}, + }, + Favorited: false, + Geo: nil, + ID: 249292149810667520, + IDStr: "249292149810667520", + InReplyToScreenName: nil, + InReplyToStatusID: nil, + InReplyToStatusIDStr: nil, + InReplyToUserID: nil, + InReplyToUserIDStr: nil, + Metadata: StatusMetadata{ + IsoLanguageCode: "pl", + ResultType: "recent", + }, + Place: nil, + RetweetCount: 0, + Retweeted: false, + Source: "web", + Text: "Thee Namaste Nerdz. #FreeBandNames", + Truncated: false, + User: User{ + ContributorsEnabled: false, + CreatedAt: "Tue Apr 07 19:05:07 +0000 2009", + DefaultProfile: false, + DefaultProfileImage: false, + Description: "You will come to Durham, North Carolina. I will sell you some records then, here in Durham, North Carolina. Fun will happen.", + Entities: UserEntities{ + Description: UserEntityDescription{Urls: []*string{}}, + URL: UserEntityURL{ + Urls: []URL{{ + ExpandedURL: nil, + Indices: []int{0, 32}, + URL: "http://bullcityrecords.com/wnng/"}}, + }, + }, + FavouritesCount: 8, + FollowRequestSent: nil, + FollowersCount: 2052, + Following: nil, + FriendsCount: 348, + GeoEnabled: false, + ID: 29516238, + IDStr: "29516238", + IsTranslator: false, + Lang: "en", + ListedCount: 118, + Location: "Durham, NC", + Name: "Chaz Martenstein", + Notifications: nil, + ProfileBackgroundColor: "9AE4E8", + ProfileBackgroundImageURL: "http://a0.twimg.com/profile_background_images/9423277/background_tile.bmp", + ProfileBackgroundImageURLHTTPS: "https://si0.twimg.com/profile_background_images/9423277/background_tile.bmp", + ProfileBackgroundTile: true, + ProfileImageURL: "http://a0.twimg.com/profile_images/447958234/Lichtenstein_normal.jpg", + ProfileImageURLHTTPS: "https://si0.twimg.com/profile_images/447958234/Lichtenstein_normal.jpg", + ProfileLinkColor: "0084B4", + ProfileSidebarBorderColor: "BDDCAD", + ProfileSidebarFillColor: "DDFFCC", + ProfileTextColor: "333333", + ProfileUseBackgroundImage: true, + Protected: false, + ScreenName: "bullcityrecords", + ShowAllInlineMedia: true, + StatusesCount: 7579, + TimeZone: "Eastern Time (US & Canada)", + URL: nil, + UtcOffset: -18000, + Verified: false, + }, + }, + Status{ + Contributors: nil, + Coordinates: nil, + CreatedAt: "Fri Sep 21 23:30:20 +0000 2012", + Entities: Entities{ + Hashtags: []Hashtag{{ + Indices: []int{29, 43}, + Text: "freebandnames", + }}, + Urls: []*string{}, + UserMentions: []*string{}, + }, + Favorited: false, + Geo: nil, + ID: 249289491129438208, + IDStr: "249289491129438208", + InReplyToScreenName: nil, + InReplyToStatusID: nil, + InReplyToStatusIDStr: nil, + InReplyToUserID: nil, + InReplyToUserIDStr: nil, + Metadata: StatusMetadata{ + IsoLanguageCode: "en", + ResultType: "recent", + }, + Place: nil, + RetweetCount: 0, + Retweeted: false, + Source: "web", + Text: "Mexican Heaven, Mexican Hell #freebandnames", + Truncated: false, + User: User{ + ContributorsEnabled: false, + CreatedAt: "Tue Sep 01 21:21:35 +0000 2009", + DefaultProfile: false, + DefaultProfileImage: false, + Description: "Science Fiction Writer, sort of. Likes Superheroes, Mole People, Alt. Timelines.", + Entities: UserEntities{ + Description: UserEntityDescription{ + Urls: nil, + }, + URL: UserEntityURL{ + Urls: []URL{{ + ExpandedURL: nil, + Indices: []int{0, 0}, + URL: "", + }}, + }, + }, + FavouritesCount: 19, + FollowRequestSent: nil, + FollowersCount: 63, + Following: nil, + FriendsCount: 63, + GeoEnabled: false, + ID: 70789458, + IDStr: "70789458", + IsTranslator: false, + Lang: "en", + ListedCount: 1, + Location: "Kingston New York", + Name: "Thomas John Wakeman", + Notifications: nil, + ProfileBackgroundColor: "352726", + ProfileBackgroundImageURL: "http://a0.twimg.com/images/themes/theme5/bg.gif", + ProfileBackgroundImageURLHTTPS: "https://si0.twimg.com/images/themes/theme5/bg.gif", + ProfileBackgroundTile: false, + ProfileImageURL: "http://a0.twimg.com/profile_images/2219333930/Froggystyle_normal.png", + ProfileImageURLHTTPS: "https://si0.twimg.com/profile_images/2219333930/Froggystyle_normal.png", + ProfileLinkColor: "D02B55", + ProfileSidebarBorderColor: "829D5E", + ProfileSidebarFillColor: "99CC33", + ProfileTextColor: "3E4415", + ProfileUseBackgroundImage: true, + Protected: false, + ScreenName: "MonkiesFist", + ShowAllInlineMedia: false, + StatusesCount: 1048, + TimeZone: "Eastern Time (US & Canada)", + URL: nil, + UtcOffset: -18000, + Verified: false, + }, + }, + Status{ + Contributors: nil, + Coordinates: nil, + CreatedAt: "Fri Sep 21 22:51:18 +0000 2012", + Entities: Entities{ + Hashtags: []Hashtag{{ + Indices: []int{20, 34}, + Text: "freebandnames", + }}, + Urls: []*string{}, + UserMentions: []*string{}, + }, + Favorited: false, + Geo: nil, + ID: 249279667666817024, + IDStr: "249279667666817024", + InReplyToScreenName: nil, + InReplyToStatusID: nil, + InReplyToStatusIDStr: nil, + InReplyToUserID: nil, + InReplyToUserIDStr: nil, + Metadata: StatusMetadata{ + IsoLanguageCode: "en", + ResultType: "recent", + }, + Place: nil, + RetweetCount: 0, + Retweeted: false, + Source: "Twitter for iPhone", + Text: "The Foolish Mortals #freebandnames", + Truncated: false, + User: User{ + ContributorsEnabled: false, + CreatedAt: "Mon May 04 00:05:00 +0000 2009", + DefaultProfile: false, + DefaultProfileImage: false, + Description: "Cartoonist, Illustrator, and T-Shirt connoisseur", + Entities: UserEntities{ + Description: UserEntityDescription{ + Urls: []*string{}, + }, + URL: UserEntityURL{ + Urls: []URL{{ + ExpandedURL: nil, + Indices: []int{0, 24}, + URL: "http://www.omnitarian.me", + }}, + }, + }, + FavouritesCount: 647, + FollowRequestSent: nil, + FollowersCount: 608, + Following: nil, + FriendsCount: 249, + GeoEnabled: false, + ID: 37539828, + IDStr: "37539828", + IsTranslator: false, + Lang: "en", + ListedCount: 52, + Location: "Wisconsin, USA", + Name: "Marty Elmer", + Notifications: nil, + ProfileBackgroundColor: "EEE3C4", + ProfileBackgroundImageURL: "http://a0.twimg.com/profile_background_images/106455659/rect6056-9.png", + ProfileBackgroundImageURLHTTPS: "https://si0.twimg.com/profile_background_images/106455659/rect6056-9.png", + ProfileBackgroundTile: true, + ProfileImageURL: "http://a0.twimg.com/profile_images/1629790393/shrinker_2000_trans_normal.png", + ProfileImageURLHTTPS: "https://si0.twimg.com/profile_images/1629790393/shrinker_2000_trans_normal.png", + ProfileLinkColor: "3B2A26", + ProfileSidebarBorderColor: "615A44", + ProfileSidebarFillColor: "BFAC83", + ProfileTextColor: "000000", + ProfileUseBackgroundImage: true, + Protected: false, + ScreenName: "Omnitarian", + ShowAllInlineMedia: true, + StatusesCount: 3575, + TimeZone: "Central Time (US & Canada)", + URL: nil, + UtcOffset: -21600, + Verified: false, + }, + }, + }, +} diff --git a/vendor/github.com/mailru/easyjson/benchmark/default_test.go b/vendor/github.com/mailru/easyjson/benchmark/default_test.go new file mode 100644 index 0000000..68b3791 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/benchmark/default_test.go @@ -0,0 +1,118 @@ +// +build !use_easyjson,!use_ffjson,!use_codec,!use_jsoniter + +package benchmark + +import ( + "encoding/json" + "testing" +) + +func BenchmarkStd_Unmarshal_M(b *testing.B) { + b.SetBytes(int64(len(largeStructText))) + for i := 0; i < b.N; i++ { + var s LargeStruct + err := json.Unmarshal(largeStructText, &s) + if err != nil { + b.Error(err) + } + } +} + +func BenchmarkStd_Unmarshal_S(b *testing.B) { + for i := 0; i < b.N; i++ { + var s Entities + err := json.Unmarshal(smallStructText, &s) + if err != nil { + b.Error(err) + } + } + b.SetBytes(int64(len(smallStructText))) +} + +func BenchmarkStd_Marshal_M(b *testing.B) { + var l int64 + for i := 0; i < b.N; i++ { + data, err := json.Marshal(&largeStructData) + if err != nil { + b.Error(err) + } + l = int64(len(data)) + } + b.SetBytes(l) +} + +func BenchmarkStd_Marshal_L(b *testing.B) { + var l int64 + for i := 0; i < b.N; i++ { + data, err := json.Marshal(&xlStructData) + if err != nil { + b.Error(err) + } + l = int64(len(data)) + } + b.SetBytes(l) +} + +func BenchmarkStd_Marshal_M_Parallel(b *testing.B) { + var l int64 + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + data, err := json.Marshal(&largeStructData) + if err != nil { + b.Error(err) + } + l = int64(len(data)) + } + }) + b.SetBytes(l) +} + +func BenchmarkStd_Marshal_L_Parallel(b *testing.B) { + var l int64 + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + data, err := json.Marshal(&xlStructData) + if err != nil { + b.Error(err) + } + l = int64(len(data)) + } + }) + b.SetBytes(l) +} + +func BenchmarkStd_Marshal_S(b *testing.B) { + var l int64 + for i := 0; i < b.N; i++ { + data, err := json.Marshal(&smallStructData) + if err != nil { + b.Error(err) + } + l = int64(len(data)) + } + b.SetBytes(l) +} + +func BenchmarkStd_Marshal_S_Parallel(b *testing.B) { + var l int64 + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + data, err := json.Marshal(&smallStructData) + if err != nil { + b.Error(err) + } + l = int64(len(data)) + } + }) + b.SetBytes(l) +} + +func BenchmarkStd_Marshal_M_ToWriter(b *testing.B) { + enc := json.NewEncoder(&DummyWriter{}) + for i := 0; i < b.N; i++ { + err := enc.Encode(&largeStructData) + if err != nil { + b.Error(err) + } + } +} diff --git a/vendor/github.com/mailru/easyjson/benchmark/dummy_test.go b/vendor/github.com/mailru/easyjson/benchmark/dummy_test.go new file mode 100644 index 0000000..3d928ca --- /dev/null +++ b/vendor/github.com/mailru/easyjson/benchmark/dummy_test.go @@ -0,0 +1,11 @@ +package benchmark + +import ( + "testing" +) + +type DummyWriter struct{} + +func (w DummyWriter) Write(data []byte) (int, error) { return len(data), nil } + +func TestToSuppressNoTestsWarning(t *testing.T) {} diff --git a/vendor/github.com/mailru/easyjson/benchmark/easyjson_test.go b/vendor/github.com/mailru/easyjson/benchmark/easyjson_test.go new file mode 100644 index 0000000..16b670b --- /dev/null +++ b/vendor/github.com/mailru/easyjson/benchmark/easyjson_test.go @@ -0,0 +1,184 @@ +// +build use_easyjson + +package benchmark + +import ( + "testing" + + "github.com/mailru/easyjson" + "github.com/mailru/easyjson/jwriter" +) + +func BenchmarkEJ_Unmarshal_M(b *testing.B) { + b.SetBytes(int64(len(largeStructText))) + for i := 0; i < b.N; i++ { + var s LargeStruct + err := s.UnmarshalJSON(largeStructText) + if err != nil { + b.Error(err) + } + } +} + +func BenchmarkEJ_Unmarshal_S(b *testing.B) { + b.SetBytes(int64(len(smallStructText))) + + for i := 0; i < b.N; i++ { + var s Entities + err := s.UnmarshalJSON(smallStructText) + if err != nil { + b.Error(err) + } + } +} + +func BenchmarkEJ_Marshal_M(b *testing.B) { + var l int64 + for i := 0; i < b.N; i++ { + data, err := easyjson.Marshal(&largeStructData) + if err != nil { + b.Error(err) + } + l = int64(len(data)) + } + b.SetBytes(l) +} + +func BenchmarkEJ_Marshal_L(b *testing.B) { + var l int64 + for i := 0; i < b.N; i++ { + data, err := easyjson.Marshal(&xlStructData) + if err != nil { + b.Error(err) + } + l = int64(len(data)) + } + b.SetBytes(l) +} + +func BenchmarkEJ_Marshal_L_ToWriter(b *testing.B) { + var l int64 + out := &DummyWriter{} + for i := 0; i < b.N; i++ { + w := jwriter.Writer{} + xlStructData.MarshalEasyJSON(&w) + if w.Error != nil { + b.Error(w.Error) + } + + l = int64(w.Size()) + w.DumpTo(out) + } + b.SetBytes(l) + +} +func BenchmarkEJ_Marshal_M_Parallel(b *testing.B) { + b.SetBytes(int64(len(largeStructText))) + + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + _, err := largeStructData.MarshalJSON() + if err != nil { + b.Error(err) + } + } + }) +} + +func BenchmarkEJ_Marshal_M_ToWriter(b *testing.B) { + var l int64 + out := &DummyWriter{} + for i := 0; i < b.N; i++ { + w := jwriter.Writer{} + largeStructData.MarshalEasyJSON(&w) + if w.Error != nil { + b.Error(w.Error) + } + + l = int64(w.Size()) + w.DumpTo(out) + } + b.SetBytes(l) + +} +func BenchmarkEJ_Marshal_M_ToWriter_Parallel(b *testing.B) { + out := &DummyWriter{} + + b.RunParallel(func(pb *testing.PB) { + var l int64 + for pb.Next() { + w := jwriter.Writer{} + largeStructData.MarshalEasyJSON(&w) + if w.Error != nil { + b.Error(w.Error) + } + + l = int64(w.Size()) + w.DumpTo(out) + } + if l > 0 { + b.SetBytes(l) + } + }) + +} + +func BenchmarkEJ_Marshal_L_Parallel(b *testing.B) { + var l int64 + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + data, err := xlStructData.MarshalJSON() + if err != nil { + b.Error(err) + } + l = int64(len(data)) + } + }) + b.SetBytes(l) +} + +func BenchmarkEJ_Marshal_L_ToWriter_Parallel(b *testing.B) { + out := &DummyWriter{} + b.RunParallel(func(pb *testing.PB) { + var l int64 + for pb.Next() { + w := jwriter.Writer{} + + xlStructData.MarshalEasyJSON(&w) + if w.Error != nil { + b.Error(w.Error) + } + l = int64(w.Size()) + w.DumpTo(out) + } + if l > 0 { + b.SetBytes(l) + } + }) +} + +func BenchmarkEJ_Marshal_S(b *testing.B) { + var l int64 + for i := 0; i < b.N; i++ { + data, err := smallStructData.MarshalJSON() + if err != nil { + b.Error(err) + } + l = int64(len(data)) + } + b.SetBytes(l) +} + +func BenchmarkEJ_Marshal_S_Parallel(b *testing.B) { + var l int64 + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + data, err := smallStructData.MarshalJSON() + if err != nil { + b.Error(err) + } + l = int64(len(data)) + } + }) + b.SetBytes(l) +} diff --git a/vendor/github.com/mailru/easyjson/benchmark/example.json b/vendor/github.com/mailru/easyjson/benchmark/example.json new file mode 100644 index 0000000..2405022 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/benchmark/example.json @@ -0,0 +1,415 @@ +{ + "statuses": [ + { + "coordinates": null, + "favorited": false, + "truncated": false, + "created_at": "Mon Sep 24 03:35:21 +0000 2012", + "id_str": "250075927172759552", + "entities": { + "urls": [ + + ], + "hashtags": [ + { + "text": "freebandnames", + "indices": [ + 20, + 34 + ] + } + ], + "user_mentions": [ + + ] + }, + "in_reply_to_user_id_str": null, + "contributors": null, + "text": "Aggressive Ponytail #freebandnames", + "metadata": { + "iso_language_code": "en", + "result_type": "recent" + }, + "retweet_count": 0, + "in_reply_to_status_id_str": null, + "id": 250075927172759552, + "geo": null, + "retweeted": false, + "in_reply_to_user_id": null, + "place": null, + "user": { + "profile_sidebar_fill_color": "DDEEF6", + "profile_sidebar_border_color": "C0DEED", + "profile_background_tile": false, + "name": "Sean Cummings", + "profile_image_url": "http://a0.twimg.com/profile_images/2359746665/1v6zfgqo8g0d3mk7ii5s_normal.jpeg", + "created_at": "Mon Apr 26 06:01:55 +0000 2010", + "location": "LA, CA", + "follow_request_sent": null, + "profile_link_color": "0084B4", + "is_translator": false, + "id_str": "137238150", + "entities": { + "url": { + "urls": [ + { + "expanded_url": null, + "url": "", + "indices": [ + 0, + 0 + ] + } + ] + }, + "description": { + "urls": [ + + ] + } + }, + "default_profile": true, + "contributors_enabled": false, + "favourites_count": 0, + "url": null, + "profile_image_url_https": "https://si0.twimg.com/profile_images/2359746665/1v6zfgqo8g0d3mk7ii5s_normal.jpeg", + "utc_offset": -28800, + "id": 137238150, + "profile_use_background_image": true, + "listed_count": 2, + "profile_text_color": "333333", + "lang": "en", + "followers_count": 70, + "protected": false, + "notifications": null, + "profile_background_image_url_https": "https://si0.twimg.com/images/themes/theme1/bg.png", + "profile_background_color": "C0DEED", + "verified": false, + "geo_enabled": true, + "time_zone": "Pacific Time (US & Canada)", + "description": "Born 330 Live 310", + "default_profile_image": false, + "profile_background_image_url": "http://a0.twimg.com/images/themes/theme1/bg.png", + "statuses_count": 579, + "friends_count": 110, + "following": null, + "show_all_inline_media": false, + "screen_name": "sean_cummings" + }, + "in_reply_to_screen_name": null, + "source": "Twitter for Mac", + "in_reply_to_status_id": null + }, + { + "coordinates": null, + "favorited": false, + "truncated": false, + "created_at": "Fri Sep 21 23:40:54 +0000 2012", + "id_str": "249292149810667520", + "entities": { + "urls": [ + + ], + "hashtags": [ + { + "text": "FreeBandNames", + "indices": [ + 20, + 34 + ] + } + ], + "user_mentions": [ + + ] + }, + "in_reply_to_user_id_str": null, + "contributors": null, + "text": "Thee Namaste Nerdz. #FreeBandNames", + "metadata": { + "iso_language_code": "pl", + "result_type": "recent" + }, + "retweet_count": 0, + "in_reply_to_status_id_str": null, + "id": 249292149810667520, + "geo": null, + "retweeted": false, + "in_reply_to_user_id": null, + "place": null, + "user": { + "profile_sidebar_fill_color": "DDFFCC", + "profile_sidebar_border_color": "BDDCAD", + "profile_background_tile": true, + "name": "Chaz Martenstein", + "profile_image_url": "http://a0.twimg.com/profile_images/447958234/Lichtenstein_normal.jpg", + "created_at": "Tue Apr 07 19:05:07 +0000 2009", + "location": "Durham, NC", + "follow_request_sent": null, + "profile_link_color": "0084B4", + "is_translator": false, + "id_str": "29516238", + "entities": { + "url": { + "urls": [ + { + "expanded_url": null, + "url": "http://bullcityrecords.com/wnng/", + "indices": [ + 0, + 32 + ] + } + ] + }, + "description": { + "urls": [ + + ] + } + }, + "default_profile": false, + "contributors_enabled": false, + "favourites_count": 8, + "url": "http://bullcityrecords.com/wnng/", + "profile_image_url_https": "https://si0.twimg.com/profile_images/447958234/Lichtenstein_normal.jpg", + "utc_offset": -18000, + "id": 29516238, + "profile_use_background_image": true, + "listed_count": 118, + "profile_text_color": "333333", + "lang": "en", + "followers_count": 2052, + "protected": false, + "notifications": null, + "profile_background_image_url_https": "https://si0.twimg.com/profile_background_images/9423277/background_tile.bmp", + "profile_background_color": "9AE4E8", + "verified": false, + "geo_enabled": false, + "time_zone": "Eastern Time (US & Canada)", + "description": "You will come to Durham, North Carolina. I will sell you some records then, here in Durham, North Carolina. Fun will happen.", + "default_profile_image": false, + "profile_background_image_url": "http://a0.twimg.com/profile_background_images/9423277/background_tile.bmp", + "statuses_count": 7579, + "friends_count": 348, + "following": null, + "show_all_inline_media": true, + "screen_name": "bullcityrecords" + }, + "in_reply_to_screen_name": null, + "source": "web", + "in_reply_to_status_id": null + }, + { + "coordinates": null, + "favorited": false, + "truncated": false, + "created_at": "Fri Sep 21 23:30:20 +0000 2012", + "id_str": "249289491129438208", + "entities": { + "urls": [ + + ], + "hashtags": [ + { + "text": "freebandnames", + "indices": [ + 29, + 43 + ] + } + ], + "user_mentions": [ + + ] + }, + "in_reply_to_user_id_str": null, + "contributors": null, + "text": "Mexican Heaven, Mexican Hell #freebandnames", + "metadata": { + "iso_language_code": "en", + "result_type": "recent" + }, + "retweet_count": 0, + "in_reply_to_status_id_str": null, + "id": 249289491129438208, + "geo": null, + "retweeted": false, + "in_reply_to_user_id": null, + "place": null, + "user": { + "profile_sidebar_fill_color": "99CC33", + "profile_sidebar_border_color": "829D5E", + "profile_background_tile": false, + "name": "Thomas John Wakeman", + "profile_image_url": "http://a0.twimg.com/profile_images/2219333930/Froggystyle_normal.png", + "created_at": "Tue Sep 01 21:21:35 +0000 2009", + "location": "Kingston New York", + "follow_request_sent": null, + "profile_link_color": "D02B55", + "is_translator": false, + "id_str": "70789458", + "entities": { + "url": { + "urls": [ + { + "expanded_url": null, + "url": "", + "indices": [ + 0, + 0 + ] + } + ] + }, + "description": { + "urls": [ + + ] + } + }, + "default_profile": false, + "contributors_enabled": false, + "favourites_count": 19, + "url": null, + "profile_image_url_https": "https://si0.twimg.com/profile_images/2219333930/Froggystyle_normal.png", + "utc_offset": -18000, + "id": 70789458, + "profile_use_background_image": true, + "listed_count": 1, + "profile_text_color": "3E4415", + "lang": "en", + "followers_count": 63, + "protected": false, + "notifications": null, + "profile_background_image_url_https": "https://si0.twimg.com/images/themes/theme5/bg.gif", + "profile_background_color": "352726", + "verified": false, + "geo_enabled": false, + "time_zone": "Eastern Time (US & Canada)", + "description": "Science Fiction Writer, sort of. Likes Superheroes, Mole People, Alt. Timelines.", + "default_profile_image": false, + "profile_background_image_url": "http://a0.twimg.com/images/themes/theme5/bg.gif", + "statuses_count": 1048, + "friends_count": 63, + "following": null, + "show_all_inline_media": false, + "screen_name": "MonkiesFist" + }, + "in_reply_to_screen_name": null, + "source": "web", + "in_reply_to_status_id": null + }, + { + "coordinates": null, + "favorited": false, + "truncated": false, + "created_at": "Fri Sep 21 22:51:18 +0000 2012", + "id_str": "249279667666817024", + "entities": { + "urls": [ + + ], + "hashtags": [ + { + "text": "freebandnames", + "indices": [ + 20, + 34 + ] + } + ], + "user_mentions": [ + + ] + }, + "in_reply_to_user_id_str": null, + "contributors": null, + "text": "The Foolish Mortals #freebandnames", + "metadata": { + "iso_language_code": "en", + "result_type": "recent" + }, + "retweet_count": 0, + "in_reply_to_status_id_str": null, + "id": 249279667666817024, + "geo": null, + "retweeted": false, + "in_reply_to_user_id": null, + "place": null, + "user": { + "profile_sidebar_fill_color": "BFAC83", + "profile_sidebar_border_color": "615A44", + "profile_background_tile": true, + "name": "Marty Elmer", + "profile_image_url": "http://a0.twimg.com/profile_images/1629790393/shrinker_2000_trans_normal.png", + "created_at": "Mon May 04 00:05:00 +0000 2009", + "location": "Wisconsin, USA", + "follow_request_sent": null, + "profile_link_color": "3B2A26", + "is_translator": false, + "id_str": "37539828", + "entities": { + "url": { + "urls": [ + { + "expanded_url": null, + "url": "http://www.omnitarian.me", + "indices": [ + 0, + 24 + ] + } + ] + }, + "description": { + "urls": [ + + ] + } + }, + "default_profile": false, + "contributors_enabled": false, + "favourites_count": 647, + "url": "http://www.omnitarian.me", + "profile_image_url_https": "https://si0.twimg.com/profile_images/1629790393/shrinker_2000_trans_normal.png", + "utc_offset": -21600, + "id": 37539828, + "profile_use_background_image": true, + "listed_count": 52, + "profile_text_color": "000000", + "lang": "en", + "followers_count": 608, + "protected": false, + "notifications": null, + "profile_background_image_url_https": "https://si0.twimg.com/profile_background_images/106455659/rect6056-9.png", + "profile_background_color": "EEE3C4", + "verified": false, + "geo_enabled": false, + "time_zone": "Central Time (US & Canada)", + "description": "Cartoonist, Illustrator, and T-Shirt connoisseur", + "default_profile_image": false, + "profile_background_image_url": "http://a0.twimg.com/profile_background_images/106455659/rect6056-9.png", + "statuses_count": 3575, + "friends_count": 249, + "following": null, + "show_all_inline_media": true, + "screen_name": "Omnitarian" + }, + "in_reply_to_screen_name": null, + "source": "Twitter for iPhone", + "in_reply_to_status_id": null + } + ], + "search_metadata": { + "max_id": 250126199840518145, + "since_id": 24012619984051000, + "refresh_url": "?since_id=250126199840518145&q=%23freebandnames&result_type=mixed&include_entities=1", + "next_results": "?max_id=249279667666817023&q=%23freebandnames&count=4&include_entities=1&result_type=mixed", + "count": 4, + "completed_in": 0.035, + "since_id_str": "24012619984051000", + "query": "%23freebandnames", + "max_id_str": "250126199840518145" + } +} diff --git a/vendor/github.com/mailru/easyjson/benchmark/ffjson_test.go b/vendor/github.com/mailru/easyjson/benchmark/ffjson_test.go new file mode 100644 index 0000000..0367182 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/benchmark/ffjson_test.go @@ -0,0 +1,190 @@ +// +build use_ffjson + +package benchmark + +import ( + "testing" + + "github.com/pquerna/ffjson/ffjson" +) + +func BenchmarkFF_Unmarshal_M(b *testing.B) { + b.SetBytes(int64(len(largeStructText))) + for i := 0; i < b.N; i++ { + var s LargeStruct + err := ffjson.UnmarshalFast(largeStructText, &s) + if err != nil { + b.Error(err) + } + } +} + +func BenchmarkFF_Unmarshal_S(b *testing.B) { + for i := 0; i < b.N; i++ { + var s Entities + err := ffjson.UnmarshalFast(smallStructText, &s) + if err != nil { + b.Error(err) + } + } + b.SetBytes(int64(len(smallStructText))) +} + +func BenchmarkFF_Marshal_M(b *testing.B) { + var l int64 + for i := 0; i < b.N; i++ { + data, err := ffjson.MarshalFast(&largeStructData) + if err != nil { + b.Error(err) + } + l = int64(len(data)) + } + b.SetBytes(l) +} + +func BenchmarkFF_Marshal_S(b *testing.B) { + var l int64 + for i := 0; i < b.N; i++ { + data, err := ffjson.MarshalFast(&smallStructData) + if err != nil { + b.Error(err) + } + l = int64(len(data)) + } + b.SetBytes(l) +} + +func BenchmarkFF_Marshal_M_Pool(b *testing.B) { + var l int64 + for i := 0; i < b.N; i++ { + data, err := ffjson.MarshalFast(&largeStructData) + if err != nil { + b.Error(err) + } + l = int64(len(data)) + ffjson.Pool(data) + } + b.SetBytes(l) +} + +func BenchmarkFF_Marshal_L(b *testing.B) { + var l int64 + for i := 0; i < b.N; i++ { + data, err := ffjson.MarshalFast(&xlStructData) + if err != nil { + b.Error(err) + } + l = int64(len(data)) + } + b.SetBytes(l) +} + +func BenchmarkFF_Marshal_L_Pool(b *testing.B) { + var l int64 + for i := 0; i < b.N; i++ { + data, err := ffjson.MarshalFast(&xlStructData) + if err != nil { + b.Error(err) + } + l = int64(len(data)) + ffjson.Pool(data) + } + b.SetBytes(l) +} + +func BenchmarkFF_Marshal_L_Pool_Parallel(b *testing.B) { + var l int64 + for i := 0; i < b.N; i++ { + data, err := ffjson.MarshalFast(&xlStructData) + if err != nil { + b.Error(err) + } + l = int64(len(data)) + ffjson.Pool(data) + } + b.SetBytes(l) +} +func BenchmarkFF_Marshal_M_Pool_Parallel(b *testing.B) { + var l int64 + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + data, err := ffjson.MarshalFast(&largeStructData) + if err != nil { + b.Error(err) + } + l = int64(len(data)) + ffjson.Pool(data) + } + }) + b.SetBytes(l) +} + +func BenchmarkFF_Marshal_S_Pool(b *testing.B) { + var l int64 + for i := 0; i < b.N; i++ { + data, err := ffjson.MarshalFast(&smallStructData) + if err != nil { + b.Error(err) + } + l = int64(len(data)) + ffjson.Pool(data) + } + b.SetBytes(l) +} + +func BenchmarkFF_Marshal_S_Pool_Parallel(b *testing.B) { + var l int64 + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + data, err := ffjson.MarshalFast(&smallStructData) + if err != nil { + b.Error(err) + } + l = int64(len(data)) + ffjson.Pool(data) + } + }) + b.SetBytes(l) +} + +func BenchmarkFF_Marshal_S_Parallel(b *testing.B) { + var l int64 + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + data, err := ffjson.MarshalFast(&smallStructData) + if err != nil { + b.Error(err) + } + l = int64(len(data)) + } + }) + b.SetBytes(l) +} + +func BenchmarkFF_Marshal_M_Parallel(b *testing.B) { + var l int64 + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + data, err := ffjson.MarshalFast(&largeStructData) + if err != nil { + b.Error(err) + } + l = int64(len(data)) + } + }) + b.SetBytes(l) +} + +func BenchmarkFF_Marshal_L_Parallel(b *testing.B) { + var l int64 + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + data, err := ffjson.MarshalFast(&xlStructData) + if err != nil { + b.Error(err) + } + l = int64(len(data)) + } + }) + b.SetBytes(l) +} diff --git a/vendor/github.com/mailru/easyjson/benchmark/jsoniter_test.go b/vendor/github.com/mailru/easyjson/benchmark/jsoniter_test.go new file mode 100644 index 0000000..004f891 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/benchmark/jsoniter_test.go @@ -0,0 +1,119 @@ +// +build use_jsoniter + +package benchmark + +import ( + "testing" + + jsoniter "github.com/json-iterator/go" +) + +func BenchmarkJI_Unmarshal_M(b *testing.B) { + b.SetBytes(int64(len(largeStructText))) + for i := 0; i < b.N; i++ { + var s LargeStruct + err := jsoniter.Unmarshal(largeStructText, &s) + if err != nil { + b.Error(err) + } + } +} + +func BenchmarkJI_Unmarshal_S(b *testing.B) { + for i := 0; i < b.N; i++ { + var s Entities + err := jsoniter.Unmarshal(smallStructText, &s) + if err != nil { + b.Error(err) + } + } + b.SetBytes(int64(len(smallStructText))) +} + +func BenchmarkJI_Marshal_M(b *testing.B) { + var l int64 + for i := 0; i < b.N; i++ { + data, err := jsoniter.Marshal(&largeStructData) + if err != nil { + b.Error(err) + } + l = int64(len(data)) + } + b.SetBytes(l) +} + +func BenchmarkJI_Marshal_L(b *testing.B) { + var l int64 + for i := 0; i < b.N; i++ { + data, err := jsoniter.Marshal(&xlStructData) + if err != nil { + b.Error(err) + } + l = int64(len(data)) + } + b.SetBytes(l) +} + +func BenchmarkJI_Marshal_M_Parallel(b *testing.B) { + var l int64 + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + data, err := jsoniter.Marshal(&largeStructData) + if err != nil { + b.Error(err) + } + l = int64(len(data)) + } + }) + b.SetBytes(l) +} + +func BenchmarkJI_Marshal_L_Parallel(b *testing.B) { + var l int64 + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + data, err := jsoniter.Marshal(&xlStructData) + if err != nil { + b.Error(err) + } + l = int64(len(data)) + } + }) + b.SetBytes(l) +} + +func BenchmarkJI_Marshal_S(b *testing.B) { + var l int64 + for i := 0; i < b.N; i++ { + data, err := jsoniter.Marshal(&smallStructData) + if err != nil { + b.Error(err) + } + l = int64(len(data)) + } + b.SetBytes(l) +} + +func BenchmarkJI_Marshal_S_Parallel(b *testing.B) { + var l int64 + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + data, err := jsoniter.Marshal(&smallStructData) + if err != nil { + b.Error(err) + } + l = int64(len(data)) + } + }) + b.SetBytes(l) +} + +func BenchmarkJI_Marshal_M_ToWriter(b *testing.B) { + enc := jsoniter.NewEncoder(&DummyWriter{}) + for i := 0; i < b.N; i++ { + err := enc.Encode(&largeStructData) + if err != nil { + b.Error(err) + } + } +} diff --git a/vendor/github.com/mailru/easyjson/benchmark/ujson.sh b/vendor/github.com/mailru/easyjson/benchmark/ujson.sh new file mode 100755 index 0000000..378e7df --- /dev/null +++ b/vendor/github.com/mailru/easyjson/benchmark/ujson.sh @@ -0,0 +1,7 @@ +#/bin/bash + +echo -n "Python ujson module, DECODE: " +python -m timeit -s "import ujson; data = open('`dirname $0`/example.json', 'r').read()" 'ujson.loads(data)' + +echo -n "Python ujson module, ENCODE: " +python -m timeit -s "import ujson; data = open('`dirname $0`/example.json', 'r').read(); obj = ujson.loads(data)" 'ujson.dumps(obj)' diff --git a/vendor/github.com/mailru/easyjson/bootstrap/bootstrap.go b/vendor/github.com/mailru/easyjson/bootstrap/bootstrap.go new file mode 100644 index 0000000..3c20e09 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/bootstrap/bootstrap.go @@ -0,0 +1,188 @@ +// Package bootstrap implements the bootstrapping logic: generation of a .go file to +// launch the actual generator and launching the generator itself. +// +// The package may be preferred to a command-line utility if generating the serializers +// from golang code is required. +package bootstrap + +import ( + "fmt" + "io/ioutil" + "os" + "os/exec" + "path/filepath" + "sort" +) + +const genPackage = "github.com/mailru/easyjson/gen" +const pkgWriter = "github.com/mailru/easyjson/jwriter" +const pkgLexer = "github.com/mailru/easyjson/jlexer" + +type Generator struct { + PkgPath, PkgName string + Types []string + + NoStdMarshalers bool + SnakeCase bool + LowerCamelCase bool + OmitEmpty bool + + OutName string + BuildTags string + + StubsOnly bool + LeaveTemps bool + NoFormat bool +} + +// writeStub outputs an initial stubs for marshalers/unmarshalers so that the package +// using marshalers/unmarshales compiles correctly for boostrapping code. +func (g *Generator) writeStub() error { + f, err := os.Create(g.OutName) + if err != nil { + return err + } + defer f.Close() + + if g.BuildTags != "" { + fmt.Fprintln(f, "// +build ", g.BuildTags) + fmt.Fprintln(f) + } + fmt.Fprintln(f, "// TEMPORARY AUTOGENERATED FILE: easyjson stub code to make the package") + fmt.Fprintln(f, "// compilable during generation.") + fmt.Fprintln(f) + fmt.Fprintln(f, "package ", g.PkgName) + + if len(g.Types) > 0 { + fmt.Fprintln(f) + fmt.Fprintln(f, "import (") + fmt.Fprintln(f, ` "`+pkgWriter+`"`) + fmt.Fprintln(f, ` "`+pkgLexer+`"`) + fmt.Fprintln(f, ")") + } + + sort.Strings(g.Types) + for _, t := range g.Types { + fmt.Fprintln(f) + if !g.NoStdMarshalers { + fmt.Fprintln(f, "func (", t, ") MarshalJSON() ([]byte, error) { return nil, nil }") + fmt.Fprintln(f, "func (*", t, ") UnmarshalJSON([]byte) error { return nil }") + } + + fmt.Fprintln(f, "func (", t, ") MarshalEasyJSON(w *jwriter.Writer) {}") + fmt.Fprintln(f, "func (*", t, ") UnmarshalEasyJSON(l *jlexer.Lexer) {}") + fmt.Fprintln(f) + fmt.Fprintln(f, "type EasyJSON_exporter_"+t+" *"+t) + } + return nil +} + +// writeMain creates a .go file that launches the generator if 'go run'. +func (g *Generator) writeMain() (path string, err error) { + f, err := ioutil.TempFile(filepath.Dir(g.OutName), "easyjson-bootstrap") + if err != nil { + return "", err + } + + fmt.Fprintln(f, "// +build ignore") + fmt.Fprintln(f) + fmt.Fprintln(f, "// TEMPORARY AUTOGENERATED FILE: easyjson bootstapping code to launch") + fmt.Fprintln(f, "// the actual generator.") + fmt.Fprintln(f) + fmt.Fprintln(f, "package main") + fmt.Fprintln(f) + fmt.Fprintln(f, "import (") + fmt.Fprintln(f, ` "fmt"`) + fmt.Fprintln(f, ` "os"`) + fmt.Fprintln(f) + fmt.Fprintf(f, " %q\n", genPackage) + if len(g.Types) > 0 { + fmt.Fprintln(f) + fmt.Fprintf(f, " pkg %q\n", g.PkgPath) + } + fmt.Fprintln(f, ")") + fmt.Fprintln(f) + fmt.Fprintln(f, "func main() {") + fmt.Fprintf(f, " g := gen.NewGenerator(%q)\n", filepath.Base(g.OutName)) + fmt.Fprintf(f, " g.SetPkg(%q, %q)\n", g.PkgName, g.PkgPath) + if g.BuildTags != "" { + fmt.Fprintf(f, " g.SetBuildTags(%q)\n", g.BuildTags) + } + if g.SnakeCase { + fmt.Fprintln(f, " g.UseSnakeCase()") + } + if g.LowerCamelCase { + fmt.Fprintln(f, " g.UseLowerCamelCase()") + } + if g.OmitEmpty { + fmt.Fprintln(f, " g.OmitEmpty()") + } + if g.NoStdMarshalers { + fmt.Fprintln(f, " g.NoStdMarshalers()") + } + + sort.Strings(g.Types) + for _, v := range g.Types { + fmt.Fprintln(f, " g.Add(pkg.EasyJSON_exporter_"+v+"(nil))") + } + + fmt.Fprintln(f, " if err := g.Run(os.Stdout); err != nil {") + fmt.Fprintln(f, " fmt.Fprintln(os.Stderr, err)") + fmt.Fprintln(f, " os.Exit(1)") + fmt.Fprintln(f, " }") + fmt.Fprintln(f, "}") + + src := f.Name() + if err := f.Close(); err != nil { + return src, err + } + + dest := src + ".go" + return dest, os.Rename(src, dest) +} + +func (g *Generator) Run() error { + if err := g.writeStub(); err != nil { + return err + } + if g.StubsOnly { + return nil + } + + path, err := g.writeMain() + if err != nil { + return err + } + if !g.LeaveTemps { + defer os.Remove(path) + } + + f, err := os.Create(g.OutName + ".tmp") + if err != nil { + return err + } + if !g.LeaveTemps { + defer os.Remove(f.Name()) // will not remove after rename + } + + cmd := exec.Command("go", "run", "-tags", g.BuildTags, path) + cmd.Stdout = f + cmd.Stderr = os.Stderr + if err = cmd.Run(); err != nil { + return err + } + + f.Close() + + if !g.NoFormat { + cmd = exec.Command("gofmt", "-w", f.Name()) + cmd.Stderr = os.Stderr + cmd.Stdout = os.Stdout + + if err = cmd.Run(); err != nil { + return err + } + } + + return os.Rename(f.Name(), g.OutName) +} diff --git a/vendor/github.com/mailru/easyjson/buffer/pool.go b/vendor/github.com/mailru/easyjson/buffer/pool.go new file mode 100644 index 0000000..07fb4bc --- /dev/null +++ b/vendor/github.com/mailru/easyjson/buffer/pool.go @@ -0,0 +1,270 @@ +// Package buffer implements a buffer for serialization, consisting of a chain of []byte-s to +// reduce copying and to allow reuse of individual chunks. +package buffer + +import ( + "io" + "sync" +) + +// PoolConfig contains configuration for the allocation and reuse strategy. +type PoolConfig struct { + StartSize int // Minimum chunk size that is allocated. + PooledSize int // Minimum chunk size that is reused, reusing chunks too small will result in overhead. + MaxSize int // Maximum chunk size that will be allocated. +} + +var config = PoolConfig{ + StartSize: 128, + PooledSize: 512, + MaxSize: 32768, +} + +// Reuse pool: chunk size -> pool. +var buffers = map[int]*sync.Pool{} + +func initBuffers() { + for l := config.PooledSize; l <= config.MaxSize; l *= 2 { + buffers[l] = new(sync.Pool) + } +} + +func init() { + initBuffers() +} + +// Init sets up a non-default pooling and allocation strategy. Should be run before serialization is done. +func Init(cfg PoolConfig) { + config = cfg + initBuffers() +} + +// putBuf puts a chunk to reuse pool if it can be reused. +func putBuf(buf []byte) { + size := cap(buf) + if size < config.PooledSize { + return + } + if c := buffers[size]; c != nil { + c.Put(buf[:0]) + } +} + +// getBuf gets a chunk from reuse pool or creates a new one if reuse failed. +func getBuf(size int) []byte { + if size < config.PooledSize { + return make([]byte, 0, size) + } + + if c := buffers[size]; c != nil { + v := c.Get() + if v != nil { + return v.([]byte) + } + } + return make([]byte, 0, size) +} + +// Buffer is a buffer optimized for serialization without extra copying. +type Buffer struct { + + // Buf is the current chunk that can be used for serialization. + Buf []byte + + toPool []byte + bufs [][]byte +} + +// EnsureSpace makes sure that the current chunk contains at least s free bytes, +// possibly creating a new chunk. +func (b *Buffer) EnsureSpace(s int) { + if cap(b.Buf)-len(b.Buf) >= s { + return + } + l := len(b.Buf) + if l > 0 { + if cap(b.toPool) != cap(b.Buf) { + // Chunk was reallocated, toPool can be pooled. + putBuf(b.toPool) + } + if cap(b.bufs) == 0 { + b.bufs = make([][]byte, 0, 8) + } + b.bufs = append(b.bufs, b.Buf) + l = cap(b.toPool) * 2 + } else { + l = config.StartSize + } + + if l > config.MaxSize { + l = config.MaxSize + } + b.Buf = getBuf(l) + b.toPool = b.Buf +} + +// AppendByte appends a single byte to buffer. +func (b *Buffer) AppendByte(data byte) { + if cap(b.Buf) == len(b.Buf) { // EnsureSpace won't be inlined. + b.EnsureSpace(1) + } + b.Buf = append(b.Buf, data) +} + +// AppendBytes appends a byte slice to buffer. +func (b *Buffer) AppendBytes(data []byte) { + for len(data) > 0 { + if cap(b.Buf) == len(b.Buf) { // EnsureSpace won't be inlined. + b.EnsureSpace(1) + } + + sz := cap(b.Buf) - len(b.Buf) + if sz > len(data) { + sz = len(data) + } + + b.Buf = append(b.Buf, data[:sz]...) + data = data[sz:] + } +} + +// AppendBytes appends a string to buffer. +func (b *Buffer) AppendString(data string) { + for len(data) > 0 { + if cap(b.Buf) == len(b.Buf) { // EnsureSpace won't be inlined. + b.EnsureSpace(1) + } + + sz := cap(b.Buf) - len(b.Buf) + if sz > len(data) { + sz = len(data) + } + + b.Buf = append(b.Buf, data[:sz]...) + data = data[sz:] + } +} + +// Size computes the size of a buffer by adding sizes of every chunk. +func (b *Buffer) Size() int { + size := len(b.Buf) + for _, buf := range b.bufs { + size += len(buf) + } + return size +} + +// DumpTo outputs the contents of a buffer to a writer and resets the buffer. +func (b *Buffer) DumpTo(w io.Writer) (written int, err error) { + var n int + for _, buf := range b.bufs { + if err == nil { + n, err = w.Write(buf) + written += n + } + putBuf(buf) + } + + if err == nil { + n, err = w.Write(b.Buf) + written += n + } + putBuf(b.toPool) + + b.bufs = nil + b.Buf = nil + b.toPool = nil + + return +} + +// BuildBytes creates a single byte slice with all the contents of the buffer. Data is +// copied if it does not fit in a single chunk. You can optionally provide one byte +// slice as argument that it will try to reuse. +func (b *Buffer) BuildBytes(reuse ...[]byte) []byte { + if len(b.bufs) == 0 { + ret := b.Buf + b.toPool = nil + b.Buf = nil + return ret + } + + var ret []byte + size := b.Size() + + // If we got a buffer as argument and it is big enought, reuse it. + if len(reuse) == 1 && cap(reuse[0]) >= size { + ret = reuse[0][:0] + } else { + ret = make([]byte, 0, size) + } + for _, buf := range b.bufs { + ret = append(ret, buf...) + putBuf(buf) + } + + ret = append(ret, b.Buf...) + putBuf(b.toPool) + + b.bufs = nil + b.toPool = nil + b.Buf = nil + + return ret +} + +type readCloser struct { + offset int + bufs [][]byte +} + +func (r *readCloser) Read(p []byte) (n int, err error) { + for _, buf := range r.bufs { + // Copy as much as we can. + x := copy(p[n:], buf[r.offset:]) + n += x // Increment how much we filled. + + // Did we empty the whole buffer? + if r.offset+x == len(buf) { + // On to the next buffer. + r.offset = 0 + r.bufs = r.bufs[1:] + + // We can release this buffer. + putBuf(buf) + } else { + r.offset += x + } + + if n == len(p) { + break + } + } + // No buffers left or nothing read? + if len(r.bufs) == 0 { + err = io.EOF + } + return +} + +func (r *readCloser) Close() error { + // Release all remaining buffers. + for _, buf := range r.bufs { + putBuf(buf) + } + // In case Close gets called multiple times. + r.bufs = nil + + return nil +} + +// ReadCloser creates an io.ReadCloser with all the contents of the buffer. +func (b *Buffer) ReadCloser() io.ReadCloser { + ret := &readCloser{0, append(b.bufs, b.Buf)} + + b.bufs = nil + b.toPool = nil + b.Buf = nil + + return ret +} diff --git a/vendor/github.com/mailru/easyjson/buffer/pool_test.go b/vendor/github.com/mailru/easyjson/buffer/pool_test.go new file mode 100644 index 0000000..680623a --- /dev/null +++ b/vendor/github.com/mailru/easyjson/buffer/pool_test.go @@ -0,0 +1,107 @@ +package buffer + +import ( + "bytes" + "testing" +) + +func TestAppendByte(t *testing.T) { + var b Buffer + var want []byte + + for i := 0; i < 1000; i++ { + b.AppendByte(1) + b.AppendByte(2) + want = append(want, 1, 2) + } + + got := b.BuildBytes() + if !bytes.Equal(got, want) { + t.Errorf("BuildBytes() = %v; want %v", got, want) + } +} + +func TestAppendBytes(t *testing.T) { + var b Buffer + var want []byte + + for i := 0; i < 1000; i++ { + b.AppendBytes([]byte{1, 2}) + want = append(want, 1, 2) + } + + got := b.BuildBytes() + if !bytes.Equal(got, want) { + t.Errorf("BuildBytes() = %v; want %v", got, want) + } +} + +func TestAppendString(t *testing.T) { + var b Buffer + var want []byte + + s := "test" + for i := 0; i < 1000; i++ { + b.AppendBytes([]byte(s)) + want = append(want, s...) + } + + got := b.BuildBytes() + if !bytes.Equal(got, want) { + t.Errorf("BuildBytes() = %v; want %v", got, want) + } +} + +func TestDumpTo(t *testing.T) { + var b Buffer + var want []byte + + s := "test" + for i := 0; i < 1000; i++ { + b.AppendBytes([]byte(s)) + want = append(want, s...) + } + + out := &bytes.Buffer{} + n, err := b.DumpTo(out) + if err != nil { + t.Errorf("DumpTo() error: %v", err) + } + + got := out.Bytes() + if !bytes.Equal(got, want) { + t.Errorf("DumpTo(): got %v; want %v", got, want) + } + + if n != len(want) { + t.Errorf("DumpTo() = %v; want %v", n, len(want)) + } +} + +func TestReadCloser(t *testing.T) { + var b Buffer + var want []byte + + s := "test" + for i := 0; i < 1000; i++ { + b.AppendBytes([]byte(s)) + want = append(want, s...) + } + + out := &bytes.Buffer{} + rc := b.ReadCloser() + n, err := out.ReadFrom(rc) + if err != nil { + t.Errorf("ReadCloser() error: %v", err) + } + rc.Close() // Will always return nil + + got := out.Bytes() + if !bytes.Equal(got, want) { + t.Errorf("DumpTo(): got %v; want %v", got, want) + } + + if n != int64(len(want)) { + t.Errorf("DumpTo() = %v; want %v", n, len(want)) + } +} diff --git a/vendor/github.com/mailru/easyjson/easyjson/main.go b/vendor/github.com/mailru/easyjson/easyjson/main.go new file mode 100644 index 0000000..1cd30bb --- /dev/null +++ b/vendor/github.com/mailru/easyjson/easyjson/main.go @@ -0,0 +1,106 @@ +package main + +import ( + "errors" + "flag" + "fmt" + "os" + "path/filepath" + "strings" + + "github.com/mailru/easyjson/bootstrap" + // Reference the gen package to be friendly to vendoring tools, + // as it is an indirect dependency. + // (The temporary bootstrapping code uses it.) + _ "github.com/mailru/easyjson/gen" + "github.com/mailru/easyjson/parser" +) + +var buildTags = flag.String("build_tags", "", "build tags to add to generated file") +var snakeCase = flag.Bool("snake_case", false, "use snake_case names instead of CamelCase by default") +var lowerCamelCase = flag.Bool("lower_camel_case", false, "use lowerCamelCase names instead of CamelCase by default") +var noStdMarshalers = flag.Bool("no_std_marshalers", false, "don't generate MarshalJSON/UnmarshalJSON funcs") +var omitEmpty = flag.Bool("omit_empty", false, "omit empty fields by default") +var allStructs = flag.Bool("all", false, "generate marshaler/unmarshalers for all structs in a file") +var leaveTemps = flag.Bool("leave_temps", false, "do not delete temporary files") +var stubs = flag.Bool("stubs", false, "only generate stubs for marshaler/unmarshaler funcs") +var noformat = flag.Bool("noformat", false, "do not run 'gofmt -w' on output file") +var specifiedName = flag.String("output_filename", "", "specify the filename of the output") +var processPkg = flag.Bool("pkg", false, "process the whole package instead of just the given file") + +func generate(fname string) (err error) { + fInfo, err := os.Stat(fname) + if err != nil { + return err + } + + p := parser.Parser{AllStructs: *allStructs} + if err := p.Parse(fname, fInfo.IsDir()); err != nil { + return fmt.Errorf("Error parsing %v: %v", fname, err) + } + + var outName string + if fInfo.IsDir() { + outName = filepath.Join(fname, p.PkgName+"_easyjson.go") + } else { + if s := strings.TrimSuffix(fname, ".go"); s == fname { + return errors.New("Filename must end in '.go'") + } else { + outName = s + "_easyjson.go" + } + } + + if *specifiedName != "" { + outName = *specifiedName + } + + var trimmedBuildTags string + if *buildTags != "" { + trimmedBuildTags = strings.TrimSpace(*buildTags) + } + + g := bootstrap.Generator{ + BuildTags: trimmedBuildTags, + PkgPath: p.PkgPath, + PkgName: p.PkgName, + Types: p.StructNames, + SnakeCase: *snakeCase, + LowerCamelCase: *lowerCamelCase, + NoStdMarshalers: *noStdMarshalers, + OmitEmpty: *omitEmpty, + LeaveTemps: *leaveTemps, + OutName: outName, + StubsOnly: *stubs, + NoFormat: *noformat, + } + + if err := g.Run(); err != nil { + return fmt.Errorf("Bootstrap failed: %v", err) + } + return nil +} + +func main() { + flag.Parse() + + files := flag.Args() + + gofile := os.Getenv("GOFILE") + if *processPkg { + gofile = filepath.Dir(gofile) + } + + if len(files) == 0 && gofile != "" { + files = []string{gofile} + } else if len(files) == 0 { + flag.Usage() + os.Exit(1) + } + + for _, fname := range files { + if err := generate(fname); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } + } +} diff --git a/vendor/github.com/mailru/easyjson/gen/decoder.go b/vendor/github.com/mailru/easyjson/gen/decoder.go new file mode 100644 index 0000000..3c8f8f8 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/gen/decoder.go @@ -0,0 +1,507 @@ +package gen + +import ( + "encoding" + "encoding/json" + "fmt" + "reflect" + "strings" + "unicode" + + "github.com/mailru/easyjson" +) + +// Target this byte size for initial slice allocation to reduce garbage collection. +const minSliceBytes = 64 + +func (g *Generator) getDecoderName(t reflect.Type) string { + return g.functionName("decode", t) +} + +var primitiveDecoders = map[reflect.Kind]string{ + reflect.String: "in.String()", + reflect.Bool: "in.Bool()", + reflect.Int: "in.Int()", + reflect.Int8: "in.Int8()", + reflect.Int16: "in.Int16()", + reflect.Int32: "in.Int32()", + reflect.Int64: "in.Int64()", + reflect.Uint: "in.Uint()", + reflect.Uint8: "in.Uint8()", + reflect.Uint16: "in.Uint16()", + reflect.Uint32: "in.Uint32()", + reflect.Uint64: "in.Uint64()", + reflect.Float32: "in.Float32()", + reflect.Float64: "in.Float64()", +} + +var primitiveStringDecoders = map[reflect.Kind]string{ + reflect.String: "in.String()", + reflect.Int: "in.IntStr()", + reflect.Int8: "in.Int8Str()", + reflect.Int16: "in.Int16Str()", + reflect.Int32: "in.Int32Str()", + reflect.Int64: "in.Int64Str()", + reflect.Uint: "in.UintStr()", + reflect.Uint8: "in.Uint8Str()", + reflect.Uint16: "in.Uint16Str()", + reflect.Uint32: "in.Uint32Str()", + reflect.Uint64: "in.Uint64Str()", + reflect.Uintptr: "in.UintptrStr()", + reflect.Float32: "in.Float32Str()", + reflect.Float64: "in.Float64Str()", +} + +var customDecoders = map[string]string{ + "json.Number": "in.JsonNumber()", +} + +// genTypeDecoder generates decoding code for the type t, but uses unmarshaler interface if implemented by t. +func (g *Generator) genTypeDecoder(t reflect.Type, out string, tags fieldTags, indent int) error { + ws := strings.Repeat(" ", indent) + + unmarshalerIface := reflect.TypeOf((*easyjson.Unmarshaler)(nil)).Elem() + if reflect.PtrTo(t).Implements(unmarshalerIface) { + fmt.Fprintln(g.out, ws+"("+out+").UnmarshalEasyJSON(in)") + return nil + } + + unmarshalerIface = reflect.TypeOf((*json.Unmarshaler)(nil)).Elem() + if reflect.PtrTo(t).Implements(unmarshalerIface) { + fmt.Fprintln(g.out, ws+"if data := in.Raw(); in.Ok() {") + fmt.Fprintln(g.out, ws+" in.AddError( ("+out+").UnmarshalJSON(data) )") + fmt.Fprintln(g.out, ws+"}") + return nil + } + + unmarshalerIface = reflect.TypeOf((*encoding.TextUnmarshaler)(nil)).Elem() + if reflect.PtrTo(t).Implements(unmarshalerIface) { + fmt.Fprintln(g.out, ws+"if data := in.UnsafeBytes(); in.Ok() {") + fmt.Fprintln(g.out, ws+" in.AddError( ("+out+").UnmarshalText(data) )") + fmt.Fprintln(g.out, ws+"}") + return nil + } + + err := g.genTypeDecoderNoCheck(t, out, tags, indent) + return err +} + +// returns true of the type t implements one of the custom unmarshaler interfaces +func hasCustomUnmarshaler(t reflect.Type) bool { + t = reflect.PtrTo(t) + return t.Implements(reflect.TypeOf((*easyjson.Unmarshaler)(nil)).Elem()) || + t.Implements(reflect.TypeOf((*json.Unmarshaler)(nil)).Elem()) || + t.Implements(reflect.TypeOf((*encoding.TextUnmarshaler)(nil)).Elem()) +} + +// genTypeDecoderNoCheck generates decoding code for the type t. +func (g *Generator) genTypeDecoderNoCheck(t reflect.Type, out string, tags fieldTags, indent int) error { + ws := strings.Repeat(" ", indent) + // Check whether type is primitive, needs to be done after interface check. + if dec := customDecoders[t.String()]; dec != "" { + fmt.Fprintln(g.out, ws+out+" = "+dec) + return nil + } else if dec := primitiveStringDecoders[t.Kind()]; dec != "" && tags.asString { + fmt.Fprintln(g.out, ws+out+" = "+g.getType(t)+"("+dec+")") + return nil + } else if dec := primitiveDecoders[t.Kind()]; dec != "" { + fmt.Fprintln(g.out, ws+out+" = "+g.getType(t)+"("+dec+")") + return nil + } + + switch t.Kind() { + case reflect.Slice: + tmpVar := g.uniqueVarName() + elem := t.Elem() + + if elem.Kind() == reflect.Uint8 { + fmt.Fprintln(g.out, ws+"if in.IsNull() {") + fmt.Fprintln(g.out, ws+" in.Skip()") + fmt.Fprintln(g.out, ws+" "+out+" = nil") + fmt.Fprintln(g.out, ws+"} else {") + fmt.Fprintln(g.out, ws+" "+out+" = in.Bytes()") + fmt.Fprintln(g.out, ws+"}") + + } else { + + capacity := minSliceBytes / elem.Size() + if capacity == 0 { + capacity = 1 + } + + fmt.Fprintln(g.out, ws+"if in.IsNull() {") + fmt.Fprintln(g.out, ws+" in.Skip()") + fmt.Fprintln(g.out, ws+" "+out+" = nil") + fmt.Fprintln(g.out, ws+"} else {") + fmt.Fprintln(g.out, ws+" in.Delim('[')") + fmt.Fprintln(g.out, ws+" if "+out+" == nil {") + fmt.Fprintln(g.out, ws+" if !in.IsDelim(']') {") + fmt.Fprintln(g.out, ws+" "+out+" = make("+g.getType(t)+", 0, "+fmt.Sprint(capacity)+")") + fmt.Fprintln(g.out, ws+" } else {") + fmt.Fprintln(g.out, ws+" "+out+" = "+g.getType(t)+"{}") + fmt.Fprintln(g.out, ws+" }") + fmt.Fprintln(g.out, ws+" } else { ") + fmt.Fprintln(g.out, ws+" "+out+" = ("+out+")[:0]") + fmt.Fprintln(g.out, ws+" }") + fmt.Fprintln(g.out, ws+" for !in.IsDelim(']') {") + fmt.Fprintln(g.out, ws+" var "+tmpVar+" "+g.getType(elem)) + + if err := g.genTypeDecoder(elem, tmpVar, tags, indent+2); err != nil { + return err + } + + fmt.Fprintln(g.out, ws+" "+out+" = append("+out+", "+tmpVar+")") + fmt.Fprintln(g.out, ws+" in.WantComma()") + fmt.Fprintln(g.out, ws+" }") + fmt.Fprintln(g.out, ws+" in.Delim(']')") + fmt.Fprintln(g.out, ws+"}") + } + + case reflect.Array: + iterVar := g.uniqueVarName() + elem := t.Elem() + + if elem.Kind() == reflect.Uint8 { + fmt.Fprintln(g.out, ws+"if in.IsNull() {") + fmt.Fprintln(g.out, ws+" in.Skip()") + fmt.Fprintln(g.out, ws+"} else {") + fmt.Fprintln(g.out, ws+" copy("+out+"[:], in.Bytes())") + fmt.Fprintln(g.out, ws+"}") + + } else { + + length := t.Len() + + fmt.Fprintln(g.out, ws+"if in.IsNull() {") + fmt.Fprintln(g.out, ws+" in.Skip()") + fmt.Fprintln(g.out, ws+"} else {") + fmt.Fprintln(g.out, ws+" in.Delim('[')") + fmt.Fprintln(g.out, ws+" "+iterVar+" := 0") + fmt.Fprintln(g.out, ws+" for !in.IsDelim(']') {") + fmt.Fprintln(g.out, ws+" if "+iterVar+" < "+fmt.Sprint(length)+" {") + + if err := g.genTypeDecoder(elem, "("+out+")["+iterVar+"]", tags, indent+3); err != nil { + return err + } + + fmt.Fprintln(g.out, ws+" "+iterVar+"++") + fmt.Fprintln(g.out, ws+" } else {") + fmt.Fprintln(g.out, ws+" in.SkipRecursive()") + fmt.Fprintln(g.out, ws+" }") + fmt.Fprintln(g.out, ws+" in.WantComma()") + fmt.Fprintln(g.out, ws+" }") + fmt.Fprintln(g.out, ws+" in.Delim(']')") + fmt.Fprintln(g.out, ws+"}") + } + + case reflect.Struct: + dec := g.getDecoderName(t) + g.addType(t) + + fmt.Fprintln(g.out, ws+dec+"(in, &"+out+")") + + case reflect.Ptr: + fmt.Fprintln(g.out, ws+"if in.IsNull() {") + fmt.Fprintln(g.out, ws+" in.Skip()") + fmt.Fprintln(g.out, ws+" "+out+" = nil") + fmt.Fprintln(g.out, ws+"} else {") + fmt.Fprintln(g.out, ws+" if "+out+" == nil {") + fmt.Fprintln(g.out, ws+" "+out+" = new("+g.getType(t.Elem())+")") + fmt.Fprintln(g.out, ws+" }") + + if err := g.genTypeDecoder(t.Elem(), "*"+out, tags, indent+1); err != nil { + return err + } + + fmt.Fprintln(g.out, ws+"}") + + case reflect.Map: + key := t.Key() + keyDec, ok := primitiveStringDecoders[key.Kind()] + if !ok && !hasCustomUnmarshaler(key) { + return fmt.Errorf("map type %v not supported: only string and integer keys and types implementing json.Unmarshaler are allowed", key) + } // else assume the caller knows what they are doing and that the custom unmarshaler performs the translation from string or integer keys to the key type + elem := t.Elem() + tmpVar := g.uniqueVarName() + + fmt.Fprintln(g.out, ws+"if in.IsNull() {") + fmt.Fprintln(g.out, ws+" in.Skip()") + fmt.Fprintln(g.out, ws+"} else {") + fmt.Fprintln(g.out, ws+" in.Delim('{')") + fmt.Fprintln(g.out, ws+" if !in.IsDelim('}') {") + fmt.Fprintln(g.out, ws+" "+out+" = make("+g.getType(t)+")") + fmt.Fprintln(g.out, ws+" } else {") + fmt.Fprintln(g.out, ws+" "+out+" = nil") + fmt.Fprintln(g.out, ws+" }") + + fmt.Fprintln(g.out, ws+" for !in.IsDelim('}') {") + if keyDec != "" { + fmt.Fprintln(g.out, ws+" key := "+g.getType(key)+"("+keyDec+")") + } else { + fmt.Fprintln(g.out, ws+" var key "+g.getType(key)) + if err := g.genTypeDecoder(key, "key", tags, indent+2); err != nil { + return err + } + } + + fmt.Fprintln(g.out, ws+" in.WantColon()") + fmt.Fprintln(g.out, ws+" var "+tmpVar+" "+g.getType(elem)) + + if err := g.genTypeDecoder(elem, tmpVar, tags, indent+2); err != nil { + return err + } + + fmt.Fprintln(g.out, ws+" ("+out+")[key] = "+tmpVar) + fmt.Fprintln(g.out, ws+" in.WantComma()") + fmt.Fprintln(g.out, ws+" }") + fmt.Fprintln(g.out, ws+" in.Delim('}')") + fmt.Fprintln(g.out, ws+"}") + + case reflect.Interface: + if t.NumMethod() != 0 { + return fmt.Errorf("interface type %v not supported: only interface{} is allowed", t) + } + fmt.Fprintln(g.out, ws+"if m, ok := "+out+".(easyjson.Unmarshaler); ok {") + fmt.Fprintln(g.out, ws+"m.UnmarshalEasyJSON(in)") + fmt.Fprintln(g.out, ws+"} else if m, ok := "+out+".(json.Unmarshaler); ok {") + fmt.Fprintln(g.out, ws+"_ = m.UnmarshalJSON(in.Raw())") + fmt.Fprintln(g.out, ws+"} else {") + fmt.Fprintln(g.out, ws+" "+out+" = in.Interface()") + fmt.Fprintln(g.out, ws+"}") + default: + return fmt.Errorf("don't know how to decode %v", t) + } + return nil + +} + +func (g *Generator) genStructFieldDecoder(t reflect.Type, f reflect.StructField) error { + jsonName := g.fieldNamer.GetJSONFieldName(t, f) + tags := parseFieldTags(f) + + if tags.omit { + return nil + } + + fmt.Fprintf(g.out, " case %q:\n", jsonName) + if err := g.genTypeDecoder(f.Type, "out."+f.Name, tags, 3); err != nil { + return err + } + + if tags.required { + fmt.Fprintf(g.out, "%sSet = true\n", f.Name) + } + + return nil +} + +func (g *Generator) genRequiredFieldSet(t reflect.Type, f reflect.StructField) { + tags := parseFieldTags(f) + + if !tags.required { + return + } + + fmt.Fprintf(g.out, "var %sSet bool\n", f.Name) +} + +func (g *Generator) genRequiredFieldCheck(t reflect.Type, f reflect.StructField) { + jsonName := g.fieldNamer.GetJSONFieldName(t, f) + tags := parseFieldTags(f) + + if !tags.required { + return + } + + g.imports["fmt"] = "fmt" + + fmt.Fprintf(g.out, "if !%sSet {\n", f.Name) + fmt.Fprintf(g.out, " in.AddError(fmt.Errorf(\"key '%s' is required\"))\n", jsonName) + fmt.Fprintf(g.out, "}\n") +} + +func mergeStructFields(fields1, fields2 []reflect.StructField) (fields []reflect.StructField) { + used := map[string]bool{} + for _, f := range fields2 { + used[f.Name] = true + fields = append(fields, f) + } + + for _, f := range fields1 { + if !used[f.Name] { + fields = append(fields, f) + } + } + return +} + +func getStructFields(t reflect.Type) ([]reflect.StructField, error) { + if t.Kind() != reflect.Struct { + return nil, fmt.Errorf("got %v; expected a struct", t) + } + + var efields []reflect.StructField + for i := 0; i < t.NumField(); i++ { + f := t.Field(i) + if !f.Anonymous { + continue + } + + t1 := f.Type + if t1.Kind() == reflect.Ptr { + t1 = t1.Elem() + } + + fs, err := getStructFields(t1) + if err != nil { + return nil, fmt.Errorf("error processing embedded field: %v", err) + } + efields = mergeStructFields(efields, fs) + } + + var fields []reflect.StructField + for i := 0; i < t.NumField(); i++ { + f := t.Field(i) + if f.Anonymous { + continue + } + + c := []rune(f.Name)[0] + if unicode.IsUpper(c) { + fields = append(fields, f) + } + } + return mergeStructFields(efields, fields), nil +} + +func (g *Generator) genDecoder(t reflect.Type) error { + switch t.Kind() { + case reflect.Slice, reflect.Array, reflect.Map: + return g.genSliceArrayDecoder(t) + default: + return g.genStructDecoder(t) + } +} + +func (g *Generator) genSliceArrayDecoder(t reflect.Type) error { + switch t.Kind() { + case reflect.Slice, reflect.Array, reflect.Map: + default: + return fmt.Errorf("cannot generate encoder/decoder for %v, not a slice/array/map type", t) + } + + fname := g.getDecoderName(t) + typ := g.getType(t) + + fmt.Fprintln(g.out, "func "+fname+"(in *jlexer.Lexer, out *"+typ+") {") + fmt.Fprintln(g.out, " isTopLevel := in.IsStart()") + err := g.genTypeDecoderNoCheck(t, "*out", fieldTags{}, 1) + if err != nil { + return err + } + fmt.Fprintln(g.out, " if isTopLevel {") + fmt.Fprintln(g.out, " in.Consumed()") + fmt.Fprintln(g.out, " }") + fmt.Fprintln(g.out, "}") + + return nil +} + +func (g *Generator) genStructDecoder(t reflect.Type) error { + if t.Kind() != reflect.Struct { + return fmt.Errorf("cannot generate encoder/decoder for %v, not a struct type", t) + } + + fname := g.getDecoderName(t) + typ := g.getType(t) + + fmt.Fprintln(g.out, "func "+fname+"(in *jlexer.Lexer, out *"+typ+") {") + fmt.Fprintln(g.out, " isTopLevel := in.IsStart()") + fmt.Fprintln(g.out, " if in.IsNull() {") + fmt.Fprintln(g.out, " if isTopLevel {") + fmt.Fprintln(g.out, " in.Consumed()") + fmt.Fprintln(g.out, " }") + fmt.Fprintln(g.out, " in.Skip()") + fmt.Fprintln(g.out, " return") + fmt.Fprintln(g.out, " }") + + // Init embedded pointer fields. + for i := 0; i < t.NumField(); i++ { + f := t.Field(i) + if !f.Anonymous || f.Type.Kind() != reflect.Ptr { + continue + } + fmt.Fprintln(g.out, " out."+f.Name+" = new("+g.getType(f.Type.Elem())+")") + } + + fs, err := getStructFields(t) + if err != nil { + return fmt.Errorf("cannot generate decoder for %v: %v", t, err) + } + + for _, f := range fs { + g.genRequiredFieldSet(t, f) + } + + fmt.Fprintln(g.out, " in.Delim('{')") + fmt.Fprintln(g.out, " for !in.IsDelim('}') {") + fmt.Fprintln(g.out, " key := in.UnsafeString()") + fmt.Fprintln(g.out, " in.WantColon()") + fmt.Fprintln(g.out, " if in.IsNull() {") + fmt.Fprintln(g.out, " in.Skip()") + fmt.Fprintln(g.out, " in.WantComma()") + fmt.Fprintln(g.out, " continue") + fmt.Fprintln(g.out, " }") + + fmt.Fprintln(g.out, " switch key {") + for _, f := range fs { + if err := g.genStructFieldDecoder(t, f); err != nil { + return err + } + } + + fmt.Fprintln(g.out, " default:") + fmt.Fprintln(g.out, " in.SkipRecursive()") + fmt.Fprintln(g.out, " }") + fmt.Fprintln(g.out, " in.WantComma()") + fmt.Fprintln(g.out, " }") + fmt.Fprintln(g.out, " in.Delim('}')") + fmt.Fprintln(g.out, " if isTopLevel {") + fmt.Fprintln(g.out, " in.Consumed()") + fmt.Fprintln(g.out, " }") + + for _, f := range fs { + g.genRequiredFieldCheck(t, f) + } + + fmt.Fprintln(g.out, "}") + + return nil +} + +func (g *Generator) genStructUnmarshaler(t reflect.Type) error { + switch t.Kind() { + case reflect.Slice, reflect.Array, reflect.Map, reflect.Struct: + default: + return fmt.Errorf("cannot generate encoder/decoder for %v, not a struct/slice/array/map type", t) + } + + fname := g.getDecoderName(t) + typ := g.getType(t) + + if !g.noStdMarshalers { + fmt.Fprintln(g.out, "// UnmarshalJSON supports json.Unmarshaler interface") + fmt.Fprintln(g.out, "func (v *"+typ+") UnmarshalJSON(data []byte) error {") + fmt.Fprintln(g.out, " r := jlexer.Lexer{Data: data}") + fmt.Fprintln(g.out, " "+fname+"(&r, v)") + fmt.Fprintln(g.out, " return r.Error()") + fmt.Fprintln(g.out, "}") + } + + fmt.Fprintln(g.out, "// UnmarshalEasyJSON supports easyjson.Unmarshaler interface") + fmt.Fprintln(g.out, "func (v *"+typ+") UnmarshalEasyJSON(l *jlexer.Lexer) {") + fmt.Fprintln(g.out, " "+fname+"(l, v)") + fmt.Fprintln(g.out, "}") + + return nil +} diff --git a/vendor/github.com/mailru/easyjson/gen/encoder.go b/vendor/github.com/mailru/easyjson/gen/encoder.go new file mode 100644 index 0000000..293a66a --- /dev/null +++ b/vendor/github.com/mailru/easyjson/gen/encoder.go @@ -0,0 +1,399 @@ +package gen + +import ( + "encoding" + "encoding/json" + "fmt" + "reflect" + "strconv" + "strings" + + "github.com/mailru/easyjson" +) + +func (g *Generator) getEncoderName(t reflect.Type) string { + return g.functionName("encode", t) +} + +var primitiveEncoders = map[reflect.Kind]string{ + reflect.String: "out.String(string(%v))", + reflect.Bool: "out.Bool(bool(%v))", + reflect.Int: "out.Int(int(%v))", + reflect.Int8: "out.Int8(int8(%v))", + reflect.Int16: "out.Int16(int16(%v))", + reflect.Int32: "out.Int32(int32(%v))", + reflect.Int64: "out.Int64(int64(%v))", + reflect.Uint: "out.Uint(uint(%v))", + reflect.Uint8: "out.Uint8(uint8(%v))", + reflect.Uint16: "out.Uint16(uint16(%v))", + reflect.Uint32: "out.Uint32(uint32(%v))", + reflect.Uint64: "out.Uint64(uint64(%v))", + reflect.Float32: "out.Float32(float32(%v))", + reflect.Float64: "out.Float64(float64(%v))", +} + +var primitiveStringEncoders = map[reflect.Kind]string{ + reflect.String: "out.String(string(%v))", + reflect.Int: "out.IntStr(int(%v))", + reflect.Int8: "out.Int8Str(int8(%v))", + reflect.Int16: "out.Int16Str(int16(%v))", + reflect.Int32: "out.Int32Str(int32(%v))", + reflect.Int64: "out.Int64Str(int64(%v))", + reflect.Uint: "out.UintStr(uint(%v))", + reflect.Uint8: "out.Uint8Str(uint8(%v))", + reflect.Uint16: "out.Uint16Str(uint16(%v))", + reflect.Uint32: "out.Uint32Str(uint32(%v))", + reflect.Uint64: "out.Uint64Str(uint64(%v))", + reflect.Uintptr: "out.UintptrStr(uintptr(%v))", + reflect.Float32: "out.Float32Str(float32(%v))", + reflect.Float64: "out.Float64Str(float64(%v))", +} + +// fieldTags contains parsed version of json struct field tags. +type fieldTags struct { + name string + + omit bool + omitEmpty bool + noOmitEmpty bool + asString bool + required bool +} + +// parseFieldTags parses the json field tag into a structure. +func parseFieldTags(f reflect.StructField) fieldTags { + var ret fieldTags + + for i, s := range strings.Split(f.Tag.Get("json"), ",") { + switch { + case i == 0 && s == "-": + ret.omit = true + case i == 0: + ret.name = s + case s == "omitempty": + ret.omitEmpty = true + case s == "!omitempty": + ret.noOmitEmpty = true + case s == "string": + ret.asString = true + case s == "required": + ret.required = true + } + } + + return ret +} + +// genTypeEncoder generates code that encodes in of type t into the writer, but uses marshaler interface if implemented by t. +func (g *Generator) genTypeEncoder(t reflect.Type, in string, tags fieldTags, indent int, assumeNonEmpty bool) error { + ws := strings.Repeat(" ", indent) + + marshalerIface := reflect.TypeOf((*easyjson.Marshaler)(nil)).Elem() + if reflect.PtrTo(t).Implements(marshalerIface) { + fmt.Fprintln(g.out, ws+"("+in+").MarshalEasyJSON(out)") + return nil + } + + marshalerIface = reflect.TypeOf((*json.Marshaler)(nil)).Elem() + if reflect.PtrTo(t).Implements(marshalerIface) { + fmt.Fprintln(g.out, ws+"out.Raw( ("+in+").MarshalJSON() )") + return nil + } + + marshalerIface = reflect.TypeOf((*encoding.TextMarshaler)(nil)).Elem() + if reflect.PtrTo(t).Implements(marshalerIface) { + fmt.Fprintln(g.out, ws+"out.RawText( ("+in+").MarshalText() )") + return nil + } + + err := g.genTypeEncoderNoCheck(t, in, tags, indent, assumeNonEmpty) + return err +} + +// returns true of the type t implements one of the custom marshaler interfaces +func hasCustomMarshaler(t reflect.Type) bool { + t = reflect.PtrTo(t) + return t.Implements(reflect.TypeOf((*easyjson.Marshaler)(nil)).Elem()) || + t.Implements(reflect.TypeOf((*json.Marshaler)(nil)).Elem()) || + t.Implements(reflect.TypeOf((*encoding.TextMarshaler)(nil)).Elem()) +} + +// genTypeEncoderNoCheck generates code that encodes in of type t into the writer. +func (g *Generator) genTypeEncoderNoCheck(t reflect.Type, in string, tags fieldTags, indent int, assumeNonEmpty bool) error { + ws := strings.Repeat(" ", indent) + + // Check whether type is primitive, needs to be done after interface check. + if enc := primitiveStringEncoders[t.Kind()]; enc != "" && tags.asString { + fmt.Fprintf(g.out, ws+enc+"\n", in) + return nil + } else if enc := primitiveEncoders[t.Kind()]; enc != "" { + fmt.Fprintf(g.out, ws+enc+"\n", in) + return nil + } + + switch t.Kind() { + case reflect.Slice: + elem := t.Elem() + iVar := g.uniqueVarName() + vVar := g.uniqueVarName() + + if t.Elem().Kind() == reflect.Uint8 { + fmt.Fprintln(g.out, ws+"out.Base64Bytes("+in+")") + } else { + if !assumeNonEmpty { + fmt.Fprintln(g.out, ws+"if "+in+" == nil && (out.Flags & jwriter.NilSliceAsEmpty) == 0 {") + fmt.Fprintln(g.out, ws+` out.RawString("null")`) + fmt.Fprintln(g.out, ws+"} else {") + } else { + fmt.Fprintln(g.out, ws+"{") + } + fmt.Fprintln(g.out, ws+" out.RawByte('[')") + fmt.Fprintln(g.out, ws+" for "+iVar+", "+vVar+" := range "+in+" {") + fmt.Fprintln(g.out, ws+" if "+iVar+" > 0 {") + fmt.Fprintln(g.out, ws+" out.RawByte(',')") + fmt.Fprintln(g.out, ws+" }") + + if err := g.genTypeEncoder(elem, vVar, tags, indent+2, false); err != nil { + return err + } + + fmt.Fprintln(g.out, ws+" }") + fmt.Fprintln(g.out, ws+" out.RawByte(']')") + fmt.Fprintln(g.out, ws+"}") + } + + case reflect.Array: + elem := t.Elem() + iVar := g.uniqueVarName() + + if t.Elem().Kind() == reflect.Uint8 { + fmt.Fprintln(g.out, ws+"out.Base64Bytes("+in+"[:])") + } else { + fmt.Fprintln(g.out, ws+"out.RawByte('[')") + fmt.Fprintln(g.out, ws+"for "+iVar+" := range "+in+" {") + fmt.Fprintln(g.out, ws+" if "+iVar+" > 0 {") + fmt.Fprintln(g.out, ws+" out.RawByte(',')") + fmt.Fprintln(g.out, ws+" }") + + if err := g.genTypeEncoder(elem, "("+in+")["+iVar+"]", tags, indent+1, false); err != nil { + return err + } + + fmt.Fprintln(g.out, ws+"}") + fmt.Fprintln(g.out, ws+"out.RawByte(']')") + } + + case reflect.Struct: + enc := g.getEncoderName(t) + g.addType(t) + + fmt.Fprintln(g.out, ws+enc+"(out, "+in+")") + + case reflect.Ptr: + if !assumeNonEmpty { + fmt.Fprintln(g.out, ws+"if "+in+" == nil {") + fmt.Fprintln(g.out, ws+` out.RawString("null")`) + fmt.Fprintln(g.out, ws+"} else {") + } + + if err := g.genTypeEncoder(t.Elem(), "*"+in, tags, indent+1, false); err != nil { + return err + } + + if !assumeNonEmpty { + fmt.Fprintln(g.out, ws+"}") + } + + case reflect.Map: + key := t.Key() + keyEnc, ok := primitiveStringEncoders[key.Kind()] + if !ok && !hasCustomMarshaler(key) { + return fmt.Errorf("map key type %v not supported: only string and integer keys and types implementing Marshaler interfaces are allowed", key) + } // else assume the caller knows what they are doing and that the custom marshaler performs the translation from the key type to a string or integer + tmpVar := g.uniqueVarName() + + if !assumeNonEmpty { + fmt.Fprintln(g.out, ws+"if "+in+" == nil && (out.Flags & jwriter.NilMapAsEmpty) == 0 {") + fmt.Fprintln(g.out, ws+" out.RawString(`null`)") + fmt.Fprintln(g.out, ws+"} else {") + } else { + fmt.Fprintln(g.out, ws+"{") + } + fmt.Fprintln(g.out, ws+" out.RawByte('{')") + fmt.Fprintln(g.out, ws+" "+tmpVar+"First := true") + fmt.Fprintln(g.out, ws+" for "+tmpVar+"Name, "+tmpVar+"Value := range "+in+" {") + fmt.Fprintln(g.out, ws+" if "+tmpVar+"First { "+tmpVar+"First = false } else { out.RawByte(',') }") + if keyEnc != "" { + fmt.Fprintln(g.out, ws+" "+fmt.Sprintf(keyEnc, tmpVar+"Name")) + } else { + if err := g.genTypeEncoder(key, tmpVar+"Name", tags, indent+2, false); err != nil { + return err + } + } + + fmt.Fprintln(g.out, ws+" out.RawByte(':')") + + if err := g.genTypeEncoder(t.Elem(), tmpVar+"Value", tags, indent+2, false); err != nil { + return err + } + + fmt.Fprintln(g.out, ws+" }") + fmt.Fprintln(g.out, ws+" out.RawByte('}')") + fmt.Fprintln(g.out, ws+"}") + + case reflect.Interface: + if t.NumMethod() != 0 { + return fmt.Errorf("interface type %v not supported: only interface{} is allowed", t) + } + fmt.Fprintln(g.out, ws+"if m, ok := "+in+".(easyjson.Marshaler); ok {") + fmt.Fprintln(g.out, ws+" m.MarshalEasyJSON(out)") + fmt.Fprintln(g.out, ws+"} else if m, ok := "+in+".(json.Marshaler); ok {") + fmt.Fprintln(g.out, ws+" out.Raw(m.MarshalJSON())") + fmt.Fprintln(g.out, ws+"} else {") + fmt.Fprintln(g.out, ws+" out.Raw(json.Marshal("+in+"))") + fmt.Fprintln(g.out, ws+"}") + + default: + return fmt.Errorf("don't know how to encode %v", t) + } + return nil +} + +func (g *Generator) notEmptyCheck(t reflect.Type, v string) string { + optionalIface := reflect.TypeOf((*easyjson.Optional)(nil)).Elem() + if reflect.PtrTo(t).Implements(optionalIface) { + return "(" + v + ").IsDefined()" + } + + switch t.Kind() { + case reflect.Slice, reflect.Map: + return "len(" + v + ") != 0" + case reflect.Interface, reflect.Ptr: + return v + " != nil" + case reflect.Bool: + return v + case reflect.String: + return v + ` != ""` + case reflect.Float32, reflect.Float64, + reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, + reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + + return v + " != 0" + + default: + // note: Array types don't have a useful empty value + return "true" + } +} + +func (g *Generator) genStructFieldEncoder(t reflect.Type, f reflect.StructField) error { + jsonName := g.fieldNamer.GetJSONFieldName(t, f) + tags := parseFieldTags(f) + + if tags.omit { + return nil + } + noOmitEmpty := (!tags.omitEmpty && !g.omitEmpty) || tags.noOmitEmpty + if noOmitEmpty { + fmt.Fprintln(g.out, " {") + } else { + fmt.Fprintln(g.out, " if", g.notEmptyCheck(f.Type, "in."+f.Name), "{") + } + fmt.Fprintf(g.out, " const prefix string = %q\n", ","+strconv.Quote(jsonName)+":") + fmt.Fprintln(g.out, " if first {") + fmt.Fprintln(g.out, " first = false") + fmt.Fprintln(g.out, " out.RawString(prefix[1:])") + fmt.Fprintln(g.out, " } else {") + fmt.Fprintln(g.out, " out.RawString(prefix)") + fmt.Fprintln(g.out, " }") + + if err := g.genTypeEncoder(f.Type, "in."+f.Name, tags, 2, !noOmitEmpty); err != nil { + return err + } + fmt.Fprintln(g.out, " }") + return nil +} + +func (g *Generator) genEncoder(t reflect.Type) error { + switch t.Kind() { + case reflect.Slice, reflect.Array, reflect.Map: + return g.genSliceArrayMapEncoder(t) + default: + return g.genStructEncoder(t) + } +} + +func (g *Generator) genSliceArrayMapEncoder(t reflect.Type) error { + switch t.Kind() { + case reflect.Slice, reflect.Array, reflect.Map: + default: + return fmt.Errorf("cannot generate encoder/decoder for %v, not a slice/array/map type", t) + } + + fname := g.getEncoderName(t) + typ := g.getType(t) + + fmt.Fprintln(g.out, "func "+fname+"(out *jwriter.Writer, in "+typ+") {") + err := g.genTypeEncoderNoCheck(t, "in", fieldTags{}, 1, false) + if err != nil { + return err + } + fmt.Fprintln(g.out, "}") + return nil +} + +func (g *Generator) genStructEncoder(t reflect.Type) error { + if t.Kind() != reflect.Struct { + return fmt.Errorf("cannot generate encoder/decoder for %v, not a struct type", t) + } + + fname := g.getEncoderName(t) + typ := g.getType(t) + + fmt.Fprintln(g.out, "func "+fname+"(out *jwriter.Writer, in "+typ+") {") + fmt.Fprintln(g.out, " out.RawByte('{')") + fmt.Fprintln(g.out, " first := true") + fmt.Fprintln(g.out, " _ = first") + + fs, err := getStructFields(t) + if err != nil { + return fmt.Errorf("cannot generate encoder for %v: %v", t, err) + } + for _, f := range fs { + if err := g.genStructFieldEncoder(t, f); err != nil { + return err + } + } + + fmt.Fprintln(g.out, " out.RawByte('}')") + fmt.Fprintln(g.out, "}") + + return nil +} + +func (g *Generator) genStructMarshaler(t reflect.Type) error { + switch t.Kind() { + case reflect.Slice, reflect.Array, reflect.Map, reflect.Struct: + default: + return fmt.Errorf("cannot generate encoder/decoder for %v, not a struct/slice/array/map type", t) + } + + fname := g.getEncoderName(t) + typ := g.getType(t) + + if !g.noStdMarshalers { + fmt.Fprintln(g.out, "// MarshalJSON supports json.Marshaler interface") + fmt.Fprintln(g.out, "func (v "+typ+") MarshalJSON() ([]byte, error) {") + fmt.Fprintln(g.out, " w := jwriter.Writer{}") + fmt.Fprintln(g.out, " "+fname+"(&w, v)") + fmt.Fprintln(g.out, " return w.Buffer.BuildBytes(), w.Error") + fmt.Fprintln(g.out, "}") + } + + fmt.Fprintln(g.out, "// MarshalEasyJSON supports easyjson.Marshaler interface") + fmt.Fprintln(g.out, "func (v "+typ+") MarshalEasyJSON(w *jwriter.Writer) {") + fmt.Fprintln(g.out, " "+fname+"(w, v)") + fmt.Fprintln(g.out, "}") + + return nil +} diff --git a/vendor/github.com/mailru/easyjson/gen/generator.go b/vendor/github.com/mailru/easyjson/gen/generator.go new file mode 100644 index 0000000..4f1eb04 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/gen/generator.go @@ -0,0 +1,527 @@ +package gen + +import ( + "bytes" + "fmt" + "hash/fnv" + "io" + "path" + "reflect" + "sort" + "strconv" + "strings" + "unicode" +) + +const pkgWriter = "github.com/mailru/easyjson/jwriter" +const pkgLexer = "github.com/mailru/easyjson/jlexer" +const pkgEasyJSON = "github.com/mailru/easyjson" + +// FieldNamer defines a policy for generating names for struct fields. +type FieldNamer interface { + GetJSONFieldName(t reflect.Type, f reflect.StructField) string +} + +// Generator generates the requested marshaler/unmarshalers. +type Generator struct { + out *bytes.Buffer + + pkgName string + pkgPath string + buildTags string + hashString string + + varCounter int + + noStdMarshalers bool + omitEmpty bool + fieldNamer FieldNamer + + // package path to local alias map for tracking imports + imports map[string]string + + // types that marshalers were requested for by user + marshalers map[reflect.Type]bool + + // types that encoders were already generated for + typesSeen map[reflect.Type]bool + + // types that encoders were requested for (e.g. by encoders of other types) + typesUnseen []reflect.Type + + // function name to relevant type maps to track names of de-/encoders in + // case of a name clash or unnamed structs + functionNames map[string]reflect.Type +} + +// NewGenerator initializes and returns a Generator. +func NewGenerator(filename string) *Generator { + ret := &Generator{ + imports: map[string]string{ + pkgWriter: "jwriter", + pkgLexer: "jlexer", + pkgEasyJSON: "easyjson", + "encoding/json": "json", + }, + fieldNamer: DefaultFieldNamer{}, + marshalers: make(map[reflect.Type]bool), + typesSeen: make(map[reflect.Type]bool), + functionNames: make(map[string]reflect.Type), + } + + // Use a file-unique prefix on all auxiliary funcs to avoid + // name clashes. + hash := fnv.New32() + hash.Write([]byte(filename)) + ret.hashString = fmt.Sprintf("%x", hash.Sum32()) + + return ret +} + +// SetPkg sets the name and path of output package. +func (g *Generator) SetPkg(name, path string) { + g.pkgName = name + g.pkgPath = path +} + +// SetBuildTags sets build tags for the output file. +func (g *Generator) SetBuildTags(tags string) { + g.buildTags = tags +} + +// SetFieldNamer sets field naming strategy. +func (g *Generator) SetFieldNamer(n FieldNamer) { + g.fieldNamer = n +} + +// UseSnakeCase sets snake_case field naming strategy. +func (g *Generator) UseSnakeCase() { + g.fieldNamer = SnakeCaseFieldNamer{} +} + +// UseLowerCamelCase sets lowerCamelCase field naming strategy. +func (g *Generator) UseLowerCamelCase() { + g.fieldNamer = LowerCamelCaseFieldNamer{} +} + +// NoStdMarshalers instructs not to generate standard MarshalJSON/UnmarshalJSON +// methods (only the custom interface). +func (g *Generator) NoStdMarshalers() { + g.noStdMarshalers = true +} + +// OmitEmpty triggers `json=",omitempty"` behaviour by default. +func (g *Generator) OmitEmpty() { + g.omitEmpty = true +} + +// addTypes requests to generate encoding/decoding funcs for the given type. +func (g *Generator) addType(t reflect.Type) { + if g.typesSeen[t] { + return + } + for _, t1 := range g.typesUnseen { + if t1 == t { + return + } + } + g.typesUnseen = append(g.typesUnseen, t) +} + +// Add requests to generate marshaler/unmarshalers and encoding/decoding +// funcs for the type of given object. +func (g *Generator) Add(obj interface{}) { + t := reflect.TypeOf(obj) + if t.Kind() == reflect.Ptr { + t = t.Elem() + } + g.addType(t) + g.marshalers[t] = true +} + +// printHeader prints package declaration and imports. +func (g *Generator) printHeader() { + if g.buildTags != "" { + fmt.Println("// +build ", g.buildTags) + fmt.Println() + } + fmt.Println("// Code generated by easyjson for marshaling/unmarshaling. DO NOT EDIT.") + fmt.Println() + fmt.Println("package ", g.pkgName) + fmt.Println() + + byAlias := map[string]string{} + var aliases []string + for path, alias := range g.imports { + aliases = append(aliases, alias) + byAlias[alias] = path + } + + sort.Strings(aliases) + fmt.Println("import (") + for _, alias := range aliases { + fmt.Printf(" %s %q\n", alias, byAlias[alias]) + } + + fmt.Println(")") + fmt.Println("") + fmt.Println("// suppress unused package warning") + fmt.Println("var (") + fmt.Println(" _ *json.RawMessage") + fmt.Println(" _ *jlexer.Lexer") + fmt.Println(" _ *jwriter.Writer") + fmt.Println(" _ easyjson.Marshaler") + fmt.Println(")") + + fmt.Println() +} + +// Run runs the generator and outputs generated code to out. +func (g *Generator) Run(out io.Writer) error { + g.out = &bytes.Buffer{} + + for len(g.typesUnseen) > 0 { + t := g.typesUnseen[len(g.typesUnseen)-1] + g.typesUnseen = g.typesUnseen[:len(g.typesUnseen)-1] + g.typesSeen[t] = true + + if err := g.genDecoder(t); err != nil { + return err + } + if err := g.genEncoder(t); err != nil { + return err + } + + if !g.marshalers[t] { + continue + } + + if err := g.genStructMarshaler(t); err != nil { + return err + } + if err := g.genStructUnmarshaler(t); err != nil { + return err + } + } + g.printHeader() + _, err := out.Write(g.out.Bytes()) + return err +} + +// fixes vendored paths +func fixPkgPathVendoring(pkgPath string) string { + const vendor = "/vendor/" + if i := strings.LastIndex(pkgPath, vendor); i != -1 { + return pkgPath[i+len(vendor):] + } + return pkgPath +} + +func fixAliasName(alias string) string { + alias = strings.Replace( + strings.Replace(alias, ".", "_", -1), + "-", + "_", + -1, + ) + + if alias[0] == 'v' { // to void conflicting with var names, say v1 + alias = "_" + alias + } + return alias +} + +// pkgAlias creates and returns and import alias for a given package. +func (g *Generator) pkgAlias(pkgPath string) string { + pkgPath = fixPkgPathVendoring(pkgPath) + if alias := g.imports[pkgPath]; alias != "" { + return alias + } + + for i := 0; ; i++ { + alias := fixAliasName(path.Base(pkgPath)) + if i > 0 { + alias += fmt.Sprint(i) + } + + exists := false + for _, v := range g.imports { + if v == alias { + exists = true + break + } + } + + if !exists { + g.imports[pkgPath] = alias + return alias + } + } +} + +// getType return the textual type name of given type that can be used in generated code. +func (g *Generator) getType(t reflect.Type) string { + if t.Name() == "" { + switch t.Kind() { + case reflect.Ptr: + return "*" + g.getType(t.Elem()) + case reflect.Slice: + return "[]" + g.getType(t.Elem()) + case reflect.Array: + return "[" + strconv.Itoa(t.Len()) + "]" + g.getType(t.Elem()) + case reflect.Map: + return "map[" + g.getType(t.Key()) + "]" + g.getType(t.Elem()) + } + } + + if t.Name() == "" || t.PkgPath() == "" { + if t.Kind() == reflect.Struct { + // the fields of an anonymous struct can have named types, + // and t.String() will not be sufficient because it does not + // remove the package name when it matches g.pkgPath. + // so we convert by hand + nf := t.NumField() + lines := make([]string, 0, nf) + for i := 0; i < nf; i++ { + f := t.Field(i) + var line string + if !f.Anonymous { + line = f.Name + " " + } // else the field is anonymous (an embedded type) + line += g.getType(f.Type) + t := f.Tag + if t != "" { + line += " " + escapeTag(t) + } + lines = append(lines, line) + } + return strings.Join([]string{"struct { ", strings.Join(lines, "; "), " }"}, "") + } + return t.String() + } else if t.PkgPath() == g.pkgPath { + return t.Name() + } + return g.pkgAlias(t.PkgPath()) + "." + t.Name() +} + +// escape a struct field tag string back to source code +func escapeTag(tag reflect.StructTag) string { + t := string(tag) + if strings.ContainsRune(t, '`') { + // there are ` in the string; we can't use ` to enclose the string + return strconv.Quote(t) + } + return "`" + t + "`" +} + +// uniqueVarName returns a file-unique name that can be used for generated variables. +func (g *Generator) uniqueVarName() string { + g.varCounter++ + return fmt.Sprint("v", g.varCounter) +} + +// safeName escapes unsafe characters in pkg/type name and returns a string that can be used +// in encoder/decoder names for the type. +func (g *Generator) safeName(t reflect.Type) string { + name := t.PkgPath() + if t.Name() == "" { + name += "anonymous" + } else { + name += "." + t.Name() + } + + parts := []string{} + part := []rune{} + for _, c := range name { + if unicode.IsLetter(c) || unicode.IsDigit(c) { + part = append(part, c) + } else if len(part) > 0 { + parts = append(parts, string(part)) + part = []rune{} + } + } + return joinFunctionNameParts(false, parts...) +} + +// functionName returns a function name for a given type with a given prefix. If a function +// with this prefix already exists for a type, it is returned. +// +// Method is used to track encoder/decoder names for the type. +func (g *Generator) functionName(prefix string, t reflect.Type) string { + prefix = joinFunctionNameParts(true, "easyjson", g.hashString, prefix) + name := joinFunctionNameParts(true, prefix, g.safeName(t)) + + // Most of the names will be unique, try a shortcut first. + if e, ok := g.functionNames[name]; !ok || e == t { + g.functionNames[name] = t + return name + } + + // Search if the function already exists. + for name1, t1 := range g.functionNames { + if t1 == t && strings.HasPrefix(name1, prefix) { + return name1 + } + } + + // Create a new name in the case of a clash. + for i := 1; ; i++ { + nm := fmt.Sprint(name, i) + if _, ok := g.functionNames[nm]; ok { + continue + } + g.functionNames[nm] = t + return nm + } +} + +// DefaultFieldsNamer implements trivial naming policy equivalent to encoding/json. +type DefaultFieldNamer struct{} + +func (DefaultFieldNamer) GetJSONFieldName(t reflect.Type, f reflect.StructField) string { + jsonName := strings.Split(f.Tag.Get("json"), ",")[0] + if jsonName != "" { + return jsonName + } else { + return f.Name + } +} + +// LowerCamelCaseFieldNamer +type LowerCamelCaseFieldNamer struct{} + +func isLower(b byte) bool { + return b <= 122 && b >= 97 +} + +func isUpper(b byte) bool { + return b >= 65 && b <= 90 +} + +// convert HTTPRestClient to httpRestClient +func lowerFirst(s string) string { + if s == "" { + return "" + } + + str := "" + strlen := len(s) + + /** + Loop each char + If is uppercase: + If is first char, LOWER it + If the following char is lower, LEAVE it + If the following char is upper OR numeric, LOWER it + If is the end of string, LEAVE it + Else lowercase + */ + + foundLower := false + for i := range s { + ch := s[i] + if isUpper(ch) { + if i == 0 { + str += string(ch + 32) + } else if !foundLower { // Currently just a stream of capitals, eg JSONRESTS[erver] + if strlen > (i+1) && isLower(s[i+1]) { + // Next char is lower, keep this a capital + str += string(ch) + } else { + // Either at end of string or next char is capital + str += string(ch + 32) + } + } else { + str += string(ch) + } + } else { + foundLower = true + str += string(ch) + } + } + + return str +} + +func (LowerCamelCaseFieldNamer) GetJSONFieldName(t reflect.Type, f reflect.StructField) string { + jsonName := strings.Split(f.Tag.Get("json"), ",")[0] + if jsonName != "" { + return jsonName + } else { + return lowerFirst(f.Name) + } +} + +// SnakeCaseFieldNamer implements CamelCase to snake_case conversion for fields names. +type SnakeCaseFieldNamer struct{} + +func camelToSnake(name string) string { + var ret bytes.Buffer + + multipleUpper := false + var lastUpper rune + var beforeUpper rune + + for _, c := range name { + // Non-lowercase character after uppercase is considered to be uppercase too. + isUpper := (unicode.IsUpper(c) || (lastUpper != 0 && !unicode.IsLower(c))) + + if lastUpper != 0 { + // Output a delimiter if last character was either the first uppercase character + // in a row, or the last one in a row (e.g. 'S' in "HTTPServer"). + // Do not output a delimiter at the beginning of the name. + + firstInRow := !multipleUpper + lastInRow := !isUpper + + if ret.Len() > 0 && (firstInRow || lastInRow) && beforeUpper != '_' { + ret.WriteByte('_') + } + ret.WriteRune(unicode.ToLower(lastUpper)) + } + + // Buffer uppercase char, do not output it yet as a delimiter may be required if the + // next character is lowercase. + if isUpper { + multipleUpper = (lastUpper != 0) + lastUpper = c + continue + } + + ret.WriteRune(c) + lastUpper = 0 + beforeUpper = c + multipleUpper = false + } + + if lastUpper != 0 { + ret.WriteRune(unicode.ToLower(lastUpper)) + } + return string(ret.Bytes()) +} + +func (SnakeCaseFieldNamer) GetJSONFieldName(t reflect.Type, f reflect.StructField) string { + jsonName := strings.Split(f.Tag.Get("json"), ",")[0] + if jsonName != "" { + return jsonName + } + + return camelToSnake(f.Name) +} + +func joinFunctionNameParts(keepFirst bool, parts ...string) string { + buf := bytes.NewBufferString("") + for i, part := range parts { + if i == 0 && keepFirst { + buf.WriteString(part) + } else { + if len(part) > 0 { + buf.WriteString(strings.ToUpper(string(part[0]))) + } + if len(part) > 1 { + buf.WriteString(part[1:]) + } + } + } + return buf.String() +} diff --git a/vendor/github.com/mailru/easyjson/gen/generator_test.go b/vendor/github.com/mailru/easyjson/gen/generator_test.go new file mode 100644 index 0000000..0c9d278 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/gen/generator_test.go @@ -0,0 +1,87 @@ +package gen + +import ( + "testing" +) + +func TestCamelToSnake(t *testing.T) { + for i, test := range []struct { + In, Out string + }{ + {"", ""}, + {"A", "a"}, + {"SimpleExample", "simple_example"}, + {"internalField", "internal_field"}, + + {"SomeHTTPStuff", "some_http_stuff"}, + {"WriteJSON", "write_json"}, + {"HTTP2Server", "http2_server"}, + {"Some_Mixed_Case", "some_mixed_case"}, + {"do_nothing", "do_nothing"}, + + {"JSONHTTPRPCServer", "jsonhttprpc_server"}, // nothing can be done here without a dictionary + } { + got := camelToSnake(test.In) + if got != test.Out { + t.Errorf("[%d] camelToSnake(%s) = %s; want %s", i, test.In, got, test.Out) + } + } +} + +func TestCamelToLowerCamel(t *testing.T) { + for i, test := range []struct { + In, Out string + }{ + {"", ""}, + {"A", "a"}, + {"SimpleExample", "simpleExample"}, + {"internalField", "internalField"}, + + {"SomeHTTPStuff", "someHTTPStuff"}, + {"WriteJSON", "writeJSON"}, + {"HTTP2Server", "http2Server"}, + + {"JSONHTTPRPCServer", "jsonhttprpcServer"}, // nothing can be done here without a dictionary + } { + got := lowerFirst(test.In) + if got != test.Out { + t.Errorf("[%d] lowerFirst(%s) = %s; want %s", i, test.In, got, test.Out) + } + } +} + +func TestJoinFunctionNameParts(t *testing.T) { + for i, test := range []struct { + keepFirst bool + parts []string + out string + }{ + {false, []string{}, ""}, + {false, []string{"a"}, "A"}, + {false, []string{"simple", "example"}, "SimpleExample"}, + {true, []string{"first", "example"}, "firstExample"}, + {false, []string{"some", "UPPER", "case"}, "SomeUPPERCase"}, + {false, []string{"number", "123"}, "Number123"}, + } { + got := joinFunctionNameParts(test.keepFirst, test.parts...) + if got != test.out { + t.Errorf("[%d] joinFunctionNameParts(%v) = %s; want %s", i, test.parts, got, test.out) + } + } +} + +func TestFixVendorPath(t *testing.T) { + for i, test := range []struct { + In, Out string + }{ + {"", ""}, + {"time", "time"}, + {"project/vendor/subpackage", "subpackage"}, + } { + got := fixPkgPathVendoring(test.In) + if got != test.Out { + t.Errorf("[%d] fixPkgPathVendoring(%s) = %s; want %s", i, test.In, got, test.Out) + } + } + +} diff --git a/vendor/github.com/mailru/easyjson/helpers.go b/vendor/github.com/mailru/easyjson/helpers.go new file mode 100644 index 0000000..b86b87d --- /dev/null +++ b/vendor/github.com/mailru/easyjson/helpers.go @@ -0,0 +1,78 @@ +// Package easyjson contains marshaler/unmarshaler interfaces and helper functions. +package easyjson + +import ( + "io" + "io/ioutil" + "net/http" + "strconv" + + "github.com/mailru/easyjson/jlexer" + "github.com/mailru/easyjson/jwriter" +) + +// Marshaler is an easyjson-compatible marshaler interface. +type Marshaler interface { + MarshalEasyJSON(w *jwriter.Writer) +} + +// Marshaler is an easyjson-compatible unmarshaler interface. +type Unmarshaler interface { + UnmarshalEasyJSON(w *jlexer.Lexer) +} + +// Optional defines an undefined-test method for a type to integrate with 'omitempty' logic. +type Optional interface { + IsDefined() bool +} + +// Marshal returns data as a single byte slice. Method is suboptimal as the data is likely to be copied +// from a chain of smaller chunks. +func Marshal(v Marshaler) ([]byte, error) { + w := jwriter.Writer{} + v.MarshalEasyJSON(&w) + return w.BuildBytes() +} + +// MarshalToWriter marshals the data to an io.Writer. +func MarshalToWriter(v Marshaler, w io.Writer) (written int, err error) { + jw := jwriter.Writer{} + v.MarshalEasyJSON(&jw) + return jw.DumpTo(w) +} + +// MarshalToHTTPResponseWriter sets Content-Length and Content-Type headers for the +// http.ResponseWriter, and send the data to the writer. started will be equal to +// false if an error occurred before any http.ResponseWriter methods were actually +// invoked (in this case a 500 reply is possible). +func MarshalToHTTPResponseWriter(v Marshaler, w http.ResponseWriter) (started bool, written int, err error) { + jw := jwriter.Writer{} + v.MarshalEasyJSON(&jw) + if jw.Error != nil { + return false, 0, jw.Error + } + w.Header().Set("Content-Type", "application/json") + w.Header().Set("Content-Length", strconv.Itoa(jw.Size())) + + started = true + written, err = jw.DumpTo(w) + return +} + +// Unmarshal decodes the JSON in data into the object. +func Unmarshal(data []byte, v Unmarshaler) error { + l := jlexer.Lexer{Data: data} + v.UnmarshalEasyJSON(&l) + return l.Error() +} + +// UnmarshalFromReader reads all the data in the reader and decodes as JSON into the object. +func UnmarshalFromReader(r io.Reader, v Unmarshaler) error { + data, err := ioutil.ReadAll(r) + if err != nil { + return err + } + l := jlexer.Lexer{Data: data} + v.UnmarshalEasyJSON(&l) + return l.Error() +} diff --git a/vendor/github.com/mailru/easyjson/jlexer/bytestostr.go b/vendor/github.com/mailru/easyjson/jlexer/bytestostr.go new file mode 100644 index 0000000..ff7b27c --- /dev/null +++ b/vendor/github.com/mailru/easyjson/jlexer/bytestostr.go @@ -0,0 +1,24 @@ +// This file will only be included to the build if neither +// easyjson_nounsafe nor appengine build tag is set. See README notes +// for more details. + +//+build !easyjson_nounsafe +//+build !appengine + +package jlexer + +import ( + "reflect" + "unsafe" +) + +// bytesToStr creates a string pointing at the slice to avoid copying. +// +// Warning: the string returned by the function should be used with care, as the whole input data +// chunk may be either blocked from being freed by GC because of a single string or the buffer.Data +// may be garbage-collected even when the string exists. +func bytesToStr(data []byte) string { + h := (*reflect.SliceHeader)(unsafe.Pointer(&data)) + shdr := reflect.StringHeader{Data: h.Data, Len: h.Len} + return *(*string)(unsafe.Pointer(&shdr)) +} diff --git a/vendor/github.com/mailru/easyjson/jlexer/bytestostr_nounsafe.go b/vendor/github.com/mailru/easyjson/jlexer/bytestostr_nounsafe.go new file mode 100644 index 0000000..864d1be --- /dev/null +++ b/vendor/github.com/mailru/easyjson/jlexer/bytestostr_nounsafe.go @@ -0,0 +1,13 @@ +// This file is included to the build if any of the buildtags below +// are defined. Refer to README notes for more details. + +//+build easyjson_nounsafe appengine + +package jlexer + +// bytesToStr creates a string normally from []byte +// +// Note that this method is roughly 1.5x slower than using the 'unsafe' method. +func bytesToStr(data []byte) string { + return string(data) +} diff --git a/vendor/github.com/mailru/easyjson/jlexer/error.go b/vendor/github.com/mailru/easyjson/jlexer/error.go new file mode 100644 index 0000000..e90ec40 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/jlexer/error.go @@ -0,0 +1,15 @@ +package jlexer + +import "fmt" + +// LexerError implements the error interface and represents all possible errors that can be +// generated during parsing the JSON data. +type LexerError struct { + Reason string + Offset int + Data string +} + +func (l *LexerError) Error() string { + return fmt.Sprintf("parse error: %s near offset %d of '%s'", l.Reason, l.Offset, l.Data) +} diff --git a/vendor/github.com/mailru/easyjson/jlexer/lexer.go b/vendor/github.com/mailru/easyjson/jlexer/lexer.go new file mode 100644 index 0000000..0fd9b12 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/jlexer/lexer.go @@ -0,0 +1,1176 @@ +// Package jlexer contains a JSON lexer implementation. +// +// It is expected that it is mostly used with generated parser code, so the interface is tuned +// for a parser that knows what kind of data is expected. +package jlexer + +import ( + "encoding/base64" + "encoding/json" + "errors" + "fmt" + "io" + "strconv" + "unicode" + "unicode/utf16" + "unicode/utf8" +) + +// tokenKind determines type of a token. +type tokenKind byte + +const ( + tokenUndef tokenKind = iota // No token. + tokenDelim // Delimiter: one of '{', '}', '[' or ']'. + tokenString // A string literal, e.g. "abc\u1234" + tokenNumber // Number literal, e.g. 1.5e5 + tokenBool // Boolean literal: true or false. + tokenNull // null keyword. +) + +// token describes a single token: type, position in the input and value. +type token struct { + kind tokenKind // Type of a token. + + boolValue bool // Value if a boolean literal token. + byteValue []byte // Raw value of a token. + delimValue byte +} + +// Lexer is a JSON lexer: it iterates over JSON tokens in a byte slice. +type Lexer struct { + Data []byte // Input data given to the lexer. + + start int // Start of the current token. + pos int // Current unscanned position in the input stream. + token token // Last scanned token, if token.kind != tokenUndef. + + firstElement bool // Whether current element is the first in array or an object. + wantSep byte // A comma or a colon character, which need to occur before a token. + + UseMultipleErrors bool // If we want to use multiple errors. + fatalError error // Fatal error occurred during lexing. It is usually a syntax error. + multipleErrors []*LexerError // Semantic errors occurred during lexing. Marshalling will be continued after finding this errors. +} + +// FetchToken scans the input for the next token. +func (r *Lexer) FetchToken() { + r.token.kind = tokenUndef + r.start = r.pos + + // Check if r.Data has r.pos element + // If it doesn't, it mean corrupted input data + if len(r.Data) < r.pos { + r.errParse("Unexpected end of data") + return + } + // Determine the type of a token by skipping whitespace and reading the + // first character. + for _, c := range r.Data[r.pos:] { + switch c { + case ':', ',': + if r.wantSep == c { + r.pos++ + r.start++ + r.wantSep = 0 + } else { + r.errSyntax() + } + + case ' ', '\t', '\r', '\n': + r.pos++ + r.start++ + + case '"': + if r.wantSep != 0 { + r.errSyntax() + } + + r.token.kind = tokenString + r.fetchString() + return + + case '{', '[': + if r.wantSep != 0 { + r.errSyntax() + } + r.firstElement = true + r.token.kind = tokenDelim + r.token.delimValue = r.Data[r.pos] + r.pos++ + return + + case '}', ']': + if !r.firstElement && (r.wantSep != ',') { + r.errSyntax() + } + r.wantSep = 0 + r.token.kind = tokenDelim + r.token.delimValue = r.Data[r.pos] + r.pos++ + return + + case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-': + if r.wantSep != 0 { + r.errSyntax() + } + r.token.kind = tokenNumber + r.fetchNumber() + return + + case 'n': + if r.wantSep != 0 { + r.errSyntax() + } + + r.token.kind = tokenNull + r.fetchNull() + return + + case 't': + if r.wantSep != 0 { + r.errSyntax() + } + + r.token.kind = tokenBool + r.token.boolValue = true + r.fetchTrue() + return + + case 'f': + if r.wantSep != 0 { + r.errSyntax() + } + + r.token.kind = tokenBool + r.token.boolValue = false + r.fetchFalse() + return + + default: + r.errSyntax() + return + } + } + r.fatalError = io.EOF + return +} + +// isTokenEnd returns true if the char can follow a non-delimiter token +func isTokenEnd(c byte) bool { + return c == ' ' || c == '\t' || c == '\r' || c == '\n' || c == '[' || c == ']' || c == '{' || c == '}' || c == ',' || c == ':' +} + +// fetchNull fetches and checks remaining bytes of null keyword. +func (r *Lexer) fetchNull() { + r.pos += 4 + if r.pos > len(r.Data) || + r.Data[r.pos-3] != 'u' || + r.Data[r.pos-2] != 'l' || + r.Data[r.pos-1] != 'l' || + (r.pos != len(r.Data) && !isTokenEnd(r.Data[r.pos])) { + + r.pos -= 4 + r.errSyntax() + } +} + +// fetchTrue fetches and checks remaining bytes of true keyword. +func (r *Lexer) fetchTrue() { + r.pos += 4 + if r.pos > len(r.Data) || + r.Data[r.pos-3] != 'r' || + r.Data[r.pos-2] != 'u' || + r.Data[r.pos-1] != 'e' || + (r.pos != len(r.Data) && !isTokenEnd(r.Data[r.pos])) { + + r.pos -= 4 + r.errSyntax() + } +} + +// fetchFalse fetches and checks remaining bytes of false keyword. +func (r *Lexer) fetchFalse() { + r.pos += 5 + if r.pos > len(r.Data) || + r.Data[r.pos-4] != 'a' || + r.Data[r.pos-3] != 'l' || + r.Data[r.pos-2] != 's' || + r.Data[r.pos-1] != 'e' || + (r.pos != len(r.Data) && !isTokenEnd(r.Data[r.pos])) { + + r.pos -= 5 + r.errSyntax() + } +} + +// fetchNumber scans a number literal token. +func (r *Lexer) fetchNumber() { + hasE := false + afterE := false + hasDot := false + + r.pos++ + for i, c := range r.Data[r.pos:] { + switch { + case c >= '0' && c <= '9': + afterE = false + case c == '.' && !hasDot: + hasDot = true + case (c == 'e' || c == 'E') && !hasE: + hasE = true + hasDot = true + afterE = true + case (c == '+' || c == '-') && afterE: + afterE = false + default: + r.pos += i + if !isTokenEnd(c) { + r.errSyntax() + } else { + r.token.byteValue = r.Data[r.start:r.pos] + } + return + } + } + + r.pos = len(r.Data) + r.token.byteValue = r.Data[r.start:] +} + +// findStringLen tries to scan into the string literal for ending quote char to determine required size. +// The size will be exact if no escapes are present and may be inexact if there are escaped chars. +func findStringLen(data []byte) (hasEscapes bool, length int) { + delta := 0 + + for i := 0; i < len(data); i++ { + switch data[i] { + case '\\': + i++ + delta++ + if i < len(data) && data[i] == 'u' { + delta++ + } + case '"': + return (delta > 0), (i - delta) + } + } + + return false, len(data) +} + +// getu4 decodes \uXXXX from the beginning of s, returning the hex value, +// or it returns -1. +func getu4(s []byte) rune { + if len(s) < 6 || s[0] != '\\' || s[1] != 'u' { + return -1 + } + var val rune + for i := 2; i < len(s) && i < 6; i++ { + var v byte + c := s[i] + switch c { + case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': + v = c - '0' + case 'a', 'b', 'c', 'd', 'e', 'f': + v = c - 'a' + 10 + case 'A', 'B', 'C', 'D', 'E', 'F': + v = c - 'A' + 10 + default: + return -1 + } + + val <<= 4 + val |= rune(v) + } + return val +} + +// processEscape processes a single escape sequence and returns number of bytes processed. +func (r *Lexer) processEscape(data []byte) (int, error) { + if len(data) < 2 { + return 0, fmt.Errorf("syntax error at %v", string(data)) + } + + c := data[1] + switch c { + case '"', '/', '\\': + r.token.byteValue = append(r.token.byteValue, c) + return 2, nil + case 'b': + r.token.byteValue = append(r.token.byteValue, '\b') + return 2, nil + case 'f': + r.token.byteValue = append(r.token.byteValue, '\f') + return 2, nil + case 'n': + r.token.byteValue = append(r.token.byteValue, '\n') + return 2, nil + case 'r': + r.token.byteValue = append(r.token.byteValue, '\r') + return 2, nil + case 't': + r.token.byteValue = append(r.token.byteValue, '\t') + return 2, nil + case 'u': + rr := getu4(data) + if rr < 0 { + return 0, errors.New("syntax error") + } + + read := 6 + if utf16.IsSurrogate(rr) { + rr1 := getu4(data[read:]) + if dec := utf16.DecodeRune(rr, rr1); dec != unicode.ReplacementChar { + read += 6 + rr = dec + } else { + rr = unicode.ReplacementChar + } + } + var d [4]byte + s := utf8.EncodeRune(d[:], rr) + r.token.byteValue = append(r.token.byteValue, d[:s]...) + return read, nil + } + + return 0, errors.New("syntax error") +} + +// fetchString scans a string literal token. +func (r *Lexer) fetchString() { + r.pos++ + data := r.Data[r.pos:] + + hasEscapes, length := findStringLen(data) + if !hasEscapes { + r.token.byteValue = data[:length] + r.pos += length + 1 + return + } + + r.token.byteValue = make([]byte, 0, length) + p := 0 + for i := 0; i < len(data); { + switch data[i] { + case '"': + r.pos += i + 1 + r.token.byteValue = append(r.token.byteValue, data[p:i]...) + i++ + return + + case '\\': + r.token.byteValue = append(r.token.byteValue, data[p:i]...) + off, err := r.processEscape(data[i:]) + if err != nil { + r.errParse(err.Error()) + return + } + i += off + p = i + + default: + i++ + } + } + r.errParse("unterminated string literal") +} + +// scanToken scans the next token if no token is currently available in the lexer. +func (r *Lexer) scanToken() { + if r.token.kind != tokenUndef || r.fatalError != nil { + return + } + + r.FetchToken() +} + +// consume resets the current token to allow scanning the next one. +func (r *Lexer) consume() { + r.token.kind = tokenUndef + r.token.delimValue = 0 +} + +// Ok returns true if no error (including io.EOF) was encountered during scanning. +func (r *Lexer) Ok() bool { + return r.fatalError == nil +} + +const maxErrorContextLen = 13 + +func (r *Lexer) errParse(what string) { + if r.fatalError == nil { + var str string + if len(r.Data)-r.pos <= maxErrorContextLen { + str = string(r.Data) + } else { + str = string(r.Data[r.pos:r.pos+maxErrorContextLen-3]) + "..." + } + r.fatalError = &LexerError{ + Reason: what, + Offset: r.pos, + Data: str, + } + } +} + +func (r *Lexer) errSyntax() { + r.errParse("syntax error") +} + +func (r *Lexer) errInvalidToken(expected string) { + if r.fatalError != nil { + return + } + if r.UseMultipleErrors { + r.pos = r.start + r.consume() + r.SkipRecursive() + switch expected { + case "[": + r.token.delimValue = ']' + r.token.kind = tokenDelim + case "{": + r.token.delimValue = '}' + r.token.kind = tokenDelim + } + r.addNonfatalError(&LexerError{ + Reason: fmt.Sprintf("expected %s", expected), + Offset: r.start, + Data: string(r.Data[r.start:r.pos]), + }) + return + } + + var str string + if len(r.token.byteValue) <= maxErrorContextLen { + str = string(r.token.byteValue) + } else { + str = string(r.token.byteValue[:maxErrorContextLen-3]) + "..." + } + r.fatalError = &LexerError{ + Reason: fmt.Sprintf("expected %s", expected), + Offset: r.pos, + Data: str, + } +} + +func (r *Lexer) GetPos() int { + return r.pos +} + +// Delim consumes a token and verifies that it is the given delimiter. +func (r *Lexer) Delim(c byte) { + if r.token.kind == tokenUndef && r.Ok() { + r.FetchToken() + } + + if !r.Ok() || r.token.delimValue != c { + r.consume() // errInvalidToken can change token if UseMultipleErrors is enabled. + r.errInvalidToken(string([]byte{c})) + } else { + r.consume() + } +} + +// IsDelim returns true if there was no scanning error and next token is the given delimiter. +func (r *Lexer) IsDelim(c byte) bool { + if r.token.kind == tokenUndef && r.Ok() { + r.FetchToken() + } + return !r.Ok() || r.token.delimValue == c +} + +// Null verifies that the next token is null and consumes it. +func (r *Lexer) Null() { + if r.token.kind == tokenUndef && r.Ok() { + r.FetchToken() + } + if !r.Ok() || r.token.kind != tokenNull { + r.errInvalidToken("null") + } + r.consume() +} + +// IsNull returns true if the next token is a null keyword. +func (r *Lexer) IsNull() bool { + if r.token.kind == tokenUndef && r.Ok() { + r.FetchToken() + } + return r.Ok() && r.token.kind == tokenNull +} + +// Skip skips a single token. +func (r *Lexer) Skip() { + if r.token.kind == tokenUndef && r.Ok() { + r.FetchToken() + } + r.consume() +} + +// SkipRecursive skips next array or object completely, or just skips a single token if not +// an array/object. +// +// Note: no syntax validation is performed on the skipped data. +func (r *Lexer) SkipRecursive() { + r.scanToken() + var start, end byte + + if r.token.delimValue == '{' { + start, end = '{', '}' + } else if r.token.delimValue == '[' { + start, end = '[', ']' + } else { + r.consume() + return + } + + r.consume() + + level := 1 + inQuotes := false + wasEscape := false + + for i, c := range r.Data[r.pos:] { + switch { + case c == start && !inQuotes: + level++ + case c == end && !inQuotes: + level-- + if level == 0 { + r.pos += i + 1 + return + } + case c == '\\' && inQuotes: + wasEscape = !wasEscape + continue + case c == '"' && inQuotes: + inQuotes = wasEscape + case c == '"': + inQuotes = true + } + wasEscape = false + } + r.pos = len(r.Data) + r.fatalError = &LexerError{ + Reason: "EOF reached while skipping array/object or token", + Offset: r.pos, + Data: string(r.Data[r.pos:]), + } +} + +// Raw fetches the next item recursively as a data slice +func (r *Lexer) Raw() []byte { + r.SkipRecursive() + if !r.Ok() { + return nil + } + return r.Data[r.start:r.pos] +} + +// IsStart returns whether the lexer is positioned at the start +// of an input string. +func (r *Lexer) IsStart() bool { + return r.pos == 0 +} + +// Consumed reads all remaining bytes from the input, publishing an error if +// there is anything but whitespace remaining. +func (r *Lexer) Consumed() { + if r.pos > len(r.Data) || !r.Ok() { + return + } + + for _, c := range r.Data[r.pos:] { + if c != ' ' && c != '\t' && c != '\r' && c != '\n' { + r.AddError(&LexerError{ + Reason: "invalid character '" + string(c) + "' after top-level value", + Offset: r.pos, + Data: string(r.Data[r.pos:]), + }) + return + } + + r.pos++ + r.start++ + } +} + +func (r *Lexer) unsafeString() (string, []byte) { + if r.token.kind == tokenUndef && r.Ok() { + r.FetchToken() + } + if !r.Ok() || r.token.kind != tokenString { + r.errInvalidToken("string") + return "", nil + } + bytes := r.token.byteValue + ret := bytesToStr(r.token.byteValue) + r.consume() + return ret, bytes +} + +// UnsafeString returns the string value if the token is a string literal. +// +// Warning: returned string may point to the input buffer, so the string should not outlive +// the input buffer. Intended pattern of usage is as an argument to a switch statement. +func (r *Lexer) UnsafeString() string { + ret, _ := r.unsafeString() + return ret +} + +// UnsafeBytes returns the byte slice if the token is a string literal. +func (r *Lexer) UnsafeBytes() []byte { + _, ret := r.unsafeString() + return ret +} + +// String reads a string literal. +func (r *Lexer) String() string { + if r.token.kind == tokenUndef && r.Ok() { + r.FetchToken() + } + if !r.Ok() || r.token.kind != tokenString { + r.errInvalidToken("string") + return "" + } + ret := string(r.token.byteValue) + r.consume() + return ret +} + +// Bytes reads a string literal and base64 decodes it into a byte slice. +func (r *Lexer) Bytes() []byte { + if r.token.kind == tokenUndef && r.Ok() { + r.FetchToken() + } + if !r.Ok() || r.token.kind != tokenString { + r.errInvalidToken("string") + return nil + } + ret := make([]byte, base64.StdEncoding.DecodedLen(len(r.token.byteValue))) + len, err := base64.StdEncoding.Decode(ret, r.token.byteValue) + if err != nil { + r.fatalError = &LexerError{ + Reason: err.Error(), + } + return nil + } + + r.consume() + return ret[:len] +} + +// Bool reads a true or false boolean keyword. +func (r *Lexer) Bool() bool { + if r.token.kind == tokenUndef && r.Ok() { + r.FetchToken() + } + if !r.Ok() || r.token.kind != tokenBool { + r.errInvalidToken("bool") + return false + } + ret := r.token.boolValue + r.consume() + return ret +} + +func (r *Lexer) number() string { + if r.token.kind == tokenUndef && r.Ok() { + r.FetchToken() + } + if !r.Ok() || r.token.kind != tokenNumber { + r.errInvalidToken("number") + return "" + } + ret := bytesToStr(r.token.byteValue) + r.consume() + return ret +} + +func (r *Lexer) Uint8() uint8 { + s := r.number() + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseUint(s, 10, 8) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: s, + }) + } + return uint8(n) +} + +func (r *Lexer) Uint16() uint16 { + s := r.number() + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseUint(s, 10, 16) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: s, + }) + } + return uint16(n) +} + +func (r *Lexer) Uint32() uint32 { + s := r.number() + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseUint(s, 10, 32) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: s, + }) + } + return uint32(n) +} + +func (r *Lexer) Uint64() uint64 { + s := r.number() + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseUint(s, 10, 64) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: s, + }) + } + return n +} + +func (r *Lexer) Uint() uint { + return uint(r.Uint64()) +} + +func (r *Lexer) Int8() int8 { + s := r.number() + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseInt(s, 10, 8) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: s, + }) + } + return int8(n) +} + +func (r *Lexer) Int16() int16 { + s := r.number() + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseInt(s, 10, 16) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: s, + }) + } + return int16(n) +} + +func (r *Lexer) Int32() int32 { + s := r.number() + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseInt(s, 10, 32) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: s, + }) + } + return int32(n) +} + +func (r *Lexer) Int64() int64 { + s := r.number() + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseInt(s, 10, 64) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: s, + }) + } + return n +} + +func (r *Lexer) Int() int { + return int(r.Int64()) +} + +func (r *Lexer) Uint8Str() uint8 { + s, b := r.unsafeString() + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseUint(s, 10, 8) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: string(b), + }) + } + return uint8(n) +} + +func (r *Lexer) Uint16Str() uint16 { + s, b := r.unsafeString() + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseUint(s, 10, 16) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: string(b), + }) + } + return uint16(n) +} + +func (r *Lexer) Uint32Str() uint32 { + s, b := r.unsafeString() + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseUint(s, 10, 32) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: string(b), + }) + } + return uint32(n) +} + +func (r *Lexer) Uint64Str() uint64 { + s, b := r.unsafeString() + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseUint(s, 10, 64) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: string(b), + }) + } + return n +} + +func (r *Lexer) UintStr() uint { + return uint(r.Uint64Str()) +} + +func (r *Lexer) UintptrStr() uintptr { + return uintptr(r.Uint64Str()) +} + +func (r *Lexer) Int8Str() int8 { + s, b := r.unsafeString() + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseInt(s, 10, 8) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: string(b), + }) + } + return int8(n) +} + +func (r *Lexer) Int16Str() int16 { + s, b := r.unsafeString() + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseInt(s, 10, 16) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: string(b), + }) + } + return int16(n) +} + +func (r *Lexer) Int32Str() int32 { + s, b := r.unsafeString() + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseInt(s, 10, 32) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: string(b), + }) + } + return int32(n) +} + +func (r *Lexer) Int64Str() int64 { + s, b := r.unsafeString() + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseInt(s, 10, 64) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: string(b), + }) + } + return n +} + +func (r *Lexer) IntStr() int { + return int(r.Int64Str()) +} + +func (r *Lexer) Float32() float32 { + s := r.number() + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseFloat(s, 32) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: s, + }) + } + return float32(n) +} + +func (r *Lexer) Float32Str() float32 { + s, b := r.unsafeString() + if !r.Ok() { + return 0 + } + n, err := strconv.ParseFloat(s, 32) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: string(b), + }) + } + return float32(n) +} + +func (r *Lexer) Float64() float64 { + s := r.number() + if !r.Ok() { + return 0 + } + + n, err := strconv.ParseFloat(s, 64) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: s, + }) + } + return n +} + +func (r *Lexer) Float64Str() float64 { + s, b := r.unsafeString() + if !r.Ok() { + return 0 + } + n, err := strconv.ParseFloat(s, 64) + if err != nil { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Reason: err.Error(), + Data: string(b), + }) + } + return n +} + +func (r *Lexer) Error() error { + return r.fatalError +} + +func (r *Lexer) AddError(e error) { + if r.fatalError == nil { + r.fatalError = e + } +} + +func (r *Lexer) AddNonFatalError(e error) { + r.addNonfatalError(&LexerError{ + Offset: r.start, + Data: string(r.Data[r.start:r.pos]), + Reason: e.Error(), + }) +} + +func (r *Lexer) addNonfatalError(err *LexerError) { + if r.UseMultipleErrors { + // We don't want to add errors with the same offset. + if len(r.multipleErrors) != 0 && r.multipleErrors[len(r.multipleErrors)-1].Offset == err.Offset { + return + } + r.multipleErrors = append(r.multipleErrors, err) + return + } + r.fatalError = err +} + +func (r *Lexer) GetNonFatalErrors() []*LexerError { + return r.multipleErrors +} + +// JsonNumber fetches and json.Number from 'encoding/json' package. +// Both int, float or string, contains them are valid values +func (r *Lexer) JsonNumber() json.Number { + if r.token.kind == tokenUndef && r.Ok() { + r.FetchToken() + } + if !r.Ok() { + r.errInvalidToken("json.Number") + return json.Number("") + } + + switch r.token.kind { + case tokenString: + return json.Number(r.String()) + case tokenNumber: + return json.Number(r.Raw()) + case tokenNull: + r.Null() + return json.Number("") + default: + r.errSyntax() + return json.Number("") + } +} + +// Interface fetches an interface{} analogous to the 'encoding/json' package. +func (r *Lexer) Interface() interface{} { + if r.token.kind == tokenUndef && r.Ok() { + r.FetchToken() + } + + if !r.Ok() { + return nil + } + switch r.token.kind { + case tokenString: + return r.String() + case tokenNumber: + return r.Float64() + case tokenBool: + return r.Bool() + case tokenNull: + r.Null() + return nil + } + + if r.token.delimValue == '{' { + r.consume() + + ret := map[string]interface{}{} + for !r.IsDelim('}') { + key := r.String() + r.WantColon() + ret[key] = r.Interface() + r.WantComma() + } + r.Delim('}') + + if r.Ok() { + return ret + } else { + return nil + } + } else if r.token.delimValue == '[' { + r.consume() + + var ret []interface{} + for !r.IsDelim(']') { + ret = append(ret, r.Interface()) + r.WantComma() + } + r.Delim(']') + + if r.Ok() { + return ret + } else { + return nil + } + } + r.errSyntax() + return nil +} + +// WantComma requires a comma to be present before fetching next token. +func (r *Lexer) WantComma() { + r.wantSep = ',' + r.firstElement = false +} + +// WantColon requires a colon to be present before fetching next token. +func (r *Lexer) WantColon() { + r.wantSep = ':' + r.firstElement = false +} diff --git a/vendor/github.com/mailru/easyjson/jlexer/lexer_test.go b/vendor/github.com/mailru/easyjson/jlexer/lexer_test.go new file mode 100644 index 0000000..529a270 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/jlexer/lexer_test.go @@ -0,0 +1,314 @@ +package jlexer + +import ( + "bytes" + "encoding/json" + "reflect" + "testing" +) + +func TestString(t *testing.T) { + for i, test := range []struct { + toParse string + want string + wantError bool + }{ + {toParse: `"simple string"`, want: "simple string"}, + {toParse: " \r\r\n\t " + `"test"`, want: "test"}, + {toParse: `"\n\t\"\/\\\f\r"`, want: "\n\t\"/\\\f\r"}, + {toParse: `"\u0020"`, want: " "}, + {toParse: `"\u0020-\t"`, want: " -\t"}, + {toParse: `"\ufffd\uFFFD"`, want: "\ufffd\ufffd"}, + {toParse: `"\ud83d\ude00"`, want: "😀"}, + {toParse: `"\ud83d\ude08"`, want: "😈"}, + {toParse: `"\ud8"`, wantError: true}, + + {toParse: `"test"junk`, want: "test"}, + + {toParse: `5`, wantError: true}, // not a string + {toParse: `"\x"`, wantError: true}, // invalid escape + {toParse: `"\ud800"`, want: "�"}, // invalid utf-8 char; return replacement char + } { + l := Lexer{Data: []byte(test.toParse)} + + got := l.String() + if got != test.want { + t.Errorf("[%d, %q] String() = %v; want %v", i, test.toParse, got, test.want) + } + err := l.Error() + if err != nil && !test.wantError { + t.Errorf("[%d, %q] String() error: %v", i, test.toParse, err) + } else if err == nil && test.wantError { + t.Errorf("[%d, %q] String() ok; want error", i, test.toParse) + } + } +} + +func TestBytes(t *testing.T) { + for i, test := range []struct { + toParse string + want string + wantError bool + }{ + {toParse: `"c2ltcGxlIHN0cmluZw=="`, want: "simple string"}, + {toParse: " \r\r\n\t " + `"dGVzdA=="`, want: "test"}, + + {toParse: `5`, wantError: true}, // not a JSON string + {toParse: `"foobar"`, wantError: true}, // not base64 encoded + {toParse: `"c2ltcGxlIHN0cmluZw="`, wantError: true}, // invalid base64 padding + } { + l := Lexer{Data: []byte(test.toParse)} + + got := l.Bytes() + if bytes.Compare(got, []byte(test.want)) != 0 { + t.Errorf("[%d, %q] Bytes() = %v; want: %v", i, test.toParse, got, []byte(test.want)) + } + err := l.Error() + if err != nil && !test.wantError { + t.Errorf("[%d, %q] Bytes() error: %v", i, test.toParse, err) + } else if err == nil && test.wantError { + t.Errorf("[%d, %q] Bytes() ok; want error", i, test.toParse) + } + } +} + +func TestNumber(t *testing.T) { + for i, test := range []struct { + toParse string + want string + wantError bool + }{ + {toParse: "123", want: "123"}, + {toParse: "-123", want: "-123"}, + {toParse: "\r\n12.35", want: "12.35"}, + {toParse: "12.35e+1", want: "12.35e+1"}, + {toParse: "12.35e-15", want: "12.35e-15"}, + {toParse: "12.35E-15", want: "12.35E-15"}, + {toParse: "12.35E15", want: "12.35E15"}, + + {toParse: `"a"`, wantError: true}, + {toParse: "123junk", wantError: true}, + {toParse: "1.2.3", wantError: true}, + {toParse: "1e2e3", wantError: true}, + {toParse: "1e2.3", wantError: true}, + } { + l := Lexer{Data: []byte(test.toParse)} + + got := l.number() + if got != test.want { + t.Errorf("[%d, %q] number() = %v; want %v", i, test.toParse, got, test.want) + } + err := l.Error() + if err != nil && !test.wantError { + t.Errorf("[%d, %q] number() error: %v", i, test.toParse, err) + } else if err == nil && test.wantError { + t.Errorf("[%d, %q] number() ok; want error", i, test.toParse) + } + } +} + +func TestBool(t *testing.T) { + for i, test := range []struct { + toParse string + want bool + wantError bool + }{ + {toParse: "true", want: true}, + {toParse: "false", want: false}, + + {toParse: "1", wantError: true}, + {toParse: "truejunk", wantError: true}, + {toParse: `false"junk"`, wantError: true}, + {toParse: "True", wantError: true}, + {toParse: "False", wantError: true}, + } { + l := Lexer{Data: []byte(test.toParse)} + + got := l.Bool() + if got != test.want { + t.Errorf("[%d, %q] Bool() = %v; want %v", i, test.toParse, got, test.want) + } + err := l.Error() + if err != nil && !test.wantError { + t.Errorf("[%d, %q] Bool() error: %v", i, test.toParse, err) + } else if err == nil && test.wantError { + t.Errorf("[%d, %q] Bool() ok; want error", i, test.toParse) + } + } +} + +func TestSkipRecursive(t *testing.T) { + for i, test := range []struct { + toParse string + left string + wantError bool + }{ + {toParse: "5, 4", left: ", 4"}, + {toParse: "[5, 6], 4", left: ", 4"}, + {toParse: "[5, [7,8]]: 4", left: ": 4"}, + + {toParse: `{"a":1}, 4`, left: ", 4"}, + {toParse: `{"a":1, "b":{"c": 5}, "e":[12,15]}, 4`, left: ", 4"}, + + // array start/end chars in a string + {toParse: `[5, "]"], 4`, left: ", 4"}, + {toParse: `[5, "\"]"], 4`, left: ", 4"}, + {toParse: `[5, "["], 4`, left: ", 4"}, + {toParse: `[5, "\"["], 4`, left: ", 4"}, + + // object start/end chars in a string + {toParse: `{"a}":1}, 4`, left: ", 4"}, + {toParse: `{"a\"}":1}, 4`, left: ", 4"}, + {toParse: `{"a{":1}, 4`, left: ", 4"}, + {toParse: `{"a\"{":1}, 4`, left: ", 4"}, + + // object with double slashes at the end of string + {toParse: `{"a":"hey\\"}, 4`, left: ", 4"}, + } { + l := Lexer{Data: []byte(test.toParse)} + + l.SkipRecursive() + + got := string(l.Data[l.pos:]) + if got != test.left { + t.Errorf("[%d, %q] SkipRecursive() left = %v; want %v", i, test.toParse, got, test.left) + } + err := l.Error() + if err != nil && !test.wantError { + t.Errorf("[%d, %q] SkipRecursive() error: %v", i, test.toParse, err) + } else if err == nil && test.wantError { + t.Errorf("[%d, %q] SkipRecursive() ok; want error", i, test.toParse) + } + } +} + +func TestInterface(t *testing.T) { + for i, test := range []struct { + toParse string + want interface{} + wantError bool + }{ + {toParse: "null", want: nil}, + {toParse: "true", want: true}, + {toParse: `"a"`, want: "a"}, + {toParse: "5", want: float64(5)}, + + {toParse: `{}`, want: map[string]interface{}{}}, + {toParse: `[]`, want: []interface{}(nil)}, + + {toParse: `{"a": "b"}`, want: map[string]interface{}{"a": "b"}}, + {toParse: `[5]`, want: []interface{}{float64(5)}}, + + {toParse: `{"a":5 , "b" : "string"}`, want: map[string]interface{}{"a": float64(5), "b": "string"}}, + {toParse: `["a", 5 , null, true]`, want: []interface{}{"a", float64(5), nil, true}}, + + {toParse: `{"a" "b"}`, wantError: true}, + {toParse: `{"a": "b",}`, wantError: true}, + {toParse: `{"a":"b","c" "b"}`, wantError: true}, + {toParse: `{"a": "b","c":"d",}`, wantError: true}, + {toParse: `{,}`, wantError: true}, + + {toParse: `[1, 2,]`, wantError: true}, + {toParse: `[1 2]`, wantError: true}, + {toParse: `[,]`, wantError: true}, + } { + l := Lexer{Data: []byte(test.toParse)} + + got := l.Interface() + if !reflect.DeepEqual(got, test.want) { + t.Errorf("[%d, %q] Interface() = %v; want %v", i, test.toParse, got, test.want) + } + err := l.Error() + if err != nil && !test.wantError { + t.Errorf("[%d, %q] Interface() error: %v", i, test.toParse, err) + } else if err == nil && test.wantError { + t.Errorf("[%d, %q] Interface() ok; want error", i, test.toParse) + } + } +} + +func TestConsumed(t *testing.T) { + for i, test := range []struct { + toParse string + wantError bool + }{ + {toParse: "", wantError: false}, + {toParse: " ", wantError: false}, + {toParse: "\r\n", wantError: false}, + {toParse: "\t\t", wantError: false}, + + {toParse: "{", wantError: true}, + } { + l := Lexer{Data: []byte(test.toParse)} + l.Consumed() + + err := l.Error() + if err != nil && !test.wantError { + t.Errorf("[%d, %q] Consumed() error: %v", i, test.toParse, err) + } else if err == nil && test.wantError { + t.Errorf("[%d, %q] Consumed() ok; want error", i, test.toParse) + } + } +} + +func TestJsonNumber(t *testing.T) { + for i, test := range []struct { + toParse string + want json.Number + wantLexerError bool + wantValue interface{} + wantValueError bool + }{ + {toParse: `10`, want: json.Number("10"), wantValue: int64(10)}, + {toParse: `0`, want: json.Number("0"), wantValue: int64(0)}, + {toParse: `0.12`, want: json.Number("0.12"), wantValue: 0.12}, + {toParse: `25E-4`, want: json.Number("25E-4"), wantValue: 25E-4}, + + {toParse: `"10"`, want: json.Number("10"), wantValue: int64(10)}, + {toParse: `"0"`, want: json.Number("0"), wantValue: int64(0)}, + {toParse: `"0.12"`, want: json.Number("0.12"), wantValue: 0.12}, + {toParse: `"25E-4"`, want: json.Number("25E-4"), wantValue: 25E-4}, + + {toParse: `"foo"`, want: json.Number("foo"), wantValueError: true}, + {toParse: `null`, want: json.Number(""), wantValueError: true}, + + {toParse: `"a""`, want: json.Number("a"), wantValueError: true}, + + {toParse: `[1]`, want: json.Number(""), wantLexerError: true, wantValueError: true}, + {toParse: `{}`, want: json.Number(""), wantLexerError: true, wantValueError: true}, + {toParse: `a`, want: json.Number(""), wantLexerError: true, wantValueError: true}, + } { + l := Lexer{Data: []byte(test.toParse)} + + got := l.JsonNumber() + if got != test.want { + t.Errorf("[%d, %q] JsonNumber() = %v; want %v", i, test.toParse, got, test.want) + } + + err := l.Error() + if err != nil && !test.wantLexerError { + t.Errorf("[%d, %q] JsonNumber() lexer error: %v", i, test.toParse, err) + } else if err == nil && test.wantLexerError { + t.Errorf("[%d, %q] JsonNumber() ok; want lexer error", i, test.toParse) + } + + var valueErr error + var gotValue interface{} + switch test.wantValue.(type) { + case float64: + gotValue, valueErr = got.Float64() + default: + gotValue, valueErr = got.Int64() + } + + if !reflect.DeepEqual(gotValue, test.wantValue) && !test.wantLexerError && !test.wantValueError { + t.Errorf("[%d, %q] JsonNumber() = %v; want %v", i, test.toParse, gotValue, test.wantValue) + } + + if valueErr != nil && !test.wantValueError { + t.Errorf("[%d, %q] JsonNumber() value error: %v", i, test.toParse, valueErr) + } else if valueErr == nil && test.wantValueError { + t.Errorf("[%d, %q] JsonNumber() ok; want value error", i, test.toParse) + } + } +} diff --git a/vendor/github.com/mailru/easyjson/jwriter/writer.go b/vendor/github.com/mailru/easyjson/jwriter/writer.go new file mode 100644 index 0000000..b9ed7cc --- /dev/null +++ b/vendor/github.com/mailru/easyjson/jwriter/writer.go @@ -0,0 +1,390 @@ +// Package jwriter contains a JSON writer. +package jwriter + +import ( + "io" + "strconv" + "unicode/utf8" + + "github.com/mailru/easyjson/buffer" +) + +// Flags describe various encoding options. The behavior may be actually implemented in the encoder, but +// Flags field in Writer is used to set and pass them around. +type Flags int + +const ( + NilMapAsEmpty Flags = 1 << iota // Encode nil map as '{}' rather than 'null'. + NilSliceAsEmpty // Encode nil slice as '[]' rather than 'null'. +) + +// Writer is a JSON writer. +type Writer struct { + Flags Flags + + Error error + Buffer buffer.Buffer + NoEscapeHTML bool +} + +// Size returns the size of the data that was written out. +func (w *Writer) Size() int { + return w.Buffer.Size() +} + +// DumpTo outputs the data to given io.Writer, resetting the buffer. +func (w *Writer) DumpTo(out io.Writer) (written int, err error) { + return w.Buffer.DumpTo(out) +} + +// BuildBytes returns writer data as a single byte slice. You can optionally provide one byte slice +// as argument that it will try to reuse. +func (w *Writer) BuildBytes(reuse ...[]byte) ([]byte, error) { + if w.Error != nil { + return nil, w.Error + } + + return w.Buffer.BuildBytes(reuse...), nil +} + +// ReadCloser returns an io.ReadCloser that can be used to read the data. +// ReadCloser also resets the buffer. +func (w *Writer) ReadCloser() (io.ReadCloser, error) { + if w.Error != nil { + return nil, w.Error + } + + return w.Buffer.ReadCloser(), nil +} + +// RawByte appends raw binary data to the buffer. +func (w *Writer) RawByte(c byte) { + w.Buffer.AppendByte(c) +} + +// RawByte appends raw binary data to the buffer. +func (w *Writer) RawString(s string) { + w.Buffer.AppendString(s) +} + +// Raw appends raw binary data to the buffer or sets the error if it is given. Useful for +// calling with results of MarshalJSON-like functions. +func (w *Writer) Raw(data []byte, err error) { + switch { + case w.Error != nil: + return + case err != nil: + w.Error = err + case len(data) > 0: + w.Buffer.AppendBytes(data) + default: + w.RawString("null") + } +} + +// RawText encloses raw binary data in quotes and appends in to the buffer. +// Useful for calling with results of MarshalText-like functions. +func (w *Writer) RawText(data []byte, err error) { + switch { + case w.Error != nil: + return + case err != nil: + w.Error = err + case len(data) > 0: + w.String(string(data)) + default: + w.RawString("null") + } +} + +// Base64Bytes appends data to the buffer after base64 encoding it +func (w *Writer) Base64Bytes(data []byte) { + if data == nil { + w.Buffer.AppendString("null") + return + } + w.Buffer.AppendByte('"') + w.base64(data) + w.Buffer.AppendByte('"') +} + +func (w *Writer) Uint8(n uint8) { + w.Buffer.EnsureSpace(3) + w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, uint64(n), 10) +} + +func (w *Writer) Uint16(n uint16) { + w.Buffer.EnsureSpace(5) + w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, uint64(n), 10) +} + +func (w *Writer) Uint32(n uint32) { + w.Buffer.EnsureSpace(10) + w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, uint64(n), 10) +} + +func (w *Writer) Uint(n uint) { + w.Buffer.EnsureSpace(20) + w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, uint64(n), 10) +} + +func (w *Writer) Uint64(n uint64) { + w.Buffer.EnsureSpace(20) + w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, n, 10) +} + +func (w *Writer) Int8(n int8) { + w.Buffer.EnsureSpace(4) + w.Buffer.Buf = strconv.AppendInt(w.Buffer.Buf, int64(n), 10) +} + +func (w *Writer) Int16(n int16) { + w.Buffer.EnsureSpace(6) + w.Buffer.Buf = strconv.AppendInt(w.Buffer.Buf, int64(n), 10) +} + +func (w *Writer) Int32(n int32) { + w.Buffer.EnsureSpace(11) + w.Buffer.Buf = strconv.AppendInt(w.Buffer.Buf, int64(n), 10) +} + +func (w *Writer) Int(n int) { + w.Buffer.EnsureSpace(21) + w.Buffer.Buf = strconv.AppendInt(w.Buffer.Buf, int64(n), 10) +} + +func (w *Writer) Int64(n int64) { + w.Buffer.EnsureSpace(21) + w.Buffer.Buf = strconv.AppendInt(w.Buffer.Buf, n, 10) +} + +func (w *Writer) Uint8Str(n uint8) { + w.Buffer.EnsureSpace(3) + w.Buffer.Buf = append(w.Buffer.Buf, '"') + w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, uint64(n), 10) + w.Buffer.Buf = append(w.Buffer.Buf, '"') +} + +func (w *Writer) Uint16Str(n uint16) { + w.Buffer.EnsureSpace(5) + w.Buffer.Buf = append(w.Buffer.Buf, '"') + w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, uint64(n), 10) + w.Buffer.Buf = append(w.Buffer.Buf, '"') +} + +func (w *Writer) Uint32Str(n uint32) { + w.Buffer.EnsureSpace(10) + w.Buffer.Buf = append(w.Buffer.Buf, '"') + w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, uint64(n), 10) + w.Buffer.Buf = append(w.Buffer.Buf, '"') +} + +func (w *Writer) UintStr(n uint) { + w.Buffer.EnsureSpace(20) + w.Buffer.Buf = append(w.Buffer.Buf, '"') + w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, uint64(n), 10) + w.Buffer.Buf = append(w.Buffer.Buf, '"') +} + +func (w *Writer) Uint64Str(n uint64) { + w.Buffer.EnsureSpace(20) + w.Buffer.Buf = append(w.Buffer.Buf, '"') + w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, n, 10) + w.Buffer.Buf = append(w.Buffer.Buf, '"') +} + +func (w *Writer) UintptrStr(n uintptr) { + w.Buffer.EnsureSpace(20) + w.Buffer.Buf = append(w.Buffer.Buf, '"') + w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, uint64(n), 10) + w.Buffer.Buf = append(w.Buffer.Buf, '"') +} + +func (w *Writer) Int8Str(n int8) { + w.Buffer.EnsureSpace(4) + w.Buffer.Buf = append(w.Buffer.Buf, '"') + w.Buffer.Buf = strconv.AppendInt(w.Buffer.Buf, int64(n), 10) + w.Buffer.Buf = append(w.Buffer.Buf, '"') +} + +func (w *Writer) Int16Str(n int16) { + w.Buffer.EnsureSpace(6) + w.Buffer.Buf = append(w.Buffer.Buf, '"') + w.Buffer.Buf = strconv.AppendInt(w.Buffer.Buf, int64(n), 10) + w.Buffer.Buf = append(w.Buffer.Buf, '"') +} + +func (w *Writer) Int32Str(n int32) { + w.Buffer.EnsureSpace(11) + w.Buffer.Buf = append(w.Buffer.Buf, '"') + w.Buffer.Buf = strconv.AppendInt(w.Buffer.Buf, int64(n), 10) + w.Buffer.Buf = append(w.Buffer.Buf, '"') +} + +func (w *Writer) IntStr(n int) { + w.Buffer.EnsureSpace(21) + w.Buffer.Buf = append(w.Buffer.Buf, '"') + w.Buffer.Buf = strconv.AppendInt(w.Buffer.Buf, int64(n), 10) + w.Buffer.Buf = append(w.Buffer.Buf, '"') +} + +func (w *Writer) Int64Str(n int64) { + w.Buffer.EnsureSpace(21) + w.Buffer.Buf = append(w.Buffer.Buf, '"') + w.Buffer.Buf = strconv.AppendInt(w.Buffer.Buf, n, 10) + w.Buffer.Buf = append(w.Buffer.Buf, '"') +} + +func (w *Writer) Float32(n float32) { + w.Buffer.EnsureSpace(20) + w.Buffer.Buf = strconv.AppendFloat(w.Buffer.Buf, float64(n), 'g', -1, 32) +} + +func (w *Writer) Float32Str(n float32) { + w.Buffer.EnsureSpace(20) + w.Buffer.Buf = append(w.Buffer.Buf, '"') + w.Buffer.Buf = strconv.AppendFloat(w.Buffer.Buf, float64(n), 'g', -1, 32) + w.Buffer.Buf = append(w.Buffer.Buf, '"') +} + +func (w *Writer) Float64(n float64) { + w.Buffer.EnsureSpace(20) + w.Buffer.Buf = strconv.AppendFloat(w.Buffer.Buf, n, 'g', -1, 64) +} + +func (w *Writer) Float64Str(n float64) { + w.Buffer.EnsureSpace(20) + w.Buffer.Buf = append(w.Buffer.Buf, '"') + w.Buffer.Buf = strconv.AppendFloat(w.Buffer.Buf, float64(n), 'g', -1, 64) + w.Buffer.Buf = append(w.Buffer.Buf, '"') +} + +func (w *Writer) Bool(v bool) { + w.Buffer.EnsureSpace(5) + if v { + w.Buffer.Buf = append(w.Buffer.Buf, "true"...) + } else { + w.Buffer.Buf = append(w.Buffer.Buf, "false"...) + } +} + +const chars = "0123456789abcdef" + +func isNotEscapedSingleChar(c byte, escapeHTML bool) bool { + // Note: might make sense to use a table if there are more chars to escape. With 4 chars + // it benchmarks the same. + if escapeHTML { + return c != '<' && c != '>' && c != '&' && c != '\\' && c != '"' && c >= 0x20 && c < utf8.RuneSelf + } else { + return c != '\\' && c != '"' && c >= 0x20 && c < utf8.RuneSelf + } +} + +func (w *Writer) String(s string) { + w.Buffer.AppendByte('"') + + // Portions of the string that contain no escapes are appended as + // byte slices. + + p := 0 // last non-escape symbol + + for i := 0; i < len(s); { + c := s[i] + + if isNotEscapedSingleChar(c, !w.NoEscapeHTML) { + // single-width character, no escaping is required + i++ + continue + } else if c < utf8.RuneSelf { + // single-with character, need to escape + w.Buffer.AppendString(s[p:i]) + switch c { + case '\t': + w.Buffer.AppendString(`\t`) + case '\r': + w.Buffer.AppendString(`\r`) + case '\n': + w.Buffer.AppendString(`\n`) + case '\\': + w.Buffer.AppendString(`\\`) + case '"': + w.Buffer.AppendString(`\"`) + default: + w.Buffer.AppendString(`\u00`) + w.Buffer.AppendByte(chars[c>>4]) + w.Buffer.AppendByte(chars[c&0xf]) + } + + i++ + p = i + continue + } + + // broken utf + runeValue, runeWidth := utf8.DecodeRuneInString(s[i:]) + if runeValue == utf8.RuneError && runeWidth == 1 { + w.Buffer.AppendString(s[p:i]) + w.Buffer.AppendString(`\ufffd`) + i++ + p = i + continue + } + + // jsonp stuff - tab separator and line separator + if runeValue == '\u2028' || runeValue == '\u2029' { + w.Buffer.AppendString(s[p:i]) + w.Buffer.AppendString(`\u202`) + w.Buffer.AppendByte(chars[runeValue&0xf]) + i += runeWidth + p = i + continue + } + i += runeWidth + } + w.Buffer.AppendString(s[p:]) + w.Buffer.AppendByte('"') +} + +const encode = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" +const padChar = '=' + +func (w *Writer) base64(in []byte) { + + if len(in) == 0 { + return + } + + w.Buffer.EnsureSpace(((len(in)-1)/3 + 1) * 4) + + si := 0 + n := (len(in) / 3) * 3 + + for si < n { + // Convert 3x 8bit source bytes into 4 bytes + val := uint(in[si+0])<<16 | uint(in[si+1])<<8 | uint(in[si+2]) + + w.Buffer.Buf = append(w.Buffer.Buf, encode[val>>18&0x3F], encode[val>>12&0x3F], encode[val>>6&0x3F], encode[val&0x3F]) + + si += 3 + } + + remain := len(in) - si + if remain == 0 { + return + } + + // Add the remaining small block + val := uint(in[si+0]) << 16 + if remain == 2 { + val |= uint(in[si+1]) << 8 + } + + w.Buffer.Buf = append(w.Buffer.Buf, encode[val>>18&0x3F], encode[val>>12&0x3F]) + + switch remain { + case 2: + w.Buffer.Buf = append(w.Buffer.Buf, encode[val>>6&0x3F], byte(padChar)) + case 1: + w.Buffer.Buf = append(w.Buffer.Buf, byte(padChar), byte(padChar)) + } +} diff --git a/vendor/github.com/mailru/easyjson/opt/gotemplate_Bool.go b/vendor/github.com/mailru/easyjson/opt/gotemplate_Bool.go new file mode 100644 index 0000000..6978ee9 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/opt/gotemplate_Bool.go @@ -0,0 +1,79 @@ +// generated by gotemplate + +package opt + +import ( + "fmt" + + "github.com/mailru/easyjson/jlexer" + "github.com/mailru/easyjson/jwriter" +) + +// template type Optional(A) + +// A 'gotemplate'-based type for providing optional semantics without using pointers. +type Bool struct { + V bool + Defined bool +} + +// Creates an optional type with a given value. +func OBool(v bool) Bool { + return Bool{V: v, Defined: true} +} + +// Get returns the value or given default in the case the value is undefined. +func (v Bool) Get(deflt bool) bool { + if !v.Defined { + return deflt + } + return v.V +} + +// MarshalEasyJSON does JSON marshaling using easyjson interface. +func (v Bool) MarshalEasyJSON(w *jwriter.Writer) { + if v.Defined { + w.Bool(v.V) + } else { + w.RawString("null") + } +} + +// UnmarshalEasyJSON does JSON unmarshaling using easyjson interface. +func (v *Bool) UnmarshalEasyJSON(l *jlexer.Lexer) { + if l.IsNull() { + l.Skip() + *v = Bool{} + } else { + v.V = l.Bool() + v.Defined = true + } +} + +// MarshalJSON implements a standard json marshaler interface. +func (v Bool) MarshalJSON() ([]byte, error) { + w := jwriter.Writer{} + v.MarshalEasyJSON(&w) + return w.Buffer.BuildBytes(), w.Error +} + +// UnmarshalJSON implements a standard json unmarshaler interface. +func (v *Bool) UnmarshalJSON(data []byte) error { + l := jlexer.Lexer{Data: data} + v.UnmarshalEasyJSON(&l) + return l.Error() +} + +// IsDefined returns whether the value is defined, a function is required so that it can +// be used in an interface. +func (v Bool) IsDefined() bool { + return v.Defined +} + +// String implements a stringer interface using fmt.Sprint for the value. +func (v Bool) String() string { + if !v.Defined { + return "" + } + return fmt.Sprint(v.V) +} diff --git a/vendor/github.com/mailru/easyjson/opt/gotemplate_Float32.go b/vendor/github.com/mailru/easyjson/opt/gotemplate_Float32.go new file mode 100644 index 0000000..643cea3 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/opt/gotemplate_Float32.go @@ -0,0 +1,79 @@ +// generated by gotemplate + +package opt + +import ( + "fmt" + + "github.com/mailru/easyjson/jlexer" + "github.com/mailru/easyjson/jwriter" +) + +// template type Optional(A) + +// A 'gotemplate'-based type for providing optional semantics without using pointers. +type Float32 struct { + V float32 + Defined bool +} + +// Creates an optional type with a given value. +func OFloat32(v float32) Float32 { + return Float32{V: v, Defined: true} +} + +// Get returns the value or given default in the case the value is undefined. +func (v Float32) Get(deflt float32) float32 { + if !v.Defined { + return deflt + } + return v.V +} + +// MarshalEasyJSON does JSON marshaling using easyjson interface. +func (v Float32) MarshalEasyJSON(w *jwriter.Writer) { + if v.Defined { + w.Float32(v.V) + } else { + w.RawString("null") + } +} + +// UnmarshalEasyJSON does JSON unmarshaling using easyjson interface. +func (v *Float32) UnmarshalEasyJSON(l *jlexer.Lexer) { + if l.IsNull() { + l.Skip() + *v = Float32{} + } else { + v.V = l.Float32() + v.Defined = true + } +} + +// MarshalJSON implements a standard json marshaler interface. +func (v Float32) MarshalJSON() ([]byte, error) { + w := jwriter.Writer{} + v.MarshalEasyJSON(&w) + return w.Buffer.BuildBytes(), w.Error +} + +// UnmarshalJSON implements a standard json unmarshaler interface. +func (v *Float32) UnmarshalJSON(data []byte) error { + l := jlexer.Lexer{Data: data} + v.UnmarshalEasyJSON(&l) + return l.Error() +} + +// IsDefined returns whether the value is defined, a function is required so that it can +// be used in an interface. +func (v Float32) IsDefined() bool { + return v.Defined +} + +// String implements a stringer interface using fmt.Sprint for the value. +func (v Float32) String() string { + if !v.Defined { + return "" + } + return fmt.Sprint(v.V) +} diff --git a/vendor/github.com/mailru/easyjson/opt/gotemplate_Float64.go b/vendor/github.com/mailru/easyjson/opt/gotemplate_Float64.go new file mode 100644 index 0000000..75ae727 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/opt/gotemplate_Float64.go @@ -0,0 +1,79 @@ +// generated by gotemplate + +package opt + +import ( + "fmt" + + "github.com/mailru/easyjson/jlexer" + "github.com/mailru/easyjson/jwriter" +) + +// template type Optional(A) + +// A 'gotemplate'-based type for providing optional semantics without using pointers. +type Float64 struct { + V float64 + Defined bool +} + +// Creates an optional type with a given value. +func OFloat64(v float64) Float64 { + return Float64{V: v, Defined: true} +} + +// Get returns the value or given default in the case the value is undefined. +func (v Float64) Get(deflt float64) float64 { + if !v.Defined { + return deflt + } + return v.V +} + +// MarshalEasyJSON does JSON marshaling using easyjson interface. +func (v Float64) MarshalEasyJSON(w *jwriter.Writer) { + if v.Defined { + w.Float64(v.V) + } else { + w.RawString("null") + } +} + +// UnmarshalEasyJSON does JSON unmarshaling using easyjson interface. +func (v *Float64) UnmarshalEasyJSON(l *jlexer.Lexer) { + if l.IsNull() { + l.Skip() + *v = Float64{} + } else { + v.V = l.Float64() + v.Defined = true + } +} + +// MarshalJSON implements a standard json marshaler interface. +func (v Float64) MarshalJSON() ([]byte, error) { + w := jwriter.Writer{} + v.MarshalEasyJSON(&w) + return w.Buffer.BuildBytes(), w.Error +} + +// UnmarshalJSON implements a standard json unmarshaler interface. +func (v *Float64) UnmarshalJSON(data []byte) error { + l := jlexer.Lexer{Data: data} + v.UnmarshalEasyJSON(&l) + return l.Error() +} + +// IsDefined returns whether the value is defined, a function is required so that it can +// be used in an interface. +func (v Float64) IsDefined() bool { + return v.Defined +} + +// String implements a stringer interface using fmt.Sprint for the value. +func (v Float64) String() string { + if !v.Defined { + return "" + } + return fmt.Sprint(v.V) +} diff --git a/vendor/github.com/mailru/easyjson/opt/gotemplate_Int.go b/vendor/github.com/mailru/easyjson/opt/gotemplate_Int.go new file mode 100644 index 0000000..469742f --- /dev/null +++ b/vendor/github.com/mailru/easyjson/opt/gotemplate_Int.go @@ -0,0 +1,79 @@ +// generated by gotemplate + +package opt + +import ( + "fmt" + + "github.com/mailru/easyjson/jlexer" + "github.com/mailru/easyjson/jwriter" +) + +// template type Optional(A) + +// A 'gotemplate'-based type for providing optional semantics without using pointers. +type Int struct { + V int + Defined bool +} + +// Creates an optional type with a given value. +func OInt(v int) Int { + return Int{V: v, Defined: true} +} + +// Get returns the value or given default in the case the value is undefined. +func (v Int) Get(deflt int) int { + if !v.Defined { + return deflt + } + return v.V +} + +// MarshalEasyJSON does JSON marshaling using easyjson interface. +func (v Int) MarshalEasyJSON(w *jwriter.Writer) { + if v.Defined { + w.Int(v.V) + } else { + w.RawString("null") + } +} + +// UnmarshalEasyJSON does JSON unmarshaling using easyjson interface. +func (v *Int) UnmarshalEasyJSON(l *jlexer.Lexer) { + if l.IsNull() { + l.Skip() + *v = Int{} + } else { + v.V = l.Int() + v.Defined = true + } +} + +// MarshalJSON implements a standard json marshaler interface. +func (v Int) MarshalJSON() ([]byte, error) { + w := jwriter.Writer{} + v.MarshalEasyJSON(&w) + return w.Buffer.BuildBytes(), w.Error +} + +// UnmarshalJSON implements a standard json unmarshaler interface. +func (v *Int) UnmarshalJSON(data []byte) error { + l := jlexer.Lexer{Data: data} + v.UnmarshalEasyJSON(&l) + return l.Error() +} + +// IsDefined returns whether the value is defined, a function is required so that it can +// be used in an interface. +func (v Int) IsDefined() bool { + return v.Defined +} + +// String implements a stringer interface using fmt.Sprint for the value. +func (v Int) String() string { + if !v.Defined { + return "" + } + return fmt.Sprint(v.V) +} diff --git a/vendor/github.com/mailru/easyjson/opt/gotemplate_Int16.go b/vendor/github.com/mailru/easyjson/opt/gotemplate_Int16.go new file mode 100644 index 0000000..b7723e2 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/opt/gotemplate_Int16.go @@ -0,0 +1,79 @@ +// generated by gotemplate + +package opt + +import ( + "fmt" + + "github.com/mailru/easyjson/jlexer" + "github.com/mailru/easyjson/jwriter" +) + +// template type Optional(A) + +// A 'gotemplate'-based type for providing optional semantics without using pointers. +type Int16 struct { + V int16 + Defined bool +} + +// Creates an optional type with a given value. +func OInt16(v int16) Int16 { + return Int16{V: v, Defined: true} +} + +// Get returns the value or given default in the case the value is undefined. +func (v Int16) Get(deflt int16) int16 { + if !v.Defined { + return deflt + } + return v.V +} + +// MarshalEasyJSON does JSON marshaling using easyjson interface. +func (v Int16) MarshalEasyJSON(w *jwriter.Writer) { + if v.Defined { + w.Int16(v.V) + } else { + w.RawString("null") + } +} + +// UnmarshalEasyJSON does JSON unmarshaling using easyjson interface. +func (v *Int16) UnmarshalEasyJSON(l *jlexer.Lexer) { + if l.IsNull() { + l.Skip() + *v = Int16{} + } else { + v.V = l.Int16() + v.Defined = true + } +} + +// MarshalJSON implements a standard json marshaler interface. +func (v Int16) MarshalJSON() ([]byte, error) { + w := jwriter.Writer{} + v.MarshalEasyJSON(&w) + return w.Buffer.BuildBytes(), w.Error +} + +// UnmarshalJSON implements a standard json unmarshaler interface. +func (v *Int16) UnmarshalJSON(data []byte) error { + l := jlexer.Lexer{Data: data} + v.UnmarshalEasyJSON(&l) + return l.Error() +} + +// IsDefined returns whether the value is defined, a function is required so that it can +// be used in an interface. +func (v Int16) IsDefined() bool { + return v.Defined +} + +// String implements a stringer interface using fmt.Sprint for the value. +func (v Int16) String() string { + if !v.Defined { + return "" + } + return fmt.Sprint(v.V) +} diff --git a/vendor/github.com/mailru/easyjson/opt/gotemplate_Int32.go b/vendor/github.com/mailru/easyjson/opt/gotemplate_Int32.go new file mode 100644 index 0000000..7c7637a --- /dev/null +++ b/vendor/github.com/mailru/easyjson/opt/gotemplate_Int32.go @@ -0,0 +1,79 @@ +// generated by gotemplate + +package opt + +import ( + "fmt" + + "github.com/mailru/easyjson/jlexer" + "github.com/mailru/easyjson/jwriter" +) + +// template type Optional(A) + +// A 'gotemplate'-based type for providing optional semantics without using pointers. +type Int32 struct { + V int32 + Defined bool +} + +// Creates an optional type with a given value. +func OInt32(v int32) Int32 { + return Int32{V: v, Defined: true} +} + +// Get returns the value or given default in the case the value is undefined. +func (v Int32) Get(deflt int32) int32 { + if !v.Defined { + return deflt + } + return v.V +} + +// MarshalEasyJSON does JSON marshaling using easyjson interface. +func (v Int32) MarshalEasyJSON(w *jwriter.Writer) { + if v.Defined { + w.Int32(v.V) + } else { + w.RawString("null") + } +} + +// UnmarshalEasyJSON does JSON unmarshaling using easyjson interface. +func (v *Int32) UnmarshalEasyJSON(l *jlexer.Lexer) { + if l.IsNull() { + l.Skip() + *v = Int32{} + } else { + v.V = l.Int32() + v.Defined = true + } +} + +// MarshalJSON implements a standard json marshaler interface. +func (v Int32) MarshalJSON() ([]byte, error) { + w := jwriter.Writer{} + v.MarshalEasyJSON(&w) + return w.Buffer.BuildBytes(), w.Error +} + +// UnmarshalJSON implements a standard json unmarshaler interface. +func (v *Int32) UnmarshalJSON(data []byte) error { + l := jlexer.Lexer{Data: data} + v.UnmarshalEasyJSON(&l) + return l.Error() +} + +// IsDefined returns whether the value is defined, a function is required so that it can +// be used in an interface. +func (v Int32) IsDefined() bool { + return v.Defined +} + +// String implements a stringer interface using fmt.Sprint for the value. +func (v Int32) String() string { + if !v.Defined { + return "" + } + return fmt.Sprint(v.V) +} diff --git a/vendor/github.com/mailru/easyjson/opt/gotemplate_Int64.go b/vendor/github.com/mailru/easyjson/opt/gotemplate_Int64.go new file mode 100644 index 0000000..e6ea6dc --- /dev/null +++ b/vendor/github.com/mailru/easyjson/opt/gotemplate_Int64.go @@ -0,0 +1,79 @@ +// generated by gotemplate + +package opt + +import ( + "fmt" + + "github.com/mailru/easyjson/jlexer" + "github.com/mailru/easyjson/jwriter" +) + +// template type Optional(A) + +// A 'gotemplate'-based type for providing optional semantics without using pointers. +type Int64 struct { + V int64 + Defined bool +} + +// Creates an optional type with a given value. +func OInt64(v int64) Int64 { + return Int64{V: v, Defined: true} +} + +// Get returns the value or given default in the case the value is undefined. +func (v Int64) Get(deflt int64) int64 { + if !v.Defined { + return deflt + } + return v.V +} + +// MarshalEasyJSON does JSON marshaling using easyjson interface. +func (v Int64) MarshalEasyJSON(w *jwriter.Writer) { + if v.Defined { + w.Int64(v.V) + } else { + w.RawString("null") + } +} + +// UnmarshalEasyJSON does JSON unmarshaling using easyjson interface. +func (v *Int64) UnmarshalEasyJSON(l *jlexer.Lexer) { + if l.IsNull() { + l.Skip() + *v = Int64{} + } else { + v.V = l.Int64() + v.Defined = true + } +} + +// MarshalJSON implements a standard json marshaler interface. +func (v Int64) MarshalJSON() ([]byte, error) { + w := jwriter.Writer{} + v.MarshalEasyJSON(&w) + return w.Buffer.BuildBytes(), w.Error +} + +// UnmarshalJSON implements a standard json unmarshaler interface. +func (v *Int64) UnmarshalJSON(data []byte) error { + l := jlexer.Lexer{Data: data} + v.UnmarshalEasyJSON(&l) + return l.Error() +} + +// IsDefined returns whether the value is defined, a function is required so that it can +// be used in an interface. +func (v Int64) IsDefined() bool { + return v.Defined +} + +// String implements a stringer interface using fmt.Sprint for the value. +func (v Int64) String() string { + if !v.Defined { + return "" + } + return fmt.Sprint(v.V) +} diff --git a/vendor/github.com/mailru/easyjson/opt/gotemplate_Int8.go b/vendor/github.com/mailru/easyjson/opt/gotemplate_Int8.go new file mode 100644 index 0000000..ddc6665 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/opt/gotemplate_Int8.go @@ -0,0 +1,79 @@ +// generated by gotemplate + +package opt + +import ( + "fmt" + + "github.com/mailru/easyjson/jlexer" + "github.com/mailru/easyjson/jwriter" +) + +// template type Optional(A) + +// A 'gotemplate'-based type for providing optional semantics without using pointers. +type Int8 struct { + V int8 + Defined bool +} + +// Creates an optional type with a given value. +func OInt8(v int8) Int8 { + return Int8{V: v, Defined: true} +} + +// Get returns the value or given default in the case the value is undefined. +func (v Int8) Get(deflt int8) int8 { + if !v.Defined { + return deflt + } + return v.V +} + +// MarshalEasyJSON does JSON marshaling using easyjson interface. +func (v Int8) MarshalEasyJSON(w *jwriter.Writer) { + if v.Defined { + w.Int8(v.V) + } else { + w.RawString("null") + } +} + +// UnmarshalEasyJSON does JSON unmarshaling using easyjson interface. +func (v *Int8) UnmarshalEasyJSON(l *jlexer.Lexer) { + if l.IsNull() { + l.Skip() + *v = Int8{} + } else { + v.V = l.Int8() + v.Defined = true + } +} + +// MarshalJSON implements a standard json marshaler interface. +func (v Int8) MarshalJSON() ([]byte, error) { + w := jwriter.Writer{} + v.MarshalEasyJSON(&w) + return w.Buffer.BuildBytes(), w.Error +} + +// UnmarshalJSON implements a standard json unmarshaler interface. +func (v *Int8) UnmarshalJSON(data []byte) error { + l := jlexer.Lexer{Data: data} + v.UnmarshalEasyJSON(&l) + return l.Error() +} + +// IsDefined returns whether the value is defined, a function is required so that it can +// be used in an interface. +func (v Int8) IsDefined() bool { + return v.Defined +} + +// String implements a stringer interface using fmt.Sprint for the value. +func (v Int8) String() string { + if !v.Defined { + return "" + } + return fmt.Sprint(v.V) +} diff --git a/vendor/github.com/mailru/easyjson/opt/gotemplate_String.go b/vendor/github.com/mailru/easyjson/opt/gotemplate_String.go new file mode 100644 index 0000000..11c90b4 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/opt/gotemplate_String.go @@ -0,0 +1,79 @@ +// generated by gotemplate + +package opt + +import ( + "fmt" + + "github.com/mailru/easyjson/jlexer" + "github.com/mailru/easyjson/jwriter" +) + +// template type Optional(A) + +// A 'gotemplate'-based type for providing optional semantics without using pointers. +type String struct { + V string + Defined bool +} + +// Creates an optional type with a given value. +func OString(v string) String { + return String{V: v, Defined: true} +} + +// Get returns the value or given default in the case the value is undefined. +func (v String) Get(deflt string) string { + if !v.Defined { + return deflt + } + return v.V +} + +// MarshalEasyJSON does JSON marshaling using easyjson interface. +func (v String) MarshalEasyJSON(w *jwriter.Writer) { + if v.Defined { + w.String(v.V) + } else { + w.RawString("null") + } +} + +// UnmarshalEasyJSON does JSON unmarshaling using easyjson interface. +func (v *String) UnmarshalEasyJSON(l *jlexer.Lexer) { + if l.IsNull() { + l.Skip() + *v = String{} + } else { + v.V = l.String() + v.Defined = true + } +} + +// MarshalJSON implements a standard json marshaler interface. +func (v String) MarshalJSON() ([]byte, error) { + w := jwriter.Writer{} + v.MarshalEasyJSON(&w) + return w.Buffer.BuildBytes(), w.Error +} + +// UnmarshalJSON implements a standard json unmarshaler interface. +func (v *String) UnmarshalJSON(data []byte) error { + l := jlexer.Lexer{Data: data} + v.UnmarshalEasyJSON(&l) + return l.Error() +} + +// IsDefined returns whether the value is defined, a function is required so that it can +// be used in an interface. +func (v String) IsDefined() bool { + return v.Defined +} + +// String implements a stringer interface using fmt.Sprint for the value. +func (v String) String() string { + if !v.Defined { + return "" + } + return fmt.Sprint(v.V) +} diff --git a/vendor/github.com/mailru/easyjson/opt/gotemplate_Uint.go b/vendor/github.com/mailru/easyjson/opt/gotemplate_Uint.go new file mode 100644 index 0000000..57efd31 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/opt/gotemplate_Uint.go @@ -0,0 +1,79 @@ +// generated by gotemplate + +package opt + +import ( + "fmt" + + "github.com/mailru/easyjson/jlexer" + "github.com/mailru/easyjson/jwriter" +) + +// template type Optional(A) + +// A 'gotemplate'-based type for providing optional semantics without using pointers. +type Uint struct { + V uint + Defined bool +} + +// Creates an optional type with a given value. +func OUint(v uint) Uint { + return Uint{V: v, Defined: true} +} + +// Get returns the value or given default in the case the value is undefined. +func (v Uint) Get(deflt uint) uint { + if !v.Defined { + return deflt + } + return v.V +} + +// MarshalEasyJSON does JSON marshaling using easyjson interface. +func (v Uint) MarshalEasyJSON(w *jwriter.Writer) { + if v.Defined { + w.Uint(v.V) + } else { + w.RawString("null") + } +} + +// UnmarshalEasyJSON does JSON unmarshaling using easyjson interface. +func (v *Uint) UnmarshalEasyJSON(l *jlexer.Lexer) { + if l.IsNull() { + l.Skip() + *v = Uint{} + } else { + v.V = l.Uint() + v.Defined = true + } +} + +// MarshalJSON implements a standard json marshaler interface. +func (v Uint) MarshalJSON() ([]byte, error) { + w := jwriter.Writer{} + v.MarshalEasyJSON(&w) + return w.Buffer.BuildBytes(), w.Error +} + +// UnmarshalJSON implements a standard json unmarshaler interface. +func (v *Uint) UnmarshalJSON(data []byte) error { + l := jlexer.Lexer{Data: data} + v.UnmarshalEasyJSON(&l) + return l.Error() +} + +// IsDefined returns whether the value is defined, a function is required so that it can +// be used in an interface. +func (v Uint) IsDefined() bool { + return v.Defined +} + +// String implements a stringer interface using fmt.Sprint for the value. +func (v Uint) String() string { + if !v.Defined { + return "" + } + return fmt.Sprint(v.V) +} diff --git a/vendor/github.com/mailru/easyjson/opt/gotemplate_Uint16.go b/vendor/github.com/mailru/easyjson/opt/gotemplate_Uint16.go new file mode 100644 index 0000000..f28e1d2 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/opt/gotemplate_Uint16.go @@ -0,0 +1,79 @@ +// generated by gotemplate + +package opt + +import ( + "fmt" + + "github.com/mailru/easyjson/jlexer" + "github.com/mailru/easyjson/jwriter" +) + +// template type Optional(A) + +// A 'gotemplate'-based type for providing optional semantics without using pointers. +type Uint16 struct { + V uint16 + Defined bool +} + +// Creates an optional type with a given value. +func OUint16(v uint16) Uint16 { + return Uint16{V: v, Defined: true} +} + +// Get returns the value or given default in the case the value is undefined. +func (v Uint16) Get(deflt uint16) uint16 { + if !v.Defined { + return deflt + } + return v.V +} + +// MarshalEasyJSON does JSON marshaling using easyjson interface. +func (v Uint16) MarshalEasyJSON(w *jwriter.Writer) { + if v.Defined { + w.Uint16(v.V) + } else { + w.RawString("null") + } +} + +// UnmarshalEasyJSON does JSON unmarshaling using easyjson interface. +func (v *Uint16) UnmarshalEasyJSON(l *jlexer.Lexer) { + if l.IsNull() { + l.Skip() + *v = Uint16{} + } else { + v.V = l.Uint16() + v.Defined = true + } +} + +// MarshalJSON implements a standard json marshaler interface. +func (v Uint16) MarshalJSON() ([]byte, error) { + w := jwriter.Writer{} + v.MarshalEasyJSON(&w) + return w.Buffer.BuildBytes(), w.Error +} + +// UnmarshalJSON implements a standard json unmarshaler interface. +func (v *Uint16) UnmarshalJSON(data []byte) error { + l := jlexer.Lexer{Data: data} + v.UnmarshalEasyJSON(&l) + return l.Error() +} + +// IsDefined returns whether the value is defined, a function is required so that it can +// be used in an interface. +func (v Uint16) IsDefined() bool { + return v.Defined +} + +// String implements a stringer interface using fmt.Sprint for the value. +func (v Uint16) String() string { + if !v.Defined { + return "" + } + return fmt.Sprint(v.V) +} diff --git a/vendor/github.com/mailru/easyjson/opt/gotemplate_Uint32.go b/vendor/github.com/mailru/easyjson/opt/gotemplate_Uint32.go new file mode 100644 index 0000000..9fb95c0 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/opt/gotemplate_Uint32.go @@ -0,0 +1,79 @@ +// generated by gotemplate + +package opt + +import ( + "fmt" + + "github.com/mailru/easyjson/jlexer" + "github.com/mailru/easyjson/jwriter" +) + +// template type Optional(A) + +// A 'gotemplate'-based type for providing optional semantics without using pointers. +type Uint32 struct { + V uint32 + Defined bool +} + +// Creates an optional type with a given value. +func OUint32(v uint32) Uint32 { + return Uint32{V: v, Defined: true} +} + +// Get returns the value or given default in the case the value is undefined. +func (v Uint32) Get(deflt uint32) uint32 { + if !v.Defined { + return deflt + } + return v.V +} + +// MarshalEasyJSON does JSON marshaling using easyjson interface. +func (v Uint32) MarshalEasyJSON(w *jwriter.Writer) { + if v.Defined { + w.Uint32(v.V) + } else { + w.RawString("null") + } +} + +// UnmarshalEasyJSON does JSON unmarshaling using easyjson interface. +func (v *Uint32) UnmarshalEasyJSON(l *jlexer.Lexer) { + if l.IsNull() { + l.Skip() + *v = Uint32{} + } else { + v.V = l.Uint32() + v.Defined = true + } +} + +// MarshalJSON implements a standard json marshaler interface. +func (v Uint32) MarshalJSON() ([]byte, error) { + w := jwriter.Writer{} + v.MarshalEasyJSON(&w) + return w.Buffer.BuildBytes(), w.Error +} + +// UnmarshalJSON implements a standard json unmarshaler interface. +func (v *Uint32) UnmarshalJSON(data []byte) error { + l := jlexer.Lexer{Data: data} + v.UnmarshalEasyJSON(&l) + return l.Error() +} + +// IsDefined returns whether the value is defined, a function is required so that it can +// be used in an interface. +func (v Uint32) IsDefined() bool { + return v.Defined +} + +// String implements a stringer interface using fmt.Sprint for the value. +func (v Uint32) String() string { + if !v.Defined { + return "" + } + return fmt.Sprint(v.V) +} diff --git a/vendor/github.com/mailru/easyjson/opt/gotemplate_Uint64.go b/vendor/github.com/mailru/easyjson/opt/gotemplate_Uint64.go new file mode 100644 index 0000000..0e623c6 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/opt/gotemplate_Uint64.go @@ -0,0 +1,79 @@ +// generated by gotemplate + +package opt + +import ( + "fmt" + + "github.com/mailru/easyjson/jlexer" + "github.com/mailru/easyjson/jwriter" +) + +// template type Optional(A) + +// A 'gotemplate'-based type for providing optional semantics without using pointers. +type Uint64 struct { + V uint64 + Defined bool +} + +// Creates an optional type with a given value. +func OUint64(v uint64) Uint64 { + return Uint64{V: v, Defined: true} +} + +// Get returns the value or given default in the case the value is undefined. +func (v Uint64) Get(deflt uint64) uint64 { + if !v.Defined { + return deflt + } + return v.V +} + +// MarshalEasyJSON does JSON marshaling using easyjson interface. +func (v Uint64) MarshalEasyJSON(w *jwriter.Writer) { + if v.Defined { + w.Uint64(v.V) + } else { + w.RawString("null") + } +} + +// UnmarshalEasyJSON does JSON unmarshaling using easyjson interface. +func (v *Uint64) UnmarshalEasyJSON(l *jlexer.Lexer) { + if l.IsNull() { + l.Skip() + *v = Uint64{} + } else { + v.V = l.Uint64() + v.Defined = true + } +} + +// MarshalJSON implements a standard json marshaler interface. +func (v Uint64) MarshalJSON() ([]byte, error) { + w := jwriter.Writer{} + v.MarshalEasyJSON(&w) + return w.Buffer.BuildBytes(), w.Error +} + +// UnmarshalJSON implements a standard json unmarshaler interface. +func (v *Uint64) UnmarshalJSON(data []byte) error { + l := jlexer.Lexer{Data: data} + v.UnmarshalEasyJSON(&l) + return l.Error() +} + +// IsDefined returns whether the value is defined, a function is required so that it can +// be used in an interface. +func (v Uint64) IsDefined() bool { + return v.Defined +} + +// String implements a stringer interface using fmt.Sprint for the value. +func (v Uint64) String() string { + if !v.Defined { + return "" + } + return fmt.Sprint(v.V) +} diff --git a/vendor/github.com/mailru/easyjson/opt/gotemplate_Uint8.go b/vendor/github.com/mailru/easyjson/opt/gotemplate_Uint8.go new file mode 100644 index 0000000..c629e44 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/opt/gotemplate_Uint8.go @@ -0,0 +1,79 @@ +// generated by gotemplate + +package opt + +import ( + "fmt" + + "github.com/mailru/easyjson/jlexer" + "github.com/mailru/easyjson/jwriter" +) + +// template type Optional(A) + +// A 'gotemplate'-based type for providing optional semantics without using pointers. +type Uint8 struct { + V uint8 + Defined bool +} + +// Creates an optional type with a given value. +func OUint8(v uint8) Uint8 { + return Uint8{V: v, Defined: true} +} + +// Get returns the value or given default in the case the value is undefined. +func (v Uint8) Get(deflt uint8) uint8 { + if !v.Defined { + return deflt + } + return v.V +} + +// MarshalEasyJSON does JSON marshaling using easyjson interface. +func (v Uint8) MarshalEasyJSON(w *jwriter.Writer) { + if v.Defined { + w.Uint8(v.V) + } else { + w.RawString("null") + } +} + +// UnmarshalEasyJSON does JSON unmarshaling using easyjson interface. +func (v *Uint8) UnmarshalEasyJSON(l *jlexer.Lexer) { + if l.IsNull() { + l.Skip() + *v = Uint8{} + } else { + v.V = l.Uint8() + v.Defined = true + } +} + +// MarshalJSON implements a standard json marshaler interface. +func (v Uint8) MarshalJSON() ([]byte, error) { + w := jwriter.Writer{} + v.MarshalEasyJSON(&w) + return w.Buffer.BuildBytes(), w.Error +} + +// UnmarshalJSON implements a standard json unmarshaler interface. +func (v *Uint8) UnmarshalJSON(data []byte) error { + l := jlexer.Lexer{Data: data} + v.UnmarshalEasyJSON(&l) + return l.Error() +} + +// IsDefined returns whether the value is defined, a function is required so that it can +// be used in an interface. +func (v Uint8) IsDefined() bool { + return v.Defined +} + +// String implements a stringer interface using fmt.Sprint for the value. +func (v Uint8) String() string { + if !v.Defined { + return "" + } + return fmt.Sprint(v.V) +} diff --git a/vendor/github.com/mailru/easyjson/opt/optional/opt.go b/vendor/github.com/mailru/easyjson/opt/optional/opt.go new file mode 100644 index 0000000..277dd1a --- /dev/null +++ b/vendor/github.com/mailru/easyjson/opt/optional/opt.go @@ -0,0 +1,80 @@ +// +build none + +package optional + +import ( + "fmt" + + "github.com/mailru/easyjson/jlexer" + "github.com/mailru/easyjson/jwriter" +) + +// template type Optional(A) +type A int + +// A 'gotemplate'-based type for providing optional semantics without using pointers. +type Optional struct { + V A + Defined bool +} + +// Creates an optional type with a given value. +func OOptional(v A) Optional { + return Optional{V: v, Defined: true} +} + +// Get returns the value or given default in the case the value is undefined. +func (v Optional) Get(deflt A) A { + if !v.Defined { + return deflt + } + return v.V +} + +// MarshalEasyJSON does JSON marshaling using easyjson interface. +func (v Optional) MarshalEasyJSON(w *jwriter.Writer) { + if v.Defined { + w.Optional(v.V) + } else { + w.RawString("null") + } +} + +// UnmarshalEasyJSON does JSON unmarshaling using easyjson interface. +func (v *Optional) UnmarshalEasyJSON(l *jlexer.Lexer) { + if l.IsNull() { + l.Skip() + *v = Optional{} + } else { + v.V = l.Optional() + v.Defined = true + } +} + +// MarshalJSON implements a standard json marshaler interface. +func (v Optional) MarshalJSON() ([]byte, error) { + w := jwriter.Writer{} + v.MarshalEasyJSON(&w) + return w.Buffer.BuildBytes(), w.Error +} + +// UnmarshalJSON implements a standard json unmarshaler interface. +func (v *Optional) UnmarshalJSON(data []byte) error { + l := jlexer.Lexer{Data: data} + v.UnmarshalEasyJSON(&l) + return l.Error() +} + +// IsDefined returns whether the value is defined, a function is required so that it can +// be used in an interface. +func (v Optional) IsDefined() bool { + return v.Defined +} + +// String implements a stringer interface using fmt.Sprint for the value. +func (v Optional) String() string { + if !v.Defined { + return "" + } + return fmt.Sprint(v.V) +} diff --git a/vendor/github.com/mailru/easyjson/opt/opts.go b/vendor/github.com/mailru/easyjson/opt/opts.go new file mode 100644 index 0000000..3617f7f --- /dev/null +++ b/vendor/github.com/mailru/easyjson/opt/opts.go @@ -0,0 +1,22 @@ +package opt + +//go:generate sed -i "s/\\+build none/generated by gotemplate/" optional/opt.go +//go:generate gotemplate "github.com/mailru/easyjson/opt/optional" Int(int) +//go:generate gotemplate "github.com/mailru/easyjson/opt/optional" Uint(uint) + +//go:generate gotemplate "github.com/mailru/easyjson/opt/optional" Int8(int8) +//go:generate gotemplate "github.com/mailru/easyjson/opt/optional" Int16(int16) +//go:generate gotemplate "github.com/mailru/easyjson/opt/optional" Int32(int32) +//go:generate gotemplate "github.com/mailru/easyjson/opt/optional" Int64(int64) + +//go:generate gotemplate "github.com/mailru/easyjson/opt/optional" Uint8(uint8) +//go:generate gotemplate "github.com/mailru/easyjson/opt/optional" Uint16(uint16) +//go:generate gotemplate "github.com/mailru/easyjson/opt/optional" Uint32(uint32) +//go:generate gotemplate "github.com/mailru/easyjson/opt/optional" Uint64(uint64) + +//go:generate gotemplate "github.com/mailru/easyjson/opt/optional" Float32(float32) +//go:generate gotemplate "github.com/mailru/easyjson/opt/optional" Float64(float64) + +//go:generate gotemplate "github.com/mailru/easyjson/opt/optional" Bool(bool) +//go:generate gotemplate "github.com/mailru/easyjson/opt/optional" String(string) +//go:generate sed -i "s/generated by gotemplate/+build none/" optional/opt.go diff --git a/vendor/github.com/mailru/easyjson/parser/parser.go b/vendor/github.com/mailru/easyjson/parser/parser.go new file mode 100644 index 0000000..5bd06e9 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/parser/parser.go @@ -0,0 +1,97 @@ +package parser + +import ( + "go/ast" + "go/parser" + "go/token" + "os/exec" + "strings" +) + +const structComment = "easyjson:json" + +type Parser struct { + PkgPath string + PkgName string + StructNames []string + AllStructs bool +} + +type visitor struct { + *Parser + + name string + explicit bool +} + +func (p *Parser) needType(comments string) bool { + for _, v := range strings.Split(comments, "\n") { + if strings.HasPrefix(v, structComment) { + return true + } + } + return false +} + +func (v *visitor) Visit(n ast.Node) (w ast.Visitor) { + switch n := n.(type) { + case *ast.Package: + return v + case *ast.File: + v.PkgName = n.Name.String() + return v + + case *ast.GenDecl: + v.explicit = v.needType(n.Doc.Text()) + + if !v.explicit && !v.AllStructs { + return nil + } + return v + case *ast.TypeSpec: + v.name = n.Name.String() + + // Allow to specify non-structs explicitly independent of '-all' flag. + if v.explicit { + v.StructNames = append(v.StructNames, v.name) + return nil + } + return v + case *ast.StructType: + v.StructNames = append(v.StructNames, v.name) + return nil + } + return nil +} + +func (p *Parser) Parse(fname string, isDir bool) error { + var err error + if p.PkgPath, err = getPkgPath(fname, isDir); err != nil { + return err + } + + fset := token.NewFileSet() + if isDir { + packages, err := parser.ParseDir(fset, fname, nil, parser.ParseComments) + if err != nil { + return err + } + + for _, pckg := range packages { + ast.Walk(&visitor{Parser: p}, pckg) + } + } else { + f, err := parser.ParseFile(fset, fname, nil, parser.ParseComments) + if err != nil { + return err + } + + ast.Walk(&visitor{Parser: p}, f) + } + return nil +} + +func getDefaultGoPath() (string, error) { + output, err := exec.Command("go", "env", "GOPATH").Output() + return string(output), err +} diff --git a/vendor/github.com/mailru/easyjson/parser/parser_unix.go b/vendor/github.com/mailru/easyjson/parser/parser_unix.go new file mode 100644 index 0000000..09b20a2 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/parser/parser_unix.go @@ -0,0 +1,42 @@ +// +build !windows + +package parser + +import ( + "fmt" + "os" + "path" + "strings" +) + +func getPkgPath(fname string, isDir bool) (string, error) { + if !path.IsAbs(fname) { + pwd, err := os.Getwd() + if err != nil { + return "", err + } + fname = path.Join(pwd, fname) + } + + gopath := os.Getenv("GOPATH") + if gopath == "" { + var err error + gopath, err = getDefaultGoPath() + if err != nil { + return "", fmt.Errorf("cannot determine GOPATH: %s", err) + } + } + + for _, p := range strings.Split(os.Getenv("GOPATH"), ":") { + prefix := path.Join(p, "src") + "/" + if rel := strings.TrimPrefix(fname, prefix); rel != fname { + if !isDir { + return path.Dir(rel), nil + } else { + return path.Clean(rel), nil + } + } + } + + return "", fmt.Errorf("file '%v' is not in GOPATH", fname) +} diff --git a/vendor/github.com/mailru/easyjson/parser/parser_windows.go b/vendor/github.com/mailru/easyjson/parser/parser_windows.go new file mode 100644 index 0000000..90d3a78 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/parser/parser_windows.go @@ -0,0 +1,49 @@ +package parser + +import ( + "fmt" + "os" + "path" + "path/filepath" + "strings" +) + +func normalizePath(path string) string { + // use lower case, as Windows file systems will almost always be case insensitive + return strings.ToLower(strings.Replace(path, "\\", "/", -1)) +} + +func getPkgPath(fname string, isDir bool) (string, error) { + // path.IsAbs doesn't work properly on Windows; use filepath.IsAbs instead + if !filepath.IsAbs(fname) { + pwd, err := os.Getwd() + if err != nil { + return "", err + } + fname = path.Join(pwd, fname) + } + + fname = normalizePath(fname) + + gopath := os.Getenv("GOPATH") + if gopath == "" { + var err error + gopath, err = getDefaultGoPath() + if err != nil { + return "", fmt.Errorf("cannot determine GOPATH: %s", err) + } + } + + for _, p := range strings.Split(os.Getenv("GOPATH"), ";") { + prefix := path.Join(normalizePath(p), "src") + "/" + if rel := strings.TrimPrefix(fname, prefix); rel != fname { + if !isDir { + return path.Dir(rel), nil + } else { + return path.Clean(rel), nil + } + } + } + + return "", fmt.Errorf("file '%v' is not in GOPATH", fname) +} diff --git a/vendor/github.com/mailru/easyjson/raw.go b/vendor/github.com/mailru/easyjson/raw.go new file mode 100644 index 0000000..81bd002 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/raw.go @@ -0,0 +1,45 @@ +package easyjson + +import ( + "github.com/mailru/easyjson/jlexer" + "github.com/mailru/easyjson/jwriter" +) + +// RawMessage is a raw piece of JSON (number, string, bool, object, array or +// null) that is extracted without parsing and output as is during marshaling. +type RawMessage []byte + +// MarshalEasyJSON does JSON marshaling using easyjson interface. +func (v *RawMessage) MarshalEasyJSON(w *jwriter.Writer) { + if len(*v) == 0 { + w.RawString("null") + } else { + w.Raw(*v, nil) + } +} + +// UnmarshalEasyJSON does JSON unmarshaling using easyjson interface. +func (v *RawMessage) UnmarshalEasyJSON(l *jlexer.Lexer) { + *v = RawMessage(l.Raw()) +} + +// UnmarshalJSON implements encoding/json.Unmarshaler interface. +func (v *RawMessage) UnmarshalJSON(data []byte) error { + *v = data + return nil +} + +var nullBytes = []byte("null") + +// MarshalJSON implements encoding/json.Marshaler interface. +func (v RawMessage) MarshalJSON() ([]byte, error) { + if len(v) == 0 { + return nullBytes, nil + } + return v, nil +} + +// IsDefined is required for integration with omitempty easyjson logic. +func (v *RawMessage) IsDefined() bool { + return len(*v) > 0 +} diff --git a/vendor/github.com/mailru/easyjson/tests/basic_test.go b/vendor/github.com/mailru/easyjson/tests/basic_test.go new file mode 100644 index 0000000..28f0fdf --- /dev/null +++ b/vendor/github.com/mailru/easyjson/tests/basic_test.go @@ -0,0 +1,234 @@ +package tests + +import ( + "reflect" + "testing" + + "encoding/json" + + "github.com/mailru/easyjson" + "github.com/mailru/easyjson/jwriter" +) + +type testType interface { + json.Marshaler + json.Unmarshaler +} + +var testCases = []struct { + Decoded testType + Encoded string +}{ + {&primitiveTypesValue, primitiveTypesString}, + {&namedPrimitiveTypesValue, namedPrimitiveTypesString}, + {&structsValue, structsString}, + {&omitEmptyValue, omitEmptyString}, + {&snakeStructValue, snakeStructString}, + {&omitEmptyDefaultValue, omitEmptyDefaultString}, + {&optsValue, optsString}, + {&rawValue, rawString}, + {&stdMarshalerValue, stdMarshalerString}, + {&userMarshalerValue, userMarshalerString}, + {&unexportedStructValue, unexportedStructString}, + {&excludedFieldValue, excludedFieldString}, + {&sliceValue, sliceString}, + {&arrayValue, arrayString}, + {&mapsValue, mapsString}, + {&deepNestValue, deepNestString}, + {&IntsValue, IntsString}, + {&mapStringStringValue, mapStringStringString}, + {&namedTypeValue, namedTypeValueString}, + {&customMapKeyTypeValue, customMapKeyTypeValueString}, + {&embeddedTypeValue, embeddedTypeValueString}, + {&mapMyIntStringValue, mapMyIntStringValueString}, + {&mapIntStringValue, mapIntStringValueString}, + {&mapInt32StringValue, mapInt32StringValueString}, + {&mapInt64StringValue, mapInt64StringValueString}, + {&mapUintStringValue, mapUintStringValueString}, + {&mapUint32StringValue, mapUint32StringValueString}, + {&mapUint64StringValue, mapUint64StringValueString}, + {&mapUintptrStringValue, mapUintptrStringValueString}, + {&intKeyedMapStructValue, intKeyedMapStructValueString}, + {&intArrayStructValue, intArrayStructValueString}, +} + +func TestMarshal(t *testing.T) { + for i, test := range testCases { + data, err := test.Decoded.MarshalJSON() + if err != nil { + t.Errorf("[%d, %T] MarshalJSON() error: %v", i, test.Decoded, err) + } + + got := string(data) + if got != test.Encoded { + t.Errorf("[%d, %T] MarshalJSON(): got \n%v\n\t\t want \n%v", i, test.Decoded, got, test.Encoded) + } + } +} + +func TestUnmarshal(t *testing.T) { + for i, test := range testCases { + v1 := reflect.New(reflect.TypeOf(test.Decoded).Elem()).Interface() + v := v1.(testType) + + err := v.UnmarshalJSON([]byte(test.Encoded)) + if err != nil { + t.Errorf("[%d, %T] UnmarshalJSON() error: %v", i, test.Decoded, err) + } + + if !reflect.DeepEqual(v, test.Decoded) { + t.Errorf("[%d, %T] UnmarshalJSON(): got \n%+v\n\t\t want \n%+v", i, test.Decoded, v, test.Decoded) + } + } +} + +func TestRawMessageSTD(t *testing.T) { + type T struct { + F easyjson.RawMessage + Fnil easyjson.RawMessage + } + + val := T{F: easyjson.RawMessage([]byte(`"test"`))} + str := `{"F":"test","Fnil":null}` + + data, err := json.Marshal(val) + if err != nil { + t.Errorf("json.Marshal() error: %v", err) + } + got := string(data) + if got != str { + t.Errorf("json.Marshal() = %v; want %v", got, str) + } + + wantV := T{F: easyjson.RawMessage([]byte(`"test"`)), Fnil: easyjson.RawMessage([]byte("null"))} + var gotV T + + err = json.Unmarshal([]byte(str), &gotV) + if err != nil { + t.Errorf("json.Unmarshal() error: %v", err) + } + if !reflect.DeepEqual(gotV, wantV) { + t.Errorf("json.Unmarshal() = %v; want %v", gotV, wantV) + } +} + +func TestParseNull(t *testing.T) { + var got, want SubStruct + if err := easyjson.Unmarshal([]byte("null"), &got); err != nil { + t.Errorf("Unmarshal() error: %v", err) + } + + if !reflect.DeepEqual(got, want) { + t.Errorf("Unmarshal() = %+v; want %+v", got, want) + } +} + +var testSpecialCases = []struct { + EncodedString string + Value string +}{ + {`"Username \u003cuser@example.com\u003e"`, `Username `}, + {`"Username\ufffd"`, "Username\xc5"}, + {`"тестzтест"`, "тестzтест"}, + {`"тест\ufffdтест"`, "тест\xc5тест"}, + {`"绿茶"`, "绿茶"}, + {`"绿\ufffd茶"`, "绿\xc5茶"}, + {`"тест\u2028"`, "тест\xE2\x80\xA8"}, + {`"\\\r\n\t\""`, "\\\r\n\t\""}, + {`"ü"`, "ü"}, +} + +func TestSpecialCases(t *testing.T) { + for i, test := range testSpecialCases { + w := jwriter.Writer{} + w.String(test.Value) + got := string(w.Buffer.BuildBytes()) + if got != test.EncodedString { + t.Errorf("[%d] Encoded() = %+v; want %+v", i, got, test.EncodedString) + } + } +} + +func TestOverflowArray(t *testing.T) { + var a Arrays + err := easyjson.Unmarshal([]byte(arrayOverflowString), &a) + if err != nil { + t.Error(err) + } + if a != arrayValue { + t.Errorf("Unmarshal(%v) = %+v; want %+v", arrayOverflowString, a, arrayValue) + } +} + +func TestUnderflowArray(t *testing.T) { + var a Arrays + err := easyjson.Unmarshal([]byte(arrayUnderflowString), &a) + if err != nil { + t.Error(err) + } + if a != arrayUnderflowValue { + t.Errorf("Unmarshal(%v) = %+v; want %+v", arrayUnderflowString, a, arrayUnderflowValue) + } +} + +func TestEncodingFlags(t *testing.T) { + for i, test := range []struct { + Flags jwriter.Flags + In easyjson.Marshaler + Want string + }{ + {0, EncodingFlagsTestMap{}, `{"F":null}`}, + {0, EncodingFlagsTestSlice{}, `{"F":null}`}, + {jwriter.NilMapAsEmpty, EncodingFlagsTestMap{}, `{"F":{}}`}, + {jwriter.NilSliceAsEmpty, EncodingFlagsTestSlice{}, `{"F":[]}`}, + } { + w := &jwriter.Writer{Flags: test.Flags} + test.In.MarshalEasyJSON(w) + + data, err := w.BuildBytes() + if err != nil { + t.Errorf("[%v] easyjson.Marshal(%+v) error: %v", i, test.In, err) + } + + v := string(data) + if v != test.Want { + t.Errorf("[%v] easyjson.Marshal(%+v) = %v; want %v", i, test.In, v, test.Want) + } + } + +} + +func TestNestedEasyJsonMarshal(t *testing.T) { + n := map[string]*NestedEasyMarshaler{ + "Value": {}, + "Slice1": {}, + "Slice2": {}, + "Map1": {}, + "Map2": {}, + } + + ni := NestedInterfaces{ + Value: n["Value"], + Slice: []interface{}{n["Slice1"], n["Slice2"]}, + Map: map[string]interface{}{"1": n["Map1"], "2": n["Map2"]}, + } + easyjson.Marshal(ni) + + for k, v := range n { + if !v.EasilyMarshaled { + t.Errorf("Nested interface %s wasn't easily marshaled", k) + } + } +} + +func TestUnmarshalStructWithEmbeddedPtrStruct(t *testing.T) { + var s = StructWithInterface{Field2: &EmbeddedStruct{}} + var err error + err = easyjson.Unmarshal([]byte(structWithInterfaceString), &s) + if err != nil { + t.Errorf("easyjson.Unmarshal() error: %v", err) + } + if !reflect.DeepEqual(s, structWithInterfaceValueFilled) { + t.Errorf("easyjson.Unmarshal() = %#v; want %#v", s, structWithInterfaceValueFilled) + } +} diff --git a/vendor/github.com/mailru/easyjson/tests/custom_map_key_type.go b/vendor/github.com/mailru/easyjson/tests/custom_map_key_type.go new file mode 100644 index 0000000..099bd06 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/tests/custom_map_key_type.go @@ -0,0 +1,29 @@ +package tests + +import fmt "fmt" + +//easyjson:json +type CustomMapKeyType struct { + Map map[customKeyType]int +} + +type customKeyType [2]byte + +func (k customKeyType) MarshalJSON() ([]byte, error) { + return []byte(fmt.Sprintf(`"%02x"`, k)), nil +} + +func (k *customKeyType) UnmarshalJSON(b []byte) error { + _, err := fmt.Sscanf(string(b), `"%02x%02x"`, &k[0], &k[1]) + return err +} + +var customMapKeyTypeValue CustomMapKeyType + +func init() { + customMapKeyTypeValue.Map = map[customKeyType]int{ + customKeyType{0x01, 0x02}: 3, + } +} + +var customMapKeyTypeValueString = `{"Map":{"0102":3}}` diff --git a/vendor/github.com/mailru/easyjson/tests/data.go b/vendor/github.com/mailru/easyjson/tests/data.go new file mode 100644 index 0000000..8d5132d --- /dev/null +++ b/vendor/github.com/mailru/easyjson/tests/data.go @@ -0,0 +1,786 @@ +package tests + +import ( + "fmt" + "math" + "net" + "time" + + "github.com/mailru/easyjson" + "github.com/mailru/easyjson/opt" +) + +type PrimitiveTypes struct { + String string + Bool bool + + Int int + Int8 int8 + Int16 int16 + Int32 int32 + Int64 int64 + + Uint uint + Uint8 uint8 + Uint16 uint16 + Uint32 uint32 + Uint64 uint64 + + IntString int `json:",string"` + Int8String int8 `json:",string"` + Int16String int16 `json:",string"` + Int32String int32 `json:",string"` + Int64String int64 `json:",string"` + + UintString uint `json:",string"` + Uint8String uint8 `json:",string"` + Uint16String uint16 `json:",string"` + Uint32String uint32 `json:",string"` + Uint64String uint64 `json:",string"` + + Float32 float32 + Float64 float64 + + Float32String float32 `json:",string"` + Float64String float64 `json:",string"` + + Ptr *string + PtrNil *string +} + +var str = "bla" + +var primitiveTypesValue = PrimitiveTypes{ + String: "test", Bool: true, + + Int: math.MinInt32, + Int8: math.MinInt8, + Int16: math.MinInt16, + Int32: math.MinInt32, + Int64: math.MinInt64, + + Uint: math.MaxUint32, + Uint8: math.MaxUint8, + Uint16: math.MaxUint16, + Uint32: math.MaxUint32, + Uint64: math.MaxUint64, + + IntString: math.MinInt32, + Int8String: math.MinInt8, + Int16String: math.MinInt16, + Int32String: math.MinInt32, + Int64String: math.MinInt64, + + UintString: math.MaxUint32, + Uint8String: math.MaxUint8, + Uint16String: math.MaxUint16, + Uint32String: math.MaxUint32, + Uint64String: math.MaxUint64, + + Float32: 1.5, + Float64: math.MaxFloat64, + + Float32String: 1.5, + Float64String: math.MaxFloat64, + + Ptr: &str, +} + +var primitiveTypesString = "{" + + `"String":"test","Bool":true,` + + + `"Int":` + fmt.Sprint(math.MinInt32) + `,` + + `"Int8":` + fmt.Sprint(math.MinInt8) + `,` + + `"Int16":` + fmt.Sprint(math.MinInt16) + `,` + + `"Int32":` + fmt.Sprint(math.MinInt32) + `,` + + `"Int64":` + fmt.Sprint(int64(math.MinInt64)) + `,` + + + `"Uint":` + fmt.Sprint(uint32(math.MaxUint32)) + `,` + + `"Uint8":` + fmt.Sprint(math.MaxUint8) + `,` + + `"Uint16":` + fmt.Sprint(math.MaxUint16) + `,` + + `"Uint32":` + fmt.Sprint(uint32(math.MaxUint32)) + `,` + + `"Uint64":` + fmt.Sprint(uint64(math.MaxUint64)) + `,` + + + `"IntString":"` + fmt.Sprint(math.MinInt32) + `",` + + `"Int8String":"` + fmt.Sprint(math.MinInt8) + `",` + + `"Int16String":"` + fmt.Sprint(math.MinInt16) + `",` + + `"Int32String":"` + fmt.Sprint(math.MinInt32) + `",` + + `"Int64String":"` + fmt.Sprint(int64(math.MinInt64)) + `",` + + + `"UintString":"` + fmt.Sprint(uint32(math.MaxUint32)) + `",` + + `"Uint8String":"` + fmt.Sprint(math.MaxUint8) + `",` + + `"Uint16String":"` + fmt.Sprint(math.MaxUint16) + `",` + + `"Uint32String":"` + fmt.Sprint(uint32(math.MaxUint32)) + `",` + + `"Uint64String":"` + fmt.Sprint(uint64(math.MaxUint64)) + `",` + + + `"Float32":` + fmt.Sprint(1.5) + `,` + + `"Float64":` + fmt.Sprint(math.MaxFloat64) + `,` + + + `"Float32String":"` + fmt.Sprint(1.5) + `",` + + `"Float64String":"` + fmt.Sprint(math.MaxFloat64) + `",` + + + `"Ptr":"bla",` + + `"PtrNil":null` + + + "}" + +type ( + NamedString string + NamedBool bool + + NamedInt int + NamedInt8 int8 + NamedInt16 int16 + NamedInt32 int32 + NamedInt64 int64 + + NamedUint uint + NamedUint8 uint8 + NamedUint16 uint16 + NamedUint32 uint32 + NamedUint64 uint64 + + NamedFloat32 float32 + NamedFloat64 float64 + + NamedStrPtr *string +) + +type NamedPrimitiveTypes struct { + String NamedString + Bool NamedBool + + Int NamedInt + Int8 NamedInt8 + Int16 NamedInt16 + Int32 NamedInt32 + Int64 NamedInt64 + + Uint NamedUint + Uint8 NamedUint8 + Uint16 NamedUint16 + Uint32 NamedUint32 + Uint64 NamedUint64 + + Float32 NamedFloat32 + Float64 NamedFloat64 + + Ptr NamedStrPtr + PtrNil NamedStrPtr +} + +var namedPrimitiveTypesValue = NamedPrimitiveTypes{ + String: "test", + Bool: true, + + Int: math.MinInt32, + Int8: math.MinInt8, + Int16: math.MinInt16, + Int32: math.MinInt32, + Int64: math.MinInt64, + + Uint: math.MaxUint32, + Uint8: math.MaxUint8, + Uint16: math.MaxUint16, + Uint32: math.MaxUint32, + Uint64: math.MaxUint64, + + Float32: 1.5, + Float64: math.MaxFloat64, + + Ptr: NamedStrPtr(&str), +} + +var namedPrimitiveTypesString = "{" + + `"String":"test",` + + `"Bool":true,` + + + `"Int":` + fmt.Sprint(math.MinInt32) + `,` + + `"Int8":` + fmt.Sprint(math.MinInt8) + `,` + + `"Int16":` + fmt.Sprint(math.MinInt16) + `,` + + `"Int32":` + fmt.Sprint(math.MinInt32) + `,` + + `"Int64":` + fmt.Sprint(int64(math.MinInt64)) + `,` + + + `"Uint":` + fmt.Sprint(uint32(math.MaxUint32)) + `,` + + `"Uint8":` + fmt.Sprint(math.MaxUint8) + `,` + + `"Uint16":` + fmt.Sprint(math.MaxUint16) + `,` + + `"Uint32":` + fmt.Sprint(uint32(math.MaxUint32)) + `,` + + `"Uint64":` + fmt.Sprint(uint64(math.MaxUint64)) + `,` + + + `"Float32":` + fmt.Sprint(1.5) + `,` + + `"Float64":` + fmt.Sprint(math.MaxFloat64) + `,` + + + `"Ptr":"bla",` + + `"PtrNil":null` + + "}" + +type SubStruct struct { + Value string + Value2 string + unexpored bool +} + +type SubP struct { + V string +} + +type SubStructAlias SubStruct + +type Structs struct { + SubStruct + *SubP + + Value2 int + + Sub1 SubStruct `json:"substruct"` + Sub2 *SubStruct + SubNil *SubStruct + + SubSlice []SubStruct + SubSliceNil []SubStruct + + SubPtrSlice []*SubStruct + SubPtrSliceNil []*SubStruct + + SubA1 SubStructAlias + SubA2 *SubStructAlias + + Anonymous struct { + V string + I int + } + Anonymous1 *struct { + V string + } + + AnonymousSlice []struct{ V int } + AnonymousPtrSlice []*struct{ V int } + + Slice []string + + unexported bool +} + +var structsValue = Structs{ + SubStruct: SubStruct{Value: "test"}, + SubP: &SubP{V: "subp"}, + + Value2: 5, + + Sub1: SubStruct{Value: "test1", Value2: "v"}, + Sub2: &SubStruct{Value: "test2", Value2: "v2"}, + + SubSlice: []SubStruct{ + {Value: "s1"}, + {Value: "s2"}, + }, + + SubPtrSlice: []*SubStruct{ + {Value: "p1"}, + {Value: "p2"}, + }, + + SubA1: SubStructAlias{Value: "test3", Value2: "v3"}, + SubA2: &SubStructAlias{Value: "test4", Value2: "v4"}, + + Anonymous: struct { + V string + I int + }{V: "bla", I: 5}, + + Anonymous1: &struct { + V string + }{V: "bla1"}, + + AnonymousSlice: []struct{ V int }{{1}, {2}}, + AnonymousPtrSlice: []*struct{ V int }{{3}, {4}}, + + Slice: []string{"test5", "test6"}, +} + +var structsString = "{" + + `"Value2":5,` + + + `"substruct":{"Value":"test1","Value2":"v"},` + + `"Sub2":{"Value":"test2","Value2":"v2"},` + + `"SubNil":null,` + + + `"SubSlice":[{"Value":"s1","Value2":""},{"Value":"s2","Value2":""}],` + + `"SubSliceNil":null,` + + + `"SubPtrSlice":[{"Value":"p1","Value2":""},{"Value":"p2","Value2":""}],` + + `"SubPtrSliceNil":null,` + + + `"SubA1":{"Value":"test3","Value2":"v3"},` + + `"SubA2":{"Value":"test4","Value2":"v4"},` + + + `"Anonymous":{"V":"bla","I":5},` + + `"Anonymous1":{"V":"bla1"},` + + + `"AnonymousSlice":[{"V":1},{"V":2}],` + + `"AnonymousPtrSlice":[{"V":3},{"V":4}],` + + + `"Slice":["test5","test6"],` + + + // Embedded fields go last. + `"V":"subp",` + + `"Value":"test"` + + "}" + +type OmitEmpty struct { + // NOTE: first field is empty to test comma printing. + + StrE, StrNE string `json:",omitempty"` + PtrE, PtrNE *string `json:",omitempty"` + + IntNE int `json:"intField,omitempty"` + IntE int `json:",omitempty"` + + // NOTE: omitempty has no effect on non-pointer struct fields. + SubE, SubNE SubStruct `json:",omitempty"` + SubPE, SubPNE *SubStruct `json:",omitempty"` +} + +var omitEmptyValue = OmitEmpty{ + StrNE: "str", + PtrNE: &str, + IntNE: 6, + SubNE: SubStruct{Value: "1", Value2: "2"}, + SubPNE: &SubStruct{Value: "3", Value2: "4"}, +} + +var omitEmptyString = "{" + + `"StrNE":"str",` + + `"PtrNE":"bla",` + + `"intField":6,` + + `"SubE":{"Value":"","Value2":""},` + + `"SubNE":{"Value":"1","Value2":"2"},` + + `"SubPNE":{"Value":"3","Value2":"4"}` + + "}" + +type Opts struct { + StrNull opt.String + StrEmpty opt.String + Str opt.String + StrOmitempty opt.String `json:",omitempty"` + + IntNull opt.Int + IntZero opt.Int + Int opt.Int +} + +var optsValue = Opts{ + StrEmpty: opt.OString(""), + Str: opt.OString("test"), + + IntZero: opt.OInt(0), + Int: opt.OInt(5), +} + +var optsString = `{` + + `"StrNull":null,` + + `"StrEmpty":"",` + + `"Str":"test",` + + `"IntNull":null,` + + `"IntZero":0,` + + `"Int":5` + + `}` + +type Raw struct { + Field easyjson.RawMessage + Field2 string +} + +var rawValue = Raw{ + Field: []byte(`{"a" : "b"}`), + Field2: "test", +} + +var rawString = `{` + + `"Field":{"a" : "b"},` + + `"Field2":"test"` + + `}` + +type StdMarshaler struct { + T time.Time + IP net.IP +} + +var stdMarshalerValue = StdMarshaler{ + T: time.Date(2016, 01, 02, 14, 15, 10, 0, time.UTC), + IP: net.IPv4(192, 168, 0, 1), +} +var stdMarshalerString = `{` + + `"T":"2016-01-02T14:15:10Z",` + + `"IP":"192.168.0.1"` + + `}` + +type UserMarshaler struct { + V vMarshaler + T tMarshaler +} + +type vMarshaler net.IP + +func (v vMarshaler) MarshalJSON() ([]byte, error) { + return []byte(`"0::0"`), nil +} + +func (v *vMarshaler) UnmarshalJSON([]byte) error { + *v = vMarshaler(net.IPv6zero) + return nil +} + +type tMarshaler net.IP + +func (v tMarshaler) MarshalText() ([]byte, error) { + return []byte(`[0::0]`), nil +} + +func (v *tMarshaler) UnmarshalText([]byte) error { + *v = tMarshaler(net.IPv6zero) + return nil +} + +var userMarshalerValue = UserMarshaler{ + V: vMarshaler(net.IPv6zero), + T: tMarshaler(net.IPv6zero), +} +var userMarshalerString = `{` + + `"V":"0::0",` + + `"T":"[0::0]"` + + `}` + +type unexportedStruct struct { + Value string +} + +var unexportedStructValue = unexportedStruct{"test"} +var unexportedStructString = `{"Value":"test"}` + +type ExcludedField struct { + Process bool `json:"process"` + DoNotProcess bool `json:"-"` + DoNotProcess1 bool `json:"-"` +} + +var excludedFieldValue = ExcludedField{ + Process: true, + DoNotProcess: false, + DoNotProcess1: false, +} +var excludedFieldString = `{"process":true}` + +type Slices struct { + ByteSlice []byte + EmptyByteSlice []byte + NilByteSlice []byte + IntSlice []int + EmptyIntSlice []int + NilIntSlice []int +} + +var sliceValue = Slices{ + ByteSlice: []byte("abc"), + EmptyByteSlice: []byte{}, + NilByteSlice: []byte(nil), + IntSlice: []int{1, 2, 3, 4, 5}, + EmptyIntSlice: []int{}, + NilIntSlice: []int(nil), +} + +var sliceString = `{` + + `"ByteSlice":"YWJj",` + + `"EmptyByteSlice":"",` + + `"NilByteSlice":null,` + + `"IntSlice":[1,2,3,4,5],` + + `"EmptyIntSlice":[],` + + `"NilIntSlice":null` + + `}` + +type Arrays struct { + ByteArray [3]byte + EmptyByteArray [0]byte + IntArray [5]int + EmptyIntArray [0]int +} + +var arrayValue = Arrays{ + ByteArray: [3]byte{'a', 'b', 'c'}, + EmptyByteArray: [0]byte{}, + IntArray: [5]int{1, 2, 3, 4, 5}, + EmptyIntArray: [0]int{}, +} + +var arrayString = `{` + + `"ByteArray":"YWJj",` + + `"EmptyByteArray":"",` + + `"IntArray":[1,2,3,4,5],` + + `"EmptyIntArray":[]` + + `}` + +var arrayOverflowString = `{` + + `"ByteArray":"YWJjbnNk",` + + `"EmptyByteArray":"YWJj",` + + `"IntArray":[1,2,3,4,5,6],` + + `"EmptyIntArray":[7,8]` + + `}` + +var arrayUnderflowValue = Arrays{ + ByteArray: [3]byte{'x', 0, 0}, + EmptyByteArray: [0]byte{}, + IntArray: [5]int{1, 2, 0, 0, 0}, + EmptyIntArray: [0]int{}, +} + +var arrayUnderflowString = `{` + + `"ByteArray":"eA==",` + + `"IntArray":[1,2]` + + `}` + +type Str string + +type Maps struct { + Map map[string]string + InterfaceMap map[string]interface{} + NilMap map[string]string + + CustomMap map[Str]Str +} + +var mapsValue = Maps{ + Map: map[string]string{"A": "b"}, // only one item since map iteration is randomized + InterfaceMap: map[string]interface{}{"G": float64(1)}, + + CustomMap: map[Str]Str{"c": "d"}, +} + +var mapsString = `{` + + `"Map":{"A":"b"},` + + `"InterfaceMap":{"G":1},` + + `"NilMap":null,` + + `"CustomMap":{"c":"d"}` + + `}` + +type NamedSlice []Str +type NamedMap map[Str]Str + +type DeepNest struct { + SliceMap map[Str][]Str + SliceMap1 map[Str][]Str + SliceMap2 map[Str][]Str + NamedSliceMap map[Str]NamedSlice + NamedMapMap map[Str]NamedMap + MapSlice []map[Str]Str + NamedSliceSlice []NamedSlice + NamedMapSlice []NamedMap + NamedStringSlice []NamedString +} + +var deepNestValue = DeepNest{ + SliceMap: map[Str][]Str{ + "testSliceMap": []Str{ + "0", + "1", + }, + }, + SliceMap1: map[Str][]Str{ + "testSliceMap1": []Str(nil), + }, + SliceMap2: map[Str][]Str{ + "testSliceMap2": []Str{}, + }, + NamedSliceMap: map[Str]NamedSlice{ + "testNamedSliceMap": NamedSlice{ + "2", + "3", + }, + }, + NamedMapMap: map[Str]NamedMap{ + "testNamedMapMap": NamedMap{ + "key1": "value1", + }, + }, + MapSlice: []map[Str]Str{ + map[Str]Str{ + "testMapSlice": "someValue", + }, + }, + NamedSliceSlice: []NamedSlice{ + NamedSlice{ + "someValue1", + "someValue2", + }, + NamedSlice{ + "someValue3", + "someValue4", + }, + }, + NamedMapSlice: []NamedMap{ + NamedMap{ + "key2": "value2", + }, + NamedMap{ + "key3": "value3", + }, + }, + NamedStringSlice: []NamedString{ + "value4", "value5", + }, +} + +var deepNestString = `{` + + `"SliceMap":{` + + `"testSliceMap":["0","1"]` + + `},` + + `"SliceMap1":{` + + `"testSliceMap1":null` + + `},` + + `"SliceMap2":{` + + `"testSliceMap2":[]` + + `},` + + `"NamedSliceMap":{` + + `"testNamedSliceMap":["2","3"]` + + `},` + + `"NamedMapMap":{` + + `"testNamedMapMap":{"key1":"value1"}` + + `},` + + `"MapSlice":[` + + `{"testMapSlice":"someValue"}` + + `],` + + `"NamedSliceSlice":[` + + `["someValue1","someValue2"],` + + `["someValue3","someValue4"]` + + `],` + + `"NamedMapSlice":[` + + `{"key2":"value2"},` + + `{"key3":"value3"}` + + `],` + + `"NamedStringSlice":["value4","value5"]` + + `}` + +//easyjson:json +type Ints []int + +var IntsValue = Ints{1, 2, 3, 4, 5} + +var IntsString = `[1,2,3,4,5]` + +//easyjson:json +type MapStringString map[string]string + +var mapStringStringValue = MapStringString{"a": "b"} + +var mapStringStringString = `{"a":"b"}` + +type RequiredOptionalStruct struct { + FirstName string `json:"first_name,required"` + Lastname string `json:"last_name"` +} + +//easyjson:json +type EncodingFlagsTestMap struct { + F map[string]string +} + +//easyjson:json +type EncodingFlagsTestSlice struct { + F []string +} + +type StructWithInterface struct { + Field1 int `json:"f1"` + Field2 interface{} `json:"f2"` + Field3 string `json:"f3"` +} + +type EmbeddedStruct struct { + Field1 int `json:"f1"` + Field2 string `json:"f2"` +} + +var structWithInterfaceString = `{"f1":1,"f2":{"f1":11,"f2":"22"},"f3":"3"}` +var structWithInterfaceValueFilled = StructWithInterface{1, &EmbeddedStruct{11, "22"}, "3"} + +//easyjson:json +type MapIntString map[int]string + +var mapIntStringValue = MapIntString{3: "hi"} +var mapIntStringValueString = `{"3":"hi"}` + +//easyjson:json +type MapInt32String map[int32]string + +var mapInt32StringValue = MapInt32String{-354634382: "life"} +var mapInt32StringValueString = `{"-354634382":"life"}` + +//easyjson:json +type MapInt64String map[int64]string + +var mapInt64StringValue = MapInt64String{-3546343826724305832: "life"} +var mapInt64StringValueString = `{"-3546343826724305832":"life"}` + +//easyjson:json +type MapUintString map[uint]string + +var mapUintStringValue = MapUintString{42: "life"} +var mapUintStringValueString = `{"42":"life"}` + +//easyjson:json +type MapUint32String map[uint32]string + +var mapUint32StringValue = MapUint32String{354634382: "life"} +var mapUint32StringValueString = `{"354634382":"life"}` + +//easyjson:json +type MapUint64String map[uint64]string + +var mapUint64StringValue = MapUint64String{3546343826724305832: "life"} +var mapUint64StringValueString = `{"3546343826724305832":"life"}` + +//easyjson:json +type MapUintptrString map[uintptr]string + +var mapUintptrStringValue = MapUintptrString{272679208: "obj"} +var mapUintptrStringValueString = `{"272679208":"obj"}` + +type MyInt int + +//easyjson:json +type MapMyIntString map[MyInt]string + +var mapMyIntStringValue = MapMyIntString{MyInt(42): "life"} +var mapMyIntStringValueString = `{"42":"life"}` + +//easyjson:json +type IntKeyedMapStruct struct { + Foo MapMyIntString `json:"foo"` + Bar map[int16]MapUint32String `json:"bar"` +} + +var intKeyedMapStructValue = IntKeyedMapStruct{ + Foo: mapMyIntStringValue, + Bar: map[int16]MapUint32String{32: mapUint32StringValue}, +} +var intKeyedMapStructValueString = `{` + + `"foo":{"42":"life"},` + + `"bar":{"32":{"354634382":"life"}}` + + `}` + +type IntArray [2]int + +//easyjson:json +type IntArrayStruct struct { + Pointer *IntArray `json:"pointer"` + Value IntArray `json:"value"` +} + +var intArrayStructValue = IntArrayStruct{ + Pointer: &IntArray{1, 2}, + Value: IntArray{1, 2}, +} + +var intArrayStructValueString = `{` + + `"pointer":[1,2],` + + `"value":[1,2]` + + `}` diff --git a/vendor/github.com/mailru/easyjson/tests/embedded_type.go b/vendor/github.com/mailru/easyjson/tests/embedded_type.go new file mode 100644 index 0000000..66470b6 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/tests/embedded_type.go @@ -0,0 +1,24 @@ +package tests + +//easyjson:json +type EmbeddedType struct { + EmbeddedInnerType + Inner struct { + EmbeddedInnerType + } + Field2 int +} + +type EmbeddedInnerType struct { + Field1 int +} + +var embeddedTypeValue EmbeddedType + +func init() { + embeddedTypeValue.Field1 = 1 + embeddedTypeValue.Field2 = 2 + embeddedTypeValue.Inner.Field1 = 3 +} + +var embeddedTypeValueString = `{"Inner":{"Field1":3},"Field2":2,"Field1":1}` diff --git a/vendor/github.com/mailru/easyjson/tests/errors.go b/vendor/github.com/mailru/easyjson/tests/errors.go new file mode 100644 index 0000000..14360fc --- /dev/null +++ b/vendor/github.com/mailru/easyjson/tests/errors.go @@ -0,0 +1,26 @@ +package tests + +//easyjson:json +type ErrorIntSlice []int + +//easyjson:json +type ErrorBoolSlice []bool + +//easyjson:json +type ErrorUintSlice []uint + +//easyjson:json +type ErrorStruct struct { + Int int `json:"int"` + String string `json:"string"` + Slice []int `json:"slice"` + IntSlice []int `json:"int_slice"` +} + +type ErrorNestedStruct struct { + ErrorStruct ErrorStruct `json:"error_struct"` + Int int `json:"int"` +} + +//easyjson:json +type ErrorIntMap map[uint32]string diff --git a/vendor/github.com/mailru/easyjson/tests/errors_test.go b/vendor/github.com/mailru/easyjson/tests/errors_test.go new file mode 100644 index 0000000..40fa335 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/tests/errors_test.go @@ -0,0 +1,285 @@ +package tests + +import ( + "testing" + + "github.com/mailru/easyjson/jlexer" +) + +func TestMultipleErrorsInt(t *testing.T) { + for i, test := range []struct { + Data []byte + Offsets []int + }{ + { + Data: []byte(`[1, 2, 3, "4", "5"]`), + Offsets: []int{10, 15}, + }, + { + Data: []byte(`[1, {"2":"3"}, 3, "4"]`), + Offsets: []int{4, 18}, + }, + { + Data: []byte(`[1, "2", "3", "4", "5", "6"]`), + Offsets: []int{4, 9, 14, 19, 24}, + }, + { + Data: []byte(`[1, 2, 3, 4, "5"]`), + Offsets: []int{13}, + }, + { + Data: []byte(`[{"1": "2"}]`), + Offsets: []int{1}, + }, + } { + l := jlexer.Lexer{ + Data: test.Data, + UseMultipleErrors: true, + } + + var v ErrorIntSlice + + v.UnmarshalEasyJSON(&l) + + errors := l.GetNonFatalErrors() + + if len(errors) != len(test.Offsets) { + t.Errorf("[%d] TestMultipleErrorsInt(): errornum: want: %d, got %d", i, len(test.Offsets), len(errors)) + return + } + + for ii, e := range errors { + if e.Offset != test.Offsets[ii] { + t.Errorf("[%d] TestMultipleErrorsInt(): offset[%d]: want %d, got %d", i, ii, test.Offsets[ii], e.Offset) + } + } + } +} + +func TestMultipleErrorsBool(t *testing.T) { + for i, test := range []struct { + Data []byte + Offsets []int + }{ + { + Data: []byte(`[true, false, true, false]`), + }, + { + Data: []byte(`["test", "value", "lol", "1"]`), + Offsets: []int{1, 9, 18, 25}, + }, + { + Data: []byte(`[true, 42, {"a":"b", "c":"d"}, false]`), + Offsets: []int{7, 11}, + }, + } { + l := jlexer.Lexer{ + Data: test.Data, + UseMultipleErrors: true, + } + + var v ErrorBoolSlice + v.UnmarshalEasyJSON(&l) + + errors := l.GetNonFatalErrors() + + if len(errors) != len(test.Offsets) { + t.Errorf("[%d] TestMultipleErrorsBool(): errornum: want: %d, got %d", i, len(test.Offsets), len(errors)) + return + } + for ii, e := range errors { + if e.Offset != test.Offsets[ii] { + t.Errorf("[%d] TestMultipleErrorsBool(): offset[%d]: want %d, got %d", i, ii, test.Offsets[ii], e.Offset) + } + } + } +} + +func TestMultipleErrorsUint(t *testing.T) { + for i, test := range []struct { + Data []byte + Offsets []int + }{ + { + Data: []byte(`[42, 42, 42]`), + }, + { + Data: []byte(`[17, "42", 32]`), + Offsets: []int{5}, + }, + { + Data: []byte(`["zz", "zz"]`), + Offsets: []int{1, 7}, + }, + { + Data: []byte(`[{}, 42]`), + Offsets: []int{1}, + }, + } { + l := jlexer.Lexer{ + Data: test.Data, + UseMultipleErrors: true, + } + + var v ErrorUintSlice + v.UnmarshalEasyJSON(&l) + + errors := l.GetNonFatalErrors() + + if len(errors) != len(test.Offsets) { + t.Errorf("[%d] TestMultipleErrorsUint(): errornum: want: %d, got %d", i, len(test.Offsets), len(errors)) + return + } + for ii, e := range errors { + if e.Offset != test.Offsets[ii] { + t.Errorf("[%d] TestMultipleErrorsUint(): offset[%d]: want %d, got %d", i, ii, test.Offsets[ii], e.Offset) + } + } + } +} + +func TestMultipleErrorsStruct(t *testing.T) { + for i, test := range []struct { + Data []byte + Offsets []int + }{ + { + Data: []byte(`{"string": "test", "slice":[42, 42, 42], "int_slice":[1, 2, 3]}`), + }, + { + Data: []byte(`{"string": {"test": "test"}, "slice":[42, 42, 42], "int_slice":["1", 2, 3]}`), + Offsets: []int{11, 64}, + }, + { + Data: []byte(`{"slice": [42, 42], "string": {"test": "test"}, "int_slice":["1", "2", 3]}`), + Offsets: []int{30, 61, 66}, + }, + { + Data: []byte(`{"string": "test", "slice": {}}`), + Offsets: []int{28}, + }, + { + Data: []byte(`{"slice":5, "string" : "test"}`), + Offsets: []int{9}, + }, + { + Data: []byte(`{"slice" : "test", "string" : "test"}`), + Offsets: []int{11}, + }, + { + Data: []byte(`{"slice": "", "string" : {}, "int":{}}`), + Offsets: []int{10, 25, 35}, + }, + } { + l := jlexer.Lexer{ + Data: test.Data, + UseMultipleErrors: true, + } + var v ErrorStruct + v.UnmarshalEasyJSON(&l) + + errors := l.GetNonFatalErrors() + + if len(errors) != len(test.Offsets) { + t.Errorf("[%d] TestMultipleErrorsStruct(): errornum: want: %d, got %d", i, len(test.Offsets), len(errors)) + return + } + for ii, e := range errors { + if e.Offset != test.Offsets[ii] { + t.Errorf("[%d] TestMultipleErrorsStruct(): offset[%d]: want %d, got %d", i, ii, test.Offsets[ii], e.Offset) + } + } + } +} + +func TestMultipleErrorsNestedStruct(t *testing.T) { + for i, test := range []struct { + Data []byte + Offsets []int + }{ + { + Data: []byte(`{"error_struct":{}}`), + }, + { + Data: []byte(`{"error_struct":5}`), + Offsets: []int{16}, + }, + { + Data: []byte(`{"error_struct":[]}`), + Offsets: []int{16}, + }, + { + Data: []byte(`{"error_struct":{"int":{}}}`), + Offsets: []int{23}, + }, + { + Data: []byte(`{"error_struct":{"int_slice":{}}, "int":4}`), + Offsets: []int{29}, + }, + { + Data: []byte(`{"error_struct":{"int_slice":["1", 2, "3"]}, "int":[]}`), + Offsets: []int{30, 38, 51}, + }, + } { + l := jlexer.Lexer{ + Data: test.Data, + UseMultipleErrors: true, + } + var v ErrorNestedStruct + v.UnmarshalEasyJSON(&l) + + errors := l.GetNonFatalErrors() + + if len(errors) != len(test.Offsets) { + t.Errorf("[%d] TestMultipleErrorsNestedStruct(): errornum: want: %d, got %d", i, len(test.Offsets), len(errors)) + return + } + for ii, e := range errors { + if e.Offset != test.Offsets[ii] { + t.Errorf("[%d] TestMultipleErrorsNestedStruct(): offset[%d]: want %d, got %d", i, ii, test.Offsets[ii], e.Offset) + } + } + } +} + +func TestMultipleErrorsIntMap(t *testing.T) { + for i, test := range []struct { + Data []byte + Offsets []int + }{ + { + Data: []byte(`{"a":"NumErr"}`), + Offsets: []int{1}, + }, + { + Data: []byte(`{"":"ErrSyntax"}`), + Offsets: []int{1}, + }, + { + Data: []byte(`{"a":"NumErr","33147483647":"ErrRange","-1":"ErrRange"}`), + Offsets: []int{1, 14, 39}, + }, + } { + l := jlexer.Lexer{ + Data: test.Data, + UseMultipleErrors: true, + } + + var v ErrorIntMap + + v.UnmarshalEasyJSON(&l) + + errors := l.GetNonFatalErrors() + + if len(errors) != len(test.Offsets) { + t.Errorf("[%d] TestMultipleErrorsInt(): errornum: want: %d, got %d", i, len(test.Offsets), len(errors)) + return + } + + for ii, e := range errors { + if e.Offset != test.Offsets[ii] { + t.Errorf("[%d] TestMultipleErrorsInt(): offset[%d]: want %d, got %d", i, ii, test.Offsets[ii], e.Offset) + } + } + } +} diff --git a/vendor/github.com/mailru/easyjson/tests/named_type.go b/vendor/github.com/mailru/easyjson/tests/named_type.go new file mode 100644 index 0000000..0ff8dfe --- /dev/null +++ b/vendor/github.com/mailru/easyjson/tests/named_type.go @@ -0,0 +1,22 @@ +package tests + +//easyjson:json +type NamedType struct { + Inner struct { + // easyjson is mistakenly naming the type of this field 'tests.MyString' in the generated output + // something about a named type inside an anonmymous type is triggering this bug + Field MyString `tag:"value"` + Field2 int "tag:\"value with ` in it\"" + } +} + +type MyString string + +var namedTypeValue NamedType + +func init() { + namedTypeValue.Inner.Field = "test" + namedTypeValue.Inner.Field2 = 123 +} + +var namedTypeValueString = `{"Inner":{"Field":"test","Field2":123}}` diff --git a/vendor/github.com/mailru/easyjson/tests/nested_easy.go b/vendor/github.com/mailru/easyjson/tests/nested_easy.go new file mode 100644 index 0000000..6309a49 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/tests/nested_easy.go @@ -0,0 +1,25 @@ +package tests + +import ( + "github.com/mailru/easyjson" + "github.com/mailru/easyjson/jwriter" +) + +//easyjson:json +type NestedInterfaces struct { + Value interface{} + Slice []interface{} + Map map[string]interface{} +} + +type NestedEasyMarshaler struct { + EasilyMarshaled bool +} + +var _ easyjson.Marshaler = &NestedEasyMarshaler{} + +func (i *NestedEasyMarshaler) MarshalEasyJSON(w *jwriter.Writer) { + // We use this method only to indicate that easyjson.Marshaler + // interface was really used while encoding. + i.EasilyMarshaled = true +} \ No newline at end of file diff --git a/vendor/github.com/mailru/easyjson/tests/nothing.go b/vendor/github.com/mailru/easyjson/tests/nothing.go new file mode 100644 index 0000000..35334f5 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/tests/nothing.go @@ -0,0 +1,3 @@ +package tests + +// No structs in this file diff --git a/vendor/github.com/mailru/easyjson/tests/omitempty.go b/vendor/github.com/mailru/easyjson/tests/omitempty.go new file mode 100644 index 0000000..ede5eb9 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/tests/omitempty.go @@ -0,0 +1,12 @@ +package tests + +//easyjson:json +type OmitEmptyDefault struct { + Field string + Str string + Str1 string `json:"s,!omitempty"` + Str2 string `json:",!omitempty"` +} + +var omitEmptyDefaultValue = OmitEmptyDefault{Field: "test"} +var omitEmptyDefaultString = `{"Field":"test","s":"","Str2":""}` diff --git a/vendor/github.com/mailru/easyjson/tests/opt_test.go b/vendor/github.com/mailru/easyjson/tests/opt_test.go new file mode 100644 index 0000000..bdd32aa --- /dev/null +++ b/vendor/github.com/mailru/easyjson/tests/opt_test.go @@ -0,0 +1,70 @@ +package tests + +import ( + "math" + "reflect" + "testing" + + "encoding/json" + + "github.com/mailru/easyjson/opt" +) + +// This struct type must NOT have a generated marshaler +type OptsVanilla struct { + Int opt.Int + Uint opt.Uint + + Int8 opt.Int8 + Int16 opt.Int16 + Int32 opt.Int32 + Int64 opt.Int64 + + Uint8 opt.Uint8 + Uint16 opt.Uint16 + Uint32 opt.Uint32 + Uint64 opt.Uint64 + + Float32 opt.Float32 + Float64 opt.Float64 + + Bool opt.Bool + String opt.String +} + +var optsVanillaValue = OptsVanilla{ + Int: opt.OInt(-123), + Uint: opt.OUint(123), + + Int8: opt.OInt8(math.MaxInt8), + Int16: opt.OInt16(math.MaxInt16), + Int32: opt.OInt32(math.MaxInt32), + Int64: opt.OInt64(math.MaxInt64), + + Uint8: opt.OUint8(math.MaxUint8), + Uint16: opt.OUint16(math.MaxUint16), + Uint32: opt.OUint32(math.MaxUint32), + Uint64: opt.OUint64(math.MaxUint64), + + Float32: opt.OFloat32(math.MaxFloat32), + Float64: opt.OFloat64(math.MaxFloat64), + + Bool: opt.OBool(true), + String: opt.OString("foo"), +} + +func TestOptsVanilla(t *testing.T) { + data, err := json.Marshal(optsVanillaValue) + if err != nil { + t.Errorf("Failed to marshal vanilla opts: %v", err) + } + + var ov OptsVanilla + if err := json.Unmarshal(data, &ov); err != nil { + t.Errorf("Failed to unmarshal vanilla opts: %v", err) + } + + if !reflect.DeepEqual(optsVanillaValue, ov) { + t.Errorf("Vanilla opts unmarshal returned invalid value %+v, want %+v", ov, optsVanillaValue) + } +} diff --git a/vendor/github.com/mailru/easyjson/tests/required_test.go b/vendor/github.com/mailru/easyjson/tests/required_test.go new file mode 100644 index 0000000..8cc743d --- /dev/null +++ b/vendor/github.com/mailru/easyjson/tests/required_test.go @@ -0,0 +1,28 @@ +package tests + +import ( + "fmt" + "testing" +) + +func TestRequiredField(t *testing.T) { + cases := []struct{ json, errorMessage string }{ + {`{"first_name":"Foo", "last_name": "Bar"}`, ""}, + {`{"last_name":"Bar"}`, "key 'first_name' is required"}, + {"{}", "key 'first_name' is required"}, + } + + for _, tc := range cases { + var v RequiredOptionalStruct + err := v.UnmarshalJSON([]byte(tc.json)) + if tc.errorMessage == "" { + if err != nil { + t.Errorf("%s. UnmarshalJSON didn`t expect error: %v", tc.json, err) + } + } else { + if fmt.Sprintf("%v", err) != tc.errorMessage { + t.Errorf("%s. UnmarshalJSON expected error: %v. got: %v", tc.json, tc.errorMessage, err) + } + } + } +} diff --git a/vendor/github.com/mailru/easyjson/tests/snake.go b/vendor/github.com/mailru/easyjson/tests/snake.go new file mode 100644 index 0000000..9b64f86 --- /dev/null +++ b/vendor/github.com/mailru/easyjson/tests/snake.go @@ -0,0 +1,10 @@ +package tests + +//easyjson:json +type SnakeStruct struct { + WeirdHTTPStuff bool + CustomNamedField string `json:"cUsToM"` +} + +var snakeStructValue SnakeStruct +var snakeStructString = `{"weird_http_stuff":false,"cUsToM":""}` diff --git a/vendor/github.com/mschoch/smat/.gitignore b/vendor/github.com/mschoch/smat/.gitignore new file mode 100644 index 0000000..eee8807 --- /dev/null +++ b/vendor/github.com/mschoch/smat/.gitignore @@ -0,0 +1,14 @@ +#* +*.sublime-* +*~ +.#* +.project +.settings +**/.idea/ +**/*.iml +/examples/bolt/boltsmat-fuzz.zip +/examples/bolt/workdir/ +.DS_Store +coverage.out +*.test +tags diff --git a/vendor/github.com/mschoch/smat/.travis.yml b/vendor/github.com/mschoch/smat/.travis.yml new file mode 100644 index 0000000..3c9c346 --- /dev/null +++ b/vendor/github.com/mschoch/smat/.travis.yml @@ -0,0 +1,16 @@ +sudo: false +language: go +go: +- 1.6 +script: +- go get golang.org/x/tools/cmd/cover +- go get github.com/mattn/goveralls +- go get github.com/kisielk/errcheck +- go test -v -race +- go vet +- errcheck ./... +- go test -coverprofile=profile.out -covermode=count +- goveralls -service=travis-ci -coverprofile=profile.out -repotoken $COVERALLS +notifications: + email: + - marty.schoch@gmail.com diff --git a/vendor/github.com/mschoch/smat/LICENSE b/vendor/github.com/mschoch/smat/LICENSE new file mode 100644 index 0000000..7a4a3ea --- /dev/null +++ b/vendor/github.com/mschoch/smat/LICENSE @@ -0,0 +1,202 @@ + + 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. \ No newline at end of file diff --git a/vendor/github.com/mschoch/smat/README.md b/vendor/github.com/mschoch/smat/README.md new file mode 100644 index 0000000..f5ca1c5 --- /dev/null +++ b/vendor/github.com/mschoch/smat/README.md @@ -0,0 +1,166 @@ +# smat – State Machine Assisted Testing + +The concept is simple, describe valid uses of your library as states and actions. States describe which actions are possible, and with what probability they should occur. Actions mutate the context and transition to another state. + +By doing this, two things are possible: + +1. Use [go-fuzz](https://github.com/dvyukov/go-fuzz) to find/test interesting sequences of operations on your library. + +2. Automate longevity testing of your application by performing long sequences of valid operations. + +**NOTE**: both of these can also incorporate validation logic (not just failure detection by building validation into the state machine) + +## Status + +The API is still not stable. This is brand new and we'll probably change things we don't like... + +[![Build Status](https://travis-ci.org/mschoch/smat.svg?branch=master)](https://travis-ci.org/mschoch/smat) +[![Coverage Status](https://coveralls.io/repos/github/mschoch/smat/badge.svg?branch=master)](https://coveralls.io/github/mschoch/smat?branch=master) +[![GoDoc](https://godoc.org/github.com/mschoch/smat?status.svg)](https://godoc.org/github.com/mschoch/smat) +[![codebeat badge](https://codebeat.co/badges/c3ff6180-a241-4128-97f0-fa6bf6f48752)](https://codebeat.co/projects/github-com-mschoch-smat) +[![Go Report Card](https://goreportcard.com/badge/github.com/mschoch/smat)](https://goreportcard.com/report/github.com/mschoch/smat) + +## License + +Apache 2.0 + +## How do I use it? + +### smat.Context + +Choose a structure to keep track of any state. You pass in an instance of this when you start, and it will be passed to every action when it executes. The actions may mutate this context. + +For example, consider a database library, once you open a database handle, you need to use it inside of the other actions. So you might use a structure like: + +``` +type context struct { + db *DB +} +``` + +### smat.State + +A state represents a state that your application/library can be in, and the probabilities thats certain actions should be taken. + +For example, consider a database library, in a state where the database is open, there many things you can do. Let's consider just two right now, you can set a value, or you can delete a value. + +``` +func dbOpen(next byte) smat.ActionID { + return smat.PercentExecute(next, + smat.PercentAction{50, setValue}, + smat.PercentAction{50, deleteValue}, + ) +} +``` + +This says that in the open state, there are two valid actions, 50% of the time you should set a value and 50% of the time you should delete a value. **NOTE**: these percentages are just for characterizing the test workload. + +### smat.Action + +Actions are functions that do some work, optionally mutate the context, and indicate the next state to transition to. Below we see an example action to set value in a database. + +``` +func setValueFunc(ctx smat.Context) (next smat.State, err error) { + // type assert to our custom context type + context := ctx.(*context) + // perform the operation + err = context.db.Set("k", "v") + if err != nil { + return nil, err + } + // return the new state + return dbOpen, nil +} +``` + +### smat.ActionID and smat.ActionMap + +Actions are just functions, and since we can't compare functions in Go, we need to introduce an external identifier for them. This allows us to build a bi-directional mapping which we'll take advantage of later. + +``` +const ( + setup smat.ActionID = iota + teardown + setValue + deleteValue +) + +var actionMap = smat.ActionMap{ + setup: setupFunc, + teardown: teardownFunc, + setValue: setValueFunc, + deleteValue: deleteValueFunc, +} +``` + +### smat.ActionSeq + +A common way that many users think about a library is as a sequence of actions to be performed. Using the ActionID's that we've already seen we can build up sequences of operations. + +``` + actionSeq := smat.ActionSeq{ + open, + setValue, + setValue, + setValue, + } +``` + +Notice that we build these actions using the constants we defined above, and because of this we can have a bi-directional mapping between a stream of bytes (driving the state machine) and a sequence of actions to be performed. + +## Fuzzing + +We've built a lot of pieces, lets wire it up to go-fuzz. + +``` +func Fuzz(data []byte) int { + return smat.Fuzz(&context{}, setup, teardown, actionMap, data) +} +``` + +* The first argument is an instance of context structure. +* The second argument is the ActionID of our setup function. The setup function does not consume any of the input stream and is used to initialize the context and determine the start state. +* The third argument is the teardown function. This will be called unconditionally to clean up any resources associated with the test. +* The fourth argument is the actionMap which maps all ActionIDs to Actions. +* The fifth argument is the data passed in from the go-fuzz application. + +### Generating Initial go-fuzz Corpus + +Earlier we mentioned the bi-directional mapping between Actions and the byte stream driving the state machine. We can now leverage this to build the inital go-fuzz corpus. + +Using the `ActinSeq`s we learned about earlier we can build up a list of them as: + + var actionSeqs = []smat.ActionSeq{...} + +Then, we can write them out to disk using: + +``` +for i, actionSeq := range actionSeqs { + byteSequence, err := actionSeq.ByteEncoding(&context{}, setup, teardown, actionMap) + if err != nil { + // handle error + } + os.MkdirAll("workdir/corpus", 0700) + ioutil.WriteFile(fmt.Sprintf("workdir/corpus/%d", i), byteSequence, 0600) +} +``` + +You can then either put this into a test case or a main application depending on your needs. + +## Longevity Testing + +Fuzzing is great, but most of your corpus is likely to be shorter meaningful sequences. And go-fuzz works to find shortest sequences that cause problems, but sometimes you actually want to explore longer sequences that appear to go-fuzz as not triggering additional code coverage. + +For these cases we have another helper you can use: + +``` + Longevity(ctx, setup, teardown, actionMap, 0, closeChan) +``` + +The first four arguments are the same, the last two are: +* random seed used to ensure repeatable tests +* closeChan (chan struct{}) - close this channel if you want the function to stop and return ErrClosed, otherwise it will run forever + +## Examples + +See the examples directory for a working example that tests some BoltDB functionality. diff --git a/vendor/github.com/mschoch/smat/actionseq.go b/vendor/github.com/mschoch/smat/actionseq.go new file mode 100644 index 0000000..6c8297f --- /dev/null +++ b/vendor/github.com/mschoch/smat/actionseq.go @@ -0,0 +1,61 @@ +// Copyright (c) 2016 Marty Schoch + +// 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 smat + +// ActionSeq represents a sequence of actions, used for populating a corpus +// of byte sequences for the corresponding fuzz tests +type ActionSeq []ActionID + +// ByteEncoding runs the FSM to produce a byte sequence to trigger the +// desired action +func (a ActionSeq) ByteEncoding(ctx Context, setup, teardown ActionID, actionMap ActionMap) ([]byte, error) { + setupFunc, teardownFunc, err := actionMap.findSetupTeardown(setup, teardown) + if err != nil { + return nil, err + } + state, err := setupFunc(ctx) + if err != nil { + return nil, err + } + defer func() { + _, _ = teardownFunc(ctx) + }() + + var rv []byte + for _, actionID := range a { + b, err := probeStateForAction(state, actionID) + if err != nil { + return nil, err + } + rv = append(rv, b) + action, ok := actionMap[actionID] + if !ok { + continue + } + state, err = action(ctx) + if err != nil { + return nil, err + } + } + return rv, nil +} + +func probeStateForAction(state State, actionID ActionID) (byte, error) { + for i := 0; i < 256; i++ { + nextActionID := state(byte(i)) + if nextActionID == actionID { + return byte(i), nil + } + } + return 0, ErrActionNotPossible +} diff --git a/vendor/github.com/mschoch/smat/actionseq_test.go b/vendor/github.com/mschoch/smat/actionseq_test.go new file mode 100644 index 0000000..dbd1a2c --- /dev/null +++ b/vendor/github.com/mschoch/smat/actionseq_test.go @@ -0,0 +1,121 @@ +// Copyright (c) 2016 Marty Schoch + +// 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 smat + +import ( + "reflect" + "testing" +) + +func TestByteEncoding(t *testing.T) { + var actionMap = ActionMap{ + setup: setupAction, + teardown: teardownAction, + action1: action1Action, + action2: action2Action, + } + + tests := []struct { + actionSeq ActionSeq + expected []byte + err error + }{ + { + actionSeq: ActionSeq{ + action1, + action2, + action1, + action2, + }, + expected: []byte{0, 129, 0, 129}, + }, + { + actionSeq: ActionSeq{ + action1, + action2, + errExpected, + }, + err: ErrActionNotPossible, + }, + } + + for _, test := range tests { + ctx := &testContext{t: t} + rv, err := test.actionSeq.ByteEncoding(ctx, setup, teardown, actionMap) + if err != test.err { + t.Errorf("expected err: %v got: %v", test.err, err) + } + if !reflect.DeepEqual(rv, test.expected) { + t.Errorf("expected: %v, got %v", test.expected, rv) + } + } +} + +func TestByteEncodingErrors(t *testing.T) { + var actionMap = ActionMap{ + setup: setupAction, + teardown: teardownAction, + errExpected: errExpectedAction, + setupToErr: setupToErrAction, + setupToNop: setupToNopAction, + } + + actionSeq := ActionSeq{ + action1, + action2, + action1, + action2, + } + + // setup missing + _, err := actionSeq.ByteEncoding(nil, -1, teardown, actionMap) + if err != ErrSetupMissing { + t.Errorf("expected ErrSetupMissing, got %v", err) + } + // setup error + _, err = actionSeq.ByteEncoding(nil, errExpected, teardown, actionMap) + if err != errExpectedErr { + t.Errorf("expected errExpectedErr, got %v", err) + } + // err in action + ctx := &testContext{t: t} + actionSeq = ActionSeq{ + errExpected, + } + _, err = actionSeq.ByteEncoding(ctx, setupToErr, teardown, actionMap) + if err != errExpectedErr { + t.Errorf("expected errExpectedErr, got %v", err) + } +} + +func TestByteEncodingNop(t *testing.T) { + + var actionMap = ActionMap{ + teardown: teardownAction, + setupToNop: setupToNopAction, + } + + // nop in actions + ctx := &testContext{t: t} + actionSeq := ActionSeq{ + NopAction, + } + rv, err := actionSeq.ByteEncoding(ctx, setupToNop, teardown, actionMap) + if err != nil { + t.Fatalf("expected no err, got: %v", err) + } + expected := []byte{232} + if !reflect.DeepEqual(rv, expected) { + t.Errorf("expected: %v, got %v", expected, rv) + } +} diff --git a/vendor/github.com/mschoch/smat/examples/bolt/README.md b/vendor/github.com/mschoch/smat/examples/bolt/README.md new file mode 100644 index 0000000..9ade808 --- /dev/null +++ b/vendor/github.com/mschoch/smat/examples/bolt/README.md @@ -0,0 +1,33 @@ +# boltsmat + +An example project, showing how you can use [smat](https://github.com/mschoch/smat) to test [Bolt](https://github.com/boltdb/bolt). + +## Prerequisites + + $ go get github.com/dvyukov/go-fuzz/go-fuzz + $ go get github.com/dvyukov/go-fuzz/go-fuzz-build + +## Steps + +1. Generate initial fuzz corpus: +``` + $ go test -tags=gofuzz -run=TestGenerateFuzzData +``` + +2. Build go-fuzz test program with instrumentation: +``` + $ go-fuzz-build github.com/mschoch/smat/examples/bolt +``` + +3. Run go-fuzz: +``` + $ go-fuzz -bin=./boltsmat-fuzz.zip -workdir=workdir/ -timeout=60 +``` + +### If you find a crasher... + +You can copy the contents of the .output file provided by go-fuzz, and paste it into the `crasher` variable of the `TestCrasher` function in crash_test.go. Then run: + + $ go test -v -run=TestCrasher + +This will reproduce the crash with additional logging of the state machine turned on. diff --git a/vendor/github.com/mschoch/smat/examples/bolt/boltsmat.go b/vendor/github.com/mschoch/smat/examples/bolt/boltsmat.go new file mode 100644 index 0000000..1c95c7b --- /dev/null +++ b/vendor/github.com/mschoch/smat/examples/bolt/boltsmat.go @@ -0,0 +1,189 @@ +// Copyright (c) 2016 Marty Schoch + +// 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 boltsmat + +import ( + "fmt" + "io/ioutil" + "math/rand" + "os" + + "github.com/boltdb/bolt" + "github.com/mschoch/smat" +) + +// Fuzz using state machine driven by byte stream +func Fuzz(data []byte) int { + return smat.Fuzz(&context{}, setup, teardown, actionMap, data) +} + +// Context +type context struct { + path string + db *bolt.DB + tx *bolt.Tx + bucket *bolt.Bucket +} + +// *** States *** + +func dbOpen(next byte) smat.ActionID { + return smat.PercentExecute(next, + smat.PercentAction{10, closeReopen}, + smat.PercentAction{90, startWriteTx}, + ) +} + +func writeTxOpen(next byte) smat.ActionID { + return smat.PercentExecute(next, + smat.PercentAction{30, setRandom}, + smat.PercentAction{30, deleteRandom}, + smat.PercentAction{30, commitTx}, + smat.PercentAction{10, rollbackTx}, + ) +} + +// *** Actions *** +const ( + setup smat.ActionID = iota + teardown + closeReopen + startWriteTx + setRandom + deleteRandom + commitTx + rollbackTx +) + +var actionMap = smat.ActionMap{ + setup: setupFunc, + teardown: teardownFunc, + closeReopen: closeReopenFunc, + startWriteTx: startWriteTxFunc, + setRandom: setRandomFunc, + deleteRandom: deleteRandomFunc, + commitTx: commitTxFunc, + rollbackTx: rollbackTxFunc, +} + +func setupFunc(ctx smat.Context) (next smat.State, err error) { + context := ctx.(*context) + context.path, err = ioutil.TempDir("", "cellar") + if err != nil { + return nil, err + } + context.path += string(os.PathSeparator) + "fuzz.db" + context.db, err = bolt.Open(context.path, 0600, nil) + if err != nil { + return nil, err + } + return dbOpen, nil +} + +func teardownFunc(ctx smat.Context) (next smat.State, err error) { + context := ctx.(*context) + if context.tx != nil { + _ = context.tx.Rollback() + context.tx = nil + } + if context.db != nil { + _ = context.db.Close() + context.db = nil + } + _ = os.RemoveAll(context.path) + return nil, nil +} + +func closeReopenFunc(ctx smat.Context) (next smat.State, err error) { + context := ctx.(*context) + err = context.db.Close() + if err != nil { + return nil, err + } + context.db, err = bolt.Open(context.path, 0600, nil) + if err != nil { + return nil, err + } + return dbOpen, nil +} + +func startWriteTxFunc(ctx smat.Context) (next smat.State, err error) { + context := ctx.(*context) + context.tx, err = context.db.Begin(true) + if err != nil { + return nil, err + } + return writeTxOpen, nil +} + +func setRandomFunc(ctx smat.Context) (next smat.State, err error) { + context := ctx.(*context) + if context.bucket == nil { + context.bucket, err = context.tx.CreateBucketIfNotExists([]byte("default")) + if err != nil { + return nil, err + } + } + err = context.bucket.Put(randomKey(), randomVal()) + if err != nil { + return nil, err + } + return writeTxOpen, nil +} + +func deleteRandomFunc(ctx smat.Context) (next smat.State, err error) { + context := ctx.(*context) + if context.bucket == nil { + context.bucket, err = context.tx.CreateBucketIfNotExists([]byte("default")) + if err != nil { + return nil, err + } + } + err = context.bucket.Delete(randomKey()) + if err != nil { + return nil, err + } + return writeTxOpen, nil +} + +func commitTxFunc(ctx smat.Context) (next smat.State, err error) { + context := ctx.(*context) + err = context.tx.Commit() + if err != nil { + return nil, err + } + context.tx = nil + context.bucket = nil + return dbOpen, nil +} + +func rollbackTxFunc(ctx smat.Context) (next smat.State, err error) { + context := ctx.(*context) + err = context.tx.Rollback() + if err != nil { + return nil, err + } + context.tx = nil + context.bucket = nil + return dbOpen, nil +} + +func randomKey() []byte { + num := rand.Int63() + return []byte(fmt.Sprintf("k%016x", num)) +} + +func randomVal() []byte { + num := rand.Int63() + return []byte(fmt.Sprintf("v%016x", num)) +} diff --git a/vendor/github.com/mschoch/smat/examples/bolt/crash_test.go b/vendor/github.com/mschoch/smat/examples/bolt/crash_test.go new file mode 100644 index 0000000..a8efa61 --- /dev/null +++ b/vendor/github.com/mschoch/smat/examples/bolt/crash_test.go @@ -0,0 +1,39 @@ +// Copyright (c) 2016 Marty Schoch + +// 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 boltsmat + +import ( + "log" + "os" + "testing" + + "github.com/mschoch/smat" +) + +func TestCrasher(t *testing.T) { + // paste in your crash here: + crasher := []byte("N\x00\xcb���\n\xef\x1a\x00\xbd0N\xb9" + + "a\xaf@\xee\x1e\xd748\xc7\xe9\xed\x02\xfe\xfb\x02\x00\xbd\xbf0N" + + "\xb9a\xaf@\xee\x1e\xd748\xc7\xe9\xed\x02\xfe\xfbM\xfe\xbd\xbf\xef" + + "\xbd\xbfソ\xef\xbd6379788709725" + + "605625\xbfソ\xef\xf6\xfe\xf6N\xafN\xf6N\x9b" + + "J\x88\xac\xd5�\xbf\xbd`�N\xb9NN\xa3\xe2\xd6" + + "\x11\x8d\x15\xd5ǵ\xc7\xef\xbfソ\xef\xbd679709" + + "71251601625\xbfソ\xef\xf6\xfe\xf6N" + + "\xafN\xf6N\x9bJ\x88\xac\xd5뿽\xbf\xbd`\xef\xbf\xcaN\xb9" + + "NN\xa3\xe2\xd6\x11\xd5ǵ") + // turn on logger + smat.Logger = log.New(os.Stderr, "smat ", log.LstdFlags) + // fuzz the crasher input + smat.Fuzz(&context{}, setup, teardown, actionMap, crasher) +} diff --git a/vendor/github.com/mschoch/smat/examples/bolt/fuzzdata_test.go b/vendor/github.com/mschoch/smat/examples/bolt/fuzzdata_test.go new file mode 100644 index 0000000..45c21f9 --- /dev/null +++ b/vendor/github.com/mschoch/smat/examples/bolt/fuzzdata_test.go @@ -0,0 +1,71 @@ +// Copyright (c) 2016 Marty Schoch + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the +// License. You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an "AS +// IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +// express or implied. See the License for the specific language +// governing permissions and limitations under the License. + +// +build gofuzz + +package boltsmat + +import ( + "fmt" + "io/ioutil" + "os" + "testing" + + "github.com/mschoch/smat" +) + +func TestGenerateFuzzData(t *testing.T) { + for i, actionSeq := range actionSeqs { + byteSequence, err := actionSeq.ByteEncoding(&context{}, setup, teardown, actionMap) + if err != nil { + t.Fatal(err) + } + os.MkdirAll("workdir/corpus", 0700) + ioutil.WriteFile(fmt.Sprintf("workdir/corpus/%d", i), byteSequence, 0600) + } +} + +var actionSeqs = []smat.ActionSeq{ + // open tx, write 5 random keys, delete 5 random keys, commit tx + { + startWriteTx, + setRandom, + setRandom, + setRandom, + setRandom, + setRandom, + deleteRandom, + deleteRandom, + deleteRandom, + deleteRandom, + deleteRandom, + commitTx, + }, + // open tx, write 5 random keys, rollback + { + startWriteTx, + setRandom, + setRandom, + setRandom, + setRandom, + setRandom, + rollbackTx, + }, + // crasher due to bug in test bug + { + startWriteTx, + setRandom, + commitTx, + startWriteTx, + setRandom, + }, +} diff --git a/vendor/github.com/mschoch/smat/smat.go b/vendor/github.com/mschoch/smat/smat.go new file mode 100644 index 0000000..f6ea497 --- /dev/null +++ b/vendor/github.com/mschoch/smat/smat.go @@ -0,0 +1,161 @@ +// Copyright (c) 2016 Marty Schoch + +// 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 smat + +import ( + "bufio" + "bytes" + "fmt" + "io" + "io/ioutil" + "log" + "math/rand" +) + +// Logger is a configurable logger used by this package +// by default output is discarded +var Logger = log.New(ioutil.Discard, "smat ", log.LstdFlags) + +// Context is a container for any user state +type Context interface{} + +// State is a function which describes which action to perform in the event +// that a particular byte is seen +type State func(next byte) ActionID + +// PercentAction describes the frequency with which an action should occur +// for example: Action{Percent:10, Action:DonateMoney} means that 10% of +// the time you should donate money. +type PercentAction struct { + Percent int + Action ActionID +} + +// Action is any function which returns the next state to transition to +// it can optionally mutate the provided context object +// if any error occurs, it may return an error which will abort execution +type Action func(Context) (State, error) + +// ActionID is a unique identifier for an action +type ActionID int + +// NopAction does nothing and simply continues to the next input +var NopAction ActionID = -1 + +// ActionMap is a mapping form ActionID to Action +type ActionMap map[ActionID]Action + +func (a ActionMap) findSetupTeardown(setup, teardown ActionID) (Action, Action, error) { + setupFunc, ok := a[setup] + if !ok { + return nil, nil, ErrSetupMissing + } + teardownFunc, ok := a[teardown] + if !ok { + return nil, nil, ErrTeardownMissing + } + return setupFunc, teardownFunc, nil +} + +// Fuzz runs the fuzzing state machine with the provided context +// first, the setup action is executed unconditionally +// the start state is determined by this action +// actionMap is a lookup table for all actions +// the data byte slice determines all future state transitions +// finally, the teardown action is executed unconditionally for cleanup +func Fuzz(ctx Context, setup, teardown ActionID, actionMap ActionMap, data []byte) int { + reader := bytes.NewReader(data) + err := runReader(ctx, setup, teardown, actionMap, reader, nil) + if err != nil { + panic(err) + } + return 1 +} + +// Longevity runs the state machine with the provided context +// first, the setup action is executed unconditionally +// the start state is determined by this action +// actionMap is a lookup table for all actions +// random bytes are generated to determine all future state transitions +// finally, the teardown action is executed unconditionally for cleanup +func Longevity(ctx Context, setup, teardown ActionID, actionMap ActionMap, seed int64, closeChan chan struct{}) error { + source := rand.NewSource(seed) + return runReader(ctx, setup, teardown, actionMap, rand.New(source), closeChan) +} + +var ( + // ErrSetupMissing is returned when the setup action cannot be found + ErrSetupMissing = fmt.Errorf("setup action missing") + // ErrTeardownMissing is returned when the teardown action cannot be found + ErrTeardownMissing = fmt.Errorf("teardown action missing") + // ErrClosed is returned when the closeChan was closed to cancel the op + ErrClosed = fmt.Errorf("closed") + // ErrActionNotPossible is returned when an action is encountered in a + // FuzzCase that is not possible in the current state + ErrActionNotPossible = fmt.Errorf("action not possible in state") +) + +func runReader(ctx Context, setup, teardown ActionID, actionMap ActionMap, r io.Reader, closeChan chan struct{}) error { + setupFunc, teardownFunc, err := actionMap.findSetupTeardown(setup, teardown) + if err != nil { + return err + } + Logger.Printf("invoking setup action") + state, err := setupFunc(ctx) + if err != nil { + return err + } + defer func() { + Logger.Printf("invoking teardown action") + _, _ = teardownFunc(ctx) + }() + + reader := bufio.NewReader(r) + for next, err := reader.ReadByte(); err == nil; next, err = reader.ReadByte() { + select { + case <-closeChan: + return ErrClosed + default: + actionID := state(next) + action, ok := actionMap[actionID] + if !ok { + Logger.Printf("no such action defined, continuing") + continue + } + Logger.Printf("invoking action - %d", actionID) + state, err = action(ctx) + if err != nil { + Logger.Printf("it was action %d that returned err %v", actionID, err) + return err + } + } + } + return err +} + +// PercentExecute interprets the next byte as a random value and normalizes it +// to values 0-99, it then looks to see which action should be execued based +// on the action distributions +func PercentExecute(next byte, pas ...PercentAction) ActionID { + percent := int(99 * int(next) / 255) + + sofar := 0 + for _, pa := range pas { + sofar = sofar + pa.Percent + if percent < sofar { + return pa.Action + } + + } + return NopAction +} diff --git a/vendor/github.com/mschoch/smat/smat_test.go b/vendor/github.com/mschoch/smat/smat_test.go new file mode 100644 index 0000000..40a3774 --- /dev/null +++ b/vendor/github.com/mschoch/smat/smat_test.go @@ -0,0 +1,275 @@ +// Copyright (c) 2016 Marty Schoch + +// 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 smat + +import ( + "bytes" + "fmt" + "sync" + "testing" + "time" +) + +type testContext struct { + t *testing.T + setupFired bool + teardownFired bool + action1Fired bool + action2Fired bool + count int +} + +const ( + setup ActionID = iota + teardown + action1 + action2 + errExpected + setupToNop + setupToErr +) + +func state1(next byte) ActionID { + return PercentExecute(next, + PercentAction{Percent: 50, Action: action1}, + PercentAction{Percent: 50, Action: action2}, + ) +} + +func stateToErr(next byte) ActionID { + return PercentExecute(next, + PercentAction{Percent: 100, Action: errExpected}) +} + +func stateNop(next byte) ActionID { + return PercentExecute(next, + PercentAction{Percent: 90, Action: action1}) +} + +func setupAction(ctx Context) (next State, err error) { + context := ctx.(*testContext) + context.setupFired = true + return state1, nil +} + +func setupToErrAction(ctx Context) (next State, err error) { + return stateToErr, nil +} + +func setupToNopAction(ctx Context) (next State, err error) { + return stateNop, nil +} + +func teardownAction(ctx Context) (next State, err error) { + context := ctx.(*testContext) + context.teardownFired = true + return state1, nil +} + +func action1Action(ctx Context) (next State, err error) { + context := ctx.(*testContext) + context.action1Fired = true + + return state1, nil +} + +func action2Action(ctx Context) (next State, err error) { + context := ctx.(*testContext) + context.action2Fired = true + context.count++ + return state1, nil +} + +var errExpectedErr = fmt.Errorf("expected") + +func errExpectedAction(ctx Context) (next State, err error) { + return nil, errExpectedErr +} + +func TestRunMachine(t *testing.T) { + + var actionMap = ActionMap{ + setup: setupAction, + teardown: teardownAction, + action1: action1Action, + action2: action2Action, + } + + ctx := &testContext{t: t} + err := runReader(ctx, setup, teardown, actionMap, bytes.NewReader([]byte{0, 255}), nil) + if err != nil { + t.Fatalf("err running reader: %v", err) + } + + if !ctx.setupFired { + t.Errorf("expected setup to happen, did not") + } + if !ctx.teardownFired { + t.Errorf("expected teardown to happen, did not") + } + if !ctx.action1Fired { + t.Errorf("expected action1 to happen, did not") + } + if !ctx.action2Fired { + t.Errorf("expected action2 to happen, did not") + } +} + +func TestRunMachineErrors(t *testing.T) { + var actionMap = ActionMap{ + setup: setupAction, + teardown: teardownAction, + errExpected: errExpectedAction, + setupToErr: setupToErrAction, + } + // setup missing + err := runReader(nil, -1, teardown, actionMap, bytes.NewReader([]byte{}), nil) + if err != ErrSetupMissing { + t.Errorf("expected ErrSetupMissing, got %v", err) + } + // teardown missing + err = runReader(nil, setup, -1, actionMap, bytes.NewReader([]byte{}), nil) + if err != ErrTeardownMissing { + t.Errorf("expected ErrTeardownMissing, got %v", err) + } + // setup error + err = runReader(nil, errExpected, teardown, actionMap, bytes.NewReader([]byte{}), nil) + if err != errExpectedErr { + t.Errorf("expected errExpectedErr, got %v", err) + } + // err in action + ctx := &testContext{t: t} + err = runReader(ctx, setupToErr, teardown, actionMap, bytes.NewReader([]byte{0}), nil) + if err != errExpectedErr { + t.Errorf("expected errExpectedErr, got %v", err) + } + +} + +func TestRunMachineWithNop(t *testing.T) { + + var actionMap = ActionMap{ + setupToNop: setupToNopAction, + teardown: teardownAction, + action1: action1Action, + } + + ctx := &testContext{t: t} + // first go to nop, then to action1 + err := runReader(ctx, setupToNop, teardown, actionMap, bytes.NewReader([]byte{255, 0}), nil) + if err != nil { + t.Errorf("expected no err, got %v", err) + } + + if !ctx.action1Fired { + t.Errorf("expected action1 to happen, did not") + } + +} + +func TestFuzz(t *testing.T) { + + var actionMap = ActionMap{ + setup: setupAction, + teardown: teardownAction, + action1: action1Action, + action2: action2Action, + } + + ctx := &testContext{t: t} + res := Fuzz(ctx, setup, teardown, actionMap, []byte{0, 255}) + if res != 1 { + t.Errorf("expected return 1, got %d", res) + } + if !ctx.setupFired { + t.Errorf("expected setup to happen, did not") + } + if !ctx.teardownFired { + t.Errorf("expected teardown to happen, did not") + } + if !ctx.action1Fired { + t.Errorf("expected action1 to happen, did not") + } + if !ctx.action2Fired { + t.Errorf("expected action2 to happen, did not") + } +} + +func TestFuzzErr(t *testing.T) { + + sawPanic := false + + defer func() { + if sawPanic == false { + t.Errorf("expected to see panic, did not") + } + }() + + defer func() { + if r := recover(); r != nil { + sawPanic = true + } + }() + + var actionMap = ActionMap{ + setupToErr: setupToErrAction, + teardown: teardownAction, + errExpected: errExpectedAction, + } + + ctx := &testContext{t: t} + Fuzz(ctx, setupToErr, teardown, actionMap, []byte{0}) +} + +func TestLongevity(t *testing.T) { + var actionMap = ActionMap{ + setup: setupAction, + teardown: teardownAction, + action1: action1Action, + action2: action2Action, + } + + var err error + ctx := &testContext{t: t} + wg := sync.WaitGroup{} + closeChan := make(chan struct{}) + wg.Add(1) + go func() { + err = Longevity(ctx, setup, teardown, actionMap, 0, closeChan) + wg.Done() + }() + // sleep briefly + time.Sleep(1 * time.Second) + // then close + close(closeChan) + // wait for the longeivity function to return + wg.Wait() + if err != ErrClosed { + t.Errorf("expected ErrClosed, got: %v", err) + } + if !ctx.setupFired { + t.Errorf("expected setup to happen, did not") + } + if !ctx.teardownFired { + t.Errorf("expected teardown to happen, did not") + } + if !ctx.action1Fired { + t.Errorf("expected action1 to happen, did not") + } + if !ctx.action2Fired { + t.Errorf("expected action2 to happen, did not") + } + if ctx.count < 10000 { + t.Errorf("expected actions to fire a lot, but only %d", ctx.count) + } +} diff --git a/vendor/github.com/nats-io/nuid/.travis.yml b/vendor/github.com/nats-io/nuid/.travis.yml index d1024be..52be726 100644 --- a/vendor/github.com/nats-io/nuid/.travis.yml +++ b/vendor/github.com/nats-io/nuid/.travis.yml @@ -1,7 +1,8 @@ language: go sudo: false go: -- 1.5 +- 1.9.x +- 1.10.x install: - go get -t ./... diff --git a/vendor/github.com/nats-io/nuid/LICENSE b/vendor/github.com/nats-io/nuid/LICENSE index cadc3a4..261eeb9 100644 --- a/vendor/github.com/nats-io/nuid/LICENSE +++ b/vendor/github.com/nats-io/nuid/LICENSE @@ -1,21 +1,201 @@ -The MIT License (MIT) - -Copyright (c) 2012-2016 Apcera Inc. - -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. + 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/nats-io/nuid/OWNERS b/vendor/github.com/nats-io/nuid/OWNERS new file mode 100644 index 0000000..3ff17f9 --- /dev/null +++ b/vendor/github.com/nats-io/nuid/OWNERS @@ -0,0 +1,4 @@ +reviewers: + - derekcollison +approvers: + - derekcollison diff --git a/vendor/github.com/nats-io/nuid/README.md b/vendor/github.com/nats-io/nuid/README.md index 73d42e1..16d8a73 100644 --- a/vendor/github.com/nats-io/nuid/README.md +++ b/vendor/github.com/nats-io/nuid/README.md @@ -1,6 +1,6 @@ # NUID -[![License MIT](https://img.shields.io/npm/l/express.svg)](http://opensource.org/licenses/MIT) +[![License Apache 2](https://img.shields.io/badge/License-Apache2-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0) [![ReportCard](http://goreportcard.com/badge/nats-io/nuid)](http://goreportcard.com/report/nats-io/nuid) [![Build Status](https://travis-ci.org/nats-io/nuid.svg?branch=master)](http://travis-ci.org/nats-io/nuid) [![Release](https://img.shields.io/badge/release-v1.0.0-1eb0fc.svg)](https://github.com/nats-io/nuid/releases/tag/v1.0.0) @@ -35,32 +35,13 @@ NUID needs to be very fast to generate and be truly unique, all while being entr NUID uses 12 bytes of crypto generated data (entropy draining), and 10 bytes of pseudo-random sequential data that increments with a pseudo-random increment. -Total length of a NUID string is 22 bytes of base 36 ascii text, so 36^22 or -17324272922341479351919144385642496 possibilities. +Total length of a NUID string is 22 bytes of base 62 ascii text, so 62^22 or +2707803647802660400290261537185326956544 possibilities. NUID can generate identifiers as fast as 60ns, or ~16 million per second. There is an associated benchmark you can use to test performance on your own hardware. ## License -(The MIT License) - -Copyright (c) 2016 Apcera Inc. - -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. +Unless otherwise noted, the NATS source files are distributed +under the Apache Version 2.0 license found in the LICENSE file. diff --git a/vendor/github.com/nats-io/nuid/nuid.go b/vendor/github.com/nats-io/nuid/nuid.go index 1fda377..d79e9ce 100644 --- a/vendor/github.com/nats-io/nuid/nuid.go +++ b/vendor/github.com/nats-io/nuid/nuid.go @@ -1,4 +1,15 @@ -// Copyright 2016 Apcera Inc. All rights reserved. +// Copyright 2016-2018 The NATS Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // A unique identifier generator that is high performance, very fast, and tries to be entropy pool friendly. package nuid diff --git a/vendor/github.com/nats-io/nuid/nuid_test.go b/vendor/github.com/nats-io/nuid/nuid_test.go index c59677f..671a553 100644 --- a/vendor/github.com/nats-io/nuid/nuid_test.go +++ b/vendor/github.com/nats-io/nuid/nuid_test.go @@ -1,3 +1,16 @@ +// Copyright 2016-2018 The NATS Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package nuid import ( diff --git a/vendor/github.com/nats-io/nuid/unique_test.go b/vendor/github.com/nats-io/nuid/unique_test.go index 6714a33..df97901 100644 --- a/vendor/github.com/nats-io/nuid/unique_test.go +++ b/vendor/github.com/nats-io/nuid/unique_test.go @@ -1,3 +1,16 @@ +// Copyright 2016-2018 The NATS Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + // +build !race package nuid diff --git a/vendor/github.com/olivere/elastic/.gitignore b/vendor/github.com/olivere/elastic/.gitignore new file mode 100644 index 0000000..306ffbd --- /dev/null +++ b/vendor/github.com/olivere/elastic/.gitignore @@ -0,0 +1,33 @@ +# 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 + +/.vscode/ +/debug.test +/generator +/cluster-test/cluster-test +/cluster-test/*.log +/cluster-test/es-chaos-monkey +/spec +/tmp +/CHANGELOG-3.0.html + diff --git a/vendor/github.com/olivere/elastic/.gometalinter.json b/vendor/github.com/olivere/elastic/.gometalinter.json new file mode 100644 index 0000000..c244745 --- /dev/null +++ b/vendor/github.com/olivere/elastic/.gometalinter.json @@ -0,0 +1,37 @@ +{ + "Vendor": false, + "Deadline": "2m", + "Sort": ["linter", "severity", "path", "line"], + "DisableAll": true, + "Enable": [ + "deadcode", + "dupl", + "gocyclo", + "gofmt", + "goimports", + "golint", + "gosimple", + "ineffassign", + "interfacer", + "lll", + "megacheck", + "misspell", + "nakedret", + "structcheck", + "unconvert", + "unparam", + "unused", + "varcheck", + "vet" + ], + "EnableGC": true, + "WarnUnmatchedDirective": true, + "Cyclo": 24, + "LineLength": 200, + "Exclude": [ + "generator", + "spec", + "tmp", + ".*_easyjson.go" + ] +} diff --git a/vendor/github.com/olivere/elastic/.travis.yml b/vendor/github.com/olivere/elastic/.travis.yml new file mode 100644 index 0000000..2f00eb6 --- /dev/null +++ b/vendor/github.com/olivere/elastic/.travis.yml @@ -0,0 +1,15 @@ +sudo: required +language: go +script: go test -race -v . ./config +go: + - "1.9.x" + - "1.10.x" + # - tip +matrix: + allow_failures: + - go: tip +services: + - docker +before_install: + - sudo sysctl -w vm.max_map_count=262144 + - docker run -d --rm -p 9200:9200 -e "http.host=0.0.0.0" -e "transport.host=127.0.0.1" -e "bootstrap.memory_lock=true" -e "ES_JAVA_OPTS=-Xms1g -Xmx1g" docker.elastic.co/elasticsearch/elasticsearch-oss:6.2.3 elasticsearch -Enetwork.host=_local_,_site_ -Enetwork.publish_host=_local_ diff --git a/vendor/github.com/olivere/elastic/CHANGELOG-3.0.md b/vendor/github.com/olivere/elastic/CHANGELOG-3.0.md new file mode 100644 index 0000000..07f3e66 --- /dev/null +++ b/vendor/github.com/olivere/elastic/CHANGELOG-3.0.md @@ -0,0 +1,363 @@ +# Elastic 3.0 + +Elasticsearch 2.0 comes with some [breaking changes](https://www.elastic.co/guide/en/elasticsearch/reference/2.0/breaking-changes-2.0.html). You will probably need to upgrade your application and/or rewrite part of it due to those changes. + +We use that window of opportunity to also update Elastic (the Go client) from version 2.0 to 3.0. This will introduce both changes due to the Elasticsearch 2.0 update as well as changes that make Elastic cleaner by removing some old cruft. + +So, to summarize: + +1. Elastic 2.0 is compatible with Elasticsearch 1.7+ and is still actively maintained. +2. Elastic 3.0 is compatible with Elasticsearch 2.0+ and will soon become the new master branch. + +The rest of the document is a list of all changes in Elastic 3.0. + +## Pointer types + +All types have changed to be pointer types, not value types. This not only is cleaner but also simplifies the API as illustrated by the following example: + +Example for Elastic 2.0 (old): + +```go +q := elastic.NewMatchAllQuery() +res, err := elastic.Search("one").Query(&q).Do() // notice the & here +``` + +Example for Elastic 3.0 (new): + +```go +q := elastic.NewMatchAllQuery() +res, err := elastic.Search("one").Query(q).Do() // no more & +// ... which can be simplified as: +res, err := elastic.Search("one").Query(elastic.NewMatchAllQuery()).Do() +``` + +It also helps to prevent [subtle issues](https://github.com/olivere/elastic/issues/115#issuecomment-130753046). + +## Query/filter merge + +One of the biggest changes in Elasticsearch 2.0 is the [merge of queries and filters](https://www.elastic.co/guide/en/elasticsearch/reference/2.0/_query_dsl_changes.html#_queries_and_filters_merged). In Elasticsearch 1.x, you had a whole range of queries and filters that were basically identical (e.g. `term_query` and `term_filter`). + +The practical aspect of the merge is that you can now basically use queries where once you had to use filters instead. For Elastic 3.0 this means: We could remove a whole bunch of files. Yay! + +Notice that some methods still come by "filter", e.g. `PostFilter`. However, they accept a `Query` now when they used to accept a `Filter` before. + +Example for Elastic 2.0 (old): + +```go +q := elastic.NewMatchAllQuery() +f := elastic.NewTermFilter("tag", "important") +res, err := elastic.Search().Index("one").Query(&q).PostFilter(f) +``` + +Example for Elastic 3.0 (new): + +```go +q := elastic.NewMatchAllQuery() +f := elastic.NewTermQuery("tag", "important") // it's a query now! +res, err := elastic.Search().Index("one").Query(q).PostFilter(f) +``` + +## Facets are removed + +[Facets have been removed](https://www.elastic.co/guide/en/elasticsearch/reference/2.0/_removed_features.html#_facets_have_been_removed) in Elasticsearch 2.0. You need to use aggregations now. + +## Errors + +Elasticsearch 2.0 returns more information about an error in the HTTP response body. Elastic 3.0 now reads this information and makes it accessible by the consumer. + +Errors and all its details are now returned in [`Error`](https://github.com/olivere/elastic/blob/release-branch.v3/errors.go#L59). + +### HTTP Status 404 (Not Found) + +When Elasticsearch does not find an entity or an index, it generally returns HTTP status code 404. In Elastic 2.0 this was a valid result and didn't raise an error from the `Do` functions. This has now changed in Elastic 3.0. + +Starting with Elastic 3.0, there are only two types of responses considered successful. First, responses with HTTP status codes [200..299]. Second, HEAD requests which return HTTP status 404. The latter is used by Elasticsearch to e.g. check for existence of indices or documents. All other responses will return an error. + +To check for HTTP Status 404 (with non-HEAD requests), e.g. when trying to get or delete a missing document, you can use the [`IsNotFound`](https://github.com/olivere/elastic/blob/release-branch.v3/errors.go#L84) helper (see below). + +The following example illustrates how to check for a missing document in Elastic 2.0 and what has changed in 3.0. + +Example for Elastic 2.0 (old): + +```go +res, err = client.Get().Index("one").Type("tweet").Id("no-such-id").Do() +if err != nil { + // Something else went wrong (but 404 is NOT an error in Elastic 2.0) +} +if !res.Found { + // Document has not been found +} +``` + +Example for Elastic 3.0 (new): + +```go +res, err = client.Get().Index("one").Type("tweet").Id("no-such-id").Do() +if err != nil { + if elastic.IsNotFound(err) { + // Document has not been found + } else { + // Something else went wrong + } +} +``` + +### HTTP Status 408 (Timeouts) + +Elasticsearch now responds with HTTP status code 408 (Timeout) when a request fails due to a timeout. E.g. if you specify a timeout with the Cluster Health API, the HTTP response status will be 408 if the timeout is raised. See [here](https://github.com/elastic/elasticsearch/commit/fe3179d9cccb569784434b2135ca9ae13d5158d3) for the specific commit to the Cluster Health API. + +To check for HTTP Status 408, we introduced the [`IsTimeout`](https://github.com/olivere/elastic/blob/release-branch.v3/errors.go#L101) helper. + +Example for Elastic 2.0 (old): + +```go +health, err := client.ClusterHealth().WaitForStatus("yellow").Timeout("1s").Do() +if err != nil { + // ... +} +if health.TimedOut { + // We have a timeout +} +``` + +Example for Elastic 3.0 (new): + +```go +health, err := client.ClusterHealth().WaitForStatus("yellow").Timeout("1s").Do() +if elastic.IsTimeout(err) { + // We have a timeout +} +``` + +### Bulk Errors + +The error response of a bulk operation used to be a simple string in Elasticsearch 1.x. +In Elasticsearch 2.0, it returns a structured JSON object with a lot more details about the error. +These errors are now captured in an object of type [`ErrorDetails`](https://github.com/olivere/elastic/blob/release-branch.v3/errors.go#L59) which is used in [`BulkResponseItem`](https://github.com/olivere/elastic/blob/release-branch.v3/bulk.go#L206). + +### Removed specific Elastic errors + +The specific error types `ErrMissingIndex`, `ErrMissingType`, and `ErrMissingId` have been removed. They were only used by `DeleteService` and are replaced by a generic error message. + +## Numeric types + +Elastic 3.0 has settled to use `float64` everywhere. It used to be a mix of `float32` and `float64` in Elastic 2.0. E.g. all boostable queries in Elastic 3.0 now have a boost type of `float64` where it used to be `float32`. + +## Pluralization + +Some services accept zero, one or more indices or types to operate on. +E.g. in the `SearchService` accepts a list of zero, one, or more indices to +search and therefor had a func called `Index(index string)` and a func +called `Indices(indices ...string)`. + +Elastic 3.0 now only uses the singular form that, when applicable, accepts a +variadic type. E.g. in the case of the `SearchService`, you now only have +one func with the following signature: `Index(indices ...string)`. + +Notice this is only limited to `Index(...)` and `Type(...)`. There are other +services with variadic functions. These have not been changed. + +## Multiple calls to variadic functions + +Some services with variadic functions have cleared the underlying slice when +called while other services just add to the existing slice. This has now been +normalized to always add to the underlying slice. + +Example for Elastic 2.0 (old): + +```go +// Would only cleared scroll id "two" +// because ScrollId cleared the values when called multiple times +client.ClearScroll().ScrollId("one").ScrollId("two").Do() +``` + +Example for Elastic 3.0 (new): + +```go +// Now (correctly) clears both scroll id "one" and "two" +// because ScrollId no longer clears the values when called multiple times +client.ClearScroll().ScrollId("one").ScrollId("two").Do() +``` + +## Ping service requires URL + +The `Ping` service raised some issues because it is different from all +other services. If not explicitly given a URL, it always pings `127.0.0.1:9200`. + +Users expected to ping the cluster, but that is not possible as the cluster +can be a set of many nodes: So which node do we ping then? + +To make it more clear, the `Ping` function on the client now requires users +to explicitly set the URL of the node to ping. + +## Meta fields + +Many of the meta fields e.g. `_parent` or `_routing` are now +[part of the top-level of a document](https://www.elastic.co/guide/en/elasticsearch/reference/2.0/_mapping_changes.html#migration-meta-fields) +and are no longer returned as parts of the `fields` object. We had to change +larger parts of e.g. the `Reindexer` to get it to work seamlessly with Elasticsearch 2.0. + +Notice that all stored meta-fields are now [returned by default](https://www.elastic.co/guide/en/elasticsearch/reference/2.0/_crud_and_routing_changes.html#_all_stored_meta_fields_returned_by_default). + +## HasParentQuery / HasChildQuery + +`NewHasParentQuery` and `NewHasChildQuery` must now include both parent/child type and query. It is now in line with the Java API. + +Example for Elastic 2.0 (old): + +```go +allQ := elastic.NewMatchAllQuery() +q := elastic.NewHasChildFilter("tweet").Query(&allQ) +``` + +Example for Elastic 3.0 (new): + +```go +q := elastic.NewHasChildQuery("tweet", elastic.NewMatchAllQuery()) +``` + +## SetBasicAuth client option + +You can now tell Elastic to pass HTTP Basic Auth credentials with each request. In previous versions of Elastic you had to set up your own `http.Transport` to do this. This should make it more convenient to use Elastic in combination with [Shield](https://www.elastic.co/products/shield) in its [basic setup](https://www.elastic.co/guide/en/shield/current/enable-basic-auth.html). + +Example: + +```go +client, err := elastic.NewClient(elastic.SetBasicAuth("user", "secret")) +if err != nil { + log.Fatal(err) +} +``` + +## Delete-by-Query API + +The Delete-by-Query API is [a plugin now](https://www.elastic.co/guide/en/elasticsearch/reference/2.0/_removed_features.html#_delete_by_query_is_now_a_plugin). It is no longer core part of Elasticsearch. You can [install it as a plugin as described here](https://www.elastic.co/guide/en/elasticsearch/plugins/2.0/plugins-delete-by-query.html). + +Elastic 3.0 still contains the `DeleteByQueryService`, but you need to install the plugin first. If you don't install it and use `DeleteByQueryService` you will most probably get a 404. + +An older version of this document stated the following: + +> Elastic 3.0 still contains the `DeleteByQueryService` but it will fail with `ErrPluginNotFound` when the plugin is not installed. +> +> Example for Elastic 3.0 (new): +> +> ```go +> _, err := client.DeleteByQuery().Query(elastic.NewTermQuery("client", "1")).Do() +> if err == elastic.ErrPluginNotFound { +> // Delete By Query API is not available +> } +> ``` + +I have decided that this is not a good way to handle the case of a missing plugin. The main reason is that with this logic, you'd always have to check if the plugin is missing in case of an error. This is not only slow, but it also puts logic into a service where it should really be just opaque and return the response of Elasticsearch. + +If you rely on certain plugins to be installed, you should check on startup. That's where the following two helpers come into play. + +## HasPlugin and SetRequiredPlugins + +Some of the core functionality of Elasticsearch has now been moved into plugins. E.g. the Delete-by-Query API is [a plugin now](https://www.elastic.co/guide/en/elasticsearch/plugins/2.0/plugins-delete-by-query.html). + +You need to make sure to add these plugins to your Elasticsearch installation to still be able to use the `DeleteByQueryService`. You can test this now with the `HasPlugin(name string)` helper in the client. + +Example for Elastic 3.0 (new): + +```go +err, found := client.HasPlugin("delete-by-query") +if err == nil && found { + // ... Delete By Query API is available +} +``` + +To simplify this process, there is now a `SetRequiredPlugins` helper that can be passed as an option func when creating a new client. If the plugin is not installed, the client wouldn't be created in the first place. + +```go +// Will raise an error if the "delete-by-query" plugin is NOT installed +client, err := elastic.NewClient(elastic.SetRequiredPlugins("delete-by-query")) +if err != nil { + log.Fatal(err) +} +``` + +Notice that there also is a way to define [mandatory plugins](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-plugins.html#_mandatory_plugins) in the Elasticsearch configuration file. + +## Common Query has been renamed to Common Terms Query + +The `CommonQuery` has been renamed to `CommonTermsQuery` to be in line with the [Java API](https://www.elastic.co/guide/en/elasticsearch/reference/2.0/_java_api_changes.html#_query_filter_refactoring). + +## Remove `MoreLikeThis` and `MoreLikeThisField` + +The More Like This API and the More Like This Field query [have been removed](https://www.elastic.co/guide/en/elasticsearch/reference/2.0/_query_dsl_changes.html#_more_like_this) and replaced with the `MoreLikeThisQuery`. + +## Remove Filtered Query + +With the merge of queries and filters, the [filtered query became deprecated](https://www.elastic.co/guide/en/elasticsearch/reference/2.0/_query_dsl_changes.html#_literal_filtered_literal_query_and_literal_query_literal_filter_deprecated). While it is only deprecated and therefore still available in Elasticsearch 2.0, we have decided to remove it from Elastic 3.0. Why? Because we think that when you're already forced to rewrite many of your application code, it might be a good chance to get rid of things that are deprecated as well. So you might simply change your filtered query with a boolean query as [described here](https://www.elastic.co/guide/en/elasticsearch/reference/2.0/_query_dsl_changes.html#_literal_filtered_literal_query_and_literal_query_literal_filter_deprecated). + +## Remove FuzzyLikeThis and FuzzyLikeThisField + +Both have been removed from Elasticsearch 2.0 as well. + +## Remove LimitFilter + +The `limit` filter is [deprecated in Elasticsearch 2.0](https://www.elastic.co/guide/en/elasticsearch/reference/2.0/_query_dsl_changes.html#_literal_limit_literal_filter_deprecated) and becomes a no-op. Now is a good chance to remove it from your application as well. Use the `terminate_after` parameter in your search [as described here](https://www.elastic.co/guide/en/elasticsearch/reference/2.0/search-request-body.html) to achieve similar effects. + +## Remove `_cache` and `_cache_key` from filters + +Both have been [removed from Elasticsearch 2.0 as well](https://www.elastic.co/guide/en/elasticsearch/reference/2.0/_query_dsl_changes.html#_filter_auto_caching). + +## Partial fields are gone + +Partial fields are [removed in Elasticsearch 2.0](https://www.elastic.co/guide/en/elasticsearch/reference/2.0/_search_changes.html#_partial_fields) in favor of [source filtering](https://www.elastic.co/guide/en/elasticsearch/reference/2.0/search-request-source-filtering.html). + +## Scripting + +A [`Script`](https://github.com/olivere/elastic/blob/release-branch.v3/script.go) type has been added to Elastic 3.0. In Elastic 2.0, there were various places (e.g. aggregations) where you could just add the script as a string, specify the scripting language, add parameters etc. With Elastic 3.0, you should now always use the `Script` type. + +Example for Elastic 2.0 (old): + +```go +update, err := client.Update().Index("twitter").Type("tweet").Id("1"). + Script("ctx._source.retweets += num"). + ScriptParams(map[string]interface{}{"num": 1}). + Upsert(map[string]interface{}{"retweets": 0}). + Do() +``` + +Example for Elastic 3.0 (new): + +```go +update, err := client.Update().Index("twitter").Type("tweet").Id("1"). + Script(elastic.NewScript("ctx._source.retweets += num").Param("num", 1)). + Upsert(map[string]interface{}{"retweets": 0}). + Do() +``` + +## Cluster State + +The combination of `Metric(string)` and `Metrics(...string)` has been replaced by a single func with the signature `Metric(...string)`. + +## Unexported structs in response + +Services generally return a typed response from a `Do` func. Those structs are exported so that they can be passed around in your own application. In Elastic 3.0 however, we changed that (most) sub-structs are now unexported, meaning: You can only pass around the whole response, not sub-structures of it. This makes it easier for restructuring responses according to the Elasticsearch API. See [`ClusterStateResponse`](https://github.com/olivere/elastic/blob/release-branch.v3/cluster_state.go#L182) as an example. + +## Add offset to Histogram aggregation + +Histogram aggregations now have an [offset](https://github.com/elastic/elasticsearch/pull/9505) option. + +## Services + +### REST API specification + +As you might know, Elasticsearch comes with a REST API specification. The specification describes the endpoints in a JSON structure. + +Most services in Elastic predated the REST API specification. We are in the process of bringing all these services in line with the specification. Services can be generated by `go generate` (not 100% automatic though). This is an ongoing process. + +This probably doesn't mean a lot to you. However, you can now be more confident that Elastic supports all features that the REST API specification describes. + +At the same time, the file names of the services are renamed to match the REST API specification naming. + +### REST API Test Suite + +The REST API specification of Elasticsearch comes along with a test suite that official clients typically use to test for conformance. Up until now, Elastic didn't run this test suite. However, we are in the process of setting up infrastructure and tests to match this suite as well. + +This process in not completed though. + + diff --git a/vendor/github.com/olivere/elastic/CHANGELOG-5.0.md b/vendor/github.com/olivere/elastic/CHANGELOG-5.0.md new file mode 100644 index 0000000..161c6a1 --- /dev/null +++ b/vendor/github.com/olivere/elastic/CHANGELOG-5.0.md @@ -0,0 +1,195 @@ +# Changes in Elastic 5.0 + +## Enforce context.Context in PerformRequest and Do + +We enforce the usage of `context.Context` everywhere you execute a request. +You need to change all your `Do()` calls to pass a context: `Do(ctx)`. +This enables automatic request cancelation and many other patterns. + +If you don't need this, simply pass `context.TODO()` or `context.Background()`. + +## Warmers removed + +Warmers are no longer necessary and have been [removed in ES 5.0](https://www.elastic.co/guide/en/elasticsearch/reference/master/breaking_50_index_apis.html#_warmers). + +## Optimize removed + +Optimize was deprecated in ES 2.0 and has been [removed in ES 5.0](https://www.elastic.co/guide/en/elasticsearch/reference/master/breaking_50_rest_api_changes.html#_literal__optimize_literal_endpoint_removed). +Use [Force Merge](https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-forcemerge.html) instead. + +## Missing Query removed + +The `missing` query has been [removed](https://www.elastic.co/guide/en/elasticsearch/reference/master/query-dsl-exists-query.html#_literal_missing_literal_query). +Use `exists` query with `must_not` in `bool` query instead. + +## And Query removed + +The `and` query has been [removed](https://www.elastic.co/guide/en/elasticsearch/reference/master/breaking_50_search_changes.html#_deprecated_queries_removed). +Use `must` clauses in a `bool` query instead. + +## Not Query removed + +TODO Is it removed? + +## Or Query removed + +The `or` query has been [removed](https://www.elastic.co/guide/en/elasticsearch/reference/master/breaking_50_search_changes.html#_deprecated_queries_removed). +Use `should` clauses in a `bool` query instead. + +## Filtered Query removed + +The `filtered` query has been [removed](https://www.elastic.co/guide/en/elasticsearch/reference/master/breaking_50_search_changes.html#_deprecated_queries_removed). +Use `bool` query instead, which supports `filter` clauses too. + +## Limit Query removed + +The `limit` query has been [removed](https://www.elastic.co/guide/en/elasticsearch/reference/master/breaking_50_search_changes.html#_deprecated_queries_removed). +Use the `terminate_after` parameter instead. + +# Template Query removed + +The `template` query has been [deprecated](https://www.elastic.co/guide/en/elasticsearch/reference/5.x/query-dsl-template-query.html). You should use +Search Templates instead. + +We remove it from Elastic 5.0 as the 5.0 update is already a good opportunity +to get rid of old stuff. + +## `_timestamp` and `_ttl` removed + +Both of these fields were deprecated and are now [removed](https://www.elastic.co/guide/en/elasticsearch/reference/master/breaking_50_mapping_changes.html#_literal__timestamp_literal_and_literal__ttl_literal). + +## Search template Put/Delete API returns `acknowledged` only + +The response type for Put/Delete search templates has changed. +It only returns a single `acknowledged` flag now. + +## Fields has been renamed to Stored Fields + +The `fields` parameter has been renamed to `stored_fields`. +See [here](https://www.elastic.co/guide/en/elasticsearch/reference/5.x/breaking_50_search_changes.html#_literal_fields_literal_parameter). + +## Fielddatafields has been renamed to Docvaluefields + +The `fielddata_fields` parameter [has been renamed](https://www.elastic.co/guide/en/elasticsearch/reference/5.x/breaking_50_search_changes.html#_literal_fielddata_fields_literal_parameter) +to `docvalue_fields`. + +## Type exists endpoint changed + +The endpoint for checking whether a type exists has been changed from +`HEAD {index}/{type}` to `HEAD {index}/_mapping/{type}`. +See [here](https://www.elastic.co/guide/en/elasticsearch/reference/5.0/breaking_50_rest_api_changes.html#_literal_head_index_type_literal_replaced_with_literal_head_index__mapping_type_literal). + +## Refresh parameter changed + +The `?refresh` parameter previously could be a boolean value. It indicated +whether changes made by a request (e.g. by the Bulk API) should be immediately +visible in search, or not. Using `refresh=true` had the positive effect of +immediately seeing the changes when searching; the negative effect is that +it is a rather big performance hit. + +With 5.0, you now have the choice between these 3 values. + +* `"true"` - Refresh immediately +* `"false"` - Do not refresh (the default value) +* `"wait_for"` - Wait until ES made the document visible in search + +See [?refresh](https://www.elastic.co/guide/en/elasticsearch/reference/master/docs-refresh.html) in the documentation. + +Notice that `true` and `false` (the boolean values) are no longer available +now in Elastic. You must use a string instead, with one of the above values. + +## ReindexerService removed + +The `ReindexerService` was a custom solution that was started in the ES 1.x era +to automate reindexing data, from one index to another or even between clusters. + +ES 2.3 introduced its own [Reindex API](https://www.elastic.co/guide/en/elasticsearch/reference/master/docs-reindex.html) +so we're going to remove our custom solution and ask you to use the native reindexer. + +The `ReindexService` is available via `client.Reindex()` (which used to point +to the custom reindexer). + +## Delete By Query back in core + +The [Delete By Query API](https://www.elastic.co/guide/en/elasticsearch/reference/master/docs-delete-by-query.html) +was moved into a plugin in 2.0. Now its back in core with a complete rewrite based on the Bulk API. + +It has it's own endpoint at `/_delete_by_query`. + +Delete By Query, Reindex, and Update By Query are very similar under the hood. + +## Reindex, Delete By Query, and Update By Query response changed + +The response from the above APIs changed a bit. E.g. the `retries` value +used to be an `int64` and returns separate values for `bulk` and `search` now: + +``` +// Old +{ + ... + "retries": 123, + ... +} +``` + +``` +// New +{ + ... + "retries": { + "bulk": 123, + "search": 0 + }, + ... +} +``` + +## ScanService removed + +The `ScanService` is removed. Use the (new) `ScrollService` instead. + +## New ScrollService + +There was confusion around `ScanService` and `ScrollService` doing basically +the same. One was returning slices and didn't support all query details, the +other returned one document after another and wasn't safe for concurrent use. +So we merged the two and merged it into a new `ScrollService` that +removes all the problems with the older services. + +In other words: +If you used `ScanService`, switch to `ScrollService`. +If you used the old `ScrollService`, you might need to fix some things but +overall it should just work. + +Changes: +- We replaced `elastic.EOS` with `io.EOF` to indicate the "end of scroll". + +TODO Not implemented yet + +## Suggesters + +They have been [completely rewritten in ES 5.0](https://www.elastic.co/guide/en/elasticsearch/reference/master/breaking_50_suggester.html). + +Some changes: +- Suggesters no longer have an [output](https://www.elastic.co/guide/en/elasticsearch/reference/master/breaking_50_suggester.html#_simpler_completion_indexing). + +TODO Fix all structural changes in suggesters + +## Percolator + +Percolator has [changed considerably](https://www.elastic.co/guide/en/elasticsearch/reference/5.x/breaking_50_percolator.html). + +Elastic 5.0 adds the new +[Percolator Query](https://www.elastic.co/guide/en/elasticsearch/reference/5.x/query-dsl-percolate-query.html) +which can be used in combination with the new +[Percolator type](https://www.elastic.co/guide/en/elasticsearch/reference/5.x/percolator.html). + +The Percolate service is removed from Elastic 5.0. + +## Remove Consistency, add WaitForActiveShards + +The `consistency` parameter has been removed in a lot of places, e.g. the Bulk, +Index, Delete, Delete-by-Query, Reindex, Update, and Update-by-Query API. + +It has been replaced by a somewhat similar `wait_for_active_shards` parameter. +See https://github.com/elastic/elasticsearch/pull/19454. diff --git a/vendor/github.com/olivere/elastic/CHANGELOG-6.0.md b/vendor/github.com/olivere/elastic/CHANGELOG-6.0.md new file mode 100644 index 0000000..2779259 --- /dev/null +++ b/vendor/github.com/olivere/elastic/CHANGELOG-6.0.md @@ -0,0 +1,18 @@ +# Changes from 5.0 to 6.0 + +See [breaking changes](https://www.elastic.co/guide/en/elasticsearch/reference/master/breaking-changes-6.0.html). + +## _all removed + +6.0 has removed support for the `_all` field. + +## Boolean values coerced + +Only use `true` or `false` for boolean values, not `0` or `1` or `on` or `off`. + +## Single Type Indices + +Notice that 6.0 and future versions will default to single type indices, i.e. you may not use multiple types when e.g. adding an index with a mapping. + +See [here for details](https://www.elastic.co/guide/en/elasticsearch/reference/6.x/removal-of-types.html#_what_are_mapping_types). + diff --git a/vendor/github.com/olivere/elastic/CODE_OF_CONDUCT.md b/vendor/github.com/olivere/elastic/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..acefece --- /dev/null +++ b/vendor/github.com/olivere/elastic/CODE_OF_CONDUCT.md @@ -0,0 +1,46 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at oliver@eilhard.net. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/vendor/gopkg.in/olivere/elastic.v2/CONTRIBUTING.md b/vendor/github.com/olivere/elastic/CONTRIBUTING.md similarity index 100% rename from vendor/gopkg.in/olivere/elastic.v2/CONTRIBUTING.md rename to vendor/github.com/olivere/elastic/CONTRIBUTING.md diff --git a/vendor/github.com/olivere/elastic/CONTRIBUTORS b/vendor/github.com/olivere/elastic/CONTRIBUTORS new file mode 100644 index 0000000..d2083e9 --- /dev/null +++ b/vendor/github.com/olivere/elastic/CONTRIBUTORS @@ -0,0 +1,132 @@ +# This is a list of people who have contributed code +# to the Elastic repository. +# +# It is just my small "thank you" to all those that helped +# making Elastic what it is. +# +# Please keep this list sorted. + +0x6875790d0a [@huydx](https://github.com/huydx) +Adam Alix [@adamalix](https://github.com/adamalix) +Adam Weiner [@adamweiner](https://github.com/adamweiner) +Adrian Lungu [@AdrianLungu](https://github.com/AdrianLungu) +alehano [@alehano](https://github.com/alehano) +Alex [@akotlar](https://github.com/akotlar) +Alexander Sack [@asac](https://github.com/asac) +Alexandre Olivier [@aliphen](https://github.com/aliphen) +Alexey Sharov [@nizsheanez](https://github.com/nizsheanez) +AndreKR [@AndreKR](https://github.com/AndreKR) +André Bierlein [@ligustah](https://github.com/ligustah) +Andrew Dunham [@andrew-d](https://github.com/andrew-d) +Andrew Gaul [@andrewgaul](https://github.com/andrewgaul) +Andy Walker [@alaska](https://github.com/alaska) +Arquivei [@arquivei](https://github.com/arquivei) +arthurgustin [@arthurgustin](https://github.com/arthurgustin) +Benjamin Fernandes [@LotharSee](https://github.com/LotharSee) +Benjamin Zarzycki [@kf6nux](https://github.com/kf6nux) +Boris Popovschi [@Zyqsempai](https://github.com/Zyqsempai) +Braden Bassingthwaite [@bbassingthwaite-va](https://github.com/bbassingthwaite-va) +Brady Love [@bradylove](https://github.com/bradylove) +Bryan Conklin [@bmconklin](https://github.com/bmconklin) +Bruce Zhou [@brucez-isell](https://github.com/brucez-isell) +cforbes [@cforbes](https://github.com/cforbes) +Chris M [@tebriel](https://github.com/tebriel) +Chris Rice [@donutmonger](https://github.com/donutmonger) +Claudiu Olteanu [@claudiuolteanu](https://github.com/claudiuolteanu) +Christophe Courtaut [@kri5](https://github.com/kri5) +Connor Peet [@connor4312](https://github.com/connor4312) +Conrad Pankoff [@deoxxa](https://github.com/deoxxa) +Corey Scott [@corsc](https://github.com/corsc) +Daniel Barrett [@shendaras](https://github.com/shendaras) +Daniel Heckrath [@DanielHeckrath](https://github.com/DanielHeckrath) +Daniel Imfeld [@dimfeld](https://github.com/dimfeld) +Dwayne Schultz [@myshkin5](https://github.com/myshkin5) +Ellison Leão [@ellisonleao](https://github.com/ellisonleao) +Erwin [@eticzon](https://github.com/eticzon) +Eugene Egorov [@EugeneEgorov](https://github.com/EugeneEgorov) +Evan Shaw [@edsrzf](https://github.com/edsrzf) +Fanfan [@wenpos](https://github.com/wenpos) +Faolan C-P [@fcheslack](https://github.com/fcheslack) +Filip Tepper [@filiptepper](https://github.com/filiptepper) +Gaspard Douady [@plopik](https://github.com/plopik) +Gaylord Aulke [@blafasel42](https://github.com/blafasel42) +Gerhard Häring [@ghaering](https://github.com/ghaering) +Guilherme Silveira [@guilherme-santos](https://github.com/guilherme-santos) +Guillaume J. Charmes [@creack](https://github.com/creack) +Guiseppe [@gm42](https://github.com/gm42) +Han Yu [@MoonighT](https://github.com/MoonighT) +Harmen [@alicebob](https://github.com/alicebob) +Harrison Wright [@wright8191](https://github.com/wright8191) +Henry Clifford [@hcliff](https://github.com/hcliff) +Igor Dubinskiy [@idubinskiy](https://github.com/idubinskiy) +initialcontext [@initialcontext](https://github.com/initialcontext) +Isaac Saldana [@isaldana](https://github.com/isaldana) +Jack Lindamood [@cep21](https://github.com/cep21) +Jacob [@jdelgad](https://github.com/jdelgad) +Jayme Rotsaert [@jrots](https://github.com/jrots) +Jeremy Canady [@jrmycanady](https://github.com/jrmycanady) +Jim Berlage [@jimberlage](https://github.com/jimberlage) +Joe Buck [@four2five](https://github.com/four2five) +John Barker [@j16r](https://github.com/j16r) +John Goodall [@jgoodall](https://github.com/jgoodall) +John Stanford [@jxstanford](https://github.com/jxstanford) +Jonas Groenaas Drange [@semafor](https://github.com/semafor) +Josef Fröhle [@Dexus](https://github.com/Dexus) +Josh Chorlton [@jchorl](https://github.com/jchorl) +jun [@coseyo](https://github.com/coseyo) +Junpei Tsuji [@jun06t](https://github.com/jun06t) +kartlee [@kartlee](https://github.com/kartlee) +Keith Hatton [@khatton-ft](https://github.com/khatton-ft) +kel [@liketic](https://github.com/liketic) +Kenta SUZUKI [@suzuken](https://github.com/suzuken) +Kevin Mulvey [@kmulvey](https://github.com/kmulvey) +Kyle Brandt [@kylebrandt](https://github.com/kylebrandt) +Leandro Piccilli [@lpic10](https://github.com/lpic10) +M. Zulfa Achsani [@misterciput](https://github.com/misterciput) +Maciej Lisiewski [@c2h5oh](https://github.com/c2h5oh) +Mara Kim [@autochthe](https://github.com/autochthe) +Marcy Buccellato [@marcybuccellato](https://github.com/marcybuccellato) +Mark Costello [@mcos](https://github.com/mcos) +Martin Häger [@protomouse](https://github.com/protomouse) +Medhi Bechina [@mdzor](https://github.com/mdzor) +mmfrb [@mmfrb](https://github.com/mmfrb) +mnpritula [@mnpritula](https://github.com/mnpritula) +mosa [@mosasiru](https://github.com/mosasiru) +naimulhaider [@naimulhaider](https://github.com/naimulhaider) +Naoya Yoshizawa [@azihsoyn](https://github.com/azihsoyn) +navins [@ishare](https://github.com/ishare) +Naoya Tsutsumi [@tutuming](https://github.com/tutuming) +Nicholas Wolff [@nwolff](https://github.com/nwolff) +Nick K [@utrack](https://github.com/utrack) +Nick Whyte [@nickw444](https://github.com/nickw444) +Nicolae Vartolomei [@nvartolomei](https://github.com/nvartolomei) +Orne Brocaar [@brocaar](https://github.com/brocaar) +Paul [@eyeamera](https://github.com/eyeamera) +Pete C [@peteclark-ft](https://github.com/peteclark-ft) +Radoslaw Wesolowski [r--w](https://github.com/r--w) +Roman Colohanin [@zuzmic](https://github.com/zuzmic) +Ryan Schmukler [@rschmukler](https://github.com/rschmukler) +Ryan Wynn [@rwynn](https://github.com/rwynn) +Sacheendra talluri [@sacheendra](https://github.com/sacheendra) +Sean DuBois [@Sean-Der](https://github.com/Sean-Der) +Shalin LK [@shalinlk](https://github.com/shalinlk) +singham [@zhaochenxiao90](https://github.com/zhaochenxiao90) +Stephen Kubovic [@stephenkubovic](https://github.com/stephenkubovic) +Stuart Warren [@Woz](https://github.com/stuart-warren) +Sulaiman [@salajlan](https://github.com/salajlan) +Sundar [@sundarv85](https://github.com/sundarv85) +Swarlston [@Swarlston](https://github.com/Swarlston) +Take [ww24](https://github.com/ww24) +Tetsuya Morimoto [@t2y](https://github.com/t2y) +TimeEmit [@TimeEmit](https://github.com/timeemit) +TusharM [@tusharm](https://github.com/tusharm) +wangtuo [@wangtuo](https://github.com/wangtuo) +Wédney Yuri [@wedneyyuri](https://github.com/wedneyyuri) +wolfkdy [@wolfkdy](https://github.com/wolfkdy) +Wyndham Blanton [@wyndhblb](https://github.com/wyndhblb) +Yarden Bar [@ayashjorden](https://github.com/ayashjorden) +zakthomas [@zakthomas](https://github.com/zakthomas) +Yuya Kusakabe [@higebu](https://github.com/higebu) +Zach [@snowzach](https://github.com/snowzach) +zhangxin [@visaxin](https://github.com/visaxin) +@林 [@zplzpl](https://github.com/zplzpl) diff --git a/vendor/gopkg.in/olivere/elastic.v2/ISSUE_TEMPLATE.md b/vendor/github.com/olivere/elastic/ISSUE_TEMPLATE.md similarity index 82% rename from vendor/gopkg.in/olivere/elastic.v2/ISSUE_TEMPLATE.md rename to vendor/github.com/olivere/elastic/ISSUE_TEMPLATE.md index 558cd67..88d66cc 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/ISSUE_TEMPLATE.md +++ b/vendor/github.com/olivere/elastic/ISSUE_TEMPLATE.md @@ -5,6 +5,8 @@ your issue/question without further inquiry. Thank you. [ ] elastic.v2 (for Elasticsearch 1.x) [ ] elastic.v3 (for Elasticsearch 2.x) +[ ] elastic.v5 (for Elasticsearch 5.x) +[ ] elastic.v6 (for Elasticsearch 6.x) ### Please describe the expected behavior diff --git a/vendor/gopkg.in/olivere/elastic.v2/LICENSE b/vendor/github.com/olivere/elastic/LICENSE similarity index 100% rename from vendor/gopkg.in/olivere/elastic.v2/LICENSE rename to vendor/github.com/olivere/elastic/LICENSE diff --git a/vendor/github.com/olivere/elastic/README.md b/vendor/github.com/olivere/elastic/README.md new file mode 100644 index 0000000..409c136 --- /dev/null +++ b/vendor/github.com/olivere/elastic/README.md @@ -0,0 +1,396 @@ +# Elastic + +**This is a development branch that is actively being worked on. DO NOT USE IN PRODUCTION! If you want to use stable versions of Elastic, please use a dependency manager like [dep](https://github.com/golang/dep).** + +Elastic is an [Elasticsearch](http://www.elasticsearch.org/) client for the +[Go](http://www.golang.org/) programming language. + +[![Build Status](https://travis-ci.org/olivere/elastic.svg?branch=release-branch.v6)](https://travis-ci.org/olivere/elastic) +[![Godoc](http://img.shields.io/badge/godoc-reference-blue.svg?style=flat)](http://godoc.org/github.com/olivere/elastic) +[![license](http://img.shields.io/badge/license-MIT-red.svg?style=flat)](https://raw.githubusercontent.com/olivere/elastic/master/LICENSE) + +See the [wiki](https://github.com/olivere/elastic/wiki) for additional information about Elastic. + +Buy Me A Coffee + + +## Releases + +**The release branches (e.g. [`release-branch.v6`](https://github.com/olivere/elastic/tree/release-branch.v6)) +are actively being worked on and can break at any time. +If you want to use stable versions of Elastic, please use a dependency manager like [dep](https://github.com/golang/dep).** + +Here's the version matrix: + +Elasticsearch version | Elastic version | Package URL | Remarks | +----------------------|------------------|-------------|---------| +6.x                   | 6.0             | [`github.com/olivere/elastic`](https://github.com/olivere/elastic) ([source](https://github.com/olivere/elastic/tree/release-branch.v6) [doc](http://godoc.org/github.com/olivere/elastic)) | Use a dependency manager (see below). +5.x | 5.0 | [`gopkg.in/olivere/elastic.v5`](https://gopkg.in/olivere/elastic.v5) ([source](https://github.com/olivere/elastic/tree/release-branch.v5) [doc](http://godoc.org/gopkg.in/olivere/elastic.v5)) | Actively maintained. +2.x | 3.0 | [`gopkg.in/olivere/elastic.v3`](https://gopkg.in/olivere/elastic.v3) ([source](https://github.com/olivere/elastic/tree/release-branch.v3) [doc](http://godoc.org/gopkg.in/olivere/elastic.v3)) | Deprecated. Please update. +1.x | 2.0 | [`gopkg.in/olivere/elastic.v2`](https://gopkg.in/olivere/elastic.v2) ([source](https://github.com/olivere/elastic/tree/release-branch.v2) [doc](http://godoc.org/gopkg.in/olivere/elastic.v2)) | Deprecated. Please update. +0.9-1.3 | 1.0 | [`gopkg.in/olivere/elastic.v1`](https://gopkg.in/olivere/elastic.v1) ([source](https://github.com/olivere/elastic/tree/release-branch.v1) [doc](http://godoc.org/gopkg.in/olivere/elastic.v1)) | Deprecated. Please update. + +**Example:** + +You have installed Elasticsearch 6.0.0 and want to use Elastic. +As listed above, you should use Elastic 6.0. + +To use the required version of Elastic in your application, it is strongly +advised to use a tool like +[dep](https://github.com/golang/dep) +or +[Glide](https://glide.sh/) +to manage that dependency. Make sure to use a version such as `^6.0.0`. + +To use Elastic, simply import: + +```go +import "github.com/olivere/elastic" +``` + +### Elastic 6.0 + +Elastic 6.0 targets Elasticsearch 6.x which was [released on 14th November 2017](https://www.elastic.co/blog/elasticsearch-6-0-0-released). + +Notice that there are will be a lot of [breaking changes in Elasticsearch 6.0](https://www.elastic.co/guide/en/elasticsearch/reference/6.2/breaking-changes-6.0.html) +and we used this as an opportunity to [clean up and refactor Elastic](https://github.com/olivere/elastic/blob/release-branch.v6/CHANGELOG-6.0.md) +as we did in the transition from earlier versions of Elastic. + +### Elastic 5.0 + +Elastic 5.0 targets Elasticsearch 5.0.0 and later. Elasticsearch 5.0.0 was +[released on 26th October 2016](https://www.elastic.co/blog/elasticsearch-5-0-0-released). + +Notice that there are will be a lot of [breaking changes in Elasticsearch 5.0](https://www.elastic.co/guide/en/elasticsearch/reference/5.0/breaking-changes-5.0.html) +and we used this as an opportunity to [clean up and refactor Elastic](https://github.com/olivere/elastic/blob/release-branch.v5/CHANGELOG-5.0.md) +as we did in the transition from Elastic 2.0 (for Elasticsearch 1.x) to Elastic 3.0 (for Elasticsearch 2.x). + +Furthermore, the jump in version numbers will give us a chance to be in sync with the Elastic Stack. + +### Elastic 3.0 + +Elastic 3.0 targets Elasticsearch 2.x and is published via [`gopkg.in/olivere/elastic.v3`](https://gopkg.in/olivere/elastic.v3). + +Elastic 3.0 will only get critical bug fixes. You should update to a recent version. + +### Elastic 2.0 + +Elastic 2.0 targets Elasticsearch 1.x and is published via [`gopkg.in/olivere/elastic.v2`](https://gopkg.in/olivere/elastic.v2). + +Elastic 2.0 will only get critical bug fixes. You should update to a recent version. + +### Elastic 1.0 + +Elastic 1.0 is deprecated. You should really update Elasticsearch and Elastic +to a recent version. + +However, if you cannot update for some reason, don't worry. Version 1.0 is +still available. All you need to do is go-get it and change your import path +as described above. + + +## Status + +We use Elastic in production since 2012. Elastic is stable but the API changes +now and then. We strive for API compatibility. +However, Elasticsearch sometimes introduces [breaking changes](https://www.elastic.co/guide/en/elasticsearch/reference/master/breaking-changes.html) +and we sometimes have to adapt. + +Having said that, there have been no big API changes that required you +to rewrite your application big time. More often than not it's renaming APIs +and adding/removing features so that Elastic is in sync with Elasticsearch. + +Elastic has been used in production with the following Elasticsearch versions: +0.90, 1.0-1.7, and 2.0-2.4.1. Furthermore, we use [Travis CI](https://travis-ci.org/) +to test Elastic with the most recent versions of Elasticsearch and Go. +See the [.travis.yml](https://github.com/olivere/elastic/blob/master/.travis.yml) +file for the exact matrix and [Travis](https://travis-ci.org/olivere/elastic) +for the results. + +Elasticsearch has quite a few features. Most of them are implemented +by Elastic. I add features and APIs as required. It's straightforward +to implement missing pieces. I'm accepting pull requests :-) + +Having said that, I hope you find the project useful. + + +## Getting Started + +The first thing you do is to create a [Client](https://github.com/olivere/elastic/blob/master/client.go). +The client connects to Elasticsearch on `http://127.0.0.1:9200` by default. + +You typically create one client for your app. Here's a complete example of +creating a client, creating an index, adding a document, executing a search etc. + +An example is available [here](https://olivere.github.io/elastic/). + +Here's a [link to a complete working example for v6](https://gist.github.com/olivere/e4a376b4783c0914e44ea4f745ce2ebf). + +See the [wiki](https://github.com/olivere/elastic/wiki) for more details. + +There are also [some recipes](https://github.com/olivere/elastic/tree/release-branch.v6/recipes) for bulk indexing, scrolling through documents in indices etc. + +## API Status + +### Document APIs + +- [x] Index API +- [x] Get API +- [x] Delete API +- [x] Delete By Query API +- [x] Update API +- [x] Update By Query API +- [x] Multi Get API +- [x] Bulk API +- [x] Reindex API +- [x] Term Vectors +- [x] Multi termvectors API + +### Search APIs + +- [x] Search +- [x] Search Template +- [ ] Multi Search Template +- [x] Search Shards API +- [x] Suggesters + - [x] Term Suggester + - [x] Phrase Suggester + - [x] Completion Suggester + - [x] Context Suggester +- [x] Multi Search API +- [x] Count API +- [x] Validate API +- [x] Explain API +- [x] Profile API +- [x] Field Capabilities API + +### Aggregations + +- Metrics Aggregations + - [x] Avg + - [x] Cardinality + - [x] Extended Stats + - [x] Geo Bounds + - [x] Geo Centroid + - [x] Max + - [x] Min + - [x] Percentiles + - [x] Percentile Ranks + - [ ] Scripted Metric + - [x] Stats + - [x] Sum + - [x] Top Hits + - [x] Value Count +- Bucket Aggregations + - [x] Adjacency Matrix + - [x] Children + - [x] Date Histogram + - [x] Date Range + - [x] Diversified Sampler + - [x] Filter + - [x] Filters + - [x] Geo Distance + - [ ] GeoHash Grid + - [x] Global + - [x] Histogram + - [x] IP Range + - [x] Missing + - [x] Nested + - [x] Range + - [x] Reverse Nested + - [x] Sampler + - [x] Significant Terms + - [x] Significant Text + - [x] Terms + - [x] Composite +- Pipeline Aggregations + - [x] Avg Bucket + - [x] Derivative + - [x] Max Bucket + - [x] Min Bucket + - [x] Sum Bucket + - [x] Stats Bucket + - [ ] Extended Stats Bucket + - [x] Percentiles Bucket + - [x] Moving Average + - [x] Cumulative Sum + - [x] Bucket Script + - [x] Bucket Selector + - [x] Bucket Sort + - [x] Serial Differencing +- [x] Matrix Aggregations + - [x] Matrix Stats +- [x] Aggregation Metadata + +### Indices APIs + +- [x] Create Index +- [x] Delete Index +- [x] Get Index +- [x] Indices Exists +- [x] Open / Close Index +- [x] Shrink Index +- [x] Rollover Index +- [x] Put Mapping +- [x] Get Mapping +- [x] Get Field Mapping +- [x] Types Exists +- [x] Index Aliases +- [x] Update Indices Settings +- [x] Get Settings +- [x] Analyze + - [x] Explain Analyze +- [x] Index Templates +- [x] Indices Stats +- [x] Indices Segments +- [ ] Indices Recovery +- [ ] Indices Shard Stores +- [ ] Clear Cache +- [x] Flush + - [x] Synced Flush +- [x] Refresh +- [x] Force Merge + +### cat APIs + +The cat APIs are not implemented as of now. We think they are better suited for operating with Elasticsearch on the command line. + +- [ ] cat aliases +- [ ] cat allocation +- [ ] cat count +- [ ] cat fielddata +- [ ] cat health +- [ ] cat indices +- [ ] cat master +- [ ] cat nodeattrs +- [ ] cat nodes +- [ ] cat pending tasks +- [ ] cat plugins +- [ ] cat recovery +- [ ] cat repositories +- [ ] cat thread pool +- [ ] cat shards +- [ ] cat segments +- [ ] cat snapshots +- [ ] cat templates + +### Cluster APIs + +- [x] Cluster Health +- [x] Cluster State +- [x] Cluster Stats +- [ ] Pending Cluster Tasks +- [ ] Cluster Reroute +- [ ] Cluster Update Settings +- [x] Nodes Stats +- [x] Nodes Info +- [ ] Nodes Feature Usage +- [ ] Remote Cluster Info +- [x] Task Management API +- [ ] Nodes hot_threads +- [ ] Cluster Allocation Explain API + +### Query DSL + +- [x] Match All Query +- [x] Inner hits +- Full text queries + - [x] Match Query + - [x] Match Phrase Query + - [x] Match Phrase Prefix Query + - [x] Multi Match Query + - [x] Common Terms Query + - [x] Query String Query + - [x] Simple Query String Query +- Term level queries + - [x] Term Query + - [x] Terms Query + - [x] Terms Set Query + - [x] Range Query + - [x] Exists Query + - [x] Prefix Query + - [x] Wildcard Query + - [x] Regexp Query + - [x] Fuzzy Query + - [x] Type Query + - [x] Ids Query +- Compound queries + - [x] Constant Score Query + - [x] Bool Query + - [x] Dis Max Query + - [x] Function Score Query + - [x] Boosting Query +- Joining queries + - [x] Nested Query + - [x] Has Child Query + - [x] Has Parent Query + - [x] Parent Id Query +- Geo queries + - [ ] GeoShape Query + - [x] Geo Bounding Box Query + - [x] Geo Distance Query + - [x] Geo Polygon Query +- Specialized queries + - [x] More Like This Query + - [x] Script Query + - [x] Percolate Query +- Span queries + - [ ] Span Term Query + - [ ] Span Multi Term Query + - [ ] Span First Query + - [ ] Span Near Query + - [ ] Span Or Query + - [ ] Span Not Query + - [ ] Span Containing Query + - [ ] Span Within Query + - [ ] Span Field Masking Query +- [ ] Minimum Should Match +- [ ] Multi Term Query Rewrite + +### Modules + +- Snapshot and Restore + - [x] Repositories + - [x] Snapshot + - [ ] Restore + - [ ] Snapshot status + - [ ] Monitoring snapshot/restore status + - [ ] Stopping currently running snapshot and restore + +### Sorting + +- [x] Sort by score +- [x] Sort by field +- [x] Sort by geo distance +- [x] Sort by script +- [x] Sort by doc + +### Scrolling + +Scrolling is supported via a `ScrollService`. It supports an iterator-like interface. +The `ClearScroll` API is implemented as well. + +A pattern for [efficiently scrolling in parallel](https://github.com/olivere/elastic/wiki/ScrollParallel) +is described in the [Wiki](https://github.com/olivere/elastic/wiki). + +## How to contribute + +Read [the contribution guidelines](https://github.com/olivere/elastic/blob/master/CONTRIBUTING.md). + +## Credits + +Thanks a lot for the great folks working hard on +[Elasticsearch](https://www.elastic.co/products/elasticsearch) +and +[Go](https://golang.org/). + +Elastic uses portions of the +[uritemplates](https://github.com/jtacoma/uritemplates) library +by Joshua Tacoma, +[backoff](https://github.com/cenkalti/backoff) by Cenk Altı and +[leaktest](https://github.com/fortytw2/leaktest) by Ian Chiles. + +## LICENSE + +MIT-LICENSE. See [LICENSE](http://olivere.mit-license.org/) +or the LICENSE file provided in the repository for details. diff --git a/vendor/github.com/olivere/elastic/acknowledged_response.go b/vendor/github.com/olivere/elastic/acknowledged_response.go new file mode 100644 index 0000000..2045ab8 --- /dev/null +++ b/vendor/github.com/olivere/elastic/acknowledged_response.go @@ -0,0 +1,13 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// AcknowledgedResponse is returned from various APIs. It simply indicates +// whether the operation is ack'd or not. +type AcknowledgedResponse struct { + Acknowledged bool `json:"acknowledged"` + ShardsAcknowledged bool `json:"shards_acknowledged"` + Index string `json:"index,omitempty"` +} diff --git a/vendor/github.com/olivere/elastic/backoff.go b/vendor/github.com/olivere/elastic/backoff.go new file mode 100644 index 0000000..736959f --- /dev/null +++ b/vendor/github.com/olivere/elastic/backoff.go @@ -0,0 +1,148 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "math" + "math/rand" + "sync" + "time" +) + +// BackoffFunc specifies the signature of a function that returns the +// time to wait before the next call to a resource. To stop retrying +// return false in the 2nd return value. +type BackoffFunc func(retry int) (time.Duration, bool) + +// Backoff allows callers to implement their own Backoff strategy. +type Backoff interface { + // Next implements a BackoffFunc. + Next(retry int) (time.Duration, bool) +} + +// -- ZeroBackoff -- + +// ZeroBackoff is a fixed backoff policy whose backoff time is always zero, +// meaning that the operation is retried immediately without waiting, +// indefinitely. +type ZeroBackoff struct{} + +// Next implements BackoffFunc for ZeroBackoff. +func (b ZeroBackoff) Next(retry int) (time.Duration, bool) { + return 0, true +} + +// -- StopBackoff -- + +// StopBackoff is a fixed backoff policy that always returns false for +// Next(), meaning that the operation should never be retried. +type StopBackoff struct{} + +// Next implements BackoffFunc for StopBackoff. +func (b StopBackoff) Next(retry int) (time.Duration, bool) { + return 0, false +} + +// -- ConstantBackoff -- + +// ConstantBackoff is a backoff policy that always returns the same delay. +type ConstantBackoff struct { + interval time.Duration +} + +// NewConstantBackoff returns a new ConstantBackoff. +func NewConstantBackoff(interval time.Duration) *ConstantBackoff { + return &ConstantBackoff{interval: interval} +} + +// Next implements BackoffFunc for ConstantBackoff. +func (b *ConstantBackoff) Next(retry int) (time.Duration, bool) { + return b.interval, true +} + +// -- Exponential -- + +// ExponentialBackoff implements the simple exponential backoff described by +// Douglas Thain at http://dthain.blogspot.de/2009/02/exponential-backoff-in-distributed.html. +type ExponentialBackoff struct { + t float64 // initial timeout (in msec) + f float64 // exponential factor (e.g. 2) + m float64 // maximum timeout (in msec) +} + +// NewExponentialBackoff returns a ExponentialBackoff backoff policy. +// Use initialTimeout to set the first/minimal interval +// and maxTimeout to set the maximum wait interval. +func NewExponentialBackoff(initialTimeout, maxTimeout time.Duration) *ExponentialBackoff { + return &ExponentialBackoff{ + t: float64(int64(initialTimeout / time.Millisecond)), + f: 2.0, + m: float64(int64(maxTimeout / time.Millisecond)), + } +} + +// Next implements BackoffFunc for ExponentialBackoff. +func (b *ExponentialBackoff) Next(retry int) (time.Duration, bool) { + r := 1.0 + rand.Float64() // random number in [1..2] + m := math.Min(r*b.t*math.Pow(b.f, float64(retry)), b.m) + if m >= b.m { + return 0, false + } + d := time.Duration(int64(m)) * time.Millisecond + return d, true +} + +// -- Simple Backoff -- + +// SimpleBackoff takes a list of fixed values for backoff intervals. +// Each call to Next returns the next value from that fixed list. +// After each value is returned, subsequent calls to Next will only return +// the last element. The values are optionally "jittered" (off by default). +type SimpleBackoff struct { + sync.Mutex + ticks []int + jitter bool +} + +// NewSimpleBackoff creates a SimpleBackoff algorithm with the specified +// list of fixed intervals in milliseconds. +func NewSimpleBackoff(ticks ...int) *SimpleBackoff { + return &SimpleBackoff{ + ticks: ticks, + jitter: false, + } +} + +// Jitter enables or disables jittering values. +func (b *SimpleBackoff) Jitter(flag bool) *SimpleBackoff { + b.Lock() + b.jitter = flag + b.Unlock() + return b +} + +// jitter randomizes the interval to return a value of [0.5*millis .. 1.5*millis]. +func jitter(millis int) int { + if millis <= 0 { + return 0 + } + return millis/2 + rand.Intn(millis) +} + +// Next implements BackoffFunc for SimpleBackoff. +func (b *SimpleBackoff) Next(retry int) (time.Duration, bool) { + b.Lock() + defer b.Unlock() + + if retry >= len(b.ticks) { + return 0, false + } + + ms := b.ticks[retry] + if b.jitter { + ms = jitter(ms) + } + return time.Duration(ms) * time.Millisecond, true +} diff --git a/vendor/github.com/olivere/elastic/backoff_test.go b/vendor/github.com/olivere/elastic/backoff_test.go new file mode 100644 index 0000000..eae168a --- /dev/null +++ b/vendor/github.com/olivere/elastic/backoff_test.go @@ -0,0 +1,140 @@ +package elastic + +import ( + "math/rand" + "testing" + "time" +) + +func TestZeroBackoff(t *testing.T) { + b := ZeroBackoff{} + _, ok := b.Next(0) + if !ok { + t.Fatalf("expected %v, got %v", true, ok) + } +} + +func TestStopBackoff(t *testing.T) { + b := StopBackoff{} + _, ok := b.Next(0) + if ok { + t.Fatalf("expected %v, got %v", false, ok) + } +} + +func TestConstantBackoff(t *testing.T) { + b := NewConstantBackoff(time.Second) + d, ok := b.Next(0) + if !ok { + t.Fatalf("expected %v, got %v", true, ok) + } + if d != time.Second { + t.Fatalf("expected %v, got %v", time.Second, d) + } +} + +func TestSimpleBackoff(t *testing.T) { + var tests = []struct { + Duration time.Duration + Continue bool + }{ + // #0 + { + Duration: 1 * time.Millisecond, + Continue: true, + }, + // #1 + { + Duration: 2 * time.Millisecond, + Continue: true, + }, + // #2 + { + Duration: 7 * time.Millisecond, + Continue: true, + }, + // #3 + { + Duration: 0, + Continue: false, + }, + // #4 + { + Duration: 0, + Continue: false, + }, + } + + b := NewSimpleBackoff(1, 2, 7) + + for i, tt := range tests { + d, ok := b.Next(i) + if got, want := ok, tt.Continue; got != want { + t.Fatalf("#%d: expected %v, got %v", i, want, got) + } + if got, want := d, tt.Duration; got != want { + t.Fatalf("#%d: expected %v, got %v", i, want, got) + } + } +} + +func TestExponentialBackoff(t *testing.T) { + rand.Seed(time.Now().UnixNano()) + + min := time.Duration(8) * time.Millisecond + max := time.Duration(256) * time.Millisecond + b := NewExponentialBackoff(min, max) + + between := func(value time.Duration, a, b int) bool { + x := int(value / time.Millisecond) + return a <= x && x <= b + } + + got, ok := b.Next(0) + if !ok { + t.Fatalf("expected %v, got %v", true, ok) + } + if !between(got, 8, 256) { + t.Errorf("expected [%v..%v], got %v", 8, 256, got) + } + + got, ok = b.Next(1) + if !ok { + t.Fatalf("expected %v, got %v", true, ok) + } + if !between(got, 8, 256) { + t.Errorf("expected [%v..%v], got %v", 8, 256, got) + } + + got, ok = b.Next(2) + if !ok { + t.Fatalf("expected %v, got %v", true, ok) + } + if !between(got, 8, 256) { + t.Errorf("expected [%v..%v], got %v", 8, 256, got) + } + + got, ok = b.Next(3) + if !ok { + t.Fatalf("expected %v, got %v", true, ok) + } + if !between(got, 8, 256) { + t.Errorf("expected [%v..%v], got %v", 8, 256, got) + } + + got, ok = b.Next(4) + if !ok { + t.Fatalf("expected %v, got %v", true, ok) + } + if !between(got, 8, 256) { + t.Errorf("expected [%v..%v], got %v", 8, 256, got) + } + + if _, ok := b.Next(5); ok { + t.Fatalf("expected %v, got %v", false, ok) + } + + if _, ok = b.Next(6); ok { + t.Fatalf("expected %v, got %v", false, ok) + } +} diff --git a/vendor/github.com/olivere/elastic/bulk.go b/vendor/github.com/olivere/elastic/bulk.go new file mode 100644 index 0000000..6e55ce9 --- /dev/null +++ b/vendor/github.com/olivere/elastic/bulk.go @@ -0,0 +1,420 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "bytes" + "context" + "errors" + "fmt" + "net/url" + + "github.com/olivere/elastic/uritemplates" +) + +// BulkService allows for batching bulk requests and sending them to +// Elasticsearch in one roundtrip. Use the Add method with BulkIndexRequest, +// BulkUpdateRequest, and BulkDeleteRequest to add bulk requests to a batch, +// then use Do to send them to Elasticsearch. +// +// BulkService will be reset after each Do call. In other words, you can +// reuse BulkService to send many batches. You do not have to create a new +// BulkService for each batch. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-bulk.html +// for more details. +type BulkService struct { + client *Client + retrier Retrier + + index string + typ string + requests []BulkableRequest + pipeline string + timeout string + refresh string + routing string + waitForActiveShards string + pretty bool + + // estimated bulk size in bytes, up to the request index sizeInBytesCursor + sizeInBytes int64 + sizeInBytesCursor int +} + +// NewBulkService initializes a new BulkService. +func NewBulkService(client *Client) *BulkService { + builder := &BulkService{ + client: client, + } + return builder +} + +func (s *BulkService) reset() { + s.requests = make([]BulkableRequest, 0) + s.sizeInBytes = 0 + s.sizeInBytesCursor = 0 +} + +// Retrier allows to set specific retry logic for this BulkService. +// If not specified, it will use the client's default retrier. +func (s *BulkService) Retrier(retrier Retrier) *BulkService { + s.retrier = retrier + return s +} + +// Index specifies the index to use for all batches. You may also leave +// this blank and specify the index in the individual bulk requests. +func (s *BulkService) Index(index string) *BulkService { + s.index = index + return s +} + +// Type specifies the type to use for all batches. You may also leave +// this blank and specify the type in the individual bulk requests. +func (s *BulkService) Type(typ string) *BulkService { + s.typ = typ + return s +} + +// Timeout is a global timeout for processing bulk requests. This is a +// server-side timeout, i.e. it tells Elasticsearch the time after which +// it should stop processing. +func (s *BulkService) Timeout(timeout string) *BulkService { + s.timeout = timeout + return s +} + +// Refresh controls when changes made by this request are made visible +// to search. The allowed values are: "true" (refresh the relevant +// primary and replica shards immediately), "wait_for" (wait for the +// changes to be made visible by a refresh before reying), or "false" +// (no refresh related actions). The default value is "false". +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-refresh.html +// for details. +func (s *BulkService) Refresh(refresh string) *BulkService { + s.refresh = refresh + return s +} + +// Routing specifies the routing value. +func (s *BulkService) Routing(routing string) *BulkService { + s.routing = routing + return s +} + +// Pipeline specifies the pipeline id to preprocess incoming documents with. +func (s *BulkService) Pipeline(pipeline string) *BulkService { + s.pipeline = pipeline + return s +} + +// WaitForActiveShards sets the number of shard copies that must be active +// before proceeding with the bulk operation. Defaults to 1, meaning the +// primary shard only. Set to `all` for all shard copies, otherwise set to +// any non-negative value less than or equal to the total number of copies +// for the shard (number of replicas + 1). +func (s *BulkService) WaitForActiveShards(waitForActiveShards string) *BulkService { + s.waitForActiveShards = waitForActiveShards + return s +} + +// Pretty tells Elasticsearch whether to return a formatted JSON response. +func (s *BulkService) Pretty(pretty bool) *BulkService { + s.pretty = pretty + return s +} + +// Add adds bulkable requests, i.e. BulkIndexRequest, BulkUpdateRequest, +// and/or BulkDeleteRequest. +func (s *BulkService) Add(requests ...BulkableRequest) *BulkService { + for _, r := range requests { + s.requests = append(s.requests, r) + } + return s +} + +// EstimatedSizeInBytes returns the estimated size of all bulkable +// requests added via Add. +func (s *BulkService) EstimatedSizeInBytes() int64 { + if s.sizeInBytesCursor == len(s.requests) { + return s.sizeInBytes + } + for _, r := range s.requests[s.sizeInBytesCursor:] { + s.sizeInBytes += s.estimateSizeInBytes(r) + s.sizeInBytesCursor++ + } + return s.sizeInBytes +} + +// estimateSizeInBytes returns the estimates size of the given +// bulkable request, i.e. BulkIndexRequest, BulkUpdateRequest, and +// BulkDeleteRequest. +func (s *BulkService) estimateSizeInBytes(r BulkableRequest) int64 { + lines, _ := r.Source() + size := 0 + for _, line := range lines { + // +1 for the \n + size += len(line) + 1 + } + return int64(size) +} + +// NumberOfActions returns the number of bulkable requests that need to +// be sent to Elasticsearch on the next batch. +func (s *BulkService) NumberOfActions() int { + return len(s.requests) +} + +func (s *BulkService) bodyAsString() (string, error) { + // Pre-allocate to reduce allocs + buf := bytes.NewBuffer(make([]byte, 0, s.EstimatedSizeInBytes())) + + for _, req := range s.requests { + source, err := req.Source() + if err != nil { + return "", err + } + for _, line := range source { + buf.WriteString(line) + buf.WriteByte('\n') + } + } + + return buf.String(), nil +} + +// Do sends the batched requests to Elasticsearch. Note that, when successful, +// you can reuse the BulkService for the next batch as the list of bulk +// requests is cleared on success. +func (s *BulkService) Do(ctx context.Context) (*BulkResponse, error) { + // No actions? + if s.NumberOfActions() == 0 { + return nil, errors.New("elastic: No bulk actions to commit") + } + + // Get body + body, err := s.bodyAsString() + if err != nil { + return nil, err + } + + // Build url + path := "/" + if len(s.index) > 0 { + index, err := uritemplates.Expand("{index}", map[string]string{ + "index": s.index, + }) + if err != nil { + return nil, err + } + path += index + "/" + } + if len(s.typ) > 0 { + typ, err := uritemplates.Expand("{type}", map[string]string{ + "type": s.typ, + }) + if err != nil { + return nil, err + } + path += typ + "/" + } + path += "_bulk" + + // Parameters + params := make(url.Values) + if s.pretty { + params.Set("pretty", fmt.Sprintf("%v", s.pretty)) + } + if s.pipeline != "" { + params.Set("pipeline", s.pipeline) + } + if s.refresh != "" { + params.Set("refresh", s.refresh) + } + if s.routing != "" { + params.Set("routing", s.routing) + } + if s.timeout != "" { + params.Set("timeout", s.timeout) + } + if s.waitForActiveShards != "" { + params.Set("wait_for_active_shards", s.waitForActiveShards) + } + + // Get response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + Body: body, + ContentType: "application/x-ndjson", + Retrier: s.retrier, + }) + if err != nil { + return nil, err + } + + // Return results + ret := new(BulkResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + + // Reset so the request can be reused + s.reset() + + return ret, nil +} + +// BulkResponse is a response to a bulk execution. +// +// Example: +// { +// "took":3, +// "errors":false, +// "items":[{ +// "index":{ +// "_index":"index1", +// "_type":"tweet", +// "_id":"1", +// "_version":3, +// "status":201 +// } +// },{ +// "index":{ +// "_index":"index2", +// "_type":"tweet", +// "_id":"2", +// "_version":3, +// "status":200 +// } +// },{ +// "delete":{ +// "_index":"index1", +// "_type":"tweet", +// "_id":"1", +// "_version":4, +// "status":200, +// "found":true +// } +// },{ +// "update":{ +// "_index":"index2", +// "_type":"tweet", +// "_id":"2", +// "_version":4, +// "status":200 +// } +// }] +// } +type BulkResponse struct { + Took int `json:"took,omitempty"` + Errors bool `json:"errors,omitempty"` + Items []map[string]*BulkResponseItem `json:"items,omitempty"` +} + +// BulkResponseItem is the result of a single bulk request. +type BulkResponseItem struct { + Index string `json:"_index,omitempty"` + Type string `json:"_type,omitempty"` + Id string `json:"_id,omitempty"` + Version int64 `json:"_version,omitempty"` + Result string `json:"result,omitempty"` + Shards *shardsInfo `json:"_shards,omitempty"` + SeqNo int64 `json:"_seq_no,omitempty"` + PrimaryTerm int64 `json:"_primary_term,omitempty"` + Status int `json:"status,omitempty"` + ForcedRefresh bool `json:"forced_refresh,omitempty"` + Error *ErrorDetails `json:"error,omitempty"` + GetResult *GetResult `json:"get,omitempty"` +} + +// Indexed returns all bulk request results of "index" actions. +func (r *BulkResponse) Indexed() []*BulkResponseItem { + return r.ByAction("index") +} + +// Created returns all bulk request results of "create" actions. +func (r *BulkResponse) Created() []*BulkResponseItem { + return r.ByAction("create") +} + +// Updated returns all bulk request results of "update" actions. +func (r *BulkResponse) Updated() []*BulkResponseItem { + return r.ByAction("update") +} + +// Deleted returns all bulk request results of "delete" actions. +func (r *BulkResponse) Deleted() []*BulkResponseItem { + return r.ByAction("delete") +} + +// ByAction returns all bulk request results of a certain action, +// e.g. "index" or "delete". +func (r *BulkResponse) ByAction(action string) []*BulkResponseItem { + if r.Items == nil { + return nil + } + var items []*BulkResponseItem + for _, item := range r.Items { + if result, found := item[action]; found { + items = append(items, result) + } + } + return items +} + +// ById returns all bulk request results of a given document id, +// regardless of the action ("index", "delete" etc.). +func (r *BulkResponse) ById(id string) []*BulkResponseItem { + if r.Items == nil { + return nil + } + var items []*BulkResponseItem + for _, item := range r.Items { + for _, result := range item { + if result.Id == id { + items = append(items, result) + } + } + } + return items +} + +// Failed returns those items of a bulk response that have errors, +// i.e. those that don't have a status code between 200 and 299. +func (r *BulkResponse) Failed() []*BulkResponseItem { + if r.Items == nil { + return nil + } + var errors []*BulkResponseItem + for _, item := range r.Items { + for _, result := range item { + if !(result.Status >= 200 && result.Status <= 299) { + errors = append(errors, result) + } + } + } + return errors +} + +// Succeeded returns those items of a bulk response that have no errors, +// i.e. those have a status code between 200 and 299. +func (r *BulkResponse) Succeeded() []*BulkResponseItem { + if r.Items == nil { + return nil + } + var succeeded []*BulkResponseItem + for _, item := range r.Items { + for _, result := range item { + if result.Status >= 200 && result.Status <= 299 { + succeeded = append(succeeded, result) + } + } + } + return succeeded +} diff --git a/vendor/github.com/olivere/elastic/bulk_delete_request.go b/vendor/github.com/olivere/elastic/bulk_delete_request.go new file mode 100644 index 0000000..4bdadeb --- /dev/null +++ b/vendor/github.com/olivere/elastic/bulk_delete_request.go @@ -0,0 +1,166 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +//go:generate easyjson bulk_delete_request.go + +import ( + "encoding/json" + "fmt" + "strings" +) + +// -- Bulk delete request -- + +// BulkDeleteRequest is a request to remove a document from Elasticsearch. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-bulk.html +// for details. +type BulkDeleteRequest struct { + BulkableRequest + index string + typ string + id string + parent string + routing string + version int64 // default is MATCH_ANY + versionType string // default is "internal" + + source []string + + useEasyJSON bool +} + +//easyjson:json +type bulkDeleteRequestCommand map[string]bulkDeleteRequestCommandOp + +//easyjson:json +type bulkDeleteRequestCommandOp struct { + Index string `json:"_index,omitempty"` + Type string `json:"_type,omitempty"` + Id string `json:"_id,omitempty"` + Parent string `json:"parent,omitempty"` + Routing string `json:"routing,omitempty"` + Version int64 `json:"version,omitempty"` + VersionType string `json:"version_type,omitempty"` +} + +// NewBulkDeleteRequest returns a new BulkDeleteRequest. +func NewBulkDeleteRequest() *BulkDeleteRequest { + return &BulkDeleteRequest{} +} + +// UseEasyJSON is an experimental setting that enables serialization +// with github.com/mailru/easyjson, which should in faster serialization +// time and less allocations, but removed compatibility with encoding/json, +// usage of unsafe etc. See https://github.com/mailru/easyjson#issues-notes-and-limitations +// for details. This setting is disabled by default. +func (r *BulkDeleteRequest) UseEasyJSON(enable bool) *BulkDeleteRequest { + r.useEasyJSON = enable + return r +} + +// Index specifies the Elasticsearch index to use for this delete request. +// If unspecified, the index set on the BulkService will be used. +func (r *BulkDeleteRequest) Index(index string) *BulkDeleteRequest { + r.index = index + r.source = nil + return r +} + +// Type specifies the Elasticsearch type to use for this delete request. +// If unspecified, the type set on the BulkService will be used. +func (r *BulkDeleteRequest) Type(typ string) *BulkDeleteRequest { + r.typ = typ + r.source = nil + return r +} + +// Id specifies the identifier of the document to delete. +func (r *BulkDeleteRequest) Id(id string) *BulkDeleteRequest { + r.id = id + r.source = nil + return r +} + +// Parent specifies the parent of the request, which is used in parent/child +// mappings. +func (r *BulkDeleteRequest) Parent(parent string) *BulkDeleteRequest { + r.parent = parent + r.source = nil + return r +} + +// Routing specifies a routing value for the request. +func (r *BulkDeleteRequest) Routing(routing string) *BulkDeleteRequest { + r.routing = routing + r.source = nil + return r +} + +// Version indicates the version to be deleted as part of an optimistic +// concurrency model. +func (r *BulkDeleteRequest) Version(version int64) *BulkDeleteRequest { + r.version = version + r.source = nil + return r +} + +// VersionType can be "internal" (default), "external", "external_gte", +// or "external_gt". +func (r *BulkDeleteRequest) VersionType(versionType string) *BulkDeleteRequest { + r.versionType = versionType + r.source = nil + return r +} + +// String returns the on-wire representation of the delete request, +// concatenated as a single string. +func (r *BulkDeleteRequest) String() string { + lines, err := r.Source() + if err != nil { + return fmt.Sprintf("error: %v", err) + } + return strings.Join(lines, "\n") +} + +// Source returns the on-wire representation of the delete request, +// split into an action-and-meta-data line and an (optional) source line. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-bulk.html +// for details. +func (r *BulkDeleteRequest) Source() ([]string, error) { + if r.source != nil { + return r.source, nil + } + command := bulkDeleteRequestCommand{ + "delete": bulkDeleteRequestCommandOp{ + Index: r.index, + Type: r.typ, + Id: r.id, + Routing: r.routing, + Parent: r.parent, + Version: r.version, + VersionType: r.versionType, + }, + } + + var err error + var body []byte + if r.useEasyJSON { + // easyjson + body, err = command.MarshalJSON() + } else { + // encoding/json + body, err = json.Marshal(command) + } + if err != nil { + return nil, err + } + + lines := []string{string(body)} + r.source = lines + + return lines, nil +} diff --git a/vendor/github.com/olivere/elastic/bulk_delete_request_easyjson.go b/vendor/github.com/olivere/elastic/bulk_delete_request_easyjson.go new file mode 100644 index 0000000..df3452c --- /dev/null +++ b/vendor/github.com/olivere/elastic/bulk_delete_request_easyjson.go @@ -0,0 +1,230 @@ +// Code generated by easyjson for marshaling/unmarshaling. DO NOT EDIT. + +package elastic + +import ( + json "encoding/json" + easyjson "github.com/mailru/easyjson" + jlexer "github.com/mailru/easyjson/jlexer" + jwriter "github.com/mailru/easyjson/jwriter" +) + +// suppress unused package warning +var ( + _ *json.RawMessage + _ *jlexer.Lexer + _ *jwriter.Writer + _ easyjson.Marshaler +) + +func easyjson8092efb6DecodeGithubComOlivereElastic(in *jlexer.Lexer, out *bulkDeleteRequestCommandOp) { + isTopLevel := in.IsStart() + if in.IsNull() { + if isTopLevel { + in.Consumed() + } + in.Skip() + return + } + in.Delim('{') + for !in.IsDelim('}') { + key := in.UnsafeString() + in.WantColon() + if in.IsNull() { + in.Skip() + in.WantComma() + continue + } + switch key { + case "_index": + out.Index = string(in.String()) + case "_type": + out.Type = string(in.String()) + case "_id": + out.Id = string(in.String()) + case "parent": + out.Parent = string(in.String()) + case "routing": + out.Routing = string(in.String()) + case "version": + out.Version = int64(in.Int64()) + case "version_type": + out.VersionType = string(in.String()) + default: + in.SkipRecursive() + } + in.WantComma() + } + in.Delim('}') + if isTopLevel { + in.Consumed() + } +} +func easyjson8092efb6EncodeGithubComOlivereElastic(out *jwriter.Writer, in bulkDeleteRequestCommandOp) { + out.RawByte('{') + first := true + _ = first + if in.Index != "" { + const prefix string = ",\"_index\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.String(string(in.Index)) + } + if in.Type != "" { + const prefix string = ",\"_type\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.String(string(in.Type)) + } + if in.Id != "" { + const prefix string = ",\"_id\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.String(string(in.Id)) + } + if in.Parent != "" { + const prefix string = ",\"parent\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.String(string(in.Parent)) + } + if in.Routing != "" { + const prefix string = ",\"routing\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.String(string(in.Routing)) + } + if in.Version != 0 { + const prefix string = ",\"version\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.Int64(int64(in.Version)) + } + if in.VersionType != "" { + const prefix string = ",\"version_type\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.String(string(in.VersionType)) + } + out.RawByte('}') +} + +// MarshalJSON supports json.Marshaler interface +func (v bulkDeleteRequestCommandOp) MarshalJSON() ([]byte, error) { + w := jwriter.Writer{} + easyjson8092efb6EncodeGithubComOlivereElastic(&w, v) + return w.Buffer.BuildBytes(), w.Error +} + +// MarshalEasyJSON supports easyjson.Marshaler interface +func (v bulkDeleteRequestCommandOp) MarshalEasyJSON(w *jwriter.Writer) { + easyjson8092efb6EncodeGithubComOlivereElastic(w, v) +} + +// UnmarshalJSON supports json.Unmarshaler interface +func (v *bulkDeleteRequestCommandOp) UnmarshalJSON(data []byte) error { + r := jlexer.Lexer{Data: data} + easyjson8092efb6DecodeGithubComOlivereElastic(&r, v) + return r.Error() +} + +// UnmarshalEasyJSON supports easyjson.Unmarshaler interface +func (v *bulkDeleteRequestCommandOp) UnmarshalEasyJSON(l *jlexer.Lexer) { + easyjson8092efb6DecodeGithubComOlivereElastic(l, v) +} +func easyjson8092efb6DecodeGithubComOlivereElastic1(in *jlexer.Lexer, out *bulkDeleteRequestCommand) { + isTopLevel := in.IsStart() + if in.IsNull() { + in.Skip() + } else { + in.Delim('{') + if !in.IsDelim('}') { + *out = make(bulkDeleteRequestCommand) + } else { + *out = nil + } + for !in.IsDelim('}') { + key := string(in.String()) + in.WantColon() + var v1 bulkDeleteRequestCommandOp + (v1).UnmarshalEasyJSON(in) + (*out)[key] = v1 + in.WantComma() + } + in.Delim('}') + } + if isTopLevel { + in.Consumed() + } +} +func easyjson8092efb6EncodeGithubComOlivereElastic1(out *jwriter.Writer, in bulkDeleteRequestCommand) { + if in == nil && (out.Flags&jwriter.NilMapAsEmpty) == 0 { + out.RawString(`null`) + } else { + out.RawByte('{') + v2First := true + for v2Name, v2Value := range in { + if v2First { + v2First = false + } else { + out.RawByte(',') + } + out.String(string(v2Name)) + out.RawByte(':') + (v2Value).MarshalEasyJSON(out) + } + out.RawByte('}') + } +} + +// MarshalJSON supports json.Marshaler interface +func (v bulkDeleteRequestCommand) MarshalJSON() ([]byte, error) { + w := jwriter.Writer{} + easyjson8092efb6EncodeGithubComOlivereElastic1(&w, v) + return w.Buffer.BuildBytes(), w.Error +} + +// MarshalEasyJSON supports easyjson.Marshaler interface +func (v bulkDeleteRequestCommand) MarshalEasyJSON(w *jwriter.Writer) { + easyjson8092efb6EncodeGithubComOlivereElastic1(w, v) +} + +// UnmarshalJSON supports json.Unmarshaler interface +func (v *bulkDeleteRequestCommand) UnmarshalJSON(data []byte) error { + r := jlexer.Lexer{Data: data} + easyjson8092efb6DecodeGithubComOlivereElastic1(&r, v) + return r.Error() +} + +// UnmarshalEasyJSON supports easyjson.Unmarshaler interface +func (v *bulkDeleteRequestCommand) UnmarshalEasyJSON(l *jlexer.Lexer) { + easyjson8092efb6DecodeGithubComOlivereElastic1(l, v) +} diff --git a/vendor/github.com/olivere/elastic/bulk_delete_request_test.go b/vendor/github.com/olivere/elastic/bulk_delete_request_test.go new file mode 100644 index 0000000..8635e34 --- /dev/null +++ b/vendor/github.com/olivere/elastic/bulk_delete_request_test.go @@ -0,0 +1,79 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "testing" +) + +func TestBulkDeleteRequestSerialization(t *testing.T) { + tests := []struct { + Request BulkableRequest + Expected []string + }{ + // #0 + { + Request: NewBulkDeleteRequest().Index("index1").Type("doc").Id("1"), + Expected: []string{ + `{"delete":{"_index":"index1","_type":"doc","_id":"1"}}`, + }, + }, + // #1 + { + Request: NewBulkDeleteRequest().Index("index1").Type("doc").Id("1").Parent("2"), + Expected: []string{ + `{"delete":{"_index":"index1","_type":"doc","_id":"1","parent":"2"}}`, + }, + }, + // #2 + { + Request: NewBulkDeleteRequest().Index("index1").Type("doc").Id("1").Routing("3"), + Expected: []string{ + `{"delete":{"_index":"index1","_type":"doc","_id":"1","routing":"3"}}`, + }, + }, + } + + for i, test := range tests { + lines, err := test.Request.Source() + if err != nil { + t.Fatalf("case #%d: expected no error, got: %v", i, err) + } + if lines == nil { + t.Fatalf("case #%d: expected lines, got nil", i) + } + if len(lines) != len(test.Expected) { + t.Fatalf("case #%d: expected %d lines, got %d", i, len(test.Expected), len(lines)) + } + for j, line := range lines { + if line != test.Expected[j] { + t.Errorf("case #%d: expected line #%d to be %s, got: %s", i, j, test.Expected[j], line) + } + } + } +} + +var bulkDeleteRequestSerializationResult string + +func BenchmarkBulkDeleteRequestSerialization(b *testing.B) { + b.Run("stdlib", func(b *testing.B) { + r := NewBulkDeleteRequest().Index(testIndexName).Type("doc").Id("1") + benchmarkBulkDeleteRequestSerialization(b, r.UseEasyJSON(false)) + }) + b.Run("easyjson", func(b *testing.B) { + r := NewBulkDeleteRequest().Index(testIndexName).Type("doc").Id("1") + benchmarkBulkDeleteRequestSerialization(b, r.UseEasyJSON(true)) + }) +} + +func benchmarkBulkDeleteRequestSerialization(b *testing.B, r *BulkDeleteRequest) { + var s string + for n := 0; n < b.N; n++ { + s = r.String() + r.source = nil // Don't let caching spoil the benchmark + } + bulkDeleteRequestSerializationResult = s // ensure the compiler doesn't optimize + b.ReportAllocs() +} diff --git a/vendor/github.com/olivere/elastic/bulk_index_request.go b/vendor/github.com/olivere/elastic/bulk_index_request.go new file mode 100644 index 0000000..0f09ac5 --- /dev/null +++ b/vendor/github.com/olivere/elastic/bulk_index_request.go @@ -0,0 +1,239 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +//go:generate easyjson bulk_index_request.go + +import ( + "encoding/json" + "fmt" + "strings" +) + +// BulkIndexRequest is a request to add a document to Elasticsearch. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-bulk.html +// for details. +type BulkIndexRequest struct { + BulkableRequest + index string + typ string + id string + opType string + routing string + parent string + version int64 // default is MATCH_ANY + versionType string // default is "internal" + doc interface{} + pipeline string + retryOnConflict *int + + source []string + + useEasyJSON bool +} + +//easyjson:json +type bulkIndexRequestCommand map[string]bulkIndexRequestCommandOp + +//easyjson:json +type bulkIndexRequestCommandOp struct { + Index string `json:"_index,omitempty"` + Id string `json:"_id,omitempty"` + Type string `json:"_type,omitempty"` + Parent string `json:"parent,omitempty"` + // RetryOnConflict is "_retry_on_conflict" for 6.0 and "retry_on_conflict" for 6.1+. + RetryOnConflict *int `json:"retry_on_conflict,omitempty"` + Routing string `json:"routing,omitempty"` + Version int64 `json:"version,omitempty"` + VersionType string `json:"version_type,omitempty"` + Pipeline string `json:"pipeline,omitempty"` +} + +// NewBulkIndexRequest returns a new BulkIndexRequest. +// The operation type is "index" by default. +func NewBulkIndexRequest() *BulkIndexRequest { + return &BulkIndexRequest{ + opType: "index", + } +} + +// UseEasyJSON is an experimental setting that enables serialization +// with github.com/mailru/easyjson, which should in faster serialization +// time and less allocations, but removed compatibility with encoding/json, +// usage of unsafe etc. See https://github.com/mailru/easyjson#issues-notes-and-limitations +// for details. This setting is disabled by default. +func (r *BulkIndexRequest) UseEasyJSON(enable bool) *BulkIndexRequest { + r.useEasyJSON = enable + return r +} + +// Index specifies the Elasticsearch index to use for this index request. +// If unspecified, the index set on the BulkService will be used. +func (r *BulkIndexRequest) Index(index string) *BulkIndexRequest { + r.index = index + r.source = nil + return r +} + +// Type specifies the Elasticsearch type to use for this index request. +// If unspecified, the type set on the BulkService will be used. +func (r *BulkIndexRequest) Type(typ string) *BulkIndexRequest { + r.typ = typ + r.source = nil + return r +} + +// Id specifies the identifier of the document to index. +func (r *BulkIndexRequest) Id(id string) *BulkIndexRequest { + r.id = id + r.source = nil + return r +} + +// OpType specifies if this request should follow create-only or upsert +// behavior. This follows the OpType of the standard document index API. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-index_.html#operation-type +// for details. +func (r *BulkIndexRequest) OpType(opType string) *BulkIndexRequest { + r.opType = opType + r.source = nil + return r +} + +// Routing specifies a routing value for the request. +func (r *BulkIndexRequest) Routing(routing string) *BulkIndexRequest { + r.routing = routing + r.source = nil + return r +} + +// Parent specifies the identifier of the parent document (if available). +func (r *BulkIndexRequest) Parent(parent string) *BulkIndexRequest { + r.parent = parent + r.source = nil + return r +} + +// Version indicates the version of the document as part of an optimistic +// concurrency model. +func (r *BulkIndexRequest) Version(version int64) *BulkIndexRequest { + r.version = version + r.source = nil + return r +} + +// VersionType specifies how versions are created. It can be e.g. internal, +// external, external_gte, or force. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-index_.html#index-versioning +// for details. +func (r *BulkIndexRequest) VersionType(versionType string) *BulkIndexRequest { + r.versionType = versionType + r.source = nil + return r +} + +// Doc specifies the document to index. +func (r *BulkIndexRequest) Doc(doc interface{}) *BulkIndexRequest { + r.doc = doc + r.source = nil + return r +} + +// RetryOnConflict specifies how often to retry in case of a version conflict. +func (r *BulkIndexRequest) RetryOnConflict(retryOnConflict int) *BulkIndexRequest { + r.retryOnConflict = &retryOnConflict + r.source = nil + return r +} + +// Pipeline to use while processing the request. +func (r *BulkIndexRequest) Pipeline(pipeline string) *BulkIndexRequest { + r.pipeline = pipeline + r.source = nil + return r +} + +// String returns the on-wire representation of the index request, +// concatenated as a single string. +func (r *BulkIndexRequest) String() string { + lines, err := r.Source() + if err != nil { + return fmt.Sprintf("error: %v", err) + } + return strings.Join(lines, "\n") +} + +// Source returns the on-wire representation of the index request, +// split into an action-and-meta-data line and an (optional) source line. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-bulk.html +// for details. +func (r *BulkIndexRequest) Source() ([]string, error) { + // { "index" : { "_index" : "test", "_type" : "type1", "_id" : "1" } } + // { "field1" : "value1" } + + if r.source != nil { + return r.source, nil + } + + lines := make([]string, 2) + + // "index" ... + indexCommand := bulkIndexRequestCommandOp{ + Index: r.index, + Type: r.typ, + Id: r.id, + Routing: r.routing, + Parent: r.parent, + Version: r.version, + VersionType: r.versionType, + RetryOnConflict: r.retryOnConflict, + Pipeline: r.pipeline, + } + command := bulkIndexRequestCommand{ + r.opType: indexCommand, + } + + var err error + var body []byte + if r.useEasyJSON { + // easyjson + body, err = command.MarshalJSON() + } else { + // encoding/json + body, err = json.Marshal(command) + } + if err != nil { + return nil, err + } + + lines[0] = string(body) + + // "field1" ... + if r.doc != nil { + switch t := r.doc.(type) { + default: + body, err := json.Marshal(r.doc) + if err != nil { + return nil, err + } + lines[1] = string(body) + case json.RawMessage: + lines[1] = string(t) + case *json.RawMessage: + lines[1] = string(*t) + case string: + lines[1] = t + case *string: + lines[1] = *t + } + } else { + lines[1] = "{}" + } + + r.source = lines + return lines, nil +} diff --git a/vendor/github.com/olivere/elastic/bulk_index_request_easyjson.go b/vendor/github.com/olivere/elastic/bulk_index_request_easyjson.go new file mode 100644 index 0000000..f879297 --- /dev/null +++ b/vendor/github.com/olivere/elastic/bulk_index_request_easyjson.go @@ -0,0 +1,262 @@ +// Code generated by easyjson for marshaling/unmarshaling. DO NOT EDIT. + +package elastic + +import ( + json "encoding/json" + easyjson "github.com/mailru/easyjson" + jlexer "github.com/mailru/easyjson/jlexer" + jwriter "github.com/mailru/easyjson/jwriter" +) + +// suppress unused package warning +var ( + _ *json.RawMessage + _ *jlexer.Lexer + _ *jwriter.Writer + _ easyjson.Marshaler +) + +func easyjson9de0fcbfDecodeGithubComOlivereElastic(in *jlexer.Lexer, out *bulkIndexRequestCommandOp) { + isTopLevel := in.IsStart() + if in.IsNull() { + if isTopLevel { + in.Consumed() + } + in.Skip() + return + } + in.Delim('{') + for !in.IsDelim('}') { + key := in.UnsafeString() + in.WantColon() + if in.IsNull() { + in.Skip() + in.WantComma() + continue + } + switch key { + case "_index": + out.Index = string(in.String()) + case "_id": + out.Id = string(in.String()) + case "_type": + out.Type = string(in.String()) + case "parent": + out.Parent = string(in.String()) + case "retry_on_conflict": + if in.IsNull() { + in.Skip() + out.RetryOnConflict = nil + } else { + if out.RetryOnConflict == nil { + out.RetryOnConflict = new(int) + } + *out.RetryOnConflict = int(in.Int()) + } + case "routing": + out.Routing = string(in.String()) + case "version": + out.Version = int64(in.Int64()) + case "version_type": + out.VersionType = string(in.String()) + case "pipeline": + out.Pipeline = string(in.String()) + default: + in.SkipRecursive() + } + in.WantComma() + } + in.Delim('}') + if isTopLevel { + in.Consumed() + } +} +func easyjson9de0fcbfEncodeGithubComOlivereElastic(out *jwriter.Writer, in bulkIndexRequestCommandOp) { + out.RawByte('{') + first := true + _ = first + if in.Index != "" { + const prefix string = ",\"_index\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.String(string(in.Index)) + } + if in.Id != "" { + const prefix string = ",\"_id\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.String(string(in.Id)) + } + if in.Type != "" { + const prefix string = ",\"_type\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.String(string(in.Type)) + } + if in.Parent != "" { + const prefix string = ",\"parent\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.String(string(in.Parent)) + } + if in.RetryOnConflict != nil { + const prefix string = ",\"retry_on_conflict\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.Int(int(*in.RetryOnConflict)) + } + if in.Routing != "" { + const prefix string = ",\"routing\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.String(string(in.Routing)) + } + if in.Version != 0 { + const prefix string = ",\"version\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.Int64(int64(in.Version)) + } + if in.VersionType != "" { + const prefix string = ",\"version_type\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.String(string(in.VersionType)) + } + if in.Pipeline != "" { + const prefix string = ",\"pipeline\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.String(string(in.Pipeline)) + } + out.RawByte('}') +} + +// MarshalJSON supports json.Marshaler interface +func (v bulkIndexRequestCommandOp) MarshalJSON() ([]byte, error) { + w := jwriter.Writer{} + easyjson9de0fcbfEncodeGithubComOlivereElastic(&w, v) + return w.Buffer.BuildBytes(), w.Error +} + +// MarshalEasyJSON supports easyjson.Marshaler interface +func (v bulkIndexRequestCommandOp) MarshalEasyJSON(w *jwriter.Writer) { + easyjson9de0fcbfEncodeGithubComOlivereElastic(w, v) +} + +// UnmarshalJSON supports json.Unmarshaler interface +func (v *bulkIndexRequestCommandOp) UnmarshalJSON(data []byte) error { + r := jlexer.Lexer{Data: data} + easyjson9de0fcbfDecodeGithubComOlivereElastic(&r, v) + return r.Error() +} + +// UnmarshalEasyJSON supports easyjson.Unmarshaler interface +func (v *bulkIndexRequestCommandOp) UnmarshalEasyJSON(l *jlexer.Lexer) { + easyjson9de0fcbfDecodeGithubComOlivereElastic(l, v) +} +func easyjson9de0fcbfDecodeGithubComOlivereElastic1(in *jlexer.Lexer, out *bulkIndexRequestCommand) { + isTopLevel := in.IsStart() + if in.IsNull() { + in.Skip() + } else { + in.Delim('{') + if !in.IsDelim('}') { + *out = make(bulkIndexRequestCommand) + } else { + *out = nil + } + for !in.IsDelim('}') { + key := string(in.String()) + in.WantColon() + var v1 bulkIndexRequestCommandOp + (v1).UnmarshalEasyJSON(in) + (*out)[key] = v1 + in.WantComma() + } + in.Delim('}') + } + if isTopLevel { + in.Consumed() + } +} +func easyjson9de0fcbfEncodeGithubComOlivereElastic1(out *jwriter.Writer, in bulkIndexRequestCommand) { + if in == nil && (out.Flags&jwriter.NilMapAsEmpty) == 0 { + out.RawString(`null`) + } else { + out.RawByte('{') + v2First := true + for v2Name, v2Value := range in { + if v2First { + v2First = false + } else { + out.RawByte(',') + } + out.String(string(v2Name)) + out.RawByte(':') + (v2Value).MarshalEasyJSON(out) + } + out.RawByte('}') + } +} + +// MarshalJSON supports json.Marshaler interface +func (v bulkIndexRequestCommand) MarshalJSON() ([]byte, error) { + w := jwriter.Writer{} + easyjson9de0fcbfEncodeGithubComOlivereElastic1(&w, v) + return w.Buffer.BuildBytes(), w.Error +} + +// MarshalEasyJSON supports easyjson.Marshaler interface +func (v bulkIndexRequestCommand) MarshalEasyJSON(w *jwriter.Writer) { + easyjson9de0fcbfEncodeGithubComOlivereElastic1(w, v) +} + +// UnmarshalJSON supports json.Unmarshaler interface +func (v *bulkIndexRequestCommand) UnmarshalJSON(data []byte) error { + r := jlexer.Lexer{Data: data} + easyjson9de0fcbfDecodeGithubComOlivereElastic1(&r, v) + return r.Error() +} + +// UnmarshalEasyJSON supports easyjson.Unmarshaler interface +func (v *bulkIndexRequestCommand) UnmarshalEasyJSON(l *jlexer.Lexer) { + easyjson9de0fcbfDecodeGithubComOlivereElastic1(l, v) +} diff --git a/vendor/github.com/olivere/elastic/bulk_index_request_test.go b/vendor/github.com/olivere/elastic/bulk_index_request_test.go new file mode 100644 index 0000000..79baf51 --- /dev/null +++ b/vendor/github.com/olivere/elastic/bulk_index_request_test.go @@ -0,0 +1,116 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "testing" + "time" +) + +func TestBulkIndexRequestSerialization(t *testing.T) { + tests := []struct { + Request BulkableRequest + Expected []string + }{ + // #0 + { + Request: NewBulkIndexRequest().Index("index1").Type("doc").Id("1"). + Doc(tweet{User: "olivere", Created: time.Date(2014, 1, 18, 23, 59, 58, 0, time.UTC)}), + Expected: []string{ + `{"index":{"_index":"index1","_id":"1","_type":"doc"}}`, + `{"user":"olivere","message":"","retweets":0,"created":"2014-01-18T23:59:58Z"}`, + }, + }, + // #1 + { + Request: NewBulkIndexRequest().OpType("create").Index("index1").Type("doc").Id("1"). + Doc(tweet{User: "olivere", Created: time.Date(2014, 1, 18, 23, 59, 58, 0, time.UTC)}), + Expected: []string{ + `{"create":{"_index":"index1","_id":"1","_type":"doc"}}`, + `{"user":"olivere","message":"","retweets":0,"created":"2014-01-18T23:59:58Z"}`, + }, + }, + // #2 + { + Request: NewBulkIndexRequest().OpType("index").Index("index1").Type("doc").Id("1"). + Doc(tweet{User: "olivere", Created: time.Date(2014, 1, 18, 23, 59, 58, 0, time.UTC)}), + Expected: []string{ + `{"index":{"_index":"index1","_id":"1","_type":"doc"}}`, + `{"user":"olivere","message":"","retweets":0,"created":"2014-01-18T23:59:58Z"}`, + }, + }, + // #3 + { + Request: NewBulkIndexRequest().OpType("index").Index("index1").Type("doc").Id("1").RetryOnConflict(42). + Doc(tweet{User: "olivere", Created: time.Date(2014, 1, 18, 23, 59, 58, 0, time.UTC)}), + Expected: []string{ + `{"index":{"_index":"index1","_id":"1","_type":"doc","retry_on_conflict":42}}`, + `{"user":"olivere","message":"","retweets":0,"created":"2014-01-18T23:59:58Z"}`, + }, + }, + // #4 + { + Request: NewBulkIndexRequest().OpType("index").Index("index1").Type("doc").Id("1").Pipeline("my_pipeline"). + Doc(tweet{User: "olivere", Created: time.Date(2014, 1, 18, 23, 59, 58, 0, time.UTC)}), + Expected: []string{ + `{"index":{"_index":"index1","_id":"1","_type":"doc","pipeline":"my_pipeline"}}`, + `{"user":"olivere","message":"","retweets":0,"created":"2014-01-18T23:59:58Z"}`, + }, + }, + // #5 + { + Request: NewBulkIndexRequest().OpType("index").Index("index1").Type("doc").Id("1"). + Routing("123"). + Doc(tweet{User: "olivere", Created: time.Date(2014, 1, 18, 23, 59, 58, 0, time.UTC)}), + Expected: []string{ + `{"index":{"_index":"index1","_id":"1","_type":"doc","routing":"123"}}`, + `{"user":"olivere","message":"","retweets":0,"created":"2014-01-18T23:59:58Z"}`, + }, + }, + } + + for i, test := range tests { + lines, err := test.Request.Source() + if err != nil { + t.Fatalf("case #%d: expected no error, got: %v", i, err) + } + if lines == nil { + t.Fatalf("case #%d: expected lines, got nil", i) + } + if len(lines) != len(test.Expected) { + t.Fatalf("case #%d: expected %d lines, got %d", i, len(test.Expected), len(lines)) + } + for j, line := range lines { + if line != test.Expected[j] { + t.Errorf("case #%d: expected line #%d to be %s, got: %s", i, j, test.Expected[j], line) + } + } + } +} + +var bulkIndexRequestSerializationResult string + +func BenchmarkBulkIndexRequestSerialization(b *testing.B) { + b.Run("stdlib", func(b *testing.B) { + r := NewBulkIndexRequest().Index(testIndexName).Type("doc").Id("1"). + Doc(tweet{User: "olivere", Created: time.Date(2014, 1, 18, 23, 59, 58, 0, time.UTC)}) + benchmarkBulkIndexRequestSerialization(b, r.UseEasyJSON(false)) + }) + b.Run("easyjson", func(b *testing.B) { + r := NewBulkIndexRequest().Index(testIndexName).Type("doc").Id("1"). + Doc(tweet{User: "olivere", Created: time.Date(2014, 1, 18, 23, 59, 58, 0, time.UTC)}) + benchmarkBulkIndexRequestSerialization(b, r.UseEasyJSON(true)) + }) +} + +func benchmarkBulkIndexRequestSerialization(b *testing.B, r *BulkIndexRequest) { + var s string + for n := 0; n < b.N; n++ { + s = r.String() + r.source = nil // Don't let caching spoil the benchmark + } + bulkIndexRequestSerializationResult = s // ensure the compiler doesn't optimize + b.ReportAllocs() +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/bulk_processor.go b/vendor/github.com/olivere/elastic/bulk_processor.go similarity index 77% rename from vendor/gopkg.in/olivere/elastic.v2/bulk_processor.go rename to vendor/github.com/olivere/elastic/bulk_processor.go index b6c4340..6ee8a3d 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/bulk_processor.go +++ b/vendor/github.com/olivere/elastic/bulk_processor.go @@ -1,15 +1,15 @@ -// Copyright 2012-2016 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. package elastic import ( + "context" + "net" "sync" "sync/atomic" "time" - - "gopkg.in/olivere/elastic.v2/backoff" ) // BulkProcessorService allows to easily process bulk requests. It allows setting @@ -30,28 +30,29 @@ import ( // Elasticsearch Java API as documented in // https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-docs-bulk-processor.html. type BulkProcessorService struct { - c *Client - beforeFn BulkBeforeFunc - afterFn BulkAfterFunc - name string // name of processor - numWorkers int // # of workers (>= 1) - bulkActions int // # of requests after which to commit - bulkSize int // # of bytes after which to commit - flushInterval time.Duration // periodic flush interval - wantStats bool // indicates whether to gather statistics - initialTimeout time.Duration // initial wait time before retry on errors - maxTimeout time.Duration // max time to wait for retry on errors + c *Client + beforeFn BulkBeforeFunc + afterFn BulkAfterFunc + name string // name of processor + numWorkers int // # of workers (>= 1) + bulkActions int // # of requests after which to commit + bulkSize int // # of bytes after which to commit + flushInterval time.Duration // periodic flush interval + wantStats bool // indicates whether to gather statistics + backoff Backoff // a custom Backoff to use for errors } // NewBulkProcessorService creates a new BulkProcessorService. func NewBulkProcessorService(client *Client) *BulkProcessorService { return &BulkProcessorService{ - c: client, - numWorkers: 1, - bulkActions: 1000, - bulkSize: 5 << 20, // 5 MB - initialTimeout: time.Duration(200) * time.Millisecond, - maxTimeout: time.Duration(10000) * time.Millisecond, + c: client, + numWorkers: 1, + bulkActions: 1000, + bulkSize: 5 << 20, // 5 MB + backoff: NewExponentialBackoff( + time.Duration(200)*time.Millisecond, + time.Duration(10000)*time.Millisecond, + ), } } @@ -121,6 +122,12 @@ func (s *BulkProcessorService) Stats(wantStats bool) *BulkProcessorService { return s } +// Backoff sets the backoff strategy to use for errors. +func (s *BulkProcessorService) Backoff(backoff Backoff) *BulkProcessorService { + s.backoff = backoff + return s +} + // Do creates a new BulkProcessor and starts it. // Consider the BulkProcessor as a running instance that accepts bulk requests // and commits them to Elasticsearch, spreading the work across one or more @@ -129,9 +136,14 @@ func (s *BulkProcessorService) Stats(wantStats bool) *BulkProcessorService { // You can interoperate with the BulkProcessor returned by Do, e.g. Start and // Stop (or Close) it. // +// Context is an optional context that is passed into the bulk request +// service calls. In contrast to other operations, this context is used in +// a long running process. You could use it to pass e.g. loggers, but you +// shouldn't use it for cancellation. +// // Calling Do several times returns new BulkProcessors. You probably don't // want to do this. BulkProcessorService implements just a builder pattern. -func (s *BulkProcessorService) Do() (*BulkProcessor, error) { +func (s *BulkProcessorService) Do(ctx context.Context) (*BulkProcessor, error) { p := newBulkProcessor( s.c, s.beforeFn, @@ -142,10 +154,9 @@ func (s *BulkProcessorService) Do() (*BulkProcessor, error) { s.bulkSize, s.flushInterval, s.wantStats, - s.initialTimeout, - s.maxTimeout) + s.backoff) - err := p.Start() + err := p.Start(ctx) if err != nil { return nil, err } @@ -217,28 +228,29 @@ func (st *BulkProcessorWorkerStats) dup() *BulkProcessorWorkerStats { // BulkProcessor is returned by setting up a BulkProcessorService and // calling the Do method. type BulkProcessor struct { - c *Client - beforeFn BulkBeforeFunc - afterFn BulkAfterFunc - name string - bulkActions int - bulkSize int - numWorkers int - executionId int64 - requestsC chan BulkableRequest - workerWg sync.WaitGroup - workers []*bulkWorker - flushInterval time.Duration - flusherStopC chan struct{} - wantStats bool - initialTimeout time.Duration // initial wait time before retry on errors - maxTimeout time.Duration // max time to wait for retry on errors + c *Client + beforeFn BulkBeforeFunc + afterFn BulkAfterFunc + name string + bulkActions int + bulkSize int + numWorkers int + executionId int64 + requestsC chan BulkableRequest + workerWg sync.WaitGroup + workers []*bulkWorker + flushInterval time.Duration + flusherStopC chan struct{} + wantStats bool + backoff Backoff startedMu sync.Mutex // guards the following block started bool statsMu sync.Mutex // guards the following block stats *BulkProcessorStats + + stopReconnC chan struct{} // channel to signal stop reconnection attempts } func newBulkProcessor( @@ -251,26 +263,24 @@ func newBulkProcessor( bulkSize int, flushInterval time.Duration, wantStats bool, - initialTimeout time.Duration, - maxTimeout time.Duration) *BulkProcessor { + backoff Backoff) *BulkProcessor { return &BulkProcessor{ - c: client, - beforeFn: beforeFn, - afterFn: afterFn, - name: name, - numWorkers: numWorkers, - bulkActions: bulkActions, - bulkSize: bulkSize, - flushInterval: flushInterval, - wantStats: wantStats, - initialTimeout: initialTimeout, - maxTimeout: maxTimeout, + c: client, + beforeFn: beforeFn, + afterFn: afterFn, + name: name, + numWorkers: numWorkers, + bulkActions: bulkActions, + bulkSize: bulkSize, + flushInterval: flushInterval, + wantStats: wantStats, + backoff: backoff, } } // Start starts the bulk processor. If the processor is already started, // nil is returned. -func (p *BulkProcessor) Start() error { +func (p *BulkProcessor) Start(ctx context.Context) error { p.startedMu.Lock() defer p.startedMu.Unlock() @@ -286,13 +296,14 @@ func (p *BulkProcessor) Start() error { p.requestsC = make(chan BulkableRequest) p.executionId = 0 p.stats = newBulkProcessorStats(p.numWorkers) + p.stopReconnC = make(chan struct{}) // Create and start up workers. p.workers = make([]*bulkWorker, p.numWorkers) for i := 0; i < p.numWorkers; i++ { p.workerWg.Add(1) p.workers[i] = newBulkWorker(p, i) - go p.workers[i].work() + go p.workers[i].work(ctx) } // Start the ticker for flush (if enabled) @@ -324,6 +335,12 @@ func (p *BulkProcessor) Close() error { return nil } + // Tell connection checkers to stop + if p.stopReconnC != nil { + close(p.stopReconnC) + p.stopReconnC = nil + } + // Stop flusher (if enabled) if p.flusherStopC != nil { p.flusherStopC <- struct{}{} @@ -420,7 +437,7 @@ func newBulkWorker(p *BulkProcessor, i int) *bulkWorker { // work waits for bulk requests and manual flush calls on the respective // channels and is invoked as a goroutine when the bulk processor is started. -func (w *bulkWorker) work() { +func (w *bulkWorker) work(ctx context.Context) { defer func() { w.p.workerWg.Done() close(w.flushAckC) @@ -429,47 +446,61 @@ func (w *bulkWorker) work() { var stop bool for !stop { + var err error select { case req, open := <-w.p.requestsC: if open { // Received a new request w.service.Add(req) if w.commitRequired() { - w.commit() // TODO swallow errors here? + err = w.commit(ctx) } } else { // Channel closed: Stop. stop = true if w.service.NumberOfActions() > 0 { - w.commit() // TODO swallow errors here? + err = w.commit(ctx) } } case <-w.flushC: // Commit outstanding requests if w.service.NumberOfActions() > 0 { - w.commit() // TODO swallow errors here? + err = w.commit(ctx) } w.flushAckC <- struct{}{} } + if !stop && err != nil { + waitForActive := func() { + // Add back pressure to prevent Add calls from filling up the request queue + ready := make(chan struct{}) + go w.waitForActiveConnection(ready) + <-ready + } + if _, ok := err.(net.Error); ok { + waitForActive() + } else if IsConnErr(err) { + waitForActive() + } + } } } // commit commits the bulk requests in the given service, // invoking callbacks as specified. -func (w *bulkWorker) commit() error { +func (w *bulkWorker) commit(ctx context.Context) error { var res *BulkResponse // commitFunc will commit bulk requests and, on failure, be retried // via exponential backoff commitFunc := func() error { var err error - res, err = w.service.Do() + res, err = w.service.Do(ctx) return err } // notifyFunc will be called if retry fails - notifyFunc := func(err error, d time.Duration) { - w.p.c.errorf("elastic: bulk processor %q failed but will retry in %v: %v", w.p.name, d, err) + notifyFunc := func(err error) { + w.p.c.errorf("elastic: bulk processor %q failed but may retry: %v", w.p.name, err) } id := atomic.AddInt64(&w.p.executionId, 1) @@ -490,8 +521,7 @@ func (w *bulkWorker) commit() error { } // Commit bulk requests - policy := backoff.NewExponentialBackoff(w.p.initialTimeout, w.p.maxTimeout).SendStop(true) - err := backoff.RetryNotify(commitFunc, policy, notifyFunc) + err := RetryNotify(commitFunc, w.p.backoff, notifyFunc) w.updateStats(res) if err != nil { w.p.c.errorf("elastic: bulk processor %q failed: %v", w.p.name, err) @@ -505,6 +535,35 @@ func (w *bulkWorker) commit() error { return err } +func (w *bulkWorker) waitForActiveConnection(ready chan<- struct{}) { + defer close(ready) + + t := time.NewTicker(5 * time.Second) + defer t.Stop() + + client := w.p.c + stopReconnC := w.p.stopReconnC + w.p.c.errorf("elastic: bulk processor %q is waiting for an active connection", w.p.name) + + // loop until a health check finds at least 1 active connection or the reconnection channel is closed + for { + select { + case _, ok := <-stopReconnC: + if !ok { + w.p.c.errorf("elastic: bulk processor %q active connection check interrupted", w.p.name) + return + } + case <-t.C: + client.healthcheck(time.Duration(3)*time.Second, true) + if client.mustActiveConn() == nil { + // found an active connection + // exit and signal done to the WaitGroup + return + } + } + } +} + func (w *bulkWorker) updateStats(res *BulkResponse) { // Update stats if res != nil { diff --git a/vendor/gopkg.in/olivere/elastic.v2/bulk_processor_test.go b/vendor/github.com/olivere/elastic/bulk_processor_test.go similarity index 89% rename from vendor/gopkg.in/olivere/elastic.v2/bulk_processor_test.go rename to vendor/github.com/olivere/elastic/bulk_processor_test.go index 6378842..bb97ca2 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/bulk_processor_test.go +++ b/vendor/github.com/olivere/elastic/bulk_processor_test.go @@ -1,10 +1,11 @@ -// Copyright 2012-2016 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. package elastic import ( + "context" "fmt" "math/rand" "sync/atomic" @@ -37,6 +38,9 @@ func TestBulkProcessorDefaults(t *testing.T) { if got, want := p.wantStats, false; got != want { t.Errorf("expected %v; got: %v", want, got) } + if p.backoff == nil { + t.Fatalf("expected non-nill backoff; got: %v", p.backoff) + } } func TestBulkProcessorCommitOnBulkActions(t *testing.T) { @@ -116,7 +120,7 @@ func TestBulkProcessorBasedOnFlushInterval(t *testing.T) { Before(beforeFn). After(afterFn) - p, err := svc.Do() + p, err := svc.Do(context.Background()) if err != nil { t.Fatal(err) } @@ -125,7 +129,7 @@ func TestBulkProcessorBasedOnFlushInterval(t *testing.T) { for i := 1; i <= numDocs; i++ { tweet := tweet{User: "olivere", Message: fmt.Sprintf("%d. %s", i, randomString(rand.Intn(64)))} - request := NewBulkIndexRequest().Index(testIndexName).Type("tweet").Id(fmt.Sprintf("%d", i)).Doc(tweet) + request := NewBulkIndexRequest().Index(testIndexName).Type("doc").Id(fmt.Sprintf("%d", i)).Doc(tweet) p.Add(request) } @@ -157,11 +161,11 @@ func TestBulkProcessorBasedOnFlushInterval(t *testing.T) { } // Check number of documents that were bulk indexed - _, err = p.c.Flush(testIndexName).Do() + _, err = p.c.Flush(testIndexName).Do(context.TODO()) if err != nil { t.Fatal(err) } - count, err := p.c.Count(testIndexName).Do() + count, err := p.c.Count(testIndexName).Do(context.TODO()) if err != nil { t.Fatal(err) } @@ -199,7 +203,7 @@ func TestBulkProcessorClose(t *testing.T) { BulkSize(-1). FlushInterval(30 * time.Second). // 30 seconds to flush Before(beforeFn).After(afterFn). - Do() + Do(context.Background()) if err != nil { t.Fatal(err) } @@ -208,7 +212,7 @@ func TestBulkProcessorClose(t *testing.T) { for i := 1; i <= numDocs; i++ { tweet := tweet{User: "olivere", Message: fmt.Sprintf("%d. %s", i, randomString(rand.Intn(64)))} - request := NewBulkIndexRequest().Index(testIndexName).Type("tweet").Id(fmt.Sprintf("%d", i)).Doc(tweet) + request := NewBulkIndexRequest().Index(testIndexName).Type("doc").Id(fmt.Sprintf("%d", i)).Doc(tweet) p.Add(request) } @@ -241,11 +245,11 @@ func TestBulkProcessorClose(t *testing.T) { } // Check number of documents that were bulk indexed - _, err = p.c.Flush(testIndexName).Do() + _, err = p.c.Flush(testIndexName).Do(context.TODO()) if err != nil { t.Fatal(err) } - count, err := p.c.Count(testIndexName).Do() + count, err := p.c.Count(testIndexName).Do(context.TODO()) if err != nil { t.Fatal(err) } @@ -265,7 +269,7 @@ func TestBulkProcessorFlush(t *testing.T) { BulkSize(-1). FlushInterval(30 * time.Second). // 30 seconds to flush Stats(true). - Do() + Do(context.Background()) if err != nil { t.Fatal(err) } @@ -274,7 +278,7 @@ func TestBulkProcessorFlush(t *testing.T) { for i := 1; i <= numDocs; i++ { tweet := tweet{User: "olivere", Message: fmt.Sprintf("%d. %s", i, randomString(rand.Intn(64)))} - request := NewBulkIndexRequest().Index(testIndexName).Type("tweet").Id(fmt.Sprintf("%d", i)).Doc(tweet) + request := NewBulkIndexRequest().Index(testIndexName).Type("doc").Id(fmt.Sprintf("%d", i)).Doc(tweet) p.Add(request) } @@ -314,11 +318,11 @@ func TestBulkProcessorFlush(t *testing.T) { } // Check number of documents that were bulk indexed - _, err = p.c.Flush(testIndexName).Do() + _, err = p.c.Flush(testIndexName).Do(context.TODO()) if err != nil { t.Fatal(err) } - count, err := p.c.Count(testIndexName).Do() + count, err := p.c.Count(testIndexName).Do(context.TODO()) if err != nil { t.Fatal(err) } @@ -348,14 +352,14 @@ func testBulkProcessor(t *testing.T, numDocs int, svc *BulkProcessorService) { atomic.AddInt64(&afterRequests, int64(len(requests))) } - p, err := svc.Before(beforeFn).After(afterFn).Stats(true).Do() + p, err := svc.Before(beforeFn).After(afterFn).Stats(true).Do(context.Background()) if err != nil { t.Fatal(err) } for i := 1; i <= numDocs; i++ { tweet := tweet{User: "olivere", Message: fmt.Sprintf("%07d. %s", i, randomString(1+rand.Intn(63)))} - request := NewBulkIndexRequest().Index(testIndexName).Type("tweet").Id(fmt.Sprintf("%d", i)).Doc(tweet) + request := NewBulkIndexRequest().Index(testIndexName).Type("doc").Id(fmt.Sprintf("%d", i)).Doc(tweet) p.Add(request) } @@ -407,11 +411,11 @@ func testBulkProcessor(t *testing.T, numDocs int, svc *BulkProcessorService) { } // Check number of documents that were bulk indexed - _, err = p.c.Flush(testIndexName).Do() + _, err = p.c.Flush(testIndexName).Do(context.TODO()) if err != nil { t.Fatal(err) } - count, err := p.c.Count(testIndexName).Do() + count, err := p.c.Count(testIndexName).Do(context.TODO()) if err != nil { t.Fatal(err) } @@ -419,13 +423,3 @@ func testBulkProcessor(t *testing.T, numDocs int, svc *BulkProcessorService) { t.Fatalf("expected %d documents; got: %d", numDocs, count) } } - -var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") - -func randomString(n int) string { - b := make([]rune, n) - for i := range b { - b[i] = letters[rand.Intn(len(letters))] - } - return string(b) -} diff --git a/vendor/github.com/olivere/elastic/bulk_request.go b/vendor/github.com/olivere/elastic/bulk_request.go new file mode 100644 index 0000000..ce3bf07 --- /dev/null +++ b/vendor/github.com/olivere/elastic/bulk_request.go @@ -0,0 +1,17 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "fmt" +) + +// -- Bulkable request (index/update/delete) -- + +// BulkableRequest is a generic interface to bulkable requests. +type BulkableRequest interface { + fmt.Stringer + Source() ([]string, error) +} diff --git a/vendor/github.com/olivere/elastic/bulk_test.go b/vendor/github.com/olivere/elastic/bulk_test.go new file mode 100644 index 0000000..f31ed66 --- /dev/null +++ b/vendor/github.com/olivere/elastic/bulk_test.go @@ -0,0 +1,600 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "math/rand" + "net/http" + "net/http/httptest" + "testing" +) + +func TestBulk(t *testing.T) { + client := setupTestClientAndCreateIndex(t) //, SetTraceLog(log.New(os.Stdout, "", 0))) + + tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} + tweet2 := tweet{User: "sandrae", Message: "Dancing all night long. Yeah."} + + index1Req := NewBulkIndexRequest().Index(testIndexName).Type("doc").Id("1").Doc(tweet1) + index2Req := NewBulkIndexRequest().Index(testIndexName).Type("doc").Id("2").Doc(tweet2) + delete1Req := NewBulkDeleteRequest().Index(testIndexName).Type("doc").Id("1") + + bulkRequest := client.Bulk() + bulkRequest = bulkRequest.Add(index1Req) + bulkRequest = bulkRequest.Add(index2Req) + bulkRequest = bulkRequest.Add(delete1Req) + + if bulkRequest.NumberOfActions() != 3 { + t.Errorf("expected bulkRequest.NumberOfActions %d; got %d", 3, bulkRequest.NumberOfActions()) + } + + bulkResponse, err := bulkRequest.Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if bulkResponse == nil { + t.Errorf("expected bulkResponse to be != nil; got nil") + } + + if bulkRequest.NumberOfActions() != 0 { + t.Errorf("expected bulkRequest.NumberOfActions %d; got %d", 0, bulkRequest.NumberOfActions()) + } + + // Document with Id="1" should not exist + exists, err := client.Exists().Index(testIndexName).Type("doc").Id("1").Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if exists { + t.Errorf("expected exists %v; got %v", false, exists) + } + + // Document with Id="2" should exist + exists, err = client.Exists().Index(testIndexName).Type("doc").Id("2").Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if !exists { + t.Errorf("expected exists %v; got %v", true, exists) + } + + // Update + updateDoc := struct { + Retweets int `json:"retweets"` + }{ + 42, + } + update1Req := NewBulkUpdateRequest().Index(testIndexName).Type("doc").Id("2").Doc(&updateDoc) + bulkRequest = client.Bulk() + bulkRequest = bulkRequest.Add(update1Req) + + if bulkRequest.NumberOfActions() != 1 { + t.Errorf("expected bulkRequest.NumberOfActions %d; got %d", 1, bulkRequest.NumberOfActions()) + } + + bulkResponse, err = bulkRequest.Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if bulkResponse == nil { + t.Errorf("expected bulkResponse to be != nil; got nil") + } + + if bulkRequest.NumberOfActions() != 0 { + t.Errorf("expected bulkRequest.NumberOfActions %d; got %d", 0, bulkRequest.NumberOfActions()) + } + + // Document with Id="1" should have a retweets count of 42 + doc, err := client.Get().Index(testIndexName).Type("doc").Id("2").Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if doc == nil { + t.Fatal("expected doc to be != nil; got nil") + } + if !doc.Found { + t.Fatalf("expected doc to be found; got found = %v", doc.Found) + } + if doc.Source == nil { + t.Fatal("expected doc source to be != nil; got nil") + } + var updatedTweet tweet + err = json.Unmarshal(*doc.Source, &updatedTweet) + if err != nil { + t.Fatal(err) + } + if updatedTweet.Retweets != 42 { + t.Errorf("expected updated tweet retweets = %v; got %v", 42, updatedTweet.Retweets) + } + + // Update with script + update2Req := NewBulkUpdateRequest().Index(testIndexName).Type("doc").Id("2"). + RetryOnConflict(3). + Script(NewScript("ctx._source.retweets += params.v").Param("v", 1)) + bulkRequest = client.Bulk() + bulkRequest = bulkRequest.Add(update2Req) + if bulkRequest.NumberOfActions() != 1 { + t.Errorf("expected bulkRequest.NumberOfActions %d; got %d", 1, bulkRequest.NumberOfActions()) + } + bulkResponse, err = bulkRequest.Refresh("wait_for").Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if bulkResponse == nil { + t.Errorf("expected bulkResponse to be != nil; got nil") + } + + if bulkRequest.NumberOfActions() != 0 { + t.Errorf("expected bulkRequest.NumberOfActions %d; got %d", 0, bulkRequest.NumberOfActions()) + } + + // Document with Id="1" should have a retweets count of 43 + doc, err = client.Get().Index(testIndexName).Type("doc").Id("2").Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if doc == nil { + t.Fatal("expected doc to be != nil; got nil") + } + if !doc.Found { + t.Fatalf("expected doc to be found; got found = %v", doc.Found) + } + if doc.Source == nil { + t.Fatal("expected doc source to be != nil; got nil") + } + err = json.Unmarshal(*doc.Source, &updatedTweet) + if err != nil { + t.Fatal(err) + } + if updatedTweet.Retweets != 43 { + t.Errorf("expected updated tweet retweets = %v; got %v", 43, updatedTweet.Retweets) + } +} + +func TestBulkWithIndexSetOnClient(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} + tweet2 := tweet{User: "sandrae", Message: "Dancing all night long. Yeah."} + + index1Req := NewBulkIndexRequest().Index(testIndexName).Type("doc").Id("1").Doc(tweet1).Routing("1") + index2Req := NewBulkIndexRequest().Index(testIndexName).Type("doc").Id("2").Doc(tweet2) + delete1Req := NewBulkDeleteRequest().Index(testIndexName).Type("doc").Id("1") + + bulkRequest := client.Bulk().Index(testIndexName).Type("doc") + bulkRequest = bulkRequest.Add(index1Req) + bulkRequest = bulkRequest.Add(index2Req) + bulkRequest = bulkRequest.Add(delete1Req) + + if bulkRequest.NumberOfActions() != 3 { + t.Errorf("expected bulkRequest.NumberOfActions %d; got %d", 3, bulkRequest.NumberOfActions()) + } + + bulkResponse, err := bulkRequest.Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if bulkResponse == nil { + t.Errorf("expected bulkResponse to be != nil; got nil") + } + + // Document with Id="1" should not exist + exists, err := client.Exists().Index(testIndexName).Type("doc").Id("1").Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if exists { + t.Errorf("expected exists %v; got %v", false, exists) + } + + // Document with Id="2" should exist + exists, err = client.Exists().Index(testIndexName).Type("doc").Id("2").Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if !exists { + t.Errorf("expected exists %v; got %v", true, exists) + } +} + +func TestBulkIndexDeleteUpdate(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + //client := setupTestClientAndCreateIndexAndLog(t) + + tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} + tweet2 := tweet{User: "sandrae", Message: "Dancing all night long. Yeah."} + + index1Req := NewBulkIndexRequest().Index(testIndexName).Type("doc").Id("1").Doc(tweet1) + index2Req := NewBulkIndexRequest().OpType("create").Index(testIndexName).Type("doc").Id("2").Doc(tweet2) + delete1Req := NewBulkDeleteRequest().Index(testIndexName).Type("doc").Id("1") + update2Req := NewBulkUpdateRequest().Index(testIndexName).Type("doc").Id("2"). + ReturnSource(true). + Doc(struct { + Retweets int `json:"retweets"` + }{ + Retweets: 42, + }) + + bulkRequest := client.Bulk() + bulkRequest = bulkRequest.Add(index1Req) + bulkRequest = bulkRequest.Add(index2Req) + bulkRequest = bulkRequest.Add(delete1Req) + bulkRequest = bulkRequest.Add(update2Req) + + if bulkRequest.NumberOfActions() != 4 { + t.Errorf("expected bulkRequest.NumberOfActions %d; got %d", 4, bulkRequest.NumberOfActions()) + } + + expected := `{"index":{"_index":"` + testIndexName + `","_id":"1","_type":"doc"}} +{"user":"olivere","message":"Welcome to Golang and Elasticsearch.","retweets":0,"created":"0001-01-01T00:00:00Z"} +{"create":{"_index":"` + testIndexName + `","_id":"2","_type":"doc"}} +{"user":"sandrae","message":"Dancing all night long. Yeah.","retweets":0,"created":"0001-01-01T00:00:00Z"} +{"delete":{"_index":"` + testIndexName + `","_type":"doc","_id":"1"}} +{"update":{"_index":"` + testIndexName + `","_type":"doc","_id":"2"}} +{"doc":{"retweets":42},"_source":true} +` + got, err := bulkRequest.bodyAsString() + if err != nil { + t.Fatalf("expected no error, got: %v", err) + } + if got != expected { + t.Errorf("expected\n%s\ngot:\n%s", expected, got) + } + + // Run the bulk request + bulkResponse, err := bulkRequest.Pretty(true).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if bulkResponse == nil { + t.Errorf("expected bulkResponse to be != nil; got nil") + } + if bulkResponse.Took == 0 { + t.Errorf("expected took to be > 0; got %d", bulkResponse.Took) + } + if bulkResponse.Errors { + t.Errorf("expected errors to be %v; got %v", false, bulkResponse.Errors) + } + if len(bulkResponse.Items) != 4 { + t.Fatalf("expected 4 result items; got %d", len(bulkResponse.Items)) + } + + // Indexed actions + indexed := bulkResponse.Indexed() + if indexed == nil { + t.Fatal("expected indexed to be != nil; got nil") + } + if len(indexed) != 1 { + t.Fatalf("expected len(indexed) == %d; got %d", 1, len(indexed)) + } + if indexed[0].Id != "1" { + t.Errorf("expected indexed[0].Id == %s; got %s", "1", indexed[0].Id) + } + if indexed[0].Status != 201 { + t.Errorf("expected indexed[0].Status == %d; got %d", 201, indexed[0].Status) + } + + // Created actions + created := bulkResponse.Created() + if created == nil { + t.Fatal("expected created to be != nil; got nil") + } + if len(created) != 1 { + t.Fatalf("expected len(created) == %d; got %d", 1, len(created)) + } + if created[0].Id != "2" { + t.Errorf("expected created[0].Id == %s; got %s", "2", created[0].Id) + } + if created[0].Status != 201 { + t.Errorf("expected created[0].Status == %d; got %d", 201, created[0].Status) + } + if want, have := "created", created[0].Result; want != have { + t.Errorf("expected created[0].Result == %q; got %q", want, have) + } + + // Deleted actions + deleted := bulkResponse.Deleted() + if deleted == nil { + t.Fatal("expected deleted to be != nil; got nil") + } + if len(deleted) != 1 { + t.Fatalf("expected len(deleted) == %d; got %d", 1, len(deleted)) + } + if deleted[0].Id != "1" { + t.Errorf("expected deleted[0].Id == %s; got %s", "1", deleted[0].Id) + } + if deleted[0].Status != 200 { + t.Errorf("expected deleted[0].Status == %d; got %d", 200, deleted[0].Status) + } + if want, have := "deleted", deleted[0].Result; want != have { + t.Errorf("expected deleted[0].Result == %q; got %q", want, have) + } + + // Updated actions + updated := bulkResponse.Updated() + if updated == nil { + t.Fatal("expected updated to be != nil; got nil") + } + if len(updated) != 1 { + t.Fatalf("expected len(updated) == %d; got %d", 1, len(updated)) + } + if updated[0].Id != "2" { + t.Errorf("expected updated[0].Id == %s; got %s", "2", updated[0].Id) + } + if updated[0].Status != 200 { + t.Errorf("expected updated[0].Status == %d; got %d", 200, updated[0].Status) + } + if updated[0].Version != 2 { + t.Errorf("expected updated[0].Version == %d; got %d", 2, updated[0].Version) + } + if want, have := "updated", updated[0].Result; want != have { + t.Errorf("expected updated[0].Result == %q; got %q", want, have) + } + if updated[0].GetResult == nil { + t.Fatalf("expected updated[0].GetResult to be != nil; got nil") + } + if updated[0].GetResult.Source == nil { + t.Fatalf("expected updated[0].GetResult.Source to be != nil; got nil") + } + if want, have := true, updated[0].GetResult.Found; want != have { + t.Fatalf("expected updated[0].GetResult.Found to be != %v; got %v", want, have) + } + var doc tweet + if err := json.Unmarshal(*updated[0].GetResult.Source, &doc); err != nil { + t.Fatalf("expected to unmarshal updated[0].GetResult.Source; got %v", err) + } + if want, have := 42, doc.Retweets; want != have { + t.Fatalf("expected updated tweet to have Retweets = %v; got %v", want, have) + } + + // Succeeded actions + succeeded := bulkResponse.Succeeded() + if succeeded == nil { + t.Fatal("expected succeeded to be != nil; got nil") + } + if len(succeeded) != 4 { + t.Fatalf("expected len(succeeded) == %d; got %d", 4, len(succeeded)) + } + + // ById + id1Results := bulkResponse.ById("1") + if id1Results == nil { + t.Fatal("expected id1Results to be != nil; got nil") + } + if len(id1Results) != 2 { + t.Fatalf("expected len(id1Results) == %d; got %d", 2, len(id1Results)) + } + if id1Results[0].Id != "1" { + t.Errorf("expected id1Results[0].Id == %s; got %s", "1", id1Results[0].Id) + } + if id1Results[0].Status != 201 { + t.Errorf("expected id1Results[0].Status == %d; got %d", 201, id1Results[0].Status) + } + if id1Results[0].Version != 1 { + t.Errorf("expected id1Results[0].Version == %d; got %d", 1, id1Results[0].Version) + } + if id1Results[1].Id != "1" { + t.Errorf("expected id1Results[1].Id == %s; got %s", "1", id1Results[1].Id) + } + if id1Results[1].Status != 200 { + t.Errorf("expected id1Results[1].Status == %d; got %d", 200, id1Results[1].Status) + } + if id1Results[1].Version != 2 { + t.Errorf("expected id1Results[1].Version == %d; got %d", 2, id1Results[1].Version) + } +} + +func TestFailedBulkRequests(t *testing.T) { + js := `{ + "took" : 2, + "errors" : true, + "items" : [ { + "index" : { + "_index" : "elastic-test", + "_type" : "doc", + "_id" : "1", + "_version" : 1, + "status" : 201 + } + }, { + "create" : { + "_index" : "elastic-test", + "_type" : "doc", + "_id" : "2", + "_version" : 1, + "status" : 423, + "error" : { + "type":"routing_missing_exception", + "reason":"routing is required for [elastic-test2]/[comment]/[1]" + } + } + }, { + "delete" : { + "_index" : "elastic-test", + "_type" : "doc", + "_id" : "1", + "_version" : 2, + "status" : 404, + "found" : false + } + }, { + "update" : { + "_index" : "elastic-test", + "_type" : "doc", + "_id" : "2", + "_version" : 2, + "status" : 200 + } + } ] +}` + + var resp BulkResponse + err := json.Unmarshal([]byte(js), &resp) + if err != nil { + t.Fatal(err) + } + failed := resp.Failed() + if len(failed) != 2 { + t.Errorf("expected %d failed items; got: %d", 2, len(failed)) + } +} + +func TestBulkEstimatedSizeInBytes(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} + tweet2 := tweet{User: "sandrae", Message: "Dancing all night long. Yeah."} + + index1Req := NewBulkIndexRequest().Index(testIndexName).Type("doc").Id("1").Doc(tweet1) + index2Req := NewBulkIndexRequest().OpType("create").Index(testIndexName).Type("doc").Id("2").Doc(tweet2) + delete1Req := NewBulkDeleteRequest().Index(testIndexName).Type("doc").Id("1") + update2Req := NewBulkUpdateRequest().Index(testIndexName).Type("doc").Id("2"). + Doc(struct { + Retweets int `json:"retweets"` + }{ + Retweets: 42, + }) + + bulkRequest := client.Bulk() + bulkRequest = bulkRequest.Add(index1Req) + bulkRequest = bulkRequest.Add(index2Req) + bulkRequest = bulkRequest.Add(delete1Req) + bulkRequest = bulkRequest.Add(update2Req) + + if bulkRequest.NumberOfActions() != 4 { + t.Errorf("expected bulkRequest.NumberOfActions %d; got %d", 4, bulkRequest.NumberOfActions()) + } + + // The estimated size of the bulk request in bytes must be at least + // the length of the body request. + raw, err := bulkRequest.bodyAsString() + if err != nil { + t.Fatal(err) + } + rawlen := int64(len([]byte(raw))) + + if got, want := bulkRequest.EstimatedSizeInBytes(), rawlen; got < want { + t.Errorf("expected an EstimatedSizeInBytes = %d; got: %v", want, got) + } + + // Reset should also reset the calculated estimated byte size + bulkRequest.reset() + + if got, want := bulkRequest.EstimatedSizeInBytes(), int64(0); got != want { + t.Errorf("expected an EstimatedSizeInBytes = %d; got: %v", want, got) + } +} + +func TestBulkEstimateSizeInBytesLength(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + s := client.Bulk() + r := NewBulkDeleteRequest().Index(testIndexName).Type("doc").Id("1") + s = s.Add(r) + if got, want := s.estimateSizeInBytes(r), int64(1+len(r.String())); got != want { + t.Fatalf("expected %d; got: %d", want, got) + } +} + +func TestBulkContentType(t *testing.T) { + var header http.Header + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + header = r.Header + fmt.Fprintln(w, `{}`) + })) + defer ts.Close() + + client, err := NewSimpleClient(SetURL(ts.URL)) + if err != nil { + t.Fatal(err) + } + indexReq := NewBulkIndexRequest().Index(testIndexName).Type("doc").Id("1").Doc(tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."}) + if _, err := client.Bulk().Add(indexReq).Do(context.Background()); err != nil { + t.Fatal(err) + } + if header == nil { + t.Fatalf("expected header, got %v", header) + } + if want, have := "application/x-ndjson", header.Get("Content-Type"); want != have { + t.Fatalf("Content-Type: want %q, have %q", want, have) + } +} + +// -- Benchmarks -- + +var benchmarkBulkEstimatedSizeInBytes int64 + +func BenchmarkBulkEstimatedSizeInBytesWith1Request(b *testing.B) { + client := setupTestClientAndCreateIndex(b) + s := client.Bulk() + var result int64 + for n := 0; n < b.N; n++ { + s = s.Add(NewBulkIndexRequest().Index(testIndexName).Type("doc").Id("1").Doc(struct{ A string }{"1"})) + s = s.Add(NewBulkUpdateRequest().Index(testIndexName).Type("doc").Id("1").Doc(struct{ A string }{"2"})) + s = s.Add(NewBulkDeleteRequest().Index(testIndexName).Type("doc").Id("1")) + result = s.EstimatedSizeInBytes() + s.reset() + } + b.ReportAllocs() + benchmarkBulkEstimatedSizeInBytes = result // ensure the compiler doesn't optimize +} + +func BenchmarkBulkEstimatedSizeInBytesWith100Requests(b *testing.B) { + client := setupTestClientAndCreateIndex(b) + s := client.Bulk() + var result int64 + for n := 0; n < b.N; n++ { + for i := 0; i < 100; i++ { + s = s.Add(NewBulkIndexRequest().Index(testIndexName).Type("doc").Id("1").Doc(struct{ A string }{"1"})) + s = s.Add(NewBulkUpdateRequest().Index(testIndexName).Type("doc").Id("1").Doc(struct{ A string }{"2"})) + s = s.Add(NewBulkDeleteRequest().Index(testIndexName).Type("doc").Id("1")) + } + result = s.EstimatedSizeInBytes() + s.reset() + } + b.ReportAllocs() + benchmarkBulkEstimatedSizeInBytes = result // ensure the compiler doesn't optimize +} + +func BenchmarkBulkAllocs(b *testing.B) { + b.Run("1000 docs with 64 byte", func(b *testing.B) { benchmarkBulkAllocs(b, 64, 1000) }) + b.Run("1000 docs with 1 KiB", func(b *testing.B) { benchmarkBulkAllocs(b, 1024, 1000) }) + b.Run("1000 docs with 4 KiB", func(b *testing.B) { benchmarkBulkAllocs(b, 4096, 1000) }) + b.Run("1000 docs with 16 KiB", func(b *testing.B) { benchmarkBulkAllocs(b, 16*1024, 1000) }) + b.Run("1000 docs with 64 KiB", func(b *testing.B) { benchmarkBulkAllocs(b, 64*1024, 1000) }) + b.Run("1000 docs with 256 KiB", func(b *testing.B) { benchmarkBulkAllocs(b, 256*1024, 1000) }) + b.Run("1000 docs with 1 MiB", func(b *testing.B) { benchmarkBulkAllocs(b, 1024*1024, 1000) }) +} + +const ( + charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-" +) + +func benchmarkBulkAllocs(b *testing.B, size, num int) { + buf := make([]byte, size) + for i := range buf { + buf[i] = charset[rand.Intn(len(charset))] + } + + s := &BulkService{} + n := 0 + for { + n++ + s = s.Add(NewBulkIndexRequest().Index("test").Type("doc").Id("1").Doc(struct { + S string `json:"s"` + }{ + S: string(buf), + })) + if n >= num { + break + } + } + for i := 0; i < b.N; i++ { + s.bodyAsString() + } + b.ReportAllocs() +} diff --git a/vendor/github.com/olivere/elastic/bulk_update_request.go b/vendor/github.com/olivere/elastic/bulk_update_request.go new file mode 100644 index 0000000..d55002a --- /dev/null +++ b/vendor/github.com/olivere/elastic/bulk_update_request.go @@ -0,0 +1,298 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +//go:generate easyjson bulk_update_request.go + +import ( + "encoding/json" + "fmt" + "strings" +) + +// BulkUpdateRequest is a request to update a document in Elasticsearch. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-bulk.html +// for details. +type BulkUpdateRequest struct { + BulkableRequest + index string + typ string + id string + + routing string + parent string + script *Script + scriptedUpsert *bool + version int64 // default is MATCH_ANY + versionType string // default is "internal" + retryOnConflict *int + upsert interface{} + docAsUpsert *bool + detectNoop *bool + doc interface{} + returnSource *bool + + source []string + + useEasyJSON bool +} + +//easyjson:json +type bulkUpdateRequestCommand map[string]bulkUpdateRequestCommandOp + +//easyjson:json +type bulkUpdateRequestCommandOp struct { + Index string `json:"_index,omitempty"` + Type string `json:"_type,omitempty"` + Id string `json:"_id,omitempty"` + Parent string `json:"parent,omitempty"` + // RetryOnConflict is "_retry_on_conflict" for 6.0 and "retry_on_conflict" for 6.1+. + RetryOnConflict *int `json:"retry_on_conflict,omitempty"` + Routing string `json:"routing,omitempty"` + Version int64 `json:"version,omitempty"` + VersionType string `json:"version_type,omitempty"` +} + +//easyjson:json +type bulkUpdateRequestCommandData struct { + DetectNoop *bool `json:"detect_noop,omitempty"` + Doc interface{} `json:"doc,omitempty"` + DocAsUpsert *bool `json:"doc_as_upsert,omitempty"` + Script interface{} `json:"script,omitempty"` + ScriptedUpsert *bool `json:"scripted_upsert,omitempty"` + Upsert interface{} `json:"upsert,omitempty"` + Source *bool `json:"_source,omitempty"` +} + +// NewBulkUpdateRequest returns a new BulkUpdateRequest. +func NewBulkUpdateRequest() *BulkUpdateRequest { + return &BulkUpdateRequest{} +} + +// UseEasyJSON is an experimental setting that enables serialization +// with github.com/mailru/easyjson, which should in faster serialization +// time and less allocations, but removed compatibility with encoding/json, +// usage of unsafe etc. See https://github.com/mailru/easyjson#issues-notes-and-limitations +// for details. This setting is disabled by default. +func (r *BulkUpdateRequest) UseEasyJSON(enable bool) *BulkUpdateRequest { + r.useEasyJSON = enable + return r +} + +// Index specifies the Elasticsearch index to use for this update request. +// If unspecified, the index set on the BulkService will be used. +func (r *BulkUpdateRequest) Index(index string) *BulkUpdateRequest { + r.index = index + r.source = nil + return r +} + +// Type specifies the Elasticsearch type to use for this update request. +// If unspecified, the type set on the BulkService will be used. +func (r *BulkUpdateRequest) Type(typ string) *BulkUpdateRequest { + r.typ = typ + r.source = nil + return r +} + +// Id specifies the identifier of the document to update. +func (r *BulkUpdateRequest) Id(id string) *BulkUpdateRequest { + r.id = id + r.source = nil + return r +} + +// Routing specifies a routing value for the request. +func (r *BulkUpdateRequest) Routing(routing string) *BulkUpdateRequest { + r.routing = routing + r.source = nil + return r +} + +// Parent specifies the identifier of the parent document (if available). +func (r *BulkUpdateRequest) Parent(parent string) *BulkUpdateRequest { + r.parent = parent + r.source = nil + return r +} + +// Script specifies an update script. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-bulk.html#bulk-update +// and https://www.elastic.co/guide/en/elasticsearch/reference/6.2/modules-scripting.html +// for details. +func (r *BulkUpdateRequest) Script(script *Script) *BulkUpdateRequest { + r.script = script + r.source = nil + return r +} + +// ScripedUpsert specifies if your script will run regardless of +// whether the document exists or not. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-update.html#_literal_scripted_upsert_literal +func (r *BulkUpdateRequest) ScriptedUpsert(upsert bool) *BulkUpdateRequest { + r.scriptedUpsert = &upsert + r.source = nil + return r +} + +// RetryOnConflict specifies how often to retry in case of a version conflict. +func (r *BulkUpdateRequest) RetryOnConflict(retryOnConflict int) *BulkUpdateRequest { + r.retryOnConflict = &retryOnConflict + r.source = nil + return r +} + +// Version indicates the version of the document as part of an optimistic +// concurrency model. +func (r *BulkUpdateRequest) Version(version int64) *BulkUpdateRequest { + r.version = version + r.source = nil + return r +} + +// VersionType can be "internal" (default), "external", "external_gte", +// or "external_gt". +func (r *BulkUpdateRequest) VersionType(versionType string) *BulkUpdateRequest { + r.versionType = versionType + r.source = nil + return r +} + +// Doc specifies the updated document. +func (r *BulkUpdateRequest) Doc(doc interface{}) *BulkUpdateRequest { + r.doc = doc + r.source = nil + return r +} + +// DocAsUpsert indicates whether the contents of Doc should be used as +// the Upsert value. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-update.html#_literal_doc_as_upsert_literal +// for details. +func (r *BulkUpdateRequest) DocAsUpsert(docAsUpsert bool) *BulkUpdateRequest { + r.docAsUpsert = &docAsUpsert + r.source = nil + return r +} + +// DetectNoop specifies whether changes that don't affect the document +// should be ignored (true) or unignored (false). This is enabled by default +// in Elasticsearch. +func (r *BulkUpdateRequest) DetectNoop(detectNoop bool) *BulkUpdateRequest { + r.detectNoop = &detectNoop + r.source = nil + return r +} + +// Upsert specifies the document to use for upserts. It will be used for +// create if the original document does not exist. +func (r *BulkUpdateRequest) Upsert(doc interface{}) *BulkUpdateRequest { + r.upsert = doc + r.source = nil + return r +} + +// ReturnSource specifies whether Elasticsearch should return the source +// after the update. In the request, this responds to the `_source` field. +// It is false by default. +func (r *BulkUpdateRequest) ReturnSource(source bool) *BulkUpdateRequest { + r.returnSource = &source + r.source = nil + return r +} + +// String returns the on-wire representation of the update request, +// concatenated as a single string. +func (r *BulkUpdateRequest) String() string { + lines, err := r.Source() + if err != nil { + return fmt.Sprintf("error: %v", err) + } + return strings.Join(lines, "\n") +} + +// Source returns the on-wire representation of the update request, +// split into an action-and-meta-data line and an (optional) source line. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-bulk.html +// for details. +func (r *BulkUpdateRequest) Source() ([]string, error) { + // { "update" : { "_index" : "test", "_type" : "type1", "_id" : "1", ... } } + // { "doc" : { "field1" : "value1", ... } } + // or + // { "update" : { "_index" : "test", "_type" : "type1", "_id" : "1", ... } } + // { "script" : { ... } } + + if r.source != nil { + return r.source, nil + } + + lines := make([]string, 2) + + // "update" ... + updateCommand := bulkUpdateRequestCommandOp{ + Index: r.index, + Type: r.typ, + Id: r.id, + Routing: r.routing, + Parent: r.parent, + Version: r.version, + VersionType: r.versionType, + RetryOnConflict: r.retryOnConflict, + } + command := bulkUpdateRequestCommand{ + "update": updateCommand, + } + + var err error + var body []byte + if r.useEasyJSON { + // easyjson + body, err = command.MarshalJSON() + } else { + // encoding/json + body, err = json.Marshal(command) + } + if err != nil { + return nil, err + } + + lines[0] = string(body) + + // 2nd line: {"doc" : { ... }} or {"script": {...}} + data := bulkUpdateRequestCommandData{ + DocAsUpsert: r.docAsUpsert, + DetectNoop: r.detectNoop, + Upsert: r.upsert, + ScriptedUpsert: r.scriptedUpsert, + Doc: r.doc, + Source: r.returnSource, + } + if r.script != nil { + script, err := r.script.Source() + if err != nil { + return nil, err + } + data.Script = script + } + + if r.useEasyJSON { + // easyjson + body, err = data.MarshalJSON() + } else { + // encoding/json + body, err = json.Marshal(data) + } + if err != nil { + return nil, err + } + + lines[1] = string(body) + + r.source = lines + return lines, nil +} diff --git a/vendor/github.com/olivere/elastic/bulk_update_request_easyjson.go b/vendor/github.com/olivere/elastic/bulk_update_request_easyjson.go new file mode 100644 index 0000000..d2c2cbf --- /dev/null +++ b/vendor/github.com/olivere/elastic/bulk_update_request_easyjson.go @@ -0,0 +1,461 @@ +// Code generated by easyjson for marshaling/unmarshaling. DO NOT EDIT. + +package elastic + +import ( + json "encoding/json" + easyjson "github.com/mailru/easyjson" + jlexer "github.com/mailru/easyjson/jlexer" + jwriter "github.com/mailru/easyjson/jwriter" +) + +// suppress unused package warning +var ( + _ *json.RawMessage + _ *jlexer.Lexer + _ *jwriter.Writer + _ easyjson.Marshaler +) + +func easyjson1ed00e60DecodeGithubComOlivereElastic(in *jlexer.Lexer, out *bulkUpdateRequestCommandOp) { + isTopLevel := in.IsStart() + if in.IsNull() { + if isTopLevel { + in.Consumed() + } + in.Skip() + return + } + in.Delim('{') + for !in.IsDelim('}') { + key := in.UnsafeString() + in.WantColon() + if in.IsNull() { + in.Skip() + in.WantComma() + continue + } + switch key { + case "_index": + out.Index = string(in.String()) + case "_type": + out.Type = string(in.String()) + case "_id": + out.Id = string(in.String()) + case "parent": + out.Parent = string(in.String()) + case "retry_on_conflict": + if in.IsNull() { + in.Skip() + out.RetryOnConflict = nil + } else { + if out.RetryOnConflict == nil { + out.RetryOnConflict = new(int) + } + *out.RetryOnConflict = int(in.Int()) + } + case "routing": + out.Routing = string(in.String()) + case "version": + out.Version = int64(in.Int64()) + case "version_type": + out.VersionType = string(in.String()) + default: + in.SkipRecursive() + } + in.WantComma() + } + in.Delim('}') + if isTopLevel { + in.Consumed() + } +} +func easyjson1ed00e60EncodeGithubComOlivereElastic(out *jwriter.Writer, in bulkUpdateRequestCommandOp) { + out.RawByte('{') + first := true + _ = first + if in.Index != "" { + const prefix string = ",\"_index\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.String(string(in.Index)) + } + if in.Type != "" { + const prefix string = ",\"_type\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.String(string(in.Type)) + } + if in.Id != "" { + const prefix string = ",\"_id\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.String(string(in.Id)) + } + if in.Parent != "" { + const prefix string = ",\"parent\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.String(string(in.Parent)) + } + if in.RetryOnConflict != nil { + const prefix string = ",\"retry_on_conflict\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.Int(int(*in.RetryOnConflict)) + } + if in.Routing != "" { + const prefix string = ",\"routing\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.String(string(in.Routing)) + } + if in.Version != 0 { + const prefix string = ",\"version\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.Int64(int64(in.Version)) + } + if in.VersionType != "" { + const prefix string = ",\"version_type\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.String(string(in.VersionType)) + } + out.RawByte('}') +} + +// MarshalJSON supports json.Marshaler interface +func (v bulkUpdateRequestCommandOp) MarshalJSON() ([]byte, error) { + w := jwriter.Writer{} + easyjson1ed00e60EncodeGithubComOlivereElastic(&w, v) + return w.Buffer.BuildBytes(), w.Error +} + +// MarshalEasyJSON supports easyjson.Marshaler interface +func (v bulkUpdateRequestCommandOp) MarshalEasyJSON(w *jwriter.Writer) { + easyjson1ed00e60EncodeGithubComOlivereElastic(w, v) +} + +// UnmarshalJSON supports json.Unmarshaler interface +func (v *bulkUpdateRequestCommandOp) UnmarshalJSON(data []byte) error { + r := jlexer.Lexer{Data: data} + easyjson1ed00e60DecodeGithubComOlivereElastic(&r, v) + return r.Error() +} + +// UnmarshalEasyJSON supports easyjson.Unmarshaler interface +func (v *bulkUpdateRequestCommandOp) UnmarshalEasyJSON(l *jlexer.Lexer) { + easyjson1ed00e60DecodeGithubComOlivereElastic(l, v) +} +func easyjson1ed00e60DecodeGithubComOlivereElastic1(in *jlexer.Lexer, out *bulkUpdateRequestCommandData) { + isTopLevel := in.IsStart() + if in.IsNull() { + if isTopLevel { + in.Consumed() + } + in.Skip() + return + } + in.Delim('{') + for !in.IsDelim('}') { + key := in.UnsafeString() + in.WantColon() + if in.IsNull() { + in.Skip() + in.WantComma() + continue + } + switch key { + case "detect_noop": + if in.IsNull() { + in.Skip() + out.DetectNoop = nil + } else { + if out.DetectNoop == nil { + out.DetectNoop = new(bool) + } + *out.DetectNoop = bool(in.Bool()) + } + case "doc": + if m, ok := out.Doc.(easyjson.Unmarshaler); ok { + m.UnmarshalEasyJSON(in) + } else if m, ok := out.Doc.(json.Unmarshaler); ok { + _ = m.UnmarshalJSON(in.Raw()) + } else { + out.Doc = in.Interface() + } + case "doc_as_upsert": + if in.IsNull() { + in.Skip() + out.DocAsUpsert = nil + } else { + if out.DocAsUpsert == nil { + out.DocAsUpsert = new(bool) + } + *out.DocAsUpsert = bool(in.Bool()) + } + case "script": + if m, ok := out.Script.(easyjson.Unmarshaler); ok { + m.UnmarshalEasyJSON(in) + } else if m, ok := out.Script.(json.Unmarshaler); ok { + _ = m.UnmarshalJSON(in.Raw()) + } else { + out.Script = in.Interface() + } + case "scripted_upsert": + if in.IsNull() { + in.Skip() + out.ScriptedUpsert = nil + } else { + if out.ScriptedUpsert == nil { + out.ScriptedUpsert = new(bool) + } + *out.ScriptedUpsert = bool(in.Bool()) + } + case "upsert": + if m, ok := out.Upsert.(easyjson.Unmarshaler); ok { + m.UnmarshalEasyJSON(in) + } else if m, ok := out.Upsert.(json.Unmarshaler); ok { + _ = m.UnmarshalJSON(in.Raw()) + } else { + out.Upsert = in.Interface() + } + case "_source": + if in.IsNull() { + in.Skip() + out.Source = nil + } else { + if out.Source == nil { + out.Source = new(bool) + } + *out.Source = bool(in.Bool()) + } + default: + in.SkipRecursive() + } + in.WantComma() + } + in.Delim('}') + if isTopLevel { + in.Consumed() + } +} +func easyjson1ed00e60EncodeGithubComOlivereElastic1(out *jwriter.Writer, in bulkUpdateRequestCommandData) { + out.RawByte('{') + first := true + _ = first + if in.DetectNoop != nil { + const prefix string = ",\"detect_noop\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.Bool(bool(*in.DetectNoop)) + } + if in.Doc != nil { + const prefix string = ",\"doc\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + if m, ok := in.Doc.(easyjson.Marshaler); ok { + m.MarshalEasyJSON(out) + } else if m, ok := in.Doc.(json.Marshaler); ok { + out.Raw(m.MarshalJSON()) + } else { + out.Raw(json.Marshal(in.Doc)) + } + } + if in.DocAsUpsert != nil { + const prefix string = ",\"doc_as_upsert\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.Bool(bool(*in.DocAsUpsert)) + } + if in.Script != nil { + const prefix string = ",\"script\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + if m, ok := in.Script.(easyjson.Marshaler); ok { + m.MarshalEasyJSON(out) + } else if m, ok := in.Script.(json.Marshaler); ok { + out.Raw(m.MarshalJSON()) + } else { + out.Raw(json.Marshal(in.Script)) + } + } + if in.ScriptedUpsert != nil { + const prefix string = ",\"scripted_upsert\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.Bool(bool(*in.ScriptedUpsert)) + } + if in.Upsert != nil { + const prefix string = ",\"upsert\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + if m, ok := in.Upsert.(easyjson.Marshaler); ok { + m.MarshalEasyJSON(out) + } else if m, ok := in.Upsert.(json.Marshaler); ok { + out.Raw(m.MarshalJSON()) + } else { + out.Raw(json.Marshal(in.Upsert)) + } + } + if in.Source != nil { + const prefix string = ",\"_source\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.Bool(bool(*in.Source)) + } + out.RawByte('}') +} + +// MarshalJSON supports json.Marshaler interface +func (v bulkUpdateRequestCommandData) MarshalJSON() ([]byte, error) { + w := jwriter.Writer{} + easyjson1ed00e60EncodeGithubComOlivereElastic1(&w, v) + return w.Buffer.BuildBytes(), w.Error +} + +// MarshalEasyJSON supports easyjson.Marshaler interface +func (v bulkUpdateRequestCommandData) MarshalEasyJSON(w *jwriter.Writer) { + easyjson1ed00e60EncodeGithubComOlivereElastic1(w, v) +} + +// UnmarshalJSON supports json.Unmarshaler interface +func (v *bulkUpdateRequestCommandData) UnmarshalJSON(data []byte) error { + r := jlexer.Lexer{Data: data} + easyjson1ed00e60DecodeGithubComOlivereElastic1(&r, v) + return r.Error() +} + +// UnmarshalEasyJSON supports easyjson.Unmarshaler interface +func (v *bulkUpdateRequestCommandData) UnmarshalEasyJSON(l *jlexer.Lexer) { + easyjson1ed00e60DecodeGithubComOlivereElastic1(l, v) +} +func easyjson1ed00e60DecodeGithubComOlivereElastic2(in *jlexer.Lexer, out *bulkUpdateRequestCommand) { + isTopLevel := in.IsStart() + if in.IsNull() { + in.Skip() + } else { + in.Delim('{') + if !in.IsDelim('}') { + *out = make(bulkUpdateRequestCommand) + } else { + *out = nil + } + for !in.IsDelim('}') { + key := string(in.String()) + in.WantColon() + var v1 bulkUpdateRequestCommandOp + (v1).UnmarshalEasyJSON(in) + (*out)[key] = v1 + in.WantComma() + } + in.Delim('}') + } + if isTopLevel { + in.Consumed() + } +} +func easyjson1ed00e60EncodeGithubComOlivereElastic2(out *jwriter.Writer, in bulkUpdateRequestCommand) { + if in == nil && (out.Flags&jwriter.NilMapAsEmpty) == 0 { + out.RawString(`null`) + } else { + out.RawByte('{') + v2First := true + for v2Name, v2Value := range in { + if v2First { + v2First = false + } else { + out.RawByte(',') + } + out.String(string(v2Name)) + out.RawByte(':') + (v2Value).MarshalEasyJSON(out) + } + out.RawByte('}') + } +} + +// MarshalJSON supports json.Marshaler interface +func (v bulkUpdateRequestCommand) MarshalJSON() ([]byte, error) { + w := jwriter.Writer{} + easyjson1ed00e60EncodeGithubComOlivereElastic2(&w, v) + return w.Buffer.BuildBytes(), w.Error +} + +// MarshalEasyJSON supports easyjson.Marshaler interface +func (v bulkUpdateRequestCommand) MarshalEasyJSON(w *jwriter.Writer) { + easyjson1ed00e60EncodeGithubComOlivereElastic2(w, v) +} + +// UnmarshalJSON supports json.Unmarshaler interface +func (v *bulkUpdateRequestCommand) UnmarshalJSON(data []byte) error { + r := jlexer.Lexer{Data: data} + easyjson1ed00e60DecodeGithubComOlivereElastic2(&r, v) + return r.Error() +} + +// UnmarshalEasyJSON supports easyjson.Unmarshaler interface +func (v *bulkUpdateRequestCommand) UnmarshalEasyJSON(l *jlexer.Lexer) { + easyjson1ed00e60DecodeGithubComOlivereElastic2(l, v) +} diff --git a/vendor/github.com/olivere/elastic/bulk_update_request_test.go b/vendor/github.com/olivere/elastic/bulk_update_request_test.go new file mode 100644 index 0000000..53e73bd --- /dev/null +++ b/vendor/github.com/olivere/elastic/bulk_update_request_test.go @@ -0,0 +1,149 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "testing" +) + +func TestBulkUpdateRequestSerialization(t *testing.T) { + tests := []struct { + Request BulkableRequest + Expected []string + }{ + // #0 + { + Request: NewBulkUpdateRequest().Index("index1").Type("doc").Id("1").Doc(struct { + Counter int64 `json:"counter"` + }{ + Counter: 42, + }), + Expected: []string{ + `{"update":{"_index":"index1","_type":"doc","_id":"1"}}`, + `{"doc":{"counter":42}}`, + }, + }, + // #1 + { + Request: NewBulkUpdateRequest().Index("index1").Type("doc").Id("1"). + Routing("123"). + RetryOnConflict(3). + DocAsUpsert(true). + Doc(struct { + Counter int64 `json:"counter"` + }{ + Counter: 42, + }), + Expected: []string{ + `{"update":{"_index":"index1","_type":"doc","_id":"1","retry_on_conflict":3,"routing":"123"}}`, + `{"doc":{"counter":42},"doc_as_upsert":true}`, + }, + }, + // #2 + { + Request: NewBulkUpdateRequest().Index("index1").Type("doc").Id("1"). + RetryOnConflict(3). + Script(NewScript(`ctx._source.retweets += param1`).Lang("javascript").Param("param1", 42)). + Upsert(struct { + Counter int64 `json:"counter"` + }{ + Counter: 42, + }), + Expected: []string{ + `{"update":{"_index":"index1","_type":"doc","_id":"1","retry_on_conflict":3}}`, + `{"script":{"lang":"javascript","params":{"param1":42},"source":"ctx._source.retweets += param1"},"upsert":{"counter":42}}`, + }, + }, + // #3 + { + Request: NewBulkUpdateRequest().Index("index1").Type("doc").Id("1").DetectNoop(true).Doc(struct { + Counter int64 `json:"counter"` + }{ + Counter: 42, + }), + Expected: []string{ + `{"update":{"_index":"index1","_type":"doc","_id":"1"}}`, + `{"detect_noop":true,"doc":{"counter":42}}`, + }, + }, + // #4 + { + Request: NewBulkUpdateRequest().Index("index1").Type("doc").Id("1"). + RetryOnConflict(3). + ScriptedUpsert(true). + Script(NewScript(`ctx._source.retweets += param1`).Lang("javascript").Param("param1", 42)). + Upsert(struct { + Counter int64 `json:"counter"` + }{ + Counter: 42, + }), + Expected: []string{ + `{"update":{"_index":"index1","_type":"doc","_id":"1","retry_on_conflict":3}}`, + `{"script":{"lang":"javascript","params":{"param1":42},"source":"ctx._source.retweets += param1"},"scripted_upsert":true,"upsert":{"counter":42}}`, + }, + }, + // #5 + { + Request: NewBulkUpdateRequest().Index("index1").Type("doc").Id("4").ReturnSource(true).Doc(struct { + Counter int64 `json:"counter"` + }{ + Counter: 42, + }), + Expected: []string{ + `{"update":{"_index":"index1","_type":"doc","_id":"4"}}`, + `{"doc":{"counter":42},"_source":true}`, + }, + }, + } + + for i, test := range tests { + lines, err := test.Request.Source() + if err != nil { + t.Fatalf("#%d: expected no error, got: %v", i, err) + } + if lines == nil { + t.Fatalf("#%d: expected lines, got nil", i) + } + if len(lines) != len(test.Expected) { + t.Fatalf("#%d: expected %d lines, got %d", i, len(test.Expected), len(lines)) + } + for j, line := range lines { + if line != test.Expected[j] { + t.Errorf("#%d: expected line #%d to be\n%s\nbut got:\n%s", i, j, test.Expected[j], line) + } + } + } +} + +var bulkUpdateRequestSerializationResult string + +func BenchmarkBulkUpdateRequestSerialization(b *testing.B) { + b.Run("stdlib", func(b *testing.B) { + r := NewBulkUpdateRequest().Index("index1").Type("doc").Id("1").Doc(struct { + Counter int64 `json:"counter"` + }{ + Counter: 42, + }) + benchmarkBulkUpdateRequestSerialization(b, r.UseEasyJSON(false)) + }) + b.Run("easyjson", func(b *testing.B) { + r := NewBulkUpdateRequest().Index("index1").Type("doc").Id("1").Doc(struct { + Counter int64 `json:"counter"` + }{ + Counter: 42, + }).UseEasyJSON(false) + benchmarkBulkUpdateRequestSerialization(b, r.UseEasyJSON(true)) + }) +} + +func benchmarkBulkUpdateRequestSerialization(b *testing.B, r *BulkUpdateRequest) { + var s string + for n := 0; n < b.N; n++ { + s = r.String() + r.source = nil // Don't let caching spoil the benchmark + } + bulkUpdateRequestSerializationResult = s // ensure the compiler doesn't optimize + b.ReportAllocs() +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/canonicalize.go b/vendor/github.com/olivere/elastic/canonicalize.go similarity index 100% rename from vendor/gopkg.in/olivere/elastic.v2/canonicalize.go rename to vendor/github.com/olivere/elastic/canonicalize.go diff --git a/vendor/gopkg.in/olivere/elastic.v2/canonicalize_test.go b/vendor/github.com/olivere/elastic/canonicalize_test.go similarity index 100% rename from vendor/gopkg.in/olivere/elastic.v2/canonicalize_test.go rename to vendor/github.com/olivere/elastic/canonicalize_test.go diff --git a/vendor/github.com/olivere/elastic/clear_scroll.go b/vendor/github.com/olivere/elastic/clear_scroll.go new file mode 100644 index 0000000..e1f4601 --- /dev/null +++ b/vendor/github.com/olivere/elastic/clear_scroll.go @@ -0,0 +1,108 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" +) + +// ClearScrollService clears one or more scroll contexts by their ids. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-scroll.html#_clear_scroll_api +// for details. +type ClearScrollService struct { + client *Client + pretty bool + scrollId []string +} + +// NewClearScrollService creates a new ClearScrollService. +func NewClearScrollService(client *Client) *ClearScrollService { + return &ClearScrollService{ + client: client, + scrollId: make([]string, 0), + } +} + +// ScrollId is a list of scroll IDs to clear. +// Use _all to clear all search contexts. +func (s *ClearScrollService) ScrollId(scrollIds ...string) *ClearScrollService { + s.scrollId = append(s.scrollId, scrollIds...) + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *ClearScrollService) Pretty(pretty bool) *ClearScrollService { + s.pretty = pretty + return s +} + +// buildURL builds the URL for the operation. +func (s *ClearScrollService) buildURL() (string, url.Values, error) { + // Build URL + path := "/_search/scroll/" + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *ClearScrollService) Validate() error { + var invalid []string + if len(s.scrollId) == 0 { + invalid = append(invalid, "ScrollId") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *ClearScrollService) Do(ctx context.Context) (*ClearScrollResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Setup HTTP request body + body := map[string][]string{ + "scroll_id": s.scrollId, + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "DELETE", + Path: path, + Params: params, + Body: body, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(ClearScrollResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// ClearScrollResponse is the response of ClearScrollService.Do. +type ClearScrollResponse struct { +} diff --git a/vendor/github.com/olivere/elastic/clear_scroll_test.go b/vendor/github.com/olivere/elastic/clear_scroll_test.go new file mode 100644 index 0000000..4037d3c --- /dev/null +++ b/vendor/github.com/olivere/elastic/clear_scroll_test.go @@ -0,0 +1,87 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + _ "net/http" + "testing" +) + +func TestClearScroll(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + // client := setupTestClientAndCreateIndex(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) + + tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} + tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} + tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} + + // Add all documents + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Match all should return all documents + res, err := client.Scroll(testIndexName).Size(1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if res == nil { + t.Fatal("expected results != nil; got nil") + } + if res.ScrollId == "" { + t.Fatalf("expected scrollId in results; got %q", res.ScrollId) + } + + // Search should succeed + _, err = client.Scroll(testIndexName).Size(1).ScrollId(res.ScrollId).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Clear scroll id + clearScrollRes, err := client.ClearScroll().ScrollId(res.ScrollId).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if clearScrollRes == nil { + t.Fatal("expected results != nil; got nil") + } + + // Search result should fail + _, err = client.Scroll(testIndexName).Size(1).ScrollId(res.ScrollId).Do(context.TODO()) + if err == nil { + t.Fatalf("expected scroll to fail") + } +} + +func TestClearScrollValidate(t *testing.T) { + client := setupTestClient(t) + + // No scroll id -> fail with error + res, err := NewClearScrollService(client).Do(context.TODO()) + if err == nil { + t.Fatalf("expected ClearScroll to fail without scroll ids") + } + if res != nil { + t.Fatalf("expected result to be nil; got: %v", res) + } +} diff --git a/vendor/github.com/olivere/elastic/client.go b/vendor/github.com/olivere/elastic/client.go new file mode 100644 index 0000000..e2e6e1d --- /dev/null +++ b/vendor/github.com/olivere/elastic/client.go @@ -0,0 +1,1786 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "bytes" + "context" + "encoding/json" + "fmt" + "log" + "net/http" + "net/http/httputil" + "net/url" + "os" + "regexp" + "strings" + "sync" + "time" + + "github.com/pkg/errors" + + "github.com/olivere/elastic/config" +) + +const ( + // Version is the current version of Elastic. + Version = "6.1.13" + + // DefaultURL is the default endpoint of Elasticsearch on the local machine. + // It is used e.g. when initializing a new Client without a specific URL. + DefaultURL = "http://127.0.0.1:9200" + + // DefaultScheme is the default protocol scheme to use when sniffing + // the Elasticsearch cluster. + DefaultScheme = "http" + + // DefaultHealthcheckEnabled specifies if healthchecks are enabled by default. + DefaultHealthcheckEnabled = true + + // DefaultHealthcheckTimeoutStartup is the time the healthcheck waits + // for a response from Elasticsearch on startup, i.e. when creating a + // client. After the client is started, a shorter timeout is commonly used + // (its default is specified in DefaultHealthcheckTimeout). + DefaultHealthcheckTimeoutStartup = 5 * time.Second + + // DefaultHealthcheckTimeout specifies the time a running client waits for + // a response from Elasticsearch. Notice that the healthcheck timeout + // when a client is created is larger by default (see DefaultHealthcheckTimeoutStartup). + DefaultHealthcheckTimeout = 1 * time.Second + + // DefaultHealthcheckInterval is the default interval between + // two health checks of the nodes in the cluster. + DefaultHealthcheckInterval = 60 * time.Second + + // DefaultSnifferEnabled specifies if the sniffer is enabled by default. + DefaultSnifferEnabled = true + + // DefaultSnifferInterval is the interval between two sniffing procedures, + // i.e. the lookup of all nodes in the cluster and their addition/removal + // from the list of actual connections. + DefaultSnifferInterval = 15 * time.Minute + + // DefaultSnifferTimeoutStartup is the default timeout for the sniffing + // process that is initiated while creating a new client. For subsequent + // sniffing processes, DefaultSnifferTimeout is used (by default). + DefaultSnifferTimeoutStartup = 5 * time.Second + + // DefaultSnifferTimeout is the default timeout after which the + // sniffing process times out. Notice that for the initial sniffing + // process, DefaultSnifferTimeoutStartup is used. + DefaultSnifferTimeout = 2 * time.Second + + // DefaultSendGetBodyAs is the HTTP method to use when elastic is sending + // a GET request with a body. + DefaultSendGetBodyAs = "GET" + + // off is used to disable timeouts. + off = -1 * time.Second +) + +var ( + // ErrNoClient is raised when no Elasticsearch node is available. + ErrNoClient = errors.New("no Elasticsearch node available") + + // ErrRetry is raised when a request cannot be executed after the configured + // number of retries. + ErrRetry = errors.New("cannot connect after several retries") + + // ErrTimeout is raised when a request timed out, e.g. when WaitForStatus + // didn't return in time. + ErrTimeout = errors.New("timeout") + + // noRetries is a retrier that does not retry. + noRetries = NewStopRetrier() +) + +// ClientOptionFunc is a function that configures a Client. +// It is used in NewClient. +type ClientOptionFunc func(*Client) error + +// Client is an Elasticsearch client. Create one by calling NewClient. +type Client struct { + c *http.Client // net/http Client to use for requests + + connsMu sync.RWMutex // connsMu guards the next block + conns []*conn // all connections + cindex int // index into conns + + mu sync.RWMutex // guards the next block + urls []string // set of URLs passed initially to the client + running bool // true if the client's background processes are running + errorlog Logger // error log for critical messages + infolog Logger // information log for e.g. response times + tracelog Logger // trace log for debugging + scheme string // http or https + healthcheckEnabled bool // healthchecks enabled or disabled + healthcheckTimeoutStartup time.Duration // time the healthcheck waits for a response from Elasticsearch on startup + healthcheckTimeout time.Duration // time the healthcheck waits for a response from Elasticsearch + healthcheckInterval time.Duration // interval between healthchecks + healthcheckStop chan bool // notify healthchecker to stop, and notify back + snifferEnabled bool // sniffer enabled or disabled + snifferTimeoutStartup time.Duration // time the sniffer waits for a response from nodes info API on startup + snifferTimeout time.Duration // time the sniffer waits for a response from nodes info API + snifferInterval time.Duration // interval between sniffing + snifferCallback SnifferCallback // callback to modify the sniffing decision + snifferStop chan bool // notify sniffer to stop, and notify back + decoder Decoder // used to decode data sent from Elasticsearch + basicAuth bool // indicates whether to send HTTP Basic Auth credentials + basicAuthUsername string // username for HTTP Basic Auth + basicAuthPassword string // password for HTTP Basic Auth + sendGetBodyAs string // override for when sending a GET with a body + requiredPlugins []string // list of required plugins + retrier Retrier // strategy for retries +} + +// NewClient creates a new client to work with Elasticsearch. +// +// NewClient, by default, is meant to be long-lived and shared across +// your application. If you need a short-lived client, e.g. for request-scope, +// consider using NewSimpleClient instead. +// +// The caller can configure the new client by passing configuration options +// to the func. +// +// Example: +// +// client, err := elastic.NewClient( +// elastic.SetURL("http://127.0.0.1:9200", "http://127.0.0.1:9201"), +// elastic.SetBasicAuth("user", "secret")) +// +// If no URL is configured, Elastic uses DefaultURL by default. +// +// If the sniffer is enabled (the default), the new client then sniffes +// the cluster via the Nodes Info API +// (see https://www.elastic.co/guide/en/elasticsearch/reference/6.2/cluster-nodes-info.html#cluster-nodes-info). +// It uses the URLs specified by the caller. The caller is responsible +// to only pass a list of URLs of nodes that belong to the same cluster. +// This sniffing process is run on startup and periodically. +// Use SnifferInterval to set the interval between two sniffs (default is +// 15 minutes). In other words: By default, the client will find new nodes +// in the cluster and remove those that are no longer available every +// 15 minutes. Disable the sniffer by passing SetSniff(false) to NewClient. +// +// The list of nodes found in the sniffing process will be used to make +// connections to the REST API of Elasticsearch. These nodes are also +// periodically checked in a shorter time frame. This process is called +// a health check. By default, a health check is done every 60 seconds. +// You can set a shorter or longer interval by SetHealthcheckInterval. +// Disabling health checks is not recommended, but can be done by +// SetHealthcheck(false). +// +// Connections are automatically marked as dead or healthy while +// making requests to Elasticsearch. When a request fails, Elastic will +// call into the Retry strategy which can be specified with SetRetry. +// The Retry strategy is also responsible for handling backoff i.e. the time +// to wait before starting the next request. There are various standard +// backoff implementations, e.g. ExponentialBackoff or SimpleBackoff. +// Retries are disabled by default. +// +// If no HttpClient is configured, then http.DefaultClient is used. +// You can use your own http.Client with some http.Transport for +// advanced scenarios. +// +// An error is also returned when some configuration option is invalid or +// the new client cannot sniff the cluster (if enabled). +func NewClient(options ...ClientOptionFunc) (*Client, error) { + // Set up the client + c := &Client{ + c: http.DefaultClient, + conns: make([]*conn, 0), + cindex: -1, + scheme: DefaultScheme, + decoder: &DefaultDecoder{}, + healthcheckEnabled: DefaultHealthcheckEnabled, + healthcheckTimeoutStartup: DefaultHealthcheckTimeoutStartup, + healthcheckTimeout: DefaultHealthcheckTimeout, + healthcheckInterval: DefaultHealthcheckInterval, + healthcheckStop: make(chan bool), + snifferEnabled: DefaultSnifferEnabled, + snifferTimeoutStartup: DefaultSnifferTimeoutStartup, + snifferTimeout: DefaultSnifferTimeout, + snifferInterval: DefaultSnifferInterval, + snifferCallback: nopSnifferCallback, + snifferStop: make(chan bool), + sendGetBodyAs: DefaultSendGetBodyAs, + retrier: noRetries, // no retries by default + } + + // Run the options on it + for _, option := range options { + if err := option(c); err != nil { + return nil, err + } + } + + // Use a default URL and normalize them + if len(c.urls) == 0 { + c.urls = []string{DefaultURL} + } + c.urls = canonicalize(c.urls...) + + // If the URLs have auth info, use them here as an alternative to SetBasicAuth + if !c.basicAuth { + for _, urlStr := range c.urls { + u, err := url.Parse(urlStr) + if err == nil && u.User != nil { + c.basicAuth = true + c.basicAuthUsername = u.User.Username() + c.basicAuthPassword, _ = u.User.Password() + break + } + } + } + + // Check if we can make a request to any of the specified URLs + if c.healthcheckEnabled { + if err := c.startupHealthcheck(c.healthcheckTimeoutStartup); err != nil { + return nil, err + } + } + + if c.snifferEnabled { + // Sniff the cluster initially + if err := c.sniff(c.snifferTimeoutStartup); err != nil { + return nil, err + } + } else { + // Do not sniff the cluster initially. Use the provided URLs instead. + for _, url := range c.urls { + c.conns = append(c.conns, newConn(url, url)) + } + } + + if c.healthcheckEnabled { + // Perform an initial health check + c.healthcheck(c.healthcheckTimeoutStartup, true) + } + // Ensure that we have at least one connection available + if err := c.mustActiveConn(); err != nil { + return nil, err + } + + // Check the required plugins + for _, plugin := range c.requiredPlugins { + found, err := c.HasPlugin(plugin) + if err != nil { + return nil, err + } + if !found { + return nil, fmt.Errorf("elastic: plugin %s not found", plugin) + } + } + + if c.snifferEnabled { + go c.sniffer() // periodically update cluster information + } + if c.healthcheckEnabled { + go c.healthchecker() // start goroutine periodically ping all nodes of the cluster + } + + c.mu.Lock() + c.running = true + c.mu.Unlock() + + return c, nil +} + +// NewClientFromConfig initializes a client from a configuration. +func NewClientFromConfig(cfg *config.Config) (*Client, error) { + var options []ClientOptionFunc + if cfg != nil { + if cfg.URL != "" { + options = append(options, SetURL(cfg.URL)) + } + if cfg.Errorlog != "" { + f, err := os.OpenFile(cfg.Errorlog, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + if err != nil { + return nil, errors.Wrap(err, "unable to initialize error log") + } + l := log.New(f, "", 0) + options = append(options, SetErrorLog(l)) + } + if cfg.Tracelog != "" { + f, err := os.OpenFile(cfg.Tracelog, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + if err != nil { + return nil, errors.Wrap(err, "unable to initialize trace log") + } + l := log.New(f, "", 0) + options = append(options, SetTraceLog(l)) + } + if cfg.Infolog != "" { + f, err := os.OpenFile(cfg.Infolog, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + if err != nil { + return nil, errors.Wrap(err, "unable to initialize info log") + } + l := log.New(f, "", 0) + options = append(options, SetInfoLog(l)) + } + if cfg.Username != "" || cfg.Password != "" { + options = append(options, SetBasicAuth(cfg.Username, cfg.Password)) + } + if cfg.Sniff != nil { + options = append(options, SetSniff(*cfg.Sniff)) + } + } + return NewClient(options...) +} + +// NewSimpleClient creates a new short-lived Client that can be used in +// use cases where you need e.g. one client per request. +// +// While NewClient by default sets up e.g. periodic health checks +// and sniffing for new nodes in separate goroutines, NewSimpleClient does +// not and is meant as a simple replacement where you don't need all the +// heavy lifting of NewClient. +// +// NewSimpleClient does the following by default: First, all health checks +// are disabled, including timeouts and periodic checks. Second, sniffing +// is disabled, including timeouts and periodic checks. The number of retries +// is set to 1. NewSimpleClient also does not start any goroutines. +// +// Notice that you can still override settings by passing additional options, +// just like with NewClient. +func NewSimpleClient(options ...ClientOptionFunc) (*Client, error) { + c := &Client{ + c: http.DefaultClient, + conns: make([]*conn, 0), + cindex: -1, + scheme: DefaultScheme, + decoder: &DefaultDecoder{}, + healthcheckEnabled: false, + healthcheckTimeoutStartup: off, + healthcheckTimeout: off, + healthcheckInterval: off, + healthcheckStop: make(chan bool), + snifferEnabled: false, + snifferTimeoutStartup: off, + snifferTimeout: off, + snifferInterval: off, + snifferCallback: nopSnifferCallback, + snifferStop: make(chan bool), + sendGetBodyAs: DefaultSendGetBodyAs, + retrier: noRetries, // no retries by default + } + + // Run the options on it + for _, option := range options { + if err := option(c); err != nil { + return nil, err + } + } + + // Use a default URL and normalize them + if len(c.urls) == 0 { + c.urls = []string{DefaultURL} + } + c.urls = canonicalize(c.urls...) + + // If the URLs have auth info, use them here as an alternative to SetBasicAuth + if !c.basicAuth { + for _, urlStr := range c.urls { + u, err := url.Parse(urlStr) + if err == nil && u.User != nil { + c.basicAuth = true + c.basicAuthUsername = u.User.Username() + c.basicAuthPassword, _ = u.User.Password() + break + } + } + } + + for _, url := range c.urls { + c.conns = append(c.conns, newConn(url, url)) + } + + // Ensure that we have at least one connection available + if err := c.mustActiveConn(); err != nil { + return nil, err + } + + // Check the required plugins + for _, plugin := range c.requiredPlugins { + found, err := c.HasPlugin(plugin) + if err != nil { + return nil, err + } + if !found { + return nil, fmt.Errorf("elastic: plugin %s not found", plugin) + } + } + + c.mu.Lock() + c.running = true + c.mu.Unlock() + + return c, nil +} + +// SetHttpClient can be used to specify the http.Client to use when making +// HTTP requests to Elasticsearch. +func SetHttpClient(httpClient *http.Client) ClientOptionFunc { + return func(c *Client) error { + if httpClient != nil { + c.c = httpClient + } else { + c.c = http.DefaultClient + } + return nil + } +} + +// SetBasicAuth can be used to specify the HTTP Basic Auth credentials to +// use when making HTTP requests to Elasticsearch. +func SetBasicAuth(username, password string) ClientOptionFunc { + return func(c *Client) error { + c.basicAuthUsername = username + c.basicAuthPassword = password + c.basicAuth = c.basicAuthUsername != "" || c.basicAuthPassword != "" + return nil + } +} + +// SetURL defines the URL endpoints of the Elasticsearch nodes. Notice that +// when sniffing is enabled, these URLs are used to initially sniff the +// cluster on startup. +func SetURL(urls ...string) ClientOptionFunc { + return func(c *Client) error { + switch len(urls) { + case 0: + c.urls = []string{DefaultURL} + default: + c.urls = urls + } + return nil + } +} + +// SetScheme sets the HTTP scheme to look for when sniffing (http or https). +// This is http by default. +func SetScheme(scheme string) ClientOptionFunc { + return func(c *Client) error { + c.scheme = scheme + return nil + } +} + +// SetSniff enables or disables the sniffer (enabled by default). +func SetSniff(enabled bool) ClientOptionFunc { + return func(c *Client) error { + c.snifferEnabled = enabled + return nil + } +} + +// SetSnifferTimeoutStartup sets the timeout for the sniffer that is used +// when creating a new client. The default is 5 seconds. Notice that the +// timeout being used for subsequent sniffing processes is set with +// SetSnifferTimeout. +func SetSnifferTimeoutStartup(timeout time.Duration) ClientOptionFunc { + return func(c *Client) error { + c.snifferTimeoutStartup = timeout + return nil + } +} + +// SetSnifferTimeout sets the timeout for the sniffer that finds the +// nodes in a cluster. The default is 2 seconds. Notice that the timeout +// used when creating a new client on startup is usually greater and can +// be set with SetSnifferTimeoutStartup. +func SetSnifferTimeout(timeout time.Duration) ClientOptionFunc { + return func(c *Client) error { + c.snifferTimeout = timeout + return nil + } +} + +// SetSnifferInterval sets the interval between two sniffing processes. +// The default interval is 15 minutes. +func SetSnifferInterval(interval time.Duration) ClientOptionFunc { + return func(c *Client) error { + c.snifferInterval = interval + return nil + } +} + +// SnifferCallback defines the protocol for sniffing decisions. +type SnifferCallback func(*NodesInfoNode) bool + +// nopSnifferCallback is the default sniffer callback: It accepts +// all nodes the sniffer finds. +var nopSnifferCallback = func(*NodesInfoNode) bool { return true } + +// SetSnifferCallback allows the caller to modify sniffer decisions. +// When setting the callback, the given SnifferCallback is called for +// each (healthy) node found during the sniffing process. +// If the callback returns false, the node is ignored: No requests +// are routed to it. +func SetSnifferCallback(f SnifferCallback) ClientOptionFunc { + return func(c *Client) error { + if f != nil { + c.snifferCallback = f + } + return nil + } +} + +// SetHealthcheck enables or disables healthchecks (enabled by default). +func SetHealthcheck(enabled bool) ClientOptionFunc { + return func(c *Client) error { + c.healthcheckEnabled = enabled + return nil + } +} + +// SetHealthcheckTimeoutStartup sets the timeout for the initial health check. +// The default timeout is 5 seconds (see DefaultHealthcheckTimeoutStartup). +// Notice that timeouts for subsequent health checks can be modified with +// SetHealthcheckTimeout. +func SetHealthcheckTimeoutStartup(timeout time.Duration) ClientOptionFunc { + return func(c *Client) error { + c.healthcheckTimeoutStartup = timeout + return nil + } +} + +// SetHealthcheckTimeout sets the timeout for periodic health checks. +// The default timeout is 1 second (see DefaultHealthcheckTimeout). +// Notice that a different (usually larger) timeout is used for the initial +// healthcheck, which is initiated while creating a new client. +// The startup timeout can be modified with SetHealthcheckTimeoutStartup. +func SetHealthcheckTimeout(timeout time.Duration) ClientOptionFunc { + return func(c *Client) error { + c.healthcheckTimeout = timeout + return nil + } +} + +// SetHealthcheckInterval sets the interval between two health checks. +// The default interval is 60 seconds. +func SetHealthcheckInterval(interval time.Duration) ClientOptionFunc { + return func(c *Client) error { + c.healthcheckInterval = interval + return nil + } +} + +// SetMaxRetries sets the maximum number of retries before giving up when +// performing a HTTP request to Elasticsearch. +// +// Deprecated: Replace with a Retry implementation. +func SetMaxRetries(maxRetries int) ClientOptionFunc { + return func(c *Client) error { + if maxRetries < 0 { + return errors.New("MaxRetries must be greater than or equal to 0") + } else if maxRetries == 0 { + c.retrier = noRetries + } else { + // Create a Retrier that will wait for 100ms (+/- jitter) between requests. + // This resembles the old behavior with maxRetries. + ticks := make([]int, maxRetries) + for i := 0; i < len(ticks); i++ { + ticks[i] = 100 + } + backoff := NewSimpleBackoff(ticks...) + c.retrier = NewBackoffRetrier(backoff) + } + return nil + } +} + +// SetDecoder sets the Decoder to use when decoding data from Elasticsearch. +// DefaultDecoder is used by default. +func SetDecoder(decoder Decoder) ClientOptionFunc { + return func(c *Client) error { + if decoder != nil { + c.decoder = decoder + } else { + c.decoder = &DefaultDecoder{} + } + return nil + } +} + +// SetRequiredPlugins can be used to indicate that some plugins are required +// before a Client will be created. +func SetRequiredPlugins(plugins ...string) ClientOptionFunc { + return func(c *Client) error { + if c.requiredPlugins == nil { + c.requiredPlugins = make([]string, 0) + } + c.requiredPlugins = append(c.requiredPlugins, plugins...) + return nil + } +} + +// SetErrorLog sets the logger for critical messages like nodes joining +// or leaving the cluster or failing requests. It is nil by default. +func SetErrorLog(logger Logger) ClientOptionFunc { + return func(c *Client) error { + c.errorlog = logger + return nil + } +} + +// SetInfoLog sets the logger for informational messages, e.g. requests +// and their response times. It is nil by default. +func SetInfoLog(logger Logger) ClientOptionFunc { + return func(c *Client) error { + c.infolog = logger + return nil + } +} + +// SetTraceLog specifies the log.Logger to use for output of HTTP requests +// and responses which is helpful during debugging. It is nil by default. +func SetTraceLog(logger Logger) ClientOptionFunc { + return func(c *Client) error { + c.tracelog = logger + return nil + } +} + +// SetSendGetBodyAs specifies the HTTP method to use when sending a GET request +// with a body. It is GET by default. +func SetSendGetBodyAs(httpMethod string) ClientOptionFunc { + return func(c *Client) error { + c.sendGetBodyAs = httpMethod + return nil + } +} + +// SetRetrier specifies the retry strategy that handles errors during +// HTTP request/response with Elasticsearch. +func SetRetrier(retrier Retrier) ClientOptionFunc { + return func(c *Client) error { + if retrier == nil { + retrier = noRetries // no retries by default + } + c.retrier = retrier + return nil + } +} + +// String returns a string representation of the client status. +func (c *Client) String() string { + c.connsMu.Lock() + conns := c.conns + c.connsMu.Unlock() + + var buf bytes.Buffer + for i, conn := range conns { + if i > 0 { + buf.WriteString(", ") + } + buf.WriteString(conn.String()) + } + return buf.String() +} + +// IsRunning returns true if the background processes of the client are +// running, false otherwise. +func (c *Client) IsRunning() bool { + c.mu.RLock() + defer c.mu.RUnlock() + return c.running +} + +// Start starts the background processes like sniffing the cluster and +// periodic health checks. You don't need to run Start when creating a +// client with NewClient; the background processes are run by default. +// +// If the background processes are already running, this is a no-op. +func (c *Client) Start() { + c.mu.RLock() + if c.running { + c.mu.RUnlock() + return + } + c.mu.RUnlock() + + if c.snifferEnabled { + go c.sniffer() + } + if c.healthcheckEnabled { + go c.healthchecker() + } + + c.mu.Lock() + c.running = true + c.mu.Unlock() + + c.infof("elastic: client started") +} + +// Stop stops the background processes that the client is running, +// i.e. sniffing the cluster periodically and running health checks +// on the nodes. +// +// If the background processes are not running, this is a no-op. +func (c *Client) Stop() { + c.mu.RLock() + if !c.running { + c.mu.RUnlock() + return + } + c.mu.RUnlock() + + if c.healthcheckEnabled { + c.healthcheckStop <- true + <-c.healthcheckStop + } + + if c.snifferEnabled { + c.snifferStop <- true + <-c.snifferStop + } + + c.mu.Lock() + c.running = false + c.mu.Unlock() + + c.infof("elastic: client stopped") +} + +// errorf logs to the error log. +func (c *Client) errorf(format string, args ...interface{}) { + if c.errorlog != nil { + c.errorlog.Printf(format, args...) + } +} + +// infof logs informational messages. +func (c *Client) infof(format string, args ...interface{}) { + if c.infolog != nil { + c.infolog.Printf(format, args...) + } +} + +// tracef logs to the trace log. +func (c *Client) tracef(format string, args ...interface{}) { + if c.tracelog != nil { + c.tracelog.Printf(format, args...) + } +} + +// dumpRequest dumps the given HTTP request to the trace log. +func (c *Client) dumpRequest(r *http.Request) { + if c.tracelog != nil { + out, err := httputil.DumpRequestOut(r, true) + if err == nil { + c.tracef("%s\n", string(out)) + } + } +} + +// dumpResponse dumps the given HTTP response to the trace log. +func (c *Client) dumpResponse(resp *http.Response) { + if c.tracelog != nil { + out, err := httputil.DumpResponse(resp, true) + if err == nil { + c.tracef("%s\n", string(out)) + } + } +} + +// sniffer periodically runs sniff. +func (c *Client) sniffer() { + c.mu.RLock() + timeout := c.snifferTimeout + interval := c.snifferInterval + c.mu.RUnlock() + + ticker := time.NewTicker(interval) + defer ticker.Stop() + + for { + select { + case <-c.snifferStop: + // we are asked to stop, so we signal back that we're stopping now + c.snifferStop <- true + return + case <-ticker.C: + c.sniff(timeout) + } + } +} + +// sniff uses the Node Info API to return the list of nodes in the cluster. +// It uses the list of URLs passed on startup plus the list of URLs found +// by the preceding sniffing process (if sniffing is enabled). +// +// If sniffing is disabled, this is a no-op. +func (c *Client) sniff(timeout time.Duration) error { + c.mu.RLock() + if !c.snifferEnabled { + c.mu.RUnlock() + return nil + } + + // Use all available URLs provided to sniff the cluster. + var urls []string + urlsMap := make(map[string]bool) + + // Add all URLs provided on startup + for _, url := range c.urls { + urlsMap[url] = true + urls = append(urls, url) + } + c.mu.RUnlock() + + // Add all URLs found by sniffing + c.connsMu.RLock() + for _, conn := range c.conns { + if !conn.IsDead() { + url := conn.URL() + if _, found := urlsMap[url]; !found { + urls = append(urls, url) + } + } + } + c.connsMu.RUnlock() + + if len(urls) == 0 { + return errors.Wrap(ErrNoClient, "no URLs found") + } + + // Start sniffing on all found URLs + ch := make(chan []*conn, len(urls)) + + ctx, cancel := context.WithTimeout(context.Background(), timeout) + defer cancel() + + for _, url := range urls { + go func(url string) { ch <- c.sniffNode(ctx, url) }(url) + } + + // Wait for the results to come back, or the process times out. + for { + select { + case conns := <-ch: + if len(conns) > 0 { + c.updateConns(conns) + return nil + } + case <-ctx.Done(): + // We get here if no cluster responds in time + return errors.Wrap(ErrNoClient, "sniff timeout") + } + } +} + +// sniffNode sniffs a single node. This method is run as a goroutine +// in sniff. If successful, it returns the list of node URLs extracted +// from the result of calling Nodes Info API. Otherwise, an empty array +// is returned. +func (c *Client) sniffNode(ctx context.Context, url string) []*conn { + var nodes []*conn + + // Call the Nodes Info API at /_nodes/http + req, err := NewRequest("GET", url+"/_nodes/http") + if err != nil { + return nodes + } + + c.mu.RLock() + if c.basicAuth { + req.SetBasicAuth(c.basicAuthUsername, c.basicAuthPassword) + } + c.mu.RUnlock() + + res, err := c.c.Do((*http.Request)(req).WithContext(ctx)) + if err != nil { + return nodes + } + if res == nil { + return nodes + } + + if res.Body != nil { + defer res.Body.Close() + } + + var info NodesInfoResponse + if err := json.NewDecoder(res.Body).Decode(&info); err == nil { + if len(info.Nodes) > 0 { + for nodeID, node := range info.Nodes { + if c.snifferCallback(node) { + if node.HTTP != nil && len(node.HTTP.PublishAddress) > 0 { + url := c.extractHostname(c.scheme, node.HTTP.PublishAddress) + if url != "" { + nodes = append(nodes, newConn(nodeID, url)) + } + } + } + } + } + } + return nodes +} + +// reSniffHostAndPort is used to extract hostname and port from a result +// from a Nodes Info API (example: "inet[/127.0.0.1:9200]"). +var reSniffHostAndPort = regexp.MustCompile(`\/([^:]*):([0-9]+)\]`) + +func (c *Client) extractHostname(scheme, address string) string { + if strings.HasPrefix(address, "inet") { + m := reSniffHostAndPort.FindStringSubmatch(address) + if len(m) == 3 { + return fmt.Sprintf("%s://%s:%s", scheme, m[1], m[2]) + } + } + s := address + if idx := strings.Index(s, "/"); idx >= 0 { + s = s[idx+1:] + } + if strings.Index(s, ":") < 0 { + return "" + } + return fmt.Sprintf("%s://%s", scheme, s) +} + +// updateConns updates the clients' connections with new information +// gather by a sniff operation. +func (c *Client) updateConns(conns []*conn) { + c.connsMu.Lock() + + // Build up new connections: + // If we find an existing connection, use that (including no. of failures etc.). + // If we find a new connection, add it. + var newConns []*conn + for _, conn := range conns { + var found bool + for _, oldConn := range c.conns { + if oldConn.NodeID() == conn.NodeID() { + // Take over the old connection + newConns = append(newConns, oldConn) + found = true + break + } + } + if !found { + // New connection didn't exist, so add it to our list of new conns. + c.infof("elastic: %s joined the cluster", conn.URL()) + newConns = append(newConns, conn) + } + } + + c.conns = newConns + c.cindex = -1 + c.connsMu.Unlock() +} + +// healthchecker periodically runs healthcheck. +func (c *Client) healthchecker() { + c.mu.RLock() + timeout := c.healthcheckTimeout + interval := c.healthcheckInterval + c.mu.RUnlock() + + ticker := time.NewTicker(interval) + defer ticker.Stop() + + for { + select { + case <-c.healthcheckStop: + // we are asked to stop, so we signal back that we're stopping now + c.healthcheckStop <- true + return + case <-ticker.C: + c.healthcheck(timeout, false) + } + } +} + +// healthcheck does a health check on all nodes in the cluster. Depending on +// the node state, it marks connections as dead, sets them alive etc. +// If healthchecks are disabled and force is false, this is a no-op. +// The timeout specifies how long to wait for a response from Elasticsearch. +func (c *Client) healthcheck(timeout time.Duration, force bool) { + c.mu.RLock() + if !c.healthcheckEnabled && !force { + c.mu.RUnlock() + return + } + basicAuth := c.basicAuth + basicAuthUsername := c.basicAuthUsername + basicAuthPassword := c.basicAuthPassword + c.mu.RUnlock() + + c.connsMu.RLock() + conns := c.conns + c.connsMu.RUnlock() + + for _, conn := range conns { + // Run the HEAD request against ES with a timeout + ctx, cancel := context.WithTimeout(context.Background(), timeout) + defer cancel() + + // Goroutine executes the HTTP request, returns an error and sets status + var status int + errc := make(chan error, 1) + go func(url string) { + req, err := NewRequest("HEAD", url) + if err != nil { + errc <- err + return + } + if basicAuth { + req.SetBasicAuth(basicAuthUsername, basicAuthPassword) + } + res, err := c.c.Do((*http.Request)(req).WithContext(ctx)) + if res != nil { + status = res.StatusCode + if res.Body != nil { + res.Body.Close() + } + } + errc <- err + }(conn.URL()) + + // Wait for the Goroutine (or its timeout) + select { + case <-ctx.Done(): // timeout + c.errorf("elastic: %s is dead", conn.URL()) + conn.MarkAsDead() + case err := <-errc: + if err != nil { + c.errorf("elastic: %s is dead", conn.URL()) + conn.MarkAsDead() + break + } + if status >= 200 && status < 300 { + conn.MarkAsAlive() + } else { + conn.MarkAsDead() + c.errorf("elastic: %s is dead [status=%d]", conn.URL(), status) + } + } + } +} + +// startupHealthcheck is used at startup to check if the server is available +// at all. +func (c *Client) startupHealthcheck(timeout time.Duration) error { + c.mu.Lock() + urls := c.urls + basicAuth := c.basicAuth + basicAuthUsername := c.basicAuthUsername + basicAuthPassword := c.basicAuthPassword + c.mu.Unlock() + + // If we don't get a connection after "timeout", we bail. + var lastErr error + start := time.Now() + for { + for _, url := range urls { + req, err := http.NewRequest("HEAD", url, nil) + if err != nil { + return err + } + if basicAuth { + req.SetBasicAuth(basicAuthUsername, basicAuthPassword) + } + ctx, cancel := context.WithTimeout(req.Context(), timeout) + defer cancel() + req = req.WithContext(ctx) + res, err := c.c.Do(req) + if err == nil && res != nil && res.StatusCode >= 200 && res.StatusCode < 300 { + return nil + } else if err != nil { + lastErr = err + } + } + time.Sleep(1 * time.Second) + if time.Since(start) > timeout { + break + } + } + if lastErr != nil { + return errors.Wrapf(ErrNoClient, "health check timeout: %v", lastErr) + } + return errors.Wrap(ErrNoClient, "health check timeout") +} + +// next returns the next available connection, or ErrNoClient. +func (c *Client) next() (*conn, error) { + // We do round-robin here. + // TODO(oe) This should be a pluggable strategy, like the Selector in the official clients. + c.connsMu.Lock() + defer c.connsMu.Unlock() + + i := 0 + numConns := len(c.conns) + for { + i++ + if i > numConns { + break // we visited all conns: they all seem to be dead + } + c.cindex++ + if c.cindex >= numConns { + c.cindex = 0 + } + conn := c.conns[c.cindex] + if !conn.IsDead() { + return conn, nil + } + } + + // We have a deadlock here: All nodes are marked as dead. + // If sniffing is disabled, connections will never be marked alive again. + // So we are marking them as alive--if sniffing is disabled. + // They'll then be picked up in the next call to PerformRequest. + if !c.snifferEnabled { + c.errorf("elastic: all %d nodes marked as dead; resurrecting them to prevent deadlock", len(c.conns)) + for _, conn := range c.conns { + conn.MarkAsAlive() + } + } + + // We tried hard, but there is no node available + return nil, errors.Wrap(ErrNoClient, "no available connection") +} + +// mustActiveConn returns nil if there is an active connection, +// otherwise ErrNoClient is returned. +func (c *Client) mustActiveConn() error { + c.connsMu.Lock() + defer c.connsMu.Unlock() + + for _, c := range c.conns { + if !c.IsDead() { + return nil + } + } + return errors.Wrap(ErrNoClient, "no active connection found") +} + +// -- PerformRequest -- + +// PerformRequestOptions must be passed into PerformRequest. +type PerformRequestOptions struct { + Method string + Path string + Params url.Values + Body interface{} + ContentType string + IgnoreErrors []int + Retrier Retrier +} + +// PerformRequest does a HTTP request to Elasticsearch. +// It returns a response (which might be nil) and an error on failure. +// +// Optionally, a list of HTTP error codes to ignore can be passed. +// This is necessary for services that expect e.g. HTTP status 404 as a +// valid outcome (Exists, IndicesExists, IndicesTypeExists). +func (c *Client) PerformRequest(ctx context.Context, opt PerformRequestOptions) (*Response, error) { + start := time.Now().UTC() + + c.mu.RLock() + timeout := c.healthcheckTimeout + basicAuth := c.basicAuth + basicAuthUsername := c.basicAuthUsername + basicAuthPassword := c.basicAuthPassword + sendGetBodyAs := c.sendGetBodyAs + retrier := c.retrier + if opt.Retrier != nil { + retrier = opt.Retrier + } + c.mu.RUnlock() + + var err error + var conn *conn + var req *Request + var resp *Response + var retried bool + var n int + + // Change method if sendGetBodyAs is specified. + if opt.Method == "GET" && opt.Body != nil && sendGetBodyAs != "GET" { + opt.Method = sendGetBodyAs + } + + for { + pathWithParams := opt.Path + if len(opt.Params) > 0 { + pathWithParams += "?" + opt.Params.Encode() + } + + // Get a connection + conn, err = c.next() + if errors.Cause(err) == ErrNoClient { + n++ + if !retried { + // Force a healtcheck as all connections seem to be dead. + c.healthcheck(timeout, false) + } + wait, ok, rerr := retrier.Retry(ctx, n, nil, nil, err) + if rerr != nil { + return nil, rerr + } + if !ok { + return nil, err + } + retried = true + time.Sleep(wait) + continue // try again + } + if err != nil { + c.errorf("elastic: cannot get connection from pool") + return nil, err + } + + req, err = NewRequest(opt.Method, conn.URL()+pathWithParams) + if err != nil { + c.errorf("elastic: cannot create request for %s %s: %v", strings.ToUpper(opt.Method), conn.URL()+pathWithParams, err) + return nil, err + } + + if basicAuth { + req.SetBasicAuth(basicAuthUsername, basicAuthPassword) + } + if opt.ContentType != "" { + req.Header.Set("Content-Type", opt.ContentType) + } + + // Set body + if opt.Body != nil { + err = req.SetBody(opt.Body) + if err != nil { + c.errorf("elastic: couldn't set body %+v for request: %v", opt.Body, err) + return nil, err + } + } + + // Tracing + c.dumpRequest((*http.Request)(req)) + + // Get response + res, err := c.c.Do((*http.Request)(req).WithContext(ctx)) + if err == context.Canceled || err == context.DeadlineExceeded { + // Proceed, but don't mark the node as dead + return nil, err + } + if ue, ok := err.(*url.Error); ok { + // This happens e.g. on redirect errors, see https://golang.org/src/net/http/client_test.go#L329 + if ue.Err == context.Canceled || ue.Err == context.DeadlineExceeded { + // Proceed, but don't mark the node as dead + return nil, err + } + } + if err != nil { + n++ + wait, ok, rerr := retrier.Retry(ctx, n, (*http.Request)(req), res, err) + if rerr != nil { + c.errorf("elastic: %s is dead", conn.URL()) + conn.MarkAsDead() + return nil, rerr + } + if !ok { + c.errorf("elastic: %s is dead", conn.URL()) + conn.MarkAsDead() + return nil, err + } + retried = true + time.Sleep(wait) + continue // try again + } + if res.Body != nil { + defer res.Body.Close() + } + + // Tracing + c.dumpResponse(res) + + // Log deprecation warnings as errors + if s := res.Header.Get("Warning"); s != "" { + c.errorf(s) + } + + // Check for errors + if err := checkResponse((*http.Request)(req), res, opt.IgnoreErrors...); err != nil { + // No retry if request succeeded + // We still try to return a response. + resp, _ = c.newResponse(res) + return resp, err + } + + // We successfully made a request with this connection + conn.MarkAsHealthy() + + resp, err = c.newResponse(res) + if err != nil { + return nil, err + } + + break + } + + duration := time.Now().UTC().Sub(start) + c.infof("%s %s [status:%d, request:%.3fs]", + strings.ToUpper(opt.Method), + req.URL, + resp.StatusCode, + float64(int64(duration/time.Millisecond))/1000) + + return resp, nil +} + +// -- Document APIs -- + +// Index a document. +func (c *Client) Index() *IndexService { + return NewIndexService(c) +} + +// Get a document. +func (c *Client) Get() *GetService { + return NewGetService(c) +} + +// MultiGet retrieves multiple documents in one roundtrip. +func (c *Client) MultiGet() *MgetService { + return NewMgetService(c) +} + +// Mget retrieves multiple documents in one roundtrip. +func (c *Client) Mget() *MgetService { + return NewMgetService(c) +} + +// Delete a document. +func (c *Client) Delete() *DeleteService { + return NewDeleteService(c) +} + +// DeleteByQuery deletes documents as found by a query. +func (c *Client) DeleteByQuery(indices ...string) *DeleteByQueryService { + return NewDeleteByQueryService(c).Index(indices...) +} + +// Update a document. +func (c *Client) Update() *UpdateService { + return NewUpdateService(c) +} + +// UpdateByQuery performs an update on a set of documents. +func (c *Client) UpdateByQuery(indices ...string) *UpdateByQueryService { + return NewUpdateByQueryService(c).Index(indices...) +} + +// Bulk is the entry point to mass insert/update/delete documents. +func (c *Client) Bulk() *BulkService { + return NewBulkService(c) +} + +// BulkProcessor allows setting up a concurrent processor of bulk requests. +func (c *Client) BulkProcessor() *BulkProcessorService { + return NewBulkProcessorService(c) +} + +// Reindex copies data from a source index into a destination index. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-reindex.html +// for details on the Reindex API. +func (c *Client) Reindex() *ReindexService { + return NewReindexService(c) +} + +// TermVectors returns information and statistics on terms in the fields +// of a particular document. +func (c *Client) TermVectors(index, typ string) *TermvectorsService { + builder := NewTermvectorsService(c) + builder = builder.Index(index).Type(typ) + return builder +} + +// MultiTermVectors returns information and statistics on terms in the fields +// of multiple documents. +func (c *Client) MultiTermVectors() *MultiTermvectorService { + return NewMultiTermvectorService(c) +} + +// -- Search APIs -- + +// Search is the entry point for searches. +func (c *Client) Search(indices ...string) *SearchService { + return NewSearchService(c).Index(indices...) +} + +// MultiSearch is the entry point for multi searches. +func (c *Client) MultiSearch() *MultiSearchService { + return NewMultiSearchService(c) +} + +// Count documents. +func (c *Client) Count(indices ...string) *CountService { + return NewCountService(c).Index(indices...) +} + +// Explain computes a score explanation for a query and a specific document. +func (c *Client) Explain(index, typ, id string) *ExplainService { + return NewExplainService(c).Index(index).Type(typ).Id(id) +} + +// TODO Search Template +// TODO Search Exists API + +// Validate allows a user to validate a potentially expensive query without executing it. +func (c *Client) Validate(indices ...string) *ValidateService { + return NewValidateService(c).Index(indices...) +} + +// SearchShards returns statistical information about nodes and shards. +func (c *Client) SearchShards(indices ...string) *SearchShardsService { + return NewSearchShardsService(c).Index(indices...) +} + +// FieldCaps returns statistical information about fields in indices. +func (c *Client) FieldCaps(indices ...string) *FieldCapsService { + return NewFieldCapsService(c).Index(indices...) +} + +// Exists checks if a document exists. +func (c *Client) Exists() *ExistsService { + return NewExistsService(c) +} + +// Scroll through documents. Use this to efficiently scroll through results +// while returning the results to a client. +func (c *Client) Scroll(indices ...string) *ScrollService { + return NewScrollService(c).Index(indices...) +} + +// ClearScroll can be used to clear search contexts manually. +func (c *Client) ClearScroll(scrollIds ...string) *ClearScrollService { + return NewClearScrollService(c).ScrollId(scrollIds...) +} + +// -- Indices APIs -- + +// CreateIndex returns a service to create a new index. +func (c *Client) CreateIndex(name string) *IndicesCreateService { + return NewIndicesCreateService(c).Index(name) +} + +// DeleteIndex returns a service to delete an index. +func (c *Client) DeleteIndex(indices ...string) *IndicesDeleteService { + return NewIndicesDeleteService(c).Index(indices) +} + +// IndexExists allows to check if an index exists. +func (c *Client) IndexExists(indices ...string) *IndicesExistsService { + return NewIndicesExistsService(c).Index(indices) +} + +// ShrinkIndex returns a service to shrink one index into another. +func (c *Client) ShrinkIndex(source, target string) *IndicesShrinkService { + return NewIndicesShrinkService(c).Source(source).Target(target) +} + +// RolloverIndex rolls an alias over to a new index when the existing index +// is considered to be too large or too old. +func (c *Client) RolloverIndex(alias string) *IndicesRolloverService { + return NewIndicesRolloverService(c).Alias(alias) +} + +// TypeExists allows to check if one or more types exist in one or more indices. +func (c *Client) TypeExists() *IndicesExistsTypeService { + return NewIndicesExistsTypeService(c) +} + +// IndexStats provides statistics on different operations happining +// in one or more indices. +func (c *Client) IndexStats(indices ...string) *IndicesStatsService { + return NewIndicesStatsService(c).Index(indices...) +} + +// OpenIndex opens an index. +func (c *Client) OpenIndex(name string) *IndicesOpenService { + return NewIndicesOpenService(c).Index(name) +} + +// CloseIndex closes an index. +func (c *Client) CloseIndex(name string) *IndicesCloseService { + return NewIndicesCloseService(c).Index(name) +} + +// IndexGet retrieves information about one or more indices. +// IndexGet is only available for Elasticsearch 1.4 or later. +func (c *Client) IndexGet(indices ...string) *IndicesGetService { + return NewIndicesGetService(c).Index(indices...) +} + +// IndexGetSettings retrieves settings of all, one or more indices. +func (c *Client) IndexGetSettings(indices ...string) *IndicesGetSettingsService { + return NewIndicesGetSettingsService(c).Index(indices...) +} + +// IndexPutSettings sets settings for all, one or more indices. +func (c *Client) IndexPutSettings(indices ...string) *IndicesPutSettingsService { + return NewIndicesPutSettingsService(c).Index(indices...) +} + +// IndexSegments retrieves low level segment information for all, one or more indices. +func (c *Client) IndexSegments(indices ...string) *IndicesSegmentsService { + return NewIndicesSegmentsService(c).Index(indices...) +} + +// IndexAnalyze performs the analysis process on a text and returns the +// token breakdown of the text. +func (c *Client) IndexAnalyze() *IndicesAnalyzeService { + return NewIndicesAnalyzeService(c) +} + +// Forcemerge optimizes one or more indices. +// It replaces the deprecated Optimize API. +func (c *Client) Forcemerge(indices ...string) *IndicesForcemergeService { + return NewIndicesForcemergeService(c).Index(indices...) +} + +// Refresh asks Elasticsearch to refresh one or more indices. +func (c *Client) Refresh(indices ...string) *RefreshService { + return NewRefreshService(c).Index(indices...) +} + +// Flush asks Elasticsearch to free memory from the index and +// flush data to disk. +func (c *Client) Flush(indices ...string) *IndicesFlushService { + return NewIndicesFlushService(c).Index(indices...) +} + +// Alias enables the caller to add and/or remove aliases. +func (c *Client) Alias() *AliasService { + return NewAliasService(c) +} + +// Aliases returns aliases by index name(s). +func (c *Client) Aliases() *AliasesService { + return NewAliasesService(c) +} + +// IndexGetTemplate gets an index template. +// Use XXXTemplate funcs to manage search templates. +func (c *Client) IndexGetTemplate(names ...string) *IndicesGetTemplateService { + return NewIndicesGetTemplateService(c).Name(names...) +} + +// IndexTemplateExists gets check if an index template exists. +// Use XXXTemplate funcs to manage search templates. +func (c *Client) IndexTemplateExists(name string) *IndicesExistsTemplateService { + return NewIndicesExistsTemplateService(c).Name(name) +} + +// IndexPutTemplate creates or updates an index template. +// Use XXXTemplate funcs to manage search templates. +func (c *Client) IndexPutTemplate(name string) *IndicesPutTemplateService { + return NewIndicesPutTemplateService(c).Name(name) +} + +// IndexDeleteTemplate deletes an index template. +// Use XXXTemplate funcs to manage search templates. +func (c *Client) IndexDeleteTemplate(name string) *IndicesDeleteTemplateService { + return NewIndicesDeleteTemplateService(c).Name(name) +} + +// GetMapping gets a mapping. +func (c *Client) GetMapping() *IndicesGetMappingService { + return NewIndicesGetMappingService(c) +} + +// PutMapping registers a mapping. +func (c *Client) PutMapping() *IndicesPutMappingService { + return NewIndicesPutMappingService(c) +} + +// GetFieldMapping gets mapping for fields. +func (c *Client) GetFieldMapping() *IndicesGetFieldMappingService { + return NewIndicesGetFieldMappingService(c) +} + +// -- cat APIs -- + +// TODO cat aliases +// TODO cat allocation +// TODO cat count +// TODO cat fielddata +// TODO cat health +// TODO cat indices +// TODO cat master +// TODO cat nodes +// TODO cat pending tasks +// TODO cat plugins +// TODO cat recovery +// TODO cat thread pool +// TODO cat shards +// TODO cat segments + +// -- Ingest APIs -- + +// IngestPutPipeline adds pipelines and updates existing pipelines in +// the cluster. +func (c *Client) IngestPutPipeline(id string) *IngestPutPipelineService { + return NewIngestPutPipelineService(c).Id(id) +} + +// IngestGetPipeline returns pipelines based on ID. +func (c *Client) IngestGetPipeline(ids ...string) *IngestGetPipelineService { + return NewIngestGetPipelineService(c).Id(ids...) +} + +// IngestDeletePipeline deletes a pipeline by ID. +func (c *Client) IngestDeletePipeline(id string) *IngestDeletePipelineService { + return NewIngestDeletePipelineService(c).Id(id) +} + +// IngestSimulatePipeline executes a specific pipeline against the set of +// documents provided in the body of the request. +func (c *Client) IngestSimulatePipeline() *IngestSimulatePipelineService { + return NewIngestSimulatePipelineService(c) +} + +// -- Cluster APIs -- + +// ClusterHealth retrieves the health of the cluster. +func (c *Client) ClusterHealth() *ClusterHealthService { + return NewClusterHealthService(c) +} + +// ClusterState retrieves the state of the cluster. +func (c *Client) ClusterState() *ClusterStateService { + return NewClusterStateService(c) +} + +// ClusterStats retrieves cluster statistics. +func (c *Client) ClusterStats() *ClusterStatsService { + return NewClusterStatsService(c) +} + +// NodesInfo retrieves one or more or all of the cluster nodes information. +func (c *Client) NodesInfo() *NodesInfoService { + return NewNodesInfoService(c) +} + +// NodesStats retrieves one or more or all of the cluster nodes statistics. +func (c *Client) NodesStats() *NodesStatsService { + return NewNodesStatsService(c) +} + +// TasksCancel cancels tasks running on the specified nodes. +func (c *Client) TasksCancel() *TasksCancelService { + return NewTasksCancelService(c) +} + +// TasksList retrieves the list of tasks running on the specified nodes. +func (c *Client) TasksList() *TasksListService { + return NewTasksListService(c) +} + +// TasksGetTask retrieves a task running on the cluster. +func (c *Client) TasksGetTask() *TasksGetTaskService { + return NewTasksGetTaskService(c) +} + +// TODO Pending cluster tasks +// TODO Cluster Reroute +// TODO Cluster Update Settings +// TODO Nodes Stats +// TODO Nodes hot_threads + +// -- Snapshot and Restore -- + +// TODO Snapshot Delete +// TODO Snapshot Get +// TODO Snapshot Restore +// TODO Snapshot Status + +// SnapshotCreate creates a snapshot. +func (c *Client) SnapshotCreate(repository string, snapshot string) *SnapshotCreateService { + return NewSnapshotCreateService(c).Repository(repository).Snapshot(snapshot) +} + +// SnapshotCreateRepository creates or updates a snapshot repository. +func (c *Client) SnapshotCreateRepository(repository string) *SnapshotCreateRepositoryService { + return NewSnapshotCreateRepositoryService(c).Repository(repository) +} + +// SnapshotDeleteRepository deletes a snapshot repository. +func (c *Client) SnapshotDeleteRepository(repositories ...string) *SnapshotDeleteRepositoryService { + return NewSnapshotDeleteRepositoryService(c).Repository(repositories...) +} + +// SnapshotGetRepository gets a snapshot repository. +func (c *Client) SnapshotGetRepository(repositories ...string) *SnapshotGetRepositoryService { + return NewSnapshotGetRepositoryService(c).Repository(repositories...) +} + +// SnapshotVerifyRepository verifies a snapshot repository. +func (c *Client) SnapshotVerifyRepository(repository string) *SnapshotVerifyRepositoryService { + return NewSnapshotVerifyRepositoryService(c).Repository(repository) +} + +// -- Helpers and shortcuts -- + +// ElasticsearchVersion returns the version number of Elasticsearch +// running on the given URL. +func (c *Client) ElasticsearchVersion(url string) (string, error) { + res, _, err := c.Ping(url).Do(context.Background()) + if err != nil { + return "", err + } + return res.Version.Number, nil +} + +// IndexNames returns the names of all indices in the cluster. +func (c *Client) IndexNames() ([]string, error) { + res, err := c.IndexGetSettings().Index("_all").Do(context.Background()) + if err != nil { + return nil, err + } + var names []string + for name := range res { + names = append(names, name) + } + return names, nil +} + +// Ping checks if a given node in a cluster exists and (optionally) +// returns some basic information about the Elasticsearch server, +// e.g. the Elasticsearch version number. +// +// Notice that you need to specify a URL here explicitly. +func (c *Client) Ping(url string) *PingService { + return NewPingService(c).URL(url) +} + +// WaitForStatus waits for the cluster to have the given status. +// This is a shortcut method for the ClusterHealth service. +// +// WaitForStatus waits for the specified timeout, e.g. "10s". +// If the cluster will have the given state within the timeout, nil is returned. +// If the request timed out, ErrTimeout is returned. +func (c *Client) WaitForStatus(status string, timeout string) error { + health, err := c.ClusterHealth().WaitForStatus(status).Timeout(timeout).Do(context.Background()) + if err != nil { + return err + } + if health.TimedOut { + return ErrTimeout + } + return nil +} + +// WaitForGreenStatus waits for the cluster to have the "green" status. +// See WaitForStatus for more details. +func (c *Client) WaitForGreenStatus(timeout string) error { + return c.WaitForStatus("green", timeout) +} + +// WaitForYellowStatus waits for the cluster to have the "yellow" status. +// See WaitForStatus for more details. +func (c *Client) WaitForYellowStatus(timeout string) error { + return c.WaitForStatus("yellow", timeout) +} diff --git a/vendor/github.com/olivere/elastic/client_test.go b/vendor/github.com/olivere/elastic/client_test.go new file mode 100644 index 0000000..b2867d0 --- /dev/null +++ b/vendor/github.com/olivere/elastic/client_test.go @@ -0,0 +1,1319 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "bytes" + "context" + "encoding/json" + "errors" + "fmt" + "log" + "net" + "net/http" + "reflect" + "regexp" + "strings" + "sync" + "testing" + "time" + + "github.com/fortytw2/leaktest" +) + +func findConn(s string, slice ...*conn) (int, bool) { + for i, t := range slice { + if s == t.URL() { + return i, true + } + } + return -1, false +} + +// -- NewClient -- + +func TestClientDefaults(t *testing.T) { + client, err := NewClient() + if err != nil { + t.Fatal(err) + } + if client.healthcheckEnabled != true { + t.Errorf("expected health checks to be enabled, got: %v", client.healthcheckEnabled) + } + if client.healthcheckTimeoutStartup != DefaultHealthcheckTimeoutStartup { + t.Errorf("expected health checks timeout on startup = %v, got: %v", DefaultHealthcheckTimeoutStartup, client.healthcheckTimeoutStartup) + } + if client.healthcheckTimeout != DefaultHealthcheckTimeout { + t.Errorf("expected health checks timeout = %v, got: %v", DefaultHealthcheckTimeout, client.healthcheckTimeout) + } + if client.healthcheckInterval != DefaultHealthcheckInterval { + t.Errorf("expected health checks interval = %v, got: %v", DefaultHealthcheckInterval, client.healthcheckInterval) + } + if client.snifferEnabled != true { + t.Errorf("expected sniffing to be enabled, got: %v", client.snifferEnabled) + } + if client.snifferTimeoutStartup != DefaultSnifferTimeoutStartup { + t.Errorf("expected sniffer timeout on startup = %v, got: %v", DefaultSnifferTimeoutStartup, client.snifferTimeoutStartup) + } + if client.snifferTimeout != DefaultSnifferTimeout { + t.Errorf("expected sniffer timeout = %v, got: %v", DefaultSnifferTimeout, client.snifferTimeout) + } + if client.snifferInterval != DefaultSnifferInterval { + t.Errorf("expected sniffer interval = %v, got: %v", DefaultSnifferInterval, client.snifferInterval) + } + if client.basicAuth != false { + t.Errorf("expected no basic auth; got: %v", client.basicAuth) + } + if client.basicAuthUsername != "" { + t.Errorf("expected no basic auth username; got: %q", client.basicAuthUsername) + } + if client.basicAuthPassword != "" { + t.Errorf("expected no basic auth password; got: %q", client.basicAuthUsername) + } + if client.sendGetBodyAs != "GET" { + t.Errorf("expected sendGetBodyAs to be GET; got: %q", client.sendGetBodyAs) + } +} + +func TestClientWithoutURL(t *testing.T) { + client, err := NewClient() + if err != nil { + t.Fatal(err) + } + // Two things should happen here: + // 1. The client starts sniffing the cluster on DefaultURL + // 2. The sniffing process should find (at least) one node in the cluster, i.e. the DefaultURL + if len(client.conns) == 0 { + t.Fatalf("expected at least 1 node in the cluster, got: %d (%v)", len(client.conns), client.conns) + } + if !isTravis() { + if _, found := findConn(DefaultURL, client.conns...); !found { + t.Errorf("expected to find node with default URL of %s in %v", DefaultURL, client.conns) + } + } +} + +func TestClientWithSingleURL(t *testing.T) { + client, err := NewClient(SetURL("http://127.0.0.1:9200")) + if err != nil { + t.Fatal(err) + } + // Two things should happen here: + // 1. The client starts sniffing the cluster on DefaultURL + // 2. The sniffing process should find (at least) one node in the cluster, i.e. the DefaultURL + if len(client.conns) == 0 { + t.Fatalf("expected at least 1 node in the cluster, got: %d (%v)", len(client.conns), client.conns) + } + if !isTravis() { + if _, found := findConn(DefaultURL, client.conns...); !found { + t.Errorf("expected to find node with default URL of %s in %v", DefaultURL, client.conns) + } + } +} + +func TestClientWithMultipleURLs(t *testing.T) { + client, err := NewClient(SetURL("http://127.0.0.1:9200", "http://127.0.0.1:9201")) + if err != nil { + t.Fatal(err) + } + // The client should sniff both URLs, but only 127.0.0.1:9200 should return nodes. + if len(client.conns) != 1 { + t.Fatalf("expected exactly 1 node in the local cluster, got: %d (%v)", len(client.conns), client.conns) + } + if !isTravis() { + if client.conns[0].URL() != DefaultURL { + t.Errorf("expected to find node with default URL of %s in %v", DefaultURL, client.conns) + } + } +} + +func TestClientWithBasicAuth(t *testing.T) { + client, err := NewClient(SetBasicAuth("user", "secret")) + if err != nil { + t.Fatal(err) + } + if client.basicAuth != true { + t.Errorf("expected basic auth; got: %v", client.basicAuth) + } + if got, want := client.basicAuthUsername, "user"; got != want { + t.Errorf("expected basic auth username %q; got: %q", want, got) + } + if got, want := client.basicAuthPassword, "secret"; got != want { + t.Errorf("expected basic auth password %q; got: %q", want, got) + } +} + +func TestClientWithBasicAuthInUserInfo(t *testing.T) { + client, err := NewClient(SetURL("http://user1:secret1@localhost:9200", "http://user2:secret2@localhost:9200")) + if err != nil { + t.Fatal(err) + } + if client.basicAuth != true { + t.Errorf("expected basic auth; got: %v", client.basicAuth) + } + if got, want := client.basicAuthUsername, "user1"; got != want { + t.Errorf("expected basic auth username %q; got: %q", want, got) + } + if got, want := client.basicAuthPassword, "secret1"; got != want { + t.Errorf("expected basic auth password %q; got: %q", want, got) + } +} + +func TestClientSniffSuccess(t *testing.T) { + client, err := NewClient(SetURL("http://127.0.0.1:19200", "http://127.0.0.1:9200")) + if err != nil { + t.Fatal(err) + } + // The client should sniff both URLs, but only 127.0.0.1:9200 should return nodes. + if len(client.conns) != 1 { + t.Fatalf("expected exactly 1 node in the local cluster, got: %d (%v)", len(client.conns), client.conns) + } +} + +func TestClientSniffFailure(t *testing.T) { + _, err := NewClient(SetURL("http://127.0.0.1:19200", "http://127.0.0.1:19201")) + if err == nil { + t.Fatalf("expected cluster to fail with no nodes found") + } +} + +func TestClientSnifferCallback(t *testing.T) { + var calls int + cb := func(node *NodesInfoNode) bool { + calls++ + return false + } + _, err := NewClient( + SetURL("http://127.0.0.1:19200", "http://127.0.0.1:9200"), + SetSnifferCallback(cb)) + if err == nil { + t.Fatalf("expected cluster to fail with no nodes found") + } + if calls != 1 { + t.Fatalf("expected 1 call to the sniffer callback, got %d", calls) + } +} + +func TestClientSniffDisabled(t *testing.T) { + client, err := NewClient(SetSniff(false), SetURL("http://127.0.0.1:9200", "http://127.0.0.1:9201")) + if err != nil { + t.Fatal(err) + } + // The client should not sniff, so it should have two connections. + if len(client.conns) != 2 { + t.Fatalf("expected 2 nodes, got: %d (%v)", len(client.conns), client.conns) + } + // Make two requests, so that both connections are being used + for i := 0; i < len(client.conns); i++ { + client.Flush().Do(context.TODO()) + } + // The first connection (127.0.0.1:9200) should now be okay. + if i, found := findConn("http://127.0.0.1:9200", client.conns...); !found { + t.Fatalf("expected connection to %q to be found", "http://127.0.0.1:9200") + } else { + if conn := client.conns[i]; conn.IsDead() { + t.Fatal("expected connection to be alive, but it is dead") + } + } + // The second connection (127.0.0.1:9201) should now be marked as dead. + if i, found := findConn("http://127.0.0.1:9201", client.conns...); !found { + t.Fatalf("expected connection to %q to be found", "http://127.0.0.1:9201") + } else { + if conn := client.conns[i]; !conn.IsDead() { + t.Fatal("expected connection to be dead, but it is alive") + } + } +} + +func TestClientWillMarkConnectionsAsAliveWhenAllAreDead(t *testing.T) { + client, err := NewClient(SetURL("http://127.0.0.1:9201"), + SetSniff(false), SetHealthcheck(false), SetMaxRetries(0)) + if err != nil { + t.Fatal(err) + } + // We should have a connection. + if len(client.conns) != 1 { + t.Fatalf("expected 1 node, got: %d (%v)", len(client.conns), client.conns) + } + + // Make a request, so that the connections is marked as dead. + client.Flush().Do(context.TODO()) + + // The connection should now be marked as dead. + if i, found := findConn("http://127.0.0.1:9201", client.conns...); !found { + t.Fatalf("expected connection to %q to be found", "http://127.0.0.1:9201") + } else { + if conn := client.conns[i]; !conn.IsDead() { + t.Fatalf("expected connection to be dead, got: %v", conn) + } + } + + // Now send another request and the connection should be marked as alive again. + client.Flush().Do(context.TODO()) + + if i, found := findConn("http://127.0.0.1:9201", client.conns...); !found { + t.Fatalf("expected connection to %q to be found", "http://127.0.0.1:9201") + } else { + if conn := client.conns[i]; conn.IsDead() { + t.Fatalf("expected connection to be alive, got: %v", conn) + } + } +} + +func TestClientWithRequiredPlugins(t *testing.T) { + _, err := NewClient(SetRequiredPlugins("no-such-plugin")) + if err == nil { + t.Fatal("expected error when creating client") + } + if got, want := err.Error(), "elastic: plugin no-such-plugin not found"; got != want { + t.Fatalf("expected error %q; got: %q", want, got) + } +} + +func TestClientHealthcheckStartupTimeout(t *testing.T) { + start := time.Now() + _, err := NewClient(SetURL("http://localhost:9299"), SetHealthcheckTimeoutStartup(5*time.Second)) + duration := time.Since(start) + if !IsConnErr(err) { + t.Fatal(err) + } + if !strings.Contains(err.Error(), "connection refused") { + t.Fatalf("expected error to contain %q, have %q", "connection refused", err.Error()) + } + if duration < 5*time.Second { + t.Fatalf("expected a timeout in more than 5 seconds; got: %v", duration) + } +} + +func TestClientHealthcheckTimeoutLeak(t *testing.T) { + // This test test checks if healthcheck requests are canceled + // after timeout. + // It contains couple of hacks which won't be needed once we + // stop supporting Go1.7. + // On Go1.7 it uses server side effects to monitor if connection + // was closed, + // and on Go 1.8+ we're additionally honestly monitoring routine + // leaks via leaktest. + mux := http.NewServeMux() + + var reqDoneMu sync.Mutex + var reqDone bool + mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + cn, ok := w.(http.CloseNotifier) + if !ok { + t.Fatalf("Writer is not CloseNotifier, but %v", reflect.TypeOf(w).Name()) + } + <-cn.CloseNotify() + reqDoneMu.Lock() + reqDone = true + reqDoneMu.Unlock() + }) + + lis, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + t.Fatalf("Couldn't setup listener: %v", err) + } + addr := lis.Addr().String() + + srv := &http.Server{ + Handler: mux, + } + go srv.Serve(lis) + + cli := &Client{ + c: &http.Client{}, + conns: []*conn{ + &conn{ + url: "http://" + addr + "/", + }, + }, + } + + type closer interface { + Shutdown(context.Context) error + } + + // pre-Go1.8 Server can't Shutdown + cl, isServerCloseable := (interface{}(srv)).(closer) + + // Since Go1.7 can't Shutdown() - there will be leak from server + // Monitor leaks on Go 1.8+ + if isServerCloseable { + defer leaktest.CheckTimeout(t, time.Second*10)() + } + + cli.healthcheck(time.Millisecond*500, true) + + if isServerCloseable { + ctx, cancel := context.WithTimeout(context.Background(), time.Second) + defer cancel() + cl.Shutdown(ctx) + } + + <-time.After(time.Second) + reqDoneMu.Lock() + if !reqDone { + reqDoneMu.Unlock() + t.Fatal("Request wasn't canceled or stopped") + } + reqDoneMu.Unlock() +} + +// -- NewSimpleClient -- + +func TestSimpleClientDefaults(t *testing.T) { + client, err := NewSimpleClient() + if err != nil { + t.Fatal(err) + } + if client.healthcheckEnabled != false { + t.Errorf("expected health checks to be disabled, got: %v", client.healthcheckEnabled) + } + if client.healthcheckTimeoutStartup != off { + t.Errorf("expected health checks timeout on startup = %v, got: %v", off, client.healthcheckTimeoutStartup) + } + if client.healthcheckTimeout != off { + t.Errorf("expected health checks timeout = %v, got: %v", off, client.healthcheckTimeout) + } + if client.healthcheckInterval != off { + t.Errorf("expected health checks interval = %v, got: %v", off, client.healthcheckInterval) + } + if client.snifferEnabled != false { + t.Errorf("expected sniffing to be disabled, got: %v", client.snifferEnabled) + } + if client.snifferTimeoutStartup != off { + t.Errorf("expected sniffer timeout on startup = %v, got: %v", off, client.snifferTimeoutStartup) + } + if client.snifferTimeout != off { + t.Errorf("expected sniffer timeout = %v, got: %v", off, client.snifferTimeout) + } + if client.snifferInterval != off { + t.Errorf("expected sniffer interval = %v, got: %v", off, client.snifferInterval) + } + if client.basicAuth != false { + t.Errorf("expected no basic auth; got: %v", client.basicAuth) + } + if client.basicAuthUsername != "" { + t.Errorf("expected no basic auth username; got: %q", client.basicAuthUsername) + } + if client.basicAuthPassword != "" { + t.Errorf("expected no basic auth password; got: %q", client.basicAuthUsername) + } + if client.sendGetBodyAs != "GET" { + t.Errorf("expected sendGetBodyAs to be GET; got: %q", client.sendGetBodyAs) + } +} + +// -- Start and stop -- + +func TestClientStartAndStop(t *testing.T) { + client, err := NewClient() + if err != nil { + t.Fatal(err) + } + + running := client.IsRunning() + if !running { + t.Fatalf("expected background processes to run; got: %v", running) + } + + // Stop + client.Stop() + running = client.IsRunning() + if running { + t.Fatalf("expected background processes to be stopped; got: %v", running) + } + + // Stop again => no-op + client.Stop() + running = client.IsRunning() + if running { + t.Fatalf("expected background processes to be stopped; got: %v", running) + } + + // Start + client.Start() + running = client.IsRunning() + if !running { + t.Fatalf("expected background processes to run; got: %v", running) + } + + // Start again => no-op + client.Start() + running = client.IsRunning() + if !running { + t.Fatalf("expected background processes to run; got: %v", running) + } +} + +func TestClientStartAndStopWithSnifferAndHealthchecksDisabled(t *testing.T) { + client, err := NewClient(SetSniff(false), SetHealthcheck(false)) + if err != nil { + t.Fatal(err) + } + + running := client.IsRunning() + if !running { + t.Fatalf("expected background processes to run; got: %v", running) + } + + // Stop + client.Stop() + running = client.IsRunning() + if running { + t.Fatalf("expected background processes to be stopped; got: %v", running) + } + + // Stop again => no-op + client.Stop() + running = client.IsRunning() + if running { + t.Fatalf("expected background processes to be stopped; got: %v", running) + } + + // Start + client.Start() + running = client.IsRunning() + if !running { + t.Fatalf("expected background processes to run; got: %v", running) + } + + // Start again => no-op + client.Start() + running = client.IsRunning() + if !running { + t.Fatalf("expected background processes to run; got: %v", running) + } +} + +// -- Sniffing -- + +func TestClientSniffNode(t *testing.T) { + client, err := NewClient() + if err != nil { + t.Fatal(err) + } + + ch := make(chan []*conn) + go func() { ch <- client.sniffNode(context.Background(), DefaultURL) }() + + select { + case nodes := <-ch: + if len(nodes) != 1 { + t.Fatalf("expected %d nodes; got: %d", 1, len(nodes)) + } + pattern := `http:\/\/[\d\.]+:9200` + matched, err := regexp.MatchString(pattern, nodes[0].URL()) + if err != nil { + t.Fatal(err) + } + if !matched { + t.Fatalf("expected node URL pattern %q; got: %q", pattern, nodes[0].URL()) + } + case <-time.After(2 * time.Second): + t.Fatal("expected no timeout in sniff node") + break + } +} + +func TestClientSniffOnDefaultURL(t *testing.T) { + client, _ := NewClient() + if client == nil { + t.Fatal("no client returned") + } + + ch := make(chan error, 1) + go func() { + ch <- client.sniff(DefaultSnifferTimeoutStartup) + }() + + select { + case err := <-ch: + if err != nil { + t.Fatalf("expected sniff to succeed; got: %v", err) + } + if len(client.conns) != 1 { + t.Fatalf("expected %d nodes; got: %d", 1, len(client.conns)) + } + pattern := `http:\/\/[\d\.]+:9200` + matched, err := regexp.MatchString(pattern, client.conns[0].URL()) + if err != nil { + t.Fatal(err) + } + if !matched { + t.Fatalf("expected node URL pattern %q; got: %q", pattern, client.conns[0].URL()) + } + case <-time.After(2 * time.Second): + t.Fatal("expected no timeout in sniff") + break + } +} + +func TestClientSniffTimeoutLeak(t *testing.T) { + // This test test checks if sniff requests are canceled + // after timeout. + // It contains couple of hacks which won't be needed once we + // stop supporting Go1.7. + // On Go1.7 it uses server side effects to monitor if connection + // was closed, + // and on Go 1.8+ we're additionally honestly monitoring routine + // leaks via leaktest. + mux := http.NewServeMux() + + var reqDoneMu sync.Mutex + var reqDone bool + mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + cn, ok := w.(http.CloseNotifier) + if !ok { + t.Fatalf("Writer is not CloseNotifier, but %v", reflect.TypeOf(w).Name()) + } + <-cn.CloseNotify() + reqDoneMu.Lock() + reqDone = true + reqDoneMu.Unlock() + }) + + lis, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + t.Fatalf("Couldn't setup listener: %v", err) + } + addr := lis.Addr().String() + + srv := &http.Server{ + Handler: mux, + } + go srv.Serve(lis) + + cli := &Client{ + c: &http.Client{}, + conns: []*conn{ + &conn{ + url: "http://" + addr + "/", + }, + }, + snifferEnabled: true, + } + + type closer interface { + Shutdown(context.Context) error + } + + // pre-Go1.8 Server can't Shutdown + cl, isServerCloseable := (interface{}(srv)).(closer) + + // Since Go1.7 can't Shutdown() - there will be leak from server + // Monitor leaks on Go 1.8+ + if isServerCloseable { + defer leaktest.CheckTimeout(t, time.Second*10)() + } + + cli.sniff(time.Millisecond * 500) + + if isServerCloseable { + ctx, cancel := context.WithTimeout(context.Background(), time.Second) + defer cancel() + cl.Shutdown(ctx) + } + + <-time.After(time.Second) + reqDoneMu.Lock() + if !reqDone { + reqDoneMu.Unlock() + t.Fatal("Request wasn't canceled or stopped") + } + reqDoneMu.Unlock() +} + +func TestClientExtractHostname(t *testing.T) { + tests := []struct { + Scheme string + Address string + Output string + }{ + { + Scheme: "http", + Address: "", + Output: "", + }, + { + Scheme: "https", + Address: "abc", + Output: "", + }, + { + Scheme: "http", + Address: "127.0.0.1:19200", + Output: "http://127.0.0.1:19200", + }, + { + Scheme: "https", + Address: "127.0.0.1:9200", + Output: "https://127.0.0.1:9200", + }, + { + Scheme: "http", + Address: "myelk.local/10.1.0.24:9200", + Output: "http://10.1.0.24:9200", + }, + } + + client, err := NewClient(SetSniff(false), SetHealthcheck(false)) + if err != nil { + t.Fatal(err) + } + for _, test := range tests { + got := client.extractHostname(test.Scheme, test.Address) + if want := test.Output; want != got { + t.Errorf("expected %q; got: %q", want, got) + } + } +} + +// -- Selector -- + +func TestClientSelectConnHealthy(t *testing.T) { + client, err := NewClient( + SetSniff(false), + SetHealthcheck(false), + SetURL("http://127.0.0.1:9200", "http://127.0.0.1:9201")) + if err != nil { + t.Fatal(err) + } + + // Both are healthy, so we should get both URLs in round-robin + client.conns[0].MarkAsHealthy() + client.conns[1].MarkAsHealthy() + + // #1: Return 1st + c, err := client.next() + if err != nil { + t.Fatal(err) + } + if c.URL() != client.conns[0].URL() { + t.Fatalf("expected %s; got: %s", c.URL(), client.conns[0].URL()) + } + // #2: Return 2nd + c, err = client.next() + if err != nil { + t.Fatal(err) + } + if c.URL() != client.conns[1].URL() { + t.Fatalf("expected %s; got: %s", c.URL(), client.conns[1].URL()) + } + // #3: Return 1st + c, err = client.next() + if err != nil { + t.Fatal(err) + } + if c.URL() != client.conns[0].URL() { + t.Fatalf("expected %s; got: %s", c.URL(), client.conns[0].URL()) + } +} + +func TestClientSelectConnHealthyAndDead(t *testing.T) { + client, err := NewClient( + SetSniff(false), + SetHealthcheck(false), + SetURL("http://127.0.0.1:9200", "http://127.0.0.1:9201")) + if err != nil { + t.Fatal(err) + } + + // 1st is healthy, second is dead + client.conns[0].MarkAsHealthy() + client.conns[1].MarkAsDead() + + // #1: Return 1st + c, err := client.next() + if err != nil { + t.Fatal(err) + } + if c.URL() != client.conns[0].URL() { + t.Fatalf("expected %s; got: %s", c.URL(), client.conns[0].URL()) + } + // #2: Return 1st again + c, err = client.next() + if err != nil { + t.Fatal(err) + } + if c.URL() != client.conns[0].URL() { + t.Fatalf("expected %s; got: %s", c.URL(), client.conns[0].URL()) + } + // #3: Return 1st again and again + c, err = client.next() + if err != nil { + t.Fatal(err) + } + if c.URL() != client.conns[0].URL() { + t.Fatalf("expected %s; got: %s", c.URL(), client.conns[0].URL()) + } +} + +func TestClientSelectConnDeadAndHealthy(t *testing.T) { + client, err := NewClient( + SetSniff(false), + SetHealthcheck(false), + SetURL("http://127.0.0.1:9200", "http://127.0.0.1:9201")) + if err != nil { + t.Fatal(err) + } + + // 1st is dead, 2nd is healthy + client.conns[0].MarkAsDead() + client.conns[1].MarkAsHealthy() + + // #1: Return 2nd + c, err := client.next() + if err != nil { + t.Fatal(err) + } + if c.URL() != client.conns[1].URL() { + t.Fatalf("expected %s; got: %s", c.URL(), client.conns[1].URL()) + } + // #2: Return 2nd again + c, err = client.next() + if err != nil { + t.Fatal(err) + } + if c.URL() != client.conns[1].URL() { + t.Fatalf("expected %s; got: %s", c.URL(), client.conns[1].URL()) + } + // #3: Return 2nd again and again + c, err = client.next() + if err != nil { + t.Fatal(err) + } + if c.URL() != client.conns[1].URL() { + t.Fatalf("expected %s; got: %s", c.URL(), client.conns[1].URL()) + } +} + +func TestClientSelectConnAllDead(t *testing.T) { + client, err := NewClient( + SetSniff(false), + SetHealthcheck(false), + SetURL("http://127.0.0.1:9200", "http://127.0.0.1:9201")) + if err != nil { + t.Fatal(err) + } + + // Both are dead + client.conns[0].MarkAsDead() + client.conns[1].MarkAsDead() + + // If all connections are dead, next should make them alive again, but + // still return an error when it first finds out. + c, err := client.next() + if !IsConnErr(err) { + t.Fatal(err) + } + if c != nil { + t.Fatalf("expected no connection; got: %v", c) + } + // Return a connection + c, err = client.next() + if err != nil { + t.Fatalf("expected no error; got: %v", err) + } + if c == nil { + t.Fatalf("expected connection; got: %v", c) + } + // Return a connection + c, err = client.next() + if err != nil { + t.Fatalf("expected no error; got: %v", err) + } + if c == nil { + t.Fatalf("expected connection; got: %v", c) + } +} + +// -- ElasticsearchVersion -- + +func TestElasticsearchVersion(t *testing.T) { + client, err := NewClient() + if err != nil { + t.Fatal(err) + } + version, err := client.ElasticsearchVersion(DefaultURL) + if err != nil { + t.Fatal(err) + } + if version == "" { + t.Errorf("expected a version number, got: %q", version) + } +} + +// -- IndexNames -- + +func TestIndexNames(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + names, err := client.IndexNames() + if err != nil { + t.Fatal(err) + } + if len(names) == 0 { + t.Fatalf("expected some index names, got: %d", len(names)) + } + var found bool + for _, name := range names { + if name == testIndexName { + found = true + break + } + } + if !found { + t.Fatalf("expected to find index %q; got: %v", testIndexName, found) + } +} + +// -- PerformRequest -- + +func TestPerformRequest(t *testing.T) { + client, err := NewClient() + if err != nil { + t.Fatal(err) + } + res, err := client.PerformRequest(context.TODO(), PerformRequestOptions{ + Method: "GET", + Path: "/", + }) + if err != nil { + t.Fatal(err) + } + if res == nil { + t.Fatal("expected response to be != nil") + } + + ret := new(PingResult) + if err := json.Unmarshal(res.Body, ret); err != nil { + t.Fatalf("expected no error on decode; got: %v", err) + } + if ret.ClusterName == "" { + t.Errorf("expected cluster name; got: %q", ret.ClusterName) + } +} + +func TestPerformRequestWithSimpleClient(t *testing.T) { + client, err := NewSimpleClient() + if err != nil { + t.Fatal(err) + } + res, err := client.PerformRequest(context.TODO(), PerformRequestOptions{ + Method: "GET", + Path: "/", + }) + if err != nil { + t.Fatal(err) + } + if res == nil { + t.Fatal("expected response to be != nil") + } + + ret := new(PingResult) + if err := json.Unmarshal(res.Body, ret); err != nil { + t.Fatalf("expected no error on decode; got: %v", err) + } + if ret.ClusterName == "" { + t.Errorf("expected cluster name; got: %q", ret.ClusterName) + } +} + +func TestPerformRequestWithLogger(t *testing.T) { + var w bytes.Buffer + out := log.New(&w, "LOGGER ", log.LstdFlags) + + client, err := NewClient(SetInfoLog(out), SetSniff(false)) + if err != nil { + t.Fatal(err) + } + + res, err := client.PerformRequest(context.TODO(), PerformRequestOptions{ + Method: "GET", + Path: "/", + }) + if err != nil { + t.Fatal(err) + } + if res == nil { + t.Fatal("expected response to be != nil") + } + + ret := new(PingResult) + if err := json.Unmarshal(res.Body, ret); err != nil { + t.Fatalf("expected no error on decode; got: %v", err) + } + if ret.ClusterName == "" { + t.Errorf("expected cluster name; got: %q", ret.ClusterName) + } + + got := w.String() + pattern := `^LOGGER \d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2} GET http://.*/ \[status:200, request:\d+\.\d{3}s\]\n` + matched, err := regexp.MatchString(pattern, got) + if err != nil { + t.Fatalf("expected log line to match %q; got: %v", pattern, err) + } + if !matched { + t.Errorf("expected log line to match %q; got: %v", pattern, got) + } +} + +func TestPerformRequestWithLoggerAndTracer(t *testing.T) { + var lw bytes.Buffer + lout := log.New(&lw, "LOGGER ", log.LstdFlags) + + var tw bytes.Buffer + tout := log.New(&tw, "TRACER ", log.LstdFlags) + + client, err := NewClient(SetInfoLog(lout), SetTraceLog(tout), SetSniff(false)) + if err != nil { + t.Fatal(err) + } + + res, err := client.PerformRequest(context.TODO(), PerformRequestOptions{ + Method: "GET", + Path: "/", + }) + if err != nil { + t.Fatal(err) + } + if res == nil { + t.Fatal("expected response to be != nil") + } + + ret := new(PingResult) + if err := json.Unmarshal(res.Body, ret); err != nil { + t.Fatalf("expected no error on decode; got: %v", err) + } + if ret.ClusterName == "" { + t.Errorf("expected cluster name; got: %q", ret.ClusterName) + } + + lgot := lw.String() + if lgot == "" { + t.Errorf("expected logger output; got: %q", lgot) + } + + tgot := tw.String() + if tgot == "" { + t.Errorf("expected tracer output; got: %q", tgot) + } +} +func TestPerformRequestWithTracerOnError(t *testing.T) { + var tw bytes.Buffer + tout := log.New(&tw, "TRACER ", log.LstdFlags) + + client, err := NewClient(SetTraceLog(tout), SetSniff(false)) + if err != nil { + t.Fatal(err) + } + + client.PerformRequest(context.TODO(), PerformRequestOptions{ + Method: "GET", + Path: "/no-such-index", + }) + + tgot := tw.String() + if tgot == "" { + t.Errorf("expected tracer output; got: %q", tgot) + } +} + +type customLogger struct { + out bytes.Buffer +} + +func (l *customLogger) Printf(format string, v ...interface{}) { + l.out.WriteString(fmt.Sprintf(format, v...) + "\n") +} + +func TestPerformRequestWithCustomLogger(t *testing.T) { + logger := &customLogger{} + + client, err := NewClient(SetInfoLog(logger), SetSniff(false)) + if err != nil { + t.Fatal(err) + } + + res, err := client.PerformRequest(context.TODO(), PerformRequestOptions{ + Method: "GET", + Path: "/", + }) + if err != nil { + t.Fatal(err) + } + if res == nil { + t.Fatal("expected response to be != nil") + } + + ret := new(PingResult) + if err := json.Unmarshal(res.Body, ret); err != nil { + t.Fatalf("expected no error on decode; got: %v", err) + } + if ret.ClusterName == "" { + t.Errorf("expected cluster name; got: %q", ret.ClusterName) + } + + got := logger.out.String() + pattern := `^GET http://.*/ \[status:200, request:\d+\.\d{3}s\]\n` + matched, err := regexp.MatchString(pattern, got) + if err != nil { + t.Fatalf("expected log line to match %q; got: %v", pattern, err) + } + if !matched { + t.Errorf("expected log line to match %q; got: %v", pattern, got) + } +} + +// failingTransport will run a fail callback if it sees a given URL path prefix. +type failingTransport struct { + path string // path prefix to look for + fail func(*http.Request) (*http.Response, error) // call when path prefix is found + next http.RoundTripper // next round-tripper (use http.DefaultTransport if nil) +} + +// RoundTrip implements a failing transport. +func (tr *failingTransport) RoundTrip(r *http.Request) (*http.Response, error) { + if strings.HasPrefix(r.URL.Path, tr.path) && tr.fail != nil { + return tr.fail(r) + } + if tr.next != nil { + return tr.next.RoundTrip(r) + } + return http.DefaultTransport.RoundTrip(r) +} + +func TestPerformRequestRetryOnHttpError(t *testing.T) { + var numFailedReqs int + fail := func(r *http.Request) (*http.Response, error) { + numFailedReqs += 1 + //return &http.Response{Request: r, StatusCode: 400}, nil + return nil, errors.New("request failed") + } + + // Run against a failing endpoint and see if PerformRequest + // retries correctly. + tr := &failingTransport{path: "/fail", fail: fail} + httpClient := &http.Client{Transport: tr} + + client, err := NewClient(SetHttpClient(httpClient), SetMaxRetries(5), SetHealthcheck(false)) + if err != nil { + t.Fatal(err) + } + + res, err := client.PerformRequest(context.TODO(), PerformRequestOptions{ + Method: "GET", + Path: "/fail", + }) + if err == nil { + t.Fatal("expected error") + } + if res != nil { + t.Fatal("expected no response") + } + // Connection should be marked as dead after it failed + if numFailedReqs != 5 { + t.Errorf("expected %d failed requests; got: %d", 5, numFailedReqs) + } +} + +func TestPerformRequestNoRetryOnValidButUnsuccessfulHttpStatus(t *testing.T) { + var numFailedReqs int + fail := func(r *http.Request) (*http.Response, error) { + numFailedReqs += 1 + return &http.Response{Request: r, StatusCode: 500}, nil + } + + // Run against a failing endpoint and see if PerformRequest + // retries correctly. + tr := &failingTransport{path: "/fail", fail: fail} + httpClient := &http.Client{Transport: tr} + + client, err := NewClient(SetHttpClient(httpClient), SetMaxRetries(5), SetHealthcheck(false)) + if err != nil { + t.Fatal(err) + } + + res, err := client.PerformRequest(context.TODO(), PerformRequestOptions{ + Method: "GET", + Path: "/fail", + }) + if err == nil { + t.Fatal("expected error") + } + if res == nil { + t.Fatal("expected response, got nil") + } + if want, got := 500, res.StatusCode; want != got { + t.Fatalf("expected status code = %d, got %d", want, got) + } + // Retry should not have triggered additional requests because + if numFailedReqs != 1 { + t.Errorf("expected %d failed requests; got: %d", 1, numFailedReqs) + } +} + +// failingBody will return an error when json.Marshal is called on it. +type failingBody struct{} + +// MarshalJSON implements the json.Marshaler interface and always returns an error. +func (fb failingBody) MarshalJSON() ([]byte, error) { + return nil, errors.New("failing to marshal") +} + +func TestPerformRequestWithSetBodyError(t *testing.T) { + client, err := NewClient() + if err != nil { + t.Fatal(err) + } + res, err := client.PerformRequest(context.TODO(), PerformRequestOptions{ + Method: "GET", + Path: "/", + Body: failingBody{}, + }) + if err == nil { + t.Fatal("expected error") + } + if res != nil { + t.Fatal("expected no response") + } +} + +// sleepingTransport will sleep before doing a request. +type sleepingTransport struct { + timeout time.Duration +} + +// RoundTrip implements a "sleepy" transport. +func (tr *sleepingTransport) RoundTrip(r *http.Request) (*http.Response, error) { + time.Sleep(tr.timeout) + return http.DefaultTransport.RoundTrip(r) +} + +func TestPerformRequestWithCancel(t *testing.T) { + tr := &sleepingTransport{timeout: 3 * time.Second} + httpClient := &http.Client{Transport: tr} + + client, err := NewSimpleClient(SetHttpClient(httpClient), SetMaxRetries(0)) + if err != nil { + t.Fatal(err) + } + + type result struct { + res *Response + err error + } + ctx, cancel := context.WithCancel(context.Background()) + + resc := make(chan result, 1) + go func() { + res, err := client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: "/", + }) + resc <- result{res: res, err: err} + }() + select { + case <-time.After(1 * time.Second): + cancel() + case res := <-resc: + t.Fatalf("expected response before cancel, got %v", res) + case <-ctx.Done(): + t.Fatalf("expected no early termination, got ctx.Done(): %v", ctx.Err()) + } + err = ctx.Err() + if err != context.Canceled { + t.Fatalf("expected error context.Canceled, got: %v", err) + } +} + +func TestPerformRequestWithTimeout(t *testing.T) { + tr := &sleepingTransport{timeout: 3 * time.Second} + httpClient := &http.Client{Transport: tr} + + client, err := NewSimpleClient(SetHttpClient(httpClient), SetMaxRetries(0)) + if err != nil { + t.Fatal(err) + } + + type result struct { + res *Response + err error + } + ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) + defer cancel() + + resc := make(chan result, 1) + go func() { + res, err := client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: "/", + }) + resc <- result{res: res, err: err} + }() + select { + case res := <-resc: + t.Fatalf("expected timeout before response, got %v", res) + case <-ctx.Done(): + err := ctx.Err() + if err != context.DeadlineExceeded { + t.Fatalf("expected error context.DeadlineExceeded, got: %v", err) + } + } +} + +// -- Compression -- + +// Notice that the trace log does always print "Accept-Encoding: gzip" +// regardless of whether compression is enabled or not. This is because +// of the underlying "httputil.DumpRequestOut". +// +// Use a real HTTP proxy/recorder to convince yourself that +// "Accept-Encoding: gzip" is NOT sent when DisableCompression +// is set to true. +// +// See also: +// https://groups.google.com/forum/#!topic/golang-nuts/ms8QNCzew8Q + +func TestPerformRequestWithCompressionEnabled(t *testing.T) { + testPerformRequestWithCompression(t, &http.Client{ + Transport: &http.Transport{ + DisableCompression: true, + }, + }) +} + +func TestPerformRequestWithCompressionDisabled(t *testing.T) { + testPerformRequestWithCompression(t, &http.Client{ + Transport: &http.Transport{ + DisableCompression: false, + }, + }) +} + +func testPerformRequestWithCompression(t *testing.T, hc *http.Client) { + client, err := NewClient(SetHttpClient(hc), SetSniff(false)) + if err != nil { + t.Fatal(err) + } + res, err := client.PerformRequest(context.TODO(), PerformRequestOptions{ + Method: "GET", + Path: "/", + }) + if err != nil { + t.Fatal(err) + } + if res == nil { + t.Fatal("expected response to be != nil") + } + + ret := new(PingResult) + if err := json.Unmarshal(res.Body, ret); err != nil { + t.Fatalf("expected no error on decode; got: %v", err) + } + if ret.ClusterName == "" { + t.Errorf("expected cluster name; got: %q", ret.ClusterName) + } +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/cluster-test/Makefile b/vendor/github.com/olivere/elastic/cluster-test/Makefile similarity index 100% rename from vendor/gopkg.in/olivere/elastic.v2/cluster-test/Makefile rename to vendor/github.com/olivere/elastic/cluster-test/Makefile diff --git a/vendor/gopkg.in/olivere/elastic.v2/cluster-test/README.md b/vendor/github.com/olivere/elastic/cluster-test/README.md similarity index 100% rename from vendor/gopkg.in/olivere/elastic.v2/cluster-test/README.md rename to vendor/github.com/olivere/elastic/cluster-test/README.md diff --git a/vendor/gopkg.in/olivere/elastic.v2/cluster-test/cluster-test.go b/vendor/github.com/olivere/elastic/cluster-test/cluster-test.go similarity index 81% rename from vendor/gopkg.in/olivere/elastic.v2/cluster-test/cluster-test.go rename to vendor/github.com/olivere/elastic/cluster-test/cluster-test.go index 4a08766..0a14f9f 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/cluster-test/cluster-test.go +++ b/vendor/github.com/olivere/elastic/cluster-test/cluster-test.go @@ -1,10 +1,11 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. package main import ( + "context" "encoding/json" "errors" "flag" @@ -17,7 +18,7 @@ import ( "sync/atomic" "time" - elastic "gopkg.in/olivere/elastic.v2" + elastic "github.com/olivere/elastic" ) type Tweet struct { @@ -38,7 +39,7 @@ var ( errorlogfile = flag.String("errorlog", "", "error log file") infologfile = flag.String("infolog", "", "info log file") tracelogfile = flag.String("tracelog", "", "trace log file") - retries = flag.Int("retries", elastic.DefaultMaxRetries, "number of retries") + retries = flag.Int("retries", 0, "number of retries") sniff = flag.Bool("sniff", elastic.DefaultSnifferEnabled, "enable or disable sniffer") sniffer = flag.Duration("sniffer", elastic.DefaultSnifferInterval, "sniffer interval") healthcheck = flag.Bool("healthcheck", elastic.DefaultHealthcheckEnabled, "enable or disable healthchecks") @@ -182,57 +183,59 @@ func (t *TestCase) monitor() { } func (t *TestCase) setup() error { - var errorlogger *log.Logger + var options []elastic.ClientOptionFunc + if t.errorlogfile != "" { f, err := os.OpenFile(t.errorlogfile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0664) if err != nil { return err } - errorlogger = log.New(f, "", log.Ltime|log.Lmicroseconds|log.Lshortfile) + logger := log.New(f, "", log.Ltime|log.Lmicroseconds|log.Lshortfile) + options = append(options, elastic.SetErrorLog(logger)) } - var infologger *log.Logger if t.infologfile != "" { f, err := os.OpenFile(t.infologfile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0664) if err != nil { return err } - infologger = log.New(f, "", log.LstdFlags) + logger := log.New(f, "", log.LstdFlags) + options = append(options, elastic.SetInfoLog(logger)) } // Trace request and response details like this - var tracelogger *log.Logger if t.tracelogfile != "" { f, err := os.OpenFile(t.tracelogfile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0664) if err != nil { return err } - tracelogger = log.New(f, "", log.LstdFlags) + logger := log.New(f, "", log.LstdFlags) + options = append(options, elastic.SetTraceLog(logger)) } - client, err := elastic.NewClient( - elastic.SetURL(t.nodes...), - elastic.SetErrorLog(errorlogger), - elastic.SetInfoLog(infologger), - elastic.SetTraceLog(tracelogger), - elastic.SetMaxRetries(t.maxRetries), - elastic.SetSniff(t.sniff), - elastic.SetSnifferInterval(t.snifferInterval), - elastic.SetHealthcheck(t.healthcheck), - elastic.SetHealthcheckInterval(t.healthcheckInterval)) + options = append(options, elastic.SetURL(t.nodes...)) + options = append(options, elastic.SetMaxRetries(t.maxRetries)) + options = append(options, elastic.SetSniff(t.sniff)) + options = append(options, elastic.SetSnifferInterval(t.snifferInterval)) + options = append(options, elastic.SetHealthcheck(t.healthcheck)) + options = append(options, elastic.SetHealthcheckInterval(t.healthcheckInterval)) + + client, err := elastic.NewClient(options...) if err != nil { // Handle error return err } t.client = client + ctx := context.Background() + // Use the IndexExists service to check if a specified index exists. - exists, err := t.client.IndexExists(t.index).Do() + exists, err := t.client.IndexExists(t.index).Do(ctx) if err != nil { return err } if exists { - deleteIndex, err := t.client.DeleteIndex(t.index).Do() + deleteIndex, err := t.client.DeleteIndex(t.index).Do(ctx) if err != nil { return err } @@ -242,7 +245,7 @@ func (t *TestCase) setup() error { } // Create a new index. - createIndex, err := t.client.CreateIndex(t.index).Do() + createIndex, err := t.client.CreateIndex(t.index).Do(ctx) if err != nil { return err } @@ -257,7 +260,7 @@ func (t *TestCase) setup() error { Type("tweet"). Id("1"). BodyJson(tweet1). - Do() + Do(ctx) if err != nil { return err } @@ -269,13 +272,13 @@ func (t *TestCase) setup() error { Type("tweet"). Id("2"). BodyString(tweet2). - Do() + Do(ctx) if err != nil { return err } // Flush to make sure the documents got written. - _, err = t.client.Flush().Index(t.index).Do() + _, err = t.client.Flush().Index(t.index).Do(ctx) if err != nil { return err } @@ -284,6 +287,8 @@ func (t *TestCase) setup() error { } func (t *TestCase) search() { + ctx := context.Background() + // Loop forever to check for connection issues for { // Get tweet with specified ID @@ -291,7 +296,7 @@ func (t *TestCase) search() { Index(t.index). Type("tweet"). Id("1"). - Do() + Do(ctx) if err != nil { //failf("Get failed: %v", err) t.runCh <- RunInfo{Success: false} @@ -305,14 +310,13 @@ func (t *TestCase) search() { } // Search with a term query - termQuery := elastic.NewTermQuery("user", "olivere") searchResult, err := t.client.Search(). - Index(t.index). // search in index t.index - Query(&termQuery). // specify the query - Sort("user", true). // sort by "user" field, ascending - From(0).Size(10). // take documents 0-9 - Pretty(true). // pretty print request and response JSON - Do() // execute + Index(t.index). // search in index t.index + Query(elastic.NewTermQuery("user", "olivere")). // specify the query + Sort("user", true). // sort by "user" field, ascending + From(0).Size(10). // take documents 0-9 + Pretty(true). // pretty print request and response JSON + Do(ctx) // execute if err != nil { //failf("Search failed: %v\n", err) t.runCh <- RunInfo{Success: false} diff --git a/vendor/github.com/olivere/elastic/cluster_health.go b/vendor/github.com/olivere/elastic/cluster_health.go new file mode 100644 index 0000000..f960cfe --- /dev/null +++ b/vendor/github.com/olivere/elastic/cluster_health.go @@ -0,0 +1,248 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" + "strings" + + "github.com/olivere/elastic/uritemplates" +) + +// ClusterHealthService allows to get a very simple status on the health of the cluster. +// +// See http://www.elastic.co/guide/en/elasticsearch/reference/5.2/cluster-health.html +// for details. +type ClusterHealthService struct { + client *Client + pretty bool + indices []string + level string + local *bool + masterTimeout string + timeout string + waitForActiveShards *int + waitForNodes string + waitForNoRelocatingShards *bool + waitForStatus string +} + +// NewClusterHealthService creates a new ClusterHealthService. +func NewClusterHealthService(client *Client) *ClusterHealthService { + return &ClusterHealthService{ + client: client, + indices: make([]string, 0), + } +} + +// Index limits the information returned to specific indices. +func (s *ClusterHealthService) Index(indices ...string) *ClusterHealthService { + s.indices = append(s.indices, indices...) + return s +} + +// Level specifies the level of detail for returned information. +func (s *ClusterHealthService) Level(level string) *ClusterHealthService { + s.level = level + return s +} + +// Local indicates whether to return local information. If it is true, +// we do not retrieve the state from master node (default: false). +func (s *ClusterHealthService) Local(local bool) *ClusterHealthService { + s.local = &local + return s +} + +// MasterTimeout specifies an explicit operation timeout for connection to master node. +func (s *ClusterHealthService) MasterTimeout(masterTimeout string) *ClusterHealthService { + s.masterTimeout = masterTimeout + return s +} + +// Timeout specifies an explicit operation timeout. +func (s *ClusterHealthService) Timeout(timeout string) *ClusterHealthService { + s.timeout = timeout + return s +} + +// WaitForActiveShards can be used to wait until the specified number of shards are active. +func (s *ClusterHealthService) WaitForActiveShards(waitForActiveShards int) *ClusterHealthService { + s.waitForActiveShards = &waitForActiveShards + return s +} + +// WaitForNodes can be used to wait until the specified number of nodes are available. +// Example: "12" to wait for exact values, ">12" and "<12" for ranges. +func (s *ClusterHealthService) WaitForNodes(waitForNodes string) *ClusterHealthService { + s.waitForNodes = waitForNodes + return s +} + +// WaitForNoRelocatingShards can be used to wait until all shard relocations are finished. +func (s *ClusterHealthService) WaitForNoRelocatingShards(waitForNoRelocatingShards bool) *ClusterHealthService { + s.waitForNoRelocatingShards = &waitForNoRelocatingShards + return s +} + +// WaitForStatus can be used to wait until the cluster is in a specific state. +// Valid values are: green, yellow, or red. +func (s *ClusterHealthService) WaitForStatus(waitForStatus string) *ClusterHealthService { + s.waitForStatus = waitForStatus + return s +} + +// WaitForGreenStatus will wait for the "green" state. +func (s *ClusterHealthService) WaitForGreenStatus() *ClusterHealthService { + return s.WaitForStatus("green") +} + +// WaitForYellowStatus will wait for the "yellow" state. +func (s *ClusterHealthService) WaitForYellowStatus() *ClusterHealthService { + return s.WaitForStatus("yellow") +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *ClusterHealthService) Pretty(pretty bool) *ClusterHealthService { + s.pretty = pretty + return s +} + +// buildURL builds the URL for the operation. +func (s *ClusterHealthService) buildURL() (string, url.Values, error) { + // Build URL + var err error + var path string + if len(s.indices) > 0 { + path, err = uritemplates.Expand("/_cluster/health/{index}", map[string]string{ + "index": strings.Join(s.indices, ","), + }) + } else { + path = "/_cluster/health" + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.level != "" { + params.Set("level", s.level) + } + if s.local != nil { + params.Set("local", fmt.Sprintf("%v", *s.local)) + } + if s.masterTimeout != "" { + params.Set("master_timeout", s.masterTimeout) + } + if s.timeout != "" { + params.Set("timeout", s.timeout) + } + if s.waitForActiveShards != nil { + params.Set("wait_for_active_shards", fmt.Sprintf("%v", s.waitForActiveShards)) + } + if s.waitForNodes != "" { + params.Set("wait_for_nodes", s.waitForNodes) + } + if s.waitForNoRelocatingShards != nil { + params.Set("wait_for_no_relocating_shards", fmt.Sprintf("%v", *s.waitForNoRelocatingShards)) + } + if s.waitForStatus != "" { + params.Set("wait_for_status", s.waitForStatus) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *ClusterHealthService) Validate() error { + return nil +} + +// Do executes the operation. +func (s *ClusterHealthService) Do(ctx context.Context) (*ClusterHealthResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(ClusterHealthResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// ClusterHealthResponse is the response of ClusterHealthService.Do. +type ClusterHealthResponse struct { + ClusterName string `json:"cluster_name"` + Status string `json:"status"` + TimedOut bool `json:"timed_out"` + NumberOfNodes int `json:"number_of_nodes"` + NumberOfDataNodes int `json:"number_of_data_nodes"` + ActivePrimaryShards int `json:"active_primary_shards"` + ActiveShards int `json:"active_shards"` + RelocatingShards int `json:"relocating_shards"` + InitializingShards int `json:"initializing_shards"` + UnassignedShards int `json:"unassigned_shards"` + DelayedUnassignedShards int `json:"delayed_unassigned_shards"` + NumberOfPendingTasks int `json:"number_of_pending_tasks"` + NumberOfInFlightFetch int `json:"number_of_in_flight_fetch"` + TaskMaxWaitTimeInQueueInMillis int `json:"task_max_waiting_in_queue_millis"` + ActiveShardsPercentAsNumber float64 `json:"active_shards_percent_as_number"` + + // Validation failures -> index name -> array of validation failures + ValidationFailures []map[string][]string `json:"validation_failures"` + + // Index name -> index health + Indices map[string]*ClusterIndexHealth `json:"indices"` +} + +// ClusterIndexHealth will be returned as part of ClusterHealthResponse. +type ClusterIndexHealth struct { + Status string `json:"status"` + NumberOfShards int `json:"number_of_shards"` + NumberOfReplicas int `json:"number_of_replicas"` + ActivePrimaryShards int `json:"active_primary_shards"` + ActiveShards int `json:"active_shards"` + RelocatingShards int `json:"relocating_shards"` + InitializingShards int `json:"initializing_shards"` + UnassignedShards int `json:"unassigned_shards"` + // Validation failures + ValidationFailures []string `json:"validation_failures"` + // Shards by id, e.g. "0" or "1" + Shards map[string]*ClusterShardHealth `json:"shards"` +} + +// ClusterShardHealth will be returned as part of ClusterHealthResponse. +type ClusterShardHealth struct { + Status string `json:"status"` + PrimaryActive bool `json:"primary_active"` + ActiveShards int `json:"active_shards"` + RelocatingShards int `json:"relocating_shards"` + InitializingShards int `json:"initializing_shards"` + UnassignedShards int `json:"unassigned_shards"` +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/cluster_health_test.go b/vendor/github.com/olivere/elastic/cluster_health_test.go similarity index 78% rename from vendor/gopkg.in/olivere/elastic.v2/cluster_health_test.go rename to vendor/github.com/olivere/elastic/cluster_health_test.go index 9d28e05..c2caee9 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/cluster_health_test.go +++ b/vendor/github.com/olivere/elastic/cluster_health_test.go @@ -1,10 +1,11 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. package elastic import ( + "context" "net/url" "testing" ) @@ -13,7 +14,7 @@ func TestClusterHealth(t *testing.T) { client := setupTestClientAndCreateIndex(t) // Get cluster health - res, err := client.ClusterHealth().Index(testIndexName).Do() + res, err := client.ClusterHealth().Index(testIndexName).Level("shards").Pretty(true).Do(context.TODO()) if err != nil { t.Fatal(err) } @@ -35,7 +36,7 @@ func TestClusterHealthURLs(t *testing.T) { Service: &ClusterHealthService{ indices: []string{}, }, - ExpectedPath: "/_cluster/health/", + ExpectedPath: "/_cluster/health", }, { Service: &ClusterHealthService{ @@ -74,10 +75,10 @@ func TestClusterHealthURLs(t *testing.T) { } func TestClusterHealthWaitForStatus(t *testing.T) { - client := setupTestClientAndCreateIndex(t) + client := setupTestClientAndCreateIndex(t) //, SetTraceLog(log.New(os.Stdout, "", 0))) // Ensure preconditions are met: A green cluster. - health, err := client.ClusterHealth().Do() + health, err := client.ClusterHealth().Do(context.TODO()) if err != nil { t.Fatal(err) } @@ -86,19 +87,19 @@ func TestClusterHealthWaitForStatus(t *testing.T) { } // Cluster health on an index that does not exist should never get to yellow - health, err = client.ClusterHealth().Index("no-such-index").WaitForStatus("yellow").Timeout("1s").Do() - if err != nil { - t.Fatalf("expected no error; got: %v", err) + health, err = client.ClusterHealth().Index("no-such-index").WaitForStatus("yellow").Timeout("1s").Do(context.TODO()) + if err == nil { + t.Fatalf("expected timeout error; got: %v", err) } - if health.TimedOut != true { - t.Fatalf("expected to timeout; got: %v", health.TimedOut) + if !IsTimeout(err) { + t.Fatalf("expected timeout error; got: %v", err) } - if health.Status != "red" { - t.Fatalf("expected health = %q; got: %q", "red", health.Status) + if health != nil { + t.Fatalf("expected no response; got: %v", health) } // Cluster wide health - health, err = client.ClusterHealth().WaitForStatus("green").Timeout("10s").Do() + health, err = client.ClusterHealth().WaitForGreenStatus().Timeout("10s").Do(context.TODO()) if err != nil { t.Fatalf("expected no error; got: %v", err) } diff --git a/vendor/github.com/olivere/elastic/cluster_state.go b/vendor/github.com/olivere/elastic/cluster_state.go new file mode 100644 index 0000000..1391951 --- /dev/null +++ b/vendor/github.com/olivere/elastic/cluster_state.go @@ -0,0 +1,288 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" + "strings" + + "github.com/olivere/elastic/uritemplates" +) + +// ClusterStateService allows to get a comprehensive state information of the whole cluster. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/cluster-state.html +// for details. +type ClusterStateService struct { + client *Client + pretty bool + indices []string + metrics []string + allowNoIndices *bool + expandWildcards string + flatSettings *bool + ignoreUnavailable *bool + local *bool + masterTimeout string +} + +// NewClusterStateService creates a new ClusterStateService. +func NewClusterStateService(client *Client) *ClusterStateService { + return &ClusterStateService{ + client: client, + indices: make([]string, 0), + metrics: make([]string, 0), + } +} + +// Index is a list of index names. Use _all or an empty string to +// perform the operation on all indices. +func (s *ClusterStateService) Index(indices ...string) *ClusterStateService { + s.indices = append(s.indices, indices...) + return s +} + +// Metric limits the information returned to the specified metric. +// It can be one of: version, master_node, nodes, routing_table, metadata, +// blocks, or customs. +func (s *ClusterStateService) Metric(metrics ...string) *ClusterStateService { + s.metrics = append(s.metrics, metrics...) + return s +} + +// AllowNoIndices indicates whether to ignore if a wildcard indices +// expression resolves into no concrete indices. +// (This includes `_all` string or when no indices have been specified). +func (s *ClusterStateService) AllowNoIndices(allowNoIndices bool) *ClusterStateService { + s.allowNoIndices = &allowNoIndices + return s +} + +// ExpandWildcards indicates whether to expand wildcard expression to +// concrete indices that are open, closed or both.. +func (s *ClusterStateService) ExpandWildcards(expandWildcards string) *ClusterStateService { + s.expandWildcards = expandWildcards + return s +} + +// FlatSettings, when set, returns settings in flat format (default: false). +func (s *ClusterStateService) FlatSettings(flatSettings bool) *ClusterStateService { + s.flatSettings = &flatSettings + return s +} + +// IgnoreUnavailable indicates whether specified concrete indices should be +// ignored when unavailable (missing or closed). +func (s *ClusterStateService) IgnoreUnavailable(ignoreUnavailable bool) *ClusterStateService { + s.ignoreUnavailable = &ignoreUnavailable + return s +} + +// Local indicates whether to return local information. When set, it does not +// retrieve the state from master node (default: false). +func (s *ClusterStateService) Local(local bool) *ClusterStateService { + s.local = &local + return s +} + +// MasterTimeout specifies timeout for connection to master. +func (s *ClusterStateService) MasterTimeout(masterTimeout string) *ClusterStateService { + s.masterTimeout = masterTimeout + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *ClusterStateService) Pretty(pretty bool) *ClusterStateService { + s.pretty = pretty + return s +} + +// buildURL builds the URL for the operation. +func (s *ClusterStateService) buildURL() (string, url.Values, error) { + // Build URL + metrics := strings.Join(s.metrics, ",") + if metrics == "" { + metrics = "_all" + } + indices := strings.Join(s.indices, ",") + if indices == "" { + indices = "_all" + } + path, err := uritemplates.Expand("/_cluster/state/{metrics}/{indices}", map[string]string{ + "metrics": metrics, + "indices": indices, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.allowNoIndices != nil { + params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) + } + if s.expandWildcards != "" { + params.Set("expand_wildcards", s.expandWildcards) + } + if s.flatSettings != nil { + params.Set("flat_settings", fmt.Sprintf("%v", *s.flatSettings)) + } + if s.ignoreUnavailable != nil { + params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) + } + if s.local != nil { + params.Set("local", fmt.Sprintf("%v", *s.local)) + } + if s.masterTimeout != "" { + params.Set("master_timeout", s.masterTimeout) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *ClusterStateService) Validate() error { + return nil +} + +// Do executes the operation. +func (s *ClusterStateService) Do(ctx context.Context) (*ClusterStateResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(ClusterStateResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// ClusterStateResponse is the response of ClusterStateService.Do. +type ClusterStateResponse struct { + ClusterName string `json:"cluster_name"` + Version int64 `json:"version"` + StateUUID string `json:"state_uuid"` + MasterNode string `json:"master_node"` + Blocks map[string]*clusterBlocks `json:"blocks"` + Nodes map[string]*discoveryNode `json:"nodes"` + Metadata *clusterStateMetadata `json:"metadata"` + RoutingTable map[string]*clusterStateRoutingTable `json:"routing_table"` + RoutingNodes *clusterStateRoutingNode `json:"routing_nodes"` + Customs map[string]interface{} `json:"customs"` +} + +type clusterBlocks struct { + Global map[string]*clusterBlock `json:"global"` // id -> cluster block + Indices map[string]*clusterBlock `json:"indices"` // index name -> cluster block +} + +type clusterBlock struct { + Description string `json:"description"` + Retryable bool `json:"retryable"` + DisableStatePersistence bool `json:"disable_state_persistence"` + Levels []string `json:"levels"` +} + +type clusterStateMetadata struct { + ClusterUUID string `json:"cluster_uuid"` + Templates map[string]*indexTemplateMetaData `json:"templates"` // template name -> index template metadata + Indices map[string]*indexMetaData `json:"indices"` // index name _> meta data + RoutingTable struct { + Indices map[string]*indexRoutingTable `json:"indices"` // index name -> routing table + } `json:"routing_table"` + RoutingNodes struct { + Unassigned []*shardRouting `json:"unassigned"` + Nodes []*shardRouting `json:"nodes"` + } `json:"routing_nodes"` + Customs map[string]interface{} `json:"customs"` +} + +type discoveryNode struct { + Name string `json:"name"` // server name, e.g. "es1" + TransportAddress string `json:"transport_address"` // e.g. inet[/1.2.3.4:9300] + Attributes map[string]interface{} `json:"attributes"` // e.g. { "data": true, "master": true } +} + +type clusterStateRoutingTable struct { + Indices map[string]interface{} `json:"indices"` +} + +type clusterStateRoutingNode struct { + Unassigned []*shardRouting `json:"unassigned"` + // Node Id -> shardRouting + Nodes map[string][]*shardRouting `json:"nodes"` +} + +type indexTemplateMetaData struct { + IndexPatterns []string `json:"index_patterns"` // e.g. ["store-*"] + Order int `json:"order"` + Settings map[string]interface{} `json:"settings"` // index settings + Mappings map[string]interface{} `json:"mappings"` // type name -> mapping +} + +type indexMetaData struct { + State string `json:"state"` + Settings map[string]interface{} `json:"settings"` + Mappings map[string]interface{} `json:"mappings"` + Aliases []string `json:"aliases"` // e.g. [ "alias1", "alias2" ] +} + +type indexRoutingTable struct { + Shards map[string]*shardRouting `json:"shards"` +} + +type shardRouting struct { + State string `json:"state"` + Primary bool `json:"primary"` + Node string `json:"node"` + RelocatingNode string `json:"relocating_node"` + Shard int `json:"shard"` + Index string `json:"index"` + Version int64 `json:"version"` + RestoreSource *RestoreSource `json:"restore_source"` + AllocationId *allocationId `json:"allocation_id"` + UnassignedInfo *unassignedInfo `json:"unassigned_info"` +} + +type RestoreSource struct { + Repository string `json:"repository"` + Snapshot string `json:"snapshot"` + Version string `json:"version"` + Index string `json:"index"` +} + +type allocationId struct { + Id string `json:"id"` + RelocationId string `json:"relocation_id"` +} + +type unassignedInfo struct { + Reason string `json:"reason"` + At string `json:"at"` + Details string `json:"details"` +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/cluster_state_test.go b/vendor/github.com/olivere/elastic/cluster_state_test.go similarity index 92% rename from vendor/gopkg.in/olivere/elastic.v2/cluster_state_test.go rename to vendor/github.com/olivere/elastic/cluster_state_test.go index 9c036bd..6eedb0c 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/cluster_state_test.go +++ b/vendor/github.com/olivere/elastic/cluster_state_test.go @@ -1,10 +1,11 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. package elastic import ( + "context" "net/url" "testing" ) @@ -13,7 +14,7 @@ func TestClusterState(t *testing.T) { client := setupTestClientAndCreateIndex(t) // Get cluster state - res, err := client.ClusterState().Do() + res, err := client.ClusterState().Index("_all").Metric("_all").Pretty(true).Do(context.TODO()) if err != nil { t.Fatal(err) } diff --git a/vendor/gopkg.in/olivere/elastic.v2/cluster_stats.go b/vendor/github.com/olivere/elastic/cluster_stats.go similarity index 93% rename from vendor/gopkg.in/olivere/elastic.v2/cluster_stats.go rename to vendor/github.com/olivere/elastic/cluster_stats.go index ee4546d..07bc3ae 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/cluster_stats.go +++ b/vendor/github.com/olivere/elastic/cluster_stats.go @@ -1,18 +1,20 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. package elastic import ( + "context" "fmt" "net/url" "strings" - "gopkg.in/olivere/elastic.v2/uritemplates" + "github.com/olivere/elastic/uritemplates" ) -// ClusterStatsService is documented at http://www.elasticsearch.org/guide/en/elasticsearch/reference/1.4/cluster-stats.html. +// ClusterStatsService is documented at +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/cluster-stats.html. type ClusterStatsService struct { client *Client pretty bool @@ -76,7 +78,7 @@ func (s *ClusterStatsService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "1") + params.Set("pretty", "true") } if s.flatSettings != nil { params.Set("flat_settings", fmt.Sprintf("%v", *s.flatSettings)) @@ -93,7 +95,7 @@ func (s *ClusterStatsService) Validate() error { } // Do executes the operation. -func (s *ClusterStatsService) Do() (*ClusterStatsResponse, error) { +func (s *ClusterStatsService) Do(ctx context.Context) (*ClusterStatsResponse, error) { // Check pre-conditions if err := s.Validate(); err != nil { return nil, err @@ -106,7 +108,11 @@ func (s *ClusterStatsService) Do() (*ClusterStatsResponse, error) { } // Get HTTP response - res, err := s.client.PerformRequest("GET", path, params, nil) + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + }) if err != nil { return nil, err } @@ -173,10 +179,8 @@ type ClusterStatsIndicesDocs struct { } type ClusterStatsIndicesStore struct { - Size string `json:"size"` // e.g. "5.3gb" - SizeInBytes int64 `json:"size_in_bytes"` - ThrottleTime string `json:"throttle_time"` // e.g. "0s" - ThrottleTimeInMillis int64 `json:"throttle_time_in_millis"` + Size string `json:"size"` // e.g. "5.3gb" + SizeInBytes int64 `json:"size_in_bytes"` } type ClusterStatsIndicesFieldData struct { @@ -247,11 +251,11 @@ type ClusterStatsNodes struct { } type ClusterStatsNodesCount struct { - Total int `json:"total"` - MasterOnly int `json:"master_only"` - DataOnly int `json:"data_only"` - MasterData int `json:"master_data"` - Client int `json:"client"` + Total int `json:"total"` + Data int `json:"data"` + CoordinatingOnly int `json:"coordinating_only"` + Master int `json:"master"` + Ingest int `json:"ingest"` } type ClusterStatsNodesOsStats struct { diff --git a/vendor/gopkg.in/olivere/elastic.v2/cluster_stats_test.go b/vendor/github.com/olivere/elastic/cluster_stats_test.go similarity index 94% rename from vendor/gopkg.in/olivere/elastic.v2/cluster_stats_test.go rename to vendor/github.com/olivere/elastic/cluster_stats_test.go index e61066e..fe6da47 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/cluster_stats_test.go +++ b/vendor/github.com/olivere/elastic/cluster_stats_test.go @@ -1,10 +1,11 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. package elastic import ( + "context" "net/url" "testing" ) @@ -13,7 +14,7 @@ func TestClusterStats(t *testing.T) { client := setupTestClientAndCreateIndex(t) // Get cluster stats - res, err := client.ClusterStats().Do() + res, err := client.ClusterStats().Do(context.TODO()) if err != nil { t.Fatal(err) } diff --git a/vendor/github.com/olivere/elastic/config/config.go b/vendor/github.com/olivere/elastic/config/config.go new file mode 100644 index 0000000..791c8fd --- /dev/null +++ b/vendor/github.com/olivere/elastic/config/config.go @@ -0,0 +1,81 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package config + +import ( + "fmt" + "net/url" + "strconv" + "strings" +) + +// Config represents an Elasticsearch configuration. +type Config struct { + URL string + Index string + Username string + Password string + Shards int + Replicas int + Sniff *bool + Infolog string + Errorlog string + Tracelog string +} + +// Parse returns the Elasticsearch configuration by extracting it +// from the URL, its path, and its query string. +// +// Example: +// http://127.0.0.1:9200/store-blobs?shards=1&replicas=0&sniff=false&tracelog=elastic.trace.log +// +// The code above will return a URL of http://127.0.0.1:9200, an index name +// of store-blobs, and the related settings from the query string. +func Parse(elasticURL string) (*Config, error) { + cfg := &Config{ + Shards: 1, + Replicas: 0, + Sniff: nil, + } + + uri, err := url.Parse(elasticURL) + if err != nil { + return nil, fmt.Errorf("error parsing elastic parameter %q: %v", elasticURL, err) + } + index := strings.TrimSuffix(strings.TrimPrefix(uri.Path, "/"), "/") + if uri.User != nil { + cfg.Username = uri.User.Username() + cfg.Password, _ = uri.User.Password() + } + uri.User = nil + + if i, err := strconv.Atoi(uri.Query().Get("shards")); err == nil { + cfg.Shards = i + } + if i, err := strconv.Atoi(uri.Query().Get("replicas")); err == nil { + cfg.Replicas = i + } + if s := uri.Query().Get("sniff"); s != "" { + if b, err := strconv.ParseBool(s); err == nil { + cfg.Sniff = &b + } + } + if s := uri.Query().Get("infolog"); s != "" { + cfg.Infolog = s + } + if s := uri.Query().Get("errorlog"); s != "" { + cfg.Errorlog = s + } + if s := uri.Query().Get("tracelog"); s != "" { + cfg.Tracelog = s + } + + uri.Path = "" + uri.RawQuery = "" + cfg.URL = uri.String() + cfg.Index = index + + return cfg, nil +} diff --git a/vendor/github.com/olivere/elastic/config/config_test.go b/vendor/github.com/olivere/elastic/config/config_test.go new file mode 100644 index 0000000..704f7ca --- /dev/null +++ b/vendor/github.com/olivere/elastic/config/config_test.go @@ -0,0 +1,73 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package config + +import "testing" + +func TestParse(t *testing.T) { + urls := "http://user:pwd@elastic:19220/store-blobs?shards=5&replicas=2&sniff=true&errorlog=elastic.error.log&infolog=elastic.info.log&tracelog=elastic.trace.log" + cfg, err := Parse(urls) + if err != nil { + t.Fatal(err) + } + if want, got := "http://elastic:19220", cfg.URL; want != got { + t.Fatalf("expected URL = %q, got %q", want, got) + } + if want, got := "store-blobs", cfg.Index; want != got { + t.Fatalf("expected Index = %q, got %q", want, got) + } + if want, got := "user", cfg.Username; want != got { + t.Fatalf("expected Username = %q, got %q", want, got) + } + if want, got := "pwd", cfg.Password; want != got { + t.Fatalf("expected Password = %q, got %q", want, got) + } + if want, got := 5, cfg.Shards; want != got { + t.Fatalf("expected Shards = %v, got %v", want, got) + } + if want, got := 2, cfg.Replicas; want != got { + t.Fatalf("expected Replicas = %v, got %v", want, got) + } + if want, got := true, *cfg.Sniff; want != got { + t.Fatalf("expected Sniff = %v, got %v", want, got) + } + if want, got := "elastic.error.log", cfg.Errorlog; want != got { + t.Fatalf("expected Errorlog = %q, got %q", want, got) + } + if want, got := "elastic.info.log", cfg.Infolog; want != got { + t.Fatalf("expected Infolog = %q, got %q", want, got) + } + if want, got := "elastic.trace.log", cfg.Tracelog; want != got { + t.Fatalf("expected Tracelog = %q, got %q", want, got) + } +} + +func TestParseDoesNotFailWithoutIndexName(t *testing.T) { + urls := "http://user:pwd@elastic:19220/?shards=5&replicas=2&sniff=true&errorlog=elastic.error.log&infolog=elastic.info.log&tracelog=elastic.trace.log" + cfg, err := Parse(urls) + if err != nil { + t.Fatal(err) + } + if want, got := "http://elastic:19220", cfg.URL; want != got { + t.Fatalf("expected URL = %q, got %q", want, got) + } + if want, got := "", cfg.Index; want != got { + t.Fatalf("expected Index = %q, got %q", want, got) + } +} + +func TestParseTrimsIndexName(t *testing.T) { + urls := "http://user:pwd@elastic:19220/store-blobs/?sniff=true" + cfg, err := Parse(urls) + if err != nil { + t.Fatal(err) + } + if want, got := "http://elastic:19220", cfg.URL; want != got { + t.Fatalf("expected URL = %q, got %q", want, got) + } + if want, got := "store-blobs", cfg.Index; want != got { + t.Fatalf("expected Index = %q, got %q", want, got) + } +} diff --git a/vendor/github.com/olivere/elastic/config/doc.go b/vendor/github.com/olivere/elastic/config/doc.go new file mode 100644 index 0000000..c9acd5f --- /dev/null +++ b/vendor/github.com/olivere/elastic/config/doc.go @@ -0,0 +1,9 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +/* +Package config allows parsing a configuration for Elasticsearch +from a URL. +*/ +package config diff --git a/vendor/gopkg.in/olivere/elastic.v2/connection.go b/vendor/github.com/olivere/elastic/connection.go similarity index 96% rename from vendor/gopkg.in/olivere/elastic.v2/connection.go rename to vendor/github.com/olivere/elastic/connection.go index b8b5bf8..0f27a87 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/connection.go +++ b/vendor/github.com/olivere/elastic/connection.go @@ -1,4 +1,4 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. diff --git a/vendor/github.com/olivere/elastic/count.go b/vendor/github.com/olivere/elastic/count.go new file mode 100644 index 0000000..8dde488 --- /dev/null +++ b/vendor/github.com/olivere/elastic/count.go @@ -0,0 +1,326 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" + "strings" + + "github.com/olivere/elastic/uritemplates" +) + +// CountService is a convenient service for determining the +// number of documents in an index. Use SearchService with +// a SearchType of count for counting with queries etc. +type CountService struct { + client *Client + pretty bool + index []string + typ []string + allowNoIndices *bool + analyzeWildcard *bool + analyzer string + defaultOperator string + df string + expandWildcards string + ignoreUnavailable *bool + lenient *bool + lowercaseExpandedTerms *bool + minScore interface{} + preference string + q string + query Query + routing string + terminateAfter *int + bodyJson interface{} + bodyString string +} + +// NewCountService creates a new CountService. +func NewCountService(client *Client) *CountService { + return &CountService{ + client: client, + } +} + +// Index sets the names of the indices to restrict the results. +func (s *CountService) Index(index ...string) *CountService { + if s.index == nil { + s.index = make([]string, 0) + } + s.index = append(s.index, index...) + return s +} + +// Type sets the types to use to restrict the results. +func (s *CountService) Type(typ ...string) *CountService { + if s.typ == nil { + s.typ = make([]string, 0) + } + s.typ = append(s.typ, typ...) + return s +} + +// AllowNoIndices indicates whether to ignore if a wildcard indices +// expression resolves into no concrete indices. (This includes "_all" string +// or when no indices have been specified). +func (s *CountService) AllowNoIndices(allowNoIndices bool) *CountService { + s.allowNoIndices = &allowNoIndices + return s +} + +// AnalyzeWildcard specifies whether wildcard and prefix queries should be +// analyzed (default: false). +func (s *CountService) AnalyzeWildcard(analyzeWildcard bool) *CountService { + s.analyzeWildcard = &analyzeWildcard + return s +} + +// Analyzer specifies the analyzer to use for the query string. +func (s *CountService) Analyzer(analyzer string) *CountService { + s.analyzer = analyzer + return s +} + +// DefaultOperator specifies the default operator for query string query (AND or OR). +func (s *CountService) DefaultOperator(defaultOperator string) *CountService { + s.defaultOperator = defaultOperator + return s +} + +// Df specifies the field to use as default where no field prefix is given +// in the query string. +func (s *CountService) Df(df string) *CountService { + s.df = df + return s +} + +// ExpandWildcards indicates whether to expand wildcard expression to +// concrete indices that are open, closed or both. +func (s *CountService) ExpandWildcards(expandWildcards string) *CountService { + s.expandWildcards = expandWildcards + return s +} + +// IgnoreUnavailable indicates whether specified concrete indices should be +// ignored when unavailable (missing or closed). +func (s *CountService) IgnoreUnavailable(ignoreUnavailable bool) *CountService { + s.ignoreUnavailable = &ignoreUnavailable + return s +} + +// Lenient specifies whether format-based query failures (such as +// providing text to a numeric field) should be ignored. +func (s *CountService) Lenient(lenient bool) *CountService { + s.lenient = &lenient + return s +} + +// LowercaseExpandedTerms specifies whether query terms should be lowercased. +func (s *CountService) LowercaseExpandedTerms(lowercaseExpandedTerms bool) *CountService { + s.lowercaseExpandedTerms = &lowercaseExpandedTerms + return s +} + +// MinScore indicates to include only documents with a specific `_score` +// value in the result. +func (s *CountService) MinScore(minScore interface{}) *CountService { + s.minScore = minScore + return s +} + +// Preference specifies the node or shard the operation should be +// performed on (default: random). +func (s *CountService) Preference(preference string) *CountService { + s.preference = preference + return s +} + +// Q in the Lucene query string syntax. You can also use Query to pass +// a Query struct. +func (s *CountService) Q(q string) *CountService { + s.q = q + return s +} + +// Query specifies the query to pass. You can also pass a query string with Q. +func (s *CountService) Query(query Query) *CountService { + s.query = query + return s +} + +// Routing specifies the routing value. +func (s *CountService) Routing(routing string) *CountService { + s.routing = routing + return s +} + +// TerminateAfter indicates the maximum count for each shard, upon reaching +// which the query execution will terminate early. +func (s *CountService) TerminateAfter(terminateAfter int) *CountService { + s.terminateAfter = &terminateAfter + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *CountService) Pretty(pretty bool) *CountService { + s.pretty = pretty + return s +} + +// BodyJson specifies the query to restrict the results specified with the +// Query DSL (optional). The interface{} will be serialized to a JSON document, +// so use a map[string]interface{}. +func (s *CountService) BodyJson(body interface{}) *CountService { + s.bodyJson = body + return s +} + +// Body specifies a query to restrict the results specified with +// the Query DSL (optional). +func (s *CountService) BodyString(body string) *CountService { + s.bodyString = body + return s +} + +// buildURL builds the URL for the operation. +func (s *CountService) buildURL() (string, url.Values, error) { + var err error + var path string + + if len(s.index) > 0 && len(s.typ) > 0 { + path, err = uritemplates.Expand("/{index}/{type}/_count", map[string]string{ + "index": strings.Join(s.index, ","), + "type": strings.Join(s.typ, ","), + }) + } else if len(s.index) > 0 { + path, err = uritemplates.Expand("/{index}/_count", map[string]string{ + "index": strings.Join(s.index, ","), + }) + } else if len(s.typ) > 0 { + path, err = uritemplates.Expand("/_all/{type}/_count", map[string]string{ + "type": strings.Join(s.typ, ","), + }) + } else { + path = "/_all/_count" + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.allowNoIndices != nil { + params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) + } + if s.analyzeWildcard != nil { + params.Set("analyze_wildcard", fmt.Sprintf("%v", *s.analyzeWildcard)) + } + if s.analyzer != "" { + params.Set("analyzer", s.analyzer) + } + if s.defaultOperator != "" { + params.Set("default_operator", s.defaultOperator) + } + if s.df != "" { + params.Set("df", s.df) + } + if s.expandWildcards != "" { + params.Set("expand_wildcards", s.expandWildcards) + } + if s.ignoreUnavailable != nil { + params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) + } + if s.lenient != nil { + params.Set("lenient", fmt.Sprintf("%v", *s.lenient)) + } + if s.lowercaseExpandedTerms != nil { + params.Set("lowercase_expanded_terms", fmt.Sprintf("%v", *s.lowercaseExpandedTerms)) + } + if s.minScore != nil { + params.Set("min_score", fmt.Sprintf("%v", s.minScore)) + } + if s.preference != "" { + params.Set("preference", s.preference) + } + if s.q != "" { + params.Set("q", s.q) + } + if s.routing != "" { + params.Set("routing", s.routing) + } + if s.terminateAfter != nil { + params.Set("terminate_after", fmt.Sprintf("%v", *s.terminateAfter)) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *CountService) Validate() error { + return nil +} + +// Do executes the operation. +func (s *CountService) Do(ctx context.Context) (int64, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return 0, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return 0, err + } + + // Setup HTTP request body + var body interface{} + if s.query != nil { + src, err := s.query.Source() + if err != nil { + return 0, err + } + query := make(map[string]interface{}) + query["query"] = src + body = query + } else if s.bodyJson != nil { + body = s.bodyJson + } else if s.bodyString != "" { + body = s.bodyString + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + Body: body, + }) + if err != nil { + return 0, err + } + + // Return result + ret := new(CountResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return 0, err + } + if ret != nil { + return ret.Count, nil + } + + return int64(0), nil +} + +// CountResponse is the response of using the Count API. +type CountResponse struct { + Count int64 `json:"count"` + Shards shardsInfo `json:"_shards,omitempty"` +} diff --git a/vendor/github.com/olivere/elastic/count_test.go b/vendor/github.com/olivere/elastic/count_test.go new file mode 100644 index 0000000..a0ee521 --- /dev/null +++ b/vendor/github.com/olivere/elastic/count_test.go @@ -0,0 +1,127 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "testing" +) + +func TestCountURL(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tests := []struct { + Indices []string + Types []string + Expected string + }{ + { + []string{}, + []string{}, + "/_all/_count", + }, + { + []string{}, + []string{"tweet"}, + "/_all/tweet/_count", + }, + { + []string{"twitter-*"}, + []string{"tweet", "follower"}, + "/twitter-%2A/tweet%2Cfollower/_count", + }, + { + []string{"twitter-2014", "twitter-2015"}, + []string{"tweet", "follower"}, + "/twitter-2014%2Ctwitter-2015/tweet%2Cfollower/_count", + }, + } + + for _, test := range tests { + path, _, err := client.Count().Index(test.Indices...).Type(test.Types...).buildURL() + if err != nil { + t.Fatal(err) + } + if path != test.Expected { + t.Errorf("expected %q; got: %q", test.Expected, path) + } + } +} + +func TestCount(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} + tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} + tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} + + // Add all documents + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Count documents + count, err := client.Count(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if count != 3 { + t.Errorf("expected Count = %d; got %d", 3, count) + } + + // Count documents + count, err = client.Count(testIndexName).Type("doc").Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if count != 3 { + t.Errorf("expected Count = %d; got %d", 3, count) + } + + // Count documents + count, err = client.Count(testIndexName).Type("gezwitscher").Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if count != 0 { + t.Errorf("expected Count = %d; got %d", 0, count) + } + + // Count with query + query := NewTermQuery("user", "olivere") + count, err = client.Count(testIndexName).Query(query).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if count != 2 { + t.Errorf("expected Count = %d; got %d", 2, count) + } + + // Count with query and type + query = NewTermQuery("user", "olivere") + count, err = client.Count(testIndexName).Type("doc").Query(query).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if count != 2 { + t.Errorf("expected Count = %d; got %d", 2, count) + } +} diff --git a/vendor/github.com/olivere/elastic/decoder.go b/vendor/github.com/olivere/elastic/decoder.go new file mode 100644 index 0000000..9cd2cf7 --- /dev/null +++ b/vendor/github.com/olivere/elastic/decoder.go @@ -0,0 +1,26 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" +) + +// Decoder is used to decode responses from Elasticsearch. +// Users of elastic can implement their own marshaler for advanced purposes +// and set them per Client (see SetDecoder). If none is specified, +// DefaultDecoder is used. +type Decoder interface { + Decode(data []byte, v interface{}) error +} + +// DefaultDecoder uses json.Unmarshal from the Go standard library +// to decode JSON data. +type DefaultDecoder struct{} + +// Decode decodes with json.Unmarshal from the Go standard library. +func (u *DefaultDecoder) Decode(data []byte, v interface{}) error { + return json.Unmarshal(data, v) +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/decoder_test.go b/vendor/github.com/olivere/elastic/decoder_test.go similarity index 88% rename from vendor/gopkg.in/olivere/elastic.v2/decoder_test.go rename to vendor/github.com/olivere/elastic/decoder_test.go index 5cfce9f..2c3dde8 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/decoder_test.go +++ b/vendor/github.com/olivere/elastic/decoder_test.go @@ -1,4 +1,4 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. @@ -6,6 +6,7 @@ package elastic import ( "bytes" + "context" "encoding/json" "sync/atomic" "testing" @@ -33,17 +34,17 @@ func TestDecoder(t *testing.T) { // Add a document indexResult, err := client.Index(). Index(testIndexName). - Type("tweet"). + Type("doc"). Id("1"). BodyJson(&tweet). - Do() + Do(context.TODO()) if err != nil { t.Fatal(err) } if indexResult == nil { t.Errorf("expected result to be != nil; got: %v", indexResult) } - if dec.N <= 0 { + if dec.N == 0 { t.Errorf("expected at least 1 call of decoder; got: %d", dec.N) } } diff --git a/vendor/github.com/olivere/elastic/delete.go b/vendor/github.com/olivere/elastic/delete.go new file mode 100644 index 0000000..baac24e --- /dev/null +++ b/vendor/github.com/olivere/elastic/delete.go @@ -0,0 +1,229 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/http" + "net/url" + + "github.com/olivere/elastic/uritemplates" +) + +// DeleteService allows to delete a typed JSON document from a specified +// index based on its id. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-delete.html +// for details. +type DeleteService struct { + client *Client + pretty bool + id string + index string + typ string + routing string + timeout string + version interface{} + versionType string + waitForActiveShards string + parent string + refresh string +} + +// NewDeleteService creates a new DeleteService. +func NewDeleteService(client *Client) *DeleteService { + return &DeleteService{ + client: client, + } +} + +// Type is the type of the document. +func (s *DeleteService) Type(typ string) *DeleteService { + s.typ = typ + return s +} + +// Id is the document ID. +func (s *DeleteService) Id(id string) *DeleteService { + s.id = id + return s +} + +// Index is the name of the index. +func (s *DeleteService) Index(index string) *DeleteService { + s.index = index + return s +} + +// Routing is a specific routing value. +func (s *DeleteService) Routing(routing string) *DeleteService { + s.routing = routing + return s +} + +// Timeout is an explicit operation timeout. +func (s *DeleteService) Timeout(timeout string) *DeleteService { + s.timeout = timeout + return s +} + +// Version is an explicit version number for concurrency control. +func (s *DeleteService) Version(version interface{}) *DeleteService { + s.version = version + return s +} + +// VersionType is a specific version type. +func (s *DeleteService) VersionType(versionType string) *DeleteService { + s.versionType = versionType + return s +} + +// WaitForActiveShards sets the number of shard copies that must be active +// before proceeding with the delete operation. Defaults to 1, meaning the +// primary shard only. Set to `all` for all shard copies, otherwise set to +// any non-negative value less than or equal to the total number of copies +// for the shard (number of replicas + 1). +func (s *DeleteService) WaitForActiveShards(waitForActiveShards string) *DeleteService { + s.waitForActiveShards = waitForActiveShards + return s +} + +// Parent is the ID of parent document. +func (s *DeleteService) Parent(parent string) *DeleteService { + s.parent = parent + return s +} + +// Refresh the index after performing the operation. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-refresh.html +// for details. +func (s *DeleteService) Refresh(refresh string) *DeleteService { + s.refresh = refresh + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *DeleteService) Pretty(pretty bool) *DeleteService { + s.pretty = pretty + return s +} + +// buildURL builds the URL for the operation. +func (s *DeleteService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/{index}/{type}/{id}", map[string]string{ + "index": s.index, + "type": s.typ, + "id": s.id, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.refresh != "" { + params.Set("refresh", s.refresh) + } + if s.routing != "" { + params.Set("routing", s.routing) + } + if s.timeout != "" { + params.Set("timeout", s.timeout) + } + if s.version != nil { + params.Set("version", fmt.Sprintf("%v", s.version)) + } + if s.versionType != "" { + params.Set("version_type", s.versionType) + } + if s.waitForActiveShards != "" { + params.Set("wait_for_active_shards", s.waitForActiveShards) + } + if s.parent != "" { + params.Set("parent", s.parent) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *DeleteService) Validate() error { + var invalid []string + if s.typ == "" { + invalid = append(invalid, "Type") + } + if s.id == "" { + invalid = append(invalid, "Id") + } + if s.index == "" { + invalid = append(invalid, "Index") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. If the document is not found (404), Elasticsearch will +// still return a response. This response is serialized and returned as well. In other +// words, for HTTP status code 404, both an error and a response might be returned. +func (s *DeleteService) Do(ctx context.Context) (*DeleteResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "DELETE", + Path: path, + Params: params, + IgnoreErrors: []int{http.StatusNotFound}, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(DeleteResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + + // If we have a 404, we return both a result and an error, just like ES does + if res.StatusCode == http.StatusNotFound { + return ret, &Error{Status: http.StatusNotFound} + } + + return ret, nil +} + +// -- Result of a delete request. + +// DeleteResponse is the outcome of running DeleteService.Do. +type DeleteResponse struct { + Index string `json:"_index,omitempty"` + Type string `json:"_type,omitempty"` + Id string `json:"_id,omitempty"` + Version int64 `json:"_version,omitempty"` + Result string `json:"result,omitempty"` + Shards *shardsInfo `json:"_shards,omitempty"` + SeqNo int64 `json:"_seq_no,omitempty"` + PrimaryTerm int64 `json:"_primary_term,omitempty"` + Status int `json:"status,omitempty"` + ForcedRefresh bool `json:"forced_refresh,omitempty"` +} diff --git a/vendor/github.com/olivere/elastic/delete_by_query.go b/vendor/github.com/olivere/elastic/delete_by_query.go new file mode 100644 index 0000000..3425dfd --- /dev/null +++ b/vendor/github.com/olivere/elastic/delete_by_query.go @@ -0,0 +1,657 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" + "strings" + + "github.com/olivere/elastic/uritemplates" +) + +// DeleteByQueryService deletes documents that match a query. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-delete-by-query.html. +type DeleteByQueryService struct { + client *Client + index []string + typ []string + query Query + body interface{} + xSource []string + xSourceExclude []string + xSourceInclude []string + analyzer string + analyzeWildcard *bool + allowNoIndices *bool + conflicts string + defaultOperator string + df string + docvalueFields []string + expandWildcards string + explain *bool + from *int + ignoreUnavailable *bool + lenient *bool + lowercaseExpandedTerms *bool + preference string + q string + refresh string + requestCache *bool + requestsPerSecond *int + routing []string + scroll string + scrollSize *int + searchTimeout string + searchType string + size *int + sort []string + stats []string + storedFields []string + suggestField string + suggestMode string + suggestSize *int + suggestText string + terminateAfter *int + timeout string + trackScores *bool + version *bool + waitForActiveShards string + waitForCompletion *bool + pretty bool +} + +// NewDeleteByQueryService creates a new DeleteByQueryService. +// You typically use the client's DeleteByQuery to get a reference to +// the service. +func NewDeleteByQueryService(client *Client) *DeleteByQueryService { + builder := &DeleteByQueryService{ + client: client, + } + return builder +} + +// Index sets the indices on which to perform the delete operation. +func (s *DeleteByQueryService) Index(index ...string) *DeleteByQueryService { + s.index = append(s.index, index...) + return s +} + +// Type limits the delete operation to the given types. +func (s *DeleteByQueryService) Type(typ ...string) *DeleteByQueryService { + s.typ = append(s.typ, typ...) + return s +} + +// XSource is true or false to return the _source field or not, +// or a list of fields to return. +func (s *DeleteByQueryService) XSource(xSource ...string) *DeleteByQueryService { + s.xSource = append(s.xSource, xSource...) + return s +} + +// XSourceExclude represents a list of fields to exclude from the returned _source field. +func (s *DeleteByQueryService) XSourceExclude(xSourceExclude ...string) *DeleteByQueryService { + s.xSourceExclude = append(s.xSourceExclude, xSourceExclude...) + return s +} + +// XSourceInclude represents a list of fields to extract and return from the _source field. +func (s *DeleteByQueryService) XSourceInclude(xSourceInclude ...string) *DeleteByQueryService { + s.xSourceInclude = append(s.xSourceInclude, xSourceInclude...) + return s +} + +// Analyzer to use for the query string. +func (s *DeleteByQueryService) Analyzer(analyzer string) *DeleteByQueryService { + s.analyzer = analyzer + return s +} + +// AnalyzeWildcard specifies whether wildcard and prefix queries should be +// analyzed (default: false). +func (s *DeleteByQueryService) AnalyzeWildcard(analyzeWildcard bool) *DeleteByQueryService { + s.analyzeWildcard = &analyzeWildcard + return s +} + +// AllowNoIndices indicates whether to ignore if a wildcard indices +// expression resolves into no concrete indices (including the _all string +// or when no indices have been specified). +func (s *DeleteByQueryService) AllowNoIndices(allow bool) *DeleteByQueryService { + s.allowNoIndices = &allow + return s +} + +// Conflicts indicates what to do when the process detects version conflicts. +// Possible values are "proceed" and "abort". +func (s *DeleteByQueryService) Conflicts(conflicts string) *DeleteByQueryService { + s.conflicts = conflicts + return s +} + +// AbortOnVersionConflict aborts the request on version conflicts. +// It is an alias to setting Conflicts("abort"). +func (s *DeleteByQueryService) AbortOnVersionConflict() *DeleteByQueryService { + s.conflicts = "abort" + return s +} + +// ProceedOnVersionConflict aborts the request on version conflicts. +// It is an alias to setting Conflicts("proceed"). +func (s *DeleteByQueryService) ProceedOnVersionConflict() *DeleteByQueryService { + s.conflicts = "proceed" + return s +} + +// DefaultOperator for query string query (AND or OR). +func (s *DeleteByQueryService) DefaultOperator(defaultOperator string) *DeleteByQueryService { + s.defaultOperator = defaultOperator + return s +} + +// DF is the field to use as default where no field prefix is given in the query string. +func (s *DeleteByQueryService) DF(defaultField string) *DeleteByQueryService { + s.df = defaultField + return s +} + +// DefaultField is the field to use as default where no field prefix is given in the query string. +// It is an alias to the DF func. +func (s *DeleteByQueryService) DefaultField(defaultField string) *DeleteByQueryService { + s.df = defaultField + return s +} + +// DocvalueFields specifies the list of fields to return as the docvalue representation of a field for each hit. +func (s *DeleteByQueryService) DocvalueFields(docvalueFields ...string) *DeleteByQueryService { + s.docvalueFields = docvalueFields + return s +} + +// ExpandWildcards indicates whether to expand wildcard expression to +// concrete indices that are open, closed or both. It can be "open" or "closed". +func (s *DeleteByQueryService) ExpandWildcards(expand string) *DeleteByQueryService { + s.expandWildcards = expand + return s +} + +// Explain specifies whether to return detailed information about score +// computation as part of a hit. +func (s *DeleteByQueryService) Explain(explain bool) *DeleteByQueryService { + s.explain = &explain + return s +} + +// From is the starting offset (default: 0). +func (s *DeleteByQueryService) From(from int) *DeleteByQueryService { + s.from = &from + return s +} + +// IgnoreUnavailable indicates whether specified concrete indices should be +// ignored when unavailable (missing or closed). +func (s *DeleteByQueryService) IgnoreUnavailable(ignore bool) *DeleteByQueryService { + s.ignoreUnavailable = &ignore + return s +} + +// Lenient specifies whether format-based query failures +// (such as providing text to a numeric field) should be ignored. +func (s *DeleteByQueryService) Lenient(lenient bool) *DeleteByQueryService { + s.lenient = &lenient + return s +} + +// LowercaseExpandedTerms specifies whether query terms should be lowercased. +func (s *DeleteByQueryService) LowercaseExpandedTerms(lowercaseExpandedTerms bool) *DeleteByQueryService { + s.lowercaseExpandedTerms = &lowercaseExpandedTerms + return s +} + +// Preference specifies the node or shard the operation should be performed on +// (default: random). +func (s *DeleteByQueryService) Preference(preference string) *DeleteByQueryService { + s.preference = preference + return s +} + +// Q specifies the query in Lucene query string syntax. You can also use +// Query to programmatically specify the query. +func (s *DeleteByQueryService) Q(query string) *DeleteByQueryService { + s.q = query + return s +} + +// QueryString is an alias to Q. Notice that you can also use Query to +// programmatically set the query. +func (s *DeleteByQueryService) QueryString(query string) *DeleteByQueryService { + s.q = query + return s +} + +// Query sets the query programmatically. +func (s *DeleteByQueryService) Query(query Query) *DeleteByQueryService { + s.query = query + return s +} + +// Refresh indicates whether the effected indexes should be refreshed. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-refresh.html +// for details. +func (s *DeleteByQueryService) Refresh(refresh string) *DeleteByQueryService { + s.refresh = refresh + return s +} + +// RequestCache specifies if request cache should be used for this request +// or not, defaults to index level setting. +func (s *DeleteByQueryService) RequestCache(requestCache bool) *DeleteByQueryService { + s.requestCache = &requestCache + return s +} + +// RequestsPerSecond sets the throttle on this request in sub-requests per second. +// -1 means set no throttle as does "unlimited" which is the only non-float this accepts. +func (s *DeleteByQueryService) RequestsPerSecond(requestsPerSecond int) *DeleteByQueryService { + s.requestsPerSecond = &requestsPerSecond + return s +} + +// Routing is a list of specific routing values. +func (s *DeleteByQueryService) Routing(routing ...string) *DeleteByQueryService { + s.routing = append(s.routing, routing...) + return s +} + +// Scroll specifies how long a consistent view of the index should be maintained +// for scrolled search. +func (s *DeleteByQueryService) Scroll(scroll string) *DeleteByQueryService { + s.scroll = scroll + return s +} + +// ScrollSize is the size on the scroll request powering the update_by_query. +func (s *DeleteByQueryService) ScrollSize(scrollSize int) *DeleteByQueryService { + s.scrollSize = &scrollSize + return s +} + +// SearchTimeout defines an explicit timeout for each search request. +// Defaults to no timeout. +func (s *DeleteByQueryService) SearchTimeout(searchTimeout string) *DeleteByQueryService { + s.searchTimeout = searchTimeout + return s +} + +// SearchType is the search operation type. Possible values are +// "query_then_fetch" and "dfs_query_then_fetch". +func (s *DeleteByQueryService) SearchType(searchType string) *DeleteByQueryService { + s.searchType = searchType + return s +} + +// Size represents the number of hits to return (default: 10). +func (s *DeleteByQueryService) Size(size int) *DeleteByQueryService { + s.size = &size + return s +} + +// Sort is a list of : pairs. +func (s *DeleteByQueryService) Sort(sort ...string) *DeleteByQueryService { + s.sort = append(s.sort, sort...) + return s +} + +// SortByField adds a sort order. +func (s *DeleteByQueryService) SortByField(field string, ascending bool) *DeleteByQueryService { + if ascending { + s.sort = append(s.sort, fmt.Sprintf("%s:asc", field)) + } else { + s.sort = append(s.sort, fmt.Sprintf("%s:desc", field)) + } + return s +} + +// Stats specifies specific tag(s) of the request for logging and statistical purposes. +func (s *DeleteByQueryService) Stats(stats ...string) *DeleteByQueryService { + s.stats = append(s.stats, stats...) + return s +} + +// StoredFields specifies the list of stored fields to return as part of a hit. +func (s *DeleteByQueryService) StoredFields(storedFields ...string) *DeleteByQueryService { + s.storedFields = storedFields + return s +} + +// SuggestField specifies which field to use for suggestions. +func (s *DeleteByQueryService) SuggestField(suggestField string) *DeleteByQueryService { + s.suggestField = suggestField + return s +} + +// SuggestMode specifies the suggest mode. Possible values are +// "missing", "popular", and "always". +func (s *DeleteByQueryService) SuggestMode(suggestMode string) *DeleteByQueryService { + s.suggestMode = suggestMode + return s +} + +// SuggestSize specifies how many suggestions to return in response. +func (s *DeleteByQueryService) SuggestSize(suggestSize int) *DeleteByQueryService { + s.suggestSize = &suggestSize + return s +} + +// SuggestText specifies the source text for which the suggestions should be returned. +func (s *DeleteByQueryService) SuggestText(suggestText string) *DeleteByQueryService { + s.suggestText = suggestText + return s +} + +// TerminateAfter indicates the maximum number of documents to collect +// for each shard, upon reaching which the query execution will terminate early. +func (s *DeleteByQueryService) TerminateAfter(terminateAfter int) *DeleteByQueryService { + s.terminateAfter = &terminateAfter + return s +} + +// Timeout is the time each individual bulk request should wait for shards +// that are unavailable. +func (s *DeleteByQueryService) Timeout(timeout string) *DeleteByQueryService { + s.timeout = timeout + return s +} + +// TimeoutInMillis sets the timeout in milliseconds. +func (s *DeleteByQueryService) TimeoutInMillis(timeoutInMillis int) *DeleteByQueryService { + s.timeout = fmt.Sprintf("%dms", timeoutInMillis) + return s +} + +// TrackScores indicates whether to calculate and return scores even if +// they are not used for sorting. +func (s *DeleteByQueryService) TrackScores(trackScores bool) *DeleteByQueryService { + s.trackScores = &trackScores + return s +} + +// Version specifies whether to return document version as part of a hit. +func (s *DeleteByQueryService) Version(version bool) *DeleteByQueryService { + s.version = &version + return s +} + +// WaitForActiveShards sets the number of shard copies that must be active before proceeding +// with the update by query operation. Defaults to 1, meaning the primary shard only. +// Set to `all` for all shard copies, otherwise set to any non-negative value less than or equal +// to the total number of copies for the shard (number of replicas + 1). +func (s *DeleteByQueryService) WaitForActiveShards(waitForActiveShards string) *DeleteByQueryService { + s.waitForActiveShards = waitForActiveShards + return s +} + +// WaitForCompletion indicates if the request should block until the reindex is complete. +func (s *DeleteByQueryService) WaitForCompletion(waitForCompletion bool) *DeleteByQueryService { + s.waitForCompletion = &waitForCompletion + return s +} + +// Pretty indents the JSON output from Elasticsearch. +func (s *DeleteByQueryService) Pretty(pretty bool) *DeleteByQueryService { + s.pretty = pretty + return s +} + +// Body specifies the body of the request. It overrides data being specified via SearchService. +func (s *DeleteByQueryService) Body(body string) *DeleteByQueryService { + s.body = body + return s +} + +// buildURL builds the URL for the operation. +func (s *DeleteByQueryService) buildURL() (string, url.Values, error) { + // Build URL + var err error + var path string + if len(s.typ) > 0 { + path, err = uritemplates.Expand("/{index}/{type}/_delete_by_query", map[string]string{ + "index": strings.Join(s.index, ","), + "type": strings.Join(s.typ, ","), + }) + } else { + path, err = uritemplates.Expand("/{index}/_delete_by_query", map[string]string{ + "index": strings.Join(s.index, ","), + }) + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if len(s.xSource) > 0 { + params.Set("_source", strings.Join(s.xSource, ",")) + } + if len(s.xSourceExclude) > 0 { + params.Set("_source_exclude", strings.Join(s.xSourceExclude, ",")) + } + if len(s.xSourceInclude) > 0 { + params.Set("_source_include", strings.Join(s.xSourceInclude, ",")) + } + if s.analyzer != "" { + params.Set("analyzer", s.analyzer) + } + if s.analyzeWildcard != nil { + params.Set("analyze_wildcard", fmt.Sprintf("%v", *s.analyzeWildcard)) + } + if s.defaultOperator != "" { + params.Set("default_operator", s.defaultOperator) + } + if s.df != "" { + params.Set("df", s.df) + } + if s.explain != nil { + params.Set("explain", fmt.Sprintf("%v", *s.explain)) + } + if len(s.storedFields) > 0 { + params.Set("stored_fields", strings.Join(s.storedFields, ",")) + } + if len(s.docvalueFields) > 0 { + params.Set("docvalue_fields", strings.Join(s.docvalueFields, ",")) + } + if s.from != nil { + params.Set("from", fmt.Sprintf("%d", *s.from)) + } + if s.ignoreUnavailable != nil { + params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) + } + if s.allowNoIndices != nil { + params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) + } + if s.conflicts != "" { + params.Set("conflicts", s.conflicts) + } + if s.expandWildcards != "" { + params.Set("expand_wildcards", s.expandWildcards) + } + if s.lenient != nil { + params.Set("lenient", fmt.Sprintf("%v", *s.lenient)) + } + if s.lowercaseExpandedTerms != nil { + params.Set("lowercase_expanded_terms", fmt.Sprintf("%v", *s.lowercaseExpandedTerms)) + } + if s.preference != "" { + params.Set("preference", s.preference) + } + if s.q != "" { + params.Set("q", s.q) + } + if len(s.routing) > 0 { + params.Set("routing", strings.Join(s.routing, ",")) + } + if s.scroll != "" { + params.Set("scroll", s.scroll) + } + if s.searchType != "" { + params.Set("search_type", s.searchType) + } + if s.searchTimeout != "" { + params.Set("search_timeout", s.searchTimeout) + } + if s.size != nil { + params.Set("size", fmt.Sprintf("%d", *s.size)) + } + if len(s.sort) > 0 { + params.Set("sort", strings.Join(s.sort, ",")) + } + if s.terminateAfter != nil { + params.Set("terminate_after", fmt.Sprintf("%v", *s.terminateAfter)) + } + if len(s.stats) > 0 { + params.Set("stats", strings.Join(s.stats, ",")) + } + if s.suggestField != "" { + params.Set("suggest_field", s.suggestField) + } + if s.suggestMode != "" { + params.Set("suggest_mode", s.suggestMode) + } + if s.suggestSize != nil { + params.Set("suggest_size", fmt.Sprintf("%v", *s.suggestSize)) + } + if s.suggestText != "" { + params.Set("suggest_text", s.suggestText) + } + if s.timeout != "" { + params.Set("timeout", s.timeout) + } + if s.trackScores != nil { + params.Set("track_scores", fmt.Sprintf("%v", *s.trackScores)) + } + if s.version != nil { + params.Set("version", fmt.Sprintf("%v", *s.version)) + } + if s.requestCache != nil { + params.Set("request_cache", fmt.Sprintf("%v", *s.requestCache)) + } + if s.refresh != "" { + params.Set("refresh", s.refresh) + } + if s.waitForActiveShards != "" { + params.Set("wait_for_active_shards", s.waitForActiveShards) + } + if s.scrollSize != nil { + params.Set("scroll_size", fmt.Sprintf("%d", *s.scrollSize)) + } + if s.waitForCompletion != nil { + params.Set("wait_for_completion", fmt.Sprintf("%v", *s.waitForCompletion)) + } + if s.requestsPerSecond != nil { + params.Set("requests_per_second", fmt.Sprintf("%v", *s.requestsPerSecond)) + } + if s.pretty { + params.Set("pretty", fmt.Sprintf("%v", s.pretty)) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *DeleteByQueryService) Validate() error { + var invalid []string + if len(s.index) == 0 { + invalid = append(invalid, "Index") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the delete-by-query operation. +func (s *DeleteByQueryService) Do(ctx context.Context) (*BulkIndexByScrollResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Set body if there is a query set + var body interface{} + if s.body != nil { + body = s.body + } else if s.query != nil { + src, err := s.query.Source() + if err != nil { + return nil, err + } + body = map[string]interface{}{ + "query": src, + } + } + + // Get response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + Body: body, + }) + if err != nil { + return nil, err + } + + // Return result + ret := new(BulkIndexByScrollResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// BulkIndexByScrollResponse is the outcome of executing Do with +// DeleteByQueryService and UpdateByQueryService. +type BulkIndexByScrollResponse struct { + Took int64 `json:"took"` + SliceId *int64 `json:"slice_id,omitempty"` + TimedOut bool `json:"timed_out"` + Total int64 `json:"total"` + Updated int64 `json:"updated,omitempty"` + Created int64 `json:"created,omitempty"` + Deleted int64 `json:"deleted"` + Batches int64 `json:"batches"` + VersionConflicts int64 `json:"version_conflicts"` + Noops int64 `json:"noops"` + Retries struct { + Bulk int64 `json:"bulk"` + Search int64 `json:"search"` + } `json:"retries,omitempty"` + Throttled string `json:"throttled"` + ThrottledMillis int64 `json:"throttled_millis"` + RequestsPerSecond float64 `json:"requests_per_second"` + Canceled string `json:"canceled,omitempty"` + ThrottledUntil string `json:"throttled_until"` + ThrottledUntilMillis int64 `json:"throttled_until_millis"` + Failures []bulkIndexByScrollResponseFailure `json:"failures"` +} + +type bulkIndexByScrollResponseFailure struct { + Index string `json:"index,omitempty"` + Type string `json:"type,omitempty"` + Id string `json:"id,omitempty"` + Status int `json:"status,omitempty"` + Shard int `json:"shard,omitempty"` + Node int `json:"node,omitempty"` + // TOOD "cause" contains exception details + // TOOD "reason" contains exception details +} diff --git a/vendor/github.com/olivere/elastic/delete_by_query_test.go b/vendor/github.com/olivere/elastic/delete_by_query_test.go new file mode 100644 index 0000000..40e45b8 --- /dev/null +++ b/vendor/github.com/olivere/elastic/delete_by_query_test.go @@ -0,0 +1,146 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "testing" +) + +func TestDeleteByQueryBuildURL(t *testing.T) { + client := setupTestClient(t) + + tests := []struct { + Indices []string + Types []string + Expected string + ExpectErr bool + }{ + { + []string{}, + []string{}, + "", + true, + }, + { + []string{"index1"}, + []string{}, + "/index1/_delete_by_query", + false, + }, + { + []string{"index1", "index2"}, + []string{}, + "/index1%2Cindex2/_delete_by_query", + false, + }, + { + []string{}, + []string{"type1"}, + "", + true, + }, + { + []string{"index1"}, + []string{"type1"}, + "/index1/type1/_delete_by_query", + false, + }, + { + []string{"index1", "index2"}, + []string{"type1", "type2"}, + "/index1%2Cindex2/type1%2Ctype2/_delete_by_query", + false, + }, + } + + for i, test := range tests { + builder := client.DeleteByQuery().Index(test.Indices...).Type(test.Types...) + err := builder.Validate() + if err != nil { + if !test.ExpectErr { + t.Errorf("case #%d: %v", i+1, err) + continue + } + } else { + // err == nil + if test.ExpectErr { + t.Errorf("case #%d: expected error", i+1) + continue + } + path, _, _ := builder.buildURL() + if path != test.Expected { + t.Errorf("case #%d: expected %q; got: %q", i+1, test.Expected, path) + } + } + } +} + +func TestDeleteByQuery(t *testing.T) { + // client := setupTestClientAndCreateIndex(t, SetTraceLog(log.New(os.Stdout, "", 0))) + client := setupTestClientAndCreateIndex(t) + + tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} + tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} + tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} + + // Add all documents + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Count documents + count, err := client.Count(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if count != 3 { + t.Fatalf("expected count = %d; got: %d", 3, count) + } + + // Delete all documents by sandrae + q := NewTermQuery("user", "sandrae") + res, err := client.DeleteByQuery(). + Index(testIndexName). + Type("doc"). + Query(q). + Pretty(true). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if res == nil { + t.Fatalf("expected response != nil; got: %v", res) + } + + // Flush and check count + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + count, err = client.Count(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if count != 2 { + t.Fatalf("expected Count = %d; got: %d", 2, count) + } +} diff --git a/vendor/github.com/olivere/elastic/delete_test.go b/vendor/github.com/olivere/elastic/delete_test.go new file mode 100644 index 0000000..571fcf5 --- /dev/null +++ b/vendor/github.com/olivere/elastic/delete_test.go @@ -0,0 +1,134 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "testing" +) + +func TestDelete(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} + tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} + tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} + + // Add all documents + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Count documents + count, err := client.Count(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if count != 3 { + t.Errorf("expected Count = %d; got %d", 3, count) + } + + // Delete document 1 + res, err := client.Delete().Index(testIndexName).Type("doc").Id("1").Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if want, have := "deleted", res.Result; want != have { + t.Errorf("expected Result = %q; got %q", want, have) + } + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + count, err = client.Count(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if count != 2 { + t.Errorf("expected Count = %d; got %d", 2, count) + } + + // Delete non existent document 99 + res, err = client.Delete().Index(testIndexName).Type("doc").Id("99").Refresh("true").Do(context.TODO()) + if err == nil { + t.Fatal("expected error") + } + if !IsNotFound(err) { + t.Fatalf("expected 404, got: %v", err) + } + if _, ok := err.(*Error); !ok { + t.Fatalf("expected error type *Error, got: %T", err) + } + if res == nil { + t.Fatal("expected response") + } + if have, want := res.Id, "99"; have != want { + t.Errorf("expected _id = %q, got %q", have, want) + } + if have, want := res.Index, testIndexName; have != want { + t.Errorf("expected _index = %q, got %q", have, want) + } + if have, want := res.Type, "doc"; have != want { + t.Errorf("expected _type = %q, got %q", have, want) + } + if have, want := res.Result, "not_found"; have != want { + t.Errorf("expected Result = %q, got %q", have, want) + } + + count, err = client.Count(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if count != 2 { + t.Errorf("expected Count = %d; got %d", 2, count) + } +} + +func TestDeleteValidate(t *testing.T) { + client := setupTestClientAndCreateIndexAndAddDocs(t) + + // No index name -> fail with error + res, err := NewDeleteService(client).Type("doc").Id("1").Do(context.TODO()) + if err == nil { + t.Fatalf("expected Delete to fail without index name") + } + if res != nil { + t.Fatalf("expected result to be == nil; got: %v", res) + } + + // No type -> fail with error + res, err = NewDeleteService(client).Index(testIndexName).Id("1").Do(context.TODO()) + if err == nil { + t.Fatalf("expected Delete to fail without type") + } + if res != nil { + t.Fatalf("expected result to be == nil; got: %v", res) + } + + // No id -> fail with error + res, err = NewDeleteService(client).Index(testIndexName).Type("doc").Do(context.TODO()) + if err == nil { + t.Fatalf("expected Delete to fail without id") + } + if res != nil { + t.Fatalf("expected result to be == nil; got: %v", res) + } +} diff --git a/vendor/github.com/olivere/elastic/doc.go b/vendor/github.com/olivere/elastic/doc.go new file mode 100644 index 0000000..ea16d66 --- /dev/null +++ b/vendor/github.com/olivere/elastic/doc.go @@ -0,0 +1,51 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +/* +Package elastic provides an interface to the Elasticsearch server +(https://www.elastic.co/products/elasticsearch). + +The first thing you do is to create a Client. If you have Elasticsearch +installed and running with its default settings +(i.e. available at http://127.0.0.1:9200), all you need to do is: + + client, err := elastic.NewClient() + if err != nil { + // Handle error + } + +If your Elasticsearch server is running on a different IP and/or port, +just provide a URL to NewClient: + + // Create a client and connect to http://192.168.2.10:9201 + client, err := elastic.NewClient(elastic.SetURL("http://192.168.2.10:9201")) + if err != nil { + // Handle error + } + +You can pass many more configuration parameters to NewClient. Review the +documentation of NewClient for more information. + +If no Elasticsearch server is available, services will fail when creating +a new request and will return ErrNoClient. + +A Client provides services. The services usually come with a variety of +methods to prepare the query and a Do function to execute it against the +Elasticsearch REST interface and return a response. Here is an example +of the IndexExists service that checks if a given index already exists. + + exists, err := client.IndexExists("twitter").Do(context.Background()) + if err != nil { + // Handle error + } + if !exists { + // Index does not exist yet. + } + +Look up the documentation for Client to get an idea of the services provided +and what kinds of responses you get when executing the Do function of a service. +Also see the wiki on Github for more details. + +*/ +package elastic diff --git a/vendor/github.com/olivere/elastic/errors.go b/vendor/github.com/olivere/elastic/errors.go new file mode 100644 index 0000000..e40cda8 --- /dev/null +++ b/vendor/github.com/olivere/elastic/errors.go @@ -0,0 +1,155 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "net/http" + + "github.com/pkg/errors" +) + +// checkResponse will return an error if the request/response indicates +// an error returned from Elasticsearch. +// +// HTTP status codes between in the range [200..299] are considered successful. +// All other errors are considered errors except they are specified in +// ignoreErrors. This is necessary because for some services, HTTP status 404 +// is a valid response from Elasticsearch (e.g. the Exists service). +// +// The func tries to parse error details as returned from Elasticsearch +// and encapsulates them in type elastic.Error. +func checkResponse(req *http.Request, res *http.Response, ignoreErrors ...int) error { + // 200-299 are valid status codes + if res.StatusCode >= 200 && res.StatusCode <= 299 { + return nil + } + // Ignore certain errors? + for _, code := range ignoreErrors { + if code == res.StatusCode { + return nil + } + } + return createResponseError(res) +} + +// createResponseError creates an Error structure from the HTTP response, +// its status code and the error information sent by Elasticsearch. +func createResponseError(res *http.Response) error { + if res.Body == nil { + return &Error{Status: res.StatusCode} + } + data, err := ioutil.ReadAll(res.Body) + if err != nil { + return &Error{Status: res.StatusCode} + } + errReply := new(Error) + err = json.Unmarshal(data, errReply) + if err != nil { + return &Error{Status: res.StatusCode} + } + if errReply != nil { + if errReply.Status == 0 { + errReply.Status = res.StatusCode + } + return errReply + } + return &Error{Status: res.StatusCode} +} + +// Error encapsulates error details as returned from Elasticsearch. +type Error struct { + Status int `json:"status"` + Details *ErrorDetails `json:"error,omitempty"` +} + +// ErrorDetails encapsulate error details from Elasticsearch. +// It is used in e.g. elastic.Error and elastic.BulkResponseItem. +type ErrorDetails struct { + Type string `json:"type"` + Reason string `json:"reason"` + ResourceType string `json:"resource.type,omitempty"` + ResourceId string `json:"resource.id,omitempty"` + Index string `json:"index,omitempty"` + Phase string `json:"phase,omitempty"` + Grouped bool `json:"grouped,omitempty"` + CausedBy map[string]interface{} `json:"caused_by,omitempty"` + RootCause []*ErrorDetails `json:"root_cause,omitempty"` + FailedShards []map[string]interface{} `json:"failed_shards,omitempty"` +} + +// Error returns a string representation of the error. +func (e *Error) Error() string { + if e.Details != nil && e.Details.Reason != "" { + return fmt.Sprintf("elastic: Error %d (%s): %s [type=%s]", e.Status, http.StatusText(e.Status), e.Details.Reason, e.Details.Type) + } else { + return fmt.Sprintf("elastic: Error %d (%s)", e.Status, http.StatusText(e.Status)) + } +} + +// IsConnErr returns true if the error indicates that Elastic could not +// find an Elasticsearch host to connect to. +func IsConnErr(err error) bool { + return err == ErrNoClient || errors.Cause(err) == ErrNoClient +} + +// IsNotFound returns true if the given error indicates that Elasticsearch +// returned HTTP status 404. The err parameter can be of type *elastic.Error, +// elastic.Error, *http.Response or int (indicating the HTTP status code). +func IsNotFound(err interface{}) bool { + return IsStatusCode(err, http.StatusNotFound) +} + +// IsTimeout returns true if the given error indicates that Elasticsearch +// returned HTTP status 408. The err parameter can be of type *elastic.Error, +// elastic.Error, *http.Response or int (indicating the HTTP status code). +func IsTimeout(err interface{}) bool { + return IsStatusCode(err, http.StatusRequestTimeout) +} + +// IsConflict returns true if the given error indicates that the Elasticsearch +// operation resulted in a version conflict. This can occur in operations like +// `update` or `index` with `op_type=create`. The err parameter can be of +// type *elastic.Error, elastic.Error, *http.Response or int (indicating the +// HTTP status code). +func IsConflict(err interface{}) bool { + return IsStatusCode(err, http.StatusConflict) +} + +// IsStatusCode returns true if the given error indicates that the Elasticsearch +// operation returned the specified HTTP status code. The err parameter can be of +// type *http.Response, *Error, Error, or int (indicating the HTTP status code). +func IsStatusCode(err interface{}, code int) bool { + switch e := err.(type) { + case *http.Response: + return e.StatusCode == code + case *Error: + return e.Status == code + case Error: + return e.Status == code + case int: + return e == code + } + return false +} + +// -- General errors -- + +// shardsInfo represents information from a shard. +type shardsInfo struct { + Total int `json:"total"` + Successful int `json:"successful"` + Failed int `json:"failed"` +} + +// shardOperationFailure represents a shard failure. +type shardOperationFailure struct { + Shard int `json:"shard"` + Index string `json:"index"` + Status string `json:"status"` + // "reason" +} diff --git a/vendor/github.com/olivere/elastic/errors_test.go b/vendor/github.com/olivere/elastic/errors_test.go new file mode 100644 index 0000000..75d3949 --- /dev/null +++ b/vendor/github.com/olivere/elastic/errors_test.go @@ -0,0 +1,295 @@ +package elastic + +import ( + "bufio" + "fmt" + "net/http" + "strings" + "testing" +) + +func TestResponseError(t *testing.T) { + raw := "HTTP/1.1 404 Not Found\r\n" + + "\r\n" + + `{"error":{"root_cause":[{"type":"index_missing_exception","reason":"no such index","index":"elastic-test"}],"type":"index_missing_exception","reason":"no such index","index":"elastic-test"},"status":404}` + "\r\n" + r := bufio.NewReader(strings.NewReader(raw)) + + req, err := http.NewRequest("GET", "/", nil) + if err != nil { + t.Fatal(err) + } + + resp, err := http.ReadResponse(r, nil) + if err != nil { + t.Fatal(err) + } + err = checkResponse(req, resp) + if err == nil { + t.Fatalf("expected error; got: %v", err) + } + + // Check for correct error message + expected := fmt.Sprintf("elastic: Error %d (%s): no such index [type=index_missing_exception]", resp.StatusCode, http.StatusText(resp.StatusCode)) + got := err.Error() + if got != expected { + t.Fatalf("expected %q; got: %q", expected, got) + } + + // Check that error is of type *elastic.Error, which contains additional information + e, ok := err.(*Error) + if !ok { + t.Fatal("expected error to be of type *elastic.Error") + } + if e.Status != resp.StatusCode { + t.Fatalf("expected status code %d; got: %d", resp.StatusCode, e.Status) + } + if e.Details == nil { + t.Fatalf("expected error details; got: %v", e.Details) + } + if got, want := e.Details.Index, "elastic-test"; got != want { + t.Fatalf("expected error details index %q; got: %q", want, got) + } + if got, want := e.Details.Type, "index_missing_exception"; got != want { + t.Fatalf("expected error details type %q; got: %q", want, got) + } + if got, want := e.Details.Reason, "no such index"; got != want { + t.Fatalf("expected error details reason %q; got: %q", want, got) + } + if got, want := len(e.Details.RootCause), 1; got != want { + t.Fatalf("expected %d error details root causes; got: %d", want, got) + } + + if got, want := e.Details.RootCause[0].Index, "elastic-test"; got != want { + t.Fatalf("expected root cause index %q; got: %q", want, got) + } + if got, want := e.Details.RootCause[0].Type, "index_missing_exception"; got != want { + t.Fatalf("expected root cause type %q; got: %q", want, got) + } + if got, want := e.Details.RootCause[0].Reason, "no such index"; got != want { + t.Fatalf("expected root cause reason %q; got: %q", want, got) + } +} + +func TestResponseErrorHTML(t *testing.T) { + raw := "HTTP/1.1 413 Request Entity Too Large\r\n" + + "\r\n" + + ` +413 Request Entity Too Large + +

413 Request Entity Too Large

+
nginx/1.6.2
+ +` + "\r\n" + r := bufio.NewReader(strings.NewReader(raw)) + + req, err := http.NewRequest("GET", "/", nil) + if err != nil { + t.Fatal(err) + } + + resp, err := http.ReadResponse(r, nil) + if err != nil { + t.Fatal(err) + } + err = checkResponse(req, resp) + if err == nil { + t.Fatalf("expected error; got: %v", err) + } + + // Check for correct error message + expected := fmt.Sprintf("elastic: Error %d (%s)", http.StatusRequestEntityTooLarge, http.StatusText(http.StatusRequestEntityTooLarge)) + got := err.Error() + if got != expected { + t.Fatalf("expected %q; got: %q", expected, got) + } +} + +func TestResponseErrorWithIgnore(t *testing.T) { + raw := "HTTP/1.1 404 Not Found\r\n" + + "\r\n" + + `{"some":"response"}` + "\r\n" + r := bufio.NewReader(strings.NewReader(raw)) + + req, err := http.NewRequest("HEAD", "/", nil) + if err != nil { + t.Fatal(err) + } + + resp, err := http.ReadResponse(r, nil) + if err != nil { + t.Fatal(err) + } + err = checkResponse(req, resp) + if err == nil { + t.Fatalf("expected error; got: %v", err) + } + err = checkResponse(req, resp, 404) // ignore 404 errors + if err != nil { + t.Fatalf("expected no error; got: %v", err) + } +} + +func TestIsNotFound(t *testing.T) { + if got, want := IsNotFound(nil), false; got != want { + t.Errorf("expected %v; got: %v", want, got) + } + if got, want := IsNotFound(""), false; got != want { + t.Errorf("expected %v; got: %v", want, got) + } + if got, want := IsNotFound(200), false; got != want { + t.Errorf("expected %v; got: %v", want, got) + } + if got, want := IsNotFound(404), true; got != want { + t.Errorf("expected %v; got: %v", want, got) + } + + if got, want := IsNotFound(&Error{Status: 404}), true; got != want { + t.Errorf("expected %v; got: %v", want, got) + } + if got, want := IsNotFound(&Error{Status: 200}), false; got != want { + t.Errorf("expected %v; got: %v", want, got) + } + + if got, want := IsNotFound(Error{Status: 404}), true; got != want { + t.Errorf("expected %v; got: %v", want, got) + } + if got, want := IsNotFound(Error{Status: 200}), false; got != want { + t.Errorf("expected %v; got: %v", want, got) + } + + if got, want := IsNotFound(&http.Response{StatusCode: 404}), true; got != want { + t.Errorf("expected %v; got: %v", want, got) + } + if got, want := IsNotFound(&http.Response{StatusCode: 200}), false; got != want { + t.Errorf("expected %v; got: %v", want, got) + } +} + +func TestIsTimeout(t *testing.T) { + if got, want := IsTimeout(nil), false; got != want { + t.Errorf("expected %v; got: %v", want, got) + } + if got, want := IsTimeout(""), false; got != want { + t.Errorf("expected %v; got: %v", want, got) + } + if got, want := IsTimeout(200), false; got != want { + t.Errorf("expected %v; got: %v", want, got) + } + if got, want := IsTimeout(408), true; got != want { + t.Errorf("expected %v; got: %v", want, got) + } + + if got, want := IsTimeout(&Error{Status: 408}), true; got != want { + t.Errorf("expected %v; got: %v", want, got) + } + if got, want := IsTimeout(&Error{Status: 200}), false; got != want { + t.Errorf("expected %v; got: %v", want, got) + } + + if got, want := IsTimeout(Error{Status: 408}), true; got != want { + t.Errorf("expected %v; got: %v", want, got) + } + if got, want := IsTimeout(Error{Status: 200}), false; got != want { + t.Errorf("expected %v; got: %v", want, got) + } + + if got, want := IsTimeout(&http.Response{StatusCode: 408}), true; got != want { + t.Errorf("expected %v; got: %v", want, got) + } + if got, want := IsTimeout(&http.Response{StatusCode: 200}), false; got != want { + t.Errorf("expected %v; got: %v", want, got) + } +} + +func TestIsConflict(t *testing.T) { + if got, want := IsConflict(nil), false; got != want { + t.Errorf("expected %v; got: %v", want, got) + } + if got, want := IsConflict(""), false; got != want { + t.Errorf("expected %v; got: %v", want, got) + } + if got, want := IsConflict(200), false; got != want { + t.Errorf("expected %v; got: %v", want, got) + } + if got, want := IsConflict(http.StatusConflict), true; got != want { + t.Errorf("expected %v; got: %v", want, got) + } + + if got, want := IsConflict(&Error{Status: 409}), true; got != want { + t.Errorf("expected %v; got: %v", want, got) + } + if got, want := IsConflict(&Error{Status: 200}), false; got != want { + t.Errorf("expected %v; got: %v", want, got) + } + + if got, want := IsConflict(Error{Status: 409}), true; got != want { + t.Errorf("expected %v; got: %v", want, got) + } + if got, want := IsConflict(Error{Status: 200}), false; got != want { + t.Errorf("expected %v; got: %v", want, got) + } + + if got, want := IsConflict(&http.Response{StatusCode: 409}), true; got != want { + t.Errorf("expected %v; got: %v", want, got) + } + if got, want := IsConflict(&http.Response{StatusCode: 200}), false; got != want { + t.Errorf("expected %v; got: %v", want, got) + } +} + +func TestIsStatusCode(t *testing.T) { + tests := []struct { + Error interface{} + Code int + Want bool + }{ + // #0 + { + Error: nil, + Code: 200, + Want: false, + }, + // #1 + { + Error: "", + Code: 200, + Want: false, + }, + // #2 + { + Error: http.StatusConflict, + Code: 409, + Want: true, + }, + // #3 + { + Error: http.StatusConflict, + Code: http.StatusInternalServerError, + Want: false, + }, + // #4 + { + Error: &Error{Status: http.StatusConflict}, + Code: 409, + Want: true, + }, + // #5 + { + Error: Error{Status: http.StatusConflict}, + Code: 409, + Want: true, + }, + // #6 + { + Error: &http.Response{StatusCode: http.StatusConflict}, + Code: 409, + Want: true, + }, + } + + for i, tt := range tests { + if have, want := IsStatusCode(tt.Error, tt.Code), tt.Want; have != want { + t.Errorf("#%d: have %v, want %v", i, have, want) + } + } +} diff --git a/vendor/github.com/olivere/elastic/etc/elasticsearch.yml b/vendor/github.com/olivere/elastic/etc/elasticsearch.yml new file mode 100644 index 0000000..9923cfe --- /dev/null +++ b/vendor/github.com/olivere/elastic/etc/elasticsearch.yml @@ -0,0 +1,15 @@ +# bootstrap.ignore_system_bootstrap_checks: true + +discovery.zen.minimum_master_nodes: 1 + +network.host: +- _local_ +- _site_ + +network.publish_host: _local_ + + +# Enable scripting as described here: https://www.elastic.co/guide/en/elasticsearch/reference/master/modules-scripting.html +script.inline: true +script.stored: true +script.file: true diff --git a/vendor/github.com/olivere/elastic/etc/ingest-geoip/.gitkeep b/vendor/github.com/olivere/elastic/etc/ingest-geoip/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/vendor/github.com/olivere/elastic/etc/jvm.options b/vendor/github.com/olivere/elastic/etc/jvm.options new file mode 100644 index 0000000..d97fbc9 --- /dev/null +++ b/vendor/github.com/olivere/elastic/etc/jvm.options @@ -0,0 +1,100 @@ +## JVM configuration + +################################################################ +## IMPORTANT: JVM heap size +################################################################ +## +## You should always set the min and max JVM heap +## size to the same value. For example, to set +## the heap to 4 GB, set: +## +## -Xms4g +## -Xmx4g +## +## See https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html +## for more information +## +################################################################ + +# Xms represents the initial size of total heap space +# Xmx represents the maximum size of total heap space + +-Xms2g +-Xmx2g + +################################################################ +## Expert settings +################################################################ +## +## All settings below this section are considered +## expert settings. Don't tamper with them unless +## you understand what you are doing +## +################################################################ + +## GC configuration +-XX:+UseConcMarkSweepGC +-XX:CMSInitiatingOccupancyFraction=75 +-XX:+UseCMSInitiatingOccupancyOnly + +## optimizations + +# disable calls to System#gc +-XX:+DisableExplicitGC + +# pre-touch memory pages used by the JVM during initialization +-XX:+AlwaysPreTouch + +## basic + +# force the server VM +-server + +# set to headless, just in case +-Djava.awt.headless=true + +# ensure UTF-8 encoding by default (e.g. filenames) +-Dfile.encoding=UTF-8 + +# use our provided JNA always versus the system one +-Djna.nosys=true + +# flags to keep Netty from being unsafe +-Dio.netty.noUnsafe=true +-Dio.netty.noKeySetOptimization=true + +# log4j 2 +-Dlog4j.shutdownHookEnabled=false +-Dlog4j2.disable.jmx=true +-Dlog4j.skipJansi=true + +## heap dumps + +# generate a heap dump when an allocation from the Java heap fails +# heap dumps are created in the working directory of the JVM +-XX:+HeapDumpOnOutOfMemoryError + +# specify an alternative path for heap dumps +# ensure the directory exists and has sufficient space +#-XX:HeapDumpPath=${heap.dump.path} + +## GC logging + +#-XX:+PrintGCDetails +#-XX:+PrintGCTimeStamps +#-XX:+PrintGCDateStamps +#-XX:+PrintClassHistogram +#-XX:+PrintTenuringDistribution +#-XX:+PrintGCApplicationStoppedTime + +# log GC status to a file with time stamps +# ensure the directory exists +#-Xloggc:${loggc} + +# Elasticsearch 5.0.0 will throw an exception on unquoted field names in JSON. +# If documents were already indexed with unquoted fields in a previous version +# of Elasticsearch, some operations may throw errors. +# +# WARNING: This option will be removed in Elasticsearch 6.0.0 and is provided +# only for migration purposes. +#-Delasticsearch.json.allow_unquoted_field_names=true diff --git a/vendor/github.com/olivere/elastic/etc/log4j2.properties b/vendor/github.com/olivere/elastic/etc/log4j2.properties new file mode 100644 index 0000000..9a3147f --- /dev/null +++ b/vendor/github.com/olivere/elastic/etc/log4j2.properties @@ -0,0 +1,74 @@ +status = error + +# log action execution errors for easier debugging +logger.action.name = org.elasticsearch.action +logger.action.level = debug + +appender.console.type = Console +appender.console.name = console +appender.console.layout.type = PatternLayout +appender.console.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] %marker%m%n + +appender.rolling.type = RollingFile +appender.rolling.name = rolling +appender.rolling.fileName = ${sys:es.logs}.log +appender.rolling.layout.type = PatternLayout +appender.rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] %marker%.10000m%n +appender.rolling.filePattern = ${sys:es.logs}-%d{yyyy-MM-dd}.log +appender.rolling.policies.type = Policies +appender.rolling.policies.time.type = TimeBasedTriggeringPolicy +appender.rolling.policies.time.interval = 1 +appender.rolling.policies.time.modulate = true + +rootLogger.level = info +rootLogger.appenderRef.console.ref = console +rootLogger.appenderRef.rolling.ref = rolling + +appender.deprecation_rolling.type = RollingFile +appender.deprecation_rolling.name = deprecation_rolling +appender.deprecation_rolling.fileName = ${sys:es.logs}_deprecation.log +appender.deprecation_rolling.layout.type = PatternLayout +appender.deprecation_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] %marker%.10000m%n +appender.deprecation_rolling.filePattern = ${sys:es.logs}_deprecation-%i.log.gz +appender.deprecation_rolling.policies.type = Policies +appender.deprecation_rolling.policies.size.type = SizeBasedTriggeringPolicy +appender.deprecation_rolling.policies.size.size = 1GB +appender.deprecation_rolling.strategy.type = DefaultRolloverStrategy +appender.deprecation_rolling.strategy.max = 4 + +logger.deprecation.name = org.elasticsearch.deprecation +logger.deprecation.level = warn +logger.deprecation.appenderRef.deprecation_rolling.ref = deprecation_rolling +logger.deprecation.additivity = false + +appender.index_search_slowlog_rolling.type = RollingFile +appender.index_search_slowlog_rolling.name = index_search_slowlog_rolling +appender.index_search_slowlog_rolling.fileName = ${sys:es.logs}_index_search_slowlog.log +appender.index_search_slowlog_rolling.layout.type = PatternLayout +appender.index_search_slowlog_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %marker%.10000m%n +appender.index_search_slowlog_rolling.filePattern = ${sys:es.logs}_index_search_slowlog-%d{yyyy-MM-dd}.log +appender.index_search_slowlog_rolling.policies.type = Policies +appender.index_search_slowlog_rolling.policies.time.type = TimeBasedTriggeringPolicy +appender.index_search_slowlog_rolling.policies.time.interval = 1 +appender.index_search_slowlog_rolling.policies.time.modulate = true + +logger.index_search_slowlog_rolling.name = index.search.slowlog +logger.index_search_slowlog_rolling.level = trace +logger.index_search_slowlog_rolling.appenderRef.index_search_slowlog_rolling.ref = index_search_slowlog_rolling +logger.index_search_slowlog_rolling.additivity = false + +appender.index_indexing_slowlog_rolling.type = RollingFile +appender.index_indexing_slowlog_rolling.name = index_indexing_slowlog_rolling +appender.index_indexing_slowlog_rolling.fileName = ${sys:es.logs}_index_indexing_slowlog.log +appender.index_indexing_slowlog_rolling.layout.type = PatternLayout +appender.index_indexing_slowlog_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %marker%.10000m%n +appender.index_indexing_slowlog_rolling.filePattern = ${sys:es.logs}_index_indexing_slowlog-%d{yyyy-MM-dd}.log +appender.index_indexing_slowlog_rolling.policies.type = Policies +appender.index_indexing_slowlog_rolling.policies.time.type = TimeBasedTriggeringPolicy +appender.index_indexing_slowlog_rolling.policies.time.interval = 1 +appender.index_indexing_slowlog_rolling.policies.time.modulate = true + +logger.index_indexing_slowlog.name = index.indexing.slowlog.index +logger.index_indexing_slowlog.level = trace +logger.index_indexing_slowlog.appenderRef.index_indexing_slowlog_rolling.ref = index_indexing_slowlog_rolling +logger.index_indexing_slowlog.additivity = false diff --git a/vendor/github.com/olivere/elastic/etc/scripts/.gitkeep b/vendor/github.com/olivere/elastic/etc/scripts/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/vendor/github.com/olivere/elastic/example_test.go b/vendor/github.com/olivere/elastic/example_test.go new file mode 100644 index 0000000..62dc15d --- /dev/null +++ b/vendor/github.com/olivere/elastic/example_test.go @@ -0,0 +1,530 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic_test + +import ( + "context" + "encoding/json" + "fmt" + "log" + "os" + "reflect" + "time" + + elastic "github.com/olivere/elastic" +) + +type Tweet struct { + User string `json:"user"` + Message string `json:"message"` + Retweets int `json:"retweets"` + Image string `json:"image,omitempty"` + Created time.Time `json:"created,omitempty"` + Tags []string `json:"tags,omitempty"` + Location string `json:"location,omitempty"` + Suggest *elastic.SuggestField `json:"suggest_field,omitempty"` +} + +func Example() { + errorlog := log.New(os.Stdout, "APP ", log.LstdFlags) + + // Obtain a client. You can also provide your own HTTP client here. + client, err := elastic.NewClient(elastic.SetErrorLog(errorlog)) + if err != nil { + // Handle error + panic(err) + } + + // Trace request and response details like this + //client.SetTracer(log.New(os.Stdout, "", 0)) + + // Ping the Elasticsearch server to get e.g. the version number + info, code, err := client.Ping("http://127.0.0.1:9200").Do(context.Background()) + if err != nil { + // Handle error + panic(err) + } + fmt.Printf("Elasticsearch returned with code %d and version %s\n", code, info.Version.Number) + + // Getting the ES version number is quite common, so there's a shortcut + esversion, err := client.ElasticsearchVersion("http://127.0.0.1:9200") + if err != nil { + // Handle error + panic(err) + } + fmt.Printf("Elasticsearch version %s\n", esversion) + + // Use the IndexExists service to check if a specified index exists. + exists, err := client.IndexExists("twitter").Do(context.Background()) + if err != nil { + // Handle error + panic(err) + } + if !exists { + // Create a new index. + mapping := ` +{ + "settings":{ + "number_of_shards":1, + "number_of_replicas":0 + }, + "mappings":{ + "doc":{ + "properties":{ + "user":{ + "type":"keyword" + }, + "message":{ + "type":"text", + "store": true, + "fielddata": true + }, + "retweets":{ + "type":"long" + }, + "tags":{ + "type":"keyword" + }, + "location":{ + "type":"geo_point" + }, + "suggest_field":{ + "type":"completion" + } + } + } + } +} +` + createIndex, err := client.CreateIndex("twitter").Body(mapping).Do(context.Background()) + if err != nil { + // Handle error + panic(err) + } + if !createIndex.Acknowledged { + // Not acknowledged + } + } + + // Index a tweet (using JSON serialization) + tweet1 := Tweet{User: "olivere", Message: "Take Five", Retweets: 0} + put1, err := client.Index(). + Index("twitter"). + Type("doc"). + Id("1"). + BodyJson(tweet1). + Do(context.Background()) + if err != nil { + // Handle error + panic(err) + } + fmt.Printf("Indexed tweet %s to index %s, type %s\n", put1.Id, put1.Index, put1.Type) + + // Index a second tweet (by string) + tweet2 := `{"user" : "olivere", "message" : "It's a Raggy Waltz"}` + put2, err := client.Index(). + Index("twitter"). + Type("doc"). + Id("2"). + BodyString(tweet2). + Do(context.Background()) + if err != nil { + // Handle error + panic(err) + } + fmt.Printf("Indexed tweet %s to index %s, type %s\n", put2.Id, put2.Index, put2.Type) + + // Get tweet with specified ID + get1, err := client.Get(). + Index("twitter"). + Type("doc"). + Id("1"). + Do(context.Background()) + if err != nil { + // Handle error + panic(err) + } + if get1.Found { + fmt.Printf("Got document %s in version %d from index %s, type %s\n", get1.Id, get1.Version, get1.Index, get1.Type) + } + + // Flush to make sure the documents got written. + _, err = client.Flush().Index("twitter").Do(context.Background()) + if err != nil { + panic(err) + } + + // Search with a term query + termQuery := elastic.NewTermQuery("user", "olivere") + searchResult, err := client.Search(). + Index("twitter"). // search in index "twitter" + Query(termQuery). // specify the query + Sort("user", true). // sort by "user" field, ascending + From(0).Size(10). // take documents 0-9 + Pretty(true). // pretty print request and response JSON + Do(context.Background()) // execute + if err != nil { + // Handle error + panic(err) + } + + // searchResult is of type SearchResult and returns hits, suggestions, + // and all kinds of other information from Elasticsearch. + fmt.Printf("Query took %d milliseconds\n", searchResult.TookInMillis) + + // Each is a convenience function that iterates over hits in a search result. + // It makes sure you don't need to check for nil values in the response. + // However, it ignores errors in serialization. If you want full control + // over iterating the hits, see below. + var ttyp Tweet + for _, item := range searchResult.Each(reflect.TypeOf(ttyp)) { + t := item.(Tweet) + fmt.Printf("Tweet by %s: %s\n", t.User, t.Message) + } + // TotalHits is another convenience function that works even when something goes wrong. + fmt.Printf("Found a total of %d tweets\n", searchResult.TotalHits()) + + // Here's how you iterate through results with full control over each step. + if searchResult.Hits.TotalHits > 0 { + fmt.Printf("Found a total of %d tweets\n", searchResult.Hits.TotalHits) + + // Iterate through results + for _, hit := range searchResult.Hits.Hits { + // hit.Index contains the name of the index + + // Deserialize hit.Source into a Tweet (could also be just a map[string]interface{}). + var t Tweet + err := json.Unmarshal(*hit.Source, &t) + if err != nil { + // Deserialization failed + } + + // Work with tweet + fmt.Printf("Tweet by %s: %s\n", t.User, t.Message) + } + } else { + // No hits + fmt.Print("Found no tweets\n") + } + + // Update a tweet by the update API of Elasticsearch. + // We just increment the number of retweets. + script := elastic.NewScript("ctx._source.retweets += params.num").Param("num", 1) + update, err := client.Update().Index("twitter").Type("doc").Id("1"). + Script(script). + Upsert(map[string]interface{}{"retweets": 0}). + Do(context.Background()) + if err != nil { + // Handle error + panic(err) + } + fmt.Printf("New version of tweet %q is now %d", update.Id, update.Version) + + // ... + + // Delete an index. + deleteIndex, err := client.DeleteIndex("twitter").Do(context.Background()) + if err != nil { + // Handle error + panic(err) + } + if !deleteIndex.Acknowledged { + // Not acknowledged + } +} + +func ExampleClient_NewClient_default() { + // Obtain a client to the Elasticsearch instance on http://127.0.0.1:9200. + client, err := elastic.NewClient() + if err != nil { + // Handle error + fmt.Printf("connection failed: %v\n", err) + } else { + fmt.Println("connected") + } + _ = client + // Output: + // connected +} + +func ExampleClient_NewClient_cluster() { + // Obtain a client for an Elasticsearch cluster of two nodes, + // running on 10.0.1.1 and 10.0.1.2. + client, err := elastic.NewClient(elastic.SetURL("http://10.0.1.1:9200", "http://10.0.1.2:9200")) + if err != nil { + // Handle error + panic(err) + } + _ = client +} + +func ExampleClient_NewClient_manyOptions() { + // Obtain a client for an Elasticsearch cluster of two nodes, + // running on 10.0.1.1 and 10.0.1.2. Do not run the sniffer. + // Set the healthcheck interval to 10s. When requests fail, + // retry 5 times. Print error messages to os.Stderr and informational + // messages to os.Stdout. + client, err := elastic.NewClient( + elastic.SetURL("http://10.0.1.1:9200", "http://10.0.1.2:9200"), + elastic.SetSniff(false), + elastic.SetHealthcheckInterval(10*time.Second), + elastic.SetMaxRetries(5), + elastic.SetErrorLog(log.New(os.Stderr, "ELASTIC ", log.LstdFlags)), + elastic.SetInfoLog(log.New(os.Stdout, "", log.LstdFlags))) + if err != nil { + // Handle error + panic(err) + } + _ = client +} + +func ExampleIndexExistsService() { + // Get a client to the local Elasticsearch instance. + client, err := elastic.NewClient() + if err != nil { + // Handle error + panic(err) + } + // Use the IndexExists service to check if the index "twitter" exists. + exists, err := client.IndexExists("twitter").Do(context.Background()) + if err != nil { + // Handle error + panic(err) + } + if exists { + // ... + } +} + +func ExampleCreateIndexService() { + // Get a client to the local Elasticsearch instance. + client, err := elastic.NewClient() + if err != nil { + // Handle error + panic(err) + } + // Create a new index. + createIndex, err := client.CreateIndex("twitter").Do(context.Background()) + if err != nil { + // Handle error + panic(err) + } + if !createIndex.Acknowledged { + // Not acknowledged + } +} + +func ExampleDeleteIndexService() { + // Get a client to the local Elasticsearch instance. + client, err := elastic.NewClient() + if err != nil { + // Handle error + panic(err) + } + // Delete an index. + deleteIndex, err := client.DeleteIndex("twitter").Do(context.Background()) + if err != nil { + // Handle error + panic(err) + } + if !deleteIndex.Acknowledged { + // Not acknowledged + } +} + +func ExampleSearchService() { + // Get a client to the local Elasticsearch instance. + client, err := elastic.NewClient() + if err != nil { + // Handle error + panic(err) + } + + // Search with a term query + termQuery := elastic.NewTermQuery("user", "olivere") + searchResult, err := client.Search(). + Index("twitter"). // search in index "twitter" + Query(termQuery). // specify the query + Sort("user", true). // sort by "user" field, ascending + From(0).Size(10). // take documents 0-9 + Pretty(true). // pretty print request and response JSON + Do(context.Background()) // execute + if err != nil { + // Handle error + panic(err) + } + + // searchResult is of type SearchResult and returns hits, suggestions, + // and all kinds of other information from Elasticsearch. + fmt.Printf("Query took %d milliseconds\n", searchResult.TookInMillis) + + // Number of hits + if searchResult.Hits.TotalHits > 0 { + fmt.Printf("Found a total of %d tweets\n", searchResult.Hits.TotalHits) + + // Iterate through results + for _, hit := range searchResult.Hits.Hits { + // hit.Index contains the name of the index + + // Deserialize hit.Source into a Tweet (could also be just a map[string]interface{}). + var t Tweet + err := json.Unmarshal(*hit.Source, &t) + if err != nil { + // Deserialization failed + } + + // Work with tweet + fmt.Printf("Tweet by %s: %s\n", t.User, t.Message) + } + } else { + // No hits + fmt.Print("Found no tweets\n") + } +} + +func ExampleAggregations() { + // Get a client to the local Elasticsearch instance. + client, err := elastic.NewClient() + if err != nil { + // Handle error + panic(err) + } + + // Create an aggregation for users and a sub-aggregation for a date histogram of tweets (per year). + timeline := elastic.NewTermsAggregation().Field("user").Size(10).OrderByCountDesc() + histogram := elastic.NewDateHistogramAggregation().Field("created").Interval("year") + timeline = timeline.SubAggregation("history", histogram) + + // Search with a term query + searchResult, err := client.Search(). + Index("twitter"). // search in index "twitter" + Query(elastic.NewMatchAllQuery()). // return all results, but ... + SearchType("count"). // ... do not return hits, just the count + Aggregation("timeline", timeline). // add our aggregation to the query + Pretty(true). // pretty print request and response JSON + Do(context.Background()) // execute + if err != nil { + // Handle error + panic(err) + } + + // Access "timeline" aggregate in search result. + agg, found := searchResult.Aggregations.Terms("timeline") + if !found { + log.Fatalf("we should have a terms aggregation called %q", "timeline") + } + for _, userBucket := range agg.Buckets { + // Every bucket should have the user field as key. + user := userBucket.Key + + // The sub-aggregation history should have the number of tweets per year. + histogram, found := userBucket.DateHistogram("history") + if found { + for _, year := range histogram.Buckets { + fmt.Printf("user %q has %d tweets in %q\n", user, year.DocCount, year.KeyAsString) + } + } + } +} + +func ExampleSearchResult() { + client, err := elastic.NewClient() + if err != nil { + panic(err) + } + + // Do a search + searchResult, err := client.Search().Index("twitter").Query(elastic.NewMatchAllQuery()).Do(context.Background()) + if err != nil { + panic(err) + } + + // searchResult is of type SearchResult and returns hits, suggestions, + // and all kinds of other information from Elasticsearch. + fmt.Printf("Query took %d milliseconds\n", searchResult.TookInMillis) + + // Each is a utility function that iterates over hits in a search result. + // It makes sure you don't need to check for nil values in the response. + // However, it ignores errors in serialization. If you want full control + // over iterating the hits, see below. + var ttyp Tweet + for _, item := range searchResult.Each(reflect.TypeOf(ttyp)) { + t := item.(Tweet) + fmt.Printf("Tweet by %s: %s\n", t.User, t.Message) + } + fmt.Printf("Found a total of %d tweets\n", searchResult.TotalHits()) + + // Here's how you iterate hits with full control. + if searchResult.Hits.TotalHits > 0 { + fmt.Printf("Found a total of %d tweets\n", searchResult.Hits.TotalHits) + + // Iterate through results + for _, hit := range searchResult.Hits.Hits { + // hit.Index contains the name of the index + + // Deserialize hit.Source into a Tweet (could also be just a map[string]interface{}). + var t Tweet + err := json.Unmarshal(*hit.Source, &t) + if err != nil { + // Deserialization failed + } + + // Work with tweet + fmt.Printf("Tweet by %s: %s\n", t.User, t.Message) + } + } else { + // No hits + fmt.Print("Found no tweets\n") + } +} + +func ExampleClusterHealthService() { + client, err := elastic.NewClient() + if err != nil { + panic(err) + } + + // Get cluster health + res, err := client.ClusterHealth().Index("twitter").Do(context.Background()) + if err != nil { + panic(err) + } + if res == nil { + panic(err) + } + fmt.Printf("Cluster status is %q\n", res.Status) +} + +func ExampleClusterHealthService_WaitForGreen() { + client, err := elastic.NewClient() + if err != nil { + panic(err) + } + + // Wait for status green + res, err := client.ClusterHealth().WaitForStatus("green").Timeout("15s").Do(context.Background()) + if err != nil { + panic(err) + } + if res.TimedOut { + fmt.Printf("time out waiting for cluster status %q\n", "green") + } else { + fmt.Printf("cluster status is %q\n", res.Status) + } +} + +func ExampleClusterStateService() { + client, err := elastic.NewClient() + if err != nil { + panic(err) + } + + // Get cluster state + res, err := client.ClusterState().Metric("version").Do(context.Background()) + if err != nil { + panic(err) + } + fmt.Printf("Cluster %q has version %d", res.ClusterName, res.Version) +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/exists.go b/vendor/github.com/olivere/elastic/exists.go similarity index 78% rename from vendor/gopkg.in/olivere/elastic.v2/exists.go rename to vendor/github.com/olivere/elastic/exists.go index 534ad5d..9031bdd 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/exists.go +++ b/vendor/github.com/olivere/elastic/exists.go @@ -1,20 +1,21 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. package elastic import ( + "context" "fmt" "net/http" "net/url" - "gopkg.in/olivere/elastic.v2/uritemplates" + "github.com/olivere/elastic/uritemplates" ) -// ExistsService checks if a document exists. +// ExistsService checks for the existence of a document using HEAD. // -// See http://www.elastic.co/guide/en/elasticsearch/reference/current/docs-get.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-get.html // for details. type ExistsService struct { client *Client @@ -22,11 +23,11 @@ type ExistsService struct { id string index string typ string - parent string preference string realtime *bool - refresh *bool + refresh string routing string + parent string } // NewExistsService creates a new ExistsService. @@ -48,21 +49,14 @@ func (s *ExistsService) Index(index string) *ExistsService { return s } -// Type is the type of the document (use `_all` to fetch the first -// document matching the ID across all types). +// Type is the type of the document (use `_all` to fetch the first document +// matching the ID across all types). func (s *ExistsService) Type(typ string) *ExistsService { s.typ = typ return s } -// Parent is the ID of the parent document. -func (s *ExistsService) Parent(parent string) *ExistsService { - s.parent = parent - return s -} - -// Preference specifies the node or shard the operation should be -// performed on (default: random). +// Preference specifies the node or shard the operation should be performed on (default: random). func (s *ExistsService) Preference(preference string) *ExistsService { s.preference = preference return s @@ -75,17 +69,26 @@ func (s *ExistsService) Realtime(realtime bool) *ExistsService { } // Refresh the shard containing the document before performing the operation. -func (s *ExistsService) Refresh(refresh bool) *ExistsService { - s.refresh = &refresh +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-refresh.html +// for details. +func (s *ExistsService) Refresh(refresh string) *ExistsService { + s.refresh = refresh return s } -// Routing is the specific routing value. +// Routing is a specific routing value. func (s *ExistsService) Routing(routing string) *ExistsService { s.routing = routing return s } +// Parent is the ID of the parent document. +func (s *ExistsService) Parent(parent string) *ExistsService { + s.parent = parent + return s +} + // Pretty indicates that the JSON response be indented and human readable. func (s *ExistsService) Pretty(pretty bool) *ExistsService { s.pretty = pretty @@ -107,23 +110,23 @@ func (s *ExistsService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "1") - } - if s.parent != "" { - params.Set("parent", s.parent) - } - if s.preference != "" { - params.Set("preference", s.preference) + params.Set("pretty", "true") } if s.realtime != nil { params.Set("realtime", fmt.Sprintf("%v", *s.realtime)) } - if s.refresh != nil { - params.Set("refresh", fmt.Sprintf("%v", *s.refresh)) + if s.refresh != "" { + params.Set("refresh", s.refresh) } if s.routing != "" { params.Set("routing", s.routing) } + if s.parent != "" { + params.Set("parent", s.parent) + } + if s.preference != "" { + params.Set("preference", s.preference) + } return path, params, nil } @@ -146,7 +149,7 @@ func (s *ExistsService) Validate() error { } // Do executes the operation. -func (s *ExistsService) Do() (bool, error) { +func (s *ExistsService) Do(ctx context.Context) (bool, error) { // Check pre-conditions if err := s.Validate(); err != nil { return false, err @@ -159,12 +162,17 @@ func (s *ExistsService) Do() (bool, error) { } // Get HTTP response - res, err := s.client.PerformRequest("HEAD", path, params, nil) + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "HEAD", + Path: path, + Params: params, + IgnoreErrors: []int{404}, + }) if err != nil { return false, err } - // Evaluate operation response + // Return operation response switch res.StatusCode { case http.StatusOK: return true, nil diff --git a/vendor/github.com/olivere/elastic/exists_test.go b/vendor/github.com/olivere/elastic/exists_test.go new file mode 100644 index 0000000..9b83422 --- /dev/null +++ b/vendor/github.com/olivere/elastic/exists_test.go @@ -0,0 +1,53 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "testing" +) + +func TestExists(t *testing.T) { + client := setupTestClientAndCreateIndexAndAddDocs(t) //, SetTraceLog(log.New(os.Stdout, "", 0))) + + exists, err := client.Exists().Index(testIndexName).Type("doc").Id("1").Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if !exists { + t.Fatal("expected document to exist") + } +} + +func TestExistsValidate(t *testing.T) { + client := setupTestClient(t) + + // No index -> fail with error + res, err := NewExistsService(client).Type("doc").Id("1").Do(context.TODO()) + if err == nil { + t.Fatalf("expected Delete to fail without index name") + } + if res != false { + t.Fatalf("expected result to be false; got: %v", res) + } + + // No type -> fail with error + res, err = NewExistsService(client).Index(testIndexName).Id("1").Do(context.TODO()) + if err == nil { + t.Fatalf("expected Delete to fail without index name") + } + if res != false { + t.Fatalf("expected result to be false; got: %v", res) + } + + // No id -> fail with error + res, err = NewExistsService(client).Index(testIndexName).Type("doc").Do(context.TODO()) + if err == nil { + t.Fatalf("expected Delete to fail without index name") + } + if res != false { + t.Fatalf("expected result to be false; got: %v", res) + } +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/explain.go b/vendor/github.com/olivere/elastic/explain.go similarity index 92% rename from vendor/gopkg.in/olivere/elastic.v2/explain.go rename to vendor/github.com/olivere/elastic/explain.go index fd02d16..52b8d37 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/explain.go +++ b/vendor/github.com/olivere/elastic/explain.go @@ -1,29 +1,21 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. package elastic import ( + "context" "fmt" - "log" "net/url" "strings" - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -var ( - _ = fmt.Print - _ = log.Print - _ = strings.Index - _ = uritemplates.Expand - _ = url.Parse + "github.com/olivere/elastic/uritemplates" ) // ExplainService computes a score explanation for a query and // a specific document. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-explain.html. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-explain.html. type ExplainService struct { client *Client pretty bool @@ -86,7 +78,6 @@ func (s *ExplainService) Source(source string) *ExplainService { // XSourceExclude is a list of fields to exclude from the returned _source field. func (s *ExplainService) XSourceExclude(xSourceExclude ...string) *ExplainService { - s.xSourceExclude = make([]string, 0) s.xSourceExclude = append(s.xSourceExclude, xSourceExclude...) return s } @@ -131,7 +122,6 @@ func (s *ExplainService) Df(df string) *ExplainService { // Fields is a list of fields to return in the response. func (s *ExplainService) Fields(fields ...string) *ExplainService { - s.fields = make([]string, 0) s.fields = append(s.fields, fields...) return s } @@ -144,7 +134,6 @@ func (s *ExplainService) LowercaseExpandedTerms(lowercaseExpandedTerms bool) *Ex // XSourceInclude is a list of fields to extract and return from the _source field. func (s *ExplainService) XSourceInclude(xSourceInclude ...string) *ExplainService { - s.xSourceInclude = make([]string, 0) s.xSourceInclude = append(s.xSourceInclude, xSourceInclude...) return s } @@ -169,7 +158,6 @@ func (s *ExplainService) Preference(preference string) *ExplainService { // XSource is true or false to return the _source field or not, or a list of fields to return. func (s *ExplainService) XSource(xSource ...string) *ExplainService { - s.xSource = make([]string, 0) s.xSource = append(s.xSource, xSource...) return s } @@ -182,8 +170,13 @@ func (s *ExplainService) Pretty(pretty bool) *ExplainService { // Query sets a query definition using the Query DSL. func (s *ExplainService) Query(query Query) *ExplainService { + src, err := query.Source() + if err != nil { + // Do nothing in case of an error + return s + } body := make(map[string]interface{}) - body["query"] = query.Source() + body["query"] = src s.bodyJson = body return s } @@ -215,7 +208,7 @@ func (s *ExplainService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "1") + params.Set("pretty", "true") } if len(s.xSource) > 0 { params.Set("_source", strings.Join(s.xSource, ",")) @@ -284,7 +277,7 @@ func (s *ExplainService) Validate() error { } // Do executes the operation. -func (s *ExplainService) Do() (*ExplainResponse, error) { +func (s *ExplainService) Do(ctx context.Context) (*ExplainResponse, error) { // Check pre-conditions if err := s.Validate(); err != nil { return nil, err @@ -305,7 +298,12 @@ func (s *ExplainService) Do() (*ExplainResponse, error) { } // Get HTTP response - res, err := s.client.PerformRequest("GET", path, params, body) + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + Body: body, + }) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v2/explain_test.go b/vendor/github.com/olivere/elastic/explain_test.go similarity index 76% rename from vendor/gopkg.in/olivere/elastic.v2/explain_test.go rename to vendor/github.com/olivere/elastic/explain_test.go index e799d6c..22cb966 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/explain_test.go +++ b/vendor/github.com/olivere/elastic/explain_test.go @@ -1,10 +1,13 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. package elastic -import "testing" +import ( + "context" + "testing" +) func TestExplain(t *testing.T) { client := setupTestClientAndCreateIndex(t) @@ -14,11 +17,11 @@ func TestExplain(t *testing.T) { // Add a document indexResult, err := client.Index(). Index(testIndexName). - Type("tweet"). + Type("doc"). Id("1"). BodyJson(&tweet1). - Refresh(true). - Do() + Refresh("true"). + Do(context.TODO()) if err != nil { t.Fatal(err) } @@ -28,7 +31,7 @@ func TestExplain(t *testing.T) { // Explain query := NewTermQuery("user", "olivere") - expl, err := client.Explain(testIndexName, "tweet", "1").Query(query).Do() + expl, err := client.Explain(testIndexName, "doc", "1").Query(query).Do(context.TODO()) if err != nil { t.Fatal(err) } diff --git a/vendor/github.com/olivere/elastic/fetch_source_context.go b/vendor/github.com/olivere/elastic/fetch_source_context.go new file mode 100644 index 0000000..91488ba --- /dev/null +++ b/vendor/github.com/olivere/elastic/fetch_source_context.go @@ -0,0 +1,90 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "net/url" + "strings" +) + +// FetchSourceContext enables source filtering, i.e. it allows control +// over how the _source field is returned with every hit. It is used +// with various endpoints, e.g. when searching for documents, retrieving +// individual documents, or even updating documents. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-source-filtering.html +// for details. +type FetchSourceContext struct { + fetchSource bool + includes []string + excludes []string +} + +// NewFetchSourceContext returns a new FetchSourceContext. +func NewFetchSourceContext(fetchSource bool) *FetchSourceContext { + return &FetchSourceContext{ + fetchSource: fetchSource, + includes: make([]string, 0), + excludes: make([]string, 0), + } +} + +// FetchSource indicates whether to return the _source. +func (fsc *FetchSourceContext) FetchSource() bool { + return fsc.fetchSource +} + +// SetFetchSource specifies whether to return the _source. +func (fsc *FetchSourceContext) SetFetchSource(fetchSource bool) { + fsc.fetchSource = fetchSource +} + +// Include indicates to return specific parts of the _source. +// Wildcards are allowed here. +func (fsc *FetchSourceContext) Include(includes ...string) *FetchSourceContext { + fsc.includes = append(fsc.includes, includes...) + return fsc +} + +// Exclude indicates to exclude specific parts of the _source. +// Wildcards are allowed here. +func (fsc *FetchSourceContext) Exclude(excludes ...string) *FetchSourceContext { + fsc.excludes = append(fsc.excludes, excludes...) + return fsc +} + +// Source returns the JSON-serializable data to be used in a body. +func (fsc *FetchSourceContext) Source() (interface{}, error) { + if !fsc.fetchSource { + return false, nil + } + if len(fsc.includes) == 0 && len(fsc.excludes) == 0 { + return true, nil + } + src := make(map[string]interface{}) + if len(fsc.includes) > 0 { + src["includes"] = fsc.includes + } + if len(fsc.excludes) > 0 { + src["excludes"] = fsc.excludes + } + return src, nil +} + +// Query returns the parameters in a form suitable for a URL query string. +func (fsc *FetchSourceContext) Query() url.Values { + params := url.Values{} + if fsc.fetchSource { + if len(fsc.includes) > 0 { + params.Add("_source_include", strings.Join(fsc.includes, ",")) + } + if len(fsc.excludes) > 0 { + params.Add("_source_exclude", strings.Join(fsc.excludes, ",")) + } + } else { + params.Add("_source", "false") + } + return params +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/fetch_source_context_test.go b/vendor/github.com/olivere/elastic/fetch_source_context_test.go similarity index 81% rename from vendor/gopkg.in/olivere/elastic.v2/fetch_source_context_test.go rename to vendor/github.com/olivere/elastic/fetch_source_context_test.go index ae15a10..b985490 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/fetch_source_context_test.go +++ b/vendor/github.com/olivere/elastic/fetch_source_context_test.go @@ -1,4 +1,4 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. @@ -11,7 +11,11 @@ import ( func TestFetchSourceContextNoFetchSource(t *testing.T) { builder := NewFetchSourceContext(false) - data, err := json.Marshal(builder.Source()) + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } @@ -24,7 +28,11 @@ func TestFetchSourceContextNoFetchSource(t *testing.T) { func TestFetchSourceContextNoFetchSourceIgnoreIncludesAndExcludes(t *testing.T) { builder := NewFetchSourceContext(false).Include("a", "b").Exclude("c") - data, err := json.Marshal(builder.Source()) + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } @@ -37,12 +45,16 @@ func TestFetchSourceContextNoFetchSourceIgnoreIncludesAndExcludes(t *testing.T) func TestFetchSourceContextFetchSource(t *testing.T) { builder := NewFetchSourceContext(true) - data, err := json.Marshal(builder.Source()) + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } got := string(data) - expected := `{"excludes":[],"includes":[]}` + expected := `true` if got != expected { t.Errorf("expected\n%s\n,got:\n%s", expected, got) } @@ -50,12 +62,16 @@ func TestFetchSourceContextFetchSource(t *testing.T) { func TestFetchSourceContextFetchSourceWithIncludesOnly(t *testing.T) { builder := NewFetchSourceContext(true).Include("a", "b") - data, err := json.Marshal(builder.Source()) + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } got := string(data) - expected := `{"excludes":[],"includes":["a","b"]}` + expected := `{"includes":["a","b"]}` if got != expected { t.Errorf("expected\n%s\n,got:\n%s", expected, got) } @@ -63,7 +79,11 @@ func TestFetchSourceContextFetchSourceWithIncludesOnly(t *testing.T) { func TestFetchSourceContextFetchSourceWithIncludesAndExcludes(t *testing.T) { builder := NewFetchSourceContext(true).Include("a", "b").Exclude("c") - data, err := json.Marshal(builder.Source()) + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } diff --git a/vendor/github.com/olivere/elastic/field_caps.go b/vendor/github.com/olivere/elastic/field_caps.go new file mode 100644 index 0000000..a4b6049 --- /dev/null +++ b/vendor/github.com/olivere/elastic/field_caps.go @@ -0,0 +1,202 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/uritemplates" +) + +// FieldCapsService allows retrieving the capabilities of fields among multiple indices. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-field-caps.html +// for details +type FieldCapsService struct { + client *Client + pretty bool + index []string + allowNoIndices *bool + expandWildcards string + fields []string + ignoreUnavailable *bool + bodyJson interface{} + bodyString string +} + +// NewFieldCapsService creates a new FieldCapsService +func NewFieldCapsService(client *Client) *FieldCapsService { + return &FieldCapsService{ + client: client, + } +} + +// Index is a list of index names; use `_all` or empty string to perform +// the operation on all indices. +func (s *FieldCapsService) Index(index ...string) *FieldCapsService { + s.index = append(s.index, index...) + return s +} + +// AllowNoIndices indicates whether to ignore if a wildcard indices expression +// resolves into no concrete indices. +// (This includes `_all` string or when no indices have been specified). +func (s *FieldCapsService) AllowNoIndices(allowNoIndices bool) *FieldCapsService { + s.allowNoIndices = &allowNoIndices + return s +} + +// ExpandWildcards indicates whether to expand wildcard expression to +// concrete indices that are open, closed or both. +func (s *FieldCapsService) ExpandWildcards(expandWildcards string) *FieldCapsService { + s.expandWildcards = expandWildcards + return s +} + +// Fields is a list of fields for to get field capabilities. +func (s *FieldCapsService) Fields(fields ...string) *FieldCapsService { + s.fields = append(s.fields, fields...) + return s +} + +// IgnoreUnavailable is documented as: Whether specified concrete indices should be ignored when unavailable (missing or closed). +func (s *FieldCapsService) IgnoreUnavailable(ignoreUnavailable bool) *FieldCapsService { + s.ignoreUnavailable = &ignoreUnavailable + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *FieldCapsService) Pretty(pretty bool) *FieldCapsService { + s.pretty = pretty + return s +} + +// BodyJson is documented as: Field json objects containing the name and optionally a range to filter out indices result, that have results outside the defined bounds. +func (s *FieldCapsService) BodyJson(body interface{}) *FieldCapsService { + s.bodyJson = body + return s +} + +// BodyString is documented as: Field json objects containing the name and optionally a range to filter out indices result, that have results outside the defined bounds. +func (s *FieldCapsService) BodyString(body string) *FieldCapsService { + s.bodyString = body + return s +} + +// buildURL builds the URL for the operation. +func (s *FieldCapsService) buildURL() (string, url.Values, error) { + // Build URL + var err error + var path string + if len(s.index) > 0 { + path, err = uritemplates.Expand("/{index}/_field_caps", map[string]string{ + "index": strings.Join(s.index, ","), + }) + } else { + path = "/_field_caps" + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.allowNoIndices != nil { + params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) + } + if s.expandWildcards != "" { + params.Set("expand_wildcards", s.expandWildcards) + } + if len(s.fields) > 0 { + params.Set("fields", strings.Join(s.fields, ",")) + } + if s.ignoreUnavailable != nil { + params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *FieldCapsService) Validate() error { + return nil +} + +// Do executes the operation. +func (s *FieldCapsService) Do(ctx context.Context) (*FieldCapsResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Setup HTTP request body + var body interface{} + if s.bodyJson != nil { + body = s.bodyJson + } else { + body = s.bodyString + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + Body: body, + IgnoreErrors: []int{http.StatusNotFound}, + }) + if err != nil { + return nil, err + } + + // TODO(oe): Is 404 really a valid response here? + if res.StatusCode == http.StatusNotFound { + return &FieldCapsResponse{}, nil + } + + // Return operation response + ret := new(FieldCapsResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// -- Request -- + +// FieldCapsRequest can be used to set up the body to be used in the +// Field Capabilities API. +type FieldCapsRequest struct { + Fields []string `json:"fields"` +} + +// -- Response -- + +// FieldCapsResponse contains field capabilities. +type FieldCapsResponse struct { + Fields map[string]FieldCaps `json:"fields,omitempty"` +} + +// FieldCaps contains capabilities of an individual field. +type FieldCaps struct { + Type string `json:"type"` + Searchable bool `json:"searchable"` + Aggregatable bool `json:"aggregatable"` + Indices []string `json:"indices,omitempty"` + NonSearchableIndices []string `json:"non_searchable_indices,omitempty"` + NonAggregatableIndices []string `json:"non_aggregatable_indices,omitempty"` +} diff --git a/vendor/github.com/olivere/elastic/field_caps_test.go b/vendor/github.com/olivere/elastic/field_caps_test.go new file mode 100644 index 0000000..e299fd5 --- /dev/null +++ b/vendor/github.com/olivere/elastic/field_caps_test.go @@ -0,0 +1,146 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "net/url" + "reflect" + "sort" + "testing" +) + +func TestFieldCapsURLs(t *testing.T) { + tests := []struct { + Service *FieldCapsService + ExpectedPath string + ExpectedParams url.Values + }{ + { + Service: &FieldCapsService{}, + ExpectedPath: "/_field_caps", + ExpectedParams: url.Values{}, + }, + { + Service: &FieldCapsService{ + index: []string{"index1", "index2"}, + }, + ExpectedPath: "/index1%2Cindex2/_field_caps", + ExpectedParams: url.Values{}, + }, + { + Service: &FieldCapsService{ + index: []string{"index_*"}, + pretty: true, + }, + ExpectedPath: "/index_%2A/_field_caps", + ExpectedParams: url.Values{"pretty": []string{"true"}}, + }, + } + + for _, test := range tests { + gotPath, gotParams, err := test.Service.buildURL() + if err != nil { + t.Fatalf("expected no error; got: %v", err) + } + if gotPath != test.ExpectedPath { + t.Errorf("expected URL path = %q; got: %q", test.ExpectedPath, gotPath) + } + if gotParams.Encode() != test.ExpectedParams.Encode() { + t.Errorf("expected URL params = %v; got: %v", test.ExpectedParams, gotParams) + } + } +} + +func TestFieldCapsRequestSerialize(t *testing.T) { + req := &FieldCapsRequest{ + Fields: []string{"creation_date", "answer_count"}, + } + data, err := json.Marshal(req) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"fields":["creation_date","answer_count"]}` + if got != expected { + t.Fatalf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestFieldCapsRequestDeserialize(t *testing.T) { + body := `{ + "fields" : ["creation_date", "answer_count"] + }` + + var request FieldCapsRequest + if err := json.Unmarshal([]byte(body), &request); err != nil { + t.Fatalf("unexpected error during unmarshalling: %v", err) + } + + sort.Sort(lexicographically{request.Fields}) + + expectedFields := []string{"answer_count", "creation_date"} + if !reflect.DeepEqual(request.Fields, expectedFields) { + t.Fatalf("expected fields to be %v, got %v", expectedFields, request.Fields) + } +} + +func TestFieldCapsResponseUnmarshalling(t *testing.T) { + clusterStats := `{ + "_shards": { + "total": 1, + "successful": 1, + "failed": 0 + }, + "fields": { + "creation_date": { + "type": "date", + "searchable": true, + "aggregatable": true, + "indices": ["index1", "index2"], + "non_searchable_indices": null, + "non_aggregatable_indices": null + }, + "answer": { + "type": "keyword", + "searchable": true, + "aggregatable": true + } + } + }` + + var resp FieldCapsResponse + if err := json.Unmarshal([]byte(clusterStats), &resp); err != nil { + t.Errorf("unexpected error during unmarshalling: %v", err) + } + + caps, ok := resp.Fields["creation_date"] + if !ok { + t.Errorf("expected creation_date to be in the fields map, didn't find it") + } + if want, have := true, caps.Searchable; want != have { + t.Errorf("expected creation_date searchable to be %v, got %v", want, have) + } + if want, have := true, caps.Aggregatable; want != have { + t.Errorf("expected creation_date aggregatable to be %v, got %v", want, have) + } + if want, have := []string{"index1", "index2"}, caps.Indices; !reflect.DeepEqual(want, have) { + t.Errorf("expected creation_date indices to be %v, got %v", want, have) + } +} + +func TestFieldCaps123(t *testing.T) { + client := setupTestClientAndCreateIndexAndAddDocs(t) + // client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", 0))) + + res, err := client.FieldCaps("_all").Fields("user", "message", "retweets", "created").Pretty(true).Do(context.TODO()) + if err != nil { + t.Fatalf("expected no error; got: %v", err) + } + if res == nil { + t.Fatalf("expected response; got: %v", res) + } +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/geo_point.go b/vendor/github.com/olivere/elastic/geo_point.go similarity index 91% rename from vendor/gopkg.in/olivere/elastic.v2/geo_point.go rename to vendor/github.com/olivere/elastic/geo_point.go index 4f55955..fb24367 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/geo_point.go +++ b/vendor/github.com/olivere/elastic/geo_point.go @@ -1,4 +1,4 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. @@ -12,7 +12,8 @@ import ( // GeoPoint is a geographic position described via latitude and longitude. type GeoPoint struct { - Lat, Lon float64 + Lat float64 `json:"lat"` + Lon float64 `json:"lon"` } // Source returns the object to be serialized in Elasticsearch DSL. diff --git a/vendor/gopkg.in/olivere/elastic.v2/geo_point_test.go b/vendor/github.com/olivere/elastic/geo_point_test.go similarity index 88% rename from vendor/gopkg.in/olivere/elastic.v2/geo_point_test.go rename to vendor/github.com/olivere/elastic/geo_point_test.go index ebc28c2..1d085cd 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/geo_point_test.go +++ b/vendor/github.com/olivere/elastic/geo_point_test.go @@ -1,4 +1,4 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. diff --git a/vendor/github.com/olivere/elastic/get.go b/vendor/github.com/olivere/elastic/get.go new file mode 100644 index 0000000..8c26455 --- /dev/null +++ b/vendor/github.com/olivere/elastic/get.go @@ -0,0 +1,263 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/url" + "strings" + + "github.com/olivere/elastic/uritemplates" +) + +// GetService allows to get a typed JSON document from the index based +// on its id. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-get.html +// for details. +type GetService struct { + client *Client + pretty bool + index string + typ string + id string + routing string + preference string + storedFields []string + refresh string + realtime *bool + fsc *FetchSourceContext + version interface{} + versionType string + parent string + ignoreErrorsOnGeneratedFields *bool +} + +// NewGetService creates a new GetService. +func NewGetService(client *Client) *GetService { + return &GetService{ + client: client, + typ: "_all", + } +} + +// Index is the name of the index. +func (s *GetService) Index(index string) *GetService { + s.index = index + return s +} + +// Type is the type of the document (use `_all` to fetch the first document +// matching the ID across all types). +func (s *GetService) Type(typ string) *GetService { + s.typ = typ + return s +} + +// Id is the document ID. +func (s *GetService) Id(id string) *GetService { + s.id = id + return s +} + +// Parent is the ID of the parent document. +func (s *GetService) Parent(parent string) *GetService { + s.parent = parent + return s +} + +// Routing is the specific routing value. +func (s *GetService) Routing(routing string) *GetService { + s.routing = routing + return s +} + +// Preference specifies the node or shard the operation should be performed on (default: random). +func (s *GetService) Preference(preference string) *GetService { + s.preference = preference + return s +} + +// StoredFields is a list of fields to return in the response. +func (s *GetService) StoredFields(storedFields ...string) *GetService { + s.storedFields = append(s.storedFields, storedFields...) + return s +} + +func (s *GetService) FetchSource(fetchSource bool) *GetService { + if s.fsc == nil { + s.fsc = NewFetchSourceContext(fetchSource) + } else { + s.fsc.SetFetchSource(fetchSource) + } + return s +} + +func (s *GetService) FetchSourceContext(fetchSourceContext *FetchSourceContext) *GetService { + s.fsc = fetchSourceContext + return s +} + +// Refresh the shard containing the document before performing the operation. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-refresh.html +// for details. +func (s *GetService) Refresh(refresh string) *GetService { + s.refresh = refresh + return s +} + +// Realtime specifies whether to perform the operation in realtime or search mode. +func (s *GetService) Realtime(realtime bool) *GetService { + s.realtime = &realtime + return s +} + +// VersionType is the specific version type. +func (s *GetService) VersionType(versionType string) *GetService { + s.versionType = versionType + return s +} + +// Version is an explicit version number for concurrency control. +func (s *GetService) Version(version interface{}) *GetService { + s.version = version + return s +} + +// IgnoreErrorsOnGeneratedFields indicates whether to ignore fields that +// are generated if the transaction log is accessed. +func (s *GetService) IgnoreErrorsOnGeneratedFields(ignore bool) *GetService { + s.ignoreErrorsOnGeneratedFields = &ignore + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *GetService) Pretty(pretty bool) *GetService { + s.pretty = pretty + return s +} + +// Validate checks if the operation is valid. +func (s *GetService) Validate() error { + var invalid []string + if s.id == "" { + invalid = append(invalid, "Id") + } + if s.index == "" { + invalid = append(invalid, "Index") + } + if s.typ == "" { + invalid = append(invalid, "Type") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// buildURL builds the URL for the operation. +func (s *GetService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/{index}/{type}/{id}", map[string]string{ + "id": s.id, + "index": s.index, + "type": s.typ, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.routing != "" { + params.Set("routing", s.routing) + } + if s.parent != "" { + params.Set("parent", s.parent) + } + if s.preference != "" { + params.Set("preference", s.preference) + } + if len(s.storedFields) > 0 { + params.Set("stored_fields", strings.Join(s.storedFields, ",")) + } + if s.refresh != "" { + params.Set("refresh", s.refresh) + } + if s.version != nil { + params.Set("version", fmt.Sprintf("%v", s.version)) + } + if s.versionType != "" { + params.Set("version_type", s.versionType) + } + if s.realtime != nil { + params.Set("realtime", fmt.Sprintf("%v", *s.realtime)) + } + if s.ignoreErrorsOnGeneratedFields != nil { + params.Add("ignore_errors_on_generated_fields", fmt.Sprintf("%v", *s.ignoreErrorsOnGeneratedFields)) + } + if s.fsc != nil { + for k, values := range s.fsc.Query() { + params.Add(k, strings.Join(values, ",")) + } + } + return path, params, nil +} + +// Do executes the operation. +func (s *GetService) Do(ctx context.Context) (*GetResult, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(GetResult) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// -- Result of a get request. + +// GetResult is the outcome of GetService.Do. +type GetResult struct { + Index string `json:"_index"` // index meta field + Type string `json:"_type"` // type meta field + Id string `json:"_id"` // id meta field + Uid string `json:"_uid"` // uid meta field (see MapperService.java for all meta fields) + Routing string `json:"_routing"` // routing meta field + Parent string `json:"_parent"` // parent meta field + Version *int64 `json:"_version"` // version number, when Version is set to true in SearchService + Source *json.RawMessage `json:"_source,omitempty"` + Found bool `json:"found,omitempty"` + Fields map[string]interface{} `json:"fields,omitempty"` + //Error string `json:"error,omitempty"` // used only in MultiGet + // TODO double-check that MultiGet now returns details error information + Error *ErrorDetails `json:"error,omitempty"` // only used in MultiGet +} diff --git a/vendor/github.com/olivere/elastic/get_test.go b/vendor/github.com/olivere/elastic/get_test.go new file mode 100644 index 0000000..f9504bd --- /dev/null +++ b/vendor/github.com/olivere/elastic/get_test.go @@ -0,0 +1,166 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "testing" +) + +func TestGet(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Get document 1 + res, err := client.Get().Index(testIndexName).Type("doc").Id("1").Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if res.Found != true { + t.Errorf("expected Found = true; got %v", res.Found) + } + if res.Source == nil { + t.Errorf("expected Source != nil; got %v", res.Source) + } + + // Get non existent document 99 + res, err = client.Get().Index(testIndexName).Type("doc").Id("99").Do(context.TODO()) + if err == nil { + t.Fatalf("expected error; got: %v", err) + } + if !IsNotFound(err) { + t.Errorf("expected NotFound error; got: %v", err) + } + if res != nil { + t.Errorf("expected no response; got: %v", res) + } +} + +func TestGetWithSourceFiltering(t *testing.T) { + client := setupTestClientAndCreateIndex(t) // , SetTraceLog(log.New(os.Stdout, "", 0))) + + tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Get document 1, without source + res, err := client.Get().Index(testIndexName).Type("doc").Id("1").FetchSource(false).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if res.Found != true { + t.Errorf("expected Found = true; got %v", res.Found) + } + if res.Source != nil { + t.Errorf("expected Source == nil; got %v", res.Source) + } + + // Get document 1, exclude Message field + fsc := NewFetchSourceContext(true).Exclude("message") + res, err = client.Get().Index(testIndexName).Type("doc").Id("1").FetchSourceContext(fsc).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if res.Found != true { + t.Errorf("expected Found = true; got %v", res.Found) + } + if res.Source == nil { + t.Errorf("expected Source != nil; got %v", res.Source) + } + var tw tweet + err = json.Unmarshal(*res.Source, &tw) + if err != nil { + t.Fatal(err) + } + if tw.User != "olivere" { + t.Errorf("expected user %q; got: %q", "olivere", tw.User) + } + if tw.Message != "" { + t.Errorf("expected message %q; got: %q", "", tw.Message) + } +} + +func TestGetWithFields(t *testing.T) { + client := setupTestClientAndCreateIndex(t) //, SetTraceLog(log.New(os.Stdout, "", 0))) + + tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Get document 1, specifying fields + res, err := client.Get().Index(testIndexName).Type("doc").Id("1").StoredFields("message").Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if res.Found != true { + t.Errorf("expected Found = true; got: %v", res.Found) + } + + // We must NOT have the "user" field + _, ok := res.Fields["user"] + if ok { + t.Fatalf("expected no field %q in document", "user") + } + + // We must have the "message" field + messageField, ok := res.Fields["message"] + if !ok { + t.Fatalf("expected field %q in document", "message") + } + + // Depending on the version of elasticsearch the message field will be returned + // as a string or a slice of strings. This test works in both cases. + + messageString, ok := messageField.(string) + if !ok { + messageArray, ok := messageField.([]interface{}) + if !ok { + t.Fatalf("expected field %q to be a string or a slice of strings; got: %T", "message", messageField) + } else { + messageString, ok = messageArray[0].(string) + if !ok { + t.Fatalf("expected field %q to be a string or a slice of strings; got: %T", "message", messageField) + } + } + } + + if messageString != tweet1.Message { + t.Errorf("expected message %q; got: %q", tweet1.Message, messageString) + } +} + +func TestGetValidate(t *testing.T) { + // Mitigate against http://stackoverflow.com/questions/27491738/elasticsearch-go-index-failures-no-feature-for-name + client := setupTestClientAndCreateIndex(t) + + if _, err := client.Get().Do(context.TODO()); err == nil { + t.Fatal("expected Get to fail") + } + if _, err := client.Get().Index(testIndexName).Do(context.TODO()); err == nil { + t.Fatal("expected Get to fail") + } + if _, err := client.Get().Type("doc").Do(context.TODO()); err == nil { + t.Fatal("expected Get to fail") + } + if _, err := client.Get().Id("1").Do(context.TODO()); err == nil { + t.Fatal("expected Get to fail") + } + if _, err := client.Get().Index(testIndexName).Type("doc").Do(context.TODO()); err == nil { + t.Fatal("expected Get to fail") + } + if _, err := client.Get().Type("doc").Id("1").Do(context.TODO()); err == nil { + t.Fatal("expected Get to fail") + } +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/highlight.go b/vendor/github.com/olivere/elastic/highlight.go similarity index 81% rename from vendor/gopkg.in/olivere/elastic.v2/highlight.go rename to vendor/github.com/olivere/elastic/highlight.go index dab8c45..ed024e4 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/highlight.go +++ b/vendor/github.com/olivere/elastic/highlight.go @@ -1,4 +1,4 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. @@ -6,7 +6,7 @@ package elastic // Highlight allows highlighting search results on one or more fields. // For details, see: -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-highlighting.html +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-highlighting.html type Highlight struct { fields []*HighlighterField tagsSchema *string @@ -19,7 +19,9 @@ type Highlight struct { encoder *string requireFieldMatch *bool boundaryMaxScan *int - boundaryChars []rune + boundaryChars *string + boundaryScannerType *string + boundaryScannerLocale *string highlighterType *string fragmenter *string highlightQuery Query @@ -32,11 +34,7 @@ type Highlight struct { func NewHighlight() *Highlight { hl := &Highlight{ - fields: make([]*HighlighterField, 0), - preTags: make([]string, 0), - postTags: make([]string, 0), - boundaryChars: make([]rune, 0), - options: make(map[string]interface{}), + options: make(map[string]interface{}), } return hl } @@ -78,13 +76,11 @@ func (hl *Highlight) Encoder(encoder string) *Highlight { } func (hl *Highlight) PreTags(preTags ...string) *Highlight { - hl.preTags = make([]string, 0) hl.preTags = append(hl.preTags, preTags...) return hl } func (hl *Highlight) PostTags(postTags ...string) *Highlight { - hl.postTags = make([]string, 0) hl.postTags = append(hl.postTags, postTags...) return hl } @@ -104,9 +100,18 @@ func (hl *Highlight) BoundaryMaxScan(boundaryMaxScan int) *Highlight { return hl } -func (hl *Highlight) BoundaryChars(boundaryChars ...rune) *Highlight { - hl.boundaryChars = make([]rune, 0) - hl.boundaryChars = append(hl.boundaryChars, boundaryChars...) +func (hl *Highlight) BoundaryChars(boundaryChars string) *Highlight { + hl.boundaryChars = &boundaryChars + return hl +} + +func (hl *Highlight) BoundaryScannerType(boundaryScannerType string) *Highlight { + hl.boundaryScannerType = &boundaryScannerType + return hl +} + +func (hl *Highlight) BoundaryScannerLocale(boundaryScannerLocale string) *Highlight { + hl.boundaryScannerLocale = &boundaryScannerLocale return hl } @@ -146,7 +151,7 @@ func (hl *Highlight) UseExplicitFieldOrder(useExplicitFieldOrder bool) *Highligh } // Creates the query source for the bool query. -func (hl *Highlight) Source() interface{} { +func (hl *Highlight) Source() (interface{}, error) { // Returns the map inside of "highlight": // "highlight":{ // ... this ... @@ -182,8 +187,14 @@ func (hl *Highlight) Source() interface{} { if hl.boundaryMaxScan != nil { source["boundary_max_scan"] = *hl.boundaryMaxScan } - if hl.boundaryChars != nil && len(hl.boundaryChars) > 0 { - source["boundary_chars"] = hl.boundaryChars + if hl.boundaryChars != nil { + source["boundary_chars"] = *hl.boundaryChars + } + if hl.boundaryScannerType != nil { + source["boundary_scanner"] = *hl.boundaryScannerType + } + if hl.boundaryScannerLocale != nil { + source["boundary_scanner_locale"] = *hl.boundaryScannerLocale } if hl.highlighterType != nil { source["type"] = *hl.highlighterType @@ -192,7 +203,11 @@ func (hl *Highlight) Source() interface{} { source["fragmenter"] = *hl.fragmenter } if hl.highlightQuery != nil { - source["highlight_query"] = hl.highlightQuery.Source() + src, err := hl.highlightQuery.Source() + if err != nil { + return nil, err + } + source["highlight_query"] = src } if hl.noMatchSize != nil { source["no_match_size"] = *hl.noMatchSize @@ -210,10 +225,14 @@ func (hl *Highlight) Source() interface{} { if hl.fields != nil && len(hl.fields) > 0 { if hl.useExplicitFieldOrder { // Use a slice for the fields - fields := make([]map[string]interface{}, 0) + var fields []map[string]interface{} for _, field := range hl.fields { + src, err := field.Source() + if err != nil { + return nil, err + } fmap := make(map[string]interface{}) - fmap[field.Name] = field.Source() + fmap[field.Name] = src fields = append(fields, fmap) } source["fields"] = fields @@ -221,63 +240,17 @@ func (hl *Highlight) Source() interface{} { // Use a map for the fields fields := make(map[string]interface{}, 0) for _, field := range hl.fields { - fields[field.Name] = field.Source() + src, err := field.Source() + if err != nil { + return nil, err + } + fields[field.Name] = src } source["fields"] = fields } } - return source - - /* - highlightS := make(map[string]interface{}) - - if hl.tagsSchema != "" { - highlightS["tags_schema"] = hl.tagsSchema - } - if len(hl.preTags) > 0 { - highlightS["pre_tags"] = hl.preTags - } - if len(hl.postTags) > 0 { - highlightS["post_tags"] = hl.postTags - } - if hl.order != "" { - highlightS["order"] = hl.order - } - if hl.encoder != "" { - highlightS["encoder"] = hl.encoder - } - if hl.requireFieldMatch != nil { - highlightS["require_field_match"] = *hl.requireFieldMatch - } - if hl.highlighterType != "" { - highlightS["type"] = hl.highlighterType - } - if hl.fragmenter != "" { - highlightS["fragmenter"] = hl.fragmenter - } - if hl.highlightQuery != nil { - highlightS["highlight_query"] = hl.highlightQuery.Source() - } - if hl.noMatchSize != nil { - highlightS["no_match_size"] = *hl.noMatchSize - } - if len(hl.options) > 0 { - highlightS["options"] = hl.options - } - if hl.forceSource != nil { - highlightS["force_source"] = *hl.forceSource - } - if len(hl.fields) > 0 { - fieldsS := make(map[string]interface{}) - for _, field := range hl.fields { - fieldsS[field.Name] = field.Source() - } - highlightS["fields"] = fieldsS - } - - return highlightS - */ + return source, nil } // HighlighterField specifies a highlighted field. @@ -341,13 +314,11 @@ func NewHighlighterField(name string) *HighlighterField { } func (f *HighlighterField) PreTags(preTags ...string) *HighlighterField { - f.preTags = make([]string, 0) f.preTags = append(f.preTags, preTags...) return f } func (f *HighlighterField) PostTags(postTags ...string) *HighlighterField { - f.postTags = make([]string, 0) f.postTags = append(f.postTags, postTags...) return f } @@ -388,7 +359,6 @@ func (f *HighlighterField) BoundaryMaxScan(boundaryMaxScan int) *HighlighterFiel } func (f *HighlighterField) BoundaryChars(boundaryChars ...rune) *HighlighterField { - f.boundaryChars = make([]rune, 0) f.boundaryChars = append(f.boundaryChars, boundaryChars...) return f } @@ -419,7 +389,6 @@ func (f *HighlighterField) Options(options map[string]interface{}) *HighlighterF } func (f *HighlighterField) MatchedFields(matchedFields ...string) *HighlighterField { - f.matchedFields = make([]string, 0) f.matchedFields = append(f.matchedFields, matchedFields...) return f } @@ -434,7 +403,7 @@ func (f *HighlighterField) ForceSource(forceSource bool) *HighlighterField { return f } -func (f *HighlighterField) Source() interface{} { +func (f *HighlighterField) Source() (interface{}, error) { source := make(map[string]interface{}) if f.preTags != nil && len(f.preTags) > 0 { @@ -474,7 +443,11 @@ func (f *HighlighterField) Source() interface{} { source["fragmenter"] = *f.fragmenter } if f.highlightQuery != nil { - source["highlight_query"] = f.highlightQuery.Source() + src, err := f.highlightQuery.Source() + if err != nil { + return nil, err + } + source["highlight_query"] = src } if f.noMatchSize != nil { source["no_match_size"] = *f.noMatchSize @@ -492,5 +465,5 @@ func (f *HighlighterField) Source() interface{} { source["force_source"] = *f.forceSource } - return source + return source, nil } diff --git a/vendor/github.com/olivere/elastic/highlight_test.go b/vendor/github.com/olivere/elastic/highlight_test.go new file mode 100644 index 0000000..c7b972c --- /dev/null +++ b/vendor/github.com/olivere/elastic/highlight_test.go @@ -0,0 +1,211 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "testing" +) + +func TestHighlighterField(t *testing.T) { + field := NewHighlighterField("grade") + src, err := field.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestHighlighterFieldWithOptions(t *testing.T) { + field := NewHighlighterField("grade").FragmentSize(2).NumOfFragments(1) + src, err := field.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"fragment_size":2,"number_of_fragments":1}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestHighlightWithStringField(t *testing.T) { + builder := NewHighlight().Field("grade") + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"fields":{"grade":{}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestHighlightWithFields(t *testing.T) { + gradeField := NewHighlighterField("grade") + builder := NewHighlight().Fields(gradeField) + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"fields":{"grade":{}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestHighlightWithMultipleFields(t *testing.T) { + gradeField := NewHighlighterField("grade") + colorField := NewHighlighterField("color") + builder := NewHighlight().Fields(gradeField, colorField) + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"fields":{"color":{},"grade":{}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestHighlighterWithExplicitFieldOrder(t *testing.T) { + gradeField := NewHighlighterField("grade").FragmentSize(2) + colorField := NewHighlighterField("color").FragmentSize(2).NumOfFragments(1) + builder := NewHighlight().Fields(gradeField, colorField).UseExplicitFieldOrder(true) + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"fields":[{"grade":{"fragment_size":2}},{"color":{"fragment_size":2,"number_of_fragments":1}}]}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestHighlightWithBoundarySettings(t *testing.T) { + builder := NewHighlight(). + BoundaryChars(" \t\r"). + BoundaryScannerType("word") + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"boundary_chars":" \t\r","boundary_scanner":"word"}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestHighlightWithTermQuery(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} + tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} + tweet3 := tweet{User: "sandrae", Message: "Cycling is fun to do."} + + // Add all documents + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Specify highlighter + hl := NewHighlight() + hl = hl.Fields(NewHighlighterField("message")) + hl = hl.PreTags("").PostTags("") + + // Match all should return all documents + query := NewPrefixQuery("message", "golang") + searchResult, err := client.Search(). + Index(testIndexName). + Highlight(hl). + Query(query). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if searchResult.Hits == nil { + t.Fatalf("expected SearchResult.Hits != nil; got nil") + } + if searchResult.Hits.TotalHits != 1 { + t.Fatalf("expected SearchResult.Hits.TotalHits = %d; got %d", 1, searchResult.Hits.TotalHits) + } + if len(searchResult.Hits.Hits) != 1 { + t.Fatalf("expected len(SearchResult.Hits.Hits) = %d; got %d", 1, len(searchResult.Hits.Hits)) + } + + hit := searchResult.Hits.Hits[0] + var tw tweet + if err := json.Unmarshal(*hit.Source, &tw); err != nil { + t.Fatal(err) + } + if hit.Highlight == nil || len(hit.Highlight) == 0 { + t.Fatal("expected hit to have a highlight; got nil") + } + if hl, found := hit.Highlight["message"]; found { + if len(hl) != 1 { + t.Fatalf("expected to have one highlight for field \"message\"; got %d", len(hl)) + } + expected := "Welcome to Golang and Elasticsearch." + if hl[0] != expected { + t.Errorf("expected to have highlight \"%s\"; got \"%s\"", expected, hl[0]) + } + } else { + t.Fatal("expected to have a highlight on field \"message\"; got none") + } +} diff --git a/vendor/github.com/olivere/elastic/index.go b/vendor/github.com/olivere/elastic/index.go new file mode 100644 index 0000000..807dd27 --- /dev/null +++ b/vendor/github.com/olivere/elastic/index.go @@ -0,0 +1,300 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" + + "github.com/olivere/elastic/uritemplates" +) + +// IndexService adds or updates a typed JSON document in a specified index, +// making it searchable. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-index_.html +// for details. +type IndexService struct { + client *Client + pretty bool + id string + index string + typ string + parent string + routing string + timeout string + timestamp string + ttl string + version interface{} + opType string + versionType string + refresh string + waitForActiveShards string + pipeline string + bodyJson interface{} + bodyString string +} + +// NewIndexService creates a new IndexService. +func NewIndexService(client *Client) *IndexService { + return &IndexService{ + client: client, + } +} + +// Id is the document ID. +func (s *IndexService) Id(id string) *IndexService { + s.id = id + return s +} + +// Index is the name of the index. +func (s *IndexService) Index(index string) *IndexService { + s.index = index + return s +} + +// Type is the type of the document. +func (s *IndexService) Type(typ string) *IndexService { + s.typ = typ + return s +} + +// WaitForActiveShards sets the number of shard copies that must be active +// before proceeding with the index operation. Defaults to 1, meaning the +// primary shard only. Set to `all` for all shard copies, otherwise set to +// any non-negative value less than or equal to the total number of copies +// for the shard (number of replicas + 1). +func (s *IndexService) WaitForActiveShards(waitForActiveShards string) *IndexService { + s.waitForActiveShards = waitForActiveShards + return s +} + +// Pipeline specifies the pipeline id to preprocess incoming documents with. +func (s *IndexService) Pipeline(pipeline string) *IndexService { + s.pipeline = pipeline + return s +} + +// Refresh the index after performing the operation. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-refresh.html +// for details. +func (s *IndexService) Refresh(refresh string) *IndexService { + s.refresh = refresh + return s +} + +// Ttl is an expiration time for the document. +func (s *IndexService) Ttl(ttl string) *IndexService { + s.ttl = ttl + return s +} + +// TTL is an expiration time for the document (alias for Ttl). +func (s *IndexService) TTL(ttl string) *IndexService { + s.ttl = ttl + return s +} + +// Version is an explicit version number for concurrency control. +func (s *IndexService) Version(version interface{}) *IndexService { + s.version = version + return s +} + +// OpType is an explicit operation type, i.e. "create" or "index" (default). +func (s *IndexService) OpType(opType string) *IndexService { + s.opType = opType + return s +} + +// Parent is the ID of the parent document. +func (s *IndexService) Parent(parent string) *IndexService { + s.parent = parent + return s +} + +// Routing is a specific routing value. +func (s *IndexService) Routing(routing string) *IndexService { + s.routing = routing + return s +} + +// Timeout is an explicit operation timeout. +func (s *IndexService) Timeout(timeout string) *IndexService { + s.timeout = timeout + return s +} + +// Timestamp is an explicit timestamp for the document. +func (s *IndexService) Timestamp(timestamp string) *IndexService { + s.timestamp = timestamp + return s +} + +// VersionType is a specific version type. +func (s *IndexService) VersionType(versionType string) *IndexService { + s.versionType = versionType + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *IndexService) Pretty(pretty bool) *IndexService { + s.pretty = pretty + return s +} + +// BodyJson is the document as a serializable JSON interface. +func (s *IndexService) BodyJson(body interface{}) *IndexService { + s.bodyJson = body + return s +} + +// BodyString is the document encoded as a string. +func (s *IndexService) BodyString(body string) *IndexService { + s.bodyString = body + return s +} + +// buildURL builds the URL for the operation. +func (s *IndexService) buildURL() (string, string, url.Values, error) { + var err error + var method, path string + + if s.id != "" { + // Create document with manual id + method = "PUT" + path, err = uritemplates.Expand("/{index}/{type}/{id}", map[string]string{ + "id": s.id, + "index": s.index, + "type": s.typ, + }) + } else { + // Automatic ID generation + // See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-index_.html#index-creation + method = "POST" + path, err = uritemplates.Expand("/{index}/{type}/", map[string]string{ + "index": s.index, + "type": s.typ, + }) + } + if err != nil { + return "", "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.waitForActiveShards != "" { + params.Set("wait_for_active_shards", s.waitForActiveShards) + } + if s.refresh != "" { + params.Set("refresh", s.refresh) + } + if s.opType != "" { + params.Set("op_type", s.opType) + } + if s.parent != "" { + params.Set("parent", s.parent) + } + if s.pipeline != "" { + params.Set("pipeline", s.pipeline) + } + if s.routing != "" { + params.Set("routing", s.routing) + } + if s.timeout != "" { + params.Set("timeout", s.timeout) + } + if s.timestamp != "" { + params.Set("timestamp", s.timestamp) + } + if s.ttl != "" { + params.Set("ttl", s.ttl) + } + if s.version != nil { + params.Set("version", fmt.Sprintf("%v", s.version)) + } + if s.versionType != "" { + params.Set("version_type", s.versionType) + } + return method, path, params, nil +} + +// Validate checks if the operation is valid. +func (s *IndexService) Validate() error { + var invalid []string + if s.index == "" { + invalid = append(invalid, "Index") + } + if s.typ == "" { + invalid = append(invalid, "Type") + } + if s.bodyString == "" && s.bodyJson == nil { + invalid = append(invalid, "BodyJson") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *IndexService) Do(ctx context.Context) (*IndexResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + method, path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Setup HTTP request body + var body interface{} + if s.bodyJson != nil { + body = s.bodyJson + } else { + body = s.bodyString + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: method, + Path: path, + Params: params, + Body: body, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(IndexResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// IndexResponse is the result of indexing a document in Elasticsearch. +type IndexResponse struct { + Index string `json:"_index,omitempty"` + Type string `json:"_type,omitempty"` + Id string `json:"_id,omitempty"` + Version int64 `json:"_version,omitempty"` + Result string `json:"result,omitempty"` + Shards *shardsInfo `json:"_shards,omitempty"` + SeqNo int64 `json:"_seq_no,omitempty"` + PrimaryTerm int64 `json:"_primary_term,omitempty"` + Status int `json:"status,omitempty"` + ForcedRefresh bool `json:"forced_refresh,omitempty"` +} diff --git a/vendor/github.com/olivere/elastic/index_test.go b/vendor/github.com/olivere/elastic/index_test.go new file mode 100644 index 0000000..1a0c385 --- /dev/null +++ b/vendor/github.com/olivere/elastic/index_test.go @@ -0,0 +1,280 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "testing" +) + +func TestIndexLifecycle(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} + + // Add a document + indexResult, err := client.Index(). + Index(testIndexName). + Type("doc"). + Id("1"). + BodyJson(&tweet1). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if indexResult == nil { + t.Errorf("expected result to be != nil; got: %v", indexResult) + } + + // Exists + exists, err := client.Exists().Index(testIndexName).Type("doc").Id("1").Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if !exists { + t.Errorf("expected exists %v; got %v", true, exists) + } + + // Get document + getResult, err := client.Get(). + Index(testIndexName). + Type("doc"). + Id("1"). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if getResult.Index != testIndexName { + t.Errorf("expected GetResult.Index %q; got %q", testIndexName, getResult.Index) + } + if getResult.Type != "doc" { + t.Errorf("expected GetResult.Type %q; got %q", "doc", getResult.Type) + } + if getResult.Id != "1" { + t.Errorf("expected GetResult.Id %q; got %q", "1", getResult.Id) + } + if getResult.Source == nil { + t.Errorf("expected GetResult.Source to be != nil; got nil") + } + + // Decode the Source field + var tweetGot tweet + err = json.Unmarshal(*getResult.Source, &tweetGot) + if err != nil { + t.Fatal(err) + } + if tweetGot.User != tweet1.User { + t.Errorf("expected Tweet.User to be %q; got %q", tweet1.User, tweetGot.User) + } + if tweetGot.Message != tweet1.Message { + t.Errorf("expected Tweet.Message to be %q; got %q", tweet1.Message, tweetGot.Message) + } + + // Delete document again + deleteResult, err := client.Delete().Index(testIndexName).Type("doc").Id("1").Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if deleteResult == nil { + t.Errorf("expected result to be != nil; got: %v", deleteResult) + } + + // Exists + exists, err = client.Exists().Index(testIndexName).Type("doc").Id("1").Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if exists { + t.Errorf("expected exists %v; got %v", false, exists) + } +} + +func TestIndexLifecycleWithAutomaticIDGeneration(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} + + // Add a document + indexResult, err := client.Index(). + Index(testIndexName). + Type("doc"). + BodyJson(&tweet1). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if indexResult == nil { + t.Errorf("expected result to be != nil; got: %v", indexResult) + } + if indexResult.Id == "" { + t.Fatalf("expected Es to generate an automatic ID, got: %v", indexResult.Id) + } + id := indexResult.Id + + // Exists + exists, err := client.Exists().Index(testIndexName).Type("doc").Id(id).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if !exists { + t.Errorf("expected exists %v; got %v", true, exists) + } + + // Get document + getResult, err := client.Get(). + Index(testIndexName). + Type("doc"). + Id(id). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if getResult.Index != testIndexName { + t.Errorf("expected GetResult.Index %q; got %q", testIndexName, getResult.Index) + } + if getResult.Type != "doc" { + t.Errorf("expected GetResult.Type %q; got %q", "doc", getResult.Type) + } + if getResult.Id != id { + t.Errorf("expected GetResult.Id %q; got %q", id, getResult.Id) + } + if getResult.Source == nil { + t.Errorf("expected GetResult.Source to be != nil; got nil") + } + + // Decode the Source field + var tweetGot tweet + err = json.Unmarshal(*getResult.Source, &tweetGot) + if err != nil { + t.Fatal(err) + } + if tweetGot.User != tweet1.User { + t.Errorf("expected Tweet.User to be %q; got %q", tweet1.User, tweetGot.User) + } + if tweetGot.Message != tweet1.Message { + t.Errorf("expected Tweet.Message to be %q; got %q", tweet1.Message, tweetGot.Message) + } + + // Delete document again + deleteResult, err := client.Delete().Index(testIndexName).Type("doc").Id(id).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if deleteResult == nil { + t.Errorf("expected result to be != nil; got: %v", deleteResult) + } + + // Exists + exists, err = client.Exists().Index(testIndexName).Type("doc").Id(id).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if exists { + t.Errorf("expected exists %v; got %v", false, exists) + } +} + +func TestIndexValidate(t *testing.T) { + client := setupTestClient(t) + + tweet := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} + + // No index name -> fail with error + res, err := NewIndexService(client).Type("doc").Id("1").BodyJson(&tweet).Do(context.TODO()) + if err == nil { + t.Fatalf("expected Index to fail without index name") + } + if res != nil { + t.Fatalf("expected result to be == nil; got: %v", res) + } + + // No index name -> fail with error + res, err = NewIndexService(client).Index(testIndexName).Id("1").BodyJson(&tweet).Do(context.TODO()) + if err == nil { + t.Fatalf("expected Index to fail without type") + } + if res != nil { + t.Fatalf("expected result to be == nil; got: %v", res) + } +} + +func TestIndexCreateExistsOpenCloseDelete(t *testing.T) { + // TODO: Find out how to make these test robust + t.Skip("test fails regularly with 409 (Conflict): " + + "IndexPrimaryShardNotAllocatedException[[elastic-test] " + + "primary not allocated post api... skipping") + + client := setupTestClient(t) + + // Create index + createIndex, err := client.CreateIndex(testIndexName).Body(testMapping).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if createIndex == nil { + t.Fatalf("expected response; got: %v", createIndex) + } + if !createIndex.Acknowledged { + t.Errorf("expected ack for creating index; got: %v", createIndex.Acknowledged) + } + + // Exists + indexExists, err := client.IndexExists(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if !indexExists { + t.Fatalf("expected index exists=%v; got %v", true, indexExists) + } + + // Flush + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Close index + closeIndex, err := client.CloseIndex(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if closeIndex == nil { + t.Fatalf("expected response; got: %v", closeIndex) + } + if !closeIndex.Acknowledged { + t.Errorf("expected ack for closing index; got: %v", closeIndex.Acknowledged) + } + + // Open index + openIndex, err := client.OpenIndex(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if openIndex == nil { + t.Fatalf("expected response; got: %v", openIndex) + } + if !openIndex.Acknowledged { + t.Errorf("expected ack for opening index; got: %v", openIndex.Acknowledged) + } + + // Flush + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Delete index + deleteIndex, err := client.DeleteIndex(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if deleteIndex == nil { + t.Fatalf("expected response; got: %v", deleteIndex) + } + if !deleteIndex.Acknowledged { + t.Errorf("expected ack for deleting index; got %v", deleteIndex.Acknowledged) + } +} diff --git a/vendor/github.com/olivere/elastic/indices_analyze.go b/vendor/github.com/olivere/elastic/indices_analyze.go new file mode 100644 index 0000000..e57c381 --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_analyze.go @@ -0,0 +1,284 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" + + "github.com/olivere/elastic/uritemplates" +) + +// IndicesAnalyzeService performs the analysis process on a text and returns +// the tokens breakdown of the text. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-analyze.html +// for detail. +type IndicesAnalyzeService struct { + client *Client + pretty bool + index string + request *IndicesAnalyzeRequest + format string + preferLocal *bool + bodyJson interface{} + bodyString string +} + +// NewIndicesAnalyzeService creates a new IndicesAnalyzeService. +func NewIndicesAnalyzeService(client *Client) *IndicesAnalyzeService { + return &IndicesAnalyzeService{ + client: client, + request: new(IndicesAnalyzeRequest), + } +} + +// Index is the name of the index to scope the operation. +func (s *IndicesAnalyzeService) Index(index string) *IndicesAnalyzeService { + s.index = index + return s +} + +// Format of the output. +func (s *IndicesAnalyzeService) Format(format string) *IndicesAnalyzeService { + s.format = format + return s +} + +// PreferLocal, when true, specifies that a local shard should be used +// if available. When false, a random shard is used (default: true). +func (s *IndicesAnalyzeService) PreferLocal(preferLocal bool) *IndicesAnalyzeService { + s.preferLocal = &preferLocal + return s +} + +// Request passes the analyze request to use. +func (s *IndicesAnalyzeService) Request(request *IndicesAnalyzeRequest) *IndicesAnalyzeService { + if request == nil { + s.request = new(IndicesAnalyzeRequest) + } else { + s.request = request + } + return s +} + +// Analyzer is the name of the analyzer to use. +func (s *IndicesAnalyzeService) Analyzer(analyzer string) *IndicesAnalyzeService { + s.request.Analyzer = analyzer + return s +} + +// Attributes is a list of token attributes to output; this parameter works +// only with explain=true. +func (s *IndicesAnalyzeService) Attributes(attributes ...string) *IndicesAnalyzeService { + s.request.Attributes = attributes + return s +} + +// CharFilter is a list of character filters to use for the analysis. +func (s *IndicesAnalyzeService) CharFilter(charFilter ...string) *IndicesAnalyzeService { + s.request.CharFilter = charFilter + return s +} + +// Explain, when true, outputs more advanced details (default: false). +func (s *IndicesAnalyzeService) Explain(explain bool) *IndicesAnalyzeService { + s.request.Explain = explain + return s +} + +// Field specifies to use a specific analyzer configured for this field (instead of passing the analyzer name). +func (s *IndicesAnalyzeService) Field(field string) *IndicesAnalyzeService { + s.request.Field = field + return s +} + +// Filter is a list of filters to use for the analysis. +func (s *IndicesAnalyzeService) Filter(filter ...string) *IndicesAnalyzeService { + s.request.Filter = filter + return s +} + +// Text is the text on which the analysis should be performed (when request body is not used). +func (s *IndicesAnalyzeService) Text(text ...string) *IndicesAnalyzeService { + s.request.Text = text + return s +} + +// Tokenizer is the name of the tokenizer to use for the analysis. +func (s *IndicesAnalyzeService) Tokenizer(tokenizer string) *IndicesAnalyzeService { + s.request.Tokenizer = tokenizer + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *IndicesAnalyzeService) Pretty(pretty bool) *IndicesAnalyzeService { + s.pretty = pretty + return s +} + +// BodyJson is the text on which the analysis should be performed. +func (s *IndicesAnalyzeService) BodyJson(body interface{}) *IndicesAnalyzeService { + s.bodyJson = body + return s +} + +// BodyString is the text on which the analysis should be performed. +func (s *IndicesAnalyzeService) BodyString(body string) *IndicesAnalyzeService { + s.bodyString = body + return s +} + +// buildURL builds the URL for the operation. +func (s *IndicesAnalyzeService) buildURL() (string, url.Values, error) { + // Build URL + var err error + var path string + + if s.index == "" { + path = "/_analyze" + } else { + path, err = uritemplates.Expand("/{index}/_analyze", map[string]string{ + "index": s.index, + }) + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.format != "" { + params.Set("format", s.format) + } + if s.preferLocal != nil { + params.Set("prefer_local", fmt.Sprintf("%v", *s.preferLocal)) + } + + return path, params, nil +} + +// Do will execute the request with the given context. +func (s *IndicesAnalyzeService) Do(ctx context.Context) (*IndicesAnalyzeResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Setup HTTP request body + var body interface{} + if s.bodyJson != nil { + body = s.bodyJson + } else if s.bodyString != "" { + body = s.bodyString + } else { + // Request parameters are deprecated in 5.1.1, and we must use a JSON + // structure in the body to pass the parameters. + // See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-analyze.html + body = s.request + } + + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + Body: body, + }) + if err != nil { + return nil, err + } + + ret := new(IndicesAnalyzeResponse) + if err = s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + + return ret, nil +} + +func (s *IndicesAnalyzeService) Validate() error { + var invalid []string + if s.bodyJson == nil && s.bodyString == "" { + if len(s.request.Text) == 0 { + invalid = append(invalid, "Text") + } + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// IndicesAnalyzeRequest specifies the parameters of the analyze request. +type IndicesAnalyzeRequest struct { + Text []string `json:"text,omitempty"` + Analyzer string `json:"analyzer,omitempty"` + Tokenizer string `json:"tokenizer,omitempty"` + Filter []string `json:"filter,omitempty"` + CharFilter []string `json:"char_filter,omitempty"` + Field string `json:"field,omitempty"` + Explain bool `json:"explain,omitempty"` + Attributes []string `json:"attributes,omitempty"` +} + +type IndicesAnalyzeResponse struct { + Tokens []IndicesAnalyzeResponseToken `json:"tokens"` // json part for normal message + Detail IndicesAnalyzeResponseDetail `json:"detail"` // json part for verbose message of explain request +} + +type IndicesAnalyzeResponseToken struct { + Token string `json:"token"` + StartOffset int `json:"start_offset"` + EndOffset int `json:"end_offset"` + Type string `json:"type"` + Position int `json:"position"` +} + +type IndicesAnalyzeResponseDetail struct { + CustomAnalyzer bool `json:"custom_analyzer"` + Charfilters []interface{} `json:"charfilters"` + Analyzer struct { + Name string `json:"name"` + Tokens []struct { + Token string `json:"token"` + StartOffset int `json:"start_offset"` + EndOffset int `json:"end_offset"` + Type string `json:"type"` + Position int `json:"position"` + Bytes string `json:"bytes"` + PositionLength int `json:"positionLength"` + } `json:"tokens"` + } `json:"analyzer"` + Tokenizer struct { + Name string `json:"name"` + Tokens []struct { + Token string `json:"token"` + StartOffset int `json:"start_offset"` + EndOffset int `json:"end_offset"` + Type string `json:"type"` + Position int `json:"position"` + } `json:"tokens"` + } `json:"tokenizer"` + Tokenfilters []struct { + Name string `json:"name"` + Tokens []struct { + Token string `json:"token"` + StartOffset int `json:"start_offset"` + EndOffset int `json:"end_offset"` + Type string `json:"type"` + Position int `json:"position"` + Keyword bool `json:"keyword"` + } `json:"tokens"` + } `json:"tokenfilters"` +} diff --git a/vendor/github.com/olivere/elastic/indices_analyze_test.go b/vendor/github.com/olivere/elastic/indices_analyze_test.go new file mode 100644 index 0000000..90dbf1e --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_analyze_test.go @@ -0,0 +1,85 @@ +package elastic + +import ( + "context" + "testing" +) + +func TestIndicesAnalyzeURL(t *testing.T) { + client := setupTestClient(t) + + tests := []struct { + Index string + Expected string + }{ + { + "", + "/_analyze", + }, + { + "tweets", + "/tweets/_analyze", + }, + } + + for _, test := range tests { + path, _, err := client.IndexAnalyze().Index(test.Index).buildURL() + if err != nil { + t.Fatal(err) + } + if path != test.Expected { + t.Errorf("expected %q; got: %q", test.Expected, path) + } + } +} + +func TestIndicesAnalyze(t *testing.T) { + client := setupTestClient(t) + // client := setupTestClientAndCreateIndexAndLog(t, SetTraceLog(log.New(os.Stdout, "", 0))) + + res, err := client.IndexAnalyze().Text("hello hi guy").Do(context.TODO()) + if err != nil { + t.Fatalf("expected no error, got %v", err) + } + if len(res.Tokens) != 3 { + t.Fatalf("expected %d, got %d (%+v)", 3, len(res.Tokens), res.Tokens) + } +} + +func TestIndicesAnalyzeDetail(t *testing.T) { + client := setupTestClient(t) + // client := setupTestClientAndCreateIndexAndLog(t, SetTraceLog(log.New(os.Stdout, "", 0))) + + res, err := client.IndexAnalyze().Text("hello hi guy").Explain(true).Do(context.TODO()) + if err != nil { + t.Fatalf("expected no error, got %v", err) + } + + if len(res.Detail.Analyzer.Tokens) != 3 { + t.Fatalf("expected %d tokens, got %d (%+v)", 3, len(res.Detail.Tokenizer.Tokens), res.Detail.Tokenizer.Tokens) + } +} + +func TestIndicesAnalyzeWithIndex(t *testing.T) { + client := setupTestClient(t) + + _, err := client.IndexAnalyze().Index("foo").Text("hello hi guy").Do(context.TODO()) + if err == nil { + t.Fatal("expected error, got nil") + } + if want, have := "elastic: Error 404 (Not Found): no such index [type=index_not_found_exception]", err.Error(); want != have { + t.Fatalf("expected error %q, got %q", want, have) + } +} + +func TestIndicesAnalyzeValidate(t *testing.T) { + client := setupTestClient(t) + + _, err := client.IndexAnalyze().Do(context.TODO()) + if err == nil { + t.Fatal("expected error, got nil") + } + if want, have := "missing required fields: [Text]", err.Error(); want != have { + t.Fatalf("expected error %q, got %q", want, have) + } +} diff --git a/vendor/github.com/olivere/elastic/indices_close.go b/vendor/github.com/olivere/elastic/indices_close.go new file mode 100644 index 0000000..e6a4127 --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_close.go @@ -0,0 +1,159 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" + + "github.com/olivere/elastic/uritemplates" +) + +// IndicesCloseService closes an index. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-open-close.html +// for details. +type IndicesCloseService struct { + client *Client + pretty bool + index string + timeout string + masterTimeout string + ignoreUnavailable *bool + allowNoIndices *bool + expandWildcards string +} + +// NewIndicesCloseService creates and initializes a new IndicesCloseService. +func NewIndicesCloseService(client *Client) *IndicesCloseService { + return &IndicesCloseService{client: client} +} + +// Index is the name of the index to close. +func (s *IndicesCloseService) Index(index string) *IndicesCloseService { + s.index = index + return s +} + +// Timeout is an explicit operation timeout. +func (s *IndicesCloseService) Timeout(timeout string) *IndicesCloseService { + s.timeout = timeout + return s +} + +// MasterTimeout specifies the timeout for connection to master. +func (s *IndicesCloseService) MasterTimeout(masterTimeout string) *IndicesCloseService { + s.masterTimeout = masterTimeout + return s +} + +// IgnoreUnavailable indicates whether specified concrete indices should be +// ignored when unavailable (missing or closed). +func (s *IndicesCloseService) IgnoreUnavailable(ignoreUnavailable bool) *IndicesCloseService { + s.ignoreUnavailable = &ignoreUnavailable + return s +} + +// AllowNoIndices indicates whether to ignore if a wildcard indices +// expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified). +func (s *IndicesCloseService) AllowNoIndices(allowNoIndices bool) *IndicesCloseService { + s.allowNoIndices = &allowNoIndices + return s +} + +// ExpandWildcards indicates whether to expand wildcard expression to +// concrete indices that are open, closed or both. +func (s *IndicesCloseService) ExpandWildcards(expandWildcards string) *IndicesCloseService { + s.expandWildcards = expandWildcards + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *IndicesCloseService) Pretty(pretty bool) *IndicesCloseService { + s.pretty = pretty + return s +} + +// buildURL builds the URL for the operation. +func (s *IndicesCloseService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/{index}/_close", map[string]string{ + "index": s.index, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.allowNoIndices != nil { + params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) + } + if s.expandWildcards != "" { + params.Set("expand_wildcards", s.expandWildcards) + } + if s.timeout != "" { + params.Set("timeout", s.timeout) + } + if s.masterTimeout != "" { + params.Set("master_timeout", s.masterTimeout) + } + if s.ignoreUnavailable != nil { + params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) + } + + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *IndicesCloseService) Validate() error { + var invalid []string + if s.index == "" { + invalid = append(invalid, "Index") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *IndicesCloseService) Do(ctx context.Context) (*IndicesCloseResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(IndicesCloseResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// IndicesCloseResponse is the response of IndicesCloseService.Do. +type IndicesCloseResponse struct { + Acknowledged bool `json:"acknowledged"` + ShardsAcknowledged bool `json:"shards_acknowledged"` + Index string `json:"index,omitempty"` +} diff --git a/vendor/github.com/olivere/elastic/indices_close_test.go b/vendor/github.com/olivere/elastic/indices_close_test.go new file mode 100644 index 0000000..e7a4d9e --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_close_test.go @@ -0,0 +1,84 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "testing" +) + +// TODO(oe): Find out why this test fails on Travis CI. +/* +func TestIndicesOpenAndClose(t *testing.T) { + client := setupTestClient(t) + + // Create index + createIndex, err := client.CreateIndex(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if !createIndex.Acknowledged { + t.Errorf("expected CreateIndexResult.Acknowledged %v; got %v", true, createIndex.Acknowledged) + } + defer func() { + // Delete index + deleteIndex, err := client.DeleteIndex(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if !deleteIndex.Acknowledged { + t.Errorf("expected DeleteIndexResult.Acknowledged %v; got %v", true, deleteIndex.Acknowledged) + } + }() + + waitForYellow := func() { + // Wait for status yellow + res, err := client.ClusterHealth().WaitForStatus("yellow").Timeout("15s").Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if res != nil && res.TimedOut { + t.Fatalf("cluster time out waiting for status %q", "yellow") + } + } + + // Wait for cluster + waitForYellow() + + // Close index + cresp, err := client.CloseIndex(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if !cresp.Acknowledged { + t.Fatalf("expected close index of %q to be acknowledged\n", testIndexName) + } + + // Wait for cluster + waitForYellow() + + // Open index again + oresp, err := client.OpenIndex(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if !oresp.Acknowledged { + t.Fatalf("expected open index of %q to be acknowledged\n", testIndexName) + } +} +*/ + +func TestIndicesCloseValidate(t *testing.T) { + client := setupTestClient(t) + + // No index name -> fail with error + res, err := NewIndicesCloseService(client).Do(context.TODO()) + if err == nil { + t.Fatalf("expected IndicesClose to fail without index name") + } + if res != nil { + t.Fatalf("expected result to be == nil; got: %v", res) + } +} diff --git a/vendor/github.com/olivere/elastic/indices_create.go b/vendor/github.com/olivere/elastic/indices_create.go new file mode 100644 index 0000000..08d8e53 --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_create.go @@ -0,0 +1,136 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "errors" + "net/url" + + "github.com/olivere/elastic/uritemplates" +) + +// IndicesCreateService creates a new index. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-create-index.html +// for details. +type IndicesCreateService struct { + client *Client + pretty bool + index string + timeout string + masterTimeout string + bodyJson interface{} + bodyString string +} + +// NewIndicesCreateService returns a new IndicesCreateService. +func NewIndicesCreateService(client *Client) *IndicesCreateService { + return &IndicesCreateService{client: client} +} + +// Index is the name of the index to create. +func (b *IndicesCreateService) Index(index string) *IndicesCreateService { + b.index = index + return b +} + +// Timeout the explicit operation timeout, e.g. "5s". +func (s *IndicesCreateService) Timeout(timeout string) *IndicesCreateService { + s.timeout = timeout + return s +} + +// MasterTimeout specifies the timeout for connection to master. +func (s *IndicesCreateService) MasterTimeout(masterTimeout string) *IndicesCreateService { + s.masterTimeout = masterTimeout + return s +} + +// Body specifies the configuration of the index as a string. +// It is an alias for BodyString. +func (b *IndicesCreateService) Body(body string) *IndicesCreateService { + b.bodyString = body + return b +} + +// BodyString specifies the configuration of the index as a string. +func (b *IndicesCreateService) BodyString(body string) *IndicesCreateService { + b.bodyString = body + return b +} + +// BodyJson specifies the configuration of the index. The interface{} will +// be serializes as a JSON document, so use a map[string]interface{}. +func (b *IndicesCreateService) BodyJson(body interface{}) *IndicesCreateService { + b.bodyJson = body + return b +} + +// Pretty indicates that the JSON response be indented and human readable. +func (b *IndicesCreateService) Pretty(pretty bool) *IndicesCreateService { + b.pretty = pretty + return b +} + +// Do executes the operation. +func (b *IndicesCreateService) Do(ctx context.Context) (*IndicesCreateResult, error) { + if b.index == "" { + return nil, errors.New("missing index name") + } + + // Build url + path, err := uritemplates.Expand("/{index}", map[string]string{ + "index": b.index, + }) + if err != nil { + return nil, err + } + + params := make(url.Values) + if b.pretty { + params.Set("pretty", "true") + } + if b.masterTimeout != "" { + params.Set("master_timeout", b.masterTimeout) + } + if b.timeout != "" { + params.Set("timeout", b.timeout) + } + + // Setup HTTP request body + var body interface{} + if b.bodyJson != nil { + body = b.bodyJson + } else { + body = b.bodyString + } + + // Get response + res, err := b.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "PUT", + Path: path, + Params: params, + Body: body, + }) + if err != nil { + return nil, err + } + + ret := new(IndicesCreateResult) + if err := b.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// -- Result of a create index request. + +// IndicesCreateResult is the outcome of creating a new index. +type IndicesCreateResult struct { + Acknowledged bool `json:"acknowledged"` + ShardsAcknowledged bool `json:"shards_acknowledged"` + Index string `json:"index,omitempty"` +} diff --git a/vendor/github.com/olivere/elastic/indices_create_test.go b/vendor/github.com/olivere/elastic/indices_create_test.go new file mode 100644 index 0000000..f37df1c --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_create_test.go @@ -0,0 +1,63 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "testing" +) + +func TestIndicesLifecycle(t *testing.T) { + client := setupTestClient(t) + + // Create index + createIndex, err := client.CreateIndex(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if !createIndex.Acknowledged { + t.Errorf("expected IndicesCreateResult.Acknowledged %v; got %v", true, createIndex.Acknowledged) + } + + // Check if index exists + indexExists, err := client.IndexExists(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if !indexExists { + t.Fatalf("index %s should exist, but doesn't\n", testIndexName) + } + + // Delete index + deleteIndex, err := client.DeleteIndex(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if !deleteIndex.Acknowledged { + t.Errorf("expected DeleteIndexResult.Acknowledged %v; got %v", true, deleteIndex.Acknowledged) + } + + // Check if index exists + indexExists, err = client.IndexExists(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if indexExists { + t.Fatalf("index %s should not exist, but does\n", testIndexName) + } +} + +func TestIndicesCreateValidate(t *testing.T) { + client := setupTestClient(t) + + // No index name -> fail with error + res, err := NewIndicesCreateService(client).Body(testMapping).Do(context.TODO()) + if err == nil { + t.Fatalf("expected IndicesCreate to fail without index name") + } + if res != nil { + t.Fatalf("expected result to be == nil; got: %v", res) + } +} diff --git a/vendor/github.com/olivere/elastic/indices_delete.go b/vendor/github.com/olivere/elastic/indices_delete.go new file mode 100644 index 0000000..59567e2 --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_delete.go @@ -0,0 +1,133 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" + "strings" + + "github.com/olivere/elastic/uritemplates" +) + +// IndicesDeleteService allows to delete existing indices. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-delete-index.html +// for details. +type IndicesDeleteService struct { + client *Client + pretty bool + index []string + timeout string + masterTimeout string +} + +// NewIndicesDeleteService creates and initializes a new IndicesDeleteService. +func NewIndicesDeleteService(client *Client) *IndicesDeleteService { + return &IndicesDeleteService{ + client: client, + index: make([]string, 0), + } +} + +// Index adds the list of indices to delete. +// Use `_all` or `*` string to delete all indices. +func (s *IndicesDeleteService) Index(index []string) *IndicesDeleteService { + s.index = index + return s +} + +// Timeout is an explicit operation timeout. +func (s *IndicesDeleteService) Timeout(timeout string) *IndicesDeleteService { + s.timeout = timeout + return s +} + +// MasterTimeout specifies the timeout for connection to master. +func (s *IndicesDeleteService) MasterTimeout(masterTimeout string) *IndicesDeleteService { + s.masterTimeout = masterTimeout + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *IndicesDeleteService) Pretty(pretty bool) *IndicesDeleteService { + s.pretty = pretty + return s +} + +// buildURL builds the URL for the operation. +func (s *IndicesDeleteService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/{index}", map[string]string{ + "index": strings.Join(s.index, ","), + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.timeout != "" { + params.Set("timeout", s.timeout) + } + if s.masterTimeout != "" { + params.Set("master_timeout", s.masterTimeout) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *IndicesDeleteService) Validate() error { + var invalid []string + if len(s.index) == 0 { + invalid = append(invalid, "Index") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *IndicesDeleteService) Do(ctx context.Context) (*IndicesDeleteResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "DELETE", + Path: path, + Params: params, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(IndicesDeleteResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// -- Result of a delete index request. + +// IndicesDeleteResponse is the response of IndicesDeleteService.Do. +type IndicesDeleteResponse struct { + Acknowledged bool `json:"acknowledged"` +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/indices_delete_template.go b/vendor/github.com/olivere/elastic/indices_delete_template.go similarity index 81% rename from vendor/gopkg.in/olivere/elastic.v2/indices_delete_template.go rename to vendor/github.com/olivere/elastic/indices_delete_template.go index 75ebdf7..2a4c466 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/indices_delete_template.go +++ b/vendor/github.com/olivere/elastic/indices_delete_template.go @@ -1,18 +1,19 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. package elastic import ( + "context" "fmt" "net/url" - "gopkg.in/olivere/elastic.v2/uritemplates" + "github.com/olivere/elastic/uritemplates" ) // IndicesDeleteTemplateService deletes index templates. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/1.4/indices-templates.html. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-templates.html. type IndicesDeleteTemplateService struct { client *Client pretty bool @@ -65,7 +66,7 @@ func (s *IndicesDeleteTemplateService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "1") + params.Set("pretty", "true") } if s.timeout != "" { params.Set("timeout", s.timeout) @@ -89,7 +90,7 @@ func (s *IndicesDeleteTemplateService) Validate() error { } // Do executes the operation. -func (s *IndicesDeleteTemplateService) Do() (*IndicesDeleteTemplateResponse, error) { +func (s *IndicesDeleteTemplateService) Do(ctx context.Context) (*IndicesDeleteTemplateResponse, error) { // Check pre-conditions if err := s.Validate(); err != nil { return nil, err @@ -102,7 +103,11 @@ func (s *IndicesDeleteTemplateService) Do() (*IndicesDeleteTemplateResponse, err } // Get HTTP response - res, err := s.client.PerformRequest("DELETE", path, params, nil) + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "DELETE", + Path: path, + Params: params, + }) if err != nil { return nil, err } @@ -117,5 +122,7 @@ func (s *IndicesDeleteTemplateService) Do() (*IndicesDeleteTemplateResponse, err // IndicesDeleteTemplateResponse is the response of IndicesDeleteTemplateService.Do. type IndicesDeleteTemplateResponse struct { - Acknowledged bool `json:"acknowledged,omitempty"` + Acknowledged bool `json:"acknowledged"` + ShardsAcknowledged bool `json:"shards_acknowledged"` + Index string `json:"index,omitempty"` } diff --git a/vendor/github.com/olivere/elastic/indices_delete_test.go b/vendor/github.com/olivere/elastic/indices_delete_test.go new file mode 100644 index 0000000..db77c7a --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_delete_test.go @@ -0,0 +1,23 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "testing" +) + +func TestIndicesDeleteValidate(t *testing.T) { + client := setupTestClient(t) + + // No index name -> fail with error + res, err := NewIndicesDeleteService(client).Do(context.TODO()) + if err == nil { + t.Fatalf("expected IndicesDelete to fail without index name") + } + if res != nil { + t.Fatalf("expected result to be == nil; got: %v", res) + } +} diff --git a/vendor/github.com/olivere/elastic/indices_exists.go b/vendor/github.com/olivere/elastic/indices_exists.go new file mode 100644 index 0000000..737c31c --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_exists.go @@ -0,0 +1,155 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/http" + "net/url" + "strings" + + "github.com/olivere/elastic/uritemplates" +) + +// IndicesExistsService checks if an index or indices exist or not. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-exists.html +// for details. +type IndicesExistsService struct { + client *Client + pretty bool + index []string + ignoreUnavailable *bool + allowNoIndices *bool + expandWildcards string + local *bool +} + +// NewIndicesExistsService creates and initializes a new IndicesExistsService. +func NewIndicesExistsService(client *Client) *IndicesExistsService { + return &IndicesExistsService{ + client: client, + index: make([]string, 0), + } +} + +// Index is a list of one or more indices to check. +func (s *IndicesExistsService) Index(index []string) *IndicesExistsService { + s.index = index + return s +} + +// AllowNoIndices indicates whether to ignore if a wildcard indices expression +// resolves into no concrete indices. (This includes `_all` string or +// when no indices have been specified). +func (s *IndicesExistsService) AllowNoIndices(allowNoIndices bool) *IndicesExistsService { + s.allowNoIndices = &allowNoIndices + return s +} + +// ExpandWildcards indicates whether to expand wildcard expression to +// concrete indices that are open, closed or both. +func (s *IndicesExistsService) ExpandWildcards(expandWildcards string) *IndicesExistsService { + s.expandWildcards = expandWildcards + return s +} + +// Local, when set, returns local information and does not retrieve the state +// from master node (default: false). +func (s *IndicesExistsService) Local(local bool) *IndicesExistsService { + s.local = &local + return s +} + +// IgnoreUnavailable indicates whether specified concrete indices should be +// ignored when unavailable (missing or closed). +func (s *IndicesExistsService) IgnoreUnavailable(ignoreUnavailable bool) *IndicesExistsService { + s.ignoreUnavailable = &ignoreUnavailable + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *IndicesExistsService) Pretty(pretty bool) *IndicesExistsService { + s.pretty = pretty + return s +} + +// buildURL builds the URL for the operation. +func (s *IndicesExistsService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/{index}", map[string]string{ + "index": strings.Join(s.index, ","), + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.local != nil { + params.Set("local", fmt.Sprintf("%v", *s.local)) + } + if s.ignoreUnavailable != nil { + params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) + } + if s.allowNoIndices != nil { + params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) + } + if s.expandWildcards != "" { + params.Set("expand_wildcards", s.expandWildcards) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *IndicesExistsService) Validate() error { + var invalid []string + if len(s.index) == 0 { + invalid = append(invalid, "Index") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *IndicesExistsService) Do(ctx context.Context) (bool, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return false, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return false, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "HEAD", + Path: path, + Params: params, + IgnoreErrors: []int{404}, + }) + if err != nil { + return false, err + } + + // Return operation response + switch res.StatusCode { + case http.StatusOK: + return true, nil + case http.StatusNotFound: + return false, nil + default: + return false, fmt.Errorf("elastic: got HTTP code %d when it should have been either 200 or 404", res.StatusCode) + } +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/indices_exists_template.go b/vendor/github.com/olivere/elastic/indices_exists_template.go similarity index 75% rename from vendor/gopkg.in/olivere/elastic.v2/indices_exists_template.go rename to vendor/github.com/olivere/elastic/indices_exists_template.go index e96e9a1..40b06e8 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/indices_exists_template.go +++ b/vendor/github.com/olivere/elastic/indices_exists_template.go @@ -1,18 +1,20 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. package elastic import ( + "context" "fmt" + "net/http" "net/url" - "gopkg.in/olivere/elastic.v2/uritemplates" + "github.com/olivere/elastic/uritemplates" ) // IndicesExistsTemplateService checks if a given template exists. -// See http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates.html#indices-templates-exists +// See http://www.elastic.co/guide/en/elasticsearch/reference/5.2/indices-templates.html#indices-templates-exists // for documentation. type IndicesExistsTemplateService struct { client *Client @@ -60,7 +62,7 @@ func (s *IndicesExistsTemplateService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "1") + params.Set("pretty", "true") } if s.local != nil { params.Set("local", fmt.Sprintf("%v", *s.local)) @@ -81,7 +83,7 @@ func (s *IndicesExistsTemplateService) Validate() error { } // Do executes the operation. -func (s *IndicesExistsTemplateService) Do() (bool, error) { +func (s *IndicesExistsTemplateService) Do(ctx context.Context) (bool, error) { // Check pre-conditions if err := s.Validate(); err != nil { return false, err @@ -94,14 +96,23 @@ func (s *IndicesExistsTemplateService) Do() (bool, error) { } // Get HTTP response - res, err := s.client.PerformRequest("HEAD", path, params, nil) + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "HEAD", + Path: path, + Params: params, + IgnoreErrors: []int{404}, + }) if err != nil { return false, err } - if res.StatusCode == 200 { + + // Return operation response + switch res.StatusCode { + case http.StatusOK: return true, nil - } else if res.StatusCode == 404 { + case http.StatusNotFound: return false, nil + default: + return false, fmt.Errorf("elastic: got HTTP code %d when it should have been either 200 or 404", res.StatusCode) } - return false, fmt.Errorf("elastic: got HTTP code %d when it should have been either 200 or 404", res.StatusCode) } diff --git a/vendor/gopkg.in/olivere/elastic.v2/indices_exists_template_test.go b/vendor/github.com/olivere/elastic/indices_exists_template_test.go similarity index 77% rename from vendor/gopkg.in/olivere/elastic.v2/indices_exists_template_test.go rename to vendor/github.com/olivere/elastic/indices_exists_template_test.go index 32fb82a..a974429 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/indices_exists_template_test.go +++ b/vendor/github.com/olivere/elastic/indices_exists_template_test.go @@ -1,10 +1,11 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. package elastic import ( + "context" "testing" ) @@ -12,29 +13,28 @@ func TestIndexExistsTemplate(t *testing.T) { client := setupTestClientAndCreateIndex(t) tmpl := `{ - "template":"elastic-test*", + "index_patterns":["elastic-test*"], "settings":{ "number_of_shards":1, "number_of_replicas":0 }, "mappings":{ - "tweet":{ + "doc":{ "properties":{ "tags":{ - "type":"string" + "type":"keyword" }, "location":{ "type":"geo_point" }, "suggest_field":{ - "type":"completion", - "payloads":true + "type":"completion" } } } } }` - putres, err := client.IndexPutTemplate("elastic-template").BodyString(tmpl).Do() + putres, err := client.IndexPutTemplate("elastic-template").BodyString(tmpl).Do(context.TODO()) if err != nil { t.Fatalf("expected no error; got: %v", err) } @@ -46,10 +46,10 @@ func TestIndexExistsTemplate(t *testing.T) { } // Always delete template - defer client.IndexDeleteTemplate("elastic-template").Do() + defer client.IndexDeleteTemplate("elastic-template").Do(context.TODO()) // Check if template exists - exists, err := client.IndexTemplateExists("elastic-template").Do() + exists, err := client.IndexTemplateExists("elastic-template").Do(context.TODO()) if err != nil { t.Fatalf("expected no error; got: %v", err) } @@ -58,7 +58,7 @@ func TestIndexExistsTemplate(t *testing.T) { } // Get template - getres, err := client.IndexGetTemplate("elastic-template").Do() + getres, err := client.IndexGetTemplate("elastic-template").Do(context.TODO()) if err != nil { t.Fatalf("expected no error; got: %v", err) } diff --git a/vendor/github.com/olivere/elastic/indices_exists_test.go b/vendor/github.com/olivere/elastic/indices_exists_test.go new file mode 100644 index 0000000..07e3eb5 --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_exists_test.go @@ -0,0 +1,23 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "testing" +) + +func TestIndicesExistsWithoutIndex(t *testing.T) { + client := setupTestClient(t) + + // No index name -> fail with error + res, err := NewIndicesExistsService(client).Do(context.TODO()) + if err == nil { + t.Fatalf("expected IndicesExists to fail without index name") + } + if res != false { + t.Fatalf("expected result to be false; got: %v", res) + } +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/indices_exists_type.go b/vendor/github.com/olivere/elastic/indices_exists_type.go similarity index 76% rename from vendor/gopkg.in/olivere/elastic.v2/indices_exists_type.go rename to vendor/github.com/olivere/elastic/indices_exists_type.go index 257a2f0..76db6b3 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/indices_exists_type.go +++ b/vendor/github.com/olivere/elastic/indices_exists_type.go @@ -1,48 +1,50 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. package elastic import ( + "context" "fmt" + "net/http" "net/url" "strings" - "gopkg.in/olivere/elastic.v2/uritemplates" + "github.com/olivere/elastic/uritemplates" ) // IndicesExistsTypeService checks if one or more types exist in one or more indices. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-types-exists.html. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-types-exists.html +// for details. type IndicesExistsTypeService struct { client *Client pretty bool - index []string typ []string - allowNoIndices *bool + index []string expandWildcards string local *bool ignoreUnavailable *bool + allowNoIndices *bool } // NewIndicesExistsTypeService creates a new IndicesExistsTypeService. func NewIndicesExistsTypeService(client *Client) *IndicesExistsTypeService { return &IndicesExistsTypeService{ client: client, - index: make([]string, 0), - typ: make([]string, 0), } } // Index is a list of index names; use `_all` to check the types across all indices. -func (s *IndicesExistsTypeService) Index(index ...string) *IndicesExistsTypeService { - s.index = append(s.index, index...) +func (s *IndicesExistsTypeService) Index(indices ...string) *IndicesExistsTypeService { + s.index = append(s.index, indices...) return s } // Type is a list of document types to check. -func (s *IndicesExistsTypeService) Type(typ ...string) *IndicesExistsTypeService { - s.typ = append(s.typ, typ...) +func (s *IndicesExistsTypeService) Type(types ...string) *IndicesExistsTypeService { + s.typ = append(s.typ, types...) return s } @@ -83,14 +85,10 @@ func (s *IndicesExistsTypeService) Pretty(pretty bool) *IndicesExistsTypeService // buildURL builds the URL for the operation. func (s *IndicesExistsTypeService) buildURL() (string, url.Values, error) { - if err := s.Validate(); err != nil { - return "", url.Values{}, err - } - // Build URL - path, err := uritemplates.Expand("/{index}/{type}", map[string]string{ - "type": strings.Join(s.typ, ","), + path, err := uritemplates.Expand("/{index}/_mapping/{type}", map[string]string{ "index": strings.Join(s.index, ","), + "type": strings.Join(s.typ, ","), }) if err != nil { return "", url.Values{}, err @@ -99,13 +97,7 @@ func (s *IndicesExistsTypeService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "1") - } - if s.expandWildcards != "" { - params.Set("expand_wildcards", s.expandWildcards) - } - if s.local != nil { - params.Set("local", fmt.Sprintf("%v", *s.local)) + params.Set("pretty", "true") } if s.ignoreUnavailable != nil { params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) @@ -113,6 +105,12 @@ func (s *IndicesExistsTypeService) buildURL() (string, url.Values, error) { if s.allowNoIndices != nil { params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) } + if s.expandWildcards != "" { + params.Set("expand_wildcards", s.expandWildcards) + } + if s.local != nil { + params.Set("local", fmt.Sprintf("%v", *s.local)) + } return path, params, nil } @@ -132,7 +130,12 @@ func (s *IndicesExistsTypeService) Validate() error { } // Do executes the operation. -func (s *IndicesExistsTypeService) Do() (bool, error) { +func (s *IndicesExistsTypeService) Do(ctx context.Context) (bool, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return false, err + } + // Get URL for request path, params, err := s.buildURL() if err != nil { @@ -140,16 +143,23 @@ func (s *IndicesExistsTypeService) Do() (bool, error) { } // Get HTTP response - res, err := s.client.PerformRequest("HEAD", path, params, nil) + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "HEAD", + Path: path, + Params: params, + IgnoreErrors: []int{404}, + }) if err != nil { return false, err } // Return operation response - if res.StatusCode == 200 { + switch res.StatusCode { + case http.StatusOK: return true, nil - } else if res.StatusCode == 404 { + case http.StatusNotFound: return false, nil + default: + return false, fmt.Errorf("elastic: got HTTP code %d when it should have been either 200 or 404", res.StatusCode) } - return false, fmt.Errorf("elastic: got HTTP code %d when it should have been either 200 or 404", res.StatusCode) } diff --git a/vendor/github.com/olivere/elastic/indices_exists_type_test.go b/vendor/github.com/olivere/elastic/indices_exists_type_test.go new file mode 100644 index 0000000..3795bd0 --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_exists_type_test.go @@ -0,0 +1,135 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "testing" +) + +func TestIndicesExistsTypeBuildURL(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tests := []struct { + Indices []string + Types []string + Expected string + ExpectValidateFailure bool + }{ + { + []string{}, + []string{}, + "", + true, + }, + { + []string{"index1"}, + []string{}, + "", + true, + }, + { + []string{}, + []string{"type1"}, + "", + true, + }, + { + []string{"index1"}, + []string{"type1"}, + "/index1/_mapping/type1", + false, + }, + { + []string{"index1", "index2"}, + []string{"type1"}, + "/index1%2Cindex2/_mapping/type1", + false, + }, + { + []string{"index1", "index2"}, + []string{"type1", "type2"}, + "/index1%2Cindex2/_mapping/type1%2Ctype2", + false, + }, + } + + for i, test := range tests { + err := client.TypeExists().Index(test.Indices...).Type(test.Types...).Validate() + if err == nil && test.ExpectValidateFailure { + t.Errorf("#%d: expected validate to fail", i+1) + continue + } + if err != nil && !test.ExpectValidateFailure { + t.Errorf("#%d: expected validate to succeed", i+1) + continue + } + if !test.ExpectValidateFailure { + path, _, err := client.TypeExists().Index(test.Indices...).Type(test.Types...).buildURL() + if err != nil { + t.Fatalf("#%d: %v", i+1, err) + } + if path != test.Expected { + t.Errorf("#%d: expected %q; got: %q", i+1, test.Expected, path) + } + } + } +} + +func TestIndicesExistsType(t *testing.T) { + client := setupTestClient(t) + + // Create index with tweet type + createIndex, err := client.CreateIndex(testIndexName).Body(testMapping).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if createIndex == nil { + t.Errorf("expected result to be != nil; got: %v", createIndex) + } + if !createIndex.Acknowledged { + t.Errorf("expected CreateIndexResult.Acknowledged %v; got %v", true, createIndex.Acknowledged) + } + + // Check if type exists + exists, err := client.TypeExists().Index(testIndexName).Type("doc").Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if !exists { + t.Fatalf("type %s should exist in index %s, but doesn't\n", "doc", testIndexName) + } + + // Delete index + deleteIndex, err := client.DeleteIndex(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if !deleteIndex.Acknowledged { + t.Errorf("expected DeleteIndexResult.Acknowledged %v; got %v", true, deleteIndex.Acknowledged) + } + + // Check if type exists + exists, err = client.TypeExists().Index(testIndexName).Type("doc").Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if exists { + t.Fatalf("type %s should not exist in index %s, but it does\n", "doc", testIndexName) + } +} + +func TestIndicesExistsTypeValidate(t *testing.T) { + client := setupTestClient(t) + + // No index name -> fail with error + res, err := NewIndicesExistsTypeService(client).Do(context.TODO()) + if err == nil { + t.Fatalf("expected IndicesExistsType to fail without index name") + } + if res != false { + t.Fatalf("expected result to be false; got: %v", res) + } +} diff --git a/vendor/github.com/olivere/elastic/indices_flush.go b/vendor/github.com/olivere/elastic/indices_flush.go new file mode 100644 index 0000000..cf14e8e --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_flush.go @@ -0,0 +1,173 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" + "strings" + + "github.com/olivere/elastic/uritemplates" +) + +// Flush allows to flush one or more indices. The flush process of an index +// basically frees memory from the index by flushing data to the index +// storage and clearing the internal transaction log. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-flush.html +// for details. +type IndicesFlushService struct { + client *Client + pretty bool + index []string + force *bool + waitIfOngoing *bool + ignoreUnavailable *bool + allowNoIndices *bool + expandWildcards string +} + +// NewIndicesFlushService creates a new IndicesFlushService. +func NewIndicesFlushService(client *Client) *IndicesFlushService { + return &IndicesFlushService{ + client: client, + index: make([]string, 0), + } +} + +// Index is a list of index names; use `_all` or empty string for all indices. +func (s *IndicesFlushService) Index(indices ...string) *IndicesFlushService { + s.index = append(s.index, indices...) + return s +} + +// Force indicates whether a flush should be forced even if it is not +// necessarily needed ie. if no changes will be committed to the index. +// This is useful if transaction log IDs should be incremented even if +// no uncommitted changes are present. (This setting can be considered as internal). +func (s *IndicesFlushService) Force(force bool) *IndicesFlushService { + s.force = &force + return s +} + +// WaitIfOngoing, if set to true, indicates that the flush operation will +// block until the flush can be executed if another flush operation is +// already executing. The default is false and will cause an exception +// to be thrown on the shard level if another flush operation is already running.. +func (s *IndicesFlushService) WaitIfOngoing(waitIfOngoing bool) *IndicesFlushService { + s.waitIfOngoing = &waitIfOngoing + return s +} + +// IgnoreUnavailable indicates whether specified concrete indices should be +// ignored when unavailable (missing or closed). +func (s *IndicesFlushService) IgnoreUnavailable(ignoreUnavailable bool) *IndicesFlushService { + s.ignoreUnavailable = &ignoreUnavailable + return s +} + +// AllowNoIndices indicates whether to ignore if a wildcard indices expression +// resolves into no concrete indices. (This includes `_all` string or when +// no indices have been specified). +func (s *IndicesFlushService) AllowNoIndices(allowNoIndices bool) *IndicesFlushService { + s.allowNoIndices = &allowNoIndices + return s +} + +// ExpandWildcards specifies whether to expand wildcard expression to +// concrete indices that are open, closed or both.. +func (s *IndicesFlushService) ExpandWildcards(expandWildcards string) *IndicesFlushService { + s.expandWildcards = expandWildcards + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *IndicesFlushService) Pretty(pretty bool) *IndicesFlushService { + s.pretty = pretty + return s +} + +// buildURL builds the URL for the operation. +func (s *IndicesFlushService) buildURL() (string, url.Values, error) { + // Build URL + var err error + var path string + + if len(s.index) > 0 { + path, err = uritemplates.Expand("/{index}/_flush", map[string]string{ + "index": strings.Join(s.index, ","), + }) + } else { + path = "/_flush" + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.force != nil { + params.Set("force", fmt.Sprintf("%v", *s.force)) + } + if s.waitIfOngoing != nil { + params.Set("wait_if_ongoing", fmt.Sprintf("%v", *s.waitIfOngoing)) + } + if s.ignoreUnavailable != nil { + params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) + } + if s.allowNoIndices != nil { + params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) + } + if s.expandWildcards != "" { + params.Set("expand_wildcards", s.expandWildcards) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *IndicesFlushService) Validate() error { + return nil +} + +// Do executes the service. +func (s *IndicesFlushService) Do(ctx context.Context) (*IndicesFlushResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(IndicesFlushResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// -- Result of a flush request. + +type IndicesFlushResponse struct { + Shards shardsInfo `json:"_shards"` +} diff --git a/vendor/github.com/olivere/elastic/indices_flush_test.go b/vendor/github.com/olivere/elastic/indices_flush_test.go new file mode 100644 index 0000000..afefd12 --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_flush_test.go @@ -0,0 +1,70 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "testing" +) + +func TestFlush(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + // Flush all indices + res, err := client.Flush().Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if res == nil { + t.Errorf("expected res to be != nil; got: %v", res) + } +} + +func TestFlushBuildURL(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tests := []struct { + Indices []string + Expected string + ExpectValidateFailure bool + }{ + { + []string{}, + "/_flush", + false, + }, + { + []string{"index1"}, + "/index1/_flush", + false, + }, + { + []string{"index1", "index2"}, + "/index1%2Cindex2/_flush", + false, + }, + } + + for i, test := range tests { + err := NewIndicesFlushService(client).Index(test.Indices...).Validate() + if err == nil && test.ExpectValidateFailure { + t.Errorf("case #%d: expected validate to fail", i+1) + continue + } + if err != nil && !test.ExpectValidateFailure { + t.Errorf("case #%d: expected validate to succeed", i+1) + continue + } + if !test.ExpectValidateFailure { + path, _, err := NewIndicesFlushService(client).Index(test.Indices...).buildURL() + if err != nil { + t.Fatalf("case #%d: %v", i+1, err) + } + if path != test.Expected { + t.Errorf("case #%d: expected %q; got: %q", i+1, test.Expected, path) + } + } + } +} diff --git a/vendor/github.com/olivere/elastic/indices_forcemerge.go b/vendor/github.com/olivere/elastic/indices_forcemerge.go new file mode 100644 index 0000000..0e999cf --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_forcemerge.go @@ -0,0 +1,193 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" + "strings" + + "github.com/olivere/elastic/uritemplates" +) + +// IndicesForcemergeService allows to force merging of one or more indices. +// The merge relates to the number of segments a Lucene index holds +// within each shard. The force merge operation allows to reduce the number +// of segments by merging them. +// +// See http://www.elastic.co/guide/en/elasticsearch/reference/5.2/indices-forcemerge.html +// for more information. +type IndicesForcemergeService struct { + client *Client + pretty bool + index []string + allowNoIndices *bool + expandWildcards string + flush *bool + ignoreUnavailable *bool + maxNumSegments interface{} + onlyExpungeDeletes *bool + operationThreading interface{} +} + +// NewIndicesForcemergeService creates a new IndicesForcemergeService. +func NewIndicesForcemergeService(client *Client) *IndicesForcemergeService { + return &IndicesForcemergeService{ + client: client, + index: make([]string, 0), + } +} + +// Index is a list of index names; use `_all` or empty string to perform +// the operation on all indices. +func (s *IndicesForcemergeService) Index(index ...string) *IndicesForcemergeService { + if s.index == nil { + s.index = make([]string, 0) + } + s.index = append(s.index, index...) + return s +} + +// AllowNoIndices indicates whether to ignore if a wildcard indices +// expression resolves into no concrete indices. +// (This includes `_all` string or when no indices have been specified). +func (s *IndicesForcemergeService) AllowNoIndices(allowNoIndices bool) *IndicesForcemergeService { + s.allowNoIndices = &allowNoIndices + return s +} + +// ExpandWildcards indicates whether to expand wildcard expression to +// concrete indices that are open, closed or both.. +func (s *IndicesForcemergeService) ExpandWildcards(expandWildcards string) *IndicesForcemergeService { + s.expandWildcards = expandWildcards + return s +} + +// Flush specifies whether the index should be flushed after performing +// the operation (default: true). +func (s *IndicesForcemergeService) Flush(flush bool) *IndicesForcemergeService { + s.flush = &flush + return s +} + +// IgnoreUnavailable indicates whether specified concrete indices should +// be ignored when unavailable (missing or closed). +func (s *IndicesForcemergeService) IgnoreUnavailable(ignoreUnavailable bool) *IndicesForcemergeService { + s.ignoreUnavailable = &ignoreUnavailable + return s +} + +// MaxNumSegments specifies the number of segments the index should be +// merged into (default: dynamic). +func (s *IndicesForcemergeService) MaxNumSegments(maxNumSegments interface{}) *IndicesForcemergeService { + s.maxNumSegments = maxNumSegments + return s +} + +// OnlyExpungeDeletes specifies whether the operation should only expunge +// deleted documents. +func (s *IndicesForcemergeService) OnlyExpungeDeletes(onlyExpungeDeletes bool) *IndicesForcemergeService { + s.onlyExpungeDeletes = &onlyExpungeDeletes + return s +} + +func (s *IndicesForcemergeService) OperationThreading(operationThreading interface{}) *IndicesForcemergeService { + s.operationThreading = operationThreading + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *IndicesForcemergeService) Pretty(pretty bool) *IndicesForcemergeService { + s.pretty = pretty + return s +} + +// buildURL builds the URL for the operation. +func (s *IndicesForcemergeService) buildURL() (string, url.Values, error) { + var err error + var path string + + // Build URL + if len(s.index) > 0 { + path, err = uritemplates.Expand("/{index}/_forcemerge", map[string]string{ + "index": strings.Join(s.index, ","), + }) + } else { + path = "/_forcemerge" + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.allowNoIndices != nil { + params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) + } + if s.expandWildcards != "" { + params.Set("expand_wildcards", s.expandWildcards) + } + if s.flush != nil { + params.Set("flush", fmt.Sprintf("%v", *s.flush)) + } + if s.ignoreUnavailable != nil { + params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) + } + if s.maxNumSegments != nil { + params.Set("max_num_segments", fmt.Sprintf("%v", s.maxNumSegments)) + } + if s.onlyExpungeDeletes != nil { + params.Set("only_expunge_deletes", fmt.Sprintf("%v", *s.onlyExpungeDeletes)) + } + if s.operationThreading != nil { + params.Set("operation_threading", fmt.Sprintf("%v", s.operationThreading)) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *IndicesForcemergeService) Validate() error { + return nil +} + +// Do executes the operation. +func (s *IndicesForcemergeService) Do(ctx context.Context) (*IndicesForcemergeResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(IndicesForcemergeResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// IndicesForcemergeResponse is the response of IndicesForcemergeService.Do. +type IndicesForcemergeResponse struct { + Shards shardsInfo `json:"_shards"` +} diff --git a/vendor/github.com/olivere/elastic/indices_forcemerge_test.go b/vendor/github.com/olivere/elastic/indices_forcemerge_test.go new file mode 100644 index 0000000..6615d4d --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_forcemerge_test.go @@ -0,0 +1,57 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "testing" +) + +func TestIndicesForcemergeBuildURL(t *testing.T) { + client := setupTestClient(t) + + tests := []struct { + Indices []string + Expected string + }{ + { + []string{}, + "/_forcemerge", + }, + { + []string{"index1"}, + "/index1/_forcemerge", + }, + { + []string{"index1", "index2"}, + "/index1%2Cindex2/_forcemerge", + }, + } + + for i, test := range tests { + path, _, err := client.Forcemerge().Index(test.Indices...).buildURL() + if err != nil { + t.Errorf("case #%d: %v", i+1, err) + continue + } + if path != test.Expected { + t.Errorf("case #%d: expected %q; got: %q", i+1, test.Expected, path) + } + } +} + +func TestIndicesForcemerge(t *testing.T) { + client := setupTestClientAndCreateIndexAndAddDocs(t) + + _, err := client.Forcemerge(testIndexName).MaxNumSegments(1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + /* + if !ok { + t.Fatalf("expected forcemerge to succeed; got: %v", ok) + } + */ +} diff --git a/vendor/github.com/olivere/elastic/indices_get.go b/vendor/github.com/olivere/elastic/indices_get.go new file mode 100644 index 0000000..204703d --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_get.go @@ -0,0 +1,206 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" + "strings" + + "github.com/olivere/elastic/uritemplates" +) + +// IndicesGetService retrieves information about one or more indices. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-get-index.html +// for more details. +type IndicesGetService struct { + client *Client + pretty bool + index []string + feature []string + local *bool + ignoreUnavailable *bool + allowNoIndices *bool + expandWildcards string + flatSettings *bool + human *bool +} + +// NewIndicesGetService creates a new IndicesGetService. +func NewIndicesGetService(client *Client) *IndicesGetService { + return &IndicesGetService{ + client: client, + index: make([]string, 0), + feature: make([]string, 0), + } +} + +// Index is a list of index names. +func (s *IndicesGetService) Index(indices ...string) *IndicesGetService { + s.index = append(s.index, indices...) + return s +} + +// Feature is a list of features. +func (s *IndicesGetService) Feature(features ...string) *IndicesGetService { + s.feature = append(s.feature, features...) + return s +} + +// Local indicates whether to return local information, i.e. do not retrieve +// the state from master node (default: false). +func (s *IndicesGetService) Local(local bool) *IndicesGetService { + s.local = &local + return s +} + +// IgnoreUnavailable indicates whether to ignore unavailable indexes (default: false). +func (s *IndicesGetService) IgnoreUnavailable(ignoreUnavailable bool) *IndicesGetService { + s.ignoreUnavailable = &ignoreUnavailable + return s +} + +// AllowNoIndices indicates whether to ignore if a wildcard expression +// resolves to no concrete indices (default: false). +func (s *IndicesGetService) AllowNoIndices(allowNoIndices bool) *IndicesGetService { + s.allowNoIndices = &allowNoIndices + return s +} + +// ExpandWildcards indicates whether wildcard expressions should get +// expanded to open or closed indices (default: open). +func (s *IndicesGetService) ExpandWildcards(expandWildcards string) *IndicesGetService { + s.expandWildcards = expandWildcards + return s +} + +/* Disabled because serialization would fail in that case. */ +/* +// FlatSettings make the service return settings in flat format (default: false). +func (s *IndicesGetService) FlatSettings(flatSettings bool) *IndicesGetService { + s.flatSettings = &flatSettings + return s +} +*/ + +// Human indicates whether to return version and creation date values +// in human-readable format (default: false). +func (s *IndicesGetService) Human(human bool) *IndicesGetService { + s.human = &human + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *IndicesGetService) Pretty(pretty bool) *IndicesGetService { + s.pretty = pretty + return s +} + +// buildURL builds the URL for the operation. +func (s *IndicesGetService) buildURL() (string, url.Values, error) { + var err error + var path string + var index []string + + if len(s.index) > 0 { + index = s.index + } else { + index = []string{"_all"} + } + + if len(s.feature) > 0 { + // Build URL + path, err = uritemplates.Expand("/{index}/{feature}", map[string]string{ + "index": strings.Join(index, ","), + "feature": strings.Join(s.feature, ","), + }) + } else { + // Build URL + path, err = uritemplates.Expand("/{index}", map[string]string{ + "index": strings.Join(index, ","), + }) + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.expandWildcards != "" { + params.Set("expand_wildcards", s.expandWildcards) + } + if s.flatSettings != nil { + params.Set("flat_settings", fmt.Sprintf("%v", *s.flatSettings)) + } + if s.human != nil { + params.Set("human", fmt.Sprintf("%v", *s.human)) + } + if s.local != nil { + params.Set("local", fmt.Sprintf("%v", *s.local)) + } + if s.ignoreUnavailable != nil { + params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) + } + if s.allowNoIndices != nil { + params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *IndicesGetService) Validate() error { + var invalid []string + if len(s.index) == 0 { + invalid = append(invalid, "Index") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *IndicesGetService) Do(ctx context.Context) (map[string]*IndicesGetResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + }) + if err != nil { + return nil, err + } + + // Return operation response + var ret map[string]*IndicesGetResponse + if err := s.client.decoder.Decode(res.Body, &ret); err != nil { + return nil, err + } + return ret, nil +} + +// IndicesGetResponse is part of the response of IndicesGetService.Do. +type IndicesGetResponse struct { + Aliases map[string]interface{} `json:"aliases"` + Mappings map[string]interface{} `json:"mappings"` + Settings map[string]interface{} `json:"settings"` + Warmers map[string]interface{} `json:"warmers"` +} diff --git a/vendor/github.com/olivere/elastic/indices_get_aliases.go b/vendor/github.com/olivere/elastic/indices_get_aliases.go new file mode 100644 index 0000000..68b1863 --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_get_aliases.go @@ -0,0 +1,161 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" + "strings" + + "github.com/olivere/elastic/uritemplates" +) + +// AliasesService returns the aliases associated with one or more indices. +// See http://www.elastic.co/guide/en/elasticsearch/reference/5.2/indices-aliases.html. +type AliasesService struct { + client *Client + index []string + pretty bool +} + +// NewAliasesService instantiates a new AliasesService. +func NewAliasesService(client *Client) *AliasesService { + builder := &AliasesService{ + client: client, + } + return builder +} + +// Pretty asks Elasticsearch to indent the returned JSON. +func (s *AliasesService) Pretty(pretty bool) *AliasesService { + s.pretty = pretty + return s +} + +// Index adds one or more indices. +func (s *AliasesService) Index(index ...string) *AliasesService { + s.index = append(s.index, index...) + return s +} + +// buildURL builds the URL for the operation. +func (s *AliasesService) buildURL() (string, url.Values, error) { + var err error + var path string + + if len(s.index) > 0 { + path, err = uritemplates.Expand("/{index}/_alias", map[string]string{ + "index": strings.Join(s.index, ","), + }) + } else { + path = "/_alias" + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", fmt.Sprintf("%v", s.pretty)) + } + return path, params, nil +} + +func (s *AliasesService) Do(ctx context.Context) (*AliasesResult, error) { + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + }) + if err != nil { + return nil, err + } + + // { + // "indexName" : { + // "aliases" : { + // "alias1" : { }, + // "alias2" : { } + // } + // }, + // "indexName2" : { + // ... + // }, + // } + indexMap := make(map[string]interface{}) + if err := s.client.decoder.Decode(res.Body, &indexMap); err != nil { + return nil, err + } + + // Each (indexName, _) + ret := &AliasesResult{ + Indices: make(map[string]indexResult), + } + for indexName, indexData := range indexMap { + indexOut, found := ret.Indices[indexName] + if !found { + indexOut = indexResult{Aliases: make([]aliasResult, 0)} + } + + // { "aliases" : { ... } } + indexDataMap, ok := indexData.(map[string]interface{}) + if ok { + aliasesData, ok := indexDataMap["aliases"].(map[string]interface{}) + if ok { + for aliasName, _ := range aliasesData { + aliasRes := aliasResult{AliasName: aliasName} + indexOut.Aliases = append(indexOut.Aliases, aliasRes) + } + } + } + + ret.Indices[indexName] = indexOut + } + + return ret, nil +} + +// -- Result of an alias request. + +type AliasesResult struct { + Indices map[string]indexResult +} + +type indexResult struct { + Aliases []aliasResult +} + +type aliasResult struct { + AliasName string +} + +func (ar AliasesResult) IndicesByAlias(aliasName string) []string { + var indices []string + for indexName, indexInfo := range ar.Indices { + for _, aliasInfo := range indexInfo.Aliases { + if aliasInfo.AliasName == aliasName { + indices = append(indices, indexName) + } + } + } + return indices +} + +func (ir indexResult) HasAlias(aliasName string) bool { + for _, alias := range ir.Aliases { + if alias.AliasName == aliasName { + return true + } + } + return false +} diff --git a/vendor/github.com/olivere/elastic/indices_get_aliases_test.go b/vendor/github.com/olivere/elastic/indices_get_aliases_test.go new file mode 100644 index 0000000..2c8da9b --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_get_aliases_test.go @@ -0,0 +1,181 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "testing" +) + +func TestAliasesBuildURL(t *testing.T) { + client := setupTestClient(t) + + tests := []struct { + Indices []string + Expected string + }{ + { + []string{}, + "/_alias", + }, + { + []string{"index1"}, + "/index1/_alias", + }, + { + []string{"index1", "index2"}, + "/index1%2Cindex2/_alias", + }, + } + + for i, test := range tests { + path, _, err := client.Aliases().Index(test.Indices...).buildURL() + if err != nil { + t.Errorf("case #%d: %v", i+1, err) + continue + } + if path != test.Expected { + t.Errorf("case #%d: expected %q; got: %q", i+1, test.Expected, path) + } + } +} + +func TestAliases(t *testing.T) { + var err error + + //client := setupTestClientAndCreateIndex(t, SetTraceLog(log.New(os.Stdout, "", 0))) + client := setupTestClientAndCreateIndex(t) + + // Some tweets + tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} + tweet2 := tweet{User: "sandrae", Message: "Cycling is fun."} + tweet3 := tweet{User: "olivere", Message: "Another unrelated topic."} + + // Add tweets to first index + _, err = client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + // Add tweets to second index + _, err = client.Index().Index(testIndexName2).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Flush + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + _, err = client.Flush().Index(testIndexName2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Alias should not yet exist + aliasesResult1, err := client.Aliases(). + Index(testIndexName, testIndexName2). + Pretty(true). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if len(aliasesResult1.Indices) != 2 { + t.Errorf("expected len(AliasesResult.Indices) = %d; got %d", 2, len(aliasesResult1.Indices)) + } + for indexName, indexDetails := range aliasesResult1.Indices { + if len(indexDetails.Aliases) != 0 { + t.Errorf("expected len(AliasesResult.Indices[%s].Aliases) = %d; got %d", indexName, 0, len(indexDetails.Aliases)) + } + } + + // Add both indices to a new alias + aliasCreate, err := client.Alias(). + Add(testIndexName, testAliasName). + Add(testIndexName2, testAliasName). + //Pretty(true). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if !aliasCreate.Acknowledged { + t.Errorf("expected AliasResult.Acknowledged %v; got %v", true, aliasCreate.Acknowledged) + } + + // Alias should now exist + aliasesResult2, err := client.Aliases(). + Index(testIndexName, testIndexName2). + //Pretty(true). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if len(aliasesResult2.Indices) != 2 { + t.Errorf("expected len(AliasesResult.Indices) = %d; got %d", 2, len(aliasesResult2.Indices)) + } + for indexName, indexDetails := range aliasesResult2.Indices { + if len(indexDetails.Aliases) != 1 { + t.Errorf("expected len(AliasesResult.Indices[%s].Aliases) = %d; got %d", indexName, 1, len(indexDetails.Aliases)) + } + } + + // Check the reverse function: + indexInfo1, found := aliasesResult2.Indices[testIndexName] + if !found { + t.Errorf("expected info about index %s = %v; got %v", testIndexName, true, found) + } + aliasFound := indexInfo1.HasAlias(testAliasName) + if !aliasFound { + t.Errorf("expected alias %s to include index %s; got %v", testAliasName, testIndexName, aliasFound) + } + + // Check the reverse function: + indexInfo2, found := aliasesResult2.Indices[testIndexName2] + if !found { + t.Errorf("expected info about index %s = %v; got %v", testIndexName, true, found) + } + aliasFound = indexInfo2.HasAlias(testAliasName) + if !aliasFound { + t.Errorf("expected alias %s to include index %s; got %v", testAliasName, testIndexName2, aliasFound) + } + + // Remove first index should remove two tweets, so should only yield 1 + aliasRemove1, err := client.Alias(). + Remove(testIndexName, testAliasName). + //Pretty(true). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if !aliasRemove1.Acknowledged { + t.Errorf("expected AliasResult.Acknowledged %v; got %v", true, aliasRemove1.Acknowledged) + } + + // Alias should now exist only for index 2 + aliasesResult3, err := client.Aliases().Index(testIndexName, testIndexName2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if len(aliasesResult3.Indices) != 2 { + t.Errorf("expected len(AliasesResult.Indices) = %d; got %d", 2, len(aliasesResult3.Indices)) + } + for indexName, indexDetails := range aliasesResult3.Indices { + if indexName == testIndexName { + if len(indexDetails.Aliases) != 0 { + t.Errorf("expected len(AliasesResult.Indices[%s].Aliases) = %d; got %d", indexName, 0, len(indexDetails.Aliases)) + } + } else if indexName == testIndexName2 { + if len(indexDetails.Aliases) != 1 { + t.Errorf("expected len(AliasesResult.Indices[%s].Aliases) = %d; got %d", indexName, 1, len(indexDetails.Aliases)) + } + } else { + t.Errorf("got index %s", indexName) + } + } +} diff --git a/vendor/github.com/olivere/elastic/indices_get_field_mapping.go b/vendor/github.com/olivere/elastic/indices_get_field_mapping.go new file mode 100644 index 0000000..20f0196 --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_get_field_mapping.go @@ -0,0 +1,187 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" + "strings" + + "github.com/olivere/elastic/uritemplates" +) + +// IndicesGetFieldMappingService retrieves the mapping definitions for the fields in an index +// or index/type. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-get-field-mapping.html +// for details. +type IndicesGetFieldMappingService struct { + client *Client + pretty bool + index []string + typ []string + field []string + local *bool + ignoreUnavailable *bool + allowNoIndices *bool + expandWildcards string +} + +// NewGetFieldMappingService is an alias for NewIndicesGetFieldMappingService. +// Use NewIndicesGetFieldMappingService. +func NewGetFieldMappingService(client *Client) *IndicesGetFieldMappingService { + return NewIndicesGetFieldMappingService(client) +} + +// NewIndicesGetFieldMappingService creates a new IndicesGetFieldMappingService. +func NewIndicesGetFieldMappingService(client *Client) *IndicesGetFieldMappingService { + return &IndicesGetFieldMappingService{ + client: client, + } +} + +// Index is a list of index names. +func (s *IndicesGetFieldMappingService) Index(indices ...string) *IndicesGetFieldMappingService { + s.index = append(s.index, indices...) + return s +} + +// Type is a list of document types. +func (s *IndicesGetFieldMappingService) Type(types ...string) *IndicesGetFieldMappingService { + s.typ = append(s.typ, types...) + return s +} + +// Field is a list of fields. +func (s *IndicesGetFieldMappingService) Field(fields ...string) *IndicesGetFieldMappingService { + s.field = append(s.field, fields...) + return s +} + +// AllowNoIndices indicates whether to ignore if a wildcard indices +// expression resolves into no concrete indices. +// This includes `_all` string or when no indices have been specified. +func (s *IndicesGetFieldMappingService) AllowNoIndices(allowNoIndices bool) *IndicesGetFieldMappingService { + s.allowNoIndices = &allowNoIndices + return s +} + +// ExpandWildcards indicates whether to expand wildcard expression to +// concrete indices that are open, closed or both.. +func (s *IndicesGetFieldMappingService) ExpandWildcards(expandWildcards string) *IndicesGetFieldMappingService { + s.expandWildcards = expandWildcards + return s +} + +// Local indicates whether to return local information, do not retrieve +// the state from master node (default: false). +func (s *IndicesGetFieldMappingService) Local(local bool) *IndicesGetFieldMappingService { + s.local = &local + return s +} + +// IgnoreUnavailable indicates whether specified concrete indices should be +// ignored when unavailable (missing or closed). +func (s *IndicesGetFieldMappingService) IgnoreUnavailable(ignoreUnavailable bool) *IndicesGetFieldMappingService { + s.ignoreUnavailable = &ignoreUnavailable + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *IndicesGetFieldMappingService) Pretty(pretty bool) *IndicesGetFieldMappingService { + s.pretty = pretty + return s +} + +// buildURL builds the URL for the operation. +func (s *IndicesGetFieldMappingService) buildURL() (string, url.Values, error) { + var index, typ, field []string + + if len(s.index) > 0 { + index = s.index + } else { + index = []string{"_all"} + } + + if len(s.typ) > 0 { + typ = s.typ + } else { + typ = []string{"_all"} + } + + if len(s.field) > 0 { + field = s.field + } else { + field = []string{"*"} + } + + // Build URL + path, err := uritemplates.Expand("/{index}/_mapping/{type}/field/{field}", map[string]string{ + "index": strings.Join(index, ","), + "type": strings.Join(typ, ","), + "field": strings.Join(field, ","), + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.ignoreUnavailable != nil { + params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) + } + if s.allowNoIndices != nil { + params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) + } + if s.expandWildcards != "" { + params.Set("expand_wildcards", s.expandWildcards) + } + if s.local != nil { + params.Set("local", fmt.Sprintf("%v", *s.local)) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *IndicesGetFieldMappingService) Validate() error { + return nil +} + +// Do executes the operation. It returns mapping definitions for an index +// or index/type. +func (s *IndicesGetFieldMappingService) Do(ctx context.Context) (map[string]interface{}, error) { + var ret map[string]interface{} + + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + }) + if err != nil { + return nil, err + } + + // Return operation response + if err := s.client.decoder.Decode(res.Body, &ret); err != nil { + return nil, err + } + return ret, nil +} diff --git a/vendor/github.com/olivere/elastic/indices_get_field_mapping_test.go b/vendor/github.com/olivere/elastic/indices_get_field_mapping_test.go new file mode 100644 index 0000000..62770e0 --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_get_field_mapping_test.go @@ -0,0 +1,55 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "testing" +) + +func TestIndicesGetFieldMappingURL(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tests := []struct { + Indices []string + Types []string + Fields []string + Expected string + }{ + { + []string{}, + []string{}, + []string{}, + "/_all/_mapping/_all/field/%2A", + }, + { + []string{}, + []string{"tweet"}, + []string{"message"}, + "/_all/_mapping/tweet/field/message", + }, + { + []string{"twitter"}, + []string{"tweet"}, + []string{"*.id"}, + "/twitter/_mapping/tweet/field/%2A.id", + }, + { + []string{"store-1", "store-2"}, + []string{"tweet", "user"}, + []string{"message", "*.id"}, + "/store-1%2Cstore-2/_mapping/tweet%2Cuser/field/message%2C%2A.id", + }, + } + + for _, test := range tests { + path, _, err := client.GetFieldMapping().Index(test.Indices...).Type(test.Types...).Field(test.Fields...).buildURL() + if err != nil { + t.Fatal(err) + } + if path != test.Expected { + t.Errorf("expected %q; got: %q", test.Expected, path) + } + } +} diff --git a/vendor/github.com/olivere/elastic/indices_get_mapping.go b/vendor/github.com/olivere/elastic/indices_get_mapping.go new file mode 100644 index 0000000..2533ede --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_get_mapping.go @@ -0,0 +1,174 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" + "strings" + + "github.com/olivere/elastic/uritemplates" +) + +// IndicesGetMappingService retrieves the mapping definitions for an index or +// index/type. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-get-mapping.html +// for details. +type IndicesGetMappingService struct { + client *Client + pretty bool + index []string + typ []string + local *bool + ignoreUnavailable *bool + allowNoIndices *bool + expandWildcards string +} + +// NewGetMappingService is an alias for NewIndicesGetMappingService. +// Use NewIndicesGetMappingService. +func NewGetMappingService(client *Client) *IndicesGetMappingService { + return NewIndicesGetMappingService(client) +} + +// NewIndicesGetMappingService creates a new IndicesGetMappingService. +func NewIndicesGetMappingService(client *Client) *IndicesGetMappingService { + return &IndicesGetMappingService{ + client: client, + index: make([]string, 0), + typ: make([]string, 0), + } +} + +// Index is a list of index names. +func (s *IndicesGetMappingService) Index(indices ...string) *IndicesGetMappingService { + s.index = append(s.index, indices...) + return s +} + +// Type is a list of document types. +func (s *IndicesGetMappingService) Type(types ...string) *IndicesGetMappingService { + s.typ = append(s.typ, types...) + return s +} + +// AllowNoIndices indicates whether to ignore if a wildcard indices +// expression resolves into no concrete indices. +// This includes `_all` string or when no indices have been specified. +func (s *IndicesGetMappingService) AllowNoIndices(allowNoIndices bool) *IndicesGetMappingService { + s.allowNoIndices = &allowNoIndices + return s +} + +// ExpandWildcards indicates whether to expand wildcard expression to +// concrete indices that are open, closed or both.. +func (s *IndicesGetMappingService) ExpandWildcards(expandWildcards string) *IndicesGetMappingService { + s.expandWildcards = expandWildcards + return s +} + +// Local indicates whether to return local information, do not retrieve +// the state from master node (default: false). +func (s *IndicesGetMappingService) Local(local bool) *IndicesGetMappingService { + s.local = &local + return s +} + +// IgnoreUnavailable indicates whether specified concrete indices should be +// ignored when unavailable (missing or closed). +func (s *IndicesGetMappingService) IgnoreUnavailable(ignoreUnavailable bool) *IndicesGetMappingService { + s.ignoreUnavailable = &ignoreUnavailable + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *IndicesGetMappingService) Pretty(pretty bool) *IndicesGetMappingService { + s.pretty = pretty + return s +} + +// buildURL builds the URL for the operation. +func (s *IndicesGetMappingService) buildURL() (string, url.Values, error) { + var index, typ []string + + if len(s.index) > 0 { + index = s.index + } else { + index = []string{"_all"} + } + + if len(s.typ) > 0 { + typ = s.typ + } else { + typ = []string{"_all"} + } + + // Build URL + path, err := uritemplates.Expand("/{index}/_mapping/{type}", map[string]string{ + "index": strings.Join(index, ","), + "type": strings.Join(typ, ","), + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.ignoreUnavailable != nil { + params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) + } + if s.allowNoIndices != nil { + params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) + } + if s.expandWildcards != "" { + params.Set("expand_wildcards", s.expandWildcards) + } + if s.local != nil { + params.Set("local", fmt.Sprintf("%v", *s.local)) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *IndicesGetMappingService) Validate() error { + return nil +} + +// Do executes the operation. It returns mapping definitions for an index +// or index/type. +func (s *IndicesGetMappingService) Do(ctx context.Context) (map[string]interface{}, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + }) + if err != nil { + return nil, err + } + + // Return operation response + var ret map[string]interface{} + if err := s.client.decoder.Decode(res.Body, &ret); err != nil { + return nil, err + } + return ret, nil +} diff --git a/vendor/github.com/olivere/elastic/indices_get_mapping_test.go b/vendor/github.com/olivere/elastic/indices_get_mapping_test.go new file mode 100644 index 0000000..5ec54e7 --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_get_mapping_test.go @@ -0,0 +1,50 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "testing" +) + +func TestIndicesGetMappingURL(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tests := []struct { + Indices []string + Types []string + Expected string + }{ + { + []string{}, + []string{}, + "/_all/_mapping/_all", + }, + { + []string{}, + []string{"tweet"}, + "/_all/_mapping/tweet", + }, + { + []string{"twitter"}, + []string{"tweet"}, + "/twitter/_mapping/tweet", + }, + { + []string{"store-1", "store-2"}, + []string{"tweet", "user"}, + "/store-1%2Cstore-2/_mapping/tweet%2Cuser", + }, + } + + for _, test := range tests { + path, _, err := client.GetMapping().Index(test.Indices...).Type(test.Types...).buildURL() + if err != nil { + t.Fatal(err) + } + if path != test.Expected { + t.Errorf("expected %q; got: %q", test.Expected, path) + } + } +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/indices_get_settings.go b/vendor/github.com/olivere/elastic/indices_get_settings.go similarity index 87% rename from vendor/gopkg.in/olivere/elastic.v2/indices_get_settings.go rename to vendor/github.com/olivere/elastic/indices_get_settings.go index 730a0c7..d63afce 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/indices_get_settings.go +++ b/vendor/github.com/olivere/elastic/indices_get_settings.go @@ -1,20 +1,23 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. package elastic import ( + "context" "fmt" "net/url" "strings" - "gopkg.in/olivere/elastic.v2/uritemplates" + "github.com/olivere/elastic/uritemplates" ) // IndicesGetSettingsService allows to retrieve settings of one // or more indices. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/1.4/indices-get-settings.html. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-get-settings.html +// for more details. type IndicesGetSettingsService struct { client *Client pretty bool @@ -36,9 +39,10 @@ func NewIndicesGetSettingsService(client *Client) *IndicesGetSettingsService { } } -// Index is a list of index names; use `_all` or empty string to perform the operation on all indices. -func (s *IndicesGetSettingsService) Index(index ...string) *IndicesGetSettingsService { - s.index = append(s.index, index...) +// Index is a list of index names; use `_all` or empty string to perform +// the operation on all indices. +func (s *IndicesGetSettingsService) Index(indices ...string) *IndicesGetSettingsService { + s.index = append(s.index, indices...) return s } @@ -121,7 +125,7 @@ func (s *IndicesGetSettingsService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "1") + params.Set("pretty", "true") } if s.ignoreUnavailable != nil { params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) @@ -147,7 +151,7 @@ func (s *IndicesGetSettingsService) Validate() error { } // Do executes the operation. -func (s *IndicesGetSettingsService) Do() (map[string]*IndicesGetSettingsResponse, error) { +func (s *IndicesGetSettingsService) Do(ctx context.Context) (map[string]*IndicesGetSettingsResponse, error) { // Check pre-conditions if err := s.Validate(); err != nil { return nil, err @@ -160,7 +164,11 @@ func (s *IndicesGetSettingsService) Do() (map[string]*IndicesGetSettingsResponse } // Get HTTP response - res, err := s.client.PerformRequest("GET", path, params, nil) + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + }) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v2/indices_get_settings_test.go b/vendor/github.com/olivere/elastic/indices_get_settings_test.go similarity index 92% rename from vendor/gopkg.in/olivere/elastic.v2/indices_get_settings_test.go rename to vendor/github.com/olivere/elastic/indices_get_settings_test.go index f53512d..7c6995a 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/indices_get_settings_test.go +++ b/vendor/github.com/olivere/elastic/indices_get_settings_test.go @@ -1,10 +1,11 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. package elastic import ( + "context" "testing" ) @@ -61,7 +62,7 @@ func TestIndexGetSettingsService(t *testing.T) { return } - res, err := client.IndexGetSettings().Index(testIndexName).Do() + res, err := client.IndexGetSettings().Index(testIndexName).Do(context.TODO()) if err != nil { t.Fatal(err) } diff --git a/vendor/gopkg.in/olivere/elastic.v2/indices_get_template.go b/vendor/github.com/olivere/elastic/indices_get_template.go similarity index 85% rename from vendor/gopkg.in/olivere/elastic.v2/indices_get_template.go rename to vendor/github.com/olivere/elastic/indices_get_template.go index 4abe7e6..faaa6ee 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/indices_get_template.go +++ b/vendor/github.com/olivere/elastic/indices_get_template.go @@ -1,19 +1,20 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. package elastic import ( + "context" "fmt" "net/url" "strings" - "gopkg.in/olivere/elastic.v2/uritemplates" + "github.com/olivere/elastic/uritemplates" ) // IndicesGetTemplateService returns an index template. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/1.4/indices-templates.html. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-templates.html. type IndicesGetTemplateService struct { client *Client pretty bool @@ -74,7 +75,7 @@ func (s *IndicesGetTemplateService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "1") + params.Set("pretty", "true") } if s.flatSettings != nil { params.Set("flat_settings", fmt.Sprintf("%v", *s.flatSettings)) @@ -91,7 +92,7 @@ func (s *IndicesGetTemplateService) Validate() error { } // Do executes the operation. -func (s *IndicesGetTemplateService) Do() (map[string]*IndicesGetTemplateResponse, error) { +func (s *IndicesGetTemplateService) Do(ctx context.Context) (map[string]*IndicesGetTemplateResponse, error) { // Check pre-conditions if err := s.Validate(); err != nil { return nil, err @@ -104,7 +105,11 @@ func (s *IndicesGetTemplateService) Do() (map[string]*IndicesGetTemplateResponse } // Get HTTP response - res, err := s.client.PerformRequest("GET", path, params, nil) + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + }) if err != nil { return nil, err } @@ -120,6 +125,7 @@ func (s *IndicesGetTemplateService) Do() (map[string]*IndicesGetTemplateResponse // IndicesGetTemplateResponse is the response of IndicesGetTemplateService.Do. type IndicesGetTemplateResponse struct { Order int `json:"order,omitempty"` + Version int `json:"version,omitempty"` Template string `json:"template,omitempty"` Settings map[string]interface{} `json:"settings,omitempty"` Mappings map[string]interface{} `json:"mappings,omitempty"` diff --git a/vendor/gopkg.in/olivere/elastic.v2/indices_get_template_test.go b/vendor/github.com/olivere/elastic/indices_get_template_test.go similarity index 92% rename from vendor/gopkg.in/olivere/elastic.v2/indices_get_template_test.go rename to vendor/github.com/olivere/elastic/indices_get_template_test.go index 693cde5..c884ec1 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/indices_get_template_test.go +++ b/vendor/github.com/olivere/elastic/indices_get_template_test.go @@ -1,4 +1,4 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. diff --git a/vendor/github.com/olivere/elastic/indices_get_test.go b/vendor/github.com/olivere/elastic/indices_get_test.go new file mode 100644 index 0000000..6d37fca --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_get_test.go @@ -0,0 +1,98 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "testing" +) + +func TestIndicesGetValidate(t *testing.T) { + client := setupTestClient(t) + + // No index name -> fail with error + res, err := NewIndicesGetService(client).Index("").Do(context.TODO()) + if err == nil { + t.Fatalf("expected IndicesGet to fail without index name") + } + if res != nil { + t.Fatalf("expected result to be == nil; got: %v", res) + } +} + +func TestIndicesGetURL(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tests := []struct { + Indices []string + Features []string + Expected string + }{ + { + []string{}, + []string{}, + "/_all", + }, + { + []string{}, + []string{"_mappings"}, + "/_all/_mappings", + }, + { + []string{"twitter"}, + []string{"_mappings", "_settings"}, + "/twitter/_mappings%2C_settings", + }, + { + []string{"store-1", "store-2"}, + []string{"_mappings", "_settings"}, + "/store-1%2Cstore-2/_mappings%2C_settings", + }, + } + + for _, test := range tests { + path, _, err := NewIndicesGetService(client).Index(test.Indices...).Feature(test.Features...).buildURL() + if err != nil { + t.Fatal(err) + } + if path != test.Expected { + t.Errorf("expected %q; got: %q", test.Expected, path) + } + } +} + +func TestIndicesGetService(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + esversion, err := client.ElasticsearchVersion(DefaultURL) + if err != nil { + t.Fatal(err) + } + if esversion < "1.4.0" { + t.Skip("Index Get API is available since 1.4") + return + } + + res, err := client.IndexGet().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if res == nil { + t.Fatalf("expected result; got: %v", res) + } + info, found := res[testIndexName] + if !found { + t.Fatalf("expected index %q to be found; got: %v", testIndexName, found) + } + if info == nil { + t.Fatalf("expected index %q to be != nil; got: %v", testIndexName, info) + } + if info.Mappings == nil { + t.Errorf("expected mappings to be != nil; got: %v", info.Mappings) + } + if info.Settings == nil { + t.Errorf("expected settings to be != nil; got: %v", info.Settings) + } +} diff --git a/vendor/github.com/olivere/elastic/indices_open.go b/vendor/github.com/olivere/elastic/indices_open.go new file mode 100644 index 0000000..4cd4b06 --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_open.go @@ -0,0 +1,163 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" + + "github.com/olivere/elastic/uritemplates" +) + +// IndicesOpenService opens an index. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-open-close.html +// for details. +type IndicesOpenService struct { + client *Client + pretty bool + index string + timeout string + masterTimeout string + ignoreUnavailable *bool + allowNoIndices *bool + expandWildcards string +} + +// NewIndicesOpenService creates and initializes a new IndicesOpenService. +func NewIndicesOpenService(client *Client) *IndicesOpenService { + return &IndicesOpenService{client: client} +} + +// Index is the name of the index to open. +func (s *IndicesOpenService) Index(index string) *IndicesOpenService { + s.index = index + return s +} + +// Timeout is an explicit operation timeout. +func (s *IndicesOpenService) Timeout(timeout string) *IndicesOpenService { + s.timeout = timeout + return s +} + +// MasterTimeout specifies the timeout for connection to master. +func (s *IndicesOpenService) MasterTimeout(masterTimeout string) *IndicesOpenService { + s.masterTimeout = masterTimeout + return s +} + +// IgnoreUnavailable indicates whether specified concrete indices should +// be ignored when unavailable (missing or closed). +func (s *IndicesOpenService) IgnoreUnavailable(ignoreUnavailable bool) *IndicesOpenService { + s.ignoreUnavailable = &ignoreUnavailable + return s +} + +// AllowNoIndices indicates whether to ignore if a wildcard indices +// expression resolves into no concrete indices. +// (This includes `_all` string or when no indices have been specified). +func (s *IndicesOpenService) AllowNoIndices(allowNoIndices bool) *IndicesOpenService { + s.allowNoIndices = &allowNoIndices + return s +} + +// ExpandWildcards indicates whether to expand wildcard expression to +// concrete indices that are open, closed or both.. +func (s *IndicesOpenService) ExpandWildcards(expandWildcards string) *IndicesOpenService { + s.expandWildcards = expandWildcards + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *IndicesOpenService) Pretty(pretty bool) *IndicesOpenService { + s.pretty = pretty + return s +} + +// buildURL builds the URL for the operation. +func (s *IndicesOpenService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/{index}/_open", map[string]string{ + "index": s.index, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.timeout != "" { + params.Set("timeout", s.timeout) + } + if s.masterTimeout != "" { + params.Set("master_timeout", s.masterTimeout) + } + if s.ignoreUnavailable != nil { + params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) + } + if s.allowNoIndices != nil { + params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) + } + if s.expandWildcards != "" { + params.Set("expand_wildcards", s.expandWildcards) + } + + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *IndicesOpenService) Validate() error { + var invalid []string + if s.index == "" { + invalid = append(invalid, "Index") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *IndicesOpenService) Do(ctx context.Context) (*IndicesOpenResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(IndicesOpenResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// IndicesOpenResponse is the response of IndicesOpenService.Do. +type IndicesOpenResponse struct { + Acknowledged bool `json:"acknowledged"` + ShardsAcknowledged bool `json:"shards_acknowledged"` + Index string `json:"index,omitempty"` +} diff --git a/vendor/github.com/olivere/elastic/indices_open_test.go b/vendor/github.com/olivere/elastic/indices_open_test.go new file mode 100644 index 0000000..aab6c5c --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_open_test.go @@ -0,0 +1,23 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "testing" +) + +func TestIndicesOpenValidate(t *testing.T) { + client := setupTestClient(t) + + // No index name -> fail with error + res, err := NewIndicesOpenService(client).Do(context.TODO()) + if err == nil { + t.Fatalf("expected IndicesOpen to fail without index name") + } + if res != nil { + t.Fatalf("expected result to be == nil; got: %v", res) + } +} diff --git a/vendor/github.com/olivere/elastic/indices_put_alias.go b/vendor/github.com/olivere/elastic/indices_put_alias.go new file mode 100644 index 0000000..aac1f79 --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_put_alias.go @@ -0,0 +1,302 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" + "strings" +) + +// -- Actions -- + +// AliasAction is an action to apply to an alias, e.g. "add" or "remove". +type AliasAction interface { + Source() (interface{}, error) +} + +// AliasAddAction is an action to add to an alias. +type AliasAddAction struct { + index []string // index name(s) + alias string // alias name + filter Query + routing string + searchRouting string + indexRouting string +} + +// NewAliasAddAction returns an action to add an alias. +func NewAliasAddAction(alias string) *AliasAddAction { + return &AliasAddAction{ + alias: alias, + } +} + +// Index associates one or more indices to the alias. +func (a *AliasAddAction) Index(index ...string) *AliasAddAction { + a.index = append(a.index, index...) + return a +} + +func (a *AliasAddAction) removeBlankIndexNames() { + var indices []string + for _, index := range a.index { + if len(index) > 0 { + indices = append(indices, index) + } + } + a.index = indices +} + +// Filter associates a filter to the alias. +func (a *AliasAddAction) Filter(filter Query) *AliasAddAction { + a.filter = filter + return a +} + +// Routing associates a routing value to the alias. +// This basically sets index and search routing to the same value. +func (a *AliasAddAction) Routing(routing string) *AliasAddAction { + a.routing = routing + return a +} + +// IndexRouting associates an index routing value to the alias. +func (a *AliasAddAction) IndexRouting(routing string) *AliasAddAction { + a.indexRouting = routing + return a +} + +// SearchRouting associates a search routing value to the alias. +func (a *AliasAddAction) SearchRouting(routing ...string) *AliasAddAction { + a.searchRouting = strings.Join(routing, ",") + return a +} + +// Validate checks if the operation is valid. +func (a *AliasAddAction) Validate() error { + var invalid []string + if len(a.alias) == 0 { + invalid = append(invalid, "Alias") + } + if len(a.index) == 0 { + invalid = append(invalid, "Index") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Source returns the JSON-serializable data. +func (a *AliasAddAction) Source() (interface{}, error) { + a.removeBlankIndexNames() + if err := a.Validate(); err != nil { + return nil, err + } + src := make(map[string]interface{}) + act := make(map[string]interface{}) + src["add"] = act + act["alias"] = a.alias + switch len(a.index) { + case 1: + act["index"] = a.index[0] + default: + act["indices"] = a.index + } + if a.filter != nil { + f, err := a.filter.Source() + if err != nil { + return nil, err + } + act["filter"] = f + } + if len(a.routing) > 0 { + act["routing"] = a.routing + } + if len(a.indexRouting) > 0 { + act["index_routing"] = a.indexRouting + } + if len(a.searchRouting) > 0 { + act["search_routing"] = a.searchRouting + } + return src, nil +} + +// AliasRemoveAction is an action to remove an alias. +type AliasRemoveAction struct { + index []string // index name(s) + alias string // alias name +} + +// NewAliasRemoveAction returns an action to remove an alias. +func NewAliasRemoveAction(alias string) *AliasRemoveAction { + return &AliasRemoveAction{ + alias: alias, + } +} + +// Index associates one or more indices to the alias. +func (a *AliasRemoveAction) Index(index ...string) *AliasRemoveAction { + a.index = append(a.index, index...) + return a +} + +func (a *AliasRemoveAction) removeBlankIndexNames() { + var indices []string + for _, index := range a.index { + if len(index) > 0 { + indices = append(indices, index) + } + } + a.index = indices +} + +// Validate checks if the operation is valid. +func (a *AliasRemoveAction) Validate() error { + var invalid []string + if len(a.alias) == 0 { + invalid = append(invalid, "Alias") + } + if len(a.index) == 0 { + invalid = append(invalid, "Index") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Source returns the JSON-serializable data. +func (a *AliasRemoveAction) Source() (interface{}, error) { + a.removeBlankIndexNames() + if err := a.Validate(); err != nil { + return nil, err + } + src := make(map[string]interface{}) + act := make(map[string]interface{}) + src["remove"] = act + act["alias"] = a.alias + switch len(a.index) { + case 1: + act["index"] = a.index[0] + default: + act["indices"] = a.index + } + return src, nil +} + +// -- Service -- + +// AliasService enables users to add or remove an alias. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-aliases.html +// for details. +type AliasService struct { + client *Client + actions []AliasAction + pretty bool +} + +// NewAliasService implements a service to manage aliases. +func NewAliasService(client *Client) *AliasService { + builder := &AliasService{ + client: client, + } + return builder +} + +// Pretty asks Elasticsearch to indent the HTTP response. +func (s *AliasService) Pretty(pretty bool) *AliasService { + s.pretty = pretty + return s +} + +// Add adds an alias to an index. +func (s *AliasService) Add(indexName string, aliasName string) *AliasService { + action := NewAliasAddAction(aliasName).Index(indexName) + s.actions = append(s.actions, action) + return s +} + +// Add adds an alias to an index and associates a filter to the alias. +func (s *AliasService) AddWithFilter(indexName string, aliasName string, filter Query) *AliasService { + action := NewAliasAddAction(aliasName).Index(indexName).Filter(filter) + s.actions = append(s.actions, action) + return s +} + +// Remove removes an alias. +func (s *AliasService) Remove(indexName string, aliasName string) *AliasService { + action := NewAliasRemoveAction(aliasName).Index(indexName) + s.actions = append(s.actions, action) + return s +} + +// Action accepts one or more AliasAction instances which can be +// of type AliasAddAction or AliasRemoveAction. +func (s *AliasService) Action(action ...AliasAction) *AliasService { + s.actions = append(s.actions, action...) + return s +} + +// buildURL builds the URL for the operation. +func (s *AliasService) buildURL() (string, url.Values, error) { + path := "/_aliases" + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", fmt.Sprintf("%v", s.pretty)) + } + return path, params, nil +} + +// Do executes the command. +func (s *AliasService) Do(ctx context.Context) (*AliasResult, error) { + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Body with actions + body := make(map[string]interface{}) + var actions []interface{} + for _, action := range s.actions { + src, err := action.Source() + if err != nil { + return nil, err + } + actions = append(actions, src) + } + body["actions"] = actions + + // Get response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + Body: body, + }) + if err != nil { + return nil, err + } + + // Return results + ret := new(AliasResult) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// -- Result of an alias request. + +// AliasResult is the outcome of calling Do on AliasService. +type AliasResult struct { + Acknowledged bool `json:"acknowledged"` + ShardsAcknowledged bool `json:"shards_acknowledged"` + Index string `json:"index,omitempty"` +} diff --git a/vendor/github.com/olivere/elastic/indices_put_alias_test.go b/vendor/github.com/olivere/elastic/indices_put_alias_test.go new file mode 100644 index 0000000..ada1dfd --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_put_alias_test.go @@ -0,0 +1,222 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "testing" +) + +const ( + testAliasName = "elastic-test-alias" +) + +func TestAliasLifecycle(t *testing.T) { + var err error + + client := setupTestClientAndCreateIndex(t) + + // Some tweets + tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} + tweet2 := tweet{User: "sandrae", Message: "Cycling is fun."} + tweet3 := tweet{User: "olivere", Message: "Another unrelated topic."} + + // Add tweets to first index + _, err = client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Add tweets to second index + _, err = client.Index().Index(testIndexName2).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Flush + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + _, err = client.Flush().Index(testIndexName2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Add both indices to a new alias + aliasCreate, err := client.Alias(). + Add(testIndexName, testAliasName). + Action(NewAliasAddAction(testAliasName).Index(testIndexName2)). + //Pretty(true). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if !aliasCreate.Acknowledged { + t.Errorf("expected AliasResult.Acknowledged %v; got %v", true, aliasCreate.Acknowledged) + } + + // Search should return all 3 tweets + matchAll := NewMatchAllQuery() + searchResult1, err := client.Search().Index(testAliasName).Query(matchAll).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if searchResult1.Hits == nil { + t.Errorf("expected SearchResult.Hits != nil; got nil") + } + if searchResult1.Hits.TotalHits != 3 { + t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 3, searchResult1.Hits.TotalHits) + } + + // Remove first index should remove two tweets, so should only yield 1 + aliasRemove1, err := client.Alias(). + Remove(testIndexName, testAliasName). + //Pretty(true). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if !aliasRemove1.Acknowledged { + t.Errorf("expected AliasResult.Acknowledged %v; got %v", true, aliasRemove1.Acknowledged) + } + + searchResult2, err := client.Search().Index(testAliasName).Query(matchAll).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if searchResult2.Hits == nil { + t.Errorf("expected SearchResult.Hits != nil; got nil") + } + if searchResult2.Hits.TotalHits != 1 { + t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 1, searchResult2.Hits.TotalHits) + } +} + +func TestAliasAddAction(t *testing.T) { + var tests = []struct { + Action *AliasAddAction + Expected string + Invalid bool + }{ + { + Action: NewAliasAddAction("").Index(""), + Invalid: true, + }, + { + Action: NewAliasAddAction("alias1").Index(""), + Invalid: true, + }, + { + Action: NewAliasAddAction("").Index("index1"), + Invalid: true, + }, + { + Action: NewAliasAddAction("alias1").Index("index1"), + Expected: `{"add":{"alias":"alias1","index":"index1"}}`, + }, + { + Action: NewAliasAddAction("alias1").Index("index1", "index2"), + Expected: `{"add":{"alias":"alias1","indices":["index1","index2"]}}`, + }, + { + Action: NewAliasAddAction("alias1").Index("index1").Routing("routing1"), + Expected: `{"add":{"alias":"alias1","index":"index1","routing":"routing1"}}`, + }, + { + Action: NewAliasAddAction("alias1").Index("index1").Routing("routing1").IndexRouting("indexRouting1"), + Expected: `{"add":{"alias":"alias1","index":"index1","index_routing":"indexRouting1","routing":"routing1"}}`, + }, + { + Action: NewAliasAddAction("alias1").Index("index1").Routing("routing1").SearchRouting("searchRouting1"), + Expected: `{"add":{"alias":"alias1","index":"index1","routing":"routing1","search_routing":"searchRouting1"}}`, + }, + { + Action: NewAliasAddAction("alias1").Index("index1").Routing("routing1").SearchRouting("searchRouting1", "searchRouting2"), + Expected: `{"add":{"alias":"alias1","index":"index1","routing":"routing1","search_routing":"searchRouting1,searchRouting2"}}`, + }, + { + Action: NewAliasAddAction("alias1").Index("index1").Filter(NewTermQuery("user", "olivere")), + Expected: `{"add":{"alias":"alias1","filter":{"term":{"user":"olivere"}},"index":"index1"}}`, + }, + } + + for i, tt := range tests { + src, err := tt.Action.Source() + if err != nil { + if !tt.Invalid { + t.Errorf("#%d: expected to succeed", i) + } + } else { + if tt.Invalid { + t.Errorf("#%d: expected to fail", i) + } else { + dst, err := json.Marshal(src) + if err != nil { + t.Fatal(err) + } + if want, have := tt.Expected, string(dst); want != have { + t.Errorf("#%d: expected %s, got %s", i, want, have) + } + } + } + } +} + +func TestAliasRemoveAction(t *testing.T) { + var tests = []struct { + Action *AliasRemoveAction + Expected string + Invalid bool + }{ + { + Action: NewAliasRemoveAction(""), + Invalid: true, + }, + { + Action: NewAliasRemoveAction("alias1"), + Invalid: true, + }, + { + Action: NewAliasRemoveAction("").Index("index1"), + Invalid: true, + }, + { + Action: NewAliasRemoveAction("alias1").Index("index1"), + Expected: `{"remove":{"alias":"alias1","index":"index1"}}`, + }, + { + Action: NewAliasRemoveAction("alias1").Index("index1", "index2"), + Expected: `{"remove":{"alias":"alias1","indices":["index1","index2"]}}`, + }, + } + + for i, tt := range tests { + src, err := tt.Action.Source() + if err != nil { + if !tt.Invalid { + t.Errorf("#%d: expected to succeed", i) + } + } else { + if tt.Invalid { + t.Errorf("#%d: expected to fail", i) + } else { + dst, err := json.Marshal(src) + if err != nil { + t.Fatal(err) + } + if want, have := tt.Expected, string(dst); want != have { + t.Errorf("#%d: expected %s, got %s", i, want, have) + } + } + } + } +} diff --git a/vendor/github.com/olivere/elastic/indices_put_mapping.go b/vendor/github.com/olivere/elastic/indices_put_mapping.go new file mode 100644 index 0000000..04254d3 --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_put_mapping.go @@ -0,0 +1,228 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" + "strings" + + "github.com/olivere/elastic/uritemplates" +) + +// IndicesPutMappingService allows to register specific mapping definition +// for a specific type. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-put-mapping.html +// for details. +type IndicesPutMappingService struct { + client *Client + pretty bool + typ string + index []string + masterTimeout string + ignoreUnavailable *bool + allowNoIndices *bool + expandWildcards string + updateAllTypes *bool + timeout string + bodyJson map[string]interface{} + bodyString string +} + +// NewPutMappingService is an alias for NewIndicesPutMappingService. +// Use NewIndicesPutMappingService. +func NewPutMappingService(client *Client) *IndicesPutMappingService { + return NewIndicesPutMappingService(client) +} + +// NewIndicesPutMappingService creates a new IndicesPutMappingService. +func NewIndicesPutMappingService(client *Client) *IndicesPutMappingService { + return &IndicesPutMappingService{ + client: client, + index: make([]string, 0), + } +} + +// Index is a list of index names the mapping should be added to +// (supports wildcards); use `_all` or omit to add the mapping on all indices. +func (s *IndicesPutMappingService) Index(indices ...string) *IndicesPutMappingService { + s.index = append(s.index, indices...) + return s +} + +// Type is the name of the document type. +func (s *IndicesPutMappingService) Type(typ string) *IndicesPutMappingService { + s.typ = typ + return s +} + +// Timeout is an explicit operation timeout. +func (s *IndicesPutMappingService) Timeout(timeout string) *IndicesPutMappingService { + s.timeout = timeout + return s +} + +// MasterTimeout specifies the timeout for connection to master. +func (s *IndicesPutMappingService) MasterTimeout(masterTimeout string) *IndicesPutMappingService { + s.masterTimeout = masterTimeout + return s +} + +// IgnoreUnavailable indicates whether specified concrete indices should be +// ignored when unavailable (missing or closed). +func (s *IndicesPutMappingService) IgnoreUnavailable(ignoreUnavailable bool) *IndicesPutMappingService { + s.ignoreUnavailable = &ignoreUnavailable + return s +} + +// AllowNoIndices indicates whether to ignore if a wildcard indices +// expression resolves into no concrete indices. +// This includes `_all` string or when no indices have been specified. +func (s *IndicesPutMappingService) AllowNoIndices(allowNoIndices bool) *IndicesPutMappingService { + s.allowNoIndices = &allowNoIndices + return s +} + +// ExpandWildcards indicates whether to expand wildcard expression to +// concrete indices that are open, closed or both. +func (s *IndicesPutMappingService) ExpandWildcards(expandWildcards string) *IndicesPutMappingService { + s.expandWildcards = expandWildcards + return s +} + +// UpdateAllTypes, if true, indicates that all fields that span multiple indices +// should be updated (default: false). +func (s *IndicesPutMappingService) UpdateAllTypes(updateAllTypes bool) *IndicesPutMappingService { + s.updateAllTypes = &updateAllTypes + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *IndicesPutMappingService) Pretty(pretty bool) *IndicesPutMappingService { + s.pretty = pretty + return s +} + +// BodyJson contains the mapping definition. +func (s *IndicesPutMappingService) BodyJson(mapping map[string]interface{}) *IndicesPutMappingService { + s.bodyJson = mapping + return s +} + +// BodyString is the mapping definition serialized as a string. +func (s *IndicesPutMappingService) BodyString(mapping string) *IndicesPutMappingService { + s.bodyString = mapping + return s +} + +// buildURL builds the URL for the operation. +func (s *IndicesPutMappingService) buildURL() (string, url.Values, error) { + var err error + var path string + + // Build URL: Typ MUST be specified and is verified in Validate. + if len(s.index) > 0 { + path, err = uritemplates.Expand("/{index}/_mapping/{type}", map[string]string{ + "index": strings.Join(s.index, ","), + "type": s.typ, + }) + } else { + path, err = uritemplates.Expand("/_mapping/{type}", map[string]string{ + "type": s.typ, + }) + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.ignoreUnavailable != nil { + params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) + } + if s.allowNoIndices != nil { + params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) + } + if s.expandWildcards != "" { + params.Set("expand_wildcards", s.expandWildcards) + } + if s.updateAllTypes != nil { + params.Set("update_all_types", fmt.Sprintf("%v", *s.updateAllTypes)) + } + if s.timeout != "" { + params.Set("timeout", s.timeout) + } + if s.masterTimeout != "" { + params.Set("master_timeout", s.masterTimeout) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *IndicesPutMappingService) Validate() error { + var invalid []string + if s.typ == "" { + invalid = append(invalid, "Type") + } + if s.bodyString == "" && s.bodyJson == nil { + invalid = append(invalid, "BodyJson") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *IndicesPutMappingService) Do(ctx context.Context) (*PutMappingResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Setup HTTP request body + var body interface{} + if s.bodyJson != nil { + body = s.bodyJson + } else { + body = s.bodyString + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "PUT", + Path: path, + Params: params, + Body: body, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(PutMappingResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// PutMappingResponse is the response of IndicesPutMappingService.Do. +type PutMappingResponse struct { + Acknowledged bool `json:"acknowledged"` + ShardsAcknowledged bool `json:"shards_acknowledged"` + Index string `json:"index,omitempty"` +} diff --git a/vendor/github.com/olivere/elastic/indices_put_mapping_test.go b/vendor/github.com/olivere/elastic/indices_put_mapping_test.go new file mode 100644 index 0000000..644e118 --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_put_mapping_test.go @@ -0,0 +1,95 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "testing" +) + +func TestPutMappingURL(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tests := []struct { + Indices []string + Type string + Expected string + }{ + { + []string{}, + "doc", + "/_mapping/doc", + }, + { + []string{"*"}, + "doc", + "/%2A/_mapping/doc", + }, + { + []string{"store-1", "store-2"}, + "doc", + "/store-1%2Cstore-2/_mapping/doc", + }, + } + + for _, test := range tests { + path, _, err := client.PutMapping().Index(test.Indices...).Type(test.Type).buildURL() + if err != nil { + t.Fatal(err) + } + if path != test.Expected { + t.Errorf("expected %q; got: %q", test.Expected, path) + } + } +} + +func TestMappingLifecycle(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + //client := setupTestClientAndCreateIndexAndLog(t) + + // Create index + createIndex, err := client.CreateIndex(testIndexName3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if createIndex == nil { + t.Errorf("expected result to be != nil; got: %v", createIndex) + } + + mapping := `{ + "doc":{ + "properties":{ + "field":{ + "type":"keyword" + } + } + } + }` + + putresp, err := client.PutMapping().Index(testIndexName3).Type("doc").BodyString(mapping).Do(context.TODO()) + if err != nil { + t.Fatalf("expected put mapping to succeed; got: %v", err) + } + if putresp == nil { + t.Fatalf("expected put mapping response; got: %v", putresp) + } + if !putresp.Acknowledged { + t.Fatalf("expected put mapping ack; got: %v", putresp.Acknowledged) + } + + getresp, err := client.GetMapping().Index(testIndexName3).Type("doc").Do(context.TODO()) + if err != nil { + t.Fatalf("expected get mapping to succeed; got: %v", err) + } + if getresp == nil { + t.Fatalf("expected get mapping response; got: %v", getresp) + } + props, ok := getresp[testIndexName3] + if !ok { + t.Fatalf("expected JSON root to be of type map[string]interface{}; got: %#v", props) + } + + // NOTE There is no Delete Mapping API in Elasticsearch 2.0 +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/indices_put_settings.go b/vendor/github.com/olivere/elastic/indices_put_settings.go similarity index 88% rename from vendor/gopkg.in/olivere/elastic.v2/indices_put_settings.go rename to vendor/github.com/olivere/elastic/indices_put_settings.go index 73673a5..92308c4 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/indices_put_settings.go +++ b/vendor/github.com/olivere/elastic/indices_put_settings.go @@ -1,22 +1,23 @@ -// Copyright 2012-2016 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. package elastic import ( + "context" "fmt" "net/url" "strings" - "gopkg.in/olivere/elastic.v2/uritemplates" + "github.com/olivere/elastic/uritemplates" ) // IndicesPutSettingsService changes specific index level settings in // real time. // // See the documentation at -// https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-update-settings.html. +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-update-settings.html. type IndicesPutSettingsService struct { client *Client pretty bool @@ -117,7 +118,7 @@ func (s *IndicesPutSettingsService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "1") + params.Set("pretty", "true") } if s.allowNoIndices != nil { params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) @@ -143,7 +144,7 @@ func (s *IndicesPutSettingsService) Validate() error { } // Do executes the operation. -func (s *IndicesPutSettingsService) Do() (*IndicesPutSettingsResponse, error) { +func (s *IndicesPutSettingsService) Do(ctx context.Context) (*IndicesPutSettingsResponse, error) { // Check pre-conditions if err := s.Validate(); err != nil { return nil, err @@ -164,7 +165,12 @@ func (s *IndicesPutSettingsService) Do() (*IndicesPutSettingsResponse, error) { } // Get HTTP response - res, err := s.client.PerformRequest("PUT", path, params, body) + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "PUT", + Path: path, + Params: params, + Body: body, + }) if err != nil { return nil, err } @@ -179,5 +185,7 @@ func (s *IndicesPutSettingsService) Do() (*IndicesPutSettingsResponse, error) { // IndicesPutSettingsResponse is the response of IndicesPutSettingsService.Do. type IndicesPutSettingsResponse struct { - Acknowledged bool `json:"acknowledged"` + Acknowledged bool `json:"acknowledged"` + ShardsAcknowledged bool `json:"shards_acknowledged"` + Index string `json:"index,omitempty"` } diff --git a/vendor/gopkg.in/olivere/elastic.v2/indices_put_settings_test.go b/vendor/github.com/olivere/elastic/indices_put_settings_test.go similarity index 93% rename from vendor/gopkg.in/olivere/elastic.v2/indices_put_settings_test.go rename to vendor/github.com/olivere/elastic/indices_put_settings_test.go index 4bc86e1..0ceea3e 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/indices_put_settings_test.go +++ b/vendor/github.com/olivere/elastic/indices_put_settings_test.go @@ -1,10 +1,13 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. package elastic -import "testing" +import ( + "context" + "testing" +) func TestIndicesPutSettingsBuildURL(t *testing.T) { client := setupTestClientAndCreateIndex(t) @@ -48,7 +51,7 @@ func TestIndicesSettingsLifecycle(t *testing.T) { }` // Put settings - putres, err := client.IndexPutSettings().Index(testIndexName).BodyString(body).Do() + putres, err := client.IndexPutSettings().Index(testIndexName).BodyString(body).Do(context.TODO()) if err != nil { t.Fatalf("expected put settings to succeed; got: %v", err) } @@ -60,7 +63,7 @@ func TestIndicesSettingsLifecycle(t *testing.T) { } // Read settings - getres, err := client.IndexGetSettings().Index(testIndexName).Do() + getres, err := client.IndexGetSettings().Index(testIndexName).Do(context.TODO()) if err != nil { t.Fatalf("expected get mapping to succeed; got: %v", err) } diff --git a/vendor/gopkg.in/olivere/elastic.v2/indices_put_template.go b/vendor/github.com/olivere/elastic/indices_put_template.go similarity index 78% rename from vendor/gopkg.in/olivere/elastic.v2/indices_put_template.go rename to vendor/github.com/olivere/elastic/indices_put_template.go index 836bbc9..a8750ea 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/indices_put_template.go +++ b/vendor/github.com/olivere/elastic/indices_put_template.go @@ -1,23 +1,26 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. package elastic import ( + "context" "fmt" "net/url" - "gopkg.in/olivere/elastic.v2/uritemplates" + "github.com/olivere/elastic/uritemplates" ) // IndicesPutTemplateService creates or updates index mappings. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/1.4/indices-templates.html. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-templates.html. type IndicesPutTemplateService struct { client *Client pretty bool name string + cause string order interface{} + version *int create *bool timeout string masterTimeout string @@ -39,6 +42,13 @@ func (s *IndicesPutTemplateService) Name(name string) *IndicesPutTemplateService return s } +// Cause describes the cause for this index template creation. This is currently +// undocumented, but part of the Java source. +func (s *IndicesPutTemplateService) Cause(cause string) *IndicesPutTemplateService { + s.cause = cause + return s +} + // Timeout is an explicit operation timeout. func (s *IndicesPutTemplateService) Timeout(timeout string) *IndicesPutTemplateService { s.timeout = timeout @@ -64,6 +74,12 @@ func (s *IndicesPutTemplateService) Order(order interface{}) *IndicesPutTemplate return s } +// Version sets the version number for this template. +func (s *IndicesPutTemplateService) Version(version int) *IndicesPutTemplateService { + s.version = &version + return s +} + // Create indicates whether the index template should only be added if // new or can also replace an existing one. func (s *IndicesPutTemplateService) Create(create bool) *IndicesPutTemplateService { @@ -102,14 +118,20 @@ func (s *IndicesPutTemplateService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "1") + params.Set("pretty", "true") } if s.order != nil { params.Set("order", fmt.Sprintf("%v", s.order)) } + if s.version != nil { + params.Set("version", fmt.Sprintf("%v", *s.version)) + } if s.create != nil { params.Set("create", fmt.Sprintf("%v", *s.create)) } + if s.cause != "" { + params.Set("cause", s.cause) + } if s.timeout != "" { params.Set("timeout", s.timeout) } @@ -138,7 +160,7 @@ func (s *IndicesPutTemplateService) Validate() error { } // Do executes the operation. -func (s *IndicesPutTemplateService) Do() (*IndicesPutTemplateResponse, error) { +func (s *IndicesPutTemplateService) Do(ctx context.Context) (*IndicesPutTemplateResponse, error) { // Check pre-conditions if err := s.Validate(); err != nil { return nil, err @@ -159,7 +181,12 @@ func (s *IndicesPutTemplateService) Do() (*IndicesPutTemplateResponse, error) { } // Get HTTP response - res, err := s.client.PerformRequest("PUT", path, params, body) + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "PUT", + Path: path, + Params: params, + Body: body, + }) if err != nil { return nil, err } @@ -174,5 +201,7 @@ func (s *IndicesPutTemplateService) Do() (*IndicesPutTemplateResponse, error) { // IndicesPutTemplateResponse is the response of IndicesPutTemplateService.Do. type IndicesPutTemplateResponse struct { - Acknowledged bool `json:"acknowledged,omitempty"` + Acknowledged bool `json:"acknowledged"` + ShardsAcknowledged bool `json:"shards_acknowledged"` + Index string `json:"index,omitempty"` } diff --git a/vendor/github.com/olivere/elastic/indices_refresh.go b/vendor/github.com/olivere/elastic/indices_refresh.go new file mode 100644 index 0000000..712cdc5 --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_refresh.go @@ -0,0 +1,98 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" + "strings" + + "github.com/olivere/elastic/uritemplates" +) + +// RefreshService explicitly refreshes one or more indices. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-refresh.html. +type RefreshService struct { + client *Client + index []string + pretty bool +} + +// NewRefreshService creates a new instance of RefreshService. +func NewRefreshService(client *Client) *RefreshService { + builder := &RefreshService{ + client: client, + } + return builder +} + +// Index specifies the indices to refresh. +func (s *RefreshService) Index(index ...string) *RefreshService { + s.index = append(s.index, index...) + return s +} + +// Pretty asks Elasticsearch to return indented JSON. +func (s *RefreshService) Pretty(pretty bool) *RefreshService { + s.pretty = pretty + return s +} + +// buildURL builds the URL for the operation. +func (s *RefreshService) buildURL() (string, url.Values, error) { + var err error + var path string + + if len(s.index) > 0 { + path, err = uritemplates.Expand("/{index}/_refresh", map[string]string{ + "index": strings.Join(s.index, ","), + }) + } else { + path = "/_refresh" + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", fmt.Sprintf("%v", s.pretty)) + } + return path, params, nil +} + +// Do executes the request. +func (s *RefreshService) Do(ctx context.Context) (*RefreshResult, error) { + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + }) + if err != nil { + return nil, err + } + + // Return result + ret := new(RefreshResult) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// -- Result of a refresh request. + +// RefreshResult is the outcome of RefreshService.Do. +type RefreshResult struct { + Shards shardsInfo `json:"_shards,omitempty"` +} diff --git a/vendor/github.com/olivere/elastic/indices_refresh_test.go b/vendor/github.com/olivere/elastic/indices_refresh_test.go new file mode 100644 index 0000000..8640fb6 --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_refresh_test.go @@ -0,0 +1,81 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "testing" +) + +func TestRefreshBuildURL(t *testing.T) { + client := setupTestClient(t) + + tests := []struct { + Indices []string + Expected string + }{ + { + []string{}, + "/_refresh", + }, + { + []string{"index1"}, + "/index1/_refresh", + }, + { + []string{"index1", "index2"}, + "/index1%2Cindex2/_refresh", + }, + } + + for i, test := range tests { + path, _, err := client.Refresh().Index(test.Indices...).buildURL() + if err != nil { + t.Errorf("case #%d: %v", i+1, err) + continue + } + if path != test.Expected { + t.Errorf("case #%d: expected %q; got: %q", i+1, test.Expected, path) + } + } +} + +func TestRefresh(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} + tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} + tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} + + // Add some documents + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Refresh indices + res, err := client.Refresh(testIndexName, testIndexName2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if res == nil { + t.Fatal("expected result; got nil") + } +} diff --git a/vendor/github.com/olivere/elastic/indices_rollover.go b/vendor/github.com/olivere/elastic/indices_rollover.go new file mode 100644 index 0000000..5f5fed3 --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_rollover.go @@ -0,0 +1,272 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/url" + + "github.com/olivere/elastic/uritemplates" +) + +// IndicesRolloverService rolls an alias over to a new index when the +// existing index is considered to be too large or too old. +// +// It is documented at +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-rollover-index.html. +type IndicesRolloverService struct { + client *Client + pretty bool + dryRun bool + newIndex string + alias string + masterTimeout string + timeout string + waitForActiveShards string + conditions map[string]interface{} + settings map[string]interface{} + mappings map[string]interface{} + bodyJson interface{} + bodyString string +} + +// NewIndicesRolloverService creates a new IndicesRolloverService. +func NewIndicesRolloverService(client *Client) *IndicesRolloverService { + return &IndicesRolloverService{ + client: client, + conditions: make(map[string]interface{}), + settings: make(map[string]interface{}), + mappings: make(map[string]interface{}), + } +} + +// Alias is the name of the alias to rollover. +func (s *IndicesRolloverService) Alias(alias string) *IndicesRolloverService { + s.alias = alias + return s +} + +// NewIndex is the name of the rollover index. +func (s *IndicesRolloverService) NewIndex(newIndex string) *IndicesRolloverService { + s.newIndex = newIndex + return s +} + +// MasterTimeout specifies the timeout for connection to master. +func (s *IndicesRolloverService) MasterTimeout(masterTimeout string) *IndicesRolloverService { + s.masterTimeout = masterTimeout + return s +} + +// Timeout sets an explicit operation timeout. +func (s *IndicesRolloverService) Timeout(timeout string) *IndicesRolloverService { + s.timeout = timeout + return s +} + +// WaitForActiveShards sets the number of active shards to wait for on the +// newly created rollover index before the operation returns. +func (s *IndicesRolloverService) WaitForActiveShards(waitForActiveShards string) *IndicesRolloverService { + s.waitForActiveShards = waitForActiveShards + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *IndicesRolloverService) Pretty(pretty bool) *IndicesRolloverService { + s.pretty = pretty + return s +} + +// DryRun, when set, specifies that only conditions are checked without +// performing the actual rollover. +func (s *IndicesRolloverService) DryRun(dryRun bool) *IndicesRolloverService { + s.dryRun = dryRun + return s +} + +// Conditions allows to specify all conditions as a dictionary. +func (s *IndicesRolloverService) Conditions(conditions map[string]interface{}) *IndicesRolloverService { + s.conditions = conditions + return s +} + +// AddCondition adds a condition to the rollover decision. +func (s *IndicesRolloverService) AddCondition(name string, value interface{}) *IndicesRolloverService { + s.conditions[name] = value + return s +} + +// AddMaxIndexAgeCondition adds a condition to set the max index age. +func (s *IndicesRolloverService) AddMaxIndexAgeCondition(time string) *IndicesRolloverService { + s.conditions["max_age"] = time + return s +} + +// AddMaxIndexDocsCondition adds a condition to set the max documents in the index. +func (s *IndicesRolloverService) AddMaxIndexDocsCondition(docs int64) *IndicesRolloverService { + s.conditions["max_docs"] = docs + return s +} + +// Settings adds the index settings. +func (s *IndicesRolloverService) Settings(settings map[string]interface{}) *IndicesRolloverService { + s.settings = settings + return s +} + +// AddSetting adds an index setting. +func (s *IndicesRolloverService) AddSetting(name string, value interface{}) *IndicesRolloverService { + s.settings[name] = value + return s +} + +// Mappings adds the index mappings. +func (s *IndicesRolloverService) Mappings(mappings map[string]interface{}) *IndicesRolloverService { + s.mappings = mappings + return s +} + +// AddMapping adds a mapping for the given type. +func (s *IndicesRolloverService) AddMapping(typ string, mapping interface{}) *IndicesRolloverService { + s.mappings[typ] = mapping + return s +} + +// BodyJson sets the conditions that needs to be met for executing rollover, +// specified as a serializable JSON instance which is sent as the body of +// the request. +func (s *IndicesRolloverService) BodyJson(body interface{}) *IndicesRolloverService { + s.bodyJson = body + return s +} + +// BodyString sets the conditions that needs to be met for executing rollover, +// specified as a string which is sent as the body of the request. +func (s *IndicesRolloverService) BodyString(body string) *IndicesRolloverService { + s.bodyString = body + return s +} + +// getBody returns the body of the request, if not explicitly set via +// BodyJson or BodyString. +func (s *IndicesRolloverService) getBody() interface{} { + body := make(map[string]interface{}) + if len(s.conditions) > 0 { + body["conditions"] = s.conditions + } + if len(s.settings) > 0 { + body["settings"] = s.settings + } + if len(s.mappings) > 0 { + body["mappings"] = s.mappings + } + return body +} + +// buildURL builds the URL for the operation. +func (s *IndicesRolloverService) buildURL() (string, url.Values, error) { + // Build URL + var err error + var path string + if s.newIndex != "" { + path, err = uritemplates.Expand("/{alias}/_rollover/{new_index}", map[string]string{ + "alias": s.alias, + "new_index": s.newIndex, + }) + } else { + path, err = uritemplates.Expand("/{alias}/_rollover", map[string]string{ + "alias": s.alias, + }) + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.dryRun { + params.Set("dry_run", "true") + } + if s.masterTimeout != "" { + params.Set("master_timeout", s.masterTimeout) + } + if s.timeout != "" { + params.Set("timeout", s.timeout) + } + if s.waitForActiveShards != "" { + params.Set("wait_for_active_shards", s.waitForActiveShards) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *IndicesRolloverService) Validate() error { + var invalid []string + if s.alias == "" { + invalid = append(invalid, "Alias") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *IndicesRolloverService) Do(ctx context.Context) (*IndicesRolloverResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Setup HTTP request body + var body interface{} + if s.bodyJson != nil { + body = s.bodyJson + } else if s.bodyString != "" { + body = s.bodyString + } else { + body = s.getBody() + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + Body: body, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(IndicesRolloverResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// IndicesRolloverResponse is the response of IndicesRolloverService.Do. +type IndicesRolloverResponse struct { + OldIndex string `json:"old_index"` + NewIndex string `json:"new_index"` + RolledOver bool `json:"rolled_over"` + DryRun bool `json:"dry_run"` + Acknowledged bool `json:"acknowledged"` + ShardsAcknowledged bool `json:"shards_acknowledged"` + Conditions map[string]bool `json:"conditions"` +} diff --git a/vendor/github.com/olivere/elastic/indices_rollover_test.go b/vendor/github.com/olivere/elastic/indices_rollover_test.go new file mode 100644 index 0000000..81d7099 --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_rollover_test.go @@ -0,0 +1,116 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestIndicesRolloverBuildURL(t *testing.T) { + client := setupTestClient(t) + + tests := []struct { + Alias string + NewIndex string + Expected string + }{ + { + "logs_write", + "", + "/logs_write/_rollover", + }, + { + "logs_write", + "my_new_index_name", + "/logs_write/_rollover/my_new_index_name", + }, + } + + for i, test := range tests { + path, _, err := client.RolloverIndex(test.Alias).NewIndex(test.NewIndex).buildURL() + if err != nil { + t.Errorf("case #%d: %v", i+1, err) + continue + } + if path != test.Expected { + t.Errorf("case #%d: expected %q; got: %q", i+1, test.Expected, path) + } + } +} + +func TestIndicesRolloverBodyConditions(t *testing.T) { + client := setupTestClient(t) + svc := NewIndicesRolloverService(client). + Conditions(map[string]interface{}{ + "max_age": "7d", + "max_docs": 1000, + }) + data, err := json.Marshal(svc.getBody()) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"conditions":{"max_age":"7d","max_docs":1000}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestIndicesRolloverBodyAddCondition(t *testing.T) { + client := setupTestClient(t) + svc := NewIndicesRolloverService(client). + AddCondition("max_age", "7d"). + AddCondition("max_docs", 1000) + data, err := json.Marshal(svc.getBody()) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"conditions":{"max_age":"7d","max_docs":1000}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestIndicesRolloverBodyAddPredefinedConditions(t *testing.T) { + client := setupTestClient(t) + svc := NewIndicesRolloverService(client). + AddMaxIndexAgeCondition("2d"). + AddMaxIndexDocsCondition(1000000) + data, err := json.Marshal(svc.getBody()) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"conditions":{"max_age":"2d","max_docs":1000000}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestIndicesRolloverBodyComplex(t *testing.T) { + client := setupTestClient(t) + svc := NewIndicesRolloverService(client). + AddMaxIndexAgeCondition("2d"). + AddMaxIndexDocsCondition(1000000). + AddSetting("index.number_of_shards", 2). + AddMapping("doc", map[string]interface{}{ + "properties": map[string]interface{}{ + "user": map[string]interface{}{ + "type": "keyword", + }, + }, + }) + data, err := json.Marshal(svc.getBody()) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"conditions":{"max_age":"2d","max_docs":1000000},"mappings":{"doc":{"properties":{"user":{"type":"keyword"}}}},"settings":{"index.number_of_shards":2}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/indices_segments.go b/vendor/github.com/olivere/elastic/indices_segments.go new file mode 100644 index 0000000..92ad833 --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_segments.go @@ -0,0 +1,237 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/url" + "strings" + + "github.com/olivere/elastic/uritemplates" +) + +// IndicesSegmentsService provides low level segments information that a +// Lucene index (shard level) is built with. Allows to be used to provide +// more information on the state of a shard and an index, possibly +// optimization information, data "wasted" on deletes, and so on. +// +// Find further documentation at +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-segments.html. +type IndicesSegmentsService struct { + client *Client + pretty bool + index []string + allowNoIndices *bool + expandWildcards string + ignoreUnavailable *bool + human *bool + operationThreading interface{} + verbose *bool +} + +// NewIndicesSegmentsService creates a new IndicesSegmentsService. +func NewIndicesSegmentsService(client *Client) *IndicesSegmentsService { + return &IndicesSegmentsService{ + client: client, + } +} + +// Index is a comma-separated list of index names; use `_all` or empty string +// to perform the operation on all indices. +func (s *IndicesSegmentsService) Index(indices ...string) *IndicesSegmentsService { + s.index = append(s.index, indices...) + return s +} + +// AllowNoIndices indicates whether to ignore if a wildcard indices expression +// resolves into no concrete indices. (This includes `_all` string or when +// no indices have been specified). +func (s *IndicesSegmentsService) AllowNoIndices(allowNoIndices bool) *IndicesSegmentsService { + s.allowNoIndices = &allowNoIndices + return s +} + +// ExpandWildcards indicates whether to expand wildcard expression to concrete indices +// that are open, closed or both. +func (s *IndicesSegmentsService) ExpandWildcards(expandWildcards string) *IndicesSegmentsService { + s.expandWildcards = expandWildcards + return s +} + +// IgnoreUnavailable indicates whether specified concrete indices should be +// ignored when unavailable (missing or closed). +func (s *IndicesSegmentsService) IgnoreUnavailable(ignoreUnavailable bool) *IndicesSegmentsService { + s.ignoreUnavailable = &ignoreUnavailable + return s +} + +// Human, when set to true, returns time and byte-values in human-readable format. +func (s *IndicesSegmentsService) Human(human bool) *IndicesSegmentsService { + s.human = &human + return s +} + +// OperationThreading is undocumented in Elasticsearch as of now. +func (s *IndicesSegmentsService) OperationThreading(operationThreading interface{}) *IndicesSegmentsService { + s.operationThreading = operationThreading + return s +} + +// Verbose, when set to true, includes detailed memory usage by Lucene. +func (s *IndicesSegmentsService) Verbose(verbose bool) *IndicesSegmentsService { + s.verbose = &verbose + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *IndicesSegmentsService) Pretty(pretty bool) *IndicesSegmentsService { + s.pretty = pretty + return s +} + +// buildURL builds the URL for the operation. +func (s *IndicesSegmentsService) buildURL() (string, url.Values, error) { + var err error + var path string + + if len(s.index) > 0 { + path, err = uritemplates.Expand("/{index}/_segments", map[string]string{ + "index": strings.Join(s.index, ","), + }) + } else { + path = "/_segments" + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.allowNoIndices != nil { + params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) + } + if s.expandWildcards != "" { + params.Set("expand_wildcards", s.expandWildcards) + } + if s.ignoreUnavailable != nil { + params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) + } + if s.human != nil { + params.Set("human", fmt.Sprintf("%v", *s.human)) + } + if s.operationThreading != nil { + params.Set("operation_threading", fmt.Sprintf("%v", s.operationThreading)) + } + if s.verbose != nil { + params.Set("verbose", fmt.Sprintf("%v", *s.verbose)) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *IndicesSegmentsService) Validate() error { + return nil +} + +// Do executes the operation. +func (s *IndicesSegmentsService) Do(ctx context.Context) (*IndicesSegmentsResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(IndicesSegmentsResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// IndicesSegmentsResponse is the response of IndicesSegmentsService.Do. +type IndicesSegmentsResponse struct { + // Shards provides information returned from shards. + Shards shardsInfo `json:"_shards"` + + // Indices provides a map into the stats of an index. + // The key of the map is the index name. + Indices map[string]*IndexSegments `json:"indices,omitempty"` +} + +type IndexSegments struct { + // Shards provides a map into the shard related information of an index. + // The key of the map is the number of a specific shard. + Shards map[string][]*IndexSegmentsShards `json:"shards,omitempty"` +} + +type IndexSegmentsShards struct { + Routing *IndexSegmentsRouting `json:"routing,omitempty"` + NumCommittedSegments int64 `json:"num_committed_segments,omitempty"` + NumSearchSegments int64 `json:"num_search_segments"` + + // Segments provides a map into the segment related information of a shard. + // The key of the map is the specific lucene segment id. + Segments map[string]*IndexSegmentsDetails `json:"segments,omitempty"` +} + +type IndexSegmentsRouting struct { + State string `json:"state,omitempty"` + Primary bool `json:"primary,omitempty"` + Node string `json:"node,omitempty"` + RelocatingNode string `json:"relocating_node,omitempty"` +} + +type IndexSegmentsDetails struct { + Generation int64 `json:"generation,omitempty"` + NumDocs int64 `json:"num_docs,omitempty"` + DeletedDocs int64 `json:"deleted_docs,omitempty"` + Size string `json:"size,omitempty"` + SizeInBytes int64 `json:"size_in_bytes,omitempty"` + Memory string `json:"memory,omitempty"` + MemoryInBytes int64 `json:"memory_in_bytes,omitempty"` + Committed bool `json:"committed,omitempty"` + Search bool `json:"search,omitempty"` + Version string `json:"version,omitempty"` + Compound bool `json:"compound,omitempty"` + MergeId string `json:"merge_id,omitempty"` + Sort []*IndexSegmentsSort `json:"sort,omitempty"` + RAMTree []*IndexSegmentsRamTree `json:"ram_tree,omitempty"` + Attributes map[string]string `json:"attributes,omitempty"` +} + +type IndexSegmentsSort struct { + Field string `json:"field,omitempty"` + Mode string `json:"mode,omitempty"` + Missing interface{} `json:"missing,omitempty"` + Reverse bool `json:"reverse,omitempty"` +} + +type IndexSegmentsRamTree struct { + Description string `json:"description,omitempty"` + Size string `json:"size,omitempty"` + SizeInBytes int64 `json:"size_in_bytes,omitempty"` + Children []*IndexSegmentsRamTree `json:"children,omitempty"` +} diff --git a/vendor/github.com/olivere/elastic/indices_segments_test.go b/vendor/github.com/olivere/elastic/indices_segments_test.go new file mode 100644 index 0000000..2ec181c --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_segments_test.go @@ -0,0 +1,86 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "testing" +) + +func TestIndicesSegments(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tests := []struct { + Indices []string + Expected string + }{ + { + []string{}, + "/_segments", + }, + { + []string{"index1"}, + "/index1/_segments", + }, + { + []string{"index1", "index2"}, + "/index1%2Cindex2/_segments", + }, + } + + for i, test := range tests { + path, _, err := client.IndexSegments().Index(test.Indices...).buildURL() + if err != nil { + t.Errorf("case #%d: %v", i+1, err) + } + if path != test.Expected { + t.Errorf("case #%d: expected %q; got: %q", i+1, test.Expected, path) + } + } +} + +func TestIndexSegments(t *testing.T) { + client := setupTestClientAndCreateIndexAndAddDocs(t) + //client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", 0))) + + segments, err := client.IndexSegments(testIndexName).Pretty(true).Human(true).Do(context.TODO()) + if err != nil { + t.Fatalf("expected no error; got: %v", err) + } + if segments == nil { + t.Fatalf("expected response; got: %v", segments) + } + indices, found := segments.Indices[testIndexName] + if !found { + t.Fatalf("expected index information about index %v; got: %v", testIndexName, found) + } + shards, found := indices.Shards["0"] + if !found { + t.Fatalf("expected shard information about index %v", testIndexName) + } + if shards == nil { + t.Fatalf("expected shard information to be != nil for index %v", testIndexName) + } + shard := shards[0] + if shard == nil { + t.Fatalf("expected shard information to be != nil for shard 0 in index %v", testIndexName) + } + if shard.Routing == nil { + t.Fatalf("expected shard routing information to be != nil for index %v", testIndexName) + } + segmentDetail, found := shard.Segments["_0"] + if !found { + t.Fatalf("expected segment detail to be != nil for index %v", testIndexName) + } + if segmentDetail == nil { + t.Fatalf("expected segment detail to be != nil for index %v", testIndexName) + } + if segmentDetail.NumDocs == 0 { + t.Fatal("expected segment to contain >= 1 docs") + } + if len(segmentDetail.Attributes) == 0 { + t.Fatalf("expected segment attributes map to contain at least one key, value pair for index %v", testIndexName) + } +} diff --git a/vendor/github.com/olivere/elastic/indices_shrink.go b/vendor/github.com/olivere/elastic/indices_shrink.go new file mode 100644 index 0000000..275614b --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_shrink.go @@ -0,0 +1,179 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/url" + + "github.com/olivere/elastic/uritemplates" +) + +// IndicesShrinkService allows you to shrink an existing index into a +// new index with fewer primary shards. +// +// For further details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-shrink-index.html. +type IndicesShrinkService struct { + client *Client + pretty bool + source string + target string + masterTimeout string + timeout string + waitForActiveShards string + bodyJson interface{} + bodyString string +} + +// NewIndicesShrinkService creates a new IndicesShrinkService. +func NewIndicesShrinkService(client *Client) *IndicesShrinkService { + return &IndicesShrinkService{ + client: client, + } +} + +// Source is the name of the source index to shrink. +func (s *IndicesShrinkService) Source(source string) *IndicesShrinkService { + s.source = source + return s +} + +// Target is the name of the target index to shrink into. +func (s *IndicesShrinkService) Target(target string) *IndicesShrinkService { + s.target = target + return s +} + +// MasterTimeout specifies the timeout for connection to master. +func (s *IndicesShrinkService) MasterTimeout(masterTimeout string) *IndicesShrinkService { + s.masterTimeout = masterTimeout + return s +} + +// Timeout is an explicit operation timeout. +func (s *IndicesShrinkService) Timeout(timeout string) *IndicesShrinkService { + s.timeout = timeout + return s +} + +// WaitForActiveShards sets the number of active shards to wait for on +// the shrunken index before the operation returns. +func (s *IndicesShrinkService) WaitForActiveShards(waitForActiveShards string) *IndicesShrinkService { + s.waitForActiveShards = waitForActiveShards + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *IndicesShrinkService) Pretty(pretty bool) *IndicesShrinkService { + s.pretty = pretty + return s +} + +// BodyJson is the configuration for the target index (`settings` and `aliases`) +// defined as a JSON-serializable instance to be sent as the request body. +func (s *IndicesShrinkService) BodyJson(body interface{}) *IndicesShrinkService { + s.bodyJson = body + return s +} + +// BodyString is the configuration for the target index (`settings` and `aliases`) +// defined as a string to send as the request body. +func (s *IndicesShrinkService) BodyString(body string) *IndicesShrinkService { + s.bodyString = body + return s +} + +// buildURL builds the URL for the operation. +func (s *IndicesShrinkService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/{source}/_shrink/{target}", map[string]string{ + "source": s.source, + "target": s.target, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.masterTimeout != "" { + params.Set("master_timeout", s.masterTimeout) + } + if s.timeout != "" { + params.Set("timeout", s.timeout) + } + if s.waitForActiveShards != "" { + params.Set("wait_for_active_shards", s.waitForActiveShards) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *IndicesShrinkService) Validate() error { + var invalid []string + if s.source == "" { + invalid = append(invalid, "Source") + } + if s.target == "" { + invalid = append(invalid, "Target") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *IndicesShrinkService) Do(ctx context.Context) (*IndicesShrinkResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Setup HTTP request body + var body interface{} + if s.bodyJson != nil { + body = s.bodyJson + } else if s.bodyString != "" { + body = s.bodyString + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + Body: body, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(IndicesShrinkResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// IndicesShrinkResponse is the response of IndicesShrinkService.Do. +type IndicesShrinkResponse struct { + Acknowledged bool `json:"acknowledged"` + ShardsAcknowledged bool `json:"shards_acknowledged"` + Index string `json:"index,omitempty"` +} diff --git a/vendor/github.com/olivere/elastic/indices_shrink_test.go b/vendor/github.com/olivere/elastic/indices_shrink_test.go new file mode 100644 index 0000000..06ab7d9 --- /dev/null +++ b/vendor/github.com/olivere/elastic/indices_shrink_test.go @@ -0,0 +1,34 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import "testing" + +func TestIndicesShrinkBuildURL(t *testing.T) { + client := setupTestClient(t) + + tests := []struct { + Source string + Target string + Expected string + }{ + { + "my_source_index", + "my_target_index", + "/my_source_index/_shrink/my_target_index", + }, + } + + for i, test := range tests { + path, _, err := client.ShrinkIndex(test.Source, test.Target).buildURL() + if err != nil { + t.Errorf("case #%d: %v", i+1, err) + continue + } + if path != test.Expected { + t.Errorf("case #%d: expected %q; got: %q", i+1, test.Expected, path) + } + } +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/indices_stats.go b/vendor/github.com/olivere/elastic/indices_stats.go similarity index 87% rename from vendor/gopkg.in/olivere/elastic.v2/indices_stats.go rename to vendor/github.com/olivere/elastic/indices_stats.go index 152e20c..c63059b 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/indices_stats.go +++ b/vendor/github.com/olivere/elastic/indices_stats.go @@ -1,19 +1,20 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. package elastic import ( + "context" "fmt" "net/url" "strings" - "gopkg.in/olivere/elastic.v2/uritemplates" + "github.com/olivere/elastic/uritemplates" ) // IndicesStatsService provides stats on various metrics of one or more -// indices. See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-stats.html. +// indices. See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-stats.html. type IndicesStatsService struct { client *Client pretty bool @@ -52,20 +53,20 @@ func (s *IndicesStatsService) Metric(metric ...string) *IndicesStatsService { // Index is the list of index names; use `_all` or empty string to perform // the operation on all indices. -func (s *IndicesStatsService) Index(index ...string) *IndicesStatsService { - s.index = append(s.index, index...) +func (s *IndicesStatsService) Index(indices ...string) *IndicesStatsService { + s.index = append(s.index, indices...) return s } -// Level returns stats aggregated at cluster, index or shard level. -func (s *IndicesStatsService) Level(level string) *IndicesStatsService { - s.level = level +// Type is a list of document types for the `indexing` index metric. +func (s *IndicesStatsService) Type(types ...string) *IndicesStatsService { + s.types = append(s.types, types...) return s } -// Types is a list of document types for the `indexing` index metric. -func (s *IndicesStatsService) Types(types ...string) *IndicesStatsService { - s.types = append(s.types, types...) +// Level returns stats aggregated at cluster, index or shard level. +func (s *IndicesStatsService) Level(level string) *IndicesStatsService { + s.level = level return s } @@ -134,7 +135,7 @@ func (s *IndicesStatsService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "1") + params.Set("pretty", "true") } if len(s.groups) > 0 { params.Set("groups", strings.Join(s.groups, ",")) @@ -166,7 +167,7 @@ func (s *IndicesStatsService) Validate() error { } // Do executes the operation. -func (s *IndicesStatsService) Do() (*IndicesStatsResponse, error) { +func (s *IndicesStatsService) Do(ctx context.Context) (*IndicesStatsResponse, error) { // Check pre-conditions if err := s.Validate(); err != nil { return nil, err @@ -179,7 +180,11 @@ func (s *IndicesStatsService) Do() (*IndicesStatsResponse, error) { } // Get HTTP response - res, err := s.client.PerformRequest("GET", path, params, nil) + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + }) if err != nil { return nil, err } @@ -238,25 +243,20 @@ type IndexStatsDocs struct { } type IndexStatsStore struct { - Size string `json:"size,omitempty"` // human size, e.g. 119.3mb - SizeInBytes int64 `json:"size_in_bytes,omitempty"` - ThrottleTime string `json:"throttle_time,omitempty"` // human time, e.g. 0s - ThrottleTimeInMillis int64 `json:"throttle_time_in_millis,omitempty"` + Size string `json:"size,omitempty"` // human size, e.g. 119.3mb + SizeInBytes int64 `json:"size_in_bytes,omitempty"` } type IndexStatsIndexing struct { - IndexTotal int64 `json:"index_total,omitempty"` - IndexTime string `json:"index_time,omitempty"` - IndexTimeInMillis int64 `json:"index_time_in_millis,omitempty"` - IndexCurrent int64 `json:"index_current,omitempty"` - DeleteTotal int64 `json:"delete_total,omitempty"` - DeleteTime string `json:"delete_time,omitempty"` - DeleteTimeInMillis int64 `json:"delete_time_in_millis,omitempty"` - DeleteCurrent int64 `json:"delete_current,omitempty"` - NoopUpdateTotal int64 `json:"noop_update_total,omitempty"` - IsThrottled bool `json:"is_throttled,omitempty"` - ThrottleTime string `json:"throttle_time,omitempty"` - ThrottleTimeInMillis int64 `json:"throttle_time_in_millis,omitempty"` + IndexTotal int64 `json:"index_total,omitempty"` + IndexTime string `json:"index_time,omitempty"` + IndexTimeInMillis int64 `json:"index_time_in_millis,omitempty"` + IndexCurrent int64 `json:"index_current,omitempty"` + DeleteTotal int64 `json:"delete_total,omitempty"` + DeleteTime string `json:"delete_time,omitempty"` + DeleteTimeInMillis int64 `json:"delete_time_in_millis,omitempty"` + DeleteCurrent int64 `json:"delete_current,omitempty"` + NoopUpdateTotal int64 `json:"noop_update_total,omitempty"` } type IndexStatsGet struct { diff --git a/vendor/gopkg.in/olivere/elastic.v2/indices_stats_test.go b/vendor/github.com/olivere/elastic/indices_stats_test.go similarity index 92% rename from vendor/gopkg.in/olivere/elastic.v2/indices_stats_test.go rename to vendor/github.com/olivere/elastic/indices_stats_test.go index 2a72858..a3392c9 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/indices_stats_test.go +++ b/vendor/github.com/olivere/elastic/indices_stats_test.go @@ -1,10 +1,11 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. package elastic import ( + "context" "testing" ) @@ -62,7 +63,7 @@ func TestIndexStatsBuildURL(t *testing.T) { func TestIndexStats(t *testing.T) { client := setupTestClientAndCreateIndexAndAddDocs(t) - stats, err := client.IndexStats(testIndexName).Do() + stats, err := client.IndexStats(testIndexName).Do(context.TODO()) if err != nil { t.Fatalf("expected no error; got: %v", err) } diff --git a/vendor/github.com/olivere/elastic/ingest_delete_pipeline.go b/vendor/github.com/olivere/elastic/ingest_delete_pipeline.go new file mode 100644 index 0000000..7ca2802 --- /dev/null +++ b/vendor/github.com/olivere/elastic/ingest_delete_pipeline.go @@ -0,0 +1,129 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/url" + + "github.com/olivere/elastic/uritemplates" +) + +// IngestDeletePipelineService deletes pipelines by ID. +// It is documented at https://www.elastic.co/guide/en/elasticsearch/reference/6.2/delete-pipeline-api.html. +type IngestDeletePipelineService struct { + client *Client + pretty bool + id string + masterTimeout string + timeout string +} + +// NewIngestDeletePipelineService creates a new IngestDeletePipelineService. +func NewIngestDeletePipelineService(client *Client) *IngestDeletePipelineService { + return &IngestDeletePipelineService{ + client: client, + } +} + +// Id is documented as: Pipeline ID. +func (s *IngestDeletePipelineService) Id(id string) *IngestDeletePipelineService { + s.id = id + return s +} + +// MasterTimeout is documented as: Explicit operation timeout for connection to master node. +func (s *IngestDeletePipelineService) MasterTimeout(masterTimeout string) *IngestDeletePipelineService { + s.masterTimeout = masterTimeout + return s +} + +// Timeout is documented as: Explicit operation timeout. +func (s *IngestDeletePipelineService) Timeout(timeout string) *IngestDeletePipelineService { + s.timeout = timeout + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *IngestDeletePipelineService) Pretty(pretty bool) *IngestDeletePipelineService { + s.pretty = pretty + return s +} + +// buildURL builds the URL for the operation. +func (s *IngestDeletePipelineService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/_ingest/pipeline/{id}", map[string]string{ + "id": s.id, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.masterTimeout != "" { + params.Set("master_timeout", s.masterTimeout) + } + if s.timeout != "" { + params.Set("timeout", s.timeout) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *IngestDeletePipelineService) Validate() error { + var invalid []string + if s.id == "" { + invalid = append(invalid, "Id") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *IngestDeletePipelineService) Do(ctx context.Context) (*IngestDeletePipelineResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "DELETE", + Path: path, + Params: params, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(IngestDeletePipelineResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// IngestDeletePipelineResponse is the response of IngestDeletePipelineService.Do. +type IngestDeletePipelineResponse struct { + Acknowledged bool `json:"acknowledged"` + ShardsAcknowledged bool `json:"shards_acknowledged"` + Index string `json:"index,omitempty"` +} diff --git a/vendor/github.com/olivere/elastic/ingest_delete_pipeline_test.go b/vendor/github.com/olivere/elastic/ingest_delete_pipeline_test.go new file mode 100644 index 0000000..1163e0f --- /dev/null +++ b/vendor/github.com/olivere/elastic/ingest_delete_pipeline_test.go @@ -0,0 +1,31 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import "testing" + +func TestIngestDeletePipelineURL(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tests := []struct { + Id string + Expected string + }{ + { + "my-pipeline-id", + "/_ingest/pipeline/my-pipeline-id", + }, + } + + for _, test := range tests { + path, _, err := client.IngestDeletePipeline(test.Id).buildURL() + if err != nil { + t.Fatal(err) + } + if path != test.Expected { + t.Errorf("expected %q; got: %q", test.Expected, path) + } + } +} diff --git a/vendor/github.com/olivere/elastic/ingest_get_pipeline.go b/vendor/github.com/olivere/elastic/ingest_get_pipeline.go new file mode 100644 index 0000000..46d28bd --- /dev/null +++ b/vendor/github.com/olivere/elastic/ingest_get_pipeline.go @@ -0,0 +1,121 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "net/url" + "strings" + + "github.com/olivere/elastic/uritemplates" +) + +// IngestGetPipelineService returns pipelines based on ID. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/get-pipeline-api.html +// for documentation. +type IngestGetPipelineService struct { + client *Client + pretty bool + id []string + masterTimeout string +} + +// NewIngestGetPipelineService creates a new IngestGetPipelineService. +func NewIngestGetPipelineService(client *Client) *IngestGetPipelineService { + return &IngestGetPipelineService{ + client: client, + } +} + +// Id is a list of pipeline ids. Wildcards supported. +func (s *IngestGetPipelineService) Id(id ...string) *IngestGetPipelineService { + s.id = append(s.id, id...) + return s +} + +// MasterTimeout is an explicit operation timeout for connection to master node. +func (s *IngestGetPipelineService) MasterTimeout(masterTimeout string) *IngestGetPipelineService { + s.masterTimeout = masterTimeout + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *IngestGetPipelineService) Pretty(pretty bool) *IngestGetPipelineService { + s.pretty = pretty + return s +} + +// buildURL builds the URL for the operation. +func (s *IngestGetPipelineService) buildURL() (string, url.Values, error) { + var err error + var path string + + // Build URL + if len(s.id) > 0 { + path, err = uritemplates.Expand("/_ingest/pipeline/{id}", map[string]string{ + "id": strings.Join(s.id, ","), + }) + } else { + path = "/_ingest/pipeline" + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.masterTimeout != "" { + params.Set("master_timeout", s.masterTimeout) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *IngestGetPipelineService) Validate() error { + return nil +} + +// Do executes the operation. +func (s *IngestGetPipelineService) Do(ctx context.Context) (IngestGetPipelineResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + }) + if err != nil { + return nil, err + } + + // Return operation response + var ret IngestGetPipelineResponse + if err := json.Unmarshal(res.Body, &ret); err != nil { + return nil, err + } + return ret, nil +} + +// IngestGetPipelineResponse is the response of IngestGetPipelineService.Do. +type IngestGetPipelineResponse map[string]*IngestGetPipeline + +type IngestGetPipeline struct { + ID string `json:"id"` + Config map[string]interface{} `json:"config"` +} diff --git a/vendor/github.com/olivere/elastic/ingest_get_pipeline_test.go b/vendor/github.com/olivere/elastic/ingest_get_pipeline_test.go new file mode 100644 index 0000000..009b717 --- /dev/null +++ b/vendor/github.com/olivere/elastic/ingest_get_pipeline_test.go @@ -0,0 +1,121 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "testing" +) + +func TestIngestGetPipelineURL(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tests := []struct { + Id []string + Expected string + }{ + { + nil, + "/_ingest/pipeline", + }, + { + []string{"my-pipeline-id"}, + "/_ingest/pipeline/my-pipeline-id", + }, + { + []string{"*"}, + "/_ingest/pipeline/%2A", + }, + { + []string{"pipeline-1", "pipeline-2"}, + "/_ingest/pipeline/pipeline-1%2Cpipeline-2", + }, + } + + for _, test := range tests { + path, _, err := client.IngestGetPipeline(test.Id...).buildURL() + if err != nil { + t.Fatal(err) + } + if path != test.Expected { + t.Errorf("expected %q; got: %q", test.Expected, path) + } + } +} + +func TestIngestLifecycle(t *testing.T) { + client := setupTestClientAndCreateIndexAndAddDocs(t) //, SetTraceLog(log.New(os.Stdout, "", 0))) + + // With the new ES Docker images, XPack is already installed and returns a pipeline. So we cannot test for "no pipelines". Skipping for now. + /* + // Get all pipelines (returns 404 that indicates an error) + getres, err := client.IngestGetPipeline().Do(context.TODO()) + if err == nil { + t.Fatal(err) + } + if getres != nil { + t.Fatalf("expected no response, got %v", getres) + } + //*/ + + // Add a pipeline + pipelineDef := `{ + "description" : "reset retweets", + "processors" : [ + { + "set" : { + "field": "retweets", + "value": 0 + } + } + ] +}` + putres, err := client.IngestPutPipeline("my-pipeline").BodyString(pipelineDef).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if putres == nil { + t.Fatal("expected response, got nil") + } + if want, have := true, putres.Acknowledged; want != have { + t.Fatalf("expected ack = %v, got %v", want, have) + } + + // Get all pipelines again + getres, err := client.IngestGetPipeline().Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if have := len(getres); have == 0 { + t.Fatalf("expected at least 1 pipeline, got %d", have) + } + if _, found := getres["my-pipeline"]; !found { + t.Fatalf("expected to find pipline with id %q", "my-pipeline") + } + + // Get pipeline by ID + getres, err = client.IngestGetPipeline("my-pipeline").Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if want, have := 1, len(getres); want != have { + t.Fatalf("expected %d pipelines, got %d", want, have) + } + if _, found := getres["my-pipeline"]; !found { + t.Fatalf("expected to find pipline with id %q", "my-pipeline") + } + + // Delete pipeline + delres, err := client.IngestDeletePipeline("my-pipeline").Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if delres == nil { + t.Fatal("expected response, got nil") + } + if want, have := true, delres.Acknowledged; want != have { + t.Fatalf("expected ack = %v, got %v", want, have) + } +} diff --git a/vendor/github.com/olivere/elastic/ingest_put_pipeline.go b/vendor/github.com/olivere/elastic/ingest_put_pipeline.go new file mode 100644 index 0000000..7c1dbc4 --- /dev/null +++ b/vendor/github.com/olivere/elastic/ingest_put_pipeline.go @@ -0,0 +1,158 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/url" + + "github.com/olivere/elastic/uritemplates" +) + +// IngestPutPipelineService adds pipelines and updates existing pipelines in +// the cluster. +// +// It is documented at https://www.elastic.co/guide/en/elasticsearch/reference/6.2/put-pipeline-api.html. +type IngestPutPipelineService struct { + client *Client + pretty bool + id string + masterTimeout string + timeout string + bodyJson interface{} + bodyString string +} + +// NewIngestPutPipelineService creates a new IngestPutPipelineService. +func NewIngestPutPipelineService(client *Client) *IngestPutPipelineService { + return &IngestPutPipelineService{ + client: client, + } +} + +// Id is the pipeline ID. +func (s *IngestPutPipelineService) Id(id string) *IngestPutPipelineService { + s.id = id + return s +} + +// MasterTimeout is an explicit operation timeout for connection to master node. +func (s *IngestPutPipelineService) MasterTimeout(masterTimeout string) *IngestPutPipelineService { + s.masterTimeout = masterTimeout + return s +} + +// Timeout specifies an explicit operation timeout. +func (s *IngestPutPipelineService) Timeout(timeout string) *IngestPutPipelineService { + s.timeout = timeout + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *IngestPutPipelineService) Pretty(pretty bool) *IngestPutPipelineService { + s.pretty = pretty + return s +} + +// BodyJson is the ingest definition, defined as a JSON-serializable document. +// Use e.g. a map[string]interface{} here. +func (s *IngestPutPipelineService) BodyJson(body interface{}) *IngestPutPipelineService { + s.bodyJson = body + return s +} + +// BodyString is the ingest definition, specified as a string. +func (s *IngestPutPipelineService) BodyString(body string) *IngestPutPipelineService { + s.bodyString = body + return s +} + +// buildURL builds the URL for the operation. +func (s *IngestPutPipelineService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/_ingest/pipeline/{id}", map[string]string{ + "id": s.id, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.masterTimeout != "" { + params.Set("master_timeout", s.masterTimeout) + } + if s.timeout != "" { + params.Set("timeout", s.timeout) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *IngestPutPipelineService) Validate() error { + var invalid []string + if s.id == "" { + invalid = append(invalid, "Id") + } + if s.bodyString == "" && s.bodyJson == nil { + invalid = append(invalid, "BodyJson") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *IngestPutPipelineService) Do(ctx context.Context) (*IngestPutPipelineResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Setup HTTP request body + var body interface{} + if s.bodyJson != nil { + body = s.bodyJson + } else { + body = s.bodyString + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "PUT", + Path: path, + Params: params, + Body: body, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(IngestPutPipelineResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// IngestPutPipelineResponse is the response of IngestPutPipelineService.Do. +type IngestPutPipelineResponse struct { + Acknowledged bool `json:"acknowledged"` + ShardsAcknowledged bool `json:"shards_acknowledged"` + Index string `json:"index,omitempty"` +} diff --git a/vendor/github.com/olivere/elastic/ingest_put_pipeline_test.go b/vendor/github.com/olivere/elastic/ingest_put_pipeline_test.go new file mode 100644 index 0000000..9609f2f --- /dev/null +++ b/vendor/github.com/olivere/elastic/ingest_put_pipeline_test.go @@ -0,0 +1,31 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import "testing" + +func TestIngestPutPipelineURL(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tests := []struct { + Id string + Expected string + }{ + { + "my-pipeline-id", + "/_ingest/pipeline/my-pipeline-id", + }, + } + + for _, test := range tests { + path, _, err := client.IngestPutPipeline(test.Id).buildURL() + if err != nil { + t.Fatal(err) + } + if path != test.Expected { + t.Errorf("expected %q; got: %q", test.Expected, path) + } + } +} diff --git a/vendor/github.com/olivere/elastic/ingest_simulate_pipeline.go b/vendor/github.com/olivere/elastic/ingest_simulate_pipeline.go new file mode 100644 index 0000000..43cca20 --- /dev/null +++ b/vendor/github.com/olivere/elastic/ingest_simulate_pipeline.go @@ -0,0 +1,161 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/url" + + "github.com/olivere/elastic/uritemplates" +) + +// IngestSimulatePipelineService executes a specific pipeline against the set of +// documents provided in the body of the request. +// +// The API is documented at +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/simulate-pipeline-api.html. +type IngestSimulatePipelineService struct { + client *Client + pretty bool + id string + verbose *bool + bodyJson interface{} + bodyString string +} + +// NewIngestSimulatePipelineService creates a new IngestSimulatePipeline. +func NewIngestSimulatePipelineService(client *Client) *IngestSimulatePipelineService { + return &IngestSimulatePipelineService{ + client: client, + } +} + +// Id specifies the pipeline ID. +func (s *IngestSimulatePipelineService) Id(id string) *IngestSimulatePipelineService { + s.id = id + return s +} + +// Verbose mode. Display data output for each processor in executed pipeline. +func (s *IngestSimulatePipelineService) Verbose(verbose bool) *IngestSimulatePipelineService { + s.verbose = &verbose + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *IngestSimulatePipelineService) Pretty(pretty bool) *IngestSimulatePipelineService { + s.pretty = pretty + return s +} + +// BodyJson is the ingest definition, defined as a JSON-serializable simulate +// definition. Use e.g. a map[string]interface{} here. +func (s *IngestSimulatePipelineService) BodyJson(body interface{}) *IngestSimulatePipelineService { + s.bodyJson = body + return s +} + +// BodyString is the simulate definition, defined as a string. +func (s *IngestSimulatePipelineService) BodyString(body string) *IngestSimulatePipelineService { + s.bodyString = body + return s +} + +// buildURL builds the URL for the operation. +func (s *IngestSimulatePipelineService) buildURL() (string, url.Values, error) { + var err error + var path string + + // Build URL + if s.id != "" { + path, err = uritemplates.Expand("/_ingest/pipeline/{id}/_simulate", map[string]string{ + "id": s.id, + }) + } else { + path = "/_ingest/pipeline/_simulate" + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.verbose != nil { + params.Set("verbose", fmt.Sprintf("%v", *s.verbose)) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *IngestSimulatePipelineService) Validate() error { + var invalid []string + if s.bodyString == "" && s.bodyJson == nil { + invalid = append(invalid, "BodyJson") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *IngestSimulatePipelineService) Do(ctx context.Context) (*IngestSimulatePipelineResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Setup HTTP request body + var body interface{} + if s.bodyJson != nil { + body = s.bodyJson + } else { + body = s.bodyString + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + Body: body, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(IngestSimulatePipelineResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// IngestSimulatePipelineResponse is the response of IngestSimulatePipeline.Do. +type IngestSimulatePipelineResponse struct { + Docs []*IngestSimulateDocumentResult `json:"docs"` +} + +type IngestSimulateDocumentResult struct { + Doc map[string]interface{} `json:"doc"` + ProcessorResults []*IngestSimulateProcessorResult `json:"processor_results"` +} + +type IngestSimulateProcessorResult struct { + ProcessorTag string `json:"tag"` + Doc map[string]interface{} `json:"doc"` +} diff --git a/vendor/github.com/olivere/elastic/ingest_simulate_pipeline_test.go b/vendor/github.com/olivere/elastic/ingest_simulate_pipeline_test.go new file mode 100644 index 0000000..a254f85 --- /dev/null +++ b/vendor/github.com/olivere/elastic/ingest_simulate_pipeline_test.go @@ -0,0 +1,35 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import "testing" + +func TestIngestSimulatePipelineURL(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tests := []struct { + Id string + Expected string + }{ + { + "", + "/_ingest/pipeline/_simulate", + }, + { + "my-pipeline-id", + "/_ingest/pipeline/my-pipeline-id/_simulate", + }, + } + + for _, test := range tests { + path, _, err := client.IngestSimulatePipeline().Id(test.Id).buildURL() + if err != nil { + t.Fatal(err) + } + if path != test.Expected { + t.Errorf("expected %q; got: %q", test.Expected, path) + } + } +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/inner_hit.go b/vendor/github.com/olivere/elastic/inner_hit.go similarity index 75% rename from vendor/gopkg.in/olivere/elastic.v2/inner_hit.go rename to vendor/github.com/olivere/elastic/inner_hit.go index 0dcf693..c371fbf 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/inner_hit.go +++ b/vendor/github.com/olivere/elastic/inner_hit.go @@ -1,4 +1,4 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. @@ -7,7 +7,7 @@ package elastic // InnerHit implements a simple join for parent/child, nested, and even // top-level documents in Elasticsearch. // It is an experimental feature for Elasticsearch versions 1.5 (or greater). -// See http://www.elastic.co/guide/en/elasticsearch/reference/1.5/search-request-inner-hits.html +// See http://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-request-inner-hits.html // for documentation. // // See the tests for SearchSource, HasChildFilter, HasChildQuery, @@ -66,18 +66,18 @@ func (hit *InnerHit) Version(version bool) *InnerHit { return hit } -func (hit *InnerHit) Field(fieldName string) *InnerHit { - hit.source.Field(fieldName) +func (hit *InnerHit) StoredField(storedFieldName string) *InnerHit { + hit.source.StoredField(storedFieldName) return hit } -func (hit *InnerHit) Fields(fieldNames ...string) *InnerHit { - hit.source.Fields(fieldNames...) +func (hit *InnerHit) StoredFields(storedFieldNames ...string) *InnerHit { + hit.source.StoredFields(storedFieldNames...) return hit } -func (hit *InnerHit) NoFields() *InnerHit { - hit.source.NoFields() +func (hit *InnerHit) NoStoredFields() *InnerHit { + hit.source.NoStoredFields() return hit } @@ -91,13 +91,13 @@ func (hit *InnerHit) FetchSourceContext(fetchSourceContext *FetchSourceContext) return hit } -func (hit *InnerHit) FieldDataFields(fieldDataFields ...string) *InnerHit { - hit.source.FieldDataFields(fieldDataFields...) +func (hit *InnerHit) DocvalueFields(docvalueFields ...string) *InnerHit { + hit.source.DocvalueFields(docvalueFields...) return hit } -func (hit *InnerHit) FieldDataField(fieldDataField string) *InnerHit { - hit.source.FieldDataField(fieldDataField) +func (hit *InnerHit) DocvalueField(docvalueField string) *InnerHit { + hit.source.DocvalueField(docvalueField) return hit } @@ -140,10 +140,14 @@ func (hit *InnerHit) Name(name string) *InnerHit { return hit } -func (hit *InnerHit) Source() interface{} { - source, ok := hit.source.Source().(map[string]interface{}) +func (hit *InnerHit) Source() (interface{}, error) { + src, err := hit.source.Source() + if err != nil { + return nil, err + } + source, ok := src.(map[string]interface{}) if !ok { - return nil + return nil, nil } // Notice that hit.typ and hit.path are not exported here. @@ -152,5 +156,5 @@ func (hit *InnerHit) Source() interface{} { if hit.name != "" { source["name"] = hit.name } - return source + return source, nil } diff --git a/vendor/github.com/olivere/elastic/inner_hit_test.go b/vendor/github.com/olivere/elastic/inner_hit_test.go new file mode 100644 index 0000000..fd9bd2e --- /dev/null +++ b/vendor/github.com/olivere/elastic/inner_hit_test.go @@ -0,0 +1,44 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestInnerHitEmpty(t *testing.T) { + hit := NewInnerHit() + src, err := hit.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestInnerHitWithName(t *testing.T) { + hit := NewInnerHit().Name("comments") + src, err := hit.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"name":"comments"}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/logger.go b/vendor/github.com/olivere/elastic/logger.go similarity index 80% rename from vendor/gopkg.in/olivere/elastic.v2/logger.go rename to vendor/github.com/olivere/elastic/logger.go index 0fb16b1..095eb4c 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/logger.go +++ b/vendor/github.com/olivere/elastic/logger.go @@ -1,4 +1,4 @@ -// Copyright 2012-2016 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. diff --git a/vendor/github.com/olivere/elastic/mget.go b/vendor/github.com/olivere/elastic/mget.go new file mode 100644 index 0000000..eccf194 --- /dev/null +++ b/vendor/github.com/olivere/elastic/mget.go @@ -0,0 +1,260 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" + "strings" +) + +// MgetService allows to get multiple documents based on an index, +// type (optional) and id (possibly routing). The response includes +// a docs array with all the fetched documents, each element similar +// in structure to a document provided by the Get API. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-multi-get.html +// for details. +type MgetService struct { + client *Client + pretty bool + preference string + realtime *bool + refresh string + routing string + storedFields []string + items []*MultiGetItem +} + +// NewMgetService initializes a new Multi GET API request call. +func NewMgetService(client *Client) *MgetService { + builder := &MgetService{ + client: client, + } + return builder +} + +// Preference specifies the node or shard the operation should be performed +// on (default: random). +func (s *MgetService) Preference(preference string) *MgetService { + s.preference = preference + return s +} + +// Refresh the shard containing the document before performing the operation. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-refresh.html +// for details. +func (s *MgetService) Refresh(refresh string) *MgetService { + s.refresh = refresh + return s +} + +// Realtime specifies whether to perform the operation in realtime or search mode. +func (s *MgetService) Realtime(realtime bool) *MgetService { + s.realtime = &realtime + return s +} + +// Routing is the specific routing value. +func (s *MgetService) Routing(routing string) *MgetService { + s.routing = routing + return s +} + +// StoredFields is a list of fields to return in the response. +func (s *MgetService) StoredFields(storedFields ...string) *MgetService { + s.storedFields = append(s.storedFields, storedFields...) + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *MgetService) Pretty(pretty bool) *MgetService { + s.pretty = pretty + return s +} + +// Add an item to the request. +func (s *MgetService) Add(items ...*MultiGetItem) *MgetService { + s.items = append(s.items, items...) + return s +} + +// Source returns the request body, which will be serialized into JSON. +func (s *MgetService) Source() (interface{}, error) { + source := make(map[string]interface{}) + items := make([]interface{}, len(s.items)) + for i, item := range s.items { + src, err := item.Source() + if err != nil { + return nil, err + } + items[i] = src + } + source["docs"] = items + return source, nil +} + +// Do executes the request. +func (s *MgetService) Do(ctx context.Context) (*MgetResponse, error) { + // Build url + path := "/_mget" + + params := make(url.Values) + if s.realtime != nil { + params.Add("realtime", fmt.Sprintf("%v", *s.realtime)) + } + if s.preference != "" { + params.Add("preference", s.preference) + } + if s.refresh != "" { + params.Add("refresh", s.refresh) + } + if s.routing != "" { + params.Set("routing", s.routing) + } + if len(s.storedFields) > 0 { + params.Set("stored_fields", strings.Join(s.storedFields, ",")) + } + + // Set body + body, err := s.Source() + if err != nil { + return nil, err + } + + // Get response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + Body: body, + }) + if err != nil { + return nil, err + } + + // Return result + ret := new(MgetResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// -- Multi Get Item -- + +// MultiGetItem is a single document to retrieve via the MgetService. +type MultiGetItem struct { + index string + typ string + id string + routing string + storedFields []string + version *int64 // see org.elasticsearch.common.lucene.uid.Versions + versionType string // see org.elasticsearch.index.VersionType + fsc *FetchSourceContext +} + +// NewMultiGetItem initializes a new, single item for a Multi GET request. +func NewMultiGetItem() *MultiGetItem { + return &MultiGetItem{} +} + +// Index specifies the index name. +func (item *MultiGetItem) Index(index string) *MultiGetItem { + item.index = index + return item +} + +// Type specifies the type name. +func (item *MultiGetItem) Type(typ string) *MultiGetItem { + item.typ = typ + return item +} + +// Id specifies the identifier of the document. +func (item *MultiGetItem) Id(id string) *MultiGetItem { + item.id = id + return item +} + +// Routing is the specific routing value. +func (item *MultiGetItem) Routing(routing string) *MultiGetItem { + item.routing = routing + return item +} + +// StoredFields is a list of fields to return in the response. +func (item *MultiGetItem) StoredFields(storedFields ...string) *MultiGetItem { + item.storedFields = append(item.storedFields, storedFields...) + return item +} + +// Version can be MatchAny (-3), MatchAnyPre120 (0), NotFound (-1), +// or NotSet (-2). These are specified in org.elasticsearch.common.lucene.uid.Versions. +// The default in Elasticsearch is MatchAny (-3). +func (item *MultiGetItem) Version(version int64) *MultiGetItem { + item.version = &version + return item +} + +// VersionType can be "internal", "external", "external_gt", or "external_gte". +// See org.elasticsearch.index.VersionType in Elasticsearch source. +// It is "internal" by default. +func (item *MultiGetItem) VersionType(versionType string) *MultiGetItem { + item.versionType = versionType + return item +} + +// FetchSource allows to specify source filtering. +func (item *MultiGetItem) FetchSource(fetchSourceContext *FetchSourceContext) *MultiGetItem { + item.fsc = fetchSourceContext + return item +} + +// Source returns the serialized JSON to be sent to Elasticsearch as +// part of a MultiGet search. +func (item *MultiGetItem) Source() (interface{}, error) { + source := make(map[string]interface{}) + + source["_id"] = item.id + + if item.index != "" { + source["_index"] = item.index + } + if item.typ != "" { + source["_type"] = item.typ + } + if item.fsc != nil { + src, err := item.fsc.Source() + if err != nil { + return nil, err + } + source["_source"] = src + } + if item.routing != "" { + source["_routing"] = item.routing + } + if len(item.storedFields) > 0 { + source["stored_fields"] = strings.Join(item.storedFields, ",") + } + if item.version != nil { + source["version"] = fmt.Sprintf("%d", *item.version) + } + if item.versionType != "" { + source["version_type"] = item.versionType + } + + return source, nil +} + +// -- Result of a Multi Get request. + +// MgetResponse is the outcome of a Multi GET API request. +type MgetResponse struct { + Docs []*GetResult `json:"docs,omitempty"` +} diff --git a/vendor/github.com/olivere/elastic/mget_test.go b/vendor/github.com/olivere/elastic/mget_test.go new file mode 100644 index 0000000..6b3ecd9 --- /dev/null +++ b/vendor/github.com/olivere/elastic/mget_test.go @@ -0,0 +1,96 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "testing" +) + +func TestMultiGet(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} + tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} + tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} + + // Add some documents + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Count documents + count, err := client.Count(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if count != 3 { + t.Errorf("expected Count = %d; got %d", 3, count) + } + + // Get documents 1 and 3 + res, err := client.MultiGet(). + Add(NewMultiGetItem().Index(testIndexName).Type("doc").Id("1")). + Add(NewMultiGetItem().Index(testIndexName).Type("doc").Id("3")). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if res == nil { + t.Fatal("expected result to be != nil; got nil") + } + if res.Docs == nil { + t.Fatal("expected result docs to be != nil; got nil") + } + if len(res.Docs) != 2 { + t.Fatalf("expected to have 2 docs; got %d", len(res.Docs)) + } + + item := res.Docs[0] + if item.Error != nil { + t.Errorf("expected no error on item 0; got %v", item.Error) + } + if item.Source == nil { + t.Errorf("expected Source != nil; got %v", item.Source) + } + var doc tweet + if err := json.Unmarshal(*item.Source, &doc); err != nil { + t.Fatalf("expected to unmarshal item Source; got %v", err) + } + if doc.Message != tweet1.Message { + t.Errorf("expected Message of first tweet to be %q; got %q", tweet1.Message, doc.Message) + } + + item = res.Docs[1] + if item.Error != nil { + t.Errorf("expected no error on item 1; got %v", item.Error) + } + if item.Source == nil { + t.Errorf("expected Source != nil; got %v", item.Source) + } + if err := json.Unmarshal(*item.Source, &doc); err != nil { + t.Fatalf("expected to unmarshal item Source; got %v", err) + } + if doc.Message != tweet3.Message { + t.Errorf("expected Message of second tweet to be %q; got %q", tweet3.Message, doc.Message) + } +} diff --git a/vendor/github.com/olivere/elastic/msearch.go b/vendor/github.com/olivere/elastic/msearch.go new file mode 100644 index 0000000..c1a589a --- /dev/null +++ b/vendor/github.com/olivere/elastic/msearch.go @@ -0,0 +1,116 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/url" + "strings" +) + +// MultiSearch executes one or more searches in one roundtrip. +type MultiSearchService struct { + client *Client + requests []*SearchRequest + indices []string + pretty bool + maxConcurrentRequests *int + preFilterShardSize *int +} + +func NewMultiSearchService(client *Client) *MultiSearchService { + builder := &MultiSearchService{ + client: client, + } + return builder +} + +func (s *MultiSearchService) Add(requests ...*SearchRequest) *MultiSearchService { + s.requests = append(s.requests, requests...) + return s +} + +func (s *MultiSearchService) Index(indices ...string) *MultiSearchService { + s.indices = append(s.indices, indices...) + return s +} + +func (s *MultiSearchService) Pretty(pretty bool) *MultiSearchService { + s.pretty = pretty + return s +} + +func (s *MultiSearchService) MaxConcurrentSearches(max int) *MultiSearchService { + s.maxConcurrentRequests = &max + return s +} + +func (s *MultiSearchService) PreFilterShardSize(size int) *MultiSearchService { + s.preFilterShardSize = &size + return s +} + +func (s *MultiSearchService) Do(ctx context.Context) (*MultiSearchResult, error) { + // Build url + path := "/_msearch" + + // Parameters + params := make(url.Values) + if s.pretty { + params.Set("pretty", fmt.Sprintf("%v", s.pretty)) + } + if v := s.maxConcurrentRequests; v != nil { + params.Set("max_concurrent_searches", fmt.Sprintf("%v", *v)) + } + if v := s.preFilterShardSize; v != nil { + params.Set("pre_filter_shard_size", fmt.Sprintf("%v", *v)) + } + + // Set body + var lines []string + for _, sr := range s.requests { + // Set default indices if not specified in the request + if !sr.HasIndices() && len(s.indices) > 0 { + sr = sr.Index(s.indices...) + } + + header, err := json.Marshal(sr.header()) + if err != nil { + return nil, err + } + body, err := sr.Body() + if err != nil { + return nil, err + } + lines = append(lines, string(header)) + lines = append(lines, body) + } + body := strings.Join(lines, "\n") + "\n" // add trailing \n + + // Get response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + Body: body, + }) + if err != nil { + return nil, err + } + + // Return result + ret := new(MultiSearchResult) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// MultiSearchResult is the outcome of running a multi-search operation. +type MultiSearchResult struct { + Responses []*SearchResult `json:"responses,omitempty"` +} diff --git a/vendor/github.com/olivere/elastic/msearch_test.go b/vendor/github.com/olivere/elastic/msearch_test.go new file mode 100644 index 0000000..d25e2cc --- /dev/null +++ b/vendor/github.com/olivere/elastic/msearch_test.go @@ -0,0 +1,303 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + _ "net/http" + "testing" +) + +func TestMultiSearch(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + // client := setupTestClientAndCreateIndexAndLog(t) + + tweet1 := tweet{ + User: "olivere", + Message: "Welcome to Golang and Elasticsearch.", + Tags: []string{"golang", "elasticsearch"}, + } + tweet2 := tweet{ + User: "olivere", + Message: "Another unrelated topic.", + Tags: []string{"golang"}, + } + tweet3 := tweet{ + User: "sandrae", + Message: "Cycling is fun.", + Tags: []string{"sports", "cycling"}, + } + + // Add all documents + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Spawn two search queries with one roundtrip + q1 := NewMatchAllQuery() + q2 := NewTermQuery("tags", "golang") + + sreq1 := NewSearchRequest().Index(testIndexName, testIndexName2). + Source(NewSearchSource().Query(q1).Size(10)) + sreq2 := NewSearchRequest().Index(testIndexName).Type("doc"). + Source(NewSearchSource().Query(q2)) + + searchResult, err := client.MultiSearch(). + Add(sreq1, sreq2). + Pretty(true). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if searchResult.Responses == nil { + t.Fatal("expected responses != nil; got nil") + } + if len(searchResult.Responses) != 2 { + t.Fatalf("expected 2 responses; got %d", len(searchResult.Responses)) + } + + sres := searchResult.Responses[0] + if sres.Hits == nil { + t.Errorf("expected Hits != nil; got nil") + } + if sres.Hits.TotalHits != 3 { + t.Errorf("expected Hits.TotalHits = %d; got %d", 3, sres.Hits.TotalHits) + } + if len(sres.Hits.Hits) != 3 { + t.Errorf("expected len(Hits.Hits) = %d; got %d", 3, len(sres.Hits.Hits)) + } + for _, hit := range sres.Hits.Hits { + if hit.Index != testIndexName { + t.Errorf("expected Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) + } + item := make(map[string]interface{}) + err := json.Unmarshal(*hit.Source, &item) + if err != nil { + t.Fatal(err) + } + } + + sres = searchResult.Responses[1] + if sres.Hits == nil { + t.Errorf("expected Hits != nil; got nil") + } + if sres.Hits.TotalHits != 2 { + t.Errorf("expected Hits.TotalHits = %d; got %d", 2, sres.Hits.TotalHits) + } + if len(sres.Hits.Hits) != 2 { + t.Errorf("expected len(Hits.Hits) = %d; got %d", 2, len(sres.Hits.Hits)) + } + for _, hit := range sres.Hits.Hits { + if hit.Index != testIndexName { + t.Errorf("expected Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) + } + item := make(map[string]interface{}) + err := json.Unmarshal(*hit.Source, &item) + if err != nil { + t.Fatal(err) + } + } +} + +func TestMultiSearchWithStrings(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + // client := setupTestClientAndCreateIndexAndLog(t) + + tweet1 := tweet{ + User: "olivere", + Message: "Welcome to Golang and Elasticsearch.", + Tags: []string{"golang", "elasticsearch"}, + } + tweet2 := tweet{ + User: "olivere", + Message: "Another unrelated topic.", + Tags: []string{"golang"}, + } + tweet3 := tweet{ + User: "sandrae", + Message: "Cycling is fun.", + Tags: []string{"sports", "cycling"}, + } + + // Add all documents + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Spawn two search queries with one roundtrip + sreq1 := NewSearchRequest().Index(testIndexName, testIndexName2). + Source(`{"query":{"match_all":{}}}`) + sreq2 := NewSearchRequest().Index(testIndexName).Type("doc"). + Source(`{"query":{"term":{"tags":"golang"}}}`) + + searchResult, err := client.MultiSearch(). + Add(sreq1, sreq2). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if searchResult.Responses == nil { + t.Fatal("expected responses != nil; got nil") + } + if len(searchResult.Responses) != 2 { + t.Fatalf("expected 2 responses; got %d", len(searchResult.Responses)) + } + + sres := searchResult.Responses[0] + if sres.Hits == nil { + t.Errorf("expected Hits != nil; got nil") + } + if sres.Hits.TotalHits != 3 { + t.Errorf("expected Hits.TotalHits = %d; got %d", 3, sres.Hits.TotalHits) + } + if len(sres.Hits.Hits) != 3 { + t.Errorf("expected len(Hits.Hits) = %d; got %d", 3, len(sres.Hits.Hits)) + } + for _, hit := range sres.Hits.Hits { + if hit.Index != testIndexName { + t.Errorf("expected Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) + } + item := make(map[string]interface{}) + err := json.Unmarshal(*hit.Source, &item) + if err != nil { + t.Fatal(err) + } + } + + sres = searchResult.Responses[1] + if sres.Hits == nil { + t.Errorf("expected Hits != nil; got nil") + } + if sres.Hits.TotalHits != 2 { + t.Errorf("expected Hits.TotalHits = %d; got %d", 2, sres.Hits.TotalHits) + } + if len(sres.Hits.Hits) != 2 { + t.Errorf("expected len(Hits.Hits) = %d; got %d", 2, len(sres.Hits.Hits)) + } + for _, hit := range sres.Hits.Hits { + if hit.Index != testIndexName { + t.Errorf("expected Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) + } + item := make(map[string]interface{}) + err := json.Unmarshal(*hit.Source, &item) + if err != nil { + t.Fatal(err) + } + } +} + +func TestMultiSearchWithOneRequest(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tweet1 := tweet{ + User: "olivere", + Message: "Welcome to Golang and Elasticsearch.", + Tags: []string{"golang", "elasticsearch"}, + } + tweet2 := tweet{ + User: "olivere", + Message: "Another unrelated topic.", + Tags: []string{"golang"}, + } + tweet3 := tweet{ + User: "sandrae", + Message: "Cycling is fun.", + Tags: []string{"sports", "cycling"}, + } + + // Add all documents + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Spawn two search queries with one roundtrip + query := NewMatchAllQuery() + source := NewSearchSource().Query(query).Size(10) + sreq := NewSearchRequest().Source(source) + + searchResult, err := client.MultiSearch(). + Index(testIndexName). + Add(sreq). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if searchResult.Responses == nil { + t.Fatal("expected responses != nil; got nil") + } + if len(searchResult.Responses) != 1 { + t.Fatalf("expected 1 responses; got %d", len(searchResult.Responses)) + } + + sres := searchResult.Responses[0] + if sres.Hits == nil { + t.Errorf("expected Hits != nil; got nil") + } + if sres.Hits.TotalHits != 3 { + t.Errorf("expected Hits.TotalHits = %d; got %d", 3, sres.Hits.TotalHits) + } + if len(sres.Hits.Hits) != 3 { + t.Errorf("expected len(Hits.Hits) = %d; got %d", 3, len(sres.Hits.Hits)) + } + for _, hit := range sres.Hits.Hits { + if hit.Index != testIndexName { + t.Errorf("expected Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) + } + item := make(map[string]interface{}) + err := json.Unmarshal(*hit.Source, &item) + if err != nil { + t.Fatal(err) + } + } +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/mtermvectors.go b/vendor/github.com/olivere/elastic/mtermvectors.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v2/mtermvectors.go rename to vendor/github.com/olivere/elastic/mtermvectors.go index 7721aa7..e8fb48f 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/mtermvectors.go +++ b/vendor/github.com/olivere/elastic/mtermvectors.go @@ -5,19 +5,20 @@ package elastic import ( + "context" "encoding/json" "fmt" "net/url" "strings" - "gopkg.in/olivere/elastic.v2/uritemplates" + "github.com/olivere/elastic/uritemplates" ) // MultiTermvectorService returns information and statistics on terms in the // fields of a particular document. The document could be stored in the // index or artificially provided by the user. // -// See https://www.elastic.co/guide/en/elasticsearch/reference/1.7/docs-multi-termvectors.html +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-multi-termvectors.html // for documentation. type MultiTermvectorService struct { client *Client @@ -197,7 +198,7 @@ func (s *MultiTermvectorService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "1") + params.Set("pretty", "true") } if s.fieldStatistics != nil { params.Set("field_statistics", fmt.Sprintf("%v", *s.fieldStatistics)) @@ -254,7 +255,7 @@ func (s *MultiTermvectorService) Validate() error { } // Do executes the operation. -func (s *MultiTermvectorService) Do() (*MultiTermvectorResponse, error) { +func (s *MultiTermvectorService) Do(ctx context.Context) (*MultiTermvectorResponse, error) { // Check pre-conditions if err := s.Validate(); err != nil { return nil, err @@ -277,7 +278,12 @@ func (s *MultiTermvectorService) Do() (*MultiTermvectorResponse, error) { } // Get HTTP response - res, err := s.client.PerformRequest("GET", path, params, body) + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + Body: body, + }) if err != nil { return nil, err } diff --git a/vendor/gopkg.in/olivere/elastic.v2/mtermvectors_test.go b/vendor/github.com/olivere/elastic/mtermvectors_test.go similarity index 77% rename from vendor/gopkg.in/olivere/elastic.v2/mtermvectors_test.go rename to vendor/github.com/olivere/elastic/mtermvectors_test.go index fc4c36b..5f90cd5 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/mtermvectors_test.go +++ b/vendor/github.com/olivere/elastic/mtermvectors_test.go @@ -5,6 +5,7 @@ package elastic import ( + "context" "testing" ) @@ -34,15 +35,15 @@ func TestMultiTermVectorsValidateAndBuildURL(t *testing.T) { // #2: Type without index { "", - "tweet", + "doc", "", true, }, // #3: Both index and type { "twitter", - "tweet", - "/twitter/tweet/_mtermvectors", + "doc", + "/twitter/doc/_mtermvectors", false, }, } @@ -81,28 +82,28 @@ func TestMultiTermVectorsWithIds(t *testing.T) { tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) if err != nil { t.Fatal(err) } - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) if err != nil { t.Fatal(err) } - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() + _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) if err != nil { t.Fatal(err) } - _, err = client.Flush().Index(testIndexName).Do() + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) if err != nil { t.Fatal(err) } // Count documents - count, err := client.Count(testIndexName).Do() + count, err := client.Count(testIndexName).Do(context.TODO()) if err != nil { t.Fatal(err) } @@ -114,10 +115,10 @@ func TestMultiTermVectorsWithIds(t *testing.T) { field := "Message" res, err := client.MultiTermVectors(). Index(testIndexName). - Type("tweet"). - Add(NewMultiTermvectorItem().Index(testIndexName).Type("tweet").Id("1").Fields(field)). - Add(NewMultiTermvectorItem().Index(testIndexName).Type("tweet").Id("3").Fields(field)). - Do() + Type("doc"). + Add(NewMultiTermvectorItem().Index(testIndexName).Type("doc").Id("1").Fields(field)). + Add(NewMultiTermvectorItem().Index(testIndexName).Type("doc").Id("3").Fields(field)). + Do(context.TODO()) if err != nil { t.Fatal(err) } diff --git a/vendor/gopkg.in/olivere/elastic.v2/nodes_info.go b/vendor/github.com/olivere/elastic/nodes_info.go similarity index 86% rename from vendor/gopkg.in/olivere/elastic.v2/nodes_info.go rename to vendor/github.com/olivere/elastic/nodes_info.go index ad404fb..6592316 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/nodes_info.go +++ b/vendor/github.com/olivere/elastic/nodes_info.go @@ -1,30 +1,22 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. package elastic import ( + "context" "fmt" - "log" "net/url" "strings" "time" - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -var ( - _ = fmt.Print - _ = log.Print - _ = strings.Index - _ = uritemplates.Expand - _ = url.Parse + "github.com/olivere/elastic/uritemplates" ) // NodesInfoService allows to retrieve one or more or all of the // cluster nodes information. -// It is documented at http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/cluster-nodes-info.html. +// It is documented at https://www.elastic.co/guide/en/elasticsearch/reference/6.2/cluster-nodes-info.html. type NodesInfoService struct { client *Client pretty bool @@ -47,7 +39,6 @@ func NewNodesInfoService(client *Client) *NodesInfoService { // Use "_local" to return information from the node you're connecting to, // leave empty to get information from all nodes. func (s *NodesInfoService) NodeId(nodeId ...string) *NodesInfoService { - s.nodeId = make([]string, 0) s.nodeId = append(s.nodeId, nodeId...) return s } @@ -56,7 +47,6 @@ func (s *NodesInfoService) NodeId(nodeId ...string) *NodesInfoService { // Valid metrics are: settings, os, process, jvm, thread_pool, network, // transport, http, and plugins. func (s *NodesInfoService) Metric(metric ...string) *NodesInfoService { - s.metric = make([]string, 0) s.metric = append(s.metric, metric...) return s } @@ -99,7 +89,7 @@ func (s *NodesInfoService) buildURL() (string, url.Values, error) { params.Set("human", fmt.Sprintf("%v", *s.human)) } if s.pretty { - params.Set("pretty", "1") + params.Set("pretty", "true") } return path, params, nil } @@ -110,7 +100,7 @@ func (s *NodesInfoService) Validate() error { } // Do executes the operation. -func (s *NodesInfoService) Do() (*NodesInfoResponse, error) { +func (s *NodesInfoService) Do(ctx context.Context) (*NodesInfoResponse, error) { // Check pre-conditions if err := s.Validate(); err != nil { return nil, err @@ -123,7 +113,11 @@ func (s *NodesInfoService) Do() (*NodesInfoResponse, error) { } // Get HTTP response - res, err := s.client.PerformRequest("GET", path, params, nil) + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + }) if err != nil { return nil, err } @@ -145,7 +139,7 @@ type NodesInfoResponse struct { type NodesInfoNode struct { // Name of the node, e.g. "Mister Fear" Name string `json:"name"` - // TransportAddress, e.g. "inet[/127.0.0.1:9300]" + // TransportAddress, e.g. "127.0.0.1:9300" TransportAddress string `json:"transport_address"` // Host is the host name, e.g. "macbookair" Host string `json:"host"` @@ -155,11 +149,14 @@ type NodesInfoNode struct { Version string `json:"version"` // Build is the Elasticsearch build, e.g. "36a29a7" Build string `json:"build"` - // HTTPAddress, e.g. "inet[/127.0.0.1:9200]" + // HTTPAddress, e.g. "127.0.0.1:9200" HTTPAddress string `json:"http_address"` - // HTTPSAddress, e.g. "inet[/127.0.0.1:9200]" + // HTTPSAddress, e.g. "127.0.0.1:9200" HTTPSAddress string `json:"https_address"` + // Attributes of the node. + Attributes map[string]interface{} `json:"attributes"` + // Settings of the node, e.g. paths and pidfile. Settings map[string]interface{} `json:"settings"` @@ -170,7 +167,7 @@ type NodesInfoNode struct { Process *NodesInfoNodeProcess `json:"process"` // JVM information, e.g. VM version. - JVM *NodesInfoNodeProcess `json:"jvm"` + JVM *NodesInfoNodeJVM `json:"jvm"` // ThreadPool information. ThreadPool *NodesInfoNodeThreadPool `json:"thread_pool"` @@ -290,15 +287,21 @@ type NodesInfoNodeNetwork struct { } type NodesInfoNodeTransport struct { - BoundAddress string `json:"bound_address"` // e.g. inet[/127.0.0.1:9300] - PublishAddress string `json:"publish_address"` // e.g. inet[/127.0.0.1:9300] + BoundAddress []string `json:"bound_address"` + PublishAddress string `json:"publish_address"` + Profiles map[string]*NodesInfoNodeTransportProfile `json:"profiles"` +} + +type NodesInfoNodeTransportProfile struct { + BoundAddress []string `json:"bound_address"` + PublishAddress string `json:"publish_address"` } type NodesInfoNodeHTTP struct { - BoundAddress string `json:"bound_address"` // e.g. inet[/127.0.0.1:9300] - PublishAddress string `json:"publish_address"` // e.g. inet[/127.0.0.1:9300] - MaxContentLength string `json:"max_content_length"` // e.g. "100mb" - MaxContentLengthInBytes int64 `json:"max_content_length_in_bytes"` + BoundAddress []string `json:"bound_address"` // e.g. ["127.0.0.1:9200", "[fe80::1]:9200", "[::1]:9200"] + PublishAddress string `json:"publish_address"` // e.g. "127.0.0.1:9300" + MaxContentLength string `json:"max_content_length"` // e.g. "100mb" + MaxContentLengthInBytes int64 `json:"max_content_length_in_bytes"` } type NodesInfoNodePlugin struct { diff --git a/vendor/gopkg.in/olivere/elastic.v2/nodes_info_test.go b/vendor/github.com/olivere/elastic/nodes_info_test.go similarity index 83% rename from vendor/gopkg.in/olivere/elastic.v2/nodes_info_test.go rename to vendor/github.com/olivere/elastic/nodes_info_test.go index 0402b27..41d9975 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/nodes_info_test.go +++ b/vendor/github.com/olivere/elastic/nodes_info_test.go @@ -1,10 +1,13 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. package elastic -import "testing" +import ( + "context" + "testing" +) func TestNodesInfo(t *testing.T) { client, err := NewClient() @@ -12,7 +15,7 @@ func TestNodesInfo(t *testing.T) { t.Fatal(err) } - info, err := client.NodesInfo().Do() + info, err := client.NodesInfo().Do(context.TODO()) if err != nil { t.Fatal(err) } diff --git a/vendor/gopkg.in/olivere/elastic.v2/nodes_stats.go b/vendor/github.com/olivere/elastic/nodes_stats.go similarity index 86% rename from vendor/gopkg.in/olivere/elastic.v2/nodes_stats.go rename to vendor/github.com/olivere/elastic/nodes_stats.go index 5428cc9..7c5f0c9 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/nodes_stats.go +++ b/vendor/github.com/olivere/elastic/nodes_stats.go @@ -5,16 +5,17 @@ package elastic import ( + "context" "encoding/json" "fmt" "net/url" "strings" - "gopkg.in/olivere/elastic.v2/uritemplates" + "github.com/olivere/elastic/uritemplates" ) // NodesStatsService returns node statistics. -// See http://www.elastic.co/guide/en/elasticsearch/reference/master/cluster-nodes-stats.html +// See http://www.elastic.co/guide/en/elasticsearch/reference/5.2/cluster-nodes-stats.html // for details. type NodesStatsService struct { client *Client @@ -164,7 +165,7 @@ func (s *NodesStatsService) buildURL() (string, url.Values, error) { // Add query string parameters params := url.Values{} if s.pretty { - params.Set("pretty", "1") + params.Set("pretty", "true") } if len(s.completionFields) > 0 { params.Set("completion_fields", strings.Join(s.completionFields, ",")) @@ -199,7 +200,7 @@ func (s *NodesStatsService) Validate() error { } // Do executes the operation. -func (s *NodesStatsService) Do() (*NodesStatsResponse, error) { +func (s *NodesStatsService) Do(ctx context.Context) (*NodesStatsResponse, error) { // Check pre-conditions if err := s.Validate(); err != nil { return nil, err @@ -212,7 +213,11 @@ func (s *NodesStatsService) Do() (*NodesStatsResponse, error) { } // Get HTTP response - res, err := s.client.PerformRequest("GET", path, params, nil) + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + }) if err != nil { return nil, err } @@ -240,8 +245,10 @@ type NodesStatsNode struct { TransportAddress string `json:"transport_address"` // Host is the host name, e.g. "macbookair" Host string `json:"host"` - // IP is the list of IP addresses, e.g. ["192.168.1.2"] - IP []string `json:"ip"` + // IP is an IP address, e.g. "192.168.1.2" + IP string `json:"ip"` + // Roles is a list of the roles of the node, e.g. master, data, ingest. + Roles []string `json:"roles"` // Attributes of the node. Attributes map[string]interface{} `json:"attributes"` @@ -271,10 +278,16 @@ type NodesStatsNode struct { HTTP *NodesStatsNodeHTTP `json:"http"` // Breaker contains information about circuit breakers. - Breaker map[string]*NodesStatsBreaker `json:"breaker"` + Breaker map[string]*NodesStatsBreaker `json:"breakers"` // ScriptStats information. ScriptStats *NodesStatsScriptStats `json:"script"` + + // Discovery information. + Discovery *NodesStatsDiscovery `json:"discovery"` + + // Ingest information + Ingest *NodesStatsIngest `json:"ingest"` } type NodesStatsIndex struct { @@ -307,26 +320,21 @@ type NodesStatsDocsStats struct { } type NodesStatsStoreStats struct { - Size string `json:"size"` - SizeInBytes int64 `json:"size_in_bytes"` - ThrottleTime string `json:"throttle_time"` - ThrottleTimeInMillis int64 `json:"throttle_time_in_millis"` + Size string `json:"size"` + SizeInBytes int64 `json:"size_in_bytes"` } type NodesStatsIndexingStats struct { - IndexTotal int64 `json:"index_total"` - IndexTime string `json:"index_time"` - IndexTimeInMillis int64 `json:"index_time_in_millis"` - IndexCurrent int64 `json:"index_current"` - IndexFailed int64 `json:"index_failed"` - DeleteTotal int64 `json:"delete_total"` - DeleteTime string `json:"delete_time"` - DeleteTimeInMillis int64 `json:"delete_time_in_millis"` - DeleteCurrent int64 `json:"delete_current"` - NoopUpdateTotal int64 `json:"noop_update_total"` - IsThrottled bool `json:"is_throttled"` - ThrottleTime string `json:"throttle_time"` - ThrottleTimeInMillis int64 `json:"throttle_time_in_millis"` + IndexTotal int64 `json:"index_total"` + IndexTime string `json:"index_time"` + IndexTimeInMillis int64 `json:"index_time_in_millis"` + IndexCurrent int64 `json:"index_current"` + IndexFailed int64 `json:"index_failed"` + DeleteTotal int64 `json:"delete_total"` + DeleteTime string `json:"delete_time"` + DeleteTimeInMillis int64 `json:"delete_time_in_millis"` + DeleteCurrent int64 `json:"delete_current"` + NoopUpdateTotal int64 `json:"noop_update_total"` Types map[string]*NodesStatsIndexingStats `json:"types"` // stats for individual types } @@ -486,39 +494,31 @@ type NodesStatsRequestCacheStats struct { } type NodesStatsRecoveryStats struct { - CurrentAsSource int `json:"current_as_source"` - CurrentAsTarget int `json:"current_as_target"` - ThrottleTime string `json:"throttle_time"` - ThrottleTimeInMillis int64 `json:"throttle_time_in_millis"` + CurrentAsSource int `json:"current_as_source"` + CurrentAsTarget int `json:"current_as_target"` } type NodesStatsNodeOS struct { - Timestamp int64 `json:"timestamp"` - CPU struct { - Sys int `json:"sys"` - User int `json:"user"` - Idle int `json:"idle"` - Usage int `json:"usage"` - Stolen int `json:"stolen"` - } `json:"cpu"` - LoadAverage []float64 `json:"load_average"` - Mem *NodesStatsNodeOSMem `json:"mem"` - Swap *NodesStatsNodeOSSwap `json:"swap"` + Timestamp int64 `json:"timestamp"` + CPU *NodesStatsNodeOSCPU `json:"cpu"` + Mem *NodesStatsNodeOSMem `json:"mem"` + Swap *NodesStatsNodeOSSwap `json:"swap"` +} + +type NodesStatsNodeOSCPU struct { + Percent int `json:"percent"` + LoadAverage map[string]float64 `json:"load_average"` // keys are: 1m, 5m, and 15m } type NodesStatsNodeOSMem struct { - Total string `json:"total"` - TotalInBytes int64 `json:"total_in_bytes"` - Free string `json:"free"` - FreeInBytes int64 `json:"free_in_bytes"` - Used string `json:"used"` - UsedInBytes int64 `json:"used_in_bytes"` - FreePercent int `json:"free_percent"` - UsedPercent int `json:"used_percent"` - ActualFree string `json:"actual_free"` - ActualFreeInBytes int64 `json:"actual_free_in_bytes"` - ActualUsed string `json:"actual_used"` - ActualUsedInBytes int64 `json:"actual_used_in_bytes"` + Total string `json:"total"` + TotalInBytes int64 `json:"total_in_bytes"` + Free string `json:"free"` + FreeInBytes int64 `json:"free_in_bytes"` + Used string `json:"used"` + UsedInBytes int64 `json:"used_in_bytes"` + FreePercent int `json:"free_percent"` + UsedPercent int `json:"used_percent"` } type NodesStatsNodeOSSwap struct { @@ -536,18 +536,10 @@ type NodesStatsNodeProcess struct { MaxFileDescriptors int64 `json:"max_file_descriptors"` CPU struct { Percent int `json:"percent"` - Sys string `json:"sys"` - SysInMillis int64 `json:"sys_in_millis"` - User string `json:"user"` - UserInMillis int64 `json:"user_in_millis"` Total string `json:"total"` TotalInMillis int64 `json:"total_in_millis"` } `json:"cpu"` Mem struct { - Resident string `json:"resident"` - ResidentInBytes int64 `json:"resident_in_bytes"` - Share string `json:"share"` - ShareInBytes int64 `json:"share_in_bytes"` TotalVirtual string `json:"total_virtual"` TotalVirtualInBytes int64 `json:"total_virtual_in_bytes"` } `json:"mem"` @@ -628,6 +620,7 @@ type NodesStatsNodeFS struct { Timestamp int64 `json:"timestamp"` Total *NodesStatsNodeFSEntry `json:"total"` Data []*NodesStatsNodeFSEntry `json:"data"` + IOStats *NodesStatsNodeFSIOStats `json:"io_stats"` } type NodesStatsNodeFSEntry struct { @@ -643,6 +636,20 @@ type NodesStatsNodeFSEntry struct { Spins string `json:"spins"` } +type NodesStatsNodeFSIOStats struct { + Devices []*NodesStatsNodeFSIOStatsEntry `json:"devices"` + Total *NodesStatsNodeFSIOStatsEntry `json:"total"` +} + +type NodesStatsNodeFSIOStatsEntry struct { + DeviceName string `json:"device_name"` + Operations int64 `json:"operations"` + ReadOperations int64 `json:"read_operations"` + WriteOperations int64 `json:"write_operations"` + ReadKilobytes int64 `json:"read_kilobytes"` + WriteKilobytes int64 `json:"write_kilobytes"` +} + type NodesStatsNodeTransport struct { ServerOpen int `json:"server_open"` RxCount int64 `json:"rx_count"` @@ -671,3 +678,26 @@ type NodesStatsScriptStats struct { Compilations int64 `json:"compilations"` CacheEvictions int64 `json:"cache_evictions"` } + +type NodesStatsDiscovery struct { + ClusterStateQueue *NodesStatsDiscoveryStats `json:"cluster_state_queue"` +} + +type NodesStatsDiscoveryStats struct { + Total int64 `json:"total"` + Pending int64 `json:"pending"` + Committed int64 `json:"committed"` +} + +type NodesStatsIngest struct { + Total *NodesStatsIngestStats `json:"total"` + Pipelines interface{} `json:"pipelines"` +} + +type NodesStatsIngestStats struct { + Count int64 `json:"count"` + Time string `json:"time"` + TimeInMillis int64 `json:"time_in_millis"` + Current int64 `json:"current"` + Failed int64 `json:"failed"` +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/nodes_stats_test.go b/vendor/github.com/olivere/elastic/nodes_stats_test.go similarity index 97% rename from vendor/gopkg.in/olivere/elastic.v2/nodes_stats_test.go rename to vendor/github.com/olivere/elastic/nodes_stats_test.go index 9b5fd16..4b249a2 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/nodes_stats_test.go +++ b/vendor/github.com/olivere/elastic/nodes_stats_test.go @@ -4,7 +4,10 @@ package elastic -import "testing" +import ( + "context" + "testing" +) func TestNodesStats(t *testing.T) { client, err := NewClient() @@ -12,7 +15,7 @@ func TestNodesStats(t *testing.T) { t.Fatal(err) } - info, err := client.NodesStats().Human(true).Do() + info, err := client.NodesStats().Human(true).Do(context.TODO()) if err != nil { t.Fatal(err) } diff --git a/vendor/github.com/olivere/elastic/percolate_test.go b/vendor/github.com/olivere/elastic/percolate_test.go new file mode 100644 index 0000000..3b3b2ef --- /dev/null +++ b/vendor/github.com/olivere/elastic/percolate_test.go @@ -0,0 +1,68 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "testing" +) + +func TestPercolate(t *testing.T) { + //client := setupTestClientAndCreateIndex(t, SetErrorLog(log.New(os.Stdout, "", 0))) + //client := setupTestClientAndCreateIndex(t, SetTraceLog(log.New(os.Stdout, "", 0))) + client := setupTestClientAndCreateIndex(t) + + // Create query index + createQueryIndex, err := client.CreateIndex(testQueryIndex).Body(testQueryMapping).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if createQueryIndex == nil { + t.Errorf("expected result to be != nil; got: %v", createQueryIndex) + } + + // Add a document + _, err = client.Index(). + Index(testQueryIndex). + Type("doc"). + Id("1"). + BodyJson(`{"query":{"match":{"message":"bonsai tree"}}}`). + Refresh("wait_for"). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Percolate should return our registered query + pq := NewPercolatorQuery(). + Field("query"). + DocumentType("doc"). + Document(doctype{Message: "A new bonsai tree in the office"}) + res, err := client.Search(testQueryIndex).Type("doc").Query(pq).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if res == nil { + t.Fatal("expected results != nil; got nil") + } + if res.Hits == nil { + t.Fatal("expected SearchResult.Hits != nil; got nil") + } + if got, want := res.Hits.TotalHits, int64(1); got != want { + t.Fatalf("expected SearchResult.Hits.TotalHits = %d; got %d", want, got) + } + if got, want := len(res.Hits.Hits), 1; got != want { + t.Fatalf("expected len(SearchResult.Hits.Hits) = %d; got %d", want, got) + } + hit := res.Hits.Hits[0] + if hit.Index != testQueryIndex { + t.Fatalf("expected SearchResult.Hits.Hit.Index = %q; got %q", testQueryIndex, hit.Index) + } + got := string(*hit.Source) + expected := `{"query":{"match":{"message":"bonsai tree"}}}` + if got != expected { + t.Fatalf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/ping.go b/vendor/github.com/olivere/elastic/ping.go similarity index 92% rename from vendor/gopkg.in/olivere/elastic.v2/ping.go rename to vendor/github.com/olivere/elastic/ping.go index 44390d1..5c2d34f 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/ping.go +++ b/vendor/github.com/olivere/elastic/ping.go @@ -1,10 +1,11 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. package elastic import ( + "context" "encoding/json" "net/http" "net/url" @@ -26,7 +27,6 @@ type PingService struct { // PingResult is the result returned from querying the Elasticsearch server. type PingResult struct { - Status int `json:"status"` Name string `json:"name"` ClusterName string `json:"cluster_name"` Version struct { @@ -72,7 +72,7 @@ func (s *PingService) Pretty(pretty bool) *PingService { // Do returns the PingResult, the HTTP status code of the Elasticsearch // server, and an error. -func (s *PingService) Do() (*PingResult, int, error) { +func (s *PingService) Do(ctx context.Context) (*PingResult, int, error) { s.client.mu.RLock() basicAuth := s.client.basicAuth basicAuthUsername := s.client.basicAuthUsername @@ -86,7 +86,7 @@ func (s *PingService) Do() (*PingResult, int, error) { params.Set("timeout", s.timeout) } if s.pretty { - params.Set("pretty", "1") + params.Set("pretty", "true") } if len(params) > 0 { url_ += "?" + params.Encode() @@ -109,7 +109,7 @@ func (s *PingService) Do() (*PingResult, int, error) { req.SetBasicAuth(basicAuthUsername, basicAuthPassword) } - res, err := s.client.c.Do((*http.Request)(req)) + res, err := s.client.c.Do((*http.Request)(req).WithContext(ctx)) if err != nil { return nil, 0, err } diff --git a/vendor/github.com/olivere/elastic/ping_test.go b/vendor/github.com/olivere/elastic/ping_test.go new file mode 100644 index 0000000..2739138 --- /dev/null +++ b/vendor/github.com/olivere/elastic/ping_test.go @@ -0,0 +1,65 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "net/http" + "testing" +) + +func TestPingGet(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + res, code, err := client.Ping(DefaultURL).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if code != http.StatusOK { + t.Errorf("expected status code = %d; got %d", http.StatusOK, code) + } + if res == nil { + t.Fatalf("expected to return result, got: %v", res) + } + if res.Name == "" { + t.Errorf("expected Name != \"\"; got %q", res.Name) + } + if res.Version.Number == "" { + t.Errorf("expected Version.Number != \"\"; got %q", res.Version.Number) + } +} + +func TestPingHead(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + res, code, err := client.Ping(DefaultURL).HttpHeadOnly(true).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if code != http.StatusOK { + t.Errorf("expected status code = %d; got %d", http.StatusOK, code) + } + if res != nil { + t.Errorf("expected not to return result, got: %v", res) + } +} + +func TestPingHeadFailure(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + res, code, err := client. + Ping("http://127.0.0.1:9299"). + HttpHeadOnly(true). + Do(context.TODO()) + if err == nil { + t.Error("expected error, got nil") + } + if code == http.StatusOK { + t.Errorf("expected status code != %d; got %d", http.StatusOK, code) + } + if res != nil { + t.Errorf("expected not to return result, got: %v", res) + } +} diff --git a/vendor/github.com/olivere/elastic/plugins.go b/vendor/github.com/olivere/elastic/plugins.go new file mode 100644 index 0000000..60bda75 --- /dev/null +++ b/vendor/github.com/olivere/elastic/plugins.go @@ -0,0 +1,40 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import "context" + +// HasPlugin indicates whether the cluster has the named plugin. +func (c *Client) HasPlugin(name string) (bool, error) { + plugins, err := c.Plugins() + if err != nil { + return false, nil + } + for _, plugin := range plugins { + if plugin == name { + return true, nil + } + } + return false, nil +} + +// Plugins returns the list of all registered plugins. +func (c *Client) Plugins() ([]string, error) { + stats, err := c.ClusterStats().Do(context.Background()) + if err != nil { + return nil, err + } + if stats == nil { + return nil, err + } + if stats.Nodes == nil { + return nil, err + } + var plugins []string + for _, plugin := range stats.Nodes.Plugins { + plugins = append(plugins, plugin.Name) + } + return plugins, nil +} diff --git a/vendor/github.com/olivere/elastic/plugins_test.go b/vendor/github.com/olivere/elastic/plugins_test.go new file mode 100644 index 0000000..969f0b0 --- /dev/null +++ b/vendor/github.com/olivere/elastic/plugins_test.go @@ -0,0 +1,32 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import "testing" + +func TestClientPlugins(t *testing.T) { + client, err := NewClient() + if err != nil { + t.Fatal(err) + } + _, err = client.Plugins() + if err != nil { + t.Fatal(err) + } +} + +func TestClientHasPlugin(t *testing.T) { + client, err := NewClient() + if err != nil { + t.Fatal(err) + } + found, err := client.HasPlugin("no-such-plugin") + if err != nil { + t.Fatal(err) + } + if found { + t.Fatalf("expected to not find plugin %q", "no-such-plugin") + } +} diff --git a/vendor/github.com/olivere/elastic/query.go b/vendor/github.com/olivere/elastic/query.go new file mode 100644 index 0000000..ad01354 --- /dev/null +++ b/vendor/github.com/olivere/elastic/query.go @@ -0,0 +1,13 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// Query represents the generic query interface. A query's sole purpose +// is to return the source of the query as a JSON-serializable object. +// Returning map[string]interface{} is the norm for queries. +type Query interface { + // Source returns the JSON-serializable query request. + Source() (interface{}, error) +} diff --git a/vendor/github.com/olivere/elastic/recipes/aws-connect/main.go b/vendor/github.com/olivere/elastic/recipes/aws-connect/main.go new file mode 100644 index 0000000..746611e --- /dev/null +++ b/vendor/github.com/olivere/elastic/recipes/aws-connect/main.go @@ -0,0 +1,77 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +// Connect simply connects to Elasticsearch Service on AWS. +// +// Example +// +// aws-connect -url=https://search-xxxxx-yyyyy.eu-central-1.es.amazonaws.com +// +package main + +import ( + "flag" + "fmt" + "log" + "net/http" + + "github.com/olivere/env" + "github.com/smartystreets/go-aws-auth" + + "github.com/olivere/elastic" +) + +type AWSSigningTransport struct { + HTTPClient *http.Client + Credentials awsauth.Credentials +} + +// RoundTrip implementation +func (a AWSSigningTransport) RoundTrip(req *http.Request) (*http.Response, error) { + return a.HTTPClient.Do(awsauth.Sign4(req, a.Credentials)) +} + +func main() { + var ( + accessKey = flag.String("access-key", env.String("", "AWS_ACCESS_KEY"), "Access Key ID") + secretKey = flag.String("secret-key", env.String("", "AWS_SECRET_KEY"), "Secret access key") + url = flag.String("url", "http://localhost:9200", "Elasticsearch URL") + sniff = flag.Bool("sniff", false, "Enable or disable sniffing") + ) + flag.Parse() + log.SetFlags(0) + + if *url == "" { + *url = "http://127.0.0.1:9200" + } + if *accessKey == "" { + log.Fatal("missing -access-key or AWS_ACCESS_KEY environment variable") + } + if *secretKey == "" { + log.Fatal("missing -secret-key or AWS_SECRET_KEY environment variable") + } + + signingTransport := AWSSigningTransport{ + Credentials: awsauth.Credentials{ + AccessKeyID: *accessKey, + SecretAccessKey: *secretKey, + }, + HTTPClient: http.DefaultClient, + } + signingClient := &http.Client{Transport: http.RoundTripper(signingTransport)} + + // Create an Elasticsearch client + client, err := elastic.NewClient( + elastic.SetURL(*url), + elastic.SetSniff(*sniff), + elastic.SetHttpClient(signingClient), + ) + if err != nil { + log.Fatal(err) + } + _ = client + + // Just a status message + fmt.Println("Connection succeeded") +} diff --git a/vendor/github.com/olivere/elastic/recipes/bulk_insert/bulk_insert.go b/vendor/github.com/olivere/elastic/recipes/bulk_insert/bulk_insert.go new file mode 100644 index 0000000..4c53987 --- /dev/null +++ b/vendor/github.com/olivere/elastic/recipes/bulk_insert/bulk_insert.go @@ -0,0 +1,173 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +// BulkInsert illustrates how to bulk insert documents into Elasticsearch. +// +// It uses two goroutines to do so. The first creates a simple document +// and sends it to the second via a channel. The second goroutine collects +// those documents, creates a bulk request that is added to a Bulk service +// and committed to Elasticsearch after reaching a number of documents. +// The number of documents after which a commit happens can be specified +// via the "bulk-size" flag. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-bulk.html +// for details on the Bulk API in Elasticsearch. +// +// Example +// +// Bulk index 100.000 documents into the index "warehouse", type "product", +// committing every set of 1.000 documents. +// +// bulk_insert -index=warehouse -type=product -n=100000 -bulk-size=1000 +// +package main + +import ( + "context" + "encoding/base64" + "errors" + "flag" + "fmt" + "log" + "math/rand" + "sync/atomic" + "time" + + "golang.org/x/sync/errgroup" + "github.com/olivere/elastic" +) + +func main() { + var ( + url = flag.String("url", "http://localhost:9200", "Elasticsearch URL") + index = flag.String("index", "", "Elasticsearch index name") + typ = flag.String("type", "", "Elasticsearch type name") + sniff = flag.Bool("sniff", true, "Enable or disable sniffing") + n = flag.Int("n", 0, "Number of documents to bulk insert") + bulkSize = flag.Int("bulk-size", 0, "Number of documents to collect before committing") + ) + flag.Parse() + log.SetFlags(0) + rand.Seed(time.Now().UnixNano()) + + if *url == "" { + log.Fatal("missing url parameter") + } + if *index == "" { + log.Fatal("missing index parameter") + } + if *typ == "" { + log.Fatal("missing type parameter") + } + if *n <= 0 { + log.Fatal("n must be a positive number") + } + if *bulkSize <= 0 { + log.Fatal("bulk-size must be a positive number") + } + + // Create an Elasticsearch client + client, err := elastic.NewClient(elastic.SetURL(*url), elastic.SetSniff(*sniff)) + if err != nil { + log.Fatal(err) + } + + // Setup a group of goroutines from the excellent errgroup package + g, ctx := errgroup.WithContext(context.TODO()) + + // The first goroutine will emit documents and send it to the second goroutine + // via the docsc channel. + // The second Goroutine will simply bulk insert the documents. + type doc struct { + ID string `json:"id"` + Timestamp time.Time `json:"@timestamp"` + } + docsc := make(chan doc) + + begin := time.Now() + + // Goroutine to create documents + g.Go(func() error { + defer close(docsc) + + buf := make([]byte, 32) + for i := 0; i < *n; i++ { + // Generate a random ID + _, err := rand.Read(buf) + if err != nil { + return err + } + id := base64.URLEncoding.EncodeToString(buf) + + // Construct the document + d := doc{ + ID: id, + Timestamp: time.Now(), + } + + // Send over to 2nd goroutine, or cancel + select { + case docsc <- d: + case <-ctx.Done(): + return ctx.Err() + } + } + return nil + }) + + // Second goroutine will consume the documents sent from the first and bulk insert into ES + var total uint64 + g.Go(func() error { + bulk := client.Bulk().Index(*index).Type(*typ) + for d := range docsc { + // Simple progress + current := atomic.AddUint64(&total, 1) + dur := time.Since(begin).Seconds() + sec := int(dur) + pps := int64(float64(current) / dur) + fmt.Printf("%10d | %6d req/s | %02d:%02d\r", current, pps, sec/60, sec%60) + + // Enqueue the document + bulk.Add(elastic.NewBulkIndexRequest().Id(d.ID).Doc(d)) + if bulk.NumberOfActions() >= *bulkSize { + // Commit + res, err := bulk.Do(ctx) + if err != nil { + return err + } + if res.Errors { + // Look up the failed documents with res.Failed(), and e.g. recommit + return errors.New("bulk commit failed") + } + // "bulk" is reset after Do, so you can reuse it + } + + select { + default: + case <-ctx.Done(): + return ctx.Err() + } + } + + // Commit the final batch before exiting + if bulk.NumberOfActions() > 0 { + _, err = bulk.Do(ctx) + if err != nil { + return err + } + } + return nil + }) + + // Wait until all goroutines are finished + if err := g.Wait(); err != nil { + log.Fatal(err) + } + + // Final results + dur := time.Since(begin).Seconds() + sec := int(dur) + pps := int64(float64(total) / dur) + fmt.Printf("%10d | %6d req/s | %02d:%02d\n", total, pps, sec/60, sec%60) +} diff --git a/vendor/github.com/olivere/elastic/recipes/bulk_processor/main.go b/vendor/github.com/olivere/elastic/recipes/bulk_processor/main.go new file mode 100644 index 0000000..f132432 --- /dev/null +++ b/vendor/github.com/olivere/elastic/recipes/bulk_processor/main.go @@ -0,0 +1,149 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +// BulkProcessor runs a bulk processing job that fills an index +// given certain criteria like flush interval etc. +// +// Example +// +// bulk_processor -url=http://127.0.0.1:9200/bulk-processor-test?sniff=false -n=100000 -flush-interval=1s +// +package main + +import ( + "context" + "flag" + "fmt" + "log" + "math/rand" + "os" + "os/signal" + "sync/atomic" + "syscall" + "time" + + "github.com/google/uuid" + + "github.com/olivere/elastic" + "github.com/olivere/elastic/config" +) + +func main() { + var ( + url = flag.String("url", "http://localhost:9200/bulk-processor-test", "Elasticsearch URL") + numWorkers = flag.Int("num-workers", 4, "Number of workers") + n = flag.Int64("n", -1, "Number of documents to process (-1 for unlimited)") + flushInterval = flag.Duration("flush-interval", 1*time.Second, "Flush interval") + bulkActions = flag.Int("bulk-actions", 0, "Number of bulk actions before committing") + bulkSize = flag.Int("bulk-size", 0, "Size of bulk requests before committing") + ) + flag.Parse() + log.SetFlags(0) + + rand.Seed(time.Now().UnixNano()) + + // Parse configuration from URL + cfg, err := config.Parse(*url) + if err != nil { + log.Fatal(err) + } + + // Create an Elasticsearch client from the parsed config + client, err := elastic.NewClientFromConfig(cfg) + if err != nil { + log.Fatal(err) + } + + // Drop old index + exists, err := client.IndexExists(cfg.Index).Do(context.Background()) + if err != nil { + log.Fatal(err) + } + if exists { + _, err = client.DeleteIndex(cfg.Index).Do(context.Background()) + if err != nil { + log.Fatal(err) + } + } + + // Create processor + bulkp := elastic.NewBulkProcessorService(client). + Name("bulk-test-processor"). + Stats(true). + Backoff(elastic.StopBackoff{}). + FlushInterval(*flushInterval). + Workers(*numWorkers) + if *bulkActions > 0 { + bulkp = bulkp.BulkActions(*bulkActions) + } + if *bulkSize > 0 { + bulkp = bulkp.BulkSize(*bulkSize) + } + p, err := bulkp.Do(context.Background()) + if err != nil { + log.Fatal(err) + } + + var created int64 + errc := make(chan error, 1) + go func() { + c := make(chan os.Signal, 1) + signal.Notify(c, syscall.SIGINT, syscall.SIGTERM) + <-c + errc <- nil + }() + + go func() { + defer func() { + if err := p.Close(); err != nil { + errc <- err + } + }() + + type Doc struct { + Timestamp time.Time `json:"@timestamp"` + } + + for { + current := atomic.AddInt64(&created, 1) + if *n > 0 && current >= *n { + errc <- nil + return + } + r := elastic.NewBulkIndexRequest(). + Index(cfg.Index). + Type("doc"). + Id(uuid.New().String()). + Doc(Doc{Timestamp: time.Now()}) + p.Add(r) + + time.Sleep(time.Duration(rand.Intn(1000)) * time.Microsecond) + } + }() + + go func() { + t := time.NewTicker(1 * time.Second) + defer t.Stop() + for range t.C { + stats := p.Stats() + written := atomic.LoadInt64(&created) + var queued int64 + for _, w := range stats.Workers { + queued += w.Queued + } + fmt.Printf("Queued=%5d Written=%8d Succeeded=%8d Failed=%8d Comitted=%6d Flushed=%6d\n", + queued, + written, + stats.Succeeded, + stats.Failed, + stats.Committed, + stats.Flushed, + ) + } + }() + + if err := <-errc; err != nil { + log.Fatal(err) + } +} diff --git a/vendor/github.com/olivere/elastic/recipes/connect/connect.go b/vendor/github.com/olivere/elastic/recipes/connect/connect.go new file mode 100644 index 0000000..baff6c1 --- /dev/null +++ b/vendor/github.com/olivere/elastic/recipes/connect/connect.go @@ -0,0 +1,43 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +// Connect simply connects to Elasticsearch. +// +// Example +// +// +// connect -url=http://127.0.0.1:9200 -sniff=false +// +package main + +import ( + "flag" + "fmt" + "log" + + "github.com/olivere/elastic" +) + +func main() { + var ( + url = flag.String("url", "http://localhost:9200", "Elasticsearch URL") + sniff = flag.Bool("sniff", true, "Enable or disable sniffing") + ) + flag.Parse() + log.SetFlags(0) + + if *url == "" { + *url = "http://127.0.0.1:9200" + } + + // Create an Elasticsearch client + client, err := elastic.NewClient(elastic.SetURL(*url), elastic.SetSniff(*sniff)) + if err != nil { + log.Fatal(err) + } + _ = client + + // Just a status message + fmt.Println("Connection succeeded") +} diff --git a/vendor/github.com/olivere/elastic/recipes/sliced_scroll/sliced_scroll.go b/vendor/github.com/olivere/elastic/recipes/sliced_scroll/sliced_scroll.go new file mode 100644 index 0000000..1c736e1 --- /dev/null +++ b/vendor/github.com/olivere/elastic/recipes/sliced_scroll/sliced_scroll.go @@ -0,0 +1,161 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +// SlicedScroll illustrates scrolling through a set of documents +// in parallel. It uses the sliced scrolling feature introduced +// in Elasticsearch 5.0 to create a number of Goroutines, each +// scrolling through a slice of the total results. A second goroutine +// receives the hits from the set of goroutines scrolling through +// the slices and simply counts the total number and the number of +// documents received per slice. +// +// The speedup of sliced scrolling can be significant but is very +// dependent on the specific use case. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-scroll.html#sliced-scroll +// for details on sliced scrolling in Elasticsearch. +// +// Example +// +// Scroll with 4 parallel slices through an index called "products". +// Use "_uid" as the default field: +// +// sliced_scroll -index=products -n=4 +// +package main + +import ( + "context" + "flag" + "fmt" + "io" + "log" + "sync" + "sync/atomic" + "time" + + "golang.org/x/sync/errgroup" + "github.com/olivere/elastic" +) + +func main() { + var ( + url = flag.String("url", "http://localhost:9200", "Elasticsearch URL") + index = flag.String("index", "", "Elasticsearch index name") + typ = flag.String("type", "", "Elasticsearch type name") + field = flag.String("field", "", "Slice field (must be numeric)") + numSlices = flag.Int("n", 2, "Number of slices to use in parallel") + sniff = flag.Bool("sniff", true, "Enable or disable sniffing") + ) + flag.Parse() + log.SetFlags(0) + + if *url == "" { + log.Fatal("missing url parameter") + } + if *index == "" { + log.Fatal("missing index parameter") + } + if *numSlices <= 0 { + log.Fatal("n must be greater than zero") + } + + // Create an Elasticsearch client + client, err := elastic.NewClient(elastic.SetURL(*url), elastic.SetSniff(*sniff)) + if err != nil { + log.Fatal(err) + } + + // Setup a group of goroutines from the excellent errgroup package + g, ctx := errgroup.WithContext(context.TODO()) + + // Hits channel will be sent to from the first set of goroutines and consumed by the second + type hit struct { + Slice int + Hit elastic.SearchHit + } + hitsc := make(chan hit) + + begin := time.Now() + + // Start a number of goroutines to parallelize scrolling + var wg sync.WaitGroup + for i := 0; i < *numSlices; i++ { + wg.Add(1) + + slice := i + + // Prepare the query + var query elastic.Query + if *typ == "" { + query = elastic.NewMatchAllQuery() + } else { + query = elastic.NewTypeQuery(*typ) + } + + // Prepare the slice + sliceQuery := elastic.NewSliceQuery().Id(i).Max(*numSlices) + if *field != "" { + sliceQuery = sliceQuery.Field(*field) + } + + // Start goroutine for this sliced scroll + g.Go(func() error { + defer wg.Done() + svc := client.Scroll(*index).Query(query).Slice(sliceQuery) + for { + res, err := svc.Do(ctx) + if err == io.EOF { + break + } + if err != nil { + return err + } + for _, searchHit := range res.Hits.Hits { + // Pass the hit to the hits channel, which will be consumed below + select { + case hitsc <- hit{Slice: slice, Hit: *searchHit}: + case <-ctx.Done(): + return ctx.Err() + } + } + } + return nil + }) + } + go func() { + // Wait until all scrolling is done + wg.Wait() + close(hitsc) + }() + + // Second goroutine will consume the hits sent from the workers in first set of goroutines + var total uint64 + totals := make([]uint64, *numSlices) + g.Go(func() error { + for hit := range hitsc { + // We simply count the hits here. + atomic.AddUint64(&totals[hit.Slice], 1) + current := atomic.AddUint64(&total, 1) + sec := int(time.Since(begin).Seconds()) + fmt.Printf("%8d | %02d:%02d\r", current, sec/60, sec%60) + select { + default: + case <-ctx.Done(): + return ctx.Err() + } + } + return nil + }) + + // Wait until all goroutines are finished + if err := g.Wait(); err != nil { + log.Fatal(err) + } + + fmt.Printf("Scrolled through a total of %d documents in %v\n", total, time.Since(begin)) + for i := 0; i < *numSlices; i++ { + fmt.Printf("Slice %2d received %d documents\n", i, totals[i]) + } +} diff --git a/vendor/github.com/olivere/elastic/reindex.go b/vendor/github.com/olivere/elastic/reindex.go new file mode 100644 index 0000000..5a59eae --- /dev/null +++ b/vendor/github.com/olivere/elastic/reindex.go @@ -0,0 +1,698 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" +) + +// ReindexService is a method to copy documents from one index to another. +// It is documented at https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-reindex.html. +type ReindexService struct { + client *Client + pretty bool + refresh string + timeout string + waitForActiveShards string + waitForCompletion *bool + requestsPerSecond *int + slices *int + body interface{} + source *ReindexSource + destination *ReindexDestination + conflicts string + size *int + script *Script +} + +// NewReindexService creates a new ReindexService. +func NewReindexService(client *Client) *ReindexService { + return &ReindexService{ + client: client, + } +} + +// WaitForActiveShards sets the number of shard copies that must be active before +// proceeding with the reindex operation. Defaults to 1, meaning the primary shard only. +// Set to `all` for all shard copies, otherwise set to any non-negative value less than or +// equal to the total number of copies for the shard (number of replicas + 1). +func (s *ReindexService) WaitForActiveShards(waitForActiveShards string) *ReindexService { + s.waitForActiveShards = waitForActiveShards + return s +} + +// RequestsPerSecond specifies the throttle to set on this request in sub-requests per second. +// -1 means set no throttle as does "unlimited" which is the only non-float this accepts. +func (s *ReindexService) RequestsPerSecond(requestsPerSecond int) *ReindexService { + s.requestsPerSecond = &requestsPerSecond + return s +} + +// Slices specifies the number of slices this task should be divided into. Defaults to 1. +func (s *ReindexService) Slices(slices int) *ReindexService { + s.slices = &slices + return s +} + +// Refresh indicates whether Elasticsearch should refresh the effected indexes +// immediately. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-refresh.html +// for details. +func (s *ReindexService) Refresh(refresh string) *ReindexService { + s.refresh = refresh + return s +} + +// Timeout is the time each individual bulk request should wait for shards +// that are unavailable. +func (s *ReindexService) Timeout(timeout string) *ReindexService { + s.timeout = timeout + return s +} + +// WaitForCompletion indicates whether Elasticsearch should block until the +// reindex is complete. +func (s *ReindexService) WaitForCompletion(waitForCompletion bool) *ReindexService { + s.waitForCompletion = &waitForCompletion + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *ReindexService) Pretty(pretty bool) *ReindexService { + s.pretty = pretty + return s +} + +// Source specifies the source of the reindexing process. +func (s *ReindexService) Source(source *ReindexSource) *ReindexService { + s.source = source + return s +} + +// SourceIndex specifies the source index of the reindexing process. +func (s *ReindexService) SourceIndex(index string) *ReindexService { + if s.source == nil { + s.source = NewReindexSource() + } + s.source = s.source.Index(index) + return s +} + +// Destination specifies the destination of the reindexing process. +func (s *ReindexService) Destination(destination *ReindexDestination) *ReindexService { + s.destination = destination + return s +} + +// DestinationIndex specifies the destination index of the reindexing process. +func (s *ReindexService) DestinationIndex(index string) *ReindexService { + if s.destination == nil { + s.destination = NewReindexDestination() + } + s.destination = s.destination.Index(index) + return s +} + +// DestinationIndexAndType specifies both the destination index and type +// of the reindexing process. +func (s *ReindexService) DestinationIndexAndType(index, typ string) *ReindexService { + if s.destination == nil { + s.destination = NewReindexDestination() + } + s.destination = s.destination.Index(index) + s.destination = s.destination.Type(typ) + return s +} + +// Conflicts indicates what to do when the process detects version conflicts. +// Possible values are "proceed" and "abort". +func (s *ReindexService) Conflicts(conflicts string) *ReindexService { + s.conflicts = conflicts + return s +} + +// AbortOnVersionConflict aborts the request on version conflicts. +// It is an alias to setting Conflicts("abort"). +func (s *ReindexService) AbortOnVersionConflict() *ReindexService { + s.conflicts = "abort" + return s +} + +// ProceedOnVersionConflict aborts the request on version conflicts. +// It is an alias to setting Conflicts("proceed"). +func (s *ReindexService) ProceedOnVersionConflict() *ReindexService { + s.conflicts = "proceed" + return s +} + +// Size sets an upper limit for the number of processed documents. +func (s *ReindexService) Size(size int) *ReindexService { + s.size = &size + return s +} + +// Script allows for modification of the documents as they are reindexed +// from source to destination. +func (s *ReindexService) Script(script *Script) *ReindexService { + s.script = script + return s +} + +// Body specifies the body of the request to send to Elasticsearch. +// It overrides settings specified with other setters, e.g. Query. +func (s *ReindexService) Body(body interface{}) *ReindexService { + s.body = body + return s +} + +// buildURL builds the URL for the operation. +func (s *ReindexService) buildURL() (string, url.Values, error) { + // Build URL path + path := "/_reindex" + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.refresh != "" { + params.Set("refresh", s.refresh) + } + if s.timeout != "" { + params.Set("timeout", s.timeout) + } + if s.requestsPerSecond != nil { + params.Set("requests_per_second", fmt.Sprintf("%v", *s.requestsPerSecond)) + } + if s.slices != nil { + params.Set("slices", fmt.Sprintf("%v", *s.slices)) + } + if s.waitForActiveShards != "" { + params.Set("wait_for_active_shards", s.waitForActiveShards) + } + if s.waitForCompletion != nil { + params.Set("wait_for_completion", fmt.Sprintf("%v", *s.waitForCompletion)) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *ReindexService) Validate() error { + var invalid []string + if s.body != nil { + return nil + } + if s.source == nil { + invalid = append(invalid, "Source") + } else { + if len(s.source.indices) == 0 { + invalid = append(invalid, "Source.Index") + } + } + if s.destination == nil { + invalid = append(invalid, "Destination") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// getBody returns the body part of the document request. +func (s *ReindexService) getBody() (interface{}, error) { + if s.body != nil { + return s.body, nil + } + + body := make(map[string]interface{}) + + if s.conflicts != "" { + body["conflicts"] = s.conflicts + } + if s.size != nil { + body["size"] = *s.size + } + if s.script != nil { + out, err := s.script.Source() + if err != nil { + return nil, err + } + body["script"] = out + } + + src, err := s.source.Source() + if err != nil { + return nil, err + } + body["source"] = src + + dst, err := s.destination.Source() + if err != nil { + return nil, err + } + body["dest"] = dst + + return body, nil +} + +// Do executes the operation. +func (s *ReindexService) Do(ctx context.Context) (*BulkIndexByScrollResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Setup HTTP request body + body, err := s.getBody() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + Body: body, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(BulkIndexByScrollResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// DoAsync executes the reindexing operation asynchronously by starting a new task. +// Callers need to use the Task Management API to watch the outcome of the reindexing +// operation. +func (s *ReindexService) DoAsync(ctx context.Context) (*StartTaskResult, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // DoAsync only makes sense with WaitForCompletion set to true + if s.waitForCompletion != nil && *s.waitForCompletion { + return nil, fmt.Errorf("cannot start a task with WaitForCompletion set to true") + } + f := false + s.waitForCompletion = &f + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Setup HTTP request body + body, err := s.getBody() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + Body: body, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(StartTaskResult) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// -- Source of Reindex -- + +// ReindexSource specifies the source of a Reindex process. +type ReindexSource struct { + searchType string // default in ES is "query_then_fetch" + indices []string + types []string + routing *string + preference *string + requestCache *bool + scroll string + query Query + sorts []SortInfo + sorters []Sorter + searchSource *SearchSource + remoteInfo *ReindexRemoteInfo +} + +// NewReindexSource creates a new ReindexSource. +func NewReindexSource() *ReindexSource { + return &ReindexSource{} +} + +// SearchType is the search operation type. Possible values are +// "query_then_fetch" and "dfs_query_then_fetch". +func (r *ReindexSource) SearchType(searchType string) *ReindexSource { + r.searchType = searchType + return r +} + +func (r *ReindexSource) SearchTypeDfsQueryThenFetch() *ReindexSource { + return r.SearchType("dfs_query_then_fetch") +} + +func (r *ReindexSource) SearchTypeQueryThenFetch() *ReindexSource { + return r.SearchType("query_then_fetch") +} + +func (r *ReindexSource) Index(indices ...string) *ReindexSource { + r.indices = append(r.indices, indices...) + return r +} + +func (r *ReindexSource) Type(types ...string) *ReindexSource { + r.types = append(r.types, types...) + return r +} + +func (r *ReindexSource) Preference(preference string) *ReindexSource { + r.preference = &preference + return r +} + +func (r *ReindexSource) RequestCache(requestCache bool) *ReindexSource { + r.requestCache = &requestCache + return r +} + +func (r *ReindexSource) Scroll(scroll string) *ReindexSource { + r.scroll = scroll + return r +} + +func (r *ReindexSource) Query(query Query) *ReindexSource { + r.query = query + return r +} + +// Sort adds a sort order. +func (r *ReindexSource) Sort(field string, ascending bool) *ReindexSource { + r.sorts = append(r.sorts, SortInfo{Field: field, Ascending: ascending}) + return r +} + +// SortWithInfo adds a sort order. +func (r *ReindexSource) SortWithInfo(info SortInfo) *ReindexSource { + r.sorts = append(r.sorts, info) + return r +} + +// SortBy adds a sort order. +func (r *ReindexSource) SortBy(sorter ...Sorter) *ReindexSource { + r.sorters = append(r.sorters, sorter...) + return r +} + +// RemoteInfo sets up reindexing from a remote cluster. +func (r *ReindexSource) RemoteInfo(ri *ReindexRemoteInfo) *ReindexSource { + r.remoteInfo = ri + return r +} + +// Source returns a serializable JSON request for the request. +func (r *ReindexSource) Source() (interface{}, error) { + source := make(map[string]interface{}) + + if r.query != nil { + src, err := r.query.Source() + if err != nil { + return nil, err + } + source["query"] = src + } else if r.searchSource != nil { + src, err := r.searchSource.Source() + if err != nil { + return nil, err + } + source["source"] = src + } + + if r.searchType != "" { + source["search_type"] = r.searchType + } + + switch len(r.indices) { + case 0: + case 1: + source["index"] = r.indices[0] + default: + source["index"] = r.indices + } + + switch len(r.types) { + case 0: + case 1: + source["type"] = r.types[0] + default: + source["type"] = r.types + } + + if r.preference != nil && *r.preference != "" { + source["preference"] = *r.preference + } + + if r.requestCache != nil { + source["request_cache"] = fmt.Sprintf("%v", *r.requestCache) + } + + if r.scroll != "" { + source["scroll"] = r.scroll + } + + if r.remoteInfo != nil { + src, err := r.remoteInfo.Source() + if err != nil { + return nil, err + } + source["remote"] = src + } + + if len(r.sorters) > 0 { + var sortarr []interface{} + for _, sorter := range r.sorters { + src, err := sorter.Source() + if err != nil { + return nil, err + } + sortarr = append(sortarr, src) + } + source["sort"] = sortarr + } else if len(r.sorts) > 0 { + var sortarr []interface{} + for _, sort := range r.sorts { + src, err := sort.Source() + if err != nil { + return nil, err + } + sortarr = append(sortarr, src) + } + source["sort"] = sortarr + } + + return source, nil +} + +// ReindexRemoteInfo contains information for reindexing from a remote cluster. +type ReindexRemoteInfo struct { + host string + username string + password string + socketTimeout string // e.g. "1m" or "30s" + connectTimeout string // e.g. "1m" or "30s" +} + +// NewReindexRemoteInfo creates a new ReindexRemoteInfo. +func NewReindexRemoteInfo() *ReindexRemoteInfo { + return &ReindexRemoteInfo{} +} + +// Host sets the host information of the remote cluster. +// It must be of the form "http(s)://:" +func (ri *ReindexRemoteInfo) Host(host string) *ReindexRemoteInfo { + ri.host = host + return ri +} + +// Username sets the username to authenticate with the remote cluster. +func (ri *ReindexRemoteInfo) Username(username string) *ReindexRemoteInfo { + ri.username = username + return ri +} + +// Password sets the password to authenticate with the remote cluster. +func (ri *ReindexRemoteInfo) Password(password string) *ReindexRemoteInfo { + ri.password = password + return ri +} + +// SocketTimeout sets the socket timeout to connect with the remote cluster. +// Use ES compatible values like e.g. "30s" or "1m". +func (ri *ReindexRemoteInfo) SocketTimeout(timeout string) *ReindexRemoteInfo { + ri.socketTimeout = timeout + return ri +} + +// ConnectTimeout sets the connection timeout to connect with the remote cluster. +// Use ES compatible values like e.g. "30s" or "1m". +func (ri *ReindexRemoteInfo) ConnectTimeout(timeout string) *ReindexRemoteInfo { + ri.connectTimeout = timeout + return ri +} + +// Source returns the serializable JSON data for the request. +func (ri *ReindexRemoteInfo) Source() (interface{}, error) { + res := make(map[string]interface{}) + res["host"] = ri.host + if len(ri.username) > 0 { + res["username"] = ri.username + } + if len(ri.password) > 0 { + res["password"] = ri.password + } + if len(ri.socketTimeout) > 0 { + res["socket_timeout"] = ri.socketTimeout + } + if len(ri.connectTimeout) > 0 { + res["connect_timeout"] = ri.connectTimeout + } + return res, nil +} + +// -source Destination of Reindex -- + +// ReindexDestination is the destination of a Reindex API call. +// It is basically the meta data of a BulkIndexRequest. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-reindex.html +// fsourcer details. +type ReindexDestination struct { + index string + typ string + routing string + parent string + opType string + version int64 // default is MATCH_ANY + versionType string // default is "internal" +} + +// NewReindexDestination returns a new ReindexDestination. +func NewReindexDestination() *ReindexDestination { + return &ReindexDestination{} +} + +// Index specifies name of the Elasticsearch index to use as the destination +// of a reindexing process. +func (r *ReindexDestination) Index(index string) *ReindexDestination { + r.index = index + return r +} + +// Type specifies the Elasticsearch type to use for reindexing. +func (r *ReindexDestination) Type(typ string) *ReindexDestination { + r.typ = typ + return r +} + +// Routing specifies a routing value for the reindexing request. +// It can be "keep", "discard", or start with "=". The latter specifies +// the routing on the bulk request. +func (r *ReindexDestination) Routing(routing string) *ReindexDestination { + r.routing = routing + return r +} + +// Keep sets the routing on the bulk request sent for each match to the routing +// of the match (the default). +func (r *ReindexDestination) Keep() *ReindexDestination { + r.routing = "keep" + return r +} + +// Discard sets the routing on the bulk request sent for each match to null. +func (r *ReindexDestination) Discard() *ReindexDestination { + r.routing = "discard" + return r +} + +// Parent specifies the identifier of the parent document (if available). +func (r *ReindexDestination) Parent(parent string) *ReindexDestination { + r.parent = parent + return r +} + +// OpType specifies if this request should follow create-only or upsert +// behavior. This follows the OpType of the standard document index API. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-index_.html#operation-type +// for details. +func (r *ReindexDestination) OpType(opType string) *ReindexDestination { + r.opType = opType + return r +} + +// Version indicates the version of the document as part of an optimistic +// concurrency model. +func (r *ReindexDestination) Version(version int64) *ReindexDestination { + r.version = version + return r +} + +// VersionType specifies how versions are created. +func (r *ReindexDestination) VersionType(versionType string) *ReindexDestination { + r.versionType = versionType + return r +} + +// Source returns a serializable JSON request for the request. +func (r *ReindexDestination) Source() (interface{}, error) { + source := make(map[string]interface{}) + if r.index != "" { + source["index"] = r.index + } + if r.typ != "" { + source["type"] = r.typ + } + if r.routing != "" { + source["routing"] = r.routing + } + if r.opType != "" { + source["op_type"] = r.opType + } + if r.parent != "" { + source["parent"] = r.parent + } + if r.version > 0 { + source["version"] = r.version + } + if r.versionType != "" { + source["version_type"] = r.versionType + } + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/reindex_test.go b/vendor/github.com/olivere/elastic/reindex_test.go new file mode 100644 index 0000000..fadf4bf --- /dev/null +++ b/vendor/github.com/olivere/elastic/reindex_test.go @@ -0,0 +1,401 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "testing" +) + +func TestReindexSourceWithBodyMap(t *testing.T) { + client := setupTestClient(t) + out, err := client.Reindex().Body(map[string]interface{}{ + "source": map[string]interface{}{ + "index": "twitter", + }, + "dest": map[string]interface{}{ + "index": "new_twitter", + }, + }).getBody() + if err != nil { + t.Fatal(err) + } + b, err := json.Marshal(out) + if err != nil { + t.Fatal(err) + } + got := string(b) + want := `{"dest":{"index":"new_twitter"},"source":{"index":"twitter"}}` + if got != want { + t.Fatalf("\ngot %s\nwant %s", got, want) + } +} + +func TestReindexSourceWithBodyString(t *testing.T) { + client := setupTestClient(t) + got, err := client.Reindex().Body(`{"source":{"index":"twitter"},"dest":{"index":"new_twitter"}}`).getBody() + if err != nil { + t.Fatal(err) + } + want := `{"source":{"index":"twitter"},"dest":{"index":"new_twitter"}}` + if got != want { + t.Fatalf("\ngot %s\nwant %s", got, want) + } +} + +func TestReindexSourceWithSourceIndexAndDestinationIndex(t *testing.T) { + client := setupTestClient(t) + out, err := client.Reindex().SourceIndex("twitter").DestinationIndex("new_twitter").getBody() + if err != nil { + t.Fatal(err) + } + b, err := json.Marshal(out) + if err != nil { + t.Fatal(err) + } + got := string(b) + want := `{"dest":{"index":"new_twitter"},"source":{"index":"twitter"}}` + if got != want { + t.Fatalf("\ngot %s\nwant %s", got, want) + } +} + +func TestReindexSourceWithSourceAndDestinationAndVersionType(t *testing.T) { + client := setupTestClient(t) + src := NewReindexSource().Index("twitter") + dst := NewReindexDestination().Index("new_twitter").VersionType("external") + out, err := client.Reindex().Source(src).Destination(dst).getBody() + if err != nil { + t.Fatal(err) + } + b, err := json.Marshal(out) + if err != nil { + t.Fatal(err) + } + got := string(b) + want := `{"dest":{"index":"new_twitter","version_type":"external"},"source":{"index":"twitter"}}` + if got != want { + t.Fatalf("\ngot %s\nwant %s", got, want) + } +} + +func TestReindexSourceWithSourceAndRemoteAndDestination(t *testing.T) { + client := setupTestClient(t) + src := NewReindexSource().Index("twitter").RemoteInfo( + NewReindexRemoteInfo().Host("http://otherhost:9200"). + Username("alice"). + Password("secret"). + ConnectTimeout("10s"). + SocketTimeout("1m"), + ) + dst := NewReindexDestination().Index("new_twitter") + out, err := client.Reindex().Source(src).Destination(dst).getBody() + if err != nil { + t.Fatal(err) + } + b, err := json.Marshal(out) + if err != nil { + t.Fatal(err) + } + got := string(b) + want := `{"dest":{"index":"new_twitter"},"source":{"index":"twitter","remote":{"connect_timeout":"10s","host":"http://otherhost:9200","password":"secret","socket_timeout":"1m","username":"alice"}}}` + if got != want { + t.Fatalf("\ngot %s\nwant %s", got, want) + } +} + +func TestReindexSourceWithSourceAndDestinationAndOpType(t *testing.T) { + client := setupTestClient(t) + src := NewReindexSource().Index("twitter") + dst := NewReindexDestination().Index("new_twitter").OpType("create") + out, err := client.Reindex().Source(src).Destination(dst).getBody() + if err != nil { + t.Fatal(err) + } + b, err := json.Marshal(out) + if err != nil { + t.Fatal(err) + } + got := string(b) + want := `{"dest":{"index":"new_twitter","op_type":"create"},"source":{"index":"twitter"}}` + if got != want { + t.Fatalf("\ngot %s\nwant %s", got, want) + } +} + +func TestReindexSourceWithConflictsProceed(t *testing.T) { + client := setupTestClient(t) + src := NewReindexSource().Index("twitter") + dst := NewReindexDestination().Index("new_twitter").OpType("create") + out, err := client.Reindex().Conflicts("proceed").Source(src).Destination(dst).getBody() + if err != nil { + t.Fatal(err) + } + b, err := json.Marshal(out) + if err != nil { + t.Fatal(err) + } + got := string(b) + want := `{"conflicts":"proceed","dest":{"index":"new_twitter","op_type":"create"},"source":{"index":"twitter"}}` + if got != want { + t.Fatalf("\ngot %s\nwant %s", got, want) + } +} + +func TestReindexSourceWithProceedOnVersionConflict(t *testing.T) { + client := setupTestClient(t) + src := NewReindexSource().Index("twitter") + dst := NewReindexDestination().Index("new_twitter").OpType("create") + out, err := client.Reindex().ProceedOnVersionConflict().Source(src).Destination(dst).getBody() + if err != nil { + t.Fatal(err) + } + b, err := json.Marshal(out) + if err != nil { + t.Fatal(err) + } + got := string(b) + want := `{"conflicts":"proceed","dest":{"index":"new_twitter","op_type":"create"},"source":{"index":"twitter"}}` + if got != want { + t.Fatalf("\ngot %s\nwant %s", got, want) + } +} + +func TestReindexSourceWithQuery(t *testing.T) { + client := setupTestClient(t) + src := NewReindexSource().Index("twitter").Type("doc").Query(NewTermQuery("user", "olivere")) + dst := NewReindexDestination().Index("new_twitter") + out, err := client.Reindex().Source(src).Destination(dst).getBody() + if err != nil { + t.Fatal(err) + } + b, err := json.Marshal(out) + if err != nil { + t.Fatal(err) + } + got := string(b) + want := `{"dest":{"index":"new_twitter"},"source":{"index":"twitter","query":{"term":{"user":"olivere"}},"type":"doc"}}` + if got != want { + t.Fatalf("\ngot %s\nwant %s", got, want) + } +} + +func TestReindexSourceWithMultipleSourceIndicesAndTypes(t *testing.T) { + client := setupTestClient(t) + src := NewReindexSource().Index("twitter", "blog").Type("doc", "post") + dst := NewReindexDestination().Index("all_together") + out, err := client.Reindex().Source(src).Destination(dst).getBody() + if err != nil { + t.Fatal(err) + } + b, err := json.Marshal(out) + if err != nil { + t.Fatal(err) + } + got := string(b) + want := `{"dest":{"index":"all_together"},"source":{"index":["twitter","blog"],"type":["doc","post"]}}` + if got != want { + t.Fatalf("\ngot %s\nwant %s", got, want) + } +} + +func TestReindexSourceWithSourceAndSize(t *testing.T) { + client := setupTestClient(t) + src := NewReindexSource().Index("twitter").Sort("date", false) + dst := NewReindexDestination().Index("new_twitter") + out, err := client.Reindex().Size(10000).Source(src).Destination(dst).getBody() + if err != nil { + t.Fatal(err) + } + b, err := json.Marshal(out) + if err != nil { + t.Fatal(err) + } + got := string(b) + want := `{"dest":{"index":"new_twitter"},"size":10000,"source":{"index":"twitter","sort":[{"date":{"order":"desc"}}]}}` + if got != want { + t.Fatalf("\ngot %s\nwant %s", got, want) + } +} + +func TestReindexSourceWithScript(t *testing.T) { + client := setupTestClient(t) + src := NewReindexSource().Index("twitter") + dst := NewReindexDestination().Index("new_twitter").VersionType("external") + scr := NewScriptInline("if (ctx._source.foo == 'bar') {ctx._version++; ctx._source.remove('foo')}") + out, err := client.Reindex().Source(src).Destination(dst).Script(scr).getBody() + if err != nil { + t.Fatal(err) + } + b, err := json.Marshal(out) + if err != nil { + t.Fatal(err) + } + got := string(b) + want := `{"dest":{"index":"new_twitter","version_type":"external"},"script":{"source":"if (ctx._source.foo == 'bar') {ctx._version++; ctx._source.remove('foo')}"},"source":{"index":"twitter"}}` + if got != want { + t.Fatalf("\ngot %s\nwant %s", got, want) + } +} + +func TestReindexSourceWithRouting(t *testing.T) { + client := setupTestClient(t) + src := NewReindexSource().Index("source").Query(NewMatchQuery("company", "cat")) + dst := NewReindexDestination().Index("dest").Routing("=cat") + out, err := client.Reindex().Source(src).Destination(dst).getBody() + if err != nil { + t.Fatal(err) + } + b, err := json.Marshal(out) + if err != nil { + t.Fatal(err) + } + got := string(b) + want := `{"dest":{"index":"dest","routing":"=cat"},"source":{"index":"source","query":{"match":{"company":{"query":"cat"}}}}}` + if got != want { + t.Fatalf("\ngot %s\nwant %s", got, want) + } +} + +func TestReindex(t *testing.T) { + client := setupTestClientAndCreateIndexAndAddDocs(t) // , SetTraceLog(log.New(os.Stdout, "", 0))) + esversion, err := client.ElasticsearchVersion(DefaultURL) + if err != nil { + t.Fatal(err) + } + if esversion < "2.3.0" { + t.Skipf("Elasticsearch %v does not support Reindex API yet", esversion) + } + + sourceCount, err := client.Count(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if sourceCount <= 0 { + t.Fatalf("expected more than %d documents; got: %d", 0, sourceCount) + } + + targetCount, err := client.Count(testIndexName2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if targetCount != 0 { + t.Fatalf("expected %d documents; got: %d", 0, targetCount) + } + + // Simple copying + src := NewReindexSource().Index(testIndexName) + dst := NewReindexDestination().Index(testIndexName2) + res, err := client.Reindex().Source(src).Destination(dst).Refresh("true").Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if res == nil { + t.Fatal("expected result != nil") + } + if res.Total != sourceCount { + t.Errorf("expected %d, got %d", sourceCount, res.Total) + } + if res.Updated != 0 { + t.Errorf("expected %d, got %d", 0, res.Updated) + } + if res.Created != sourceCount { + t.Errorf("expected %d, got %d", sourceCount, res.Created) + } + + targetCount, err = client.Count(testIndexName2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if targetCount != sourceCount { + t.Fatalf("expected %d documents; got: %d", sourceCount, targetCount) + } +} + +func TestReindexAsync(t *testing.T) { + client := setupTestClientAndCreateIndexAndAddDocs(t) //, SetTraceLog(log.New(os.Stdout, "", 0))) + esversion, err := client.ElasticsearchVersion(DefaultURL) + if err != nil { + t.Fatal(err) + } + if esversion < "2.3.0" { + t.Skipf("Elasticsearch %v does not support Reindex API yet", esversion) + } + + sourceCount, err := client.Count(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if sourceCount <= 0 { + t.Fatalf("expected more than %d documents; got: %d", 0, sourceCount) + } + + targetCount, err := client.Count(testIndexName2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if targetCount != 0 { + t.Fatalf("expected %d documents; got: %d", 0, targetCount) + } + + // Simple copying + src := NewReindexSource().Index(testIndexName) + dst := NewReindexDestination().Index(testIndexName2) + res, err := client.Reindex().Source(src).Destination(dst).DoAsync(context.TODO()) + if err != nil { + t.Fatal(err) + } + if res == nil { + t.Fatal("expected result != nil") + } + if res.TaskId == "" { + t.Errorf("expected a task id, got %+v", res) + } + + tasksGetTask := client.TasksGetTask() + taskStatus, err := tasksGetTask.TaskId(res.TaskId).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if taskStatus == nil { + t.Fatal("expected task status result != nil") + } +} + +func TestReindexWithWaitForCompletionTrueCannotBeStarted(t *testing.T) { + client := setupTestClientAndCreateIndexAndAddDocs(t) + esversion, err := client.ElasticsearchVersion(DefaultURL) + if err != nil { + t.Fatal(err) + } + if esversion < "2.3.0" { + t.Skipf("Elasticsearch %v does not support Reindex API yet", esversion) + } + + sourceCount, err := client.Count(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if sourceCount <= 0 { + t.Fatalf("expected more than %d documents; got: %d", 0, sourceCount) + } + + targetCount, err := client.Count(testIndexName2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if targetCount != 0 { + t.Fatalf("expected %d documents; got: %d", 0, targetCount) + } + + // DoAsync should fail when WaitForCompletion is true + src := NewReindexSource().Index(testIndexName) + dst := NewReindexDestination().Index(testIndexName2) + _, err = client.Reindex().Source(src).Destination(dst).WaitForCompletion(true).DoAsync(context.TODO()) + if err == nil { + t.Fatal("error should have been returned") + } +} diff --git a/vendor/github.com/olivere/elastic/request.go b/vendor/github.com/olivere/elastic/request.go new file mode 100644 index 0000000..87d1919 --- /dev/null +++ b/vendor/github.com/olivere/elastic/request.go @@ -0,0 +1,79 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "bytes" + "encoding/json" + "io" + "io/ioutil" + "net/http" + "runtime" + "strings" +) + +// Elasticsearch-specific HTTP request +type Request http.Request + +// NewRequest is a http.Request and adds features such as encoding the body. +func NewRequest(method, url string) (*Request, error) { + req, err := http.NewRequest(method, url, nil) + if err != nil { + return nil, err + } + req.Header.Add("User-Agent", "elastic/"+Version+" ("+runtime.GOOS+"-"+runtime.GOARCH+")") + req.Header.Add("Accept", "application/json") + req.Header.Set("Content-Type", "application/json") + return (*Request)(req), nil +} + +// SetBasicAuth wraps http.Request's SetBasicAuth. +func (r *Request) SetBasicAuth(username, password string) { + ((*http.Request)(r)).SetBasicAuth(username, password) +} + +// SetBody encodes the body in the request. +func (r *Request) SetBody(body interface{}) error { + switch b := body.(type) { + case string: + return r.setBodyString(b) + default: + return r.setBodyJson(body) + } +} + +// setBodyJson encodes the body as a struct to be marshaled via json.Marshal. +func (r *Request) setBodyJson(data interface{}) error { + body, err := json.Marshal(data) + if err != nil { + return err + } + r.Header.Set("Content-Type", "application/json") + r.setBodyReader(bytes.NewReader(body)) + return nil +} + +// setBodyString encodes the body as a string. +func (r *Request) setBodyString(body string) error { + return r.setBodyReader(strings.NewReader(body)) +} + +// setBodyReader writes the body from an io.Reader. +func (r *Request) setBodyReader(body io.Reader) error { + rc, ok := body.(io.ReadCloser) + if !ok && body != nil { + rc = ioutil.NopCloser(body) + } + r.Body = rc + if body != nil { + switch v := body.(type) { + case *strings.Reader: + r.ContentLength = int64(v.Len()) + case *bytes.Buffer: + r.ContentLength = int64(v.Len()) + } + } + return nil +} diff --git a/vendor/github.com/olivere/elastic/request_test.go b/vendor/github.com/olivere/elastic/request_test.go new file mode 100644 index 0000000..04fbecb --- /dev/null +++ b/vendor/github.com/olivere/elastic/request_test.go @@ -0,0 +1,72 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import "testing" + +var testReq *Request // used as a temporary variable to avoid compiler optimizations in tests/benchmarks + +func TestRequestSetContentType(t *testing.T) { + req, err := NewRequest("GET", "/") + if err != nil { + t.Fatal(err) + } + if want, have := "application/json", req.Header.Get("Content-Type"); want != have { + t.Fatalf("want %q, have %q", want, have) + } + req.Header.Set("Content-Type", "application/x-ndjson") + if want, have := "application/x-ndjson", req.Header.Get("Content-Type"); want != have { + t.Fatalf("want %q, have %q", want, have) + } +} + +func BenchmarkRequestSetBodyString(b *testing.B) { + req, err := NewRequest("GET", "/") + if err != nil { + b.Fatal(err) + } + for i := 0; i < b.N; i++ { + body := `{"query":{"match_all":{}}}` + err = req.SetBody(body) + if err != nil { + b.Fatal(err) + } + } + testReq = req +} + +func BenchmarkRequestSetBodyBytes(b *testing.B) { + req, err := NewRequest("GET", "/") + if err != nil { + b.Fatal(err) + } + for i := 0; i < b.N; i++ { + body := []byte(`{"query":{"match_all":{}}}`) + err = req.SetBody(body) + if err != nil { + b.Fatal(err) + } + } + testReq = req +} + +func BenchmarkRequestSetBodyMap(b *testing.B) { + req, err := NewRequest("GET", "/") + if err != nil { + b.Fatal(err) + } + for i := 0; i < b.N; i++ { + body := map[string]interface{}{ + "query": map[string]interface{}{ + "match_all": map[string]interface{}{}, + }, + } + err = req.SetBody(body) + if err != nil { + b.Fatal(err) + } + } + testReq = req +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/rescore.go b/vendor/github.com/olivere/elastic/rescore.go similarity index 75% rename from vendor/gopkg.in/olivere/elastic.v2/rescore.go rename to vendor/github.com/olivere/elastic/rescore.go index bd57ab7..9b7eaee 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/rescore.go +++ b/vendor/github.com/olivere/elastic/rescore.go @@ -1,4 +1,4 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. @@ -28,13 +28,17 @@ func (r *Rescore) Rescorer(rescorer Rescorer) *Rescore { return r } -func (r *Rescore) Source() interface{} { +func (r *Rescore) Source() (interface{}, error) { source := make(map[string]interface{}) if r.windowSize != nil { source["window_size"] = *r.windowSize } else if r.defaultRescoreWindowSize != nil { source["window_size"] = *r.defaultRescoreWindowSize } - source[r.rescorer.Name()] = r.rescorer.Source() - return source + rescorerSrc, err := r.rescorer.Source() + if err != nil { + return nil, err + } + source[r.rescorer.Name()] = rescorerSrc + return source, nil } diff --git a/vendor/gopkg.in/olivere/elastic.v2/rescorer.go b/vendor/github.com/olivere/elastic/rescorer.go similarity index 79% rename from vendor/gopkg.in/olivere/elastic.v2/rescorer.go rename to vendor/github.com/olivere/elastic/rescorer.go index cbb8218..ccd4bb8 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/rescorer.go +++ b/vendor/github.com/olivere/elastic/rescorer.go @@ -1,4 +1,4 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. @@ -6,7 +6,7 @@ package elastic type Rescorer interface { Name() string - Source() interface{} + Source() (interface{}, error) } // -- Query Rescorer -- @@ -43,9 +43,14 @@ func (r *QueryRescorer) ScoreMode(scoreMode string) *QueryRescorer { return r } -func (r *QueryRescorer) Source() interface{} { +func (r *QueryRescorer) Source() (interface{}, error) { + rescoreQuery, err := r.query.Source() + if err != nil { + return nil, err + } + source := make(map[string]interface{}) - source["rescore_query"] = r.query.Source() + source["rescore_query"] = rescoreQuery if r.queryWeight != nil { source["query_weight"] = *r.queryWeight } @@ -55,5 +60,5 @@ func (r *QueryRescorer) Source() interface{} { if r.scoreMode != "" { source["score_mode"] = r.scoreMode } - return source + return source, nil } diff --git a/vendor/gopkg.in/olivere/elastic.v2/response.go b/vendor/github.com/olivere/elastic/response.go similarity index 86% rename from vendor/gopkg.in/olivere/elastic.v2/response.go rename to vendor/github.com/olivere/elastic/response.go index 9426c23..4fcdc32 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/response.go +++ b/vendor/github.com/olivere/elastic/response.go @@ -1,4 +1,4 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. @@ -34,9 +34,7 @@ func (c *Client) newResponse(res *http.Response) (*Response, error) { } // HEAD requests return a body but no content if len(slurp) > 0 { - if err := c.decoder.Decode(slurp, &r.Body); err != nil { - return nil, err - } + r.Body = json.RawMessage(slurp) } } return r, nil diff --git a/vendor/github.com/olivere/elastic/response_test.go b/vendor/github.com/olivere/elastic/response_test.go new file mode 100644 index 0000000..e627734 --- /dev/null +++ b/vendor/github.com/olivere/elastic/response_test.go @@ -0,0 +1,48 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "bytes" + "fmt" + "io/ioutil" + "net/http" + "testing" +) + +func BenchmarkResponse(b *testing.B) { + c := &Client{ + decoder: &DefaultDecoder{}, + } + + var resp *Response + for n := 0; n < b.N; n++ { + iteration := fmt.Sprint(n) + body := fmt.Sprintf(`{"n":%d}`, n) + res := &http.Response{ + Header: http.Header{ + "X-Iteration": []string{iteration}, + }, + Body: ioutil.NopCloser(bytes.NewBufferString(body)), + StatusCode: http.StatusOK, + } + var err error + resp, err = c.newResponse(res) + if err != nil { + b.Fatal(err) + } + /* + if want, have := body, string(resp.Body); want != have { + b.Fatalf("want %q, have %q", want, have) + } + //*/ + /* + if want, have := iteration, resp.Header.Get("X-Iteration"); want != have { + b.Fatalf("want %q, have %q", want, have) + } + //*/ + } + _ = resp +} diff --git a/vendor/github.com/olivere/elastic/retrier.go b/vendor/github.com/olivere/elastic/retrier.go new file mode 100644 index 0000000..46d3adf --- /dev/null +++ b/vendor/github.com/olivere/elastic/retrier.go @@ -0,0 +1,61 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "net/http" + "time" +) + +// RetrierFunc specifies the signature of a Retry function. +type RetrierFunc func(context.Context, int, *http.Request, *http.Response, error) (time.Duration, bool, error) + +// Retrier decides whether to retry a failed HTTP request with Elasticsearch. +type Retrier interface { + // Retry is called when a request has failed. It decides whether to retry + // the call, how long to wait for the next call, or whether to return an + // error (which will be returned to the service that started the HTTP + // request in the first place). + // + // Callers may also use this to inspect the HTTP request/response and + // the error that happened. Additional data can be passed through via + // the context. + Retry(ctx context.Context, retry int, req *http.Request, resp *http.Response, err error) (time.Duration, bool, error) +} + +// -- StopRetrier -- + +// StopRetrier is an implementation that does no retries. +type StopRetrier struct { +} + +// NewStopRetrier returns a retrier that does no retries. +func NewStopRetrier() *StopRetrier { + return &StopRetrier{} +} + +// Retry does not retry. +func (r *StopRetrier) Retry(ctx context.Context, retry int, req *http.Request, resp *http.Response, err error) (time.Duration, bool, error) { + return 0, false, nil +} + +// -- BackoffRetrier -- + +// BackoffRetrier is an implementation that does nothing but return nil on Retry. +type BackoffRetrier struct { + backoff Backoff +} + +// NewBackoffRetrier returns a retrier that uses the given backoff strategy. +func NewBackoffRetrier(backoff Backoff) *BackoffRetrier { + return &BackoffRetrier{backoff: backoff} +} + +// Retry calls into the backoff strategy and its wait interval. +func (r *BackoffRetrier) Retry(ctx context.Context, retry int, req *http.Request, resp *http.Response, err error) (time.Duration, bool, error) { + wait, goahead := r.backoff.Next(retry) + return wait, goahead, nil +} diff --git a/vendor/github.com/olivere/elastic/retrier_test.go b/vendor/github.com/olivere/elastic/retrier_test.go new file mode 100644 index 0000000..c1c5ff5 --- /dev/null +++ b/vendor/github.com/olivere/elastic/retrier_test.go @@ -0,0 +1,174 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "errors" + "net/http" + "sync/atomic" + "testing" + "time" +) + +type testRetrier struct { + Retrier + N int64 + Err error +} + +func (r *testRetrier) Retry(ctx context.Context, retry int, req *http.Request, resp *http.Response, err error) (time.Duration, bool, error) { + atomic.AddInt64(&r.N, 1) + if r.Err != nil { + return 0, false, r.Err + } + return r.Retrier.Retry(ctx, retry, req, resp, err) +} + +func TestStopRetrier(t *testing.T) { + r := NewStopRetrier() + wait, ok, err := r.Retry(context.TODO(), 1, nil, nil, nil) + if want, got := 0*time.Second, wait; want != got { + t.Fatalf("expected %v, got %v", want, got) + } + if want, got := false, ok; want != got { + t.Fatalf("expected %v, got %v", want, got) + } + if err != nil { + t.Fatalf("expected nil, got %v", err) + } +} + +func TestRetrier(t *testing.T) { + var numFailedReqs int + fail := func(r *http.Request) (*http.Response, error) { + numFailedReqs += 1 + //return &http.Response{Request: r, StatusCode: 400}, nil + return nil, errors.New("request failed") + } + + tr := &failingTransport{path: "/fail", fail: fail} + httpClient := &http.Client{Transport: tr} + + retrier := &testRetrier{ + Retrier: NewBackoffRetrier(NewSimpleBackoff(100, 100, 100, 100, 100)), + } + + client, err := NewClient( + SetHttpClient(httpClient), + SetMaxRetries(5), + SetHealthcheck(false), + SetRetrier(retrier)) + if err != nil { + t.Fatal(err) + } + + res, err := client.PerformRequest(context.TODO(), PerformRequestOptions{ + Method: "GET", + Path: "/fail", + }) + if err == nil { + t.Fatal("expected error") + } + if res != nil { + t.Fatal("expected no response") + } + // Connection should be marked as dead after it failed + if numFailedReqs != 5 { + t.Errorf("expected %d failed requests; got: %d", 5, numFailedReqs) + } + if retrier.N != 5 { + t.Errorf("expected %d Retrier calls; got: %d", 5, retrier.N) + } +} + +func TestRetrierWithError(t *testing.T) { + var numFailedReqs int + fail := func(r *http.Request) (*http.Response, error) { + numFailedReqs += 1 + //return &http.Response{Request: r, StatusCode: 400}, nil + return nil, errors.New("request failed") + } + + tr := &failingTransport{path: "/fail", fail: fail} + httpClient := &http.Client{Transport: tr} + + kaboom := errors.New("kaboom") + retrier := &testRetrier{ + Err: kaboom, + Retrier: NewBackoffRetrier(NewSimpleBackoff(100, 100, 100, 100, 100)), + } + + client, err := NewClient( + SetHttpClient(httpClient), + SetMaxRetries(5), + SetHealthcheck(false), + SetRetrier(retrier)) + if err != nil { + t.Fatal(err) + } + + res, err := client.PerformRequest(context.TODO(), PerformRequestOptions{ + Method: "GET", + Path: "/fail", + }) + if err != kaboom { + t.Fatalf("expected %v, got %v", kaboom, err) + } + if res != nil { + t.Fatal("expected no response") + } + if numFailedReqs != 1 { + t.Errorf("expected %d failed requests; got: %d", 1, numFailedReqs) + } + if retrier.N != 1 { + t.Errorf("expected %d Retrier calls; got: %d", 1, retrier.N) + } +} + +func TestRetrierOnPerformRequest(t *testing.T) { + var numFailedReqs int + fail := func(r *http.Request) (*http.Response, error) { + numFailedReqs += 1 + //return &http.Response{Request: r, StatusCode: 400}, nil + return nil, errors.New("request failed") + } + + tr := &failingTransport{path: "/fail", fail: fail} + httpClient := &http.Client{Transport: tr} + + defaultRetrier := &testRetrier{ + Retrier: NewStopRetrier(), + } + requestRetrier := &testRetrier{ + Retrier: NewStopRetrier(), + } + + client, err := NewClient( + SetHttpClient(httpClient), + SetHealthcheck(false), + SetRetrier(defaultRetrier)) + if err != nil { + t.Fatal(err) + } + + res, err := client.PerformRequest(context.TODO(), PerformRequestOptions{ + Method: "GET", + Path: "/fail", + Retrier: requestRetrier, + }) + if err == nil { + t.Fatal("expected error") + } + if res != nil { + t.Fatal("expected no response") + } + if want, have := int64(0), defaultRetrier.N; want != have { + t.Errorf("defaultRetrier: expected %d calls; got: %d", want, have) + } + if want, have := int64(1), requestRetrier.N; want != have { + t.Errorf("requestRetrier: expected %d calls; got: %d", want, have) + } +} diff --git a/vendor/github.com/olivere/elastic/retry.go b/vendor/github.com/olivere/elastic/retry.go new file mode 100644 index 0000000..3571a3b --- /dev/null +++ b/vendor/github.com/olivere/elastic/retry.go @@ -0,0 +1,56 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +// This file is based on code (c) 2014 Cenk Altı and governed by the MIT license. +// See https://github.com/cenkalti/backoff for original source. + +package elastic + +import "time" + +// An Operation is executing by Retry() or RetryNotify(). +// The operation will be retried using a backoff policy if it returns an error. +type Operation func() error + +// Notify is a notify-on-error function. It receives error returned +// from an operation. +// +// Notice that if the backoff policy stated to stop retrying, +// the notify function isn't called. +type Notify func(error) + +// Retry the function f until it does not return error or BackOff stops. +// f is guaranteed to be run at least once. +// It is the caller's responsibility to reset b after Retry returns. +// +// Retry sleeps the goroutine for the duration returned by BackOff after a +// failed operation returns. +func Retry(o Operation, b Backoff) error { return RetryNotify(o, b, nil) } + +// RetryNotify calls notify function with the error and wait duration +// for each failed attempt before sleep. +func RetryNotify(operation Operation, b Backoff, notify Notify) error { + var err error + var wait time.Duration + var retry bool + var n int + + for { + if err = operation(); err == nil { + return nil + } + + n++ + wait, retry = b.Next(n) + if !retry { + return err + } + + if notify != nil { + notify(err) + } + + time.Sleep(wait) + } +} diff --git a/vendor/github.com/olivere/elastic/retry_test.go b/vendor/github.com/olivere/elastic/retry_test.go new file mode 100644 index 0000000..8043130 --- /dev/null +++ b/vendor/github.com/olivere/elastic/retry_test.go @@ -0,0 +1,44 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +// This file is based on code that is (c) 2014 Cenk Altı and governed +// by the MIT license. +// See https://github.com/cenkalti/backoff for original source. + +package elastic + +import ( + "errors" + "testing" + "time" +) + +func TestRetry(t *testing.T) { + const successOn = 3 + var i = 0 + + // This function is successfull on "successOn" calls. + f := func() error { + i++ + // t.Logf("function is called %d. time\n", i) + + if i == successOn { + // t.Log("OK") + return nil + } + + // t.Log("error") + return errors.New("error") + } + + min := time.Duration(8) * time.Millisecond + max := time.Duration(256) * time.Millisecond + err := Retry(f, NewExponentialBackoff(min, max)) + if err != nil { + t.Errorf("unexpected error: %s", err.Error()) + } + if i != successOn { + t.Errorf("invalid number of retries: %d", i) + } +} diff --git a/vendor/github.com/olivere/elastic/run-es.sh b/vendor/github.com/olivere/elastic/run-es.sh new file mode 100755 index 0000000..0ac038f --- /dev/null +++ b/vendor/github.com/olivere/elastic/run-es.sh @@ -0,0 +1,3 @@ +#!/bin/sh +VERSION=${VERSION:=6.2.3} +docker run --rm -p 9200:9200 -e "http.host=0.0.0.0" -e "transport.host=127.0.0.1" -e "bootstrap.memory_lock=true" -e "ES_JAVA_OPTS=-Xms1g -Xmx1g" docker.elastic.co/elasticsearch/elasticsearch-oss:$VERSION elasticsearch -Enetwork.host=_local_,_site_ -Enetwork.publish_host=_local_ diff --git a/vendor/github.com/olivere/elastic/script.go b/vendor/github.com/olivere/elastic/script.go new file mode 100644 index 0000000..c5f8ea8 --- /dev/null +++ b/vendor/github.com/olivere/elastic/script.go @@ -0,0 +1,127 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import "errors" + +// Script holds all the paramaters necessary to compile or find in cache +// and then execute a script. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/modules-scripting.html +// for details of scripting. +type Script struct { + script string + typ string + lang string + params map[string]interface{} +} + +// NewScript creates and initializes a new Script. +func NewScript(script string) *Script { + return &Script{ + script: script, + typ: "inline", + params: make(map[string]interface{}), + } +} + +// NewScriptInline creates and initializes a new inline script, i.e. code. +func NewScriptInline(script string) *Script { + return NewScript(script).Type("inline") +} + +// NewScriptStored creates and initializes a new stored script. +func NewScriptStored(script string) *Script { + return NewScript(script).Type("id") +} + +// Script is either the cache key of the script to be compiled/executed +// or the actual script source code for inline scripts. For indexed +// scripts this is the id used in the request. For file scripts this is +// the file name. +func (s *Script) Script(script string) *Script { + s.script = script + return s +} + +// Type sets the type of script: "inline" or "id". +func (s *Script) Type(typ string) *Script { + s.typ = typ + return s +} + +// Lang sets the language of the script. Permitted values are "groovy", +// "expression", "mustache", "mvel" (default), "javascript", "python". +// To use certain languages, you need to configure your server and/or +// add plugins. See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/modules-scripting.html +// for details. +func (s *Script) Lang(lang string) *Script { + s.lang = lang + return s +} + +// Param adds a key/value pair to the parameters that this script will be executed with. +func (s *Script) Param(name string, value interface{}) *Script { + if s.params == nil { + s.params = make(map[string]interface{}) + } + s.params[name] = value + return s +} + +// Params sets the map of parameters this script will be executed with. +func (s *Script) Params(params map[string]interface{}) *Script { + s.params = params + return s +} + +// Source returns the JSON serializable data for this Script. +func (s *Script) Source() (interface{}, error) { + if s.typ == "" && s.lang == "" && len(s.params) == 0 { + return s.script, nil + } + source := make(map[string]interface{}) + // Beginning with 6.0, the type can only be "source" or "id" + if s.typ == "" || s.typ == "inline" { + source["source"] = s.script + } else { + source["id"] = s.script + } + if s.lang != "" { + source["lang"] = s.lang + } + if len(s.params) > 0 { + source["params"] = s.params + } + return source, nil +} + +// -- Script Field -- + +// ScriptField is a single script field. +type ScriptField struct { + FieldName string // name of the field + + script *Script +} + +// NewScriptField creates and initializes a new ScriptField. +func NewScriptField(fieldName string, script *Script) *ScriptField { + return &ScriptField{FieldName: fieldName, script: script} +} + +// Source returns the serializable JSON for the ScriptField. +func (f *ScriptField) Source() (interface{}, error) { + if f.script == nil { + return nil, errors.New("ScriptField expects script") + } + source := make(map[string]interface{}) + src, err := f.script.Source() + if err != nil { + return nil, err + } + source["script"] = src + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/script_test.go b/vendor/github.com/olivere/elastic/script_test.go new file mode 100644 index 0000000..aa475d7 --- /dev/null +++ b/vendor/github.com/olivere/elastic/script_test.go @@ -0,0 +1,61 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestScriptingDefault(t *testing.T) { + builder := NewScript("doc['field'].value * 2") + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"source":"doc['field'].value * 2"}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestScriptingInline(t *testing.T) { + builder := NewScriptInline("doc['field'].value * factor").Param("factor", 2.0) + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"params":{"factor":2},"source":"doc['field'].value * factor"}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestScriptingStored(t *testing.T) { + builder := NewScriptStored("script-with-id").Param("factor", 2.0) + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"id":"script-with-id","params":{"factor":2}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/scroll.go b/vendor/github.com/olivere/elastic/scroll.go new file mode 100644 index 0000000..7a2671c --- /dev/null +++ b/vendor/github.com/olivere/elastic/scroll.go @@ -0,0 +1,470 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "io" + "net/url" + "strings" + "sync" + + "github.com/olivere/elastic/uritemplates" +) + +const ( + // DefaultScrollKeepAlive is the default time a scroll cursor will be kept alive. + DefaultScrollKeepAlive = "5m" +) + +// ScrollService iterates over pages of search results from Elasticsearch. +type ScrollService struct { + client *Client + retrier Retrier + indices []string + types []string + keepAlive string + body interface{} + ss *SearchSource + size *int + pretty bool + routing string + preference string + ignoreUnavailable *bool + allowNoIndices *bool + expandWildcards string + + mu sync.RWMutex + scrollId string +} + +// NewScrollService initializes and returns a new ScrollService. +func NewScrollService(client *Client) *ScrollService { + builder := &ScrollService{ + client: client, + ss: NewSearchSource(), + keepAlive: DefaultScrollKeepAlive, + } + return builder +} + +// Retrier allows to set specific retry logic for this ScrollService. +// If not specified, it will use the client's default retrier. +func (s *ScrollService) Retrier(retrier Retrier) *ScrollService { + s.retrier = retrier + return s +} + +// Index sets the name of one or more indices to iterate over. +func (s *ScrollService) Index(indices ...string) *ScrollService { + if s.indices == nil { + s.indices = make([]string, 0) + } + s.indices = append(s.indices, indices...) + return s +} + +// Type sets the name of one or more types to iterate over. +func (s *ScrollService) Type(types ...string) *ScrollService { + if s.types == nil { + s.types = make([]string, 0) + } + s.types = append(s.types, types...) + return s +} + +// Scroll is an alias for KeepAlive, the time to keep +// the cursor alive (e.g. "5m" for 5 minutes). +func (s *ScrollService) Scroll(keepAlive string) *ScrollService { + s.keepAlive = keepAlive + return s +} + +// KeepAlive sets the maximum time after which the cursor will expire. +// It is "2m" by default. +func (s *ScrollService) KeepAlive(keepAlive string) *ScrollService { + s.keepAlive = keepAlive + return s +} + +// Size specifies the number of documents Elasticsearch should return +// from each shard, per page. +func (s *ScrollService) Size(size int) *ScrollService { + s.size = &size + return s +} + +// Body sets the raw body to send to Elasticsearch. This can be e.g. a string, +// a map[string]interface{} or anything that can be serialized into JSON. +// Notice that setting the body disables the use of SearchSource and many +// other properties of the ScanService. +func (s *ScrollService) Body(body interface{}) *ScrollService { + s.body = body + return s +} + +// SearchSource sets the search source builder to use with this iterator. +// Notice that only a certain number of properties can be used when scrolling, +// e.g. query and sorting. +func (s *ScrollService) SearchSource(searchSource *SearchSource) *ScrollService { + s.ss = searchSource + if s.ss == nil { + s.ss = NewSearchSource() + } + return s +} + +// Query sets the query to perform, e.g. a MatchAllQuery. +func (s *ScrollService) Query(query Query) *ScrollService { + s.ss = s.ss.Query(query) + return s +} + +// PostFilter is executed as the last filter. It only affects the +// search hits but not facets. See +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-post-filter.html +// for details. +func (s *ScrollService) PostFilter(postFilter Query) *ScrollService { + s.ss = s.ss.PostFilter(postFilter) + return s +} + +// Slice allows slicing the scroll request into several batches. +// This is supported in Elasticsearch 5.0 or later. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-scroll.html#sliced-scroll +// for details. +func (s *ScrollService) Slice(sliceQuery Query) *ScrollService { + s.ss = s.ss.Slice(sliceQuery) + return s +} + +// FetchSource indicates whether the response should contain the stored +// _source for every hit. +func (s *ScrollService) FetchSource(fetchSource bool) *ScrollService { + s.ss = s.ss.FetchSource(fetchSource) + return s +} + +// FetchSourceContext indicates how the _source should be fetched. +func (s *ScrollService) FetchSourceContext(fetchSourceContext *FetchSourceContext) *ScrollService { + s.ss = s.ss.FetchSourceContext(fetchSourceContext) + return s +} + +// Version can be set to true to return a version for each search hit. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-version.html. +func (s *ScrollService) Version(version bool) *ScrollService { + s.ss = s.ss.Version(version) + return s +} + +// Sort adds a sort order. This can have negative effects on the performance +// of the scroll operation as Elasticsearch needs to sort first. +func (s *ScrollService) Sort(field string, ascending bool) *ScrollService { + s.ss = s.ss.Sort(field, ascending) + return s +} + +// SortWithInfo specifies a sort order. Notice that sorting can have a +// negative impact on scroll performance. +func (s *ScrollService) SortWithInfo(info SortInfo) *ScrollService { + s.ss = s.ss.SortWithInfo(info) + return s +} + +// SortBy specifies a sort order. Notice that sorting can have a +// negative impact on scroll performance. +func (s *ScrollService) SortBy(sorter ...Sorter) *ScrollService { + s.ss = s.ss.SortBy(sorter...) + return s +} + +// Pretty asks Elasticsearch to pretty-print the returned JSON. +func (s *ScrollService) Pretty(pretty bool) *ScrollService { + s.pretty = pretty + return s +} + +// Routing is a list of specific routing values to control the shards +// the search will be executed on. +func (s *ScrollService) Routing(routings ...string) *ScrollService { + s.routing = strings.Join(routings, ",") + return s +} + +// Preference sets the preference to execute the search. Defaults to +// randomize across shards ("random"). Can be set to "_local" to prefer +// local shards, "_primary" to execute on primary shards only, +// or a custom value which guarantees that the same order will be used +// across different requests. +func (s *ScrollService) Preference(preference string) *ScrollService { + s.preference = preference + return s +} + +// IgnoreUnavailable indicates whether the specified concrete indices +// should be ignored when unavailable (missing or closed). +func (s *ScrollService) IgnoreUnavailable(ignoreUnavailable bool) *ScrollService { + s.ignoreUnavailable = &ignoreUnavailable + return s +} + +// AllowNoIndices indicates whether to ignore if a wildcard indices +// expression resolves into no concrete indices. (This includes `_all` string +// or when no indices have been specified). +func (s *ScrollService) AllowNoIndices(allowNoIndices bool) *ScrollService { + s.allowNoIndices = &allowNoIndices + return s +} + +// ExpandWildcards indicates whether to expand wildcard expression to +// concrete indices that are open, closed or both. +func (s *ScrollService) ExpandWildcards(expandWildcards string) *ScrollService { + s.expandWildcards = expandWildcards + return s +} + +// ScrollId specifies the identifier of a scroll in action. +func (s *ScrollService) ScrollId(scrollId string) *ScrollService { + s.mu.Lock() + s.scrollId = scrollId + s.mu.Unlock() + return s +} + +// Do returns the next search result. It will return io.EOF as error if there +// are no more search results. +func (s *ScrollService) Do(ctx context.Context) (*SearchResult, error) { + s.mu.RLock() + nextScrollId := s.scrollId + s.mu.RUnlock() + if len(nextScrollId) == 0 { + return s.first(ctx) + } + return s.next(ctx) +} + +// Clear cancels the current scroll operation. If you don't do this manually, +// the scroll will be expired automatically by Elasticsearch. You can control +// how long a scroll cursor is kept alive with the KeepAlive func. +func (s *ScrollService) Clear(ctx context.Context) error { + s.mu.RLock() + scrollId := s.scrollId + s.mu.RUnlock() + if len(scrollId) == 0 { + return nil + } + + path := "/_search/scroll" + params := url.Values{} + body := struct { + ScrollId []string `json:"scroll_id,omitempty"` + }{ + ScrollId: []string{scrollId}, + } + + _, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "DELETE", + Path: path, + Params: params, + Body: body, + Retrier: s.retrier, + }) + if err != nil { + return err + } + + return nil +} + +// -- First -- + +// first takes the first page of search results. +func (s *ScrollService) first(ctx context.Context) (*SearchResult, error) { + // Get URL and parameters for request + path, params, err := s.buildFirstURL() + if err != nil { + return nil, err + } + + // Get HTTP request body + body, err := s.bodyFirst() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + Body: body, + Retrier: s.retrier, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(SearchResult) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + s.mu.Lock() + s.scrollId = ret.ScrollId + s.mu.Unlock() + if ret.Hits == nil || len(ret.Hits.Hits) == 0 { + return nil, io.EOF + } + return ret, nil +} + +// buildFirstURL builds the URL for retrieving the first page. +func (s *ScrollService) buildFirstURL() (string, url.Values, error) { + // Build URL + var err error + var path string + if len(s.indices) == 0 && len(s.types) == 0 { + path = "/_search" + } else if len(s.indices) > 0 && len(s.types) == 0 { + path, err = uritemplates.Expand("/{index}/_search", map[string]string{ + "index": strings.Join(s.indices, ","), + }) + } else if len(s.indices) == 0 && len(s.types) > 0 { + path, err = uritemplates.Expand("/_all/{typ}/_search", map[string]string{ + "typ": strings.Join(s.types, ","), + }) + } else { + path, err = uritemplates.Expand("/{index}/{typ}/_search", map[string]string{ + "index": strings.Join(s.indices, ","), + "typ": strings.Join(s.types, ","), + }) + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.size != nil && *s.size > 0 { + params.Set("size", fmt.Sprintf("%d", *s.size)) + } + if len(s.keepAlive) > 0 { + params.Set("scroll", s.keepAlive) + } + if len(s.routing) > 0 { + params.Set("routing", s.routing) + } + if len(s.preference) > 0 { + params.Set("preference", s.preference) + } + if s.allowNoIndices != nil { + params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) + } + if len(s.expandWildcards) > 0 { + params.Set("expand_wildcards", s.expandWildcards) + } + if s.ignoreUnavailable != nil { + params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) + } + + return path, params, nil +} + +// bodyFirst returns the request to fetch the first batch of results. +func (s *ScrollService) bodyFirst() (interface{}, error) { + var err error + var body interface{} + + if s.body != nil { + body = s.body + } else { + // Use _doc sort by default if none is specified + if !s.ss.hasSort() { + // Use efficient sorting when no user-defined query/body is specified + s.ss = s.ss.SortBy(SortByDoc{}) + } + + // Body from search source + body, err = s.ss.Source() + if err != nil { + return nil, err + } + } + + return body, nil +} + +// -- Next -- + +func (s *ScrollService) next(ctx context.Context) (*SearchResult, error) { + // Get URL for request + path, params, err := s.buildNextURL() + if err != nil { + return nil, err + } + + // Setup HTTP request body + body, err := s.bodyNext() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + Body: body, + Retrier: s.retrier, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(SearchResult) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + s.mu.Lock() + s.scrollId = ret.ScrollId + s.mu.Unlock() + if ret.Hits == nil || len(ret.Hits.Hits) == 0 { + return nil, io.EOF + } + return ret, nil +} + +// buildNextURL builds the URL for the operation. +func (s *ScrollService) buildNextURL() (string, url.Values, error) { + path := "/_search/scroll" + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + + return path, params, nil +} + +// body returns the request to fetch the next batch of results. +func (s *ScrollService) bodyNext() (interface{}, error) { + s.mu.RLock() + body := struct { + Scroll string `json:"scroll"` + ScrollId string `json:"scroll_id,omitempty"` + }{ + Scroll: s.keepAlive, + ScrollId: s.scrollId, + } + s.mu.RUnlock() + return body, nil +} diff --git a/vendor/github.com/olivere/elastic/scroll_test.go b/vendor/github.com/olivere/elastic/scroll_test.go new file mode 100644 index 0000000..c94e5f9 --- /dev/null +++ b/vendor/github.com/olivere/elastic/scroll_test.go @@ -0,0 +1,387 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "io" + _ "net/http" + "testing" +) + +func TestScroll(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} + tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} + tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} + + // Add all documents + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Should return all documents. Just don't call Do yet! + svc := client.Scroll(testIndexName).Size(1) + + pages := 0 + docs := 0 + + for { + res, err := svc.Do(context.TODO()) + if err == io.EOF { + break + } + if err != nil { + t.Fatal(err) + } + if res == nil { + t.Fatal("expected results != nil; got nil") + } + if res.Hits == nil { + t.Fatal("expected results.Hits != nil; got nil") + } + if want, have := int64(3), res.Hits.TotalHits; want != have { + t.Fatalf("expected results.Hits.TotalHits = %d; got %d", want, have) + } + if want, have := 1, len(res.Hits.Hits); want != have { + t.Fatalf("expected len(results.Hits.Hits) = %d; got %d", want, have) + } + + pages++ + + for _, hit := range res.Hits.Hits { + if hit.Index != testIndexName { + t.Fatalf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) + } + item := make(map[string]interface{}) + err := json.Unmarshal(*hit.Source, &item) + if err != nil { + t.Fatal(err) + } + docs++ + } + + if len(res.ScrollId) == 0 { + t.Fatalf("expected scrollId in results; got %q", res.ScrollId) + } + } + + if want, have := 3, pages; want != have { + t.Fatalf("expected to retrieve %d pages; got %d", want, have) + } + if want, have := 3, docs; want != have { + t.Fatalf("expected to retrieve %d hits; got %d", want, have) + } + + err = svc.Clear(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = svc.Do(context.TODO()) + if err == nil { + t.Fatal("expected to fail") + } +} + +func TestScrollWithQueryAndSort(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + // client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) + + tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} + tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} + tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} + + // Add all documents + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Create a scroll service that returns tweets from user olivere + // and returns them sorted by "message", in reverse order. + // + // Just don't call Do yet! + svc := client.Scroll(testIndexName). + Query(NewTermQuery("user", "olivere")). + Sort("message", false). + Size(1) + + docs := 0 + pages := 0 + for { + res, err := svc.Do(context.TODO()) + if err == io.EOF { + break + } + if err != nil { + t.Fatal(err) + } + if err != nil { + t.Fatal(err) + } + if res == nil { + t.Fatal("expected results != nil; got nil") + } + if res.Hits == nil { + t.Fatal("expected results.Hits != nil; got nil") + } + if want, have := int64(2), res.Hits.TotalHits; want != have { + t.Fatalf("expected results.Hits.TotalHits = %d; got %d", want, have) + } + if want, have := 1, len(res.Hits.Hits); want != have { + t.Fatalf("expected len(results.Hits.Hits) = %d; got %d", want, have) + } + + pages++ + + for _, hit := range res.Hits.Hits { + if hit.Index != testIndexName { + t.Fatalf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) + } + item := make(map[string]interface{}) + err := json.Unmarshal(*hit.Source, &item) + if err != nil { + t.Fatal(err) + } + docs++ + } + } + + if want, have := 2, pages; want != have { + t.Fatalf("expected to retrieve %d pages; got %d", want, have) + } + if want, have := 2, docs; want != have { + t.Fatalf("expected to retrieve %d hits; got %d", want, have) + } +} + +func TestScrollWithBody(t *testing.T) { + // client := setupTestClientAndCreateIndexAndLog(t) + client := setupTestClientAndCreateIndex(t) + + tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch.", Retweets: 4} + tweet2 := tweet{User: "olivere", Message: "Another unrelated topic.", Retweets: 10} + tweet3 := tweet{User: "sandrae", Message: "Cycling is fun.", Retweets: 3} + + // Add all documents + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Test with simple strings and a map + var tests = []struct { + Body interface{} + ExpectedTotalHits int64 + ExpectedDocs int + ExpectedPages int + }{ + { + Body: `{"query":{"match_all":{}}}`, + ExpectedTotalHits: 3, + ExpectedDocs: 3, + ExpectedPages: 3, + }, + { + Body: `{"query":{"term":{"user":"olivere"}},"sort":["_doc"]}`, + ExpectedTotalHits: 2, + ExpectedDocs: 2, + ExpectedPages: 2, + }, + { + Body: `{"query":{"term":{"user":"olivere"}},"sort":[{"retweets":"desc"}]}`, + ExpectedTotalHits: 2, + ExpectedDocs: 2, + ExpectedPages: 2, + }, + { + Body: map[string]interface{}{ + "query": map[string]interface{}{ + "term": map[string]interface{}{ + "user": "olivere", + }, + }, + "sort": []interface{}{"_doc"}, + }, + ExpectedTotalHits: 2, + ExpectedDocs: 2, + ExpectedPages: 2, + }, + } + + for i, tt := range tests { + // Should return all documents. Just don't call Do yet! + svc := client.Scroll(testIndexName).Size(1).Body(tt.Body) + + pages := 0 + docs := 0 + + for { + res, err := svc.Do(context.TODO()) + if err == io.EOF { + break + } + if err != nil { + t.Fatal(err) + } + if res == nil { + t.Fatalf("#%d: expected results != nil; got nil", i) + } + if res.Hits == nil { + t.Fatalf("#%d: expected results.Hits != nil; got nil", i) + } + if want, have := tt.ExpectedTotalHits, res.Hits.TotalHits; want != have { + t.Fatalf("#%d: expected results.Hits.TotalHits = %d; got %d", i, want, have) + } + if want, have := 1, len(res.Hits.Hits); want != have { + t.Fatalf("#%d: expected len(results.Hits.Hits) = %d; got %d", i, want, have) + } + + pages++ + + for _, hit := range res.Hits.Hits { + if hit.Index != testIndexName { + t.Fatalf("#%d: expected SearchResult.Hits.Hit.Index = %q; got %q", i, testIndexName, hit.Index) + } + item := make(map[string]interface{}) + err := json.Unmarshal(*hit.Source, &item) + if err != nil { + t.Fatalf("#%d: %v", i, err) + } + docs++ + } + + if len(res.ScrollId) == 0 { + t.Fatalf("#%d: expected scrollId in results; got %q", i, res.ScrollId) + } + } + + if want, have := tt.ExpectedPages, pages; want != have { + t.Fatalf("#%d: expected to retrieve %d pages; got %d", i, want, have) + } + if want, have := tt.ExpectedDocs, docs; want != have { + t.Fatalf("#%d: expected to retrieve %d hits; got %d", i, want, have) + } + + err = svc.Clear(context.TODO()) + if err != nil { + t.Fatalf("#%d: failed to clear scroll context: %v", i, err) + } + + _, err = svc.Do(context.TODO()) + if err == nil { + t.Fatalf("#%d: expected to fail", i) + } + } +} + +func TestScrollWithSlice(t *testing.T) { + client := setupTestClientAndCreateIndexAndAddDocs(t) //, SetTraceLog(log.New(os.Stdout, "", 0))) + + // Should return all documents. Just don't call Do yet! + sliceQuery := NewSliceQuery().Id(0).Max(2) + svc := client.Scroll(testIndexName).Slice(sliceQuery).Size(1) + + pages := 0 + docs := 0 + + for { + res, err := svc.Do(context.TODO()) + if err == io.EOF { + break + } + if err != nil { + t.Fatal(err) + } + if res == nil { + t.Fatal("expected results != nil; got nil") + } + if res.Hits == nil { + t.Fatal("expected results.Hits != nil; got nil") + } + + pages++ + + for _, hit := range res.Hits.Hits { + if hit.Index != testIndexName { + t.Fatalf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) + } + item := make(map[string]interface{}) + err := json.Unmarshal(*hit.Source, &item) + if err != nil { + t.Fatal(err) + } + docs++ + } + + if len(res.ScrollId) == 0 { + t.Fatalf("expected scrollId in results; got %q", res.ScrollId) + } + } + + if pages == 0 { + t.Fatal("expected to retrieve some pages") + } + if docs == 0 { + t.Fatal("expected to retrieve some hits") + } + + if err := svc.Clear(context.TODO()); err != nil { + t.Fatal(err) + } + + if _, err := svc.Do(context.TODO()); err == nil { + t.Fatal("expected to fail") + } +} diff --git a/vendor/github.com/olivere/elastic/search.go b/vendor/github.com/olivere/elastic/search.go new file mode 100644 index 0000000..3bbf63f --- /dev/null +++ b/vendor/github.com/olivere/elastic/search.go @@ -0,0 +1,587 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/url" + "reflect" + "strings" + + "github.com/olivere/elastic/uritemplates" +) + +// Search for documents in Elasticsearch. +type SearchService struct { + client *Client + searchSource *SearchSource + source interface{} + pretty bool + filterPath []string + searchType string + index []string + typ []string + routing string + preference string + requestCache *bool + ignoreUnavailable *bool + allowNoIndices *bool + expandWildcards string +} + +// NewSearchService creates a new service for searching in Elasticsearch. +func NewSearchService(client *Client) *SearchService { + builder := &SearchService{ + client: client, + searchSource: NewSearchSource(), + } + return builder +} + +// SearchSource sets the search source builder to use with this service. +func (s *SearchService) SearchSource(searchSource *SearchSource) *SearchService { + s.searchSource = searchSource + if s.searchSource == nil { + s.searchSource = NewSearchSource() + } + return s +} + +// Source allows the user to set the request body manually without using +// any of the structs and interfaces in Elastic. +func (s *SearchService) Source(source interface{}) *SearchService { + s.source = source + return s +} + +// FilterPath allows reducing the response, a mechanism known as +// response filtering and described here: +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/common-options.html#common-options-response-filtering. +func (s *SearchService) FilterPath(filterPath ...string) *SearchService { + s.filterPath = append(s.filterPath, filterPath...) + return s +} + +// Index sets the names of the indices to use for search. +func (s *SearchService) Index(index ...string) *SearchService { + s.index = append(s.index, index...) + return s +} + +// Types adds search restrictions for a list of types. +func (s *SearchService) Type(typ ...string) *SearchService { + s.typ = append(s.typ, typ...) + return s +} + +// Pretty enables the caller to indent the JSON output. +func (s *SearchService) Pretty(pretty bool) *SearchService { + s.pretty = pretty + return s +} + +// Timeout sets the timeout to use, e.g. "1s" or "1000ms". +func (s *SearchService) Timeout(timeout string) *SearchService { + s.searchSource = s.searchSource.Timeout(timeout) + return s +} + +// Profile sets the Profile API flag on the search source. +// When enabled, a search executed by this service will return query +// profiling data. +func (s *SearchService) Profile(profile bool) *SearchService { + s.searchSource = s.searchSource.Profile(profile) + return s +} + +// Collapse adds field collapsing. +func (s *SearchService) Collapse(collapse *CollapseBuilder) *SearchService { + s.searchSource = s.searchSource.Collapse(collapse) + return s +} + +// TimeoutInMillis sets the timeout in milliseconds. +func (s *SearchService) TimeoutInMillis(timeoutInMillis int) *SearchService { + s.searchSource = s.searchSource.TimeoutInMillis(timeoutInMillis) + return s +} + +// TerminateAfter specifies the maximum number of documents to collect for +// each shard, upon reaching which the query execution will terminate early. +func (s *SearchService) TerminateAfter(terminateAfter int) *SearchService { + s.searchSource = s.searchSource.TerminateAfter(terminateAfter) + return s +} + +// SearchType sets the search operation type. Valid values are: +// "dfs_query_then_fetch" and "query_then_fetch". +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-search-type.html +// for details. +func (s *SearchService) SearchType(searchType string) *SearchService { + s.searchType = searchType + return s +} + +// Routing is a list of specific routing values to control the shards +// the search will be executed on. +func (s *SearchService) Routing(routings ...string) *SearchService { + s.routing = strings.Join(routings, ",") + return s +} + +// Preference sets the preference to execute the search. Defaults to +// randomize across shards ("random"). Can be set to "_local" to prefer +// local shards, "_primary" to execute on primary shards only, +// or a custom value which guarantees that the same order will be used +// across different requests. +func (s *SearchService) Preference(preference string) *SearchService { + s.preference = preference + return s +} + +// RequestCache indicates whether the cache should be used for this +// request or not, defaults to index level setting. +func (s *SearchService) RequestCache(requestCache bool) *SearchService { + s.requestCache = &requestCache + return s +} + +// Query sets the query to perform, e.g. MatchAllQuery. +func (s *SearchService) Query(query Query) *SearchService { + s.searchSource = s.searchSource.Query(query) + return s +} + +// PostFilter will be executed after the query has been executed and +// only affects the search hits, not the aggregations. +// This filter is always executed as the last filtering mechanism. +func (s *SearchService) PostFilter(postFilter Query) *SearchService { + s.searchSource = s.searchSource.PostFilter(postFilter) + return s +} + +// FetchSource indicates whether the response should contain the stored +// _source for every hit. +func (s *SearchService) FetchSource(fetchSource bool) *SearchService { + s.searchSource = s.searchSource.FetchSource(fetchSource) + return s +} + +// FetchSourceContext indicates how the _source should be fetched. +func (s *SearchService) FetchSourceContext(fetchSourceContext *FetchSourceContext) *SearchService { + s.searchSource = s.searchSource.FetchSourceContext(fetchSourceContext) + return s +} + +// Highlight adds highlighting to the search. +func (s *SearchService) Highlight(highlight *Highlight) *SearchService { + s.searchSource = s.searchSource.Highlight(highlight) + return s +} + +// GlobalSuggestText defines the global text to use with all suggesters. +// This avoids repetition. +func (s *SearchService) GlobalSuggestText(globalText string) *SearchService { + s.searchSource = s.searchSource.GlobalSuggestText(globalText) + return s +} + +// Suggester adds a suggester to the search. +func (s *SearchService) Suggester(suggester Suggester) *SearchService { + s.searchSource = s.searchSource.Suggester(suggester) + return s +} + +// Aggregation adds an aggreation to perform as part of the search. +func (s *SearchService) Aggregation(name string, aggregation Aggregation) *SearchService { + s.searchSource = s.searchSource.Aggregation(name, aggregation) + return s +} + +// MinScore sets the minimum score below which docs will be filtered out. +func (s *SearchService) MinScore(minScore float64) *SearchService { + s.searchSource = s.searchSource.MinScore(minScore) + return s +} + +// From index to start the search from. Defaults to 0. +func (s *SearchService) From(from int) *SearchService { + s.searchSource = s.searchSource.From(from) + return s +} + +// Size is the number of search hits to return. Defaults to 10. +func (s *SearchService) Size(size int) *SearchService { + s.searchSource = s.searchSource.Size(size) + return s +} + +// Explain indicates whether each search hit should be returned with +// an explanation of the hit (ranking). +func (s *SearchService) Explain(explain bool) *SearchService { + s.searchSource = s.searchSource.Explain(explain) + return s +} + +// Version indicates whether each search hit should be returned with +// a version associated to it. +func (s *SearchService) Version(version bool) *SearchService { + s.searchSource = s.searchSource.Version(version) + return s +} + +// Sort adds a sort order. +func (s *SearchService) Sort(field string, ascending bool) *SearchService { + s.searchSource = s.searchSource.Sort(field, ascending) + return s +} + +// SortWithInfo adds a sort order. +func (s *SearchService) SortWithInfo(info SortInfo) *SearchService { + s.searchSource = s.searchSource.SortWithInfo(info) + return s +} + +// SortBy adds a sort order. +func (s *SearchService) SortBy(sorter ...Sorter) *SearchService { + s.searchSource = s.searchSource.SortBy(sorter...) + return s +} + +// NoStoredFields indicates that no stored fields should be loaded, resulting in only +// id and type to be returned per field. +func (s *SearchService) NoStoredFields() *SearchService { + s.searchSource = s.searchSource.NoStoredFields() + return s +} + +// StoredField adds a single field to load and return (note, must be stored) as +// part of the search request. If none are specified, the source of the +// document will be returned. +func (s *SearchService) StoredField(fieldName string) *SearchService { + s.searchSource = s.searchSource.StoredField(fieldName) + return s +} + +// StoredFields sets the fields to load and return as part of the search request. +// If none are specified, the source of the document will be returned. +func (s *SearchService) StoredFields(fields ...string) *SearchService { + s.searchSource = s.searchSource.StoredFields(fields...) + return s +} + +// TrackScores is applied when sorting and controls if scores will be +// tracked as well. Defaults to false. +func (s *SearchService) TrackScores(trackScores bool) *SearchService { + s.searchSource = s.searchSource.TrackScores(trackScores) + return s +} + +// SearchAfter allows a different form of pagination by using a live cursor, +// using the results of the previous page to help the retrieval of the next. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-search-after.html +func (s *SearchService) SearchAfter(sortValues ...interface{}) *SearchService { + s.searchSource = s.searchSource.SearchAfter(sortValues...) + return s +} + +// IgnoreUnavailable indicates whether the specified concrete indices +// should be ignored when unavailable (missing or closed). +func (s *SearchService) IgnoreUnavailable(ignoreUnavailable bool) *SearchService { + s.ignoreUnavailable = &ignoreUnavailable + return s +} + +// AllowNoIndices indicates whether to ignore if a wildcard indices +// expression resolves into no concrete indices. (This includes `_all` string +// or when no indices have been specified). +func (s *SearchService) AllowNoIndices(allowNoIndices bool) *SearchService { + s.allowNoIndices = &allowNoIndices + return s +} + +// ExpandWildcards indicates whether to expand wildcard expression to +// concrete indices that are open, closed or both. +func (s *SearchService) ExpandWildcards(expandWildcards string) *SearchService { + s.expandWildcards = expandWildcards + return s +} + +// buildURL builds the URL for the operation. +func (s *SearchService) buildURL() (string, url.Values, error) { + var err error + var path string + + if len(s.index) > 0 && len(s.typ) > 0 { + path, err = uritemplates.Expand("/{index}/{type}/_search", map[string]string{ + "index": strings.Join(s.index, ","), + "type": strings.Join(s.typ, ","), + }) + } else if len(s.index) > 0 { + path, err = uritemplates.Expand("/{index}/_search", map[string]string{ + "index": strings.Join(s.index, ","), + }) + } else if len(s.typ) > 0 { + path, err = uritemplates.Expand("/_all/{type}/_search", map[string]string{ + "type": strings.Join(s.typ, ","), + }) + } else { + path = "/_search" + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", fmt.Sprintf("%v", s.pretty)) + } + if s.searchType != "" { + params.Set("search_type", s.searchType) + } + if s.routing != "" { + params.Set("routing", s.routing) + } + if s.preference != "" { + params.Set("preference", s.preference) + } + if s.requestCache != nil { + params.Set("request_cache", fmt.Sprintf("%v", *s.requestCache)) + } + if s.allowNoIndices != nil { + params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) + } + if s.expandWildcards != "" { + params.Set("expand_wildcards", s.expandWildcards) + } + if s.ignoreUnavailable != nil { + params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) + } + if len(s.filterPath) > 0 { + params.Set("filter_path", strings.Join(s.filterPath, ",")) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *SearchService) Validate() error { + return nil +} + +// Do executes the search and returns a SearchResult. +func (s *SearchService) Do(ctx context.Context) (*SearchResult, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Perform request + var body interface{} + if s.source != nil { + body = s.source + } else { + src, err := s.searchSource.Source() + if err != nil { + return nil, err + } + body = src + } + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + Body: body, + }) + if err != nil { + return nil, err + } + + // Return search results + ret := new(SearchResult) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// SearchResult is the result of a search in Elasticsearch. +type SearchResult struct { + TookInMillis int64 `json:"took"` // search time in milliseconds + ScrollId string `json:"_scroll_id"` // only used with Scroll and Scan operations + Hits *SearchHits `json:"hits"` // the actual search hits + Suggest SearchSuggest `json:"suggest"` // results from suggesters + Aggregations Aggregations `json:"aggregations"` // results from aggregations + TimedOut bool `json:"timed_out"` // true if the search timed out + Error *ErrorDetails `json:"error,omitempty"` // only used in MultiGet + Profile *SearchProfile `json:"profile,omitempty"` // profiling results, if optional Profile API was active for this search + Shards *shardsInfo `json:"_shards,omitempty"` // shard information +} + +// TotalHits is a convenience function to return the number of hits for +// a search result. +func (r *SearchResult) TotalHits() int64 { + if r.Hits != nil { + return r.Hits.TotalHits + } + return 0 +} + +// Each is a utility function to iterate over all hits. It saves you from +// checking for nil values. Notice that Each will ignore errors in +// serializing JSON and hits with empty/nil _source will get an empty +// value +func (r *SearchResult) Each(typ reflect.Type) []interface{} { + if r.Hits == nil || r.Hits.Hits == nil || len(r.Hits.Hits) == 0 { + return nil + } + var slice []interface{} + for _, hit := range r.Hits.Hits { + v := reflect.New(typ).Elem() + if hit.Source == nil { + slice = append(slice, v.Interface()) + continue + } + if err := json.Unmarshal(*hit.Source, v.Addr().Interface()); err == nil { + slice = append(slice, v.Interface()) + } + } + return slice +} + +// SearchHits specifies the list of search hits. +type SearchHits struct { + TotalHits int64 `json:"total"` // total number of hits found + MaxScore *float64 `json:"max_score"` // maximum score of all hits + Hits []*SearchHit `json:"hits"` // the actual hits returned +} + +// SearchHit is a single hit. +type SearchHit struct { + Score *float64 `json:"_score"` // computed score + Index string `json:"_index"` // index name + Type string `json:"_type"` // type meta field + Id string `json:"_id"` // external or internal + Uid string `json:"_uid"` // uid meta field (see MapperService.java for all meta fields) + Routing string `json:"_routing"` // routing meta field + Parent string `json:"_parent"` // parent meta field + Version *int64 `json:"_version"` // version number, when Version is set to true in SearchService + Sort []interface{} `json:"sort"` // sort information + Highlight SearchHitHighlight `json:"highlight"` // highlighter information + Source *json.RawMessage `json:"_source"` // stored document source + Fields map[string]interface{} `json:"fields"` // returned (stored) fields + Explanation *SearchExplanation `json:"_explanation"` // explains how the score was computed + MatchedQueries []string `json:"matched_queries"` // matched queries + InnerHits map[string]*SearchHitInnerHits `json:"inner_hits"` // inner hits with ES >= 1.5.0 + + // Shard + // HighlightFields + // SortValues + // MatchedFilters +} + +type SearchHitInnerHits struct { + Hits *SearchHits `json:"hits"` +} + +// SearchExplanation explains how the score for a hit was computed. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-explain.html. +type SearchExplanation struct { + Value float64 `json:"value"` // e.g. 1.0 + Description string `json:"description"` // e.g. "boost" or "ConstantScore(*:*), product of:" + Details []SearchExplanation `json:"details,omitempty"` // recursive details +} + +// Suggest + +// SearchSuggest is a map of suggestions. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-suggesters.html. +type SearchSuggest map[string][]SearchSuggestion + +// SearchSuggestion is a single search suggestion. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-suggesters.html. +type SearchSuggestion struct { + Text string `json:"text"` + Offset int `json:"offset"` + Length int `json:"length"` + Options []SearchSuggestionOption `json:"options"` +} + +// SearchSuggestionOption is an option of a SearchSuggestion. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-suggesters.html. +type SearchSuggestionOption struct { + Text string `json:"text"` + Index string `json:"_index"` + Type string `json:"_type"` + Id string `json:"_id"` + Score float64 `json:"score"` + Highlighted string `json:"highlighted"` + CollateMatch bool `json:"collate_match"` + Freq int `json:"freq"` // from TermSuggestion.Option in Java API + Source *json.RawMessage `json:"_source"` +} + +// SearchProfile is a list of shard profiling data collected during +// query execution in the "profile" section of a SearchResult +type SearchProfile struct { + Shards []SearchProfileShardResult `json:"shards"` +} + +// SearchProfileShardResult returns the profiling data for a single shard +// accessed during the search query or aggregation. +type SearchProfileShardResult struct { + ID string `json:"id"` + Searches []QueryProfileShardResult `json:"searches"` + Aggregations []ProfileResult `json:"aggregations"` +} + +// QueryProfileShardResult is a container class to hold the profile results +// for a single shard in the request. It comtains a list of query profiles, +// a collector tree and a total rewrite tree. +type QueryProfileShardResult struct { + Query []ProfileResult `json:"query,omitempty"` + RewriteTime int64 `json:"rewrite_time,omitempty"` + Collector []interface{} `json:"collector,omitempty"` +} + +// CollectorResult holds the profile timings of the collectors used in the +// search. Children's CollectorResults may be embedded inside of a parent +// CollectorResult. +type CollectorResult struct { + Name string `json:"name,omitempty"` + Reason string `json:"reason,omitempty"` + Time string `json:"time,omitempty"` + TimeNanos int64 `json:"time_in_nanos,omitempty"` + Children []CollectorResult `json:"children,omitempty"` +} + +// ProfileResult is the internal representation of a profiled query, +// corresponding to a single node in the query tree. +type ProfileResult struct { + Type string `json:"type"` + Description string `json:"description,omitempty"` + NodeTime string `json:"time,omitempty"` + NodeTimeNanos int64 `json:"time_in_nanos,omitempty"` + Breakdown map[string]int64 `json:"breakdown,omitempty"` + Children []ProfileResult `json:"children,omitempty"` +} + +// Aggregations (see search_aggs.go) + +// Highlighting + +// SearchHitHighlight is the highlight information of a search hit. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-highlighting.html +// for a general discussion of highlighting. +type SearchHitHighlight map[string][]string diff --git a/vendor/github.com/olivere/elastic/search_aggs.go b/vendor/github.com/olivere/elastic/search_aggs.go new file mode 100644 index 0000000..62bbd08 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs.go @@ -0,0 +1,1625 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "bytes" + "encoding/json" +) + +// Aggregations can be seen as a unit-of-work that build +// analytic information over a set of documents. It is +// (in many senses) the follow-up of facets in Elasticsearch. +// For more details about aggregations, visit: +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations.html +type Aggregation interface { + // Source returns a JSON-serializable aggregation that is a fragment + // of the request sent to Elasticsearch. + Source() (interface{}, error) +} + +// Aggregations is a list of aggregations that are part of a search result. +type Aggregations map[string]*json.RawMessage + +// Min returns min aggregation results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-min-aggregation.html +func (a Aggregations) Min(name string) (*AggregationValueMetric, bool) { + if raw, found := a[name]; found { + agg := new(AggregationValueMetric) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// Max returns max aggregation results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-max-aggregation.html +func (a Aggregations) Max(name string) (*AggregationValueMetric, bool) { + if raw, found := a[name]; found { + agg := new(AggregationValueMetric) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// Sum returns sum aggregation results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-sum-aggregation.html +func (a Aggregations) Sum(name string) (*AggregationValueMetric, bool) { + if raw, found := a[name]; found { + agg := new(AggregationValueMetric) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// Avg returns average aggregation results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-avg-aggregation.html +func (a Aggregations) Avg(name string) (*AggregationValueMetric, bool) { + if raw, found := a[name]; found { + agg := new(AggregationValueMetric) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// ValueCount returns value-count aggregation results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-valuecount-aggregation.html +func (a Aggregations) ValueCount(name string) (*AggregationValueMetric, bool) { + if raw, found := a[name]; found { + agg := new(AggregationValueMetric) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// Cardinality returns cardinality aggregation results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-cardinality-aggregation.html +func (a Aggregations) Cardinality(name string) (*AggregationValueMetric, bool) { + if raw, found := a[name]; found { + agg := new(AggregationValueMetric) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// Stats returns stats aggregation results. +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-stats-aggregation.html +func (a Aggregations) Stats(name string) (*AggregationStatsMetric, bool) { + if raw, found := a[name]; found { + agg := new(AggregationStatsMetric) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// ExtendedStats returns extended stats aggregation results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-extendedstats-aggregation.html +func (a Aggregations) ExtendedStats(name string) (*AggregationExtendedStatsMetric, bool) { + if raw, found := a[name]; found { + agg := new(AggregationExtendedStatsMetric) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// MatrixStats returns matrix stats aggregation results. +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-matrix-stats-aggregation.html +func (a Aggregations) MatrixStats(name string) (*AggregationMatrixStats, bool) { + if raw, found := a[name]; found { + agg := new(AggregationMatrixStats) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// Percentiles returns percentiles results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-percentile-aggregation.html +func (a Aggregations) Percentiles(name string) (*AggregationPercentilesMetric, bool) { + if raw, found := a[name]; found { + agg := new(AggregationPercentilesMetric) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// PercentileRanks returns percentile ranks results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-percentile-rank-aggregation.html +func (a Aggregations) PercentileRanks(name string) (*AggregationPercentilesMetric, bool) { + if raw, found := a[name]; found { + agg := new(AggregationPercentilesMetric) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// TopHits returns top-hits aggregation results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-top-hits-aggregation.html +func (a Aggregations) TopHits(name string) (*AggregationTopHitsMetric, bool) { + if raw, found := a[name]; found { + agg := new(AggregationTopHitsMetric) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// Global returns global results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-global-aggregation.html +func (a Aggregations) Global(name string) (*AggregationSingleBucket, bool) { + if raw, found := a[name]; found { + agg := new(AggregationSingleBucket) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// Filter returns filter results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-filter-aggregation.html +func (a Aggregations) Filter(name string) (*AggregationSingleBucket, bool) { + if raw, found := a[name]; found { + agg := new(AggregationSingleBucket) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// Filters returns filters results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-filters-aggregation.html +func (a Aggregations) Filters(name string) (*AggregationBucketFilters, bool) { + if raw, found := a[name]; found { + agg := new(AggregationBucketFilters) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// AdjacencyMatrix returning a form of adjacency matrix. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-adjacency-matrix-aggregation.html +func (a Aggregations) AdjacencyMatrix(name string) (*AggregationBucketAdjacencyMatrix, bool) { + if raw, found := a[name]; found { + agg := new(AggregationBucketAdjacencyMatrix) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// Missing returns missing results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-missing-aggregation.html +func (a Aggregations) Missing(name string) (*AggregationSingleBucket, bool) { + if raw, found := a[name]; found { + agg := new(AggregationSingleBucket) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// Nested returns nested results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-nested-aggregation.html +func (a Aggregations) Nested(name string) (*AggregationSingleBucket, bool) { + if raw, found := a[name]; found { + agg := new(AggregationSingleBucket) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// ReverseNested returns reverse-nested results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-reverse-nested-aggregation.html +func (a Aggregations) ReverseNested(name string) (*AggregationSingleBucket, bool) { + if raw, found := a[name]; found { + agg := new(AggregationSingleBucket) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// Children returns children results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-children-aggregation.html +func (a Aggregations) Children(name string) (*AggregationSingleBucket, bool) { + if raw, found := a[name]; found { + agg := new(AggregationSingleBucket) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// Terms returns terms aggregation results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-terms-aggregation.html +func (a Aggregations) Terms(name string) (*AggregationBucketKeyItems, bool) { + if raw, found := a[name]; found { + agg := new(AggregationBucketKeyItems) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// SignificantTerms returns significant terms aggregation results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-significantterms-aggregation.html +func (a Aggregations) SignificantTerms(name string) (*AggregationBucketSignificantTerms, bool) { + if raw, found := a[name]; found { + agg := new(AggregationBucketSignificantTerms) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// Sampler returns sampler aggregation results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-sampler-aggregation.html +func (a Aggregations) Sampler(name string) (*AggregationSingleBucket, bool) { + if raw, found := a[name]; found { + agg := new(AggregationSingleBucket) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// DiversifiedSampler returns diversified_sampler aggregation results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-diversified-sampler-aggregation.html +func (a Aggregations) DiversifiedSampler(name string) (*AggregationSingleBucket, bool) { + if raw, found := a[name]; found { + agg := new(AggregationSingleBucket) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// Range returns range aggregation results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-range-aggregation.html +func (a Aggregations) Range(name string) (*AggregationBucketRangeItems, bool) { + if raw, found := a[name]; found { + agg := new(AggregationBucketRangeItems) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// KeyedRange returns keyed range aggregation results. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-range-aggregation.html. +func (a Aggregations) KeyedRange(name string) (*AggregationBucketKeyedRangeItems, bool) { + if raw, found := a[name]; found { + agg := new(AggregationBucketKeyedRangeItems) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// DateRange returns date range aggregation results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-daterange-aggregation.html +func (a Aggregations) DateRange(name string) (*AggregationBucketRangeItems, bool) { + if raw, found := a[name]; found { + agg := new(AggregationBucketRangeItems) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// IPRange returns IP range aggregation results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-iprange-aggregation.html +func (a Aggregations) IPRange(name string) (*AggregationBucketRangeItems, bool) { + if raw, found := a[name]; found { + agg := new(AggregationBucketRangeItems) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// Histogram returns histogram aggregation results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-histogram-aggregation.html +func (a Aggregations) Histogram(name string) (*AggregationBucketHistogramItems, bool) { + if raw, found := a[name]; found { + agg := new(AggregationBucketHistogramItems) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// DateHistogram returns date histogram aggregation results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-datehistogram-aggregation.html +func (a Aggregations) DateHistogram(name string) (*AggregationBucketHistogramItems, bool) { + if raw, found := a[name]; found { + agg := new(AggregationBucketHistogramItems) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// GeoBounds returns geo-bounds aggregation results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-geobounds-aggregation.html +func (a Aggregations) GeoBounds(name string) (*AggregationGeoBoundsMetric, bool) { + if raw, found := a[name]; found { + agg := new(AggregationGeoBoundsMetric) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// GeoHash returns geo-hash aggregation results. +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-geohashgrid-aggregation.html +func (a Aggregations) GeoHash(name string) (*AggregationBucketKeyItems, bool) { + if raw, found := a[name]; found { + agg := new(AggregationBucketKeyItems) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// GeoCentroid returns geo-centroid aggregation results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-geocentroid-aggregation.html +func (a Aggregations) GeoCentroid(name string) (*AggregationGeoCentroidMetric, bool) { + if raw, found := a[name]; found { + agg := new(AggregationGeoCentroidMetric) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// GeoDistance returns geo distance aggregation results. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-geodistance-aggregation.html +func (a Aggregations) GeoDistance(name string) (*AggregationBucketRangeItems, bool) { + if raw, found := a[name]; found { + agg := new(AggregationBucketRangeItems) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// AvgBucket returns average bucket pipeline aggregation results. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-avg-bucket-aggregation.html +func (a Aggregations) AvgBucket(name string) (*AggregationPipelineSimpleValue, bool) { + if raw, found := a[name]; found { + agg := new(AggregationPipelineSimpleValue) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// SumBucket returns sum bucket pipeline aggregation results. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-sum-bucket-aggregation.html +func (a Aggregations) SumBucket(name string) (*AggregationPipelineSimpleValue, bool) { + if raw, found := a[name]; found { + agg := new(AggregationPipelineSimpleValue) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// StatsBucket returns stats bucket pipeline aggregation results. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-stats-bucket-aggregation.html +func (a Aggregations) StatsBucket(name string) (*AggregationPipelineStatsMetric, bool) { + if raw, found := a[name]; found { + agg := new(AggregationPipelineStatsMetric) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// PercentilesBucket returns stats bucket pipeline aggregation results. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-percentiles-bucket-aggregation.html +func (a Aggregations) PercentilesBucket(name string) (*AggregationPipelinePercentilesMetric, bool) { + if raw, found := a[name]; found { + agg := new(AggregationPipelinePercentilesMetric) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// MaxBucket returns maximum bucket pipeline aggregation results. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-max-bucket-aggregation.html +func (a Aggregations) MaxBucket(name string) (*AggregationPipelineBucketMetricValue, bool) { + if raw, found := a[name]; found { + agg := new(AggregationPipelineBucketMetricValue) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// MinBucket returns minimum bucket pipeline aggregation results. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-min-bucket-aggregation.html +func (a Aggregations) MinBucket(name string) (*AggregationPipelineBucketMetricValue, bool) { + if raw, found := a[name]; found { + agg := new(AggregationPipelineBucketMetricValue) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// MovAvg returns moving average pipeline aggregation results. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-movavg-aggregation.html +func (a Aggregations) MovAvg(name string) (*AggregationPipelineSimpleValue, bool) { + if raw, found := a[name]; found { + agg := new(AggregationPipelineSimpleValue) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// Derivative returns derivative pipeline aggregation results. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-derivative-aggregation.html +func (a Aggregations) Derivative(name string) (*AggregationPipelineDerivative, bool) { + if raw, found := a[name]; found { + agg := new(AggregationPipelineDerivative) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// CumulativeSum returns a cumulative sum pipeline aggregation results. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-cumulative-sum-aggregation.html +func (a Aggregations) CumulativeSum(name string) (*AggregationPipelineSimpleValue, bool) { + if raw, found := a[name]; found { + agg := new(AggregationPipelineSimpleValue) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// BucketScript returns bucket script pipeline aggregation results. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-bucket-script-aggregation.html +func (a Aggregations) BucketScript(name string) (*AggregationPipelineSimpleValue, bool) { + if raw, found := a[name]; found { + agg := new(AggregationPipelineSimpleValue) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// SerialDiff returns serial differencing pipeline aggregation results. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-serialdiff-aggregation.html +func (a Aggregations) SerialDiff(name string) (*AggregationPipelineSimpleValue, bool) { + if raw, found := a[name]; found { + agg := new(AggregationPipelineSimpleValue) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// Composite returns composite bucket aggregation results. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-composite-aggregation.html +// for details. +func (a Aggregations) Composite(name string) (*AggregationBucketCompositeItems, bool) { + if raw, found := a[name]; found { + agg := new(AggregationBucketCompositeItems) + if raw == nil { + return agg, true + } + if err := json.Unmarshal(*raw, agg); err == nil { + return agg, true + } + } + return nil, false +} + +// -- Single value metric -- + +// AggregationValueMetric is a single-value metric, returned e.g. by a +// Min or Max aggregation. +type AggregationValueMetric struct { + Aggregations + + Value *float64 //`json:"value"` + Meta map[string]interface{} // `json:"meta,omitempty"` +} + +// UnmarshalJSON decodes JSON data and initializes an AggregationValueMetric structure. +func (a *AggregationValueMetric) UnmarshalJSON(data []byte) error { + var aggs map[string]*json.RawMessage + if err := json.Unmarshal(data, &aggs); err != nil { + return err + } + if v, ok := aggs["value"]; ok && v != nil { + json.Unmarshal(*v, &a.Value) + } + if v, ok := aggs["meta"]; ok && v != nil { + json.Unmarshal(*v, &a.Meta) + } + a.Aggregations = aggs + return nil +} + +// -- Stats metric -- + +// AggregationStatsMetric is a multi-value metric, returned by a Stats aggregation. +type AggregationStatsMetric struct { + Aggregations + + Count int64 // `json:"count"` + Min *float64 //`json:"min,omitempty"` + Max *float64 //`json:"max,omitempty"` + Avg *float64 //`json:"avg,omitempty"` + Sum *float64 //`json:"sum,omitempty"` + Meta map[string]interface{} // `json:"meta,omitempty"` +} + +// UnmarshalJSON decodes JSON data and initializes an AggregationStatsMetric structure. +func (a *AggregationStatsMetric) UnmarshalJSON(data []byte) error { + var aggs map[string]*json.RawMessage + if err := json.Unmarshal(data, &aggs); err != nil { + return err + } + if v, ok := aggs["count"]; ok && v != nil { + json.Unmarshal(*v, &a.Count) + } + if v, ok := aggs["min"]; ok && v != nil { + json.Unmarshal(*v, &a.Min) + } + if v, ok := aggs["max"]; ok && v != nil { + json.Unmarshal(*v, &a.Max) + } + if v, ok := aggs["avg"]; ok && v != nil { + json.Unmarshal(*v, &a.Avg) + } + if v, ok := aggs["sum"]; ok && v != nil { + json.Unmarshal(*v, &a.Sum) + } + if v, ok := aggs["meta"]; ok && v != nil { + json.Unmarshal(*v, &a.Meta) + } + a.Aggregations = aggs + return nil +} + +// -- Extended stats metric -- + +// AggregationExtendedStatsMetric is a multi-value metric, returned by an ExtendedStats aggregation. +type AggregationExtendedStatsMetric struct { + Aggregations + + Count int64 // `json:"count"` + Min *float64 //`json:"min,omitempty"` + Max *float64 //`json:"max,omitempty"` + Avg *float64 //`json:"avg,omitempty"` + Sum *float64 //`json:"sum,omitempty"` + SumOfSquares *float64 //`json:"sum_of_squares,omitempty"` + Variance *float64 //`json:"variance,omitempty"` + StdDeviation *float64 //`json:"std_deviation,omitempty"` + Meta map[string]interface{} // `json:"meta,omitempty"` +} + +// UnmarshalJSON decodes JSON data and initializes an AggregationExtendedStatsMetric structure. +func (a *AggregationExtendedStatsMetric) UnmarshalJSON(data []byte) error { + var aggs map[string]*json.RawMessage + if err := json.Unmarshal(data, &aggs); err != nil { + return err + } + if v, ok := aggs["count"]; ok && v != nil { + json.Unmarshal(*v, &a.Count) + } + if v, ok := aggs["min"]; ok && v != nil { + json.Unmarshal(*v, &a.Min) + } + if v, ok := aggs["max"]; ok && v != nil { + json.Unmarshal(*v, &a.Max) + } + if v, ok := aggs["avg"]; ok && v != nil { + json.Unmarshal(*v, &a.Avg) + } + if v, ok := aggs["sum"]; ok && v != nil { + json.Unmarshal(*v, &a.Sum) + } + if v, ok := aggs["sum_of_squares"]; ok && v != nil { + json.Unmarshal(*v, &a.SumOfSquares) + } + if v, ok := aggs["variance"]; ok && v != nil { + json.Unmarshal(*v, &a.Variance) + } + if v, ok := aggs["std_deviation"]; ok && v != nil { + json.Unmarshal(*v, &a.StdDeviation) + } + if v, ok := aggs["meta"]; ok && v != nil { + json.Unmarshal(*v, &a.Meta) + } + a.Aggregations = aggs + return nil +} + +// -- Matrix Stats -- + +// AggregationMatrixStats is returned by a MatrixStats aggregation. +type AggregationMatrixStats struct { + Aggregations + + Fields []*AggregationMatrixStatsField // `json:"field,omitempty"` + Meta map[string]interface{} // `json:"meta,omitempty"` +} + +// AggregationMatrixStatsField represents running stats of a single field +// returned from MatrixStats aggregation. +type AggregationMatrixStatsField struct { + Name string `json:"name"` + Count int64 `json:"count"` + Mean float64 `json:"mean,omitempty"` + Variance float64 `json:"variance,omitempty"` + Skewness float64 `json:"skewness,omitempty"` + Kurtosis float64 `json:"kurtosis,omitempty"` + Covariance map[string]float64 `json:"covariance,omitempty"` + Correlation map[string]float64 `json:"correlation,omitempty"` +} + +// UnmarshalJSON decodes JSON data and initializes an AggregationMatrixStats structure. +func (a *AggregationMatrixStats) UnmarshalJSON(data []byte) error { + var aggs map[string]*json.RawMessage + if err := json.Unmarshal(data, &aggs); err != nil { + return err + } + if v, ok := aggs["fields"]; ok && v != nil { + // RunningStats for every field + json.Unmarshal(*v, &a.Fields) + } + if v, ok := aggs["meta"]; ok && v != nil { + json.Unmarshal(*v, &a.Meta) + } + a.Aggregations = aggs + return nil +} + +// -- Percentiles metric -- + +// AggregationPercentilesMetric is a multi-value metric, returned by a Percentiles aggregation. +type AggregationPercentilesMetric struct { + Aggregations + + Values map[string]float64 // `json:"values"` + Meta map[string]interface{} // `json:"meta,omitempty"` +} + +// UnmarshalJSON decodes JSON data and initializes an AggregationPercentilesMetric structure. +func (a *AggregationPercentilesMetric) UnmarshalJSON(data []byte) error { + var aggs map[string]*json.RawMessage + if err := json.Unmarshal(data, &aggs); err != nil { + return err + } + if v, ok := aggs["values"]; ok && v != nil { + json.Unmarshal(*v, &a.Values) + } + if v, ok := aggs["meta"]; ok && v != nil { + json.Unmarshal(*v, &a.Meta) + } + a.Aggregations = aggs + return nil +} + +// -- Top-hits metric -- + +// AggregationTopHitsMetric is a metric returned by a TopHits aggregation. +type AggregationTopHitsMetric struct { + Aggregations + + Hits *SearchHits //`json:"hits"` + Meta map[string]interface{} // `json:"meta,omitempty"` +} + +// UnmarshalJSON decodes JSON data and initializes an AggregationTopHitsMetric structure. +func (a *AggregationTopHitsMetric) UnmarshalJSON(data []byte) error { + var aggs map[string]*json.RawMessage + if err := json.Unmarshal(data, &aggs); err != nil { + return err + } + a.Aggregations = aggs + a.Hits = new(SearchHits) + if v, ok := aggs["hits"]; ok && v != nil { + json.Unmarshal(*v, &a.Hits) + } + if v, ok := aggs["meta"]; ok && v != nil { + json.Unmarshal(*v, &a.Meta) + } + return nil +} + +// -- Geo-bounds metric -- + +// AggregationGeoBoundsMetric is a metric as returned by a GeoBounds aggregation. +type AggregationGeoBoundsMetric struct { + Aggregations + + Bounds struct { + TopLeft struct { + Latitude float64 `json:"lat"` + Longitude float64 `json:"lon"` + } `json:"top_left"` + BottomRight struct { + Latitude float64 `json:"lat"` + Longitude float64 `json:"lon"` + } `json:"bottom_right"` + } `json:"bounds"` + + Meta map[string]interface{} // `json:"meta,omitempty"` +} + +// UnmarshalJSON decodes JSON data and initializes an AggregationGeoBoundsMetric structure. +func (a *AggregationGeoBoundsMetric) UnmarshalJSON(data []byte) error { + var aggs map[string]*json.RawMessage + if err := json.Unmarshal(data, &aggs); err != nil { + return err + } + if v, ok := aggs["bounds"]; ok && v != nil { + json.Unmarshal(*v, &a.Bounds) + } + if v, ok := aggs["meta"]; ok && v != nil { + json.Unmarshal(*v, &a.Meta) + } + a.Aggregations = aggs + return nil +} + +// AggregationGeoCentroidMetric is a metric as returned by a GeoCentroid aggregation. +type AggregationGeoCentroidMetric struct { + Aggregations + + Location struct { + Latitude float64 `json:"lat"` + Longitude float64 `json:"lon"` + } `json:"location"` + + Count int // `json:"count,omitempty"` + + Meta map[string]interface{} // `json:"meta,omitempty"` +} + +// UnmarshalJSON decodes JSON data and initializes an AggregationGeoCentroidMetric structure. +func (a *AggregationGeoCentroidMetric) UnmarshalJSON(data []byte) error { + var aggs map[string]*json.RawMessage + if err := json.Unmarshal(data, &aggs); err != nil { + return err + } + if v, ok := aggs["location"]; ok && v != nil { + json.Unmarshal(*v, &a.Location) + } + if v, ok := aggs["meta"]; ok && v != nil { + json.Unmarshal(*v, &a.Meta) + } + if v, ok := aggs["count"]; ok && v != nil { + json.Unmarshal(*v, &a.Count) + } + a.Aggregations = aggs + return nil +} + +// -- Single bucket -- + +// AggregationSingleBucket is a single bucket, returned e.g. via an aggregation of type Global. +type AggregationSingleBucket struct { + Aggregations + + DocCount int64 // `json:"doc_count"` + Meta map[string]interface{} // `json:"meta,omitempty"` +} + +// UnmarshalJSON decodes JSON data and initializes an AggregationSingleBucket structure. +func (a *AggregationSingleBucket) UnmarshalJSON(data []byte) error { + var aggs map[string]*json.RawMessage + if err := json.Unmarshal(data, &aggs); err != nil { + return err + } + if v, ok := aggs["doc_count"]; ok && v != nil { + json.Unmarshal(*v, &a.DocCount) + } + if v, ok := aggs["meta"]; ok && v != nil { + json.Unmarshal(*v, &a.Meta) + } + a.Aggregations = aggs + return nil +} + +// -- Bucket range items -- + +// AggregationBucketRangeItems is a bucket aggregation that is e.g. returned +// with a range aggregation. +type AggregationBucketRangeItems struct { + Aggregations + + DocCountErrorUpperBound int64 //`json:"doc_count_error_upper_bound"` + SumOfOtherDocCount int64 //`json:"sum_other_doc_count"` + Buckets []*AggregationBucketRangeItem //`json:"buckets"` + Meta map[string]interface{} // `json:"meta,omitempty"` +} + +// UnmarshalJSON decodes JSON data and initializes an AggregationBucketRangeItems structure. +func (a *AggregationBucketRangeItems) UnmarshalJSON(data []byte) error { + var aggs map[string]*json.RawMessage + if err := json.Unmarshal(data, &aggs); err != nil { + return err + } + if v, ok := aggs["doc_count_error_upper_bound"]; ok && v != nil { + json.Unmarshal(*v, &a.DocCountErrorUpperBound) + } + if v, ok := aggs["sum_other_doc_count"]; ok && v != nil { + json.Unmarshal(*v, &a.SumOfOtherDocCount) + } + if v, ok := aggs["buckets"]; ok && v != nil { + json.Unmarshal(*v, &a.Buckets) + } + if v, ok := aggs["meta"]; ok && v != nil { + json.Unmarshal(*v, &a.Meta) + } + a.Aggregations = aggs + return nil +} + +// AggregationBucketKeyedRangeItems is a bucket aggregation that is e.g. returned +// with a keyed range aggregation. +type AggregationBucketKeyedRangeItems struct { + Aggregations + + DocCountErrorUpperBound int64 //`json:"doc_count_error_upper_bound"` + SumOfOtherDocCount int64 //`json:"sum_other_doc_count"` + Buckets map[string]*AggregationBucketRangeItem //`json:"buckets"` + Meta map[string]interface{} // `json:"meta,omitempty"` +} + +// UnmarshalJSON decodes JSON data and initializes an AggregationBucketRangeItems structure. +func (a *AggregationBucketKeyedRangeItems) UnmarshalJSON(data []byte) error { + var aggs map[string]*json.RawMessage + if err := json.Unmarshal(data, &aggs); err != nil { + return err + } + if v, ok := aggs["doc_count_error_upper_bound"]; ok && v != nil { + json.Unmarshal(*v, &a.DocCountErrorUpperBound) + } + if v, ok := aggs["sum_other_doc_count"]; ok && v != nil { + json.Unmarshal(*v, &a.SumOfOtherDocCount) + } + if v, ok := aggs["buckets"]; ok && v != nil { + json.Unmarshal(*v, &a.Buckets) + } + if v, ok := aggs["meta"]; ok && v != nil { + json.Unmarshal(*v, &a.Meta) + } + a.Aggregations = aggs + return nil +} + +// AggregationBucketRangeItem is a single bucket of an AggregationBucketRangeItems structure. +type AggregationBucketRangeItem struct { + Aggregations + + Key string //`json:"key"` + DocCount int64 //`json:"doc_count"` + From *float64 //`json:"from"` + FromAsString string //`json:"from_as_string"` + To *float64 //`json:"to"` + ToAsString string //`json:"to_as_string"` +} + +// UnmarshalJSON decodes JSON data and initializes an AggregationBucketRangeItem structure. +func (a *AggregationBucketRangeItem) UnmarshalJSON(data []byte) error { + var aggs map[string]*json.RawMessage + if err := json.Unmarshal(data, &aggs); err != nil { + return err + } + if v, ok := aggs["key"]; ok && v != nil { + json.Unmarshal(*v, &a.Key) + } + if v, ok := aggs["doc_count"]; ok && v != nil { + json.Unmarshal(*v, &a.DocCount) + } + if v, ok := aggs["from"]; ok && v != nil { + json.Unmarshal(*v, &a.From) + } + if v, ok := aggs["from_as_string"]; ok && v != nil { + json.Unmarshal(*v, &a.FromAsString) + } + if v, ok := aggs["to"]; ok && v != nil { + json.Unmarshal(*v, &a.To) + } + if v, ok := aggs["to_as_string"]; ok && v != nil { + json.Unmarshal(*v, &a.ToAsString) + } + a.Aggregations = aggs + return nil +} + +// -- Bucket key items -- + +// AggregationBucketKeyItems is a bucket aggregation that is e.g. returned +// with a terms aggregation. +type AggregationBucketKeyItems struct { + Aggregations + + DocCountErrorUpperBound int64 //`json:"doc_count_error_upper_bound"` + SumOfOtherDocCount int64 //`json:"sum_other_doc_count"` + Buckets []*AggregationBucketKeyItem //`json:"buckets"` + Meta map[string]interface{} // `json:"meta,omitempty"` +} + +// UnmarshalJSON decodes JSON data and initializes an AggregationBucketKeyItems structure. +func (a *AggregationBucketKeyItems) UnmarshalJSON(data []byte) error { + var aggs map[string]*json.RawMessage + if err := json.Unmarshal(data, &aggs); err != nil { + return err + } + if v, ok := aggs["doc_count_error_upper_bound"]; ok && v != nil { + json.Unmarshal(*v, &a.DocCountErrorUpperBound) + } + if v, ok := aggs["sum_other_doc_count"]; ok && v != nil { + json.Unmarshal(*v, &a.SumOfOtherDocCount) + } + if v, ok := aggs["buckets"]; ok && v != nil { + json.Unmarshal(*v, &a.Buckets) + } + if v, ok := aggs["meta"]; ok && v != nil { + json.Unmarshal(*v, &a.Meta) + } + a.Aggregations = aggs + return nil +} + +// AggregationBucketKeyItem is a single bucket of an AggregationBucketKeyItems structure. +type AggregationBucketKeyItem struct { + Aggregations + + Key interface{} //`json:"key"` + KeyAsString *string //`json:"key_as_string"` + KeyNumber json.Number + DocCount int64 //`json:"doc_count"` +} + +// UnmarshalJSON decodes JSON data and initializes an AggregationBucketKeyItem structure. +func (a *AggregationBucketKeyItem) UnmarshalJSON(data []byte) error { + var aggs map[string]*json.RawMessage + dec := json.NewDecoder(bytes.NewReader(data)) + dec.UseNumber() + if err := dec.Decode(&aggs); err != nil { + return err + } + if v, ok := aggs["key"]; ok && v != nil { + json.Unmarshal(*v, &a.Key) + json.Unmarshal(*v, &a.KeyNumber) + } + if v, ok := aggs["key_as_string"]; ok && v != nil { + json.Unmarshal(*v, &a.KeyAsString) + } + if v, ok := aggs["doc_count"]; ok && v != nil { + json.Unmarshal(*v, &a.DocCount) + } + a.Aggregations = aggs + return nil +} + +// -- Bucket types for significant terms -- + +// AggregationBucketSignificantTerms is a bucket aggregation returned +// with a significant terms aggregation. +type AggregationBucketSignificantTerms struct { + Aggregations + + DocCount int64 //`json:"doc_count"` + Buckets []*AggregationBucketSignificantTerm //`json:"buckets"` + Meta map[string]interface{} // `json:"meta,omitempty"` +} + +// UnmarshalJSON decodes JSON data and initializes an AggregationBucketSignificantTerms structure. +func (a *AggregationBucketSignificantTerms) UnmarshalJSON(data []byte) error { + var aggs map[string]*json.RawMessage + if err := json.Unmarshal(data, &aggs); err != nil { + return err + } + if v, ok := aggs["doc_count"]; ok && v != nil { + json.Unmarshal(*v, &a.DocCount) + } + if v, ok := aggs["buckets"]; ok && v != nil { + json.Unmarshal(*v, &a.Buckets) + } + if v, ok := aggs["meta"]; ok && v != nil { + json.Unmarshal(*v, &a.Meta) + } + a.Aggregations = aggs + return nil +} + +// AggregationBucketSignificantTerm is a single bucket of an AggregationBucketSignificantTerms structure. +type AggregationBucketSignificantTerm struct { + Aggregations + + Key string //`json:"key"` + DocCount int64 //`json:"doc_count"` + BgCount int64 //`json:"bg_count"` + Score float64 //`json:"score"` +} + +// UnmarshalJSON decodes JSON data and initializes an AggregationBucketSignificantTerm structure. +func (a *AggregationBucketSignificantTerm) UnmarshalJSON(data []byte) error { + var aggs map[string]*json.RawMessage + if err := json.Unmarshal(data, &aggs); err != nil { + return err + } + if v, ok := aggs["key"]; ok && v != nil { + json.Unmarshal(*v, &a.Key) + } + if v, ok := aggs["doc_count"]; ok && v != nil { + json.Unmarshal(*v, &a.DocCount) + } + if v, ok := aggs["bg_count"]; ok && v != nil { + json.Unmarshal(*v, &a.BgCount) + } + if v, ok := aggs["score"]; ok && v != nil { + json.Unmarshal(*v, &a.Score) + } + a.Aggregations = aggs + return nil +} + +// -- Bucket filters -- + +// AggregationBucketFilters is a multi-bucket aggregation that is returned +// with a filters aggregation. +type AggregationBucketFilters struct { + Aggregations + + Buckets []*AggregationBucketKeyItem //`json:"buckets"` + NamedBuckets map[string]*AggregationBucketKeyItem //`json:"buckets"` + Meta map[string]interface{} // `json:"meta,omitempty"` +} + +// UnmarshalJSON decodes JSON data and initializes an AggregationBucketFilters structure. +func (a *AggregationBucketFilters) UnmarshalJSON(data []byte) error { + var aggs map[string]*json.RawMessage + if err := json.Unmarshal(data, &aggs); err != nil { + return err + } + if v, ok := aggs["buckets"]; ok && v != nil { + json.Unmarshal(*v, &a.Buckets) + json.Unmarshal(*v, &a.NamedBuckets) + } + if v, ok := aggs["meta"]; ok && v != nil { + json.Unmarshal(*v, &a.Meta) + } + a.Aggregations = aggs + return nil +} + +// -- Bucket AdjacencyMatrix -- + +// AggregationBucketAdjacencyMatrix is a multi-bucket aggregation that is returned +// with a AdjacencyMatrix aggregation. +type AggregationBucketAdjacencyMatrix struct { + Aggregations + + Buckets []*AggregationBucketKeyItem //`json:"buckets"` + Meta map[string]interface{} // `json:"meta,omitempty"` +} + +// UnmarshalJSON decodes JSON data and initializes an AggregationBucketAdjacencyMatrix structure. +func (a *AggregationBucketAdjacencyMatrix) UnmarshalJSON(data []byte) error { + var aggs map[string]*json.RawMessage + if err := json.Unmarshal(data, &aggs); err != nil { + return err + } + if v, ok := aggs["buckets"]; ok && v != nil { + json.Unmarshal(*v, &a.Buckets) + } + if v, ok := aggs["meta"]; ok && v != nil { + json.Unmarshal(*v, &a.Meta) + } + a.Aggregations = aggs + return nil +} + +// -- Bucket histogram items -- + +// AggregationBucketHistogramItems is a bucket aggregation that is returned +// with a date histogram aggregation. +type AggregationBucketHistogramItems struct { + Aggregations + + Buckets []*AggregationBucketHistogramItem //`json:"buckets"` + Meta map[string]interface{} // `json:"meta,omitempty"` +} + +// UnmarshalJSON decodes JSON data and initializes an AggregationBucketHistogramItems structure. +func (a *AggregationBucketHistogramItems) UnmarshalJSON(data []byte) error { + var aggs map[string]*json.RawMessage + if err := json.Unmarshal(data, &aggs); err != nil { + return err + } + if v, ok := aggs["buckets"]; ok && v != nil { + json.Unmarshal(*v, &a.Buckets) + } + if v, ok := aggs["meta"]; ok && v != nil { + json.Unmarshal(*v, &a.Meta) + } + a.Aggregations = aggs + return nil +} + +// AggregationBucketHistogramItem is a single bucket of an AggregationBucketHistogramItems structure. +type AggregationBucketHistogramItem struct { + Aggregations + + Key float64 //`json:"key"` + KeyAsString *string //`json:"key_as_string"` + DocCount int64 //`json:"doc_count"` +} + +// UnmarshalJSON decodes JSON data and initializes an AggregationBucketHistogramItem structure. +func (a *AggregationBucketHistogramItem) UnmarshalJSON(data []byte) error { + var aggs map[string]*json.RawMessage + if err := json.Unmarshal(data, &aggs); err != nil { + return err + } + if v, ok := aggs["key"]; ok && v != nil { + json.Unmarshal(*v, &a.Key) + } + if v, ok := aggs["key_as_string"]; ok && v != nil { + json.Unmarshal(*v, &a.KeyAsString) + } + if v, ok := aggs["doc_count"]; ok && v != nil { + json.Unmarshal(*v, &a.DocCount) + } + a.Aggregations = aggs + return nil +} + +// -- Pipeline simple value -- + +// AggregationPipelineSimpleValue is a simple value, returned e.g. by a +// MovAvg aggregation. +type AggregationPipelineSimpleValue struct { + Aggregations + + Value *float64 // `json:"value"` + ValueAsString string // `json:"value_as_string"` + Meta map[string]interface{} // `json:"meta,omitempty"` +} + +// UnmarshalJSON decodes JSON data and initializes an AggregationPipelineSimpleValue structure. +func (a *AggregationPipelineSimpleValue) UnmarshalJSON(data []byte) error { + var aggs map[string]*json.RawMessage + if err := json.Unmarshal(data, &aggs); err != nil { + return err + } + if v, ok := aggs["value"]; ok && v != nil { + json.Unmarshal(*v, &a.Value) + } + if v, ok := aggs["value_as_string"]; ok && v != nil { + json.Unmarshal(*v, &a.ValueAsString) + } + if v, ok := aggs["meta"]; ok && v != nil { + json.Unmarshal(*v, &a.Meta) + } + a.Aggregations = aggs + return nil +} + +// -- Pipeline simple value -- + +// AggregationPipelineBucketMetricValue is a value returned e.g. by a +// MaxBucket aggregation. +type AggregationPipelineBucketMetricValue struct { + Aggregations + + Keys []interface{} // `json:"keys"` + Value *float64 // `json:"value"` + ValueAsString string // `json:"value_as_string"` + Meta map[string]interface{} // `json:"meta,omitempty"` +} + +// UnmarshalJSON decodes JSON data and initializes an AggregationPipelineBucketMetricValue structure. +func (a *AggregationPipelineBucketMetricValue) UnmarshalJSON(data []byte) error { + var aggs map[string]*json.RawMessage + if err := json.Unmarshal(data, &aggs); err != nil { + return err + } + if v, ok := aggs["keys"]; ok && v != nil { + json.Unmarshal(*v, &a.Keys) + } + if v, ok := aggs["value"]; ok && v != nil { + json.Unmarshal(*v, &a.Value) + } + if v, ok := aggs["value_as_string"]; ok && v != nil { + json.Unmarshal(*v, &a.ValueAsString) + } + if v, ok := aggs["meta"]; ok && v != nil { + json.Unmarshal(*v, &a.Meta) + } + a.Aggregations = aggs + return nil +} + +// -- Pipeline derivative -- + +// AggregationPipelineDerivative is the value returned by a +// Derivative aggregation. +type AggregationPipelineDerivative struct { + Aggregations + + Value *float64 // `json:"value"` + ValueAsString string // `json:"value_as_string"` + NormalizedValue *float64 // `json:"normalized_value"` + NormalizedValueAsString string // `json:"normalized_value_as_string"` + Meta map[string]interface{} // `json:"meta,omitempty"` +} + +// UnmarshalJSON decodes JSON data and initializes an AggregationPipelineDerivative structure. +func (a *AggregationPipelineDerivative) UnmarshalJSON(data []byte) error { + var aggs map[string]*json.RawMessage + if err := json.Unmarshal(data, &aggs); err != nil { + return err + } + if v, ok := aggs["value"]; ok && v != nil { + json.Unmarshal(*v, &a.Value) + } + if v, ok := aggs["value_as_string"]; ok && v != nil { + json.Unmarshal(*v, &a.ValueAsString) + } + if v, ok := aggs["normalized_value"]; ok && v != nil { + json.Unmarshal(*v, &a.NormalizedValue) + } + if v, ok := aggs["normalized_value_as_string"]; ok && v != nil { + json.Unmarshal(*v, &a.NormalizedValueAsString) + } + if v, ok := aggs["meta"]; ok && v != nil { + json.Unmarshal(*v, &a.Meta) + } + a.Aggregations = aggs + return nil +} + +// -- Pipeline stats metric -- + +// AggregationPipelineStatsMetric is a simple value, returned e.g. by a +// MovAvg aggregation. +type AggregationPipelineStatsMetric struct { + Aggregations + + Count int64 // `json:"count"` + CountAsString string // `json:"count_as_string"` + Min *float64 // `json:"min"` + MinAsString string // `json:"min_as_string"` + Max *float64 // `json:"max"` + MaxAsString string // `json:"max_as_string"` + Avg *float64 // `json:"avg"` + AvgAsString string // `json:"avg_as_string"` + Sum *float64 // `json:"sum"` + SumAsString string // `json:"sum_as_string"` + + Meta map[string]interface{} // `json:"meta,omitempty"` +} + +// UnmarshalJSON decodes JSON data and initializes an AggregationPipelineStatsMetric structure. +func (a *AggregationPipelineStatsMetric) UnmarshalJSON(data []byte) error { + var aggs map[string]*json.RawMessage + if err := json.Unmarshal(data, &aggs); err != nil { + return err + } + if v, ok := aggs["count"]; ok && v != nil { + json.Unmarshal(*v, &a.Count) + } + if v, ok := aggs["count_as_string"]; ok && v != nil { + json.Unmarshal(*v, &a.CountAsString) + } + if v, ok := aggs["min"]; ok && v != nil { + json.Unmarshal(*v, &a.Min) + } + if v, ok := aggs["min_as_string"]; ok && v != nil { + json.Unmarshal(*v, &a.MinAsString) + } + if v, ok := aggs["max"]; ok && v != nil { + json.Unmarshal(*v, &a.Max) + } + if v, ok := aggs["max_as_string"]; ok && v != nil { + json.Unmarshal(*v, &a.MaxAsString) + } + if v, ok := aggs["avg"]; ok && v != nil { + json.Unmarshal(*v, &a.Avg) + } + if v, ok := aggs["avg_as_string"]; ok && v != nil { + json.Unmarshal(*v, &a.AvgAsString) + } + if v, ok := aggs["sum"]; ok && v != nil { + json.Unmarshal(*v, &a.Sum) + } + if v, ok := aggs["sum_as_string"]; ok && v != nil { + json.Unmarshal(*v, &a.SumAsString) + } + if v, ok := aggs["meta"]; ok && v != nil { + json.Unmarshal(*v, &a.Meta) + } + a.Aggregations = aggs + return nil +} + +// -- Pipeline percentiles + +// AggregationPipelinePercentilesMetric is the value returned by a pipeline +// percentiles Metric aggregation +type AggregationPipelinePercentilesMetric struct { + Aggregations + + Values map[string]float64 // `json:"values"` + Meta map[string]interface{} // `json:"meta,omitempty"` +} + +// UnmarshalJSON decodes JSON data and initializes an AggregationPipelinePercentilesMetric structure. +func (a *AggregationPipelinePercentilesMetric) UnmarshalJSON(data []byte) error { + var aggs map[string]*json.RawMessage + if err := json.Unmarshal(data, &aggs); err != nil { + return err + } + if v, ok := aggs["values"]; ok && v != nil { + json.Unmarshal(*v, &a.Values) + } + if v, ok := aggs["meta"]; ok && v != nil { + json.Unmarshal(*v, &a.Meta) + } + a.Aggregations = aggs + return nil +} + +// -- Composite key items -- + +// AggregationBucketCompositeItems implements the response structure +// for a bucket aggregation of type composite. +type AggregationBucketCompositeItems struct { + Aggregations + + Buckets []*AggregationBucketCompositeItem //`json:"buckets"` + Meta map[string]interface{} // `json:"meta,omitempty"` +} + +// UnmarshalJSON decodes JSON data and initializes an AggregationBucketCompositeItems structure. +func (a *AggregationBucketCompositeItems) UnmarshalJSON(data []byte) error { + var aggs map[string]*json.RawMessage + if err := json.Unmarshal(data, &aggs); err != nil { + return err + } + if v, ok := aggs["buckets"]; ok && v != nil { + json.Unmarshal(*v, &a.Buckets) + } + if v, ok := aggs["meta"]; ok && v != nil { + json.Unmarshal(*v, &a.Meta) + } + a.Aggregations = aggs + return nil +} + +// AggregationBucketCompositeItem is a single bucket of an AggregationBucketCompositeItems structure. +type AggregationBucketCompositeItem struct { + Aggregations + + Key map[string]interface{} //`json:"key"` + DocCount int64 //`json:"doc_count"` +} + +// UnmarshalJSON decodes JSON data and initializes an AggregationBucketCompositeItem structure. +func (a *AggregationBucketCompositeItem) UnmarshalJSON(data []byte) error { + var aggs map[string]*json.RawMessage + dec := json.NewDecoder(bytes.NewReader(data)) + dec.UseNumber() + if err := dec.Decode(&aggs); err != nil { + return err + } + if v, ok := aggs["key"]; ok && v != nil { + json.Unmarshal(*v, &a.Key) + } + if v, ok := aggs["doc_count"]; ok && v != nil { + json.Unmarshal(*v, &a.DocCount) + } + a.Aggregations = aggs + return nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_adjacency_matrix.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_adjacency_matrix.go new file mode 100644 index 0000000..24ccee2 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_adjacency_matrix.go @@ -0,0 +1,96 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// AdjacencyMatrixAggregation returning a form of adjacency matrix. +// The request provides a collection of named filter expressions, +// similar to the filters aggregation request. Each bucket in the +// response represents a non-empty cell in the matrix of intersecting filters. +// +// For details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-adjacency-matrix-aggregation.html +type AdjacencyMatrixAggregation struct { + filters map[string]Query + subAggregations map[string]Aggregation + meta map[string]interface{} +} + +// NewAdjacencyMatrixAggregation initializes a new AdjacencyMatrixAggregation. +func NewAdjacencyMatrixAggregation() *AdjacencyMatrixAggregation { + return &AdjacencyMatrixAggregation{ + filters: make(map[string]Query), + subAggregations: make(map[string]Aggregation), + } +} + +// Filters adds the filter +func (a *AdjacencyMatrixAggregation) Filters(name string, filter Query) *AdjacencyMatrixAggregation { + a.filters[name] = filter + return a +} + +// SubAggregation adds a sub-aggregation to this aggregation. +func (a *AdjacencyMatrixAggregation) SubAggregation(name string, subAggregation Aggregation) *AdjacencyMatrixAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *AdjacencyMatrixAggregation) Meta(metaData map[string]interface{}) *AdjacencyMatrixAggregation { + a.meta = metaData + return a +} + +// Source returns the a JSON-serializable interface. +func (a *AdjacencyMatrixAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs" : { + // "interactions" : { + // "adjacency_matrix" : { + // "filters" : { + // "grpA" : { "terms" : { "accounts" : ["hillary", "sidney"] }}, + // "grpB" : { "terms" : { "accounts" : ["donald", "mitt"] }}, + // "grpC" : { "terms" : { "accounts" : ["vladimir", "nigel"] }} + // } + // } + // } + // } + // This method returns only the (outer) { "adjacency_matrix" : {} } part. + + source := make(map[string]interface{}) + adjacencyMatrix := make(map[string]interface{}) + source["adjacency_matrix"] = adjacencyMatrix + + dict := make(map[string]interface{}) + for key, filter := range a.filters { + src, err := filter.Source() + if err != nil { + return nil, err + } + dict[key] = src + } + adjacencyMatrix["filters"] = dict + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_adjacency_matrix_test.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_adjacency_matrix_test.go new file mode 100644 index 0000000..615a87f --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_adjacency_matrix_test.go @@ -0,0 +1,71 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestAdjacencyMatrixAggregationFilters(t *testing.T) { + f1 := NewTermQuery("accounts", "sydney") + f2 := NewTermQuery("accounts", "mitt") + f3 := NewTermQuery("accounts", "nigel") + agg := NewAdjacencyMatrixAggregation().Filters("grpA", f1).Filters("grpB", f2).Filters("grpC", f3) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"adjacency_matrix":{"filters":{"grpA":{"term":{"accounts":"sydney"}},"grpB":{"term":{"accounts":"mitt"}},"grpC":{"term":{"accounts":"nigel"}}}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestAdjacencyMatrixAggregationWithSubAggregation(t *testing.T) { + avgPriceAgg := NewAvgAggregation().Field("price") + f1 := NewTermQuery("accounts", "sydney") + f2 := NewTermQuery("accounts", "mitt") + f3 := NewTermQuery("accounts", "nigel") + agg := NewAdjacencyMatrixAggregation().SubAggregation("avg_price", avgPriceAgg).Filters("grpA", f1).Filters("grpB", f2).Filters("grpC", f3) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"adjacency_matrix":{"filters":{"grpA":{"term":{"accounts":"sydney"}},"grpB":{"term":{"accounts":"mitt"}},"grpC":{"term":{"accounts":"nigel"}}}},"aggregations":{"avg_price":{"avg":{"field":"price"}}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestAdjacencyMatrixAggregationWithMetaData(t *testing.T) { + f1 := NewTermQuery("accounts", "sydney") + f2 := NewTermQuery("accounts", "mitt") + f3 := NewTermQuery("accounts", "nigel") + agg := NewAdjacencyMatrixAggregation().Filters("grpA", f1).Filters("grpB", f2).Filters("grpC", f3).Meta(map[string]interface{}{"name": "Oliver"}) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"adjacency_matrix":{"filters":{"grpA":{"term":{"accounts":"sydney"}},"grpB":{"term":{"accounts":"mitt"}},"grpC":{"term":{"accounts":"nigel"}}}},"meta":{"name":"Oliver"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_children.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_children.go new file mode 100644 index 0000000..1a948c3 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_children.go @@ -0,0 +1,76 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// ChildrenAggregation is a special single bucket aggregation that enables +// aggregating from buckets on parent document types to buckets on child documents. +// It is available from 1.4.0.Beta1 upwards. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-children-aggregation.html +type ChildrenAggregation struct { + typ string + subAggregations map[string]Aggregation + meta map[string]interface{} +} + +func NewChildrenAggregation() *ChildrenAggregation { + return &ChildrenAggregation{ + subAggregations: make(map[string]Aggregation), + } +} + +func (a *ChildrenAggregation) Type(typ string) *ChildrenAggregation { + a.typ = typ + return a +} + +func (a *ChildrenAggregation) SubAggregation(name string, subAggregation Aggregation) *ChildrenAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *ChildrenAggregation) Meta(metaData map[string]interface{}) *ChildrenAggregation { + a.meta = metaData + return a +} + +func (a *ChildrenAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs" : { + // "to-answers" : { + // "children": { + // "type" : "answer" + // } + // } + // } + // } + // This method returns only the { "type" : ... } part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["children"] = opts + opts["type"] = a.typ + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_children_test.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_children_test.go new file mode 100644 index 0000000..0486079 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_children_test.go @@ -0,0 +1,46 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestChildrenAggregation(t *testing.T) { + agg := NewChildrenAggregation().Type("answer") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"children":{"type":"answer"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestChildrenAggregationWithSubAggregation(t *testing.T) { + subAgg := NewTermsAggregation().Field("owner.display_name").Size(10) + agg := NewChildrenAggregation().Type("answer") + agg = agg.SubAggregation("top-names", subAgg) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"aggregations":{"top-names":{"terms":{"field":"owner.display_name","size":10}}},"children":{"type":"answer"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_composite.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_composite.go new file mode 100644 index 0000000..98a48e2 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_composite.go @@ -0,0 +1,498 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// CompositeAggregation is a multi-bucket values source based aggregation +// that can be used to calculate unique composite values from source documents. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-composite-aggregation.html +// for details. +type CompositeAggregation struct { + after map[string]interface{} + size *int + sources []CompositeAggregationValuesSource + subAggregations map[string]Aggregation + meta map[string]interface{} +} + +// NewCompositeAggregation creates a new CompositeAggregation. +func NewCompositeAggregation() *CompositeAggregation { + return &CompositeAggregation{ + sources: make([]CompositeAggregationValuesSource, 0), + subAggregations: make(map[string]Aggregation), + } +} + +// Size represents the number of composite buckets to return. +// Defaults to 10 as of Elasticsearch 6.1. +func (a *CompositeAggregation) Size(size int) *CompositeAggregation { + a.size = &size + return a +} + +// AggregateAfter sets the values that indicate which composite bucket this +// request should "aggregate after". +func (a *CompositeAggregation) AggregateAfter(after map[string]interface{}) *CompositeAggregation { + a.after = after + return a +} + +// Sources specifies the list of CompositeAggregationValuesSource instances to +// use in the aggregation. +func (a *CompositeAggregation) Sources(sources ...CompositeAggregationValuesSource) *CompositeAggregation { + a.sources = append(a.sources, sources...) + return a +} + +// SubAggregations of this aggregation. +func (a *CompositeAggregation) SubAggregation(name string, subAggregation Aggregation) *CompositeAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *CompositeAggregation) Meta(metaData map[string]interface{}) *CompositeAggregation { + a.meta = metaData + return a +} + +// Source returns the serializable JSON for this aggregation. +func (a *CompositeAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs" : { + // "my_composite_agg" : { + // "composite" : { + // "sources": [ + // {"my_term": { "terms": { "field": "product" }}}, + // {"my_histo": { "histogram": { "field": "price", "interval": 5 }}}, + // {"my_date": { "date_histogram": { "field": "timestamp", "interval": "1d" }}}, + // ], + // "size" : 10, + // "after" : ["a", 2, "c"] + // } + // } + // } + // } + // + // This method returns only the { "histogram" : { ... } } part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["composite"] = opts + + sources := make([]interface{}, len(a.sources)) + for i, s := range a.sources { + src, err := s.Source() + if err != nil { + return nil, err + } + sources[i] = src + } + opts["sources"] = sources + + if a.size != nil { + opts["size"] = *a.size + } + + if a.after != nil { + opts["after"] = a.after + } + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} + +// -- Generic interface for CompositeAggregationValues -- + +// CompositeAggregationValuesSource specifies the interface that +// all implementations for CompositeAggregation's Sources method +// need to implement. +// +// The different implementations are described in +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-composite-aggregation.html#_values_source_2. +type CompositeAggregationValuesSource interface { + Source() (interface{}, error) +} + +// -- CompositeAggregationTermsValuesSource -- + +// CompositeAggregationTermsValuesSource is a source for the CompositeAggregation that handles terms +// it works very similar to a terms aggregation with slightly different syntax +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-composite-aggregation.html#_terms +// for details. +type CompositeAggregationTermsValuesSource struct { + name string + field string + script *Script + valueType string + missing interface{} + order string +} + +// NewCompositeAggregationTermsValuesSource creates and initializes +// a new CompositeAggregationTermsValuesSource. +func NewCompositeAggregationTermsValuesSource(name string) *CompositeAggregationTermsValuesSource { + return &CompositeAggregationTermsValuesSource{ + name: name, + } +} + +// Field to use for this source. +func (a *CompositeAggregationTermsValuesSource) Field(field string) *CompositeAggregationTermsValuesSource { + a.field = field + return a +} + +// Script to use for this source. +func (a *CompositeAggregationTermsValuesSource) Script(script *Script) *CompositeAggregationTermsValuesSource { + a.script = script + return a +} + +// ValueType specifies the type of values produced by this source, +// e.g. "string" or "date". +func (a *CompositeAggregationTermsValuesSource) ValueType(valueType string) *CompositeAggregationTermsValuesSource { + a.valueType = valueType + return a +} + +// Order specifies the order in the values produced by this source. +// It can be either "asc" or "desc". +func (a *CompositeAggregationTermsValuesSource) Order(order string) *CompositeAggregationTermsValuesSource { + a.order = order + return a +} + +// Asc ensures the order of the values produced is ascending. +func (a *CompositeAggregationTermsValuesSource) Asc() *CompositeAggregationTermsValuesSource { + a.order = "asc" + return a +} + +// Desc ensures the order of the values produced is descending. +func (a *CompositeAggregationTermsValuesSource) Desc() *CompositeAggregationTermsValuesSource { + a.order = "desc" + return a +} + +// Missing specifies the value to use when the source finds a missing +// value in a document. +func (a *CompositeAggregationTermsValuesSource) Missing(missing interface{}) *CompositeAggregationTermsValuesSource { + a.missing = missing + return a +} + +// Source returns the serializable JSON for this values source. +func (a *CompositeAggregationTermsValuesSource) Source() (interface{}, error) { + source := make(map[string]interface{}) + name := make(map[string]interface{}) + source[a.name] = name + values := make(map[string]interface{}) + name["terms"] = values + + // field + if a.field != "" { + values["field"] = a.field + } + + // script + if a.script != nil { + src, err := a.script.Source() + if err != nil { + return nil, err + } + values["script"] = src + } + + // missing + if a.missing != nil { + values["missing"] = a.missing + } + + // value_type + if a.valueType != "" { + values["value_type"] = a.valueType + } + + // order + if a.order != "" { + values["order"] = a.order + } + + return source, nil + +} + +// -- CompositeAggregationHistogramValuesSource -- + +// CompositeAggregationHistogramValuesSource is a source for the CompositeAggregation that handles histograms +// it works very similar to a terms histogram with slightly different syntax +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-composite-aggregation.html#_histogram +// for details. +type CompositeAggregationHistogramValuesSource struct { + name string + field string + script *Script + valueType string + missing interface{} + order string + interval float64 +} + +// NewCompositeAggregationHistogramValuesSource creates and initializes +// a new CompositeAggregationHistogramValuesSource. +func NewCompositeAggregationHistogramValuesSource(name string, interval float64) *CompositeAggregationHistogramValuesSource { + return &CompositeAggregationHistogramValuesSource{ + name: name, + interval: interval, + } +} + +// Field to use for this source. +func (a *CompositeAggregationHistogramValuesSource) Field(field string) *CompositeAggregationHistogramValuesSource { + a.field = field + return a +} + +// Script to use for this source. +func (a *CompositeAggregationHistogramValuesSource) Script(script *Script) *CompositeAggregationHistogramValuesSource { + a.script = script + return a +} + +// ValueType specifies the type of values produced by this source, +// e.g. "string" or "date". +func (a *CompositeAggregationHistogramValuesSource) ValueType(valueType string) *CompositeAggregationHistogramValuesSource { + a.valueType = valueType + return a +} + +// Missing specifies the value to use when the source finds a missing +// value in a document. +func (a *CompositeAggregationHistogramValuesSource) Missing(missing interface{}) *CompositeAggregationHistogramValuesSource { + a.missing = missing + return a +} + +// Order specifies the order in the values produced by this source. +// It can be either "asc" or "desc". +func (a *CompositeAggregationHistogramValuesSource) Order(order string) *CompositeAggregationHistogramValuesSource { + a.order = order + return a +} + +// Asc ensures the order of the values produced is ascending. +func (a *CompositeAggregationHistogramValuesSource) Asc() *CompositeAggregationHistogramValuesSource { + a.order = "asc" + return a +} + +// Desc ensures the order of the values produced is descending. +func (a *CompositeAggregationHistogramValuesSource) Desc() *CompositeAggregationHistogramValuesSource { + a.order = "desc" + return a +} + +// Interval specifies the interval to use. +func (a *CompositeAggregationHistogramValuesSource) Interval(interval float64) *CompositeAggregationHistogramValuesSource { + a.interval = interval + return a +} + +// Source returns the serializable JSON for this values source. +func (a *CompositeAggregationHistogramValuesSource) Source() (interface{}, error) { + source := make(map[string]interface{}) + name := make(map[string]interface{}) + source[a.name] = name + values := make(map[string]interface{}) + name["histogram"] = values + + // field + if a.field != "" { + values["field"] = a.field + } + + // script + if a.script != nil { + src, err := a.script.Source() + if err != nil { + return nil, err + } + values["script"] = src + } + + // missing + if a.missing != nil { + values["missing"] = a.missing + } + + // value_type + if a.valueType != "" { + values["value_type"] = a.valueType + } + + // order + if a.order != "" { + values["order"] = a.order + } + + // Histogram-related properties + values["interval"] = a.interval + + return source, nil + +} + +// -- CompositeAggregationDateHistogramValuesSource -- + +// CompositeAggregationDateHistogramValuesSource is a source for the CompositeAggregation that handles date histograms +// it works very similar to a date histogram aggregation with slightly different syntax +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-composite-aggregation.html#_date_histogram +// for details. +type CompositeAggregationDateHistogramValuesSource struct { + name string + field string + script *Script + valueType string + missing interface{} + order string + interval interface{} + timeZone string +} + +// NewCompositeAggregationDateHistogramValuesSource creates and initializes +// a new CompositeAggregationDateHistogramValuesSource. +func NewCompositeAggregationDateHistogramValuesSource(name string, interval interface{}) *CompositeAggregationDateHistogramValuesSource { + return &CompositeAggregationDateHistogramValuesSource{ + name: name, + interval: interval, + } +} + +// Field to use for this source. +func (a *CompositeAggregationDateHistogramValuesSource) Field(field string) *CompositeAggregationDateHistogramValuesSource { + a.field = field + return a +} + +// Script to use for this source. +func (a *CompositeAggregationDateHistogramValuesSource) Script(script *Script) *CompositeAggregationDateHistogramValuesSource { + a.script = script + return a +} + +// ValueType specifies the type of values produced by this source, +// e.g. "string" or "date". +func (a *CompositeAggregationDateHistogramValuesSource) ValueType(valueType string) *CompositeAggregationDateHistogramValuesSource { + a.valueType = valueType + return a +} + +// Missing specifies the value to use when the source finds a missing +// value in a document. +func (a *CompositeAggregationDateHistogramValuesSource) Missing(missing interface{}) *CompositeAggregationDateHistogramValuesSource { + a.missing = missing + return a +} + +// Order specifies the order in the values produced by this source. +// It can be either "asc" or "desc". +func (a *CompositeAggregationDateHistogramValuesSource) Order(order string) *CompositeAggregationDateHistogramValuesSource { + a.order = order + return a +} + +// Asc ensures the order of the values produced is ascending. +func (a *CompositeAggregationDateHistogramValuesSource) Asc() *CompositeAggregationDateHistogramValuesSource { + a.order = "asc" + return a +} + +// Desc ensures the order of the values produced is descending. +func (a *CompositeAggregationDateHistogramValuesSource) Desc() *CompositeAggregationDateHistogramValuesSource { + a.order = "desc" + return a +} + +// Interval to use for the date histogram, e.g. "1d" or a numeric value like "60". +func (a *CompositeAggregationDateHistogramValuesSource) Interval(interval interface{}) *CompositeAggregationDateHistogramValuesSource { + a.interval = interval + return a +} + +// TimeZone to use for the dates. +func (a *CompositeAggregationDateHistogramValuesSource) TimeZone(timeZone string) *CompositeAggregationDateHistogramValuesSource { + a.timeZone = timeZone + return a +} + +// Source returns the serializable JSON for this values source. +func (a *CompositeAggregationDateHistogramValuesSource) Source() (interface{}, error) { + source := make(map[string]interface{}) + name := make(map[string]interface{}) + source[a.name] = name + values := make(map[string]interface{}) + name["date_histogram"] = values + + // field + if a.field != "" { + values["field"] = a.field + } + + // script + if a.script != nil { + src, err := a.script.Source() + if err != nil { + return nil, err + } + values["script"] = src + } + + // missing + if a.missing != nil { + values["missing"] = a.missing + } + + // value_type + if a.valueType != "" { + values["value_type"] = a.valueType + } + + // order + if a.order != "" { + values["order"] = a.order + } + + // DateHistogram-related properties + values["interval"] = a.interval + + // timeZone + if a.timeZone != "" { + values["time_zone"] = a.timeZone + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_composite_test.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_composite_test.go new file mode 100644 index 0000000..91d84db --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_composite_test.go @@ -0,0 +1,92 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestCompositeAggregation(t *testing.T) { + agg := NewCompositeAggregation(). + Sources( + NewCompositeAggregationTermsValuesSource("my_terms").Field("a_term").Missing("N/A").Order("asc"), + NewCompositeAggregationHistogramValuesSource("my_histogram", 5).Field("price").Asc(), + NewCompositeAggregationDateHistogramValuesSource("my_date_histogram", "1d").Field("purchase_date").Desc(), + ). + Size(10). + AggregateAfter(map[string]interface{}{ + "my_terms": "1", + "my_histogram": 2, + "my_date_histogram": "3", + }) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"composite":{"after":{"my_date_histogram":"3","my_histogram":2,"my_terms":"1"},"size":10,"sources":[{"my_terms":{"terms":{"field":"a_term","missing":"N/A","order":"asc"}}},{"my_histogram":{"histogram":{"field":"price","interval":5,"order":"asc"}}},{"my_date_histogram":{"date_histogram":{"field":"purchase_date","interval":"1d","order":"desc"}}}]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestCompositeAggregationTermsValuesSource(t *testing.T) { + in := NewCompositeAggregationTermsValuesSource("products"). + Script(NewScript("doc['product'].value").Lang("painless")) + src, err := in.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"products":{"terms":{"script":{"lang":"painless","source":"doc['product'].value"}}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestCompositeAggregationHistogramValuesSource(t *testing.T) { + in := NewCompositeAggregationHistogramValuesSource("histo", 5). + Field("price") + src, err := in.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"histo":{"histogram":{"field":"price","interval":5}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestCompositeAggregationDateHistogramValuesSource(t *testing.T) { + in := NewCompositeAggregationDateHistogramValuesSource("date", "1d"). + Field("timestamp") + src, err := in.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"date":{"date_histogram":{"field":"timestamp","interval":"1d"}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_count_thresholds.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_count_thresholds.go new file mode 100644 index 0000000..53efdaf --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_count_thresholds.go @@ -0,0 +1,13 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// BucketCountThresholds is used in e.g. terms and significant text aggregations. +type BucketCountThresholds struct { + MinDocCount *int64 + ShardMinDocCount *int64 + RequiredSize *int + ShardSize *int +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_date_histogram.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_date_histogram.go new file mode 100644 index 0000000..881da22 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_date_histogram.go @@ -0,0 +1,285 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// DateHistogramAggregation is a multi-bucket aggregation similar to the +// histogram except it can only be applied on date values. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-datehistogram-aggregation.html +type DateHistogramAggregation struct { + field string + script *Script + missing interface{} + subAggregations map[string]Aggregation + meta map[string]interface{} + + interval string + order string + orderAsc bool + minDocCount *int64 + extendedBoundsMin interface{} + extendedBoundsMax interface{} + timeZone string + format string + offset string +} + +// NewDateHistogramAggregation creates a new DateHistogramAggregation. +func NewDateHistogramAggregation() *DateHistogramAggregation { + return &DateHistogramAggregation{ + subAggregations: make(map[string]Aggregation), + } +} + +// Field on which the aggregation is processed. +func (a *DateHistogramAggregation) Field(field string) *DateHistogramAggregation { + a.field = field + return a +} + +func (a *DateHistogramAggregation) Script(script *Script) *DateHistogramAggregation { + a.script = script + return a +} + +// Missing configures the value to use when documents miss a value. +func (a *DateHistogramAggregation) Missing(missing interface{}) *DateHistogramAggregation { + a.missing = missing + return a +} + +func (a *DateHistogramAggregation) SubAggregation(name string, subAggregation Aggregation) *DateHistogramAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *DateHistogramAggregation) Meta(metaData map[string]interface{}) *DateHistogramAggregation { + a.meta = metaData + return a +} + +// Interval by which the aggregation gets processed. +// Allowed values are: "year", "quarter", "month", "week", "day", +// "hour", "minute". It also supports time settings like "1.5h" +// (up to "w" for weeks). +func (a *DateHistogramAggregation) Interval(interval string) *DateHistogramAggregation { + a.interval = interval + return a +} + +// Order specifies the sort order. Valid values for order are: +// "_key", "_count", a sub-aggregation name, or a sub-aggregation name +// with a metric. +func (a *DateHistogramAggregation) Order(order string, asc bool) *DateHistogramAggregation { + a.order = order + a.orderAsc = asc + return a +} + +func (a *DateHistogramAggregation) OrderByCount(asc bool) *DateHistogramAggregation { + // "order" : { "_count" : "asc" } + a.order = "_count" + a.orderAsc = asc + return a +} + +func (a *DateHistogramAggregation) OrderByCountAsc() *DateHistogramAggregation { + return a.OrderByCount(true) +} + +func (a *DateHistogramAggregation) OrderByCountDesc() *DateHistogramAggregation { + return a.OrderByCount(false) +} + +func (a *DateHistogramAggregation) OrderByKey(asc bool) *DateHistogramAggregation { + // "order" : { "_key" : "asc" } + a.order = "_key" + a.orderAsc = asc + return a +} + +func (a *DateHistogramAggregation) OrderByKeyAsc() *DateHistogramAggregation { + return a.OrderByKey(true) +} + +func (a *DateHistogramAggregation) OrderByKeyDesc() *DateHistogramAggregation { + return a.OrderByKey(false) +} + +// OrderByAggregation creates a bucket ordering strategy which sorts buckets +// based on a single-valued calc get. +func (a *DateHistogramAggregation) OrderByAggregation(aggName string, asc bool) *DateHistogramAggregation { + // { + // "aggs" : { + // "genders" : { + // "terms" : { + // "field" : "gender", + // "order" : { "avg_height" : "desc" } + // }, + // "aggs" : { + // "avg_height" : { "avg" : { "field" : "height" } } + // } + // } + // } + // } + a.order = aggName + a.orderAsc = asc + return a +} + +// OrderByAggregationAndMetric creates a bucket ordering strategy which +// sorts buckets based on a multi-valued calc get. +func (a *DateHistogramAggregation) OrderByAggregationAndMetric(aggName, metric string, asc bool) *DateHistogramAggregation { + // { + // "aggs" : { + // "genders" : { + // "terms" : { + // "field" : "gender", + // "order" : { "height_stats.avg" : "desc" } + // }, + // "aggs" : { + // "height_stats" : { "stats" : { "field" : "height" } } + // } + // } + // } + // } + a.order = aggName + "." + metric + a.orderAsc = asc + return a +} + +// MinDocCount sets the minimum document count per bucket. +// Buckets with less documents than this min value will not be returned. +func (a *DateHistogramAggregation) MinDocCount(minDocCount int64) *DateHistogramAggregation { + a.minDocCount = &minDocCount + return a +} + +// TimeZone sets the timezone in which to translate dates before computing buckets. +func (a *DateHistogramAggregation) TimeZone(timeZone string) *DateHistogramAggregation { + a.timeZone = timeZone + return a +} + +// Format sets the format to use for dates. +func (a *DateHistogramAggregation) Format(format string) *DateHistogramAggregation { + a.format = format + return a +} + +// Offset sets the offset of time intervals in the histogram, e.g. "+6h". +func (a *DateHistogramAggregation) Offset(offset string) *DateHistogramAggregation { + a.offset = offset + return a +} + +// ExtendedBounds accepts int, int64, string, or time.Time values. +// In case the lower value in the histogram would be greater than min or the +// upper value would be less than max, empty buckets will be generated. +func (a *DateHistogramAggregation) ExtendedBounds(min, max interface{}) *DateHistogramAggregation { + a.extendedBoundsMin = min + a.extendedBoundsMax = max + return a +} + +// ExtendedBoundsMin accepts int, int64, string, or time.Time values. +func (a *DateHistogramAggregation) ExtendedBoundsMin(min interface{}) *DateHistogramAggregation { + a.extendedBoundsMin = min + return a +} + +// ExtendedBoundsMax accepts int, int64, string, or time.Time values. +func (a *DateHistogramAggregation) ExtendedBoundsMax(max interface{}) *DateHistogramAggregation { + a.extendedBoundsMax = max + return a +} + +func (a *DateHistogramAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs" : { + // "articles_over_time" : { + // "date_histogram" : { + // "field" : "date", + // "interval" : "month" + // } + // } + // } + // } + // + // This method returns only the { "date_histogram" : { ... } } part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["date_histogram"] = opts + + // ValuesSourceAggregationBuilder + if a.field != "" { + opts["field"] = a.field + } + if a.script != nil { + src, err := a.script.Source() + if err != nil { + return nil, err + } + opts["script"] = src + } + if a.missing != nil { + opts["missing"] = a.missing + } + + opts["interval"] = a.interval + if a.minDocCount != nil { + opts["min_doc_count"] = *a.minDocCount + } + if a.order != "" { + o := make(map[string]interface{}) + if a.orderAsc { + o[a.order] = "asc" + } else { + o[a.order] = "desc" + } + opts["order"] = o + } + if a.timeZone != "" { + opts["time_zone"] = a.timeZone + } + if a.offset != "" { + opts["offset"] = a.offset + } + if a.format != "" { + opts["format"] = a.format + } + if a.extendedBoundsMin != nil || a.extendedBoundsMax != nil { + bounds := make(map[string]interface{}) + if a.extendedBoundsMin != nil { + bounds["min"] = a.extendedBoundsMin + } + if a.extendedBoundsMax != nil { + bounds["max"] = a.extendedBoundsMax + } + opts["extended_bounds"] = bounds + } + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_date_histogram_test.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_date_histogram_test.go new file mode 100644 index 0000000..ddf7908 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_date_histogram_test.go @@ -0,0 +1,49 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestDateHistogramAggregation(t *testing.T) { + agg := NewDateHistogramAggregation(). + Field("date"). + Interval("month"). + Format("YYYY-MM"). + TimeZone("UTC"). + Offset("+6h") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"date_histogram":{"field":"date","format":"YYYY-MM","interval":"month","offset":"+6h","time_zone":"UTC"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestDateHistogramAggregationWithMissing(t *testing.T) { + agg := NewDateHistogramAggregation().Field("date").Interval("year").Missing("1900") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"date_histogram":{"field":"date","interval":"year","missing":"1900"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_date_range.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_date_range.go new file mode 100644 index 0000000..97cc147 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_date_range.go @@ -0,0 +1,255 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "time" +) + +// DateRangeAggregation is a range aggregation that is dedicated for +// date values. The main difference between this aggregation and the +// normal range aggregation is that the from and to values can be expressed +// in Date Math expressions, and it is also possible to specify a +// date format by which the from and to response fields will be returned. +// Note that this aggregration includes the from value and excludes the to +// value for each range. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-daterange-aggregation.html +type DateRangeAggregation struct { + field string + script *Script + subAggregations map[string]Aggregation + meta map[string]interface{} + keyed *bool + unmapped *bool + timeZone string + format string + entries []DateRangeAggregationEntry +} + +type DateRangeAggregationEntry struct { + Key string + From interface{} + To interface{} +} + +func NewDateRangeAggregation() *DateRangeAggregation { + return &DateRangeAggregation{ + subAggregations: make(map[string]Aggregation), + entries: make([]DateRangeAggregationEntry, 0), + } +} + +func (a *DateRangeAggregation) Field(field string) *DateRangeAggregation { + a.field = field + return a +} + +func (a *DateRangeAggregation) Script(script *Script) *DateRangeAggregation { + a.script = script + return a +} + +func (a *DateRangeAggregation) SubAggregation(name string, subAggregation Aggregation) *DateRangeAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *DateRangeAggregation) Meta(metaData map[string]interface{}) *DateRangeAggregation { + a.meta = metaData + return a +} + +func (a *DateRangeAggregation) Keyed(keyed bool) *DateRangeAggregation { + a.keyed = &keyed + return a +} + +func (a *DateRangeAggregation) Unmapped(unmapped bool) *DateRangeAggregation { + a.unmapped = &unmapped + return a +} + +func (a *DateRangeAggregation) TimeZone(timeZone string) *DateRangeAggregation { + a.timeZone = timeZone + return a +} + +func (a *DateRangeAggregation) Format(format string) *DateRangeAggregation { + a.format = format + return a +} + +func (a *DateRangeAggregation) AddRange(from, to interface{}) *DateRangeAggregation { + a.entries = append(a.entries, DateRangeAggregationEntry{From: from, To: to}) + return a +} + +func (a *DateRangeAggregation) AddRangeWithKey(key string, from, to interface{}) *DateRangeAggregation { + a.entries = append(a.entries, DateRangeAggregationEntry{Key: key, From: from, To: to}) + return a +} + +func (a *DateRangeAggregation) AddUnboundedTo(from interface{}) *DateRangeAggregation { + a.entries = append(a.entries, DateRangeAggregationEntry{From: from, To: nil}) + return a +} + +func (a *DateRangeAggregation) AddUnboundedToWithKey(key string, from interface{}) *DateRangeAggregation { + a.entries = append(a.entries, DateRangeAggregationEntry{Key: key, From: from, To: nil}) + return a +} + +func (a *DateRangeAggregation) AddUnboundedFrom(to interface{}) *DateRangeAggregation { + a.entries = append(a.entries, DateRangeAggregationEntry{From: nil, To: to}) + return a +} + +func (a *DateRangeAggregation) AddUnboundedFromWithKey(key string, to interface{}) *DateRangeAggregation { + a.entries = append(a.entries, DateRangeAggregationEntry{Key: key, From: nil, To: to}) + return a +} + +func (a *DateRangeAggregation) Lt(to interface{}) *DateRangeAggregation { + a.entries = append(a.entries, DateRangeAggregationEntry{From: nil, To: to}) + return a +} + +func (a *DateRangeAggregation) LtWithKey(key string, to interface{}) *DateRangeAggregation { + a.entries = append(a.entries, DateRangeAggregationEntry{Key: key, From: nil, To: to}) + return a +} + +func (a *DateRangeAggregation) Between(from, to interface{}) *DateRangeAggregation { + a.entries = append(a.entries, DateRangeAggregationEntry{From: from, To: to}) + return a +} + +func (a *DateRangeAggregation) BetweenWithKey(key string, from, to interface{}) *DateRangeAggregation { + a.entries = append(a.entries, DateRangeAggregationEntry{Key: key, From: from, To: to}) + return a +} + +func (a *DateRangeAggregation) Gt(from interface{}) *DateRangeAggregation { + a.entries = append(a.entries, DateRangeAggregationEntry{From: from, To: nil}) + return a +} + +func (a *DateRangeAggregation) GtWithKey(key string, from interface{}) *DateRangeAggregation { + a.entries = append(a.entries, DateRangeAggregationEntry{Key: key, From: from, To: nil}) + return a +} + +func (a *DateRangeAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs" : { + // "range" : { + // "date_range": { + // "field": "date", + // "format": "MM-yyy", + // "ranges": [ + // { "to": "now-10M/M" }, + // { "from": "now-10M/M" } + // ] + // } + // } + // } + // } + // } + // + // This method returns only the { "date_range" : { ... } } part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["date_range"] = opts + + // ValuesSourceAggregationBuilder + if a.field != "" { + opts["field"] = a.field + } + if a.script != nil { + src, err := a.script.Source() + if err != nil { + return nil, err + } + opts["script"] = src + } + + if a.keyed != nil { + opts["keyed"] = *a.keyed + } + if a.unmapped != nil { + opts["unmapped"] = *a.unmapped + } + if a.timeZone != "" { + opts["time_zone"] = a.timeZone + } + if a.format != "" { + opts["format"] = a.format + } + + var ranges []interface{} + for _, ent := range a.entries { + r := make(map[string]interface{}) + if ent.Key != "" { + r["key"] = ent.Key + } + if ent.From != nil { + switch from := ent.From.(type) { + case int, int16, int32, int64, float32, float64: + r["from"] = from + case *int, *int16, *int32, *int64, *float32, *float64: + r["from"] = from + case time.Time: + r["from"] = from.Format(time.RFC3339) + case *time.Time: + r["from"] = from.Format(time.RFC3339) + case string: + r["from"] = from + case *string: + r["from"] = from + } + } + if ent.To != nil { + switch to := ent.To.(type) { + case int, int16, int32, int64, float32, float64: + r["to"] = to + case *int, *int16, *int32, *int64, *float32, *float64: + r["to"] = to + case time.Time: + r["to"] = to.Format(time.RFC3339) + case *time.Time: + r["to"] = to.Format(time.RFC3339) + case string: + r["to"] = to + case *string: + r["to"] = to + } + } + ranges = append(ranges, r) + } + opts["ranges"] = ranges + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_date_range_test.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_date_range_test.go new file mode 100644 index 0000000..89ed495 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_date_range_test.go @@ -0,0 +1,155 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestDateRangeAggregation(t *testing.T) { + agg := NewDateRangeAggregation().Field("created_at").TimeZone("UTC") + agg = agg.AddRange(nil, "2012-12-31") + agg = agg.AddRange("2013-01-01", "2013-12-31") + agg = agg.AddRange("2014-01-01", nil) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"date_range":{"field":"created_at","ranges":[{"to":"2012-12-31"},{"from":"2013-01-01","to":"2013-12-31"},{"from":"2014-01-01"}],"time_zone":"UTC"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestDateRangeAggregationWithPointers(t *testing.T) { + d1 := "2012-12-31" + d2 := "2013-01-01" + d3 := "2013-12-31" + d4 := "2014-01-01" + + agg := NewDateRangeAggregation().Field("created_at") + agg = agg.AddRange(nil, &d1) + agg = agg.AddRange(d2, &d3) + agg = agg.AddRange(d4, nil) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"date_range":{"field":"created_at","ranges":[{"to":"2012-12-31"},{"from":"2013-01-01","to":"2013-12-31"},{"from":"2014-01-01"}]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestDateRangeAggregationWithUnbounded(t *testing.T) { + agg := NewDateRangeAggregation().Field("created_at"). + AddUnboundedFrom("2012-12-31"). + AddRange("2013-01-01", "2013-12-31"). + AddUnboundedTo("2014-01-01") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"date_range":{"field":"created_at","ranges":[{"to":"2012-12-31"},{"from":"2013-01-01","to":"2013-12-31"},{"from":"2014-01-01"}]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestDateRangeAggregationWithLtAndCo(t *testing.T) { + agg := NewDateRangeAggregation().Field("created_at"). + Lt("2012-12-31"). + Between("2013-01-01", "2013-12-31"). + Gt("2014-01-01") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"date_range":{"field":"created_at","ranges":[{"to":"2012-12-31"},{"from":"2013-01-01","to":"2013-12-31"},{"from":"2014-01-01"}]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestDateRangeAggregationWithKeyedFlag(t *testing.T) { + agg := NewDateRangeAggregation().Field("created_at"). + Keyed(true). + Lt("2012-12-31"). + Between("2013-01-01", "2013-12-31"). + Gt("2014-01-01") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"date_range":{"field":"created_at","keyed":true,"ranges":[{"to":"2012-12-31"},{"from":"2013-01-01","to":"2013-12-31"},{"from":"2014-01-01"}]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestDateRangeAggregationWithKeys(t *testing.T) { + agg := NewDateRangeAggregation().Field("created_at"). + Keyed(true). + LtWithKey("pre-2012", "2012-12-31"). + BetweenWithKey("2013", "2013-01-01", "2013-12-31"). + GtWithKey("post-2013", "2014-01-01") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"date_range":{"field":"created_at","keyed":true,"ranges":[{"key":"pre-2012","to":"2012-12-31"},{"from":"2013-01-01","key":"2013","to":"2013-12-31"},{"from":"2014-01-01","key":"post-2013"}]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestDateRangeAggregationWithSpecialNames(t *testing.T) { + agg := NewDateRangeAggregation().Field("created_at"). + AddRange("now-10M/M", "now+10M/M") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"date_range":{"field":"created_at","ranges":[{"from":"now-10M/M","to":"now+10M/M"}]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_diversified_sampler.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_diversified_sampler.go new file mode 100644 index 0000000..ef7a696 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_diversified_sampler.go @@ -0,0 +1,126 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// DiversifiedSamplerAggregation Like the ‘sampler` aggregation this is a filtering aggregation used to limit any +// sub aggregations’ processing to a sample of the top-scoring documents. The diversified_sampler aggregation adds +// the ability to limit the number of matches that share a common value such as an "author". +// +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-diversified-sampler-aggregation.html +type DiversifiedSamplerAggregation struct { + subAggregations map[string]Aggregation + meta map[string]interface{} + field string + script *Script + shardSize int + maxDocsPerValue int + executionHint string +} + +func NewDiversifiedSamplerAggregation() *DiversifiedSamplerAggregation { + return &DiversifiedSamplerAggregation{ + shardSize: -1, + maxDocsPerValue: -1, + subAggregations: make(map[string]Aggregation), + } +} + +func (a *DiversifiedSamplerAggregation) SubAggregation(name string, subAggregation Aggregation) *DiversifiedSamplerAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *DiversifiedSamplerAggregation) Meta(metaData map[string]interface{}) *DiversifiedSamplerAggregation { + a.meta = metaData + return a +} + +// Field on which the aggregation is processed. +func (a *DiversifiedSamplerAggregation) Field(field string) *DiversifiedSamplerAggregation { + a.field = field + return a +} + +func (a *DiversifiedSamplerAggregation) Script(script *Script) *DiversifiedSamplerAggregation { + a.script = script + return a +} + +// ShardSize sets the maximum number of docs returned from each shard. +func (a *DiversifiedSamplerAggregation) ShardSize(shardSize int) *DiversifiedSamplerAggregation { + a.shardSize = shardSize + return a +} + +func (a *DiversifiedSamplerAggregation) MaxDocsPerValue(maxDocsPerValue int) *DiversifiedSamplerAggregation { + a.maxDocsPerValue = maxDocsPerValue + return a +} + +func (a *DiversifiedSamplerAggregation) ExecutionHint(hint string) *DiversifiedSamplerAggregation { + a.executionHint = hint + return a +} + +func (a *DiversifiedSamplerAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs": { + // "my_unbiased_sample": { + // "diversified_sampler": { + // "shard_size": 200, + // "field" : "author" + // } + // } + // } + // } + // + // This method returns only the { "diversified_sampler" : { ... } } part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["diversified_sampler"] = opts + + if a.field != "" { + opts["field"] = a.field + } + if a.script != nil { + src, err := a.script.Source() + if err != nil { + return nil, err + } + opts["script"] = src + } + if a.shardSize >= 0 { + opts["shard_size"] = a.shardSize + } + if a.maxDocsPerValue >= 0 { + opts["max_docs_per_value"] = a.maxDocsPerValue + } + if a.executionHint != "" { + opts["execution_hint"] = a.executionHint + } + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_diversified_sampler_test.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_diversified_sampler_test.go new file mode 100644 index 0000000..9793c55 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_diversified_sampler_test.go @@ -0,0 +1,31 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestDiversifiedSamplerAggregation(t *testing.T) { + keywordsAgg := NewSignificantTermsAggregation().Field("text") + agg := NewDiversifiedSamplerAggregation(). + ShardSize(200). + Field("author"). + SubAggregation("keywords", keywordsAgg) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"aggregations":{"keywords":{"significant_terms":{"field":"text"}}},"diversified_sampler":{"field":"author","shard_size":200}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_filter.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_filter.go new file mode 100644 index 0000000..40acdee --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_filter.go @@ -0,0 +1,77 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// FilterAggregation defines a single bucket of all the documents +// in the current document set context that match a specified filter. +// Often this will be used to narrow down the current aggregation context +// to a specific set of documents. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-filter-aggregation.html +type FilterAggregation struct { + filter Query + subAggregations map[string]Aggregation + meta map[string]interface{} +} + +func NewFilterAggregation() *FilterAggregation { + return &FilterAggregation{ + subAggregations: make(map[string]Aggregation), + } +} + +func (a *FilterAggregation) SubAggregation(name string, subAggregation Aggregation) *FilterAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *FilterAggregation) Meta(metaData map[string]interface{}) *FilterAggregation { + a.meta = metaData + return a +} + +func (a *FilterAggregation) Filter(filter Query) *FilterAggregation { + a.filter = filter + return a +} + +func (a *FilterAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs" : { + // "in_stock_products" : { + // "filter" : { "range" : { "stock" : { "gt" : 0 } } } + // } + // } + // } + // This method returns only the { "filter" : {} } part. + + src, err := a.filter.Source() + if err != nil { + return nil, err + } + source := make(map[string]interface{}) + source["filter"] = src + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_filter_test.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_filter_test.go new file mode 100644 index 0000000..6aa4fbb --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_filter_test.go @@ -0,0 +1,66 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestFilterAggregation(t *testing.T) { + filter := NewRangeQuery("stock").Gt(0) + agg := NewFilterAggregation().Filter(filter) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"filter":{"range":{"stock":{"from":0,"include_lower":false,"include_upper":true,"to":null}}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestFilterAggregationWithSubAggregation(t *testing.T) { + avgPriceAgg := NewAvgAggregation().Field("price") + filter := NewRangeQuery("stock").Gt(0) + agg := NewFilterAggregation().Filter(filter). + SubAggregation("avg_price", avgPriceAgg) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"aggregations":{"avg_price":{"avg":{"field":"price"}}},"filter":{"range":{"stock":{"from":0,"include_lower":false,"include_upper":true,"to":null}}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestFilterAggregationWithMeta(t *testing.T) { + filter := NewRangeQuery("stock").Gt(0) + agg := NewFilterAggregation().Filter(filter).Meta(map[string]interface{}{"name": "Oliver"}) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"filter":{"range":{"stock":{"from":0,"include_lower":false,"include_upper":true,"to":null}}},"meta":{"name":"Oliver"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_filters.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_filters.go new file mode 100644 index 0000000..8f1f289 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_filters.go @@ -0,0 +1,138 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import "errors" + +// FiltersAggregation defines a multi bucket aggregations where each bucket +// is associated with a filter. Each bucket will collect all documents that +// match its associated filter. +// +// Notice that the caller has to decide whether to add filters by name +// (using FilterWithName) or unnamed filters (using Filter or Filters). One cannot +// use both named and unnamed filters. +// +// For details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-filters-aggregation.html +type FiltersAggregation struct { + unnamedFilters []Query + namedFilters map[string]Query + subAggregations map[string]Aggregation + meta map[string]interface{} +} + +// NewFiltersAggregation initializes a new FiltersAggregation. +func NewFiltersAggregation() *FiltersAggregation { + return &FiltersAggregation{ + unnamedFilters: make([]Query, 0), + namedFilters: make(map[string]Query), + subAggregations: make(map[string]Aggregation), + } +} + +// Filter adds an unnamed filter. Notice that you can +// either use named or unnamed filters, but not both. +func (a *FiltersAggregation) Filter(filter Query) *FiltersAggregation { + a.unnamedFilters = append(a.unnamedFilters, filter) + return a +} + +// Filters adds one or more unnamed filters. Notice that you can +// either use named or unnamed filters, but not both. +func (a *FiltersAggregation) Filters(filters ...Query) *FiltersAggregation { + if len(filters) > 0 { + a.unnamedFilters = append(a.unnamedFilters, filters...) + } + return a +} + +// FilterWithName adds a filter with a specific name. Notice that you can +// either use named or unnamed filters, but not both. +func (a *FiltersAggregation) FilterWithName(name string, filter Query) *FiltersAggregation { + a.namedFilters[name] = filter + return a +} + +// SubAggregation adds a sub-aggregation to this aggregation. +func (a *FiltersAggregation) SubAggregation(name string, subAggregation Aggregation) *FiltersAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *FiltersAggregation) Meta(metaData map[string]interface{}) *FiltersAggregation { + a.meta = metaData + return a +} + +// Source returns the a JSON-serializable interface. +// If the aggregation is invalid, an error is returned. This may e.g. happen +// if you mixed named and unnamed filters. +func (a *FiltersAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs" : { + // "messages" : { + // "filters" : { + // "filters" : { + // "errors" : { "term" : { "body" : "error" }}, + // "warnings" : { "term" : { "body" : "warning" }} + // } + // } + // } + // } + // } + // This method returns only the (outer) { "filters" : {} } part. + + source := make(map[string]interface{}) + filters := make(map[string]interface{}) + source["filters"] = filters + + if len(a.unnamedFilters) > 0 && len(a.namedFilters) > 0 { + return nil, errors.New("elastic: use either named or unnamed filters with FiltersAggregation but not both") + } + + if len(a.unnamedFilters) > 0 { + arr := make([]interface{}, len(a.unnamedFilters)) + for i, filter := range a.unnamedFilters { + src, err := filter.Source() + if err != nil { + return nil, err + } + arr[i] = src + } + filters["filters"] = arr + } else { + dict := make(map[string]interface{}) + for key, filter := range a.namedFilters { + src, err := filter.Source() + if err != nil { + return nil, err + } + dict[key] = src + } + filters["filters"] = dict + } + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_filters_test.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_filters_test.go new file mode 100644 index 0000000..95cc8d7 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_filters_test.go @@ -0,0 +1,99 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestFiltersAggregationFilters(t *testing.T) { + f1 := NewRangeQuery("stock").Gt(0) + f2 := NewTermQuery("symbol", "GOOG") + agg := NewFiltersAggregation().Filters(f1, f2) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"filters":{"filters":[{"range":{"stock":{"from":0,"include_lower":false,"include_upper":true,"to":null}}},{"term":{"symbol":"GOOG"}}]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestFiltersAggregationFilterWithName(t *testing.T) { + f1 := NewRangeQuery("stock").Gt(0) + f2 := NewTermQuery("symbol", "GOOG") + agg := NewFiltersAggregation(). + FilterWithName("f1", f1). + FilterWithName("f2", f2) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"filters":{"filters":{"f1":{"range":{"stock":{"from":0,"include_lower":false,"include_upper":true,"to":null}}},"f2":{"term":{"symbol":"GOOG"}}}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestFiltersAggregationWithKeyedAndNonKeyedFilters(t *testing.T) { + agg := NewFiltersAggregation(). + Filter(NewTermQuery("symbol", "MSFT")). // unnamed + FilterWithName("one", NewTermQuery("symbol", "GOOG")) // named filter + _, err := agg.Source() + if err == nil { + t.Fatal("expected error, got nil") + } +} + +func TestFiltersAggregationWithSubAggregation(t *testing.T) { + avgPriceAgg := NewAvgAggregation().Field("price") + f1 := NewRangeQuery("stock").Gt(0) + f2 := NewTermQuery("symbol", "GOOG") + agg := NewFiltersAggregation().Filters(f1, f2).SubAggregation("avg_price", avgPriceAgg) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"aggregations":{"avg_price":{"avg":{"field":"price"}}},"filters":{"filters":[{"range":{"stock":{"from":0,"include_lower":false,"include_upper":true,"to":null}}},{"term":{"symbol":"GOOG"}}]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestFiltersAggregationWithMetaData(t *testing.T) { + f1 := NewRangeQuery("stock").Gt(0) + f2 := NewTermQuery("symbol", "GOOG") + agg := NewFiltersAggregation().Filters(f1, f2).Meta(map[string]interface{}{"name": "Oliver"}) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"filters":{"filters":[{"range":{"stock":{"from":0,"include_lower":false,"include_upper":true,"to":null}}},{"term":{"symbol":"GOOG"}}]},"meta":{"name":"Oliver"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_geo_distance.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_geo_distance.go new file mode 100644 index 0000000..c4a59e8 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_geo_distance.go @@ -0,0 +1,198 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// GeoDistanceAggregation is a multi-bucket aggregation that works on geo_point fields +// and conceptually works very similar to the range aggregation. +// The user can define a point of origin and a set of distance range buckets. +// The aggregation evaluate the distance of each document value from +// the origin point and determines the buckets it belongs to based on +// the ranges (a document belongs to a bucket if the distance between the +// document and the origin falls within the distance range of the bucket). +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-geodistance-aggregation.html +type GeoDistanceAggregation struct { + field string + unit string + distanceType string + point string + ranges []geoDistAggRange + subAggregations map[string]Aggregation + meta map[string]interface{} +} + +type geoDistAggRange struct { + Key string + From interface{} + To interface{} +} + +func NewGeoDistanceAggregation() *GeoDistanceAggregation { + return &GeoDistanceAggregation{ + subAggregations: make(map[string]Aggregation), + ranges: make([]geoDistAggRange, 0), + } +} + +func (a *GeoDistanceAggregation) Field(field string) *GeoDistanceAggregation { + a.field = field + return a +} + +func (a *GeoDistanceAggregation) Unit(unit string) *GeoDistanceAggregation { + a.unit = unit + return a +} + +func (a *GeoDistanceAggregation) DistanceType(distanceType string) *GeoDistanceAggregation { + a.distanceType = distanceType + return a +} + +func (a *GeoDistanceAggregation) Point(latLon string) *GeoDistanceAggregation { + a.point = latLon + return a +} + +func (a *GeoDistanceAggregation) SubAggregation(name string, subAggregation Aggregation) *GeoDistanceAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *GeoDistanceAggregation) Meta(metaData map[string]interface{}) *GeoDistanceAggregation { + a.meta = metaData + return a +} +func (a *GeoDistanceAggregation) AddRange(from, to interface{}) *GeoDistanceAggregation { + a.ranges = append(a.ranges, geoDistAggRange{From: from, To: to}) + return a +} + +func (a *GeoDistanceAggregation) AddRangeWithKey(key string, from, to interface{}) *GeoDistanceAggregation { + a.ranges = append(a.ranges, geoDistAggRange{Key: key, From: from, To: to}) + return a +} + +func (a *GeoDistanceAggregation) AddUnboundedTo(from float64) *GeoDistanceAggregation { + a.ranges = append(a.ranges, geoDistAggRange{From: from, To: nil}) + return a +} + +func (a *GeoDistanceAggregation) AddUnboundedToWithKey(key string, from float64) *GeoDistanceAggregation { + a.ranges = append(a.ranges, geoDistAggRange{Key: key, From: from, To: nil}) + return a +} + +func (a *GeoDistanceAggregation) AddUnboundedFrom(to float64) *GeoDistanceAggregation { + a.ranges = append(a.ranges, geoDistAggRange{From: nil, To: to}) + return a +} + +func (a *GeoDistanceAggregation) AddUnboundedFromWithKey(key string, to float64) *GeoDistanceAggregation { + a.ranges = append(a.ranges, geoDistAggRange{Key: key, From: nil, To: to}) + return a +} + +func (a *GeoDistanceAggregation) Between(from, to interface{}) *GeoDistanceAggregation { + a.ranges = append(a.ranges, geoDistAggRange{From: from, To: to}) + return a +} + +func (a *GeoDistanceAggregation) BetweenWithKey(key string, from, to interface{}) *GeoDistanceAggregation { + a.ranges = append(a.ranges, geoDistAggRange{Key: key, From: from, To: to}) + return a +} + +func (a *GeoDistanceAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs" : { + // "rings_around_amsterdam" : { + // "geo_distance" : { + // "field" : "location", + // "origin" : "52.3760, 4.894", + // "ranges" : [ + // { "to" : 100 }, + // { "from" : 100, "to" : 300 }, + // { "from" : 300 } + // ] + // } + // } + // } + // } + // + // This method returns only the { "range" : { ... } } part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["geo_distance"] = opts + + if a.field != "" { + opts["field"] = a.field + } + if a.unit != "" { + opts["unit"] = a.unit + } + if a.distanceType != "" { + opts["distance_type"] = a.distanceType + } + if a.point != "" { + opts["origin"] = a.point + } + + var ranges []interface{} + for _, ent := range a.ranges { + r := make(map[string]interface{}) + if ent.Key != "" { + r["key"] = ent.Key + } + if ent.From != nil { + switch from := ent.From.(type) { + case int, int16, int32, int64, float32, float64: + r["from"] = from + case *int, *int16, *int32, *int64, *float32, *float64: + r["from"] = from + case string: + r["from"] = from + case *string: + r["from"] = from + } + } + if ent.To != nil { + switch to := ent.To.(type) { + case int, int16, int32, int64, float32, float64: + r["to"] = to + case *int, *int16, *int32, *int64, *float32, *float64: + r["to"] = to + case string: + r["to"] = to + case *string: + r["to"] = to + } + } + ranges = append(ranges, r) + } + opts["ranges"] = ranges + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_geo_distance_test.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_geo_distance_test.go new file mode 100644 index 0000000..3918b9d --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_geo_distance_test.go @@ -0,0 +1,93 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestGeoDistanceAggregation(t *testing.T) { + agg := NewGeoDistanceAggregation().Field("location").Point("52.3760, 4.894") + agg = agg.AddRange(nil, 100) + agg = agg.AddRange(100, 300) + agg = agg.AddRange(300, nil) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"geo_distance":{"field":"location","origin":"52.3760, 4.894","ranges":[{"to":100},{"from":100,"to":300},{"from":300}]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestGeoDistanceAggregationWithPointers(t *testing.T) { + hundred := 100 + threeHundred := 300 + agg := NewGeoDistanceAggregation().Field("location").Point("52.3760, 4.894") + agg = agg.AddRange(nil, &hundred) + agg = agg.AddRange(hundred, &threeHundred) + agg = agg.AddRange(threeHundred, nil) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"geo_distance":{"field":"location","origin":"52.3760, 4.894","ranges":[{"to":100},{"from":100,"to":300},{"from":300}]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestGeoDistanceAggregationWithUnbounded(t *testing.T) { + agg := NewGeoDistanceAggregation().Field("location").Point("52.3760, 4.894") + agg = agg.AddUnboundedFrom(100) + agg = agg.AddRange(100, 300) + agg = agg.AddUnboundedTo(300) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"geo_distance":{"field":"location","origin":"52.3760, 4.894","ranges":[{"to":100},{"from":100,"to":300},{"from":300}]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestGeoDistanceAggregationWithMetaData(t *testing.T) { + agg := NewGeoDistanceAggregation().Field("location").Point("52.3760, 4.894") + agg = agg.AddRange(nil, 100) + agg = agg.AddRange(100, 300) + agg = agg.AddRange(300, nil) + agg = agg.Meta(map[string]interface{}{"name": "Oliver"}) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"geo_distance":{"field":"location","origin":"52.3760, 4.894","ranges":[{"to":100},{"from":100,"to":300},{"from":300}]},"meta":{"name":"Oliver"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_geohash_grid.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_geohash_grid.go new file mode 100644 index 0000000..4c3e945 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_geohash_grid.go @@ -0,0 +1,104 @@ +package elastic + +type GeoHashGridAggregation struct { + field string + precision interface{} + size int + shardSize int + subAggregations map[string]Aggregation + meta map[string]interface{} +} + +func NewGeoHashGridAggregation() *GeoHashGridAggregation { + return &GeoHashGridAggregation{ + subAggregations: make(map[string]Aggregation), + size: -1, + shardSize: -1, + } +} + +func (a *GeoHashGridAggregation) Field(field string) *GeoHashGridAggregation { + a.field = field + return a +} + +// Precision accepts the level as int value between 1 and 12 or Distance Units like "2km", "5mi" as described at +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/common-options.html#distance-units and +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-geohashgrid-aggregation.html +func (a *GeoHashGridAggregation) Precision(precision interface{}) *GeoHashGridAggregation { + a.precision = precision + return a +} + +func (a *GeoHashGridAggregation) Size(size int) *GeoHashGridAggregation { + a.size = size + return a +} + +func (a *GeoHashGridAggregation) ShardSize(shardSize int) *GeoHashGridAggregation { + a.shardSize = shardSize + return a +} + +func (a *GeoHashGridAggregation) SubAggregation(name string, subAggregation Aggregation) *GeoHashGridAggregation { + a.subAggregations[name] = subAggregation + return a +} + +func (a *GeoHashGridAggregation) Meta(metaData map[string]interface{}) *GeoHashGridAggregation { + a.meta = metaData + return a +} + +func (a *GeoHashGridAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs": { + // "new_york": { + // "geohash_grid": { + // "field": "location", + // "precision": 5 + // } + // } + // } + // } + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["geohash_grid"] = opts + + if a.field != "" { + opts["field"] = a.field + } + + if a.precision != nil { + opts["precision"] = a.precision + } + + if a.size != -1 { + opts["size"] = a.size + } + + if a.shardSize != -1 { + opts["shard_size"] = a.shardSize + } + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_geohash_grid_test.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_geohash_grid_test.go new file mode 100644 index 0000000..b75a752 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_geohash_grid_test.go @@ -0,0 +1,102 @@ +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestGeoHashGridAggregation(t *testing.T) { + agg := NewGeoHashGridAggregation().Field("location").Precision(5) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("Marshalling to JSON failed: %v", err) + } + got := string(data) + expected := `{"geohash_grid":{"field":"location","precision":5}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestGeoHashGridAggregation_PrecisionAsString(t *testing.T) { + agg := NewGeoHashGridAggregation().Field("location").Precision("2km") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("Marshalling to JSON failed: %v", err) + } + got := string(data) + expected := `{"geohash_grid":{"field":"location","precision":"2km"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestGeoHashGridAggregationWithMetaData(t *testing.T) { + agg := NewGeoHashGridAggregation().Field("location").Precision(5) + agg = agg.Meta(map[string]interface{}{"name": "Oliver"}) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("Marshalling to JSON failed: %v", err) + } + got := string(data) + expected := `{"geohash_grid":{"field":"location","precision":5},"meta":{"name":"Oliver"}}` + + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestGeoHashGridAggregationWithSize(t *testing.T) { + agg := NewGeoHashGridAggregation().Field("location").Precision(5).Size(5) + agg = agg.Meta(map[string]interface{}{"name": "Oliver"}) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("Marshalling to JSON failed: %v", err) + } + got := string(data) + expected := `{"geohash_grid":{"field":"location","precision":5,"size":5},"meta":{"name":"Oliver"}}` + + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestGeoHashGridAggregationWithShardSize(t *testing.T) { + agg := NewGeoHashGridAggregation().Field("location").Precision(5).ShardSize(5) + agg = agg.Meta(map[string]interface{}{"name": "Oliver"}) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("Marshalling to JSON failed: %v", err) + } + got := string(data) + expected := `{"geohash_grid":{"field":"location","precision":5,"shard_size":5},"meta":{"name":"Oliver"}}` + + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_global.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_global.go new file mode 100644 index 0000000..961f6dd --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_global.go @@ -0,0 +1,71 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// GlobalAggregation defines a single bucket of all the documents within +// the search execution context. This context is defined by the indices +// and the document types you’re searching on, but is not influenced +// by the search query itself. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-global-aggregation.html +type GlobalAggregation struct { + subAggregations map[string]Aggregation + meta map[string]interface{} +} + +func NewGlobalAggregation() *GlobalAggregation { + return &GlobalAggregation{ + subAggregations: make(map[string]Aggregation), + } +} + +func (a *GlobalAggregation) SubAggregation(name string, subAggregation Aggregation) *GlobalAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *GlobalAggregation) Meta(metaData map[string]interface{}) *GlobalAggregation { + a.meta = metaData + return a +} + +func (a *GlobalAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs" : { + // "all_products" : { + // "global" : {}, + // "aggs" : { + // "avg_price" : { "avg" : { "field" : "price" } } + // } + // } + // } + // } + // This method returns only the { "global" : {} } part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["global"] = opts + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_global_test.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_global_test.go new file mode 100644 index 0000000..5f1e5e6 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_global_test.go @@ -0,0 +1,44 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestGlobalAggregation(t *testing.T) { + agg := NewGlobalAggregation() + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"global":{}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestGlobalAggregationWithMetaData(t *testing.T) { + agg := NewGlobalAggregation().Meta(map[string]interface{}{"name": "Oliver"}) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"global":{},"meta":{"name":"Oliver"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_histogram.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_histogram.go new file mode 100644 index 0000000..16c53fb --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_histogram.go @@ -0,0 +1,265 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// HistogramAggregation is a multi-bucket values source based aggregation +// that can be applied on numeric values extracted from the documents. +// It dynamically builds fixed size (a.k.a. interval) buckets over the +// values. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-histogram-aggregation.html +type HistogramAggregation struct { + field string + script *Script + missing interface{} + subAggregations map[string]Aggregation + meta map[string]interface{} + + interval float64 + order string + orderAsc bool + minDocCount *int64 + minBounds *float64 + maxBounds *float64 + offset *float64 +} + +func NewHistogramAggregation() *HistogramAggregation { + return &HistogramAggregation{ + subAggregations: make(map[string]Aggregation), + } +} + +func (a *HistogramAggregation) Field(field string) *HistogramAggregation { + a.field = field + return a +} + +func (a *HistogramAggregation) Script(script *Script) *HistogramAggregation { + a.script = script + return a +} + +// Missing configures the value to use when documents miss a value. +func (a *HistogramAggregation) Missing(missing interface{}) *HistogramAggregation { + a.missing = missing + return a +} + +func (a *HistogramAggregation) SubAggregation(name string, subAggregation Aggregation) *HistogramAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *HistogramAggregation) Meta(metaData map[string]interface{}) *HistogramAggregation { + a.meta = metaData + return a +} + +// Interval for this builder, must be greater than 0. +func (a *HistogramAggregation) Interval(interval float64) *HistogramAggregation { + a.interval = interval + return a +} + +// Order specifies the sort order. Valid values for order are: +// "_key", "_count", a sub-aggregation name, or a sub-aggregation name +// with a metric. +func (a *HistogramAggregation) Order(order string, asc bool) *HistogramAggregation { + a.order = order + a.orderAsc = asc + return a +} + +func (a *HistogramAggregation) OrderByCount(asc bool) *HistogramAggregation { + // "order" : { "_count" : "asc" } + a.order = "_count" + a.orderAsc = asc + return a +} + +func (a *HistogramAggregation) OrderByCountAsc() *HistogramAggregation { + return a.OrderByCount(true) +} + +func (a *HistogramAggregation) OrderByCountDesc() *HistogramAggregation { + return a.OrderByCount(false) +} + +func (a *HistogramAggregation) OrderByKey(asc bool) *HistogramAggregation { + // "order" : { "_key" : "asc" } + a.order = "_key" + a.orderAsc = asc + return a +} + +func (a *HistogramAggregation) OrderByKeyAsc() *HistogramAggregation { + return a.OrderByKey(true) +} + +func (a *HistogramAggregation) OrderByKeyDesc() *HistogramAggregation { + return a.OrderByKey(false) +} + +// OrderByAggregation creates a bucket ordering strategy which sorts buckets +// based on a single-valued calc get. +func (a *HistogramAggregation) OrderByAggregation(aggName string, asc bool) *HistogramAggregation { + // { + // "aggs" : { + // "genders" : { + // "terms" : { + // "field" : "gender", + // "order" : { "avg_height" : "desc" } + // }, + // "aggs" : { + // "avg_height" : { "avg" : { "field" : "height" } } + // } + // } + // } + // } + a.order = aggName + a.orderAsc = asc + return a +} + +// OrderByAggregationAndMetric creates a bucket ordering strategy which +// sorts buckets based on a multi-valued calc get. +func (a *HistogramAggregation) OrderByAggregationAndMetric(aggName, metric string, asc bool) *HistogramAggregation { + // { + // "aggs" : { + // "genders" : { + // "terms" : { + // "field" : "gender", + // "order" : { "height_stats.avg" : "desc" } + // }, + // "aggs" : { + // "height_stats" : { "stats" : { "field" : "height" } } + // } + // } + // } + // } + a.order = aggName + "." + metric + a.orderAsc = asc + return a +} + +func (a *HistogramAggregation) MinDocCount(minDocCount int64) *HistogramAggregation { + a.minDocCount = &minDocCount + return a +} + +func (a *HistogramAggregation) ExtendedBounds(min, max float64) *HistogramAggregation { + a.minBounds = &min + a.maxBounds = &max + return a +} + +func (a *HistogramAggregation) ExtendedBoundsMin(min float64) *HistogramAggregation { + a.minBounds = &min + return a +} + +func (a *HistogramAggregation) MinBounds(min float64) *HistogramAggregation { + a.minBounds = &min + return a +} + +func (a *HistogramAggregation) ExtendedBoundsMax(max float64) *HistogramAggregation { + a.maxBounds = &max + return a +} + +func (a *HistogramAggregation) MaxBounds(max float64) *HistogramAggregation { + a.maxBounds = &max + return a +} + +// Offset into the histogram +func (a *HistogramAggregation) Offset(offset float64) *HistogramAggregation { + a.offset = &offset + return a +} + +func (a *HistogramAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs" : { + // "prices" : { + // "histogram" : { + // "field" : "price", + // "interval" : 50 + // } + // } + // } + // } + // + // This method returns only the { "histogram" : { ... } } part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["histogram"] = opts + + // ValuesSourceAggregationBuilder + if a.field != "" { + opts["field"] = a.field + } + if a.script != nil { + src, err := a.script.Source() + if err != nil { + return nil, err + } + opts["script"] = src + } + if a.missing != nil { + opts["missing"] = a.missing + } + + opts["interval"] = a.interval + if a.order != "" { + o := make(map[string]interface{}) + if a.orderAsc { + o[a.order] = "asc" + } else { + o[a.order] = "desc" + } + opts["order"] = o + } + if a.offset != nil { + opts["offset"] = *a.offset + } + if a.minDocCount != nil { + opts["min_doc_count"] = *a.minDocCount + } + if a.minBounds != nil || a.maxBounds != nil { + bounds := make(map[string]interface{}) + if a.minBounds != nil { + bounds["min"] = a.minBounds + } + if a.maxBounds != nil { + bounds["max"] = a.maxBounds + } + opts["extended_bounds"] = bounds + } + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_histogram_test.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_histogram_test.go new file mode 100644 index 0000000..aeb7eec --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_histogram_test.go @@ -0,0 +1,61 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestHistogramAggregation(t *testing.T) { + agg := NewHistogramAggregation().Field("price").Interval(50) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"histogram":{"field":"price","interval":50}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestHistogramAggregationWithMetaData(t *testing.T) { + agg := NewHistogramAggregation().Field("price").Offset(10).Interval(50).Meta(map[string]interface{}{"name": "Oliver"}) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"histogram":{"field":"price","interval":50,"offset":10},"meta":{"name":"Oliver"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestHistogramAggregationWithMissing(t *testing.T) { + agg := NewHistogramAggregation().Field("price").Interval(50).Missing("n/a") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"histogram":{"field":"price","interval":50,"missing":"n/a"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_ip_range.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_ip_range.go new file mode 100644 index 0000000..08b4f7d --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_ip_range.go @@ -0,0 +1,195 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// IPRangeAggregation is a range aggregation that is dedicated for +// IP addresses. +// +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-iprange-aggregation.html +type IPRangeAggregation struct { + field string + subAggregations map[string]Aggregation + meta map[string]interface{} + keyed *bool + entries []IPRangeAggregationEntry +} + +type IPRangeAggregationEntry struct { + Key string + Mask string + From string + To string +} + +func NewIPRangeAggregation() *IPRangeAggregation { + return &IPRangeAggregation{ + subAggregations: make(map[string]Aggregation), + entries: make([]IPRangeAggregationEntry, 0), + } +} + +func (a *IPRangeAggregation) Field(field string) *IPRangeAggregation { + a.field = field + return a +} + +func (a *IPRangeAggregation) SubAggregation(name string, subAggregation Aggregation) *IPRangeAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *IPRangeAggregation) Meta(metaData map[string]interface{}) *IPRangeAggregation { + a.meta = metaData + return a +} + +func (a *IPRangeAggregation) Keyed(keyed bool) *IPRangeAggregation { + a.keyed = &keyed + return a +} + +func (a *IPRangeAggregation) AddMaskRange(mask string) *IPRangeAggregation { + a.entries = append(a.entries, IPRangeAggregationEntry{Mask: mask}) + return a +} + +func (a *IPRangeAggregation) AddMaskRangeWithKey(key, mask string) *IPRangeAggregation { + a.entries = append(a.entries, IPRangeAggregationEntry{Key: key, Mask: mask}) + return a +} + +func (a *IPRangeAggregation) AddRange(from, to string) *IPRangeAggregation { + a.entries = append(a.entries, IPRangeAggregationEntry{From: from, To: to}) + return a +} + +func (a *IPRangeAggregation) AddRangeWithKey(key, from, to string) *IPRangeAggregation { + a.entries = append(a.entries, IPRangeAggregationEntry{Key: key, From: from, To: to}) + return a +} + +func (a *IPRangeAggregation) AddUnboundedTo(from string) *IPRangeAggregation { + a.entries = append(a.entries, IPRangeAggregationEntry{From: from, To: ""}) + return a +} + +func (a *IPRangeAggregation) AddUnboundedToWithKey(key, from string) *IPRangeAggregation { + a.entries = append(a.entries, IPRangeAggregationEntry{Key: key, From: from, To: ""}) + return a +} + +func (a *IPRangeAggregation) AddUnboundedFrom(to string) *IPRangeAggregation { + a.entries = append(a.entries, IPRangeAggregationEntry{From: "", To: to}) + return a +} + +func (a *IPRangeAggregation) AddUnboundedFromWithKey(key, to string) *IPRangeAggregation { + a.entries = append(a.entries, IPRangeAggregationEntry{Key: key, From: "", To: to}) + return a +} + +func (a *IPRangeAggregation) Lt(to string) *IPRangeAggregation { + a.entries = append(a.entries, IPRangeAggregationEntry{From: "", To: to}) + return a +} + +func (a *IPRangeAggregation) LtWithKey(key, to string) *IPRangeAggregation { + a.entries = append(a.entries, IPRangeAggregationEntry{Key: key, From: "", To: to}) + return a +} + +func (a *IPRangeAggregation) Between(from, to string) *IPRangeAggregation { + a.entries = append(a.entries, IPRangeAggregationEntry{From: from, To: to}) + return a +} + +func (a *IPRangeAggregation) BetweenWithKey(key, from, to string) *IPRangeAggregation { + a.entries = append(a.entries, IPRangeAggregationEntry{Key: key, From: from, To: to}) + return a +} + +func (a *IPRangeAggregation) Gt(from string) *IPRangeAggregation { + a.entries = append(a.entries, IPRangeAggregationEntry{From: from, To: ""}) + return a +} + +func (a *IPRangeAggregation) GtWithKey(key, from string) *IPRangeAggregation { + a.entries = append(a.entries, IPRangeAggregationEntry{Key: key, From: from, To: ""}) + return a +} + +func (a *IPRangeAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs" : { + // "range" : { + // "ip_range": { + // "field": "ip", + // "ranges": [ + // { "to": "10.0.0.5" }, + // { "from": "10.0.0.5" } + // ] + // } + // } + // } + // } + // } + // + // This method returns only the { "ip_range" : { ... } } part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["ip_range"] = opts + + // ValuesSourceAggregationBuilder + if a.field != "" { + opts["field"] = a.field + } + + if a.keyed != nil { + opts["keyed"] = *a.keyed + } + + var ranges []interface{} + for _, ent := range a.entries { + r := make(map[string]interface{}) + if ent.Key != "" { + r["key"] = ent.Key + } + if ent.Mask != "" { + r["mask"] = ent.Mask + } else { + if ent.From != "" { + r["from"] = ent.From + } + if ent.To != "" { + r["to"] = ent.To + } + } + ranges = append(ranges, r) + } + opts["ranges"] = ranges + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_ip_range_test.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_ip_range_test.go new file mode 100644 index 0000000..7a2b49f --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_ip_range_test.go @@ -0,0 +1,90 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestIPRangeAggregation(t *testing.T) { + agg := NewIPRangeAggregation().Field("remote_ip") + agg = agg.AddRange("", "10.0.0.0") + agg = agg.AddRange("10.1.0.0", "10.1.255.255") + agg = agg.AddRange("10.2.0.0", "") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"ip_range":{"field":"remote_ip","ranges":[{"to":"10.0.0.0"},{"from":"10.1.0.0","to":"10.1.255.255"},{"from":"10.2.0.0"}]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestIPRangeAggregationMask(t *testing.T) { + agg := NewIPRangeAggregation().Field("remote_ip") + agg = agg.AddMaskRange("10.0.0.0/25") + agg = agg.AddMaskRange("10.0.0.127/25") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"ip_range":{"field":"remote_ip","ranges":[{"mask":"10.0.0.0/25"},{"mask":"10.0.0.127/25"}]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestIPRangeAggregationWithKeyedFlag(t *testing.T) { + agg := NewIPRangeAggregation().Field("remote_ip") + agg = agg.Keyed(true) + agg = agg.AddRange("", "10.0.0.0") + agg = agg.AddRange("10.1.0.0", "10.1.255.255") + agg = agg.AddRange("10.2.0.0", "") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"ip_range":{"field":"remote_ip","keyed":true,"ranges":[{"to":"10.0.0.0"},{"from":"10.1.0.0","to":"10.1.255.255"},{"from":"10.2.0.0"}]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestIPRangeAggregationWithKeys(t *testing.T) { + agg := NewIPRangeAggregation().Field("remote_ip") + agg = agg.Keyed(true) + agg = agg.LtWithKey("infinity", "10.0.0.5") + agg = agg.GtWithKey("and-beyond", "10.0.0.5") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"ip_range":{"field":"remote_ip","keyed":true,"ranges":[{"key":"infinity","to":"10.0.0.5"},{"from":"10.0.0.5","key":"and-beyond"}]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_missing.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_missing.go new file mode 100644 index 0000000..182f4e3 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_missing.go @@ -0,0 +1,81 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// MissingAggregation is a field data based single bucket aggregation, +// that creates a bucket of all documents in the current document set context +// that are missing a field value (effectively, missing a field or having +// the configured NULL value set). This aggregator will often be used in +// conjunction with other field data bucket aggregators (such as ranges) +// to return information for all the documents that could not be placed +// in any of the other buckets due to missing field data values. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-missing-aggregation.html +type MissingAggregation struct { + field string + subAggregations map[string]Aggregation + meta map[string]interface{} +} + +func NewMissingAggregation() *MissingAggregation { + return &MissingAggregation{ + subAggregations: make(map[string]Aggregation), + } +} + +func (a *MissingAggregation) Field(field string) *MissingAggregation { + a.field = field + return a +} + +func (a *MissingAggregation) SubAggregation(name string, subAggregation Aggregation) *MissingAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *MissingAggregation) Meta(metaData map[string]interface{}) *MissingAggregation { + a.meta = metaData + return a +} + +func (a *MissingAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs" : { + // "products_without_a_price" : { + // "missing" : { "field" : "price" } + // } + // } + // } + // This method returns only the { "missing" : { ... } } part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["missing"] = opts + + if a.field != "" { + opts["field"] = a.field + } + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_missing_test.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_missing_test.go new file mode 100644 index 0000000..179c308 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_missing_test.go @@ -0,0 +1,44 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestMissingAggregation(t *testing.T) { + agg := NewMissingAggregation().Field("price") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"missing":{"field":"price"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestMissingAggregationWithMetaData(t *testing.T) { + agg := NewMissingAggregation().Field("price").Meta(map[string]interface{}{"name": "Oliver"}) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"meta":{"name":"Oliver"},"missing":{"field":"price"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_nested.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_nested.go new file mode 100644 index 0000000..8b444b0 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_nested.go @@ -0,0 +1,82 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// NestedAggregation is a special single bucket aggregation that enables +// aggregating nested documents. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-nested-aggregation.html +type NestedAggregation struct { + path string + subAggregations map[string]Aggregation + meta map[string]interface{} +} + +func NewNestedAggregation() *NestedAggregation { + return &NestedAggregation{ + subAggregations: make(map[string]Aggregation), + } +} + +func (a *NestedAggregation) SubAggregation(name string, subAggregation Aggregation) *NestedAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *NestedAggregation) Meta(metaData map[string]interface{}) *NestedAggregation { + a.meta = metaData + return a +} + +func (a *NestedAggregation) Path(path string) *NestedAggregation { + a.path = path + return a +} + +func (a *NestedAggregation) Source() (interface{}, error) { + // Example: + // { + // "query" : { + // "match" : { "name" : "led tv" } + // } + // "aggs" : { + // "resellers" : { + // "nested" : { + // "path" : "resellers" + // }, + // "aggs" : { + // "min_price" : { "min" : { "field" : "resellers.price" } } + // } + // } + // } + // } + // This method returns only the { "nested" : {} } part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["nested"] = opts + + opts["path"] = a.path + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_nested_test.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_nested_test.go new file mode 100644 index 0000000..219943e --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_nested_test.go @@ -0,0 +1,62 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestNestedAggregation(t *testing.T) { + agg := NewNestedAggregation().Path("resellers") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"nested":{"path":"resellers"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestNestedAggregationWithSubAggregation(t *testing.T) { + minPriceAgg := NewMinAggregation().Field("resellers.price") + agg := NewNestedAggregation().Path("resellers").SubAggregation("min_price", minPriceAgg) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"aggregations":{"min_price":{"min":{"field":"resellers.price"}}},"nested":{"path":"resellers"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestNestedAggregationWithMetaData(t *testing.T) { + agg := NewNestedAggregation().Path("resellers").Meta(map[string]interface{}{"name": "Oliver"}) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"meta":{"name":"Oliver"},"nested":{"path":"resellers"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_range.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_range.go new file mode 100644 index 0000000..94a71c9 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_range.go @@ -0,0 +1,244 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "time" +) + +// RangeAggregation is a multi-bucket value source based aggregation that +// enables the user to define a set of ranges - each representing a bucket. +// During the aggregation process, the values extracted from each document +// will be checked against each bucket range and "bucket" the +// relevant/matching document. Note that this aggregration includes the +// from value and excludes the to value for each range. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-range-aggregation.html +type RangeAggregation struct { + field string + script *Script + missing interface{} + subAggregations map[string]Aggregation + meta map[string]interface{} + keyed *bool + unmapped *bool + entries []rangeAggregationEntry +} + +type rangeAggregationEntry struct { + Key string + From interface{} + To interface{} +} + +func NewRangeAggregation() *RangeAggregation { + return &RangeAggregation{ + subAggregations: make(map[string]Aggregation), + entries: make([]rangeAggregationEntry, 0), + } +} + +func (a *RangeAggregation) Field(field string) *RangeAggregation { + a.field = field + return a +} + +func (a *RangeAggregation) Script(script *Script) *RangeAggregation { + a.script = script + return a +} + +// Missing configures the value to use when documents miss a value. +func (a *RangeAggregation) Missing(missing interface{}) *RangeAggregation { + a.missing = missing + return a +} + +func (a *RangeAggregation) SubAggregation(name string, subAggregation Aggregation) *RangeAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *RangeAggregation) Meta(metaData map[string]interface{}) *RangeAggregation { + a.meta = metaData + return a +} + +func (a *RangeAggregation) Keyed(keyed bool) *RangeAggregation { + a.keyed = &keyed + return a +} + +func (a *RangeAggregation) Unmapped(unmapped bool) *RangeAggregation { + a.unmapped = &unmapped + return a +} + +func (a *RangeAggregation) AddRange(from, to interface{}) *RangeAggregation { + a.entries = append(a.entries, rangeAggregationEntry{From: from, To: to}) + return a +} + +func (a *RangeAggregation) AddRangeWithKey(key string, from, to interface{}) *RangeAggregation { + a.entries = append(a.entries, rangeAggregationEntry{Key: key, From: from, To: to}) + return a +} + +func (a *RangeAggregation) AddUnboundedTo(from interface{}) *RangeAggregation { + a.entries = append(a.entries, rangeAggregationEntry{From: from, To: nil}) + return a +} + +func (a *RangeAggregation) AddUnboundedToWithKey(key string, from interface{}) *RangeAggregation { + a.entries = append(a.entries, rangeAggregationEntry{Key: key, From: from, To: nil}) + return a +} + +func (a *RangeAggregation) AddUnboundedFrom(to interface{}) *RangeAggregation { + a.entries = append(a.entries, rangeAggregationEntry{From: nil, To: to}) + return a +} + +func (a *RangeAggregation) AddUnboundedFromWithKey(key string, to interface{}) *RangeAggregation { + a.entries = append(a.entries, rangeAggregationEntry{Key: key, From: nil, To: to}) + return a +} + +func (a *RangeAggregation) Lt(to interface{}) *RangeAggregation { + a.entries = append(a.entries, rangeAggregationEntry{From: nil, To: to}) + return a +} + +func (a *RangeAggregation) LtWithKey(key string, to interface{}) *RangeAggregation { + a.entries = append(a.entries, rangeAggregationEntry{Key: key, From: nil, To: to}) + return a +} + +func (a *RangeAggregation) Between(from, to interface{}) *RangeAggregation { + a.entries = append(a.entries, rangeAggregationEntry{From: from, To: to}) + return a +} + +func (a *RangeAggregation) BetweenWithKey(key string, from, to interface{}) *RangeAggregation { + a.entries = append(a.entries, rangeAggregationEntry{Key: key, From: from, To: to}) + return a +} + +func (a *RangeAggregation) Gt(from interface{}) *RangeAggregation { + a.entries = append(a.entries, rangeAggregationEntry{From: from, To: nil}) + return a +} + +func (a *RangeAggregation) GtWithKey(key string, from interface{}) *RangeAggregation { + a.entries = append(a.entries, rangeAggregationEntry{Key: key, From: from, To: nil}) + return a +} + +func (a *RangeAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs" : { + // "price_ranges" : { + // "range" : { + // "field" : "price", + // "ranges" : [ + // { "to" : 50 }, + // { "from" : 50, "to" : 100 }, + // { "from" : 100 } + // ] + // } + // } + // } + // } + // + // This method returns only the { "range" : { ... } } part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["range"] = opts + + // ValuesSourceAggregationBuilder + if a.field != "" { + opts["field"] = a.field + } + if a.script != nil { + src, err := a.script.Source() + if err != nil { + return nil, err + } + opts["script"] = src + } + if a.missing != nil { + opts["missing"] = a.missing + } + + if a.keyed != nil { + opts["keyed"] = *a.keyed + } + if a.unmapped != nil { + opts["unmapped"] = *a.unmapped + } + + var ranges []interface{} + for _, ent := range a.entries { + r := make(map[string]interface{}) + if ent.Key != "" { + r["key"] = ent.Key + } + if ent.From != nil { + switch from := ent.From.(type) { + case int, int16, int32, int64, float32, float64: + r["from"] = from + case *int, *int16, *int32, *int64, *float32, *float64: + r["from"] = from + case time.Time: + r["from"] = from.Format(time.RFC3339) + case *time.Time: + r["from"] = from.Format(time.RFC3339) + case string: + r["from"] = from + case *string: + r["from"] = from + } + } + if ent.To != nil { + switch to := ent.To.(type) { + case int, int16, int32, int64, float32, float64: + r["to"] = to + case *int, *int16, *int32, *int64, *float32, *float64: + r["to"] = to + case time.Time: + r["to"] = to.Format(time.RFC3339) + case *time.Time: + r["to"] = to.Format(time.RFC3339) + case string: + r["to"] = to + case *string: + r["to"] = to + } + } + ranges = append(ranges, r) + } + opts["ranges"] = ranges + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_range_test.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_range_test.go new file mode 100644 index 0000000..17fbcec --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_range_test.go @@ -0,0 +1,178 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestRangeAggregation(t *testing.T) { + agg := NewRangeAggregation().Field("price") + agg = agg.AddRange(nil, 50) + agg = agg.AddRange(50, 100) + agg = agg.AddRange(100, nil) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"range":{"field":"price","ranges":[{"to":50},{"from":50,"to":100},{"from":100}]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestRangeAggregationWithPointers(t *testing.T) { + fifty := 50 + hundred := 100 + agg := NewRangeAggregation().Field("price") + agg = agg.AddRange(nil, &fifty) + agg = agg.AddRange(fifty, &hundred) + agg = agg.AddRange(hundred, nil) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"range":{"field":"price","ranges":[{"to":50},{"from":50,"to":100},{"from":100}]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestRangeAggregationWithUnbounded(t *testing.T) { + agg := NewRangeAggregation().Field("field_name"). + AddUnboundedFrom(50). + AddRange(20, 70). + AddRange(70, 120). + AddUnboundedTo(150) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"range":{"field":"field_name","ranges":[{"to":50},{"from":20,"to":70},{"from":70,"to":120},{"from":150}]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestRangeAggregationWithLtAndCo(t *testing.T) { + agg := NewRangeAggregation().Field("field_name"). + Lt(50). + Between(20, 70). + Between(70, 120). + Gt(150) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"range":{"field":"field_name","ranges":[{"to":50},{"from":20,"to":70},{"from":70,"to":120},{"from":150}]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestRangeAggregationWithKeyedFlag(t *testing.T) { + agg := NewRangeAggregation().Field("field_name"). + Keyed(true). + Lt(50). + Between(20, 70). + Between(70, 120). + Gt(150) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"range":{"field":"field_name","keyed":true,"ranges":[{"to":50},{"from":20,"to":70},{"from":70,"to":120},{"from":150}]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestRangeAggregationWithKeys(t *testing.T) { + agg := NewRangeAggregation().Field("field_name"). + Keyed(true). + LtWithKey("cheap", 50). + BetweenWithKey("affordable", 20, 70). + BetweenWithKey("average", 70, 120). + GtWithKey("expensive", 150) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"range":{"field":"field_name","keyed":true,"ranges":[{"key":"cheap","to":50},{"from":20,"key":"affordable","to":70},{"from":70,"key":"average","to":120},{"from":150,"key":"expensive"}]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestRangeAggregationWithMetaData(t *testing.T) { + agg := NewRangeAggregation().Field("price").Meta(map[string]interface{}{"name": "Oliver"}) + agg = agg.AddRange(nil, 50) + agg = agg.AddRange(50, 100) + agg = agg.AddRange(100, nil) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"meta":{"name":"Oliver"},"range":{"field":"price","ranges":[{"to":50},{"from":50,"to":100},{"from":100}]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestRangeAggregationWithMissing(t *testing.T) { + agg := NewRangeAggregation().Field("price").Missing(0) + agg = agg.AddRange(nil, 50) + agg = agg.AddRange(50, 100) + agg = agg.AddRange(100, nil) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"range":{"field":"price","missing":0,"ranges":[{"to":50},{"from":50,"to":100},{"from":100}]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_reverse_nested.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_reverse_nested.go new file mode 100644 index 0000000..b769a53 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_reverse_nested.go @@ -0,0 +1,86 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// ReverseNestedAggregation defines a special single bucket aggregation +// that enables aggregating on parent docs from nested documents. +// Effectively this aggregation can break out of the nested block +// structure and link to other nested structures or the root document, +// which allows nesting other aggregations that aren’t part of +// the nested object in a nested aggregation. +// +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-reverse-nested-aggregation.html +type ReverseNestedAggregation struct { + path string + subAggregations map[string]Aggregation + meta map[string]interface{} +} + +// NewReverseNestedAggregation initializes a new ReverseNestedAggregation +// bucket aggregation. +func NewReverseNestedAggregation() *ReverseNestedAggregation { + return &ReverseNestedAggregation{ + subAggregations: make(map[string]Aggregation), + } +} + +// Path set the path to use for this nested aggregation. The path must match +// the path to a nested object in the mappings. If it is not specified +// then this aggregation will go back to the root document. +func (a *ReverseNestedAggregation) Path(path string) *ReverseNestedAggregation { + a.path = path + return a +} + +func (a *ReverseNestedAggregation) SubAggregation(name string, subAggregation Aggregation) *ReverseNestedAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *ReverseNestedAggregation) Meta(metaData map[string]interface{}) *ReverseNestedAggregation { + a.meta = metaData + return a +} + +func (a *ReverseNestedAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs" : { + // "reverse_nested" : { + // "path": "..." + // } + // } + // } + // This method returns only the { "reverse_nested" : {} } part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["reverse_nested"] = opts + + if a.path != "" { + opts["path"] = a.path + } + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_reverse_nested_test.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_reverse_nested_test.go new file mode 100644 index 0000000..dc50bbc --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_reverse_nested_test.go @@ -0,0 +1,83 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestReverseNestedAggregation(t *testing.T) { + agg := NewReverseNestedAggregation() + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"reverse_nested":{}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestReverseNestedAggregationWithPath(t *testing.T) { + agg := NewReverseNestedAggregation().Path("comments") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"reverse_nested":{"path":"comments"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestReverseNestedAggregationWithSubAggregation(t *testing.T) { + avgPriceAgg := NewAvgAggregation().Field("price") + agg := NewReverseNestedAggregation(). + Path("a_path"). + SubAggregation("avg_price", avgPriceAgg) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"aggregations":{"avg_price":{"avg":{"field":"price"}}},"reverse_nested":{"path":"a_path"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestReverseNestedAggregationWithMeta(t *testing.T) { + agg := NewReverseNestedAggregation(). + Path("a_path"). + Meta(map[string]interface{}{"name": "Oliver"}) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"meta":{"name":"Oliver"},"reverse_nested":{"path":"a_path"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_sampler.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_sampler.go new file mode 100644 index 0000000..90a879f --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_sampler.go @@ -0,0 +1,111 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// SamplerAggregation is a filtering aggregation used to limit any +// sub aggregations' processing to a sample of the top-scoring documents. +// Optionally, diversity settings can be used to limit the number of matches +// that share a common value such as an "author". +// +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-sampler-aggregation.html +type SamplerAggregation struct { + subAggregations map[string]Aggregation + meta map[string]interface{} + + shardSize int + maxDocsPerValue int + executionHint string +} + +func NewSamplerAggregation() *SamplerAggregation { + return &SamplerAggregation{ + shardSize: -1, + maxDocsPerValue: -1, + subAggregations: make(map[string]Aggregation), + } +} + +func (a *SamplerAggregation) SubAggregation(name string, subAggregation Aggregation) *SamplerAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *SamplerAggregation) Meta(metaData map[string]interface{}) *SamplerAggregation { + a.meta = metaData + return a +} + +// ShardSize sets the maximum number of docs returned from each shard. +func (a *SamplerAggregation) ShardSize(shardSize int) *SamplerAggregation { + a.shardSize = shardSize + return a +} + +func (a *SamplerAggregation) MaxDocsPerValue(maxDocsPerValue int) *SamplerAggregation { + a.maxDocsPerValue = maxDocsPerValue + return a +} + +func (a *SamplerAggregation) ExecutionHint(hint string) *SamplerAggregation { + a.executionHint = hint + return a +} + +func (a *SamplerAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs" : { + // "sample" : { + // "sampler" : { + // "shard_size" : 200 + // }, + // "aggs": { + // "keywords": { + // "significant_terms": { + // "field": "text" + // } + // } + // } + // } + // } + // } + // + // This method returns only the { "sampler" : { ... } } part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["sampler"] = opts + + if a.shardSize >= 0 { + opts["shard_size"] = a.shardSize + } + if a.maxDocsPerValue >= 0 { + opts["max_docs_per_value"] = a.maxDocsPerValue + } + if a.executionHint != "" { + opts["execution_hint"] = a.executionHint + } + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_sampler_test.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_sampler_test.go new file mode 100644 index 0000000..c4dc1c7 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_sampler_test.go @@ -0,0 +1,30 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestSamplerAggregation(t *testing.T) { + keywordsAgg := NewSignificantTermsAggregation().Field("text") + agg := NewSamplerAggregation(). + ShardSize(200). + SubAggregation("keywords", keywordsAgg) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"aggregations":{"keywords":{"significant_terms":{"field":"text"}}},"sampler":{"shard_size":200}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_significant_terms.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_significant_terms.go new file mode 100644 index 0000000..0b8e862 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_significant_terms.go @@ -0,0 +1,389 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// SignificantTermsAggregation is an aggregation that returns interesting +// or unusual occurrences of terms in a set. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-significantterms-aggregation.html +type SignificantTermsAggregation struct { + field string + subAggregations map[string]Aggregation + meta map[string]interface{} + + minDocCount *int + shardMinDocCount *int + requiredSize *int + shardSize *int + filter Query + executionHint string + significanceHeuristic SignificanceHeuristic +} + +func NewSignificantTermsAggregation() *SignificantTermsAggregation { + return &SignificantTermsAggregation{ + subAggregations: make(map[string]Aggregation, 0), + } +} + +func (a *SignificantTermsAggregation) Field(field string) *SignificantTermsAggregation { + a.field = field + return a +} + +func (a *SignificantTermsAggregation) SubAggregation(name string, subAggregation Aggregation) *SignificantTermsAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *SignificantTermsAggregation) Meta(metaData map[string]interface{}) *SignificantTermsAggregation { + a.meta = metaData + return a +} + +func (a *SignificantTermsAggregation) MinDocCount(minDocCount int) *SignificantTermsAggregation { + a.minDocCount = &minDocCount + return a +} + +func (a *SignificantTermsAggregation) ShardMinDocCount(shardMinDocCount int) *SignificantTermsAggregation { + a.shardMinDocCount = &shardMinDocCount + return a +} + +func (a *SignificantTermsAggregation) RequiredSize(requiredSize int) *SignificantTermsAggregation { + a.requiredSize = &requiredSize + return a +} + +func (a *SignificantTermsAggregation) ShardSize(shardSize int) *SignificantTermsAggregation { + a.shardSize = &shardSize + return a +} + +func (a *SignificantTermsAggregation) BackgroundFilter(filter Query) *SignificantTermsAggregation { + a.filter = filter + return a +} + +func (a *SignificantTermsAggregation) ExecutionHint(hint string) *SignificantTermsAggregation { + a.executionHint = hint + return a +} + +func (a *SignificantTermsAggregation) SignificanceHeuristic(heuristic SignificanceHeuristic) *SignificantTermsAggregation { + a.significanceHeuristic = heuristic + return a +} + +func (a *SignificantTermsAggregation) Source() (interface{}, error) { + // Example: + // { + // "query" : { + // "terms" : {"force" : [ "British Transport Police" ]} + // }, + // "aggregations" : { + // "significantCrimeTypes" : { + // "significant_terms" : { "field" : "crime_type" } + // } + // } + // } + // + // This method returns only the + // { "significant_terms" : { "field" : "crime_type" } + // part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["significant_terms"] = opts + + if a.field != "" { + opts["field"] = a.field + } + if a.requiredSize != nil { + opts["size"] = *a.requiredSize // not a typo! + } + if a.shardSize != nil { + opts["shard_size"] = *a.shardSize + } + if a.minDocCount != nil { + opts["min_doc_count"] = *a.minDocCount + } + if a.shardMinDocCount != nil { + opts["shard_min_doc_count"] = *a.shardMinDocCount + } + if a.executionHint != "" { + opts["execution_hint"] = a.executionHint + } + if a.filter != nil { + src, err := a.filter.Source() + if err != nil { + return nil, err + } + opts["background_filter"] = src + } + if a.significanceHeuristic != nil { + name := a.significanceHeuristic.Name() + src, err := a.significanceHeuristic.Source() + if err != nil { + return nil, err + } + opts[name] = src + } + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} + +// -- Significance heuristics -- + +type SignificanceHeuristic interface { + Name() string + Source() (interface{}, error) +} + +// -- Chi Square -- + +// ChiSquareSignificanceHeuristic implements Chi square as described +// in "Information Retrieval", Manning et al., Chapter 13.5.2. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-significantterms-aggregation.html#_chi_square +// for details. +type ChiSquareSignificanceHeuristic struct { + backgroundIsSuperset *bool + includeNegatives *bool +} + +// NewChiSquareSignificanceHeuristic initializes a new ChiSquareSignificanceHeuristic. +func NewChiSquareSignificanceHeuristic() *ChiSquareSignificanceHeuristic { + return &ChiSquareSignificanceHeuristic{} +} + +// Name returns the name of the heuristic in the REST interface. +func (sh *ChiSquareSignificanceHeuristic) Name() string { + return "chi_square" +} + +// BackgroundIsSuperset indicates whether you defined a custom background +// filter that represents a difference set of documents that you want to +// compare to. +func (sh *ChiSquareSignificanceHeuristic) BackgroundIsSuperset(backgroundIsSuperset bool) *ChiSquareSignificanceHeuristic { + sh.backgroundIsSuperset = &backgroundIsSuperset + return sh +} + +// IncludeNegatives indicates whether to filter out the terms that appear +// much less in the subset than in the background without the subset. +func (sh *ChiSquareSignificanceHeuristic) IncludeNegatives(includeNegatives bool) *ChiSquareSignificanceHeuristic { + sh.includeNegatives = &includeNegatives + return sh +} + +// Source returns the parameters that need to be added to the REST parameters. +func (sh *ChiSquareSignificanceHeuristic) Source() (interface{}, error) { + source := make(map[string]interface{}) + if sh.backgroundIsSuperset != nil { + source["background_is_superset"] = *sh.backgroundIsSuperset + } + if sh.includeNegatives != nil { + source["include_negatives"] = *sh.includeNegatives + } + return source, nil +} + +// -- GND -- + +// GNDSignificanceHeuristic implements the "Google Normalized Distance" +// as described in "The Google Similarity Distance", Cilibrasi and Vitanyi, +// 2007. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-significantterms-aggregation.html#_google_normalized_distance +// for details. +type GNDSignificanceHeuristic struct { + backgroundIsSuperset *bool +} + +// NewGNDSignificanceHeuristic implements a new GNDSignificanceHeuristic. +func NewGNDSignificanceHeuristic() *GNDSignificanceHeuristic { + return &GNDSignificanceHeuristic{} +} + +// Name returns the name of the heuristic in the REST interface. +func (sh *GNDSignificanceHeuristic) Name() string { + return "gnd" +} + +// BackgroundIsSuperset indicates whether you defined a custom background +// filter that represents a difference set of documents that you want to +// compare to. +func (sh *GNDSignificanceHeuristic) BackgroundIsSuperset(backgroundIsSuperset bool) *GNDSignificanceHeuristic { + sh.backgroundIsSuperset = &backgroundIsSuperset + return sh +} + +// Source returns the parameters that need to be added to the REST parameters. +func (sh *GNDSignificanceHeuristic) Source() (interface{}, error) { + source := make(map[string]interface{}) + if sh.backgroundIsSuperset != nil { + source["background_is_superset"] = *sh.backgroundIsSuperset + } + return source, nil +} + +// -- JLH Score -- + +// JLHScoreSignificanceHeuristic implements the JLH score as described in +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-significantterms-aggregation.html#_jlh_score. +type JLHScoreSignificanceHeuristic struct{} + +// NewJLHScoreSignificanceHeuristic initializes a new JLHScoreSignificanceHeuristic. +func NewJLHScoreSignificanceHeuristic() *JLHScoreSignificanceHeuristic { + return &JLHScoreSignificanceHeuristic{} +} + +// Name returns the name of the heuristic in the REST interface. +func (sh *JLHScoreSignificanceHeuristic) Name() string { + return "jlh" +} + +// Source returns the parameters that need to be added to the REST parameters. +func (sh *JLHScoreSignificanceHeuristic) Source() (interface{}, error) { + source := make(map[string]interface{}) + return source, nil +} + +// -- Mutual Information -- + +// MutualInformationSignificanceHeuristic implements Mutual information +// as described in "Information Retrieval", Manning et al., Chapter 13.5.1. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-significantterms-aggregation.html#_mutual_information +// for details. +type MutualInformationSignificanceHeuristic struct { + backgroundIsSuperset *bool + includeNegatives *bool +} + +// NewMutualInformationSignificanceHeuristic initializes a new instance of +// MutualInformationSignificanceHeuristic. +func NewMutualInformationSignificanceHeuristic() *MutualInformationSignificanceHeuristic { + return &MutualInformationSignificanceHeuristic{} +} + +// Name returns the name of the heuristic in the REST interface. +func (sh *MutualInformationSignificanceHeuristic) Name() string { + return "mutual_information" +} + +// BackgroundIsSuperset indicates whether you defined a custom background +// filter that represents a difference set of documents that you want to +// compare to. +func (sh *MutualInformationSignificanceHeuristic) BackgroundIsSuperset(backgroundIsSuperset bool) *MutualInformationSignificanceHeuristic { + sh.backgroundIsSuperset = &backgroundIsSuperset + return sh +} + +// IncludeNegatives indicates whether to filter out the terms that appear +// much less in the subset than in the background without the subset. +func (sh *MutualInformationSignificanceHeuristic) IncludeNegatives(includeNegatives bool) *MutualInformationSignificanceHeuristic { + sh.includeNegatives = &includeNegatives + return sh +} + +// Source returns the parameters that need to be added to the REST parameters. +func (sh *MutualInformationSignificanceHeuristic) Source() (interface{}, error) { + source := make(map[string]interface{}) + if sh.backgroundIsSuperset != nil { + source["background_is_superset"] = *sh.backgroundIsSuperset + } + if sh.includeNegatives != nil { + source["include_negatives"] = *sh.includeNegatives + } + return source, nil +} + +// -- Percentage Score -- + +// PercentageScoreSignificanceHeuristic implements the algorithm described +// in https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-significantterms-aggregation.html#_percentage. +type PercentageScoreSignificanceHeuristic struct{} + +// NewPercentageScoreSignificanceHeuristic initializes a new instance of +// PercentageScoreSignificanceHeuristic. +func NewPercentageScoreSignificanceHeuristic() *PercentageScoreSignificanceHeuristic { + return &PercentageScoreSignificanceHeuristic{} +} + +// Name returns the name of the heuristic in the REST interface. +func (sh *PercentageScoreSignificanceHeuristic) Name() string { + return "percentage" +} + +// Source returns the parameters that need to be added to the REST parameters. +func (sh *PercentageScoreSignificanceHeuristic) Source() (interface{}, error) { + source := make(map[string]interface{}) + return source, nil +} + +// -- Script -- + +// ScriptSignificanceHeuristic implements a scripted significance heuristic. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-significantterms-aggregation.html#_scripted +// for details. +type ScriptSignificanceHeuristic struct { + script *Script +} + +// NewScriptSignificanceHeuristic initializes a new instance of +// ScriptSignificanceHeuristic. +func NewScriptSignificanceHeuristic() *ScriptSignificanceHeuristic { + return &ScriptSignificanceHeuristic{} +} + +// Name returns the name of the heuristic in the REST interface. +func (sh *ScriptSignificanceHeuristic) Name() string { + return "script_heuristic" +} + +// Script specifies the script to use to get custom scores. The following +// parameters are available in the script: `_subset_freq`, `_superset_freq`, +// `_subset_size`, and `_superset_size`. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-significantterms-aggregation.html#_scripted +// for details. +func (sh *ScriptSignificanceHeuristic) Script(script *Script) *ScriptSignificanceHeuristic { + sh.script = script + return sh +} + +// Source returns the parameters that need to be added to the REST parameters. +func (sh *ScriptSignificanceHeuristic) Source() (interface{}, error) { + source := make(map[string]interface{}) + if sh.script != nil { + src, err := sh.script.Source() + if err != nil { + return nil, err + } + source["script"] = src + } + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_significant_terms_test.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_significant_terms_test.go new file mode 100644 index 0000000..a5b2696 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_significant_terms_test.go @@ -0,0 +1,211 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestSignificantTermsAggregation(t *testing.T) { + agg := NewSignificantTermsAggregation().Field("crime_type") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"significant_terms":{"field":"crime_type"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSignificantTermsAggregationWithArgs(t *testing.T) { + agg := NewSignificantTermsAggregation(). + Field("crime_type"). + ExecutionHint("map"). + ShardSize(5). + MinDocCount(10). + BackgroundFilter(NewTermQuery("city", "London")) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"significant_terms":{"background_filter":{"term":{"city":"London"}},"execution_hint":"map","field":"crime_type","min_doc_count":10,"shard_size":5}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSignificantTermsAggregationSubAggregation(t *testing.T) { + crimeTypesAgg := NewSignificantTermsAggregation().Field("crime_type") + agg := NewTermsAggregation().Field("force") + agg = agg.SubAggregation("significantCrimeTypes", crimeTypesAgg) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"aggregations":{"significantCrimeTypes":{"significant_terms":{"field":"crime_type"}}},"terms":{"field":"force"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSignificantTermsAggregationWithMetaData(t *testing.T) { + agg := NewSignificantTermsAggregation().Field("crime_type") + agg = agg.Meta(map[string]interface{}{"name": "Oliver"}) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"meta":{"name":"Oliver"},"significant_terms":{"field":"crime_type"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSignificantTermsAggregationWithChiSquare(t *testing.T) { + agg := NewSignificantTermsAggregation().Field("crime_type") + agg = agg.SignificanceHeuristic( + NewChiSquareSignificanceHeuristic(). + BackgroundIsSuperset(true). + IncludeNegatives(false), + ) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"significant_terms":{"chi_square":{"background_is_superset":true,"include_negatives":false},"field":"crime_type"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSignificantTermsAggregationWithGND(t *testing.T) { + agg := NewSignificantTermsAggregation().Field("crime_type") + agg = agg.SignificanceHeuristic( + NewGNDSignificanceHeuristic(), + ) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"significant_terms":{"field":"crime_type","gnd":{}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSignificantTermsAggregationWithJLH(t *testing.T) { + agg := NewSignificantTermsAggregation().Field("crime_type") + agg = agg.SignificanceHeuristic( + NewJLHScoreSignificanceHeuristic(), + ) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"significant_terms":{"field":"crime_type","jlh":{}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSignificantTermsAggregationWithMutualInformation(t *testing.T) { + agg := NewSignificantTermsAggregation().Field("crime_type") + agg = agg.SignificanceHeuristic( + NewMutualInformationSignificanceHeuristic(). + BackgroundIsSuperset(false). + IncludeNegatives(true), + ) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"significant_terms":{"field":"crime_type","mutual_information":{"background_is_superset":false,"include_negatives":true}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSignificantTermsAggregationWithPercentageScore(t *testing.T) { + agg := NewSignificantTermsAggregation().Field("crime_type") + agg = agg.SignificanceHeuristic( + NewPercentageScoreSignificanceHeuristic(), + ) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"significant_terms":{"field":"crime_type","percentage":{}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSignificantTermsAggregationWithScript(t *testing.T) { + agg := NewSignificantTermsAggregation().Field("crime_type") + agg = agg.SignificanceHeuristic( + NewScriptSignificanceHeuristic(). + Script(NewScript("_subset_freq/(_superset_freq - _subset_freq + 1)")), + ) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"significant_terms":{"field":"crime_type","script_heuristic":{"script":{"source":"_subset_freq/(_superset_freq - _subset_freq + 1)"}}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_significant_text.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_significant_text.go new file mode 100644 index 0000000..df41390 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_significant_text.go @@ -0,0 +1,245 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// SignificantTextAggregation returns interesting or unusual occurrences +// of free-text terms in a set. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-significanttext-aggregation.html +type SignificantTextAggregation struct { + field string + subAggregations map[string]Aggregation + meta map[string]interface{} + + sourceFieldNames []string + filterDuplicateText *bool + includeExclude *TermsAggregationIncludeExclude + filter Query + bucketCountThresholds *BucketCountThresholds + significanceHeuristic SignificanceHeuristic +} + +func NewSignificantTextAggregation() *SignificantTextAggregation { + return &SignificantTextAggregation{ + subAggregations: make(map[string]Aggregation, 0), + } +} + +func (a *SignificantTextAggregation) Field(field string) *SignificantTextAggregation { + a.field = field + return a +} + +func (a *SignificantTextAggregation) SubAggregation(name string, subAggregation Aggregation) *SignificantTextAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *SignificantTextAggregation) Meta(metaData map[string]interface{}) *SignificantTextAggregation { + a.meta = metaData + return a +} + +func (a *SignificantTextAggregation) SourceFieldNames(names ...string) *SignificantTextAggregation { + a.sourceFieldNames = names + return a +} + +func (a *SignificantTextAggregation) FilterDuplicateText(filter bool) *SignificantTextAggregation { + a.filterDuplicateText = &filter + return a +} + +func (a *SignificantTextAggregation) MinDocCount(minDocCount int64) *SignificantTextAggregation { + if a.bucketCountThresholds == nil { + a.bucketCountThresholds = &BucketCountThresholds{} + } + a.bucketCountThresholds.MinDocCount = &minDocCount + return a +} + +func (a *SignificantTextAggregation) ShardMinDocCount(shardMinDocCount int64) *SignificantTextAggregation { + if a.bucketCountThresholds == nil { + a.bucketCountThresholds = &BucketCountThresholds{} + } + a.bucketCountThresholds.ShardMinDocCount = &shardMinDocCount + return a +} + +func (a *SignificantTextAggregation) Size(size int) *SignificantTextAggregation { + if a.bucketCountThresholds == nil { + a.bucketCountThresholds = &BucketCountThresholds{} + } + a.bucketCountThresholds.RequiredSize = &size + return a +} + +func (a *SignificantTextAggregation) ShardSize(shardSize int) *SignificantTextAggregation { + if a.bucketCountThresholds == nil { + a.bucketCountThresholds = &BucketCountThresholds{} + } + a.bucketCountThresholds.ShardSize = &shardSize + return a +} + +func (a *SignificantTextAggregation) BackgroundFilter(filter Query) *SignificantTextAggregation { + a.filter = filter + return a +} + +func (a *SignificantTextAggregation) SignificanceHeuristic(heuristic SignificanceHeuristic) *SignificantTextAggregation { + a.significanceHeuristic = heuristic + return a +} + +func (a *SignificantTextAggregation) Include(regexp string) *SignificantTextAggregation { + if a.includeExclude == nil { + a.includeExclude = &TermsAggregationIncludeExclude{} + } + a.includeExclude.Include = regexp + return a +} + +func (a *SignificantTextAggregation) IncludeValues(values ...interface{}) *SignificantTextAggregation { + if a.includeExclude == nil { + a.includeExclude = &TermsAggregationIncludeExclude{} + } + a.includeExclude.IncludeValues = append(a.includeExclude.IncludeValues, values...) + return a +} + +func (a *SignificantTextAggregation) Exclude(regexp string) *SignificantTextAggregation { + if a.includeExclude == nil { + a.includeExclude = &TermsAggregationIncludeExclude{} + } + a.includeExclude.Exclude = regexp + return a +} + +func (a *SignificantTextAggregation) ExcludeValues(values ...interface{}) *SignificantTextAggregation { + if a.includeExclude == nil { + a.includeExclude = &TermsAggregationIncludeExclude{} + } + a.includeExclude.ExcludeValues = append(a.includeExclude.ExcludeValues, values...) + return a +} + +func (a *SignificantTextAggregation) Partition(p int) *SignificantTextAggregation { + if a.includeExclude == nil { + a.includeExclude = &TermsAggregationIncludeExclude{} + } + a.includeExclude.Partition = p + return a +} + +func (a *SignificantTextAggregation) NumPartitions(n int) *SignificantTextAggregation { + if a.includeExclude == nil { + a.includeExclude = &TermsAggregationIncludeExclude{} + } + a.includeExclude.NumPartitions = n + return a +} + +func (a *SignificantTextAggregation) Source() (interface{}, error) { + // Example: + // { + // "query" : { + // "match" : {"content" : "Bird flu"} + // }, + // "aggregations" : { + // "my_sample" : { + // "sampler": { + // "shard_size" : 100 + // }, + // "aggregations": { + // "keywords" : { + // "significant_text" : { "field" : "content" } + // } + // } + // } + // } + // } + // + // This method returns only the + // { "significant_text" : { "field" : "content" } + // part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["significant_text"] = opts + + if a.field != "" { + opts["field"] = a.field + } + if a.bucketCountThresholds != nil { + if a.bucketCountThresholds.RequiredSize != nil { + opts["size"] = (*a.bucketCountThresholds).RequiredSize + } + if a.bucketCountThresholds.ShardSize != nil { + opts["shard_size"] = (*a.bucketCountThresholds).ShardSize + } + if a.bucketCountThresholds.MinDocCount != nil { + opts["min_doc_count"] = (*a.bucketCountThresholds).MinDocCount + } + if a.bucketCountThresholds.ShardMinDocCount != nil { + opts["shard_min_doc_count"] = (*a.bucketCountThresholds).ShardMinDocCount + } + } + if a.filter != nil { + src, err := a.filter.Source() + if err != nil { + return nil, err + } + opts["background_filter"] = src + } + if a.significanceHeuristic != nil { + name := a.significanceHeuristic.Name() + src, err := a.significanceHeuristic.Source() + if err != nil { + return nil, err + } + opts[name] = src + } + // Include/Exclude + if ie := a.includeExclude; ie != nil { + // Include + if ie.Include != "" { + opts["include"] = ie.Include + } else if len(ie.IncludeValues) > 0 { + opts["include"] = ie.IncludeValues + } else if ie.NumPartitions > 0 { + inc := make(map[string]interface{}) + inc["partition"] = ie.Partition + inc["num_partitions"] = ie.NumPartitions + opts["include"] = inc + } + // Exclude + if ie.Exclude != "" { + opts["exclude"] = ie.Exclude + } else if len(ie.ExcludeValues) > 0 { + opts["exclude"] = ie.ExcludeValues + } + } + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_significant_text_test.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_significant_text_test.go new file mode 100644 index 0000000..53ac446 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_significant_text_test.go @@ -0,0 +1,66 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestSignificantTextAggregation(t *testing.T) { + agg := NewSignificantTextAggregation().Field("content") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"significant_text":{"field":"content"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSignificantTextAggregationWithArgs(t *testing.T) { + agg := NewSignificantTextAggregation(). + Field("content"). + ShardSize(5). + MinDocCount(10). + BackgroundFilter(NewTermQuery("city", "London")) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"significant_text":{"background_filter":{"term":{"city":"London"}},"field":"content","min_doc_count":10,"shard_size":5}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSignificantTextAggregationWithMetaData(t *testing.T) { + agg := NewSignificantTextAggregation().Field("content") + agg = agg.Meta(map[string]interface{}{"name": "Oliver"}) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"meta":{"name":"Oliver"},"significant_text":{"field":"content"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_terms.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_terms.go new file mode 100644 index 0000000..6f66d5f --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_terms.go @@ -0,0 +1,369 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// TermsAggregation is a multi-bucket value source based aggregation +// where buckets are dynamically built - one per unique value. +// +// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/6.2/search-aggregations-bucket-terms-aggregation.html +type TermsAggregation struct { + field string + script *Script + missing interface{} + subAggregations map[string]Aggregation + meta map[string]interface{} + + size *int + shardSize *int + requiredSize *int + minDocCount *int + shardMinDocCount *int + valueType string + includeExclude *TermsAggregationIncludeExclude + executionHint string + collectionMode string + showTermDocCountError *bool + order []TermsOrder +} + +func NewTermsAggregation() *TermsAggregation { + return &TermsAggregation{ + subAggregations: make(map[string]Aggregation, 0), + } +} + +func (a *TermsAggregation) Field(field string) *TermsAggregation { + a.field = field + return a +} + +func (a *TermsAggregation) Script(script *Script) *TermsAggregation { + a.script = script + return a +} + +// Missing configures the value to use when documents miss a value. +func (a *TermsAggregation) Missing(missing interface{}) *TermsAggregation { + a.missing = missing + return a +} + +func (a *TermsAggregation) SubAggregation(name string, subAggregation Aggregation) *TermsAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *TermsAggregation) Meta(metaData map[string]interface{}) *TermsAggregation { + a.meta = metaData + return a +} + +func (a *TermsAggregation) Size(size int) *TermsAggregation { + a.size = &size + return a +} + +func (a *TermsAggregation) RequiredSize(requiredSize int) *TermsAggregation { + a.requiredSize = &requiredSize + return a +} + +func (a *TermsAggregation) ShardSize(shardSize int) *TermsAggregation { + a.shardSize = &shardSize + return a +} + +func (a *TermsAggregation) MinDocCount(minDocCount int) *TermsAggregation { + a.minDocCount = &minDocCount + return a +} + +func (a *TermsAggregation) ShardMinDocCount(shardMinDocCount int) *TermsAggregation { + a.shardMinDocCount = &shardMinDocCount + return a +} + +func (a *TermsAggregation) Include(regexp string) *TermsAggregation { + if a.includeExclude == nil { + a.includeExclude = &TermsAggregationIncludeExclude{} + } + a.includeExclude.Include = regexp + return a +} + +func (a *TermsAggregation) IncludeValues(values ...interface{}) *TermsAggregation { + if a.includeExclude == nil { + a.includeExclude = &TermsAggregationIncludeExclude{} + } + a.includeExclude.IncludeValues = append(a.includeExclude.IncludeValues, values...) + return a +} + +func (a *TermsAggregation) Exclude(regexp string) *TermsAggregation { + if a.includeExclude == nil { + a.includeExclude = &TermsAggregationIncludeExclude{} + } + a.includeExclude.Exclude = regexp + return a +} + +func (a *TermsAggregation) ExcludeValues(values ...interface{}) *TermsAggregation { + if a.includeExclude == nil { + a.includeExclude = &TermsAggregationIncludeExclude{} + } + a.includeExclude.ExcludeValues = append(a.includeExclude.ExcludeValues, values...) + return a +} + +func (a *TermsAggregation) Partition(p int) *TermsAggregation { + if a.includeExclude == nil { + a.includeExclude = &TermsAggregationIncludeExclude{} + } + a.includeExclude.Partition = p + return a +} + +func (a *TermsAggregation) NumPartitions(n int) *TermsAggregation { + if a.includeExclude == nil { + a.includeExclude = &TermsAggregationIncludeExclude{} + } + a.includeExclude.NumPartitions = n + return a +} + +// ValueType can be string, long, or double. +func (a *TermsAggregation) ValueType(valueType string) *TermsAggregation { + a.valueType = valueType + return a +} + +func (a *TermsAggregation) Order(order string, asc bool) *TermsAggregation { + a.order = append(a.order, TermsOrder{Field: order, Ascending: asc}) + return a +} + +func (a *TermsAggregation) OrderByCount(asc bool) *TermsAggregation { + // "order" : { "_count" : "asc" } + a.order = append(a.order, TermsOrder{Field: "_count", Ascending: asc}) + return a +} + +func (a *TermsAggregation) OrderByCountAsc() *TermsAggregation { + return a.OrderByCount(true) +} + +func (a *TermsAggregation) OrderByCountDesc() *TermsAggregation { + return a.OrderByCount(false) +} + +func (a *TermsAggregation) OrderByTerm(asc bool) *TermsAggregation { + // "order" : { "_term" : "asc" } + a.order = append(a.order, TermsOrder{Field: "_term", Ascending: asc}) + return a +} + +func (a *TermsAggregation) OrderByTermAsc() *TermsAggregation { + return a.OrderByTerm(true) +} + +func (a *TermsAggregation) OrderByTermDesc() *TermsAggregation { + return a.OrderByTerm(false) +} + +// OrderByAggregation creates a bucket ordering strategy which sorts buckets +// based on a single-valued calc get. +func (a *TermsAggregation) OrderByAggregation(aggName string, asc bool) *TermsAggregation { + // { + // "aggs" : { + // "genders" : { + // "terms" : { + // "field" : "gender", + // "order" : { "avg_height" : "desc" } + // }, + // "aggs" : { + // "avg_height" : { "avg" : { "field" : "height" } } + // } + // } + // } + // } + a.order = append(a.order, TermsOrder{Field: aggName, Ascending: asc}) + return a +} + +// OrderByAggregationAndMetric creates a bucket ordering strategy which +// sorts buckets based on a multi-valued calc get. +func (a *TermsAggregation) OrderByAggregationAndMetric(aggName, metric string, asc bool) *TermsAggregation { + // { + // "aggs" : { + // "genders" : { + // "terms" : { + // "field" : "gender", + // "order" : { "height_stats.avg" : "desc" } + // }, + // "aggs" : { + // "height_stats" : { "stats" : { "field" : "height" } } + // } + // } + // } + // } + a.order = append(a.order, TermsOrder{Field: aggName + "." + metric, Ascending: asc}) + return a +} + +func (a *TermsAggregation) ExecutionHint(hint string) *TermsAggregation { + a.executionHint = hint + return a +} + +// Collection mode can be depth_first or breadth_first as of 1.4.0. +func (a *TermsAggregation) CollectionMode(collectionMode string) *TermsAggregation { + a.collectionMode = collectionMode + return a +} + +func (a *TermsAggregation) ShowTermDocCountError(showTermDocCountError bool) *TermsAggregation { + a.showTermDocCountError = &showTermDocCountError + return a +} + +func (a *TermsAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs" : { + // "genders" : { + // "terms" : { "field" : "gender" } + // } + // } + // } + // This method returns only the { "terms" : { "field" : "gender" } } part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["terms"] = opts + + // ValuesSourceAggregationBuilder + if a.field != "" { + opts["field"] = a.field + } + if a.script != nil { + src, err := a.script.Source() + if err != nil { + return nil, err + } + opts["script"] = src + } + if a.missing != nil { + opts["missing"] = a.missing + } + + // TermsBuilder + if a.size != nil && *a.size >= 0 { + opts["size"] = *a.size + } + if a.shardSize != nil && *a.shardSize >= 0 { + opts["shard_size"] = *a.shardSize + } + if a.requiredSize != nil && *a.requiredSize >= 0 { + opts["required_size"] = *a.requiredSize + } + if a.minDocCount != nil && *a.minDocCount >= 0 { + opts["min_doc_count"] = *a.minDocCount + } + if a.shardMinDocCount != nil && *a.shardMinDocCount >= 0 { + opts["shard_min_doc_count"] = *a.shardMinDocCount + } + if a.showTermDocCountError != nil { + opts["show_term_doc_count_error"] = *a.showTermDocCountError + } + if a.collectionMode != "" { + opts["collect_mode"] = a.collectionMode + } + if a.valueType != "" { + opts["value_type"] = a.valueType + } + if len(a.order) > 0 { + var orderSlice []interface{} + for _, order := range a.order { + src, err := order.Source() + if err != nil { + return nil, err + } + orderSlice = append(orderSlice, src) + } + opts["order"] = orderSlice + } + // Include/Exclude + if ie := a.includeExclude; ie != nil { + // Include + if ie.Include != "" { + opts["include"] = ie.Include + } else if len(ie.IncludeValues) > 0 { + opts["include"] = ie.IncludeValues + } else if ie.NumPartitions > 0 { + inc := make(map[string]interface{}) + inc["partition"] = ie.Partition + inc["num_partitions"] = ie.NumPartitions + opts["include"] = inc + } + // Exclude + if ie.Exclude != "" { + opts["exclude"] = ie.Exclude + } else if len(ie.ExcludeValues) > 0 { + opts["exclude"] = ie.ExcludeValues + } + } + + if a.executionHint != "" { + opts["execution_hint"] = a.executionHint + } + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} + +// TermsAggregationIncludeExclude allows for include/exclude in a TermsAggregation. +type TermsAggregationIncludeExclude struct { + Include string + Exclude string + IncludeValues []interface{} + ExcludeValues []interface{} + Partition int + NumPartitions int +} + +// TermsOrder specifies a single order field for a terms aggregation. +type TermsOrder struct { + Field string + Ascending bool +} + +// Source returns serializable JSON of the TermsOrder. +func (order *TermsOrder) Source() (interface{}, error) { + source := make(map[string]string) + if order.Ascending { + source[order.Field] = "asc" + } else { + source[order.Field] = "desc" + } + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_bucket_terms_test.go b/vendor/github.com/olivere/elastic/search_aggs_bucket_terms_test.go new file mode 100644 index 0000000..351cbf6 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_bucket_terms_test.go @@ -0,0 +1,155 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestTermsAggregation(t *testing.T) { + agg := NewTermsAggregation().Field("gender").Size(10).OrderByTermDesc() + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"terms":{"field":"gender","order":[{"_term":"desc"}],"size":10}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestTermsAggregationWithSubAggregation(t *testing.T) { + subAgg := NewAvgAggregation().Field("height") + agg := NewTermsAggregation().Field("gender").Size(10). + OrderByAggregation("avg_height", false) + agg = agg.SubAggregation("avg_height", subAgg) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"aggregations":{"avg_height":{"avg":{"field":"height"}}},"terms":{"field":"gender","order":[{"avg_height":"desc"}],"size":10}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestTermsAggregationWithMultipleSubAggregation(t *testing.T) { + subAgg1 := NewAvgAggregation().Field("height") + subAgg2 := NewAvgAggregation().Field("width") + agg := NewTermsAggregation().Field("gender").Size(10). + OrderByAggregation("avg_height", false) + agg = agg.SubAggregation("avg_height", subAgg1) + agg = agg.SubAggregation("avg_width", subAgg2) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"aggregations":{"avg_height":{"avg":{"field":"height"}},"avg_width":{"avg":{"field":"width"}}},"terms":{"field":"gender","order":[{"avg_height":"desc"}],"size":10}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestTermsAggregationWithMetaData(t *testing.T) { + agg := NewTermsAggregation().Field("gender").Size(10).OrderByTermDesc() + agg = agg.Meta(map[string]interface{}{"name": "Oliver"}) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"meta":{"name":"Oliver"},"terms":{"field":"gender","order":[{"_term":"desc"}],"size":10}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestTermsAggregationWithMissing(t *testing.T) { + agg := NewTermsAggregation().Field("gender").Size(10).Missing("n/a") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"terms":{"field":"gender","missing":"n/a","size":10}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestTermsAggregationWithIncludeExclude(t *testing.T) { + agg := NewTermsAggregation().Field("tags").Include(".*sport.*").Exclude("water_.*") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"terms":{"exclude":"water_.*","field":"tags","include":".*sport.*"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestTermsAggregationWithIncludeExcludeValues(t *testing.T) { + agg := NewTermsAggregation().Field("make").IncludeValues("mazda", "honda").ExcludeValues("rover", "jensen") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"terms":{"exclude":["rover","jensen"],"field":"make","include":["mazda","honda"]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestTermsAggregationWithPartitions(t *testing.T) { + agg := NewTermsAggregation().Field("account_id").Partition(0).NumPartitions(20) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"terms":{"field":"account_id","include":{"num_partitions":20,"partition":0}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_matrix_stats.go b/vendor/github.com/olivere/elastic/search_aggs_matrix_stats.go new file mode 100644 index 0000000..fe96d1e --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_matrix_stats.go @@ -0,0 +1,126 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// MatrixMatrixStatsAggregation is a multi-value metrics aggregation +// that computes stats over numeric values extracted from the +// aggregated documents. These values can be extracted either from +// specific numeric fields in the documents, or be generated by a provided script. +// +// The stats that are returned consist of: min, max, sum, count and avg. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-stats-aggregation.html +// for details. +type MatrixStatsAggregation struct { + fields []string + missing interface{} + format string + valueType interface{} + mode string + subAggregations map[string]Aggregation + meta map[string]interface{} +} + +// NewMatrixStatsAggregation initializes a new MatrixStatsAggregation. +func NewMatrixStatsAggregation() *MatrixStatsAggregation { + return &MatrixStatsAggregation{ + subAggregations: make(map[string]Aggregation), + } +} + +func (a *MatrixStatsAggregation) Fields(fields ...string) *MatrixStatsAggregation { + a.fields = append(a.fields, fields...) + return a +} + +// Missing configures the value to use when documents miss a value. +func (a *MatrixStatsAggregation) Missing(missing interface{}) *MatrixStatsAggregation { + a.missing = missing + return a +} + +// Mode specifies how to operate. Valid values are: sum, avg, median, min, or max. +func (a *MatrixStatsAggregation) Mode(mode string) *MatrixStatsAggregation { + a.mode = mode + return a +} + +func (a *MatrixStatsAggregation) Format(format string) *MatrixStatsAggregation { + a.format = format + return a +} + +func (a *MatrixStatsAggregation) ValueType(valueType interface{}) *MatrixStatsAggregation { + a.valueType = valueType + return a +} + +func (a *MatrixStatsAggregation) SubAggregation(name string, subAggregation Aggregation) *MatrixStatsAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *MatrixStatsAggregation) Meta(metaData map[string]interface{}) *MatrixStatsAggregation { + a.meta = metaData + return a +} + +// Source returns the JSON to serialize into the request, or an error. +func (a *MatrixStatsAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs" : { + // "matrixstats" : { + // "matrix_stats" : { + // "fields" : ["poverty", "income"], + // "missing": {"income": 50000}, + // "mode": "avg", + // ... + // } + // } + // } + // } + // This method returns only the { "matrix_stats" : { ... } } part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["matrix_stats"] = opts + + // MatrixStatsAggregationBuilder + opts["fields"] = a.fields + if a.missing != nil { + opts["missing"] = a.missing + } + if a.format != "" { + opts["format"] = a.format + } + if a.valueType != nil { + opts["value_type"] = a.valueType + } + if a.mode != "" { + opts["mode"] = a.mode + } + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_matrix_stats_test.go b/vendor/github.com/olivere/elastic/search_aggs_matrix_stats_test.go new file mode 100644 index 0000000..28138fe --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_matrix_stats_test.go @@ -0,0 +1,53 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestMatrixStatsAggregation(t *testing.T) { + agg := NewMatrixStatsAggregation(). + Fields("poverty", "income"). + Missing(map[string]interface{}{ + "income": 50000, + }). + Mode("avg"). + Format("0000.0"). + ValueType("double") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"matrix_stats":{"fields":["poverty","income"],"format":"0000.0","missing":{"income":50000},"mode":"avg","value_type":"double"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestMatrixStatsAggregationWithMetaData(t *testing.T) { + agg := NewMatrixStatsAggregation(). + Fields("poverty", "income"). + Meta(map[string]interface{}{"name": "Oliver"}) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"matrix_stats":{"fields":["poverty","income"]},"meta":{"name":"Oliver"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_metrics_avg.go b/vendor/github.com/olivere/elastic/search_aggs_metrics_avg.go new file mode 100644 index 0000000..6fd9420 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_metrics_avg.go @@ -0,0 +1,102 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// AvgAggregation is a single-value metrics aggregation that computes +// the average of numeric values that are extracted from the +// aggregated documents. These values can be extracted either from +// specific numeric fields in the documents, or be generated by +// a provided script. +// +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-avg-aggregation.html +type AvgAggregation struct { + field string + script *Script + format string + subAggregations map[string]Aggregation + meta map[string]interface{} +} + +func NewAvgAggregation() *AvgAggregation { + return &AvgAggregation{ + subAggregations: make(map[string]Aggregation), + } +} + +func (a *AvgAggregation) Field(field string) *AvgAggregation { + a.field = field + return a +} + +func (a *AvgAggregation) Script(script *Script) *AvgAggregation { + a.script = script + return a +} + +func (a *AvgAggregation) Format(format string) *AvgAggregation { + a.format = format + return a +} + +func (a *AvgAggregation) SubAggregation(name string, subAggregation Aggregation) *AvgAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *AvgAggregation) Meta(metaData map[string]interface{}) *AvgAggregation { + a.meta = metaData + return a +} + +func (a *AvgAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs" : { + // "avg_grade" : { "avg" : { "field" : "grade" } } + // } + // } + // This method returns only the { "avg" : { "field" : "grade" } } part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["avg"] = opts + + // ValuesSourceAggregationBuilder + if a.field != "" { + opts["field"] = a.field + } + if a.script != nil { + src, err := a.script.Source() + if err != nil { + return nil, err + } + opts["script"] = src + } + + if a.format != "" { + opts["format"] = a.format + } + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_metrics_avg_test.go b/vendor/github.com/olivere/elastic/search_aggs_metrics_avg_test.go new file mode 100644 index 0000000..784ff45 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_metrics_avg_test.go @@ -0,0 +1,61 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestAvgAggregation(t *testing.T) { + agg := NewAvgAggregation().Field("grade") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"avg":{"field":"grade"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestAvgAggregationWithFormat(t *testing.T) { + agg := NewAvgAggregation().Field("grade").Format("000.0") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"avg":{"field":"grade","format":"000.0"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestAvgAggregationWithMetaData(t *testing.T) { + agg := NewAvgAggregation().Field("grade").Meta(map[string]interface{}{"name": "Oliver"}) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"avg":{"field":"grade"},"meta":{"name":"Oliver"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_metrics_cardinality.go b/vendor/github.com/olivere/elastic/search_aggs_metrics_cardinality.go new file mode 100644 index 0000000..e50d786 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_metrics_cardinality.go @@ -0,0 +1,120 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// CardinalityAggregation is a single-value metrics aggregation that +// calculates an approximate count of distinct values. +// Values can be extracted either from specific fields in the document +// or generated by a script. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-cardinality-aggregation.html +type CardinalityAggregation struct { + field string + script *Script + format string + subAggregations map[string]Aggregation + meta map[string]interface{} + precisionThreshold *int64 + rehash *bool +} + +func NewCardinalityAggregation() *CardinalityAggregation { + return &CardinalityAggregation{ + subAggregations: make(map[string]Aggregation), + } +} + +func (a *CardinalityAggregation) Field(field string) *CardinalityAggregation { + a.field = field + return a +} + +func (a *CardinalityAggregation) Script(script *Script) *CardinalityAggregation { + a.script = script + return a +} + +func (a *CardinalityAggregation) Format(format string) *CardinalityAggregation { + a.format = format + return a +} + +func (a *CardinalityAggregation) SubAggregation(name string, subAggregation Aggregation) *CardinalityAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *CardinalityAggregation) Meta(metaData map[string]interface{}) *CardinalityAggregation { + a.meta = metaData + return a +} + +func (a *CardinalityAggregation) PrecisionThreshold(threshold int64) *CardinalityAggregation { + a.precisionThreshold = &threshold + return a +} + +func (a *CardinalityAggregation) Rehash(rehash bool) *CardinalityAggregation { + a.rehash = &rehash + return a +} + +func (a *CardinalityAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs" : { + // "author_count" : { + // "cardinality" : { "field" : "author" } + // } + // } + // } + // This method returns only the "cardinality" : { "field" : "author" } part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["cardinality"] = opts + + // ValuesSourceAggregationBuilder + if a.field != "" { + opts["field"] = a.field + } + if a.script != nil { + src, err := a.script.Source() + if err != nil { + return nil, err + } + opts["script"] = src + } + + if a.format != "" { + opts["format"] = a.format + } + if a.precisionThreshold != nil { + opts["precision_threshold"] = *a.precisionThreshold + } + if a.rehash != nil { + opts["rehash"] = *a.rehash + } + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_metrics_cardinality_test.go b/vendor/github.com/olivere/elastic/search_aggs_metrics_cardinality_test.go new file mode 100644 index 0000000..b5f8490 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_metrics_cardinality_test.go @@ -0,0 +1,78 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestCardinalityAggregation(t *testing.T) { + agg := NewCardinalityAggregation().Field("author.hash") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"cardinality":{"field":"author.hash"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestCardinalityAggregationWithOptions(t *testing.T) { + agg := NewCardinalityAggregation().Field("author.hash").PrecisionThreshold(100).Rehash(true) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"cardinality":{"field":"author.hash","precision_threshold":100,"rehash":true}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestCardinalityAggregationWithFormat(t *testing.T) { + agg := NewCardinalityAggregation().Field("author.hash").Format("00000") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"cardinality":{"field":"author.hash","format":"00000"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestCardinalityAggregationWithMetaData(t *testing.T) { + agg := NewCardinalityAggregation().Field("author.hash").Meta(map[string]interface{}{"name": "Oliver"}) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"cardinality":{"field":"author.hash"},"meta":{"name":"Oliver"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_metrics_extended_stats.go b/vendor/github.com/olivere/elastic/search_aggs_metrics_extended_stats.go new file mode 100644 index 0000000..425444d --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_metrics_extended_stats.go @@ -0,0 +1,99 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// ExtendedExtendedStatsAggregation is a multi-value metrics aggregation that +// computes stats over numeric values extracted from the aggregated documents. +// These values can be extracted either from specific numeric fields +// in the documents, or be generated by a provided script. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-extendedstats-aggregation.html +type ExtendedStatsAggregation struct { + field string + script *Script + format string + subAggregations map[string]Aggregation + meta map[string]interface{} +} + +func NewExtendedStatsAggregation() *ExtendedStatsAggregation { + return &ExtendedStatsAggregation{ + subAggregations: make(map[string]Aggregation), + } +} + +func (a *ExtendedStatsAggregation) Field(field string) *ExtendedStatsAggregation { + a.field = field + return a +} + +func (a *ExtendedStatsAggregation) Script(script *Script) *ExtendedStatsAggregation { + a.script = script + return a +} + +func (a *ExtendedStatsAggregation) Format(format string) *ExtendedStatsAggregation { + a.format = format + return a +} + +func (a *ExtendedStatsAggregation) SubAggregation(name string, subAggregation Aggregation) *ExtendedStatsAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *ExtendedStatsAggregation) Meta(metaData map[string]interface{}) *ExtendedStatsAggregation { + a.meta = metaData + return a +} + +func (a *ExtendedStatsAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs" : { + // "grades_stats" : { "extended_stats" : { "field" : "grade" } } + // } + // } + // This method returns only the { "extended_stats" : { "field" : "grade" } } part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["extended_stats"] = opts + + // ValuesSourceAggregationBuilder + if a.field != "" { + opts["field"] = a.field + } + if a.script != nil { + src, err := a.script.Source() + if err != nil { + return nil, err + } + opts["script"] = src + } + if a.format != "" { + opts["format"] = a.format + } + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_metrics_extended_stats_test.go b/vendor/github.com/olivere/elastic/search_aggs_metrics_extended_stats_test.go new file mode 100644 index 0000000..7648963 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_metrics_extended_stats_test.go @@ -0,0 +1,44 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestExtendedStatsAggregation(t *testing.T) { + agg := NewExtendedStatsAggregation().Field("grade") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"extended_stats":{"field":"grade"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestExtendedStatsAggregationWithFormat(t *testing.T) { + agg := NewExtendedStatsAggregation().Field("grade").Format("000.0") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"extended_stats":{"field":"grade","format":"000.0"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_metrics_geo_bounds.go b/vendor/github.com/olivere/elastic/search_aggs_metrics_geo_bounds.go new file mode 100644 index 0000000..3a322ed --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_metrics_geo_bounds.go @@ -0,0 +1,105 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// GeoBoundsAggregation is a metric aggregation that computes the +// bounding box containing all geo_point values for a field. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-geobounds-aggregation.html +type GeoBoundsAggregation struct { + field string + script *Script + wrapLongitude *bool + subAggregations map[string]Aggregation + meta map[string]interface{} +} + +func NewGeoBoundsAggregation() *GeoBoundsAggregation { + return &GeoBoundsAggregation{ + subAggregations: make(map[string]Aggregation), + } +} + +func (a *GeoBoundsAggregation) Field(field string) *GeoBoundsAggregation { + a.field = field + return a +} + +func (a *GeoBoundsAggregation) Script(script *Script) *GeoBoundsAggregation { + a.script = script + return a +} + +func (a *GeoBoundsAggregation) WrapLongitude(wrapLongitude bool) *GeoBoundsAggregation { + a.wrapLongitude = &wrapLongitude + return a +} + +func (a *GeoBoundsAggregation) SubAggregation(name string, subAggregation Aggregation) *GeoBoundsAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *GeoBoundsAggregation) Meta(metaData map[string]interface{}) *GeoBoundsAggregation { + a.meta = metaData + return a +} + +func (a *GeoBoundsAggregation) Source() (interface{}, error) { + // Example: + // { + // "query" : { + // "match" : { "business_type" : "shop" } + // }, + // "aggs" : { + // "viewport" : { + // "geo_bounds" : { + // "field" : "location" + // "wrap_longitude" : "true" + // } + // } + // } + // } + // + // This method returns only the { "geo_bounds" : { ... } } part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["geo_bounds"] = opts + + if a.field != "" { + opts["field"] = a.field + } + if a.script != nil { + src, err := a.script.Source() + if err != nil { + return nil, err + } + opts["script"] = src + } + if a.wrapLongitude != nil { + opts["wrap_longitude"] = *a.wrapLongitude + } + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_metrics_geo_bounds_test.go b/vendor/github.com/olivere/elastic/search_aggs_metrics_geo_bounds_test.go new file mode 100644 index 0000000..ea713c6 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_metrics_geo_bounds_test.go @@ -0,0 +1,61 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestGeoBoundsAggregation(t *testing.T) { + agg := NewGeoBoundsAggregation().Field("location") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"geo_bounds":{"field":"location"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestGeoBoundsAggregationWithWrapLongitude(t *testing.T) { + agg := NewGeoBoundsAggregation().Field("location").WrapLongitude(true) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"geo_bounds":{"field":"location","wrap_longitude":true}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestGeoBoundsAggregationWithMetaData(t *testing.T) { + agg := NewGeoBoundsAggregation().Field("location").Meta(map[string]interface{}{"name": "Oliver"}) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"geo_bounds":{"field":"location"},"meta":{"name":"Oliver"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_metrics_geo_centroid.go b/vendor/github.com/olivere/elastic/search_aggs_metrics_geo_centroid.go new file mode 100644 index 0000000..23a0f78 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_metrics_geo_centroid.go @@ -0,0 +1,95 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// GeoCentroidAggregation is a metric aggregation that computes the weighted centroid +// from all coordinate values for a Geo-point datatype field. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-geocentroid-aggregation.html +type GeoCentroidAggregation struct { + field string + script *Script + subAggregations map[string]Aggregation + meta map[string]interface{} +} + +func NewGeoCentroidAggregation() *GeoCentroidAggregation { + return &GeoCentroidAggregation{ + subAggregations: make(map[string]Aggregation), + } +} + +func (a *GeoCentroidAggregation) Field(field string) *GeoCentroidAggregation { + a.field = field + return a +} + +func (a *GeoCentroidAggregation) Script(script *Script) *GeoCentroidAggregation { + a.script = script + return a +} + +func (a *GeoCentroidAggregation) SubAggregation(name string, subAggregation Aggregation) *GeoCentroidAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *GeoCentroidAggregation) Meta(metaData map[string]interface{}) *GeoCentroidAggregation { + a.meta = metaData + return a +} + +func (a *GeoCentroidAggregation) Source() (interface{}, error) { + // Example: + // { + // "query" : { + // "match" : { "business_type" : "shop" } + // }, + // "aggs" : { + // "centroid" : { + // "geo_centroid" : { + // "field" : "location" + // } + // } + // } + // } + // + // This method returns only the { "geo_centroid" : { ... } } part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["geo_centroid"] = opts + + if a.field != "" { + opts["field"] = a.field + } + if a.script != nil { + src, err := a.script.Source() + if err != nil { + return nil, err + } + opts["script"] = src + } + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_metrics_geo_centroid_test.go b/vendor/github.com/olivere/elastic/search_aggs_metrics_geo_centroid_test.go new file mode 100644 index 0000000..7584e41 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_metrics_geo_centroid_test.go @@ -0,0 +1,44 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestGeoCentroidAggregation(t *testing.T) { + agg := NewGeoCentroidAggregation().Field("location") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"geo_centroid":{"field":"location"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestGeoCentroidAggregationWithMetaData(t *testing.T) { + agg := NewGeoCentroidAggregation().Field("location").Meta(map[string]interface{}{"name": "Oliver"}) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"geo_centroid":{"field":"location"},"meta":{"name":"Oliver"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_metrics_max.go b/vendor/github.com/olivere/elastic/search_aggs_metrics_max.go new file mode 100644 index 0000000..7d2c39f --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_metrics_max.go @@ -0,0 +1,99 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// MaxAggregation is a single-value metrics aggregation that keeps track and +// returns the maximum value among the numeric values extracted from +// the aggregated documents. These values can be extracted either from +// specific numeric fields in the documents, or be generated by +// a provided script. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-max-aggregation.html +type MaxAggregation struct { + field string + script *Script + format string + subAggregations map[string]Aggregation + meta map[string]interface{} +} + +func NewMaxAggregation() *MaxAggregation { + return &MaxAggregation{ + subAggregations: make(map[string]Aggregation), + } +} + +func (a *MaxAggregation) Field(field string) *MaxAggregation { + a.field = field + return a +} + +func (a *MaxAggregation) Script(script *Script) *MaxAggregation { + a.script = script + return a +} + +func (a *MaxAggregation) Format(format string) *MaxAggregation { + a.format = format + return a +} + +func (a *MaxAggregation) SubAggregation(name string, subAggregation Aggregation) *MaxAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *MaxAggregation) Meta(metaData map[string]interface{}) *MaxAggregation { + a.meta = metaData + return a +} +func (a *MaxAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs" : { + // "max_price" : { "max" : { "field" : "price" } } + // } + // } + // This method returns only the { "max" : { "field" : "price" } } part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["max"] = opts + + // ValuesSourceAggregationBuilder + if a.field != "" { + opts["field"] = a.field + } + if a.script != nil { + src, err := a.script.Source() + if err != nil { + return nil, err + } + opts["script"] = src + } + if a.format != "" { + opts["format"] = a.format + } + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_metrics_max_test.go b/vendor/github.com/olivere/elastic/search_aggs_metrics_max_test.go new file mode 100644 index 0000000..773cc2e --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_metrics_max_test.go @@ -0,0 +1,61 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestMaxAggregation(t *testing.T) { + agg := NewMaxAggregation().Field("price") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"max":{"field":"price"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestMaxAggregationWithFormat(t *testing.T) { + agg := NewMaxAggregation().Field("price").Format("00000.00") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"max":{"field":"price","format":"00000.00"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestMaxAggregationWithMetaData(t *testing.T) { + agg := NewMaxAggregation().Field("price").Meta(map[string]interface{}{"name": "Oliver"}) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"max":{"field":"price"},"meta":{"name":"Oliver"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_metrics_min.go b/vendor/github.com/olivere/elastic/search_aggs_metrics_min.go new file mode 100644 index 0000000..8c963d1 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_metrics_min.go @@ -0,0 +1,100 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// MinAggregation is a single-value metrics aggregation that keeps track and +// returns the minimum value among numeric values extracted from the +// aggregated documents. These values can be extracted either from +// specific numeric fields in the documents, or be generated by a +// provided script. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-min-aggregation.html +type MinAggregation struct { + field string + script *Script + format string + subAggregations map[string]Aggregation + meta map[string]interface{} +} + +func NewMinAggregation() *MinAggregation { + return &MinAggregation{ + subAggregations: make(map[string]Aggregation), + } +} + +func (a *MinAggregation) Field(field string) *MinAggregation { + a.field = field + return a +} + +func (a *MinAggregation) Script(script *Script) *MinAggregation { + a.script = script + return a +} + +func (a *MinAggregation) Format(format string) *MinAggregation { + a.format = format + return a +} + +func (a *MinAggregation) SubAggregation(name string, subAggregation Aggregation) *MinAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *MinAggregation) Meta(metaData map[string]interface{}) *MinAggregation { + a.meta = metaData + return a +} + +func (a *MinAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs" : { + // "min_price" : { "min" : { "field" : "price" } } + // } + // } + // This method returns only the { "min" : { "field" : "price" } } part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["min"] = opts + + // ValuesSourceAggregationBuilder + if a.field != "" { + opts["field"] = a.field + } + if a.script != nil { + src, err := a.script.Source() + if err != nil { + return nil, err + } + opts["script"] = src + } + if a.format != "" { + opts["format"] = a.format + } + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_metrics_min_test.go b/vendor/github.com/olivere/elastic/search_aggs_metrics_min_test.go new file mode 100644 index 0000000..fcde381 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_metrics_min_test.go @@ -0,0 +1,61 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestMinAggregation(t *testing.T) { + agg := NewMinAggregation().Field("price") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"min":{"field":"price"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestMinAggregationWithFormat(t *testing.T) { + agg := NewMinAggregation().Field("price").Format("00000.00") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"min":{"field":"price","format":"00000.00"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestMinAggregationWithMetaData(t *testing.T) { + agg := NewMinAggregation().Field("price").Meta(map[string]interface{}{"name": "Oliver"}) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"meta":{"name":"Oliver"},"min":{"field":"price"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_metrics_percentile_ranks.go b/vendor/github.com/olivere/elastic/search_aggs_metrics_percentile_ranks.go new file mode 100644 index 0000000..684ffc8 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_metrics_percentile_ranks.go @@ -0,0 +1,131 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// PercentileRanksAggregation +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-percentile-rank-aggregation.html +type PercentileRanksAggregation struct { + field string + script *Script + format string + subAggregations map[string]Aggregation + meta map[string]interface{} + values []float64 + compression *float64 + estimator string +} + +func NewPercentileRanksAggregation() *PercentileRanksAggregation { + return &PercentileRanksAggregation{ + subAggregations: make(map[string]Aggregation), + values: make([]float64, 0), + } +} + +func (a *PercentileRanksAggregation) Field(field string) *PercentileRanksAggregation { + a.field = field + return a +} + +func (a *PercentileRanksAggregation) Script(script *Script) *PercentileRanksAggregation { + a.script = script + return a +} + +func (a *PercentileRanksAggregation) Format(format string) *PercentileRanksAggregation { + a.format = format + return a +} + +func (a *PercentileRanksAggregation) SubAggregation(name string, subAggregation Aggregation) *PercentileRanksAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *PercentileRanksAggregation) Meta(metaData map[string]interface{}) *PercentileRanksAggregation { + a.meta = metaData + return a +} + +func (a *PercentileRanksAggregation) Values(values ...float64) *PercentileRanksAggregation { + a.values = append(a.values, values...) + return a +} + +func (a *PercentileRanksAggregation) Compression(compression float64) *PercentileRanksAggregation { + a.compression = &compression + return a +} + +func (a *PercentileRanksAggregation) Estimator(estimator string) *PercentileRanksAggregation { + a.estimator = estimator + return a +} + +func (a *PercentileRanksAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs" : { + // "load_time_outlier" : { + // "percentile_ranks" : { + // "field" : "load_time" + // "values" : [15, 30] + // } + // } + // } + // } + // This method returns only the + // { "percentile_ranks" : { "field" : "load_time", "values" : [15, 30] } } + // part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["percentile_ranks"] = opts + + // ValuesSourceAggregationBuilder + if a.field != "" { + opts["field"] = a.field + } + if a.script != nil { + src, err := a.script.Source() + if err != nil { + return nil, err + } + opts["script"] = src + } + if a.format != "" { + opts["format"] = a.format + } + if len(a.values) > 0 { + opts["values"] = a.values + } + if a.compression != nil { + opts["compression"] = *a.compression + } + if a.estimator != "" { + opts["estimator"] = a.estimator + } + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_metrics_percentile_ranks_test.go b/vendor/github.com/olivere/elastic/search_aggs_metrics_percentile_ranks_test.go new file mode 100644 index 0000000..a4bac02 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_metrics_percentile_ranks_test.go @@ -0,0 +1,78 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestPercentileRanksAggregation(t *testing.T) { + agg := NewPercentileRanksAggregation().Field("load_time") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"percentile_ranks":{"field":"load_time"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestPercentileRanksAggregationWithCustomValues(t *testing.T) { + agg := NewPercentileRanksAggregation().Field("load_time").Values(15, 30) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"percentile_ranks":{"field":"load_time","values":[15,30]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestPercentileRanksAggregationWithFormat(t *testing.T) { + agg := NewPercentileRanksAggregation().Field("load_time").Format("000.0") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"percentile_ranks":{"field":"load_time","format":"000.0"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestPercentileRanksAggregationWithMetaData(t *testing.T) { + agg := NewPercentileRanksAggregation().Field("load_time").Meta(map[string]interface{}{"name": "Oliver"}) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"meta":{"name":"Oliver"},"percentile_ranks":{"field":"load_time"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_metrics_percentiles.go b/vendor/github.com/olivere/elastic/search_aggs_metrics_percentiles.go new file mode 100644 index 0000000..1be079f --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_metrics_percentiles.go @@ -0,0 +1,135 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// PercentilesAggregation is a multi-value metrics aggregation +// that calculates one or more percentiles over numeric values +// extracted from the aggregated documents. These values can +// be extracted either from specific numeric fields in the documents, +// or be generated by a provided script. +// +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-percentile-aggregation.html +type PercentilesAggregation struct { + field string + script *Script + format string + subAggregations map[string]Aggregation + meta map[string]interface{} + percentiles []float64 + compression *float64 + estimator string +} + +func NewPercentilesAggregation() *PercentilesAggregation { + return &PercentilesAggregation{ + subAggregations: make(map[string]Aggregation), + percentiles: make([]float64, 0), + } +} + +func (a *PercentilesAggregation) Field(field string) *PercentilesAggregation { + a.field = field + return a +} + +func (a *PercentilesAggregation) Script(script *Script) *PercentilesAggregation { + a.script = script + return a +} + +func (a *PercentilesAggregation) Format(format string) *PercentilesAggregation { + a.format = format + return a +} + +func (a *PercentilesAggregation) SubAggregation(name string, subAggregation Aggregation) *PercentilesAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *PercentilesAggregation) Meta(metaData map[string]interface{}) *PercentilesAggregation { + a.meta = metaData + return a +} + +func (a *PercentilesAggregation) Percentiles(percentiles ...float64) *PercentilesAggregation { + a.percentiles = append(a.percentiles, percentiles...) + return a +} + +func (a *PercentilesAggregation) Compression(compression float64) *PercentilesAggregation { + a.compression = &compression + return a +} + +func (a *PercentilesAggregation) Estimator(estimator string) *PercentilesAggregation { + a.estimator = estimator + return a +} + +func (a *PercentilesAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs" : { + // "load_time_outlier" : { + // "percentiles" : { + // "field" : "load_time" + // } + // } + // } + // } + // This method returns only the + // { "percentiles" : { "field" : "load_time" } } + // part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["percentiles"] = opts + + // ValuesSourceAggregationBuilder + if a.field != "" { + opts["field"] = a.field + } + if a.script != nil { + src, err := a.script.Source() + if err != nil { + return nil, err + } + opts["script"] = src + } + if a.format != "" { + opts["format"] = a.format + } + if len(a.percentiles) > 0 { + opts["percents"] = a.percentiles + } + if a.compression != nil { + opts["compression"] = *a.compression + } + if a.estimator != "" { + opts["estimator"] = a.estimator + } + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_metrics_percentiles_test.go b/vendor/github.com/olivere/elastic/search_aggs_metrics_percentiles_test.go new file mode 100644 index 0000000..93df1dd --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_metrics_percentiles_test.go @@ -0,0 +1,78 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestPercentilesAggregation(t *testing.T) { + agg := NewPercentilesAggregation().Field("price") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"percentiles":{"field":"price"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestPercentilesAggregationWithCustomPercents(t *testing.T) { + agg := NewPercentilesAggregation().Field("price").Percentiles(0.2, 0.5, 0.9) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"percentiles":{"field":"price","percents":[0.2,0.5,0.9]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestPercentilesAggregationWithFormat(t *testing.T) { + agg := NewPercentilesAggregation().Field("price").Format("00000.00") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"percentiles":{"field":"price","format":"00000.00"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestPercentilesAggregationWithMetaData(t *testing.T) { + agg := NewPercentilesAggregation().Field("price").Meta(map[string]interface{}{"name": "Oliver"}) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"meta":{"name":"Oliver"},"percentiles":{"field":"price"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_metrics_stats.go b/vendor/github.com/olivere/elastic/search_aggs_metrics_stats.go new file mode 100644 index 0000000..f193409 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_metrics_stats.go @@ -0,0 +1,99 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// StatsAggregation is a multi-value metrics aggregation that computes stats +// over numeric values extracted from the aggregated documents. +// These values can be extracted either from specific numeric fields +// in the documents, or be generated by a provided script. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-stats-aggregation.html +type StatsAggregation struct { + field string + script *Script + format string + subAggregations map[string]Aggregation + meta map[string]interface{} +} + +func NewStatsAggregation() *StatsAggregation { + return &StatsAggregation{ + subAggregations: make(map[string]Aggregation), + } +} + +func (a *StatsAggregation) Field(field string) *StatsAggregation { + a.field = field + return a +} + +func (a *StatsAggregation) Script(script *Script) *StatsAggregation { + a.script = script + return a +} + +func (a *StatsAggregation) Format(format string) *StatsAggregation { + a.format = format + return a +} + +func (a *StatsAggregation) SubAggregation(name string, subAggregation Aggregation) *StatsAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *StatsAggregation) Meta(metaData map[string]interface{}) *StatsAggregation { + a.meta = metaData + return a +} + +func (a *StatsAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs" : { + // "grades_stats" : { "stats" : { "field" : "grade" } } + // } + // } + // This method returns only the { "stats" : { "field" : "grade" } } part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["stats"] = opts + + // ValuesSourceAggregationBuilder + if a.field != "" { + opts["field"] = a.field + } + if a.script != nil { + src, err := a.script.Source() + if err != nil { + return nil, err + } + opts["script"] = src + } + if a.format != "" { + opts["format"] = a.format + } + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_metrics_stats_test.go b/vendor/github.com/olivere/elastic/search_aggs_metrics_stats_test.go new file mode 100644 index 0000000..5cff372 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_metrics_stats_test.go @@ -0,0 +1,61 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestStatsAggregation(t *testing.T) { + agg := NewStatsAggregation().Field("grade") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"stats":{"field":"grade"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestStatsAggregationWithFormat(t *testing.T) { + agg := NewStatsAggregation().Field("grade").Format("0000.0") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"stats":{"field":"grade","format":"0000.0"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestStatsAggregationWithMetaData(t *testing.T) { + agg := NewStatsAggregation().Field("grade").Meta(map[string]interface{}{"name": "Oliver"}) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"meta":{"name":"Oliver"},"stats":{"field":"grade"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_metrics_sum.go b/vendor/github.com/olivere/elastic/search_aggs_metrics_sum.go new file mode 100644 index 0000000..ebef150 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_metrics_sum.go @@ -0,0 +1,99 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// SumAggregation is a single-value metrics aggregation that sums up +// numeric values that are extracted from the aggregated documents. +// These values can be extracted either from specific numeric fields +// in the documents, or be generated by a provided script. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-sum-aggregation.html +type SumAggregation struct { + field string + script *Script + format string + subAggregations map[string]Aggregation + meta map[string]interface{} +} + +func NewSumAggregation() *SumAggregation { + return &SumAggregation{ + subAggregations: make(map[string]Aggregation), + } +} + +func (a *SumAggregation) Field(field string) *SumAggregation { + a.field = field + return a +} + +func (a *SumAggregation) Script(script *Script) *SumAggregation { + a.script = script + return a +} + +func (a *SumAggregation) Format(format string) *SumAggregation { + a.format = format + return a +} + +func (a *SumAggregation) SubAggregation(name string, subAggregation Aggregation) *SumAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *SumAggregation) Meta(metaData map[string]interface{}) *SumAggregation { + a.meta = metaData + return a +} + +func (a *SumAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs" : { + // "intraday_return" : { "sum" : { "field" : "change" } } + // } + // } + // This method returns only the { "sum" : { "field" : "change" } } part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["sum"] = opts + + // ValuesSourceAggregationBuilder + if a.field != "" { + opts["field"] = a.field + } + if a.script != nil { + src, err := a.script.Source() + if err != nil { + return nil, err + } + opts["script"] = src + } + if a.format != "" { + opts["format"] = a.format + } + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_metrics_sum_test.go b/vendor/github.com/olivere/elastic/search_aggs_metrics_sum_test.go new file mode 100644 index 0000000..ff0e425 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_metrics_sum_test.go @@ -0,0 +1,61 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestSumAggregation(t *testing.T) { + agg := NewSumAggregation().Field("price") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"sum":{"field":"price"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSumAggregationWithFormat(t *testing.T) { + agg := NewSumAggregation().Field("price").Format("00000.00") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"sum":{"field":"price","format":"00000.00"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSumAggregationWithMetaData(t *testing.T) { + agg := NewSumAggregation().Field("price").Meta(map[string]interface{}{"name": "Oliver"}) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"meta":{"name":"Oliver"},"sum":{"field":"price"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_metrics_top_hits.go b/vendor/github.com/olivere/elastic/search_aggs_metrics_top_hits.go new file mode 100644 index 0000000..a78e556 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_metrics_top_hits.go @@ -0,0 +1,143 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// TopHitsAggregation keeps track of the most relevant document +// being aggregated. This aggregator is intended to be used as a +// sub aggregator, so that the top matching documents +// can be aggregated per bucket. +// +// It can effectively be used to group result sets by certain fields via +// a bucket aggregator. One or more bucket aggregators determines by +// which properties a result set get sliced into. +// +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-top-hits-aggregation.html +type TopHitsAggregation struct { + searchSource *SearchSource +} + +func NewTopHitsAggregation() *TopHitsAggregation { + return &TopHitsAggregation{ + searchSource: NewSearchSource(), + } +} + +func (a *TopHitsAggregation) From(from int) *TopHitsAggregation { + a.searchSource = a.searchSource.From(from) + return a +} + +func (a *TopHitsAggregation) Size(size int) *TopHitsAggregation { + a.searchSource = a.searchSource.Size(size) + return a +} + +func (a *TopHitsAggregation) TrackScores(trackScores bool) *TopHitsAggregation { + a.searchSource = a.searchSource.TrackScores(trackScores) + return a +} + +func (a *TopHitsAggregation) Explain(explain bool) *TopHitsAggregation { + a.searchSource = a.searchSource.Explain(explain) + return a +} + +func (a *TopHitsAggregation) Version(version bool) *TopHitsAggregation { + a.searchSource = a.searchSource.Version(version) + return a +} + +func (a *TopHitsAggregation) NoStoredFields() *TopHitsAggregation { + a.searchSource = a.searchSource.NoStoredFields() + return a +} + +func (a *TopHitsAggregation) FetchSource(fetchSource bool) *TopHitsAggregation { + a.searchSource = a.searchSource.FetchSource(fetchSource) + return a +} + +func (a *TopHitsAggregation) FetchSourceContext(fetchSourceContext *FetchSourceContext) *TopHitsAggregation { + a.searchSource = a.searchSource.FetchSourceContext(fetchSourceContext) + return a +} + +func (a *TopHitsAggregation) DocvalueFields(docvalueFields ...string) *TopHitsAggregation { + a.searchSource = a.searchSource.DocvalueFields(docvalueFields...) + return a +} + +func (a *TopHitsAggregation) DocvalueField(docvalueField string) *TopHitsAggregation { + a.searchSource = a.searchSource.DocvalueField(docvalueField) + return a +} + +func (a *TopHitsAggregation) ScriptFields(scriptFields ...*ScriptField) *TopHitsAggregation { + a.searchSource = a.searchSource.ScriptFields(scriptFields...) + return a +} + +func (a *TopHitsAggregation) ScriptField(scriptField *ScriptField) *TopHitsAggregation { + a.searchSource = a.searchSource.ScriptField(scriptField) + return a +} + +func (a *TopHitsAggregation) Sort(field string, ascending bool) *TopHitsAggregation { + a.searchSource = a.searchSource.Sort(field, ascending) + return a +} + +func (a *TopHitsAggregation) SortWithInfo(info SortInfo) *TopHitsAggregation { + a.searchSource = a.searchSource.SortWithInfo(info) + return a +} + +func (a *TopHitsAggregation) SortBy(sorter ...Sorter) *TopHitsAggregation { + a.searchSource = a.searchSource.SortBy(sorter...) + return a +} + +func (a *TopHitsAggregation) Highlight(highlight *Highlight) *TopHitsAggregation { + a.searchSource = a.searchSource.Highlight(highlight) + return a +} + +func (a *TopHitsAggregation) Highlighter() *Highlight { + return a.searchSource.Highlighter() +} + +func (a *TopHitsAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs": { + // "top_tag_hits": { + // "top_hits": { + // "sort": [ + // { + // "last_activity_date": { + // "order": "desc" + // } + // } + // ], + // "_source": { + // "include": [ + // "title" + // ] + // }, + // "size" : 1 + // } + // } + // } + // } + // This method returns only the { "top_hits" : { ... } } part. + + source := make(map[string]interface{}) + src, err := a.searchSource.Source() + if err != nil { + return nil, err + } + source["top_hits"] = src + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_metrics_top_hits_test.go b/vendor/github.com/olivere/elastic/search_aggs_metrics_top_hits_test.go new file mode 100644 index 0000000..861f079 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_metrics_top_hits_test.go @@ -0,0 +1,31 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestTopHitsAggregation(t *testing.T) { + fsc := NewFetchSourceContext(true).Include("title") + agg := NewTopHitsAggregation(). + Sort("last_activity_date", false). + FetchSourceContext(fsc). + Size(1) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"top_hits":{"_source":{"includes":["title"]},"size":1,"sort":[{"last_activity_date":{"order":"desc"}}]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_metrics_value_count.go b/vendor/github.com/olivere/elastic/search_aggs_metrics_value_count.go new file mode 100644 index 0000000..abcc166 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_metrics_value_count.go @@ -0,0 +1,102 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// ValueCountAggregation is a single-value metrics aggregation that counts +// the number of values that are extracted from the aggregated documents. +// These values can be extracted either from specific fields in the documents, +// or be generated by a provided script. Typically, this aggregator will be +// used in conjunction with other single-value aggregations. +// For example, when computing the avg one might be interested in the +// number of values the average is computed over. +// See: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-metrics-valuecount-aggregation.html +type ValueCountAggregation struct { + field string + script *Script + format string + subAggregations map[string]Aggregation + meta map[string]interface{} +} + +func NewValueCountAggregation() *ValueCountAggregation { + return &ValueCountAggregation{ + subAggregations: make(map[string]Aggregation), + } +} + +func (a *ValueCountAggregation) Field(field string) *ValueCountAggregation { + a.field = field + return a +} + +func (a *ValueCountAggregation) Script(script *Script) *ValueCountAggregation { + a.script = script + return a +} + +func (a *ValueCountAggregation) Format(format string) *ValueCountAggregation { + a.format = format + return a +} + +func (a *ValueCountAggregation) SubAggregation(name string, subAggregation Aggregation) *ValueCountAggregation { + a.subAggregations[name] = subAggregation + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *ValueCountAggregation) Meta(metaData map[string]interface{}) *ValueCountAggregation { + a.meta = metaData + return a +} + +func (a *ValueCountAggregation) Source() (interface{}, error) { + // Example: + // { + // "aggs" : { + // "grades_count" : { "value_count" : { "field" : "grade" } } + // } + // } + // This method returns only the { "value_count" : { "field" : "grade" } } part. + + source := make(map[string]interface{}) + opts := make(map[string]interface{}) + source["value_count"] = opts + + // ValuesSourceAggregationBuilder + if a.field != "" { + opts["field"] = a.field + } + if a.script != nil { + src, err := a.script.Source() + if err != nil { + return nil, err + } + opts["script"] = src + } + if a.format != "" { + opts["format"] = a.format + } + + // AggregationBuilder (SubAggregations) + if len(a.subAggregations) > 0 { + aggsMap := make(map[string]interface{}) + source["aggregations"] = aggsMap + for name, aggregate := range a.subAggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_metrics_value_count_test.go b/vendor/github.com/olivere/elastic/search_aggs_metrics_value_count_test.go new file mode 100644 index 0000000..18d2ba1 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_metrics_value_count_test.go @@ -0,0 +1,63 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestValueCountAggregation(t *testing.T) { + agg := NewValueCountAggregation().Field("grade") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"value_count":{"field":"grade"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestValueCountAggregationWithFormat(t *testing.T) { + // Format comes with 1.5.0+ + agg := NewValueCountAggregation().Field("grade").Format("0000.0") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"value_count":{"field":"grade","format":"0000.0"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestValueCountAggregationWithMetaData(t *testing.T) { + agg := NewValueCountAggregation().Field("grade") + agg = agg.Meta(map[string]interface{}{"name": "Oliver"}) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"meta":{"name":"Oliver"},"value_count":{"field":"grade"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_pipeline_avg_bucket.go b/vendor/github.com/olivere/elastic/search_aggs_pipeline_avg_bucket.go new file mode 100644 index 0000000..97046fd --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_pipeline_avg_bucket.go @@ -0,0 +1,94 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// AvgBucketAggregation is a sibling pipeline aggregation which calculates +// the (mean) average value of a specified metric in a sibling aggregation. +// The specified metric must be numeric and the sibling aggregation must +// be a multi-bucket aggregation. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-avg-bucket-aggregation.html +type AvgBucketAggregation struct { + format string + gapPolicy string + + meta map[string]interface{} + bucketsPaths []string +} + +// NewAvgBucketAggregation creates and initializes a new AvgBucketAggregation. +func NewAvgBucketAggregation() *AvgBucketAggregation { + return &AvgBucketAggregation{ + bucketsPaths: make([]string, 0), + } +} + +// Format to use on the output of this aggregation. +func (a *AvgBucketAggregation) Format(format string) *AvgBucketAggregation { + a.format = format + return a +} + +// GapPolicy defines what should be done when a gap in the series is discovered. +// Valid values include "insert_zeros" or "skip". Default is "insert_zeros". +func (a *AvgBucketAggregation) GapPolicy(gapPolicy string) *AvgBucketAggregation { + a.gapPolicy = gapPolicy + return a +} + +// GapInsertZeros inserts zeros for gaps in the series. +func (a *AvgBucketAggregation) GapInsertZeros() *AvgBucketAggregation { + a.gapPolicy = "insert_zeros" + return a +} + +// GapSkip skips gaps in the series. +func (a *AvgBucketAggregation) GapSkip() *AvgBucketAggregation { + a.gapPolicy = "skip" + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *AvgBucketAggregation) Meta(metaData map[string]interface{}) *AvgBucketAggregation { + a.meta = metaData + return a +} + +// BucketsPath sets the paths to the buckets to use for this pipeline aggregator. +func (a *AvgBucketAggregation) BucketsPath(bucketsPaths ...string) *AvgBucketAggregation { + a.bucketsPaths = append(a.bucketsPaths, bucketsPaths...) + return a +} + +// Source returns the a JSON-serializable interface. +func (a *AvgBucketAggregation) Source() (interface{}, error) { + source := make(map[string]interface{}) + params := make(map[string]interface{}) + source["avg_bucket"] = params + + if a.format != "" { + params["format"] = a.format + } + if a.gapPolicy != "" { + params["gap_policy"] = a.gapPolicy + } + + // Add buckets paths + switch len(a.bucketsPaths) { + case 0: + case 1: + params["buckets_path"] = a.bucketsPaths[0] + default: + params["buckets_path"] = a.bucketsPaths + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_pipeline_avg_bucket_test.go b/vendor/github.com/olivere/elastic/search_aggs_pipeline_avg_bucket_test.go new file mode 100644 index 0000000..019b8f1 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_pipeline_avg_bucket_test.go @@ -0,0 +1,27 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestAvgBucketAggregation(t *testing.T) { + agg := NewAvgBucketAggregation().BucketsPath("the_sum").GapPolicy("skip") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"avg_bucket":{"buckets_path":"the_sum","gap_policy":"skip"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_pipeline_bucket_script.go b/vendor/github.com/olivere/elastic/search_aggs_pipeline_bucket_script.go new file mode 100644 index 0000000..4646ab5 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_pipeline_bucket_script.go @@ -0,0 +1,113 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// BucketScriptAggregation is a parent pipeline aggregation which executes +// a script which can perform per bucket computations on specified metrics +// in the parent multi-bucket aggregation. The specified metric must be +// numeric and the script must return a numeric value. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-bucket-script-aggregation.html +type BucketScriptAggregation struct { + format string + gapPolicy string + script *Script + + meta map[string]interface{} + bucketsPathsMap map[string]string +} + +// NewBucketScriptAggregation creates and initializes a new BucketScriptAggregation. +func NewBucketScriptAggregation() *BucketScriptAggregation { + return &BucketScriptAggregation{ + bucketsPathsMap: make(map[string]string), + } +} + +// Format to use on the output of this aggregation. +func (a *BucketScriptAggregation) Format(format string) *BucketScriptAggregation { + a.format = format + return a +} + +// GapPolicy defines what should be done when a gap in the series is discovered. +// Valid values include "insert_zeros" or "skip". Default is "insert_zeros". +func (a *BucketScriptAggregation) GapPolicy(gapPolicy string) *BucketScriptAggregation { + a.gapPolicy = gapPolicy + return a +} + +// GapInsertZeros inserts zeros for gaps in the series. +func (a *BucketScriptAggregation) GapInsertZeros() *BucketScriptAggregation { + a.gapPolicy = "insert_zeros" + return a +} + +// GapSkip skips gaps in the series. +func (a *BucketScriptAggregation) GapSkip() *BucketScriptAggregation { + a.gapPolicy = "skip" + return a +} + +// Script is the script to run. +func (a *BucketScriptAggregation) Script(script *Script) *BucketScriptAggregation { + a.script = script + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *BucketScriptAggregation) Meta(metaData map[string]interface{}) *BucketScriptAggregation { + a.meta = metaData + return a +} + +// BucketsPathsMap sets the paths to the buckets to use for this pipeline aggregator. +func (a *BucketScriptAggregation) BucketsPathsMap(bucketsPathsMap map[string]string) *BucketScriptAggregation { + a.bucketsPathsMap = bucketsPathsMap + return a +} + +// AddBucketsPath adds a bucket path to use for this pipeline aggregator. +func (a *BucketScriptAggregation) AddBucketsPath(name, path string) *BucketScriptAggregation { + if a.bucketsPathsMap == nil { + a.bucketsPathsMap = make(map[string]string) + } + a.bucketsPathsMap[name] = path + return a +} + +// Source returns the a JSON-serializable interface. +func (a *BucketScriptAggregation) Source() (interface{}, error) { + source := make(map[string]interface{}) + params := make(map[string]interface{}) + source["bucket_script"] = params + + if a.format != "" { + params["format"] = a.format + } + if a.gapPolicy != "" { + params["gap_policy"] = a.gapPolicy + } + if a.script != nil { + src, err := a.script.Source() + if err != nil { + return nil, err + } + params["script"] = src + } + + // Add buckets paths + if len(a.bucketsPathsMap) > 0 { + params["buckets_path"] = a.bucketsPathsMap + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_pipeline_bucket_script_test.go b/vendor/github.com/olivere/elastic/search_aggs_pipeline_bucket_script_test.go new file mode 100644 index 0000000..3c101c7 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_pipeline_bucket_script_test.go @@ -0,0 +1,30 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestBucketScriptAggregation(t *testing.T) { + agg := NewBucketScriptAggregation(). + AddBucketsPath("tShirtSales", "t-shirts>sales"). + AddBucketsPath("totalSales", "total_sales"). + Script(NewScript("tShirtSales / totalSales * 100")) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"bucket_script":{"buckets_path":{"tShirtSales":"t-shirts\u003esales","totalSales":"total_sales"},"script":{"source":"tShirtSales / totalSales * 100"}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_pipeline_bucket_selector.go b/vendor/github.com/olivere/elastic/search_aggs_pipeline_bucket_selector.go new file mode 100644 index 0000000..2ad6d41 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_pipeline_bucket_selector.go @@ -0,0 +1,115 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// BucketSelectorAggregation is a parent pipeline aggregation which +// determines whether the current bucket will be retained in the parent +// multi-bucket aggregation. The specific metric must be numeric and +// the script must return a boolean value. If the script language is +// expression then a numeric return value is permitted. In this case 0.0 +// will be evaluated as false and all other values will evaluate to true. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-bucket-selector-aggregation.html +type BucketSelectorAggregation struct { + format string + gapPolicy string + script *Script + + meta map[string]interface{} + bucketsPathsMap map[string]string +} + +// NewBucketSelectorAggregation creates and initializes a new BucketSelectorAggregation. +func NewBucketSelectorAggregation() *BucketSelectorAggregation { + return &BucketSelectorAggregation{ + bucketsPathsMap: make(map[string]string), + } +} + +// Format to use on the output of this aggregation. +func (a *BucketSelectorAggregation) Format(format string) *BucketSelectorAggregation { + a.format = format + return a +} + +// GapPolicy defines what should be done when a gap in the series is discovered. +// Valid values include "insert_zeros" or "skip". Default is "insert_zeros". +func (a *BucketSelectorAggregation) GapPolicy(gapPolicy string) *BucketSelectorAggregation { + a.gapPolicy = gapPolicy + return a +} + +// GapInsertZeros inserts zeros for gaps in the series. +func (a *BucketSelectorAggregation) GapInsertZeros() *BucketSelectorAggregation { + a.gapPolicy = "insert_zeros" + return a +} + +// GapSkip skips gaps in the series. +func (a *BucketSelectorAggregation) GapSkip() *BucketSelectorAggregation { + a.gapPolicy = "skip" + return a +} + +// Script is the script to run. +func (a *BucketSelectorAggregation) Script(script *Script) *BucketSelectorAggregation { + a.script = script + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *BucketSelectorAggregation) Meta(metaData map[string]interface{}) *BucketSelectorAggregation { + a.meta = metaData + return a +} + +// BucketsPathsMap sets the paths to the buckets to use for this pipeline aggregator. +func (a *BucketSelectorAggregation) BucketsPathsMap(bucketsPathsMap map[string]string) *BucketSelectorAggregation { + a.bucketsPathsMap = bucketsPathsMap + return a +} + +// AddBucketsPath adds a bucket path to use for this pipeline aggregator. +func (a *BucketSelectorAggregation) AddBucketsPath(name, path string) *BucketSelectorAggregation { + if a.bucketsPathsMap == nil { + a.bucketsPathsMap = make(map[string]string) + } + a.bucketsPathsMap[name] = path + return a +} + +// Source returns the a JSON-serializable interface. +func (a *BucketSelectorAggregation) Source() (interface{}, error) { + source := make(map[string]interface{}) + params := make(map[string]interface{}) + source["bucket_selector"] = params + + if a.format != "" { + params["format"] = a.format + } + if a.gapPolicy != "" { + params["gap_policy"] = a.gapPolicy + } + if a.script != nil { + src, err := a.script.Source() + if err != nil { + return nil, err + } + params["script"] = src + } + + // Add buckets paths + if len(a.bucketsPathsMap) > 0 { + params["buckets_path"] = a.bucketsPathsMap + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_pipeline_bucket_selector_test.go b/vendor/github.com/olivere/elastic/search_aggs_pipeline_bucket_selector_test.go new file mode 100644 index 0000000..e378c28 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_pipeline_bucket_selector_test.go @@ -0,0 +1,29 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestBucketSelectorAggregation(t *testing.T) { + agg := NewBucketSelectorAggregation(). + AddBucketsPath("totalSales", "total_sales"). + Script(NewScript("totalSales >= 1000")) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"bucket_selector":{"buckets_path":{"totalSales":"total_sales"},"script":{"source":"totalSales \u003e= 1000"}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_pipeline_bucket_sort.go b/vendor/github.com/olivere/elastic/search_aggs_pipeline_bucket_sort.go new file mode 100644 index 0000000..cd3075f --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_pipeline_bucket_sort.go @@ -0,0 +1,119 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// BucketSortAggregation parent pipeline aggregation which sorts the buckets +// of its parent multi-bucket aggregation. Zero or more sort fields may be +// specified together with the corresponding sort order. Each bucket may be +// sorted based on its _key, _count or its sub-aggregations. In addition, +// parameters from and size may be set in order to truncate the result buckets. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-bucket-sort-aggregation.html +type BucketSortAggregation struct { + sorters []Sorter + from int + size int + gapPolicy string + + meta map[string]interface{} +} + +// NewBucketSortAggregation creates and initializes a new BucketSortAggregation. +func NewBucketSortAggregation() *BucketSortAggregation { + return &BucketSortAggregation{ + size: -1, + } +} + +// Sort adds a sort order to the list of sorters. +func (a *BucketSortAggregation) Sort(field string, ascending bool) *BucketSortAggregation { + a.sorters = append(a.sorters, SortInfo{Field: field, Ascending: ascending}) + return a +} + +// SortWithInfo adds a SortInfo to the list of sorters. +func (a *BucketSortAggregation) SortWithInfo(info SortInfo) *BucketSortAggregation { + a.sorters = append(a.sorters, info) + return a +} + +// From adds the "from" parameter to the aggregation. +func (a *BucketSortAggregation) From(from int) *BucketSortAggregation { + a.from = from + return a +} + +// Size adds the "size" parameter to the aggregation. +func (a *BucketSortAggregation) Size(size int) *BucketSortAggregation { + a.size = size + return a +} + +// GapPolicy defines what should be done when a gap in the series is discovered. +// Valid values include "insert_zeros" or "skip". Default is "skip". +func (a *BucketSortAggregation) GapPolicy(gapPolicy string) *BucketSortAggregation { + a.gapPolicy = gapPolicy + return a +} + +// GapInsertZeros inserts zeros for gaps in the series. +func (a *BucketSortAggregation) GapInsertZeros() *BucketSortAggregation { + a.gapPolicy = "insert_zeros" + return a +} + +// GapSkip skips gaps in the series. +func (a *BucketSortAggregation) GapSkip() *BucketSortAggregation { + a.gapPolicy = "skip" + return a +} + +// Meta sets the meta data in the aggregation. +// Although metadata is supported for this aggregation by Elasticsearch, it's important to +// note that there's no use to it because this aggregation does not include new data in the +// response. It merely reorders parent buckets. +func (a *BucketSortAggregation) Meta(meta map[string]interface{}) *BucketSortAggregation { + a.meta = meta + return a +} + +// Source returns the a JSON-serializable interface. +func (a *BucketSortAggregation) Source() (interface{}, error) { + source := make(map[string]interface{}) + params := make(map[string]interface{}) + source["bucket_sort"] = params + + if a.from != 0 { + params["from"] = a.from + } + if a.size != -1 { + params["size"] = a.size + } + + if a.gapPolicy != "" { + params["gap_policy"] = a.gapPolicy + } + + // Parses sorters to JSON-serializable interface. + if len(a.sorters) > 0 { + sorters := make([]interface{}, len(a.sorters)) + params["sort"] = sorters + for idx, sorter := range a.sorters { + src, err := sorter.Source() + if err != nil { + return nil, err + } + sorters[idx] = src + } + } + + // Add metadata if available. + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_pipeline_bucket_sort_test.go b/vendor/github.com/olivere/elastic/search_aggs_pipeline_bucket_sort_test.go new file mode 100644 index 0000000..e47b765 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_pipeline_bucket_sort_test.go @@ -0,0 +1,33 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestBuckerSortAggregation(t *testing.T) { + agg := NewBucketSortAggregation(). + From(2). + Size(5). + GapInsertZeros(). + Sort("sort_field_1", true). + SortWithInfo(SortInfo{Field: "sort_field_2", Ascending: false}) + + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"bucket_sort":{"from":2,"gap_policy":"insert_zeros","size":5,"sort":[{"sort_field_1":{"order":"asc"}},{"sort_field_2":{"order":"desc"}}]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_pipeline_cumulative_sum.go b/vendor/github.com/olivere/elastic/search_aggs_pipeline_cumulative_sum.go new file mode 100644 index 0000000..18cb5e8 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_pipeline_cumulative_sum.go @@ -0,0 +1,71 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// CumulativeSumAggregation is a parent pipeline aggregation which calculates +// the cumulative sum of a specified metric in a parent histogram (or date_histogram) +// aggregation. The specified metric must be numeric and the enclosing +// histogram must have min_doc_count set to 0 (default for histogram aggregations). +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-cumulative-sum-aggregation.html +type CumulativeSumAggregation struct { + format string + + meta map[string]interface{} + bucketsPaths []string +} + +// NewCumulativeSumAggregation creates and initializes a new CumulativeSumAggregation. +func NewCumulativeSumAggregation() *CumulativeSumAggregation { + return &CumulativeSumAggregation{ + bucketsPaths: make([]string, 0), + } +} + +// Format to use on the output of this aggregation. +func (a *CumulativeSumAggregation) Format(format string) *CumulativeSumAggregation { + a.format = format + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *CumulativeSumAggregation) Meta(metaData map[string]interface{}) *CumulativeSumAggregation { + a.meta = metaData + return a +} + +// BucketsPath sets the paths to the buckets to use for this pipeline aggregator. +func (a *CumulativeSumAggregation) BucketsPath(bucketsPaths ...string) *CumulativeSumAggregation { + a.bucketsPaths = append(a.bucketsPaths, bucketsPaths...) + return a +} + +// Source returns the a JSON-serializable interface. +func (a *CumulativeSumAggregation) Source() (interface{}, error) { + source := make(map[string]interface{}) + params := make(map[string]interface{}) + source["cumulative_sum"] = params + + if a.format != "" { + params["format"] = a.format + } + + // Add buckets paths + switch len(a.bucketsPaths) { + case 0: + case 1: + params["buckets_path"] = a.bucketsPaths[0] + default: + params["buckets_path"] = a.bucketsPaths + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_pipeline_cumulative_sum_test.go b/vendor/github.com/olivere/elastic/search_aggs_pipeline_cumulative_sum_test.go new file mode 100644 index 0000000..69a215d --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_pipeline_cumulative_sum_test.go @@ -0,0 +1,27 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestCumulativeSumAggregation(t *testing.T) { + agg := NewCumulativeSumAggregation().BucketsPath("sales") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"cumulative_sum":{"buckets_path":"sales"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_pipeline_derivative.go b/vendor/github.com/olivere/elastic/search_aggs_pipeline_derivative.go new file mode 100644 index 0000000..706be7c --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_pipeline_derivative.go @@ -0,0 +1,105 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// DerivativeAggregation is a parent pipeline aggregation which calculates +// the derivative of a specified metric in a parent histogram (or date_histogram) +// aggregation. The specified metric must be numeric and the enclosing +// histogram must have min_doc_count set to 0 (default for histogram aggregations). +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-derivative-aggregation.html +type DerivativeAggregation struct { + format string + gapPolicy string + unit string + + meta map[string]interface{} + bucketsPaths []string +} + +// NewDerivativeAggregation creates and initializes a new DerivativeAggregation. +func NewDerivativeAggregation() *DerivativeAggregation { + return &DerivativeAggregation{ + bucketsPaths: make([]string, 0), + } +} + +// Format to use on the output of this aggregation. +func (a *DerivativeAggregation) Format(format string) *DerivativeAggregation { + a.format = format + return a +} + +// GapPolicy defines what should be done when a gap in the series is discovered. +// Valid values include "insert_zeros" or "skip". Default is "insert_zeros". +func (a *DerivativeAggregation) GapPolicy(gapPolicy string) *DerivativeAggregation { + a.gapPolicy = gapPolicy + return a +} + +// GapInsertZeros inserts zeros for gaps in the series. +func (a *DerivativeAggregation) GapInsertZeros() *DerivativeAggregation { + a.gapPolicy = "insert_zeros" + return a +} + +// GapSkip skips gaps in the series. +func (a *DerivativeAggregation) GapSkip() *DerivativeAggregation { + a.gapPolicy = "skip" + return a +} + +// Unit sets the unit provided, e.g. "1d" or "1y". +// It is only useful when calculating the derivative using a date_histogram. +func (a *DerivativeAggregation) Unit(unit string) *DerivativeAggregation { + a.unit = unit + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *DerivativeAggregation) Meta(metaData map[string]interface{}) *DerivativeAggregation { + a.meta = metaData + return a +} + +// BucketsPath sets the paths to the buckets to use for this pipeline aggregator. +func (a *DerivativeAggregation) BucketsPath(bucketsPaths ...string) *DerivativeAggregation { + a.bucketsPaths = append(a.bucketsPaths, bucketsPaths...) + return a +} + +// Source returns the a JSON-serializable interface. +func (a *DerivativeAggregation) Source() (interface{}, error) { + source := make(map[string]interface{}) + params := make(map[string]interface{}) + source["derivative"] = params + + if a.format != "" { + params["format"] = a.format + } + if a.gapPolicy != "" { + params["gap_policy"] = a.gapPolicy + } + if a.unit != "" { + params["unit"] = a.unit + } + + // Add buckets paths + switch len(a.bucketsPaths) { + case 0: + case 1: + params["buckets_path"] = a.bucketsPaths[0] + default: + params["buckets_path"] = a.bucketsPaths + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_pipeline_derivative_test.go b/vendor/github.com/olivere/elastic/search_aggs_pipeline_derivative_test.go new file mode 100644 index 0000000..7e7b267 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_pipeline_derivative_test.go @@ -0,0 +1,27 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestDerivativeAggregation(t *testing.T) { + agg := NewDerivativeAggregation().BucketsPath("sales") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"derivative":{"buckets_path":"sales"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_pipeline_max_bucket.go b/vendor/github.com/olivere/elastic/search_aggs_pipeline_max_bucket.go new file mode 100644 index 0000000..42aad23 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_pipeline_max_bucket.go @@ -0,0 +1,95 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// MaxBucketAggregation is a sibling pipeline aggregation which identifies +// the bucket(s) with the maximum value of a specified metric in a sibling +// aggregation and outputs both the value and the key(s) of the bucket(s). +// The specified metric must be numeric and the sibling aggregation must +// be a multi-bucket aggregation. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-max-bucket-aggregation.html +type MaxBucketAggregation struct { + format string + gapPolicy string + + meta map[string]interface{} + bucketsPaths []string +} + +// NewMaxBucketAggregation creates and initializes a new MaxBucketAggregation. +func NewMaxBucketAggregation() *MaxBucketAggregation { + return &MaxBucketAggregation{ + bucketsPaths: make([]string, 0), + } +} + +// Format to use on the output of this aggregation. +func (a *MaxBucketAggregation) Format(format string) *MaxBucketAggregation { + a.format = format + return a +} + +// GapPolicy defines what should be done when a gap in the series is discovered. +// Valid values include "insert_zeros" or "skip". Default is "insert_zeros". +func (a *MaxBucketAggregation) GapPolicy(gapPolicy string) *MaxBucketAggregation { + a.gapPolicy = gapPolicy + return a +} + +// GapInsertZeros inserts zeros for gaps in the series. +func (a *MaxBucketAggregation) GapInsertZeros() *MaxBucketAggregation { + a.gapPolicy = "insert_zeros" + return a +} + +// GapSkip skips gaps in the series. +func (a *MaxBucketAggregation) GapSkip() *MaxBucketAggregation { + a.gapPolicy = "skip" + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *MaxBucketAggregation) Meta(metaData map[string]interface{}) *MaxBucketAggregation { + a.meta = metaData + return a +} + +// BucketsPath sets the paths to the buckets to use for this pipeline aggregator. +func (a *MaxBucketAggregation) BucketsPath(bucketsPaths ...string) *MaxBucketAggregation { + a.bucketsPaths = append(a.bucketsPaths, bucketsPaths...) + return a +} + +// Source returns the a JSON-serializable interface. +func (a *MaxBucketAggregation) Source() (interface{}, error) { + source := make(map[string]interface{}) + params := make(map[string]interface{}) + source["max_bucket"] = params + + if a.format != "" { + params["format"] = a.format + } + if a.gapPolicy != "" { + params["gap_policy"] = a.gapPolicy + } + + // Add buckets paths + switch len(a.bucketsPaths) { + case 0: + case 1: + params["buckets_path"] = a.bucketsPaths[0] + default: + params["buckets_path"] = a.bucketsPaths + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_pipeline_max_bucket_test.go b/vendor/github.com/olivere/elastic/search_aggs_pipeline_max_bucket_test.go new file mode 100644 index 0000000..aa9bf2f --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_pipeline_max_bucket_test.go @@ -0,0 +1,27 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestMaxBucketAggregation(t *testing.T) { + agg := NewMaxBucketAggregation().BucketsPath("the_sum").GapPolicy("skip") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"max_bucket":{"buckets_path":"the_sum","gap_policy":"skip"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_pipeline_min_bucket.go b/vendor/github.com/olivere/elastic/search_aggs_pipeline_min_bucket.go new file mode 100644 index 0000000..1a3d3d8 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_pipeline_min_bucket.go @@ -0,0 +1,95 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// MinBucketAggregation is a sibling pipeline aggregation which identifies +// the bucket(s) with the maximum value of a specified metric in a sibling +// aggregation and outputs both the value and the key(s) of the bucket(s). +// The specified metric must be numeric and the sibling aggregation must +// be a multi-bucket aggregation. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-min-bucket-aggregation.html +type MinBucketAggregation struct { + format string + gapPolicy string + + meta map[string]interface{} + bucketsPaths []string +} + +// NewMinBucketAggregation creates and initializes a new MinBucketAggregation. +func NewMinBucketAggregation() *MinBucketAggregation { + return &MinBucketAggregation{ + bucketsPaths: make([]string, 0), + } +} + +// Format to use on the output of this aggregation. +func (a *MinBucketAggregation) Format(format string) *MinBucketAggregation { + a.format = format + return a +} + +// GapPolicy defines what should be done when a gap in the series is discovered. +// Valid values include "insert_zeros" or "skip". Default is "insert_zeros". +func (a *MinBucketAggregation) GapPolicy(gapPolicy string) *MinBucketAggregation { + a.gapPolicy = gapPolicy + return a +} + +// GapInsertZeros inserts zeros for gaps in the series. +func (a *MinBucketAggregation) GapInsertZeros() *MinBucketAggregation { + a.gapPolicy = "insert_zeros" + return a +} + +// GapSkip skips gaps in the series. +func (a *MinBucketAggregation) GapSkip() *MinBucketAggregation { + a.gapPolicy = "skip" + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *MinBucketAggregation) Meta(metaData map[string]interface{}) *MinBucketAggregation { + a.meta = metaData + return a +} + +// BucketsPath sets the paths to the buckets to use for this pipeline aggregator. +func (a *MinBucketAggregation) BucketsPath(bucketsPaths ...string) *MinBucketAggregation { + a.bucketsPaths = append(a.bucketsPaths, bucketsPaths...) + return a +} + +// Source returns the a JSON-serializable interface. +func (a *MinBucketAggregation) Source() (interface{}, error) { + source := make(map[string]interface{}) + params := make(map[string]interface{}) + source["min_bucket"] = params + + if a.format != "" { + params["format"] = a.format + } + if a.gapPolicy != "" { + params["gap_policy"] = a.gapPolicy + } + + // Add buckets paths + switch len(a.bucketsPaths) { + case 0: + case 1: + params["buckets_path"] = a.bucketsPaths[0] + default: + params["buckets_path"] = a.bucketsPaths + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_pipeline_min_bucket_test.go b/vendor/github.com/olivere/elastic/search_aggs_pipeline_min_bucket_test.go new file mode 100644 index 0000000..ff4abf2 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_pipeline_min_bucket_test.go @@ -0,0 +1,27 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestMinBucketAggregation(t *testing.T) { + agg := NewMinBucketAggregation().BucketsPath("sales_per_month>sales").GapPolicy("skip") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"min_bucket":{"buckets_path":"sales_per_month\u003esales","gap_policy":"skip"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_pipeline_mov_avg.go b/vendor/github.com/olivere/elastic/search_aggs_pipeline_mov_avg.go new file mode 100644 index 0000000..f380812 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_pipeline_mov_avg.go @@ -0,0 +1,374 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// MovAvgAggregation operates on a series of data. It will slide a window +// across the data and emit the average value of that window. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-movavg-aggregation.html +type MovAvgAggregation struct { + format string + gapPolicy string + model MovAvgModel + window *int + predict *int + minimize *bool + + meta map[string]interface{} + bucketsPaths []string +} + +// NewMovAvgAggregation creates and initializes a new MovAvgAggregation. +func NewMovAvgAggregation() *MovAvgAggregation { + return &MovAvgAggregation{ + bucketsPaths: make([]string, 0), + } +} + +// Format to use on the output of this aggregation. +func (a *MovAvgAggregation) Format(format string) *MovAvgAggregation { + a.format = format + return a +} + +// GapPolicy defines what should be done when a gap in the series is discovered. +// Valid values include "insert_zeros" or "skip". Default is "insert_zeros". +func (a *MovAvgAggregation) GapPolicy(gapPolicy string) *MovAvgAggregation { + a.gapPolicy = gapPolicy + return a +} + +// GapInsertZeros inserts zeros for gaps in the series. +func (a *MovAvgAggregation) GapInsertZeros() *MovAvgAggregation { + a.gapPolicy = "insert_zeros" + return a +} + +// GapSkip skips gaps in the series. +func (a *MovAvgAggregation) GapSkip() *MovAvgAggregation { + a.gapPolicy = "skip" + return a +} + +// Model is used to define what type of moving average you want to use +// in the series. +func (a *MovAvgAggregation) Model(model MovAvgModel) *MovAvgAggregation { + a.model = model + return a +} + +// Window sets the window size for the moving average. This window will +// "slide" across the series, and the values inside that window will +// be used to calculate the moving avg value. +func (a *MovAvgAggregation) Window(window int) *MovAvgAggregation { + a.window = &window + return a +} + +// Predict sets the number of predictions that should be returned. +// Each prediction will be spaced at the intervals in the histogram. +// E.g. a predict of 2 will return two new buckets at the end of the +// histogram with the predicted values. +func (a *MovAvgAggregation) Predict(numPredictions int) *MovAvgAggregation { + a.predict = &numPredictions + return a +} + +// Minimize determines if the model should be fit to the data using a +// cost minimizing algorithm. +func (a *MovAvgAggregation) Minimize(minimize bool) *MovAvgAggregation { + a.minimize = &minimize + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *MovAvgAggregation) Meta(metaData map[string]interface{}) *MovAvgAggregation { + a.meta = metaData + return a +} + +// BucketsPath sets the paths to the buckets to use for this pipeline aggregator. +func (a *MovAvgAggregation) BucketsPath(bucketsPaths ...string) *MovAvgAggregation { + a.bucketsPaths = append(a.bucketsPaths, bucketsPaths...) + return a +} + +// Source returns the a JSON-serializable interface. +func (a *MovAvgAggregation) Source() (interface{}, error) { + source := make(map[string]interface{}) + params := make(map[string]interface{}) + source["moving_avg"] = params + + if a.format != "" { + params["format"] = a.format + } + if a.gapPolicy != "" { + params["gap_policy"] = a.gapPolicy + } + if a.model != nil { + params["model"] = a.model.Name() + settings := a.model.Settings() + if len(settings) > 0 { + params["settings"] = settings + } + } + if a.window != nil { + params["window"] = *a.window + } + if a.predict != nil { + params["predict"] = *a.predict + } + if a.minimize != nil { + params["minimize"] = *a.minimize + } + + // Add buckets paths + switch len(a.bucketsPaths) { + case 0: + case 1: + params["buckets_path"] = a.bucketsPaths[0] + default: + params["buckets_path"] = a.bucketsPaths + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} + +// -- Models for moving averages -- +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-movavg-aggregation.html#_models + +// MovAvgModel specifies the model to use with the MovAvgAggregation. +type MovAvgModel interface { + Name() string + Settings() map[string]interface{} +} + +// -- EWMA -- + +// EWMAMovAvgModel calculates an exponentially weighted moving average. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-movavg-aggregation.html#_ewma_exponentially_weighted +type EWMAMovAvgModel struct { + alpha *float64 +} + +// NewEWMAMovAvgModel creates and initializes a new EWMAMovAvgModel. +func NewEWMAMovAvgModel() *EWMAMovAvgModel { + return &EWMAMovAvgModel{} +} + +// Alpha controls the smoothing of the data. Alpha = 1 retains no memory +// of past values (e.g. a random walk), while alpha = 0 retains infinite +// memory of past values (e.g. the series mean). Useful values are somewhere +// in between. Defaults to 0.5. +func (m *EWMAMovAvgModel) Alpha(alpha float64) *EWMAMovAvgModel { + m.alpha = &alpha + return m +} + +// Name of the model. +func (m *EWMAMovAvgModel) Name() string { + return "ewma" +} + +// Settings of the model. +func (m *EWMAMovAvgModel) Settings() map[string]interface{} { + settings := make(map[string]interface{}) + if m.alpha != nil { + settings["alpha"] = *m.alpha + } + return settings +} + +// -- Holt linear -- + +// HoltLinearMovAvgModel calculates a doubly exponential weighted moving average. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-movavg-aggregation.html#_holt_linear +type HoltLinearMovAvgModel struct { + alpha *float64 + beta *float64 +} + +// NewHoltLinearMovAvgModel creates and initializes a new HoltLinearMovAvgModel. +func NewHoltLinearMovAvgModel() *HoltLinearMovAvgModel { + return &HoltLinearMovAvgModel{} +} + +// Alpha controls the smoothing of the data. Alpha = 1 retains no memory +// of past values (e.g. a random walk), while alpha = 0 retains infinite +// memory of past values (e.g. the series mean). Useful values are somewhere +// in between. Defaults to 0.5. +func (m *HoltLinearMovAvgModel) Alpha(alpha float64) *HoltLinearMovAvgModel { + m.alpha = &alpha + return m +} + +// Beta is equivalent to Alpha but controls the smoothing of the trend +// instead of the data. +func (m *HoltLinearMovAvgModel) Beta(beta float64) *HoltLinearMovAvgModel { + m.beta = &beta + return m +} + +// Name of the model. +func (m *HoltLinearMovAvgModel) Name() string { + return "holt" +} + +// Settings of the model. +func (m *HoltLinearMovAvgModel) Settings() map[string]interface{} { + settings := make(map[string]interface{}) + if m.alpha != nil { + settings["alpha"] = *m.alpha + } + if m.beta != nil { + settings["beta"] = *m.beta + } + return settings +} + +// -- Holt Winters -- + +// HoltWintersMovAvgModel calculates a triple exponential weighted moving average. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-movavg-aggregation.html#_holt_winters +type HoltWintersMovAvgModel struct { + alpha *float64 + beta *float64 + gamma *float64 + period *int + seasonalityType string + pad *bool +} + +// NewHoltWintersMovAvgModel creates and initializes a new HoltWintersMovAvgModel. +func NewHoltWintersMovAvgModel() *HoltWintersMovAvgModel { + return &HoltWintersMovAvgModel{} +} + +// Alpha controls the smoothing of the data. Alpha = 1 retains no memory +// of past values (e.g. a random walk), while alpha = 0 retains infinite +// memory of past values (e.g. the series mean). Useful values are somewhere +// in between. Defaults to 0.5. +func (m *HoltWintersMovAvgModel) Alpha(alpha float64) *HoltWintersMovAvgModel { + m.alpha = &alpha + return m +} + +// Beta is equivalent to Alpha but controls the smoothing of the trend +// instead of the data. +func (m *HoltWintersMovAvgModel) Beta(beta float64) *HoltWintersMovAvgModel { + m.beta = &beta + return m +} + +func (m *HoltWintersMovAvgModel) Gamma(gamma float64) *HoltWintersMovAvgModel { + m.gamma = &gamma + return m +} + +func (m *HoltWintersMovAvgModel) Period(period int) *HoltWintersMovAvgModel { + m.period = &period + return m +} + +func (m *HoltWintersMovAvgModel) SeasonalityType(typ string) *HoltWintersMovAvgModel { + m.seasonalityType = typ + return m +} + +func (m *HoltWintersMovAvgModel) Pad(pad bool) *HoltWintersMovAvgModel { + m.pad = &pad + return m +} + +// Name of the model. +func (m *HoltWintersMovAvgModel) Name() string { + return "holt_winters" +} + +// Settings of the model. +func (m *HoltWintersMovAvgModel) Settings() map[string]interface{} { + settings := make(map[string]interface{}) + if m.alpha != nil { + settings["alpha"] = *m.alpha + } + if m.beta != nil { + settings["beta"] = *m.beta + } + if m.gamma != nil { + settings["gamma"] = *m.gamma + } + if m.period != nil { + settings["period"] = *m.period + } + if m.pad != nil { + settings["pad"] = *m.pad + } + if m.seasonalityType != "" { + settings["type"] = m.seasonalityType + } + return settings +} + +// -- Linear -- + +// LinearMovAvgModel calculates a linearly weighted moving average, such +// that older values are linearly less important. "Time" is determined +// by position in collection. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-movavg-aggregation.html#_linear +type LinearMovAvgModel struct { +} + +// NewLinearMovAvgModel creates and initializes a new LinearMovAvgModel. +func NewLinearMovAvgModel() *LinearMovAvgModel { + return &LinearMovAvgModel{} +} + +// Name of the model. +func (m *LinearMovAvgModel) Name() string { + return "linear" +} + +// Settings of the model. +func (m *LinearMovAvgModel) Settings() map[string]interface{} { + return nil +} + +// -- Simple -- + +// SimpleMovAvgModel calculates a simple unweighted (arithmetic) moving average. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-movavg-aggregation.html#_simple +type SimpleMovAvgModel struct { +} + +// NewSimpleMovAvgModel creates and initializes a new SimpleMovAvgModel. +func NewSimpleMovAvgModel() *SimpleMovAvgModel { + return &SimpleMovAvgModel{} +} + +// Name of the model. +func (m *SimpleMovAvgModel) Name() string { + return "simple" +} + +// Settings of the model. +func (m *SimpleMovAvgModel) Settings() map[string]interface{} { + return nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_pipeline_mov_avg_test.go b/vendor/github.com/olivere/elastic/search_aggs_pipeline_mov_avg_test.go new file mode 100644 index 0000000..f6d3d0a --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_pipeline_mov_avg_test.go @@ -0,0 +1,114 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestMovAvgAggregation(t *testing.T) { + agg := NewMovAvgAggregation().BucketsPath("the_sum") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"moving_avg":{"buckets_path":"the_sum"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestMovAvgAggregationWithSimpleModel(t *testing.T) { + agg := NewMovAvgAggregation().BucketsPath("the_sum").Window(30).Model(NewSimpleMovAvgModel()) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"moving_avg":{"buckets_path":"the_sum","model":"simple","window":30}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestMovAvgAggregationWithLinearModel(t *testing.T) { + agg := NewMovAvgAggregation().BucketsPath("the_sum").Window(30).Model(NewLinearMovAvgModel()) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"moving_avg":{"buckets_path":"the_sum","model":"linear","window":30}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestMovAvgAggregationWithEWMAModel(t *testing.T) { + agg := NewMovAvgAggregation().BucketsPath("the_sum").Window(30).Model(NewEWMAMovAvgModel().Alpha(0.5)) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"moving_avg":{"buckets_path":"the_sum","model":"ewma","settings":{"alpha":0.5},"window":30}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestMovAvgAggregationWithHoltLinearModel(t *testing.T) { + agg := NewMovAvgAggregation().BucketsPath("the_sum").Window(30). + Model(NewHoltLinearMovAvgModel().Alpha(0.5).Beta(0.4)) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"moving_avg":{"buckets_path":"the_sum","model":"holt","settings":{"alpha":0.5,"beta":0.4},"window":30}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestMovAvgAggregationWithHoltWintersModel(t *testing.T) { + agg := NewMovAvgAggregation().BucketsPath("the_sum").Window(30).Predict(10).Minimize(true). + Model(NewHoltWintersMovAvgModel().Alpha(0.5).Beta(0.4).Gamma(0.3).Period(7).Pad(true)) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"moving_avg":{"buckets_path":"the_sum","minimize":true,"model":"holt_winters","predict":10,"settings":{"alpha":0.5,"beta":0.4,"gamma":0.3,"pad":true,"period":7},"window":30}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_pipeline_percentiles_bucket.go b/vendor/github.com/olivere/elastic/search_aggs_pipeline_percentiles_bucket.go new file mode 100644 index 0000000..671e31e --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_pipeline_percentiles_bucket.go @@ -0,0 +1,104 @@ +// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// PercentilesBucketAggregation is a sibling pipeline aggregation which calculates +// percentiles across all bucket of a specified metric in a sibling aggregation. +// The specified metric must be numeric and the sibling aggregation must +// be a multi-bucket aggregation. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-percentiles-bucket-aggregation.html +type PercentilesBucketAggregation struct { + format string + gapPolicy string + percents []float64 + bucketsPaths []string + + meta map[string]interface{} +} + +// NewPercentilesBucketAggregation creates and initializes a new PercentilesBucketAggregation. +func NewPercentilesBucketAggregation() *PercentilesBucketAggregation { + return &PercentilesBucketAggregation{} +} + +// Format to apply the output value of this aggregation. +func (p *PercentilesBucketAggregation) Format(format string) *PercentilesBucketAggregation { + p.format = format + return p +} + +// Percents to calculate percentiles for in this aggregation. +func (p *PercentilesBucketAggregation) Percents(percents ...float64) *PercentilesBucketAggregation { + p.percents = percents + return p +} + +// GapPolicy defines what should be done when a gap in the series is discovered. +// Valid values include "insert_zeros" or "skip". Default is "insert_zeros". +func (p *PercentilesBucketAggregation) GapPolicy(gapPolicy string) *PercentilesBucketAggregation { + p.gapPolicy = gapPolicy + return p +} + +// GapInsertZeros inserts zeros for gaps in the series. +func (p *PercentilesBucketAggregation) GapInsertZeros() *PercentilesBucketAggregation { + p.gapPolicy = "insert_zeros" + return p +} + +// GapSkip skips gaps in the series. +func (p *PercentilesBucketAggregation) GapSkip() *PercentilesBucketAggregation { + p.gapPolicy = "skip" + return p +} + +// Meta sets the meta data to be included in the aggregation response. +func (p *PercentilesBucketAggregation) Meta(metaData map[string]interface{}) *PercentilesBucketAggregation { + p.meta = metaData + return p +} + +// BucketsPath sets the paths to the buckets to use for this pipeline aggregator. +func (p *PercentilesBucketAggregation) BucketsPath(bucketsPaths ...string) *PercentilesBucketAggregation { + p.bucketsPaths = append(p.bucketsPaths, bucketsPaths...) + return p +} + +// Source returns the a JSON-serializable interface. +func (p *PercentilesBucketAggregation) Source() (interface{}, error) { + source := make(map[string]interface{}) + params := make(map[string]interface{}) + source["percentiles_bucket"] = params + + if p.format != "" { + params["format"] = p.format + } + if p.gapPolicy != "" { + params["gap_policy"] = p.gapPolicy + } + + // Add buckets paths + switch len(p.bucketsPaths) { + case 0: + case 1: + params["buckets_path"] = p.bucketsPaths[0] + default: + params["buckets_path"] = p.bucketsPaths + } + + // Add percents + if len(p.percents) > 0 { + params["percents"] = p.percents + } + + // Add Meta data if available + if len(p.meta) > 0 { + source["meta"] = p.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_pipeline_percentiles_bucket_test.go b/vendor/github.com/olivere/elastic/search_aggs_pipeline_percentiles_bucket_test.go new file mode 100644 index 0000000..5fa2639 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_pipeline_percentiles_bucket_test.go @@ -0,0 +1,44 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestPercentilesBucketAggregation(t *testing.T) { + agg := NewPercentilesBucketAggregation().BucketsPath("the_sum").GapPolicy("skip") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"percentiles_bucket":{"buckets_path":"the_sum","gap_policy":"skip"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestPercentilesBucketAggregationWithPercents(t *testing.T) { + agg := NewPercentilesBucketAggregation().BucketsPath("the_sum").Percents(0.1, 1.0, 5.0, 25, 50) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"percentiles_bucket":{"buckets_path":"the_sum","percents":[0.1,1,5,25,50]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_pipeline_serial_diff.go b/vendor/github.com/olivere/elastic/search_aggs_pipeline_serial_diff.go new file mode 100644 index 0000000..98f84b5 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_pipeline_serial_diff.go @@ -0,0 +1,105 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// SerialDiffAggregation implements serial differencing. +// Serial differencing is a technique where values in a time series are +// subtracted from itself at different time lags or periods. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-serialdiff-aggregation.html +type SerialDiffAggregation struct { + format string + gapPolicy string + lag *int + + meta map[string]interface{} + bucketsPaths []string +} + +// NewSerialDiffAggregation creates and initializes a new SerialDiffAggregation. +func NewSerialDiffAggregation() *SerialDiffAggregation { + return &SerialDiffAggregation{ + bucketsPaths: make([]string, 0), + } +} + +// Format to use on the output of this aggregation. +func (a *SerialDiffAggregation) Format(format string) *SerialDiffAggregation { + a.format = format + return a +} + +// GapPolicy defines what should be done when a gap in the series is discovered. +// Valid values include "insert_zeros" or "skip". Default is "insert_zeros". +func (a *SerialDiffAggregation) GapPolicy(gapPolicy string) *SerialDiffAggregation { + a.gapPolicy = gapPolicy + return a +} + +// GapInsertZeros inserts zeros for gaps in the series. +func (a *SerialDiffAggregation) GapInsertZeros() *SerialDiffAggregation { + a.gapPolicy = "insert_zeros" + return a +} + +// GapSkip skips gaps in the series. +func (a *SerialDiffAggregation) GapSkip() *SerialDiffAggregation { + a.gapPolicy = "skip" + return a +} + +// Lag specifies the historical bucket to subtract from the current value. +// E.g. a lag of 7 will subtract the current value from the value 7 buckets +// ago. Lag must be a positive, non-zero integer. +func (a *SerialDiffAggregation) Lag(lag int) *SerialDiffAggregation { + a.lag = &lag + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *SerialDiffAggregation) Meta(metaData map[string]interface{}) *SerialDiffAggregation { + a.meta = metaData + return a +} + +// BucketsPath sets the paths to the buckets to use for this pipeline aggregator. +func (a *SerialDiffAggregation) BucketsPath(bucketsPaths ...string) *SerialDiffAggregation { + a.bucketsPaths = append(a.bucketsPaths, bucketsPaths...) + return a +} + +// Source returns the a JSON-serializable interface. +func (a *SerialDiffAggregation) Source() (interface{}, error) { + source := make(map[string]interface{}) + params := make(map[string]interface{}) + source["serial_diff"] = params + + if a.format != "" { + params["format"] = a.format + } + if a.gapPolicy != "" { + params["gap_policy"] = a.gapPolicy + } + if a.lag != nil { + params["lag"] = *a.lag + } + + // Add buckets paths + switch len(a.bucketsPaths) { + case 0: + case 1: + params["buckets_path"] = a.bucketsPaths[0] + default: + params["buckets_path"] = a.bucketsPaths + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_pipeline_serial_diff_test.go b/vendor/github.com/olivere/elastic/search_aggs_pipeline_serial_diff_test.go new file mode 100644 index 0000000..6d336a2 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_pipeline_serial_diff_test.go @@ -0,0 +1,27 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestSerialDiffAggregation(t *testing.T) { + agg := NewSerialDiffAggregation().BucketsPath("the_sum").Lag(7) + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"serial_diff":{"buckets_path":"the_sum","lag":7}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_pipeline_stats_bucket.go b/vendor/github.com/olivere/elastic/search_aggs_pipeline_stats_bucket.go new file mode 100644 index 0000000..3f3682e --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_pipeline_stats_bucket.go @@ -0,0 +1,94 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// StatsBucketAggregation is a sibling pipeline aggregation which calculates +// a variety of stats across all bucket of a specified metric in a sibling aggregation. +// The specified metric must be numeric and the sibling aggregation must +// be a multi-bucket aggregation. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-stats-bucket-aggregation.html +type StatsBucketAggregation struct { + format string + gapPolicy string + + meta map[string]interface{} + bucketsPaths []string +} + +// NewStatsBucketAggregation creates and initializes a new StatsBucketAggregation. +func NewStatsBucketAggregation() *StatsBucketAggregation { + return &StatsBucketAggregation{ + bucketsPaths: make([]string, 0), + } +} + +// Format to use on the output of this aggregation. +func (s *StatsBucketAggregation) Format(format string) *StatsBucketAggregation { + s.format = format + return s +} + +// GapPolicy defines what should be done when a gap in the series is discovered. +// Valid values include "insert_zeros" or "skip". Default is "insert_zeros". +func (s *StatsBucketAggregation) GapPolicy(gapPolicy string) *StatsBucketAggregation { + s.gapPolicy = gapPolicy + return s +} + +// GapInsertZeros inserts zeros for gaps in the series. +func (s *StatsBucketAggregation) GapInsertZeros() *StatsBucketAggregation { + s.gapPolicy = "insert_zeros" + return s +} + +// GapSkip skips gaps in the series. +func (s *StatsBucketAggregation) GapSkip() *StatsBucketAggregation { + s.gapPolicy = "skip" + return s +} + +// Meta sets the meta data to be included in the aggregation response. +func (s *StatsBucketAggregation) Meta(metaData map[string]interface{}) *StatsBucketAggregation { + s.meta = metaData + return s +} + +// BucketsPath sets the paths to the buckets to use for this pipeline aggregator. +func (s *StatsBucketAggregation) BucketsPath(bucketsPaths ...string) *StatsBucketAggregation { + s.bucketsPaths = append(s.bucketsPaths, bucketsPaths...) + return s +} + +// Source returns the a JSON-serializable interface. +func (s *StatsBucketAggregation) Source() (interface{}, error) { + source := make(map[string]interface{}) + params := make(map[string]interface{}) + source["stats_bucket"] = params + + if s.format != "" { + params["format"] = s.format + } + if s.gapPolicy != "" { + params["gap_policy"] = s.gapPolicy + } + + // Add buckets paths + switch len(s.bucketsPaths) { + case 0: + case 1: + params["buckets_path"] = s.bucketsPaths[0] + default: + params["buckets_path"] = s.bucketsPaths + } + + // Add Meta data if available + if len(s.meta) > 0 { + source["meta"] = s.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_pipeline_stats_bucket_test.go b/vendor/github.com/olivere/elastic/search_aggs_pipeline_stats_bucket_test.go new file mode 100644 index 0000000..117a738 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_pipeline_stats_bucket_test.go @@ -0,0 +1,27 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestStatsBucketAggregation(t *testing.T) { + agg := NewStatsBucketAggregation().BucketsPath("the_sum").GapPolicy("skip") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"stats_bucket":{"buckets_path":"the_sum","gap_policy":"skip"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_pipeline_sum_bucket.go b/vendor/github.com/olivere/elastic/search_aggs_pipeline_sum_bucket.go new file mode 100644 index 0000000..a623ef3 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_pipeline_sum_bucket.go @@ -0,0 +1,94 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// SumBucketAggregation is a sibling pipeline aggregation which calculates +// the sum across all buckets of a specified metric in a sibling aggregation. +// The specified metric must be numeric and the sibling aggregation must +// be a multi-bucket aggregation. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-aggregations-pipeline-sum-bucket-aggregation.html +type SumBucketAggregation struct { + format string + gapPolicy string + + meta map[string]interface{} + bucketsPaths []string +} + +// NewSumBucketAggregation creates and initializes a new SumBucketAggregation. +func NewSumBucketAggregation() *SumBucketAggregation { + return &SumBucketAggregation{ + bucketsPaths: make([]string, 0), + } +} + +// Format to use on the output of this aggregation. +func (a *SumBucketAggregation) Format(format string) *SumBucketAggregation { + a.format = format + return a +} + +// GapPolicy defines what should be done when a gap in the series is discovered. +// Valid values include "insert_zeros" or "skip". Default is "insert_zeros". +func (a *SumBucketAggregation) GapPolicy(gapPolicy string) *SumBucketAggregation { + a.gapPolicy = gapPolicy + return a +} + +// GapInsertZeros inserts zeros for gaps in the series. +func (a *SumBucketAggregation) GapInsertZeros() *SumBucketAggregation { + a.gapPolicy = "insert_zeros" + return a +} + +// GapSkip skips gaps in the series. +func (a *SumBucketAggregation) GapSkip() *SumBucketAggregation { + a.gapPolicy = "skip" + return a +} + +// Meta sets the meta data to be included in the aggregation response. +func (a *SumBucketAggregation) Meta(metaData map[string]interface{}) *SumBucketAggregation { + a.meta = metaData + return a +} + +// BucketsPath sets the paths to the buckets to use for this pipeline aggregator. +func (a *SumBucketAggregation) BucketsPath(bucketsPaths ...string) *SumBucketAggregation { + a.bucketsPaths = append(a.bucketsPaths, bucketsPaths...) + return a +} + +// Source returns the a JSON-serializable interface. +func (a *SumBucketAggregation) Source() (interface{}, error) { + source := make(map[string]interface{}) + params := make(map[string]interface{}) + source["sum_bucket"] = params + + if a.format != "" { + params["format"] = a.format + } + if a.gapPolicy != "" { + params["gap_policy"] = a.gapPolicy + } + + // Add buckets paths + switch len(a.bucketsPaths) { + case 0: + case 1: + params["buckets_path"] = a.bucketsPaths[0] + default: + params["buckets_path"] = a.bucketsPaths + } + + // Add Meta data if available + if len(a.meta) > 0 { + source["meta"] = a.meta + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_pipeline_sum_bucket_test.go b/vendor/github.com/olivere/elastic/search_aggs_pipeline_sum_bucket_test.go new file mode 100644 index 0000000..be8275c --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_pipeline_sum_bucket_test.go @@ -0,0 +1,27 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestSumBucketAggregation(t *testing.T) { + agg := NewSumBucketAggregation().BucketsPath("the_sum") + src, err := agg.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"sum_bucket":{"buckets_path":"the_sum"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_pipeline_test.go b/vendor/github.com/olivere/elastic/search_aggs_pipeline_test.go new file mode 100644 index 0000000..24dd4eb --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_pipeline_test.go @@ -0,0 +1,903 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "testing" +) + +func TestAggsIntegrationAvgBucket(t *testing.T) { + //client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) + client := setupTestClientAndCreateIndexAndAddDocs(t) + + // Match all should return all documents + builder := client.Search(). + Index(testOrderIndex). + Type("doc"). + Query(NewMatchAllQuery()). + Pretty(true) + h := NewDateHistogramAggregation().Field("time").Interval("month") + h = h.SubAggregation("sales", NewSumAggregation().Field("price")) + builder = builder.Aggregation("sales_per_month", h) + builder = builder.Aggregation("avg_monthly_sales", NewAvgBucketAggregation().BucketsPath("sales_per_month>sales")) + + res, err := builder.Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if res.Hits == nil { + t.Errorf("expected Hits != nil; got: nil") + } + + aggs := res.Aggregations + if aggs == nil { + t.Fatal("expected aggregations != nil; got: nil") + } + + agg, found := aggs.AvgBucket("avg_monthly_sales") + if !found { + t.Fatal("expected avg_monthly_sales aggregation") + } + if agg == nil { + t.Fatal("expected avg_monthly_sales aggregation") + } + if agg.Value == nil { + t.Fatal("expected avg_monthly_sales.value != nil") + } + if got, want := *agg.Value, float64(939.2); got != want { + t.Fatalf("expected avg_monthly_sales.value=%v; got: %v", want, got) + } +} + +func TestAggsIntegrationDerivative(t *testing.T) { + //client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) + client := setupTestClientAndCreateIndexAndAddDocs(t) + + // Match all should return all documents + builder := client.Search(). + Index(testOrderIndex). + Type("doc"). + Query(NewMatchAllQuery()). + Pretty(true) + h := NewDateHistogramAggregation().Field("time").Interval("month") + h = h.SubAggregation("sales", NewSumAggregation().Field("price")) + h = h.SubAggregation("sales_deriv", NewDerivativeAggregation().BucketsPath("sales")) + builder = builder.Aggregation("sales_per_month", h) + + res, err := builder.Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if res.Hits == nil { + t.Errorf("expected Hits != nil; got: nil") + } + + aggs := res.Aggregations + if aggs == nil { + t.Fatal("expected aggregations != nil; got: nil") + } + + agg, found := aggs.DateHistogram("sales_per_month") + if !found { + t.Fatal("expected sales_per_month aggregation") + } + if agg == nil { + t.Fatal("expected sales_per_month aggregation") + } + if got, want := len(agg.Buckets), 6; got != want { + t.Fatalf("expected %d buckets; got: %d", want, got) + } + + if got, want := agg.Buckets[0].DocCount, int64(1); got != want { + t.Fatalf("expected DocCount=%d; got: %d", want, got) + } + if got, want := agg.Buckets[1].DocCount, int64(0); got != want { + t.Fatalf("expected DocCount=%d; got: %d", want, got) + } + if got, want := agg.Buckets[2].DocCount, int64(1); got != want { + t.Fatalf("expected DocCount=%d; got: %d", want, got) + } + if got, want := agg.Buckets[3].DocCount, int64(3); got != want { + t.Fatalf("expected DocCount=%d; got: %d", want, got) + } + if got, want := agg.Buckets[4].DocCount, int64(1); got != want { + t.Fatalf("expected DocCount=%d; got: %d", want, got) + } + if got, want := agg.Buckets[5].DocCount, int64(2); got != want { + t.Fatalf("expected DocCount=%d; got: %d", want, got) + } + + d, found := agg.Buckets[0].Derivative("sales_deriv") + if found { + t.Fatal("expected no sales_deriv aggregation") + } + if d != nil { + t.Fatal("expected no sales_deriv aggregation") + } + + d, found = agg.Buckets[1].Derivative("sales_deriv") + if !found { + t.Fatal("expected sales_deriv aggregation") + } + if d == nil { + t.Fatal("expected sales_deriv aggregation") + } + if d.Value != nil { + t.Fatal("expected sales_deriv value == nil") + } + + d, found = agg.Buckets[2].Derivative("sales_deriv") + if !found { + t.Fatal("expected sales_deriv aggregation") + } + if d == nil { + t.Fatal("expected sales_deriv aggregation") + } + if d.Value != nil { + t.Fatal("expected sales_deriv value == nil") + } + + d, found = agg.Buckets[3].Derivative("sales_deriv") + if !found { + t.Fatal("expected sales_deriv aggregation") + } + if d == nil { + t.Fatal("expected sales_deriv aggregation") + } + if d.Value == nil { + t.Fatal("expected sales_deriv value != nil") + } + if got, want := *d.Value, float64(2348.0); got != want { + t.Fatalf("expected sales_deriv.value=%v; got: %v", want, got) + } + + d, found = agg.Buckets[4].Derivative("sales_deriv") + if !found { + t.Fatal("expected sales_deriv aggregation") + } + if d == nil { + t.Fatal("expected sales_deriv aggregation") + } + if d.Value == nil { + t.Fatal("expected sales_deriv value != nil") + } + if got, want := *d.Value, float64(-1658.0); got != want { + t.Fatalf("expected sales_deriv.value=%v; got: %v", want, got) + } + + d, found = agg.Buckets[5].Derivative("sales_deriv") + if !found { + t.Fatal("expected sales_deriv aggregation") + } + if d == nil { + t.Fatal("expected sales_deriv aggregation") + } + if d.Value == nil { + t.Fatal("expected sales_deriv value != nil") + } + if got, want := *d.Value, float64(-722.0); got != want { + t.Fatalf("expected sales_deriv.value=%v; got: %v", want, got) + } +} + +func TestAggsIntegrationMaxBucket(t *testing.T) { + //client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) + client := setupTestClientAndCreateIndexAndAddDocs(t) + + // Match all should return all documents + builder := client.Search(). + Index(testOrderIndex). + Type("doc"). + Query(NewMatchAllQuery()). + Pretty(true) + h := NewDateHistogramAggregation().Field("time").Interval("month") + h = h.SubAggregation("sales", NewSumAggregation().Field("price")) + builder = builder.Aggregation("sales_per_month", h) + builder = builder.Aggregation("max_monthly_sales", NewMaxBucketAggregation().BucketsPath("sales_per_month>sales")) + + res, err := builder.Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if res.Hits == nil { + t.Errorf("expected Hits != nil; got: nil") + } + + aggs := res.Aggregations + if aggs == nil { + t.Fatal("expected aggregations != nil; got: nil") + } + + agg, found := aggs.MaxBucket("max_monthly_sales") + if !found { + t.Fatal("expected max_monthly_sales aggregation") + } + if agg == nil { + t.Fatal("expected max_monthly_sales aggregation") + } + if got, want := len(agg.Keys), 1; got != want { + t.Fatalf("expected len(max_monthly_sales.keys)=%d; got: %d", want, got) + } + if got, want := agg.Keys[0], "2015-04-01"; got != want { + t.Fatalf("expected max_monthly_sales.keys[0]=%v; got: %v", want, got) + } + if agg.Value == nil { + t.Fatal("expected max_monthly_sales.value != nil") + } + if got, want := *agg.Value, float64(2448); got != want { + t.Fatalf("expected max_monthly_sales.value=%v; got: %v", want, got) + } +} + +func TestAggsIntegrationMinBucket(t *testing.T) { + //client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) + client := setupTestClientAndCreateIndexAndAddDocs(t) + + // Match all should return all documents + builder := client.Search(). + Index(testOrderIndex). + Type("doc"). + Query(NewMatchAllQuery()). + Pretty(true) + h := NewDateHistogramAggregation().Field("time").Interval("month") + h = h.SubAggregation("sales", NewSumAggregation().Field("price")) + builder = builder.Aggregation("sales_per_month", h) + builder = builder.Aggregation("min_monthly_sales", NewMinBucketAggregation().BucketsPath("sales_per_month>sales")) + + res, err := builder.Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if res.Hits == nil { + t.Errorf("expected Hits != nil; got: nil") + } + + aggs := res.Aggregations + if aggs == nil { + t.Fatal("expected aggregations != nil; got: nil") + } + + agg, found := aggs.MinBucket("min_monthly_sales") + if !found { + t.Fatal("expected min_monthly_sales aggregation") + } + if agg == nil { + t.Fatal("expected min_monthly_sales aggregation") + } + if got, want := len(agg.Keys), 1; got != want { + t.Fatalf("expected len(min_monthly_sales.keys)=%d; got: %d", want, got) + } + if got, want := agg.Keys[0], "2015-06-01"; got != want { + t.Fatalf("expected min_monthly_sales.keys[0]=%v; got: %v", want, got) + } + if agg.Value == nil { + t.Fatal("expected min_monthly_sales.value != nil") + } + if got, want := *agg.Value, float64(68); got != want { + t.Fatalf("expected min_monthly_sales.value=%v; got: %v", want, got) + } +} + +func TestAggsIntegrationSumBucket(t *testing.T) { + //client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) + client := setupTestClientAndCreateIndexAndAddDocs(t) + + // Match all should return all documents + builder := client.Search(). + Index(testOrderIndex). + Type("doc"). + Query(NewMatchAllQuery()). + Pretty(true) + h := NewDateHistogramAggregation().Field("time").Interval("month") + h = h.SubAggregation("sales", NewSumAggregation().Field("price")) + builder = builder.Aggregation("sales_per_month", h) + builder = builder.Aggregation("sum_monthly_sales", NewSumBucketAggregation().BucketsPath("sales_per_month>sales")) + + res, err := builder.Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if res.Hits == nil { + t.Errorf("expected Hits != nil; got: nil") + } + + aggs := res.Aggregations + if aggs == nil { + t.Fatal("expected aggregations != nil; got: nil") + } + + agg, found := aggs.SumBucket("sum_monthly_sales") + if !found { + t.Fatal("expected sum_monthly_sales aggregation") + } + if agg == nil { + t.Fatal("expected sum_monthly_sales aggregation") + } + if agg.Value == nil { + t.Fatal("expected sum_monthly_sales.value != nil") + } + if got, want := *agg.Value, float64(4696.0); got != want { + t.Fatalf("expected sum_monthly_sales.value=%v; got: %v", want, got) + } +} + +func TestAggsIntegrationMovAvg(t *testing.T) { + //client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) + client := setupTestClientAndCreateIndexAndAddDocs(t) + + // Match all should return all documents + builder := client.Search(). + Index(testOrderIndex). + Type("doc"). + Query(NewMatchAllQuery()). + Pretty(true) + h := NewDateHistogramAggregation().Field("time").Interval("month") + h = h.SubAggregation("the_sum", NewSumAggregation().Field("price")) + h = h.SubAggregation("the_movavg", NewMovAvgAggregation().BucketsPath("the_sum")) + builder = builder.Aggregation("my_date_histo", h) + + res, err := builder.Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if res.Hits == nil { + t.Errorf("expected Hits != nil; got: nil") + } + + aggs := res.Aggregations + if aggs == nil { + t.Fatal("expected aggregations != nil; got: nil") + } + + agg, found := aggs.DateHistogram("my_date_histo") + if !found { + t.Fatal("expected sum_monthly_sales aggregation") + } + if agg == nil { + t.Fatal("expected sum_monthly_sales aggregation") + } + if got, want := len(agg.Buckets), 6; got != want { + t.Fatalf("expected %d buckets; got: %d", want, got) + } + + d, found := agg.Buckets[0].MovAvg("the_movavg") + if found { + t.Fatal("expected no the_movavg aggregation") + } + if d != nil { + t.Fatal("expected no the_movavg aggregation") + } + + d, found = agg.Buckets[1].MovAvg("the_movavg") + if found { + t.Fatal("expected no the_movavg aggregation") + } + if d != nil { + t.Fatal("expected no the_movavg aggregation") + } + + d, found = agg.Buckets[2].MovAvg("the_movavg") + if !found { + t.Fatal("expected the_movavg aggregation") + } + if d == nil { + t.Fatal("expected the_movavg aggregation") + } + if d.Value == nil { + t.Fatal("expected the_movavg value") + } + if got, want := *d.Value, float64(1290.0); got != want { + t.Fatalf("expected %v buckets; got: %v", want, got) + } + + d, found = agg.Buckets[3].MovAvg("the_movavg") + if !found { + t.Fatal("expected the_movavg aggregation") + } + if d == nil { + t.Fatal("expected the_movavg aggregation") + } + if d.Value == nil { + t.Fatal("expected the_movavg value") + } + if got, want := *d.Value, float64(695.0); got != want { + t.Fatalf("expected %v buckets; got: %v", want, got) + } + + d, found = agg.Buckets[4].MovAvg("the_movavg") + if !found { + t.Fatal("expected the_movavg aggregation") + } + if d == nil { + t.Fatal("expected the_movavg aggregation") + } + if d.Value == nil { + t.Fatal("expected the_movavg value") + } + if got, want := *d.Value, float64(1279.3333333333333); got != want { + t.Fatalf("expected %v buckets; got: %v", want, got) + } + + d, found = agg.Buckets[5].MovAvg("the_movavg") + if !found { + t.Fatal("expected the_movavg aggregation") + } + if d == nil { + t.Fatal("expected the_movavg aggregation") + } + if d.Value == nil { + t.Fatal("expected the_movavg value") + } + if got, want := *d.Value, float64(1157.0); got != want { + t.Fatalf("expected %v buckets; got: %v", want, got) + } +} + +func TestAggsIntegrationCumulativeSum(t *testing.T) { + //client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) + client := setupTestClientAndCreateIndexAndAddDocs(t) + + // Match all should return all documents + builder := client.Search(). + Index(testOrderIndex). + Type("doc"). + Query(NewMatchAllQuery()). + Pretty(true) + h := NewDateHistogramAggregation().Field("time").Interval("month") + h = h.SubAggregation("sales", NewSumAggregation().Field("price")) + h = h.SubAggregation("cumulative_sales", NewCumulativeSumAggregation().BucketsPath("sales")) + builder = builder.Aggregation("sales_per_month", h) + + res, err := builder.Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if res.Hits == nil { + t.Errorf("expected Hits != nil; got: nil") + } + + aggs := res.Aggregations + if aggs == nil { + t.Fatal("expected aggregations != nil; got: nil") + } + + agg, found := aggs.DateHistogram("sales_per_month") + if !found { + t.Fatal("expected sales_per_month aggregation") + } + if agg == nil { + t.Fatal("expected sales_per_month aggregation") + } + if got, want := len(agg.Buckets), 6; got != want { + t.Fatalf("expected %d buckets; got: %d", want, got) + } + + if got, want := agg.Buckets[0].DocCount, int64(1); got != want { + t.Fatalf("expected DocCount=%d; got: %d", want, got) + } + if got, want := agg.Buckets[1].DocCount, int64(0); got != want { + t.Fatalf("expected DocCount=%d; got: %d", want, got) + } + if got, want := agg.Buckets[2].DocCount, int64(1); got != want { + t.Fatalf("expected DocCount=%d; got: %d", want, got) + } + if got, want := agg.Buckets[3].DocCount, int64(3); got != want { + t.Fatalf("expected DocCount=%d; got: %d", want, got) + } + if got, want := agg.Buckets[4].DocCount, int64(1); got != want { + t.Fatalf("expected DocCount=%d; got: %d", want, got) + } + if got, want := agg.Buckets[5].DocCount, int64(2); got != want { + t.Fatalf("expected DocCount=%d; got: %d", want, got) + } + + d, found := agg.Buckets[0].CumulativeSum("cumulative_sales") + if !found { + t.Fatal("expected cumulative_sales aggregation") + } + if d == nil { + t.Fatal("expected cumulative_sales aggregation") + } + if d.Value == nil { + t.Fatal("expected cumulative_sales value != nil") + } + if got, want := *d.Value, float64(1290.0); got != want { + t.Fatalf("expected cumulative_sales.value=%v; got: %v", want, got) + } + + d, found = agg.Buckets[1].CumulativeSum("cumulative_sales") + if !found { + t.Fatal("expected cumulative_sales aggregation") + } + if d == nil { + t.Fatal("expected cumulative_sales aggregation") + } + if d.Value == nil { + t.Fatal("expected cumulative_sales value != nil") + } + if got, want := *d.Value, float64(1290.0); got != want { + t.Fatalf("expected cumulative_sales.value=%v; got: %v", want, got) + } + + d, found = agg.Buckets[2].CumulativeSum("cumulative_sales") + if !found { + t.Fatal("expected cumulative_sales aggregation") + } + if d == nil { + t.Fatal("expected cumulative_sales aggregation") + } + if d.Value == nil { + t.Fatal("expected cumulative_sales value != nil") + } + if got, want := *d.Value, float64(1390.0); got != want { + t.Fatalf("expected cumulative_sales.value=%v; got: %v", want, got) + } + + d, found = agg.Buckets[3].CumulativeSum("cumulative_sales") + if !found { + t.Fatal("expected cumulative_sales aggregation") + } + if d == nil { + t.Fatal("expected cumulative_sales aggregation") + } + if d.Value == nil { + t.Fatal("expected cumulative_sales value != nil") + } + if got, want := *d.Value, float64(3838.0); got != want { + t.Fatalf("expected cumulative_sales.value=%v; got: %v", want, got) + } + + d, found = agg.Buckets[4].CumulativeSum("cumulative_sales") + if !found { + t.Fatal("expected cumulative_sales aggregation") + } + if d == nil { + t.Fatal("expected cumulative_sales aggregation") + } + if d.Value == nil { + t.Fatal("expected cumulative_sales value != nil") + } + if got, want := *d.Value, float64(4628.0); got != want { + t.Fatalf("expected cumulative_sales.value=%v; got: %v", want, got) + } + + d, found = agg.Buckets[5].CumulativeSum("cumulative_sales") + if !found { + t.Fatal("expected cumulative_sales aggregation") + } + if d == nil { + t.Fatal("expected cumulative_sales aggregation") + } + if d.Value == nil { + t.Fatal("expected cumulative_sales value != nil") + } + if got, want := *d.Value, float64(4696.0); got != want { + t.Fatalf("expected cumulative_sales.value=%v; got: %v", want, got) + } +} + +func TestAggsIntegrationBucketScript(t *testing.T) { + // client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) + client := setupTestClientAndCreateIndexAndAddDocs(t) + + // Match all should return all documents + builder := client.Search(). + Index(testOrderIndex). + Type("doc"). + Query(NewMatchAllQuery()). + Pretty(true) + h := NewDateHistogramAggregation().Field("time").Interval("month") + h = h.SubAggregation("total_sales", NewSumAggregation().Field("price")) + appleFilter := NewFilterAggregation().Filter(NewTermQuery("manufacturer", "Apple")) + appleFilter = appleFilter.SubAggregation("sales", NewSumAggregation().Field("price")) + h = h.SubAggregation("apple_sales", appleFilter) + h = h.SubAggregation("apple_percentage", + NewBucketScriptAggregation(). + GapPolicy("insert_zeros"). + AddBucketsPath("appleSales", "apple_sales>sales"). + AddBucketsPath("totalSales", "total_sales"). + Script(NewScript("params.appleSales / params.totalSales * 100"))) + builder = builder.Aggregation("sales_per_month", h) + + res, err := builder.Pretty(true).Do(context.TODO()) + if err != nil { + t.Fatalf("%v (maybe scripting is disabled?)", err) + } + if res.Hits == nil { + t.Errorf("expected Hits != nil; got: nil") + } + + aggs := res.Aggregations + if aggs == nil { + t.Fatal("expected aggregations != nil; got: nil") + } + + agg, found := aggs.DateHistogram("sales_per_month") + if !found { + t.Fatal("expected sales_per_month aggregation") + } + if agg == nil { + t.Fatal("expected sales_per_month aggregation") + } + if got, want := len(agg.Buckets), 6; got != want { + t.Fatalf("expected %d buckets; got: %d", want, got) + } + + if got, want := agg.Buckets[0].DocCount, int64(1); got != want { + t.Fatalf("expected DocCount=%d; got: %d", want, got) + } + if got, want := agg.Buckets[1].DocCount, int64(0); got != want { + t.Fatalf("expected DocCount=%d; got: %d", want, got) + } + if got, want := agg.Buckets[2].DocCount, int64(1); got != want { + t.Fatalf("expected DocCount=%d; got: %d", want, got) + } + if got, want := agg.Buckets[3].DocCount, int64(3); got != want { + t.Fatalf("expected DocCount=%d; got: %d", want, got) + } + if got, want := agg.Buckets[4].DocCount, int64(1); got != want { + t.Fatalf("expected DocCount=%d; got: %d", want, got) + } + if got, want := agg.Buckets[5].DocCount, int64(2); got != want { + t.Fatalf("expected DocCount=%d; got: %d", want, got) + } + + d, found := agg.Buckets[0].BucketScript("apple_percentage") + if !found { + t.Fatal("expected apple_percentage aggregation") + } + if d == nil { + t.Fatal("expected apple_percentage aggregation") + } + if d.Value == nil { + t.Fatal("expected apple_percentage value != nil") + } + if got, want := *d.Value, float64(100.0); got != want { + t.Fatalf("expected apple_percentage.value=%v; got: %v", want, got) + } + + d, found = agg.Buckets[1].BucketScript("apple_percentage") + if !found { + t.Fatal("expected apple_percentage aggregation") + } + if d == nil { + t.Fatal("expected apple_percentage aggregation") + } + if d.Value != nil { + t.Fatal("expected apple_percentage value == nil") + } + + d, found = agg.Buckets[2].BucketScript("apple_percentage") + if !found { + t.Fatal("expected apple_percentage aggregation") + } + if d == nil { + t.Fatal("expected apple_percentage aggregation") + } + if d.Value == nil { + t.Fatal("expected apple_percentage value != nil") + } + if got, want := *d.Value, float64(0.0); got != want { + t.Fatalf("expected apple_percentage.value=%v; got: %v", want, got) + } + + d, found = agg.Buckets[3].BucketScript("apple_percentage") + if !found { + t.Fatal("expected apple_percentage aggregation") + } + if d == nil { + t.Fatal("expected apple_percentage aggregation") + } + if d.Value == nil { + t.Fatal("expected apple_percentage value != nil") + } + if got, want := *d.Value, float64(34.64052287581699); got != want { + t.Fatalf("expected apple_percentage.value=%v; got: %v", want, got) + } + + d, found = agg.Buckets[4].BucketScript("apple_percentage") + if !found { + t.Fatal("expected apple_percentage aggregation") + } + if d == nil { + t.Fatal("expected apple_percentage aggregation") + } + if d.Value == nil { + t.Fatal("expected apple_percentage value != nil") + } + if got, want := *d.Value, float64(0.0); got != want { + t.Fatalf("expected apple_percentage.value=%v; got: %v", want, got) + } + + d, found = agg.Buckets[5].BucketScript("apple_percentage") + if !found { + t.Fatal("expected apple_percentage aggregation") + } + if d == nil { + t.Fatal("expected apple_percentage aggregation") + } + if d.Value == nil { + t.Fatal("expected apple_percentage value != nil") + } + if got, want := *d.Value, float64(0.0); got != want { + t.Fatalf("expected apple_percentage.value=%v; got: %v", want, got) + } +} + +func TestAggsIntegrationBucketSelector(t *testing.T) { + //client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) + client := setupTestClientAndCreateIndexAndAddDocs(t) + + // Match all should return all documents + builder := client.Search(). + Index(testOrderIndex). + Type("doc"). + Query(NewMatchAllQuery()). + Pretty(true) + h := NewDateHistogramAggregation().Field("time").Interval("month") + h = h.SubAggregation("total_sales", NewSumAggregation().Field("price")) + h = h.SubAggregation("sales_bucket_filter", + NewBucketSelectorAggregation(). + AddBucketsPath("totalSales", "total_sales"). + Script(NewScript("params.totalSales <= 100"))) + builder = builder.Aggregation("sales_per_month", h) + + res, err := builder.Do(context.TODO()) + if err != nil { + t.Fatalf("%v (maybe scripting is disabled?)", err) + } + if res.Hits == nil { + t.Errorf("expected Hits != nil; got: nil") + } + + aggs := res.Aggregations + if aggs == nil { + t.Fatal("expected aggregations != nil; got: nil") + } + + agg, found := aggs.DateHistogram("sales_per_month") + if !found { + t.Fatal("expected sales_per_month aggregation") + } + if agg == nil { + t.Fatal("expected sales_per_month aggregation") + } + if got, want := len(agg.Buckets), 2; got != want { + t.Fatalf("expected %d buckets; got: %d", want, got) + } + + if got, want := agg.Buckets[0].DocCount, int64(1); got != want { + t.Fatalf("expected DocCount=%d; got: %d", want, got) + } + if got, want := agg.Buckets[1].DocCount, int64(2); got != want { + t.Fatalf("expected DocCount=%d; got: %d", want, got) + } +} + +func TestAggsIntegrationSerialDiff(t *testing.T) { + //client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) + client := setupTestClientAndCreateIndexAndAddDocs(t) + + // Match all should return all documents + builder := client.Search(). + Index(testOrderIndex). + Type("doc"). + Query(NewMatchAllQuery()). + Pretty(true) + h := NewDateHistogramAggregation().Field("time").Interval("month") + h = h.SubAggregation("sales", NewSumAggregation().Field("price")) + h = h.SubAggregation("the_diff", NewSerialDiffAggregation().BucketsPath("sales").Lag(1)) + builder = builder.Aggregation("sales_per_month", h) + + res, err := builder.Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if res.Hits == nil { + t.Errorf("expected Hits != nil; got: nil") + } + + aggs := res.Aggregations + if aggs == nil { + t.Fatal("expected aggregations != nil; got: nil") + } + + agg, found := aggs.DateHistogram("sales_per_month") + if !found { + t.Fatal("expected sales_per_month aggregation") + } + if agg == nil { + t.Fatal("expected sales_per_month aggregation") + } + if got, want := len(agg.Buckets), 6; got != want { + t.Fatalf("expected %d buckets; got: %d", want, got) + } + + if got, want := agg.Buckets[0].DocCount, int64(1); got != want { + t.Fatalf("expected DocCount=%d; got: %d", want, got) + } + if got, want := agg.Buckets[1].DocCount, int64(0); got != want { + t.Fatalf("expected DocCount=%d; got: %d", want, got) + } + if got, want := agg.Buckets[2].DocCount, int64(1); got != want { + t.Fatalf("expected DocCount=%d; got: %d", want, got) + } + if got, want := agg.Buckets[3].DocCount, int64(3); got != want { + t.Fatalf("expected DocCount=%d; got: %d", want, got) + } + if got, want := agg.Buckets[4].DocCount, int64(1); got != want { + t.Fatalf("expected DocCount=%d; got: %d", want, got) + } + if got, want := agg.Buckets[5].DocCount, int64(2); got != want { + t.Fatalf("expected DocCount=%d; got: %d", want, got) + } + + d, found := agg.Buckets[0].SerialDiff("the_diff") + if found { + t.Fatal("expected no the_diff aggregation") + } + if d != nil { + t.Fatal("expected no the_diff aggregation") + } + + d, found = agg.Buckets[1].SerialDiff("the_diff") + if found { + t.Fatal("expected no the_diff aggregation") + } + if d != nil { + t.Fatal("expected no the_diff aggregation") + } + + d, found = agg.Buckets[2].SerialDiff("the_diff") + if found { + t.Fatal("expected no the_diff aggregation") + } + if d != nil { + t.Fatal("expected no the_diff aggregation") + } + + d, found = agg.Buckets[3].SerialDiff("the_diff") + if !found { + t.Fatal("expected the_diff aggregation") + } + if d == nil { + t.Fatal("expected the_diff aggregation") + } + if d.Value == nil { + t.Fatal("expected the_diff value != nil") + } + if got, want := *d.Value, float64(2348.0); got != want { + t.Fatalf("expected the_diff.value=%v; got: %v", want, got) + } + + d, found = agg.Buckets[4].SerialDiff("the_diff") + if !found { + t.Fatal("expected the_diff aggregation") + } + if d == nil { + t.Fatal("expected the_diff aggregation") + } + if d.Value == nil { + t.Fatal("expected the_diff value != nil") + } + if got, want := *d.Value, float64(-1658.0); got != want { + t.Fatalf("expected the_diff.value=%v; got: %v", want, got) + } + + d, found = agg.Buckets[5].SerialDiff("the_diff") + if !found { + t.Fatal("expected the_diff aggregation") + } + if d == nil { + t.Fatal("expected the_diff aggregation") + } + if d.Value == nil { + t.Fatal("expected the_diff value != nil") + } + if got, want := *d.Value, float64(-722.0); got != want { + t.Fatalf("expected the_diff.value=%v; got: %v", want, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_aggs_test.go b/vendor/github.com/olivere/elastic/search_aggs_test.go new file mode 100644 index 0000000..ccd6f91 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_aggs_test.go @@ -0,0 +1,3614 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "strings" + "testing" + "time" +) + +func TestAggs(t *testing.T) { + //client := setupTestClientAndCreateIndex(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) + client := setupTestClientAndCreateIndex(t) + + /* + esversion, err := client.ElasticsearchVersion(DefaultURL) + if err != nil { + t.Fatal(err) + } + */ + + tweet1 := tweet{ + User: "olivere", + Retweets: 108, + Message: "Welcome to Golang and Elasticsearch.", + Image: "http://golang.org/doc/gopher/gophercolor.png", + Tags: []string{"golang", "elasticsearch"}, + Location: "48.1333,11.5667", // lat,lon + Created: time.Date(2012, 12, 12, 17, 38, 34, 0, time.UTC), + } + tweet2 := tweet{ + User: "olivere", + Retweets: 0, + Message: "Another unrelated topic.", + Tags: []string{"golang"}, + Location: "48.1189,11.4289", // lat,lon + Created: time.Date(2012, 10, 10, 8, 12, 03, 0, time.UTC), + } + tweet3 := tweet{ + User: "sandrae", + Retweets: 12, + Message: "Cycling is fun.", + Tags: []string{"sports", "cycling"}, + Location: "47.7167,11.7167", // lat,lon + Created: time.Date(2011, 11, 11, 10, 58, 12, 0, time.UTC), + } + + // Add all documents + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Match all should return all documents + all := NewMatchAllQuery() + + // Terms Aggregate by user name + globalAgg := NewGlobalAggregation() + usersAgg := NewTermsAggregation().Field("user").Size(10).OrderByCountDesc() + retweetsAgg := NewTermsAggregation().Field("retweets").Size(10) + avgRetweetsAgg := NewAvgAggregation().Field("retweets") + avgRetweetsWithMetaAgg := NewAvgAggregation().Field("retweetsMeta").Meta(map[string]interface{}{"meta": true}) + minRetweetsAgg := NewMinAggregation().Field("retweets") + maxRetweetsAgg := NewMaxAggregation().Field("retweets") + sumRetweetsAgg := NewSumAggregation().Field("retweets") + statsRetweetsAgg := NewStatsAggregation().Field("retweets") + extstatsRetweetsAgg := NewExtendedStatsAggregation().Field("retweets") + valueCountRetweetsAgg := NewValueCountAggregation().Field("retweets") + percentilesRetweetsAgg := NewPercentilesAggregation().Field("retweets") + percentileRanksRetweetsAgg := NewPercentileRanksAggregation().Field("retweets").Values(25, 50, 75) + cardinalityAgg := NewCardinalityAggregation().Field("user") + significantTermsAgg := NewSignificantTermsAggregation().Field("message") + samplerAgg := NewSamplerAggregation().SubAggregation("tagged_with", NewTermsAggregation().Field("tags")) + diversifiedSamplerAgg := NewDiversifiedSamplerAggregation().Field("user").SubAggregation("tagged_with", NewSignificantTermsAggregation().Field("tags")) + retweetsRangeAgg := NewRangeAggregation().Field("retweets").Lt(10).Between(10, 100).Gt(100) + retweetsKeyedRangeAgg := NewRangeAggregation().Field("retweets").Keyed(true).Lt(10).Between(10, 100).Gt(100) + dateRangeAgg := NewDateRangeAggregation().Field("created").Lt("2012-01-01").Between("2012-01-01", "2013-01-01").Gt("2013-01-01") + missingTagsAgg := NewMissingAggregation().Field("tags") + retweetsHistoAgg := NewHistogramAggregation().Field("retweets").Interval(100) + dateHistoAgg := NewDateHistogramAggregation().Field("created").Interval("year") + retweetsFilterAgg := NewFilterAggregation().Filter( + NewRangeQuery("created").Gte("2012-01-01").Lte("2012-12-31")). + SubAggregation("avgRetweetsSub", NewAvgAggregation().Field("retweets")) + queryFilterAgg := NewFilterAggregation().Filter(NewTermQuery("tags", "golang")) + topTagsHitsAgg := NewTopHitsAggregation().Sort("created", false).Size(5).FetchSource(true) + topTagsAgg := NewTermsAggregation().Field("tags").Size(3).SubAggregation("top_tag_hits", topTagsHitsAgg) + geoBoundsAgg := NewGeoBoundsAggregation().Field("location") + geoHashAgg := NewGeoHashGridAggregation().Field("location").Precision(5) + composite := NewCompositeAggregation().Sources( + NewCompositeAggregationTermsValuesSource("composite_users").Field("user"), + NewCompositeAggregationHistogramValuesSource("composite_retweets", 1).Field("retweets"), + NewCompositeAggregationDateHistogramValuesSource("composite_created", "1m").Field("created"), + ) + geoCentroidAgg := NewGeoCentroidAggregation().Field("location") + + // Run query + builder := client.Search().Index(testIndexName).Query(all).Pretty(true) + builder = builder.Aggregation("global", globalAgg) + builder = builder.Aggregation("users", usersAgg) + builder = builder.Aggregation("retweets", retweetsAgg) + builder = builder.Aggregation("avgRetweets", avgRetweetsAgg) + builder = builder.Aggregation("avgRetweetsWithMeta", avgRetweetsWithMetaAgg) + builder = builder.Aggregation("minRetweets", minRetweetsAgg) + builder = builder.Aggregation("maxRetweets", maxRetweetsAgg) + builder = builder.Aggregation("sumRetweets", sumRetweetsAgg) + builder = builder.Aggregation("statsRetweets", statsRetweetsAgg) + builder = builder.Aggregation("extstatsRetweets", extstatsRetweetsAgg) + builder = builder.Aggregation("valueCountRetweets", valueCountRetweetsAgg) + builder = builder.Aggregation("percentilesRetweets", percentilesRetweetsAgg) + builder = builder.Aggregation("percentileRanksRetweets", percentileRanksRetweetsAgg) + builder = builder.Aggregation("usersCardinality", cardinalityAgg) + builder = builder.Aggregation("significantTerms", significantTermsAgg) + builder = builder.Aggregation("sample", samplerAgg) + builder = builder.Aggregation("diversified_sampler", diversifiedSamplerAgg) + builder = builder.Aggregation("retweetsRange", retweetsRangeAgg) + builder = builder.Aggregation("retweetsKeyedRange", retweetsKeyedRangeAgg) + builder = builder.Aggregation("dateRange", dateRangeAgg) + builder = builder.Aggregation("missingTags", missingTagsAgg) + builder = builder.Aggregation("retweetsHisto", retweetsHistoAgg) + builder = builder.Aggregation("dateHisto", dateHistoAgg) + builder = builder.Aggregation("retweetsFilter", retweetsFilterAgg) + builder = builder.Aggregation("queryFilter", queryFilterAgg) + builder = builder.Aggregation("top-tags", topTagsAgg) + builder = builder.Aggregation("viewport", geoBoundsAgg) + builder = builder.Aggregation("geohashed", geoHashAgg) + builder = builder.Aggregation("centroid", geoCentroidAgg) + // Unnamed filters + countByUserAgg := NewFiltersAggregation(). + Filters(NewTermQuery("user", "olivere"), NewTermQuery("user", "sandrae")) + builder = builder.Aggregation("countByUser", countByUserAgg) + // Named filters + countByUserAgg2 := NewFiltersAggregation(). + FilterWithName("olivere", NewTermQuery("user", "olivere")). + FilterWithName("sandrae", NewTermQuery("user", "sandrae")) + builder = builder.Aggregation("countByUser2", countByUserAgg2) + // AdjacencyMatrix + adjacencyMatrixAgg := NewAdjacencyMatrixAggregation(). + Filters("groupA", NewTermQuery("user", "olivere")). + Filters("groupB", NewTermQuery("user", "sandrae")) + builder = builder.Aggregation("interactions", adjacencyMatrixAgg) + // AvgBucket + dateHisto := NewDateHistogramAggregation().Field("created").Interval("year") + dateHisto = dateHisto.SubAggregation("sumOfRetweets", NewSumAggregation().Field("retweets")) + builder = builder.Aggregation("avgBucketDateHisto", dateHisto) + builder = builder.Aggregation("avgSumOfRetweets", NewAvgBucketAggregation().BucketsPath("avgBucketDateHisto>sumOfRetweets")) + // MinBucket + dateHisto = NewDateHistogramAggregation().Field("created").Interval("year") + dateHisto = dateHisto.SubAggregation("sumOfRetweets", NewSumAggregation().Field("retweets")) + builder = builder.Aggregation("minBucketDateHisto", dateHisto) + builder = builder.Aggregation("minBucketSumOfRetweets", NewMinBucketAggregation().BucketsPath("minBucketDateHisto>sumOfRetweets")) + // MaxBucket + dateHisto = NewDateHistogramAggregation().Field("created").Interval("year") + dateHisto = dateHisto.SubAggregation("sumOfRetweets", NewSumAggregation().Field("retweets")) + builder = builder.Aggregation("maxBucketDateHisto", dateHisto) + builder = builder.Aggregation("maxBucketSumOfRetweets", NewMaxBucketAggregation().BucketsPath("maxBucketDateHisto>sumOfRetweets")) + // SumBucket + dateHisto = NewDateHistogramAggregation().Field("created").Interval("year") + dateHisto = dateHisto.SubAggregation("sumOfRetweets", NewSumAggregation().Field("retweets")) + builder = builder.Aggregation("sumBucketDateHisto", dateHisto) + builder = builder.Aggregation("sumBucketSumOfRetweets", NewSumBucketAggregation().BucketsPath("sumBucketDateHisto>sumOfRetweets")) + // MovAvg + dateHisto = NewDateHistogramAggregation().Field("created").Interval("year") + dateHisto = dateHisto.SubAggregation("sumOfRetweets", NewSumAggregation().Field("retweets")) + dateHisto = dateHisto.SubAggregation("movingAvg", NewMovAvgAggregation().BucketsPath("sumOfRetweets")) + builder = builder.Aggregation("movingAvgDateHisto", dateHisto) + builder = builder.Aggregation("composite", composite) + searchResult, err := builder.Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if searchResult.Hits == nil { + t.Errorf("expected Hits != nil; got: nil") + } + if searchResult.Hits.TotalHits != 3 { + t.Errorf("expected Hits.TotalHits = %d; got: %d", 3, searchResult.Hits.TotalHits) + } + if len(searchResult.Hits.Hits) != 3 { + t.Errorf("expected len(Hits.Hits) = %d; got: %d", 3, len(searchResult.Hits.Hits)) + } + agg := searchResult.Aggregations + if agg == nil { + t.Fatalf("expected Aggregations != nil; got: nil") + } + + // Search for non-existent aggregate should return (nil, false) + unknownAgg, found := agg.Terms("no-such-aggregate") + if found { + t.Errorf("expected unknown aggregation to not be found; got: %v", found) + } + if unknownAgg != nil { + t.Errorf("expected unknown aggregation to return %v; got %v", nil, unknownAgg) + } + + // Global + globalAggRes, found := agg.Global("global") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if globalAggRes == nil { + t.Fatalf("expected != nil; got: nil") + } + if globalAggRes.DocCount != 3 { + t.Errorf("expected DocCount = %d; got: %d", 3, globalAggRes.DocCount) + } + + // Search for existent aggregate (by name) should return (aggregate, true) + termsAggRes, found := agg.Terms("users") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if termsAggRes == nil { + t.Fatalf("expected != nil; got: nil") + } + if len(termsAggRes.Buckets) != 2 { + t.Fatalf("expected %d; got: %d", 2, len(termsAggRes.Buckets)) + } + if termsAggRes.Buckets[0].Key != "olivere" { + t.Errorf("expected %q; got: %q", "olivere", termsAggRes.Buckets[0].Key) + } + if termsAggRes.Buckets[0].DocCount != 2 { + t.Errorf("expected %d; got: %d", 2, termsAggRes.Buckets[0].DocCount) + } + if termsAggRes.Buckets[1].Key != "sandrae" { + t.Errorf("expected %q; got: %q", "sandrae", termsAggRes.Buckets[1].Key) + } + if termsAggRes.Buckets[1].DocCount != 1 { + t.Errorf("expected %d; got: %d", 1, termsAggRes.Buckets[1].DocCount) + } + + // A terms aggregate with keys that are not strings + retweetsAggRes, found := agg.Terms("retweets") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if retweetsAggRes == nil { + t.Fatalf("expected != nil; got: nil") + } + if len(retweetsAggRes.Buckets) != 3 { + t.Fatalf("expected %d; got: %d", 3, len(retweetsAggRes.Buckets)) + } + + if retweetsAggRes.Buckets[0].Key != float64(0) { + t.Errorf("expected %v; got: %v", float64(0), retweetsAggRes.Buckets[0].Key) + } + if got, err := retweetsAggRes.Buckets[0].KeyNumber.Int64(); err != nil { + t.Errorf("expected %d; got: %v", 0, retweetsAggRes.Buckets[0].Key) + } else if got != 0 { + t.Errorf("expected %d; got: %d", 0, got) + } + if retweetsAggRes.Buckets[0].KeyNumber != "0" { + t.Errorf("expected %q; got: %q", "0", retweetsAggRes.Buckets[0].KeyNumber) + } + if retweetsAggRes.Buckets[0].DocCount != 1 { + t.Errorf("expected %d; got: %d", 1, retweetsAggRes.Buckets[0].DocCount) + } + + if retweetsAggRes.Buckets[1].Key != float64(12) { + t.Errorf("expected %v; got: %v", float64(12), retweetsAggRes.Buckets[1].Key) + } + if got, err := retweetsAggRes.Buckets[1].KeyNumber.Int64(); err != nil { + t.Errorf("expected %d; got: %v", 0, retweetsAggRes.Buckets[1].KeyNumber) + } else if got != 12 { + t.Errorf("expected %d; got: %d", 12, got) + } + if retweetsAggRes.Buckets[1].KeyNumber != "12" { + t.Errorf("expected %q; got: %q", "12", retweetsAggRes.Buckets[1].KeyNumber) + } + if retweetsAggRes.Buckets[1].DocCount != 1 { + t.Errorf("expected %d; got: %d", 1, retweetsAggRes.Buckets[1].DocCount) + } + + if retweetsAggRes.Buckets[2].Key != float64(108) { + t.Errorf("expected %v; got: %v", float64(108), retweetsAggRes.Buckets[2].Key) + } + if got, err := retweetsAggRes.Buckets[2].KeyNumber.Int64(); err != nil { + t.Errorf("expected %d; got: %v", 108, retweetsAggRes.Buckets[2].KeyNumber) + } else if got != 108 { + t.Errorf("expected %d; got: %d", 108, got) + } + if retweetsAggRes.Buckets[2].KeyNumber != "108" { + t.Errorf("expected %q; got: %q", "108", retweetsAggRes.Buckets[2].KeyNumber) + } + if retweetsAggRes.Buckets[2].DocCount != 1 { + t.Errorf("expected %d; got: %d", 1, retweetsAggRes.Buckets[2].DocCount) + } + + // avgRetweets + avgAggRes, found := agg.Avg("avgRetweets") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if avgAggRes == nil { + t.Fatalf("expected != nil; got: nil") + } + if avgAggRes.Value == nil { + t.Fatalf("expected != nil; got: %v", *avgAggRes.Value) + } + if *avgAggRes.Value != 40.0 { + t.Errorf("expected %v; got: %v", 40.0, *avgAggRes.Value) + } + + // avgRetweetsWithMeta + avgMetaAggRes, found := agg.Avg("avgRetweetsWithMeta") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if avgMetaAggRes == nil { + t.Fatalf("expected != nil; got: nil") + } + if avgMetaAggRes.Meta == nil { + t.Fatalf("expected != nil; got: %v", avgMetaAggRes.Meta) + } + metaDataValue, found := avgMetaAggRes.Meta["meta"] + if !found { + t.Fatalf("expected to return meta data key %q; got: %v", "meta", found) + } + if flag, ok := metaDataValue.(bool); !ok { + t.Fatalf("expected to return meta data key type %T; got: %T", true, metaDataValue) + } else if flag != true { + t.Fatalf("expected to return meta data key value %v; got: %v", true, flag) + } + + // minRetweets + minAggRes, found := agg.Min("minRetweets") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if minAggRes == nil { + t.Fatalf("expected != nil; got: nil") + } + if minAggRes.Value == nil { + t.Fatalf("expected != nil; got: %v", *minAggRes.Value) + } + if *minAggRes.Value != 0.0 { + t.Errorf("expected %v; got: %v", 0.0, *minAggRes.Value) + } + + // maxRetweets + maxAggRes, found := agg.Max("maxRetweets") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if maxAggRes == nil { + t.Fatalf("expected != nil; got: nil") + } + if maxAggRes.Value == nil { + t.Fatalf("expected != nil; got: %v", *maxAggRes.Value) + } + if *maxAggRes.Value != 108.0 { + t.Errorf("expected %v; got: %v", 108.0, *maxAggRes.Value) + } + + // sumRetweets + sumAggRes, found := agg.Sum("sumRetweets") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if sumAggRes == nil { + t.Fatalf("expected != nil; got: nil") + } + if sumAggRes.Value == nil { + t.Fatalf("expected != nil; got: %v", *sumAggRes.Value) + } + if *sumAggRes.Value != 120.0 { + t.Errorf("expected %v; got: %v", 120.0, *sumAggRes.Value) + } + + // statsRetweets + statsAggRes, found := agg.Stats("statsRetweets") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if statsAggRes == nil { + t.Fatalf("expected != nil; got: nil") + } + if statsAggRes.Count != 3 { + t.Errorf("expected %d; got: %d", 3, statsAggRes.Count) + } + if statsAggRes.Min == nil { + t.Fatalf("expected != nil; got: %v", *statsAggRes.Min) + } + if *statsAggRes.Min != 0.0 { + t.Errorf("expected %v; got: %v", 0.0, *statsAggRes.Min) + } + if statsAggRes.Max == nil { + t.Fatalf("expected != nil; got: %v", *statsAggRes.Max) + } + if *statsAggRes.Max != 108.0 { + t.Errorf("expected %v; got: %v", 108.0, *statsAggRes.Max) + } + if statsAggRes.Avg == nil { + t.Fatalf("expected != nil; got: %v", *statsAggRes.Avg) + } + if *statsAggRes.Avg != 40.0 { + t.Errorf("expected %v; got: %v", 40.0, *statsAggRes.Avg) + } + if statsAggRes.Sum == nil { + t.Fatalf("expected != nil; got: %v", *statsAggRes.Sum) + } + if *statsAggRes.Sum != 120.0 { + t.Errorf("expected %v; got: %v", 120.0, *statsAggRes.Sum) + } + + // extstatsRetweets + extStatsAggRes, found := agg.ExtendedStats("extstatsRetweets") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if extStatsAggRes == nil { + t.Fatalf("expected != nil; got: nil") + } + if extStatsAggRes.Count != 3 { + t.Errorf("expected %d; got: %d", 3, extStatsAggRes.Count) + } + if extStatsAggRes.Min == nil { + t.Fatalf("expected != nil; got: %v", *extStatsAggRes.Min) + } + if *extStatsAggRes.Min != 0.0 { + t.Errorf("expected %v; got: %v", 0.0, *extStatsAggRes.Min) + } + if extStatsAggRes.Max == nil { + t.Fatalf("expected != nil; got: %v", *extStatsAggRes.Max) + } + if *extStatsAggRes.Max != 108.0 { + t.Errorf("expected %v; got: %v", 108.0, *extStatsAggRes.Max) + } + if extStatsAggRes.Avg == nil { + t.Fatalf("expected != nil; got: %v", *extStatsAggRes.Avg) + } + if *extStatsAggRes.Avg != 40.0 { + t.Errorf("expected %v; got: %v", 40.0, *extStatsAggRes.Avg) + } + if extStatsAggRes.Sum == nil { + t.Fatalf("expected != nil; got: %v", *extStatsAggRes.Sum) + } + if *extStatsAggRes.Sum != 120.0 { + t.Errorf("expected %v; got: %v", 120.0, *extStatsAggRes.Sum) + } + if extStatsAggRes.SumOfSquares == nil { + t.Fatalf("expected != nil; got: %v", *extStatsAggRes.SumOfSquares) + } + if *extStatsAggRes.SumOfSquares != 11808.0 { + t.Errorf("expected %v; got: %v", 11808.0, *extStatsAggRes.SumOfSquares) + } + if extStatsAggRes.Variance == nil { + t.Fatalf("expected != nil; got: %v", *extStatsAggRes.Variance) + } + if *extStatsAggRes.Variance != 2336.0 { + t.Errorf("expected %v; got: %v", 2336.0, *extStatsAggRes.Variance) + } + if extStatsAggRes.StdDeviation == nil { + t.Fatalf("expected != nil; got: %v", *extStatsAggRes.StdDeviation) + } + if *extStatsAggRes.StdDeviation != 48.33218389437829 { + t.Errorf("expected %v; got: %v", 48.33218389437829, *extStatsAggRes.StdDeviation) + } + + // valueCountRetweets + valueCountAggRes, found := agg.ValueCount("valueCountRetweets") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if valueCountAggRes == nil { + t.Fatalf("expected != nil; got: nil") + } + if valueCountAggRes.Value == nil { + t.Fatalf("expected != nil; got: %v", *valueCountAggRes.Value) + } + if *valueCountAggRes.Value != 3.0 { + t.Errorf("expected %v; got: %v", 3.0, *valueCountAggRes.Value) + } + + // percentilesRetweets + percentilesAggRes, found := agg.Percentiles("percentilesRetweets") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if percentilesAggRes == nil { + t.Fatalf("expected != nil; got: nil") + } + // ES 1.4.x returns 7: {"1.0":...} + // ES 1.5.0 returns 14: {"1.0":..., "1.0_as_string":...} + // So we're relaxing the test here. + if len(percentilesAggRes.Values) == 0 { + t.Errorf("expected at least %d value; got: %d\nValues are: %#v", 1, len(percentilesAggRes.Values), percentilesAggRes.Values) + } + if _, found := percentilesAggRes.Values["0.0"]; found { + t.Errorf("expected %v; got: %v", false, found) + } + if percentilesAggRes.Values["1.0"] != 0.24 { + t.Errorf("expected %v; got: %v", 0.24, percentilesAggRes.Values["1.0"]) + } + if percentilesAggRes.Values["25.0"] != 6.0 { + t.Errorf("expected %v; got: %v", 6.0, percentilesAggRes.Values["25.0"]) + } + if percentilesAggRes.Values["99.0"] != 106.08 { + t.Errorf("expected %v; got: %v", 106.08, percentilesAggRes.Values["99.0"]) + } + + // percentileRanksRetweets + percentileRanksAggRes, found := agg.PercentileRanks("percentileRanksRetweets") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if percentileRanksAggRes == nil { + t.Fatalf("expected != nil; got: nil") + } + if len(percentileRanksAggRes.Values) == 0 { + t.Errorf("expected at least %d value; got %d\nValues are: %#v", 1, len(percentileRanksAggRes.Values), percentileRanksAggRes.Values) + } + if _, found := percentileRanksAggRes.Values["0.0"]; found { + t.Errorf("expected %v; got: %v", true, found) + } + if percentileRanksAggRes.Values["25.0"] != 21.180555555555557 { + t.Errorf("expected %v; got: %v", 21.180555555555557, percentileRanksAggRes.Values["25.0"]) + } + if percentileRanksAggRes.Values["50.0"] != 29.86111111111111 { + t.Errorf("expected %v; got: %v", 29.86111111111111, percentileRanksAggRes.Values["50.0"]) + } + if percentileRanksAggRes.Values["75.0"] != 38.54166666666667 { + t.Errorf("expected %v; got: %v", 38.54166666666667, percentileRanksAggRes.Values["75.0"]) + } + + // usersCardinality + cardAggRes, found := agg.Cardinality("usersCardinality") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if cardAggRes == nil { + t.Fatalf("expected != nil; got: nil") + } + if cardAggRes.Value == nil { + t.Fatalf("expected != nil; got: %v", *cardAggRes.Value) + } + if *cardAggRes.Value != 2 { + t.Errorf("expected %v; got: %v", 2, *cardAggRes.Value) + } + + // retweetsFilter + filterAggRes, found := agg.Filter("retweetsFilter") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if filterAggRes == nil { + t.Fatalf("expected != nil; got: nil") + } + if filterAggRes.DocCount != 2 { + t.Fatalf("expected %v; got: %v", 2, filterAggRes.DocCount) + } + + // Retrieve sub-aggregation + avgRetweetsAggRes, found := filterAggRes.Avg("avgRetweetsSub") + if !found { + t.Error("expected sub-aggregation \"avgRetweets\" to be found; got false") + } + if avgRetweetsAggRes == nil { + t.Fatal("expected sub-aggregation \"avgRetweets\"; got nil") + } + if avgRetweetsAggRes.Value == nil { + t.Fatalf("expected != nil; got: %v", avgRetweetsAggRes.Value) + } + if *avgRetweetsAggRes.Value != 54.0 { + t.Errorf("expected %v; got: %v", 54.0, *avgRetweetsAggRes.Value) + } + + // queryFilter + queryFilterAggRes, found := agg.Filter("queryFilter") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if queryFilterAggRes == nil { + t.Fatalf("expected != nil; got: nil") + } + if queryFilterAggRes.DocCount != 2 { + t.Fatalf("expected %v; got: %v", 2, queryFilterAggRes.DocCount) + } + + // significantTerms + stAggRes, found := agg.SignificantTerms("significantTerms") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if stAggRes == nil { + t.Fatalf("expected != nil; got: nil") + } + if stAggRes.DocCount != 3 { + t.Errorf("expected %v; got: %v", 3, stAggRes.DocCount) + } + if len(stAggRes.Buckets) != 0 { + t.Errorf("expected %v; got: %v", 0, len(stAggRes.Buckets)) + } + + // sampler + samplerAggRes, found := agg.Sampler("sample") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if samplerAggRes == nil { + t.Fatalf("expected != nil; got: nil") + } + if samplerAggRes.DocCount != 3 { + t.Errorf("expected %v; got: %v", 3, samplerAggRes.DocCount) + } + sub, found := samplerAggRes.Aggregations["tagged_with"] + if !found { + t.Fatalf("expected sub aggregation %q", "tagged_with") + } + if sub == nil { + t.Fatalf("expected sub aggregation %q; got: %v", "tagged_with", sub) + } + + // diversified_sampler + diversifiedSamplerAggRes, found := agg.DiversifiedSampler("diversified_sampler") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if diversifiedSamplerAggRes == nil { + t.Fatalf("expected != nil; got: nil") + } + if diversifiedSamplerAggRes.DocCount != 2 { + t.Errorf("expected %v; got: %v", 2, diversifiedSamplerAggRes.DocCount) + } + subAgg, found := samplerAggRes.Aggregations["tagged_with"] + if !found { + t.Fatalf("expected sub aggregation %q", "tagged_with") + } + if subAgg == nil { + t.Fatalf("expected sub aggregation %q; got: %v", "tagged_with", subAgg) + } + + // retweetsRange + rangeAggRes, found := agg.Range("retweetsRange") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if rangeAggRes == nil { + t.Fatal("expected != nil; got: nil") + } + if len(rangeAggRes.Buckets) != 3 { + t.Fatalf("expected %d; got: %d", 3, len(rangeAggRes.Buckets)) + } + if rangeAggRes.Buckets[0].DocCount != 1 { + t.Errorf("expected %d; got: %d", 1, rangeAggRes.Buckets[0].DocCount) + } + if rangeAggRes.Buckets[1].DocCount != 1 { + t.Errorf("expected %d; got: %d", 1, rangeAggRes.Buckets[1].DocCount) + } + if rangeAggRes.Buckets[2].DocCount != 1 { + t.Errorf("expected %d; got: %d", 1, rangeAggRes.Buckets[2].DocCount) + } + + // retweetsKeyedRange + keyedRangeAggRes, found := agg.KeyedRange("retweetsKeyedRange") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if keyedRangeAggRes == nil { + t.Fatal("expected != nil; got: nil") + } + if len(keyedRangeAggRes.Buckets) != 3 { + t.Fatalf("expected %d; got: %d", 3, len(keyedRangeAggRes.Buckets)) + } + _, found = keyedRangeAggRes.Buckets["no-such-key"] + if found { + t.Fatalf("expected bucket to not be found; got: %v", found) + } + bucket, found := keyedRangeAggRes.Buckets["*-10.0"] + if !found { + t.Fatalf("expected bucket to be found; got: %v", found) + } + if bucket.DocCount != 1 { + t.Errorf("expected %d; got: %d", 1, bucket.DocCount) + } + bucket, found = keyedRangeAggRes.Buckets["10.0-100.0"] + if !found { + t.Fatalf("expected bucket to be found; got: %v", found) + } + if bucket.DocCount != 1 { + t.Errorf("expected %d; got: %d", 1, bucket.DocCount) + } + bucket, found = keyedRangeAggRes.Buckets["100.0-*"] + if !found { + t.Fatalf("expected bucket to be found; got: %v", found) + } + if bucket.DocCount != 1 { + t.Errorf("expected %d; got: %d", 1, bucket.DocCount) + } + + // dateRange + dateRangeRes, found := agg.DateRange("dateRange") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if dateRangeRes == nil { + t.Fatal("expected != nil; got: nil") + } + if dateRangeRes.Buckets[0].DocCount != 1 { + t.Errorf("expected %d; got: %d", 1, dateRangeRes.Buckets[0].DocCount) + } + if dateRangeRes.Buckets[0].From != nil { + t.Fatal("expected From to be nil") + } + if dateRangeRes.Buckets[0].To == nil { + t.Fatal("expected To to be != nil") + } + if *dateRangeRes.Buckets[0].To != 1.325376e+12 { + t.Errorf("expected %v; got: %v", 1.325376e+12, *dateRangeRes.Buckets[0].To) + } + if dateRangeRes.Buckets[0].ToAsString != "2012-01-01T00:00:00.000Z" { + t.Errorf("expected %q; got: %q", "2012-01-01T00:00:00.000Z", dateRangeRes.Buckets[0].ToAsString) + } + if dateRangeRes.Buckets[1].DocCount != 2 { + t.Errorf("expected %d; got: %d", 2, dateRangeRes.Buckets[1].DocCount) + } + if dateRangeRes.Buckets[1].From == nil { + t.Fatal("expected From to be != nil") + } + if *dateRangeRes.Buckets[1].From != 1.325376e+12 { + t.Errorf("expected From = %v; got: %v", 1.325376e+12, *dateRangeRes.Buckets[1].From) + } + if dateRangeRes.Buckets[1].FromAsString != "2012-01-01T00:00:00.000Z" { + t.Errorf("expected FromAsString = %q; got: %q", "2012-01-01T00:00:00.000Z", dateRangeRes.Buckets[1].FromAsString) + } + if dateRangeRes.Buckets[1].To == nil { + t.Fatal("expected To to be != nil") + } + if *dateRangeRes.Buckets[1].To != 1.3569984e+12 { + t.Errorf("expected To = %v; got: %v", 1.3569984e+12, *dateRangeRes.Buckets[1].To) + } + if dateRangeRes.Buckets[1].ToAsString != "2013-01-01T00:00:00.000Z" { + t.Errorf("expected ToAsString = %q; got: %q", "2013-01-01T00:00:00.000Z", dateRangeRes.Buckets[1].ToAsString) + } + if dateRangeRes.Buckets[2].DocCount != 0 { + t.Errorf("expected %d; got: %d", 0, dateRangeRes.Buckets[2].DocCount) + } + if dateRangeRes.Buckets[2].To != nil { + t.Fatal("expected To to be nil") + } + if dateRangeRes.Buckets[2].From == nil { + t.Fatal("expected From to be != nil") + } + if *dateRangeRes.Buckets[2].From != 1.3569984e+12 { + t.Errorf("expected %v; got: %v", 1.3569984e+12, *dateRangeRes.Buckets[2].From) + } + if dateRangeRes.Buckets[2].FromAsString != "2013-01-01T00:00:00.000Z" { + t.Errorf("expected %q; got: %q", "2013-01-01T00:00:00.000Z", dateRangeRes.Buckets[2].FromAsString) + } + + // missingTags + missingRes, found := agg.Missing("missingTags") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if missingRes == nil { + t.Fatalf("expected != nil; got: nil") + } + if missingRes.DocCount != 0 { + t.Errorf("expected searchResult.Aggregations[\"missingTags\"].DocCount = %v; got %v", 0, missingRes.DocCount) + } + + // retweetsHisto + histoRes, found := agg.Histogram("retweetsHisto") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if histoRes == nil { + t.Fatalf("expected != nil; got: nil") + } + if len(histoRes.Buckets) != 2 { + t.Fatalf("expected %d; got: %d", 2, len(histoRes.Buckets)) + } + if histoRes.Buckets[0].DocCount != 2 { + t.Errorf("expected %d; got: %d", 2, histoRes.Buckets[0].DocCount) + } + if histoRes.Buckets[0].Key != 0.0 { + t.Errorf("expected %v; got: %v", 0.0, histoRes.Buckets[0].Key) + } + if histoRes.Buckets[1].DocCount != 1 { + t.Errorf("expected %d; got: %d", 1, histoRes.Buckets[1].DocCount) + } + if histoRes.Buckets[1].Key != 100.0 { + t.Errorf("expected %v; got: %+v", 100.0, histoRes.Buckets[1].Key) + } + + // dateHisto + dateHistoRes, found := agg.DateHistogram("dateHisto") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if dateHistoRes == nil { + t.Fatalf("expected != nil; got: nil") + } + if len(dateHistoRes.Buckets) != 2 { + t.Fatalf("expected %d; got: %d", 2, len(dateHistoRes.Buckets)) + } + if dateHistoRes.Buckets[0].DocCount != 1 { + t.Errorf("expected %d; got: %d", 1, dateHistoRes.Buckets[0].DocCount) + } + if dateHistoRes.Buckets[0].Key != 1.29384e+12 { + t.Errorf("expected %v; got: %v", 1.29384e+12, dateHistoRes.Buckets[0].Key) + } + if dateHistoRes.Buckets[0].KeyAsString == nil { + t.Fatalf("expected != nil; got: %q", dateHistoRes.Buckets[0].KeyAsString) + } + if *dateHistoRes.Buckets[0].KeyAsString != "2011-01-01T00:00:00.000Z" { + t.Errorf("expected %q; got: %q", "2011-01-01T00:00:00.000Z", *dateHistoRes.Buckets[0].KeyAsString) + } + if dateHistoRes.Buckets[1].DocCount != 2 { + t.Errorf("expected %d; got: %d", 2, dateHistoRes.Buckets[1].DocCount) + } + if dateHistoRes.Buckets[1].Key != 1.325376e+12 { + t.Errorf("expected %v; got: %v", 1.325376e+12, dateHistoRes.Buckets[1].Key) + } + if dateHistoRes.Buckets[1].KeyAsString == nil { + t.Fatalf("expected != nil; got: %q", dateHistoRes.Buckets[1].KeyAsString) + } + if *dateHistoRes.Buckets[1].KeyAsString != "2012-01-01T00:00:00.000Z" { + t.Errorf("expected %q; got: %q", "2012-01-01T00:00:00.000Z", *dateHistoRes.Buckets[1].KeyAsString) + } + + // topHits + topTags, found := agg.Terms("top-tags") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if topTags == nil { + t.Fatalf("expected != nil; got: nil") + } + if topTags.DocCountErrorUpperBound != 0 { + t.Errorf("expected %v; got: %v", 0, topTags.DocCountErrorUpperBound) + } + if topTags.SumOfOtherDocCount != 1 { + t.Errorf("expected %v; got: %v", 1, topTags.SumOfOtherDocCount) + } + if len(topTags.Buckets) != 3 { + t.Fatalf("expected %d; got: %d", 3, len(topTags.Buckets)) + } + if topTags.Buckets[0].DocCount != 2 { + t.Errorf("expected %d; got: %d", 2, topTags.Buckets[0].DocCount) + } + if topTags.Buckets[0].Key != "golang" { + t.Errorf("expected %v; got: %v", "golang", topTags.Buckets[0].Key) + } + topHits, found := topTags.Buckets[0].TopHits("top_tag_hits") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if topHits == nil { + t.Fatal("expected != nil; got: nil") + } + if topHits.Hits == nil { + t.Fatalf("expected != nil; got: nil") + } + if topHits.Hits.TotalHits != 2 { + t.Errorf("expected %d; got: %d", 2, topHits.Hits.TotalHits) + } + if topHits.Hits.Hits == nil { + t.Fatalf("expected != nil; got: nil") + } + if len(topHits.Hits.Hits) != 2 { + t.Fatalf("expected %d; got: %d", 2, len(topHits.Hits.Hits)) + } + hit := topHits.Hits.Hits[0] + if !found { + t.Fatalf("expected %v; got: %v", true, found) + } + if hit == nil { + t.Fatal("expected != nil; got: nil") + } + var tw tweet + if err := json.Unmarshal(*hit.Source, &tw); err != nil { + t.Fatalf("expected no error; got: %v", err) + } + if tw.Message != "Welcome to Golang and Elasticsearch." { + t.Errorf("expected %q; got: %q", "Welcome to Golang and Elasticsearch.", tw.Message) + } + if topTags.Buckets[1].DocCount != 1 { + t.Errorf("expected %d; got: %d", 1, topTags.Buckets[1].DocCount) + } + if topTags.Buckets[1].Key != "cycling" { + t.Errorf("expected %v; got: %v", "cycling", topTags.Buckets[1].Key) + } + topHits, found = topTags.Buckets[1].TopHits("top_tag_hits") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if topHits == nil { + t.Fatal("expected != nil; got: nil") + } + if topHits.Hits == nil { + t.Fatal("expected != nil; got nil") + } + if topHits.Hits.TotalHits != 1 { + t.Errorf("expected %d; got: %d", 1, topHits.Hits.TotalHits) + } + if topTags.Buckets[2].DocCount != 1 { + t.Errorf("expected %d; got: %d", 1, topTags.Buckets[2].DocCount) + } + if topTags.Buckets[2].Key != "elasticsearch" { + t.Errorf("expected %v; got: %v", "elasticsearch", topTags.Buckets[2].Key) + } + topHits, found = topTags.Buckets[2].TopHits("top_tag_hits") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if topHits == nil { + t.Fatal("expected != nil; got: nil") + } + if topHits.Hits == nil { + t.Fatal("expected != nil; got: nil") + } + if topHits.Hits.TotalHits != 1 { + t.Errorf("expected %d; got: %d", 1, topHits.Hits.TotalHits) + } + + // viewport via geo_bounds (1.3.0 has an error in that it doesn't output the aggregation name) + geoBoundsRes, found := agg.GeoBounds("viewport") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if geoBoundsRes == nil { + t.Fatalf("expected != nil; got: nil") + } + + // geohashed via geohash + geoHashRes, found := agg.GeoHash("geohashed") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if geoHashRes == nil { + t.Fatalf("expected != nil; got: nil") + } + + // geo_centroid + geoCentroidRes, found := agg.GeoCentroid("centroid") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if geoCentroidRes == nil { + t.Fatalf("expected != nil; got: nil") + } + + // Filters agg "countByUser" (unnamed) + countByUserAggRes, found := agg.Filters("countByUser") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if countByUserAggRes == nil { + t.Fatalf("expected != nil; got: nil") + } + if len(countByUserAggRes.Buckets) != 2 { + t.Fatalf("expected %d; got: %d", 2, len(countByUserAggRes.Buckets)) + } + if len(countByUserAggRes.NamedBuckets) != 0 { + t.Fatalf("expected %d; got: %d", 0, len(countByUserAggRes.NamedBuckets)) + } + if countByUserAggRes.Buckets[0].DocCount != 2 { + t.Errorf("expected %d; got: %d", 2, countByUserAggRes.Buckets[0].DocCount) + } + if countByUserAggRes.Buckets[1].DocCount != 1 { + t.Errorf("expected %d; got: %d", 1, countByUserAggRes.Buckets[1].DocCount) + } + + // Filters agg "countByUser2" (named) + countByUser2AggRes, found := agg.Filters("countByUser2") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if countByUser2AggRes == nil { + t.Fatalf("expected != nil; got: nil") + } + if len(countByUser2AggRes.Buckets) != 0 { + t.Fatalf("expected %d; got: %d", 0, len(countByUser2AggRes.Buckets)) + } + if len(countByUser2AggRes.NamedBuckets) != 2 { + t.Fatalf("expected %d; got: %d", 2, len(countByUser2AggRes.NamedBuckets)) + } + b, found := countByUser2AggRes.NamedBuckets["olivere"] + if !found { + t.Fatalf("expected bucket %q; got: %v", "olivere", found) + } + if b == nil { + t.Fatalf("expected bucket %q; got: %v", "olivere", b) + } + if b.DocCount != 2 { + t.Errorf("expected %d; got: %d", 2, b.DocCount) + } + b, found = countByUser2AggRes.NamedBuckets["sandrae"] + if !found { + t.Fatalf("expected bucket %q; got: %v", "sandrae", found) + } + if b == nil { + t.Fatalf("expected bucket %q; got: %v", "sandrae", b) + } + if b.DocCount != 1 { + t.Errorf("expected %d; got: %d", 1, b.DocCount) + } + + // AdjacencyMatrix agg "adjacencyMatrixAgg" (named) + adjacencyMatrixAggRes, found := agg.AdjacencyMatrix("interactions") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if adjacencyMatrixAggRes == nil { + t.Fatalf("expected != nil; got: nil") + } + if len(adjacencyMatrixAggRes.Buckets) != 2 { + t.Fatalf("expected %d; got: %d", 2, len(adjacencyMatrixAggRes.Buckets)) + } + if adjacencyMatrixAggRes.Buckets[0].DocCount != 2 { + t.Errorf("expected %d; got: %d", 2, adjacencyMatrixAggRes.Buckets[0].DocCount) + } + if adjacencyMatrixAggRes.Buckets[1].DocCount != 1 { + t.Errorf("expected %d; got: %d", 1, adjacencyMatrixAggRes.Buckets[1].DocCount) + } + + compositeAggRes, found := agg.Composite("composite") + if !found { + t.Errorf("expected %v; got: %v", true, found) + } + if compositeAggRes == nil { + t.Fatalf("expected != nil; got: nil") + } + if want, have := 3, len(compositeAggRes.Buckets); want != have { + t.Fatalf("expected %d; got: %d", want, have) + } +} + +// TestAggsMarshal ensures that marshaling aggregations back into a string +// does not yield base64 encoded data. See https://github.com/olivere/elastic/issues/51 +// and https://groups.google.com/forum/#!topic/Golang-Nuts/38ShOlhxAYY for details. +func TestAggsMarshal(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tweet1 := tweet{ + User: "olivere", + Retweets: 108, + Message: "Welcome to Golang and Elasticsearch.", + Image: "http://golang.org/doc/gopher/gophercolor.png", + Tags: []string{"golang", "elasticsearch"}, + Location: "48.1333,11.5667", // lat,lon + Created: time.Date(2012, 12, 12, 17, 38, 34, 0, time.UTC), + } + + // Add all documents + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Match all should return all documents + all := NewMatchAllQuery() + dhagg := NewDateHistogramAggregation().Field("created").Interval("year") + + // Run query + builder := client.Search().Index(testIndexName).Query(all) + builder = builder.Aggregation("dhagg", dhagg) + searchResult, err := builder.Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if searchResult.TotalHits() != 1 { + t.Errorf("expected Hits.TotalHits = %d; got: %d", 1, searchResult.TotalHits()) + } + if _, found := searchResult.Aggregations["dhagg"]; !found { + t.Fatalf("expected aggregation %q", "dhagg") + } + buf, err := json.Marshal(searchResult) + if err != nil { + t.Fatal(err) + } + s := string(buf) + if i := strings.Index(s, `{"dhagg":{"buckets":[{"key_as_string":"2012-01-01`); i < 0 { + t.Errorf("expected to serialize aggregation into string; got: %v", s) + } +} + +func TestAggsMetricsMin(t *testing.T) { + s := `{ + "min_price": { + "value": 10 + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.Min("min_price") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Value == nil { + t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) + } + if *agg.Value != float64(10) { + t.Fatalf("expected aggregation value = %v; got: %v", float64(10), *agg.Value) + } +} + +func TestAggsMetricsMax(t *testing.T) { + s := `{ + "max_price": { + "value": 35 + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.Max("max_price") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Value == nil { + t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) + } + if *agg.Value != float64(35) { + t.Fatalf("expected aggregation value = %v; got: %v", float64(35), *agg.Value) + } +} + +func TestAggsMetricsSum(t *testing.T) { + s := `{ + "intraday_return": { + "value": 2.18 + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.Sum("intraday_return") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Value == nil { + t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) + } + if *agg.Value != float64(2.18) { + t.Fatalf("expected aggregation value = %v; got: %v", float64(2.18), *agg.Value) + } +} + +func TestAggsMetricsAvg(t *testing.T) { + s := `{ + "avg_grade": { + "value": 75 + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.Avg("avg_grade") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Value == nil { + t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) + } + if *agg.Value != float64(75) { + t.Fatalf("expected aggregation value = %v; got: %v", float64(75), *agg.Value) + } +} + +func TestAggsMetricsValueCount(t *testing.T) { + s := `{ + "grades_count": { + "value": 10 + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.ValueCount("grades_count") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Value == nil { + t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) + } + if *agg.Value != float64(10) { + t.Fatalf("expected aggregation value = %v; got: %v", float64(10), *agg.Value) + } +} + +func TestAggsMetricsCardinality(t *testing.T) { + s := `{ + "author_count": { + "value": 12 + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.Cardinality("author_count") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Value == nil { + t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) + } + if *agg.Value != float64(12) { + t.Fatalf("expected aggregation value = %v; got: %v", float64(12), *agg.Value) + } +} + +func TestAggsMetricsStats(t *testing.T) { + s := `{ + "grades_stats": { + "count": 6, + "min": 60, + "max": 98, + "avg": 78.5, + "sum": 471 + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.Stats("grades_stats") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Count != int64(6) { + t.Fatalf("expected aggregation Count = %v; got: %v", int64(6), agg.Count) + } + if agg.Min == nil { + t.Fatalf("expected aggregation Min != nil; got: %v", agg.Min) + } + if *agg.Min != float64(60) { + t.Fatalf("expected aggregation Min = %v; got: %v", float64(60), *agg.Min) + } + if agg.Max == nil { + t.Fatalf("expected aggregation Max != nil; got: %v", agg.Max) + } + if *agg.Max != float64(98) { + t.Fatalf("expected aggregation Max = %v; got: %v", float64(98), *agg.Max) + } + if agg.Avg == nil { + t.Fatalf("expected aggregation Avg != nil; got: %v", agg.Avg) + } + if *agg.Avg != float64(78.5) { + t.Fatalf("expected aggregation Avg = %v; got: %v", float64(78.5), *agg.Avg) + } + if agg.Sum == nil { + t.Fatalf("expected aggregation Sum != nil; got: %v", agg.Sum) + } + if *agg.Sum != float64(471) { + t.Fatalf("expected aggregation Sum = %v; got: %v", float64(471), *agg.Sum) + } +} + +func TestAggsMetricsExtendedStats(t *testing.T) { + s := `{ + "grades_stats": { + "count": 6, + "min": 72, + "max": 117.6, + "avg": 94.2, + "sum": 565.2, + "sum_of_squares": 54551.51999999999, + "variance": 218.2799999999976, + "std_deviation": 14.774302013969987 + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.ExtendedStats("grades_stats") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Count != int64(6) { + t.Fatalf("expected aggregation Count = %v; got: %v", int64(6), agg.Count) + } + if agg.Min == nil { + t.Fatalf("expected aggregation Min != nil; got: %v", agg.Min) + } + if *agg.Min != float64(72) { + t.Fatalf("expected aggregation Min = %v; got: %v", float64(72), *agg.Min) + } + if agg.Max == nil { + t.Fatalf("expected aggregation Max != nil; got: %v", agg.Max) + } + if *agg.Max != float64(117.6) { + t.Fatalf("expected aggregation Max = %v; got: %v", float64(117.6), *agg.Max) + } + if agg.Avg == nil { + t.Fatalf("expected aggregation Avg != nil; got: %v", agg.Avg) + } + if *agg.Avg != float64(94.2) { + t.Fatalf("expected aggregation Avg = %v; got: %v", float64(94.2), *agg.Avg) + } + if agg.Sum == nil { + t.Fatalf("expected aggregation Sum != nil; got: %v", agg.Sum) + } + if *agg.Sum != float64(565.2) { + t.Fatalf("expected aggregation Sum = %v; got: %v", float64(565.2), *agg.Sum) + } + if agg.SumOfSquares == nil { + t.Fatalf("expected aggregation sum_of_squares != nil; got: %v", agg.SumOfSquares) + } + if *agg.SumOfSquares != float64(54551.51999999999) { + t.Fatalf("expected aggregation sum_of_squares = %v; got: %v", float64(54551.51999999999), *agg.SumOfSquares) + } + if agg.Variance == nil { + t.Fatalf("expected aggregation Variance != nil; got: %v", agg.Variance) + } + if *agg.Variance != float64(218.2799999999976) { + t.Fatalf("expected aggregation Variance = %v; got: %v", float64(218.2799999999976), *agg.Variance) + } + if agg.StdDeviation == nil { + t.Fatalf("expected aggregation StdDeviation != nil; got: %v", agg.StdDeviation) + } + if *agg.StdDeviation != float64(14.774302013969987) { + t.Fatalf("expected aggregation StdDeviation = %v; got: %v", float64(14.774302013969987), *agg.StdDeviation) + } +} + +func TestAggsMatrixStats(t *testing.T) { + s := `{ + "matrixstats": { + "fields": [{ + "name": "income", + "count": 50, + "mean": 51985.1, + "variance": 7.383377037755103E7, + "skewness": 0.5595114003506483, + "kurtosis": 2.5692365287787124, + "covariance": { + "income": 7.383377037755103E7, + "poverty": -21093.65836734694 + }, + "correlation": { + "income": 1.0, + "poverty": -0.8352655256272504 + } + }, { + "name": "poverty", + "count": 51, + "mean": 12.732000000000001, + "variance": 8.637730612244896, + "skewness": 0.4516049811903419, + "kurtosis": 2.8615929677997767, + "covariance": { + "income": -21093.65836734694, + "poverty": 8.637730612244896 + }, + "correlation": { + "income": -0.8352655256272504, + "poverty": 1.0 + } + }] + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.MatrixStats("matrixstats") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if want, got := 2, len(agg.Fields); want != got { + t.Fatalf("expected aggregaton len(Fields) = %v; got: %v", want, got) + } + field := agg.Fields[0] + if want, got := "income", field.Name; want != got { + t.Fatalf("expected aggregation field name == %q; got: %q", want, got) + } + if want, got := int64(50), field.Count; want != got { + t.Fatalf("expected aggregation field count == %v; got: %v", want, got) + } + if want, got := 51985.1, field.Mean; want != got { + t.Fatalf("expected aggregation field mean == %v; got: %v", want, got) + } + if want, got := 7.383377037755103e7, field.Variance; want != got { + t.Fatalf("expected aggregation field variance == %v; got: %v", want, got) + } + if want, got := 0.5595114003506483, field.Skewness; want != got { + t.Fatalf("expected aggregation field skewness == %v; got: %v", want, got) + } + if want, got := 2.5692365287787124, field.Kurtosis; want != got { + t.Fatalf("expected aggregation field kurtosis == %v; got: %v", want, got) + } + if field.Covariance == nil { + t.Fatalf("expected aggregation field covariance != nil; got: %v", nil) + } + if want, got := 7.383377037755103e7, field.Covariance["income"]; want != got { + t.Fatalf("expected aggregation field covariance == %v; got: %v", want, got) + } + if want, got := -21093.65836734694, field.Covariance["poverty"]; want != got { + t.Fatalf("expected aggregation field covariance == %v; got: %v", want, got) + } + if field.Correlation == nil { + t.Fatalf("expected aggregation field correlation != nil; got: %v", nil) + } + if want, got := 1.0, field.Correlation["income"]; want != got { + t.Fatalf("expected aggregation field correlation == %v; got: %v", want, got) + } + if want, got := -0.8352655256272504, field.Correlation["poverty"]; want != got { + t.Fatalf("expected aggregation field correlation == %v; got: %v", want, got) + } + field = agg.Fields[1] + if want, got := "poverty", field.Name; want != got { + t.Fatalf("expected aggregation field name == %q; got: %q", want, got) + } + if want, got := int64(51), field.Count; want != got { + t.Fatalf("expected aggregation field count == %v; got: %v", want, got) + } +} + +func TestAggsMetricsPercentiles(t *testing.T) { + s := `{ + "load_time_outlier": { + "values" : { + "1.0": 15, + "5.0": 20, + "25.0": 23, + "50.0": 25, + "75.0": 29, + "95.0": 60, + "99.0": 150 + } + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.Percentiles("load_time_outlier") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Values == nil { + t.Fatalf("expected aggregation Values != nil; got: %v", agg.Values) + } + if len(agg.Values) != 7 { + t.Fatalf("expected %d aggregation Values; got: %d", 7, len(agg.Values)) + } + if agg.Values["1.0"] != float64(15) { + t.Errorf("expected aggregation value for \"1.0\" = %v; got: %v", float64(15), agg.Values["1.0"]) + } + if agg.Values["5.0"] != float64(20) { + t.Errorf("expected aggregation value for \"5.0\" = %v; got: %v", float64(20), agg.Values["5.0"]) + } + if agg.Values["25.0"] != float64(23) { + t.Errorf("expected aggregation value for \"25.0\" = %v; got: %v", float64(23), agg.Values["25.0"]) + } + if agg.Values["50.0"] != float64(25) { + t.Errorf("expected aggregation value for \"50.0\" = %v; got: %v", float64(25), agg.Values["50.0"]) + } + if agg.Values["75.0"] != float64(29) { + t.Errorf("expected aggregation value for \"75.0\" = %v; got: %v", float64(29), agg.Values["75.0"]) + } + if agg.Values["95.0"] != float64(60) { + t.Errorf("expected aggregation value for \"95.0\" = %v; got: %v", float64(60), agg.Values["95.0"]) + } + if agg.Values["99.0"] != float64(150) { + t.Errorf("expected aggregation value for \"99.0\" = %v; got: %v", float64(150), agg.Values["99.0"]) + } +} + +func TestAggsMetricsPercentileRanks(t *testing.T) { + s := `{ + "load_time_outlier": { + "values" : { + "15": 92, + "30": 100 + } + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.PercentileRanks("load_time_outlier") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Values == nil { + t.Fatalf("expected aggregation Values != nil; got: %v", agg.Values) + } + if len(agg.Values) != 2 { + t.Fatalf("expected %d aggregation Values; got: %d", 7, len(agg.Values)) + } + if agg.Values["15"] != float64(92) { + t.Errorf("expected aggregation value for \"15\" = %v; got: %v", float64(92), agg.Values["15"]) + } + if agg.Values["30"] != float64(100) { + t.Errorf("expected aggregation value for \"30\" = %v; got: %v", float64(100), agg.Values["30"]) + } +} + +func TestAggsMetricsTopHits(t *testing.T) { + s := `{ + "top-tags": { + "buckets": [ + { + "key": "windows-7", + "doc_count": 25365, + "top_tags_hits": { + "hits": { + "total": 25365, + "max_score": 1, + "hits": [ + { + "_index": "stack", + "_type": "question", + "_id": "602679", + "_score": 1, + "_source": { + "title": "Windows port opening" + }, + "sort": [ + 1370143231177 + ] + } + ] + } + } + }, + { + "key": "linux", + "doc_count": 18342, + "top_tags_hits": { + "hits": { + "total": 18342, + "max_score": 1, + "hits": [ + { + "_index": "stack", + "_type": "question", + "_id": "602672", + "_score": 1, + "_source": { + "title": "Ubuntu RFID Screensaver lock-unlock" + }, + "sort": [ + 1370143379747 + ] + } + ] + } + } + }, + { + "key": "windows", + "doc_count": 18119, + "top_tags_hits": { + "hits": { + "total": 18119, + "max_score": 1, + "hits": [ + { + "_index": "stack", + "_type": "question", + "_id": "602678", + "_score": 1, + "_source": { + "title": "If I change my computers date / time, what could be affected?" + }, + "sort": [ + 1370142868283 + ] + } + ] + } + } + } + ] + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.Terms("top-tags") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Buckets == nil { + t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) + } + if len(agg.Buckets) != 3 { + t.Errorf("expected %d bucket entries; got: %d", 3, len(agg.Buckets)) + } + if agg.Buckets[0].Key != "windows-7" { + t.Errorf("expected bucket key = %q; got: %q", "windows-7", agg.Buckets[0].Key) + } + if agg.Buckets[1].Key != "linux" { + t.Errorf("expected bucket key = %q; got: %q", "linux", agg.Buckets[1].Key) + } + if agg.Buckets[2].Key != "windows" { + t.Errorf("expected bucket key = %q; got: %q", "windows", agg.Buckets[2].Key) + } + + // Sub-aggregation of top-hits + subAgg, found := agg.Buckets[0].TopHits("top_tags_hits") + if !found { + t.Fatalf("expected sub aggregation to be found; got: %v", found) + } + if subAgg == nil { + t.Fatalf("expected sub aggregation != nil; got: %v", subAgg) + } + if subAgg.Hits == nil { + t.Fatalf("expected sub aggregation Hits != nil; got: %v", subAgg.Hits) + } + if subAgg.Hits.TotalHits != 25365 { + t.Fatalf("expected sub aggregation Hits.TotalHits = %d; got: %d", 25365, subAgg.Hits.TotalHits) + } + if subAgg.Hits.MaxScore == nil { + t.Fatalf("expected sub aggregation Hits.MaxScore != %v; got: %v", nil, *subAgg.Hits.MaxScore) + } + if *subAgg.Hits.MaxScore != float64(1.0) { + t.Fatalf("expected sub aggregation Hits.MaxScore = %v; got: %v", float64(1.0), *subAgg.Hits.MaxScore) + } + + subAgg, found = agg.Buckets[1].TopHits("top_tags_hits") + if !found { + t.Fatalf("expected sub aggregation to be found; got: %v", found) + } + if subAgg == nil { + t.Fatalf("expected sub aggregation != nil; got: %v", subAgg) + } + if subAgg.Hits == nil { + t.Fatalf("expected sub aggregation Hits != nil; got: %v", subAgg.Hits) + } + if subAgg.Hits.TotalHits != 18342 { + t.Fatalf("expected sub aggregation Hits.TotalHits = %d; got: %d", 18342, subAgg.Hits.TotalHits) + } + if subAgg.Hits.MaxScore == nil { + t.Fatalf("expected sub aggregation Hits.MaxScore != %v; got: %v", nil, *subAgg.Hits.MaxScore) + } + if *subAgg.Hits.MaxScore != float64(1.0) { + t.Fatalf("expected sub aggregation Hits.MaxScore = %v; got: %v", float64(1.0), *subAgg.Hits.MaxScore) + } + + subAgg, found = agg.Buckets[2].TopHits("top_tags_hits") + if !found { + t.Fatalf("expected sub aggregation to be found; got: %v", found) + } + if subAgg == nil { + t.Fatalf("expected sub aggregation != nil; got: %v", subAgg) + } + if subAgg.Hits == nil { + t.Fatalf("expected sub aggregation Hits != nil; got: %v", subAgg.Hits) + } + if subAgg.Hits.TotalHits != 18119 { + t.Fatalf("expected sub aggregation Hits.TotalHits = %d; got: %d", 18119, subAgg.Hits.TotalHits) + } + if subAgg.Hits.MaxScore == nil { + t.Fatalf("expected sub aggregation Hits.MaxScore != %v; got: %v", nil, *subAgg.Hits.MaxScore) + } + if *subAgg.Hits.MaxScore != float64(1.0) { + t.Fatalf("expected sub aggregation Hits.MaxScore = %v; got: %v", float64(1.0), *subAgg.Hits.MaxScore) + } +} + +func TestAggsBucketGlobal(t *testing.T) { + s := `{ + "all_products" : { + "doc_count" : 100, + "avg_price" : { + "value" : 56.3 + } + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.Global("all_products") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.DocCount != 100 { + t.Fatalf("expected aggregation DocCount = %d; got: %d", 100, agg.DocCount) + } + + // Sub-aggregation + subAgg, found := agg.Avg("avg_price") + if !found { + t.Fatalf("expected sub-aggregation to be found; got: %v", found) + } + if subAgg == nil { + t.Fatalf("expected sub-aggregation != nil; got: %v", subAgg) + } + if subAgg.Value == nil { + t.Fatalf("expected sub-aggregation value != nil; got: %v", subAgg.Value) + } + if *subAgg.Value != float64(56.3) { + t.Fatalf("expected sub-aggregation value = %v; got: %v", float64(56.3), *subAgg.Value) + } +} + +func TestAggsBucketFilter(t *testing.T) { + s := `{ + "in_stock_products" : { + "doc_count" : 100, + "avg_price" : { "value" : 56.3 } + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.Filter("in_stock_products") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.DocCount != 100 { + t.Fatalf("expected aggregation DocCount = %d; got: %d", 100, agg.DocCount) + } + + // Sub-aggregation + subAgg, found := agg.Avg("avg_price") + if !found { + t.Fatalf("expected sub-aggregation to be found; got: %v", found) + } + if subAgg == nil { + t.Fatalf("expected sub-aggregation != nil; got: %v", subAgg) + } + if subAgg.Value == nil { + t.Fatalf("expected sub-aggregation value != nil; got: %v", subAgg.Value) + } + if *subAgg.Value != float64(56.3) { + t.Fatalf("expected sub-aggregation value = %v; got: %v", float64(56.3), *subAgg.Value) + } +} + +func TestAggsBucketFiltersWithBuckets(t *testing.T) { + s := `{ + "messages" : { + "buckets" : [ + { + "doc_count" : 34, + "monthly" : { + "buckets" : [] + } + }, + { + "doc_count" : 439, + "monthly" : { + "buckets" : [] + } + } + ] + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.Filters("messages") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Buckets == nil { + t.Fatalf("expected aggregation buckets != %v; got: %v", nil, agg.Buckets) + } + if len(agg.Buckets) != 2 { + t.Fatalf("expected %d buckets; got: %d", 2, len(agg.Buckets)) + } + + if agg.Buckets[0].DocCount != 34 { + t.Fatalf("expected DocCount = %d; got: %d", 34, agg.Buckets[0].DocCount) + } + subAgg, found := agg.Buckets[0].Histogram("monthly") + if !found { + t.Fatalf("expected sub aggregation to be found; got: %v", found) + } + if subAgg == nil { + t.Fatalf("expected sub aggregation != %v; got: %v", nil, subAgg) + } + + if agg.Buckets[1].DocCount != 439 { + t.Fatalf("expected DocCount = %d; got: %d", 439, agg.Buckets[1].DocCount) + } + subAgg, found = agg.Buckets[1].Histogram("monthly") + if !found { + t.Fatalf("expected sub aggregation to be found; got: %v", found) + } + if subAgg == nil { + t.Fatalf("expected sub aggregation != %v; got: %v", nil, subAgg) + } +} + +func TestAggsBucketFiltersWithNamedBuckets(t *testing.T) { + s := `{ + "messages" : { + "buckets" : { + "errors" : { + "doc_count" : 34, + "monthly" : { + "buckets" : [] + } + }, + "warnings" : { + "doc_count" : 439, + "monthly" : { + "buckets" : [] + } + } + } + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.Filters("messages") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.NamedBuckets == nil { + t.Fatalf("expected aggregation buckets != %v; got: %v", nil, agg.NamedBuckets) + } + if len(agg.NamedBuckets) != 2 { + t.Fatalf("expected %d buckets; got: %d", 2, len(agg.NamedBuckets)) + } + + if agg.NamedBuckets["errors"].DocCount != 34 { + t.Fatalf("expected DocCount = %d; got: %d", 34, agg.NamedBuckets["errors"].DocCount) + } + subAgg, found := agg.NamedBuckets["errors"].Histogram("monthly") + if !found { + t.Fatalf("expected sub aggregation to be found; got: %v", found) + } + if subAgg == nil { + t.Fatalf("expected sub aggregation != %v; got: %v", nil, subAgg) + } + + if agg.NamedBuckets["warnings"].DocCount != 439 { + t.Fatalf("expected DocCount = %d; got: %d", 439, agg.NamedBuckets["warnings"].DocCount) + } + subAgg, found = agg.NamedBuckets["warnings"].Histogram("monthly") + if !found { + t.Fatalf("expected sub aggregation to be found; got: %v", found) + } + if subAgg == nil { + t.Fatalf("expected sub aggregation != %v; got: %v", nil, subAgg) + } +} + +func TestAggsBucketAdjacencyMatrix(t *testing.T) { + s := `{ + "interactions": { + "buckets": [ + { + "key": "grpA", + "doc_count": 2, + "monthly": { + "buckets": [] + } + }, + { + "key": "grpA&grpB", + "doc_count": 1, + "monthly": { + "buckets": [] + } + } + ] + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.AdjacencyMatrix("interactions") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Buckets == nil { + t.Fatalf("expected aggregation buckets != %v; got: %v", nil, agg.Buckets) + } + if len(agg.Buckets) != 2 { + t.Fatalf("expected %d buckets; got: %d", 2, len(agg.Buckets)) + } + + if agg.Buckets[0].DocCount != 2 { + t.Fatalf("expected DocCount = %d; got: %d", 2, agg.Buckets[0].DocCount) + } + subAgg, found := agg.Buckets[0].Histogram("monthly") + if !found { + t.Fatalf("expected sub aggregation to be found; got: %v", found) + } + if subAgg == nil { + t.Fatalf("expected sub aggregation != %v; got: %v", nil, subAgg) + } + + if agg.Buckets[1].DocCount != 1 { + t.Fatalf("expected DocCount = %d; got: %d", 1, agg.Buckets[1].DocCount) + } + subAgg, found = agg.Buckets[1].Histogram("monthly") + if !found { + t.Fatalf("expected sub aggregation to be found; got: %v", found) + } + if subAgg == nil { + t.Fatalf("expected sub aggregation != %v; got: %v", nil, subAgg) + } +} + +func TestAggsBucketMissing(t *testing.T) { + s := `{ + "products_without_a_price" : { + "doc_count" : 10 + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.Missing("products_without_a_price") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.DocCount != 10 { + t.Fatalf("expected aggregation DocCount = %d; got: %d", 10, agg.DocCount) + } +} + +func TestAggsBucketNested(t *testing.T) { + s := `{ + "resellers": { + "min_price": { + "value" : 350 + } + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.Nested("resellers") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.DocCount != 0 { + t.Fatalf("expected aggregation DocCount = %d; got: %d", 0, agg.DocCount) + } + + // Sub-aggregation + subAgg, found := agg.Avg("min_price") + if !found { + t.Fatalf("expected sub-aggregation to be found; got: %v", found) + } + if subAgg == nil { + t.Fatalf("expected sub-aggregation != nil; got: %v", subAgg) + } + if subAgg.Value == nil { + t.Fatalf("expected sub-aggregation value != nil; got: %v", subAgg.Value) + } + if *subAgg.Value != float64(350) { + t.Fatalf("expected sub-aggregation value = %v; got: %v", float64(350), *subAgg.Value) + } +} + +func TestAggsBucketReverseNested(t *testing.T) { + s := `{ + "comment_to_issue": { + "doc_count" : 10 + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.ReverseNested("comment_to_issue") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.DocCount != 10 { + t.Fatalf("expected aggregation DocCount = %d; got: %d", 10, agg.DocCount) + } +} + +func TestAggsBucketChildren(t *testing.T) { + s := `{ + "to-answers": { + "doc_count" : 10 + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.Children("to-answers") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.DocCount != 10 { + t.Fatalf("expected aggregation DocCount = %d; got: %d", 10, agg.DocCount) + } +} + +func TestAggsBucketTerms(t *testing.T) { + s := `{ + "users" : { + "doc_count_error_upper_bound" : 1, + "sum_other_doc_count" : 2, + "buckets" : [ { + "key" : "olivere", + "doc_count" : 2 + }, { + "key" : "sandrae", + "doc_count" : 1 + } ] + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.Terms("users") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Buckets == nil { + t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) + } + if len(agg.Buckets) != 2 { + t.Errorf("expected %d bucket entries; got: %d", 2, len(agg.Buckets)) + } + if agg.Buckets[0].Key != "olivere" { + t.Errorf("expected key %q; got: %q", "olivere", agg.Buckets[0].Key) + } + if agg.Buckets[0].DocCount != 2 { + t.Errorf("expected doc count %d; got: %d", 2, agg.Buckets[0].DocCount) + } + if agg.Buckets[1].Key != "sandrae" { + t.Errorf("expected key %q; got: %q", "sandrae", agg.Buckets[1].Key) + } + if agg.Buckets[1].DocCount != 1 { + t.Errorf("expected doc count %d; got: %d", 1, agg.Buckets[1].DocCount) + } +} + +func TestAggsBucketTermsWithNumericKeys(t *testing.T) { + s := `{ + "users" : { + "doc_count_error_upper_bound" : 1, + "sum_other_doc_count" : 2, + "buckets" : [ { + "key" : 17, + "doc_count" : 2 + }, { + "key" : 21, + "doc_count" : 1 + } ] + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.Terms("users") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Buckets == nil { + t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) + } + if len(agg.Buckets) != 2 { + t.Errorf("expected %d bucket entries; got: %d", 2, len(agg.Buckets)) + } + if agg.Buckets[0].Key != float64(17) { + t.Errorf("expected key %v; got: %v", 17, agg.Buckets[0].Key) + } + if got, err := agg.Buckets[0].KeyNumber.Int64(); err != nil { + t.Errorf("expected to convert key to int64; got: %v", err) + } else if got != 17 { + t.Errorf("expected key %v; got: %v", 17, agg.Buckets[0].Key) + } + if agg.Buckets[0].DocCount != 2 { + t.Errorf("expected doc count %d; got: %d", 2, agg.Buckets[0].DocCount) + } + if agg.Buckets[1].Key != float64(21) { + t.Errorf("expected key %v; got: %v", 21, agg.Buckets[1].Key) + } + if got, err := agg.Buckets[1].KeyNumber.Int64(); err != nil { + t.Errorf("expected to convert key to int64; got: %v", err) + } else if got != 21 { + t.Errorf("expected key %v; got: %v", 21, agg.Buckets[1].Key) + } + if agg.Buckets[1].DocCount != 1 { + t.Errorf("expected doc count %d; got: %d", 1, agg.Buckets[1].DocCount) + } +} + +func TestAggsBucketTermsWithBoolKeys(t *testing.T) { + s := `{ + "users" : { + "doc_count_error_upper_bound" : 1, + "sum_other_doc_count" : 2, + "buckets" : [ { + "key" : true, + "doc_count" : 2 + }, { + "key" : false, + "doc_count" : 1 + } ] + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.Terms("users") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Buckets == nil { + t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) + } + if len(agg.Buckets) != 2 { + t.Errorf("expected %d bucket entries; got: %d", 2, len(agg.Buckets)) + } + if agg.Buckets[0].Key != true { + t.Errorf("expected key %v; got: %v", true, agg.Buckets[0].Key) + } + if agg.Buckets[0].DocCount != 2 { + t.Errorf("expected doc count %d; got: %d", 2, agg.Buckets[0].DocCount) + } + if agg.Buckets[1].Key != false { + t.Errorf("expected key %v; got: %v", false, agg.Buckets[1].Key) + } + if agg.Buckets[1].DocCount != 1 { + t.Errorf("expected doc count %d; got: %d", 1, agg.Buckets[1].DocCount) + } +} + +func TestAggsBucketSignificantTerms(t *testing.T) { + s := `{ + "significantCrimeTypes" : { + "doc_count": 47347, + "buckets" : [ + { + "key": "Bicycle theft", + "doc_count": 3640, + "score": 0.371235374214817, + "bg_count": 66799 + } + ] + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.SignificantTerms("significantCrimeTypes") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.DocCount != 47347 { + t.Fatalf("expected aggregation DocCount != %d; got: %d", 47347, agg.DocCount) + } + if agg.Buckets == nil { + t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) + } + if len(agg.Buckets) != 1 { + t.Errorf("expected %d bucket entries; got: %d", 1, len(agg.Buckets)) + } + if agg.Buckets[0].Key != "Bicycle theft" { + t.Errorf("expected key = %q; got: %q", "Bicycle theft", agg.Buckets[0].Key) + } + if agg.Buckets[0].DocCount != 3640 { + t.Errorf("expected doc count = %d; got: %d", 3640, agg.Buckets[0].DocCount) + } + if agg.Buckets[0].Score != float64(0.371235374214817) { + t.Errorf("expected score = %v; got: %v", float64(0.371235374214817), agg.Buckets[0].Score) + } + if agg.Buckets[0].BgCount != 66799 { + t.Errorf("expected BgCount = %d; got: %d", 66799, agg.Buckets[0].BgCount) + } +} + +func TestAggsBucketSampler(t *testing.T) { + s := `{ + "sample" : { + "doc_count": 1000, + "keywords": { + "doc_count": 1000, + "buckets" : [ + { + "key": "bend", + "doc_count": 58, + "score": 37.982536582524276, + "bg_count": 103 + } + ] + } + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.Sampler("sample") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.DocCount != 1000 { + t.Fatalf("expected aggregation DocCount != %d; got: %d", 1000, agg.DocCount) + } + sub, found := agg.Aggregations["keywords"] + if !found { + t.Fatalf("expected sub aggregation %q", "keywords") + } + if sub == nil { + t.Fatalf("expected sub aggregation %q; got: %v", "keywords", sub) + } +} + +func TestAggsBucketDiversifiedSampler(t *testing.T) { + s := `{ + "diversified_sampler" : { + "doc_count": 1000, + "keywords": { + "doc_count": 1000, + "buckets" : [ + { + "key": "bend", + "doc_count": 58, + "score": 37.982536582524276, + "bg_count": 103 + } + ] + } + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.DiversifiedSampler("diversified_sampler") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.DocCount != 1000 { + t.Fatalf("expected aggregation DocCount != %d; got: %d", 1000, agg.DocCount) + } + sub, found := agg.Aggregations["keywords"] + if !found { + t.Fatalf("expected sub aggregation %q", "keywords") + } + if sub == nil { + t.Fatalf("expected sub aggregation %q; got: %v", "keywords", sub) + } +} + +func TestAggsBucketRange(t *testing.T) { + s := `{ + "price_ranges" : { + "buckets": [ + { + "to": 50, + "doc_count": 2 + }, + { + "from": 50, + "to": 100, + "doc_count": 4 + }, + { + "from": 100, + "doc_count": 4 + } + ] + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.Range("price_ranges") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Buckets == nil { + t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) + } + if len(agg.Buckets) != 3 { + t.Errorf("expected %d bucket entries; got: %d", 3, len(agg.Buckets)) + } + if agg.Buckets[0].From != nil { + t.Errorf("expected From = %v; got: %v", nil, agg.Buckets[0].From) + } + if agg.Buckets[0].To == nil { + t.Errorf("expected To != %v; got: %v", nil, agg.Buckets[0].To) + } + if *agg.Buckets[0].To != float64(50) { + t.Errorf("expected To = %v; got: %v", float64(50), *agg.Buckets[0].To) + } + if agg.Buckets[0].DocCount != 2 { + t.Errorf("expected DocCount = %d; got: %d", 2, agg.Buckets[0].DocCount) + } + if agg.Buckets[1].From == nil { + t.Errorf("expected From != %v; got: %v", nil, agg.Buckets[1].From) + } + if *agg.Buckets[1].From != float64(50) { + t.Errorf("expected From = %v; got: %v", float64(50), *agg.Buckets[1].From) + } + if agg.Buckets[1].To == nil { + t.Errorf("expected To != %v; got: %v", nil, agg.Buckets[1].To) + } + if *agg.Buckets[1].To != float64(100) { + t.Errorf("expected To = %v; got: %v", float64(100), *agg.Buckets[1].To) + } + if agg.Buckets[1].DocCount != 4 { + t.Errorf("expected DocCount = %d; got: %d", 4, agg.Buckets[1].DocCount) + } + if agg.Buckets[2].From == nil { + t.Errorf("expected From != %v; got: %v", nil, agg.Buckets[2].From) + } + if *agg.Buckets[2].From != float64(100) { + t.Errorf("expected From = %v; got: %v", float64(100), *agg.Buckets[2].From) + } + if agg.Buckets[2].To != nil { + t.Errorf("expected To = %v; got: %v", nil, agg.Buckets[2].To) + } + if agg.Buckets[2].DocCount != 4 { + t.Errorf("expected DocCount = %d; got: %d", 4, agg.Buckets[2].DocCount) + } +} + +func TestAggsBucketDateRange(t *testing.T) { + s := `{ + "range": { + "buckets": [ + { + "to": 1.3437792E+12, + "to_as_string": "08-2012", + "doc_count": 7 + }, + { + "from": 1.3437792E+12, + "from_as_string": "08-2012", + "doc_count": 2 + } + ] + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.DateRange("range") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Buckets == nil { + t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) + } + if len(agg.Buckets) != 2 { + t.Errorf("expected %d bucket entries; got: %d", 2, len(agg.Buckets)) + } + if agg.Buckets[0].From != nil { + t.Errorf("expected From = %v; got: %v", nil, agg.Buckets[0].From) + } + if agg.Buckets[0].To == nil { + t.Errorf("expected To != %v; got: %v", nil, agg.Buckets[0].To) + } + if *agg.Buckets[0].To != float64(1.3437792E+12) { + t.Errorf("expected To = %v; got: %v", float64(1.3437792E+12), *agg.Buckets[0].To) + } + if agg.Buckets[0].ToAsString != "08-2012" { + t.Errorf("expected ToAsString = %q; got: %q", "08-2012", agg.Buckets[0].ToAsString) + } + if agg.Buckets[0].DocCount != 7 { + t.Errorf("expected DocCount = %d; got: %d", 7, agg.Buckets[0].DocCount) + } + if agg.Buckets[1].From == nil { + t.Errorf("expected From != %v; got: %v", nil, agg.Buckets[1].From) + } + if *agg.Buckets[1].From != float64(1.3437792E+12) { + t.Errorf("expected From = %v; got: %v", float64(1.3437792E+12), *agg.Buckets[1].From) + } + if agg.Buckets[1].FromAsString != "08-2012" { + t.Errorf("expected FromAsString = %q; got: %q", "08-2012", agg.Buckets[1].FromAsString) + } + if agg.Buckets[1].To != nil { + t.Errorf("expected To = %v; got: %v", nil, agg.Buckets[1].To) + } + if agg.Buckets[1].DocCount != 2 { + t.Errorf("expected DocCount = %d; got: %d", 2, agg.Buckets[1].DocCount) + } +} + +func TestAggsBucketIPRange(t *testing.T) { + s := `{ + "ip_ranges": { + "buckets" : [ + { + "to": 167772165, + "to_as_string": "10.0.0.5", + "doc_count": 4 + }, + { + "from": 167772165, + "from_as_string": "10.0.0.5", + "doc_count": 6 + } + ] + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.IPRange("ip_ranges") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Buckets == nil { + t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) + } + if len(agg.Buckets) != 2 { + t.Errorf("expected %d bucket entries; got: %d", 2, len(agg.Buckets)) + } + if agg.Buckets[0].From != nil { + t.Errorf("expected From = %v; got: %v", nil, agg.Buckets[0].From) + } + if agg.Buckets[0].To == nil { + t.Errorf("expected To != %v; got: %v", nil, agg.Buckets[0].To) + } + if *agg.Buckets[0].To != float64(167772165) { + t.Errorf("expected To = %v; got: %v", float64(167772165), *agg.Buckets[0].To) + } + if agg.Buckets[0].ToAsString != "10.0.0.5" { + t.Errorf("expected ToAsString = %q; got: %q", "10.0.0.5", agg.Buckets[0].ToAsString) + } + if agg.Buckets[0].DocCount != 4 { + t.Errorf("expected DocCount = %d; got: %d", 4, agg.Buckets[0].DocCount) + } + if agg.Buckets[1].From == nil { + t.Errorf("expected From != %v; got: %v", nil, agg.Buckets[1].From) + } + if *agg.Buckets[1].From != float64(167772165) { + t.Errorf("expected From = %v; got: %v", float64(167772165), *agg.Buckets[1].From) + } + if agg.Buckets[1].FromAsString != "10.0.0.5" { + t.Errorf("expected FromAsString = %q; got: %q", "10.0.0.5", agg.Buckets[1].FromAsString) + } + if agg.Buckets[1].To != nil { + t.Errorf("expected To = %v; got: %v", nil, agg.Buckets[1].To) + } + if agg.Buckets[1].DocCount != 6 { + t.Errorf("expected DocCount = %d; got: %d", 6, agg.Buckets[1].DocCount) + } +} + +func TestAggsBucketHistogram(t *testing.T) { + s := `{ + "prices" : { + "buckets": [ + { + "key": 0, + "doc_count": 2 + }, + { + "key": 50, + "doc_count": 4 + }, + { + "key": 150, + "doc_count": 3 + } + ] + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.Histogram("prices") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Buckets == nil { + t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) + } + if len(agg.Buckets) != 3 { + t.Errorf("expected %d buckets; got: %d", 3, len(agg.Buckets)) + } + if agg.Buckets[0].Key != 0 { + t.Errorf("expected key = %v; got: %v", 0, agg.Buckets[0].Key) + } + if agg.Buckets[0].KeyAsString != nil { + t.Fatalf("expected key_as_string = %v; got: %q", nil, *agg.Buckets[0].KeyAsString) + } + if agg.Buckets[0].DocCount != 2 { + t.Errorf("expected doc count = %d; got: %d", 2, agg.Buckets[0].DocCount) + } + if agg.Buckets[1].Key != 50 { + t.Errorf("expected key = %v; got: %v", 50, agg.Buckets[1].Key) + } + if agg.Buckets[1].KeyAsString != nil { + t.Fatalf("expected key_as_string = %v; got: %q", nil, *agg.Buckets[1].KeyAsString) + } + if agg.Buckets[1].DocCount != 4 { + t.Errorf("expected doc count = %d; got: %d", 4, agg.Buckets[1].DocCount) + } + if agg.Buckets[2].Key != 150 { + t.Errorf("expected key = %v; got: %v", 150, agg.Buckets[2].Key) + } + if agg.Buckets[2].KeyAsString != nil { + t.Fatalf("expected key_as_string = %v; got: %q", nil, *agg.Buckets[2].KeyAsString) + } + if agg.Buckets[2].DocCount != 3 { + t.Errorf("expected doc count = %d; got: %d", 3, agg.Buckets[2].DocCount) + } +} + +func TestAggsBucketDateHistogram(t *testing.T) { + s := `{ + "articles_over_time": { + "buckets": [ + { + "key_as_string": "2013-02-02", + "key": 1328140800000, + "doc_count": 1 + }, + { + "key_as_string": "2013-03-02", + "key": 1330646400000, + "doc_count": 2 + } + ] + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.DateHistogram("articles_over_time") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Buckets == nil { + t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) + } + if len(agg.Buckets) != 2 { + t.Errorf("expected %d bucket entries; got: %d", 2, len(agg.Buckets)) + } + if agg.Buckets[0].Key != 1328140800000 { + t.Errorf("expected key %v; got: %v", 1328140800000, agg.Buckets[0].Key) + } + if agg.Buckets[0].KeyAsString == nil { + t.Fatalf("expected key_as_string != nil; got: %v", agg.Buckets[0].KeyAsString) + } + if *agg.Buckets[0].KeyAsString != "2013-02-02" { + t.Errorf("expected key_as_string %q; got: %q", "2013-02-02", *agg.Buckets[0].KeyAsString) + } + if agg.Buckets[0].DocCount != 1 { + t.Errorf("expected doc count %d; got: %d", 1, agg.Buckets[0].DocCount) + } + if agg.Buckets[1].Key != 1330646400000 { + t.Errorf("expected key %v; got: %v", 1330646400000, agg.Buckets[1].Key) + } + if agg.Buckets[1].KeyAsString == nil { + t.Fatalf("expected key_as_string != nil; got: %v", agg.Buckets[1].KeyAsString) + } + if *agg.Buckets[1].KeyAsString != "2013-03-02" { + t.Errorf("expected key_as_string %q; got: %q", "2013-03-02", *agg.Buckets[1].KeyAsString) + } + if agg.Buckets[1].DocCount != 2 { + t.Errorf("expected doc count %d; got: %d", 2, agg.Buckets[1].DocCount) + } +} + +func TestAggsMetricsGeoBounds(t *testing.T) { + s := `{ + "viewport": { + "bounds": { + "top_left": { + "lat": 80.45, + "lon": -160.22 + }, + "bottom_right": { + "lat": 40.65, + "lon": 42.57 + } + } + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.GeoBounds("viewport") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Bounds.TopLeft.Latitude != float64(80.45) { + t.Fatalf("expected Bounds.TopLeft.Latitude != %v; got: %v", float64(80.45), agg.Bounds.TopLeft.Latitude) + } + if agg.Bounds.TopLeft.Longitude != float64(-160.22) { + t.Fatalf("expected Bounds.TopLeft.Longitude != %v; got: %v", float64(-160.22), agg.Bounds.TopLeft.Longitude) + } + if agg.Bounds.BottomRight.Latitude != float64(40.65) { + t.Fatalf("expected Bounds.BottomRight.Latitude != %v; got: %v", float64(40.65), agg.Bounds.BottomRight.Latitude) + } + if agg.Bounds.BottomRight.Longitude != float64(42.57) { + t.Fatalf("expected Bounds.BottomRight.Longitude != %v; got: %v", float64(42.57), agg.Bounds.BottomRight.Longitude) + } +} + +func TestAggsBucketGeoHash(t *testing.T) { + s := `{ + "myLarge-GrainGeoHashGrid": { + "buckets": [ + { + "key": "svz", + "doc_count": 10964 + }, + { + "key": "sv8", + "doc_count": 3198 + } + ] + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.GeoHash("myLarge-GrainGeoHashGrid") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Buckets == nil { + t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) + } + if len(agg.Buckets) != 2 { + t.Errorf("expected %d bucket entries; got: %d", 2, len(agg.Buckets)) + } + if agg.Buckets[0].Key != "svz" { + t.Errorf("expected key %q; got: %q", "svz", agg.Buckets[0].Key) + } + if agg.Buckets[0].DocCount != 10964 { + t.Errorf("expected doc count %d; got: %d", 10964, agg.Buckets[0].DocCount) + } + if agg.Buckets[1].Key != "sv8" { + t.Errorf("expected key %q; got: %q", "sv8", agg.Buckets[1].Key) + } + if agg.Buckets[1].DocCount != 3198 { + t.Errorf("expected doc count %d; got: %d", 3198, agg.Buckets[1].DocCount) + } +} + +func TestAggsMetricsGeoCentroid(t *testing.T) { + s := `{ + "centroid": { + "location": { + "lat": 80.45, + "lon": -160.22 + }, + "count": 6 + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.GeoCentroid("centroid") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Location.Latitude != float64(80.45) { + t.Fatalf("expected Location.Latitude != %v; got: %v", float64(80.45), agg.Location.Latitude) + } + if agg.Location.Longitude != float64(-160.22) { + t.Fatalf("expected Location.Longitude != %v; got: %v", float64(-160.22), agg.Location.Longitude) + } + if agg.Count != int(6) { + t.Fatalf("expected Count != %v; got: %v", int(6), agg.Count) + } +} + +func TestAggsBucketGeoDistance(t *testing.T) { + s := `{ + "rings" : { + "buckets": [ + { + "unit": "km", + "to": 100.0, + "doc_count": 3 + }, + { + "unit": "km", + "from": 100.0, + "to": 300.0, + "doc_count": 1 + }, + { + "unit": "km", + "from": 300.0, + "doc_count": 7 + } + ] + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.GeoDistance("rings") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Buckets == nil { + t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) + } + if len(agg.Buckets) != 3 { + t.Errorf("expected %d bucket entries; got: %d", 3, len(agg.Buckets)) + } + if agg.Buckets[0].From != nil { + t.Errorf("expected From = %v; got: %v", nil, agg.Buckets[0].From) + } + if agg.Buckets[0].To == nil { + t.Errorf("expected To != %v; got: %v", nil, agg.Buckets[0].To) + } + if *agg.Buckets[0].To != float64(100.0) { + t.Errorf("expected To = %v; got: %v", float64(100.0), *agg.Buckets[0].To) + } + if agg.Buckets[0].DocCount != 3 { + t.Errorf("expected DocCount = %d; got: %d", 4, agg.Buckets[0].DocCount) + } + + if agg.Buckets[1].From == nil { + t.Errorf("expected From != %v; got: %v", nil, agg.Buckets[1].From) + } + if *agg.Buckets[1].From != float64(100.0) { + t.Errorf("expected From = %v; got: %v", float64(100.0), *agg.Buckets[1].From) + } + if agg.Buckets[1].To == nil { + t.Errorf("expected To != %v; got: %v", nil, agg.Buckets[1].To) + } + if *agg.Buckets[1].To != float64(300.0) { + t.Errorf("expected From = %v; got: %v", float64(300.0), *agg.Buckets[1].To) + } + if agg.Buckets[1].DocCount != 1 { + t.Errorf("expected DocCount = %d; got: %d", 1, agg.Buckets[1].DocCount) + } + + if agg.Buckets[2].From == nil { + t.Errorf("expected From != %v; got: %v", nil, agg.Buckets[2].From) + } + if *agg.Buckets[2].From != float64(300.0) { + t.Errorf("expected From = %v; got: %v", float64(300.0), *agg.Buckets[2].From) + } + if agg.Buckets[2].To != nil { + t.Errorf("expected To = %v; got: %v", nil, agg.Buckets[2].To) + } + if agg.Buckets[2].DocCount != 7 { + t.Errorf("expected DocCount = %d; got: %d", 7, agg.Buckets[2].DocCount) + } +} + +func TestAggsSubAggregates(t *testing.T) { + rs := `{ + "users" : { + "doc_count_error_upper_bound" : 1, + "sum_other_doc_count" : 2, + "buckets" : [ { + "key" : "olivere", + "doc_count" : 2, + "ts" : { + "buckets" : [ { + "key_as_string" : "2012-01-01T00:00:00.000Z", + "key" : 1325376000000, + "doc_count" : 2 + } ] + } + }, { + "key" : "sandrae", + "doc_count" : 1, + "ts" : { + "buckets" : [ { + "key_as_string" : "2011-01-01T00:00:00.000Z", + "key" : 1293840000000, + "doc_count" : 1 + } ] + } + } ] + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(rs), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + // Access top-level aggregation + users, found := aggs.Terms("users") + if !found { + t.Fatalf("expected users aggregation to be found; got: %v", found) + } + if users == nil { + t.Fatalf("expected users aggregation; got: %v", users) + } + if users.Buckets == nil { + t.Fatalf("expected users buckets; got: %v", users.Buckets) + } + if len(users.Buckets) != 2 { + t.Errorf("expected %d bucket entries; got: %d", 2, len(users.Buckets)) + } + if users.Buckets[0].Key != "olivere" { + t.Errorf("expected key %q; got: %q", "olivere", users.Buckets[0].Key) + } + if users.Buckets[0].DocCount != 2 { + t.Errorf("expected doc count %d; got: %d", 2, users.Buckets[0].DocCount) + } + if users.Buckets[1].Key != "sandrae" { + t.Errorf("expected key %q; got: %q", "sandrae", users.Buckets[1].Key) + } + if users.Buckets[1].DocCount != 1 { + t.Errorf("expected doc count %d; got: %d", 1, users.Buckets[1].DocCount) + } + + // Access sub-aggregation + ts, found := users.Buckets[0].DateHistogram("ts") + if !found { + t.Fatalf("expected ts aggregation to be found; got: %v", found) + } + if ts == nil { + t.Fatalf("expected ts aggregation; got: %v", ts) + } + if ts.Buckets == nil { + t.Fatalf("expected ts buckets; got: %v", ts.Buckets) + } + if len(ts.Buckets) != 1 { + t.Errorf("expected %d bucket entries; got: %d", 1, len(ts.Buckets)) + } + if ts.Buckets[0].Key != 1325376000000 { + t.Errorf("expected key %v; got: %v", 1325376000000, ts.Buckets[0].Key) + } + if ts.Buckets[0].KeyAsString == nil { + t.Fatalf("expected key_as_string != %v; got: %v", nil, ts.Buckets[0].KeyAsString) + } + if *ts.Buckets[0].KeyAsString != "2012-01-01T00:00:00.000Z" { + t.Errorf("expected key_as_string %q; got: %q", "2012-01-01T00:00:00.000Z", *ts.Buckets[0].KeyAsString) + } +} + +func TestAggsPipelineAvgBucket(t *testing.T) { + s := `{ + "avg_monthly_sales" : { + "value" : 328.33333333333333 + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.AvgBucket("avg_monthly_sales") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Value == nil { + t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) + } + if *agg.Value != float64(328.33333333333333) { + t.Fatalf("expected aggregation value = %v; got: %v", float64(328.33333333333333), *agg.Value) + } +} + +func TestAggsPipelineSumBucket(t *testing.T) { + s := `{ + "sum_monthly_sales" : { + "value" : 985 + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.SumBucket("sum_monthly_sales") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Value == nil { + t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) + } + if *agg.Value != float64(985) { + t.Fatalf("expected aggregation value = %v; got: %v", float64(985), *agg.Value) + } +} + +func TestAggsPipelineMaxBucket(t *testing.T) { + s := `{ + "max_monthly_sales" : { + "keys": ["2015/01/01 00:00:00"], + "value" : 550 + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.MaxBucket("max_monthly_sales") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if len(agg.Keys) != 1 { + t.Fatalf("expected 1 key; got: %d", len(agg.Keys)) + } + if got, want := agg.Keys[0], "2015/01/01 00:00:00"; got != want { + t.Fatalf("expected key %q; got: %v (%T)", want, got, got) + } + if agg.Value == nil { + t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) + } + if *agg.Value != float64(550) { + t.Fatalf("expected aggregation value = %v; got: %v", float64(550), *agg.Value) + } +} + +func TestAggsPipelineMinBucket(t *testing.T) { + s := `{ + "min_monthly_sales" : { + "keys": ["2015/02/01 00:00:00"], + "value" : 60 + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.MinBucket("min_monthly_sales") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if len(agg.Keys) != 1 { + t.Fatalf("expected 1 key; got: %d", len(agg.Keys)) + } + if got, want := agg.Keys[0], "2015/02/01 00:00:00"; got != want { + t.Fatalf("expected key %q; got: %v (%T)", want, got, got) + } + if agg.Value == nil { + t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) + } + if *agg.Value != float64(60) { + t.Fatalf("expected aggregation value = %v; got: %v", float64(60), *agg.Value) + } +} + +func TestAggsPipelineMovAvg(t *testing.T) { + s := `{ + "the_movavg" : { + "value" : 12.0 + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.MovAvg("the_movavg") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Value == nil { + t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) + } + if *agg.Value != float64(12.0) { + t.Fatalf("expected aggregation value = %v; got: %v", float64(12.0), *agg.Value) + } +} + +func TestAggsPipelineDerivative(t *testing.T) { + s := `{ + "sales_deriv" : { + "value" : 315 + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.Derivative("sales_deriv") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Value == nil { + t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) + } + if *agg.Value != float64(315) { + t.Fatalf("expected aggregation value = %v; got: %v", float64(315), *agg.Value) + } +} + +func TestAggsPipelinePercentilesBucket(t *testing.T) { + s := `{ + "sales_percentiles": { + "values": { + "25.0": 100, + "50.0": 200, + "75.0": 300 + } + } +}` + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.PercentilesBucket("sales_percentiles") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if len(agg.Values) != 3 { + t.Fatalf("expected aggregation map with three entries; got: %v", agg.Values) + } +} + +func TestAggsPipelineStatsBucket(t *testing.T) { + s := `{ + "stats_monthly_sales": { + "count": 3, + "min": 60.0, + "max": 550.0, + "avg": 328.3333333333333, + "sum": 985.0 + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.StatsBucket("stats_monthly_sales") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Count != 3 { + t.Fatalf("expected aggregation count = %v; got: %v", 3, agg.Count) + } + if agg.Min == nil { + t.Fatalf("expected aggregation min != nil; got: %v", agg.Min) + } + if *agg.Min != float64(60.0) { + t.Fatalf("expected aggregation min = %v; got: %v", float64(60.0), *agg.Min) + } + if agg.Max == nil { + t.Fatalf("expected aggregation max != nil; got: %v", agg.Max) + } + if *agg.Max != float64(550.0) { + t.Fatalf("expected aggregation max = %v; got: %v", float64(550.0), *agg.Max) + } + if agg.Avg == nil { + t.Fatalf("expected aggregation avg != nil; got: %v", agg.Avg) + } + if *agg.Avg != float64(328.3333333333333) { + t.Fatalf("expected aggregation average = %v; got: %v", float64(328.3333333333333), *agg.Avg) + } + if agg.Sum == nil { + t.Fatalf("expected aggregation sum != nil; got: %v", agg.Sum) + } + if *agg.Sum != float64(985.0) { + t.Fatalf("expected aggregation sum = %v; got: %v", float64(985.0), *agg.Sum) + } +} + +func TestAggsPipelineCumulativeSum(t *testing.T) { + s := `{ + "cumulative_sales" : { + "value" : 550 + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.CumulativeSum("cumulative_sales") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Value == nil { + t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) + } + if *agg.Value != float64(550) { + t.Fatalf("expected aggregation value = %v; got: %v", float64(550), *agg.Value) + } +} + +func TestAggsPipelineBucketScript(t *testing.T) { + s := `{ + "t-shirt-percentage" : { + "value" : 20 + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.BucketScript("t-shirt-percentage") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Value == nil { + t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) + } + if *agg.Value != float64(20) { + t.Fatalf("expected aggregation value = %v; got: %v", float64(20), *agg.Value) + } +} + +func TestAggsPipelineSerialDiff(t *testing.T) { + s := `{ + "the_diff" : { + "value" : -722.0 + } +}` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.SerialDiff("the_diff") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if agg.Value == nil { + t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) + } + if *agg.Value != float64(-722.0) { + t.Fatalf("expected aggregation value = %v; got: %v", float64(20), *agg.Value) + } +} + +func TestAggsComposite(t *testing.T) { + s := `{ + "the_composite" : { + "buckets" : [ + { + "key" : { + "composite_users" : "olivere", + "composite_retweets" : 0.0, + "composite_created" : 1349856720000 + }, + "doc_count" : 1 + }, + { + "key" : { + "composite_users" : "olivere", + "composite_retweets" : 108.0, + "composite_created" : 1355333880000 + }, + "doc_count" : 1 + }, + { + "key" : { + "composite_users" : "sandrae", + "composite_retweets" : 12.0, + "composite_created" : 1321009080000 + }, + "doc_count" : 1 + } + ] + } + }` + + aggs := new(Aggregations) + err := json.Unmarshal([]byte(s), &aggs) + if err != nil { + t.Fatalf("expected no error decoding; got: %v", err) + } + + agg, found := aggs.Composite("the_composite") + if !found { + t.Fatalf("expected aggregation to be found; got: %v", found) + } + if agg == nil { + t.Fatalf("expected aggregation != nil; got: %v", agg) + } + if want, have := 3, len(agg.Buckets); want != have { + t.Fatalf("expected aggregation buckets length = %v; got: %v", want, have) + } + + // 1st bucket + bucket := agg.Buckets[0] + if want, have := int64(1), bucket.DocCount; want != have { + t.Fatalf("expected aggregation bucket doc count = %v; got: %v", want, have) + } + if want, have := 3, len(bucket.Key); want != have { + t.Fatalf("expected aggregation bucket key length = %v; got: %v", want, have) + } + v, found := bucket.Key["composite_users"] + if !found { + t.Fatalf("expected to find bucket key %q", "composite_users") + } + s, ok := v.(string) + if !ok { + t.Fatalf("expected to have bucket key of type string; got: %T", v) + } + if want, have := "olivere", s; want != have { + t.Fatalf("expected to find bucket key value %q; got: %q", want, have) + } + v, found = bucket.Key["composite_retweets"] + if !found { + t.Fatalf("expected to find bucket key %q", "composite_retweets") + } + f, ok := v.(float64) + if !ok { + t.Fatalf("expected to have bucket key of type string; got: %T", v) + } + if want, have := 0.0, f; want != have { + t.Fatalf("expected to find bucket key value %v; got: %v", want, have) + } + v, found = bucket.Key["composite_created"] + if !found { + t.Fatalf("expected to find bucket key %q", "composite_created") + } + f, ok = v.(float64) + if !ok { + t.Fatalf("expected to have bucket key of type string; got: %T", v) + } + if want, have := 1349856720000.0, f; want != have { + t.Fatalf("expected to find bucket key value %v; got: %v", want, have) + } + + // 2nd bucket + bucket = agg.Buckets[1] + if want, have := int64(1), bucket.DocCount; want != have { + t.Fatalf("expected aggregation bucket doc count = %v; got: %v", want, have) + } + if want, have := 3, len(bucket.Key); want != have { + t.Fatalf("expected aggregation bucket key length = %v; got: %v", want, have) + } + v, found = bucket.Key["composite_users"] + if !found { + t.Fatalf("expected to find bucket key %q", "composite_users") + } + s, ok = v.(string) + if !ok { + t.Fatalf("expected to have bucket key of type string; got: %T", v) + } + if want, have := "olivere", s; want != have { + t.Fatalf("expected to find bucket key value %q; got: %q", want, have) + } + v, found = bucket.Key["composite_retweets"] + if !found { + t.Fatalf("expected to find bucket key %q", "composite_retweets") + } + f, ok = v.(float64) + if !ok { + t.Fatalf("expected to have bucket key of type string; got: %T", v) + } + if want, have := 108.0, f; want != have { + t.Fatalf("expected to find bucket key value %v; got: %v", want, have) + } + v, found = bucket.Key["composite_created"] + if !found { + t.Fatalf("expected to find bucket key %q", "composite_created") + } + f, ok = v.(float64) + if !ok { + t.Fatalf("expected to have bucket key of type string; got: %T", v) + } + if want, have := 1355333880000.0, f; want != have { + t.Fatalf("expected to find bucket key value %v; got: %v", want, have) + } + + // 3rd bucket + bucket = agg.Buckets[2] + if want, have := int64(1), bucket.DocCount; want != have { + t.Fatalf("expected aggregation bucket doc count = %v; got: %v", want, have) + } + if want, have := 3, len(bucket.Key); want != have { + t.Fatalf("expected aggregation bucket key length = %v; got: %v", want, have) + } + v, found = bucket.Key["composite_users"] + if !found { + t.Fatalf("expected to find bucket key %q", "composite_users") + } + s, ok = v.(string) + if !ok { + t.Fatalf("expected to have bucket key of type string; got: %T", v) + } + if want, have := "sandrae", s; want != have { + t.Fatalf("expected to find bucket key value %q; got: %q", want, have) + } + v, found = bucket.Key["composite_retweets"] + if !found { + t.Fatalf("expected to find bucket key %q", "composite_retweets") + } + f, ok = v.(float64) + if !ok { + t.Fatalf("expected to have bucket key of type string; got: %T", v) + } + if want, have := 12.0, f; want != have { + t.Fatalf("expected to find bucket key value %v; got: %v", want, have) + } + v, found = bucket.Key["composite_created"] + if !found { + t.Fatalf("expected to find bucket key %q", "composite_created") + } + f, ok = v.(float64) + if !ok { + t.Fatalf("expected to have bucket key of type string; got: %T", v) + } + if want, have := 1321009080000.0, f; want != have { + t.Fatalf("expected to find bucket key value %v; got: %v", want, have) + } +} diff --git a/vendor/github.com/olivere/elastic/search_collapse_builder.go b/vendor/github.com/olivere/elastic/search_collapse_builder.go new file mode 100644 index 0000000..c2a214b --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_collapse_builder.go @@ -0,0 +1,68 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// CollapseBuilder enables field collapsing on a search request. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-collapse.html +// for details. +type CollapseBuilder struct { + field string + innerHit *InnerHit + maxConcurrentGroupRequests *int +} + +// NewCollapseBuilder creates a new CollapseBuilder. +func NewCollapseBuilder(field string) *CollapseBuilder { + return &CollapseBuilder{field: field} +} + +// Field to collapse. +func (b *CollapseBuilder) Field(field string) *CollapseBuilder { + b.field = field + return b +} + +// InnerHit option to expand the collapsed results. +func (b *CollapseBuilder) InnerHit(innerHit *InnerHit) *CollapseBuilder { + b.innerHit = innerHit + return b +} + +// MaxConcurrentGroupRequests is the maximum number of group requests that are +// allowed to be ran concurrently in the inner_hits phase. +func (b *CollapseBuilder) MaxConcurrentGroupRequests(max int) *CollapseBuilder { + b.maxConcurrentGroupRequests = &max + return b +} + +// Source generates the JSON serializable fragment for the CollapseBuilder. +func (b *CollapseBuilder) Source() (interface{}, error) { + // { + // "field": "user", + // "inner_hits": { + // "name": "last_tweets", + // "size": 5, + // "sort": [{ "date": "asc" }] + // }, + // "max_concurrent_group_searches": 4 + // } + src := map[string]interface{}{ + "field": b.field, + } + + if b.innerHit != nil { + hits, err := b.innerHit.Source() + if err != nil { + return nil, err + } + src["inner_hits"] = hits + } + + if b.maxConcurrentGroupRequests != nil { + src["max_concurrent_group_searches"] = *b.maxConcurrentGroupRequests + } + + return src, nil +} diff --git a/vendor/github.com/olivere/elastic/search_collapse_builder_test.go b/vendor/github.com/olivere/elastic/search_collapse_builder_test.go new file mode 100644 index 0000000..0b74fad --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_collapse_builder_test.go @@ -0,0 +1,29 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestCollapseBuilderSource(t *testing.T) { + b := NewCollapseBuilder("user"). + InnerHit(NewInnerHit().Name("last_tweets").Size(5).Sort("date", true)). + MaxConcurrentGroupRequests(4) + src, err := b.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"field":"user","inner_hits":{"name":"last_tweets","size":5,"sort":[{"date":{"order":"asc"}}]},"max_concurrent_group_searches":4}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_queries_bool.go b/vendor/github.com/olivere/elastic/search_queries_bool.go new file mode 100644 index 0000000..e6b0592 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_bool.go @@ -0,0 +1,203 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import "fmt" + +// A bool query matches documents matching boolean +// combinations of other queries. +// For more details, see: +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-bool-query.html +type BoolQuery struct { + Query + mustClauses []Query + mustNotClauses []Query + filterClauses []Query + shouldClauses []Query + boost *float64 + minimumShouldMatch string + adjustPureNegative *bool + queryName string +} + +// Creates a new bool query. +func NewBoolQuery() *BoolQuery { + return &BoolQuery{ + mustClauses: make([]Query, 0), + mustNotClauses: make([]Query, 0), + filterClauses: make([]Query, 0), + shouldClauses: make([]Query, 0), + } +} + +func (q *BoolQuery) Must(queries ...Query) *BoolQuery { + q.mustClauses = append(q.mustClauses, queries...) + return q +} + +func (q *BoolQuery) MustNot(queries ...Query) *BoolQuery { + q.mustNotClauses = append(q.mustNotClauses, queries...) + return q +} + +func (q *BoolQuery) Filter(filters ...Query) *BoolQuery { + q.filterClauses = append(q.filterClauses, filters...) + return q +} + +func (q *BoolQuery) Should(queries ...Query) *BoolQuery { + q.shouldClauses = append(q.shouldClauses, queries...) + return q +} + +func (q *BoolQuery) Boost(boost float64) *BoolQuery { + q.boost = &boost + return q +} + +func (q *BoolQuery) MinimumShouldMatch(minimumShouldMatch string) *BoolQuery { + q.minimumShouldMatch = minimumShouldMatch + return q +} + +func (q *BoolQuery) MinimumNumberShouldMatch(minimumNumberShouldMatch int) *BoolQuery { + q.minimumShouldMatch = fmt.Sprintf("%d", minimumNumberShouldMatch) + return q +} + +func (q *BoolQuery) AdjustPureNegative(adjustPureNegative bool) *BoolQuery { + q.adjustPureNegative = &adjustPureNegative + return q +} + +func (q *BoolQuery) QueryName(queryName string) *BoolQuery { + q.queryName = queryName + return q +} + +// Creates the query source for the bool query. +func (q *BoolQuery) Source() (interface{}, error) { + // { + // "bool" : { + // "must" : { + // "term" : { "user" : "kimchy" } + // }, + // "must_not" : { + // "range" : { + // "age" : { "from" : 10, "to" : 20 } + // } + // }, + // "filter" : [ + // ... + // ] + // "should" : [ + // { + // "term" : { "tag" : "wow" } + // }, + // { + // "term" : { "tag" : "elasticsearch" } + // } + // ], + // "minimum_should_match" : 1, + // "boost" : 1.0 + // } + // } + + query := make(map[string]interface{}) + + boolClause := make(map[string]interface{}) + query["bool"] = boolClause + + // must + if len(q.mustClauses) == 1 { + src, err := q.mustClauses[0].Source() + if err != nil { + return nil, err + } + boolClause["must"] = src + } else if len(q.mustClauses) > 1 { + var clauses []interface{} + for _, subQuery := range q.mustClauses { + src, err := subQuery.Source() + if err != nil { + return nil, err + } + clauses = append(clauses, src) + } + boolClause["must"] = clauses + } + + // must_not + if len(q.mustNotClauses) == 1 { + src, err := q.mustNotClauses[0].Source() + if err != nil { + return nil, err + } + boolClause["must_not"] = src + } else if len(q.mustNotClauses) > 1 { + var clauses []interface{} + for _, subQuery := range q.mustNotClauses { + src, err := subQuery.Source() + if err != nil { + return nil, err + } + clauses = append(clauses, src) + } + boolClause["must_not"] = clauses + } + + // filter + if len(q.filterClauses) == 1 { + src, err := q.filterClauses[0].Source() + if err != nil { + return nil, err + } + boolClause["filter"] = src + } else if len(q.filterClauses) > 1 { + var clauses []interface{} + for _, subQuery := range q.filterClauses { + src, err := subQuery.Source() + if err != nil { + return nil, err + } + clauses = append(clauses, src) + } + boolClause["filter"] = clauses + } + + // should + if len(q.shouldClauses) == 1 { + src, err := q.shouldClauses[0].Source() + if err != nil { + return nil, err + } + boolClause["should"] = src + } else if len(q.shouldClauses) > 1 { + var clauses []interface{} + for _, subQuery := range q.shouldClauses { + src, err := subQuery.Source() + if err != nil { + return nil, err + } + clauses = append(clauses, src) + } + boolClause["should"] = clauses + } + + if q.boost != nil { + boolClause["boost"] = *q.boost + } + if q.minimumShouldMatch != "" { + boolClause["minimum_should_match"] = q.minimumShouldMatch + } + if q.adjustPureNegative != nil { + boolClause["adjust_pure_negative"] = *q.adjustPureNegative + } + if q.queryName != "" { + boolClause["_name"] = q.queryName + } + + return query, nil +} diff --git a/vendor/github.com/olivere/elastic/search_queries_bool_test.go b/vendor/github.com/olivere/elastic/search_queries_bool_test.go new file mode 100644 index 0000000..cdcc38d --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_bool_test.go @@ -0,0 +1,33 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestBoolQuery(t *testing.T) { + q := NewBoolQuery() + q = q.Must(NewTermQuery("tag", "wow")) + q = q.MustNot(NewRangeQuery("age").From(10).To(20)) + q = q.Filter(NewTermQuery("account", "1")) + q = q.Should(NewTermQuery("tag", "sometag"), NewTermQuery("tag", "sometagtag")) + q = q.Boost(10) + q = q.QueryName("Test") + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"bool":{"_name":"Test","boost":10,"filter":{"term":{"account":"1"}},"must":{"term":{"tag":"wow"}},"must_not":{"range":{"age":{"from":10,"include_lower":true,"include_upper":true,"to":20}}},"should":[{"term":{"tag":"sometag"}},{"term":{"tag":"sometagtag"}}]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_queries_boosting.go b/vendor/github.com/olivere/elastic/search_queries_boosting.go new file mode 100644 index 0000000..303bca0 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_boosting.go @@ -0,0 +1,97 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// A boosting query can be used to effectively +// demote results that match a given query. +// For more details, see: +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-boosting-query.html +type BoostingQuery struct { + Query + positiveClause Query + negativeClause Query + negativeBoost *float64 + boost *float64 +} + +// Creates a new boosting query. +func NewBoostingQuery() *BoostingQuery { + return &BoostingQuery{} +} + +func (q *BoostingQuery) Positive(positive Query) *BoostingQuery { + q.positiveClause = positive + return q +} + +func (q *BoostingQuery) Negative(negative Query) *BoostingQuery { + q.negativeClause = negative + return q +} + +func (q *BoostingQuery) NegativeBoost(negativeBoost float64) *BoostingQuery { + q.negativeBoost = &negativeBoost + return q +} + +func (q *BoostingQuery) Boost(boost float64) *BoostingQuery { + q.boost = &boost + return q +} + +// Creates the query source for the boosting query. +func (q *BoostingQuery) Source() (interface{}, error) { + // { + // "boosting" : { + // "positive" : { + // "term" : { + // "field1" : "value1" + // } + // }, + // "negative" : { + // "term" : { + // "field2" : "value2" + // } + // }, + // "negative_boost" : 0.2 + // } + // } + + query := make(map[string]interface{}) + + boostingClause := make(map[string]interface{}) + query["boosting"] = boostingClause + + // Negative and positive clause as well as negative boost + // are mandatory in the Java client. + + // positive + if q.positiveClause != nil { + src, err := q.positiveClause.Source() + if err != nil { + return nil, err + } + boostingClause["positive"] = src + } + + // negative + if q.negativeClause != nil { + src, err := q.negativeClause.Source() + if err != nil { + return nil, err + } + boostingClause["negative"] = src + } + + if q.negativeBoost != nil { + boostingClause["negative_boost"] = *q.negativeBoost + } + + if q.boost != nil { + boostingClause["boost"] = *q.boost + } + + return query, nil +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_boosting_test.go b/vendor/github.com/olivere/elastic/search_queries_boosting_test.go similarity index 82% rename from vendor/gopkg.in/olivere/elastic.v2/search_queries_boosting_test.go rename to vendor/github.com/olivere/elastic/search_queries_boosting_test.go index 31364dc..6c7f263 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_boosting_test.go +++ b/vendor/github.com/olivere/elastic/search_queries_boosting_test.go @@ -1,4 +1,4 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. @@ -14,7 +14,11 @@ func TestBoostingQuery(t *testing.T) { q = q.Positive(NewTermQuery("tag", "wow")) q = q.Negative(NewRangeQuery("age").From(10).To(20)) q = q.NegativeBoost(0.2) - data, err := json.Marshal(q.Source()) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } diff --git a/vendor/github.com/olivere/elastic/search_queries_common_terms.go b/vendor/github.com/olivere/elastic/search_queries_common_terms.go new file mode 100644 index 0000000..d19360e --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_common_terms.go @@ -0,0 +1,137 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// CommonTermsQuery is a modern alternative to stopwords +// which improves the precision and recall of search results +// (by taking stopwords into account), without sacrificing performance. +// For more details, see: +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-common-terms-query.html +type CommonTermsQuery struct { + Query + name string + text interface{} + cutoffFreq *float64 + highFreq *float64 + highFreqOp string + highFreqMinimumShouldMatch string + lowFreq *float64 + lowFreqOp string + lowFreqMinimumShouldMatch string + analyzer string + boost *float64 + queryName string +} + +// NewCommonTermsQuery creates and initializes a new common terms query. +func NewCommonTermsQuery(name string, text interface{}) *CommonTermsQuery { + return &CommonTermsQuery{name: name, text: text} +} + +func (q *CommonTermsQuery) CutoffFrequency(f float64) *CommonTermsQuery { + q.cutoffFreq = &f + return q +} + +func (q *CommonTermsQuery) HighFreq(f float64) *CommonTermsQuery { + q.highFreq = &f + return q +} + +func (q *CommonTermsQuery) HighFreqOperator(op string) *CommonTermsQuery { + q.highFreqOp = op + return q +} + +func (q *CommonTermsQuery) HighFreqMinimumShouldMatch(minShouldMatch string) *CommonTermsQuery { + q.highFreqMinimumShouldMatch = minShouldMatch + return q +} + +func (q *CommonTermsQuery) LowFreq(f float64) *CommonTermsQuery { + q.lowFreq = &f + return q +} + +func (q *CommonTermsQuery) LowFreqOperator(op string) *CommonTermsQuery { + q.lowFreqOp = op + return q +} + +func (q *CommonTermsQuery) LowFreqMinimumShouldMatch(minShouldMatch string) *CommonTermsQuery { + q.lowFreqMinimumShouldMatch = minShouldMatch + return q +} + +func (q *CommonTermsQuery) Analyzer(analyzer string) *CommonTermsQuery { + q.analyzer = analyzer + return q +} + +func (q *CommonTermsQuery) Boost(boost float64) *CommonTermsQuery { + q.boost = &boost + return q +} + +func (q *CommonTermsQuery) QueryName(queryName string) *CommonTermsQuery { + q.queryName = queryName + return q +} + +// Creates the query source for the common query. +func (q *CommonTermsQuery) Source() (interface{}, error) { + // { + // "common": { + // "body": { + // "query": "this is bonsai cool", + // "cutoff_frequency": 0.001 + // } + // } + // } + source := make(map[string]interface{}) + body := make(map[string]interface{}) + query := make(map[string]interface{}) + + source["common"] = body + body[q.name] = query + query["query"] = q.text + + if q.cutoffFreq != nil { + query["cutoff_frequency"] = *q.cutoffFreq + } + if q.highFreq != nil { + query["high_freq"] = *q.highFreq + } + if q.highFreqOp != "" { + query["high_freq_operator"] = q.highFreqOp + } + if q.lowFreq != nil { + query["low_freq"] = *q.lowFreq + } + if q.lowFreqOp != "" { + query["low_freq_operator"] = q.lowFreqOp + } + if q.lowFreqMinimumShouldMatch != "" || q.highFreqMinimumShouldMatch != "" { + mm := make(map[string]interface{}) + if q.lowFreqMinimumShouldMatch != "" { + mm["low_freq"] = q.lowFreqMinimumShouldMatch + } + if q.highFreqMinimumShouldMatch != "" { + mm["high_freq"] = q.highFreqMinimumShouldMatch + } + query["minimum_should_match"] = mm + } + if q.analyzer != "" { + query["analyzer"] = q.analyzer + } + if q.boost != nil { + query["boost"] = *q.boost + } + if q.queryName != "" { + query["_name"] = q.queryName + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_queries_common_terms_test.go b/vendor/github.com/olivere/elastic/search_queries_common_terms_test.go new file mode 100644 index 0000000..e841e77 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_common_terms_test.go @@ -0,0 +1,85 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + _ "net/http" + "testing" +) + +func TestCommonTermsQuery(t *testing.T) { + q := NewCommonTermsQuery("message", "Golang").CutoffFrequency(0.001) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"common":{"message":{"cutoff_frequency":0.001,"query":"Golang"}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSearchQueriesCommonTermsQuery(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} + tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} + tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} + + // Add all documents + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Common terms query + q := NewCommonTermsQuery("message", "Golang") + searchResult, err := client.Search().Index(testIndexName).Query(q).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if searchResult.Hits == nil { + t.Errorf("expected SearchResult.Hits != nil; got nil") + } + if searchResult.Hits.TotalHits != 1 { + t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 1, searchResult.Hits.TotalHits) + } + if len(searchResult.Hits.Hits) != 1 { + t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", 1, len(searchResult.Hits.Hits)) + } + + for _, hit := range searchResult.Hits.Hits { + if hit.Index != testIndexName { + t.Errorf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) + } + item := make(map[string]interface{}) + err := json.Unmarshal(*hit.Source, &item) + if err != nil { + t.Fatal(err) + } + } +} diff --git a/vendor/github.com/olivere/elastic/search_queries_constant_score.go b/vendor/github.com/olivere/elastic/search_queries_constant_score.go new file mode 100644 index 0000000..088e9b5 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_constant_score.go @@ -0,0 +1,59 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// ConstantScoreQuery is a query that wraps a filter and simply returns +// a constant score equal to the query boost for every document in the filter. +// +// For more details, see: +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-constant-score-query.html +type ConstantScoreQuery struct { + filter Query + boost *float64 +} + +// ConstantScoreQuery creates and initializes a new constant score query. +func NewConstantScoreQuery(filter Query) *ConstantScoreQuery { + return &ConstantScoreQuery{ + filter: filter, + } +} + +// Boost sets the boost for this query. Documents matching this query +// will (in addition to the normal weightings) have their score multiplied +// by the boost provided. +func (q *ConstantScoreQuery) Boost(boost float64) *ConstantScoreQuery { + q.boost = &boost + return q +} + +// Source returns the query source. +func (q *ConstantScoreQuery) Source() (interface{}, error) { + // "constant_score" : { + // "filter" : { + // .... + // }, + // "boost" : 1.5 + // } + + query := make(map[string]interface{}) + + params := make(map[string]interface{}) + query["constant_score"] = params + + // filter + src, err := q.filter.Source() + if err != nil { + return nil, err + } + params["filter"] = src + + // boost + if q.boost != nil { + params["boost"] = *q.boost + } + + return query, nil +} diff --git a/vendor/github.com/olivere/elastic/search_queries_constant_score_test.go b/vendor/github.com/olivere/elastic/search_queries_constant_score_test.go new file mode 100644 index 0000000..6508a91 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_constant_score_test.go @@ -0,0 +1,27 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestConstantScoreQuery(t *testing.T) { + q := NewConstantScoreQuery(NewTermQuery("user", "kimchy")).Boost(1.2) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"constant_score":{"boost":1.2,"filter":{"term":{"user":"kimchy"}}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_queries_dis_max.go b/vendor/github.com/olivere/elastic/search_queries_dis_max.go new file mode 100644 index 0000000..8082736 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_dis_max.go @@ -0,0 +1,104 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// DisMaxQuery is a query that generates the union of documents produced by +// its subqueries, and that scores each document with the maximum score +// for that document as produced by any subquery, plus a tie breaking +// increment for any additional matching subqueries. +// +// For more details, see: +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-dis-max-query.html +type DisMaxQuery struct { + queries []Query + boost *float64 + tieBreaker *float64 + queryName string +} + +// NewDisMaxQuery creates and initializes a new dis max query. +func NewDisMaxQuery() *DisMaxQuery { + return &DisMaxQuery{ + queries: make([]Query, 0), + } +} + +// Query adds one or more queries to the dis max query. +func (q *DisMaxQuery) Query(queries ...Query) *DisMaxQuery { + q.queries = append(q.queries, queries...) + return q +} + +// Boost sets the boost for this query. Documents matching this query will +// (in addition to the normal weightings) have their score multiplied by +// the boost provided. +func (q *DisMaxQuery) Boost(boost float64) *DisMaxQuery { + q.boost = &boost + return q +} + +// TieBreaker is the factor by which the score of each non-maximum disjunct +// for a document is multiplied with and added into the final score. +// +// If non-zero, the value should be small, on the order of 0.1, which says +// that 10 occurrences of word in a lower-scored field that is also in a +// higher scored field is just as good as a unique word in the lower scored +// field (i.e., one that is not in any higher scored field). +func (q *DisMaxQuery) TieBreaker(tieBreaker float64) *DisMaxQuery { + q.tieBreaker = &tieBreaker + return q +} + +// QueryName sets the query name for the filter that can be used +// when searching for matched filters per hit. +func (q *DisMaxQuery) QueryName(queryName string) *DisMaxQuery { + q.queryName = queryName + return q +} + +// Source returns the JSON serializable content for this query. +func (q *DisMaxQuery) Source() (interface{}, error) { + // { + // "dis_max" : { + // "tie_breaker" : 0.7, + // "boost" : 1.2, + // "queries" : { + // { + // "term" : { "age" : 34 } + // }, + // { + // "term" : { "age" : 35 } + // } + // ] + // } + // } + + query := make(map[string]interface{}) + params := make(map[string]interface{}) + query["dis_max"] = params + + if q.tieBreaker != nil { + params["tie_breaker"] = *q.tieBreaker + } + if q.boost != nil { + params["boost"] = *q.boost + } + if q.queryName != "" { + params["_name"] = q.queryName + } + + // queries + var clauses []interface{} + for _, subQuery := range q.queries { + src, err := subQuery.Source() + if err != nil { + return nil, err + } + clauses = append(clauses, src) + } + params["queries"] = clauses + + return query, nil +} diff --git a/vendor/github.com/olivere/elastic/search_queries_dis_max_test.go b/vendor/github.com/olivere/elastic/search_queries_dis_max_test.go new file mode 100644 index 0000000..76ddfb0 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_dis_max_test.go @@ -0,0 +1,28 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestDisMaxQuery(t *testing.T) { + q := NewDisMaxQuery() + q = q.Query(NewTermQuery("age", 34), NewTermQuery("age", 35)).Boost(1.2).TieBreaker(0.7) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"dis_max":{"boost":1.2,"queries":[{"term":{"age":34}},{"term":{"age":35}}],"tie_breaker":0.7}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_queries_exists.go b/vendor/github.com/olivere/elastic/search_queries_exists.go new file mode 100644 index 0000000..1a68393 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_exists.go @@ -0,0 +1,49 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// ExistsQuery is a query that only matches on documents that the field +// has a value in them. +// +// For more details, see: +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-exists-query.html +type ExistsQuery struct { + name string + queryName string +} + +// NewExistsQuery creates and initializes a new dis max query. +func NewExistsQuery(name string) *ExistsQuery { + return &ExistsQuery{ + name: name, + } +} + +// QueryName sets the query name for the filter that can be used +// when searching for matched queries per hit. +func (q *ExistsQuery) QueryName(queryName string) *ExistsQuery { + q.queryName = queryName + return q +} + +// Source returns the JSON serializable content for this query. +func (q *ExistsQuery) Source() (interface{}, error) { + // { + // "exists" : { + // "field" : "user" + // } + // } + + query := make(map[string]interface{}) + params := make(map[string]interface{}) + query["exists"] = params + + params["field"] = q.name + if q.queryName != "" { + params["_name"] = q.queryName + } + + return query, nil +} diff --git a/vendor/github.com/olivere/elastic/search_queries_exists_test.go b/vendor/github.com/olivere/elastic/search_queries_exists_test.go new file mode 100644 index 0000000..f2d0470 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_exists_test.go @@ -0,0 +1,27 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestExistsQuery(t *testing.T) { + q := NewExistsQuery("user") + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"exists":{"field":"user"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_queries_fsq.go b/vendor/github.com/olivere/elastic/search_queries_fsq.go new file mode 100644 index 0000000..609472b --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_fsq.go @@ -0,0 +1,171 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// FunctionScoreQuery allows you to modify the score of documents that +// are retrieved by a query. This can be useful if, for example, +// a score function is computationally expensive and it is sufficient +// to compute the score on a filtered set of documents. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-function-score-query.html +type FunctionScoreQuery struct { + query Query + filter Query + boost *float64 + maxBoost *float64 + scoreMode string + boostMode string + filters []Query + scoreFuncs []ScoreFunction + minScore *float64 + weight *float64 +} + +// NewFunctionScoreQuery creates and initializes a new function score query. +func NewFunctionScoreQuery() *FunctionScoreQuery { + return &FunctionScoreQuery{ + filters: make([]Query, 0), + scoreFuncs: make([]ScoreFunction, 0), + } +} + +// Query sets the query for the function score query. +func (q *FunctionScoreQuery) Query(query Query) *FunctionScoreQuery { + q.query = query + return q +} + +// Filter sets the filter for the function score query. +func (q *FunctionScoreQuery) Filter(filter Query) *FunctionScoreQuery { + q.filter = filter + return q +} + +// Add adds a score function that will execute on all the documents +// matching the filter. +func (q *FunctionScoreQuery) Add(filter Query, scoreFunc ScoreFunction) *FunctionScoreQuery { + q.filters = append(q.filters, filter) + q.scoreFuncs = append(q.scoreFuncs, scoreFunc) + return q +} + +// AddScoreFunc adds a score function that will execute the function on all documents. +func (q *FunctionScoreQuery) AddScoreFunc(scoreFunc ScoreFunction) *FunctionScoreQuery { + q.filters = append(q.filters, nil) + q.scoreFuncs = append(q.scoreFuncs, scoreFunc) + return q +} + +// ScoreMode defines how results of individual score functions will be aggregated. +// Can be first, avg, max, sum, min, or multiply. +func (q *FunctionScoreQuery) ScoreMode(scoreMode string) *FunctionScoreQuery { + q.scoreMode = scoreMode + return q +} + +// BoostMode defines how the combined result of score functions will +// influence the final score together with the sub query score. +func (q *FunctionScoreQuery) BoostMode(boostMode string) *FunctionScoreQuery { + q.boostMode = boostMode + return q +} + +// MaxBoost is the maximum boost that will be applied by function score. +func (q *FunctionScoreQuery) MaxBoost(maxBoost float64) *FunctionScoreQuery { + q.maxBoost = &maxBoost + return q +} + +// Boost sets the boost for this query. Documents matching this query will +// (in addition to the normal weightings) have their score multiplied by the +// boost provided. +func (q *FunctionScoreQuery) Boost(boost float64) *FunctionScoreQuery { + q.boost = &boost + return q +} + +// MinScore sets the minimum score. +func (q *FunctionScoreQuery) MinScore(minScore float64) *FunctionScoreQuery { + q.minScore = &minScore + return q +} + +// Source returns JSON for the function score query. +func (q *FunctionScoreQuery) Source() (interface{}, error) { + source := make(map[string]interface{}) + query := make(map[string]interface{}) + source["function_score"] = query + + if q.query != nil { + src, err := q.query.Source() + if err != nil { + return nil, err + } + query["query"] = src + } + if q.filter != nil { + src, err := q.filter.Source() + if err != nil { + return nil, err + } + query["filter"] = src + } + + if len(q.filters) == 1 && q.filters[0] == nil { + // Weight needs to be serialized on this level. + if weight := q.scoreFuncs[0].GetWeight(); weight != nil { + query["weight"] = weight + } + // Serialize the score function + src, err := q.scoreFuncs[0].Source() + if err != nil { + return nil, err + } + query[q.scoreFuncs[0].Name()] = src + } else { + funcs := make([]interface{}, len(q.filters)) + for i, filter := range q.filters { + hsh := make(map[string]interface{}) + if filter != nil { + src, err := filter.Source() + if err != nil { + return nil, err + } + hsh["filter"] = src + } + // Weight needs to be serialized on this level. + if weight := q.scoreFuncs[i].GetWeight(); weight != nil { + hsh["weight"] = weight + } + // Serialize the score function + src, err := q.scoreFuncs[i].Source() + if err != nil { + return nil, err + } + hsh[q.scoreFuncs[i].Name()] = src + funcs[i] = hsh + } + query["functions"] = funcs + } + + if q.scoreMode != "" { + query["score_mode"] = q.scoreMode + } + if q.boostMode != "" { + query["boost_mode"] = q.boostMode + } + if q.maxBoost != nil { + query["max_boost"] = *q.maxBoost + } + if q.boost != nil { + query["boost"] = *q.boost + } + if q.minScore != nil { + query["min_score"] = *q.minScore + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_queries_fsq_score_funcs.go b/vendor/github.com/olivere/elastic/search_queries_fsq_score_funcs.go new file mode 100644 index 0000000..6e86cb4 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_fsq_score_funcs.go @@ -0,0 +1,582 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "strings" +) + +// ScoreFunction is used in combination with the Function Score Query. +type ScoreFunction interface { + Name() string + GetWeight() *float64 // returns the weight which must be serialized at the level of FunctionScoreQuery + Source() (interface{}, error) +} + +// -- Exponential Decay -- + +// ExponentialDecayFunction builds an exponential decay score function. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-function-score-query.html +// for details. +type ExponentialDecayFunction struct { + fieldName string + origin interface{} + scale interface{} + decay *float64 + offset interface{} + multiValueMode string + weight *float64 +} + +// NewExponentialDecayFunction creates a new ExponentialDecayFunction. +func NewExponentialDecayFunction() *ExponentialDecayFunction { + return &ExponentialDecayFunction{} +} + +// Name represents the JSON field name under which the output of Source +// needs to be serialized by FunctionScoreQuery (see FunctionScoreQuery.Source). +func (fn *ExponentialDecayFunction) Name() string { + return "exp" +} + +// FieldName specifies the name of the field to which this decay function is applied to. +func (fn *ExponentialDecayFunction) FieldName(fieldName string) *ExponentialDecayFunction { + fn.fieldName = fieldName + return fn +} + +// Origin defines the "central point" by which the decay function calculates +// "distance". +func (fn *ExponentialDecayFunction) Origin(origin interface{}) *ExponentialDecayFunction { + fn.origin = origin + return fn +} + +// Scale defines the scale to be used with Decay. +func (fn *ExponentialDecayFunction) Scale(scale interface{}) *ExponentialDecayFunction { + fn.scale = scale + return fn +} + +// Decay defines how documents are scored at the distance given a Scale. +// If no decay is defined, documents at the distance Scale will be scored 0.5. +func (fn *ExponentialDecayFunction) Decay(decay float64) *ExponentialDecayFunction { + fn.decay = &decay + return fn +} + +// Offset, if defined, computes the decay function only for a distance +// greater than the defined offset. +func (fn *ExponentialDecayFunction) Offset(offset interface{}) *ExponentialDecayFunction { + fn.offset = offset + return fn +} + +// Weight adjusts the score of the score function. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-function-score-query.html#_using_function_score +// for details. +func (fn *ExponentialDecayFunction) Weight(weight float64) *ExponentialDecayFunction { + fn.weight = &weight + return fn +} + +// GetWeight returns the adjusted score. It is part of the ScoreFunction interface. +// Returns nil if weight is not specified. +func (fn *ExponentialDecayFunction) GetWeight() *float64 { + return fn.weight +} + +// MultiValueMode specifies how the decay function should be calculated +// on a field that has multiple values. +// Valid modes are: min, max, avg, and sum. +func (fn *ExponentialDecayFunction) MultiValueMode(mode string) *ExponentialDecayFunction { + fn.multiValueMode = mode + return fn +} + +// Source returns the serializable JSON data of this score function. +func (fn *ExponentialDecayFunction) Source() (interface{}, error) { + source := make(map[string]interface{}) + params := make(map[string]interface{}) + source[fn.fieldName] = params + if fn.origin != nil { + params["origin"] = fn.origin + } + params["scale"] = fn.scale + if fn.decay != nil && *fn.decay > 0 { + params["decay"] = *fn.decay + } + if fn.offset != nil { + params["offset"] = fn.offset + } + if fn.multiValueMode != "" { + source["multi_value_mode"] = fn.multiValueMode + } + return source, nil +} + +// -- Gauss Decay -- + +// GaussDecayFunction builds a gauss decay score function. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-function-score-query.html +// for details. +type GaussDecayFunction struct { + fieldName string + origin interface{} + scale interface{} + decay *float64 + offset interface{} + multiValueMode string + weight *float64 +} + +// NewGaussDecayFunction returns a new GaussDecayFunction. +func NewGaussDecayFunction() *GaussDecayFunction { + return &GaussDecayFunction{} +} + +// Name represents the JSON field name under which the output of Source +// needs to be serialized by FunctionScoreQuery (see FunctionScoreQuery.Source). +func (fn *GaussDecayFunction) Name() string { + return "gauss" +} + +// FieldName specifies the name of the field to which this decay function is applied to. +func (fn *GaussDecayFunction) FieldName(fieldName string) *GaussDecayFunction { + fn.fieldName = fieldName + return fn +} + +// Origin defines the "central point" by which the decay function calculates +// "distance". +func (fn *GaussDecayFunction) Origin(origin interface{}) *GaussDecayFunction { + fn.origin = origin + return fn +} + +// Scale defines the scale to be used with Decay. +func (fn *GaussDecayFunction) Scale(scale interface{}) *GaussDecayFunction { + fn.scale = scale + return fn +} + +// Decay defines how documents are scored at the distance given a Scale. +// If no decay is defined, documents at the distance Scale will be scored 0.5. +func (fn *GaussDecayFunction) Decay(decay float64) *GaussDecayFunction { + fn.decay = &decay + return fn +} + +// Offset, if defined, computes the decay function only for a distance +// greater than the defined offset. +func (fn *GaussDecayFunction) Offset(offset interface{}) *GaussDecayFunction { + fn.offset = offset + return fn +} + +// Weight adjusts the score of the score function. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-function-score-query.html#_using_function_score +// for details. +func (fn *GaussDecayFunction) Weight(weight float64) *GaussDecayFunction { + fn.weight = &weight + return fn +} + +// GetWeight returns the adjusted score. It is part of the ScoreFunction interface. +// Returns nil if weight is not specified. +func (fn *GaussDecayFunction) GetWeight() *float64 { + return fn.weight +} + +// MultiValueMode specifies how the decay function should be calculated +// on a field that has multiple values. +// Valid modes are: min, max, avg, and sum. +func (fn *GaussDecayFunction) MultiValueMode(mode string) *GaussDecayFunction { + fn.multiValueMode = mode + return fn +} + +// Source returns the serializable JSON data of this score function. +func (fn *GaussDecayFunction) Source() (interface{}, error) { + source := make(map[string]interface{}) + params := make(map[string]interface{}) + source[fn.fieldName] = params + if fn.origin != nil { + params["origin"] = fn.origin + } + params["scale"] = fn.scale + if fn.decay != nil && *fn.decay > 0 { + params["decay"] = *fn.decay + } + if fn.offset != nil { + params["offset"] = fn.offset + } + if fn.multiValueMode != "" { + source["multi_value_mode"] = fn.multiValueMode + } + // Notice that the weight has to be serialized in FunctionScoreQuery. + return source, nil +} + +// -- Linear Decay -- + +// LinearDecayFunction builds a linear decay score function. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-function-score-query.html +// for details. +type LinearDecayFunction struct { + fieldName string + origin interface{} + scale interface{} + decay *float64 + offset interface{} + multiValueMode string + weight *float64 +} + +// NewLinearDecayFunction initializes and returns a new LinearDecayFunction. +func NewLinearDecayFunction() *LinearDecayFunction { + return &LinearDecayFunction{} +} + +// Name represents the JSON field name under which the output of Source +// needs to be serialized by FunctionScoreQuery (see FunctionScoreQuery.Source). +func (fn *LinearDecayFunction) Name() string { + return "linear" +} + +// FieldName specifies the name of the field to which this decay function is applied to. +func (fn *LinearDecayFunction) FieldName(fieldName string) *LinearDecayFunction { + fn.fieldName = fieldName + return fn +} + +// Origin defines the "central point" by which the decay function calculates +// "distance". +func (fn *LinearDecayFunction) Origin(origin interface{}) *LinearDecayFunction { + fn.origin = origin + return fn +} + +// Scale defines the scale to be used with Decay. +func (fn *LinearDecayFunction) Scale(scale interface{}) *LinearDecayFunction { + fn.scale = scale + return fn +} + +// Decay defines how documents are scored at the distance given a Scale. +// If no decay is defined, documents at the distance Scale will be scored 0.5. +func (fn *LinearDecayFunction) Decay(decay float64) *LinearDecayFunction { + fn.decay = &decay + return fn +} + +// Offset, if defined, computes the decay function only for a distance +// greater than the defined offset. +func (fn *LinearDecayFunction) Offset(offset interface{}) *LinearDecayFunction { + fn.offset = offset + return fn +} + +// Weight adjusts the score of the score function. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-function-score-query.html#_using_function_score +// for details. +func (fn *LinearDecayFunction) Weight(weight float64) *LinearDecayFunction { + fn.weight = &weight + return fn +} + +// GetWeight returns the adjusted score. It is part of the ScoreFunction interface. +// Returns nil if weight is not specified. +func (fn *LinearDecayFunction) GetWeight() *float64 { + return fn.weight +} + +// MultiValueMode specifies how the decay function should be calculated +// on a field that has multiple values. +// Valid modes are: min, max, avg, and sum. +func (fn *LinearDecayFunction) MultiValueMode(mode string) *LinearDecayFunction { + fn.multiValueMode = mode + return fn +} + +// GetMultiValueMode returns how the decay function should be calculated +// on a field that has multiple values. +// Valid modes are: min, max, avg, and sum. +func (fn *LinearDecayFunction) GetMultiValueMode() string { + return fn.multiValueMode +} + +// Source returns the serializable JSON data of this score function. +func (fn *LinearDecayFunction) Source() (interface{}, error) { + source := make(map[string]interface{}) + params := make(map[string]interface{}) + source[fn.fieldName] = params + if fn.origin != nil { + params["origin"] = fn.origin + } + params["scale"] = fn.scale + if fn.decay != nil && *fn.decay > 0 { + params["decay"] = *fn.decay + } + if fn.offset != nil { + params["offset"] = fn.offset + } + if fn.multiValueMode != "" { + source["multi_value_mode"] = fn.multiValueMode + } + // Notice that the weight has to be serialized in FunctionScoreQuery. + return source, nil +} + +// -- Script -- + +// ScriptFunction builds a script score function. It uses a script to +// compute or influence the score of documents that match with the inner +// query or filter. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-function-score-query.html#_script_score +// for details. +type ScriptFunction struct { + script *Script + weight *float64 +} + +// NewScriptFunction initializes and returns a new ScriptFunction. +func NewScriptFunction(script *Script) *ScriptFunction { + return &ScriptFunction{ + script: script, + } +} + +// Name represents the JSON field name under which the output of Source +// needs to be serialized by FunctionScoreQuery (see FunctionScoreQuery.Source). +func (fn *ScriptFunction) Name() string { + return "script_score" +} + +// Script specifies the script to be executed. +func (fn *ScriptFunction) Script(script *Script) *ScriptFunction { + fn.script = script + return fn +} + +// Weight adjusts the score of the score function. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-function-score-query.html#_using_function_score +// for details. +func (fn *ScriptFunction) Weight(weight float64) *ScriptFunction { + fn.weight = &weight + return fn +} + +// GetWeight returns the adjusted score. It is part of the ScoreFunction interface. +// Returns nil if weight is not specified. +func (fn *ScriptFunction) GetWeight() *float64 { + return fn.weight +} + +// Source returns the serializable JSON data of this score function. +func (fn *ScriptFunction) Source() (interface{}, error) { + source := make(map[string]interface{}) + if fn.script != nil { + src, err := fn.script.Source() + if err != nil { + return nil, err + } + source["script"] = src + } + // Notice that the weight has to be serialized in FunctionScoreQuery. + return source, nil +} + +// -- Field value factor -- + +// FieldValueFactorFunction is a function score function that allows you +// to use a field from a document to influence the score. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-function-score-query.html#_field_value_factor. +type FieldValueFactorFunction struct { + field string + factor *float64 + missing *float64 + weight *float64 + modifier string +} + +// NewFieldValueFactorFunction initializes and returns a new FieldValueFactorFunction. +func NewFieldValueFactorFunction() *FieldValueFactorFunction { + return &FieldValueFactorFunction{} +} + +// Name represents the JSON field name under which the output of Source +// needs to be serialized by FunctionScoreQuery (see FunctionScoreQuery.Source). +func (fn *FieldValueFactorFunction) Name() string { + return "field_value_factor" +} + +// Field is the field to be extracted from the document. +func (fn *FieldValueFactorFunction) Field(field string) *FieldValueFactorFunction { + fn.field = field + return fn +} + +// Factor is the (optional) factor to multiply the field with. If you do not +// specify a factor, the default is 1. +func (fn *FieldValueFactorFunction) Factor(factor float64) *FieldValueFactorFunction { + fn.factor = &factor + return fn +} + +// Modifier to apply to the field value. It can be one of: none, log, log1p, +// log2p, ln, ln1p, ln2p, square, sqrt, or reciprocal. Defaults to: none. +func (fn *FieldValueFactorFunction) Modifier(modifier string) *FieldValueFactorFunction { + fn.modifier = modifier + return fn +} + +// Weight adjusts the score of the score function. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-function-score-query.html#_using_function_score +// for details. +func (fn *FieldValueFactorFunction) Weight(weight float64) *FieldValueFactorFunction { + fn.weight = &weight + return fn +} + +// GetWeight returns the adjusted score. It is part of the ScoreFunction interface. +// Returns nil if weight is not specified. +func (fn *FieldValueFactorFunction) GetWeight() *float64 { + return fn.weight +} + +// Missing is used if a document does not have that field. +func (fn *FieldValueFactorFunction) Missing(missing float64) *FieldValueFactorFunction { + fn.missing = &missing + return fn +} + +// Source returns the serializable JSON data of this score function. +func (fn *FieldValueFactorFunction) Source() (interface{}, error) { + source := make(map[string]interface{}) + if fn.field != "" { + source["field"] = fn.field + } + if fn.factor != nil { + source["factor"] = *fn.factor + } + if fn.missing != nil { + source["missing"] = *fn.missing + } + if fn.modifier != "" { + source["modifier"] = strings.ToLower(fn.modifier) + } + // Notice that the weight has to be serialized in FunctionScoreQuery. + return source, nil +} + +// -- Weight Factor -- + +// WeightFactorFunction builds a weight factor function that multiplies +// the weight to the score. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-function-score-query.html#_weight +// for details. +type WeightFactorFunction struct { + weight float64 +} + +// NewWeightFactorFunction initializes and returns a new WeightFactorFunction. +func NewWeightFactorFunction(weight float64) *WeightFactorFunction { + return &WeightFactorFunction{weight: weight} +} + +// Name represents the JSON field name under which the output of Source +// needs to be serialized by FunctionScoreQuery (see FunctionScoreQuery.Source). +func (fn *WeightFactorFunction) Name() string { + return "weight" +} + +// Weight adjusts the score of the score function. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-function-score-query.html#_using_function_score +// for details. +func (fn *WeightFactorFunction) Weight(weight float64) *WeightFactorFunction { + fn.weight = weight + return fn +} + +// GetWeight returns the adjusted score. It is part of the ScoreFunction interface. +// Returns nil if weight is not specified. +func (fn *WeightFactorFunction) GetWeight() *float64 { + return &fn.weight +} + +// Source returns the serializable JSON data of this score function. +func (fn *WeightFactorFunction) Source() (interface{}, error) { + // Notice that the weight has to be serialized in FunctionScoreQuery. + return fn.weight, nil +} + +// -- Random -- + +// RandomFunction builds a random score function. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-function-score-query.html#_random +// for details. +type RandomFunction struct { + field string + seed interface{} + weight *float64 +} + +// NewRandomFunction initializes and returns a new RandomFunction. +func NewRandomFunction() *RandomFunction { + return &RandomFunction{} +} + +// Name represents the JSON field name under which the output of Source +// needs to be serialized by FunctionScoreQuery (see FunctionScoreQuery.Source). +func (fn *RandomFunction) Name() string { + return "random_score" +} + +// Field is the field to be used for random number generation. +// This parameter is compulsory when a Seed is set and ignored +// otherwise. Note that documents that have the same value for a +// field will get the same score. +func (fn *RandomFunction) Field(field string) *RandomFunction { + fn.field = field + return fn +} + +// Seed sets the seed based on which the random number will be generated. +// Using the same seed is guaranteed to generate the same random number for a specific doc. +// Seed must be an integer, e.g. int or int64. It is specified as an interface{} +// here for compatibility with older versions (which also accepted strings). +func (fn *RandomFunction) Seed(seed interface{}) *RandomFunction { + fn.seed = seed + return fn +} + +// Weight adjusts the score of the score function. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-function-score-query.html#_using_function_score +// for details. +func (fn *RandomFunction) Weight(weight float64) *RandomFunction { + fn.weight = &weight + return fn +} + +// GetWeight returns the adjusted score. It is part of the ScoreFunction interface. +// Returns nil if weight is not specified. +func (fn *RandomFunction) GetWeight() *float64 { + return fn.weight +} + +// Source returns the serializable JSON data of this score function. +func (fn *RandomFunction) Source() (interface{}, error) { + source := make(map[string]interface{}) + if fn.field != "" { + source["field"] = fn.field + } + if fn.seed != nil { + source["seed"] = fn.seed + } + // Notice that the weight has to be serialized in FunctionScoreQuery. + return source, nil +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_fsq_test.go b/vendor/github.com/olivere/elastic/search_queries_fsq_test.go similarity index 75% rename from vendor/gopkg.in/olivere/elastic.v2/search_queries_fsq_test.go rename to vendor/github.com/olivere/elastic/search_queries_fsq_test.go index d0c0714..91d1d84 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_fsq_test.go +++ b/vendor/github.com/olivere/elastic/search_queries_fsq_test.go @@ -1,4 +1,4 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. @@ -12,18 +12,22 @@ import ( func TestFunctionScoreQuery(t *testing.T) { q := NewFunctionScoreQuery(). Query(NewTermQuery("name.last", "banon")). - Add(NewTermFilter("name.last", "banon"), NewFactorFunction().BoostFactor(3)). - AddScoreFunc(NewFactorFunction().BoostFactor(3)). - AddScoreFunc(NewFactorFunction().BoostFactor(3)). + Add(NewTermQuery("name.last", "banon"), NewWeightFactorFunction(1.5)). + AddScoreFunc(NewWeightFactorFunction(3)). + AddScoreFunc(NewRandomFunction().Field("_seq_no").Seed(10)). Boost(3). MaxBoost(10). ScoreMode("avg") - data, err := json.Marshal(q.Source()) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } got := string(data) - expected := `{"function_score":{"boost":3,"functions":[{"boost_factor":3,"filter":{"term":{"name.last":"banon"}}},{"boost_factor":3},{"boost_factor":3}],"max_boost":10,"query":{"term":{"name.last":"banon"}},"score_mode":"avg"}}` + expected := `{"function_score":{"boost":3,"functions":[{"filter":{"term":{"name.last":"banon"}},"weight":1.5},{"weight":3},{"random_score":{"field":"_seq_no","seed":10}}],"max_boost":10,"query":{"term":{"name.last":"banon"}},"score_mode":"avg"}}` if got != expected { t.Errorf("expected\n%s\n,got:\n%s", expected, got) } @@ -37,7 +41,11 @@ func TestFunctionScoreQueryWithNilFilter(t *testing.T) { MaxBoost(12.0). BoostMode("multiply"). ScoreMode("max") - data, err := json.Marshal(q.Source()) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } @@ -56,7 +64,11 @@ func TestFieldValueFactor(t *testing.T) { MaxBoost(12.0). BoostMode("multiply"). ScoreMode("max") - data, err := json.Marshal(q.Source()) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } @@ -75,7 +87,11 @@ func TestFieldValueFactorWithWeight(t *testing.T) { MaxBoost(12.0). BoostMode("multiply"). ScoreMode("max") - data, err := json.Marshal(q.Source()) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } @@ -90,18 +106,22 @@ func TestFieldValueFactorWithMultipleScoreFuncsAndWeights(t *testing.T) { q := NewFunctionScoreQuery(). Query(NewTermQuery("name.last", "banon")). AddScoreFunc(NewFieldValueFactorFunction().Modifier("sqrt").Factor(2).Field("income").Weight(2.5)). - AddScoreFunc(NewScriptFunction("_score * doc['my_numeric_field'].value").Weight(1.25)). + AddScoreFunc(NewScriptFunction(NewScript("_score * doc['my_numeric_field'].value")).Weight(1.25)). AddScoreFunc(NewWeightFactorFunction(0.5)). Boost(2.0). MaxBoost(12.0). BoostMode("multiply"). ScoreMode("max") - data, err := json.Marshal(q.Source()) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } got := string(data) - expected := `{"function_score":{"boost":2,"boost_mode":"multiply","functions":[{"field_value_factor":{"factor":2,"field":"income","modifier":"sqrt"},"weight":2.5},{"script_score":{"script":"_score * doc['my_numeric_field'].value"},"weight":1.25},{"weight":0.5}],"max_boost":12,"query":{"term":{"name.last":"banon"}},"score_mode":"max"}}` + expected := `{"function_score":{"boost":2,"boost_mode":"multiply","functions":[{"field_value_factor":{"factor":2,"field":"income","modifier":"sqrt"},"weight":2.5},{"script_score":{"script":{"source":"_score * doc['my_numeric_field'].value"}},"weight":1.25},{"weight":0.5}],"max_boost":12,"query":{"term":{"name.last":"banon"}},"score_mode":"max"}}` if got != expected { t.Errorf("expected\n%s\n,got:\n%s", expected, got) } @@ -111,7 +131,11 @@ func TestFunctionScoreQueryWithGaussScoreFunc(t *testing.T) { q := NewFunctionScoreQuery(). Query(NewTermQuery("name.last", "banon")). AddScoreFunc(NewGaussDecayFunction().FieldName("pin.location").Origin("11, 12").Scale("2km").Offset("0km").Decay(0.33)) - data, err := json.Marshal(q.Source()) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } @@ -126,7 +150,11 @@ func TestFunctionScoreQueryWithGaussScoreFuncAndMultiValueMode(t *testing.T) { q := NewFunctionScoreQuery(). Query(NewTermQuery("name.last", "banon")). AddScoreFunc(NewGaussDecayFunction().FieldName("pin.location").Origin("11, 12").Scale("2km").Offset("0km").Decay(0.33).MultiValueMode("avg")) - data, err := json.Marshal(q.Source()) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } diff --git a/vendor/github.com/olivere/elastic/search_queries_fuzzy.go b/vendor/github.com/olivere/elastic/search_queries_fuzzy.go new file mode 100644 index 0000000..68b48c1 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_fuzzy.go @@ -0,0 +1,120 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// FuzzyQuery uses similarity based on Levenshtein edit distance for +// string fields, and a +/- margin on numeric and date fields. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-fuzzy-query.html +type FuzzyQuery struct { + name string + value interface{} + boost *float64 + fuzziness interface{} + prefixLength *int + maxExpansions *int + transpositions *bool + rewrite string + queryName string +} + +// NewFuzzyQuery creates a new fuzzy query. +func NewFuzzyQuery(name string, value interface{}) *FuzzyQuery { + q := &FuzzyQuery{ + name: name, + value: value, + } + return q +} + +// Boost sets the boost for this query. Documents matching this query will +// (in addition to the normal weightings) have their score multiplied by +// the boost provided. +func (q *FuzzyQuery) Boost(boost float64) *FuzzyQuery { + q.boost = &boost + return q +} + +// Fuzziness can be an integer/long like 0, 1 or 2 as well as strings +// like "auto", "0..1", "1..4" or "0.0..1.0". +func (q *FuzzyQuery) Fuzziness(fuzziness interface{}) *FuzzyQuery { + q.fuzziness = fuzziness + return q +} + +func (q *FuzzyQuery) PrefixLength(prefixLength int) *FuzzyQuery { + q.prefixLength = &prefixLength + return q +} + +func (q *FuzzyQuery) MaxExpansions(maxExpansions int) *FuzzyQuery { + q.maxExpansions = &maxExpansions + return q +} + +func (q *FuzzyQuery) Transpositions(transpositions bool) *FuzzyQuery { + q.transpositions = &transpositions + return q +} + +func (q *FuzzyQuery) Rewrite(rewrite string) *FuzzyQuery { + q.rewrite = rewrite + return q +} + +// QueryName sets the query name for the filter that can be used when +// searching for matched filters per hit. +func (q *FuzzyQuery) QueryName(queryName string) *FuzzyQuery { + q.queryName = queryName + return q +} + +// Source returns JSON for the function score query. +func (q *FuzzyQuery) Source() (interface{}, error) { + // { + // "fuzzy" : { + // "user" : { + // "value" : "ki", + // "boost" : 1.0, + // "fuzziness" : 2, + // "prefix_length" : 0, + // "max_expansions" : 100 + // } + // } + + source := make(map[string]interface{}) + query := make(map[string]interface{}) + source["fuzzy"] = query + + fq := make(map[string]interface{}) + query[q.name] = fq + + fq["value"] = q.value + + if q.boost != nil { + fq["boost"] = *q.boost + } + if q.transpositions != nil { + fq["transpositions"] = *q.transpositions + } + if q.fuzziness != nil { + fq["fuzziness"] = q.fuzziness + } + if q.prefixLength != nil { + fq["prefix_length"] = *q.prefixLength + } + if q.maxExpansions != nil { + fq["max_expansions"] = *q.maxExpansions + } + if q.rewrite != "" { + fq["rewrite"] = q.rewrite + } + if q.queryName != "" { + fq["_name"] = q.queryName + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_queries_fuzzy_test.go b/vendor/github.com/olivere/elastic/search_queries_fuzzy_test.go new file mode 100644 index 0000000..89140ca --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_fuzzy_test.go @@ -0,0 +1,27 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestFuzzyQuery(t *testing.T) { + q := NewFuzzyQuery("user", "ki").Boost(1.5).Fuzziness(2).PrefixLength(0).MaxExpansions(100) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"fuzzy":{"user":{"boost":1.5,"fuzziness":2,"max_expansions":100,"prefix_length":0,"value":"ki"}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_queries_geo_bounding_box.go b/vendor/github.com/olivere/elastic/search_queries_geo_bounding_box.go new file mode 100644 index 0000000..1cd6bda --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_geo_bounding_box.go @@ -0,0 +1,121 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import "errors" + +// GeoBoundingBoxQuery allows to filter hits based on a point location using +// a bounding box. +// +// For more details, see: +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-geo-bounding-box-query.html +type GeoBoundingBoxQuery struct { + name string + top *float64 + left *float64 + bottom *float64 + right *float64 + typ string + queryName string +} + +// NewGeoBoundingBoxQuery creates and initializes a new GeoBoundingBoxQuery. +func NewGeoBoundingBoxQuery(name string) *GeoBoundingBoxQuery { + return &GeoBoundingBoxQuery{ + name: name, + } +} + +func (q *GeoBoundingBoxQuery) TopLeft(top, left float64) *GeoBoundingBoxQuery { + q.top = &top + q.left = &left + return q +} + +func (q *GeoBoundingBoxQuery) TopLeftFromGeoPoint(point *GeoPoint) *GeoBoundingBoxQuery { + return q.TopLeft(point.Lat, point.Lon) +} + +func (q *GeoBoundingBoxQuery) BottomRight(bottom, right float64) *GeoBoundingBoxQuery { + q.bottom = &bottom + q.right = &right + return q +} + +func (q *GeoBoundingBoxQuery) BottomRightFromGeoPoint(point *GeoPoint) *GeoBoundingBoxQuery { + return q.BottomRight(point.Lat, point.Lon) +} + +func (q *GeoBoundingBoxQuery) BottomLeft(bottom, left float64) *GeoBoundingBoxQuery { + q.bottom = &bottom + q.left = &left + return q +} + +func (q *GeoBoundingBoxQuery) BottomLeftFromGeoPoint(point *GeoPoint) *GeoBoundingBoxQuery { + return q.BottomLeft(point.Lat, point.Lon) +} + +func (q *GeoBoundingBoxQuery) TopRight(top, right float64) *GeoBoundingBoxQuery { + q.top = &top + q.right = &right + return q +} + +func (q *GeoBoundingBoxQuery) TopRightFromGeoPoint(point *GeoPoint) *GeoBoundingBoxQuery { + return q.TopRight(point.Lat, point.Lon) +} + +// Type sets the type of executing the geo bounding box. It can be either +// memory or indexed. It defaults to memory. +func (q *GeoBoundingBoxQuery) Type(typ string) *GeoBoundingBoxQuery { + q.typ = typ + return q +} + +func (q *GeoBoundingBoxQuery) QueryName(queryName string) *GeoBoundingBoxQuery { + q.queryName = queryName + return q +} + +// Source returns JSON for the function score query. +func (q *GeoBoundingBoxQuery) Source() (interface{}, error) { + // { + // "geo_bounding_box" : { + // ... + // } + // } + + if q.top == nil { + return nil, errors.New("geo_bounding_box requires top latitude to be set") + } + if q.bottom == nil { + return nil, errors.New("geo_bounding_box requires bottom latitude to be set") + } + if q.right == nil { + return nil, errors.New("geo_bounding_box requires right longitude to be set") + } + if q.left == nil { + return nil, errors.New("geo_bounding_box requires left longitude to be set") + } + + source := make(map[string]interface{}) + params := make(map[string]interface{}) + source["geo_bounding_box"] = params + + box := make(map[string]interface{}) + box["top_left"] = []float64{*q.left, *q.top} + box["bottom_right"] = []float64{*q.right, *q.bottom} + params[q.name] = box + + if q.typ != "" { + params["type"] = q.typ + } + if q.queryName != "" { + params["_name"] = q.queryName + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_queries_geo_bounding_box_test.go b/vendor/github.com/olivere/elastic/search_queries_geo_bounding_box_test.go new file mode 100644 index 0000000..f44a236 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_geo_bounding_box_test.go @@ -0,0 +1,63 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestGeoBoundingBoxQueryIncomplete(t *testing.T) { + q := NewGeoBoundingBoxQuery("pin.location") + q = q.TopLeft(40.73, -74.1) + // no bottom and no right here + q = q.Type("memory") + src, err := q.Source() + if err == nil { + t.Fatal("expected error") + } + if src != nil { + t.Fatal("expected empty source") + } +} + +func TestGeoBoundingBoxQuery(t *testing.T) { + q := NewGeoBoundingBoxQuery("pin.location") + q = q.TopLeft(40.73, -74.1) + q = q.BottomRight(40.01, -71.12) + q = q.Type("memory") + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"geo_bounding_box":{"pin.location":{"bottom_right":[-71.12,40.01],"top_left":[-74.1,40.73]},"type":"memory"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestGeoBoundingBoxQueryWithGeoPoint(t *testing.T) { + q := NewGeoBoundingBoxQuery("pin.location") + q = q.TopLeftFromGeoPoint(GeoPointFromLatLon(40.73, -74.1)) + q = q.BottomRightFromGeoPoint(GeoPointFromLatLon(40.01, -71.12)) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"geo_bounding_box":{"pin.location":{"bottom_right":[-71.12,40.01],"top_left":[-74.1,40.73]}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_queries_geo_distance.go b/vendor/github.com/olivere/elastic/search_queries_geo_distance.go new file mode 100644 index 0000000..5c5d5fa --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_geo_distance.go @@ -0,0 +1,107 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// GeoDistanceQuery filters documents that include only hits that exists +// within a specific distance from a geo point. +// +// For more details, see: +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-geo-distance-query.html +type GeoDistanceQuery struct { + name string + distance string + lat float64 + lon float64 + geohash string + distanceType string + queryName string +} + +// NewGeoDistanceQuery creates and initializes a new GeoDistanceQuery. +func NewGeoDistanceQuery(name string) *GeoDistanceQuery { + return &GeoDistanceQuery{name: name} +} + +func (q *GeoDistanceQuery) GeoPoint(point *GeoPoint) *GeoDistanceQuery { + q.lat = point.Lat + q.lon = point.Lon + return q +} + +func (q *GeoDistanceQuery) Point(lat, lon float64) *GeoDistanceQuery { + q.lat = lat + q.lon = lon + return q +} + +func (q *GeoDistanceQuery) Lat(lat float64) *GeoDistanceQuery { + q.lat = lat + return q +} + +func (q *GeoDistanceQuery) Lon(lon float64) *GeoDistanceQuery { + q.lon = lon + return q +} + +func (q *GeoDistanceQuery) GeoHash(geohash string) *GeoDistanceQuery { + q.geohash = geohash + return q +} + +func (q *GeoDistanceQuery) Distance(distance string) *GeoDistanceQuery { + q.distance = distance + return q +} + +func (q *GeoDistanceQuery) DistanceType(distanceType string) *GeoDistanceQuery { + q.distanceType = distanceType + return q +} + +func (q *GeoDistanceQuery) QueryName(queryName string) *GeoDistanceQuery { + q.queryName = queryName + return q +} + +// Source returns JSON for the function score query. +func (q *GeoDistanceQuery) Source() (interface{}, error) { + // { + // "geo_distance" : { + // "distance" : "200km", + // "pin.location" : { + // "lat" : 40, + // "lon" : -70 + // } + // } + // } + + source := make(map[string]interface{}) + + params := make(map[string]interface{}) + + if q.geohash != "" { + params[q.name] = q.geohash + } else { + location := make(map[string]interface{}) + location["lat"] = q.lat + location["lon"] = q.lon + params[q.name] = location + } + + if q.distance != "" { + params["distance"] = q.distance + } + if q.distanceType != "" { + params["distance_type"] = q.distanceType + } + if q.queryName != "" { + params["_name"] = q.queryName + } + + source["geo_distance"] = params + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_queries_geo_distance_test.go b/vendor/github.com/olivere/elastic/search_queries_geo_distance_test.go new file mode 100644 index 0000000..dd16957 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_geo_distance_test.go @@ -0,0 +1,69 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestGeoDistanceQuery(t *testing.T) { + q := NewGeoDistanceQuery("pin.location") + q = q.Lat(40) + q = q.Lon(-70) + q = q.Distance("200km") + q = q.DistanceType("plane") + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"geo_distance":{"distance":"200km","distance_type":"plane","pin.location":{"lat":40,"lon":-70}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestGeoDistanceQueryWithGeoPoint(t *testing.T) { + q := NewGeoDistanceQuery("pin.location") + q = q.GeoPoint(GeoPointFromLatLon(40, -70)) + q = q.Distance("200km") + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"geo_distance":{"distance":"200km","pin.location":{"lat":40,"lon":-70}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestGeoDistanceQueryWithGeoHash(t *testing.T) { + q := NewGeoDistanceQuery("pin.location") + q = q.GeoHash("drm3btev3e86") + q = q.Distance("12km") + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"geo_distance":{"distance":"12km","pin.location":"drm3btev3e86"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_queries_geo_polygon.go b/vendor/github.com/olivere/elastic/search_queries_geo_polygon.go new file mode 100644 index 0000000..9f2ed21 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_geo_polygon.go @@ -0,0 +1,72 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// GeoPolygonQuery allows to include hits that only fall within a polygon of points. +// +// For more details, see: +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-geo-polygon-query.html +type GeoPolygonQuery struct { + name string + points []*GeoPoint + queryName string +} + +// NewGeoPolygonQuery creates and initializes a new GeoPolygonQuery. +func NewGeoPolygonQuery(name string) *GeoPolygonQuery { + return &GeoPolygonQuery{ + name: name, + points: make([]*GeoPoint, 0), + } +} + +// AddPoint adds a point from latitude and longitude. +func (q *GeoPolygonQuery) AddPoint(lat, lon float64) *GeoPolygonQuery { + q.points = append(q.points, GeoPointFromLatLon(lat, lon)) + return q +} + +// AddGeoPoint adds a GeoPoint. +func (q *GeoPolygonQuery) AddGeoPoint(point *GeoPoint) *GeoPolygonQuery { + q.points = append(q.points, point) + return q +} + +func (q *GeoPolygonQuery) QueryName(queryName string) *GeoPolygonQuery { + q.queryName = queryName + return q +} + +// Source returns JSON for the function score query. +func (q *GeoPolygonQuery) Source() (interface{}, error) { + // "geo_polygon" : { + // "person.location" : { + // "points" : [ + // {"lat" : 40, "lon" : -70}, + // {"lat" : 30, "lon" : -80}, + // {"lat" : 20, "lon" : -90} + // ] + // } + // } + source := make(map[string]interface{}) + + params := make(map[string]interface{}) + source["geo_polygon"] = params + + polygon := make(map[string]interface{}) + params[q.name] = polygon + + var points []interface{} + for _, point := range q.points { + points = append(points, point.Source()) + } + polygon["points"] = points + + if q.queryName != "" { + params["_name"] = q.queryName + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_queries_geo_polygon_test.go b/vendor/github.com/olivere/elastic/search_queries_geo_polygon_test.go new file mode 100644 index 0000000..932c57d --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_geo_polygon_test.go @@ -0,0 +1,58 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestGeoPolygonQuery(t *testing.T) { + q := NewGeoPolygonQuery("person.location") + q = q.AddPoint(40, -70) + q = q.AddPoint(30, -80) + point, err := GeoPointFromString("20,-90") + if err != nil { + t.Fatalf("GeoPointFromString failed: %v", err) + } + q = q.AddGeoPoint(point) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"geo_polygon":{"person.location":{"points":[{"lat":40,"lon":-70},{"lat":30,"lon":-80},{"lat":20,"lon":-90}]}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestGeoPolygonQueryFromGeoPoints(t *testing.T) { + q := NewGeoPolygonQuery("person.location") + q = q.AddGeoPoint(&GeoPoint{Lat: 40, Lon: -70}) + q = q.AddGeoPoint(GeoPointFromLatLon(30, -80)) + point, err := GeoPointFromString("20,-90") + if err != nil { + t.Fatalf("GeoPointFromString failed: %v", err) + } + q = q.AddGeoPoint(point) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"geo_polygon":{"person.location":{"points":[{"lat":40,"lon":-70},{"lat":30,"lon":-80},{"lat":20,"lon":-90}]}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_queries_has_child.go b/vendor/github.com/olivere/elastic/search_queries_has_child.go new file mode 100644 index 0000000..b6ae572 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_has_child.go @@ -0,0 +1,131 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// HasChildQuery accepts a query and the child type to run against, and results +// in parent documents that have child docs matching the query. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-has-child-query.html +type HasChildQuery struct { + query Query + childType string + boost *float64 + scoreMode string + minChildren *int + maxChildren *int + shortCircuitCutoff *int + queryName string + innerHit *InnerHit +} + +// NewHasChildQuery creates and initializes a new has_child query. +func NewHasChildQuery(childType string, query Query) *HasChildQuery { + return &HasChildQuery{ + query: query, + childType: childType, + } +} + +// Boost sets the boost for this query. +func (q *HasChildQuery) Boost(boost float64) *HasChildQuery { + q.boost = &boost + return q +} + +// ScoreMode defines how the scores from the matching child documents +// are mapped into the parent document. Allowed values are: min, max, +// avg, or none. +func (q *HasChildQuery) ScoreMode(scoreMode string) *HasChildQuery { + q.scoreMode = scoreMode + return q +} + +// MinChildren defines the minimum number of children that are required +// to match for the parent to be considered a match. +func (q *HasChildQuery) MinChildren(minChildren int) *HasChildQuery { + q.minChildren = &minChildren + return q +} + +// MaxChildren defines the maximum number of children that are required +// to match for the parent to be considered a match. +func (q *HasChildQuery) MaxChildren(maxChildren int) *HasChildQuery { + q.maxChildren = &maxChildren + return q +} + +// ShortCircuitCutoff configures what cut off point only to evaluate +// parent documents that contain the matching parent id terms instead +// of evaluating all parent docs. +func (q *HasChildQuery) ShortCircuitCutoff(shortCircuitCutoff int) *HasChildQuery { + q.shortCircuitCutoff = &shortCircuitCutoff + return q +} + +// QueryName specifies the query name for the filter that can be used when +// searching for matched filters per hit. +func (q *HasChildQuery) QueryName(queryName string) *HasChildQuery { + q.queryName = queryName + return q +} + +// InnerHit sets the inner hit definition in the scope of this query and +// reusing the defined type and query. +func (q *HasChildQuery) InnerHit(innerHit *InnerHit) *HasChildQuery { + q.innerHit = innerHit + return q +} + +// Source returns JSON for the function score query. +func (q *HasChildQuery) Source() (interface{}, error) { + // { + // "has_child" : { + // "type" : "blog_tag", + // "score_mode" : "min", + // "query" : { + // "term" : { + // "tag" : "something" + // } + // } + // } + // } + source := make(map[string]interface{}) + query := make(map[string]interface{}) + source["has_child"] = query + + src, err := q.query.Source() + if err != nil { + return nil, err + } + query["query"] = src + query["type"] = q.childType + if q.boost != nil { + query["boost"] = *q.boost + } + if q.scoreMode != "" { + query["score_mode"] = q.scoreMode + } + if q.minChildren != nil { + query["min_children"] = *q.minChildren + } + if q.maxChildren != nil { + query["max_children"] = *q.maxChildren + } + if q.shortCircuitCutoff != nil { + query["short_circuit_cutoff"] = *q.shortCircuitCutoff + } + if q.queryName != "" { + query["_name"] = q.queryName + } + if q.innerHit != nil { + src, err := q.innerHit.Source() + if err != nil { + return nil, err + } + query["inner_hits"] = src + } + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_queries_has_child_test.go b/vendor/github.com/olivere/elastic/search_queries_has_child_test.go new file mode 100644 index 0000000..745c263 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_has_child_test.go @@ -0,0 +1,45 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestHasChildQuery(t *testing.T) { + q := NewHasChildQuery("blog_tag", NewTermQuery("tag", "something")).ScoreMode("min") + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"has_child":{"query":{"term":{"tag":"something"}},"score_mode":"min","type":"blog_tag"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestHasChildQueryWithInnerHit(t *testing.T) { + q := NewHasChildQuery("blog_tag", NewTermQuery("tag", "something")) + q = q.InnerHit(NewInnerHit().Name("comments")) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"has_child":{"inner_hits":{"name":"comments"},"query":{"term":{"tag":"something"}},"type":"blog_tag"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_queries_has_parent.go b/vendor/github.com/olivere/elastic/search_queries_has_parent.go new file mode 100644 index 0000000..78bec08 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_has_parent.go @@ -0,0 +1,97 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// HasParentQuery accepts a query and a parent type. The query is executed +// in the parent document space which is specified by the parent type. +// This query returns child documents which associated parents have matched. +// For the rest has_parent query has the same options and works in the +// same manner as has_child query. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-has-parent-query.html +type HasParentQuery struct { + query Query + parentType string + boost *float64 + score *bool + queryName string + innerHit *InnerHit +} + +// NewHasParentQuery creates and initializes a new has_parent query. +func NewHasParentQuery(parentType string, query Query) *HasParentQuery { + return &HasParentQuery{ + query: query, + parentType: parentType, + } +} + +// Boost sets the boost for this query. +func (q *HasParentQuery) Boost(boost float64) *HasParentQuery { + q.boost = &boost + return q +} + +// Score defines if the parent score is mapped into the child documents. +func (q *HasParentQuery) Score(score bool) *HasParentQuery { + q.score = &score + return q +} + +// QueryName specifies the query name for the filter that can be used when +// searching for matched filters per hit. +func (q *HasParentQuery) QueryName(queryName string) *HasParentQuery { + q.queryName = queryName + return q +} + +// InnerHit sets the inner hit definition in the scope of this query and +// reusing the defined type and query. +func (q *HasParentQuery) InnerHit(innerHit *InnerHit) *HasParentQuery { + q.innerHit = innerHit + return q +} + +// Source returns JSON for the function score query. +func (q *HasParentQuery) Source() (interface{}, error) { + // { + // "has_parent" : { + // "parent_type" : "blog", + // "query" : { + // "term" : { + // "tag" : "something" + // } + // } + // } + // } + source := make(map[string]interface{}) + query := make(map[string]interface{}) + source["has_parent"] = query + + src, err := q.query.Source() + if err != nil { + return nil, err + } + query["query"] = src + query["parent_type"] = q.parentType + if q.boost != nil { + query["boost"] = *q.boost + } + if q.score != nil { + query["score"] = *q.score + } + if q.queryName != "" { + query["_name"] = q.queryName + } + if q.innerHit != nil { + src, err := q.innerHit.Source() + if err != nil { + return nil, err + } + query["inner_hits"] = src + } + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_queries_has_parent_test.go b/vendor/github.com/olivere/elastic/search_queries_has_parent_test.go new file mode 100644 index 0000000..0fec395 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_has_parent_test.go @@ -0,0 +1,27 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestHasParentQueryTest(t *testing.T) { + q := NewHasParentQuery("blog", NewTermQuery("tag", "something")).Score(true) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"has_parent":{"parent_type":"blog","query":{"term":{"tag":"something"}},"score":true}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_queries_ids.go b/vendor/github.com/olivere/elastic/search_queries_ids.go new file mode 100644 index 0000000..bc5d8ae --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_ids.go @@ -0,0 +1,76 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// IdsQuery filters documents that only have the provided ids. +// Note, this query uses the _uid field. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-ids-query.html +type IdsQuery struct { + types []string + values []string + boost *float64 + queryName string +} + +// NewIdsQuery creates and initializes a new ids query. +func NewIdsQuery(types ...string) *IdsQuery { + return &IdsQuery{ + types: types, + values: make([]string, 0), + } +} + +// Ids adds ids to the filter. +func (q *IdsQuery) Ids(ids ...string) *IdsQuery { + q.values = append(q.values, ids...) + return q +} + +// Boost sets the boost for this query. +func (q *IdsQuery) Boost(boost float64) *IdsQuery { + q.boost = &boost + return q +} + +// QueryName sets the query name for the filter. +func (q *IdsQuery) QueryName(queryName string) *IdsQuery { + q.queryName = queryName + return q +} + +// Source returns JSON for the function score query. +func (q *IdsQuery) Source() (interface{}, error) { + // { + // "ids" : { + // "type" : "my_type", + // "values" : ["1", "4", "100"] + // } + // } + + source := make(map[string]interface{}) + query := make(map[string]interface{}) + source["ids"] = query + + // type(s) + if len(q.types) == 1 { + query["type"] = q.types[0] + } else if len(q.types) > 1 { + query["types"] = q.types + } + + // values + query["values"] = q.values + + if q.boost != nil { + query["boost"] = *q.boost + } + if q.queryName != "" { + query["_name"] = q.queryName + } + + return source, nil +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_ids_test.go b/vendor/github.com/olivere/elastic/search_queries_ids_test.go similarity index 78% rename from vendor/gopkg.in/olivere/elastic.v2/search_queries_ids_test.go rename to vendor/github.com/olivere/elastic/search_queries_ids_test.go index c223c60..b36605b 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_ids_test.go +++ b/vendor/github.com/olivere/elastic/search_queries_ids_test.go @@ -1,4 +1,4 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. @@ -11,7 +11,11 @@ import ( func TestIdsQuery(t *testing.T) { q := NewIdsQuery("my_type").Ids("1", "4", "100").Boost(10.5).QueryName("my_query") - data, err := json.Marshal(q.Source()) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } diff --git a/vendor/github.com/olivere/elastic/search_queries_match.go b/vendor/github.com/olivere/elastic/search_queries_match.go new file mode 100644 index 0000000..875e259 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_match.go @@ -0,0 +1,189 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// MatchQuery is a family of queries that accepts text/numerics/dates, +// analyzes them, and constructs a query. +// +// To create a new MatchQuery, use NewMatchQuery. To create specific types +// of queries, e.g. a match_phrase query, use NewMatchPhrQuery(...).Type("phrase"), +// or use one of the shortcuts e.g. NewMatchPhraseQuery(...). +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-match-query.html +type MatchQuery struct { + name string + text interface{} + operator string // or / and + analyzer string + boost *float64 + fuzziness string + prefixLength *int + maxExpansions *int + minimumShouldMatch string + fuzzyRewrite string + lenient *bool + fuzzyTranspositions *bool + zeroTermsQuery string + cutoffFrequency *float64 + queryName string +} + +// NewMatchQuery creates and initializes a new MatchQuery. +func NewMatchQuery(name string, text interface{}) *MatchQuery { + return &MatchQuery{name: name, text: text} +} + +// Operator sets the operator to use when using a boolean query. +// Can be "AND" or "OR" (default). +func (q *MatchQuery) Operator(operator string) *MatchQuery { + q.operator = operator + return q +} + +// Analyzer explicitly sets the analyzer to use. It defaults to use explicit +// mapping config for the field, or, if not set, the default search analyzer. +func (q *MatchQuery) Analyzer(analyzer string) *MatchQuery { + q.analyzer = analyzer + return q +} + +// Fuzziness sets the fuzziness when evaluated to a fuzzy query type. +// Defaults to "AUTO". +func (q *MatchQuery) Fuzziness(fuzziness string) *MatchQuery { + q.fuzziness = fuzziness + return q +} + +// PrefixLength sets the length of a length of common (non-fuzzy) +// prefix for fuzzy match queries. It must be non-negative. +func (q *MatchQuery) PrefixLength(prefixLength int) *MatchQuery { + q.prefixLength = &prefixLength + return q +} + +// MaxExpansions is used with fuzzy or prefix type queries. It specifies +// the number of term expansions to use. It defaults to unbounded so that +// its recommended to set it to a reasonable value for faster execution. +func (q *MatchQuery) MaxExpansions(maxExpansions int) *MatchQuery { + q.maxExpansions = &maxExpansions + return q +} + +// CutoffFrequency can be a value in [0..1] (or an absolute number >=1). +// It represents the maximum treshold of a terms document frequency to be +// considered a low frequency term. +func (q *MatchQuery) CutoffFrequency(cutoff float64) *MatchQuery { + q.cutoffFrequency = &cutoff + return q +} + +// MinimumShouldMatch sets the optional minimumShouldMatch value to +// apply to the query. +func (q *MatchQuery) MinimumShouldMatch(minimumShouldMatch string) *MatchQuery { + q.minimumShouldMatch = minimumShouldMatch + return q +} + +// FuzzyRewrite sets the fuzzy_rewrite parameter controlling how the +// fuzzy query will get rewritten. +func (q *MatchQuery) FuzzyRewrite(fuzzyRewrite string) *MatchQuery { + q.fuzzyRewrite = fuzzyRewrite + return q +} + +// FuzzyTranspositions sets whether transpositions are supported in +// fuzzy queries. +// +// The default metric used by fuzzy queries to determine a match is +// the Damerau-Levenshtein distance formula which supports transpositions. +// Setting transposition to false will +// * switch to classic Levenshtein distance. +// * If not set, Damerau-Levenshtein distance metric will be used. +func (q *MatchQuery) FuzzyTranspositions(fuzzyTranspositions bool) *MatchQuery { + q.fuzzyTranspositions = &fuzzyTranspositions + return q +} + +// Lenient specifies whether format based failures will be ignored. +func (q *MatchQuery) Lenient(lenient bool) *MatchQuery { + q.lenient = &lenient + return q +} + +// ZeroTermsQuery can be "all" or "none". +func (q *MatchQuery) ZeroTermsQuery(zeroTermsQuery string) *MatchQuery { + q.zeroTermsQuery = zeroTermsQuery + return q +} + +// Boost sets the boost to apply to this query. +func (q *MatchQuery) Boost(boost float64) *MatchQuery { + q.boost = &boost + return q +} + +// QueryName sets the query name for the filter that can be used when +// searching for matched filters per hit. +func (q *MatchQuery) QueryName(queryName string) *MatchQuery { + q.queryName = queryName + return q +} + +// Source returns JSON for the function score query. +func (q *MatchQuery) Source() (interface{}, error) { + // {"match":{"name":{"query":"value","type":"boolean/phrase"}}} + source := make(map[string]interface{}) + + match := make(map[string]interface{}) + source["match"] = match + + query := make(map[string]interface{}) + match[q.name] = query + + query["query"] = q.text + + if q.operator != "" { + query["operator"] = q.operator + } + if q.analyzer != "" { + query["analyzer"] = q.analyzer + } + if q.fuzziness != "" { + query["fuzziness"] = q.fuzziness + } + if q.prefixLength != nil { + query["prefix_length"] = *q.prefixLength + } + if q.maxExpansions != nil { + query["max_expansions"] = *q.maxExpansions + } + if q.minimumShouldMatch != "" { + query["minimum_should_match"] = q.minimumShouldMatch + } + if q.fuzzyRewrite != "" { + query["fuzzy_rewrite"] = q.fuzzyRewrite + } + if q.lenient != nil { + query["lenient"] = *q.lenient + } + if q.fuzzyTranspositions != nil { + query["fuzzy_transpositions"] = *q.fuzzyTranspositions + } + if q.zeroTermsQuery != "" { + query["zero_terms_query"] = q.zeroTermsQuery + } + if q.cutoffFrequency != nil { + query["cutoff_frequency"] = q.cutoffFrequency + } + if q.boost != nil { + query["boost"] = *q.boost + } + if q.queryName != "" { + query["_name"] = q.queryName + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_queries_match_all.go b/vendor/github.com/olivere/elastic/search_queries_match_all.go new file mode 100644 index 0000000..d43e857 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_match_all.go @@ -0,0 +1,51 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// MatchAllQuery is the most simple query, which matches all documents, +// giving them all a _score of 1.0. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-match-all-query.html +type MatchAllQuery struct { + boost *float64 + queryName string +} + +// NewMatchAllQuery creates and initializes a new match all query. +func NewMatchAllQuery() *MatchAllQuery { + return &MatchAllQuery{} +} + +// Boost sets the boost for this query. Documents matching this query will +// (in addition to the normal weightings) have their score multiplied by the +// boost provided. +func (q *MatchAllQuery) Boost(boost float64) *MatchAllQuery { + q.boost = &boost + return q +} + +// QueryName sets the query name. +func (q *MatchAllQuery) QueryName(name string) *MatchAllQuery { + q.queryName = name + return q +} + +// Source returns JSON for the match all query. +func (q MatchAllQuery) Source() (interface{}, error) { + // { + // "match_all" : { ... } + // } + source := make(map[string]interface{}) + params := make(map[string]interface{}) + source["match_all"] = params + if q.boost != nil { + params["boost"] = *q.boost + } + if q.queryName != "" { + params["_name"] = q.queryName + } + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_queries_match_all_test.go b/vendor/github.com/olivere/elastic/search_queries_match_all_test.go new file mode 100644 index 0000000..5d86710 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_match_all_test.go @@ -0,0 +1,61 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestMatchAllQuery(t *testing.T) { + q := NewMatchAllQuery() + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"match_all":{}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestMatchAllQueryWithBoost(t *testing.T) { + q := NewMatchAllQuery().Boost(3.14) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"match_all":{"boost":3.14}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestMatchAllQueryWithQueryName(t *testing.T) { + q := NewMatchAllQuery().QueryName("qname") + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"match_all":{"_name":"qname"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_queries_match_none.go b/vendor/github.com/olivere/elastic/search_queries_match_none.go new file mode 100644 index 0000000..6d675c1 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_match_none.go @@ -0,0 +1,39 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// MatchNoneQuery returns no documents. It is the inverse of +// MatchAllQuery. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-match-all-query.html +type MatchNoneQuery struct { + queryName string +} + +// NewMatchNoneQuery creates and initializes a new match none query. +func NewMatchNoneQuery() *MatchNoneQuery { + return &MatchNoneQuery{} +} + +// QueryName sets the query name. +func (q *MatchNoneQuery) QueryName(name string) *MatchNoneQuery { + q.queryName = name + return q +} + +// Source returns JSON for the match none query. +func (q MatchNoneQuery) Source() (interface{}, error) { + // { + // "match_none" : { ... } + // } + source := make(map[string]interface{}) + params := make(map[string]interface{}) + source["match_none"] = params + if q.queryName != "" { + params["_name"] = q.queryName + } + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_queries_match_none_test.go b/vendor/github.com/olivere/elastic/search_queries_match_none_test.go new file mode 100644 index 0000000..6463452 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_match_none_test.go @@ -0,0 +1,44 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestMatchNoneQuery(t *testing.T) { + q := NewMatchNoneQuery() + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"match_none":{}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestMatchNoneQueryWithQueryName(t *testing.T) { + q := NewMatchNoneQuery().QueryName("qname") + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"match_none":{"_name":"qname"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_queries_match_phrase.go b/vendor/github.com/olivere/elastic/search_queries_match_phrase.go new file mode 100644 index 0000000..58c3c07 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_match_phrase.go @@ -0,0 +1,79 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// MatchPhraseQuery analyzes the text and creates a phrase query out of +// the analyzed text. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-match-query-phrase.html +type MatchPhraseQuery struct { + name string + value interface{} + analyzer string + slop *int + boost *float64 + queryName string +} + +// NewMatchPhraseQuery creates and initializes a new MatchPhraseQuery. +func NewMatchPhraseQuery(name string, value interface{}) *MatchPhraseQuery { + return &MatchPhraseQuery{name: name, value: value} +} + +// Analyzer explicitly sets the analyzer to use. It defaults to use explicit +// mapping config for the field, or, if not set, the default search analyzer. +func (q *MatchPhraseQuery) Analyzer(analyzer string) *MatchPhraseQuery { + q.analyzer = analyzer + return q +} + +// Slop sets the phrase slop if evaluated to a phrase query type. +func (q *MatchPhraseQuery) Slop(slop int) *MatchPhraseQuery { + q.slop = &slop + return q +} + +// Boost sets the boost to apply to this query. +func (q *MatchPhraseQuery) Boost(boost float64) *MatchPhraseQuery { + q.boost = &boost + return q +} + +// QueryName sets the query name for the filter that can be used when +// searching for matched filters per hit. +func (q *MatchPhraseQuery) QueryName(queryName string) *MatchPhraseQuery { + q.queryName = queryName + return q +} + +// Source returns JSON for the function score query. +func (q *MatchPhraseQuery) Source() (interface{}, error) { + // {"match_phrase":{"name":{"query":"value","analyzer":"my_analyzer"}}} + source := make(map[string]interface{}) + + match := make(map[string]interface{}) + source["match_phrase"] = match + + query := make(map[string]interface{}) + match[q.name] = query + + query["query"] = q.value + + if q.analyzer != "" { + query["analyzer"] = q.analyzer + } + if q.slop != nil { + query["slop"] = *q.slop + } + if q.boost != nil { + query["boost"] = *q.boost + } + if q.queryName != "" { + query["_name"] = q.queryName + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_queries_match_phrase_prefix.go b/vendor/github.com/olivere/elastic/search_queries_match_phrase_prefix.go new file mode 100644 index 0000000..93a28cc --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_match_phrase_prefix.go @@ -0,0 +1,89 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// MatchPhrasePrefixQuery is the same as match_phrase, except that it allows for +// prefix matches on the last term in the text. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-match-query-phrase-prefix.html +type MatchPhrasePrefixQuery struct { + name string + value interface{} + analyzer string + slop *int + maxExpansions *int + boost *float64 + queryName string +} + +// NewMatchPhrasePrefixQuery creates and initializes a new MatchPhrasePrefixQuery. +func NewMatchPhrasePrefixQuery(name string, value interface{}) *MatchPhrasePrefixQuery { + return &MatchPhrasePrefixQuery{name: name, value: value} +} + +// Analyzer explicitly sets the analyzer to use. It defaults to use explicit +// mapping config for the field, or, if not set, the default search analyzer. +func (q *MatchPhrasePrefixQuery) Analyzer(analyzer string) *MatchPhrasePrefixQuery { + q.analyzer = analyzer + return q +} + +// Slop sets the phrase slop if evaluated to a phrase query type. +func (q *MatchPhrasePrefixQuery) Slop(slop int) *MatchPhrasePrefixQuery { + q.slop = &slop + return q +} + +// MaxExpansions sets the number of term expansions to use. +func (q *MatchPhrasePrefixQuery) MaxExpansions(n int) *MatchPhrasePrefixQuery { + q.maxExpansions = &n + return q +} + +// Boost sets the boost to apply to this query. +func (q *MatchPhrasePrefixQuery) Boost(boost float64) *MatchPhrasePrefixQuery { + q.boost = &boost + return q +} + +// QueryName sets the query name for the filter that can be used when +// searching for matched filters per hit. +func (q *MatchPhrasePrefixQuery) QueryName(queryName string) *MatchPhrasePrefixQuery { + q.queryName = queryName + return q +} + +// Source returns JSON for the function score query. +func (q *MatchPhrasePrefixQuery) Source() (interface{}, error) { + // {"match_phrase_prefix":{"name":{"query":"value","max_expansions":10}}} + source := make(map[string]interface{}) + + match := make(map[string]interface{}) + source["match_phrase_prefix"] = match + + query := make(map[string]interface{}) + match[q.name] = query + + query["query"] = q.value + + if q.analyzer != "" { + query["analyzer"] = q.analyzer + } + if q.slop != nil { + query["slop"] = *q.slop + } + if q.maxExpansions != nil { + query["max_expansions"] = *q.maxExpansions + } + if q.boost != nil { + query["boost"] = *q.boost + } + if q.queryName != "" { + query["_name"] = q.queryName + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_queries_match_phrase_prefix_test.go b/vendor/github.com/olivere/elastic/search_queries_match_phrase_prefix_test.go new file mode 100644 index 0000000..82a02f1 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_match_phrase_prefix_test.go @@ -0,0 +1,27 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestMatchPhrasePrefixQuery(t *testing.T) { + q := NewMatchPhrasePrefixQuery("message", "this is a test").Boost(0.3).MaxExpansions(5) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"match_phrase_prefix":{"message":{"boost":0.3,"max_expansions":5,"query":"this is a test"}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_queries_match_phrase_test.go b/vendor/github.com/olivere/elastic/search_queries_match_phrase_test.go new file mode 100644 index 0000000..85e60d8 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_match_phrase_test.go @@ -0,0 +1,29 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestMatchPhraseQuery(t *testing.T) { + q := NewMatchPhraseQuery("message", "this is a test"). + Analyzer("my_analyzer"). + Boost(0.7) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"match_phrase":{"message":{"analyzer":"my_analyzer","boost":0.7,"query":"this is a test"}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_queries_match_test.go b/vendor/github.com/olivere/elastic/search_queries_match_test.go new file mode 100644 index 0000000..dd750cf --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_match_test.go @@ -0,0 +1,44 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestMatchQuery(t *testing.T) { + q := NewMatchQuery("message", "this is a test") + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"match":{"message":{"query":"this is a test"}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestMatchQueryWithOptions(t *testing.T) { + q := NewMatchQuery("message", "this is a test").Analyzer("whitespace").Operator("or").Boost(2.5) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"match":{"message":{"analyzer":"whitespace","boost":2.5,"operator":"or","query":"this is a test"}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_queries_more_like_this.go b/vendor/github.com/olivere/elastic/search_queries_more_like_this.go new file mode 100644 index 0000000..1a904ee --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_more_like_this.go @@ -0,0 +1,412 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import "errors" + +// MoreLikeThis query (MLT Query) finds documents that are "like" a given +// set of documents. In order to do so, MLT selects a set of representative +// terms of these input documents, forms a query using these terms, executes +// the query and returns the results. The user controls the input documents, +// how the terms should be selected and how the query is formed. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-mlt-query.html +type MoreLikeThisQuery struct { + fields []string + docs []*MoreLikeThisQueryItem + unlikeDocs []*MoreLikeThisQueryItem + include *bool + minimumShouldMatch string + minTermFreq *int + maxQueryTerms *int + stopWords []string + minDocFreq *int + maxDocFreq *int + minWordLength *int + maxWordLength *int + boostTerms *float64 + boost *float64 + analyzer string + failOnUnsupportedField *bool + queryName string +} + +// NewMoreLikeThisQuery creates and initializes a new MoreLikeThisQuery. +func NewMoreLikeThisQuery() *MoreLikeThisQuery { + return &MoreLikeThisQuery{ + fields: make([]string, 0), + stopWords: make([]string, 0), + docs: make([]*MoreLikeThisQueryItem, 0), + unlikeDocs: make([]*MoreLikeThisQueryItem, 0), + } +} + +// Field adds one or more field names to the query. +func (q *MoreLikeThisQuery) Field(fields ...string) *MoreLikeThisQuery { + q.fields = append(q.fields, fields...) + return q +} + +// StopWord sets the stopwords. Any word in this set is considered +// "uninteresting" and ignored. Even if your Analyzer allows stopwords, +// you might want to tell the MoreLikeThis code to ignore them, as for +// the purposes of document similarity it seems reasonable to assume that +// "a stop word is never interesting". +func (q *MoreLikeThisQuery) StopWord(stopWords ...string) *MoreLikeThisQuery { + q.stopWords = append(q.stopWords, stopWords...) + return q +} + +// LikeText sets the text to use in order to find documents that are "like" this. +func (q *MoreLikeThisQuery) LikeText(likeTexts ...string) *MoreLikeThisQuery { + for _, s := range likeTexts { + item := NewMoreLikeThisQueryItem().LikeText(s) + q.docs = append(q.docs, item) + } + return q +} + +// LikeItems sets the documents to use in order to find documents that are "like" this. +func (q *MoreLikeThisQuery) LikeItems(docs ...*MoreLikeThisQueryItem) *MoreLikeThisQuery { + q.docs = append(q.docs, docs...) + return q +} + +// IgnoreLikeText sets the text from which the terms should not be selected from. +func (q *MoreLikeThisQuery) IgnoreLikeText(ignoreLikeText ...string) *MoreLikeThisQuery { + for _, s := range ignoreLikeText { + item := NewMoreLikeThisQueryItem().LikeText(s) + q.unlikeDocs = append(q.unlikeDocs, item) + } + return q +} + +// IgnoreLikeItems sets the documents from which the terms should not be selected from. +func (q *MoreLikeThisQuery) IgnoreLikeItems(ignoreDocs ...*MoreLikeThisQueryItem) *MoreLikeThisQuery { + q.unlikeDocs = append(q.unlikeDocs, ignoreDocs...) + return q +} + +// Ids sets the document ids to use in order to find documents that are "like" this. +func (q *MoreLikeThisQuery) Ids(ids ...string) *MoreLikeThisQuery { + for _, id := range ids { + item := NewMoreLikeThisQueryItem().Id(id) + q.docs = append(q.docs, item) + } + return q +} + +// Include specifies whether the input documents should also be included +// in the results returned. Defaults to false. +func (q *MoreLikeThisQuery) Include(include bool) *MoreLikeThisQuery { + q.include = &include + return q +} + +// MinimumShouldMatch sets the number of terms that must match the generated +// query expressed in the common syntax for minimum should match. +// The default value is "30%". +// +// This used to be "PercentTermsToMatch" in Elasticsearch versions before 2.0. +func (q *MoreLikeThisQuery) MinimumShouldMatch(minimumShouldMatch string) *MoreLikeThisQuery { + q.minimumShouldMatch = minimumShouldMatch + return q +} + +// MinTermFreq is the frequency below which terms will be ignored in the +// source doc. The default frequency is 2. +func (q *MoreLikeThisQuery) MinTermFreq(minTermFreq int) *MoreLikeThisQuery { + q.minTermFreq = &minTermFreq + return q +} + +// MaxQueryTerms sets the maximum number of query terms that will be included +// in any generated query. It defaults to 25. +func (q *MoreLikeThisQuery) MaxQueryTerms(maxQueryTerms int) *MoreLikeThisQuery { + q.maxQueryTerms = &maxQueryTerms + return q +} + +// MinDocFreq sets the frequency at which words will be ignored which do +// not occur in at least this many docs. The default is 5. +func (q *MoreLikeThisQuery) MinDocFreq(minDocFreq int) *MoreLikeThisQuery { + q.minDocFreq = &minDocFreq + return q +} + +// MaxDocFreq sets the maximum frequency for which words may still appear. +// Words that appear in more than this many docs will be ignored. +// It defaults to unbounded. +func (q *MoreLikeThisQuery) MaxDocFreq(maxDocFreq int) *MoreLikeThisQuery { + q.maxDocFreq = &maxDocFreq + return q +} + +// MinWordLength sets the minimum word length below which words will be +// ignored. It defaults to 0. +func (q *MoreLikeThisQuery) MinWordLength(minWordLength int) *MoreLikeThisQuery { + q.minWordLength = &minWordLength + return q +} + +// MaxWordLength sets the maximum word length above which words will be ignored. +// Defaults to unbounded (0). +func (q *MoreLikeThisQuery) MaxWordLength(maxWordLength int) *MoreLikeThisQuery { + q.maxWordLength = &maxWordLength + return q +} + +// BoostTerms sets the boost factor to use when boosting terms. +// It defaults to 1. +func (q *MoreLikeThisQuery) BoostTerms(boostTerms float64) *MoreLikeThisQuery { + q.boostTerms = &boostTerms + return q +} + +// Analyzer specifies the analyzer that will be use to analyze the text. +// Defaults to the analyzer associated with the field. +func (q *MoreLikeThisQuery) Analyzer(analyzer string) *MoreLikeThisQuery { + q.analyzer = analyzer + return q +} + +// Boost sets the boost for this query. +func (q *MoreLikeThisQuery) Boost(boost float64) *MoreLikeThisQuery { + q.boost = &boost + return q +} + +// FailOnUnsupportedField indicates whether to fail or return no result +// when this query is run against a field which is not supported such as +// a binary/numeric field. +func (q *MoreLikeThisQuery) FailOnUnsupportedField(fail bool) *MoreLikeThisQuery { + q.failOnUnsupportedField = &fail + return q +} + +// QueryName sets the query name for the filter that can be used when +// searching for matched_filters per hit. +func (q *MoreLikeThisQuery) QueryName(queryName string) *MoreLikeThisQuery { + q.queryName = queryName + return q +} + +// Source creates the source for the MLT query. +// It may return an error if the caller forgot to specify any documents to +// be "liked" in the MoreLikeThisQuery. +func (q *MoreLikeThisQuery) Source() (interface{}, error) { + // { + // "match_all" : { ... } + // } + if len(q.docs) == 0 { + return nil, errors.New(`more_like_this requires some documents to be "liked"`) + } + + source := make(map[string]interface{}) + + params := make(map[string]interface{}) + source["more_like_this"] = params + + if len(q.fields) > 0 { + params["fields"] = q.fields + } + + var likes []interface{} + for _, doc := range q.docs { + src, err := doc.Source() + if err != nil { + return nil, err + } + likes = append(likes, src) + } + params["like"] = likes + + if len(q.unlikeDocs) > 0 { + var dontLikes []interface{} + for _, doc := range q.unlikeDocs { + src, err := doc.Source() + if err != nil { + return nil, err + } + dontLikes = append(dontLikes, src) + } + params["unlike"] = dontLikes + } + + if q.minimumShouldMatch != "" { + params["minimum_should_match"] = q.minimumShouldMatch + } + if q.minTermFreq != nil { + params["min_term_freq"] = *q.minTermFreq + } + if q.maxQueryTerms != nil { + params["max_query_terms"] = *q.maxQueryTerms + } + if len(q.stopWords) > 0 { + params["stop_words"] = q.stopWords + } + if q.minDocFreq != nil { + params["min_doc_freq"] = *q.minDocFreq + } + if q.maxDocFreq != nil { + params["max_doc_freq"] = *q.maxDocFreq + } + if q.minWordLength != nil { + params["min_word_length"] = *q.minWordLength + } + if q.maxWordLength != nil { + params["max_word_length"] = *q.maxWordLength + } + if q.boostTerms != nil { + params["boost_terms"] = *q.boostTerms + } + if q.boost != nil { + params["boost"] = *q.boost + } + if q.analyzer != "" { + params["analyzer"] = q.analyzer + } + if q.failOnUnsupportedField != nil { + params["fail_on_unsupported_field"] = *q.failOnUnsupportedField + } + if q.queryName != "" { + params["_name"] = q.queryName + } + if q.include != nil { + params["include"] = *q.include + } + + return source, nil +} + +// -- MoreLikeThisQueryItem -- + +// MoreLikeThisQueryItem represents a single item of a MoreLikeThisQuery +// to be "liked" or "unliked". +type MoreLikeThisQueryItem struct { + likeText string + + index string + typ string + id string + doc interface{} + fields []string + routing string + fsc *FetchSourceContext + version int64 + versionType string +} + +// NewMoreLikeThisQueryItem creates and initializes a MoreLikeThisQueryItem. +func NewMoreLikeThisQueryItem() *MoreLikeThisQueryItem { + return &MoreLikeThisQueryItem{ + version: -1, + } +} + +// LikeText represents a text to be "liked". +func (item *MoreLikeThisQueryItem) LikeText(likeText string) *MoreLikeThisQueryItem { + item.likeText = likeText + return item +} + +// Index represents the index of the item. +func (item *MoreLikeThisQueryItem) Index(index string) *MoreLikeThisQueryItem { + item.index = index + return item +} + +// Type represents the document type of the item. +func (item *MoreLikeThisQueryItem) Type(typ string) *MoreLikeThisQueryItem { + item.typ = typ + return item +} + +// Id represents the document id of the item. +func (item *MoreLikeThisQueryItem) Id(id string) *MoreLikeThisQueryItem { + item.id = id + return item +} + +// Doc represents a raw document template for the item. +func (item *MoreLikeThisQueryItem) Doc(doc interface{}) *MoreLikeThisQueryItem { + item.doc = doc + return item +} + +// Fields represents the list of fields of the item. +func (item *MoreLikeThisQueryItem) Fields(fields ...string) *MoreLikeThisQueryItem { + item.fields = append(item.fields, fields...) + return item +} + +// Routing sets the routing associated with the item. +func (item *MoreLikeThisQueryItem) Routing(routing string) *MoreLikeThisQueryItem { + item.routing = routing + return item +} + +// FetchSourceContext represents the fetch source of the item which controls +// if and how _source should be returned. +func (item *MoreLikeThisQueryItem) FetchSourceContext(fsc *FetchSourceContext) *MoreLikeThisQueryItem { + item.fsc = fsc + return item +} + +// Version specifies the version of the item. +func (item *MoreLikeThisQueryItem) Version(version int64) *MoreLikeThisQueryItem { + item.version = version + return item +} + +// VersionType represents the version type of the item. +func (item *MoreLikeThisQueryItem) VersionType(versionType string) *MoreLikeThisQueryItem { + item.versionType = versionType + return item +} + +// Source returns the JSON-serializable fragment of the entity. +func (item *MoreLikeThisQueryItem) Source() (interface{}, error) { + if item.likeText != "" { + return item.likeText, nil + } + + source := make(map[string]interface{}) + + if item.index != "" { + source["_index"] = item.index + } + if item.typ != "" { + source["_type"] = item.typ + } + if item.id != "" { + source["_id"] = item.id + } + if item.doc != nil { + source["doc"] = item.doc + } + if len(item.fields) > 0 { + source["fields"] = item.fields + } + if item.routing != "" { + source["_routing"] = item.routing + } + if item.fsc != nil { + src, err := item.fsc.Source() + if err != nil { + return nil, err + } + source["_source"] = src + } + if item.version >= 0 { + source["_version"] = item.version + } + if item.versionType != "" { + source["_version_type"] = item.versionType + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_queries_more_like_this_test.go b/vendor/github.com/olivere/elastic/search_queries_more_like_this_test.go new file mode 100644 index 0000000..dcbbe74 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_more_like_this_test.go @@ -0,0 +1,92 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "testing" +) + +func TestMoreLikeThisQuerySourceWithLikeText(t *testing.T) { + q := NewMoreLikeThisQuery().LikeText("Golang topic").Field("message") + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatal(err) + } + got := string(data) + expected := `{"more_like_this":{"fields":["message"],"like":["Golang topic"]}}` + if got != expected { + t.Fatalf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestMoreLikeThisQuerySourceWithLikeAndUnlikeItems(t *testing.T) { + q := NewMoreLikeThisQuery() + q = q.LikeItems( + NewMoreLikeThisQueryItem().Id("1"), + NewMoreLikeThisQueryItem().Index(testIndexName2).Type("comment").Id("2").Routing("routing_id"), + ) + q = q.IgnoreLikeItems(NewMoreLikeThisQueryItem().Id("3")) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatal(err) + } + got := string(data) + expected := `{"more_like_this":{"like":[{"_id":"1"},{"_id":"2","_index":"elastic-test2","_routing":"routing_id","_type":"comment"}],"unlike":[{"_id":"3"}]}}` + if got != expected { + t.Fatalf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestMoreLikeThisQuery(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} + tweet2 := tweet{User: "olivere", Message: "Another Golang topic."} + tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} + + // Add all documents + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Common query + mltq := NewMoreLikeThisQuery().LikeText("Golang topic").Field("message") + res, err := client.Search(). + Index(testIndexName). + Query(mltq). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if res.Hits == nil { + t.Errorf("expected SearchResult.Hits != nil; got nil") + } +} diff --git a/vendor/github.com/olivere/elastic/search_queries_multi_match.go b/vendor/github.com/olivere/elastic/search_queries_multi_match.go new file mode 100644 index 0000000..1a8df17 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_multi_match.go @@ -0,0 +1,275 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "fmt" + "strings" +) + +// MultiMatchQuery builds on the MatchQuery to allow multi-field queries. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-multi-match-query.html +type MultiMatchQuery struct { + text interface{} + fields []string + fieldBoosts map[string]*float64 + typ string // best_fields, boolean, most_fields, cross_fields, phrase, phrase_prefix + operator string // AND or OR + analyzer string + boost *float64 + slop *int + fuzziness string + prefixLength *int + maxExpansions *int + minimumShouldMatch string + rewrite string + fuzzyRewrite string + tieBreaker *float64 + lenient *bool + cutoffFrequency *float64 + zeroTermsQuery string + queryName string +} + +// MultiMatchQuery creates and initializes a new MultiMatchQuery. +func NewMultiMatchQuery(text interface{}, fields ...string) *MultiMatchQuery { + q := &MultiMatchQuery{ + text: text, + fields: make([]string, 0), + fieldBoosts: make(map[string]*float64), + } + q.fields = append(q.fields, fields...) + return q +} + +// Field adds a field to run the multi match against. +func (q *MultiMatchQuery) Field(field string) *MultiMatchQuery { + q.fields = append(q.fields, field) + return q +} + +// FieldWithBoost adds a field to run the multi match against with a specific boost. +func (q *MultiMatchQuery) FieldWithBoost(field string, boost float64) *MultiMatchQuery { + q.fields = append(q.fields, field) + q.fieldBoosts[field] = &boost + return q +} + +// Type can be "best_fields", "boolean", "most_fields", "cross_fields", +// "phrase", or "phrase_prefix". +func (q *MultiMatchQuery) Type(typ string) *MultiMatchQuery { + var zero = float64(0.0) + var one = float64(1.0) + + switch strings.ToLower(typ) { + default: // best_fields / boolean + q.typ = "best_fields" + q.tieBreaker = &zero + case "most_fields": + q.typ = "most_fields" + q.tieBreaker = &one + case "cross_fields": + q.typ = "cross_fields" + q.tieBreaker = &zero + case "phrase": + q.typ = "phrase" + q.tieBreaker = &zero + case "phrase_prefix": + q.typ = "phrase_prefix" + q.tieBreaker = &zero + } + return q +} + +// Operator sets the operator to use when using boolean query. +// It can be either AND or OR (default). +func (q *MultiMatchQuery) Operator(operator string) *MultiMatchQuery { + q.operator = operator + return q +} + +// Analyzer sets the analyzer to use explicitly. It defaults to use explicit +// mapping config for the field, or, if not set, the default search analyzer. +func (q *MultiMatchQuery) Analyzer(analyzer string) *MultiMatchQuery { + q.analyzer = analyzer + return q +} + +// Boost sets the boost for this query. +func (q *MultiMatchQuery) Boost(boost float64) *MultiMatchQuery { + q.boost = &boost + return q +} + +// Slop sets the phrase slop if evaluated to a phrase query type. +func (q *MultiMatchQuery) Slop(slop int) *MultiMatchQuery { + q.slop = &slop + return q +} + +// Fuzziness sets the fuzziness used when evaluated to a fuzzy query type. +// It defaults to "AUTO". +func (q *MultiMatchQuery) Fuzziness(fuzziness string) *MultiMatchQuery { + q.fuzziness = fuzziness + return q +} + +// PrefixLength for the fuzzy process. +func (q *MultiMatchQuery) PrefixLength(prefixLength int) *MultiMatchQuery { + q.prefixLength = &prefixLength + return q +} + +// MaxExpansions is the number of term expansions to use when using fuzzy +// or prefix type query. It defaults to unbounded so it's recommended +// to set it to a reasonable value for faster execution. +func (q *MultiMatchQuery) MaxExpansions(maxExpansions int) *MultiMatchQuery { + q.maxExpansions = &maxExpansions + return q +} + +// MinimumShouldMatch represents the minimum number of optional should clauses +// to match. +func (q *MultiMatchQuery) MinimumShouldMatch(minimumShouldMatch string) *MultiMatchQuery { + q.minimumShouldMatch = minimumShouldMatch + return q +} + +func (q *MultiMatchQuery) Rewrite(rewrite string) *MultiMatchQuery { + q.rewrite = rewrite + return q +} + +func (q *MultiMatchQuery) FuzzyRewrite(fuzzyRewrite string) *MultiMatchQuery { + q.fuzzyRewrite = fuzzyRewrite + return q +} + +// TieBreaker for "best-match" disjunction queries (OR queries). +// The tie breaker capability allows documents that match more than one +// query clause (in this case on more than one field) to be scored better +// than documents that match only the best of the fields, without confusing +// this with the better case of two distinct matches in the multiple fields. +// +// A tie-breaker value of 1.0 is interpreted as a signal to score queries as +// "most-match" queries where all matching query clauses are considered for scoring. +func (q *MultiMatchQuery) TieBreaker(tieBreaker float64) *MultiMatchQuery { + q.tieBreaker = &tieBreaker + return q +} + +// Lenient indicates whether format based failures will be ignored. +func (q *MultiMatchQuery) Lenient(lenient bool) *MultiMatchQuery { + q.lenient = &lenient + return q +} + +// CutoffFrequency sets a cutoff value in [0..1] (or absolute number >=1) +// representing the maximum threshold of a terms document frequency to be +// considered a low frequency term. +func (q *MultiMatchQuery) CutoffFrequency(cutoff float64) *MultiMatchQuery { + q.cutoffFrequency = &cutoff + return q +} + +// ZeroTermsQuery can be "all" or "none". +func (q *MultiMatchQuery) ZeroTermsQuery(zeroTermsQuery string) *MultiMatchQuery { + q.zeroTermsQuery = zeroTermsQuery + return q +} + +// QueryName sets the query name for the filter that can be used when +// searching for matched filters per hit. +func (q *MultiMatchQuery) QueryName(queryName string) *MultiMatchQuery { + q.queryName = queryName + return q +} + +// Source returns JSON for the query. +func (q *MultiMatchQuery) Source() (interface{}, error) { + // + // { + // "multi_match" : { + // "query" : "this is a test", + // "fields" : [ "subject", "message" ] + // } + // } + + source := make(map[string]interface{}) + + multiMatch := make(map[string]interface{}) + source["multi_match"] = multiMatch + + multiMatch["query"] = q.text + + if len(q.fields) > 0 { + var fields []string + for _, field := range q.fields { + if boost, found := q.fieldBoosts[field]; found { + if boost != nil { + fields = append(fields, fmt.Sprintf("%s^%f", field, *boost)) + } else { + fields = append(fields, field) + } + } else { + fields = append(fields, field) + } + } + multiMatch["fields"] = fields + } + + if q.typ != "" { + multiMatch["type"] = q.typ + } + + if q.operator != "" { + multiMatch["operator"] = q.operator + } + if q.analyzer != "" { + multiMatch["analyzer"] = q.analyzer + } + if q.boost != nil { + multiMatch["boost"] = *q.boost + } + if q.slop != nil { + multiMatch["slop"] = *q.slop + } + if q.fuzziness != "" { + multiMatch["fuzziness"] = q.fuzziness + } + if q.prefixLength != nil { + multiMatch["prefix_length"] = *q.prefixLength + } + if q.maxExpansions != nil { + multiMatch["max_expansions"] = *q.maxExpansions + } + if q.minimumShouldMatch != "" { + multiMatch["minimum_should_match"] = q.minimumShouldMatch + } + if q.rewrite != "" { + multiMatch["rewrite"] = q.rewrite + } + if q.fuzzyRewrite != "" { + multiMatch["fuzzy_rewrite"] = q.fuzzyRewrite + } + if q.tieBreaker != nil { + multiMatch["tie_breaker"] = *q.tieBreaker + } + if q.lenient != nil { + multiMatch["lenient"] = *q.lenient + } + if q.cutoffFrequency != nil { + multiMatch["cutoff_frequency"] = *q.cutoffFrequency + } + if q.zeroTermsQuery != "" { + multiMatch["zero_terms_query"] = q.zeroTermsQuery + } + if q.queryName != "" { + multiMatch["_name"] = q.queryName + } + return source, nil +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_multi_match_test.go b/vendor/github.com/olivere/elastic/search_queries_multi_match_test.go similarity index 81% rename from vendor/gopkg.in/olivere/elastic.v2/search_queries_multi_match_test.go rename to vendor/github.com/olivere/elastic/search_queries_multi_match_test.go index a7bd347..d897f7e 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_multi_match_test.go +++ b/vendor/github.com/olivere/elastic/search_queries_multi_match_test.go @@ -1,4 +1,4 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. @@ -11,7 +11,11 @@ import ( func TestMultiMatchQuery(t *testing.T) { q := NewMultiMatchQuery("this is a test", "subject", "message") - data, err := json.Marshal(q.Source()) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } @@ -24,7 +28,11 @@ func TestMultiMatchQuery(t *testing.T) { func TestMultiMatchQueryBestFields(t *testing.T) { q := NewMultiMatchQuery("this is a test", "subject", "message").Type("best_fields") - data, err := json.Marshal(q.Source()) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } @@ -37,7 +45,11 @@ func TestMultiMatchQueryBestFields(t *testing.T) { func TestMultiMatchQueryMostFields(t *testing.T) { q := NewMultiMatchQuery("this is a test", "subject", "message").Type("most_fields") - data, err := json.Marshal(q.Source()) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } @@ -50,7 +62,11 @@ func TestMultiMatchQueryMostFields(t *testing.T) { func TestMultiMatchQueryCrossFields(t *testing.T) { q := NewMultiMatchQuery("this is a test", "subject", "message").Type("cross_fields") - data, err := json.Marshal(q.Source()) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } @@ -63,7 +79,11 @@ func TestMultiMatchQueryCrossFields(t *testing.T) { func TestMultiMatchQueryPhrase(t *testing.T) { q := NewMultiMatchQuery("this is a test", "subject", "message").Type("phrase") - data, err := json.Marshal(q.Source()) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } @@ -76,7 +96,11 @@ func TestMultiMatchQueryPhrase(t *testing.T) { func TestMultiMatchQueryPhrasePrefix(t *testing.T) { q := NewMultiMatchQuery("this is a test", "subject", "message").Type("phrase_prefix") - data, err := json.Marshal(q.Source()) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } @@ -91,7 +115,11 @@ func TestMultiMatchQueryBestFieldsWithCustomTieBreaker(t *testing.T) { q := NewMultiMatchQuery("this is a test", "subject", "message"). Type("best_fields"). TieBreaker(0.3) - data, err := json.Marshal(q.Source()) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } diff --git a/vendor/github.com/olivere/elastic/search_queries_nested.go b/vendor/github.com/olivere/elastic/search_queries_nested.go new file mode 100644 index 0000000..cdd3f8b --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_nested.go @@ -0,0 +1,96 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// NestedQuery allows to query nested objects / docs. +// The query is executed against the nested objects / docs as if they were +// indexed as separate docs (they are, internally) and resulting in the +// root parent doc (or parent nested mapping). +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-nested-query.html +type NestedQuery struct { + query Query + path string + scoreMode string + boost *float64 + queryName string + innerHit *InnerHit + ignoreUnmapped *bool +} + +// NewNestedQuery creates and initializes a new NestedQuery. +func NewNestedQuery(path string, query Query) *NestedQuery { + return &NestedQuery{path: path, query: query} +} + +// ScoreMode specifies the score mode. +func (q *NestedQuery) ScoreMode(scoreMode string) *NestedQuery { + q.scoreMode = scoreMode + return q +} + +// Boost sets the boost for this query. +func (q *NestedQuery) Boost(boost float64) *NestedQuery { + q.boost = &boost + return q +} + +// QueryName sets the query name for the filter that can be used +// when searching for matched_filters per hit +func (q *NestedQuery) QueryName(queryName string) *NestedQuery { + q.queryName = queryName + return q +} + +// InnerHit sets the inner hit definition in the scope of this nested query +// and reusing the defined path and query. +func (q *NestedQuery) InnerHit(innerHit *InnerHit) *NestedQuery { + q.innerHit = innerHit + return q +} + +// IgnoreUnmapped sets the ignore_unmapped option for the filter that ignores +// unmapped nested fields +func (q *NestedQuery) IgnoreUnmapped(value bool) *NestedQuery { + q.ignoreUnmapped = &value + return q +} + +// Source returns JSON for the query. +func (q *NestedQuery) Source() (interface{}, error) { + query := make(map[string]interface{}) + nq := make(map[string]interface{}) + query["nested"] = nq + + src, err := q.query.Source() + if err != nil { + return nil, err + } + nq["query"] = src + + nq["path"] = q.path + + if q.scoreMode != "" { + nq["score_mode"] = q.scoreMode + } + if q.boost != nil { + nq["boost"] = *q.boost + } + if q.queryName != "" { + nq["_name"] = q.queryName + } + if q.ignoreUnmapped != nil { + nq["ignore_unmapped"] = *q.ignoreUnmapped + } + if q.innerHit != nil { + src, err := q.innerHit.Source() + if err != nil { + return nil, err + } + nq["inner_hits"] = src + } + return query, nil +} diff --git a/vendor/github.com/olivere/elastic/search_queries_nested_test.go b/vendor/github.com/olivere/elastic/search_queries_nested_test.go new file mode 100644 index 0000000..c7a5322 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_nested_test.go @@ -0,0 +1,86 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestNestedQuery(t *testing.T) { + bq := NewBoolQuery() + bq = bq.Must(NewTermQuery("obj1.name", "blue")) + bq = bq.Must(NewRangeQuery("obj1.count").Gt(5)) + q := NewNestedQuery("obj1", bq).QueryName("qname") + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"nested":{"_name":"qname","path":"obj1","query":{"bool":{"must":[{"term":{"obj1.name":"blue"}},{"range":{"obj1.count":{"from":5,"include_lower":false,"include_upper":true,"to":null}}}]}}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestNestedQueryWithInnerHit(t *testing.T) { + bq := NewBoolQuery() + bq = bq.Must(NewTermQuery("obj1.name", "blue")) + bq = bq.Must(NewRangeQuery("obj1.count").Gt(5)) + q := NewNestedQuery("obj1", bq) + q = q.QueryName("qname") + q = q.InnerHit(NewInnerHit().Name("comments").Query(NewTermQuery("user", "olivere"))) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"nested":{"_name":"qname","inner_hits":{"name":"comments","query":{"term":{"user":"olivere"}}},"path":"obj1","query":{"bool":{"must":[{"term":{"obj1.name":"blue"}},{"range":{"obj1.count":{"from":5,"include_lower":false,"include_upper":true,"to":null}}}]}}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestNestedQueryWithIgnoreUnmapped(t *testing.T) { + var tests = []struct { + query *BoolQuery + expected string + }{ + { + NewBoolQuery().Must(NewNestedQuery("path", NewTermQuery("test", "test"))), + `{"bool":{"must":{"nested":{"path":"path","query":{"term":{"test":"test"}}}}}}`, + }, + { + NewBoolQuery().Must(NewNestedQuery("path", NewTermQuery("test", "test")).IgnoreUnmapped(true)), + `{"bool":{"must":{"nested":{"ignore_unmapped":true,"path":"path","query":{"term":{"test":"test"}}}}}}`, + }, + { + NewBoolQuery().Must(NewNestedQuery("path", NewTermQuery("test", "test")).IgnoreUnmapped(false)), + `{"bool":{"must":{"nested":{"ignore_unmapped":false,"path":"path","query":{"term":{"test":"test"}}}}}}`, + }, + } + for _, test := range tests { + src, err := test.query.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + if got != test.expected { + t.Errorf("expected\n%s\n,got:\n%s", test.expected, got) + } + } +} diff --git a/vendor/github.com/olivere/elastic/search_queries_parent_id.go b/vendor/github.com/olivere/elastic/search_queries_parent_id.go new file mode 100644 index 0000000..b015d36 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_parent_id.go @@ -0,0 +1,99 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// ParentIdQuery can be used to find child documents which belong to a +// particular parent. Given the following mapping definition. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-parent-id-query.html +type ParentIdQuery struct { + typ string + id string + ignoreUnmapped *bool + boost *float64 + queryName string + innerHit *InnerHit +} + +// NewParentIdQuery creates and initializes a new parent_id query. +func NewParentIdQuery(typ, id string) *ParentIdQuery { + return &ParentIdQuery{ + typ: typ, + id: id, + } +} + +// Type sets the parent type. +func (q *ParentIdQuery) Type(typ string) *ParentIdQuery { + q.typ = typ + return q +} + +// Id sets the id. +func (q *ParentIdQuery) Id(id string) *ParentIdQuery { + q.id = id + return q +} + +// IgnoreUnmapped specifies whether unmapped types should be ignored. +// If set to false, the query failes when an unmapped type is found. +func (q *ParentIdQuery) IgnoreUnmapped(ignore bool) *ParentIdQuery { + q.ignoreUnmapped = &ignore + return q +} + +// Boost sets the boost for this query. +func (q *ParentIdQuery) Boost(boost float64) *ParentIdQuery { + q.boost = &boost + return q +} + +// QueryName specifies the query name for the filter that can be used when +// searching for matched filters per hit. +func (q *ParentIdQuery) QueryName(queryName string) *ParentIdQuery { + q.queryName = queryName + return q +} + +// InnerHit sets the inner hit definition in the scope of this query and +// reusing the defined type and query. +func (q *ParentIdQuery) InnerHit(innerHit *InnerHit) *ParentIdQuery { + q.innerHit = innerHit + return q +} + +// Source returns JSON for the parent_id query. +func (q *ParentIdQuery) Source() (interface{}, error) { + // { + // "parent_id" : { + // "type" : "blog", + // "id" : "1" + // } + // } + source := make(map[string]interface{}) + query := make(map[string]interface{}) + source["parent_id"] = query + + query["type"] = q.typ + query["id"] = q.id + if q.boost != nil { + query["boost"] = *q.boost + } + if q.ignoreUnmapped != nil { + query["ignore_unmapped"] = *q.ignoreUnmapped + } + if q.queryName != "" { + query["_name"] = q.queryName + } + if q.innerHit != nil { + src, err := q.innerHit.Source() + if err != nil { + return nil, err + } + query["inner_hits"] = src + } + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_queries_parent_id_test.go b/vendor/github.com/olivere/elastic/search_queries_parent_id_test.go new file mode 100644 index 0000000..0d18f21 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_parent_id_test.go @@ -0,0 +1,52 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestParentIdQueryTest(t *testing.T) { + tests := []struct { + Query Query + Expected string + }{ + // #0 + { + Query: NewParentIdQuery("blog_tag", "1"), + Expected: `{"parent_id":{"id":"1","type":"blog_tag"}}`, + }, + // #1 + { + Query: NewParentIdQuery("blog_tag", "1").IgnoreUnmapped(true), + Expected: `{"parent_id":{"id":"1","ignore_unmapped":true,"type":"blog_tag"}}`, + }, + // #2 + { + Query: NewParentIdQuery("blog_tag", "1").IgnoreUnmapped(false), + Expected: `{"parent_id":{"id":"1","ignore_unmapped":false,"type":"blog_tag"}}`, + }, + // #3 + { + Query: NewParentIdQuery("blog_tag", "1").IgnoreUnmapped(true).Boost(5).QueryName("my_parent_query"), + Expected: `{"parent_id":{"_name":"my_parent_query","boost":5,"id":"1","ignore_unmapped":true,"type":"blog_tag"}}`, + }, + } + + for i, tt := range tests { + src, err := tt.Query.Source() + if err != nil { + t.Fatalf("#%d: encoding Source failed: %v", i, err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("#%d: marshaling to JSON failed: %v", i, err) + } + if want, got := tt.Expected, string(data); want != got { + t.Fatalf("#%d: expected\n%s\ngot:\n%s", i, want, got) + } + } +} diff --git a/vendor/github.com/olivere/elastic/search_queries_percolator.go b/vendor/github.com/olivere/elastic/search_queries_percolator.go new file mode 100644 index 0000000..a6c53f4 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_percolator.go @@ -0,0 +1,115 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import "errors" + +// PercolatorQuery can be used to match queries stored in an index. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-percolate-query.html +type PercolatorQuery struct { + field string + documentType string // deprecated + document interface{} + indexedDocumentIndex string + indexedDocumentType string + indexedDocumentId string + indexedDocumentRouting string + indexedDocumentPreference string + indexedDocumentVersion *int64 +} + +// NewPercolatorQuery creates and initializes a new Percolator query. +func NewPercolatorQuery() *PercolatorQuery { + return &PercolatorQuery{} +} + +func (q *PercolatorQuery) Field(field string) *PercolatorQuery { + q.field = field + return q +} + +// Deprecated: DocumentType is deprecated as of 6.0. +func (q *PercolatorQuery) DocumentType(typ string) *PercolatorQuery { + q.documentType = typ + return q +} + +func (q *PercolatorQuery) Document(doc interface{}) *PercolatorQuery { + q.document = doc + return q +} + +func (q *PercolatorQuery) IndexedDocumentIndex(index string) *PercolatorQuery { + q.indexedDocumentIndex = index + return q +} + +func (q *PercolatorQuery) IndexedDocumentType(typ string) *PercolatorQuery { + q.indexedDocumentType = typ + return q +} + +func (q *PercolatorQuery) IndexedDocumentId(id string) *PercolatorQuery { + q.indexedDocumentId = id + return q +} + +func (q *PercolatorQuery) IndexedDocumentRouting(routing string) *PercolatorQuery { + q.indexedDocumentRouting = routing + return q +} + +func (q *PercolatorQuery) IndexedDocumentPreference(preference string) *PercolatorQuery { + q.indexedDocumentPreference = preference + return q +} + +func (q *PercolatorQuery) IndexedDocumentVersion(version int64) *PercolatorQuery { + q.indexedDocumentVersion = &version + return q +} + +// Source returns JSON for the percolate query. +func (q *PercolatorQuery) Source() (interface{}, error) { + if len(q.field) == 0 { + return nil, errors.New("elastic: Field is required in PercolatorQuery") + } + if q.document == nil { + return nil, errors.New("elastic: Document is required in PercolatorQuery") + } + + // { + // "percolate" : { ... } + // } + source := make(map[string]interface{}) + params := make(map[string]interface{}) + source["percolate"] = params + params["field"] = q.field + if q.documentType != "" { + params["document_type"] = q.documentType + } + params["document"] = q.document + if len(q.indexedDocumentIndex) > 0 { + params["index"] = q.indexedDocumentIndex + } + if len(q.indexedDocumentType) > 0 { + params["type"] = q.indexedDocumentType + } + if len(q.indexedDocumentId) > 0 { + params["id"] = q.indexedDocumentId + } + if len(q.indexedDocumentRouting) > 0 { + params["routing"] = q.indexedDocumentRouting + } + if len(q.indexedDocumentPreference) > 0 { + params["preference"] = q.indexedDocumentPreference + } + if q.indexedDocumentVersion != nil { + params["version"] = *q.indexedDocumentVersion + } + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_queries_percolator_test.go b/vendor/github.com/olivere/elastic/search_queries_percolator_test.go new file mode 100644 index 0000000..edc7be6 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_percolator_test.go @@ -0,0 +1,65 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestPercolatorQuery(t *testing.T) { + q := NewPercolatorQuery(). + Field("query"). + Document(map[string]interface{}{ + "message": "Some message", + }) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"percolate":{"document":{"message":"Some message"},"field":"query"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestPercolatorQueryWithDetails(t *testing.T) { + q := NewPercolatorQuery(). + Field("query"). + Document(map[string]interface{}{ + "message": "Some message", + }). + IndexedDocumentIndex("index"). + IndexedDocumentId("1"). + IndexedDocumentRouting("route"). + IndexedDocumentPreference("one"). + IndexedDocumentVersion(1) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"percolate":{"document":{"message":"Some message"},"field":"query","id":"1","index":"index","preference":"one","routing":"route","version":1}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestPercolatorQueryWithMissingFields(t *testing.T) { + q := NewPercolatorQuery() // no Field, Document, or Query + _, err := q.Source() + if err == nil { + t.Fatal("expected error, got nil") + } +} diff --git a/vendor/github.com/olivere/elastic/search_queries_prefix.go b/vendor/github.com/olivere/elastic/search_queries_prefix.go new file mode 100644 index 0000000..713bcec --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_prefix.go @@ -0,0 +1,67 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// PrefixQuery matches documents that have fields containing terms +// with a specified prefix (not analyzed). +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-prefix-query.html +type PrefixQuery struct { + name string + prefix string + boost *float64 + rewrite string + queryName string +} + +// NewPrefixQuery creates and initializes a new PrefixQuery. +func NewPrefixQuery(name string, prefix string) *PrefixQuery { + return &PrefixQuery{name: name, prefix: prefix} +} + +// Boost sets the boost for this query. +func (q *PrefixQuery) Boost(boost float64) *PrefixQuery { + q.boost = &boost + return q +} + +func (q *PrefixQuery) Rewrite(rewrite string) *PrefixQuery { + q.rewrite = rewrite + return q +} + +// QueryName sets the query name for the filter that can be used when +// searching for matched_filters per hit. +func (q *PrefixQuery) QueryName(queryName string) *PrefixQuery { + q.queryName = queryName + return q +} + +// Source returns JSON for the query. +func (q *PrefixQuery) Source() (interface{}, error) { + source := make(map[string]interface{}) + query := make(map[string]interface{}) + source["prefix"] = query + + if q.boost == nil && q.rewrite == "" && q.queryName == "" { + query[q.name] = q.prefix + } else { + subQuery := make(map[string]interface{}) + subQuery["value"] = q.prefix + if q.boost != nil { + subQuery["boost"] = *q.boost + } + if q.rewrite != "" { + subQuery["rewrite"] = q.rewrite + } + if q.queryName != "" { + subQuery["_name"] = q.queryName + } + query[q.name] = subQuery + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_queries_prefix_example_test.go b/vendor/github.com/olivere/elastic/search_queries_prefix_example_test.go new file mode 100644 index 0000000..73950f1 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_prefix_example_test.go @@ -0,0 +1,35 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic_test + +import ( + "context" + + "github.com/olivere/elastic" +) + +func ExamplePrefixQuery() { + // Get a client to the local Elasticsearch instance. + client, err := elastic.NewClient() + if err != nil { + // Handle error + panic(err) + } + + // Define wildcard query + q := elastic.NewPrefixQuery("user", "oli") + q = q.QueryName("my_query_name") + + searchResult, err := client.Search(). + Index("twitter"). + Query(q). + Pretty(true). + Do(context.Background()) + if err != nil { + // Handle error + panic(err) + } + _ = searchResult +} diff --git a/vendor/github.com/olivere/elastic/search_queries_prefix_test.go b/vendor/github.com/olivere/elastic/search_queries_prefix_test.go new file mode 100644 index 0000000..78d27b6 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_prefix_test.go @@ -0,0 +1,45 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestPrefixQuery(t *testing.T) { + q := NewPrefixQuery("user", "ki") + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"prefix":{"user":"ki"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestPrefixQueryWithOptions(t *testing.T) { + q := NewPrefixQuery("user", "ki") + q = q.QueryName("my_query_name") + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"prefix":{"user":{"_name":"my_query_name","value":"ki"}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_queries_query_string.go b/vendor/github.com/olivere/elastic/search_queries_query_string.go new file mode 100644 index 0000000..485930d --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_query_string.go @@ -0,0 +1,350 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "fmt" +) + +// QueryStringQuery uses the query parser in order to parse its content. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-query-string-query.html +type QueryStringQuery struct { + queryString string + defaultField string + defaultOperator string + analyzer string + quoteAnalyzer string + quoteFieldSuffix string + allowLeadingWildcard *bool + lowercaseExpandedTerms *bool // Deprecated: Decision is now made by the analyzer + enablePositionIncrements *bool + analyzeWildcard *bool + locale string // Deprecated: Decision is now made by the analyzer + boost *float64 + fuzziness string + fuzzyPrefixLength *int + fuzzyMaxExpansions *int + fuzzyRewrite string + phraseSlop *int + fields []string + fieldBoosts map[string]*float64 + tieBreaker *float64 + rewrite string + minimumShouldMatch string + lenient *bool + queryName string + timeZone string + maxDeterminizedStates *int + escape *bool + typ string +} + +// NewQueryStringQuery creates and initializes a new QueryStringQuery. +func NewQueryStringQuery(queryString string) *QueryStringQuery { + return &QueryStringQuery{ + queryString: queryString, + fields: make([]string, 0), + fieldBoosts: make(map[string]*float64), + } +} + +// DefaultField specifies the field to run against when no prefix field +// is specified. Only relevant when not explicitly adding fields the query +// string will run against. +func (q *QueryStringQuery) DefaultField(defaultField string) *QueryStringQuery { + q.defaultField = defaultField + return q +} + +// Field adds a field to run the query string against. +func (q *QueryStringQuery) Field(field string) *QueryStringQuery { + q.fields = append(q.fields, field) + return q +} + +// Type sets how multiple fields should be combined to build textual part queries, +// e.g. "best_fields". +func (q *QueryStringQuery) Type(typ string) *QueryStringQuery { + q.typ = typ + return q +} + +// FieldWithBoost adds a field to run the query string against with a specific boost. +func (q *QueryStringQuery) FieldWithBoost(field string, boost float64) *QueryStringQuery { + q.fields = append(q.fields, field) + q.fieldBoosts[field] = &boost + return q +} + +// TieBreaker is used when more than one field is used with the query string, +// and combined queries are using dismax. +func (q *QueryStringQuery) TieBreaker(tieBreaker float64) *QueryStringQuery { + q.tieBreaker = &tieBreaker + return q +} + +// DefaultOperator sets the boolean operator of the query parser used to +// parse the query string. +// +// In default mode (OR) terms without any modifiers +// are considered optional, e.g. "capital of Hungary" is equal to +// "capital OR of OR Hungary". +// +// In AND mode, terms are considered to be in conjunction. The above mentioned +// query is then parsed as "capital AND of AND Hungary". +func (q *QueryStringQuery) DefaultOperator(operator string) *QueryStringQuery { + q.defaultOperator = operator + return q +} + +// Analyzer is an optional analyzer used to analyze the query string. +// Note, if a field has search analyzer defined for it, then it will be used +// automatically. Defaults to the smart search analyzer. +func (q *QueryStringQuery) Analyzer(analyzer string) *QueryStringQuery { + q.analyzer = analyzer + return q +} + +// QuoteAnalyzer is an optional analyzer to be used to analyze the query string +// for phrase searches. Note, if a field has search analyzer defined for it, +// then it will be used automatically. Defaults to the smart search analyzer. +func (q *QueryStringQuery) QuoteAnalyzer(quoteAnalyzer string) *QueryStringQuery { + q.quoteAnalyzer = quoteAnalyzer + return q +} + +// MaxDeterminizedState protects against too-difficult regular expression queries. +func (q *QueryStringQuery) MaxDeterminizedState(maxDeterminizedStates int) *QueryStringQuery { + q.maxDeterminizedStates = &maxDeterminizedStates + return q +} + +// AllowLeadingWildcard specifies whether leading wildcards should be allowed +// or not (defaults to true). +func (q *QueryStringQuery) AllowLeadingWildcard(allowLeadingWildcard bool) *QueryStringQuery { + q.allowLeadingWildcard = &allowLeadingWildcard + return q +} + +// LowercaseExpandedTerms indicates whether terms of wildcard, prefix, fuzzy +// and range queries are automatically lower-cased or not. Default is true. +// +// Deprecated: Decision is now made by the analyzer. +func (q *QueryStringQuery) LowercaseExpandedTerms(lowercaseExpandedTerms bool) *QueryStringQuery { + q.lowercaseExpandedTerms = &lowercaseExpandedTerms + return q +} + +// EnablePositionIncrements indicates whether to enable position increments +// in result query. Defaults to true. +// +// When set, result phrase and multi-phrase queries will be aware of position +// increments. Useful when e.g. a StopFilter increases the position increment +// of the token that follows an omitted token. +func (q *QueryStringQuery) EnablePositionIncrements(enablePositionIncrements bool) *QueryStringQuery { + q.enablePositionIncrements = &enablePositionIncrements + return q +} + +// Fuzziness sets the edit distance for fuzzy queries. Default is "AUTO". +func (q *QueryStringQuery) Fuzziness(fuzziness string) *QueryStringQuery { + q.fuzziness = fuzziness + return q +} + +// FuzzyPrefixLength sets the minimum prefix length for fuzzy queries. +// Default is 1. +func (q *QueryStringQuery) FuzzyPrefixLength(fuzzyPrefixLength int) *QueryStringQuery { + q.fuzzyPrefixLength = &fuzzyPrefixLength + return q +} + +func (q *QueryStringQuery) FuzzyMaxExpansions(fuzzyMaxExpansions int) *QueryStringQuery { + q.fuzzyMaxExpansions = &fuzzyMaxExpansions + return q +} + +func (q *QueryStringQuery) FuzzyRewrite(fuzzyRewrite string) *QueryStringQuery { + q.fuzzyRewrite = fuzzyRewrite + return q +} + +// PhraseSlop sets the default slop for phrases. If zero, then exact matches +// are required. Default value is zero. +func (q *QueryStringQuery) PhraseSlop(phraseSlop int) *QueryStringQuery { + q.phraseSlop = &phraseSlop + return q +} + +// AnalyzeWildcard indicates whether to enabled analysis on wildcard and prefix queries. +func (q *QueryStringQuery) AnalyzeWildcard(analyzeWildcard bool) *QueryStringQuery { + q.analyzeWildcard = &analyzeWildcard + return q +} + +func (q *QueryStringQuery) Rewrite(rewrite string) *QueryStringQuery { + q.rewrite = rewrite + return q +} + +func (q *QueryStringQuery) MinimumShouldMatch(minimumShouldMatch string) *QueryStringQuery { + q.minimumShouldMatch = minimumShouldMatch + return q +} + +// Boost sets the boost for this query. +func (q *QueryStringQuery) Boost(boost float64) *QueryStringQuery { + q.boost = &boost + return q +} + +// QuoteFieldSuffix is an optional field name suffix to automatically +// try and add to the field searched when using quoted text. +func (q *QueryStringQuery) QuoteFieldSuffix(quoteFieldSuffix string) *QueryStringQuery { + q.quoteFieldSuffix = quoteFieldSuffix + return q +} + +// Lenient indicates whether the query string parser should be lenient +// when parsing field values. It defaults to the index setting and if not +// set, defaults to false. +func (q *QueryStringQuery) Lenient(lenient bool) *QueryStringQuery { + q.lenient = &lenient + return q +} + +// QueryName sets the query name for the filter that can be used when +// searching for matched_filters per hit. +func (q *QueryStringQuery) QueryName(queryName string) *QueryStringQuery { + q.queryName = queryName + return q +} + +// Locale specifies the locale to be used for string conversions. +// +// Deprecated: Decision is now made by the analyzer. +func (q *QueryStringQuery) Locale(locale string) *QueryStringQuery { + q.locale = locale + return q +} + +// TimeZone can be used to automatically adjust to/from fields using a +// timezone. Only used with date fields, of course. +func (q *QueryStringQuery) TimeZone(timeZone string) *QueryStringQuery { + q.timeZone = timeZone + return q +} + +// Escape performs escaping of the query string. +func (q *QueryStringQuery) Escape(escape bool) *QueryStringQuery { + q.escape = &escape + return q +} + +// Source returns JSON for the query. +func (q *QueryStringQuery) Source() (interface{}, error) { + source := make(map[string]interface{}) + query := make(map[string]interface{}) + source["query_string"] = query + + query["query"] = q.queryString + + if q.defaultField != "" { + query["default_field"] = q.defaultField + } + + if len(q.fields) > 0 { + var fields []string + for _, field := range q.fields { + if boost, found := q.fieldBoosts[field]; found { + if boost != nil { + fields = append(fields, fmt.Sprintf("%s^%f", field, *boost)) + } else { + fields = append(fields, field) + } + } else { + fields = append(fields, field) + } + } + query["fields"] = fields + } + + if q.tieBreaker != nil { + query["tie_breaker"] = *q.tieBreaker + } + if q.defaultOperator != "" { + query["default_operator"] = q.defaultOperator + } + if q.analyzer != "" { + query["analyzer"] = q.analyzer + } + if q.quoteAnalyzer != "" { + query["quote_analyzer"] = q.quoteAnalyzer + } + if q.maxDeterminizedStates != nil { + query["max_determinized_states"] = *q.maxDeterminizedStates + } + if q.allowLeadingWildcard != nil { + query["allow_leading_wildcard"] = *q.allowLeadingWildcard + } + if q.lowercaseExpandedTerms != nil { + query["lowercase_expanded_terms"] = *q.lowercaseExpandedTerms + } + if q.enablePositionIncrements != nil { + query["enable_position_increments"] = *q.enablePositionIncrements + } + if q.fuzziness != "" { + query["fuzziness"] = q.fuzziness + } + if q.boost != nil { + query["boost"] = *q.boost + } + if q.fuzzyPrefixLength != nil { + query["fuzzy_prefix_length"] = *q.fuzzyPrefixLength + } + if q.fuzzyMaxExpansions != nil { + query["fuzzy_max_expansions"] = *q.fuzzyMaxExpansions + } + if q.fuzzyRewrite != "" { + query["fuzzy_rewrite"] = q.fuzzyRewrite + } + if q.phraseSlop != nil { + query["phrase_slop"] = *q.phraseSlop + } + if q.analyzeWildcard != nil { + query["analyze_wildcard"] = *q.analyzeWildcard + } + if q.rewrite != "" { + query["rewrite"] = q.rewrite + } + if q.minimumShouldMatch != "" { + query["minimum_should_match"] = q.minimumShouldMatch + } + if q.quoteFieldSuffix != "" { + query["quote_field_suffix"] = q.quoteFieldSuffix + } + if q.lenient != nil { + query["lenient"] = *q.lenient + } + if q.queryName != "" { + query["_name"] = q.queryName + } + if q.locale != "" { + query["locale"] = q.locale + } + if q.timeZone != "" { + query["time_zone"] = q.timeZone + } + if q.escape != nil { + query["escape"] = *q.escape + } + if q.typ != "" { + query["type"] = q.typ + } + + return source, nil +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_query_string_test.go b/vendor/github.com/olivere/elastic/search_queries_query_string_test.go similarity index 80% rename from vendor/gopkg.in/olivere/elastic.v2/search_queries_query_string_test.go rename to vendor/github.com/olivere/elastic/search_queries_query_string_test.go index aa8e3ad..5030c33 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_query_string_test.go +++ b/vendor/github.com/olivere/elastic/search_queries_query_string_test.go @@ -1,4 +1,4 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. @@ -12,7 +12,11 @@ import ( func TestQueryStringQuery(t *testing.T) { q := NewQueryStringQuery(`this AND that OR thus`) q = q.DefaultField("content") - data, err := json.Marshal(q.Source()) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } @@ -26,7 +30,11 @@ func TestQueryStringQuery(t *testing.T) { func TestQueryStringQueryTimeZone(t *testing.T) { q := NewQueryStringQuery(`tweet_date:[2015-01-01 TO 2017-12-31]`) q = q.TimeZone("Europe/Berlin") - data, err := json.Marshal(q.Source()) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } diff --git a/vendor/github.com/olivere/elastic/search_queries_range.go b/vendor/github.com/olivere/elastic/search_queries_range.go new file mode 100644 index 0000000..5ab4636 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_range.go @@ -0,0 +1,155 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// RangeQuery matches documents with fields that have terms within a certain range. +// +// For details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-range-query.html +type RangeQuery struct { + name string + from interface{} + to interface{} + timeZone string + includeLower bool + includeUpper bool + boost *float64 + queryName string + format string + relation string +} + +// NewRangeQuery creates and initializes a new RangeQuery. +func NewRangeQuery(name string) *RangeQuery { + return &RangeQuery{name: name, includeLower: true, includeUpper: true} +} + +// From indicates the from part of the RangeQuery. +// Use nil to indicate an unbounded from part. +func (q *RangeQuery) From(from interface{}) *RangeQuery { + q.from = from + return q +} + +// Gt indicates a greater-than value for the from part. +// Use nil to indicate an unbounded from part. +func (q *RangeQuery) Gt(from interface{}) *RangeQuery { + q.from = from + q.includeLower = false + return q +} + +// Gte indicates a greater-than-or-equal value for the from part. +// Use nil to indicate an unbounded from part. +func (q *RangeQuery) Gte(from interface{}) *RangeQuery { + q.from = from + q.includeLower = true + return q +} + +// To indicates the to part of the RangeQuery. +// Use nil to indicate an unbounded to part. +func (q *RangeQuery) To(to interface{}) *RangeQuery { + q.to = to + return q +} + +// Lt indicates a less-than value for the to part. +// Use nil to indicate an unbounded to part. +func (q *RangeQuery) Lt(to interface{}) *RangeQuery { + q.to = to + q.includeUpper = false + return q +} + +// Lte indicates a less-than-or-equal value for the to part. +// Use nil to indicate an unbounded to part. +func (q *RangeQuery) Lte(to interface{}) *RangeQuery { + q.to = to + q.includeUpper = true + return q +} + +// IncludeLower indicates whether the lower bound should be included or not. +// Defaults to true. +func (q *RangeQuery) IncludeLower(includeLower bool) *RangeQuery { + q.includeLower = includeLower + return q +} + +// IncludeUpper indicates whether the upper bound should be included or not. +// Defaults to true. +func (q *RangeQuery) IncludeUpper(includeUpper bool) *RangeQuery { + q.includeUpper = includeUpper + return q +} + +// Boost sets the boost for this query. +func (q *RangeQuery) Boost(boost float64) *RangeQuery { + q.boost = &boost + return q +} + +// QueryName sets the query name for the filter that can be used when +// searching for matched_filters per hit. +func (q *RangeQuery) QueryName(queryName string) *RangeQuery { + q.queryName = queryName + return q +} + +// TimeZone is used for date fields. In that case, we can adjust the +// from/to fields using a timezone. +func (q *RangeQuery) TimeZone(timeZone string) *RangeQuery { + q.timeZone = timeZone + return q +} + +// Format is used for date fields. In that case, we can set the format +// to be used instead of the mapper format. +func (q *RangeQuery) Format(format string) *RangeQuery { + q.format = format + return q +} + +// Relation is used for range fields. which can be one of +// "within", "contains", "intersects" (default) and "disjoint". +func (q *RangeQuery) Relation(relation string) *RangeQuery { + q.relation = relation + return q +} + +// Source returns JSON for the query. +func (q *RangeQuery) Source() (interface{}, error) { + source := make(map[string]interface{}) + + rangeQ := make(map[string]interface{}) + source["range"] = rangeQ + + params := make(map[string]interface{}) + rangeQ[q.name] = params + + params["from"] = q.from + params["to"] = q.to + if q.timeZone != "" { + params["time_zone"] = q.timeZone + } + if q.format != "" { + params["format"] = q.format + } + if q.relation != "" { + params["relation"] = q.relation + } + if q.boost != nil { + params["boost"] = *q.boost + } + params["include_lower"] = q.includeLower + params["include_upper"] = q.includeUpper + + if q.queryName != "" { + rangeQ["_name"] = q.queryName + } + + return source, nil +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_range_test.go b/vendor/github.com/olivere/elastic/search_queries_range_test.go similarity index 76% rename from vendor/gopkg.in/olivere/elastic.v2/search_queries_range_test.go rename to vendor/github.com/olivere/elastic/search_queries_range_test.go index e5b363f..6ee8c2e 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_range_test.go +++ b/vendor/github.com/olivere/elastic/search_queries_range_test.go @@ -1,4 +1,4 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. @@ -10,25 +10,33 @@ import ( ) func TestRangeQuery(t *testing.T) { - q := NewRangeQuery("postDate").From("2010-03-01").To("2010-04-01").Boost(3) + q := NewRangeQuery("postDate").From("2010-03-01").To("2010-04-01").Boost(3).Relation("within") q = q.QueryName("my_query") - data, err := json.Marshal(q.Source()) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } got := string(data) - expected := `{"range":{"_name":"my_query","postDate":{"boost":3,"from":"2010-03-01","include_lower":true,"include_upper":true,"to":"2010-04-01"}}}` + expected := `{"range":{"_name":"my_query","postDate":{"boost":3,"from":"2010-03-01","include_lower":true,"include_upper":true,"relation":"within","to":"2010-04-01"}}}` if got != expected { t.Errorf("expected\n%s\n,got:\n%s", expected, got) } } func TestRangeQueryWithTimeZone(t *testing.T) { - f := NewRangeQuery("born"). + q := NewRangeQuery("born"). Gte("2012-01-01"). Lte("now"). TimeZone("+1:00") - data, err := json.Marshal(f.Source()) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } @@ -44,7 +52,11 @@ func TestRangeQueryWithFormat(t *testing.T) { Gte("2012/01/01"). Lte("now"). Format("yyyy/MM/dd") - data, err := json.Marshal(q.Source()) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_raw_string.go b/vendor/github.com/olivere/elastic/search_queries_raw_string.go similarity index 86% rename from vendor/gopkg.in/olivere/elastic.v2/search_queries_raw_string.go rename to vendor/github.com/olivere/elastic/search_queries_raw_string.go index 6d8b162..3f9685c 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_raw_string.go +++ b/vendor/github.com/olivere/elastic/search_queries_raw_string.go @@ -19,8 +19,8 @@ func NewRawStringQuery(q string) RawStringQuery { } // Source returns the JSON encoded body -func (q RawStringQuery) Source() interface{} { +func (q RawStringQuery) Source() (interface{}, error) { var f interface{} - _ = json.Unmarshal([]byte(q), &f) - return f + err := json.Unmarshal([]byte(q), &f) + return f, err } diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_raw_string_test.go b/vendor/github.com/olivere/elastic/search_queries_raw_string_test.go similarity index 88% rename from vendor/gopkg.in/olivere/elastic.v2/search_queries_raw_string_test.go rename to vendor/github.com/olivere/elastic/search_queries_raw_string_test.go index ac97507..5bb3dac 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_raw_string_test.go +++ b/vendor/github.com/olivere/elastic/search_queries_raw_string_test.go @@ -11,7 +11,10 @@ import ( func TestRawStringQuery(t *testing.T) { q := RawStringQuery(`{"match_all":{}}`) - src := q.Source() + src, err := q.Source() + if err != nil { + t.Fatal(err) + } data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) @@ -25,7 +28,10 @@ func TestRawStringQuery(t *testing.T) { func TestNewRawStringQuery(t *testing.T) { q := NewRawStringQuery(`{"match_all":{}}`) - src := q.Source() + src, err := q.Source() + if err != nil { + t.Fatal(err) + } data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) diff --git a/vendor/github.com/olivere/elastic/search_queries_regexp.go b/vendor/github.com/olivere/elastic/search_queries_regexp.go new file mode 100644 index 0000000..f9234de --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_regexp.go @@ -0,0 +1,82 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// RegexpQuery allows you to use regular expression term queries. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-regexp-query.html +type RegexpQuery struct { + name string + regexp string + flags string + boost *float64 + rewrite string + queryName string + maxDeterminizedStates *int +} + +// NewRegexpQuery creates and initializes a new RegexpQuery. +func NewRegexpQuery(name string, regexp string) *RegexpQuery { + return &RegexpQuery{name: name, regexp: regexp} +} + +// Flags sets the regexp flags. +func (q *RegexpQuery) Flags(flags string) *RegexpQuery { + q.flags = flags + return q +} + +// MaxDeterminizedStates protects against complex regular expressions. +func (q *RegexpQuery) MaxDeterminizedStates(maxDeterminizedStates int) *RegexpQuery { + q.maxDeterminizedStates = &maxDeterminizedStates + return q +} + +// Boost sets the boost for this query. +func (q *RegexpQuery) Boost(boost float64) *RegexpQuery { + q.boost = &boost + return q +} + +func (q *RegexpQuery) Rewrite(rewrite string) *RegexpQuery { + q.rewrite = rewrite + return q +} + +// QueryName sets the query name for the filter that can be used +// when searching for matched_filters per hit +func (q *RegexpQuery) QueryName(queryName string) *RegexpQuery { + q.queryName = queryName + return q +} + +// Source returns the JSON-serializable query data. +func (q *RegexpQuery) Source() (interface{}, error) { + source := make(map[string]interface{}) + query := make(map[string]interface{}) + source["regexp"] = query + + x := make(map[string]interface{}) + x["value"] = q.regexp + if q.flags != "" { + x["flags"] = q.flags + } + if q.maxDeterminizedStates != nil { + x["max_determinized_states"] = *q.maxDeterminizedStates + } + if q.boost != nil { + x["boost"] = *q.boost + } + if q.rewrite != "" { + x["rewrite"] = q.rewrite + } + if q.queryName != "" { + x["name"] = q.queryName + } + query[q.name] = x + + return source, nil +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_regexp_test.go b/vendor/github.com/olivere/elastic/search_queries_regexp_test.go similarity index 79% rename from vendor/gopkg.in/olivere/elastic.v2/search_queries_regexp_test.go rename to vendor/github.com/olivere/elastic/search_queries_regexp_test.go index cfd4b6a..d30c0a3 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_regexp_test.go +++ b/vendor/github.com/olivere/elastic/search_queries_regexp_test.go @@ -1,4 +1,4 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. @@ -11,7 +11,11 @@ import ( func TestRegexpQuery(t *testing.T) { q := NewRegexpQuery("name.first", "s.*y") - data, err := json.Marshal(q.Source()) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } @@ -27,7 +31,11 @@ func TestRegexpQueryWithOptions(t *testing.T) { Boost(1.2). Flags("INTERSECTION|COMPLEMENT|EMPTY"). QueryName("my_query_name") - data, err := json.Marshal(q.Source()) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } diff --git a/vendor/github.com/olivere/elastic/search_queries_script.go b/vendor/github.com/olivere/elastic/search_queries_script.go new file mode 100644 index 0000000..b75e318 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_script.go @@ -0,0 +1,51 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import "errors" + +// ScriptQuery allows to define scripts as filters. +// +// For details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-script-query.html +type ScriptQuery struct { + script *Script + queryName string +} + +// NewScriptQuery creates and initializes a new ScriptQuery. +func NewScriptQuery(script *Script) *ScriptQuery { + return &ScriptQuery{ + script: script, + } +} + +// QueryName sets the query name for the filter that can be used +// when searching for matched_filters per hit +func (q *ScriptQuery) QueryName(queryName string) *ScriptQuery { + q.queryName = queryName + return q +} + +// Source returns JSON for the query. +func (q *ScriptQuery) Source() (interface{}, error) { + if q.script == nil { + return nil, errors.New("ScriptQuery expected a script") + } + source := make(map[string]interface{}) + params := make(map[string]interface{}) + source["script"] = params + + src, err := q.script.Source() + if err != nil { + return nil, err + } + params["script"] = src + + if q.queryName != "" { + params["_name"] = q.queryName + } + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_queries_script_test.go b/vendor/github.com/olivere/elastic/search_queries_script_test.go new file mode 100644 index 0000000..66ec106 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_script_test.go @@ -0,0 +1,45 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestScriptQuery(t *testing.T) { + q := NewScriptQuery(NewScript("doc['num1'.value > 1")) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"script":{"script":{"source":"doc['num1'.value \u003e 1"}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestScriptQueryWithParams(t *testing.T) { + q := NewScriptQuery(NewScript("doc['num1'.value > 1")) + q = q.QueryName("MyQueryName") + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"script":{"_name":"MyQueryName","script":{"source":"doc['num1'.value \u003e 1"}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_queries_simple_query_string.go b/vendor/github.com/olivere/elastic/search_queries_simple_query_string.go new file mode 100644 index 0000000..ebb176c --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_simple_query_string.go @@ -0,0 +1,185 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "fmt" + "strings" +) + +// SimpleQueryStringQuery is a query that uses the SimpleQueryParser +// to parse its context. Unlike the regular query_string query, +// the simple_query_string query will never throw an exception, +// and discards invalid parts of the query. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-simple-query-string-query.html +type SimpleQueryStringQuery struct { + queryText string + analyzer string + operator string + fields []string + fieldBoosts map[string]*float64 + minimumShouldMatch string + flags string + boost *float64 + lowercaseExpandedTerms *bool + lenient *bool + analyzeWildcard *bool + locale string + queryName string +} + +// NewSimpleQueryStringQuery creates and initializes a new SimpleQueryStringQuery. +func NewSimpleQueryStringQuery(text string) *SimpleQueryStringQuery { + return &SimpleQueryStringQuery{ + queryText: text, + fields: make([]string, 0), + fieldBoosts: make(map[string]*float64), + } +} + +// Field adds a field to run the query against. +func (q *SimpleQueryStringQuery) Field(field string) *SimpleQueryStringQuery { + q.fields = append(q.fields, field) + return q +} + +// Field adds a field to run the query against with a specific boost. +func (q *SimpleQueryStringQuery) FieldWithBoost(field string, boost float64) *SimpleQueryStringQuery { + q.fields = append(q.fields, field) + q.fieldBoosts[field] = &boost + return q +} + +// Boost sets the boost for this query. +func (q *SimpleQueryStringQuery) Boost(boost float64) *SimpleQueryStringQuery { + q.boost = &boost + return q +} + +// QueryName sets the query name for the filter that can be used when +// searching for matched_filters per hit. +func (q *SimpleQueryStringQuery) QueryName(queryName string) *SimpleQueryStringQuery { + q.queryName = queryName + return q +} + +// Analyzer specifies the analyzer to use for the query. +func (q *SimpleQueryStringQuery) Analyzer(analyzer string) *SimpleQueryStringQuery { + q.analyzer = analyzer + return q +} + +// DefaultOperator specifies the default operator for the query. +func (q *SimpleQueryStringQuery) DefaultOperator(defaultOperator string) *SimpleQueryStringQuery { + q.operator = defaultOperator + return q +} + +// Flags sets the flags for the query. +func (q *SimpleQueryStringQuery) Flags(flags string) *SimpleQueryStringQuery { + q.flags = flags + return q +} + +// LowercaseExpandedTerms indicates whether terms of wildcard, prefix, fuzzy +// and range queries are automatically lower-cased or not. Default is true. +func (q *SimpleQueryStringQuery) LowercaseExpandedTerms(lowercaseExpandedTerms bool) *SimpleQueryStringQuery { + q.lowercaseExpandedTerms = &lowercaseExpandedTerms + return q +} + +func (q *SimpleQueryStringQuery) Locale(locale string) *SimpleQueryStringQuery { + q.locale = locale + return q +} + +// Lenient indicates whether the query string parser should be lenient +// when parsing field values. It defaults to the index setting and if not +// set, defaults to false. +func (q *SimpleQueryStringQuery) Lenient(lenient bool) *SimpleQueryStringQuery { + q.lenient = &lenient + return q +} + +// AnalyzeWildcard indicates whether to enabled analysis on wildcard and prefix queries. +func (q *SimpleQueryStringQuery) AnalyzeWildcard(analyzeWildcard bool) *SimpleQueryStringQuery { + q.analyzeWildcard = &analyzeWildcard + return q +} + +func (q *SimpleQueryStringQuery) MinimumShouldMatch(minimumShouldMatch string) *SimpleQueryStringQuery { + q.minimumShouldMatch = minimumShouldMatch + return q +} + +// Source returns JSON for the query. +func (q *SimpleQueryStringQuery) Source() (interface{}, error) { + // { + // "simple_query_string" : { + // "query" : "\"fried eggs\" +(eggplant | potato) -frittata", + // "analyzer" : "snowball", + // "fields" : ["body^5","_all"], + // "default_operator" : "and" + // } + // } + + source := make(map[string]interface{}) + + query := make(map[string]interface{}) + source["simple_query_string"] = query + + query["query"] = q.queryText + + if len(q.fields) > 0 { + var fields []string + for _, field := range q.fields { + if boost, found := q.fieldBoosts[field]; found { + if boost != nil { + fields = append(fields, fmt.Sprintf("%s^%f", field, *boost)) + } else { + fields = append(fields, field) + } + } else { + fields = append(fields, field) + } + } + query["fields"] = fields + } + + if q.flags != "" { + query["flags"] = q.flags + } + if q.analyzer != "" { + query["analyzer"] = q.analyzer + } + if q.operator != "" { + query["default_operator"] = strings.ToLower(q.operator) + } + if q.lowercaseExpandedTerms != nil { + query["lowercase_expanded_terms"] = *q.lowercaseExpandedTerms + } + if q.lenient != nil { + query["lenient"] = *q.lenient + } + if q.analyzeWildcard != nil { + query["analyze_wildcard"] = *q.analyzeWildcard + } + if q.locale != "" { + query["locale"] = q.locale + } + if q.queryName != "" { + query["_name"] = q.queryName + } + if q.minimumShouldMatch != "" { + query["minimum_should_match"] = q.minimumShouldMatch + } + if q.boost != nil { + query["boost"] = *q.boost + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_queries_simple_query_string_test.go b/vendor/github.com/olivere/elastic/search_queries_simple_query_string_test.go new file mode 100644 index 0000000..ea4a341 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_simple_query_string_test.go @@ -0,0 +1,87 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "testing" +) + +func TestSimpleQueryStringQuery(t *testing.T) { + q := NewSimpleQueryStringQuery(`"fried eggs" +(eggplant | potato) -frittata`) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"simple_query_string":{"query":"\"fried eggs\" +(eggplant | potato) -frittata"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSimpleQueryStringQueryExec(t *testing.T) { + // client := setupTestClientAndCreateIndexAndLog(t, SetTraceLog(log.New(os.Stdout, "", 0))) + client := setupTestClientAndCreateIndex(t) + + tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} + tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} + tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} + + // Add all documents + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Match all should return all documents + searchResult, err := client.Search(). + Index(testIndexName). + Query(NewSimpleQueryStringQuery("+Golang +Elasticsearch")). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if searchResult.Hits == nil { + t.Errorf("expected SearchResult.Hits != nil; got nil") + } + if searchResult.Hits.TotalHits != 1 { + t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 1, searchResult.Hits.TotalHits) + } + if len(searchResult.Hits.Hits) != 1 { + t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", 1, len(searchResult.Hits.Hits)) + } + + for _, hit := range searchResult.Hits.Hits { + if hit.Index != testIndexName { + t.Errorf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) + } + item := make(map[string]interface{}) + err := json.Unmarshal(*hit.Source, &item) + if err != nil { + t.Fatal(err) + } + } +} diff --git a/vendor/github.com/olivere/elastic/search_queries_slice.go b/vendor/github.com/olivere/elastic/search_queries_slice.go new file mode 100644 index 0000000..0f58fb5 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_slice.go @@ -0,0 +1,53 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// SliceQuery allows to partition the documents into several slices. +// It is used e.g. to slice scroll operations in Elasticsearch 5.0 or later. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-scroll.html#sliced-scroll +// for details. +type SliceQuery struct { + field string + id *int + max *int +} + +// NewSliceQuery creates a new SliceQuery. +func NewSliceQuery() *SliceQuery { + return &SliceQuery{} +} + +// Field is the name of the field to slice against (_uid by default). +func (s *SliceQuery) Field(field string) *SliceQuery { + s.field = field + return s +} + +// Id is the id of the slice. +func (s *SliceQuery) Id(id int) *SliceQuery { + s.id = &id + return s +} + +// Max is the maximum number of slices. +func (s *SliceQuery) Max(max int) *SliceQuery { + s.max = &max + return s +} + +// Source returns the JSON body. +func (s *SliceQuery) Source() (interface{}, error) { + m := make(map[string]interface{}) + if s.field != "" { + m["field"] = s.field + } + if s.id != nil { + m["id"] = *s.id + } + if s.max != nil { + m["max"] = *s.max + } + return m, nil +} diff --git a/vendor/github.com/olivere/elastic/search_queries_slice_test.go b/vendor/github.com/olivere/elastic/search_queries_slice_test.go new file mode 100644 index 0000000..0589f4e --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_slice_test.go @@ -0,0 +1,27 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestSliceQuery(t *testing.T) { + q := NewSliceQuery().Field("date").Id(0).Max(2) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"field":"date","id":0,"max":2}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_queries_term.go b/vendor/github.com/olivere/elastic/search_queries_term.go new file mode 100644 index 0000000..d495fda --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_term.go @@ -0,0 +1,58 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// TermQuery finds documents that contain the exact term specified +// in the inverted index. +// +// For details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-term-query.html +type TermQuery struct { + name string + value interface{} + boost *float64 + queryName string +} + +// NewTermQuery creates and initializes a new TermQuery. +func NewTermQuery(name string, value interface{}) *TermQuery { + return &TermQuery{name: name, value: value} +} + +// Boost sets the boost for this query. +func (q *TermQuery) Boost(boost float64) *TermQuery { + q.boost = &boost + return q +} + +// QueryName sets the query name for the filter that can be used +// when searching for matched_filters per hit +func (q *TermQuery) QueryName(queryName string) *TermQuery { + q.queryName = queryName + return q +} + +// Source returns JSON for the query. +func (q *TermQuery) Source() (interface{}, error) { + // {"term":{"name":"value"}} + source := make(map[string]interface{}) + tq := make(map[string]interface{}) + source["term"] = tq + + if q.boost == nil && q.queryName == "" { + tq[q.name] = q.value + } else { + subQ := make(map[string]interface{}) + subQ["value"] = q.value + if q.boost != nil { + subQ["boost"] = *q.boost + } + if q.queryName != "" { + subQ["_name"] = q.queryName + } + tq[q.name] = subQ + } + return source, nil +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_term_test.go b/vendor/github.com/olivere/elastic/search_queries_term_test.go similarity index 77% rename from vendor/gopkg.in/olivere/elastic.v2/search_queries_term_test.go rename to vendor/github.com/olivere/elastic/search_queries_term_test.go index 09da984..f800fa9 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_term_test.go +++ b/vendor/github.com/olivere/elastic/search_queries_term_test.go @@ -1,4 +1,4 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. @@ -11,7 +11,11 @@ import ( func TestTermQuery(t *testing.T) { q := NewTermQuery("user", "ki") - data, err := json.Marshal(q.Source()) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } @@ -26,7 +30,11 @@ func TestTermQueryWithOptions(t *testing.T) { q := NewTermQuery("user", "ki") q = q.Boost(2.79) q = q.QueryName("my_tq") - data, err := json.Marshal(q.Source()) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } diff --git a/vendor/github.com/olivere/elastic/search_queries_terms.go b/vendor/github.com/olivere/elastic/search_queries_terms.go new file mode 100644 index 0000000..aaa47e8 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_terms.go @@ -0,0 +1,75 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// TermsQuery filters documents that have fields that match any +// of the provided terms (not analyzed). +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-terms-query.html +type TermsQuery struct { + name string + values []interface{} + termsLookup *TermsLookup + queryName string + boost *float64 +} + +// NewTermsQuery creates and initializes a new TermsQuery. +func NewTermsQuery(name string, values ...interface{}) *TermsQuery { + q := &TermsQuery{ + name: name, + values: make([]interface{}, 0), + } + if len(values) > 0 { + q.values = append(q.values, values...) + } + return q +} + +// TermsLookup adds terms lookup details to the query. +func (q *TermsQuery) TermsLookup(lookup *TermsLookup) *TermsQuery { + q.termsLookup = lookup + return q +} + +// Boost sets the boost for this query. +func (q *TermsQuery) Boost(boost float64) *TermsQuery { + q.boost = &boost + return q +} + +// QueryName sets the query name for the filter that can be used +// when searching for matched_filters per hit +func (q *TermsQuery) QueryName(queryName string) *TermsQuery { + q.queryName = queryName + return q +} + +// Creates the query source for the term query. +func (q *TermsQuery) Source() (interface{}, error) { + // {"terms":{"name":["value1","value2"]}} + source := make(map[string]interface{}) + params := make(map[string]interface{}) + source["terms"] = params + + if q.termsLookup != nil { + src, err := q.termsLookup.Source() + if err != nil { + return nil, err + } + params[q.name] = src + } else { + params[q.name] = q.values + if q.boost != nil { + params["boost"] = *q.boost + } + if q.queryName != "" { + params["_name"] = q.queryName + } + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_queries_terms_set.go b/vendor/github.com/olivere/elastic/search_queries_terms_set.go new file mode 100644 index 0000000..22afcb8 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_terms_set.go @@ -0,0 +1,96 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// TermsSetQuery returns any documents that match with at least +// one or more of the provided terms. The terms are not analyzed +// and thus must match exactly. The number of terms that must +// match varies per document and is either controlled by a +// minimum should match field or computed per document in a +// minimum should match script. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-terms-set-query.html +type TermsSetQuery struct { + name string + values []interface{} + minimumShouldMatchField string + minimumShouldMatchScript *Script + queryName string + boost *float64 +} + +// NewTermsSetQuery creates and initializes a new TermsSetQuery. +func NewTermsSetQuery(name string, values ...interface{}) *TermsSetQuery { + q := &TermsSetQuery{ + name: name, + } + if len(values) > 0 { + q.values = append(q.values, values...) + } + return q +} + +// MinimumShouldMatchField specifies the field to match. +func (q *TermsSetQuery) MinimumShouldMatchField(minimumShouldMatchField string) *TermsSetQuery { + q.minimumShouldMatchField = minimumShouldMatchField + return q +} + +// MinimumShouldMatchScript specifies the script to match. +func (q *TermsSetQuery) MinimumShouldMatchScript(minimumShouldMatchScript *Script) *TermsSetQuery { + q.minimumShouldMatchScript = minimumShouldMatchScript + return q +} + +// Boost sets the boost for this query. +func (q *TermsSetQuery) Boost(boost float64) *TermsSetQuery { + q.boost = &boost + return q +} + +// QueryName sets the query name for the filter that can be used +// when searching for matched_filters per hit +func (q *TermsSetQuery) QueryName(queryName string) *TermsSetQuery { + q.queryName = queryName + return q +} + +// Source creates the query source for the term query. +func (q *TermsSetQuery) Source() (interface{}, error) { + // {"terms_set":{"codes":{"terms":["abc","def"],"minimum_should_match_field":"required_matches"}}} + source := make(map[string]interface{}) + inner := make(map[string]interface{}) + params := make(map[string]interface{}) + inner[q.name] = params + source["terms_set"] = inner + + // terms + params["terms"] = q.values + + // minimum_should_match_field + if match := q.minimumShouldMatchField; match != "" { + params["minimum_should_match_field"] = match + } + + // minimum_should_match_script + if match := q.minimumShouldMatchScript; match != nil { + src, err := match.Source() + if err != nil { + return nil, err + } + params["minimum_should_match_script"] = src + } + + // Common parameters for all queries + if q.boost != nil { + params["boost"] = *q.boost + } + if q.queryName != "" { + params["_name"] = q.queryName + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_queries_terms_set_test.go b/vendor/github.com/olivere/elastic/search_queries_terms_set_test.go new file mode 100644 index 0000000..e13fbfb --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_terms_set_test.go @@ -0,0 +1,75 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "testing" +) + +func TestTermsSetQueryWithField(t *testing.T) { + q := NewTermsSetQuery("codes", "abc", "def", "ghi").MinimumShouldMatchField("required_matches") + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"terms_set":{"codes":{"minimum_should_match_field":"required_matches","terms":["abc","def","ghi"]}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestTermsSetQueryWithScript(t *testing.T) { + q := NewTermsSetQuery("codes", "abc", "def", "ghi"). + MinimumShouldMatchScript( + NewScript(`Math.min(params.num_terms, doc['required_matches'].value)`), + ) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"terms_set":{"codes":{"minimum_should_match_script":{"source":"Math.min(params.num_terms, doc['required_matches'].value)"},"terms":["abc","def","ghi"]}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSearchTermsSetQuery(t *testing.T) { + //client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) + client := setupTestClientAndCreateIndexAndAddDocs(t) + + // Match all should return all documents + searchResult, err := client.Search(). + Index(testIndexName). + Query( + NewTermsSetQuery("user", "olivere", "sandrae"). + MinimumShouldMatchField("retweets"), + ). + Pretty(true). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if searchResult.Hits == nil { + t.Errorf("expected SearchResult.Hits != nil; got nil") + } + if got, want := searchResult.Hits.TotalHits, int64(3); got != want { + t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", want, got) + } + if got, want := len(searchResult.Hits.Hits), 3; got != want { + t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", want, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_queries_terms_test.go b/vendor/github.com/olivere/elastic/search_queries_terms_test.go new file mode 100644 index 0000000..72f472d --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_terms_test.go @@ -0,0 +1,82 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestTermsQuery(t *testing.T) { + q := NewTermsQuery("user", "ki") + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"terms":{"user":["ki"]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestTermsQueryWithEmptyArray(t *testing.T) { + included := make([]interface{}, 0) + q := NewTermsQuery("tags", included...) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"terms":{"tags":[]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestTermsQueryWithTermsLookup(t *testing.T) { + q := NewTermsQuery("user"). + TermsLookup(NewTermsLookup().Index("users").Type("user").Id("2").Path("followers")) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"terms":{"user":{"id":"2","index":"users","path":"followers","type":"user"}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestTermQuerysWithOptions(t *testing.T) { + q := NewTermsQuery("user", "ki", "ko") + q = q.Boost(2.79) + q = q.QueryName("my_tq") + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"terms":{"_name":"my_tq","boost":2.79,"user":["ki","ko"]}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_queries_type.go b/vendor/github.com/olivere/elastic/search_queries_type.go new file mode 100644 index 0000000..3ca8d50 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_type.go @@ -0,0 +1,26 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// TypeQuery filters documents matching the provided document / mapping type. +// +// For details, see: +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-type-query.html +type TypeQuery struct { + typ string +} + +func NewTypeQuery(typ string) *TypeQuery { + return &TypeQuery{typ: typ} +} + +// Source returns JSON for the query. +func (q *TypeQuery) Source() (interface{}, error) { + source := make(map[string]interface{}) + params := make(map[string]interface{}) + source["type"] = params + params["value"] = q.typ + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_queries_type_test.go b/vendor/github.com/olivere/elastic/search_queries_type_test.go new file mode 100644 index 0000000..176b82a --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_type_test.go @@ -0,0 +1,27 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestTypeQuery(t *testing.T) { + q := NewTypeQuery("my_type") + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"type":{"value":"my_type"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_queries_wildcard.go b/vendor/github.com/olivere/elastic/search_queries_wildcard.go new file mode 100644 index 0000000..de7da66 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_wildcard.go @@ -0,0 +1,81 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// WildcardQuery matches documents that have fields matching a wildcard +// expression (not analyzed). Supported wildcards are *, which matches +// any character sequence (including the empty one), and ?, which matches +// any single character. Note this query can be slow, as it needs to iterate +// over many terms. In order to prevent extremely slow wildcard queries, +// a wildcard term should not start with one of the wildcards * or ?. +// The wildcard query maps to Lucene WildcardQuery. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-wildcard-query.html +type WildcardQuery struct { + name string + wildcard string + boost *float64 + rewrite string + queryName string +} + +// NewWildcardQuery creates and initializes a new WildcardQuery. +func NewWildcardQuery(name, wildcard string) *WildcardQuery { + return &WildcardQuery{ + name: name, + wildcard: wildcard, + } +} + +// Boost sets the boost for this query. +func (q *WildcardQuery) Boost(boost float64) *WildcardQuery { + q.boost = &boost + return q +} + +func (q *WildcardQuery) Rewrite(rewrite string) *WildcardQuery { + q.rewrite = rewrite + return q +} + +// QueryName sets the name of this query. +func (q *WildcardQuery) QueryName(queryName string) *WildcardQuery { + q.queryName = queryName + return q +} + +// Source returns the JSON serializable body of this query. +func (q *WildcardQuery) Source() (interface{}, error) { + // { + // "wildcard" : { + // "user" : { + // "wildcard" : "ki*y", + // "boost" : 1.0 + // } + // } + + source := make(map[string]interface{}) + + query := make(map[string]interface{}) + source["wildcard"] = query + + wq := make(map[string]interface{}) + query[q.name] = wq + + wq["wildcard"] = q.wildcard + + if q.boost != nil { + wq["boost"] = *q.boost + } + if q.rewrite != "" { + wq["rewrite"] = q.rewrite + } + if q.queryName != "" { + wq["_name"] = q.queryName + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_queries_wildcard_test.go b/vendor/github.com/olivere/elastic/search_queries_wildcard_test.go new file mode 100644 index 0000000..b41c8ab --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_queries_wildcard_test.go @@ -0,0 +1,68 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic_test + +import ( + "context" + "encoding/json" + "testing" + + "github.com/olivere/elastic" +) + +func ExampleWildcardQuery() { + // Get a client to the local Elasticsearch instance. + client, err := elastic.NewClient() + if err != nil { + // Handle error + panic(err) + } + + // Define wildcard query + q := elastic.NewWildcardQuery("user", "oli*er?").Boost(1.2) + searchResult, err := client.Search(). + Index("twitter"). // search in index "twitter" + Query(q). // use wildcard query defined above + Do(context.TODO()) // execute + if err != nil { + // Handle error + panic(err) + } + _ = searchResult +} + +func TestWildcardQuery(t *testing.T) { + q := elastic.NewWildcardQuery("user", "ki*y??") + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"wildcard":{"user":{"wildcard":"ki*y??"}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestWildcardQueryWithBoost(t *testing.T) { + q := elastic.NewWildcardQuery("user", "ki*y??").Boost(1.2) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"wildcard":{"user":{"boost":1.2,"wildcard":"ki*y??"}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_request.go b/vendor/github.com/olivere/elastic/search_request.go new file mode 100644 index 0000000..b07dce6 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_request.go @@ -0,0 +1,211 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "strings" +) + +// SearchRequest combines a search request and its +// query details (see SearchSource). +// It is used in combination with MultiSearch. +type SearchRequest struct { + searchType string + indices []string + types []string + routing *string + preference *string + requestCache *bool + ignoreUnavailable *bool + allowNoIndices *bool + expandWildcards string + scroll string + source interface{} +} + +// NewSearchRequest creates a new search request. +func NewSearchRequest() *SearchRequest { + return &SearchRequest{} +} + +// SearchRequest must be one of "dfs_query_then_fetch" or +// "query_then_fetch". +func (r *SearchRequest) SearchType(searchType string) *SearchRequest { + r.searchType = searchType + return r +} + +// SearchTypeDfsQueryThenFetch sets search type to dfs_query_then_fetch. +func (r *SearchRequest) SearchTypeDfsQueryThenFetch() *SearchRequest { + return r.SearchType("dfs_query_then_fetch") +} + +// SearchTypeQueryThenFetch sets search type to query_then_fetch. +func (r *SearchRequest) SearchTypeQueryThenFetch() *SearchRequest { + return r.SearchType("query_then_fetch") +} + +func (r *SearchRequest) Index(indices ...string) *SearchRequest { + r.indices = append(r.indices, indices...) + return r +} + +func (r *SearchRequest) HasIndices() bool { + return len(r.indices) > 0 +} + +func (r *SearchRequest) Type(types ...string) *SearchRequest { + r.types = append(r.types, types...) + return r +} + +func (r *SearchRequest) Routing(routing string) *SearchRequest { + r.routing = &routing + return r +} + +func (r *SearchRequest) Routings(routings ...string) *SearchRequest { + if routings != nil { + routings := strings.Join(routings, ",") + r.routing = &routings + } else { + r.routing = nil + } + return r +} + +func (r *SearchRequest) Preference(preference string) *SearchRequest { + r.preference = &preference + return r +} + +func (r *SearchRequest) RequestCache(requestCache bool) *SearchRequest { + r.requestCache = &requestCache + return r +} + +// IgnoreUnavailable indicates whether specified concrete indices should be +// ignored when unavailable (missing or closed). +func (s *SearchRequest) IgnoreUnavailable(ignoreUnavailable bool) *SearchRequest { + s.ignoreUnavailable = &ignoreUnavailable + return s +} + +// AllowNoIndices indicates whether to ignore if a wildcard indices +// expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified). +func (s *SearchRequest) AllowNoIndices(allowNoIndices bool) *SearchRequest { + s.allowNoIndices = &allowNoIndices + return s +} + +// ExpandWildcards indicates whether to expand wildcard expression to +// concrete indices that are open, closed or both. +func (s *SearchRequest) ExpandWildcards(expandWildcards string) *SearchRequest { + s.expandWildcards = expandWildcards + return s +} + +func (r *SearchRequest) Scroll(scroll string) *SearchRequest { + r.scroll = scroll + return r +} + +func (r *SearchRequest) SearchSource(searchSource *SearchSource) *SearchRequest { + return r.Source(searchSource) +} + +func (r *SearchRequest) Source(source interface{}) *SearchRequest { + r.source = source + return r +} + +// header is used e.g. by MultiSearch to get information about the search header +// of one SearchRequest. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-multi-search.html +func (r *SearchRequest) header() interface{} { + h := make(map[string]interface{}) + if r.searchType != "" { + h["search_type"] = r.searchType + } + + switch len(r.indices) { + case 0: + case 1: + h["index"] = r.indices[0] + default: + h["indices"] = r.indices + } + + switch len(r.types) { + case 0: + case 1: + h["type"] = r.types[0] + default: + h["types"] = r.types + } + + if r.routing != nil && *r.routing != "" { + h["routing"] = *r.routing + } + if r.preference != nil && *r.preference != "" { + h["preference"] = *r.preference + } + if r.requestCache != nil { + h["request_cache"] = *r.requestCache + } + if r.ignoreUnavailable != nil { + h["ignore_unavailable"] = *r.ignoreUnavailable + } + if r.allowNoIndices != nil { + h["allow_no_indices"] = *r.allowNoIndices + } + if r.expandWildcards != "" { + h["expand_wildcards"] = r.expandWildcards + } + if r.scroll != "" { + h["scroll"] = r.scroll + } + + return h +} + +// Body allows to access the search body of the request, as generated by the DSL. +// Notice that Body is read-only. You must not change the request body. +// +// Body is used e.g. by MultiSearch to get information about the search body +// of one SearchRequest. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-multi-search.html +func (r *SearchRequest) Body() (string, error) { + switch t := r.source.(type) { + default: + body, err := json.Marshal(r.source) + if err != nil { + return "", err + } + return string(body), nil + case *SearchSource: + src, err := t.Source() + if err != nil { + return "", err + } + body, err := json.Marshal(src) + if err != nil { + return "", err + } + return string(body), nil + case json.RawMessage: + return string(t), nil + case *json.RawMessage: + return string(*t), nil + case string: + return t, nil + case *string: + if t != nil { + return *t, nil + } + return "{}", nil + } +} diff --git a/vendor/github.com/olivere/elastic/search_request_test.go b/vendor/github.com/olivere/elastic/search_request_test.go new file mode 100644 index 0000000..fa03af2 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_request_test.go @@ -0,0 +1,61 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + _ "net/http" + "testing" +) + +func TestSearchRequestIndex(t *testing.T) { + builder := NewSearchRequest().Index("test") + data, err := json.Marshal(builder.header()) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"index":"test"}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSearchRequestIndices(t *testing.T) { + builder := NewSearchRequest().Index("test", "test2") + data, err := json.Marshal(builder.header()) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"indices":["test","test2"]}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSearchRequestHasIndices(t *testing.T) { + builder := NewSearchRequest() + if builder.HasIndices() { + t.Errorf("expected HasIndices to return true; got %v", builder.HasIndices()) + } + builder = builder.Index("test", "test2") + if !builder.HasIndices() { + t.Errorf("expected HasIndices to return false; got %v", builder.HasIndices()) + } +} + +func TestSearchRequestIgnoreUnavailable(t *testing.T) { + builder := NewSearchRequest().Index("test").IgnoreUnavailable(true) + data, err := json.Marshal(builder.header()) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"ignore_unavailable":true,"index":"test"}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_shards.go b/vendor/github.com/olivere/elastic/search_shards.go new file mode 100644 index 0000000..cd7383e --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_shards.go @@ -0,0 +1,184 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" + "strings" + + "github.com/olivere/elastic/uritemplates" +) + +// SearchShardsService returns the indices and shards that a search request would be executed against. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-shards.html +type SearchShardsService struct { + client *Client + pretty bool + index []string + routing string + local *bool + preference string + ignoreUnavailable *bool + allowNoIndices *bool + expandWildcards string +} + +// NewSearchShardsService creates a new SearchShardsService. +func NewSearchShardsService(client *Client) *SearchShardsService { + return &SearchShardsService{ + client: client, + } +} + +// Index sets the names of the indices to restrict the results. +func (s *SearchShardsService) Index(index ...string) *SearchShardsService { + s.index = append(s.index, index...) + return s +} + +//A boolean value whether to read the cluster state locally in order to +//determine where shards are allocated instead of using the Master node’s cluster state. +func (s *SearchShardsService) Local(local bool) *SearchShardsService { + s.local = &local + return s +} + +// Routing sets a specific routing value. +func (s *SearchShardsService) Routing(routing string) *SearchShardsService { + s.routing = routing + return s +} + +// Preference specifies the node or shard the operation should be performed on (default: random). +func (s *SearchShardsService) Preference(preference string) *SearchShardsService { + s.preference = preference + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *SearchShardsService) Pretty(pretty bool) *SearchShardsService { + s.pretty = pretty + return s +} + +// IgnoreUnavailable indicates whether the specified concrete indices +// should be ignored when unavailable (missing or closed). +func (s *SearchShardsService) IgnoreUnavailable(ignoreUnavailable bool) *SearchShardsService { + s.ignoreUnavailable = &ignoreUnavailable + return s +} + +// AllowNoIndices indicates whether to ignore if a wildcard indices +// expression resolves into no concrete indices. (This includes `_all` string +// or when no indices have been specified). +func (s *SearchShardsService) AllowNoIndices(allowNoIndices bool) *SearchShardsService { + s.allowNoIndices = &allowNoIndices + return s +} + +// ExpandWildcards indicates whether to expand wildcard expression to +// concrete indices that are open, closed or both. +func (s *SearchShardsService) ExpandWildcards(expandWildcards string) *SearchShardsService { + s.expandWildcards = expandWildcards + return s +} + +// buildURL builds the URL for the operation. +func (s *SearchShardsService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/{index}/_search_shards", map[string]string{ + "index": strings.Join(s.index, ","), + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.preference != "" { + params.Set("preference", s.preference) + } + if s.local != nil { + params.Set("local", fmt.Sprintf("%v", *s.local)) + } + if s.routing != "" { + params.Set("routing", s.routing) + } + if s.allowNoIndices != nil { + params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) + } + if s.expandWildcards != "" { + params.Set("expand_wildcards", s.expandWildcards) + } + if s.ignoreUnavailable != nil { + params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *SearchShardsService) Validate() error { + var invalid []string + if len(s.index) < 1 { + invalid = append(invalid, "Index") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *SearchShardsService) Do(ctx context.Context) (*SearchShardsResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(SearchShardsResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// SearchShardsResponse is the response of SearchShardsService.Do. +type SearchShardsResponse struct { + Nodes map[string]interface{} `json:"nodes"` + Indices map[string]interface{} `json:"indices"` + Shards [][]ShardsInfo `json:"shards"` +} + +type ShardsInfo struct { + Index string `json:"index"` + Node string `json:"node"` + Primary bool `json:"primary"` + Shard uint `json:"shard"` + State string `json:"state"` + AllocationId interface{} `json:"allocation_id"` + RelocatingNode bool `json:"relocating_node"` +} diff --git a/vendor/github.com/olivere/elastic/search_shards_test.go b/vendor/github.com/olivere/elastic/search_shards_test.go new file mode 100644 index 0000000..de1ddbe --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_shards_test.go @@ -0,0 +1,35 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "testing" +) + +func TestSearchShards(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + indexes := []string{testIndexName} + + shardsInfo, err := client.SearchShards(indexes...).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if shardsInfo == nil { + t.Fatal("expected to return an shards information") + } + if len(shardsInfo.Shards) < 1 { + t.Fatal("expected to return minimun one shard information") + } + + if shardsInfo.Shards[0][0].Index != testIndexName { + t.Fatal("expected to return shard info concerning requested index") + } + + if shardsInfo.Shards[0][0].State != "STARTED" { + t.Fatal("expected to return STARTED status for running shards") + } +} diff --git a/vendor/github.com/olivere/elastic/search_source.go b/vendor/github.com/olivere/elastic/search_source.go new file mode 100644 index 0000000..35dc024 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_source.go @@ -0,0 +1,546 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "fmt" +) + +// SearchSource enables users to build the search source. +// It resembles the SearchSourceBuilder in Elasticsearch. +type SearchSource struct { + query Query + postQuery Query + sliceQuery Query + from int + size int + explain *bool + version *bool + sorters []Sorter + trackScores bool + searchAfterSortValues []interface{} + minScore *float64 + timeout string + terminateAfter *int + storedFieldNames []string + docvalueFields []string + scriptFields []*ScriptField + fetchSourceContext *FetchSourceContext + aggregations map[string]Aggregation + highlight *Highlight + globalSuggestText string + suggesters []Suggester + rescores []*Rescore + defaultRescoreWindowSize *int + indexBoosts map[string]float64 + stats []string + innerHits map[string]*InnerHit + collapse *CollapseBuilder + profile bool +} + +// NewSearchSource initializes a new SearchSource. +func NewSearchSource() *SearchSource { + return &SearchSource{ + from: -1, + size: -1, + trackScores: false, + aggregations: make(map[string]Aggregation), + indexBoosts: make(map[string]float64), + innerHits: make(map[string]*InnerHit), + } +} + +// Query sets the query to use with this search source. +func (s *SearchSource) Query(query Query) *SearchSource { + s.query = query + return s +} + +// Profile specifies that this search source should activate the +// Profile API for queries made on it. +func (s *SearchSource) Profile(profile bool) *SearchSource { + s.profile = profile + return s +} + +// PostFilter will be executed after the query has been executed and +// only affects the search hits, not the aggregations. +// This filter is always executed as the last filtering mechanism. +func (s *SearchSource) PostFilter(postFilter Query) *SearchSource { + s.postQuery = postFilter + return s +} + +// Slice allows partitioning the documents in multiple slices. +// It is e.g. used to slice a scroll operation, supported in +// Elasticsearch 5.0 or later. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-scroll.html#sliced-scroll +// for details. +func (s *SearchSource) Slice(sliceQuery Query) *SearchSource { + s.sliceQuery = sliceQuery + return s +} + +// From index to start the search from. Defaults to 0. +func (s *SearchSource) From(from int) *SearchSource { + s.from = from + return s +} + +// Size is the number of search hits to return. Defaults to 10. +func (s *SearchSource) Size(size int) *SearchSource { + s.size = size + return s +} + +// MinScore sets the minimum score below which docs will be filtered out. +func (s *SearchSource) MinScore(minScore float64) *SearchSource { + s.minScore = &minScore + return s +} + +// Explain indicates whether each search hit should be returned with +// an explanation of the hit (ranking). +func (s *SearchSource) Explain(explain bool) *SearchSource { + s.explain = &explain + return s +} + +// Version indicates whether each search hit should be returned with +// a version associated to it. +func (s *SearchSource) Version(version bool) *SearchSource { + s.version = &version + return s +} + +// Timeout controls how long a search is allowed to take, e.g. "1s" or "500ms". +func (s *SearchSource) Timeout(timeout string) *SearchSource { + s.timeout = timeout + return s +} + +// TimeoutInMillis controls how many milliseconds a search is allowed +// to take before it is canceled. +func (s *SearchSource) TimeoutInMillis(timeoutInMillis int) *SearchSource { + s.timeout = fmt.Sprintf("%dms", timeoutInMillis) + return s +} + +// TerminateAfter specifies the maximum number of documents to collect for +// each shard, upon reaching which the query execution will terminate early. +func (s *SearchSource) TerminateAfter(terminateAfter int) *SearchSource { + s.terminateAfter = &terminateAfter + return s +} + +// Sort adds a sort order. +func (s *SearchSource) Sort(field string, ascending bool) *SearchSource { + s.sorters = append(s.sorters, SortInfo{Field: field, Ascending: ascending}) + return s +} + +// SortWithInfo adds a sort order. +func (s *SearchSource) SortWithInfo(info SortInfo) *SearchSource { + s.sorters = append(s.sorters, info) + return s +} + +// SortBy adds a sort order. +func (s *SearchSource) SortBy(sorter ...Sorter) *SearchSource { + s.sorters = append(s.sorters, sorter...) + return s +} + +func (s *SearchSource) hasSort() bool { + return len(s.sorters) > 0 +} + +// TrackScores is applied when sorting and controls if scores will be +// tracked as well. Defaults to false. +func (s *SearchSource) TrackScores(trackScores bool) *SearchSource { + s.trackScores = trackScores + return s +} + +// SearchAfter allows a different form of pagination by using a live cursor, +// using the results of the previous page to help the retrieval of the next. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-search-after.html +func (s *SearchSource) SearchAfter(sortValues ...interface{}) *SearchSource { + s.searchAfterSortValues = append(s.searchAfterSortValues, sortValues...) + return s +} + +// Aggregation adds an aggreation to perform as part of the search. +func (s *SearchSource) Aggregation(name string, aggregation Aggregation) *SearchSource { + s.aggregations[name] = aggregation + return s +} + +// DefaultRescoreWindowSize sets the rescore window size for rescores +// that don't specify their window. +func (s *SearchSource) DefaultRescoreWindowSize(defaultRescoreWindowSize int) *SearchSource { + s.defaultRescoreWindowSize = &defaultRescoreWindowSize + return s +} + +// Highlight adds highlighting to the search. +func (s *SearchSource) Highlight(highlight *Highlight) *SearchSource { + s.highlight = highlight + return s +} + +// Highlighter returns the highlighter. +func (s *SearchSource) Highlighter() *Highlight { + if s.highlight == nil { + s.highlight = NewHighlight() + } + return s.highlight +} + +// GlobalSuggestText defines the global text to use with all suggesters. +// This avoids repetition. +func (s *SearchSource) GlobalSuggestText(text string) *SearchSource { + s.globalSuggestText = text + return s +} + +// Suggester adds a suggester to the search. +func (s *SearchSource) Suggester(suggester Suggester) *SearchSource { + s.suggesters = append(s.suggesters, suggester) + return s +} + +// Rescorer adds a rescorer to the search. +func (s *SearchSource) Rescorer(rescore *Rescore) *SearchSource { + s.rescores = append(s.rescores, rescore) + return s +} + +// ClearRescorers removes all rescorers from the search. +func (s *SearchSource) ClearRescorers() *SearchSource { + s.rescores = make([]*Rescore, 0) + return s +} + +// FetchSource indicates whether the response should contain the stored +// _source for every hit. +func (s *SearchSource) FetchSource(fetchSource bool) *SearchSource { + if s.fetchSourceContext == nil { + s.fetchSourceContext = NewFetchSourceContext(fetchSource) + } else { + s.fetchSourceContext.SetFetchSource(fetchSource) + } + return s +} + +// FetchSourceContext indicates how the _source should be fetched. +func (s *SearchSource) FetchSourceContext(fetchSourceContext *FetchSourceContext) *SearchSource { + s.fetchSourceContext = fetchSourceContext + return s +} + +// NoStoredFields indicates that no fields should be loaded, resulting in only +// id and type to be returned per field. +func (s *SearchSource) NoStoredFields() *SearchSource { + s.storedFieldNames = nil + return s +} + +// StoredField adds a single field to load and return (note, must be stored) as +// part of the search request. If none are specified, the source of the +// document will be returned. +func (s *SearchSource) StoredField(storedFieldName string) *SearchSource { + s.storedFieldNames = append(s.storedFieldNames, storedFieldName) + return s +} + +// StoredFields sets the fields to load and return as part of the search request. +// If none are specified, the source of the document will be returned. +func (s *SearchSource) StoredFields(storedFieldNames ...string) *SearchSource { + s.storedFieldNames = append(s.storedFieldNames, storedFieldNames...) + return s +} + +// DocvalueField adds a single field to load from the field data cache +// and return as part of the search request. +func (s *SearchSource) DocvalueField(fieldDataField string) *SearchSource { + s.docvalueFields = append(s.docvalueFields, fieldDataField) + return s +} + +// DocvalueFields adds one or more fields to load from the field data cache +// and return as part of the search request. +func (s *SearchSource) DocvalueFields(docvalueFields ...string) *SearchSource { + s.docvalueFields = append(s.docvalueFields, docvalueFields...) + return s +} + +// ScriptField adds a single script field with the provided script. +func (s *SearchSource) ScriptField(scriptField *ScriptField) *SearchSource { + s.scriptFields = append(s.scriptFields, scriptField) + return s +} + +// ScriptFields adds one or more script fields with the provided scripts. +func (s *SearchSource) ScriptFields(scriptFields ...*ScriptField) *SearchSource { + s.scriptFields = append(s.scriptFields, scriptFields...) + return s +} + +// IndexBoost sets the boost that a specific index will receive when the +// query is executed against it. +func (s *SearchSource) IndexBoost(index string, boost float64) *SearchSource { + s.indexBoosts[index] = boost + return s +} + +// Stats group this request will be aggregated under. +func (s *SearchSource) Stats(statsGroup ...string) *SearchSource { + s.stats = append(s.stats, statsGroup...) + return s +} + +// InnerHit adds an inner hit to return with the result. +func (s *SearchSource) InnerHit(name string, innerHit *InnerHit) *SearchSource { + s.innerHits[name] = innerHit + return s +} + +// Collapse adds field collapsing. +func (s *SearchSource) Collapse(collapse *CollapseBuilder) *SearchSource { + s.collapse = collapse + return s +} + +// Source returns the serializable JSON for the source builder. +func (s *SearchSource) Source() (interface{}, error) { + source := make(map[string]interface{}) + + if s.from != -1 { + source["from"] = s.from + } + if s.size != -1 { + source["size"] = s.size + } + if s.timeout != "" { + source["timeout"] = s.timeout + } + if s.terminateAfter != nil { + source["terminate_after"] = *s.terminateAfter + } + if s.query != nil { + src, err := s.query.Source() + if err != nil { + return nil, err + } + source["query"] = src + } + if s.postQuery != nil { + src, err := s.postQuery.Source() + if err != nil { + return nil, err + } + source["post_filter"] = src + } + if s.sliceQuery != nil { + src, err := s.sliceQuery.Source() + if err != nil { + return nil, err + } + source["slice"] = src + } + if s.minScore != nil { + source["min_score"] = *s.minScore + } + if s.version != nil { + source["version"] = *s.version + } + if s.explain != nil { + source["explain"] = *s.explain + } + if s.profile { + source["profile"] = s.profile + } + if s.collapse != nil { + src, err := s.collapse.Source() + if err != nil { + return nil, err + } + source["collapse"] = src + } + if s.fetchSourceContext != nil { + src, err := s.fetchSourceContext.Source() + if err != nil { + return nil, err + } + source["_source"] = src + } + + if s.storedFieldNames != nil { + switch len(s.storedFieldNames) { + case 1: + source["stored_fields"] = s.storedFieldNames[0] + default: + source["stored_fields"] = s.storedFieldNames + } + } + + if len(s.docvalueFields) > 0 { + source["docvalue_fields"] = s.docvalueFields + } + + if len(s.scriptFields) > 0 { + sfmap := make(map[string]interface{}) + for _, scriptField := range s.scriptFields { + src, err := scriptField.Source() + if err != nil { + return nil, err + } + sfmap[scriptField.FieldName] = src + } + source["script_fields"] = sfmap + } + + if len(s.sorters) > 0 { + var sortarr []interface{} + for _, sorter := range s.sorters { + src, err := sorter.Source() + if err != nil { + return nil, err + } + sortarr = append(sortarr, src) + } + source["sort"] = sortarr + } + + if s.trackScores { + source["track_scores"] = s.trackScores + } + + if len(s.searchAfterSortValues) > 0 { + source["search_after"] = s.searchAfterSortValues + } + + if len(s.indexBoosts) > 0 { + source["indices_boost"] = s.indexBoosts + } + + if len(s.aggregations) > 0 { + aggsMap := make(map[string]interface{}) + for name, aggregate := range s.aggregations { + src, err := aggregate.Source() + if err != nil { + return nil, err + } + aggsMap[name] = src + } + source["aggregations"] = aggsMap + } + + if s.highlight != nil { + src, err := s.highlight.Source() + if err != nil { + return nil, err + } + source["highlight"] = src + } + + if len(s.suggesters) > 0 { + suggesters := make(map[string]interface{}) + for _, s := range s.suggesters { + src, err := s.Source(false) + if err != nil { + return nil, err + } + suggesters[s.Name()] = src + } + if s.globalSuggestText != "" { + suggesters["text"] = s.globalSuggestText + } + source["suggest"] = suggesters + } + + if len(s.rescores) > 0 { + // Strip empty rescores from request + var rescores []*Rescore + for _, r := range s.rescores { + if !r.IsEmpty() { + rescores = append(rescores, r) + } + } + + if len(rescores) == 1 { + rescores[0].defaultRescoreWindowSize = s.defaultRescoreWindowSize + src, err := rescores[0].Source() + if err != nil { + return nil, err + } + source["rescore"] = src + } else { + var slice []interface{} + for _, r := range rescores { + r.defaultRescoreWindowSize = s.defaultRescoreWindowSize + src, err := r.Source() + if err != nil { + return nil, err + } + slice = append(slice, src) + } + source["rescore"] = slice + } + } + + if len(s.stats) > 0 { + source["stats"] = s.stats + } + + if len(s.innerHits) > 0 { + // Top-level inner hits + // See http://www.elastic.co/guide/en/elasticsearch/reference/1.5/search-request-inner-hits.html#top-level-inner-hits + // "inner_hits": { + // "": { + // "": { + // "": { + // , + // [,"inner_hits" : { []+ } ]? + // } + // } + // }, + // [,"" : { ... } ]* + // } + m := make(map[string]interface{}) + for name, hit := range s.innerHits { + if hit.path != "" { + src, err := hit.Source() + if err != nil { + return nil, err + } + path := make(map[string]interface{}) + path[hit.path] = src + m[name] = map[string]interface{}{ + "path": path, + } + } else if hit.typ != "" { + src, err := hit.Source() + if err != nil { + return nil, err + } + typ := make(map[string]interface{}) + typ[hit.typ] = src + m[name] = map[string]interface{}{ + "type": typ, + } + } else { + // TODO the Java client throws here, because either path or typ must be specified + _ = m + } + } + source["inner_hits"] = m + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/search_source_test.go b/vendor/github.com/olivere/elastic/search_source_test.go new file mode 100644 index 0000000..a78991b --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_source_test.go @@ -0,0 +1,295 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestSearchSourceMatchAllQuery(t *testing.T) { + matchAllQ := NewMatchAllQuery() + builder := NewSearchSource().Query(matchAllQ) + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"query":{"match_all":{}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSearchSourceNoStoredFields(t *testing.T) { + matchAllQ := NewMatchAllQuery() + builder := NewSearchSource().Query(matchAllQ).NoStoredFields() + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"query":{"match_all":{}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSearchSourceStoredFields(t *testing.T) { + matchAllQ := NewMatchAllQuery() + builder := NewSearchSource().Query(matchAllQ).StoredFields("message", "tags") + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"query":{"match_all":{}},"stored_fields":["message","tags"]}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSearchSourceFetchSourceDisabled(t *testing.T) { + matchAllQ := NewMatchAllQuery() + builder := NewSearchSource().Query(matchAllQ).FetchSource(false) + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"_source":false,"query":{"match_all":{}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSearchSourceFetchSourceByWildcards(t *testing.T) { + matchAllQ := NewMatchAllQuery() + fsc := NewFetchSourceContext(true).Include("obj1.*", "obj2.*").Exclude("*.description") + builder := NewSearchSource().Query(matchAllQ).FetchSourceContext(fsc) + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"_source":{"excludes":["*.description"],"includes":["obj1.*","obj2.*"]},"query":{"match_all":{}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSearchSourceDocvalueFields(t *testing.T) { + matchAllQ := NewMatchAllQuery() + builder := NewSearchSource().Query(matchAllQ).DocvalueFields("test1", "test2") + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"docvalue_fields":["test1","test2"],"query":{"match_all":{}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSearchSourceScriptFields(t *testing.T) { + matchAllQ := NewMatchAllQuery() + sf1 := NewScriptField("test1", NewScript("doc['my_field_name'].value * 2")) + sf2 := NewScriptField("test2", NewScript("doc['my_field_name'].value * factor").Param("factor", 3.1415927)) + builder := NewSearchSource().Query(matchAllQ).ScriptFields(sf1, sf2) + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"query":{"match_all":{}},"script_fields":{"test1":{"script":{"source":"doc['my_field_name'].value * 2"}},"test2":{"script":{"params":{"factor":3.1415927},"source":"doc['my_field_name'].value * factor"}}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSearchSourcePostFilter(t *testing.T) { + matchAllQ := NewMatchAllQuery() + pf := NewTermQuery("tag", "important") + builder := NewSearchSource().Query(matchAllQ).PostFilter(pf) + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"post_filter":{"term":{"tag":"important"}},"query":{"match_all":{}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSearchSourceHighlight(t *testing.T) { + matchAllQ := NewMatchAllQuery() + hl := NewHighlight().Field("content") + builder := NewSearchSource().Query(matchAllQ).Highlight(hl) + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"highlight":{"fields":{"content":{}}},"query":{"match_all":{}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSearchSourceRescoring(t *testing.T) { + matchAllQ := NewMatchAllQuery() + rescorerQuery := NewMatchPhraseQuery("field1", "the quick brown fox").Slop(2) + rescorer := NewQueryRescorer(rescorerQuery) + rescorer = rescorer.QueryWeight(0.7) + rescorer = rescorer.RescoreQueryWeight(1.2) + rescore := NewRescore().WindowSize(50).Rescorer(rescorer) + builder := NewSearchSource().Query(matchAllQ).Rescorer(rescore) + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"query":{"match_all":{}},"rescore":{"query":{"query_weight":0.7,"rescore_query":{"match_phrase":{"field1":{"query":"the quick brown fox","slop":2}}},"rescore_query_weight":1.2},"window_size":50}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSearchSourceIndexBoost(t *testing.T) { + matchAllQ := NewMatchAllQuery() + builder := NewSearchSource().Query(matchAllQ).IndexBoost("index1", 1.4).IndexBoost("index2", 1.3) + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"indices_boost":{"index1":1.4,"index2":1.3},"query":{"match_all":{}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSearchSourceMixDifferentSorters(t *testing.T) { + matchAllQ := NewMatchAllQuery() + builder := NewSearchSource().Query(matchAllQ). + Sort("a", false). + SortWithInfo(SortInfo{Field: "b", Ascending: true}). + SortBy(NewScriptSort(NewScript("doc['field_name'].value * factor").Param("factor", 1.1), "number")) + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"query":{"match_all":{}},"sort":[{"a":{"order":"desc"}},{"b":{"order":"asc"}},{"_script":{"order":"asc","script":{"params":{"factor":1.1},"source":"doc['field_name'].value * factor"},"type":"number"}}]}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSearchSourceInnerHits(t *testing.T) { + matchAllQ := NewMatchAllQuery() + builder := NewSearchSource().Query(matchAllQ). + InnerHit("comments", NewInnerHit().Type("comment").Query(NewMatchQuery("user", "olivere"))). + InnerHit("views", NewInnerHit().Path("view")) + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"inner_hits":{"comments":{"type":{"comment":{"query":{"match":{"user":{"query":"olivere"}}}}}},"views":{"path":{"view":{}}}},"query":{"match_all":{}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSearchSourceSearchAfter(t *testing.T) { + matchAllQ := NewMatchAllQuery() + builder := NewSearchSource().Query(matchAllQ).SearchAfter(1463538857, "tweet#654323") + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"query":{"match_all":{}},"search_after":[1463538857,"tweet#654323"]}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSearchSourceProfiledQuery(t *testing.T) { + matchAllQ := NewMatchAllQuery() + builder := NewSearchSource().Query(matchAllQ).Profile(true) + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"profile":true,"query":{"match_all":{}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_suggester_test.go b/vendor/github.com/olivere/elastic/search_suggester_test.go new file mode 100644 index 0000000..33bdc92 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_suggester_test.go @@ -0,0 +1,355 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "testing" +) + +func TestTermSuggester(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} + tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} + tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} + + // Add all documents + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Match all should return all documents + tsName := "my-suggestions" + ts := NewTermSuggester(tsName) + ts = ts.Text("Goolang") + ts = ts.Field("message") + + searchResult, err := client.Search(). + Index(testIndexName). + Query(NewMatchAllQuery()). + Suggester(ts). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if searchResult.Suggest == nil { + t.Errorf("expected SearchResult.Suggest != nil; got nil") + } + mySuggestions, found := searchResult.Suggest[tsName] + if !found { + t.Errorf("expected to find SearchResult.Suggest[%s]; got false", tsName) + } + if mySuggestions == nil { + t.Errorf("expected SearchResult.Suggest[%s] != nil; got nil", tsName) + } + + if len(mySuggestions) != 1 { + t.Errorf("expected 1 suggestion; got %d", len(mySuggestions)) + } + mySuggestion := mySuggestions[0] + if mySuggestion.Text != "goolang" { + t.Errorf("expected Text = 'goolang'; got %s", mySuggestion.Text) + } + if mySuggestion.Offset != 0 { + t.Errorf("expected Offset = %d; got %d", 0, mySuggestion.Offset) + } + if mySuggestion.Length != 7 { + t.Errorf("expected Length = %d; got %d", 7, mySuggestion.Length) + } + if len(mySuggestion.Options) != 1 { + t.Errorf("expected 1 option; got %d", len(mySuggestion.Options)) + } + myOption := mySuggestion.Options[0] + if myOption.Text != "golang" { + t.Errorf("expected Text = 'golang'; got %s", myOption.Text) + } +} + +func TestPhraseSuggester(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} + tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} + tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} + + // Add all documents + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Match all should return all documents + phraseSuggesterName := "my-suggestions" + ps := NewPhraseSuggester(phraseSuggesterName) + ps = ps.Text("Goolang") + ps = ps.Field("message") + + searchResult, err := client.Search(). + Index(testIndexName). + Query(NewMatchAllQuery()). + Suggester(ps). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if searchResult.Suggest == nil { + t.Errorf("expected SearchResult.Suggest != nil; got nil") + } + mySuggestions, found := searchResult.Suggest[phraseSuggesterName] + if !found { + t.Errorf("expected to find SearchResult.Suggest[%s]; got false", phraseSuggesterName) + } + if mySuggestions == nil { + t.Errorf("expected SearchResult.Suggest[%s] != nil; got nil", phraseSuggesterName) + } + + if len(mySuggestions) != 1 { + t.Errorf("expected 1 suggestion; got %d", len(mySuggestions)) + } + mySuggestion := mySuggestions[0] + if mySuggestion.Text != "Goolang" { + t.Errorf("expected Text = 'Goolang'; got %s", mySuggestion.Text) + } + if mySuggestion.Offset != 0 { + t.Errorf("expected Offset = %d; got %d", 0, mySuggestion.Offset) + } + if mySuggestion.Length != 7 { + t.Errorf("expected Length = %d; got %d", 7, mySuggestion.Length) + } + if want, have := 1, len(mySuggestion.Options); want != have { + t.Errorf("expected len(options) = %d; got %d", want, have) + } + if want, have := "golang", mySuggestion.Options[0].Text; want != have { + t.Errorf("expected options[0].Text = %q; got %q", want, have) + } + if score := mySuggestion.Options[0].Score; score <= 0.0 { + t.Errorf("expected options[0].Score > 0.0; got %v", score) + } +} + +func TestCompletionSuggester(t *testing.T) { + client := setupTestClientAndCreateIndex(t) // , SetTraceLog(log.New(os.Stdout, "", 0))) + + tweet1 := tweet{ + User: "olivere", + Message: "Welcome to Golang and Elasticsearch.", + Suggest: NewSuggestField("Golang", "Elasticsearch"), + } + tweet2 := tweet{ + User: "olivere", + Message: "Another unrelated topic.", + Suggest: NewSuggestField("Another unrelated topic."), + } + tweet3 := tweet{ + User: "sandrae", + Message: "Cycling is fun.", + Suggest: NewSuggestField("Cycling is fun."), + } + + // Add all documents + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Match all should return all documents + suggesterName := "my-suggestions" + cs := NewCompletionSuggester(suggesterName) + cs = cs.Text("Golang") + cs = cs.Field("suggest_field") + + searchResult, err := client.Search(). + Index(testIndexName). + Query(NewMatchAllQuery()). + Suggester(cs). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if searchResult.Suggest == nil { + t.Errorf("expected SearchResult.Suggest != nil; got nil") + } + mySuggestions, found := searchResult.Suggest[suggesterName] + if !found { + t.Errorf("expected to find SearchResult.Suggest[%s]; got false", suggesterName) + } + if mySuggestions == nil { + t.Errorf("expected SearchResult.Suggest[%s] != nil; got nil", suggesterName) + } + + if len(mySuggestions) != 1 { + t.Errorf("expected 1 suggestion; got %d", len(mySuggestions)) + } + mySuggestion := mySuggestions[0] + if mySuggestion.Text != "Golang" { + t.Errorf("expected Text = 'Golang'; got %s", mySuggestion.Text) + } + if mySuggestion.Offset != 0 { + t.Errorf("expected Offset = %d; got %d", 0, mySuggestion.Offset) + } + if mySuggestion.Length != 6 { + t.Errorf("expected Length = %d; got %d", 7, mySuggestion.Length) + } + if len(mySuggestion.Options) != 1 { + t.Errorf("expected 1 option; got %d", len(mySuggestion.Options)) + } + myOption := mySuggestion.Options[0] + if myOption.Text != "Golang" { + t.Errorf("expected Text = 'Golang'; got %s", myOption.Text) + } +} + +func TestContextSuggester(t *testing.T) { + client := setupTestClientAndCreateIndex(t) // , SetTraceLog(log.New(os.Stdout, "", 0))) + + // TODO make a nice way of creating tweets, as currently the context fields are unsupported as part of the suggestion fields + tweet1 := ` + { + "user":"olivere", + "message":"Welcome to Golang and Elasticsearch.", + "retweets":0, + "created":"0001-01-01T00:00:00Z", + "suggest_field":{ + "input":[ + "Golang", + "Elasticsearch" + ], + "contexts":{ + "user_name": ["olivere"] + } + } + } + ` + tweet2 := ` + { + "user":"sandrae", + "message":"I like golfing", + "retweets":0, + "created":"0001-01-01T00:00:00Z", + "suggest_field":{ + "input":[ + "Golfing" + ], + "contexts":{ + "user_name": ["sandrae"] + } + } + } + ` + + // Add all documents + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyString(tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyString(tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + suggesterName := "my-suggestions" + cs := NewContextSuggester(suggesterName) + cs = cs.Prefix("Gol") + cs = cs.Field("suggest_field") + cs = cs.ContextQueries( + NewSuggesterCategoryQuery("user_name", "olivere"), + ) + + searchResult, err := client.Search(). + Index(testIndexName). + Suggester(cs). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if searchResult.Suggest == nil { + t.Errorf("expected SearchResult.Suggest != nil; got nil") + } + mySuggestions, found := searchResult.Suggest[suggesterName] + if !found { + t.Errorf("expected to find SearchResult.Suggest[%s]; got false", suggesterName) + } + if mySuggestions == nil { + t.Errorf("expected SearchResult.Suggest[%s] != nil; got nil", suggesterName) + } + + // sandra's tweet is not returned because of the user_name context + if len(mySuggestions) != 1 { + t.Errorf("expected 1 suggestion; got %d", len(mySuggestions)) + } + mySuggestion := mySuggestions[0] + if mySuggestion.Text != "Gol" { + t.Errorf("expected Text = 'Gol'; got %s", mySuggestion.Text) + } + if mySuggestion.Offset != 0 { + t.Errorf("expected Offset = %d; got %d", 0, mySuggestion.Offset) + } + if mySuggestion.Length != 3 { + t.Errorf("expected Length = %d; got %d", 3, mySuggestion.Length) + } + if len(mySuggestion.Options) != 1 { + t.Errorf("expected 1 option; got %d", len(mySuggestion.Options)) + } + myOption := mySuggestion.Options[0] + if myOption.Text != "Golang" { + t.Errorf("expected Text = 'Golang'; got %s", myOption.Text) + } + if myOption.Id != "1" { + t.Errorf("expected Id = '1'; got %s", myOption.Id) + } +} diff --git a/vendor/github.com/olivere/elastic/search_terms_lookup.go b/vendor/github.com/olivere/elastic/search_terms_lookup.go new file mode 100644 index 0000000..d3fac60 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_terms_lookup.go @@ -0,0 +1,74 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// TermsLookup encapsulates the parameters needed to fetch terms. +// +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-terms-query.html#query-dsl-terms-lookup. +type TermsLookup struct { + index string + typ string + id string + path string + routing string +} + +// NewTermsLookup creates and initializes a new TermsLookup. +func NewTermsLookup() *TermsLookup { + t := &TermsLookup{} + return t +} + +// Index name. +func (t *TermsLookup) Index(index string) *TermsLookup { + t.index = index + return t +} + +// Type name. +func (t *TermsLookup) Type(typ string) *TermsLookup { + t.typ = typ + return t +} + +// Id to look up. +func (t *TermsLookup) Id(id string) *TermsLookup { + t.id = id + return t +} + +// Path to use for lookup. +func (t *TermsLookup) Path(path string) *TermsLookup { + t.path = path + return t +} + +// Routing value. +func (t *TermsLookup) Routing(routing string) *TermsLookup { + t.routing = routing + return t +} + +// Source creates the JSON source of the builder. +func (t *TermsLookup) Source() (interface{}, error) { + src := make(map[string]interface{}) + if t.index != "" { + src["index"] = t.index + } + if t.typ != "" { + src["type"] = t.typ + } + if t.id != "" { + src["id"] = t.id + } + if t.path != "" { + src["path"] = t.path + } + if t.routing != "" { + src["routing"] = t.routing + } + return src, nil +} diff --git a/vendor/github.com/olivere/elastic/search_terms_lookup_test.go b/vendor/github.com/olivere/elastic/search_terms_lookup_test.go new file mode 100644 index 0000000..369f723 --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_terms_lookup_test.go @@ -0,0 +1,27 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestTermsLookup(t *testing.T) { + tl := NewTermsLookup().Index("users").Type("user").Id("2").Path("followers") + src, err := tl.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"id":"2","index":"users","path":"followers","type":"user"}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/search_test.go b/vendor/github.com/olivere/elastic/search_test.go new file mode 100644 index 0000000..0b9fe6b --- /dev/null +++ b/vendor/github.com/olivere/elastic/search_test.go @@ -0,0 +1,1320 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "reflect" + "testing" + "time" +) + +func TestSearchMatchAll(t *testing.T) { + //client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) + client := setupTestClientAndCreateIndexAndAddDocs(t) + + // Match all should return all documents + searchResult, err := client.Search(). + Index(testIndexName). + Query(NewMatchAllQuery()). + Size(100). + Pretty(true). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if searchResult.Hits == nil { + t.Errorf("expected SearchResult.Hits != nil; got nil") + } + if got, want := searchResult.Hits.TotalHits, int64(3); got != want { + t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", want, got) + } + if got, want := len(searchResult.Hits.Hits), 3; got != want { + t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", want, got) + } + + for _, hit := range searchResult.Hits.Hits { + if hit.Index != testIndexName { + t.Errorf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) + } + item := make(map[string]interface{}) + err := json.Unmarshal(*hit.Source, &item) + if err != nil { + t.Fatal(err) + } + } +} + +func TestSearchMatchAllWithRequestCacheDisabled(t *testing.T) { + //client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) + client := setupTestClientAndCreateIndexAndAddDocs(t) + + // Match all should return all documents, with request cache disabled + searchResult, err := client.Search(). + Index(testIndexName). + Query(NewMatchAllQuery()). + Size(100). + Pretty(true). + RequestCache(false). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if searchResult.Hits == nil { + t.Errorf("expected SearchResult.Hits != nil; got nil") + } + if got, want := searchResult.Hits.TotalHits, int64(3); got != want { + t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", want, got) + } + if got, want := len(searchResult.Hits.Hits), 3; got != want { + t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", want, got) + } +} + +func BenchmarkSearchMatchAll(b *testing.B) { + client := setupTestClientAndCreateIndexAndAddDocs(b) + + for n := 0; n < b.N; n++ { + // Match all should return all documents + all := NewMatchAllQuery() + searchResult, err := client.Search().Index(testIndexName).Query(all).Do(context.TODO()) + if err != nil { + b.Fatal(err) + } + if searchResult.Hits == nil { + b.Errorf("expected SearchResult.Hits != nil; got nil") + } + if searchResult.Hits.TotalHits == 0 { + b.Errorf("expected SearchResult.Hits.TotalHits > %d; got %d", 0, searchResult.Hits.TotalHits) + } + } +} + +func TestSearchResultTotalHits(t *testing.T) { + client := setupTestClientAndCreateIndexAndAddDocs(t) + + count, err := client.Count(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + all := NewMatchAllQuery() + searchResult, err := client.Search().Index(testIndexName).Query(all).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + got := searchResult.TotalHits() + if got != count { + t.Fatalf("expected %d hits; got: %d", count, got) + } + + // No hits + searchResult = &SearchResult{} + got = searchResult.TotalHits() + if got != 0 { + t.Errorf("expected %d hits; got: %d", 0, got) + } +} + +func TestSearchResultWithProfiling(t *testing.T) { + client := setupTestClientAndCreateIndexAndAddDocs(t) + + all := NewMatchAllQuery() + searchResult, err := client.Search().Index(testIndexName).Query(all).Profile(true).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + if searchResult.Profile == nil { + t.Fatal("Profiled MatchAll query did not return profiling data with results") + } +} + +func TestSearchResultEach(t *testing.T) { + client := setupTestClientAndCreateIndexAndAddDocs(t) + + all := NewMatchAllQuery() + searchResult, err := client.Search().Index(testIndexName).Query(all).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Iterate over non-ptr type + var aTweet tweet + count := 0 + for _, item := range searchResult.Each(reflect.TypeOf(aTweet)) { + count++ + _, ok := item.(tweet) + if !ok { + t.Fatalf("expected hit to be serialized as tweet; got: %v", reflect.ValueOf(item)) + } + } + if count == 0 { + t.Errorf("expected to find some hits; got: %d", count) + } + + // Iterate over ptr-type + count = 0 + var aTweetPtr *tweet + for _, item := range searchResult.Each(reflect.TypeOf(aTweetPtr)) { + count++ + tw, ok := item.(*tweet) + if !ok { + t.Fatalf("expected hit to be serialized as tweet; got: %v", reflect.ValueOf(item)) + } + if tw == nil { + t.Fatal("expected hit to not be nil") + } + } + if count == 0 { + t.Errorf("expected to find some hits; got: %d", count) + } + + // Does not iterate when no hits are found + searchResult = &SearchResult{Hits: nil} + count = 0 + for _, item := range searchResult.Each(reflect.TypeOf(aTweet)) { + count++ + _ = item + } + if count != 0 { + t.Errorf("expected to not find any hits; got: %d", count) + } + searchResult = &SearchResult{Hits: &SearchHits{Hits: make([]*SearchHit, 0)}} + count = 0 + for _, item := range searchResult.Each(reflect.TypeOf(aTweet)) { + count++ + _ = item + } + if count != 0 { + t.Errorf("expected to not find any hits; got: %d", count) + } +} + +func TestSearchResultEachNoSource(t *testing.T) { + client := setupTestClientAndCreateIndexAndAddDocsNoSource(t) + + all := NewMatchAllQuery() + searchResult, err := client.Search().Index(testNoSourceIndexName).Query(all).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Iterate over non-ptr type + var aTweet tweet + count := 0 + for _, item := range searchResult.Each(reflect.TypeOf(aTweet)) { + count++ + tw, ok := item.(tweet) + if !ok { + t.Fatalf("expected hit to be serialized as tweet; got: %v", reflect.ValueOf(item)) + } + + if tw.User != "" { + t.Fatalf("expected no _source hit to be empty tweet; got: %v", reflect.ValueOf(item)) + } + } + if count != 2 { + t.Errorf("expected to find 2 hits; got: %d", count) + } + + // Iterate over ptr-type + count = 0 + var aTweetPtr *tweet + for _, item := range searchResult.Each(reflect.TypeOf(aTweetPtr)) { + count++ + tw, ok := item.(*tweet) + if !ok { + t.Fatalf("expected hit to be serialized as tweet; got: %v", reflect.ValueOf(item)) + } + if tw != nil { + t.Fatal("expected hit to be nil") + } + } + if count != 2 { + t.Errorf("expected to find 2 hits; got: %d", count) + } +} + +func TestSearchSorting(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tweet1 := tweet{ + User: "olivere", Retweets: 108, + Message: "Welcome to Golang and Elasticsearch.", + Created: time.Date(2012, 12, 12, 17, 38, 34, 0, time.UTC), + } + tweet2 := tweet{ + User: "olivere", Retweets: 0, + Message: "Another unrelated topic.", + Created: time.Date(2012, 10, 10, 8, 12, 03, 0, time.UTC), + } + tweet3 := tweet{ + User: "sandrae", Retweets: 12, + Message: "Cycling is fun.", + Created: time.Date(2011, 11, 11, 10, 58, 12, 0, time.UTC), + } + + // Add all documents + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Match all should return all documents + all := NewMatchAllQuery() + searchResult, err := client.Search(). + Index(testIndexName). + Query(all). + Sort("created", false). + Timeout("1s"). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if searchResult.Hits == nil { + t.Errorf("expected SearchResult.Hits != nil; got nil") + } + if searchResult.Hits.TotalHits != 3 { + t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 3, searchResult.Hits.TotalHits) + } + if len(searchResult.Hits.Hits) != 3 { + t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", 3, len(searchResult.Hits.Hits)) + } + + for _, hit := range searchResult.Hits.Hits { + if hit.Index != testIndexName { + t.Errorf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) + } + item := make(map[string]interface{}) + err := json.Unmarshal(*hit.Source, &item) + if err != nil { + t.Fatal(err) + } + } +} + +func TestSearchSortingBySorters(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tweet1 := tweet{ + User: "olivere", Retweets: 108, + Message: "Welcome to Golang and Elasticsearch.", + Created: time.Date(2012, 12, 12, 17, 38, 34, 0, time.UTC), + } + tweet2 := tweet{ + User: "olivere", Retweets: 0, + Message: "Another unrelated topic.", + Created: time.Date(2012, 10, 10, 8, 12, 03, 0, time.UTC), + } + tweet3 := tweet{ + User: "sandrae", Retweets: 12, + Message: "Cycling is fun.", + Created: time.Date(2011, 11, 11, 10, 58, 12, 0, time.UTC), + } + + // Add all documents + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Match all should return all documents + all := NewMatchAllQuery() + searchResult, err := client.Search(). + Index(testIndexName). + Query(all). + SortBy(NewFieldSort("created").Desc(), NewScoreSort()). + Timeout("1s"). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if searchResult.Hits == nil { + t.Errorf("expected SearchResult.Hits != nil; got nil") + } + if searchResult.Hits.TotalHits != 3 { + t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 3, searchResult.Hits.TotalHits) + } + if len(searchResult.Hits.Hits) != 3 { + t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", 3, len(searchResult.Hits.Hits)) + } + + for _, hit := range searchResult.Hits.Hits { + if hit.Index != testIndexName { + t.Errorf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) + } + item := make(map[string]interface{}) + err := json.Unmarshal(*hit.Source, &item) + if err != nil { + t.Fatal(err) + } + } +} + +func TestSearchSpecificFields(t *testing.T) { + // client := setupTestClientAndCreateIndexAndLog(t, SetTraceLog(log.New(os.Stdout, "", 0))) + client := setupTestClientAndCreateIndex(t) + + tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} + tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} + tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} + + // Add all documents + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Match all should return all documents + all := NewMatchAllQuery() + searchResult, err := client.Search(). + Index(testIndexName). + Query(all). + StoredFields("message"). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if searchResult.Hits == nil { + t.Errorf("expected SearchResult.Hits != nil; got nil") + } + if searchResult.Hits.TotalHits != 3 { + t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 3, searchResult.Hits.TotalHits) + } + if len(searchResult.Hits.Hits) != 3 { + t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", 3, len(searchResult.Hits.Hits)) + } + + for _, hit := range searchResult.Hits.Hits { + if hit.Index != testIndexName { + t.Errorf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) + } + if hit.Source != nil { + t.Fatalf("expected SearchResult.Hits.Hit.Source to be nil; got: %q", hit.Source) + } + if hit.Fields == nil { + t.Fatal("expected SearchResult.Hits.Hit.Fields to be != nil") + } + field, found := hit.Fields["message"] + if !found { + t.Errorf("expected SearchResult.Hits.Hit.Fields[%s] to be found", "message") + } + fields, ok := field.([]interface{}) + if !ok { + t.Errorf("expected []interface{}; got: %v", reflect.TypeOf(fields)) + } + if len(fields) != 1 { + t.Errorf("expected a field with 1 entry; got: %d", len(fields)) + } + message, ok := fields[0].(string) + if !ok { + t.Errorf("expected a string; got: %v", reflect.TypeOf(fields[0])) + } + if message == "" { + t.Errorf("expected a message; got: %q", message) + } + } +} + +func TestSearchExplain(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + // client := setupTestClientAndCreateIndex(t, SetTraceLog(log.New(os.Stdout, "", 0))) + + tweet1 := tweet{ + User: "olivere", Retweets: 108, + Message: "Welcome to Golang and Elasticsearch.", + Created: time.Date(2012, 12, 12, 17, 38, 34, 0, time.UTC), + } + tweet2 := tweet{ + User: "olivere", Retweets: 0, + Message: "Another unrelated topic.", + Created: time.Date(2012, 10, 10, 8, 12, 03, 0, time.UTC), + } + tweet3 := tweet{ + User: "sandrae", Retweets: 12, + Message: "Cycling is fun.", + Created: time.Date(2011, 11, 11, 10, 58, 12, 0, time.UTC), + } + + // Add all documents + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Match all should return all documents + all := NewMatchAllQuery() + searchResult, err := client.Search(). + Index(testIndexName). + Query(all). + Explain(true). + Timeout("1s"). + // Pretty(true). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if searchResult.Hits == nil { + t.Errorf("expected SearchResult.Hits != nil; got nil") + } + if searchResult.Hits.TotalHits != 3 { + t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 3, searchResult.Hits.TotalHits) + } + if len(searchResult.Hits.Hits) != 3 { + t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", 3, len(searchResult.Hits.Hits)) + } + + for _, hit := range searchResult.Hits.Hits { + if hit.Index != testIndexName { + t.Errorf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) + } + if hit.Explanation == nil { + t.Fatal("expected search explanation") + } + if hit.Explanation.Value <= 0.0 { + t.Errorf("expected explanation value to be > 0.0; got: %v", hit.Explanation.Value) + } + if hit.Explanation.Description == "" { + t.Errorf("expected explanation description != %q; got: %q", "", hit.Explanation.Description) + } + } +} + +func TestSearchSource(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tweet1 := tweet{ + User: "olivere", Retweets: 108, + Message: "Welcome to Golang and Elasticsearch.", + Created: time.Date(2012, 12, 12, 17, 38, 34, 0, time.UTC), + } + tweet2 := tweet{ + User: "olivere", Retweets: 0, + Message: "Another unrelated topic.", + Created: time.Date(2012, 10, 10, 8, 12, 03, 0, time.UTC), + } + tweet3 := tweet{ + User: "sandrae", Retweets: 12, + Message: "Cycling is fun.", + Created: time.Date(2011, 11, 11, 10, 58, 12, 0, time.UTC), + } + + // Add all documents + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Set up the request JSON manually to pass to the search service via Source() + source := map[string]interface{}{ + "query": map[string]interface{}{ + "match_all": map[string]interface{}{}, + }, + } + + searchResult, err := client.Search(). + Index(testIndexName). + Source(source). // sets the JSON request + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if searchResult.Hits == nil { + t.Errorf("expected SearchResult.Hits != nil; got nil") + } + if searchResult.Hits.TotalHits != 3 { + t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 3, searchResult.Hits.TotalHits) + } +} + +func TestSearchSourceWithString(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tweet1 := tweet{ + User: "olivere", Retweets: 108, + Message: "Welcome to Golang and Elasticsearch.", + Created: time.Date(2012, 12, 12, 17, 38, 34, 0, time.UTC), + } + tweet2 := tweet{ + User: "olivere", Retweets: 0, + Message: "Another unrelated topic.", + Created: time.Date(2012, 10, 10, 8, 12, 03, 0, time.UTC), + } + tweet3 := tweet{ + User: "sandrae", Retweets: 12, + Message: "Cycling is fun.", + Created: time.Date(2011, 11, 11, 10, 58, 12, 0, time.UTC), + } + + // Add all documents + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + searchResult, err := client.Search(). + Index(testIndexName). + Source(`{"query":{"match_all":{}}}`). // sets the JSON request + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if searchResult.Hits == nil { + t.Errorf("expected SearchResult.Hits != nil; got nil") + } + if searchResult.Hits.TotalHits != 3 { + t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 3, searchResult.Hits.TotalHits) + } +} + +func TestSearchRawString(t *testing.T) { + // client := setupTestClientAndCreateIndexAndLog(t, SetTraceLog(log.New(os.Stdout, "", 0))) + client := setupTestClientAndCreateIndex(t) + + tweet1 := tweet{ + User: "olivere", Retweets: 108, + Message: "Welcome to Golang and Elasticsearch.", + Created: time.Date(2012, 12, 12, 17, 38, 34, 0, time.UTC), + } + tweet2 := tweet{ + User: "olivere", Retweets: 0, + Message: "Another unrelated topic.", + Created: time.Date(2012, 10, 10, 8, 12, 03, 0, time.UTC), + } + tweet3 := tweet{ + User: "sandrae", Retweets: 12, + Message: "Cycling is fun.", + Created: time.Date(2011, 11, 11, 10, 58, 12, 0, time.UTC), + } + + // Add all documents + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + query := RawStringQuery(`{"match_all":{}}`) + searchResult, err := client.Search(). + Index(testIndexName). + Query(query). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if searchResult.Hits == nil { + t.Errorf("expected SearchResult.Hits != nil; got nil") + } + if searchResult.Hits.TotalHits != 3 { + t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 3, searchResult.Hits.TotalHits) + } +} + +func TestSearchSearchSource(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tweet1 := tweet{ + User: "olivere", Retweets: 108, + Message: "Welcome to Golang and Elasticsearch.", + Created: time.Date(2012, 12, 12, 17, 38, 34, 0, time.UTC), + } + tweet2 := tweet{ + User: "olivere", Retweets: 0, + Message: "Another unrelated topic.", + Created: time.Date(2012, 10, 10, 8, 12, 03, 0, time.UTC), + } + tweet3 := tweet{ + User: "sandrae", Retweets: 12, + Message: "Cycling is fun.", + Created: time.Date(2011, 11, 11, 10, 58, 12, 0, time.UTC), + } + + // Add all documents + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + // Set up the search source manually and pass it to the search service via SearchSource() + ss := NewSearchSource().Query(NewMatchAllQuery()).From(0).Size(2) + + // One can use ss.Source() to get to the raw interface{} that will be used + // as the search request JSON by the SearchService. + + searchResult, err := client.Search(). + Index(testIndexName). + SearchSource(ss). // sets the SearchSource + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if searchResult.Hits == nil { + t.Errorf("expected SearchResult.Hits != nil; got nil") + } + if searchResult.Hits.TotalHits != 3 { + t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 3, searchResult.Hits.TotalHits) + } + if len(searchResult.Hits.Hits) != 2 { + t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", 2, len(searchResult.Hits.Hits)) + } +} + +func TestSearchInnerHitsOnHasChild(t *testing.T) { + // client := setupTestClientAndCreateIndex(t, SetTraceLog(log.New(os.Stdout, "", 0))) + client := setupTestClientAndCreateIndex(t) + + ctx := context.Background() + + // Create join index + createIndex, err := client.CreateIndex(testJoinIndex).Body(testJoinMapping).Do(ctx) + if err != nil { + t.Fatal(err) + } + if createIndex == nil { + t.Errorf("expected result to be != nil; got: %v", createIndex) + } + + // Add documents + // See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/parent-join.html for example code. + doc1 := joinDoc{ + Message: "This is a question", + JoinField: &joinField{Name: "question"}, + } + _, err = client.Index().Index(testJoinIndex).Type("doc").Id("1").BodyJson(&doc1).Refresh("true").Do(ctx) + if err != nil { + t.Fatal(err) + } + doc2 := joinDoc{ + Message: "This is another question", + JoinField: "question", + } + _, err = client.Index().Index(testJoinIndex).Type("doc").Id("2").BodyJson(&doc2).Refresh("true").Do(ctx) + if err != nil { + t.Fatal(err) + } + doc3 := joinDoc{ + Message: "This is an answer", + JoinField: &joinField{ + Name: "answer", + Parent: "1", + }, + } + _, err = client.Index().Index(testJoinIndex).Type("doc").Id("3").BodyJson(&doc3).Routing("1").Refresh("true").Do(ctx) + if err != nil { + t.Fatal(err) + } + doc4 := joinDoc{ + Message: "This is another answer", + JoinField: &joinField{ + Name: "answer", + Parent: "1", + }, + } + _, err = client.Index().Index(testJoinIndex).Type("doc").Id("4").BodyJson(&doc4).Routing("1").Refresh("true").Do(ctx) + if err != nil { + t.Fatal(err) + } + + _, err = client.Flush().Index(testJoinIndex).Do(ctx) + if err != nil { + t.Fatal(err) + } + + // Search for all documents that have an answer, and return those answers as inner hits + bq := NewBoolQuery() + bq = bq.Must(NewMatchAllQuery()) + bq = bq.Filter(NewHasChildQuery("answer", NewMatchAllQuery()). + InnerHit(NewInnerHit().Name("answers"))) + + searchResult, err := client.Search(). + Index(testJoinIndex). + Query(bq). + Pretty(true). + Do(ctx) + if err != nil { + t.Fatal(err) + } + if searchResult.Hits == nil { + t.Errorf("expected SearchResult.Hits != nil; got nil") + } + if searchResult.Hits.TotalHits != 1 { + t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 2, searchResult.Hits.TotalHits) + } + if len(searchResult.Hits.Hits) != 1 { + t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", 2, len(searchResult.Hits.Hits)) + } + + hit := searchResult.Hits.Hits[0] + if want, have := "1", hit.Id; want != have { + t.Fatalf("expected tweet %q; got: %q", want, have) + } + if hit.InnerHits == nil { + t.Fatalf("expected inner hits; got: %v", hit.InnerHits) + } + if want, have := 1, len(hit.InnerHits); want != have { + t.Fatalf("expected %d inner hits; got: %d", want, have) + } + innerHits, found := hit.InnerHits["answers"] + if !found { + t.Fatalf("expected inner hits for name %q", "answers") + } + if innerHits == nil || innerHits.Hits == nil { + t.Fatal("expected inner hits != nil") + } + if want, have := 2, len(innerHits.Hits.Hits); want != have { + t.Fatalf("expected %d inner hits; got: %d", want, have) + } + if want, have := "3", innerHits.Hits.Hits[0].Id; want != have { + t.Fatalf("expected inner hit with id %q; got: %q", want, have) + } + if want, have := "4", innerHits.Hits.Hits[1].Id; want != have { + t.Fatalf("expected inner hit with id %q; got: %q", want, have) + } +} + +func TestSearchInnerHitsOnHasParent(t *testing.T) { + // client := setupTestClientAndCreateIndex(t, SetTraceLog(log.New(os.Stdout, "", 0))) + client := setupTestClientAndCreateIndex(t) + + ctx := context.Background() + + // Create join index + createIndex, err := client.CreateIndex(testJoinIndex).Body(testJoinMapping).Do(ctx) + if err != nil { + t.Fatal(err) + } + if createIndex == nil { + t.Errorf("expected result to be != nil; got: %v", createIndex) + } + + // Add documents + // See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/parent-join.html for example code. + doc1 := joinDoc{ + Message: "This is a question", + JoinField: &joinField{Name: "question"}, + } + _, err = client.Index().Index(testJoinIndex).Type("doc").Id("1").BodyJson(&doc1).Refresh("true").Do(ctx) + if err != nil { + t.Fatal(err) + } + doc2 := joinDoc{ + Message: "This is another question", + JoinField: "question", + } + _, err = client.Index().Index(testJoinIndex).Type("doc").Id("2").BodyJson(&doc2).Refresh("true").Do(ctx) + if err != nil { + t.Fatal(err) + } + doc3 := joinDoc{ + Message: "This is an answer", + JoinField: &joinField{ + Name: "answer", + Parent: "1", + }, + } + _, err = client.Index().Index(testJoinIndex).Type("doc").Id("3").BodyJson(&doc3).Routing("1").Refresh("true").Do(ctx) + if err != nil { + t.Fatal(err) + } + doc4 := joinDoc{ + Message: "This is another answer", + JoinField: &joinField{ + Name: "answer", + Parent: "1", + }, + } + _, err = client.Index().Index(testJoinIndex).Type("doc").Id("4").BodyJson(&doc4).Routing("1").Refresh("true").Do(ctx) + if err != nil { + t.Fatal(err) + } + + _, err = client.Flush().Index(testJoinIndex).Do(ctx) + if err != nil { + t.Fatal(err) + } + + // Search for all documents that have an answer, and return those answers as inner hits + bq := NewBoolQuery() + bq = bq.Must(NewMatchAllQuery()) + bq = bq.Filter(NewHasParentQuery("question", NewMatchAllQuery()). + InnerHit(NewInnerHit().Name("answers"))) + + searchResult, err := client.Search(). + Index(testJoinIndex). + Query(bq). + Pretty(true). + Do(ctx) + if err != nil { + t.Fatal(err) + } + if searchResult.Hits == nil { + t.Errorf("expected SearchResult.Hits != nil; got nil") + } + if want, have := int64(2), searchResult.Hits.TotalHits; want != have { + t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", want, have) + } + if want, have := 2, len(searchResult.Hits.Hits); want != have { + t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", want, have) + } + + hit := searchResult.Hits.Hits[0] + if want, have := "3", hit.Id; want != have { + t.Fatalf("expected tweet %q; got: %q", want, have) + } + if hit.InnerHits == nil { + t.Fatalf("expected inner hits; got: %v", hit.InnerHits) + } + if want, have := 1, len(hit.InnerHits); want != have { + t.Fatalf("expected %d inner hits; got: %d", want, have) + } + innerHits, found := hit.InnerHits["answers"] + if !found { + t.Fatalf("expected inner hits for name %q", "tweets") + } + if innerHits == nil || innerHits.Hits == nil { + t.Fatal("expected inner hits != nil") + } + if want, have := 1, len(innerHits.Hits.Hits); want != have { + t.Fatalf("expected %d inner hits; got: %d", want, have) + } + if want, have := "1", innerHits.Hits.Hits[0].Id; want != have { + t.Fatalf("expected inner hit with id %q; got: %q", want, have) + } + + hit = searchResult.Hits.Hits[1] + if want, have := "4", hit.Id; want != have { + t.Fatalf("expected tweet %q; got: %q", want, have) + } + if hit.InnerHits == nil { + t.Fatalf("expected inner hits; got: %v", hit.InnerHits) + } + if want, have := 1, len(hit.InnerHits); want != have { + t.Fatalf("expected %d inner hits; got: %d", want, have) + } + innerHits, found = hit.InnerHits["answers"] + if !found { + t.Fatalf("expected inner hits for name %q", "tweets") + } + if innerHits == nil || innerHits.Hits == nil { + t.Fatal("expected inner hits != nil") + } + if want, have := 1, len(innerHits.Hits.Hits); want != have { + t.Fatalf("expected %d inner hits; got: %d", want, have) + } + if want, have := "1", innerHits.Hits.Hits[0].Id; want != have { + t.Fatalf("expected inner hit with id %q; got: %q", want, have) + } +} + +func TestSearchBuildURL(t *testing.T) { + client := setupTestClient(t) + + tests := []struct { + Indices []string + Types []string + Expected string + }{ + { + []string{}, + []string{}, + "/_search", + }, + { + []string{"index1"}, + []string{}, + "/index1/_search", + }, + { + []string{"index1", "index2"}, + []string{}, + "/index1%2Cindex2/_search", + }, + { + []string{}, + []string{"type1"}, + "/_all/type1/_search", + }, + { + []string{"index1"}, + []string{"type1"}, + "/index1/type1/_search", + }, + { + []string{"index1", "index2"}, + []string{"type1", "type2"}, + "/index1%2Cindex2/type1%2Ctype2/_search", + }, + { + []string{}, + []string{"type1", "type2"}, + "/_all/type1%2Ctype2/_search", + }, + } + + for i, test := range tests { + path, _, err := client.Search().Index(test.Indices...).Type(test.Types...).buildURL() + if err != nil { + t.Errorf("case #%d: %v", i+1, err) + continue + } + if path != test.Expected { + t.Errorf("case #%d: expected %q; got: %q", i+1, test.Expected, path) + } + } +} + +func TestSearchFilterPath(t *testing.T) { + // client := setupTestClientAndCreateIndexAndAddDocs(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) + client := setupTestClientAndCreateIndexAndAddDocs(t) + + // Match all should return all documents + all := NewMatchAllQuery() + searchResult, err := client.Search(). + Index(testIndexName). + Type("doc"). + Query(all). + FilterPath( + "took", + "hits.hits._id", + "hits.hits._source.user", + "hits.hits._source.message", + ). + Timeout("1s"). + Pretty(true). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if searchResult.Hits == nil { + t.Fatalf("expected SearchResult.Hits != nil; got nil") + } + // 0 because it was filtered out + if want, got := int64(0), searchResult.Hits.TotalHits; want != got { + t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", want, got) + } + if want, got := 3, len(searchResult.Hits.Hits); want != got { + t.Fatalf("expected len(SearchResult.Hits.Hits) = %d; got %d", want, got) + } + + for _, hit := range searchResult.Hits.Hits { + if want, got := "", hit.Index; want != got { + t.Fatalf("expected index %q, got %q", want, got) + } + item := make(map[string]interface{}) + err := json.Unmarshal(*hit.Source, &item) + if err != nil { + t.Fatal(err) + } + // user field + v, found := item["user"] + if !found { + t.Fatalf("expected SearchResult.Hits.Hit[%q] to be found", "user") + } + if v == "" { + t.Fatalf("expected user field, got %v (%T)", v, v) + } + // No retweets field + v, found = item["retweets"] + if found { + t.Fatalf("expected SearchResult.Hits.Hit[%q] to not be found, got %v", "retweets", v) + } + if v == "" { + t.Fatalf("expected user field, got %v (%T)", v, v) + } + } +} + +func TestSearchAfter(t *testing.T) { + // client := setupTestClientAndCreateIndexAndLog(t, SetTraceLog(log.New(os.Stdout, "", 0))) + client := setupTestClientAndCreateIndex(t) + + tweet1 := tweet{ + User: "olivere", Retweets: 108, + Message: "Welcome to Golang and Elasticsearch.", + Created: time.Date(2012, 12, 12, 17, 38, 34, 0, time.UTC), + } + tweet2 := tweet{ + User: "olivere", Retweets: 0, + Message: "Another unrelated topic.", + Created: time.Date(2012, 10, 10, 8, 12, 03, 0, time.UTC), + } + tweet3 := tweet{ + User: "sandrae", Retweets: 12, + Message: "Cycling is fun.", + Created: time.Date(2011, 11, 11, 10, 58, 12, 0, time.UTC), + } + + // Add all documents + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Index().Index(testIndexName).Type("doc").Id("3").BodyJson(&tweet3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + _, err = client.Flush().Index(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + searchResult, err := client.Search(). + Index(testIndexName). + Query(NewMatchAllQuery()). + SearchAfter("olivere"). + Sort("user", true). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if searchResult.Hits == nil { + t.Errorf("expected SearchResult.Hits != nil; got nil") + } + if searchResult.Hits.TotalHits != 3 { + t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 3, searchResult.Hits.TotalHits) + } + if want, got := 1, len(searchResult.Hits.Hits); want != got { + t.Fatalf("expected len(SearchResult.Hits.Hits) = %d; got: %d", want, got) + } + hit := searchResult.Hits.Hits[0] + if want, got := "3", hit.Id; want != got { + t.Fatalf("expected tweet %q; got: %q", want, got) + } +} + +func TestSearchResultWithFieldCollapsing(t *testing.T) { + client := setupTestClientAndCreateIndexAndAddDocs(t) // , SetTraceLog(log.New(os.Stdout, "", 0))) + + searchResult, err := client.Search(). + Index(testIndexName). + Type("doc"). + Query(NewMatchAllQuery()). + Collapse(NewCollapseBuilder("user")). + Pretty(true). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + if searchResult.Hits == nil { + t.Fatalf("expected SearchResult.Hits != nil; got nil") + } + if got := searchResult.Hits.TotalHits; got == 0 { + t.Fatalf("expected SearchResult.Hits.TotalHits > 0; got %d", got) + } + + for _, hit := range searchResult.Hits.Hits { + if hit.Index != testIndexName { + t.Fatalf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) + } + item := make(map[string]interface{}) + err := json.Unmarshal(*hit.Source, &item) + if err != nil { + t.Fatal(err) + } + if len(hit.Fields) == 0 { + t.Fatal("expected fields in SearchResult") + } + usersVal, ok := hit.Fields["user"] + if !ok { + t.Fatalf("expected %q field in fields of SearchResult", "user") + } + users, ok := usersVal.([]interface{}) + if !ok { + t.Fatalf("expected slice of strings in field of SearchResult, got %T", usersVal) + } + if len(users) != 1 { + t.Fatalf("expected 1 entry in users slice, got %d", len(users)) + } + } +} + +func TestSearchResultWithFieldCollapsingAndInnerHits(t *testing.T) { + client := setupTestClientAndCreateIndexAndAddDocs(t) // , SetTraceLog(log.New(os.Stdout, "", 0))) + + searchResult, err := client.Search(). + Index(testIndexName). + Type("doc"). + Query(NewMatchAllQuery()). + Collapse( + NewCollapseBuilder("user"). + InnerHit( + NewInnerHit().Name("last_tweets").Size(5).Sort("created", true), + ). + MaxConcurrentGroupRequests(4)). + Pretty(true). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + if searchResult.Hits == nil { + t.Fatalf("expected SearchResult.Hits != nil; got nil") + } + if got := searchResult.Hits.TotalHits; got == 0 { + t.Fatalf("expected SearchResult.Hits.TotalHits > 0; got %d", got) + } + + for _, hit := range searchResult.Hits.Hits { + if hit.Index != testIndexName { + t.Fatalf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) + } + item := make(map[string]interface{}) + err := json.Unmarshal(*hit.Source, &item) + if err != nil { + t.Fatal(err) + } + if len(hit.Fields) == 0 { + t.Fatal("expected fields in SearchResult") + } + usersVal, ok := hit.Fields["user"] + if !ok { + t.Fatalf("expected %q field in fields of SearchResult", "user") + } + users, ok := usersVal.([]interface{}) + if !ok { + t.Fatalf("expected slice of strings in field of SearchResult, got %T", usersVal) + } + if len(users) != 1 { + t.Fatalf("expected 1 entry in users slice, got %d", len(users)) + } + lastTweets, ok := hit.InnerHits["last_tweets"] + if !ok { + t.Fatalf("expected inner_hits named %q in SearchResult", "last_tweets") + } + if lastTweets == nil { + t.Fatal("expected inner_hits in SearchResult") + } + } +} diff --git a/vendor/github.com/olivere/elastic/setup_test.go b/vendor/github.com/olivere/elastic/setup_test.go new file mode 100644 index 0000000..480ae5d --- /dev/null +++ b/vendor/github.com/olivere/elastic/setup_test.go @@ -0,0 +1,445 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "log" + "math/rand" + "os" + "time" +) + +const ( + testIndexName = "elastic-test" + testIndexName2 = "elastic-test2" + testIndexName3 = "elastic-test3" + testMapping = ` +{ + "settings":{ + "number_of_shards":1, + "number_of_replicas":0 + }, + "mappings":{ + "doc":{ + "properties":{ + "user":{ + "type":"keyword" + }, + "message":{ + "type":"text", + "store": true, + "fielddata": true + }, + "tags":{ + "type":"keyword" + }, + "location":{ + "type":"geo_point" + }, + "suggest_field":{ + "type":"completion", + "contexts":[ + { + "name":"user_name", + "type":"category" + } + ] + } + } + } + } +} +` + + testNoSourceIndexName = "elastic-nosource-test" + testNoSourceMapping = ` +{ + "settings":{ + "number_of_shards":1, + "number_of_replicas":0 + }, + "mappings":{ + "doc":{ + "_source": { + "enabled": false + }, + "properties":{ + "user":{ + "type":"keyword" + }, + "message":{ + "type":"text", + "store": true, + "fielddata": true + }, + "tags":{ + "type":"keyword" + }, + "location":{ + "type":"geo_point" + }, + "suggest_field":{ + "type":"completion", + "contexts":[ + { + "name":"user_name", + "type":"category" + } + ] + } + } + } + } +} +` + + testJoinIndex = "elastic-joins" + testJoinMapping = ` + { + "settings":{ + "number_of_shards":1, + "number_of_replicas":0 + }, + "mappings":{ + "doc":{ + "properties":{ + "message":{ + "type":"text" + }, + "my_join_field": { + "type": "join", + "relations": { + "question": "answer" + } + } + } + } + } + } +` + + testOrderIndex = "elastic-orders" + testOrderMapping = ` +{ + "settings":{ + "number_of_shards":1, + "number_of_replicas":0 + }, + "mappings":{ + "doc":{ + "properties":{ + "article":{ + "type":"text" + }, + "manufacturer":{ + "type":"keyword" + }, + "price":{ + "type":"float" + }, + "time":{ + "type":"date", + "format": "YYYY-MM-dd" + } + } + } + } +} +` + + /* + testDoctypeIndex = "elastic-doctypes" + testDoctypeMapping = ` + { + "settings":{ + "number_of_shards":1, + "number_of_replicas":0 + }, + "mappings":{ + "doc":{ + "properties":{ + "message":{ + "type":"text", + "store": true, + "fielddata": true + } + } + } + } + } + ` + */ + + testQueryIndex = "elastic-queries" + testQueryMapping = ` +{ + "settings":{ + "number_of_shards":1, + "number_of_replicas":0 + }, + "mappings":{ + "doc":{ + "properties":{ + "message":{ + "type":"text", + "store": true, + "fielddata": true + }, + "query": { + "type": "percolator" + } + } + } + } +} +` +) + +type tweet struct { + User string `json:"user"` + Message string `json:"message"` + Retweets int `json:"retweets"` + Image string `json:"image,omitempty"` + Created time.Time `json:"created,omitempty"` + Tags []string `json:"tags,omitempty"` + Location string `json:"location,omitempty"` + Suggest *SuggestField `json:"suggest_field,omitempty"` +} + +func (t tweet) String() string { + return fmt.Sprintf("tweet{User:%q,Message:%q,Retweets:%d}", t.User, t.Message, t.Retweets) +} + +type comment struct { + User string `json:"user"` + Comment string `json:"comment"` + Created time.Time `json:"created,omitempty"` +} + +func (c comment) String() string { + return fmt.Sprintf("comment{User:%q,Comment:%q}", c.User, c.Comment) +} + +type joinDoc struct { + Message string `json:"message"` + JoinField interface{} `json:"my_join_field,omitempty"` +} + +type joinField struct { + Name string `json:"name"` + Parent string `json:"parent,omitempty"` +} + +type order struct { + Article string `json:"article"` + Manufacturer string `json:"manufacturer"` + Price float64 `json:"price"` + Time string `json:"time,omitempty"` +} + +func (o order) String() string { + return fmt.Sprintf("order{Article:%q,Manufacturer:%q,Price:%v,Time:%v}", o.Article, o.Manufacturer, o.Price, o.Time) +} + +// doctype is required for Percolate tests. +type doctype struct { + Message string `json:"message"` +} + +// queries is required for Percolate tests. +type queries struct { + Query string `json:"query"` +} + +func isTravis() bool { + return os.Getenv("TRAVIS") != "" +} + +func travisGoVersion() string { + return os.Getenv("TRAVIS_GO_VERSION") +} + +type logger interface { + Error(args ...interface{}) + Errorf(format string, args ...interface{}) + Fatal(args ...interface{}) + Fatalf(format string, args ...interface{}) + Fail() + FailNow() + Log(args ...interface{}) + Logf(format string, args ...interface{}) +} + +func setupTestClient(t logger, options ...ClientOptionFunc) (client *Client) { + var err error + + client, err = NewClient(options...) + if err != nil { + t.Fatal(err) + } + + client.DeleteIndex(testIndexName).Do(context.TODO()) + client.DeleteIndex(testIndexName2).Do(context.TODO()) + client.DeleteIndex(testIndexName3).Do(context.TODO()) + client.DeleteIndex(testOrderIndex).Do(context.TODO()) + client.DeleteIndex(testNoSourceIndexName).Do(context.TODO()) + //client.DeleteIndex(testDoctypeIndex).Do(context.TODO()) + client.DeleteIndex(testQueryIndex).Do(context.TODO()) + client.DeleteIndex(testJoinIndex).Do(context.TODO()) + + return client +} + +func setupTestClientAndCreateIndex(t logger, options ...ClientOptionFunc) *Client { + client := setupTestClient(t, options...) + + // Create index + createIndex, err := client.CreateIndex(testIndexName).Body(testMapping).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if createIndex == nil { + t.Errorf("expected result to be != nil; got: %v", createIndex) + } + + // Create second index + createIndex2, err := client.CreateIndex(testIndexName2).Body(testMapping).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if createIndex2 == nil { + t.Errorf("expected result to be != nil; got: %v", createIndex2) + } + + // Create no source index + createNoSourceIndex, err := client.CreateIndex(testNoSourceIndexName).Body(testNoSourceMapping).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if createNoSourceIndex == nil { + t.Errorf("expected result to be != nil; got: %v", createNoSourceIndex) + } + + // Create order index + createOrderIndex, err := client.CreateIndex(testOrderIndex).Body(testOrderMapping).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if createOrderIndex == nil { + t.Errorf("expected result to be != nil; got: %v", createOrderIndex) + } + + return client +} + +func setupTestClientAndCreateIndexAndLog(t logger, options ...ClientOptionFunc) *Client { + return setupTestClientAndCreateIndex(t, SetTraceLog(log.New(os.Stdout, "", 0))) +} + +func setupTestClientAndCreateIndexAndAddDocs(t logger, options ...ClientOptionFunc) *Client { + client := setupTestClientAndCreateIndex(t, options...) + + // Add tweets + tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} + tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} + tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} + //comment1 := comment{User: "nico", Comment: "You bet."} + + _, err := client.Index().Index(testIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + _, err = client.Index().Index(testIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + _, err = client.Index().Index(testIndexName).Type("doc").Id("3").Routing("someroutingkey").BodyJson(&tweet3).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + /* + _, err = client.Index().Index(testIndexName).Type("comment").Id("1").Parent("3").BodyJson(&comment1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + */ + + // Add orders + var orders []order + orders = append(orders, order{Article: "Apple MacBook", Manufacturer: "Apple", Price: 1290, Time: "2015-01-18"}) + orders = append(orders, order{Article: "Paper", Manufacturer: "Canon", Price: 100, Time: "2015-03-01"}) + orders = append(orders, order{Article: "Apple iPad", Manufacturer: "Apple", Price: 499, Time: "2015-04-12"}) + orders = append(orders, order{Article: "Dell XPS 13", Manufacturer: "Dell", Price: 1600, Time: "2015-04-18"}) + orders = append(orders, order{Article: "Apple Watch", Manufacturer: "Apple", Price: 349, Time: "2015-04-29"}) + orders = append(orders, order{Article: "Samsung TV", Manufacturer: "Samsung", Price: 790, Time: "2015-05-03"}) + orders = append(orders, order{Article: "Hoodie", Manufacturer: "h&m", Price: 49, Time: "2015-06-03"}) + orders = append(orders, order{Article: "T-Shirt", Manufacturer: "h&m", Price: 19, Time: "2015-06-18"}) + for i, o := range orders { + id := fmt.Sprintf("%d", i) + _, err = client.Index().Index(testOrderIndex).Type("doc").Id(id).BodyJson(&o).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + } + + // Flush + _, err = client.Flush().Index(testIndexName, testOrderIndex).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + return client +} + +func setupTestClientAndCreateIndexAndAddDocsNoSource(t logger, options ...ClientOptionFunc) *Client { + client := setupTestClientAndCreateIndex(t, options...) + + // Add tweets + tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} + tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} + + _, err := client.Index().Index(testNoSourceIndexName).Type("doc").Id("1").BodyJson(&tweet1).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + _, err = client.Index().Index(testNoSourceIndexName).Type("doc").Id("2").BodyJson(&tweet2).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + // Flush + _, err = client.Flush().Index(testNoSourceIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + + return client +} + +var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") + +func randomString(n int) string { + b := make([]rune, n) + for i := range b { + b[i] = letters[rand.Intn(len(letters))] + } + return string(b) +} + +type lexicographically struct { + strings []string +} + +func (l lexicographically) Len() int { + return len(l.strings) +} + +func (l lexicographically) Less(i, j int) bool { + return l.strings[i] < l.strings[j] +} + +func (l lexicographically) Swap(i, j int) { + l.strings[i], l.strings[j] = l.strings[j], l.strings[i] +} diff --git a/vendor/github.com/olivere/elastic/snapshot_create.go b/vendor/github.com/olivere/elastic/snapshot_create.go new file mode 100644 index 0000000..408ef70 --- /dev/null +++ b/vendor/github.com/olivere/elastic/snapshot_create.go @@ -0,0 +1,191 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/url" + "time" + + "github.com/olivere/elastic/uritemplates" +) + +// SnapshotCreateService is documented at https://www.elastic.co/guide/en/elasticsearch/reference/6.2/modules-snapshots.html. +type SnapshotCreateService struct { + client *Client + pretty bool + repository string + snapshot string + masterTimeout string + waitForCompletion *bool + bodyJson interface{} + bodyString string +} + +// NewSnapshotCreateService creates a new SnapshotCreateService. +func NewSnapshotCreateService(client *Client) *SnapshotCreateService { + return &SnapshotCreateService{ + client: client, + } +} + +// Repository is the repository name. +func (s *SnapshotCreateService) Repository(repository string) *SnapshotCreateService { + s.repository = repository + return s +} + +// Snapshot is the snapshot name. +func (s *SnapshotCreateService) Snapshot(snapshot string) *SnapshotCreateService { + s.snapshot = snapshot + return s +} + +// MasterTimeout is documented as: Explicit operation timeout for connection to master node. +func (s *SnapshotCreateService) MasterTimeout(masterTimeout string) *SnapshotCreateService { + s.masterTimeout = masterTimeout + return s +} + +// WaitForCompletion is documented as: Should this request wait until the operation has completed before returning. +func (s *SnapshotCreateService) WaitForCompletion(waitForCompletion bool) *SnapshotCreateService { + s.waitForCompletion = &waitForCompletion + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *SnapshotCreateService) Pretty(pretty bool) *SnapshotCreateService { + s.pretty = pretty + return s +} + +// BodyJson is documented as: The snapshot definition. +func (s *SnapshotCreateService) BodyJson(body interface{}) *SnapshotCreateService { + s.bodyJson = body + return s +} + +// BodyString is documented as: The snapshot definition. +func (s *SnapshotCreateService) BodyString(body string) *SnapshotCreateService { + s.bodyString = body + return s +} + +// buildURL builds the URL for the operation. +func (s *SnapshotCreateService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/_snapshot/{repository}/{snapshot}", map[string]string{ + "snapshot": s.snapshot, + "repository": s.repository, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.masterTimeout != "" { + params.Set("master_timeout", s.masterTimeout) + } + if s.waitForCompletion != nil { + params.Set("wait_for_completion", fmt.Sprintf("%v", *s.waitForCompletion)) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *SnapshotCreateService) Validate() error { + var invalid []string + if s.repository == "" { + invalid = append(invalid, "Repository") + } + if s.snapshot == "" { + invalid = append(invalid, "Snapshot") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *SnapshotCreateService) Do(ctx context.Context) (*SnapshotCreateResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Setup HTTP request body + var body interface{} + if s.bodyJson != nil { + body = s.bodyJson + } else { + body = s.bodyString + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "PUT", + Path: path, + Params: params, + Body: body, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(SnapshotCreateResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// SnapshotShardFailure stores information about failures that occurred during shard snapshotting process. +type SnapshotShardFailure struct { + Index string `json:"index"` + IndexUUID string `json:"index_uuid"` + ShardID int `json:"shard_id"` + Reason string `json:"reason"` + NodeID string `json:"node_id"` + Status string `json:"status"` +} + +// SnapshotCreateResponse is the response of SnapshotCreateService.Do. +type SnapshotCreateResponse struct { + // Accepted indicates whether the request was accepted by elasticsearch. + // It's available when waitForCompletion is false. + Accepted *bool `json:"accepted"` + + // Snapshot is available when waitForCompletion is true. + Snapshot *struct { + Snapshot string `json:"snapshot"` + UUID string `json:"uuid"` + VersionID int `json:"version_id"` + Version string `json:"version"` + Indices []string `json:"indices"` + State string `json:"state"` + Reason string `json:"reason"` + StartTime time.Time `json:"start_time"` + StartTimeInMillis int64 `json:"start_time_in_millis"` + EndTime time.Time `json:"end_time"` + EndTimeInMillis int64 `json:"end_time_in_millis"` + DurationInMillis int64 `json:"duration_in_millis"` + Failures []SnapshotShardFailure `json:"failures"` + Shards shardsInfo `json:"shards"` + } `json:"snapshot"` +} diff --git a/vendor/github.com/olivere/elastic/snapshot_create_repository.go b/vendor/github.com/olivere/elastic/snapshot_create_repository.go new file mode 100644 index 0000000..bbeb69f --- /dev/null +++ b/vendor/github.com/olivere/elastic/snapshot_create_repository.go @@ -0,0 +1,205 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/url" + + "github.com/olivere/elastic/uritemplates" +) + +// SnapshotCreateRepositoryService creates a snapshot repository. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/modules-snapshots.html +// for details. +type SnapshotCreateRepositoryService struct { + client *Client + pretty bool + repository string + masterTimeout string + timeout string + verify *bool + typ string + settings map[string]interface{} + bodyJson interface{} + bodyString string +} + +// NewSnapshotCreateRepositoryService creates a new SnapshotCreateRepositoryService. +func NewSnapshotCreateRepositoryService(client *Client) *SnapshotCreateRepositoryService { + return &SnapshotCreateRepositoryService{ + client: client, + } +} + +// Repository is the repository name. +func (s *SnapshotCreateRepositoryService) Repository(repository string) *SnapshotCreateRepositoryService { + s.repository = repository + return s +} + +// MasterTimeout specifies an explicit operation timeout for connection to master node. +func (s *SnapshotCreateRepositoryService) MasterTimeout(masterTimeout string) *SnapshotCreateRepositoryService { + s.masterTimeout = masterTimeout + return s +} + +// Timeout is an explicit operation timeout. +func (s *SnapshotCreateRepositoryService) Timeout(timeout string) *SnapshotCreateRepositoryService { + s.timeout = timeout + return s +} + +// Verify indicates whether to verify the repository after creation. +func (s *SnapshotCreateRepositoryService) Verify(verify bool) *SnapshotCreateRepositoryService { + s.verify = &verify + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *SnapshotCreateRepositoryService) Pretty(pretty bool) *SnapshotCreateRepositoryService { + s.pretty = pretty + return s +} + +// Type sets the snapshot repository type, e.g. "fs". +func (s *SnapshotCreateRepositoryService) Type(typ string) *SnapshotCreateRepositoryService { + s.typ = typ + return s +} + +// Settings sets all settings of the snapshot repository. +func (s *SnapshotCreateRepositoryService) Settings(settings map[string]interface{}) *SnapshotCreateRepositoryService { + s.settings = settings + return s +} + +// Setting sets a single settings of the snapshot repository. +func (s *SnapshotCreateRepositoryService) Setting(name string, value interface{}) *SnapshotCreateRepositoryService { + if s.settings == nil { + s.settings = make(map[string]interface{}) + } + s.settings[name] = value + return s +} + +// BodyJson is documented as: The repository definition. +func (s *SnapshotCreateRepositoryService) BodyJson(body interface{}) *SnapshotCreateRepositoryService { + s.bodyJson = body + return s +} + +// BodyString is documented as: The repository definition. +func (s *SnapshotCreateRepositoryService) BodyString(body string) *SnapshotCreateRepositoryService { + s.bodyString = body + return s +} + +// buildURL builds the URL for the operation. +func (s *SnapshotCreateRepositoryService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/_snapshot/{repository}", map[string]string{ + "repository": s.repository, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.masterTimeout != "" { + params.Set("master_timeout", s.masterTimeout) + } + if s.timeout != "" { + params.Set("timeout", s.timeout) + } + if s.verify != nil { + params.Set("verify", fmt.Sprintf("%v", *s.verify)) + } + return path, params, nil +} + +// buildBody builds the body for the operation. +func (s *SnapshotCreateRepositoryService) buildBody() (interface{}, error) { + if s.bodyJson != nil { + return s.bodyJson, nil + } + if s.bodyString != "" { + return s.bodyString, nil + } + + body := map[string]interface{}{ + "type": s.typ, + } + if len(s.settings) > 0 { + body["settings"] = s.settings + } + return body, nil +} + +// Validate checks if the operation is valid. +func (s *SnapshotCreateRepositoryService) Validate() error { + var invalid []string + if s.repository == "" { + invalid = append(invalid, "Repository") + } + if s.bodyString == "" && s.bodyJson == nil { + invalid = append(invalid, "BodyJson") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *SnapshotCreateRepositoryService) Do(ctx context.Context) (*SnapshotCreateRepositoryResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Setup HTTP request body + body, err := s.buildBody() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "PUT", + Path: path, + Params: params, + Body: body, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(SnapshotCreateRepositoryResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// SnapshotCreateRepositoryResponse is the response of SnapshotCreateRepositoryService.Do. +type SnapshotCreateRepositoryResponse struct { + Acknowledged bool `json:"acknowledged"` + ShardsAcknowledged bool `json:"shards_acknowledged"` + Index string `json:"index,omitempty"` +} diff --git a/vendor/github.com/olivere/elastic/snapshot_create_repository_test.go b/vendor/github.com/olivere/elastic/snapshot_create_repository_test.go new file mode 100644 index 0000000..2045c70 --- /dev/null +++ b/vendor/github.com/olivere/elastic/snapshot_create_repository_test.go @@ -0,0 +1,61 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestSnapshotPutRepositoryURL(t *testing.T) { + client := setupTestClient(t) + + tests := []struct { + Repository string + Expected string + }{ + { + "repo", + "/_snapshot/repo", + }, + } + + for _, test := range tests { + path, _, err := client.SnapshotCreateRepository(test.Repository).buildURL() + if err != nil { + t.Fatal(err) + } + if path != test.Expected { + t.Errorf("expected %q; got: %q", test.Expected, path) + } + } +} + +func TestSnapshotPutRepositoryBody(t *testing.T) { + client := setupTestClient(t) + + service := client.SnapshotCreateRepository("my_backup") + service = service.Type("fs"). + Settings(map[string]interface{}{ + "location": "my_backup_location", + "compress": false, + }). + Setting("compress", true). + Setting("chunk_size", 16*1024*1024) + + src, err := service.buildBody() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"settings":{"chunk_size":16777216,"compress":true,"location":"my_backup_location"},"type":"fs"}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/snapshot_create_test.go b/vendor/github.com/olivere/elastic/snapshot_create_test.go new file mode 100644 index 0000000..74b009c --- /dev/null +++ b/vendor/github.com/olivere/elastic/snapshot_create_test.go @@ -0,0 +1,63 @@ +package elastic + +import ( + "net/url" + "reflect" + "testing" +) + +func TestSnapshotValidate(t *testing.T) { + var client *Client + + err := NewSnapshotCreateService(client).Validate() + got := err.Error() + expected := "missing required fields: [Repository Snapshot]" + if got != expected { + t.Errorf("expected %q; got: %q", expected, got) + } +} + +func TestSnapshotPutURL(t *testing.T) { + client := setupTestClient(t) + + tests := []struct { + Repository string + Snapshot string + Pretty bool + MasterTimeout string + WaitForCompletion bool + ExpectedPath string + ExpectedParams url.Values + }{ + { + Repository: "repo", + Snapshot: "snapshot_of_sunday", + Pretty: true, + MasterTimeout: "60s", + WaitForCompletion: true, + ExpectedPath: "/_snapshot/repo/snapshot_of_sunday", + ExpectedParams: url.Values{ + "pretty": []string{"true"}, + "master_timeout": []string{"60s"}, + "wait_for_completion": []string{"true"}, + }, + }, + } + + for _, test := range tests { + path, params, err := client.SnapshotCreate(test.Repository, test.Snapshot). + Pretty(test.Pretty). + MasterTimeout(test.MasterTimeout). + WaitForCompletion(test.WaitForCompletion). + buildURL() + if err != nil { + t.Fatal(err) + } + if path != test.ExpectedPath { + t.Errorf("expected %q; got: %q", test.ExpectedPath, path) + } + if !reflect.DeepEqual(params, test.ExpectedParams) { + t.Errorf("expected %q; got: %q", test.ExpectedParams, params) + } + } +} diff --git a/vendor/github.com/olivere/elastic/snapshot_delete_repository.go b/vendor/github.com/olivere/elastic/snapshot_delete_repository.go new file mode 100644 index 0000000..5a16a5d --- /dev/null +++ b/vendor/github.com/olivere/elastic/snapshot_delete_repository.go @@ -0,0 +1,132 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/url" + "strings" + + "github.com/olivere/elastic/uritemplates" +) + +// SnapshotDeleteRepositoryService deletes a snapshot repository. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/modules-snapshots.html +// for details. +type SnapshotDeleteRepositoryService struct { + client *Client + pretty bool + repository []string + masterTimeout string + timeout string +} + +// NewSnapshotDeleteRepositoryService creates a new SnapshotDeleteRepositoryService. +func NewSnapshotDeleteRepositoryService(client *Client) *SnapshotDeleteRepositoryService { + return &SnapshotDeleteRepositoryService{ + client: client, + repository: make([]string, 0), + } +} + +// Repository is the list of repository names. +func (s *SnapshotDeleteRepositoryService) Repository(repositories ...string) *SnapshotDeleteRepositoryService { + s.repository = append(s.repository, repositories...) + return s +} + +// MasterTimeout specifies an explicit operation timeout for connection to master node. +func (s *SnapshotDeleteRepositoryService) MasterTimeout(masterTimeout string) *SnapshotDeleteRepositoryService { + s.masterTimeout = masterTimeout + return s +} + +// Timeout is an explicit operation timeout. +func (s *SnapshotDeleteRepositoryService) Timeout(timeout string) *SnapshotDeleteRepositoryService { + s.timeout = timeout + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *SnapshotDeleteRepositoryService) Pretty(pretty bool) *SnapshotDeleteRepositoryService { + s.pretty = pretty + return s +} + +// buildURL builds the URL for the operation. +func (s *SnapshotDeleteRepositoryService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/_snapshot/{repository}", map[string]string{ + "repository": strings.Join(s.repository, ","), + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.masterTimeout != "" { + params.Set("master_timeout", s.masterTimeout) + } + if s.timeout != "" { + params.Set("timeout", s.timeout) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *SnapshotDeleteRepositoryService) Validate() error { + var invalid []string + if len(s.repository) == 0 { + invalid = append(invalid, "Repository") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *SnapshotDeleteRepositoryService) Do(ctx context.Context) (*SnapshotDeleteRepositoryResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "DELETE", + Path: path, + Params: params, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(SnapshotDeleteRepositoryResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// SnapshotDeleteRepositoryResponse is the response of SnapshotDeleteRepositoryService.Do. +type SnapshotDeleteRepositoryResponse struct { + Acknowledged bool `json:"acknowledged"` + ShardsAcknowledged bool `json:"shards_acknowledged"` + Index string `json:"index,omitempty"` +} diff --git a/vendor/github.com/olivere/elastic/snapshot_delete_repository_test.go b/vendor/github.com/olivere/elastic/snapshot_delete_repository_test.go new file mode 100644 index 0000000..aec793a --- /dev/null +++ b/vendor/github.com/olivere/elastic/snapshot_delete_repository_test.go @@ -0,0 +1,35 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import "testing" + +func TestSnapshotDeleteRepositoryURL(t *testing.T) { + client := setupTestClient(t) + + tests := []struct { + Repository []string + Expected string + }{ + { + []string{"repo1"}, + "/_snapshot/repo1", + }, + { + []string{"repo1", "repo2"}, + "/_snapshot/repo1%2Crepo2", + }, + } + + for _, test := range tests { + path, _, err := client.SnapshotDeleteRepository(test.Repository...).buildURL() + if err != nil { + t.Fatal(err) + } + if path != test.Expected { + t.Errorf("expected %q; got: %q", test.Expected, path) + } + } +} diff --git a/vendor/github.com/olivere/elastic/snapshot_get_repository.go b/vendor/github.com/olivere/elastic/snapshot_get_repository.go new file mode 100644 index 0000000..b1794c1 --- /dev/null +++ b/vendor/github.com/olivere/elastic/snapshot_get_repository.go @@ -0,0 +1,134 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/url" + "strings" + + "github.com/olivere/elastic/uritemplates" +) + +// SnapshotGetRepositoryService reads a snapshot repository. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/modules-snapshots.html +// for details. +type SnapshotGetRepositoryService struct { + client *Client + pretty bool + repository []string + local *bool + masterTimeout string +} + +// NewSnapshotGetRepositoryService creates a new SnapshotGetRepositoryService. +func NewSnapshotGetRepositoryService(client *Client) *SnapshotGetRepositoryService { + return &SnapshotGetRepositoryService{ + client: client, + repository: make([]string, 0), + } +} + +// Repository is the list of repository names. +func (s *SnapshotGetRepositoryService) Repository(repositories ...string) *SnapshotGetRepositoryService { + s.repository = append(s.repository, repositories...) + return s +} + +// Local indicates whether to return local information, i.e. do not retrieve the state from master node (default: false). +func (s *SnapshotGetRepositoryService) Local(local bool) *SnapshotGetRepositoryService { + s.local = &local + return s +} + +// MasterTimeout specifies an explicit operation timeout for connection to master node. +func (s *SnapshotGetRepositoryService) MasterTimeout(masterTimeout string) *SnapshotGetRepositoryService { + s.masterTimeout = masterTimeout + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *SnapshotGetRepositoryService) Pretty(pretty bool) *SnapshotGetRepositoryService { + s.pretty = pretty + return s +} + +// buildURL builds the URL for the operation. +func (s *SnapshotGetRepositoryService) buildURL() (string, url.Values, error) { + // Build URL + var err error + var path string + if len(s.repository) > 0 { + path, err = uritemplates.Expand("/_snapshot/{repository}", map[string]string{ + "repository": strings.Join(s.repository, ","), + }) + } else { + path = "/_snapshot" + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.local != nil { + params.Set("local", fmt.Sprintf("%v", *s.local)) + } + if s.masterTimeout != "" { + params.Set("master_timeout", s.masterTimeout) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *SnapshotGetRepositoryService) Validate() error { + return nil +} + +// Do executes the operation. +func (s *SnapshotGetRepositoryService) Do(ctx context.Context) (SnapshotGetRepositoryResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + }) + if err != nil { + return nil, err + } + + // Return operation response + var ret SnapshotGetRepositoryResponse + if err := json.Unmarshal(res.Body, &ret); err != nil { + return nil, err + } + return ret, nil +} + +// SnapshotGetRepositoryResponse is the response of SnapshotGetRepositoryService.Do. +type SnapshotGetRepositoryResponse map[string]*SnapshotRepositoryMetaData + +// SnapshotRepositoryMetaData contains all information about +// a single snapshot repository. +type SnapshotRepositoryMetaData struct { + Type string `json:"type"` + Settings map[string]interface{} `json:"settings,omitempty"` +} diff --git a/vendor/github.com/olivere/elastic/snapshot_get_repository_test.go b/vendor/github.com/olivere/elastic/snapshot_get_repository_test.go new file mode 100644 index 0000000..0dcd0bb --- /dev/null +++ b/vendor/github.com/olivere/elastic/snapshot_get_repository_test.go @@ -0,0 +1,39 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import "testing" + +func TestSnapshotGetRepositoryURL(t *testing.T) { + client := setupTestClient(t) + + tests := []struct { + Repository []string + Expected string + }{ + { + []string{}, + "/_snapshot", + }, + { + []string{"repo1"}, + "/_snapshot/repo1", + }, + { + []string{"repo1", "repo2"}, + "/_snapshot/repo1%2Crepo2", + }, + } + + for _, test := range tests { + path, _, err := client.SnapshotGetRepository(test.Repository...).buildURL() + if err != nil { + t.Fatal(err) + } + if path != test.Expected { + t.Errorf("expected %q; got: %q", test.Expected, path) + } + } +} diff --git a/vendor/github.com/olivere/elastic/snapshot_verify_repository.go b/vendor/github.com/olivere/elastic/snapshot_verify_repository.go new file mode 100644 index 0000000..fb88206 --- /dev/null +++ b/vendor/github.com/olivere/elastic/snapshot_verify_repository.go @@ -0,0 +1,132 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "fmt" + "net/url" + + "github.com/olivere/elastic/uritemplates" +) + +// SnapshotVerifyRepositoryService verifies a snapshop repository. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/modules-snapshots.html +// for details. +type SnapshotVerifyRepositoryService struct { + client *Client + pretty bool + repository string + masterTimeout string + timeout string +} + +// NewSnapshotVerifyRepositoryService creates a new SnapshotVerifyRepositoryService. +func NewSnapshotVerifyRepositoryService(client *Client) *SnapshotVerifyRepositoryService { + return &SnapshotVerifyRepositoryService{ + client: client, + } +} + +// Repository specifies the repository name. +func (s *SnapshotVerifyRepositoryService) Repository(repository string) *SnapshotVerifyRepositoryService { + s.repository = repository + return s +} + +// MasterTimeout is the explicit operation timeout for connection to master node. +func (s *SnapshotVerifyRepositoryService) MasterTimeout(masterTimeout string) *SnapshotVerifyRepositoryService { + s.masterTimeout = masterTimeout + return s +} + +// Timeout is an explicit operation timeout. +func (s *SnapshotVerifyRepositoryService) Timeout(timeout string) *SnapshotVerifyRepositoryService { + s.timeout = timeout + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *SnapshotVerifyRepositoryService) Pretty(pretty bool) *SnapshotVerifyRepositoryService { + s.pretty = pretty + return s +} + +// buildURL builds the URL for the operation. +func (s *SnapshotVerifyRepositoryService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/_snapshot/{repository}/_verify", map[string]string{ + "repository": s.repository, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.masterTimeout != "" { + params.Set("master_timeout", s.masterTimeout) + } + if s.timeout != "" { + params.Set("timeout", s.timeout) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *SnapshotVerifyRepositoryService) Validate() error { + var invalid []string + if s.repository == "" { + invalid = append(invalid, "Repository") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *SnapshotVerifyRepositoryService) Do(ctx context.Context) (*SnapshotVerifyRepositoryResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(SnapshotVerifyRepositoryResponse) + if err := json.Unmarshal(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// SnapshotVerifyRepositoryResponse is the response of SnapshotVerifyRepositoryService.Do. +type SnapshotVerifyRepositoryResponse struct { + Nodes map[string]*SnapshotVerifyRepositoryNode `json:"nodes"` +} + +type SnapshotVerifyRepositoryNode struct { + Name string `json:"name"` +} diff --git a/vendor/github.com/olivere/elastic/snapshot_verify_repository_test.go b/vendor/github.com/olivere/elastic/snapshot_verify_repository_test.go new file mode 100644 index 0000000..9776782 --- /dev/null +++ b/vendor/github.com/olivere/elastic/snapshot_verify_repository_test.go @@ -0,0 +1,31 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import "testing" + +func TestSnapshotVerifyRepositoryURL(t *testing.T) { + client := setupTestClient(t) + + tests := []struct { + Repository string + Expected string + }{ + { + "repo", + "/_snapshot/repo/_verify", + }, + } + + for _, test := range tests { + path, _, err := client.SnapshotVerifyRepository(test.Repository).buildURL() + if err != nil { + t.Fatal(err) + } + if path != test.Expected { + t.Errorf("expected %q; got: %q", test.Expected, path) + } + } +} diff --git a/vendor/github.com/olivere/elastic/sort.go b/vendor/github.com/olivere/elastic/sort.go new file mode 100644 index 0000000..064d05e --- /dev/null +++ b/vendor/github.com/olivere/elastic/sort.go @@ -0,0 +1,614 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import "errors" + +// -- Sorter -- + +// Sorter is an interface for sorting strategies, e.g. ScoreSort or FieldSort. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-sort.html. +type Sorter interface { + Source() (interface{}, error) +} + +// -- SortInfo -- + +// SortInfo contains information about sorting a field. +type SortInfo struct { + Sorter + Field string + Ascending bool + Missing interface{} + IgnoreUnmapped *bool + UnmappedType string + SortMode string + NestedFilter Query + NestedPath string + NestedSort *NestedSort // available in 6.1 or later +} + +func (info SortInfo) Source() (interface{}, error) { + prop := make(map[string]interface{}) + if info.Ascending { + prop["order"] = "asc" + } else { + prop["order"] = "desc" + } + if info.Missing != nil { + prop["missing"] = info.Missing + } + if info.IgnoreUnmapped != nil { + prop["ignore_unmapped"] = *info.IgnoreUnmapped + } + if info.UnmappedType != "" { + prop["unmapped_type"] = info.UnmappedType + } + if info.SortMode != "" { + prop["mode"] = info.SortMode + } + if info.NestedFilter != nil { + src, err := info.NestedFilter.Source() + if err != nil { + return nil, err + } + prop["nested_filter"] = src + } + if info.NestedPath != "" { + prop["nested_path"] = info.NestedPath + } + if info.NestedSort != nil { + src, err := info.NestedSort.Source() + if err != nil { + return nil, err + } + prop["nested"] = src + } + source := make(map[string]interface{}) + source[info.Field] = prop + return source, nil +} + +// -- SortByDoc -- + +// SortByDoc sorts by the "_doc" field, as described in +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-scroll.html. +// +// Example: +// ss := elastic.NewSearchSource() +// ss = ss.SortBy(elastic.SortByDoc{}) +type SortByDoc struct { + Sorter +} + +// Source returns the JSON-serializable data. +func (s SortByDoc) Source() (interface{}, error) { + return "_doc", nil +} + +// -- ScoreSort -- + +// ScoreSort sorts by relevancy score. +type ScoreSort struct { + Sorter + ascending bool +} + +// NewScoreSort creates a new ScoreSort. +func NewScoreSort() *ScoreSort { + return &ScoreSort{ascending: false} // Descending by default! +} + +// Order defines whether sorting ascending (default) or descending. +func (s *ScoreSort) Order(ascending bool) *ScoreSort { + s.ascending = ascending + return s +} + +// Asc sets ascending sort order. +func (s *ScoreSort) Asc() *ScoreSort { + s.ascending = true + return s +} + +// Desc sets descending sort order. +func (s *ScoreSort) Desc() *ScoreSort { + s.ascending = false + return s +} + +// Source returns the JSON-serializable data. +func (s *ScoreSort) Source() (interface{}, error) { + source := make(map[string]interface{}) + x := make(map[string]interface{}) + source["_score"] = x + if s.ascending { + x["order"] = "asc" + } else { + x["order"] = "desc" + } + return source, nil +} + +// -- FieldSort -- + +// FieldSort sorts by a given field. +type FieldSort struct { + Sorter + fieldName string + ascending bool + missing interface{} + unmappedType *string + sortMode *string + nestedFilter Query + nestedPath *string + nestedSort *NestedSort +} + +// NewFieldSort creates a new FieldSort. +func NewFieldSort(fieldName string) *FieldSort { + return &FieldSort{ + fieldName: fieldName, + ascending: true, + } +} + +// FieldName specifies the name of the field to be used for sorting. +func (s *FieldSort) FieldName(fieldName string) *FieldSort { + s.fieldName = fieldName + return s +} + +// Order defines whether sorting ascending (default) or descending. +func (s *FieldSort) Order(ascending bool) *FieldSort { + s.ascending = ascending + return s +} + +// Asc sets ascending sort order. +func (s *FieldSort) Asc() *FieldSort { + s.ascending = true + return s +} + +// Desc sets descending sort order. +func (s *FieldSort) Desc() *FieldSort { + s.ascending = false + return s +} + +// Missing sets the value to be used when a field is missing in a document. +// You can also use "_last" or "_first" to sort missing last or first +// respectively. +func (s *FieldSort) Missing(missing interface{}) *FieldSort { + s.missing = missing + return s +} + +// UnmappedType sets the type to use when the current field is not mapped +// in an index. +func (s *FieldSort) UnmappedType(typ string) *FieldSort { + s.unmappedType = &typ + return s +} + +// SortMode specifies what values to pick in case a document contains +// multiple values for the targeted sort field. Possible values are: +// min, max, sum, and avg. +func (s *FieldSort) SortMode(sortMode string) *FieldSort { + s.sortMode = &sortMode + return s +} + +// NestedFilter sets a filter that nested objects should match with +// in order to be taken into account for sorting. +func (s *FieldSort) NestedFilter(nestedFilter Query) *FieldSort { + s.nestedFilter = nestedFilter + return s +} + +// NestedPath is used if sorting occurs on a field that is inside a +// nested object. +func (s *FieldSort) NestedPath(nestedPath string) *FieldSort { + s.nestedPath = &nestedPath + return s +} + +// NestedSort is available starting with 6.1 and will replace NestedFilter +// and NestedPath. +func (s *FieldSort) NestedSort(nestedSort *NestedSort) *FieldSort { + s.nestedSort = nestedSort + return s +} + +// Source returns the JSON-serializable data. +func (s *FieldSort) Source() (interface{}, error) { + source := make(map[string]interface{}) + x := make(map[string]interface{}) + source[s.fieldName] = x + if s.ascending { + x["order"] = "asc" + } else { + x["order"] = "desc" + } + if s.missing != nil { + x["missing"] = s.missing + } + if s.unmappedType != nil { + x["unmapped_type"] = *s.unmappedType + } + if s.sortMode != nil { + x["mode"] = *s.sortMode + } + if s.nestedFilter != nil { + src, err := s.nestedFilter.Source() + if err != nil { + return nil, err + } + x["nested_filter"] = src + } + if s.nestedPath != nil { + x["nested_path"] = *s.nestedPath + } + if s.nestedSort != nil { + src, err := s.nestedSort.Source() + if err != nil { + return nil, err + } + x["nested"] = src + } + return source, nil +} + +// -- GeoDistanceSort -- + +// GeoDistanceSort allows for sorting by geographic distance. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-sort.html#_geo_distance_sorting. +type GeoDistanceSort struct { + Sorter + fieldName string + points []*GeoPoint + geohashes []string + distanceType *string + unit string + ascending bool + sortMode *string + nestedFilter Query + nestedPath *string + nestedSort *NestedSort +} + +// NewGeoDistanceSort creates a new sorter for geo distances. +func NewGeoDistanceSort(fieldName string) *GeoDistanceSort { + return &GeoDistanceSort{ + fieldName: fieldName, + ascending: true, + } +} + +// FieldName specifies the name of the (geo) field to use for sorting. +func (s *GeoDistanceSort) FieldName(fieldName string) *GeoDistanceSort { + s.fieldName = fieldName + return s +} + +// Order defines whether sorting ascending (default) or descending. +func (s *GeoDistanceSort) Order(ascending bool) *GeoDistanceSort { + s.ascending = ascending + return s +} + +// Asc sets ascending sort order. +func (s *GeoDistanceSort) Asc() *GeoDistanceSort { + s.ascending = true + return s +} + +// Desc sets descending sort order. +func (s *GeoDistanceSort) Desc() *GeoDistanceSort { + s.ascending = false + return s +} + +// Point specifies a point to create the range distance aggregations from. +func (s *GeoDistanceSort) Point(lat, lon float64) *GeoDistanceSort { + s.points = append(s.points, GeoPointFromLatLon(lat, lon)) + return s +} + +// Points specifies the geo point(s) to create the range distance aggregations from. +func (s *GeoDistanceSort) Points(points ...*GeoPoint) *GeoDistanceSort { + s.points = append(s.points, points...) + return s +} + +// GeoHashes specifies the geo point to create the range distance aggregations from. +func (s *GeoDistanceSort) GeoHashes(geohashes ...string) *GeoDistanceSort { + s.geohashes = append(s.geohashes, geohashes...) + return s +} + +// Unit specifies the distance unit to use. It defaults to km. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/common-options.html#distance-units +// for details. +func (s *GeoDistanceSort) Unit(unit string) *GeoDistanceSort { + s.unit = unit + return s +} + +// GeoDistance is an alias for DistanceType. +func (s *GeoDistanceSort) GeoDistance(geoDistance string) *GeoDistanceSort { + return s.DistanceType(geoDistance) +} + +// DistanceType describes how to compute the distance, e.g. "arc" or "plane". +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-sort.html#geo-sorting +// for details. +func (s *GeoDistanceSort) DistanceType(distanceType string) *GeoDistanceSort { + s.distanceType = &distanceType + return s +} + +// SortMode specifies what values to pick in case a document contains +// multiple values for the targeted sort field. Possible values are: +// min, max, sum, and avg. +func (s *GeoDistanceSort) SortMode(sortMode string) *GeoDistanceSort { + s.sortMode = &sortMode + return s +} + +// NestedFilter sets a filter that nested objects should match with +// in order to be taken into account for sorting. +func (s *GeoDistanceSort) NestedFilter(nestedFilter Query) *GeoDistanceSort { + s.nestedFilter = nestedFilter + return s +} + +// NestedPath is used if sorting occurs on a field that is inside a +// nested object. +func (s *GeoDistanceSort) NestedPath(nestedPath string) *GeoDistanceSort { + s.nestedPath = &nestedPath + return s +} + +// NestedSort is available starting with 6.1 and will replace NestedFilter +// and NestedPath. +func (s *GeoDistanceSort) NestedSort(nestedSort *NestedSort) *GeoDistanceSort { + s.nestedSort = nestedSort + return s +} + +// Source returns the JSON-serializable data. +func (s *GeoDistanceSort) Source() (interface{}, error) { + source := make(map[string]interface{}) + x := make(map[string]interface{}) + source["_geo_distance"] = x + + // Points + var ptarr []interface{} + for _, pt := range s.points { + ptarr = append(ptarr, pt.Source()) + } + for _, geohash := range s.geohashes { + ptarr = append(ptarr, geohash) + } + x[s.fieldName] = ptarr + + if s.unit != "" { + x["unit"] = s.unit + } + if s.distanceType != nil { + x["distance_type"] = *s.distanceType + } + + if s.ascending { + x["order"] = "asc" + } else { + x["order"] = "desc" + } + if s.sortMode != nil { + x["mode"] = *s.sortMode + } + if s.nestedFilter != nil { + src, err := s.nestedFilter.Source() + if err != nil { + return nil, err + } + x["nested_filter"] = src + } + if s.nestedPath != nil { + x["nested_path"] = *s.nestedPath + } + if s.nestedSort != nil { + src, err := s.nestedSort.Source() + if err != nil { + return nil, err + } + x["nested"] = src + } + return source, nil +} + +// -- ScriptSort -- + +// ScriptSort sorts by a custom script. See +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/modules-scripting.html#modules-scripting +// for details about scripting. +type ScriptSort struct { + Sorter + script *Script + typ string + ascending bool + sortMode *string + nestedFilter Query + nestedPath *string + nestedSort *NestedSort +} + +// NewScriptSort creates and initializes a new ScriptSort. +// You must provide a script and a type, e.g. "string" or "number". +func NewScriptSort(script *Script, typ string) *ScriptSort { + return &ScriptSort{ + script: script, + typ: typ, + ascending: true, + } +} + +// Type sets the script type, which can be either "string" or "number". +func (s *ScriptSort) Type(typ string) *ScriptSort { + s.typ = typ + return s +} + +// Order defines whether sorting ascending (default) or descending. +func (s *ScriptSort) Order(ascending bool) *ScriptSort { + s.ascending = ascending + return s +} + +// Asc sets ascending sort order. +func (s *ScriptSort) Asc() *ScriptSort { + s.ascending = true + return s +} + +// Desc sets descending sort order. +func (s *ScriptSort) Desc() *ScriptSort { + s.ascending = false + return s +} + +// SortMode specifies what values to pick in case a document contains +// multiple values for the targeted sort field. Possible values are: +// min or max. +func (s *ScriptSort) SortMode(sortMode string) *ScriptSort { + s.sortMode = &sortMode + return s +} + +// NestedFilter sets a filter that nested objects should match with +// in order to be taken into account for sorting. +func (s *ScriptSort) NestedFilter(nestedFilter Query) *ScriptSort { + s.nestedFilter = nestedFilter + return s +} + +// NestedPath is used if sorting occurs on a field that is inside a +// nested object. +func (s *ScriptSort) NestedPath(nestedPath string) *ScriptSort { + s.nestedPath = &nestedPath + return s +} + +// NestedSort is available starting with 6.1 and will replace NestedFilter +// and NestedPath. +func (s *ScriptSort) NestedSort(nestedSort *NestedSort) *ScriptSort { + s.nestedSort = nestedSort + return s +} + +// Source returns the JSON-serializable data. +func (s *ScriptSort) Source() (interface{}, error) { + if s.script == nil { + return nil, errors.New("ScriptSort expected a script") + } + source := make(map[string]interface{}) + x := make(map[string]interface{}) + source["_script"] = x + + src, err := s.script.Source() + if err != nil { + return nil, err + } + x["script"] = src + + x["type"] = s.typ + + if s.ascending { + x["order"] = "asc" + } else { + x["order"] = "desc" + } + if s.sortMode != nil { + x["mode"] = *s.sortMode + } + if s.nestedFilter != nil { + src, err := s.nestedFilter.Source() + if err != nil { + return nil, err + } + x["nested_filter"] = src + } + if s.nestedPath != nil { + x["nested_path"] = *s.nestedPath + } + if s.nestedSort != nil { + src, err := s.nestedSort.Source() + if err != nil { + return nil, err + } + x["nested"] = src + } + return source, nil +} + +// -- NestedSort -- + +// NestedSort is used for fields that are inside a nested object. +// It takes a "path" argument and an optional nested filter that the +// nested objects should match with in order to be taken into account +// for sorting. +// +// NestedSort is available from 6.1 and replaces nestedFilter and nestedPath +// in the other sorters. +type NestedSort struct { + Sorter + path string + filter Query + nestedSort *NestedSort +} + +// NewNestedSort creates a new NestedSort. +func NewNestedSort(path string) *NestedSort { + return &NestedSort{path: path} +} + +// Filter sets the filter. +func (s *NestedSort) Filter(filter Query) *NestedSort { + s.filter = filter + return s +} + +// NestedSort embeds another level of nested sorting. +func (s *NestedSort) NestedSort(nestedSort *NestedSort) *NestedSort { + s.nestedSort = nestedSort + return s +} + +// Source returns the JSON-serializable data. +func (s *NestedSort) Source() (interface{}, error) { + source := make(map[string]interface{}) + + if s.path != "" { + source["path"] = s.path + } + if s.filter != nil { + src, err := s.filter.Source() + if err != nil { + return nil, err + } + source["filter"] = src + } + if s.nestedSort != nil { + src, err := s.nestedSort.Source() + if err != nil { + return nil, err + } + source["nested"] = src + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/sort_test.go b/vendor/github.com/olivere/elastic/sort_test.go new file mode 100644 index 0000000..b54cbd9 --- /dev/null +++ b/vendor/github.com/olivere/elastic/sort_test.go @@ -0,0 +1,278 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestSortInfo(t *testing.T) { + builder := SortInfo{Field: "grade", Ascending: false} + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"grade":{"order":"desc"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSortInfoComplex(t *testing.T) { + builder := SortInfo{ + Field: "price", + Ascending: false, + Missing: "_last", + SortMode: "avg", + NestedFilter: NewTermQuery("product.color", "blue"), + NestedPath: "variant", + } + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"price":{"missing":"_last","mode":"avg","nested_filter":{"term":{"product.color":"blue"}},"nested_path":"variant","order":"desc"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestScoreSort(t *testing.T) { + builder := NewScoreSort() + if builder.ascending != false { + t.Error("expected score sorter to be ascending by default") + } + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"_score":{"order":"desc"}}` // ScoreSort is "desc" by default + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestScoreSortOrderAscending(t *testing.T) { + builder := NewScoreSort().Asc() + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"_score":{"order":"asc"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestScoreSortOrderDescending(t *testing.T) { + builder := NewScoreSort().Desc() + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"_score":{"order":"desc"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestFieldSort(t *testing.T) { + builder := NewFieldSort("grade") + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"grade":{"order":"asc"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestFieldSortOrderDesc(t *testing.T) { + builder := NewFieldSort("grade").Desc() + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"grade":{"order":"desc"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestFieldSortComplex(t *testing.T) { + builder := NewFieldSort("price").Desc(). + SortMode("avg"). + Missing("_last"). + UnmappedType("product"). + NestedFilter(NewTermQuery("product.color", "blue")). + NestedPath("variant") + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"price":{"missing":"_last","mode":"avg","nested_filter":{"term":{"product.color":"blue"}},"nested_path":"variant","order":"desc","unmapped_type":"product"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestGeoDistanceSort(t *testing.T) { + builder := NewGeoDistanceSort("pin.location"). + Point(-70, 40). + Order(true). + Unit("km"). + SortMode("min"). + GeoDistance("plane") + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"_geo_distance":{"distance_type":"plane","mode":"min","order":"asc","pin.location":[{"lat":-70,"lon":40}],"unit":"km"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestGeoDistanceSortOrderDesc(t *testing.T) { + builder := NewGeoDistanceSort("pin.location"). + Point(-70, 40). + Unit("km"). + SortMode("min"). + GeoDistance("arc"). + Desc() + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"_geo_distance":{"distance_type":"arc","mode":"min","order":"desc","pin.location":[{"lat":-70,"lon":40}],"unit":"km"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} +func TestScriptSort(t *testing.T) { + builder := NewScriptSort(NewScript("doc['field_name'].value * factor").Param("factor", 1.1), "number").Order(true) + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"_script":{"order":"asc","script":{"params":{"factor":1.1},"source":"doc['field_name'].value * factor"},"type":"number"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestScriptSortOrderDesc(t *testing.T) { + builder := NewScriptSort(NewScript("doc['field_name'].value * factor").Param("factor", 1.1), "number").Desc() + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"_script":{"order":"desc","script":{"params":{"factor":1.1},"source":"doc['field_name'].value * factor"},"type":"number"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestNestedSort(t *testing.T) { + builder := NewNestedSort("offer"). + Filter(NewTermQuery("offer.color", "blue")) + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"filter":{"term":{"offer.color":"blue"}},"path":"offer"}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestFieldSortWithNestedSort(t *testing.T) { + builder := NewFieldSort("offer.price"). + Asc(). + SortMode("avg"). + NestedSort( + NewNestedSort("offer").Filter(NewTermQuery("offer.color", "blue")), + ) + src, err := builder.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"offer.price":{"mode":"avg","nested":{"filter":{"term":{"offer.color":"blue"}},"path":"offer"},"order":"asc"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/suggest_field.go b/vendor/github.com/olivere/elastic/suggest_field.go new file mode 100644 index 0000000..8405a6f --- /dev/null +++ b/vendor/github.com/olivere/elastic/suggest_field.go @@ -0,0 +1,90 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "errors" +) + +// SuggestField can be used by the caller to specify a suggest field +// at index time. For a detailed example, see e.g. +// https://www.elastic.co/blog/you-complete-me. +type SuggestField struct { + inputs []string + weight int + contextQueries []SuggesterContextQuery +} + +func NewSuggestField(input ...string) *SuggestField { + return &SuggestField{ + inputs: input, + weight: -1, + } +} + +func (f *SuggestField) Input(input ...string) *SuggestField { + if f.inputs == nil { + f.inputs = make([]string, 0) + } + f.inputs = append(f.inputs, input...) + return f +} + +func (f *SuggestField) Weight(weight int) *SuggestField { + f.weight = weight + return f +} + +func (f *SuggestField) ContextQuery(queries ...SuggesterContextQuery) *SuggestField { + f.contextQueries = append(f.contextQueries, queries...) + return f +} + +// MarshalJSON encodes SuggestField into JSON. +func (f *SuggestField) MarshalJSON() ([]byte, error) { + source := make(map[string]interface{}) + + if f.inputs != nil { + switch len(f.inputs) { + case 1: + source["input"] = f.inputs[0] + default: + source["input"] = f.inputs + } + } + + if f.weight >= 0 { + source["weight"] = f.weight + } + + switch len(f.contextQueries) { + case 0: + case 1: + src, err := f.contextQueries[0].Source() + if err != nil { + return nil, err + } + source["contexts"] = src + default: + ctxq := make(map[string]interface{}) + for _, query := range f.contextQueries { + src, err := query.Source() + if err != nil { + return nil, err + } + m, ok := src.(map[string]interface{}) + if !ok { + return nil, errors.New("SuggesterContextQuery must be of type map[string]interface{}") + } + for k, v := range m { + ctxq[k] = v + } + } + source["contexts"] = ctxq + } + + return json.Marshal(source) +} diff --git a/vendor/github.com/olivere/elastic/suggest_field_test.go b/vendor/github.com/olivere/elastic/suggest_field_test.go new file mode 100644 index 0000000..426875b --- /dev/null +++ b/vendor/github.com/olivere/elastic/suggest_field_test.go @@ -0,0 +1,29 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestSuggestField(t *testing.T) { + field := NewSuggestField(). + Input("Welcome to Golang and Elasticsearch.", "Golang and Elasticsearch"). + Weight(1). + ContextQuery( + NewSuggesterCategoryMapping("color").FieldName("color_field").DefaultValues("red", "green", "blue"), + NewSuggesterGeoMapping("location").Precision("5m").Neighbors(true).DefaultLocations(GeoPointFromLatLon(52.516275, 13.377704)), + ) + data, err := json.Marshal(field) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"contexts":{"color":{"default":["red","green","blue"],"path":"color_field","type":"category"},"location":{"default":{"lat":52.516275,"lon":13.377704},"neighbors":true,"precision":["5m"],"type":"geo"}},"input":["Welcome to Golang and Elasticsearch.","Golang and Elasticsearch"],"weight":1}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/suggester.go b/vendor/github.com/olivere/elastic/suggester.go similarity index 77% rename from vendor/gopkg.in/olivere/elastic.v2/suggester.go rename to vendor/github.com/olivere/elastic/suggester.go index c83d050..f7dc48f 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/suggester.go +++ b/vendor/github.com/olivere/elastic/suggester.go @@ -1,4 +1,4 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. @@ -11,5 +11,5 @@ package elastic // will do. type Suggester interface { Name() string - Source(includeName bool) interface{} + Source(includeName bool) (interface{}, error) } diff --git a/vendor/github.com/olivere/elastic/suggester_completion.go b/vendor/github.com/olivere/elastic/suggester_completion.go new file mode 100644 index 0000000..858fda1 --- /dev/null +++ b/vendor/github.com/olivere/elastic/suggester_completion.go @@ -0,0 +1,359 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import "errors" + +// CompletionSuggester is a fast suggester for e.g. type-ahead completion. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-suggesters-completion.html +// for more details. +type CompletionSuggester struct { + Suggester + name string + text string + prefix string + regex string + field string + analyzer string + size *int + shardSize *int + contextQueries []SuggesterContextQuery + payload interface{} + + fuzzyOptions *FuzzyCompletionSuggesterOptions + regexOptions *RegexCompletionSuggesterOptions + skipDuplicates *bool +} + +// Creates a new completion suggester. +func NewCompletionSuggester(name string) *CompletionSuggester { + return &CompletionSuggester{ + name: name, + } +} + +func (q *CompletionSuggester) Name() string { + return q.name +} + +func (q *CompletionSuggester) Text(text string) *CompletionSuggester { + q.text = text + return q +} + +func (q *CompletionSuggester) Prefix(prefix string) *CompletionSuggester { + q.prefix = prefix + return q +} + +func (q *CompletionSuggester) PrefixWithEditDistance(prefix string, editDistance interface{}) *CompletionSuggester { + q.prefix = prefix + q.fuzzyOptions = NewFuzzyCompletionSuggesterOptions().EditDistance(editDistance) + return q +} + +func (q *CompletionSuggester) PrefixWithOptions(prefix string, options *FuzzyCompletionSuggesterOptions) *CompletionSuggester { + q.prefix = prefix + q.fuzzyOptions = options + return q +} + +func (q *CompletionSuggester) FuzzyOptions(options *FuzzyCompletionSuggesterOptions) *CompletionSuggester { + q.fuzzyOptions = options + return q +} + +func (q *CompletionSuggester) Fuzziness(fuzziness interface{}) *CompletionSuggester { + if q.fuzzyOptions == nil { + q.fuzzyOptions = NewFuzzyCompletionSuggesterOptions() + } + q.fuzzyOptions = q.fuzzyOptions.EditDistance(fuzziness) + return q +} + +func (q *CompletionSuggester) Regex(regex string) *CompletionSuggester { + q.regex = regex + return q +} + +func (q *CompletionSuggester) RegexWithOptions(regex string, options *RegexCompletionSuggesterOptions) *CompletionSuggester { + q.regex = regex + q.regexOptions = options + return q +} + +func (q *CompletionSuggester) RegexOptions(options *RegexCompletionSuggesterOptions) *CompletionSuggester { + q.regexOptions = options + return q +} + +func (q *CompletionSuggester) SkipDuplicates(skipDuplicates bool) *CompletionSuggester { + q.skipDuplicates = &skipDuplicates + return q +} + +func (q *CompletionSuggester) Field(field string) *CompletionSuggester { + q.field = field + return q +} + +func (q *CompletionSuggester) Analyzer(analyzer string) *CompletionSuggester { + q.analyzer = analyzer + return q +} + +func (q *CompletionSuggester) Size(size int) *CompletionSuggester { + q.size = &size + return q +} + +func (q *CompletionSuggester) ShardSize(shardSize int) *CompletionSuggester { + q.shardSize = &shardSize + return q +} + +func (q *CompletionSuggester) ContextQuery(query SuggesterContextQuery) *CompletionSuggester { + q.contextQueries = append(q.contextQueries, query) + return q +} + +func (q *CompletionSuggester) ContextQueries(queries ...SuggesterContextQuery) *CompletionSuggester { + q.contextQueries = append(q.contextQueries, queries...) + return q +} + +// completionSuggesterRequest is necessary because the order in which +// the JSON elements are routed to Elasticsearch is relevant. +// We got into trouble when using plain maps because the text element +// needs to go before the completion element. +type completionSuggesterRequest struct { + Text string `json:"text,omitempty"` + Prefix string `json:"prefix,omitempty"` + Regex string `json:"regex,omitempty"` + Completion interface{} `json:"completion,omitempty"` +} + +// Source creates the JSON data for the completion suggester. +func (q *CompletionSuggester) Source(includeName bool) (interface{}, error) { + cs := &completionSuggesterRequest{} + + if q.text != "" { + cs.Text = q.text + } + if q.prefix != "" { + cs.Prefix = q.prefix + } + if q.regex != "" { + cs.Regex = q.regex + } + + suggester := make(map[string]interface{}) + cs.Completion = suggester + + if q.analyzer != "" { + suggester["analyzer"] = q.analyzer + } + if q.field != "" { + suggester["field"] = q.field + } + if q.size != nil { + suggester["size"] = *q.size + } + if q.shardSize != nil { + suggester["shard_size"] = *q.shardSize + } + switch len(q.contextQueries) { + case 0: + case 1: + src, err := q.contextQueries[0].Source() + if err != nil { + return nil, err + } + suggester["contexts"] = src + default: + ctxq := make(map[string]interface{}) + for _, query := range q.contextQueries { + src, err := query.Source() + if err != nil { + return nil, err + } + // Merge the dictionary into ctxq + m, ok := src.(map[string]interface{}) + if !ok { + return nil, errors.New("elastic: context query is not a map") + } + for k, v := range m { + ctxq[k] = v + } + } + suggester["contexts"] = ctxq + } + + // Fuzzy options + if q.fuzzyOptions != nil { + src, err := q.fuzzyOptions.Source() + if err != nil { + return nil, err + } + suggester["fuzzy"] = src + } + + // Regex options + if q.regexOptions != nil { + src, err := q.regexOptions.Source() + if err != nil { + return nil, err + } + suggester["regex"] = src + } + + if q.skipDuplicates != nil { + suggester["skip_duplicates"] = *q.skipDuplicates + } + + // TODO(oe) Add completion-suggester specific parameters here + + if !includeName { + return cs, nil + } + + source := make(map[string]interface{}) + source[q.name] = cs + return source, nil +} + +// -- Fuzzy options -- + +// FuzzyCompletionSuggesterOptions represents the options for fuzzy completion suggester. +type FuzzyCompletionSuggesterOptions struct { + editDistance interface{} + transpositions *bool + minLength *int + prefixLength *int + unicodeAware *bool + maxDeterminizedStates *int +} + +// NewFuzzyCompletionSuggesterOptions initializes a new FuzzyCompletionSuggesterOptions instance. +func NewFuzzyCompletionSuggesterOptions() *FuzzyCompletionSuggesterOptions { + return &FuzzyCompletionSuggesterOptions{} +} + +// EditDistance specifies the maximum number of edits, e.g. a number like "1" or "2" +// or a string like "0..2" or ">5". +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/common-options.html#fuzziness +// for details. +func (o *FuzzyCompletionSuggesterOptions) EditDistance(editDistance interface{}) *FuzzyCompletionSuggesterOptions { + o.editDistance = editDistance + return o +} + +// Transpositions, if set to true, are counted as one change instead of two (defaults to true). +func (o *FuzzyCompletionSuggesterOptions) Transpositions(transpositions bool) *FuzzyCompletionSuggesterOptions { + o.transpositions = &transpositions + return o +} + +// MinLength represents the minimum length of the input before fuzzy suggestions are returned (defaults to 3). +func (o *FuzzyCompletionSuggesterOptions) MinLength(minLength int) *FuzzyCompletionSuggesterOptions { + o.minLength = &minLength + return o +} + +// PrefixLength represents the minimum length of the input, which is not checked for +// fuzzy alternatives (defaults to 1). +func (o *FuzzyCompletionSuggesterOptions) PrefixLength(prefixLength int) *FuzzyCompletionSuggesterOptions { + o.prefixLength = &prefixLength + return o +} + +// UnicodeAware, if true, all measurements (like fuzzy edit distance, transpositions, and lengths) +// are measured in Unicode code points instead of in bytes. This is slightly slower than +// raw bytes, so it is set to false by default. +func (o *FuzzyCompletionSuggesterOptions) UnicodeAware(unicodeAware bool) *FuzzyCompletionSuggesterOptions { + o.unicodeAware = &unicodeAware + return o +} + +// MaxDeterminizedStates is currently undocumented in Elasticsearch. It represents +// the maximum automaton states allowed for fuzzy expansion. +func (o *FuzzyCompletionSuggesterOptions) MaxDeterminizedStates(max int) *FuzzyCompletionSuggesterOptions { + o.maxDeterminizedStates = &max + return o +} + +// Source creates the JSON data. +func (o *FuzzyCompletionSuggesterOptions) Source() (interface{}, error) { + out := make(map[string]interface{}) + + if o.editDistance != nil { + out["fuzziness"] = o.editDistance + } + if o.transpositions != nil { + out["transpositions"] = *o.transpositions + } + if o.minLength != nil { + out["min_length"] = *o.minLength + } + if o.prefixLength != nil { + out["prefix_length"] = *o.prefixLength + } + if o.unicodeAware != nil { + out["unicode_aware"] = *o.unicodeAware + } + if o.maxDeterminizedStates != nil { + out["max_determinized_states"] = *o.maxDeterminizedStates + } + + return out, nil +} + +// -- Regex options -- + +// RegexCompletionSuggesterOptions represents the options for regex completion suggester. +type RegexCompletionSuggesterOptions struct { + flags interface{} // string or int + maxDeterminizedStates *int +} + +// NewRegexCompletionSuggesterOptions initializes a new RegexCompletionSuggesterOptions instance. +func NewRegexCompletionSuggesterOptions() *RegexCompletionSuggesterOptions { + return &RegexCompletionSuggesterOptions{} +} + +// Flags represents internal regex flags. +// Possible flags are ALL (default), ANYSTRING, COMPLEMENT, EMPTY, INTERSECTION, INTERVAL, or NONE. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-suggesters-completion.html#regex +// for details. +func (o *RegexCompletionSuggesterOptions) Flags(flags interface{}) *RegexCompletionSuggesterOptions { + o.flags = flags + return o +} + +// MaxDeterminizedStates represents the maximum automaton states allowed for regex expansion. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-suggesters-completion.html#regex +// for details. +func (o *RegexCompletionSuggesterOptions) MaxDeterminizedStates(max int) *RegexCompletionSuggesterOptions { + o.maxDeterminizedStates = &max + return o +} + +// Source creates the JSON data. +func (o *RegexCompletionSuggesterOptions) Source() (interface{}, error) { + out := make(map[string]interface{}) + + if o.flags != nil { + out["flags"] = o.flags + } + if o.maxDeterminizedStates != nil { + out["max_determinized_states"] = *o.maxDeterminizedStates + } + + return out, nil +} diff --git a/vendor/github.com/olivere/elastic/suggester_completion_test.go b/vendor/github.com/olivere/elastic/suggester_completion_test.go new file mode 100644 index 0000000..adbf586 --- /dev/null +++ b/vendor/github.com/olivere/elastic/suggester_completion_test.go @@ -0,0 +1,110 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestCompletionSuggesterSource(t *testing.T) { + s := NewCompletionSuggester("song-suggest"). + Text("n"). + Field("suggest") + src, err := s.Source(true) + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"song-suggest":{"text":"n","completion":{"field":"suggest"}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestCompletionSuggesterPrefixSource(t *testing.T) { + s := NewCompletionSuggester("song-suggest"). + Prefix("nir"). + Field("suggest") + src, err := s.Source(true) + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"song-suggest":{"prefix":"nir","completion":{"field":"suggest"}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestCompletionSuggesterPrefixWithFuzzySource(t *testing.T) { + s := NewCompletionSuggester("song-suggest"). + Prefix("nor"). + Field("suggest"). + FuzzyOptions(NewFuzzyCompletionSuggesterOptions().EditDistance(2)) + src, err := s.Source(true) + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"song-suggest":{"prefix":"nor","completion":{"field":"suggest","fuzzy":{"fuzziness":2}}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestCompletionSuggesterRegexSource(t *testing.T) { + s := NewCompletionSuggester("song-suggest"). + Regex("n[ever|i]r"). + Field("suggest") + src, err := s.Source(true) + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"song-suggest":{"regex":"n[ever|i]r","completion":{"field":"suggest"}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestCompletionSuggesterSourceWithMultipleContexts(t *testing.T) { + s := NewCompletionSuggester("song-suggest"). + Text("n"). + Field("suggest"). + ContextQueries( + NewSuggesterCategoryQuery("artist", "Sting"), + NewSuggesterCategoryQuery("label", "BMG"), + ) + src, err := s.Source(true) + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"song-suggest":{"text":"n","completion":{"contexts":{"artist":[{"context":"Sting"}],"label":[{"context":"BMG"}]},"field":"suggest"}}}` + if got != expected { + t.Errorf("expected %s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/suggester_context.go b/vendor/github.com/olivere/elastic/suggester_context.go new file mode 100644 index 0000000..5b15088 --- /dev/null +++ b/vendor/github.com/olivere/elastic/suggester_context.go @@ -0,0 +1,124 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import "errors" + +// SuggesterContextQuery is used to define context information within +// a suggestion request. +type SuggesterContextQuery interface { + Source() (interface{}, error) +} + +// ContextSuggester is a fast suggester for e.g. type-ahead completion that supports filtering and boosting based on contexts. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/suggester-context.html +// for more details. +type ContextSuggester struct { + Suggester + name string + prefix string + field string + size *int + contextQueries []SuggesterContextQuery +} + +// Creates a new context suggester. +func NewContextSuggester(name string) *ContextSuggester { + return &ContextSuggester{ + name: name, + contextQueries: make([]SuggesterContextQuery, 0), + } +} + +func (q *ContextSuggester) Name() string { + return q.name +} + +func (q *ContextSuggester) Prefix(prefix string) *ContextSuggester { + q.prefix = prefix + return q +} + +func (q *ContextSuggester) Field(field string) *ContextSuggester { + q.field = field + return q +} + +func (q *ContextSuggester) Size(size int) *ContextSuggester { + q.size = &size + return q +} + +func (q *ContextSuggester) ContextQuery(query SuggesterContextQuery) *ContextSuggester { + q.contextQueries = append(q.contextQueries, query) + return q +} + +func (q *ContextSuggester) ContextQueries(queries ...SuggesterContextQuery) *ContextSuggester { + q.contextQueries = append(q.contextQueries, queries...) + return q +} + +// contextSuggesterRequest is necessary because the order in which +// the JSON elements are routed to Elasticsearch is relevant. +// We got into trouble when using plain maps because the text element +// needs to go before the completion element. +type contextSuggesterRequest struct { + Prefix string `json:"prefix"` + Completion interface{} `json:"completion"` +} + +// Creates the source for the context suggester. +func (q *ContextSuggester) Source(includeName bool) (interface{}, error) { + cs := &contextSuggesterRequest{} + + if q.prefix != "" { + cs.Prefix = q.prefix + } + + suggester := make(map[string]interface{}) + cs.Completion = suggester + + if q.field != "" { + suggester["field"] = q.field + } + if q.size != nil { + suggester["size"] = *q.size + } + switch len(q.contextQueries) { + case 0: + case 1: + src, err := q.contextQueries[0].Source() + if err != nil { + return nil, err + } + suggester["contexts"] = src + default: + ctxq := make(map[string]interface{}) + for _, query := range q.contextQueries { + src, err := query.Source() + if err != nil { + return nil, err + } + // Merge the dictionary into ctxq + m, ok := src.(map[string]interface{}) + if !ok { + return nil, errors.New("elastic: context query is not a map") + } + for k, v := range m { + ctxq[k] = v + } + } + suggester["contexts"] = ctxq + } + + if !includeName { + return cs, nil + } + + source := make(map[string]interface{}) + source[q.name] = cs + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/suggester_context_category.go b/vendor/github.com/olivere/elastic/suggester_context_category.go new file mode 100644 index 0000000..134ecc7 --- /dev/null +++ b/vendor/github.com/olivere/elastic/suggester_context_category.go @@ -0,0 +1,119 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// -- SuggesterCategoryMapping -- + +// SuggesterCategoryMapping provides a mapping for a category context in a suggester. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/suggester-context.html#_category_mapping. +type SuggesterCategoryMapping struct { + name string + fieldName string + defaultValues []string +} + +// NewSuggesterCategoryMapping creates a new SuggesterCategoryMapping. +func NewSuggesterCategoryMapping(name string) *SuggesterCategoryMapping { + return &SuggesterCategoryMapping{ + name: name, + defaultValues: make([]string, 0), + } +} + +func (q *SuggesterCategoryMapping) DefaultValues(values ...string) *SuggesterCategoryMapping { + q.defaultValues = append(q.defaultValues, values...) + return q +} + +func (q *SuggesterCategoryMapping) FieldName(fieldName string) *SuggesterCategoryMapping { + q.fieldName = fieldName + return q +} + +// Source returns a map that will be used to serialize the context query as JSON. +func (q *SuggesterCategoryMapping) Source() (interface{}, error) { + source := make(map[string]interface{}) + + x := make(map[string]interface{}) + source[q.name] = x + + x["type"] = "category" + + switch len(q.defaultValues) { + case 0: + x["default"] = q.defaultValues + case 1: + x["default"] = q.defaultValues[0] + default: + x["default"] = q.defaultValues + } + + if q.fieldName != "" { + x["path"] = q.fieldName + } + return source, nil +} + +// -- SuggesterCategoryQuery -- + +// SuggesterCategoryQuery provides querying a category context in a suggester. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/suggester-context.html#_category_query. +type SuggesterCategoryQuery struct { + name string + values map[string]*int +} + +// NewSuggesterCategoryQuery creates a new SuggesterCategoryQuery. +func NewSuggesterCategoryQuery(name string, values ...string) *SuggesterCategoryQuery { + q := &SuggesterCategoryQuery{ + name: name, + values: make(map[string]*int), + } + + if len(values) > 0 { + q.Values(values...) + } + return q +} + +func (q *SuggesterCategoryQuery) Value(val string) *SuggesterCategoryQuery { + q.values[val] = nil + return q +} + +func (q *SuggesterCategoryQuery) ValueWithBoost(val string, boost int) *SuggesterCategoryQuery { + q.values[val] = &boost + return q +} + +func (q *SuggesterCategoryQuery) Values(values ...string) *SuggesterCategoryQuery { + for _, val := range values { + q.values[val] = nil + } + return q +} + +// Source returns a map that will be used to serialize the context query as JSON. +func (q *SuggesterCategoryQuery) Source() (interface{}, error) { + source := make(map[string]interface{}) + + switch len(q.values) { + case 0: + source[q.name] = make([]string, 0) + default: + contexts := make([]interface{}, 0) + for val, boost := range q.values { + context := make(map[string]interface{}) + context["context"] = val + if boost != nil { + context["boost"] = *boost + } + contexts = append(contexts, context) + } + source[q.name] = contexts + } + + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/suggester_context_category_test.go b/vendor/github.com/olivere/elastic/suggester_context_category_test.go new file mode 100644 index 0000000..46acd72 --- /dev/null +++ b/vendor/github.com/olivere/elastic/suggester_context_category_test.go @@ -0,0 +1,163 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestSuggesterCategoryMapping(t *testing.T) { + q := NewSuggesterCategoryMapping("color").DefaultValues("red") + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"color":{"default":"red","type":"category"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSuggesterCategoryMappingWithTwoDefaultValues(t *testing.T) { + q := NewSuggesterCategoryMapping("color").DefaultValues("red", "orange") + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"color":{"default":["red","orange"],"type":"category"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSuggesterCategoryMappingWithFieldName(t *testing.T) { + q := NewSuggesterCategoryMapping("color"). + DefaultValues("red", "orange"). + FieldName("color_field") + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"color":{"default":["red","orange"],"path":"color_field","type":"category"}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSuggesterCategoryQuery(t *testing.T) { + q := NewSuggesterCategoryQuery("color", "red") + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"color":[{"context":"red"}]}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestSuggesterCategoryQueryWithTwoValues(t *testing.T) { + q := NewSuggesterCategoryQuery("color", "red", "yellow") + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expectedOutcomes := []string{ + `{"color":[{"context":"red"},{"context":"yellow"}]}`, + `{"color":[{"context":"yellow"},{"context":"red"}]}`, + } + var match bool + for _, expected := range expectedOutcomes { + if got == expected { + match = true + break + } + } + if !match { + t.Errorf("expected any of %v\n,got:\n%s", expectedOutcomes, got) + } +} + +func TestSuggesterCategoryQueryWithBoost(t *testing.T) { + q := NewSuggesterCategoryQuery("color", "red") + q.ValueWithBoost("yellow", 4) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expectedOutcomes := []string{ + `{"color":[{"context":"red"},{"boost":4,"context":"yellow"}]}`, + `{"color":[{"boost":4,"context":"yellow"},{"context":"red"}]}`, + } + var match bool + for _, expected := range expectedOutcomes { + if got == expected { + match = true + break + } + } + if !match { + t.Errorf("expected any of %v\n,got:\n%v", expectedOutcomes, got) + } +} + +func TestSuggesterCategoryQueryWithoutBoost(t *testing.T) { + q := NewSuggesterCategoryQuery("color", "red") + q.Value("yellow") + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expectedOutcomes := []string{ + `{"color":[{"context":"red"},{"context":"yellow"}]}`, + `{"color":[{"context":"yellow"},{"context":"red"}]}`, + } + var match bool + for _, expected := range expectedOutcomes { + if got == expected { + match = true + break + } + } + if !match { + t.Errorf("expected any of %v\n,got:\n%s", expectedOutcomes, got) + } +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/suggester_context_geo.go b/vendor/github.com/olivere/elastic/suggester_context_geo.go similarity index 82% rename from vendor/gopkg.in/olivere/elastic.v2/suggester_context_geo.go rename to vendor/github.com/olivere/elastic/suggester_context_geo.go index 116fe9e..88b8cdb 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/suggester_context_geo.go +++ b/vendor/github.com/olivere/elastic/suggester_context_geo.go @@ -1,4 +1,4 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. @@ -7,7 +7,7 @@ package elastic // -- SuggesterGeoMapping -- // SuggesterGeoMapping provides a mapping for a geolocation context in a suggester. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/suggester-context.html#_geo_location_mapping. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/suggester-context.html#_geo_location_mapping. type SuggesterGeoMapping struct { name string defaultLocations []*GeoPoint @@ -19,9 +19,7 @@ type SuggesterGeoMapping struct { // NewSuggesterGeoMapping creates a new SuggesterGeoMapping. func NewSuggesterGeoMapping(name string) *SuggesterGeoMapping { return &SuggesterGeoMapping{ - name: name, - defaultLocations: make([]*GeoPoint, 0), - precision: make([]string, 0), + name: name, } } @@ -46,7 +44,7 @@ func (q *SuggesterGeoMapping) FieldName(fieldName string) *SuggesterGeoMapping { } // Source returns a map that will be used to serialize the context query as JSON. -func (q *SuggesterGeoMapping) Source() interface{} { +func (q *SuggesterGeoMapping) Source() (interface{}, error) { source := make(map[string]interface{}) x := make(map[string]interface{}) @@ -66,7 +64,7 @@ func (q *SuggesterGeoMapping) Source() interface{} { case 1: x["default"] = q.defaultLocations[0].Source() default: - arr := make([]interface{}, 0) + var arr []interface{} for _, p := range q.defaultLocations { arr = append(arr, p.Source()) } @@ -76,13 +74,13 @@ func (q *SuggesterGeoMapping) Source() interface{} { if q.fieldName != "" { x["path"] = q.fieldName } - return source + return source, nil } // -- SuggesterGeoQuery -- // SuggesterGeoQuery provides querying a geolocation context in a suggester. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/suggester-context.html#_geo_location_query +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/suggester-context.html#_geo_location_query type SuggesterGeoQuery struct { name string location *GeoPoint @@ -104,7 +102,7 @@ func (q *SuggesterGeoQuery) Precision(precision ...string) *SuggesterGeoQuery { } // Source returns a map that will be used to serialize the context query as JSON. -func (q *SuggesterGeoQuery) Source() interface{} { +func (q *SuggesterGeoQuery) Source() (interface{}, error) { source := make(map[string]interface{}) if len(q.precision) == 0 { @@ -128,5 +126,5 @@ func (q *SuggesterGeoQuery) Source() interface{} { } } - return source + return source, nil } diff --git a/vendor/gopkg.in/olivere/elastic.v2/suggester_context_geo_test.go b/vendor/github.com/olivere/elastic/suggester_context_geo_test.go similarity index 79% rename from vendor/gopkg.in/olivere/elastic.v2/suggester_context_geo_test.go rename to vendor/github.com/olivere/elastic/suggester_context_geo_test.go index a6c346c..b1ab2f4 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/suggester_context_geo_test.go +++ b/vendor/github.com/olivere/elastic/suggester_context_geo_test.go @@ -1,4 +1,4 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. @@ -15,7 +15,11 @@ func TestSuggesterGeoMapping(t *testing.T) { Neighbors(true). FieldName("pin"). DefaultLocations(GeoPointFromLatLon(0.0, 0.0)) - data, err := json.Marshal(q.Source()) + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } @@ -27,9 +31,12 @@ func TestSuggesterGeoMapping(t *testing.T) { } func TestSuggesterGeoQuery(t *testing.T) { - q := NewSuggesterGeoQuery("location", GeoPointFromLatLon(11.5, 62.71)). - Precision("1km") - data, err := json.Marshal(q.Source()) + q := NewSuggesterGeoQuery("location", GeoPointFromLatLon(11.5, 62.71)).Precision("1km") + src, err := q.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } diff --git a/vendor/github.com/olivere/elastic/suggester_context_test.go b/vendor/github.com/olivere/elastic/suggester_context_test.go new file mode 100644 index 0000000..045ccb2 --- /dev/null +++ b/vendor/github.com/olivere/elastic/suggester_context_test.go @@ -0,0 +1,55 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestContextSuggesterSource(t *testing.T) { + s := NewContextSuggester("place_suggestion"). + Prefix("tim"). + Field("suggest") + src, err := s.Source(true) + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"place_suggestion":{"prefix":"tim","completion":{"field":"suggest"}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestContextSuggesterSourceWithMultipleContexts(t *testing.T) { + s := NewContextSuggester("place_suggestion"). + Prefix("tim"). + Field("suggest"). + ContextQueries( + NewSuggesterCategoryQuery("place_type", "cafe", "restaurants"), + ) + src, err := s.Source(true) + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + // Due to the randomization of dictionary key, we could actually have two different valid expected outcomes + expected := `{"place_suggestion":{"prefix":"tim","completion":{"contexts":{"place_type":[{"context":"cafe"},{"context":"restaurants"}]},"field":"suggest"}}}` + if got != expected { + expected := `{"place_suggestion":{"prefix":"tim","completion":{"contexts":{"place_type":[{"context":"restaurants"},{"context":"cafe"}]},"field":"suggest"}}}` + if got != expected { + t.Errorf("expected %s\n,got:\n%s", expected, got) + } + } +} diff --git a/vendor/github.com/olivere/elastic/suggester_phrase.go b/vendor/github.com/olivere/elastic/suggester_phrase.go new file mode 100644 index 0000000..2fc9420 --- /dev/null +++ b/vendor/github.com/olivere/elastic/suggester_phrase.go @@ -0,0 +1,546 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// PhraseSuggester provides an API to access word alternatives +// on a per token basis within a certain string distance. +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-suggesters-phrase.html. +type PhraseSuggester struct { + Suggester + name string + text string + field string + analyzer string + size *int + shardSize *int + contextQueries []SuggesterContextQuery + + // fields specific to a phrase suggester + maxErrors *float64 + separator *string + realWordErrorLikelihood *float64 + confidence *float64 + generators map[string][]CandidateGenerator + gramSize *int + smoothingModel SmoothingModel + forceUnigrams *bool + tokenLimit *int + preTag, postTag *string + collateQuery *string + collatePreference *string + collateParams map[string]interface{} + collatePrune *bool +} + +// NewPhraseSuggester creates a new PhraseSuggester. +func NewPhraseSuggester(name string) *PhraseSuggester { + return &PhraseSuggester{ + name: name, + collateParams: make(map[string]interface{}), + } +} + +func (q *PhraseSuggester) Name() string { + return q.name +} + +func (q *PhraseSuggester) Text(text string) *PhraseSuggester { + q.text = text + return q +} + +func (q *PhraseSuggester) Field(field string) *PhraseSuggester { + q.field = field + return q +} + +func (q *PhraseSuggester) Analyzer(analyzer string) *PhraseSuggester { + q.analyzer = analyzer + return q +} + +func (q *PhraseSuggester) Size(size int) *PhraseSuggester { + q.size = &size + return q +} + +func (q *PhraseSuggester) ShardSize(shardSize int) *PhraseSuggester { + q.shardSize = &shardSize + return q +} + +func (q *PhraseSuggester) ContextQuery(query SuggesterContextQuery) *PhraseSuggester { + q.contextQueries = append(q.contextQueries, query) + return q +} + +func (q *PhraseSuggester) ContextQueries(queries ...SuggesterContextQuery) *PhraseSuggester { + q.contextQueries = append(q.contextQueries, queries...) + return q +} + +func (q *PhraseSuggester) GramSize(gramSize int) *PhraseSuggester { + if gramSize >= 1 { + q.gramSize = &gramSize + } + return q +} + +func (q *PhraseSuggester) MaxErrors(maxErrors float64) *PhraseSuggester { + q.maxErrors = &maxErrors + return q +} + +func (q *PhraseSuggester) Separator(separator string) *PhraseSuggester { + q.separator = &separator + return q +} + +func (q *PhraseSuggester) RealWordErrorLikelihood(realWordErrorLikelihood float64) *PhraseSuggester { + q.realWordErrorLikelihood = &realWordErrorLikelihood + return q +} + +func (q *PhraseSuggester) Confidence(confidence float64) *PhraseSuggester { + q.confidence = &confidence + return q +} + +func (q *PhraseSuggester) CandidateGenerator(generator CandidateGenerator) *PhraseSuggester { + if q.generators == nil { + q.generators = make(map[string][]CandidateGenerator) + } + typ := generator.Type() + if _, found := q.generators[typ]; !found { + q.generators[typ] = make([]CandidateGenerator, 0) + } + q.generators[typ] = append(q.generators[typ], generator) + return q +} + +func (q *PhraseSuggester) CandidateGenerators(generators ...CandidateGenerator) *PhraseSuggester { + for _, g := range generators { + q = q.CandidateGenerator(g) + } + return q +} + +func (q *PhraseSuggester) ClearCandidateGenerator() *PhraseSuggester { + q.generators = nil + return q +} + +func (q *PhraseSuggester) ForceUnigrams(forceUnigrams bool) *PhraseSuggester { + q.forceUnigrams = &forceUnigrams + return q +} + +func (q *PhraseSuggester) SmoothingModel(smoothingModel SmoothingModel) *PhraseSuggester { + q.smoothingModel = smoothingModel + return q +} + +func (q *PhraseSuggester) TokenLimit(tokenLimit int) *PhraseSuggester { + q.tokenLimit = &tokenLimit + return q +} + +func (q *PhraseSuggester) Highlight(preTag, postTag string) *PhraseSuggester { + q.preTag = &preTag + q.postTag = &postTag + return q +} + +func (q *PhraseSuggester) CollateQuery(collateQuery string) *PhraseSuggester { + q.collateQuery = &collateQuery + return q +} + +func (q *PhraseSuggester) CollatePreference(collatePreference string) *PhraseSuggester { + q.collatePreference = &collatePreference + return q +} + +func (q *PhraseSuggester) CollateParams(collateParams map[string]interface{}) *PhraseSuggester { + q.collateParams = collateParams + return q +} + +func (q *PhraseSuggester) CollatePrune(collatePrune bool) *PhraseSuggester { + q.collatePrune = &collatePrune + return q +} + +// phraseSuggesterRequest is necessary because the order in which +// the JSON elements are routed to Elasticsearch is relevant. +// We got into trouble when using plain maps because the text element +// needs to go before the simple_phrase element. +type phraseSuggesterRequest struct { + Text string `json:"text"` + Phrase interface{} `json:"phrase"` +} + +// Source generates the source for the phrase suggester. +func (q *PhraseSuggester) Source(includeName bool) (interface{}, error) { + ps := &phraseSuggesterRequest{} + + if q.text != "" { + ps.Text = q.text + } + + suggester := make(map[string]interface{}) + ps.Phrase = suggester + + if q.analyzer != "" { + suggester["analyzer"] = q.analyzer + } + if q.field != "" { + suggester["field"] = q.field + } + if q.size != nil { + suggester["size"] = *q.size + } + if q.shardSize != nil { + suggester["shard_size"] = *q.shardSize + } + switch len(q.contextQueries) { + case 0: + case 1: + src, err := q.contextQueries[0].Source() + if err != nil { + return nil, err + } + suggester["contexts"] = src + default: + var ctxq []interface{} + for _, query := range q.contextQueries { + src, err := query.Source() + if err != nil { + return nil, err + } + ctxq = append(ctxq, src) + } + suggester["contexts"] = ctxq + } + + // Phase-specified parameters + if q.realWordErrorLikelihood != nil { + suggester["real_word_error_likelihood"] = *q.realWordErrorLikelihood + } + if q.confidence != nil { + suggester["confidence"] = *q.confidence + } + if q.separator != nil { + suggester["separator"] = *q.separator + } + if q.maxErrors != nil { + suggester["max_errors"] = *q.maxErrors + } + if q.gramSize != nil { + suggester["gram_size"] = *q.gramSize + } + if q.forceUnigrams != nil { + suggester["force_unigrams"] = *q.forceUnigrams + } + if q.tokenLimit != nil { + suggester["token_limit"] = *q.tokenLimit + } + if q.generators != nil && len(q.generators) > 0 { + for typ, generators := range q.generators { + var arr []interface{} + for _, g := range generators { + src, err := g.Source() + if err != nil { + return nil, err + } + arr = append(arr, src) + } + suggester[typ] = arr + } + } + if q.smoothingModel != nil { + src, err := q.smoothingModel.Source() + if err != nil { + return nil, err + } + x := make(map[string]interface{}) + x[q.smoothingModel.Type()] = src + suggester["smoothing"] = x + } + if q.preTag != nil { + hl := make(map[string]string) + hl["pre_tag"] = *q.preTag + if q.postTag != nil { + hl["post_tag"] = *q.postTag + } + suggester["highlight"] = hl + } + if q.collateQuery != nil { + collate := make(map[string]interface{}) + suggester["collate"] = collate + if q.collateQuery != nil { + collate["query"] = *q.collateQuery + } + if q.collatePreference != nil { + collate["preference"] = *q.collatePreference + } + if len(q.collateParams) > 0 { + collate["params"] = q.collateParams + } + if q.collatePrune != nil { + collate["prune"] = *q.collatePrune + } + } + + if !includeName { + return ps, nil + } + + source := make(map[string]interface{}) + source[q.name] = ps + return source, nil +} + +// -- Smoothing models -- + +type SmoothingModel interface { + Type() string + Source() (interface{}, error) +} + +// StupidBackoffSmoothingModel implements a stupid backoff smoothing model. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-suggesters-phrase.html#_smoothing_models +// for details about smoothing models. +type StupidBackoffSmoothingModel struct { + discount float64 +} + +func NewStupidBackoffSmoothingModel(discount float64) *StupidBackoffSmoothingModel { + return &StupidBackoffSmoothingModel{ + discount: discount, + } +} + +func (sm *StupidBackoffSmoothingModel) Type() string { + return "stupid_backoff" +} + +func (sm *StupidBackoffSmoothingModel) Source() (interface{}, error) { + source := make(map[string]interface{}) + source["discount"] = sm.discount + return source, nil +} + +// -- + +// LaplaceSmoothingModel implements a laplace smoothing model. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-suggesters-phrase.html#_smoothing_models +// for details about smoothing models. +type LaplaceSmoothingModel struct { + alpha float64 +} + +func NewLaplaceSmoothingModel(alpha float64) *LaplaceSmoothingModel { + return &LaplaceSmoothingModel{ + alpha: alpha, + } +} + +func (sm *LaplaceSmoothingModel) Type() string { + return "laplace" +} + +func (sm *LaplaceSmoothingModel) Source() (interface{}, error) { + source := make(map[string]interface{}) + source["alpha"] = sm.alpha + return source, nil +} + +// -- + +// LinearInterpolationSmoothingModel implements a linear interpolation +// smoothing model. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-suggesters-phrase.html#_smoothing_models +// for details about smoothing models. +type LinearInterpolationSmoothingModel struct { + trigramLamda float64 + bigramLambda float64 + unigramLambda float64 +} + +func NewLinearInterpolationSmoothingModel(trigramLamda, bigramLambda, unigramLambda float64) *LinearInterpolationSmoothingModel { + return &LinearInterpolationSmoothingModel{ + trigramLamda: trigramLamda, + bigramLambda: bigramLambda, + unigramLambda: unigramLambda, + } +} + +func (sm *LinearInterpolationSmoothingModel) Type() string { + return "linear_interpolation" +} + +func (sm *LinearInterpolationSmoothingModel) Source() (interface{}, error) { + source := make(map[string]interface{}) + source["trigram_lambda"] = sm.trigramLamda + source["bigram_lambda"] = sm.bigramLambda + source["unigram_lambda"] = sm.unigramLambda + return source, nil +} + +// -- CandidateGenerator -- + +type CandidateGenerator interface { + Type() string + Source() (interface{}, error) +} + +// DirectCandidateGenerator implements a direct candidate generator. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-suggesters-phrase.html#_smoothing_models +// for details about smoothing models. +type DirectCandidateGenerator struct { + field string + preFilter *string + postFilter *string + suggestMode *string + accuracy *float64 + size *int + sort *string + stringDistance *string + maxEdits *int + maxInspections *int + maxTermFreq *float64 + prefixLength *int + minWordLength *int + minDocFreq *float64 +} + +func NewDirectCandidateGenerator(field string) *DirectCandidateGenerator { + return &DirectCandidateGenerator{ + field: field, + } +} + +func (g *DirectCandidateGenerator) Type() string { + return "direct_generator" +} + +func (g *DirectCandidateGenerator) Field(field string) *DirectCandidateGenerator { + g.field = field + return g +} + +func (g *DirectCandidateGenerator) PreFilter(preFilter string) *DirectCandidateGenerator { + g.preFilter = &preFilter + return g +} + +func (g *DirectCandidateGenerator) PostFilter(postFilter string) *DirectCandidateGenerator { + g.postFilter = &postFilter + return g +} + +func (g *DirectCandidateGenerator) SuggestMode(suggestMode string) *DirectCandidateGenerator { + g.suggestMode = &suggestMode + return g +} + +func (g *DirectCandidateGenerator) Accuracy(accuracy float64) *DirectCandidateGenerator { + g.accuracy = &accuracy + return g +} + +func (g *DirectCandidateGenerator) Size(size int) *DirectCandidateGenerator { + g.size = &size + return g +} + +func (g *DirectCandidateGenerator) Sort(sort string) *DirectCandidateGenerator { + g.sort = &sort + return g +} + +func (g *DirectCandidateGenerator) StringDistance(stringDistance string) *DirectCandidateGenerator { + g.stringDistance = &stringDistance + return g +} + +func (g *DirectCandidateGenerator) MaxEdits(maxEdits int) *DirectCandidateGenerator { + g.maxEdits = &maxEdits + return g +} + +func (g *DirectCandidateGenerator) MaxInspections(maxInspections int) *DirectCandidateGenerator { + g.maxInspections = &maxInspections + return g +} + +func (g *DirectCandidateGenerator) MaxTermFreq(maxTermFreq float64) *DirectCandidateGenerator { + g.maxTermFreq = &maxTermFreq + return g +} + +func (g *DirectCandidateGenerator) PrefixLength(prefixLength int) *DirectCandidateGenerator { + g.prefixLength = &prefixLength + return g +} + +func (g *DirectCandidateGenerator) MinWordLength(minWordLength int) *DirectCandidateGenerator { + g.minWordLength = &minWordLength + return g +} + +func (g *DirectCandidateGenerator) MinDocFreq(minDocFreq float64) *DirectCandidateGenerator { + g.minDocFreq = &minDocFreq + return g +} + +func (g *DirectCandidateGenerator) Source() (interface{}, error) { + source := make(map[string]interface{}) + if g.field != "" { + source["field"] = g.field + } + if g.suggestMode != nil { + source["suggest_mode"] = *g.suggestMode + } + if g.accuracy != nil { + source["accuracy"] = *g.accuracy + } + if g.size != nil { + source["size"] = *g.size + } + if g.sort != nil { + source["sort"] = *g.sort + } + if g.stringDistance != nil { + source["string_distance"] = *g.stringDistance + } + if g.maxEdits != nil { + source["max_edits"] = *g.maxEdits + } + if g.maxInspections != nil { + source["max_inspections"] = *g.maxInspections + } + if g.maxTermFreq != nil { + source["max_term_freq"] = *g.maxTermFreq + } + if g.prefixLength != nil { + source["prefix_length"] = *g.prefixLength + } + if g.minWordLength != nil { + source["min_word_length"] = *g.minWordLength + } + if g.minDocFreq != nil { + source["min_doc_freq"] = *g.minDocFreq + } + if g.preFilter != nil { + source["pre_filter"] = *g.preFilter + } + if g.postFilter != nil { + source["post_filter"] = *g.postFilter + } + return source, nil +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/suggester_phrase_test.go b/vendor/github.com/olivere/elastic/suggester_phrase_test.go similarity index 82% rename from vendor/gopkg.in/olivere/elastic.v2/suggester_phrase_test.go rename to vendor/github.com/olivere/elastic/suggester_phrase_test.go index 135c037..63dde68 100644 --- a/vendor/gopkg.in/olivere/elastic.v2/suggester_phrase_test.go +++ b/vendor/github.com/olivere/elastic/suggester_phrase_test.go @@ -1,4 +1,4 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. +// Copyright 2012-present Oliver Eilhard. All rights reserved. // Use of this source code is governed by a MIT-license. // See http://olivere.mit-license.org/license.txt for details. @@ -19,7 +19,11 @@ func TestPhraseSuggesterSource(t *testing.T) { MaxErrors(0.5). GramSize(2). Highlight("", "") - data, err := json.Marshal(s.Source(true)) + src, err := s.Source(true) + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } @@ -47,12 +51,16 @@ func TestPhraseSuggesterSourceWithContextQuery(t *testing.T) { GramSize(2). Highlight("", ""). ContextQuery(geomapQ) - data, err := json.Marshal(s.Source(true)) + src, err := s.Source(true) + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } got := string(data) - expected := `{"name":{"text":"Xor the Got-Jewel","phrase":{"analyzer":"body","context":{"location":{"default":{"lat":0,"lon":0},"neighbors":true,"path":"pin","precision":["1km","5m"],"type":"geo"}},"field":"bigram","gram_size":2,"highlight":{"post_tag":"\u003c/em\u003e","pre_tag":"\u003cem\u003e"},"max_errors":0.5,"real_word_error_likelihood":0.95,"size":1}}}` + expected := `{"name":{"text":"Xor the Got-Jewel","phrase":{"analyzer":"body","contexts":{"location":{"default":{"lat":0,"lon":0},"neighbors":true,"path":"pin","precision":["1km","5m"],"type":"geo"}},"field":"bigram","gram_size":2,"highlight":{"post_tag":"\u003c/em\u003e","pre_tag":"\u003cem\u003e"},"max_errors":0.5,"real_word_error_likelihood":0.95,"size":1}}}` if got != expected { t.Errorf("expected\n%s\n,got:\n%s", expected, got) } @@ -82,7 +90,11 @@ func TestPhraseSuggesterComplexSource(t *testing.T) { CollateParams(map[string]interface{}{"field_name": "title"}). CollatePreference("_primary"). CollatePrune(true) - data, err := json.Marshal(s.Source(true)) + src, err := s.Source(true) + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } @@ -95,7 +107,11 @@ func TestPhraseSuggesterComplexSource(t *testing.T) { func TestPhraseStupidBackoffSmoothingModel(t *testing.T) { s := NewStupidBackoffSmoothingModel(0.42) - data, err := json.Marshal(s.Source()) + src, err := s.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } @@ -112,7 +128,11 @@ func TestPhraseStupidBackoffSmoothingModel(t *testing.T) { func TestPhraseLaplaceSmoothingModel(t *testing.T) { s := NewLaplaceSmoothingModel(0.63) - data, err := json.Marshal(s.Source()) + src, err := s.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } @@ -129,7 +149,11 @@ func TestPhraseLaplaceSmoothingModel(t *testing.T) { func TestLinearInterpolationSmoothingModel(t *testing.T) { s := NewLinearInterpolationSmoothingModel(0.3, 0.2, 0.05) - data, err := json.Marshal(s.Source()) + src, err := s.Source() + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) if err != nil { t.Fatalf("marshaling to JSON failed: %v", err) } diff --git a/vendor/github.com/olivere/elastic/suggester_term.go b/vendor/github.com/olivere/elastic/suggester_term.go new file mode 100644 index 0000000..fc51280 --- /dev/null +++ b/vendor/github.com/olivere/elastic/suggester_term.go @@ -0,0 +1,233 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +// TermSuggester suggests terms based on edit distance. +// For more details, see +// https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-suggesters-term.html. +type TermSuggester struct { + Suggester + name string + text string + field string + analyzer string + size *int + shardSize *int + contextQueries []SuggesterContextQuery + + // fields specific to term suggester + suggestMode string + accuracy *float64 + sort string + stringDistance string + maxEdits *int + maxInspections *int + maxTermFreq *float64 + prefixLength *int + minWordLength *int + minDocFreq *float64 +} + +// NewTermSuggester creates a new TermSuggester. +func NewTermSuggester(name string) *TermSuggester { + return &TermSuggester{ + name: name, + } +} + +func (q *TermSuggester) Name() string { + return q.name +} + +func (q *TermSuggester) Text(text string) *TermSuggester { + q.text = text + return q +} + +func (q *TermSuggester) Field(field string) *TermSuggester { + q.field = field + return q +} + +func (q *TermSuggester) Analyzer(analyzer string) *TermSuggester { + q.analyzer = analyzer + return q +} + +func (q *TermSuggester) Size(size int) *TermSuggester { + q.size = &size + return q +} + +func (q *TermSuggester) ShardSize(shardSize int) *TermSuggester { + q.shardSize = &shardSize + return q +} + +func (q *TermSuggester) ContextQuery(query SuggesterContextQuery) *TermSuggester { + q.contextQueries = append(q.contextQueries, query) + return q +} + +func (q *TermSuggester) ContextQueries(queries ...SuggesterContextQuery) *TermSuggester { + q.contextQueries = append(q.contextQueries, queries...) + return q +} + +func (q *TermSuggester) SuggestMode(suggestMode string) *TermSuggester { + q.suggestMode = suggestMode + return q +} + +func (q *TermSuggester) Accuracy(accuracy float64) *TermSuggester { + q.accuracy = &accuracy + return q +} + +func (q *TermSuggester) Sort(sort string) *TermSuggester { + q.sort = sort + return q +} + +func (q *TermSuggester) StringDistance(stringDistance string) *TermSuggester { + q.stringDistance = stringDistance + return q +} + +func (q *TermSuggester) MaxEdits(maxEdits int) *TermSuggester { + q.maxEdits = &maxEdits + return q +} + +func (q *TermSuggester) MaxInspections(maxInspections int) *TermSuggester { + q.maxInspections = &maxInspections + return q +} + +func (q *TermSuggester) MaxTermFreq(maxTermFreq float64) *TermSuggester { + q.maxTermFreq = &maxTermFreq + return q +} + +func (q *TermSuggester) PrefixLength(prefixLength int) *TermSuggester { + q.prefixLength = &prefixLength + return q +} + +func (q *TermSuggester) MinWordLength(minWordLength int) *TermSuggester { + q.minWordLength = &minWordLength + return q +} + +func (q *TermSuggester) MinDocFreq(minDocFreq float64) *TermSuggester { + q.minDocFreq = &minDocFreq + return q +} + +// termSuggesterRequest is necessary because the order in which +// the JSON elements are routed to Elasticsearch is relevant. +// We got into trouble when using plain maps because the text element +// needs to go before the term element. +type termSuggesterRequest struct { + Text string `json:"text"` + Term interface{} `json:"term"` +} + +// Source generates the source for the term suggester. +func (q *TermSuggester) Source(includeName bool) (interface{}, error) { + // "suggest" : { + // "my-suggest-1" : { + // "text" : "the amsterdma meetpu", + // "term" : { + // "field" : "body" + // } + // }, + // "my-suggest-2" : { + // "text" : "the rottredam meetpu", + // "term" : { + // "field" : "title", + // } + // } + // } + ts := &termSuggesterRequest{} + if q.text != "" { + ts.Text = q.text + } + + suggester := make(map[string]interface{}) + ts.Term = suggester + + if q.analyzer != "" { + suggester["analyzer"] = q.analyzer + } + if q.field != "" { + suggester["field"] = q.field + } + if q.size != nil { + suggester["size"] = *q.size + } + if q.shardSize != nil { + suggester["shard_size"] = *q.shardSize + } + switch len(q.contextQueries) { + case 0: + case 1: + src, err := q.contextQueries[0].Source() + if err != nil { + return nil, err + } + suggester["contexts"] = src + default: + ctxq := make([]interface{}, len(q.contextQueries)) + for i, query := range q.contextQueries { + src, err := query.Source() + if err != nil { + return nil, err + } + ctxq[i] = src + } + suggester["contexts"] = ctxq + } + + // Specific to term suggester + if q.suggestMode != "" { + suggester["suggest_mode"] = q.suggestMode + } + if q.accuracy != nil { + suggester["accuracy"] = *q.accuracy + } + if q.sort != "" { + suggester["sort"] = q.sort + } + if q.stringDistance != "" { + suggester["string_distance"] = q.stringDistance + } + if q.maxEdits != nil { + suggester["max_edits"] = *q.maxEdits + } + if q.maxInspections != nil { + suggester["max_inspections"] = *q.maxInspections + } + if q.maxTermFreq != nil { + suggester["max_term_freq"] = *q.maxTermFreq + } + if q.prefixLength != nil { + suggester["prefix_length"] = *q.prefixLength + } + if q.minWordLength != nil { + suggester["min_word_len"] = *q.minWordLength + } + if q.minDocFreq != nil { + suggester["min_doc_freq"] = *q.minDocFreq + } + + if !includeName { + return ts, nil + } + + source := make(map[string]interface{}) + source[q.name] = ts + return source, nil +} diff --git a/vendor/github.com/olivere/elastic/suggester_term_test.go b/vendor/github.com/olivere/elastic/suggester_term_test.go new file mode 100644 index 0000000..d3250f6 --- /dev/null +++ b/vendor/github.com/olivere/elastic/suggester_term_test.go @@ -0,0 +1,49 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "encoding/json" + "testing" +) + +func TestTermSuggesterSource(t *testing.T) { + s := NewTermSuggester("name"). + Text("n"). + Field("suggest") + src, err := s.Source(true) + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"name":{"text":"n","term":{"field":"suggest"}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} + +func TestTermSuggesterWithPrefixLengthSource(t *testing.T) { + s := NewTermSuggester("name"). + Text("n"). + Field("suggest"). + PrefixLength(0) + src, err := s.Source(true) + if err != nil { + t.Fatal(err) + } + data, err := json.Marshal(src) + if err != nil { + t.Fatalf("marshaling to JSON failed: %v", err) + } + got := string(data) + expected := `{"name":{"text":"n","term":{"field":"suggest","prefix_length":0}}}` + if got != expected { + t.Errorf("expected\n%s\n,got:\n%s", expected, got) + } +} diff --git a/vendor/github.com/olivere/elastic/tasks_cancel.go b/vendor/github.com/olivere/elastic/tasks_cancel.go new file mode 100644 index 0000000..84f8aec --- /dev/null +++ b/vendor/github.com/olivere/elastic/tasks_cancel.go @@ -0,0 +1,149 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" + "strings" + + "github.com/olivere/elastic/uritemplates" +) + +// TasksCancelService can cancel long-running tasks. +// It is supported as of Elasticsearch 2.3.0. +// +// See http://www.elastic.co/guide/en/elasticsearch/reference/5.2/tasks-cancel.html +// for details. +type TasksCancelService struct { + client *Client + pretty bool + taskId *int64 + actions []string + nodeId []string + parentNode string + parentTask *int64 +} + +// NewTasksCancelService creates a new TasksCancelService. +func NewTasksCancelService(client *Client) *TasksCancelService { + return &TasksCancelService{ + client: client, + actions: make([]string, 0), + nodeId: make([]string, 0), + } +} + +// TaskId specifies the task to cancel. Set to -1 to cancel all tasks. +func (s *TasksCancelService) TaskId(taskId int64) *TasksCancelService { + s.taskId = &taskId + return s +} + +// Actions is a list of actions that should be cancelled. Leave empty to cancel all. +func (s *TasksCancelService) Actions(actions []string) *TasksCancelService { + s.actions = actions + return s +} + +// NodeId is a list of node IDs or names to limit the returned information; +// use `_local` to return information from the node you're connecting to, +// leave empty to get information from all nodes. +func (s *TasksCancelService) NodeId(nodeId []string) *TasksCancelService { + s.nodeId = nodeId + return s +} + +// ParentNode specifies to cancel tasks with specified parent node. +func (s *TasksCancelService) ParentNode(parentNode string) *TasksCancelService { + s.parentNode = parentNode + return s +} + +// ParentTask specifies to cancel tasks with specified parent task id. +// Set to -1 to cancel all. +func (s *TasksCancelService) ParentTask(parentTask int64) *TasksCancelService { + s.parentTask = &parentTask + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *TasksCancelService) Pretty(pretty bool) *TasksCancelService { + s.pretty = pretty + return s +} + +// buildURL builds the URL for the operation. +func (s *TasksCancelService) buildURL() (string, url.Values, error) { + // Build URL + var err error + var path string + if s.taskId != nil { + path, err = uritemplates.Expand("/_tasks/{task_id}/_cancel", map[string]string{ + "task_id": fmt.Sprintf("%d", *s.taskId), + }) + } else { + path = "/_tasks/_cancel" + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if len(s.actions) > 0 { + params.Set("actions", strings.Join(s.actions, ",")) + } + if len(s.nodeId) > 0 { + params.Set("node_id", strings.Join(s.nodeId, ",")) + } + if s.parentNode != "" { + params.Set("parent_node", s.parentNode) + } + if s.parentTask != nil { + params.Set("parent_task", fmt.Sprintf("%v", *s.parentTask)) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *TasksCancelService) Validate() error { + return nil +} + +// Do executes the operation. +func (s *TasksCancelService) Do(ctx context.Context) (*TasksListResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(TasksListResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} diff --git a/vendor/github.com/olivere/elastic/tasks_cancel_test.go b/vendor/github.com/olivere/elastic/tasks_cancel_test.go new file mode 100644 index 0000000..c9d8633 --- /dev/null +++ b/vendor/github.com/olivere/elastic/tasks_cancel_test.go @@ -0,0 +1,51 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import "testing" + +func TestTasksCancelBuildURL(t *testing.T) { + client := setupTestClient(t) + + // Cancel all + got, _, err := client.TasksCancel().buildURL() + if err != nil { + t.Fatal(err) + } + want := "/_tasks/_cancel" + if got != want { + t.Errorf("want %q; got %q", want, got) + } + + // Cancel specific task + got, _, err = client.TasksCancel().TaskId(42).buildURL() + if err != nil { + t.Fatal(err) + } + want = "/_tasks/42/_cancel" + if got != want { + t.Errorf("want %q; got %q", want, got) + } +} + +/* +func TestTasksCancel(t *testing.T) { + client := setupTestClientAndCreateIndexAndAddDocs(t) + esversion, err := client.ElasticsearchVersion(DefaultURL) + if err != nil { + t.Fatal(err) + } + if esversion < "2.3.0" { + t.Skipf("Elasticsearch %v does not support Tasks Management API yet", esversion) + } + res, err := client.TasksCancel("1").Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if res == nil { + t.Fatal("response is nil") + } +} +*/ diff --git a/vendor/github.com/olivere/elastic/tasks_get_task.go b/vendor/github.com/olivere/elastic/tasks_get_task.go new file mode 100644 index 0000000..5f63726 --- /dev/null +++ b/vendor/github.com/olivere/elastic/tasks_get_task.go @@ -0,0 +1,108 @@ +package elastic + +import ( + "context" + "fmt" + "net/url" + + "github.com/olivere/elastic/uritemplates" +) + +// TasksGetTaskService retrieves the state of a task in the cluster. It is part of the Task Management API +// documented at http://www.elastic.co/guide/en/elasticsearch/reference/5.2/tasks-list.html. +// +// It is supported as of Elasticsearch 2.3.0. +type TasksGetTaskService struct { + client *Client + pretty bool + taskId string + waitForCompletion *bool +} + +// NewTasksGetTaskService creates a new TasksGetTaskService. +func NewTasksGetTaskService(client *Client) *TasksGetTaskService { + return &TasksGetTaskService{ + client: client, + } +} + +// TaskId indicates to return the task with specified id. +func (s *TasksGetTaskService) TaskId(taskId string) *TasksGetTaskService { + s.taskId = taskId + return s +} + +// WaitForCompletion indicates whether to wait for the matching tasks +// to complete (default: false). +func (s *TasksGetTaskService) WaitForCompletion(waitForCompletion bool) *TasksGetTaskService { + s.waitForCompletion = &waitForCompletion + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *TasksGetTaskService) Pretty(pretty bool) *TasksGetTaskService { + s.pretty = pretty + return s +} + +// buildURL builds the URL for the operation. +func (s *TasksGetTaskService) buildURL() (string, url.Values, error) { + // Build URL + path, err := uritemplates.Expand("/_tasks/{task_id}", map[string]string{ + "task_id": s.taskId, + }) + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "1") + } + if s.waitForCompletion != nil { + params.Set("wait_for_completion", fmt.Sprintf("%v", *s.waitForCompletion)) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *TasksGetTaskService) Validate() error { + return nil +} + +// Do executes the operation. +func (s *TasksGetTaskService) Do(ctx context.Context) (*TasksGetTaskResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(TasksGetTaskResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +type TasksGetTaskResponse struct { + Completed bool `json:"completed"` + Task *TaskInfo `json:"task,omitempty"` +} diff --git a/vendor/github.com/olivere/elastic/tasks_get_task_test.go b/vendor/github.com/olivere/elastic/tasks_get_task_test.go new file mode 100644 index 0000000..a4da49c --- /dev/null +++ b/vendor/github.com/olivere/elastic/tasks_get_task_test.go @@ -0,0 +1,43 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "testing" +) + +func TestTasksGetTaskBuildURL(t *testing.T) { + client := setupTestClient(t) + + // Get specific task + got, _, err := client.TasksGetTask().TaskId("123").buildURL() + if err != nil { + t.Fatal(err) + } + want := "/_tasks/123" + if got != want { + t.Errorf("want %q; got %q", want, got) + } +} + +/* +func TestTasksGetTask(t *testing.T) { + client := setupTestClientAndCreateIndexAndAddDocs(t) + esversion, err := client.ElasticsearchVersion(DefaultURL) + if err != nil { + t.Fatal(err) + } + if esversion < "2.3.0" { + t.Skipf("Elasticsearch %v does not support Tasks Management API yet", esversion) + } + res, err := client.TasksGetTask().TaskId("123").Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if res == nil { + t.Fatal("response is nil") + } +} +*/ diff --git a/vendor/github.com/olivere/elastic/tasks_list.go b/vendor/github.com/olivere/elastic/tasks_list.go new file mode 100644 index 0000000..d27e0f5 --- /dev/null +++ b/vendor/github.com/olivere/elastic/tasks_list.go @@ -0,0 +1,231 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" + "strings" + + "github.com/olivere/elastic/uritemplates" +) + +// TasksListService retrieves the list of currently executing tasks +// on one ore more nodes in the cluster. It is part of the Task Management API +// documented at https://www.elastic.co/guide/en/elasticsearch/reference/6.2/tasks.html. +// +// It is supported as of Elasticsearch 2.3.0. +type TasksListService struct { + client *Client + pretty bool + taskId []string + actions []string + detailed *bool + nodeId []string + parentNode string + parentTaskId *string + waitForCompletion *bool + groupBy string +} + +// NewTasksListService creates a new TasksListService. +func NewTasksListService(client *Client) *TasksListService { + return &TasksListService{ + client: client, + } +} + +// TaskId indicates to returns the task(s) with specified id(s). +func (s *TasksListService) TaskId(taskId ...string) *TasksListService { + s.taskId = append(s.taskId, taskId...) + return s +} + +// Actions is a list of actions that should be returned. Leave empty to return all. +func (s *TasksListService) Actions(actions ...string) *TasksListService { + s.actions = append(s.actions, actions...) + return s +} + +// Detailed indicates whether to return detailed task information (default: false). +func (s *TasksListService) Detailed(detailed bool) *TasksListService { + s.detailed = &detailed + return s +} + +// NodeId is a list of node IDs or names to limit the returned information; +// use `_local` to return information from the node you're connecting to, +// leave empty to get information from all nodes. +func (s *TasksListService) NodeId(nodeId ...string) *TasksListService { + s.nodeId = append(s.nodeId, nodeId...) + return s +} + +// ParentNode returns tasks with specified parent node. +func (s *TasksListService) ParentNode(parentNode string) *TasksListService { + s.parentNode = parentNode + return s +} + +// ParentTaskId returns tasks with specified parent task id (node_id:task_number). Set to -1 to return all. +func (s *TasksListService) ParentTaskId(parentTaskId string) *TasksListService { + s.parentTaskId = &parentTaskId + return s +} + +// WaitForCompletion indicates whether to wait for the matching tasks +// to complete (default: false). +func (s *TasksListService) WaitForCompletion(waitForCompletion bool) *TasksListService { + s.waitForCompletion = &waitForCompletion + return s +} + +// GroupBy groups tasks by nodes or parent/child relationships. +// As of now, it can either be "nodes" (default) or "parents". +func (s *TasksListService) GroupBy(groupBy string) *TasksListService { + s.groupBy = groupBy + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *TasksListService) Pretty(pretty bool) *TasksListService { + s.pretty = pretty + return s +} + +// buildURL builds the URL for the operation. +func (s *TasksListService) buildURL() (string, url.Values, error) { + // Build URL + var err error + var path string + if len(s.taskId) > 0 { + path, err = uritemplates.Expand("/_tasks/{task_id}", map[string]string{ + "task_id": strings.Join(s.taskId, ","), + }) + } else { + path = "/_tasks" + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if len(s.actions) > 0 { + params.Set("actions", strings.Join(s.actions, ",")) + } + if s.detailed != nil { + params.Set("detailed", fmt.Sprintf("%v", *s.detailed)) + } + if len(s.nodeId) > 0 { + params.Set("node_id", strings.Join(s.nodeId, ",")) + } + if s.parentNode != "" { + params.Set("parent_node", s.parentNode) + } + if s.parentTaskId != nil { + params.Set("parent_task_id", *s.parentTaskId) + } + if s.waitForCompletion != nil { + params.Set("wait_for_completion", fmt.Sprintf("%v", *s.waitForCompletion)) + } + if s.groupBy != "" { + params.Set("group_by", s.groupBy) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *TasksListService) Validate() error { + return nil +} + +// Do executes the operation. +func (s *TasksListService) Do(ctx context.Context) (*TasksListResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(TasksListResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// TasksListResponse is the response of TasksListService.Do. +type TasksListResponse struct { + TaskFailures []*TaskOperationFailure `json:"task_failures"` + NodeFailures []*FailedNodeException `json:"node_failures"` + // Nodes returns the tasks per node. The key is the node id. + Nodes map[string]*DiscoveryNode `json:"nodes"` +} + +type TaskOperationFailure struct { + TaskId int64 `json:"task_id"` // this is a long in the Java source + NodeId string `json:"node_id"` + Status string `json:"status"` + Reason *ErrorDetails `json:"reason"` +} + +type FailedNodeException struct { + *ErrorDetails + NodeId string `json:"node_id"` +} + +type DiscoveryNode struct { + Name string `json:"name"` + TransportAddress string `json:"transport_address"` + Host string `json:"host"` + IP string `json:"ip"` + Roles []string `json:"roles"` // "master", "data", or "ingest" + Attributes map[string]interface{} `json:"attributes"` + // Tasks returns the tasks by its id (as a string). + Tasks map[string]*TaskInfo `json:"tasks"` +} + +// TaskInfo represents information about a currently running task. +type TaskInfo struct { + Node string `json:"node"` + Id int64 `json:"id"` // the task id (yes, this is a long in the Java source) + Type string `json:"type"` + Action string `json:"action"` + Status interface{} `json:"status"` // has separate implementations of Task.Status in Java for reindexing, replication, and "RawTaskStatus" + Description interface{} `json:"description"` // same as Status + StartTime string `json:"start_time"` + StartTimeInMillis int64 `json:"start_time_in_millis"` + RunningTime string `json:"running_time"` + RunningTimeInNanos int64 `json:"running_time_in_nanos"` + Cancellable bool `json:"cancellable"` + ParentTaskId string `json:"parent_task_id"` // like "YxJnVYjwSBm_AUbzddTajQ:12356" +} + +// StartTaskResult is used in cases where a task gets started asynchronously and +// the operation simply returnes a TaskID to watch for via the Task Management API. +type StartTaskResult struct { + TaskId string `json:"task"` +} diff --git a/vendor/github.com/olivere/elastic/tasks_list_test.go b/vendor/github.com/olivere/elastic/tasks_list_test.go new file mode 100644 index 0000000..9ecabcd --- /dev/null +++ b/vendor/github.com/olivere/elastic/tasks_list_test.go @@ -0,0 +1,65 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "testing" +) + +func TestTasksListBuildURL(t *testing.T) { + client := setupTestClient(t) + + tests := []struct { + TaskId []string + Expected string + }{ + { + []string{}, + "/_tasks", + }, + { + []string{"42"}, + "/_tasks/42", + }, + { + []string{"42", "37"}, + "/_tasks/42%2C37", + }, + } + + for i, test := range tests { + path, _, err := client.TasksList().TaskId(test.TaskId...).buildURL() + if err != nil { + t.Errorf("case #%d: %v", i+1, err) + continue + } + if path != test.Expected { + t.Errorf("case #%d: expected %q; got: %q", i+1, test.Expected, path) + } + } +} + +func TestTasksList(t *testing.T) { + client := setupTestClientAndCreateIndexAndAddDocs(t) //, SetTraceLog(log.New(os.Stdout, "", 0))) + esversion, err := client.ElasticsearchVersion(DefaultURL) + if err != nil { + t.Fatal(err) + } + if esversion < "2.3.0" { + t.Skipf("Elasticsearch %v does not support Tasks Management API yet", esversion) + } + + res, err := client.TasksList().Pretty(true).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if res == nil { + t.Fatal("response is nil") + } + if len(res.Nodes) == 0 { + t.Fatalf("expected at least 1 node; got: %d", len(res.Nodes)) + } +} diff --git a/vendor/github.com/olivere/elastic/termvectors.go b/vendor/github.com/olivere/elastic/termvectors.go new file mode 100644 index 0000000..a3b4875 --- /dev/null +++ b/vendor/github.com/olivere/elastic/termvectors.go @@ -0,0 +1,464 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" + "strings" + + "github.com/olivere/elastic/uritemplates" +) + +// TermvectorsService returns information and statistics on terms in the +// fields of a particular document. The document could be stored in the +// index or artificially provided by the user. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-termvectors.html +// for documentation. +type TermvectorsService struct { + client *Client + pretty bool + id string + index string + typ string + dfs *bool + doc interface{} + fieldStatistics *bool + fields []string + filter *TermvectorsFilterSettings + perFieldAnalyzer map[string]string + offsets *bool + parent string + payloads *bool + positions *bool + preference string + realtime *bool + routing string + termStatistics *bool + version interface{} + versionType string + bodyJson interface{} + bodyString string +} + +// NewTermvectorsService creates a new TermvectorsService. +func NewTermvectorsService(client *Client) *TermvectorsService { + return &TermvectorsService{ + client: client, + } +} + +// Index in which the document resides. +func (s *TermvectorsService) Index(index string) *TermvectorsService { + s.index = index + return s +} + +// Type of the document. +func (s *TermvectorsService) Type(typ string) *TermvectorsService { + s.typ = typ + return s +} + +// Id of the document. +func (s *TermvectorsService) Id(id string) *TermvectorsService { + s.id = id + return s +} + +// Dfs specifies if distributed frequencies should be returned instead +// shard frequencies. +func (s *TermvectorsService) Dfs(dfs bool) *TermvectorsService { + s.dfs = &dfs + return s +} + +// Doc is the document to analyze. +func (s *TermvectorsService) Doc(doc interface{}) *TermvectorsService { + s.doc = doc + return s +} + +// FieldStatistics specifies if document count, sum of document frequencies +// and sum of total term frequencies should be returned. +func (s *TermvectorsService) FieldStatistics(fieldStatistics bool) *TermvectorsService { + s.fieldStatistics = &fieldStatistics + return s +} + +// Fields a list of fields to return. +func (s *TermvectorsService) Fields(fields ...string) *TermvectorsService { + if s.fields == nil { + s.fields = make([]string, 0) + } + s.fields = append(s.fields, fields...) + return s +} + +// Filter adds terms filter settings. +func (s *TermvectorsService) Filter(filter *TermvectorsFilterSettings) *TermvectorsService { + s.filter = filter + return s +} + +// PerFieldAnalyzer allows to specify a different analyzer than the one +// at the field. +func (s *TermvectorsService) PerFieldAnalyzer(perFieldAnalyzer map[string]string) *TermvectorsService { + s.perFieldAnalyzer = perFieldAnalyzer + return s +} + +// Offsets specifies if term offsets should be returned. +func (s *TermvectorsService) Offsets(offsets bool) *TermvectorsService { + s.offsets = &offsets + return s +} + +// Parent id of documents. +func (s *TermvectorsService) Parent(parent string) *TermvectorsService { + s.parent = parent + return s +} + +// Payloads specifies if term payloads should be returned. +func (s *TermvectorsService) Payloads(payloads bool) *TermvectorsService { + s.payloads = &payloads + return s +} + +// Positions specifies if term positions should be returned. +func (s *TermvectorsService) Positions(positions bool) *TermvectorsService { + s.positions = &positions + return s +} + +// Preference specify the node or shard the operation +// should be performed on (default: random). +func (s *TermvectorsService) Preference(preference string) *TermvectorsService { + s.preference = preference + return s +} + +// Realtime specifies if request is real-time as opposed to +// near-real-time (default: true). +func (s *TermvectorsService) Realtime(realtime bool) *TermvectorsService { + s.realtime = &realtime + return s +} + +// Routing is a specific routing value. +func (s *TermvectorsService) Routing(routing string) *TermvectorsService { + s.routing = routing + return s +} + +// TermStatistics specifies if total term frequency and document frequency +// should be returned. +func (s *TermvectorsService) TermStatistics(termStatistics bool) *TermvectorsService { + s.termStatistics = &termStatistics + return s +} + +// Version an explicit version number for concurrency control. +func (s *TermvectorsService) Version(version interface{}) *TermvectorsService { + s.version = version + return s +} + +// VersionType specifies a version type ("internal", "external", or "external_gte"). +func (s *TermvectorsService) VersionType(versionType string) *TermvectorsService { + s.versionType = versionType + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *TermvectorsService) Pretty(pretty bool) *TermvectorsService { + s.pretty = pretty + return s +} + +// BodyJson defines the body parameters. See documentation. +func (s *TermvectorsService) BodyJson(body interface{}) *TermvectorsService { + s.bodyJson = body + return s +} + +// BodyString defines the body parameters as a string. See documentation. +func (s *TermvectorsService) BodyString(body string) *TermvectorsService { + s.bodyString = body + return s +} + +// buildURL builds the URL for the operation. +func (s *TermvectorsService) buildURL() (string, url.Values, error) { + var pathParam = map[string]string{ + "index": s.index, + "type": s.typ, + } + var path string + var err error + + // Build URL + if s.id != "" { + pathParam["id"] = s.id + path, err = uritemplates.Expand("/{index}/{type}/{id}/_termvectors", pathParam) + } else { + path, err = uritemplates.Expand("/{index}/{type}/_termvectors", pathParam) + } + + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.dfs != nil { + params.Set("dfs", fmt.Sprintf("%v", *s.dfs)) + } + if s.fieldStatistics != nil { + params.Set("field_statistics", fmt.Sprintf("%v", *s.fieldStatistics)) + } + if len(s.fields) > 0 { + params.Set("fields", strings.Join(s.fields, ",")) + } + if s.offsets != nil { + params.Set("offsets", fmt.Sprintf("%v", *s.offsets)) + } + if s.parent != "" { + params.Set("parent", s.parent) + } + if s.payloads != nil { + params.Set("payloads", fmt.Sprintf("%v", *s.payloads)) + } + if s.positions != nil { + params.Set("positions", fmt.Sprintf("%v", *s.positions)) + } + if s.preference != "" { + params.Set("preference", s.preference) + } + if s.realtime != nil { + params.Set("realtime", fmt.Sprintf("%v", *s.realtime)) + } + if s.routing != "" { + params.Set("routing", s.routing) + } + if s.termStatistics != nil { + params.Set("term_statistics", fmt.Sprintf("%v", *s.termStatistics)) + } + if s.version != nil { + params.Set("version", fmt.Sprintf("%v", s.version)) + } + if s.versionType != "" { + params.Set("version_type", s.versionType) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *TermvectorsService) Validate() error { + var invalid []string + if s.index == "" { + invalid = append(invalid, "Index") + } + if s.typ == "" { + invalid = append(invalid, "Type") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// Do executes the operation. +func (s *TermvectorsService) Do(ctx context.Context) (*TermvectorsResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Setup HTTP request body + var body interface{} + if s.bodyJson != nil { + body = s.bodyJson + } else if s.bodyString != "" { + body = s.bodyString + } else { + data := make(map[string]interface{}) + if s.doc != nil { + data["doc"] = s.doc + } + if len(s.perFieldAnalyzer) > 0 { + data["per_field_analyzer"] = s.perFieldAnalyzer + } + if s.filter != nil { + src, err := s.filter.Source() + if err != nil { + return nil, err + } + data["filter"] = src + } + if len(data) > 0 { + body = data + } + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + Body: body, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(TermvectorsResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// -- Filter settings -- + +// TermvectorsFilterSettings adds additional filters to a Termsvector request. +// It allows to filter terms based on their tf-idf scores. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-termvectors.html#_terms_filtering +// for more information. +type TermvectorsFilterSettings struct { + maxNumTerms *int64 + minTermFreq *int64 + maxTermFreq *int64 + minDocFreq *int64 + maxDocFreq *int64 + minWordLength *int64 + maxWordLength *int64 +} + +// NewTermvectorsFilterSettings creates and initializes a new TermvectorsFilterSettings struct. +func NewTermvectorsFilterSettings() *TermvectorsFilterSettings { + return &TermvectorsFilterSettings{} +} + +// MaxNumTerms specifies the maximum number of terms the must be returned per field. +func (fs *TermvectorsFilterSettings) MaxNumTerms(value int64) *TermvectorsFilterSettings { + fs.maxNumTerms = &value + return fs +} + +// MinTermFreq ignores words with less than this frequency in the source doc. +func (fs *TermvectorsFilterSettings) MinTermFreq(value int64) *TermvectorsFilterSettings { + fs.minTermFreq = &value + return fs +} + +// MaxTermFreq ignores words with more than this frequency in the source doc. +func (fs *TermvectorsFilterSettings) MaxTermFreq(value int64) *TermvectorsFilterSettings { + fs.maxTermFreq = &value + return fs +} + +// MinDocFreq ignores terms which do not occur in at least this many docs. +func (fs *TermvectorsFilterSettings) MinDocFreq(value int64) *TermvectorsFilterSettings { + fs.minDocFreq = &value + return fs +} + +// MaxDocFreq ignores terms which occur in more than this many docs. +func (fs *TermvectorsFilterSettings) MaxDocFreq(value int64) *TermvectorsFilterSettings { + fs.maxDocFreq = &value + return fs +} + +// MinWordLength specifies the minimum word length below which words will be ignored. +func (fs *TermvectorsFilterSettings) MinWordLength(value int64) *TermvectorsFilterSettings { + fs.minWordLength = &value + return fs +} + +// MaxWordLength specifies the maximum word length above which words will be ignored. +func (fs *TermvectorsFilterSettings) MaxWordLength(value int64) *TermvectorsFilterSettings { + fs.maxWordLength = &value + return fs +} + +// Source returns JSON for the query. +func (fs *TermvectorsFilterSettings) Source() (interface{}, error) { + source := make(map[string]interface{}) + if fs.maxNumTerms != nil { + source["max_num_terms"] = *fs.maxNumTerms + } + if fs.minTermFreq != nil { + source["min_term_freq"] = *fs.minTermFreq + } + if fs.maxTermFreq != nil { + source["max_term_freq"] = *fs.maxTermFreq + } + if fs.minDocFreq != nil { + source["min_doc_freq"] = *fs.minDocFreq + } + if fs.maxDocFreq != nil { + source["max_doc_freq"] = *fs.maxDocFreq + } + if fs.minWordLength != nil { + source["min_word_length"] = *fs.minWordLength + } + if fs.maxWordLength != nil { + source["max_word_length"] = *fs.maxWordLength + } + return source, nil +} + +// -- Response types -- + +type TokenInfo struct { + StartOffset int64 `json:"start_offset"` + EndOffset int64 `json:"end_offset"` + Position int64 `json:"position"` + Payload string `json:"payload"` +} + +type TermsInfo struct { + DocFreq int64 `json:"doc_freq"` + Score float64 `json:"score"` + TermFreq int64 `json:"term_freq"` + Ttf int64 `json:"ttf"` + Tokens []TokenInfo `json:"tokens"` +} + +type FieldStatistics struct { + DocCount int64 `json:"doc_count"` + SumDocFreq int64 `json:"sum_doc_freq"` + SumTtf int64 `json:"sum_ttf"` +} + +type TermVectorsFieldInfo struct { + FieldStatistics FieldStatistics `json:"field_statistics"` + Terms map[string]TermsInfo `json:"terms"` +} + +// TermvectorsResponse is the response of TermvectorsService.Do. +type TermvectorsResponse struct { + Index string `json:"_index"` + Type string `json:"_type"` + Id string `json:"_id,omitempty"` + Version int `json:"_version"` + Found bool `json:"found"` + Took int64 `json:"took"` + TermVectors map[string]TermVectorsFieldInfo `json:"term_vectors"` +} diff --git a/vendor/github.com/olivere/elastic/termvectors_test.go b/vendor/github.com/olivere/elastic/termvectors_test.go new file mode 100644 index 0000000..0391f2b --- /dev/null +++ b/vendor/github.com/olivere/elastic/termvectors_test.go @@ -0,0 +1,157 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "testing" + "time" +) + +func TestTermVectorsBuildURL(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tests := []struct { + Index string + Type string + Id string + Expected string + }{ + { + "twitter", + "doc", + "", + "/twitter/doc/_termvectors", + }, + { + "twitter", + "doc", + "1", + "/twitter/doc/1/_termvectors", + }, + } + + for _, test := range tests { + builder := client.TermVectors(test.Index, test.Type) + if test.Id != "" { + builder = builder.Id(test.Id) + } + path, _, err := builder.buildURL() + if err != nil { + t.Fatal(err) + } + if path != test.Expected { + t.Errorf("expected %q; got: %q", test.Expected, path) + } + } +} + +func TestTermVectorsWithId(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} + + // Add a document + indexResult, err := client.Index(). + Index(testIndexName). + Type("doc"). + Id("1"). + BodyJson(&tweet1). + Refresh("true"). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if indexResult == nil { + t.Errorf("expected result to be != nil; got: %v", indexResult) + } + + // TermVectors by specifying ID + field := "Message" + result, err := client.TermVectors(testIndexName, "doc"). + Id("1"). + Fields(field). + FieldStatistics(true). + TermStatistics(true). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if result == nil { + t.Fatal("expected to return information and statistics") + } + if !result.Found { + t.Errorf("expected found to be %v; got: %v", true, result.Found) + } +} + +func TestTermVectorsWithDoc(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + // Travis lags sometimes + if isTravis() { + time.Sleep(2 * time.Second) + } + + // TermVectors by specifying Doc + var doc = map[string]interface{}{ + "fullname": "John Doe", + "text": "twitter test test test", + } + var perFieldAnalyzer = map[string]string{ + "fullname": "keyword", + } + + result, err := client.TermVectors(testIndexName, "doc"). + Doc(doc). + PerFieldAnalyzer(perFieldAnalyzer). + FieldStatistics(true). + TermStatistics(true). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if result == nil { + t.Fatal("expected to return information and statistics") + } + if !result.Found { + t.Errorf("expected found to be %v; got: %v", true, result.Found) + } +} + +func TestTermVectorsWithFilter(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + // Travis lags sometimes + if isTravis() { + time.Sleep(2 * time.Second) + } + + // TermVectors by specifying Doc + var doc = map[string]interface{}{ + "fullname": "John Doe", + "text": "twitter test test test", + } + var perFieldAnalyzer = map[string]string{ + "fullname": "keyword", + } + + result, err := client.TermVectors(testIndexName, "doc"). + Doc(doc). + PerFieldAnalyzer(perFieldAnalyzer). + FieldStatistics(true). + TermStatistics(true). + Filter(NewTermvectorsFilterSettings().MinTermFreq(1)). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if result == nil { + t.Fatal("expected to return information and statistics") + } + if !result.Found { + t.Errorf("expected found to be %v; got: %v", true, result.Found) + } +} diff --git a/vendor/github.com/olivere/elastic/update.go b/vendor/github.com/olivere/elastic/update.go new file mode 100644 index 0000000..c8ae2af --- /dev/null +++ b/vendor/github.com/olivere/elastic/update.go @@ -0,0 +1,330 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" + "strings" + + "github.com/olivere/elastic/uritemplates" +) + +// UpdateService updates a document in Elasticsearch. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-update.html +// for details. +type UpdateService struct { + client *Client + index string + typ string + id string + routing string + parent string + script *Script + fields []string + fsc *FetchSourceContext + version *int64 + versionType string + retryOnConflict *int + refresh string + waitForActiveShards string + upsert interface{} + scriptedUpsert *bool + docAsUpsert *bool + detectNoop *bool + doc interface{} + timeout string + pretty bool +} + +// NewUpdateService creates the service to update documents in Elasticsearch. +func NewUpdateService(client *Client) *UpdateService { + builder := &UpdateService{ + client: client, + fields: make([]string, 0), + } + return builder +} + +// Index is the name of the Elasticsearch index (required). +func (b *UpdateService) Index(name string) *UpdateService { + b.index = name + return b +} + +// Type is the type of the document (required). +func (b *UpdateService) Type(typ string) *UpdateService { + b.typ = typ + return b +} + +// Id is the identifier of the document to update (required). +func (b *UpdateService) Id(id string) *UpdateService { + b.id = id + return b +} + +// Routing specifies a specific routing value. +func (b *UpdateService) Routing(routing string) *UpdateService { + b.routing = routing + return b +} + +// Parent sets the id of the parent document. +func (b *UpdateService) Parent(parent string) *UpdateService { + b.parent = parent + return b +} + +// Script is the script definition. +func (b *UpdateService) Script(script *Script) *UpdateService { + b.script = script + return b +} + +// RetryOnConflict specifies how many times the operation should be retried +// when a conflict occurs (default: 0). +func (b *UpdateService) RetryOnConflict(retryOnConflict int) *UpdateService { + b.retryOnConflict = &retryOnConflict + return b +} + +// Fields is a list of fields to return in the response. +func (b *UpdateService) Fields(fields ...string) *UpdateService { + b.fields = make([]string, 0, len(fields)) + b.fields = append(b.fields, fields...) + return b +} + +// Version defines the explicit version number for concurrency control. +func (b *UpdateService) Version(version int64) *UpdateService { + b.version = &version + return b +} + +// VersionType is e.g. "internal". +func (b *UpdateService) VersionType(versionType string) *UpdateService { + b.versionType = versionType + return b +} + +// Refresh the index after performing the update. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-refresh.html +// for details. +func (b *UpdateService) Refresh(refresh string) *UpdateService { + b.refresh = refresh + return b +} + +// WaitForActiveShards sets the number of shard copies that must be active before +// proceeding with the update operation. Defaults to 1, meaning the primary shard only. +// Set to `all` for all shard copies, otherwise set to any non-negative value less than +// or equal to the total number of copies for the shard (number of replicas + 1). +func (b *UpdateService) WaitForActiveShards(waitForActiveShards string) *UpdateService { + b.waitForActiveShards = waitForActiveShards + return b +} + +// Doc allows for updating a partial document. +func (b *UpdateService) Doc(doc interface{}) *UpdateService { + b.doc = doc + return b +} + +// Upsert can be used to index the document when it doesn't exist yet. +// Use this e.g. to initialize a document with a default value. +func (b *UpdateService) Upsert(doc interface{}) *UpdateService { + b.upsert = doc + return b +} + +// DocAsUpsert can be used to insert the document if it doesn't already exist. +func (b *UpdateService) DocAsUpsert(docAsUpsert bool) *UpdateService { + b.docAsUpsert = &docAsUpsert + return b +} + +// DetectNoop will instruct Elasticsearch to check if changes will occur +// when updating via Doc. It there aren't any changes, the request will +// turn into a no-op. +func (b *UpdateService) DetectNoop(detectNoop bool) *UpdateService { + b.detectNoop = &detectNoop + return b +} + +// ScriptedUpsert should be set to true if the referenced script +// (defined in Script or ScriptId) should be called to perform an insert. +// The default is false. +func (b *UpdateService) ScriptedUpsert(scriptedUpsert bool) *UpdateService { + b.scriptedUpsert = &scriptedUpsert + return b +} + +// Timeout is an explicit timeout for the operation, e.g. "1000", "1s" or "500ms". +func (b *UpdateService) Timeout(timeout string) *UpdateService { + b.timeout = timeout + return b +} + +// Pretty instructs to return human readable, prettified JSON. +func (b *UpdateService) Pretty(pretty bool) *UpdateService { + b.pretty = pretty + return b +} + +// FetchSource asks Elasticsearch to return the updated _source in the response. +func (s *UpdateService) FetchSource(fetchSource bool) *UpdateService { + if s.fsc == nil { + s.fsc = NewFetchSourceContext(fetchSource) + } else { + s.fsc.SetFetchSource(fetchSource) + } + return s +} + +// FetchSourceContext indicates that _source should be returned in the response, +// allowing wildcard patterns to be defined via FetchSourceContext. +func (s *UpdateService) FetchSourceContext(fetchSourceContext *FetchSourceContext) *UpdateService { + s.fsc = fetchSourceContext + return s +} + +// url returns the URL part of the document request. +func (b *UpdateService) url() (string, url.Values, error) { + // Build url + path := "/{index}/{type}/{id}/_update" + path, err := uritemplates.Expand(path, map[string]string{ + "index": b.index, + "type": b.typ, + "id": b.id, + }) + if err != nil { + return "", url.Values{}, err + } + + // Parameters + params := make(url.Values) + if b.pretty { + params.Set("pretty", "true") + } + if b.routing != "" { + params.Set("routing", b.routing) + } + if b.parent != "" { + params.Set("parent", b.parent) + } + if b.timeout != "" { + params.Set("timeout", b.timeout) + } + if b.refresh != "" { + params.Set("refresh", b.refresh) + } + if b.waitForActiveShards != "" { + params.Set("wait_for_active_shards", b.waitForActiveShards) + } + if len(b.fields) > 0 { + params.Set("fields", strings.Join(b.fields, ",")) + } + if b.version != nil { + params.Set("version", fmt.Sprintf("%d", *b.version)) + } + if b.versionType != "" { + params.Set("version_type", b.versionType) + } + if b.retryOnConflict != nil { + params.Set("retry_on_conflict", fmt.Sprintf("%v", *b.retryOnConflict)) + } + + return path, params, nil +} + +// body returns the body part of the document request. +func (b *UpdateService) body() (interface{}, error) { + source := make(map[string]interface{}) + + if b.script != nil { + src, err := b.script.Source() + if err != nil { + return nil, err + } + source["script"] = src + } + + if b.scriptedUpsert != nil { + source["scripted_upsert"] = *b.scriptedUpsert + } + + if b.upsert != nil { + source["upsert"] = b.upsert + } + + if b.doc != nil { + source["doc"] = b.doc + } + if b.docAsUpsert != nil { + source["doc_as_upsert"] = *b.docAsUpsert + } + if b.detectNoop != nil { + source["detect_noop"] = *b.detectNoop + } + if b.fsc != nil { + src, err := b.fsc.Source() + if err != nil { + return nil, err + } + source["_source"] = src + } + + return source, nil +} + +// Do executes the update operation. +func (b *UpdateService) Do(ctx context.Context) (*UpdateResponse, error) { + path, params, err := b.url() + if err != nil { + return nil, err + } + + // Get body of the request + body, err := b.body() + if err != nil { + return nil, err + } + + // Get response + res, err := b.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + Body: body, + }) + if err != nil { + return nil, err + } + + // Return result + ret := new(UpdateResponse) + if err := b.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// UpdateResponse is the result of updating a document in Elasticsearch. +type UpdateResponse struct { + Index string `json:"_index,omitempty"` + Type string `json:"_type,omitempty"` + Id string `json:"_id,omitempty"` + Version int64 `json:"_version,omitempty"` + Result string `json:"result,omitempty"` + Shards *shardsInfo `json:"_shards,omitempty"` + SeqNo int64 `json:"_seq_no,omitempty"` + PrimaryTerm int64 `json:"_primary_term,omitempty"` + Status int `json:"status,omitempty"` + ForcedRefresh bool `json:"forced_refresh,omitempty"` + GetResult *GetResult `json:"get,omitempty"` +} diff --git a/vendor/github.com/olivere/elastic/update_by_query.go b/vendor/github.com/olivere/elastic/update_by_query.go new file mode 100644 index 0000000..54d5f38 --- /dev/null +++ b/vendor/github.com/olivere/elastic/update_by_query.go @@ -0,0 +1,658 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" + "strings" + + "github.com/olivere/elastic/uritemplates" +) + +// UpdateByQueryService is documented at https://www.elastic.co/guide/en/elasticsearch/plugins/master/plugins-reindex.html. +type UpdateByQueryService struct { + client *Client + pretty bool + index []string + typ []string + script *Script + query Query + body interface{} + xSource []string + xSourceExclude []string + xSourceInclude []string + allowNoIndices *bool + analyzeWildcard *bool + analyzer string + conflicts string + defaultOperator string + docvalueFields []string + df string + expandWildcards string + explain *bool + fielddataFields []string + from *int + ignoreUnavailable *bool + lenient *bool + lowercaseExpandedTerms *bool + pipeline string + preference string + q string + refresh string + requestCache *bool + requestsPerSecond *int + routing []string + scroll string + scrollSize *int + searchTimeout string + searchType string + size *int + sort []string + stats []string + storedFields []string + suggestField string + suggestMode string + suggestSize *int + suggestText string + terminateAfter *int + timeout string + trackScores *bool + version *bool + versionType *bool + waitForActiveShards string + waitForCompletion *bool +} + +// NewUpdateByQueryService creates a new UpdateByQueryService. +func NewUpdateByQueryService(client *Client) *UpdateByQueryService { + return &UpdateByQueryService{ + client: client, + } +} + +// Index is a list of index names to search; use `_all` or empty string to +// perform the operation on all indices. +func (s *UpdateByQueryService) Index(index ...string) *UpdateByQueryService { + s.index = append(s.index, index...) + return s +} + +// Type is a list of document types to search; leave empty to perform +// the operation on all types. +func (s *UpdateByQueryService) Type(typ ...string) *UpdateByQueryService { + s.typ = append(s.typ, typ...) + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *UpdateByQueryService) Pretty(pretty bool) *UpdateByQueryService { + s.pretty = pretty + return s +} + +// Script sets an update script. +func (s *UpdateByQueryService) Script(script *Script) *UpdateByQueryService { + s.script = script + return s +} + +// Body specifies the body of the request. It overrides data being specified via +// SearchService or Script. +func (s *UpdateByQueryService) Body(body string) *UpdateByQueryService { + s.body = body + return s +} + +// XSource is true or false to return the _source field or not, +// or a list of fields to return. +func (s *UpdateByQueryService) XSource(xSource ...string) *UpdateByQueryService { + s.xSource = append(s.xSource, xSource...) + return s +} + +// XSourceExclude represents a list of fields to exclude from the returned _source field. +func (s *UpdateByQueryService) XSourceExclude(xSourceExclude ...string) *UpdateByQueryService { + s.xSourceExclude = append(s.xSourceExclude, xSourceExclude...) + return s +} + +// XSourceInclude represents a list of fields to extract and return from the _source field. +func (s *UpdateByQueryService) XSourceInclude(xSourceInclude ...string) *UpdateByQueryService { + s.xSourceInclude = append(s.xSourceInclude, xSourceInclude...) + return s +} + +// AllowNoIndices indicates whether to ignore if a wildcard indices expression +// resolves into no concrete indices. (This includes `_all` string or when +// no indices have been specified). +func (s *UpdateByQueryService) AllowNoIndices(allowNoIndices bool) *UpdateByQueryService { + s.allowNoIndices = &allowNoIndices + return s +} + +// AnalyzeWildcard specifies whether wildcard and prefix queries should be +// analyzed (default: false). +func (s *UpdateByQueryService) AnalyzeWildcard(analyzeWildcard bool) *UpdateByQueryService { + s.analyzeWildcard = &analyzeWildcard + return s +} + +// Analyzer specifies the analyzer to use for the query string. +func (s *UpdateByQueryService) Analyzer(analyzer string) *UpdateByQueryService { + s.analyzer = analyzer + return s +} + +// Conflicts indicates what to do when the process detects version conflicts. +// Possible values are "proceed" and "abort". +func (s *UpdateByQueryService) Conflicts(conflicts string) *UpdateByQueryService { + s.conflicts = conflicts + return s +} + +// AbortOnVersionConflict aborts the request on version conflicts. +// It is an alias to setting Conflicts("abort"). +func (s *UpdateByQueryService) AbortOnVersionConflict() *UpdateByQueryService { + s.conflicts = "abort" + return s +} + +// ProceedOnVersionConflict aborts the request on version conflicts. +// It is an alias to setting Conflicts("proceed"). +func (s *UpdateByQueryService) ProceedOnVersionConflict() *UpdateByQueryService { + s.conflicts = "proceed" + return s +} + +// DefaultOperator is the default operator for query string query (AND or OR). +func (s *UpdateByQueryService) DefaultOperator(defaultOperator string) *UpdateByQueryService { + s.defaultOperator = defaultOperator + return s +} + +// DF specifies the field to use as default where no field prefix is given in the query string. +func (s *UpdateByQueryService) DF(df string) *UpdateByQueryService { + s.df = df + return s +} + +// DocvalueFields specifies the list of fields to return as the docvalue representation of a field for each hit. +func (s *UpdateByQueryService) DocvalueFields(docvalueFields ...string) *UpdateByQueryService { + s.docvalueFields = docvalueFields + return s +} + +// ExpandWildcards indicates whether to expand wildcard expression to +// concrete indices that are open, closed or both. +func (s *UpdateByQueryService) ExpandWildcards(expandWildcards string) *UpdateByQueryService { + s.expandWildcards = expandWildcards + return s +} + +// Explain specifies whether to return detailed information about score +// computation as part of a hit. +func (s *UpdateByQueryService) Explain(explain bool) *UpdateByQueryService { + s.explain = &explain + return s +} + +// FielddataFields is a list of fields to return as the field data +// representation of a field for each hit. +func (s *UpdateByQueryService) FielddataFields(fielddataFields ...string) *UpdateByQueryService { + s.fielddataFields = append(s.fielddataFields, fielddataFields...) + return s +} + +// From is the starting offset (default: 0). +func (s *UpdateByQueryService) From(from int) *UpdateByQueryService { + s.from = &from + return s +} + +// IgnoreUnavailable indicates whether specified concrete indices should be +// ignored when unavailable (missing or closed). +func (s *UpdateByQueryService) IgnoreUnavailable(ignoreUnavailable bool) *UpdateByQueryService { + s.ignoreUnavailable = &ignoreUnavailable + return s +} + +// Lenient specifies whether format-based query failures +// (such as providing text to a numeric field) should be ignored. +func (s *UpdateByQueryService) Lenient(lenient bool) *UpdateByQueryService { + s.lenient = &lenient + return s +} + +// LowercaseExpandedTerms specifies whether query terms should be lowercased. +func (s *UpdateByQueryService) LowercaseExpandedTerms(lowercaseExpandedTerms bool) *UpdateByQueryService { + s.lowercaseExpandedTerms = &lowercaseExpandedTerms + return s +} + +// Pipeline specifies the ingest pipeline to set on index requests made by this action (default: none). +func (s *UpdateByQueryService) Pipeline(pipeline string) *UpdateByQueryService { + s.pipeline = pipeline + return s +} + +// Preference specifies the node or shard the operation should be performed on +// (default: random). +func (s *UpdateByQueryService) Preference(preference string) *UpdateByQueryService { + s.preference = preference + return s +} + +// Q specifies the query in the Lucene query string syntax. +func (s *UpdateByQueryService) Q(q string) *UpdateByQueryService { + s.q = q + return s +} + +// Query sets a query definition using the Query DSL. +func (s *UpdateByQueryService) Query(query Query) *UpdateByQueryService { + s.query = query + return s +} + +// Refresh indicates whether the effected indexes should be refreshed. +// +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-refresh.html +// for details. +func (s *UpdateByQueryService) Refresh(refresh string) *UpdateByQueryService { + s.refresh = refresh + return s +} + +// RequestCache specifies if request cache should be used for this request +// or not, defaults to index level setting. +func (s *UpdateByQueryService) RequestCache(requestCache bool) *UpdateByQueryService { + s.requestCache = &requestCache + return s +} + +// RequestsPerSecond sets the throttle on this request in sub-requests per second. +// -1 means set no throttle as does "unlimited" which is the only non-float this accepts. +func (s *UpdateByQueryService) RequestsPerSecond(requestsPerSecond int) *UpdateByQueryService { + s.requestsPerSecond = &requestsPerSecond + return s +} + +// Routing is a list of specific routing values. +func (s *UpdateByQueryService) Routing(routing ...string) *UpdateByQueryService { + s.routing = append(s.routing, routing...) + return s +} + +// Scroll specifies how long a consistent view of the index should be maintained +// for scrolled search. +func (s *UpdateByQueryService) Scroll(scroll string) *UpdateByQueryService { + s.scroll = scroll + return s +} + +// ScrollSize is the size on the scroll request powering the update_by_query. +func (s *UpdateByQueryService) ScrollSize(scrollSize int) *UpdateByQueryService { + s.scrollSize = &scrollSize + return s +} + +// SearchTimeout defines an explicit timeout for each search request. +// Defaults to no timeout. +func (s *UpdateByQueryService) SearchTimeout(searchTimeout string) *UpdateByQueryService { + s.searchTimeout = searchTimeout + return s +} + +// SearchType is the search operation type. Possible values are +// "query_then_fetch" and "dfs_query_then_fetch". +func (s *UpdateByQueryService) SearchType(searchType string) *UpdateByQueryService { + s.searchType = searchType + return s +} + +// Size represents the number of hits to return (default: 10). +func (s *UpdateByQueryService) Size(size int) *UpdateByQueryService { + s.size = &size + return s +} + +// Sort is a list of : pairs. +func (s *UpdateByQueryService) Sort(sort ...string) *UpdateByQueryService { + s.sort = append(s.sort, sort...) + return s +} + +// SortByField adds a sort order. +func (s *UpdateByQueryService) SortByField(field string, ascending bool) *UpdateByQueryService { + if ascending { + s.sort = append(s.sort, fmt.Sprintf("%s:asc", field)) + } else { + s.sort = append(s.sort, fmt.Sprintf("%s:desc", field)) + } + return s +} + +// Stats specifies specific tag(s) of the request for logging and statistical purposes. +func (s *UpdateByQueryService) Stats(stats ...string) *UpdateByQueryService { + s.stats = append(s.stats, stats...) + return s +} + +// StoredFields specifies the list of stored fields to return as part of a hit. +func (s *UpdateByQueryService) StoredFields(storedFields ...string) *UpdateByQueryService { + s.storedFields = storedFields + return s +} + +// SuggestField specifies which field to use for suggestions. +func (s *UpdateByQueryService) SuggestField(suggestField string) *UpdateByQueryService { + s.suggestField = suggestField + return s +} + +// SuggestMode specifies the suggest mode. Possible values are +// "missing", "popular", and "always". +func (s *UpdateByQueryService) SuggestMode(suggestMode string) *UpdateByQueryService { + s.suggestMode = suggestMode + return s +} + +// SuggestSize specifies how many suggestions to return in response. +func (s *UpdateByQueryService) SuggestSize(suggestSize int) *UpdateByQueryService { + s.suggestSize = &suggestSize + return s +} + +// SuggestText specifies the source text for which the suggestions should be returned. +func (s *UpdateByQueryService) SuggestText(suggestText string) *UpdateByQueryService { + s.suggestText = suggestText + return s +} + +// TerminateAfter indicates the maximum number of documents to collect +// for each shard, upon reaching which the query execution will terminate early. +func (s *UpdateByQueryService) TerminateAfter(terminateAfter int) *UpdateByQueryService { + s.terminateAfter = &terminateAfter + return s +} + +// Timeout is the time each individual bulk request should wait for shards +// that are unavailable. +func (s *UpdateByQueryService) Timeout(timeout string) *UpdateByQueryService { + s.timeout = timeout + return s +} + +// TimeoutInMillis sets the timeout in milliseconds. +func (s *UpdateByQueryService) TimeoutInMillis(timeoutInMillis int) *UpdateByQueryService { + s.timeout = fmt.Sprintf("%dms", timeoutInMillis) + return s +} + +// TrackScores indicates whether to calculate and return scores even if +// they are not used for sorting. +func (s *UpdateByQueryService) TrackScores(trackScores bool) *UpdateByQueryService { + s.trackScores = &trackScores + return s +} + +// Version specifies whether to return document version as part of a hit. +func (s *UpdateByQueryService) Version(version bool) *UpdateByQueryService { + s.version = &version + return s +} + +// VersionType indicates if the document increment the version number (internal) +// on hit or not (reindex). +func (s *UpdateByQueryService) VersionType(versionType bool) *UpdateByQueryService { + s.versionType = &versionType + return s +} + +// WaitForActiveShards sets the number of shard copies that must be active before proceeding +// with the update by query operation. Defaults to 1, meaning the primary shard only. +// Set to `all` for all shard copies, otherwise set to any non-negative value less than or equal +// to the total number of copies for the shard (number of replicas + 1). +func (s *UpdateByQueryService) WaitForActiveShards(waitForActiveShards string) *UpdateByQueryService { + s.waitForActiveShards = waitForActiveShards + return s +} + +// WaitForCompletion indicates if the request should block until the reindex is complete. +func (s *UpdateByQueryService) WaitForCompletion(waitForCompletion bool) *UpdateByQueryService { + s.waitForCompletion = &waitForCompletion + return s +} + +// buildURL builds the URL for the operation. +func (s *UpdateByQueryService) buildURL() (string, url.Values, error) { + // Build URL + var err error + var path string + if len(s.typ) > 0 { + path, err = uritemplates.Expand("/{index}/{type}/_update_by_query", map[string]string{ + "index": strings.Join(s.index, ","), + "type": strings.Join(s.typ, ","), + }) + } else { + path, err = uritemplates.Expand("/{index}/_update_by_query", map[string]string{ + "index": strings.Join(s.index, ","), + }) + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if len(s.xSource) > 0 { + params.Set("_source", strings.Join(s.xSource, ",")) + } + if len(s.xSourceExclude) > 0 { + params.Set("_source_exclude", strings.Join(s.xSourceExclude, ",")) + } + if len(s.xSourceInclude) > 0 { + params.Set("_source_include", strings.Join(s.xSourceInclude, ",")) + } + if s.allowNoIndices != nil { + params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) + } + if s.analyzer != "" { + params.Set("analyzer", s.analyzer) + } + if s.analyzeWildcard != nil { + params.Set("analyze_wildcard", fmt.Sprintf("%v", *s.analyzeWildcard)) + } + if s.conflicts != "" { + params.Set("conflicts", s.conflicts) + } + if s.defaultOperator != "" { + params.Set("default_operator", s.defaultOperator) + } + if s.df != "" { + params.Set("df", s.df) + } + if s.expandWildcards != "" { + params.Set("expand_wildcards", s.expandWildcards) + } + if s.explain != nil { + params.Set("explain", fmt.Sprintf("%v", *s.explain)) + } + if len(s.storedFields) > 0 { + params.Set("stored_fields", strings.Join(s.storedFields, ",")) + } + if len(s.docvalueFields) > 0 { + params.Set("docvalue_fields", strings.Join(s.docvalueFields, ",")) + } + if len(s.fielddataFields) > 0 { + params.Set("fielddata_fields", strings.Join(s.fielddataFields, ",")) + } + if s.from != nil { + params.Set("from", fmt.Sprintf("%d", *s.from)) + } + if s.ignoreUnavailable != nil { + params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) + } + if s.lenient != nil { + params.Set("lenient", fmt.Sprintf("%v", *s.lenient)) + } + if s.lowercaseExpandedTerms != nil { + params.Set("lowercase_expanded_terms", fmt.Sprintf("%v", *s.lowercaseExpandedTerms)) + } + if s.pipeline != "" { + params.Set("pipeline", s.pipeline) + } + if s.preference != "" { + params.Set("preference", s.preference) + } + if s.q != "" { + params.Set("q", s.q) + } + if s.refresh != "" { + params.Set("refresh", s.refresh) + } + if s.requestCache != nil { + params.Set("request_cache", fmt.Sprintf("%v", *s.requestCache)) + } + if len(s.routing) > 0 { + params.Set("routing", strings.Join(s.routing, ",")) + } + if s.scroll != "" { + params.Set("scroll", s.scroll) + } + if s.scrollSize != nil { + params.Set("scroll_size", fmt.Sprintf("%d", *s.scrollSize)) + } + if s.searchTimeout != "" { + params.Set("search_timeout", s.searchTimeout) + } + if s.searchType != "" { + params.Set("search_type", s.searchType) + } + if s.size != nil { + params.Set("size", fmt.Sprintf("%d", *s.size)) + } + if len(s.sort) > 0 { + params.Set("sort", strings.Join(s.sort, ",")) + } + if len(s.stats) > 0 { + params.Set("stats", strings.Join(s.stats, ",")) + } + if s.suggestField != "" { + params.Set("suggest_field", s.suggestField) + } + if s.suggestMode != "" { + params.Set("suggest_mode", s.suggestMode) + } + if s.suggestSize != nil { + params.Set("suggest_size", fmt.Sprintf("%v", *s.suggestSize)) + } + if s.suggestText != "" { + params.Set("suggest_text", s.suggestText) + } + if s.terminateAfter != nil { + params.Set("terminate_after", fmt.Sprintf("%v", *s.terminateAfter)) + } + if s.timeout != "" { + params.Set("timeout", s.timeout) + } + if s.trackScores != nil { + params.Set("track_scores", fmt.Sprintf("%v", *s.trackScores)) + } + if s.version != nil { + params.Set("version", fmt.Sprintf("%v", *s.version)) + } + if s.versionType != nil { + params.Set("version_type", fmt.Sprintf("%v", *s.versionType)) + } + if s.waitForActiveShards != "" { + params.Set("wait_for_active_shards", s.waitForActiveShards) + } + if s.waitForCompletion != nil { + params.Set("wait_for_completion", fmt.Sprintf("%v", *s.waitForCompletion)) + } + if s.requestsPerSecond != nil { + params.Set("requests_per_second", fmt.Sprintf("%v", *s.requestsPerSecond)) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *UpdateByQueryService) Validate() error { + var invalid []string + if len(s.index) == 0 { + invalid = append(invalid, "Index") + } + if len(invalid) > 0 { + return fmt.Errorf("missing required fields: %v", invalid) + } + return nil +} + +// getBody returns the body part of the document request. +func (s *UpdateByQueryService) getBody() (interface{}, error) { + if s.body != nil { + return s.body, nil + } + source := make(map[string]interface{}) + if s.script != nil { + src, err := s.script.Source() + if err != nil { + return nil, err + } + source["script"] = src + } + if s.query != nil { + src, err := s.query.Source() + if err != nil { + return nil, err + } + source["query"] = src + } + return source, nil +} + +// Do executes the operation. +func (s *UpdateByQueryService) Do(ctx context.Context) (*BulkIndexByScrollResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Setup HTTP request body + body, err := s.getBody() + if err != nil { + return nil, err + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "POST", + Path: path, + Params: params, + Body: body, + }) + if err != nil { + return nil, err + } + + // Return operation response (BulkIndexByScrollResponse is defined in DeleteByQuery) + ret := new(BulkIndexByScrollResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} diff --git a/vendor/github.com/olivere/elastic/update_by_query_test.go b/vendor/github.com/olivere/elastic/update_by_query_test.go new file mode 100644 index 0000000..fde924d --- /dev/null +++ b/vendor/github.com/olivere/elastic/update_by_query_test.go @@ -0,0 +1,147 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "testing" +) + +func TestUpdateByQueryBuildURL(t *testing.T) { + client := setupTestClient(t) + + tests := []struct { + Indices []string + Types []string + Expected string + ExpectErr bool + }{ + { + []string{}, + []string{}, + "", + true, + }, + { + []string{"index1"}, + []string{}, + "/index1/_update_by_query", + false, + }, + { + []string{"index1", "index2"}, + []string{}, + "/index1%2Cindex2/_update_by_query", + false, + }, + { + []string{}, + []string{"type1"}, + "", + true, + }, + { + []string{"index1"}, + []string{"type1"}, + "/index1/type1/_update_by_query", + false, + }, + { + []string{"index1", "index2"}, + []string{"type1", "type2"}, + "/index1%2Cindex2/type1%2Ctype2/_update_by_query", + false, + }, + } + + for i, test := range tests { + builder := client.UpdateByQuery().Index(test.Indices...).Type(test.Types...) + err := builder.Validate() + if err != nil { + if !test.ExpectErr { + t.Errorf("case #%d: %v", i+1, err) + continue + } + } else { + // err == nil + if test.ExpectErr { + t.Errorf("case #%d: expected error", i+1) + continue + } + path, _, _ := builder.buildURL() + if path != test.Expected { + t.Errorf("case #%d: expected %q; got: %q", i+1, test.Expected, path) + } + } + } +} + +func TestUpdateByQueryBodyWithQuery(t *testing.T) { + client := setupTestClient(t) + out, err := client.UpdateByQuery().Query(NewTermQuery("user", "olivere")).getBody() + if err != nil { + t.Fatal(err) + } + b, err := json.Marshal(out) + if err != nil { + t.Fatal(err) + } + got := string(b) + want := `{"query":{"term":{"user":"olivere"}}}` + if got != want { + t.Fatalf("\ngot %s\nwant %s", got, want) + } +} + +func TestUpdateByQueryBodyWithQueryAndScript(t *testing.T) { + client := setupTestClient(t) + out, err := client.UpdateByQuery(). + Query(NewTermQuery("user", "olivere")). + Script(NewScriptInline("ctx._source.likes++")). + getBody() + if err != nil { + t.Fatal(err) + } + b, err := json.Marshal(out) + if err != nil { + t.Fatal(err) + } + got := string(b) + want := `{"query":{"term":{"user":"olivere"}},"script":{"source":"ctx._source.likes++"}}` + if got != want { + t.Fatalf("\ngot %s\nwant %s", got, want) + } +} + +func TestUpdateByQuery(t *testing.T) { + client := setupTestClientAndCreateIndexAndAddDocs(t) //, SetTraceLog(log.New(os.Stdout, "", 0))) + esversion, err := client.ElasticsearchVersion(DefaultURL) + if err != nil { + t.Fatal(err) + } + if esversion < "2.3.0" { + t.Skipf("Elasticsearch %v does not support update-by-query yet", esversion) + } + + sourceCount, err := client.Count(testIndexName).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if sourceCount <= 0 { + t.Fatalf("expected more than %d documents; got: %d", 0, sourceCount) + } + + res, err := client.UpdateByQuery(testIndexName).ProceedOnVersionConflict().Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if res == nil { + t.Fatal("response is nil") + } + if res.Updated != sourceCount { + t.Fatalf("expected %d; got: %d", sourceCount, res.Updated) + } +} diff --git a/vendor/github.com/olivere/elastic/update_integration_test.go b/vendor/github.com/olivere/elastic/update_integration_test.go new file mode 100644 index 0000000..f369252 --- /dev/null +++ b/vendor/github.com/olivere/elastic/update_integration_test.go @@ -0,0 +1,58 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "testing" +) + +func TestUpdateWithScript(t *testing.T) { + client := setupTestClientAndCreateIndexAndAddDocs(t) // , SetTraceLog(log.New(os.Stdout, "", 0))) + + // Get original + getRes, err := client.Get().Index(testIndexName).Type("doc").Id("1").Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + var original tweet + if err := json.Unmarshal(*getRes.Source, &original); err != nil { + t.Fatal(err) + } + + // Update with script + updRes, err := client.Update().Index(testIndexName).Type("doc").Id("1"). + Script( + NewScript(`ctx._source.message = "Updated message text."`).Lang("painless"), + ). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if updRes == nil { + t.Fatal("response is nil") + } + if want, have := "updated", updRes.Result; want != have { + t.Fatalf("want Result = %q, have %v", want, have) + } + + // Get new version + getRes, err = client.Get().Index(testIndexName).Type("doc").Id("1").Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + var updated tweet + if err := json.Unmarshal(*getRes.Source, &updated); err != nil { + t.Fatal(err) + } + + if want, have := original.User, updated.User; want != have { + t.Fatalf("want User = %q, have %v", want, have) + } + if want, have := "Updated message text.", updated.Message; want != have { + t.Fatalf("want Message = %q, have %v", want, have) + } +} diff --git a/vendor/github.com/olivere/elastic/update_test.go b/vendor/github.com/olivere/elastic/update_test.go new file mode 100644 index 0000000..1f04ced --- /dev/null +++ b/vendor/github.com/olivere/elastic/update_test.go @@ -0,0 +1,262 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "encoding/json" + "net/url" + "testing" +) + +func TestUpdateViaScript(t *testing.T) { + client := setupTestClient(t) // , SetTraceLog(log.New(os.Stdout, "", 0))) + + update := client.Update(). + Index("test").Type("type1").Id("1"). + Script(NewScript("ctx._source.tags += tag").Params(map[string]interface{}{"tag": "blue"}).Lang("groovy")) + path, params, err := update.url() + if err != nil { + t.Fatalf("expected to return URL, got: %v", err) + } + expectedPath := `/test/type1/1/_update` + if expectedPath != path { + t.Errorf("expected URL path\n%s\ngot:\n%s", expectedPath, path) + } + expectedParams := url.Values{} + if expectedParams.Encode() != params.Encode() { + t.Errorf("expected URL parameters\n%s\ngot:\n%s", expectedParams.Encode(), params.Encode()) + } + body, err := update.body() + if err != nil { + t.Fatalf("expected to return body, got: %v", err) + } + data, err := json.Marshal(body) + if err != nil { + t.Fatalf("expected to marshal body as JSON, got: %v", err) + } + got := string(data) + expected := `{"script":{"lang":"groovy","params":{"tag":"blue"},"source":"ctx._source.tags += tag"}}` + if got != expected { + t.Errorf("expected\n%s\ngot:\n%s", expected, got) + } +} + +func TestUpdateViaScriptId(t *testing.T) { + client := setupTestClient(t) // , SetTraceLog(log.New(os.Stdout, "", 0))) + + scriptParams := map[string]interface{}{ + "pageViewEvent": map[string]interface{}{ + "url": "foo.com/bar", + "response": 404, + "time": "2014-01-01 12:32", + }, + } + script := NewScriptStored("my_web_session_summariser").Params(scriptParams) + + update := client.Update(). + Index("sessions").Type("session").Id("dh3sgudg8gsrgl"). + Script(script). + ScriptedUpsert(true). + Upsert(map[string]interface{}{}) + path, params, err := update.url() + if err != nil { + t.Fatalf("expected to return URL, got: %v", err) + } + expectedPath := `/sessions/session/dh3sgudg8gsrgl/_update` + if expectedPath != path { + t.Errorf("expected URL path\n%s\ngot:\n%s", expectedPath, path) + } + expectedParams := url.Values{} + if expectedParams.Encode() != params.Encode() { + t.Errorf("expected URL parameters\n%s\ngot:\n%s", expectedParams.Encode(), params.Encode()) + } + body, err := update.body() + if err != nil { + t.Fatalf("expected to return body, got: %v", err) + } + data, err := json.Marshal(body) + if err != nil { + t.Fatalf("expected to marshal body as JSON, got: %v", err) + } + got := string(data) + expected := `{"script":{"id":"my_web_session_summariser","params":{"pageViewEvent":{"response":404,"time":"2014-01-01 12:32","url":"foo.com/bar"}}},"scripted_upsert":true,"upsert":{}}` + if got != expected { + t.Errorf("expected\n%s\ngot:\n%s", expected, got) + } +} + +func TestUpdateViaScriptAndUpsert(t *testing.T) { + client := setupTestClient(t) // , SetTraceLog(log.New(os.Stdout, "", 0))) + + update := client.Update(). + Index("test").Type("type1").Id("1"). + Script(NewScript("ctx._source.counter += count").Params(map[string]interface{}{"count": 4})). + Upsert(map[string]interface{}{"counter": 1}) + path, params, err := update.url() + if err != nil { + t.Fatalf("expected to return URL, got: %v", err) + } + expectedPath := `/test/type1/1/_update` + if expectedPath != path { + t.Errorf("expected URL path\n%s\ngot:\n%s", expectedPath, path) + } + expectedParams := url.Values{} + if expectedParams.Encode() != params.Encode() { + t.Errorf("expected URL parameters\n%s\ngot:\n%s", expectedParams.Encode(), params.Encode()) + } + body, err := update.body() + if err != nil { + t.Fatalf("expected to return body, got: %v", err) + } + data, err := json.Marshal(body) + if err != nil { + t.Fatalf("expected to marshal body as JSON, got: %v", err) + } + got := string(data) + expected := `{"script":{"params":{"count":4},"source":"ctx._source.counter += count"},"upsert":{"counter":1}}` + if got != expected { + t.Errorf("expected\n%s\ngot:\n%s", expected, got) + } +} + +func TestUpdateViaDoc(t *testing.T) { + client := setupTestClient(t) // , SetTraceLog(log.New(os.Stdout, "", 0))) + + update := client.Update(). + Index("test").Type("type1").Id("1"). + Doc(map[string]interface{}{"name": "new_name"}). + DetectNoop(true) + path, params, err := update.url() + if err != nil { + t.Fatalf("expected to return URL, got: %v", err) + } + expectedPath := `/test/type1/1/_update` + if expectedPath != path { + t.Errorf("expected URL path\n%s\ngot:\n%s", expectedPath, path) + } + expectedParams := url.Values{} + if expectedParams.Encode() != params.Encode() { + t.Errorf("expected URL parameters\n%s\ngot:\n%s", expectedParams.Encode(), params.Encode()) + } + body, err := update.body() + if err != nil { + t.Fatalf("expected to return body, got: %v", err) + } + data, err := json.Marshal(body) + if err != nil { + t.Fatalf("expected to marshal body as JSON, got: %v", err) + } + got := string(data) + expected := `{"detect_noop":true,"doc":{"name":"new_name"}}` + if got != expected { + t.Errorf("expected\n%s\ngot:\n%s", expected, got) + } +} + +func TestUpdateViaDocAndUpsert(t *testing.T) { + client := setupTestClient(t) // , SetTraceLog(log.New(os.Stdout, "", 0))) + + update := client.Update(). + Index("test").Type("type1").Id("1"). + Doc(map[string]interface{}{"name": "new_name"}). + DocAsUpsert(true). + Timeout("1s"). + Refresh("true") + path, params, err := update.url() + if err != nil { + t.Fatalf("expected to return URL, got: %v", err) + } + expectedPath := `/test/type1/1/_update` + if expectedPath != path { + t.Errorf("expected URL path\n%s\ngot:\n%s", expectedPath, path) + } + expectedParams := url.Values{"refresh": []string{"true"}, "timeout": []string{"1s"}} + if expectedParams.Encode() != params.Encode() { + t.Errorf("expected URL parameters\n%s\ngot:\n%s", expectedParams.Encode(), params.Encode()) + } + body, err := update.body() + if err != nil { + t.Fatalf("expected to return body, got: %v", err) + } + data, err := json.Marshal(body) + if err != nil { + t.Fatalf("expected to marshal body as JSON, got: %v", err) + } + got := string(data) + expected := `{"doc":{"name":"new_name"},"doc_as_upsert":true}` + if got != expected { + t.Errorf("expected\n%s\ngot:\n%s", expected, got) + } +} + +func TestUpdateViaDocAndUpsertAndFetchSource(t *testing.T) { + client := setupTestClient(t) // , SetTraceLog(log.New(os.Stdout, "", 0))) + + update := client.Update(). + Index("test").Type("type1").Id("1"). + Doc(map[string]interface{}{"name": "new_name"}). + DocAsUpsert(true). + Timeout("1s"). + Refresh("true"). + FetchSource(true) + path, params, err := update.url() + if err != nil { + t.Fatalf("expected to return URL, got: %v", err) + } + expectedPath := `/test/type1/1/_update` + if expectedPath != path { + t.Errorf("expected URL path\n%s\ngot:\n%s", expectedPath, path) + } + expectedParams := url.Values{ + "refresh": []string{"true"}, + "timeout": []string{"1s"}, + } + if expectedParams.Encode() != params.Encode() { + t.Errorf("expected URL parameters\n%s\ngot:\n%s", expectedParams.Encode(), params.Encode()) + } + body, err := update.body() + if err != nil { + t.Fatalf("expected to return body, got: %v", err) + } + data, err := json.Marshal(body) + if err != nil { + t.Fatalf("expected to marshal body as JSON, got: %v", err) + } + got := string(data) + expected := `{"_source":true,"doc":{"name":"new_name"},"doc_as_upsert":true}` + if got != expected { + t.Errorf("expected\n%s\ngot:\n%s", expected, got) + } +} + +func TestUpdateAndFetchSource(t *testing.T) { + client := setupTestClientAndCreateIndexAndAddDocs(t) // , SetTraceLog(log.New(os.Stdout, "", 0))) + + res, err := client.Update(). + Index(testIndexName).Type("doc").Id("1"). + Doc(map[string]interface{}{"user": "sandrae"}). + DetectNoop(true). + FetchSource(true). + Do(context.Background()) + if err != nil { + t.Fatal(err) + } + if res == nil { + t.Fatal("expected response != nil") + } + if res.GetResult == nil { + t.Fatal("expected GetResult != nil") + } + data, err := json.Marshal(res.GetResult.Source) + if err != nil { + t.Fatalf("expected to marshal body as JSON, got: %v", err) + } + got := string(data) + expected := `{"user":"sandrae","message":"Welcome to Golang and Elasticsearch.","retweets":0,"created":"0001-01-01T00:00:00Z"}` + if got != expected { + t.Errorf("expected\n%s\ngot:\n%s", expected, got) + } +} diff --git a/vendor/gopkg.in/olivere/elastic.v2/uritemplates/LICENSE b/vendor/github.com/olivere/elastic/uritemplates/LICENSE similarity index 100% rename from vendor/gopkg.in/olivere/elastic.v2/uritemplates/LICENSE rename to vendor/github.com/olivere/elastic/uritemplates/LICENSE diff --git a/vendor/gopkg.in/olivere/elastic.v2/uritemplates/uritemplates.go b/vendor/github.com/olivere/elastic/uritemplates/uritemplates.go similarity index 100% rename from vendor/gopkg.in/olivere/elastic.v2/uritemplates/uritemplates.go rename to vendor/github.com/olivere/elastic/uritemplates/uritemplates.go diff --git a/vendor/gopkg.in/olivere/elastic.v2/uritemplates/utils.go b/vendor/github.com/olivere/elastic/uritemplates/utils.go similarity index 100% rename from vendor/gopkg.in/olivere/elastic.v2/uritemplates/utils.go rename to vendor/github.com/olivere/elastic/uritemplates/utils.go diff --git a/vendor/gopkg.in/olivere/elastic.v2/uritemplates/utils_test.go b/vendor/github.com/olivere/elastic/uritemplates/utils_test.go similarity index 100% rename from vendor/gopkg.in/olivere/elastic.v2/uritemplates/utils_test.go rename to vendor/github.com/olivere/elastic/uritemplates/utils_test.go diff --git a/vendor/github.com/olivere/elastic/validate.go b/vendor/github.com/olivere/elastic/validate.go new file mode 100644 index 0000000..b232963 --- /dev/null +++ b/vendor/github.com/olivere/elastic/validate.go @@ -0,0 +1,285 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "fmt" + "net/url" + "strings" + + "github.com/olivere/elastic/uritemplates" +) + +// ValidateService allows a user to validate a potentially +// expensive query without executing it. +// See https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-validate.html. +type ValidateService struct { + client *Client + pretty bool + index []string + typ []string + q string + explain *bool + rewrite *bool + allShards *bool + lenient *bool + analyzer string + df string + analyzeWildcard *bool + defaultOperator string + ignoreUnavailable *bool + allowNoIndices *bool + expandWildcards string + bodyJson interface{} + bodyString string +} + +// NewValidateService creates a new ValidateService. +func NewValidateService(client *Client) *ValidateService { + return &ValidateService{ + client: client, + } +} + +// Index sets the names of the indices to use for search. +func (s *ValidateService) Index(index ...string) *ValidateService { + s.index = append(s.index, index...) + return s +} + +// Types adds search restrictions for a list of types. +func (s *ValidateService) Type(typ ...string) *ValidateService { + s.typ = append(s.typ, typ...) + return s +} + +// Lenient specifies whether format-based query failures +// (such as providing text to a numeric field) should be ignored. +func (s *ValidateService) Lenient(lenient bool) *ValidateService { + s.lenient = &lenient + return s +} + +// Query in the Lucene query string syntax. +func (s *ValidateService) Q(q string) *ValidateService { + s.q = q + return s +} + +// An explain parameter can be specified to get more detailed information about why a query failed. +func (s *ValidateService) Explain(explain *bool) *ValidateService { + s.explain = explain + return s +} + +// Provide a more detailed explanation showing the actual Lucene query that will be executed. +func (s *ValidateService) Rewrite(rewrite *bool) *ValidateService { + s.rewrite = rewrite + return s +} + +// Execute validation on all shards instead of one random shard per index. +func (s *ValidateService) AllShards(allShards *bool) *ValidateService { + s.allShards = allShards + return s +} + +// AnalyzeWildcard specifies whether wildcards and prefix queries +// in the query string query should be analyzed (default: false). +func (s *ValidateService) AnalyzeWildcard(analyzeWildcard bool) *ValidateService { + s.analyzeWildcard = &analyzeWildcard + return s +} + +// Analyzer is the analyzer for the query string query. +func (s *ValidateService) Analyzer(analyzer string) *ValidateService { + s.analyzer = analyzer + return s +} + +// Df is the default field for query string query (default: _all). +func (s *ValidateService) Df(df string) *ValidateService { + s.df = df + return s +} + +// DefaultOperator is the default operator for query string query (AND or OR). +func (s *ValidateService) DefaultOperator(defaultOperator string) *ValidateService { + s.defaultOperator = defaultOperator + return s +} + +// Pretty indicates that the JSON response be indented and human readable. +func (s *ValidateService) Pretty(pretty bool) *ValidateService { + s.pretty = pretty + return s +} + +// Query sets a query definition using the Query DSL. +func (s *ValidateService) Query(query Query) *ValidateService { + src, err := query.Source() + if err != nil { + // Do nothing in case of an error + return s + } + body := make(map[string]interface{}) + body["query"] = src + s.bodyJson = body + return s +} + +// IgnoreUnavailable indicates whether the specified concrete indices +// should be ignored when unavailable (missing or closed). +func (s *ValidateService) IgnoreUnavailable(ignoreUnavailable bool) *ValidateService { + s.ignoreUnavailable = &ignoreUnavailable + return s +} + +// AllowNoIndices indicates whether to ignore if a wildcard indices +// expression resolves into no concrete indices. (This includes `_all` string +// or when no indices have been specified). +func (s *ValidateService) AllowNoIndices(allowNoIndices bool) *ValidateService { + s.allowNoIndices = &allowNoIndices + return s +} + +// ExpandWildcards indicates whether to expand wildcard expression to +// concrete indices that are open, closed or both. +func (s *ValidateService) ExpandWildcards(expandWildcards string) *ValidateService { + s.expandWildcards = expandWildcards + return s +} + +// BodyJson sets the query definition using the Query DSL. +func (s *ValidateService) BodyJson(body interface{}) *ValidateService { + s.bodyJson = body + return s +} + +// BodyString sets the query definition using the Query DSL as a string. +func (s *ValidateService) BodyString(body string) *ValidateService { + s.bodyString = body + return s +} + +// buildURL builds the URL for the operation. +func (s *ValidateService) buildURL() (string, url.Values, error) { + var err error + var path string + // Build URL + if len(s.index) > 0 && len(s.typ) > 0 { + path, err = uritemplates.Expand("/{index}/{type}/_validate/query", map[string]string{ + "index": strings.Join(s.index, ","), + "type": strings.Join(s.typ, ","), + }) + } else if len(s.index) > 0 { + path, err = uritemplates.Expand("/{index}/_validate/query", map[string]string{ + "index": strings.Join(s.index, ","), + }) + } else { + path, err = uritemplates.Expand("/_validate/query", map[string]string{ + "type": strings.Join(s.typ, ","), + }) + } + if err != nil { + return "", url.Values{}, err + } + + // Add query string parameters + params := url.Values{} + if s.pretty { + params.Set("pretty", "true") + } + if s.explain != nil { + params.Set("explain", fmt.Sprintf("%v", *s.explain)) + } + if s.rewrite != nil { + params.Set("rewrite", fmt.Sprintf("%v", *s.rewrite)) + } + if s.allShards != nil { + params.Set("all_shards", fmt.Sprintf("%v", *s.allShards)) + } + if s.defaultOperator != "" { + params.Set("default_operator", s.defaultOperator) + } + if s.lenient != nil { + params.Set("lenient", fmt.Sprintf("%v", *s.lenient)) + } + if s.q != "" { + params.Set("q", s.q) + } + if s.analyzeWildcard != nil { + params.Set("analyze_wildcard", fmt.Sprintf("%v", *s.analyzeWildcard)) + } + if s.analyzer != "" { + params.Set("analyzer", s.analyzer) + } + if s.df != "" { + params.Set("df", s.df) + } + if s.allowNoIndices != nil { + params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) + } + if s.expandWildcards != "" { + params.Set("expand_wildcards", s.expandWildcards) + } + if s.ignoreUnavailable != nil { + params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) + } + return path, params, nil +} + +// Validate checks if the operation is valid. +func (s *ValidateService) Validate() error { + return nil +} + +// Do executes the operation. +func (s *ValidateService) Do(ctx context.Context) (*ValidateResponse, error) { + // Check pre-conditions + if err := s.Validate(); err != nil { + return nil, err + } + + // Get URL for request + path, params, err := s.buildURL() + if err != nil { + return nil, err + } + + // Setup HTTP request body + var body interface{} + if s.bodyJson != nil { + body = s.bodyJson + } else { + body = s.bodyString + } + + // Get HTTP response + res, err := s.client.PerformRequest(ctx, PerformRequestOptions{ + Method: "GET", + Path: path, + Params: params, + Body: body, + }) + if err != nil { + return nil, err + } + + // Return operation response + ret := new(ValidateResponse) + if err := s.client.decoder.Decode(res.Body, ret); err != nil { + return nil, err + } + return ret, nil +} + +// ValidateResponse is the response of ValidateService.Do. +type ValidateResponse struct { + Valid bool `json:"valid"` + Shards map[string]interface{} `json:"_shards"` + Explanations []interface{} `json:"explanations"` +} diff --git a/vendor/github.com/olivere/elastic/validate_test.go b/vendor/github.com/olivere/elastic/validate_test.go new file mode 100644 index 0000000..764f357 --- /dev/null +++ b/vendor/github.com/olivere/elastic/validate_test.go @@ -0,0 +1,55 @@ +// Copyright 2012-present Oliver Eilhard. All rights reserved. +// Use of this source code is governed by a MIT-license. +// See http://olivere.mit-license.org/license.txt for details. + +package elastic + +import ( + "context" + "testing" +) + +func TestValidate(t *testing.T) { + client := setupTestClientAndCreateIndex(t) + + tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} + + // Add a document + indexResult, err := client.Index(). + Index(testIndexName). + Type("doc"). + BodyJson(&tweet1). + Refresh("true"). + Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if indexResult == nil { + t.Errorf("expected result to be != nil; got: %v", indexResult) + } + + query := NewTermQuery("user", "olivere") + explain := true + valid, err := client.Validate(testIndexName).Type("doc").Explain(&explain).Query(query).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if valid == nil { + t.Fatal("expected to return an validation") + } + if !valid.Valid { + t.Errorf("expected valid to be %v; got: %v", true, valid.Valid) + } + + invalidQuery := NewTermQuery("", false) + valid, err = client.Validate(testIndexName).Type("doc").Query(invalidQuery).Do(context.TODO()) + if err != nil { + t.Fatal(err) + } + if valid == nil { + t.Fatal("expected to return an validation") + } + if valid.Valid { + t.Errorf("expected valid to be %v; got: %v", false, valid.Valid) + } +} diff --git a/vendor/github.com/philhofer/fwd/LICENSE.md b/vendor/github.com/philhofer/fwd/LICENSE.md new file mode 100644 index 0000000..1ac6a81 --- /dev/null +++ b/vendor/github.com/philhofer/fwd/LICENSE.md @@ -0,0 +1,7 @@ +Copyright (c) 2014-2015, Philip Hofer + +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. \ No newline at end of file diff --git a/vendor/github.com/philhofer/fwd/README.md b/vendor/github.com/philhofer/fwd/README.md new file mode 100644 index 0000000..38349af --- /dev/null +++ b/vendor/github.com/philhofer/fwd/README.md @@ -0,0 +1,315 @@ + +# fwd + import "github.com/philhofer/fwd" + +The `fwd` package provides a buffered reader +and writer. Each has methods that help improve +the encoding/decoding performance of some binary +protocols. + +The `fwd.Writer` and `fwd.Reader` type provide similar +functionality to their counterparts in `bufio`, plus +a few extra utility methods that simplify read-ahead +and write-ahead. I wrote this package to improve serialization +performance for http://github.com/tinylib/msgp, +where it provided about a 2x speedup over `bufio` for certain +workloads. However, care must be taken to understand the semantics of the +extra methods provided by this package, as they allow +the user to access and manipulate the buffer memory +directly. + +The extra methods for `fwd.Reader` are `Peek`, `Skip` +and `Next`. `(*fwd.Reader).Peek`, unlike `(*bufio.Reader).Peek`, +will re-allocate the read buffer in order to accommodate arbitrarily +large read-ahead. `(*fwd.Reader).Skip` skips the next `n` bytes +in the stream, and uses the `io.Seeker` interface if the underlying +stream implements it. `(*fwd.Reader).Next` returns a slice pointing +to the next `n` bytes in the read buffer (like `Peek`), but also +increments the read position. This allows users to process streams +in arbitrary block sizes without having to manage appropriately-sized +slices. Additionally, obviating the need to copy the data from the +buffer to another location in memory can improve performance dramatically +in CPU-bound applications. + +`fwd.Writer` only has one extra method, which is `(*fwd.Writer).Next`, which +returns a slice pointing to the next `n` bytes of the writer, and increments +the write position by the length of the returned slice. This allows users +to write directly to the end of the buffer. + + + + +## Constants +``` go +const ( + // DefaultReaderSize is the default size of the read buffer + DefaultReaderSize = 2048 +) +``` +``` go +const ( + // DefaultWriterSize is the + // default write buffer size. + DefaultWriterSize = 2048 +) +``` + + + +## type Reader +``` go +type Reader struct { + // contains filtered or unexported fields +} +``` +Reader is a buffered look-ahead reader + + + + + + + + + +### func NewReader +``` go +func NewReader(r io.Reader) *Reader +``` +NewReader returns a new *Reader that reads from 'r' + + +### func NewReaderSize +``` go +func NewReaderSize(r io.Reader, n int) *Reader +``` +NewReaderSize returns a new *Reader that +reads from 'r' and has a buffer size 'n' + + + + +### func (\*Reader) BufferSize +``` go +func (r *Reader) BufferSize() int +``` +BufferSize returns the total size of the buffer + + + +### func (\*Reader) Buffered +``` go +func (r *Reader) Buffered() int +``` +Buffered returns the number of bytes currently in the buffer + + + +### func (\*Reader) Next +``` go +func (r *Reader) Next(n int) ([]byte, error) +``` +Next returns the next 'n' bytes in the stream. +Unlike Peek, Next advances the reader position. +The returned bytes point to the same +data as the buffer, so the slice is +only valid until the next reader method call. +An EOF is considered an unexpected error. +If an the returned slice is less than the +length asked for, an error will be returned, +and the reader position will not be incremented. + + + +### func (\*Reader) Peek +``` go +func (r *Reader) Peek(n int) ([]byte, error) +``` +Peek returns the next 'n' buffered bytes, +reading from the underlying reader if necessary. +It will only return a slice shorter than 'n' bytes +if it also returns an error. Peek does not advance +the reader. EOF errors are *not* returned as +io.ErrUnexpectedEOF. + + + +### func (\*Reader) Read +``` go +func (r *Reader) Read(b []byte) (int, error) +``` +Read implements `io.Reader` + + + +### func (\*Reader) ReadByte +``` go +func (r *Reader) ReadByte() (byte, error) +``` +ReadByte implements `io.ByteReader` + + + +### func (\*Reader) ReadFull +``` go +func (r *Reader) ReadFull(b []byte) (int, error) +``` +ReadFull attempts to read len(b) bytes into +'b'. It returns the number of bytes read into +'b', and an error if it does not return len(b). +EOF is considered an unexpected error. + + + +### func (\*Reader) Reset +``` go +func (r *Reader) Reset(rd io.Reader) +``` +Reset resets the underlying reader +and the read buffer. + + + +### func (\*Reader) Skip +``` go +func (r *Reader) Skip(n int) (int, error) +``` +Skip moves the reader forward 'n' bytes. +Returns the number of bytes skipped and any +errors encountered. It is analogous to Seek(n, 1). +If the underlying reader implements io.Seeker, then +that method will be used to skip forward. + +If the reader encounters +an EOF before skipping 'n' bytes, it +returns io.ErrUnexpectedEOF. If the +underlying reader implements io.Seeker, then +those rules apply instead. (Many implementations +will not return `io.EOF` until the next call +to Read.) + + + +### func (\*Reader) WriteTo +``` go +func (r *Reader) WriteTo(w io.Writer) (int64, error) +``` +WriteTo implements `io.WriterTo` + + + +## type Writer +``` go +type Writer struct { + // contains filtered or unexported fields +} +``` +Writer is a buffered writer + + + + + + + + + +### func NewWriter +``` go +func NewWriter(w io.Writer) *Writer +``` +NewWriter returns a new writer +that writes to 'w' and has a buffer +that is `DefaultWriterSize` bytes. + + +### func NewWriterSize +``` go +func NewWriterSize(w io.Writer, size int) *Writer +``` +NewWriterSize returns a new writer +that writes to 'w' and has a buffer +that is 'size' bytes. + + + + +### func (\*Writer) BufferSize +``` go +func (w *Writer) BufferSize() int +``` +BufferSize returns the maximum size of the buffer. + + + +### func (\*Writer) Buffered +``` go +func (w *Writer) Buffered() int +``` +Buffered returns the number of buffered bytes +in the reader. + + + +### func (\*Writer) Flush +``` go +func (w *Writer) Flush() error +``` +Flush flushes any buffered bytes +to the underlying writer. + + + +### func (\*Writer) Next +``` go +func (w *Writer) Next(n int) ([]byte, error) +``` +Next returns the next 'n' free bytes +in the write buffer, flushing the writer +as necessary. Next will return `io.ErrShortBuffer` +if 'n' is greater than the size of the write buffer. +Calls to 'next' increment the write position by +the size of the returned buffer. + + + +### func (\*Writer) ReadFrom +``` go +func (w *Writer) ReadFrom(r io.Reader) (int64, error) +``` +ReadFrom implements `io.ReaderFrom` + + + +### func (\*Writer) Write +``` go +func (w *Writer) Write(p []byte) (int, error) +``` +Write implements `io.Writer` + + + +### func (\*Writer) WriteByte +``` go +func (w *Writer) WriteByte(b byte) error +``` +WriteByte implements `io.ByteWriter` + + + +### func (\*Writer) WriteString +``` go +func (w *Writer) WriteString(s string) (int, error) +``` +WriteString is analogous to Write, but it takes a string. + + + + + + + + + +- - - +Generated by [godoc2md](http://godoc.org/github.com/davecheney/godoc2md) \ No newline at end of file diff --git a/vendor/github.com/philhofer/fwd/reader.go b/vendor/github.com/philhofer/fwd/reader.go new file mode 100644 index 0000000..75be62a --- /dev/null +++ b/vendor/github.com/philhofer/fwd/reader.go @@ -0,0 +1,383 @@ +// The `fwd` package provides a buffered reader +// and writer. Each has methods that help improve +// the encoding/decoding performance of some binary +// protocols. +// +// The `fwd.Writer` and `fwd.Reader` type provide similar +// functionality to their counterparts in `bufio`, plus +// a few extra utility methods that simplify read-ahead +// and write-ahead. I wrote this package to improve serialization +// performance for http://github.com/tinylib/msgp, +// where it provided about a 2x speedup over `bufio` for certain +// workloads. However, care must be taken to understand the semantics of the +// extra methods provided by this package, as they allow +// the user to access and manipulate the buffer memory +// directly. +// +// The extra methods for `fwd.Reader` are `Peek`, `Skip` +// and `Next`. `(*fwd.Reader).Peek`, unlike `(*bufio.Reader).Peek`, +// will re-allocate the read buffer in order to accommodate arbitrarily +// large read-ahead. `(*fwd.Reader).Skip` skips the next `n` bytes +// in the stream, and uses the `io.Seeker` interface if the underlying +// stream implements it. `(*fwd.Reader).Next` returns a slice pointing +// to the next `n` bytes in the read buffer (like `Peek`), but also +// increments the read position. This allows users to process streams +// in arbitrary block sizes without having to manage appropriately-sized +// slices. Additionally, obviating the need to copy the data from the +// buffer to another location in memory can improve performance dramatically +// in CPU-bound applications. +// +// `fwd.Writer` only has one extra method, which is `(*fwd.Writer).Next`, which +// returns a slice pointing to the next `n` bytes of the writer, and increments +// the write position by the length of the returned slice. This allows users +// to write directly to the end of the buffer. +// +package fwd + +import "io" + +const ( + // DefaultReaderSize is the default size of the read buffer + DefaultReaderSize = 2048 + + // minimum read buffer; straight from bufio + minReaderSize = 16 +) + +// NewReader returns a new *Reader that reads from 'r' +func NewReader(r io.Reader) *Reader { + return NewReaderSize(r, DefaultReaderSize) +} + +// NewReaderSize returns a new *Reader that +// reads from 'r' and has a buffer size 'n' +func NewReaderSize(r io.Reader, n int) *Reader { + rd := &Reader{ + r: r, + data: make([]byte, 0, max(minReaderSize, n)), + } + if s, ok := r.(io.Seeker); ok { + rd.rs = s + } + return rd +} + +// Reader is a buffered look-ahead reader +type Reader struct { + r io.Reader // underlying reader + + // data[n:len(data)] is buffered data; data[len(data):cap(data)] is free buffer space + data []byte // data + n int // read offset + state error // last read error + + // if the reader past to NewReader was + // also an io.Seeker, this is non-nil + rs io.Seeker +} + +// Reset resets the underlying reader +// and the read buffer. +func (r *Reader) Reset(rd io.Reader) { + r.r = rd + r.data = r.data[0:0] + r.n = 0 + r.state = nil + if s, ok := rd.(io.Seeker); ok { + r.rs = s + } else { + r.rs = nil + } +} + +// more() does one read on the underlying reader +func (r *Reader) more() { + // move data backwards so that + // the read offset is 0; this way + // we can supply the maximum number of + // bytes to the reader + if r.n != 0 { + if r.n < len(r.data) { + r.data = r.data[:copy(r.data[0:], r.data[r.n:])] + } else { + r.data = r.data[:0] + } + r.n = 0 + } + var a int + a, r.state = r.r.Read(r.data[len(r.data):cap(r.data)]) + if a == 0 && r.state == nil { + r.state = io.ErrNoProgress + return + } else if a > 0 && r.state == io.EOF { + // discard the io.EOF if we read more than 0 bytes. + // the next call to Read should return io.EOF again. + r.state = nil + } + r.data = r.data[:len(r.data)+a] +} + +// pop error +func (r *Reader) err() (e error) { + e, r.state = r.state, nil + return +} + +// pop error; EOF -> io.ErrUnexpectedEOF +func (r *Reader) noEOF() (e error) { + e, r.state = r.state, nil + if e == io.EOF { + e = io.ErrUnexpectedEOF + } + return +} + +// buffered bytes +func (r *Reader) buffered() int { return len(r.data) - r.n } + +// Buffered returns the number of bytes currently in the buffer +func (r *Reader) Buffered() int { return len(r.data) - r.n } + +// BufferSize returns the total size of the buffer +func (r *Reader) BufferSize() int { return cap(r.data) } + +// Peek returns the next 'n' buffered bytes, +// reading from the underlying reader if necessary. +// It will only return a slice shorter than 'n' bytes +// if it also returns an error. Peek does not advance +// the reader. EOF errors are *not* returned as +// io.ErrUnexpectedEOF. +func (r *Reader) Peek(n int) ([]byte, error) { + // in the degenerate case, + // we may need to realloc + // (the caller asked for more + // bytes than the size of the buffer) + if cap(r.data) < n { + old := r.data[r.n:] + r.data = make([]byte, n+r.buffered()) + r.data = r.data[:copy(r.data, old)] + r.n = 0 + } + + // keep filling until + // we hit an error or + // read enough bytes + for r.buffered() < n && r.state == nil { + r.more() + } + + // we must have hit an error + if r.buffered() < n { + return r.data[r.n:], r.err() + } + + return r.data[r.n : r.n+n], nil +} + +// Skip moves the reader forward 'n' bytes. +// Returns the number of bytes skipped and any +// errors encountered. It is analogous to Seek(n, 1). +// If the underlying reader implements io.Seeker, then +// that method will be used to skip forward. +// +// If the reader encounters +// an EOF before skipping 'n' bytes, it +// returns io.ErrUnexpectedEOF. If the +// underlying reader implements io.Seeker, then +// those rules apply instead. (Many implementations +// will not return `io.EOF` until the next call +// to Read.) +func (r *Reader) Skip(n int) (int, error) { + + // fast path + if r.buffered() >= n { + r.n += n + return n, nil + } + + // use seeker implementation + // if we can + if r.rs != nil { + return r.skipSeek(n) + } + + // loop on filling + // and then erasing + o := n + for r.buffered() < n && r.state == nil { + r.more() + // we can skip forward + // up to r.buffered() bytes + step := min(r.buffered(), n) + r.n += step + n -= step + } + // at this point, n should be + // 0 if everything went smoothly + return o - n, r.noEOF() +} + +// Next returns the next 'n' bytes in the stream. +// Unlike Peek, Next advances the reader position. +// The returned bytes point to the same +// data as the buffer, so the slice is +// only valid until the next reader method call. +// An EOF is considered an unexpected error. +// If an the returned slice is less than the +// length asked for, an error will be returned, +// and the reader position will not be incremented. +func (r *Reader) Next(n int) ([]byte, error) { + + // in case the buffer is too small + if cap(r.data) < n { + old := r.data[r.n:] + r.data = make([]byte, n+r.buffered()) + r.data = r.data[:copy(r.data, old)] + r.n = 0 + } + + // fill at least 'n' bytes + for r.buffered() < n && r.state == nil { + r.more() + } + + if r.buffered() < n { + return r.data[r.n:], r.noEOF() + } + out := r.data[r.n : r.n+n] + r.n += n + return out, nil +} + +// skipSeek uses the io.Seeker to seek forward. +// only call this function when n > r.buffered() +func (r *Reader) skipSeek(n int) (int, error) { + o := r.buffered() + // first, clear buffer + n -= o + r.n = 0 + r.data = r.data[:0] + + // then seek forward remaning bytes + i, err := r.rs.Seek(int64(n), 1) + return int(i) + o, err +} + +// Read implements `io.Reader` +func (r *Reader) Read(b []byte) (int, error) { + // if we have data in the buffer, just + // return that. + if r.buffered() != 0 { + x := copy(b, r.data[r.n:]) + r.n += x + return x, nil + } + var n int + // we have no buffered data; determine + // whether or not to buffer or call + // the underlying reader directly + if len(b) >= cap(r.data) { + n, r.state = r.r.Read(b) + } else { + r.more() + n = copy(b, r.data) + r.n = n + } + if n == 0 { + return 0, r.err() + } + return n, nil +} + +// ReadFull attempts to read len(b) bytes into +// 'b'. It returns the number of bytes read into +// 'b', and an error if it does not return len(b). +// EOF is considered an unexpected error. +func (r *Reader) ReadFull(b []byte) (int, error) { + var n int // read into b + var nn int // scratch + l := len(b) + // either read buffered data, + // or read directly for the underlying + // buffer, or fetch more buffered data. + for n < l && r.state == nil { + if r.buffered() != 0 { + nn = copy(b[n:], r.data[r.n:]) + n += nn + r.n += nn + } else if l-n > cap(r.data) { + nn, r.state = r.r.Read(b[n:]) + n += nn + } else { + r.more() + } + } + if n < l { + return n, r.noEOF() + } + return n, nil +} + +// ReadByte implements `io.ByteReader` +func (r *Reader) ReadByte() (byte, error) { + for r.buffered() < 1 && r.state == nil { + r.more() + } + if r.buffered() < 1 { + return 0, r.err() + } + b := r.data[r.n] + r.n++ + return b, nil +} + +// WriteTo implements `io.WriterTo` +func (r *Reader) WriteTo(w io.Writer) (int64, error) { + var ( + i int64 + ii int + err error + ) + // first, clear buffer + if r.buffered() > 0 { + ii, err = w.Write(r.data[r.n:]) + i += int64(ii) + if err != nil { + return i, err + } + r.data = r.data[0:0] + r.n = 0 + } + for r.state == nil { + // here we just do + // 1:1 reads and writes + r.more() + if r.buffered() > 0 { + ii, err = w.Write(r.data) + i += int64(ii) + if err != nil { + return i, err + } + r.data = r.data[0:0] + r.n = 0 + } + } + if r.state != io.EOF { + return i, r.err() + } + return i, nil +} + +func min(a int, b int) int { + if a < b { + return a + } + return b +} + +func max(a int, b int) int { + if a < b { + return b + } + return a +} diff --git a/vendor/github.com/philhofer/fwd/reader_test.go b/vendor/github.com/philhofer/fwd/reader_test.go new file mode 100644 index 0000000..e96303a --- /dev/null +++ b/vendor/github.com/philhofer/fwd/reader_test.go @@ -0,0 +1,398 @@ +package fwd + +import ( + "bytes" + "io" + "io/ioutil" + "math/rand" + "testing" + "unsafe" +) + +// partialReader reads into only +// part of the supplied byte slice +// to the underlying reader +type partialReader struct { + r io.Reader +} + +func (p partialReader) Read(b []byte) (int, error) { + n := max(1, rand.Intn(len(b))) + return p.r.Read(b[:n]) +} + +func randomBts(sz int) []byte { + o := make([]byte, sz) + for i := 0; i < len(o); i += 8 { + j := (*int64)(unsafe.Pointer(&o[i])) + *j = rand.Int63() + } + return o +} + +func TestRead(t *testing.T) { + bts := randomBts(512) + + // make the buffer much + // smaller than the underlying + // bytes to incur multiple fills + rd := NewReaderSize(partialReader{bytes.NewReader(bts)}, 128) + + if rd.BufferSize() != cap(rd.data) { + t.Errorf("BufferSize() returned %d; should return %d", rd.BufferSize(), cap(rd.data)) + } + + // starting Buffered() should be 0 + if rd.Buffered() != 0 { + t.Errorf("Buffered() should return 0 at initialization; got %d", rd.Buffered()) + } + + some := make([]byte, 32) + n, err := rd.Read(some) + if err != nil { + t.Fatal(err) + } + if n == 0 { + t.Fatal("read 0 bytes w/ a non-nil error!") + } + some = some[:n] + + more := make([]byte, 64) + j, err := rd.Read(more) + if err != nil { + t.Fatal(err) + } + if j == 0 { + t.Fatal("read 0 bytes w/ a non-nil error") + } + more = more[:j] + + out, err := ioutil.ReadAll(rd) + if err != nil { + t.Fatal(err) + } + + all := append(some, more...) + all = append(all, out...) + + if !bytes.Equal(bts, all) { + t.Errorf("bytes not equal; %d bytes in and %d bytes out", len(bts), len(out)) + } + + // test filling out of the underlying reader + big := randomBts(1 << 21) + rd = NewReaderSize(partialReader{bytes.NewReader(big)}, 2048) + buf := make([]byte, 3100) + + n, err = rd.ReadFull(buf) + if err != nil { + t.Fatal(err) + } + if n != 3100 { + t.Errorf("expected 3100 bytes read by ReadFull; got %d", n) + } + if !bytes.Equal(buf[:n], big[:n]) { + t.Error("data parity") + } + rest := make([]byte, (1<<21)-3100) + n, err = io.ReadFull(rd, rest) + if err != nil { + t.Fatal(err) + } + if n != len(rest) { + t.Errorf("expected %d bytes read by io.ReadFull; got %d", len(rest), n) + } + if !bytes.Equal(append(buf, rest...), big) { + t.Fatal("data parity") + } +} + +func TestReadByte(t *testing.T) { + bts := randomBts(512) + rd := NewReaderSize(partialReader{bytes.NewReader(bts)}, 98) + + var ( + err error + i int + b byte + ) + + // scan through the whole + // array byte-by-byte + for err != io.EOF { + b, err = rd.ReadByte() + if err == nil { + if b != bts[i] { + t.Fatalf("offset %d: %d in; %d out", i, b, bts[i]) + } + } + i++ + } + if err != io.EOF { + t.Fatal(err) + } +} + +func TestSkipNoSeek(t *testing.T) { + bts := randomBts(1024) + rd := NewReaderSize(partialReader{bytes.NewReader(bts)}, 200) + + n, err := rd.Skip(512) + if err != nil { + t.Fatal(err) + } + if n != 512 { + t.Fatalf("Skip() returned a nil error, but skipped %d bytes instead of %d", n, 512) + } + + var b byte + b, err = rd.ReadByte() + if err != nil { + t.Fatal(err) + } + + if b != bts[512] { + t.Fatalf("at index %d: %d in; %d out", 512, bts[512], b) + } + + n, err = rd.Skip(10) + if err != nil { + t.Fatal(err) + } + if n != 10 { + t.Fatalf("Skip() returned a nil error, but skipped %d bytes instead of %d", n, 10) + } + + // now try to skip past the end + rd = NewReaderSize(partialReader{bytes.NewReader(bts)}, 200) + + n, err = rd.Skip(2000) + if err != io.ErrUnexpectedEOF { + t.Fatalf("expected error %q; got %q", io.EOF, err) + } + if n != 1024 { + t.Fatalf("expected to skip only 1024 bytes; skipped %d", n) + } +} + +func TestSkipSeek(t *testing.T) { + bts := randomBts(1024) + + // bytes.Reader implements io.Seeker + rd := NewReaderSize(bytes.NewReader(bts), 200) + + n, err := rd.Skip(512) + if err != nil { + t.Fatal(err) + } + if n != 512 { + t.Fatalf("Skip() returned a nil error, but skipped %d bytes instead of %d", n, 512) + } + + var b byte + b, err = rd.ReadByte() + if err != nil { + t.Fatal(err) + } + + if b != bts[512] { + t.Fatalf("at index %d: %d in; %d out", 512, bts[512], b) + } + + n, err = rd.Skip(10) + if err != nil { + t.Fatal(err) + } + if n != 10 { + t.Fatalf("Skip() returned a nil error, but skipped %d bytes instead of %d", n, 10) + } + + // now try to skip past the end + rd.Reset(bytes.NewReader(bts)) + + // because of how bytes.Reader + // implements Seek, this should + // return (2000, nil) + n, err = rd.Skip(2000) + if err != nil { + t.Fatal(err) + } + if n != 2000 { + t.Fatalf("should have returned %d bytes; returned %d", 2000, n) + } + + // the next call to Read() + // should return io.EOF + n, err = rd.Read([]byte{0, 0, 0}) + if err != io.EOF { + t.Errorf("expected %q; got %q", io.EOF, err) + } + if n != 0 { + t.Errorf("expected 0 bytes read; got %d", n) + } + +} + +func TestPeek(t *testing.T) { + bts := randomBts(1024) + rd := NewReaderSize(partialReader{bytes.NewReader(bts)}, 200) + + // first, a peek < buffer size + var ( + peek []byte + err error + ) + peek, err = rd.Peek(100) + if err != nil { + t.Fatal(err) + } + if len(peek) != 100 { + t.Fatalf("asked for %d bytes; got %d", 100, len(peek)) + } + if !bytes.Equal(peek, bts[:100]) { + t.Fatal("peeked bytes not equal") + } + + // now, a peek > buffer size + peek, err = rd.Peek(256) + if err != nil { + t.Fatal(err) + } + if len(peek) != 256 { + t.Fatalf("asked for %d bytes; got %d", 100, len(peek)) + } + if !bytes.Equal(peek, bts[:256]) { + t.Fatal("peeked bytes not equal") + } + + // now try to peek past EOF + peek, err = rd.Peek(2048) + if err != io.EOF { + t.Fatalf("expected error %q; got %q", io.EOF, err) + } + if len(peek) != 1024 { + t.Fatalf("expected %d bytes peek-able; got %d", 1024, len(peek)) + } +} + +func TestNext(t *testing.T) { + size := 1024 + bts := randomBts(size) + rd := NewReaderSize(partialReader{bytes.NewReader(bts)}, 200) + + chunksize := 256 + chunks := size / chunksize + + for i := 0; i < chunks; i++ { + out, err := rd.Next(chunksize) + if err != nil { + t.Fatal(err) + } + start := chunksize * i + if !bytes.Equal(bts[start:start+chunksize], out) { + t.Fatalf("chunk %d: chunks not equal", i+1) + } + } +} + +func TestWriteTo(t *testing.T) { + bts := randomBts(2048) + rd := NewReaderSize(partialReader{bytes.NewReader(bts)}, 200) + + // cause the buffer + // to fill a little, just + // to complicate things + rd.Peek(25) + + var out bytes.Buffer + n, err := rd.WriteTo(&out) + if err != nil { + t.Fatal(err) + } + if n != 2048 { + t.Fatalf("should have written %d bytes; wrote %d", 2048, n) + } + if !bytes.Equal(out.Bytes(), bts) { + t.Fatal("bytes not equal") + } +} + +func TestReadFull(t *testing.T) { + bts := randomBts(1024) + rd := NewReaderSize(partialReader{bytes.NewReader(bts)}, 256) + + // try to ReadFull() the whole thing + out := make([]byte, 1024) + n, err := rd.ReadFull(out) + if err != nil { + t.Fatal(err) + } + if n != 1024 { + t.Fatalf("expected to read %d bytes; read %d", 1024, n) + } + if !bytes.Equal(bts, out) { + t.Fatal("bytes not equal") + } + + // we've read everything; this should EOF + n, err = rd.Read(out) + if err != io.EOF { + t.Fatalf("expected %q; got %q", io.EOF, err) + } + + rd.Reset(partialReader{bytes.NewReader(bts)}) + + // now try to read *past* EOF + out = make([]byte, 1500) + n, err = rd.ReadFull(out) + if err != io.ErrUnexpectedEOF { + t.Fatalf("expected error %q; got %q", io.EOF, err) + } + if n != 1024 { + t.Fatalf("expected to read %d bytes; read %d", 1024, n) + } +} + +type readCounter struct { + r io.Reader + count int +} + +func (r *readCounter) Read(p []byte) (int, error) { + r.count++ + return r.r.Read(p) +} + +func TestReadFullPerf(t *testing.T) { + const size = 1 << 22 + data := randomBts(size) + + c := readCounter{ + r: &partialReader{ + r: bytes.NewReader(data), + }, + } + + r := NewReader(&c) + + const segments = 4 + out := make([]byte, size/segments) + + for i := 0; i < segments; i++ { + // force an unaligned read + _, err := r.Peek(5) + if err != nil { + t.Fatal(err) + } + + n, err := r.ReadFull(out) + if err != nil { + t.Fatal(err) + } + if n != size/segments { + t.Fatalf("read %d bytes, not %d", n, size/segments) + } + } + + t.Logf("called Read() on the underlying reader %d times to fill %d buffers", c.count, size/r.BufferSize()) +} diff --git a/vendor/github.com/philhofer/fwd/writer.go b/vendor/github.com/philhofer/fwd/writer.go new file mode 100644 index 0000000..2dc392a --- /dev/null +++ b/vendor/github.com/philhofer/fwd/writer.go @@ -0,0 +1,224 @@ +package fwd + +import "io" + +const ( + // DefaultWriterSize is the + // default write buffer size. + DefaultWriterSize = 2048 + + minWriterSize = minReaderSize +) + +// Writer is a buffered writer +type Writer struct { + w io.Writer // writer + buf []byte // 0:len(buf) is bufered data +} + +// NewWriter returns a new writer +// that writes to 'w' and has a buffer +// that is `DefaultWriterSize` bytes. +func NewWriter(w io.Writer) *Writer { + if wr, ok := w.(*Writer); ok { + return wr + } + return &Writer{ + w: w, + buf: make([]byte, 0, DefaultWriterSize), + } +} + +// NewWriterSize returns a new writer +// that writes to 'w' and has a buffer +// that is 'size' bytes. +func NewWriterSize(w io.Writer, size int) *Writer { + if wr, ok := w.(*Writer); ok && cap(wr.buf) >= size { + return wr + } + return &Writer{ + w: w, + buf: make([]byte, 0, max(size, minWriterSize)), + } +} + +// Buffered returns the number of buffered bytes +// in the reader. +func (w *Writer) Buffered() int { return len(w.buf) } + +// BufferSize returns the maximum size of the buffer. +func (w *Writer) BufferSize() int { return cap(w.buf) } + +// Flush flushes any buffered bytes +// to the underlying writer. +func (w *Writer) Flush() error { + l := len(w.buf) + if l > 0 { + n, err := w.w.Write(w.buf) + + // if we didn't write the whole + // thing, copy the unwritten + // bytes to the beginnning of the + // buffer. + if n < l && n > 0 { + w.pushback(n) + if err == nil { + err = io.ErrShortWrite + } + } + if err != nil { + return err + } + w.buf = w.buf[:0] + return nil + } + return nil +} + +// Write implements `io.Writer` +func (w *Writer) Write(p []byte) (int, error) { + c, l, ln := cap(w.buf), len(w.buf), len(p) + avail := c - l + + // requires flush + if avail < ln { + if err := w.Flush(); err != nil { + return 0, err + } + l = len(w.buf) + } + // too big to fit in buffer; + // write directly to w.w + if c < ln { + return w.w.Write(p) + } + + // grow buf slice; copy; return + w.buf = w.buf[:l+ln] + return copy(w.buf[l:], p), nil +} + +// WriteString is analogous to Write, but it takes a string. +func (w *Writer) WriteString(s string) (int, error) { + c, l, ln := cap(w.buf), len(w.buf), len(s) + avail := c - l + + // requires flush + if avail < ln { + if err := w.Flush(); err != nil { + return 0, err + } + l = len(w.buf) + } + // too big to fit in buffer; + // write directly to w.w + // + // yes, this is unsafe. *but* + // io.Writer is not allowed + // to mutate its input or + // maintain a reference to it, + // per the spec in package io. + // + // plus, if the string is really + // too big to fit in the buffer, then + // creating a copy to write it is + // expensive (and, strictly speaking, + // unnecessary) + if c < ln { + return w.w.Write(unsafestr(s)) + } + + // grow buf slice; copy; return + w.buf = w.buf[:l+ln] + return copy(w.buf[l:], s), nil +} + +// WriteByte implements `io.ByteWriter` +func (w *Writer) WriteByte(b byte) error { + if len(w.buf) == cap(w.buf) { + if err := w.Flush(); err != nil { + return err + } + } + w.buf = append(w.buf, b) + return nil +} + +// Next returns the next 'n' free bytes +// in the write buffer, flushing the writer +// as necessary. Next will return `io.ErrShortBuffer` +// if 'n' is greater than the size of the write buffer. +// Calls to 'next' increment the write position by +// the size of the returned buffer. +func (w *Writer) Next(n int) ([]byte, error) { + c, l := cap(w.buf), len(w.buf) + if n > c { + return nil, io.ErrShortBuffer + } + avail := c - l + if avail < n { + if err := w.Flush(); err != nil { + return nil, err + } + l = len(w.buf) + } + w.buf = w.buf[:l+n] + return w.buf[l:], nil +} + +// take the bytes from w.buf[n:len(w.buf)] +// and put them at the beginning of w.buf, +// and resize to the length of the copied segment. +func (w *Writer) pushback(n int) { + w.buf = w.buf[:copy(w.buf, w.buf[n:])] +} + +// ReadFrom implements `io.ReaderFrom` +func (w *Writer) ReadFrom(r io.Reader) (int64, error) { + // anticipatory flush + if err := w.Flush(); err != nil { + return 0, err + } + + w.buf = w.buf[0:cap(w.buf)] // expand buffer + + var nn int64 // written + var err error // error + var x int // read + + // 1:1 reads and writes + for err == nil { + x, err = r.Read(w.buf) + if x > 0 { + n, werr := w.w.Write(w.buf[:x]) + nn += int64(n) + + if err != nil { + if n < x && n > 0 { + w.pushback(n - x) + } + return nn, werr + } + if n < x { + w.pushback(n - x) + return nn, io.ErrShortWrite + } + } else if err == nil { + err = io.ErrNoProgress + break + } + } + if err != io.EOF { + return nn, err + } + + // we only clear here + // because we are sure + // the writes have + // succeeded. otherwise, + // we retain the data in case + // future writes succeed. + w.buf = w.buf[0:0] + + return nn, nil +} diff --git a/vendor/github.com/philhofer/fwd/writer_appengine.go b/vendor/github.com/philhofer/fwd/writer_appengine.go new file mode 100644 index 0000000..e367f39 --- /dev/null +++ b/vendor/github.com/philhofer/fwd/writer_appengine.go @@ -0,0 +1,5 @@ +// +build appengine + +package fwd + +func unsafestr(s string) []byte { return []byte(s) } diff --git a/vendor/github.com/philhofer/fwd/writer_test.go b/vendor/github.com/philhofer/fwd/writer_test.go new file mode 100644 index 0000000..3dcf3a5 --- /dev/null +++ b/vendor/github.com/philhofer/fwd/writer_test.go @@ -0,0 +1,239 @@ +package fwd + +import ( + "bytes" + "io" + "math/rand" + "testing" +) + +type chunkedWriter struct { + w *Writer +} + +// writes 'p' in randomly-sized chunks +func (c chunkedWriter) Write(p []byte) (int, error) { + l := len(p) + n := 0 + for n < l { + amt := max(rand.Intn(l-n), 1) // number of bytes to write; at least 1 + nn, err := c.w.Write(p[n : n+amt]) // + n += nn + if err == nil && nn < amt { + err = io.ErrShortWrite + } + if err != nil { + return n, err + } + } + return n, nil +} + +// analogous to Write(), but w/ str +func (c chunkedWriter) WriteString(s string) (int, error) { + l := len(s) + n := 0 + for n < l { + amt := max(rand.Intn(l-n), 1) // number of bytes to write; at least 1 + nn, err := c.w.WriteString(s[n : n+amt]) // + n += nn + if err == nil && nn < amt { + err = io.ErrShortWrite + } + if err != nil { + return n, err + } + } + return n, nil +} + +// writes via random calls to Next() +type nextWriter struct { + wr *Writer +} + +func (c nextWriter) Write(p []byte) (int, error) { + l := len(p) + n := 0 + for n < l { + amt := max(rand.Intn(l-n), 1) // at least 1 byte + fwd, err := c.wr.Next(amt) // get next (amt) bytes + if err != nil { + + // this may happen occasionally + if err == io.ErrShortBuffer { + if cap(c.wr.buf) >= amt { + panic("bad io.ErrShortBuffer") + } + continue + } + + return n, err + } + if len(fwd) != amt { + panic("bad Next() len") + } + n += copy(fwd, p[n:]) + } + return n, nil +} + +func TestWrite(t *testing.T) { + nbts := 4096 + bts := randomBts(nbts) + var buf bytes.Buffer + wr := NewWriterSize(&buf, 512) + + if wr.BufferSize() != 512 { + t.Fatalf("expected BufferSize() to be %d; found %d", 512, wr.BufferSize()) + } + + cwr := chunkedWriter{wr} + nb, err := cwr.Write(bts) + if err != nil { + t.Fatal(err) + } + if nb != nbts { + t.Fatalf("expected to write %d bytes; wrote %d bytes", nbts, nb) + } + err = wr.Flush() + if err != nil { + t.Fatal(err) + } + + if wr.Buffered() != 0 { + t.Fatalf("expected 0 buffered bytes; found %d", wr.Buffered()) + } + + if buf.Len() != nbts { + t.Fatalf("wrote %d bytes, but buffer is %d bytes long", nbts, buf.Len()) + } + if !bytes.Equal(bts, buf.Bytes()) { + t.Fatal("buf.Bytes() is not the same as the input bytes") + } +} + +func TestWriteString(t *testing.T) { + nbts := 3998 + str := string(randomBts(nbts)) + var buf bytes.Buffer + wr := NewWriterSize(&buf, 1137) + + if wr.BufferSize() != 1137 { + t.Fatalf("expected BufferSize() to return %d; returned %d", 1137, wr.BufferSize()) + } + + cwr := chunkedWriter{wr} + nb, err := cwr.WriteString(str) + if err != nil { + t.Fatal(err) + } + if nb != nbts { + t.Fatalf("expected to write %d bytes; wrote %d bytes", nbts, nb) + } + + err = wr.Flush() + if err != nil { + t.Fatal(err) + } + + if wr.Buffered() != 0 { + t.Fatalf("expected 0 buffered bytes; found %d", wr.Buffered()) + } + + if buf.Len() != nbts { + t.Fatalf("wrote %d bytes, buf buffer is %d bytes long", nbts, buf.Len()) + } + if buf.String() != str { + t.Fatal("buf.String() is not the same as input string") + } +} + +func TestWriteByte(t *testing.T) { + nbts := 3200 + bts := randomBts(nbts) + var buf bytes.Buffer + wr := NewWriter(&buf) + + if wr.BufferSize() != DefaultWriterSize { + t.Fatalf("expected BufferSize() to return %d; returned %d", DefaultWriterSize, wr.BufferSize()) + } + + // write byte-by-byte + for _, b := range bts { + if err := wr.WriteByte(b); err != nil { + t.Fatal(err) + } + } + + err := wr.Flush() + if err != nil { + t.Fatal(err) + } + + if buf.Len() != nbts { + t.Fatalf("expected buf.Len() to be %d; got %d", nbts, buf.Len()) + } + + if !bytes.Equal(buf.Bytes(), bts) { + t.Fatal("buf.Bytes() and input are not equal") + } +} + +func TestWriterNext(t *testing.T) { + nbts := 1871 + bts := randomBts(nbts) + var buf bytes.Buffer + wr := NewWriterSize(&buf, 500) + nwr := nextWriter{wr} + + nb, err := nwr.Write(bts) + if err != nil { + t.Fatal(err) + } + + if nb != nbts { + t.Fatalf("expected to write %d bytes; wrote %d", nbts, nb) + } + + err = wr.Flush() + if err != nil { + t.Fatal(err) + } + + if buf.Len() != nbts { + t.Fatalf("expected buf.Len() to be %d; got %d", nbts, buf.Len()) + } + + if !bytes.Equal(buf.Bytes(), bts) { + t.Fatal("buf.Bytes() and input are not equal") + } +} + +func TestReadFrom(t *testing.T) { + nbts := 2139 + bts := randomBts(nbts) + var buf bytes.Buffer + wr := NewWriterSize(&buf, 987) + + rd := partialReader{bytes.NewReader(bts)} + + nb, err := wr.ReadFrom(rd) + if err != nil { + t.Fatal(err) + } + if nb != int64(nbts) { + t.Fatalf("expeted to write %d bytes; wrote %d", nbts, nb) + } + err = wr.Flush() + if err != nil { + t.Fatal(err) + } + if buf.Len() != nbts { + t.Fatalf("expected buf.Len() to be %d; got %d", nbts, buf.Len()) + } + if !bytes.Equal(buf.Bytes(), bts) { + t.Fatal("buf.Bytes() and input are not equal") + } + +} diff --git a/vendor/github.com/philhofer/fwd/writer_unsafe.go b/vendor/github.com/philhofer/fwd/writer_unsafe.go new file mode 100644 index 0000000..a0bf453 --- /dev/null +++ b/vendor/github.com/philhofer/fwd/writer_unsafe.go @@ -0,0 +1,18 @@ +// +build !appengine + +package fwd + +import ( + "reflect" + "unsafe" +) + +// unsafe cast string as []byte +func unsafestr(b string) []byte { + l := len(b) + return *(*[]byte)(unsafe.Pointer(&reflect.SliceHeader{ + Len: l, + Cap: l, + Data: (*reflect.StringHeader)(unsafe.Pointer(&b)).Data, + })) +} diff --git a/vendor/github.com/pkg/errors/.gitignore b/vendor/github.com/pkg/errors/.gitignore new file mode 100644 index 0000000..daf913b --- /dev/null +++ b/vendor/github.com/pkg/errors/.gitignore @@ -0,0 +1,24 @@ +# 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 +*.test +*.prof diff --git a/vendor/github.com/pkg/errors/.travis.yml b/vendor/github.com/pkg/errors/.travis.yml new file mode 100644 index 0000000..15e5a19 --- /dev/null +++ b/vendor/github.com/pkg/errors/.travis.yml @@ -0,0 +1,14 @@ +language: go +go_import_path: github.com/pkg/errors +go: + - 1.4.x + - 1.5.x + - 1.6.x + - 1.7.x + - 1.8.x + - 1.9.x + - 1.10.x + - tip + +script: + - go test -v ./... diff --git a/vendor/github.com/pkg/errors/LICENSE b/vendor/github.com/pkg/errors/LICENSE new file mode 100644 index 0000000..835ba3e --- /dev/null +++ b/vendor/github.com/pkg/errors/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2015, Dave Cheney +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/pkg/errors/README.md b/vendor/github.com/pkg/errors/README.md new file mode 100644 index 0000000..6483ba2 --- /dev/null +++ b/vendor/github.com/pkg/errors/README.md @@ -0,0 +1,52 @@ +# errors [![Travis-CI](https://travis-ci.org/pkg/errors.svg)](https://travis-ci.org/pkg/errors) [![AppVeyor](https://ci.appveyor.com/api/projects/status/b98mptawhudj53ep/branch/master?svg=true)](https://ci.appveyor.com/project/davecheney/errors/branch/master) [![GoDoc](https://godoc.org/github.com/pkg/errors?status.svg)](http://godoc.org/github.com/pkg/errors) [![Report card](https://goreportcard.com/badge/github.com/pkg/errors)](https://goreportcard.com/report/github.com/pkg/errors) [![Sourcegraph](https://sourcegraph.com/github.com/pkg/errors/-/badge.svg)](https://sourcegraph.com/github.com/pkg/errors?badge) + +Package errors provides simple error handling primitives. + +`go get github.com/pkg/errors` + +The traditional error handling idiom in Go is roughly akin to +```go +if err != nil { + return err +} +``` +which applied recursively up the call stack results in error reports without context or debugging information. The errors package allows programmers to add context to the failure path in their code in a way that does not destroy the original value of the error. + +## Adding context to an error + +The errors.Wrap function returns a new error that adds context to the original error. For example +```go +_, err := ioutil.ReadAll(r) +if err != nil { + return errors.Wrap(err, "read failed") +} +``` +## Retrieving the cause of an error + +Using `errors.Wrap` constructs a stack of errors, adding context to the preceding error. Depending on the nature of the error it may be necessary to reverse the operation of errors.Wrap to retrieve the original error for inspection. Any error value which implements this interface can be inspected by `errors.Cause`. +```go +type causer interface { + Cause() error +} +``` +`errors.Cause` will recursively retrieve the topmost error which does not implement `causer`, which is assumed to be the original cause. For example: +```go +switch err := errors.Cause(err).(type) { +case *MyError: + // handle specifically +default: + // unknown error +} +``` + +[Read the package documentation for more information](https://godoc.org/github.com/pkg/errors). + +## Contributing + +We welcome pull requests, bug fixes and issue reports. With that said, the bar for adding new symbols to this package is intentionally set high. + +Before proposing a change, please discuss your change by raising an issue. + +## License + +BSD-2-Clause diff --git a/vendor/github.com/pkg/errors/appveyor.yml b/vendor/github.com/pkg/errors/appveyor.yml new file mode 100644 index 0000000..a932ead --- /dev/null +++ b/vendor/github.com/pkg/errors/appveyor.yml @@ -0,0 +1,32 @@ +version: build-{build}.{branch} + +clone_folder: C:\gopath\src\github.com\pkg\errors +shallow_clone: true # for startup speed + +environment: + GOPATH: C:\gopath + +platform: + - x64 + +# http://www.appveyor.com/docs/installed-software +install: + # some helpful output for debugging builds + - go version + - go env + # pre-installed MinGW at C:\MinGW is 32bit only + # but MSYS2 at C:\msys64 has mingw64 + - set PATH=C:\msys64\mingw64\bin;%PATH% + - gcc --version + - g++ --version + +build_script: + - go install -v ./... + +test_script: + - set PATH=C:\gopath\bin;%PATH% + - go test -v ./... + +#artifacts: +# - path: '%GOPATH%\bin\*.exe' +deploy: off diff --git a/vendor/github.com/pkg/errors/bench_test.go b/vendor/github.com/pkg/errors/bench_test.go new file mode 100644 index 0000000..903b5f2 --- /dev/null +++ b/vendor/github.com/pkg/errors/bench_test.go @@ -0,0 +1,63 @@ +// +build go1.7 + +package errors + +import ( + "fmt" + "testing" + + stderrors "errors" +) + +func noErrors(at, depth int) error { + if at >= depth { + return stderrors.New("no error") + } + return noErrors(at+1, depth) +} + +func yesErrors(at, depth int) error { + if at >= depth { + return New("ye error") + } + return yesErrors(at+1, depth) +} + +// GlobalE is an exported global to store the result of benchmark results, +// preventing the compiler from optimising the benchmark functions away. +var GlobalE error + +func BenchmarkErrors(b *testing.B) { + type run struct { + stack int + std bool + } + runs := []run{ + {10, false}, + {10, true}, + {100, false}, + {100, true}, + {1000, false}, + {1000, true}, + } + for _, r := range runs { + part := "pkg/errors" + if r.std { + part = "errors" + } + name := fmt.Sprintf("%s-stack-%d", part, r.stack) + b.Run(name, func(b *testing.B) { + var err error + f := yesErrors + if r.std { + f = noErrors + } + b.ReportAllocs() + for i := 0; i < b.N; i++ { + err = f(0, r.stack) + } + b.StopTimer() + GlobalE = err + }) + } +} diff --git a/vendor/github.com/pkg/errors/errors.go b/vendor/github.com/pkg/errors/errors.go new file mode 100644 index 0000000..842ee80 --- /dev/null +++ b/vendor/github.com/pkg/errors/errors.go @@ -0,0 +1,269 @@ +// Package errors provides simple error handling primitives. +// +// The traditional error handling idiom in Go is roughly akin to +// +// if err != nil { +// return err +// } +// +// which applied recursively up the call stack results in error reports +// without context or debugging information. The errors package allows +// programmers to add context to the failure path in their code in a way +// that does not destroy the original value of the error. +// +// Adding context to an error +// +// The errors.Wrap function returns a new error that adds context to the +// original error by recording a stack trace at the point Wrap is called, +// and the supplied message. For example +// +// _, err := ioutil.ReadAll(r) +// if err != nil { +// return errors.Wrap(err, "read failed") +// } +// +// If additional control is required the errors.WithStack and errors.WithMessage +// functions destructure errors.Wrap into its component operations of annotating +// an error with a stack trace and an a message, respectively. +// +// Retrieving the cause of an error +// +// Using errors.Wrap constructs a stack of errors, adding context to the +// preceding error. Depending on the nature of the error it may be necessary +// to reverse the operation of errors.Wrap to retrieve the original error +// for inspection. Any error value which implements this interface +// +// type causer interface { +// Cause() error +// } +// +// can be inspected by errors.Cause. errors.Cause will recursively retrieve +// the topmost error which does not implement causer, which is assumed to be +// the original cause. For example: +// +// switch err := errors.Cause(err).(type) { +// case *MyError: +// // handle specifically +// default: +// // unknown error +// } +// +// causer interface is not exported by this package, but is considered a part +// of stable public API. +// +// Formatted printing of errors +// +// All error values returned from this package implement fmt.Formatter and can +// be formatted by the fmt package. The following verbs are supported +// +// %s print the error. If the error has a Cause it will be +// printed recursively +// %v see %s +// %+v extended format. Each Frame of the error's StackTrace will +// be printed in detail. +// +// Retrieving the stack trace of an error or wrapper +// +// New, Errorf, Wrap, and Wrapf record a stack trace at the point they are +// invoked. This information can be retrieved with the following interface. +// +// type stackTracer interface { +// StackTrace() errors.StackTrace +// } +// +// Where errors.StackTrace is defined as +// +// type StackTrace []Frame +// +// The Frame type represents a call site in the stack trace. Frame supports +// the fmt.Formatter interface that can be used for printing information about +// the stack trace of this error. For example: +// +// if err, ok := err.(stackTracer); ok { +// for _, f := range err.StackTrace() { +// fmt.Printf("%+s:%d", f) +// } +// } +// +// stackTracer interface is not exported by this package, but is considered a part +// of stable public API. +// +// See the documentation for Frame.Format for more details. +package errors + +import ( + "fmt" + "io" +) + +// New returns an error with the supplied message. +// New also records the stack trace at the point it was called. +func New(message string) error { + return &fundamental{ + msg: message, + stack: callers(), + } +} + +// Errorf formats according to a format specifier and returns the string +// as a value that satisfies error. +// Errorf also records the stack trace at the point it was called. +func Errorf(format string, args ...interface{}) error { + return &fundamental{ + msg: fmt.Sprintf(format, args...), + stack: callers(), + } +} + +// fundamental is an error that has a message and a stack, but no caller. +type fundamental struct { + msg string + *stack +} + +func (f *fundamental) Error() string { return f.msg } + +func (f *fundamental) Format(s fmt.State, verb rune) { + switch verb { + case 'v': + if s.Flag('+') { + io.WriteString(s, f.msg) + f.stack.Format(s, verb) + return + } + fallthrough + case 's': + io.WriteString(s, f.msg) + case 'q': + fmt.Fprintf(s, "%q", f.msg) + } +} + +// WithStack annotates err with a stack trace at the point WithStack was called. +// If err is nil, WithStack returns nil. +func WithStack(err error) error { + if err == nil { + return nil + } + return &withStack{ + err, + callers(), + } +} + +type withStack struct { + error + *stack +} + +func (w *withStack) Cause() error { return w.error } + +func (w *withStack) Format(s fmt.State, verb rune) { + switch verb { + case 'v': + if s.Flag('+') { + fmt.Fprintf(s, "%+v", w.Cause()) + w.stack.Format(s, verb) + return + } + fallthrough + case 's': + io.WriteString(s, w.Error()) + case 'q': + fmt.Fprintf(s, "%q", w.Error()) + } +} + +// Wrap returns an error annotating err with a stack trace +// at the point Wrap is called, and the supplied message. +// If err is nil, Wrap returns nil. +func Wrap(err error, message string) error { + if err == nil { + return nil + } + err = &withMessage{ + cause: err, + msg: message, + } + return &withStack{ + err, + callers(), + } +} + +// Wrapf returns an error annotating err with a stack trace +// at the point Wrapf is call, and the format specifier. +// If err is nil, Wrapf returns nil. +func Wrapf(err error, format string, args ...interface{}) error { + if err == nil { + return nil + } + err = &withMessage{ + cause: err, + msg: fmt.Sprintf(format, args...), + } + return &withStack{ + err, + callers(), + } +} + +// WithMessage annotates err with a new message. +// If err is nil, WithMessage returns nil. +func WithMessage(err error, message string) error { + if err == nil { + return nil + } + return &withMessage{ + cause: err, + msg: message, + } +} + +type withMessage struct { + cause error + msg string +} + +func (w *withMessage) Error() string { return w.msg + ": " + w.cause.Error() } +func (w *withMessage) Cause() error { return w.cause } + +func (w *withMessage) Format(s fmt.State, verb rune) { + switch verb { + case 'v': + if s.Flag('+') { + fmt.Fprintf(s, "%+v\n", w.Cause()) + io.WriteString(s, w.msg) + return + } + fallthrough + case 's', 'q': + io.WriteString(s, w.Error()) + } +} + +// Cause returns the underlying cause of the error, if possible. +// An error value has a cause if it implements the following +// interface: +// +// type causer interface { +// Cause() error +// } +// +// If the error does not implement Cause, the original error will +// be returned. If the error is nil, nil will be returned without further +// investigation. +func Cause(err error) error { + type causer interface { + Cause() error + } + + for err != nil { + cause, ok := err.(causer) + if !ok { + break + } + err = cause.Cause() + } + return err +} diff --git a/vendor/github.com/pkg/errors/errors_test.go b/vendor/github.com/pkg/errors/errors_test.go new file mode 100644 index 0000000..c4e6eef --- /dev/null +++ b/vendor/github.com/pkg/errors/errors_test.go @@ -0,0 +1,225 @@ +package errors + +import ( + "errors" + "fmt" + "io" + "reflect" + "testing" +) + +func TestNew(t *testing.T) { + tests := []struct { + err string + want error + }{ + {"", fmt.Errorf("")}, + {"foo", fmt.Errorf("foo")}, + {"foo", New("foo")}, + {"string with format specifiers: %v", errors.New("string with format specifiers: %v")}, + } + + for _, tt := range tests { + got := New(tt.err) + if got.Error() != tt.want.Error() { + t.Errorf("New.Error(): got: %q, want %q", got, tt.want) + } + } +} + +func TestWrapNil(t *testing.T) { + got := Wrap(nil, "no error") + if got != nil { + t.Errorf("Wrap(nil, \"no error\"): got %#v, expected nil", got) + } +} + +func TestWrap(t *testing.T) { + tests := []struct { + err error + message string + want string + }{ + {io.EOF, "read error", "read error: EOF"}, + {Wrap(io.EOF, "read error"), "client error", "client error: read error: EOF"}, + } + + for _, tt := range tests { + got := Wrap(tt.err, tt.message).Error() + if got != tt.want { + t.Errorf("Wrap(%v, %q): got: %v, want %v", tt.err, tt.message, got, tt.want) + } + } +} + +type nilError struct{} + +func (nilError) Error() string { return "nil error" } + +func TestCause(t *testing.T) { + x := New("error") + tests := []struct { + err error + want error + }{{ + // nil error is nil + err: nil, + want: nil, + }, { + // explicit nil error is nil + err: (error)(nil), + want: nil, + }, { + // typed nil is nil + err: (*nilError)(nil), + want: (*nilError)(nil), + }, { + // uncaused error is unaffected + err: io.EOF, + want: io.EOF, + }, { + // caused error returns cause + err: Wrap(io.EOF, "ignored"), + want: io.EOF, + }, { + err: x, // return from errors.New + want: x, + }, { + WithMessage(nil, "whoops"), + nil, + }, { + WithMessage(io.EOF, "whoops"), + io.EOF, + }, { + WithStack(nil), + nil, + }, { + WithStack(io.EOF), + io.EOF, + }} + + for i, tt := range tests { + got := Cause(tt.err) + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("test %d: got %#v, want %#v", i+1, got, tt.want) + } + } +} + +func TestWrapfNil(t *testing.T) { + got := Wrapf(nil, "no error") + if got != nil { + t.Errorf("Wrapf(nil, \"no error\"): got %#v, expected nil", got) + } +} + +func TestWrapf(t *testing.T) { + tests := []struct { + err error + message string + want string + }{ + {io.EOF, "read error", "read error: EOF"}, + {Wrapf(io.EOF, "read error without format specifiers"), "client error", "client error: read error without format specifiers: EOF"}, + {Wrapf(io.EOF, "read error with %d format specifier", 1), "client error", "client error: read error with 1 format specifier: EOF"}, + } + + for _, tt := range tests { + got := Wrapf(tt.err, tt.message).Error() + if got != tt.want { + t.Errorf("Wrapf(%v, %q): got: %v, want %v", tt.err, tt.message, got, tt.want) + } + } +} + +func TestErrorf(t *testing.T) { + tests := []struct { + err error + want string + }{ + {Errorf("read error without format specifiers"), "read error without format specifiers"}, + {Errorf("read error with %d format specifier", 1), "read error with 1 format specifier"}, + } + + for _, tt := range tests { + got := tt.err.Error() + if got != tt.want { + t.Errorf("Errorf(%v): got: %q, want %q", tt.err, got, tt.want) + } + } +} + +func TestWithStackNil(t *testing.T) { + got := WithStack(nil) + if got != nil { + t.Errorf("WithStack(nil): got %#v, expected nil", got) + } +} + +func TestWithStack(t *testing.T) { + tests := []struct { + err error + want string + }{ + {io.EOF, "EOF"}, + {WithStack(io.EOF), "EOF"}, + } + + for _, tt := range tests { + got := WithStack(tt.err).Error() + if got != tt.want { + t.Errorf("WithStack(%v): got: %v, want %v", tt.err, got, tt.want) + } + } +} + +func TestWithMessageNil(t *testing.T) { + got := WithMessage(nil, "no error") + if got != nil { + t.Errorf("WithMessage(nil, \"no error\"): got %#v, expected nil", got) + } +} + +func TestWithMessage(t *testing.T) { + tests := []struct { + err error + message string + want string + }{ + {io.EOF, "read error", "read error: EOF"}, + {WithMessage(io.EOF, "read error"), "client error", "client error: read error: EOF"}, + } + + for _, tt := range tests { + got := WithMessage(tt.err, tt.message).Error() + if got != tt.want { + t.Errorf("WithMessage(%v, %q): got: %q, want %q", tt.err, tt.message, got, tt.want) + } + } +} + +// errors.New, etc values are not expected to be compared by value +// but the change in errors#27 made them incomparable. Assert that +// various kinds of errors have a functional equality operator, even +// if the result of that equality is always false. +func TestErrorEquality(t *testing.T) { + vals := []error{ + nil, + io.EOF, + errors.New("EOF"), + New("EOF"), + Errorf("EOF"), + Wrap(io.EOF, "EOF"), + Wrapf(io.EOF, "EOF%d", 2), + WithMessage(nil, "whoops"), + WithMessage(io.EOF, "whoops"), + WithStack(io.EOF), + WithStack(nil), + } + + for i := range vals { + for j := range vals { + _ = vals[i] == vals[j] // mustn't panic + } + } +} diff --git a/vendor/github.com/pkg/errors/example_test.go b/vendor/github.com/pkg/errors/example_test.go new file mode 100644 index 0000000..c1fc13e --- /dev/null +++ b/vendor/github.com/pkg/errors/example_test.go @@ -0,0 +1,205 @@ +package errors_test + +import ( + "fmt" + + "github.com/pkg/errors" +) + +func ExampleNew() { + err := errors.New("whoops") + fmt.Println(err) + + // Output: whoops +} + +func ExampleNew_printf() { + err := errors.New("whoops") + fmt.Printf("%+v", err) + + // Example output: + // whoops + // github.com/pkg/errors_test.ExampleNew_printf + // /home/dfc/src/github.com/pkg/errors/example_test.go:17 + // testing.runExample + // /home/dfc/go/src/testing/example.go:114 + // testing.RunExamples + // /home/dfc/go/src/testing/example.go:38 + // testing.(*M).Run + // /home/dfc/go/src/testing/testing.go:744 + // main.main + // /github.com/pkg/errors/_test/_testmain.go:106 + // runtime.main + // /home/dfc/go/src/runtime/proc.go:183 + // runtime.goexit + // /home/dfc/go/src/runtime/asm_amd64.s:2059 +} + +func ExampleWithMessage() { + cause := errors.New("whoops") + err := errors.WithMessage(cause, "oh noes") + fmt.Println(err) + + // Output: oh noes: whoops +} + +func ExampleWithStack() { + cause := errors.New("whoops") + err := errors.WithStack(cause) + fmt.Println(err) + + // Output: whoops +} + +func ExampleWithStack_printf() { + cause := errors.New("whoops") + err := errors.WithStack(cause) + fmt.Printf("%+v", err) + + // Example Output: + // whoops + // github.com/pkg/errors_test.ExampleWithStack_printf + // /home/fabstu/go/src/github.com/pkg/errors/example_test.go:55 + // testing.runExample + // /usr/lib/go/src/testing/example.go:114 + // testing.RunExamples + // /usr/lib/go/src/testing/example.go:38 + // testing.(*M).Run + // /usr/lib/go/src/testing/testing.go:744 + // main.main + // github.com/pkg/errors/_test/_testmain.go:106 + // runtime.main + // /usr/lib/go/src/runtime/proc.go:183 + // runtime.goexit + // /usr/lib/go/src/runtime/asm_amd64.s:2086 + // github.com/pkg/errors_test.ExampleWithStack_printf + // /home/fabstu/go/src/github.com/pkg/errors/example_test.go:56 + // testing.runExample + // /usr/lib/go/src/testing/example.go:114 + // testing.RunExamples + // /usr/lib/go/src/testing/example.go:38 + // testing.(*M).Run + // /usr/lib/go/src/testing/testing.go:744 + // main.main + // github.com/pkg/errors/_test/_testmain.go:106 + // runtime.main + // /usr/lib/go/src/runtime/proc.go:183 + // runtime.goexit + // /usr/lib/go/src/runtime/asm_amd64.s:2086 +} + +func ExampleWrap() { + cause := errors.New("whoops") + err := errors.Wrap(cause, "oh noes") + fmt.Println(err) + + // Output: oh noes: whoops +} + +func fn() error { + e1 := errors.New("error") + e2 := errors.Wrap(e1, "inner") + e3 := errors.Wrap(e2, "middle") + return errors.Wrap(e3, "outer") +} + +func ExampleCause() { + err := fn() + fmt.Println(err) + fmt.Println(errors.Cause(err)) + + // Output: outer: middle: inner: error + // error +} + +func ExampleWrap_extended() { + err := fn() + fmt.Printf("%+v\n", err) + + // Example output: + // error + // github.com/pkg/errors_test.fn + // /home/dfc/src/github.com/pkg/errors/example_test.go:47 + // github.com/pkg/errors_test.ExampleCause_printf + // /home/dfc/src/github.com/pkg/errors/example_test.go:63 + // testing.runExample + // /home/dfc/go/src/testing/example.go:114 + // testing.RunExamples + // /home/dfc/go/src/testing/example.go:38 + // testing.(*M).Run + // /home/dfc/go/src/testing/testing.go:744 + // main.main + // /github.com/pkg/errors/_test/_testmain.go:104 + // runtime.main + // /home/dfc/go/src/runtime/proc.go:183 + // runtime.goexit + // /home/dfc/go/src/runtime/asm_amd64.s:2059 + // github.com/pkg/errors_test.fn + // /home/dfc/src/github.com/pkg/errors/example_test.go:48: inner + // github.com/pkg/errors_test.fn + // /home/dfc/src/github.com/pkg/errors/example_test.go:49: middle + // github.com/pkg/errors_test.fn + // /home/dfc/src/github.com/pkg/errors/example_test.go:50: outer +} + +func ExampleWrapf() { + cause := errors.New("whoops") + err := errors.Wrapf(cause, "oh noes #%d", 2) + fmt.Println(err) + + // Output: oh noes #2: whoops +} + +func ExampleErrorf_extended() { + err := errors.Errorf("whoops: %s", "foo") + fmt.Printf("%+v", err) + + // Example output: + // whoops: foo + // github.com/pkg/errors_test.ExampleErrorf + // /home/dfc/src/github.com/pkg/errors/example_test.go:101 + // testing.runExample + // /home/dfc/go/src/testing/example.go:114 + // testing.RunExamples + // /home/dfc/go/src/testing/example.go:38 + // testing.(*M).Run + // /home/dfc/go/src/testing/testing.go:744 + // main.main + // /github.com/pkg/errors/_test/_testmain.go:102 + // runtime.main + // /home/dfc/go/src/runtime/proc.go:183 + // runtime.goexit + // /home/dfc/go/src/runtime/asm_amd64.s:2059 +} + +func Example_stackTrace() { + type stackTracer interface { + StackTrace() errors.StackTrace + } + + err, ok := errors.Cause(fn()).(stackTracer) + if !ok { + panic("oops, err does not implement stackTracer") + } + + st := err.StackTrace() + fmt.Printf("%+v", st[0:2]) // top two frames + + // Example output: + // github.com/pkg/errors_test.fn + // /home/dfc/src/github.com/pkg/errors/example_test.go:47 + // github.com/pkg/errors_test.Example_stackTrace + // /home/dfc/src/github.com/pkg/errors/example_test.go:127 +} + +func ExampleCause_printf() { + err := errors.Wrap(func() error { + return func() error { + return errors.Errorf("hello %s", fmt.Sprintf("world")) + }() + }(), "failed") + + fmt.Printf("%v", err) + + // Output: failed: hello world +} diff --git a/vendor/github.com/pkg/errors/format_test.go b/vendor/github.com/pkg/errors/format_test.go new file mode 100644 index 0000000..c2eef5f --- /dev/null +++ b/vendor/github.com/pkg/errors/format_test.go @@ -0,0 +1,535 @@ +package errors + +import ( + "errors" + "fmt" + "io" + "regexp" + "strings" + "testing" +) + +func TestFormatNew(t *testing.T) { + tests := []struct { + error + format string + want string + }{{ + New("error"), + "%s", + "error", + }, { + New("error"), + "%v", + "error", + }, { + New("error"), + "%+v", + "error\n" + + "github.com/pkg/errors.TestFormatNew\n" + + "\t.+/github.com/pkg/errors/format_test.go:26", + }, { + New("error"), + "%q", + `"error"`, + }} + + for i, tt := range tests { + testFormatRegexp(t, i, tt.error, tt.format, tt.want) + } +} + +func TestFormatErrorf(t *testing.T) { + tests := []struct { + error + format string + want string + }{{ + Errorf("%s", "error"), + "%s", + "error", + }, { + Errorf("%s", "error"), + "%v", + "error", + }, { + Errorf("%s", "error"), + "%+v", + "error\n" + + "github.com/pkg/errors.TestFormatErrorf\n" + + "\t.+/github.com/pkg/errors/format_test.go:56", + }} + + for i, tt := range tests { + testFormatRegexp(t, i, tt.error, tt.format, tt.want) + } +} + +func TestFormatWrap(t *testing.T) { + tests := []struct { + error + format string + want string + }{{ + Wrap(New("error"), "error2"), + "%s", + "error2: error", + }, { + Wrap(New("error"), "error2"), + "%v", + "error2: error", + }, { + Wrap(New("error"), "error2"), + "%+v", + "error\n" + + "github.com/pkg/errors.TestFormatWrap\n" + + "\t.+/github.com/pkg/errors/format_test.go:82", + }, { + Wrap(io.EOF, "error"), + "%s", + "error: EOF", + }, { + Wrap(io.EOF, "error"), + "%v", + "error: EOF", + }, { + Wrap(io.EOF, "error"), + "%+v", + "EOF\n" + + "error\n" + + "github.com/pkg/errors.TestFormatWrap\n" + + "\t.+/github.com/pkg/errors/format_test.go:96", + }, { + Wrap(Wrap(io.EOF, "error1"), "error2"), + "%+v", + "EOF\n" + + "error1\n" + + "github.com/pkg/errors.TestFormatWrap\n" + + "\t.+/github.com/pkg/errors/format_test.go:103\n", + }, { + Wrap(New("error with space"), "context"), + "%q", + `"context: error with space"`, + }} + + for i, tt := range tests { + testFormatRegexp(t, i, tt.error, tt.format, tt.want) + } +} + +func TestFormatWrapf(t *testing.T) { + tests := []struct { + error + format string + want string + }{{ + Wrapf(io.EOF, "error%d", 2), + "%s", + "error2: EOF", + }, { + Wrapf(io.EOF, "error%d", 2), + "%v", + "error2: EOF", + }, { + Wrapf(io.EOF, "error%d", 2), + "%+v", + "EOF\n" + + "error2\n" + + "github.com/pkg/errors.TestFormatWrapf\n" + + "\t.+/github.com/pkg/errors/format_test.go:134", + }, { + Wrapf(New("error"), "error%d", 2), + "%s", + "error2: error", + }, { + Wrapf(New("error"), "error%d", 2), + "%v", + "error2: error", + }, { + Wrapf(New("error"), "error%d", 2), + "%+v", + "error\n" + + "github.com/pkg/errors.TestFormatWrapf\n" + + "\t.+/github.com/pkg/errors/format_test.go:149", + }} + + for i, tt := range tests { + testFormatRegexp(t, i, tt.error, tt.format, tt.want) + } +} + +func TestFormatWithStack(t *testing.T) { + tests := []struct { + error + format string + want []string + }{{ + WithStack(io.EOF), + "%s", + []string{"EOF"}, + }, { + WithStack(io.EOF), + "%v", + []string{"EOF"}, + }, { + WithStack(io.EOF), + "%+v", + []string{"EOF", + "github.com/pkg/errors.TestFormatWithStack\n" + + "\t.+/github.com/pkg/errors/format_test.go:175"}, + }, { + WithStack(New("error")), + "%s", + []string{"error"}, + }, { + WithStack(New("error")), + "%v", + []string{"error"}, + }, { + WithStack(New("error")), + "%+v", + []string{"error", + "github.com/pkg/errors.TestFormatWithStack\n" + + "\t.+/github.com/pkg/errors/format_test.go:189", + "github.com/pkg/errors.TestFormatWithStack\n" + + "\t.+/github.com/pkg/errors/format_test.go:189"}, + }, { + WithStack(WithStack(io.EOF)), + "%+v", + []string{"EOF", + "github.com/pkg/errors.TestFormatWithStack\n" + + "\t.+/github.com/pkg/errors/format_test.go:197", + "github.com/pkg/errors.TestFormatWithStack\n" + + "\t.+/github.com/pkg/errors/format_test.go:197"}, + }, { + WithStack(WithStack(Wrapf(io.EOF, "message"))), + "%+v", + []string{"EOF", + "message", + "github.com/pkg/errors.TestFormatWithStack\n" + + "\t.+/github.com/pkg/errors/format_test.go:205", + "github.com/pkg/errors.TestFormatWithStack\n" + + "\t.+/github.com/pkg/errors/format_test.go:205", + "github.com/pkg/errors.TestFormatWithStack\n" + + "\t.+/github.com/pkg/errors/format_test.go:205"}, + }, { + WithStack(Errorf("error%d", 1)), + "%+v", + []string{"error1", + "github.com/pkg/errors.TestFormatWithStack\n" + + "\t.+/github.com/pkg/errors/format_test.go:216", + "github.com/pkg/errors.TestFormatWithStack\n" + + "\t.+/github.com/pkg/errors/format_test.go:216"}, + }} + + for i, tt := range tests { + testFormatCompleteCompare(t, i, tt.error, tt.format, tt.want, true) + } +} + +func TestFormatWithMessage(t *testing.T) { + tests := []struct { + error + format string + want []string + }{{ + WithMessage(New("error"), "error2"), + "%s", + []string{"error2: error"}, + }, { + WithMessage(New("error"), "error2"), + "%v", + []string{"error2: error"}, + }, { + WithMessage(New("error"), "error2"), + "%+v", + []string{ + "error", + "github.com/pkg/errors.TestFormatWithMessage\n" + + "\t.+/github.com/pkg/errors/format_test.go:244", + "error2"}, + }, { + WithMessage(io.EOF, "addition1"), + "%s", + []string{"addition1: EOF"}, + }, { + WithMessage(io.EOF, "addition1"), + "%v", + []string{"addition1: EOF"}, + }, { + WithMessage(io.EOF, "addition1"), + "%+v", + []string{"EOF", "addition1"}, + }, { + WithMessage(WithMessage(io.EOF, "addition1"), "addition2"), + "%v", + []string{"addition2: addition1: EOF"}, + }, { + WithMessage(WithMessage(io.EOF, "addition1"), "addition2"), + "%+v", + []string{"EOF", "addition1", "addition2"}, + }, { + Wrap(WithMessage(io.EOF, "error1"), "error2"), + "%+v", + []string{"EOF", "error1", "error2", + "github.com/pkg/errors.TestFormatWithMessage\n" + + "\t.+/github.com/pkg/errors/format_test.go:272"}, + }, { + WithMessage(Errorf("error%d", 1), "error2"), + "%+v", + []string{"error1", + "github.com/pkg/errors.TestFormatWithMessage\n" + + "\t.+/github.com/pkg/errors/format_test.go:278", + "error2"}, + }, { + WithMessage(WithStack(io.EOF), "error"), + "%+v", + []string{ + "EOF", + "github.com/pkg/errors.TestFormatWithMessage\n" + + "\t.+/github.com/pkg/errors/format_test.go:285", + "error"}, + }, { + WithMessage(Wrap(WithStack(io.EOF), "inside-error"), "outside-error"), + "%+v", + []string{ + "EOF", + "github.com/pkg/errors.TestFormatWithMessage\n" + + "\t.+/github.com/pkg/errors/format_test.go:293", + "inside-error", + "github.com/pkg/errors.TestFormatWithMessage\n" + + "\t.+/github.com/pkg/errors/format_test.go:293", + "outside-error"}, + }} + + for i, tt := range tests { + testFormatCompleteCompare(t, i, tt.error, tt.format, tt.want, true) + } +} + +func TestFormatGeneric(t *testing.T) { + starts := []struct { + err error + want []string + }{ + {New("new-error"), []string{ + "new-error", + "github.com/pkg/errors.TestFormatGeneric\n" + + "\t.+/github.com/pkg/errors/format_test.go:315"}, + }, {Errorf("errorf-error"), []string{ + "errorf-error", + "github.com/pkg/errors.TestFormatGeneric\n" + + "\t.+/github.com/pkg/errors/format_test.go:319"}, + }, {errors.New("errors-new-error"), []string{ + "errors-new-error"}, + }, + } + + wrappers := []wrapper{ + { + func(err error) error { return WithMessage(err, "with-message") }, + []string{"with-message"}, + }, { + func(err error) error { return WithStack(err) }, + []string{ + "github.com/pkg/errors.(func·002|TestFormatGeneric.func2)\n\t" + + ".+/github.com/pkg/errors/format_test.go:333", + }, + }, { + func(err error) error { return Wrap(err, "wrap-error") }, + []string{ + "wrap-error", + "github.com/pkg/errors.(func·003|TestFormatGeneric.func3)\n\t" + + ".+/github.com/pkg/errors/format_test.go:339", + }, + }, { + func(err error) error { return Wrapf(err, "wrapf-error%d", 1) }, + []string{ + "wrapf-error1", + "github.com/pkg/errors.(func·004|TestFormatGeneric.func4)\n\t" + + ".+/github.com/pkg/errors/format_test.go:346", + }, + }, + } + + for s := range starts { + err := starts[s].err + want := starts[s].want + testFormatCompleteCompare(t, s, err, "%+v", want, false) + testGenericRecursive(t, err, want, wrappers, 3) + } +} + +func testFormatRegexp(t *testing.T, n int, arg interface{}, format, want string) { + got := fmt.Sprintf(format, arg) + gotLines := strings.SplitN(got, "\n", -1) + wantLines := strings.SplitN(want, "\n", -1) + + if len(wantLines) > len(gotLines) { + t.Errorf("test %d: wantLines(%d) > gotLines(%d):\n got: %q\nwant: %q", n+1, len(wantLines), len(gotLines), got, want) + return + } + + for i, w := range wantLines { + match, err := regexp.MatchString(w, gotLines[i]) + if err != nil { + t.Fatal(err) + } + if !match { + t.Errorf("test %d: line %d: fmt.Sprintf(%q, err):\n got: %q\nwant: %q", n+1, i+1, format, got, want) + } + } +} + +var stackLineR = regexp.MustCompile(`\.`) + +// parseBlocks parses input into a slice, where: +// - incase entry contains a newline, its a stacktrace +// - incase entry contains no newline, its a solo line. +// +// Detecting stack boundaries only works incase the WithStack-calls are +// to be found on the same line, thats why it is optionally here. +// +// Example use: +// +// for _, e := range blocks { +// if strings.ContainsAny(e, "\n") { +// // Match as stack +// } else { +// // Match as line +// } +// } +// +func parseBlocks(input string, detectStackboundaries bool) ([]string, error) { + var blocks []string + + stack := "" + wasStack := false + lines := map[string]bool{} // already found lines + + for _, l := range strings.Split(input, "\n") { + isStackLine := stackLineR.MatchString(l) + + switch { + case !isStackLine && wasStack: + blocks = append(blocks, stack, l) + stack = "" + lines = map[string]bool{} + case isStackLine: + if wasStack { + // Detecting two stacks after another, possible cause lines match in + // our tests due to WithStack(WithStack(io.EOF)) on same line. + if detectStackboundaries { + if lines[l] { + if len(stack) == 0 { + return nil, errors.New("len of block must not be zero here") + } + + blocks = append(blocks, stack) + stack = l + lines = map[string]bool{l: true} + continue + } + } + + stack = stack + "\n" + l + } else { + stack = l + } + lines[l] = true + case !isStackLine && !wasStack: + blocks = append(blocks, l) + default: + return nil, errors.New("must not happen") + } + + wasStack = isStackLine + } + + // Use up stack + if stack != "" { + blocks = append(blocks, stack) + } + return blocks, nil +} + +func testFormatCompleteCompare(t *testing.T, n int, arg interface{}, format string, want []string, detectStackBoundaries bool) { + gotStr := fmt.Sprintf(format, arg) + + got, err := parseBlocks(gotStr, detectStackBoundaries) + if err != nil { + t.Fatal(err) + } + + if len(got) != len(want) { + t.Fatalf("test %d: fmt.Sprintf(%s, err) -> wrong number of blocks: got(%d) want(%d)\n got: %s\nwant: %s\ngotStr: %q", + n+1, format, len(got), len(want), prettyBlocks(got), prettyBlocks(want), gotStr) + } + + for i := range got { + if strings.ContainsAny(want[i], "\n") { + // Match as stack + match, err := regexp.MatchString(want[i], got[i]) + if err != nil { + t.Fatal(err) + } + if !match { + t.Fatalf("test %d: block %d: fmt.Sprintf(%q, err):\ngot:\n%q\nwant:\n%q\nall-got:\n%s\nall-want:\n%s\n", + n+1, i+1, format, got[i], want[i], prettyBlocks(got), prettyBlocks(want)) + } + } else { + // Match as message + if got[i] != want[i] { + t.Fatalf("test %d: fmt.Sprintf(%s, err) at block %d got != want:\n got: %q\nwant: %q", n+1, format, i+1, got[i], want[i]) + } + } + } +} + +type wrapper struct { + wrap func(err error) error + want []string +} + +func prettyBlocks(blocks []string) string { + var out []string + + for _, b := range blocks { + out = append(out, fmt.Sprintf("%v", b)) + } + + return " " + strings.Join(out, "\n ") +} + +func testGenericRecursive(t *testing.T, beforeErr error, beforeWant []string, list []wrapper, maxDepth int) { + if len(beforeWant) == 0 { + panic("beforeWant must not be empty") + } + for _, w := range list { + if len(w.want) == 0 { + panic("want must not be empty") + } + + err := w.wrap(beforeErr) + + // Copy required cause append(beforeWant, ..) modified beforeWant subtly. + beforeCopy := make([]string, len(beforeWant)) + copy(beforeCopy, beforeWant) + + beforeWant := beforeCopy + last := len(beforeWant) - 1 + var want []string + + // Merge two stacks behind each other. + if strings.ContainsAny(beforeWant[last], "\n") && strings.ContainsAny(w.want[0], "\n") { + want = append(beforeWant[:last], append([]string{beforeWant[last] + "((?s).*)" + w.want[0]}, w.want[1:]...)...) + } else { + want = append(beforeWant, w.want...) + } + + testFormatCompleteCompare(t, maxDepth, err, "%+v", want, false) + if maxDepth > 0 { + testGenericRecursive(t, err, want, list, maxDepth-1) + } + } +} diff --git a/vendor/github.com/pkg/errors/stack.go b/vendor/github.com/pkg/errors/stack.go new file mode 100644 index 0000000..2874a04 --- /dev/null +++ b/vendor/github.com/pkg/errors/stack.go @@ -0,0 +1,147 @@ +package errors + +import ( + "fmt" + "io" + "path" + "runtime" + "strings" +) + +// Frame represents a program counter inside a stack frame. +type Frame uintptr + +// pc returns the program counter for this frame; +// multiple frames may have the same PC value. +func (f Frame) pc() uintptr { return uintptr(f) - 1 } + +// file returns the full path to the file that contains the +// function for this Frame's pc. +func (f Frame) file() string { + fn := runtime.FuncForPC(f.pc()) + if fn == nil { + return "unknown" + } + file, _ := fn.FileLine(f.pc()) + return file +} + +// line returns the line number of source code of the +// function for this Frame's pc. +func (f Frame) line() int { + fn := runtime.FuncForPC(f.pc()) + if fn == nil { + return 0 + } + _, line := fn.FileLine(f.pc()) + return line +} + +// Format formats the frame according to the fmt.Formatter interface. +// +// %s source file +// %d source line +// %n function name +// %v equivalent to %s:%d +// +// Format accepts flags that alter the printing of some verbs, as follows: +// +// %+s function name and path of source file relative to the compile time +// GOPATH separated by \n\t (\n\t) +// %+v equivalent to %+s:%d +func (f Frame) Format(s fmt.State, verb rune) { + switch verb { + case 's': + switch { + case s.Flag('+'): + pc := f.pc() + fn := runtime.FuncForPC(pc) + if fn == nil { + io.WriteString(s, "unknown") + } else { + file, _ := fn.FileLine(pc) + fmt.Fprintf(s, "%s\n\t%s", fn.Name(), file) + } + default: + io.WriteString(s, path.Base(f.file())) + } + case 'd': + fmt.Fprintf(s, "%d", f.line()) + case 'n': + name := runtime.FuncForPC(f.pc()).Name() + io.WriteString(s, funcname(name)) + case 'v': + f.Format(s, 's') + io.WriteString(s, ":") + f.Format(s, 'd') + } +} + +// StackTrace is stack of Frames from innermost (newest) to outermost (oldest). +type StackTrace []Frame + +// Format formats the stack of Frames according to the fmt.Formatter interface. +// +// %s lists source files for each Frame in the stack +// %v lists the source file and line number for each Frame in the stack +// +// Format accepts flags that alter the printing of some verbs, as follows: +// +// %+v Prints filename, function, and line number for each Frame in the stack. +func (st StackTrace) Format(s fmt.State, verb rune) { + switch verb { + case 'v': + switch { + case s.Flag('+'): + for _, f := range st { + fmt.Fprintf(s, "\n%+v", f) + } + case s.Flag('#'): + fmt.Fprintf(s, "%#v", []Frame(st)) + default: + fmt.Fprintf(s, "%v", []Frame(st)) + } + case 's': + fmt.Fprintf(s, "%s", []Frame(st)) + } +} + +// stack represents a stack of program counters. +type stack []uintptr + +func (s *stack) Format(st fmt.State, verb rune) { + switch verb { + case 'v': + switch { + case st.Flag('+'): + for _, pc := range *s { + f := Frame(pc) + fmt.Fprintf(st, "\n%+v", f) + } + } + } +} + +func (s *stack) StackTrace() StackTrace { + f := make([]Frame, len(*s)) + for i := 0; i < len(f); i++ { + f[i] = Frame((*s)[i]) + } + return f +} + +func callers() *stack { + const depth = 32 + var pcs [depth]uintptr + n := runtime.Callers(3, pcs[:]) + var st stack = pcs[0:n] + return &st +} + +// funcname removes the path prefix component of a function's name reported by func.Name(). +func funcname(name string) string { + i := strings.LastIndex(name, "/") + name = name[i+1:] + i = strings.Index(name, ".") + return name[i+1:] +} diff --git a/vendor/github.com/pkg/errors/stack_test.go b/vendor/github.com/pkg/errors/stack_test.go new file mode 100644 index 0000000..85fc419 --- /dev/null +++ b/vendor/github.com/pkg/errors/stack_test.go @@ -0,0 +1,274 @@ +package errors + +import ( + "fmt" + "runtime" + "testing" +) + +var initpc, _, _, _ = runtime.Caller(0) + +func TestFrameLine(t *testing.T) { + var tests = []struct { + Frame + want int + }{{ + Frame(initpc), + 9, + }, { + func() Frame { + var pc, _, _, _ = runtime.Caller(0) + return Frame(pc) + }(), + 20, + }, { + func() Frame { + var pc, _, _, _ = runtime.Caller(1) + return Frame(pc) + }(), + 28, + }, { + Frame(0), // invalid PC + 0, + }} + + for _, tt := range tests { + got := tt.Frame.line() + want := tt.want + if want != got { + t.Errorf("Frame(%v): want: %v, got: %v", uintptr(tt.Frame), want, got) + } + } +} + +type X struct{} + +func (x X) val() Frame { + var pc, _, _, _ = runtime.Caller(0) + return Frame(pc) +} + +func (x *X) ptr() Frame { + var pc, _, _, _ = runtime.Caller(0) + return Frame(pc) +} + +func TestFrameFormat(t *testing.T) { + var tests = []struct { + Frame + format string + want string + }{{ + Frame(initpc), + "%s", + "stack_test.go", + }, { + Frame(initpc), + "%+s", + "github.com/pkg/errors.init\n" + + "\t.+/github.com/pkg/errors/stack_test.go", + }, { + Frame(0), + "%s", + "unknown", + }, { + Frame(0), + "%+s", + "unknown", + }, { + Frame(initpc), + "%d", + "9", + }, { + Frame(0), + "%d", + "0", + }, { + Frame(initpc), + "%n", + "init", + }, { + func() Frame { + var x X + return x.ptr() + }(), + "%n", + `\(\*X\).ptr`, + }, { + func() Frame { + var x X + return x.val() + }(), + "%n", + "X.val", + }, { + Frame(0), + "%n", + "", + }, { + Frame(initpc), + "%v", + "stack_test.go:9", + }, { + Frame(initpc), + "%+v", + "github.com/pkg/errors.init\n" + + "\t.+/github.com/pkg/errors/stack_test.go:9", + }, { + Frame(0), + "%v", + "unknown:0", + }} + + for i, tt := range tests { + testFormatRegexp(t, i, tt.Frame, tt.format, tt.want) + } +} + +func TestFuncname(t *testing.T) { + tests := []struct { + name, want string + }{ + {"", ""}, + {"runtime.main", "main"}, + {"github.com/pkg/errors.funcname", "funcname"}, + {"funcname", "funcname"}, + {"io.copyBuffer", "copyBuffer"}, + {"main.(*R).Write", "(*R).Write"}, + } + + for _, tt := range tests { + got := funcname(tt.name) + want := tt.want + if got != want { + t.Errorf("funcname(%q): want: %q, got %q", tt.name, want, got) + } + } +} + +func TestStackTrace(t *testing.T) { + tests := []struct { + err error + want []string + }{{ + New("ooh"), []string{ + "github.com/pkg/errors.TestStackTrace\n" + + "\t.+/github.com/pkg/errors/stack_test.go:154", + }, + }, { + Wrap(New("ooh"), "ahh"), []string{ + "github.com/pkg/errors.TestStackTrace\n" + + "\t.+/github.com/pkg/errors/stack_test.go:159", // this is the stack of Wrap, not New + }, + }, { + Cause(Wrap(New("ooh"), "ahh")), []string{ + "github.com/pkg/errors.TestStackTrace\n" + + "\t.+/github.com/pkg/errors/stack_test.go:164", // this is the stack of New + }, + }, { + func() error { return New("ooh") }(), []string{ + `github.com/pkg/errors.(func·009|TestStackTrace.func1)` + + "\n\t.+/github.com/pkg/errors/stack_test.go:169", // this is the stack of New + "github.com/pkg/errors.TestStackTrace\n" + + "\t.+/github.com/pkg/errors/stack_test.go:169", // this is the stack of New's caller + }, + }, { + Cause(func() error { + return func() error { + return Errorf("hello %s", fmt.Sprintf("world")) + }() + }()), []string{ + `github.com/pkg/errors.(func·010|TestStackTrace.func2.1)` + + "\n\t.+/github.com/pkg/errors/stack_test.go:178", // this is the stack of Errorf + `github.com/pkg/errors.(func·011|TestStackTrace.func2)` + + "\n\t.+/github.com/pkg/errors/stack_test.go:179", // this is the stack of Errorf's caller + "github.com/pkg/errors.TestStackTrace\n" + + "\t.+/github.com/pkg/errors/stack_test.go:180", // this is the stack of Errorf's caller's caller + }, + }} + for i, tt := range tests { + x, ok := tt.err.(interface { + StackTrace() StackTrace + }) + if !ok { + t.Errorf("expected %#v to implement StackTrace() StackTrace", tt.err) + continue + } + st := x.StackTrace() + for j, want := range tt.want { + testFormatRegexp(t, i, st[j], "%+v", want) + } + } +} + +func stackTrace() StackTrace { + const depth = 8 + var pcs [depth]uintptr + n := runtime.Callers(1, pcs[:]) + var st stack = pcs[0:n] + return st.StackTrace() +} + +func TestStackTraceFormat(t *testing.T) { + tests := []struct { + StackTrace + format string + want string + }{{ + nil, + "%s", + `\[\]`, + }, { + nil, + "%v", + `\[\]`, + }, { + nil, + "%+v", + "", + }, { + nil, + "%#v", + `\[\]errors.Frame\(nil\)`, + }, { + make(StackTrace, 0), + "%s", + `\[\]`, + }, { + make(StackTrace, 0), + "%v", + `\[\]`, + }, { + make(StackTrace, 0), + "%+v", + "", + }, { + make(StackTrace, 0), + "%#v", + `\[\]errors.Frame{}`, + }, { + stackTrace()[:2], + "%s", + `\[stack_test.go stack_test.go\]`, + }, { + stackTrace()[:2], + "%v", + `\[stack_test.go:207 stack_test.go:254\]`, + }, { + stackTrace()[:2], + "%+v", + "\n" + + "github.com/pkg/errors.stackTrace\n" + + "\t.+/github.com/pkg/errors/stack_test.go:207\n" + + "github.com/pkg/errors.TestStackTraceFormat\n" + + "\t.+/github.com/pkg/errors/stack_test.go:258", + }, { + stackTrace()[:2], + "%#v", + `\[\]errors.Frame{stack_test.go:207, stack_test.go:266}`, + }} + + for i, tt := range tests { + testFormatRegexp(t, i, tt.StackTrace, tt.format, tt.want) + } +} diff --git a/vendor/github.com/pquerna/ffjson/.travis.yml b/vendor/github.com/pquerna/ffjson/.travis.yml index 1c22150..b361e73 100644 --- a/vendor/github.com/pquerna/ffjson/.travis.yml +++ b/vendor/github.com/pquerna/ffjson/.travis.yml @@ -4,7 +4,7 @@ install: - A=${PWD#*github.com/};A=${A%/ffjson};cd ../..;mv $A pquerna;cd pquerna/ffjson - go get -d -v -t ./... -script: make clean && make test && make test +script: make clean && make lint && make test && make test go: - 1.7 diff --git a/vendor/github.com/pquerna/ffjson/Makefile b/vendor/github.com/pquerna/ffjson/Makefile index 501c800..1567ad3 100644 --- a/vendor/github.com/pquerna/ffjson/Makefile +++ b/vendor/github.com/pquerna/ffjson/Makefile @@ -32,6 +32,10 @@ ffize: install ffjson -force-regenerate -reset-fields tests/types/ff/everything.go ffjson -force-regenerate tests/number/ff/number.go +lint: ffize + go get github.com/golang/lint/golint + golint --set_exit_status tests/... + bench: ffize all go test -v -benchmem -bench MarshalJSON github.com/pquerna/ffjson/tests go test -v -benchmem -bench MarshalJSON github.com/pquerna/ffjson/tests/goser github.com/pquerna/ffjson/tests/go.stripe diff --git a/vendor/github.com/pquerna/ffjson/fflib/v1/lexer.go b/vendor/github.com/pquerna/ffjson/fflib/v1/lexer.go index 1c25752..8ffd54b 100644 --- a/vendor/github.com/pquerna/ffjson/fflib/v1/lexer.go +++ b/vendor/github.com/pquerna/ffjson/fflib/v1/lexer.go @@ -553,11 +553,9 @@ func (ffl *FFLexer) scanField(start FFTok, capture bool) ([]byte, error) { } else { return nil, nil } - - default: - return nil, fmt.Errorf("ffjson: invalid capture type: %v", start) } - panic("not reached") + + return nil, fmt.Errorf("ffjson: invalid capture type: %v", start) } // Captures an entire field value, including recursive objects, diff --git a/vendor/github.com/pquerna/ffjson/fflib/v1/lexer_test.go b/vendor/github.com/pquerna/ffjson/fflib/v1/lexer_test.go index 9e98506..aa1aba8 100644 --- a/vendor/github.com/pquerna/ffjson/fflib/v1/lexer_test.go +++ b/vendor/github.com/pquerna/ffjson/fflib/v1/lexer_test.go @@ -75,8 +75,6 @@ func scanToTokCount(ffl *FFLexer, targetTok FFTok) (int, error) { return c, errors.New("Hit EOF before target token") } } - - return c, errors.New("Could not find target token.") } func TestBasicLexing(t *testing.T) { @@ -228,7 +226,7 @@ func tDouble(t *testing.T, input string, target float64) { err = scanToTok(ffl, FFTok_eof) if err != nil { - t.Fatal("Failed to find EOF after double. input: %v", input) + t.Fatalf("Failed to find EOF after double. input: %v", input) } } @@ -259,7 +257,7 @@ func tInt(t *testing.T, input string, target int64) { err = scanToTok(ffl, FFTok_eof) if err != nil { - t.Fatal("Failed to find EOF after int. input: %v", input) + t.Fatalf("Failed to find EOF after int. input: %v", input) } } diff --git a/vendor/github.com/pquerna/ffjson/fflib/v1/reader.go b/vendor/github.com/pquerna/ffjson/fflib/v1/reader.go index 5144e55..0f22c46 100644 --- a/vendor/github.com/pquerna/ffjson/fflib/v1/reader.go +++ b/vendor/github.com/pquerna/ffjson/fflib/v1/reader.go @@ -121,11 +121,12 @@ func (r *ffReader) ReadByte() (byte, error) { return r.s[r.i-1], nil } -func (r *ffReader) UnreadByte() { +func (r *ffReader) UnreadByte() error { if r.i <= 0 { panic("ffReader.UnreadByte: at beginning of slice") } r.i-- + return nil } func (r *ffReader) readU4(j int) (rune, error) { @@ -248,8 +249,6 @@ func (r *ffReader) SliceString(out DecodingBuffer) error { } continue } - - panic("ffjson: SliceString unreached exit") } // TODO(pquerna): consider combining wibth the normal byte mask. diff --git a/vendor/github.com/pquerna/ffjson/inception/decoder.go b/vendor/github.com/pquerna/ffjson/inception/decoder.go index c520761..908347a 100644 --- a/vendor/github.com/pquerna/ffjson/inception/decoder.go +++ b/vendor/github.com/pquerna/ffjson/inception/decoder.go @@ -319,5 +319,5 @@ func unquoteField(quoted bool) string { } func getTmpVarFor(name string) string { - return "tmp_" + strings.Replace(name, ".", "__", -1) + return "tmp" + strings.Replace(strings.Title(name), ".", "", -1) } diff --git a/vendor/github.com/pquerna/ffjson/inception/decoder_tpl.go b/vendor/github.com/pquerna/ffjson/inception/decoder_tpl.go index 9eba505..0985061 100644 --- a/vendor/github.com/pquerna/ffjson/inception/decoder_tpl.go +++ b/vendor/github.com/pquerna/ffjson/inception/decoder_tpl.go @@ -497,12 +497,12 @@ type header struct { var headerTxt = ` const ( - ffj_t_{{.SI.Name}}base = iota - ffj_t_{{.SI.Name}}no_such_key + ffjt{{.SI.Name}}base = iota + ffjt{{.SI.Name}}nosuchkey {{with $si := .SI}} {{range $index, $field := $si.Fields}} {{if ne $field.JsonName "-"}} - ffj_t_{{$si.Name}}_{{$field.Name}} + ffjt{{$si.Name}}{{$field.Name}} {{end}} {{end}} {{end}} @@ -511,7 +511,7 @@ const ( {{with $si := .SI}} {{range $index, $field := $si.Fields}} {{if ne $field.JsonName "-"}} -var ffj_key_{{$si.Name}}_{{$field.Name}} = []byte({{$field.JsonName}}) +var ffjKey{{$si.Name}}{{$field.Name}} = []byte({{$field.JsonName}}) {{end}} {{end}} {{end}} @@ -529,21 +529,23 @@ var ujFuncTxt = ` {{$si := .SI}} {{$ic := .IC}} -func (uj *{{.SI.Name}}) UnmarshalJSON(input []byte) error { - fs := fflib.NewFFLexer(input) - return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start) +// UnmarshalJSON umarshall json - template of ffjson +func (j *{{.SI.Name}}) UnmarshalJSON(input []byte) error { + fs := fflib.NewFFLexer(input) + return j.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start) } -func (uj *{{.SI.Name}}) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error { - var err error = nil - currentKey := ffj_t_{{.SI.Name}}base +// UnmarshalJSONFFLexer fast json unmarshall - template ffjson +func (j *{{.SI.Name}}) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error { + var err error + currentKey := ffjt{{.SI.Name}}base _ = currentKey tok := fflib.FFTok_init wantedTok := fflib.FFTok_init {{if eq .ResetFields true}} {{range $index, $field := $si.Fields}} - var ffj_set_{{$si.Name}}_{{$field.Name}} = false + var ffjSet{{$si.Name}}{{$field.Name}} = false {{end}} {{end}} @@ -588,7 +590,7 @@ mainparse: kn := fs.Output.Bytes() if len(kn) <= 0 { // "" case. hrm. - currentKey = ffj_t_{{.SI.Name}}no_such_key + currentKey = ffjt{{.SI.Name}}nosuchkey state = fflib.FFParse_want_colon goto mainparse } else { @@ -596,21 +598,21 @@ mainparse: {{range $byte, $fields := $si.FieldsByFirstByte}} case '{{$byte}}': {{range $index, $field := $fields}} - {{if ne $index 0 }}} else if {{else}}if {{end}} bytes.Equal(ffj_key_{{$si.Name}}_{{$field.Name}}, kn) { - currentKey = ffj_t_{{$si.Name}}_{{$field.Name}} + {{if ne $index 0 }}} else if {{else}}if {{end}} bytes.Equal(ffjKey{{$si.Name}}{{$field.Name}}, kn) { + currentKey = ffjt{{$si.Name}}{{$field.Name}} state = fflib.FFParse_want_colon goto mainparse {{end}} } {{end}} } {{range $index, $field := $si.ReverseFields}} - if {{$field.FoldFuncName}}(ffj_key_{{$si.Name}}_{{$field.Name}}, kn) { - currentKey = ffj_t_{{$si.Name}}_{{$field.Name}} + if {{$field.FoldFuncName}}(ffjKey{{$si.Name}}{{$field.Name}}, kn) { + currentKey = ffjt{{$si.Name}}{{$field.Name}} state = fflib.FFParse_want_colon goto mainparse } {{end}} - currentKey = ffj_t_{{.SI.Name}}no_such_key + currentKey = ffjt{{.SI.Name}}nosuchkey state = fflib.FFParse_want_colon goto mainparse } @@ -627,10 +629,10 @@ mainparse: if {{range $index, $v := .ValidValues}}{{if ne $index 0 }}||{{end}}tok == fflib.{{$v}}{{end}} { switch currentKey { {{range $index, $field := $si.Fields}} - case ffj_t_{{$si.Name}}_{{$field.Name}}: + case ffjt{{$si.Name}}{{$field.Name}}: goto handle_{{$field.Name}} {{end}} - case ffj_t_{{$si.Name}}no_such_key: + case ffjt{{$si.Name}}nosuchkey: err = fs.SkipField(tok) if err != nil { return fs.WrapErr(err) @@ -645,10 +647,10 @@ mainparse: } {{range $index, $field := $si.Fields}} handle_{{$field.Name}}: - {{with $fieldName := $field.Name | printf "uj.%s"}} + {{with $fieldName := $field.Name | printf "j.%s"}} {{handleField $ic $fieldName $field.Typ $field.Pointer $field.ForceString}} {{if eq $.ResetFields true}} - ffj_set_{{$si.Name}}_{{$field.Name}} = true + ffjSet{{$si.Name}}{{$field.Name}} = true {{end}} state = fflib.FFParse_after_value goto mainparse @@ -671,8 +673,8 @@ tokerror: done: {{if eq .ResetFields true}} {{range $index, $field := $si.Fields}} - if !ffj_set_{{$si.Name}}_{{$field.Name}} { - {{with $fieldName := $field.Name | printf "uj.%s"}} + if !ffjSet{{$si.Name}}{{$field.Name}} { + {{with $fieldName := $field.Name | printf "j.%s"}} {{if eq $field.Pointer true}} {{$fieldName}} = nil {{else if eq $field.Typ.Kind ` + strconv.FormatUint(uint64(reflect.Interface), 10) + `}} @@ -722,22 +724,21 @@ var handleUnmarshalerTxt = ` {{if eq .TakeAddr true }} {{.Name}} = nil {{end}} - state = fflib.FFParse_after_value - goto mainparse - } - {{if eq .Typ.Kind .Ptr }} - if {{.Name}} == nil { - {{.Name}} = new({{getType $ic .Typ.Elem.Name .Typ.Elem}}) - } - {{end}} - {{if eq .TakeAddr true }} - if {{.Name}} == nil { - {{.Name}} = new({{getType $ic .Typ.Name .Typ}}) + } else { + {{if eq .Typ.Kind .Ptr }} + if {{.Name}} == nil { + {{.Name}} = new({{getType $ic .Typ.Elem.Name .Typ.Elem}}) + } + {{end}} + {{if eq .TakeAddr true }} + if {{.Name}} == nil { + {{.Name}} = new({{getType $ic .Typ.Name .Typ}}) + } + {{end}} + err = {{.Name}}.UnmarshalJSONFFLexer(fs, fflib.FFParse_want_key) + if err != nil { + return err } - {{end}} - err = {{.Name}}.UnmarshalJSONFFLexer(fs, fflib.FFParse_want_key) - if err != nil { - return err } state = fflib.FFParse_after_value } @@ -748,23 +749,22 @@ var handleUnmarshalerTxt = ` {{if eq .TakeAddr true }} {{.Name}} = nil {{end}} - state = fflib.FFParse_after_value - goto mainparse - } + } else { - tbuf, err := fs.CaptureField(tok) - if err != nil { - return fs.WrapErr(err) - } + tbuf, err := fs.CaptureField(tok) + if err != nil { + return fs.WrapErr(err) + } - {{if eq .TakeAddr true }} - if {{.Name}} == nil { - {{.Name}} = new({{getType $ic .Typ.Name .Typ}}) - } - {{end}} - err = {{.Name}}.UnmarshalJSON(tbuf) - if err != nil { - return fs.WrapErr(err) + {{if eq .TakeAddr true }} + if {{.Name}} == nil { + {{.Name}} = new({{getType $ic .Typ.Name .Typ}}) + } + {{end}} + err = {{.Name}}.UnmarshalJSON(tbuf) + if err != nil { + return fs.WrapErr(err) + } } state = fflib.FFParse_after_value } diff --git a/vendor/github.com/pquerna/ffjson/inception/encoder.go b/vendor/github.com/pquerna/ffjson/inception/encoder.go index c78dd36..3e37a28 100644 --- a/vendor/github.com/pquerna/ffjson/inception/encoder.go +++ b/vendor/github.com/pquerna/ffjson/inception/encoder.go @@ -19,8 +19,9 @@ package ffjsoninception import ( "fmt" - "github.com/pquerna/ffjson/shared" "reflect" + + "github.com/pquerna/ffjson/shared" ) func typeInInception(ic *Inception, typ reflect.Type, f shared.Feature) bool { @@ -39,7 +40,7 @@ func typeInInception(ic *Inception, typ reflect.Type, f shared.Feature) bool { } func getOmitEmpty(ic *Inception, sf *StructField) string { - ptname := "mj." + sf.Name + ptname := "j." + sf.Name if sf.Pointer { ptname = "*" + ptname return "if true {\n" @@ -483,23 +484,25 @@ func CreateMarshalJSON(ic *Inception, si *StructInfo) error { conditionalWrites := lastConditional(si.Fields) out := "" - out += `func (mj *` + si.Name + `) MarshalJSON() ([]byte, error) {` + "\n" + out += "// MarshalJSON marshal bytes to json - template\n" + out += `func (j *` + si.Name + `) MarshalJSON() ([]byte, error) {` + "\n" out += `var buf fflib.Buffer` + "\n" - out += `if mj == nil {` + "\n" + out += `if j == nil {` + "\n" out += ` buf.WriteString("null")` + "\n" out += " return buf.Bytes(), nil" + "\n" out += `}` + "\n" - out += `err := mj.MarshalJSONBuf(&buf)` + "\n" + out += `err := j.MarshalJSONBuf(&buf)` + "\n" out += `if err != nil {` + "\n" out += " return nil, err" + "\n" out += `}` + "\n" out += `return buf.Bytes(), nil` + "\n" out += `}` + "\n" - out += `func (mj *` + si.Name + `) MarshalJSONBuf(buf fflib.EncodingBuffer) (error) {` + "\n" - out += ` if mj == nil {` + "\n" + out += "// MarshalJSONBuf marshal buff to json - template\n" + out += `func (j *` + si.Name + `) MarshalJSONBuf(buf fflib.EncodingBuffer) (error) {` + "\n" + out += ` if j == nil {` + "\n" out += ` buf.WriteString("null")` + "\n" out += " return nil" + "\n" out += ` }` + "\n" @@ -519,7 +522,7 @@ func CreateMarshalJSON(ic *Inception, si *StructInfo) error { } for _, f := range si.Fields { - out += getField(ic, f, "mj.") + out += getField(ic, f, "j.") } // Handling the last comma is tricky. diff --git a/vendor/github.com/pquerna/ffjson/inception/encoder_tpl.go b/vendor/github.com/pquerna/ffjson/inception/encoder_tpl.go index 8cafa62..22ab529 100644 --- a/vendor/github.com/pquerna/ffjson/inception/encoder_tpl.go +++ b/vendor/github.com/pquerna/ffjson/inception/encoder_tpl.go @@ -51,8 +51,7 @@ var handleMarshalerTxt = ` {{if eq .Typ.Kind .Ptr}} if {{.Name}} == nil { buf.WriteString("null") - return nil - } + } else { {{end}} {{if eq .MarshalJSONBuf true}} @@ -67,5 +66,8 @@ var handleMarshalerTxt = ` } buf.Write(obj) {{end}} + {{if eq .Typ.Kind .Ptr}} + } + {{end}} } ` diff --git a/vendor/github.com/pquerna/ffjson/inception/template.go b/vendor/github.com/pquerna/ffjson/inception/template.go index bbd49e1..121a23d 100644 --- a/vendor/github.com/pquerna/ffjson/inception/template.go +++ b/vendor/github.com/pquerna/ffjson/inception/template.go @@ -24,10 +24,8 @@ import ( ) const ffjsonTemplate = ` -// DO NOT EDIT! -// Code generated by ffjson +// Code generated by ffjson . DO NOT EDIT. // source: {{.InputPath}} -// DO NOT EDIT! package {{.PackageName}} diff --git a/vendor/github.com/pquerna/ffjson/tests/base.go b/vendor/github.com/pquerna/ffjson/tests/base.go index 8bdab4d..c4a111b 100644 --- a/vendor/github.com/pquerna/ffjson/tests/base.go +++ b/vendor/github.com/pquerna/ffjson/tests/base.go @@ -1,16 +1,18 @@ package tff +// Foo struct type Foo struct { Blah int } +// Record struct type Record struct { Timestamp int64 `json:"id,omitempty"` - OriginId uint32 + OriginID uint32 Bar Foo Method string `json:"meth"` - ReqId string - ServerIp string - RemoteIp string + ReqID string + ServerIP string + RemoteIP string BytesSent uint64 } diff --git a/vendor/github.com/pquerna/ffjson/tests/ff.go b/vendor/github.com/pquerna/ffjson/tests/ff.go index 678c3e8..bf6423d 100644 --- a/vendor/github.com/pquerna/ffjson/tests/ff.go +++ b/vendor/github.com/pquerna/ffjson/tests/ff.go @@ -23,21 +23,24 @@ import ( "time" ) +// FFFoo struc... just blah type FFFoo struct { Blah int } +// FFRecord struct type FFRecord struct { Timestamp int64 `json:"id,omitempty"` - OriginId uint32 + OriginID uint32 Bar FFFoo Method string `json:"meth"` - ReqId string - ServerIp string - RemoteIp string + ReqID string + ServerIP string + RemoteIP string BytesSent uint64 } +// TI18nName struct // ffjson: skip type TI18nName struct { Ændret int64 @@ -45,6 +48,7 @@ type TI18nName struct { Позната string } +// XI18nName struct type XI18nName struct { Ændret int64 Aוההקלדה uint32 @@ -53,565 +57,804 @@ type XI18nName struct { type mystring string +// TsortName struct // ffjson: skip type TsortName struct { C string B int `json:"A"` } + +// XsortName struct type XsortName struct { C string B int `json:"A"` } +// Tobj struct // ffjson: skip type Tobj struct { X Tint } + +// Xobj struct type Xobj struct { X Xint } +// Tduration struct // ffjson: skip type Tduration struct { X time.Duration } + +// Xduration struct type Xduration struct { X time.Duration } +// TtimePtr struct // ffjson: skip type TtimePtr struct { X *time.Time } + +// XtimePtr struct type XtimePtr struct { X *time.Time } +// Tarray struct // ffjson: skip type Tarray struct { X [3]int } + +// Xarray struct type Xarray struct { X [3]int } +// TarrayPtr struct // ffjson: skip type TarrayPtr struct { X [3]*int } + +// XarrayPtr struct type XarrayPtr struct { X [3]*int } +// Tslice struct // ffjson: skip type Tslice struct { X []int } + +//Xslice struct type Xslice struct { X []int } +// TslicePtr struct // ffjson: skip type TslicePtr struct { X []*int } + +// XslicePtr struct type XslicePtr struct { X []*int } +// TMapStringPtr struct +// ffjson: skip +type TMapStringPtr struct { + X map[string]*int +} + +// XMapStringPtr struct +type XMapStringPtr struct { + X map[string]*int +} + +// TslicePtrStruct struct +// ffjson: skip +type TslicePtrStruct struct { + X []*Xstring +} + +// XslicePtrStruct struct +type XslicePtrStruct struct { + X []*Xstring +} + +// TMapPtrStruct struct +// ffjson: skip +type TMapPtrStruct struct { + X map[string]*Xstring +} + +// XMapPtrStruct struct +type XMapPtrStruct struct { + X map[string]*Xstring +} + +// Tstring struct // ffjson: skip type Tstring struct { X string } + +// Xstring struct type Xstring struct { X string } +// Tmystring struct // ffjson: skip type Tmystring struct { X mystring } + +// Xmystring struct type Xmystring struct { X mystring } +// TmystringPtr struct // ffjson: skip type TmystringPtr struct { X *mystring } + +// XmystringPtr struct type XmystringPtr struct { X *mystring } +// TstringTagged struct // ffjson: skip type TstringTagged struct { X string `json:",string"` } + +// XstringTagged struct type XstringTagged struct { X string `json:",string"` } +// TstringTaggedPtr struct // ffjson: skip type TstringTaggedPtr struct { X *string `json:",string"` } +// XstringTaggedPtr struct type XstringTaggedPtr struct { X *string `json:",string"` } +// TintTagged struct // ffjson: skip type TintTagged struct { X int `json:",string"` } + +//XintTagged struct type XintTagged struct { X int `json:",string"` } +// TboolTagged struct // ffjson: skip type TboolTagged struct { X int `json:",string"` } + +// XboolTagged struct type XboolTagged struct { X int `json:",string"` } +// TMapStringString struct // ffjson: skip type TMapStringString struct { X map[string]string } + +// XMapStringString struct type XMapStringString struct { X map[string]string } +// Tbool struct // ffjson: skip type Tbool struct { X bool } + +// Xbool struct type Xbool struct { X bool } +// Tint struct // ffjson: skip type Tint struct { X int } + +// Xint struct type Xint struct { X int } +// Tbyte struct // ffjson: skip type Tbyte struct { X byte } + +// Xbyte struct type Xbyte struct { X byte } +// Tint8 struct // ffjson: skip type Tint8 struct { X int8 } + +// Xint8 struct type Xint8 struct { X int8 } +// Tint16 struct // ffjson: skip type Tint16 struct { X int16 } + +// Xint16 stuct type Xint16 struct { X int16 } +// Tint32 struct // ffjson: skip type Tint32 struct { X int32 } + +// Xint32 struct type Xint32 struct { X int32 } +// Tint64 struct // ffjson: skip type Tint64 struct { X int64 } + +// Xint64 struct type Xint64 struct { X int64 } +// Tuint struct // ffjson: skip type Tuint struct { X uint } + +// Xuint struct type Xuint struct { X uint } +// Tuint8 struct // ffjson: skip type Tuint8 struct { X uint8 } + +// Xuint8 struct type Xuint8 struct { X uint8 } +// Tuint16 struct // ffjson: skip type Tuint16 struct { X uint16 } + +// Xuint16 struct type Xuint16 struct { X uint16 } +// Tuint32 struct // ffjson: skip type Tuint32 struct { X uint32 } + +// Xuint32 struct type Xuint32 struct { X uint32 } +// Tuint64 struct // ffjson: skip type Tuint64 struct { X uint64 } + +// Xuint64 struct type Xuint64 struct { X uint64 } +// Tuintptr struct // ffjson: skip type Tuintptr struct { X uintptr } + +// Xuintptr struct type Xuintptr struct { X uintptr } +// Tfloat32 struct // ffjson: skip type Tfloat32 struct { X float32 } + +// Xfloat32 struct type Xfloat32 struct { X float32 } +// Tfloat64 struct // ffjson: skip type Tfloat64 struct { X float64 } + +// Xfloat64 struct type Xfloat64 struct { X float64 } +// ATduration struct // Arrays // ffjson: skip type ATduration struct { X [3]time.Duration } + +// AXduration struct type AXduration struct { X [3]time.Duration } +// ATbool struct // ffjson: skip type ATbool struct { X [3]bool } + +// AXbool struct type AXbool struct { X [3]bool } +// ATint struct // ffjson: skip type ATint struct { X [3]int } + +// AXint struct type AXint struct { X [3]int } +// ATbyte struct // ffjson: skip type ATbyte struct { X [3]byte } + +// AXbyte struct type AXbyte struct { X [3]byte } +// ATint8 struct // ffjson: skip type ATint8 struct { X [3]int8 } + +// AXint8 struct type AXint8 struct { X [3]int8 } +// ATint16 struct // ffjson: skip type ATint16 struct { X [3]int16 } + +// AXint16 struct type AXint16 struct { X [3]int16 } +// ATint32 struct // ffjson: skip type ATint32 struct { X [3]int32 } + +// AXint32 struct type AXint32 struct { X [3]int32 } +// ATint64 struct // ffjson: skip type ATint64 struct { X [3]int64 } + +// AXint64 struct type AXint64 struct { X [3]int64 } +// ATuint struct // ffjson: skip type ATuint struct { X [3]uint } + +// AXuint struct type AXuint struct { X [3]uint } +// ATuint8 struct // ffjson: skip type ATuint8 struct { X [3]uint8 } + +// AXuint8 struct type AXuint8 struct { X [3]uint8 } +// ATuint16 struct // ffjson: skip type ATuint16 struct { X [3]uint16 } + +// AXuint16 struct type AXuint16 struct { X [3]uint16 } +// ATuint32 struct // ffjson: skip type ATuint32 struct { X [3]uint32 } + +// AXuint32 struct type AXuint32 struct { X [3]uint32 } +// ATuint64 struct // ffjson: skip type ATuint64 struct { X [3]uint64 } + +// AXuint64 struct type AXuint64 struct { X [3]uint64 } +// ATuintptr struct // ffjson: skip type ATuintptr struct { X [3]uintptr } + +// AXuintptr struct type AXuintptr struct { X [3]uintptr } +// ATfloat32 struct // ffjson: skip type ATfloat32 struct { X [3]float32 } + +// AXfloat32 struct type AXfloat32 struct { X [3]float32 } +// ATfloat64 struct // ffjson: skip type ATfloat64 struct { X [3]float64 } + +// AXfloat64 struct type AXfloat64 struct { X [3]float64 } +// ATtime struct // ffjson: skip type ATtime struct { X [3]time.Time } + +// AXtime struct type AXtime struct { X [3]time.Time } +// STduration struct // Slices // ffjson: skip type STduration struct { X []time.Duration } + +// SXduration struct type SXduration struct { X []time.Duration } +// STbool struct // ffjson: skip type STbool struct { X []bool } + +// SXbool struct type SXbool struct { X []bool } +// STint struct // ffjson: skip type STint struct { X []int } + +// SXint struct type SXint struct { X []int } +// STbyte struct // ffjson: skip type STbyte struct { X []byte } + +// SXbyte struct type SXbyte struct { X []byte } +// STint8 struct // ffjson: skip type STint8 struct { X []int8 } + +// SXint8 struct type SXint8 struct { X []int8 } +// STint16 struct // ffjson: skip type STint16 struct { X []int16 } + +// SXint16 struct type SXint16 struct { X []int16 } +// STint32 struct // ffjson: skip type STint32 struct { X []int32 } + +// SXint32 struct type SXint32 struct { X []int32 } +// STint64 struct // ffjson: skip type STint64 struct { X []int64 } + +// SXint64 struct type SXint64 struct { X []int64 } +// STuint struct // ffjson: skip type STuint struct { X []uint } + +// SXuint struct type SXuint struct { X []uint } +// STuint8 struct // ffjson: skip type STuint8 struct { X []uint8 } + +// SXuint8 struct type SXuint8 struct { X []uint8 } +// STuint16 struct // ffjson: skip type STuint16 struct { X []uint16 } + +// SXuint16 struct type SXuint16 struct { X []uint16 } +// STuint32 struct // ffjson: skip type STuint32 struct { X []uint32 } + +// SXuint32 struct type SXuint32 struct { X []uint32 } +// STuint64 struct // ffjson: skip type STuint64 struct { X []uint64 } + +// SXuint64 struct type SXuint64 struct { X []uint64 } +// STuintptr struct // ffjson: skip type STuintptr struct { X []uintptr } + +// SXuintptr struct type SXuintptr struct { X []uintptr } +// STfloat32 struct // ffjson: skip type STfloat32 struct { X []float32 } + +// SXfloat32 struct type SXfloat32 struct { X []float32 } +// STfloat64 struct // ffjson: skip type STfloat64 struct { X []float64 } + +// SXfloat64 struct type SXfloat64 struct { X []float64 } +// STtime struct // ffjson: skip type STtime struct { X []time.Time } + +// SXtime struct type SXtime struct { X []time.Time } +// TMapStringMapString struct // Nested // ffjson: skip type TMapStringMapString struct { X map[string]map[string]string } + +// XMapStringMapString struct type XMapStringMapString struct { X map[string]map[string]string } +// TMapStringAString struct // ffjson: skip type TMapStringAString struct { X map[string][3]string } + +// XMapStringAString struct type XMapStringAString struct { X map[string][3]string } +// TSAAtring struct // ffjson: skip type TSAAtring struct { X [2][3]string } + +// XSAAtring struct type XSAAtring struct { X [2][3]string } +// TSAString struct // ffjson: skip type TSAString struct { X [][3]string } + +// XSAString struct type XSAString struct { X [][3]string } -// Tests from golang test suite +// Optionals tests from golang test suite type Optionals struct { Sr string `json:"sr"` So string `json:"so,omitempty"` @@ -657,6 +900,7 @@ var optionalsExpected = `{ "sto": {} }` +// StringTag struct type StringTag struct { BoolStr bool `json:",string"` IntStr int64 `json:",string"` @@ -671,6 +915,7 @@ var stringTagExpected = `{ "StrStr": "\"xzbit\"" }` +// OmitAll struct type OmitAll struct { Ostr string `json:",omitempty"` Oint int `json:",omitempty"` @@ -691,6 +936,7 @@ type OmitAll struct { var omitAllExpected = `{}` +// NoExported struct type NoExported struct { field1 string field2 string @@ -699,6 +945,7 @@ type NoExported struct { var noExportedExpected = `{}` +// OmitFirst struct type OmitFirst struct { Ostr string `json:",omitempty"` Str string @@ -708,6 +955,7 @@ var omitFirstExpected = `{ "Str": "" }` +// OmitLast struct type OmitLast struct { Xstr string `json:",omitempty"` Str string @@ -722,14 +970,17 @@ type renamedByte byte type renamedByteSlice []byte type renamedRenamedByteSlice []renamedByte +// ByteSliceNormal struct type ByteSliceNormal struct { X []byte } +// ByteSliceRenamed stuct type ByteSliceRenamed struct { X renamedByteSlice } +// ByteSliceDoubleRenamed struct type ByteSliceDoubleRenamed struct { X renamedRenamedByteSlice } @@ -737,10 +988,12 @@ type ByteSliceDoubleRenamed struct { // Ref has Marshaler and Unmarshaler methods with pointer receiver. type Ref int +// MarshalJSON func func (*Ref) MarshalJSON() ([]byte, error) { return []byte(`"ref"`), nil } +// UnmarshalJSON func func (r *Ref) UnmarshalJSON([]byte) error { *r = 12 return nil @@ -749,6 +1002,7 @@ func (r *Ref) UnmarshalJSON([]byte) error { // Val has Marshaler methods with value receiver. type Val int +// MarshalJSON var func (Val) MarshalJSON() ([]byte, error) { return []byte(`"val"`), nil } @@ -756,10 +1010,12 @@ func (Val) MarshalJSON() ([]byte, error) { // RefText has Marshaler and Unmarshaler methods with pointer receiver. type RefText int +// MarshalText func func (*RefText) MarshalText() ([]byte, error) { return []byte(`"ref"`), nil } +// UnmarshalText func func (r *RefText) UnmarshalText([]byte) error { *r = 13 return nil @@ -768,6 +1024,7 @@ func (r *RefText) UnmarshalText([]byte) error { // ValText has Marshaler methods with value receiver. type ValText int +// MarshalText val func (ValText) MarshalText() ([]byte, error) { return []byte(`"val"`), nil } @@ -775,6 +1032,7 @@ func (ValText) MarshalText() ([]byte, error) { // C implements Marshaler and returns unescaped JSON. type C int +// MarshalJSON func func (C) MarshalJSON() ([]byte, error) { return []byte(`"<&>"`), nil } @@ -782,42 +1040,52 @@ func (C) MarshalJSON() ([]byte, error) { // CText implements Marshaler and returns unescaped text. type CText int +// MarshalText func func (CText) MarshalText() ([]byte, error) { return []byte(`"<&>"`), nil } +// ErrGiveError generates error var ErrGiveError = errors.New("GiveError error") // GiveError always returns an ErrGiveError on Marshal/Unmarshal. type GiveError struct{} +// MarshalJSON func func (r GiveError) MarshalJSON() ([]byte, error) { return nil, ErrGiveError } +// UnmarshalJSON func func (r *GiveError) UnmarshalJSON([]byte) error { return ErrGiveError } +// IntType type type IntType int +// MyStruct struc type MyStruct struct { IntType } +// BugA struct type BugA struct { S string } +// BugB struct type BugB struct { BugA S string } +// BugC struct type BugC struct { S string } +// BugX struct // Legal Go: We never use the repeated embedded field (S). type BugX struct { A int @@ -825,16 +1093,19 @@ type BugX struct { BugB } +// BugD struct type BugD struct { // Same as BugA after tagging. XXX string `json:"S"` } +// BugY struct // BugD's tagged S field should dominate BugA's. type BugY struct { BugA BugD } +// BugZ struct // There are no tags here, so S should not appear. type BugZ struct { BugA @@ -842,6 +1113,7 @@ type BugZ struct { BugY // Contains a tagged S field through BugD; should not dominate. } +// FfFuzz struct type FfFuzz struct { A uint8 B uint16 @@ -875,7 +1147,7 @@ type FfFuzz struct { Gp *int32 Hp *int64 - Ip *float32 + IP *float32 Jp *float64 Mp *byte @@ -930,6 +1202,7 @@ type FfFuzz struct { Rap []*bool } +// FuzzOmitEmpty struct // ffjson: skip type FuzzOmitEmpty struct { A uint8 `json:",omitempty"` @@ -964,7 +1237,7 @@ type FuzzOmitEmpty struct { Gp *int32 `json:",omitempty"` Hp *int64 `json:",omitempty"` - Ip *float32 `json:",omitempty"` + IP *float32 `json:",omitempty"` Jp *float64 `json:",omitempty"` Mp *byte `json:",omitempty"` @@ -1019,6 +1292,7 @@ type FuzzOmitEmpty struct { Rap []*bool `json:",omitempty"` } +// FfFuzzOmitEmpty struct type FfFuzzOmitEmpty struct { A uint8 `json:",omitempty"` B uint16 `json:",omitempty"` @@ -1052,7 +1326,7 @@ type FfFuzzOmitEmpty struct { Gp *int32 `json:",omitempty"` Hp *int64 `json:",omitempty"` - Ip *float32 `json:",omitempty"` + IP *float32 `json:",omitempty"` Jp *float64 `json:",omitempty"` Mp *byte `json:",omitempty"` @@ -1107,6 +1381,7 @@ type FfFuzzOmitEmpty struct { Rap []*bool `json:",omitempty"` } +// FuzzString struct // ffjson: skip type FuzzString struct { A uint8 `json:",string"` @@ -1144,7 +1419,7 @@ type FuzzString struct { Gp *int32 `json:",string"` Hp *int64 `json:",string"` - Ip *float32 `json:",string"` + IP *float32 `json:",string"` Jp *float64 `json:",string"` Mp *byte `json:",string"` @@ -1158,6 +1433,7 @@ type FuzzString struct { // Sp *time.Time `json:",string"` } +// FfFuzzString struct type FfFuzzString struct { A uint8 `json:",string"` B uint16 `json:",string"` @@ -1194,7 +1470,7 @@ type FfFuzzString struct { Gp *int32 `json:",string"` Hp *int64 `json:",string"` - Ip *float32 `json:",string"` + IP *float32 `json:",string"` Jp *float64 `json:",string"` Mp *byte `json:",string"` @@ -1208,6 +1484,7 @@ type FfFuzzString struct { // Sp *time.Time `json:",string"` } +// TTestMaps struct // ffjson: skip type TTestMaps struct { Aa map[string]uint8 @@ -1253,22 +1530,26 @@ type TTestMaps struct { RaP map[string]*bool } +// XTestMaps struct type XTestMaps struct { TTestMaps } +// NoEncoder struct // ffjson: noencoder type NoEncoder struct { C string B int `json:"A"` } +// NoDecoder struct // ffjson: nodecoder type NoDecoder struct { C string B int `json:"A"` } +// TEmbeddedStructures struct // ffjson: skip type TEmbeddedStructures struct { X []interface{} @@ -1290,6 +1571,7 @@ type TEmbeddedStructures struct { Q [][]string } +// XEmbeddedStructures struct type XEmbeddedStructures struct { X []interface{} Y struct { @@ -1310,6 +1592,7 @@ type XEmbeddedStructures struct { Q [][]string } +// TRenameTypes struct // ffjson: skip // Side-effect of this test is also to verify that Encoder/Decoder skipping works. type TRenameTypes struct { @@ -1321,6 +1604,7 @@ type TRenameTypes struct { U *NoDecoder `json:"U-renamed"` } +// XRenameTypes struct type XRenameTypes struct { X struct { X int @@ -1330,111 +1614,256 @@ type XRenameTypes struct { U *NoDecoder `json:"U-renamed"` } +// ReTypedA type type ReTypedA uint8 + +// ReTypedB type type ReTypedB uint16 + +// ReTypedC type type ReTypedC uint32 + +// ReTypedD type type ReTypedD uint64 +// ReTypedE type type ReTypedE int8 + +// ReTypedF type type ReTypedF int16 + +// ReTypedG type type ReTypedG int32 + +// ReTypedH type type ReTypedH int64 +// ReTypedI type type ReTypedI float32 + +// ReTypedJ type type ReTypedJ float64 +// ReTypedM type type ReTypedM byte + +// ReTypedN type type ReTypedN rune +// ReTypedO type type ReTypedO int + +// ReTypedP type type ReTypedP uint + +// ReTypedQ type type ReTypedQ string + +// ReTypedR type type ReTypedR bool + +// ReTypedS type type ReTypedS time.Time +// ReTypedAp type type ReTypedAp *uint8 + +// ReTypedBp type type ReTypedBp *uint16 + +// ReTypedCp type type ReTypedCp *uint32 + +// ReTypedDp type type ReTypedDp *uint64 +// ReTypedEp type type ReTypedEp *int8 + +// ReTypedFp type type ReTypedFp *int16 + +// ReTypedGp type type ReTypedGp *int32 + +// ReTypedHp type type ReTypedHp *int64 -type ReTypedIp *float32 +// ReTypedIP type +type ReTypedIP *float32 + +// ReTypedJp type type ReTypedJp *float64 +// ReTypedMp type type ReTypedMp *byte + +// ReTypedNp type type ReTypedNp *rune +// ReTypedOp type type ReTypedOp *int + +// ReTypedPp type type ReTypedPp *uint + +// ReTypedQp type type ReTypedQp *string + +// ReTypedRp type type ReTypedRp *bool + +// ReTypedSp type type ReTypedSp *time.Time +// ReTypedAa type type ReTypedAa []uint8 + +// ReTypedBa type type ReTypedBa []uint16 + +// ReTypedCa type type ReTypedCa []uint32 + +// ReTypedDa type type ReTypedDa []uint64 +// ReTypedEa type type ReTypedEa []int8 + +// ReTypedFa type type ReTypedFa []int16 + +// ReTypedGa type type ReTypedGa []int32 + +// ReTypedHa type type ReTypedHa []int64 +// ReTypedIa type type ReTypedIa []float32 + +// ReTypedJa type type ReTypedJa []float64 +// ReTypedMa type type ReTypedMa []byte + +// ReTypedNa type type ReTypedNa []rune +// ReTypedOa type type ReTypedOa []int + +// ReTypedPa type type ReTypedPa []uint + +// ReTypedQa type type ReTypedQa []string + +// ReTypedRa type type ReTypedRa []bool +// ReTypedAap type type ReTypedAap []*uint8 + +// ReTypedBap type type ReTypedBap []*uint16 + +// ReTypedCap type type ReTypedCap []*uint32 + +// ReTypedDap type type ReTypedDap []*uint64 +// ReTypedEap type type ReTypedEap []*int8 + +// ReTypedFap type type ReTypedFap []*int16 + +// ReTypedGap type type ReTypedGap []*int32 + +// ReTypedHap type type ReTypedHap []*int64 +// ReTypedIap type type ReTypedIap []*float32 + +// ReTypedJap type type ReTypedJap []*float64 +// ReTypedMap type type ReTypedMap []*byte + +// ReTypedNap type type ReTypedNap []*rune +// ReTypedOap type type ReTypedOap []*int + +// ReTypedPap type type ReTypedPap []*uint + +// ReTypedQap type type ReTypedQap []*string + +// ReTypedRap type type ReTypedRap []*bool + +// ReTypedXa type type ReTypedXa NoDecoder + +// ReTypedXb type type ReTypedXb NoEncoder + +// ReTypedXc type type ReTypedXc *NoDecoder + +// ReTypedXd type type ReTypedXd *NoEncoder +// ReReTypedA type type ReReTypedA ReTypedA + +// ReReTypedS type type ReReTypedS ReTypedS + +// ReReTypedAp type type ReReTypedAp ReTypedAp + +// ReReTypedSp type type ReReTypedSp ReTypedSp + +// ReReTypedAa type type ReReTypedAa ReTypedAa + +// ReReTypedAap type type ReReTypedAap ReTypedAap + +// ReReTypedXa type type ReReTypedXa ReTypedXa + +// ReReTypedXb type type ReReTypedXb ReTypedXb + +// ReReTypedXc type type ReReTypedXc ReTypedXc + +// ReReTypedXd type type ReReTypedXd ReTypedXd +// RePReTypedA type type RePReTypedA *ReTypedA + +// ReSReTypedS type type ReSReTypedS []ReTypedS + +// ReAReTypedAp type type ReAReTypedAp [4]ReTypedAp +// TReTyped struct // ffjson: ignore type TReTyped struct { A ReTypedA @@ -1469,7 +1898,7 @@ type TReTyped struct { Gp ReTypedGp Hp ReTypedHp - Ip ReTypedIp + IP ReTypedIP Jp ReTypedJp Mp ReTypedMp @@ -1547,6 +1976,7 @@ type TReTyped struct { Rsrs ReSReTypedS } +// XReTyped struct type XReTyped struct { A ReTypedA B ReTypedB @@ -1580,7 +2010,7 @@ type XReTyped struct { Gp ReTypedGp Hp ReTypedHp - Ip ReTypedIp + IP ReTypedIP Jp ReTypedJp Mp ReTypedMp @@ -1658,6 +2088,7 @@ type XReTyped struct { Rsrs ReSReTypedS } +// TInlineStructs struct // ffjson: skip type TInlineStructs struct { B struct { @@ -1693,7 +2124,7 @@ type TInlineStructs struct { Gp *int32 Hp *int64 - Ip *float32 + IP *float32 Jp *float64 Mp *byte @@ -1757,6 +2188,7 @@ type TInlineStructs struct { } } +// XInlineStructs struct type XInlineStructs struct { B struct { A uint8 @@ -1791,7 +2223,7 @@ type XInlineStructs struct { Gp *int32 Hp *int64 - Ip *float32 + IP *float32 Jp *float64 Mp *byte @@ -1855,6 +2287,7 @@ type XInlineStructs struct { } } +// TDominantField struct // ffjson: skip type TDominantField struct { X *int `json:"Name,omitempty"` @@ -1864,6 +2297,7 @@ type TDominantField struct { A *struct{ X int } `json:"Name,omitempty"` } +// XDominantField struct type XDominantField struct { X *int `json:"Name,omitempty"` Y *int `json:"Name,omitempty"` diff --git a/vendor/github.com/pquerna/ffjson/tests/ff_test.go b/vendor/github.com/pquerna/ffjson/tests/ff_test.go index 17af84e..c17f2db 100644 --- a/vendor/github.com/pquerna/ffjson/tests/ff_test.go +++ b/vendor/github.com/pquerna/ffjson/tests/ff_test.go @@ -38,14 +38,14 @@ var outputFileOnError = false func newLogRecord() *Record { return &Record{ - OriginId: 11, + OriginID: 11, Method: "POST", } } func newLogFFRecord() *FFRecord { return &FFRecord{ - OriginId: 11, + OriginID: 11, Method: "POST", } } @@ -132,7 +132,7 @@ func BenchmarkMarshalJSONNativeReuse(b *testing.B) { func BenchmarkSimpleUnmarshal(b *testing.B) { record := newLogFFRecord() - buf := []byte(`{"id": 123213, "OriginId": 22, "meth": "GET"}`) + buf := []byte(`{"id": 123213, "OriginID": 22, "meth": "GET"}`) err := record.UnmarshalJSON(buf) if err != nil { b.Fatalf("UnmarshalJSON: %v", err) @@ -150,7 +150,7 @@ func BenchmarkSimpleUnmarshal(b *testing.B) { func BenchmarkSXimpleUnmarshalNative(b *testing.B) { record := newLogRecord() - buf := []byte(`{"id": 123213, "OriginId": 22, "meth": "GET"}`) + buf := []byte(`{"id": 123213, "OriginID": 22, "meth": "GET"}`) err := json.Unmarshal(buf, record) if err != nil { b.Fatalf("json.Unmarshal: %v", err) @@ -206,7 +206,7 @@ func TestMarshalEncoderError(t *testing.T) { } func TestUnmarshalFaster(t *testing.T) { - buf := []byte(`{"id": 123213, "OriginId": 22, "meth": "GET"}`) + buf := []byte(`{"id": 123213, "OriginID": 22, "meth": "GET"}`) record := newLogFFRecord() err := ffjson.UnmarshalFast(buf, record) require.NoError(t, err) @@ -221,7 +221,7 @@ func TestUnmarshalFaster(t *testing.T) { func TestSimpleUnmarshal(t *testing.T) { record := newLogFFRecord() - err := record.UnmarshalJSON([]byte(`{"id": 123213, "OriginId": 22, "meth": "GET"}`)) + err := record.UnmarshalJSON([]byte(`{"id": 123213, "OriginID": 22, "meth": "GET"}`)) if err != nil { t.Fatalf("UnmarshalJSON: %v", err) } @@ -230,8 +230,8 @@ func TestSimpleUnmarshal(t *testing.T) { t.Fatalf("record.Timestamp: expected: 0 got: %v", record.Timestamp) } - if record.OriginId != 22 { - t.Fatalf("record.OriginId: expected: 22 got: %v", record.OriginId) + if record.OriginID != 22 { + t.Fatalf("record.OriginID: expected: 22 got: %v", record.OriginID) } if record.Method != "GET" { @@ -382,7 +382,7 @@ func testExpectedXVal(t *testing.T, expected interface{}, xval string, ff interf func testExpectedError(t *testing.T, expected error, xval string, ff json.Unmarshaler) { buf := []byte(`{"X":` + xval + `}`) err := ff.UnmarshalJSON(buf) - require.Error(t, err, "ff[%T] failed to Unmarshal", ff) + require.Errorf(t, err, "ff[%T] failed to Unmarshal", ff) require.IsType(t, expected, err) } @@ -435,7 +435,7 @@ func TestArray(t *testing.T) { buf := []byte(`{"X": null}`) err := json.Unmarshal(buf, &x) require.NoError(t, err, "Unmarshal of null into array.") - var eq [3]int = [3]int{} + var eq = [3]int{} require.Equal(t, x.X, eq) } @@ -453,7 +453,7 @@ func TestSlice(t *testing.T) { buf := []byte(`{"X": null}`) err := json.Unmarshal(buf, &x) require.NoError(t, err, "Unmarshal of null into slice.") - var eq []int = nil + var eq []int require.Equal(t, x.X, eq) } @@ -463,6 +463,30 @@ func TestSlicePtr(t *testing.T) { testCycle(t, &TslicePtr{X: []*int{&v}}, &XslicePtr{X: []*int{}}) } +func TestSlicePtrNils(t *testing.T) { + v1 := 3 + v2 := 4 + testType(t, &TslicePtr{X: []*int{nil, &v1, nil, &v2}}, &XslicePtr{X: []*int{nil, &v1, nil, &v2}}) +} + +func TestMapPtrNils(t *testing.T) { + v1 := 3 + v2 := 4 + testType(t, &TMapStringPtr{X: map[string]*int{"a": nil, "b": &v1, "c": nil, "d": &v2}}, &XMapStringPtr{X: map[string]*int{"a": nil, "b": &v1, "c": nil, "d": &v2}}) +} + +func TestSlicePtrStructNils(t *testing.T) { + v1 := "v1" + v2 := "v2" + testType(t, &TslicePtrStruct{X: []*Xstring{nil, &Xstring{v1}, nil, &Xstring{v2}}}, &XslicePtrStruct{X: []*Xstring{nil, &Xstring{v1}, nil, &Xstring{v2}}}) +} + +func TestMapPtrStructNils(t *testing.T) { + v1 := "v1" + v2 := "v2" + testType(t, &TMapPtrStruct{X: map[string]*Xstring{"a": nil, "b": &Xstring{v1}, "c": nil, "d": &Xstring{v2}}}, &XMapPtrStruct{X: map[string]*Xstring{"a": nil, "b": &Xstring{v1}, "c": nil, "d": &Xstring{v2}}}) +} + func TestTimeDuration(t *testing.T) { testType(t, &Tduration{}, &Xduration{}) } diff --git a/vendor/github.com/pquerna/ffjson/tests/fuzz_test.go b/vendor/github.com/pquerna/ffjson/tests/fuzz_test.go index 92b27e9..9f2468e 100644 --- a/vendor/github.com/pquerna/ffjson/tests/fuzz_test.go +++ b/vendor/github.com/pquerna/ffjson/tests/fuzz_test.go @@ -62,7 +62,7 @@ type Fuzz struct { Gp *int32 Hp *int64 - Ip *float32 + IP *float32 Jp *float64 Mp *byte @@ -181,7 +181,7 @@ func TestFuzzCycle(t *testing.T) { rFF.Fp = r.Fp rFF.Gp = r.Gp rFF.Hp = r.Hp - rFF.Ip = r.Ip + rFF.IP = r.IP rFF.Jp = r.Jp rFF.Mp = r.Mp rFF.Np = r.Np @@ -269,7 +269,7 @@ func TestFuzzOmitCycle(t *testing.T) { rFF.Fp = r.Fp rFF.Gp = r.Gp rFF.Hp = r.Hp - rFF.Ip = r.Ip + rFF.IP = r.IP rFF.Jp = r.Jp rFF.Mp = r.Mp rFF.Np = r.Np @@ -363,7 +363,7 @@ func TestFuzzStringCycle(t *testing.T) { rFF.Fp = r.Fp rFF.Gp = r.Gp rFF.Hp = r.Hp - rFF.Ip = r.Ip + rFF.IP = r.IP rFF.Jp = r.Jp rFF.Mp = r.Mp rFF.Np = r.Np diff --git a/vendor/github.com/pquerna/ffjson/tests/go.stripe/base/customer.go b/vendor/github.com/pquerna/ffjson/tests/go.stripe/base/customer.go index d864987..de6f71e 100644 --- a/vendor/github.com/pquerna/ffjson/tests/go.stripe/base/customer.go +++ b/vendor/github.com/pquerna/ffjson/tests/go.stripe/base/customer.go @@ -8,7 +8,7 @@ import ( // // see https://stripe.com/docs/api#customer_object type Customer struct { - Id string `json:"id"` + ID string `json:"id"` Desc string `json:"description,omitempty"` Email string `json:"email,omitempty"` Created int64 `json:"created"` @@ -21,10 +21,11 @@ type Customer struct { DefaultCard string `json:"default_card"` } +// CardData detaiks about cards type CardData struct { Object string `json:"object"` Count int `json:"count"` - Url string `json:"url"` + URL string `json:"url"` Data []*Card `json:"data"` } @@ -41,7 +42,7 @@ const ( // Card represents details about a Credit Card entered into Stripe. type Card struct { - Id string `json:"id"` + ID string `json:"id"` Name string `json:"name,omitempty"` Type string `json:"type"` ExpMonth int `json:"exp_month"` @@ -65,7 +66,7 @@ type Card struct { // // see https://stripe.com/docs/api#discount_object type Discount struct { - Id string `json:"id"` + ID string `json:"id"` Customer string `json:"customer"` Start int64 `json:"start"` End int64 `json:"end"` @@ -76,7 +77,7 @@ type Discount struct { // // see https://stripe.com/docs/api#coupon_object type Coupon struct { - Id string `json:"id"` + ID string `json:"id"` Duration string `json:"duration"` PercentOff int `json:"percent_off"` DurationInMonths int `json:"duration_in_months,omitempty"` @@ -95,7 +96,7 @@ const ( SubscriptionUnpaid = "unpaid" ) -// Subscriptions represents a recurring charge a customer's card. +// Subscription represents a recurring charge a customer's card. // // see https://stripe.com/docs/api#subscription_object type Subscription struct { @@ -110,7 +111,7 @@ type Subscription struct { TrialEnd int64 `json:"trial_end"` CanceledAt int64 `json:"canceled_at"` CancelAtPeriodEnd bool `json:"cancel_at_period_end"` - Quantity int64 `json"quantity"` + Quantity int64 `json:"quantity"` } // Plan holds details about pricing information for different products and @@ -119,7 +120,7 @@ type Subscription struct { // // see https://stripe.com/docs/api#plan_object type Plan struct { - Id string `json:"id"` + ID string `json:"id"` Name string `json:"name"` Amount int64 `json:"amount"` Interval string `json:"interval"` @@ -129,10 +130,11 @@ type Plan struct { Livemode bool `json:"livemode"` } +// NewCustomer creates a new customer func NewCustomer() *Customer { return &Customer{ - Id: "hooN5ne7ug", + ID: "hooN5ne7ug", Desc: "A very nice customer.", Email: "customer@example.com", Created: time.Now().UnixNano(), @@ -141,11 +143,11 @@ func NewCustomer() *Customer { Cards: CardData{ Object: "A92F4CFE-8B6B-4176-873E-887AC0D120EB", Count: 1, - Url: "https://stripe.example.com/card/A92F4CFE-8B6B-4176-873E-887AC0D120EB", + URL: "https://stripe.example.com/card/A92F4CFE-8B6B-4176-873E-887AC0D120EB", Data: []*Card{ &Card{ Name: "John Smith", - Id: "7526EC97-A0B6-47B2-AAE5-17443626A116", + ID: "7526EC97-A0B6-47B2-AAE5-17443626A116", Fingerprint: "4242424242424242", ExpYear: time.Now().Year() + 1, ExpMonth: 1, @@ -153,12 +155,12 @@ func NewCustomer() *Customer { }, }, Discount: &Discount{ - Id: "Ee9ieZ8zie", + ID: "Ee9ieZ8zie", Customer: "hooN5ne7ug", Start: time.Now().UnixNano(), End: time.Now().UnixNano(), Coupon: &Coupon{ - Id: "ieQuo5Aiph", + ID: "ieQuo5Aiph", Duration: "2m", PercentOff: 10, DurationInMonths: 2, @@ -172,7 +174,7 @@ func NewCustomer() *Customer { Customer: "hooN5ne7ug", Status: SubscriptionActive, Plan: &Plan{ - Id: "gaiyeLua5u", + ID: "gaiyeLua5u", Name: "Great Plan (TM)", Amount: 10, Interval: "monthly", diff --git a/vendor/github.com/pquerna/ffjson/tests/go.stripe/ff/customer.go b/vendor/github.com/pquerna/ffjson/tests/go.stripe/ff/customer.go index d864987..fff5a22 100644 --- a/vendor/github.com/pquerna/ffjson/tests/go.stripe/ff/customer.go +++ b/vendor/github.com/pquerna/ffjson/tests/go.stripe/ff/customer.go @@ -8,7 +8,7 @@ import ( // // see https://stripe.com/docs/api#customer_object type Customer struct { - Id string `json:"id"` + ID string `json:"id"` Desc string `json:"description,omitempty"` Email string `json:"email,omitempty"` Created int64 `json:"created"` @@ -21,10 +21,11 @@ type Customer struct { DefaultCard string `json:"default_card"` } +// CardData struct type CardData struct { Object string `json:"object"` Count int `json:"count"` - Url string `json:"url"` + URL string `json:"url"` Data []*Card `json:"data"` } @@ -41,7 +42,7 @@ const ( // Card represents details about a Credit Card entered into Stripe. type Card struct { - Id string `json:"id"` + ID string `json:"id"` Name string `json:"name,omitempty"` Type string `json:"type"` ExpMonth int `json:"exp_month"` @@ -65,7 +66,7 @@ type Card struct { // // see https://stripe.com/docs/api#discount_object type Discount struct { - Id string `json:"id"` + ID string `json:"id"` Customer string `json:"customer"` Start int64 `json:"start"` End int64 `json:"end"` @@ -76,7 +77,7 @@ type Discount struct { // // see https://stripe.com/docs/api#coupon_object type Coupon struct { - Id string `json:"id"` + ID string `json:"id"` Duration string `json:"duration"` PercentOff int `json:"percent_off"` DurationInMonths int `json:"duration_in_months,omitempty"` @@ -95,7 +96,7 @@ const ( SubscriptionUnpaid = "unpaid" ) -// Subscriptions represents a recurring charge a customer's card. +// Subscription represents a recurring charge a customer's card. // // see https://stripe.com/docs/api#subscription_object type Subscription struct { @@ -110,7 +111,7 @@ type Subscription struct { TrialEnd int64 `json:"trial_end"` CanceledAt int64 `json:"canceled_at"` CancelAtPeriodEnd bool `json:"cancel_at_period_end"` - Quantity int64 `json"quantity"` + Quantity int64 `json:"quantity"` } // Plan holds details about pricing information for different products and @@ -119,7 +120,7 @@ type Subscription struct { // // see https://stripe.com/docs/api#plan_object type Plan struct { - Id string `json:"id"` + ID string `json:"id"` Name string `json:"name"` Amount int64 `json:"amount"` Interval string `json:"interval"` @@ -129,10 +130,11 @@ type Plan struct { Livemode bool `json:"livemode"` } +// NewCustomer creates a customer func NewCustomer() *Customer { return &Customer{ - Id: "hooN5ne7ug", + ID: "hooN5ne7ug", Desc: "A very nice customer.", Email: "customer@example.com", Created: time.Now().UnixNano(), @@ -141,11 +143,11 @@ func NewCustomer() *Customer { Cards: CardData{ Object: "A92F4CFE-8B6B-4176-873E-887AC0D120EB", Count: 1, - Url: "https://stripe.example.com/card/A92F4CFE-8B6B-4176-873E-887AC0D120EB", + URL: "https://stripe.example.com/card/A92F4CFE-8B6B-4176-873E-887AC0D120EB", Data: []*Card{ &Card{ Name: "John Smith", - Id: "7526EC97-A0B6-47B2-AAE5-17443626A116", + ID: "7526EC97-A0B6-47B2-AAE5-17443626A116", Fingerprint: "4242424242424242", ExpYear: time.Now().Year() + 1, ExpMonth: 1, @@ -153,12 +155,12 @@ func NewCustomer() *Customer { }, }, Discount: &Discount{ - Id: "Ee9ieZ8zie", + ID: "Ee9ieZ8zie", Customer: "hooN5ne7ug", Start: time.Now().UnixNano(), End: time.Now().UnixNano(), Coupon: &Coupon{ - Id: "ieQuo5Aiph", + ID: "ieQuo5Aiph", Duration: "2m", PercentOff: 10, DurationInMonths: 2, @@ -172,7 +174,7 @@ func NewCustomer() *Customer { Customer: "hooN5ne7ug", Status: SubscriptionActive, Plan: &Plan{ - Id: "gaiyeLua5u", + ID: "gaiyeLua5u", Name: "Great Plan (TM)", Amount: 10, Interval: "monthly", diff --git a/vendor/github.com/pquerna/ffjson/tests/goser/base/goser.go b/vendor/github.com/pquerna/ffjson/tests/goser/base/goser.go index 05f8b20..afc165a 100644 --- a/vendor/github.com/pquerna/ffjson/tests/goser/base/goser.go +++ b/vendor/github.com/pquerna/ffjson/tests/goser/base/goser.go @@ -23,106 +23,146 @@ import ( "time" ) +// CacheStatus of goser type CacheStatus int32 const ( - CacheStatus_CACHESTATUS_UNKNOWN CacheStatus = 0 - CacheStatus_MISS CacheStatus = 1 - CacheStatus_EXPIRED CacheStatus = 2 - CacheStatus_HIT CacheStatus = 3 + // CACHESTATUSUNKNOWN unknown cache status + CACHESTATUSUNKNOWN CacheStatus = 0 + // CACHESTATUSMISS miss cache status + CACHESTATUSMISS CacheStatus = 1 + // CACHESTATUSEXPIRED exipred cache status + CACHESTATUSEXPIRED CacheStatus = 2 + // CACHESTATUSHIT hit cache status + CACHESTATUSHIT CacheStatus = 3 ) -type HTTP_Protocol int32 +// HTTPProtocol of goser +type HTTPProtocol int32 const ( - HTTP_HTTP_PROTOCOL_UNKNOWN HTTP_Protocol = 0 - HTTP_HTTP10 HTTP_Protocol = 1 - HTTP_HTTP11 HTTP_Protocol = 2 + // HTTPPROTOCOLUNKNOWN http protocol unknown + HTTPPROTOCOLUNKNOWN HTTPProtocol = 0 + // HTTPPROTOCOL10 http protocol 10 + HTTPPROTOCOL10 HTTPProtocol = 1 + // HTTPPROTOCOL11 http protocol 11 + HTTPPROTOCOL11 HTTPProtocol = 2 ) -type HTTP_Method int32 +// HTTPMethod of goser +type HTTPMethod int32 const ( - HTTP_METHOD_UNKNOWN HTTP_Method = 0 - HTTP_GET HTTP_Method = 1 - HTTP_POST HTTP_Method = 2 - HTTP_DELETE HTTP_Method = 3 - HTTP_PUT HTTP_Method = 4 - HTTP_HEAD HTTP_Method = 5 - HTTP_PURGE HTTP_Method = 6 - HTTP_OPTIONS HTTP_Method = 7 - HTTP_PROPFIND HTTP_Method = 8 - HTTP_MKCOL HTTP_Method = 9 - HTTP_PATCH HTTP_Method = 10 + // HTTPMETHODUNKNOWN unknown http method + HTTPMETHODUNKNOWN HTTPMethod = 0 + // HTTPMETHODGET get http method + HTTPMETHODGET HTTPMethod = 1 + // HTTPMETHODPOST post http method + HTTPMETHODPOST HTTPMethod = 2 + // HTTPMETHODDELETE delete http method + HTTPMETHODDELETE HTTPMethod = 3 + // HTTPMETHODPUT put http method + HTTPMETHODPUT HTTPMethod = 4 + // HTTPMETHODHEAD head http method + HTTPMETHODHEAD HTTPMethod = 5 + // HTTPMETHODPURGE purge http method + HTTPMETHODPURGE HTTPMethod = 6 + // HTTPMETHODOPTIONS options http method + HTTPMETHODOPTIONS HTTPMethod = 7 + // HTTPMETHODPROPFIND propfind http method + HTTPMETHODPROPFIND HTTPMethod = 8 + // HTTPMETHODMKCOL mkcol http method + HTTPMETHODMKCOL HTTPMethod = 9 + // HTTPMETHODPATCH patch http method + HTTPMETHODPATCH HTTPMethod = 10 ) -type Origin_Protocol int32 +// OriginProtocol type +type OriginProtocol int32 const ( - Origin_ORIGIN_PROTOCOL_UNKNOWN Origin_Protocol = 0 - Origin_HTTP Origin_Protocol = 1 - Origin_HTTPS Origin_Protocol = 2 + // ORIGINPROTOCOLUNKNOWN origin protocol unknown + ORIGINPROTOCOLUNKNOWN OriginProtocol = 0 + // ORIGINPROTOCOLHTTP origin protocol http + ORIGINPROTOCOLHTTP OriginProtocol = 1 + // ORIGINPROTOCOLHTTPS origin protocol https + ORIGINPROTOCOLHTTPS OriginProtocol = 2 ) +// HTTP struct type type HTTP struct { - Protocol HTTP_Protocol `json:"protocol"` - Status uint32 `json:"status"` - HostStatus uint32 `json:"hostStatus"` - UpStatus uint32 `json:"upStatus"` - Method HTTP_Method `json:"method"` - ContentType string `json:"contentType"` - UserAgent string `json:"userAgent"` - Referer string `json:"referer"` - RequestURI string `json:"requestURI"` - XXX_unrecognized []byte `json:"-"` + Protocol HTTPProtocol `json:"protocol"` + Status uint32 `json:"status"` + HostStatus uint32 `json:"hostStatus"` + UpStatus uint32 `json:"upStatus"` + Method HTTPMethod `json:"method"` + ContentType string `json:"contentType"` + UserAgent string `json:"userAgent"` + Referer string `json:"referer"` + RequestURI string `json:"requestURI"` + Unrecognized []byte `json:"-"` } +// Origin struct type Origin struct { - Ip IP `json:"ip"` - Port uint32 `json:"port"` - Hostname string `json:"hostname"` - Protocol Origin_Protocol `json:"protocol"` + IP IP `json:"ip"` + Port uint32 `json:"port"` + Hostname string `json:"hostname"` + Protocol OriginProtocol `json:"protocol"` } +// ZonePlan type type ZonePlan int32 const ( - ZonePlan_ZONEPLAN_UNKNOWN ZonePlan = 0 - ZonePlan_FREE ZonePlan = 1 - ZonePlan_PRO ZonePlan = 2 - ZonePlan_BIZ ZonePlan = 3 - ZonePlan_ENT ZonePlan = 4 + // ZONEPLANUNKNOWN unknwon zone plan + ZONEPLANUNKNOWN ZonePlan = 0 + // ZONEPLANFREE free zone plan + ZONEPLANFREE ZonePlan = 1 + // ZONEPLANPRO pro zone plan + ZONEPLANPRO ZonePlan = 2 + // ZONEPLANBIZ biz zone plan + ZONEPLANBIZ ZonePlan = 3 + // ZONEPLANENT ent zone plan + ZONEPLANENT ZonePlan = 4 ) +// Country type type Country int32 const ( - Country_UNKNOWN Country = 0 - Country_US Country = 238 + // COUNTRYUNKNOWN unknwon country + COUNTRYUNKNOWN Country = 0 + // COUNTRYUS us country + COUNTRYUS Country = 238 ) +// Log struct type Log struct { - Timestamp int64 `json:"timestamp"` - ZoneId uint32 `json:"zoneId"` - ZonePlan ZonePlan `json:"zonePlan"` - Http HTTP `json:"http"` - Origin Origin `json:"origin"` - Country Country `json:"country"` - CacheStatus CacheStatus `json:"cacheStatus"` - ServerIp IP `json:"serverIp"` - ServerName string `json:"serverName"` - RemoteIp IP `json:"remoteIp"` - BytesDlv uint64 `json:"bytesDlv"` - RayId string `json:"rayId"` - XXX_unrecognized []byte `json:"-"` + Timestamp int64 `json:"timestamp"` + ZoneID uint32 `json:"zoneId"` + ZonePlan ZonePlan `json:"zonePlan"` + HTTP HTTP `json:"http"` + Origin Origin `json:"origin"` + Country Country `json:"country"` + CacheStatus CacheStatus `json:"cacheStatus"` + ServerIP IP `json:"serverIp"` + ServerName string `json:"serverName"` + RemoteIP IP `json:"remoteIp"` + BytesDlv uint64 `json:"bytesDlv"` + RayID string `json:"rayId"` + Unrecognized []byte `json:"-"` } +// IP type type IP net.IP +// MarshalJSON function func (ip IP) MarshalJSON() ([]byte, error) { return []byte("\"" + net.IP(ip).String() + "\""), nil } +// UnmarshalJSON function func (ip *IP) UnmarshalJSON(data []byte) error { if len(data) < 2 { return io.ErrShortBuffer @@ -133,17 +173,18 @@ func (ip *IP) UnmarshalJSON(data []byte) error { const userAgent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36" +// NewLog creates a new log func NewLog(record *Log) { record.Timestamp = time.Now().UnixNano() - record.ZoneId = 123456 - record.ZonePlan = ZonePlan_FREE + record.ZoneID = 123456 + record.ZonePlan = ZONEPLANFREE - record.Http = HTTP{ - Protocol: HTTP_HTTP11, + record.HTTP = HTTP{ + Protocol: HTTPPROTOCOL11, Status: 200, HostStatus: 503, UpStatus: 520, - Method: HTTP_GET, + Method: HTTPMETHODGET, ContentType: "text/html", UserAgent: userAgent, Referer: "https://www.cloudflare.com/", @@ -151,17 +192,17 @@ func NewLog(record *Log) { } record.Origin = Origin{ - Ip: IP(net.IPv4(1, 2, 3, 4).To4()), + IP: IP(net.IPv4(1, 2, 3, 4).To4()), Port: 8080, Hostname: "www.example.com", - Protocol: Origin_HTTPS, + Protocol: ORIGINPROTOCOLHTTPS, } - record.Country = Country_US - record.CacheStatus = CacheStatus_HIT - record.ServerIp = IP(net.IPv4(192, 168, 1, 1).To4()) + record.Country = COUNTRYUS + record.CacheStatus = CACHESTATUSHIT + record.ServerIP = IP(net.IPv4(192, 168, 1, 1).To4()) record.ServerName = "metal.cloudflare.com" - record.RemoteIp = IP(net.IPv4(10, 1, 2, 3).To4()) + record.RemoteIP = IP(net.IPv4(10, 1, 2, 3).To4()) record.BytesDlv = 123456 - record.RayId = "10c73629cce30078-LAX" + record.RayID = "10c73629cce30078-LAX" } diff --git a/vendor/github.com/pquerna/ffjson/tests/goser/ff/goser.go b/vendor/github.com/pquerna/ffjson/tests/goser/ff/goser.go index 4dc495f..d3e731d 100644 --- a/vendor/github.com/pquerna/ffjson/tests/goser/ff/goser.go +++ b/vendor/github.com/pquerna/ffjson/tests/goser/ff/goser.go @@ -25,106 +25,146 @@ import ( "time" ) +// CacheStatus of goser type CacheStatus int32 const ( - CacheStatus_CACHESTATUS_UNKNOWN CacheStatus = 0 - CacheStatus_MISS CacheStatus = 1 - CacheStatus_EXPIRED CacheStatus = 2 - CacheStatus_HIT CacheStatus = 3 + // CACHESTATUSUNKNOWN unknown cache status + CACHESTATUSUNKNOWN CacheStatus = 0 + // CACHESTATUSMISS miss cache status + CACHESTATUSMISS CacheStatus = 1 + // CACHESTATUSEXPIRED exipred cache status + CACHESTATUSEXPIRED CacheStatus = 2 + // CACHESTATUSHIT hit cache status + CACHESTATUSHIT CacheStatus = 3 ) -type HTTP_Protocol int32 +// HTTPProtocol of goser +type HTTPProtocol int32 const ( - HTTP_HTTP_PROTOCOL_UNKNOWN HTTP_Protocol = 0 - HTTP_HTTP10 HTTP_Protocol = 1 - HTTP_HTTP11 HTTP_Protocol = 2 + // HTTPPROTOCOLUNKNOWN http protocol unknown + HTTPPROTOCOLUNKNOWN HTTPProtocol = 0 + // HTTPPROTOCOL10 http protocol 10 + HTTPPROTOCOL10 HTTPProtocol = 1 + // HTTPPROTOCOL11 http protocol 11 + HTTPPROTOCOL11 HTTPProtocol = 2 ) -type HTTP_Method int32 +// HTTPMethod of goser +type HTTPMethod int32 const ( - HTTP_METHOD_UNKNOWN HTTP_Method = 0 - HTTP_GET HTTP_Method = 1 - HTTP_POST HTTP_Method = 2 - HTTP_DELETE HTTP_Method = 3 - HTTP_PUT HTTP_Method = 4 - HTTP_HEAD HTTP_Method = 5 - HTTP_PURGE HTTP_Method = 6 - HTTP_OPTIONS HTTP_Method = 7 - HTTP_PROPFIND HTTP_Method = 8 - HTTP_MKCOL HTTP_Method = 9 - HTTP_PATCH HTTP_Method = 10 + // HTTPMETHODUNKNOWN unknown http method + HTTPMETHODUNKNOWN HTTPMethod = 0 + // HTTPMETHODGET get http method + HTTPMETHODGET HTTPMethod = 1 + // HTTPMETHODPOST post http method + HTTPMETHODPOST HTTPMethod = 2 + // HTTPMETHODDELETE delete http method + HTTPMETHODDELETE HTTPMethod = 3 + // HTTPMETHODPUT put http method + HTTPMETHODPUT HTTPMethod = 4 + // HTTPMETHODHEAD head http method + HTTPMETHODHEAD HTTPMethod = 5 + // HTTPMETHODPURGE purge http method + HTTPMETHODPURGE HTTPMethod = 6 + // HTTPMETHODOPTIONS options http method + HTTPMETHODOPTIONS HTTPMethod = 7 + // HTTPMETHODPROPFIND propfind http method + HTTPMETHODPROPFIND HTTPMethod = 8 + // HTTPMETHODMKCOL mkcol http method + HTTPMETHODMKCOL HTTPMethod = 9 + // HTTPMETHODPATCH patch http method + HTTPMETHODPATCH HTTPMethod = 10 ) -type Origin_Protocol int32 +// OriginProtocol type +type OriginProtocol int32 const ( - Origin_ORIGIN_PROTOCOL_UNKNOWN Origin_Protocol = 0 - Origin_HTTP Origin_Protocol = 1 - Origin_HTTPS Origin_Protocol = 2 + // ORIGINPROTOCOLUNKNOWN origin protocol unknown + ORIGINPROTOCOLUNKNOWN OriginProtocol = 0 + // ORIGINPROTOCOLHTTP origin protocol http + ORIGINPROTOCOLHTTP OriginProtocol = 1 + // ORIGINPROTOCOLHTTPS origin protocol https + ORIGINPROTOCOLHTTPS OriginProtocol = 2 ) +// HTTP struct type type HTTP struct { - Protocol HTTP_Protocol `json:"protocol"` - Status uint32 `json:"status"` - HostStatus uint32 `json:"hostStatus"` - UpStatus uint32 `json:"upStatus"` - Method HTTP_Method `json:"method"` - ContentType string `json:"contentType"` - UserAgent string `json:"userAgent"` - Referer string `json:"referer"` - RequestURI string `json:"requestURI"` - XXX_unrecognized []byte `json:"-"` + Protocol HTTPProtocol `json:"protocol"` + Status uint32 `json:"status"` + HostStatus uint32 `json:"hostStatus"` + UpStatus uint32 `json:"upStatus"` + Method HTTPMethod `json:"method"` + ContentType string `json:"contentType"` + UserAgent string `json:"userAgent"` + Referer string `json:"referer"` + RequestURI string `json:"requestURI"` + Unrecognized []byte `json:"-"` } +// Origin struct type Origin struct { - Ip IP `json:"ip"` - Port uint32 `json:"port"` - Hostname string `json:"hostname"` - Protocol Origin_Protocol `json:"protocol"` + IP IP `json:"ip"` + Port uint32 `json:"port"` + Hostname string `json:"hostname"` + Protocol OriginProtocol `json:"protocol"` } +// ZonePlan type type ZonePlan int32 const ( - ZonePlan_ZONEPLAN_UNKNOWN ZonePlan = 0 - ZonePlan_FREE ZonePlan = 1 - ZonePlan_PRO ZonePlan = 2 - ZonePlan_BIZ ZonePlan = 3 - ZonePlan_ENT ZonePlan = 4 + // ZONEPLANUNKNOWN unknwon zone plan + ZONEPLANUNKNOWN ZonePlan = 0 + // ZONEPLANFREE free zone plan + ZONEPLANFREE ZonePlan = 1 + // ZONEPLANPRO pro zone plan + ZONEPLANPRO ZonePlan = 2 + // ZONEPLANBIZ biz zone plan + ZONEPLANBIZ ZonePlan = 3 + // ZONEPLANENT ent zone plan + ZONEPLANENT ZonePlan = 4 ) +// Country type type Country int32 const ( - Country_UNKNOWN Country = 0 - Country_US Country = 238 + // COUNTRYUNKNOWN unknwon country + COUNTRYUNKNOWN Country = 0 + // COUNTRYUS us country + COUNTRYUS Country = 238 ) +// Log struct type Log struct { - Timestamp int64 `json:"timestamp"` - ZoneId uint32 `json:"zoneId"` - ZonePlan ZonePlan `json:"zonePlan"` - Http HTTP `json:"http"` - Origin Origin `json:"origin"` - Country Country `json:"country"` - CacheStatus CacheStatus `json:"cacheStatus"` - ServerIp IP `json:"serverIp"` - ServerName string `json:"serverName"` - RemoteIp IP `json:"remoteIp"` - BytesDlv uint64 `json:"bytesDlv"` - RayId string `json:"rayId"` - XXX_unrecognized []byte `json:"-"` + Timestamp int64 `json:"timestamp"` + ZoneID uint32 `json:"zoneId"` + ZonePlan ZonePlan `json:"zonePlan"` + HTTP HTTP `json:"http"` + Origin Origin `json:"origin"` + Country Country `json:"country"` + CacheStatus CacheStatus `json:"cacheStatus"` + ServerIP IP `json:"serverIp"` + ServerName string `json:"serverName"` + RemoteIP IP `json:"remoteIp"` + BytesDlv uint64 `json:"bytesDlv"` + RayID string `json:"rayId"` + Unrecognized []byte `json:"-"` } +// IP type type IP net.IP +// MarshalJSON set ip to json func (ip IP) MarshalJSON() ([]byte, error) { return []byte("\"" + net.IP(ip).String() + "\""), nil } +// MarshalJSONBuf set ip to json with buf func (ip IP) MarshalJSONBuf(buf fflib.EncodingBuffer) error { buf.WriteByte('"') buf.WriteString(net.IP(ip).String()) @@ -132,6 +172,7 @@ func (ip IP) MarshalJSONBuf(buf fflib.EncodingBuffer) error { return nil } +// UnmarshalJSON umarshall json to ip func (ip *IP) UnmarshalJSON(data []byte) error { if len(data) < 2 { return io.ErrShortBuffer @@ -142,17 +183,18 @@ func (ip *IP) UnmarshalJSON(data []byte) error { const userAgent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36" +// NewLog creates a new log func NewLog(record *Log) { record.Timestamp = time.Now().UnixNano() - record.ZoneId = 123456 - record.ZonePlan = ZonePlan_FREE + record.ZoneID = 123456 + record.ZonePlan = ZONEPLANFREE - record.Http = HTTP{ - Protocol: HTTP_HTTP11, + record.HTTP = HTTP{ + Protocol: HTTPPROTOCOL11, Status: 200, HostStatus: 503, UpStatus: 520, - Method: HTTP_GET, + Method: HTTPMETHODGET, ContentType: "text/html", UserAgent: userAgent, Referer: "https://www.cloudflare.com/", @@ -160,17 +202,17 @@ func NewLog(record *Log) { } record.Origin = Origin{ - Ip: IP(net.IPv4(1, 2, 3, 4).To4()), + IP: IP(net.IPv4(1, 2, 3, 4).To4()), Port: 8080, Hostname: "www.example.com", - Protocol: Origin_HTTPS, + Protocol: ORIGINPROTOCOLHTTPS, } - record.Country = Country_US - record.CacheStatus = CacheStatus_HIT - record.ServerIp = IP(net.IPv4(192, 168, 1, 1).To4()) + record.Country = COUNTRYUS + record.CacheStatus = CACHESTATUSHIT + record.ServerIP = IP(net.IPv4(192, 168, 1, 1).To4()) record.ServerName = "metal.cloudflare.com" - record.RemoteIp = IP(net.IPv4(10, 1, 2, 3).To4()) + record.RemoteIP = IP(net.IPv4(10, 1, 2, 3).To4()) record.BytesDlv = 123456 - record.RayId = "10c73629cce30078-LAX" + record.RayID = "10c73629cce30078-LAX" } diff --git a/vendor/github.com/pquerna/ffjson/tests/number/ff/number.go b/vendor/github.com/pquerna/ffjson/tests/number/ff/number.go index 254af27..e219716 100644 --- a/vendor/github.com/pquerna/ffjson/tests/number/ff/number.go +++ b/vendor/github.com/pquerna/ffjson/tests/number/ff/number.go @@ -21,11 +21,13 @@ import ( "encoding/json" ) +// Number struct type Number struct { Int json.Number Float json.Number } +// NewNumber creates a new number func NewNumber(e *Number) { e.Int = "1" e.Float = "3.14" diff --git a/vendor/github.com/pquerna/ffjson/tests/number/number_test.go b/vendor/github.com/pquerna/ffjson/tests/number/number_test.go index 0efe81f..f76ff4c 100644 --- a/vendor/github.com/pquerna/ffjson/tests/number/number_test.go +++ b/vendor/github.com/pquerna/ffjson/tests/number/number_test.go @@ -19,9 +19,10 @@ package types import ( "encoding/json" - ff "github.com/pquerna/ffjson/tests/number/ff" "reflect" "testing" + + ff "github.com/pquerna/ffjson/tests/number/ff" ) func TestRoundTrip(t *testing.T) { @@ -54,7 +55,7 @@ func TestUnmarshalEmpty(t *testing.T) { } const ( - numberJson = `{ + numberJSON = `{ "Int": 1, "Float": 3.14 }` @@ -62,7 +63,7 @@ const ( func TestUnmarshalFull(t *testing.T) { record := ff.Number{} - err := record.UnmarshalJSON([]byte(numberJson)) + err := record.UnmarshalJSON([]byte(numberJSON)) if err != nil { t.Fatalf("UnmarshalJSON: %v", err) } diff --git a/vendor/github.com/pquerna/ffjson/tests/types/ff/everything.go b/vendor/github.com/pquerna/ffjson/tests/types/ff/everything.go index 71fa04e..2c85838 100644 --- a/vendor/github.com/pquerna/ffjson/tests/types/ff/everything.go +++ b/vendor/github.com/pquerna/ffjson/tests/types/ff/everything.go @@ -25,7 +25,10 @@ import ( "github.com/foo/vendored" ) +// ExpectedSomethingValue maybe expects something of value var ExpectedSomethingValue int8 + +// GoLangVersionPre16 indicates if golang before 1.6 var GoLangVersionPre16 bool func init() { @@ -78,22 +81,27 @@ func init() { } } +// SweetInterface is a sweet interface type SweetInterface interface { Cats() int } +// Cats they allways fallback on their legs type Cats struct { FieldOnCats int } +// Cats initialize a cat func (c *Cats) Cats() int { return 42 } +// Embed structure type Embed struct { SuperBool bool } +// Everything a bit of everything... take care what yy-ou which for type Everything struct { Embed Bool bool @@ -128,11 +136,13 @@ type nonexported struct { Something int8 } +// Foo a foo's structure (it's a bar !?!) type Foo struct { Bar int Baz vendored.Foo } +// NewEverything kind of renew the world func NewEverything(e *Everything) { e.SuperBool = true e.Bool = true diff --git a/vendor/github.com/pquerna/ffjson/tests/types/types_test.go b/vendor/github.com/pquerna/ffjson/tests/types/types_test.go index f6db0a0..6f1106d 100644 --- a/vendor/github.com/pquerna/ffjson/tests/types/types_test.go +++ b/vendor/github.com/pquerna/ffjson/tests/types/types_test.go @@ -19,10 +19,11 @@ package types import ( "encoding/json" - ff "github.com/pquerna/ffjson/tests/types/ff" "reflect" "strings" "testing" + + ff "github.com/pquerna/ffjson/tests/types/ff" ) func TestRoundTrip(t *testing.T) { @@ -72,7 +73,7 @@ func TestUnmarshalEmpty(t *testing.T) { } const ( - everythingJson = `{ + everythingJSON = `{ "Bool": true, "Int": 1, "Int8": 2, @@ -110,7 +111,7 @@ func TestUnmarshalFull(t *testing.T) { record := ff.Everything{} // TODO(pquerna): add unicode snowman // TODO(pquerna): handle Bar subtype - err := record.UnmarshalJSON([]byte(everythingJson)) + err := record.UnmarshalJSON([]byte(everythingJSON)) if err != nil { t.Fatalf("UnmarshalJSON: %v", err) } diff --git a/vendor/github.com/pquerna/ffjson/tests/vendor/github.com/foo/vendored/vendored.go b/vendor/github.com/pquerna/ffjson/tests/vendor/github.com/foo/vendored/vendored.go index c888a98..1b4d2ab 100644 --- a/vendor/github.com/pquerna/ffjson/tests/vendor/github.com/foo/vendored/vendored.go +++ b/vendor/github.com/pquerna/ffjson/tests/vendor/github.com/foo/vendored/vendored.go @@ -1,5 +1,6 @@ package vendored +// Foo struct... no bar this time type Foo struct { A string B int diff --git a/vendor/github.com/tinylib/msgp/.gitignore b/vendor/github.com/tinylib/msgp/.gitignore new file mode 100644 index 0000000..b77b56e --- /dev/null +++ b/vendor/github.com/tinylib/msgp/.gitignore @@ -0,0 +1,8 @@ +_generated/generated.go +_generated/generated_test.go +_generated/*_gen.go +_generated/*_gen_test.go +msgp/defgen_test.go +msgp/cover.out +*~ +*.coverprofile diff --git a/vendor/github.com/tinylib/msgp/.travis.yml b/vendor/github.com/tinylib/msgp/.travis.yml new file mode 100644 index 0000000..c070870 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/.travis.yml @@ -0,0 +1,11 @@ +language: go + +go: + - 1.9.x + - tip + +env: + - GIMME_ARCH=amd64 + - GIMME_ARCH=386 + +script: "make travis" diff --git a/vendor/github.com/tinylib/msgp/LICENSE b/vendor/github.com/tinylib/msgp/LICENSE new file mode 100644 index 0000000..14d6042 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/LICENSE @@ -0,0 +1,8 @@ +Copyright (c) 2014 Philip Hofer +Portions Copyright (c) 2009 The Go Authors (license at http://golang.org) where indicated + +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. \ No newline at end of file diff --git a/vendor/github.com/tinylib/msgp/Makefile b/vendor/github.com/tinylib/msgp/Makefile new file mode 100644 index 0000000..596efec --- /dev/null +++ b/vendor/github.com/tinylib/msgp/Makefile @@ -0,0 +1,52 @@ + +# NOTE: This Makefile is only necessary if you +# plan on developing the msgp tool and library. +# Installation can still be performed with a +# normal `go install`. + +# generated integration test files +GGEN = ./_generated/generated.go ./_generated/generated_test.go +# generated unit test files +MGEN = ./msgp/defgen_test.go + +SHELL := /bin/bash + +BIN = $(GOBIN)/msgp + +.PHONY: clean wipe install get-deps bench all + +$(BIN): */*.go + @go install ./... + +install: $(BIN) + +$(GGEN): ./_generated/def.go + go generate ./_generated + +$(MGEN): ./msgp/defs_test.go + go generate ./msgp + +test: all + go test -v ./... + +bench: all + go test -bench ./... + +clean: + $(RM) $(GGEN) $(MGEN) + +wipe: clean + $(RM) $(BIN) + +get-deps: + go get -d -t ./... + +all: install $(GGEN) $(MGEN) + +# travis CI enters here +travis: + go get -d -t ./... + go build -o "$${GOPATH%%:*}/bin/msgp" . + go generate ./msgp + go generate ./_generated + go test -v ./... diff --git a/vendor/github.com/tinylib/msgp/README.md b/vendor/github.com/tinylib/msgp/README.md new file mode 100644 index 0000000..1328cca --- /dev/null +++ b/vendor/github.com/tinylib/msgp/README.md @@ -0,0 +1,102 @@ +MessagePack Code Generator [![Build Status](https://travis-ci.org/tinylib/msgp.svg?branch=master)](https://travis-ci.org/tinylib/msgp) +======= + +This is a code generation tool and serialization library for [MessagePack](http://msgpack.org). You can read more about MessagePack [in the wiki](http://github.com/tinylib/msgp/wiki), or at [msgpack.org](http://msgpack.org). + +### Why? + +- Use Go as your schema language +- Performance +- [JSON interop](http://godoc.org/github.com/tinylib/msgp/msgp#CopyToJSON) +- [User-defined extensions](http://github.com/tinylib/msgp/wiki/Using-Extensions) +- Type safety +- Encoding flexibility + +### Quickstart + +In a source file, include the following directive: + +```go +//go:generate msgp +``` + +The `msgp` command will generate serialization methods for all exported type declarations in the file. + +You can [read more about the code generation options here](http://github.com/tinylib/msgp/wiki/Using-the-Code-Generator). + +### Use + +Field names can be set in much the same way as the `encoding/json` package. For example: + +```go +type Person struct { + Name string `msg:"name"` + Address string `msg:"address"` + Age int `msg:"age"` + Hidden string `msg:"-"` // this field is ignored + unexported bool // this field is also ignored +} +``` + +By default, the code generator will satisfy `msgp.Sizer`, `msgp.Encodable`, `msgp.Decodable`, +`msgp.Marshaler`, and `msgp.Unmarshaler`. Carefully-designed applications can use these methods to do +marshalling/unmarshalling with zero heap allocations. + +While `msgp.Marshaler` and `msgp.Unmarshaler` are quite similar to the standard library's +`json.Marshaler` and `json.Unmarshaler`, `msgp.Encodable` and `msgp.Decodable` are useful for +stream serialization. (`*msgp.Writer` and `*msgp.Reader` are essentially protocol-aware versions +of `*bufio.Writer` and `*bufio.Reader`, respectively.) + +### Features + + - Extremely fast generated code + - Test and benchmark generation + - JSON interoperability (see `msgp.CopyToJSON() and msgp.UnmarshalAsJSON()`) + - Support for complex type declarations + - Native support for Go's `time.Time`, `complex64`, and `complex128` types + - Generation of both `[]byte`-oriented and `io.Reader/io.Writer`-oriented methods + - Support for arbitrary type system extensions + - [Preprocessor directives](http://github.com/tinylib/msgp/wiki/Preprocessor-Directives) + - File-based dependency model means fast codegen regardless of source tree size. + +Consider the following: +```go +const Eight = 8 +type MyInt int +type Data []byte + +type Struct struct { + Which map[string]*MyInt `msg:"which"` + Other Data `msg:"other"` + Nums [Eight]float64 `msg:"nums"` +} +``` +As long as the declarations of `MyInt` and `Data` are in the same file as `Struct`, the parser will determine that the type information for `MyInt` and `Data` can be passed into the definition of `Struct` before its methods are generated. + +#### Extensions + +MessagePack supports defining your own types through "extensions," which are just a tuple of +the data "type" (`int8`) and the raw binary. You [can see a worked example in the wiki.](http://github.com/tinylib/msgp/wiki/Using-Extensions) + +### Status + +Mostly stable, in that no breaking changes have been made to the `/msgp` library in more than a year. Newer versions +of the code may generate different code than older versions for performance reasons. I (@philhofer) am aware of a +number of stability-critical commercial applications that use this code with good results. But, caveat emptor. + +You can read more about how `msgp` maps MessagePack types onto Go types [in the wiki](http://github.com/tinylib/msgp/wiki). + +Here some of the known limitations/restrictions: + +- Identifiers from outside the processed source file are assumed (optimistically) to satisfy the generator's interfaces. If this isn't the case, your code will fail to compile. +- Like most serializers, `chan` and `func` fields are ignored, as well as non-exported fields. +- Encoding of `interface{}` is limited to built-ins or types that have explicit encoding methods. +- _Maps must have `string` keys._ This is intentional (as it preserves JSON interop.) Although non-string map keys are not forbidden by the MessagePack standard, many serializers impose this restriction. (It also means *any* well-formed `struct` can be de-serialized into a `map[string]interface{}`.) The only exception to this rule is that the deserializers will allow you to read map keys encoded as `bin` types, due to the fact that some legacy encodings permitted this. (However, those values will still be cast to Go `string`s, and they will be converted to `str` types when re-encoded. It is the responsibility of the user to ensure that map keys are UTF-8 safe in this case.) The same rules hold true for JSON translation. + +If the output compiles, then there's a pretty good chance things are fine. (Plus, we generate tests for you.) *Please, please, please* file an issue if you think the generator is writing broken code. + +### Performance + +If you like benchmarks, see [here](http://bravenewgeek.com/so-you-wanna-go-fast/) and [here](https://github.com/alecthomas/go_serialization_benchmarks). + +As one might expect, the generated methods that deal with `[]byte` are faster for small objects, but the `io.Reader/Writer` methods are generally more memory-efficient (and, at some point, faster) for large (> 2KB) objects. diff --git a/vendor/github.com/tinylib/msgp/_generated/convert.go b/vendor/github.com/tinylib/msgp/_generated/convert.go new file mode 100644 index 0000000..964cff7 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/_generated/convert.go @@ -0,0 +1,83 @@ +package _generated + +import "errors" + +//go:generate msgp + +//msgp:shim ConvertStringVal as:string using:fromConvertStringVal/toConvertStringVal mode:convert +//msgp:ignore ConvertStringVal + +func fromConvertStringVal(v ConvertStringVal) (string, error) { + return string(v), nil +} + +func toConvertStringVal(s string) (ConvertStringVal, error) { + return ConvertStringVal(s), nil +} + +type ConvertStringVal string + +type ConvertString struct { + String ConvertStringVal +} + +type ConvertStringSlice struct { + Strings []ConvertStringVal +} + +type ConvertStringMapValue struct { + Strings map[string]ConvertStringVal +} + +//msgp:shim ConvertIntfVal as:interface{} using:fromConvertIntfVal/toConvertIntfVal mode:convert +//msgp:ignore ConvertIntfVal + +func fromConvertIntfVal(v ConvertIntfVal) (interface{}, error) { + return v.Test, nil +} + +func toConvertIntfVal(s interface{}) (ConvertIntfVal, error) { + return ConvertIntfVal{Test: s.(string)}, nil +} + +type ConvertIntfVal struct { + Test string +} + +type ConvertIntf struct { + Intf ConvertIntfVal +} + +//msgp:shim ConvertErrVal as:string using:fromConvertErrVal/toConvertErrVal mode:convert +//msgp:ignore ConvertErrVal + +var ( + errConvertFrom = errors.New("error: convert from") + errConvertTo = errors.New("error: convert to") +) + +const ( + fromFailStr = "fromfail" + toFailStr = "tofail" +) + +func fromConvertErrVal(v ConvertErrVal) (string, error) { + s := string(v) + if s == fromFailStr { + return "", errConvertFrom + } + return s, nil +} + +func toConvertErrVal(s string) (ConvertErrVal, error) { + if s == toFailStr { + return ConvertErrVal(""), errConvertTo + } + return ConvertErrVal(s), nil +} + +type ConvertErrVal string + +type ConvertErr struct { + Err ConvertErrVal +} diff --git a/vendor/github.com/tinylib/msgp/_generated/convert_test.go b/vendor/github.com/tinylib/msgp/_generated/convert_test.go new file mode 100644 index 0000000..5d22469 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/_generated/convert_test.go @@ -0,0 +1,59 @@ +package _generated + +import ( + "bytes" + "testing" + + "github.com/tinylib/msgp/msgp" +) + +func TestConvertFromEncodeError(t *testing.T) { + e := ConvertErr{ConvertErrVal(fromFailStr)} + var buf bytes.Buffer + w := msgp.NewWriter(&buf) + err := e.EncodeMsg(w) + if err != errConvertFrom { + t.Fatalf("expected conversion error, found %v", err.Error()) + } +} + +func TestConvertToEncodeError(t *testing.T) { + var in, out ConvertErr + in = ConvertErr{ConvertErrVal(toFailStr)} + var buf bytes.Buffer + w := msgp.NewWriter(&buf) + err := in.EncodeMsg(w) + if err != nil { + t.FailNow() + } + w.Flush() + + r := msgp.NewReader(&buf) + err = (&out).DecodeMsg(r) + if err != errConvertTo { + t.Fatalf("expected conversion error, found %v", err.Error()) + } +} + +func TestConvertFromMarshalError(t *testing.T) { + e := ConvertErr{ConvertErrVal(fromFailStr)} + var b []byte + _, err := e.MarshalMsg(b) + if err != errConvertFrom { + t.Fatalf("expected conversion error, found %v", err.Error()) + } +} + +func TestConvertToMarshalError(t *testing.T) { + var in, out ConvertErr + in = ConvertErr{ConvertErrVal(toFailStr)} + b, err := in.MarshalMsg(nil) + if err != nil { + t.FailNow() + } + + _, err = (&out).UnmarshalMsg(b) + if err != errConvertTo { + t.Fatalf("expected conversion error, found %v", err.Error()) + } +} diff --git a/vendor/github.com/tinylib/msgp/_generated/def.go b/vendor/github.com/tinylib/msgp/_generated/def.go new file mode 100644 index 0000000..db39af0 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/_generated/def.go @@ -0,0 +1,265 @@ +package _generated + +import ( + "os" + "time" + + "github.com/tinylib/msgp/msgp" +) + +//go:generate msgp -o generated.go + +// All of the struct +// definitions in this +// file are fed to the code +// generator when `make test` is +// called, followed by an +// invocation of `go test -v` in this +// directory. A simple way of testing +// a struct definition is +// by adding it to this file. + +type Block [32]byte + +// tests edge-cases with +// compiling size compilation. +type X struct { + Values [32]byte // should compile to 32*msgp.ByteSize; encoded as Bin + ValuesPtr *[32]byte // check (*)[:] deref + More Block // should be identical to the above + Others [][32]int32 // should compile to len(x.Others)*32*msgp.Int32Size + Matrix [][]int32 // should not optimize + ManyFixed []Fixed +} + +// test fixed-size struct +// size compilation +type Fixed struct { + A float64 + B bool +} + +type TestType struct { + F *float64 `msg:"float"` + Els map[string]string `msg:"elements"` + Obj struct { // test anonymous struct + ValueA string `msg:"value_a"` + ValueB []byte `msg:"value_b"` + } `msg:"object"` + Child *TestType `msg:"child"` + Time time.Time `msg:"time"` + Any interface{} `msg:"any"` + Appended msgp.Raw `msg:"appended"` + Num msgp.Number `msg:"num"` + Byte byte + Rune rune + RunePtr *rune + RunePtrPtr **rune + RuneSlice []rune + Slice1 []string + Slice2 []string + SlicePtr *[]string +} + +//msgp:tuple Object +type Object struct { + ObjectNo string `msg:"objno"` + Slice1 []string `msg:"slice1"` + Slice2 []string `msg:"slice2"` + MapMap map[string]map[string]string +} + +//msgp:tuple TestBench + +type TestBench struct { + Name string + BirthDay time.Time + Phone string + Siblings int + Spouse bool + Money float64 +} + +//msgp:tuple TestFast + +type TestFast struct { + Lat, Long, Alt float64 // test inline decl + Data []byte +} + +// Test nested aliases +type FastAlias TestFast +type AliasContainer struct { + Fast FastAlias +} + +// Test dependency resolution +type IntA int +type IntB IntA +type IntC IntB + +type TestHidden struct { + A string + B []float64 + Bad func(string) bool // This results in a warning: field "Bad" unsupported +} + +type Embedded struct { + *Embedded // test embedded field + Children []Embedded + PtrChildren []*Embedded + Other string +} + +const eight = 8 + +type Things struct { + Cmplx complex64 `msg:"complex"` // test slices + Vals []int32 `msg:"values"` + Arr [msgp.ExtensionPrefixSize]float64 `msg:"arr"` // test const array and *ast.SelectorExpr as array size + Arr2 [4]float64 `msg:"arr2"` // test basic lit array + Ext *msgp.RawExtension `msg:"ext,extension"` // test extension + Oext msgp.RawExtension `msg:"oext,extension"` // test extension reference +} + +//msgp:shim SpecialID as:[]byte using:toBytes/fromBytes + +type SpecialID string +type TestObj struct{ ID1, ID2 SpecialID } + +func toBytes(id SpecialID) []byte { return []byte(string(id)) } +func fromBytes(id []byte) SpecialID { return SpecialID(string(id)) } + +type MyEnum byte + +const ( + A MyEnum = iota + B + C + D + invalid +) + +// test shim directive (below) + +//msgp:shim MyEnum as:string using:(MyEnum).String/myenumStr + +//msgp:shim *os.File as:string using:filetostr/filefromstr + +func filetostr(f *os.File) string { + return f.Name() +} + +func filefromstr(s string) *os.File { + f, _ := os.Open(s) + return f +} + +func (m MyEnum) String() string { + switch m { + case A: + return "A" + case B: + return "B" + case C: + return "C" + case D: + return "D" + default: + return "" + } +} + +func myenumStr(s string) MyEnum { + switch s { + case "A": + return A + case "B": + return B + case "C": + return C + case "D": + return D + default: + return invalid + } +} + +// test pass-specific directive +//msgp:decode ignore Insane + +type Insane [3]map[string]struct{ A, B CustomInt } + +type Custom struct { + Bts CustomBytes `msg:"bts"` + Mp map[string]*Embedded `msg:"mp"` + Enums []MyEnum `msg:"enums"` // test explicit enum shim + Some FileHandle `msg:file_handle` +} + +type Files []*os.File + +type FileHandle struct { + Relevant Files `msg:"files"` + Name string `msg:"name"` +} + +type CustomInt int +type CustomBytes []byte + +type Wrapper struct { + Tree *Tree +} + +type Tree struct { + Children []Tree + Element int + Parent *Wrapper +} + +// Ensure all different widths of integer can be used as constant keys. +const ( + ConstantInt int = 8 + ConstantInt8 int8 = 8 + ConstantInt16 int16 = 8 + ConstantInt32 int32 = 8 + ConstantInt64 int64 = 8 + ConstantUint uint = 8 + ConstantUint8 uint8 = 8 + ConstantUint16 uint16 = 8 + ConstantUint32 uint32 = 8 + ConstantUint64 uint64 = 8 +) + +type ArrayConstants struct { + ConstantInt [ConstantInt]string + ConstantInt8 [ConstantInt8]string + ConstantInt16 [ConstantInt16]string + ConstantInt32 [ConstantInt32]string + ConstantInt64 [ConstantInt64]string + ConstantUint [ConstantUint]string + ConstantUint8 [ConstantUint8]string + ConstantUint16 [ConstantUint16]string + ConstantUint32 [ConstantUint32]string + ConstantUint64 [ConstantUint64]string + ConstantHex [0x16]string + ConstantOctal [07]string +} + +// Ensure non-msg struct tags work: +// https://github.com/tinylib/msgp/issues/201 + +type NonMsgStructTags struct { + A []string `json:"fooJSON" msg:"fooMsgp"` + B string `json:"barJSON"` + C []string `json:"bazJSON" msg:"-"` + Nested []struct { + A []string `json:"a"` + B string `json:"b"` + C []string `json:"c"` + VeryNested []struct { + A []string `json:"a"` + B []string `msg:"bbbb" xml:"-"` + } + } +} diff --git a/vendor/github.com/tinylib/msgp/_generated/def_test.go b/vendor/github.com/tinylib/msgp/_generated/def_test.go new file mode 100644 index 0000000..5d2e80f --- /dev/null +++ b/vendor/github.com/tinylib/msgp/_generated/def_test.go @@ -0,0 +1,76 @@ +package _generated + +import ( + "bytes" + "reflect" + "testing" + + "github.com/tinylib/msgp/msgp" +) + +func TestRuneEncodeDecode(t *testing.T) { + tt := &TestType{} + r := 'r' + rp := &r + tt.Rune = r + tt.RunePtr = &r + tt.RunePtrPtr = &rp + tt.RuneSlice = []rune{'a', 'b', '😳'} + + var buf bytes.Buffer + wrt := msgp.NewWriter(&buf) + if err := tt.EncodeMsg(wrt); err != nil { + t.Errorf("%v", err) + } + wrt.Flush() + + var out TestType + rdr := msgp.NewReader(&buf) + if err := (&out).DecodeMsg(rdr); err != nil { + t.Errorf("%v", err) + } + if r != out.Rune { + t.Errorf("rune mismatch: expected %c found %c", r, out.Rune) + } + if r != *out.RunePtr { + t.Errorf("rune ptr mismatch: expected %c found %c", r, *out.RunePtr) + } + if r != **out.RunePtrPtr { + t.Errorf("rune ptr ptr mismatch: expected %c found %c", r, **out.RunePtrPtr) + } + if !reflect.DeepEqual(tt.RuneSlice, out.RuneSlice) { + t.Errorf("rune slice mismatch") + } +} + +func TestRuneMarshalUnmarshal(t *testing.T) { + tt := &TestType{} + r := 'r' + rp := &r + tt.Rune = r + tt.RunePtr = &r + tt.RunePtrPtr = &rp + tt.RuneSlice = []rune{'a', 'b', '😳'} + + bts, err := tt.MarshalMsg(nil) + if err != nil { + t.Errorf("%v", err) + } + + var out TestType + if _, err := (&out).UnmarshalMsg(bts); err != nil { + t.Errorf("%v", err) + } + if r != out.Rune { + t.Errorf("rune mismatch: expected %c found %c", r, out.Rune) + } + if r != *out.RunePtr { + t.Errorf("rune ptr mismatch: expected %c found %c", r, *out.RunePtr) + } + if r != **out.RunePtrPtr { + t.Errorf("rune ptr ptr mismatch: expected %c found %c", r, **out.RunePtrPtr) + } + if !reflect.DeepEqual(tt.RuneSlice, out.RuneSlice) { + t.Errorf("rune slice mismatch") + } +} diff --git a/vendor/github.com/tinylib/msgp/_generated/gen_test.go b/vendor/github.com/tinylib/msgp/_generated/gen_test.go new file mode 100644 index 0000000..7f7da03 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/_generated/gen_test.go @@ -0,0 +1,156 @@ +package _generated + +import ( + "bytes" + "github.com/tinylib/msgp/msgp" + "reflect" + "testing" + "time" +) + +// benchmark encoding a small, "fast" type. +// the point here is to see how much garbage +// is generated intrinsically by the encoding/ +// decoding process as opposed to the nature +// of the struct. +func BenchmarkFastEncode(b *testing.B) { + v := &TestFast{ + Lat: 40.12398, + Long: -41.9082, + Alt: 201.08290, + Data: []byte("whaaaaargharbl"), + } + var buf bytes.Buffer + msgp.Encode(&buf, v) + en := msgp.NewWriter(msgp.Nowhere) + b.SetBytes(int64(buf.Len())) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.EncodeMsg(en) + } + en.Flush() +} + +// benchmark decoding a small, "fast" type. +// the point here is to see how much garbage +// is generated intrinsically by the encoding/ +// decoding process as opposed to the nature +// of the struct. +func BenchmarkFastDecode(b *testing.B) { + v := &TestFast{ + Lat: 40.12398, + Long: -41.9082, + Alt: 201.08290, + Data: []byte("whaaaaargharbl"), + } + + var buf bytes.Buffer + msgp.Encode(&buf, v) + dc := msgp.NewReader(msgp.NewEndlessReader(buf.Bytes(), b)) + b.SetBytes(int64(buf.Len())) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.DecodeMsg(dc) + } +} + +func (a *TestType) Equal(b *TestType) bool { + // compare times, appended, then zero out those + // fields, perform a DeepEqual, and restore them + ta, tb := a.Time, b.Time + if !ta.Equal(tb) { + return false + } + aa, ab := a.Appended, b.Appended + if !bytes.Equal(aa, ab) { + return false + } + a.Time, b.Time = time.Time{}, time.Time{} + aa, ab = nil, nil + ok := reflect.DeepEqual(a, b) + a.Time, b.Time = ta, tb + a.Appended, b.Appended = aa, ab + return ok +} + +// This covers the following cases: +// - Recursive types +// - Non-builtin identifiers (and recursive types) +// - time.Time +// - map[string]string +// - anonymous structs +// +func Test1EncodeDecode(t *testing.T) { + f := 32.00 + tt := &TestType{ + F: &f, + Els: map[string]string{ + "thing_one": "one", + "thing_two": "two", + }, + Obj: struct { + ValueA string `msg:"value_a"` + ValueB []byte `msg:"value_b"` + }{ + ValueA: "here's the first inner value", + ValueB: []byte("here's the second inner value"), + }, + Child: nil, + Time: time.Now(), + Appended: msgp.Raw([]byte{}), // 'nil' + } + + var buf bytes.Buffer + + err := msgp.Encode(&buf, tt) + if err != nil { + t.Fatal(err) + } + + tnew := new(TestType) + + err = msgp.Decode(&buf, tnew) + if err != nil { + t.Error(err) + } + + if !tt.Equal(tnew) { + t.Logf("in: %v", tt) + t.Logf("out: %v", tnew) + t.Fatal("objects not equal") + } + + tanother := new(TestType) + + buf.Reset() + msgp.Encode(&buf, tt) + + var left []byte + left, err = tanother.UnmarshalMsg(buf.Bytes()) + if err != nil { + t.Error(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left", len(left)) + } + + if !tt.Equal(tanother) { + t.Logf("in: %v", tt) + t.Logf("out: %v", tanother) + t.Fatal("objects not equal") + } +} + +func TestIssue168(t *testing.T) { + buf := bytes.Buffer{} + test := TestObj{} + + msgp.Encode(&buf, &TestObj{ID1: "1", ID2: "2"}) + msgp.Decode(&buf, &test) + + if test.ID1 != "1" || test.ID2 != "2" { + t.Fatalf("got back %+v", test) + } +} diff --git a/vendor/github.com/tinylib/msgp/_generated/issue102.go b/vendor/github.com/tinylib/msgp/_generated/issue102.go new file mode 100644 index 0000000..a1cc85c --- /dev/null +++ b/vendor/github.com/tinylib/msgp/_generated/issue102.go @@ -0,0 +1,49 @@ +package _generated + +//go:generate msgp + +type Issue102 struct{} + +type Issue102deep struct { + A int + X struct{} + Y struct{} + Z int +} + +//msgp:tuple Issue102Tuple + +type Issue102Tuple struct{} + +//msgp:tuple Issue102TupleDeep + +type Issue102TupleDeep struct { + A int + X struct{} + Y struct{} + Z int +} + +type Issue102Uses struct { + Nested Issue102 + NestedPtr *Issue102 +} + +//msgp:tuple Issue102TupleUsesTuple + +type Issue102TupleUsesTuple struct { + Nested Issue102Tuple + NestedPtr *Issue102Tuple +} + +//msgp:tuple Issue102TupleUsesMap + +type Issue102TupleUsesMap struct { + Nested Issue102 + NestedPtr *Issue102 +} + +type Issue102MapUsesTuple struct { + Nested Issue102Tuple + NestedPtr *Issue102Tuple +} diff --git a/vendor/github.com/tinylib/msgp/_generated/issue191.go b/vendor/github.com/tinylib/msgp/_generated/issue191.go new file mode 100644 index 0000000..699263c --- /dev/null +++ b/vendor/github.com/tinylib/msgp/_generated/issue191.go @@ -0,0 +1,8 @@ +package _generated + +//go:generate msgp + +type Issue191 struct { + Foo string + Bar string +} diff --git a/vendor/github.com/tinylib/msgp/_generated/issue191_test.go b/vendor/github.com/tinylib/msgp/_generated/issue191_test.go new file mode 100644 index 0000000..e6cdf66 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/_generated/issue191_test.go @@ -0,0 +1,16 @@ +package _generated + +import ( + "testing" +) + +// Issue #191: panic in unsafe.UnsafeString() + +func TestIssue191(t *testing.T) { + b := []byte{0x81, 0xa0, 0xa0} + var i Issue191 + _, err := (&i).UnmarshalMsg(b) + if err != nil { + t.Error(err) + } +} diff --git a/vendor/github.com/tinylib/msgp/_generated/issue94.go b/vendor/github.com/tinylib/msgp/_generated/issue94.go new file mode 100644 index 0000000..4384d5d --- /dev/null +++ b/vendor/github.com/tinylib/msgp/_generated/issue94.go @@ -0,0 +1,31 @@ +package _generated + +import ( + "time" +) + +//go:generate msgp + +// Issue 94: shims were not propogated recursively, +// which caused shims that weren't at the top level +// to be silently ignored. +// +// The following line will generate an error after +// the code is generated if the generated code doesn't +// have the right identifier in it. + +//go:generate ./search.sh $GOFILE timetostr + +//msgp:shim time.Time as:string using:timetostr/strtotime +type T struct { + T time.Time +} + +func timetostr(t time.Time) string { + return t.Format(time.RFC3339) +} + +func strtotime(s string) time.Time { + t, _ := time.Parse(time.RFC3339, s) + return t +} diff --git a/vendor/github.com/tinylib/msgp/_generated/search.sh b/vendor/github.com/tinylib/msgp/_generated/search.sh new file mode 100755 index 0000000..aa6d647 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/_generated/search.sh @@ -0,0 +1,12 @@ +#! /bin/sh + +FILE=$(echo $1 | sed s/.go/_gen.go/) +echo "searching" $FILE "for" $2 +grep -q $2 $FILE +if [ $? -eq 0 ] +then + echo "OK" +else + echo "whoops!" + exit 1 +fi diff --git a/vendor/github.com/tinylib/msgp/gen/decode.go b/vendor/github.com/tinylib/msgp/gen/decode.go new file mode 100644 index 0000000..3ba88fa --- /dev/null +++ b/vendor/github.com/tinylib/msgp/gen/decode.go @@ -0,0 +1,222 @@ +package gen + +import ( + "io" + "strconv" +) + +func decode(w io.Writer) *decodeGen { + return &decodeGen{ + p: printer{w: w}, + hasfield: false, + } +} + +type decodeGen struct { + passes + p printer + hasfield bool +} + +func (d *decodeGen) Method() Method { return Decode } + +func (d *decodeGen) needsField() { + if d.hasfield { + return + } + d.p.print("\nvar field []byte; _ = field") + d.hasfield = true +} + +func (d *decodeGen) Execute(p Elem) error { + p = d.applyall(p) + if p == nil { + return nil + } + d.hasfield = false + if !d.p.ok() { + return d.p.err + } + + if !IsPrintable(p) { + return nil + } + + d.p.comment("DecodeMsg implements msgp.Decodable") + + d.p.printf("\nfunc (%s %s) DecodeMsg(dc *msgp.Reader) (err error) {", p.Varname(), methodReceiver(p)) + next(d, p) + d.p.nakedReturn() + unsetReceiver(p) + return d.p.err +} + +func (d *decodeGen) gStruct(s *Struct) { + if !d.p.ok() { + return + } + if s.AsTuple { + d.structAsTuple(s) + } else { + d.structAsMap(s) + } + return +} + +func (d *decodeGen) assignAndCheck(name string, typ string) { + if !d.p.ok() { + return + } + d.p.printf("\n%s, err = dc.Read%s()", name, typ) + d.p.print(errcheck) +} + +func (d *decodeGen) structAsTuple(s *Struct) { + nfields := len(s.Fields) + + sz := randIdent() + d.p.declare(sz, u32) + d.assignAndCheck(sz, arrayHeader) + d.p.arrayCheck(strconv.Itoa(nfields), sz) + for i := range s.Fields { + if !d.p.ok() { + return + } + next(d, s.Fields[i].FieldElem) + } +} + +func (d *decodeGen) structAsMap(s *Struct) { + d.needsField() + sz := randIdent() + d.p.declare(sz, u32) + d.assignAndCheck(sz, mapHeader) + + d.p.printf("\nfor %s > 0 {\n%s--", sz, sz) + d.assignAndCheck("field", mapKey) + d.p.print("\nswitch msgp.UnsafeString(field) {") + for i := range s.Fields { + d.p.printf("\ncase \"%s\":", s.Fields[i].FieldTag) + next(d, s.Fields[i].FieldElem) + if !d.p.ok() { + return + } + } + d.p.print("\ndefault:\nerr = dc.Skip()") + d.p.print(errcheck) + d.p.closeblock() // close switch + d.p.closeblock() // close for loop +} + +func (d *decodeGen) gBase(b *BaseElem) { + if !d.p.ok() { + return + } + + // open block for 'tmp' + var tmp string + if b.Convert { + tmp = randIdent() + d.p.printf("\n{ var %s %s", tmp, b.BaseType()) + } + + vname := b.Varname() // e.g. "z.FieldOne" + bname := b.BaseName() // e.g. "Float64" + + // handle special cases + // for object type. + switch b.Value { + case Bytes: + if b.Convert { + d.p.printf("\n%s, err = dc.ReadBytes([]byte(%s))", tmp, vname) + } else { + d.p.printf("\n%s, err = dc.ReadBytes(%s)", vname, vname) + } + case IDENT: + d.p.printf("\nerr = %s.DecodeMsg(dc)", vname) + case Ext: + d.p.printf("\nerr = dc.ReadExtension(%s)", vname) + default: + if b.Convert { + d.p.printf("\n%s, err = dc.Read%s()", tmp, bname) + } else { + d.p.printf("\n%s, err = dc.Read%s()", vname, bname) + } + } + d.p.print(errcheck) + + // close block for 'tmp' + if b.Convert { + if b.ShimMode == Cast { + d.p.printf("\n%s = %s(%s)\n}", vname, b.FromBase(), tmp) + } else { + d.p.printf("\n%s, err = %s(%s)\n}", vname, b.FromBase(), tmp) + d.p.print(errcheck) + } + } +} + +func (d *decodeGen) gMap(m *Map) { + if !d.p.ok() { + return + } + sz := randIdent() + + // resize or allocate map + d.p.declare(sz, u32) + d.assignAndCheck(sz, mapHeader) + d.p.resizeMap(sz, m) + + // for element in map, read string/value + // pair and assign + d.p.printf("\nfor %s > 0 {\n%s--", sz, sz) + d.p.declare(m.Keyidx, "string") + d.p.declare(m.Validx, m.Value.TypeName()) + d.assignAndCheck(m.Keyidx, stringTyp) + next(d, m.Value) + d.p.mapAssign(m) + d.p.closeblock() +} + +func (d *decodeGen) gSlice(s *Slice) { + if !d.p.ok() { + return + } + sz := randIdent() + d.p.declare(sz, u32) + d.assignAndCheck(sz, arrayHeader) + d.p.resizeSlice(sz, s) + d.p.rangeBlock(s.Index, s.Varname(), d, s.Els) +} + +func (d *decodeGen) gArray(a *Array) { + if !d.p.ok() { + return + } + + // special case if we have [const]byte + if be, ok := a.Els.(*BaseElem); ok && (be.Value == Byte || be.Value == Uint8) { + d.p.printf("\nerr = dc.ReadExactBytes((%s)[:])", a.Varname()) + d.p.print(errcheck) + return + } + sz := randIdent() + d.p.declare(sz, u32) + d.assignAndCheck(sz, arrayHeader) + d.p.arrayCheck(coerceArraySize(a.Size), sz) + + d.p.rangeBlock(a.Index, a.Varname(), d, a.Els) +} + +func (d *decodeGen) gPtr(p *Ptr) { + if !d.p.ok() { + return + } + d.p.print("\nif dc.IsNil() {") + d.p.print("\nerr = dc.ReadNil()") + d.p.print(errcheck) + d.p.printf("\n%s = nil\n} else {", p.Varname()) + d.p.initPtr(p) + next(d, p.Value) + d.p.closeblock() +} diff --git a/vendor/github.com/tinylib/msgp/gen/elem.go b/vendor/github.com/tinylib/msgp/gen/elem.go new file mode 100644 index 0000000..6588355 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/gen/elem.go @@ -0,0 +1,619 @@ +package gen + +import ( + "fmt" + "strings" +) + +var ( + identNext = 0 + identPrefix = "za" +) + +func resetIdent(prefix string) { + identPrefix = prefix + identNext = 0 +} + +// generate a random identifier name +func randIdent() string { + identNext++ + return fmt.Sprintf("%s%04d", identPrefix, identNext) +} + +// This code defines the type declaration tree. +// +// Consider the following: +// +// type Marshaler struct { +// Thing1 *float64 `msg:"thing1"` +// Body []byte `msg:"body"` +// } +// +// A parser using this generator as a backend +// should parse the above into: +// +// var val Elem = &Ptr{ +// name: "z", +// Value: &Struct{ +// Name: "Marshaler", +// Fields: []StructField{ +// { +// FieldTag: "thing1", +// FieldElem: &Ptr{ +// name: "z.Thing1", +// Value: &BaseElem{ +// name: "*z.Thing1", +// Value: Float64, +// Convert: false, +// }, +// }, +// }, +// { +// FieldTag: "body", +// FieldElem: &BaseElem{ +// name: "z.Body", +// Value: Bytes, +// Convert: false, +// }, +// }, +// }, +// }, +// } + +// Base is one of the +// base types +type Primitive uint8 + +// this is effectively the +// list of currently available +// ReadXxxx / WriteXxxx methods. +const ( + Invalid Primitive = iota + Bytes + String + Float32 + Float64 + Complex64 + Complex128 + Uint + Uint8 + Uint16 + Uint32 + Uint64 + Byte + Int + Int8 + Int16 + Int32 + Int64 + Bool + Intf // interface{} + Time // time.Time + Ext // extension + + IDENT // IDENT means an unrecognized identifier +) + +// all of the recognized identities +// that map to primitive types +var primitives = map[string]Primitive{ + "[]byte": Bytes, + "string": String, + "float32": Float32, + "float64": Float64, + "complex64": Complex64, + "complex128": Complex128, + "uint": Uint, + "uint8": Uint8, + "uint16": Uint16, + "uint32": Uint32, + "uint64": Uint64, + "byte": Byte, + "rune": Int32, + "int": Int, + "int8": Int8, + "int16": Int16, + "int32": Int32, + "int64": Int64, + "bool": Bool, + "interface{}": Intf, + "time.Time": Time, + "msgp.Extension": Ext, +} + +// types built into the library +// that satisfy all of the +// interfaces. +var builtins = map[string]struct{}{ + "msgp.Raw": struct{}{}, + "msgp.Number": struct{}{}, +} + +// common data/methods for every Elem +type common struct{ vname, alias string } + +func (c *common) SetVarname(s string) { c.vname = s } +func (c *common) Varname() string { return c.vname } +func (c *common) Alias(typ string) { c.alias = typ } +func (c *common) hidden() {} + +func IsPrintable(e Elem) bool { + if be, ok := e.(*BaseElem); ok && !be.Printable() { + return false + } + return true +} + +// Elem is a go type capable of being +// serialized into MessagePack. It is +// implemented by *Ptr, *Struct, *Array, +// *Slice, *Map, and *BaseElem. +type Elem interface { + // SetVarname sets this nodes + // variable name and recursively + // sets the names of all its children. + // In general, this should only be + // called on the parent of the tree. + SetVarname(s string) + + // Varname returns the variable + // name of the element. + Varname() string + + // TypeName is the canonical + // go type name of the node + // e.g. "string", "int", "map[string]float64" + // OR the alias name, if it has been set. + TypeName() string + + // Alias sets a type (alias) name + Alias(typ string) + + // Copy should perform a deep copy of the object + Copy() Elem + + // Complexity returns a measure of the + // complexity of element (greater than + // or equal to 1.) + Complexity() int + + hidden() +} + +// Ident returns the *BaseElem that corresponds +// to the provided identity. +func Ident(id string) *BaseElem { + p, ok := primitives[id] + if ok { + return &BaseElem{Value: p} + } + be := &BaseElem{Value: IDENT} + be.Alias(id) + return be +} + +type Array struct { + common + Index string // index variable name + Size string // array size + Els Elem // child +} + +func (a *Array) SetVarname(s string) { + a.common.SetVarname(s) +ridx: + a.Index = randIdent() + + // try to avoid using the same + // index as a parent slice + if strings.Contains(a.Varname(), a.Index) { + goto ridx + } + + a.Els.SetVarname(fmt.Sprintf("%s[%s]", a.Varname(), a.Index)) +} + +func (a *Array) TypeName() string { + if a.common.alias != "" { + return a.common.alias + } + a.common.Alias(fmt.Sprintf("[%s]%s", a.Size, a.Els.TypeName())) + return a.common.alias +} + +func (a *Array) Copy() Elem { + b := *a + b.Els = a.Els.Copy() + return &b +} + +func (a *Array) Complexity() int { return 1 + a.Els.Complexity() } + +// Map is a map[string]Elem +type Map struct { + common + Keyidx string // key variable name + Validx string // value variable name + Value Elem // value element +} + +func (m *Map) SetVarname(s string) { + m.common.SetVarname(s) +ridx: + m.Keyidx = randIdent() + m.Validx = randIdent() + + // just in case + if m.Keyidx == m.Validx { + goto ridx + } + + m.Value.SetVarname(m.Validx) +} + +func (m *Map) TypeName() string { + if m.common.alias != "" { + return m.common.alias + } + m.common.Alias("map[string]" + m.Value.TypeName()) + return m.common.alias +} + +func (m *Map) Copy() Elem { + g := *m + g.Value = m.Value.Copy() + return &g +} + +func (m *Map) Complexity() int { return 2 + m.Value.Complexity() } + +type Slice struct { + common + Index string + Els Elem // The type of each element +} + +func (s *Slice) SetVarname(a string) { + s.common.SetVarname(a) + s.Index = randIdent() + varName := s.Varname() + if varName[0] == '*' { + // Pointer-to-slice requires parenthesis for slicing. + varName = "(" + varName + ")" + } + s.Els.SetVarname(fmt.Sprintf("%s[%s]", varName, s.Index)) +} + +func (s *Slice) TypeName() string { + if s.common.alias != "" { + return s.common.alias + } + s.common.Alias("[]" + s.Els.TypeName()) + return s.common.alias +} + +func (s *Slice) Copy() Elem { + z := *s + z.Els = s.Els.Copy() + return &z +} + +func (s *Slice) Complexity() int { + return 1 + s.Els.Complexity() +} + +type Ptr struct { + common + Value Elem +} + +func (s *Ptr) SetVarname(a string) { + s.common.SetVarname(a) + + // struct fields are dereferenced + // automatically... + switch x := s.Value.(type) { + case *Struct: + // struct fields are automatically dereferenced + x.SetVarname(a) + return + + case *BaseElem: + // identities have pointer receivers + if x.Value == IDENT { + x.SetVarname(a) + } else { + x.SetVarname("*" + a) + } + return + + default: + s.Value.SetVarname("*" + a) + return + } +} + +func (s *Ptr) TypeName() string { + if s.common.alias != "" { + return s.common.alias + } + s.common.Alias("*" + s.Value.TypeName()) + return s.common.alias +} + +func (s *Ptr) Copy() Elem { + v := *s + v.Value = s.Value.Copy() + return &v +} + +func (s *Ptr) Complexity() int { return 1 + s.Value.Complexity() } + +func (s *Ptr) Needsinit() bool { + if be, ok := s.Value.(*BaseElem); ok && be.needsref { + return false + } + return true +} + +type Struct struct { + common + Fields []StructField // field list + AsTuple bool // write as an array instead of a map +} + +func (s *Struct) TypeName() string { + if s.common.alias != "" { + return s.common.alias + } + str := "struct{\n" + for i := range s.Fields { + str += s.Fields[i].FieldName + + " " + s.Fields[i].FieldElem.TypeName() + + " " + s.Fields[i].RawTag + ";\n" + } + str += "}" + s.common.Alias(str) + return s.common.alias +} + +func (s *Struct) SetVarname(a string) { + s.common.SetVarname(a) + writeStructFields(s.Fields, a) +} + +func (s *Struct) Copy() Elem { + g := *s + g.Fields = make([]StructField, len(s.Fields)) + copy(g.Fields, s.Fields) + for i := range s.Fields { + g.Fields[i].FieldElem = s.Fields[i].FieldElem.Copy() + } + return &g +} + +func (s *Struct) Complexity() int { + c := 1 + for i := range s.Fields { + c += s.Fields[i].FieldElem.Complexity() + } + return c +} + +type StructField struct { + FieldTag string // the string inside the `msg:""` tag + RawTag string // the full struct tag + FieldName string // the name of the struct field + FieldElem Elem // the field type +} + +type ShimMode int + +const ( + Cast ShimMode = iota + Convert +) + +// BaseElem is an element that +// can be represented by a primitive +// MessagePack type. +type BaseElem struct { + common + ShimMode ShimMode // Method used to shim + ShimToBase string // shim to base type, or empty + ShimFromBase string // shim from base type, or empty + Value Primitive // Type of element + Convert bool // should we do an explicit conversion? + mustinline bool // must inline; not printable + needsref bool // needs reference for shim +} + +func (s *BaseElem) Printable() bool { return !s.mustinline } + +func (s *BaseElem) Alias(typ string) { + s.common.Alias(typ) + if s.Value != IDENT { + s.Convert = true + } + if strings.Contains(typ, ".") { + s.mustinline = true + } +} + +func (s *BaseElem) SetVarname(a string) { + // extensions whose parents + // are not pointers need to + // be explicitly referenced + if s.Value == Ext || s.needsref { + if strings.HasPrefix(a, "*") { + s.common.SetVarname(a[1:]) + return + } + s.common.SetVarname("&" + a) + return + } + + s.common.SetVarname(a) +} + +// TypeName returns the syntactically correct Go +// type name for the base element. +func (s *BaseElem) TypeName() string { + if s.common.alias != "" { + return s.common.alias + } + s.common.Alias(s.BaseType()) + return s.common.alias +} + +// ToBase, used if Convert==true, is used as tmp = {{ToBase}}({{Varname}}) +func (s *BaseElem) ToBase() string { + if s.ShimToBase != "" { + return s.ShimToBase + } + return s.BaseType() +} + +// FromBase, used if Convert==true, is used as {{Varname}} = {{FromBase}}(tmp) +func (s *BaseElem) FromBase() string { + if s.ShimFromBase != "" { + return s.ShimFromBase + } + return s.TypeName() +} + +// BaseName returns the string form of the +// base type (e.g. Float64, Ident, etc) +func (s *BaseElem) BaseName() string { + // time is a special case; + // we strip the package prefix + if s.Value == Time { + return "Time" + } + return s.Value.String() +} + +func (s *BaseElem) BaseType() string { + switch s.Value { + case IDENT: + return s.TypeName() + + // exceptions to the naming/capitalization + // rule: + case Intf: + return "interface{}" + case Bytes: + return "[]byte" + case Time: + return "time.Time" + case Ext: + return "msgp.Extension" + + // everything else is base.String() with + // the first letter as lowercase + default: + return strings.ToLower(s.BaseName()) + } +} + +func (s *BaseElem) Needsref(b bool) { + s.needsref = b +} + +func (s *BaseElem) Copy() Elem { + g := *s + return &g +} + +func (s *BaseElem) Complexity() int { + if s.Convert && !s.mustinline { + return 2 + } + // we need to return 1 if !printable(), + // in order to make sure that stuff gets + // inlined appropriately + return 1 +} + +// Resolved returns whether or not +// the type of the element is +// a primitive or a builtin provided +// by the package. +func (s *BaseElem) Resolved() bool { + if s.Value == IDENT { + _, ok := builtins[s.TypeName()] + return ok + } + return true +} + +func (k Primitive) String() string { + switch k { + case String: + return "String" + case Bytes: + return "Bytes" + case Float32: + return "Float32" + case Float64: + return "Float64" + case Complex64: + return "Complex64" + case Complex128: + return "Complex128" + case Uint: + return "Uint" + case Uint8: + return "Uint8" + case Uint16: + return "Uint16" + case Uint32: + return "Uint32" + case Uint64: + return "Uint64" + case Byte: + return "Byte" + case Int: + return "Int" + case Int8: + return "Int8" + case Int16: + return "Int16" + case Int32: + return "Int32" + case Int64: + return "Int64" + case Bool: + return "Bool" + case Intf: + return "Intf" + case Time: + return "time.Time" + case Ext: + return "Extension" + case IDENT: + return "Ident" + default: + return "INVALID" + } +} + +// writeStructFields is a trampoline for writeBase for +// all of the fields in a struct +func writeStructFields(s []StructField, name string) { + for i := range s { + s[i].FieldElem.SetVarname(fmt.Sprintf("%s.%s", name, s[i].FieldName)) + } +} + +// coerceArraySize ensures we can compare constant array lengths. +// +// msgpack array headers are 32 bit unsigned, which is reflected in the +// ArrayHeader implementation in this library using uint32. On the Go side, we +// can declare array lengths as any constant integer width, which breaks when +// attempting a direct comparison to an array header's uint32. +// +func coerceArraySize(asz string) string { + return fmt.Sprintf("uint32(%s)", asz) +} diff --git a/vendor/github.com/tinylib/msgp/gen/encode.go b/vendor/github.com/tinylib/msgp/gen/encode.go new file mode 100644 index 0000000..1ffec61 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/gen/encode.go @@ -0,0 +1,198 @@ +package gen + +import ( + "fmt" + "io" + + "github.com/tinylib/msgp/msgp" +) + +func encode(w io.Writer) *encodeGen { + return &encodeGen{ + p: printer{w: w}, + } +} + +type encodeGen struct { + passes + p printer + fuse []byte +} + +func (e *encodeGen) Method() Method { return Encode } + +func (e *encodeGen) Apply(dirs []string) error { + return nil +} + +func (e *encodeGen) writeAndCheck(typ string, argfmt string, arg interface{}) { + e.p.printf("\nerr = en.Write%s(%s)", typ, fmt.Sprintf(argfmt, arg)) + e.p.print(errcheck) +} + +func (e *encodeGen) fuseHook() { + if len(e.fuse) > 0 { + e.appendraw(e.fuse) + e.fuse = e.fuse[:0] + } +} + +func (e *encodeGen) Fuse(b []byte) { + if len(e.fuse) > 0 { + e.fuse = append(e.fuse, b...) + } else { + e.fuse = b + } +} + +func (e *encodeGen) Execute(p Elem) error { + if !e.p.ok() { + return e.p.err + } + p = e.applyall(p) + if p == nil { + return nil + } + if !IsPrintable(p) { + return nil + } + + e.p.comment("EncodeMsg implements msgp.Encodable") + + e.p.printf("\nfunc (%s %s) EncodeMsg(en *msgp.Writer) (err error) {", p.Varname(), imutMethodReceiver(p)) + next(e, p) + e.p.nakedReturn() + return e.p.err +} + +func (e *encodeGen) gStruct(s *Struct) { + if !e.p.ok() { + return + } + if s.AsTuple { + e.tuple(s) + } else { + e.structmap(s) + } + return +} + +func (e *encodeGen) tuple(s *Struct) { + nfields := len(s.Fields) + data := msgp.AppendArrayHeader(nil, uint32(nfields)) + e.p.printf("\n// array header, size %d", nfields) + e.Fuse(data) + if len(s.Fields) == 0 { + e.fuseHook() + } + for i := range s.Fields { + if !e.p.ok() { + return + } + next(e, s.Fields[i].FieldElem) + } +} + +func (e *encodeGen) appendraw(bts []byte) { + e.p.print("\nerr = en.Append(") + for i, b := range bts { + if i != 0 { + e.p.print(", ") + } + e.p.printf("0x%x", b) + } + e.p.print(")\nif err != nil { return }") +} + +func (e *encodeGen) structmap(s *Struct) { + nfields := len(s.Fields) + data := msgp.AppendMapHeader(nil, uint32(nfields)) + e.p.printf("\n// map header, size %d", nfields) + e.Fuse(data) + if len(s.Fields) == 0 { + e.fuseHook() + } + for i := range s.Fields { + if !e.p.ok() { + return + } + data = msgp.AppendString(nil, s.Fields[i].FieldTag) + e.p.printf("\n// write %q", s.Fields[i].FieldTag) + e.Fuse(data) + next(e, s.Fields[i].FieldElem) + } +} + +func (e *encodeGen) gMap(m *Map) { + if !e.p.ok() { + return + } + e.fuseHook() + vname := m.Varname() + e.writeAndCheck(mapHeader, lenAsUint32, vname) + + e.p.printf("\nfor %s, %s := range %s {", m.Keyidx, m.Validx, vname) + e.writeAndCheck(stringTyp, literalFmt, m.Keyidx) + next(e, m.Value) + e.p.closeblock() +} + +func (e *encodeGen) gPtr(s *Ptr) { + if !e.p.ok() { + return + } + e.fuseHook() + e.p.printf("\nif %s == nil { err = en.WriteNil(); if err != nil { return; } } else {", s.Varname()) + next(e, s.Value) + e.p.closeblock() +} + +func (e *encodeGen) gSlice(s *Slice) { + if !e.p.ok() { + return + } + e.fuseHook() + e.writeAndCheck(arrayHeader, lenAsUint32, s.Varname()) + e.p.rangeBlock(s.Index, s.Varname(), e, s.Els) +} + +func (e *encodeGen) gArray(a *Array) { + if !e.p.ok() { + return + } + e.fuseHook() + // shortcut for [const]byte + if be, ok := a.Els.(*BaseElem); ok && (be.Value == Byte || be.Value == Uint8) { + e.p.printf("\nerr = en.WriteBytes((%s)[:])", a.Varname()) + e.p.print(errcheck) + return + } + + e.writeAndCheck(arrayHeader, literalFmt, coerceArraySize(a.Size)) + e.p.rangeBlock(a.Index, a.Varname(), e, a.Els) +} + +func (e *encodeGen) gBase(b *BaseElem) { + if !e.p.ok() { + return + } + e.fuseHook() + vname := b.Varname() + if b.Convert { + if b.ShimMode == Cast { + vname = tobaseConvert(b) + } else { + vname = randIdent() + e.p.printf("\nvar %s %s", vname, b.BaseType()) + e.p.printf("\n%s, err = %s", vname, tobaseConvert(b)) + e.p.printf(errcheck) + } + } + + if b.Value == IDENT { // unknown identity + e.p.printf("\nerr = %s.EncodeMsg(en)", vname) + e.p.print(errcheck) + } else { // typical case + e.writeAndCheck(b.BaseName(), literalFmt, vname) + } +} diff --git a/vendor/github.com/tinylib/msgp/gen/marshal.go b/vendor/github.com/tinylib/msgp/gen/marshal.go new file mode 100644 index 0000000..ef3bf99 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/gen/marshal.go @@ -0,0 +1,212 @@ +package gen + +import ( + "fmt" + "io" + + "github.com/tinylib/msgp/msgp" +) + +func marshal(w io.Writer) *marshalGen { + return &marshalGen{ + p: printer{w: w}, + } +} + +type marshalGen struct { + passes + p printer + fuse []byte +} + +func (m *marshalGen) Method() Method { return Marshal } + +func (m *marshalGen) Apply(dirs []string) error { + return nil +} + +func (m *marshalGen) Execute(p Elem) error { + if !m.p.ok() { + return m.p.err + } + p = m.applyall(p) + if p == nil { + return nil + } + if !IsPrintable(p) { + return nil + } + + m.p.comment("MarshalMsg implements msgp.Marshaler") + + // save the vname before + // calling methodReceiver so + // that z.Msgsize() is printed correctly + c := p.Varname() + + m.p.printf("\nfunc (%s %s) MarshalMsg(b []byte) (o []byte, err error) {", p.Varname(), imutMethodReceiver(p)) + m.p.printf("\no = msgp.Require(b, %s.Msgsize())", c) + next(m, p) + m.p.nakedReturn() + return m.p.err +} + +func (m *marshalGen) rawAppend(typ string, argfmt string, arg interface{}) { + m.p.printf("\no = msgp.Append%s(o, %s)", typ, fmt.Sprintf(argfmt, arg)) +} + +func (m *marshalGen) fuseHook() { + if len(m.fuse) > 0 { + m.rawbytes(m.fuse) + m.fuse = m.fuse[:0] + } +} + +func (m *marshalGen) Fuse(b []byte) { + if len(m.fuse) == 0 { + m.fuse = b + } else { + m.fuse = append(m.fuse, b...) + } +} + +func (m *marshalGen) gStruct(s *Struct) { + if !m.p.ok() { + return + } + + if s.AsTuple { + m.tuple(s) + } else { + m.mapstruct(s) + } + return +} + +func (m *marshalGen) tuple(s *Struct) { + data := make([]byte, 0, 5) + data = msgp.AppendArrayHeader(data, uint32(len(s.Fields))) + m.p.printf("\n// array header, size %d", len(s.Fields)) + m.Fuse(data) + if len(s.Fields) == 0 { + m.fuseHook() + } + for i := range s.Fields { + if !m.p.ok() { + return + } + next(m, s.Fields[i].FieldElem) + } +} + +func (m *marshalGen) mapstruct(s *Struct) { + data := make([]byte, 0, 64) + data = msgp.AppendMapHeader(data, uint32(len(s.Fields))) + m.p.printf("\n// map header, size %d", len(s.Fields)) + m.Fuse(data) + if len(s.Fields) == 0 { + m.fuseHook() + } + for i := range s.Fields { + if !m.p.ok() { + return + } + data = msgp.AppendString(nil, s.Fields[i].FieldTag) + + m.p.printf("\n// string %q", s.Fields[i].FieldTag) + m.Fuse(data) + + next(m, s.Fields[i].FieldElem) + } +} + +// append raw data +func (m *marshalGen) rawbytes(bts []byte) { + m.p.print("\no = append(o, ") + for _, b := range bts { + m.p.printf("0x%x,", b) + } + m.p.print(")") +} + +func (m *marshalGen) gMap(s *Map) { + if !m.p.ok() { + return + } + m.fuseHook() + vname := s.Varname() + m.rawAppend(mapHeader, lenAsUint32, vname) + m.p.printf("\nfor %s, %s := range %s {", s.Keyidx, s.Validx, vname) + m.rawAppend(stringTyp, literalFmt, s.Keyidx) + next(m, s.Value) + m.p.closeblock() +} + +func (m *marshalGen) gSlice(s *Slice) { + if !m.p.ok() { + return + } + m.fuseHook() + vname := s.Varname() + m.rawAppend(arrayHeader, lenAsUint32, vname) + m.p.rangeBlock(s.Index, vname, m, s.Els) +} + +func (m *marshalGen) gArray(a *Array) { + if !m.p.ok() { + return + } + m.fuseHook() + if be, ok := a.Els.(*BaseElem); ok && be.Value == Byte { + m.rawAppend("Bytes", "(%s)[:]", a.Varname()) + return + } + + m.rawAppend(arrayHeader, literalFmt, coerceArraySize(a.Size)) + m.p.rangeBlock(a.Index, a.Varname(), m, a.Els) +} + +func (m *marshalGen) gPtr(p *Ptr) { + if !m.p.ok() { + return + } + m.fuseHook() + m.p.printf("\nif %s == nil {\no = msgp.AppendNil(o)\n} else {", p.Varname()) + next(m, p.Value) + m.p.closeblock() +} + +func (m *marshalGen) gBase(b *BaseElem) { + if !m.p.ok() { + return + } + m.fuseHook() + vname := b.Varname() + + if b.Convert { + if b.ShimMode == Cast { + vname = tobaseConvert(b) + } else { + vname = randIdent() + m.p.printf("\nvar %s %s", vname, b.BaseType()) + m.p.printf("\n%s, err = %s", vname, tobaseConvert(b)) + m.p.printf(errcheck) + } + } + + var echeck bool + switch b.Value { + case IDENT: + echeck = true + m.p.printf("\no, err = %s.MarshalMsg(o)", vname) + case Intf, Ext: + echeck = true + m.p.printf("\no, err = msgp.Append%s(o, %s)", b.BaseName(), vname) + default: + m.rawAppend(b.BaseName(), literalFmt, vname) + } + + if echeck { + m.p.print(errcheck) + } +} diff --git a/vendor/github.com/tinylib/msgp/gen/size.go b/vendor/github.com/tinylib/msgp/gen/size.go new file mode 100644 index 0000000..fd9cc42 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/gen/size.go @@ -0,0 +1,286 @@ +package gen + +import ( + "fmt" + "io" + "strconv" + + "github.com/tinylib/msgp/msgp" +) + +type sizeState uint8 + +const ( + // need to write "s = ..." + assign sizeState = iota + + // need to write "s += ..." + add + + // can just append "+ ..." + expr +) + +func sizes(w io.Writer) *sizeGen { + return &sizeGen{ + p: printer{w: w}, + state: assign, + } +} + +type sizeGen struct { + passes + p printer + state sizeState +} + +func (s *sizeGen) Method() Method { return Size } + +func (s *sizeGen) Apply(dirs []string) error { + return nil +} + +func builtinSize(typ string) string { + return "msgp." + typ + "Size" +} + +// this lets us chain together addition +// operations where possible +func (s *sizeGen) addConstant(sz string) { + if !s.p.ok() { + return + } + + switch s.state { + case assign: + s.p.print("\ns = " + sz) + s.state = expr + return + case add: + s.p.print("\ns += " + sz) + s.state = expr + return + case expr: + s.p.print(" + " + sz) + return + } + + panic("unknown size state") +} + +func (s *sizeGen) Execute(p Elem) error { + if !s.p.ok() { + return s.p.err + } + p = s.applyall(p) + if p == nil { + return nil + } + if !IsPrintable(p) { + return nil + } + + s.p.comment("Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message") + + s.p.printf("\nfunc (%s %s) Msgsize() (s int) {", p.Varname(), imutMethodReceiver(p)) + s.state = assign + next(s, p) + s.p.nakedReturn() + return s.p.err +} + +func (s *sizeGen) gStruct(st *Struct) { + if !s.p.ok() { + return + } + + nfields := uint32(len(st.Fields)) + + if st.AsTuple { + data := msgp.AppendArrayHeader(nil, nfields) + s.addConstant(strconv.Itoa(len(data))) + for i := range st.Fields { + if !s.p.ok() { + return + } + next(s, st.Fields[i].FieldElem) + } + } else { + data := msgp.AppendMapHeader(nil, nfields) + s.addConstant(strconv.Itoa(len(data))) + for i := range st.Fields { + data = data[:0] + data = msgp.AppendString(data, st.Fields[i].FieldTag) + s.addConstant(strconv.Itoa(len(data))) + next(s, st.Fields[i].FieldElem) + } + } +} + +func (s *sizeGen) gPtr(p *Ptr) { + s.state = add // inner must use add + s.p.printf("\nif %s == nil {\ns += msgp.NilSize\n} else {", p.Varname()) + next(s, p.Value) + s.state = add // closing block; reset to add + s.p.closeblock() +} + +func (s *sizeGen) gSlice(sl *Slice) { + if !s.p.ok() { + return + } + + s.addConstant(builtinSize(arrayHeader)) + + // if the slice's element is a fixed size + // (e.g. float64, [32]int, etc.), then + // print the length times the element size directly + if str, ok := fixedsizeExpr(sl.Els); ok { + s.addConstant(fmt.Sprintf("(%s * (%s))", lenExpr(sl), str)) + return + } + + // add inside the range block, and immediately after + s.state = add + s.p.rangeBlock(sl.Index, sl.Varname(), s, sl.Els) + s.state = add +} + +func (s *sizeGen) gArray(a *Array) { + if !s.p.ok() { + return + } + + s.addConstant(builtinSize(arrayHeader)) + + // if the array's children are a fixed + // size, we can compile an expression + // that always represents the array's wire size + if str, ok := fixedsizeExpr(a); ok { + s.addConstant(str) + return + } + + s.state = add + s.p.rangeBlock(a.Index, a.Varname(), s, a.Els) + s.state = add +} + +func (s *sizeGen) gMap(m *Map) { + s.addConstant(builtinSize(mapHeader)) + vn := m.Varname() + s.p.printf("\nif %s != nil {", vn) + s.p.printf("\nfor %s, %s := range %s {", m.Keyidx, m.Validx, vn) + s.p.printf("\n_ = %s", m.Validx) // we may not use the value + s.p.printf("\ns += msgp.StringPrefixSize + len(%s)", m.Keyidx) + s.state = expr + next(s, m.Value) + s.p.closeblock() + s.p.closeblock() + s.state = add +} + +func (s *sizeGen) gBase(b *BaseElem) { + if !s.p.ok() { + return + } + if b.Convert && b.ShimMode == Convert { + s.state = add + vname := randIdent() + s.p.printf("\nvar %s %s", vname, b.BaseType()) + + // ensure we don't get "unused variable" warnings from outer slice iterations + s.p.printf("\n_ = %s", b.Varname()) + + s.p.printf("\ns += %s", basesizeExpr(b.Value, vname, b.BaseName())) + s.state = expr + + } else { + vname := b.Varname() + if b.Convert { + vname = tobaseConvert(b) + } + s.addConstant(basesizeExpr(b.Value, vname, b.BaseName())) + } +} + +// returns "len(slice)" +func lenExpr(sl *Slice) string { + return "len(" + sl.Varname() + ")" +} + +// is a given primitive always the same (max) +// size on the wire? +func fixedSize(p Primitive) bool { + switch p { + case Intf, Ext, IDENT, Bytes, String: + return false + default: + return true + } +} + +// strip reference from string +func stripRef(s string) string { + if s[0] == '&' { + return s[1:] + } + return s +} + +// return a fixed-size expression, if possible. +// only possible for *BaseElem and *Array. +// returns (expr, ok) +func fixedsizeExpr(e Elem) (string, bool) { + switch e := e.(type) { + case *Array: + if str, ok := fixedsizeExpr(e.Els); ok { + return fmt.Sprintf("(%s * (%s))", e.Size, str), true + } + case *BaseElem: + if fixedSize(e.Value) { + return builtinSize(e.BaseName()), true + } + case *Struct: + var str string + for _, f := range e.Fields { + if fs, ok := fixedsizeExpr(f.FieldElem); ok { + if str == "" { + str = fs + } else { + str += "+" + fs + } + } else { + return "", false + } + } + var hdrlen int + mhdr := msgp.AppendMapHeader(nil, uint32(len(e.Fields))) + hdrlen += len(mhdr) + var strbody []byte + for _, f := range e.Fields { + strbody = msgp.AppendString(strbody[:0], f.FieldTag) + hdrlen += len(strbody) + } + return fmt.Sprintf("%d + %s", hdrlen, str), true + } + return "", false +} + +// print size expression of a variable name +func basesizeExpr(value Primitive, vname, basename string) string { + switch value { + case Ext: + return "msgp.ExtensionPrefixSize + " + stripRef(vname) + ".Len()" + case Intf: + return "msgp.GuessSize(" + vname + ")" + case IDENT: + return vname + ".Msgsize()" + case Bytes: + return "msgp.BytesPrefixSize + len(" + vname + ")" + case String: + return "msgp.StringPrefixSize + len(" + vname + ")" + default: + return builtinSize(basename) + } +} diff --git a/vendor/github.com/tinylib/msgp/gen/spec.go b/vendor/github.com/tinylib/msgp/gen/spec.go new file mode 100644 index 0000000..c4bc8c9 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/gen/spec.go @@ -0,0 +1,383 @@ +package gen + +import ( + "fmt" + "io" +) + +const ( + errcheck = "\nif err != nil { return }" + lenAsUint32 = "uint32(len(%s))" + literalFmt = "%s" + intFmt = "%d" + quotedFmt = `"%s"` + mapHeader = "MapHeader" + arrayHeader = "ArrayHeader" + mapKey = "MapKeyPtr" + stringTyp = "String" + u32 = "uint32" +) + +// Method is a bitfield representing something that the +// generator knows how to print. +type Method uint8 + +// are the bits in 'f' set in 'm'? +func (m Method) isset(f Method) bool { return (m&f == f) } + +// String implements fmt.Stringer +func (m Method) String() string { + switch m { + case 0, invalidmeth: + return "" + case Decode: + return "decode" + case Encode: + return "encode" + case Marshal: + return "marshal" + case Unmarshal: + return "unmarshal" + case Size: + return "size" + case Test: + return "test" + default: + // return e.g. "decode+encode+test" + modes := [...]Method{Decode, Encode, Marshal, Unmarshal, Size, Test} + any := false + nm := "" + for _, mm := range modes { + if m.isset(mm) { + if any { + nm += "+" + mm.String() + } else { + nm += mm.String() + any = true + } + } + } + return nm + + } +} + +func strtoMeth(s string) Method { + switch s { + case "encode": + return Encode + case "decode": + return Decode + case "marshal": + return Marshal + case "unmarshal": + return Unmarshal + case "size": + return Size + case "test": + return Test + default: + return 0 + } +} + +const ( + Decode Method = 1 << iota // msgp.Decodable + Encode // msgp.Encodable + Marshal // msgp.Marshaler + Unmarshal // msgp.Unmarshaler + Size // msgp.Sizer + Test // generate tests + invalidmeth // this isn't a method + encodetest = Encode | Decode | Test // tests for Encodable and Decodable + marshaltest = Marshal | Unmarshal | Test // tests for Marshaler and Unmarshaler +) + +type Printer struct { + gens []generator +} + +func NewPrinter(m Method, out io.Writer, tests io.Writer) *Printer { + if m.isset(Test) && tests == nil { + panic("cannot print tests with 'nil' tests argument!") + } + gens := make([]generator, 0, 7) + if m.isset(Decode) { + gens = append(gens, decode(out)) + } + if m.isset(Encode) { + gens = append(gens, encode(out)) + } + if m.isset(Marshal) { + gens = append(gens, marshal(out)) + } + if m.isset(Unmarshal) { + gens = append(gens, unmarshal(out)) + } + if m.isset(Size) { + gens = append(gens, sizes(out)) + } + if m.isset(marshaltest) { + gens = append(gens, mtest(tests)) + } + if m.isset(encodetest) { + gens = append(gens, etest(tests)) + } + if len(gens) == 0 { + panic("NewPrinter called with invalid method flags") + } + return &Printer{gens: gens} +} + +// TransformPass is a pass that transforms individual +// elements. (Note that if the returned is different from +// the argument, it should not point to the same objects.) +type TransformPass func(Elem) Elem + +// IgnoreTypename is a pass that just ignores +// types of a given name. +func IgnoreTypename(name string) TransformPass { + return func(e Elem) Elem { + if e.TypeName() == name { + return nil + } + return e + } +} + +// ApplyDirective applies a directive to a named pass +// and all of its dependents. +func (p *Printer) ApplyDirective(pass Method, t TransformPass) { + for _, g := range p.gens { + if g.Method().isset(pass) { + g.Add(t) + } + } +} + +// Print prints an Elem. +func (p *Printer) Print(e Elem) error { + for _, g := range p.gens { + // Elem.SetVarname() is called before the Print() step in parse.FileSet.PrintTo(). + // Elem.SetVarname() generates identifiers as it walks the Elem. This can cause + // collisions between idents created during SetVarname and idents created during Print, + // hence the separate prefixes. + resetIdent("zb") + err := g.Execute(e) + resetIdent("za") + + if err != nil { + return err + } + } + return nil +} + +// generator is the interface through +// which code is generated. +type generator interface { + Method() Method + Add(p TransformPass) + Execute(Elem) error // execute writes the method for the provided object. +} + +type passes []TransformPass + +func (p *passes) Add(t TransformPass) { + *p = append(*p, t) +} + +func (p *passes) applyall(e Elem) Elem { + for _, t := range *p { + e = t(e) + if e == nil { + return nil + } + } + return e +} + +type traversal interface { + gMap(*Map) + gSlice(*Slice) + gArray(*Array) + gPtr(*Ptr) + gBase(*BaseElem) + gStruct(*Struct) +} + +// type-switch dispatch to the correct +// method given the type of 'e' +func next(t traversal, e Elem) { + switch e := e.(type) { + case *Map: + t.gMap(e) + case *Struct: + t.gStruct(e) + case *Slice: + t.gSlice(e) + case *Array: + t.gArray(e) + case *Ptr: + t.gPtr(e) + case *BaseElem: + t.gBase(e) + default: + panic("bad element type") + } +} + +// possibly-immutable method receiver +func imutMethodReceiver(p Elem) string { + switch e := p.(type) { + case *Struct: + // TODO(HACK): actually do real math here. + if len(e.Fields) <= 3 { + for i := range e.Fields { + if be, ok := e.Fields[i].FieldElem.(*BaseElem); !ok || (be.Value == IDENT || be.Value == Bytes) { + goto nope + } + } + return p.TypeName() + } + nope: + return "*" + p.TypeName() + + // gets dereferenced automatically + case *Array: + return "*" + p.TypeName() + + // everything else can be + // by-value. + default: + return p.TypeName() + } +} + +// if necessary, wraps a type +// so that its method receiver +// is of the write type. +func methodReceiver(p Elem) string { + switch p.(type) { + + // structs and arrays are + // dereferenced automatically, + // so no need to alter varname + case *Struct, *Array: + return "*" + p.TypeName() + // set variable name to + // *varname + default: + p.SetVarname("(*" + p.Varname() + ")") + return "*" + p.TypeName() + } +} + +func unsetReceiver(p Elem) { + switch p.(type) { + case *Struct, *Array: + default: + p.SetVarname("z") + } +} + +// shared utility for generators +type printer struct { + w io.Writer + err error +} + +// writes "var {{name}} {{typ}};" +func (p *printer) declare(name string, typ string) { + p.printf("\nvar %s %s", name, typ) +} + +// does: +// +// if m != nil && size > 0 { +// m = make(type, size) +// } else if len(m) > 0 { +// for key, _ := range m { delete(m, key) } +// } +// +func (p *printer) resizeMap(size string, m *Map) { + vn := m.Varname() + if !p.ok() { + return + } + p.printf("\nif %s == nil && %s > 0 {", vn, size) + p.printf("\n%s = make(%s, %s)", vn, m.TypeName(), size) + p.printf("\n} else if len(%s) > 0 {", vn) + p.clearMap(vn) + p.closeblock() +} + +// assign key to value based on varnames +func (p *printer) mapAssign(m *Map) { + if !p.ok() { + return + } + p.printf("\n%s[%s] = %s", m.Varname(), m.Keyidx, m.Validx) +} + +// clear map keys +func (p *printer) clearMap(name string) { + p.printf("\nfor key, _ := range %[1]s { delete(%[1]s, key) }", name) +} + +func (p *printer) resizeSlice(size string, s *Slice) { + p.printf("\nif cap(%[1]s) >= int(%[2]s) { %[1]s = (%[1]s)[:%[2]s] } else { %[1]s = make(%[3]s, %[2]s) }", s.Varname(), size, s.TypeName()) +} + +func (p *printer) arrayCheck(want string, got string) { + p.printf("\nif %[1]s != %[2]s { err = msgp.ArrayError{Wanted: %[2]s, Got: %[1]s}; return }", got, want) +} + +func (p *printer) closeblock() { p.print("\n}") } + +// does: +// +// for idx := range iter { +// {{generate inner}} +// } +// +func (p *printer) rangeBlock(idx string, iter string, t traversal, inner Elem) { + p.printf("\n for %s := range %s {", idx, iter) + next(t, inner) + p.closeblock() +} + +func (p *printer) nakedReturn() { + if p.ok() { + p.print("\nreturn\n}\n") + } +} + +func (p *printer) comment(s string) { + p.print("\n// " + s) +} + +func (p *printer) printf(format string, args ...interface{}) { + if p.err == nil { + _, p.err = fmt.Fprintf(p.w, format, args...) + } +} + +func (p *printer) print(format string) { + if p.err == nil { + _, p.err = io.WriteString(p.w, format) + } +} + +func (p *printer) initPtr(pt *Ptr) { + if pt.Needsinit() { + vname := pt.Varname() + p.printf("\nif %s == nil { %s = new(%s); }", vname, vname, pt.Value.TypeName()) + } +} + +func (p *printer) ok() bool { return p.err == nil } + +func tobaseConvert(b *BaseElem) string { + return b.ToBase() + "(" + b.Varname() + ")" +} diff --git a/vendor/github.com/tinylib/msgp/gen/testgen.go b/vendor/github.com/tinylib/msgp/gen/testgen.go new file mode 100644 index 0000000..a0e0114 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/gen/testgen.go @@ -0,0 +1,182 @@ +package gen + +import ( + "io" + "text/template" +) + +var ( + marshalTestTempl = template.New("MarshalTest") + encodeTestTempl = template.New("EncodeTest") +) + +// TODO(philhofer): +// for simplicity's sake, right now +// we can only generate tests for types +// that can be initialized with the +// "Type{}" syntax. +// we should support all the types. + +func mtest(w io.Writer) *mtestGen { + return &mtestGen{w: w} +} + +type mtestGen struct { + passes + w io.Writer +} + +func (m *mtestGen) Execute(p Elem) error { + p = m.applyall(p) + if p != nil && IsPrintable(p) { + switch p.(type) { + case *Struct, *Array, *Slice, *Map: + return marshalTestTempl.Execute(m.w, p) + } + } + return nil +} + +func (m *mtestGen) Method() Method { return marshaltest } + +type etestGen struct { + passes + w io.Writer +} + +func etest(w io.Writer) *etestGen { + return &etestGen{w: w} +} + +func (e *etestGen) Execute(p Elem) error { + p = e.applyall(p) + if p != nil && IsPrintable(p) { + switch p.(type) { + case *Struct, *Array, *Slice, *Map: + return encodeTestTempl.Execute(e.w, p) + } + } + return nil +} + +func (e *etestGen) Method() Method { return encodetest } + +func init() { + template.Must(marshalTestTempl.Parse(`func TestMarshalUnmarshal{{.TypeName}}(t *testing.T) { + v := {{.TypeName}}{} + bts, err := v.MarshalMsg(nil) + if err != nil { + t.Fatal(err) + } + left, err := v.UnmarshalMsg(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after UnmarshalMsg(): %q", len(left), left) + } + + left, err = msgp.Skip(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after Skip(): %q", len(left), left) + } +} + +func BenchmarkMarshalMsg{{.TypeName}}(b *testing.B) { + v := {{.TypeName}}{} + b.ReportAllocs() + b.ResetTimer() + for i:=0; i m { + t.Logf("WARNING: Msgsize() for %v is inaccurate", v) + } + + vn := {{.TypeName}}{} + err := msgp.Decode(&buf, &vn) + if err != nil { + t.Error(err) + } + + buf.Reset() + msgp.Encode(&buf, &v) + err = msgp.NewReader(&buf).Skip() + if err != nil { + t.Error(err) + } +} + +func BenchmarkEncode{{.TypeName}}(b *testing.B) { + v := {{.TypeName}}{} + var buf bytes.Buffer + msgp.Encode(&buf, &v) + b.SetBytes(int64(buf.Len())) + en := msgp.NewWriter(msgp.Nowhere) + b.ReportAllocs() + b.ResetTimer() + for i:=0; i 0 {", sz) + u.p.printf("\n%s--; field, bts, err = msgp.ReadMapKeyZC(bts)", sz) + u.p.print(errcheck) + u.p.print("\nswitch msgp.UnsafeString(field) {") + for i := range s.Fields { + if !u.p.ok() { + return + } + u.p.printf("\ncase \"%s\":", s.Fields[i].FieldTag) + next(u, s.Fields[i].FieldElem) + } + u.p.print("\ndefault:\nbts, err = msgp.Skip(bts)") + u.p.print(errcheck) + u.p.print("\n}\n}") // close switch and for loop +} + +func (u *unmarshalGen) gBase(b *BaseElem) { + if !u.p.ok() { + return + } + + refname := b.Varname() // assigned to + lowered := b.Varname() // passed as argument + if b.Convert { + // begin 'tmp' block + refname = randIdent() + lowered = b.ToBase() + "(" + lowered + ")" + u.p.printf("\n{\nvar %s %s", refname, b.BaseType()) + } + + switch b.Value { + case Bytes: + u.p.printf("\n%s, bts, err = msgp.ReadBytesBytes(bts, %s)", refname, lowered) + case Ext: + u.p.printf("\nbts, err = msgp.ReadExtensionBytes(bts, %s)", lowered) + case IDENT: + u.p.printf("\nbts, err = %s.UnmarshalMsg(bts)", lowered) + default: + u.p.printf("\n%s, bts, err = msgp.Read%sBytes(bts)", refname, b.BaseName()) + } + u.p.print(errcheck) + + if b.Convert { + // close 'tmp' block + if b.ShimMode == Cast { + u.p.printf("\n%s = %s(%s)\n", b.Varname(), b.FromBase(), refname) + } else { + u.p.printf("\n%s, err = %s(%s)", b.Varname(), b.FromBase(), refname) + u.p.print(errcheck) + } + u.p.printf("}") + } +} + +func (u *unmarshalGen) gArray(a *Array) { + if !u.p.ok() { + return + } + + // special case for [const]byte objects + // see decode.go for symmetry + if be, ok := a.Els.(*BaseElem); ok && be.Value == Byte { + u.p.printf("\nbts, err = msgp.ReadExactBytes(bts, (%s)[:])", a.Varname()) + u.p.print(errcheck) + return + } + + sz := randIdent() + u.p.declare(sz, u32) + u.assignAndCheck(sz, arrayHeader) + u.p.arrayCheck(coerceArraySize(a.Size), sz) + u.p.rangeBlock(a.Index, a.Varname(), u, a.Els) +} + +func (u *unmarshalGen) gSlice(s *Slice) { + if !u.p.ok() { + return + } + sz := randIdent() + u.p.declare(sz, u32) + u.assignAndCheck(sz, arrayHeader) + u.p.resizeSlice(sz, s) + u.p.rangeBlock(s.Index, s.Varname(), u, s.Els) +} + +func (u *unmarshalGen) gMap(m *Map) { + if !u.p.ok() { + return + } + sz := randIdent() + u.p.declare(sz, u32) + u.assignAndCheck(sz, mapHeader) + + // allocate or clear map + u.p.resizeMap(sz, m) + + // loop and get key,value + u.p.printf("\nfor %s > 0 {", sz) + u.p.printf("\nvar %s string; var %s %s; %s--", m.Keyidx, m.Validx, m.Value.TypeName(), sz) + u.assignAndCheck(m.Keyidx, stringTyp) + next(u, m.Value) + u.p.mapAssign(m) + u.p.closeblock() +} + +func (u *unmarshalGen) gPtr(p *Ptr) { + u.p.printf("\nif msgp.IsNil(bts) { bts, err = msgp.ReadNilBytes(bts); if err != nil { return }; %s = nil; } else { ", p.Varname()) + u.p.initPtr(p) + next(u, p.Value) + u.p.closeblock() +} diff --git a/vendor/github.com/tinylib/msgp/issue185_test.go b/vendor/github.com/tinylib/msgp/issue185_test.go new file mode 100644 index 0000000..b866108 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/issue185_test.go @@ -0,0 +1,308 @@ +package main + +import ( + "fmt" + "go/ast" + "go/parser" + "go/token" + "io/ioutil" + "os" + "path/filepath" + "reflect" + "sort" + "testing" + "text/template" + + "github.com/tinylib/msgp/gen" +) + +// When stuff's going wrong, you'll be glad this is here! +const debugTemp = false + +// Ensure that consistent identifiers are generated on a per-method basis by msgp. +// +// Also ensure that no duplicate identifiers appear in a method. +// +// structs are currently processed alphabetically by msgp. this test relies on +// that property. +// +func TestIssue185Idents(t *testing.T) { + var identCases = []struct { + tpl *template.Template + expectedChanged []string + }{ + {tpl: issue185IdentsTpl, expectedChanged: []string{"Test1"}}, + {tpl: issue185ComplexIdentsTpl, expectedChanged: []string{"Test2"}}, + } + + methods := []string{"DecodeMsg", "EncodeMsg", "Msgsize", "MarshalMsg", "UnmarshalMsg"} + + for idx, identCase := range identCases { + // generate the code, extract the generated variable names, mapped to function name + var tplData issue185TplData + varsBefore, err := loadVars(identCase.tpl, tplData) + if err != nil { + t.Fatalf("%d: could not extract before vars: %v", idx, err) + } + + // regenerate the code with extra field(s), extract the generated variable + // names, mapped to function name + tplData.Extra = true + varsAfter, err := loadVars(identCase.tpl, tplData) + if err != nil { + t.Fatalf("%d: could not extract after vars: %v", idx, err) + } + + // ensure that all declared variable names inside each of the methods we + // expect to change have actually changed + for _, stct := range identCase.expectedChanged { + for _, method := range methods { + fn := fmt.Sprintf("%s.%s", stct, method) + + bv, av := varsBefore.Value(fn), varsAfter.Value(fn) + if len(bv) > 0 && len(av) > 0 && reflect.DeepEqual(bv, av) { + t.Fatalf("%d vars identical! expected vars to change for %s", idx, fn) + } + delete(varsBefore, fn) + delete(varsAfter, fn) + } + } + + // all of the remaining keys should not have changed + for bmethod, bvars := range varsBefore { + avars := varsAfter.Value(bmethod) + + if !reflect.DeepEqual(bvars, avars) { + t.Fatalf("%d: vars changed! expected vars identical for %s", idx, bmethod) + } + delete(varsBefore, bmethod) + delete(varsAfter, bmethod) + } + + if len(varsBefore) > 0 || len(varsAfter) > 0 { + t.Fatalf("%d: unexpected methods remaining", idx) + } + } +} + +type issue185TplData struct { + Extra bool +} + +func TestIssue185Overlap(t *testing.T) { + var overlapCases = []struct { + tpl *template.Template + data issue185TplData + }{ + {tpl: issue185IdentsTpl, data: issue185TplData{Extra: false}}, + {tpl: issue185IdentsTpl, data: issue185TplData{Extra: true}}, + {tpl: issue185ComplexIdentsTpl, data: issue185TplData{Extra: false}}, + {tpl: issue185ComplexIdentsTpl, data: issue185TplData{Extra: true}}, + } + + for idx, o := range overlapCases { + // regenerate the code with extra field(s), extract the generated variable + // names, mapped to function name + mvars, err := loadVars(o.tpl, o.data) + if err != nil { + t.Fatalf("%d: could not extract after vars: %v", idx, err) + } + + identCnt := 0 + for fn, vars := range mvars { + sort.Strings(vars) + + // Loose sanity check to make sure the tests expectations aren't broken. + // If the prefix ever changes, this needs to change. + for _, v := range vars { + if v[0] == 'z' { + identCnt++ + } + } + + for i := 0; i < len(vars)-1; i++ { + if vars[i] == vars[i+1] { + t.Fatalf("%d: duplicate var %s in function %s", idx, vars[i], fn) + } + } + } + + // one last sanity check: if there aren't any vars that start with 'z', + // this test's expectations are unsatisfiable. + if identCnt == 0 { + t.Fatalf("%d: no generated identifiers found", idx) + } + } +} + +func loadVars(tpl *template.Template, tplData interface{}) (vars extractedVars, err error) { + tempDir, err := ioutil.TempDir("", "msgp-") + if err != nil { + err = fmt.Errorf("could not create temp dir: %v", err) + return + } + + if !debugTemp { + defer os.RemoveAll(tempDir) + } else { + fmt.Println(tempDir) + } + tfile := filepath.Join(tempDir, "msg.go") + genFile := newFilename(tfile, "") + + if err = goGenerateTpl(tempDir, tfile, tpl, tplData); err != nil { + err = fmt.Errorf("could not generate code: %v", err) + return + } + + vars, err = extractVars(genFile) + if err != nil { + err = fmt.Errorf("could not extract after vars: %v", err) + return + } + + return +} + +type varVisitor struct { + vars []string + fset *token.FileSet +} + +func (v *varVisitor) Visit(node ast.Node) (w ast.Visitor) { + gen, ok := node.(*ast.GenDecl) + if !ok { + return v + } + for _, spec := range gen.Specs { + if vspec, ok := spec.(*ast.ValueSpec); ok { + for _, n := range vspec.Names { + v.vars = append(v.vars, n.Name) + } + } + } + return v +} + +type extractedVars map[string][]string + +func (e extractedVars) Value(key string) []string { + if v, ok := e[key]; ok { + return v + } + panic(fmt.Errorf("unknown key %s", key)) +} + +func extractVars(file string) (extractedVars, error) { + fset := token.NewFileSet() + + f, err := parser.ParseFile(fset, file, nil, 0) + if err != nil { + return nil, err + } + + vars := make(map[string][]string) + for _, d := range f.Decls { + switch d := d.(type) { + case *ast.FuncDecl: + sn := "" + switch rt := d.Recv.List[0].Type.(type) { + case *ast.Ident: + sn = rt.Name + case *ast.StarExpr: + sn = rt.X.(*ast.Ident).Name + default: + panic("unknown receiver type") + } + + key := fmt.Sprintf("%s.%s", sn, d.Name.Name) + vis := &varVisitor{fset: fset} + ast.Walk(vis, d.Body) + vars[key] = vis.vars + } + } + return vars, nil +} + +func goGenerateTpl(cwd, tfile string, tpl *template.Template, tplData interface{}) error { + outf, err := os.OpenFile(tfile, os.O_CREATE|os.O_RDWR|os.O_TRUNC, 0600) + if err != nil { + return err + } + defer outf.Close() + + if err := tpl.Execute(outf, tplData); err != nil { + return err + } + + mode := gen.Encode | gen.Decode | gen.Size | gen.Marshal | gen.Unmarshal + + return Run(tfile, mode, false) +} + +var issue185IdentsTpl = template.Must(template.New("").Parse(` +package issue185 + +//go:generate msgp + +type Test1 struct { + Foo string + Bar string + {{ if .Extra }}Baz []string{{ end }} + Qux string +} + +type Test2 struct { + Foo string + Bar string + Baz string +} +`)) + +var issue185ComplexIdentsTpl = template.Must(template.New("").Parse(` +package issue185 + +//go:generate msgp + +type Test1 struct { + Foo string + Bar string + Baz string +} + +type Test2 struct { + Foo string + Bar string + Baz []string + Qux map[string]string + Yep map[string]map[string]string + Quack struct { + Quack struct { + Quack struct { + {{ if .Extra }}Extra []string{{ end }} + Quack string + } + } + } + Nup struct { + Foo string + Bar string + Baz []string + Qux map[string]string + Yep map[string]map[string]string + } + Ding struct { + Dong struct { + Dung struct { + Thing string + } + } + } +} + +type Test3 struct { + Foo string + Bar string + Baz string +} +`)) diff --git a/vendor/github.com/tinylib/msgp/main.go b/vendor/github.com/tinylib/msgp/main.go new file mode 100644 index 0000000..4369d73 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/main.go @@ -0,0 +1,119 @@ +// msgp is a code generation tool for +// creating methods to serialize and de-serialize +// Go data structures to and from MessagePack. +// +// This package is targeted at the `go generate` tool. +// To use it, include the following directive in a +// go source file with types requiring source generation: +// +// //go:generate msgp +// +// The go generate tool should set the proper environment variables for +// the generator to execute without any command-line flags. However, the +// following options are supported, if you need them: +// +// -o = output file name (default is {input}_gen.go) +// -file = input file name (or directory; default is $GOFILE, which is set by the `go generate` command) +// -io = satisfy the `msgp.Decodable` and `msgp.Encodable` interfaces (default is true) +// -marshal = satisfy the `msgp.Marshaler` and `msgp.Unmarshaler` interfaces (default is true) +// -tests = generate tests and benchmarks (default is true) +// +// For more information, please read README.md, and the wiki at github.com/tinylib/msgp +// +package main + +import ( + "flag" + "fmt" + "os" + "path/filepath" + "strings" + + "github.com/tinylib/msgp/gen" + "github.com/tinylib/msgp/parse" + "github.com/tinylib/msgp/printer" + "github.com/ttacon/chalk" +) + +var ( + out = flag.String("o", "", "output file") + file = flag.String("file", "", "input file") + encode = flag.Bool("io", true, "create Encode and Decode methods") + marshal = flag.Bool("marshal", true, "create Marshal and Unmarshal methods") + tests = flag.Bool("tests", true, "create tests and benchmarks") + unexported = flag.Bool("unexported", false, "also process unexported types") +) + +func main() { + flag.Parse() + + // GOFILE is set by go generate + if *file == "" { + *file = os.Getenv("GOFILE") + if *file == "" { + fmt.Println(chalk.Red.Color("No file to parse.")) + os.Exit(1) + } + } + + var mode gen.Method + if *encode { + mode |= (gen.Encode | gen.Decode | gen.Size) + } + if *marshal { + mode |= (gen.Marshal | gen.Unmarshal | gen.Size) + } + if *tests { + mode |= gen.Test + } + + if mode&^gen.Test == 0 { + fmt.Println(chalk.Red.Color("No methods to generate; -io=false && -marshal=false")) + os.Exit(1) + } + + if err := Run(*file, mode, *unexported); err != nil { + fmt.Println(chalk.Red.Color(err.Error())) + os.Exit(1) + } +} + +// Run writes all methods using the associated file or path, e.g. +// +// err := msgp.Run("path/to/myfile.go", gen.Size|gen.Marshal|gen.Unmarshal|gen.Test, false) +// +func Run(gofile string, mode gen.Method, unexported bool) error { + if mode&^gen.Test == 0 { + return nil + } + fmt.Println(chalk.Magenta.Color("======== MessagePack Code Generator =======")) + fmt.Printf(chalk.Magenta.Color(">>> Input: \"%s\"\n"), gofile) + fs, err := parse.File(gofile, unexported) + if err != nil { + return err + } + + if len(fs.Identities) == 0 { + fmt.Println(chalk.Magenta.Color("No types requiring code generation were found!")) + return nil + } + + return printer.PrintFile(newFilename(gofile, fs.Package), fs, mode) +} + +// picks a new file name based on input flags and input filename(s). +func newFilename(old string, pkg string) string { + if *out != "" { + if pre := strings.TrimPrefix(*out, old); len(pre) > 0 && + !strings.HasSuffix(*out, ".go") { + return filepath.Join(old, *out) + } + return *out + } + + if fi, err := os.Stat(old); err == nil && fi.IsDir() { + old = filepath.Join(old, pkg) + } + // new file name is old file name + _gen.go + return strings.TrimSuffix(old, ".go") + "_gen.go" +} diff --git a/vendor/github.com/tinylib/msgp/msgp/advise_linux.go b/vendor/github.com/tinylib/msgp/msgp/advise_linux.go new file mode 100644 index 0000000..6c6bb37 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/advise_linux.go @@ -0,0 +1,24 @@ +// +build linux,!appengine + +package msgp + +import ( + "os" + "syscall" +) + +func adviseRead(mem []byte) { + syscall.Madvise(mem, syscall.MADV_SEQUENTIAL|syscall.MADV_WILLNEED) +} + +func adviseWrite(mem []byte) { + syscall.Madvise(mem, syscall.MADV_SEQUENTIAL) +} + +func fallocate(f *os.File, sz int64) error { + err := syscall.Fallocate(int(f.Fd()), 0, 0, sz) + if err == syscall.ENOTSUP { + return f.Truncate(sz) + } + return err +} diff --git a/vendor/github.com/tinylib/msgp/msgp/advise_other.go b/vendor/github.com/tinylib/msgp/msgp/advise_other.go new file mode 100644 index 0000000..da65ea5 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/advise_other.go @@ -0,0 +1,17 @@ +// +build !linux appengine + +package msgp + +import ( + "os" +) + +// TODO: darwin, BSD support + +func adviseRead(mem []byte) {} + +func adviseWrite(mem []byte) {} + +func fallocate(f *os.File, sz int64) error { + return f.Truncate(sz) +} diff --git a/vendor/github.com/tinylib/msgp/msgp/circular.go b/vendor/github.com/tinylib/msgp/msgp/circular.go new file mode 100644 index 0000000..a0434c7 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/circular.go @@ -0,0 +1,39 @@ +package msgp + +type timer interface { + StartTimer() + StopTimer() +} + +// EndlessReader is an io.Reader +// that loops over the same data +// endlessly. It is used for benchmarking. +type EndlessReader struct { + tb timer + data []byte + offset int +} + +// NewEndlessReader returns a new endless reader +func NewEndlessReader(b []byte, tb timer) *EndlessReader { + return &EndlessReader{tb: tb, data: b, offset: 0} +} + +// Read implements io.Reader. In practice, it +// always returns (len(p), nil), although it +// fills the supplied slice while the benchmark +// timer is stopped. +func (c *EndlessReader) Read(p []byte) (int, error) { + c.tb.StopTimer() + var n int + l := len(p) + m := len(c.data) + for n < l { + nn := copy(p[n:], c.data[c.offset:]) + n += nn + c.offset += nn + c.offset %= m + } + c.tb.StartTimer() + return n, nil +} diff --git a/vendor/github.com/tinylib/msgp/msgp/defs.go b/vendor/github.com/tinylib/msgp/msgp/defs.go new file mode 100644 index 0000000..c634eef --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/defs.go @@ -0,0 +1,142 @@ +// This package is the support library for the msgp code generator (http://github.com/tinylib/msgp). +// +// This package defines the utilites used by the msgp code generator for encoding and decoding MessagePack +// from []byte and io.Reader/io.Writer types. Much of this package is devoted to helping the msgp code +// generator implement the Marshaler/Unmarshaler and Encodable/Decodable interfaces. +// +// This package defines four "families" of functions: +// - AppendXxxx() appends an object to a []byte in MessagePack encoding. +// - ReadXxxxBytes() reads an object from a []byte and returns the remaining bytes. +// - (*Writer).WriteXxxx() writes an object to the buffered *Writer type. +// - (*Reader).ReadXxxx() reads an object from a buffered *Reader type. +// +// Once a type has satisfied the `Encodable` and `Decodable` interfaces, +// it can be written and read from arbitrary `io.Writer`s and `io.Reader`s using +// msgp.Encode(io.Writer, msgp.Encodable) +// and +// msgp.Decode(io.Reader, msgp.Decodable) +// +// There are also methods for converting MessagePack to JSON without +// an explicit de-serialization step. +// +// For additional tips, tricks, and gotchas, please visit +// the wiki at http://github.com/tinylib/msgp +package msgp + +const last4 = 0x0f +const first4 = 0xf0 +const last5 = 0x1f +const first3 = 0xe0 +const last7 = 0x7f + +func isfixint(b byte) bool { + return b>>7 == 0 +} + +func isnfixint(b byte) bool { + return b&first3 == mnfixint +} + +func isfixmap(b byte) bool { + return b&first4 == mfixmap +} + +func isfixarray(b byte) bool { + return b&first4 == mfixarray +} + +func isfixstr(b byte) bool { + return b&first3 == mfixstr +} + +func wfixint(u uint8) byte { + return u & last7 +} + +func rfixint(b byte) uint8 { + return b +} + +func wnfixint(i int8) byte { + return byte(i) | mnfixint +} + +func rnfixint(b byte) int8 { + return int8(b) +} + +func rfixmap(b byte) uint8 { + return b & last4 +} + +func wfixmap(u uint8) byte { + return mfixmap | (u & last4) +} + +func rfixstr(b byte) uint8 { + return b & last5 +} + +func wfixstr(u uint8) byte { + return (u & last5) | mfixstr +} + +func rfixarray(b byte) uint8 { + return (b & last4) +} + +func wfixarray(u uint8) byte { + return (u & last4) | mfixarray +} + +// These are all the byte +// prefixes defined by the +// msgpack standard +const ( + // 0XXXXXXX + mfixint uint8 = 0x00 + + // 111XXXXX + mnfixint uint8 = 0xe0 + + // 1000XXXX + mfixmap uint8 = 0x80 + + // 1001XXXX + mfixarray uint8 = 0x90 + + // 101XXXXX + mfixstr uint8 = 0xa0 + + mnil uint8 = 0xc0 + mfalse uint8 = 0xc2 + mtrue uint8 = 0xc3 + mbin8 uint8 = 0xc4 + mbin16 uint8 = 0xc5 + mbin32 uint8 = 0xc6 + mext8 uint8 = 0xc7 + mext16 uint8 = 0xc8 + mext32 uint8 = 0xc9 + mfloat32 uint8 = 0xca + mfloat64 uint8 = 0xcb + muint8 uint8 = 0xcc + muint16 uint8 = 0xcd + muint32 uint8 = 0xce + muint64 uint8 = 0xcf + mint8 uint8 = 0xd0 + mint16 uint8 = 0xd1 + mint32 uint8 = 0xd2 + mint64 uint8 = 0xd3 + mfixext1 uint8 = 0xd4 + mfixext2 uint8 = 0xd5 + mfixext4 uint8 = 0xd6 + mfixext8 uint8 = 0xd7 + mfixext16 uint8 = 0xd8 + mstr8 uint8 = 0xd9 + mstr16 uint8 = 0xda + mstr32 uint8 = 0xdb + marray16 uint8 = 0xdc + marray32 uint8 = 0xdd + mmap16 uint8 = 0xde + mmap32 uint8 = 0xdf +) diff --git a/vendor/github.com/tinylib/msgp/msgp/defs_test.go b/vendor/github.com/tinylib/msgp/msgp/defs_test.go new file mode 100644 index 0000000..667dfd6 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/defs_test.go @@ -0,0 +1,12 @@ +package msgp_test + +//go:generate msgp -o=defgen_test.go -tests=false + +type Blobs []Blob + +type Blob struct { + Name string `msg:"name"` + Float float64 `msg:"float"` + Bytes []byte `msg:"bytes"` + Amount int64 `msg:"amount"` +} diff --git a/vendor/github.com/tinylib/msgp/msgp/edit.go b/vendor/github.com/tinylib/msgp/msgp/edit.go new file mode 100644 index 0000000..b473a6f --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/edit.go @@ -0,0 +1,242 @@ +package msgp + +import ( + "math" +) + +// Locate returns a []byte pointing to the field +// in a messagepack map with the provided key. (The returned []byte +// points to a sub-slice of 'raw'; Locate does no allocations.) If the +// key doesn't exist in the map, a zero-length []byte will be returned. +func Locate(key string, raw []byte) []byte { + s, n := locate(raw, key) + return raw[s:n] +} + +// Replace takes a key ("key") in a messagepack map ("raw") +// and replaces its value with the one provided and returns +// the new []byte. The returned []byte may point to the same +// memory as "raw". Replace makes no effort to evaluate the validity +// of the contents of 'val'. It may use up to the full capacity of 'raw.' +// Replace returns 'nil' if the field doesn't exist or if the object in 'raw' +// is not a map. +func Replace(key string, raw []byte, val []byte) []byte { + start, end := locate(raw, key) + if start == end { + return nil + } + return replace(raw, start, end, val, true) +} + +// CopyReplace works similarly to Replace except that the returned +// byte slice does not point to the same memory as 'raw'. CopyReplace +// returns 'nil' if the field doesn't exist or 'raw' isn't a map. +func CopyReplace(key string, raw []byte, val []byte) []byte { + start, end := locate(raw, key) + if start == end { + return nil + } + return replace(raw, start, end, val, false) +} + +// Remove removes a key-value pair from 'raw'. It returns +// 'raw' unchanged if the key didn't exist. +func Remove(key string, raw []byte) []byte { + start, end := locateKV(raw, key) + if start == end { + return raw + } + raw = raw[:start+copy(raw[start:], raw[end:])] + return resizeMap(raw, -1) +} + +// HasKey returns whether the map in 'raw' has +// a field with key 'key' +func HasKey(key string, raw []byte) bool { + sz, bts, err := ReadMapHeaderBytes(raw) + if err != nil { + return false + } + var field []byte + for i := uint32(0); i < sz; i++ { + field, bts, err = ReadStringZC(bts) + if err != nil { + return false + } + if UnsafeString(field) == key { + return true + } + } + return false +} + +func replace(raw []byte, start int, end int, val []byte, inplace bool) []byte { + ll := end - start // length of segment to replace + lv := len(val) + + if inplace { + extra := lv - ll + + // fastest case: we're doing + // a 1:1 replacement + if extra == 0 { + copy(raw[start:], val) + return raw + + } else if extra < 0 { + // 'val' smaller than replaced value + // copy in place and shift back + + x := copy(raw[start:], val) + y := copy(raw[start+x:], raw[end:]) + return raw[:start+x+y] + + } else if extra < cap(raw)-len(raw) { + // 'val' less than (cap-len) extra bytes + // copy in place and shift forward + raw = raw[0 : len(raw)+extra] + // shift end forward + copy(raw[end+extra:], raw[end:]) + copy(raw[start:], val) + return raw + } + } + + // we have to allocate new space + out := make([]byte, len(raw)+len(val)-ll) + x := copy(out, raw[:start]) + y := copy(out[x:], val) + copy(out[x+y:], raw[end:]) + return out +} + +// locate does a naive O(n) search for the map key; returns start, end +// (returns 0,0 on error) +func locate(raw []byte, key string) (start int, end int) { + var ( + sz uint32 + bts []byte + field []byte + err error + ) + sz, bts, err = ReadMapHeaderBytes(raw) + if err != nil { + return + } + + // loop and locate field + for i := uint32(0); i < sz; i++ { + field, bts, err = ReadStringZC(bts) + if err != nil { + return 0, 0 + } + if UnsafeString(field) == key { + // start location + l := len(raw) + start = l - len(bts) + bts, err = Skip(bts) + if err != nil { + return 0, 0 + } + end = l - len(bts) + return + } + bts, err = Skip(bts) + if err != nil { + return 0, 0 + } + } + return 0, 0 +} + +// locate key AND value +func locateKV(raw []byte, key string) (start int, end int) { + var ( + sz uint32 + bts []byte + field []byte + err error + ) + sz, bts, err = ReadMapHeaderBytes(raw) + if err != nil { + return 0, 0 + } + + for i := uint32(0); i < sz; i++ { + tmp := len(bts) + field, bts, err = ReadStringZC(bts) + if err != nil { + return 0, 0 + } + if UnsafeString(field) == key { + start = len(raw) - tmp + bts, err = Skip(bts) + if err != nil { + return 0, 0 + } + end = len(raw) - len(bts) + return + } + bts, err = Skip(bts) + if err != nil { + return 0, 0 + } + } + return 0, 0 +} + +// delta is delta on map size +func resizeMap(raw []byte, delta int64) []byte { + var sz int64 + switch raw[0] { + case mmap16: + sz = int64(big.Uint16(raw[1:])) + if sz+delta <= math.MaxUint16 { + big.PutUint16(raw[1:], uint16(sz+delta)) + return raw + } + if cap(raw)-len(raw) >= 2 { + raw = raw[0 : len(raw)+2] + copy(raw[5:], raw[3:]) + raw[0] = mmap32 + big.PutUint32(raw[1:], uint32(sz+delta)) + return raw + } + n := make([]byte, 0, len(raw)+5) + n = AppendMapHeader(n, uint32(sz+delta)) + return append(n, raw[3:]...) + + case mmap32: + sz = int64(big.Uint32(raw[1:])) + big.PutUint32(raw[1:], uint32(sz+delta)) + return raw + + default: + sz = int64(rfixmap(raw[0])) + if sz+delta < 16 { + raw[0] = wfixmap(uint8(sz + delta)) + return raw + } else if sz+delta <= math.MaxUint16 { + if cap(raw)-len(raw) >= 2 { + raw = raw[0 : len(raw)+2] + copy(raw[3:], raw[1:]) + raw[0] = mmap16 + big.PutUint16(raw[1:], uint16(sz+delta)) + return raw + } + n := make([]byte, 0, len(raw)+5) + n = AppendMapHeader(n, uint32(sz+delta)) + return append(n, raw[1:]...) + } + if cap(raw)-len(raw) >= 4 { + raw = raw[0 : len(raw)+4] + copy(raw[5:], raw[1:]) + raw[0] = mmap32 + big.PutUint32(raw[1:], uint32(sz+delta)) + return raw + } + n := make([]byte, 0, len(raw)+5) + n = AppendMapHeader(n, uint32(sz+delta)) + return append(n, raw[1:]...) + } +} diff --git a/vendor/github.com/tinylib/msgp/msgp/edit_test.go b/vendor/github.com/tinylib/msgp/msgp/edit_test.go new file mode 100644 index 0000000..e33b4e1 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/edit_test.go @@ -0,0 +1,200 @@ +package msgp + +import ( + "bytes" + "reflect" + "testing" +) + +func TestRemove(t *testing.T) { + var buf bytes.Buffer + w := NewWriter(&buf) + w.WriteMapHeader(3) + w.WriteString("first") + w.WriteFloat64(-3.1) + w.WriteString("second") + w.WriteString("DELETE ME!!!") + w.WriteString("third") + w.WriteBytes([]byte("blah")) + w.Flush() + + raw := Remove("second", buf.Bytes()) + + m, _, err := ReadMapStrIntfBytes(raw, nil) + if err != nil { + t.Fatal(err) + } + if len(m) != 2 { + t.Errorf("expected %d fields; found %d", 2, len(m)) + } + if _, ok := m["first"]; !ok { + t.Errorf("field %q not found", "first") + } + if _, ok := m["third"]; !ok { + t.Errorf("field %q not found", "third") + } + if _, ok := m["second"]; ok { + t.Errorf("field %q (deleted field) still present", "second") + } +} + +func TestLocate(t *testing.T) { + var buf bytes.Buffer + en := NewWriter(&buf) + en.WriteMapHeader(2) + en.WriteString("thing_one") + en.WriteString("value_one") + en.WriteString("thing_two") + en.WriteFloat64(2.0) + en.Flush() + + field := Locate("thing_one", buf.Bytes()) + if len(field) == 0 { + t.Fatal("field not found") + } + + if !HasKey("thing_one", buf.Bytes()) { + t.Fatal("field not found") + } + + var zbuf bytes.Buffer + w := NewWriter(&zbuf) + w.WriteString("value_one") + w.Flush() + + if !bytes.Equal(zbuf.Bytes(), field) { + t.Errorf("got %q; wanted %q", field, zbuf.Bytes()) + } + + zbuf.Reset() + w.WriteFloat64(2.0) + w.Flush() + field = Locate("thing_two", buf.Bytes()) + if len(field) == 0 { + t.Fatal("field not found") + } + if !bytes.Equal(zbuf.Bytes(), field) { + t.Errorf("got %q; wanted %q", field, zbuf.Bytes()) + } + + field = Locate("nope", buf.Bytes()) + if len(field) != 0 { + t.Fatalf("wanted a zero-length returned slice") + } + +} + +func TestReplace(t *testing.T) { + // there are 4 cases that need coverage: + // - new value is smaller than old value + // - new value is the same size as the old value + // - new value is larger than old, but fits within cap(b) + // - new value is larger than old, and doesn't fit within cap(b) + + var buf bytes.Buffer + en := NewWriter(&buf) + en.WriteMapHeader(3) + en.WriteString("thing_one") + en.WriteString("value_one") + en.WriteString("thing_two") + en.WriteFloat64(2.0) + en.WriteString("some_bytes") + en.WriteBytes([]byte("here are some bytes")) + en.Flush() + + // same-size replacement + var fbuf bytes.Buffer + w := NewWriter(&fbuf) + w.WriteFloat64(4.0) + w.Flush() + + // replace 2.0 with 4.0 in field two + raw := Replace("thing_two", buf.Bytes(), fbuf.Bytes()) + if len(raw) == 0 { + t.Fatal("field not found") + } + var err error + m := make(map[string]interface{}) + m, _, err = ReadMapStrIntfBytes(raw, m) + if err != nil { + t.Logf("%q", raw) + t.Fatal(err) + } + + if !reflect.DeepEqual(m["thing_two"], 4.0) { + t.Errorf("wanted %v; got %v", 4.0, m["thing_two"]) + } + + // smaller-size replacement + // replace 2.0 with []byte("hi!") + fbuf.Reset() + w.WriteBytes([]byte("hi!")) + w.Flush() + raw = Replace("thing_two", raw, fbuf.Bytes()) + if len(raw) == 0 { + t.Fatal("field not found") + } + + m, _, err = ReadMapStrIntfBytes(raw, m) + if err != nil { + t.Logf("%q", raw) + t.Fatal(err) + } + + if !reflect.DeepEqual(m["thing_two"], []byte("hi!")) { + t.Errorf("wanted %v; got %v", []byte("hi!"), m["thing_two"]) + } + + // larger-size replacement + fbuf.Reset() + w.WriteBytes([]byte("some even larger bytes than before")) + w.Flush() + raw = Replace("some_bytes", raw, fbuf.Bytes()) + if len(raw) == 0 { + t.Logf("%q", raw) + t.Fatal(err) + } + + m, _, err = ReadMapStrIntfBytes(raw, m) + if err != nil { + t.Logf("%q", raw) + t.Fatal(err) + } + + if !reflect.DeepEqual(m["some_bytes"], []byte("some even larger bytes than before")) { + t.Errorf("wanted %v; got %v", []byte("hello there!"), m["some_bytes"]) + } + + // identical in-place replacement + field := Locate("some_bytes", raw) + newraw := CopyReplace("some_bytes", raw, field) + + if !bytes.Equal(newraw, raw) { + t.Logf("in: %q", raw) + t.Logf("out: %q", newraw) + t.Error("bytes not equal after copyreplace") + } +} + +func BenchmarkLocate(b *testing.B) { + var buf bytes.Buffer + en := NewWriter(&buf) + en.WriteMapHeader(3) + en.WriteString("thing_one") + en.WriteString("value_one") + en.WriteString("thing_two") + en.WriteFloat64(2.0) + en.WriteString("thing_three") + en.WriteBytes([]byte("hello!")) + en.Flush() + + raw := buf.Bytes() + // bytes/s will be the number of bytes traversed per unit of time + field := Locate("thing_three", raw) + b.SetBytes(int64(len(raw) - len(field))) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + Locate("thing_three", raw) + } +} diff --git a/vendor/github.com/tinylib/msgp/msgp/elsize.go b/vendor/github.com/tinylib/msgp/msgp/elsize.go new file mode 100644 index 0000000..95762e7 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/elsize.go @@ -0,0 +1,99 @@ +package msgp + +// size of every object on the wire, +// plus type information. gives us +// constant-time type information +// for traversing composite objects. +// +var sizes = [256]bytespec{ + mnil: {size: 1, extra: constsize, typ: NilType}, + mfalse: {size: 1, extra: constsize, typ: BoolType}, + mtrue: {size: 1, extra: constsize, typ: BoolType}, + mbin8: {size: 2, extra: extra8, typ: BinType}, + mbin16: {size: 3, extra: extra16, typ: BinType}, + mbin32: {size: 5, extra: extra32, typ: BinType}, + mext8: {size: 3, extra: extra8, typ: ExtensionType}, + mext16: {size: 4, extra: extra16, typ: ExtensionType}, + mext32: {size: 6, extra: extra32, typ: ExtensionType}, + mfloat32: {size: 5, extra: constsize, typ: Float32Type}, + mfloat64: {size: 9, extra: constsize, typ: Float64Type}, + muint8: {size: 2, extra: constsize, typ: UintType}, + muint16: {size: 3, extra: constsize, typ: UintType}, + muint32: {size: 5, extra: constsize, typ: UintType}, + muint64: {size: 9, extra: constsize, typ: UintType}, + mint8: {size: 2, extra: constsize, typ: IntType}, + mint16: {size: 3, extra: constsize, typ: IntType}, + mint32: {size: 5, extra: constsize, typ: IntType}, + mint64: {size: 9, extra: constsize, typ: IntType}, + mfixext1: {size: 3, extra: constsize, typ: ExtensionType}, + mfixext2: {size: 4, extra: constsize, typ: ExtensionType}, + mfixext4: {size: 6, extra: constsize, typ: ExtensionType}, + mfixext8: {size: 10, extra: constsize, typ: ExtensionType}, + mfixext16: {size: 18, extra: constsize, typ: ExtensionType}, + mstr8: {size: 2, extra: extra8, typ: StrType}, + mstr16: {size: 3, extra: extra16, typ: StrType}, + mstr32: {size: 5, extra: extra32, typ: StrType}, + marray16: {size: 3, extra: array16v, typ: ArrayType}, + marray32: {size: 5, extra: array32v, typ: ArrayType}, + mmap16: {size: 3, extra: map16v, typ: MapType}, + mmap32: {size: 5, extra: map32v, typ: MapType}, +} + +func init() { + // set up fixed fields + + // fixint + for i := mfixint; i < 0x80; i++ { + sizes[i] = bytespec{size: 1, extra: constsize, typ: IntType} + } + + // nfixint + for i := uint16(mnfixint); i < 0x100; i++ { + sizes[uint8(i)] = bytespec{size: 1, extra: constsize, typ: IntType} + } + + // fixstr gets constsize, + // since the prefix yields the size + for i := mfixstr; i < 0xc0; i++ { + sizes[i] = bytespec{size: 1 + rfixstr(i), extra: constsize, typ: StrType} + } + + // fixmap + for i := mfixmap; i < 0x90; i++ { + sizes[i] = bytespec{size: 1, extra: varmode(2 * rfixmap(i)), typ: MapType} + } + + // fixarray + for i := mfixarray; i < 0xa0; i++ { + sizes[i] = bytespec{size: 1, extra: varmode(rfixarray(i)), typ: ArrayType} + } +} + +// a valid bytespsec has +// non-zero 'size' and +// non-zero 'typ' +type bytespec struct { + size uint8 // prefix size information + extra varmode // extra size information + typ Type // type + _ byte // makes bytespec 4 bytes (yes, this matters) +} + +// size mode +// if positive, # elements for composites +type varmode int8 + +const ( + constsize varmode = 0 // constant size (size bytes + uint8(varmode) objects) + extra8 = -1 // has uint8(p[1]) extra bytes + extra16 = -2 // has be16(p[1:]) extra bytes + extra32 = -3 // has be32(p[1:]) extra bytes + map16v = -4 // use map16 + map32v = -5 // use map32 + array16v = -6 // use array16 + array32v = -7 // use array32 +) + +func getType(v byte) Type { + return sizes[v].typ +} diff --git a/vendor/github.com/tinylib/msgp/msgp/errors.go b/vendor/github.com/tinylib/msgp/msgp/errors.go new file mode 100644 index 0000000..8f19726 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/errors.go @@ -0,0 +1,157 @@ +package msgp + +import ( + "fmt" + "reflect" +) + +var ( + // ErrShortBytes is returned when the + // slice being decoded is too short to + // contain the contents of the message + ErrShortBytes error = errShort{} + + // this error is only returned + // if we reach code that should + // be unreachable + fatal error = errFatal{} +) + +// Error is the interface satisfied +// by all of the errors that originate +// from this package. +type Error interface { + error + + // Resumable returns whether + // or not the error means that + // the stream of data is malformed + // and the information is unrecoverable. + Resumable() bool +} + +type errShort struct{} + +func (e errShort) Error() string { return "msgp: too few bytes left to read object" } +func (e errShort) Resumable() bool { return false } + +type errFatal struct{} + +func (f errFatal) Error() string { return "msgp: fatal decoding error (unreachable code)" } +func (f errFatal) Resumable() bool { return false } + +// ArrayError is an error returned +// when decoding a fix-sized array +// of the wrong size +type ArrayError struct { + Wanted uint32 + Got uint32 +} + +// Error implements the error interface +func (a ArrayError) Error() string { + return fmt.Sprintf("msgp: wanted array of size %d; got %d", a.Wanted, a.Got) +} + +// Resumable is always 'true' for ArrayErrors +func (a ArrayError) Resumable() bool { return true } + +// IntOverflow is returned when a call +// would downcast an integer to a type +// with too few bits to hold its value. +type IntOverflow struct { + Value int64 // the value of the integer + FailedBitsize int // the bit size that the int64 could not fit into +} + +// Error implements the error interface +func (i IntOverflow) Error() string { + return fmt.Sprintf("msgp: %d overflows int%d", i.Value, i.FailedBitsize) +} + +// Resumable is always 'true' for overflows +func (i IntOverflow) Resumable() bool { return true } + +// UintOverflow is returned when a call +// would downcast an unsigned integer to a type +// with too few bits to hold its value +type UintOverflow struct { + Value uint64 // value of the uint + FailedBitsize int // the bit size that couldn't fit the value +} + +// Error implements the error interface +func (u UintOverflow) Error() string { + return fmt.Sprintf("msgp: %d overflows uint%d", u.Value, u.FailedBitsize) +} + +// Resumable is always 'true' for overflows +func (u UintOverflow) Resumable() bool { return true } + +// UintBelowZero is returned when a call +// would cast a signed integer below zero +// to an unsigned integer. +type UintBelowZero struct { + Value int64 // value of the incoming int +} + +// Error implements the error interface +func (u UintBelowZero) Error() string { + return fmt.Sprintf("msgp: attempted to cast int %d to unsigned", u.Value) +} + +// Resumable is always 'true' for overflows +func (u UintBelowZero) Resumable() bool { return true } + +// A TypeError is returned when a particular +// decoding method is unsuitable for decoding +// a particular MessagePack value. +type TypeError struct { + Method Type // Type expected by method + Encoded Type // Type actually encoded +} + +// Error implements the error interface +func (t TypeError) Error() string { + return fmt.Sprintf("msgp: attempted to decode type %q with method for %q", t.Encoded, t.Method) +} + +// Resumable returns 'true' for TypeErrors +func (t TypeError) Resumable() bool { return true } + +// returns either InvalidPrefixError or +// TypeError depending on whether or not +// the prefix is recognized +func badPrefix(want Type, lead byte) error { + t := sizes[lead].typ + if t == InvalidType { + return InvalidPrefixError(lead) + } + return TypeError{Method: want, Encoded: t} +} + +// InvalidPrefixError is returned when a bad encoding +// uses a prefix that is not recognized in the MessagePack standard. +// This kind of error is unrecoverable. +type InvalidPrefixError byte + +// Error implements the error interface +func (i InvalidPrefixError) Error() string { + return fmt.Sprintf("msgp: unrecognized type prefix 0x%x", byte(i)) +} + +// Resumable returns 'false' for InvalidPrefixErrors +func (i InvalidPrefixError) Resumable() bool { return false } + +// ErrUnsupportedType is returned +// when a bad argument is supplied +// to a function that takes `interface{}`. +type ErrUnsupportedType struct { + T reflect.Type +} + +// Error implements error +func (e *ErrUnsupportedType) Error() string { return fmt.Sprintf("msgp: type %q not supported", e.T) } + +// Resumable returns 'true' for ErrUnsupportedType +func (e *ErrUnsupportedType) Resumable() bool { return true } diff --git a/vendor/github.com/tinylib/msgp/msgp/extension.go b/vendor/github.com/tinylib/msgp/msgp/extension.go new file mode 100644 index 0000000..0b31dcd --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/extension.go @@ -0,0 +1,549 @@ +package msgp + +import ( + "fmt" + "math" +) + +const ( + // Complex64Extension is the extension number used for complex64 + Complex64Extension = 3 + + // Complex128Extension is the extension number used for complex128 + Complex128Extension = 4 + + // TimeExtension is the extension number used for time.Time + TimeExtension = 5 +) + +// our extensions live here +var extensionReg = make(map[int8]func() Extension) + +// RegisterExtension registers extensions so that they +// can be initialized and returned by methods that +// decode `interface{}` values. This should only +// be called during initialization. f() should return +// a newly-initialized zero value of the extension. Keep in +// mind that extensions 3, 4, and 5 are reserved for +// complex64, complex128, and time.Time, respectively, +// and that MessagePack reserves extension types from -127 to -1. +// +// For example, if you wanted to register a user-defined struct: +// +// msgp.RegisterExtension(10, func() msgp.Extension { &MyExtension{} }) +// +// RegisterExtension will panic if you call it multiple times +// with the same 'typ' argument, or if you use a reserved +// type (3, 4, or 5). +func RegisterExtension(typ int8, f func() Extension) { + switch typ { + case Complex64Extension, Complex128Extension, TimeExtension: + panic(fmt.Sprint("msgp: forbidden extension type:", typ)) + } + if _, ok := extensionReg[typ]; ok { + panic(fmt.Sprint("msgp: RegisterExtension() called with typ", typ, "more than once")) + } + extensionReg[typ] = f +} + +// ExtensionTypeError is an error type returned +// when there is a mis-match between an extension type +// and the type encoded on the wire +type ExtensionTypeError struct { + Got int8 + Want int8 +} + +// Error implements the error interface +func (e ExtensionTypeError) Error() string { + return fmt.Sprintf("msgp: error decoding extension: wanted type %d; got type %d", e.Want, e.Got) +} + +// Resumable returns 'true' for ExtensionTypeErrors +func (e ExtensionTypeError) Resumable() bool { return true } + +func errExt(got int8, wanted int8) error { + return ExtensionTypeError{Got: got, Want: wanted} +} + +// Extension is the interface fulfilled +// by types that want to define their +// own binary encoding. +type Extension interface { + // ExtensionType should return + // a int8 that identifies the concrete + // type of the extension. (Types <0 are + // officially reserved by the MessagePack + // specifications.) + ExtensionType() int8 + + // Len should return the length + // of the data to be encoded + Len() int + + // MarshalBinaryTo should copy + // the data into the supplied slice, + // assuming that the slice has length Len() + MarshalBinaryTo([]byte) error + + UnmarshalBinary([]byte) error +} + +// RawExtension implements the Extension interface +type RawExtension struct { + Data []byte + Type int8 +} + +// ExtensionType implements Extension.ExtensionType, and returns r.Type +func (r *RawExtension) ExtensionType() int8 { return r.Type } + +// Len implements Extension.Len, and returns len(r.Data) +func (r *RawExtension) Len() int { return len(r.Data) } + +// MarshalBinaryTo implements Extension.MarshalBinaryTo, +// and returns a copy of r.Data +func (r *RawExtension) MarshalBinaryTo(d []byte) error { + copy(d, r.Data) + return nil +} + +// UnmarshalBinary implements Extension.UnmarshalBinary, +// and sets r.Data to the contents of the provided slice +func (r *RawExtension) UnmarshalBinary(b []byte) error { + if cap(r.Data) >= len(b) { + r.Data = r.Data[0:len(b)] + } else { + r.Data = make([]byte, len(b)) + } + copy(r.Data, b) + return nil +} + +// WriteExtension writes an extension type to the writer +func (mw *Writer) WriteExtension(e Extension) error { + l := e.Len() + var err error + switch l { + case 0: + o, err := mw.require(3) + if err != nil { + return err + } + mw.buf[o] = mext8 + mw.buf[o+1] = 0 + mw.buf[o+2] = byte(e.ExtensionType()) + case 1: + o, err := mw.require(2) + if err != nil { + return err + } + mw.buf[o] = mfixext1 + mw.buf[o+1] = byte(e.ExtensionType()) + case 2: + o, err := mw.require(2) + if err != nil { + return err + } + mw.buf[o] = mfixext2 + mw.buf[o+1] = byte(e.ExtensionType()) + case 4: + o, err := mw.require(2) + if err != nil { + return err + } + mw.buf[o] = mfixext4 + mw.buf[o+1] = byte(e.ExtensionType()) + case 8: + o, err := mw.require(2) + if err != nil { + return err + } + mw.buf[o] = mfixext8 + mw.buf[o+1] = byte(e.ExtensionType()) + case 16: + o, err := mw.require(2) + if err != nil { + return err + } + mw.buf[o] = mfixext16 + mw.buf[o+1] = byte(e.ExtensionType()) + default: + switch { + case l < math.MaxUint8: + o, err := mw.require(3) + if err != nil { + return err + } + mw.buf[o] = mext8 + mw.buf[o+1] = byte(uint8(l)) + mw.buf[o+2] = byte(e.ExtensionType()) + case l < math.MaxUint16: + o, err := mw.require(4) + if err != nil { + return err + } + mw.buf[o] = mext16 + big.PutUint16(mw.buf[o+1:], uint16(l)) + mw.buf[o+3] = byte(e.ExtensionType()) + default: + o, err := mw.require(6) + if err != nil { + return err + } + mw.buf[o] = mext32 + big.PutUint32(mw.buf[o+1:], uint32(l)) + mw.buf[o+5] = byte(e.ExtensionType()) + } + } + // we can only write directly to the + // buffer if we're sure that it + // fits the object + if l <= mw.bufsize() { + o, err := mw.require(l) + if err != nil { + return err + } + return e.MarshalBinaryTo(mw.buf[o:]) + } + // here we create a new buffer + // just large enough for the body + // and save it as the write buffer + err = mw.flush() + if err != nil { + return err + } + buf := make([]byte, l) + err = e.MarshalBinaryTo(buf) + if err != nil { + return err + } + mw.buf = buf + mw.wloc = l + return nil +} + +// peek at the extension type, assuming the next +// kind to be read is Extension +func (m *Reader) peekExtensionType() (int8, error) { + p, err := m.R.Peek(2) + if err != nil { + return 0, err + } + spec := sizes[p[0]] + if spec.typ != ExtensionType { + return 0, badPrefix(ExtensionType, p[0]) + } + if spec.extra == constsize { + return int8(p[1]), nil + } + size := spec.size + p, err = m.R.Peek(int(size)) + if err != nil { + return 0, err + } + return int8(p[size-1]), nil +} + +// peekExtension peeks at the extension encoding type +// (must guarantee at least 1 byte in 'b') +func peekExtension(b []byte) (int8, error) { + spec := sizes[b[0]] + size := spec.size + if spec.typ != ExtensionType { + return 0, badPrefix(ExtensionType, b[0]) + } + if len(b) < int(size) { + return 0, ErrShortBytes + } + // for fixed extensions, + // the type information is in + // the second byte + if spec.extra == constsize { + return int8(b[1]), nil + } + // otherwise, it's in the last + // part of the prefix + return int8(b[size-1]), nil +} + +// ReadExtension reads the next object from the reader +// as an extension. ReadExtension will fail if the next +// object in the stream is not an extension, or if +// e.Type() is not the same as the wire type. +func (m *Reader) ReadExtension(e Extension) (err error) { + var p []byte + p, err = m.R.Peek(2) + if err != nil { + return + } + lead := p[0] + var read int + var off int + switch lead { + case mfixext1: + if int8(p[1]) != e.ExtensionType() { + err = errExt(int8(p[1]), e.ExtensionType()) + return + } + p, err = m.R.Peek(3) + if err != nil { + return + } + err = e.UnmarshalBinary(p[2:]) + if err == nil { + _, err = m.R.Skip(3) + } + return + + case mfixext2: + if int8(p[1]) != e.ExtensionType() { + err = errExt(int8(p[1]), e.ExtensionType()) + return + } + p, err = m.R.Peek(4) + if err != nil { + return + } + err = e.UnmarshalBinary(p[2:]) + if err == nil { + _, err = m.R.Skip(4) + } + return + + case mfixext4: + if int8(p[1]) != e.ExtensionType() { + err = errExt(int8(p[1]), e.ExtensionType()) + return + } + p, err = m.R.Peek(6) + if err != nil { + return + } + err = e.UnmarshalBinary(p[2:]) + if err == nil { + _, err = m.R.Skip(6) + } + return + + case mfixext8: + if int8(p[1]) != e.ExtensionType() { + err = errExt(int8(p[1]), e.ExtensionType()) + return + } + p, err = m.R.Peek(10) + if err != nil { + return + } + err = e.UnmarshalBinary(p[2:]) + if err == nil { + _, err = m.R.Skip(10) + } + return + + case mfixext16: + if int8(p[1]) != e.ExtensionType() { + err = errExt(int8(p[1]), e.ExtensionType()) + return + } + p, err = m.R.Peek(18) + if err != nil { + return + } + err = e.UnmarshalBinary(p[2:]) + if err == nil { + _, err = m.R.Skip(18) + } + return + + case mext8: + p, err = m.R.Peek(3) + if err != nil { + return + } + if int8(p[2]) != e.ExtensionType() { + err = errExt(int8(p[2]), e.ExtensionType()) + return + } + read = int(uint8(p[1])) + off = 3 + + case mext16: + p, err = m.R.Peek(4) + if err != nil { + return + } + if int8(p[3]) != e.ExtensionType() { + err = errExt(int8(p[3]), e.ExtensionType()) + return + } + read = int(big.Uint16(p[1:])) + off = 4 + + case mext32: + p, err = m.R.Peek(6) + if err != nil { + return + } + if int8(p[5]) != e.ExtensionType() { + err = errExt(int8(p[5]), e.ExtensionType()) + return + } + read = int(big.Uint32(p[1:])) + off = 6 + + default: + err = badPrefix(ExtensionType, lead) + return + } + + p, err = m.R.Peek(read + off) + if err != nil { + return + } + err = e.UnmarshalBinary(p[off:]) + if err == nil { + _, err = m.R.Skip(read + off) + } + return +} + +// AppendExtension appends a MessagePack extension to the provided slice +func AppendExtension(b []byte, e Extension) ([]byte, error) { + l := e.Len() + var o []byte + var n int + switch l { + case 0: + o, n = ensure(b, 3) + o[n] = mext8 + o[n+1] = 0 + o[n+2] = byte(e.ExtensionType()) + return o[:n+3], nil + case 1: + o, n = ensure(b, 3) + o[n] = mfixext1 + o[n+1] = byte(e.ExtensionType()) + n += 2 + case 2: + o, n = ensure(b, 4) + o[n] = mfixext2 + o[n+1] = byte(e.ExtensionType()) + n += 2 + case 4: + o, n = ensure(b, 6) + o[n] = mfixext4 + o[n+1] = byte(e.ExtensionType()) + n += 2 + case 8: + o, n = ensure(b, 10) + o[n] = mfixext8 + o[n+1] = byte(e.ExtensionType()) + n += 2 + case 16: + o, n = ensure(b, 18) + o[n] = mfixext16 + o[n+1] = byte(e.ExtensionType()) + n += 2 + default: + switch { + case l < math.MaxUint8: + o, n = ensure(b, l+3) + o[n] = mext8 + o[n+1] = byte(uint8(l)) + o[n+2] = byte(e.ExtensionType()) + n += 3 + case l < math.MaxUint16: + o, n = ensure(b, l+4) + o[n] = mext16 + big.PutUint16(o[n+1:], uint16(l)) + o[n+3] = byte(e.ExtensionType()) + n += 4 + default: + o, n = ensure(b, l+6) + o[n] = mext32 + big.PutUint32(o[n+1:], uint32(l)) + o[n+5] = byte(e.ExtensionType()) + n += 6 + } + } + return o, e.MarshalBinaryTo(o[n:]) +} + +// ReadExtensionBytes reads an extension from 'b' into 'e' +// and returns any remaining bytes. +// Possible errors: +// - ErrShortBytes ('b' not long enough) +// - ExtensionTypeErorr{} (wire type not the same as e.Type()) +// - TypeErorr{} (next object not an extension) +// - InvalidPrefixError +// - An umarshal error returned from e.UnmarshalBinary +func ReadExtensionBytes(b []byte, e Extension) ([]byte, error) { + l := len(b) + if l < 3 { + return b, ErrShortBytes + } + lead := b[0] + var ( + sz int // size of 'data' + off int // offset of 'data' + typ int8 + ) + switch lead { + case mfixext1: + typ = int8(b[1]) + sz = 1 + off = 2 + case mfixext2: + typ = int8(b[1]) + sz = 2 + off = 2 + case mfixext4: + typ = int8(b[1]) + sz = 4 + off = 2 + case mfixext8: + typ = int8(b[1]) + sz = 8 + off = 2 + case mfixext16: + typ = int8(b[1]) + sz = 16 + off = 2 + case mext8: + sz = int(uint8(b[1])) + typ = int8(b[2]) + off = 3 + if sz == 0 { + return b[3:], e.UnmarshalBinary(b[3:3]) + } + case mext16: + if l < 4 { + return b, ErrShortBytes + } + sz = int(big.Uint16(b[1:])) + typ = int8(b[3]) + off = 4 + case mext32: + if l < 6 { + return b, ErrShortBytes + } + sz = int(big.Uint32(b[1:])) + typ = int8(b[5]) + off = 6 + default: + return b, badPrefix(ExtensionType, lead) + } + + if typ != e.ExtensionType() { + return b, errExt(typ, e.ExtensionType()) + } + + // the data of the extension starts + // at 'off' and is 'sz' bytes long + if len(b[off:]) < sz { + return b, ErrShortBytes + } + tot := off + sz + return b[tot:], e.UnmarshalBinary(b[off:tot]) +} diff --git a/vendor/github.com/tinylib/msgp/msgp/extension_test.go b/vendor/github.com/tinylib/msgp/msgp/extension_test.go new file mode 100644 index 0000000..5bf4273 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/extension_test.go @@ -0,0 +1,74 @@ +package msgp + +import ( + "bytes" + "math/rand" + "testing" + "time" +) + +var extSizes = [...]int{0, 1, 2, 4, 8, 16, int(tint8), int(tuint16), int(tuint32)} + +func randomExt() RawExtension { + e := RawExtension{} + e.Type = int8(rand.Int()) + e.Data = RandBytes(extSizes[rand.Intn(len(extSizes))]) + return e +} + +func TestReadWriteExtension(t *testing.T) { + rand.Seed(time.Now().Unix()) + var buf bytes.Buffer + en := NewWriter(&buf) + dc := NewReader(&buf) + + for i := 0; i < 25; i++ { + buf.Reset() + e := randomExt() + en.WriteExtension(&e) + en.Flush() + err := dc.ReadExtension(&e) + if err != nil { + t.Errorf("error with extension (length %d): %s", len(buf.Bytes()), err) + } + } +} + +func TestReadWriteExtensionBytes(t *testing.T) { + var bts []byte + rand.Seed(time.Now().Unix()) + + for i := 0; i < 24; i++ { + e := randomExt() + bts, _ = AppendExtension(bts[0:0], &e) + _, err := ReadExtensionBytes(bts, &e) + if err != nil { + t.Errorf("error with extension (length %d): %s", len(bts), err) + } + } +} + +func TestAppendAndWriteCompatibility(t *testing.T) { + rand.Seed(time.Now().Unix()) + + var bts []byte + var buf bytes.Buffer + en := NewWriter(&buf) + + for i := 0; i < 24; i++ { + buf.Reset() + e := randomExt() + bts, _ = AppendExtension(bts[0:0], &e) + en.WriteExtension(&e) + en.Flush() + + if !bytes.Equal(buf.Bytes(), bts) { + t.Errorf("the outputs are different:\n\t%x\n\t%x", buf.Bytes(), bts) + } + + _, err := ReadExtensionBytes(bts, &e) + if err != nil { + t.Errorf("error with extension (length %d): %s", len(bts), err) + } + } +} diff --git a/vendor/github.com/tinylib/msgp/msgp/file.go b/vendor/github.com/tinylib/msgp/msgp/file.go new file mode 100644 index 0000000..8e7370e --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/file.go @@ -0,0 +1,92 @@ +// +build linux darwin dragonfly freebsd netbsd openbsd +// +build !appengine + +package msgp + +import ( + "os" + "syscall" +) + +// ReadFile reads a file into 'dst' using +// a read-only memory mapping. Consequently, +// the file must be mmap-able, and the +// Unmarshaler should never write to +// the source memory. (Methods generated +// by the msgp tool obey that constraint, but +// user-defined implementations may not.) +// +// Reading and writing through file mappings +// is only efficient for large files; small +// files are best read and written using +// the ordinary streaming interfaces. +// +func ReadFile(dst Unmarshaler, file *os.File) error { + stat, err := file.Stat() + if err != nil { + return err + } + data, err := syscall.Mmap(int(file.Fd()), 0, int(stat.Size()), syscall.PROT_READ, syscall.MAP_SHARED) + if err != nil { + return err + } + adviseRead(data) + _, err = dst.UnmarshalMsg(data) + uerr := syscall.Munmap(data) + if err == nil { + err = uerr + } + return err +} + +// MarshalSizer is the combination +// of the Marshaler and Sizer +// interfaces. +type MarshalSizer interface { + Marshaler + Sizer +} + +// WriteFile writes a file from 'src' using +// memory mapping. It overwrites the entire +// contents of the previous file. +// The mapping size is calculated +// using the `Msgsize()` method +// of 'src', so it must produce a result +// equal to or greater than the actual encoded +// size of the object. Otherwise, +// a fault (SIGBUS) will occur. +// +// Reading and writing through file mappings +// is only efficient for large files; small +// files are best read and written using +// the ordinary streaming interfaces. +// +// NOTE: The performance of this call +// is highly OS- and filesystem-dependent. +// Users should take care to test that this +// performs as expected in a production environment. +// (Linux users should run a kernel and filesystem +// that support fallocate(2) for the best results.) +func WriteFile(src MarshalSizer, file *os.File) error { + sz := src.Msgsize() + err := fallocate(file, int64(sz)) + if err != nil { + return err + } + data, err := syscall.Mmap(int(file.Fd()), 0, sz, syscall.PROT_READ|syscall.PROT_WRITE, syscall.MAP_SHARED) + if err != nil { + return err + } + adviseWrite(data) + chunk := data[:0] + chunk, err = src.MarshalMsg(chunk) + if err != nil { + return err + } + uerr := syscall.Munmap(data) + if uerr != nil { + return uerr + } + return file.Truncate(int64(len(chunk))) +} diff --git a/vendor/github.com/tinylib/msgp/msgp/file_port.go b/vendor/github.com/tinylib/msgp/msgp/file_port.go new file mode 100644 index 0000000..6e654db --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/file_port.go @@ -0,0 +1,47 @@ +// +build windows appengine + +package msgp + +import ( + "io/ioutil" + "os" +) + +// MarshalSizer is the combination +// of the Marshaler and Sizer +// interfaces. +type MarshalSizer interface { + Marshaler + Sizer +} + +func ReadFile(dst Unmarshaler, file *os.File) error { + if u, ok := dst.(Decodable); ok { + return u.DecodeMsg(NewReader(file)) + } + + data, err := ioutil.ReadAll(file) + if err != nil { + return err + } + _, err = dst.UnmarshalMsg(data) + return err +} + +func WriteFile(src MarshalSizer, file *os.File) error { + if e, ok := src.(Encodable); ok { + w := NewWriter(file) + err := e.EncodeMsg(w) + if err == nil { + err = w.Flush() + } + return err + } + + raw, err := src.MarshalMsg(nil) + if err != nil { + return err + } + _, err = file.Write(raw) + return err +} diff --git a/vendor/github.com/tinylib/msgp/msgp/file_test.go b/vendor/github.com/tinylib/msgp/msgp/file_test.go new file mode 100644 index 0000000..1cc01ce --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/file_test.go @@ -0,0 +1,103 @@ +// +build linux darwin dragonfly freebsd netbsd openbsd + +package msgp_test + +import ( + "bytes" + "crypto/rand" + "github.com/tinylib/msgp/msgp" + prand "math/rand" + "os" + "testing" +) + +type rawBytes []byte + +func (r rawBytes) MarshalMsg(b []byte) ([]byte, error) { + return msgp.AppendBytes(b, []byte(r)), nil +} + +func (r rawBytes) Msgsize() int { + return msgp.BytesPrefixSize + len(r) +} + +func (r *rawBytes) UnmarshalMsg(b []byte) ([]byte, error) { + tmp, out, err := msgp.ReadBytesBytes(b, (*(*[]byte)(r))[:0]) + *r = rawBytes(tmp) + return out, err +} + +func TestReadWriteFile(t *testing.T) { + t.Parallel() + + f, err := os.Create("tmpfile") + if err != nil { + t.Fatal(err) + } + defer func() { + f.Close() + os.Remove("tmpfile") + }() + + data := make([]byte, 1024*1024) + rand.Read(data) + + err = msgp.WriteFile(rawBytes(data), f) + if err != nil { + t.Fatal(err) + } + + var out rawBytes + f.Seek(0, os.SEEK_SET) + err = msgp.ReadFile(&out, f) + if err != nil { + t.Fatal(err) + } + + if !bytes.Equal([]byte(out), []byte(data)) { + t.Fatal("Input and output not equal.") + } +} + +var blobstrings = []string{"", "a string", "a longer string here!"} +var blobfloats = []float64{0.0, -1.0, 1.0, 3.1415926535} +var blobints = []int64{0, 1, -1, 80000, 1 << 30} +var blobbytes = [][]byte{[]byte{}, []byte("hello"), []byte("{\"is_json\":true,\"is_compact\":\"unable to determine\"}")} + +func BenchmarkWriteReadFile(b *testing.B) { + + // let's not run out of disk space... + if b.N > 10000000 { + b.N = 10000000 + } + + fname := "bench-tmpfile" + f, err := os.Create(fname) + if err != nil { + b.Fatal(err) + } + defer func(f *os.File, name string) { + f.Close() + os.Remove(name) + }(f, fname) + + data := make(Blobs, b.N) + + for i := range data { + data[i].Name = blobstrings[prand.Intn(len(blobstrings))] + data[i].Float = blobfloats[prand.Intn(len(blobfloats))] + data[i].Amount = blobints[prand.Intn(len(blobints))] + data[i].Bytes = blobbytes[prand.Intn(len(blobbytes))] + } + + b.SetBytes(int64(data.Msgsize() / b.N)) + b.ResetTimer() + err = msgp.WriteFile(data, f) + if err != nil { + b.Fatal(err) + } + err = msgp.ReadFile(&data, f) + if err != nil { + b.Fatal(err) + } +} diff --git a/vendor/github.com/tinylib/msgp/msgp/floatbench_test.go b/vendor/github.com/tinylib/msgp/msgp/floatbench_test.go new file mode 100644 index 0000000..575b081 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/floatbench_test.go @@ -0,0 +1,25 @@ +package msgp + +import ( + "testing" +) + +func BenchmarkReadWriteFloat32(b *testing.B) { + var f float32 = 3.9081 + bts := AppendFloat32([]byte{}, f) + b.ResetTimer() + for i := 0; i < b.N; i++ { + bts = AppendFloat32(bts[0:0], f) + f, bts, _ = ReadFloat32Bytes(bts) + } +} + +func BenchmarkReadWriteFloat64(b *testing.B) { + var f float64 = 3.9081 + bts := AppendFloat64([]byte{}, f) + b.ResetTimer() + for i := 0; i < b.N; i++ { + bts = AppendFloat64(bts[0:0], f) + f, bts, _ = ReadFloat64Bytes(bts) + } +} diff --git a/vendor/github.com/tinylib/msgp/msgp/integers.go b/vendor/github.com/tinylib/msgp/msgp/integers.go new file mode 100644 index 0000000..f817d77 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/integers.go @@ -0,0 +1,174 @@ +package msgp + +/* ---------------------------------- + integer encoding utilities + (inline-able) + + TODO(tinylib): there are faster, + albeit non-portable solutions + to the code below. implement + byteswap? + ---------------------------------- */ + +func putMint64(b []byte, i int64) { + b[0] = mint64 + b[1] = byte(i >> 56) + b[2] = byte(i >> 48) + b[3] = byte(i >> 40) + b[4] = byte(i >> 32) + b[5] = byte(i >> 24) + b[6] = byte(i >> 16) + b[7] = byte(i >> 8) + b[8] = byte(i) +} + +func getMint64(b []byte) int64 { + return (int64(b[1]) << 56) | (int64(b[2]) << 48) | + (int64(b[3]) << 40) | (int64(b[4]) << 32) | + (int64(b[5]) << 24) | (int64(b[6]) << 16) | + (int64(b[7]) << 8) | (int64(b[8])) +} + +func putMint32(b []byte, i int32) { + b[0] = mint32 + b[1] = byte(i >> 24) + b[2] = byte(i >> 16) + b[3] = byte(i >> 8) + b[4] = byte(i) +} + +func getMint32(b []byte) int32 { + return (int32(b[1]) << 24) | (int32(b[2]) << 16) | (int32(b[3]) << 8) | (int32(b[4])) +} + +func putMint16(b []byte, i int16) { + b[0] = mint16 + b[1] = byte(i >> 8) + b[2] = byte(i) +} + +func getMint16(b []byte) (i int16) { + return (int16(b[1]) << 8) | int16(b[2]) +} + +func putMint8(b []byte, i int8) { + b[0] = mint8 + b[1] = byte(i) +} + +func getMint8(b []byte) (i int8) { + return int8(b[1]) +} + +func putMuint64(b []byte, u uint64) { + b[0] = muint64 + b[1] = byte(u >> 56) + b[2] = byte(u >> 48) + b[3] = byte(u >> 40) + b[4] = byte(u >> 32) + b[5] = byte(u >> 24) + b[6] = byte(u >> 16) + b[7] = byte(u >> 8) + b[8] = byte(u) +} + +func getMuint64(b []byte) uint64 { + return (uint64(b[1]) << 56) | (uint64(b[2]) << 48) | + (uint64(b[3]) << 40) | (uint64(b[4]) << 32) | + (uint64(b[5]) << 24) | (uint64(b[6]) << 16) | + (uint64(b[7]) << 8) | (uint64(b[8])) +} + +func putMuint32(b []byte, u uint32) { + b[0] = muint32 + b[1] = byte(u >> 24) + b[2] = byte(u >> 16) + b[3] = byte(u >> 8) + b[4] = byte(u) +} + +func getMuint32(b []byte) uint32 { + return (uint32(b[1]) << 24) | (uint32(b[2]) << 16) | (uint32(b[3]) << 8) | (uint32(b[4])) +} + +func putMuint16(b []byte, u uint16) { + b[0] = muint16 + b[1] = byte(u >> 8) + b[2] = byte(u) +} + +func getMuint16(b []byte) uint16 { + return (uint16(b[1]) << 8) | uint16(b[2]) +} + +func putMuint8(b []byte, u uint8) { + b[0] = muint8 + b[1] = byte(u) +} + +func getMuint8(b []byte) uint8 { + return uint8(b[1]) +} + +func getUnix(b []byte) (sec int64, nsec int32) { + sec = (int64(b[0]) << 56) | (int64(b[1]) << 48) | + (int64(b[2]) << 40) | (int64(b[3]) << 32) | + (int64(b[4]) << 24) | (int64(b[5]) << 16) | + (int64(b[6]) << 8) | (int64(b[7])) + + nsec = (int32(b[8]) << 24) | (int32(b[9]) << 16) | (int32(b[10]) << 8) | (int32(b[11])) + return +} + +func putUnix(b []byte, sec int64, nsec int32) { + b[0] = byte(sec >> 56) + b[1] = byte(sec >> 48) + b[2] = byte(sec >> 40) + b[3] = byte(sec >> 32) + b[4] = byte(sec >> 24) + b[5] = byte(sec >> 16) + b[6] = byte(sec >> 8) + b[7] = byte(sec) + b[8] = byte(nsec >> 24) + b[9] = byte(nsec >> 16) + b[10] = byte(nsec >> 8) + b[11] = byte(nsec) +} + +/* ----------------------------- + prefix utilities + ----------------------------- */ + +// write prefix and uint8 +func prefixu8(b []byte, pre byte, sz uint8) { + b[0] = pre + b[1] = byte(sz) +} + +// write prefix and big-endian uint16 +func prefixu16(b []byte, pre byte, sz uint16) { + b[0] = pre + b[1] = byte(sz >> 8) + b[2] = byte(sz) +} + +// write prefix and big-endian uint32 +func prefixu32(b []byte, pre byte, sz uint32) { + b[0] = pre + b[1] = byte(sz >> 24) + b[2] = byte(sz >> 16) + b[3] = byte(sz >> 8) + b[4] = byte(sz) +} + +func prefixu64(b []byte, pre byte, sz uint64) { + b[0] = pre + b[1] = byte(sz >> 56) + b[2] = byte(sz >> 48) + b[3] = byte(sz >> 40) + b[4] = byte(sz >> 32) + b[5] = byte(sz >> 24) + b[6] = byte(sz >> 16) + b[7] = byte(sz >> 8) + b[8] = byte(sz) +} diff --git a/vendor/github.com/tinylib/msgp/msgp/json.go b/vendor/github.com/tinylib/msgp/msgp/json.go new file mode 100644 index 0000000..4325860 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/json.go @@ -0,0 +1,542 @@ +package msgp + +import ( + "bufio" + "encoding/base64" + "encoding/json" + "io" + "strconv" + "unicode/utf8" +) + +var ( + null = []byte("null") + hex = []byte("0123456789abcdef") +) + +var defuns [_maxtype]func(jsWriter, *Reader) (int, error) + +// note: there is an initialization loop if +// this isn't set up during init() +func init() { + // since none of these functions are inline-able, + // there is not much of a penalty to the indirect + // call. however, this is best expressed as a jump-table... + defuns = [_maxtype]func(jsWriter, *Reader) (int, error){ + StrType: rwString, + BinType: rwBytes, + MapType: rwMap, + ArrayType: rwArray, + Float64Type: rwFloat64, + Float32Type: rwFloat32, + BoolType: rwBool, + IntType: rwInt, + UintType: rwUint, + NilType: rwNil, + ExtensionType: rwExtension, + Complex64Type: rwExtension, + Complex128Type: rwExtension, + TimeType: rwTime, + } +} + +// this is the interface +// used to write json +type jsWriter interface { + io.Writer + io.ByteWriter + WriteString(string) (int, error) +} + +// CopyToJSON reads MessagePack from 'src' and copies it +// as JSON to 'dst' until EOF. +func CopyToJSON(dst io.Writer, src io.Reader) (n int64, err error) { + r := NewReader(src) + n, err = r.WriteToJSON(dst) + freeR(r) + return +} + +// WriteToJSON translates MessagePack from 'r' and writes it as +// JSON to 'w' until the underlying reader returns io.EOF. It returns +// the number of bytes written, and an error if it stopped before EOF. +func (r *Reader) WriteToJSON(w io.Writer) (n int64, err error) { + var j jsWriter + var bf *bufio.Writer + if jsw, ok := w.(jsWriter); ok { + j = jsw + } else { + bf = bufio.NewWriter(w) + j = bf + } + var nn int + for err == nil { + nn, err = rwNext(j, r) + n += int64(nn) + } + if err != io.EOF { + if bf != nil { + bf.Flush() + } + return + } + err = nil + if bf != nil { + err = bf.Flush() + } + return +} + +func rwNext(w jsWriter, src *Reader) (int, error) { + t, err := src.NextType() + if err != nil { + return 0, err + } + return defuns[t](w, src) +} + +func rwMap(dst jsWriter, src *Reader) (n int, err error) { + var comma bool + var sz uint32 + var field []byte + + sz, err = src.ReadMapHeader() + if err != nil { + return + } + + if sz == 0 { + return dst.WriteString("{}") + } + + err = dst.WriteByte('{') + if err != nil { + return + } + n++ + var nn int + for i := uint32(0); i < sz; i++ { + if comma { + err = dst.WriteByte(',') + if err != nil { + return + } + n++ + } + + field, err = src.ReadMapKeyPtr() + if err != nil { + return + } + nn, err = rwquoted(dst, field) + n += nn + if err != nil { + return + } + + err = dst.WriteByte(':') + if err != nil { + return + } + n++ + nn, err = rwNext(dst, src) + n += nn + if err != nil { + return + } + if !comma { + comma = true + } + } + + err = dst.WriteByte('}') + if err != nil { + return + } + n++ + return +} + +func rwArray(dst jsWriter, src *Reader) (n int, err error) { + err = dst.WriteByte('[') + if err != nil { + return + } + var sz uint32 + var nn int + sz, err = src.ReadArrayHeader() + if err != nil { + return + } + comma := false + for i := uint32(0); i < sz; i++ { + if comma { + err = dst.WriteByte(',') + if err != nil { + return + } + n++ + } + nn, err = rwNext(dst, src) + n += nn + if err != nil { + return + } + comma = true + } + + err = dst.WriteByte(']') + if err != nil { + return + } + n++ + return +} + +func rwNil(dst jsWriter, src *Reader) (int, error) { + err := src.ReadNil() + if err != nil { + return 0, err + } + return dst.Write(null) +} + +func rwFloat32(dst jsWriter, src *Reader) (int, error) { + f, err := src.ReadFloat32() + if err != nil { + return 0, err + } + src.scratch = strconv.AppendFloat(src.scratch[:0], float64(f), 'f', -1, 64) + return dst.Write(src.scratch) +} + +func rwFloat64(dst jsWriter, src *Reader) (int, error) { + f, err := src.ReadFloat64() + if err != nil { + return 0, err + } + src.scratch = strconv.AppendFloat(src.scratch[:0], f, 'f', -1, 32) + return dst.Write(src.scratch) +} + +func rwInt(dst jsWriter, src *Reader) (int, error) { + i, err := src.ReadInt64() + if err != nil { + return 0, err + } + src.scratch = strconv.AppendInt(src.scratch[:0], i, 10) + return dst.Write(src.scratch) +} + +func rwUint(dst jsWriter, src *Reader) (int, error) { + u, err := src.ReadUint64() + if err != nil { + return 0, err + } + src.scratch = strconv.AppendUint(src.scratch[:0], u, 10) + return dst.Write(src.scratch) +} + +func rwBool(dst jsWriter, src *Reader) (int, error) { + b, err := src.ReadBool() + if err != nil { + return 0, err + } + if b { + return dst.WriteString("true") + } + return dst.WriteString("false") +} + +func rwTime(dst jsWriter, src *Reader) (int, error) { + t, err := src.ReadTime() + if err != nil { + return 0, err + } + bts, err := t.MarshalJSON() + if err != nil { + return 0, err + } + return dst.Write(bts) +} + +func rwExtension(dst jsWriter, src *Reader) (n int, err error) { + et, err := src.peekExtensionType() + if err != nil { + return 0, err + } + + // registered extensions can override + // the JSON encoding + if j, ok := extensionReg[et]; ok { + var bts []byte + e := j() + err = src.ReadExtension(e) + if err != nil { + return + } + bts, err = json.Marshal(e) + if err != nil { + return + } + return dst.Write(bts) + } + + e := RawExtension{} + e.Type = et + err = src.ReadExtension(&e) + if err != nil { + return + } + + var nn int + err = dst.WriteByte('{') + if err != nil { + return + } + n++ + + nn, err = dst.WriteString(`"type:"`) + n += nn + if err != nil { + return + } + + src.scratch = strconv.AppendInt(src.scratch[0:0], int64(e.Type), 10) + nn, err = dst.Write(src.scratch) + n += nn + if err != nil { + return + } + + nn, err = dst.WriteString(`,"data":"`) + n += nn + if err != nil { + return + } + + enc := base64.NewEncoder(base64.StdEncoding, dst) + + nn, err = enc.Write(e.Data) + n += nn + if err != nil { + return + } + err = enc.Close() + if err != nil { + return + } + nn, err = dst.WriteString(`"}`) + n += nn + return +} + +func rwString(dst jsWriter, src *Reader) (n int, err error) { + var p []byte + p, err = src.R.Peek(1) + if err != nil { + return + } + lead := p[0] + var read int + + if isfixstr(lead) { + read = int(rfixstr(lead)) + src.R.Skip(1) + goto write + } + + switch lead { + case mstr8: + p, err = src.R.Next(2) + if err != nil { + return + } + read = int(uint8(p[1])) + case mstr16: + p, err = src.R.Next(3) + if err != nil { + return + } + read = int(big.Uint16(p[1:])) + case mstr32: + p, err = src.R.Next(5) + if err != nil { + return + } + read = int(big.Uint32(p[1:])) + default: + err = badPrefix(StrType, lead) + return + } +write: + p, err = src.R.Next(read) + if err != nil { + return + } + n, err = rwquoted(dst, p) + return +} + +func rwBytes(dst jsWriter, src *Reader) (n int, err error) { + var nn int + err = dst.WriteByte('"') + if err != nil { + return + } + n++ + src.scratch, err = src.ReadBytes(src.scratch[:0]) + if err != nil { + return + } + enc := base64.NewEncoder(base64.StdEncoding, dst) + nn, err = enc.Write(src.scratch) + n += nn + if err != nil { + return + } + err = enc.Close() + if err != nil { + return + } + err = dst.WriteByte('"') + if err != nil { + return + } + n++ + return +} + +// Below (c) The Go Authors, 2009-2014 +// Subject to the BSD-style license found at http://golang.org +// +// see: encoding/json/encode.go:(*encodeState).stringbytes() +func rwquoted(dst jsWriter, s []byte) (n int, err error) { + var nn int + err = dst.WriteByte('"') + if err != nil { + return + } + n++ + start := 0 + for i := 0; i < len(s); { + if b := s[i]; b < utf8.RuneSelf { + if 0x20 <= b && b != '\\' && b != '"' && b != '<' && b != '>' && b != '&' { + i++ + continue + } + if start < i { + nn, err = dst.Write(s[start:i]) + n += nn + if err != nil { + return + } + } + switch b { + case '\\', '"': + err = dst.WriteByte('\\') + if err != nil { + return + } + n++ + err = dst.WriteByte(b) + if err != nil { + return + } + n++ + case '\n': + err = dst.WriteByte('\\') + if err != nil { + return + } + n++ + err = dst.WriteByte('n') + if err != nil { + return + } + n++ + case '\r': + err = dst.WriteByte('\\') + if err != nil { + return + } + n++ + err = dst.WriteByte('r') + if err != nil { + return + } + n++ + default: + nn, err = dst.WriteString(`\u00`) + n += nn + if err != nil { + return + } + err = dst.WriteByte(hex[b>>4]) + if err != nil { + return + } + n++ + err = dst.WriteByte(hex[b&0xF]) + if err != nil { + return + } + n++ + } + i++ + start = i + continue + } + c, size := utf8.DecodeRune(s[i:]) + if c == utf8.RuneError && size == 1 { + if start < i { + nn, err = dst.Write(s[start:i]) + n += nn + if err != nil { + return + } + nn, err = dst.WriteString(`\ufffd`) + n += nn + if err != nil { + return + } + i += size + start = i + continue + } + } + if c == '\u2028' || c == '\u2029' { + if start < i { + nn, err = dst.Write(s[start:i]) + n += nn + if err != nil { + return + } + nn, err = dst.WriteString(`\u202`) + n += nn + if err != nil { + return + } + err = dst.WriteByte(hex[c&0xF]) + if err != nil { + return + } + n++ + } + } + i += size + } + if start < len(s) { + nn, err = dst.Write(s[start:]) + n += nn + if err != nil { + return + } + } + err = dst.WriteByte('"') + if err != nil { + return + } + n++ + return +} diff --git a/vendor/github.com/tinylib/msgp/msgp/json_bytes.go b/vendor/github.com/tinylib/msgp/msgp/json_bytes.go new file mode 100644 index 0000000..438caf5 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/json_bytes.go @@ -0,0 +1,363 @@ +package msgp + +import ( + "bufio" + "encoding/base64" + "encoding/json" + "io" + "strconv" + "time" +) + +var unfuns [_maxtype]func(jsWriter, []byte, []byte) ([]byte, []byte, error) + +func init() { + + // NOTE(pmh): this is best expressed as a jump table, + // but gc doesn't do that yet. revisit post-go1.5. + unfuns = [_maxtype]func(jsWriter, []byte, []byte) ([]byte, []byte, error){ + StrType: rwStringBytes, + BinType: rwBytesBytes, + MapType: rwMapBytes, + ArrayType: rwArrayBytes, + Float64Type: rwFloat64Bytes, + Float32Type: rwFloat32Bytes, + BoolType: rwBoolBytes, + IntType: rwIntBytes, + UintType: rwUintBytes, + NilType: rwNullBytes, + ExtensionType: rwExtensionBytes, + Complex64Type: rwExtensionBytes, + Complex128Type: rwExtensionBytes, + TimeType: rwTimeBytes, + } +} + +// UnmarshalAsJSON takes raw messagepack and writes +// it as JSON to 'w'. If an error is returned, the +// bytes not translated will also be returned. If +// no errors are encountered, the length of the returned +// slice will be zero. +func UnmarshalAsJSON(w io.Writer, msg []byte) ([]byte, error) { + var ( + scratch []byte + cast bool + dst jsWriter + err error + ) + if jsw, ok := w.(jsWriter); ok { + dst = jsw + cast = true + } else { + dst = bufio.NewWriterSize(w, 512) + } + for len(msg) > 0 && err == nil { + msg, scratch, err = writeNext(dst, msg, scratch) + } + if !cast && err == nil { + err = dst.(*bufio.Writer).Flush() + } + return msg, err +} + +func writeNext(w jsWriter, msg []byte, scratch []byte) ([]byte, []byte, error) { + if len(msg) < 1 { + return msg, scratch, ErrShortBytes + } + t := getType(msg[0]) + if t == InvalidType { + return msg, scratch, InvalidPrefixError(msg[0]) + } + if t == ExtensionType { + et, err := peekExtension(msg) + if err != nil { + return nil, scratch, err + } + if et == TimeExtension { + t = TimeType + } + } + return unfuns[t](w, msg, scratch) +} + +func rwArrayBytes(w jsWriter, msg []byte, scratch []byte) ([]byte, []byte, error) { + sz, msg, err := ReadArrayHeaderBytes(msg) + if err != nil { + return msg, scratch, err + } + err = w.WriteByte('[') + if err != nil { + return msg, scratch, err + } + for i := uint32(0); i < sz; i++ { + if i != 0 { + err = w.WriteByte(',') + if err != nil { + return msg, scratch, err + } + } + msg, scratch, err = writeNext(w, msg, scratch) + if err != nil { + return msg, scratch, err + } + } + err = w.WriteByte(']') + return msg, scratch, err +} + +func rwMapBytes(w jsWriter, msg []byte, scratch []byte) ([]byte, []byte, error) { + sz, msg, err := ReadMapHeaderBytes(msg) + if err != nil { + return msg, scratch, err + } + err = w.WriteByte('{') + if err != nil { + return msg, scratch, err + } + for i := uint32(0); i < sz; i++ { + if i != 0 { + err = w.WriteByte(',') + if err != nil { + return msg, scratch, err + } + } + msg, scratch, err = rwMapKeyBytes(w, msg, scratch) + if err != nil { + return msg, scratch, err + } + err = w.WriteByte(':') + if err != nil { + return msg, scratch, err + } + msg, scratch, err = writeNext(w, msg, scratch) + if err != nil { + return msg, scratch, err + } + } + err = w.WriteByte('}') + return msg, scratch, err +} + +func rwMapKeyBytes(w jsWriter, msg []byte, scratch []byte) ([]byte, []byte, error) { + msg, scratch, err := rwStringBytes(w, msg, scratch) + if err != nil { + if tperr, ok := err.(TypeError); ok && tperr.Encoded == BinType { + return rwBytesBytes(w, msg, scratch) + } + } + return msg, scratch, err +} + +func rwStringBytes(w jsWriter, msg []byte, scratch []byte) ([]byte, []byte, error) { + str, msg, err := ReadStringZC(msg) + if err != nil { + return msg, scratch, err + } + _, err = rwquoted(w, str) + return msg, scratch, err +} + +func rwBytesBytes(w jsWriter, msg []byte, scratch []byte) ([]byte, []byte, error) { + bts, msg, err := ReadBytesZC(msg) + if err != nil { + return msg, scratch, err + } + l := base64.StdEncoding.EncodedLen(len(bts)) + if cap(scratch) >= l { + scratch = scratch[0:l] + } else { + scratch = make([]byte, l) + } + base64.StdEncoding.Encode(scratch, bts) + err = w.WriteByte('"') + if err != nil { + return msg, scratch, err + } + _, err = w.Write(scratch) + if err != nil { + return msg, scratch, err + } + err = w.WriteByte('"') + return msg, scratch, err +} + +func rwNullBytes(w jsWriter, msg []byte, scratch []byte) ([]byte, []byte, error) { + msg, err := ReadNilBytes(msg) + if err != nil { + return msg, scratch, err + } + _, err = w.Write(null) + return msg, scratch, err +} + +func rwBoolBytes(w jsWriter, msg []byte, scratch []byte) ([]byte, []byte, error) { + b, msg, err := ReadBoolBytes(msg) + if err != nil { + return msg, scratch, err + } + if b { + _, err = w.WriteString("true") + return msg, scratch, err + } + _, err = w.WriteString("false") + return msg, scratch, err +} + +func rwIntBytes(w jsWriter, msg []byte, scratch []byte) ([]byte, []byte, error) { + i, msg, err := ReadInt64Bytes(msg) + if err != nil { + return msg, scratch, err + } + scratch = strconv.AppendInt(scratch[0:0], i, 10) + _, err = w.Write(scratch) + return msg, scratch, err +} + +func rwUintBytes(w jsWriter, msg []byte, scratch []byte) ([]byte, []byte, error) { + u, msg, err := ReadUint64Bytes(msg) + if err != nil { + return msg, scratch, err + } + scratch = strconv.AppendUint(scratch[0:0], u, 10) + _, err = w.Write(scratch) + return msg, scratch, err +} + +func rwFloatBytes(w jsWriter, msg []byte, f64 bool, scratch []byte) ([]byte, []byte, error) { + var f float64 + var err error + var sz int + if f64 { + sz = 64 + f, msg, err = ReadFloat64Bytes(msg) + } else { + sz = 32 + var v float32 + v, msg, err = ReadFloat32Bytes(msg) + f = float64(v) + } + if err != nil { + return msg, scratch, err + } + scratch = strconv.AppendFloat(scratch, f, 'f', -1, sz) + _, err = w.Write(scratch) + return msg, scratch, err +} + +func rwFloat32Bytes(w jsWriter, msg []byte, scratch []byte) ([]byte, []byte, error) { + var f float32 + var err error + f, msg, err = ReadFloat32Bytes(msg) + if err != nil { + return msg, scratch, err + } + scratch = strconv.AppendFloat(scratch[:0], float64(f), 'f', -1, 32) + _, err = w.Write(scratch) + return msg, scratch, err +} + +func rwFloat64Bytes(w jsWriter, msg []byte, scratch []byte) ([]byte, []byte, error) { + var f float64 + var err error + f, msg, err = ReadFloat64Bytes(msg) + if err != nil { + return msg, scratch, err + } + scratch = strconv.AppendFloat(scratch[:0], f, 'f', -1, 64) + _, err = w.Write(scratch) + return msg, scratch, err +} + +func rwTimeBytes(w jsWriter, msg []byte, scratch []byte) ([]byte, []byte, error) { + var t time.Time + var err error + t, msg, err = ReadTimeBytes(msg) + if err != nil { + return msg, scratch, err + } + bts, err := t.MarshalJSON() + if err != nil { + return msg, scratch, err + } + _, err = w.Write(bts) + return msg, scratch, err +} + +func rwExtensionBytes(w jsWriter, msg []byte, scratch []byte) ([]byte, []byte, error) { + var err error + var et int8 + et, err = peekExtension(msg) + if err != nil { + return msg, scratch, err + } + + // if it's time.Time + if et == TimeExtension { + var tm time.Time + tm, msg, err = ReadTimeBytes(msg) + if err != nil { + return msg, scratch, err + } + bts, err := tm.MarshalJSON() + if err != nil { + return msg, scratch, err + } + _, err = w.Write(bts) + return msg, scratch, err + } + + // if the extension is registered, + // use its canonical JSON form + if f, ok := extensionReg[et]; ok { + e := f() + msg, err = ReadExtensionBytes(msg, e) + if err != nil { + return msg, scratch, err + } + bts, err := json.Marshal(e) + if err != nil { + return msg, scratch, err + } + _, err = w.Write(bts) + return msg, scratch, err + } + + // otherwise, write `{"type": , "data": ""}` + r := RawExtension{} + r.Type = et + msg, err = ReadExtensionBytes(msg, &r) + if err != nil { + return msg, scratch, err + } + scratch, err = writeExt(w, r, scratch) + return msg, scratch, err +} + +func writeExt(w jsWriter, r RawExtension, scratch []byte) ([]byte, error) { + _, err := w.WriteString(`{"type":`) + if err != nil { + return scratch, err + } + scratch = strconv.AppendInt(scratch[0:0], int64(r.Type), 10) + _, err = w.Write(scratch) + if err != nil { + return scratch, err + } + _, err = w.WriteString(`,"data":"`) + if err != nil { + return scratch, err + } + l := base64.StdEncoding.EncodedLen(len(r.Data)) + if cap(scratch) >= l { + scratch = scratch[0:l] + } else { + scratch = make([]byte, l) + } + base64.StdEncoding.Encode(scratch, r.Data) + _, err = w.Write(scratch) + if err != nil { + return scratch, err + } + _, err = w.WriteString(`"}`) + return scratch, err +} diff --git a/vendor/github.com/tinylib/msgp/msgp/json_bytes_test.go b/vendor/github.com/tinylib/msgp/msgp/json_bytes_test.go new file mode 100644 index 0000000..726974a --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/json_bytes_test.go @@ -0,0 +1,121 @@ +package msgp + +import ( + "bytes" + "encoding/json" + "testing" + "time" +) + +func TestUnmarshalJSON(t *testing.T) { + var buf bytes.Buffer + enc := NewWriter(&buf) + enc.WriteMapHeader(5) + + enc.WriteString("thing_1") + enc.WriteString("a string object") + + enc.WriteString("a_map") + enc.WriteMapHeader(2) + + // INNER + enc.WriteString("cmplx") + enc.WriteComplex64(complex(1.0, 1.0)) + enc.WriteString("int_b") + enc.WriteInt64(-100) + + enc.WriteString("an extension") + enc.WriteExtension(&RawExtension{Type: 1, Data: []byte("blaaahhh")}) + + enc.WriteString("some bytes") + enc.WriteBytes([]byte("here are some bytes")) + + enc.WriteString("now") + enc.WriteTime(time.Now()) + + enc.Flush() + + var js bytes.Buffer + _, err := UnmarshalAsJSON(&js, buf.Bytes()) + if err != nil { + t.Logf("%s", js.Bytes()) + t.Fatal(err) + } + mp := make(map[string]interface{}) + err = json.Unmarshal(js.Bytes(), &mp) + if err != nil { + t.Log(js.String()) + t.Fatalf("Error unmarshaling: %s", err) + } + + if len(mp) != 5 { + t.Errorf("map length should be %d, not %d", 5, len(mp)) + } + + so, ok := mp["thing_1"] + if !ok || so != "a string object" { + t.Errorf("expected %q; got %q", "a string object", so) + } + + if _, ok := mp["now"]; !ok { + t.Error(`"now" field doesn't exist`) + } + + c, ok := mp["a_map"] + if !ok { + t.Error(`"a_map" field doesn't exist`) + } else { + if m, ok := c.(map[string]interface{}); ok { + if _, ok := m["cmplx"]; !ok { + t.Error(`"a_map.cmplx" doesn't exist`) + } + } else { + t.Error(`can't type-assert "c" to map[string]interface{}`) + } + + } + + t.Logf("JSON: %s", js.Bytes()) +} + +func BenchmarkUnmarshalAsJSON(b *testing.B) { + var buf bytes.Buffer + enc := NewWriter(&buf) + enc.WriteMapHeader(4) + + enc.WriteString("thing_1") + enc.WriteString("a string object") + + enc.WriteString("a_first_map") + enc.WriteMapHeader(2) + enc.WriteString("float_a") + enc.WriteFloat32(1.0) + enc.WriteString("int_b") + enc.WriteInt64(-100) + + enc.WriteString("an array") + enc.WriteArrayHeader(2) + enc.WriteBool(true) + enc.WriteUint(2089) + + enc.WriteString("a_second_map") + enc.WriteMapStrStr(map[string]string{ + "internal_one": "blah", + "internal_two": "blahhh...", + }) + enc.Flush() + + var js bytes.Buffer + bts := buf.Bytes() + _, err := UnmarshalAsJSON(&js, bts) + if err != nil { + b.Fatal(err) + } + b.SetBytes(int64(len(js.Bytes()))) + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + js.Reset() + UnmarshalAsJSON(&js, bts) + } +} diff --git a/vendor/github.com/tinylib/msgp/msgp/json_test.go b/vendor/github.com/tinylib/msgp/msgp/json_test.go new file mode 100644 index 0000000..439d479 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/json_test.go @@ -0,0 +1,142 @@ +package msgp + +import ( + "bytes" + "encoding/json" + "reflect" + "testing" +) + +func TestCopyJSON(t *testing.T) { + var buf bytes.Buffer + enc := NewWriter(&buf) + enc.WriteMapHeader(5) + + enc.WriteString("thing_1") + enc.WriteString("a string object") + + enc.WriteString("a_map") + enc.WriteMapHeader(2) + enc.WriteString("float_a") + enc.WriteFloat32(1.0) + enc.WriteString("int_b") + enc.WriteInt64(-100) + + enc.WriteString("some bytes") + enc.WriteBytes([]byte("here are some bytes")) + enc.WriteString("a bool") + enc.WriteBool(true) + + enc.WriteString("a map") + enc.WriteMapStrStr(map[string]string{ + "internal_one": "blah", + "internal_two": "blahhh...", + }) + enc.Flush() + + var js bytes.Buffer + _, err := CopyToJSON(&js, &buf) + if err != nil { + t.Fatal(err) + } + mp := make(map[string]interface{}) + err = json.Unmarshal(js.Bytes(), &mp) + if err != nil { + t.Log(js.String()) + t.Fatalf("Error unmarshaling: %s", err) + } + + if len(mp) != 5 { + t.Errorf("map length should be %d, not %d", 4, len(mp)) + } + + so, ok := mp["thing_1"] + if !ok || so != "a string object" { + t.Errorf("expected %q; got %q", "a string object", so) + } + + in, ok := mp["a map"] + if !ok { + t.Error("no key 'a map'") + } + if inm, ok := in.(map[string]interface{}); !ok { + t.Error("inner map not type-assertable to map[string]interface{}") + } else { + inm1, ok := inm["internal_one"] + if !ok || !reflect.DeepEqual(inm1, "blah") { + t.Errorf("inner map field %q should be %q, not %q", "internal_one", "blah", inm1) + } + } +} + +func BenchmarkCopyToJSON(b *testing.B) { + var buf bytes.Buffer + enc := NewWriter(&buf) + enc.WriteMapHeader(4) + + enc.WriteString("thing_1") + enc.WriteString("a string object") + + enc.WriteString("a_first_map") + enc.WriteMapHeader(2) + enc.WriteString("float_a") + enc.WriteFloat32(1.0) + enc.WriteString("int_b") + enc.WriteInt64(-100) + + enc.WriteString("an array") + enc.WriteArrayHeader(2) + enc.WriteBool(true) + enc.WriteUint(2089) + + enc.WriteString("a_second_map") + enc.WriteMapStrStr(map[string]string{ + "internal_one": "blah", + "internal_two": "blahhh...", + }) + enc.Flush() + + var js bytes.Buffer + bts := buf.Bytes() + _, err := CopyToJSON(&js, &buf) + if err != nil { + b.Fatal(err) + } + b.SetBytes(int64(len(js.Bytes()))) + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + js.Reset() + CopyToJSON(&js, bytes.NewReader(bts)) + } +} + +func BenchmarkStdlibJSON(b *testing.B) { + obj := map[string]interface{}{ + "thing_1": "a string object", + "a_first_map": map[string]interface{}{ + "float_a": float32(1.0), + "float_b": -100, + }, + "an array": []interface{}{ + "part_A", + "part_B", + }, + "a_second_map": map[string]interface{}{ + "internal_one": "blah", + "internal_two": "blahhh...", + }, + } + var js bytes.Buffer + err := json.NewEncoder(&js).Encode(&obj) + if err != nil { + b.Fatal(err) + } + b.SetBytes(int64(len(js.Bytes()))) + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + js.Reset() + json.NewEncoder(&js).Encode(&obj) + } +} diff --git a/vendor/github.com/tinylib/msgp/msgp/number.go b/vendor/github.com/tinylib/msgp/msgp/number.go new file mode 100644 index 0000000..ad07ef9 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/number.go @@ -0,0 +1,267 @@ +package msgp + +import ( + "math" + "strconv" +) + +// The portable parts of the Number implementation + +// Number can be +// an int64, uint64, float32, +// or float64 internally. +// It can decode itself +// from any of the native +// messagepack number types. +// The zero-value of Number +// is Int(0). Using the equality +// operator with Number compares +// both the type and the value +// of the number. +type Number struct { + // internally, this + // is just a tagged union. + // the raw bits of the number + // are stored the same way regardless. + bits uint64 + typ Type +} + +// AsInt sets the number to an int64. +func (n *Number) AsInt(i int64) { + + // we always store int(0) + // as {0, InvalidType} in + // order to preserve + // the behavior of the == operator + if i == 0 { + n.typ = InvalidType + n.bits = 0 + return + } + + n.typ = IntType + n.bits = uint64(i) +} + +// AsUint sets the number to a uint64. +func (n *Number) AsUint(u uint64) { + n.typ = UintType + n.bits = u +} + +// AsFloat32 sets the value of the number +// to a float32. +func (n *Number) AsFloat32(f float32) { + n.typ = Float32Type + n.bits = uint64(math.Float32bits(f)) +} + +// AsFloat64 sets the value of the +// number to a float64. +func (n *Number) AsFloat64(f float64) { + n.typ = Float64Type + n.bits = math.Float64bits(f) +} + +// Int casts the number as an int64, and +// returns whether or not that was the +// underlying type. +func (n *Number) Int() (int64, bool) { + return int64(n.bits), n.typ == IntType || n.typ == InvalidType +} + +// Uint casts the number as a uint64, and returns +// whether or not that was the underlying type. +func (n *Number) Uint() (uint64, bool) { + return n.bits, n.typ == UintType +} + +// Float casts the number to a float64, and +// returns whether or not that was the underlying +// type (either a float64 or a float32). +func (n *Number) Float() (float64, bool) { + switch n.typ { + case Float32Type: + return float64(math.Float32frombits(uint32(n.bits))), true + case Float64Type: + return math.Float64frombits(n.bits), true + default: + return 0.0, false + } +} + +// Type will return one of: +// Float64Type, Float32Type, UintType, or IntType. +func (n *Number) Type() Type { + if n.typ == InvalidType { + return IntType + } + return n.typ +} + +// DecodeMsg implements msgp.Decodable +func (n *Number) DecodeMsg(r *Reader) error { + typ, err := r.NextType() + if err != nil { + return err + } + switch typ { + case Float32Type: + f, err := r.ReadFloat32() + if err != nil { + return err + } + n.AsFloat32(f) + return nil + case Float64Type: + f, err := r.ReadFloat64() + if err != nil { + return err + } + n.AsFloat64(f) + return nil + case IntType: + i, err := r.ReadInt64() + if err != nil { + return err + } + n.AsInt(i) + return nil + case UintType: + u, err := r.ReadUint64() + if err != nil { + return err + } + n.AsUint(u) + return nil + default: + return TypeError{Encoded: typ, Method: IntType} + } +} + +// UnmarshalMsg implements msgp.Unmarshaler +func (n *Number) UnmarshalMsg(b []byte) ([]byte, error) { + typ := NextType(b) + switch typ { + case IntType: + i, o, err := ReadInt64Bytes(b) + if err != nil { + return b, err + } + n.AsInt(i) + return o, nil + case UintType: + u, o, err := ReadUint64Bytes(b) + if err != nil { + return b, err + } + n.AsUint(u) + return o, nil + case Float64Type: + f, o, err := ReadFloat64Bytes(b) + if err != nil { + return b, err + } + n.AsFloat64(f) + return o, nil + case Float32Type: + f, o, err := ReadFloat32Bytes(b) + if err != nil { + return b, err + } + n.AsFloat32(f) + return o, nil + default: + return b, TypeError{Method: IntType, Encoded: typ} + } +} + +// MarshalMsg implements msgp.Marshaler +func (n *Number) MarshalMsg(b []byte) ([]byte, error) { + switch n.typ { + case IntType: + return AppendInt64(b, int64(n.bits)), nil + case UintType: + return AppendUint64(b, uint64(n.bits)), nil + case Float64Type: + return AppendFloat64(b, math.Float64frombits(n.bits)), nil + case Float32Type: + return AppendFloat32(b, math.Float32frombits(uint32(n.bits))), nil + default: + return AppendInt64(b, 0), nil + } +} + +// EncodeMsg implements msgp.Encodable +func (n *Number) EncodeMsg(w *Writer) error { + switch n.typ { + case IntType: + return w.WriteInt64(int64(n.bits)) + case UintType: + return w.WriteUint64(n.bits) + case Float64Type: + return w.WriteFloat64(math.Float64frombits(n.bits)) + case Float32Type: + return w.WriteFloat32(math.Float32frombits(uint32(n.bits))) + default: + return w.WriteInt64(0) + } +} + +// Msgsize implements msgp.Sizer +func (n *Number) Msgsize() int { + switch n.typ { + case Float32Type: + return Float32Size + case Float64Type: + return Float64Size + case IntType: + return Int64Size + case UintType: + return Uint64Size + default: + return 1 // fixint(0) + } +} + +// MarshalJSON implements json.Marshaler +func (n *Number) MarshalJSON() ([]byte, error) { + t := n.Type() + if t == InvalidType { + return []byte{'0'}, nil + } + out := make([]byte, 0, 32) + switch t { + case Float32Type, Float64Type: + f, _ := n.Float() + return strconv.AppendFloat(out, f, 'f', -1, 64), nil + case IntType: + i, _ := n.Int() + return strconv.AppendInt(out, i, 10), nil + case UintType: + u, _ := n.Uint() + return strconv.AppendUint(out, u, 10), nil + default: + panic("(*Number).typ is invalid") + } +} + +// String implements fmt.Stringer +func (n *Number) String() string { + switch n.typ { + case InvalidType: + return "0" + case Float32Type, Float64Type: + f, _ := n.Float() + return strconv.FormatFloat(f, 'f', -1, 64) + case IntType: + i, _ := n.Int() + return strconv.FormatInt(i, 10) + case UintType: + u, _ := n.Uint() + return strconv.FormatUint(u, 10) + default: + panic("(*Number).typ is invalid") + } +} diff --git a/vendor/github.com/tinylib/msgp/msgp/number_test.go b/vendor/github.com/tinylib/msgp/msgp/number_test.go new file mode 100644 index 0000000..3490647 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/number_test.go @@ -0,0 +1,94 @@ +package msgp + +import ( + "bytes" + "testing" +) + +func TestNumber(t *testing.T) { + + n := Number{} + + if n.Type() != IntType { + t.Errorf("expected zero-value type to be %s; got %s", IntType, n.Type()) + } + + if n.String() != "0" { + t.Errorf("expected Number{}.String() to be \"0\" but got %q", n.String()) + } + + n.AsInt(248) + i, ok := n.Int() + if !ok || i != 248 || n.Type() != IntType || n.String() != "248" { + t.Errorf("%d in; %d out!", 248, i) + } + + n.AsFloat64(3.141) + f, ok := n.Float() + if !ok || f != 3.141 || n.Type() != Float64Type || n.String() != "3.141" { + t.Errorf("%f in; %f out!", 3.141, f) + } + + n.AsUint(40000) + u, ok := n.Uint() + if !ok || u != 40000 || n.Type() != UintType || n.String() != "40000" { + t.Errorf("%d in; %d out!", 40000, u) + } + + nums := []interface{}{ + float64(3.14159), + int64(-29081), + uint64(90821983), + float32(3.141), + } + + var dat []byte + var buf bytes.Buffer + wr := NewWriter(&buf) + for _, n := range nums { + dat, _ = AppendIntf(dat, n) + wr.WriteIntf(n) + } + wr.Flush() + + mout := make([]Number, len(nums)) + dout := make([]Number, len(nums)) + + rd := NewReader(&buf) + unm := dat + for i := range nums { + var err error + unm, err = mout[i].UnmarshalMsg(unm) + if err != nil { + t.Fatal("unmarshal error:", err) + } + err = dout[i].DecodeMsg(rd) + if err != nil { + t.Fatal("decode error:", err) + } + if mout[i] != dout[i] { + t.Errorf("for %#v, got %#v from unmarshal and %#v from decode", nums[i], mout[i], dout[i]) + } + } + + buf.Reset() + var odat []byte + for i := range nums { + var err error + odat, err = mout[i].MarshalMsg(odat) + if err != nil { + t.Fatal("marshal error:", err) + } + err = dout[i].EncodeMsg(wr) + } + wr.Flush() + + if !bytes.Equal(dat, odat) { + t.Errorf("marshal: expected output %#v; got %#v", dat, odat) + } + + if !bytes.Equal(dat, buf.Bytes()) { + t.Errorf("encode: expected output %#v; got %#v", dat, buf.Bytes()) + } + +} diff --git a/vendor/github.com/tinylib/msgp/msgp/purego.go b/vendor/github.com/tinylib/msgp/msgp/purego.go new file mode 100644 index 0000000..c828f7e --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/purego.go @@ -0,0 +1,15 @@ +// +build purego appengine + +package msgp + +// let's just assume appengine +// uses 64-bit hardware... +const smallint = false + +func UnsafeString(b []byte) string { + return string(b) +} + +func UnsafeBytes(s string) []byte { + return []byte(s) +} diff --git a/vendor/github.com/tinylib/msgp/msgp/raw_test.go b/vendor/github.com/tinylib/msgp/msgp/raw_test.go new file mode 100644 index 0000000..490b30e --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/raw_test.go @@ -0,0 +1,113 @@ +package msgp + +import ( + "bytes" + "testing" + "time" +) + +// all standard interfaces +type allifaces interface { + Encodable + Decodable + Marshaler + Unmarshaler + Sizer +} + +func TestRaw(t *testing.T) { + bts := make([]byte, 0, 512) + bts = AppendMapHeader(bts, 3) + bts = AppendString(bts, "key_one") + bts = AppendFloat64(bts, -1.0) + bts = AppendString(bts, "key_two") + bts = AppendString(bts, "value_two") + bts = AppendString(bts, "key_three") + bts = AppendTime(bts, time.Now()) + + var r Raw + + // verify that Raw satisfies + // the interfaces we want it to + var _ allifaces = &r + + // READ TESTS + + extra, err := r.UnmarshalMsg(bts) + if err != nil { + t.Fatal("error from UnmarshalMsg:", err) + } + if len(extra) != 0 { + t.Errorf("expected 0 bytes left; found %d", len(extra)) + } + if !bytes.Equal([]byte(r), bts) { + t.Fatal("value of raw and input slice are not equal after UnmarshalMsg") + } + + r = r[:0] + + var buf bytes.Buffer + buf.Write(bts) + + rd := NewReader(&buf) + + err = r.DecodeMsg(rd) + if err != nil { + t.Fatal("error from DecodeMsg:", err) + } + + if !bytes.Equal([]byte(r), bts) { + t.Fatal("value of raw and input slice are not equal after DecodeMsg") + } + + // WRITE TESTS + + buf.Reset() + wr := NewWriter(&buf) + err = r.EncodeMsg(wr) + if err != nil { + t.Fatal("error from EncodeMsg:", err) + } + + wr.Flush() + if !bytes.Equal(buf.Bytes(), bts) { + t.Fatal("value of buf.Bytes() and input slice are not equal after EncodeMsg") + } + + var outsl []byte + outsl, err = r.MarshalMsg(outsl) + if err != nil { + t.Fatal("error from MarshalMsg:", err) + } + if !bytes.Equal(outsl, bts) { + t.Fatal("value of output and input of MarshalMsg are not equal.") + } +} + +func TestNullRaw(t *testing.T) { + // Marshal/Unmarshal + var x, y Raw + if bts, err := x.MarshalMsg(nil); err != nil { + t.Fatal(err) + } else if _, err = y.UnmarshalMsg(bts); err != nil { + t.Fatal(err) + } + if !bytes.Equal(x, y) { + t.Fatal("compare") + } + + // Encode/Decode + var buf bytes.Buffer + wr := NewWriter(&buf) + if err := x.EncodeMsg(wr); err != nil { + t.Fatal(err) + } + wr.Flush() + rd := NewReader(&buf) + if err := y.DecodeMsg(rd); err != nil { + t.Fatal(err) + } + if !bytes.Equal(x, y) { + t.Fatal("compare") + } +} diff --git a/vendor/github.com/tinylib/msgp/msgp/read.go b/vendor/github.com/tinylib/msgp/msgp/read.go new file mode 100644 index 0000000..aa668c5 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/read.go @@ -0,0 +1,1358 @@ +package msgp + +import ( + "io" + "math" + "sync" + "time" + + "github.com/philhofer/fwd" +) + +// where we keep old *Readers +var readerPool = sync.Pool{New: func() interface{} { return &Reader{} }} + +// Type is a MessagePack wire type, +// including this package's built-in +// extension types. +type Type byte + +// MessagePack Types +// +// The zero value of Type +// is InvalidType. +const ( + InvalidType Type = iota + + // MessagePack built-in types + + StrType + BinType + MapType + ArrayType + Float64Type + Float32Type + BoolType + IntType + UintType + NilType + ExtensionType + + // pseudo-types provided + // by extensions + + Complex64Type + Complex128Type + TimeType + + _maxtype +) + +// String implements fmt.Stringer +func (t Type) String() string { + switch t { + case StrType: + return "str" + case BinType: + return "bin" + case MapType: + return "map" + case ArrayType: + return "array" + case Float64Type: + return "float64" + case Float32Type: + return "float32" + case BoolType: + return "bool" + case UintType: + return "uint" + case IntType: + return "int" + case ExtensionType: + return "ext" + case NilType: + return "nil" + default: + return "" + } +} + +func freeR(m *Reader) { + readerPool.Put(m) +} + +// Unmarshaler is the interface fulfilled +// by objects that know how to unmarshal +// themselves from MessagePack. +// UnmarshalMsg unmarshals the object +// from binary, returing any leftover +// bytes and any errors encountered. +type Unmarshaler interface { + UnmarshalMsg([]byte) ([]byte, error) +} + +// Decodable is the interface fulfilled +// by objects that know how to read +// themselves from a *Reader. +type Decodable interface { + DecodeMsg(*Reader) error +} + +// Decode decodes 'd' from 'r'. +func Decode(r io.Reader, d Decodable) error { + rd := NewReader(r) + err := d.DecodeMsg(rd) + freeR(rd) + return err +} + +// NewReader returns a *Reader that +// reads from the provided reader. The +// reader will be buffered. +func NewReader(r io.Reader) *Reader { + p := readerPool.Get().(*Reader) + if p.R == nil { + p.R = fwd.NewReader(r) + } else { + p.R.Reset(r) + } + return p +} + +// NewReaderSize returns a *Reader with a buffer of the given size. +// (This is vastly preferable to passing the decoder a reader that is already buffered.) +func NewReaderSize(r io.Reader, sz int) *Reader { + return &Reader{R: fwd.NewReaderSize(r, sz)} +} + +// Reader wraps an io.Reader and provides +// methods to read MessagePack-encoded values +// from it. Readers are buffered. +type Reader struct { + // R is the buffered reader + // that the Reader uses + // to decode MessagePack. + // The Reader itself + // is stateless; all the + // buffering is done + // within R. + R *fwd.Reader + scratch []byte +} + +// Read implements `io.Reader` +func (m *Reader) Read(p []byte) (int, error) { + return m.R.Read(p) +} + +// CopyNext reads the next object from m without decoding it and writes it to w. +// It avoids unnecessary copies internally. +func (m *Reader) CopyNext(w io.Writer) (int64, error) { + sz, o, err := getNextSize(m.R) + if err != nil { + return 0, err + } + + var n int64 + // Opportunistic optimization: if we can fit the whole thing in the m.R + // buffer, then just get a pointer to that, and pass it to w.Write, + // avoiding an allocation. + if int(sz) <= m.R.BufferSize() { + var nn int + var buf []byte + buf, err = m.R.Next(int(sz)) + if err != nil { + if err == io.ErrUnexpectedEOF { + err = ErrShortBytes + } + return 0, err + } + nn, err = w.Write(buf) + n += int64(nn) + } else { + // Fall back to io.CopyN. + // May avoid allocating if w is a ReaderFrom (e.g. bytes.Buffer) + n, err = io.CopyN(w, m.R, int64(sz)) + if err == io.ErrUnexpectedEOF { + err = ErrShortBytes + } + } + if err != nil { + return n, err + } else if n < int64(sz) { + return n, io.ErrShortWrite + } + + // for maps and slices, read elements + for x := uintptr(0); x < o; x++ { + var n2 int64 + n2, err = m.CopyNext(w) + if err != nil { + return n, err + } + n += n2 + } + return n, nil +} + +// ReadFull implements `io.ReadFull` +func (m *Reader) ReadFull(p []byte) (int, error) { + return m.R.ReadFull(p) +} + +// Reset resets the underlying reader. +func (m *Reader) Reset(r io.Reader) { m.R.Reset(r) } + +// Buffered returns the number of bytes currently in the read buffer. +func (m *Reader) Buffered() int { return m.R.Buffered() } + +// BufferSize returns the capacity of the read buffer. +func (m *Reader) BufferSize() int { return m.R.BufferSize() } + +// NextType returns the next object type to be decoded. +func (m *Reader) NextType() (Type, error) { + p, err := m.R.Peek(1) + if err != nil { + return InvalidType, err + } + t := getType(p[0]) + if t == InvalidType { + return t, InvalidPrefixError(p[0]) + } + if t == ExtensionType { + v, err := m.peekExtensionType() + if err != nil { + return InvalidType, err + } + switch v { + case Complex64Extension: + return Complex64Type, nil + case Complex128Extension: + return Complex128Type, nil + case TimeExtension: + return TimeType, nil + } + } + return t, nil +} + +// IsNil returns whether or not +// the next byte is a null messagepack byte +func (m *Reader) IsNil() bool { + p, err := m.R.Peek(1) + return err == nil && p[0] == mnil +} + +// getNextSize returns the size of the next object on the wire. +// returns (obj size, obj elements, error) +// only maps and arrays have non-zero obj elements +// for maps and arrays, obj size does not include elements +// +// use uintptr b/c it's guaranteed to be large enough +// to hold whatever we can fit in memory. +func getNextSize(r *fwd.Reader) (uintptr, uintptr, error) { + b, err := r.Peek(1) + if err != nil { + return 0, 0, err + } + lead := b[0] + spec := &sizes[lead] + size, mode := spec.size, spec.extra + if size == 0 { + return 0, 0, InvalidPrefixError(lead) + } + if mode >= 0 { + return uintptr(size), uintptr(mode), nil + } + b, err = r.Peek(int(size)) + if err != nil { + return 0, 0, err + } + switch mode { + case extra8: + return uintptr(size) + uintptr(b[1]), 0, nil + case extra16: + return uintptr(size) + uintptr(big.Uint16(b[1:])), 0, nil + case extra32: + return uintptr(size) + uintptr(big.Uint32(b[1:])), 0, nil + case map16v: + return uintptr(size), 2 * uintptr(big.Uint16(b[1:])), nil + case map32v: + return uintptr(size), 2 * uintptr(big.Uint32(b[1:])), nil + case array16v: + return uintptr(size), uintptr(big.Uint16(b[1:])), nil + case array32v: + return uintptr(size), uintptr(big.Uint32(b[1:])), nil + default: + return 0, 0, fatal + } +} + +// Skip skips over the next object, regardless of +// its type. If it is an array or map, the whole array +// or map will be skipped. +func (m *Reader) Skip() error { + var ( + v uintptr // bytes + o uintptr // objects + err error + p []byte + ) + + // we can use the faster + // method if we have enough + // buffered data + if m.R.Buffered() >= 5 { + p, err = m.R.Peek(5) + if err != nil { + return err + } + v, o, err = getSize(p) + if err != nil { + return err + } + } else { + v, o, err = getNextSize(m.R) + if err != nil { + return err + } + } + + // 'v' is always non-zero + // if err == nil + _, err = m.R.Skip(int(v)) + if err != nil { + return err + } + + // for maps and slices, skip elements + for x := uintptr(0); x < o; x++ { + err = m.Skip() + if err != nil { + return err + } + } + return nil +} + +// ReadMapHeader reads the next object +// as a map header and returns the size +// of the map and the number of bytes written. +// It will return a TypeError{} if the next +// object is not a map. +func (m *Reader) ReadMapHeader() (sz uint32, err error) { + var p []byte + var lead byte + p, err = m.R.Peek(1) + if err != nil { + return + } + lead = p[0] + if isfixmap(lead) { + sz = uint32(rfixmap(lead)) + _, err = m.R.Skip(1) + return + } + switch lead { + case mmap16: + p, err = m.R.Next(3) + if err != nil { + return + } + sz = uint32(big.Uint16(p[1:])) + return + case mmap32: + p, err = m.R.Next(5) + if err != nil { + return + } + sz = big.Uint32(p[1:]) + return + default: + err = badPrefix(MapType, lead) + return + } +} + +// ReadMapKey reads either a 'str' or 'bin' field from +// the reader and returns the value as a []byte. It uses +// scratch for storage if it is large enough. +func (m *Reader) ReadMapKey(scratch []byte) ([]byte, error) { + out, err := m.ReadStringAsBytes(scratch) + if err != nil { + if tperr, ok := err.(TypeError); ok && tperr.Encoded == BinType { + return m.ReadBytes(scratch) + } + return nil, err + } + return out, nil +} + +// MapKeyPtr returns a []byte pointing to the contents +// of a valid map key. The key cannot be empty, and it +// must be shorter than the total buffer size of the +// *Reader. Additionally, the returned slice is only +// valid until the next *Reader method call. Users +// should exercise extreme care when using this +// method; writing into the returned slice may +// corrupt future reads. +func (m *Reader) ReadMapKeyPtr() ([]byte, error) { + p, err := m.R.Peek(1) + if err != nil { + return nil, err + } + lead := p[0] + var read int + if isfixstr(lead) { + read = int(rfixstr(lead)) + m.R.Skip(1) + goto fill + } + switch lead { + case mstr8, mbin8: + p, err = m.R.Next(2) + if err != nil { + return nil, err + } + read = int(p[1]) + case mstr16, mbin16: + p, err = m.R.Next(3) + if err != nil { + return nil, err + } + read = int(big.Uint16(p[1:])) + case mstr32, mbin32: + p, err = m.R.Next(5) + if err != nil { + return nil, err + } + read = int(big.Uint32(p[1:])) + default: + return nil, badPrefix(StrType, lead) + } +fill: + if read == 0 { + return nil, ErrShortBytes + } + return m.R.Next(read) +} + +// ReadArrayHeader reads the next object as an +// array header and returns the size of the array +// and the number of bytes read. +func (m *Reader) ReadArrayHeader() (sz uint32, err error) { + var lead byte + var p []byte + p, err = m.R.Peek(1) + if err != nil { + return + } + lead = p[0] + if isfixarray(lead) { + sz = uint32(rfixarray(lead)) + _, err = m.R.Skip(1) + return + } + switch lead { + case marray16: + p, err = m.R.Next(3) + if err != nil { + return + } + sz = uint32(big.Uint16(p[1:])) + return + + case marray32: + p, err = m.R.Next(5) + if err != nil { + return + } + sz = big.Uint32(p[1:]) + return + + default: + err = badPrefix(ArrayType, lead) + return + } +} + +// ReadNil reads a 'nil' MessagePack byte from the reader +func (m *Reader) ReadNil() error { + p, err := m.R.Peek(1) + if err != nil { + return err + } + if p[0] != mnil { + return badPrefix(NilType, p[0]) + } + _, err = m.R.Skip(1) + return err +} + +// ReadFloat64 reads a float64 from the reader. +// (If the value on the wire is encoded as a float32, +// it will be up-cast to a float64.) +func (m *Reader) ReadFloat64() (f float64, err error) { + var p []byte + p, err = m.R.Peek(9) + if err != nil { + // we'll allow a coversion from float32 to float64, + // since we don't lose any precision + if err == io.EOF && len(p) > 0 && p[0] == mfloat32 { + ef, err := m.ReadFloat32() + return float64(ef), err + } + return + } + if p[0] != mfloat64 { + // see above + if p[0] == mfloat32 { + ef, err := m.ReadFloat32() + return float64(ef), err + } + err = badPrefix(Float64Type, p[0]) + return + } + f = math.Float64frombits(getMuint64(p)) + _, err = m.R.Skip(9) + return +} + +// ReadFloat32 reads a float32 from the reader +func (m *Reader) ReadFloat32() (f float32, err error) { + var p []byte + p, err = m.R.Peek(5) + if err != nil { + return + } + if p[0] != mfloat32 { + err = badPrefix(Float32Type, p[0]) + return + } + f = math.Float32frombits(getMuint32(p)) + _, err = m.R.Skip(5) + return +} + +// ReadBool reads a bool from the reader +func (m *Reader) ReadBool() (b bool, err error) { + var p []byte + p, err = m.R.Peek(1) + if err != nil { + return + } + switch p[0] { + case mtrue: + b = true + case mfalse: + default: + err = badPrefix(BoolType, p[0]) + return + } + _, err = m.R.Skip(1) + return +} + +// ReadInt64 reads an int64 from the reader +func (m *Reader) ReadInt64() (i int64, err error) { + var p []byte + var lead byte + p, err = m.R.Peek(1) + if err != nil { + return + } + lead = p[0] + + if isfixint(lead) { + i = int64(rfixint(lead)) + _, err = m.R.Skip(1) + return + } else if isnfixint(lead) { + i = int64(rnfixint(lead)) + _, err = m.R.Skip(1) + return + } + + switch lead { + case mint8: + p, err = m.R.Next(2) + if err != nil { + return + } + i = int64(getMint8(p)) + return + + case muint8: + p, err = m.R.Next(2) + if err != nil { + return + } + i = int64(getMuint8(p)) + return + + case mint16: + p, err = m.R.Next(3) + if err != nil { + return + } + i = int64(getMint16(p)) + return + + case muint16: + p, err = m.R.Next(3) + if err != nil { + return + } + i = int64(getMuint16(p)) + return + + case mint32: + p, err = m.R.Next(5) + if err != nil { + return + } + i = int64(getMint32(p)) + return + + case muint32: + p, err = m.R.Next(5) + if err != nil { + return + } + i = int64(getMuint32(p)) + return + + case mint64: + p, err = m.R.Next(9) + if err != nil { + return + } + i = getMint64(p) + return + + case muint64: + p, err = m.R.Next(9) + if err != nil { + return + } + u := getMuint64(p) + if u > math.MaxInt64 { + err = UintOverflow{Value: u, FailedBitsize: 64} + return + } + i = int64(u) + return + + default: + err = badPrefix(IntType, lead) + return + } +} + +// ReadInt32 reads an int32 from the reader +func (m *Reader) ReadInt32() (i int32, err error) { + var in int64 + in, err = m.ReadInt64() + if in > math.MaxInt32 || in < math.MinInt32 { + err = IntOverflow{Value: in, FailedBitsize: 32} + return + } + i = int32(in) + return +} + +// ReadInt16 reads an int16 from the reader +func (m *Reader) ReadInt16() (i int16, err error) { + var in int64 + in, err = m.ReadInt64() + if in > math.MaxInt16 || in < math.MinInt16 { + err = IntOverflow{Value: in, FailedBitsize: 16} + return + } + i = int16(in) + return +} + +// ReadInt8 reads an int8 from the reader +func (m *Reader) ReadInt8() (i int8, err error) { + var in int64 + in, err = m.ReadInt64() + if in > math.MaxInt8 || in < math.MinInt8 { + err = IntOverflow{Value: in, FailedBitsize: 8} + return + } + i = int8(in) + return +} + +// ReadInt reads an int from the reader +func (m *Reader) ReadInt() (i int, err error) { + if smallint { + var in int32 + in, err = m.ReadInt32() + i = int(in) + return + } + var in int64 + in, err = m.ReadInt64() + i = int(in) + return +} + +// ReadUint64 reads a uint64 from the reader +func (m *Reader) ReadUint64() (u uint64, err error) { + var p []byte + var lead byte + p, err = m.R.Peek(1) + if err != nil { + return + } + lead = p[0] + if isfixint(lead) { + u = uint64(rfixint(lead)) + _, err = m.R.Skip(1) + return + } + switch lead { + case mint8: + p, err = m.R.Next(2) + if err != nil { + return + } + v := int64(getMint8(p)) + if v < 0 { + err = UintBelowZero{Value: v} + return + } + u = uint64(v) + return + + case muint8: + p, err = m.R.Next(2) + if err != nil { + return + } + u = uint64(getMuint8(p)) + return + + case mint16: + p, err = m.R.Next(3) + if err != nil { + return + } + v := int64(getMint16(p)) + if v < 0 { + err = UintBelowZero{Value: v} + return + } + u = uint64(v) + return + + case muint16: + p, err = m.R.Next(3) + if err != nil { + return + } + u = uint64(getMuint16(p)) + return + + case mint32: + p, err = m.R.Next(5) + if err != nil { + return + } + v := int64(getMint32(p)) + if v < 0 { + err = UintBelowZero{Value: v} + return + } + u = uint64(v) + return + + case muint32: + p, err = m.R.Next(5) + if err != nil { + return + } + u = uint64(getMuint32(p)) + return + + case mint64: + p, err = m.R.Next(9) + if err != nil { + return + } + v := int64(getMint64(p)) + if v < 0 { + err = UintBelowZero{Value: v} + return + } + u = uint64(v) + return + + case muint64: + p, err = m.R.Next(9) + if err != nil { + return + } + u = getMuint64(p) + return + + default: + if isnfixint(lead) { + err = UintBelowZero{Value: int64(rnfixint(lead))} + } else { + err = badPrefix(UintType, lead) + } + return + + } +} + +// ReadUint32 reads a uint32 from the reader +func (m *Reader) ReadUint32() (u uint32, err error) { + var in uint64 + in, err = m.ReadUint64() + if in > math.MaxUint32 { + err = UintOverflow{Value: in, FailedBitsize: 32} + return + } + u = uint32(in) + return +} + +// ReadUint16 reads a uint16 from the reader +func (m *Reader) ReadUint16() (u uint16, err error) { + var in uint64 + in, err = m.ReadUint64() + if in > math.MaxUint16 { + err = UintOverflow{Value: in, FailedBitsize: 16} + return + } + u = uint16(in) + return +} + +// ReadUint8 reads a uint8 from the reader +func (m *Reader) ReadUint8() (u uint8, err error) { + var in uint64 + in, err = m.ReadUint64() + if in > math.MaxUint8 { + err = UintOverflow{Value: in, FailedBitsize: 8} + return + } + u = uint8(in) + return +} + +// ReadUint reads a uint from the reader +func (m *Reader) ReadUint() (u uint, err error) { + if smallint { + var un uint32 + un, err = m.ReadUint32() + u = uint(un) + return + } + var un uint64 + un, err = m.ReadUint64() + u = uint(un) + return +} + +// ReadByte is analogous to ReadUint8. +// +// NOTE: this is *not* an implementation +// of io.ByteReader. +func (m *Reader) ReadByte() (b byte, err error) { + var in uint64 + in, err = m.ReadUint64() + if in > math.MaxUint8 { + err = UintOverflow{Value: in, FailedBitsize: 8} + return + } + b = byte(in) + return +} + +// ReadBytes reads a MessagePack 'bin' object +// from the reader and returns its value. It may +// use 'scratch' for storage if it is non-nil. +func (m *Reader) ReadBytes(scratch []byte) (b []byte, err error) { + var p []byte + var lead byte + p, err = m.R.Peek(2) + if err != nil { + return + } + lead = p[0] + var read int64 + switch lead { + case mbin8: + read = int64(p[1]) + m.R.Skip(2) + case mbin16: + p, err = m.R.Next(3) + if err != nil { + return + } + read = int64(big.Uint16(p[1:])) + case mbin32: + p, err = m.R.Next(5) + if err != nil { + return + } + read = int64(big.Uint32(p[1:])) + default: + err = badPrefix(BinType, lead) + return + } + if int64(cap(scratch)) < read { + b = make([]byte, read) + } else { + b = scratch[0:read] + } + _, err = m.R.ReadFull(b) + return +} + +// ReadBytesHeader reads the size header +// of a MessagePack 'bin' object. The user +// is responsible for dealing with the next +// 'sz' bytes from the reader in an application-specific +// way. +func (m *Reader) ReadBytesHeader() (sz uint32, err error) { + var p []byte + p, err = m.R.Peek(1) + if err != nil { + return + } + switch p[0] { + case mbin8: + p, err = m.R.Next(2) + if err != nil { + return + } + sz = uint32(p[1]) + return + case mbin16: + p, err = m.R.Next(3) + if err != nil { + return + } + sz = uint32(big.Uint16(p[1:])) + return + case mbin32: + p, err = m.R.Next(5) + if err != nil { + return + } + sz = uint32(big.Uint32(p[1:])) + return + default: + err = badPrefix(BinType, p[0]) + return + } +} + +// ReadExactBytes reads a MessagePack 'bin'-encoded +// object off of the wire into the provided slice. An +// ArrayError will be returned if the object is not +// exactly the length of the input slice. +func (m *Reader) ReadExactBytes(into []byte) error { + p, err := m.R.Peek(2) + if err != nil { + return err + } + lead := p[0] + var read int64 // bytes to read + var skip int // prefix size to skip + switch lead { + case mbin8: + read = int64(p[1]) + skip = 2 + case mbin16: + p, err = m.R.Peek(3) + if err != nil { + return err + } + read = int64(big.Uint16(p[1:])) + skip = 3 + case mbin32: + p, err = m.R.Peek(5) + if err != nil { + return err + } + read = int64(big.Uint32(p[1:])) + skip = 5 + default: + return badPrefix(BinType, lead) + } + if read != int64(len(into)) { + return ArrayError{Wanted: uint32(len(into)), Got: uint32(read)} + } + m.R.Skip(skip) + _, err = m.R.ReadFull(into) + return err +} + +// ReadStringAsBytes reads a MessagePack 'str' (utf-8) string +// and returns its value as bytes. It may use 'scratch' for storage +// if it is non-nil. +func (m *Reader) ReadStringAsBytes(scratch []byte) (b []byte, err error) { + var p []byte + var lead byte + p, err = m.R.Peek(1) + if err != nil { + return + } + lead = p[0] + var read int64 + + if isfixstr(lead) { + read = int64(rfixstr(lead)) + m.R.Skip(1) + goto fill + } + + switch lead { + case mstr8: + p, err = m.R.Next(2) + if err != nil { + return + } + read = int64(uint8(p[1])) + case mstr16: + p, err = m.R.Next(3) + if err != nil { + return + } + read = int64(big.Uint16(p[1:])) + case mstr32: + p, err = m.R.Next(5) + if err != nil { + return + } + read = int64(big.Uint32(p[1:])) + default: + err = badPrefix(StrType, lead) + return + } +fill: + if int64(cap(scratch)) < read { + b = make([]byte, read) + } else { + b = scratch[0:read] + } + _, err = m.R.ReadFull(b) + return +} + +// ReadStringHeader reads a string header +// off of the wire. The user is then responsible +// for dealing with the next 'sz' bytes from +// the reader in an application-specific manner. +func (m *Reader) ReadStringHeader() (sz uint32, err error) { + var p []byte + p, err = m.R.Peek(1) + if err != nil { + return + } + lead := p[0] + if isfixstr(lead) { + sz = uint32(rfixstr(lead)) + m.R.Skip(1) + return + } + switch lead { + case mstr8: + p, err = m.R.Next(2) + if err != nil { + return + } + sz = uint32(p[1]) + return + case mstr16: + p, err = m.R.Next(3) + if err != nil { + return + } + sz = uint32(big.Uint16(p[1:])) + return + case mstr32: + p, err = m.R.Next(5) + if err != nil { + return + } + sz = big.Uint32(p[1:]) + return + default: + err = badPrefix(StrType, lead) + return + } +} + +// ReadString reads a utf-8 string from the reader +func (m *Reader) ReadString() (s string, err error) { + var p []byte + var lead byte + var read int64 + p, err = m.R.Peek(1) + if err != nil { + return + } + lead = p[0] + + if isfixstr(lead) { + read = int64(rfixstr(lead)) + m.R.Skip(1) + goto fill + } + + switch lead { + case mstr8: + p, err = m.R.Next(2) + if err != nil { + return + } + read = int64(uint8(p[1])) + case mstr16: + p, err = m.R.Next(3) + if err != nil { + return + } + read = int64(big.Uint16(p[1:])) + case mstr32: + p, err = m.R.Next(5) + if err != nil { + return + } + read = int64(big.Uint32(p[1:])) + default: + err = badPrefix(StrType, lead) + return + } +fill: + if read == 0 { + s, err = "", nil + return + } + // reading into the memory + // that will become the string + // itself has vastly superior + // worst-case performance, because + // the reader buffer doesn't have + // to be large enough to hold the string. + // the idea here is to make it more + // difficult for someone malicious + // to cause the system to run out of + // memory by sending very large strings. + // + // NOTE: this works because the argument + // passed to (*fwd.Reader).ReadFull escapes + // to the heap; its argument may, in turn, + // be passed to the underlying reader, and + // thus escape analysis *must* conclude that + // 'out' escapes. + out := make([]byte, read) + _, err = m.R.ReadFull(out) + if err != nil { + return + } + s = UnsafeString(out) + return +} + +// ReadComplex64 reads a complex64 from the reader +func (m *Reader) ReadComplex64() (f complex64, err error) { + var p []byte + p, err = m.R.Peek(10) + if err != nil { + return + } + if p[0] != mfixext8 { + err = badPrefix(Complex64Type, p[0]) + return + } + if int8(p[1]) != Complex64Extension { + err = errExt(int8(p[1]), Complex64Extension) + return + } + f = complex(math.Float32frombits(big.Uint32(p[2:])), + math.Float32frombits(big.Uint32(p[6:]))) + _, err = m.R.Skip(10) + return +} + +// ReadComplex128 reads a complex128 from the reader +func (m *Reader) ReadComplex128() (f complex128, err error) { + var p []byte + p, err = m.R.Peek(18) + if err != nil { + return + } + if p[0] != mfixext16 { + err = badPrefix(Complex128Type, p[0]) + return + } + if int8(p[1]) != Complex128Extension { + err = errExt(int8(p[1]), Complex128Extension) + return + } + f = complex(math.Float64frombits(big.Uint64(p[2:])), + math.Float64frombits(big.Uint64(p[10:]))) + _, err = m.R.Skip(18) + return +} + +// ReadMapStrIntf reads a MessagePack map into a map[string]interface{}. +// (You must pass a non-nil map into the function.) +func (m *Reader) ReadMapStrIntf(mp map[string]interface{}) (err error) { + var sz uint32 + sz, err = m.ReadMapHeader() + if err != nil { + return + } + for key := range mp { + delete(mp, key) + } + for i := uint32(0); i < sz; i++ { + var key string + var val interface{} + key, err = m.ReadString() + if err != nil { + return + } + val, err = m.ReadIntf() + if err != nil { + return + } + mp[key] = val + } + return +} + +// ReadTime reads a time.Time object from the reader. +// The returned time's location will be set to time.Local. +func (m *Reader) ReadTime() (t time.Time, err error) { + var p []byte + p, err = m.R.Peek(15) + if err != nil { + return + } + if p[0] != mext8 || p[1] != 12 { + err = badPrefix(TimeType, p[0]) + return + } + if int8(p[2]) != TimeExtension { + err = errExt(int8(p[2]), TimeExtension) + return + } + sec, nsec := getUnix(p[3:]) + t = time.Unix(sec, int64(nsec)).Local() + _, err = m.R.Skip(15) + return +} + +// ReadIntf reads out the next object as a raw interface{}. +// Arrays are decoded as []interface{}, and maps are decoded +// as map[string]interface{}. Integers are decoded as int64 +// and unsigned integers are decoded as uint64. +func (m *Reader) ReadIntf() (i interface{}, err error) { + var t Type + t, err = m.NextType() + if err != nil { + return + } + switch t { + case BoolType: + i, err = m.ReadBool() + return + + case IntType: + i, err = m.ReadInt64() + return + + case UintType: + i, err = m.ReadUint64() + return + + case BinType: + i, err = m.ReadBytes(nil) + return + + case StrType: + i, err = m.ReadString() + return + + case Complex64Type: + i, err = m.ReadComplex64() + return + + case Complex128Type: + i, err = m.ReadComplex128() + return + + case TimeType: + i, err = m.ReadTime() + return + + case ExtensionType: + var t int8 + t, err = m.peekExtensionType() + if err != nil { + return + } + f, ok := extensionReg[t] + if ok { + e := f() + err = m.ReadExtension(e) + i = e + return + } + var e RawExtension + e.Type = t + err = m.ReadExtension(&e) + i = &e + return + + case MapType: + mp := make(map[string]interface{}) + err = m.ReadMapStrIntf(mp) + i = mp + return + + case NilType: + err = m.ReadNil() + i = nil + return + + case Float32Type: + i, err = m.ReadFloat32() + return + + case Float64Type: + i, err = m.ReadFloat64() + return + + case ArrayType: + var sz uint32 + sz, err = m.ReadArrayHeader() + + if err != nil { + return + } + out := make([]interface{}, int(sz)) + for j := range out { + out[j], err = m.ReadIntf() + if err != nil { + return + } + } + i = out + return + + default: + return nil, fatal // unreachable + } +} diff --git a/vendor/github.com/tinylib/msgp/msgp/read_bytes.go b/vendor/github.com/tinylib/msgp/msgp/read_bytes.go new file mode 100644 index 0000000..f53f84d --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/read_bytes.go @@ -0,0 +1,1197 @@ +package msgp + +import ( + "bytes" + "encoding/binary" + "math" + "time" +) + +var big = binary.BigEndian + +// NextType returns the type of the next +// object in the slice. If the length +// of the input is zero, it returns +// InvalidType. +func NextType(b []byte) Type { + if len(b) == 0 { + return InvalidType + } + spec := sizes[b[0]] + t := spec.typ + if t == ExtensionType && len(b) > int(spec.size) { + var tp int8 + if spec.extra == constsize { + tp = int8(b[1]) + } else { + tp = int8(b[spec.size-1]) + } + switch tp { + case TimeExtension: + return TimeType + case Complex128Extension: + return Complex128Type + case Complex64Extension: + return Complex64Type + default: + return ExtensionType + } + } + return t +} + +// IsNil returns true if len(b)>0 and +// the leading byte is a 'nil' MessagePack +// byte; false otherwise +func IsNil(b []byte) bool { + if len(b) != 0 && b[0] == mnil { + return true + } + return false +} + +// Raw is raw MessagePack. +// Raw allows you to read and write +// data without interpreting its contents. +type Raw []byte + +// MarshalMsg implements msgp.Marshaler. +// It appends the raw contents of 'raw' +// to the provided byte slice. If 'raw' +// is 0 bytes, 'nil' will be appended instead. +func (r Raw) MarshalMsg(b []byte) ([]byte, error) { + i := len(r) + if i == 0 { + return AppendNil(b), nil + } + o, l := ensure(b, i) + copy(o[l:], []byte(r)) + return o, nil +} + +// UnmarshalMsg implements msgp.Unmarshaler. +// It sets the contents of *Raw to be the next +// object in the provided byte slice. +func (r *Raw) UnmarshalMsg(b []byte) ([]byte, error) { + l := len(b) + out, err := Skip(b) + if err != nil { + return b, err + } + rlen := l - len(out) + if IsNil(b[:rlen]) { + rlen = 0 + } + if cap(*r) < rlen { + *r = make(Raw, rlen) + } else { + *r = (*r)[0:rlen] + } + copy(*r, b[:rlen]) + return out, nil +} + +// EncodeMsg implements msgp.Encodable. +// It writes the raw bytes to the writer. +// If r is empty, it writes 'nil' instead. +func (r Raw) EncodeMsg(w *Writer) error { + if len(r) == 0 { + return w.WriteNil() + } + _, err := w.Write([]byte(r)) + return err +} + +// DecodeMsg implements msgp.Decodable. +// It sets the value of *Raw to be the +// next object on the wire. +func (r *Raw) DecodeMsg(f *Reader) error { + *r = (*r)[:0] + err := appendNext(f, (*[]byte)(r)) + if IsNil(*r) { + *r = (*r)[:0] + } + return err +} + +// Msgsize implements msgp.Sizer +func (r Raw) Msgsize() int { + l := len(r) + if l == 0 { + return 1 // for 'nil' + } + return l +} + +func appendNext(f *Reader, d *[]byte) error { + amt, o, err := getNextSize(f.R) + if err != nil { + return err + } + var i int + *d, i = ensure(*d, int(amt)) + _, err = f.R.ReadFull((*d)[i:]) + if err != nil { + return err + } + for o > 0 { + err = appendNext(f, d) + if err != nil { + return err + } + o-- + } + return nil +} + +// MarshalJSON implements json.Marshaler +func (r *Raw) MarshalJSON() ([]byte, error) { + var buf bytes.Buffer + _, err := UnmarshalAsJSON(&buf, []byte(*r)) + return buf.Bytes(), err +} + +// ReadMapHeaderBytes reads a map header size +// from 'b' and returns the remaining bytes. +// Possible errors: +// - ErrShortBytes (too few bytes) +// - TypeError{} (not a map) +func ReadMapHeaderBytes(b []byte) (sz uint32, o []byte, err error) { + l := len(b) + if l < 1 { + err = ErrShortBytes + return + } + + lead := b[0] + if isfixmap(lead) { + sz = uint32(rfixmap(lead)) + o = b[1:] + return + } + + switch lead { + case mmap16: + if l < 3 { + err = ErrShortBytes + return + } + sz = uint32(big.Uint16(b[1:])) + o = b[3:] + return + + case mmap32: + if l < 5 { + err = ErrShortBytes + return + } + sz = big.Uint32(b[1:]) + o = b[5:] + return + + default: + err = badPrefix(MapType, lead) + return + } +} + +// ReadMapKeyZC attempts to read a map key +// from 'b' and returns the key bytes and the remaining bytes +// Possible errors: +// - ErrShortBytes (too few bytes) +// - TypeError{} (not a str or bin) +func ReadMapKeyZC(b []byte) ([]byte, []byte, error) { + o, b, err := ReadStringZC(b) + if err != nil { + if tperr, ok := err.(TypeError); ok && tperr.Encoded == BinType { + return ReadBytesZC(b) + } + return nil, b, err + } + return o, b, nil +} + +// ReadArrayHeaderBytes attempts to read +// the array header size off of 'b' and return +// the size and remaining bytes. +// Possible errors: +// - ErrShortBytes (too few bytes) +// - TypeError{} (not an array) +func ReadArrayHeaderBytes(b []byte) (sz uint32, o []byte, err error) { + if len(b) < 1 { + return 0, nil, ErrShortBytes + } + lead := b[0] + if isfixarray(lead) { + sz = uint32(rfixarray(lead)) + o = b[1:] + return + } + + switch lead { + case marray16: + if len(b) < 3 { + err = ErrShortBytes + return + } + sz = uint32(big.Uint16(b[1:])) + o = b[3:] + return + + case marray32: + if len(b) < 5 { + err = ErrShortBytes + return + } + sz = big.Uint32(b[1:]) + o = b[5:] + return + + default: + err = badPrefix(ArrayType, lead) + return + } +} + +// ReadNilBytes tries to read a "nil" byte +// off of 'b' and return the remaining bytes. +// Possible errors: +// - ErrShortBytes (too few bytes) +// - TypeError{} (not a 'nil') +// - InvalidPrefixError +func ReadNilBytes(b []byte) ([]byte, error) { + if len(b) < 1 { + return nil, ErrShortBytes + } + if b[0] != mnil { + return b, badPrefix(NilType, b[0]) + } + return b[1:], nil +} + +// ReadFloat64Bytes tries to read a float64 +// from 'b' and return the value and the remaining bytes. +// Possible errors: +// - ErrShortBytes (too few bytes) +// - TypeError{} (not a float64) +func ReadFloat64Bytes(b []byte) (f float64, o []byte, err error) { + if len(b) < 9 { + if len(b) >= 5 && b[0] == mfloat32 { + var tf float32 + tf, o, err = ReadFloat32Bytes(b) + f = float64(tf) + return + } + err = ErrShortBytes + return + } + + if b[0] != mfloat64 { + if b[0] == mfloat32 { + var tf float32 + tf, o, err = ReadFloat32Bytes(b) + f = float64(tf) + return + } + err = badPrefix(Float64Type, b[0]) + return + } + + f = math.Float64frombits(getMuint64(b)) + o = b[9:] + return +} + +// ReadFloat32Bytes tries to read a float64 +// from 'b' and return the value and the remaining bytes. +// Possible errors: +// - ErrShortBytes (too few bytes) +// - TypeError{} (not a float32) +func ReadFloat32Bytes(b []byte) (f float32, o []byte, err error) { + if len(b) < 5 { + err = ErrShortBytes + return + } + + if b[0] != mfloat32 { + err = TypeError{Method: Float32Type, Encoded: getType(b[0])} + return + } + + f = math.Float32frombits(getMuint32(b)) + o = b[5:] + return +} + +// ReadBoolBytes tries to read a float64 +// from 'b' and return the value and the remaining bytes. +// Possible errors: +// - ErrShortBytes (too few bytes) +// - TypeError{} (not a bool) +func ReadBoolBytes(b []byte) (bool, []byte, error) { + if len(b) < 1 { + return false, b, ErrShortBytes + } + switch b[0] { + case mtrue: + return true, b[1:], nil + case mfalse: + return false, b[1:], nil + default: + return false, b, badPrefix(BoolType, b[0]) + } +} + +// ReadInt64Bytes tries to read an int64 +// from 'b' and return the value and the remaining bytes. +// Possible errors: +// - ErrShortBytes (too few bytes) +// - TypeError (not a int) +func ReadInt64Bytes(b []byte) (i int64, o []byte, err error) { + l := len(b) + if l < 1 { + return 0, nil, ErrShortBytes + } + + lead := b[0] + if isfixint(lead) { + i = int64(rfixint(lead)) + o = b[1:] + return + } + if isnfixint(lead) { + i = int64(rnfixint(lead)) + o = b[1:] + return + } + + switch lead { + case mint8: + if l < 2 { + err = ErrShortBytes + return + } + i = int64(getMint8(b)) + o = b[2:] + return + + case muint8: + if l < 2 { + err = ErrShortBytes + return + } + i = int64(getMuint8(b)) + o = b[2:] + return + + case mint16: + if l < 3 { + err = ErrShortBytes + return + } + i = int64(getMint16(b)) + o = b[3:] + return + + case muint16: + if l < 3 { + err = ErrShortBytes + return + } + i = int64(getMuint16(b)) + o = b[3:] + return + + case mint32: + if l < 5 { + err = ErrShortBytes + return + } + i = int64(getMint32(b)) + o = b[5:] + return + + case muint32: + if l < 5 { + err = ErrShortBytes + return + } + i = int64(getMuint32(b)) + o = b[5:] + return + + case mint64: + if l < 9 { + err = ErrShortBytes + return + } + i = int64(getMint64(b)) + o = b[9:] + return + + case muint64: + if l < 9 { + err = ErrShortBytes + return + } + u := getMuint64(b) + if u > math.MaxInt64 { + err = UintOverflow{Value: u, FailedBitsize: 64} + return + } + i = int64(u) + o = b[9:] + return + + default: + err = badPrefix(IntType, lead) + return + } +} + +// ReadInt32Bytes tries to read an int32 +// from 'b' and return the value and the remaining bytes. +// Possible errors: +// - ErrShortBytes (too few bytes) +// - TypeError{} (not a int) +// - IntOverflow{} (value doesn't fit in int32) +func ReadInt32Bytes(b []byte) (int32, []byte, error) { + i, o, err := ReadInt64Bytes(b) + if i > math.MaxInt32 || i < math.MinInt32 { + return 0, o, IntOverflow{Value: i, FailedBitsize: 32} + } + return int32(i), o, err +} + +// ReadInt16Bytes tries to read an int16 +// from 'b' and return the value and the remaining bytes. +// Possible errors: +// - ErrShortBytes (too few bytes) +// - TypeError{} (not a int) +// - IntOverflow{} (value doesn't fit in int16) +func ReadInt16Bytes(b []byte) (int16, []byte, error) { + i, o, err := ReadInt64Bytes(b) + if i > math.MaxInt16 || i < math.MinInt16 { + return 0, o, IntOverflow{Value: i, FailedBitsize: 16} + } + return int16(i), o, err +} + +// ReadInt8Bytes tries to read an int16 +// from 'b' and return the value and the remaining bytes. +// Possible errors: +// - ErrShortBytes (too few bytes) +// - TypeError{} (not a int) +// - IntOverflow{} (value doesn't fit in int8) +func ReadInt8Bytes(b []byte) (int8, []byte, error) { + i, o, err := ReadInt64Bytes(b) + if i > math.MaxInt8 || i < math.MinInt8 { + return 0, o, IntOverflow{Value: i, FailedBitsize: 8} + } + return int8(i), o, err +} + +// ReadIntBytes tries to read an int +// from 'b' and return the value and the remaining bytes. +// Possible errors: +// - ErrShortBytes (too few bytes) +// - TypeError{} (not a int) +// - IntOverflow{} (value doesn't fit in int; 32-bit platforms only) +func ReadIntBytes(b []byte) (int, []byte, error) { + if smallint { + i, b, err := ReadInt32Bytes(b) + return int(i), b, err + } + i, b, err := ReadInt64Bytes(b) + return int(i), b, err +} + +// ReadUint64Bytes tries to read a uint64 +// from 'b' and return the value and the remaining bytes. +// Possible errors: +// - ErrShortBytes (too few bytes) +// - TypeError{} (not a uint) +func ReadUint64Bytes(b []byte) (u uint64, o []byte, err error) { + l := len(b) + if l < 1 { + return 0, nil, ErrShortBytes + } + + lead := b[0] + if isfixint(lead) { + u = uint64(rfixint(lead)) + o = b[1:] + return + } + + switch lead { + case mint8: + if l < 2 { + err = ErrShortBytes + return + } + v := int64(getMint8(b)) + if v < 0 { + err = UintBelowZero{Value: v} + return + } + u = uint64(v) + o = b[2:] + return + + case muint8: + if l < 2 { + err = ErrShortBytes + return + } + u = uint64(getMuint8(b)) + o = b[2:] + return + + case mint16: + if l < 3 { + err = ErrShortBytes + return + } + v := int64(getMint16(b)) + if v < 0 { + err = UintBelowZero{Value: v} + return + } + u = uint64(v) + o = b[3:] + return + + case muint16: + if l < 3 { + err = ErrShortBytes + return + } + u = uint64(getMuint16(b)) + o = b[3:] + return + + case mint32: + if l < 5 { + err = ErrShortBytes + return + } + v := int64(getMint32(b)) + if v < 0 { + err = UintBelowZero{Value: v} + return + } + u = uint64(v) + o = b[5:] + return + + case muint32: + if l < 5 { + err = ErrShortBytes + return + } + u = uint64(getMuint32(b)) + o = b[5:] + return + + case mint64: + if l < 9 { + err = ErrShortBytes + return + } + v := int64(getMint64(b)) + if v < 0 { + err = UintBelowZero{Value: v} + return + } + u = uint64(v) + o = b[9:] + return + + case muint64: + if l < 9 { + err = ErrShortBytes + return + } + u = getMuint64(b) + o = b[9:] + return + + default: + if isnfixint(lead) { + err = UintBelowZero{Value: int64(rnfixint(lead))} + } else { + err = badPrefix(UintType, lead) + } + return + } +} + +// ReadUint32Bytes tries to read a uint32 +// from 'b' and return the value and the remaining bytes. +// Possible errors: +// - ErrShortBytes (too few bytes) +// - TypeError{} (not a uint) +// - UintOverflow{} (value too large for uint32) +func ReadUint32Bytes(b []byte) (uint32, []byte, error) { + v, o, err := ReadUint64Bytes(b) + if v > math.MaxUint32 { + return 0, nil, UintOverflow{Value: v, FailedBitsize: 32} + } + return uint32(v), o, err +} + +// ReadUint16Bytes tries to read a uint16 +// from 'b' and return the value and the remaining bytes. +// Possible errors: +// - ErrShortBytes (too few bytes) +// - TypeError{} (not a uint) +// - UintOverflow{} (value too large for uint16) +func ReadUint16Bytes(b []byte) (uint16, []byte, error) { + v, o, err := ReadUint64Bytes(b) + if v > math.MaxUint16 { + return 0, nil, UintOverflow{Value: v, FailedBitsize: 16} + } + return uint16(v), o, err +} + +// ReadUint8Bytes tries to read a uint8 +// from 'b' and return the value and the remaining bytes. +// Possible errors: +// - ErrShortBytes (too few bytes) +// - TypeError{} (not a uint) +// - UintOverflow{} (value too large for uint8) +func ReadUint8Bytes(b []byte) (uint8, []byte, error) { + v, o, err := ReadUint64Bytes(b) + if v > math.MaxUint8 { + return 0, nil, UintOverflow{Value: v, FailedBitsize: 8} + } + return uint8(v), o, err +} + +// ReadUintBytes tries to read a uint +// from 'b' and return the value and the remaining bytes. +// Possible errors: +// - ErrShortBytes (too few bytes) +// - TypeError{} (not a uint) +// - UintOverflow{} (value too large for uint; 32-bit platforms only) +func ReadUintBytes(b []byte) (uint, []byte, error) { + if smallint { + u, b, err := ReadUint32Bytes(b) + return uint(u), b, err + } + u, b, err := ReadUint64Bytes(b) + return uint(u), b, err +} + +// ReadByteBytes is analogous to ReadUint8Bytes +func ReadByteBytes(b []byte) (byte, []byte, error) { + return ReadUint8Bytes(b) +} + +// ReadBytesBytes reads a 'bin' object +// from 'b' and returns its vaue and +// the remaining bytes in 'b'. +// Possible errors: +// - ErrShortBytes (too few bytes) +// - TypeError{} (not a 'bin' object) +func ReadBytesBytes(b []byte, scratch []byte) (v []byte, o []byte, err error) { + return readBytesBytes(b, scratch, false) +} + +func readBytesBytes(b []byte, scratch []byte, zc bool) (v []byte, o []byte, err error) { + l := len(b) + if l < 1 { + return nil, nil, ErrShortBytes + } + + lead := b[0] + var read int + switch lead { + case mbin8: + if l < 2 { + err = ErrShortBytes + return + } + + read = int(b[1]) + b = b[2:] + + case mbin16: + if l < 3 { + err = ErrShortBytes + return + } + read = int(big.Uint16(b[1:])) + b = b[3:] + + case mbin32: + if l < 5 { + err = ErrShortBytes + return + } + read = int(big.Uint32(b[1:])) + b = b[5:] + + default: + err = badPrefix(BinType, lead) + return + } + + if len(b) < read { + err = ErrShortBytes + return + } + + // zero-copy + if zc { + v = b[0:read] + o = b[read:] + return + } + + if cap(scratch) >= read { + v = scratch[0:read] + } else { + v = make([]byte, read) + } + + o = b[copy(v, b):] + return +} + +// ReadBytesZC extracts the messagepack-encoded +// binary field without copying. The returned []byte +// points to the same memory as the input slice. +// Possible errors: +// - ErrShortBytes (b not long enough) +// - TypeError{} (object not 'bin') +func ReadBytesZC(b []byte) (v []byte, o []byte, err error) { + return readBytesBytes(b, nil, true) +} + +func ReadExactBytes(b []byte, into []byte) (o []byte, err error) { + l := len(b) + if l < 1 { + err = ErrShortBytes + return + } + + lead := b[0] + var read uint32 + var skip int + switch lead { + case mbin8: + if l < 2 { + err = ErrShortBytes + return + } + + read = uint32(b[1]) + skip = 2 + + case mbin16: + if l < 3 { + err = ErrShortBytes + return + } + read = uint32(big.Uint16(b[1:])) + skip = 3 + + case mbin32: + if l < 5 { + err = ErrShortBytes + return + } + read = uint32(big.Uint32(b[1:])) + skip = 5 + + default: + err = badPrefix(BinType, lead) + return + } + + if read != uint32(len(into)) { + err = ArrayError{Wanted: uint32(len(into)), Got: read} + return + } + + o = b[skip+copy(into, b[skip:]):] + return +} + +// ReadStringZC reads a messagepack string field +// without copying. The returned []byte points +// to the same memory as the input slice. +// Possible errors: +// - ErrShortBytes (b not long enough) +// - TypeError{} (object not 'str') +func ReadStringZC(b []byte) (v []byte, o []byte, err error) { + l := len(b) + if l < 1 { + return nil, nil, ErrShortBytes + } + + lead := b[0] + var read int + + if isfixstr(lead) { + read = int(rfixstr(lead)) + b = b[1:] + } else { + switch lead { + case mstr8: + if l < 2 { + err = ErrShortBytes + return + } + read = int(b[1]) + b = b[2:] + + case mstr16: + if l < 3 { + err = ErrShortBytes + return + } + read = int(big.Uint16(b[1:])) + b = b[3:] + + case mstr32: + if l < 5 { + err = ErrShortBytes + return + } + read = int(big.Uint32(b[1:])) + b = b[5:] + + default: + err = TypeError{Method: StrType, Encoded: getType(lead)} + return + } + } + + if len(b) < read { + err = ErrShortBytes + return + } + + v = b[0:read] + o = b[read:] + return +} + +// ReadStringBytes reads a 'str' object +// from 'b' and returns its value and the +// remaining bytes in 'b'. +// Possible errors: +// - ErrShortBytes (b not long enough) +// - TypeError{} (not 'str' type) +// - InvalidPrefixError +func ReadStringBytes(b []byte) (string, []byte, error) { + v, o, err := ReadStringZC(b) + return string(v), o, err +} + +// ReadStringAsBytes reads a 'str' object +// into a slice of bytes. 'v' is the value of +// the 'str' object, which may reside in memory +// pointed to by 'scratch.' 'o' is the remaining bytes +// in 'b.'' +// Possible errors: +// - ErrShortBytes (b not long enough) +// - TypeError{} (not 'str' type) +// - InvalidPrefixError (unknown type marker) +func ReadStringAsBytes(b []byte, scratch []byte) (v []byte, o []byte, err error) { + var tmp []byte + tmp, o, err = ReadStringZC(b) + v = append(scratch[:0], tmp...) + return +} + +// ReadComplex128Bytes reads a complex128 +// extension object from 'b' and returns the +// remaining bytes. +// Possible errors: +// - ErrShortBytes (not enough bytes in 'b') +// - TypeError{} (object not a complex128) +// - InvalidPrefixError +// - ExtensionTypeError{} (object an extension of the correct size, but not a complex128) +func ReadComplex128Bytes(b []byte) (c complex128, o []byte, err error) { + if len(b) < 18 { + err = ErrShortBytes + return + } + if b[0] != mfixext16 { + err = badPrefix(Complex128Type, b[0]) + return + } + if int8(b[1]) != Complex128Extension { + err = errExt(int8(b[1]), Complex128Extension) + return + } + c = complex(math.Float64frombits(big.Uint64(b[2:])), + math.Float64frombits(big.Uint64(b[10:]))) + o = b[18:] + return +} + +// ReadComplex64Bytes reads a complex64 +// extension object from 'b' and returns the +// remaining bytes. +// Possible errors: +// - ErrShortBytes (not enough bytes in 'b') +// - TypeError{} (object not a complex64) +// - ExtensionTypeError{} (object an extension of the correct size, but not a complex64) +func ReadComplex64Bytes(b []byte) (c complex64, o []byte, err error) { + if len(b) < 10 { + err = ErrShortBytes + return + } + if b[0] != mfixext8 { + err = badPrefix(Complex64Type, b[0]) + return + } + if b[1] != Complex64Extension { + err = errExt(int8(b[1]), Complex64Extension) + return + } + c = complex(math.Float32frombits(big.Uint32(b[2:])), + math.Float32frombits(big.Uint32(b[6:]))) + o = b[10:] + return +} + +// ReadTimeBytes reads a time.Time +// extension object from 'b' and returns the +// remaining bytes. +// Possible errors: +// - ErrShortBytes (not enough bytes in 'b') +// - TypeError{} (object not a complex64) +// - ExtensionTypeError{} (object an extension of the correct size, but not a time.Time) +func ReadTimeBytes(b []byte) (t time.Time, o []byte, err error) { + if len(b) < 15 { + err = ErrShortBytes + return + } + if b[0] != mext8 || b[1] != 12 { + err = badPrefix(TimeType, b[0]) + return + } + if int8(b[2]) != TimeExtension { + err = errExt(int8(b[2]), TimeExtension) + return + } + sec, nsec := getUnix(b[3:]) + t = time.Unix(sec, int64(nsec)).Local() + o = b[15:] + return +} + +// ReadMapStrIntfBytes reads a map[string]interface{} +// out of 'b' and returns the map and remaining bytes. +// If 'old' is non-nil, the values will be read into that map. +func ReadMapStrIntfBytes(b []byte, old map[string]interface{}) (v map[string]interface{}, o []byte, err error) { + var sz uint32 + o = b + sz, o, err = ReadMapHeaderBytes(o) + + if err != nil { + return + } + + if old != nil { + for key := range old { + delete(old, key) + } + v = old + } else { + v = make(map[string]interface{}, int(sz)) + } + + for z := uint32(0); z < sz; z++ { + if len(o) < 1 { + err = ErrShortBytes + return + } + var key []byte + key, o, err = ReadMapKeyZC(o) + if err != nil { + return + } + var val interface{} + val, o, err = ReadIntfBytes(o) + if err != nil { + return + } + v[string(key)] = val + } + return +} + +// ReadIntfBytes attempts to read +// the next object out of 'b' as a raw interface{} and +// return the remaining bytes. +func ReadIntfBytes(b []byte) (i interface{}, o []byte, err error) { + if len(b) < 1 { + err = ErrShortBytes + return + } + + k := NextType(b) + + switch k { + case MapType: + i, o, err = ReadMapStrIntfBytes(b, nil) + return + + case ArrayType: + var sz uint32 + sz, o, err = ReadArrayHeaderBytes(b) + if err != nil { + return + } + j := make([]interface{}, int(sz)) + i = j + for d := range j { + j[d], o, err = ReadIntfBytes(o) + if err != nil { + return + } + } + return + + case Float32Type: + i, o, err = ReadFloat32Bytes(b) + return + + case Float64Type: + i, o, err = ReadFloat64Bytes(b) + return + + case IntType: + i, o, err = ReadInt64Bytes(b) + return + + case UintType: + i, o, err = ReadUint64Bytes(b) + return + + case BoolType: + i, o, err = ReadBoolBytes(b) + return + + case TimeType: + i, o, err = ReadTimeBytes(b) + return + + case Complex64Type: + i, o, err = ReadComplex64Bytes(b) + return + + case Complex128Type: + i, o, err = ReadComplex128Bytes(b) + return + + case ExtensionType: + var t int8 + t, err = peekExtension(b) + if err != nil { + return + } + // use a user-defined extension, + // if it's been registered + f, ok := extensionReg[t] + if ok { + e := f() + o, err = ReadExtensionBytes(b, e) + i = e + return + } + // last resort is a raw extension + e := RawExtension{} + e.Type = int8(t) + o, err = ReadExtensionBytes(b, &e) + i = &e + return + + case NilType: + o, err = ReadNilBytes(b) + return + + case BinType: + i, o, err = ReadBytesBytes(b, nil) + return + + case StrType: + i, o, err = ReadStringBytes(b) + return + + default: + err = InvalidPrefixError(b[0]) + return + } +} + +// Skip skips the next object in 'b' and +// returns the remaining bytes. If the object +// is a map or array, all of its elements +// will be skipped. +// Possible Errors: +// - ErrShortBytes (not enough bytes in b) +// - InvalidPrefixError (bad encoding) +func Skip(b []byte) ([]byte, error) { + sz, asz, err := getSize(b) + if err != nil { + return b, err + } + if uintptr(len(b)) < sz { + return b, ErrShortBytes + } + b = b[sz:] + for asz > 0 { + b, err = Skip(b) + if err != nil { + return b, err + } + asz-- + } + return b, nil +} + +// returns (skip N bytes, skip M objects, error) +func getSize(b []byte) (uintptr, uintptr, error) { + l := len(b) + if l == 0 { + return 0, 0, ErrShortBytes + } + lead := b[0] + spec := &sizes[lead] // get type information + size, mode := spec.size, spec.extra + if size == 0 { + return 0, 0, InvalidPrefixError(lead) + } + if mode >= 0 { // fixed composites + return uintptr(size), uintptr(mode), nil + } + if l < int(size) { + return 0, 0, ErrShortBytes + } + switch mode { + case extra8: + return uintptr(size) + uintptr(b[1]), 0, nil + case extra16: + return uintptr(size) + uintptr(big.Uint16(b[1:])), 0, nil + case extra32: + return uintptr(size) + uintptr(big.Uint32(b[1:])), 0, nil + case map16v: + return uintptr(size), 2 * uintptr(big.Uint16(b[1:])), nil + case map32v: + return uintptr(size), 2 * uintptr(big.Uint32(b[1:])), nil + case array16v: + return uintptr(size), uintptr(big.Uint16(b[1:])), nil + case array32v: + return uintptr(size), uintptr(big.Uint32(b[1:])), nil + default: + return 0, 0, fatal + } +} diff --git a/vendor/github.com/tinylib/msgp/msgp/read_bytes_test.go b/vendor/github.com/tinylib/msgp/msgp/read_bytes_test.go new file mode 100644 index 0000000..45af9f0 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/read_bytes_test.go @@ -0,0 +1,679 @@ +package msgp + +import ( + "bytes" + "fmt" + "log" + "math" + "reflect" + "testing" + "time" +) + +func TestReadMapHeaderBytes(t *testing.T) { + var buf bytes.Buffer + en := NewWriter(&buf) + + tests := []uint32{0, 1, 5, 49082} + + for i, v := range tests { + buf.Reset() + en.WriteMapHeader(v) + en.Flush() + + out, left, err := ReadMapHeaderBytes(buf.Bytes()) + if err != nil { + t.Errorf("test case %d: %s", i, err) + } + + if len(left) != 0 { + t.Errorf("expected 0 bytes left; found %d", len(left)) + } + + if out != v { + t.Errorf("%d in; %d out", v, out) + } + } +} + +func BenchmarkReadMapHeaderBytes(b *testing.B) { + sizes := []uint32{1, 100, tuint16, tuint32} + buf := make([]byte, 0, 5*len(sizes)) + for _, sz := range sizes { + buf = AppendMapHeader(buf, sz) + } + b.SetBytes(int64(len(buf) / len(sizes))) + b.ReportAllocs() + b.ResetTimer() + o := buf + for i := 0; i < b.N; i++ { + _, buf, _ = ReadMapHeaderBytes(buf) + if len(buf) == 0 { + buf = o + } + } +} + +func TestReadArrayHeaderBytes(t *testing.T) { + var buf bytes.Buffer + en := NewWriter(&buf) + + tests := []uint32{0, 1, 5, 49082} + + for i, v := range tests { + buf.Reset() + en.WriteArrayHeader(v) + en.Flush() + + out, left, err := ReadArrayHeaderBytes(buf.Bytes()) + if err != nil { + t.Errorf("test case %d: %s", i, err) + } + + if len(left) != 0 { + t.Errorf("expected 0 bytes left; found %d", len(left)) + } + + if out != v { + t.Errorf("%d in; %d out", v, out) + } + } +} + +func BenchmarkReadArrayHeaderBytes(b *testing.B) { + sizes := []uint32{1, 100, tuint16, tuint32} + buf := make([]byte, 0, 5*len(sizes)) + for _, sz := range sizes { + buf = AppendArrayHeader(buf, sz) + } + b.SetBytes(int64(len(buf) / len(sizes))) + b.ReportAllocs() + b.ResetTimer() + o := buf + for i := 0; i < b.N; i++ { + _, buf, _ = ReadArrayHeaderBytes(buf) + if len(buf) == 0 { + buf = o + } + } +} + +func TestReadNilBytes(t *testing.T) { + var buf bytes.Buffer + en := NewWriter(&buf) + en.WriteNil() + en.Flush() + + left, err := ReadNilBytes(buf.Bytes()) + if err != nil { + t.Fatal(err) + } + if len(left) != 0 { + t.Errorf("expected 0 bytes left; found %d", len(left)) + } +} + +func BenchmarkReadNilByte(b *testing.B) { + buf := []byte{mnil} + b.SetBytes(1) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + ReadNilBytes(buf) + } +} + +func TestReadFloat64Bytes(t *testing.T) { + var buf bytes.Buffer + en := NewWriter(&buf) + en.WriteFloat64(3.14159) + en.Flush() + + out, left, err := ReadFloat64Bytes(buf.Bytes()) + if err != nil { + t.Fatal(err) + } + if len(left) != 0 { + t.Errorf("expected 0 bytes left; found %d", len(left)) + } + if out != 3.14159 { + t.Errorf("%f in; %f out", 3.14159, out) + } +} + +func BenchmarkReadFloat64Bytes(b *testing.B) { + f := float64(3.14159) + buf := make([]byte, 0, 9) + buf = AppendFloat64(buf, f) + b.SetBytes(int64(len(buf))) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + ReadFloat64Bytes(buf) + } +} + +func TestReadFloat32Bytes(t *testing.T) { + var buf bytes.Buffer + en := NewWriter(&buf) + en.WriteFloat32(3.1) + en.Flush() + + out, left, err := ReadFloat32Bytes(buf.Bytes()) + if err != nil { + t.Fatal(err) + } + if len(left) != 0 { + t.Errorf("expected 0 bytes left; found %d", len(left)) + } + if out != 3.1 { + t.Errorf("%f in; %f out", 3.1, out) + } +} + +func BenchmarkReadFloat32Bytes(b *testing.B) { + f := float32(3.14159) + buf := make([]byte, 0, 5) + buf = AppendFloat32(buf, f) + b.SetBytes(int64(len(buf))) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + ReadFloat32Bytes(buf) + } +} + +func TestReadBoolBytes(t *testing.T) { + var buf bytes.Buffer + en := NewWriter(&buf) + + tests := []bool{true, false} + + for i, v := range tests { + buf.Reset() + en.WriteBool(v) + en.Flush() + out, left, err := ReadBoolBytes(buf.Bytes()) + + if err != nil { + t.Errorf("test case %d: %s", i, err) + } + + if len(left) != 0 { + t.Errorf("expected 0 bytes left; found %d", len(left)) + } + + if out != v { + t.Errorf("%t in; %t out", v, out) + } + } +} + +func BenchmarkReadBoolBytes(b *testing.B) { + buf := []byte{mtrue, mfalse, mtrue, mfalse} + b.SetBytes(1) + b.ReportAllocs() + b.ResetTimer() + o := buf + for i := 0; i < b.N; i++ { + _, buf, _ = ReadBoolBytes(buf) + if len(buf) == 0 { + buf = o + } + } +} + +func TestReadInt64Bytes(t *testing.T) { + var buf bytes.Buffer + wr := NewWriter(&buf) + + ints := []int64{-100000, -5000, -5, 0, 8, 240, int64(tuint16), int64(tuint32), int64(tuint64), + -5, -30, 0, 1, 127, 300, 40921, 34908219} + + uints := []uint64{0, 8, 240, uint64(tuint16), uint64(tuint32), uint64(tuint64)} + + all := make([]interface{}, 0, len(ints)+len(uints)) + for _, v := range ints { + all = append(all, v) + } + for _, v := range uints { + all = append(all, v) + } + + for i, num := range all { + buf.Reset() + var err error + + var in int64 + switch num := num.(type) { + case int64: + err = wr.WriteInt64(num) + in = num + case uint64: + err = wr.WriteUint64(num) + in = int64(num) + default: + panic(num) + } + if err != nil { + t.Fatal(err) + } + err = wr.Flush() + if err != nil { + t.Fatal(err) + } + + out, left, err := ReadInt64Bytes(buf.Bytes()) + if out != in { + t.Errorf("Test case %d: put %d in and got %d out", i, num, in) + } + if err != nil { + t.Errorf("test case %d: %s", i, err) + } + if len(left) != 0 { + t.Errorf("expected 0 bytes left; found %d", len(left)) + } + } +} + +func TestReadUint64Bytes(t *testing.T) { + var buf bytes.Buffer + wr := NewWriter(&buf) + + vs := []interface{}{ + int64(0), int64(8), int64(240), int64(tuint16), int64(tuint32), int64(tuint64), + uint64(0), uint64(8), uint64(240), uint64(tuint16), uint64(tuint32), uint64(tuint64), + uint64(math.MaxUint64), + } + + for i, num := range vs { + buf.Reset() + var err error + + var in uint64 + switch num := num.(type) { + case int64: + err = wr.WriteInt64(num) + in = uint64(num) + case uint64: + err = wr.WriteUint64(num) + in = (num) + default: + panic(num) + } + if err != nil { + t.Fatal(err) + } + err = wr.Flush() + if err != nil { + t.Fatal(err) + } + + out, left, err := ReadUint64Bytes(buf.Bytes()) + if out != in { + t.Errorf("Test case %d: put %d in and got %d out", i, num, in) + } + if err != nil { + t.Errorf("test case %d: %s", i, err) + } + if len(left) != 0 { + t.Errorf("expected 0 bytes left; found %d", len(left)) + } + } +} + +func TestReadIntBytesOverflows(t *testing.T) { + var buf bytes.Buffer + wr := NewWriter(&buf) + + i8, i16, i32, i64, u8, u16, u32, u64 := 1, 2, 3, 4, 5, 6, 7, 8 + + overflowErr := func(err error, failBits int) bool { + bits := 0 + switch err := err.(type) { + case IntOverflow: + bits = err.FailedBitsize + case UintOverflow: + bits = err.FailedBitsize + } + if bits == failBits { + return true + } + log.Println("bits mismatch", bits, failBits) + return false + } + + belowZeroErr := func(err error, failBits int) bool { + switch err.(type) { + case UintBelowZero: + return true + } + return false + } + + vs := []struct { + v interface{} + rdBits int + failBits int + errCheck func(err error, failBits int) bool + }{ + {uint64(math.MaxInt64), i32, 32, overflowErr}, + {uint64(math.MaxInt64), i16, 16, overflowErr}, + {uint64(math.MaxInt64), i8, 8, overflowErr}, + + {uint64(math.MaxUint64), i64, 64, overflowErr}, + {uint64(math.MaxUint64), i32, 64, overflowErr}, + {uint64(math.MaxUint64), i16, 64, overflowErr}, + {uint64(math.MaxUint64), i8, 64, overflowErr}, + + {uint64(math.MaxUint32), i32, 32, overflowErr}, + {uint64(math.MaxUint32), i16, 16, overflowErr}, + {uint64(math.MaxUint32), i8, 8, overflowErr}, + + {int64(math.MinInt64), u64, 64, belowZeroErr}, + {int64(math.MinInt64), u32, 64, belowZeroErr}, + {int64(math.MinInt64), u16, 64, belowZeroErr}, + {int64(math.MinInt64), u8, 64, belowZeroErr}, + {int64(math.MinInt32), u64, 64, belowZeroErr}, + {int64(math.MinInt32), u32, 32, belowZeroErr}, + {int64(math.MinInt32), u16, 16, belowZeroErr}, + {int64(math.MinInt32), u8, 8, belowZeroErr}, + {int64(math.MinInt16), u64, 64, belowZeroErr}, + {int64(math.MinInt16), u32, 32, belowZeroErr}, + {int64(math.MinInt16), u16, 16, belowZeroErr}, + {int64(math.MinInt16), u8, 8, belowZeroErr}, + {int64(math.MinInt8), u64, 64, belowZeroErr}, + {int64(math.MinInt8), u32, 32, belowZeroErr}, + {int64(math.MinInt8), u16, 16, belowZeroErr}, + {int64(math.MinInt8), u8, 8, belowZeroErr}, + {-1, u64, 64, belowZeroErr}, + {-1, u32, 32, belowZeroErr}, + {-1, u16, 16, belowZeroErr}, + {-1, u8, 8, belowZeroErr}, + } + + for i, v := range vs { + t.Run(fmt.Sprintf("%d", i), func(t *testing.T) { + buf.Reset() + switch num := v.v.(type) { + case int: + wr.WriteInt64(int64(num)) + case int64: + wr.WriteInt64(num) + case uint64: + wr.WriteUint64(num) + default: + panic(num) + } + wr.Flush() + + var err error + switch v.rdBits { + case i64: + _, _, err = ReadInt64Bytes(buf.Bytes()) + case i32: + _, _, err = ReadInt32Bytes(buf.Bytes()) + case i16: + _, _, err = ReadInt16Bytes(buf.Bytes()) + case i8: + _, _, err = ReadInt8Bytes(buf.Bytes()) + case u64: + _, _, err = ReadUint64Bytes(buf.Bytes()) + case u32: + _, _, err = ReadUint32Bytes(buf.Bytes()) + case u16: + _, _, err = ReadUint16Bytes(buf.Bytes()) + case u8: + _, _, err = ReadUint8Bytes(buf.Bytes()) + } + if !v.errCheck(err, v.failBits) { + t.Fatal(err) + } + }) + } +} + +func TestReadBytesBytes(t *testing.T) { + var buf bytes.Buffer + en := NewWriter(&buf) + + tests := [][]byte{[]byte{}, []byte("some bytes"), []byte("some more bytes")} + var scratch []byte + + for i, v := range tests { + buf.Reset() + en.WriteBytes(v) + en.Flush() + out, left, err := ReadBytesBytes(buf.Bytes(), scratch) + if err != nil { + t.Errorf("test case %d: %s", i, err) + } + if len(left) != 0 { + t.Errorf("expected 0 bytes left; found %d", len(left)) + } + if !bytes.Equal(out, v) { + t.Errorf("%q in; %q out", v, out) + } + } +} + +func TestReadZCBytes(t *testing.T) { + var buf bytes.Buffer + en := NewWriter(&buf) + + tests := [][]byte{[]byte{}, []byte("some bytes"), []byte("some more bytes")} + + for i, v := range tests { + buf.Reset() + en.WriteBytes(v) + en.Flush() + out, left, err := ReadBytesZC(buf.Bytes()) + if err != nil { + t.Errorf("test case %d: %s", i, err) + } + if len(left) != 0 { + t.Errorf("expected 0 bytes left; found %d", len(left)) + } + if !bytes.Equal(out, v) { + t.Errorf("%q in; %q out", v, out) + } + } +} + +func TestReadZCString(t *testing.T) { + var buf bytes.Buffer + en := NewWriter(&buf) + + tests := []string{"", "hello", "here's another string......"} + + for i, v := range tests { + buf.Reset() + en.WriteString(v) + en.Flush() + + out, left, err := ReadStringZC(buf.Bytes()) + if err != nil { + t.Errorf("test case %d: %s", i, err) + } + if len(left) != 0 { + t.Errorf("expected 0 bytes left; found %d", len(left)) + } + if string(out) != v { + t.Errorf("%q in; %q out", v, out) + } + } +} + +func TestReadStringBytes(t *testing.T) { + var buf bytes.Buffer + en := NewWriter(&buf) + + tests := []string{"", "hello", "here's another string......"} + + for i, v := range tests { + buf.Reset() + en.WriteString(v) + en.Flush() + + out, left, err := ReadStringBytes(buf.Bytes()) + if err != nil { + t.Errorf("test case %d: %s", i, err) + } + if len(left) != 0 { + t.Errorf("expected 0 bytes left; found %d", len(left)) + } + if out != v { + t.Errorf("%q in; %q out", v, out) + } + } +} + +func TestReadComplex128Bytes(t *testing.T) { + var buf bytes.Buffer + en := NewWriter(&buf) + + tests := []complex128{complex(0, 0), complex(12.8, 32.0)} + + for i, v := range tests { + buf.Reset() + en.WriteComplex128(v) + en.Flush() + + out, left, err := ReadComplex128Bytes(buf.Bytes()) + if err != nil { + t.Errorf("test case %d: %s", i, err) + } + if len(left) != 0 { + t.Errorf("expected 0 bytes left; found %d", len(left)) + } + if out != v { + t.Errorf("%f in; %f out", v, out) + } + } +} + +func TestReadComplex64Bytes(t *testing.T) { + var buf bytes.Buffer + en := NewWriter(&buf) + + tests := []complex64{complex(0, 0), complex(12.8, 32.0)} + + for i, v := range tests { + buf.Reset() + en.WriteComplex64(v) + en.Flush() + + out, left, err := ReadComplex64Bytes(buf.Bytes()) + if err != nil { + t.Errorf("test case %d: %s", i, err) + } + if len(left) != 0 { + t.Errorf("expected 0 bytes left; found %d", len(left)) + } + if out != v { + t.Errorf("%f in; %f out", v, out) + } + } +} + +func TestReadTimeBytes(t *testing.T) { + var buf bytes.Buffer + en := NewWriter(&buf) + + now := time.Now() + en.WriteTime(now) + en.Flush() + out, left, err := ReadTimeBytes(buf.Bytes()) + if err != nil { + t.Fatal(err) + } + + if len(left) != 0 { + t.Errorf("expected 0 bytes left; found %d", len(left)) + } + if !now.Equal(out) { + t.Errorf("%s in; %s out", now, out) + } +} + +func BenchmarkReadTimeBytes(b *testing.B) { + data := AppendTime(nil, time.Now()) + b.SetBytes(15) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + ReadTimeBytes(data) + } +} + +func TestReadIntfBytes(t *testing.T) { + var buf bytes.Buffer + en := NewWriter(&buf) + + tests := make([]interface{}, 0, 10) + tests = append(tests, float64(3.5)) + tests = append(tests, int64(-49082)) + tests = append(tests, uint64(34908)) + tests = append(tests, string("hello!")) + tests = append(tests, []byte("blah.")) + tests = append(tests, map[string]interface{}{ + "key_one": 3.5, + "key_two": "hi.", + }) + + for i, v := range tests { + buf.Reset() + if err := en.WriteIntf(v); err != nil { + t.Fatal(err) + } + en.Flush() + + out, left, err := ReadIntfBytes(buf.Bytes()) + if err != nil { + t.Errorf("test case %d: %s", i, err) + } + if len(left) != 0 { + t.Errorf("expected 0 bytes left; found %d", len(left)) + } + if !reflect.DeepEqual(v, out) { + t.Errorf("ReadIntf(): %v in; %v out", v, out) + } + } + +} + +func BenchmarkSkipBytes(b *testing.B) { + var buf bytes.Buffer + en := NewWriter(&buf) + en.WriteMapHeader(6) + + en.WriteString("thing_one") + en.WriteString("value_one") + + en.WriteString("thing_two") + en.WriteFloat64(3.14159) + + en.WriteString("some_bytes") + en.WriteBytes([]byte("nkl4321rqw908vxzpojnlk2314rqew098-s09123rdscasd")) + + en.WriteString("the_time") + en.WriteTime(time.Now()) + + en.WriteString("what?") + en.WriteBool(true) + + en.WriteString("ext") + en.WriteExtension(&RawExtension{Type: 55, Data: []byte("raw data!!!")}) + en.Flush() + + bts := buf.Bytes() + b.SetBytes(int64(len(bts))) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := Skip(bts) + if err != nil { + b.Fatal(err) + } + } +} diff --git a/vendor/github.com/tinylib/msgp/msgp/read_test.go b/vendor/github.com/tinylib/msgp/msgp/read_test.go new file mode 100644 index 0000000..b469c1b --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/read_test.go @@ -0,0 +1,937 @@ +package msgp + +import ( + "bytes" + "fmt" + "io" + "math" + "math/rand" + "reflect" + "testing" + "time" +) + +func TestSanity(t *testing.T) { + if !isfixint(0) { + t.Fatal("WUT.") + } +} + +func TestReadIntf(t *testing.T) { + // NOTE: if you include cases + // with, say, int32s, the test + // will fail, b/c integers are + // always read out as int64, and + // unsigned integers as uint64 + + var testCases = []interface{}{ + float64(128.032), + float32(9082.092), + int64(-40), + uint64(9082981), + time.Now(), + "hello!", + []byte("hello!"), + map[string]interface{}{ + "thing-1": "thing-1-value", + "thing-2": int64(800), + "thing-3": []byte("some inner bytes..."), + "thing-4": false, + }, + } + + var buf bytes.Buffer + var v interface{} + dec := NewReader(&buf) + enc := NewWriter(&buf) + + for i, ts := range testCases { + buf.Reset() + err := enc.WriteIntf(ts) + if err != nil { + t.Errorf("Test case %d: %s", i, err) + continue + } + err = enc.Flush() + if err != nil { + t.Fatal(err) + } + v, err = dec.ReadIntf() + if err != nil { + t.Errorf("Test case: %d: %s", i, err) + } + + /* for time, use time.Equal instead of reflect.DeepEqual */ + if tm, ok := v.(time.Time); ok { + if !tm.Equal(v.(time.Time)) { + t.Errorf("%v != %v", ts, v) + } + } else if !reflect.DeepEqual(v, ts) { + t.Errorf("%v in; %v out", ts, v) + } + } + +} + +func TestReadMapHeader(t *testing.T) { + tests := []struct { + Sz uint32 + }{ + {0}, + {1}, + {tuint16}, + {tuint32}, + } + + var buf bytes.Buffer + var sz uint32 + var err error + wr := NewWriter(&buf) + rd := NewReader(&buf) + for i, test := range tests { + buf.Reset() + err = wr.WriteMapHeader(test.Sz) + if err != nil { + t.Fatal(err) + } + err = wr.Flush() + if err != nil { + t.Fatal(err) + } + sz, err = rd.ReadMapHeader() + if err != nil { + t.Errorf("Test case %d: got error %s", i, err) + } + if sz != test.Sz { + t.Errorf("Test case %d: wrote size %d; got size %d", i, test.Sz, sz) + } + } +} + +func BenchmarkReadMapHeader(b *testing.B) { + sizes := []uint32{0, 1, tuint16, tuint32} + data := make([]byte, 0, len(sizes)*5) + for _, d := range sizes { + data = AppendMapHeader(data, d) + } + rd := NewReader(NewEndlessReader(data, b)) + b.SetBytes(int64(len(data) / len(sizes))) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + rd.ReadMapHeader() + } +} + +func TestReadArrayHeader(t *testing.T) { + tests := []struct { + Sz uint32 + }{ + {0}, + {1}, + {tuint16}, + {tuint32}, + } + + var buf bytes.Buffer + var sz uint32 + var err error + wr := NewWriter(&buf) + rd := NewReader(&buf) + for i, test := range tests { + buf.Reset() + err = wr.WriteArrayHeader(test.Sz) + if err != nil { + t.Fatal(err) + } + err = wr.Flush() + if err != nil { + t.Fatal(err) + } + sz, err = rd.ReadArrayHeader() + if err != nil { + t.Errorf("Test case %d: got error %s", i, err) + } + if sz != test.Sz { + t.Errorf("Test case %d: wrote size %d; got size %d", i, test.Sz, sz) + } + } +} + +func BenchmarkReadArrayHeader(b *testing.B) { + sizes := []uint32{0, 1, tuint16, tuint32} + data := make([]byte, 0, len(sizes)*5) + for _, d := range sizes { + data = AppendArrayHeader(data, d) + } + rd := NewReader(NewEndlessReader(data, b)) + b.ReportAllocs() + b.SetBytes(int64(len(data) / len(sizes))) + b.ResetTimer() + for i := 0; i < b.N; i++ { + rd.ReadArrayHeader() + } +} + +func TestReadNil(t *testing.T) { + var buf bytes.Buffer + wr := NewWriter(&buf) + rd := NewReader(&buf) + + wr.WriteNil() + wr.Flush() + err := rd.ReadNil() + if err != nil { + t.Fatal(err) + } +} + +func BenchmarkReadNil(b *testing.B) { + data := AppendNil(nil) + rd := NewReader(NewEndlessReader(data, b)) + b.ReportAllocs() + b.SetBytes(1) + b.ResetTimer() + for i := 0; i < b.N; i++ { + err := rd.ReadNil() + if err != nil { + b.Fatal(err) + } + } +} + +func TestReadFloat64(t *testing.T) { + var buf bytes.Buffer + wr := NewWriter(&buf) + rd := NewReader(&buf) + + for i := 0; i < 100; i++ { + buf.Reset() + + flt := (rand.Float64() - 0.5) * math.MaxFloat64 + err := wr.WriteFloat64(flt) + if err != nil { + t.Fatal(err) + } + err = wr.Flush() + if err != nil { + t.Fatal(err) + } + out, err := rd.ReadFloat64() + if err != nil { + t.Errorf("Error reading %f: %s", flt, err) + continue + } + + if out != flt { + t.Errorf("Put in %f but got out %f", flt, out) + } + } +} + +func BenchmarkReadFloat64(b *testing.B) { + fs := []float64{rand.Float64(), rand.Float64(), rand.Float64(), rand.Float64()} + data := make([]byte, 0, 9*len(fs)) + for _, f := range fs { + data = AppendFloat64(data, f) + } + rd := NewReader(NewEndlessReader(data, b)) + b.SetBytes(9) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := rd.ReadFloat64() + if err != nil { + b.Fatal(err) + } + } +} + +func TestReadFloat32(t *testing.T) { + var buf bytes.Buffer + wr := NewWriter(&buf) + rd := NewReader(&buf) + + for i := 0; i < 10000; i++ { + buf.Reset() + + flt := (rand.Float32() - 0.5) * math.MaxFloat32 + err := wr.WriteFloat32(flt) + if err != nil { + t.Fatal(err) + } + err = wr.Flush() + if err != nil { + t.Fatal(err) + } + out, err := rd.ReadFloat32() + if err != nil { + t.Errorf("Error reading %f: %s", flt, err) + continue + } + + if out != flt { + t.Errorf("Put in %f but got out %f", flt, out) + } + } +} + +func BenchmarkReadFloat32(b *testing.B) { + fs := []float32{rand.Float32(), rand.Float32(), rand.Float32(), rand.Float32()} + data := make([]byte, 0, 5*len(fs)) + for _, f := range fs { + data = AppendFloat32(data, f) + } + rd := NewReader(NewEndlessReader(data, b)) + b.SetBytes(5) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := rd.ReadFloat32() + if err != nil { + b.Fatal(err) + } + } +} + +func TestReadInt64(t *testing.T) { + var buf bytes.Buffer + wr := NewWriter(&buf) + rd := NewReader(&buf) + + ints := []int64{-100000, -5000, -5, 0, 8, 240, int64(tuint16), int64(tuint32), int64(tuint64)} + uints := []uint64{0, 8, 240, uint64(tuint16), uint64(tuint32), uint64(tuint64)} + + all := make([]interface{}, 0, len(ints)+len(uints)) + for _, v := range ints { + all = append(all, v) + } + for _, v := range uints { + all = append(all, v) + } + + for i, num := range all { + buf.Reset() + var err error + + var in int64 + switch num := num.(type) { + case int64: + err = wr.WriteInt64(num) + in = num + case uint64: + err = wr.WriteUint64(num) + in = int64(num) + default: + panic(num) + } + if err != nil { + t.Fatal(err) + } + err = wr.Flush() + if err != nil { + t.Fatal(err) + } + out, err := rd.ReadInt64() + if err != nil { + t.Fatal(err) + } + if out != in { + t.Errorf("Test case %d: put %d in and got %d out", i, num, in) + } + } +} + +func TestReadIntOverflows(t *testing.T) { + var buf bytes.Buffer + wr := NewWriter(&buf) + rd := NewReader(&buf) + + i8, i16, i32, i64, u8, u16, u32, u64 := 1, 2, 3, 4, 5, 6, 7, 8 + + overflowErr := func(err error, failBits int) bool { + bits := 0 + switch err := err.(type) { + case IntOverflow: + bits = err.FailedBitsize + case UintOverflow: + bits = err.FailedBitsize + } + if bits == failBits { + return true + } + return false + } + + belowZeroErr := func(err error, failBits int) bool { + switch err.(type) { + case UintBelowZero: + return true + } + return false + } + + vs := []struct { + v interface{} + rdBits int + failBits int + errCheck func(err error, failBits int) bool + }{ + {uint64(math.MaxInt64), i32, 32, overflowErr}, + {uint64(math.MaxInt64), i16, 16, overflowErr}, + {uint64(math.MaxInt64), i8, 8, overflowErr}, + + {uint64(math.MaxUint64), i64, 64, overflowErr}, + {uint64(math.MaxUint64), i32, 64, overflowErr}, + {uint64(math.MaxUint64), i16, 64, overflowErr}, + {uint64(math.MaxUint64), i8, 64, overflowErr}, + + {uint64(math.MaxUint32), i32, 32, overflowErr}, + {uint64(math.MaxUint32), i16, 16, overflowErr}, + {uint64(math.MaxUint32), i8, 8, overflowErr}, + + {int64(math.MinInt64), u64, 64, belowZeroErr}, + {int64(math.MinInt64), u32, 64, belowZeroErr}, + {int64(math.MinInt64), u16, 64, belowZeroErr}, + {int64(math.MinInt64), u8, 64, belowZeroErr}, + {int64(math.MinInt32), u64, 64, belowZeroErr}, + {int64(math.MinInt32), u32, 32, belowZeroErr}, + {int64(math.MinInt32), u16, 16, belowZeroErr}, + {int64(math.MinInt32), u8, 8, belowZeroErr}, + {int64(math.MinInt16), u64, 64, belowZeroErr}, + {int64(math.MinInt16), u32, 32, belowZeroErr}, + {int64(math.MinInt16), u16, 16, belowZeroErr}, + {int64(math.MinInt16), u8, 8, belowZeroErr}, + {int64(math.MinInt8), u64, 64, belowZeroErr}, + {int64(math.MinInt8), u32, 32, belowZeroErr}, + {int64(math.MinInt8), u16, 16, belowZeroErr}, + {int64(math.MinInt8), u8, 8, belowZeroErr}, + {-1, u64, 64, belowZeroErr}, + {-1, u32, 32, belowZeroErr}, + {-1, u16, 16, belowZeroErr}, + {-1, u8, 8, belowZeroErr}, + } + + for i, v := range vs { + t.Run(fmt.Sprintf("%d", i), func(t *testing.T) { + switch num := v.v.(type) { + case int: + wr.WriteInt64(int64(num)) + case int64: + wr.WriteInt64(num) + case uint64: + wr.WriteUint64(num) + default: + panic(num) + } + wr.Flush() + + var err error + switch v.rdBits { + case i64: + _, err = rd.ReadInt64() + case i32: + _, err = rd.ReadInt32() + case i16: + _, err = rd.ReadInt16() + case i8: + _, err = rd.ReadInt8() + case u64: + _, err = rd.ReadUint64() + case u32: + _, err = rd.ReadUint32() + case u16: + _, err = rd.ReadUint16() + case u8: + _, err = rd.ReadUint8() + } + if !v.errCheck(err, v.failBits) { + t.Fatal(err) + } + }) + } +} + +func BenchmarkReadInt64(b *testing.B) { + is := []int64{0, 1, 65000, rand.Int63()} + data := make([]byte, 0, 9*len(is)) + for _, n := range is { + data = AppendInt64(data, n) + } + rd := NewReader(NewEndlessReader(data, b)) + b.SetBytes(int64(len(data) / len(is))) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := rd.ReadInt64() + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkReadUintWithInt64(b *testing.B) { + us := []uint64{0, 1, 10000, uint64(rand.Uint32() * 4)} + data := make([]byte, 0, 9*len(us)) + for _, n := range us { + data = AppendUint64(data, n) + } + rd := NewReader(NewEndlessReader(data, b)) + b.SetBytes(int64(len(data) / len(us))) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := rd.ReadInt64() + if err != nil { + b.Fatal(err) + } + } +} + +func TestReadUint64(t *testing.T) { + var buf bytes.Buffer + wr := NewWriter(&buf) + rd := NewReader(&buf) + + ints := []uint64{0, 8, 240, uint64(tuint16), uint64(tuint32), uint64(tuint64)} + + for i, num := range ints { + buf.Reset() + + err := wr.WriteUint64(num) + if err != nil { + t.Fatal(err) + } + err = wr.Flush() + if err != nil { + t.Fatal(err) + } + out, err := rd.ReadUint64() + if out != num { + t.Errorf("Test case %d: put %d in and got %d out", i, num, out) + } + } +} + +func BenchmarkReadUint64(b *testing.B) { + us := []uint64{0, 1, 10000, uint64(rand.Uint32() * 4)} + data := make([]byte, 0, 9*len(us)) + for _, n := range us { + data = AppendUint64(data, n) + } + rd := NewReader(NewEndlessReader(data, b)) + b.SetBytes(int64(len(data) / len(us))) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := rd.ReadUint64() + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkReadIntWithUint64(b *testing.B) { + is := []int64{0, 1, 65000, rand.Int63()} + data := make([]byte, 0, 9*len(is)) + for _, n := range is { + data = AppendInt64(data, n) + } + rd := NewReader(NewEndlessReader(data, b)) + b.SetBytes(int64(len(data) / len(is))) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := rd.ReadUint64() + if err != nil { + b.Fatal(err) + } + } +} + +func TestReadBytes(t *testing.T) { + var buf bytes.Buffer + wr := NewWriter(&buf) + rd := NewReader(&buf) + + sizes := []int{0, 1, 225, int(tuint32)} + var scratch []byte + for i, size := range sizes { + buf.Reset() + bts := RandBytes(size) + + err := wr.WriteBytes(bts) + if err != nil { + t.Fatal(err) + } + err = wr.Flush() + if err != nil { + t.Fatal(err) + } + + out, err := rd.ReadBytes(scratch) + if err != nil { + t.Errorf("test case %d: %s", i, err) + continue + } + + if !bytes.Equal(bts, out) { + t.Errorf("test case %d: Bytes not equal.", i) + } + + } +} + +func benchBytes(size uint32, b *testing.B) { + data := make([]byte, 0, size+5) + data = AppendBytes(data, RandBytes(int(size))) + + rd := NewReader(NewEndlessReader(data, b)) + b.SetBytes(int64(len(data))) + b.ReportAllocs() + b.ResetTimer() + var scratch []byte + var err error + for i := 0; i < b.N; i++ { + scratch, err = rd.ReadBytes(scratch) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkRead16Bytes(b *testing.B) { + benchBytes(16, b) +} + +func BenchmarkRead256Bytes(b *testing.B) { + benchBytes(256, b) +} + +// This particular case creates +// an object larger than the default +// read buffer size, so it's a decent +// indicator of worst-case performance. +func BenchmarkRead2048Bytes(b *testing.B) { + benchBytes(2048, b) +} + +func TestReadString(t *testing.T) { + var buf bytes.Buffer + wr := NewWriter(&buf) + rd := NewReader(&buf) + + sizes := []int{0, 1, 225, int(math.MaxUint16 + 5)} + for i, size := range sizes { + buf.Reset() + in := string(RandBytes(size)) + + err := wr.WriteString(in) + if err != nil { + t.Fatal(err) + } + err = wr.Flush() + if err != nil { + t.Fatal(err) + } + + out, err := rd.ReadString() + if err != nil { + t.Errorf("test case %d: %s", i, err) + } + if out != in { + t.Errorf("test case %d: strings not equal.", i) + t.Errorf("string (len = %d) in; string (len = %d) out", size, len(out)) + } + + } +} + +func benchString(size uint32, b *testing.B) { + str := string(RandBytes(int(size))) + data := make([]byte, 0, len(str)+5) + data = AppendString(data, str) + rd := NewReader(NewEndlessReader(data, b)) + b.SetBytes(int64(len(data))) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := rd.ReadString() + if err != nil { + b.Fatal(err) + } + } +} + +func benchStringAsBytes(size uint32, b *testing.B) { + str := string(RandBytes(int(size))) + data := make([]byte, 0, len(str)+5) + data = AppendString(data, str) + rd := NewReader(NewEndlessReader(data, b)) + b.SetBytes(int64(len(data))) + b.ReportAllocs() + b.ResetTimer() + var scratch []byte + var err error + for i := 0; i < b.N; i++ { + scratch, err = rd.ReadStringAsBytes(scratch) + if err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkRead16StringAsBytes(b *testing.B) { + benchStringAsBytes(16, b) +} + +func BenchmarkRead256StringAsBytes(b *testing.B) { + benchStringAsBytes(256, b) +} + +func BenchmarkRead16String(b *testing.B) { + benchString(16, b) +} + +func BenchmarkRead256String(b *testing.B) { + benchString(256, b) +} + +func TestReadComplex64(t *testing.T) { + var buf bytes.Buffer + wr := NewWriter(&buf) + rd := NewReader(&buf) + + for i := 0; i < 100; i++ { + buf.Reset() + f := complex(rand.Float32()*math.MaxFloat32, rand.Float32()*math.MaxFloat32) + + wr.WriteComplex64(f) + err := wr.Flush() + if err != nil { + t.Fatal(err) + } + + out, err := rd.ReadComplex64() + if err != nil { + t.Error(err) + continue + } + + if out != f { + t.Errorf("Wrote %f; read %f", f, out) + } + + } +} + +func BenchmarkReadComplex64(b *testing.B) { + f := complex(rand.Float32(), rand.Float32()) + data := AppendComplex64(nil, f) + rd := NewReader(NewEndlessReader(data, b)) + b.SetBytes(int64(len(data))) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := rd.ReadComplex64() + if err != nil { + b.Fatal(err) + } + } +} + +func TestReadComplex128(t *testing.T) { + var buf bytes.Buffer + wr := NewWriter(&buf) + rd := NewReader(&buf) + + for i := 0; i < 10; i++ { + buf.Reset() + f := complex(rand.Float64()*math.MaxFloat64, rand.Float64()*math.MaxFloat64) + + wr.WriteComplex128(f) + err := wr.Flush() + if err != nil { + t.Fatal(err) + } + + out, err := rd.ReadComplex128() + if err != nil { + t.Error(err) + continue + } + if out != f { + t.Errorf("Wrote %f; read %f", f, out) + } + + } +} + +func BenchmarkReadComplex128(b *testing.B) { + f := complex(rand.Float64(), rand.Float64()) + data := AppendComplex128(nil, f) + rd := NewReader(NewEndlessReader(data, b)) + b.SetBytes(int64(len(data))) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := rd.ReadComplex128() + if err != nil { + b.Fatal(err) + } + } +} + +func TestTime(t *testing.T) { + var buf bytes.Buffer + now := time.Now() + en := NewWriter(&buf) + dc := NewReader(&buf) + + err := en.WriteTime(now) + if err != nil { + t.Fatal(err) + } + err = en.Flush() + if err != nil { + t.Fatal(err) + } + + out, err := dc.ReadTime() + if err != nil { + t.Fatal(err) + } + + // check for equivalence + if !now.Equal(out) { + t.Fatalf("%s in; %s out", now, out) + } +} + +func BenchmarkReadTime(b *testing.B) { + t := time.Now() + data := AppendTime(nil, t) + rd := NewReader(NewEndlessReader(data, b)) + b.SetBytes(int64(len(data))) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := rd.ReadTime() + if err != nil { + b.Fatal(err) + } + } +} + +func TestSkip(t *testing.T) { + var buf bytes.Buffer + wr := NewWriter(&buf) + rd := NewReader(&buf) + + wr.WriteMapHeader(4) + wr.WriteString("key_1") + wr.WriteBytes([]byte("value_1")) + wr.WriteString("key_2") + wr.WriteFloat64(2.0) + wr.WriteString("key_3") + wr.WriteComplex128(3.0i) + wr.WriteString("key_4") + wr.WriteInt64(49080432189) + wr.Flush() + + // this should skip the whole map + err := rd.Skip() + if err != nil { + t.Fatal(err) + } + + tp, err := rd.NextType() + if err != io.EOF { + t.Errorf("expected %q; got %q", io.EOF, err) + t.Errorf("returned type %q", tp) + } + +} + +func BenchmarkSkip(b *testing.B) { + var buf bytes.Buffer + en := NewWriter(&buf) + en.WriteMapHeader(6) + + en.WriteString("thing_one") + en.WriteString("value_one") + + en.WriteString("thing_two") + en.WriteFloat64(3.14159) + + en.WriteString("some_bytes") + en.WriteBytes([]byte("nkl4321rqw908vxzpojnlk2314rqew098-s09123rdscasd")) + + en.WriteString("the_time") + en.WriteTime(time.Now()) + + en.WriteString("what?") + en.WriteBool(true) + + en.WriteString("ext") + en.WriteExtension(&RawExtension{Type: 55, Data: []byte("raw data!!!")}) + en.Flush() + + bts := buf.Bytes() + b.SetBytes(int64(len(bts))) + b.ReportAllocs() + b.ResetTimer() + + rd := NewReader(NewEndlessReader(bts, b)) + for i := 0; i < b.N; i++ { + err := rd.Skip() + if err != nil { + b.Fatal(err) + } + } +} + +func TestCopyNext(t *testing.T) { + var buf bytes.Buffer + en := NewWriter(&buf) + + en.WriteMapHeader(6) + + en.WriteString("thing_one") + en.WriteString("value_one") + + en.WriteString("thing_two") + en.WriteFloat64(3.14159) + + en.WriteString("some_bytes") + en.WriteBytes([]byte("nkl4321rqw908vxzpojnlk2314rqew098-s09123rdscasd")) + + en.WriteString("the_time") + en.WriteTime(time.Now()) + + en.WriteString("what?") + en.WriteBool(true) + + en.WriteString("ext") + en.WriteExtension(&RawExtension{Type: 55, Data: []byte("raw data!!!")}) + + en.Flush() + + // Read from a copy of the original buf. + de := NewReader(bytes.NewReader(buf.Bytes())) + + w := new(bytes.Buffer) + + n, err := de.CopyNext(w) + if err != nil { + t.Fatal(err) + } + if n != int64(buf.Len()) { + t.Fatalf("CopyNext returned the wrong value (%d != %d)", + n, buf.Len()) + } + + if !bytes.Equal(buf.Bytes(), w.Bytes()) { + t.Fatalf("not equal! %v, %v", buf.Bytes(), w.Bytes()) + } +} diff --git a/vendor/github.com/tinylib/msgp/msgp/size.go b/vendor/github.com/tinylib/msgp/msgp/size.go new file mode 100644 index 0000000..ce2f8b1 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/size.go @@ -0,0 +1,38 @@ +package msgp + +// The sizes provided +// are the worst-case +// encoded sizes for +// each type. For variable- +// length types ([]byte, string), +// the total encoded size is +// the prefix size plus the +// length of the object. +const ( + Int64Size = 9 + IntSize = Int64Size + UintSize = Int64Size + Int8Size = 2 + Int16Size = 3 + Int32Size = 5 + Uint8Size = 2 + ByteSize = Uint8Size + Uint16Size = 3 + Uint32Size = 5 + Uint64Size = Int64Size + Float64Size = 9 + Float32Size = 5 + Complex64Size = 10 + Complex128Size = 18 + + TimeSize = 15 + BoolSize = 1 + NilSize = 1 + + MapHeaderSize = 5 + ArrayHeaderSize = 5 + + BytesPrefixSize = 5 + StringPrefixSize = 5 + ExtensionPrefixSize = 6 +) diff --git a/vendor/github.com/tinylib/msgp/msgp/unsafe.go b/vendor/github.com/tinylib/msgp/msgp/unsafe.go new file mode 100644 index 0000000..3978b6f --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/unsafe.go @@ -0,0 +1,41 @@ +// +build !purego,!appengine + +package msgp + +import ( + "reflect" + "unsafe" +) + +// NOTE: +// all of the definition in this file +// should be repeated in appengine.go, +// but without using unsafe + +const ( + // spec says int and uint are always + // the same size, but that int/uint + // size may not be machine word size + smallint = unsafe.Sizeof(int(0)) == 4 +) + +// UnsafeString returns the byte slice as a volatile string +// THIS SHOULD ONLY BE USED BY THE CODE GENERATOR. +// THIS IS EVIL CODE. +// YOU HAVE BEEN WARNED. +func UnsafeString(b []byte) string { + sh := (*reflect.SliceHeader)(unsafe.Pointer(&b)) + return *(*string)(unsafe.Pointer(&reflect.StringHeader{Data: sh.Data, Len: sh.Len})) +} + +// UnsafeBytes returns the string as a byte slice +// THIS SHOULD ONLY BE USED BY THE CODE GENERATOR. +// THIS IS EVIL CODE. +// YOU HAVE BEEN WARNED. +func UnsafeBytes(s string) []byte { + return *(*[]byte)(unsafe.Pointer(&reflect.SliceHeader{ + Len: len(s), + Cap: len(s), + Data: (*(*reflect.StringHeader)(unsafe.Pointer(&s))).Data, + })) +} diff --git a/vendor/github.com/tinylib/msgp/msgp/write.go b/vendor/github.com/tinylib/msgp/msgp/write.go new file mode 100644 index 0000000..da9099c --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/write.go @@ -0,0 +1,845 @@ +package msgp + +import ( + "errors" + "fmt" + "io" + "math" + "reflect" + "sync" + "time" +) + +// Sizer is an interface implemented +// by types that can estimate their +// size when MessagePack encoded. +// This interface is optional, but +// encoding/marshaling implementations +// may use this as a way to pre-allocate +// memory for serialization. +type Sizer interface { + Msgsize() int +} + +var ( + // Nowhere is an io.Writer to nowhere + Nowhere io.Writer = nwhere{} + + btsType = reflect.TypeOf(([]byte)(nil)) + writerPool = sync.Pool{ + New: func() interface{} { + return &Writer{buf: make([]byte, 2048)} + }, + } +) + +func popWriter(w io.Writer) *Writer { + wr := writerPool.Get().(*Writer) + wr.Reset(w) + return wr +} + +func pushWriter(wr *Writer) { + wr.w = nil + wr.wloc = 0 + writerPool.Put(wr) +} + +// freeW frees a writer for use +// by other processes. It is not necessary +// to call freeW on a writer. However, maintaining +// a reference to a *Writer after calling freeW on +// it will cause undefined behavior. +func freeW(w *Writer) { pushWriter(w) } + +// Require ensures that cap(old)-len(old) >= extra. +func Require(old []byte, extra int) []byte { + l := len(old) + c := cap(old) + r := l + extra + if c >= r { + return old + } else if l == 0 { + return make([]byte, 0, extra) + } + // the new size is the greater + // of double the old capacity + // and the sum of the old length + // and the number of new bytes + // necessary. + c <<= 1 + if c < r { + c = r + } + n := make([]byte, l, c) + copy(n, old) + return n +} + +// nowhere writer +type nwhere struct{} + +func (n nwhere) Write(p []byte) (int, error) { return len(p), nil } + +// Marshaler is the interface implemented +// by types that know how to marshal themselves +// as MessagePack. MarshalMsg appends the marshalled +// form of the object to the provided +// byte slice, returning the extended +// slice and any errors encountered. +type Marshaler interface { + MarshalMsg([]byte) ([]byte, error) +} + +// Encodable is the interface implemented +// by types that know how to write themselves +// as MessagePack using a *msgp.Writer. +type Encodable interface { + EncodeMsg(*Writer) error +} + +// Writer is a buffered writer +// that can be used to write +// MessagePack objects to an io.Writer. +// You must call *Writer.Flush() in order +// to flush all of the buffered data +// to the underlying writer. +type Writer struct { + w io.Writer + buf []byte + wloc int +} + +// NewWriter returns a new *Writer. +func NewWriter(w io.Writer) *Writer { + if wr, ok := w.(*Writer); ok { + return wr + } + return popWriter(w) +} + +// NewWriterSize returns a writer with a custom buffer size. +func NewWriterSize(w io.Writer, sz int) *Writer { + // we must be able to require() 18 + // contiguous bytes, so that is the + // practical minimum buffer size + if sz < 18 { + sz = 18 + } + + return &Writer{ + w: w, + buf: make([]byte, sz), + } +} + +// Encode encodes an Encodable to an io.Writer. +func Encode(w io.Writer, e Encodable) error { + wr := NewWriter(w) + err := e.EncodeMsg(wr) + if err == nil { + err = wr.Flush() + } + freeW(wr) + return err +} + +func (mw *Writer) flush() error { + if mw.wloc == 0 { + return nil + } + n, err := mw.w.Write(mw.buf[:mw.wloc]) + if err != nil { + if n > 0 { + mw.wloc = copy(mw.buf, mw.buf[n:mw.wloc]) + } + return err + } + mw.wloc = 0 + return nil +} + +// Flush flushes all of the buffered +// data to the underlying writer. +func (mw *Writer) Flush() error { return mw.flush() } + +// Buffered returns the number bytes in the write buffer +func (mw *Writer) Buffered() int { return len(mw.buf) - mw.wloc } + +func (mw *Writer) avail() int { return len(mw.buf) - mw.wloc } + +func (mw *Writer) bufsize() int { return len(mw.buf) } + +// NOTE: this should only be called with +// a number that is guaranteed to be less than +// len(mw.buf). typically, it is called with a constant. +// +// NOTE: this is a hot code path +func (mw *Writer) require(n int) (int, error) { + c := len(mw.buf) + wl := mw.wloc + if c-wl < n { + if err := mw.flush(); err != nil { + return 0, err + } + wl = mw.wloc + } + mw.wloc += n + return wl, nil +} + +func (mw *Writer) Append(b ...byte) error { + if mw.avail() < len(b) { + err := mw.flush() + if err != nil { + return err + } + } + mw.wloc += copy(mw.buf[mw.wloc:], b) + return nil +} + +// push one byte onto the buffer +// +// NOTE: this is a hot code path +func (mw *Writer) push(b byte) error { + if mw.wloc == len(mw.buf) { + if err := mw.flush(); err != nil { + return err + } + } + mw.buf[mw.wloc] = b + mw.wloc++ + return nil +} + +func (mw *Writer) prefix8(b byte, u uint8) error { + const need = 2 + if len(mw.buf)-mw.wloc < need { + if err := mw.flush(); err != nil { + return err + } + } + prefixu8(mw.buf[mw.wloc:], b, u) + mw.wloc += need + return nil +} + +func (mw *Writer) prefix16(b byte, u uint16) error { + const need = 3 + if len(mw.buf)-mw.wloc < need { + if err := mw.flush(); err != nil { + return err + } + } + prefixu16(mw.buf[mw.wloc:], b, u) + mw.wloc += need + return nil +} + +func (mw *Writer) prefix32(b byte, u uint32) error { + const need = 5 + if len(mw.buf)-mw.wloc < need { + if err := mw.flush(); err != nil { + return err + } + } + prefixu32(mw.buf[mw.wloc:], b, u) + mw.wloc += need + return nil +} + +func (mw *Writer) prefix64(b byte, u uint64) error { + const need = 9 + if len(mw.buf)-mw.wloc < need { + if err := mw.flush(); err != nil { + return err + } + } + prefixu64(mw.buf[mw.wloc:], b, u) + mw.wloc += need + return nil +} + +// Write implements io.Writer, and writes +// data directly to the buffer. +func (mw *Writer) Write(p []byte) (int, error) { + l := len(p) + if mw.avail() < l { + if err := mw.flush(); err != nil { + return 0, err + } + if l > len(mw.buf) { + return mw.w.Write(p) + } + } + mw.wloc += copy(mw.buf[mw.wloc:], p) + return l, nil +} + +// implements io.WriteString +func (mw *Writer) writeString(s string) error { + l := len(s) + if mw.avail() < l { + if err := mw.flush(); err != nil { + return err + } + if l > len(mw.buf) { + _, err := io.WriteString(mw.w, s) + return err + } + } + mw.wloc += copy(mw.buf[mw.wloc:], s) + return nil +} + +// Reset changes the underlying writer used by the Writer +func (mw *Writer) Reset(w io.Writer) { + mw.buf = mw.buf[:cap(mw.buf)] + mw.w = w + mw.wloc = 0 +} + +// WriteMapHeader writes a map header of the given +// size to the writer +func (mw *Writer) WriteMapHeader(sz uint32) error { + switch { + case sz <= 15: + return mw.push(wfixmap(uint8(sz))) + case sz <= math.MaxUint16: + return mw.prefix16(mmap16, uint16(sz)) + default: + return mw.prefix32(mmap32, sz) + } +} + +// WriteArrayHeader writes an array header of the +// given size to the writer +func (mw *Writer) WriteArrayHeader(sz uint32) error { + switch { + case sz <= 15: + return mw.push(wfixarray(uint8(sz))) + case sz <= math.MaxUint16: + return mw.prefix16(marray16, uint16(sz)) + default: + return mw.prefix32(marray32, sz) + } +} + +// WriteNil writes a nil byte to the buffer +func (mw *Writer) WriteNil() error { + return mw.push(mnil) +} + +// WriteFloat64 writes a float64 to the writer +func (mw *Writer) WriteFloat64(f float64) error { + return mw.prefix64(mfloat64, math.Float64bits(f)) +} + +// WriteFloat32 writes a float32 to the writer +func (mw *Writer) WriteFloat32(f float32) error { + return mw.prefix32(mfloat32, math.Float32bits(f)) +} + +// WriteInt64 writes an int64 to the writer +func (mw *Writer) WriteInt64(i int64) error { + if i >= 0 { + switch { + case i <= math.MaxInt8: + return mw.push(wfixint(uint8(i))) + case i <= math.MaxInt16: + return mw.prefix16(mint16, uint16(i)) + case i <= math.MaxInt32: + return mw.prefix32(mint32, uint32(i)) + default: + return mw.prefix64(mint64, uint64(i)) + } + } + switch { + case i >= -32: + return mw.push(wnfixint(int8(i))) + case i >= math.MinInt8: + return mw.prefix8(mint8, uint8(i)) + case i >= math.MinInt16: + return mw.prefix16(mint16, uint16(i)) + case i >= math.MinInt32: + return mw.prefix32(mint32, uint32(i)) + default: + return mw.prefix64(mint64, uint64(i)) + } +} + +// WriteInt8 writes an int8 to the writer +func (mw *Writer) WriteInt8(i int8) error { return mw.WriteInt64(int64(i)) } + +// WriteInt16 writes an int16 to the writer +func (mw *Writer) WriteInt16(i int16) error { return mw.WriteInt64(int64(i)) } + +// WriteInt32 writes an int32 to the writer +func (mw *Writer) WriteInt32(i int32) error { return mw.WriteInt64(int64(i)) } + +// WriteInt writes an int to the writer +func (mw *Writer) WriteInt(i int) error { return mw.WriteInt64(int64(i)) } + +// WriteUint64 writes a uint64 to the writer +func (mw *Writer) WriteUint64(u uint64) error { + switch { + case u <= (1<<7)-1: + return mw.push(wfixint(uint8(u))) + case u <= math.MaxUint8: + return mw.prefix8(muint8, uint8(u)) + case u <= math.MaxUint16: + return mw.prefix16(muint16, uint16(u)) + case u <= math.MaxUint32: + return mw.prefix32(muint32, uint32(u)) + default: + return mw.prefix64(muint64, u) + } +} + +// WriteByte is analogous to WriteUint8 +func (mw *Writer) WriteByte(u byte) error { return mw.WriteUint8(uint8(u)) } + +// WriteUint8 writes a uint8 to the writer +func (mw *Writer) WriteUint8(u uint8) error { return mw.WriteUint64(uint64(u)) } + +// WriteUint16 writes a uint16 to the writer +func (mw *Writer) WriteUint16(u uint16) error { return mw.WriteUint64(uint64(u)) } + +// WriteUint32 writes a uint32 to the writer +func (mw *Writer) WriteUint32(u uint32) error { return mw.WriteUint64(uint64(u)) } + +// WriteUint writes a uint to the writer +func (mw *Writer) WriteUint(u uint) error { return mw.WriteUint64(uint64(u)) } + +// WriteBytes writes binary as 'bin' to the writer +func (mw *Writer) WriteBytes(b []byte) error { + sz := uint32(len(b)) + var err error + switch { + case sz <= math.MaxUint8: + err = mw.prefix8(mbin8, uint8(sz)) + case sz <= math.MaxUint16: + err = mw.prefix16(mbin16, uint16(sz)) + default: + err = mw.prefix32(mbin32, sz) + } + if err != nil { + return err + } + _, err = mw.Write(b) + return err +} + +// WriteBytesHeader writes just the size header +// of a MessagePack 'bin' object. The user is responsible +// for then writing 'sz' more bytes into the stream. +func (mw *Writer) WriteBytesHeader(sz uint32) error { + switch { + case sz <= math.MaxUint8: + return mw.prefix8(mbin8, uint8(sz)) + case sz <= math.MaxUint16: + return mw.prefix16(mbin16, uint16(sz)) + default: + return mw.prefix32(mbin32, sz) + } +} + +// WriteBool writes a bool to the writer +func (mw *Writer) WriteBool(b bool) error { + if b { + return mw.push(mtrue) + } + return mw.push(mfalse) +} + +// WriteString writes a messagepack string to the writer. +// (This is NOT an implementation of io.StringWriter) +func (mw *Writer) WriteString(s string) error { + sz := uint32(len(s)) + var err error + switch { + case sz <= 31: + err = mw.push(wfixstr(uint8(sz))) + case sz <= math.MaxUint8: + err = mw.prefix8(mstr8, uint8(sz)) + case sz <= math.MaxUint16: + err = mw.prefix16(mstr16, uint16(sz)) + default: + err = mw.prefix32(mstr32, sz) + } + if err != nil { + return err + } + return mw.writeString(s) +} + +// WriteStringHeader writes just the string size +// header of a MessagePack 'str' object. The user +// is responsible for writing 'sz' more valid UTF-8 +// bytes to the stream. +func (mw *Writer) WriteStringHeader(sz uint32) error { + switch { + case sz <= 31: + return mw.push(wfixstr(uint8(sz))) + case sz <= math.MaxUint8: + return mw.prefix8(mstr8, uint8(sz)) + case sz <= math.MaxUint16: + return mw.prefix16(mstr16, uint16(sz)) + default: + return mw.prefix32(mstr32, sz) + } +} + +// WriteStringFromBytes writes a 'str' object +// from a []byte. +func (mw *Writer) WriteStringFromBytes(str []byte) error { + sz := uint32(len(str)) + var err error + switch { + case sz <= 31: + err = mw.push(wfixstr(uint8(sz))) + case sz <= math.MaxUint8: + err = mw.prefix8(mstr8, uint8(sz)) + case sz <= math.MaxUint16: + err = mw.prefix16(mstr16, uint16(sz)) + default: + err = mw.prefix32(mstr32, sz) + } + if err != nil { + return err + } + _, err = mw.Write(str) + return err +} + +// WriteComplex64 writes a complex64 to the writer +func (mw *Writer) WriteComplex64(f complex64) error { + o, err := mw.require(10) + if err != nil { + return err + } + mw.buf[o] = mfixext8 + mw.buf[o+1] = Complex64Extension + big.PutUint32(mw.buf[o+2:], math.Float32bits(real(f))) + big.PutUint32(mw.buf[o+6:], math.Float32bits(imag(f))) + return nil +} + +// WriteComplex128 writes a complex128 to the writer +func (mw *Writer) WriteComplex128(f complex128) error { + o, err := mw.require(18) + if err != nil { + return err + } + mw.buf[o] = mfixext16 + mw.buf[o+1] = Complex128Extension + big.PutUint64(mw.buf[o+2:], math.Float64bits(real(f))) + big.PutUint64(mw.buf[o+10:], math.Float64bits(imag(f))) + return nil +} + +// WriteMapStrStr writes a map[string]string to the writer +func (mw *Writer) WriteMapStrStr(mp map[string]string) (err error) { + err = mw.WriteMapHeader(uint32(len(mp))) + if err != nil { + return + } + for key, val := range mp { + err = mw.WriteString(key) + if err != nil { + return + } + err = mw.WriteString(val) + if err != nil { + return + } + } + return nil +} + +// WriteMapStrIntf writes a map[string]interface to the writer +func (mw *Writer) WriteMapStrIntf(mp map[string]interface{}) (err error) { + err = mw.WriteMapHeader(uint32(len(mp))) + if err != nil { + return + } + for key, val := range mp { + err = mw.WriteString(key) + if err != nil { + return + } + err = mw.WriteIntf(val) + if err != nil { + return + } + } + return +} + +// WriteTime writes a time.Time object to the wire. +// +// Time is encoded as Unix time, which means that +// location (time zone) data is removed from the object. +// The encoded object itself is 12 bytes: 8 bytes for +// a big-endian 64-bit integer denoting seconds +// elapsed since "zero" Unix time, followed by 4 bytes +// for a big-endian 32-bit signed integer denoting +// the nanosecond offset of the time. This encoding +// is intended to ease portability across languages. +// (Note that this is *not* the standard time.Time +// binary encoding, because its implementation relies +// heavily on the internal representation used by the +// time package.) +func (mw *Writer) WriteTime(t time.Time) error { + t = t.UTC() + o, err := mw.require(15) + if err != nil { + return err + } + mw.buf[o] = mext8 + mw.buf[o+1] = 12 + mw.buf[o+2] = TimeExtension + putUnix(mw.buf[o+3:], t.Unix(), int32(t.Nanosecond())) + return nil +} + +// WriteIntf writes the concrete type of 'v'. +// WriteIntf will error if 'v' is not one of the following: +// - A bool, float, string, []byte, int, uint, or complex +// - A map of supported types (with string keys) +// - An array or slice of supported types +// - A pointer to a supported type +// - A type that satisfies the msgp.Encodable interface +// - A type that satisfies the msgp.Extension interface +func (mw *Writer) WriteIntf(v interface{}) error { + if v == nil { + return mw.WriteNil() + } + switch v := v.(type) { + + // preferred interfaces + + case Encodable: + return v.EncodeMsg(mw) + case Extension: + return mw.WriteExtension(v) + + // concrete types + + case bool: + return mw.WriteBool(v) + case float32: + return mw.WriteFloat32(v) + case float64: + return mw.WriteFloat64(v) + case complex64: + return mw.WriteComplex64(v) + case complex128: + return mw.WriteComplex128(v) + case uint8: + return mw.WriteUint8(v) + case uint16: + return mw.WriteUint16(v) + case uint32: + return mw.WriteUint32(v) + case uint64: + return mw.WriteUint64(v) + case uint: + return mw.WriteUint(v) + case int8: + return mw.WriteInt8(v) + case int16: + return mw.WriteInt16(v) + case int32: + return mw.WriteInt32(v) + case int64: + return mw.WriteInt64(v) + case int: + return mw.WriteInt(v) + case string: + return mw.WriteString(v) + case []byte: + return mw.WriteBytes(v) + case map[string]string: + return mw.WriteMapStrStr(v) + case map[string]interface{}: + return mw.WriteMapStrIntf(v) + case time.Time: + return mw.WriteTime(v) + } + + val := reflect.ValueOf(v) + if !isSupported(val.Kind()) || !val.IsValid() { + return fmt.Errorf("msgp: type %s not supported", val) + } + + switch val.Kind() { + case reflect.Ptr: + if val.IsNil() { + return mw.WriteNil() + } + return mw.WriteIntf(val.Elem().Interface()) + case reflect.Slice: + return mw.writeSlice(val) + case reflect.Map: + return mw.writeMap(val) + } + return &ErrUnsupportedType{val.Type()} +} + +func (mw *Writer) writeMap(v reflect.Value) (err error) { + if v.Type().Key().Kind() != reflect.String { + return errors.New("msgp: map keys must be strings") + } + ks := v.MapKeys() + err = mw.WriteMapHeader(uint32(len(ks))) + if err != nil { + return + } + for _, key := range ks { + val := v.MapIndex(key) + err = mw.WriteString(key.String()) + if err != nil { + return + } + err = mw.WriteIntf(val.Interface()) + if err != nil { + return + } + } + return +} + +func (mw *Writer) writeSlice(v reflect.Value) (err error) { + // is []byte + if v.Type().ConvertibleTo(btsType) { + return mw.WriteBytes(v.Bytes()) + } + + sz := uint32(v.Len()) + err = mw.WriteArrayHeader(sz) + if err != nil { + return + } + for i := uint32(0); i < sz; i++ { + err = mw.WriteIntf(v.Index(int(i)).Interface()) + if err != nil { + return + } + } + return +} + +func (mw *Writer) writeStruct(v reflect.Value) error { + if enc, ok := v.Interface().(Encodable); ok { + return enc.EncodeMsg(mw) + } + return fmt.Errorf("msgp: unsupported type: %s", v.Type()) +} + +func (mw *Writer) writeVal(v reflect.Value) error { + if !isSupported(v.Kind()) { + return fmt.Errorf("msgp: msgp/enc: type %q not supported", v.Type()) + } + + // shortcut for nil values + if v.IsNil() { + return mw.WriteNil() + } + switch v.Kind() { + case reflect.Bool: + return mw.WriteBool(v.Bool()) + + case reflect.Float32, reflect.Float64: + return mw.WriteFloat64(v.Float()) + + case reflect.Complex64, reflect.Complex128: + return mw.WriteComplex128(v.Complex()) + + case reflect.Int, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int8: + return mw.WriteInt64(v.Int()) + + case reflect.Interface, reflect.Ptr: + if v.IsNil() { + mw.WriteNil() + } + return mw.writeVal(v.Elem()) + + case reflect.Map: + return mw.writeMap(v) + + case reflect.Uint, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint8: + return mw.WriteUint64(v.Uint()) + + case reflect.String: + return mw.WriteString(v.String()) + + case reflect.Slice, reflect.Array: + return mw.writeSlice(v) + + case reflect.Struct: + return mw.writeStruct(v) + + } + return fmt.Errorf("msgp: msgp/enc: type %q not supported", v.Type()) +} + +// is the reflect.Kind encodable? +func isSupported(k reflect.Kind) bool { + switch k { + case reflect.Func, reflect.Chan, reflect.Invalid, reflect.UnsafePointer: + return false + default: + return true + } +} + +// GuessSize guesses the size of the underlying +// value of 'i'. If the underlying value is not +// a simple builtin (or []byte), GuessSize defaults +// to 512. +func GuessSize(i interface{}) int { + if i == nil { + return NilSize + } + + switch i := i.(type) { + case Sizer: + return i.Msgsize() + case Extension: + return ExtensionPrefixSize + i.Len() + case float64: + return Float64Size + case float32: + return Float32Size + case uint8, uint16, uint32, uint64, uint: + return UintSize + case int8, int16, int32, int64, int: + return IntSize + case []byte: + return BytesPrefixSize + len(i) + case string: + return StringPrefixSize + len(i) + case complex64: + return Complex64Size + case complex128: + return Complex128Size + case bool: + return BoolSize + case map[string]interface{}: + s := MapHeaderSize + for key, val := range i { + s += StringPrefixSize + len(key) + GuessSize(val) + } + return s + case map[string]string: + s := MapHeaderSize + for key, val := range i { + s += 2*StringPrefixSize + len(key) + len(val) + } + return s + default: + return 512 + } +} diff --git a/vendor/github.com/tinylib/msgp/msgp/write_bytes.go b/vendor/github.com/tinylib/msgp/msgp/write_bytes.go new file mode 100644 index 0000000..eaa03c4 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/write_bytes.go @@ -0,0 +1,411 @@ +package msgp + +import ( + "math" + "reflect" + "time" +) + +// ensure 'sz' extra bytes in 'b' btw len(b) and cap(b) +func ensure(b []byte, sz int) ([]byte, int) { + l := len(b) + c := cap(b) + if c-l < sz { + o := make([]byte, (2*c)+sz) // exponential growth + n := copy(o, b) + return o[:n+sz], n + } + return b[:l+sz], l +} + +// AppendMapHeader appends a map header with the +// given size to the slice +func AppendMapHeader(b []byte, sz uint32) []byte { + switch { + case sz <= 15: + return append(b, wfixmap(uint8(sz))) + + case sz <= math.MaxUint16: + o, n := ensure(b, 3) + prefixu16(o[n:], mmap16, uint16(sz)) + return o + + default: + o, n := ensure(b, 5) + prefixu32(o[n:], mmap32, sz) + return o + } +} + +// AppendArrayHeader appends an array header with +// the given size to the slice +func AppendArrayHeader(b []byte, sz uint32) []byte { + switch { + case sz <= 15: + return append(b, wfixarray(uint8(sz))) + + case sz <= math.MaxUint16: + o, n := ensure(b, 3) + prefixu16(o[n:], marray16, uint16(sz)) + return o + + default: + o, n := ensure(b, 5) + prefixu32(o[n:], marray32, sz) + return o + } +} + +// AppendNil appends a 'nil' byte to the slice +func AppendNil(b []byte) []byte { return append(b, mnil) } + +// AppendFloat64 appends a float64 to the slice +func AppendFloat64(b []byte, f float64) []byte { + o, n := ensure(b, Float64Size) + prefixu64(o[n:], mfloat64, math.Float64bits(f)) + return o +} + +// AppendFloat32 appends a float32 to the slice +func AppendFloat32(b []byte, f float32) []byte { + o, n := ensure(b, Float32Size) + prefixu32(o[n:], mfloat32, math.Float32bits(f)) + return o +} + +// AppendInt64 appends an int64 to the slice +func AppendInt64(b []byte, i int64) []byte { + if i >= 0 { + switch { + case i <= math.MaxInt8: + return append(b, wfixint(uint8(i))) + case i <= math.MaxInt16: + o, n := ensure(b, 3) + putMint16(o[n:], int16(i)) + return o + case i <= math.MaxInt32: + o, n := ensure(b, 5) + putMint32(o[n:], int32(i)) + return o + default: + o, n := ensure(b, 9) + putMint64(o[n:], i) + return o + } + } + switch { + case i >= -32: + return append(b, wnfixint(int8(i))) + case i >= math.MinInt8: + o, n := ensure(b, 2) + putMint8(o[n:], int8(i)) + return o + case i >= math.MinInt16: + o, n := ensure(b, 3) + putMint16(o[n:], int16(i)) + return o + case i >= math.MinInt32: + o, n := ensure(b, 5) + putMint32(o[n:], int32(i)) + return o + default: + o, n := ensure(b, 9) + putMint64(o[n:], i) + return o + } +} + +// AppendInt appends an int to the slice +func AppendInt(b []byte, i int) []byte { return AppendInt64(b, int64(i)) } + +// AppendInt8 appends an int8 to the slice +func AppendInt8(b []byte, i int8) []byte { return AppendInt64(b, int64(i)) } + +// AppendInt16 appends an int16 to the slice +func AppendInt16(b []byte, i int16) []byte { return AppendInt64(b, int64(i)) } + +// AppendInt32 appends an int32 to the slice +func AppendInt32(b []byte, i int32) []byte { return AppendInt64(b, int64(i)) } + +// AppendUint64 appends a uint64 to the slice +func AppendUint64(b []byte, u uint64) []byte { + switch { + case u <= (1<<7)-1: + return append(b, wfixint(uint8(u))) + + case u <= math.MaxUint8: + o, n := ensure(b, 2) + putMuint8(o[n:], uint8(u)) + return o + + case u <= math.MaxUint16: + o, n := ensure(b, 3) + putMuint16(o[n:], uint16(u)) + return o + + case u <= math.MaxUint32: + o, n := ensure(b, 5) + putMuint32(o[n:], uint32(u)) + return o + + default: + o, n := ensure(b, 9) + putMuint64(o[n:], u) + return o + + } +} + +// AppendUint appends a uint to the slice +func AppendUint(b []byte, u uint) []byte { return AppendUint64(b, uint64(u)) } + +// AppendUint8 appends a uint8 to the slice +func AppendUint8(b []byte, u uint8) []byte { return AppendUint64(b, uint64(u)) } + +// AppendByte is analogous to AppendUint8 +func AppendByte(b []byte, u byte) []byte { return AppendUint8(b, uint8(u)) } + +// AppendUint16 appends a uint16 to the slice +func AppendUint16(b []byte, u uint16) []byte { return AppendUint64(b, uint64(u)) } + +// AppendUint32 appends a uint32 to the slice +func AppendUint32(b []byte, u uint32) []byte { return AppendUint64(b, uint64(u)) } + +// AppendBytes appends bytes to the slice as MessagePack 'bin' data +func AppendBytes(b []byte, bts []byte) []byte { + sz := len(bts) + var o []byte + var n int + switch { + case sz <= math.MaxUint8: + o, n = ensure(b, 2+sz) + prefixu8(o[n:], mbin8, uint8(sz)) + n += 2 + case sz <= math.MaxUint16: + o, n = ensure(b, 3+sz) + prefixu16(o[n:], mbin16, uint16(sz)) + n += 3 + default: + o, n = ensure(b, 5+sz) + prefixu32(o[n:], mbin32, uint32(sz)) + n += 5 + } + return o[:n+copy(o[n:], bts)] +} + +// AppendBool appends a bool to the slice +func AppendBool(b []byte, t bool) []byte { + if t { + return append(b, mtrue) + } + return append(b, mfalse) +} + +// AppendString appends a string as a MessagePack 'str' to the slice +func AppendString(b []byte, s string) []byte { + sz := len(s) + var n int + var o []byte + switch { + case sz <= 31: + o, n = ensure(b, 1+sz) + o[n] = wfixstr(uint8(sz)) + n++ + case sz <= math.MaxUint8: + o, n = ensure(b, 2+sz) + prefixu8(o[n:], mstr8, uint8(sz)) + n += 2 + case sz <= math.MaxUint16: + o, n = ensure(b, 3+sz) + prefixu16(o[n:], mstr16, uint16(sz)) + n += 3 + default: + o, n = ensure(b, 5+sz) + prefixu32(o[n:], mstr32, uint32(sz)) + n += 5 + } + return o[:n+copy(o[n:], s)] +} + +// AppendStringFromBytes appends a []byte +// as a MessagePack 'str' to the slice 'b.' +func AppendStringFromBytes(b []byte, str []byte) []byte { + sz := len(str) + var n int + var o []byte + switch { + case sz <= 31: + o, n = ensure(b, 1+sz) + o[n] = wfixstr(uint8(sz)) + n++ + case sz <= math.MaxUint8: + o, n = ensure(b, 2+sz) + prefixu8(o[n:], mstr8, uint8(sz)) + n += 2 + case sz <= math.MaxUint16: + o, n = ensure(b, 3+sz) + prefixu16(o[n:], mstr16, uint16(sz)) + n += 3 + default: + o, n = ensure(b, 5+sz) + prefixu32(o[n:], mstr32, uint32(sz)) + n += 5 + } + return o[:n+copy(o[n:], str)] +} + +// AppendComplex64 appends a complex64 to the slice as a MessagePack extension +func AppendComplex64(b []byte, c complex64) []byte { + o, n := ensure(b, Complex64Size) + o[n] = mfixext8 + o[n+1] = Complex64Extension + big.PutUint32(o[n+2:], math.Float32bits(real(c))) + big.PutUint32(o[n+6:], math.Float32bits(imag(c))) + return o +} + +// AppendComplex128 appends a complex128 to the slice as a MessagePack extension +func AppendComplex128(b []byte, c complex128) []byte { + o, n := ensure(b, Complex128Size) + o[n] = mfixext16 + o[n+1] = Complex128Extension + big.PutUint64(o[n+2:], math.Float64bits(real(c))) + big.PutUint64(o[n+10:], math.Float64bits(imag(c))) + return o +} + +// AppendTime appends a time.Time to the slice as a MessagePack extension +func AppendTime(b []byte, t time.Time) []byte { + o, n := ensure(b, TimeSize) + t = t.UTC() + o[n] = mext8 + o[n+1] = 12 + o[n+2] = TimeExtension + putUnix(o[n+3:], t.Unix(), int32(t.Nanosecond())) + return o +} + +// AppendMapStrStr appends a map[string]string to the slice +// as a MessagePack map with 'str'-type keys and values +func AppendMapStrStr(b []byte, m map[string]string) []byte { + sz := uint32(len(m)) + b = AppendMapHeader(b, sz) + for key, val := range m { + b = AppendString(b, key) + b = AppendString(b, val) + } + return b +} + +// AppendMapStrIntf appends a map[string]interface{} to the slice +// as a MessagePack map with 'str'-type keys. +func AppendMapStrIntf(b []byte, m map[string]interface{}) ([]byte, error) { + sz := uint32(len(m)) + b = AppendMapHeader(b, sz) + var err error + for key, val := range m { + b = AppendString(b, key) + b, err = AppendIntf(b, val) + if err != nil { + return b, err + } + } + return b, nil +} + +// AppendIntf appends the concrete type of 'i' to the +// provided []byte. 'i' must be one of the following: +// - 'nil' +// - A bool, float, string, []byte, int, uint, or complex +// - A map[string]interface{} or map[string]string +// - A []T, where T is another supported type +// - A *T, where T is another supported type +// - A type that satisfieds the msgp.Marshaler interface +// - A type that satisfies the msgp.Extension interface +func AppendIntf(b []byte, i interface{}) ([]byte, error) { + if i == nil { + return AppendNil(b), nil + } + + // all the concrete types + // for which we have methods + switch i := i.(type) { + case Marshaler: + return i.MarshalMsg(b) + case Extension: + return AppendExtension(b, i) + case bool: + return AppendBool(b, i), nil + case float32: + return AppendFloat32(b, i), nil + case float64: + return AppendFloat64(b, i), nil + case complex64: + return AppendComplex64(b, i), nil + case complex128: + return AppendComplex128(b, i), nil + case string: + return AppendString(b, i), nil + case []byte: + return AppendBytes(b, i), nil + case int8: + return AppendInt8(b, i), nil + case int16: + return AppendInt16(b, i), nil + case int32: + return AppendInt32(b, i), nil + case int64: + return AppendInt64(b, i), nil + case int: + return AppendInt64(b, int64(i)), nil + case uint: + return AppendUint64(b, uint64(i)), nil + case uint8: + return AppendUint8(b, i), nil + case uint16: + return AppendUint16(b, i), nil + case uint32: + return AppendUint32(b, i), nil + case uint64: + return AppendUint64(b, i), nil + case time.Time: + return AppendTime(b, i), nil + case map[string]interface{}: + return AppendMapStrIntf(b, i) + case map[string]string: + return AppendMapStrStr(b, i), nil + case []interface{}: + b = AppendArrayHeader(b, uint32(len(i))) + var err error + for _, k := range i { + b, err = AppendIntf(b, k) + if err != nil { + return b, err + } + } + return b, nil + } + + var err error + v := reflect.ValueOf(i) + switch v.Kind() { + case reflect.Array, reflect.Slice: + l := v.Len() + b = AppendArrayHeader(b, uint32(l)) + for i := 0; i < l; i++ { + b, err = AppendIntf(b, v.Index(i).Interface()) + if err != nil { + return b, err + } + } + return b, nil + case reflect.Ptr: + if v.IsNil() { + return AppendNil(b), err + } + b, err = AppendIntf(b, v.Elem().Interface()) + return b, err + default: + return b, &ErrUnsupportedType{T: v.Type()} + } +} diff --git a/vendor/github.com/tinylib/msgp/msgp/write_bytes_test.go b/vendor/github.com/tinylib/msgp/msgp/write_bytes_test.go new file mode 100644 index 0000000..fa0b7d5 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/write_bytes_test.go @@ -0,0 +1,319 @@ +package msgp + +import ( + "bytes" + "math" + "testing" + "time" +) + +func TestIssue116(t *testing.T) { + data := AppendInt64(nil, math.MinInt64) + i, _, err := ReadInt64Bytes(data) + if err != nil { + t.Fatal(err) + } + if i != math.MinInt64 { + t.Errorf("put %d in and got %d out", int64(math.MinInt64), i) + } + + var buf bytes.Buffer + + w := NewWriter(&buf) + w.WriteInt64(math.MinInt64) + w.Flush() + i, err = NewReader(&buf).ReadInt64() + if err != nil { + t.Fatal(err) + } + if i != math.MinInt64 { + t.Errorf("put %d in and got %d out", int64(math.MinInt64), i) + } +} + +func TestAppendMapHeader(t *testing.T) { + szs := []uint32{0, 1, uint32(tint8), uint32(tint16), tuint32} + var buf bytes.Buffer + en := NewWriter(&buf) + + var bts []byte + for _, sz := range szs { + buf.Reset() + en.WriteMapHeader(sz) + en.Flush() + bts = AppendMapHeader(bts[0:0], sz) + + if !bytes.Equal(buf.Bytes(), bts) { + t.Errorf("for size %d, encoder wrote %q and append wrote %q", sz, buf.Bytes(), bts) + } + } +} + +func BenchmarkAppendMapHeader(b *testing.B) { + buf := make([]byte, 0, 9) + N := b.N / 4 + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < N; i++ { + AppendMapHeader(buf[:0], 0) + AppendMapHeader(buf[:0], uint32(tint8)) + AppendMapHeader(buf[:0], tuint16) + AppendMapHeader(buf[:0], tuint32) + } +} + +func TestAppendArrayHeader(t *testing.T) { + szs := []uint32{0, 1, uint32(tint8), uint32(tint16), tuint32} + var buf bytes.Buffer + en := NewWriter(&buf) + + var bts []byte + for _, sz := range szs { + buf.Reset() + en.WriteArrayHeader(sz) + en.Flush() + bts = AppendArrayHeader(bts[0:0], sz) + + if !bytes.Equal(buf.Bytes(), bts) { + t.Errorf("for size %d, encoder wrote %q and append wrote %q", sz, buf.Bytes(), bts) + } + } +} + +func BenchmarkAppendArrayHeader(b *testing.B) { + buf := make([]byte, 0, 9) + N := b.N / 4 + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < N; i++ { + AppendArrayHeader(buf[:0], 0) + AppendArrayHeader(buf[:0], uint32(tint8)) + AppendArrayHeader(buf[:0], tuint16) + AppendArrayHeader(buf[:0], tuint32) + } +} + +func TestAppendNil(t *testing.T) { + var bts []byte + bts = AppendNil(bts[0:0]) + if bts[0] != mnil { + t.Fatal("bts[0] is not 'nil'") + } +} + +func TestAppendFloat64(t *testing.T) { + f := float64(3.14159) + var buf bytes.Buffer + en := NewWriter(&buf) + + var bts []byte + en.WriteFloat64(f) + en.Flush() + bts = AppendFloat64(bts[0:0], f) + if !bytes.Equal(buf.Bytes(), bts) { + t.Errorf("for float %f, encoder wrote %q; append wrote %q", f, buf.Bytes(), bts) + } +} + +func BenchmarkAppendFloat64(b *testing.B) { + f := float64(3.14159) + buf := make([]byte, 0, 9) + b.SetBytes(9) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + AppendFloat64(buf[0:0], f) + } +} + +func TestAppendFloat32(t *testing.T) { + f := float32(3.14159) + var buf bytes.Buffer + en := NewWriter(&buf) + + var bts []byte + en.WriteFloat32(f) + en.Flush() + bts = AppendFloat32(bts[0:0], f) + if !bytes.Equal(buf.Bytes(), bts) { + t.Errorf("for float %f, encoder wrote %q; append wrote %q", f, buf.Bytes(), bts) + } +} + +func BenchmarkAppendFloat32(b *testing.B) { + f := float32(3.14159) + buf := make([]byte, 0, 5) + b.SetBytes(5) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + AppendFloat32(buf[0:0], f) + } +} + +func TestAppendInt64(t *testing.T) { + is := []int64{0, 1, -5, -50, int64(tint16), int64(tint32), int64(tint64)} + var buf bytes.Buffer + en := NewWriter(&buf) + + var bts []byte + for _, i := range is { + buf.Reset() + en.WriteInt64(i) + en.Flush() + bts = AppendInt64(bts[0:0], i) + if !bytes.Equal(buf.Bytes(), bts) { + t.Errorf("for int64 %d, encoder wrote %q; append wrote %q", i, buf.Bytes(), bts) + } + } +} + +func BenchmarkAppendInt64(b *testing.B) { + is := []int64{0, 1, -5, -50, int64(tint16), int64(tint32), int64(tint64)} + l := len(is) + buf := make([]byte, 0, 9) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + AppendInt64(buf[0:0], is[i%l]) + } +} + +func TestAppendUint64(t *testing.T) { + us := []uint64{0, 1, uint64(tuint16), uint64(tuint32), tuint64} + var buf bytes.Buffer + en := NewWriter(&buf) + var bts []byte + + for _, u := range us { + buf.Reset() + en.WriteUint64(u) + en.Flush() + bts = AppendUint64(bts[0:0], u) + if !bytes.Equal(buf.Bytes(), bts) { + t.Errorf("for uint64 %d, encoder wrote %q; append wrote %q", u, buf.Bytes(), bts) + } + } +} + +func BenchmarkAppendUint64(b *testing.B) { + us := []uint64{0, 1, 15, uint64(tuint16), uint64(tuint32), tuint64} + buf := make([]byte, 0, 9) + b.ReportAllocs() + b.ResetTimer() + l := len(us) + for i := 0; i < b.N; i++ { + AppendUint64(buf[0:0], us[i%l]) + } +} + +func TestAppendBytes(t *testing.T) { + sizes := []int{0, 1, 225, int(tuint32)} + var buf bytes.Buffer + en := NewWriter(&buf) + var bts []byte + + for _, sz := range sizes { + buf.Reset() + b := RandBytes(sz) + en.WriteBytes(b) + en.Flush() + bts = AppendBytes(b[0:0], b) + if !bytes.Equal(buf.Bytes(), bts) { + t.Errorf("for bytes of length %d, encoder wrote %d bytes and append wrote %d bytes", sz, buf.Len(), len(bts)) + } + } +} + +func benchappendBytes(size uint32, b *testing.B) { + bts := RandBytes(int(size)) + buf := make([]byte, 0, len(bts)+5) + b.SetBytes(int64(len(bts) + 5)) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + AppendBytes(buf[0:0], bts) + } +} + +func BenchmarkAppend16Bytes(b *testing.B) { benchappendBytes(16, b) } + +func BenchmarkAppend256Bytes(b *testing.B) { benchappendBytes(256, b) } + +func BenchmarkAppend2048Bytes(b *testing.B) { benchappendBytes(2048, b) } + +func TestAppendString(t *testing.T) { + sizes := []int{0, 1, 225, int(tuint32)} + var buf bytes.Buffer + en := NewWriter(&buf) + var bts []byte + + for _, sz := range sizes { + buf.Reset() + s := string(RandBytes(sz)) + en.WriteString(s) + en.Flush() + bts = AppendString(bts[0:0], s) + if !bytes.Equal(buf.Bytes(), bts) { + t.Errorf("for string of length %d, encoder wrote %d bytes and append wrote %d bytes", sz, buf.Len(), len(bts)) + t.Errorf("WriteString prefix: %x", buf.Bytes()[0:5]) + t.Errorf("Appendstring prefix: %x", bts[0:5]) + } + } +} + +func benchappendString(size uint32, b *testing.B) { + str := string(RandBytes(int(size))) + buf := make([]byte, 0, len(str)+5) + b.SetBytes(int64(len(str) + 5)) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + AppendString(buf[0:0], str) + } +} + +func BenchmarkAppend16String(b *testing.B) { benchappendString(16, b) } + +func BenchmarkAppend256String(b *testing.B) { benchappendString(256, b) } + +func BenchmarkAppend2048String(b *testing.B) { benchappendString(2048, b) } + +func TestAppendBool(t *testing.T) { + vs := []bool{true, false} + var buf bytes.Buffer + en := NewWriter(&buf) + var bts []byte + + for _, v := range vs { + buf.Reset() + en.WriteBool(v) + en.Flush() + bts = AppendBool(bts[0:0], v) + if !bytes.Equal(buf.Bytes(), bts) { + t.Errorf("for %t, encoder wrote %q and append wrote %q", v, buf.Bytes(), bts) + } + } +} + +func BenchmarkAppendBool(b *testing.B) { + vs := []bool{true, false} + buf := make([]byte, 0, 1) + b.SetBytes(1) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + AppendBool(buf[0:0], vs[i%2]) + } +} + +func BenchmarkAppendTime(b *testing.B) { + t := time.Now() + b.SetBytes(15) + buf := make([]byte, 0, 15) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + AppendTime(buf[0:0], t) + } +} diff --git a/vendor/github.com/tinylib/msgp/msgp/write_test.go b/vendor/github.com/tinylib/msgp/msgp/write_test.go new file mode 100644 index 0000000..c5e97fe --- /dev/null +++ b/vendor/github.com/tinylib/msgp/msgp/write_test.go @@ -0,0 +1,405 @@ +package msgp + +import ( + "bytes" + "math" + "math/rand" + "testing" + "time" +) + +var ( + tint8 int8 = 126 // cannot be most fix* types + tint16 int16 = 150 // cannot be int8 + tint32 int32 = math.MaxInt16 + 100 // cannot be int16 + tint64 int64 = math.MaxInt32 + 100 // cannot be int32 + tuint16 uint32 = 300 // cannot be uint8 + tuint32 uint32 = math.MaxUint16 + 100 // cannot be uint16 + tuint64 uint64 = math.MaxUint32 + 100 // cannot be uint32 +) + +func RandBytes(sz int) []byte { + out := make([]byte, sz) + for i := range out { + out[i] = byte(rand.Int63n(math.MaxInt64) % 256) + } + return out +} + +func TestWriteMapHeader(t *testing.T) { + tests := []struct { + Sz uint32 + Outbytes []byte + }{ + {0, []byte{mfixmap}}, + {1, []byte{mfixmap | byte(1)}}, + {100, []byte{mmap16, byte(uint16(100) >> 8), byte(uint16(100))}}, + {tuint32, + []byte{mmap32, + byte(tuint32 >> 24), + byte(tuint32 >> 16), + byte(tuint32 >> 8), + byte(tuint32), + }, + }, + } + + var buf bytes.Buffer + var err error + wr := NewWriter(&buf) + for _, test := range tests { + buf.Reset() + err = wr.WriteMapHeader(test.Sz) + if err != nil { + t.Error(err) + } + err = wr.Flush() + if err != nil { + t.Fatal(err) + } + if !bytes.Equal(buf.Bytes(), test.Outbytes) { + t.Errorf("Expected bytes %x; got %x", test.Outbytes, buf.Bytes()) + } + } +} + +func BenchmarkWriteMapHeader(b *testing.B) { + wr := NewWriter(Nowhere) + N := b.N / 4 + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < N; i++ { + wr.WriteMapHeader(0) + wr.WriteMapHeader(8) + wr.WriteMapHeader(tuint16) + wr.WriteMapHeader(tuint32) + } +} + +func TestWriteArrayHeader(t *testing.T) { + tests := []struct { + Sz uint32 + Outbytes []byte + }{ + {0, []byte{mfixarray}}, + {1, []byte{mfixarray | byte(1)}}, + {tuint16, []byte{marray16, byte(tuint16 >> 8), byte(tuint16)}}, + {tuint32, []byte{marray32, byte(tuint32 >> 24), byte(tuint32 >> 16), byte(tuint32 >> 8), byte(tuint32)}}, + } + + var buf bytes.Buffer + var err error + wr := NewWriter(&buf) + for _, test := range tests { + buf.Reset() + err = wr.WriteArrayHeader(test.Sz) + if err != nil { + t.Error(err) + } + err = wr.Flush() + if err != nil { + t.Fatal(err) + } + if !bytes.Equal(buf.Bytes(), test.Outbytes) { + t.Errorf("Expected bytes %x; got %x", test.Outbytes, buf.Bytes()) + } + } +} + +func TestReadWriteStringHeader(t *testing.T) { + sizes := []uint32{0, 5, 8, 19, 150, tuint16, tuint32} + var buf bytes.Buffer + var err error + wr := NewWriter(&buf) + for _, sz := range sizes { + buf.Reset() + err = wr.WriteStringHeader(sz) + if err != nil { + t.Fatal(err) + } + err = wr.Flush() + if err != nil { + t.Fatal(err) + } + var nsz uint32 + nsz, err = NewReader(&buf).ReadStringHeader() + if err != nil { + t.Fatal(err) + } + if nsz != sz { + t.Errorf("put in size %d but got out size %d", sz, nsz) + } + } +} + +func TestReadWriteBytesHeader(t *testing.T) { + sizes := []uint32{0, 5, 8, 19, 150, tuint16, tuint32} + var buf bytes.Buffer + var err error + wr := NewWriter(&buf) + for _, sz := range sizes { + buf.Reset() + err = wr.WriteBytesHeader(sz) + if err != nil { + t.Fatal(err) + } + err = wr.Flush() + if err != nil { + t.Fatal(err) + } + var nsz uint32 + nsz, err = NewReader(&buf).ReadBytesHeader() + if err != nil { + t.Fatal(err) + } + if nsz != sz { + t.Errorf("put in size %d but got out size %d", sz, nsz) + } + } +} + +func BenchmarkWriteArrayHeader(b *testing.B) { + wr := NewWriter(Nowhere) + N := b.N / 4 + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < N; i++ { + wr.WriteArrayHeader(0) + wr.WriteArrayHeader(16) + wr.WriteArrayHeader(tuint16) + wr.WriteArrayHeader(tuint32) + } +} + +func TestWriteNil(t *testing.T) { + var buf bytes.Buffer + wr := NewWriter(&buf) + + err := wr.WriteNil() + if err != nil { + t.Fatal(err) + } + err = wr.Flush() + if err != nil { + t.Fatal(err) + } + + bts := buf.Bytes() + if bts[0] != mnil { + t.Errorf("Expected %x; wrote %x", mnil, bts[0]) + } +} + +func TestWriteFloat64(t *testing.T) { + var buf bytes.Buffer + wr := NewWriter(&buf) + + for i := 0; i < 10000; i++ { + buf.Reset() + flt := (rand.Float64() - 0.5) * math.MaxFloat64 + err := wr.WriteFloat64(flt) + if err != nil { + t.Errorf("Error with %f: %s", flt, err) + } + err = wr.Flush() + if err != nil { + t.Fatal(err) + } + + bts := buf.Bytes() + + if bts[0] != mfloat64 { + t.Errorf("Leading byte was %x and not %x", bts[0], mfloat64) + } + } +} + +func BenchmarkWriteFloat64(b *testing.B) { + f := rand.Float64() + wr := NewWriter(Nowhere) + b.SetBytes(9) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + wr.WriteFloat64(f) + } +} + +func TestWriteFloat32(t *testing.T) { + var buf bytes.Buffer + wr := NewWriter(&buf) + + for i := 0; i < 10000; i++ { + buf.Reset() + flt := (rand.Float32() - 0.5) * math.MaxFloat32 + err := wr.WriteFloat32(flt) + if err != nil { + t.Errorf("Error with %f: %s", flt, err) + } + err = wr.Flush() + if err != nil { + t.Fatal(err) + } + + bts := buf.Bytes() + + if bts[0] != mfloat32 { + t.Errorf("Leading byte was %x and not %x", bts[0], mfloat64) + } + } +} + +func BenchmarkWriteFloat32(b *testing.B) { + f := rand.Float32() + wr := NewWriter(Nowhere) + b.SetBytes(5) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + wr.WriteFloat32(f) + } +} + +func TestWriteInt64(t *testing.T) { + var buf bytes.Buffer + wr := NewWriter(&buf) + + for i := 0; i < 10000; i++ { + buf.Reset() + + num := (rand.Int63n(math.MaxInt64)) - (math.MaxInt64 / 2) + + err := wr.WriteInt64(num) + if err != nil { + t.Fatal(err) + } + err = wr.Flush() + if err != nil { + t.Fatal(err) + } + + if buf.Len() > 9 { + t.Errorf("buffer length should be <= 9; it's %d", buf.Len()) + } + } +} + +func BenchmarkWriteInt64(b *testing.B) { + wr := NewWriter(Nowhere) + b.SetBytes(9) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + wr.WriteInt64(int64(tint64)) + } +} + +func TestWriteUint64(t *testing.T) { + var buf bytes.Buffer + wr := NewWriter(&buf) + + for i := 0; i < 10000; i++ { + buf.Reset() + + num := uint64(rand.Int63n(math.MaxInt64)) + + err := wr.WriteUint64(num) + if err != nil { + t.Fatal(err) + } + err = wr.Flush() + if err != nil { + t.Fatal(err) + } + if buf.Len() > 9 { + t.Errorf("buffer length should be <= 9; it's %d", buf.Len()) + } + } +} + +func BenchmarkWriteUint64(b *testing.B) { + wr := NewWriter(Nowhere) + b.SetBytes(9) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + wr.WriteUint64(uint64(tuint64)) + } +} + +func TestWriteBytes(t *testing.T) { + var buf bytes.Buffer + wr := NewWriter(&buf) + sizes := []int{0, 1, 225, int(tuint32)} + + for _, size := range sizes { + buf.Reset() + bts := RandBytes(size) + + err := wr.WriteBytes(bts) + if err != nil { + t.Fatal(err) + } + + err = wr.Flush() + if err != nil { + t.Fatal(err) + } + + if buf.Len() < len(bts) { + t.Errorf("somehow, %d bytes were encoded in %d bytes", len(bts), buf.Len()) + } + } +} + +func benchwrBytes(size uint32, b *testing.B) { + bts := RandBytes(int(size)) + wr := NewWriter(Nowhere) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + wr.WriteBytes(bts) + } +} + +func BenchmarkWrite16Bytes(b *testing.B) { benchwrBytes(16, b) } + +func BenchmarkWrite256Bytes(b *testing.B) { benchwrBytes(256, b) } + +func BenchmarkWrite2048Bytes(b *testing.B) { benchwrBytes(2048, b) } + +func TestWriteTime(t *testing.T) { + var buf bytes.Buffer + wr := NewWriter(&buf) + tm := time.Now() + err := wr.WriteTime(tm) + if err != nil { + t.Fatal(err) + } + err = wr.Flush() + if err != nil { + t.Fatal(err) + } + if buf.Len() != 15 { + t.Errorf("expected time.Time to be %d bytes; got %d", 15, buf.Len()) + } + + newt, err := NewReader(&buf).ReadTime() + if err != nil { + t.Fatal(err) + } + if !newt.Equal(tm) { + t.Errorf("in/out not equal; %s in and %s out", tm, newt) + } +} + +func BenchmarkWriteTime(b *testing.B) { + t := time.Now() + wr := NewWriter(Nowhere) + b.SetBytes(15) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + wr.WriteTime(t) + } +} diff --git a/vendor/github.com/tinylib/msgp/parse/directives.go b/vendor/github.com/tinylib/msgp/parse/directives.go new file mode 100644 index 0000000..73e441e --- /dev/null +++ b/vendor/github.com/tinylib/msgp/parse/directives.go @@ -0,0 +1,130 @@ +package parse + +import ( + "fmt" + "go/ast" + "strings" + + "github.com/tinylib/msgp/gen" +) + +const linePrefix = "//msgp:" + +// func(args, fileset) +type directive func([]string, *FileSet) error + +// func(passName, args, printer) +type passDirective func(gen.Method, []string, *gen.Printer) error + +// map of all recognized directives +// +// to add a directive, define a func([]string, *FileSet) error +// and then add it to this list. +var directives = map[string]directive{ + "shim": applyShim, + "ignore": ignore, + "tuple": astuple, +} + +var passDirectives = map[string]passDirective{ + "ignore": passignore, +} + +func passignore(m gen.Method, text []string, p *gen.Printer) error { + pushstate(m.String()) + for _, a := range text { + p.ApplyDirective(m, gen.IgnoreTypename(a)) + infof("ignoring %s\n", a) + } + popstate() + return nil +} + +// find all comment lines that begin with //msgp: +func yieldComments(c []*ast.CommentGroup) []string { + var out []string + for _, cg := range c { + for _, line := range cg.List { + if strings.HasPrefix(line.Text, linePrefix) { + out = append(out, strings.TrimPrefix(line.Text, linePrefix)) + } + } + } + return out +} + +//msgp:shim {Type} as:{Newtype} using:{toFunc/fromFunc} mode:{Mode} +func applyShim(text []string, f *FileSet) error { + if len(text) < 4 || len(text) > 5 { + return fmt.Errorf("shim directive should have 3 or 4 arguments; found %d", len(text)-1) + } + + name := text[1] + be := gen.Ident(strings.TrimPrefix(strings.TrimSpace(text[2]), "as:")) // parse as::{base} + if name[0] == '*' { + name = name[1:] + be.Needsref(true) + } + be.Alias(name) + + usestr := strings.TrimPrefix(strings.TrimSpace(text[3]), "using:") // parse using::{method/method} + + methods := strings.Split(usestr, "/") + if len(methods) != 2 { + return fmt.Errorf("expected 2 using::{} methods; found %d (%q)", len(methods), text[3]) + } + + be.ShimToBase = methods[0] + be.ShimFromBase = methods[1] + + if len(text) == 5 { + modestr := strings.TrimPrefix(strings.TrimSpace(text[4]), "mode:") // parse mode::{mode} + switch modestr { + case "cast": + be.ShimMode = gen.Cast + case "convert": + be.ShimMode = gen.Convert + default: + return fmt.Errorf("invalid shim mode; found %s, expected 'cast' or 'convert", modestr) + } + } + + infof("%s -> %s\n", name, be.Value.String()) + f.findShim(name, be) + + return nil +} + +//msgp:ignore {TypeA} {TypeB}... +func ignore(text []string, f *FileSet) error { + if len(text) < 2 { + return nil + } + for _, item := range text[1:] { + name := strings.TrimSpace(item) + if _, ok := f.Identities[name]; ok { + delete(f.Identities, name) + infof("ignoring %s\n", name) + } + } + return nil +} + +//msgp:tuple {TypeA} {TypeB}... +func astuple(text []string, f *FileSet) error { + if len(text) < 2 { + return nil + } + for _, item := range text[1:] { + name := strings.TrimSpace(item) + if el, ok := f.Identities[name]; ok { + if st, ok := el.(*gen.Struct); ok { + st.AsTuple = true + infoln(name) + } else { + warnf("%s: only structs can be tuples\n", name) + } + } + } + return nil +} diff --git a/vendor/github.com/tinylib/msgp/parse/getast.go b/vendor/github.com/tinylib/msgp/parse/getast.go new file mode 100644 index 0000000..871020d --- /dev/null +++ b/vendor/github.com/tinylib/msgp/parse/getast.go @@ -0,0 +1,587 @@ +package parse + +import ( + "fmt" + "go/ast" + "go/parser" + "go/token" + "os" + "reflect" + "sort" + "strings" + + "github.com/tinylib/msgp/gen" + "github.com/ttacon/chalk" +) + +// A FileSet is the in-memory representation of a +// parsed file. +type FileSet struct { + Package string // package name + Specs map[string]ast.Expr // type specs in file + Identities map[string]gen.Elem // processed from specs + Directives []string // raw preprocessor directives + Imports []*ast.ImportSpec // imports +} + +// File parses a file at the relative path +// provided and produces a new *FileSet. +// If you pass in a path to a directory, the entire +// directory will be parsed. +// If unexport is false, only exported identifiers are included in the FileSet. +// If the resulting FileSet would be empty, an error is returned. +func File(name string, unexported bool) (*FileSet, error) { + pushstate(name) + defer popstate() + fs := &FileSet{ + Specs: make(map[string]ast.Expr), + Identities: make(map[string]gen.Elem), + } + + fset := token.NewFileSet() + finfo, err := os.Stat(name) + if err != nil { + return nil, err + } + if finfo.IsDir() { + pkgs, err := parser.ParseDir(fset, name, nil, parser.ParseComments) + if err != nil { + return nil, err + } + if len(pkgs) != 1 { + return nil, fmt.Errorf("multiple packages in directory: %s", name) + } + var one *ast.Package + for _, nm := range pkgs { + one = nm + break + } + fs.Package = one.Name + for _, fl := range one.Files { + pushstate(fl.Name.Name) + fs.Directives = append(fs.Directives, yieldComments(fl.Comments)...) + if !unexported { + ast.FileExports(fl) + } + fs.getTypeSpecs(fl) + popstate() + } + } else { + f, err := parser.ParseFile(fset, name, nil, parser.ParseComments) + if err != nil { + return nil, err + } + fs.Package = f.Name.Name + fs.Directives = yieldComments(f.Comments) + if !unexported { + ast.FileExports(f) + } + fs.getTypeSpecs(f) + } + + if len(fs.Specs) == 0 { + return nil, fmt.Errorf("no definitions in %s", name) + } + + fs.process() + fs.applyDirectives() + fs.propInline() + + return fs, nil +} + +// applyDirectives applies all of the directives that +// are known to the parser. additional method-specific +// directives remain in f.Directives +func (f *FileSet) applyDirectives() { + newdirs := make([]string, 0, len(f.Directives)) + for _, d := range f.Directives { + chunks := strings.Split(d, " ") + if len(chunks) > 0 { + if fn, ok := directives[chunks[0]]; ok { + pushstate(chunks[0]) + err := fn(chunks, f) + if err != nil { + warnln(err.Error()) + } + popstate() + } else { + newdirs = append(newdirs, d) + } + } + } + f.Directives = newdirs +} + +// A linkset is a graph of unresolved +// identities. +// +// Since gen.Ident can only represent +// one level of type indirection (e.g. Foo -> uint8), +// type declarations like `type Foo Bar` +// aren't resolve-able until we've processed +// everything else. +// +// The goal of this dependency resolution +// is to distill the type declaration +// into just one level of indirection. +// In other words, if we have: +// +// type A uint64 +// type B A +// type C B +// type D C +// +// ... then we want to end up +// figuring out that D is just a uint64. +type linkset map[string]*gen.BaseElem + +func (f *FileSet) resolve(ls linkset) { + progress := true + for progress && len(ls) > 0 { + progress = false + for name, elem := range ls { + real, ok := f.Identities[elem.TypeName()] + if ok { + // copy the old type descriptor, + // alias it to the new value, + // and insert it into the resolved + // identities list + progress = true + nt := real.Copy() + nt.Alias(name) + f.Identities[name] = nt + delete(ls, name) + } + } + } + + // what's left can't be resolved + for name, elem := range ls { + warnf("couldn't resolve type %s (%s)\n", name, elem.TypeName()) + } +} + +// process takes the contents of f.Specs and +// uses them to populate f.Identities +func (f *FileSet) process() { + + deferred := make(linkset) +parse: + for name, def := range f.Specs { + pushstate(name) + el := f.parseExpr(def) + if el == nil { + warnln("failed to parse") + popstate() + continue parse + } + // push unresolved identities into + // the graph of links and resolve after + // we've handled every possible named type. + if be, ok := el.(*gen.BaseElem); ok && be.Value == gen.IDENT { + deferred[name] = be + popstate() + continue parse + } + el.Alias(name) + f.Identities[name] = el + popstate() + } + + if len(deferred) > 0 { + f.resolve(deferred) + } +} + +func strToMethod(s string) gen.Method { + switch s { + case "encode": + return gen.Encode + case "decode": + return gen.Decode + case "test": + return gen.Test + case "size": + return gen.Size + case "marshal": + return gen.Marshal + case "unmarshal": + return gen.Unmarshal + default: + return 0 + } +} + +func (f *FileSet) applyDirs(p *gen.Printer) { + // apply directives of the form + // + // //msgp:encode ignore {{TypeName}} + // +loop: + for _, d := range f.Directives { + chunks := strings.Split(d, " ") + if len(chunks) > 1 { + for i := range chunks { + chunks[i] = strings.TrimSpace(chunks[i]) + } + m := strToMethod(chunks[0]) + if m == 0 { + warnf("unknown pass name: %q\n", chunks[0]) + continue loop + } + if fn, ok := passDirectives[chunks[1]]; ok { + pushstate(chunks[1]) + err := fn(m, chunks[2:], p) + if err != nil { + warnf("error applying directive: %s\n", err) + } + popstate() + } else { + warnf("unrecognized directive %q\n", chunks[1]) + } + } else { + warnf("empty directive: %q\n", d) + } + } +} + +func (f *FileSet) PrintTo(p *gen.Printer) error { + f.applyDirs(p) + names := make([]string, 0, len(f.Identities)) + for name := range f.Identities { + names = append(names, name) + } + sort.Strings(names) + for _, name := range names { + el := f.Identities[name] + el.SetVarname("z") + pushstate(el.TypeName()) + err := p.Print(el) + popstate() + if err != nil { + return err + } + } + return nil +} + +// getTypeSpecs extracts all of the *ast.TypeSpecs in the file +// into fs.Identities, but does not set the actual element +func (fs *FileSet) getTypeSpecs(f *ast.File) { + + // collect all imports... + fs.Imports = append(fs.Imports, f.Imports...) + + // check all declarations... + for i := range f.Decls { + + // for GenDecls... + if g, ok := f.Decls[i].(*ast.GenDecl); ok { + + // and check the specs... + for _, s := range g.Specs { + + // for ast.TypeSpecs.... + if ts, ok := s.(*ast.TypeSpec); ok { + switch ts.Type.(type) { + + // this is the list of parse-able + // type specs + case *ast.StructType, + *ast.ArrayType, + *ast.StarExpr, + *ast.MapType, + *ast.Ident: + fs.Specs[ts.Name.Name] = ts.Type + + } + } + } + } + } +} + +func fieldName(f *ast.Field) string { + switch len(f.Names) { + case 0: + return stringify(f.Type) + case 1: + return f.Names[0].Name + default: + return f.Names[0].Name + " (and others)" + } +} + +func (fs *FileSet) parseFieldList(fl *ast.FieldList) []gen.StructField { + if fl == nil || fl.NumFields() == 0 { + return nil + } + out := make([]gen.StructField, 0, fl.NumFields()) + for _, field := range fl.List { + pushstate(fieldName(field)) + fds := fs.getField(field) + if len(fds) > 0 { + out = append(out, fds...) + } else { + warnln("ignored.") + } + popstate() + } + return out +} + +// translate *ast.Field into []gen.StructField +func (fs *FileSet) getField(f *ast.Field) []gen.StructField { + sf := make([]gen.StructField, 1) + var extension bool + // parse tag; otherwise field name is field tag + if f.Tag != nil { + body := reflect.StructTag(strings.Trim(f.Tag.Value, "`")).Get("msg") + tags := strings.Split(body, ",") + if len(tags) == 2 && tags[1] == "extension" { + extension = true + } + // ignore "-" fields + if tags[0] == "-" { + return nil + } + sf[0].FieldTag = tags[0] + sf[0].RawTag = f.Tag.Value + } + + ex := fs.parseExpr(f.Type) + if ex == nil { + return nil + } + + // parse field name + switch len(f.Names) { + case 0: + sf[0].FieldName = embedded(f.Type) + case 1: + sf[0].FieldName = f.Names[0].Name + default: + // this is for a multiple in-line declaration, + // e.g. type A struct { One, Two int } + sf = sf[0:0] + for _, nm := range f.Names { + sf = append(sf, gen.StructField{ + FieldTag: nm.Name, + FieldName: nm.Name, + FieldElem: ex.Copy(), + }) + } + return sf + } + sf[0].FieldElem = ex + if sf[0].FieldTag == "" { + sf[0].FieldTag = sf[0].FieldName + } + + // validate extension + if extension { + switch ex := ex.(type) { + case *gen.Ptr: + if b, ok := ex.Value.(*gen.BaseElem); ok { + b.Value = gen.Ext + } else { + warnln("couldn't cast to extension.") + return nil + } + case *gen.BaseElem: + ex.Value = gen.Ext + default: + warnln("couldn't cast to extension.") + return nil + } + } + return sf +} + +// extract embedded field name +// +// so, for a struct like +// +// type A struct { +// io.Writer +// } +// +// we want "Writer" +func embedded(f ast.Expr) string { + switch f := f.(type) { + case *ast.Ident: + return f.Name + case *ast.StarExpr: + return embedded(f.X) + case *ast.SelectorExpr: + return f.Sel.Name + default: + // other possibilities are disallowed + return "" + } +} + +// stringify a field type name +func stringify(e ast.Expr) string { + switch e := e.(type) { + case *ast.Ident: + return e.Name + case *ast.StarExpr: + return "*" + stringify(e.X) + case *ast.SelectorExpr: + return stringify(e.X) + "." + e.Sel.Name + case *ast.ArrayType: + if e.Len == nil { + return "[]" + stringify(e.Elt) + } + return fmt.Sprintf("[%s]%s", stringify(e.Len), stringify(e.Elt)) + case *ast.InterfaceType: + if e.Methods == nil || e.Methods.NumFields() == 0 { + return "interface{}" + } + } + return "" +} + +// recursively translate ast.Expr to gen.Elem; nil means type not supported +// expected input types: +// - *ast.MapType (map[T]J) +// - *ast.Ident (name) +// - *ast.ArrayType ([(sz)]T) +// - *ast.StarExpr (*T) +// - *ast.StructType (struct {}) +// - *ast.SelectorExpr (a.B) +// - *ast.InterfaceType (interface {}) +func (fs *FileSet) parseExpr(e ast.Expr) gen.Elem { + switch e := e.(type) { + + case *ast.MapType: + if k, ok := e.Key.(*ast.Ident); ok && k.Name == "string" { + if in := fs.parseExpr(e.Value); in != nil { + return &gen.Map{Value: in} + } + } + return nil + + case *ast.Ident: + b := gen.Ident(e.Name) + + // work to resove this expression + // can be done later, once we've resolved + // everything else. + if b.Value == gen.IDENT { + if _, ok := fs.Specs[e.Name]; !ok { + warnf("non-local identifier: %s\n", e.Name) + } + } + return b + + case *ast.ArrayType: + + // special case for []byte + if e.Len == nil { + if i, ok := e.Elt.(*ast.Ident); ok && i.Name == "byte" { + return &gen.BaseElem{Value: gen.Bytes} + } + } + + // return early if we don't know + // what the slice element type is + els := fs.parseExpr(e.Elt) + if els == nil { + return nil + } + + // array and not a slice + if e.Len != nil { + switch s := e.Len.(type) { + case *ast.BasicLit: + return &gen.Array{ + Size: s.Value, + Els: els, + } + + case *ast.Ident: + return &gen.Array{ + Size: s.String(), + Els: els, + } + + case *ast.SelectorExpr: + return &gen.Array{ + Size: stringify(s), + Els: els, + } + + default: + return nil + } + } + return &gen.Slice{Els: els} + + case *ast.StarExpr: + if v := fs.parseExpr(e.X); v != nil { + return &gen.Ptr{Value: v} + } + return nil + + case *ast.StructType: + return &gen.Struct{Fields: fs.parseFieldList(e.Fields)} + + case *ast.SelectorExpr: + return gen.Ident(stringify(e)) + + case *ast.InterfaceType: + // support `interface{}` + if len(e.Methods.List) == 0 { + return &gen.BaseElem{Value: gen.Intf} + } + return nil + + default: // other types not supported + return nil + } +} + +func infof(s string, v ...interface{}) { + pushstate(s) + fmt.Printf(chalk.Green.Color(strings.Join(logctx, ": ")), v...) + popstate() +} + +func infoln(s string) { + pushstate(s) + fmt.Println(chalk.Green.Color(strings.Join(logctx, ": "))) + popstate() +} + +func warnf(s string, v ...interface{}) { + pushstate(s) + fmt.Printf(chalk.Yellow.Color(strings.Join(logctx, ": ")), v...) + popstate() +} + +func warnln(s string) { + pushstate(s) + fmt.Println(chalk.Yellow.Color(strings.Join(logctx, ": "))) + popstate() +} + +func fatalf(s string, v ...interface{}) { + pushstate(s) + fmt.Printf(chalk.Red.Color(strings.Join(logctx, ": ")), v...) + popstate() +} + +var logctx []string + +// push logging state +func pushstate(s string) { + logctx = append(logctx, s) +} + +// pop logging state +func popstate() { + logctx = logctx[:len(logctx)-1] +} diff --git a/vendor/github.com/tinylib/msgp/parse/inline.go b/vendor/github.com/tinylib/msgp/parse/inline.go new file mode 100644 index 0000000..5dba4e5 --- /dev/null +++ b/vendor/github.com/tinylib/msgp/parse/inline.go @@ -0,0 +1,146 @@ +package parse + +import ( + "github.com/tinylib/msgp/gen" +) + +// This file defines when and how we +// propagate type information from +// one type declaration to another. +// After the processing pass, every +// non-primitive type is marshalled/unmarshalled/etc. +// through a function call. Here, we propagate +// the type information into the caller's type +// tree *if* the child type is simple enough. +// +// For example, types like +// +// type A [4]int +// +// will get pushed into parent methods, +// whereas types like +// +// type B [3]map[string]struct{A, B [4]string} +// +// will not. + +// this is an approximate measure +// of the number of children in a node +const maxComplex = 5 + +// begin recursive search for identities with the +// given name and replace them with be +func (f *FileSet) findShim(id string, be *gen.BaseElem) { + for name, el := range f.Identities { + pushstate(name) + switch el := el.(type) { + case *gen.Struct: + for i := range el.Fields { + f.nextShim(&el.Fields[i].FieldElem, id, be) + } + case *gen.Array: + f.nextShim(&el.Els, id, be) + case *gen.Slice: + f.nextShim(&el.Els, id, be) + case *gen.Map: + f.nextShim(&el.Value, id, be) + case *gen.Ptr: + f.nextShim(&el.Value, id, be) + } + popstate() + } + // we'll need this at the top level as well + f.Identities[id] = be +} + +func (f *FileSet) nextShim(ref *gen.Elem, id string, be *gen.BaseElem) { + if (*ref).TypeName() == id { + vn := (*ref).Varname() + *ref = be.Copy() + (*ref).SetVarname(vn) + } else { + switch el := (*ref).(type) { + case *gen.Struct: + for i := range el.Fields { + f.nextShim(&el.Fields[i].FieldElem, id, be) + } + case *gen.Array: + f.nextShim(&el.Els, id, be) + case *gen.Slice: + f.nextShim(&el.Els, id, be) + case *gen.Map: + f.nextShim(&el.Value, id, be) + case *gen.Ptr: + f.nextShim(&el.Value, id, be) + } + } +} + +// propInline identifies and inlines candidates +func (f *FileSet) propInline() { + for name, el := range f.Identities { + pushstate(name) + switch el := el.(type) { + case *gen.Struct: + for i := range el.Fields { + f.nextInline(&el.Fields[i].FieldElem, name) + } + case *gen.Array: + f.nextInline(&el.Els, name) + case *gen.Slice: + f.nextInline(&el.Els, name) + case *gen.Map: + f.nextInline(&el.Value, name) + case *gen.Ptr: + f.nextInline(&el.Value, name) + } + popstate() + } +} + +const fatalloop = `detected infinite recursion in inlining loop! +Please file a bug at github.com/tinylib/msgp/issues! +Thanks! +` + +func (f *FileSet) nextInline(ref *gen.Elem, root string) { + switch el := (*ref).(type) { + case *gen.BaseElem: + // ensure that we're not inlining + // a type into itself + typ := el.TypeName() + if el.Value == gen.IDENT && typ != root { + if node, ok := f.Identities[typ]; ok && node.Complexity() < maxComplex { + infof("inlining %s\n", typ) + + // This should never happen; it will cause + // infinite recursion. + if node == *ref { + panic(fatalloop) + } + + *ref = node.Copy() + f.nextInline(ref, node.TypeName()) + } else if !ok && !el.Resolved() { + // this is the point at which we're sure that + // we've got a type that isn't a primitive, + // a library builtin, or a processed type + warnf("unresolved identifier: %s\n", typ) + } + } + case *gen.Struct: + for i := range el.Fields { + f.nextInline(&el.Fields[i].FieldElem, root) + } + case *gen.Array: + f.nextInline(&el.Els, root) + case *gen.Slice: + f.nextInline(&el.Els, root) + case *gen.Map: + f.nextInline(&el.Value, root) + case *gen.Ptr: + f.nextInline(&el.Value, root) + default: + panic("bad elem type") + } +} diff --git a/vendor/github.com/tinylib/msgp/printer/print.go b/vendor/github.com/tinylib/msgp/printer/print.go new file mode 100644 index 0000000..d3ef52d --- /dev/null +++ b/vendor/github.com/tinylib/msgp/printer/print.go @@ -0,0 +1,129 @@ +package printer + +import ( + "bytes" + "fmt" + "io" + "io/ioutil" + "strings" + + "github.com/tinylib/msgp/gen" + "github.com/tinylib/msgp/parse" + "github.com/ttacon/chalk" + "golang.org/x/tools/imports" +) + +func infof(s string, v ...interface{}) { + fmt.Printf(chalk.Magenta.Color(s), v...) +} + +// PrintFile prints the methods for the provided list +// of elements to the given file name and canonical +// package path. +func PrintFile(file string, f *parse.FileSet, mode gen.Method) error { + out, tests, err := generate(f, mode) + if err != nil { + return err + } + + // we'll run goimports on the main file + // in another goroutine, and run it here + // for the test file. empirically, this + // takes about the same amount of time as + // doing them in serial when GOMAXPROCS=1, + // and faster otherwise. + res := goformat(file, out.Bytes()) + if tests != nil { + testfile := strings.TrimSuffix(file, ".go") + "_test.go" + err = format(testfile, tests.Bytes()) + if err != nil { + return err + } + infof(">>> Wrote and formatted \"%s\"\n", testfile) + } + err = <-res + if err != nil { + return err + } + return nil +} + +func format(file string, data []byte) error { + out, err := imports.Process(file, data, nil) + if err != nil { + return err + } + return ioutil.WriteFile(file, out, 0600) +} + +func goformat(file string, data []byte) <-chan error { + out := make(chan error, 1) + go func(file string, data []byte, end chan error) { + end <- format(file, data) + infof(">>> Wrote and formatted \"%s\"\n", file) + }(file, data, out) + return out +} + +func dedupImports(imp []string) []string { + m := make(map[string]struct{}) + for i := range imp { + m[imp[i]] = struct{}{} + } + r := []string{} + for k := range m { + r = append(r, k) + } + return r +} + +func generate(f *parse.FileSet, mode gen.Method) (*bytes.Buffer, *bytes.Buffer, error) { + outbuf := bytes.NewBuffer(make([]byte, 0, 4096)) + writePkgHeader(outbuf, f.Package) + + myImports := []string{"github.com/tinylib/msgp/msgp"} + for _, imp := range f.Imports { + if imp.Name != nil { + // have an alias, include it. + myImports = append(myImports, imp.Name.Name+` `+imp.Path.Value) + } else { + myImports = append(myImports, imp.Path.Value) + } + } + dedup := dedupImports(myImports) + writeImportHeader(outbuf, dedup...) + + var testbuf *bytes.Buffer + var testwr io.Writer + if mode&gen.Test == gen.Test { + testbuf = bytes.NewBuffer(make([]byte, 0, 4096)) + writePkgHeader(testbuf, f.Package) + if mode&(gen.Encode|gen.Decode) != 0 { + writeImportHeader(testbuf, "bytes", "github.com/tinylib/msgp/msgp", "testing") + } else { + writeImportHeader(testbuf, "github.com/tinylib/msgp/msgp", "testing") + } + testwr = testbuf + } + return outbuf, testbuf, f.PrintTo(gen.NewPrinter(mode, outbuf, testwr)) +} + +func writePkgHeader(b *bytes.Buffer, name string) { + b.WriteString("package ") + b.WriteString(name) + b.WriteByte('\n') + b.WriteString("// NOTE: THIS FILE WAS PRODUCED BY THE\n// MSGP CODE GENERATION TOOL (github.com/tinylib/msgp)\n// DO NOT EDIT\n\n") +} + +func writeImportHeader(b *bytes.Buffer, imports ...string) { + b.WriteString("import (\n") + for _, im := range imports { + if im[len(im)-1] == '"' { + // support aliased imports + fmt.Fprintf(b, "\t%s\n", im) + } else { + fmt.Fprintf(b, "\t%q\n", im) + } + } + b.WriteString(")\n\n") +} diff --git a/vendor/github.com/willf/bitset/.gitignore b/vendor/github.com/willf/bitset/.gitignore new file mode 100644 index 0000000..5c204d2 --- /dev/null +++ b/vendor/github.com/willf/bitset/.gitignore @@ -0,0 +1,26 @@ +# 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 +*.test +*.prof + +target diff --git a/vendor/github.com/willf/bitset/.travis.yml b/vendor/github.com/willf/bitset/.travis.yml new file mode 100644 index 0000000..11a99a2 --- /dev/null +++ b/vendor/github.com/willf/bitset/.travis.yml @@ -0,0 +1,16 @@ +language: go + +sudo: false + +branches: + except: + - release + +branches: + only: + - master + - develop + +go: + - 1.5 + - tip diff --git a/vendor/github.com/willf/bitset/LICENSE b/vendor/github.com/willf/bitset/LICENSE new file mode 100644 index 0000000..59cab8a --- /dev/null +++ b/vendor/github.com/willf/bitset/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2014 Will Fitzgerald. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/willf/bitset/Makefile b/vendor/github.com/willf/bitset/Makefile new file mode 100644 index 0000000..a4d3f2b --- /dev/null +++ b/vendor/github.com/willf/bitset/Makefile @@ -0,0 +1,109 @@ +# MAKEFILE +# +# @author Nicola Asuni +# @link https://github.com/willf/bitset +# ------------------------------------------------------------------------------ + +# List special make targets that are not associated with files +.PHONY: help all qa test format fmtcheck vet lint coverage docs deps clean nuke + +# Use bash as shell (Note: Ubuntu now uses dash which doesn't support PIPESTATUS). +SHELL=/bin/bash + +# Project owner +OWNER=willf + +# Project name +PROJECT=bitset + +# Name of RPM or DEB package +PKGNAME=${OWNER}-${PROJECT} + +# Go lang path. Set if necessary +# GOPATH=$(shell readlink -f $(shell pwd)/../../../../) + +# Current directory +CURRENTDIR=$(shell pwd) + +# --- MAKE TARGETS --- + +# Display general help about this command +help: + @echo "" + @echo "$(PROJECT) Makefile." + @echo "The following commands are available:" + @echo "" + @echo " make qa : Run all the tests" + @echo " make test : Run the unit tests" + @echo "" + @echo " make format : Format the source code" + @echo " make fmtcheck : Check if the source code has been formatted" + @echo " make vet : Check for syntax errors" + @echo " make lint : Check for style errors" + @echo " make coverage : Generate the coverage report" + @echo "" + @echo " make docs : Generate source code documentation" + @echo "" + @echo " make deps : Get the dependencies" + @echo " make clean : Remove any build artifact" + @echo " make nuke : Deletes any intermediate file" + @echo "" + +# Alias for help target +all: help + +# Run the unit tests +test: + @mkdir -p target/test + @mkdir -p target/report + GOPATH=$(GOPATH) go test -covermode=count -coverprofile=target/report/coverage.out -bench=. -race -v ./... | tee >(PATH=$(GOPATH)/bin:$(PATH) go-junit-report > target/test/report.xml); test $${PIPESTATUS[0]} -eq 0 + +# Format the source code +format: + @find ./ -type f -name "*.go" -exec gofmt -w {} \; + +# Check if the source code has been formatted +fmtcheck: + @mkdir -p target + @find ./ -type f -name "*.go" -exec gofmt -d {} \; | tee target/format.diff + @test ! -s target/format.diff || { echo "ERROR: the source code has not been formatted - please use 'make format' or 'gofmt'"; exit 1; } + +# Check for syntax errors +vet: + GOPATH=$(GOPATH) go vet ./... + +# Check for style errors +lint: + GOPATH=$(GOPATH) PATH=$(GOPATH)/bin:$(PATH) golint ./... + +# Generate the coverage report +coverage: + GOPATH=$(GOPATH) go tool cover -html=target/report/coverage.out -o target/report/coverage.html + +# Generate source docs +docs: + @mkdir -p target/docs + nohup sh -c 'GOPATH=$(GOPATH) godoc -http=127.0.0.1:6060' > target/godoc_server.log 2>&1 & + wget --directory-prefix=target/docs/ --execute robots=off --retry-connrefused --recursive --no-parent --adjust-extension --page-requisites --convert-links http://127.0.0.1:6060/pkg/github.com/${OWNER}/${PROJECT}/ ; kill -9 `lsof -ti :6060` + @echo ''${PKGNAME}' Documentation ...' > target/docs/index.html + +# Alias to run targets: fmtcheck test vet lint coverage +qa: fmtcheck test vet lint coverage + +# --- INSTALL --- + +# Get the dependencies +deps: + GOPATH=$(GOPATH) go get ./... + GOPATH=$(GOPATH) go get github.com/golang/lint/golint + GOPATH=$(GOPATH) go get github.com/jstemmer/go-junit-report + GOPATH=$(GOPATH) go get github.com/axw/gocov/gocov + +# Remove any build artifact +clean: + GOPATH=$(GOPATH) go clean ./... + +# Deletes any intermediate file +nuke: + rm -rf ./target + GOPATH=$(GOPATH) go clean -i ./... diff --git a/vendor/github.com/willf/bitset/README.md b/vendor/github.com/willf/bitset/README.md new file mode 100644 index 0000000..2fe69a1 --- /dev/null +++ b/vendor/github.com/willf/bitset/README.md @@ -0,0 +1,65 @@ +# bitset + +*Go language library to map between non-negative integers and boolean values* + +[![Master Branch](https://img.shields.io/badge/-master:-gray.svg)](https://github.com/willf/bitset/tree/master) +[![Master Build Status](https://travis-ci.org/willf/bitset.svg?branch=master)](https://travis-ci.org/willf/bitset) +[![Develop Branch](https://img.shields.io/badge/-develop:-gray.svg)](https://github.com/willf/bitset/tree/develop) +[![Develop Build Status](https://secure.travis-ci.org/willf/bitset.svg?branch=develop)](https://travis-ci.org/willf/bitset?branch=develop) + + + +## Description + +Package bitset implements bitsets, a mapping between non-negative integers and boolean values. +It should be more efficient than map[uint] bool. + +It provides methods for setting, clearing, flipping, and testing individual integers. + +But it also provides set intersection, union, difference, complement, and symmetric operations, as well as tests to check whether any, all, or no bits are set, and querying a bitset's current length and number of postive bits. + +BitSets are expanded to the size of the largest set bit; the memory allocation is approximately Max bits, where Max is the largest set bit. BitSets are never shrunk. On creation, a hint can be given for the number of bits that will be used. + +Many of the methods, including Set, Clear, and Flip, return a BitSet pointer, which allows for chaining. + +### Example use: + + import "bitset" + var b BitSet + b.Set(10).Set(11) + if b.Test(1000) { + b.Clear(1000) + } + for i,e := v.NextSet(0); e; i,e = v.NextSet(i + 1) { + frmt.Println("The following bit is set:",i); + } + if B.Intersection(bitset.New(100).Set(10)).Count() > 1 { + fmt.Println("Intersection works.") + } + +As an alternative to BitSets, one should check out the 'big' package, which provides a (less set-theoretical) view of bitsets. + +Discussions golang-nuts Google Group: + +* [Revised BitSet](https://groups.google.com/forum/#!topic/golang-nuts/5i3l0CXDiBg) +* [simple bitset?](https://groups.google.com/d/topic/golang-nuts/7n1VkRTlBf4/discussion) + +Godoc documentation is at: https://godoc.org/github.com/willf/bitset + + +## Getting started + +This application is written in the go language, please refer to the guides in https://golang.org for getting started. + +This project include a Makefile that allows you to test and build the project with simple commands. +To see all available options: +```bash +make help +``` + +## Running all tests + +Before committing the code, please check if it passes all tests using +```bash +make qa +``` diff --git a/vendor/github.com/willf/bitset/RELEASE b/vendor/github.com/willf/bitset/RELEASE new file mode 100644 index 0000000..56a6051 --- /dev/null +++ b/vendor/github.com/willf/bitset/RELEASE @@ -0,0 +1 @@ +1 \ No newline at end of file diff --git a/vendor/github.com/willf/bitset/VERSION b/vendor/github.com/willf/bitset/VERSION new file mode 100644 index 0000000..9084fa2 --- /dev/null +++ b/vendor/github.com/willf/bitset/VERSION @@ -0,0 +1 @@ +1.1.0 diff --git a/vendor/github.com/willf/bitset/bitset.go b/vendor/github.com/willf/bitset/bitset.go new file mode 100644 index 0000000..1bc27f2 --- /dev/null +++ b/vendor/github.com/willf/bitset/bitset.go @@ -0,0 +1,650 @@ +/* +Package bitset implements bitsets, a mapping +between non-negative integers and boolean values. It should be more +efficient than map[uint] bool. + +It provides methods for setting, clearing, flipping, and testing +individual integers. + +But it also provides set intersection, union, difference, +complement, and symmetric operations, as well as tests to +check whether any, all, or no bits are set, and querying a +bitset's current length and number of postive bits. + +BitSets are expanded to the size of the largest set bit; the +memory allocation is approximately Max bits, where Max is +the largest set bit. BitSets are never shrunk. On creation, +a hint can be given for the number of bits that will be used. + +Many of the methods, including Set,Clear, and Flip, return +a BitSet pointer, which allows for chaining. + +Example use: + + import "bitset" + var b BitSet + b.Set(10).Set(11) + if b.Test(1000) { + b.Clear(1000) + } + if B.Intersection(bitset.New(100).Set(10)).Count() > 1 { + fmt.Println("Intersection works.") + } + +As an alternative to BitSets, one should check out the 'big' package, +which provides a (less set-theoretical) view of bitsets. + +*/ +package bitset + +import ( + "bufio" + "bytes" + "encoding/base64" + "encoding/binary" + "encoding/json" + "errors" + "fmt" + "io" +) + +// the wordSize of a bit set +const wordSize = uint(64) + +// log2WordSize is lg(wordSize) +const log2WordSize = uint(6) + +// A BitSet is a set of bits. The zero value of a BitSet is an empty set of length 0. +type BitSet struct { + length uint + set []uint64 +} + +// Error is used to distinguish errors (panics) generated in this package. +type Error string + +// safeSet will fixup b.set to be non-nil and return the field value +func (b *BitSet) safeSet() []uint64 { + if b.set == nil { + b.set = make([]uint64, wordsNeeded(0)) + } + return b.set +} + +// From is a constructor used to create a BitSet from an array of integers +func From(buf []uint64) *BitSet { + return &BitSet{uint(len(buf)) * 64, buf} +} + +// Bytes returns the bitset as array of integers +func (b *BitSet) Bytes() []uint64 { + return b.set +} + +// wordsNeeded calculates the number of words needed for i bits +func wordsNeeded(i uint) int { + if i > ((^uint(0)) - wordSize + 1) { + return int((^uint(0)) >> log2WordSize) + } + return int((i + (wordSize - 1)) >> log2WordSize) +} + +// New creates a new BitSet with a hint that length bits will be required +func New(length uint) *BitSet { + return &BitSet{length, make([]uint64, wordsNeeded(length))} +} + +// Cap returns the total possible capicity, or number of bits +func Cap() uint { + return ^uint(0) +} + +// Len returns the length of the BitSet in words +func (b *BitSet) Len() uint { + return b.length +} + +// extendSetMaybe adds additional words to incorporate new bits if needed +func (b *BitSet) extendSetMaybe(i uint) { + if i >= b.length { // if we need more bits, make 'em + nsize := wordsNeeded(i + 1) + if b.set == nil { + b.set = make([]uint64, nsize) + } else if len(b.set) < nsize { + newset := make([]uint64, nsize) + copy(newset, b.set) + b.set = newset + } + b.length = i + 1 + } +} + +// Test whether bit i is set. +func (b *BitSet) Test(i uint) bool { + if i >= b.length { + return false + } + return b.set[i>>log2WordSize]&(1<<(i&(wordSize-1))) != 0 +} + +// Set bit i to 1 +func (b *BitSet) Set(i uint) *BitSet { + b.extendSetMaybe(i) + b.set[i>>log2WordSize] |= 1 << (i & (wordSize - 1)) + return b +} + +// Clear bit i to 0 +func (b *BitSet) Clear(i uint) *BitSet { + if i >= b.length { + return b + } + b.set[i>>log2WordSize] &^= 1 << (i & (wordSize - 1)) + return b +} + +// SetTo sets bit i to value +func (b *BitSet) SetTo(i uint, value bool) *BitSet { + if value { + return b.Set(i) + } + return b.Clear(i) +} + +// Flip bit at i +func (b *BitSet) Flip(i uint) *BitSet { + if i >= b.length { + return b.Set(i) + } + b.set[i>>log2WordSize] ^= 1 << (i & (wordSize - 1)) + return b +} + +// NextSet returns the next bit set from the specified index, +// including possibly the current index +// along with an error code (true = valid, false = no set bit found) +// for i,e := v.NextSet(0); e; i,e = v.NextSet(i + 1) {...} +func (b *BitSet) NextSet(i uint) (uint, bool) { + x := int(i >> log2WordSize) + if x >= len(b.set) { + return 0, false + } + w := b.set[x] + w = w >> (i & (wordSize - 1)) + if w != 0 { + return i + trailingZeroes64(w), true + } + x = x + 1 + for x < len(b.set) { + if b.set[x] != 0 { + return uint(x)*wordSize + trailingZeroes64(b.set[x]), true + } + x = x + 1 + + } + return 0, false +} + +// ClearAll clears the entire BitSet +func (b *BitSet) ClearAll() *BitSet { + if b != nil && b.set != nil { + for i := range b.set { + b.set[i] = 0 + } + } + return b +} + +// wordCount returns the number of words used in a bit set +func (b *BitSet) wordCount() int { + return wordsNeeded(b.length) +} + +// Clone this BitSet +func (b *BitSet) Clone() *BitSet { + c := New(b.length) + if b.set != nil { // Clone should not modify current object + copy(c.set, b.set) + } + return c +} + +// Copy into a destination BitSet +// Returning the size of the destination BitSet +// like array copy +func (b *BitSet) Copy(c *BitSet) (count uint) { + if c == nil { + return + } + if b.set != nil { // Copy should not modify current object + copy(c.set, b.set) + } + count = c.length + if b.length < c.length { + count = b.length + } + return +} + +// Count (number of set bits) +func (b *BitSet) Count() uint { + if b != nil && b.set != nil { + return uint(popcntSlice(b.set)) + } + return 0 +} + +var deBruijn = [...]byte{ + 0, 1, 56, 2, 57, 49, 28, 3, 61, 58, 42, 50, 38, 29, 17, 4, + 62, 47, 59, 36, 45, 43, 51, 22, 53, 39, 33, 30, 24, 18, 12, 5, + 63, 55, 48, 27, 60, 41, 37, 16, 46, 35, 44, 21, 52, 32, 23, 11, + 54, 26, 40, 15, 34, 20, 31, 10, 25, 14, 19, 9, 13, 8, 7, 6, +} + +func trailingZeroes64(v uint64) uint { + return uint(deBruijn[((v&-v)*0x03f79d71b4ca8b09)>>58]) +} + +// Equal tests the equvalence of two BitSets. +// False if they are of different sizes, otherwise true +// only if all the same bits are set +func (b *BitSet) Equal(c *BitSet) bool { + if c == nil { + return false + } + if b.length != c.length { + return false + } + if b.length == 0 { // if they have both length == 0, then could have nil set + return true + } + // testing for equality shoud not transform the bitset (no call to safeSet) + + for p, v := range b.set { + if c.set[p] != v { + return false + } + } + return true +} + +func panicIfNull(b *BitSet) { + if b == nil { + panic(Error("BitSet must not be null")) + } +} + +// Difference of base set and other set +// This is the BitSet equivalent of &^ (and not) +func (b *BitSet) Difference(compare *BitSet) (result *BitSet) { + panicIfNull(b) + panicIfNull(compare) + result = b.Clone() // clone b (in case b is bigger than compare) + l := int(compare.wordCount()) + if l > int(b.wordCount()) { + l = int(b.wordCount()) + } + for i := 0; i < l; i++ { + result.set[i] = b.set[i] &^ compare.set[i] + } + return +} + +// DifferenceCardinality computes the cardinality of the differnce +func (b *BitSet) DifferenceCardinality(compare *BitSet) uint { + panicIfNull(b) + panicIfNull(compare) + l := int(compare.wordCount()) + if l > int(b.wordCount()) { + l = int(b.wordCount()) + } + cnt := uint64(0) + cnt += popcntMaskSlice(b.set[:l], compare.set[:l]) + cnt += popcntSlice(b.set[l:]) + return uint(cnt) +} + +// InPlaceDifference computes the difference of base set and other set +// This is the BitSet equivalent of &^ (and not) +func (b *BitSet) InPlaceDifference(compare *BitSet) { + panicIfNull(b) + panicIfNull(compare) + l := int(compare.wordCount()) + if l > int(b.wordCount()) { + l = int(b.wordCount()) + } + for i := 0; i < l; i++ { + b.set[i] &^= compare.set[i] + } +} + +// Convenience function: return two bitsets ordered by +// increasing length. Note: neither can be nil +func sortByLength(a *BitSet, b *BitSet) (ap *BitSet, bp *BitSet) { + if a.length <= b.length { + ap, bp = a, b + } else { + ap, bp = b, a + } + return +} + +// Intersection of base set and other set +// This is the BitSet equivalent of & (and) +func (b *BitSet) Intersection(compare *BitSet) (result *BitSet) { + panicIfNull(b) + panicIfNull(compare) + b, compare = sortByLength(b, compare) + result = New(b.length) + for i, word := range b.set { + result.set[i] = word & compare.set[i] + } + return +} + +// IntersectionCardinality computes the cardinality of the union +func (b *BitSet) IntersectionCardinality(compare *BitSet) uint { + panicIfNull(b) + panicIfNull(compare) + b, compare = sortByLength(b, compare) + cnt := popcntAndSlice(b.set, compare.set) + return uint(cnt) +} + +// InPlaceIntersection destructively computes the intersection of +// base set and the compare set. +// This is the BitSet equivalent of & (and) +func (b *BitSet) InPlaceIntersection(compare *BitSet) { + panicIfNull(b) + panicIfNull(compare) + l := int(compare.wordCount()) + if l > int(b.wordCount()) { + l = int(b.wordCount()) + } + for i := 0; i < l; i++ { + b.set[i] &= compare.set[i] + } + for i := l; i < len(b.set); i++ { + b.set[i] = 0 + } + if compare.length > 0 { + b.extendSetMaybe(compare.length - 1) + } + return +} + +// Union of base set and other set +// This is the BitSet equivalent of | (or) +func (b *BitSet) Union(compare *BitSet) (result *BitSet) { + panicIfNull(b) + panicIfNull(compare) + b, compare = sortByLength(b, compare) + result = compare.Clone() + for i, word := range b.set { + result.set[i] = word | compare.set[i] + } + return +} + +// UnionCardinality computes the cardinality of the uniton of the base set +// and the compare set. +func (b *BitSet) UnionCardinality(compare *BitSet) uint { + panicIfNull(b) + panicIfNull(compare) + b, compare = sortByLength(b, compare) + cnt := popcntOrSlice(b.set, compare.set) + if len(compare.set) > len(b.set) { + cnt += popcntSlice(compare.set[len(b.set):]) + } + return uint(cnt) +} + +// InPlaceUnion creates the destructive union of base set and compare set. +// This is the BitSet equivalent of | (or). +func (b *BitSet) InPlaceUnion(compare *BitSet) { + panicIfNull(b) + panicIfNull(compare) + l := int(compare.wordCount()) + if l > int(b.wordCount()) { + l = int(b.wordCount()) + } + if compare.length > 0 { + b.extendSetMaybe(compare.length - 1) + } + for i := 0; i < l; i++ { + b.set[i] |= compare.set[i] + } + if len(compare.set) > l { + for i := l; i < len(compare.set); i++ { + b.set[i] = compare.set[i] + } + } +} + +// SymmetricDifference of base set and other set +// This is the BitSet equivalent of ^ (xor) +func (b *BitSet) SymmetricDifference(compare *BitSet) (result *BitSet) { + panicIfNull(b) + panicIfNull(compare) + b, compare = sortByLength(b, compare) + // compare is bigger, so clone it + result = compare.Clone() + for i, word := range b.set { + result.set[i] = word ^ compare.set[i] + } + return +} + +// SymmetricDifferenceCardinality computes the cardinality of the symmetric difference +func (b *BitSet) SymmetricDifferenceCardinality(compare *BitSet) uint { + panicIfNull(b) + panicIfNull(compare) + b, compare = sortByLength(b, compare) + cnt := popcntXorSlice(b.set, compare.set) + if len(compare.set) > len(b.set) { + cnt += popcntSlice(compare.set[len(b.set):]) + } + return uint(cnt) +} + +// InPlaceSymmetricDifference creates the destructive SymmetricDifference of base set and other set +// This is the BitSet equivalent of ^ (xor) +func (b *BitSet) InPlaceSymmetricDifference(compare *BitSet) { + panicIfNull(b) + panicIfNull(compare) + l := int(compare.wordCount()) + if l > int(b.wordCount()) { + l = int(b.wordCount()) + } + if compare.length > 0 { + b.extendSetMaybe(compare.length - 1) + } + for i := 0; i < l; i++ { + b.set[i] ^= compare.set[i] + } + if len(compare.set) > l { + for i := l; i < len(compare.set); i++ { + b.set[i] = compare.set[i] + } + } +} + +// Is the length an exact multiple of word sizes? +func (b *BitSet) isEven() bool { + return b.length%wordSize == 0 +} + +// Clean last word by setting unused bits to 0 +func (b *BitSet) cleanLastWord() { + if !b.isEven() { + // Mask for cleaning last word + const allBits uint64 = 0xffffffffffffffff + b.set[wordsNeeded(b.length)-1] &= allBits >> (wordSize - b.length%wordSize) + } +} + +// Complement computes the (local) complement of a biset (up to length bits) +func (b *BitSet) Complement() (result *BitSet) { + panicIfNull(b) + result = New(b.length) + for i, word := range b.set { + result.set[i] = ^word + } + result.cleanLastWord() + return +} + +// All returns true if all bits are set, false otherwise +func (b *BitSet) All() bool { + panicIfNull(b) + return b.Count() == b.length +} + +// None returns true if no bit is set, false otherwise +func (b *BitSet) None() bool { + panicIfNull(b) + if b != nil && b.set != nil { + for _, word := range b.set { + if word > 0 { + return false + } + } + return true + } + return true +} + +// Any returns true if any bit is set, false otherwise +func (b *BitSet) Any() bool { + panicIfNull(b) + return !b.None() +} + +// IsSuperSet returns true if this is a superset of the other set +func (b *BitSet) IsSuperSet(other *BitSet) bool { + for i, e := other.NextSet(0); e; i, e = other.NextSet(i + 1) { + if !b.Test(i) { + return false + } + } + return true +} + +// IsStrictSuperSet returns true if this is a strict superset of the other set +func (b *BitSet) IsStrictSuperSet(other *BitSet) bool { + return b.Count() > other.Count() && b.IsSuperSet(other) +} + +// DumpAsBits dumps a bit set as a string of bits +func (b *BitSet) DumpAsBits() string { + if b.set == nil { + return "." + } + buffer := bytes.NewBufferString("") + i := len(b.set) - 1 + for ; i >= 0; i-- { + fmt.Fprintf(buffer, "%064b.", b.set[i]) + } + return string(buffer.Bytes()) +} + +// BinaryStorageSize returns the binary storage requirements +func (b *BitSet) BinaryStorageSize() int { + return binary.Size(uint64(0)) + binary.Size(b.set) +} + +// WriteTo writes a BitSet to a stream +func (b *BitSet) WriteTo(stream io.Writer) (int64, error) { + length := uint64(b.length) + + // Write length + err := binary.Write(stream, binary.BigEndian, length) + if err != nil { + return 0, err + } + + // Write set + err = binary.Write(stream, binary.BigEndian, b.set) + return int64(b.BinaryStorageSize()), err +} + +// ReadFrom reads a BitSet from a stream written using WriteTo +func (b *BitSet) ReadFrom(stream io.Reader) (int64, error) { + var length uint64 + + // Read length first + err := binary.Read(stream, binary.BigEndian, &length) + if err != nil { + return 0, err + } + newset := New(uint(length)) + + if uint64(newset.length) != length { + return 0, errors.New("Unmarshalling error: type mismatch") + } + + // Read remaining bytes as set + err = binary.Read(stream, binary.BigEndian, newset.set) + if err != nil { + return 0, err + } + + *b = *newset + return int64(b.BinaryStorageSize()), nil +} + +// MarshalBinary encodes a BitSet into a binary form and returns the result. +func (b *BitSet) MarshalBinary() ([]byte, error) { + var buf bytes.Buffer + writer := bufio.NewWriter(&buf) + + _, err := b.WriteTo(writer) + if err != nil { + return []byte{}, err + } + + err = writer.Flush() + + return buf.Bytes(), err +} + +// UnmarshalBinary decodes the binary form generated by MarshalBinary. +func (b *BitSet) UnmarshalBinary(data []byte) error { + buf := bytes.NewReader(data) + reader := bufio.NewReader(buf) + + _, err := b.ReadFrom(reader) + + return err +} + +// MarshalJSON marshals a BitSet as a JSON structure +func (b *BitSet) MarshalJSON() ([]byte, error) { + buffer := bytes.NewBuffer(make([]byte, 0, b.BinaryStorageSize())) + _, err := b.WriteTo(buffer) + if err != nil { + return nil, err + } + + // URLEncode all bytes + return json.Marshal(base64.URLEncoding.EncodeToString(buffer.Bytes())) +} + +// UnmarshalJSON unmarshals a BitSet from JSON created using MarshalJSON +func (b *BitSet) UnmarshalJSON(data []byte) error { + // Unmarshal as string + var s string + err := json.Unmarshal(data, &s) + if err != nil { + return err + } + + // URLDecode string + buf, err := base64.URLEncoding.DecodeString(s) + if err != nil { + return err + } + + _, err = b.ReadFrom(bytes.NewReader(buf)) + return err +} diff --git a/vendor/github.com/willf/bitset/bitset_test.go b/vendor/github.com/willf/bitset/bitset_test.go new file mode 100644 index 0000000..eb017a6 --- /dev/null +++ b/vendor/github.com/willf/bitset/bitset_test.go @@ -0,0 +1,837 @@ +// Copyright 2014 Will Fitzgerald. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This file tests bit sets + +package bitset + +import ( + "encoding" + "encoding/json" + "math" + "math/rand" + "testing" +) + +func TestEmptyBitSet(t *testing.T) { + defer func() { + if r := recover(); r != nil { + t.Error("A zero-length bitset should be fine") + } + }() + b := New(0) + if b.Len() != 0 { + t.Errorf("Empty set should have capacity 0, not %d", b.Len()) + } +} + +func TestZeroValueBitSet(t *testing.T) { + defer func() { + if r := recover(); r != nil { + t.Error("A zero-length bitset should be fine") + } + }() + var b BitSet + if b.Len() != 0 { + t.Errorf("Empty set should have capacity 0, not %d", b.Len()) + } +} + +func TestBitSetNew(t *testing.T) { + v := New(16) + if v.Test(0) != false { + t.Errorf("Unable to make a bit set and read its 0th value.") + } +} + +func TestBitSetHuge(t *testing.T) { + v := New(uint(math.MaxUint32)) + if v.Test(0) != false { + t.Errorf("Unable to make a huge bit set and read its 0th value.") + } +} + +func TestLen(t *testing.T) { + v := New(1000) + if v.Len() != 1000 { + t.Errorf("Len should be 1000, but is %d.", v.Len()) + } +} + +func TestBitSetIsClear(t *testing.T) { + v := New(1000) + for i := uint(0); i < 1000; i++ { + if v.Test(i) != false { + t.Errorf("Bit %d is set, and it shouldn't be.", i) + } + } +} + +func TestExendOnBoundary(t *testing.T) { + v := New(32) + defer func() { + if r := recover(); r != nil { + t.Error("Border out of index error should not have caused a panic") + } + }() + v.Set(32) +} + +func TestExpand(t *testing.T) { + v := New(0) + defer func() { + if r := recover(); r != nil { + t.Error("Expansion should not have caused a panic") + } + }() + for i := uint(0); i < 1000; i++ { + v.Set(i) + } +} + +func TestBitSetAndGet(t *testing.T) { + v := New(1000) + v.Set(100) + if v.Test(100) != true { + t.Errorf("Bit %d is clear, and it shouldn't be.", 100) + } +} + +func TestIterate(t *testing.T) { + v := New(10000) + v.Set(0) + v.Set(1) + v.Set(2) + data := make([]uint, 3) + c := 0 + for i, e := v.NextSet(0); e; i, e = v.NextSet(i + 1) { + data[c] = i + c++ + } + if data[0] != 0 { + t.Errorf("bug 0") + } + if data[1] != 1 { + t.Errorf("bug 1") + } + if data[2] != 2 { + t.Errorf("bug 2") + } + v.Set(10) + v.Set(2000) + data = make([]uint, 5) + c = 0 + for i, e := v.NextSet(0); e; i, e = v.NextSet(i + 1) { + data[c] = i + c++ + } + if data[0] != 0 { + t.Errorf("bug 0") + } + if data[1] != 1 { + t.Errorf("bug 1") + } + if data[2] != 2 { + t.Errorf("bug 2") + } + if data[3] != 10 { + t.Errorf("bug 3") + } + if data[4] != 2000 { + t.Errorf("bug 4") + } + +} + +func TestSetTo(t *testing.T) { + v := New(1000) + v.SetTo(100, true) + if v.Test(100) != true { + t.Errorf("Bit %d is clear, and it shouldn't be.", 100) + } + v.SetTo(100, false) + if v.Test(100) != false { + t.Errorf("Bit %d is set, and it shouldn't be.", 100) + } +} + +func TestChain(t *testing.T) { + if New(1000).Set(100).Set(99).Clear(99).Test(100) != true { + t.Errorf("Bit %d is clear, and it shouldn't be.", 100) + } +} + +func TestOutOfBoundsLong(t *testing.T) { + v := New(64) + defer func() { + if r := recover(); r != nil { + t.Error("Long distance out of index error should not have caused a panic") + } + }() + v.Set(1000) +} + +func TestOutOfBoundsClose(t *testing.T) { + v := New(65) + defer func() { + if r := recover(); r != nil { + t.Error("Local out of index error should not have caused a panic") + } + }() + v.Set(66) +} + +func TestCount(t *testing.T) { + tot := uint(64*4 + 11) // just some multi unit64 number + v := New(tot) + checkLast := true + for i := uint(0); i < tot; i++ { + sz := uint(v.Count()) + if sz != i { + t.Errorf("Count reported as %d, but it should be %d", sz, i) + checkLast = false + break + } + v.Set(i) + } + if checkLast { + sz := uint(v.Count()) + if sz != tot { + t.Errorf("After all bits set, size reported as %d, but it should be %d", sz, tot) + } + } +} + +// test setting every 3rd bit, just in case something odd is happening +func TestCount2(t *testing.T) { + tot := uint(64*4 + 11) // just some multi unit64 number + v := New(tot) + for i := uint(0); i < tot; i += 3 { + sz := uint(v.Count()) + if sz != i/3 { + t.Errorf("Count reported as %d, but it should be %d", sz, i) + break + } + v.Set(i) + } +} + +// nil tests +func TestNullTest(t *testing.T) { + var v *BitSet + defer func() { + if r := recover(); r == nil { + t.Error("Checking bit of null reference should have caused a panic") + } + }() + v.Test(66) +} + +func TestNullSet(t *testing.T) { + var v *BitSet + defer func() { + if r := recover(); r == nil { + t.Error("Setting bit of null reference should have caused a panic") + } + }() + v.Set(66) +} + +func TestNullClear(t *testing.T) { + var v *BitSet + defer func() { + if r := recover(); r == nil { + t.Error("Clearning bit of null reference should have caused a panic") + } + }() + v.Clear(66) +} + +func TestNullCount(t *testing.T) { + var v *BitSet + defer func() { + if r := recover(); r != nil { + t.Error("Counting null reference should not have caused a panic") + } + }() + cnt := v.Count() + if cnt != 0 { + t.Errorf("Count reported as %d, but it should be 0", cnt) + } +} + +func TestPanicDifferenceBNil(t *testing.T) { + var b *BitSet + var compare = New(10) + defer func() { + if r := recover(); r == nil { + t.Error("Nil First should should have caused a panic") + } + }() + b.Difference(compare) +} + +func TestPanicDifferenceCompareNil(t *testing.T) { + var compare *BitSet + var b = New(10) + defer func() { + if r := recover(); r == nil { + t.Error("Nil Second should should have caused a panic") + } + }() + b.Difference(compare) +} + +func TestPanicUnionBNil(t *testing.T) { + var b *BitSet + var compare = New(10) + defer func() { + if r := recover(); r == nil { + t.Error("Nil First should should have caused a panic") + } + }() + b.Union(compare) +} + +func TestPanicUnionCompareNil(t *testing.T) { + var compare *BitSet + var b = New(10) + defer func() { + if r := recover(); r == nil { + t.Error("Nil Second should should have caused a panic") + } + }() + b.Union(compare) +} + +func TestPanicIntersectionBNil(t *testing.T) { + var b *BitSet + var compare = New(10) + defer func() { + if r := recover(); r == nil { + t.Error("Nil First should should have caused a panic") + } + }() + b.Intersection(compare) +} + +func TestPanicIntersectionCompareNil(t *testing.T) { + var compare *BitSet + var b = New(10) + defer func() { + if r := recover(); r == nil { + t.Error("Nil Second should should have caused a panic") + } + }() + b.Intersection(compare) +} + +func TestPanicSymmetricDifferenceBNil(t *testing.T) { + var b *BitSet + var compare = New(10) + defer func() { + if r := recover(); r == nil { + t.Error("Nil First should should have caused a panic") + } + }() + b.SymmetricDifference(compare) +} + +func TestPanicSymmetricDifferenceCompareNil(t *testing.T) { + var compare *BitSet + var b = New(10) + defer func() { + if r := recover(); r == nil { + t.Error("Nil Second should should have caused a panic") + } + }() + b.SymmetricDifference(compare) +} + +func TestPanicComplementBNil(t *testing.T) { + var b *BitSet + defer func() { + if r := recover(); r == nil { + t.Error("Nil should should have caused a panic") + } + }() + b.Complement() +} + +func TestPanicAnytBNil(t *testing.T) { + var b *BitSet + defer func() { + if r := recover(); r == nil { + t.Error("Nil should should have caused a panic") + } + }() + b.Any() +} + +func TestPanicNonetBNil(t *testing.T) { + var b *BitSet + defer func() { + if r := recover(); r == nil { + t.Error("Nil should should have caused a panic") + } + }() + b.None() +} + +func TestPanicAlltBNil(t *testing.T) { + var b *BitSet + defer func() { + if r := recover(); r == nil { + t.Error("Nil should should have caused a panic") + } + }() + b.All() +} + +func TestEqual(t *testing.T) { + a := New(100) + b := New(99) + c := New(100) + if a.Equal(b) { + t.Error("Sets of different sizes should be not be equal") + } + if !a.Equal(c) { + t.Error("Two empty sets of the same size should be equal") + } + a.Set(99) + c.Set(0) + if a.Equal(c) { + t.Error("Two sets with differences should not be equal") + } + c.Set(99) + a.Set(0) + if !a.Equal(c) { + t.Error("Two sets with the same bits set should be equal") + } +} + +func TestUnion(t *testing.T) { + a := New(100) + b := New(200) + for i := uint(1); i < 100; i += 2 { + a.Set(i) + b.Set(i - 1) + } + for i := uint(100); i < 200; i++ { + b.Set(i) + } + if a.UnionCardinality(b) != 200 { + t.Errorf("Union should have 200 bits set, but had %d", a.UnionCardinality(b)) + } + if a.UnionCardinality(b) != b.UnionCardinality(a) { + t.Errorf("Union should be symmetric") + } + + c := a.Union(b) + d := b.Union(a) + if c.Count() != 200 { + t.Errorf("Union should have 200 bits set, but had %d", c.Count()) + } + if !c.Equal(d) { + t.Errorf("Union should be symmetric") + } +} + +func TestInPlaceUnion(t *testing.T) { + a := New(100) + b := New(200) + for i := uint(1); i < 100; i += 2 { + a.Set(i) + b.Set(i - 1) + } + for i := uint(100); i < 200; i++ { + b.Set(i) + } + c := a.Clone() + c.InPlaceUnion(b) + d := b.Clone() + d.InPlaceUnion(a) + if c.Count() != 200 { + t.Errorf("Union should have 200 bits set, but had %d", c.Count()) + } + if d.Count() != 200 { + t.Errorf("Union should have 200 bits set, but had %d", d.Count()) + } + if !c.Equal(d) { + t.Errorf("Union should be symmetric") + } +} + +func TestIntersection(t *testing.T) { + a := New(100) + b := New(200) + for i := uint(1); i < 100; i += 2 { + a.Set(i) + b.Set(i - 1).Set(i) + } + for i := uint(100); i < 200; i++ { + b.Set(i) + } + if a.IntersectionCardinality(b) != 50 { + t.Errorf("Intersection should have 50 bits set, but had %d", a.IntersectionCardinality(b)) + } + if a.IntersectionCardinality(b) != b.IntersectionCardinality(a) { + t.Errorf("Intersection should be symmetric") + } + c := a.Intersection(b) + d := b.Intersection(a) + if c.Count() != 50 { + t.Errorf("Intersection should have 50 bits set, but had %d", c.Count()) + } + if !c.Equal(d) { + t.Errorf("Intersection should be symmetric") + } +} + +func TestInplaceIntersection(t *testing.T) { + a := New(100) + b := New(200) + for i := uint(1); i < 100; i += 2 { + a.Set(i) + b.Set(i - 1).Set(i) + } + for i := uint(100); i < 200; i++ { + b.Set(i) + } + c := a.Clone() + c.InPlaceIntersection(b) + d := b.Clone() + d.InPlaceIntersection(a) + if c.Count() != 50 { + t.Errorf("Intersection should have 50 bits set, but had %d", c.Count()) + } + if d.Count() != 50 { + t.Errorf("Intersection should have 50 bits set, but had %d", d.Count()) + } + if !c.Equal(d) { + t.Errorf("Intersection should be symmetric") + } +} + +func TestDifference(t *testing.T) { + a := New(100) + b := New(200) + for i := uint(1); i < 100; i += 2 { + a.Set(i) + b.Set(i - 1) + } + for i := uint(100); i < 200; i++ { + b.Set(i) + } + if a.DifferenceCardinality(b) != 50 { + t.Errorf("a-b Difference should have 50 bits set, but had %d", a.DifferenceCardinality(b)) + } + if b.DifferenceCardinality(a) != 150 { + t.Errorf("b-a Difference should have 150 bits set, but had %d", b.DifferenceCardinality(a)) + } + + c := a.Difference(b) + d := b.Difference(a) + if c.Count() != 50 { + t.Errorf("a-b Difference should have 50 bits set, but had %d", c.Count()) + } + if d.Count() != 150 { + t.Errorf("b-a Difference should have 150 bits set, but had %d", d.Count()) + } + if c.Equal(d) { + t.Errorf("Difference, here, should not be symmetric") + } +} + +func TestInPlaceDifference(t *testing.T) { + a := New(100) + b := New(200) + for i := uint(1); i < 100; i += 2 { + a.Set(i) + b.Set(i - 1) + } + for i := uint(100); i < 200; i++ { + b.Set(i) + } + c := a.Clone() + c.InPlaceDifference(b) + d := b.Clone() + d.InPlaceDifference(a) + if c.Count() != 50 { + t.Errorf("a-b Difference should have 50 bits set, but had %d", c.Count()) + } + if d.Count() != 150 { + t.Errorf("b-a Difference should have 150 bits set, but had %d", d.Count()) + } + if c.Equal(d) { + t.Errorf("Difference, here, should not be symmetric") + } +} + +func TestSymmetricDifference(t *testing.T) { + a := New(100) + b := New(200) + for i := uint(1); i < 100; i += 2 { + a.Set(i) // 01010101010 ... 0000000 + b.Set(i - 1).Set(i) // 11111111111111111000000 + } + for i := uint(100); i < 200; i++ { + b.Set(i) + } + if a.SymmetricDifferenceCardinality(b) != 150 { + t.Errorf("a^b Difference should have 150 bits set, but had %d", a.SymmetricDifferenceCardinality(b)) + } + if b.SymmetricDifferenceCardinality(a) != 150 { + t.Errorf("b^a Difference should have 150 bits set, but had %d", b.SymmetricDifferenceCardinality(a)) + } + + c := a.SymmetricDifference(b) + d := b.SymmetricDifference(a) + if c.Count() != 150 { + t.Errorf("a^b Difference should have 150 bits set, but had %d", c.Count()) + } + if d.Count() != 150 { + t.Errorf("b^a Difference should have 150 bits set, but had %d", d.Count()) + } + if !c.Equal(d) { + t.Errorf("SymmetricDifference should be symmetric") + } +} + +func TestInPlaceSymmetricDifference(t *testing.T) { + a := New(100) + b := New(200) + for i := uint(1); i < 100; i += 2 { + a.Set(i) // 01010101010 ... 0000000 + b.Set(i - 1).Set(i) // 11111111111111111000000 + } + for i := uint(100); i < 200; i++ { + b.Set(i) + } + c := a.Clone() + c.InPlaceSymmetricDifference(b) + d := b.Clone() + d.InPlaceSymmetricDifference(a) + if c.Count() != 150 { + t.Errorf("a^b Difference should have 150 bits set, but had %d", c.Count()) + } + if d.Count() != 150 { + t.Errorf("b^a Difference should have 150 bits set, but had %d", d.Count()) + } + if !c.Equal(d) { + t.Errorf("SymmetricDifference should be symmetric") + } +} + +func TestComplement(t *testing.T) { + a := New(50) + b := a.Complement() + if b.Count() != 50 { + t.Errorf("Complement failed, size should be 50, but was %d", b.Count()) + } + a = New(50) + a.Set(10).Set(20).Set(42) + b = a.Complement() + if b.Count() != 47 { + t.Errorf("Complement failed, size should be 47, but was %d", b.Count()) + } +} + +func TestIsSuperSet(t *testing.T) { + a := New(500) + b := New(300) + c := New(200) + + // Setup bitsets + // a and b overlap + // only c is (strict) super set + for i := uint(0); i < 100; i++ { + a.Set(i) + } + for i := uint(50); i < 150; i++ { + b.Set(i) + } + for i := uint(0); i < 200; i++ { + c.Set(i) + } + + if a.IsSuperSet(b) == true { + t.Errorf("IsSuperSet fails") + } + if a.IsSuperSet(c) == true { + t.Errorf("IsSuperSet fails") + } + if b.IsSuperSet(a) == true { + t.Errorf("IsSuperSet fails") + } + if b.IsSuperSet(c) == true { + t.Errorf("IsSuperSet fails") + } + if c.IsSuperSet(a) != true { + t.Errorf("IsSuperSet fails") + } + if c.IsSuperSet(b) != true { + t.Errorf("IsSuperSet fails") + } + + if a.IsStrictSuperSet(b) == true { + t.Errorf("IsStrictSuperSet fails") + } + if a.IsStrictSuperSet(c) == true { + t.Errorf("IsStrictSuperSet fails") + } + if b.IsStrictSuperSet(a) == true { + t.Errorf("IsStrictSuperSet fails") + } + if b.IsStrictSuperSet(c) == true { + t.Errorf("IsStrictSuperSet fails") + } + if c.IsStrictSuperSet(a) != true { + t.Errorf("IsStrictSuperSet fails") + } + if c.IsStrictSuperSet(b) != true { + t.Errorf("IsStrictSuperSet fails") + } +} + +func TestDumpAsBits(t *testing.T) { + a := New(10).Set(10) + astr := "0000000000000000000000000000000000000000000000000000010000000000." + if a.DumpAsBits() != astr { + t.Errorf("DumpAsBits failed, output should be \"%s\" but was \"%s\"", astr, a.DumpAsBits()) + } + var b BitSet // zero value (b.set == nil) + bstr := "." + if b.DumpAsBits() != bstr { + t.Errorf("DumpAsBits failed, output should be \"%s\" but was \"%s\"", bstr, b.DumpAsBits()) + } +} + +func TestMarshalUnmarshalBinary(t *testing.T) { + a := New(1010).Set(10).Set(1001) + b := new(BitSet) + + copyBinary(t, a, b) + + // BitSets must be equal after marshalling and unmarshalling + if !a.Equal(b) { + t.Error("Bitsets are not equal:\n\t", a.DumpAsBits(), "\n\t", b.DumpAsBits()) + return + } +} + +func copyBinary(t *testing.T, from encoding.BinaryMarshaler, to encoding.BinaryUnmarshaler) { + data, err := from.MarshalBinary() + if err != nil { + t.Errorf(err.Error()) + return + } + + err = to.UnmarshalBinary(data) + if err != nil { + t.Errorf(err.Error()) + return + } +} + +func TestMarshalUnmarshalJSON(t *testing.T) { + a := New(1010).Set(10).Set(1001) + data, err := json.Marshal(a) + if err != nil { + t.Errorf(err.Error()) + return + } + + b := new(BitSet) + err = json.Unmarshal(data, b) + if err != nil { + t.Errorf(err.Error()) + return + } + + // Bitsets must be equal after marshalling and unmarshalling + if !a.Equal(b) { + t.Error("Bitsets are not equal:\n\t", a.DumpAsBits(), "\n\t", b.DumpAsBits()) + return + } +} + +// BENCHMARKS + +func BenchmarkSet(b *testing.B) { + b.StopTimer() + r := rand.New(rand.NewSource(0)) + sz := 100000 + s := New(uint(sz)) + b.StartTimer() + for i := 0; i < b.N; i++ { + s.Set(uint(r.Int31n(int32(sz)))) + } +} + +func BenchmarkGetTest(b *testing.B) { + b.StopTimer() + r := rand.New(rand.NewSource(0)) + sz := 100000 + s := New(uint(sz)) + b.StartTimer() + for i := 0; i < b.N; i++ { + s.Test(uint(r.Int31n(int32(sz)))) + } +} + +func BenchmarkSetExpand(b *testing.B) { + b.StopTimer() + sz := uint(100000) + b.StartTimer() + for i := 0; i < b.N; i++ { + var s BitSet + s.Set(sz) + } +} + +// go test -bench=Count +func BenchmarkCount(b *testing.B) { + b.StopTimer() + s := New(100000) + for i := 0; i < 100000; i += 100 { + s.Set(uint(i)) + } + b.StartTimer() + for i := 0; i < b.N; i++ { + s.Count() + } +} + +// go test -bench=Iterate +func BenchmarkIterate(b *testing.B) { + b.StopTimer() + s := New(10000) + for i := 0; i < 10000; i += 3 { + s.Set(uint(i)) + } + b.StartTimer() + for j := 0; j < b.N; j++ { + c := uint(0) + for i, e := s.NextSet(0); e; i, e = s.NextSet(i + 1) { + c++ + } + } +} + +// go test -bench=SparseIterate +func BenchmarkSparseIterate(b *testing.B) { + b.StopTimer() + s := New(100000) + for i := 0; i < 100000; i += 30 { + s.Set(uint(i)) + } + b.StartTimer() + for j := 0; j < b.N; j++ { + c := uint(0) + for i, e := s.NextSet(0); e; i, e = s.NextSet(i + 1) { + c++ + } + } +} diff --git a/vendor/github.com/willf/bitset/popcnt.go b/vendor/github.com/willf/bitset/popcnt.go new file mode 100644 index 0000000..76577a8 --- /dev/null +++ b/vendor/github.com/willf/bitset/popcnt.go @@ -0,0 +1,53 @@ +package bitset + +// bit population count, take from +// https://code.google.com/p/go/issues/detail?id=4988#c11 +// credit: https://code.google.com/u/arnehormann/ +func popcount(x uint64) (n uint64) { + x -= (x >> 1) & 0x5555555555555555 + x = (x>>2)&0x3333333333333333 + x&0x3333333333333333 + x += x >> 4 + x &= 0x0f0f0f0f0f0f0f0f + x *= 0x0101010101010101 + return x >> 56 +} + +func popcntSliceGo(s []uint64) uint64 { + cnt := uint64(0) + for _, x := range s { + cnt += popcount(x) + } + return cnt +} + +func popcntMaskSliceGo(s, m []uint64) uint64 { + cnt := uint64(0) + for i := range s { + cnt += popcount(s[i] &^ m[i]) + } + return cnt +} + +func popcntAndSliceGo(s, m []uint64) uint64 { + cnt := uint64(0) + for i := range s { + cnt += popcount(s[i] & m[i]) + } + return cnt +} + +func popcntOrSliceGo(s, m []uint64) uint64 { + cnt := uint64(0) + for i := range s { + cnt += popcount(s[i] | m[i]) + } + return cnt +} + +func popcntXorSliceGo(s, m []uint64) uint64 { + cnt := uint64(0) + for i := range s { + cnt += popcount(s[i] ^ m[i]) + } + return cnt +} diff --git a/vendor/github.com/willf/bitset/popcnt_amd64.go b/vendor/github.com/willf/bitset/popcnt_amd64.go new file mode 100644 index 0000000..665a864 --- /dev/null +++ b/vendor/github.com/willf/bitset/popcnt_amd64.go @@ -0,0 +1,67 @@ +// +build amd64,!appengine + +package bitset + +// *** the following functions are defined in popcnt_amd64.s + +//go:noescape + +func hasAsm() bool + +// useAsm is a flag used to select the GO or ASM implementation of the popcnt function +var useAsm = hasAsm() + +//go:noescape + +func popcntSliceAsm(s []uint64) uint64 + +//go:noescape + +func popcntMaskSliceAsm(s, m []uint64) uint64 + +//go:noescape + +func popcntAndSliceAsm(s, m []uint64) uint64 + +//go:noescape + +func popcntOrSliceAsm(s, m []uint64) uint64 + +//go:noescape + +func popcntXorSliceAsm(s, m []uint64) uint64 + +func popcntSlice(s []uint64) uint64 { + if useAsm { + return popcntSliceAsm(s) + } + return popcntSliceGo(s) +} + +func popcntMaskSlice(s, m []uint64) uint64 { + if useAsm { + return popcntMaskSliceAsm(s, m) + } + return popcntMaskSliceGo(s, m) +} + +func popcntAndSlice(s, m []uint64) uint64 { + if useAsm { + return popcntAndSliceAsm(s, m) + } + return popcntAndSliceGo(s, m) +} + +func popcntOrSlice(s, m []uint64) uint64 { + if useAsm { + return popcntOrSliceAsm(s, m) + } + return popcntOrSliceGo(s, m) +} + +func popcntXorSlice(s, m []uint64) uint64 { + if useAsm { + return popcntXorSliceAsm(s, m) + } + return popcntXorSliceGo(s, m) +} diff --git a/vendor/github.com/willf/bitset/popcnt_amd64.s b/vendor/github.com/willf/bitset/popcnt_amd64.s new file mode 100644 index 0000000..18f5878 --- /dev/null +++ b/vendor/github.com/willf/bitset/popcnt_amd64.s @@ -0,0 +1,103 @@ +// +build amd64,!appengine + +TEXT ·hasAsm(SB),4,$0-1 +MOVQ $1, AX +CPUID +SHRQ $23, CX +ANDQ $1, CX +MOVB CX, ret+0(FP) +RET + +#define POPCNTQ_DX_DX BYTE $0xf3; BYTE $0x48; BYTE $0x0f; BYTE $0xb8; BYTE $0xd2 + +TEXT ·popcntSliceAsm(SB),4,$0-32 +XORQ AX, AX +MOVQ s+0(FP), SI +MOVQ s_len+8(FP), CX +TESTQ CX, CX +JZ popcntSliceEnd +popcntSliceLoop: +BYTE $0xf3; BYTE $0x48; BYTE $0x0f; BYTE $0xb8; BYTE $0x16 // POPCNTQ (SI), DX +ADDQ DX, AX +ADDQ $8, SI +LOOP popcntSliceLoop +popcntSliceEnd: +MOVQ AX, ret+24(FP) +RET + +TEXT ·popcntMaskSliceAsm(SB),4,$0-56 +XORQ AX, AX +MOVQ s+0(FP), SI +MOVQ s_len+8(FP), CX +TESTQ CX, CX +JZ popcntMaskSliceEnd +MOVQ m+24(FP), DI +popcntMaskSliceLoop: +MOVQ (DI), DX +NOTQ DX +ANDQ (SI), DX +POPCNTQ_DX_DX +ADDQ DX, AX +ADDQ $8, SI +ADDQ $8, DI +LOOP popcntMaskSliceLoop +popcntMaskSliceEnd: +MOVQ AX, ret+48(FP) +RET + +TEXT ·popcntAndSliceAsm(SB),4,$0-56 +XORQ AX, AX +MOVQ s+0(FP), SI +MOVQ s_len+8(FP), CX +TESTQ CX, CX +JZ popcntAndSliceEnd +MOVQ m+24(FP), DI +popcntAndSliceLoop: +MOVQ (DI), DX +ANDQ (SI), DX +POPCNTQ_DX_DX +ADDQ DX, AX +ADDQ $8, SI +ADDQ $8, DI +LOOP popcntAndSliceLoop +popcntAndSliceEnd: +MOVQ AX, ret+48(FP) +RET + +TEXT ·popcntOrSliceAsm(SB),4,$0-56 +XORQ AX, AX +MOVQ s+0(FP), SI +MOVQ s_len+8(FP), CX +TESTQ CX, CX +JZ popcntOrSliceEnd +MOVQ m+24(FP), DI +popcntOrSliceLoop: +MOVQ (DI), DX +ORQ (SI), DX +POPCNTQ_DX_DX +ADDQ DX, AX +ADDQ $8, SI +ADDQ $8, DI +LOOP popcntOrSliceLoop +popcntOrSliceEnd: +MOVQ AX, ret+48(FP) +RET + +TEXT ·popcntXorSliceAsm(SB),4,$0-56 +XORQ AX, AX +MOVQ s+0(FP), SI +MOVQ s_len+8(FP), CX +TESTQ CX, CX +JZ popcntXorSliceEnd +MOVQ m+24(FP), DI +popcntXorSliceLoop: +MOVQ (DI), DX +XORQ (SI), DX +POPCNTQ_DX_DX +ADDQ DX, AX +ADDQ $8, SI +ADDQ $8, DI +LOOP popcntXorSliceLoop +popcntXorSliceEnd: +MOVQ AX, ret+48(FP) +RET diff --git a/vendor/github.com/willf/bitset/popcnt_generic.go b/vendor/github.com/willf/bitset/popcnt_generic.go new file mode 100644 index 0000000..6b21cb7 --- /dev/null +++ b/vendor/github.com/willf/bitset/popcnt_generic.go @@ -0,0 +1,23 @@ +// +build !amd64 appengine + +package bitset + +func popcntSlice(s []uint64) uint64 { + return popcntSliceGo(s) +} + +func popcntMaskSlice(s, m []uint64) uint64 { + return popcntMaskSliceGo(s, m) +} + +func popcntAndSlice(s, m []uint64) uint64 { + return popcntAndSliceGo(s, m) +} + +func popcntOrSlice(s, m []uint64) uint64 { + return popcntOrSliceGo(s, m) +} + +func popcntXorSlice(s, m []uint64) uint64 { + return popcntXorSliceGo(s, m) +} diff --git a/vendor/github.com/willf/bitset/popcnt_test.go b/vendor/github.com/willf/bitset/popcnt_test.go new file mode 100644 index 0000000..08bfff5 --- /dev/null +++ b/vendor/github.com/willf/bitset/popcnt_test.go @@ -0,0 +1,58 @@ +// +build amd64,!appengine + +// This file tests the popcnt funtions + +package bitset + +import ( + "testing" +) + +func TestPopcntSlice(t *testing.T) { + s := []uint64{2, 3, 5, 7, 11, 13, 17, 19, 23, 29} + resGo := popcntSliceGo(s) + resAsm := popcntSliceAsm(s) + if resGo != resAsm { + t.Errorf("The implementations are different: GO %d != ASM %d", resGo, resAsm) + } +} + +func TestPopcntMaskSlice(t *testing.T) { + s := []uint64{2, 3, 5, 7, 11, 13, 17, 19, 23, 29} + m := []uint64{31, 37, 41, 43, 47, 53, 59, 61, 67, 71} + resGo := popcntMaskSliceGo(s, m) + resAsm := popcntMaskSliceAsm(s, m) + if resGo != resAsm { + t.Errorf("The implementations are different: GO %d != ASM %d", resGo, resAsm) + } +} + +func TestPopcntAndSlice(t *testing.T) { + s := []uint64{2, 3, 5, 7, 11, 13, 17, 19, 23, 29} + m := []uint64{31, 37, 41, 43, 47, 53, 59, 61, 67, 71} + resGo := popcntAndSliceGo(s, m) + resAsm := popcntAndSliceAsm(s, m) + if resGo != resAsm { + t.Errorf("The implementations are different: GO %d != ASM %d", resGo, resAsm) + } +} + +func TestPopcntOrSlice(t *testing.T) { + s := []uint64{2, 3, 5, 7, 11, 13, 17, 19, 23, 29} + m := []uint64{31, 37, 41, 43, 47, 53, 59, 61, 67, 71} + resGo := popcntOrSliceGo(s, m) + resAsm := popcntOrSliceAsm(s, m) + if resGo != resAsm { + t.Errorf("The implementations are different: GO %d != ASM %d", resGo, resAsm) + } +} + +func TestPopcntXorSlice(t *testing.T) { + s := []uint64{2, 3, 5, 7, 11, 13, 17, 19, 23, 29} + m := []uint64{31, 37, 41, 43, 47, 53, 59, 61, 67, 71} + resGo := popcntXorSliceGo(s, m) + resAsm := popcntXorSliceAsm(s, m) + if resGo != resAsm { + t.Errorf("The implementations are different: GO %d != ASM %d", resGo, resAsm) + } +} diff --git a/vendor/golang.org/x/net/CONTRIBUTING.md b/vendor/golang.org/x/net/CONTRIBUTING.md index 88dff59..d0485e8 100644 --- a/vendor/golang.org/x/net/CONTRIBUTING.md +++ b/vendor/golang.org/x/net/CONTRIBUTING.md @@ -4,16 +4,15 @@ Go is an open source project. It is the work of hundreds of contributors. We appreciate your help! - ## Filing issues When [filing an issue](https://golang.org/issue/new), make sure to answer these five questions: -1. What version of Go are you using (`go version`)? -2. What operating system and processor architecture are you using? -3. What did you do? -4. What did you expect to see? -5. What did you see instead? +1. What version of Go are you using (`go version`)? +2. What operating system and processor architecture are you using? +3. What did you do? +4. What did you expect to see? +5. What did you see instead? General questions should go to the [golang-nuts mailing list](https://groups.google.com/group/golang-nuts) instead of the issue tracker. The gophers there will answer or ask you to file an issue if you've tripped over a bug. @@ -23,9 +22,5 @@ The gophers there will answer or ask you to file an issue if you've tripped over Please read the [Contribution Guidelines](https://golang.org/doc/contribute.html) before sending patches. -**We do not accept GitHub pull requests** -(we use [Gerrit](https://code.google.com/p/gerrit/) instead for code review). - Unless otherwise noted, the Go source files are distributed under the BSD-style license found in the LICENSE file. - diff --git a/vendor/golang.org/x/net/README b/vendor/golang.org/x/net/README deleted file mode 100644 index 6b13d8e..0000000 --- a/vendor/golang.org/x/net/README +++ /dev/null @@ -1,3 +0,0 @@ -This repository holds supplementary Go networking libraries. - -To submit changes to this repository, see http://golang.org/doc/contribute.html. diff --git a/vendor/golang.org/x/net/README.md b/vendor/golang.org/x/net/README.md new file mode 100644 index 0000000..00a9b6e --- /dev/null +++ b/vendor/golang.org/x/net/README.md @@ -0,0 +1,16 @@ +# Go Networking + +This repository holds supplementary Go networking libraries. + +## Download/Install + +The easiest way to install is to run `go get -u golang.org/x/net`. You can +also manually git clone the repository to `$GOPATH/src/golang.org/x/net`. + +## Report Issues / Send Patches + +This repository uses Gerrit for code changes. To learn how to submit +changes to this repository, see https://golang.org/doc/contribute.html. +The main issue tracker for the net repository is located at +https://github.com/golang/go/issues. Prefix your issue with "x/net:" in the +subject line, so it is easy to find. diff --git a/vendor/golang.org/x/net/bpf/constants.go b/vendor/golang.org/x/net/bpf/constants.go index ccf6ada..b89ca35 100644 --- a/vendor/golang.org/x/net/bpf/constants.go +++ b/vendor/golang.org/x/net/bpf/constants.go @@ -76,54 +76,54 @@ const ( // ExtLen returns the length of the packet. ExtLen Extension = 1 // ExtProto returns the packet's L3 protocol type. - ExtProto = 0 + ExtProto Extension = 0 // ExtType returns the packet's type (skb->pkt_type in the kernel) // // TODO: better documentation. How nice an API do we want to // provide for these esoteric extensions? - ExtType = 4 + ExtType Extension = 4 // ExtPayloadOffset returns the offset of the packet payload, or // the first protocol header that the kernel does not know how to // parse. - ExtPayloadOffset = 52 + ExtPayloadOffset Extension = 52 // ExtInterfaceIndex returns the index of the interface on which // the packet was received. - ExtInterfaceIndex = 8 + ExtInterfaceIndex Extension = 8 // ExtNetlinkAttr returns the netlink attribute of type X at // offset A. - ExtNetlinkAttr = 12 + ExtNetlinkAttr Extension = 12 // ExtNetlinkAttrNested returns the nested netlink attribute of // type X at offset A. - ExtNetlinkAttrNested = 16 + ExtNetlinkAttrNested Extension = 16 // ExtMark returns the packet's mark value. - ExtMark = 20 + ExtMark Extension = 20 // ExtQueue returns the packet's assigned hardware queue. - ExtQueue = 24 + ExtQueue Extension = 24 // ExtLinkLayerType returns the packet's hardware address type // (e.g. Ethernet, Infiniband). - ExtLinkLayerType = 28 + ExtLinkLayerType Extension = 28 // ExtRXHash returns the packets receive hash. // // TODO: figure out what this rxhash actually is. - ExtRXHash = 32 + ExtRXHash Extension = 32 // ExtCPUID returns the ID of the CPU processing the current // packet. - ExtCPUID = 36 + ExtCPUID Extension = 36 // ExtVLANTag returns the packet's VLAN tag. - ExtVLANTag = 44 + ExtVLANTag Extension = 44 // ExtVLANTagPresent returns non-zero if the packet has a VLAN // tag. // // TODO: I think this might be a lie: it reads bit 0x1000 of the // VLAN header, which changed meaning in recent revisions of the // spec - this extension may now return meaningless information. - ExtVLANTagPresent = 48 + ExtVLANTagPresent Extension = 48 // ExtVLANProto returns 0x8100 if the frame has a VLAN header, // 0x88a8 if the frame has a "Q-in-Q" double VLAN header, or some // other value if no VLAN information is present. - ExtVLANProto = 60 + ExtVLANProto Extension = 60 // ExtRand returns a uniformly random uint32. - ExtRand = 56 + ExtRand Extension = 56 ) // The following gives names to various bit patterns used in opcode construction. diff --git a/vendor/golang.org/x/net/bpf/instructions.go b/vendor/golang.org/x/net/bpf/instructions.go index 3b4fd08..f9dc0e8 100644 --- a/vendor/golang.org/x/net/bpf/instructions.go +++ b/vendor/golang.org/x/net/bpf/instructions.go @@ -198,7 +198,7 @@ func (a LoadConstant) Assemble() (RawInstruction, error) { return assembleLoad(a.Dst, 4, opAddrModeImmediate, a.Val) } -// String returns the the instruction in assembler notation. +// String returns the instruction in assembler notation. func (a LoadConstant) String() string { switch a.Dst { case RegA: @@ -224,7 +224,7 @@ func (a LoadScratch) Assemble() (RawInstruction, error) { return assembleLoad(a.Dst, 4, opAddrModeScratch, uint32(a.N)) } -// String returns the the instruction in assembler notation. +// String returns the instruction in assembler notation. func (a LoadScratch) String() string { switch a.Dst { case RegA: @@ -248,7 +248,7 @@ func (a LoadAbsolute) Assemble() (RawInstruction, error) { return assembleLoad(RegA, a.Size, opAddrModeAbsolute, a.Off) } -// String returns the the instruction in assembler notation. +// String returns the instruction in assembler notation. func (a LoadAbsolute) String() string { switch a.Size { case 1: // byte @@ -277,7 +277,7 @@ func (a LoadIndirect) Assemble() (RawInstruction, error) { return assembleLoad(RegA, a.Size, opAddrModeIndirect, a.Off) } -// String returns the the instruction in assembler notation. +// String returns the instruction in assembler notation. func (a LoadIndirect) String() string { switch a.Size { case 1: // byte @@ -306,7 +306,7 @@ func (a LoadMemShift) Assemble() (RawInstruction, error) { return assembleLoad(RegX, 1, opAddrModeMemShift, a.Off) } -// String returns the the instruction in assembler notation. +// String returns the instruction in assembler notation. func (a LoadMemShift) String() string { return fmt.Sprintf("ldx 4*([%d]&0xf)", a.Off) } @@ -325,7 +325,7 @@ func (a LoadExtension) Assemble() (RawInstruction, error) { return assembleLoad(RegA, 4, opAddrModeAbsolute, uint32(extOffset+a.Num)) } -// String returns the the instruction in assembler notation. +// String returns the instruction in assembler notation. func (a LoadExtension) String() string { switch a.Num { case ExtLen: @@ -392,7 +392,7 @@ func (a StoreScratch) Assemble() (RawInstruction, error) { }, nil } -// String returns the the instruction in assembler notation. +// String returns the instruction in assembler notation. func (a StoreScratch) String() string { switch a.Src { case RegA: @@ -418,7 +418,7 @@ func (a ALUOpConstant) Assemble() (RawInstruction, error) { }, nil } -// String returns the the instruction in assembler notation. +// String returns the instruction in assembler notation. func (a ALUOpConstant) String() string { switch a.Op { case ALUOpAdd: @@ -458,7 +458,7 @@ func (a ALUOpX) Assemble() (RawInstruction, error) { }, nil } -// String returns the the instruction in assembler notation. +// String returns the instruction in assembler notation. func (a ALUOpX) String() string { switch a.Op { case ALUOpAdd: @@ -496,7 +496,7 @@ func (a NegateA) Assemble() (RawInstruction, error) { }, nil } -// String returns the the instruction in assembler notation. +// String returns the instruction in assembler notation. func (a NegateA) String() string { return fmt.Sprintf("neg") } @@ -514,7 +514,7 @@ func (a Jump) Assemble() (RawInstruction, error) { }, nil } -// String returns the the instruction in assembler notation. +// String returns the instruction in assembler notation. func (a Jump) String() string { return fmt.Sprintf("ja %d", a.Skip) } @@ -566,7 +566,7 @@ func (a JumpIf) Assemble() (RawInstruction, error) { }, nil } -// String returns the the instruction in assembler notation. +// String returns the instruction in assembler notation. func (a JumpIf) String() string { switch a.Cond { // K == A @@ -621,7 +621,7 @@ func (a RetA) Assemble() (RawInstruction, error) { }, nil } -// String returns the the instruction in assembler notation. +// String returns the instruction in assembler notation. func (a RetA) String() string { return fmt.Sprintf("ret a") } @@ -639,7 +639,7 @@ func (a RetConstant) Assemble() (RawInstruction, error) { }, nil } -// String returns the the instruction in assembler notation. +// String returns the instruction in assembler notation. func (a RetConstant) String() string { return fmt.Sprintf("ret #%d", a.Val) } @@ -654,7 +654,7 @@ func (a TXA) Assemble() (RawInstruction, error) { }, nil } -// String returns the the instruction in assembler notation. +// String returns the instruction in assembler notation. func (a TXA) String() string { return fmt.Sprintf("txa") } @@ -669,7 +669,7 @@ func (a TAX) Assemble() (RawInstruction, error) { }, nil } -// String returns the the instruction in assembler notation. +// String returns the instruction in assembler notation. func (a TAX) String() string { return fmt.Sprintf("tax") } diff --git a/vendor/golang.org/x/net/bpf/setter.go b/vendor/golang.org/x/net/bpf/setter.go new file mode 100644 index 0000000..43e35f0 --- /dev/null +++ b/vendor/golang.org/x/net/bpf/setter.go @@ -0,0 +1,10 @@ +// Copyright 2017 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. + +package bpf + +// A Setter is a type which can attach a compiled BPF filter to itself. +type Setter interface { + SetBPF(filter []RawInstruction) error +} diff --git a/vendor/golang.org/x/net/context/context.go b/vendor/golang.org/x/net/context/context.go index f143ed6..a3c021d 100644 --- a/vendor/golang.org/x/net/context/context.go +++ b/vendor/golang.org/x/net/context/context.go @@ -5,6 +5,8 @@ // Package context defines the Context type, which carries deadlines, // cancelation signals, and other request-scoped values across API boundaries // and between processes. +// As of Go 1.7 this package is available in the standard library under the +// name context. https://golang.org/pkg/context. // // Incoming requests to a server should create a Context, and outgoing calls to // servers should accept a Context. The chain of function calls between must @@ -36,103 +38,6 @@ // Contexts. package context // import "golang.org/x/net/context" -import "time" - -// A Context carries a deadline, a cancelation signal, and other values across -// API boundaries. -// -// Context's methods may be called by multiple goroutines simultaneously. -type Context interface { - // Deadline returns the time when work done on behalf of this context - // should be canceled. Deadline returns ok==false when no deadline is - // set. Successive calls to Deadline return the same results. - Deadline() (deadline time.Time, ok bool) - - // Done returns a channel that's closed when work done on behalf of this - // context should be canceled. Done may return nil if this context can - // never be canceled. Successive calls to Done return the same value. - // - // WithCancel arranges for Done to be closed when cancel is called; - // WithDeadline arranges for Done to be closed when the deadline - // expires; WithTimeout arranges for Done to be closed when the timeout - // elapses. - // - // Done is provided for use in select statements: - // - // // Stream generates values with DoSomething and sends them to out - // // until DoSomething returns an error or ctx.Done is closed. - // func Stream(ctx context.Context, out chan<- Value) error { - // for { - // v, err := DoSomething(ctx) - // if err != nil { - // return err - // } - // select { - // case <-ctx.Done(): - // return ctx.Err() - // case out <- v: - // } - // } - // } - // - // See http://blog.golang.org/pipelines for more examples of how to use - // a Done channel for cancelation. - Done() <-chan struct{} - - // Err returns a non-nil error value after Done is closed. Err returns - // Canceled if the context was canceled or DeadlineExceeded if the - // context's deadline passed. No other values for Err are defined. - // After Done is closed, successive calls to Err return the same value. - Err() error - - // Value returns the value associated with this context for key, or nil - // if no value is associated with key. Successive calls to Value with - // the same key returns the same result. - // - // Use context values only for request-scoped data that transits - // processes and API boundaries, not for passing optional parameters to - // functions. - // - // A key identifies a specific value in a Context. Functions that wish - // to store values in Context typically allocate a key in a global - // variable then use that key as the argument to context.WithValue and - // Context.Value. A key can be any type that supports equality; - // packages should define keys as an unexported type to avoid - // collisions. - // - // Packages that define a Context key should provide type-safe accessors - // for the values stores using that key: - // - // // Package user defines a User type that's stored in Contexts. - // package user - // - // import "golang.org/x/net/context" - // - // // User is the type of value stored in the Contexts. - // type User struct {...} - // - // // key is an unexported type for keys defined in this package. - // // This prevents collisions with keys defined in other packages. - // type key int - // - // // userKey is the key for user.User values in Contexts. It is - // // unexported; clients use user.NewContext and user.FromContext - // // instead of using this key directly. - // var userKey key = 0 - // - // // NewContext returns a new Context that carries value u. - // func NewContext(ctx context.Context, u *User) context.Context { - // return context.WithValue(ctx, userKey, u) - // } - // - // // FromContext returns the User value stored in ctx, if any. - // func FromContext(ctx context.Context) (*User, bool) { - // u, ok := ctx.Value(userKey).(*User) - // return u, ok - // } - Value(key interface{}) interface{} -} - // Background returns a non-nil, empty Context. It is never canceled, has no // values, and has no deadline. It is typically used by the main function, // initialization, and tests, and as the top-level Context for incoming @@ -149,8 +54,3 @@ func Background() Context { func TODO() Context { return todo } - -// A CancelFunc tells an operation to abandon its work. -// A CancelFunc does not wait for the work to stop. -// After the first call, subsequent calls to a CancelFunc do nothing. -type CancelFunc func() diff --git a/vendor/golang.org/x/net/context/go19.go b/vendor/golang.org/x/net/context/go19.go new file mode 100644 index 0000000..d88bd1d --- /dev/null +++ b/vendor/golang.org/x/net/context/go19.go @@ -0,0 +1,20 @@ +// Copyright 2017 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 go1.9 + +package context + +import "context" // standard library's context, as of Go 1.7 + +// A Context carries a deadline, a cancelation signal, and other values across +// API boundaries. +// +// Context's methods may be called by multiple goroutines simultaneously. +type Context = context.Context + +// A CancelFunc tells an operation to abandon its work. +// A CancelFunc does not wait for the work to stop. +// After the first call, subsequent calls to a CancelFunc do nothing. +type CancelFunc = context.CancelFunc diff --git a/vendor/golang.org/x/net/context/pre_go19.go b/vendor/golang.org/x/net/context/pre_go19.go new file mode 100644 index 0000000..b105f80 --- /dev/null +++ b/vendor/golang.org/x/net/context/pre_go19.go @@ -0,0 +1,109 @@ +// Copyright 2014 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 !go1.9 + +package context + +import "time" + +// A Context carries a deadline, a cancelation signal, and other values across +// API boundaries. +// +// Context's methods may be called by multiple goroutines simultaneously. +type Context interface { + // Deadline returns the time when work done on behalf of this context + // should be canceled. Deadline returns ok==false when no deadline is + // set. Successive calls to Deadline return the same results. + Deadline() (deadline time.Time, ok bool) + + // Done returns a channel that's closed when work done on behalf of this + // context should be canceled. Done may return nil if this context can + // never be canceled. Successive calls to Done return the same value. + // + // WithCancel arranges for Done to be closed when cancel is called; + // WithDeadline arranges for Done to be closed when the deadline + // expires; WithTimeout arranges for Done to be closed when the timeout + // elapses. + // + // Done is provided for use in select statements: + // + // // Stream generates values with DoSomething and sends them to out + // // until DoSomething returns an error or ctx.Done is closed. + // func Stream(ctx context.Context, out chan<- Value) error { + // for { + // v, err := DoSomething(ctx) + // if err != nil { + // return err + // } + // select { + // case <-ctx.Done(): + // return ctx.Err() + // case out <- v: + // } + // } + // } + // + // See http://blog.golang.org/pipelines for more examples of how to use + // a Done channel for cancelation. + Done() <-chan struct{} + + // Err returns a non-nil error value after Done is closed. Err returns + // Canceled if the context was canceled or DeadlineExceeded if the + // context's deadline passed. No other values for Err are defined. + // After Done is closed, successive calls to Err return the same value. + Err() error + + // Value returns the value associated with this context for key, or nil + // if no value is associated with key. Successive calls to Value with + // the same key returns the same result. + // + // Use context values only for request-scoped data that transits + // processes and API boundaries, not for passing optional parameters to + // functions. + // + // A key identifies a specific value in a Context. Functions that wish + // to store values in Context typically allocate a key in a global + // variable then use that key as the argument to context.WithValue and + // Context.Value. A key can be any type that supports equality; + // packages should define keys as an unexported type to avoid + // collisions. + // + // Packages that define a Context key should provide type-safe accessors + // for the values stores using that key: + // + // // Package user defines a User type that's stored in Contexts. + // package user + // + // import "golang.org/x/net/context" + // + // // User is the type of value stored in the Contexts. + // type User struct {...} + // + // // key is an unexported type for keys defined in this package. + // // This prevents collisions with keys defined in other packages. + // type key int + // + // // userKey is the key for user.User values in Contexts. It is + // // unexported; clients use user.NewContext and user.FromContext + // // instead of using this key directly. + // var userKey key = 0 + // + // // NewContext returns a new Context that carries value u. + // func NewContext(ctx context.Context, u *User) context.Context { + // return context.WithValue(ctx, userKey, u) + // } + // + // // FromContext returns the User value stored in ctx, if any. + // func FromContext(ctx context.Context) (*User, bool) { + // u, ok := ctx.Value(userKey).(*User) + // return u, ok + // } + Value(key interface{}) interface{} +} + +// A CancelFunc tells an operation to abandon its work. +// A CancelFunc does not wait for the work to stop. +// After the first call, subsequent calls to a CancelFunc do nothing. +type CancelFunc func() diff --git a/vendor/golang.org/x/net/context/withtimeout_test.go b/vendor/golang.org/x/net/context/withtimeout_test.go index a6754dc..e6f5669 100644 --- a/vendor/golang.org/x/net/context/withtimeout_test.go +++ b/vendor/golang.org/x/net/context/withtimeout_test.go @@ -11,16 +11,21 @@ import ( "golang.org/x/net/context" ) +// This example passes a context with a timeout to tell a blocking function that +// it should abandon its work after the timeout elapses. func ExampleWithTimeout() { // Pass a context with a timeout to tell a blocking function that it // should abandon its work after the timeout elapses. - ctx, _ := context.WithTimeout(context.Background(), 100*time.Millisecond) + ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond) + defer cancel() + select { - case <-time.After(200 * time.Millisecond): + case <-time.After(1 * time.Second): fmt.Println("overslept") case <-ctx.Done(): fmt.Println(ctx.Err()) // prints "context deadline exceeded" } + // Output: // context deadline exceeded } diff --git a/vendor/golang.org/x/net/dns/dnsmessage/example_test.go b/vendor/golang.org/x/net/dns/dnsmessage/example_test.go new file mode 100644 index 0000000..8600a6b --- /dev/null +++ b/vendor/golang.org/x/net/dns/dnsmessage/example_test.go @@ -0,0 +1,132 @@ +// Copyright 2017 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. + +package dnsmessage_test + +import ( + "fmt" + "net" + "strings" + + "golang.org/x/net/dns/dnsmessage" +) + +func mustNewName(name string) dnsmessage.Name { + n, err := dnsmessage.NewName(name) + if err != nil { + panic(err) + } + return n +} + +func ExampleParser() { + msg := dnsmessage.Message{ + Header: dnsmessage.Header{Response: true, Authoritative: true}, + Questions: []dnsmessage.Question{ + { + Name: mustNewName("foo.bar.example.com."), + Type: dnsmessage.TypeA, + Class: dnsmessage.ClassINET, + }, + { + Name: mustNewName("bar.example.com."), + Type: dnsmessage.TypeA, + Class: dnsmessage.ClassINET, + }, + }, + Answers: []dnsmessage.Resource{ + { + Header: dnsmessage.ResourceHeader{ + Name: mustNewName("foo.bar.example.com."), + Type: dnsmessage.TypeA, + Class: dnsmessage.ClassINET, + }, + Body: &dnsmessage.AResource{A: [4]byte{127, 0, 0, 1}}, + }, + { + Header: dnsmessage.ResourceHeader{ + Name: mustNewName("bar.example.com."), + Type: dnsmessage.TypeA, + Class: dnsmessage.ClassINET, + }, + Body: &dnsmessage.AResource{A: [4]byte{127, 0, 0, 2}}, + }, + }, + } + + buf, err := msg.Pack() + if err != nil { + panic(err) + } + + wantName := "bar.example.com." + + var p dnsmessage.Parser + if _, err := p.Start(buf); err != nil { + panic(err) + } + + for { + q, err := p.Question() + if err == dnsmessage.ErrSectionDone { + break + } + if err != nil { + panic(err) + } + + if q.Name.String() != wantName { + continue + } + + fmt.Println("Found question for name", wantName) + if err := p.SkipAllQuestions(); err != nil { + panic(err) + } + break + } + + var gotIPs []net.IP + for { + h, err := p.AnswerHeader() + if err == dnsmessage.ErrSectionDone { + break + } + if err != nil { + panic(err) + } + + if (h.Type != dnsmessage.TypeA && h.Type != dnsmessage.TypeAAAA) || h.Class != dnsmessage.ClassINET { + continue + } + + if !strings.EqualFold(h.Name.String(), wantName) { + if err := p.SkipAnswer(); err != nil { + panic(err) + } + continue + } + + switch h.Type { + case dnsmessage.TypeA: + r, err := p.AResource() + if err != nil { + panic(err) + } + gotIPs = append(gotIPs, r.A[:]) + case dnsmessage.TypeAAAA: + r, err := p.AAAAResource() + if err != nil { + panic(err) + } + gotIPs = append(gotIPs, r.AAAA[:]) + } + } + + fmt.Printf("Found A/AAAA records for name %s: %v\n", wantName, gotIPs) + + // Output: + // Found question for name bar.example.com. + // Found A/AAAA records for name bar.example.com.: [127.0.0.2] +} diff --git a/vendor/golang.org/x/net/dns/dnsmessage/message.go b/vendor/golang.org/x/net/dns/dnsmessage/message.go index da43b0b..d8d3b03 100644 --- a/vendor/golang.org/x/net/dns/dnsmessage/message.go +++ b/vendor/golang.org/x/net/dns/dnsmessage/message.go @@ -13,7 +13,7 @@ import ( "errors" ) -// Packet formats +// Message formats // A Type is a type of DNS request and response. type Type uint16 @@ -68,18 +68,19 @@ const ( var ( // ErrNotStarted indicates that the prerequisite information isn't // available yet because the previous records haven't been appropriately - // parsed or skipped. - ErrNotStarted = errors.New("parsing of this type isn't available yet") + // parsed, skipped or finished. + ErrNotStarted = errors.New("parsing/packing of this type isn't available yet") // ErrSectionDone indicated that all records in the section have been - // parsed. - ErrSectionDone = errors.New("parsing of this section has completed") + // parsed or finished. + ErrSectionDone = errors.New("parsing/packing of this section has completed") errBaseLen = errors.New("insufficient data for base length type") errCalcLen = errors.New("insufficient data for calculated length type") errReserved = errors.New("segment prefix is reserved") errTooManyPtr = errors.New("too many pointers (>10)") errInvalidPtr = errors.New("invalid pointer") + errNilResouceBody = errors.New("nil resource body") errResourceLen = errors.New("insufficient data for resource body length") errSegTooLong = errors.New("segment length too long") errZeroSegLen = errors.New("zero length segment") @@ -88,6 +89,30 @@ var ( errTooManyAnswers = errors.New("too many Answers to pack (>65535)") errTooManyAuthorities = errors.New("too many Authorities to pack (>65535)") errTooManyAdditionals = errors.New("too many Additionals to pack (>65535)") + errNonCanonicalName = errors.New("name is not in canonical format (it must end with a .)") + errStringTooLong = errors.New("character string exceeds maximum length (255)") + errCompressedSRV = errors.New("compressed name in SRV resource data") +) + +// Internal constants. +const ( + // packStartingCap is the default initial buffer size allocated during + // packing. + // + // The starting capacity doesn't matter too much, but most DNS responses + // Will be <= 512 bytes as it is the limit for DNS over UDP. + packStartingCap = 512 + + // uint16Len is the length (in bytes) of a uint16. + uint16Len = 2 + + // uint32Len is the length (in bytes) of a uint32. + uint32Len = 4 + + // headerLen is the length (in bytes) of a DNS header. + // + // A header is comprised of 6 uint16s and no padding. + headerLen = 6 * uint16Len ) type nestedError struct { @@ -148,7 +173,8 @@ type Message struct { type section uint8 const ( - sectionHeader section = iota + sectionNotStarted section = iota + sectionHeader sectionQuestions sectionAnswers sectionAuthorities @@ -194,6 +220,7 @@ func (h *header) count(sec section) uint16 { return 0 } +// pack appends the wire format of the header to msg. func (h *header) pack(msg []byte) []byte { msg = packUint16(msg, h.id) msg = packUint16(msg, h.bits) @@ -241,37 +268,40 @@ func (h *header) header() Header { } // A Resource is a DNS resource record. -type Resource interface { - // Header return's the Resource's ResourceHeader. - Header() *ResourceHeader +type Resource struct { + Header ResourceHeader + Body ResourceBody +} +// A ResourceBody is a DNS resource record minus the header. +type ResourceBody interface { // pack packs a Resource except for its header. - pack(msg []byte, compression map[string]int) ([]byte, error) + pack(msg []byte, compression map[string]int, compressionOff int) ([]byte, error) // realType returns the actual type of the Resource. This is used to // fill in the header Type field. realType() Type } -func packResource(msg []byte, resource Resource, compression map[string]int) ([]byte, error) { +// pack appends the wire format of the Resource to msg. +func (r *Resource) pack(msg []byte, compression map[string]int, compressionOff int) ([]byte, error) { + if r.Body == nil { + return msg, errNilResouceBody + } oldMsg := msg - resource.Header().Type = resource.realType() - msg, length, err := resource.Header().pack(msg, compression) + r.Header.Type = r.Body.realType() + msg, length, err := r.Header.pack(msg, compression, compressionOff) if err != nil { return msg, &nestedError{"ResourceHeader", err} } preLen := len(msg) - msg, err = resource.pack(msg, compression) + msg, err = r.Body.pack(msg, compression, compressionOff) if err != nil { return msg, &nestedError{"content", err} } - conLen := len(msg) - preLen - if conLen > int(^uint16(0)) { - return oldMsg, errResTooLong + if err := r.Header.fixLen(msg, length, preLen); err != nil { + return oldMsg, err } - // Fill in the length now that we know how long the content is. - packUint16(length[:0], uint16(conLen)) - resource.Header().Length = uint16(conLen) return msg, nil } @@ -330,14 +360,15 @@ func (p *Parser) checkAdvance(sec section) error { func (p *Parser) resource(sec section) (Resource, error) { var r Resource - hdr, err := p.resourceHeader(sec) + var err error + r.Header, err = p.resourceHeader(sec) if err != nil { return r, err } p.resHeaderValid = false - r, p.off, err = unpackResource(p.msg, p.off, hdr) + r.Body, p.off, err = unpackResourceBody(p.msg, p.off, r.Header) if err != nil { - return nil, &nestedError{"unpacking " + sectionNames[sec], err} + return Resource{}, &nestedError{"unpacking " + sectionNames[sec], err} } p.index++ return r, nil @@ -389,7 +420,8 @@ func (p *Parser) Question() (Question, error) { if err := p.checkAdvance(sectionQuestions); err != nil { return Question{}, err } - name, off, err := unpackName(p.msg, p.off) + var name Name + off, err := name.unpack(p.msg, p.off) if err != nil { return Question{}, &nestedError{"unpacking Question.Name", err} } @@ -408,7 +440,13 @@ func (p *Parser) Question() (Question, error) { // AllQuestions parses all Questions. func (p *Parser) AllQuestions() ([]Question, error) { - qs := make([]Question, 0, p.header.questions) + // Multiple questions are valid according to the spec, + // but servers don't actually support them. There will + // be at most one question here. + // + // Do not pre-allocate based on info in p.header, since + // the data is untrusted. + qs := []Question{} for { q, err := p.Question() if err == ErrSectionDone { @@ -464,7 +502,16 @@ func (p *Parser) Answer() (Resource, error) { // AllAnswers parses all Answer Resources. func (p *Parser) AllAnswers() ([]Resource, error) { - as := make([]Resource, 0, p.header.answers) + // The most common query is for A/AAAA, which usually returns + // a handful of IPs. + // + // Pre-allocate up to a certain limit, since p.header is + // untrusted data. + n := int(p.header.answers) + if n > 20 { + n = 20 + } + as := make([]Resource, 0, n) for { a, err := p.Answer() if err == ErrSectionDone { @@ -505,7 +552,16 @@ func (p *Parser) Authority() (Resource, error) { // AllAuthorities parses all Authority Resources. func (p *Parser) AllAuthorities() ([]Resource, error) { - as := make([]Resource, 0, p.header.authorities) + // Authorities contains SOA in case of NXDOMAIN and friends, + // otherwise it is empty. + // + // Pre-allocate up to a certain limit, since p.header is + // untrusted data. + n := int(p.header.authorities) + if n > 10 { + n = 10 + } + as := make([]Resource, 0, n) for { a, err := p.Authority() if err == ErrSectionDone { @@ -546,7 +602,16 @@ func (p *Parser) Additional() (Resource, error) { // AllAdditionals parses all Additional Resources. func (p *Parser) AllAdditionals() ([]Resource, error) { - as := make([]Resource, 0, p.header.additionals) + // Additionals usually contain OPT, and sometimes A/AAAA + // glue records. + // + // Pre-allocate up to a certain limit, since p.header is + // untrusted data. + n := int(p.header.additionals) + if n > 10 { + n = 10 + } + as := make([]Resource, 0, n) for { a, err := p.Additional() if err == ErrSectionDone { @@ -575,6 +640,168 @@ func (p *Parser) SkipAllAdditionals() error { } } +// CNAMEResource parses a single CNAMEResource. +// +// One of the XXXHeader methods must have been called before calling this +// method. +func (p *Parser) CNAMEResource() (CNAMEResource, error) { + if !p.resHeaderValid || p.resHeader.Type != TypeCNAME { + return CNAMEResource{}, ErrNotStarted + } + r, err := unpackCNAMEResource(p.msg, p.off) + if err != nil { + return CNAMEResource{}, err + } + p.off += int(p.resHeader.Length) + p.resHeaderValid = false + p.index++ + return r, nil +} + +// MXResource parses a single MXResource. +// +// One of the XXXHeader methods must have been called before calling this +// method. +func (p *Parser) MXResource() (MXResource, error) { + if !p.resHeaderValid || p.resHeader.Type != TypeMX { + return MXResource{}, ErrNotStarted + } + r, err := unpackMXResource(p.msg, p.off) + if err != nil { + return MXResource{}, err + } + p.off += int(p.resHeader.Length) + p.resHeaderValid = false + p.index++ + return r, nil +} + +// NSResource parses a single NSResource. +// +// One of the XXXHeader methods must have been called before calling this +// method. +func (p *Parser) NSResource() (NSResource, error) { + if !p.resHeaderValid || p.resHeader.Type != TypeNS { + return NSResource{}, ErrNotStarted + } + r, err := unpackNSResource(p.msg, p.off) + if err != nil { + return NSResource{}, err + } + p.off += int(p.resHeader.Length) + p.resHeaderValid = false + p.index++ + return r, nil +} + +// PTRResource parses a single PTRResource. +// +// One of the XXXHeader methods must have been called before calling this +// method. +func (p *Parser) PTRResource() (PTRResource, error) { + if !p.resHeaderValid || p.resHeader.Type != TypePTR { + return PTRResource{}, ErrNotStarted + } + r, err := unpackPTRResource(p.msg, p.off) + if err != nil { + return PTRResource{}, err + } + p.off += int(p.resHeader.Length) + p.resHeaderValid = false + p.index++ + return r, nil +} + +// SOAResource parses a single SOAResource. +// +// One of the XXXHeader methods must have been called before calling this +// method. +func (p *Parser) SOAResource() (SOAResource, error) { + if !p.resHeaderValid || p.resHeader.Type != TypeSOA { + return SOAResource{}, ErrNotStarted + } + r, err := unpackSOAResource(p.msg, p.off) + if err != nil { + return SOAResource{}, err + } + p.off += int(p.resHeader.Length) + p.resHeaderValid = false + p.index++ + return r, nil +} + +// TXTResource parses a single TXTResource. +// +// One of the XXXHeader methods must have been called before calling this +// method. +func (p *Parser) TXTResource() (TXTResource, error) { + if !p.resHeaderValid || p.resHeader.Type != TypeTXT { + return TXTResource{}, ErrNotStarted + } + r, err := unpackTXTResource(p.msg, p.off, p.resHeader.Length) + if err != nil { + return TXTResource{}, err + } + p.off += int(p.resHeader.Length) + p.resHeaderValid = false + p.index++ + return r, nil +} + +// SRVResource parses a single SRVResource. +// +// One of the XXXHeader methods must have been called before calling this +// method. +func (p *Parser) SRVResource() (SRVResource, error) { + if !p.resHeaderValid || p.resHeader.Type != TypeSRV { + return SRVResource{}, ErrNotStarted + } + r, err := unpackSRVResource(p.msg, p.off) + if err != nil { + return SRVResource{}, err + } + p.off += int(p.resHeader.Length) + p.resHeaderValid = false + p.index++ + return r, nil +} + +// AResource parses a single AResource. +// +// One of the XXXHeader methods must have been called before calling this +// method. +func (p *Parser) AResource() (AResource, error) { + if !p.resHeaderValid || p.resHeader.Type != TypeA { + return AResource{}, ErrNotStarted + } + r, err := unpackAResource(p.msg, p.off) + if err != nil { + return AResource{}, err + } + p.off += int(p.resHeader.Length) + p.resHeaderValid = false + p.index++ + return r, nil +} + +// AAAAResource parses a single AAAAResource. +// +// One of the XXXHeader methods must have been called before calling this +// method. +func (p *Parser) AAAAResource() (AAAAResource, error) { + if !p.resHeaderValid || p.resHeader.Type != TypeAAAA { + return AAAAResource{}, ErrNotStarted + } + r, err := unpackAAAAResource(p.msg, p.off) + if err != nil { + return AAAAResource{}, err + } + p.off += int(p.resHeader.Length) + p.resHeaderValid = false + p.index++ + return r, nil +} + // Unpack parses a full Message. func (m *Message) Unpack(msg []byte) error { var p Parser @@ -599,6 +826,12 @@ func (m *Message) Unpack(msg []byte) error { // Pack packs a full Message. func (m *Message) Pack() ([]byte, error) { + return m.AppendPack(make([]byte, 0, packStartingCap)) +} + +// AppendPack is like Pack but appends the full Message to b and returns the +// extended buffer. +func (m *Message) AppendPack(b []byte) ([]byte, error) { // Validate the lengths. It is very unlikely that anyone will try to // pack more than 65535 of any particular type, but it is possible and // we should fail gracefully. @@ -623,47 +856,40 @@ func (m *Message) Pack() ([]byte, error) { h.authorities = uint16(len(m.Authorities)) h.additionals = uint16(len(m.Additionals)) - // The starting capacity doesn't matter too much, but most DNS responses - // Will be <= 512 bytes as it is the limit for DNS over UDP. - msg := make([]byte, 0, 512) - - msg = h.pack(msg) + compressionOff := len(b) + msg := h.pack(b) // RFC 1035 allows (but does not require) compression for packing. RFC // 1035 requires unpacking implementations to support compression, so // unconditionally enabling it is fine. // // DNS lookups are typically done over UDP, and RFC 1035 states that UDP - // DNS packets can be a maximum of 512 bytes long. Without compression, - // many DNS response packets are over this limit, so enabling + // DNS messages can be a maximum of 512 bytes long. Without compression, + // many DNS response messages are over this limit, so enabling // compression will help ensure compliance. compression := map[string]int{} - for _, q := range m.Questions { + for i := range m.Questions { var err error - msg, err = q.pack(msg, compression) - if err != nil { + if msg, err = m.Questions[i].pack(msg, compression, compressionOff); err != nil { return nil, &nestedError{"packing Question", err} } } - for _, a := range m.Answers { + for i := range m.Answers { var err error - msg, err = packResource(msg, a, compression) - if err != nil { + if msg, err = m.Answers[i].pack(msg, compression, compressionOff); err != nil { return nil, &nestedError{"packing Answer", err} } } - for _, a := range m.Authorities { + for i := range m.Authorities { var err error - msg, err = packResource(msg, a, compression) - if err != nil { + if msg, err = m.Authorities[i].pack(msg, compression, compressionOff); err != nil { return nil, &nestedError{"packing Authority", err} } } - for _, a := range m.Additionals { + for i := range m.Additionals { var err error - msg, err = packResource(msg, a, compression) - if err != nil { + if msg, err = m.Additionals[i].pack(msg, compression, compressionOff); err != nil { return nil, &nestedError{"packing Additional", err} } } @@ -671,11 +897,403 @@ func (m *Message) Pack() ([]byte, error) { return msg, nil } -// An ResourceHeader is the header of a DNS resource record. There are +// A Builder allows incrementally packing a DNS message. +// +// Example usage: +// buf := make([]byte, 2, 514) +// b := NewBuilder(buf, Header{...}) +// b.EnableCompression() +// // Optionally start a section and add things to that section. +// // Repeat adding sections as necessary. +// buf, err := b.Finish() +// // If err is nil, buf[2:] will contain the built bytes. +type Builder struct { + // msg is the storage for the message being built. + msg []byte + + // section keeps track of the current section being built. + section section + + // header keeps track of what should go in the header when Finish is + // called. + header header + + // start is the starting index of the bytes allocated in msg for header. + start int + + // compression is a mapping from name suffixes to their starting index + // in msg. + compression map[string]int +} + +// NewBuilder creates a new builder with compression disabled. +// +// Note: Most users will want to immediately enable compression with the +// EnableCompression method. See that method's comment for why you may or may +// not want to enable compression. +// +// The DNS message is appended to the provided initial buffer buf (which may be +// nil) as it is built. The final message is returned by the (*Builder).Finish +// method, which may return the same underlying array if there was sufficient +// capacity in the slice. +func NewBuilder(buf []byte, h Header) Builder { + if buf == nil { + buf = make([]byte, 0, packStartingCap) + } + b := Builder{msg: buf, start: len(buf)} + b.header.id, b.header.bits = h.pack() + var hb [headerLen]byte + b.msg = append(b.msg, hb[:]...) + b.section = sectionHeader + return b +} + +// EnableCompression enables compression in the Builder. +// +// Leaving compression disabled avoids compression related allocations, but can +// result in larger message sizes. Be careful with this mode as it can cause +// messages to exceed the UDP size limit. +// +// According to RFC 1035, section 4.1.4, the use of compression is optional, but +// all implementations must accept both compressed and uncompressed DNS +// messages. +// +// Compression should be enabled before any sections are added for best results. +func (b *Builder) EnableCompression() { + b.compression = map[string]int{} +} + +func (b *Builder) startCheck(s section) error { + if b.section <= sectionNotStarted { + return ErrNotStarted + } + if b.section > s { + return ErrSectionDone + } + return nil +} + +// StartQuestions prepares the builder for packing Questions. +func (b *Builder) StartQuestions() error { + if err := b.startCheck(sectionQuestions); err != nil { + return err + } + b.section = sectionQuestions + return nil +} + +// StartAnswers prepares the builder for packing Answers. +func (b *Builder) StartAnswers() error { + if err := b.startCheck(sectionAnswers); err != nil { + return err + } + b.section = sectionAnswers + return nil +} + +// StartAuthorities prepares the builder for packing Authorities. +func (b *Builder) StartAuthorities() error { + if err := b.startCheck(sectionAuthorities); err != nil { + return err + } + b.section = sectionAuthorities + return nil +} + +// StartAdditionals prepares the builder for packing Additionals. +func (b *Builder) StartAdditionals() error { + if err := b.startCheck(sectionAdditionals); err != nil { + return err + } + b.section = sectionAdditionals + return nil +} + +func (b *Builder) incrementSectionCount() error { + var count *uint16 + var err error + switch b.section { + case sectionQuestions: + count = &b.header.questions + err = errTooManyQuestions + case sectionAnswers: + count = &b.header.answers + err = errTooManyAnswers + case sectionAuthorities: + count = &b.header.authorities + err = errTooManyAuthorities + case sectionAdditionals: + count = &b.header.additionals + err = errTooManyAdditionals + } + if *count == ^uint16(0) { + return err + } + *count++ + return nil +} + +// Question adds a single Question. +func (b *Builder) Question(q Question) error { + if b.section < sectionQuestions { + return ErrNotStarted + } + if b.section > sectionQuestions { + return ErrSectionDone + } + msg, err := q.pack(b.msg, b.compression, b.start) + if err != nil { + return err + } + if err := b.incrementSectionCount(); err != nil { + return err + } + b.msg = msg + return nil +} + +func (b *Builder) checkResourceSection() error { + if b.section < sectionAnswers { + return ErrNotStarted + } + if b.section > sectionAdditionals { + return ErrSectionDone + } + return nil +} + +// CNAMEResource adds a single CNAMEResource. +func (b *Builder) CNAMEResource(h ResourceHeader, r CNAMEResource) error { + if err := b.checkResourceSection(); err != nil { + return err + } + h.Type = r.realType() + msg, length, err := h.pack(b.msg, b.compression, b.start) + if err != nil { + return &nestedError{"ResourceHeader", err} + } + preLen := len(msg) + if msg, err = r.pack(msg, b.compression, b.start); err != nil { + return &nestedError{"CNAMEResource body", err} + } + if err := h.fixLen(msg, length, preLen); err != nil { + return err + } + if err := b.incrementSectionCount(); err != nil { + return err + } + b.msg = msg + return nil +} + +// MXResource adds a single MXResource. +func (b *Builder) MXResource(h ResourceHeader, r MXResource) error { + if err := b.checkResourceSection(); err != nil { + return err + } + h.Type = r.realType() + msg, length, err := h.pack(b.msg, b.compression, b.start) + if err != nil { + return &nestedError{"ResourceHeader", err} + } + preLen := len(msg) + if msg, err = r.pack(msg, b.compression, b.start); err != nil { + return &nestedError{"MXResource body", err} + } + if err := h.fixLen(msg, length, preLen); err != nil { + return err + } + if err := b.incrementSectionCount(); err != nil { + return err + } + b.msg = msg + return nil +} + +// NSResource adds a single NSResource. +func (b *Builder) NSResource(h ResourceHeader, r NSResource) error { + if err := b.checkResourceSection(); err != nil { + return err + } + h.Type = r.realType() + msg, length, err := h.pack(b.msg, b.compression, b.start) + if err != nil { + return &nestedError{"ResourceHeader", err} + } + preLen := len(msg) + if msg, err = r.pack(msg, b.compression, b.start); err != nil { + return &nestedError{"NSResource body", err} + } + if err := h.fixLen(msg, length, preLen); err != nil { + return err + } + if err := b.incrementSectionCount(); err != nil { + return err + } + b.msg = msg + return nil +} + +// PTRResource adds a single PTRResource. +func (b *Builder) PTRResource(h ResourceHeader, r PTRResource) error { + if err := b.checkResourceSection(); err != nil { + return err + } + h.Type = r.realType() + msg, length, err := h.pack(b.msg, b.compression, b.start) + if err != nil { + return &nestedError{"ResourceHeader", err} + } + preLen := len(msg) + if msg, err = r.pack(msg, b.compression, b.start); err != nil { + return &nestedError{"PTRResource body", err} + } + if err := h.fixLen(msg, length, preLen); err != nil { + return err + } + if err := b.incrementSectionCount(); err != nil { + return err + } + b.msg = msg + return nil +} + +// SOAResource adds a single SOAResource. +func (b *Builder) SOAResource(h ResourceHeader, r SOAResource) error { + if err := b.checkResourceSection(); err != nil { + return err + } + h.Type = r.realType() + msg, length, err := h.pack(b.msg, b.compression, b.start) + if err != nil { + return &nestedError{"ResourceHeader", err} + } + preLen := len(msg) + if msg, err = r.pack(msg, b.compression, b.start); err != nil { + return &nestedError{"SOAResource body", err} + } + if err := h.fixLen(msg, length, preLen); err != nil { + return err + } + if err := b.incrementSectionCount(); err != nil { + return err + } + b.msg = msg + return nil +} + +// TXTResource adds a single TXTResource. +func (b *Builder) TXTResource(h ResourceHeader, r TXTResource) error { + if err := b.checkResourceSection(); err != nil { + return err + } + h.Type = r.realType() + msg, length, err := h.pack(b.msg, b.compression, b.start) + if err != nil { + return &nestedError{"ResourceHeader", err} + } + preLen := len(msg) + if msg, err = r.pack(msg, b.compression, b.start); err != nil { + return &nestedError{"TXTResource body", err} + } + if err := h.fixLen(msg, length, preLen); err != nil { + return err + } + if err := b.incrementSectionCount(); err != nil { + return err + } + b.msg = msg + return nil +} + +// SRVResource adds a single SRVResource. +func (b *Builder) SRVResource(h ResourceHeader, r SRVResource) error { + if err := b.checkResourceSection(); err != nil { + return err + } + h.Type = r.realType() + msg, length, err := h.pack(b.msg, b.compression, b.start) + if err != nil { + return &nestedError{"ResourceHeader", err} + } + preLen := len(msg) + if msg, err = r.pack(msg, b.compression, b.start); err != nil { + return &nestedError{"SRVResource body", err} + } + if err := h.fixLen(msg, length, preLen); err != nil { + return err + } + if err := b.incrementSectionCount(); err != nil { + return err + } + b.msg = msg + return nil +} + +// AResource adds a single AResource. +func (b *Builder) AResource(h ResourceHeader, r AResource) error { + if err := b.checkResourceSection(); err != nil { + return err + } + h.Type = r.realType() + msg, length, err := h.pack(b.msg, b.compression, b.start) + if err != nil { + return &nestedError{"ResourceHeader", err} + } + preLen := len(msg) + if msg, err = r.pack(msg, b.compression, b.start); err != nil { + return &nestedError{"AResource body", err} + } + if err := h.fixLen(msg, length, preLen); err != nil { + return err + } + if err := b.incrementSectionCount(); err != nil { + return err + } + b.msg = msg + return nil +} + +// AAAAResource adds a single AAAAResource. +func (b *Builder) AAAAResource(h ResourceHeader, r AAAAResource) error { + if err := b.checkResourceSection(); err != nil { + return err + } + h.Type = r.realType() + msg, length, err := h.pack(b.msg, b.compression, b.start) + if err != nil { + return &nestedError{"ResourceHeader", err} + } + preLen := len(msg) + if msg, err = r.pack(msg, b.compression, b.start); err != nil { + return &nestedError{"AAAAResource body", err} + } + if err := h.fixLen(msg, length, preLen); err != nil { + return err + } + if err := b.incrementSectionCount(); err != nil { + return err + } + b.msg = msg + return nil +} + +// Finish ends message building and generates a binary message. +func (b *Builder) Finish() ([]byte, error) { + if b.section < sectionHeader { + return nil, ErrNotStarted + } + b.section = sectionDone + // Space for the header was allocated in NewBuilder. + b.header.pack(b.msg[b.start:b.start]) + return b.msg, nil +} + +// A ResourceHeader is the header of a DNS resource record. There are // many types of DNS resource records, but they all share the same header. type ResourceHeader struct { // Name is the domain name for which this resource record pertains. - Name string + Name Name // Type is the type of DNS resource record. // @@ -697,17 +1315,13 @@ type ResourceHeader struct { Length uint16 } -// Header implements Resource.Header. -func (h *ResourceHeader) Header() *ResourceHeader { - return h -} - -// pack packs all of the fields in a ResourceHeader except for the length. The -// length bytes are returned as a slice so they can be filled in after the rest -// of the Resource has been packed. -func (h *ResourceHeader) pack(oldMsg []byte, compression map[string]int) (msg []byte, length []byte, err error) { +// pack appends the wire format of the ResourceHeader to oldMsg. +// +// The bytes where length was packed are returned as a slice so they can be +// updated after the rest of the Resource has been packed. +func (h *ResourceHeader) pack(oldMsg []byte, compression map[string]int, compressionOff int) (msg []byte, length []byte, err error) { msg = oldMsg - if msg, err = packName(msg, h.Name, compression); err != nil { + if msg, err = h.Name.pack(msg, compression, compressionOff); err != nil { return oldMsg, nil, &nestedError{"Name", err} } msg = packType(msg, h.Type) @@ -715,13 +1329,13 @@ func (h *ResourceHeader) pack(oldMsg []byte, compression map[string]int) (msg [] msg = packUint32(msg, h.TTL) lenBegin := len(msg) msg = packUint16(msg, h.Length) - return msg, msg[lenBegin:], nil + return msg, msg[lenBegin : lenBegin+uint16Len], nil } func (h *ResourceHeader) unpack(msg []byte, off int) (int, error) { newOff := off var err error - if h.Name, newOff, err = unpackName(msg, newOff); err != nil { + if newOff, err = h.Name.unpack(msg, newOff); err != nil { return off, &nestedError{"Name", err} } if h.Type, newOff, err = unpackType(msg, newOff); err != nil { @@ -739,6 +1353,19 @@ func (h *ResourceHeader) unpack(msg []byte, off int) (int, error) { return newOff, nil } +func (h *ResourceHeader) fixLen(msg []byte, length []byte, preLen int) error { + conLen := len(msg) - preLen + if conLen > int(^uint16(0)) { + return errResTooLong + } + + // Fill in the length now that we know how long the content is. + packUint16(length[:0], uint16(conLen)) + h.Length = uint16(conLen) + + return nil +} + func skipResource(msg []byte, off int) (int, error) { newOff, err := skipName(msg, off) if err != nil { @@ -763,24 +1390,26 @@ func skipResource(msg []byte, off int) (int, error) { return newOff, nil } +// packUint16 appends the wire format of field to msg. func packUint16(msg []byte, field uint16) []byte { return append(msg, byte(field>>8), byte(field)) } func unpackUint16(msg []byte, off int) (uint16, int, error) { - if off+2 > len(msg) { + if off+uint16Len > len(msg) { return 0, off, errBaseLen } - return uint16(msg[off])<<8 | uint16(msg[off+1]), off + 2, nil + return uint16(msg[off])<<8 | uint16(msg[off+1]), off + uint16Len, nil } func skipUint16(msg []byte, off int) (int, error) { - if off+2 > len(msg) { + if off+uint16Len > len(msg) { return off, errBaseLen } - return off + 2, nil + return off + uint16Len, nil } +// packType appends the wire format of field to msg. func packType(msg []byte, field Type) []byte { return packUint16(msg, uint16(field)) } @@ -794,6 +1423,7 @@ func skipType(msg []byte, off int) (int, error) { return skipUint16(msg, off) } +// packClass appends the wire format of field to msg. func packClass(msg []byte, field Class) []byte { return packUint16(msg, uint16(field)) } @@ -807,6 +1437,7 @@ func skipClass(msg []byte, off int) (int, error) { return skipUint16(msg, off) } +// packUint32 appends the wire format of field to msg. func packUint32(msg []byte, field uint32) []byte { return append( msg, @@ -818,31 +1449,30 @@ func packUint32(msg []byte, field uint32) []byte { } func unpackUint32(msg []byte, off int) (uint32, int, error) { - if off+4 > len(msg) { + if off+uint32Len > len(msg) { return 0, off, errBaseLen } v := uint32(msg[off])<<24 | uint32(msg[off+1])<<16 | uint32(msg[off+2])<<8 | uint32(msg[off+3]) - return v, off + 4, nil + return v, off + uint32Len, nil } func skipUint32(msg []byte, off int) (int, error) { - if off+4 > len(msg) { + if off+uint32Len > len(msg) { return off, errBaseLen } - return off + 4, nil + return off + uint32Len, nil } -func packText(msg []byte, field string) []byte { - for len(field) > 0 { - l := len(field) - if l > 255 { - l = 255 - } - msg = append(msg, byte(l)) - msg = append(msg, field[:l]...) - field = field[l:] +// packText appends the wire format of field to msg. +func packText(msg []byte, field string) ([]byte, error) { + l := len(field) + if l > 255 { + return nil, errStringTooLong } - return msg + msg = append(msg, byte(l)) + msg = append(msg, field...) + + return msg, nil } func unpackText(msg []byte, off int) (string, int, error) { @@ -868,6 +1498,7 @@ func skipText(msg []byte, off int) (int, error) { return endOff, nil } +// packBytes appends the wire format of field to msg. func packBytes(msg []byte, field []byte) []byte { return append(msg, field...) } @@ -889,30 +1520,53 @@ func skipBytes(msg []byte, off int, field []byte) (int, error) { return newOff, nil } -// packName packs a domain name. +const nameLen = 255 + +// A Name is a non-encoded domain name. It is used instead of strings to avoid +// allocations. +type Name struct { + Data [nameLen]byte + Length uint8 +} + +// NewName creates a new Name from a string. +func NewName(name string) (Name, error) { + if len([]byte(name)) > nameLen { + return Name{}, errCalcLen + } + n := Name{Length: uint8(len(name))} + copy(n.Data[:], []byte(name)) + return n, nil +} + +func (n Name) String() string { + return string(n.Data[:n.Length]) +} + +// pack appends the wire format of the Name to msg. // // Domain names are a sequence of counted strings split at the dots. They end // with a zero-length string. Compression can be used to reuse domain suffixes. // // The compression map will be updated with new domain suffixes. If compression // is nil, compression will not be used. -func packName(msg []byte, name string, compression map[string]int) ([]byte, error) { +func (n *Name) pack(msg []byte, compression map[string]int, compressionOff int) ([]byte, error) { oldMsg := msg // Add a trailing dot to canonicalize name. - if n := len(name); n == 0 || name[n-1] != '.' { - name += "." + if n.Length == 0 || n.Data[n.Length-1] != '.' { + return oldMsg, errNonCanonicalName } // Allow root domain. - if name == "." { + if n.Data[0] == '.' && n.Length == 1 { return append(msg, 0), nil } // Emit sequence of counted strings, chopping at dots. - for i, begin := 0, 0; i < len(name); i++ { + for i, begin := 0, 0; i < int(n.Length); i++ { // Check for the end of the segment. - if name[i] == '.' { + if n.Data[i] == '.' { // The two most significant bits have special meaning. // It isn't allowed for segments to be long enough to // need them. @@ -928,7 +1582,7 @@ func packName(msg []byte, name string, compression map[string]int) ([]byte, erro msg = append(msg, byte(i-begin)) for j := begin; j < i; j++ { - msg = append(msg, name[j]) + msg = append(msg, n.Data[j]) } begin = i + 1 @@ -938,8 +1592,8 @@ func packName(msg []byte, name string, compression map[string]int) ([]byte, erro // We can only compress domain suffixes starting with a new // segment. A pointer is two bytes with the two most significant // bits set to 1 to indicate that it is a pointer. - if (i == 0 || name[i-1] == '.') && compression != nil { - if ptr, ok := compression[name[i:]]; ok { + if (i == 0 || n.Data[i-1] == '.') && compression != nil { + if ptr, ok := compression[string(n.Data[i:])]; ok { // Hit. Emit a pointer instead of the rest of // the domain. return append(msg, byte(ptr>>8|0xC0), byte(ptr)), nil @@ -948,15 +1602,19 @@ func packName(msg []byte, name string, compression map[string]int) ([]byte, erro // Miss. Add the suffix to the compression table if the // offset can be stored in the available 14 bytes. if len(msg) <= int(^uint16(0)>>2) { - compression[name[i:]] = len(msg) + compression[string(n.Data[i:])] = len(msg) - compressionOff } } } return append(msg, 0), nil } -// unpackName unpacks a domain name. -func unpackName(msg []byte, off int) (string, int, error) { +// unpack unpacks a domain name. +func (n *Name) unpack(msg []byte, off int) (int, error) { + return n.unpackCompressed(msg, off, true /* allowCompression */) +} + +func (n *Name) unpackCompressed(msg []byte, off int, allowCompression bool) (int, error) { // currOff is the current working offset. currOff := off @@ -965,15 +1623,16 @@ func unpackName(msg []byte, off int) (string, int, error) { // the usage of this name. newOff := off - // name is the domain name being unpacked. - name := make([]byte, 0, 255) - // ptr is the number of pointers followed. var ptr int + + // Name is a slice representation of the name data. + name := n.Data[:0] + Loop: for { if currOff >= len(msg) { - return "", off, errBaseLen + return off, errBaseLen } c := int(msg[currOff]) currOff++ @@ -985,14 +1644,17 @@ Loop: } endOff := currOff + c if endOff > len(msg) { - return "", off, errCalcLen + return off, errCalcLen } name = append(name, msg[currOff:endOff]...) name = append(name, '.') currOff = endOff case 0xC0: // Pointer + if !allowCompression { + return off, errCompressedSRV + } if currOff >= len(msg) { - return "", off, errInvalidPtr + return off, errInvalidPtr } c1 := msg[currOff] currOff++ @@ -1001,21 +1663,25 @@ Loop: } // Don't follow too many pointers, maybe there's a loop. if ptr++; ptr > 10 { - return "", off, errTooManyPtr + return off, errTooManyPtr } currOff = (c^0xC0)<<8 | int(c1) default: // Prefixes 0x80 and 0x40 are reserved. - return "", off, errReserved + return off, errReserved } } if len(name) == 0 { name = append(name, '.') } + if len(name) > len(n.Data) { + return off, errCalcLen + } + n.Length = uint8(len(name)) if ptr == 0 { newOff = currOff } - return string(name), newOff, nil + return newOff, nil } func skipName(msg []byte, off int) (int, error) { @@ -1061,13 +1727,14 @@ Loop: // A Question is a DNS query. type Question struct { - Name string + Name Name Type Type Class Class } -func (q *Question) pack(msg []byte, compression map[string]int) ([]byte, error) { - msg, err := packName(msg, q.Name, compression) +// pack appends the wire format of the Question to msg. +func (q *Question) pack(msg []byte, compression map[string]int, compressionOff int) ([]byte, error) { + msg, err := q.Name.pack(msg, compression, compressionOff) if err != nil { return msg, &nestedError{"Name", err} } @@ -1075,159 +1742,171 @@ func (q *Question) pack(msg []byte, compression map[string]int) ([]byte, error) return packClass(msg, q.Class), nil } -func unpackResource(msg []byte, off int, hdr ResourceHeader) (Resource, int, error) { +func unpackResourceBody(msg []byte, off int, hdr ResourceHeader) (ResourceBody, int, error) { var ( - r Resource + r ResourceBody err error name string ) switch hdr.Type { case TypeA: - r, err = unpackAResource(hdr, msg, off) + var rb AResource + rb, err = unpackAResource(msg, off) + r = &rb name = "A" case TypeNS: - r, err = unpackNSResource(hdr, msg, off) + var rb NSResource + rb, err = unpackNSResource(msg, off) + r = &rb name = "NS" case TypeCNAME: - r, err = unpackCNAMEResource(hdr, msg, off) + var rb CNAMEResource + rb, err = unpackCNAMEResource(msg, off) + r = &rb name = "CNAME" case TypeSOA: - r, err = unpackSOAResource(hdr, msg, off) + var rb SOAResource + rb, err = unpackSOAResource(msg, off) + r = &rb name = "SOA" case TypePTR: - r, err = unpackPTRResource(hdr, msg, off) + var rb PTRResource + rb, err = unpackPTRResource(msg, off) + r = &rb name = "PTR" case TypeMX: - r, err = unpackMXResource(hdr, msg, off) + var rb MXResource + rb, err = unpackMXResource(msg, off) + r = &rb name = "MX" case TypeTXT: - r, err = unpackTXTResource(hdr, msg, off) + var rb TXTResource + rb, err = unpackTXTResource(msg, off, hdr.Length) + r = &rb name = "TXT" case TypeAAAA: - r, err = unpackAAAAResource(hdr, msg, off) + var rb AAAAResource + rb, err = unpackAAAAResource(msg, off) + r = &rb name = "AAAA" case TypeSRV: - r, err = unpackSRVResource(hdr, msg, off) + var rb SRVResource + rb, err = unpackSRVResource(msg, off) + r = &rb name = "SRV" } if err != nil { return nil, off, &nestedError{name + " record", err} } - if r != nil { - return r, off + int(hdr.Length), nil + if r == nil { + return nil, off, errors.New("invalid resource type: " + string(hdr.Type+'0')) } - return nil, off, errors.New("invalid resource type: " + string(hdr.Type+'0')) + return r, off + int(hdr.Length), nil } // A CNAMEResource is a CNAME Resource record. type CNAMEResource struct { - ResourceHeader - - CNAME string + CNAME Name } func (r *CNAMEResource) realType() Type { return TypeCNAME } -func (r *CNAMEResource) pack(msg []byte, compression map[string]int) ([]byte, error) { - return packName(msg, r.CNAME, compression) +// pack appends the wire format of the CNAMEResource to msg. +func (r *CNAMEResource) pack(msg []byte, compression map[string]int, compressionOff int) ([]byte, error) { + return r.CNAME.pack(msg, compression, compressionOff) } -func unpackCNAMEResource(hdr ResourceHeader, msg []byte, off int) (*CNAMEResource, error) { - cname, _, err := unpackName(msg, off) - if err != nil { - return nil, err +func unpackCNAMEResource(msg []byte, off int) (CNAMEResource, error) { + var cname Name + if _, err := cname.unpack(msg, off); err != nil { + return CNAMEResource{}, err } - return &CNAMEResource{hdr, cname}, nil + return CNAMEResource{cname}, nil } // An MXResource is an MX Resource record. type MXResource struct { - ResourceHeader - Pref uint16 - MX string + MX Name } func (r *MXResource) realType() Type { return TypeMX } -func (r *MXResource) pack(msg []byte, compression map[string]int) ([]byte, error) { +// pack appends the wire format of the MXResource to msg. +func (r *MXResource) pack(msg []byte, compression map[string]int, compressionOff int) ([]byte, error) { oldMsg := msg msg = packUint16(msg, r.Pref) - msg, err := packName(msg, r.MX, compression) + msg, err := r.MX.pack(msg, compression, compressionOff) if err != nil { return oldMsg, &nestedError{"MXResource.MX", err} } return msg, nil } -func unpackMXResource(hdr ResourceHeader, msg []byte, off int) (*MXResource, error) { +func unpackMXResource(msg []byte, off int) (MXResource, error) { pref, off, err := unpackUint16(msg, off) if err != nil { - return nil, &nestedError{"Pref", err} + return MXResource{}, &nestedError{"Pref", err} } - mx, _, err := unpackName(msg, off) - if err != nil { - return nil, &nestedError{"MX", err} + var mx Name + if _, err := mx.unpack(msg, off); err != nil { + return MXResource{}, &nestedError{"MX", err} } - return &MXResource{hdr, pref, mx}, nil + return MXResource{pref, mx}, nil } // An NSResource is an NS Resource record. type NSResource struct { - ResourceHeader - - NS string + NS Name } func (r *NSResource) realType() Type { return TypeNS } -func (r *NSResource) pack(msg []byte, compression map[string]int) ([]byte, error) { - return packName(msg, r.NS, compression) +// pack appends the wire format of the NSResource to msg. +func (r *NSResource) pack(msg []byte, compression map[string]int, compressionOff int) ([]byte, error) { + return r.NS.pack(msg, compression, compressionOff) } -func unpackNSResource(hdr ResourceHeader, msg []byte, off int) (*NSResource, error) { - ns, _, err := unpackName(msg, off) - if err != nil { - return nil, err +func unpackNSResource(msg []byte, off int) (NSResource, error) { + var ns Name + if _, err := ns.unpack(msg, off); err != nil { + return NSResource{}, err } - return &NSResource{hdr, ns}, nil + return NSResource{ns}, nil } // A PTRResource is a PTR Resource record. type PTRResource struct { - ResourceHeader - - PTR string + PTR Name } func (r *PTRResource) realType() Type { return TypePTR } -func (r *PTRResource) pack(msg []byte, compression map[string]int) ([]byte, error) { - return packName(msg, r.PTR, compression) +// pack appends the wire format of the PTRResource to msg. +func (r *PTRResource) pack(msg []byte, compression map[string]int, compressionOff int) ([]byte, error) { + return r.PTR.pack(msg, compression, compressionOff) } -func unpackPTRResource(hdr ResourceHeader, msg []byte, off int) (*PTRResource, error) { - ptr, _, err := unpackName(msg, off) - if err != nil { - return nil, err +func unpackPTRResource(msg []byte, off int) (PTRResource, error) { + var ptr Name + if _, err := ptr.unpack(msg, off); err != nil { + return PTRResource{}, err } - return &PTRResource{hdr, ptr}, nil + return PTRResource{ptr}, nil } // An SOAResource is an SOA Resource record. type SOAResource struct { - ResourceHeader - - NS string - MBox string + NS Name + MBox Name Serial uint32 Refresh uint32 Retry uint32 @@ -1243,13 +1922,14 @@ func (r *SOAResource) realType() Type { return TypeSOA } -func (r *SOAResource) pack(msg []byte, compression map[string]int) ([]byte, error) { +// pack appends the wire format of the SOAResource to msg. +func (r *SOAResource) pack(msg []byte, compression map[string]int, compressionOff int) ([]byte, error) { oldMsg := msg - msg, err := packName(msg, r.NS, compression) + msg, err := r.NS.pack(msg, compression, compressionOff) if err != nil { return oldMsg, &nestedError{"SOAResource.NS", err} } - msg, err = packName(msg, r.MBox, compression) + msg, err = r.MBox.pack(msg, compression, compressionOff) if err != nil { return oldMsg, &nestedError{"SOAResource.MBox", err} } @@ -1260,121 +1940,126 @@ func (r *SOAResource) pack(msg []byte, compression map[string]int) ([]byte, erro return packUint32(msg, r.MinTTL), nil } -func unpackSOAResource(hdr ResourceHeader, msg []byte, off int) (*SOAResource, error) { - ns, off, err := unpackName(msg, off) +func unpackSOAResource(msg []byte, off int) (SOAResource, error) { + var ns Name + off, err := ns.unpack(msg, off) if err != nil { - return nil, &nestedError{"NS", err} + return SOAResource{}, &nestedError{"NS", err} } - mbox, off, err := unpackName(msg, off) - if err != nil { - return nil, &nestedError{"MBox", err} + var mbox Name + if off, err = mbox.unpack(msg, off); err != nil { + return SOAResource{}, &nestedError{"MBox", err} } serial, off, err := unpackUint32(msg, off) if err != nil { - return nil, &nestedError{"Serial", err} + return SOAResource{}, &nestedError{"Serial", err} } refresh, off, err := unpackUint32(msg, off) if err != nil { - return nil, &nestedError{"Refresh", err} + return SOAResource{}, &nestedError{"Refresh", err} } retry, off, err := unpackUint32(msg, off) if err != nil { - return nil, &nestedError{"Retry", err} + return SOAResource{}, &nestedError{"Retry", err} } expire, off, err := unpackUint32(msg, off) if err != nil { - return nil, &nestedError{"Expire", err} + return SOAResource{}, &nestedError{"Expire", err} } minTTL, _, err := unpackUint32(msg, off) if err != nil { - return nil, &nestedError{"MinTTL", err} + return SOAResource{}, &nestedError{"MinTTL", err} } - return &SOAResource{hdr, ns, mbox, serial, refresh, retry, expire, minTTL}, nil + return SOAResource{ns, mbox, serial, refresh, retry, expire, minTTL}, nil } // A TXTResource is a TXT Resource record. type TXTResource struct { - ResourceHeader - - Txt string // Not a domain name. + TXT []string } func (r *TXTResource) realType() Type { return TypeTXT } -func (r *TXTResource) pack(msg []byte, compression map[string]int) ([]byte, error) { - return packText(msg, r.Txt), nil +// pack appends the wire format of the TXTResource to msg. +func (r *TXTResource) pack(msg []byte, compression map[string]int, compressionOff int) ([]byte, error) { + oldMsg := msg + for _, s := range r.TXT { + var err error + msg, err = packText(msg, s) + if err != nil { + return oldMsg, err + } + } + return msg, nil } -func unpackTXTResource(hdr ResourceHeader, msg []byte, off int) (*TXTResource, error) { - var txt string - for n := uint16(0); n < hdr.Length; { +func unpackTXTResource(msg []byte, off int, length uint16) (TXTResource, error) { + txts := make([]string, 0, 1) + for n := uint16(0); n < length; { var t string var err error if t, off, err = unpackText(msg, off); err != nil { - return nil, &nestedError{"text", err} + return TXTResource{}, &nestedError{"text", err} } // Check if we got too many bytes. - if hdr.Length-n < uint16(len(t))+1 { - return nil, errCalcLen + if length-n < uint16(len(t))+1 { + return TXTResource{}, errCalcLen } n += uint16(len(t)) + 1 - txt += t + txts = append(txts, t) } - return &TXTResource{hdr, txt}, nil + return TXTResource{txts}, nil } // An SRVResource is an SRV Resource record. type SRVResource struct { - ResourceHeader - Priority uint16 Weight uint16 Port uint16 - Target string // Not compressed as per RFC 2782. + Target Name // Not compressed as per RFC 2782. } func (r *SRVResource) realType() Type { return TypeSRV } -func (r *SRVResource) pack(msg []byte, compression map[string]int) ([]byte, error) { +// pack appends the wire format of the SRVResource to msg. +func (r *SRVResource) pack(msg []byte, compression map[string]int, compressionOff int) ([]byte, error) { oldMsg := msg msg = packUint16(msg, r.Priority) msg = packUint16(msg, r.Weight) msg = packUint16(msg, r.Port) - msg, err := packName(msg, r.Target, nil) + msg, err := r.Target.pack(msg, nil, compressionOff) if err != nil { return oldMsg, &nestedError{"SRVResource.Target", err} } return msg, nil } -func unpackSRVResource(hdr ResourceHeader, msg []byte, off int) (*SRVResource, error) { +func unpackSRVResource(msg []byte, off int) (SRVResource, error) { priority, off, err := unpackUint16(msg, off) if err != nil { - return nil, &nestedError{"Priority", err} + return SRVResource{}, &nestedError{"Priority", err} } weight, off, err := unpackUint16(msg, off) if err != nil { - return nil, &nestedError{"Weight", err} + return SRVResource{}, &nestedError{"Weight", err} } port, off, err := unpackUint16(msg, off) if err != nil { - return nil, &nestedError{"Port", err} + return SRVResource{}, &nestedError{"Port", err} } - target, _, err := unpackName(msg, off) - if err != nil { - return nil, &nestedError{"Target", err} + var target Name + if _, err := target.unpackCompressed(msg, off, false /* allowCompression */); err != nil { + return SRVResource{}, &nestedError{"Target", err} } - return &SRVResource{hdr, priority, weight, port, target}, nil + return SRVResource{priority, weight, port, target}, nil } // An AResource is an A Resource record. type AResource struct { - ResourceHeader - A [4]byte } @@ -1382,22 +2067,21 @@ func (r *AResource) realType() Type { return TypeA } -func (r *AResource) pack(msg []byte, compression map[string]int) ([]byte, error) { +// pack appends the wire format of the AResource to msg. +func (r *AResource) pack(msg []byte, compression map[string]int, compressionOff int) ([]byte, error) { return packBytes(msg, r.A[:]), nil } -func unpackAResource(hdr ResourceHeader, msg []byte, off int) (*AResource, error) { +func unpackAResource(msg []byte, off int) (AResource, error) { var a [4]byte if _, err := unpackBytes(msg, off, a[:]); err != nil { - return nil, err + return AResource{}, err } - return &AResource{hdr, a}, nil + return AResource{a}, nil } // An AAAAResource is an AAAA Resource record. type AAAAResource struct { - ResourceHeader - AAAA [16]byte } @@ -1405,14 +2089,15 @@ func (r *AAAAResource) realType() Type { return TypeAAAA } -func (r *AAAAResource) pack(msg []byte, compression map[string]int) ([]byte, error) { +// pack appends the wire format of the AAAAResource to msg. +func (r *AAAAResource) pack(msg []byte, compression map[string]int, compressionOff int) ([]byte, error) { return packBytes(msg, r.AAAA[:]), nil } -func unpackAAAAResource(hdr ResourceHeader, msg []byte, off int) (*AAAAResource, error) { +func unpackAAAAResource(msg []byte, off int) (AAAAResource, error) { var aaaa [16]byte if _, err := unpackBytes(msg, off, aaaa[:]); err != nil { - return nil, err + return AAAAResource{}, err } - return &AAAAResource{hdr, aaaa}, nil + return AAAAResource{aaaa}, nil } diff --git a/vendor/golang.org/x/net/dns/dnsmessage/message_test.go b/vendor/golang.org/x/net/dns/dnsmessage/message_test.go index 46edd72..052897f 100644 --- a/vendor/golang.org/x/net/dns/dnsmessage/message_test.go +++ b/vendor/golang.org/x/net/dns/dnsmessage/message_test.go @@ -5,13 +5,21 @@ package dnsmessage import ( + "bytes" "fmt" - "net" "reflect" "strings" "testing" ) +func mustNewName(name string) Name { + n, err := NewName(name) + if err != nil { + panic(err) + } + return n +} + func (m *Message) String() string { s := fmt.Sprintf("Message: %#v\n", &m.Header) if len(m.Questions) > 0 { @@ -41,13 +49,21 @@ func (m *Message) String() string { return s } +func TestNameString(t *testing.T) { + want := "foo" + name := mustNewName(want) + if got := fmt.Sprint(name); got != want { + t.Errorf("got fmt.Sprint(%#v) = %s, want = %s", name, got, want) + } +} + func TestQuestionPackUnpack(t *testing.T) { want := Question{ - Name: ".", + Name: mustNewName("."), Type: TypeA, Class: ClassINET, } - buf, err := want.pack(make([]byte, 1, 50), map[string]int{}) + buf, err := want.pack(make([]byte, 1, 50), map[string]int{}, 1) if err != nil { t.Fatal("Packing failed:", err) } @@ -68,16 +84,42 @@ func TestQuestionPackUnpack(t *testing.T) { } } +func TestName(t *testing.T) { + tests := []string{ + "", + ".", + "google..com", + "google.com", + "google..com.", + "google.com.", + ".google.com.", + "www..google.com.", + "www.google.com.", + } + + for _, test := range tests { + n, err := NewName(test) + if err != nil { + t.Errorf("Creating name for %q: %v", test, err) + continue + } + if ns := n.String(); ns != test { + t.Errorf("Got %#v.String() = %q, want = %q", n, ns, test) + continue + } + } +} + func TestNamePackUnpack(t *testing.T) { tests := []struct { in string want string err error }{ - {"", ".", nil}, + {"", "", errNonCanonicalName}, {".", ".", nil}, - {"google..com", "", errZeroSegLen}, - {"google.com", "google.com.", nil}, + {"google..com", "", errNonCanonicalName}, + {"google.com", "", errNonCanonicalName}, {"google..com.", "", errZeroSegLen}, {"google.com.", "google.com.", nil}, {".google.com.", "", errZeroSegLen}, @@ -86,29 +128,113 @@ func TestNamePackUnpack(t *testing.T) { } for _, test := range tests { - buf, err := packName(make([]byte, 0, 30), test.in, map[string]int{}) + in := mustNewName(test.in) + want := mustNewName(test.want) + buf, err := in.pack(make([]byte, 0, 30), map[string]int{}, 0) if err != test.err { - t.Errorf("Packing of %s: got err = %v, want err = %v", test.in, err, test.err) + t.Errorf("Packing of %q: got err = %v, want err = %v", test.in, err, test.err) continue } if test.err != nil { continue } - got, n, err := unpackName(buf, 0) + var got Name + n, err := got.unpack(buf, 0) if err != nil { - t.Errorf("Unpacking for %s failed: %v", test.in, err) + t.Errorf("Unpacking for %q failed: %v", test.in, err) continue } if n != len(buf) { t.Errorf( - "Unpacked different amount than packed for %s: got n = %d, want = %d", + "Unpacked different amount than packed for %q: got n = %d, want = %d", test.in, n, len(buf), ) } - if got != test.want { - t.Errorf("Unpacking packing of %s: got = %s, want = %s", test.in, got, test.want) + if got != want { + t.Errorf("Unpacking packing of %q: got = %#v, want = %#v", test.in, got, want) + } + } +} + +func TestIncompressibleName(t *testing.T) { + name := mustNewName("example.com.") + compression := map[string]int{} + buf, err := name.pack(make([]byte, 0, 100), compression, 0) + if err != nil { + t.Fatal("First packing failed:", err) + } + buf, err = name.pack(buf, compression, 0) + if err != nil { + t.Fatal("Second packing failed:", err) + } + var n1 Name + off, err := n1.unpackCompressed(buf, 0, false /* allowCompression */) + if err != nil { + t.Fatal("Unpacking incompressible name without pointers failed:", err) + } + var n2 Name + if _, err := n2.unpackCompressed(buf, off, false /* allowCompression */); err != errCompressedSRV { + t.Errorf("Unpacking compressed incompressible name with pointers: got err = %v, want = %v", err, errCompressedSRV) + } +} + +func checkErrorPrefix(err error, prefix string) bool { + e, ok := err.(*nestedError) + return ok && e.s == prefix +} + +func TestHeaderUnpackError(t *testing.T) { + wants := []string{ + "id", + "bits", + "questions", + "answers", + "authorities", + "additionals", + } + var buf []byte + var h header + for _, want := range wants { + n, err := h.unpack(buf, 0) + if n != 0 || !checkErrorPrefix(err, want) { + t.Errorf("got h.unpack([%d]byte, 0) = %d, %v, want = 0, %s", len(buf), n, err, want) + } + buf = append(buf, 0, 0) + } +} + +func TestParserStart(t *testing.T) { + const want = "unpacking header" + var p Parser + for i := 0; i <= 1; i++ { + _, err := p.Start([]byte{}) + if !checkErrorPrefix(err, want) { + t.Errorf("got p.Start(nil) = _, %v, want = _, %s", err, want) + } + } +} + +func TestResourceNotStarted(t *testing.T) { + tests := []struct { + name string + fn func(*Parser) error + }{ + {"CNAMEResource", func(p *Parser) error { _, err := p.CNAMEResource(); return err }}, + {"MXResource", func(p *Parser) error { _, err := p.MXResource(); return err }}, + {"NSResource", func(p *Parser) error { _, err := p.NSResource(); return err }}, + {"PTRResource", func(p *Parser) error { _, err := p.PTRResource(); return err }}, + {"SOAResource", func(p *Parser) error { _, err := p.SOAResource(); return err }}, + {"TXTResource", func(p *Parser) error { _, err := p.TXTResource(); return err }}, + {"SRVResource", func(p *Parser) error { _, err := p.SRVResource(); return err }}, + {"AResource", func(p *Parser) error { _, err := p.AResource(); return err }}, + {"AAAAResource", func(p *Parser) error { _, err := p.AAAAResource(); return err }}, + } + + for _, test := range tests { + if err := test.fn(&Parser{}); err != ErrNotStarted { + t.Errorf("got _, %v = p.%s(), want = _, %v", err, test.name, ErrNotStarted) } } } @@ -118,7 +244,7 @@ func TestDNSPackUnpack(t *testing.T) { { Questions: []Question{ { - Name: ".", + Name: mustNewName("."), Type: TypeAAAA, Class: ClassINET, }, @@ -145,6 +271,40 @@ func TestDNSPackUnpack(t *testing.T) { } } +func TestDNSAppendPackUnpack(t *testing.T) { + wants := []Message{ + { + Questions: []Question{ + { + Name: mustNewName("."), + Type: TypeAAAA, + Class: ClassINET, + }, + }, + Answers: []Resource{}, + Authorities: []Resource{}, + Additionals: []Resource{}, + }, + largeTestMsg(), + } + for i, want := range wants { + b := make([]byte, 2, 514) + b, err := want.AppendPack(b) + if err != nil { + t.Fatalf("%d: packing failed: %v", i, err) + } + b = b[2:] + var got Message + err = got.Unpack(b) + if err != nil { + t.Fatalf("%d: unpacking failed: %v", i, err) + } + if !reflect.DeepEqual(got, want) { + t.Errorf("%d: got = %+v, want = %+v", i, &got, &want) + } + } +} + func TestSkipAll(t *testing.T) { msg := largeTestMsg() buf, err := msg.Pack() @@ -174,6 +334,69 @@ func TestSkipAll(t *testing.T) { } } +func TestSkipEach(t *testing.T) { + msg := smallTestMsg() + + buf, err := msg.Pack() + if err != nil { + t.Fatal("Packing test message:", err) + } + var p Parser + if _, err := p.Start(buf); err != nil { + t.Fatal(err) + } + + tests := []struct { + name string + f func() error + }{ + {"SkipQuestion", p.SkipQuestion}, + {"SkipAnswer", p.SkipAnswer}, + {"SkipAuthority", p.SkipAuthority}, + {"SkipAdditional", p.SkipAdditional}, + } + for _, test := range tests { + if err := test.f(); err != nil { + t.Errorf("First call: got %s() = %v, want = %v", test.name, err, nil) + } + if err := test.f(); err != ErrSectionDone { + t.Errorf("Second call: got %s() = %v, want = %v", test.name, err, ErrSectionDone) + } + } +} + +func TestSkipAfterRead(t *testing.T) { + msg := smallTestMsg() + + buf, err := msg.Pack() + if err != nil { + t.Fatal("Packing test message:", err) + } + var p Parser + if _, err := p.Start(buf); err != nil { + t.Fatal(err) + } + + tests := []struct { + name string + skip func() error + read func() error + }{ + {"Question", p.SkipQuestion, func() error { _, err := p.Question(); return err }}, + {"Answer", p.SkipAnswer, func() error { _, err := p.Answer(); return err }}, + {"Authority", p.SkipAuthority, func() error { _, err := p.Authority(); return err }}, + {"Additional", p.SkipAdditional, func() error { _, err := p.Additional(); return err }}, + } + for _, test := range tests { + if err := test.read(); err != nil { + t.Errorf("Got %s() = _, %v, want = _, %v", test.name, err, nil) + } + if err := test.skip(); err != ErrSectionDone { + t.Errorf("Got Skip%s() = %v, want = %v", test.name, err, ErrSectionDone) + } + } +} + func TestSkipNotStarted(t *testing.T) { var p Parser @@ -238,103 +461,356 @@ func TestTooManyRecords(t *testing.T) { } func TestVeryLongTxt(t *testing.T) { - want := &TXTResource{ - ResourceHeader: ResourceHeader{ - Name: "foo.bar.example.com.", + want := Resource{ + ResourceHeader{ + Name: mustNewName("foo.bar.example.com."), Type: TypeTXT, Class: ClassINET, }, - Txt: loremIpsum, + &TXTResource{[]string{ + "", + "", + "foo bar", + "", + "www.example.com", + "www.example.com.", + strings.Repeat(".", 255), + }}, } - buf, err := packResource(make([]byte, 0, 8000), want, map[string]int{}) + buf, err := want.pack(make([]byte, 0, 8000), map[string]int{}, 0) if err != nil { t.Fatal("Packing failed:", err) } - var hdr ResourceHeader - off, err := hdr.unpack(buf, 0) + var got Resource + off, err := got.Header.unpack(buf, 0) if err != nil { t.Fatal("Unpacking ResourceHeader failed:", err) } - got, n, err := unpackResource(buf, off, hdr) + body, n, err := unpackResourceBody(buf, off, got.Header) if err != nil { t.Fatal("Unpacking failed:", err) } + got.Body = body if n != len(buf) { t.Errorf("Unpacked different amount than packed: got n = %d, want = %d", n, len(buf)) } if !reflect.DeepEqual(got, want) { - t.Errorf("Got = %+v, want = %+v", got, want) + t.Errorf("Got = %#v, want = %#v", got, want) } } -func ExampleHeaderSearch() { +func TestTooLongTxt(t *testing.T) { + rb := TXTResource{[]string{strings.Repeat(".", 256)}} + if _, err := rb.pack(make([]byte, 0, 8000), map[string]int{}, 0); err != errStringTooLong { + t.Errorf("Packing TXTRecord with 256 character string: got err = %v, want = %v", err, errStringTooLong) + } +} + +func TestStartAppends(t *testing.T) { + buf := make([]byte, 2, 514) + wantBuf := []byte{4, 44} + copy(buf, wantBuf) + + b := NewBuilder(buf, Header{}) + b.EnableCompression() + + buf, err := b.Finish() + if err != nil { + t.Fatal("Building failed:", err) + } + if got, want := len(buf), headerLen+2; got != want { + t.Errorf("Got len(buf} = %d, want = %d", got, want) + } + if string(buf[:2]) != string(wantBuf) { + t.Errorf("Original data not preserved, got = %v, want = %v", buf[:2], wantBuf) + } +} + +func TestStartError(t *testing.T) { + tests := []struct { + name string + fn func(*Builder) error + }{ + {"Questions", func(b *Builder) error { return b.StartQuestions() }}, + {"Answers", func(b *Builder) error { return b.StartAnswers() }}, + {"Authorities", func(b *Builder) error { return b.StartAuthorities() }}, + {"Additionals", func(b *Builder) error { return b.StartAdditionals() }}, + } + + envs := []struct { + name string + fn func() *Builder + want error + }{ + {"sectionNotStarted", func() *Builder { return &Builder{section: sectionNotStarted} }, ErrNotStarted}, + {"sectionDone", func() *Builder { return &Builder{section: sectionDone} }, ErrSectionDone}, + } + + for _, env := range envs { + for _, test := range tests { + if got := test.fn(env.fn()); got != env.want { + t.Errorf("got Builder{%s}.Start%s = %v, want = %v", env.name, test.name, got, env.want) + } + } + } +} + +func TestBuilderResourceError(t *testing.T) { + tests := []struct { + name string + fn func(*Builder) error + }{ + {"CNAMEResource", func(b *Builder) error { return b.CNAMEResource(ResourceHeader{}, CNAMEResource{}) }}, + {"MXResource", func(b *Builder) error { return b.MXResource(ResourceHeader{}, MXResource{}) }}, + {"NSResource", func(b *Builder) error { return b.NSResource(ResourceHeader{}, NSResource{}) }}, + {"PTRResource", func(b *Builder) error { return b.PTRResource(ResourceHeader{}, PTRResource{}) }}, + {"SOAResource", func(b *Builder) error { return b.SOAResource(ResourceHeader{}, SOAResource{}) }}, + {"TXTResource", func(b *Builder) error { return b.TXTResource(ResourceHeader{}, TXTResource{}) }}, + {"SRVResource", func(b *Builder) error { return b.SRVResource(ResourceHeader{}, SRVResource{}) }}, + {"AResource", func(b *Builder) error { return b.AResource(ResourceHeader{}, AResource{}) }}, + {"AAAAResource", func(b *Builder) error { return b.AAAAResource(ResourceHeader{}, AAAAResource{}) }}, + } + + envs := []struct { + name string + fn func() *Builder + want error + }{ + {"sectionNotStarted", func() *Builder { return &Builder{section: sectionNotStarted} }, ErrNotStarted}, + {"sectionHeader", func() *Builder { return &Builder{section: sectionHeader} }, ErrNotStarted}, + {"sectionQuestions", func() *Builder { return &Builder{section: sectionQuestions} }, ErrNotStarted}, + {"sectionDone", func() *Builder { return &Builder{section: sectionDone} }, ErrSectionDone}, + } + + for _, env := range envs { + for _, test := range tests { + if got := test.fn(env.fn()); got != env.want { + t.Errorf("got Builder{%s}.%s = %v, want = %v", env.name, test.name, got, env.want) + } + } + } +} + +func TestFinishError(t *testing.T) { + var b Builder + want := ErrNotStarted + if _, got := b.Finish(); got != want { + t.Errorf("got Builder{}.Finish() = %v, want = %v", got, want) + } +} + +func TestBuilder(t *testing.T) { + msg := largeTestMsg() + want, err := msg.Pack() + if err != nil { + t.Fatal("Packing without builder:", err) + } + + b := NewBuilder(nil, msg.Header) + b.EnableCompression() + + if err := b.StartQuestions(); err != nil { + t.Fatal("b.StartQuestions():", err) + } + for _, q := range msg.Questions { + if err := b.Question(q); err != nil { + t.Fatalf("b.Question(%#v): %v", q, err) + } + } + + if err := b.StartAnswers(); err != nil { + t.Fatal("b.StartAnswers():", err) + } + for _, a := range msg.Answers { + switch a.Header.Type { + case TypeA: + if err := b.AResource(a.Header, *a.Body.(*AResource)); err != nil { + t.Fatalf("b.AResource(%#v): %v", a, err) + } + case TypeNS: + if err := b.NSResource(a.Header, *a.Body.(*NSResource)); err != nil { + t.Fatalf("b.NSResource(%#v): %v", a, err) + } + case TypeCNAME: + if err := b.CNAMEResource(a.Header, *a.Body.(*CNAMEResource)); err != nil { + t.Fatalf("b.CNAMEResource(%#v): %v", a, err) + } + case TypeSOA: + if err := b.SOAResource(a.Header, *a.Body.(*SOAResource)); err != nil { + t.Fatalf("b.SOAResource(%#v): %v", a, err) + } + case TypePTR: + if err := b.PTRResource(a.Header, *a.Body.(*PTRResource)); err != nil { + t.Fatalf("b.PTRResource(%#v): %v", a, err) + } + case TypeMX: + if err := b.MXResource(a.Header, *a.Body.(*MXResource)); err != nil { + t.Fatalf("b.MXResource(%#v): %v", a, err) + } + case TypeTXT: + if err := b.TXTResource(a.Header, *a.Body.(*TXTResource)); err != nil { + t.Fatalf("b.TXTResource(%#v): %v", a, err) + } + case TypeAAAA: + if err := b.AAAAResource(a.Header, *a.Body.(*AAAAResource)); err != nil { + t.Fatalf("b.AAAAResource(%#v): %v", a, err) + } + case TypeSRV: + if err := b.SRVResource(a.Header, *a.Body.(*SRVResource)); err != nil { + t.Fatalf("b.SRVResource(%#v): %v", a, err) + } + } + } + + if err := b.StartAuthorities(); err != nil { + t.Fatal("b.StartAuthorities():", err) + } + for _, a := range msg.Authorities { + if err := b.NSResource(a.Header, *a.Body.(*NSResource)); err != nil { + t.Fatalf("b.NSResource(%#v): %v", a, err) + } + } + + if err := b.StartAdditionals(); err != nil { + t.Fatal("b.StartAdditionals():", err) + } + for _, a := range msg.Additionals { + if err := b.TXTResource(a.Header, *a.Body.(*TXTResource)); err != nil { + t.Fatalf("b.TXTResource(%#v): %v", a, err) + } + } + + got, err := b.Finish() + if err != nil { + t.Fatal("b.Finish():", err) + } + if !bytes.Equal(got, want) { + t.Fatalf("Got from Builder: %#v\nwant = %#v", got, want) + } +} + +func TestResourcePack(t *testing.T) { + for _, tt := range []struct { + m Message + err error + }{ + { + Message{ + Questions: []Question{ + { + Name: mustNewName("."), + Type: TypeAAAA, + Class: ClassINET, + }, + }, + Answers: []Resource{{ResourceHeader{}, nil}}, + }, + &nestedError{"packing Answer", errNilResouceBody}, + }, + { + Message{ + Questions: []Question{ + { + Name: mustNewName("."), + Type: TypeAAAA, + Class: ClassINET, + }, + }, + Authorities: []Resource{{ResourceHeader{}, (*NSResource)(nil)}}, + }, + &nestedError{"packing Authority", + &nestedError{"ResourceHeader", + &nestedError{"Name", errNonCanonicalName}, + }, + }, + }, + { + Message{ + Questions: []Question{ + { + Name: mustNewName("."), + Type: TypeA, + Class: ClassINET, + }, + }, + Additionals: []Resource{{ResourceHeader{}, nil}}, + }, + &nestedError{"packing Additional", errNilResouceBody}, + }, + } { + _, err := tt.m.Pack() + if !reflect.DeepEqual(err, tt.err) { + t.Errorf("got %v for %v; want %v", err, tt.m, tt.err) + } + } +} + +func benchmarkParsingSetup() ([]byte, error) { + name := mustNewName("foo.bar.example.com.") msg := Message{ Header: Header{Response: true, Authoritative: true}, Questions: []Question{ { - Name: "foo.bar.example.com.", - Type: TypeA, - Class: ClassINET, - }, - { - Name: "bar.example.com.", + Name: name, Type: TypeA, Class: ClassINET, }, }, Answers: []Resource{ - &AResource{ - ResourceHeader: ResourceHeader{ - Name: "foo.bar.example.com.", - Type: TypeA, + { + ResourceHeader{ + Name: name, Class: ClassINET, }, - A: [4]byte{127, 0, 0, 1}, + &AResource{[4]byte{}}, }, - &AResource{ - ResourceHeader: ResourceHeader{ - Name: "bar.example.com.", - Type: TypeA, + { + ResourceHeader{ + Name: name, + Class: ClassINET, + }, + &AAAAResource{[16]byte{}}, + }, + { + ResourceHeader{ + Name: name, Class: ClassINET, }, - A: [4]byte{127, 0, 0, 2}, + &CNAMEResource{name}, + }, + { + ResourceHeader{ + Name: name, + Class: ClassINET, + }, + &NSResource{name}, }, }, } buf, err := msg.Pack() if err != nil { - panic(err) + return nil, fmt.Errorf("msg.Pack(): %v", err) } + return buf, nil +} - wantName := "bar.example.com." - +func benchmarkParsing(tb testing.TB, buf []byte) { var p Parser if _, err := p.Start(buf); err != nil { - panic(err) + tb.Fatal("p.Start(buf):", err) } for { - q, err := p.Question() + _, err := p.Question() if err == ErrSectionDone { break } if err != nil { - panic(err) - } - - if q.Name != wantName { - continue + tb.Fatal("p.Question():", err) } - - fmt.Println("Found question for name", wantName) - if err := p.SkipAllQuestions(); err != nil { - panic(err) - } - break } - var gotIPs []net.IP for { h, err := p.AnswerHeader() if err == ErrSectionDone { @@ -344,232 +820,318 @@ func ExampleHeaderSearch() { panic(err) } - if (h.Type != TypeA && h.Type != TypeAAAA) || h.Class != ClassINET { - continue - } - - if !strings.EqualFold(h.Name, wantName) { - if err := p.SkipAnswer(); err != nil { - panic(err) + switch h.Type { + case TypeA: + if _, err := p.AResource(); err != nil { + tb.Fatal("p.AResource():", err) } - continue - } - a, err := p.Answer() - if err != nil { - panic(err) + case TypeAAAA: + if _, err := p.AAAAResource(); err != nil { + tb.Fatal("p.AAAAResource():", err) + } + case TypeCNAME: + if _, err := p.CNAMEResource(); err != nil { + tb.Fatal("p.CNAMEResource():", err) + } + case TypeNS: + if _, err := p.NSResource(); err != nil { + tb.Fatal("p.NSResource():", err) + } + default: + tb.Fatalf("unknown type: %T", h) } + } +} - switch r := a.(type) { - default: - panic(fmt.Sprintf("unknown type: %T", r)) - case *AResource: - gotIPs = append(gotIPs, r.A[:]) - case *AAAAResource: - gotIPs = append(gotIPs, r.AAAA[:]) +func BenchmarkParsing(b *testing.B) { + buf, err := benchmarkParsingSetup() + if err != nil { + b.Fatal(err) + } + + b.ReportAllocs() + for i := 0; i < b.N; i++ { + benchmarkParsing(b, buf) + } +} + +func TestParsingAllocs(t *testing.T) { + buf, err := benchmarkParsingSetup() + if err != nil { + t.Fatal(err) + } + + if allocs := testing.AllocsPerRun(100, func() { benchmarkParsing(t, buf) }); allocs > 0.5 { + t.Errorf("Allocations during parsing: got = %f, want ~0", allocs) + } +} + +func benchmarkBuildingSetup() (Name, []byte) { + name := mustNewName("foo.bar.example.com.") + buf := make([]byte, 0, packStartingCap) + return name, buf +} + +func benchmarkBuilding(tb testing.TB, name Name, buf []byte) { + bld := NewBuilder(buf, Header{Response: true, Authoritative: true}) + + if err := bld.StartQuestions(); err != nil { + tb.Fatal("bld.StartQuestions():", err) + } + q := Question{ + Name: name, + Type: TypeA, + Class: ClassINET, + } + if err := bld.Question(q); err != nil { + tb.Fatalf("bld.Question(%+v): %v", q, err) + } + + hdr := ResourceHeader{ + Name: name, + Class: ClassINET, + } + if err := bld.StartAnswers(); err != nil { + tb.Fatal("bld.StartQuestions():", err) + } + + ar := AResource{[4]byte{}} + if err := bld.AResource(hdr, ar); err != nil { + tb.Fatalf("bld.AResource(%+v, %+v): %v", hdr, ar, err) + } + + aaar := AAAAResource{[16]byte{}} + if err := bld.AAAAResource(hdr, aaar); err != nil { + tb.Fatalf("bld.AAAAResource(%+v, %+v): %v", hdr, aaar, err) + } + + cnr := CNAMEResource{name} + if err := bld.CNAMEResource(hdr, cnr); err != nil { + tb.Fatalf("bld.CNAMEResource(%+v, %+v): %v", hdr, cnr, err) + } + + nsr := NSResource{name} + if err := bld.NSResource(hdr, nsr); err != nil { + tb.Fatalf("bld.NSResource(%+v, %+v): %v", hdr, nsr, err) + } + + if _, err := bld.Finish(); err != nil { + tb.Fatal("bld.Finish():", err) + } +} + +func BenchmarkBuilding(b *testing.B) { + name, buf := benchmarkBuildingSetup() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + benchmarkBuilding(b, name, buf) + } +} + +func TestBuildingAllocs(t *testing.T) { + name, buf := benchmarkBuildingSetup() + if allocs := testing.AllocsPerRun(100, func() { benchmarkBuilding(t, name, buf) }); allocs > 0.5 { + t.Errorf("Allocations during building: got = %f, want ~0", allocs) + } +} + +func smallTestMsg() Message { + name := mustNewName("example.com.") + return Message{ + Header: Header{Response: true, Authoritative: true}, + Questions: []Question{ + { + Name: name, + Type: TypeA, + Class: ClassINET, + }, + }, + Answers: []Resource{ + { + ResourceHeader{ + Name: name, + Type: TypeA, + Class: ClassINET, + }, + &AResource{[4]byte{127, 0, 0, 1}}, + }, + }, + Authorities: []Resource{ + { + ResourceHeader{ + Name: name, + Type: TypeA, + Class: ClassINET, + }, + &AResource{[4]byte{127, 0, 0, 1}}, + }, + }, + Additionals: []Resource{ + { + ResourceHeader{ + Name: name, + Type: TypeA, + Class: ClassINET, + }, + &AResource{[4]byte{127, 0, 0, 1}}, + }, + }, + } +} + +func BenchmarkPack(b *testing.B) { + msg := largeTestMsg() + + b.ReportAllocs() + + for i := 0; i < b.N; i++ { + if _, err := msg.Pack(); err != nil { + b.Fatal(err) } } +} + +func BenchmarkAppendPack(b *testing.B) { + msg := largeTestMsg() + buf := make([]byte, 0, packStartingCap) - fmt.Printf("Found A/AAAA records for name %s: %v\n", wantName, gotIPs) + b.ReportAllocs() - // Output: - // Found question for name bar.example.com. - // Found A/AAAA records for name bar.example.com.: [127.0.0.2] + for i := 0; i < b.N; i++ { + if _, err := msg.AppendPack(buf[:0]); err != nil { + b.Fatal(err) + } + } } func largeTestMsg() Message { + name := mustNewName("foo.bar.example.com.") return Message{ Header: Header{Response: true, Authoritative: true}, Questions: []Question{ { - Name: "foo.bar.example.com.", + Name: name, Type: TypeA, Class: ClassINET, }, }, Answers: []Resource{ - &AResource{ - ResourceHeader: ResourceHeader{ - Name: "foo.bar.example.com.", + { + ResourceHeader{ + Name: name, Type: TypeA, Class: ClassINET, }, - A: [4]byte{127, 0, 0, 1}, + &AResource{[4]byte{127, 0, 0, 1}}, }, - &AResource{ - ResourceHeader: ResourceHeader{ - Name: "foo.bar.example.com.", + { + ResourceHeader{ + Name: name, Type: TypeA, Class: ClassINET, }, - A: [4]byte{127, 0, 0, 2}, + &AResource{[4]byte{127, 0, 0, 2}}, + }, + { + ResourceHeader{ + Name: name, + Type: TypeAAAA, + Class: ClassINET, + }, + &AAAAResource{[16]byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}}, + }, + { + ResourceHeader{ + Name: name, + Type: TypeCNAME, + Class: ClassINET, + }, + &CNAMEResource{mustNewName("alias.example.com.")}, + }, + { + ResourceHeader{ + Name: name, + Type: TypeSOA, + Class: ClassINET, + }, + &SOAResource{ + NS: mustNewName("ns1.example.com."), + MBox: mustNewName("mb.example.com."), + Serial: 1, + Refresh: 2, + Retry: 3, + Expire: 4, + MinTTL: 5, + }, + }, + { + ResourceHeader{ + Name: name, + Type: TypePTR, + Class: ClassINET, + }, + &PTRResource{mustNewName("ptr.example.com.")}, + }, + { + ResourceHeader{ + Name: name, + Type: TypeMX, + Class: ClassINET, + }, + &MXResource{ + 7, + mustNewName("mx.example.com."), + }, + }, + { + ResourceHeader{ + Name: name, + Type: TypeSRV, + Class: ClassINET, + }, + &SRVResource{ + 8, + 9, + 11, + mustNewName("srv.example.com."), + }, }, }, Authorities: []Resource{ - &NSResource{ - ResourceHeader: ResourceHeader{ - Name: "foo.bar.example.com.", + { + ResourceHeader{ + Name: name, Type: TypeNS, Class: ClassINET, }, - NS: "ns1.example.com.", + &NSResource{mustNewName("ns1.example.com.")}, }, - &NSResource{ - ResourceHeader: ResourceHeader{ - Name: "foo.bar.example.com.", + { + ResourceHeader{ + Name: name, Type: TypeNS, Class: ClassINET, }, - NS: "ns2.example.com.", + &NSResource{mustNewName("ns2.example.com.")}, }, }, Additionals: []Resource{ - &TXTResource{ - ResourceHeader: ResourceHeader{ - Name: "foo.bar.example.com.", + { + ResourceHeader{ + Name: name, Type: TypeTXT, Class: ClassINET, }, - Txt: "So Long, and Thanks for All the Fish", + &TXTResource{[]string{"So Long, and Thanks for All the Fish"}}, }, - &TXTResource{ - ResourceHeader: ResourceHeader{ - Name: "foo.bar.example.com.", + { + ResourceHeader{ + Name: name, Type: TypeTXT, Class: ClassINET, }, - Txt: "Hamster Huey and the Gooey Kablooie", + &TXTResource{[]string{"Hamster Huey and the Gooey Kablooie"}}, }, }, } } - -const loremIpsum = ` -Lorem ipsum dolor sit amet, nec enim antiopam id, an ullum choro -nonumes qui, pro eu debet honestatis mediocritatem. No alia enim eos, -magna signiferumque ex vis. Mei no aperiri dissentias, cu vel quas -regione. Malorum quaeque vim ut, eum cu semper aliquid invidunt, ei -nam ipsum assentior. - -Nostrum appellantur usu no, vis ex probatus adipiscing. Cu usu illum -facilis eleifend. Iusto conceptam complectitur vim id. Tale omnesque -no usu, ei oblique sadipscing vim. At nullam voluptua usu, mei laudem -reformidans et. Qui ei eros porro reformidans, ius suas veritus -torquatos ex. Mea te facer alterum consequat. - -Soleat torquatos democritum sed et, no mea congue appareat, facer -aliquam nec in. Has te ipsum tritani. At justo dicta option nec, movet -phaedrum ad nam. Ea detracto verterem liberavisse has, delectus -suscipiantur in mei. Ex nam meliore complectitur. Ut nam omnis -honestatis quaerendum, ea mea nihil affert detracto, ad vix rebum -mollis. - -Ut epicurei praesent neglegentur pri, prima fuisset intellegebat ad -vim. An habemus comprehensam usu, at enim dignissim pro. Eam reque -vivendum adipisci ea. Vel ne odio choro minimum. Sea admodum -dissentiet ex. Mundi tamquam evertitur ius cu. Homero postea iisque ut -pro, vel ne saepe senserit consetetur. - -Nulla utamur facilisis ius ea, in viderer diceret pertinax eum. Mei no -enim quodsi facilisi, ex sed aeterno appareat mediocritatem, eum -sententiae deterruisset ut. At suas timeam euismod cum, offendit -appareat interpretaris ne vix. Vel ea civibus albucius, ex vim quidam -accusata intellegebat, noluisse instructior sea id. Nec te nonumes -habemus appellantur, quis dignissim vituperata eu nam. - -At vix apeirian patrioque vituperatoribus, an usu agam assum. Debet -iisque an mea. Per eu dicant ponderum accommodare. Pri alienum -placerat senserit an, ne eum ferri abhorreant vituperatoribus. Ut mea -eligendi disputationi. Ius no tation everti impedit, ei magna quidam -mediocritatem pri. - -Legendos perpetua iracundia ne usu, no ius ullum epicurei intellegam, -ad modus epicuri lucilius eam. In unum quaerendum usu. Ne diam paulo -has, ea veri virtute sed. Alia honestatis conclusionemque mea eu, ut -iudico albucius his. - -Usu essent probatus eu, sed omnis dolor delicatissimi ex. No qui augue -dissentias dissentiet. Laudem recteque no usu, vel an velit noluisse, -an sed utinam eirmod appetere. Ne mea fuisset inimicus ocurreret. At -vis dicant abhorreant, utinam forensibus nec ne, mei te docendi -consequat. Brute inermis persecuti cum id. Ut ipsum munere propriae -usu, dicit graeco disputando id has. - -Eros dolore quaerendum nam ei. Timeam ornatus inciderint pro id. Nec -torquatos sadipscing ei, ancillae molestie per in. Malis principes duo -ea, usu liber postulant ei. - -Graece timeam voluptatibus eu eam. Alia probatus quo no, ea scripta -feugiat duo. Congue option meliore ex qui, noster invenire appellantur -ea vel. Eu exerci legendos vel. Consetetur repudiandae vim ut. Vix an -probo minimum, et nam illud falli tempor. - -Cum dico signiferumque eu. Sed ut regione maiorum, id veritus insolens -tacimates vix. Eu mel sint tamquam lucilius, duo no oporteat -tacimates. Atqui augue concludaturque vix ei, id mel utroque menandri. - -Ad oratio blandit aliquando pro. Vis et dolorum rationibus -philosophia, ad cum nulla molestie. Hinc fuisset adversarium eum et, -ne qui nisl verear saperet, vel te quaestio forensibus. Per odio -option delenit an. Alii placerat has no, in pri nihil platonem -cotidieque. Est ut elit copiosae scaevola, debet tollit maluisset sea -an. - -Te sea hinc debet pericula, liber ridens fabulas cu sed, quem mutat -accusam mea et. Elitr labitur albucius et pri, an labore feugait mel. -Velit zril melius usu ea. Ad stet putent interpretaris qui. Mel no -error volumus scripserit. In pro paulo iudico, quo ei dolorem -verterem, affert fabellas dissentiet ea vix. - -Vis quot deserunt te. Error aliquid detraxit eu usu, vis alia eruditi -salutatus cu. Est nostrud bonorum an, ei usu alii salutatus. Vel at -nisl primis, eum ex aperiri noluisse reformidans. Ad veri velit -utroque vis, ex equidem detraxit temporibus has. - -Inermis appareat usu ne. Eros placerat periculis mea ad, in dictas -pericula pro. Errem postulant at usu, ea nec amet ornatus mentitum. Ad -mazim graeco eum, vel ex percipit volutpat iudicabit, sit ne delicata -interesset. Mel sapientem prodesset abhorreant et, oblique suscipit -eam id. - -An maluisset disputando mea, vidit mnesarchum pri et. Malis insolens -inciderint no sea. Ea persius maluisset vix, ne vim appellantur -instructior, consul quidam definiebas pri id. Cum integre feugiat -pericula in, ex sed persius similique, mel ne natum dicit percipitur. - -Primis discere ne pri, errem putent definitionem at vis. Ei mel dolore -neglegentur, mei tincidunt percipitur ei. Pro ad simul integre -rationibus. Eu vel alii honestatis definitiones, mea no nonumy -reprehendunt. - -Dicta appareat legendos est cu. Eu vel congue dicunt omittam, no vix -adhuc minimum constituam, quot noluisse id mel. Eu quot sale mutat -duo, ex nisl munere invenire duo. Ne nec ullum utamur. Pro alterum -debitis nostrum no, ut vel aliquid vivendo. - -Aliquip fierent praesent quo ne, id sit audiam recusabo delicatissimi. -Usu postulant incorrupte cu. At pro dicit tibique intellegam, cibo -dolore impedit id eam, et aeque feugait assentior has. Quando sensibus -nec ex. Possit sensibus pri ad, unum mutat periculis cu vix. - -Mundi tibique vix te, duo simul partiendo qualisque id, est at vidit -sonet tempor. No per solet aeterno deseruisse. Petentium salutandi -definiebas pri cu. Munere vivendum est in. Ei justo congue eligendi -vis, modus offendit omittantur te mel. - -Integre voluptaria in qui, sit habemus tractatos constituam no. Utinam -melius conceptam est ne, quo in minimum apeirian delicata, ut ius -porro recusabo. Dicant expetenda vix no, ludus scripserit sed ex, eu -his modo nostro. Ut etiam sonet his, quodsi inciderint philosophia te -per. Nullam lobortis eu cum, vix an sonet efficiendi repudiandae. Vis -ad idque fabellas intellegebat. - -Eum commodo senserit conclusionemque ex. Sed forensibus sadipscing ut, -mei in facer delicata periculis, sea ne hinc putent cetero. Nec ne -alia corpora invenire, alia prima soleat te cum. Eleifend posidonium -nam at. - -Dolorum indoctum cu quo, ex dolor legendos recteque eam, cu pri zril -discere. Nec civibus officiis dissentiunt ex, est te liber ludus -elaboraret. Cum ea fabellas invenire. Ex vim nostrud eripuit -comprehensam, nam te inermis delectus, saepe inermis senserit. -` diff --git a/vendor/golang.org/x/net/html/atom/gen.go b/vendor/golang.org/x/net/html/atom/gen.go index 6bfa866..56cd842 100644 --- a/vendor/golang.org/x/net/html/atom/gen.go +++ b/vendor/golang.org/x/net/html/atom/gen.go @@ -4,17 +4,17 @@ // +build ignore -package main +//go:generate go run gen.go +//go:generate go run gen.go -test -// This program generates table.go and table_test.go. -// Invoke as -// -// go run gen.go |gofmt >table.go -// go run gen.go -test |gofmt >table_test.go +package main import ( + "bytes" "flag" "fmt" + "go/format" + "io/ioutil" "math/rand" "os" "sort" @@ -42,6 +42,18 @@ func identifier(s string) string { var test = flag.Bool("test", false, "generate table_test.go") +func genFile(name string, buf *bytes.Buffer) { + b, err := format.Source(buf.Bytes()) + if err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } + if err := ioutil.WriteFile(name, b, 0644); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } +} + func main() { flag.Parse() @@ -52,32 +64,31 @@ func main() { all = append(all, extra...) sort.Strings(all) - if *test { - fmt.Printf("// generated by go run gen.go -test; DO NOT EDIT\n\n") - fmt.Printf("package atom\n\n") - fmt.Printf("var testAtomList = []string{\n") - for _, s := range all { - fmt.Printf("\t%q,\n", s) - } - fmt.Printf("}\n") - return - } - // uniq - lists have dups - // compute max len too - maxLen := 0 w := 0 for _, s := range all { if w == 0 || all[w-1] != s { - if maxLen < len(s) { - maxLen = len(s) - } all[w] = s w++ } } all = all[:w] + if *test { + var buf bytes.Buffer + fmt.Fprintln(&buf, "// Code generated by go generate gen.go; DO NOT EDIT.\n") + fmt.Fprintln(&buf, "//go:generate go run gen.go -test\n") + fmt.Fprintln(&buf, "package atom\n") + fmt.Fprintln(&buf, "var testAtomList = []string{") + for _, s := range all { + fmt.Fprintf(&buf, "\t%q,\n", s) + } + fmt.Fprintln(&buf, "}") + + genFile("table_test.go", &buf) + return + } + // Find hash that minimizes table size. var best *table for i := 0; i < 1000000; i++ { @@ -163,36 +174,46 @@ func main() { atom[s] = uint32(off<<8 | len(s)) } + var buf bytes.Buffer // Generate the Go code. - fmt.Printf("// generated by go run gen.go; DO NOT EDIT\n\n") - fmt.Printf("package atom\n\nconst (\n") + fmt.Fprintln(&buf, "// Code generated by go generate gen.go; DO NOT EDIT.\n") + fmt.Fprintln(&buf, "//go:generate go run gen.go\n") + fmt.Fprintln(&buf, "package atom\n\nconst (") + + // compute max len + maxLen := 0 for _, s := range all { - fmt.Printf("\t%s Atom = %#x\n", identifier(s), atom[s]) + if maxLen < len(s) { + maxLen = len(s) + } + fmt.Fprintf(&buf, "\t%s Atom = %#x\n", identifier(s), atom[s]) } - fmt.Printf(")\n\n") + fmt.Fprintln(&buf, ")\n") - fmt.Printf("const hash0 = %#x\n\n", best.h0) - fmt.Printf("const maxAtomLen = %d\n\n", maxLen) + fmt.Fprintf(&buf, "const hash0 = %#x\n\n", best.h0) + fmt.Fprintf(&buf, "const maxAtomLen = %d\n\n", maxLen) - fmt.Printf("var table = [1<<%d]Atom{\n", best.k) + fmt.Fprintf(&buf, "var table = [1<<%d]Atom{\n", best.k) for i, s := range best.tab { if s == "" { continue } - fmt.Printf("\t%#x: %#x, // %s\n", i, atom[s], s) + fmt.Fprintf(&buf, "\t%#x: %#x, // %s\n", i, atom[s], s) } - fmt.Printf("}\n") + fmt.Fprintf(&buf, "}\n") datasize := (1 << best.k) * 4 - fmt.Printf("const atomText =\n") + fmt.Fprintln(&buf, "const atomText =") textsize := len(text) for len(text) > 60 { - fmt.Printf("\t%q +\n", text[:60]) + fmt.Fprintf(&buf, "\t%q +\n", text[:60]) text = text[60:] } - fmt.Printf("\t%q\n\n", text) + fmt.Fprintf(&buf, "\t%q\n\n", text) + + genFile("table.go", &buf) - fmt.Fprintf(os.Stderr, "%d atoms; %d string bytes + %d tables = %d total data\n", len(all), textsize, datasize, textsize+datasize) + fmt.Fprintf(os.Stdout, "%d atoms; %d string bytes + %d tables = %d total data\n", len(all), textsize, datasize, textsize+datasize) } type byLen []string @@ -285,8 +306,10 @@ func (t *table) push(i uint32, depth int) bool { // The lists of element names and attribute keys were taken from // https://html.spec.whatwg.org/multipage/indices.html#index -// as of the "HTML Living Standard - Last Updated 21 February 2015" version. +// as of the "HTML Living Standard - Last Updated 18 September 2017" version. +// "command", "keygen" and "menuitem" have been removed from the spec, +// but are kept here for backwards compatibility. var elements = []string{ "a", "abbr", @@ -349,6 +372,7 @@ var elements = []string{ "legend", "li", "link", + "main", "map", "mark", "menu", @@ -364,6 +388,7 @@ var elements = []string{ "output", "p", "param", + "picture", "pre", "progress", "q", @@ -375,6 +400,7 @@ var elements = []string{ "script", "section", "select", + "slot", "small", "source", "span", @@ -403,14 +429,21 @@ var elements = []string{ } // https://html.spec.whatwg.org/multipage/indices.html#attributes-3 - +// +// "challenge", "command", "contextmenu", "dropzone", "icon", "keytype", "mediagroup", +// "radiogroup", "spellcheck", "scoped", "seamless", "sortable" and "sorted" have been removed from the spec, +// but are kept here for backwards compatibility. var attributes = []string{ "abbr", "accept", "accept-charset", "accesskey", "action", + "allowfullscreen", + "allowpaymentrequest", + "allowusermedia", "alt", + "as", "async", "autocomplete", "autofocus", @@ -420,6 +453,7 @@ var attributes = []string{ "checked", "cite", "class", + "color", "cols", "colspan", "command", @@ -457,6 +491,8 @@ var attributes = []string{ "icon", "id", "inputmode", + "integrity", + "is", "ismap", "itemid", "itemprop", @@ -481,16 +517,20 @@ var attributes = []string{ "multiple", "muted", "name", + "nomodule", + "nonce", "novalidate", "open", "optimum", "pattern", "ping", "placeholder", + "playsinline", "poster", "preload", "radiogroup", "readonly", + "referrerpolicy", "rel", "required", "reversed", @@ -507,10 +547,13 @@ var attributes = []string{ "sizes", "sortable", "sorted", + "slot", "span", + "spellcheck", "src", "srcdoc", "srclang", + "srcset", "start", "step", "style", @@ -520,16 +563,22 @@ var attributes = []string{ "translate", "type", "typemustmatch", + "updateviacache", "usemap", "value", "width", + "workertype", "wrap", } +// "onautocomplete", "onautocompleteerror", "onmousewheel", +// "onshow" and "onsort" have been removed from the spec, +// but are kept here for backwards compatibility. var eventHandlers = []string{ "onabort", "onautocomplete", "onautocompleteerror", + "onauxclick", "onafterprint", "onbeforeprint", "onbeforeunload", @@ -541,11 +590,14 @@ var eventHandlers = []string{ "onclick", "onclose", "oncontextmenu", + "oncopy", "oncuechange", + "oncut", "ondblclick", "ondrag", "ondragend", "ondragenter", + "ondragexit", "ondragleave", "ondragover", "ondragstart", @@ -565,18 +617,24 @@ var eventHandlers = []string{ "onload", "onloadeddata", "onloadedmetadata", + "onloadend", "onloadstart", "onmessage", + "onmessageerror", "onmousedown", + "onmouseenter", + "onmouseleave", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onmousewheel", + "onwheel", "onoffline", "ononline", "onpagehide", "onpageshow", + "onpaste", "onpause", "onplay", "onplaying", @@ -585,7 +643,9 @@ var eventHandlers = []string{ "onratechange", "onreset", "onresize", + "onrejectionhandled", "onscroll", + "onsecuritypolicyviolation", "onseeked", "onseeking", "onselect", @@ -597,6 +657,7 @@ var eventHandlers = []string{ "onsuspend", "ontimeupdate", "ontoggle", + "onunhandledrejection", "onunload", "onvolumechange", "onwaiting", @@ -604,6 +665,7 @@ var eventHandlers = []string{ // extra are ad-hoc values not covered by any of the lists above. var extra = []string{ + "acronym", "align", "annotation", "annotation-xml", diff --git a/vendor/golang.org/x/net/html/atom/table.go b/vendor/golang.org/x/net/html/atom/table.go index 2605ba3..a91bd64 100644 --- a/vendor/golang.org/x/net/html/atom/table.go +++ b/vendor/golang.org/x/net/html/atom/table.go @@ -1,713 +1,779 @@ -// generated by go run gen.go; DO NOT EDIT +// Code generated by go generate gen.go; DO NOT EDIT. + +//go:generate go run gen.go package atom const ( - A Atom = 0x1 - Abbr Atom = 0x4 - Accept Atom = 0x2106 - AcceptCharset Atom = 0x210e - Accesskey Atom = 0x3309 - Action Atom = 0x1f606 - Address Atom = 0x4f307 - Align Atom = 0x1105 - Alt Atom = 0x4503 - Annotation Atom = 0x1670a - AnnotationXml Atom = 0x1670e - Applet Atom = 0x2b306 - Area Atom = 0x2fa04 - Article Atom = 0x38807 - Aside Atom = 0x8305 - Async Atom = 0x7b05 - Audio Atom = 0xa605 - Autocomplete Atom = 0x1fc0c - Autofocus Atom = 0xb309 - Autoplay Atom = 0xce08 - B Atom = 0x101 - Base Atom = 0xd604 - Basefont Atom = 0xd608 - Bdi Atom = 0x1a03 - Bdo Atom = 0xe703 - Bgsound Atom = 0x11807 - Big Atom = 0x12403 - Blink Atom = 0x12705 - Blockquote Atom = 0x12c0a - Body Atom = 0x2f04 - Br Atom = 0x202 - Button Atom = 0x13606 - Canvas Atom = 0x7f06 - Caption Atom = 0x1bb07 - Center Atom = 0x5b506 - Challenge Atom = 0x21f09 - Charset Atom = 0x2807 - Checked Atom = 0x32807 - Cite Atom = 0x3c804 - Class Atom = 0x4de05 - Code Atom = 0x14904 - Col Atom = 0x15003 - Colgroup Atom = 0x15008 - Color Atom = 0x15d05 - Cols Atom = 0x16204 - Colspan Atom = 0x16207 - Command Atom = 0x17507 - Content Atom = 0x42307 - Contenteditable Atom = 0x4230f - Contextmenu Atom = 0x3310b - Controls Atom = 0x18808 - Coords Atom = 0x19406 - Crossorigin Atom = 0x19f0b - Data Atom = 0x44a04 - Datalist Atom = 0x44a08 - Datetime Atom = 0x23c08 - Dd Atom = 0x26702 - Default Atom = 0x8607 - Defer Atom = 0x14b05 - Del Atom = 0x3ef03 - Desc Atom = 0x4db04 - Details Atom = 0x4807 - Dfn Atom = 0x6103 - Dialog Atom = 0x1b06 - Dir Atom = 0x6903 - Dirname Atom = 0x6907 - Disabled Atom = 0x10c08 - Div Atom = 0x11303 - Dl Atom = 0x11e02 - Download Atom = 0x40008 - Draggable Atom = 0x17b09 - Dropzone Atom = 0x39108 - Dt Atom = 0x50902 - Em Atom = 0x6502 - Embed Atom = 0x6505 - Enctype Atom = 0x21107 - Face Atom = 0x5b304 - Fieldset Atom = 0x1b008 - Figcaption Atom = 0x1b80a - Figure Atom = 0x1cc06 - Font Atom = 0xda04 - Footer Atom = 0x8d06 - For Atom = 0x1d803 - ForeignObject Atom = 0x1d80d - Foreignobject Atom = 0x1e50d - Form Atom = 0x1f204 - Formaction Atom = 0x1f20a - Formenctype Atom = 0x20d0b - Formmethod Atom = 0x2280a - Formnovalidate Atom = 0x2320e - Formtarget Atom = 0x2470a - Frame Atom = 0x9a05 - Frameset Atom = 0x9a08 - H1 Atom = 0x26e02 - H2 Atom = 0x29402 - H3 Atom = 0x2a702 - H4 Atom = 0x2e902 - H5 Atom = 0x2f302 - H6 Atom = 0x50b02 - Head Atom = 0x2d504 - Header Atom = 0x2d506 - Headers Atom = 0x2d507 - Height Atom = 0x25106 - Hgroup Atom = 0x25906 - Hidden Atom = 0x26506 - High Atom = 0x26b04 - Hr Atom = 0x27002 - Href Atom = 0x27004 - Hreflang Atom = 0x27008 - Html Atom = 0x25504 - HttpEquiv Atom = 0x2780a - I Atom = 0x601 - Icon Atom = 0x42204 - Id Atom = 0x8502 - Iframe Atom = 0x29606 - Image Atom = 0x29c05 - Img Atom = 0x2a103 - Input Atom = 0x3e805 - Inputmode Atom = 0x3e809 - Ins Atom = 0x1a803 - Isindex Atom = 0x2a907 - Ismap Atom = 0x2b005 - Itemid Atom = 0x33c06 - Itemprop Atom = 0x3c908 - Itemref Atom = 0x5ad07 - Itemscope Atom = 0x2b909 - Itemtype Atom = 0x2c308 - Kbd Atom = 0x1903 - Keygen Atom = 0x3906 - Keytype Atom = 0x53707 - Kind Atom = 0x10904 - Label Atom = 0xf005 - Lang Atom = 0x27404 - Legend Atom = 0x18206 - Li Atom = 0x1202 - Link Atom = 0x12804 - List Atom = 0x44e04 - Listing Atom = 0x44e07 - Loop Atom = 0xf404 - Low Atom = 0x11f03 - Malignmark Atom = 0x100a - Manifest Atom = 0x5f108 - Map Atom = 0x2b203 - Mark Atom = 0x1604 - Marquee Atom = 0x2cb07 - Math Atom = 0x2d204 - Max Atom = 0x2e103 - Maxlength Atom = 0x2e109 - Media Atom = 0x6e05 - Mediagroup Atom = 0x6e0a - Menu Atom = 0x33804 - Menuitem Atom = 0x33808 - Meta Atom = 0x45d04 - Meter Atom = 0x24205 - Method Atom = 0x22c06 - Mglyph Atom = 0x2a206 - Mi Atom = 0x2eb02 - Min Atom = 0x2eb03 - Minlength Atom = 0x2eb09 - Mn Atom = 0x23502 - Mo Atom = 0x3ed02 - Ms Atom = 0x2bc02 - Mtext Atom = 0x2f505 - Multiple Atom = 0x30308 - Muted Atom = 0x30b05 - Name Atom = 0x6c04 - Nav Atom = 0x3e03 - Nobr Atom = 0x5704 - Noembed Atom = 0x6307 - Noframes Atom = 0x9808 - Noscript Atom = 0x3d208 - Novalidate Atom = 0x2360a - Object Atom = 0x1ec06 - Ol Atom = 0xc902 - Onabort Atom = 0x13a07 - Onafterprint Atom = 0x1c00c - Onautocomplete Atom = 0x1fa0e - Onautocompleteerror Atom = 0x1fa13 - Onbeforeprint Atom = 0x6040d - Onbeforeunload Atom = 0x4e70e - Onblur Atom = 0xaa06 - Oncancel Atom = 0xe908 - Oncanplay Atom = 0x28509 - Oncanplaythrough Atom = 0x28510 - Onchange Atom = 0x3a708 - Onclick Atom = 0x31007 - Onclose Atom = 0x31707 - Oncontextmenu Atom = 0x32f0d - Oncuechange Atom = 0x3420b - Ondblclick Atom = 0x34d0a - Ondrag Atom = 0x35706 - Ondragend Atom = 0x35709 - Ondragenter Atom = 0x3600b - Ondragleave Atom = 0x36b0b - Ondragover Atom = 0x3760a - Ondragstart Atom = 0x3800b - Ondrop Atom = 0x38f06 - Ondurationchange Atom = 0x39f10 - Onemptied Atom = 0x39609 - Onended Atom = 0x3af07 - Onerror Atom = 0x3b607 - Onfocus Atom = 0x3bd07 - Onhashchange Atom = 0x3da0c - Oninput Atom = 0x3e607 - Oninvalid Atom = 0x3f209 - Onkeydown Atom = 0x3fb09 - Onkeypress Atom = 0x4080a - Onkeyup Atom = 0x41807 - Onlanguagechange Atom = 0x43210 - Onload Atom = 0x44206 - Onloadeddata Atom = 0x4420c - Onloadedmetadata Atom = 0x45510 - Onloadstart Atom = 0x46b0b - Onmessage Atom = 0x47609 - Onmousedown Atom = 0x47f0b - Onmousemove Atom = 0x48a0b - Onmouseout Atom = 0x4950a - Onmouseover Atom = 0x4a20b - Onmouseup Atom = 0x4ad09 - Onmousewheel Atom = 0x4b60c - Onoffline Atom = 0x4c209 - Ononline Atom = 0x4cb08 - Onpagehide Atom = 0x4d30a - Onpageshow Atom = 0x4fe0a - Onpause Atom = 0x50d07 - Onplay Atom = 0x51706 - Onplaying Atom = 0x51709 - Onpopstate Atom = 0x5200a - Onprogress Atom = 0x52a0a - Onratechange Atom = 0x53e0c - Onreset Atom = 0x54a07 - Onresize Atom = 0x55108 - Onscroll Atom = 0x55f08 - Onseeked Atom = 0x56708 - Onseeking Atom = 0x56f09 - Onselect Atom = 0x57808 - Onshow Atom = 0x58206 - Onsort Atom = 0x58b06 - Onstalled Atom = 0x59509 - Onstorage Atom = 0x59e09 - Onsubmit Atom = 0x5a708 - Onsuspend Atom = 0x5bb09 - Ontimeupdate Atom = 0xdb0c - Ontoggle Atom = 0x5c408 - Onunload Atom = 0x5cc08 - Onvolumechange Atom = 0x5d40e - Onwaiting Atom = 0x5e209 - Open Atom = 0x3cf04 - Optgroup Atom = 0xf608 - Optimum Atom = 0x5eb07 - Option Atom = 0x60006 - Output Atom = 0x49c06 - P Atom = 0xc01 - Param Atom = 0xc05 - Pattern Atom = 0x5107 - Ping Atom = 0x7704 - Placeholder Atom = 0xc30b - Plaintext Atom = 0xfd09 - Poster Atom = 0x15706 - Pre Atom = 0x25e03 - Preload Atom = 0x25e07 - Progress Atom = 0x52c08 - Prompt Atom = 0x5fa06 - Public Atom = 0x41e06 - Q Atom = 0x13101 - Radiogroup Atom = 0x30a - Readonly Atom = 0x2fb08 - Rel Atom = 0x25f03 - Required Atom = 0x1d008 - Reversed Atom = 0x5a08 - Rows Atom = 0x9204 - Rowspan Atom = 0x9207 - Rp Atom = 0x1c602 - Rt Atom = 0x13f02 - Ruby Atom = 0xaf04 - S Atom = 0x2c01 - Samp Atom = 0x4e04 - Sandbox Atom = 0xbb07 - Scope Atom = 0x2bd05 - Scoped Atom = 0x2bd06 - Script Atom = 0x3d406 - Seamless Atom = 0x31c08 - Section Atom = 0x4e207 - Select Atom = 0x57a06 - Selected Atom = 0x57a08 - Shape Atom = 0x4f905 - Size Atom = 0x55504 - Sizes Atom = 0x55505 - Small Atom = 0x18f05 - Sortable Atom = 0x58d08 - Sorted Atom = 0x19906 - Source Atom = 0x1aa06 - Spacer Atom = 0x2db06 - Span Atom = 0x9504 - Spellcheck Atom = 0x3230a - Src Atom = 0x3c303 - Srcdoc Atom = 0x3c306 - Srclang Atom = 0x41107 - Start Atom = 0x38605 - Step Atom = 0x5f704 - Strike Atom = 0x53306 - Strong Atom = 0x55906 - Style Atom = 0x61105 - Sub Atom = 0x5a903 - Summary Atom = 0x61607 - Sup Atom = 0x61d03 - Svg Atom = 0x62003 - System Atom = 0x62306 - Tabindex Atom = 0x46308 - Table Atom = 0x42d05 - Target Atom = 0x24b06 - Tbody Atom = 0x2e05 - Td Atom = 0x4702 - Template Atom = 0x62608 - Textarea Atom = 0x2f608 - Tfoot Atom = 0x8c05 - Th Atom = 0x22e02 - Thead Atom = 0x2d405 - Time Atom = 0xdd04 - Title Atom = 0xa105 - Tr Atom = 0x10502 - Track Atom = 0x10505 - Translate Atom = 0x14009 - Tt Atom = 0x5302 - Type Atom = 0x21404 - Typemustmatch Atom = 0x2140d - U Atom = 0xb01 - Ul Atom = 0x8a02 - Usemap Atom = 0x51106 - Value Atom = 0x4005 - Var Atom = 0x11503 - Video Atom = 0x28105 - Wbr Atom = 0x12103 - Width Atom = 0x50705 - Wrap Atom = 0x58704 - Xmp Atom = 0xc103 + A Atom = 0x1 + Abbr Atom = 0x4 + Accept Atom = 0x1a06 + AcceptCharset Atom = 0x1a0e + Accesskey Atom = 0x2c09 + Acronym Atom = 0x6907 + Action Atom = 0x26a06 + Address Atom = 0x6f307 + Align Atom = 0x7005 + Allowfullscreen Atom = 0x2000f + Allowpaymentrequest Atom = 0x8013 + Allowusermedia Atom = 0x9c0e + Alt Atom = 0xc703 + Annotation Atom = 0x1c90a + AnnotationXml Atom = 0x1c90e + Applet Atom = 0x31106 + Area Atom = 0x34e04 + Article Atom = 0x3f407 + As Atom = 0xd002 + Aside Atom = 0xd805 + Async Atom = 0xd005 + Audio Atom = 0xe605 + Autocomplete Atom = 0x2700c + Autofocus Atom = 0x10209 + Autoplay Atom = 0x11d08 + B Atom = 0x101 + Base Atom = 0x12c04 + Basefont Atom = 0x12c08 + Bdi Atom = 0x7903 + Bdo Atom = 0x14b03 + Bgsound Atom = 0x15e07 + Big Atom = 0x17003 + Blink Atom = 0x17305 + Blockquote Atom = 0x1870a + Body Atom = 0x2804 + Br Atom = 0x202 + Button Atom = 0x19106 + Canvas Atom = 0xd406 + Caption Atom = 0x22907 + Center Atom = 0x21806 + Challenge Atom = 0x29309 + Charset Atom = 0x2107 + Checked Atom = 0x47107 + Cite Atom = 0x55c04 + Class Atom = 0x5bd05 + Code Atom = 0x1a004 + Col Atom = 0x1a703 + Colgroup Atom = 0x1a708 + Color Atom = 0x1bf05 + Cols Atom = 0x1c404 + Colspan Atom = 0x1c407 + Command Atom = 0x1d707 + Content Atom = 0x58307 + Contenteditable Atom = 0x5830f + Contextmenu Atom = 0x3780b + Controls Atom = 0x1de08 + Coords Atom = 0x1ea06 + Crossorigin Atom = 0x1f30b + Data Atom = 0x49d04 + Datalist Atom = 0x49d08 + Datetime Atom = 0x2b008 + Dd Atom = 0x2cf02 + Default Atom = 0xdb07 + Defer Atom = 0x1a205 + Del Atom = 0x44a03 + Desc Atom = 0x55904 + Details Atom = 0x4607 + Dfn Atom = 0x5f03 + Dialog Atom = 0x7a06 + Dir Atom = 0xba03 + Dirname Atom = 0xba07 + Disabled Atom = 0x16408 + Div Atom = 0x16b03 + Dl Atom = 0x5e602 + Download Atom = 0x45b08 + Draggable Atom = 0x17a09 + Dropzone Atom = 0x3fd08 + Dt Atom = 0x64b02 + Em Atom = 0x4202 + Embed Atom = 0x4205 + Enctype Atom = 0x28507 + Face Atom = 0x21604 + Fieldset Atom = 0x21e08 + Figcaption Atom = 0x2260a + Figure Atom = 0x24006 + Font Atom = 0x13004 + Footer Atom = 0xca06 + For Atom = 0x24c03 + ForeignObject Atom = 0x24c0d + Foreignobject Atom = 0x2590d + Form Atom = 0x26604 + Formaction Atom = 0x2660a + Formenctype Atom = 0x2810b + Formmethod Atom = 0x29c0a + Formnovalidate Atom = 0x2a60e + Formtarget Atom = 0x2b80a + Frame Atom = 0x5705 + Frameset Atom = 0x5708 + H1 Atom = 0x15c02 + H2 Atom = 0x2d602 + H3 Atom = 0x30502 + H4 Atom = 0x33d02 + H5 Atom = 0x34702 + H6 Atom = 0x64d02 + Head Atom = 0x32904 + Header Atom = 0x32906 + Headers Atom = 0x32907 + Height Atom = 0x14306 + Hgroup Atom = 0x2c206 + Hidden Atom = 0x2cd06 + High Atom = 0x2d304 + Hr Atom = 0x15702 + Href Atom = 0x2d804 + Hreflang Atom = 0x2d808 + Html Atom = 0x14704 + HttpEquiv Atom = 0x2e00a + I Atom = 0x601 + Icon Atom = 0x58204 + Id Atom = 0xda02 + Iframe Atom = 0x2f406 + Image Atom = 0x2fa05 + Img Atom = 0x2ff03 + Input Atom = 0x44305 + Inputmode Atom = 0x44309 + Ins Atom = 0x1fc03 + Integrity Atom = 0x23709 + Is Atom = 0x16502 + Isindex Atom = 0x30707 + Ismap Atom = 0x30e05 + Itemid Atom = 0x38306 + Itemprop Atom = 0x55d08 + Itemref Atom = 0x3c507 + Itemscope Atom = 0x67109 + Itemtype Atom = 0x31708 + Kbd Atom = 0x7803 + Keygen Atom = 0x3206 + Keytype Atom = 0x9507 + Kind Atom = 0x17704 + Label Atom = 0xf105 + Lang Atom = 0x2dc04 + Legend Atom = 0x18106 + Li Atom = 0x7102 + Link Atom = 0x17404 + List Atom = 0x4a104 + Listing Atom = 0x4a107 + Loop Atom = 0xf504 + Low Atom = 0x8203 + Main Atom = 0x1004 + Malignmark Atom = 0x6f0a + Manifest Atom = 0x6d708 + Map Atom = 0x31003 + Mark Atom = 0x7504 + Marquee Atom = 0x31f07 + Math Atom = 0x32604 + Max Atom = 0x33503 + Maxlength Atom = 0x33509 + Media Atom = 0xa505 + Mediagroup Atom = 0xa50a + Menu Atom = 0x37f04 + Menuitem Atom = 0x37f08 + Meta Atom = 0x4b004 + Meter Atom = 0xbf05 + Method Atom = 0x2a006 + Mglyph Atom = 0x30006 + Mi Atom = 0x33f02 + Min Atom = 0x33f03 + Minlength Atom = 0x33f09 + Mn Atom = 0x2a902 + Mo Atom = 0x6302 + Ms Atom = 0x67402 + Mtext Atom = 0x34905 + Multiple Atom = 0x35708 + Muted Atom = 0x35f05 + Name Atom = 0xbd04 + Nav Atom = 0x1303 + Nobr Atom = 0x3704 + Noembed Atom = 0x4007 + Noframes Atom = 0x5508 + Nomodule Atom = 0x6108 + Nonce Atom = 0x56605 + Noscript Atom = 0x20e08 + Novalidate Atom = 0x2aa0a + Object Atom = 0x26006 + Ol Atom = 0x11802 + Onabort Atom = 0x19507 + Onafterprint Atom = 0x22e0c + Onautocomplete Atom = 0x26e0e + Onautocompleteerror Atom = 0x26e13 + Onauxclick Atom = 0x61f0a + Onbeforeprint Atom = 0x69e0d + Onbeforeunload Atom = 0x6e70e + Onblur Atom = 0x5c606 + Oncancel Atom = 0xea08 + Oncanplay Atom = 0x14d09 + Oncanplaythrough Atom = 0x14d10 + Onchange Atom = 0x41308 + Onclick Atom = 0x2ed07 + Onclose Atom = 0x36407 + Oncontextmenu Atom = 0x3760d + Oncopy Atom = 0x38906 + Oncuechange Atom = 0x38f0b + Oncut Atom = 0x39a05 + Ondblclick Atom = 0x39f0a + Ondrag Atom = 0x3a906 + Ondragend Atom = 0x3a909 + Ondragenter Atom = 0x3b20b + Ondragexit Atom = 0x3bd0a + Ondragleave Atom = 0x3d70b + Ondragover Atom = 0x3e20a + Ondragstart Atom = 0x3ec0b + Ondrop Atom = 0x3fb06 + Ondurationchange Atom = 0x40b10 + Onemptied Atom = 0x40209 + Onended Atom = 0x41b07 + Onerror Atom = 0x42207 + Onfocus Atom = 0x42907 + Onhashchange Atom = 0x4350c + Oninput Atom = 0x44107 + Oninvalid Atom = 0x44d09 + Onkeydown Atom = 0x45609 + Onkeypress Atom = 0x4630a + Onkeyup Atom = 0x47807 + Onlanguagechange Atom = 0x48510 + Onload Atom = 0x49506 + Onloadeddata Atom = 0x4950c + Onloadedmetadata Atom = 0x4a810 + Onloadend Atom = 0x4be09 + Onloadstart Atom = 0x4c70b + Onmessage Atom = 0x4d209 + Onmessageerror Atom = 0x4d20e + Onmousedown Atom = 0x4e00b + Onmouseenter Atom = 0x4eb0c + Onmouseleave Atom = 0x4f70c + Onmousemove Atom = 0x5030b + Onmouseout Atom = 0x50e0a + Onmouseover Atom = 0x51b0b + Onmouseup Atom = 0x52609 + Onmousewheel Atom = 0x5340c + Onoffline Atom = 0x54009 + Ononline Atom = 0x54908 + Onpagehide Atom = 0x5510a + Onpageshow Atom = 0x56b0a + Onpaste Atom = 0x57707 + Onpause Atom = 0x59207 + Onplay Atom = 0x59c06 + Onplaying Atom = 0x59c09 + Onpopstate Atom = 0x5a50a + Onprogress Atom = 0x5af0a + Onratechange Atom = 0x5cc0c + Onrejectionhandled Atom = 0x5d812 + Onreset Atom = 0x5ea07 + Onresize Atom = 0x5f108 + Onscroll Atom = 0x60008 + Onsecuritypolicyviolation Atom = 0x60819 + Onseeked Atom = 0x62908 + Onseeking Atom = 0x63109 + Onselect Atom = 0x63a08 + Onshow Atom = 0x64406 + Onsort Atom = 0x64f06 + Onstalled Atom = 0x65909 + Onstorage Atom = 0x66209 + Onsubmit Atom = 0x66b08 + Onsuspend Atom = 0x67b09 + Ontimeupdate Atom = 0x1310c + Ontoggle Atom = 0x68408 + Onunhandledrejection Atom = 0x68c14 + Onunload Atom = 0x6ab08 + Onvolumechange Atom = 0x6b30e + Onwaiting Atom = 0x6c109 + Onwheel Atom = 0x6ca07 + Open Atom = 0x56304 + Optgroup Atom = 0xf708 + Optimum Atom = 0x6d107 + Option Atom = 0x6e306 + Output Atom = 0x51506 + P Atom = 0xc01 + Param Atom = 0xc05 + Pattern Atom = 0x4f07 + Picture Atom = 0xae07 + Ping Atom = 0xfe04 + Placeholder Atom = 0x1120b + Plaintext Atom = 0x1ae09 + Playsinline Atom = 0x1210b + Poster Atom = 0x2c706 + Pre Atom = 0x46803 + Preload Atom = 0x47e07 + Progress Atom = 0x5b108 + Prompt Atom = 0x52e06 + Public Atom = 0x57e06 + Q Atom = 0x8e01 + Radiogroup Atom = 0x30a + Readonly Atom = 0x34f08 + Referrerpolicy Atom = 0x3c90e + Rel Atom = 0x47f03 + Required Atom = 0x24408 + Reversed Atom = 0xb308 + Rows Atom = 0x3a04 + Rowspan Atom = 0x3a07 + Rp Atom = 0x23402 + Rt Atom = 0x19a02 + Ruby Atom = 0xc304 + S Atom = 0x2501 + Samp Atom = 0x4c04 + Sandbox Atom = 0x10a07 + Scope Atom = 0x67505 + Scoped Atom = 0x67506 + Script Atom = 0x21006 + Seamless Atom = 0x36908 + Section Atom = 0x5c107 + Select Atom = 0x63c06 + Selected Atom = 0x63c08 + Shape Atom = 0x1e505 + Size Atom = 0x5f504 + Sizes Atom = 0x5f505 + Slot Atom = 0x1ef04 + Small Atom = 0x1fe05 + Sortable Atom = 0x65108 + Sorted Atom = 0x32f06 + Source Atom = 0x37006 + Spacer Atom = 0x42f06 + Span Atom = 0x3d04 + Spellcheck Atom = 0x46c0a + Src Atom = 0x5b803 + Srcdoc Atom = 0x5b806 + Srclang Atom = 0x5f907 + Srcset Atom = 0x6f906 + Start Atom = 0x3f205 + Step Atom = 0x57b04 + Strike Atom = 0x9106 + Strong Atom = 0x6dd06 + Style Atom = 0x6ff05 + Sub Atom = 0x66d03 + Summary Atom = 0x70407 + Sup Atom = 0x70b03 + Svg Atom = 0x70e03 + System Atom = 0x71106 + Tabindex Atom = 0x4b608 + Table Atom = 0x58d05 + Target Atom = 0x2bc06 + Tbody Atom = 0x2705 + Td Atom = 0x5e02 + Template Atom = 0x71408 + Textarea Atom = 0x34a08 + Tfoot Atom = 0xc905 + Th Atom = 0x15602 + Thead Atom = 0x32805 + Time Atom = 0x13304 + Title Atom = 0xe105 + Tr Atom = 0x8b02 + Track Atom = 0x19b05 + Translate Atom = 0x1b609 + Tt Atom = 0x5102 + Type Atom = 0x9804 + Typemustmatch Atom = 0x2880d + U Atom = 0xb01 + Ul Atom = 0x6602 + Updateviacache Atom = 0x1370e + Usemap Atom = 0x59606 + Value Atom = 0x1505 + Var Atom = 0x16d03 + Video Atom = 0x2e905 + Wbr Atom = 0x57403 + Width Atom = 0x64905 + Workertype Atom = 0x71c0a + Wrap Atom = 0x72604 + Xmp Atom = 0x11003 ) -const hash0 = 0xc17da63e +const hash0 = 0x81cdf10e -const maxAtomLen = 19 +const maxAtomLen = 25 var table = [1 << 9]Atom{ - 0x1: 0x48a0b, // onmousemove - 0x2: 0x5e209, // onwaiting - 0x3: 0x1fa13, // onautocompleteerror - 0x4: 0x5fa06, // prompt - 0x7: 0x5eb07, // optimum - 0x8: 0x1604, // mark - 0xa: 0x5ad07, // itemref - 0xb: 0x4fe0a, // onpageshow - 0xc: 0x57a06, // select - 0xd: 0x17b09, // draggable - 0xe: 0x3e03, // nav - 0xf: 0x17507, // command - 0x11: 0xb01, // u - 0x14: 0x2d507, // headers - 0x15: 0x44a08, // datalist - 0x17: 0x4e04, // samp - 0x1a: 0x3fb09, // onkeydown - 0x1b: 0x55f08, // onscroll - 0x1c: 0x15003, // col - 0x20: 0x3c908, // itemprop - 0x21: 0x2780a, // http-equiv - 0x22: 0x61d03, // sup - 0x24: 0x1d008, // required - 0x2b: 0x25e07, // preload - 0x2c: 0x6040d, // onbeforeprint - 0x2d: 0x3600b, // ondragenter - 0x2e: 0x50902, // dt - 0x2f: 0x5a708, // onsubmit - 0x30: 0x27002, // hr - 0x31: 0x32f0d, // oncontextmenu - 0x33: 0x29c05, // image - 0x34: 0x50d07, // onpause - 0x35: 0x25906, // hgroup - 0x36: 0x7704, // ping - 0x37: 0x57808, // onselect - 0x3a: 0x11303, // div - 0x3b: 0x1fa0e, // onautocomplete - 0x40: 0x2eb02, // mi - 0x41: 0x31c08, // seamless - 0x42: 0x2807, // charset - 0x43: 0x8502, // id - 0x44: 0x5200a, // onpopstate - 0x45: 0x3ef03, // del - 0x46: 0x2cb07, // marquee - 0x47: 0x3309, // accesskey - 0x49: 0x8d06, // footer - 0x4a: 0x44e04, // list - 0x4b: 0x2b005, // ismap - 0x51: 0x33804, // menu - 0x52: 0x2f04, // body - 0x55: 0x9a08, // frameset - 0x56: 0x54a07, // onreset - 0x57: 0x12705, // blink - 0x58: 0xa105, // title - 0x59: 0x38807, // article - 0x5b: 0x22e02, // th - 0x5d: 0x13101, // q - 0x5e: 0x3cf04, // open - 0x5f: 0x2fa04, // area - 0x61: 0x44206, // onload - 0x62: 0xda04, // font - 0x63: 0xd604, // base - 0x64: 0x16207, // colspan - 0x65: 0x53707, // keytype - 0x66: 0x11e02, // dl - 0x68: 0x1b008, // fieldset - 0x6a: 0x2eb03, // min - 0x6b: 0x11503, // var - 0x6f: 0x2d506, // header - 0x70: 0x13f02, // rt - 0x71: 0x15008, // colgroup - 0x72: 0x23502, // mn - 0x74: 0x13a07, // onabort - 0x75: 0x3906, // keygen - 0x76: 0x4c209, // onoffline - 0x77: 0x21f09, // challenge - 0x78: 0x2b203, // map - 0x7a: 0x2e902, // h4 - 0x7b: 0x3b607, // onerror - 0x7c: 0x2e109, // maxlength - 0x7d: 0x2f505, // mtext - 0x7e: 0xbb07, // sandbox - 0x7f: 0x58b06, // onsort - 0x80: 0x100a, // malignmark - 0x81: 0x45d04, // meta - 0x82: 0x7b05, // async - 0x83: 0x2a702, // h3 - 0x84: 0x26702, // dd - 0x85: 0x27004, // href - 0x86: 0x6e0a, // mediagroup - 0x87: 0x19406, // coords - 0x88: 0x41107, // srclang - 0x89: 0x34d0a, // ondblclick - 0x8a: 0x4005, // value - 0x8c: 0xe908, // oncancel - 0x8e: 0x3230a, // spellcheck - 0x8f: 0x9a05, // frame - 0x91: 0x12403, // big - 0x94: 0x1f606, // action - 0x95: 0x6903, // dir - 0x97: 0x2fb08, // readonly - 0x99: 0x42d05, // table - 0x9a: 0x61607, // summary - 0x9b: 0x12103, // wbr - 0x9c: 0x30a, // radiogroup - 0x9d: 0x6c04, // name - 0x9f: 0x62306, // system - 0xa1: 0x15d05, // color - 0xa2: 0x7f06, // canvas - 0xa3: 0x25504, // html - 0xa5: 0x56f09, // onseeking - 0xac: 0x4f905, // shape - 0xad: 0x25f03, // rel - 0xae: 0x28510, // oncanplaythrough - 0xaf: 0x3760a, // ondragover - 0xb0: 0x62608, // template - 0xb1: 0x1d80d, // foreignObject - 0xb3: 0x9204, // rows - 0xb6: 0x44e07, // listing - 0xb7: 0x49c06, // output - 0xb9: 0x3310b, // contextmenu - 0xbb: 0x11f03, // low - 0xbc: 0x1c602, // rp - 0xbd: 0x5bb09, // onsuspend - 0xbe: 0x13606, // button - 0xbf: 0x4db04, // desc - 0xc1: 0x4e207, // section - 0xc2: 0x52a0a, // onprogress - 0xc3: 0x59e09, // onstorage - 0xc4: 0x2d204, // math - 0xc5: 0x4503, // alt - 0xc7: 0x8a02, // ul - 0xc8: 0x5107, // pattern - 0xc9: 0x4b60c, // onmousewheel - 0xca: 0x35709, // ondragend - 0xcb: 0xaf04, // ruby - 0xcc: 0xc01, // p - 0xcd: 0x31707, // onclose - 0xce: 0x24205, // meter - 0xcf: 0x11807, // bgsound - 0xd2: 0x25106, // height - 0xd4: 0x101, // b - 0xd5: 0x2c308, // itemtype - 0xd8: 0x1bb07, // caption - 0xd9: 0x10c08, // disabled - 0xdb: 0x33808, // menuitem - 0xdc: 0x62003, // svg - 0xdd: 0x18f05, // small - 0xde: 0x44a04, // data - 0xe0: 0x4cb08, // ononline - 0xe1: 0x2a206, // mglyph - 0xe3: 0x6505, // embed - 0xe4: 0x10502, // tr - 0xe5: 0x46b0b, // onloadstart - 0xe7: 0x3c306, // srcdoc - 0xeb: 0x5c408, // ontoggle - 0xed: 0xe703, // bdo - 0xee: 0x4702, // td - 0xef: 0x8305, // aside - 0xf0: 0x29402, // h2 - 0xf1: 0x52c08, // progress - 0xf2: 0x12c0a, // blockquote - 0xf4: 0xf005, // label - 0xf5: 0x601, // i - 0xf7: 0x9207, // rowspan - 0xfb: 0x51709, // onplaying - 0xfd: 0x2a103, // img - 0xfe: 0xf608, // optgroup - 0xff: 0x42307, // content - 0x101: 0x53e0c, // onratechange - 0x103: 0x3da0c, // onhashchange - 0x104: 0x4807, // details - 0x106: 0x40008, // download - 0x109: 0x14009, // translate - 0x10b: 0x4230f, // contenteditable - 0x10d: 0x36b0b, // ondragleave - 0x10e: 0x2106, // accept - 0x10f: 0x57a08, // selected - 0x112: 0x1f20a, // formaction - 0x113: 0x5b506, // center - 0x115: 0x45510, // onloadedmetadata - 0x116: 0x12804, // link - 0x117: 0xdd04, // time - 0x118: 0x19f0b, // crossorigin - 0x119: 0x3bd07, // onfocus - 0x11a: 0x58704, // wrap - 0x11b: 0x42204, // icon - 0x11d: 0x28105, // video - 0x11e: 0x4de05, // class - 0x121: 0x5d40e, // onvolumechange - 0x122: 0xaa06, // onblur - 0x123: 0x2b909, // itemscope - 0x124: 0x61105, // style - 0x127: 0x41e06, // public - 0x129: 0x2320e, // formnovalidate - 0x12a: 0x58206, // onshow - 0x12c: 0x51706, // onplay - 0x12d: 0x3c804, // cite - 0x12e: 0x2bc02, // ms - 0x12f: 0xdb0c, // ontimeupdate - 0x130: 0x10904, // kind - 0x131: 0x2470a, // formtarget - 0x135: 0x3af07, // onended - 0x136: 0x26506, // hidden - 0x137: 0x2c01, // s - 0x139: 0x2280a, // formmethod - 0x13a: 0x3e805, // input - 0x13c: 0x50b02, // h6 - 0x13d: 0xc902, // ol - 0x13e: 0x3420b, // oncuechange - 0x13f: 0x1e50d, // foreignobject - 0x143: 0x4e70e, // onbeforeunload - 0x144: 0x2bd05, // scope - 0x145: 0x39609, // onemptied - 0x146: 0x14b05, // defer - 0x147: 0xc103, // xmp - 0x148: 0x39f10, // ondurationchange - 0x149: 0x1903, // kbd - 0x14c: 0x47609, // onmessage - 0x14d: 0x60006, // option - 0x14e: 0x2eb09, // minlength - 0x14f: 0x32807, // checked - 0x150: 0xce08, // autoplay - 0x152: 0x202, // br - 0x153: 0x2360a, // novalidate - 0x156: 0x6307, // noembed - 0x159: 0x31007, // onclick - 0x15a: 0x47f0b, // onmousedown - 0x15b: 0x3a708, // onchange - 0x15e: 0x3f209, // oninvalid - 0x15f: 0x2bd06, // scoped - 0x160: 0x18808, // controls - 0x161: 0x30b05, // muted - 0x162: 0x58d08, // sortable - 0x163: 0x51106, // usemap - 0x164: 0x1b80a, // figcaption - 0x165: 0x35706, // ondrag - 0x166: 0x26b04, // high - 0x168: 0x3c303, // src - 0x169: 0x15706, // poster - 0x16b: 0x1670e, // annotation-xml - 0x16c: 0x5f704, // step - 0x16d: 0x4, // abbr - 0x16e: 0x1b06, // dialog - 0x170: 0x1202, // li - 0x172: 0x3ed02, // mo - 0x175: 0x1d803, // for - 0x176: 0x1a803, // ins - 0x178: 0x55504, // size - 0x179: 0x43210, // onlanguagechange - 0x17a: 0x8607, // default - 0x17b: 0x1a03, // bdi - 0x17c: 0x4d30a, // onpagehide - 0x17d: 0x6907, // dirname - 0x17e: 0x21404, // type - 0x17f: 0x1f204, // form - 0x181: 0x28509, // oncanplay - 0x182: 0x6103, // dfn - 0x183: 0x46308, // tabindex - 0x186: 0x6502, // em - 0x187: 0x27404, // lang - 0x189: 0x39108, // dropzone - 0x18a: 0x4080a, // onkeypress - 0x18b: 0x23c08, // datetime - 0x18c: 0x16204, // cols - 0x18d: 0x1, // a - 0x18e: 0x4420c, // onloadeddata - 0x190: 0xa605, // audio - 0x192: 0x2e05, // tbody - 0x193: 0x22c06, // method - 0x195: 0xf404, // loop - 0x196: 0x29606, // iframe - 0x198: 0x2d504, // head - 0x19e: 0x5f108, // manifest - 0x19f: 0xb309, // autofocus - 0x1a0: 0x14904, // code - 0x1a1: 0x55906, // strong - 0x1a2: 0x30308, // multiple - 0x1a3: 0xc05, // param - 0x1a6: 0x21107, // enctype - 0x1a7: 0x5b304, // face - 0x1a8: 0xfd09, // plaintext - 0x1a9: 0x26e02, // h1 - 0x1aa: 0x59509, // onstalled - 0x1ad: 0x3d406, // script - 0x1ae: 0x2db06, // spacer - 0x1af: 0x55108, // onresize - 0x1b0: 0x4a20b, // onmouseover - 0x1b1: 0x5cc08, // onunload - 0x1b2: 0x56708, // onseeked - 0x1b4: 0x2140d, // typemustmatch - 0x1b5: 0x1cc06, // figure - 0x1b6: 0x4950a, // onmouseout - 0x1b7: 0x25e03, // pre - 0x1b8: 0x50705, // width - 0x1b9: 0x19906, // sorted - 0x1bb: 0x5704, // nobr - 0x1be: 0x5302, // tt - 0x1bf: 0x1105, // align - 0x1c0: 0x3e607, // oninput - 0x1c3: 0x41807, // onkeyup - 0x1c6: 0x1c00c, // onafterprint - 0x1c7: 0x210e, // accept-charset - 0x1c8: 0x33c06, // itemid - 0x1c9: 0x3e809, // inputmode - 0x1cb: 0x53306, // strike - 0x1cc: 0x5a903, // sub - 0x1cd: 0x10505, // track - 0x1ce: 0x38605, // start - 0x1d0: 0xd608, // basefont - 0x1d6: 0x1aa06, // source - 0x1d7: 0x18206, // legend - 0x1d8: 0x2d405, // thead - 0x1da: 0x8c05, // tfoot - 0x1dd: 0x1ec06, // object - 0x1de: 0x6e05, // media - 0x1df: 0x1670a, // annotation - 0x1e0: 0x20d0b, // formenctype - 0x1e2: 0x3d208, // noscript - 0x1e4: 0x55505, // sizes - 0x1e5: 0x1fc0c, // autocomplete - 0x1e6: 0x9504, // span - 0x1e7: 0x9808, // noframes - 0x1e8: 0x24b06, // target - 0x1e9: 0x38f06, // ondrop - 0x1ea: 0x2b306, // applet - 0x1ec: 0x5a08, // reversed - 0x1f0: 0x2a907, // isindex - 0x1f3: 0x27008, // hreflang - 0x1f5: 0x2f302, // h5 - 0x1f6: 0x4f307, // address - 0x1fa: 0x2e103, // max - 0x1fb: 0xc30b, // placeholder - 0x1fc: 0x2f608, // textarea - 0x1fe: 0x4ad09, // onmouseup - 0x1ff: 0x3800b, // ondragstart + 0x1: 0xa50a, // mediagroup + 0x2: 0x2dc04, // lang + 0x4: 0x2c09, // accesskey + 0x5: 0x5708, // frameset + 0x7: 0x63a08, // onselect + 0x8: 0x71106, // system + 0xa: 0x64905, // width + 0xc: 0x2810b, // formenctype + 0xd: 0x11802, // ol + 0xe: 0x38f0b, // oncuechange + 0x10: 0x14b03, // bdo + 0x11: 0xe605, // audio + 0x12: 0x17a09, // draggable + 0x14: 0x2e905, // video + 0x15: 0x2a902, // mn + 0x16: 0x37f04, // menu + 0x17: 0x2c706, // poster + 0x19: 0xca06, // footer + 0x1a: 0x2a006, // method + 0x1b: 0x2b008, // datetime + 0x1c: 0x19507, // onabort + 0x1d: 0x1370e, // updateviacache + 0x1e: 0xd005, // async + 0x1f: 0x49506, // onload + 0x21: 0xea08, // oncancel + 0x22: 0x62908, // onseeked + 0x23: 0x2fa05, // image + 0x24: 0x5d812, // onrejectionhandled + 0x26: 0x17404, // link + 0x27: 0x51506, // output + 0x28: 0x32904, // head + 0x29: 0x4f70c, // onmouseleave + 0x2a: 0x57707, // onpaste + 0x2b: 0x59c09, // onplaying + 0x2c: 0x1c407, // colspan + 0x2f: 0x1bf05, // color + 0x30: 0x5f504, // size + 0x31: 0x2e00a, // http-equiv + 0x33: 0x601, // i + 0x34: 0x5510a, // onpagehide + 0x35: 0x68c14, // onunhandledrejection + 0x37: 0x42207, // onerror + 0x3a: 0x12c08, // basefont + 0x3f: 0x1303, // nav + 0x40: 0x17704, // kind + 0x41: 0x34f08, // readonly + 0x42: 0x30006, // mglyph + 0x44: 0x7102, // li + 0x46: 0x2cd06, // hidden + 0x47: 0x70e03, // svg + 0x48: 0x57b04, // step + 0x49: 0x23709, // integrity + 0x4a: 0x57e06, // public + 0x4c: 0x1a703, // col + 0x4d: 0x1870a, // blockquote + 0x4e: 0x34702, // h5 + 0x50: 0x5b108, // progress + 0x51: 0x5f505, // sizes + 0x52: 0x33d02, // h4 + 0x56: 0x32805, // thead + 0x57: 0x9507, // keytype + 0x58: 0x5af0a, // onprogress + 0x59: 0x44309, // inputmode + 0x5a: 0x3a909, // ondragend + 0x5d: 0x39a05, // oncut + 0x5e: 0x42f06, // spacer + 0x5f: 0x1a708, // colgroup + 0x62: 0x16502, // is + 0x65: 0xd002, // as + 0x66: 0x54009, // onoffline + 0x67: 0x32f06, // sorted + 0x69: 0x48510, // onlanguagechange + 0x6c: 0x4350c, // onhashchange + 0x6d: 0xbd04, // name + 0x6e: 0xc905, // tfoot + 0x6f: 0x55904, // desc + 0x70: 0x33503, // max + 0x72: 0x1ea06, // coords + 0x73: 0x30502, // h3 + 0x74: 0x6e70e, // onbeforeunload + 0x75: 0x3a04, // rows + 0x76: 0x63c06, // select + 0x77: 0xbf05, // meter + 0x78: 0x38306, // itemid + 0x79: 0x5340c, // onmousewheel + 0x7a: 0x5b806, // srcdoc + 0x7d: 0x19b05, // track + 0x7f: 0x31708, // itemtype + 0x82: 0x6302, // mo + 0x83: 0x41308, // onchange + 0x84: 0x32907, // headers + 0x85: 0x5cc0c, // onratechange + 0x86: 0x60819, // onsecuritypolicyviolation + 0x88: 0x49d08, // datalist + 0x89: 0x4e00b, // onmousedown + 0x8a: 0x1ef04, // slot + 0x8b: 0x4a810, // onloadedmetadata + 0x8c: 0x1a06, // accept + 0x8d: 0x26006, // object + 0x91: 0x6b30e, // onvolumechange + 0x92: 0x2107, // charset + 0x93: 0x26e13, // onautocompleteerror + 0x94: 0x8013, // allowpaymentrequest + 0x95: 0x2804, // body + 0x96: 0xdb07, // default + 0x97: 0x63c08, // selected + 0x98: 0x21604, // face + 0x99: 0x1e505, // shape + 0x9b: 0x68408, // ontoggle + 0x9e: 0x64b02, // dt + 0x9f: 0x7504, // mark + 0xa1: 0xb01, // u + 0xa4: 0x6ab08, // onunload + 0xa5: 0xf504, // loop + 0xa6: 0x16408, // disabled + 0xaa: 0x41b07, // onended + 0xab: 0x6f0a, // malignmark + 0xad: 0x67b09, // onsuspend + 0xae: 0x34905, // mtext + 0xaf: 0x64f06, // onsort + 0xb0: 0x55d08, // itemprop + 0xb3: 0x67109, // itemscope + 0xb4: 0x17305, // blink + 0xb6: 0x3a906, // ondrag + 0xb7: 0x6602, // ul + 0xb8: 0x26604, // form + 0xb9: 0x10a07, // sandbox + 0xba: 0x5705, // frame + 0xbb: 0x1505, // value + 0xbc: 0x66209, // onstorage + 0xbf: 0x6907, // acronym + 0xc0: 0x19a02, // rt + 0xc2: 0x202, // br + 0xc3: 0x21e08, // fieldset + 0xc4: 0x2880d, // typemustmatch + 0xc5: 0x6108, // nomodule + 0xc6: 0x4007, // noembed + 0xc7: 0x69e0d, // onbeforeprint + 0xc8: 0x19106, // button + 0xc9: 0x2ed07, // onclick + 0xca: 0x70407, // summary + 0xcd: 0xc304, // ruby + 0xce: 0x5bd05, // class + 0xcf: 0x3ec0b, // ondragstart + 0xd0: 0x22907, // caption + 0xd4: 0x9c0e, // allowusermedia + 0xd5: 0x4c70b, // onloadstart + 0xd9: 0x16b03, // div + 0xda: 0x4a104, // list + 0xdb: 0x32604, // math + 0xdc: 0x44305, // input + 0xdf: 0x3e20a, // ondragover + 0xe0: 0x2d602, // h2 + 0xe2: 0x1ae09, // plaintext + 0xe4: 0x4eb0c, // onmouseenter + 0xe7: 0x47107, // checked + 0xe8: 0x46803, // pre + 0xea: 0x35708, // multiple + 0xeb: 0x7903, // bdi + 0xec: 0x33509, // maxlength + 0xed: 0x8e01, // q + 0xee: 0x61f0a, // onauxclick + 0xf0: 0x57403, // wbr + 0xf2: 0x12c04, // base + 0xf3: 0x6e306, // option + 0xf5: 0x40b10, // ondurationchange + 0xf7: 0x5508, // noframes + 0xf9: 0x3fd08, // dropzone + 0xfb: 0x67505, // scope + 0xfc: 0xb308, // reversed + 0xfd: 0x3b20b, // ondragenter + 0xfe: 0x3f205, // start + 0xff: 0x11003, // xmp + 0x100: 0x5f907, // srclang + 0x101: 0x2ff03, // img + 0x104: 0x101, // b + 0x105: 0x24c03, // for + 0x106: 0xd805, // aside + 0x107: 0x44107, // oninput + 0x108: 0x34e04, // area + 0x109: 0x29c0a, // formmethod + 0x10a: 0x72604, // wrap + 0x10c: 0x23402, // rp + 0x10d: 0x4630a, // onkeypress + 0x10e: 0x5102, // tt + 0x110: 0x33f02, // mi + 0x111: 0x35f05, // muted + 0x112: 0xc703, // alt + 0x113: 0x1a004, // code + 0x114: 0x4202, // em + 0x115: 0x3bd0a, // ondragexit + 0x117: 0x3d04, // span + 0x119: 0x6d708, // manifest + 0x11a: 0x37f08, // menuitem + 0x11b: 0x58307, // content + 0x11d: 0x6c109, // onwaiting + 0x11f: 0x4be09, // onloadend + 0x121: 0x3760d, // oncontextmenu + 0x123: 0x5c606, // onblur + 0x124: 0x3f407, // article + 0x125: 0xba03, // dir + 0x126: 0xfe04, // ping + 0x127: 0x24408, // required + 0x128: 0x44d09, // oninvalid + 0x129: 0x7005, // align + 0x12b: 0x58204, // icon + 0x12c: 0x64d02, // h6 + 0x12d: 0x1c404, // cols + 0x12e: 0x2260a, // figcaption + 0x12f: 0x45609, // onkeydown + 0x130: 0x66b08, // onsubmit + 0x131: 0x14d09, // oncanplay + 0x132: 0x70b03, // sup + 0x133: 0xc01, // p + 0x135: 0x40209, // onemptied + 0x136: 0x38906, // oncopy + 0x137: 0x55c04, // cite + 0x138: 0x39f0a, // ondblclick + 0x13a: 0x5030b, // onmousemove + 0x13c: 0x66d03, // sub + 0x13d: 0x47f03, // rel + 0x13e: 0xf708, // optgroup + 0x142: 0x3a07, // rowspan + 0x143: 0x37006, // source + 0x144: 0x20e08, // noscript + 0x145: 0x56304, // open + 0x146: 0x1fc03, // ins + 0x147: 0x24c0d, // foreignObject + 0x148: 0x5a50a, // onpopstate + 0x14a: 0x28507, // enctype + 0x14b: 0x26e0e, // onautocomplete + 0x14c: 0x34a08, // textarea + 0x14e: 0x2700c, // autocomplete + 0x14f: 0x15702, // hr + 0x150: 0x1de08, // controls + 0x151: 0xda02, // id + 0x153: 0x22e0c, // onafterprint + 0x155: 0x2590d, // foreignobject + 0x156: 0x31f07, // marquee + 0x157: 0x59207, // onpause + 0x158: 0x5e602, // dl + 0x159: 0x14306, // height + 0x15a: 0x33f03, // min + 0x15b: 0xba07, // dirname + 0x15c: 0x1b609, // translate + 0x15d: 0x14704, // html + 0x15e: 0x33f09, // minlength + 0x15f: 0x47e07, // preload + 0x160: 0x71408, // template + 0x161: 0x3d70b, // ondragleave + 0x164: 0x5b803, // src + 0x165: 0x6dd06, // strong + 0x167: 0x4c04, // samp + 0x168: 0x6f307, // address + 0x169: 0x54908, // ononline + 0x16b: 0x1120b, // placeholder + 0x16c: 0x2bc06, // target + 0x16d: 0x1fe05, // small + 0x16e: 0x6ca07, // onwheel + 0x16f: 0x1c90a, // annotation + 0x170: 0x46c0a, // spellcheck + 0x171: 0x4607, // details + 0x172: 0xd406, // canvas + 0x173: 0x10209, // autofocus + 0x174: 0xc05, // param + 0x176: 0x45b08, // download + 0x177: 0x44a03, // del + 0x178: 0x36407, // onclose + 0x179: 0x7803, // kbd + 0x17a: 0x31106, // applet + 0x17b: 0x2d804, // href + 0x17c: 0x5f108, // onresize + 0x17e: 0x4950c, // onloadeddata + 0x180: 0x8b02, // tr + 0x181: 0x2b80a, // formtarget + 0x182: 0xe105, // title + 0x183: 0x6ff05, // style + 0x184: 0x9106, // strike + 0x185: 0x59606, // usemap + 0x186: 0x2f406, // iframe + 0x187: 0x1004, // main + 0x189: 0xae07, // picture + 0x18c: 0x30e05, // ismap + 0x18e: 0x49d04, // data + 0x18f: 0xf105, // label + 0x191: 0x3c90e, // referrerpolicy + 0x192: 0x15602, // th + 0x194: 0x52e06, // prompt + 0x195: 0x5c107, // section + 0x197: 0x6d107, // optimum + 0x198: 0x2d304, // high + 0x199: 0x15c02, // h1 + 0x19a: 0x65909, // onstalled + 0x19b: 0x16d03, // var + 0x19c: 0x13304, // time + 0x19e: 0x67402, // ms + 0x19f: 0x32906, // header + 0x1a0: 0x4d209, // onmessage + 0x1a1: 0x56605, // nonce + 0x1a2: 0x2660a, // formaction + 0x1a3: 0x21806, // center + 0x1a4: 0x3704, // nobr + 0x1a5: 0x58d05, // table + 0x1a6: 0x4a107, // listing + 0x1a7: 0x18106, // legend + 0x1a9: 0x29309, // challenge + 0x1aa: 0x24006, // figure + 0x1ab: 0xa505, // media + 0x1ae: 0x9804, // type + 0x1af: 0x13004, // font + 0x1b0: 0x4d20e, // onmessageerror + 0x1b1: 0x36908, // seamless + 0x1b2: 0x5f03, // dfn + 0x1b3: 0x1a205, // defer + 0x1b4: 0x8203, // low + 0x1b5: 0x63109, // onseeking + 0x1b6: 0x51b0b, // onmouseover + 0x1b7: 0x2aa0a, // novalidate + 0x1b8: 0x71c0a, // workertype + 0x1ba: 0x3c507, // itemref + 0x1bd: 0x1, // a + 0x1be: 0x31003, // map + 0x1bf: 0x1310c, // ontimeupdate + 0x1c0: 0x15e07, // bgsound + 0x1c1: 0x3206, // keygen + 0x1c2: 0x2705, // tbody + 0x1c5: 0x64406, // onshow + 0x1c7: 0x2501, // s + 0x1c8: 0x4f07, // pattern + 0x1cc: 0x14d10, // oncanplaythrough + 0x1ce: 0x2cf02, // dd + 0x1cf: 0x6f906, // srcset + 0x1d0: 0x17003, // big + 0x1d2: 0x65108, // sortable + 0x1d3: 0x47807, // onkeyup + 0x1d5: 0x59c06, // onplay + 0x1d7: 0x4b004, // meta + 0x1d8: 0x3fb06, // ondrop + 0x1da: 0x60008, // onscroll + 0x1db: 0x1f30b, // crossorigin + 0x1dc: 0x56b0a, // onpageshow + 0x1dd: 0x4, // abbr + 0x1de: 0x5e02, // td + 0x1df: 0x5830f, // contenteditable + 0x1e0: 0x26a06, // action + 0x1e1: 0x1210b, // playsinline + 0x1e2: 0x42907, // onfocus + 0x1e3: 0x2d808, // hreflang + 0x1e5: 0x50e0a, // onmouseout + 0x1e6: 0x5ea07, // onreset + 0x1e7: 0x11d08, // autoplay + 0x1ea: 0x67506, // scoped + 0x1ec: 0x30a, // radiogroup + 0x1ee: 0x3780b, // contextmenu + 0x1ef: 0x52609, // onmouseup + 0x1f1: 0x2c206, // hgroup + 0x1f2: 0x2000f, // allowfullscreen + 0x1f3: 0x4b608, // tabindex + 0x1f6: 0x30707, // isindex + 0x1f7: 0x1a0e, // accept-charset + 0x1f8: 0x2a60e, // formnovalidate + 0x1fb: 0x1c90e, // annotation-xml + 0x1fc: 0x4205, // embed + 0x1fd: 0x21006, // script + 0x1fe: 0x7a06, // dialog + 0x1ff: 0x1d707, // command } -const atomText = "abbradiogrouparamalignmarkbdialogaccept-charsetbodyaccesskey" + - "genavaluealtdetailsampatternobreversedfnoembedirnamediagroup" + - "ingasyncanvasidefaultfooterowspanoframesetitleaudionblurubya" + - "utofocusandboxmplaceholderautoplaybasefontimeupdatebdoncance" + - "labelooptgrouplaintextrackindisabledivarbgsoundlowbrbigblink" + - "blockquotebuttonabortranslatecodefercolgroupostercolorcolspa" + - "nnotation-xmlcommandraggablegendcontrolsmallcoordsortedcross" + - "originsourcefieldsetfigcaptionafterprintfigurequiredforeignO" + - "bjectforeignobjectformactionautocompleteerrorformenctypemust" + - "matchallengeformmethodformnovalidatetimeterformtargetheightm" + - "lhgroupreloadhiddenhigh1hreflanghttp-equivideoncanplaythroug" + - "h2iframeimageimglyph3isindexismappletitemscopeditemtypemarqu" + - "eematheaderspacermaxlength4minlength5mtextareadonlymultiplem" + - "utedonclickoncloseamlesspellcheckedoncontextmenuitemidoncuec" + - "hangeondblclickondragendondragenterondragleaveondragoverondr" + - "agstarticleondropzonemptiedondurationchangeonendedonerroronf" + - "ocusrcdocitempropenoscriptonhashchangeoninputmodeloninvalido" + - "nkeydownloadonkeypressrclangonkeyupublicontenteditableonlang" + - "uagechangeonloadeddatalistingonloadedmetadatabindexonloadsta" + - "rtonmessageonmousedownonmousemoveonmouseoutputonmouseoveronm" + - "ouseuponmousewheelonofflineononlineonpagehidesclassectionbef" + - "oreunloaddresshapeonpageshowidth6onpausemaponplayingonpopsta" + - "teonprogresstrikeytypeonratechangeonresetonresizestrongonscr" + - "ollonseekedonseekingonselectedonshowraponsortableonstalledon" + - "storageonsubmitemrefacenteronsuspendontoggleonunloadonvolume" + - "changeonwaitingoptimumanifestepromptoptionbeforeprintstylesu" + - "mmarysupsvgsystemplate" +const atomText = "abbradiogrouparamainavalueaccept-charsetbodyaccesskeygenobro" + + "wspanoembedetailsampatternoframesetdfnomoduleacronymalignmar" + + "kbdialogallowpaymentrequestrikeytypeallowusermediagroupictur" + + "eversedirnameterubyaltfooterasyncanvasidefaultitleaudioncanc" + + "elabelooptgroupingautofocusandboxmplaceholderautoplaysinline" + + "basefontimeupdateviacacheightmlbdoncanplaythrough1bgsoundisa" + + "bledivarbigblinkindraggablegendblockquotebuttonabortrackcode" + + "fercolgrouplaintextranslatecolorcolspannotation-xmlcommandco" + + "ntrolshapecoordslotcrossoriginsmallowfullscreenoscriptfacent" + + "erfieldsetfigcaptionafterprintegrityfigurequiredforeignObjec" + + "tforeignobjectformactionautocompleteerrorformenctypemustmatc" + + "hallengeformmethodformnovalidatetimeformtargethgrouposterhid" + + "denhigh2hreflanghttp-equivideonclickiframeimageimglyph3isind" + + "exismappletitemtypemarqueematheadersortedmaxlength4minlength" + + "5mtextareadonlymultiplemutedoncloseamlessourceoncontextmenui" + + "temidoncopyoncuechangeoncutondblclickondragendondragenterond" + + "ragexitemreferrerpolicyondragleaveondragoverondragstarticleo" + + "ndropzonemptiedondurationchangeonendedonerroronfocuspaceronh" + + "ashchangeoninputmodeloninvalidonkeydownloadonkeypresspellche" + + "ckedonkeyupreloadonlanguagechangeonloadeddatalistingonloaded" + + "metadatabindexonloadendonloadstartonmessageerroronmousedowno" + + "nmouseenteronmouseleaveonmousemoveonmouseoutputonmouseoveron" + + "mouseupromptonmousewheelonofflineononlineonpagehidescitempro" + + "penonceonpageshowbronpastepublicontenteditableonpausemaponpl" + + "ayingonpopstateonprogressrcdoclassectionbluronratechangeonre" + + "jectionhandledonresetonresizesrclangonscrollonsecuritypolicy" + + "violationauxclickonseekedonseekingonselectedonshowidth6onsor" + + "tableonstalledonstorageonsubmitemscopedonsuspendontoggleonun" + + "handledrejectionbeforeprintonunloadonvolumechangeonwaitingon" + + "wheeloptimumanifestrongoptionbeforeunloaddressrcsetstylesumm" + + "arysupsvgsystemplateworkertypewrap" diff --git a/vendor/golang.org/x/net/html/atom/table_test.go b/vendor/golang.org/x/net/html/atom/table_test.go index 0f2ecce..46d9d70 100644 --- a/vendor/golang.org/x/net/html/atom/table_test.go +++ b/vendor/golang.org/x/net/html/atom/table_test.go @@ -1,23 +1,29 @@ -// generated by go run gen.go -test; DO NOT EDIT +// Code generated by go generate gen.go; DO NOT EDIT. + +//go:generate go run gen.go -test package atom var testAtomList = []string{ "a", "abbr", - "abbr", "accept", "accept-charset", "accesskey", + "acronym", "action", "address", "align", + "allowfullscreen", + "allowpaymentrequest", + "allowusermedia", "alt", "annotation", "annotation-xml", "applet", "area", "article", + "as", "aside", "async", "audio", @@ -43,7 +49,6 @@ var testAtomList = []string{ "charset", "checked", "cite", - "cite", "class", "code", "col", @@ -52,7 +57,6 @@ var testAtomList = []string{ "cols", "colspan", "command", - "command", "content", "contenteditable", "contextmenu", @@ -60,7 +64,6 @@ var testAtomList = []string{ "coords", "crossorigin", "data", - "data", "datalist", "datetime", "dd", @@ -93,7 +96,6 @@ var testAtomList = []string{ "foreignObject", "foreignobject", "form", - "form", "formaction", "formenctype", "formmethod", @@ -128,6 +130,8 @@ var testAtomList = []string{ "input", "inputmode", "ins", + "integrity", + "is", "isindex", "ismap", "itemid", @@ -140,7 +144,6 @@ var testAtomList = []string{ "keytype", "kind", "label", - "label", "lang", "legend", "li", @@ -149,6 +152,7 @@ var testAtomList = []string{ "listing", "loop", "low", + "main", "malignmark", "manifest", "map", @@ -179,6 +183,8 @@ var testAtomList = []string{ "nobr", "noembed", "noframes", + "nomodule", + "nonce", "noscript", "novalidate", "object", @@ -187,6 +193,7 @@ var testAtomList = []string{ "onafterprint", "onautocomplete", "onautocompleteerror", + "onauxclick", "onbeforeprint", "onbeforeunload", "onblur", @@ -197,11 +204,14 @@ var testAtomList = []string{ "onclick", "onclose", "oncontextmenu", + "oncopy", "oncuechange", + "oncut", "ondblclick", "ondrag", "ondragend", "ondragenter", + "ondragexit", "ondragleave", "ondragover", "ondragstart", @@ -221,9 +231,13 @@ var testAtomList = []string{ "onload", "onloadeddata", "onloadedmetadata", + "onloadend", "onloadstart", "onmessage", + "onmessageerror", "onmousedown", + "onmouseenter", + "onmouseleave", "onmousemove", "onmouseout", "onmouseover", @@ -233,15 +247,18 @@ var testAtomList = []string{ "ononline", "onpagehide", "onpageshow", + "onpaste", "onpause", "onplay", "onplaying", "onpopstate", "onprogress", "onratechange", + "onrejectionhandled", "onreset", "onresize", "onscroll", + "onsecuritypolicyviolation", "onseeked", "onseeking", "onselect", @@ -253,9 +270,11 @@ var testAtomList = []string{ "onsuspend", "ontimeupdate", "ontoggle", + "onunhandledrejection", "onunload", "onvolumechange", "onwaiting", + "onwheel", "open", "optgroup", "optimum", @@ -264,9 +283,11 @@ var testAtomList = []string{ "p", "param", "pattern", + "picture", "ping", "placeholder", "plaintext", + "playsinline", "poster", "pre", "preload", @@ -276,6 +297,7 @@ var testAtomList = []string{ "q", "radiogroup", "readonly", + "referrerpolicy", "rel", "required", "reversed", @@ -297,23 +319,23 @@ var testAtomList = []string{ "shape", "size", "sizes", + "slot", "small", "sortable", "sorted", "source", "spacer", "span", - "span", "spellcheck", "src", "srcdoc", "srclang", + "srcset", "start", "step", "strike", "strong", "style", - "style", "sub", "summary", "sup", @@ -331,7 +353,6 @@ var testAtomList = []string{ "thead", "time", "title", - "title", "tr", "track", "translate", @@ -340,12 +361,14 @@ var testAtomList = []string{ "typemustmatch", "u", "ul", + "updateviacache", "usemap", "value", "var", "video", "wbr", "width", + "workertype", "wrap", "xmp", } diff --git a/vendor/golang.org/x/net/html/const.go b/vendor/golang.org/x/net/html/const.go index 52f651f..5eb7c5a 100644 --- a/vendor/golang.org/x/net/html/const.go +++ b/vendor/golang.org/x/net/html/const.go @@ -4,7 +4,7 @@ package html -// Section 12.2.3.2 of the HTML5 specification says "The following elements +// Section 12.2.4.2 of the HTML5 specification says "The following elements // have varying levels of special parsing rules". // https://html.spec.whatwg.org/multipage/syntax.html#the-stack-of-open-elements var isSpecialElementMap = map[string]bool{ @@ -52,10 +52,12 @@ var isSpecialElementMap = map[string]bool{ "iframe": true, "img": true, "input": true, - "isindex": true, + "isindex": true, // The 'isindex' element has been removed, but keep it for backwards compatibility. + "keygen": true, "li": true, "link": true, "listing": true, + "main": true, "marquee": true, "menu": true, "meta": true, diff --git a/vendor/golang.org/x/net/html/doc.go b/vendor/golang.org/x/net/html/doc.go index 94f4968..822ed42 100644 --- a/vendor/golang.org/x/net/html/doc.go +++ b/vendor/golang.org/x/net/html/doc.go @@ -49,18 +49,18 @@ call to Next. For example, to extract an HTML page's anchor text: for { tt := z.Next() switch tt { - case ErrorToken: + case html.ErrorToken: return z.Err() - case TextToken: + case html.TextToken: if depth > 0 { // emitBytes should copy the []byte it receives, // if it doesn't process it immediately. emitBytes(z.Text()) } - case StartTagToken, EndTagToken: + case html.StartTagToken, html.EndTagToken: tn, _ := z.TagName() if len(tn) == 1 && tn[0] == 'a' { - if tt == StartTagToken { + if tt == html.StartTagToken { depth++ } else { depth-- diff --git a/vendor/golang.org/x/net/html/foreign.go b/vendor/golang.org/x/net/html/foreign.go index d3b3844..01477a9 100644 --- a/vendor/golang.org/x/net/html/foreign.go +++ b/vendor/golang.org/x/net/html/foreign.go @@ -67,7 +67,7 @@ func mathMLTextIntegrationPoint(n *Node) bool { return false } -// Section 12.2.5.5. +// Section 12.2.6.5. var breakout = map[string]bool{ "b": true, "big": true, @@ -115,7 +115,7 @@ var breakout = map[string]bool{ "var": true, } -// Section 12.2.5.5. +// Section 12.2.6.5. var svgTagNameAdjustments = map[string]string{ "altglyph": "altGlyph", "altglyphdef": "altGlyphDef", @@ -155,7 +155,7 @@ var svgTagNameAdjustments = map[string]string{ "textpath": "textPath", } -// Section 12.2.5.1 +// Section 12.2.6.1 var mathMLAttributeAdjustments = map[string]string{ "definitionurl": "definitionURL", } diff --git a/vendor/golang.org/x/net/html/node.go b/vendor/golang.org/x/net/html/node.go index 26b657a..6f136c4 100644 --- a/vendor/golang.org/x/net/html/node.go +++ b/vendor/golang.org/x/net/html/node.go @@ -21,9 +21,10 @@ const ( scopeMarkerNode ) -// Section 12.2.3.3 says "scope markers are inserted when entering applet -// elements, buttons, object elements, marquees, table cells, and table -// captions, and are used to prevent formatting from 'leaking'". +// Section 12.2.4.3 says "The markers are inserted when entering applet, +// object, marquee, template, td, th, and caption elements, and are used +// to prevent formatting from "leaking" into applet, object, marquee, +// template, td, th, and caption elements". var scopeMarker = Node{Type: scopeMarkerNode} // A Node consists of a NodeType and some Data (tag name for element nodes, diff --git a/vendor/golang.org/x/net/html/parse.go b/vendor/golang.org/x/net/html/parse.go index be4b2bf..2a5abdd 100644 --- a/vendor/golang.org/x/net/html/parse.go +++ b/vendor/golang.org/x/net/html/parse.go @@ -25,12 +25,12 @@ type parser struct { hasSelfClosingToken bool // doc is the document root element. doc *Node - // The stack of open elements (section 12.2.3.2) and active formatting - // elements (section 12.2.3.3). + // The stack of open elements (section 12.2.4.2) and active formatting + // elements (section 12.2.4.3). oe, afe nodeStack - // Element pointers (section 12.2.3.4). + // Element pointers (section 12.2.4.4). head, form *Node - // Other parsing state flags (section 12.2.3.5). + // Other parsing state flags (section 12.2.4.5). scripting, framesetOK bool // im is the current insertion mode. im insertionMode @@ -38,7 +38,7 @@ type parser struct { // or inTableText insertion mode. originalIM insertionMode // fosterParenting is whether new elements should be inserted according to - // the foster parenting rules (section 12.2.5.3). + // the foster parenting rules (section 12.2.6.1). fosterParenting bool // quirks is whether the parser is operating in "quirks mode." quirks bool @@ -56,7 +56,7 @@ func (p *parser) top() *Node { return p.doc } -// Stop tags for use in popUntil. These come from section 12.2.3.2. +// Stop tags for use in popUntil. These come from section 12.2.4.2. var ( defaultScopeStopTags = map[string][]a.Atom{ "": {a.Applet, a.Caption, a.Html, a.Table, a.Td, a.Th, a.Marquee, a.Object, a.Template}, @@ -79,7 +79,7 @@ const ( // popUntil pops the stack of open elements at the highest element whose tag // is in matchTags, provided there is no higher element in the scope's stop -// tags (as defined in section 12.2.3.2). It returns whether or not there was +// tags (as defined in section 12.2.4.2). It returns whether or not there was // such an element. If there was not, popUntil leaves the stack unchanged. // // For example, the set of stop tags for table scope is: "html", "table". If @@ -234,7 +234,7 @@ func (p *parser) shouldFosterParent() bool { } // fosterParent adds a child node according to the foster parenting rules. -// Section 12.2.5.3, "foster parenting". +// Section 12.2.6.1, "foster parenting". func (p *parser) fosterParent(n *Node) { var table, parent, prev *Node var i int @@ -304,7 +304,7 @@ func (p *parser) addElement() { }) } -// Section 12.2.3.3. +// Section 12.2.4.3. func (p *parser) addFormattingElement() { tagAtom, attr := p.tok.DataAtom, p.tok.Attr p.addElement() @@ -351,7 +351,7 @@ findIdenticalElements: p.afe = append(p.afe, p.top()) } -// Section 12.2.3.3. +// Section 12.2.4.3. func (p *parser) clearActiveFormattingElements() { for { n := p.afe.pop() @@ -361,7 +361,7 @@ func (p *parser) clearActiveFormattingElements() { } } -// Section 12.2.3.3. +// Section 12.2.4.3. func (p *parser) reconstructActiveFormattingElements() { n := p.afe.top() if n == nil { @@ -390,12 +390,12 @@ func (p *parser) reconstructActiveFormattingElements() { } } -// Section 12.2.4. +// Section 12.2.5. func (p *parser) acknowledgeSelfClosingTag() { p.hasSelfClosingToken = false } -// An insertion mode (section 12.2.3.1) is the state transition function from +// An insertion mode (section 12.2.4.1) is the state transition function from // a particular state in the HTML5 parser's state machine. It updates the // parser's fields depending on parser.tok (where ErrorToken means EOF). // It returns whether the token was consumed. @@ -403,7 +403,7 @@ type insertionMode func(*parser) bool // setOriginalIM sets the insertion mode to return to after completing a text or // inTableText insertion mode. -// Section 12.2.3.1, "using the rules for". +// Section 12.2.4.1, "using the rules for". func (p *parser) setOriginalIM() { if p.originalIM != nil { panic("html: bad parser state: originalIM was set twice") @@ -411,7 +411,7 @@ func (p *parser) setOriginalIM() { p.originalIM = p.im } -// Section 12.2.3.1, "reset the insertion mode". +// Section 12.2.4.1, "reset the insertion mode". func (p *parser) resetInsertionMode() { for i := len(p.oe) - 1; i >= 0; i-- { n := p.oe[i] @@ -452,7 +452,7 @@ func (p *parser) resetInsertionMode() { const whitespace = " \t\r\n\f" -// Section 12.2.5.4.1. +// Section 12.2.6.4.1. func initialIM(p *parser) bool { switch p.tok.Type { case TextToken: @@ -479,7 +479,7 @@ func initialIM(p *parser) bool { return false } -// Section 12.2.5.4.2. +// Section 12.2.6.4.2. func beforeHTMLIM(p *parser) bool { switch p.tok.Type { case DoctypeToken: @@ -517,7 +517,7 @@ func beforeHTMLIM(p *parser) bool { return false } -// Section 12.2.5.4.3. +// Section 12.2.6.4.3. func beforeHeadIM(p *parser) bool { switch p.tok.Type { case TextToken: @@ -560,7 +560,7 @@ func beforeHeadIM(p *parser) bool { return false } -// Section 12.2.5.4.4. +// Section 12.2.6.4.4. func inHeadIM(p *parser) bool { switch p.tok.Type { case TextToken: @@ -622,7 +622,7 @@ func inHeadIM(p *parser) bool { return false } -// Section 12.2.5.4.6. +// Section 12.2.6.4.6. func afterHeadIM(p *parser) bool { switch p.tok.Type { case TextToken: @@ -697,7 +697,7 @@ func copyAttributes(dst *Node, src Token) { } } -// Section 12.2.5.4.7. +// Section 12.2.6.4.7. func inBodyIM(p *parser) bool { switch p.tok.Type { case TextToken: @@ -1160,7 +1160,7 @@ func (p *parser) inBodyEndTagFormatting(tagAtom a.Atom) { } // inBodyEndTagOther performs the "any other end tag" algorithm for inBodyIM. -// "Any other end tag" handling from 12.2.5.5 The rules for parsing tokens in foreign content +// "Any other end tag" handling from 12.2.6.5 The rules for parsing tokens in foreign content // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inforeign func (p *parser) inBodyEndTagOther(tagAtom a.Atom) { for i := len(p.oe) - 1; i >= 0; i-- { @@ -1174,7 +1174,7 @@ func (p *parser) inBodyEndTagOther(tagAtom a.Atom) { } } -// Section 12.2.5.4.8. +// Section 12.2.6.4.8. func textIM(p *parser) bool { switch p.tok.Type { case ErrorToken: @@ -1203,7 +1203,7 @@ func textIM(p *parser) bool { return p.tok.Type == EndTagToken } -// Section 12.2.5.4.9. +// Section 12.2.6.4.9. func inTableIM(p *parser) bool { switch p.tok.Type { case ErrorToken: @@ -1309,7 +1309,7 @@ func inTableIM(p *parser) bool { return inBodyIM(p) } -// Section 12.2.5.4.11. +// Section 12.2.6.4.11. func inCaptionIM(p *parser) bool { switch p.tok.Type { case StartTagToken: @@ -1355,7 +1355,7 @@ func inCaptionIM(p *parser) bool { return inBodyIM(p) } -// Section 12.2.5.4.12. +// Section 12.2.6.4.12. func inColumnGroupIM(p *parser) bool { switch p.tok.Type { case TextToken: @@ -1408,7 +1408,7 @@ func inColumnGroupIM(p *parser) bool { return true } -// Section 12.2.5.4.13. +// Section 12.2.6.4.13. func inTableBodyIM(p *parser) bool { switch p.tok.Type { case StartTagToken: @@ -1460,7 +1460,7 @@ func inTableBodyIM(p *parser) bool { return inTableIM(p) } -// Section 12.2.5.4.14. +// Section 12.2.6.4.14. func inRowIM(p *parser) bool { switch p.tok.Type { case StartTagToken: @@ -1511,7 +1511,7 @@ func inRowIM(p *parser) bool { return inTableIM(p) } -// Section 12.2.5.4.15. +// Section 12.2.6.4.15. func inCellIM(p *parser) bool { switch p.tok.Type { case StartTagToken: @@ -1560,7 +1560,7 @@ func inCellIM(p *parser) bool { return inBodyIM(p) } -// Section 12.2.5.4.16. +// Section 12.2.6.4.16. func inSelectIM(p *parser) bool { switch p.tok.Type { case ErrorToken: @@ -1632,7 +1632,7 @@ func inSelectIM(p *parser) bool { return true } -// Section 12.2.5.4.17. +// Section 12.2.6.4.17. func inSelectInTableIM(p *parser) bool { switch p.tok.Type { case StartTagToken, EndTagToken: @@ -1650,7 +1650,7 @@ func inSelectInTableIM(p *parser) bool { return inSelectIM(p) } -// Section 12.2.5.4.18. +// Section 12.2.6.4.19. func afterBodyIM(p *parser) bool { switch p.tok.Type { case ErrorToken: @@ -1688,7 +1688,7 @@ func afterBodyIM(p *parser) bool { return false } -// Section 12.2.5.4.19. +// Section 12.2.6.4.20. func inFramesetIM(p *parser) bool { switch p.tok.Type { case CommentToken: @@ -1738,7 +1738,7 @@ func inFramesetIM(p *parser) bool { return true } -// Section 12.2.5.4.20. +// Section 12.2.6.4.21. func afterFramesetIM(p *parser) bool { switch p.tok.Type { case CommentToken: @@ -1777,7 +1777,7 @@ func afterFramesetIM(p *parser) bool { return true } -// Section 12.2.5.4.21. +// Section 12.2.6.4.22. func afterAfterBodyIM(p *parser) bool { switch p.tok.Type { case ErrorToken: @@ -1806,7 +1806,7 @@ func afterAfterBodyIM(p *parser) bool { return false } -// Section 12.2.5.4.22. +// Section 12.2.6.4.23. func afterAfterFramesetIM(p *parser) bool { switch p.tok.Type { case CommentToken: @@ -1844,7 +1844,7 @@ func afterAfterFramesetIM(p *parser) bool { const whitespaceOrNUL = whitespace + "\x00" -// Section 12.2.5.5. +// Section 12.2.6.5 func parseForeignContent(p *parser) bool { switch p.tok.Type { case TextToken: @@ -1924,7 +1924,7 @@ func parseForeignContent(p *parser) bool { return true } -// Section 12.2.5. +// Section 12.2.6. func (p *parser) inForeignContent() bool { if len(p.oe) == 0 { return false diff --git a/vendor/golang.org/x/net/html/token.go b/vendor/golang.org/x/net/html/token.go index 893e272..e3c01d7 100644 --- a/vendor/golang.org/x/net/html/token.go +++ b/vendor/golang.org/x/net/html/token.go @@ -1161,8 +1161,8 @@ func (z *Tokenizer) TagAttr() (key, val []byte, moreAttr bool) { return nil, nil, false } -// Token returns the next Token. The result's Data and Attr values remain valid -// after subsequent Next calls. +// Token returns the current Token. The result's Data and Attr values remain +// valid after subsequent Next calls. func (z *Tokenizer) Token() Token { t := Token{Type: z.tt} switch z.tt { diff --git a/vendor/golang.org/x/net/http/httpproxy/export_test.go b/vendor/golang.org/x/net/http/httpproxy/export_test.go new file mode 100644 index 0000000..36b29d2 --- /dev/null +++ b/vendor/golang.org/x/net/http/httpproxy/export_test.go @@ -0,0 +1,7 @@ +// Copyright 2017 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. + +package httpproxy + +var ExportUseProxy = (*Config).useProxy diff --git a/vendor/golang.org/x/net/http/httpproxy/go19_test.go b/vendor/golang.org/x/net/http/httpproxy/go19_test.go new file mode 100644 index 0000000..2117ca5 --- /dev/null +++ b/vendor/golang.org/x/net/http/httpproxy/go19_test.go @@ -0,0 +1,13 @@ +// Copyright 2017 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 go1.9 + +package httpproxy_test + +import "testing" + +func init() { + setHelper = func(t *testing.T) { t.Helper() } +} diff --git a/vendor/golang.org/x/net/http/httpproxy/proxy.go b/vendor/golang.org/x/net/http/httpproxy/proxy.go new file mode 100644 index 0000000..cbe1d2a --- /dev/null +++ b/vendor/golang.org/x/net/http/httpproxy/proxy.go @@ -0,0 +1,239 @@ +// Copyright 2017 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. + +// Package httpproxy provides support for HTTP proxy determination +// based on environment variables, as provided by net/http's +// ProxyFromEnvironment function. +// +// The API is not subject to the Go 1 compatibility promise and may change at +// any time. +package httpproxy + +import ( + "errors" + "fmt" + "net" + "net/url" + "os" + "strings" + "unicode/utf8" + + "golang.org/x/net/idna" +) + +// Config holds configuration for HTTP proxy settings. See +// FromEnvironment for details. +type Config struct { + // HTTPProxy represents the value of the HTTP_PROXY or + // http_proxy environment variable. It will be used as the proxy + // URL for HTTP requests and HTTPS requests unless overridden by + // HTTPSProxy or NoProxy. + HTTPProxy string + + // HTTPSProxy represents the HTTPS_PROXY or https_proxy + // environment variable. It will be used as the proxy URL for + // HTTPS requests unless overridden by NoProxy. + HTTPSProxy string + + // NoProxy represents the NO_PROXY or no_proxy environment + // variable. It specifies URLs that should be excluded from + // proxying as a comma-separated list of domain names or a + // single asterisk (*) to indicate that no proxying should be + // done. A domain name matches that name and all subdomains. A + // domain name with a leading "." matches subdomains only. For + // example "foo.com" matches "foo.com" and "bar.foo.com"; + // ".y.com" matches "x.y.com" but not "y.com". + NoProxy string + + // CGI holds whether the current process is running + // as a CGI handler (FromEnvironment infers this from the + // presence of a REQUEST_METHOD environment variable). + // When this is set, ProxyForURL will return an error + // when HTTPProxy applies, because a client could be + // setting HTTP_PROXY maliciously. See https://golang.org/s/cgihttpproxy. + CGI bool +} + +// FromEnvironment returns a Config instance populated from the +// environment variables HTTP_PROXY, HTTPS_PROXY and NO_PROXY (or the +// lowercase versions thereof). HTTPS_PROXY takes precedence over +// HTTP_PROXY for https requests. +// +// The environment values may be either a complete URL or a +// "host[:port]", in which case the "http" scheme is assumed. An error +// is returned if the value is a different form. +func FromEnvironment() *Config { + return &Config{ + HTTPProxy: getEnvAny("HTTP_PROXY", "http_proxy"), + HTTPSProxy: getEnvAny("HTTPS_PROXY", "https_proxy"), + NoProxy: getEnvAny("NO_PROXY", "no_proxy"), + CGI: os.Getenv("REQUEST_METHOD") != "", + } +} + +func getEnvAny(names ...string) string { + for _, n := range names { + if val := os.Getenv(n); val != "" { + return val + } + } + return "" +} + +// ProxyFunc returns a function that determines the proxy URL to use for +// a given request URL. Changing the contents of cfg will not affect +// proxy functions created earlier. +// +// A nil URL and nil error are returned if no proxy is defined in the +// environment, or a proxy should not be used for the given request, as +// defined by NO_PROXY. +// +// As a special case, if req.URL.Host is "localhost" (with or without a +// port number), then a nil URL and nil error will be returned. +func (cfg *Config) ProxyFunc() func(reqURL *url.URL) (*url.URL, error) { + // Prevent Config changes from affecting the function calculation. + // TODO Preprocess proxy settings for more efficient evaluation. + cfg1 := *cfg + return cfg1.proxyForURL +} + +func (cfg *Config) proxyForURL(reqURL *url.URL) (*url.URL, error) { + var proxy string + if reqURL.Scheme == "https" { + proxy = cfg.HTTPSProxy + } + if proxy == "" { + proxy = cfg.HTTPProxy + if proxy != "" && cfg.CGI { + return nil, errors.New("refusing to use HTTP_PROXY value in CGI environment; see golang.org/s/cgihttpproxy") + } + } + if proxy == "" { + return nil, nil + } + if !cfg.useProxy(canonicalAddr(reqURL)) { + return nil, nil + } + proxyURL, err := url.Parse(proxy) + if err != nil || + (proxyURL.Scheme != "http" && + proxyURL.Scheme != "https" && + proxyURL.Scheme != "socks5") { + // proxy was bogus. Try prepending "http://" to it and + // see if that parses correctly. If not, we fall + // through and complain about the original one. + if proxyURL, err := url.Parse("http://" + proxy); err == nil { + return proxyURL, nil + } + } + if err != nil { + return nil, fmt.Errorf("invalid proxy address %q: %v", proxy, err) + } + return proxyURL, nil +} + +// useProxy reports whether requests to addr should use a proxy, +// according to the NO_PROXY or no_proxy environment variable. +// addr is always a canonicalAddr with a host and port. +func (cfg *Config) useProxy(addr string) bool { + if len(addr) == 0 { + return true + } + host, _, err := net.SplitHostPort(addr) + if err != nil { + return false + } + if host == "localhost" { + return false + } + if ip := net.ParseIP(host); ip != nil { + if ip.IsLoopback() { + return false + } + } + + noProxy := cfg.NoProxy + if noProxy == "*" { + return false + } + + addr = strings.ToLower(strings.TrimSpace(addr)) + if hasPort(addr) { + addr = addr[:strings.LastIndex(addr, ":")] + } + + for _, p := range strings.Split(noProxy, ",") { + p = strings.ToLower(strings.TrimSpace(p)) + if len(p) == 0 { + continue + } + if hasPort(p) { + p = p[:strings.LastIndex(p, ":")] + } + if addr == p { + return false + } + if len(p) == 0 { + // There is no host part, likely the entry is malformed; ignore. + continue + } + if p[0] == '.' && (strings.HasSuffix(addr, p) || addr == p[1:]) { + // no_proxy ".foo.com" matches "bar.foo.com" or "foo.com" + return false + } + if p[0] != '.' && strings.HasSuffix(addr, p) && addr[len(addr)-len(p)-1] == '.' { + // no_proxy "foo.com" matches "bar.foo.com" + return false + } + } + return true +} + +var portMap = map[string]string{ + "http": "80", + "https": "443", + "socks5": "1080", +} + +// canonicalAddr returns url.Host but always with a ":port" suffix +func canonicalAddr(url *url.URL) string { + addr := url.Hostname() + if v, err := idnaASCII(addr); err == nil { + addr = v + } + port := url.Port() + if port == "" { + port = portMap[url.Scheme] + } + return net.JoinHostPort(addr, port) +} + +// Given a string of the form "host", "host:port", or "[ipv6::address]:port", +// return true if the string includes a port. +func hasPort(s string) bool { return strings.LastIndex(s, ":") > strings.LastIndex(s, "]") } + +func idnaASCII(v string) (string, error) { + // TODO: Consider removing this check after verifying performance is okay. + // Right now punycode verification, length checks, context checks, and the + // permissible character tests are all omitted. It also prevents the ToASCII + // call from salvaging an invalid IDN, when possible. As a result it may be + // possible to have two IDNs that appear identical to the user where the + // ASCII-only version causes an error downstream whereas the non-ASCII + // version does not. + // Note that for correct ASCII IDNs ToASCII will only do considerably more + // work, but it will not cause an allocation. + if isASCII(v) { + return v, nil + } + return idna.Lookup.ToASCII(v) +} + +func isASCII(s string) bool { + for i := 0; i < len(s); i++ { + if s[i] >= utf8.RuneSelf { + return false + } + } + return true +} diff --git a/vendor/golang.org/x/net/http/httpproxy/proxy_test.go b/vendor/golang.org/x/net/http/httpproxy/proxy_test.go new file mode 100644 index 0000000..e4af199 --- /dev/null +++ b/vendor/golang.org/x/net/http/httpproxy/proxy_test.go @@ -0,0 +1,301 @@ +// Copyright 2017 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. + +package httpproxy_test + +import ( + "bytes" + "errors" + "fmt" + "net/url" + "os" + "strings" + "testing" + + "golang.org/x/net/http/httpproxy" +) + +// setHelper calls t.Helper() for Go 1.9+ (see go19_test.go) and does nothing otherwise. +var setHelper = func(t *testing.T) {} + +type proxyForURLTest struct { + cfg httpproxy.Config + req string // URL to fetch; blank means "http://example.com" + want string + wanterr error +} + +func (t proxyForURLTest) String() string { + var buf bytes.Buffer + space := func() { + if buf.Len() > 0 { + buf.WriteByte(' ') + } + } + if t.cfg.HTTPProxy != "" { + fmt.Fprintf(&buf, "http_proxy=%q", t.cfg.HTTPProxy) + } + if t.cfg.HTTPSProxy != "" { + space() + fmt.Fprintf(&buf, "https_proxy=%q", t.cfg.HTTPSProxy) + } + if t.cfg.NoProxy != "" { + space() + fmt.Fprintf(&buf, "no_proxy=%q", t.cfg.NoProxy) + } + req := "http://example.com" + if t.req != "" { + req = t.req + } + space() + fmt.Fprintf(&buf, "req=%q", req) + return strings.TrimSpace(buf.String()) +} + +var proxyForURLTests = []proxyForURLTest{{ + cfg: httpproxy.Config{ + HTTPProxy: "127.0.0.1:8080", + }, + want: "http://127.0.0.1:8080", +}, { + cfg: httpproxy.Config{ + HTTPProxy: "cache.corp.example.com:1234", + }, + want: "http://cache.corp.example.com:1234", +}, { + cfg: httpproxy.Config{ + HTTPProxy: "cache.corp.example.com", + }, + want: "http://cache.corp.example.com", +}, { + cfg: httpproxy.Config{ + HTTPProxy: "https://cache.corp.example.com", + }, + want: "https://cache.corp.example.com", +}, { + cfg: httpproxy.Config{ + HTTPProxy: "http://127.0.0.1:8080", + }, + want: "http://127.0.0.1:8080", +}, { + cfg: httpproxy.Config{ + HTTPProxy: "https://127.0.0.1:8080", + }, + want: "https://127.0.0.1:8080", +}, { + cfg: httpproxy.Config{ + HTTPProxy: "socks5://127.0.0.1", + }, + want: "socks5://127.0.0.1", +}, { + // Don't use secure for http + cfg: httpproxy.Config{ + HTTPProxy: "http.proxy.tld", + HTTPSProxy: "secure.proxy.tld", + }, + req: "http://insecure.tld/", + want: "http://http.proxy.tld", +}, { + // Use secure for https. + cfg: httpproxy.Config{ + HTTPProxy: "http.proxy.tld", + HTTPSProxy: "secure.proxy.tld", + }, + req: "https://secure.tld/", + want: "http://secure.proxy.tld", +}, { + cfg: httpproxy.Config{ + HTTPProxy: "http.proxy.tld", + HTTPSProxy: "https://secure.proxy.tld", + }, + req: "https://secure.tld/", + want: "https://secure.proxy.tld", +}, { + // Issue 16405: don't use HTTP_PROXY in a CGI environment, + // where HTTP_PROXY can be attacker-controlled. + cfg: httpproxy.Config{ + HTTPProxy: "http://10.1.2.3:8080", + CGI: true, + }, + want: "", + wanterr: errors.New("refusing to use HTTP_PROXY value in CGI environment; see golang.org/s/cgihttpproxy"), +}, { + // HTTPS proxy is still used even in CGI environment. + // (perhaps dubious but it's the historical behaviour). + cfg: httpproxy.Config{ + HTTPSProxy: "https://secure.proxy.tld", + CGI: true, + }, + req: "https://secure.tld/", + want: "https://secure.proxy.tld", +}, { + want: "", +}, { + cfg: httpproxy.Config{ + NoProxy: "example.com", + HTTPProxy: "proxy", + }, + req: "http://example.com/", + want: "", +}, { + cfg: httpproxy.Config{ + NoProxy: ".example.com", + HTTPProxy: "proxy", + }, + req: "http://example.com/", + want: "", +}, { + cfg: httpproxy.Config{ + NoProxy: "ample.com", + HTTPProxy: "proxy", + }, + req: "http://example.com/", + want: "http://proxy", +}, { + cfg: httpproxy.Config{ + NoProxy: "example.com", + HTTPProxy: "proxy", + }, + req: "http://foo.example.com/", + want: "", +}, { + cfg: httpproxy.Config{ + NoProxy: ".foo.com", + HTTPProxy: "proxy", + }, + req: "http://example.com/", + want: "http://proxy", +}} + +func testProxyForURL(t *testing.T, tt proxyForURLTest) { + setHelper(t) + reqURLStr := tt.req + if reqURLStr == "" { + reqURLStr = "http://example.com" + } + reqURL, err := url.Parse(reqURLStr) + if err != nil { + t.Errorf("invalid URL %q", reqURLStr) + return + } + cfg := tt.cfg + proxyForURL := cfg.ProxyFunc() + url, err := proxyForURL(reqURL) + if g, e := fmt.Sprintf("%v", err), fmt.Sprintf("%v", tt.wanterr); g != e { + t.Errorf("%v: got error = %q, want %q", tt, g, e) + return + } + if got := fmt.Sprintf("%s", url); got != tt.want { + t.Errorf("%v: got URL = %q, want %q", tt, url, tt.want) + } + + // Check that changing the Config doesn't change the results + // of the functuon. + cfg = httpproxy.Config{} + url, err = proxyForURL(reqURL) + if g, e := fmt.Sprintf("%v", err), fmt.Sprintf("%v", tt.wanterr); g != e { + t.Errorf("(after mutating config) %v: got error = %q, want %q", tt, g, e) + return + } + if got := fmt.Sprintf("%s", url); got != tt.want { + t.Errorf("(after mutating config) %v: got URL = %q, want %q", tt, url, tt.want) + } +} + +func TestProxyForURL(t *testing.T) { + for _, tt := range proxyForURLTests { + testProxyForURL(t, tt) + } +} + +func TestFromEnvironment(t *testing.T) { + os.Setenv("HTTP_PROXY", "httpproxy") + os.Setenv("HTTPS_PROXY", "httpsproxy") + os.Setenv("NO_PROXY", "noproxy") + os.Setenv("REQUEST_METHOD", "") + got := httpproxy.FromEnvironment() + want := httpproxy.Config{ + HTTPProxy: "httpproxy", + HTTPSProxy: "httpsproxy", + NoProxy: "noproxy", + } + if *got != want { + t.Errorf("unexpected proxy config, got %#v want %#v", got, want) + } +} + +func TestFromEnvironmentWithRequestMethod(t *testing.T) { + os.Setenv("HTTP_PROXY", "httpproxy") + os.Setenv("HTTPS_PROXY", "httpsproxy") + os.Setenv("NO_PROXY", "noproxy") + os.Setenv("REQUEST_METHOD", "PUT") + got := httpproxy.FromEnvironment() + want := httpproxy.Config{ + HTTPProxy: "httpproxy", + HTTPSProxy: "httpsproxy", + NoProxy: "noproxy", + CGI: true, + } + if *got != want { + t.Errorf("unexpected proxy config, got %#v want %#v", got, want) + } +} + +func TestFromEnvironmentLowerCase(t *testing.T) { + os.Setenv("http_proxy", "httpproxy") + os.Setenv("https_proxy", "httpsproxy") + os.Setenv("no_proxy", "noproxy") + os.Setenv("REQUEST_METHOD", "") + got := httpproxy.FromEnvironment() + want := httpproxy.Config{ + HTTPProxy: "httpproxy", + HTTPSProxy: "httpsproxy", + NoProxy: "noproxy", + } + if *got != want { + t.Errorf("unexpected proxy config, got %#v want %#v", got, want) + } +} + +var UseProxyTests = []struct { + host string + match bool +}{ + // Never proxy localhost: + {"localhost", false}, + {"127.0.0.1", false}, + {"127.0.0.2", false}, + {"[::1]", false}, + {"[::2]", true}, // not a loopback address + + {"barbaz.net", false}, // match as .barbaz.net + {"foobar.com", false}, // have a port but match + {"foofoobar.com", true}, // not match as a part of foobar.com + {"baz.com", true}, // not match as a part of barbaz.com + {"localhost.net", true}, // not match as suffix of address + {"local.localhost", true}, // not match as prefix as address + {"barbarbaz.net", true}, // not match because NO_PROXY have a '.' + {"www.foobar.com", false}, // match because NO_PROXY includes "foobar.com" +} + +func TestUseProxy(t *testing.T) { + cfg := &httpproxy.Config{ + NoProxy: "foobar.com, .barbaz.net", + } + for _, test := range UseProxyTests { + if httpproxy.ExportUseProxy(cfg, test.host+":80") != test.match { + t.Errorf("useProxy(%v) = %v, want %v", test.host, !test.match, test.match) + } + } +} + +func TestInvalidNoProxy(t *testing.T) { + cfg := &httpproxy.Config{ + NoProxy: ":1", + } + ok := httpproxy.ExportUseProxy(cfg, "example.com:80") // should not panic + if !ok { + t.Errorf("useProxy unexpected return; got false; want true") + } +} diff --git a/vendor/golang.org/x/net/http2/ciphers.go b/vendor/golang.org/x/net/http2/ciphers.go index 698860b..c9a0cf3 100644 --- a/vendor/golang.org/x/net/http2/ciphers.go +++ b/vendor/golang.org/x/net/http2/ciphers.go @@ -5,7 +5,7 @@ package http2 // A list of the possible cipher suite ids. Taken from -// http://www.iana.org/assignments/tls-parameters/tls-parameters.txt +// https://www.iana.org/assignments/tls-parameters/tls-parameters.txt const ( cipher_TLS_NULL_WITH_NULL_NULL uint16 = 0x0000 diff --git a/vendor/golang.org/x/net/http2/ciphers_test.go b/vendor/golang.org/x/net/http2/ciphers_test.go index 25aead0..764bbc8 100644 --- a/vendor/golang.org/x/net/http2/ciphers_test.go +++ b/vendor/golang.org/x/net/http2/ciphers_test.go @@ -9,7 +9,7 @@ import "testing" func TestIsBadCipherBad(t *testing.T) { for _, c := range badCiphers { if !isBadCipher(c) { - t.Errorf("Wrong result for isBadCipher(%d), want true") + t.Errorf("Wrong result for isBadCipher(%d), want true", c) } } } diff --git a/vendor/golang.org/x/net/http2/configure_transport.go b/vendor/golang.org/x/net/http2/configure_transport.go index 4f720f5..088d6e2 100644 --- a/vendor/golang.org/x/net/http2/configure_transport.go +++ b/vendor/golang.org/x/net/http2/configure_transport.go @@ -56,7 +56,7 @@ func configureTransport(t1 *http.Transport) (*Transport, error) { } // registerHTTPSProtocol calls Transport.RegisterProtocol but -// convering panics into errors. +// converting panics into errors. func registerHTTPSProtocol(t *http.Transport, rt http.RoundTripper) (err error) { defer func() { if e := recover(); e != nil { @@ -73,7 +73,7 @@ type noDialH2RoundTripper struct{ t *Transport } func (rt noDialH2RoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { res, err := rt.t.RoundTrip(req) - if err == ErrNoCachedConn { + if isNoCachedConnError(err) { return nil, http.ErrSkipAltProtocol } return res, err diff --git a/vendor/golang.org/x/net/http2/errors.go b/vendor/golang.org/x/net/http2/errors.go index 20fd762..71f2c46 100644 --- a/vendor/golang.org/x/net/http2/errors.go +++ b/vendor/golang.org/x/net/http2/errors.go @@ -87,13 +87,16 @@ type goAwayFlowError struct{} func (goAwayFlowError) Error() string { return "connection exceeded flow control window size" } -// connErrorReason wraps a ConnectionError with an informative error about why it occurs. - +// connError represents an HTTP/2 ConnectionError error code, along +// with a string (for debugging) explaining why. +// // Errors of this type are only returned by the frame parser functions -// and converted into ConnectionError(ErrCodeProtocol). +// and converted into ConnectionError(Code), after stashing away +// the Reason into the Framer's errDetail field, accessible via +// the (*Framer).ErrorDetail method. type connError struct { - Code ErrCode - Reason string + Code ErrCode // the ConnectionError error code + Reason string // additional reason } func (e connError) Error() string { diff --git a/vendor/golang.org/x/net/http2/go18.go b/vendor/golang.org/x/net/http2/go18.go index 73cc238..4f30d22 100644 --- a/vendor/golang.org/x/net/http2/go18.go +++ b/vendor/golang.org/x/net/http2/go18.go @@ -52,3 +52,5 @@ func reqGetBody(req *http.Request) func() (io.ReadCloser, error) { func reqBodyIsNoBody(body io.ReadCloser) bool { return body == http.NoBody } + +func go18httpNoBody() io.ReadCloser { return http.NoBody } // for tests only diff --git a/vendor/golang.org/x/net/http2/go19_test.go b/vendor/golang.org/x/net/http2/go19_test.go index 1675d24..22b0006 100644 --- a/vendor/golang.org/x/net/http2/go19_test.go +++ b/vendor/golang.org/x/net/http2/go19_test.go @@ -46,7 +46,6 @@ func TestServerGracefulShutdown(t *testing.T) { wanth := [][2]string{ {":status", "200"}, {"x-foo", "bar"}, - {"content-type", "text/plain; charset=utf-8"}, {"content-length", "0"}, } if !reflect.DeepEqual(goth, wanth) { diff --git a/vendor/golang.org/x/net/http2/h2demo/.gitignore b/vendor/golang.org/x/net/http2/h2demo/.gitignore index 0de86dd..8a1133f 100644 --- a/vendor/golang.org/x/net/http2/h2demo/.gitignore +++ b/vendor/golang.org/x/net/http2/h2demo/.gitignore @@ -3,3 +3,4 @@ h2demo.linux client-id.dat client-secret.dat token.dat +ca-certificates.crt diff --git a/vendor/golang.org/x/net/http2/h2demo/Dockerfile b/vendor/golang.org/x/net/http2/h2demo/Dockerfile new file mode 100644 index 0000000..9238673 --- /dev/null +++ b/vendor/golang.org/x/net/http2/h2demo/Dockerfile @@ -0,0 +1,11 @@ +# Copyright 2018 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. + +FROM scratch +LABEL maintainer "golang-dev@googlegroups.com" + +COPY ca-certificates.crt /etc/ssl/certs/ +COPY h2demo / +ENTRYPOINT ["/h2demo", "-prod"] + diff --git a/vendor/golang.org/x/net/http2/h2demo/Dockerfile.0 b/vendor/golang.org/x/net/http2/h2demo/Dockerfile.0 new file mode 100644 index 0000000..fd8435d --- /dev/null +++ b/vendor/golang.org/x/net/http2/h2demo/Dockerfile.0 @@ -0,0 +1,134 @@ +# Copyright 2018 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. + +FROM golang:1.9 +LABEL maintainer "golang-dev@googlegroups.com" + +ENV CGO_ENABLED=0 + +# BEGIN deps (run `make update-deps` to update) + +# Repo cloud.google.com/go at 1d0c2da (2018-01-30) +ENV REV=1d0c2da40456a9b47f5376165f275424acc15c09 +RUN go get -d cloud.google.com/go/compute/metadata `#and 6 other pkgs` &&\ + (cd /go/src/cloud.google.com/go && (git cat-file -t $REV 2>/dev/null || git fetch -q origin $REV) && git reset --hard $REV) + +# Repo github.com/golang/protobuf at 9255415 (2018-01-25) +ENV REV=925541529c1fa6821df4e44ce2723319eb2be768 +RUN go get -d github.com/golang/protobuf/proto `#and 6 other pkgs` &&\ + (cd /go/src/github.com/golang/protobuf && (git cat-file -t $REV 2>/dev/null || git fetch -q origin $REV) && git reset --hard $REV) + +# Repo github.com/googleapis/gax-go at 317e000 (2017-09-15) +ENV REV=317e0006254c44a0ac427cc52a0e083ff0b9622f +RUN go get -d github.com/googleapis/gax-go &&\ + (cd /go/src/github.com/googleapis/gax-go && (git cat-file -t $REV 2>/dev/null || git fetch -q origin $REV) && git reset --hard $REV) + +# Repo go4.org at 034d17a (2017-05-25) +ENV REV=034d17a462f7b2dcd1a4a73553ec5357ff6e6c6e +RUN go get -d go4.org/syncutil/singleflight &&\ + (cd /go/src/go4.org && (git cat-file -t $REV 2>/dev/null || git fetch -q origin $REV) && git reset --hard $REV) + +# Repo golang.org/x/build at 8aa9ee0 (2018-02-01) +ENV REV=8aa9ee0e557fd49c14113e5ba106e13a5b455460 +RUN go get -d golang.org/x/build/autocertcache &&\ + (cd /go/src/golang.org/x/build && (git cat-file -t $REV 2>/dev/null || git fetch -q origin $REV) && git reset --hard $REV) + +# Repo golang.org/x/crypto at 1875d0a (2018-01-27) +ENV REV=1875d0a70c90e57f11972aefd42276df65e895b9 +RUN go get -d golang.org/x/crypto/acme `#and 2 other pkgs` &&\ + (cd /go/src/golang.org/x/crypto && (git cat-file -t $REV 2>/dev/null || git fetch -q origin $REV) && git reset --hard $REV) + +# Repo golang.org/x/oauth2 at 30785a2 (2018-01-04) +ENV REV=30785a2c434e431ef7c507b54617d6a951d5f2b4 +RUN go get -d golang.org/x/oauth2 `#and 5 other pkgs` &&\ + (cd /go/src/golang.org/x/oauth2 && (git cat-file -t $REV 2>/dev/null || git fetch -q origin $REV) && git reset --hard $REV) + +# Repo golang.org/x/text at e19ae14 (2017-12-27) +ENV REV=e19ae1496984b1c655b8044a65c0300a3c878dd3 +RUN go get -d golang.org/x/text/secure/bidirule `#and 4 other pkgs` &&\ + (cd /go/src/golang.org/x/text && (git cat-file -t $REV 2>/dev/null || git fetch -q origin $REV) && git reset --hard $REV) + +# Repo google.golang.org/api at 7d0e2d3 (2018-01-30) +ENV REV=7d0e2d350555821bef5a5b8aecf0d12cc1def633 +RUN go get -d google.golang.org/api/gensupport `#and 9 other pkgs` &&\ + (cd /go/src/google.golang.org/api && (git cat-file -t $REV 2>/dev/null || git fetch -q origin $REV) && git reset --hard $REV) + +# Repo google.golang.org/genproto at 4eb30f4 (2018-01-25) +ENV REV=4eb30f4778eed4c258ba66527a0d4f9ec8a36c45 +RUN go get -d google.golang.org/genproto/googleapis/api/annotations `#and 3 other pkgs` &&\ + (cd /go/src/google.golang.org/genproto && (git cat-file -t $REV 2>/dev/null || git fetch -q origin $REV) && git reset --hard $REV) + +# Repo google.golang.org/grpc at 0bd008f (2018-01-25) +ENV REV=0bd008f5fadb62d228f12b18d016709e8139a7af +RUN go get -d google.golang.org/grpc `#and 23 other pkgs` &&\ + (cd /go/src/google.golang.org/grpc && (git cat-file -t $REV 2>/dev/null || git fetch -q origin $REV) && git reset --hard $REV) + +# Optimization to speed up iterative development, not necessary for correctness: +RUN go install cloud.google.com/go/compute/metadata \ + cloud.google.com/go/iam \ + cloud.google.com/go/internal \ + cloud.google.com/go/internal/optional \ + cloud.google.com/go/internal/version \ + cloud.google.com/go/storage \ + github.com/golang/protobuf/proto \ + github.com/golang/protobuf/protoc-gen-go/descriptor \ + github.com/golang/protobuf/ptypes \ + github.com/golang/protobuf/ptypes/any \ + github.com/golang/protobuf/ptypes/duration \ + github.com/golang/protobuf/ptypes/timestamp \ + github.com/googleapis/gax-go \ + go4.org/syncutil/singleflight \ + golang.org/x/build/autocertcache \ + golang.org/x/crypto/acme \ + golang.org/x/crypto/acme/autocert \ + golang.org/x/oauth2 \ + golang.org/x/oauth2/google \ + golang.org/x/oauth2/internal \ + golang.org/x/oauth2/jws \ + golang.org/x/oauth2/jwt \ + golang.org/x/text/secure/bidirule \ + golang.org/x/text/transform \ + golang.org/x/text/unicode/bidi \ + golang.org/x/text/unicode/norm \ + google.golang.org/api/gensupport \ + google.golang.org/api/googleapi \ + google.golang.org/api/googleapi/internal/uritemplates \ + google.golang.org/api/googleapi/transport \ + google.golang.org/api/internal \ + google.golang.org/api/iterator \ + google.golang.org/api/option \ + google.golang.org/api/storage/v1 \ + google.golang.org/api/transport/http \ + google.golang.org/genproto/googleapis/api/annotations \ + google.golang.org/genproto/googleapis/iam/v1 \ + google.golang.org/genproto/googleapis/rpc/status \ + google.golang.org/grpc \ + google.golang.org/grpc/balancer \ + google.golang.org/grpc/balancer/base \ + google.golang.org/grpc/balancer/roundrobin \ + google.golang.org/grpc/codes \ + google.golang.org/grpc/connectivity \ + google.golang.org/grpc/credentials \ + google.golang.org/grpc/encoding \ + google.golang.org/grpc/encoding/proto \ + google.golang.org/grpc/grpclb/grpc_lb_v1/messages \ + google.golang.org/grpc/grpclog \ + google.golang.org/grpc/internal \ + google.golang.org/grpc/keepalive \ + google.golang.org/grpc/metadata \ + google.golang.org/grpc/naming \ + google.golang.org/grpc/peer \ + google.golang.org/grpc/resolver \ + google.golang.org/grpc/resolver/dns \ + google.golang.org/grpc/resolver/passthrough \ + google.golang.org/grpc/stats \ + google.golang.org/grpc/status \ + google.golang.org/grpc/tap \ + google.golang.org/grpc/transport +# END deps + +COPY . /go/src/golang.org/x/net/ + +RUN go install -tags "h2demo netgo" -ldflags "-linkmode=external -extldflags '-static -pthread'" golang.org/x/net/http2/h2demo + diff --git a/vendor/golang.org/x/net/http2/h2demo/Makefile b/vendor/golang.org/x/net/http2/h2demo/Makefile index f5c31ef..306d198 100644 --- a/vendor/golang.org/x/net/http2/h2demo/Makefile +++ b/vendor/golang.org/x/net/http2/h2demo/Makefile @@ -1,8 +1,55 @@ -h2demo.linux: h2demo.go - GOOS=linux go build --tags=h2demo -o h2demo.linux . +# Copyright 2018 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. -FORCE: +MUTABLE_VERSION ?= latest +VERSION ?= $(shell git rev-parse --short HEAD) + +IMAGE_STAGING := gcr.io/go-dashboard-dev/h2demo +IMAGE_PROD := gcr.io/symbolic-datum-552/h2demo + +DOCKER_IMAGE_build0=build0/h2demo:latest +DOCKER_CTR_build0=h2demo-build0 + +build0: *.go Dockerfile.0 + docker build --force-rm -f Dockerfile.0 --tag=$(DOCKER_IMAGE_build0) ../.. + +h2demo: build0 + docker create --name $(DOCKER_CTR_build0) $(DOCKER_IMAGE_build0) + docker cp $(DOCKER_CTR_build0):/go/bin/$@ $@ + docker rm $(DOCKER_CTR_build0) + +ca-certificates.crt: + docker create --name $(DOCKER_CTR_build0) $(DOCKER_IMAGE_build0) + docker cp $(DOCKER_CTR_build0):/etc/ssl/certs/$@ $@ + docker rm $(DOCKER_CTR_build0) -upload: FORCE - go install golang.org/x/build/cmd/upload - upload --verbose --osarch=linux-amd64 --tags=h2demo --file=go:golang.org/x/net/http2/h2demo --public http2-demo-server-tls/h2demo +update-deps: + go install golang.org/x/build/cmd/gitlock + gitlock --update=Dockerfile.0 --ignore=golang.org/x/net --tags=h2demo golang.org/x/net/http2/h2demo + +docker-prod: Dockerfile h2demo ca-certificates.crt + docker build --force-rm --tag=$(IMAGE_PROD):$(VERSION) . + docker tag $(IMAGE_PROD):$(VERSION) $(IMAGE_PROD):$(MUTABLE_VERSION) +docker-staging: Dockerfile h2demo ca-certificates.crt + docker build --force-rm --tag=$(IMAGE_STAGING):$(VERSION) . + docker tag $(IMAGE_STAGING):$(VERSION) $(IMAGE_STAGING):$(MUTABLE_VERSION) + +push-prod: docker-prod + gcloud docker -- push $(IMAGE_PROD):$(MUTABLE_VERSION) + gcloud docker -- push $(IMAGE_PROD):$(VERSION) +push-staging: docker-staging + gcloud docker -- push $(IMAGE_STAGING):$(MUTABLE_VERSION) + gcloud docker -- push $(IMAGE_STAGING):$(VERSION) + +deploy-prod: push-prod + kubectl set image deployment/h2demo-deployment h2demo=$(IMAGE_PROD):$(VERSION) +deploy-staging: push-staging + kubectl set image deployment/h2demo-deployment h2demo=$(IMAGE_STAGING):$(VERSION) + +.PHONY: clean +clean: + $(RM) h2demo + $(RM) ca-certificates.crt + +FORCE: diff --git a/vendor/golang.org/x/net/http2/h2demo/deployment-prod.yaml b/vendor/golang.org/x/net/http2/h2demo/deployment-prod.yaml new file mode 100644 index 0000000..a3a20a4 --- /dev/null +++ b/vendor/golang.org/x/net/http2/h2demo/deployment-prod.yaml @@ -0,0 +1,28 @@ +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: h2demo-deployment +spec: + replicas: 1 + template: + metadata: + labels: + app: h2demo + annotations: + container.seccomp.security.alpha.kubernetes.io/h2demo: docker/default + container.apparmor.security.beta.kubernetes.io/h2demo: runtime/default + spec: + containers: + - name: h2demo + image: gcr.io/symbolic-datum-552/h2demo:latest + imagePullPolicy: Always + command: ["/h2demo", "-prod"] + ports: + - containerPort: 80 + - containerPort: 443 + resources: + requests: + cpu: "1" + memory: "1Gi" + limits: + memory: "2Gi" diff --git a/vendor/golang.org/x/net/http2/h2demo/h2demo.go b/vendor/golang.org/x/net/http2/h2demo/h2demo.go index 9853107..ce842fd 100644 --- a/vendor/golang.org/x/net/http2/h2demo/h2demo.go +++ b/vendor/golang.org/x/net/http2/h2demo/h2demo.go @@ -8,6 +8,7 @@ package main import ( "bytes" + "context" "crypto/tls" "flag" "fmt" @@ -19,7 +20,6 @@ import ( "log" "net" "net/http" - "os" "path" "regexp" "runtime" @@ -28,7 +28,9 @@ import ( "sync" "time" + "cloud.google.com/go/storage" "go4.org/syncutil/singleflight" + "golang.org/x/build/autocertcache" "golang.org/x/crypto/acme/autocert" "golang.org/x/net/http2" ) @@ -426,19 +428,10 @@ func httpHost() string { } } -func serveProdTLS() error { - const cacheDir = "/var/cache/autocert" - if err := os.MkdirAll(cacheDir, 0700); err != nil { - return err - } - m := autocert.Manager{ - Cache: autocert.DirCache(cacheDir), - Prompt: autocert.AcceptTOS, - HostPolicy: autocert.HostWhitelist("http2.golang.org"), - } +func serveProdTLS(autocertManager *autocert.Manager) error { srv := &http.Server{ TLSConfig: &tls.Config{ - GetCertificate: m.GetCertificate, + GetCertificate: autocertManager.GetCertificate, }, } http2.ConfigureServer(srv, &http2.Server{ @@ -468,9 +461,21 @@ func (ln tcpKeepAliveListener) Accept() (c net.Conn, err error) { } func serveProd() error { + log.Printf("running in production mode") + + storageClient, err := storage.NewClient(context.Background()) + if err != nil { + log.Fatalf("storage.NewClient: %v", err) + } + autocertManager := &autocert.Manager{ + Prompt: autocert.AcceptTOS, + HostPolicy: autocert.HostWhitelist("http2.golang.org"), + Cache: autocertcache.NewGoogleCloudStorageCache(storageClient, "golang-h2demo-autocert"), + } + errc := make(chan error, 2) - go func() { errc <- http.ListenAndServe(":80", nil) }() - go func() { errc <- serveProdTLS() }() + go func() { errc <- http.ListenAndServe(":80", autocertManager.HTTPHandler(http.DefaultServeMux)) }() + go func() { errc <- serveProdTLS(autocertManager) }() return <-errc } diff --git a/vendor/golang.org/x/net/http2/h2demo/service.yaml b/vendor/golang.org/x/net/http2/h2demo/service.yaml new file mode 100644 index 0000000..2b7d541 --- /dev/null +++ b/vendor/golang.org/x/net/http2/h2demo/service.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: Service +metadata: + name: h2demo +spec: + externalTrafficPolicy: Local + ports: + - port: 80 + targetPort: 80 + name: http + - port: 443 + targetPort: 443 + name: https + selector: + app: h2demo + type: LoadBalancer + loadBalancerIP: 130.211.116.44 diff --git a/vendor/golang.org/x/net/http2/h2i/h2i.go b/vendor/golang.org/x/net/http2/h2i/h2i.go index 76c7787..62e5752 100644 --- a/vendor/golang.org/x/net/http2/h2i/h2i.go +++ b/vendor/golang.org/x/net/http2/h2i/h2i.go @@ -45,6 +45,7 @@ var ( flagNextProto = flag.String("nextproto", "h2,h2-14", "Comma-separated list of NPN/ALPN protocol names to negotiate.") flagInsecure = flag.Bool("insecure", false, "Whether to skip TLS cert validation") flagSettings = flag.String("settings", "empty", "comma-separated list of KEY=value settings for the initial SETTINGS frame. The magic value 'empty' sends an empty initial settings frame, and the magic value 'omit' causes no initial settings frame to be sent.") + flagDial = flag.String("dial", "", "optional ip:port to dial, to connect to a host:port but use a different SNI name (including a SNI name without DNS)") ) type command struct { @@ -147,11 +148,14 @@ func (app *h2i) Main() error { InsecureSkipVerify: *flagInsecure, } - hostAndPort := withPort(app.host) + hostAndPort := *flagDial + if hostAndPort == "" { + hostAndPort = withPort(app.host) + } log.Printf("Connecting to %s ...", hostAndPort) tc, err := tls.Dial("tcp", hostAndPort, cfg) if err != nil { - return fmt.Errorf("Error dialing %s: %v", withPort(app.host), err) + return fmt.Errorf("Error dialing %s: %v", hostAndPort, err) } log.Printf("Connected to %v", tc.RemoteAddr()) defer tc.Close() @@ -460,6 +464,15 @@ func (app *h2i) readFrames() error { app.hdec = hpack.NewDecoder(tableSize, app.onNewHeaderField) } app.hdec.Write(f.HeaderBlockFragment()) + case *http2.PushPromiseFrame: + if app.hdec == nil { + // TODO: if the user uses h2i to send a SETTINGS frame advertising + // something larger, we'll need to respect SETTINGS_HEADER_TABLE_SIZE + // and stuff here instead of using the 4k default. But for now: + tableSize := uint32(4 << 10) + app.hdec = hpack.NewDecoder(tableSize, app.onNewHeaderField) + } + app.hdec.Write(f.HeaderBlockFragment()) } } } diff --git a/vendor/golang.org/x/net/http2/hpack/encode.go b/vendor/golang.org/x/net/http2/hpack/encode.go index 54726c2..1565cf2 100644 --- a/vendor/golang.org/x/net/http2/hpack/encode.go +++ b/vendor/golang.org/x/net/http2/hpack/encode.go @@ -206,7 +206,7 @@ func appendVarInt(dst []byte, n byte, i uint64) []byte { } // appendHpackString appends s, as encoded in "String Literal" -// representation, to dst and returns the the extended buffer. +// representation, to dst and returns the extended buffer. // // s will be encoded in Huffman codes only when it produces strictly // shorter byte string. diff --git a/vendor/golang.org/x/net/http2/http2.go b/vendor/golang.org/x/net/http2/http2.go index b6b0f9a..71db28a 100644 --- a/vendor/golang.org/x/net/http2/http2.go +++ b/vendor/golang.org/x/net/http2/http2.go @@ -312,7 +312,7 @@ func mustUint31(v int32) uint32 { } // bodyAllowedForStatus reports whether a given response status code -// permits a body. See RFC 2616, section 4.4. +// permits a body. See RFC 7230, section 3.3. func bodyAllowedForStatus(status int) bool { switch { case status >= 100 && status <= 199: @@ -376,12 +376,16 @@ func (s *sorter) SortStrings(ss []string) { // validPseudoPath reports whether v is a valid :path pseudo-header // value. It must be either: // -// *) a non-empty string starting with '/', but not with with "//", +// *) a non-empty string starting with '/' // *) the string '*', for OPTIONS requests. // // For now this is only used a quick check for deciding when to clean // up Opaque URLs before sending requests from the Transport. // See golang.org/issue/16847 +// +// We used to enforce that the path also didn't start with "//", but +// Google's GFE accepts such paths and Chrome sends them, so ignore +// that part of the spec. See golang.org/issue/19103. func validPseudoPath(v string) bool { - return (len(v) > 0 && v[0] == '/' && (len(v) == 1 || v[1] != '/')) || v == "*" + return (len(v) > 0 && v[0] == '/') || v == "*" } diff --git a/vendor/golang.org/x/net/http2/not_go18.go b/vendor/golang.org/x/net/http2/not_go18.go index efbf83c..6f8d3f8 100644 --- a/vendor/golang.org/x/net/http2/not_go18.go +++ b/vendor/golang.org/x/net/http2/not_go18.go @@ -25,3 +25,5 @@ func reqGetBody(req *http.Request) func() (io.ReadCloser, error) { } func reqBodyIsNoBody(io.ReadCloser) bool { return false } + +func go18httpNoBody() io.ReadCloser { return nil } // for tests only diff --git a/vendor/golang.org/x/net/http2/pipe.go b/vendor/golang.org/x/net/http2/pipe.go index 0b9848b..a614009 100644 --- a/vendor/golang.org/x/net/http2/pipe.go +++ b/vendor/golang.org/x/net/http2/pipe.go @@ -50,7 +50,7 @@ func (p *pipe) Read(d []byte) (n int, err error) { if p.breakErr != nil { return 0, p.breakErr } - if p.b.Len() > 0 { + if p.b != nil && p.b.Len() > 0 { return p.b.Read(d) } if p.err != nil { diff --git a/vendor/golang.org/x/net/http2/pipe_test.go b/vendor/golang.org/x/net/http2/pipe_test.go index 82bf9a3..1bf351f 100644 --- a/vendor/golang.org/x/net/http2/pipe_test.go +++ b/vendor/golang.org/x/net/http2/pipe_test.go @@ -92,9 +92,12 @@ func TestPipeCloseWithError(t *testing.T) { if err != a { t.Logf("read error = %v, %v", err, a) } - // Write should fail. + // Read and Write should fail. if n, err := p.Write([]byte("abc")); err != errClosedPipeWrite || n != 0 { - t.Errorf("Write(abc) after close\ngot =%v, %v\nwant 0, %v", n, err, errClosedPipeWrite) + t.Errorf("Write(abc) after close\ngot %v, %v\nwant 0, %v", n, err, errClosedPipeWrite) + } + if n, err := p.Read(make([]byte, 1)); err == nil || n != 0 { + t.Errorf("Read() after close\ngot %v, nil\nwant 0, %v", n, errClosedPipeWrite) } } @@ -115,9 +118,13 @@ func TestPipeBreakWithError(t *testing.T) { } // Write should succeed silently. if n, err := p.Write([]byte("abc")); err != nil || n != 3 { - t.Errorf("Write(abc) after break\ngot =%v, %v\nwant 0, nil", n, err) + t.Errorf("Write(abc) after break\ngot %v, %v\nwant 0, nil", n, err) } if p.b != nil { t.Errorf("buffer should be nil after Write") } + // Read should fail. + if n, err := p.Read(make([]byte, 1)); err == nil || n != 0 { + t.Errorf("Read() after close\ngot %v, nil\nwant 0, not nil", n) + } } diff --git a/vendor/golang.org/x/net/http2/server.go b/vendor/golang.org/x/net/http2/server.go index 7367b31..39ed755 100644 --- a/vendor/golang.org/x/net/http2/server.go +++ b/vendor/golang.org/x/net/http2/server.go @@ -220,12 +220,15 @@ func ConfigureServer(s *http.Server, conf *Server) error { } else if s.TLSConfig.CipherSuites != nil { // If they already provided a CipherSuite list, return // an error if it has a bad order or is missing - // ECDHE_RSA_WITH_AES_128_GCM_SHA256. - const requiredCipher = tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 + // ECDHE_RSA_WITH_AES_128_GCM_SHA256 or ECDHE_ECDSA_WITH_AES_128_GCM_SHA256. haveRequired := false sawBad := false for i, cs := range s.TLSConfig.CipherSuites { - if cs == requiredCipher { + switch cs { + case tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, + // Alternative MTI cipher to not discourage ECDSA-only servers. + // See http://golang.org/cl/30721 for further information. + tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: haveRequired = true } if isBadCipher(cs) { @@ -235,7 +238,7 @@ func ConfigureServer(s *http.Server, conf *Server) error { } } if !haveRequired { - return fmt.Errorf("http2: TLSConfig.CipherSuites is missing HTTP/2-required TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256") + return fmt.Errorf("http2: TLSConfig.CipherSuites is missing an HTTP/2-required AES_128_GCM_SHA256 cipher.") } } @@ -403,7 +406,7 @@ func (s *Server) ServeConn(c net.Conn, opts *ServeConnOpts) { // addresses during development. // // TODO: optionally enforce? Or enforce at the time we receive - // a new request, and verify the the ServerName matches the :authority? + // a new request, and verify the ServerName matches the :authority? // But that precludes proxy situations, perhaps. // // So for now, do nothing here again. @@ -649,7 +652,7 @@ func (sc *serverConn) condlogf(err error, format string, args ...interface{}) { if err == nil { return } - if err == io.EOF || err == io.ErrUnexpectedEOF || isClosedConnError(err) { + if err == io.EOF || err == io.ErrUnexpectedEOF || isClosedConnError(err) || err == errPrefaceTimeout { // Boring, expected errors. sc.vlogf(format, args...) } else { @@ -853,8 +856,13 @@ func (sc *serverConn) serve() { } } - if sc.inGoAway && sc.curOpenStreams() == 0 && !sc.needToSendGoAway && !sc.writingFrame { - return + // Start the shutdown timer after sending a GOAWAY. When sending GOAWAY + // with no error code (graceful shutdown), don't start the timer until + // all open streams have been completed. + sentGoAway := sc.inGoAway && !sc.needToSendGoAway && !sc.writingFrame + gracefulShutdownComplete := sc.goAwayCode == ErrCodeNo && sc.curOpenStreams() == 0 + if sentGoAway && sc.shutdownTimer == nil && (sc.goAwayCode != ErrCodeNo || gracefulShutdownComplete) { + sc.shutDownIn(goAwayTimeout) } } } @@ -889,8 +897,11 @@ func (sc *serverConn) sendServeMsg(msg interface{}) { } } -// readPreface reads the ClientPreface greeting from the peer -// or returns an error on timeout or an invalid greeting. +var errPrefaceTimeout = errors.New("timeout waiting for client preface") + +// readPreface reads the ClientPreface greeting from the peer or +// returns errPrefaceTimeout on timeout, or an error if the greeting +// is invalid. func (sc *serverConn) readPreface() error { errc := make(chan error, 1) go func() { @@ -908,7 +919,7 @@ func (sc *serverConn) readPreface() error { defer timer.Stop() select { case <-timer.C: - return errors.New("timeout waiting for client preface") + return errPrefaceTimeout case err := <-errc: if err == nil { if VerboseLogs { @@ -1218,30 +1229,31 @@ func (sc *serverConn) startGracefulShutdown() { sc.shutdownOnce.Do(func() { sc.sendServeMsg(gracefulShutdownMsg) }) } +// After sending GOAWAY, the connection will close after goAwayTimeout. +// If we close the connection immediately after sending GOAWAY, there may +// be unsent data in our kernel receive buffer, which will cause the kernel +// to send a TCP RST on close() instead of a FIN. This RST will abort the +// connection immediately, whether or not the client had received the GOAWAY. +// +// Ideally we should delay for at least 1 RTT + epsilon so the client has +// a chance to read the GOAWAY and stop sending messages. Measuring RTT +// is hard, so we approximate with 1 second. See golang.org/issue/18701. +// +// This is a var so it can be shorter in tests, where all requests uses the +// loopback interface making the expected RTT very small. +// +// TODO: configurable? +var goAwayTimeout = 1 * time.Second + func (sc *serverConn) startGracefulShutdownInternal() { - sc.goAwayIn(ErrCodeNo, 0) + sc.goAway(ErrCodeNo) } func (sc *serverConn) goAway(code ErrCode) { - sc.serveG.check() - var forceCloseIn time.Duration - if code != ErrCodeNo { - forceCloseIn = 250 * time.Millisecond - } else { - // TODO: configurable - forceCloseIn = 1 * time.Second - } - sc.goAwayIn(code, forceCloseIn) -} - -func (sc *serverConn) goAwayIn(code ErrCode, forceCloseIn time.Duration) { sc.serveG.check() if sc.inGoAway { return } - if forceCloseIn != 0 { - sc.shutDownIn(forceCloseIn) - } sc.inGoAway = true sc.needToSendGoAway = true sc.goAwayCode = code @@ -2252,6 +2264,7 @@ type responseWriterState struct { wroteHeader bool // WriteHeader called (explicitly or implicitly). Not necessarily sent to user yet. sentHeader bool // have we sent the header frame? handlerDone bool // handler has finished + dirty bool // a Write failed; don't reuse this responseWriterState sentContentLen int64 // non-zero if handler set a Content-Length header wroteBytes int64 @@ -2272,7 +2285,7 @@ func (rws *responseWriterState) hasTrailers() bool { return len(rws.trailers) != func (rws *responseWriterState) declareTrailer(k string) { k = http.CanonicalHeaderKey(k) if !ValidTrailerHeader(k) { - // Forbidden by RFC 2616 14.40. + // Forbidden by RFC 7230, section 4.1.2. rws.conn.logf("ignoring invalid trailer %q", k) return } @@ -2309,7 +2322,7 @@ func (rws *responseWriterState) writeChunk(p []byte) (n int, err error) { clen = strconv.Itoa(len(p)) } _, hasContentType := rws.snapHeader["Content-Type"] - if !hasContentType && bodyAllowedForStatus(rws.status) { + if !hasContentType && bodyAllowedForStatus(rws.status) && len(p) > 0 { ctype = http.DetectContentType(p) } var date string @@ -2333,6 +2346,7 @@ func (rws *responseWriterState) writeChunk(p []byte) (n int, err error) { date: date, }) if err != nil { + rws.dirty = true return 0, err } if endStream { @@ -2354,6 +2368,7 @@ func (rws *responseWriterState) writeChunk(p []byte) (n int, err error) { if len(p) > 0 || endStream { // only send a 0 byte DATA frame if we're ending the stream. if err := rws.conn.writeDataFromHandler(rws.stream, p, endStream); err != nil { + rws.dirty = true return 0, err } } @@ -2365,6 +2380,9 @@ func (rws *responseWriterState) writeChunk(p []byte) (n int, err error) { trailers: rws.trailers, endStream: true, }) + if err != nil { + rws.dirty = true + } return len(p), err } return len(p), nil @@ -2388,7 +2406,7 @@ const TrailerPrefix = "Trailer:" // after the header has already been flushed. Because the Go // ResponseWriter interface has no way to set Trailers (only the // Header), and because we didn't want to expand the ResponseWriter -// interface, and because nobody used trailers, and because RFC 2616 +// interface, and because nobody used trailers, and because RFC 7230 // says you SHOULD (but not must) predeclare any trailers in the // header, the official ResponseWriter rules said trailers in Go must // be predeclared, and then we reuse the same ResponseWriter.Header() @@ -2472,6 +2490,24 @@ func (w *responseWriter) Header() http.Header { return rws.handlerHeader } +// checkWriteHeaderCode is a copy of net/http's checkWriteHeaderCode. +func checkWriteHeaderCode(code int) { + // Issue 22880: require valid WriteHeader status codes. + // For now we only enforce that it's three digits. + // In the future we might block things over 599 (600 and above aren't defined + // at http://httpwg.org/specs/rfc7231.html#status.codes) + // and we might block under 200 (once we have more mature 1xx support). + // But for now any three digits. + // + // We used to send "HTTP/1.1 000 0" on the wire in responses but there's + // no equivalent bogus thing we can realistically send in HTTP/2, + // so we'll consistently panic instead and help people find their bugs + // early. (We can't return an error from WriteHeader even if we wanted to.) + if code < 100 || code > 999 { + panic(fmt.Sprintf("invalid WriteHeader code %v", code)) + } +} + func (w *responseWriter) WriteHeader(code int) { rws := w.rws if rws == nil { @@ -2482,6 +2518,7 @@ func (w *responseWriter) WriteHeader(code int) { func (rws *responseWriterState) writeHeader(code int) { if !rws.wroteHeader { + checkWriteHeaderCode(code) rws.wroteHeader = true rws.status = code if len(rws.handlerHeader) > 0 { @@ -2504,7 +2541,7 @@ func cloneHeader(h http.Header) http.Header { // // * Handler calls w.Write or w.WriteString -> // * -> rws.bw (*bufio.Writer) -> -// * (Handler migth call Flush) +// * (Handler might call Flush) // * -> chunkWriter{rws} // * -> responseWriterState.writeChunk(p []byte) // * -> responseWriterState.writeChunk (most of the magic; see comment there) @@ -2543,10 +2580,19 @@ func (w *responseWriter) write(lenData int, dataB []byte, dataS string) (n int, func (w *responseWriter) handlerDone() { rws := w.rws + dirty := rws.dirty rws.handlerDone = true w.Flush() w.rws = nil - responseWriterStatePool.Put(rws) + if !dirty { + // Only recycle the pool if all prior Write calls to + // the serverConn goroutine completed successfully. If + // they returned earlier due to resets from the peer + // there might still be write goroutines outstanding + // from the serverConn referencing the rws memory. See + // issue 20704. + responseWriterStatePool.Put(rws) + } } // Push errors. @@ -2744,7 +2790,7 @@ func (sc *serverConn) startPush(msg *startPushRequest) { } // foreachHeaderElement splits v according to the "#rule" construction -// in RFC 2616 section 2.1 and calls fn for each non-empty element. +// in RFC 7230 section 7 and calls fn for each non-empty element. func foreachHeaderElement(v string, fn func(string)) { v = textproto.TrimString(v) if v == "" { diff --git a/vendor/golang.org/x/net/http2/server_test.go b/vendor/golang.org/x/net/http2/server_test.go index 638d2a4..c5d8459 100644 --- a/vendor/golang.org/x/net/http2/server_test.go +++ b/vendor/golang.org/x/net/http2/server_test.go @@ -68,6 +68,7 @@ type serverTester struct { func init() { testHookOnPanicMu = new(sync.Mutex) + goAwayTimeout = 25 * time.Millisecond } func resetHooks() { @@ -286,7 +287,7 @@ func (st *serverTester) greetAndCheckSettings(checkSetting func(s Setting) error case *WindowUpdateFrame: if f.FrameHeader.StreamID != 0 { - st.t.Fatalf("WindowUpdate StreamID = %d; want 0", f.FrameHeader.StreamID, 0) + st.t.Fatalf("WindowUpdate StreamID = %d; want 0", f.FrameHeader.StreamID) } incr := uint32((&Server{}).initialConnRecvWindowSize() - initialWindowSize) if f.Increment != incr { @@ -1717,7 +1718,6 @@ func TestServer_Response_NoData_Header_FooBar(t *testing.T) { wanth := [][2]string{ {":status", "200"}, {"foo-bar", "some-value"}, - {"content-type", "text/plain; charset=utf-8"}, {"content-length", "0"}, } if !reflect.DeepEqual(goth, wanth) { @@ -2877,9 +2877,9 @@ func testServerWritesTrailers(t *testing.T, withFlush bool) { w.Header().Set("Trailer:post-header-trailer2", "hi2") w.Header().Set("Trailer:Range", "invalid") w.Header().Set("Trailer:Foo\x01Bogus", "invalid") - w.Header().Set("Transfer-Encoding", "should not be included; Forbidden by RFC 2616 14.40") - w.Header().Set("Content-Length", "should not be included; Forbidden by RFC 2616 14.40") - w.Header().Set("Trailer", "should not be included; Forbidden by RFC 2616 14.40") + w.Header().Set("Transfer-Encoding", "should not be included; Forbidden by RFC 7230 4.1.2") + w.Header().Set("Content-Length", "should not be included; Forbidden by RFC 7230 4.1.2") + w.Header().Set("Trailer", "should not be included; Forbidden by RFC 7230 4.1.2") return nil }, func(st *serverTester) { getSlash(st) @@ -2952,7 +2952,6 @@ func TestServerDoesntWriteInvalidHeaders(t *testing.T) { wanth := [][2]string{ {":status", "200"}, {"ok1", "x"}, - {"content-type", "text/plain; charset=utf-8"}, {"content-length", "0"}, } if !reflect.DeepEqual(goth, wanth) { @@ -2972,7 +2971,7 @@ func BenchmarkServerGets(b *testing.B) { defer st.Close() st.greet() - // Give the server quota to reply. (plus it has the the 64KB) + // Give the server quota to reply. (plus it has the 64KB) if err := st.fr.WriteWindowUpdate(0, uint32(b.N*len(msg))); err != nil { b.Fatal(err) } @@ -3010,7 +3009,7 @@ func BenchmarkServerPosts(b *testing.B) { defer st.Close() st.greet() - // Give the server quota to reply. (plus it has the the 64KB) + // Give the server quota to reply. (plus it has the 64KB) if err := st.fr.WriteWindowUpdate(0, uint32(b.N*len(msg))); err != nil { b.Fatal(err) } @@ -3188,12 +3187,18 @@ func TestConfigureServer(t *testing.T) { CipherSuites: []uint16{tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256}, }, }, + { + name: "just the alternative required cipher suite", + tlsConfig: &tls.Config{ + CipherSuites: []uint16{tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256}, + }, + }, { name: "missing required cipher suite", tlsConfig: &tls.Config{ CipherSuites: []uint16{tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384}, }, - wantErr: "is missing HTTP/2-required TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", + wantErr: "is missing an HTTP/2-required AES_128_GCM_SHA256 cipher.", }, { name: "required after bad", @@ -3259,7 +3264,6 @@ func TestServerNoAutoContentLengthOnHead(t *testing.T) { headers := st.decodeHeader(h.HeaderBlockFragment()) want := [][2]string{ {":status", "200"}, - {"content-type", "text/plain; charset=utf-8"}, } if !reflect.DeepEqual(headers, want) { t.Errorf("Headers mismatch.\n got: %q\nwant: %q\n", headers, want) @@ -3312,7 +3316,7 @@ func BenchmarkServer_GetRequest(b *testing.B) { defer st.Close() st.greet() - // Give the server quota to reply. (plus it has the the 64KB) + // Give the server quota to reply. (plus it has the 64KB) if err := st.fr.WriteWindowUpdate(0, uint32(b.N*len(msg))); err != nil { b.Fatal(err) } @@ -3343,7 +3347,7 @@ func BenchmarkServer_PostRequest(b *testing.B) { }) defer st.Close() st.greet() - // Give the server quota to reply. (plus it has the the 64KB) + // Give the server quota to reply. (plus it has the 64KB) if err := st.fr.WriteWindowUpdate(0, uint32(b.N*len(msg))); err != nil { b.Fatal(err) } @@ -3685,3 +3689,37 @@ func TestRequestBodyReadCloseRace(t *testing.T) { <-done } } + +func TestIssue20704Race(t *testing.T) { + if testing.Short() && os.Getenv("GO_BUILDER_NAME") == "" { + t.Skip("skipping in short mode") + } + const ( + itemSize = 1 << 10 + itemCount = 100 + ) + + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + for i := 0; i < itemCount; i++ { + _, err := w.Write(make([]byte, itemSize)) + if err != nil { + return + } + } + }, optOnlyServer) + defer st.Close() + + tr := &Transport{TLSClientConfig: tlsConfigInsecure} + defer tr.CloseIdleConnections() + cl := &http.Client{Transport: tr} + + for i := 0; i < 1000; i++ { + resp, err := cl.Get(st.ts.URL) + if err != nil { + t.Fatal(err) + } + // Force a RST stream to the server by closing without + // reading the body: + resp.Body.Close() + } +} diff --git a/vendor/golang.org/x/net/http2/transport.go b/vendor/golang.org/x/net/http2/transport.go index 3a85f25..e6b321f 100644 --- a/vendor/golang.org/x/net/http2/transport.go +++ b/vendor/golang.org/x/net/http2/transport.go @@ -18,6 +18,7 @@ import ( "io/ioutil" "log" "math" + mathrand "math/rand" "net" "net/http" "sort" @@ -86,7 +87,7 @@ type Transport struct { // MaxHeaderListSize is the http2 SETTINGS_MAX_HEADER_LIST_SIZE to // send in the initial settings frame. It is how many bytes - // of response headers are allow. Unlike the http2 spec, zero here + // of response headers are allowed. Unlike the http2 spec, zero here // means to use a default limit (currently 10MB). If you actually // want to advertise an ulimited value to the peer, Transport // interprets the highest possible value here (0xffffffff or 1<<32-1) @@ -164,15 +165,17 @@ type ClientConn struct { goAwayDebug string // goAway frame's debug data, retained as a string streams map[uint32]*clientStream // client-initiated nextStreamID uint32 + pendingRequests int // requests blocked and waiting to be sent because len(streams) == maxConcurrentStreams pings map[[8]byte]chan struct{} // in flight ping data to notification channel bw *bufio.Writer br *bufio.Reader fr *Framer lastActive time.Time // Settings from peer: (also guarded by mu) - maxFrameSize uint32 - maxConcurrentStreams uint32 - initialWindowSize uint32 + maxFrameSize uint32 + maxConcurrentStreams uint32 + peerMaxHeaderListSize uint64 + initialWindowSize uint32 hbuf bytes.Buffer // HPACK encoder writes into this henc *hpack.Encoder @@ -216,35 +219,45 @@ type clientStream struct { resTrailer *http.Header // client's Response.Trailer } -// awaitRequestCancel runs in its own goroutine and waits for the user -// to cancel a RoundTrip request, its context to expire, or for the -// request to be done (any way it might be removed from the cc.streams -// map: peer reset, successful completion, TCP connection breakage, -// etc) -func (cs *clientStream) awaitRequestCancel(req *http.Request) { +// awaitRequestCancel waits for the user to cancel a request or for the done +// channel to be signaled. A non-nil error is returned only if the request was +// canceled. +func awaitRequestCancel(req *http.Request, done <-chan struct{}) error { ctx := reqContext(req) if req.Cancel == nil && ctx.Done() == nil { - return + return nil } select { case <-req.Cancel: - cs.cancelStream() - cs.bufPipe.CloseWithError(errRequestCanceled) + return errRequestCanceled case <-ctx.Done(): + return ctx.Err() + case <-done: + return nil + } +} + +// awaitRequestCancel waits for the user to cancel a request, its context to +// expire, or for the request to be done (any way it might be removed from the +// cc.streams map: peer reset, successful completion, TCP connection breakage, +// etc). If the request is canceled, then cs will be canceled and closed. +func (cs *clientStream) awaitRequestCancel(req *http.Request) { + if err := awaitRequestCancel(req, cs.done); err != nil { cs.cancelStream() - cs.bufPipe.CloseWithError(ctx.Err()) - case <-cs.done: + cs.bufPipe.CloseWithError(err) } } func (cs *clientStream) cancelStream() { - cs.cc.mu.Lock() + cc := cs.cc + cc.mu.Lock() didReset := cs.didReset cs.didReset = true - cs.cc.mu.Unlock() + cc.mu.Unlock() if !didReset { - cs.cc.writeStreamReset(cs.ID, ErrCodeCancel, nil) + cc.writeStreamReset(cs.ID, ErrCodeCancel, nil) + cc.forgetStreamID(cs.ID) } } @@ -261,6 +274,13 @@ func (cs *clientStream) checkResetOrDone() error { } } +func (cs *clientStream) getStartedWrite() bool { + cc := cs.cc + cc.mu.Lock() + defer cc.mu.Unlock() + return cs.startedWrite +} + func (cs *clientStream) abortRequestBodyWrite(err error) { if err == nil { panic("nil error") @@ -286,7 +306,26 @@ func (sew stickyErrWriter) Write(p []byte) (n int, err error) { return } -var ErrNoCachedConn = errors.New("http2: no cached connection was available") +// noCachedConnError is the concrete type of ErrNoCachedConn, which +// needs to be detected by net/http regardless of whether it's its +// bundled version (in h2_bundle.go with a rewritten type name) or +// from a user's x/net/http2. As such, as it has a unique method name +// (IsHTTP2NoCachedConnError) that net/http sniffs for via func +// isNoCachedConnError. +type noCachedConnError struct{} + +func (noCachedConnError) IsHTTP2NoCachedConnError() {} +func (noCachedConnError) Error() string { return "http2: no cached connection was available" } + +// isNoCachedConnError reports whether err is of type noCachedConnError +// or its equivalent renamed type in net/http2's h2_bundle.go. Both types +// may coexist in the same running program. +func isNoCachedConnError(err error) bool { + _, ok := err.(interface{ IsHTTP2NoCachedConnError() }) + return ok +} + +var ErrNoCachedConn error = noCachedConnError{} // RoundTripOpt are options for the Transport.RoundTripOpt method. type RoundTripOpt struct { @@ -329,17 +368,28 @@ func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Res } addr := authorityAddr(req.URL.Scheme, req.URL.Host) - for { + for retry := 0; ; retry++ { cc, err := t.connPool().GetClientConn(req, addr) if err != nil { t.vlogf("http2: Transport failed to get client conn for %s: %v", addr, err) return nil, err } traceGotConn(req, cc) - res, err := cc.RoundTrip(req) - if err != nil { - if req, err = shouldRetryRequest(req, err); err == nil { - continue + res, gotErrAfterReqBodyWrite, err := cc.roundTrip(req) + if err != nil && retry <= 6 { + if req, err = shouldRetryRequest(req, err, gotErrAfterReqBodyWrite); err == nil { + // After the first retry, do exponential backoff with 10% jitter. + if retry == 0 { + continue + } + backoff := float64(uint(1) << (uint(retry) - 1)) + backoff += backoff * (0.1 * mathrand.Float64()) + select { + case <-time.After(time.Second * time.Duration(backoff)): + continue + case <-reqContext(req).Done(): + return nil, reqContext(req).Err() + } } } if err != nil { @@ -360,43 +410,50 @@ func (t *Transport) CloseIdleConnections() { } var ( - errClientConnClosed = errors.New("http2: client conn is closed") - errClientConnUnusable = errors.New("http2: client conn not usable") - - errClientConnGotGoAway = errors.New("http2: Transport received Server's graceful shutdown GOAWAY") - errClientConnGotGoAwayAfterSomeReqBody = errors.New("http2: Transport received Server's graceful shutdown GOAWAY; some request body already written") + errClientConnClosed = errors.New("http2: client conn is closed") + errClientConnUnusable = errors.New("http2: client conn not usable") + errClientConnGotGoAway = errors.New("http2: Transport received Server's graceful shutdown GOAWAY") ) // shouldRetryRequest is called by RoundTrip when a request fails to get // response headers. It is always called with a non-nil error. // It returns either a request to retry (either the same request, or a // modified clone), or an error if the request can't be replayed. -func shouldRetryRequest(req *http.Request, err error) (*http.Request, error) { - switch err { - default: +func shouldRetryRequest(req *http.Request, err error, afterBodyWrite bool) (*http.Request, error) { + if !canRetryError(err) { return nil, err - case errClientConnUnusable, errClientConnGotGoAway: + } + if !afterBodyWrite { return req, nil - case errClientConnGotGoAwayAfterSomeReqBody: - // If the Body is nil (or http.NoBody), it's safe to reuse - // this request and its Body. - if req.Body == nil || reqBodyIsNoBody(req.Body) { - return req, nil - } - // Otherwise we depend on the Request having its GetBody - // func defined. - getBody := reqGetBody(req) // Go 1.8: getBody = req.GetBody - if getBody == nil { - return nil, errors.New("http2: Transport: peer server initiated graceful shutdown after some of Request.Body was written; define Request.GetBody to avoid this error") - } - body, err := getBody() - if err != nil { - return nil, err - } - newReq := *req - newReq.Body = body - return &newReq, nil } + // If the Body is nil (or http.NoBody), it's safe to reuse + // this request and its Body. + if req.Body == nil || reqBodyIsNoBody(req.Body) { + return req, nil + } + // Otherwise we depend on the Request having its GetBody + // func defined. + getBody := reqGetBody(req) // Go 1.8: getBody = req.GetBody + if getBody == nil { + return nil, fmt.Errorf("http2: Transport: cannot retry err [%v] after Request.Body was written; define Request.GetBody to avoid this error", err) + } + body, err := getBody() + if err != nil { + return nil, err + } + newReq := *req + newReq.Body = body + return &newReq, nil +} + +func canRetryError(err error) bool { + if err == errClientConnUnusable || err == errClientConnGotGoAway { + return true + } + if se, ok := err.(StreamError); ok { + return se.Code == ErrCodeRefusedStream + } + return false } func (t *Transport) dialClientConn(addr string, singleUse bool) (*ClientConn, error) { @@ -474,17 +531,18 @@ func (t *Transport) NewClientConn(c net.Conn) (*ClientConn, error) { func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, error) { cc := &ClientConn{ - t: t, - tconn: c, - readerDone: make(chan struct{}), - nextStreamID: 1, - maxFrameSize: 16 << 10, // spec default - initialWindowSize: 65535, // spec default - maxConcurrentStreams: 1000, // "infinite", per spec. 1000 seems good enough. - streams: make(map[uint32]*clientStream), - singleUse: singleUse, - wantSettingsAck: true, - pings: make(map[[8]byte]chan struct{}), + t: t, + tconn: c, + readerDone: make(chan struct{}), + nextStreamID: 1, + maxFrameSize: 16 << 10, // spec default + initialWindowSize: 65535, // spec default + maxConcurrentStreams: 1000, // "infinite", per spec. 1000 seems good enough. + peerMaxHeaderListSize: 0xffffffffffffffff, // "infinite", per spec. Use 2^64-1 instead. + streams: make(map[uint32]*clientStream), + singleUse: singleUse, + wantSettingsAck: true, + pings: make(map[[8]byte]chan struct{}), } if d := t.idleConnTimeout(); d != 0 { cc.idleTimeout = d @@ -560,6 +618,8 @@ func (cc *ClientConn) setGoAway(f *GoAwayFrame) { } } +// CanTakeNewRequest reports whether the connection can take a new request, +// meaning it has not been closed or received or sent a GOAWAY. func (cc *ClientConn) CanTakeNewRequest() bool { cc.mu.Lock() defer cc.mu.Unlock() @@ -571,8 +631,7 @@ func (cc *ClientConn) canTakeNewRequestLocked() bool { return false } return cc.goAway == nil && !cc.closed && - int64(len(cc.streams)+1) < int64(cc.maxConcurrentStreams) && - cc.nextStreamID < math.MaxInt32 + int64(cc.nextStreamID)+int64(cc.pendingRequests) < math.MaxInt32 } // onIdleTimeout is called from a time.AfterFunc goroutine. It will @@ -694,7 +753,7 @@ func checkConnHeaders(req *http.Request) error { // req.ContentLength, where 0 actually means zero (not unknown) and -1 // means unknown. func actualContentLength(req *http.Request) int64 { - if req.Body == nil { + if req.Body == nil || reqBodyIsNoBody(req.Body) { return 0 } if req.ContentLength != 0 { @@ -704,8 +763,13 @@ func actualContentLength(req *http.Request) int64 { } func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) { + resp, _, err := cc.roundTrip(req) + return resp, err +} + +func (cc *ClientConn) roundTrip(req *http.Request) (res *http.Response, gotErrAfterReqBodyWrite bool, err error) { if err := checkConnHeaders(req); err != nil { - return nil, err + return nil, false, err } if cc.idleTimer != nil { cc.idleTimer.Stop() @@ -713,20 +777,19 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) { trailers, err := commaSeparatedTrailers(req) if err != nil { - return nil, err + return nil, false, err } hasTrailers := trailers != "" cc.mu.Lock() - cc.lastActive = time.Now() - if cc.closed || !cc.canTakeNewRequestLocked() { + if err := cc.awaitOpenSlotForRequest(req); err != nil { cc.mu.Unlock() - return nil, errClientConnUnusable + return nil, false, err } body := req.Body - hasBody := body != nil contentLen := actualContentLength(req) + hasBody := contentLen != 0 // TODO(bradfitz): this is a copy of the logic in net/http. Unify somewhere? var requestedGzip bool @@ -755,7 +818,7 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) { hdrs, err := cc.encodeHeaders(req, requestedGzip, trailers, contentLen) if err != nil { cc.mu.Unlock() - return nil, err + return nil, false, err } cs := cc.newStream() @@ -767,7 +830,7 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) { cc.wmu.Lock() endStream := !hasBody && !hasTrailers - werr := cc.writeHeaders(cs.ID, endStream, hdrs) + werr := cc.writeHeaders(cs.ID, endStream, int(cc.maxFrameSize), hdrs) cc.wmu.Unlock() traceWroteHeaders(cs.trace) cc.mu.Unlock() @@ -781,7 +844,7 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) { // Don't bother sending a RST_STREAM (our write already failed; // no need to keep writing) traceWroteRequest(cs.trace, werr) - return nil, werr + return nil, false, werr } var respHeaderTimer <-chan time.Time @@ -800,7 +863,7 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) { bodyWritten := false ctx := reqContext(req) - handleReadLoopResponse := func(re resAndError) (*http.Response, error) { + handleReadLoopResponse := func(re resAndError) (*http.Response, bool, error) { res := re.res if re.err != nil || res.StatusCode > 299 { // On error or status code 3xx, 4xx, 5xx, etc abort any @@ -816,19 +879,12 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) { cs.abortRequestBodyWrite(errStopReqBodyWrite) } if re.err != nil { - if re.err == errClientConnGotGoAway { - cc.mu.Lock() - if cs.startedWrite { - re.err = errClientConnGotGoAwayAfterSomeReqBody - } - cc.mu.Unlock() - } cc.forgetStreamID(cs.ID) - return nil, re.err + return nil, cs.getStartedWrite(), re.err } res.Request = req res.TLS = cc.tlsState - return res, nil + return res, false, nil } for { @@ -836,37 +892,37 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) { case re := <-readLoopResCh: return handleReadLoopResponse(re) case <-respHeaderTimer: - cc.forgetStreamID(cs.ID) if !hasBody || bodyWritten { cc.writeStreamReset(cs.ID, ErrCodeCancel, nil) } else { bodyWriter.cancel() cs.abortRequestBodyWrite(errStopReqBodyWriteAndCancel) } - return nil, errTimeout - case <-ctx.Done(): cc.forgetStreamID(cs.ID) + return nil, cs.getStartedWrite(), errTimeout + case <-ctx.Done(): if !hasBody || bodyWritten { cc.writeStreamReset(cs.ID, ErrCodeCancel, nil) } else { bodyWriter.cancel() cs.abortRequestBodyWrite(errStopReqBodyWriteAndCancel) } - return nil, ctx.Err() - case <-req.Cancel: cc.forgetStreamID(cs.ID) + return nil, cs.getStartedWrite(), ctx.Err() + case <-req.Cancel: if !hasBody || bodyWritten { cc.writeStreamReset(cs.ID, ErrCodeCancel, nil) } else { bodyWriter.cancel() cs.abortRequestBodyWrite(errStopReqBodyWriteAndCancel) } - return nil, errRequestCanceled + cc.forgetStreamID(cs.ID) + return nil, cs.getStartedWrite(), errRequestCanceled case <-cs.peerReset: // processResetStream already removed the // stream from the streams map; no need for // forgetStreamID. - return nil, cs.resetErr + return nil, cs.getStartedWrite(), cs.resetErr case err := <-bodyWriter.resc: // Prefer the read loop's response, if available. Issue 16102. select { @@ -875,7 +931,7 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) { default: } if err != nil { - return nil, err + return nil, cs.getStartedWrite(), err } bodyWritten = true if d := cc.responseHeaderTimeout(); d != 0 { @@ -887,14 +943,52 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) { } } +// awaitOpenSlotForRequest waits until len(streams) < maxConcurrentStreams. +// Must hold cc.mu. +func (cc *ClientConn) awaitOpenSlotForRequest(req *http.Request) error { + var waitingForConn chan struct{} + var waitingForConnErr error // guarded by cc.mu + for { + cc.lastActive = time.Now() + if cc.closed || !cc.canTakeNewRequestLocked() { + return errClientConnUnusable + } + if int64(len(cc.streams))+1 <= int64(cc.maxConcurrentStreams) { + if waitingForConn != nil { + close(waitingForConn) + } + return nil + } + // Unfortunately, we cannot wait on a condition variable and channel at + // the same time, so instead, we spin up a goroutine to check if the + // request is canceled while we wait for a slot to open in the connection. + if waitingForConn == nil { + waitingForConn = make(chan struct{}) + go func() { + if err := awaitRequestCancel(req, waitingForConn); err != nil { + cc.mu.Lock() + waitingForConnErr = err + cc.cond.Broadcast() + cc.mu.Unlock() + } + }() + } + cc.pendingRequests++ + cc.cond.Wait() + cc.pendingRequests-- + if waitingForConnErr != nil { + return waitingForConnErr + } + } +} + // requires cc.wmu be held -func (cc *ClientConn) writeHeaders(streamID uint32, endStream bool, hdrs []byte) error { +func (cc *ClientConn) writeHeaders(streamID uint32, endStream bool, maxFrameSize int, hdrs []byte) error { first := true // first frame written (HEADERS is first, then CONTINUATION) - frameSize := int(cc.maxFrameSize) for len(hdrs) > 0 && cc.werr == nil { chunk := hdrs - if len(chunk) > frameSize { - chunk = chunk[:frameSize] + if len(chunk) > maxFrameSize { + chunk = chunk[:maxFrameSize] } hdrs = hdrs[len(chunk):] endHeaders := len(hdrs) == 0 @@ -1002,17 +1096,26 @@ func (cs *clientStream) writeRequestBody(body io.Reader, bodyCloser io.Closer) ( var trls []byte if hasTrailers { cc.mu.Lock() - defer cc.mu.Unlock() - trls = cc.encodeTrailers(req) + trls, err = cc.encodeTrailers(req) + cc.mu.Unlock() + if err != nil { + cc.writeStreamReset(cs.ID, ErrCodeInternal, err) + cc.forgetStreamID(cs.ID) + return err + } } + cc.mu.Lock() + maxFrameSize := int(cc.maxFrameSize) + cc.mu.Unlock() + cc.wmu.Lock() defer cc.wmu.Unlock() // Two ways to send END_STREAM: either with trailers, or // with an empty DATA frame. if len(trls) > 0 { - err = cc.writeHeaders(cs.ID, true, trls) + err = cc.writeHeaders(cs.ID, true, maxFrameSize, trls) } else { err = cc.fr.WriteData(cs.ID, true, nil) } @@ -1106,62 +1209,86 @@ func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trail } } - // 8.1.2.3 Request Pseudo-Header Fields - // The :path pseudo-header field includes the path and query parts of the - // target URI (the path-absolute production and optionally a '?' character - // followed by the query production (see Sections 3.3 and 3.4 of - // [RFC3986]). - cc.writeHeader(":authority", host) - cc.writeHeader(":method", req.Method) - if req.Method != "CONNECT" { - cc.writeHeader(":path", path) - cc.writeHeader(":scheme", req.URL.Scheme) - } - if trailers != "" { - cc.writeHeader("trailer", trailers) - } + enumerateHeaders := func(f func(name, value string)) { + // 8.1.2.3 Request Pseudo-Header Fields + // The :path pseudo-header field includes the path and query parts of the + // target URI (the path-absolute production and optionally a '?' character + // followed by the query production (see Sections 3.3 and 3.4 of + // [RFC3986]). + f(":authority", host) + f(":method", req.Method) + if req.Method != "CONNECT" { + f(":path", path) + f(":scheme", req.URL.Scheme) + } + if trailers != "" { + f("trailer", trailers) + } - var didUA bool - for k, vv := range req.Header { - lowKey := strings.ToLower(k) - switch lowKey { - case "host", "content-length": - // Host is :authority, already sent. - // Content-Length is automatic, set below. - continue - case "connection", "proxy-connection", "transfer-encoding", "upgrade", "keep-alive": - // Per 8.1.2.2 Connection-Specific Header - // Fields, don't send connection-specific - // fields. We have already checked if any - // are error-worthy so just ignore the rest. - continue - case "user-agent": - // Match Go's http1 behavior: at most one - // User-Agent. If set to nil or empty string, - // then omit it. Otherwise if not mentioned, - // include the default (below). - didUA = true - if len(vv) < 1 { + var didUA bool + for k, vv := range req.Header { + if strings.EqualFold(k, "host") || strings.EqualFold(k, "content-length") { + // Host is :authority, already sent. + // Content-Length is automatic, set below. continue - } - vv = vv[:1] - if vv[0] == "" { + } else if strings.EqualFold(k, "connection") || strings.EqualFold(k, "proxy-connection") || + strings.EqualFold(k, "transfer-encoding") || strings.EqualFold(k, "upgrade") || + strings.EqualFold(k, "keep-alive") { + // Per 8.1.2.2 Connection-Specific Header + // Fields, don't send connection-specific + // fields. We have already checked if any + // are error-worthy so just ignore the rest. continue + } else if strings.EqualFold(k, "user-agent") { + // Match Go's http1 behavior: at most one + // User-Agent. If set to nil or empty string, + // then omit it. Otherwise if not mentioned, + // include the default (below). + didUA = true + if len(vv) < 1 { + continue + } + vv = vv[:1] + if vv[0] == "" { + continue + } + + } + + for _, v := range vv { + f(k, v) } } - for _, v := range vv { - cc.writeHeader(lowKey, v) + if shouldSendReqContentLength(req.Method, contentLength) { + f("content-length", strconv.FormatInt(contentLength, 10)) + } + if addGzipHeader { + f("accept-encoding", "gzip") + } + if !didUA { + f("user-agent", defaultUserAgent) } } - if shouldSendReqContentLength(req.Method, contentLength) { - cc.writeHeader("content-length", strconv.FormatInt(contentLength, 10)) - } - if addGzipHeader { - cc.writeHeader("accept-encoding", "gzip") - } - if !didUA { - cc.writeHeader("user-agent", defaultUserAgent) + + // Do a first pass over the headers counting bytes to ensure + // we don't exceed cc.peerMaxHeaderListSize. This is done as a + // separate pass before encoding the headers to prevent + // modifying the hpack state. + hlSize := uint64(0) + enumerateHeaders(func(name, value string) { + hf := hpack.HeaderField{Name: name, Value: value} + hlSize += uint64(hf.Size()) + }) + + if hlSize > cc.peerMaxHeaderListSize { + return nil, errRequestHeaderListSize } + + // Header list size is ok. Write the headers. + enumerateHeaders(func(name, value string) { + cc.writeHeader(strings.ToLower(name), value) + }) + return cc.hbuf.Bytes(), nil } @@ -1188,17 +1315,29 @@ func shouldSendReqContentLength(method string, contentLength int64) bool { } // requires cc.mu be held. -func (cc *ClientConn) encodeTrailers(req *http.Request) []byte { +func (cc *ClientConn) encodeTrailers(req *http.Request) ([]byte, error) { cc.hbuf.Reset() + + hlSize := uint64(0) for k, vv := range req.Trailer { - // Transfer-Encoding, etc.. have already been filter at the + for _, v := range vv { + hf := hpack.HeaderField{Name: k, Value: v} + hlSize += uint64(hf.Size()) + } + } + if hlSize > cc.peerMaxHeaderListSize { + return nil, errRequestHeaderListSize + } + + for k, vv := range req.Trailer { + // Transfer-Encoding, etc.. have already been filtered at the // start of RoundTrip lowKey := strings.ToLower(k) for _, v := range vv { cc.writeHeader(lowKey, v) } } - return cc.hbuf.Bytes() + return cc.hbuf.Bytes(), nil } func (cc *ClientConn) writeHeader(name, value string) { @@ -1246,7 +1385,9 @@ func (cc *ClientConn) streamByID(id uint32, andRemove bool) *clientStream { cc.idleTimer.Reset(cc.idleTimeout) } close(cs.done) - cc.cond.Broadcast() // wake up checkResetOrDone via clientStream.awaitFlowControl + // Wake up checkResetOrDone via clientStream.awaitFlowControl and + // wake up RoundTrip if there is a pending request. + cc.cond.Broadcast() } return cs } @@ -1254,17 +1395,12 @@ func (cc *ClientConn) streamByID(id uint32, andRemove bool) *clientStream { // clientConnReadLoop is the state owned by the clientConn's frame-reading readLoop. type clientConnReadLoop struct { cc *ClientConn - activeRes map[uint32]*clientStream // keyed by streamID closeWhenIdle bool } // readLoop runs in its own goroutine and reads and dispatches frames. func (cc *ClientConn) readLoop() { - rl := &clientConnReadLoop{ - cc: cc, - activeRes: make(map[uint32]*clientStream), - } - + rl := &clientConnReadLoop{cc: cc} defer rl.cleanup() cc.readerErr = rl.run() if ce, ok := cc.readerErr.(ConnectionError); ok { @@ -1319,10 +1455,8 @@ func (rl *clientConnReadLoop) cleanup() { } else if err == io.EOF { err = io.ErrUnexpectedEOF } - for _, cs := range rl.activeRes { - cs.bufPipe.CloseWithError(err) - } for _, cs := range cc.streams { + cs.bufPipe.CloseWithError(err) // no-op if already closed select { case cs.resc <- resAndError{err: err}: default: @@ -1345,8 +1479,9 @@ func (rl *clientConnReadLoop) run() error { cc.vlogf("http2: Transport readFrame error on conn %p: (%T) %v", cc, err, err) } if se, ok := err.(StreamError); ok { - if cs := cc.streamByID(se.StreamID, true /*ended; remove it*/); cs != nil { + if cs := cc.streamByID(se.StreamID, false); cs != nil { cs.cc.writeStreamReset(cs.ID, se.Code, err) + cs.cc.forgetStreamID(cs.ID) if se.Cause == nil { se.Cause = cc.fr.errDetail } @@ -1399,7 +1534,7 @@ func (rl *clientConnReadLoop) run() error { } return err } - if rl.closeWhenIdle && gotReply && maybeIdle && len(rl.activeRes) == 0 { + if rl.closeWhenIdle && gotReply && maybeIdle { cc.closeIfIdle() } } @@ -1407,13 +1542,31 @@ func (rl *clientConnReadLoop) run() error { func (rl *clientConnReadLoop) processHeaders(f *MetaHeadersFrame) error { cc := rl.cc - cs := cc.streamByID(f.StreamID, f.StreamEnded()) + cs := cc.streamByID(f.StreamID, false) if cs == nil { // We'd get here if we canceled a request while the // server had its response still in flight. So if this // was just something we canceled, ignore it. return nil } + if f.StreamEnded() { + // Issue 20521: If the stream has ended, streamByID() causes + // clientStream.done to be closed, which causes the request's bodyWriter + // to be closed with an errStreamClosed, which may be received by + // clientConn.RoundTrip before the result of processing these headers. + // Deferring stream closure allows the header processing to occur first. + // clientConn.RoundTrip may still receive the bodyWriter error first, but + // the fix for issue 16102 prioritises any response. + // + // Issue 22413: If there is no request body, we should close the + // stream before writing to cs.resc so that the stream is closed + // immediately once RoundTrip returns. + if cs.req.Body != nil { + defer cc.forgetStreamID(f.StreamID) + } else { + cc.forgetStreamID(f.StreamID) + } + } if !cs.firstByte { if cs.trace != nil { // TODO(bradfitz): move first response byte earlier, @@ -1437,6 +1590,7 @@ func (rl *clientConnReadLoop) processHeaders(f *MetaHeadersFrame) error { } // Any other error type is a stream error. cs.cc.writeStreamReset(f.StreamID, ErrCodeProtocol, err) + cc.forgetStreamID(cs.ID) cs.resc <- resAndError{err: err} return nil // return nil from process* funcs to keep conn alive } @@ -1444,9 +1598,6 @@ func (rl *clientConnReadLoop) processHeaders(f *MetaHeadersFrame) error { // (nil, nil) special case. See handleResponse docs. return nil } - if res.Body != noBody { - rl.activeRes[cs.ID] = cs - } cs.resTrailer = &res.Trailer cs.resc <- resAndError{res: res} return nil @@ -1466,11 +1617,11 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra status := f.PseudoValue("status") if status == "" { - return nil, errors.New("missing status pseudo header") + return nil, errors.New("malformed response from server: missing status pseudo header") } statusCode, err := strconv.Atoi(status) if err != nil { - return nil, errors.New("malformed non-numeric status pseudo header") + return nil, errors.New("malformed response from server: malformed non-numeric status pseudo header") } if statusCode == 100 { @@ -1668,6 +1819,7 @@ func (b transportResponseBody) Close() error { } cs.bufPipe.BreakWithError(errClosedResponseBody) + cc.forgetStreamID(cs.ID) return nil } @@ -1702,7 +1854,23 @@ func (rl *clientConnReadLoop) processData(f *DataFrame) error { } return nil } + if !cs.firstByte { + cc.logf("protocol error: received DATA before a HEADERS frame") + rl.endStreamError(cs, StreamError{ + StreamID: f.StreamID, + Code: ErrCodeProtocol, + }) + return nil + } if f.Length > 0 { + if cs.req.Method == "HEAD" && len(data) > 0 { + cc.logf("protocol error: received DATA on a HEAD request") + rl.endStreamError(cs, StreamError{ + StreamID: f.StreamID, + Code: ErrCodeProtocol, + }) + return nil + } // Check connection-level flow control. cc.mu.Lock() if cs.inflow.available() >= int32(f.Length) { @@ -1713,16 +1881,27 @@ func (rl *clientConnReadLoop) processData(f *DataFrame) error { } // Return any padded flow control now, since we won't // refund it later on body reads. - if pad := int32(f.Length) - int32(len(data)); pad > 0 { - cs.inflow.add(pad) - cc.inflow.add(pad) + var refund int + if pad := int(f.Length) - len(data); pad > 0 { + refund += pad + } + // Return len(data) now if the stream is already closed, + // since data will never be read. + didReset := cs.didReset + if didReset { + refund += len(data) + } + if refund > 0 { + cc.inflow.add(int32(refund)) cc.wmu.Lock() - cc.fr.WriteWindowUpdate(0, uint32(pad)) - cc.fr.WriteWindowUpdate(cs.ID, uint32(pad)) + cc.fr.WriteWindowUpdate(0, uint32(refund)) + if !didReset { + cs.inflow.add(int32(refund)) + cc.fr.WriteWindowUpdate(cs.ID, uint32(refund)) + } cc.bw.Flush() cc.wmu.Unlock() } - didReset := cs.didReset cc.mu.Unlock() if len(data) > 0 && !didReset { @@ -1753,11 +1932,10 @@ func (rl *clientConnReadLoop) endStreamError(cs *clientStream, err error) { err = io.EOF code = cs.copyTrailers } - cs.bufPipe.closeWithErrorAndCode(err, code) - delete(rl.activeRes, cs.ID) if isConnectionCloseRequest(cs.req) { rl.closeWhenIdle = true } + cs.bufPipe.closeWithErrorAndCode(err, code) select { case cs.resc <- resAndError{err: err}: @@ -1805,6 +1983,8 @@ func (rl *clientConnReadLoop) processSettings(f *SettingsFrame) error { cc.maxFrameSize = s.Val case SettingMaxConcurrentStreams: cc.maxConcurrentStreams = s.Val + case SettingMaxHeaderListSize: + cc.peerMaxHeaderListSize = uint64(s.Val) case SettingInitialWindowSize: // Values above the maximum flow-control // window size of 2^31-1 MUST be treated as a @@ -1882,7 +2062,6 @@ func (rl *clientConnReadLoop) processResetStream(f *RSTStreamFrame) error { cs.bufPipe.CloseWithError(err) cs.cc.cond.Broadcast() // wake up checkResetOrDone via clientStream.awaitFlowControl } - delete(rl.activeRes, cs.ID) return nil } @@ -1971,6 +2150,7 @@ func (cc *ClientConn) writeStreamReset(streamID uint32, code ErrCode, err error) var ( errResponseHeaderListSize = errors.New("http2: response header list larger than advertised limit") + errRequestHeaderListSize = errors.New("http2: request header list larger than peer's advertised limit") errPseudoTrailers = errors.New("http2: invalid pseudo header in trailers") ) diff --git a/vendor/golang.org/x/net/http2/transport_test.go b/vendor/golang.org/x/net/http2/transport_test.go index 128ed0d..fe04bd2 100644 --- a/vendor/golang.org/x/net/http2/transport_test.go +++ b/vendor/golang.org/x/net/http2/transport_test.go @@ -13,9 +13,11 @@ import ( "fmt" "io" "io/ioutil" + "log" "math/rand" "net" "net/http" + "net/http/httptest" "net/url" "os" "reflect" @@ -417,6 +419,11 @@ func TestActualContentLength(t *testing.T) { req: &http.Request{Body: panicReader{}, ContentLength: 5}, want: 5, }, + // http.NoBody means 0, not -1. + 3: { + req: &http.Request{Body: go18httpNoBody()}, + want: 0, + }, } for i, tt := range tests { got := actualContentLength(tt.req) @@ -680,7 +687,7 @@ func newLocalListener(t *testing.T) net.Listener { return ln } -func (ct *clientTester) greet() { +func (ct *clientTester) greet(settings ...Setting) { buf := make([]byte, len(ClientPreface)) _, err := io.ReadFull(ct.sc, buf) if err != nil { @@ -694,7 +701,7 @@ func (ct *clientTester) greet() { ct.t.Fatalf("Wanted client settings frame; got %v", f) _ = sf // stash it away? } - if err := ct.fr.WriteSettings(); err != nil { + if err := ct.fr.WriteSettings(settings...); err != nil { ct.t.Fatal(err) } if err := ct.fr.WriteSettingsAck(); err != nil { @@ -1365,6 +1372,269 @@ func testInvalidTrailer(t *testing.T, trailers headerType, wantErr error, writeT ct.run() } +// headerListSize returns the HTTP2 header list size of h. +// http://httpwg.org/specs/rfc7540.html#SETTINGS_MAX_HEADER_LIST_SIZE +// http://httpwg.org/specs/rfc7540.html#MaxHeaderBlock +func headerListSize(h http.Header) (size uint32) { + for k, vv := range h { + for _, v := range vv { + hf := hpack.HeaderField{Name: k, Value: v} + size += hf.Size() + } + } + return size +} + +// padHeaders adds data to an http.Header until headerListSize(h) == +// limit. Due to the way header list sizes are calculated, padHeaders +// cannot add fewer than len("Pad-Headers") + 32 bytes to h, and will +// call t.Fatal if asked to do so. PadHeaders first reserves enough +// space for an empty "Pad-Headers" key, then adds as many copies of +// filler as possible. Any remaining bytes necessary to push the +// header list size up to limit are added to h["Pad-Headers"]. +func padHeaders(t *testing.T, h http.Header, limit uint64, filler string) { + if limit > 0xffffffff { + t.Fatalf("padHeaders: refusing to pad to more than 2^32-1 bytes. limit = %v", limit) + } + hf := hpack.HeaderField{Name: "Pad-Headers", Value: ""} + minPadding := uint64(hf.Size()) + size := uint64(headerListSize(h)) + + minlimit := size + minPadding + if limit < minlimit { + t.Fatalf("padHeaders: limit %v < %v", limit, minlimit) + } + + // Use a fixed-width format for name so that fieldSize + // remains constant. + nameFmt := "Pad-Headers-%06d" + hf = hpack.HeaderField{Name: fmt.Sprintf(nameFmt, 1), Value: filler} + fieldSize := uint64(hf.Size()) + + // Add as many complete filler values as possible, leaving + // room for at least one empty "Pad-Headers" key. + limit = limit - minPadding + for i := 0; size+fieldSize < limit; i++ { + name := fmt.Sprintf(nameFmt, i) + h.Add(name, filler) + size += fieldSize + } + + // Add enough bytes to reach limit. + remain := limit - size + lastValue := strings.Repeat("*", int(remain)) + h.Add("Pad-Headers", lastValue) +} + +func TestPadHeaders(t *testing.T) { + check := func(h http.Header, limit uint32, fillerLen int) { + if h == nil { + h = make(http.Header) + } + filler := strings.Repeat("f", fillerLen) + padHeaders(t, h, uint64(limit), filler) + gotSize := headerListSize(h) + if gotSize != limit { + t.Errorf("Got size = %v; want %v", gotSize, limit) + } + } + // Try all possible combinations for small fillerLen and limit. + hf := hpack.HeaderField{Name: "Pad-Headers", Value: ""} + minLimit := hf.Size() + for limit := minLimit; limit <= 128; limit++ { + for fillerLen := 0; uint32(fillerLen) <= limit; fillerLen++ { + check(nil, limit, fillerLen) + } + } + + // Try a few tests with larger limits, plus cumulative + // tests. Since these tests are cumulative, tests[i+1].limit + // must be >= tests[i].limit + minLimit. See the comment on + // padHeaders for more info on why the limit arg has this + // restriction. + tests := []struct { + fillerLen int + limit uint32 + }{ + { + fillerLen: 64, + limit: 1024, + }, + { + fillerLen: 1024, + limit: 1286, + }, + { + fillerLen: 256, + limit: 2048, + }, + { + fillerLen: 1024, + limit: 10 * 1024, + }, + { + fillerLen: 1023, + limit: 11 * 1024, + }, + } + h := make(http.Header) + for _, tc := range tests { + check(nil, tc.limit, tc.fillerLen) + check(h, tc.limit, tc.fillerLen) + } +} + +func TestTransportChecksRequestHeaderListSize(t *testing.T) { + st := newServerTester(t, + func(w http.ResponseWriter, r *http.Request) { + // Consume body & force client to send + // trailers before writing response. + // ioutil.ReadAll returns non-nil err for + // requests that attempt to send greater than + // maxHeaderListSize bytes of trailers, since + // those requests generate a stream reset. + ioutil.ReadAll(r.Body) + r.Body.Close() + }, + func(ts *httptest.Server) { + ts.Config.MaxHeaderBytes = 16 << 10 + }, + optOnlyServer, + optQuiet, + ) + defer st.Close() + + tr := &Transport{TLSClientConfig: tlsConfigInsecure} + defer tr.CloseIdleConnections() + + checkRoundTrip := func(req *http.Request, wantErr error, desc string) { + res, err := tr.RoundTrip(req) + if err != wantErr { + if res != nil { + res.Body.Close() + } + t.Errorf("%v: RoundTrip err = %v; want %v", desc, err, wantErr) + return + } + if err == nil { + if res == nil { + t.Errorf("%v: response nil; want non-nil.", desc) + return + } + defer res.Body.Close() + if res.StatusCode != http.StatusOK { + t.Errorf("%v: response status = %v; want %v", desc, res.StatusCode, http.StatusOK) + } + return + } + if res != nil { + t.Errorf("%v: RoundTrip err = %v but response non-nil", desc, err) + } + } + headerListSizeForRequest := func(req *http.Request) (size uint64) { + contentLen := actualContentLength(req) + trailers, err := commaSeparatedTrailers(req) + if err != nil { + t.Fatalf("headerListSizeForRequest: %v", err) + } + cc := &ClientConn{peerMaxHeaderListSize: 0xffffffffffffffff} + cc.henc = hpack.NewEncoder(&cc.hbuf) + cc.mu.Lock() + hdrs, err := cc.encodeHeaders(req, true, trailers, contentLen) + cc.mu.Unlock() + if err != nil { + t.Fatalf("headerListSizeForRequest: %v", err) + } + hpackDec := hpack.NewDecoder(initialHeaderTableSize, func(hf hpack.HeaderField) { + size += uint64(hf.Size()) + }) + if len(hdrs) > 0 { + if _, err := hpackDec.Write(hdrs); err != nil { + t.Fatalf("headerListSizeForRequest: %v", err) + } + } + return size + } + // Create a new Request for each test, rather than reusing the + // same Request, to avoid a race when modifying req.Headers. + // See https://github.com/golang/go/issues/21316 + newRequest := func() *http.Request { + // Body must be non-nil to enable writing trailers. + body := strings.NewReader("hello") + req, err := http.NewRequest("POST", st.ts.URL, body) + if err != nil { + t.Fatalf("newRequest: NewRequest: %v", err) + } + return req + } + + // Make an arbitrary request to ensure we get the server's + // settings frame and initialize peerMaxHeaderListSize. + req := newRequest() + checkRoundTrip(req, nil, "Initial request") + + // Get the ClientConn associated with the request and validate + // peerMaxHeaderListSize. + addr := authorityAddr(req.URL.Scheme, req.URL.Host) + cc, err := tr.connPool().GetClientConn(req, addr) + if err != nil { + t.Fatalf("GetClientConn: %v", err) + } + cc.mu.Lock() + peerSize := cc.peerMaxHeaderListSize + cc.mu.Unlock() + st.scMu.Lock() + wantSize := uint64(st.sc.maxHeaderListSize()) + st.scMu.Unlock() + if peerSize != wantSize { + t.Errorf("peerMaxHeaderListSize = %v; want %v", peerSize, wantSize) + } + + // Sanity check peerSize. (*serverConn) maxHeaderListSize adds + // 320 bytes of padding. + wantHeaderBytes := uint64(st.ts.Config.MaxHeaderBytes) + 320 + if peerSize != wantHeaderBytes { + t.Errorf("peerMaxHeaderListSize = %v; want %v.", peerSize, wantHeaderBytes) + } + + // Pad headers & trailers, but stay under peerSize. + req = newRequest() + req.Header = make(http.Header) + req.Trailer = make(http.Header) + filler := strings.Repeat("*", 1024) + padHeaders(t, req.Trailer, peerSize, filler) + // cc.encodeHeaders adds some default headers to the request, + // so we need to leave room for those. + defaultBytes := headerListSizeForRequest(req) + padHeaders(t, req.Header, peerSize-defaultBytes, filler) + checkRoundTrip(req, nil, "Headers & Trailers under limit") + + // Add enough header bytes to push us over peerSize. + req = newRequest() + req.Header = make(http.Header) + padHeaders(t, req.Header, peerSize, filler) + checkRoundTrip(req, errRequestHeaderListSize, "Headers over limit") + + // Push trailers over the limit. + req = newRequest() + req.Trailer = make(http.Header) + padHeaders(t, req.Trailer, peerSize+1, filler) + checkRoundTrip(req, errRequestHeaderListSize, "Trailers over limit") + + // Send headers with a single large value. + req = newRequest() + filler = strings.Repeat("*", int(peerSize)) + req.Header = make(http.Header) + req.Header.Set("Big", filler) + checkRoundTrip(req, errRequestHeaderListSize, "Single large header") + + // Send trailers with a single large value. + req = newRequest() + req.Trailer = make(http.Header) + req.Trailer.Set("Big", filler) + checkRoundTrip(req, errRequestHeaderListSize, "Single large trailer") +} + func TestTransportChecksResponseHeaderListSize(t *testing.T) { ct := newClientTester(t) ct.client = func() error { @@ -1423,7 +1693,7 @@ func TestTransportChecksResponseHeaderListSize(t *testing.T) { ct.run() } -// Test that the the Transport returns a typed error from Response.Body.Read calls +// Test that the Transport returns a typed error from Response.Body.Read calls // when the server sends an error. (here we use a panic, since that should generate // a stream error, but others like cancel should be similar) func TestTransportBodyReadErrorType(t *testing.T) { @@ -2021,6 +2291,65 @@ func TestTransportReadHeadResponse(t *testing.T) { ct.run() } +func TestTransportReadHeadResponseWithBody(t *testing.T) { + // This test use not valid response format. + // Discarding logger output to not spam tests output. + log.SetOutput(ioutil.Discard) + defer log.SetOutput(os.Stderr) + + response := "redirecting to /elsewhere" + ct := newClientTester(t) + clientDone := make(chan struct{}) + ct.client = func() error { + defer close(clientDone) + req, _ := http.NewRequest("HEAD", "https://dummy.tld/", nil) + res, err := ct.tr.RoundTrip(req) + if err != nil { + return err + } + if res.ContentLength != int64(len(response)) { + return fmt.Errorf("Content-Length = %d; want %d", res.ContentLength, len(response)) + } + slurp, err := ioutil.ReadAll(res.Body) + if err != nil { + return fmt.Errorf("ReadAll: %v", err) + } + if len(slurp) > 0 { + return fmt.Errorf("Unexpected non-empty ReadAll body: %q", slurp) + } + return nil + } + ct.server = func() error { + ct.greet() + for { + f, err := ct.fr.ReadFrame() + if err != nil { + t.Logf("ReadFrame: %v", err) + return nil + } + hf, ok := f.(*HeadersFrame) + if !ok { + continue + } + var buf bytes.Buffer + enc := hpack.NewEncoder(&buf) + enc.WriteField(hpack.HeaderField{Name: ":status", Value: "200"}) + enc.WriteField(hpack.HeaderField{Name: "content-length", Value: strconv.Itoa(len(response))}) + ct.fr.WriteHeaders(HeadersFrameParam{ + StreamID: hf.StreamID, + EndHeaders: true, + EndStream: false, + BlockFragment: buf.Bytes(), + }) + ct.fr.WriteData(hf.StreamID, true, []byte(response)) + + <-clientDone + return nil + } + } + ct.run() +} + type neverEnding byte func (b neverEnding) Read(p []byte) (int, error) { @@ -2205,12 +2534,11 @@ func testTransportUsesGoAwayDebugError(t *testing.T, failMidBody bool) { ct.run() } -// See golang.org/issue/16481 -func TestTransportReturnsUnusedFlowControl(t *testing.T) { +func testTransportReturnsUnusedFlowControl(t *testing.T, oneDataFrame bool) { ct := newClientTester(t) - clientClosed := make(chan bool, 1) - serverWroteBody := make(chan bool, 1) + clientClosed := make(chan struct{}) + serverWroteFirstByte := make(chan struct{}) ct.client = func() error { req, _ := http.NewRequest("GET", "https://dummy.tld/", nil) @@ -2218,13 +2546,13 @@ func TestTransportReturnsUnusedFlowControl(t *testing.T) { if err != nil { return err } - <-serverWroteBody + <-serverWroteFirstByte if n, err := res.Body.Read(make([]byte, 1)); err != nil || n != 1 { return fmt.Errorf("body read = %v, %v; want 1, nil", n, err) } res.Body.Close() // leaving 4999 bytes unread - clientClosed <- true + close(clientClosed) return nil } @@ -2259,10 +2587,27 @@ func TestTransportReturnsUnusedFlowControl(t *testing.T) { EndStream: false, BlockFragment: buf.Bytes(), }) - ct.fr.WriteData(hf.StreamID, false, make([]byte, 5000)) // without ending stream - serverWroteBody <- true - <-clientClosed + // Two cases: + // - Send one DATA frame with 5000 bytes. + // - Send two DATA frames with 1 and 4999 bytes each. + // + // In both cases, the client should consume one byte of data, + // refund that byte, then refund the following 4999 bytes. + // + // In the second case, the server waits for the client connection to + // close before seconding the second DATA frame. This tests the case + // where the client receives a DATA frame after it has reset the stream. + if oneDataFrame { + ct.fr.WriteData(hf.StreamID, false /* don't end stream */, make([]byte, 5000)) + close(serverWroteFirstByte) + <-clientClosed + } else { + ct.fr.WriteData(hf.StreamID, false /* don't end stream */, make([]byte, 1)) + close(serverWroteFirstByte) + <-clientClosed + ct.fr.WriteData(hf.StreamID, false /* don't end stream */, make([]byte, 4999)) + } waitingFor := "RSTStreamFrame" for { @@ -2276,7 +2621,7 @@ func TestTransportReturnsUnusedFlowControl(t *testing.T) { switch waitingFor { case "RSTStreamFrame": if rf, ok := f.(*RSTStreamFrame); !ok || rf.ErrCode != ErrCodeCancel { - return fmt.Errorf("Expected a WindowUpdateFrame with code cancel; got %v", summarizeFrame(f)) + return fmt.Errorf("Expected a RSTStreamFrame with code cancel; got %v", summarizeFrame(f)) } waitingFor = "WindowUpdateFrame" case "WindowUpdateFrame": @@ -2290,6 +2635,16 @@ func TestTransportReturnsUnusedFlowControl(t *testing.T) { ct.run() } +// See golang.org/issue/16481 +func TestTransportReturnsUnusedFlowControlSingleWrite(t *testing.T) { + testTransportReturnsUnusedFlowControl(t, true) +} + +// See golang.org/issue/20469 +func TestTransportReturnsUnusedFlowControlMultipleWrites(t *testing.T) { + testTransportReturnsUnusedFlowControl(t, false) +} + // Issue 16612: adjust flow control on open streams when transport // receives SETTINGS with INITIAL_WINDOW_SIZE from server. func TestTransportAdjustsFlowControl(t *testing.T) { @@ -2529,7 +2884,7 @@ func TestTransportBodyDoubleEndStream(t *testing.T) { } } -// golangorg/issue/16847 +// golang.org/issue/16847, golang.org/issue/19103 func TestTransportRequestPathPseudo(t *testing.T) { type result struct { path string @@ -2549,9 +2904,9 @@ func TestTransportRequestPathPseudo(t *testing.T) { }, want: result{path: "/foo"}, }, - // I guess we just don't let users request "//foo" as - // a path, since it's illegal to start with two - // slashes.... + // In Go 1.7, we accepted paths of "//foo". + // In Go 1.8, we rejected it (issue 16847). + // In Go 1.9, we accepted it again (issue 19103). 1: { req: &http.Request{ Method: "GET", @@ -2560,7 +2915,7 @@ func TestTransportRequestPathPseudo(t *testing.T) { Path: "//foo", }, }, - want: result{err: `invalid request :path "//foo"`}, + want: result{path: "//foo"}, }, // Opaque with //$Matching_Hostname/path @@ -2631,7 +2986,7 @@ func TestTransportRequestPathPseudo(t *testing.T) { }, } for i, tt := range tests { - cc := &ClientConn{} + cc := &ClientConn{peerMaxHeaderListSize: 0xffffffffffffffff} cc.henc = hpack.NewEncoder(&cc.hbuf) cc.mu.Lock() hdrs, err := cc.encodeHeaders(tt.req, false, "", -1) @@ -2748,6 +3103,34 @@ func TestTransportCancelDataResponseRace(t *testing.T) { } } +// Issue 21316: It should be safe to reuse an http.Request after the +// request has completed. +func TestTransportNoRaceOnRequestObjectAfterRequestComplete(t *testing.T) { + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(200) + io.WriteString(w, "body") + }, optOnlyServer) + defer st.Close() + + tr := &Transport{TLSClientConfig: tlsConfigInsecure} + defer tr.CloseIdleConnections() + + req, _ := http.NewRequest("GET", st.ts.URL, nil) + resp, err := tr.RoundTrip(req) + if err != nil { + t.Fatal(err) + } + if _, err = io.Copy(ioutil.Discard, resp.Body); err != nil { + t.Fatalf("error reading response body: %v", err) + } + if err := resp.Body.Close(); err != nil { + t.Fatalf("error closing response body: %v", err) + } + + // This access of req.Header should not race with code in the transport. + req.Header = http.Header{} +} + func TestTransportRetryAfterGOAWAY(t *testing.T) { var dialer struct { sync.Mutex @@ -2895,6 +3278,344 @@ func TestTransportRetryAfterGOAWAY(t *testing.T) { } } +func TestTransportRetryAfterRefusedStream(t *testing.T) { + clientDone := make(chan struct{}) + ct := newClientTester(t) + ct.client = func() error { + defer ct.cc.(*net.TCPConn).CloseWrite() + defer close(clientDone) + req, _ := http.NewRequest("GET", "https://dummy.tld/", nil) + resp, err := ct.tr.RoundTrip(req) + if err != nil { + return fmt.Errorf("RoundTrip: %v", err) + } + resp.Body.Close() + if resp.StatusCode != 204 { + return fmt.Errorf("Status = %v; want 204", resp.StatusCode) + } + return nil + } + ct.server = func() error { + ct.greet() + var buf bytes.Buffer + enc := hpack.NewEncoder(&buf) + nreq := 0 + + for { + f, err := ct.fr.ReadFrame() + if err != nil { + select { + case <-clientDone: + // If the client's done, it + // will have reported any + // errors on its side. + return nil + default: + return err + } + } + switch f := f.(type) { + case *WindowUpdateFrame, *SettingsFrame: + case *HeadersFrame: + if !f.HeadersEnded() { + return fmt.Errorf("headers should have END_HEADERS be ended: %v", f) + } + nreq++ + if nreq == 1 { + ct.fr.WriteRSTStream(f.StreamID, ErrCodeRefusedStream) + } else { + enc.WriteField(hpack.HeaderField{Name: ":status", Value: "204"}) + ct.fr.WriteHeaders(HeadersFrameParam{ + StreamID: f.StreamID, + EndHeaders: true, + EndStream: true, + BlockFragment: buf.Bytes(), + }) + } + default: + return fmt.Errorf("Unexpected client frame %v", f) + } + } + } + ct.run() +} + +func TestTransportRetryHasLimit(t *testing.T) { + // Skip in short mode because the total expected delay is 1s+2s+4s+8s+16s=29s. + if testing.Short() { + t.Skip("skipping long test in short mode") + } + clientDone := make(chan struct{}) + ct := newClientTester(t) + ct.client = func() error { + defer ct.cc.(*net.TCPConn).CloseWrite() + defer close(clientDone) + req, _ := http.NewRequest("GET", "https://dummy.tld/", nil) + resp, err := ct.tr.RoundTrip(req) + if err == nil { + return fmt.Errorf("RoundTrip expected error, got response: %+v", resp) + } + t.Logf("expected error, got: %v", err) + return nil + } + ct.server = func() error { + ct.greet() + for { + f, err := ct.fr.ReadFrame() + if err != nil { + select { + case <-clientDone: + // If the client's done, it + // will have reported any + // errors on its side. + return nil + default: + return err + } + } + switch f := f.(type) { + case *WindowUpdateFrame, *SettingsFrame: + case *HeadersFrame: + if !f.HeadersEnded() { + return fmt.Errorf("headers should have END_HEADERS be ended: %v", f) + } + ct.fr.WriteRSTStream(f.StreamID, ErrCodeRefusedStream) + default: + return fmt.Errorf("Unexpected client frame %v", f) + } + } + } + ct.run() +} + +func TestTransportResponseDataBeforeHeaders(t *testing.T) { + // This test use not valid response format. + // Discarding logger output to not spam tests output. + log.SetOutput(ioutil.Discard) + defer log.SetOutput(os.Stderr) + + ct := newClientTester(t) + ct.client = func() error { + defer ct.cc.(*net.TCPConn).CloseWrite() + req := httptest.NewRequest("GET", "https://dummy.tld/", nil) + // First request is normal to ensure the check is per stream and not per connection. + _, err := ct.tr.RoundTrip(req) + if err != nil { + return fmt.Errorf("RoundTrip expected no error, got: %v", err) + } + // Second request returns a DATA frame with no HEADERS. + resp, err := ct.tr.RoundTrip(req) + if err == nil { + return fmt.Errorf("RoundTrip expected error, got response: %+v", resp) + } + if err, ok := err.(StreamError); !ok || err.Code != ErrCodeProtocol { + return fmt.Errorf("expected stream PROTOCOL_ERROR, got: %v", err) + } + return nil + } + ct.server = func() error { + ct.greet() + for { + f, err := ct.fr.ReadFrame() + if err == io.EOF { + return nil + } else if err != nil { + return err + } + switch f := f.(type) { + case *WindowUpdateFrame, *SettingsFrame: + case *HeadersFrame: + switch f.StreamID { + case 1: + // Send a valid response to first request. + var buf bytes.Buffer + enc := hpack.NewEncoder(&buf) + enc.WriteField(hpack.HeaderField{Name: ":status", Value: "200"}) + ct.fr.WriteHeaders(HeadersFrameParam{ + StreamID: f.StreamID, + EndHeaders: true, + EndStream: true, + BlockFragment: buf.Bytes(), + }) + case 3: + ct.fr.WriteData(f.StreamID, true, []byte("payload")) + } + default: + return fmt.Errorf("Unexpected client frame %v", f) + } + } + } + ct.run() +} +func TestTransportRequestsStallAtServerLimit(t *testing.T) { + const maxConcurrent = 2 + + greet := make(chan struct{}) // server sends initial SETTINGS frame + gotRequest := make(chan struct{}) // server received a request + clientDone := make(chan struct{}) + + // Collect errors from goroutines. + var wg sync.WaitGroup + errs := make(chan error, 100) + defer func() { + wg.Wait() + close(errs) + for err := range errs { + t.Error(err) + } + }() + + // We will send maxConcurrent+2 requests. This checker goroutine waits for the + // following stages: + // 1. The first maxConcurrent requests are received by the server. + // 2. The client will cancel the next request + // 3. The server is unblocked so it can service the first maxConcurrent requests + // 4. The client will send the final request + wg.Add(1) + unblockClient := make(chan struct{}) + clientRequestCancelled := make(chan struct{}) + unblockServer := make(chan struct{}) + go func() { + defer wg.Done() + // Stage 1. + for k := 0; k < maxConcurrent; k++ { + <-gotRequest + } + // Stage 2. + close(unblockClient) + <-clientRequestCancelled + // Stage 3: give some time for the final RoundTrip call to be scheduled and + // verify that the final request is not sent. + time.Sleep(50 * time.Millisecond) + select { + case <-gotRequest: + errs <- errors.New("last request did not stall") + close(unblockServer) + return + default: + } + close(unblockServer) + // Stage 4. + <-gotRequest + }() + + ct := newClientTester(t) + ct.client = func() error { + var wg sync.WaitGroup + defer func() { + wg.Wait() + close(clientDone) + ct.cc.(*net.TCPConn).CloseWrite() + }() + for k := 0; k < maxConcurrent+2; k++ { + wg.Add(1) + go func(k int) { + defer wg.Done() + // Don't send the second request until after receiving SETTINGS from the server + // to avoid a race where we use the default SettingMaxConcurrentStreams, which + // is much larger than maxConcurrent. We have to send the first request before + // waiting because the first request triggers the dial and greet. + if k > 0 { + <-greet + } + // Block until maxConcurrent requests are sent before sending any more. + if k >= maxConcurrent { + <-unblockClient + } + req, _ := http.NewRequest("GET", fmt.Sprintf("https://dummy.tld/%d", k), nil) + if k == maxConcurrent { + // This request will be canceled. + cancel := make(chan struct{}) + req.Cancel = cancel + close(cancel) + _, err := ct.tr.RoundTrip(req) + close(clientRequestCancelled) + if err == nil { + errs <- fmt.Errorf("RoundTrip(%d) should have failed due to cancel", k) + return + } + } else { + resp, err := ct.tr.RoundTrip(req) + if err != nil { + errs <- fmt.Errorf("RoundTrip(%d): %v", k, err) + return + } + ioutil.ReadAll(resp.Body) + resp.Body.Close() + if resp.StatusCode != 204 { + errs <- fmt.Errorf("Status = %v; want 204", resp.StatusCode) + return + } + } + }(k) + } + return nil + } + + ct.server = func() error { + var wg sync.WaitGroup + defer wg.Wait() + + ct.greet(Setting{SettingMaxConcurrentStreams, maxConcurrent}) + + // Server write loop. + var buf bytes.Buffer + enc := hpack.NewEncoder(&buf) + writeResp := make(chan uint32, maxConcurrent+1) + + wg.Add(1) + go func() { + defer wg.Done() + <-unblockServer + for id := range writeResp { + buf.Reset() + enc.WriteField(hpack.HeaderField{Name: ":status", Value: "204"}) + ct.fr.WriteHeaders(HeadersFrameParam{ + StreamID: id, + EndHeaders: true, + EndStream: true, + BlockFragment: buf.Bytes(), + }) + } + }() + + // Server read loop. + var nreq int + for { + f, err := ct.fr.ReadFrame() + if err != nil { + select { + case <-clientDone: + // If the client's done, it will have reported any errors on its side. + return nil + default: + return err + } + } + switch f := f.(type) { + case *WindowUpdateFrame: + case *SettingsFrame: + // Wait for the client SETTINGS ack until ending the greet. + close(greet) + case *HeadersFrame: + if !f.HeadersEnded() { + return fmt.Errorf("headers should have END_HEADERS be ended: %v", f) + } + gotRequest <- struct{}{} + nreq++ + writeResp <- f.StreamID + if nreq == maxConcurrent+1 { + close(writeResp) + } + default: + return fmt.Errorf("Unexpected client frame %v", f) + } + } + } + + ct.run() +} + func TestAuthorityAddr(t *testing.T) { tests := []struct { scheme, authority string @@ -2969,3 +3690,158 @@ func TestTransportAllocationsAfterResponseBodyClose(t *testing.T) { t.Errorf("Handler Write err = %v; want errStreamClosed", gotErr) } } + +// Issue 18891: make sure Request.Body == NoBody means no DATA frame +// is ever sent, even if empty. +func TestTransportNoBodyMeansNoDATA(t *testing.T) { + ct := newClientTester(t) + + unblockClient := make(chan bool) + + ct.client = func() error { + req, _ := http.NewRequest("GET", "https://dummy.tld/", go18httpNoBody()) + ct.tr.RoundTrip(req) + <-unblockClient + return nil + } + ct.server = func() error { + defer close(unblockClient) + defer ct.cc.(*net.TCPConn).Close() + ct.greet() + + for { + f, err := ct.fr.ReadFrame() + if err != nil { + return fmt.Errorf("ReadFrame while waiting for Headers: %v", err) + } + switch f := f.(type) { + default: + return fmt.Errorf("Got %T; want HeadersFrame", f) + case *WindowUpdateFrame, *SettingsFrame: + continue + case *HeadersFrame: + if !f.StreamEnded() { + return fmt.Errorf("got headers frame without END_STREAM") + } + return nil + } + } + } + ct.run() +} + +func benchSimpleRoundTrip(b *testing.B, nHeaders int) { + defer disableGoroutineTracking()() + b.ReportAllocs() + st := newServerTester(b, + func(w http.ResponseWriter, r *http.Request) { + }, + optOnlyServer, + optQuiet, + ) + defer st.Close() + + tr := &Transport{TLSClientConfig: tlsConfigInsecure} + defer tr.CloseIdleConnections() + + req, err := http.NewRequest("GET", st.ts.URL, nil) + if err != nil { + b.Fatal(err) + } + + for i := 0; i < nHeaders; i++ { + name := fmt.Sprint("A-", i) + req.Header.Set(name, "*") + } + + b.ResetTimer() + + for i := 0; i < b.N; i++ { + res, err := tr.RoundTrip(req) + if err != nil { + if res != nil { + res.Body.Close() + } + b.Fatalf("RoundTrip err = %v; want nil", err) + } + res.Body.Close() + if res.StatusCode != http.StatusOK { + b.Fatalf("Response code = %v; want %v", res.StatusCode, http.StatusOK) + } + } +} + +type infiniteReader struct{} + +func (r infiniteReader) Read(b []byte) (int, error) { + return len(b), nil +} + +// Issue 20521: it is not an error to receive a response and end stream +// from the server without the body being consumed. +func TestTransportResponseAndResetWithoutConsumingBodyRace(t *testing.T) { + st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusOK) + }, optOnlyServer) + defer st.Close() + + tr := &Transport{TLSClientConfig: tlsConfigInsecure} + defer tr.CloseIdleConnections() + + // The request body needs to be big enough to trigger flow control. + req, _ := http.NewRequest("PUT", st.ts.URL, infiniteReader{}) + res, err := tr.RoundTrip(req) + if err != nil { + t.Fatal(err) + } + if res.StatusCode != http.StatusOK { + t.Fatalf("Response code = %v; want %v", res.StatusCode, http.StatusOK) + } +} + +// Verify transport doesn't crash when receiving bogus response lacking a :status header. +// Issue 22880. +func TestTransportHandlesInvalidStatuslessResponse(t *testing.T) { + ct := newClientTester(t) + ct.client = func() error { + req, _ := http.NewRequest("GET", "https://dummy.tld/", nil) + _, err := ct.tr.RoundTrip(req) + const substr = "malformed response from server: missing status pseudo header" + if !strings.Contains(fmt.Sprint(err), substr) { + return fmt.Errorf("RoundTrip error = %v; want substring %q", err, substr) + } + return nil + } + ct.server = func() error { + ct.greet() + var buf bytes.Buffer + enc := hpack.NewEncoder(&buf) + + for { + f, err := ct.fr.ReadFrame() + if err != nil { + return err + } + switch f := f.(type) { + case *HeadersFrame: + enc.WriteField(hpack.HeaderField{Name: "content-type", Value: "text/html"}) // no :status header + ct.fr.WriteHeaders(HeadersFrameParam{ + StreamID: f.StreamID, + EndHeaders: true, + EndStream: false, // we'll send some DATA to try to crash the transport + BlockFragment: buf.Bytes(), + }) + ct.fr.WriteData(f.StreamID, true, []byte("payload")) + return nil + } + } + } + ct.run() +} + +func BenchmarkClientRequestHeaders(b *testing.B) { + b.Run(" 0 Headers", func(b *testing.B) { benchSimpleRoundTrip(b, 0) }) + b.Run(" 10 Headers", func(b *testing.B) { benchSimpleRoundTrip(b, 10) }) + b.Run(" 100 Headers", func(b *testing.B) { benchSimpleRoundTrip(b, 100) }) + b.Run("1000 Headers", func(b *testing.B) { benchSimpleRoundTrip(b, 1000) }) +} diff --git a/vendor/golang.org/x/net/http2/write.go b/vendor/golang.org/x/net/http2/write.go index 6b0dfae..54ab4a8 100644 --- a/vendor/golang.org/x/net/http2/write.go +++ b/vendor/golang.org/x/net/http2/write.go @@ -10,7 +10,6 @@ import ( "log" "net/http" "net/url" - "time" "golang.org/x/net/http2/hpack" "golang.org/x/net/lex/httplex" @@ -90,11 +89,7 @@ type writeGoAway struct { func (p *writeGoAway) writeFrame(ctx writeContext) error { err := ctx.Framer().WriteGoAway(p.maxStreamID, p.code, nil) - if p.code != 0 { - ctx.Flush() // ignore error: we're hanging up on them anyway - time.Sleep(50 * time.Millisecond) - ctx.CloseConn() - } + ctx.Flush() // ignore error: we're hanging up on them anyway return err } diff --git a/vendor/golang.org/x/net/icmp/diag_test.go b/vendor/golang.org/x/net/icmp/diag_test.go new file mode 100644 index 0000000..2ecd465 --- /dev/null +++ b/vendor/golang.org/x/net/icmp/diag_test.go @@ -0,0 +1,274 @@ +// Copyright 2014 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. + +package icmp_test + +import ( + "errors" + "fmt" + "net" + "os" + "runtime" + "sync" + "testing" + "time" + + "golang.org/x/net/icmp" + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/nettest" + "golang.org/x/net/ipv4" + "golang.org/x/net/ipv6" +) + +type diagTest struct { + network, address string + protocol int + m icmp.Message +} + +func TestDiag(t *testing.T) { + if testing.Short() { + t.Skip("avoid external network") + } + + t.Run("Ping/NonPrivileged", func(t *testing.T) { + switch runtime.GOOS { + case "darwin": + case "linux": + t.Log("you may need to adjust the net.ipv4.ping_group_range kernel state") + default: + t.Logf("not supported on %s", runtime.GOOS) + return + } + for i, dt := range []diagTest{ + { + "udp4", "0.0.0.0", iana.ProtocolICMP, + icmp.Message{ + Type: ipv4.ICMPTypeEcho, Code: 0, + Body: &icmp.Echo{ + ID: os.Getpid() & 0xffff, + Data: []byte("HELLO-R-U-THERE"), + }, + }, + }, + + { + "udp6", "::", iana.ProtocolIPv6ICMP, + icmp.Message{ + Type: ipv6.ICMPTypeEchoRequest, Code: 0, + Body: &icmp.Echo{ + ID: os.Getpid() & 0xffff, + Data: []byte("HELLO-R-U-THERE"), + }, + }, + }, + } { + if err := doDiag(dt, i); err != nil { + t.Error(err) + } + } + }) + t.Run("Ping/Privileged", func(t *testing.T) { + if m, ok := nettest.SupportsRawIPSocket(); !ok { + t.Skip(m) + } + for i, dt := range []diagTest{ + { + "ip4:icmp", "0.0.0.0", iana.ProtocolICMP, + icmp.Message{ + Type: ipv4.ICMPTypeEcho, Code: 0, + Body: &icmp.Echo{ + ID: os.Getpid() & 0xffff, + Data: []byte("HELLO-R-U-THERE"), + }, + }, + }, + + { + "ip6:ipv6-icmp", "::", iana.ProtocolIPv6ICMP, + icmp.Message{ + Type: ipv6.ICMPTypeEchoRequest, Code: 0, + Body: &icmp.Echo{ + ID: os.Getpid() & 0xffff, + Data: []byte("HELLO-R-U-THERE"), + }, + }, + }, + } { + if err := doDiag(dt, i); err != nil { + t.Error(err) + } + } + }) + t.Run("Probe/Privileged", func(t *testing.T) { + if m, ok := nettest.SupportsRawIPSocket(); !ok { + t.Skip(m) + } + for i, dt := range []diagTest{ + { + "ip4:icmp", "0.0.0.0", iana.ProtocolICMP, + icmp.Message{ + Type: ipv4.ICMPTypeExtendedEchoRequest, Code: 0, + Body: &icmp.ExtendedEchoRequest{ + ID: os.Getpid() & 0xffff, + Local: true, + Extensions: []icmp.Extension{ + &icmp.InterfaceIdent{ + Class: 3, Type: 1, + Name: "doesnotexist", + }, + }, + }, + }, + }, + + { + "ip6:ipv6-icmp", "::", iana.ProtocolIPv6ICMP, + icmp.Message{ + Type: ipv6.ICMPTypeExtendedEchoRequest, Code: 0, + Body: &icmp.ExtendedEchoRequest{ + ID: os.Getpid() & 0xffff, + Local: true, + Extensions: []icmp.Extension{ + &icmp.InterfaceIdent{ + Class: 3, Type: 1, + Name: "doesnotexist", + }, + }, + }, + }, + }, + } { + if err := doDiag(dt, i); err != nil { + t.Error(err) + } + } + }) +} + +func doDiag(dt diagTest, seq int) error { + c, err := icmp.ListenPacket(dt.network, dt.address) + if err != nil { + return err + } + defer c.Close() + + dst, err := googleAddr(c, dt.protocol) + if err != nil { + return err + } + + if dt.network != "udp6" && dt.protocol == iana.ProtocolIPv6ICMP { + var f ipv6.ICMPFilter + f.SetAll(true) + f.Accept(ipv6.ICMPTypeDestinationUnreachable) + f.Accept(ipv6.ICMPTypePacketTooBig) + f.Accept(ipv6.ICMPTypeTimeExceeded) + f.Accept(ipv6.ICMPTypeParameterProblem) + f.Accept(ipv6.ICMPTypeEchoReply) + f.Accept(ipv6.ICMPTypeExtendedEchoReply) + if err := c.IPv6PacketConn().SetICMPFilter(&f); err != nil { + return err + } + } + + switch m := dt.m.Body.(type) { + case *icmp.Echo: + m.Seq = 1 << uint(seq) + case *icmp.ExtendedEchoRequest: + m.Seq = 1 << uint(seq) + } + wb, err := dt.m.Marshal(nil) + if err != nil { + return err + } + if n, err := c.WriteTo(wb, dst); err != nil { + return err + } else if n != len(wb) { + return fmt.Errorf("got %v; want %v", n, len(wb)) + } + + rb := make([]byte, 1500) + if err := c.SetReadDeadline(time.Now().Add(3 * time.Second)); err != nil { + return err + } + n, peer, err := c.ReadFrom(rb) + if err != nil { + return err + } + rm, err := icmp.ParseMessage(dt.protocol, rb[:n]) + if err != nil { + return err + } + switch { + case dt.m.Type == ipv4.ICMPTypeEcho && rm.Type == ipv4.ICMPTypeEchoReply: + fallthrough + case dt.m.Type == ipv6.ICMPTypeEchoRequest && rm.Type == ipv6.ICMPTypeEchoReply: + fallthrough + case dt.m.Type == ipv4.ICMPTypeExtendedEchoRequest && rm.Type == ipv4.ICMPTypeExtendedEchoReply: + fallthrough + case dt.m.Type == ipv6.ICMPTypeExtendedEchoRequest && rm.Type == ipv6.ICMPTypeExtendedEchoReply: + return nil + default: + return fmt.Errorf("got %+v from %v; want echo reply or extended echo reply", rm, peer) + } +} + +func googleAddr(c *icmp.PacketConn, protocol int) (net.Addr, error) { + host := "ipv4.google.com" + if protocol == iana.ProtocolIPv6ICMP { + host = "ipv6.google.com" + } + ips, err := net.LookupIP(host) + if err != nil { + return nil, err + } + netaddr := func(ip net.IP) (net.Addr, error) { + switch c.LocalAddr().(type) { + case *net.UDPAddr: + return &net.UDPAddr{IP: ip}, nil + case *net.IPAddr: + return &net.IPAddr{IP: ip}, nil + default: + return nil, errors.New("neither UDPAddr nor IPAddr") + } + } + if len(ips) > 0 { + return netaddr(ips[0]) + } + return nil, errors.New("no A or AAAA record") +} + +func TestConcurrentNonPrivilegedListenPacket(t *testing.T) { + if testing.Short() { + t.Skip("avoid external network") + } + switch runtime.GOOS { + case "darwin": + case "linux": + t.Log("you may need to adjust the net.ipv4.ping_group_range kernel state") + default: + t.Skipf("not supported on %s", runtime.GOOS) + } + + network, address := "udp4", "127.0.0.1" + if !nettest.SupportsIPv4() { + network, address = "udp6", "::1" + } + const N = 1000 + var wg sync.WaitGroup + wg.Add(N) + for i := 0; i < N; i++ { + go func() { + defer wg.Done() + c, err := icmp.ListenPacket(network, address) + if err != nil { + t.Error(err) + return + } + c.Close() + }() + } + wg.Wait() +} diff --git a/vendor/golang.org/x/net/icmp/dstunreach.go b/vendor/golang.org/x/net/icmp/dstunreach.go index 75db991..7464bf7 100644 --- a/vendor/golang.org/x/net/icmp/dstunreach.go +++ b/vendor/golang.org/x/net/icmp/dstunreach.go @@ -16,24 +16,24 @@ func (p *DstUnreach) Len(proto int) int { if p == nil { return 0 } - l, _ := multipartMessageBodyDataLen(proto, p.Data, p.Extensions) + l, _ := multipartMessageBodyDataLen(proto, true, p.Data, p.Extensions) return 4 + l } // Marshal implements the Marshal method of MessageBody interface. func (p *DstUnreach) Marshal(proto int) ([]byte, error) { - return marshalMultipartMessageBody(proto, p.Data, p.Extensions) + return marshalMultipartMessageBody(proto, true, p.Data, p.Extensions) } // parseDstUnreach parses b as an ICMP destination unreachable message // body. -func parseDstUnreach(proto int, b []byte) (MessageBody, error) { +func parseDstUnreach(proto int, typ Type, b []byte) (MessageBody, error) { if len(b) < 4 { return nil, errMessageTooShort } p := &DstUnreach{} var err error - p.Data, p.Extensions, err = parseMultipartMessageBody(proto, b) + p.Data, p.Extensions, err = parseMultipartMessageBody(proto, typ, b) if err != nil { return nil, err } diff --git a/vendor/golang.org/x/net/icmp/echo.go b/vendor/golang.org/x/net/icmp/echo.go index e6f15ef..c611f65 100644 --- a/vendor/golang.org/x/net/icmp/echo.go +++ b/vendor/golang.org/x/net/icmp/echo.go @@ -31,7 +31,7 @@ func (p *Echo) Marshal(proto int) ([]byte, error) { } // parseEcho parses b as an ICMP echo request or reply message body. -func parseEcho(proto int, b []byte) (MessageBody, error) { +func parseEcho(proto int, _ Type, b []byte) (MessageBody, error) { bodyLen := len(b) if bodyLen < 4 { return nil, errMessageTooShort @@ -43,3 +43,115 @@ func parseEcho(proto int, b []byte) (MessageBody, error) { } return p, nil } + +// An ExtendedEchoRequest represents an ICMP extended echo request +// message body. +type ExtendedEchoRequest struct { + ID int // identifier + Seq int // sequence number + Local bool // must be true when identifying by name or index + Extensions []Extension // extensions +} + +// Len implements the Len method of MessageBody interface. +func (p *ExtendedEchoRequest) Len(proto int) int { + if p == nil { + return 0 + } + l, _ := multipartMessageBodyDataLen(proto, false, nil, p.Extensions) + return 4 + l +} + +// Marshal implements the Marshal method of MessageBody interface. +func (p *ExtendedEchoRequest) Marshal(proto int) ([]byte, error) { + b, err := marshalMultipartMessageBody(proto, false, nil, p.Extensions) + if err != nil { + return nil, err + } + bb := make([]byte, 4) + binary.BigEndian.PutUint16(bb[:2], uint16(p.ID)) + bb[2] = byte(p.Seq) + if p.Local { + bb[3] |= 0x01 + } + bb = append(bb, b...) + return bb, nil +} + +// parseExtendedEchoRequest parses b as an ICMP extended echo request +// message body. +func parseExtendedEchoRequest(proto int, typ Type, b []byte) (MessageBody, error) { + if len(b) < 4+4 { + return nil, errMessageTooShort + } + p := &ExtendedEchoRequest{ID: int(binary.BigEndian.Uint16(b[:2])), Seq: int(b[2])} + if b[3]&0x01 != 0 { + p.Local = true + } + var err error + _, p.Extensions, err = parseMultipartMessageBody(proto, typ, b[4:]) + if err != nil { + return nil, err + } + return p, nil +} + +// An ExtendedEchoReply represents an ICMP extended echo reply message +// body. +type ExtendedEchoReply struct { + ID int // identifier + Seq int // sequence number + State int // 3-bit state working together with Message.Code + Active bool // probed interface is active + IPv4 bool // probed interface runs IPv4 + IPv6 bool // probed interface runs IPv6 +} + +// Len implements the Len method of MessageBody interface. +func (p *ExtendedEchoReply) Len(proto int) int { + if p == nil { + return 0 + } + return 4 +} + +// Marshal implements the Marshal method of MessageBody interface. +func (p *ExtendedEchoReply) Marshal(proto int) ([]byte, error) { + b := make([]byte, 4) + binary.BigEndian.PutUint16(b[:2], uint16(p.ID)) + b[2] = byte(p.Seq) + b[3] = byte(p.State<<5) & 0xe0 + if p.Active { + b[3] |= 0x04 + } + if p.IPv4 { + b[3] |= 0x02 + } + if p.IPv6 { + b[3] |= 0x01 + } + return b, nil +} + +// parseExtendedEchoReply parses b as an ICMP extended echo reply +// message body. +func parseExtendedEchoReply(proto int, _ Type, b []byte) (MessageBody, error) { + if len(b) < 4 { + return nil, errMessageTooShort + } + p := &ExtendedEchoReply{ + ID: int(binary.BigEndian.Uint16(b[:2])), + Seq: int(b[2]), + State: int(b[3]) >> 5, + } + if b[3]&0x04 != 0 { + p.Active = true + } + if b[3]&0x02 != 0 { + p.IPv4 = true + } + if b[3]&0x01 != 0 { + p.IPv6 = true + } + return p, nil +} diff --git a/vendor/golang.org/x/net/icmp/extension.go b/vendor/golang.org/x/net/icmp/extension.go index 402a751..2005068 100644 --- a/vendor/golang.org/x/net/icmp/extension.go +++ b/vendor/golang.org/x/net/icmp/extension.go @@ -4,7 +4,12 @@ package icmp -import "encoding/binary" +import ( + "encoding/binary" + + "golang.org/x/net/ipv4" + "golang.org/x/net/ipv6" +) // An Extension represents an ICMP extension. type Extension interface { @@ -38,7 +43,7 @@ func validExtensionHeader(b []byte) bool { // It will return a list of ICMP extensions and an adjusted length // attribute that represents the length of the padded original // datagram field. Otherwise, it returns an error. -func parseExtensions(b []byte, l int) ([]Extension, int, error) { +func parseExtensions(typ Type, b []byte, l int) ([]Extension, int, error) { // Still a lot of non-RFC 4884 compliant implementations are // out there. Set the length attribute l to 128 when it looks // inappropriate for backwards compatibility. @@ -48,20 +53,28 @@ func parseExtensions(b []byte, l int) ([]Extension, int, error) { // header. // // See RFC 4884 for further information. - if 128 > l || l+8 > len(b) { - l = 128 - } - if l+8 > len(b) { - return nil, -1, errNoExtension - } - if !validExtensionHeader(b[l:]) { - if l == 128 { + switch typ { + case ipv4.ICMPTypeExtendedEchoRequest, ipv6.ICMPTypeExtendedEchoRequest: + if len(b) < 8 || !validExtensionHeader(b) { return nil, -1, errNoExtension } - l = 128 - if !validExtensionHeader(b[l:]) { + l = 0 + default: + if 128 > l || l+8 > len(b) { + l = 128 + } + if l+8 > len(b) { return nil, -1, errNoExtension } + if !validExtensionHeader(b[l:]) { + if l == 128 { + return nil, -1, errNoExtension + } + l = 128 + if !validExtensionHeader(b[l:]) { + return nil, -1, errNoExtension + } + } } var exts []Extension for b = b[l+4:]; len(b) >= 4; { @@ -82,6 +95,12 @@ func parseExtensions(b []byte, l int) ([]Extension, int, error) { return nil, -1, err } exts = append(exts, ext) + case classInterfaceIdent: + ext, err := parseInterfaceIdent(b[:ol]) + if err != nil { + return nil, -1, err + } + exts = append(exts, ext) } b = b[ol:] } diff --git a/vendor/golang.org/x/net/icmp/extension_test.go b/vendor/golang.org/x/net/icmp/extension_test.go index 0b3f7b9..a7669da 100644 --- a/vendor/golang.org/x/net/icmp/extension_test.go +++ b/vendor/golang.org/x/net/icmp/extension_test.go @@ -5,253 +5,327 @@ package icmp import ( + "fmt" "net" "reflect" "testing" "golang.org/x/net/internal/iana" + "golang.org/x/net/ipv4" + "golang.org/x/net/ipv6" ) -var marshalAndParseExtensionTests = []struct { - proto int - hdr []byte - obj []byte - exts []Extension -}{ - // MPLS label stack with no label - { - proto: iana.ProtocolICMP, - hdr: []byte{ - 0x20, 0x00, 0x00, 0x00, - }, - obj: []byte{ - 0x00, 0x04, 0x01, 0x01, - }, - exts: []Extension{ - &MPLSLabelStack{ - Class: classMPLSLabelStack, - Type: typeIncomingMPLSLabelStack, +func TestMarshalAndParseExtension(t *testing.T) { + fn := func(t *testing.T, proto int, typ Type, hdr, obj []byte, te Extension) error { + b, err := te.Marshal(proto) + if err != nil { + return err + } + if !reflect.DeepEqual(b, obj) { + return fmt.Errorf("got %#v; want %#v", b, obj) + } + switch typ { + case ipv4.ICMPTypeExtendedEchoRequest, ipv6.ICMPTypeExtendedEchoRequest: + exts, l, err := parseExtensions(typ, append(hdr, obj...), 0) + if err != nil { + return err + } + if l != 0 { + return fmt.Errorf("got %d; want 0", l) + } + if !reflect.DeepEqual(exts, []Extension{te}) { + return fmt.Errorf("got %#v; want %#v", exts[0], te) + } + default: + for i, wire := range []struct { + data []byte // original datagram + inlattr int // length of padded original datagram, a hint + outlattr int // length of padded original datagram, a want + err error + }{ + {nil, 0, -1, errNoExtension}, + {make([]byte, 127), 128, -1, errNoExtension}, + + {make([]byte, 128), 127, -1, errNoExtension}, + {make([]byte, 128), 128, -1, errNoExtension}, + {make([]byte, 128), 129, -1, errNoExtension}, + + {append(make([]byte, 128), append(hdr, obj...)...), 127, 128, nil}, + {append(make([]byte, 128), append(hdr, obj...)...), 128, 128, nil}, + {append(make([]byte, 128), append(hdr, obj...)...), 129, 128, nil}, + + {append(make([]byte, 512), append(hdr, obj...)...), 511, -1, errNoExtension}, + {append(make([]byte, 512), append(hdr, obj...)...), 512, 512, nil}, + {append(make([]byte, 512), append(hdr, obj...)...), 513, -1, errNoExtension}, + } { + exts, l, err := parseExtensions(typ, wire.data, wire.inlattr) + if err != wire.err { + return fmt.Errorf("#%d: got %v; want %v", i, err, wire.err) + } + if wire.err != nil { + continue + } + if l != wire.outlattr { + return fmt.Errorf("#%d: got %d; want %d", i, l, wire.outlattr) + } + if !reflect.DeepEqual(exts, []Extension{te}) { + return fmt.Errorf("#%d: got %#v; want %#v", i, exts[0], te) + } + } + } + return nil + } + + t.Run("MPLSLabelStack", func(t *testing.T) { + for _, et := range []struct { + proto int + typ Type + hdr []byte + obj []byte + ext Extension + }{ + // MPLS label stack with no label + { + proto: iana.ProtocolICMP, + typ: ipv4.ICMPTypeDestinationUnreachable, + hdr: []byte{ + 0x20, 0x00, 0x00, 0x00, + }, + obj: []byte{ + 0x00, 0x04, 0x01, 0x01, + }, + ext: &MPLSLabelStack{ + Class: classMPLSLabelStack, + Type: typeIncomingMPLSLabelStack, + }, }, - }, - }, - // MPLS label stack with a single label - { - proto: iana.ProtocolIPv6ICMP, - hdr: []byte{ - 0x20, 0x00, 0x00, 0x00, - }, - obj: []byte{ - 0x00, 0x08, 0x01, 0x01, - 0x03, 0xe8, 0xe9, 0xff, - }, - exts: []Extension{ - &MPLSLabelStack{ - Class: classMPLSLabelStack, - Type: typeIncomingMPLSLabelStack, - Labels: []MPLSLabel{ - { - Label: 16014, - TC: 0x4, - S: true, - TTL: 255, + // MPLS label stack with a single label + { + proto: iana.ProtocolIPv6ICMP, + typ: ipv6.ICMPTypeDestinationUnreachable, + hdr: []byte{ + 0x20, 0x00, 0x00, 0x00, + }, + obj: []byte{ + 0x00, 0x08, 0x01, 0x01, + 0x03, 0xe8, 0xe9, 0xff, + }, + ext: &MPLSLabelStack{ + Class: classMPLSLabelStack, + Type: typeIncomingMPLSLabelStack, + Labels: []MPLSLabel{ + { + Label: 16014, + TC: 0x4, + S: true, + TTL: 255, + }, }, }, }, - }, - }, - // MPLS label stack with multiple labels - { - proto: iana.ProtocolICMP, - hdr: []byte{ - 0x20, 0x00, 0x00, 0x00, - }, - obj: []byte{ - 0x00, 0x0c, 0x01, 0x01, - 0x03, 0xe8, 0xde, 0xfe, - 0x03, 0xe8, 0xe1, 0xff, - }, - exts: []Extension{ - &MPLSLabelStack{ - Class: classMPLSLabelStack, - Type: typeIncomingMPLSLabelStack, - Labels: []MPLSLabel{ - { - Label: 16013, - TC: 0x7, - S: false, - TTL: 254, - }, - { - Label: 16014, - TC: 0, - S: true, - TTL: 255, + // MPLS label stack with multiple labels + { + proto: iana.ProtocolICMP, + typ: ipv4.ICMPTypeDestinationUnreachable, + hdr: []byte{ + 0x20, 0x00, 0x00, 0x00, + }, + obj: []byte{ + 0x00, 0x0c, 0x01, 0x01, + 0x03, 0xe8, 0xde, 0xfe, + 0x03, 0xe8, 0xe1, 0xff, + }, + ext: &MPLSLabelStack{ + Class: classMPLSLabelStack, + Type: typeIncomingMPLSLabelStack, + Labels: []MPLSLabel{ + { + Label: 16013, + TC: 0x7, + S: false, + TTL: 254, + }, + { + Label: 16014, + TC: 0, + S: true, + TTL: 255, + }, }, }, }, - }, - }, - // Interface information with no attribute - { - proto: iana.ProtocolICMP, - hdr: []byte{ - 0x20, 0x00, 0x00, 0x00, - }, - obj: []byte{ - 0x00, 0x04, 0x02, 0x00, - }, - exts: []Extension{ - &InterfaceInfo{ - Class: classInterfaceInfo, + } { + if err := fn(t, et.proto, et.typ, et.hdr, et.obj, et.ext); err != nil { + t.Error(err) + } + } + }) + t.Run("InterfaceInfo", func(t *testing.T) { + for _, et := range []struct { + proto int + typ Type + hdr []byte + obj []byte + ext Extension + }{ + // Interface information with no attribute + { + proto: iana.ProtocolICMP, + typ: ipv4.ICMPTypeDestinationUnreachable, + hdr: []byte{ + 0x20, 0x00, 0x00, 0x00, + }, + obj: []byte{ + 0x00, 0x04, 0x02, 0x00, + }, + ext: &InterfaceInfo{ + Class: classInterfaceInfo, + }, }, - }, - }, - // Interface information with ifIndex and name - { - proto: iana.ProtocolICMP, - hdr: []byte{ - 0x20, 0x00, 0x00, 0x00, - }, - obj: []byte{ - 0x00, 0x10, 0x02, 0x0a, - 0x00, 0x00, 0x00, 0x10, - 0x08, byte('e'), byte('n'), byte('1'), - byte('0'), byte('1'), 0x00, 0x00, - }, - exts: []Extension{ - &InterfaceInfo{ - Class: classInterfaceInfo, - Type: 0x0a, - Interface: &net.Interface{ - Index: 16, - Name: "en101", + // Interface information with ifIndex and name + { + proto: iana.ProtocolICMP, + typ: ipv4.ICMPTypeDestinationUnreachable, + hdr: []byte{ + 0x20, 0x00, 0x00, 0x00, + }, + obj: []byte{ + 0x00, 0x10, 0x02, 0x0a, + 0x00, 0x00, 0x00, 0x10, + 0x08, byte('e'), byte('n'), byte('1'), + byte('0'), byte('1'), 0x00, 0x00, + }, + ext: &InterfaceInfo{ + Class: classInterfaceInfo, + Type: 0x0a, + Interface: &net.Interface{ + Index: 16, + Name: "en101", + }, }, }, - }, - }, - // Interface information with ifIndex, IPAddr, name and MTU - { - proto: iana.ProtocolIPv6ICMP, - hdr: []byte{ - 0x20, 0x00, 0x00, 0x00, - }, - obj: []byte{ - 0x00, 0x28, 0x02, 0x0f, - 0x00, 0x00, 0x00, 0x0f, - 0x00, 0x02, 0x00, 0x00, - 0xfe, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, - 0x08, byte('e'), byte('n'), byte('1'), - byte('0'), byte('1'), 0x00, 0x00, - 0x00, 0x00, 0x20, 0x00, - }, - exts: []Extension{ - &InterfaceInfo{ - Class: classInterfaceInfo, - Type: 0x0f, - Interface: &net.Interface{ - Index: 15, - Name: "en101", - MTU: 8192, + // Interface information with ifIndex, IPAddr, name and MTU + { + proto: iana.ProtocolIPv6ICMP, + typ: ipv6.ICMPTypeDestinationUnreachable, + hdr: []byte{ + 0x20, 0x00, 0x00, 0x00, }, - Addr: &net.IPAddr{ - IP: net.ParseIP("fe80::1"), - Zone: "en101", + obj: []byte{ + 0x00, 0x28, 0x02, 0x0f, + 0x00, 0x00, 0x00, 0x0f, + 0x00, 0x02, 0x00, 0x00, + 0xfe, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, + 0x08, byte('e'), byte('n'), byte('1'), + byte('0'), byte('1'), 0x00, 0x00, + 0x00, 0x00, 0x20, 0x00, + }, + ext: &InterfaceInfo{ + Class: classInterfaceInfo, + Type: 0x0f, + Interface: &net.Interface{ + Index: 15, + Name: "en101", + MTU: 8192, + }, + Addr: &net.IPAddr{ + IP: net.ParseIP("fe80::1"), + Zone: "en101", + }, }, }, - }, - }, -} - -func TestMarshalAndParseExtension(t *testing.T) { - for i, tt := range marshalAndParseExtensionTests { - for j, ext := range tt.exts { - var err error - var b []byte - switch ext := ext.(type) { - case *MPLSLabelStack: - b, err = ext.Marshal(tt.proto) - if err != nil { - t.Errorf("#%v/%v: %v", i, j, err) - continue - } - case *InterfaceInfo: - b, err = ext.Marshal(tt.proto) - if err != nil { - t.Errorf("#%v/%v: %v", i, j, err) - continue - } - } - if !reflect.DeepEqual(b, tt.obj) { - t.Errorf("#%v/%v: got %#v; want %#v", i, j, b, tt.obj) - continue + } { + if err := fn(t, et.proto, et.typ, et.hdr, et.obj, et.ext); err != nil { + t.Error(err) } } - - for j, wire := range []struct { - data []byte // original datagram - inlattr int // length of padded original datagram, a hint - outlattr int // length of padded original datagram, a want - err error + }) + t.Run("InterfaceIdent", func(t *testing.T) { + for _, et := range []struct { + proto int + typ Type + hdr []byte + obj []byte + ext Extension }{ - {nil, 0, -1, errNoExtension}, - {make([]byte, 127), 128, -1, errNoExtension}, - - {make([]byte, 128), 127, -1, errNoExtension}, - {make([]byte, 128), 128, -1, errNoExtension}, - {make([]byte, 128), 129, -1, errNoExtension}, - - {append(make([]byte, 128), append(tt.hdr, tt.obj...)...), 127, 128, nil}, - {append(make([]byte, 128), append(tt.hdr, tt.obj...)...), 128, 128, nil}, - {append(make([]byte, 128), append(tt.hdr, tt.obj...)...), 129, 128, nil}, - - {append(make([]byte, 512), append(tt.hdr, tt.obj...)...), 511, -1, errNoExtension}, - {append(make([]byte, 512), append(tt.hdr, tt.obj...)...), 512, 512, nil}, - {append(make([]byte, 512), append(tt.hdr, tt.obj...)...), 513, -1, errNoExtension}, + // Interface identification by name + { + proto: iana.ProtocolICMP, + typ: ipv4.ICMPTypeExtendedEchoRequest, + hdr: []byte{ + 0x20, 0x00, 0x00, 0x00, + }, + obj: []byte{ + 0x00, 0x0c, 0x03, 0x01, + byte('e'), byte('n'), byte('1'), byte('0'), + byte('1'), 0x00, 0x00, 0x00, + }, + ext: &InterfaceIdent{ + Class: classInterfaceIdent, + Type: typeInterfaceByName, + Name: "en101", + }, + }, + // Interface identification by index + { + proto: iana.ProtocolIPv6ICMP, + typ: ipv6.ICMPTypeExtendedEchoRequest, + hdr: []byte{ + 0x20, 0x00, 0x00, 0x00, + }, + obj: []byte{ + 0x00, 0x0c, 0x03, 0x02, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x8f, + }, + ext: &InterfaceIdent{ + Class: classInterfaceIdent, + Type: typeInterfaceByIndex, + Index: 911, + }, + }, + // Interface identification by address + { + proto: iana.ProtocolICMP, + typ: ipv4.ICMPTypeExtendedEchoRequest, + hdr: []byte{ + 0x20, 0x00, 0x00, 0x00, + }, + obj: []byte{ + 0x00, 0x10, 0x03, 0x03, + byte(iana.AddrFamily48bitMAC >> 8), byte(iana.AddrFamily48bitMAC & 0x0f), 0x06, 0x00, + 0x01, 0x23, 0x45, 0x67, + 0x89, 0xab, 0x00, 0x00, + }, + ext: &InterfaceIdent{ + Class: classInterfaceIdent, + Type: typeInterfaceByAddress, + AFI: iana.AddrFamily48bitMAC, + Addr: []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab}, + }, + }, } { - exts, l, err := parseExtensions(wire.data, wire.inlattr) - if err != wire.err { - t.Errorf("#%v/%v: got %v; want %v", i, j, err, wire.err) - continue - } - if wire.err != nil { - continue - } - if l != wire.outlattr { - t.Errorf("#%v/%v: got %v; want %v", i, j, l, wire.outlattr) - } - if !reflect.DeepEqual(exts, tt.exts) { - for j, ext := range exts { - switch ext := ext.(type) { - case *MPLSLabelStack: - want := tt.exts[j].(*MPLSLabelStack) - t.Errorf("#%v/%v: got %#v; want %#v", i, j, ext, want) - case *InterfaceInfo: - want := tt.exts[j].(*InterfaceInfo) - t.Errorf("#%v/%v: got %#v; want %#v", i, j, ext, want) - } - } - continue + if err := fn(t, et.proto, et.typ, et.hdr, et.obj, et.ext); err != nil { + t.Error(err) } } - } -} - -var parseInterfaceNameTests = []struct { - b []byte - error -}{ - {[]byte{0, 'e', 'n', '0'}, errInvalidExtension}, - {[]byte{4, 'e', 'n', '0'}, nil}, - {[]byte{7, 'e', 'n', '0', 0xff, 0xff, 0xff, 0xff}, errInvalidExtension}, - {[]byte{8, 'e', 'n', '0', 0xff, 0xff, 0xff}, errMessageTooShort}, + }) } func TestParseInterfaceName(t *testing.T) { ifi := InterfaceInfo{Interface: &net.Interface{}} - for i, tt := range parseInterfaceNameTests { + for i, tt := range []struct { + b []byte + error + }{ + {[]byte{0, 'e', 'n', '0'}, errInvalidExtension}, + {[]byte{4, 'e', 'n', '0'}, nil}, + {[]byte{7, 'e', 'n', '0', 0xff, 0xff, 0xff, 0xff}, errInvalidExtension}, + {[]byte{8, 'e', 'n', '0', 0xff, 0xff, 0xff}, errMessageTooShort}, + } { if _, err := ifi.parseName(tt.b); err != tt.error { t.Errorf("#%d: got %v; want %v", i, err, tt.error) } diff --git a/vendor/golang.org/x/net/icmp/helper.go b/vendor/golang.org/x/net/icmp/helper.go deleted file mode 100644 index 6c4e633..0000000 --- a/vendor/golang.org/x/net/icmp/helper.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2016 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. - -package icmp - -import ( - "encoding/binary" - "unsafe" -) - -var ( - // See http://www.freebsd.org/doc/en/books/porters-handbook/freebsd-versions.html. - freebsdVersion uint32 - - nativeEndian binary.ByteOrder -) - -func init() { - i := uint32(1) - b := (*[4]byte)(unsafe.Pointer(&i)) - if b[0] == 1 { - nativeEndian = binary.LittleEndian - } else { - nativeEndian = binary.BigEndian - } -} diff --git a/vendor/golang.org/x/net/icmp/interface.go b/vendor/golang.org/x/net/icmp/interface.go index 78b5b98..617f757 100644 --- a/vendor/golang.org/x/net/icmp/interface.go +++ b/vendor/golang.org/x/net/icmp/interface.go @@ -14,9 +14,6 @@ import ( const ( classInterfaceInfo = 2 - - afiIPv4 = 1 - afiIPv6 = 2 ) const ( @@ -127,11 +124,11 @@ func (ifi *InterfaceInfo) parseIfIndex(b []byte) ([]byte, error) { func (ifi *InterfaceInfo) marshalIPAddr(proto int, b []byte) []byte { switch proto { case iana.ProtocolICMP: - binary.BigEndian.PutUint16(b[:2], uint16(afiIPv4)) + binary.BigEndian.PutUint16(b[:2], uint16(iana.AddrFamilyIPv4)) copy(b[4:4+net.IPv4len], ifi.Addr.IP.To4()) b = b[4+net.IPv4len:] case iana.ProtocolIPv6ICMP: - binary.BigEndian.PutUint16(b[:2], uint16(afiIPv6)) + binary.BigEndian.PutUint16(b[:2], uint16(iana.AddrFamilyIPv6)) copy(b[4:4+net.IPv6len], ifi.Addr.IP.To16()) b = b[4+net.IPv6len:] } @@ -145,14 +142,14 @@ func (ifi *InterfaceInfo) parseIPAddr(b []byte) ([]byte, error) { afi := int(binary.BigEndian.Uint16(b[:2])) b = b[4:] switch afi { - case afiIPv4: + case iana.AddrFamilyIPv4: if len(b) < net.IPv4len { return nil, errMessageTooShort } ifi.Addr.IP = make(net.IP, net.IPv4len) copy(ifi.Addr.IP, b[:net.IPv4len]) b = b[net.IPv4len:] - case afiIPv6: + case iana.AddrFamilyIPv6: if len(b) < net.IPv6len { return nil, errMessageTooShort } @@ -234,3 +231,92 @@ func parseInterfaceInfo(b []byte) (Extension, error) { } return ifi, nil } + +const ( + classInterfaceIdent = 3 + typeInterfaceByName = 1 + typeInterfaceByIndex = 2 + typeInterfaceByAddress = 3 +) + +// An InterfaceIdent represents interface identification. +type InterfaceIdent struct { + Class int // extension object class number + Type int // extension object sub-type + Name string // interface name + Index int // interface index + AFI int // address family identifier; see address family numbers in IANA registry + Addr []byte // address +} + +// Len implements the Len method of Extension interface. +func (ifi *InterfaceIdent) Len(_ int) int { + switch ifi.Type { + case typeInterfaceByName: + l := len(ifi.Name) + if l > 255 { + l = 255 + } + return 4 + (l+3)&^3 + case typeInterfaceByIndex: + return 4 + 8 + case typeInterfaceByAddress: + return 4 + 4 + (len(ifi.Addr)+3)&^3 + default: + return 4 + } +} + +// Marshal implements the Marshal method of Extension interface. +func (ifi *InterfaceIdent) Marshal(proto int) ([]byte, error) { + b := make([]byte, ifi.Len(proto)) + if err := ifi.marshal(proto, b); err != nil { + return nil, err + } + return b, nil +} + +func (ifi *InterfaceIdent) marshal(proto int, b []byte) error { + l := ifi.Len(proto) + binary.BigEndian.PutUint16(b[:2], uint16(l)) + b[2], b[3] = classInterfaceIdent, byte(ifi.Type) + switch ifi.Type { + case typeInterfaceByName: + copy(b[4:], ifi.Name) + case typeInterfaceByIndex: + binary.BigEndian.PutUint64(b[4:4+8], uint64(ifi.Index)) + case typeInterfaceByAddress: + binary.BigEndian.PutUint16(b[4:4+2], uint16(ifi.AFI)) + b[4+2] = byte(len(ifi.Addr)) + copy(b[4+4:], ifi.Addr) + } + return nil +} + +func parseInterfaceIdent(b []byte) (Extension, error) { + ifi := &InterfaceIdent{ + Class: int(b[2]), + Type: int(b[3]), + } + switch ifi.Type { + case typeInterfaceByName: + ifi.Name = strings.Trim(string(b[4:]), string(0)) + case typeInterfaceByIndex: + if len(b[4:]) < 8 { + return nil, errInvalidExtension + } + ifi.Index = int(binary.BigEndian.Uint64(b[4 : 4+8])) + case typeInterfaceByAddress: + if len(b[4:]) < 4 { + return nil, errInvalidExtension + } + ifi.AFI = int(binary.BigEndian.Uint16(b[4 : 4+2])) + l := int(b[4+2]) + if len(b[4+4:]) < l { + return nil, errInvalidExtension + } + ifi.Addr = make([]byte, l) + copy(ifi.Addr, b[4+4:]) + } + return ifi, nil +} diff --git a/vendor/golang.org/x/net/icmp/ipv4.go b/vendor/golang.org/x/net/icmp/ipv4.go index 729ddc9..ffc66ed 100644 --- a/vendor/golang.org/x/net/icmp/ipv4.go +++ b/vendor/golang.org/x/net/icmp/ipv4.go @@ -9,9 +9,14 @@ import ( "net" "runtime" + "golang.org/x/net/internal/socket" "golang.org/x/net/ipv4" ) +// freebsdVersion is set in sys_freebsd.go. +// See http://www.freebsd.org/doc/en/books/porters-handbook/freebsd-versions.html. +var freebsdVersion uint32 + // ParseIPv4Header parses b as an IPv4 header of ICMP error message // invoking packet, which is contained in ICMP error message. func ParseIPv4Header(b []byte) (*ipv4.Header, error) { @@ -36,12 +41,12 @@ func ParseIPv4Header(b []byte) (*ipv4.Header, error) { } switch runtime.GOOS { case "darwin": - h.TotalLen = int(nativeEndian.Uint16(b[2:4])) + h.TotalLen = int(socket.NativeEndian.Uint16(b[2:4])) case "freebsd": if freebsdVersion >= 1000000 { h.TotalLen = int(binary.BigEndian.Uint16(b[2:4])) } else { - h.TotalLen = int(nativeEndian.Uint16(b[2:4])) + h.TotalLen = int(socket.NativeEndian.Uint16(b[2:4])) } default: h.TotalLen = int(binary.BigEndian.Uint16(b[2:4])) diff --git a/vendor/golang.org/x/net/icmp/ipv4_test.go b/vendor/golang.org/x/net/icmp/ipv4_test.go index 47cc00d..3fdee83 100644 --- a/vendor/golang.org/x/net/icmp/ipv4_test.go +++ b/vendor/golang.org/x/net/icmp/ipv4_test.go @@ -11,72 +11,65 @@ import ( "runtime" "testing" + "golang.org/x/net/internal/socket" "golang.org/x/net/ipv4" ) -type ipv4HeaderTest struct { - wireHeaderFromKernel [ipv4.HeaderLen]byte - wireHeaderFromTradBSDKernel [ipv4.HeaderLen]byte - Header *ipv4.Header -} - -var ipv4HeaderLittleEndianTest = ipv4HeaderTest{ - // TODO(mikio): Add platform dependent wire header formats when - // we support new platforms. - wireHeaderFromKernel: [ipv4.HeaderLen]byte{ - 0x45, 0x01, 0xbe, 0xef, - 0xca, 0xfe, 0x45, 0xdc, - 0xff, 0x01, 0xde, 0xad, - 172, 16, 254, 254, - 192, 168, 0, 1, - }, - wireHeaderFromTradBSDKernel: [ipv4.HeaderLen]byte{ - 0x45, 0x01, 0xef, 0xbe, - 0xca, 0xfe, 0x45, 0xdc, - 0xff, 0x01, 0xde, 0xad, - 172, 16, 254, 254, - 192, 168, 0, 1, - }, - Header: &ipv4.Header{ - Version: ipv4.Version, - Len: ipv4.HeaderLen, - TOS: 1, - TotalLen: 0xbeef, - ID: 0xcafe, - Flags: ipv4.DontFragment, - FragOff: 1500, - TTL: 255, - Protocol: 1, - Checksum: 0xdead, - Src: net.IPv4(172, 16, 254, 254), - Dst: net.IPv4(192, 168, 0, 1), - }, -} - func TestParseIPv4Header(t *testing.T) { - tt := &ipv4HeaderLittleEndianTest - if nativeEndian != binary.LittleEndian { - t.Skip("no test for non-little endian machine yet") - } - - var wh []byte - switch runtime.GOOS { - case "darwin": - wh = tt.wireHeaderFromTradBSDKernel[:] - case "freebsd": - if freebsdVersion >= 1000000 { - wh = tt.wireHeaderFromKernel[:] - } else { - wh = tt.wireHeaderFromTradBSDKernel[:] - } - default: - wh = tt.wireHeaderFromKernel[:] - } - h, err := ParseIPv4Header(wh) - if err != nil { - t.Fatal(err) - } - if !reflect.DeepEqual(h, tt.Header) { - t.Fatalf("got %#v; want %#v", h, tt.Header) + switch socket.NativeEndian { + case binary.LittleEndian: + t.Run("LittleEndian", func(t *testing.T) { + // TODO(mikio): Add platform dependent wire + // header formats when we support new + // platforms. + wireHeaderFromKernel := [ipv4.HeaderLen]byte{ + 0x45, 0x01, 0xbe, 0xef, + 0xca, 0xfe, 0x45, 0xdc, + 0xff, 0x01, 0xde, 0xad, + 172, 16, 254, 254, + 192, 168, 0, 1, + } + wireHeaderFromTradBSDKernel := [ipv4.HeaderLen]byte{ + 0x45, 0x01, 0xef, 0xbe, + 0xca, 0xfe, 0x45, 0xdc, + 0xff, 0x01, 0xde, 0xad, + 172, 16, 254, 254, + 192, 168, 0, 1, + } + th := &ipv4.Header{ + Version: ipv4.Version, + Len: ipv4.HeaderLen, + TOS: 1, + TotalLen: 0xbeef, + ID: 0xcafe, + Flags: ipv4.DontFragment, + FragOff: 1500, + TTL: 255, + Protocol: 1, + Checksum: 0xdead, + Src: net.IPv4(172, 16, 254, 254), + Dst: net.IPv4(192, 168, 0, 1), + } + var wh []byte + switch runtime.GOOS { + case "darwin": + wh = wireHeaderFromTradBSDKernel[:] + case "freebsd": + if freebsdVersion >= 1000000 { + wh = wireHeaderFromKernel[:] + } else { + wh = wireHeaderFromTradBSDKernel[:] + } + default: + wh = wireHeaderFromKernel[:] + } + h, err := ParseIPv4Header(wh) + if err != nil { + t.Fatal(err) + } + if !reflect.DeepEqual(h, th) { + t.Fatalf("got %#v; want %#v", h, th) + } + }) } } diff --git a/vendor/golang.org/x/net/icmp/message.go b/vendor/golang.org/x/net/icmp/message.go index 81140b0..46fe95a 100644 --- a/vendor/golang.org/x/net/icmp/message.go +++ b/vendor/golang.org/x/net/icmp/message.go @@ -11,6 +11,7 @@ // ICMP extensions for MPLS are defined in RFC 4950. // ICMP extensions for interface and next-hop identification are // defined in RFC 5837. +// PROBE: A utility for probing interfaces is defined in RFC 8335. package icmp // import "golang.org/x/net/icmp" import ( @@ -107,21 +108,25 @@ func (m *Message) Marshal(psh []byte) ([]byte, error) { return b[len(psh):], nil } -var parseFns = map[Type]func(int, []byte) (MessageBody, error){ +var parseFns = map[Type]func(int, Type, []byte) (MessageBody, error){ ipv4.ICMPTypeDestinationUnreachable: parseDstUnreach, ipv4.ICMPTypeTimeExceeded: parseTimeExceeded, ipv4.ICMPTypeParameterProblem: parseParamProb, - ipv4.ICMPTypeEcho: parseEcho, - ipv4.ICMPTypeEchoReply: parseEcho, + ipv4.ICMPTypeEcho: parseEcho, + ipv4.ICMPTypeEchoReply: parseEcho, + ipv4.ICMPTypeExtendedEchoRequest: parseExtendedEchoRequest, + ipv4.ICMPTypeExtendedEchoReply: parseExtendedEchoReply, ipv6.ICMPTypeDestinationUnreachable: parseDstUnreach, ipv6.ICMPTypePacketTooBig: parsePacketTooBig, ipv6.ICMPTypeTimeExceeded: parseTimeExceeded, ipv6.ICMPTypeParameterProblem: parseParamProb, - ipv6.ICMPTypeEchoRequest: parseEcho, - ipv6.ICMPTypeEchoReply: parseEcho, + ipv6.ICMPTypeEchoRequest: parseEcho, + ipv6.ICMPTypeEchoReply: parseEcho, + ipv6.ICMPTypeExtendedEchoRequest: parseExtendedEchoRequest, + ipv6.ICMPTypeExtendedEchoReply: parseExtendedEchoReply, } // ParseMessage parses b as an ICMP message. @@ -143,7 +148,7 @@ func ParseMessage(proto int, b []byte) (*Message, error) { if fn, ok := parseFns[m.Type]; !ok { m.Body, err = parseDefaultMessageBody(proto, b[4:]) } else { - m.Body, err = fn(proto, b[4:]) + m.Body, err = fn(proto, m.Type, b[4:]) } if err != nil { return nil, err diff --git a/vendor/golang.org/x/net/icmp/message_test.go b/vendor/golang.org/x/net/icmp/message_test.go index 5d2605f..c278b8b 100644 --- a/vendor/golang.org/x/net/icmp/message_test.go +++ b/vendor/golang.org/x/net/icmp/message_test.go @@ -15,120 +15,141 @@ import ( "golang.org/x/net/ipv6" ) -var marshalAndParseMessageForIPv4Tests = []icmp.Message{ - { - Type: ipv4.ICMPTypeDestinationUnreachable, Code: 15, - Body: &icmp.DstUnreach{ - Data: []byte("ERROR-INVOKING-PACKET"), - }, - }, - { - Type: ipv4.ICMPTypeTimeExceeded, Code: 1, - Body: &icmp.TimeExceeded{ - Data: []byte("ERROR-INVOKING-PACKET"), - }, - }, - { - Type: ipv4.ICMPTypeParameterProblem, Code: 2, - Body: &icmp.ParamProb{ - Pointer: 8, - Data: []byte("ERROR-INVOKING-PACKET"), - }, - }, - { - Type: ipv4.ICMPTypeEcho, Code: 0, - Body: &icmp.Echo{ - ID: 1, Seq: 2, - Data: []byte("HELLO-R-U-THERE"), - }, - }, - { - Type: ipv4.ICMPTypePhoturis, - Body: &icmp.DefaultMessageBody{ - Data: []byte{0x80, 0x40, 0x20, 0x10}, - }, - }, -} - -func TestMarshalAndParseMessageForIPv4(t *testing.T) { - for i, tt := range marshalAndParseMessageForIPv4Tests { - b, err := tt.Marshal(nil) - if err != nil { - t.Fatal(err) - } - m, err := icmp.ParseMessage(iana.ProtocolICMP, b) - if err != nil { - t.Fatal(err) - } - if m.Type != tt.Type || m.Code != tt.Code { - t.Errorf("#%v: got %v; want %v", i, m, &tt) - } - if !reflect.DeepEqual(m.Body, tt.Body) { - t.Errorf("#%v: got %v; want %v", i, m.Body, tt.Body) - } - } -} - -var marshalAndParseMessageForIPv6Tests = []icmp.Message{ - { - Type: ipv6.ICMPTypeDestinationUnreachable, Code: 6, - Body: &icmp.DstUnreach{ - Data: []byte("ERROR-INVOKING-PACKET"), - }, - }, - { - Type: ipv6.ICMPTypePacketTooBig, Code: 0, - Body: &icmp.PacketTooBig{ - MTU: 1<<16 - 1, - Data: []byte("ERROR-INVOKING-PACKET"), - }, - }, - { - Type: ipv6.ICMPTypeTimeExceeded, Code: 1, - Body: &icmp.TimeExceeded{ - Data: []byte("ERROR-INVOKING-PACKET"), - }, - }, - { - Type: ipv6.ICMPTypeParameterProblem, Code: 2, - Body: &icmp.ParamProb{ - Pointer: 8, - Data: []byte("ERROR-INVOKING-PACKET"), - }, - }, - { - Type: ipv6.ICMPTypeEchoRequest, Code: 0, - Body: &icmp.Echo{ - ID: 1, Seq: 2, - Data: []byte("HELLO-R-U-THERE"), - }, - }, - { - Type: ipv6.ICMPTypeDuplicateAddressConfirmation, - Body: &icmp.DefaultMessageBody{ - Data: []byte{0x80, 0x40, 0x20, 0x10}, - }, - }, -} - -func TestMarshalAndParseMessageForIPv6(t *testing.T) { - pshicmp := icmp.IPv6PseudoHeader(net.ParseIP("fe80::1"), net.ParseIP("ff02::1")) - for i, tt := range marshalAndParseMessageForIPv6Tests { - for _, psh := range [][]byte{pshicmp, nil} { - b, err := tt.Marshal(psh) - if err != nil { - t.Fatal(err) - } - m, err := icmp.ParseMessage(iana.ProtocolIPv6ICMP, b) - if err != nil { - t.Fatal(err) +func TestMarshalAndParseMessage(t *testing.T) { + fn := func(t *testing.T, proto int, tms []icmp.Message) { + var pshs [][]byte + switch proto { + case iana.ProtocolICMP: + pshs = [][]byte{nil} + case iana.ProtocolIPv6ICMP: + pshs = [][]byte{ + icmp.IPv6PseudoHeader(net.ParseIP("fe80::1"), net.ParseIP("ff02::1")), + nil, } - if m.Type != tt.Type || m.Code != tt.Code { - t.Errorf("#%v: got %v; want %v", i, m, &tt) - } - if !reflect.DeepEqual(m.Body, tt.Body) { - t.Errorf("#%v: got %v; want %v", i, m.Body, tt.Body) + } + for i, tm := range tms { + for _, psh := range pshs { + b, err := tm.Marshal(psh) + if err != nil { + t.Fatal(err) + } + m, err := icmp.ParseMessage(proto, b) + if err != nil { + t.Fatal(err) + } + if m.Type != tm.Type || m.Code != tm.Code { + t.Errorf("#%d: got %#v; want %#v", i, m, &tm) + } + if !reflect.DeepEqual(m.Body, tm.Body) { + t.Errorf("#%d: got %#v; want %#v", i, m.Body, tm.Body) + } } } } + + t.Run("IPv4", func(t *testing.T) { + fn(t, iana.ProtocolICMP, + []icmp.Message{ + { + Type: ipv4.ICMPTypeDestinationUnreachable, Code: 15, + Body: &icmp.DstUnreach{ + Data: []byte("ERROR-INVOKING-PACKET"), + }, + }, + { + Type: ipv4.ICMPTypeTimeExceeded, Code: 1, + Body: &icmp.TimeExceeded{ + Data: []byte("ERROR-INVOKING-PACKET"), + }, + }, + { + Type: ipv4.ICMPTypeParameterProblem, Code: 2, + Body: &icmp.ParamProb{ + Pointer: 8, + Data: []byte("ERROR-INVOKING-PACKET"), + }, + }, + { + Type: ipv4.ICMPTypeEcho, Code: 0, + Body: &icmp.Echo{ + ID: 1, Seq: 2, + Data: []byte("HELLO-R-U-THERE"), + }, + }, + { + Type: ipv4.ICMPTypeExtendedEchoRequest, Code: 0, + Body: &icmp.ExtendedEchoRequest{ + ID: 1, Seq: 2, + }, + }, + { + Type: ipv4.ICMPTypeExtendedEchoReply, Code: 0, + Body: &icmp.ExtendedEchoReply{ + State: 4 /* Delay */, Active: true, IPv4: true, + }, + }, + { + Type: ipv4.ICMPTypePhoturis, + Body: &icmp.DefaultMessageBody{ + Data: []byte{0x80, 0x40, 0x20, 0x10}, + }, + }, + }) + }) + t.Run("IPv6", func(t *testing.T) { + fn(t, iana.ProtocolIPv6ICMP, + []icmp.Message{ + { + Type: ipv6.ICMPTypeDestinationUnreachable, Code: 6, + Body: &icmp.DstUnreach{ + Data: []byte("ERROR-INVOKING-PACKET"), + }, + }, + { + Type: ipv6.ICMPTypePacketTooBig, Code: 0, + Body: &icmp.PacketTooBig{ + MTU: 1<<16 - 1, + Data: []byte("ERROR-INVOKING-PACKET"), + }, + }, + { + Type: ipv6.ICMPTypeTimeExceeded, Code: 1, + Body: &icmp.TimeExceeded{ + Data: []byte("ERROR-INVOKING-PACKET"), + }, + }, + { + Type: ipv6.ICMPTypeParameterProblem, Code: 2, + Body: &icmp.ParamProb{ + Pointer: 8, + Data: []byte("ERROR-INVOKING-PACKET"), + }, + }, + { + Type: ipv6.ICMPTypeEchoRequest, Code: 0, + Body: &icmp.Echo{ + ID: 1, Seq: 2, + Data: []byte("HELLO-R-U-THERE"), + }, + }, + { + Type: ipv6.ICMPTypeExtendedEchoRequest, Code: 0, + Body: &icmp.ExtendedEchoRequest{ + ID: 1, Seq: 2, + }, + }, + { + Type: ipv6.ICMPTypeExtendedEchoReply, Code: 0, + Body: &icmp.ExtendedEchoReply{ + State: 5 /* Probe */, Active: true, IPv6: true, + }, + }, + { + Type: ipv6.ICMPTypeDuplicateAddressConfirmation, + Body: &icmp.DefaultMessageBody{ + Data: []byte{0x80, 0x40, 0x20, 0x10}, + }, + }, + }) + }) } diff --git a/vendor/golang.org/x/net/icmp/multipart.go b/vendor/golang.org/x/net/icmp/multipart.go index f271356..9ebbbaf 100644 --- a/vendor/golang.org/x/net/icmp/multipart.go +++ b/vendor/golang.org/x/net/icmp/multipart.go @@ -10,12 +10,14 @@ import "golang.org/x/net/internal/iana" // exts as extensions, and returns a required length for message body // and a required length for a padded original datagram in wire // format. -func multipartMessageBodyDataLen(proto int, b []byte, exts []Extension) (bodyLen, dataLen int) { +func multipartMessageBodyDataLen(proto int, withOrigDgram bool, b []byte, exts []Extension) (bodyLen, dataLen int) { for _, ext := range exts { bodyLen += ext.Len(proto) } if bodyLen > 0 { - dataLen = multipartMessageOrigDatagramLen(proto, b) + if withOrigDgram { + dataLen = multipartMessageOrigDatagramLen(proto, b) + } bodyLen += 4 // length of extension header } else { dataLen = len(b) @@ -50,8 +52,8 @@ func multipartMessageOrigDatagramLen(proto int, b []byte) int { // marshalMultipartMessageBody takes data as an original datagram and // exts as extesnsions, and returns a binary encoding of message body. // It can be used for non-multipart message bodies when exts is nil. -func marshalMultipartMessageBody(proto int, data []byte, exts []Extension) ([]byte, error) { - bodyLen, dataLen := multipartMessageBodyDataLen(proto, data, exts) +func marshalMultipartMessageBody(proto int, withOrigDgram bool, data []byte, exts []Extension) ([]byte, error) { + bodyLen, dataLen := multipartMessageBodyDataLen(proto, withOrigDgram, data, exts) b := make([]byte, 4+bodyLen) copy(b[4:], data) off := dataLen + 4 @@ -71,16 +73,23 @@ func marshalMultipartMessageBody(proto int, data []byte, exts []Extension) ([]by return nil, err } off += ext.Len(proto) + case *InterfaceIdent: + if err := ext.marshal(proto, b[off:]); err != nil { + return nil, err + } + off += ext.Len(proto) } } s := checksum(b[dataLen+4:]) b[dataLen+4+2] ^= byte(s) b[dataLen+4+3] ^= byte(s >> 8) - switch proto { - case iana.ProtocolICMP: - b[1] = byte(dataLen / 4) - case iana.ProtocolIPv6ICMP: - b[0] = byte(dataLen / 8) + if withOrigDgram { + switch proto { + case iana.ProtocolICMP: + b[1] = byte(dataLen / 4) + case iana.ProtocolIPv6ICMP: + b[0] = byte(dataLen / 8) + } } } return b, nil @@ -88,7 +97,7 @@ func marshalMultipartMessageBody(proto int, data []byte, exts []Extension) ([]by // parseMultipartMessageBody parses b as either a non-multipart // message body or a multipart message body. -func parseMultipartMessageBody(proto int, b []byte) ([]byte, []Extension, error) { +func parseMultipartMessageBody(proto int, typ Type, b []byte) ([]byte, []Extension, error) { var l int switch proto { case iana.ProtocolICMP: @@ -99,11 +108,14 @@ func parseMultipartMessageBody(proto int, b []byte) ([]byte, []Extension, error) if len(b) == 4 { return nil, nil, nil } - exts, l, err := parseExtensions(b[4:], l) + exts, l, err := parseExtensions(typ, b[4:], l) if err != nil { l = len(b) - 4 } - data := make([]byte, l) - copy(data, b[4:]) + var data []byte + if l > 0 { + data = make([]byte, l) + copy(data, b[4:]) + } return data, exts, nil } diff --git a/vendor/golang.org/x/net/icmp/multipart_test.go b/vendor/golang.org/x/net/icmp/multipart_test.go index 966ccb8..7440882 100644 --- a/vendor/golang.org/x/net/icmp/multipart_test.go +++ b/vendor/golang.org/x/net/icmp/multipart_test.go @@ -5,6 +5,7 @@ package icmp_test import ( + "errors" "fmt" "net" "reflect" @@ -16,425 +17,557 @@ import ( "golang.org/x/net/ipv6" ) -var marshalAndParseMultipartMessageForIPv4Tests = []icmp.Message{ - { - Type: ipv4.ICMPTypeDestinationUnreachable, Code: 15, - Body: &icmp.DstUnreach{ - Data: []byte("ERROR-INVOKING-PACKET"), - Extensions: []icmp.Extension{ - &icmp.MPLSLabelStack{ - Class: 1, - Type: 1, - Labels: []icmp.MPLSLabel{ - { - Label: 16014, - TC: 0x4, - S: true, - TTL: 255, - }, - }, - }, - &icmp.InterfaceInfo{ - Class: 2, - Type: 0x0f, - Interface: &net.Interface{ - Index: 15, - Name: "en101", - MTU: 8192, - }, - Addr: &net.IPAddr{ - IP: net.IPv4(192, 168, 0, 1).To4(), - }, - }, - }, - }, - }, - { - Type: ipv4.ICMPTypeTimeExceeded, Code: 1, - Body: &icmp.TimeExceeded{ - Data: []byte("ERROR-INVOKING-PACKET"), - Extensions: []icmp.Extension{ - &icmp.InterfaceInfo{ - Class: 2, - Type: 0x0f, - Interface: &net.Interface{ - Index: 15, - Name: "en101", - MTU: 8192, - }, - Addr: &net.IPAddr{ - IP: net.IPv4(192, 168, 0, 1).To4(), - }, - }, - &icmp.MPLSLabelStack{ - Class: 1, - Type: 1, - Labels: []icmp.MPLSLabel{ - { - Label: 16014, - TC: 0x4, - S: true, - TTL: 255, - }, - }, - }, - }, - }, - }, - { - Type: ipv4.ICMPTypeParameterProblem, Code: 2, - Body: &icmp.ParamProb{ - Pointer: 8, - Data: []byte("ERROR-INVOKING-PACKET"), - Extensions: []icmp.Extension{ - &icmp.MPLSLabelStack{ - Class: 1, - Type: 1, - Labels: []icmp.MPLSLabel{ - { - Label: 16014, - TC: 0x4, - S: true, - TTL: 255, - }, - }, - }, - &icmp.InterfaceInfo{ - Class: 2, - Type: 0x0f, - Interface: &net.Interface{ - Index: 15, - Name: "en101", - MTU: 8192, - }, - Addr: &net.IPAddr{ - IP: net.IPv4(192, 168, 0, 1).To4(), - }, - }, - &icmp.InterfaceInfo{ - Class: 2, - Type: 0x2f, - Interface: &net.Interface{ - Index: 16, - Name: "en102", - MTU: 8192, - }, - Addr: &net.IPAddr{ - IP: net.IPv4(192, 168, 0, 2).To4(), - }, - }, - }, - }, - }, -} - -func TestMarshalAndParseMultipartMessageForIPv4(t *testing.T) { - for i, tt := range marshalAndParseMultipartMessageForIPv4Tests { - b, err := tt.Marshal(nil) +func TestMarshalAndParseMultipartMessage(t *testing.T) { + fn := func(t *testing.T, proto int, tm icmp.Message) error { + b, err := tm.Marshal(nil) if err != nil { - t.Fatal(err) + return err } - if b[5] != 32 { - t.Errorf("#%v: got %v; want 32", i, b[5]) + switch tm.Type { + case ipv4.ICMPTypeExtendedEchoRequest, ipv6.ICMPTypeExtendedEchoRequest: + default: + switch proto { + case iana.ProtocolICMP: + if b[5] != 32 { + return fmt.Errorf("got %d; want 32", b[5]) + } + case iana.ProtocolIPv6ICMP: + if b[4] != 16 { + return fmt.Errorf("got %d; want 16", b[4]) + } + default: + return fmt.Errorf("unknown protocol: %d", proto) + } } - m, err := icmp.ParseMessage(iana.ProtocolICMP, b) + m, err := icmp.ParseMessage(proto, b) if err != nil { - t.Fatal(err) + return err } - if m.Type != tt.Type || m.Code != tt.Code { - t.Errorf("#%v: got %v; want %v", i, m, &tt) + if m.Type != tm.Type || m.Code != tm.Code { + return fmt.Errorf("got %v; want %v", m, &tm) } switch m.Type { + case ipv4.ICMPTypeExtendedEchoRequest, ipv6.ICMPTypeExtendedEchoRequest: + got, want := m.Body.(*icmp.ExtendedEchoRequest), tm.Body.(*icmp.ExtendedEchoRequest) + if !reflect.DeepEqual(got.Extensions, want.Extensions) { + return errors.New(dumpExtensions(got.Extensions, want.Extensions)) + } case ipv4.ICMPTypeDestinationUnreachable: - got, want := m.Body.(*icmp.DstUnreach), tt.Body.(*icmp.DstUnreach) + got, want := m.Body.(*icmp.DstUnreach), tm.Body.(*icmp.DstUnreach) if !reflect.DeepEqual(got.Extensions, want.Extensions) { - t.Error(dumpExtensions(i, got.Extensions, want.Extensions)) + return errors.New(dumpExtensions(got.Extensions, want.Extensions)) } if len(got.Data) != 128 { - t.Errorf("#%v: got %v; want 128", i, len(got.Data)) + return fmt.Errorf("got %d; want 128", len(got.Data)) } case ipv4.ICMPTypeTimeExceeded: - got, want := m.Body.(*icmp.TimeExceeded), tt.Body.(*icmp.TimeExceeded) + got, want := m.Body.(*icmp.TimeExceeded), tm.Body.(*icmp.TimeExceeded) if !reflect.DeepEqual(got.Extensions, want.Extensions) { - t.Error(dumpExtensions(i, got.Extensions, want.Extensions)) + return errors.New(dumpExtensions(got.Extensions, want.Extensions)) } if len(got.Data) != 128 { - t.Errorf("#%v: got %v; want 128", i, len(got.Data)) + return fmt.Errorf("got %d; want 128", len(got.Data)) } case ipv4.ICMPTypeParameterProblem: - got, want := m.Body.(*icmp.ParamProb), tt.Body.(*icmp.ParamProb) + got, want := m.Body.(*icmp.ParamProb), tm.Body.(*icmp.ParamProb) + if !reflect.DeepEqual(got.Extensions, want.Extensions) { + return errors.New(dumpExtensions(got.Extensions, want.Extensions)) + } + if len(got.Data) != 128 { + return fmt.Errorf("got %d; want 128", len(got.Data)) + } + case ipv6.ICMPTypeDestinationUnreachable: + got, want := m.Body.(*icmp.DstUnreach), tm.Body.(*icmp.DstUnreach) if !reflect.DeepEqual(got.Extensions, want.Extensions) { - t.Error(dumpExtensions(i, got.Extensions, want.Extensions)) + return errors.New(dumpExtensions(got.Extensions, want.Extensions)) } if len(got.Data) != 128 { - t.Errorf("#%v: got %v; want 128", i, len(got.Data)) + return fmt.Errorf("got %d; want 128", len(got.Data)) } + case ipv6.ICMPTypeTimeExceeded: + got, want := m.Body.(*icmp.TimeExceeded), tm.Body.(*icmp.TimeExceeded) + if !reflect.DeepEqual(got.Extensions, want.Extensions) { + return errors.New(dumpExtensions(got.Extensions, want.Extensions)) + } + if len(got.Data) != 128 { + return fmt.Errorf("got %d; want 128", len(got.Data)) + } + default: + return fmt.Errorf("unknown message type: %v", m.Type) } + return nil } -} -var marshalAndParseMultipartMessageForIPv6Tests = []icmp.Message{ - { - Type: ipv6.ICMPTypeDestinationUnreachable, Code: 6, - Body: &icmp.DstUnreach{ - Data: []byte("ERROR-INVOKING-PACKET"), - Extensions: []icmp.Extension{ - &icmp.MPLSLabelStack{ - Class: 1, - Type: 1, - Labels: []icmp.MPLSLabel{ - { - Label: 16014, - TC: 0x4, - S: true, - TTL: 255, + t.Run("IPv4", func(t *testing.T) { + for i, tm := range []icmp.Message{ + { + Type: ipv4.ICMPTypeDestinationUnreachable, Code: 15, + Body: &icmp.DstUnreach{ + Data: []byte("ERROR-INVOKING-PACKET"), + Extensions: []icmp.Extension{ + &icmp.MPLSLabelStack{ + Class: 1, + Type: 1, + Labels: []icmp.MPLSLabel{ + { + Label: 16014, + TC: 0x4, + S: true, + TTL: 255, + }, + }, + }, + &icmp.InterfaceInfo{ + Class: 2, + Type: 0x0f, + Interface: &net.Interface{ + Index: 15, + Name: "en101", + MTU: 8192, + }, + Addr: &net.IPAddr{ + IP: net.IPv4(192, 168, 0, 1).To4(), + }, }, }, }, - &icmp.InterfaceInfo{ - Class: 2, - Type: 0x0f, - Interface: &net.Interface{ - Index: 15, - Name: "en101", - MTU: 8192, + }, + { + Type: ipv4.ICMPTypeTimeExceeded, Code: 1, + Body: &icmp.TimeExceeded{ + Data: []byte("ERROR-INVOKING-PACKET"), + Extensions: []icmp.Extension{ + &icmp.InterfaceInfo{ + Class: 2, + Type: 0x0f, + Interface: &net.Interface{ + Index: 15, + Name: "en101", + MTU: 8192, + }, + Addr: &net.IPAddr{ + IP: net.IPv4(192, 168, 0, 1).To4(), + }, + }, + &icmp.MPLSLabelStack{ + Class: 1, + Type: 1, + Labels: []icmp.MPLSLabel{ + { + Label: 16014, + TC: 0x4, + S: true, + TTL: 255, + }, + }, + }, }, - Addr: &net.IPAddr{ - IP: net.ParseIP("fe80::1"), - Zone: "en101", + }, + }, + { + Type: ipv4.ICMPTypeParameterProblem, Code: 2, + Body: &icmp.ParamProb{ + Pointer: 8, + Data: []byte("ERROR-INVOKING-PACKET"), + Extensions: []icmp.Extension{ + &icmp.MPLSLabelStack{ + Class: 1, + Type: 1, + Labels: []icmp.MPLSLabel{ + { + Label: 16014, + TC: 0x4, + S: true, + TTL: 255, + }, + }, + }, + &icmp.InterfaceInfo{ + Class: 2, + Type: 0x0f, + Interface: &net.Interface{ + Index: 15, + Name: "en101", + MTU: 8192, + }, + Addr: &net.IPAddr{ + IP: net.IPv4(192, 168, 0, 1).To4(), + }, + }, + &icmp.InterfaceInfo{ + Class: 2, + Type: 0x2f, + Interface: &net.Interface{ + Index: 16, + Name: "en102", + MTU: 8192, + }, + Addr: &net.IPAddr{ + IP: net.IPv4(192, 168, 0, 2).To4(), + }, + }, }, }, }, - }, - }, - { - Type: ipv6.ICMPTypeTimeExceeded, Code: 1, - Body: &icmp.TimeExceeded{ - Data: []byte("ERROR-INVOKING-PACKET"), - Extensions: []icmp.Extension{ - &icmp.InterfaceInfo{ - Class: 2, - Type: 0x0f, - Interface: &net.Interface{ - Index: 15, - Name: "en101", - MTU: 8192, + { + Type: ipv4.ICMPTypeExtendedEchoRequest, Code: 0, + Body: &icmp.ExtendedEchoRequest{ + ID: 1, Seq: 2, Local: true, + Extensions: []icmp.Extension{ + &icmp.InterfaceIdent{ + Class: 3, + Type: 1, + Name: "en101", + }, }, - Addr: &net.IPAddr{ - IP: net.ParseIP("fe80::1"), - Zone: "en101", + }, + }, + { + Type: ipv4.ICMPTypeExtendedEchoRequest, Code: 0, + Body: &icmp.ExtendedEchoRequest{ + ID: 1, Seq: 2, Local: true, + Extensions: []icmp.Extension{ + &icmp.InterfaceIdent{ + Class: 3, + Type: 2, + Index: 911, + }, + &icmp.InterfaceIdent{ + Class: 3, + Type: 1, + Name: "en101", + }, }, }, - &icmp.MPLSLabelStack{ - Class: 1, - Type: 1, - Labels: []icmp.MPLSLabel{ - { - Label: 16014, - TC: 0x4, - S: true, - TTL: 255, + }, + { + Type: ipv4.ICMPTypeExtendedEchoRequest, Code: 0, + Body: &icmp.ExtendedEchoRequest{ + ID: 1, Seq: 2, + Extensions: []icmp.Extension{ + &icmp.InterfaceIdent{ + Class: 3, + Type: 3, + AFI: iana.AddrFamily48bitMAC, + Addr: []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab}, }, }, }, - &icmp.InterfaceInfo{ - Class: 2, - Type: 0x2f, - Interface: &net.Interface{ - Index: 16, - Name: "en102", - MTU: 8192, + }, + } { + if err := fn(t, iana.ProtocolICMP, tm); err != nil { + t.Errorf("#%d: %v", i, err) + } + } + }) + t.Run("IPv6", func(t *testing.T) { + for i, tm := range []icmp.Message{ + { + Type: ipv6.ICMPTypeDestinationUnreachable, Code: 6, + Body: &icmp.DstUnreach{ + Data: []byte("ERROR-INVOKING-PACKET"), + Extensions: []icmp.Extension{ + &icmp.MPLSLabelStack{ + Class: 1, + Type: 1, + Labels: []icmp.MPLSLabel{ + { + Label: 16014, + TC: 0x4, + S: true, + TTL: 255, + }, + }, + }, + &icmp.InterfaceInfo{ + Class: 2, + Type: 0x0f, + Interface: &net.Interface{ + Index: 15, + Name: "en101", + MTU: 8192, + }, + Addr: &net.IPAddr{ + IP: net.ParseIP("fe80::1"), + Zone: "en101", + }, + }, }, - Addr: &net.IPAddr{ - IP: net.ParseIP("fe80::1"), - Zone: "en102", + }, + }, + { + Type: ipv6.ICMPTypeTimeExceeded, Code: 1, + Body: &icmp.TimeExceeded{ + Data: []byte("ERROR-INVOKING-PACKET"), + Extensions: []icmp.Extension{ + &icmp.InterfaceInfo{ + Class: 2, + Type: 0x0f, + Interface: &net.Interface{ + Index: 15, + Name: "en101", + MTU: 8192, + }, + Addr: &net.IPAddr{ + IP: net.ParseIP("fe80::1"), + Zone: "en101", + }, + }, + &icmp.MPLSLabelStack{ + Class: 1, + Type: 1, + Labels: []icmp.MPLSLabel{ + { + Label: 16014, + TC: 0x4, + S: true, + TTL: 255, + }, + }, + }, + &icmp.InterfaceInfo{ + Class: 2, + Type: 0x2f, + Interface: &net.Interface{ + Index: 16, + Name: "en102", + MTU: 8192, + }, + Addr: &net.IPAddr{ + IP: net.ParseIP("fe80::1"), + Zone: "en102", + }, + }, }, }, }, - }, - }, -} - -func TestMarshalAndParseMultipartMessageForIPv6(t *testing.T) { - pshicmp := icmp.IPv6PseudoHeader(net.ParseIP("fe80::1"), net.ParseIP("ff02::1")) - for i, tt := range marshalAndParseMultipartMessageForIPv6Tests { - for _, psh := range [][]byte{pshicmp, nil} { - b, err := tt.Marshal(psh) - if err != nil { - t.Fatal(err) - } - if b[4] != 16 { - t.Errorf("#%v: got %v; want 16", i, b[4]) - } - m, err := icmp.ParseMessage(iana.ProtocolIPv6ICMP, b) - if err != nil { - t.Fatal(err) - } - if m.Type != tt.Type || m.Code != tt.Code { - t.Errorf("#%v: got %v; want %v", i, m, &tt) - } - switch m.Type { - case ipv6.ICMPTypeDestinationUnreachable: - got, want := m.Body.(*icmp.DstUnreach), tt.Body.(*icmp.DstUnreach) - if !reflect.DeepEqual(got.Extensions, want.Extensions) { - t.Error(dumpExtensions(i, got.Extensions, want.Extensions)) - } - if len(got.Data) != 128 { - t.Errorf("#%v: got %v; want 128", i, len(got.Data)) - } - case ipv6.ICMPTypeTimeExceeded: - got, want := m.Body.(*icmp.TimeExceeded), tt.Body.(*icmp.TimeExceeded) - if !reflect.DeepEqual(got.Extensions, want.Extensions) { - t.Error(dumpExtensions(i, got.Extensions, want.Extensions)) - } - if len(got.Data) != 128 { - t.Errorf("#%v: got %v; want 128", i, len(got.Data)) - } + { + Type: ipv6.ICMPTypeExtendedEchoRequest, Code: 0, + Body: &icmp.ExtendedEchoRequest{ + ID: 1, Seq: 2, Local: true, + Extensions: []icmp.Extension{ + &icmp.InterfaceIdent{ + Class: 3, + Type: 1, + Name: "en101", + }, + }, + }, + }, + { + Type: ipv6.ICMPTypeExtendedEchoRequest, Code: 0, + Body: &icmp.ExtendedEchoRequest{ + ID: 1, Seq: 2, Local: true, + Extensions: []icmp.Extension{ + &icmp.InterfaceIdent{ + Class: 3, + Type: 1, + Name: "en101", + }, + &icmp.InterfaceIdent{ + Class: 3, + Type: 2, + Index: 911, + }, + }, + }, + }, + { + Type: ipv6.ICMPTypeExtendedEchoRequest, Code: 0, + Body: &icmp.ExtendedEchoRequest{ + ID: 1, Seq: 2, + Extensions: []icmp.Extension{ + &icmp.InterfaceIdent{ + Class: 3, + Type: 3, + AFI: iana.AddrFamilyIPv4, + Addr: []byte{192, 0, 2, 1}, + }, + }, + }, + }, + } { + if err := fn(t, iana.ProtocolIPv6ICMP, tm); err != nil { + t.Errorf("#%d: %v", i, err) } } - } + }) } -func dumpExtensions(i int, gotExts, wantExts []icmp.Extension) string { +func dumpExtensions(gotExts, wantExts []icmp.Extension) string { var s string - for j, got := range gotExts { + for i, got := range gotExts { switch got := got.(type) { case *icmp.MPLSLabelStack: - want := wantExts[j].(*icmp.MPLSLabelStack) + want := wantExts[i].(*icmp.MPLSLabelStack) if !reflect.DeepEqual(got, want) { - s += fmt.Sprintf("#%v/%v: got %#v; want %#v\n", i, j, got, want) + s += fmt.Sprintf("#%d: got %#v; want %#v\n", i, got, want) } case *icmp.InterfaceInfo: - want := wantExts[j].(*icmp.InterfaceInfo) + want := wantExts[i].(*icmp.InterfaceInfo) + if !reflect.DeepEqual(got, want) { + s += fmt.Sprintf("#%d: got %#v, %#v, %#v; want %#v, %#v, %#v\n", i, got, got.Interface, got.Addr, want, want.Interface, want.Addr) + } + case *icmp.InterfaceIdent: + want := wantExts[i].(*icmp.InterfaceIdent) if !reflect.DeepEqual(got, want) { - s += fmt.Sprintf("#%v/%v: got %#v, %#v, %#v; want %#v, %#v, %#v\n", i, j, got, got.Interface, got.Addr, want, want.Interface, want.Addr) + s += fmt.Sprintf("#%d: got %#v; want %#v\n", i, got, want) } } } + if len(s) == 0 { + return "" + } return s[:len(s)-1] } -var multipartMessageBodyLenTests = []struct { - proto int - in icmp.MessageBody - out int -}{ - { - iana.ProtocolICMP, - &icmp.DstUnreach{ - Data: make([]byte, ipv4.HeaderLen), +func TestMultipartMessageBodyLen(t *testing.T) { + for i, tt := range []struct { + proto int + in icmp.MessageBody + out int + }{ + { + iana.ProtocolICMP, + &icmp.DstUnreach{ + Data: make([]byte, ipv4.HeaderLen), + }, + 4 + ipv4.HeaderLen, // unused and original datagram }, - 4 + ipv4.HeaderLen, // unused and original datagram - }, - { - iana.ProtocolICMP, - &icmp.TimeExceeded{ - Data: make([]byte, ipv4.HeaderLen), + { + iana.ProtocolICMP, + &icmp.TimeExceeded{ + Data: make([]byte, ipv4.HeaderLen), + }, + 4 + ipv4.HeaderLen, // unused and original datagram }, - 4 + ipv4.HeaderLen, // unused and original datagram - }, - { - iana.ProtocolICMP, - &icmp.ParamProb{ - Data: make([]byte, ipv4.HeaderLen), + { + iana.ProtocolICMP, + &icmp.ParamProb{ + Data: make([]byte, ipv4.HeaderLen), + }, + 4 + ipv4.HeaderLen, // [pointer, unused] and original datagram }, - 4 + ipv4.HeaderLen, // [pointer, unused] and original datagram - }, - { - iana.ProtocolICMP, - &icmp.ParamProb{ - Data: make([]byte, ipv4.HeaderLen), - Extensions: []icmp.Extension{ - &icmp.MPLSLabelStack{}, + { + iana.ProtocolICMP, + &icmp.ParamProb{ + Data: make([]byte, ipv4.HeaderLen), + Extensions: []icmp.Extension{ + &icmp.MPLSLabelStack{}, + }, }, + 4 + 4 + 4 + 0 + 128, // [pointer, length, unused], extension header, object header, object payload, original datagram }, - 4 + 4 + 4 + 0 + 128, // [pointer, length, unused], extension header, object header, object payload, original datagram - }, - { - iana.ProtocolICMP, - &icmp.ParamProb{ - Data: make([]byte, 128), - Extensions: []icmp.Extension{ - &icmp.MPLSLabelStack{}, + { + iana.ProtocolICMP, + &icmp.ParamProb{ + Data: make([]byte, 128), + Extensions: []icmp.Extension{ + &icmp.MPLSLabelStack{}, + }, }, + 4 + 4 + 4 + 0 + 128, // [pointer, length, unused], extension header, object header, object payload and original datagram }, - 4 + 4 + 4 + 0 + 128, // [pointer, length, unused], extension header, object header, object payload and original datagram - }, - { - iana.ProtocolICMP, - &icmp.ParamProb{ - Data: make([]byte, 129), - Extensions: []icmp.Extension{ - &icmp.MPLSLabelStack{}, + { + iana.ProtocolICMP, + &icmp.ParamProb{ + Data: make([]byte, 129), + Extensions: []icmp.Extension{ + &icmp.MPLSLabelStack{}, + }, }, + 4 + 4 + 4 + 0 + 132, // [pointer, length, unused], extension header, object header, object payload and original datagram }, - 4 + 4 + 4 + 0 + 132, // [pointer, length, unused], extension header, object header, object payload and original datagram - }, - { - iana.ProtocolIPv6ICMP, - &icmp.DstUnreach{ - Data: make([]byte, ipv6.HeaderLen), + { + iana.ProtocolIPv6ICMP, + &icmp.DstUnreach{ + Data: make([]byte, ipv6.HeaderLen), + }, + 4 + ipv6.HeaderLen, // unused and original datagram }, - 4 + ipv6.HeaderLen, // unused and original datagram - }, - { - iana.ProtocolIPv6ICMP, - &icmp.PacketTooBig{ - Data: make([]byte, ipv6.HeaderLen), + { + iana.ProtocolIPv6ICMP, + &icmp.PacketTooBig{ + Data: make([]byte, ipv6.HeaderLen), + }, + 4 + ipv6.HeaderLen, // mtu and original datagram }, - 4 + ipv6.HeaderLen, // mtu and original datagram - }, - { - iana.ProtocolIPv6ICMP, - &icmp.TimeExceeded{ - Data: make([]byte, ipv6.HeaderLen), + { + iana.ProtocolIPv6ICMP, + &icmp.TimeExceeded{ + Data: make([]byte, ipv6.HeaderLen), + }, + 4 + ipv6.HeaderLen, // unused and original datagram }, - 4 + ipv6.HeaderLen, // unused and original datagram - }, - { - iana.ProtocolIPv6ICMP, - &icmp.ParamProb{ - Data: make([]byte, ipv6.HeaderLen), + { + iana.ProtocolIPv6ICMP, + &icmp.ParamProb{ + Data: make([]byte, ipv6.HeaderLen), + }, + 4 + ipv6.HeaderLen, // pointer and original datagram }, - 4 + ipv6.HeaderLen, // pointer and original datagram - }, - { - iana.ProtocolIPv6ICMP, - &icmp.DstUnreach{ - Data: make([]byte, 127), - Extensions: []icmp.Extension{ - &icmp.MPLSLabelStack{}, + { + iana.ProtocolIPv6ICMP, + &icmp.DstUnreach{ + Data: make([]byte, 127), + Extensions: []icmp.Extension{ + &icmp.MPLSLabelStack{}, + }, }, + 4 + 4 + 4 + 0 + 128, // [length, unused], extension header, object header, object payload and original datagram }, - 4 + 4 + 4 + 0 + 128, // [length, unused], extension header, object header, object payload and original datagram - }, - { - iana.ProtocolIPv6ICMP, - &icmp.DstUnreach{ - Data: make([]byte, 128), - Extensions: []icmp.Extension{ - &icmp.MPLSLabelStack{}, + { + iana.ProtocolIPv6ICMP, + &icmp.DstUnreach{ + Data: make([]byte, 128), + Extensions: []icmp.Extension{ + &icmp.MPLSLabelStack{}, + }, }, + 4 + 4 + 4 + 0 + 128, // [length, unused], extension header, object header, object payload and original datagram }, - 4 + 4 + 4 + 0 + 128, // [length, unused], extension header, object header, object payload and original datagram - }, - { - iana.ProtocolIPv6ICMP, - &icmp.DstUnreach{ - Data: make([]byte, 129), - Extensions: []icmp.Extension{ - &icmp.MPLSLabelStack{}, + { + iana.ProtocolIPv6ICMP, + &icmp.DstUnreach{ + Data: make([]byte, 129), + Extensions: []icmp.Extension{ + &icmp.MPLSLabelStack{}, + }, }, + 4 + 4 + 4 + 0 + 136, // [length, unused], extension header, object header, object payload and original datagram }, - 4 + 4 + 4 + 0 + 136, // [length, unused], extension header, object header, object payload and original datagram - }, -} -func TestMultipartMessageBodyLen(t *testing.T) { - for i, tt := range multipartMessageBodyLenTests { + { + iana.ProtocolICMP, + &icmp.ExtendedEchoRequest{}, + 4, // [id, seq, l-bit] + }, + { + iana.ProtocolICMP, + &icmp.ExtendedEchoRequest{ + Extensions: []icmp.Extension{ + &icmp.InterfaceIdent{}, + }, + }, + 4 + 4 + 4, // [id, seq, l-bit], extension header, object header + }, + { + iana.ProtocolIPv6ICMP, + &icmp.ExtendedEchoRequest{ + Extensions: []icmp.Extension{ + &icmp.InterfaceIdent{ + Type: 3, + AFI: iana.AddrFamilyNSAP, + Addr: []byte{0x49, 0x00, 0x01, 0xaa, 0xaa, 0xbb, 0xbb, 0xcc, 0xcc, 0x00}, + }, + }, + }, + 4 + 4 + 4 + 16, // [id, seq, l-bit], extension header, object header, object payload + }, + } { if out := tt.in.Len(tt.proto); out != tt.out { t.Errorf("#%d: got %d; want %d", i, out, tt.out) } diff --git a/vendor/golang.org/x/net/icmp/packettoobig.go b/vendor/golang.org/x/net/icmp/packettoobig.go index a1c9df7..afbf24f 100644 --- a/vendor/golang.org/x/net/icmp/packettoobig.go +++ b/vendor/golang.org/x/net/icmp/packettoobig.go @@ -29,7 +29,7 @@ func (p *PacketTooBig) Marshal(proto int) ([]byte, error) { } // parsePacketTooBig parses b as an ICMP packet too big message body. -func parsePacketTooBig(proto int, b []byte) (MessageBody, error) { +func parsePacketTooBig(proto int, _ Type, b []byte) (MessageBody, error) { bodyLen := len(b) if bodyLen < 4 { return nil, errMessageTooShort diff --git a/vendor/golang.org/x/net/icmp/paramprob.go b/vendor/golang.org/x/net/icmp/paramprob.go index 0a2548d..8587255 100644 --- a/vendor/golang.org/x/net/icmp/paramprob.go +++ b/vendor/golang.org/x/net/icmp/paramprob.go @@ -21,7 +21,7 @@ func (p *ParamProb) Len(proto int) int { if p == nil { return 0 } - l, _ := multipartMessageBodyDataLen(proto, p.Data, p.Extensions) + l, _ := multipartMessageBodyDataLen(proto, true, p.Data, p.Extensions) return 4 + l } @@ -33,7 +33,7 @@ func (p *ParamProb) Marshal(proto int) ([]byte, error) { copy(b[4:], p.Data) return b, nil } - b, err := marshalMultipartMessageBody(proto, p.Data, p.Extensions) + b, err := marshalMultipartMessageBody(proto, true, p.Data, p.Extensions) if err != nil { return nil, err } @@ -42,7 +42,7 @@ func (p *ParamProb) Marshal(proto int) ([]byte, error) { } // parseParamProb parses b as an ICMP parameter problem message body. -func parseParamProb(proto int, b []byte) (MessageBody, error) { +func parseParamProb(proto int, typ Type, b []byte) (MessageBody, error) { if len(b) < 4 { return nil, errMessageTooShort } @@ -55,7 +55,7 @@ func parseParamProb(proto int, b []byte) (MessageBody, error) { } p.Pointer = uintptr(b[0]) var err error - p.Data, p.Extensions, err = parseMultipartMessageBody(proto, b) + p.Data, p.Extensions, err = parseMultipartMessageBody(proto, typ, b) if err != nil { return nil, err } diff --git a/vendor/golang.org/x/net/icmp/ping_test.go b/vendor/golang.org/x/net/icmp/ping_test.go deleted file mode 100644 index 3171dad..0000000 --- a/vendor/golang.org/x/net/icmp/ping_test.go +++ /dev/null @@ -1,200 +0,0 @@ -// Copyright 2014 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. - -package icmp_test - -import ( - "errors" - "fmt" - "net" - "os" - "runtime" - "sync" - "testing" - "time" - - "golang.org/x/net/icmp" - "golang.org/x/net/internal/iana" - "golang.org/x/net/internal/nettest" - "golang.org/x/net/ipv4" - "golang.org/x/net/ipv6" -) - -func googleAddr(c *icmp.PacketConn, protocol int) (net.Addr, error) { - const host = "www.google.com" - ips, err := net.LookupIP(host) - if err != nil { - return nil, err - } - netaddr := func(ip net.IP) (net.Addr, error) { - switch c.LocalAddr().(type) { - case *net.UDPAddr: - return &net.UDPAddr{IP: ip}, nil - case *net.IPAddr: - return &net.IPAddr{IP: ip}, nil - default: - return nil, errors.New("neither UDPAddr nor IPAddr") - } - } - for _, ip := range ips { - switch protocol { - case iana.ProtocolICMP: - if ip.To4() != nil { - return netaddr(ip) - } - case iana.ProtocolIPv6ICMP: - if ip.To16() != nil && ip.To4() == nil { - return netaddr(ip) - } - } - } - return nil, errors.New("no A or AAAA record") -} - -type pingTest struct { - network, address string - protocol int - mtype icmp.Type -} - -var nonPrivilegedPingTests = []pingTest{ - {"udp4", "0.0.0.0", iana.ProtocolICMP, ipv4.ICMPTypeEcho}, - - {"udp6", "::", iana.ProtocolIPv6ICMP, ipv6.ICMPTypeEchoRequest}, -} - -func TestNonPrivilegedPing(t *testing.T) { - if testing.Short() { - t.Skip("avoid external network") - } - switch runtime.GOOS { - case "darwin": - case "linux": - t.Log("you may need to adjust the net.ipv4.ping_group_range kernel state") - default: - t.Skipf("not supported on %s", runtime.GOOS) - } - - for i, tt := range nonPrivilegedPingTests { - if err := doPing(tt, i); err != nil { - t.Error(err) - } - } -} - -var privilegedPingTests = []pingTest{ - {"ip4:icmp", "0.0.0.0", iana.ProtocolICMP, ipv4.ICMPTypeEcho}, - - {"ip6:ipv6-icmp", "::", iana.ProtocolIPv6ICMP, ipv6.ICMPTypeEchoRequest}, -} - -func TestPrivilegedPing(t *testing.T) { - if testing.Short() { - t.Skip("avoid external network") - } - if m, ok := nettest.SupportsRawIPSocket(); !ok { - t.Skip(m) - } - - for i, tt := range privilegedPingTests { - if err := doPing(tt, i); err != nil { - t.Error(err) - } - } -} - -func doPing(tt pingTest, seq int) error { - c, err := icmp.ListenPacket(tt.network, tt.address) - if err != nil { - return err - } - defer c.Close() - - dst, err := googleAddr(c, tt.protocol) - if err != nil { - return err - } - - if tt.network != "udp6" && tt.protocol == iana.ProtocolIPv6ICMP { - var f ipv6.ICMPFilter - f.SetAll(true) - f.Accept(ipv6.ICMPTypeDestinationUnreachable) - f.Accept(ipv6.ICMPTypePacketTooBig) - f.Accept(ipv6.ICMPTypeTimeExceeded) - f.Accept(ipv6.ICMPTypeParameterProblem) - f.Accept(ipv6.ICMPTypeEchoReply) - if err := c.IPv6PacketConn().SetICMPFilter(&f); err != nil { - return err - } - } - - wm := icmp.Message{ - Type: tt.mtype, Code: 0, - Body: &icmp.Echo{ - ID: os.Getpid() & 0xffff, Seq: 1 << uint(seq), - Data: []byte("HELLO-R-U-THERE"), - }, - } - wb, err := wm.Marshal(nil) - if err != nil { - return err - } - if n, err := c.WriteTo(wb, dst); err != nil { - return err - } else if n != len(wb) { - return fmt.Errorf("got %v; want %v", n, len(wb)) - } - - rb := make([]byte, 1500) - if err := c.SetReadDeadline(time.Now().Add(3 * time.Second)); err != nil { - return err - } - n, peer, err := c.ReadFrom(rb) - if err != nil { - return err - } - rm, err := icmp.ParseMessage(tt.protocol, rb[:n]) - if err != nil { - return err - } - switch rm.Type { - case ipv4.ICMPTypeEchoReply, ipv6.ICMPTypeEchoReply: - return nil - default: - return fmt.Errorf("got %+v from %v; want echo reply", rm, peer) - } -} - -func TestConcurrentNonPrivilegedListenPacket(t *testing.T) { - if testing.Short() { - t.Skip("avoid external network") - } - switch runtime.GOOS { - case "darwin": - case "linux": - t.Log("you may need to adjust the net.ipv4.ping_group_range kernel state") - default: - t.Skipf("not supported on %s", runtime.GOOS) - } - - network, address := "udp4", "127.0.0.1" - if !nettest.SupportsIPv4() { - network, address = "udp6", "::1" - } - const N = 1000 - var wg sync.WaitGroup - wg.Add(N) - for i := 0; i < N; i++ { - go func() { - defer wg.Done() - c, err := icmp.ListenPacket(network, address) - if err != nil { - t.Error(err) - return - } - c.Close() - }() - } - wg.Wait() -} diff --git a/vendor/golang.org/x/net/icmp/timeexceeded.go b/vendor/golang.org/x/net/icmp/timeexceeded.go index 344e158..14e9e23 100644 --- a/vendor/golang.org/x/net/icmp/timeexceeded.go +++ b/vendor/golang.org/x/net/icmp/timeexceeded.go @@ -15,23 +15,23 @@ func (p *TimeExceeded) Len(proto int) int { if p == nil { return 0 } - l, _ := multipartMessageBodyDataLen(proto, p.Data, p.Extensions) + l, _ := multipartMessageBodyDataLen(proto, true, p.Data, p.Extensions) return 4 + l } // Marshal implements the Marshal method of MessageBody interface. func (p *TimeExceeded) Marshal(proto int) ([]byte, error) { - return marshalMultipartMessageBody(proto, p.Data, p.Extensions) + return marshalMultipartMessageBody(proto, true, p.Data, p.Extensions) } // parseTimeExceeded parses b as an ICMP time exceeded message body. -func parseTimeExceeded(proto int, b []byte) (MessageBody, error) { +func parseTimeExceeded(proto int, typ Type, b []byte) (MessageBody, error) { if len(b) < 4 { return nil, errMessageTooShort } p := &TimeExceeded{} var err error - p.Data, p.Extensions, err = parseMultipartMessageBody(proto, b) + p.Data, p.Extensions, err = parseMultipartMessageBody(proto, typ, b) if err != nil { return nil, err } diff --git a/vendor/golang.org/x/net/idna/example_test.go b/vendor/golang.org/x/net/idna/example_test.go index 941e707..948f6eb 100644 --- a/vendor/golang.org/x/net/idna/example_test.go +++ b/vendor/golang.org/x/net/idna/example_test.go @@ -51,6 +51,10 @@ func ExampleNew() { idna.Transitional(true)) // Map ß -> ss fmt.Println(p.ToASCII("*.faß.com")) + // Lookup for registration. Also does not allow '*'. + p = idna.New(idna.ValidateForRegistration()) + fmt.Println(p.ToUnicode("*.faß.com")) + // Set up a profile maps for lookup, but allows wild cards. p = idna.New( idna.MapForLookup(), @@ -60,6 +64,7 @@ func ExampleNew() { // Output: // *.xn--fa-hia.com - // *.fass.com idna: disallowed rune U+002E + // *.fass.com idna: disallowed rune U+002A + // *.faß.com idna: disallowed rune U+002A // *.fass.com } diff --git a/vendor/golang.org/x/net/idna/idna.go b/vendor/golang.org/x/net/idna/idna.go index ee2dbda..346fe44 100644 --- a/vendor/golang.org/x/net/idna/idna.go +++ b/vendor/golang.org/x/net/idna/idna.go @@ -21,6 +21,7 @@ import ( "unicode/utf8" "golang.org/x/text/secure/bidirule" + "golang.org/x/text/unicode/bidi" "golang.org/x/text/unicode/norm" ) @@ -67,6 +68,15 @@ func VerifyDNSLength(verify bool) Option { return func(o *options) { o.verifyDNSLength = verify } } +// RemoveLeadingDots removes leading label separators. Leading runes that map to +// dots, such as U+3002 IDEOGRAPHIC FULL STOP, are removed as well. +// +// This is the behavior suggested by the UTS #46 and is adopted by some +// browsers. +func RemoveLeadingDots(remove bool) Option { + return func(o *options) { o.removeLeadingDots = remove } +} + // ValidateLabels sets whether to check the mandatory label validation criteria // as defined in Section 5.4 of RFC 5891. This includes testing for correct use // of hyphens ('-'), normalization, validity of runes, and the context rules. @@ -83,7 +93,7 @@ func ValidateLabels(enable bool) Option { } } -// StrictDomainName limits the set of permissable ASCII characters to those +// StrictDomainName limits the set of permissible ASCII characters to those // allowed in domain names as defined in RFC 1034 (A-Z, a-z, 0-9 and the // hyphen). This is set by default for MapForLookup and ValidateForRegistration. // @@ -137,10 +147,11 @@ func MapForLookup() Option { } type options struct { - transitional bool - useSTD3Rules bool - validateLabels bool - verifyDNSLength bool + transitional bool + useSTD3Rules bool + validateLabels bool + verifyDNSLength bool + removeLeadingDots bool trie *idnaTrie @@ -149,14 +160,14 @@ type options struct { // mapping implements a validation and mapping step as defined in RFC 5895 // or UTS 46, tailored to, for example, domain registration or lookup. - mapping func(p *Profile, s string) (string, error) + mapping func(p *Profile, s string) (mapped string, isBidi bool, err error) // bidirule, if specified, checks whether s conforms to the Bidi Rule // defined in RFC 5893. bidirule func(s string) bool } -// A Profile defines the configuration of a IDNA mapper. +// A Profile defines the configuration of an IDNA mapper. type Profile struct { options } @@ -289,12 +300,16 @@ func (e runeError) Error() string { // see http://www.unicode.org/reports/tr46. func (p *Profile) process(s string, toASCII bool) (string, error) { var err error + var isBidi bool if p.mapping != nil { - s, err = p.mapping(p, s) + s, isBidi, err = p.mapping(p, s) } // Remove leading empty labels. - for ; len(s) > 0 && s[0] == '.'; s = s[1:] { + if p.removeLeadingDots { + for ; len(s) > 0 && s[0] == '.'; s = s[1:] { + } } + // TODO: allow for a quick check of the tables data. // It seems like we should only create this error on ToASCII, but the // UTS 46 conformance tests suggests we should always check this. if err == nil && p.verifyDNSLength && s == "" { @@ -320,6 +335,7 @@ func (p *Profile) process(s string, toASCII bool) (string, error) { // Spec says keep the old label. continue } + isBidi = isBidi || bidirule.DirectionString(u) != bidi.LeftToRight labels.set(u) if err == nil && p.validateLabels { err = p.fromPuny(p, u) @@ -334,6 +350,14 @@ func (p *Profile) process(s string, toASCII bool) (string, error) { err = p.validateLabel(label) } } + if isBidi && p.bidirule != nil && err == nil { + for labels.reset(); !labels.done(); labels.next() { + if !p.bidirule(labels.label()) { + err = &labelError{s, "B"} + break + } + } + } if toASCII { for labels.reset(); !labels.done(); labels.next() { label := labels.label() @@ -365,41 +389,77 @@ func (p *Profile) process(s string, toASCII bool) (string, error) { return s, err } -func normalize(p *Profile, s string) (string, error) { - return norm.NFC.String(s), nil +func normalize(p *Profile, s string) (mapped string, isBidi bool, err error) { + // TODO: consider first doing a quick check to see if any of these checks + // need to be done. This will make it slower in the general case, but + // faster in the common case. + mapped = norm.NFC.String(s) + isBidi = bidirule.DirectionString(mapped) == bidi.RightToLeft + return mapped, isBidi, nil } -func validateRegistration(p *Profile, s string) (string, error) { +func validateRegistration(p *Profile, s string) (idem string, bidi bool, err error) { + // TODO: filter need for normalization in loop below. if !norm.NFC.IsNormalString(s) { - return s, &labelError{s, "V1"} + return s, false, &labelError{s, "V1"} } - var err error for i := 0; i < len(s); { v, sz := trie.lookupString(s[i:]) - i += sz + if sz == 0 { + return s, bidi, runeError(utf8.RuneError) + } + bidi = bidi || info(v).isBidi(s[i:]) // Copy bytes not copied so far. switch p.simplify(info(v).category()) { // TODO: handle the NV8 defined in the Unicode idna data set to allow // for strict conformance to IDNA2008. case valid, deviation: case disallowed, mapped, unknown, ignored: - if err == nil { - r, _ := utf8.DecodeRuneInString(s[i:]) - err = runeError(r) - } + r, _ := utf8.DecodeRuneInString(s[i:]) + return s, bidi, runeError(r) } + i += sz } - return s, err + return s, bidi, nil } -func validateAndMap(p *Profile, s string) (string, error) { +func (c info) isBidi(s string) bool { + if !c.isMapped() { + return c&attributesMask == rtl + } + // TODO: also store bidi info for mapped data. This is possible, but a bit + // cumbersome and not for the common case. + p, _ := bidi.LookupString(s) + switch p.Class() { + case bidi.R, bidi.AL, bidi.AN: + return true + } + return false +} + +func validateAndMap(p *Profile, s string) (vm string, bidi bool, err error) { var ( - err error - b []byte - k int + b []byte + k int ) + // combinedInfoBits contains the or-ed bits of all runes. We use this + // to derive the mayNeedNorm bit later. This may trigger normalization + // overeagerly, but it will not do so in the common case. The end result + // is another 10% saving on BenchmarkProfile for the common case. + var combinedInfoBits info for i := 0; i < len(s); { v, sz := trie.lookupString(s[i:]) + if sz == 0 { + b = append(b, s[k:i]...) + b = append(b, "\ufffd"...) + k = len(s) + if err == nil { + err = runeError(utf8.RuneError) + } + break + } + combinedInfoBits |= info(v) + bidi = bidi || info(v).isBidi(s[i:]) start := i i += sz // Copy bytes not copied so far. @@ -408,7 +468,7 @@ func validateAndMap(p *Profile, s string) (string, error) { continue case disallowed: if err == nil { - r, _ := utf8.DecodeRuneInString(s[i:]) + r, _ := utf8.DecodeRuneInString(s[start:]) err = runeError(r) } continue @@ -426,7 +486,9 @@ func validateAndMap(p *Profile, s string) (string, error) { } if k == 0 { // No changes so far. - s = norm.NFC.String(s) + if combinedInfoBits&mayNeedNorm != 0 { + s = norm.NFC.String(s) + } } else { b = append(b, s[k:]...) if norm.NFC.QuickSpan(b) != len(b) { @@ -435,7 +497,7 @@ func validateAndMap(p *Profile, s string) (string, error) { // TODO: the punycode converters require strings as input. s = string(b) } - return s, err + return s, bidi, err } // A labelIter allows iterating over domain name labels. @@ -530,8 +592,13 @@ func validateFromPunycode(p *Profile, s string) error { if !norm.NFC.IsNormalString(s) { return &labelError{s, "V1"} } + // TODO: detect whether string may have to be normalized in the following + // loop. for i := 0; i < len(s); { v, sz := trie.lookupString(s[i:]) + if sz == 0 { + return runeError(utf8.RuneError) + } if c := p.simplify(info(v).category()); c != valid && c != deviation { return &labelError{s, "V6"} } @@ -604,16 +671,13 @@ var joinStates = [][numJoinTypes]joinState{ // validateLabel validates the criteria from Section 4.1. Item 1, 4, and 6 are // already implicitly satisfied by the overall implementation. -func (p *Profile) validateLabel(s string) error { +func (p *Profile) validateLabel(s string) (err error) { if s == "" { if p.verifyDNSLength { return &labelError{s, "A4"} } return nil } - if p.bidirule != nil && !p.bidirule(s) { - return &labelError{s, "B"} - } if !p.validateLabels { return nil } diff --git a/vendor/golang.org/x/net/idna/idna_test.go b/vendor/golang.org/x/net/idna/idna_test.go index b1bc6fa..0b067ca 100644 --- a/vendor/golang.org/x/net/idna/idna_test.go +++ b/vendor/golang.org/x/net/idna/idna_test.go @@ -39,5 +39,70 @@ func TestIDNA(t *testing.T) { } } +func TestIDNASeparators(t *testing.T) { + type subCase struct { + unicode string + wantASCII string + wantErr bool + } + + testCases := []struct { + name string + profile *Profile + subCases []subCase + }{ + { + name: "Punycode", profile: Punycode, + subCases: []subCase{ + {"example\u3002jp", "xn--examplejp-ck3h", false}, + {"東京\uFF0Ejp", "xn--jp-l92cn98g071o", false}, + {"大阪\uFF61jp", "xn--jp-ku9cz72u463f", false}, + }, + }, + { + name: "Lookup", profile: Lookup, + subCases: []subCase{ + {"example\u3002jp", "example.jp", false}, + {"東京\uFF0Ejp", "xn--1lqs71d.jp", false}, + {"大阪\uFF61jp", "xn--pssu33l.jp", false}, + }, + }, + { + name: "Display", profile: Display, + subCases: []subCase{ + {"example\u3002jp", "example.jp", false}, + {"東京\uFF0Ejp", "xn--1lqs71d.jp", false}, + {"大阪\uFF61jp", "xn--pssu33l.jp", false}, + }, + }, + { + name: "Registration", profile: Registration, + subCases: []subCase{ + {"example\u3002jp", "", true}, + {"東京\uFF0Ejp", "", true}, + {"大阪\uFF61jp", "", true}, + }, + }, + } + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + for _, c := range tc.subCases { + gotA, err := tc.profile.ToASCII(c.unicode) + if c.wantErr { + if err == nil { + t.Errorf("ToASCII(%q): got no error, but an error expected", c.unicode) + } + } else { + if err != nil { + t.Errorf("ToASCII(%q): got err=%v, but no error expected", c.unicode, err) + } else if gotA != c.wantASCII { + t.Errorf("ToASCII(%q): got %q, want %q", c.unicode, gotA, c.wantASCII) + } + } + } + }) + } +} + // TODO(nigeltao): test errors, once we've specified when ToASCII and ToUnicode // return errors. diff --git a/vendor/golang.org/x/net/idna/tables.go b/vendor/golang.org/x/net/idna/tables.go index d281934..f910b26 100644 --- a/vendor/golang.org/x/net/idna/tables.go +++ b/vendor/golang.org/x/net/idna/tables.go @@ -3,7 +3,7 @@ package idna // UnicodeVersion is the Unicode version from which the tables in this package are derived. -const UnicodeVersion = "9.0.0" +const UnicodeVersion = "10.0.0" var mappings string = "" + // Size: 8176 bytes "\x00\x01 \x03 ̈\x01a\x03 ̄\x012\x013\x03 ́\x03 ̧\x011\x01o\x051⁄4\x051⁄2" + @@ -544,7 +544,7 @@ func (t *idnaTrie) lookupStringUnsafe(s string) uint16 { return 0 } -// idnaTrie. Total size: 28496 bytes (27.83 KiB). Checksum: 43288b883596640e. +// idnaTrie. Total size: 29052 bytes (28.37 KiB). Checksum: ef06e7ecc26f36dd. type idnaTrie struct{} func newIdnaTrie(i int) *idnaTrie { @@ -554,17 +554,17 @@ func newIdnaTrie(i int) *idnaTrie { // lookupValue determines the type of block n and looks up the value for b. func (t *idnaTrie) lookupValue(n uint32, b byte) uint16 { switch { - case n < 123: + case n < 125: return uint16(idnaValues[n<<6+uint32(b)]) default: - n -= 123 + n -= 125 return uint16(idnaSparse.lookup(n, b)) } } -// idnaValues: 125 blocks, 8000 entries, 16000 bytes +// idnaValues: 127 blocks, 8128 entries, 16256 bytes // The third block is the zero block. -var idnaValues = [8000]uint16{ +var idnaValues = [8128]uint16{ // Block 0x0, offset 0x0 0x00: 0x0080, 0x01: 0x0080, 0x02: 0x0080, 0x03: 0x0080, 0x04: 0x0080, 0x05: 0x0080, 0x06: 0x0080, 0x07: 0x0080, 0x08: 0x0080, 0x09: 0x0080, 0x0a: 0x0080, 0x0b: 0x0080, @@ -675,14 +675,14 @@ var idnaValues = [8000]uint16{ 0x276: 0x0018, 0x277: 0x0018, 0x278: 0x0018, 0x279: 0x0018, 0x27a: 0x0018, 0x27b: 0x0018, 0x27c: 0x0018, 0x27d: 0x0018, 0x27e: 0x0018, 0x27f: 0x0018, // Block 0xa, offset 0x280 - 0x280: 0x03dd, 0x281: 0x03dd, 0x282: 0x1308, 0x283: 0x03f5, 0x284: 0x0379, 0x285: 0x040d, - 0x286: 0x1308, 0x287: 0x1308, 0x288: 0x1308, 0x289: 0x1308, 0x28a: 0x1308, 0x28b: 0x1308, - 0x28c: 0x1308, 0x28d: 0x1308, 0x28e: 0x1308, 0x28f: 0x13c0, 0x290: 0x1308, 0x291: 0x1308, - 0x292: 0x1308, 0x293: 0x1308, 0x294: 0x1308, 0x295: 0x1308, 0x296: 0x1308, 0x297: 0x1308, - 0x298: 0x1308, 0x299: 0x1308, 0x29a: 0x1308, 0x29b: 0x1308, 0x29c: 0x1308, 0x29d: 0x1308, - 0x29e: 0x1308, 0x29f: 0x1308, 0x2a0: 0x1308, 0x2a1: 0x1308, 0x2a2: 0x1308, 0x2a3: 0x1308, - 0x2a4: 0x1308, 0x2a5: 0x1308, 0x2a6: 0x1308, 0x2a7: 0x1308, 0x2a8: 0x1308, 0x2a9: 0x1308, - 0x2aa: 0x1308, 0x2ab: 0x1308, 0x2ac: 0x1308, 0x2ad: 0x1308, 0x2ae: 0x1308, 0x2af: 0x1308, + 0x280: 0x03dd, 0x281: 0x03dd, 0x282: 0x3308, 0x283: 0x03f5, 0x284: 0x0379, 0x285: 0x040d, + 0x286: 0x3308, 0x287: 0x3308, 0x288: 0x3308, 0x289: 0x3308, 0x28a: 0x3308, 0x28b: 0x3308, + 0x28c: 0x3308, 0x28d: 0x3308, 0x28e: 0x3308, 0x28f: 0x33c0, 0x290: 0x3308, 0x291: 0x3308, + 0x292: 0x3308, 0x293: 0x3308, 0x294: 0x3308, 0x295: 0x3308, 0x296: 0x3308, 0x297: 0x3308, + 0x298: 0x3308, 0x299: 0x3308, 0x29a: 0x3308, 0x29b: 0x3308, 0x29c: 0x3308, 0x29d: 0x3308, + 0x29e: 0x3308, 0x29f: 0x3308, 0x2a0: 0x3308, 0x2a1: 0x3308, 0x2a2: 0x3308, 0x2a3: 0x3308, + 0x2a4: 0x3308, 0x2a5: 0x3308, 0x2a6: 0x3308, 0x2a7: 0x3308, 0x2a8: 0x3308, 0x2a9: 0x3308, + 0x2aa: 0x3308, 0x2ab: 0x3308, 0x2ac: 0x3308, 0x2ad: 0x3308, 0x2ae: 0x3308, 0x2af: 0x3308, 0x2b0: 0xe00d, 0x2b1: 0x0008, 0x2b2: 0xe00d, 0x2b3: 0x0008, 0x2b4: 0x0425, 0x2b5: 0x0008, 0x2b6: 0xe00d, 0x2b7: 0x0008, 0x2b8: 0x0040, 0x2b9: 0x0040, 0x2ba: 0x03a2, 0x2bb: 0x0008, 0x2bc: 0x0008, 0x2bd: 0x0008, 0x2be: 0x03c2, 0x2bf: 0x043d, @@ -723,8 +723,8 @@ var idnaValues = [8000]uint16{ 0x376: 0xe00d, 0x377: 0x0008, 0x378: 0xe00d, 0x379: 0x0008, 0x37a: 0xe00d, 0x37b: 0x0008, 0x37c: 0xe00d, 0x37d: 0x0008, 0x37e: 0xe00d, 0x37f: 0x0008, // Block 0xe, offset 0x380 - 0x380: 0xe00d, 0x381: 0x0008, 0x382: 0x0018, 0x383: 0x1308, 0x384: 0x1308, 0x385: 0x1308, - 0x386: 0x1308, 0x387: 0x1308, 0x388: 0x1318, 0x389: 0x1318, 0x38a: 0xe00d, 0x38b: 0x0008, + 0x380: 0xe00d, 0x381: 0x0008, 0x382: 0x0018, 0x383: 0x3308, 0x384: 0x3308, 0x385: 0x3308, + 0x386: 0x3308, 0x387: 0x3308, 0x388: 0x3318, 0x389: 0x3318, 0x38a: 0xe00d, 0x38b: 0x0008, 0x38c: 0xe00d, 0x38d: 0x0008, 0x38e: 0xe00d, 0x38f: 0x0008, 0x390: 0xe00d, 0x391: 0x0008, 0x392: 0xe00d, 0x393: 0x0008, 0x394: 0xe00d, 0x395: 0x0008, 0x396: 0xe00d, 0x397: 0x0008, 0x398: 0xe00d, 0x399: 0x0008, 0x39a: 0xe00d, 0x39b: 0x0008, 0x39c: 0xe00d, 0x39d: 0x0008, @@ -759,129 +759,129 @@ var idnaValues = [8000]uint16{ 0x436: 0x03f5, 0x437: 0x03f5, 0x438: 0x03f5, 0x439: 0x03f5, 0x43a: 0x03f5, 0x43b: 0x03f5, 0x43c: 0x03f5, 0x43d: 0x03f5, 0x43e: 0x03f5, 0x43f: 0x03f5, // Block 0x11, offset 0x440 - 0x440: 0x0040, 0x441: 0x0040, 0x442: 0x0040, 0x443: 0x0040, 0x444: 0x0040, 0x445: 0x0040, - 0x446: 0x0018, 0x447: 0x0018, 0x448: 0x0018, 0x449: 0x0018, 0x44a: 0x0018, 0x44b: 0x0018, - 0x44c: 0x0018, 0x44d: 0x0018, 0x44e: 0x0018, 0x44f: 0x0018, 0x450: 0x1308, 0x451: 0x1308, - 0x452: 0x1308, 0x453: 0x1308, 0x454: 0x1308, 0x455: 0x1308, 0x456: 0x1308, 0x457: 0x1308, - 0x458: 0x1308, 0x459: 0x1308, 0x45a: 0x1308, 0x45b: 0x0018, 0x45c: 0x0340, 0x45d: 0x0040, - 0x45e: 0x0018, 0x45f: 0x0018, 0x460: 0x0208, 0x461: 0x0008, 0x462: 0x0408, 0x463: 0x0408, - 0x464: 0x0408, 0x465: 0x0408, 0x466: 0x0208, 0x467: 0x0408, 0x468: 0x0208, 0x469: 0x0408, - 0x46a: 0x0208, 0x46b: 0x0208, 0x46c: 0x0208, 0x46d: 0x0208, 0x46e: 0x0208, 0x46f: 0x0408, - 0x470: 0x0408, 0x471: 0x0408, 0x472: 0x0408, 0x473: 0x0208, 0x474: 0x0208, 0x475: 0x0208, - 0x476: 0x0208, 0x477: 0x0208, 0x478: 0x0208, 0x479: 0x0208, 0x47a: 0x0208, 0x47b: 0x0208, - 0x47c: 0x0208, 0x47d: 0x0208, 0x47e: 0x0208, 0x47f: 0x0208, + 0x440: 0x0840, 0x441: 0x0840, 0x442: 0x0840, 0x443: 0x0840, 0x444: 0x0840, 0x445: 0x0840, + 0x446: 0x0018, 0x447: 0x0018, 0x448: 0x0818, 0x449: 0x0018, 0x44a: 0x0018, 0x44b: 0x0818, + 0x44c: 0x0018, 0x44d: 0x0818, 0x44e: 0x0018, 0x44f: 0x0018, 0x450: 0x3308, 0x451: 0x3308, + 0x452: 0x3308, 0x453: 0x3308, 0x454: 0x3308, 0x455: 0x3308, 0x456: 0x3308, 0x457: 0x3308, + 0x458: 0x3308, 0x459: 0x3308, 0x45a: 0x3308, 0x45b: 0x0818, 0x45c: 0x0b40, 0x45d: 0x0040, + 0x45e: 0x0818, 0x45f: 0x0818, 0x460: 0x0a08, 0x461: 0x0808, 0x462: 0x0c08, 0x463: 0x0c08, + 0x464: 0x0c08, 0x465: 0x0c08, 0x466: 0x0a08, 0x467: 0x0c08, 0x468: 0x0a08, 0x469: 0x0c08, + 0x46a: 0x0a08, 0x46b: 0x0a08, 0x46c: 0x0a08, 0x46d: 0x0a08, 0x46e: 0x0a08, 0x46f: 0x0c08, + 0x470: 0x0c08, 0x471: 0x0c08, 0x472: 0x0c08, 0x473: 0x0a08, 0x474: 0x0a08, 0x475: 0x0a08, + 0x476: 0x0a08, 0x477: 0x0a08, 0x478: 0x0a08, 0x479: 0x0a08, 0x47a: 0x0a08, 0x47b: 0x0a08, + 0x47c: 0x0a08, 0x47d: 0x0a08, 0x47e: 0x0a08, 0x47f: 0x0a08, // Block 0x12, offset 0x480 - 0x480: 0x0408, 0x481: 0x0208, 0x482: 0x0208, 0x483: 0x0408, 0x484: 0x0408, 0x485: 0x0408, - 0x486: 0x0408, 0x487: 0x0408, 0x488: 0x0408, 0x489: 0x0408, 0x48a: 0x0408, 0x48b: 0x0408, - 0x48c: 0x0208, 0x48d: 0x0408, 0x48e: 0x0208, 0x48f: 0x0408, 0x490: 0x0208, 0x491: 0x0208, - 0x492: 0x0408, 0x493: 0x0408, 0x494: 0x0018, 0x495: 0x0408, 0x496: 0x1308, 0x497: 0x1308, - 0x498: 0x1308, 0x499: 0x1308, 0x49a: 0x1308, 0x49b: 0x1308, 0x49c: 0x1308, 0x49d: 0x0040, - 0x49e: 0x0018, 0x49f: 0x1308, 0x4a0: 0x1308, 0x4a1: 0x1308, 0x4a2: 0x1308, 0x4a3: 0x1308, - 0x4a4: 0x1308, 0x4a5: 0x0008, 0x4a6: 0x0008, 0x4a7: 0x1308, 0x4a8: 0x1308, 0x4a9: 0x0018, - 0x4aa: 0x1308, 0x4ab: 0x1308, 0x4ac: 0x1308, 0x4ad: 0x1308, 0x4ae: 0x0408, 0x4af: 0x0408, - 0x4b0: 0x0008, 0x4b1: 0x0008, 0x4b2: 0x0008, 0x4b3: 0x0008, 0x4b4: 0x0008, 0x4b5: 0x0008, - 0x4b6: 0x0008, 0x4b7: 0x0008, 0x4b8: 0x0008, 0x4b9: 0x0008, 0x4ba: 0x0208, 0x4bb: 0x0208, - 0x4bc: 0x0208, 0x4bd: 0x0008, 0x4be: 0x0008, 0x4bf: 0x0208, + 0x480: 0x0818, 0x481: 0x0a08, 0x482: 0x0a08, 0x483: 0x0a08, 0x484: 0x0a08, 0x485: 0x0a08, + 0x486: 0x0a08, 0x487: 0x0a08, 0x488: 0x0c08, 0x489: 0x0a08, 0x48a: 0x0a08, 0x48b: 0x3308, + 0x48c: 0x3308, 0x48d: 0x3308, 0x48e: 0x3308, 0x48f: 0x3308, 0x490: 0x3308, 0x491: 0x3308, + 0x492: 0x3308, 0x493: 0x3308, 0x494: 0x3308, 0x495: 0x3308, 0x496: 0x3308, 0x497: 0x3308, + 0x498: 0x3308, 0x499: 0x3308, 0x49a: 0x3308, 0x49b: 0x3308, 0x49c: 0x3308, 0x49d: 0x3308, + 0x49e: 0x3308, 0x49f: 0x3308, 0x4a0: 0x0808, 0x4a1: 0x0808, 0x4a2: 0x0808, 0x4a3: 0x0808, + 0x4a4: 0x0808, 0x4a5: 0x0808, 0x4a6: 0x0808, 0x4a7: 0x0808, 0x4a8: 0x0808, 0x4a9: 0x0808, + 0x4aa: 0x0018, 0x4ab: 0x0818, 0x4ac: 0x0818, 0x4ad: 0x0818, 0x4ae: 0x0a08, 0x4af: 0x0a08, + 0x4b0: 0x3308, 0x4b1: 0x0c08, 0x4b2: 0x0c08, 0x4b3: 0x0c08, 0x4b4: 0x0808, 0x4b5: 0x0429, + 0x4b6: 0x0451, 0x4b7: 0x0479, 0x4b8: 0x04a1, 0x4b9: 0x0a08, 0x4ba: 0x0a08, 0x4bb: 0x0a08, + 0x4bc: 0x0a08, 0x4bd: 0x0a08, 0x4be: 0x0a08, 0x4bf: 0x0a08, // Block 0x13, offset 0x4c0 - 0x4c0: 0x0018, 0x4c1: 0x0018, 0x4c2: 0x0018, 0x4c3: 0x0018, 0x4c4: 0x0018, 0x4c5: 0x0018, - 0x4c6: 0x0018, 0x4c7: 0x0018, 0x4c8: 0x0018, 0x4c9: 0x0018, 0x4ca: 0x0018, 0x4cb: 0x0018, - 0x4cc: 0x0018, 0x4cd: 0x0018, 0x4ce: 0x0040, 0x4cf: 0x0340, 0x4d0: 0x0408, 0x4d1: 0x1308, - 0x4d2: 0x0208, 0x4d3: 0x0208, 0x4d4: 0x0208, 0x4d5: 0x0408, 0x4d6: 0x0408, 0x4d7: 0x0408, - 0x4d8: 0x0408, 0x4d9: 0x0408, 0x4da: 0x0208, 0x4db: 0x0208, 0x4dc: 0x0208, 0x4dd: 0x0208, - 0x4de: 0x0408, 0x4df: 0x0208, 0x4e0: 0x0208, 0x4e1: 0x0208, 0x4e2: 0x0208, 0x4e3: 0x0208, - 0x4e4: 0x0208, 0x4e5: 0x0208, 0x4e6: 0x0208, 0x4e7: 0x0208, 0x4e8: 0x0408, 0x4e9: 0x0208, - 0x4ea: 0x0408, 0x4eb: 0x0208, 0x4ec: 0x0408, 0x4ed: 0x0208, 0x4ee: 0x0208, 0x4ef: 0x0408, - 0x4f0: 0x1308, 0x4f1: 0x1308, 0x4f2: 0x1308, 0x4f3: 0x1308, 0x4f4: 0x1308, 0x4f5: 0x1308, - 0x4f6: 0x1308, 0x4f7: 0x1308, 0x4f8: 0x1308, 0x4f9: 0x1308, 0x4fa: 0x1308, 0x4fb: 0x1308, - 0x4fc: 0x1308, 0x4fd: 0x1308, 0x4fe: 0x1308, 0x4ff: 0x1308, + 0x4c0: 0x0c08, 0x4c1: 0x0a08, 0x4c2: 0x0a08, 0x4c3: 0x0c08, 0x4c4: 0x0c08, 0x4c5: 0x0c08, + 0x4c6: 0x0c08, 0x4c7: 0x0c08, 0x4c8: 0x0c08, 0x4c9: 0x0c08, 0x4ca: 0x0c08, 0x4cb: 0x0c08, + 0x4cc: 0x0a08, 0x4cd: 0x0c08, 0x4ce: 0x0a08, 0x4cf: 0x0c08, 0x4d0: 0x0a08, 0x4d1: 0x0a08, + 0x4d2: 0x0c08, 0x4d3: 0x0c08, 0x4d4: 0x0818, 0x4d5: 0x0c08, 0x4d6: 0x3308, 0x4d7: 0x3308, + 0x4d8: 0x3308, 0x4d9: 0x3308, 0x4da: 0x3308, 0x4db: 0x3308, 0x4dc: 0x3308, 0x4dd: 0x0840, + 0x4de: 0x0018, 0x4df: 0x3308, 0x4e0: 0x3308, 0x4e1: 0x3308, 0x4e2: 0x3308, 0x4e3: 0x3308, + 0x4e4: 0x3308, 0x4e5: 0x0808, 0x4e6: 0x0808, 0x4e7: 0x3308, 0x4e8: 0x3308, 0x4e9: 0x0018, + 0x4ea: 0x3308, 0x4eb: 0x3308, 0x4ec: 0x3308, 0x4ed: 0x3308, 0x4ee: 0x0c08, 0x4ef: 0x0c08, + 0x4f0: 0x0008, 0x4f1: 0x0008, 0x4f2: 0x0008, 0x4f3: 0x0008, 0x4f4: 0x0008, 0x4f5: 0x0008, + 0x4f6: 0x0008, 0x4f7: 0x0008, 0x4f8: 0x0008, 0x4f9: 0x0008, 0x4fa: 0x0a08, 0x4fb: 0x0a08, + 0x4fc: 0x0a08, 0x4fd: 0x0808, 0x4fe: 0x0808, 0x4ff: 0x0a08, // Block 0x14, offset 0x500 - 0x500: 0x1008, 0x501: 0x1308, 0x502: 0x1308, 0x503: 0x1308, 0x504: 0x1308, 0x505: 0x1308, - 0x506: 0x1308, 0x507: 0x1308, 0x508: 0x1308, 0x509: 0x1008, 0x50a: 0x1008, 0x50b: 0x1008, - 0x50c: 0x1008, 0x50d: 0x1b08, 0x50e: 0x1008, 0x50f: 0x1008, 0x510: 0x0008, 0x511: 0x1308, - 0x512: 0x1308, 0x513: 0x1308, 0x514: 0x1308, 0x515: 0x1308, 0x516: 0x1308, 0x517: 0x1308, - 0x518: 0x04c9, 0x519: 0x0501, 0x51a: 0x0539, 0x51b: 0x0571, 0x51c: 0x05a9, 0x51d: 0x05e1, - 0x51e: 0x0619, 0x51f: 0x0651, 0x520: 0x0008, 0x521: 0x0008, 0x522: 0x1308, 0x523: 0x1308, - 0x524: 0x0018, 0x525: 0x0018, 0x526: 0x0008, 0x527: 0x0008, 0x528: 0x0008, 0x529: 0x0008, - 0x52a: 0x0008, 0x52b: 0x0008, 0x52c: 0x0008, 0x52d: 0x0008, 0x52e: 0x0008, 0x52f: 0x0008, - 0x530: 0x0018, 0x531: 0x0008, 0x532: 0x0008, 0x533: 0x0008, 0x534: 0x0008, 0x535: 0x0008, - 0x536: 0x0008, 0x537: 0x0008, 0x538: 0x0008, 0x539: 0x0008, 0x53a: 0x0008, 0x53b: 0x0008, - 0x53c: 0x0008, 0x53d: 0x0008, 0x53e: 0x0008, 0x53f: 0x0008, + 0x500: 0x0818, 0x501: 0x0818, 0x502: 0x0818, 0x503: 0x0818, 0x504: 0x0818, 0x505: 0x0818, + 0x506: 0x0818, 0x507: 0x0818, 0x508: 0x0818, 0x509: 0x0818, 0x50a: 0x0818, 0x50b: 0x0818, + 0x50c: 0x0818, 0x50d: 0x0818, 0x50e: 0x0040, 0x50f: 0x0b40, 0x510: 0x0c08, 0x511: 0x3308, + 0x512: 0x0a08, 0x513: 0x0a08, 0x514: 0x0a08, 0x515: 0x0c08, 0x516: 0x0c08, 0x517: 0x0c08, + 0x518: 0x0c08, 0x519: 0x0c08, 0x51a: 0x0a08, 0x51b: 0x0a08, 0x51c: 0x0a08, 0x51d: 0x0a08, + 0x51e: 0x0c08, 0x51f: 0x0a08, 0x520: 0x0a08, 0x521: 0x0a08, 0x522: 0x0a08, 0x523: 0x0a08, + 0x524: 0x0a08, 0x525: 0x0a08, 0x526: 0x0a08, 0x527: 0x0a08, 0x528: 0x0c08, 0x529: 0x0a08, + 0x52a: 0x0c08, 0x52b: 0x0a08, 0x52c: 0x0c08, 0x52d: 0x0a08, 0x52e: 0x0a08, 0x52f: 0x0c08, + 0x530: 0x3308, 0x531: 0x3308, 0x532: 0x3308, 0x533: 0x3308, 0x534: 0x3308, 0x535: 0x3308, + 0x536: 0x3308, 0x537: 0x3308, 0x538: 0x3308, 0x539: 0x3308, 0x53a: 0x3308, 0x53b: 0x3308, + 0x53c: 0x3308, 0x53d: 0x3308, 0x53e: 0x3308, 0x53f: 0x3308, // Block 0x15, offset 0x540 - 0x540: 0x0008, 0x541: 0x1308, 0x542: 0x1008, 0x543: 0x1008, 0x544: 0x0040, 0x545: 0x0008, - 0x546: 0x0008, 0x547: 0x0008, 0x548: 0x0008, 0x549: 0x0008, 0x54a: 0x0008, 0x54b: 0x0008, - 0x54c: 0x0008, 0x54d: 0x0040, 0x54e: 0x0040, 0x54f: 0x0008, 0x550: 0x0008, 0x551: 0x0040, - 0x552: 0x0040, 0x553: 0x0008, 0x554: 0x0008, 0x555: 0x0008, 0x556: 0x0008, 0x557: 0x0008, - 0x558: 0x0008, 0x559: 0x0008, 0x55a: 0x0008, 0x55b: 0x0008, 0x55c: 0x0008, 0x55d: 0x0008, - 0x55e: 0x0008, 0x55f: 0x0008, 0x560: 0x0008, 0x561: 0x0008, 0x562: 0x0008, 0x563: 0x0008, - 0x564: 0x0008, 0x565: 0x0008, 0x566: 0x0008, 0x567: 0x0008, 0x568: 0x0008, 0x569: 0x0040, - 0x56a: 0x0008, 0x56b: 0x0008, 0x56c: 0x0008, 0x56d: 0x0008, 0x56e: 0x0008, 0x56f: 0x0008, - 0x570: 0x0008, 0x571: 0x0040, 0x572: 0x0008, 0x573: 0x0040, 0x574: 0x0040, 0x575: 0x0040, - 0x576: 0x0008, 0x577: 0x0008, 0x578: 0x0008, 0x579: 0x0008, 0x57a: 0x0040, 0x57b: 0x0040, - 0x57c: 0x1308, 0x57d: 0x0008, 0x57e: 0x1008, 0x57f: 0x1008, + 0x540: 0x0c08, 0x541: 0x0a08, 0x542: 0x0a08, 0x543: 0x0a08, 0x544: 0x0a08, 0x545: 0x0a08, + 0x546: 0x0c08, 0x547: 0x0c08, 0x548: 0x0a08, 0x549: 0x0c08, 0x54a: 0x0a08, 0x54b: 0x0a08, + 0x54c: 0x0a08, 0x54d: 0x0a08, 0x54e: 0x0a08, 0x54f: 0x0a08, 0x550: 0x0a08, 0x551: 0x0a08, + 0x552: 0x0a08, 0x553: 0x0a08, 0x554: 0x0c08, 0x555: 0x0a08, 0x556: 0x0808, 0x557: 0x0808, + 0x558: 0x0808, 0x559: 0x3308, 0x55a: 0x3308, 0x55b: 0x3308, 0x55c: 0x0040, 0x55d: 0x0040, + 0x55e: 0x0818, 0x55f: 0x0040, 0x560: 0x0a08, 0x561: 0x0808, 0x562: 0x0a08, 0x563: 0x0a08, + 0x564: 0x0a08, 0x565: 0x0a08, 0x566: 0x0808, 0x567: 0x0c08, 0x568: 0x0a08, 0x569: 0x0c08, + 0x56a: 0x0c08, 0x56b: 0x0040, 0x56c: 0x0040, 0x56d: 0x0040, 0x56e: 0x0040, 0x56f: 0x0040, + 0x570: 0x0040, 0x571: 0x0040, 0x572: 0x0040, 0x573: 0x0040, 0x574: 0x0040, 0x575: 0x0040, + 0x576: 0x0040, 0x577: 0x0040, 0x578: 0x0040, 0x579: 0x0040, 0x57a: 0x0040, 0x57b: 0x0040, + 0x57c: 0x0040, 0x57d: 0x0040, 0x57e: 0x0040, 0x57f: 0x0040, // Block 0x16, offset 0x580 - 0x580: 0x1008, 0x581: 0x1308, 0x582: 0x1308, 0x583: 0x1308, 0x584: 0x1308, 0x585: 0x0040, - 0x586: 0x0040, 0x587: 0x1008, 0x588: 0x1008, 0x589: 0x0040, 0x58a: 0x0040, 0x58b: 0x1008, - 0x58c: 0x1008, 0x58d: 0x1b08, 0x58e: 0x0008, 0x58f: 0x0040, 0x590: 0x0040, 0x591: 0x0040, - 0x592: 0x0040, 0x593: 0x0040, 0x594: 0x0040, 0x595: 0x0040, 0x596: 0x0040, 0x597: 0x1008, - 0x598: 0x0040, 0x599: 0x0040, 0x59a: 0x0040, 0x59b: 0x0040, 0x59c: 0x0689, 0x59d: 0x06c1, - 0x59e: 0x0040, 0x59f: 0x06f9, 0x5a0: 0x0008, 0x5a1: 0x0008, 0x5a2: 0x1308, 0x5a3: 0x1308, - 0x5a4: 0x0040, 0x5a5: 0x0040, 0x5a6: 0x0008, 0x5a7: 0x0008, 0x5a8: 0x0008, 0x5a9: 0x0008, + 0x580: 0x3008, 0x581: 0x3308, 0x582: 0x3308, 0x583: 0x3308, 0x584: 0x3308, 0x585: 0x3308, + 0x586: 0x3308, 0x587: 0x3308, 0x588: 0x3308, 0x589: 0x3008, 0x58a: 0x3008, 0x58b: 0x3008, + 0x58c: 0x3008, 0x58d: 0x3b08, 0x58e: 0x3008, 0x58f: 0x3008, 0x590: 0x0008, 0x591: 0x3308, + 0x592: 0x3308, 0x593: 0x3308, 0x594: 0x3308, 0x595: 0x3308, 0x596: 0x3308, 0x597: 0x3308, + 0x598: 0x04c9, 0x599: 0x0501, 0x59a: 0x0539, 0x59b: 0x0571, 0x59c: 0x05a9, 0x59d: 0x05e1, + 0x59e: 0x0619, 0x59f: 0x0651, 0x5a0: 0x0008, 0x5a1: 0x0008, 0x5a2: 0x3308, 0x5a3: 0x3308, + 0x5a4: 0x0018, 0x5a5: 0x0018, 0x5a6: 0x0008, 0x5a7: 0x0008, 0x5a8: 0x0008, 0x5a9: 0x0008, 0x5aa: 0x0008, 0x5ab: 0x0008, 0x5ac: 0x0008, 0x5ad: 0x0008, 0x5ae: 0x0008, 0x5af: 0x0008, - 0x5b0: 0x0008, 0x5b1: 0x0008, 0x5b2: 0x0018, 0x5b3: 0x0018, 0x5b4: 0x0018, 0x5b5: 0x0018, - 0x5b6: 0x0018, 0x5b7: 0x0018, 0x5b8: 0x0018, 0x5b9: 0x0018, 0x5ba: 0x0018, 0x5bb: 0x0018, - 0x5bc: 0x0040, 0x5bd: 0x0040, 0x5be: 0x0040, 0x5bf: 0x0040, + 0x5b0: 0x0018, 0x5b1: 0x0008, 0x5b2: 0x0008, 0x5b3: 0x0008, 0x5b4: 0x0008, 0x5b5: 0x0008, + 0x5b6: 0x0008, 0x5b7: 0x0008, 0x5b8: 0x0008, 0x5b9: 0x0008, 0x5ba: 0x0008, 0x5bb: 0x0008, + 0x5bc: 0x0008, 0x5bd: 0x0008, 0x5be: 0x0008, 0x5bf: 0x0008, // Block 0x17, offset 0x5c0 - 0x5c0: 0x0040, 0x5c1: 0x1308, 0x5c2: 0x1308, 0x5c3: 0x1008, 0x5c4: 0x0040, 0x5c5: 0x0008, - 0x5c6: 0x0008, 0x5c7: 0x0008, 0x5c8: 0x0008, 0x5c9: 0x0008, 0x5ca: 0x0008, 0x5cb: 0x0040, - 0x5cc: 0x0040, 0x5cd: 0x0040, 0x5ce: 0x0040, 0x5cf: 0x0008, 0x5d0: 0x0008, 0x5d1: 0x0040, + 0x5c0: 0x0008, 0x5c1: 0x3308, 0x5c2: 0x3008, 0x5c3: 0x3008, 0x5c4: 0x0040, 0x5c5: 0x0008, + 0x5c6: 0x0008, 0x5c7: 0x0008, 0x5c8: 0x0008, 0x5c9: 0x0008, 0x5ca: 0x0008, 0x5cb: 0x0008, + 0x5cc: 0x0008, 0x5cd: 0x0040, 0x5ce: 0x0040, 0x5cf: 0x0008, 0x5d0: 0x0008, 0x5d1: 0x0040, 0x5d2: 0x0040, 0x5d3: 0x0008, 0x5d4: 0x0008, 0x5d5: 0x0008, 0x5d6: 0x0008, 0x5d7: 0x0008, 0x5d8: 0x0008, 0x5d9: 0x0008, 0x5da: 0x0008, 0x5db: 0x0008, 0x5dc: 0x0008, 0x5dd: 0x0008, 0x5de: 0x0008, 0x5df: 0x0008, 0x5e0: 0x0008, 0x5e1: 0x0008, 0x5e2: 0x0008, 0x5e3: 0x0008, 0x5e4: 0x0008, 0x5e5: 0x0008, 0x5e6: 0x0008, 0x5e7: 0x0008, 0x5e8: 0x0008, 0x5e9: 0x0040, 0x5ea: 0x0008, 0x5eb: 0x0008, 0x5ec: 0x0008, 0x5ed: 0x0008, 0x5ee: 0x0008, 0x5ef: 0x0008, - 0x5f0: 0x0008, 0x5f1: 0x0040, 0x5f2: 0x0008, 0x5f3: 0x0731, 0x5f4: 0x0040, 0x5f5: 0x0008, - 0x5f6: 0x0769, 0x5f7: 0x0040, 0x5f8: 0x0008, 0x5f9: 0x0008, 0x5fa: 0x0040, 0x5fb: 0x0040, - 0x5fc: 0x1308, 0x5fd: 0x0040, 0x5fe: 0x1008, 0x5ff: 0x1008, + 0x5f0: 0x0008, 0x5f1: 0x0040, 0x5f2: 0x0008, 0x5f3: 0x0040, 0x5f4: 0x0040, 0x5f5: 0x0040, + 0x5f6: 0x0008, 0x5f7: 0x0008, 0x5f8: 0x0008, 0x5f9: 0x0008, 0x5fa: 0x0040, 0x5fb: 0x0040, + 0x5fc: 0x3308, 0x5fd: 0x0008, 0x5fe: 0x3008, 0x5ff: 0x3008, // Block 0x18, offset 0x600 - 0x600: 0x1008, 0x601: 0x1308, 0x602: 0x1308, 0x603: 0x0040, 0x604: 0x0040, 0x605: 0x0040, - 0x606: 0x0040, 0x607: 0x1308, 0x608: 0x1308, 0x609: 0x0040, 0x60a: 0x0040, 0x60b: 0x1308, - 0x60c: 0x1308, 0x60d: 0x1b08, 0x60e: 0x0040, 0x60f: 0x0040, 0x610: 0x0040, 0x611: 0x1308, - 0x612: 0x0040, 0x613: 0x0040, 0x614: 0x0040, 0x615: 0x0040, 0x616: 0x0040, 0x617: 0x0040, - 0x618: 0x0040, 0x619: 0x07a1, 0x61a: 0x07d9, 0x61b: 0x0811, 0x61c: 0x0008, 0x61d: 0x0040, - 0x61e: 0x0849, 0x61f: 0x0040, 0x620: 0x0040, 0x621: 0x0040, 0x622: 0x0040, 0x623: 0x0040, + 0x600: 0x3008, 0x601: 0x3308, 0x602: 0x3308, 0x603: 0x3308, 0x604: 0x3308, 0x605: 0x0040, + 0x606: 0x0040, 0x607: 0x3008, 0x608: 0x3008, 0x609: 0x0040, 0x60a: 0x0040, 0x60b: 0x3008, + 0x60c: 0x3008, 0x60d: 0x3b08, 0x60e: 0x0008, 0x60f: 0x0040, 0x610: 0x0040, 0x611: 0x0040, + 0x612: 0x0040, 0x613: 0x0040, 0x614: 0x0040, 0x615: 0x0040, 0x616: 0x0040, 0x617: 0x3008, + 0x618: 0x0040, 0x619: 0x0040, 0x61a: 0x0040, 0x61b: 0x0040, 0x61c: 0x0689, 0x61d: 0x06c1, + 0x61e: 0x0040, 0x61f: 0x06f9, 0x620: 0x0008, 0x621: 0x0008, 0x622: 0x3308, 0x623: 0x3308, 0x624: 0x0040, 0x625: 0x0040, 0x626: 0x0008, 0x627: 0x0008, 0x628: 0x0008, 0x629: 0x0008, 0x62a: 0x0008, 0x62b: 0x0008, 0x62c: 0x0008, 0x62d: 0x0008, 0x62e: 0x0008, 0x62f: 0x0008, - 0x630: 0x1308, 0x631: 0x1308, 0x632: 0x0008, 0x633: 0x0008, 0x634: 0x0008, 0x635: 0x1308, - 0x636: 0x0040, 0x637: 0x0040, 0x638: 0x0040, 0x639: 0x0040, 0x63a: 0x0040, 0x63b: 0x0040, - 0x63c: 0x0040, 0x63d: 0x0040, 0x63e: 0x0040, 0x63f: 0x0040, + 0x630: 0x0008, 0x631: 0x0008, 0x632: 0x0018, 0x633: 0x0018, 0x634: 0x0018, 0x635: 0x0018, + 0x636: 0x0018, 0x637: 0x0018, 0x638: 0x0018, 0x639: 0x0018, 0x63a: 0x0018, 0x63b: 0x0018, + 0x63c: 0x0008, 0x63d: 0x0018, 0x63e: 0x0040, 0x63f: 0x0040, // Block 0x19, offset 0x640 - 0x640: 0x0040, 0x641: 0x1308, 0x642: 0x1308, 0x643: 0x1008, 0x644: 0x0040, 0x645: 0x0008, - 0x646: 0x0008, 0x647: 0x0008, 0x648: 0x0008, 0x649: 0x0008, 0x64a: 0x0008, 0x64b: 0x0008, - 0x64c: 0x0008, 0x64d: 0x0008, 0x64e: 0x0040, 0x64f: 0x0008, 0x650: 0x0008, 0x651: 0x0008, + 0x640: 0x0040, 0x641: 0x3308, 0x642: 0x3308, 0x643: 0x3008, 0x644: 0x0040, 0x645: 0x0008, + 0x646: 0x0008, 0x647: 0x0008, 0x648: 0x0008, 0x649: 0x0008, 0x64a: 0x0008, 0x64b: 0x0040, + 0x64c: 0x0040, 0x64d: 0x0040, 0x64e: 0x0040, 0x64f: 0x0008, 0x650: 0x0008, 0x651: 0x0040, 0x652: 0x0040, 0x653: 0x0008, 0x654: 0x0008, 0x655: 0x0008, 0x656: 0x0008, 0x657: 0x0008, 0x658: 0x0008, 0x659: 0x0008, 0x65a: 0x0008, 0x65b: 0x0008, 0x65c: 0x0008, 0x65d: 0x0008, 0x65e: 0x0008, 0x65f: 0x0008, 0x660: 0x0008, 0x661: 0x0008, 0x662: 0x0008, 0x663: 0x0008, 0x664: 0x0008, 0x665: 0x0008, 0x666: 0x0008, 0x667: 0x0008, 0x668: 0x0008, 0x669: 0x0040, 0x66a: 0x0008, 0x66b: 0x0008, 0x66c: 0x0008, 0x66d: 0x0008, 0x66e: 0x0008, 0x66f: 0x0008, - 0x670: 0x0008, 0x671: 0x0040, 0x672: 0x0008, 0x673: 0x0008, 0x674: 0x0040, 0x675: 0x0008, - 0x676: 0x0008, 0x677: 0x0008, 0x678: 0x0008, 0x679: 0x0008, 0x67a: 0x0040, 0x67b: 0x0040, - 0x67c: 0x1308, 0x67d: 0x0008, 0x67e: 0x1008, 0x67f: 0x1008, + 0x670: 0x0008, 0x671: 0x0040, 0x672: 0x0008, 0x673: 0x0731, 0x674: 0x0040, 0x675: 0x0008, + 0x676: 0x0769, 0x677: 0x0040, 0x678: 0x0008, 0x679: 0x0008, 0x67a: 0x0040, 0x67b: 0x0040, + 0x67c: 0x3308, 0x67d: 0x0040, 0x67e: 0x3008, 0x67f: 0x3008, // Block 0x1a, offset 0x680 - 0x680: 0x1008, 0x681: 0x1308, 0x682: 0x1308, 0x683: 0x1308, 0x684: 0x1308, 0x685: 0x1308, - 0x686: 0x0040, 0x687: 0x1308, 0x688: 0x1308, 0x689: 0x1008, 0x68a: 0x0040, 0x68b: 0x1008, - 0x68c: 0x1008, 0x68d: 0x1b08, 0x68e: 0x0040, 0x68f: 0x0040, 0x690: 0x0008, 0x691: 0x0040, + 0x680: 0x3008, 0x681: 0x3308, 0x682: 0x3308, 0x683: 0x0040, 0x684: 0x0040, 0x685: 0x0040, + 0x686: 0x0040, 0x687: 0x3308, 0x688: 0x3308, 0x689: 0x0040, 0x68a: 0x0040, 0x68b: 0x3308, + 0x68c: 0x3308, 0x68d: 0x3b08, 0x68e: 0x0040, 0x68f: 0x0040, 0x690: 0x0040, 0x691: 0x3308, 0x692: 0x0040, 0x693: 0x0040, 0x694: 0x0040, 0x695: 0x0040, 0x696: 0x0040, 0x697: 0x0040, - 0x698: 0x0040, 0x699: 0x0040, 0x69a: 0x0040, 0x69b: 0x0040, 0x69c: 0x0040, 0x69d: 0x0040, - 0x69e: 0x0040, 0x69f: 0x0040, 0x6a0: 0x0008, 0x6a1: 0x0008, 0x6a2: 0x1308, 0x6a3: 0x1308, + 0x698: 0x0040, 0x699: 0x07a1, 0x69a: 0x07d9, 0x69b: 0x0811, 0x69c: 0x0008, 0x69d: 0x0040, + 0x69e: 0x0849, 0x69f: 0x0040, 0x6a0: 0x0040, 0x6a1: 0x0040, 0x6a2: 0x0040, 0x6a3: 0x0040, 0x6a4: 0x0040, 0x6a5: 0x0040, 0x6a6: 0x0008, 0x6a7: 0x0008, 0x6a8: 0x0008, 0x6a9: 0x0008, 0x6aa: 0x0008, 0x6ab: 0x0008, 0x6ac: 0x0008, 0x6ad: 0x0008, 0x6ae: 0x0008, 0x6af: 0x0008, - 0x6b0: 0x0018, 0x6b1: 0x0018, 0x6b2: 0x0040, 0x6b3: 0x0040, 0x6b4: 0x0040, 0x6b5: 0x0040, - 0x6b6: 0x0040, 0x6b7: 0x0040, 0x6b8: 0x0040, 0x6b9: 0x0008, 0x6ba: 0x0040, 0x6bb: 0x0040, + 0x6b0: 0x3308, 0x6b1: 0x3308, 0x6b2: 0x0008, 0x6b3: 0x0008, 0x6b4: 0x0008, 0x6b5: 0x3308, + 0x6b6: 0x0040, 0x6b7: 0x0040, 0x6b8: 0x0040, 0x6b9: 0x0040, 0x6ba: 0x0040, 0x6bb: 0x0040, 0x6bc: 0x0040, 0x6bd: 0x0040, 0x6be: 0x0040, 0x6bf: 0x0040, // Block 0x1b, offset 0x6c0 - 0x6c0: 0x0040, 0x6c1: 0x1308, 0x6c2: 0x1008, 0x6c3: 0x1008, 0x6c4: 0x0040, 0x6c5: 0x0008, + 0x6c0: 0x0040, 0x6c1: 0x3308, 0x6c2: 0x3308, 0x6c3: 0x3008, 0x6c4: 0x0040, 0x6c5: 0x0008, 0x6c6: 0x0008, 0x6c7: 0x0008, 0x6c8: 0x0008, 0x6c9: 0x0008, 0x6ca: 0x0008, 0x6cb: 0x0008, - 0x6cc: 0x0008, 0x6cd: 0x0040, 0x6ce: 0x0040, 0x6cf: 0x0008, 0x6d0: 0x0008, 0x6d1: 0x0040, + 0x6cc: 0x0008, 0x6cd: 0x0008, 0x6ce: 0x0040, 0x6cf: 0x0008, 0x6d0: 0x0008, 0x6d1: 0x0008, 0x6d2: 0x0040, 0x6d3: 0x0008, 0x6d4: 0x0008, 0x6d5: 0x0008, 0x6d6: 0x0008, 0x6d7: 0x0008, 0x6d8: 0x0008, 0x6d9: 0x0008, 0x6da: 0x0008, 0x6db: 0x0008, 0x6dc: 0x0008, 0x6dd: 0x0008, 0x6de: 0x0008, 0x6df: 0x0008, 0x6e0: 0x0008, 0x6e1: 0x0008, 0x6e2: 0x0008, 0x6e3: 0x0008, @@ -889,1457 +889,1490 @@ var idnaValues = [8000]uint16{ 0x6ea: 0x0008, 0x6eb: 0x0008, 0x6ec: 0x0008, 0x6ed: 0x0008, 0x6ee: 0x0008, 0x6ef: 0x0008, 0x6f0: 0x0008, 0x6f1: 0x0040, 0x6f2: 0x0008, 0x6f3: 0x0008, 0x6f4: 0x0040, 0x6f5: 0x0008, 0x6f6: 0x0008, 0x6f7: 0x0008, 0x6f8: 0x0008, 0x6f9: 0x0008, 0x6fa: 0x0040, 0x6fb: 0x0040, - 0x6fc: 0x1308, 0x6fd: 0x0008, 0x6fe: 0x1008, 0x6ff: 0x1308, + 0x6fc: 0x3308, 0x6fd: 0x0008, 0x6fe: 0x3008, 0x6ff: 0x3008, // Block 0x1c, offset 0x700 - 0x700: 0x1008, 0x701: 0x1308, 0x702: 0x1308, 0x703: 0x1308, 0x704: 0x1308, 0x705: 0x0040, - 0x706: 0x0040, 0x707: 0x1008, 0x708: 0x1008, 0x709: 0x0040, 0x70a: 0x0040, 0x70b: 0x1008, - 0x70c: 0x1008, 0x70d: 0x1b08, 0x70e: 0x0040, 0x70f: 0x0040, 0x710: 0x0040, 0x711: 0x0040, - 0x712: 0x0040, 0x713: 0x0040, 0x714: 0x0040, 0x715: 0x0040, 0x716: 0x1308, 0x717: 0x1008, - 0x718: 0x0040, 0x719: 0x0040, 0x71a: 0x0040, 0x71b: 0x0040, 0x71c: 0x0881, 0x71d: 0x08b9, - 0x71e: 0x0040, 0x71f: 0x0008, 0x720: 0x0008, 0x721: 0x0008, 0x722: 0x1308, 0x723: 0x1308, + 0x700: 0x3008, 0x701: 0x3308, 0x702: 0x3308, 0x703: 0x3308, 0x704: 0x3308, 0x705: 0x3308, + 0x706: 0x0040, 0x707: 0x3308, 0x708: 0x3308, 0x709: 0x3008, 0x70a: 0x0040, 0x70b: 0x3008, + 0x70c: 0x3008, 0x70d: 0x3b08, 0x70e: 0x0040, 0x70f: 0x0040, 0x710: 0x0008, 0x711: 0x0040, + 0x712: 0x0040, 0x713: 0x0040, 0x714: 0x0040, 0x715: 0x0040, 0x716: 0x0040, 0x717: 0x0040, + 0x718: 0x0040, 0x719: 0x0040, 0x71a: 0x0040, 0x71b: 0x0040, 0x71c: 0x0040, 0x71d: 0x0040, + 0x71e: 0x0040, 0x71f: 0x0040, 0x720: 0x0008, 0x721: 0x0008, 0x722: 0x3308, 0x723: 0x3308, 0x724: 0x0040, 0x725: 0x0040, 0x726: 0x0008, 0x727: 0x0008, 0x728: 0x0008, 0x729: 0x0008, 0x72a: 0x0008, 0x72b: 0x0008, 0x72c: 0x0008, 0x72d: 0x0008, 0x72e: 0x0008, 0x72f: 0x0008, - 0x730: 0x0018, 0x731: 0x0008, 0x732: 0x0018, 0x733: 0x0018, 0x734: 0x0018, 0x735: 0x0018, - 0x736: 0x0018, 0x737: 0x0018, 0x738: 0x0040, 0x739: 0x0040, 0x73a: 0x0040, 0x73b: 0x0040, - 0x73c: 0x0040, 0x73d: 0x0040, 0x73e: 0x0040, 0x73f: 0x0040, + 0x730: 0x0018, 0x731: 0x0018, 0x732: 0x0040, 0x733: 0x0040, 0x734: 0x0040, 0x735: 0x0040, + 0x736: 0x0040, 0x737: 0x0040, 0x738: 0x0040, 0x739: 0x0008, 0x73a: 0x3308, 0x73b: 0x3308, + 0x73c: 0x3308, 0x73d: 0x3308, 0x73e: 0x3308, 0x73f: 0x3308, // Block 0x1d, offset 0x740 - 0x740: 0x0040, 0x741: 0x0040, 0x742: 0x1308, 0x743: 0x0008, 0x744: 0x0040, 0x745: 0x0008, - 0x746: 0x0008, 0x747: 0x0008, 0x748: 0x0008, 0x749: 0x0008, 0x74a: 0x0008, 0x74b: 0x0040, - 0x74c: 0x0040, 0x74d: 0x0040, 0x74e: 0x0008, 0x74f: 0x0008, 0x750: 0x0008, 0x751: 0x0040, - 0x752: 0x0008, 0x753: 0x0008, 0x754: 0x0008, 0x755: 0x0008, 0x756: 0x0040, 0x757: 0x0040, - 0x758: 0x0040, 0x759: 0x0008, 0x75a: 0x0008, 0x75b: 0x0040, 0x75c: 0x0008, 0x75d: 0x0040, - 0x75e: 0x0008, 0x75f: 0x0008, 0x760: 0x0040, 0x761: 0x0040, 0x762: 0x0040, 0x763: 0x0008, - 0x764: 0x0008, 0x765: 0x0040, 0x766: 0x0040, 0x767: 0x0040, 0x768: 0x0008, 0x769: 0x0008, - 0x76a: 0x0008, 0x76b: 0x0040, 0x76c: 0x0040, 0x76d: 0x0040, 0x76e: 0x0008, 0x76f: 0x0008, - 0x770: 0x0008, 0x771: 0x0008, 0x772: 0x0008, 0x773: 0x0008, 0x774: 0x0008, 0x775: 0x0008, + 0x740: 0x0040, 0x741: 0x3308, 0x742: 0x3008, 0x743: 0x3008, 0x744: 0x0040, 0x745: 0x0008, + 0x746: 0x0008, 0x747: 0x0008, 0x748: 0x0008, 0x749: 0x0008, 0x74a: 0x0008, 0x74b: 0x0008, + 0x74c: 0x0008, 0x74d: 0x0040, 0x74e: 0x0040, 0x74f: 0x0008, 0x750: 0x0008, 0x751: 0x0040, + 0x752: 0x0040, 0x753: 0x0008, 0x754: 0x0008, 0x755: 0x0008, 0x756: 0x0008, 0x757: 0x0008, + 0x758: 0x0008, 0x759: 0x0008, 0x75a: 0x0008, 0x75b: 0x0008, 0x75c: 0x0008, 0x75d: 0x0008, + 0x75e: 0x0008, 0x75f: 0x0008, 0x760: 0x0008, 0x761: 0x0008, 0x762: 0x0008, 0x763: 0x0008, + 0x764: 0x0008, 0x765: 0x0008, 0x766: 0x0008, 0x767: 0x0008, 0x768: 0x0008, 0x769: 0x0040, + 0x76a: 0x0008, 0x76b: 0x0008, 0x76c: 0x0008, 0x76d: 0x0008, 0x76e: 0x0008, 0x76f: 0x0008, + 0x770: 0x0008, 0x771: 0x0040, 0x772: 0x0008, 0x773: 0x0008, 0x774: 0x0040, 0x775: 0x0008, 0x776: 0x0008, 0x777: 0x0008, 0x778: 0x0008, 0x779: 0x0008, 0x77a: 0x0040, 0x77b: 0x0040, - 0x77c: 0x0040, 0x77d: 0x0040, 0x77e: 0x1008, 0x77f: 0x1008, + 0x77c: 0x3308, 0x77d: 0x0008, 0x77e: 0x3008, 0x77f: 0x3308, // Block 0x1e, offset 0x780 - 0x780: 0x1308, 0x781: 0x1008, 0x782: 0x1008, 0x783: 0x1008, 0x784: 0x1008, 0x785: 0x0040, - 0x786: 0x1308, 0x787: 0x1308, 0x788: 0x1308, 0x789: 0x0040, 0x78a: 0x1308, 0x78b: 0x1308, - 0x78c: 0x1308, 0x78d: 0x1b08, 0x78e: 0x0040, 0x78f: 0x0040, 0x790: 0x0040, 0x791: 0x0040, - 0x792: 0x0040, 0x793: 0x0040, 0x794: 0x0040, 0x795: 0x1308, 0x796: 0x1308, 0x797: 0x0040, - 0x798: 0x0008, 0x799: 0x0008, 0x79a: 0x0008, 0x79b: 0x0040, 0x79c: 0x0040, 0x79d: 0x0040, - 0x79e: 0x0040, 0x79f: 0x0040, 0x7a0: 0x0008, 0x7a1: 0x0008, 0x7a2: 0x1308, 0x7a3: 0x1308, + 0x780: 0x3008, 0x781: 0x3308, 0x782: 0x3308, 0x783: 0x3308, 0x784: 0x3308, 0x785: 0x0040, + 0x786: 0x0040, 0x787: 0x3008, 0x788: 0x3008, 0x789: 0x0040, 0x78a: 0x0040, 0x78b: 0x3008, + 0x78c: 0x3008, 0x78d: 0x3b08, 0x78e: 0x0040, 0x78f: 0x0040, 0x790: 0x0040, 0x791: 0x0040, + 0x792: 0x0040, 0x793: 0x0040, 0x794: 0x0040, 0x795: 0x0040, 0x796: 0x3308, 0x797: 0x3008, + 0x798: 0x0040, 0x799: 0x0040, 0x79a: 0x0040, 0x79b: 0x0040, 0x79c: 0x0881, 0x79d: 0x08b9, + 0x79e: 0x0040, 0x79f: 0x0008, 0x7a0: 0x0008, 0x7a1: 0x0008, 0x7a2: 0x3308, 0x7a3: 0x3308, 0x7a4: 0x0040, 0x7a5: 0x0040, 0x7a6: 0x0008, 0x7a7: 0x0008, 0x7a8: 0x0008, 0x7a9: 0x0008, 0x7aa: 0x0008, 0x7ab: 0x0008, 0x7ac: 0x0008, 0x7ad: 0x0008, 0x7ae: 0x0008, 0x7af: 0x0008, - 0x7b0: 0x0040, 0x7b1: 0x0040, 0x7b2: 0x0040, 0x7b3: 0x0040, 0x7b4: 0x0040, 0x7b5: 0x0040, - 0x7b6: 0x0040, 0x7b7: 0x0040, 0x7b8: 0x0018, 0x7b9: 0x0018, 0x7ba: 0x0018, 0x7bb: 0x0018, - 0x7bc: 0x0018, 0x7bd: 0x0018, 0x7be: 0x0018, 0x7bf: 0x0018, + 0x7b0: 0x0018, 0x7b1: 0x0008, 0x7b2: 0x0018, 0x7b3: 0x0018, 0x7b4: 0x0018, 0x7b5: 0x0018, + 0x7b6: 0x0018, 0x7b7: 0x0018, 0x7b8: 0x0040, 0x7b9: 0x0040, 0x7ba: 0x0040, 0x7bb: 0x0040, + 0x7bc: 0x0040, 0x7bd: 0x0040, 0x7be: 0x0040, 0x7bf: 0x0040, // Block 0x1f, offset 0x7c0 - 0x7c0: 0x0008, 0x7c1: 0x1308, 0x7c2: 0x1008, 0x7c3: 0x1008, 0x7c4: 0x0040, 0x7c5: 0x0008, - 0x7c6: 0x0008, 0x7c7: 0x0008, 0x7c8: 0x0008, 0x7c9: 0x0008, 0x7ca: 0x0008, 0x7cb: 0x0008, - 0x7cc: 0x0008, 0x7cd: 0x0040, 0x7ce: 0x0008, 0x7cf: 0x0008, 0x7d0: 0x0008, 0x7d1: 0x0040, - 0x7d2: 0x0008, 0x7d3: 0x0008, 0x7d4: 0x0008, 0x7d5: 0x0008, 0x7d6: 0x0008, 0x7d7: 0x0008, - 0x7d8: 0x0008, 0x7d9: 0x0008, 0x7da: 0x0008, 0x7db: 0x0008, 0x7dc: 0x0008, 0x7dd: 0x0008, - 0x7de: 0x0008, 0x7df: 0x0008, 0x7e0: 0x0008, 0x7e1: 0x0008, 0x7e2: 0x0008, 0x7e3: 0x0008, - 0x7e4: 0x0008, 0x7e5: 0x0008, 0x7e6: 0x0008, 0x7e7: 0x0008, 0x7e8: 0x0008, 0x7e9: 0x0040, - 0x7ea: 0x0008, 0x7eb: 0x0008, 0x7ec: 0x0008, 0x7ed: 0x0008, 0x7ee: 0x0008, 0x7ef: 0x0008, - 0x7f0: 0x0008, 0x7f1: 0x0008, 0x7f2: 0x0008, 0x7f3: 0x0008, 0x7f4: 0x0040, 0x7f5: 0x0008, + 0x7c0: 0x0040, 0x7c1: 0x0040, 0x7c2: 0x3308, 0x7c3: 0x0008, 0x7c4: 0x0040, 0x7c5: 0x0008, + 0x7c6: 0x0008, 0x7c7: 0x0008, 0x7c8: 0x0008, 0x7c9: 0x0008, 0x7ca: 0x0008, 0x7cb: 0x0040, + 0x7cc: 0x0040, 0x7cd: 0x0040, 0x7ce: 0x0008, 0x7cf: 0x0008, 0x7d0: 0x0008, 0x7d1: 0x0040, + 0x7d2: 0x0008, 0x7d3: 0x0008, 0x7d4: 0x0008, 0x7d5: 0x0008, 0x7d6: 0x0040, 0x7d7: 0x0040, + 0x7d8: 0x0040, 0x7d9: 0x0008, 0x7da: 0x0008, 0x7db: 0x0040, 0x7dc: 0x0008, 0x7dd: 0x0040, + 0x7de: 0x0008, 0x7df: 0x0008, 0x7e0: 0x0040, 0x7e1: 0x0040, 0x7e2: 0x0040, 0x7e3: 0x0008, + 0x7e4: 0x0008, 0x7e5: 0x0040, 0x7e6: 0x0040, 0x7e7: 0x0040, 0x7e8: 0x0008, 0x7e9: 0x0008, + 0x7ea: 0x0008, 0x7eb: 0x0040, 0x7ec: 0x0040, 0x7ed: 0x0040, 0x7ee: 0x0008, 0x7ef: 0x0008, + 0x7f0: 0x0008, 0x7f1: 0x0008, 0x7f2: 0x0008, 0x7f3: 0x0008, 0x7f4: 0x0008, 0x7f5: 0x0008, 0x7f6: 0x0008, 0x7f7: 0x0008, 0x7f8: 0x0008, 0x7f9: 0x0008, 0x7fa: 0x0040, 0x7fb: 0x0040, - 0x7fc: 0x1308, 0x7fd: 0x0008, 0x7fe: 0x1008, 0x7ff: 0x1308, + 0x7fc: 0x0040, 0x7fd: 0x0040, 0x7fe: 0x3008, 0x7ff: 0x3008, // Block 0x20, offset 0x800 - 0x800: 0x1008, 0x801: 0x1008, 0x802: 0x1008, 0x803: 0x1008, 0x804: 0x1008, 0x805: 0x0040, - 0x806: 0x1308, 0x807: 0x1008, 0x808: 0x1008, 0x809: 0x0040, 0x80a: 0x1008, 0x80b: 0x1008, - 0x80c: 0x1308, 0x80d: 0x1b08, 0x80e: 0x0040, 0x80f: 0x0040, 0x810: 0x0040, 0x811: 0x0040, - 0x812: 0x0040, 0x813: 0x0040, 0x814: 0x0040, 0x815: 0x1008, 0x816: 0x1008, 0x817: 0x0040, - 0x818: 0x0040, 0x819: 0x0040, 0x81a: 0x0040, 0x81b: 0x0040, 0x81c: 0x0040, 0x81d: 0x0040, - 0x81e: 0x0008, 0x81f: 0x0040, 0x820: 0x0008, 0x821: 0x0008, 0x822: 0x1308, 0x823: 0x1308, + 0x800: 0x3308, 0x801: 0x3008, 0x802: 0x3008, 0x803: 0x3008, 0x804: 0x3008, 0x805: 0x0040, + 0x806: 0x3308, 0x807: 0x3308, 0x808: 0x3308, 0x809: 0x0040, 0x80a: 0x3308, 0x80b: 0x3308, + 0x80c: 0x3308, 0x80d: 0x3b08, 0x80e: 0x0040, 0x80f: 0x0040, 0x810: 0x0040, 0x811: 0x0040, + 0x812: 0x0040, 0x813: 0x0040, 0x814: 0x0040, 0x815: 0x3308, 0x816: 0x3308, 0x817: 0x0040, + 0x818: 0x0008, 0x819: 0x0008, 0x81a: 0x0008, 0x81b: 0x0040, 0x81c: 0x0040, 0x81d: 0x0040, + 0x81e: 0x0040, 0x81f: 0x0040, 0x820: 0x0008, 0x821: 0x0008, 0x822: 0x3308, 0x823: 0x3308, 0x824: 0x0040, 0x825: 0x0040, 0x826: 0x0008, 0x827: 0x0008, 0x828: 0x0008, 0x829: 0x0008, 0x82a: 0x0008, 0x82b: 0x0008, 0x82c: 0x0008, 0x82d: 0x0008, 0x82e: 0x0008, 0x82f: 0x0008, - 0x830: 0x0040, 0x831: 0x0008, 0x832: 0x0008, 0x833: 0x0040, 0x834: 0x0040, 0x835: 0x0040, - 0x836: 0x0040, 0x837: 0x0040, 0x838: 0x0040, 0x839: 0x0040, 0x83a: 0x0040, 0x83b: 0x0040, - 0x83c: 0x0040, 0x83d: 0x0040, 0x83e: 0x0040, 0x83f: 0x0040, + 0x830: 0x0040, 0x831: 0x0040, 0x832: 0x0040, 0x833: 0x0040, 0x834: 0x0040, 0x835: 0x0040, + 0x836: 0x0040, 0x837: 0x0040, 0x838: 0x0018, 0x839: 0x0018, 0x83a: 0x0018, 0x83b: 0x0018, + 0x83c: 0x0018, 0x83d: 0x0018, 0x83e: 0x0018, 0x83f: 0x0018, // Block 0x21, offset 0x840 - 0x840: 0x1008, 0x841: 0x1308, 0x842: 0x1308, 0x843: 0x1308, 0x844: 0x1308, 0x845: 0x0040, - 0x846: 0x1008, 0x847: 0x1008, 0x848: 0x1008, 0x849: 0x0040, 0x84a: 0x1008, 0x84b: 0x1008, - 0x84c: 0x1008, 0x84d: 0x1b08, 0x84e: 0x0008, 0x84f: 0x0018, 0x850: 0x0040, 0x851: 0x0040, - 0x852: 0x0040, 0x853: 0x0040, 0x854: 0x0008, 0x855: 0x0008, 0x856: 0x0008, 0x857: 0x1008, - 0x858: 0x0018, 0x859: 0x0018, 0x85a: 0x0018, 0x85b: 0x0018, 0x85c: 0x0018, 0x85d: 0x0018, - 0x85e: 0x0018, 0x85f: 0x0008, 0x860: 0x0008, 0x861: 0x0008, 0x862: 0x1308, 0x863: 0x1308, - 0x864: 0x0040, 0x865: 0x0040, 0x866: 0x0008, 0x867: 0x0008, 0x868: 0x0008, 0x869: 0x0008, + 0x840: 0x0008, 0x841: 0x3308, 0x842: 0x3008, 0x843: 0x3008, 0x844: 0x0040, 0x845: 0x0008, + 0x846: 0x0008, 0x847: 0x0008, 0x848: 0x0008, 0x849: 0x0008, 0x84a: 0x0008, 0x84b: 0x0008, + 0x84c: 0x0008, 0x84d: 0x0040, 0x84e: 0x0008, 0x84f: 0x0008, 0x850: 0x0008, 0x851: 0x0040, + 0x852: 0x0008, 0x853: 0x0008, 0x854: 0x0008, 0x855: 0x0008, 0x856: 0x0008, 0x857: 0x0008, + 0x858: 0x0008, 0x859: 0x0008, 0x85a: 0x0008, 0x85b: 0x0008, 0x85c: 0x0008, 0x85d: 0x0008, + 0x85e: 0x0008, 0x85f: 0x0008, 0x860: 0x0008, 0x861: 0x0008, 0x862: 0x0008, 0x863: 0x0008, + 0x864: 0x0008, 0x865: 0x0008, 0x866: 0x0008, 0x867: 0x0008, 0x868: 0x0008, 0x869: 0x0040, 0x86a: 0x0008, 0x86b: 0x0008, 0x86c: 0x0008, 0x86d: 0x0008, 0x86e: 0x0008, 0x86f: 0x0008, - 0x870: 0x0018, 0x871: 0x0018, 0x872: 0x0018, 0x873: 0x0018, 0x874: 0x0018, 0x875: 0x0018, - 0x876: 0x0018, 0x877: 0x0018, 0x878: 0x0018, 0x879: 0x0018, 0x87a: 0x0008, 0x87b: 0x0008, - 0x87c: 0x0008, 0x87d: 0x0008, 0x87e: 0x0008, 0x87f: 0x0008, + 0x870: 0x0008, 0x871: 0x0008, 0x872: 0x0008, 0x873: 0x0008, 0x874: 0x0040, 0x875: 0x0008, + 0x876: 0x0008, 0x877: 0x0008, 0x878: 0x0008, 0x879: 0x0008, 0x87a: 0x0040, 0x87b: 0x0040, + 0x87c: 0x3308, 0x87d: 0x0008, 0x87e: 0x3008, 0x87f: 0x3308, // Block 0x22, offset 0x880 - 0x880: 0x0040, 0x881: 0x0008, 0x882: 0x0008, 0x883: 0x0040, 0x884: 0x0008, 0x885: 0x0040, - 0x886: 0x0040, 0x887: 0x0008, 0x888: 0x0008, 0x889: 0x0040, 0x88a: 0x0008, 0x88b: 0x0040, - 0x88c: 0x0040, 0x88d: 0x0008, 0x88e: 0x0040, 0x88f: 0x0040, 0x890: 0x0040, 0x891: 0x0040, - 0x892: 0x0040, 0x893: 0x0040, 0x894: 0x0008, 0x895: 0x0008, 0x896: 0x0008, 0x897: 0x0008, - 0x898: 0x0040, 0x899: 0x0008, 0x89a: 0x0008, 0x89b: 0x0008, 0x89c: 0x0008, 0x89d: 0x0008, - 0x89e: 0x0008, 0x89f: 0x0008, 0x8a0: 0x0040, 0x8a1: 0x0008, 0x8a2: 0x0008, 0x8a3: 0x0008, - 0x8a4: 0x0040, 0x8a5: 0x0008, 0x8a6: 0x0040, 0x8a7: 0x0008, 0x8a8: 0x0040, 0x8a9: 0x0040, - 0x8aa: 0x0008, 0x8ab: 0x0008, 0x8ac: 0x0040, 0x8ad: 0x0008, 0x8ae: 0x0008, 0x8af: 0x0008, - 0x8b0: 0x0008, 0x8b1: 0x1308, 0x8b2: 0x0008, 0x8b3: 0x0929, 0x8b4: 0x1308, 0x8b5: 0x1308, - 0x8b6: 0x1308, 0x8b7: 0x1308, 0x8b8: 0x1308, 0x8b9: 0x1308, 0x8ba: 0x0040, 0x8bb: 0x1308, - 0x8bc: 0x1308, 0x8bd: 0x0008, 0x8be: 0x0040, 0x8bf: 0x0040, + 0x880: 0x3008, 0x881: 0x3008, 0x882: 0x3008, 0x883: 0x3008, 0x884: 0x3008, 0x885: 0x0040, + 0x886: 0x3308, 0x887: 0x3008, 0x888: 0x3008, 0x889: 0x0040, 0x88a: 0x3008, 0x88b: 0x3008, + 0x88c: 0x3308, 0x88d: 0x3b08, 0x88e: 0x0040, 0x88f: 0x0040, 0x890: 0x0040, 0x891: 0x0040, + 0x892: 0x0040, 0x893: 0x0040, 0x894: 0x0040, 0x895: 0x3008, 0x896: 0x3008, 0x897: 0x0040, + 0x898: 0x0040, 0x899: 0x0040, 0x89a: 0x0040, 0x89b: 0x0040, 0x89c: 0x0040, 0x89d: 0x0040, + 0x89e: 0x0008, 0x89f: 0x0040, 0x8a0: 0x0008, 0x8a1: 0x0008, 0x8a2: 0x3308, 0x8a3: 0x3308, + 0x8a4: 0x0040, 0x8a5: 0x0040, 0x8a6: 0x0008, 0x8a7: 0x0008, 0x8a8: 0x0008, 0x8a9: 0x0008, + 0x8aa: 0x0008, 0x8ab: 0x0008, 0x8ac: 0x0008, 0x8ad: 0x0008, 0x8ae: 0x0008, 0x8af: 0x0008, + 0x8b0: 0x0040, 0x8b1: 0x0008, 0x8b2: 0x0008, 0x8b3: 0x0040, 0x8b4: 0x0040, 0x8b5: 0x0040, + 0x8b6: 0x0040, 0x8b7: 0x0040, 0x8b8: 0x0040, 0x8b9: 0x0040, 0x8ba: 0x0040, 0x8bb: 0x0040, + 0x8bc: 0x0040, 0x8bd: 0x0040, 0x8be: 0x0040, 0x8bf: 0x0040, // Block 0x23, offset 0x8c0 - 0x8c0: 0x0008, 0x8c1: 0x0008, 0x8c2: 0x0008, 0x8c3: 0x09d1, 0x8c4: 0x0008, 0x8c5: 0x0008, - 0x8c6: 0x0008, 0x8c7: 0x0008, 0x8c8: 0x0040, 0x8c9: 0x0008, 0x8ca: 0x0008, 0x8cb: 0x0008, - 0x8cc: 0x0008, 0x8cd: 0x0a09, 0x8ce: 0x0008, 0x8cf: 0x0008, 0x8d0: 0x0008, 0x8d1: 0x0008, - 0x8d2: 0x0a41, 0x8d3: 0x0008, 0x8d4: 0x0008, 0x8d5: 0x0008, 0x8d6: 0x0008, 0x8d7: 0x0a79, - 0x8d8: 0x0008, 0x8d9: 0x0008, 0x8da: 0x0008, 0x8db: 0x0008, 0x8dc: 0x0ab1, 0x8dd: 0x0008, - 0x8de: 0x0008, 0x8df: 0x0008, 0x8e0: 0x0008, 0x8e1: 0x0008, 0x8e2: 0x0008, 0x8e3: 0x0008, - 0x8e4: 0x0008, 0x8e5: 0x0008, 0x8e6: 0x0008, 0x8e7: 0x0008, 0x8e8: 0x0008, 0x8e9: 0x0ae9, - 0x8ea: 0x0008, 0x8eb: 0x0008, 0x8ec: 0x0008, 0x8ed: 0x0040, 0x8ee: 0x0040, 0x8ef: 0x0040, - 0x8f0: 0x0040, 0x8f1: 0x1308, 0x8f2: 0x1308, 0x8f3: 0x0b21, 0x8f4: 0x1308, 0x8f5: 0x0b59, - 0x8f6: 0x0b91, 0x8f7: 0x0bc9, 0x8f8: 0x0c19, 0x8f9: 0x0c51, 0x8fa: 0x1308, 0x8fb: 0x1308, - 0x8fc: 0x1308, 0x8fd: 0x1308, 0x8fe: 0x1308, 0x8ff: 0x1008, + 0x8c0: 0x3008, 0x8c1: 0x3308, 0x8c2: 0x3308, 0x8c3: 0x3308, 0x8c4: 0x3308, 0x8c5: 0x0040, + 0x8c6: 0x3008, 0x8c7: 0x3008, 0x8c8: 0x3008, 0x8c9: 0x0040, 0x8ca: 0x3008, 0x8cb: 0x3008, + 0x8cc: 0x3008, 0x8cd: 0x3b08, 0x8ce: 0x0008, 0x8cf: 0x0018, 0x8d0: 0x0040, 0x8d1: 0x0040, + 0x8d2: 0x0040, 0x8d3: 0x0040, 0x8d4: 0x0008, 0x8d5: 0x0008, 0x8d6: 0x0008, 0x8d7: 0x3008, + 0x8d8: 0x0018, 0x8d9: 0x0018, 0x8da: 0x0018, 0x8db: 0x0018, 0x8dc: 0x0018, 0x8dd: 0x0018, + 0x8de: 0x0018, 0x8df: 0x0008, 0x8e0: 0x0008, 0x8e1: 0x0008, 0x8e2: 0x3308, 0x8e3: 0x3308, + 0x8e4: 0x0040, 0x8e5: 0x0040, 0x8e6: 0x0008, 0x8e7: 0x0008, 0x8e8: 0x0008, 0x8e9: 0x0008, + 0x8ea: 0x0008, 0x8eb: 0x0008, 0x8ec: 0x0008, 0x8ed: 0x0008, 0x8ee: 0x0008, 0x8ef: 0x0008, + 0x8f0: 0x0018, 0x8f1: 0x0018, 0x8f2: 0x0018, 0x8f3: 0x0018, 0x8f4: 0x0018, 0x8f5: 0x0018, + 0x8f6: 0x0018, 0x8f7: 0x0018, 0x8f8: 0x0018, 0x8f9: 0x0018, 0x8fa: 0x0008, 0x8fb: 0x0008, + 0x8fc: 0x0008, 0x8fd: 0x0008, 0x8fe: 0x0008, 0x8ff: 0x0008, // Block 0x24, offset 0x900 - 0x900: 0x1308, 0x901: 0x0ca1, 0x902: 0x1308, 0x903: 0x1308, 0x904: 0x1b08, 0x905: 0x0018, - 0x906: 0x1308, 0x907: 0x1308, 0x908: 0x0008, 0x909: 0x0008, 0x90a: 0x0008, 0x90b: 0x0008, - 0x90c: 0x0008, 0x90d: 0x1308, 0x90e: 0x1308, 0x90f: 0x1308, 0x910: 0x1308, 0x911: 0x1308, - 0x912: 0x1308, 0x913: 0x0cd9, 0x914: 0x1308, 0x915: 0x1308, 0x916: 0x1308, 0x917: 0x1308, - 0x918: 0x0040, 0x919: 0x1308, 0x91a: 0x1308, 0x91b: 0x1308, 0x91c: 0x1308, 0x91d: 0x0d11, - 0x91e: 0x1308, 0x91f: 0x1308, 0x920: 0x1308, 0x921: 0x1308, 0x922: 0x0d49, 0x923: 0x1308, - 0x924: 0x1308, 0x925: 0x1308, 0x926: 0x1308, 0x927: 0x0d81, 0x928: 0x1308, 0x929: 0x1308, - 0x92a: 0x1308, 0x92b: 0x1308, 0x92c: 0x0db9, 0x92d: 0x1308, 0x92e: 0x1308, 0x92f: 0x1308, - 0x930: 0x1308, 0x931: 0x1308, 0x932: 0x1308, 0x933: 0x1308, 0x934: 0x1308, 0x935: 0x1308, - 0x936: 0x1308, 0x937: 0x1308, 0x938: 0x1308, 0x939: 0x0df1, 0x93a: 0x1308, 0x93b: 0x1308, - 0x93c: 0x1308, 0x93d: 0x0040, 0x93e: 0x0018, 0x93f: 0x0018, + 0x900: 0x0040, 0x901: 0x0008, 0x902: 0x0008, 0x903: 0x0040, 0x904: 0x0008, 0x905: 0x0040, + 0x906: 0x0040, 0x907: 0x0008, 0x908: 0x0008, 0x909: 0x0040, 0x90a: 0x0008, 0x90b: 0x0040, + 0x90c: 0x0040, 0x90d: 0x0008, 0x90e: 0x0040, 0x90f: 0x0040, 0x910: 0x0040, 0x911: 0x0040, + 0x912: 0x0040, 0x913: 0x0040, 0x914: 0x0008, 0x915: 0x0008, 0x916: 0x0008, 0x917: 0x0008, + 0x918: 0x0040, 0x919: 0x0008, 0x91a: 0x0008, 0x91b: 0x0008, 0x91c: 0x0008, 0x91d: 0x0008, + 0x91e: 0x0008, 0x91f: 0x0008, 0x920: 0x0040, 0x921: 0x0008, 0x922: 0x0008, 0x923: 0x0008, + 0x924: 0x0040, 0x925: 0x0008, 0x926: 0x0040, 0x927: 0x0008, 0x928: 0x0040, 0x929: 0x0040, + 0x92a: 0x0008, 0x92b: 0x0008, 0x92c: 0x0040, 0x92d: 0x0008, 0x92e: 0x0008, 0x92f: 0x0008, + 0x930: 0x0008, 0x931: 0x3308, 0x932: 0x0008, 0x933: 0x0929, 0x934: 0x3308, 0x935: 0x3308, + 0x936: 0x3308, 0x937: 0x3308, 0x938: 0x3308, 0x939: 0x3308, 0x93a: 0x0040, 0x93b: 0x3308, + 0x93c: 0x3308, 0x93d: 0x0008, 0x93e: 0x0040, 0x93f: 0x0040, // Block 0x25, offset 0x940 - 0x940: 0x0008, 0x941: 0x0008, 0x942: 0x0008, 0x943: 0x0008, 0x944: 0x0008, 0x945: 0x0008, - 0x946: 0x0008, 0x947: 0x0008, 0x948: 0x0008, 0x949: 0x0008, 0x94a: 0x0008, 0x94b: 0x0008, - 0x94c: 0x0008, 0x94d: 0x0008, 0x94e: 0x0008, 0x94f: 0x0008, 0x950: 0x0008, 0x951: 0x0008, - 0x952: 0x0008, 0x953: 0x0008, 0x954: 0x0008, 0x955: 0x0008, 0x956: 0x0008, 0x957: 0x0008, - 0x958: 0x0008, 0x959: 0x0008, 0x95a: 0x0008, 0x95b: 0x0008, 0x95c: 0x0008, 0x95d: 0x0008, + 0x940: 0x0008, 0x941: 0x0008, 0x942: 0x0008, 0x943: 0x09d1, 0x944: 0x0008, 0x945: 0x0008, + 0x946: 0x0008, 0x947: 0x0008, 0x948: 0x0040, 0x949: 0x0008, 0x94a: 0x0008, 0x94b: 0x0008, + 0x94c: 0x0008, 0x94d: 0x0a09, 0x94e: 0x0008, 0x94f: 0x0008, 0x950: 0x0008, 0x951: 0x0008, + 0x952: 0x0a41, 0x953: 0x0008, 0x954: 0x0008, 0x955: 0x0008, 0x956: 0x0008, 0x957: 0x0a79, + 0x958: 0x0008, 0x959: 0x0008, 0x95a: 0x0008, 0x95b: 0x0008, 0x95c: 0x0ab1, 0x95d: 0x0008, 0x95e: 0x0008, 0x95f: 0x0008, 0x960: 0x0008, 0x961: 0x0008, 0x962: 0x0008, 0x963: 0x0008, - 0x964: 0x0008, 0x965: 0x0008, 0x966: 0x0008, 0x967: 0x0008, 0x968: 0x0008, 0x969: 0x0008, - 0x96a: 0x0008, 0x96b: 0x0008, 0x96c: 0x0039, 0x96d: 0x0ed1, 0x96e: 0x0ee9, 0x96f: 0x0008, - 0x970: 0x0ef9, 0x971: 0x0f09, 0x972: 0x0f19, 0x973: 0x0f31, 0x974: 0x0249, 0x975: 0x0f41, - 0x976: 0x0259, 0x977: 0x0f51, 0x978: 0x0359, 0x979: 0x0f61, 0x97a: 0x0f71, 0x97b: 0x0008, - 0x97c: 0x00d9, 0x97d: 0x0f81, 0x97e: 0x0f99, 0x97f: 0x0269, + 0x964: 0x0008, 0x965: 0x0008, 0x966: 0x0008, 0x967: 0x0008, 0x968: 0x0008, 0x969: 0x0ae9, + 0x96a: 0x0008, 0x96b: 0x0008, 0x96c: 0x0008, 0x96d: 0x0040, 0x96e: 0x0040, 0x96f: 0x0040, + 0x970: 0x0040, 0x971: 0x3308, 0x972: 0x3308, 0x973: 0x0b21, 0x974: 0x3308, 0x975: 0x0b59, + 0x976: 0x0b91, 0x977: 0x0bc9, 0x978: 0x0c19, 0x979: 0x0c51, 0x97a: 0x3308, 0x97b: 0x3308, + 0x97c: 0x3308, 0x97d: 0x3308, 0x97e: 0x3308, 0x97f: 0x3008, // Block 0x26, offset 0x980 - 0x980: 0x0fa9, 0x981: 0x0fb9, 0x982: 0x0279, 0x983: 0x0039, 0x984: 0x0fc9, 0x985: 0x0fe1, - 0x986: 0x059d, 0x987: 0x0ee9, 0x988: 0x0ef9, 0x989: 0x0f09, 0x98a: 0x0ff9, 0x98b: 0x1011, - 0x98c: 0x1029, 0x98d: 0x0f31, 0x98e: 0x0008, 0x98f: 0x0f51, 0x990: 0x0f61, 0x991: 0x1041, - 0x992: 0x00d9, 0x993: 0x1059, 0x994: 0x05b5, 0x995: 0x05b5, 0x996: 0x0f99, 0x997: 0x0fa9, - 0x998: 0x0fb9, 0x999: 0x059d, 0x99a: 0x1071, 0x99b: 0x1089, 0x99c: 0x05cd, 0x99d: 0x1099, - 0x99e: 0x10b1, 0x99f: 0x10c9, 0x9a0: 0x10e1, 0x9a1: 0x10f9, 0x9a2: 0x0f41, 0x9a3: 0x0269, - 0x9a4: 0x0fb9, 0x9a5: 0x1089, 0x9a6: 0x1099, 0x9a7: 0x10b1, 0x9a8: 0x1111, 0x9a9: 0x10e1, - 0x9aa: 0x10f9, 0x9ab: 0x0008, 0x9ac: 0x0008, 0x9ad: 0x0008, 0x9ae: 0x0008, 0x9af: 0x0008, - 0x9b0: 0x0008, 0x9b1: 0x0008, 0x9b2: 0x0008, 0x9b3: 0x0008, 0x9b4: 0x0008, 0x9b5: 0x0008, - 0x9b6: 0x0008, 0x9b7: 0x0008, 0x9b8: 0x1129, 0x9b9: 0x0008, 0x9ba: 0x0008, 0x9bb: 0x0008, - 0x9bc: 0x0008, 0x9bd: 0x0008, 0x9be: 0x0008, 0x9bf: 0x0008, + 0x980: 0x3308, 0x981: 0x0ca1, 0x982: 0x3308, 0x983: 0x3308, 0x984: 0x3b08, 0x985: 0x0018, + 0x986: 0x3308, 0x987: 0x3308, 0x988: 0x0008, 0x989: 0x0008, 0x98a: 0x0008, 0x98b: 0x0008, + 0x98c: 0x0008, 0x98d: 0x3308, 0x98e: 0x3308, 0x98f: 0x3308, 0x990: 0x3308, 0x991: 0x3308, + 0x992: 0x3308, 0x993: 0x0cd9, 0x994: 0x3308, 0x995: 0x3308, 0x996: 0x3308, 0x997: 0x3308, + 0x998: 0x0040, 0x999: 0x3308, 0x99a: 0x3308, 0x99b: 0x3308, 0x99c: 0x3308, 0x99d: 0x0d11, + 0x99e: 0x3308, 0x99f: 0x3308, 0x9a0: 0x3308, 0x9a1: 0x3308, 0x9a2: 0x0d49, 0x9a3: 0x3308, + 0x9a4: 0x3308, 0x9a5: 0x3308, 0x9a6: 0x3308, 0x9a7: 0x0d81, 0x9a8: 0x3308, 0x9a9: 0x3308, + 0x9aa: 0x3308, 0x9ab: 0x3308, 0x9ac: 0x0db9, 0x9ad: 0x3308, 0x9ae: 0x3308, 0x9af: 0x3308, + 0x9b0: 0x3308, 0x9b1: 0x3308, 0x9b2: 0x3308, 0x9b3: 0x3308, 0x9b4: 0x3308, 0x9b5: 0x3308, + 0x9b6: 0x3308, 0x9b7: 0x3308, 0x9b8: 0x3308, 0x9b9: 0x0df1, 0x9ba: 0x3308, 0x9bb: 0x3308, + 0x9bc: 0x3308, 0x9bd: 0x0040, 0x9be: 0x0018, 0x9bf: 0x0018, // Block 0x27, offset 0x9c0 0x9c0: 0x0008, 0x9c1: 0x0008, 0x9c2: 0x0008, 0x9c3: 0x0008, 0x9c4: 0x0008, 0x9c5: 0x0008, 0x9c6: 0x0008, 0x9c7: 0x0008, 0x9c8: 0x0008, 0x9c9: 0x0008, 0x9ca: 0x0008, 0x9cb: 0x0008, 0x9cc: 0x0008, 0x9cd: 0x0008, 0x9ce: 0x0008, 0x9cf: 0x0008, 0x9d0: 0x0008, 0x9d1: 0x0008, 0x9d2: 0x0008, 0x9d3: 0x0008, 0x9d4: 0x0008, 0x9d5: 0x0008, 0x9d6: 0x0008, 0x9d7: 0x0008, - 0x9d8: 0x0008, 0x9d9: 0x0008, 0x9da: 0x0008, 0x9db: 0x1141, 0x9dc: 0x1159, 0x9dd: 0x1169, - 0x9de: 0x1181, 0x9df: 0x1029, 0x9e0: 0x1199, 0x9e1: 0x11a9, 0x9e2: 0x11c1, 0x9e3: 0x11d9, - 0x9e4: 0x11f1, 0x9e5: 0x1209, 0x9e6: 0x1221, 0x9e7: 0x05e5, 0x9e8: 0x1239, 0x9e9: 0x1251, - 0x9ea: 0xe17d, 0x9eb: 0x1269, 0x9ec: 0x1281, 0x9ed: 0x1299, 0x9ee: 0x12b1, 0x9ef: 0x12c9, - 0x9f0: 0x12e1, 0x9f1: 0x12f9, 0x9f2: 0x1311, 0x9f3: 0x1329, 0x9f4: 0x1341, 0x9f5: 0x1359, - 0x9f6: 0x1371, 0x9f7: 0x1389, 0x9f8: 0x05fd, 0x9f9: 0x13a1, 0x9fa: 0x13b9, 0x9fb: 0x13d1, - 0x9fc: 0x13e1, 0x9fd: 0x13f9, 0x9fe: 0x1411, 0x9ff: 0x1429, + 0x9d8: 0x0008, 0x9d9: 0x0008, 0x9da: 0x0008, 0x9db: 0x0008, 0x9dc: 0x0008, 0x9dd: 0x0008, + 0x9de: 0x0008, 0x9df: 0x0008, 0x9e0: 0x0008, 0x9e1: 0x0008, 0x9e2: 0x0008, 0x9e3: 0x0008, + 0x9e4: 0x0008, 0x9e5: 0x0008, 0x9e6: 0x0008, 0x9e7: 0x0008, 0x9e8: 0x0008, 0x9e9: 0x0008, + 0x9ea: 0x0008, 0x9eb: 0x0008, 0x9ec: 0x0039, 0x9ed: 0x0ed1, 0x9ee: 0x0ee9, 0x9ef: 0x0008, + 0x9f0: 0x0ef9, 0x9f1: 0x0f09, 0x9f2: 0x0f19, 0x9f3: 0x0f31, 0x9f4: 0x0249, 0x9f5: 0x0f41, + 0x9f6: 0x0259, 0x9f7: 0x0f51, 0x9f8: 0x0359, 0x9f9: 0x0f61, 0x9fa: 0x0f71, 0x9fb: 0x0008, + 0x9fc: 0x00d9, 0x9fd: 0x0f81, 0x9fe: 0x0f99, 0x9ff: 0x0269, // Block 0x28, offset 0xa00 - 0xa00: 0xe00d, 0xa01: 0x0008, 0xa02: 0xe00d, 0xa03: 0x0008, 0xa04: 0xe00d, 0xa05: 0x0008, - 0xa06: 0xe00d, 0xa07: 0x0008, 0xa08: 0xe00d, 0xa09: 0x0008, 0xa0a: 0xe00d, 0xa0b: 0x0008, - 0xa0c: 0xe00d, 0xa0d: 0x0008, 0xa0e: 0xe00d, 0xa0f: 0x0008, 0xa10: 0xe00d, 0xa11: 0x0008, - 0xa12: 0xe00d, 0xa13: 0x0008, 0xa14: 0xe00d, 0xa15: 0x0008, 0xa16: 0xe00d, 0xa17: 0x0008, - 0xa18: 0xe00d, 0xa19: 0x0008, 0xa1a: 0xe00d, 0xa1b: 0x0008, 0xa1c: 0xe00d, 0xa1d: 0x0008, - 0xa1e: 0xe00d, 0xa1f: 0x0008, 0xa20: 0xe00d, 0xa21: 0x0008, 0xa22: 0xe00d, 0xa23: 0x0008, - 0xa24: 0xe00d, 0xa25: 0x0008, 0xa26: 0xe00d, 0xa27: 0x0008, 0xa28: 0xe00d, 0xa29: 0x0008, - 0xa2a: 0xe00d, 0xa2b: 0x0008, 0xa2c: 0xe00d, 0xa2d: 0x0008, 0xa2e: 0xe00d, 0xa2f: 0x0008, - 0xa30: 0xe00d, 0xa31: 0x0008, 0xa32: 0xe00d, 0xa33: 0x0008, 0xa34: 0xe00d, 0xa35: 0x0008, - 0xa36: 0xe00d, 0xa37: 0x0008, 0xa38: 0xe00d, 0xa39: 0x0008, 0xa3a: 0xe00d, 0xa3b: 0x0008, - 0xa3c: 0xe00d, 0xa3d: 0x0008, 0xa3e: 0xe00d, 0xa3f: 0x0008, + 0xa00: 0x0fa9, 0xa01: 0x0fb9, 0xa02: 0x0279, 0xa03: 0x0039, 0xa04: 0x0fc9, 0xa05: 0x0fe1, + 0xa06: 0x059d, 0xa07: 0x0ee9, 0xa08: 0x0ef9, 0xa09: 0x0f09, 0xa0a: 0x0ff9, 0xa0b: 0x1011, + 0xa0c: 0x1029, 0xa0d: 0x0f31, 0xa0e: 0x0008, 0xa0f: 0x0f51, 0xa10: 0x0f61, 0xa11: 0x1041, + 0xa12: 0x00d9, 0xa13: 0x1059, 0xa14: 0x05b5, 0xa15: 0x05b5, 0xa16: 0x0f99, 0xa17: 0x0fa9, + 0xa18: 0x0fb9, 0xa19: 0x059d, 0xa1a: 0x1071, 0xa1b: 0x1089, 0xa1c: 0x05cd, 0xa1d: 0x1099, + 0xa1e: 0x10b1, 0xa1f: 0x10c9, 0xa20: 0x10e1, 0xa21: 0x10f9, 0xa22: 0x0f41, 0xa23: 0x0269, + 0xa24: 0x0fb9, 0xa25: 0x1089, 0xa26: 0x1099, 0xa27: 0x10b1, 0xa28: 0x1111, 0xa29: 0x10e1, + 0xa2a: 0x10f9, 0xa2b: 0x0008, 0xa2c: 0x0008, 0xa2d: 0x0008, 0xa2e: 0x0008, 0xa2f: 0x0008, + 0xa30: 0x0008, 0xa31: 0x0008, 0xa32: 0x0008, 0xa33: 0x0008, 0xa34: 0x0008, 0xa35: 0x0008, + 0xa36: 0x0008, 0xa37: 0x0008, 0xa38: 0x1129, 0xa39: 0x0008, 0xa3a: 0x0008, 0xa3b: 0x0008, + 0xa3c: 0x0008, 0xa3d: 0x0008, 0xa3e: 0x0008, 0xa3f: 0x0008, // Block 0x29, offset 0xa40 - 0xa40: 0xe00d, 0xa41: 0x0008, 0xa42: 0xe00d, 0xa43: 0x0008, 0xa44: 0xe00d, 0xa45: 0x0008, - 0xa46: 0xe00d, 0xa47: 0x0008, 0xa48: 0xe00d, 0xa49: 0x0008, 0xa4a: 0xe00d, 0xa4b: 0x0008, - 0xa4c: 0xe00d, 0xa4d: 0x0008, 0xa4e: 0xe00d, 0xa4f: 0x0008, 0xa50: 0xe00d, 0xa51: 0x0008, - 0xa52: 0xe00d, 0xa53: 0x0008, 0xa54: 0xe00d, 0xa55: 0x0008, 0xa56: 0x0008, 0xa57: 0x0008, - 0xa58: 0x0008, 0xa59: 0x0008, 0xa5a: 0x0615, 0xa5b: 0x0635, 0xa5c: 0x0008, 0xa5d: 0x0008, - 0xa5e: 0x1441, 0xa5f: 0x0008, 0xa60: 0xe00d, 0xa61: 0x0008, 0xa62: 0xe00d, 0xa63: 0x0008, - 0xa64: 0xe00d, 0xa65: 0x0008, 0xa66: 0xe00d, 0xa67: 0x0008, 0xa68: 0xe00d, 0xa69: 0x0008, - 0xa6a: 0xe00d, 0xa6b: 0x0008, 0xa6c: 0xe00d, 0xa6d: 0x0008, 0xa6e: 0xe00d, 0xa6f: 0x0008, - 0xa70: 0xe00d, 0xa71: 0x0008, 0xa72: 0xe00d, 0xa73: 0x0008, 0xa74: 0xe00d, 0xa75: 0x0008, - 0xa76: 0xe00d, 0xa77: 0x0008, 0xa78: 0xe00d, 0xa79: 0x0008, 0xa7a: 0xe00d, 0xa7b: 0x0008, - 0xa7c: 0xe00d, 0xa7d: 0x0008, 0xa7e: 0xe00d, 0xa7f: 0x0008, + 0xa40: 0x0008, 0xa41: 0x0008, 0xa42: 0x0008, 0xa43: 0x0008, 0xa44: 0x0008, 0xa45: 0x0008, + 0xa46: 0x0008, 0xa47: 0x0008, 0xa48: 0x0008, 0xa49: 0x0008, 0xa4a: 0x0008, 0xa4b: 0x0008, + 0xa4c: 0x0008, 0xa4d: 0x0008, 0xa4e: 0x0008, 0xa4f: 0x0008, 0xa50: 0x0008, 0xa51: 0x0008, + 0xa52: 0x0008, 0xa53: 0x0008, 0xa54: 0x0008, 0xa55: 0x0008, 0xa56: 0x0008, 0xa57: 0x0008, + 0xa58: 0x0008, 0xa59: 0x0008, 0xa5a: 0x0008, 0xa5b: 0x1141, 0xa5c: 0x1159, 0xa5d: 0x1169, + 0xa5e: 0x1181, 0xa5f: 0x1029, 0xa60: 0x1199, 0xa61: 0x11a9, 0xa62: 0x11c1, 0xa63: 0x11d9, + 0xa64: 0x11f1, 0xa65: 0x1209, 0xa66: 0x1221, 0xa67: 0x05e5, 0xa68: 0x1239, 0xa69: 0x1251, + 0xa6a: 0xe17d, 0xa6b: 0x1269, 0xa6c: 0x1281, 0xa6d: 0x1299, 0xa6e: 0x12b1, 0xa6f: 0x12c9, + 0xa70: 0x12e1, 0xa71: 0x12f9, 0xa72: 0x1311, 0xa73: 0x1329, 0xa74: 0x1341, 0xa75: 0x1359, + 0xa76: 0x1371, 0xa77: 0x1389, 0xa78: 0x05fd, 0xa79: 0x13a1, 0xa7a: 0x13b9, 0xa7b: 0x13d1, + 0xa7c: 0x13e1, 0xa7d: 0x13f9, 0xa7e: 0x1411, 0xa7f: 0x1429, // Block 0x2a, offset 0xa80 - 0xa80: 0x0008, 0xa81: 0x0008, 0xa82: 0x0008, 0xa83: 0x0008, 0xa84: 0x0008, 0xa85: 0x0008, - 0xa86: 0x0040, 0xa87: 0x0040, 0xa88: 0xe045, 0xa89: 0xe045, 0xa8a: 0xe045, 0xa8b: 0xe045, - 0xa8c: 0xe045, 0xa8d: 0xe045, 0xa8e: 0x0040, 0xa8f: 0x0040, 0xa90: 0x0008, 0xa91: 0x0008, - 0xa92: 0x0008, 0xa93: 0x0008, 0xa94: 0x0008, 0xa95: 0x0008, 0xa96: 0x0008, 0xa97: 0x0008, - 0xa98: 0x0040, 0xa99: 0xe045, 0xa9a: 0x0040, 0xa9b: 0xe045, 0xa9c: 0x0040, 0xa9d: 0xe045, - 0xa9e: 0x0040, 0xa9f: 0xe045, 0xaa0: 0x0008, 0xaa1: 0x0008, 0xaa2: 0x0008, 0xaa3: 0x0008, - 0xaa4: 0x0008, 0xaa5: 0x0008, 0xaa6: 0x0008, 0xaa7: 0x0008, 0xaa8: 0xe045, 0xaa9: 0xe045, - 0xaaa: 0xe045, 0xaab: 0xe045, 0xaac: 0xe045, 0xaad: 0xe045, 0xaae: 0xe045, 0xaaf: 0xe045, - 0xab0: 0x0008, 0xab1: 0x1459, 0xab2: 0x0008, 0xab3: 0x1471, 0xab4: 0x0008, 0xab5: 0x1489, - 0xab6: 0x0008, 0xab7: 0x14a1, 0xab8: 0x0008, 0xab9: 0x14b9, 0xaba: 0x0008, 0xabb: 0x14d1, - 0xabc: 0x0008, 0xabd: 0x14e9, 0xabe: 0x0040, 0xabf: 0x0040, + 0xa80: 0xe00d, 0xa81: 0x0008, 0xa82: 0xe00d, 0xa83: 0x0008, 0xa84: 0xe00d, 0xa85: 0x0008, + 0xa86: 0xe00d, 0xa87: 0x0008, 0xa88: 0xe00d, 0xa89: 0x0008, 0xa8a: 0xe00d, 0xa8b: 0x0008, + 0xa8c: 0xe00d, 0xa8d: 0x0008, 0xa8e: 0xe00d, 0xa8f: 0x0008, 0xa90: 0xe00d, 0xa91: 0x0008, + 0xa92: 0xe00d, 0xa93: 0x0008, 0xa94: 0xe00d, 0xa95: 0x0008, 0xa96: 0xe00d, 0xa97: 0x0008, + 0xa98: 0xe00d, 0xa99: 0x0008, 0xa9a: 0xe00d, 0xa9b: 0x0008, 0xa9c: 0xe00d, 0xa9d: 0x0008, + 0xa9e: 0xe00d, 0xa9f: 0x0008, 0xaa0: 0xe00d, 0xaa1: 0x0008, 0xaa2: 0xe00d, 0xaa3: 0x0008, + 0xaa4: 0xe00d, 0xaa5: 0x0008, 0xaa6: 0xe00d, 0xaa7: 0x0008, 0xaa8: 0xe00d, 0xaa9: 0x0008, + 0xaaa: 0xe00d, 0xaab: 0x0008, 0xaac: 0xe00d, 0xaad: 0x0008, 0xaae: 0xe00d, 0xaaf: 0x0008, + 0xab0: 0xe00d, 0xab1: 0x0008, 0xab2: 0xe00d, 0xab3: 0x0008, 0xab4: 0xe00d, 0xab5: 0x0008, + 0xab6: 0xe00d, 0xab7: 0x0008, 0xab8: 0xe00d, 0xab9: 0x0008, 0xaba: 0xe00d, 0xabb: 0x0008, + 0xabc: 0xe00d, 0xabd: 0x0008, 0xabe: 0xe00d, 0xabf: 0x0008, // Block 0x2b, offset 0xac0 - 0xac0: 0x1501, 0xac1: 0x1531, 0xac2: 0x1561, 0xac3: 0x1591, 0xac4: 0x15c1, 0xac5: 0x15f1, - 0xac6: 0x1621, 0xac7: 0x1651, 0xac8: 0x1501, 0xac9: 0x1531, 0xaca: 0x1561, 0xacb: 0x1591, - 0xacc: 0x15c1, 0xacd: 0x15f1, 0xace: 0x1621, 0xacf: 0x1651, 0xad0: 0x1681, 0xad1: 0x16b1, - 0xad2: 0x16e1, 0xad3: 0x1711, 0xad4: 0x1741, 0xad5: 0x1771, 0xad6: 0x17a1, 0xad7: 0x17d1, - 0xad8: 0x1681, 0xad9: 0x16b1, 0xada: 0x16e1, 0xadb: 0x1711, 0xadc: 0x1741, 0xadd: 0x1771, - 0xade: 0x17a1, 0xadf: 0x17d1, 0xae0: 0x1801, 0xae1: 0x1831, 0xae2: 0x1861, 0xae3: 0x1891, - 0xae4: 0x18c1, 0xae5: 0x18f1, 0xae6: 0x1921, 0xae7: 0x1951, 0xae8: 0x1801, 0xae9: 0x1831, - 0xaea: 0x1861, 0xaeb: 0x1891, 0xaec: 0x18c1, 0xaed: 0x18f1, 0xaee: 0x1921, 0xaef: 0x1951, - 0xaf0: 0x0008, 0xaf1: 0x0008, 0xaf2: 0x1981, 0xaf3: 0x19b1, 0xaf4: 0x19d9, 0xaf5: 0x0040, - 0xaf6: 0x0008, 0xaf7: 0x1a01, 0xaf8: 0xe045, 0xaf9: 0xe045, 0xafa: 0x064d, 0xafb: 0x1459, - 0xafc: 0x19b1, 0xafd: 0x0666, 0xafe: 0x1a31, 0xaff: 0x0686, + 0xac0: 0xe00d, 0xac1: 0x0008, 0xac2: 0xe00d, 0xac3: 0x0008, 0xac4: 0xe00d, 0xac5: 0x0008, + 0xac6: 0xe00d, 0xac7: 0x0008, 0xac8: 0xe00d, 0xac9: 0x0008, 0xaca: 0xe00d, 0xacb: 0x0008, + 0xacc: 0xe00d, 0xacd: 0x0008, 0xace: 0xe00d, 0xacf: 0x0008, 0xad0: 0xe00d, 0xad1: 0x0008, + 0xad2: 0xe00d, 0xad3: 0x0008, 0xad4: 0xe00d, 0xad5: 0x0008, 0xad6: 0x0008, 0xad7: 0x0008, + 0xad8: 0x0008, 0xad9: 0x0008, 0xada: 0x0615, 0xadb: 0x0635, 0xadc: 0x0008, 0xadd: 0x0008, + 0xade: 0x1441, 0xadf: 0x0008, 0xae0: 0xe00d, 0xae1: 0x0008, 0xae2: 0xe00d, 0xae3: 0x0008, + 0xae4: 0xe00d, 0xae5: 0x0008, 0xae6: 0xe00d, 0xae7: 0x0008, 0xae8: 0xe00d, 0xae9: 0x0008, + 0xaea: 0xe00d, 0xaeb: 0x0008, 0xaec: 0xe00d, 0xaed: 0x0008, 0xaee: 0xe00d, 0xaef: 0x0008, + 0xaf0: 0xe00d, 0xaf1: 0x0008, 0xaf2: 0xe00d, 0xaf3: 0x0008, 0xaf4: 0xe00d, 0xaf5: 0x0008, + 0xaf6: 0xe00d, 0xaf7: 0x0008, 0xaf8: 0xe00d, 0xaf9: 0x0008, 0xafa: 0xe00d, 0xafb: 0x0008, + 0xafc: 0xe00d, 0xafd: 0x0008, 0xafe: 0xe00d, 0xaff: 0x0008, // Block 0x2c, offset 0xb00 - 0xb00: 0x06a6, 0xb01: 0x1a4a, 0xb02: 0x1a79, 0xb03: 0x1aa9, 0xb04: 0x1ad1, 0xb05: 0x0040, - 0xb06: 0x0008, 0xb07: 0x1af9, 0xb08: 0x06c5, 0xb09: 0x1471, 0xb0a: 0x06dd, 0xb0b: 0x1489, - 0xb0c: 0x1aa9, 0xb0d: 0x1b2a, 0xb0e: 0x1b5a, 0xb0f: 0x1b8a, 0xb10: 0x0008, 0xb11: 0x0008, - 0xb12: 0x0008, 0xb13: 0x1bb9, 0xb14: 0x0040, 0xb15: 0x0040, 0xb16: 0x0008, 0xb17: 0x0008, - 0xb18: 0xe045, 0xb19: 0xe045, 0xb1a: 0x06f5, 0xb1b: 0x14a1, 0xb1c: 0x0040, 0xb1d: 0x1bd2, - 0xb1e: 0x1c02, 0xb1f: 0x1c32, 0xb20: 0x0008, 0xb21: 0x0008, 0xb22: 0x0008, 0xb23: 0x1c61, + 0xb00: 0x0008, 0xb01: 0x0008, 0xb02: 0x0008, 0xb03: 0x0008, 0xb04: 0x0008, 0xb05: 0x0008, + 0xb06: 0x0040, 0xb07: 0x0040, 0xb08: 0xe045, 0xb09: 0xe045, 0xb0a: 0xe045, 0xb0b: 0xe045, + 0xb0c: 0xe045, 0xb0d: 0xe045, 0xb0e: 0x0040, 0xb0f: 0x0040, 0xb10: 0x0008, 0xb11: 0x0008, + 0xb12: 0x0008, 0xb13: 0x0008, 0xb14: 0x0008, 0xb15: 0x0008, 0xb16: 0x0008, 0xb17: 0x0008, + 0xb18: 0x0040, 0xb19: 0xe045, 0xb1a: 0x0040, 0xb1b: 0xe045, 0xb1c: 0x0040, 0xb1d: 0xe045, + 0xb1e: 0x0040, 0xb1f: 0xe045, 0xb20: 0x0008, 0xb21: 0x0008, 0xb22: 0x0008, 0xb23: 0x0008, 0xb24: 0x0008, 0xb25: 0x0008, 0xb26: 0x0008, 0xb27: 0x0008, 0xb28: 0xe045, 0xb29: 0xe045, - 0xb2a: 0x070d, 0xb2b: 0x14d1, 0xb2c: 0xe04d, 0xb2d: 0x1c7a, 0xb2e: 0x03d2, 0xb2f: 0x1caa, - 0xb30: 0x0040, 0xb31: 0x0040, 0xb32: 0x1cb9, 0xb33: 0x1ce9, 0xb34: 0x1d11, 0xb35: 0x0040, - 0xb36: 0x0008, 0xb37: 0x1d39, 0xb38: 0x0725, 0xb39: 0x14b9, 0xb3a: 0x0515, 0xb3b: 0x14e9, - 0xb3c: 0x1ce9, 0xb3d: 0x073e, 0xb3e: 0x075e, 0xb3f: 0x0040, + 0xb2a: 0xe045, 0xb2b: 0xe045, 0xb2c: 0xe045, 0xb2d: 0xe045, 0xb2e: 0xe045, 0xb2f: 0xe045, + 0xb30: 0x0008, 0xb31: 0x1459, 0xb32: 0x0008, 0xb33: 0x1471, 0xb34: 0x0008, 0xb35: 0x1489, + 0xb36: 0x0008, 0xb37: 0x14a1, 0xb38: 0x0008, 0xb39: 0x14b9, 0xb3a: 0x0008, 0xb3b: 0x14d1, + 0xb3c: 0x0008, 0xb3d: 0x14e9, 0xb3e: 0x0040, 0xb3f: 0x0040, // Block 0x2d, offset 0xb40 - 0xb40: 0x000a, 0xb41: 0x000a, 0xb42: 0x000a, 0xb43: 0x000a, 0xb44: 0x000a, 0xb45: 0x000a, - 0xb46: 0x000a, 0xb47: 0x000a, 0xb48: 0x000a, 0xb49: 0x000a, 0xb4a: 0x000a, 0xb4b: 0x03c0, - 0xb4c: 0x0003, 0xb4d: 0x0003, 0xb4e: 0x0340, 0xb4f: 0x0340, 0xb50: 0x0018, 0xb51: 0xe00d, - 0xb52: 0x0018, 0xb53: 0x0018, 0xb54: 0x0018, 0xb55: 0x0018, 0xb56: 0x0018, 0xb57: 0x077e, - 0xb58: 0x0018, 0xb59: 0x0018, 0xb5a: 0x0018, 0xb5b: 0x0018, 0xb5c: 0x0018, 0xb5d: 0x0018, - 0xb5e: 0x0018, 0xb5f: 0x0018, 0xb60: 0x0018, 0xb61: 0x0018, 0xb62: 0x0018, 0xb63: 0x0018, - 0xb64: 0x0040, 0xb65: 0x0040, 0xb66: 0x0040, 0xb67: 0x0018, 0xb68: 0x0040, 0xb69: 0x0040, - 0xb6a: 0x0340, 0xb6b: 0x0340, 0xb6c: 0x0340, 0xb6d: 0x0340, 0xb6e: 0x0340, 0xb6f: 0x000a, - 0xb70: 0x0018, 0xb71: 0x0018, 0xb72: 0x0018, 0xb73: 0x1d69, 0xb74: 0x1da1, 0xb75: 0x0018, - 0xb76: 0x1df1, 0xb77: 0x1e29, 0xb78: 0x0018, 0xb79: 0x0018, 0xb7a: 0x0018, 0xb7b: 0x0018, - 0xb7c: 0x1e7a, 0xb7d: 0x0018, 0xb7e: 0x079e, 0xb7f: 0x0018, + 0xb40: 0x1501, 0xb41: 0x1531, 0xb42: 0x1561, 0xb43: 0x1591, 0xb44: 0x15c1, 0xb45: 0x15f1, + 0xb46: 0x1621, 0xb47: 0x1651, 0xb48: 0x1501, 0xb49: 0x1531, 0xb4a: 0x1561, 0xb4b: 0x1591, + 0xb4c: 0x15c1, 0xb4d: 0x15f1, 0xb4e: 0x1621, 0xb4f: 0x1651, 0xb50: 0x1681, 0xb51: 0x16b1, + 0xb52: 0x16e1, 0xb53: 0x1711, 0xb54: 0x1741, 0xb55: 0x1771, 0xb56: 0x17a1, 0xb57: 0x17d1, + 0xb58: 0x1681, 0xb59: 0x16b1, 0xb5a: 0x16e1, 0xb5b: 0x1711, 0xb5c: 0x1741, 0xb5d: 0x1771, + 0xb5e: 0x17a1, 0xb5f: 0x17d1, 0xb60: 0x1801, 0xb61: 0x1831, 0xb62: 0x1861, 0xb63: 0x1891, + 0xb64: 0x18c1, 0xb65: 0x18f1, 0xb66: 0x1921, 0xb67: 0x1951, 0xb68: 0x1801, 0xb69: 0x1831, + 0xb6a: 0x1861, 0xb6b: 0x1891, 0xb6c: 0x18c1, 0xb6d: 0x18f1, 0xb6e: 0x1921, 0xb6f: 0x1951, + 0xb70: 0x0008, 0xb71: 0x0008, 0xb72: 0x1981, 0xb73: 0x19b1, 0xb74: 0x19d9, 0xb75: 0x0040, + 0xb76: 0x0008, 0xb77: 0x1a01, 0xb78: 0xe045, 0xb79: 0xe045, 0xb7a: 0x064d, 0xb7b: 0x1459, + 0xb7c: 0x19b1, 0xb7d: 0x0666, 0xb7e: 0x1a31, 0xb7f: 0x0686, // Block 0x2e, offset 0xb80 - 0xb80: 0x0018, 0xb81: 0x0018, 0xb82: 0x0018, 0xb83: 0x0018, 0xb84: 0x0018, 0xb85: 0x0018, - 0xb86: 0x0018, 0xb87: 0x1e92, 0xb88: 0x1eaa, 0xb89: 0x1ec2, 0xb8a: 0x0018, 0xb8b: 0x0018, - 0xb8c: 0x0018, 0xb8d: 0x0018, 0xb8e: 0x0018, 0xb8f: 0x0018, 0xb90: 0x0018, 0xb91: 0x0018, - 0xb92: 0x0018, 0xb93: 0x0018, 0xb94: 0x0018, 0xb95: 0x0018, 0xb96: 0x0018, 0xb97: 0x1ed9, - 0xb98: 0x0018, 0xb99: 0x0018, 0xb9a: 0x0018, 0xb9b: 0x0018, 0xb9c: 0x0018, 0xb9d: 0x0018, - 0xb9e: 0x0018, 0xb9f: 0x000a, 0xba0: 0x03c0, 0xba1: 0x0340, 0xba2: 0x0340, 0xba3: 0x0340, - 0xba4: 0x03c0, 0xba5: 0x0040, 0xba6: 0x0040, 0xba7: 0x0040, 0xba8: 0x0040, 0xba9: 0x0040, - 0xbaa: 0x0340, 0xbab: 0x0340, 0xbac: 0x0340, 0xbad: 0x0340, 0xbae: 0x0340, 0xbaf: 0x0340, - 0xbb0: 0x1f41, 0xbb1: 0x0f41, 0xbb2: 0x0040, 0xbb3: 0x0040, 0xbb4: 0x1f51, 0xbb5: 0x1f61, - 0xbb6: 0x1f71, 0xbb7: 0x1f81, 0xbb8: 0x1f91, 0xbb9: 0x1fa1, 0xbba: 0x1fb2, 0xbbb: 0x07bd, - 0xbbc: 0x1fc2, 0xbbd: 0x1fd2, 0xbbe: 0x1fe2, 0xbbf: 0x0f71, + 0xb80: 0x06a6, 0xb81: 0x1a4a, 0xb82: 0x1a79, 0xb83: 0x1aa9, 0xb84: 0x1ad1, 0xb85: 0x0040, + 0xb86: 0x0008, 0xb87: 0x1af9, 0xb88: 0x06c5, 0xb89: 0x1471, 0xb8a: 0x06dd, 0xb8b: 0x1489, + 0xb8c: 0x1aa9, 0xb8d: 0x1b2a, 0xb8e: 0x1b5a, 0xb8f: 0x1b8a, 0xb90: 0x0008, 0xb91: 0x0008, + 0xb92: 0x0008, 0xb93: 0x1bb9, 0xb94: 0x0040, 0xb95: 0x0040, 0xb96: 0x0008, 0xb97: 0x0008, + 0xb98: 0xe045, 0xb99: 0xe045, 0xb9a: 0x06f5, 0xb9b: 0x14a1, 0xb9c: 0x0040, 0xb9d: 0x1bd2, + 0xb9e: 0x1c02, 0xb9f: 0x1c32, 0xba0: 0x0008, 0xba1: 0x0008, 0xba2: 0x0008, 0xba3: 0x1c61, + 0xba4: 0x0008, 0xba5: 0x0008, 0xba6: 0x0008, 0xba7: 0x0008, 0xba8: 0xe045, 0xba9: 0xe045, + 0xbaa: 0x070d, 0xbab: 0x14d1, 0xbac: 0xe04d, 0xbad: 0x1c7a, 0xbae: 0x03d2, 0xbaf: 0x1caa, + 0xbb0: 0x0040, 0xbb1: 0x0040, 0xbb2: 0x1cb9, 0xbb3: 0x1ce9, 0xbb4: 0x1d11, 0xbb5: 0x0040, + 0xbb6: 0x0008, 0xbb7: 0x1d39, 0xbb8: 0x0725, 0xbb9: 0x14b9, 0xbba: 0x0515, 0xbbb: 0x14e9, + 0xbbc: 0x1ce9, 0xbbd: 0x073e, 0xbbe: 0x075e, 0xbbf: 0x0040, // Block 0x2f, offset 0xbc0 - 0xbc0: 0x1f41, 0xbc1: 0x00c9, 0xbc2: 0x0069, 0xbc3: 0x0079, 0xbc4: 0x1f51, 0xbc5: 0x1f61, - 0xbc6: 0x1f71, 0xbc7: 0x1f81, 0xbc8: 0x1f91, 0xbc9: 0x1fa1, 0xbca: 0x1fb2, 0xbcb: 0x07d5, - 0xbcc: 0x1fc2, 0xbcd: 0x1fd2, 0xbce: 0x1fe2, 0xbcf: 0x0040, 0xbd0: 0x0039, 0xbd1: 0x0f09, - 0xbd2: 0x00d9, 0xbd3: 0x0369, 0xbd4: 0x0ff9, 0xbd5: 0x0249, 0xbd6: 0x0f51, 0xbd7: 0x0359, - 0xbd8: 0x0f61, 0xbd9: 0x0f71, 0xbda: 0x0f99, 0xbdb: 0x01d9, 0xbdc: 0x0fa9, 0xbdd: 0x0040, - 0xbde: 0x0040, 0xbdf: 0x0040, 0xbe0: 0x0018, 0xbe1: 0x0018, 0xbe2: 0x0018, 0xbe3: 0x0018, - 0xbe4: 0x0018, 0xbe5: 0x0018, 0xbe6: 0x0018, 0xbe7: 0x0018, 0xbe8: 0x1ff1, 0xbe9: 0x0018, - 0xbea: 0x0018, 0xbeb: 0x0018, 0xbec: 0x0018, 0xbed: 0x0018, 0xbee: 0x0018, 0xbef: 0x0018, - 0xbf0: 0x0018, 0xbf1: 0x0018, 0xbf2: 0x0018, 0xbf3: 0x0018, 0xbf4: 0x0018, 0xbf5: 0x0018, - 0xbf6: 0x0018, 0xbf7: 0x0018, 0xbf8: 0x0018, 0xbf9: 0x0018, 0xbfa: 0x0018, 0xbfb: 0x0018, - 0xbfc: 0x0018, 0xbfd: 0x0018, 0xbfe: 0x0018, 0xbff: 0x0040, + 0xbc0: 0x000a, 0xbc1: 0x000a, 0xbc2: 0x000a, 0xbc3: 0x000a, 0xbc4: 0x000a, 0xbc5: 0x000a, + 0xbc6: 0x000a, 0xbc7: 0x000a, 0xbc8: 0x000a, 0xbc9: 0x000a, 0xbca: 0x000a, 0xbcb: 0x03c0, + 0xbcc: 0x0003, 0xbcd: 0x0003, 0xbce: 0x0340, 0xbcf: 0x0b40, 0xbd0: 0x0018, 0xbd1: 0xe00d, + 0xbd2: 0x0018, 0xbd3: 0x0018, 0xbd4: 0x0018, 0xbd5: 0x0018, 0xbd6: 0x0018, 0xbd7: 0x077e, + 0xbd8: 0x0018, 0xbd9: 0x0018, 0xbda: 0x0018, 0xbdb: 0x0018, 0xbdc: 0x0018, 0xbdd: 0x0018, + 0xbde: 0x0018, 0xbdf: 0x0018, 0xbe0: 0x0018, 0xbe1: 0x0018, 0xbe2: 0x0018, 0xbe3: 0x0018, + 0xbe4: 0x0040, 0xbe5: 0x0040, 0xbe6: 0x0040, 0xbe7: 0x0018, 0xbe8: 0x0040, 0xbe9: 0x0040, + 0xbea: 0x0340, 0xbeb: 0x0340, 0xbec: 0x0340, 0xbed: 0x0340, 0xbee: 0x0340, 0xbef: 0x000a, + 0xbf0: 0x0018, 0xbf1: 0x0018, 0xbf2: 0x0018, 0xbf3: 0x1d69, 0xbf4: 0x1da1, 0xbf5: 0x0018, + 0xbf6: 0x1df1, 0xbf7: 0x1e29, 0xbf8: 0x0018, 0xbf9: 0x0018, 0xbfa: 0x0018, 0xbfb: 0x0018, + 0xbfc: 0x1e7a, 0xbfd: 0x0018, 0xbfe: 0x079e, 0xbff: 0x0018, // Block 0x30, offset 0xc00 - 0xc00: 0x07ee, 0xc01: 0x080e, 0xc02: 0x1159, 0xc03: 0x082d, 0xc04: 0x0018, 0xc05: 0x084e, - 0xc06: 0x086e, 0xc07: 0x1011, 0xc08: 0x0018, 0xc09: 0x088d, 0xc0a: 0x0f31, 0xc0b: 0x0249, - 0xc0c: 0x0249, 0xc0d: 0x0249, 0xc0e: 0x0249, 0xc0f: 0x2009, 0xc10: 0x0f41, 0xc11: 0x0f41, - 0xc12: 0x0359, 0xc13: 0x0359, 0xc14: 0x0018, 0xc15: 0x0f71, 0xc16: 0x2021, 0xc17: 0x0018, - 0xc18: 0x0018, 0xc19: 0x0f99, 0xc1a: 0x2039, 0xc1b: 0x0269, 0xc1c: 0x0269, 0xc1d: 0x0269, - 0xc1e: 0x0018, 0xc1f: 0x0018, 0xc20: 0x2049, 0xc21: 0x08ad, 0xc22: 0x2061, 0xc23: 0x0018, - 0xc24: 0x13d1, 0xc25: 0x0018, 0xc26: 0x2079, 0xc27: 0x0018, 0xc28: 0x13d1, 0xc29: 0x0018, - 0xc2a: 0x0f51, 0xc2b: 0x2091, 0xc2c: 0x0ee9, 0xc2d: 0x1159, 0xc2e: 0x0018, 0xc2f: 0x0f09, - 0xc30: 0x0f09, 0xc31: 0x1199, 0xc32: 0x0040, 0xc33: 0x0f61, 0xc34: 0x00d9, 0xc35: 0x20a9, - 0xc36: 0x20c1, 0xc37: 0x20d9, 0xc38: 0x20f1, 0xc39: 0x0f41, 0xc3a: 0x0018, 0xc3b: 0x08cd, - 0xc3c: 0x2109, 0xc3d: 0x10b1, 0xc3e: 0x10b1, 0xc3f: 0x2109, + 0xc00: 0x0018, 0xc01: 0x0018, 0xc02: 0x0018, 0xc03: 0x0018, 0xc04: 0x0018, 0xc05: 0x0018, + 0xc06: 0x0018, 0xc07: 0x1e92, 0xc08: 0x1eaa, 0xc09: 0x1ec2, 0xc0a: 0x0018, 0xc0b: 0x0018, + 0xc0c: 0x0018, 0xc0d: 0x0018, 0xc0e: 0x0018, 0xc0f: 0x0018, 0xc10: 0x0018, 0xc11: 0x0018, + 0xc12: 0x0018, 0xc13: 0x0018, 0xc14: 0x0018, 0xc15: 0x0018, 0xc16: 0x0018, 0xc17: 0x1ed9, + 0xc18: 0x0018, 0xc19: 0x0018, 0xc1a: 0x0018, 0xc1b: 0x0018, 0xc1c: 0x0018, 0xc1d: 0x0018, + 0xc1e: 0x0018, 0xc1f: 0x000a, 0xc20: 0x03c0, 0xc21: 0x0340, 0xc22: 0x0340, 0xc23: 0x0340, + 0xc24: 0x03c0, 0xc25: 0x0040, 0xc26: 0x0040, 0xc27: 0x0040, 0xc28: 0x0040, 0xc29: 0x0040, + 0xc2a: 0x0340, 0xc2b: 0x0340, 0xc2c: 0x0340, 0xc2d: 0x0340, 0xc2e: 0x0340, 0xc2f: 0x0340, + 0xc30: 0x1f41, 0xc31: 0x0f41, 0xc32: 0x0040, 0xc33: 0x0040, 0xc34: 0x1f51, 0xc35: 0x1f61, + 0xc36: 0x1f71, 0xc37: 0x1f81, 0xc38: 0x1f91, 0xc39: 0x1fa1, 0xc3a: 0x1fb2, 0xc3b: 0x07bd, + 0xc3c: 0x1fc2, 0xc3d: 0x1fd2, 0xc3e: 0x1fe2, 0xc3f: 0x0f71, // Block 0x31, offset 0xc40 - 0xc40: 0x08ed, 0xc41: 0x0018, 0xc42: 0x0018, 0xc43: 0x0018, 0xc44: 0x0018, 0xc45: 0x0ef9, - 0xc46: 0x0ef9, 0xc47: 0x0f09, 0xc48: 0x0f41, 0xc49: 0x0259, 0xc4a: 0x0018, 0xc4b: 0x0018, - 0xc4c: 0x0018, 0xc4d: 0x0018, 0xc4e: 0x0008, 0xc4f: 0x0018, 0xc50: 0x2121, 0xc51: 0x2151, - 0xc52: 0x2181, 0xc53: 0x21b9, 0xc54: 0x21e9, 0xc55: 0x2219, 0xc56: 0x2249, 0xc57: 0x2279, - 0xc58: 0x22a9, 0xc59: 0x22d9, 0xc5a: 0x2309, 0xc5b: 0x2339, 0xc5c: 0x2369, 0xc5d: 0x2399, - 0xc5e: 0x23c9, 0xc5f: 0x23f9, 0xc60: 0x0f41, 0xc61: 0x2421, 0xc62: 0x0905, 0xc63: 0x2439, - 0xc64: 0x1089, 0xc65: 0x2451, 0xc66: 0x0925, 0xc67: 0x2469, 0xc68: 0x2491, 0xc69: 0x0369, - 0xc6a: 0x24a9, 0xc6b: 0x0945, 0xc6c: 0x0359, 0xc6d: 0x1159, 0xc6e: 0x0ef9, 0xc6f: 0x0f61, - 0xc70: 0x0f41, 0xc71: 0x2421, 0xc72: 0x0965, 0xc73: 0x2439, 0xc74: 0x1089, 0xc75: 0x2451, - 0xc76: 0x0985, 0xc77: 0x2469, 0xc78: 0x2491, 0xc79: 0x0369, 0xc7a: 0x24a9, 0xc7b: 0x09a5, - 0xc7c: 0x0359, 0xc7d: 0x1159, 0xc7e: 0x0ef9, 0xc7f: 0x0f61, + 0xc40: 0x1f41, 0xc41: 0x00c9, 0xc42: 0x0069, 0xc43: 0x0079, 0xc44: 0x1f51, 0xc45: 0x1f61, + 0xc46: 0x1f71, 0xc47: 0x1f81, 0xc48: 0x1f91, 0xc49: 0x1fa1, 0xc4a: 0x1fb2, 0xc4b: 0x07d5, + 0xc4c: 0x1fc2, 0xc4d: 0x1fd2, 0xc4e: 0x1fe2, 0xc4f: 0x0040, 0xc50: 0x0039, 0xc51: 0x0f09, + 0xc52: 0x00d9, 0xc53: 0x0369, 0xc54: 0x0ff9, 0xc55: 0x0249, 0xc56: 0x0f51, 0xc57: 0x0359, + 0xc58: 0x0f61, 0xc59: 0x0f71, 0xc5a: 0x0f99, 0xc5b: 0x01d9, 0xc5c: 0x0fa9, 0xc5d: 0x0040, + 0xc5e: 0x0040, 0xc5f: 0x0040, 0xc60: 0x0018, 0xc61: 0x0018, 0xc62: 0x0018, 0xc63: 0x0018, + 0xc64: 0x0018, 0xc65: 0x0018, 0xc66: 0x0018, 0xc67: 0x0018, 0xc68: 0x1ff1, 0xc69: 0x0018, + 0xc6a: 0x0018, 0xc6b: 0x0018, 0xc6c: 0x0018, 0xc6d: 0x0018, 0xc6e: 0x0018, 0xc6f: 0x0018, + 0xc70: 0x0018, 0xc71: 0x0018, 0xc72: 0x0018, 0xc73: 0x0018, 0xc74: 0x0018, 0xc75: 0x0018, + 0xc76: 0x0018, 0xc77: 0x0018, 0xc78: 0x0018, 0xc79: 0x0018, 0xc7a: 0x0018, 0xc7b: 0x0018, + 0xc7c: 0x0018, 0xc7d: 0x0018, 0xc7e: 0x0018, 0xc7f: 0x0018, // Block 0x32, offset 0xc80 - 0xc80: 0x0018, 0xc81: 0x0018, 0xc82: 0x0018, 0xc83: 0x0018, 0xc84: 0x0018, 0xc85: 0x0018, - 0xc86: 0x0018, 0xc87: 0x0018, 0xc88: 0x0018, 0xc89: 0x0018, 0xc8a: 0x0018, 0xc8b: 0x0040, - 0xc8c: 0x0040, 0xc8d: 0x0040, 0xc8e: 0x0040, 0xc8f: 0x0040, 0xc90: 0x0040, 0xc91: 0x0040, - 0xc92: 0x0040, 0xc93: 0x0040, 0xc94: 0x0040, 0xc95: 0x0040, 0xc96: 0x0040, 0xc97: 0x0040, - 0xc98: 0x0040, 0xc99: 0x0040, 0xc9a: 0x0040, 0xc9b: 0x0040, 0xc9c: 0x0040, 0xc9d: 0x0040, - 0xc9e: 0x0040, 0xc9f: 0x0040, 0xca0: 0x00c9, 0xca1: 0x0069, 0xca2: 0x0079, 0xca3: 0x1f51, - 0xca4: 0x1f61, 0xca5: 0x1f71, 0xca6: 0x1f81, 0xca7: 0x1f91, 0xca8: 0x1fa1, 0xca9: 0x2601, - 0xcaa: 0x2619, 0xcab: 0x2631, 0xcac: 0x2649, 0xcad: 0x2661, 0xcae: 0x2679, 0xcaf: 0x2691, - 0xcb0: 0x26a9, 0xcb1: 0x26c1, 0xcb2: 0x26d9, 0xcb3: 0x26f1, 0xcb4: 0x0a06, 0xcb5: 0x0a26, - 0xcb6: 0x0a46, 0xcb7: 0x0a66, 0xcb8: 0x0a86, 0xcb9: 0x0aa6, 0xcba: 0x0ac6, 0xcbb: 0x0ae6, - 0xcbc: 0x0b06, 0xcbd: 0x270a, 0xcbe: 0x2732, 0xcbf: 0x275a, + 0xc80: 0x07ee, 0xc81: 0x080e, 0xc82: 0x1159, 0xc83: 0x082d, 0xc84: 0x0018, 0xc85: 0x084e, + 0xc86: 0x086e, 0xc87: 0x1011, 0xc88: 0x0018, 0xc89: 0x088d, 0xc8a: 0x0f31, 0xc8b: 0x0249, + 0xc8c: 0x0249, 0xc8d: 0x0249, 0xc8e: 0x0249, 0xc8f: 0x2009, 0xc90: 0x0f41, 0xc91: 0x0f41, + 0xc92: 0x0359, 0xc93: 0x0359, 0xc94: 0x0018, 0xc95: 0x0f71, 0xc96: 0x2021, 0xc97: 0x0018, + 0xc98: 0x0018, 0xc99: 0x0f99, 0xc9a: 0x2039, 0xc9b: 0x0269, 0xc9c: 0x0269, 0xc9d: 0x0269, + 0xc9e: 0x0018, 0xc9f: 0x0018, 0xca0: 0x2049, 0xca1: 0x08ad, 0xca2: 0x2061, 0xca3: 0x0018, + 0xca4: 0x13d1, 0xca5: 0x0018, 0xca6: 0x2079, 0xca7: 0x0018, 0xca8: 0x13d1, 0xca9: 0x0018, + 0xcaa: 0x0f51, 0xcab: 0x2091, 0xcac: 0x0ee9, 0xcad: 0x1159, 0xcae: 0x0018, 0xcaf: 0x0f09, + 0xcb0: 0x0f09, 0xcb1: 0x1199, 0xcb2: 0x0040, 0xcb3: 0x0f61, 0xcb4: 0x00d9, 0xcb5: 0x20a9, + 0xcb6: 0x20c1, 0xcb7: 0x20d9, 0xcb8: 0x20f1, 0xcb9: 0x0f41, 0xcba: 0x0018, 0xcbb: 0x08cd, + 0xcbc: 0x2109, 0xcbd: 0x10b1, 0xcbe: 0x10b1, 0xcbf: 0x2109, // Block 0x33, offset 0xcc0 - 0xcc0: 0x2782, 0xcc1: 0x27aa, 0xcc2: 0x27d2, 0xcc3: 0x27fa, 0xcc4: 0x2822, 0xcc5: 0x284a, - 0xcc6: 0x2872, 0xcc7: 0x289a, 0xcc8: 0x0040, 0xcc9: 0x0040, 0xcca: 0x0040, 0xccb: 0x0040, - 0xccc: 0x0040, 0xccd: 0x0040, 0xcce: 0x0040, 0xccf: 0x0040, 0xcd0: 0x0040, 0xcd1: 0x0040, - 0xcd2: 0x0040, 0xcd3: 0x0040, 0xcd4: 0x0040, 0xcd5: 0x0040, 0xcd6: 0x0040, 0xcd7: 0x0040, - 0xcd8: 0x0040, 0xcd9: 0x0040, 0xcda: 0x0040, 0xcdb: 0x0040, 0xcdc: 0x0b26, 0xcdd: 0x0b46, - 0xcde: 0x0b66, 0xcdf: 0x0b86, 0xce0: 0x0ba6, 0xce1: 0x0bc6, 0xce2: 0x0be6, 0xce3: 0x0c06, - 0xce4: 0x0c26, 0xce5: 0x0c46, 0xce6: 0x0c66, 0xce7: 0x0c86, 0xce8: 0x0ca6, 0xce9: 0x0cc6, - 0xcea: 0x0ce6, 0xceb: 0x0d06, 0xcec: 0x0d26, 0xced: 0x0d46, 0xcee: 0x0d66, 0xcef: 0x0d86, - 0xcf0: 0x0da6, 0xcf1: 0x0dc6, 0xcf2: 0x0de6, 0xcf3: 0x0e06, 0xcf4: 0x0e26, 0xcf5: 0x0e46, - 0xcf6: 0x0039, 0xcf7: 0x0ee9, 0xcf8: 0x1159, 0xcf9: 0x0ef9, 0xcfa: 0x0f09, 0xcfb: 0x1199, - 0xcfc: 0x0f31, 0xcfd: 0x0249, 0xcfe: 0x0f41, 0xcff: 0x0259, + 0xcc0: 0x08ed, 0xcc1: 0x0018, 0xcc2: 0x0018, 0xcc3: 0x0018, 0xcc4: 0x0018, 0xcc5: 0x0ef9, + 0xcc6: 0x0ef9, 0xcc7: 0x0f09, 0xcc8: 0x0f41, 0xcc9: 0x0259, 0xcca: 0x0018, 0xccb: 0x0018, + 0xccc: 0x0018, 0xccd: 0x0018, 0xcce: 0x0008, 0xccf: 0x0018, 0xcd0: 0x2121, 0xcd1: 0x2151, + 0xcd2: 0x2181, 0xcd3: 0x21b9, 0xcd4: 0x21e9, 0xcd5: 0x2219, 0xcd6: 0x2249, 0xcd7: 0x2279, + 0xcd8: 0x22a9, 0xcd9: 0x22d9, 0xcda: 0x2309, 0xcdb: 0x2339, 0xcdc: 0x2369, 0xcdd: 0x2399, + 0xcde: 0x23c9, 0xcdf: 0x23f9, 0xce0: 0x0f41, 0xce1: 0x2421, 0xce2: 0x0905, 0xce3: 0x2439, + 0xce4: 0x1089, 0xce5: 0x2451, 0xce6: 0x0925, 0xce7: 0x2469, 0xce8: 0x2491, 0xce9: 0x0369, + 0xcea: 0x24a9, 0xceb: 0x0945, 0xcec: 0x0359, 0xced: 0x1159, 0xcee: 0x0ef9, 0xcef: 0x0f61, + 0xcf0: 0x0f41, 0xcf1: 0x2421, 0xcf2: 0x0965, 0xcf3: 0x2439, 0xcf4: 0x1089, 0xcf5: 0x2451, + 0xcf6: 0x0985, 0xcf7: 0x2469, 0xcf8: 0x2491, 0xcf9: 0x0369, 0xcfa: 0x24a9, 0xcfb: 0x09a5, + 0xcfc: 0x0359, 0xcfd: 0x1159, 0xcfe: 0x0ef9, 0xcff: 0x0f61, // Block 0x34, offset 0xd00 - 0xd00: 0x0f51, 0xd01: 0x0359, 0xd02: 0x0f61, 0xd03: 0x0f71, 0xd04: 0x00d9, 0xd05: 0x0f99, - 0xd06: 0x2039, 0xd07: 0x0269, 0xd08: 0x01d9, 0xd09: 0x0fa9, 0xd0a: 0x0fb9, 0xd0b: 0x1089, - 0xd0c: 0x0279, 0xd0d: 0x0369, 0xd0e: 0x0289, 0xd0f: 0x13d1, 0xd10: 0x0039, 0xd11: 0x0ee9, - 0xd12: 0x1159, 0xd13: 0x0ef9, 0xd14: 0x0f09, 0xd15: 0x1199, 0xd16: 0x0f31, 0xd17: 0x0249, - 0xd18: 0x0f41, 0xd19: 0x0259, 0xd1a: 0x0f51, 0xd1b: 0x0359, 0xd1c: 0x0f61, 0xd1d: 0x0f71, - 0xd1e: 0x00d9, 0xd1f: 0x0f99, 0xd20: 0x2039, 0xd21: 0x0269, 0xd22: 0x01d9, 0xd23: 0x0fa9, - 0xd24: 0x0fb9, 0xd25: 0x1089, 0xd26: 0x0279, 0xd27: 0x0369, 0xd28: 0x0289, 0xd29: 0x13d1, - 0xd2a: 0x1f41, 0xd2b: 0x0018, 0xd2c: 0x0018, 0xd2d: 0x0018, 0xd2e: 0x0018, 0xd2f: 0x0018, - 0xd30: 0x0018, 0xd31: 0x0018, 0xd32: 0x0018, 0xd33: 0x0018, 0xd34: 0x0018, 0xd35: 0x0018, - 0xd36: 0x0018, 0xd37: 0x0018, 0xd38: 0x0018, 0xd39: 0x0018, 0xd3a: 0x0018, 0xd3b: 0x0018, - 0xd3c: 0x0018, 0xd3d: 0x0018, 0xd3e: 0x0018, 0xd3f: 0x0018, + 0xd00: 0x0018, 0xd01: 0x0018, 0xd02: 0x0018, 0xd03: 0x0018, 0xd04: 0x0018, 0xd05: 0x0018, + 0xd06: 0x0018, 0xd07: 0x0018, 0xd08: 0x0018, 0xd09: 0x0018, 0xd0a: 0x0018, 0xd0b: 0x0040, + 0xd0c: 0x0040, 0xd0d: 0x0040, 0xd0e: 0x0040, 0xd0f: 0x0040, 0xd10: 0x0040, 0xd11: 0x0040, + 0xd12: 0x0040, 0xd13: 0x0040, 0xd14: 0x0040, 0xd15: 0x0040, 0xd16: 0x0040, 0xd17: 0x0040, + 0xd18: 0x0040, 0xd19: 0x0040, 0xd1a: 0x0040, 0xd1b: 0x0040, 0xd1c: 0x0040, 0xd1d: 0x0040, + 0xd1e: 0x0040, 0xd1f: 0x0040, 0xd20: 0x00c9, 0xd21: 0x0069, 0xd22: 0x0079, 0xd23: 0x1f51, + 0xd24: 0x1f61, 0xd25: 0x1f71, 0xd26: 0x1f81, 0xd27: 0x1f91, 0xd28: 0x1fa1, 0xd29: 0x2601, + 0xd2a: 0x2619, 0xd2b: 0x2631, 0xd2c: 0x2649, 0xd2d: 0x2661, 0xd2e: 0x2679, 0xd2f: 0x2691, + 0xd30: 0x26a9, 0xd31: 0x26c1, 0xd32: 0x26d9, 0xd33: 0x26f1, 0xd34: 0x0a06, 0xd35: 0x0a26, + 0xd36: 0x0a46, 0xd37: 0x0a66, 0xd38: 0x0a86, 0xd39: 0x0aa6, 0xd3a: 0x0ac6, 0xd3b: 0x0ae6, + 0xd3c: 0x0b06, 0xd3d: 0x270a, 0xd3e: 0x2732, 0xd3f: 0x275a, // Block 0x35, offset 0xd40 - 0xd40: 0x0008, 0xd41: 0x0008, 0xd42: 0x0008, 0xd43: 0x0008, 0xd44: 0x0008, 0xd45: 0x0008, - 0xd46: 0x0008, 0xd47: 0x0008, 0xd48: 0x0008, 0xd49: 0x0008, 0xd4a: 0x0008, 0xd4b: 0x0008, - 0xd4c: 0x0008, 0xd4d: 0x0008, 0xd4e: 0x0008, 0xd4f: 0x0008, 0xd50: 0x0008, 0xd51: 0x0008, - 0xd52: 0x0008, 0xd53: 0x0008, 0xd54: 0x0008, 0xd55: 0x0008, 0xd56: 0x0008, 0xd57: 0x0008, - 0xd58: 0x0008, 0xd59: 0x0008, 0xd5a: 0x0008, 0xd5b: 0x0008, 0xd5c: 0x0008, 0xd5d: 0x0008, - 0xd5e: 0x0008, 0xd5f: 0x0040, 0xd60: 0xe00d, 0xd61: 0x0008, 0xd62: 0x2971, 0xd63: 0x0ebd, - 0xd64: 0x2989, 0xd65: 0x0008, 0xd66: 0x0008, 0xd67: 0xe07d, 0xd68: 0x0008, 0xd69: 0xe01d, - 0xd6a: 0x0008, 0xd6b: 0xe03d, 0xd6c: 0x0008, 0xd6d: 0x0fe1, 0xd6e: 0x1281, 0xd6f: 0x0fc9, - 0xd70: 0x1141, 0xd71: 0x0008, 0xd72: 0xe00d, 0xd73: 0x0008, 0xd74: 0x0008, 0xd75: 0xe01d, - 0xd76: 0x0008, 0xd77: 0x0008, 0xd78: 0x0008, 0xd79: 0x0008, 0xd7a: 0x0008, 0xd7b: 0x0008, - 0xd7c: 0x0259, 0xd7d: 0x1089, 0xd7e: 0x29a1, 0xd7f: 0x29b9, + 0xd40: 0x2782, 0xd41: 0x27aa, 0xd42: 0x27d2, 0xd43: 0x27fa, 0xd44: 0x2822, 0xd45: 0x284a, + 0xd46: 0x2872, 0xd47: 0x289a, 0xd48: 0x0040, 0xd49: 0x0040, 0xd4a: 0x0040, 0xd4b: 0x0040, + 0xd4c: 0x0040, 0xd4d: 0x0040, 0xd4e: 0x0040, 0xd4f: 0x0040, 0xd50: 0x0040, 0xd51: 0x0040, + 0xd52: 0x0040, 0xd53: 0x0040, 0xd54: 0x0040, 0xd55: 0x0040, 0xd56: 0x0040, 0xd57: 0x0040, + 0xd58: 0x0040, 0xd59: 0x0040, 0xd5a: 0x0040, 0xd5b: 0x0040, 0xd5c: 0x0b26, 0xd5d: 0x0b46, + 0xd5e: 0x0b66, 0xd5f: 0x0b86, 0xd60: 0x0ba6, 0xd61: 0x0bc6, 0xd62: 0x0be6, 0xd63: 0x0c06, + 0xd64: 0x0c26, 0xd65: 0x0c46, 0xd66: 0x0c66, 0xd67: 0x0c86, 0xd68: 0x0ca6, 0xd69: 0x0cc6, + 0xd6a: 0x0ce6, 0xd6b: 0x0d06, 0xd6c: 0x0d26, 0xd6d: 0x0d46, 0xd6e: 0x0d66, 0xd6f: 0x0d86, + 0xd70: 0x0da6, 0xd71: 0x0dc6, 0xd72: 0x0de6, 0xd73: 0x0e06, 0xd74: 0x0e26, 0xd75: 0x0e46, + 0xd76: 0x0039, 0xd77: 0x0ee9, 0xd78: 0x1159, 0xd79: 0x0ef9, 0xd7a: 0x0f09, 0xd7b: 0x1199, + 0xd7c: 0x0f31, 0xd7d: 0x0249, 0xd7e: 0x0f41, 0xd7f: 0x0259, // Block 0x36, offset 0xd80 - 0xd80: 0xe00d, 0xd81: 0x0008, 0xd82: 0xe00d, 0xd83: 0x0008, 0xd84: 0xe00d, 0xd85: 0x0008, - 0xd86: 0xe00d, 0xd87: 0x0008, 0xd88: 0xe00d, 0xd89: 0x0008, 0xd8a: 0xe00d, 0xd8b: 0x0008, - 0xd8c: 0xe00d, 0xd8d: 0x0008, 0xd8e: 0xe00d, 0xd8f: 0x0008, 0xd90: 0xe00d, 0xd91: 0x0008, - 0xd92: 0xe00d, 0xd93: 0x0008, 0xd94: 0xe00d, 0xd95: 0x0008, 0xd96: 0xe00d, 0xd97: 0x0008, - 0xd98: 0xe00d, 0xd99: 0x0008, 0xd9a: 0xe00d, 0xd9b: 0x0008, 0xd9c: 0xe00d, 0xd9d: 0x0008, - 0xd9e: 0xe00d, 0xd9f: 0x0008, 0xda0: 0xe00d, 0xda1: 0x0008, 0xda2: 0xe00d, 0xda3: 0x0008, - 0xda4: 0x0008, 0xda5: 0x0018, 0xda6: 0x0018, 0xda7: 0x0018, 0xda8: 0x0018, 0xda9: 0x0018, - 0xdaa: 0x0018, 0xdab: 0xe03d, 0xdac: 0x0008, 0xdad: 0xe01d, 0xdae: 0x0008, 0xdaf: 0x1308, - 0xdb0: 0x1308, 0xdb1: 0x1308, 0xdb2: 0xe00d, 0xdb3: 0x0008, 0xdb4: 0x0040, 0xdb5: 0x0040, - 0xdb6: 0x0040, 0xdb7: 0x0040, 0xdb8: 0x0040, 0xdb9: 0x0018, 0xdba: 0x0018, 0xdbb: 0x0018, + 0xd80: 0x0f51, 0xd81: 0x0359, 0xd82: 0x0f61, 0xd83: 0x0f71, 0xd84: 0x00d9, 0xd85: 0x0f99, + 0xd86: 0x2039, 0xd87: 0x0269, 0xd88: 0x01d9, 0xd89: 0x0fa9, 0xd8a: 0x0fb9, 0xd8b: 0x1089, + 0xd8c: 0x0279, 0xd8d: 0x0369, 0xd8e: 0x0289, 0xd8f: 0x13d1, 0xd90: 0x0039, 0xd91: 0x0ee9, + 0xd92: 0x1159, 0xd93: 0x0ef9, 0xd94: 0x0f09, 0xd95: 0x1199, 0xd96: 0x0f31, 0xd97: 0x0249, + 0xd98: 0x0f41, 0xd99: 0x0259, 0xd9a: 0x0f51, 0xd9b: 0x0359, 0xd9c: 0x0f61, 0xd9d: 0x0f71, + 0xd9e: 0x00d9, 0xd9f: 0x0f99, 0xda0: 0x2039, 0xda1: 0x0269, 0xda2: 0x01d9, 0xda3: 0x0fa9, + 0xda4: 0x0fb9, 0xda5: 0x1089, 0xda6: 0x0279, 0xda7: 0x0369, 0xda8: 0x0289, 0xda9: 0x13d1, + 0xdaa: 0x1f41, 0xdab: 0x0018, 0xdac: 0x0018, 0xdad: 0x0018, 0xdae: 0x0018, 0xdaf: 0x0018, + 0xdb0: 0x0018, 0xdb1: 0x0018, 0xdb2: 0x0018, 0xdb3: 0x0018, 0xdb4: 0x0018, 0xdb5: 0x0018, + 0xdb6: 0x0018, 0xdb7: 0x0018, 0xdb8: 0x0018, 0xdb9: 0x0018, 0xdba: 0x0018, 0xdbb: 0x0018, 0xdbc: 0x0018, 0xdbd: 0x0018, 0xdbe: 0x0018, 0xdbf: 0x0018, // Block 0x37, offset 0xdc0 - 0xdc0: 0x26fd, 0xdc1: 0x271d, 0xdc2: 0x273d, 0xdc3: 0x275d, 0xdc4: 0x277d, 0xdc5: 0x279d, - 0xdc6: 0x27bd, 0xdc7: 0x27dd, 0xdc8: 0x27fd, 0xdc9: 0x281d, 0xdca: 0x283d, 0xdcb: 0x285d, - 0xdcc: 0x287d, 0xdcd: 0x289d, 0xdce: 0x28bd, 0xdcf: 0x28dd, 0xdd0: 0x28fd, 0xdd1: 0x291d, - 0xdd2: 0x293d, 0xdd3: 0x295d, 0xdd4: 0x297d, 0xdd5: 0x299d, 0xdd6: 0x0040, 0xdd7: 0x0040, - 0xdd8: 0x0040, 0xdd9: 0x0040, 0xdda: 0x0040, 0xddb: 0x0040, 0xddc: 0x0040, 0xddd: 0x0040, - 0xdde: 0x0040, 0xddf: 0x0040, 0xde0: 0x0040, 0xde1: 0x0040, 0xde2: 0x0040, 0xde3: 0x0040, - 0xde4: 0x0040, 0xde5: 0x0040, 0xde6: 0x0040, 0xde7: 0x0040, 0xde8: 0x0040, 0xde9: 0x0040, - 0xdea: 0x0040, 0xdeb: 0x0040, 0xdec: 0x0040, 0xded: 0x0040, 0xdee: 0x0040, 0xdef: 0x0040, - 0xdf0: 0x0040, 0xdf1: 0x0040, 0xdf2: 0x0040, 0xdf3: 0x0040, 0xdf4: 0x0040, 0xdf5: 0x0040, - 0xdf6: 0x0040, 0xdf7: 0x0040, 0xdf8: 0x0040, 0xdf9: 0x0040, 0xdfa: 0x0040, 0xdfb: 0x0040, - 0xdfc: 0x0040, 0xdfd: 0x0040, 0xdfe: 0x0040, 0xdff: 0x0040, + 0xdc0: 0x0008, 0xdc1: 0x0008, 0xdc2: 0x0008, 0xdc3: 0x0008, 0xdc4: 0x0008, 0xdc5: 0x0008, + 0xdc6: 0x0008, 0xdc7: 0x0008, 0xdc8: 0x0008, 0xdc9: 0x0008, 0xdca: 0x0008, 0xdcb: 0x0008, + 0xdcc: 0x0008, 0xdcd: 0x0008, 0xdce: 0x0008, 0xdcf: 0x0008, 0xdd0: 0x0008, 0xdd1: 0x0008, + 0xdd2: 0x0008, 0xdd3: 0x0008, 0xdd4: 0x0008, 0xdd5: 0x0008, 0xdd6: 0x0008, 0xdd7: 0x0008, + 0xdd8: 0x0008, 0xdd9: 0x0008, 0xdda: 0x0008, 0xddb: 0x0008, 0xddc: 0x0008, 0xddd: 0x0008, + 0xdde: 0x0008, 0xddf: 0x0040, 0xde0: 0xe00d, 0xde1: 0x0008, 0xde2: 0x2971, 0xde3: 0x0ebd, + 0xde4: 0x2989, 0xde5: 0x0008, 0xde6: 0x0008, 0xde7: 0xe07d, 0xde8: 0x0008, 0xde9: 0xe01d, + 0xdea: 0x0008, 0xdeb: 0xe03d, 0xdec: 0x0008, 0xded: 0x0fe1, 0xdee: 0x1281, 0xdef: 0x0fc9, + 0xdf0: 0x1141, 0xdf1: 0x0008, 0xdf2: 0xe00d, 0xdf3: 0x0008, 0xdf4: 0x0008, 0xdf5: 0xe01d, + 0xdf6: 0x0008, 0xdf7: 0x0008, 0xdf8: 0x0008, 0xdf9: 0x0008, 0xdfa: 0x0008, 0xdfb: 0x0008, + 0xdfc: 0x0259, 0xdfd: 0x1089, 0xdfe: 0x29a1, 0xdff: 0x29b9, // Block 0x38, offset 0xe00 - 0xe00: 0x000a, 0xe01: 0x0018, 0xe02: 0x29d1, 0xe03: 0x0018, 0xe04: 0x0018, 0xe05: 0x0008, - 0xe06: 0x0008, 0xe07: 0x0008, 0xe08: 0x0018, 0xe09: 0x0018, 0xe0a: 0x0018, 0xe0b: 0x0018, - 0xe0c: 0x0018, 0xe0d: 0x0018, 0xe0e: 0x0018, 0xe0f: 0x0018, 0xe10: 0x0018, 0xe11: 0x0018, - 0xe12: 0x0018, 0xe13: 0x0018, 0xe14: 0x0018, 0xe15: 0x0018, 0xe16: 0x0018, 0xe17: 0x0018, - 0xe18: 0x0018, 0xe19: 0x0018, 0xe1a: 0x0018, 0xe1b: 0x0018, 0xe1c: 0x0018, 0xe1d: 0x0018, - 0xe1e: 0x0018, 0xe1f: 0x0018, 0xe20: 0x0018, 0xe21: 0x0018, 0xe22: 0x0018, 0xe23: 0x0018, - 0xe24: 0x0018, 0xe25: 0x0018, 0xe26: 0x0018, 0xe27: 0x0018, 0xe28: 0x0018, 0xe29: 0x0018, - 0xe2a: 0x1308, 0xe2b: 0x1308, 0xe2c: 0x1308, 0xe2d: 0x1308, 0xe2e: 0x1018, 0xe2f: 0x1018, - 0xe30: 0x0018, 0xe31: 0x0018, 0xe32: 0x0018, 0xe33: 0x0018, 0xe34: 0x0018, 0xe35: 0x0018, - 0xe36: 0xe125, 0xe37: 0x0018, 0xe38: 0x29bd, 0xe39: 0x29dd, 0xe3a: 0x29fd, 0xe3b: 0x0018, - 0xe3c: 0x0008, 0xe3d: 0x0018, 0xe3e: 0x0018, 0xe3f: 0x0018, + 0xe00: 0xe00d, 0xe01: 0x0008, 0xe02: 0xe00d, 0xe03: 0x0008, 0xe04: 0xe00d, 0xe05: 0x0008, + 0xe06: 0xe00d, 0xe07: 0x0008, 0xe08: 0xe00d, 0xe09: 0x0008, 0xe0a: 0xe00d, 0xe0b: 0x0008, + 0xe0c: 0xe00d, 0xe0d: 0x0008, 0xe0e: 0xe00d, 0xe0f: 0x0008, 0xe10: 0xe00d, 0xe11: 0x0008, + 0xe12: 0xe00d, 0xe13: 0x0008, 0xe14: 0xe00d, 0xe15: 0x0008, 0xe16: 0xe00d, 0xe17: 0x0008, + 0xe18: 0xe00d, 0xe19: 0x0008, 0xe1a: 0xe00d, 0xe1b: 0x0008, 0xe1c: 0xe00d, 0xe1d: 0x0008, + 0xe1e: 0xe00d, 0xe1f: 0x0008, 0xe20: 0xe00d, 0xe21: 0x0008, 0xe22: 0xe00d, 0xe23: 0x0008, + 0xe24: 0x0008, 0xe25: 0x0018, 0xe26: 0x0018, 0xe27: 0x0018, 0xe28: 0x0018, 0xe29: 0x0018, + 0xe2a: 0x0018, 0xe2b: 0xe03d, 0xe2c: 0x0008, 0xe2d: 0xe01d, 0xe2e: 0x0008, 0xe2f: 0x3308, + 0xe30: 0x3308, 0xe31: 0x3308, 0xe32: 0xe00d, 0xe33: 0x0008, 0xe34: 0x0040, 0xe35: 0x0040, + 0xe36: 0x0040, 0xe37: 0x0040, 0xe38: 0x0040, 0xe39: 0x0018, 0xe3a: 0x0018, 0xe3b: 0x0018, + 0xe3c: 0x0018, 0xe3d: 0x0018, 0xe3e: 0x0018, 0xe3f: 0x0018, // Block 0x39, offset 0xe40 - 0xe40: 0x2b3d, 0xe41: 0x2b5d, 0xe42: 0x2b7d, 0xe43: 0x2b9d, 0xe44: 0x2bbd, 0xe45: 0x2bdd, - 0xe46: 0x2bdd, 0xe47: 0x2bdd, 0xe48: 0x2bfd, 0xe49: 0x2bfd, 0xe4a: 0x2bfd, 0xe4b: 0x2bfd, - 0xe4c: 0x2c1d, 0xe4d: 0x2c1d, 0xe4e: 0x2c1d, 0xe4f: 0x2c3d, 0xe50: 0x2c5d, 0xe51: 0x2c5d, - 0xe52: 0x2a7d, 0xe53: 0x2a7d, 0xe54: 0x2c5d, 0xe55: 0x2c5d, 0xe56: 0x2c7d, 0xe57: 0x2c7d, - 0xe58: 0x2c5d, 0xe59: 0x2c5d, 0xe5a: 0x2a7d, 0xe5b: 0x2a7d, 0xe5c: 0x2c5d, 0xe5d: 0x2c5d, - 0xe5e: 0x2c3d, 0xe5f: 0x2c3d, 0xe60: 0x2c9d, 0xe61: 0x2c9d, 0xe62: 0x2cbd, 0xe63: 0x2cbd, - 0xe64: 0x0040, 0xe65: 0x2cdd, 0xe66: 0x2cfd, 0xe67: 0x2d1d, 0xe68: 0x2d1d, 0xe69: 0x2d3d, - 0xe6a: 0x2d5d, 0xe6b: 0x2d7d, 0xe6c: 0x2d9d, 0xe6d: 0x2dbd, 0xe6e: 0x2ddd, 0xe6f: 0x2dfd, - 0xe70: 0x2e1d, 0xe71: 0x2e3d, 0xe72: 0x2e3d, 0xe73: 0x2e5d, 0xe74: 0x2e7d, 0xe75: 0x2e7d, - 0xe76: 0x2e9d, 0xe77: 0x2ebd, 0xe78: 0x2e5d, 0xe79: 0x2edd, 0xe7a: 0x2efd, 0xe7b: 0x2edd, - 0xe7c: 0x2e5d, 0xe7d: 0x2f1d, 0xe7e: 0x2f3d, 0xe7f: 0x2f5d, + 0xe40: 0x26fd, 0xe41: 0x271d, 0xe42: 0x273d, 0xe43: 0x275d, 0xe44: 0x277d, 0xe45: 0x279d, + 0xe46: 0x27bd, 0xe47: 0x27dd, 0xe48: 0x27fd, 0xe49: 0x281d, 0xe4a: 0x283d, 0xe4b: 0x285d, + 0xe4c: 0x287d, 0xe4d: 0x289d, 0xe4e: 0x28bd, 0xe4f: 0x28dd, 0xe50: 0x28fd, 0xe51: 0x291d, + 0xe52: 0x293d, 0xe53: 0x295d, 0xe54: 0x297d, 0xe55: 0x299d, 0xe56: 0x0040, 0xe57: 0x0040, + 0xe58: 0x0040, 0xe59: 0x0040, 0xe5a: 0x0040, 0xe5b: 0x0040, 0xe5c: 0x0040, 0xe5d: 0x0040, + 0xe5e: 0x0040, 0xe5f: 0x0040, 0xe60: 0x0040, 0xe61: 0x0040, 0xe62: 0x0040, 0xe63: 0x0040, + 0xe64: 0x0040, 0xe65: 0x0040, 0xe66: 0x0040, 0xe67: 0x0040, 0xe68: 0x0040, 0xe69: 0x0040, + 0xe6a: 0x0040, 0xe6b: 0x0040, 0xe6c: 0x0040, 0xe6d: 0x0040, 0xe6e: 0x0040, 0xe6f: 0x0040, + 0xe70: 0x0040, 0xe71: 0x0040, 0xe72: 0x0040, 0xe73: 0x0040, 0xe74: 0x0040, 0xe75: 0x0040, + 0xe76: 0x0040, 0xe77: 0x0040, 0xe78: 0x0040, 0xe79: 0x0040, 0xe7a: 0x0040, 0xe7b: 0x0040, + 0xe7c: 0x0040, 0xe7d: 0x0040, 0xe7e: 0x0040, 0xe7f: 0x0040, // Block 0x3a, offset 0xe80 - 0xe80: 0x2f7d, 0xe81: 0x2f9d, 0xe82: 0x2cfd, 0xe83: 0x2cdd, 0xe84: 0x2fbd, 0xe85: 0x2fdd, - 0xe86: 0x2ffd, 0xe87: 0x301d, 0xe88: 0x303d, 0xe89: 0x305d, 0xe8a: 0x307d, 0xe8b: 0x309d, - 0xe8c: 0x30bd, 0xe8d: 0x30dd, 0xe8e: 0x30fd, 0xe8f: 0x0040, 0xe90: 0x0018, 0xe91: 0x0018, - 0xe92: 0x311d, 0xe93: 0x313d, 0xe94: 0x315d, 0xe95: 0x317d, 0xe96: 0x319d, 0xe97: 0x31bd, - 0xe98: 0x31dd, 0xe99: 0x31fd, 0xe9a: 0x321d, 0xe9b: 0x323d, 0xe9c: 0x315d, 0xe9d: 0x325d, - 0xe9e: 0x327d, 0xe9f: 0x329d, 0xea0: 0x0008, 0xea1: 0x0008, 0xea2: 0x0008, 0xea3: 0x0008, - 0xea4: 0x0008, 0xea5: 0x0008, 0xea6: 0x0008, 0xea7: 0x0008, 0xea8: 0x0008, 0xea9: 0x0008, - 0xeaa: 0x0008, 0xeab: 0x0008, 0xeac: 0x0008, 0xead: 0x0008, 0xeae: 0x0008, 0xeaf: 0x0008, - 0xeb0: 0x0008, 0xeb1: 0x0008, 0xeb2: 0x0008, 0xeb3: 0x0008, 0xeb4: 0x0008, 0xeb5: 0x0008, - 0xeb6: 0x0008, 0xeb7: 0x0008, 0xeb8: 0x0008, 0xeb9: 0x0008, 0xeba: 0x0008, 0xebb: 0x0040, - 0xebc: 0x0040, 0xebd: 0x0040, 0xebe: 0x0040, 0xebf: 0x0040, + 0xe80: 0x000a, 0xe81: 0x0018, 0xe82: 0x29d1, 0xe83: 0x0018, 0xe84: 0x0018, 0xe85: 0x0008, + 0xe86: 0x0008, 0xe87: 0x0008, 0xe88: 0x0018, 0xe89: 0x0018, 0xe8a: 0x0018, 0xe8b: 0x0018, + 0xe8c: 0x0018, 0xe8d: 0x0018, 0xe8e: 0x0018, 0xe8f: 0x0018, 0xe90: 0x0018, 0xe91: 0x0018, + 0xe92: 0x0018, 0xe93: 0x0018, 0xe94: 0x0018, 0xe95: 0x0018, 0xe96: 0x0018, 0xe97: 0x0018, + 0xe98: 0x0018, 0xe99: 0x0018, 0xe9a: 0x0018, 0xe9b: 0x0018, 0xe9c: 0x0018, 0xe9d: 0x0018, + 0xe9e: 0x0018, 0xe9f: 0x0018, 0xea0: 0x0018, 0xea1: 0x0018, 0xea2: 0x0018, 0xea3: 0x0018, + 0xea4: 0x0018, 0xea5: 0x0018, 0xea6: 0x0018, 0xea7: 0x0018, 0xea8: 0x0018, 0xea9: 0x0018, + 0xeaa: 0x3308, 0xeab: 0x3308, 0xeac: 0x3308, 0xead: 0x3308, 0xeae: 0x3018, 0xeaf: 0x3018, + 0xeb0: 0x0018, 0xeb1: 0x0018, 0xeb2: 0x0018, 0xeb3: 0x0018, 0xeb4: 0x0018, 0xeb5: 0x0018, + 0xeb6: 0xe125, 0xeb7: 0x0018, 0xeb8: 0x29bd, 0xeb9: 0x29dd, 0xeba: 0x29fd, 0xebb: 0x0018, + 0xebc: 0x0008, 0xebd: 0x0018, 0xebe: 0x0018, 0xebf: 0x0018, // Block 0x3b, offset 0xec0 - 0xec0: 0x36a2, 0xec1: 0x36d2, 0xec2: 0x3702, 0xec3: 0x3732, 0xec4: 0x32bd, 0xec5: 0x32dd, - 0xec6: 0x32fd, 0xec7: 0x331d, 0xec8: 0x0018, 0xec9: 0x0018, 0xeca: 0x0018, 0xecb: 0x0018, - 0xecc: 0x0018, 0xecd: 0x0018, 0xece: 0x0018, 0xecf: 0x0018, 0xed0: 0x333d, 0xed1: 0x3761, - 0xed2: 0x3779, 0xed3: 0x3791, 0xed4: 0x37a9, 0xed5: 0x37c1, 0xed6: 0x37d9, 0xed7: 0x37f1, - 0xed8: 0x3809, 0xed9: 0x3821, 0xeda: 0x3839, 0xedb: 0x3851, 0xedc: 0x3869, 0xedd: 0x3881, - 0xede: 0x3899, 0xedf: 0x38b1, 0xee0: 0x335d, 0xee1: 0x337d, 0xee2: 0x339d, 0xee3: 0x33bd, - 0xee4: 0x33dd, 0xee5: 0x33dd, 0xee6: 0x33fd, 0xee7: 0x341d, 0xee8: 0x343d, 0xee9: 0x345d, - 0xeea: 0x347d, 0xeeb: 0x349d, 0xeec: 0x34bd, 0xeed: 0x34dd, 0xeee: 0x34fd, 0xeef: 0x351d, - 0xef0: 0x353d, 0xef1: 0x355d, 0xef2: 0x357d, 0xef3: 0x359d, 0xef4: 0x35bd, 0xef5: 0x35dd, - 0xef6: 0x35fd, 0xef7: 0x361d, 0xef8: 0x363d, 0xef9: 0x365d, 0xefa: 0x367d, 0xefb: 0x369d, - 0xefc: 0x38c9, 0xefd: 0x3901, 0xefe: 0x36bd, 0xeff: 0x0018, + 0xec0: 0x2b3d, 0xec1: 0x2b5d, 0xec2: 0x2b7d, 0xec3: 0x2b9d, 0xec4: 0x2bbd, 0xec5: 0x2bdd, + 0xec6: 0x2bdd, 0xec7: 0x2bdd, 0xec8: 0x2bfd, 0xec9: 0x2bfd, 0xeca: 0x2bfd, 0xecb: 0x2bfd, + 0xecc: 0x2c1d, 0xecd: 0x2c1d, 0xece: 0x2c1d, 0xecf: 0x2c3d, 0xed0: 0x2c5d, 0xed1: 0x2c5d, + 0xed2: 0x2a7d, 0xed3: 0x2a7d, 0xed4: 0x2c5d, 0xed5: 0x2c5d, 0xed6: 0x2c7d, 0xed7: 0x2c7d, + 0xed8: 0x2c5d, 0xed9: 0x2c5d, 0xeda: 0x2a7d, 0xedb: 0x2a7d, 0xedc: 0x2c5d, 0xedd: 0x2c5d, + 0xede: 0x2c3d, 0xedf: 0x2c3d, 0xee0: 0x2c9d, 0xee1: 0x2c9d, 0xee2: 0x2cbd, 0xee3: 0x2cbd, + 0xee4: 0x0040, 0xee5: 0x2cdd, 0xee6: 0x2cfd, 0xee7: 0x2d1d, 0xee8: 0x2d1d, 0xee9: 0x2d3d, + 0xeea: 0x2d5d, 0xeeb: 0x2d7d, 0xeec: 0x2d9d, 0xeed: 0x2dbd, 0xeee: 0x2ddd, 0xeef: 0x2dfd, + 0xef0: 0x2e1d, 0xef1: 0x2e3d, 0xef2: 0x2e3d, 0xef3: 0x2e5d, 0xef4: 0x2e7d, 0xef5: 0x2e7d, + 0xef6: 0x2e9d, 0xef7: 0x2ebd, 0xef8: 0x2e5d, 0xef9: 0x2edd, 0xefa: 0x2efd, 0xefb: 0x2edd, + 0xefc: 0x2e5d, 0xefd: 0x2f1d, 0xefe: 0x2f3d, 0xeff: 0x2f5d, // Block 0x3c, offset 0xf00 - 0xf00: 0x36dd, 0xf01: 0x36fd, 0xf02: 0x371d, 0xf03: 0x373d, 0xf04: 0x375d, 0xf05: 0x377d, - 0xf06: 0x379d, 0xf07: 0x37bd, 0xf08: 0x37dd, 0xf09: 0x37fd, 0xf0a: 0x381d, 0xf0b: 0x383d, - 0xf0c: 0x385d, 0xf0d: 0x387d, 0xf0e: 0x389d, 0xf0f: 0x38bd, 0xf10: 0x38dd, 0xf11: 0x38fd, - 0xf12: 0x391d, 0xf13: 0x393d, 0xf14: 0x395d, 0xf15: 0x397d, 0xf16: 0x399d, 0xf17: 0x39bd, - 0xf18: 0x39dd, 0xf19: 0x39fd, 0xf1a: 0x3a1d, 0xf1b: 0x3a3d, 0xf1c: 0x3a5d, 0xf1d: 0x3a7d, - 0xf1e: 0x3a9d, 0xf1f: 0x3abd, 0xf20: 0x3add, 0xf21: 0x3afd, 0xf22: 0x3b1d, 0xf23: 0x3b3d, - 0xf24: 0x3b5d, 0xf25: 0x3b7d, 0xf26: 0x127d, 0xf27: 0x3b9d, 0xf28: 0x3bbd, 0xf29: 0x3bdd, - 0xf2a: 0x3bfd, 0xf2b: 0x3c1d, 0xf2c: 0x3c3d, 0xf2d: 0x3c5d, 0xf2e: 0x239d, 0xf2f: 0x3c7d, - 0xf30: 0x3c9d, 0xf31: 0x3939, 0xf32: 0x3951, 0xf33: 0x3969, 0xf34: 0x3981, 0xf35: 0x3999, - 0xf36: 0x39b1, 0xf37: 0x39c9, 0xf38: 0x39e1, 0xf39: 0x39f9, 0xf3a: 0x3a11, 0xf3b: 0x3a29, - 0xf3c: 0x3a41, 0xf3d: 0x3a59, 0xf3e: 0x3a71, 0xf3f: 0x3a89, + 0xf00: 0x2f7d, 0xf01: 0x2f9d, 0xf02: 0x2cfd, 0xf03: 0x2cdd, 0xf04: 0x2fbd, 0xf05: 0x2fdd, + 0xf06: 0x2ffd, 0xf07: 0x301d, 0xf08: 0x303d, 0xf09: 0x305d, 0xf0a: 0x307d, 0xf0b: 0x309d, + 0xf0c: 0x30bd, 0xf0d: 0x30dd, 0xf0e: 0x30fd, 0xf0f: 0x0040, 0xf10: 0x0018, 0xf11: 0x0018, + 0xf12: 0x311d, 0xf13: 0x313d, 0xf14: 0x315d, 0xf15: 0x317d, 0xf16: 0x319d, 0xf17: 0x31bd, + 0xf18: 0x31dd, 0xf19: 0x31fd, 0xf1a: 0x321d, 0xf1b: 0x323d, 0xf1c: 0x315d, 0xf1d: 0x325d, + 0xf1e: 0x327d, 0xf1f: 0x329d, 0xf20: 0x0008, 0xf21: 0x0008, 0xf22: 0x0008, 0xf23: 0x0008, + 0xf24: 0x0008, 0xf25: 0x0008, 0xf26: 0x0008, 0xf27: 0x0008, 0xf28: 0x0008, 0xf29: 0x0008, + 0xf2a: 0x0008, 0xf2b: 0x0008, 0xf2c: 0x0008, 0xf2d: 0x0008, 0xf2e: 0x0008, 0xf2f: 0x0008, + 0xf30: 0x0008, 0xf31: 0x0008, 0xf32: 0x0008, 0xf33: 0x0008, 0xf34: 0x0008, 0xf35: 0x0008, + 0xf36: 0x0008, 0xf37: 0x0008, 0xf38: 0x0008, 0xf39: 0x0008, 0xf3a: 0x0008, 0xf3b: 0x0040, + 0xf3c: 0x0040, 0xf3d: 0x0040, 0xf3e: 0x0040, 0xf3f: 0x0040, // Block 0x3d, offset 0xf40 - 0xf40: 0x3aa1, 0xf41: 0x3ac9, 0xf42: 0x3af1, 0xf43: 0x3b19, 0xf44: 0x3b41, 0xf45: 0x3b69, - 0xf46: 0x3b91, 0xf47: 0x3bb9, 0xf48: 0x3be1, 0xf49: 0x3c09, 0xf4a: 0x3c39, 0xf4b: 0x3c69, - 0xf4c: 0x3c99, 0xf4d: 0x3cbd, 0xf4e: 0x3cb1, 0xf4f: 0x3cdd, 0xf50: 0x3cfd, 0xf51: 0x3d15, - 0xf52: 0x3d2d, 0xf53: 0x3d45, 0xf54: 0x3d5d, 0xf55: 0x3d5d, 0xf56: 0x3d45, 0xf57: 0x3d75, - 0xf58: 0x07bd, 0xf59: 0x3d8d, 0xf5a: 0x3da5, 0xf5b: 0x3dbd, 0xf5c: 0x3dd5, 0xf5d: 0x3ded, - 0xf5e: 0x3e05, 0xf5f: 0x3e1d, 0xf60: 0x3e35, 0xf61: 0x3e4d, 0xf62: 0x3e65, 0xf63: 0x3e7d, - 0xf64: 0x3e95, 0xf65: 0x3e95, 0xf66: 0x3ead, 0xf67: 0x3ead, 0xf68: 0x3ec5, 0xf69: 0x3ec5, - 0xf6a: 0x3edd, 0xf6b: 0x3ef5, 0xf6c: 0x3f0d, 0xf6d: 0x3f25, 0xf6e: 0x3f3d, 0xf6f: 0x3f3d, - 0xf70: 0x3f55, 0xf71: 0x3f55, 0xf72: 0x3f55, 0xf73: 0x3f6d, 0xf74: 0x3f85, 0xf75: 0x3f9d, - 0xf76: 0x3fb5, 0xf77: 0x3f9d, 0xf78: 0x3fcd, 0xf79: 0x3fe5, 0xf7a: 0x3f6d, 0xf7b: 0x3ffd, - 0xf7c: 0x4015, 0xf7d: 0x4015, 0xf7e: 0x4015, 0xf7f: 0x0040, + 0xf40: 0x36a2, 0xf41: 0x36d2, 0xf42: 0x3702, 0xf43: 0x3732, 0xf44: 0x32bd, 0xf45: 0x32dd, + 0xf46: 0x32fd, 0xf47: 0x331d, 0xf48: 0x0018, 0xf49: 0x0018, 0xf4a: 0x0018, 0xf4b: 0x0018, + 0xf4c: 0x0018, 0xf4d: 0x0018, 0xf4e: 0x0018, 0xf4f: 0x0018, 0xf50: 0x333d, 0xf51: 0x3761, + 0xf52: 0x3779, 0xf53: 0x3791, 0xf54: 0x37a9, 0xf55: 0x37c1, 0xf56: 0x37d9, 0xf57: 0x37f1, + 0xf58: 0x3809, 0xf59: 0x3821, 0xf5a: 0x3839, 0xf5b: 0x3851, 0xf5c: 0x3869, 0xf5d: 0x3881, + 0xf5e: 0x3899, 0xf5f: 0x38b1, 0xf60: 0x335d, 0xf61: 0x337d, 0xf62: 0x339d, 0xf63: 0x33bd, + 0xf64: 0x33dd, 0xf65: 0x33dd, 0xf66: 0x33fd, 0xf67: 0x341d, 0xf68: 0x343d, 0xf69: 0x345d, + 0xf6a: 0x347d, 0xf6b: 0x349d, 0xf6c: 0x34bd, 0xf6d: 0x34dd, 0xf6e: 0x34fd, 0xf6f: 0x351d, + 0xf70: 0x353d, 0xf71: 0x355d, 0xf72: 0x357d, 0xf73: 0x359d, 0xf74: 0x35bd, 0xf75: 0x35dd, + 0xf76: 0x35fd, 0xf77: 0x361d, 0xf78: 0x363d, 0xf79: 0x365d, 0xf7a: 0x367d, 0xf7b: 0x369d, + 0xf7c: 0x38c9, 0xf7d: 0x3901, 0xf7e: 0x36bd, 0xf7f: 0x0018, // Block 0x3e, offset 0xf80 - 0xf80: 0x3cc9, 0xf81: 0x3d31, 0xf82: 0x3d99, 0xf83: 0x3e01, 0xf84: 0x3e51, 0xf85: 0x3eb9, - 0xf86: 0x3f09, 0xf87: 0x3f59, 0xf88: 0x3fd9, 0xf89: 0x4041, 0xf8a: 0x4091, 0xf8b: 0x40e1, - 0xf8c: 0x4131, 0xf8d: 0x4199, 0xf8e: 0x4201, 0xf8f: 0x4251, 0xf90: 0x42a1, 0xf91: 0x42d9, - 0xf92: 0x4329, 0xf93: 0x4391, 0xf94: 0x43f9, 0xf95: 0x4431, 0xf96: 0x44b1, 0xf97: 0x4549, - 0xf98: 0x45c9, 0xf99: 0x4619, 0xf9a: 0x4699, 0xf9b: 0x4719, 0xf9c: 0x4781, 0xf9d: 0x47d1, - 0xf9e: 0x4821, 0xf9f: 0x4871, 0xfa0: 0x48d9, 0xfa1: 0x4959, 0xfa2: 0x49c1, 0xfa3: 0x4a11, - 0xfa4: 0x4a61, 0xfa5: 0x4ab1, 0xfa6: 0x4ae9, 0xfa7: 0x4b21, 0xfa8: 0x4b59, 0xfa9: 0x4b91, - 0xfaa: 0x4be1, 0xfab: 0x4c31, 0xfac: 0x4cb1, 0xfad: 0x4d01, 0xfae: 0x4d69, 0xfaf: 0x4de9, - 0xfb0: 0x4e39, 0xfb1: 0x4e71, 0xfb2: 0x4ea9, 0xfb3: 0x4f29, 0xfb4: 0x4f91, 0xfb5: 0x5011, - 0xfb6: 0x5061, 0xfb7: 0x50e1, 0xfb8: 0x5119, 0xfb9: 0x5169, 0xfba: 0x51b9, 0xfbb: 0x5209, - 0xfbc: 0x5259, 0xfbd: 0x52a9, 0xfbe: 0x5311, 0xfbf: 0x5361, + 0xf80: 0x36dd, 0xf81: 0x36fd, 0xf82: 0x371d, 0xf83: 0x373d, 0xf84: 0x375d, 0xf85: 0x377d, + 0xf86: 0x379d, 0xf87: 0x37bd, 0xf88: 0x37dd, 0xf89: 0x37fd, 0xf8a: 0x381d, 0xf8b: 0x383d, + 0xf8c: 0x385d, 0xf8d: 0x387d, 0xf8e: 0x389d, 0xf8f: 0x38bd, 0xf90: 0x38dd, 0xf91: 0x38fd, + 0xf92: 0x391d, 0xf93: 0x393d, 0xf94: 0x395d, 0xf95: 0x397d, 0xf96: 0x399d, 0xf97: 0x39bd, + 0xf98: 0x39dd, 0xf99: 0x39fd, 0xf9a: 0x3a1d, 0xf9b: 0x3a3d, 0xf9c: 0x3a5d, 0xf9d: 0x3a7d, + 0xf9e: 0x3a9d, 0xf9f: 0x3abd, 0xfa0: 0x3add, 0xfa1: 0x3afd, 0xfa2: 0x3b1d, 0xfa3: 0x3b3d, + 0xfa4: 0x3b5d, 0xfa5: 0x3b7d, 0xfa6: 0x127d, 0xfa7: 0x3b9d, 0xfa8: 0x3bbd, 0xfa9: 0x3bdd, + 0xfaa: 0x3bfd, 0xfab: 0x3c1d, 0xfac: 0x3c3d, 0xfad: 0x3c5d, 0xfae: 0x239d, 0xfaf: 0x3c7d, + 0xfb0: 0x3c9d, 0xfb1: 0x3939, 0xfb2: 0x3951, 0xfb3: 0x3969, 0xfb4: 0x3981, 0xfb5: 0x3999, + 0xfb6: 0x39b1, 0xfb7: 0x39c9, 0xfb8: 0x39e1, 0xfb9: 0x39f9, 0xfba: 0x3a11, 0xfbb: 0x3a29, + 0xfbc: 0x3a41, 0xfbd: 0x3a59, 0xfbe: 0x3a71, 0xfbf: 0x3a89, // Block 0x3f, offset 0xfc0 - 0xfc0: 0x5399, 0xfc1: 0x53e9, 0xfc2: 0x5439, 0xfc3: 0x5489, 0xfc4: 0x54f1, 0xfc5: 0x5541, - 0xfc6: 0x5591, 0xfc7: 0x55e1, 0xfc8: 0x5661, 0xfc9: 0x56c9, 0xfca: 0x5701, 0xfcb: 0x5781, - 0xfcc: 0x57b9, 0xfcd: 0x5821, 0xfce: 0x5889, 0xfcf: 0x58d9, 0xfd0: 0x5929, 0xfd1: 0x5979, - 0xfd2: 0x59e1, 0xfd3: 0x5a19, 0xfd4: 0x5a69, 0xfd5: 0x5ad1, 0xfd6: 0x5b09, 0xfd7: 0x5b89, - 0xfd8: 0x5bd9, 0xfd9: 0x5c01, 0xfda: 0x5c29, 0xfdb: 0x5c51, 0xfdc: 0x5c79, 0xfdd: 0x5ca1, - 0xfde: 0x5cc9, 0xfdf: 0x5cf1, 0xfe0: 0x5d19, 0xfe1: 0x5d41, 0xfe2: 0x5d69, 0xfe3: 0x5d99, - 0xfe4: 0x5dc9, 0xfe5: 0x5df9, 0xfe6: 0x5e29, 0xfe7: 0x5e59, 0xfe8: 0x5e89, 0xfe9: 0x5eb9, - 0xfea: 0x5ee9, 0xfeb: 0x5f19, 0xfec: 0x5f49, 0xfed: 0x5f79, 0xfee: 0x5fa9, 0xfef: 0x5fd9, - 0xff0: 0x6009, 0xff1: 0x402d, 0xff2: 0x6039, 0xff3: 0x6051, 0xff4: 0x404d, 0xff5: 0x6069, - 0xff6: 0x6081, 0xff7: 0x6099, 0xff8: 0x406d, 0xff9: 0x406d, 0xffa: 0x60b1, 0xffb: 0x60c9, - 0xffc: 0x6101, 0xffd: 0x6139, 0xffe: 0x6171, 0xfff: 0x61a9, + 0xfc0: 0x3aa1, 0xfc1: 0x3ac9, 0xfc2: 0x3af1, 0xfc3: 0x3b19, 0xfc4: 0x3b41, 0xfc5: 0x3b69, + 0xfc6: 0x3b91, 0xfc7: 0x3bb9, 0xfc8: 0x3be1, 0xfc9: 0x3c09, 0xfca: 0x3c39, 0xfcb: 0x3c69, + 0xfcc: 0x3c99, 0xfcd: 0x3cbd, 0xfce: 0x3cb1, 0xfcf: 0x3cdd, 0xfd0: 0x3cfd, 0xfd1: 0x3d15, + 0xfd2: 0x3d2d, 0xfd3: 0x3d45, 0xfd4: 0x3d5d, 0xfd5: 0x3d5d, 0xfd6: 0x3d45, 0xfd7: 0x3d75, + 0xfd8: 0x07bd, 0xfd9: 0x3d8d, 0xfda: 0x3da5, 0xfdb: 0x3dbd, 0xfdc: 0x3dd5, 0xfdd: 0x3ded, + 0xfde: 0x3e05, 0xfdf: 0x3e1d, 0xfe0: 0x3e35, 0xfe1: 0x3e4d, 0xfe2: 0x3e65, 0xfe3: 0x3e7d, + 0xfe4: 0x3e95, 0xfe5: 0x3e95, 0xfe6: 0x3ead, 0xfe7: 0x3ead, 0xfe8: 0x3ec5, 0xfe9: 0x3ec5, + 0xfea: 0x3edd, 0xfeb: 0x3ef5, 0xfec: 0x3f0d, 0xfed: 0x3f25, 0xfee: 0x3f3d, 0xfef: 0x3f3d, + 0xff0: 0x3f55, 0xff1: 0x3f55, 0xff2: 0x3f55, 0xff3: 0x3f6d, 0xff4: 0x3f85, 0xff5: 0x3f9d, + 0xff6: 0x3fb5, 0xff7: 0x3f9d, 0xff8: 0x3fcd, 0xff9: 0x3fe5, 0xffa: 0x3f6d, 0xffb: 0x3ffd, + 0xffc: 0x4015, 0xffd: 0x4015, 0xffe: 0x4015, 0xfff: 0x0040, // Block 0x40, offset 0x1000 - 0x1000: 0x6211, 0x1001: 0x6229, 0x1002: 0x408d, 0x1003: 0x6241, 0x1004: 0x6259, 0x1005: 0x6271, - 0x1006: 0x6289, 0x1007: 0x62a1, 0x1008: 0x40ad, 0x1009: 0x62b9, 0x100a: 0x62e1, 0x100b: 0x62f9, - 0x100c: 0x40cd, 0x100d: 0x40cd, 0x100e: 0x6311, 0x100f: 0x6329, 0x1010: 0x6341, 0x1011: 0x40ed, - 0x1012: 0x410d, 0x1013: 0x412d, 0x1014: 0x414d, 0x1015: 0x416d, 0x1016: 0x6359, 0x1017: 0x6371, - 0x1018: 0x6389, 0x1019: 0x63a1, 0x101a: 0x63b9, 0x101b: 0x418d, 0x101c: 0x63d1, 0x101d: 0x63e9, - 0x101e: 0x6401, 0x101f: 0x41ad, 0x1020: 0x41cd, 0x1021: 0x6419, 0x1022: 0x41ed, 0x1023: 0x420d, - 0x1024: 0x422d, 0x1025: 0x6431, 0x1026: 0x424d, 0x1027: 0x6449, 0x1028: 0x6479, 0x1029: 0x6211, - 0x102a: 0x426d, 0x102b: 0x428d, 0x102c: 0x42ad, 0x102d: 0x42cd, 0x102e: 0x64b1, 0x102f: 0x64f1, - 0x1030: 0x6539, 0x1031: 0x6551, 0x1032: 0x42ed, 0x1033: 0x6569, 0x1034: 0x6581, 0x1035: 0x6599, - 0x1036: 0x430d, 0x1037: 0x65b1, 0x1038: 0x65c9, 0x1039: 0x65b1, 0x103a: 0x65e1, 0x103b: 0x65f9, - 0x103c: 0x432d, 0x103d: 0x6611, 0x103e: 0x6629, 0x103f: 0x6611, + 0x1000: 0x3cc9, 0x1001: 0x3d31, 0x1002: 0x3d99, 0x1003: 0x3e01, 0x1004: 0x3e51, 0x1005: 0x3eb9, + 0x1006: 0x3f09, 0x1007: 0x3f59, 0x1008: 0x3fd9, 0x1009: 0x4041, 0x100a: 0x4091, 0x100b: 0x40e1, + 0x100c: 0x4131, 0x100d: 0x4199, 0x100e: 0x4201, 0x100f: 0x4251, 0x1010: 0x42a1, 0x1011: 0x42d9, + 0x1012: 0x4329, 0x1013: 0x4391, 0x1014: 0x43f9, 0x1015: 0x4431, 0x1016: 0x44b1, 0x1017: 0x4549, + 0x1018: 0x45c9, 0x1019: 0x4619, 0x101a: 0x4699, 0x101b: 0x4719, 0x101c: 0x4781, 0x101d: 0x47d1, + 0x101e: 0x4821, 0x101f: 0x4871, 0x1020: 0x48d9, 0x1021: 0x4959, 0x1022: 0x49c1, 0x1023: 0x4a11, + 0x1024: 0x4a61, 0x1025: 0x4ab1, 0x1026: 0x4ae9, 0x1027: 0x4b21, 0x1028: 0x4b59, 0x1029: 0x4b91, + 0x102a: 0x4be1, 0x102b: 0x4c31, 0x102c: 0x4cb1, 0x102d: 0x4d01, 0x102e: 0x4d69, 0x102f: 0x4de9, + 0x1030: 0x4e39, 0x1031: 0x4e71, 0x1032: 0x4ea9, 0x1033: 0x4f29, 0x1034: 0x4f91, 0x1035: 0x5011, + 0x1036: 0x5061, 0x1037: 0x50e1, 0x1038: 0x5119, 0x1039: 0x5169, 0x103a: 0x51b9, 0x103b: 0x5209, + 0x103c: 0x5259, 0x103d: 0x52a9, 0x103e: 0x5311, 0x103f: 0x5361, // Block 0x41, offset 0x1040 - 0x1040: 0x434d, 0x1041: 0x436d, 0x1042: 0x0040, 0x1043: 0x6641, 0x1044: 0x6659, 0x1045: 0x6671, - 0x1046: 0x6689, 0x1047: 0x0040, 0x1048: 0x66c1, 0x1049: 0x66d9, 0x104a: 0x66f1, 0x104b: 0x6709, - 0x104c: 0x6721, 0x104d: 0x6739, 0x104e: 0x6401, 0x104f: 0x6751, 0x1050: 0x6769, 0x1051: 0x6781, - 0x1052: 0x438d, 0x1053: 0x6799, 0x1054: 0x6289, 0x1055: 0x43ad, 0x1056: 0x43cd, 0x1057: 0x67b1, - 0x1058: 0x0040, 0x1059: 0x43ed, 0x105a: 0x67c9, 0x105b: 0x67e1, 0x105c: 0x67f9, 0x105d: 0x6811, - 0x105e: 0x6829, 0x105f: 0x6859, 0x1060: 0x6889, 0x1061: 0x68b1, 0x1062: 0x68d9, 0x1063: 0x6901, - 0x1064: 0x6929, 0x1065: 0x6951, 0x1066: 0x6979, 0x1067: 0x69a1, 0x1068: 0x69c9, 0x1069: 0x69f1, - 0x106a: 0x6a21, 0x106b: 0x6a51, 0x106c: 0x6a81, 0x106d: 0x6ab1, 0x106e: 0x6ae1, 0x106f: 0x6b11, - 0x1070: 0x6b41, 0x1071: 0x6b71, 0x1072: 0x6ba1, 0x1073: 0x6bd1, 0x1074: 0x6c01, 0x1075: 0x6c31, - 0x1076: 0x6c61, 0x1077: 0x6c91, 0x1078: 0x6cc1, 0x1079: 0x6cf1, 0x107a: 0x6d21, 0x107b: 0x6d51, - 0x107c: 0x6d81, 0x107d: 0x6db1, 0x107e: 0x6de1, 0x107f: 0x440d, + 0x1040: 0x5399, 0x1041: 0x53e9, 0x1042: 0x5439, 0x1043: 0x5489, 0x1044: 0x54f1, 0x1045: 0x5541, + 0x1046: 0x5591, 0x1047: 0x55e1, 0x1048: 0x5661, 0x1049: 0x56c9, 0x104a: 0x5701, 0x104b: 0x5781, + 0x104c: 0x57b9, 0x104d: 0x5821, 0x104e: 0x5889, 0x104f: 0x58d9, 0x1050: 0x5929, 0x1051: 0x5979, + 0x1052: 0x59e1, 0x1053: 0x5a19, 0x1054: 0x5a69, 0x1055: 0x5ad1, 0x1056: 0x5b09, 0x1057: 0x5b89, + 0x1058: 0x5bd9, 0x1059: 0x5c01, 0x105a: 0x5c29, 0x105b: 0x5c51, 0x105c: 0x5c79, 0x105d: 0x5ca1, + 0x105e: 0x5cc9, 0x105f: 0x5cf1, 0x1060: 0x5d19, 0x1061: 0x5d41, 0x1062: 0x5d69, 0x1063: 0x5d99, + 0x1064: 0x5dc9, 0x1065: 0x5df9, 0x1066: 0x5e29, 0x1067: 0x5e59, 0x1068: 0x5e89, 0x1069: 0x5eb9, + 0x106a: 0x5ee9, 0x106b: 0x5f19, 0x106c: 0x5f49, 0x106d: 0x5f79, 0x106e: 0x5fa9, 0x106f: 0x5fd9, + 0x1070: 0x6009, 0x1071: 0x402d, 0x1072: 0x6039, 0x1073: 0x6051, 0x1074: 0x404d, 0x1075: 0x6069, + 0x1076: 0x6081, 0x1077: 0x6099, 0x1078: 0x406d, 0x1079: 0x406d, 0x107a: 0x60b1, 0x107b: 0x60c9, + 0x107c: 0x6101, 0x107d: 0x6139, 0x107e: 0x6171, 0x107f: 0x61a9, // Block 0x42, offset 0x1080 - 0x1080: 0xe00d, 0x1081: 0x0008, 0x1082: 0xe00d, 0x1083: 0x0008, 0x1084: 0xe00d, 0x1085: 0x0008, - 0x1086: 0xe00d, 0x1087: 0x0008, 0x1088: 0xe00d, 0x1089: 0x0008, 0x108a: 0xe00d, 0x108b: 0x0008, - 0x108c: 0xe00d, 0x108d: 0x0008, 0x108e: 0xe00d, 0x108f: 0x0008, 0x1090: 0xe00d, 0x1091: 0x0008, - 0x1092: 0xe00d, 0x1093: 0x0008, 0x1094: 0xe00d, 0x1095: 0x0008, 0x1096: 0xe00d, 0x1097: 0x0008, - 0x1098: 0xe00d, 0x1099: 0x0008, 0x109a: 0xe00d, 0x109b: 0x0008, 0x109c: 0xe00d, 0x109d: 0x0008, - 0x109e: 0xe00d, 0x109f: 0x0008, 0x10a0: 0xe00d, 0x10a1: 0x0008, 0x10a2: 0xe00d, 0x10a3: 0x0008, - 0x10a4: 0xe00d, 0x10a5: 0x0008, 0x10a6: 0xe00d, 0x10a7: 0x0008, 0x10a8: 0xe00d, 0x10a9: 0x0008, - 0x10aa: 0xe00d, 0x10ab: 0x0008, 0x10ac: 0xe00d, 0x10ad: 0x0008, 0x10ae: 0x0008, 0x10af: 0x1308, - 0x10b0: 0x1318, 0x10b1: 0x1318, 0x10b2: 0x1318, 0x10b3: 0x0018, 0x10b4: 0x1308, 0x10b5: 0x1308, - 0x10b6: 0x1308, 0x10b7: 0x1308, 0x10b8: 0x1308, 0x10b9: 0x1308, 0x10ba: 0x1308, 0x10bb: 0x1308, - 0x10bc: 0x1308, 0x10bd: 0x1308, 0x10be: 0x0018, 0x10bf: 0x0008, + 0x1080: 0x6211, 0x1081: 0x6229, 0x1082: 0x408d, 0x1083: 0x6241, 0x1084: 0x6259, 0x1085: 0x6271, + 0x1086: 0x6289, 0x1087: 0x62a1, 0x1088: 0x40ad, 0x1089: 0x62b9, 0x108a: 0x62e1, 0x108b: 0x62f9, + 0x108c: 0x40cd, 0x108d: 0x40cd, 0x108e: 0x6311, 0x108f: 0x6329, 0x1090: 0x6341, 0x1091: 0x40ed, + 0x1092: 0x410d, 0x1093: 0x412d, 0x1094: 0x414d, 0x1095: 0x416d, 0x1096: 0x6359, 0x1097: 0x6371, + 0x1098: 0x6389, 0x1099: 0x63a1, 0x109a: 0x63b9, 0x109b: 0x418d, 0x109c: 0x63d1, 0x109d: 0x63e9, + 0x109e: 0x6401, 0x109f: 0x41ad, 0x10a0: 0x41cd, 0x10a1: 0x6419, 0x10a2: 0x41ed, 0x10a3: 0x420d, + 0x10a4: 0x422d, 0x10a5: 0x6431, 0x10a6: 0x424d, 0x10a7: 0x6449, 0x10a8: 0x6479, 0x10a9: 0x6211, + 0x10aa: 0x426d, 0x10ab: 0x428d, 0x10ac: 0x42ad, 0x10ad: 0x42cd, 0x10ae: 0x64b1, 0x10af: 0x64f1, + 0x10b0: 0x6539, 0x10b1: 0x6551, 0x10b2: 0x42ed, 0x10b3: 0x6569, 0x10b4: 0x6581, 0x10b5: 0x6599, + 0x10b6: 0x430d, 0x10b7: 0x65b1, 0x10b8: 0x65c9, 0x10b9: 0x65b1, 0x10ba: 0x65e1, 0x10bb: 0x65f9, + 0x10bc: 0x432d, 0x10bd: 0x6611, 0x10be: 0x6629, 0x10bf: 0x6611, // Block 0x43, offset 0x10c0 - 0x10c0: 0xe00d, 0x10c1: 0x0008, 0x10c2: 0xe00d, 0x10c3: 0x0008, 0x10c4: 0xe00d, 0x10c5: 0x0008, - 0x10c6: 0xe00d, 0x10c7: 0x0008, 0x10c8: 0xe00d, 0x10c9: 0x0008, 0x10ca: 0xe00d, 0x10cb: 0x0008, - 0x10cc: 0xe00d, 0x10cd: 0x0008, 0x10ce: 0xe00d, 0x10cf: 0x0008, 0x10d0: 0xe00d, 0x10d1: 0x0008, - 0x10d2: 0xe00d, 0x10d3: 0x0008, 0x10d4: 0xe00d, 0x10d5: 0x0008, 0x10d6: 0xe00d, 0x10d7: 0x0008, - 0x10d8: 0xe00d, 0x10d9: 0x0008, 0x10da: 0xe00d, 0x10db: 0x0008, 0x10dc: 0x0ea1, 0x10dd: 0x6e11, - 0x10de: 0x1308, 0x10df: 0x1308, 0x10e0: 0x0008, 0x10e1: 0x0008, 0x10e2: 0x0008, 0x10e3: 0x0008, - 0x10e4: 0x0008, 0x10e5: 0x0008, 0x10e6: 0x0008, 0x10e7: 0x0008, 0x10e8: 0x0008, 0x10e9: 0x0008, - 0x10ea: 0x0008, 0x10eb: 0x0008, 0x10ec: 0x0008, 0x10ed: 0x0008, 0x10ee: 0x0008, 0x10ef: 0x0008, - 0x10f0: 0x0008, 0x10f1: 0x0008, 0x10f2: 0x0008, 0x10f3: 0x0008, 0x10f4: 0x0008, 0x10f5: 0x0008, - 0x10f6: 0x0008, 0x10f7: 0x0008, 0x10f8: 0x0008, 0x10f9: 0x0008, 0x10fa: 0x0008, 0x10fb: 0x0008, - 0x10fc: 0x0008, 0x10fd: 0x0008, 0x10fe: 0x0008, 0x10ff: 0x0008, + 0x10c0: 0x434d, 0x10c1: 0x436d, 0x10c2: 0x0040, 0x10c3: 0x6641, 0x10c4: 0x6659, 0x10c5: 0x6671, + 0x10c6: 0x6689, 0x10c7: 0x0040, 0x10c8: 0x66c1, 0x10c9: 0x66d9, 0x10ca: 0x66f1, 0x10cb: 0x6709, + 0x10cc: 0x6721, 0x10cd: 0x6739, 0x10ce: 0x6401, 0x10cf: 0x6751, 0x10d0: 0x6769, 0x10d1: 0x6781, + 0x10d2: 0x438d, 0x10d3: 0x6799, 0x10d4: 0x6289, 0x10d5: 0x43ad, 0x10d6: 0x43cd, 0x10d7: 0x67b1, + 0x10d8: 0x0040, 0x10d9: 0x43ed, 0x10da: 0x67c9, 0x10db: 0x67e1, 0x10dc: 0x67f9, 0x10dd: 0x6811, + 0x10de: 0x6829, 0x10df: 0x6859, 0x10e0: 0x6889, 0x10e1: 0x68b1, 0x10e2: 0x68d9, 0x10e3: 0x6901, + 0x10e4: 0x6929, 0x10e5: 0x6951, 0x10e6: 0x6979, 0x10e7: 0x69a1, 0x10e8: 0x69c9, 0x10e9: 0x69f1, + 0x10ea: 0x6a21, 0x10eb: 0x6a51, 0x10ec: 0x6a81, 0x10ed: 0x6ab1, 0x10ee: 0x6ae1, 0x10ef: 0x6b11, + 0x10f0: 0x6b41, 0x10f1: 0x6b71, 0x10f2: 0x6ba1, 0x10f3: 0x6bd1, 0x10f4: 0x6c01, 0x10f5: 0x6c31, + 0x10f6: 0x6c61, 0x10f7: 0x6c91, 0x10f8: 0x6cc1, 0x10f9: 0x6cf1, 0x10fa: 0x6d21, 0x10fb: 0x6d51, + 0x10fc: 0x6d81, 0x10fd: 0x6db1, 0x10fe: 0x6de1, 0x10ff: 0x440d, // Block 0x44, offset 0x1100 - 0x1100: 0x0018, 0x1101: 0x0018, 0x1102: 0x0018, 0x1103: 0x0018, 0x1104: 0x0018, 0x1105: 0x0018, - 0x1106: 0x0018, 0x1107: 0x0018, 0x1108: 0x0018, 0x1109: 0x0018, 0x110a: 0x0018, 0x110b: 0x0018, - 0x110c: 0x0018, 0x110d: 0x0018, 0x110e: 0x0018, 0x110f: 0x0018, 0x1110: 0x0018, 0x1111: 0x0018, - 0x1112: 0x0018, 0x1113: 0x0018, 0x1114: 0x0018, 0x1115: 0x0018, 0x1116: 0x0018, 0x1117: 0x0008, - 0x1118: 0x0008, 0x1119: 0x0008, 0x111a: 0x0008, 0x111b: 0x0008, 0x111c: 0x0008, 0x111d: 0x0008, - 0x111e: 0x0008, 0x111f: 0x0008, 0x1120: 0x0018, 0x1121: 0x0018, 0x1122: 0xe00d, 0x1123: 0x0008, + 0x1100: 0xe00d, 0x1101: 0x0008, 0x1102: 0xe00d, 0x1103: 0x0008, 0x1104: 0xe00d, 0x1105: 0x0008, + 0x1106: 0xe00d, 0x1107: 0x0008, 0x1108: 0xe00d, 0x1109: 0x0008, 0x110a: 0xe00d, 0x110b: 0x0008, + 0x110c: 0xe00d, 0x110d: 0x0008, 0x110e: 0xe00d, 0x110f: 0x0008, 0x1110: 0xe00d, 0x1111: 0x0008, + 0x1112: 0xe00d, 0x1113: 0x0008, 0x1114: 0xe00d, 0x1115: 0x0008, 0x1116: 0xe00d, 0x1117: 0x0008, + 0x1118: 0xe00d, 0x1119: 0x0008, 0x111a: 0xe00d, 0x111b: 0x0008, 0x111c: 0xe00d, 0x111d: 0x0008, + 0x111e: 0xe00d, 0x111f: 0x0008, 0x1120: 0xe00d, 0x1121: 0x0008, 0x1122: 0xe00d, 0x1123: 0x0008, 0x1124: 0xe00d, 0x1125: 0x0008, 0x1126: 0xe00d, 0x1127: 0x0008, 0x1128: 0xe00d, 0x1129: 0x0008, - 0x112a: 0xe00d, 0x112b: 0x0008, 0x112c: 0xe00d, 0x112d: 0x0008, 0x112e: 0xe00d, 0x112f: 0x0008, - 0x1130: 0x0008, 0x1131: 0x0008, 0x1132: 0xe00d, 0x1133: 0x0008, 0x1134: 0xe00d, 0x1135: 0x0008, - 0x1136: 0xe00d, 0x1137: 0x0008, 0x1138: 0xe00d, 0x1139: 0x0008, 0x113a: 0xe00d, 0x113b: 0x0008, - 0x113c: 0xe00d, 0x113d: 0x0008, 0x113e: 0xe00d, 0x113f: 0x0008, + 0x112a: 0xe00d, 0x112b: 0x0008, 0x112c: 0xe00d, 0x112d: 0x0008, 0x112e: 0x0008, 0x112f: 0x3308, + 0x1130: 0x3318, 0x1131: 0x3318, 0x1132: 0x3318, 0x1133: 0x0018, 0x1134: 0x3308, 0x1135: 0x3308, + 0x1136: 0x3308, 0x1137: 0x3308, 0x1138: 0x3308, 0x1139: 0x3308, 0x113a: 0x3308, 0x113b: 0x3308, + 0x113c: 0x3308, 0x113d: 0x3308, 0x113e: 0x0018, 0x113f: 0x0008, // Block 0x45, offset 0x1140 0x1140: 0xe00d, 0x1141: 0x0008, 0x1142: 0xe00d, 0x1143: 0x0008, 0x1144: 0xe00d, 0x1145: 0x0008, 0x1146: 0xe00d, 0x1147: 0x0008, 0x1148: 0xe00d, 0x1149: 0x0008, 0x114a: 0xe00d, 0x114b: 0x0008, 0x114c: 0xe00d, 0x114d: 0x0008, 0x114e: 0xe00d, 0x114f: 0x0008, 0x1150: 0xe00d, 0x1151: 0x0008, 0x1152: 0xe00d, 0x1153: 0x0008, 0x1154: 0xe00d, 0x1155: 0x0008, 0x1156: 0xe00d, 0x1157: 0x0008, - 0x1158: 0xe00d, 0x1159: 0x0008, 0x115a: 0xe00d, 0x115b: 0x0008, 0x115c: 0xe00d, 0x115d: 0x0008, - 0x115e: 0xe00d, 0x115f: 0x0008, 0x1160: 0xe00d, 0x1161: 0x0008, 0x1162: 0xe00d, 0x1163: 0x0008, - 0x1164: 0xe00d, 0x1165: 0x0008, 0x1166: 0xe00d, 0x1167: 0x0008, 0x1168: 0xe00d, 0x1169: 0x0008, - 0x116a: 0xe00d, 0x116b: 0x0008, 0x116c: 0xe00d, 0x116d: 0x0008, 0x116e: 0xe00d, 0x116f: 0x0008, - 0x1170: 0xe0fd, 0x1171: 0x0008, 0x1172: 0x0008, 0x1173: 0x0008, 0x1174: 0x0008, 0x1175: 0x0008, - 0x1176: 0x0008, 0x1177: 0x0008, 0x1178: 0x0008, 0x1179: 0xe01d, 0x117a: 0x0008, 0x117b: 0xe03d, - 0x117c: 0x0008, 0x117d: 0x442d, 0x117e: 0xe00d, 0x117f: 0x0008, + 0x1158: 0xe00d, 0x1159: 0x0008, 0x115a: 0xe00d, 0x115b: 0x0008, 0x115c: 0x0ea1, 0x115d: 0x6e11, + 0x115e: 0x3308, 0x115f: 0x3308, 0x1160: 0x0008, 0x1161: 0x0008, 0x1162: 0x0008, 0x1163: 0x0008, + 0x1164: 0x0008, 0x1165: 0x0008, 0x1166: 0x0008, 0x1167: 0x0008, 0x1168: 0x0008, 0x1169: 0x0008, + 0x116a: 0x0008, 0x116b: 0x0008, 0x116c: 0x0008, 0x116d: 0x0008, 0x116e: 0x0008, 0x116f: 0x0008, + 0x1170: 0x0008, 0x1171: 0x0008, 0x1172: 0x0008, 0x1173: 0x0008, 0x1174: 0x0008, 0x1175: 0x0008, + 0x1176: 0x0008, 0x1177: 0x0008, 0x1178: 0x0008, 0x1179: 0x0008, 0x117a: 0x0008, 0x117b: 0x0008, + 0x117c: 0x0008, 0x117d: 0x0008, 0x117e: 0x0008, 0x117f: 0x0008, // Block 0x46, offset 0x1180 - 0x1180: 0xe00d, 0x1181: 0x0008, 0x1182: 0xe00d, 0x1183: 0x0008, 0x1184: 0xe00d, 0x1185: 0x0008, - 0x1186: 0xe00d, 0x1187: 0x0008, 0x1188: 0x0008, 0x1189: 0x0018, 0x118a: 0x0018, 0x118b: 0xe03d, - 0x118c: 0x0008, 0x118d: 0x11d9, 0x118e: 0x0008, 0x118f: 0x0008, 0x1190: 0xe00d, 0x1191: 0x0008, - 0x1192: 0xe00d, 0x1193: 0x0008, 0x1194: 0x0008, 0x1195: 0x0008, 0x1196: 0xe00d, 0x1197: 0x0008, - 0x1198: 0xe00d, 0x1199: 0x0008, 0x119a: 0xe00d, 0x119b: 0x0008, 0x119c: 0xe00d, 0x119d: 0x0008, - 0x119e: 0xe00d, 0x119f: 0x0008, 0x11a0: 0xe00d, 0x11a1: 0x0008, 0x11a2: 0xe00d, 0x11a3: 0x0008, + 0x1180: 0x0018, 0x1181: 0x0018, 0x1182: 0x0018, 0x1183: 0x0018, 0x1184: 0x0018, 0x1185: 0x0018, + 0x1186: 0x0018, 0x1187: 0x0018, 0x1188: 0x0018, 0x1189: 0x0018, 0x118a: 0x0018, 0x118b: 0x0018, + 0x118c: 0x0018, 0x118d: 0x0018, 0x118e: 0x0018, 0x118f: 0x0018, 0x1190: 0x0018, 0x1191: 0x0018, + 0x1192: 0x0018, 0x1193: 0x0018, 0x1194: 0x0018, 0x1195: 0x0018, 0x1196: 0x0018, 0x1197: 0x0008, + 0x1198: 0x0008, 0x1199: 0x0008, 0x119a: 0x0008, 0x119b: 0x0008, 0x119c: 0x0008, 0x119d: 0x0008, + 0x119e: 0x0008, 0x119f: 0x0008, 0x11a0: 0x0018, 0x11a1: 0x0018, 0x11a2: 0xe00d, 0x11a3: 0x0008, 0x11a4: 0xe00d, 0x11a5: 0x0008, 0x11a6: 0xe00d, 0x11a7: 0x0008, 0x11a8: 0xe00d, 0x11a9: 0x0008, - 0x11aa: 0x6e29, 0x11ab: 0x1029, 0x11ac: 0x11c1, 0x11ad: 0x6e41, 0x11ae: 0x1221, 0x11af: 0x0040, - 0x11b0: 0x6e59, 0x11b1: 0x6e71, 0x11b2: 0x1239, 0x11b3: 0x444d, 0x11b4: 0xe00d, 0x11b5: 0x0008, - 0x11b6: 0xe00d, 0x11b7: 0x0008, 0x11b8: 0x0040, 0x11b9: 0x0040, 0x11ba: 0x0040, 0x11bb: 0x0040, - 0x11bc: 0x0040, 0x11bd: 0x0040, 0x11be: 0x0040, 0x11bf: 0x0040, + 0x11aa: 0xe00d, 0x11ab: 0x0008, 0x11ac: 0xe00d, 0x11ad: 0x0008, 0x11ae: 0xe00d, 0x11af: 0x0008, + 0x11b0: 0x0008, 0x11b1: 0x0008, 0x11b2: 0xe00d, 0x11b3: 0x0008, 0x11b4: 0xe00d, 0x11b5: 0x0008, + 0x11b6: 0xe00d, 0x11b7: 0x0008, 0x11b8: 0xe00d, 0x11b9: 0x0008, 0x11ba: 0xe00d, 0x11bb: 0x0008, + 0x11bc: 0xe00d, 0x11bd: 0x0008, 0x11be: 0xe00d, 0x11bf: 0x0008, // Block 0x47, offset 0x11c0 - 0x11c0: 0x64d5, 0x11c1: 0x64f5, 0x11c2: 0x6515, 0x11c3: 0x6535, 0x11c4: 0x6555, 0x11c5: 0x6575, - 0x11c6: 0x6595, 0x11c7: 0x65b5, 0x11c8: 0x65d5, 0x11c9: 0x65f5, 0x11ca: 0x6615, 0x11cb: 0x6635, - 0x11cc: 0x6655, 0x11cd: 0x6675, 0x11ce: 0x0008, 0x11cf: 0x0008, 0x11d0: 0x6695, 0x11d1: 0x0008, - 0x11d2: 0x66b5, 0x11d3: 0x0008, 0x11d4: 0x0008, 0x11d5: 0x66d5, 0x11d6: 0x66f5, 0x11d7: 0x6715, - 0x11d8: 0x6735, 0x11d9: 0x6755, 0x11da: 0x6775, 0x11db: 0x6795, 0x11dc: 0x67b5, 0x11dd: 0x67d5, - 0x11de: 0x67f5, 0x11df: 0x0008, 0x11e0: 0x6815, 0x11e1: 0x0008, 0x11e2: 0x6835, 0x11e3: 0x0008, - 0x11e4: 0x0008, 0x11e5: 0x6855, 0x11e6: 0x6875, 0x11e7: 0x0008, 0x11e8: 0x0008, 0x11e9: 0x0008, - 0x11ea: 0x6895, 0x11eb: 0x68b5, 0x11ec: 0x68d5, 0x11ed: 0x68f5, 0x11ee: 0x6915, 0x11ef: 0x6935, - 0x11f0: 0x6955, 0x11f1: 0x6975, 0x11f2: 0x6995, 0x11f3: 0x69b5, 0x11f4: 0x69d5, 0x11f5: 0x69f5, - 0x11f6: 0x6a15, 0x11f7: 0x6a35, 0x11f8: 0x6a55, 0x11f9: 0x6a75, 0x11fa: 0x6a95, 0x11fb: 0x6ab5, - 0x11fc: 0x6ad5, 0x11fd: 0x6af5, 0x11fe: 0x6b15, 0x11ff: 0x6b35, + 0x11c0: 0xe00d, 0x11c1: 0x0008, 0x11c2: 0xe00d, 0x11c3: 0x0008, 0x11c4: 0xe00d, 0x11c5: 0x0008, + 0x11c6: 0xe00d, 0x11c7: 0x0008, 0x11c8: 0xe00d, 0x11c9: 0x0008, 0x11ca: 0xe00d, 0x11cb: 0x0008, + 0x11cc: 0xe00d, 0x11cd: 0x0008, 0x11ce: 0xe00d, 0x11cf: 0x0008, 0x11d0: 0xe00d, 0x11d1: 0x0008, + 0x11d2: 0xe00d, 0x11d3: 0x0008, 0x11d4: 0xe00d, 0x11d5: 0x0008, 0x11d6: 0xe00d, 0x11d7: 0x0008, + 0x11d8: 0xe00d, 0x11d9: 0x0008, 0x11da: 0xe00d, 0x11db: 0x0008, 0x11dc: 0xe00d, 0x11dd: 0x0008, + 0x11de: 0xe00d, 0x11df: 0x0008, 0x11e0: 0xe00d, 0x11e1: 0x0008, 0x11e2: 0xe00d, 0x11e3: 0x0008, + 0x11e4: 0xe00d, 0x11e5: 0x0008, 0x11e6: 0xe00d, 0x11e7: 0x0008, 0x11e8: 0xe00d, 0x11e9: 0x0008, + 0x11ea: 0xe00d, 0x11eb: 0x0008, 0x11ec: 0xe00d, 0x11ed: 0x0008, 0x11ee: 0xe00d, 0x11ef: 0x0008, + 0x11f0: 0xe0fd, 0x11f1: 0x0008, 0x11f2: 0x0008, 0x11f3: 0x0008, 0x11f4: 0x0008, 0x11f5: 0x0008, + 0x11f6: 0x0008, 0x11f7: 0x0008, 0x11f8: 0x0008, 0x11f9: 0xe01d, 0x11fa: 0x0008, 0x11fb: 0xe03d, + 0x11fc: 0x0008, 0x11fd: 0x442d, 0x11fe: 0xe00d, 0x11ff: 0x0008, // Block 0x48, offset 0x1200 - 0x1200: 0x7a95, 0x1201: 0x7ab5, 0x1202: 0x7ad5, 0x1203: 0x7af5, 0x1204: 0x7b15, 0x1205: 0x7b35, - 0x1206: 0x7b55, 0x1207: 0x7b75, 0x1208: 0x7b95, 0x1209: 0x7bb5, 0x120a: 0x7bd5, 0x120b: 0x7bf5, - 0x120c: 0x7c15, 0x120d: 0x7c35, 0x120e: 0x7c55, 0x120f: 0x6ec9, 0x1210: 0x6ef1, 0x1211: 0x6f19, - 0x1212: 0x7c75, 0x1213: 0x7c95, 0x1214: 0x7cb5, 0x1215: 0x6f41, 0x1216: 0x6f69, 0x1217: 0x6f91, - 0x1218: 0x7cd5, 0x1219: 0x7cf5, 0x121a: 0x0040, 0x121b: 0x0040, 0x121c: 0x0040, 0x121d: 0x0040, - 0x121e: 0x0040, 0x121f: 0x0040, 0x1220: 0x0040, 0x1221: 0x0040, 0x1222: 0x0040, 0x1223: 0x0040, - 0x1224: 0x0040, 0x1225: 0x0040, 0x1226: 0x0040, 0x1227: 0x0040, 0x1228: 0x0040, 0x1229: 0x0040, - 0x122a: 0x0040, 0x122b: 0x0040, 0x122c: 0x0040, 0x122d: 0x0040, 0x122e: 0x0040, 0x122f: 0x0040, - 0x1230: 0x0040, 0x1231: 0x0040, 0x1232: 0x0040, 0x1233: 0x0040, 0x1234: 0x0040, 0x1235: 0x0040, - 0x1236: 0x0040, 0x1237: 0x0040, 0x1238: 0x0040, 0x1239: 0x0040, 0x123a: 0x0040, 0x123b: 0x0040, + 0x1200: 0xe00d, 0x1201: 0x0008, 0x1202: 0xe00d, 0x1203: 0x0008, 0x1204: 0xe00d, 0x1205: 0x0008, + 0x1206: 0xe00d, 0x1207: 0x0008, 0x1208: 0x0008, 0x1209: 0x0018, 0x120a: 0x0018, 0x120b: 0xe03d, + 0x120c: 0x0008, 0x120d: 0x11d9, 0x120e: 0x0008, 0x120f: 0x0008, 0x1210: 0xe00d, 0x1211: 0x0008, + 0x1212: 0xe00d, 0x1213: 0x0008, 0x1214: 0x0008, 0x1215: 0x0008, 0x1216: 0xe00d, 0x1217: 0x0008, + 0x1218: 0xe00d, 0x1219: 0x0008, 0x121a: 0xe00d, 0x121b: 0x0008, 0x121c: 0xe00d, 0x121d: 0x0008, + 0x121e: 0xe00d, 0x121f: 0x0008, 0x1220: 0xe00d, 0x1221: 0x0008, 0x1222: 0xe00d, 0x1223: 0x0008, + 0x1224: 0xe00d, 0x1225: 0x0008, 0x1226: 0xe00d, 0x1227: 0x0008, 0x1228: 0xe00d, 0x1229: 0x0008, + 0x122a: 0x6e29, 0x122b: 0x1029, 0x122c: 0x11c1, 0x122d: 0x6e41, 0x122e: 0x1221, 0x122f: 0x0040, + 0x1230: 0x6e59, 0x1231: 0x6e71, 0x1232: 0x1239, 0x1233: 0x444d, 0x1234: 0xe00d, 0x1235: 0x0008, + 0x1236: 0xe00d, 0x1237: 0x0008, 0x1238: 0x0040, 0x1239: 0x0040, 0x123a: 0x0040, 0x123b: 0x0040, 0x123c: 0x0040, 0x123d: 0x0040, 0x123e: 0x0040, 0x123f: 0x0040, // Block 0x49, offset 0x1240 - 0x1240: 0x6fb9, 0x1241: 0x6fd1, 0x1242: 0x6fe9, 0x1243: 0x7d15, 0x1244: 0x7d35, 0x1245: 0x7001, - 0x1246: 0x7001, 0x1247: 0x0040, 0x1248: 0x0040, 0x1249: 0x0040, 0x124a: 0x0040, 0x124b: 0x0040, - 0x124c: 0x0040, 0x124d: 0x0040, 0x124e: 0x0040, 0x124f: 0x0040, 0x1250: 0x0040, 0x1251: 0x0040, - 0x1252: 0x0040, 0x1253: 0x7019, 0x1254: 0x7041, 0x1255: 0x7069, 0x1256: 0x7091, 0x1257: 0x70b9, - 0x1258: 0x0040, 0x1259: 0x0040, 0x125a: 0x0040, 0x125b: 0x0040, 0x125c: 0x0040, 0x125d: 0x70e1, - 0x125e: 0x1308, 0x125f: 0x7109, 0x1260: 0x7131, 0x1261: 0x20a9, 0x1262: 0x20f1, 0x1263: 0x7149, - 0x1264: 0x7161, 0x1265: 0x7179, 0x1266: 0x7191, 0x1267: 0x71a9, 0x1268: 0x71c1, 0x1269: 0x1fb2, - 0x126a: 0x71d9, 0x126b: 0x7201, 0x126c: 0x7229, 0x126d: 0x7261, 0x126e: 0x7299, 0x126f: 0x72c1, - 0x1270: 0x72e9, 0x1271: 0x7311, 0x1272: 0x7339, 0x1273: 0x7361, 0x1274: 0x7389, 0x1275: 0x73b1, - 0x1276: 0x73d9, 0x1277: 0x0040, 0x1278: 0x7401, 0x1279: 0x7429, 0x127a: 0x7451, 0x127b: 0x7479, - 0x127c: 0x74a1, 0x127d: 0x0040, 0x127e: 0x74c9, 0x127f: 0x0040, + 0x1240: 0x64d5, 0x1241: 0x64f5, 0x1242: 0x6515, 0x1243: 0x6535, 0x1244: 0x6555, 0x1245: 0x6575, + 0x1246: 0x6595, 0x1247: 0x65b5, 0x1248: 0x65d5, 0x1249: 0x65f5, 0x124a: 0x6615, 0x124b: 0x6635, + 0x124c: 0x6655, 0x124d: 0x6675, 0x124e: 0x0008, 0x124f: 0x0008, 0x1250: 0x6695, 0x1251: 0x0008, + 0x1252: 0x66b5, 0x1253: 0x0008, 0x1254: 0x0008, 0x1255: 0x66d5, 0x1256: 0x66f5, 0x1257: 0x6715, + 0x1258: 0x6735, 0x1259: 0x6755, 0x125a: 0x6775, 0x125b: 0x6795, 0x125c: 0x67b5, 0x125d: 0x67d5, + 0x125e: 0x67f5, 0x125f: 0x0008, 0x1260: 0x6815, 0x1261: 0x0008, 0x1262: 0x6835, 0x1263: 0x0008, + 0x1264: 0x0008, 0x1265: 0x6855, 0x1266: 0x6875, 0x1267: 0x0008, 0x1268: 0x0008, 0x1269: 0x0008, + 0x126a: 0x6895, 0x126b: 0x68b5, 0x126c: 0x68d5, 0x126d: 0x68f5, 0x126e: 0x6915, 0x126f: 0x6935, + 0x1270: 0x6955, 0x1271: 0x6975, 0x1272: 0x6995, 0x1273: 0x69b5, 0x1274: 0x69d5, 0x1275: 0x69f5, + 0x1276: 0x6a15, 0x1277: 0x6a35, 0x1278: 0x6a55, 0x1279: 0x6a75, 0x127a: 0x6a95, 0x127b: 0x6ab5, + 0x127c: 0x6ad5, 0x127d: 0x6af5, 0x127e: 0x6b15, 0x127f: 0x6b35, // Block 0x4a, offset 0x1280 - 0x1280: 0x74f1, 0x1281: 0x7519, 0x1282: 0x0040, 0x1283: 0x7541, 0x1284: 0x7569, 0x1285: 0x0040, - 0x1286: 0x7591, 0x1287: 0x75b9, 0x1288: 0x75e1, 0x1289: 0x7609, 0x128a: 0x7631, 0x128b: 0x7659, - 0x128c: 0x7681, 0x128d: 0x76a9, 0x128e: 0x76d1, 0x128f: 0x76f9, 0x1290: 0x7721, 0x1291: 0x7721, - 0x1292: 0x7739, 0x1293: 0x7739, 0x1294: 0x7739, 0x1295: 0x7739, 0x1296: 0x7751, 0x1297: 0x7751, - 0x1298: 0x7751, 0x1299: 0x7751, 0x129a: 0x7769, 0x129b: 0x7769, 0x129c: 0x7769, 0x129d: 0x7769, - 0x129e: 0x7781, 0x129f: 0x7781, 0x12a0: 0x7781, 0x12a1: 0x7781, 0x12a2: 0x7799, 0x12a3: 0x7799, - 0x12a4: 0x7799, 0x12a5: 0x7799, 0x12a6: 0x77b1, 0x12a7: 0x77b1, 0x12a8: 0x77b1, 0x12a9: 0x77b1, - 0x12aa: 0x77c9, 0x12ab: 0x77c9, 0x12ac: 0x77c9, 0x12ad: 0x77c9, 0x12ae: 0x77e1, 0x12af: 0x77e1, - 0x12b0: 0x77e1, 0x12b1: 0x77e1, 0x12b2: 0x77f9, 0x12b3: 0x77f9, 0x12b4: 0x77f9, 0x12b5: 0x77f9, - 0x12b6: 0x7811, 0x12b7: 0x7811, 0x12b8: 0x7811, 0x12b9: 0x7811, 0x12ba: 0x7829, 0x12bb: 0x7829, - 0x12bc: 0x7829, 0x12bd: 0x7829, 0x12be: 0x7841, 0x12bf: 0x7841, + 0x1280: 0x7a95, 0x1281: 0x7ab5, 0x1282: 0x7ad5, 0x1283: 0x7af5, 0x1284: 0x7b15, 0x1285: 0x7b35, + 0x1286: 0x7b55, 0x1287: 0x7b75, 0x1288: 0x7b95, 0x1289: 0x7bb5, 0x128a: 0x7bd5, 0x128b: 0x7bf5, + 0x128c: 0x7c15, 0x128d: 0x7c35, 0x128e: 0x7c55, 0x128f: 0x6ec9, 0x1290: 0x6ef1, 0x1291: 0x6f19, + 0x1292: 0x7c75, 0x1293: 0x7c95, 0x1294: 0x7cb5, 0x1295: 0x6f41, 0x1296: 0x6f69, 0x1297: 0x6f91, + 0x1298: 0x7cd5, 0x1299: 0x7cf5, 0x129a: 0x0040, 0x129b: 0x0040, 0x129c: 0x0040, 0x129d: 0x0040, + 0x129e: 0x0040, 0x129f: 0x0040, 0x12a0: 0x0040, 0x12a1: 0x0040, 0x12a2: 0x0040, 0x12a3: 0x0040, + 0x12a4: 0x0040, 0x12a5: 0x0040, 0x12a6: 0x0040, 0x12a7: 0x0040, 0x12a8: 0x0040, 0x12a9: 0x0040, + 0x12aa: 0x0040, 0x12ab: 0x0040, 0x12ac: 0x0040, 0x12ad: 0x0040, 0x12ae: 0x0040, 0x12af: 0x0040, + 0x12b0: 0x0040, 0x12b1: 0x0040, 0x12b2: 0x0040, 0x12b3: 0x0040, 0x12b4: 0x0040, 0x12b5: 0x0040, + 0x12b6: 0x0040, 0x12b7: 0x0040, 0x12b8: 0x0040, 0x12b9: 0x0040, 0x12ba: 0x0040, 0x12bb: 0x0040, + 0x12bc: 0x0040, 0x12bd: 0x0040, 0x12be: 0x0040, 0x12bf: 0x0040, // Block 0x4b, offset 0x12c0 - 0x12c0: 0x7841, 0x12c1: 0x7841, 0x12c2: 0x7859, 0x12c3: 0x7859, 0x12c4: 0x7871, 0x12c5: 0x7871, - 0x12c6: 0x7889, 0x12c7: 0x7889, 0x12c8: 0x78a1, 0x12c9: 0x78a1, 0x12ca: 0x78b9, 0x12cb: 0x78b9, - 0x12cc: 0x78d1, 0x12cd: 0x78d1, 0x12ce: 0x78e9, 0x12cf: 0x78e9, 0x12d0: 0x78e9, 0x12d1: 0x78e9, - 0x12d2: 0x7901, 0x12d3: 0x7901, 0x12d4: 0x7901, 0x12d5: 0x7901, 0x12d6: 0x7919, 0x12d7: 0x7919, - 0x12d8: 0x7919, 0x12d9: 0x7919, 0x12da: 0x7931, 0x12db: 0x7931, 0x12dc: 0x7931, 0x12dd: 0x7931, - 0x12de: 0x7949, 0x12df: 0x7949, 0x12e0: 0x7961, 0x12e1: 0x7961, 0x12e2: 0x7961, 0x12e3: 0x7961, - 0x12e4: 0x7979, 0x12e5: 0x7979, 0x12e6: 0x7991, 0x12e7: 0x7991, 0x12e8: 0x7991, 0x12e9: 0x7991, - 0x12ea: 0x79a9, 0x12eb: 0x79a9, 0x12ec: 0x79a9, 0x12ed: 0x79a9, 0x12ee: 0x79c1, 0x12ef: 0x79c1, - 0x12f0: 0x79d9, 0x12f1: 0x79d9, 0x12f2: 0x0018, 0x12f3: 0x0018, 0x12f4: 0x0018, 0x12f5: 0x0018, - 0x12f6: 0x0018, 0x12f7: 0x0018, 0x12f8: 0x0018, 0x12f9: 0x0018, 0x12fa: 0x0018, 0x12fb: 0x0018, - 0x12fc: 0x0018, 0x12fd: 0x0018, 0x12fe: 0x0018, 0x12ff: 0x0018, + 0x12c0: 0x6fb9, 0x12c1: 0x6fd1, 0x12c2: 0x6fe9, 0x12c3: 0x7d15, 0x12c4: 0x7d35, 0x12c5: 0x7001, + 0x12c6: 0x7001, 0x12c7: 0x0040, 0x12c8: 0x0040, 0x12c9: 0x0040, 0x12ca: 0x0040, 0x12cb: 0x0040, + 0x12cc: 0x0040, 0x12cd: 0x0040, 0x12ce: 0x0040, 0x12cf: 0x0040, 0x12d0: 0x0040, 0x12d1: 0x0040, + 0x12d2: 0x0040, 0x12d3: 0x7019, 0x12d4: 0x7041, 0x12d5: 0x7069, 0x12d6: 0x7091, 0x12d7: 0x70b9, + 0x12d8: 0x0040, 0x12d9: 0x0040, 0x12da: 0x0040, 0x12db: 0x0040, 0x12dc: 0x0040, 0x12dd: 0x70e1, + 0x12de: 0x3308, 0x12df: 0x7109, 0x12e0: 0x7131, 0x12e1: 0x20a9, 0x12e2: 0x20f1, 0x12e3: 0x7149, + 0x12e4: 0x7161, 0x12e5: 0x7179, 0x12e6: 0x7191, 0x12e7: 0x71a9, 0x12e8: 0x71c1, 0x12e9: 0x1fb2, + 0x12ea: 0x71d9, 0x12eb: 0x7201, 0x12ec: 0x7229, 0x12ed: 0x7261, 0x12ee: 0x7299, 0x12ef: 0x72c1, + 0x12f0: 0x72e9, 0x12f1: 0x7311, 0x12f2: 0x7339, 0x12f3: 0x7361, 0x12f4: 0x7389, 0x12f5: 0x73b1, + 0x12f6: 0x73d9, 0x12f7: 0x0040, 0x12f8: 0x7401, 0x12f9: 0x7429, 0x12fa: 0x7451, 0x12fb: 0x7479, + 0x12fc: 0x74a1, 0x12fd: 0x0040, 0x12fe: 0x74c9, 0x12ff: 0x0040, // Block 0x4c, offset 0x1300 - 0x1300: 0x0018, 0x1301: 0x0018, 0x1302: 0x0040, 0x1303: 0x0040, 0x1304: 0x0040, 0x1305: 0x0040, - 0x1306: 0x0040, 0x1307: 0x0040, 0x1308: 0x0040, 0x1309: 0x0040, 0x130a: 0x0040, 0x130b: 0x0040, - 0x130c: 0x0040, 0x130d: 0x0040, 0x130e: 0x0040, 0x130f: 0x0040, 0x1310: 0x0040, 0x1311: 0x0040, - 0x1312: 0x0040, 0x1313: 0x79f1, 0x1314: 0x79f1, 0x1315: 0x79f1, 0x1316: 0x79f1, 0x1317: 0x7a09, - 0x1318: 0x7a09, 0x1319: 0x7a21, 0x131a: 0x7a21, 0x131b: 0x7a39, 0x131c: 0x7a39, 0x131d: 0x0479, - 0x131e: 0x7a51, 0x131f: 0x7a51, 0x1320: 0x7a69, 0x1321: 0x7a69, 0x1322: 0x7a81, 0x1323: 0x7a81, - 0x1324: 0x7a99, 0x1325: 0x7a99, 0x1326: 0x7a99, 0x1327: 0x7a99, 0x1328: 0x7ab1, 0x1329: 0x7ab1, - 0x132a: 0x7ac9, 0x132b: 0x7ac9, 0x132c: 0x7af1, 0x132d: 0x7af1, 0x132e: 0x7b19, 0x132f: 0x7b19, - 0x1330: 0x7b41, 0x1331: 0x7b41, 0x1332: 0x7b69, 0x1333: 0x7b69, 0x1334: 0x7b91, 0x1335: 0x7b91, - 0x1336: 0x7bb9, 0x1337: 0x7bb9, 0x1338: 0x7bb9, 0x1339: 0x7be1, 0x133a: 0x7be1, 0x133b: 0x7be1, - 0x133c: 0x7c09, 0x133d: 0x7c09, 0x133e: 0x7c09, 0x133f: 0x7c09, + 0x1300: 0x74f1, 0x1301: 0x7519, 0x1302: 0x0040, 0x1303: 0x7541, 0x1304: 0x7569, 0x1305: 0x0040, + 0x1306: 0x7591, 0x1307: 0x75b9, 0x1308: 0x75e1, 0x1309: 0x7609, 0x130a: 0x7631, 0x130b: 0x7659, + 0x130c: 0x7681, 0x130d: 0x76a9, 0x130e: 0x76d1, 0x130f: 0x76f9, 0x1310: 0x7721, 0x1311: 0x7721, + 0x1312: 0x7739, 0x1313: 0x7739, 0x1314: 0x7739, 0x1315: 0x7739, 0x1316: 0x7751, 0x1317: 0x7751, + 0x1318: 0x7751, 0x1319: 0x7751, 0x131a: 0x7769, 0x131b: 0x7769, 0x131c: 0x7769, 0x131d: 0x7769, + 0x131e: 0x7781, 0x131f: 0x7781, 0x1320: 0x7781, 0x1321: 0x7781, 0x1322: 0x7799, 0x1323: 0x7799, + 0x1324: 0x7799, 0x1325: 0x7799, 0x1326: 0x77b1, 0x1327: 0x77b1, 0x1328: 0x77b1, 0x1329: 0x77b1, + 0x132a: 0x77c9, 0x132b: 0x77c9, 0x132c: 0x77c9, 0x132d: 0x77c9, 0x132e: 0x77e1, 0x132f: 0x77e1, + 0x1330: 0x77e1, 0x1331: 0x77e1, 0x1332: 0x77f9, 0x1333: 0x77f9, 0x1334: 0x77f9, 0x1335: 0x77f9, + 0x1336: 0x7811, 0x1337: 0x7811, 0x1338: 0x7811, 0x1339: 0x7811, 0x133a: 0x7829, 0x133b: 0x7829, + 0x133c: 0x7829, 0x133d: 0x7829, 0x133e: 0x7841, 0x133f: 0x7841, // Block 0x4d, offset 0x1340 - 0x1340: 0x85f9, 0x1341: 0x8621, 0x1342: 0x8649, 0x1343: 0x8671, 0x1344: 0x8699, 0x1345: 0x86c1, - 0x1346: 0x86e9, 0x1347: 0x8711, 0x1348: 0x8739, 0x1349: 0x8761, 0x134a: 0x8789, 0x134b: 0x87b1, - 0x134c: 0x87d9, 0x134d: 0x8801, 0x134e: 0x8829, 0x134f: 0x8851, 0x1350: 0x8879, 0x1351: 0x88a1, - 0x1352: 0x88c9, 0x1353: 0x88f1, 0x1354: 0x8919, 0x1355: 0x8941, 0x1356: 0x8969, 0x1357: 0x8991, - 0x1358: 0x89b9, 0x1359: 0x89e1, 0x135a: 0x8a09, 0x135b: 0x8a31, 0x135c: 0x8a59, 0x135d: 0x8a81, - 0x135e: 0x8aaa, 0x135f: 0x8ada, 0x1360: 0x8b0a, 0x1361: 0x8b3a, 0x1362: 0x8b6a, 0x1363: 0x8b9a, - 0x1364: 0x8bc9, 0x1365: 0x8bf1, 0x1366: 0x7c71, 0x1367: 0x8c19, 0x1368: 0x7be1, 0x1369: 0x7c99, - 0x136a: 0x8c41, 0x136b: 0x8c69, 0x136c: 0x7d39, 0x136d: 0x8c91, 0x136e: 0x7d61, 0x136f: 0x7d89, - 0x1370: 0x8cb9, 0x1371: 0x8ce1, 0x1372: 0x7e29, 0x1373: 0x8d09, 0x1374: 0x7e51, 0x1375: 0x7e79, - 0x1376: 0x8d31, 0x1377: 0x8d59, 0x1378: 0x7ec9, 0x1379: 0x8d81, 0x137a: 0x7ef1, 0x137b: 0x7f19, - 0x137c: 0x83a1, 0x137d: 0x83c9, 0x137e: 0x8441, 0x137f: 0x8469, + 0x1340: 0x7841, 0x1341: 0x7841, 0x1342: 0x7859, 0x1343: 0x7859, 0x1344: 0x7871, 0x1345: 0x7871, + 0x1346: 0x7889, 0x1347: 0x7889, 0x1348: 0x78a1, 0x1349: 0x78a1, 0x134a: 0x78b9, 0x134b: 0x78b9, + 0x134c: 0x78d1, 0x134d: 0x78d1, 0x134e: 0x78e9, 0x134f: 0x78e9, 0x1350: 0x78e9, 0x1351: 0x78e9, + 0x1352: 0x7901, 0x1353: 0x7901, 0x1354: 0x7901, 0x1355: 0x7901, 0x1356: 0x7919, 0x1357: 0x7919, + 0x1358: 0x7919, 0x1359: 0x7919, 0x135a: 0x7931, 0x135b: 0x7931, 0x135c: 0x7931, 0x135d: 0x7931, + 0x135e: 0x7949, 0x135f: 0x7949, 0x1360: 0x7961, 0x1361: 0x7961, 0x1362: 0x7961, 0x1363: 0x7961, + 0x1364: 0x7979, 0x1365: 0x7979, 0x1366: 0x7991, 0x1367: 0x7991, 0x1368: 0x7991, 0x1369: 0x7991, + 0x136a: 0x79a9, 0x136b: 0x79a9, 0x136c: 0x79a9, 0x136d: 0x79a9, 0x136e: 0x79c1, 0x136f: 0x79c1, + 0x1370: 0x79d9, 0x1371: 0x79d9, 0x1372: 0x0818, 0x1373: 0x0818, 0x1374: 0x0818, 0x1375: 0x0818, + 0x1376: 0x0818, 0x1377: 0x0818, 0x1378: 0x0818, 0x1379: 0x0818, 0x137a: 0x0818, 0x137b: 0x0818, + 0x137c: 0x0818, 0x137d: 0x0818, 0x137e: 0x0818, 0x137f: 0x0818, // Block 0x4e, offset 0x1380 - 0x1380: 0x8491, 0x1381: 0x8531, 0x1382: 0x8559, 0x1383: 0x8581, 0x1384: 0x85a9, 0x1385: 0x8649, - 0x1386: 0x8671, 0x1387: 0x8699, 0x1388: 0x8da9, 0x1389: 0x8739, 0x138a: 0x8dd1, 0x138b: 0x8df9, - 0x138c: 0x8829, 0x138d: 0x8e21, 0x138e: 0x8851, 0x138f: 0x8879, 0x1390: 0x8a81, 0x1391: 0x8e49, - 0x1392: 0x8e71, 0x1393: 0x89b9, 0x1394: 0x8e99, 0x1395: 0x89e1, 0x1396: 0x8a09, 0x1397: 0x7c21, - 0x1398: 0x7c49, 0x1399: 0x8ec1, 0x139a: 0x7c71, 0x139b: 0x8ee9, 0x139c: 0x7cc1, 0x139d: 0x7ce9, - 0x139e: 0x7d11, 0x139f: 0x7d39, 0x13a0: 0x8f11, 0x13a1: 0x7db1, 0x13a2: 0x7dd9, 0x13a3: 0x7e01, - 0x13a4: 0x7e29, 0x13a5: 0x8f39, 0x13a6: 0x7ec9, 0x13a7: 0x7f41, 0x13a8: 0x7f69, 0x13a9: 0x7f91, - 0x13aa: 0x7fb9, 0x13ab: 0x7fe1, 0x13ac: 0x8031, 0x13ad: 0x8059, 0x13ae: 0x8081, 0x13af: 0x80a9, - 0x13b0: 0x80d1, 0x13b1: 0x80f9, 0x13b2: 0x8f61, 0x13b3: 0x8121, 0x13b4: 0x8149, 0x13b5: 0x8171, - 0x13b6: 0x8199, 0x13b7: 0x81c1, 0x13b8: 0x81e9, 0x13b9: 0x8239, 0x13ba: 0x8261, 0x13bb: 0x8289, - 0x13bc: 0x82b1, 0x13bd: 0x82d9, 0x13be: 0x8301, 0x13bf: 0x8329, + 0x1380: 0x0818, 0x1381: 0x0818, 0x1382: 0x0040, 0x1383: 0x0040, 0x1384: 0x0040, 0x1385: 0x0040, + 0x1386: 0x0040, 0x1387: 0x0040, 0x1388: 0x0040, 0x1389: 0x0040, 0x138a: 0x0040, 0x138b: 0x0040, + 0x138c: 0x0040, 0x138d: 0x0040, 0x138e: 0x0040, 0x138f: 0x0040, 0x1390: 0x0040, 0x1391: 0x0040, + 0x1392: 0x0040, 0x1393: 0x79f1, 0x1394: 0x79f1, 0x1395: 0x79f1, 0x1396: 0x79f1, 0x1397: 0x7a09, + 0x1398: 0x7a09, 0x1399: 0x7a21, 0x139a: 0x7a21, 0x139b: 0x7a39, 0x139c: 0x7a39, 0x139d: 0x0479, + 0x139e: 0x7a51, 0x139f: 0x7a51, 0x13a0: 0x7a69, 0x13a1: 0x7a69, 0x13a2: 0x7a81, 0x13a3: 0x7a81, + 0x13a4: 0x7a99, 0x13a5: 0x7a99, 0x13a6: 0x7a99, 0x13a7: 0x7a99, 0x13a8: 0x7ab1, 0x13a9: 0x7ab1, + 0x13aa: 0x7ac9, 0x13ab: 0x7ac9, 0x13ac: 0x7af1, 0x13ad: 0x7af1, 0x13ae: 0x7b19, 0x13af: 0x7b19, + 0x13b0: 0x7b41, 0x13b1: 0x7b41, 0x13b2: 0x7b69, 0x13b3: 0x7b69, 0x13b4: 0x7b91, 0x13b5: 0x7b91, + 0x13b6: 0x7bb9, 0x13b7: 0x7bb9, 0x13b8: 0x7bb9, 0x13b9: 0x7be1, 0x13ba: 0x7be1, 0x13bb: 0x7be1, + 0x13bc: 0x7c09, 0x13bd: 0x7c09, 0x13be: 0x7c09, 0x13bf: 0x7c09, // Block 0x4f, offset 0x13c0 - 0x13c0: 0x8351, 0x13c1: 0x8379, 0x13c2: 0x83f1, 0x13c3: 0x8419, 0x13c4: 0x84b9, 0x13c5: 0x84e1, - 0x13c6: 0x8509, 0x13c7: 0x8531, 0x13c8: 0x8559, 0x13c9: 0x85d1, 0x13ca: 0x85f9, 0x13cb: 0x8621, - 0x13cc: 0x8649, 0x13cd: 0x8f89, 0x13ce: 0x86c1, 0x13cf: 0x86e9, 0x13d0: 0x8711, 0x13d1: 0x8739, - 0x13d2: 0x87b1, 0x13d3: 0x87d9, 0x13d4: 0x8801, 0x13d5: 0x8829, 0x13d6: 0x8fb1, 0x13d7: 0x88a1, - 0x13d8: 0x88c9, 0x13d9: 0x8fd9, 0x13da: 0x8941, 0x13db: 0x8969, 0x13dc: 0x8991, 0x13dd: 0x89b9, - 0x13de: 0x9001, 0x13df: 0x7c71, 0x13e0: 0x8ee9, 0x13e1: 0x7d39, 0x13e2: 0x8f11, 0x13e3: 0x7e29, - 0x13e4: 0x8f39, 0x13e5: 0x7ec9, 0x13e6: 0x9029, 0x13e7: 0x80d1, 0x13e8: 0x9051, 0x13e9: 0x9079, - 0x13ea: 0x90a1, 0x13eb: 0x8531, 0x13ec: 0x8559, 0x13ed: 0x8649, 0x13ee: 0x8829, 0x13ef: 0x8fb1, - 0x13f0: 0x89b9, 0x13f1: 0x9001, 0x13f2: 0x90c9, 0x13f3: 0x9101, 0x13f4: 0x9139, 0x13f5: 0x9171, - 0x13f6: 0x9199, 0x13f7: 0x91c1, 0x13f8: 0x91e9, 0x13f9: 0x9211, 0x13fa: 0x9239, 0x13fb: 0x9261, - 0x13fc: 0x9289, 0x13fd: 0x92b1, 0x13fe: 0x92d9, 0x13ff: 0x9301, + 0x13c0: 0x85f9, 0x13c1: 0x8621, 0x13c2: 0x8649, 0x13c3: 0x8671, 0x13c4: 0x8699, 0x13c5: 0x86c1, + 0x13c6: 0x86e9, 0x13c7: 0x8711, 0x13c8: 0x8739, 0x13c9: 0x8761, 0x13ca: 0x8789, 0x13cb: 0x87b1, + 0x13cc: 0x87d9, 0x13cd: 0x8801, 0x13ce: 0x8829, 0x13cf: 0x8851, 0x13d0: 0x8879, 0x13d1: 0x88a1, + 0x13d2: 0x88c9, 0x13d3: 0x88f1, 0x13d4: 0x8919, 0x13d5: 0x8941, 0x13d6: 0x8969, 0x13d7: 0x8991, + 0x13d8: 0x89b9, 0x13d9: 0x89e1, 0x13da: 0x8a09, 0x13db: 0x8a31, 0x13dc: 0x8a59, 0x13dd: 0x8a81, + 0x13de: 0x8aaa, 0x13df: 0x8ada, 0x13e0: 0x8b0a, 0x13e1: 0x8b3a, 0x13e2: 0x8b6a, 0x13e3: 0x8b9a, + 0x13e4: 0x8bc9, 0x13e5: 0x8bf1, 0x13e6: 0x7c71, 0x13e7: 0x8c19, 0x13e8: 0x7be1, 0x13e9: 0x7c99, + 0x13ea: 0x8c41, 0x13eb: 0x8c69, 0x13ec: 0x7d39, 0x13ed: 0x8c91, 0x13ee: 0x7d61, 0x13ef: 0x7d89, + 0x13f0: 0x8cb9, 0x13f1: 0x8ce1, 0x13f2: 0x7e29, 0x13f3: 0x8d09, 0x13f4: 0x7e51, 0x13f5: 0x7e79, + 0x13f6: 0x8d31, 0x13f7: 0x8d59, 0x13f8: 0x7ec9, 0x13f9: 0x8d81, 0x13fa: 0x7ef1, 0x13fb: 0x7f19, + 0x13fc: 0x83a1, 0x13fd: 0x83c9, 0x13fe: 0x8441, 0x13ff: 0x8469, // Block 0x50, offset 0x1400 - 0x1400: 0x9329, 0x1401: 0x9351, 0x1402: 0x9379, 0x1403: 0x93a1, 0x1404: 0x93c9, 0x1405: 0x93f1, - 0x1406: 0x9419, 0x1407: 0x9441, 0x1408: 0x9469, 0x1409: 0x9491, 0x140a: 0x94b9, 0x140b: 0x94e1, - 0x140c: 0x9079, 0x140d: 0x9509, 0x140e: 0x9531, 0x140f: 0x9559, 0x1410: 0x9581, 0x1411: 0x9171, - 0x1412: 0x9199, 0x1413: 0x91c1, 0x1414: 0x91e9, 0x1415: 0x9211, 0x1416: 0x9239, 0x1417: 0x9261, - 0x1418: 0x9289, 0x1419: 0x92b1, 0x141a: 0x92d9, 0x141b: 0x9301, 0x141c: 0x9329, 0x141d: 0x9351, - 0x141e: 0x9379, 0x141f: 0x93a1, 0x1420: 0x93c9, 0x1421: 0x93f1, 0x1422: 0x9419, 0x1423: 0x9441, - 0x1424: 0x9469, 0x1425: 0x9491, 0x1426: 0x94b9, 0x1427: 0x94e1, 0x1428: 0x9079, 0x1429: 0x9509, - 0x142a: 0x9531, 0x142b: 0x9559, 0x142c: 0x9581, 0x142d: 0x9491, 0x142e: 0x94b9, 0x142f: 0x94e1, - 0x1430: 0x9079, 0x1431: 0x9051, 0x1432: 0x90a1, 0x1433: 0x8211, 0x1434: 0x8059, 0x1435: 0x8081, - 0x1436: 0x80a9, 0x1437: 0x9491, 0x1438: 0x94b9, 0x1439: 0x94e1, 0x143a: 0x8211, 0x143b: 0x8239, - 0x143c: 0x95a9, 0x143d: 0x95a9, 0x143e: 0x0018, 0x143f: 0x0018, + 0x1400: 0x8491, 0x1401: 0x8531, 0x1402: 0x8559, 0x1403: 0x8581, 0x1404: 0x85a9, 0x1405: 0x8649, + 0x1406: 0x8671, 0x1407: 0x8699, 0x1408: 0x8da9, 0x1409: 0x8739, 0x140a: 0x8dd1, 0x140b: 0x8df9, + 0x140c: 0x8829, 0x140d: 0x8e21, 0x140e: 0x8851, 0x140f: 0x8879, 0x1410: 0x8a81, 0x1411: 0x8e49, + 0x1412: 0x8e71, 0x1413: 0x89b9, 0x1414: 0x8e99, 0x1415: 0x89e1, 0x1416: 0x8a09, 0x1417: 0x7c21, + 0x1418: 0x7c49, 0x1419: 0x8ec1, 0x141a: 0x7c71, 0x141b: 0x8ee9, 0x141c: 0x7cc1, 0x141d: 0x7ce9, + 0x141e: 0x7d11, 0x141f: 0x7d39, 0x1420: 0x8f11, 0x1421: 0x7db1, 0x1422: 0x7dd9, 0x1423: 0x7e01, + 0x1424: 0x7e29, 0x1425: 0x8f39, 0x1426: 0x7ec9, 0x1427: 0x7f41, 0x1428: 0x7f69, 0x1429: 0x7f91, + 0x142a: 0x7fb9, 0x142b: 0x7fe1, 0x142c: 0x8031, 0x142d: 0x8059, 0x142e: 0x8081, 0x142f: 0x80a9, + 0x1430: 0x80d1, 0x1431: 0x80f9, 0x1432: 0x8f61, 0x1433: 0x8121, 0x1434: 0x8149, 0x1435: 0x8171, + 0x1436: 0x8199, 0x1437: 0x81c1, 0x1438: 0x81e9, 0x1439: 0x8239, 0x143a: 0x8261, 0x143b: 0x8289, + 0x143c: 0x82b1, 0x143d: 0x82d9, 0x143e: 0x8301, 0x143f: 0x8329, // Block 0x51, offset 0x1440 - 0x1440: 0x0040, 0x1441: 0x0040, 0x1442: 0x0040, 0x1443: 0x0040, 0x1444: 0x0040, 0x1445: 0x0040, - 0x1446: 0x0040, 0x1447: 0x0040, 0x1448: 0x0040, 0x1449: 0x0040, 0x144a: 0x0040, 0x144b: 0x0040, - 0x144c: 0x0040, 0x144d: 0x0040, 0x144e: 0x0040, 0x144f: 0x0040, 0x1450: 0x95d1, 0x1451: 0x9609, - 0x1452: 0x9609, 0x1453: 0x9641, 0x1454: 0x9679, 0x1455: 0x96b1, 0x1456: 0x96e9, 0x1457: 0x9721, - 0x1458: 0x9759, 0x1459: 0x9759, 0x145a: 0x9791, 0x145b: 0x97c9, 0x145c: 0x9801, 0x145d: 0x9839, - 0x145e: 0x9871, 0x145f: 0x98a9, 0x1460: 0x98a9, 0x1461: 0x98e1, 0x1462: 0x9919, 0x1463: 0x9919, - 0x1464: 0x9951, 0x1465: 0x9951, 0x1466: 0x9989, 0x1467: 0x99c1, 0x1468: 0x99c1, 0x1469: 0x99f9, - 0x146a: 0x9a31, 0x146b: 0x9a31, 0x146c: 0x9a69, 0x146d: 0x9a69, 0x146e: 0x9aa1, 0x146f: 0x9ad9, - 0x1470: 0x9ad9, 0x1471: 0x9b11, 0x1472: 0x9b11, 0x1473: 0x9b49, 0x1474: 0x9b81, 0x1475: 0x9bb9, - 0x1476: 0x9bf1, 0x1477: 0x9bf1, 0x1478: 0x9c29, 0x1479: 0x9c61, 0x147a: 0x9c99, 0x147b: 0x9cd1, - 0x147c: 0x9d09, 0x147d: 0x9d09, 0x147e: 0x9d41, 0x147f: 0x9d79, + 0x1440: 0x8351, 0x1441: 0x8379, 0x1442: 0x83f1, 0x1443: 0x8419, 0x1444: 0x84b9, 0x1445: 0x84e1, + 0x1446: 0x8509, 0x1447: 0x8531, 0x1448: 0x8559, 0x1449: 0x85d1, 0x144a: 0x85f9, 0x144b: 0x8621, + 0x144c: 0x8649, 0x144d: 0x8f89, 0x144e: 0x86c1, 0x144f: 0x86e9, 0x1450: 0x8711, 0x1451: 0x8739, + 0x1452: 0x87b1, 0x1453: 0x87d9, 0x1454: 0x8801, 0x1455: 0x8829, 0x1456: 0x8fb1, 0x1457: 0x88a1, + 0x1458: 0x88c9, 0x1459: 0x8fd9, 0x145a: 0x8941, 0x145b: 0x8969, 0x145c: 0x8991, 0x145d: 0x89b9, + 0x145e: 0x9001, 0x145f: 0x7c71, 0x1460: 0x8ee9, 0x1461: 0x7d39, 0x1462: 0x8f11, 0x1463: 0x7e29, + 0x1464: 0x8f39, 0x1465: 0x7ec9, 0x1466: 0x9029, 0x1467: 0x80d1, 0x1468: 0x9051, 0x1469: 0x9079, + 0x146a: 0x90a1, 0x146b: 0x8531, 0x146c: 0x8559, 0x146d: 0x8649, 0x146e: 0x8829, 0x146f: 0x8fb1, + 0x1470: 0x89b9, 0x1471: 0x9001, 0x1472: 0x90c9, 0x1473: 0x9101, 0x1474: 0x9139, 0x1475: 0x9171, + 0x1476: 0x9199, 0x1477: 0x91c1, 0x1478: 0x91e9, 0x1479: 0x9211, 0x147a: 0x9239, 0x147b: 0x9261, + 0x147c: 0x9289, 0x147d: 0x92b1, 0x147e: 0x92d9, 0x147f: 0x9301, // Block 0x52, offset 0x1480 - 0x1480: 0xa949, 0x1481: 0xa981, 0x1482: 0xa9b9, 0x1483: 0xa8a1, 0x1484: 0x9bb9, 0x1485: 0x9989, - 0x1486: 0xa9f1, 0x1487: 0xaa29, 0x1488: 0x0040, 0x1489: 0x0040, 0x148a: 0x0040, 0x148b: 0x0040, - 0x148c: 0x0040, 0x148d: 0x0040, 0x148e: 0x0040, 0x148f: 0x0040, 0x1490: 0x0040, 0x1491: 0x0040, - 0x1492: 0x0040, 0x1493: 0x0040, 0x1494: 0x0040, 0x1495: 0x0040, 0x1496: 0x0040, 0x1497: 0x0040, - 0x1498: 0x0040, 0x1499: 0x0040, 0x149a: 0x0040, 0x149b: 0x0040, 0x149c: 0x0040, 0x149d: 0x0040, - 0x149e: 0x0040, 0x149f: 0x0040, 0x14a0: 0x0040, 0x14a1: 0x0040, 0x14a2: 0x0040, 0x14a3: 0x0040, - 0x14a4: 0x0040, 0x14a5: 0x0040, 0x14a6: 0x0040, 0x14a7: 0x0040, 0x14a8: 0x0040, 0x14a9: 0x0040, - 0x14aa: 0x0040, 0x14ab: 0x0040, 0x14ac: 0x0040, 0x14ad: 0x0040, 0x14ae: 0x0040, 0x14af: 0x0040, - 0x14b0: 0xaa61, 0x14b1: 0xaa99, 0x14b2: 0xaad1, 0x14b3: 0xab19, 0x14b4: 0xab61, 0x14b5: 0xaba9, - 0x14b6: 0xabf1, 0x14b7: 0xac39, 0x14b8: 0xac81, 0x14b9: 0xacc9, 0x14ba: 0xad02, 0x14bb: 0xae12, - 0x14bc: 0xae91, 0x14bd: 0x0018, 0x14be: 0x0040, 0x14bf: 0x0040, + 0x1480: 0x9329, 0x1481: 0x9351, 0x1482: 0x9379, 0x1483: 0x93a1, 0x1484: 0x93c9, 0x1485: 0x93f1, + 0x1486: 0x9419, 0x1487: 0x9441, 0x1488: 0x9469, 0x1489: 0x9491, 0x148a: 0x94b9, 0x148b: 0x94e1, + 0x148c: 0x9079, 0x148d: 0x9509, 0x148e: 0x9531, 0x148f: 0x9559, 0x1490: 0x9581, 0x1491: 0x9171, + 0x1492: 0x9199, 0x1493: 0x91c1, 0x1494: 0x91e9, 0x1495: 0x9211, 0x1496: 0x9239, 0x1497: 0x9261, + 0x1498: 0x9289, 0x1499: 0x92b1, 0x149a: 0x92d9, 0x149b: 0x9301, 0x149c: 0x9329, 0x149d: 0x9351, + 0x149e: 0x9379, 0x149f: 0x93a1, 0x14a0: 0x93c9, 0x14a1: 0x93f1, 0x14a2: 0x9419, 0x14a3: 0x9441, + 0x14a4: 0x9469, 0x14a5: 0x9491, 0x14a6: 0x94b9, 0x14a7: 0x94e1, 0x14a8: 0x9079, 0x14a9: 0x9509, + 0x14aa: 0x9531, 0x14ab: 0x9559, 0x14ac: 0x9581, 0x14ad: 0x9491, 0x14ae: 0x94b9, 0x14af: 0x94e1, + 0x14b0: 0x9079, 0x14b1: 0x9051, 0x14b2: 0x90a1, 0x14b3: 0x8211, 0x14b4: 0x8059, 0x14b5: 0x8081, + 0x14b6: 0x80a9, 0x14b7: 0x9491, 0x14b8: 0x94b9, 0x14b9: 0x94e1, 0x14ba: 0x8211, 0x14bb: 0x8239, + 0x14bc: 0x95a9, 0x14bd: 0x95a9, 0x14be: 0x0018, 0x14bf: 0x0018, // Block 0x53, offset 0x14c0 - 0x14c0: 0x13c0, 0x14c1: 0x13c0, 0x14c2: 0x13c0, 0x14c3: 0x13c0, 0x14c4: 0x13c0, 0x14c5: 0x13c0, - 0x14c6: 0x13c0, 0x14c7: 0x13c0, 0x14c8: 0x13c0, 0x14c9: 0x13c0, 0x14ca: 0x13c0, 0x14cb: 0x13c0, - 0x14cc: 0x13c0, 0x14cd: 0x13c0, 0x14ce: 0x13c0, 0x14cf: 0x13c0, 0x14d0: 0xaeda, 0x14d1: 0x7d55, - 0x14d2: 0x0040, 0x14d3: 0xaeea, 0x14d4: 0x03c2, 0x14d5: 0xaefa, 0x14d6: 0xaf0a, 0x14d7: 0x7d75, - 0x14d8: 0x7d95, 0x14d9: 0x0040, 0x14da: 0x0040, 0x14db: 0x0040, 0x14dc: 0x0040, 0x14dd: 0x0040, - 0x14de: 0x0040, 0x14df: 0x0040, 0x14e0: 0x1308, 0x14e1: 0x1308, 0x14e2: 0x1308, 0x14e3: 0x1308, - 0x14e4: 0x1308, 0x14e5: 0x1308, 0x14e6: 0x1308, 0x14e7: 0x1308, 0x14e8: 0x1308, 0x14e9: 0x1308, - 0x14ea: 0x1308, 0x14eb: 0x1308, 0x14ec: 0x1308, 0x14ed: 0x1308, 0x14ee: 0x1308, 0x14ef: 0x1308, - 0x14f0: 0x0040, 0x14f1: 0x7db5, 0x14f2: 0x7dd5, 0x14f3: 0xaf1a, 0x14f4: 0xaf1a, 0x14f5: 0x1fd2, - 0x14f6: 0x1fe2, 0x14f7: 0xaf2a, 0x14f8: 0xaf3a, 0x14f9: 0x7df5, 0x14fa: 0x7e15, 0x14fb: 0x7e35, - 0x14fc: 0x7df5, 0x14fd: 0x7e55, 0x14fe: 0x7e75, 0x14ff: 0x7e55, + 0x14c0: 0x0040, 0x14c1: 0x0040, 0x14c2: 0x0040, 0x14c3: 0x0040, 0x14c4: 0x0040, 0x14c5: 0x0040, + 0x14c6: 0x0040, 0x14c7: 0x0040, 0x14c8: 0x0040, 0x14c9: 0x0040, 0x14ca: 0x0040, 0x14cb: 0x0040, + 0x14cc: 0x0040, 0x14cd: 0x0040, 0x14ce: 0x0040, 0x14cf: 0x0040, 0x14d0: 0x95d1, 0x14d1: 0x9609, + 0x14d2: 0x9609, 0x14d3: 0x9641, 0x14d4: 0x9679, 0x14d5: 0x96b1, 0x14d6: 0x96e9, 0x14d7: 0x9721, + 0x14d8: 0x9759, 0x14d9: 0x9759, 0x14da: 0x9791, 0x14db: 0x97c9, 0x14dc: 0x9801, 0x14dd: 0x9839, + 0x14de: 0x9871, 0x14df: 0x98a9, 0x14e0: 0x98a9, 0x14e1: 0x98e1, 0x14e2: 0x9919, 0x14e3: 0x9919, + 0x14e4: 0x9951, 0x14e5: 0x9951, 0x14e6: 0x9989, 0x14e7: 0x99c1, 0x14e8: 0x99c1, 0x14e9: 0x99f9, + 0x14ea: 0x9a31, 0x14eb: 0x9a31, 0x14ec: 0x9a69, 0x14ed: 0x9a69, 0x14ee: 0x9aa1, 0x14ef: 0x9ad9, + 0x14f0: 0x9ad9, 0x14f1: 0x9b11, 0x14f2: 0x9b11, 0x14f3: 0x9b49, 0x14f4: 0x9b81, 0x14f5: 0x9bb9, + 0x14f6: 0x9bf1, 0x14f7: 0x9bf1, 0x14f8: 0x9c29, 0x14f9: 0x9c61, 0x14fa: 0x9c99, 0x14fb: 0x9cd1, + 0x14fc: 0x9d09, 0x14fd: 0x9d09, 0x14fe: 0x9d41, 0x14ff: 0x9d79, // Block 0x54, offset 0x1500 - 0x1500: 0x7e95, 0x1501: 0x7eb5, 0x1502: 0x7ed5, 0x1503: 0x7eb5, 0x1504: 0x7ef5, 0x1505: 0x0018, - 0x1506: 0x0018, 0x1507: 0xaf4a, 0x1508: 0xaf5a, 0x1509: 0x7f16, 0x150a: 0x7f36, 0x150b: 0x7f56, - 0x150c: 0x7f76, 0x150d: 0xaf1a, 0x150e: 0xaf1a, 0x150f: 0xaf1a, 0x1510: 0xaeda, 0x1511: 0x7f95, - 0x1512: 0x0040, 0x1513: 0x0040, 0x1514: 0x03c2, 0x1515: 0xaeea, 0x1516: 0xaf0a, 0x1517: 0xaefa, - 0x1518: 0x7fb5, 0x1519: 0x1fd2, 0x151a: 0x1fe2, 0x151b: 0xaf2a, 0x151c: 0xaf3a, 0x151d: 0x7e95, - 0x151e: 0x7ef5, 0x151f: 0xaf6a, 0x1520: 0xaf7a, 0x1521: 0xaf8a, 0x1522: 0x1fb2, 0x1523: 0xaf99, - 0x1524: 0xafaa, 0x1525: 0xafba, 0x1526: 0x1fc2, 0x1527: 0x0040, 0x1528: 0xafca, 0x1529: 0xafda, - 0x152a: 0xafea, 0x152b: 0xaffa, 0x152c: 0x0040, 0x152d: 0x0040, 0x152e: 0x0040, 0x152f: 0x0040, - 0x1530: 0x7fd6, 0x1531: 0xb009, 0x1532: 0x7ff6, 0x1533: 0x0008, 0x1534: 0x8016, 0x1535: 0x0040, - 0x1536: 0x8036, 0x1537: 0xb031, 0x1538: 0x8056, 0x1539: 0xb059, 0x153a: 0x8076, 0x153b: 0xb081, - 0x153c: 0x8096, 0x153d: 0xb0a9, 0x153e: 0x80b6, 0x153f: 0xb0d1, + 0x1500: 0xa949, 0x1501: 0xa981, 0x1502: 0xa9b9, 0x1503: 0xa8a1, 0x1504: 0x9bb9, 0x1505: 0x9989, + 0x1506: 0xa9f1, 0x1507: 0xaa29, 0x1508: 0x0040, 0x1509: 0x0040, 0x150a: 0x0040, 0x150b: 0x0040, + 0x150c: 0x0040, 0x150d: 0x0040, 0x150e: 0x0040, 0x150f: 0x0040, 0x1510: 0x0040, 0x1511: 0x0040, + 0x1512: 0x0040, 0x1513: 0x0040, 0x1514: 0x0040, 0x1515: 0x0040, 0x1516: 0x0040, 0x1517: 0x0040, + 0x1518: 0x0040, 0x1519: 0x0040, 0x151a: 0x0040, 0x151b: 0x0040, 0x151c: 0x0040, 0x151d: 0x0040, + 0x151e: 0x0040, 0x151f: 0x0040, 0x1520: 0x0040, 0x1521: 0x0040, 0x1522: 0x0040, 0x1523: 0x0040, + 0x1524: 0x0040, 0x1525: 0x0040, 0x1526: 0x0040, 0x1527: 0x0040, 0x1528: 0x0040, 0x1529: 0x0040, + 0x152a: 0x0040, 0x152b: 0x0040, 0x152c: 0x0040, 0x152d: 0x0040, 0x152e: 0x0040, 0x152f: 0x0040, + 0x1530: 0xaa61, 0x1531: 0xaa99, 0x1532: 0xaad1, 0x1533: 0xab19, 0x1534: 0xab61, 0x1535: 0xaba9, + 0x1536: 0xabf1, 0x1537: 0xac39, 0x1538: 0xac81, 0x1539: 0xacc9, 0x153a: 0xad02, 0x153b: 0xae12, + 0x153c: 0xae91, 0x153d: 0x0018, 0x153e: 0x0040, 0x153f: 0x0040, // Block 0x55, offset 0x1540 - 0x1540: 0xb0f9, 0x1541: 0xb111, 0x1542: 0xb111, 0x1543: 0xb129, 0x1544: 0xb129, 0x1545: 0xb141, - 0x1546: 0xb141, 0x1547: 0xb159, 0x1548: 0xb159, 0x1549: 0xb171, 0x154a: 0xb171, 0x154b: 0xb171, - 0x154c: 0xb171, 0x154d: 0xb189, 0x154e: 0xb189, 0x154f: 0xb1a1, 0x1550: 0xb1a1, 0x1551: 0xb1a1, - 0x1552: 0xb1a1, 0x1553: 0xb1b9, 0x1554: 0xb1b9, 0x1555: 0xb1d1, 0x1556: 0xb1d1, 0x1557: 0xb1d1, - 0x1558: 0xb1d1, 0x1559: 0xb1e9, 0x155a: 0xb1e9, 0x155b: 0xb1e9, 0x155c: 0xb1e9, 0x155d: 0xb201, - 0x155e: 0xb201, 0x155f: 0xb201, 0x1560: 0xb201, 0x1561: 0xb219, 0x1562: 0xb219, 0x1563: 0xb219, - 0x1564: 0xb219, 0x1565: 0xb231, 0x1566: 0xb231, 0x1567: 0xb231, 0x1568: 0xb231, 0x1569: 0xb249, - 0x156a: 0xb249, 0x156b: 0xb261, 0x156c: 0xb261, 0x156d: 0xb279, 0x156e: 0xb279, 0x156f: 0xb291, - 0x1570: 0xb291, 0x1571: 0xb2a9, 0x1572: 0xb2a9, 0x1573: 0xb2a9, 0x1574: 0xb2a9, 0x1575: 0xb2c1, - 0x1576: 0xb2c1, 0x1577: 0xb2c1, 0x1578: 0xb2c1, 0x1579: 0xb2d9, 0x157a: 0xb2d9, 0x157b: 0xb2d9, - 0x157c: 0xb2d9, 0x157d: 0xb2f1, 0x157e: 0xb2f1, 0x157f: 0xb2f1, + 0x1540: 0x33c0, 0x1541: 0x33c0, 0x1542: 0x33c0, 0x1543: 0x33c0, 0x1544: 0x33c0, 0x1545: 0x33c0, + 0x1546: 0x33c0, 0x1547: 0x33c0, 0x1548: 0x33c0, 0x1549: 0x33c0, 0x154a: 0x33c0, 0x154b: 0x33c0, + 0x154c: 0x33c0, 0x154d: 0x33c0, 0x154e: 0x33c0, 0x154f: 0x33c0, 0x1550: 0xaeda, 0x1551: 0x7d55, + 0x1552: 0x0040, 0x1553: 0xaeea, 0x1554: 0x03c2, 0x1555: 0xaefa, 0x1556: 0xaf0a, 0x1557: 0x7d75, + 0x1558: 0x7d95, 0x1559: 0x0040, 0x155a: 0x0040, 0x155b: 0x0040, 0x155c: 0x0040, 0x155d: 0x0040, + 0x155e: 0x0040, 0x155f: 0x0040, 0x1560: 0x3308, 0x1561: 0x3308, 0x1562: 0x3308, 0x1563: 0x3308, + 0x1564: 0x3308, 0x1565: 0x3308, 0x1566: 0x3308, 0x1567: 0x3308, 0x1568: 0x3308, 0x1569: 0x3308, + 0x156a: 0x3308, 0x156b: 0x3308, 0x156c: 0x3308, 0x156d: 0x3308, 0x156e: 0x3308, 0x156f: 0x3308, + 0x1570: 0x0040, 0x1571: 0x7db5, 0x1572: 0x7dd5, 0x1573: 0xaf1a, 0x1574: 0xaf1a, 0x1575: 0x1fd2, + 0x1576: 0x1fe2, 0x1577: 0xaf2a, 0x1578: 0xaf3a, 0x1579: 0x7df5, 0x157a: 0x7e15, 0x157b: 0x7e35, + 0x157c: 0x7df5, 0x157d: 0x7e55, 0x157e: 0x7e75, 0x157f: 0x7e55, // Block 0x56, offset 0x1580 - 0x1580: 0xb2f1, 0x1581: 0xb309, 0x1582: 0xb309, 0x1583: 0xb309, 0x1584: 0xb309, 0x1585: 0xb321, - 0x1586: 0xb321, 0x1587: 0xb321, 0x1588: 0xb321, 0x1589: 0xb339, 0x158a: 0xb339, 0x158b: 0xb339, - 0x158c: 0xb339, 0x158d: 0xb351, 0x158e: 0xb351, 0x158f: 0xb351, 0x1590: 0xb351, 0x1591: 0xb369, - 0x1592: 0xb369, 0x1593: 0xb369, 0x1594: 0xb369, 0x1595: 0xb381, 0x1596: 0xb381, 0x1597: 0xb381, - 0x1598: 0xb381, 0x1599: 0xb399, 0x159a: 0xb399, 0x159b: 0xb399, 0x159c: 0xb399, 0x159d: 0xb3b1, - 0x159e: 0xb3b1, 0x159f: 0xb3b1, 0x15a0: 0xb3b1, 0x15a1: 0xb3c9, 0x15a2: 0xb3c9, 0x15a3: 0xb3c9, - 0x15a4: 0xb3c9, 0x15a5: 0xb3e1, 0x15a6: 0xb3e1, 0x15a7: 0xb3e1, 0x15a8: 0xb3e1, 0x15a9: 0xb3f9, - 0x15aa: 0xb3f9, 0x15ab: 0xb3f9, 0x15ac: 0xb3f9, 0x15ad: 0xb411, 0x15ae: 0xb411, 0x15af: 0x7ab1, - 0x15b0: 0x7ab1, 0x15b1: 0xb429, 0x15b2: 0xb429, 0x15b3: 0xb429, 0x15b4: 0xb429, 0x15b5: 0xb441, - 0x15b6: 0xb441, 0x15b7: 0xb469, 0x15b8: 0xb469, 0x15b9: 0xb491, 0x15ba: 0xb491, 0x15bb: 0xb4b9, - 0x15bc: 0xb4b9, 0x15bd: 0x0040, 0x15be: 0x0040, 0x15bf: 0x03c0, + 0x1580: 0x7e95, 0x1581: 0x7eb5, 0x1582: 0x7ed5, 0x1583: 0x7eb5, 0x1584: 0x7ef5, 0x1585: 0x0018, + 0x1586: 0x0018, 0x1587: 0xaf4a, 0x1588: 0xaf5a, 0x1589: 0x7f16, 0x158a: 0x7f36, 0x158b: 0x7f56, + 0x158c: 0x7f76, 0x158d: 0xaf1a, 0x158e: 0xaf1a, 0x158f: 0xaf1a, 0x1590: 0xaeda, 0x1591: 0x7f95, + 0x1592: 0x0040, 0x1593: 0x0040, 0x1594: 0x03c2, 0x1595: 0xaeea, 0x1596: 0xaf0a, 0x1597: 0xaefa, + 0x1598: 0x7fb5, 0x1599: 0x1fd2, 0x159a: 0x1fe2, 0x159b: 0xaf2a, 0x159c: 0xaf3a, 0x159d: 0x7e95, + 0x159e: 0x7ef5, 0x159f: 0xaf6a, 0x15a0: 0xaf7a, 0x15a1: 0xaf8a, 0x15a2: 0x1fb2, 0x15a3: 0xaf99, + 0x15a4: 0xafaa, 0x15a5: 0xafba, 0x15a6: 0x1fc2, 0x15a7: 0x0040, 0x15a8: 0xafca, 0x15a9: 0xafda, + 0x15aa: 0xafea, 0x15ab: 0xaffa, 0x15ac: 0x0040, 0x15ad: 0x0040, 0x15ae: 0x0040, 0x15af: 0x0040, + 0x15b0: 0x7fd6, 0x15b1: 0xb009, 0x15b2: 0x7ff6, 0x15b3: 0x0808, 0x15b4: 0x8016, 0x15b5: 0x0040, + 0x15b6: 0x8036, 0x15b7: 0xb031, 0x15b8: 0x8056, 0x15b9: 0xb059, 0x15ba: 0x8076, 0x15bb: 0xb081, + 0x15bc: 0x8096, 0x15bd: 0xb0a9, 0x15be: 0x80b6, 0x15bf: 0xb0d1, // Block 0x57, offset 0x15c0 - 0x15c0: 0x0040, 0x15c1: 0xaefa, 0x15c2: 0xb4e2, 0x15c3: 0xaf6a, 0x15c4: 0xafda, 0x15c5: 0xafea, - 0x15c6: 0xaf7a, 0x15c7: 0xb4f2, 0x15c8: 0x1fd2, 0x15c9: 0x1fe2, 0x15ca: 0xaf8a, 0x15cb: 0x1fb2, - 0x15cc: 0xaeda, 0x15cd: 0xaf99, 0x15ce: 0x29d1, 0x15cf: 0xb502, 0x15d0: 0x1f41, 0x15d1: 0x00c9, - 0x15d2: 0x0069, 0x15d3: 0x0079, 0x15d4: 0x1f51, 0x15d5: 0x1f61, 0x15d6: 0x1f71, 0x15d7: 0x1f81, - 0x15d8: 0x1f91, 0x15d9: 0x1fa1, 0x15da: 0xaeea, 0x15db: 0x03c2, 0x15dc: 0xafaa, 0x15dd: 0x1fc2, - 0x15de: 0xafba, 0x15df: 0xaf0a, 0x15e0: 0xaffa, 0x15e1: 0x0039, 0x15e2: 0x0ee9, 0x15e3: 0x1159, - 0x15e4: 0x0ef9, 0x15e5: 0x0f09, 0x15e6: 0x1199, 0x15e7: 0x0f31, 0x15e8: 0x0249, 0x15e9: 0x0f41, - 0x15ea: 0x0259, 0x15eb: 0x0f51, 0x15ec: 0x0359, 0x15ed: 0x0f61, 0x15ee: 0x0f71, 0x15ef: 0x00d9, - 0x15f0: 0x0f99, 0x15f1: 0x2039, 0x15f2: 0x0269, 0x15f3: 0x01d9, 0x15f4: 0x0fa9, 0x15f5: 0x0fb9, - 0x15f6: 0x1089, 0x15f7: 0x0279, 0x15f8: 0x0369, 0x15f9: 0x0289, 0x15fa: 0x13d1, 0x15fb: 0xaf4a, - 0x15fc: 0xafca, 0x15fd: 0xaf5a, 0x15fe: 0xb512, 0x15ff: 0xaf1a, + 0x15c0: 0xb0f9, 0x15c1: 0xb111, 0x15c2: 0xb111, 0x15c3: 0xb129, 0x15c4: 0xb129, 0x15c5: 0xb141, + 0x15c6: 0xb141, 0x15c7: 0xb159, 0x15c8: 0xb159, 0x15c9: 0xb171, 0x15ca: 0xb171, 0x15cb: 0xb171, + 0x15cc: 0xb171, 0x15cd: 0xb189, 0x15ce: 0xb189, 0x15cf: 0xb1a1, 0x15d0: 0xb1a1, 0x15d1: 0xb1a1, + 0x15d2: 0xb1a1, 0x15d3: 0xb1b9, 0x15d4: 0xb1b9, 0x15d5: 0xb1d1, 0x15d6: 0xb1d1, 0x15d7: 0xb1d1, + 0x15d8: 0xb1d1, 0x15d9: 0xb1e9, 0x15da: 0xb1e9, 0x15db: 0xb1e9, 0x15dc: 0xb1e9, 0x15dd: 0xb201, + 0x15de: 0xb201, 0x15df: 0xb201, 0x15e0: 0xb201, 0x15e1: 0xb219, 0x15e2: 0xb219, 0x15e3: 0xb219, + 0x15e4: 0xb219, 0x15e5: 0xb231, 0x15e6: 0xb231, 0x15e7: 0xb231, 0x15e8: 0xb231, 0x15e9: 0xb249, + 0x15ea: 0xb249, 0x15eb: 0xb261, 0x15ec: 0xb261, 0x15ed: 0xb279, 0x15ee: 0xb279, 0x15ef: 0xb291, + 0x15f0: 0xb291, 0x15f1: 0xb2a9, 0x15f2: 0xb2a9, 0x15f3: 0xb2a9, 0x15f4: 0xb2a9, 0x15f5: 0xb2c1, + 0x15f6: 0xb2c1, 0x15f7: 0xb2c1, 0x15f8: 0xb2c1, 0x15f9: 0xb2d9, 0x15fa: 0xb2d9, 0x15fb: 0xb2d9, + 0x15fc: 0xb2d9, 0x15fd: 0xb2f1, 0x15fe: 0xb2f1, 0x15ff: 0xb2f1, // Block 0x58, offset 0x1600 - 0x1600: 0x1caa, 0x1601: 0x0039, 0x1602: 0x0ee9, 0x1603: 0x1159, 0x1604: 0x0ef9, 0x1605: 0x0f09, - 0x1606: 0x1199, 0x1607: 0x0f31, 0x1608: 0x0249, 0x1609: 0x0f41, 0x160a: 0x0259, 0x160b: 0x0f51, - 0x160c: 0x0359, 0x160d: 0x0f61, 0x160e: 0x0f71, 0x160f: 0x00d9, 0x1610: 0x0f99, 0x1611: 0x2039, - 0x1612: 0x0269, 0x1613: 0x01d9, 0x1614: 0x0fa9, 0x1615: 0x0fb9, 0x1616: 0x1089, 0x1617: 0x0279, - 0x1618: 0x0369, 0x1619: 0x0289, 0x161a: 0x13d1, 0x161b: 0xaf2a, 0x161c: 0xb522, 0x161d: 0xaf3a, - 0x161e: 0xb532, 0x161f: 0x80d5, 0x1620: 0x80f5, 0x1621: 0x29d1, 0x1622: 0x8115, 0x1623: 0x8115, - 0x1624: 0x8135, 0x1625: 0x8155, 0x1626: 0x8175, 0x1627: 0x8195, 0x1628: 0x81b5, 0x1629: 0x81d5, - 0x162a: 0x81f5, 0x162b: 0x8215, 0x162c: 0x8235, 0x162d: 0x8255, 0x162e: 0x8275, 0x162f: 0x8295, - 0x1630: 0x82b5, 0x1631: 0x82d5, 0x1632: 0x82f5, 0x1633: 0x8315, 0x1634: 0x8335, 0x1635: 0x8355, - 0x1636: 0x8375, 0x1637: 0x8395, 0x1638: 0x83b5, 0x1639: 0x83d5, 0x163a: 0x83f5, 0x163b: 0x8415, - 0x163c: 0x81b5, 0x163d: 0x8435, 0x163e: 0x8455, 0x163f: 0x8215, + 0x1600: 0xb2f1, 0x1601: 0xb309, 0x1602: 0xb309, 0x1603: 0xb309, 0x1604: 0xb309, 0x1605: 0xb321, + 0x1606: 0xb321, 0x1607: 0xb321, 0x1608: 0xb321, 0x1609: 0xb339, 0x160a: 0xb339, 0x160b: 0xb339, + 0x160c: 0xb339, 0x160d: 0xb351, 0x160e: 0xb351, 0x160f: 0xb351, 0x1610: 0xb351, 0x1611: 0xb369, + 0x1612: 0xb369, 0x1613: 0xb369, 0x1614: 0xb369, 0x1615: 0xb381, 0x1616: 0xb381, 0x1617: 0xb381, + 0x1618: 0xb381, 0x1619: 0xb399, 0x161a: 0xb399, 0x161b: 0xb399, 0x161c: 0xb399, 0x161d: 0xb3b1, + 0x161e: 0xb3b1, 0x161f: 0xb3b1, 0x1620: 0xb3b1, 0x1621: 0xb3c9, 0x1622: 0xb3c9, 0x1623: 0xb3c9, + 0x1624: 0xb3c9, 0x1625: 0xb3e1, 0x1626: 0xb3e1, 0x1627: 0xb3e1, 0x1628: 0xb3e1, 0x1629: 0xb3f9, + 0x162a: 0xb3f9, 0x162b: 0xb3f9, 0x162c: 0xb3f9, 0x162d: 0xb411, 0x162e: 0xb411, 0x162f: 0x7ab1, + 0x1630: 0x7ab1, 0x1631: 0xb429, 0x1632: 0xb429, 0x1633: 0xb429, 0x1634: 0xb429, 0x1635: 0xb441, + 0x1636: 0xb441, 0x1637: 0xb469, 0x1638: 0xb469, 0x1639: 0xb491, 0x163a: 0xb491, 0x163b: 0xb4b9, + 0x163c: 0xb4b9, 0x163d: 0x0040, 0x163e: 0x0040, 0x163f: 0x03c0, // Block 0x59, offset 0x1640 - 0x1640: 0x8475, 0x1641: 0x8495, 0x1642: 0x84b5, 0x1643: 0x84d5, 0x1644: 0x84f5, 0x1645: 0x8515, - 0x1646: 0x8535, 0x1647: 0x8555, 0x1648: 0x84d5, 0x1649: 0x8575, 0x164a: 0x84d5, 0x164b: 0x8595, - 0x164c: 0x8595, 0x164d: 0x85b5, 0x164e: 0x85b5, 0x164f: 0x85d5, 0x1650: 0x8515, 0x1651: 0x85f5, - 0x1652: 0x8615, 0x1653: 0x85f5, 0x1654: 0x8635, 0x1655: 0x8615, 0x1656: 0x8655, 0x1657: 0x8655, - 0x1658: 0x8675, 0x1659: 0x8675, 0x165a: 0x8695, 0x165b: 0x8695, 0x165c: 0x8615, 0x165d: 0x8115, - 0x165e: 0x86b5, 0x165f: 0x86d5, 0x1660: 0x0040, 0x1661: 0x86f5, 0x1662: 0x8715, 0x1663: 0x8735, - 0x1664: 0x8755, 0x1665: 0x8735, 0x1666: 0x8775, 0x1667: 0x8795, 0x1668: 0x87b5, 0x1669: 0x87b5, - 0x166a: 0x87d5, 0x166b: 0x87d5, 0x166c: 0x87f5, 0x166d: 0x87f5, 0x166e: 0x87d5, 0x166f: 0x87d5, - 0x1670: 0x8815, 0x1671: 0x8835, 0x1672: 0x8855, 0x1673: 0x8875, 0x1674: 0x8895, 0x1675: 0x88b5, - 0x1676: 0x88b5, 0x1677: 0x88b5, 0x1678: 0x88d5, 0x1679: 0x88d5, 0x167a: 0x88d5, 0x167b: 0x88d5, - 0x167c: 0x87b5, 0x167d: 0x87b5, 0x167e: 0x87b5, 0x167f: 0x0040, + 0x1640: 0x0040, 0x1641: 0xaefa, 0x1642: 0xb4e2, 0x1643: 0xaf6a, 0x1644: 0xafda, 0x1645: 0xafea, + 0x1646: 0xaf7a, 0x1647: 0xb4f2, 0x1648: 0x1fd2, 0x1649: 0x1fe2, 0x164a: 0xaf8a, 0x164b: 0x1fb2, + 0x164c: 0xaeda, 0x164d: 0xaf99, 0x164e: 0x29d1, 0x164f: 0xb502, 0x1650: 0x1f41, 0x1651: 0x00c9, + 0x1652: 0x0069, 0x1653: 0x0079, 0x1654: 0x1f51, 0x1655: 0x1f61, 0x1656: 0x1f71, 0x1657: 0x1f81, + 0x1658: 0x1f91, 0x1659: 0x1fa1, 0x165a: 0xaeea, 0x165b: 0x03c2, 0x165c: 0xafaa, 0x165d: 0x1fc2, + 0x165e: 0xafba, 0x165f: 0xaf0a, 0x1660: 0xaffa, 0x1661: 0x0039, 0x1662: 0x0ee9, 0x1663: 0x1159, + 0x1664: 0x0ef9, 0x1665: 0x0f09, 0x1666: 0x1199, 0x1667: 0x0f31, 0x1668: 0x0249, 0x1669: 0x0f41, + 0x166a: 0x0259, 0x166b: 0x0f51, 0x166c: 0x0359, 0x166d: 0x0f61, 0x166e: 0x0f71, 0x166f: 0x00d9, + 0x1670: 0x0f99, 0x1671: 0x2039, 0x1672: 0x0269, 0x1673: 0x01d9, 0x1674: 0x0fa9, 0x1675: 0x0fb9, + 0x1676: 0x1089, 0x1677: 0x0279, 0x1678: 0x0369, 0x1679: 0x0289, 0x167a: 0x13d1, 0x167b: 0xaf4a, + 0x167c: 0xafca, 0x167d: 0xaf5a, 0x167e: 0xb512, 0x167f: 0xaf1a, // Block 0x5a, offset 0x1680 - 0x1680: 0x0040, 0x1681: 0x0040, 0x1682: 0x8715, 0x1683: 0x86f5, 0x1684: 0x88f5, 0x1685: 0x86f5, - 0x1686: 0x8715, 0x1687: 0x86f5, 0x1688: 0x0040, 0x1689: 0x0040, 0x168a: 0x8915, 0x168b: 0x8715, - 0x168c: 0x8935, 0x168d: 0x88f5, 0x168e: 0x8935, 0x168f: 0x8715, 0x1690: 0x0040, 0x1691: 0x0040, - 0x1692: 0x8955, 0x1693: 0x8975, 0x1694: 0x8875, 0x1695: 0x8935, 0x1696: 0x88f5, 0x1697: 0x8935, - 0x1698: 0x0040, 0x1699: 0x0040, 0x169a: 0x8995, 0x169b: 0x89b5, 0x169c: 0x8995, 0x169d: 0x0040, - 0x169e: 0x0040, 0x169f: 0x0040, 0x16a0: 0xb541, 0x16a1: 0xb559, 0x16a2: 0xb571, 0x16a3: 0x89d6, - 0x16a4: 0xb589, 0x16a5: 0xb5a1, 0x16a6: 0x89f5, 0x16a7: 0x0040, 0x16a8: 0x8a15, 0x16a9: 0x8a35, - 0x16aa: 0x8a55, 0x16ab: 0x8a35, 0x16ac: 0x8a75, 0x16ad: 0x8a95, 0x16ae: 0x8ab5, 0x16af: 0x0040, - 0x16b0: 0x0040, 0x16b1: 0x0040, 0x16b2: 0x0040, 0x16b3: 0x0040, 0x16b4: 0x0040, 0x16b5: 0x0040, - 0x16b6: 0x0040, 0x16b7: 0x0040, 0x16b8: 0x0040, 0x16b9: 0x0340, 0x16ba: 0x0340, 0x16bb: 0x0340, - 0x16bc: 0x0040, 0x16bd: 0x0040, 0x16be: 0x0040, 0x16bf: 0x0040, + 0x1680: 0x1caa, 0x1681: 0x0039, 0x1682: 0x0ee9, 0x1683: 0x1159, 0x1684: 0x0ef9, 0x1685: 0x0f09, + 0x1686: 0x1199, 0x1687: 0x0f31, 0x1688: 0x0249, 0x1689: 0x0f41, 0x168a: 0x0259, 0x168b: 0x0f51, + 0x168c: 0x0359, 0x168d: 0x0f61, 0x168e: 0x0f71, 0x168f: 0x00d9, 0x1690: 0x0f99, 0x1691: 0x2039, + 0x1692: 0x0269, 0x1693: 0x01d9, 0x1694: 0x0fa9, 0x1695: 0x0fb9, 0x1696: 0x1089, 0x1697: 0x0279, + 0x1698: 0x0369, 0x1699: 0x0289, 0x169a: 0x13d1, 0x169b: 0xaf2a, 0x169c: 0xb522, 0x169d: 0xaf3a, + 0x169e: 0xb532, 0x169f: 0x80d5, 0x16a0: 0x80f5, 0x16a1: 0x29d1, 0x16a2: 0x8115, 0x16a3: 0x8115, + 0x16a4: 0x8135, 0x16a5: 0x8155, 0x16a6: 0x8175, 0x16a7: 0x8195, 0x16a8: 0x81b5, 0x16a9: 0x81d5, + 0x16aa: 0x81f5, 0x16ab: 0x8215, 0x16ac: 0x8235, 0x16ad: 0x8255, 0x16ae: 0x8275, 0x16af: 0x8295, + 0x16b0: 0x82b5, 0x16b1: 0x82d5, 0x16b2: 0x82f5, 0x16b3: 0x8315, 0x16b4: 0x8335, 0x16b5: 0x8355, + 0x16b6: 0x8375, 0x16b7: 0x8395, 0x16b8: 0x83b5, 0x16b9: 0x83d5, 0x16ba: 0x83f5, 0x16bb: 0x8415, + 0x16bc: 0x81b5, 0x16bd: 0x8435, 0x16be: 0x8455, 0x16bf: 0x8215, // Block 0x5b, offset 0x16c0 - 0x16c0: 0x0208, 0x16c1: 0x0208, 0x16c2: 0x0208, 0x16c3: 0x0208, 0x16c4: 0x0208, 0x16c5: 0x0408, - 0x16c6: 0x0008, 0x16c7: 0x0408, 0x16c8: 0x0018, 0x16c9: 0x0408, 0x16ca: 0x0408, 0x16cb: 0x0008, - 0x16cc: 0x0008, 0x16cd: 0x0108, 0x16ce: 0x0408, 0x16cf: 0x0408, 0x16d0: 0x0408, 0x16d1: 0x0408, - 0x16d2: 0x0408, 0x16d3: 0x0208, 0x16d4: 0x0208, 0x16d5: 0x0208, 0x16d6: 0x0208, 0x16d7: 0x0108, - 0x16d8: 0x0208, 0x16d9: 0x0208, 0x16da: 0x0208, 0x16db: 0x0208, 0x16dc: 0x0208, 0x16dd: 0x0408, - 0x16de: 0x0208, 0x16df: 0x0208, 0x16e0: 0x0208, 0x16e1: 0x0408, 0x16e2: 0x0008, 0x16e3: 0x0008, - 0x16e4: 0x0408, 0x16e5: 0x1308, 0x16e6: 0x1308, 0x16e7: 0x0040, 0x16e8: 0x0040, 0x16e9: 0x0040, - 0x16ea: 0x0040, 0x16eb: 0x0218, 0x16ec: 0x0218, 0x16ed: 0x0218, 0x16ee: 0x0218, 0x16ef: 0x0418, - 0x16f0: 0x0018, 0x16f1: 0x0018, 0x16f2: 0x0018, 0x16f3: 0x0018, 0x16f4: 0x0018, 0x16f5: 0x0018, - 0x16f6: 0x0018, 0x16f7: 0x0040, 0x16f8: 0x0040, 0x16f9: 0x0040, 0x16fa: 0x0040, 0x16fb: 0x0040, - 0x16fc: 0x0040, 0x16fd: 0x0040, 0x16fe: 0x0040, 0x16ff: 0x0040, + 0x16c0: 0x8475, 0x16c1: 0x8495, 0x16c2: 0x84b5, 0x16c3: 0x84d5, 0x16c4: 0x84f5, 0x16c5: 0x8515, + 0x16c6: 0x8535, 0x16c7: 0x8555, 0x16c8: 0x84d5, 0x16c9: 0x8575, 0x16ca: 0x84d5, 0x16cb: 0x8595, + 0x16cc: 0x8595, 0x16cd: 0x85b5, 0x16ce: 0x85b5, 0x16cf: 0x85d5, 0x16d0: 0x8515, 0x16d1: 0x85f5, + 0x16d2: 0x8615, 0x16d3: 0x85f5, 0x16d4: 0x8635, 0x16d5: 0x8615, 0x16d6: 0x8655, 0x16d7: 0x8655, + 0x16d8: 0x8675, 0x16d9: 0x8675, 0x16da: 0x8695, 0x16db: 0x8695, 0x16dc: 0x8615, 0x16dd: 0x8115, + 0x16de: 0x86b5, 0x16df: 0x86d5, 0x16e0: 0x0040, 0x16e1: 0x86f5, 0x16e2: 0x8715, 0x16e3: 0x8735, + 0x16e4: 0x8755, 0x16e5: 0x8735, 0x16e6: 0x8775, 0x16e7: 0x8795, 0x16e8: 0x87b5, 0x16e9: 0x87b5, + 0x16ea: 0x87d5, 0x16eb: 0x87d5, 0x16ec: 0x87f5, 0x16ed: 0x87f5, 0x16ee: 0x87d5, 0x16ef: 0x87d5, + 0x16f0: 0x8815, 0x16f1: 0x8835, 0x16f2: 0x8855, 0x16f3: 0x8875, 0x16f4: 0x8895, 0x16f5: 0x88b5, + 0x16f6: 0x88b5, 0x16f7: 0x88b5, 0x16f8: 0x88d5, 0x16f9: 0x88d5, 0x16fa: 0x88d5, 0x16fb: 0x88d5, + 0x16fc: 0x87b5, 0x16fd: 0x87b5, 0x16fe: 0x87b5, 0x16ff: 0x0040, // Block 0x5c, offset 0x1700 - 0x1700: 0x0208, 0x1701: 0x0408, 0x1702: 0x0208, 0x1703: 0x0408, 0x1704: 0x0408, 0x1705: 0x0408, - 0x1706: 0x0208, 0x1707: 0x0208, 0x1708: 0x0208, 0x1709: 0x0408, 0x170a: 0x0208, 0x170b: 0x0208, - 0x170c: 0x0408, 0x170d: 0x0208, 0x170e: 0x0408, 0x170f: 0x0408, 0x1710: 0x0208, 0x1711: 0x0408, - 0x1712: 0x0040, 0x1713: 0x0040, 0x1714: 0x0040, 0x1715: 0x0040, 0x1716: 0x0040, 0x1717: 0x0040, - 0x1718: 0x0040, 0x1719: 0x0018, 0x171a: 0x0018, 0x171b: 0x0018, 0x171c: 0x0018, 0x171d: 0x0040, - 0x171e: 0x0040, 0x171f: 0x0040, 0x1720: 0x0040, 0x1721: 0x0040, 0x1722: 0x0040, 0x1723: 0x0040, - 0x1724: 0x0040, 0x1725: 0x0040, 0x1726: 0x0040, 0x1727: 0x0040, 0x1728: 0x0040, 0x1729: 0x0418, - 0x172a: 0x0418, 0x172b: 0x0418, 0x172c: 0x0418, 0x172d: 0x0218, 0x172e: 0x0218, 0x172f: 0x0018, + 0x1700: 0x0040, 0x1701: 0x0040, 0x1702: 0x8715, 0x1703: 0x86f5, 0x1704: 0x88f5, 0x1705: 0x86f5, + 0x1706: 0x8715, 0x1707: 0x86f5, 0x1708: 0x0040, 0x1709: 0x0040, 0x170a: 0x8915, 0x170b: 0x8715, + 0x170c: 0x8935, 0x170d: 0x88f5, 0x170e: 0x8935, 0x170f: 0x8715, 0x1710: 0x0040, 0x1711: 0x0040, + 0x1712: 0x8955, 0x1713: 0x8975, 0x1714: 0x8875, 0x1715: 0x8935, 0x1716: 0x88f5, 0x1717: 0x8935, + 0x1718: 0x0040, 0x1719: 0x0040, 0x171a: 0x8995, 0x171b: 0x89b5, 0x171c: 0x8995, 0x171d: 0x0040, + 0x171e: 0x0040, 0x171f: 0x0040, 0x1720: 0xb541, 0x1721: 0xb559, 0x1722: 0xb571, 0x1723: 0x89d6, + 0x1724: 0xb589, 0x1725: 0xb5a1, 0x1726: 0x89f5, 0x1727: 0x0040, 0x1728: 0x8a15, 0x1729: 0x8a35, + 0x172a: 0x8a55, 0x172b: 0x8a35, 0x172c: 0x8a75, 0x172d: 0x8a95, 0x172e: 0x8ab5, 0x172f: 0x0040, 0x1730: 0x0040, 0x1731: 0x0040, 0x1732: 0x0040, 0x1733: 0x0040, 0x1734: 0x0040, 0x1735: 0x0040, - 0x1736: 0x0040, 0x1737: 0x0040, 0x1738: 0x0040, 0x1739: 0x0040, 0x173a: 0x0040, 0x173b: 0x0040, + 0x1736: 0x0040, 0x1737: 0x0040, 0x1738: 0x0040, 0x1739: 0x0340, 0x173a: 0x0340, 0x173b: 0x0340, 0x173c: 0x0040, 0x173d: 0x0040, 0x173e: 0x0040, 0x173f: 0x0040, // Block 0x5d, offset 0x1740 - 0x1740: 0x1308, 0x1741: 0x1308, 0x1742: 0x1008, 0x1743: 0x1008, 0x1744: 0x0040, 0x1745: 0x0008, - 0x1746: 0x0008, 0x1747: 0x0008, 0x1748: 0x0008, 0x1749: 0x0008, 0x174a: 0x0008, 0x174b: 0x0008, - 0x174c: 0x0008, 0x174d: 0x0040, 0x174e: 0x0040, 0x174f: 0x0008, 0x1750: 0x0008, 0x1751: 0x0040, - 0x1752: 0x0040, 0x1753: 0x0008, 0x1754: 0x0008, 0x1755: 0x0008, 0x1756: 0x0008, 0x1757: 0x0008, - 0x1758: 0x0008, 0x1759: 0x0008, 0x175a: 0x0008, 0x175b: 0x0008, 0x175c: 0x0008, 0x175d: 0x0008, - 0x175e: 0x0008, 0x175f: 0x0008, 0x1760: 0x0008, 0x1761: 0x0008, 0x1762: 0x0008, 0x1763: 0x0008, - 0x1764: 0x0008, 0x1765: 0x0008, 0x1766: 0x0008, 0x1767: 0x0008, 0x1768: 0x0008, 0x1769: 0x0040, - 0x176a: 0x0008, 0x176b: 0x0008, 0x176c: 0x0008, 0x176d: 0x0008, 0x176e: 0x0008, 0x176f: 0x0008, - 0x1770: 0x0008, 0x1771: 0x0040, 0x1772: 0x0008, 0x1773: 0x0008, 0x1774: 0x0040, 0x1775: 0x0008, - 0x1776: 0x0008, 0x1777: 0x0008, 0x1778: 0x0008, 0x1779: 0x0008, 0x177a: 0x0040, 0x177b: 0x0040, - 0x177c: 0x1308, 0x177d: 0x0008, 0x177e: 0x1008, 0x177f: 0x1008, + 0x1740: 0x0a08, 0x1741: 0x0a08, 0x1742: 0x0a08, 0x1743: 0x0a08, 0x1744: 0x0a08, 0x1745: 0x0c08, + 0x1746: 0x0808, 0x1747: 0x0c08, 0x1748: 0x0818, 0x1749: 0x0c08, 0x174a: 0x0c08, 0x174b: 0x0808, + 0x174c: 0x0808, 0x174d: 0x0908, 0x174e: 0x0c08, 0x174f: 0x0c08, 0x1750: 0x0c08, 0x1751: 0x0c08, + 0x1752: 0x0c08, 0x1753: 0x0a08, 0x1754: 0x0a08, 0x1755: 0x0a08, 0x1756: 0x0a08, 0x1757: 0x0908, + 0x1758: 0x0a08, 0x1759: 0x0a08, 0x175a: 0x0a08, 0x175b: 0x0a08, 0x175c: 0x0a08, 0x175d: 0x0c08, + 0x175e: 0x0a08, 0x175f: 0x0a08, 0x1760: 0x0a08, 0x1761: 0x0c08, 0x1762: 0x0808, 0x1763: 0x0808, + 0x1764: 0x0c08, 0x1765: 0x3308, 0x1766: 0x3308, 0x1767: 0x0040, 0x1768: 0x0040, 0x1769: 0x0040, + 0x176a: 0x0040, 0x176b: 0x0a18, 0x176c: 0x0a18, 0x176d: 0x0a18, 0x176e: 0x0a18, 0x176f: 0x0c18, + 0x1770: 0x0818, 0x1771: 0x0818, 0x1772: 0x0818, 0x1773: 0x0818, 0x1774: 0x0818, 0x1775: 0x0818, + 0x1776: 0x0818, 0x1777: 0x0040, 0x1778: 0x0040, 0x1779: 0x0040, 0x177a: 0x0040, 0x177b: 0x0040, + 0x177c: 0x0040, 0x177d: 0x0040, 0x177e: 0x0040, 0x177f: 0x0040, // Block 0x5e, offset 0x1780 - 0x1780: 0x1308, 0x1781: 0x1008, 0x1782: 0x1008, 0x1783: 0x1008, 0x1784: 0x1008, 0x1785: 0x0040, - 0x1786: 0x0040, 0x1787: 0x1008, 0x1788: 0x1008, 0x1789: 0x0040, 0x178a: 0x0040, 0x178b: 0x1008, - 0x178c: 0x1008, 0x178d: 0x1808, 0x178e: 0x0040, 0x178f: 0x0040, 0x1790: 0x0008, 0x1791: 0x0040, - 0x1792: 0x0040, 0x1793: 0x0040, 0x1794: 0x0040, 0x1795: 0x0040, 0x1796: 0x0040, 0x1797: 0x1008, - 0x1798: 0x0040, 0x1799: 0x0040, 0x179a: 0x0040, 0x179b: 0x0040, 0x179c: 0x0040, 0x179d: 0x0008, - 0x179e: 0x0008, 0x179f: 0x0008, 0x17a0: 0x0008, 0x17a1: 0x0008, 0x17a2: 0x1008, 0x17a3: 0x1008, - 0x17a4: 0x0040, 0x17a5: 0x0040, 0x17a6: 0x1308, 0x17a7: 0x1308, 0x17a8: 0x1308, 0x17a9: 0x1308, - 0x17aa: 0x1308, 0x17ab: 0x1308, 0x17ac: 0x1308, 0x17ad: 0x0040, 0x17ae: 0x0040, 0x17af: 0x0040, - 0x17b0: 0x1308, 0x17b1: 0x1308, 0x17b2: 0x1308, 0x17b3: 0x1308, 0x17b4: 0x1308, 0x17b5: 0x0040, + 0x1780: 0x0a08, 0x1781: 0x0c08, 0x1782: 0x0a08, 0x1783: 0x0c08, 0x1784: 0x0c08, 0x1785: 0x0c08, + 0x1786: 0x0a08, 0x1787: 0x0a08, 0x1788: 0x0a08, 0x1789: 0x0c08, 0x178a: 0x0a08, 0x178b: 0x0a08, + 0x178c: 0x0c08, 0x178d: 0x0a08, 0x178e: 0x0c08, 0x178f: 0x0c08, 0x1790: 0x0a08, 0x1791: 0x0c08, + 0x1792: 0x0040, 0x1793: 0x0040, 0x1794: 0x0040, 0x1795: 0x0040, 0x1796: 0x0040, 0x1797: 0x0040, + 0x1798: 0x0040, 0x1799: 0x0818, 0x179a: 0x0818, 0x179b: 0x0818, 0x179c: 0x0818, 0x179d: 0x0040, + 0x179e: 0x0040, 0x179f: 0x0040, 0x17a0: 0x0040, 0x17a1: 0x0040, 0x17a2: 0x0040, 0x17a3: 0x0040, + 0x17a4: 0x0040, 0x17a5: 0x0040, 0x17a6: 0x0040, 0x17a7: 0x0040, 0x17a8: 0x0040, 0x17a9: 0x0c18, + 0x17aa: 0x0c18, 0x17ab: 0x0c18, 0x17ac: 0x0c18, 0x17ad: 0x0a18, 0x17ae: 0x0a18, 0x17af: 0x0818, + 0x17b0: 0x0040, 0x17b1: 0x0040, 0x17b2: 0x0040, 0x17b3: 0x0040, 0x17b4: 0x0040, 0x17b5: 0x0040, 0x17b6: 0x0040, 0x17b7: 0x0040, 0x17b8: 0x0040, 0x17b9: 0x0040, 0x17ba: 0x0040, 0x17bb: 0x0040, 0x17bc: 0x0040, 0x17bd: 0x0040, 0x17be: 0x0040, 0x17bf: 0x0040, // Block 0x5f, offset 0x17c0 - 0x17c0: 0x0039, 0x17c1: 0x0ee9, 0x17c2: 0x1159, 0x17c3: 0x0ef9, 0x17c4: 0x0f09, 0x17c5: 0x1199, - 0x17c6: 0x0f31, 0x17c7: 0x0249, 0x17c8: 0x0f41, 0x17c9: 0x0259, 0x17ca: 0x0f51, 0x17cb: 0x0359, - 0x17cc: 0x0f61, 0x17cd: 0x0f71, 0x17ce: 0x00d9, 0x17cf: 0x0f99, 0x17d0: 0x2039, 0x17d1: 0x0269, - 0x17d2: 0x01d9, 0x17d3: 0x0fa9, 0x17d4: 0x0fb9, 0x17d5: 0x1089, 0x17d6: 0x0279, 0x17d7: 0x0369, - 0x17d8: 0x0289, 0x17d9: 0x13d1, 0x17da: 0x0039, 0x17db: 0x0ee9, 0x17dc: 0x1159, 0x17dd: 0x0ef9, - 0x17de: 0x0f09, 0x17df: 0x1199, 0x17e0: 0x0f31, 0x17e1: 0x0249, 0x17e2: 0x0f41, 0x17e3: 0x0259, - 0x17e4: 0x0f51, 0x17e5: 0x0359, 0x17e6: 0x0f61, 0x17e7: 0x0f71, 0x17e8: 0x00d9, 0x17e9: 0x0f99, - 0x17ea: 0x2039, 0x17eb: 0x0269, 0x17ec: 0x01d9, 0x17ed: 0x0fa9, 0x17ee: 0x0fb9, 0x17ef: 0x1089, - 0x17f0: 0x0279, 0x17f1: 0x0369, 0x17f2: 0x0289, 0x17f3: 0x13d1, 0x17f4: 0x0039, 0x17f5: 0x0ee9, - 0x17f6: 0x1159, 0x17f7: 0x0ef9, 0x17f8: 0x0f09, 0x17f9: 0x1199, 0x17fa: 0x0f31, 0x17fb: 0x0249, - 0x17fc: 0x0f41, 0x17fd: 0x0259, 0x17fe: 0x0f51, 0x17ff: 0x0359, + 0x17c0: 0x3308, 0x17c1: 0x3308, 0x17c2: 0x3008, 0x17c3: 0x3008, 0x17c4: 0x0040, 0x17c5: 0x0008, + 0x17c6: 0x0008, 0x17c7: 0x0008, 0x17c8: 0x0008, 0x17c9: 0x0008, 0x17ca: 0x0008, 0x17cb: 0x0008, + 0x17cc: 0x0008, 0x17cd: 0x0040, 0x17ce: 0x0040, 0x17cf: 0x0008, 0x17d0: 0x0008, 0x17d1: 0x0040, + 0x17d2: 0x0040, 0x17d3: 0x0008, 0x17d4: 0x0008, 0x17d5: 0x0008, 0x17d6: 0x0008, 0x17d7: 0x0008, + 0x17d8: 0x0008, 0x17d9: 0x0008, 0x17da: 0x0008, 0x17db: 0x0008, 0x17dc: 0x0008, 0x17dd: 0x0008, + 0x17de: 0x0008, 0x17df: 0x0008, 0x17e0: 0x0008, 0x17e1: 0x0008, 0x17e2: 0x0008, 0x17e3: 0x0008, + 0x17e4: 0x0008, 0x17e5: 0x0008, 0x17e6: 0x0008, 0x17e7: 0x0008, 0x17e8: 0x0008, 0x17e9: 0x0040, + 0x17ea: 0x0008, 0x17eb: 0x0008, 0x17ec: 0x0008, 0x17ed: 0x0008, 0x17ee: 0x0008, 0x17ef: 0x0008, + 0x17f0: 0x0008, 0x17f1: 0x0040, 0x17f2: 0x0008, 0x17f3: 0x0008, 0x17f4: 0x0040, 0x17f5: 0x0008, + 0x17f6: 0x0008, 0x17f7: 0x0008, 0x17f8: 0x0008, 0x17f9: 0x0008, 0x17fa: 0x0040, 0x17fb: 0x0040, + 0x17fc: 0x3308, 0x17fd: 0x0008, 0x17fe: 0x3008, 0x17ff: 0x3008, // Block 0x60, offset 0x1800 - 0x1800: 0x0f61, 0x1801: 0x0f71, 0x1802: 0x00d9, 0x1803: 0x0f99, 0x1804: 0x2039, 0x1805: 0x0269, - 0x1806: 0x01d9, 0x1807: 0x0fa9, 0x1808: 0x0fb9, 0x1809: 0x1089, 0x180a: 0x0279, 0x180b: 0x0369, - 0x180c: 0x0289, 0x180d: 0x13d1, 0x180e: 0x0039, 0x180f: 0x0ee9, 0x1810: 0x1159, 0x1811: 0x0ef9, - 0x1812: 0x0f09, 0x1813: 0x1199, 0x1814: 0x0f31, 0x1815: 0x0040, 0x1816: 0x0f41, 0x1817: 0x0259, - 0x1818: 0x0f51, 0x1819: 0x0359, 0x181a: 0x0f61, 0x181b: 0x0f71, 0x181c: 0x00d9, 0x181d: 0x0f99, - 0x181e: 0x2039, 0x181f: 0x0269, 0x1820: 0x01d9, 0x1821: 0x0fa9, 0x1822: 0x0fb9, 0x1823: 0x1089, - 0x1824: 0x0279, 0x1825: 0x0369, 0x1826: 0x0289, 0x1827: 0x13d1, 0x1828: 0x0039, 0x1829: 0x0ee9, - 0x182a: 0x1159, 0x182b: 0x0ef9, 0x182c: 0x0f09, 0x182d: 0x1199, 0x182e: 0x0f31, 0x182f: 0x0249, - 0x1830: 0x0f41, 0x1831: 0x0259, 0x1832: 0x0f51, 0x1833: 0x0359, 0x1834: 0x0f61, 0x1835: 0x0f71, - 0x1836: 0x00d9, 0x1837: 0x0f99, 0x1838: 0x2039, 0x1839: 0x0269, 0x183a: 0x01d9, 0x183b: 0x0fa9, - 0x183c: 0x0fb9, 0x183d: 0x1089, 0x183e: 0x0279, 0x183f: 0x0369, + 0x1800: 0x3308, 0x1801: 0x3008, 0x1802: 0x3008, 0x1803: 0x3008, 0x1804: 0x3008, 0x1805: 0x0040, + 0x1806: 0x0040, 0x1807: 0x3008, 0x1808: 0x3008, 0x1809: 0x0040, 0x180a: 0x0040, 0x180b: 0x3008, + 0x180c: 0x3008, 0x180d: 0x3808, 0x180e: 0x0040, 0x180f: 0x0040, 0x1810: 0x0008, 0x1811: 0x0040, + 0x1812: 0x0040, 0x1813: 0x0040, 0x1814: 0x0040, 0x1815: 0x0040, 0x1816: 0x0040, 0x1817: 0x3008, + 0x1818: 0x0040, 0x1819: 0x0040, 0x181a: 0x0040, 0x181b: 0x0040, 0x181c: 0x0040, 0x181d: 0x0008, + 0x181e: 0x0008, 0x181f: 0x0008, 0x1820: 0x0008, 0x1821: 0x0008, 0x1822: 0x3008, 0x1823: 0x3008, + 0x1824: 0x0040, 0x1825: 0x0040, 0x1826: 0x3308, 0x1827: 0x3308, 0x1828: 0x3308, 0x1829: 0x3308, + 0x182a: 0x3308, 0x182b: 0x3308, 0x182c: 0x3308, 0x182d: 0x0040, 0x182e: 0x0040, 0x182f: 0x0040, + 0x1830: 0x3308, 0x1831: 0x3308, 0x1832: 0x3308, 0x1833: 0x3308, 0x1834: 0x3308, 0x1835: 0x0040, + 0x1836: 0x0040, 0x1837: 0x0040, 0x1838: 0x0040, 0x1839: 0x0040, 0x183a: 0x0040, 0x183b: 0x0040, + 0x183c: 0x0040, 0x183d: 0x0040, 0x183e: 0x0040, 0x183f: 0x0040, // Block 0x61, offset 0x1840 - 0x1840: 0x0289, 0x1841: 0x13d1, 0x1842: 0x0039, 0x1843: 0x0ee9, 0x1844: 0x1159, 0x1845: 0x0ef9, - 0x1846: 0x0f09, 0x1847: 0x1199, 0x1848: 0x0f31, 0x1849: 0x0249, 0x184a: 0x0f41, 0x184b: 0x0259, - 0x184c: 0x0f51, 0x184d: 0x0359, 0x184e: 0x0f61, 0x184f: 0x0f71, 0x1850: 0x00d9, 0x1851: 0x0f99, - 0x1852: 0x2039, 0x1853: 0x0269, 0x1854: 0x01d9, 0x1855: 0x0fa9, 0x1856: 0x0fb9, 0x1857: 0x1089, - 0x1858: 0x0279, 0x1859: 0x0369, 0x185a: 0x0289, 0x185b: 0x13d1, 0x185c: 0x0039, 0x185d: 0x0040, - 0x185e: 0x1159, 0x185f: 0x0ef9, 0x1860: 0x0040, 0x1861: 0x0040, 0x1862: 0x0f31, 0x1863: 0x0040, - 0x1864: 0x0040, 0x1865: 0x0259, 0x1866: 0x0f51, 0x1867: 0x0040, 0x1868: 0x0040, 0x1869: 0x0f71, - 0x186a: 0x00d9, 0x186b: 0x0f99, 0x186c: 0x2039, 0x186d: 0x0040, 0x186e: 0x01d9, 0x186f: 0x0fa9, - 0x1870: 0x0fb9, 0x1871: 0x1089, 0x1872: 0x0279, 0x1873: 0x0369, 0x1874: 0x0289, 0x1875: 0x13d1, - 0x1876: 0x0039, 0x1877: 0x0ee9, 0x1878: 0x1159, 0x1879: 0x0ef9, 0x187a: 0x0040, 0x187b: 0x1199, - 0x187c: 0x0040, 0x187d: 0x0249, 0x187e: 0x0f41, 0x187f: 0x0259, + 0x1840: 0x0039, 0x1841: 0x0ee9, 0x1842: 0x1159, 0x1843: 0x0ef9, 0x1844: 0x0f09, 0x1845: 0x1199, + 0x1846: 0x0f31, 0x1847: 0x0249, 0x1848: 0x0f41, 0x1849: 0x0259, 0x184a: 0x0f51, 0x184b: 0x0359, + 0x184c: 0x0f61, 0x184d: 0x0f71, 0x184e: 0x00d9, 0x184f: 0x0f99, 0x1850: 0x2039, 0x1851: 0x0269, + 0x1852: 0x01d9, 0x1853: 0x0fa9, 0x1854: 0x0fb9, 0x1855: 0x1089, 0x1856: 0x0279, 0x1857: 0x0369, + 0x1858: 0x0289, 0x1859: 0x13d1, 0x185a: 0x0039, 0x185b: 0x0ee9, 0x185c: 0x1159, 0x185d: 0x0ef9, + 0x185e: 0x0f09, 0x185f: 0x1199, 0x1860: 0x0f31, 0x1861: 0x0249, 0x1862: 0x0f41, 0x1863: 0x0259, + 0x1864: 0x0f51, 0x1865: 0x0359, 0x1866: 0x0f61, 0x1867: 0x0f71, 0x1868: 0x00d9, 0x1869: 0x0f99, + 0x186a: 0x2039, 0x186b: 0x0269, 0x186c: 0x01d9, 0x186d: 0x0fa9, 0x186e: 0x0fb9, 0x186f: 0x1089, + 0x1870: 0x0279, 0x1871: 0x0369, 0x1872: 0x0289, 0x1873: 0x13d1, 0x1874: 0x0039, 0x1875: 0x0ee9, + 0x1876: 0x1159, 0x1877: 0x0ef9, 0x1878: 0x0f09, 0x1879: 0x1199, 0x187a: 0x0f31, 0x187b: 0x0249, + 0x187c: 0x0f41, 0x187d: 0x0259, 0x187e: 0x0f51, 0x187f: 0x0359, // Block 0x62, offset 0x1880 - 0x1880: 0x0f51, 0x1881: 0x0359, 0x1882: 0x0f61, 0x1883: 0x0f71, 0x1884: 0x0040, 0x1885: 0x0f99, - 0x1886: 0x2039, 0x1887: 0x0269, 0x1888: 0x01d9, 0x1889: 0x0fa9, 0x188a: 0x0fb9, 0x188b: 0x1089, - 0x188c: 0x0279, 0x188d: 0x0369, 0x188e: 0x0289, 0x188f: 0x13d1, 0x1890: 0x0039, 0x1891: 0x0ee9, - 0x1892: 0x1159, 0x1893: 0x0ef9, 0x1894: 0x0f09, 0x1895: 0x1199, 0x1896: 0x0f31, 0x1897: 0x0249, - 0x1898: 0x0f41, 0x1899: 0x0259, 0x189a: 0x0f51, 0x189b: 0x0359, 0x189c: 0x0f61, 0x189d: 0x0f71, - 0x189e: 0x00d9, 0x189f: 0x0f99, 0x18a0: 0x2039, 0x18a1: 0x0269, 0x18a2: 0x01d9, 0x18a3: 0x0fa9, - 0x18a4: 0x0fb9, 0x18a5: 0x1089, 0x18a6: 0x0279, 0x18a7: 0x0369, 0x18a8: 0x0289, 0x18a9: 0x13d1, - 0x18aa: 0x0039, 0x18ab: 0x0ee9, 0x18ac: 0x1159, 0x18ad: 0x0ef9, 0x18ae: 0x0f09, 0x18af: 0x1199, - 0x18b0: 0x0f31, 0x18b1: 0x0249, 0x18b2: 0x0f41, 0x18b3: 0x0259, 0x18b4: 0x0f51, 0x18b5: 0x0359, - 0x18b6: 0x0f61, 0x18b7: 0x0f71, 0x18b8: 0x00d9, 0x18b9: 0x0f99, 0x18ba: 0x2039, 0x18bb: 0x0269, - 0x18bc: 0x01d9, 0x18bd: 0x0fa9, 0x18be: 0x0fb9, 0x18bf: 0x1089, + 0x1880: 0x0f61, 0x1881: 0x0f71, 0x1882: 0x00d9, 0x1883: 0x0f99, 0x1884: 0x2039, 0x1885: 0x0269, + 0x1886: 0x01d9, 0x1887: 0x0fa9, 0x1888: 0x0fb9, 0x1889: 0x1089, 0x188a: 0x0279, 0x188b: 0x0369, + 0x188c: 0x0289, 0x188d: 0x13d1, 0x188e: 0x0039, 0x188f: 0x0ee9, 0x1890: 0x1159, 0x1891: 0x0ef9, + 0x1892: 0x0f09, 0x1893: 0x1199, 0x1894: 0x0f31, 0x1895: 0x0040, 0x1896: 0x0f41, 0x1897: 0x0259, + 0x1898: 0x0f51, 0x1899: 0x0359, 0x189a: 0x0f61, 0x189b: 0x0f71, 0x189c: 0x00d9, 0x189d: 0x0f99, + 0x189e: 0x2039, 0x189f: 0x0269, 0x18a0: 0x01d9, 0x18a1: 0x0fa9, 0x18a2: 0x0fb9, 0x18a3: 0x1089, + 0x18a4: 0x0279, 0x18a5: 0x0369, 0x18a6: 0x0289, 0x18a7: 0x13d1, 0x18a8: 0x0039, 0x18a9: 0x0ee9, + 0x18aa: 0x1159, 0x18ab: 0x0ef9, 0x18ac: 0x0f09, 0x18ad: 0x1199, 0x18ae: 0x0f31, 0x18af: 0x0249, + 0x18b0: 0x0f41, 0x18b1: 0x0259, 0x18b2: 0x0f51, 0x18b3: 0x0359, 0x18b4: 0x0f61, 0x18b5: 0x0f71, + 0x18b6: 0x00d9, 0x18b7: 0x0f99, 0x18b8: 0x2039, 0x18b9: 0x0269, 0x18ba: 0x01d9, 0x18bb: 0x0fa9, + 0x18bc: 0x0fb9, 0x18bd: 0x1089, 0x18be: 0x0279, 0x18bf: 0x0369, // Block 0x63, offset 0x18c0 - 0x18c0: 0x0279, 0x18c1: 0x0369, 0x18c2: 0x0289, 0x18c3: 0x13d1, 0x18c4: 0x0039, 0x18c5: 0x0ee9, - 0x18c6: 0x0040, 0x18c7: 0x0ef9, 0x18c8: 0x0f09, 0x18c9: 0x1199, 0x18ca: 0x0f31, 0x18cb: 0x0040, - 0x18cc: 0x0040, 0x18cd: 0x0259, 0x18ce: 0x0f51, 0x18cf: 0x0359, 0x18d0: 0x0f61, 0x18d1: 0x0f71, - 0x18d2: 0x00d9, 0x18d3: 0x0f99, 0x18d4: 0x2039, 0x18d5: 0x0040, 0x18d6: 0x01d9, 0x18d7: 0x0fa9, - 0x18d8: 0x0fb9, 0x18d9: 0x1089, 0x18da: 0x0279, 0x18db: 0x0369, 0x18dc: 0x0289, 0x18dd: 0x0040, - 0x18de: 0x0039, 0x18df: 0x0ee9, 0x18e0: 0x1159, 0x18e1: 0x0ef9, 0x18e2: 0x0f09, 0x18e3: 0x1199, - 0x18e4: 0x0f31, 0x18e5: 0x0249, 0x18e6: 0x0f41, 0x18e7: 0x0259, 0x18e8: 0x0f51, 0x18e9: 0x0359, - 0x18ea: 0x0f61, 0x18eb: 0x0f71, 0x18ec: 0x00d9, 0x18ed: 0x0f99, 0x18ee: 0x2039, 0x18ef: 0x0269, - 0x18f0: 0x01d9, 0x18f1: 0x0fa9, 0x18f2: 0x0fb9, 0x18f3: 0x1089, 0x18f4: 0x0279, 0x18f5: 0x0369, - 0x18f6: 0x0289, 0x18f7: 0x13d1, 0x18f8: 0x0039, 0x18f9: 0x0ee9, 0x18fa: 0x0040, 0x18fb: 0x0ef9, - 0x18fc: 0x0f09, 0x18fd: 0x1199, 0x18fe: 0x0f31, 0x18ff: 0x0040, + 0x18c0: 0x0289, 0x18c1: 0x13d1, 0x18c2: 0x0039, 0x18c3: 0x0ee9, 0x18c4: 0x1159, 0x18c5: 0x0ef9, + 0x18c6: 0x0f09, 0x18c7: 0x1199, 0x18c8: 0x0f31, 0x18c9: 0x0249, 0x18ca: 0x0f41, 0x18cb: 0x0259, + 0x18cc: 0x0f51, 0x18cd: 0x0359, 0x18ce: 0x0f61, 0x18cf: 0x0f71, 0x18d0: 0x00d9, 0x18d1: 0x0f99, + 0x18d2: 0x2039, 0x18d3: 0x0269, 0x18d4: 0x01d9, 0x18d5: 0x0fa9, 0x18d6: 0x0fb9, 0x18d7: 0x1089, + 0x18d8: 0x0279, 0x18d9: 0x0369, 0x18da: 0x0289, 0x18db: 0x13d1, 0x18dc: 0x0039, 0x18dd: 0x0040, + 0x18de: 0x1159, 0x18df: 0x0ef9, 0x18e0: 0x0040, 0x18e1: 0x0040, 0x18e2: 0x0f31, 0x18e3: 0x0040, + 0x18e4: 0x0040, 0x18e5: 0x0259, 0x18e6: 0x0f51, 0x18e7: 0x0040, 0x18e8: 0x0040, 0x18e9: 0x0f71, + 0x18ea: 0x00d9, 0x18eb: 0x0f99, 0x18ec: 0x2039, 0x18ed: 0x0040, 0x18ee: 0x01d9, 0x18ef: 0x0fa9, + 0x18f0: 0x0fb9, 0x18f1: 0x1089, 0x18f2: 0x0279, 0x18f3: 0x0369, 0x18f4: 0x0289, 0x18f5: 0x13d1, + 0x18f6: 0x0039, 0x18f7: 0x0ee9, 0x18f8: 0x1159, 0x18f9: 0x0ef9, 0x18fa: 0x0040, 0x18fb: 0x1199, + 0x18fc: 0x0040, 0x18fd: 0x0249, 0x18fe: 0x0f41, 0x18ff: 0x0259, // Block 0x64, offset 0x1900 - 0x1900: 0x0f41, 0x1901: 0x0259, 0x1902: 0x0f51, 0x1903: 0x0359, 0x1904: 0x0f61, 0x1905: 0x0040, - 0x1906: 0x00d9, 0x1907: 0x0040, 0x1908: 0x0040, 0x1909: 0x0040, 0x190a: 0x01d9, 0x190b: 0x0fa9, - 0x190c: 0x0fb9, 0x190d: 0x1089, 0x190e: 0x0279, 0x190f: 0x0369, 0x1910: 0x0289, 0x1911: 0x0040, - 0x1912: 0x0039, 0x1913: 0x0ee9, 0x1914: 0x1159, 0x1915: 0x0ef9, 0x1916: 0x0f09, 0x1917: 0x1199, - 0x1918: 0x0f31, 0x1919: 0x0249, 0x191a: 0x0f41, 0x191b: 0x0259, 0x191c: 0x0f51, 0x191d: 0x0359, - 0x191e: 0x0f61, 0x191f: 0x0f71, 0x1920: 0x00d9, 0x1921: 0x0f99, 0x1922: 0x2039, 0x1923: 0x0269, - 0x1924: 0x01d9, 0x1925: 0x0fa9, 0x1926: 0x0fb9, 0x1927: 0x1089, 0x1928: 0x0279, 0x1929: 0x0369, - 0x192a: 0x0289, 0x192b: 0x13d1, 0x192c: 0x0039, 0x192d: 0x0ee9, 0x192e: 0x1159, 0x192f: 0x0ef9, - 0x1930: 0x0f09, 0x1931: 0x1199, 0x1932: 0x0f31, 0x1933: 0x0249, 0x1934: 0x0f41, 0x1935: 0x0259, - 0x1936: 0x0f51, 0x1937: 0x0359, 0x1938: 0x0f61, 0x1939: 0x0f71, 0x193a: 0x00d9, 0x193b: 0x0f99, - 0x193c: 0x2039, 0x193d: 0x0269, 0x193e: 0x01d9, 0x193f: 0x0fa9, + 0x1900: 0x0f51, 0x1901: 0x0359, 0x1902: 0x0f61, 0x1903: 0x0f71, 0x1904: 0x0040, 0x1905: 0x0f99, + 0x1906: 0x2039, 0x1907: 0x0269, 0x1908: 0x01d9, 0x1909: 0x0fa9, 0x190a: 0x0fb9, 0x190b: 0x1089, + 0x190c: 0x0279, 0x190d: 0x0369, 0x190e: 0x0289, 0x190f: 0x13d1, 0x1910: 0x0039, 0x1911: 0x0ee9, + 0x1912: 0x1159, 0x1913: 0x0ef9, 0x1914: 0x0f09, 0x1915: 0x1199, 0x1916: 0x0f31, 0x1917: 0x0249, + 0x1918: 0x0f41, 0x1919: 0x0259, 0x191a: 0x0f51, 0x191b: 0x0359, 0x191c: 0x0f61, 0x191d: 0x0f71, + 0x191e: 0x00d9, 0x191f: 0x0f99, 0x1920: 0x2039, 0x1921: 0x0269, 0x1922: 0x01d9, 0x1923: 0x0fa9, + 0x1924: 0x0fb9, 0x1925: 0x1089, 0x1926: 0x0279, 0x1927: 0x0369, 0x1928: 0x0289, 0x1929: 0x13d1, + 0x192a: 0x0039, 0x192b: 0x0ee9, 0x192c: 0x1159, 0x192d: 0x0ef9, 0x192e: 0x0f09, 0x192f: 0x1199, + 0x1930: 0x0f31, 0x1931: 0x0249, 0x1932: 0x0f41, 0x1933: 0x0259, 0x1934: 0x0f51, 0x1935: 0x0359, + 0x1936: 0x0f61, 0x1937: 0x0f71, 0x1938: 0x00d9, 0x1939: 0x0f99, 0x193a: 0x2039, 0x193b: 0x0269, + 0x193c: 0x01d9, 0x193d: 0x0fa9, 0x193e: 0x0fb9, 0x193f: 0x1089, // Block 0x65, offset 0x1940 - 0x1940: 0x0fb9, 0x1941: 0x1089, 0x1942: 0x0279, 0x1943: 0x0369, 0x1944: 0x0289, 0x1945: 0x13d1, - 0x1946: 0x0039, 0x1947: 0x0ee9, 0x1948: 0x1159, 0x1949: 0x0ef9, 0x194a: 0x0f09, 0x194b: 0x1199, - 0x194c: 0x0f31, 0x194d: 0x0249, 0x194e: 0x0f41, 0x194f: 0x0259, 0x1950: 0x0f51, 0x1951: 0x0359, - 0x1952: 0x0f61, 0x1953: 0x0f71, 0x1954: 0x00d9, 0x1955: 0x0f99, 0x1956: 0x2039, 0x1957: 0x0269, - 0x1958: 0x01d9, 0x1959: 0x0fa9, 0x195a: 0x0fb9, 0x195b: 0x1089, 0x195c: 0x0279, 0x195d: 0x0369, - 0x195e: 0x0289, 0x195f: 0x13d1, 0x1960: 0x0039, 0x1961: 0x0ee9, 0x1962: 0x1159, 0x1963: 0x0ef9, - 0x1964: 0x0f09, 0x1965: 0x1199, 0x1966: 0x0f31, 0x1967: 0x0249, 0x1968: 0x0f41, 0x1969: 0x0259, - 0x196a: 0x0f51, 0x196b: 0x0359, 0x196c: 0x0f61, 0x196d: 0x0f71, 0x196e: 0x00d9, 0x196f: 0x0f99, - 0x1970: 0x2039, 0x1971: 0x0269, 0x1972: 0x01d9, 0x1973: 0x0fa9, 0x1974: 0x0fb9, 0x1975: 0x1089, - 0x1976: 0x0279, 0x1977: 0x0369, 0x1978: 0x0289, 0x1979: 0x13d1, 0x197a: 0x0039, 0x197b: 0x0ee9, - 0x197c: 0x1159, 0x197d: 0x0ef9, 0x197e: 0x0f09, 0x197f: 0x1199, + 0x1940: 0x0279, 0x1941: 0x0369, 0x1942: 0x0289, 0x1943: 0x13d1, 0x1944: 0x0039, 0x1945: 0x0ee9, + 0x1946: 0x0040, 0x1947: 0x0ef9, 0x1948: 0x0f09, 0x1949: 0x1199, 0x194a: 0x0f31, 0x194b: 0x0040, + 0x194c: 0x0040, 0x194d: 0x0259, 0x194e: 0x0f51, 0x194f: 0x0359, 0x1950: 0x0f61, 0x1951: 0x0f71, + 0x1952: 0x00d9, 0x1953: 0x0f99, 0x1954: 0x2039, 0x1955: 0x0040, 0x1956: 0x01d9, 0x1957: 0x0fa9, + 0x1958: 0x0fb9, 0x1959: 0x1089, 0x195a: 0x0279, 0x195b: 0x0369, 0x195c: 0x0289, 0x195d: 0x0040, + 0x195e: 0x0039, 0x195f: 0x0ee9, 0x1960: 0x1159, 0x1961: 0x0ef9, 0x1962: 0x0f09, 0x1963: 0x1199, + 0x1964: 0x0f31, 0x1965: 0x0249, 0x1966: 0x0f41, 0x1967: 0x0259, 0x1968: 0x0f51, 0x1969: 0x0359, + 0x196a: 0x0f61, 0x196b: 0x0f71, 0x196c: 0x00d9, 0x196d: 0x0f99, 0x196e: 0x2039, 0x196f: 0x0269, + 0x1970: 0x01d9, 0x1971: 0x0fa9, 0x1972: 0x0fb9, 0x1973: 0x1089, 0x1974: 0x0279, 0x1975: 0x0369, + 0x1976: 0x0289, 0x1977: 0x13d1, 0x1978: 0x0039, 0x1979: 0x0ee9, 0x197a: 0x0040, 0x197b: 0x0ef9, + 0x197c: 0x0f09, 0x197d: 0x1199, 0x197e: 0x0f31, 0x197f: 0x0040, // Block 0x66, offset 0x1980 - 0x1980: 0x0f31, 0x1981: 0x0249, 0x1982: 0x0f41, 0x1983: 0x0259, 0x1984: 0x0f51, 0x1985: 0x0359, - 0x1986: 0x0f61, 0x1987: 0x0f71, 0x1988: 0x00d9, 0x1989: 0x0f99, 0x198a: 0x2039, 0x198b: 0x0269, - 0x198c: 0x01d9, 0x198d: 0x0fa9, 0x198e: 0x0fb9, 0x198f: 0x1089, 0x1990: 0x0279, 0x1991: 0x0369, - 0x1992: 0x0289, 0x1993: 0x13d1, 0x1994: 0x0039, 0x1995: 0x0ee9, 0x1996: 0x1159, 0x1997: 0x0ef9, - 0x1998: 0x0f09, 0x1999: 0x1199, 0x199a: 0x0f31, 0x199b: 0x0249, 0x199c: 0x0f41, 0x199d: 0x0259, - 0x199e: 0x0f51, 0x199f: 0x0359, 0x19a0: 0x0f61, 0x19a1: 0x0f71, 0x19a2: 0x00d9, 0x19a3: 0x0f99, - 0x19a4: 0x2039, 0x19a5: 0x0269, 0x19a6: 0x01d9, 0x19a7: 0x0fa9, 0x19a8: 0x0fb9, 0x19a9: 0x1089, - 0x19aa: 0x0279, 0x19ab: 0x0369, 0x19ac: 0x0289, 0x19ad: 0x13d1, 0x19ae: 0x0039, 0x19af: 0x0ee9, - 0x19b0: 0x1159, 0x19b1: 0x0ef9, 0x19b2: 0x0f09, 0x19b3: 0x1199, 0x19b4: 0x0f31, 0x19b5: 0x0249, - 0x19b6: 0x0f41, 0x19b7: 0x0259, 0x19b8: 0x0f51, 0x19b9: 0x0359, 0x19ba: 0x0f61, 0x19bb: 0x0f71, - 0x19bc: 0x00d9, 0x19bd: 0x0f99, 0x19be: 0x2039, 0x19bf: 0x0269, + 0x1980: 0x0f41, 0x1981: 0x0259, 0x1982: 0x0f51, 0x1983: 0x0359, 0x1984: 0x0f61, 0x1985: 0x0040, + 0x1986: 0x00d9, 0x1987: 0x0040, 0x1988: 0x0040, 0x1989: 0x0040, 0x198a: 0x01d9, 0x198b: 0x0fa9, + 0x198c: 0x0fb9, 0x198d: 0x1089, 0x198e: 0x0279, 0x198f: 0x0369, 0x1990: 0x0289, 0x1991: 0x0040, + 0x1992: 0x0039, 0x1993: 0x0ee9, 0x1994: 0x1159, 0x1995: 0x0ef9, 0x1996: 0x0f09, 0x1997: 0x1199, + 0x1998: 0x0f31, 0x1999: 0x0249, 0x199a: 0x0f41, 0x199b: 0x0259, 0x199c: 0x0f51, 0x199d: 0x0359, + 0x199e: 0x0f61, 0x199f: 0x0f71, 0x19a0: 0x00d9, 0x19a1: 0x0f99, 0x19a2: 0x2039, 0x19a3: 0x0269, + 0x19a4: 0x01d9, 0x19a5: 0x0fa9, 0x19a6: 0x0fb9, 0x19a7: 0x1089, 0x19a8: 0x0279, 0x19a9: 0x0369, + 0x19aa: 0x0289, 0x19ab: 0x13d1, 0x19ac: 0x0039, 0x19ad: 0x0ee9, 0x19ae: 0x1159, 0x19af: 0x0ef9, + 0x19b0: 0x0f09, 0x19b1: 0x1199, 0x19b2: 0x0f31, 0x19b3: 0x0249, 0x19b4: 0x0f41, 0x19b5: 0x0259, + 0x19b6: 0x0f51, 0x19b7: 0x0359, 0x19b8: 0x0f61, 0x19b9: 0x0f71, 0x19ba: 0x00d9, 0x19bb: 0x0f99, + 0x19bc: 0x2039, 0x19bd: 0x0269, 0x19be: 0x01d9, 0x19bf: 0x0fa9, // Block 0x67, offset 0x19c0 - 0x19c0: 0x01d9, 0x19c1: 0x0fa9, 0x19c2: 0x0fb9, 0x19c3: 0x1089, 0x19c4: 0x0279, 0x19c5: 0x0369, - 0x19c6: 0x0289, 0x19c7: 0x13d1, 0x19c8: 0x0039, 0x19c9: 0x0ee9, 0x19ca: 0x1159, 0x19cb: 0x0ef9, - 0x19cc: 0x0f09, 0x19cd: 0x1199, 0x19ce: 0x0f31, 0x19cf: 0x0249, 0x19d0: 0x0f41, 0x19d1: 0x0259, - 0x19d2: 0x0f51, 0x19d3: 0x0359, 0x19d4: 0x0f61, 0x19d5: 0x0f71, 0x19d6: 0x00d9, 0x19d7: 0x0f99, - 0x19d8: 0x2039, 0x19d9: 0x0269, 0x19da: 0x01d9, 0x19db: 0x0fa9, 0x19dc: 0x0fb9, 0x19dd: 0x1089, - 0x19de: 0x0279, 0x19df: 0x0369, 0x19e0: 0x0289, 0x19e1: 0x13d1, 0x19e2: 0x0039, 0x19e3: 0x0ee9, - 0x19e4: 0x1159, 0x19e5: 0x0ef9, 0x19e6: 0x0f09, 0x19e7: 0x1199, 0x19e8: 0x0f31, 0x19e9: 0x0249, - 0x19ea: 0x0f41, 0x19eb: 0x0259, 0x19ec: 0x0f51, 0x19ed: 0x0359, 0x19ee: 0x0f61, 0x19ef: 0x0f71, - 0x19f0: 0x00d9, 0x19f1: 0x0f99, 0x19f2: 0x2039, 0x19f3: 0x0269, 0x19f4: 0x01d9, 0x19f5: 0x0fa9, - 0x19f6: 0x0fb9, 0x19f7: 0x1089, 0x19f8: 0x0279, 0x19f9: 0x0369, 0x19fa: 0x0289, 0x19fb: 0x13d1, - 0x19fc: 0x0039, 0x19fd: 0x0ee9, 0x19fe: 0x1159, 0x19ff: 0x0ef9, + 0x19c0: 0x0fb9, 0x19c1: 0x1089, 0x19c2: 0x0279, 0x19c3: 0x0369, 0x19c4: 0x0289, 0x19c5: 0x13d1, + 0x19c6: 0x0039, 0x19c7: 0x0ee9, 0x19c8: 0x1159, 0x19c9: 0x0ef9, 0x19ca: 0x0f09, 0x19cb: 0x1199, + 0x19cc: 0x0f31, 0x19cd: 0x0249, 0x19ce: 0x0f41, 0x19cf: 0x0259, 0x19d0: 0x0f51, 0x19d1: 0x0359, + 0x19d2: 0x0f61, 0x19d3: 0x0f71, 0x19d4: 0x00d9, 0x19d5: 0x0f99, 0x19d6: 0x2039, 0x19d7: 0x0269, + 0x19d8: 0x01d9, 0x19d9: 0x0fa9, 0x19da: 0x0fb9, 0x19db: 0x1089, 0x19dc: 0x0279, 0x19dd: 0x0369, + 0x19de: 0x0289, 0x19df: 0x13d1, 0x19e0: 0x0039, 0x19e1: 0x0ee9, 0x19e2: 0x1159, 0x19e3: 0x0ef9, + 0x19e4: 0x0f09, 0x19e5: 0x1199, 0x19e6: 0x0f31, 0x19e7: 0x0249, 0x19e8: 0x0f41, 0x19e9: 0x0259, + 0x19ea: 0x0f51, 0x19eb: 0x0359, 0x19ec: 0x0f61, 0x19ed: 0x0f71, 0x19ee: 0x00d9, 0x19ef: 0x0f99, + 0x19f0: 0x2039, 0x19f1: 0x0269, 0x19f2: 0x01d9, 0x19f3: 0x0fa9, 0x19f4: 0x0fb9, 0x19f5: 0x1089, + 0x19f6: 0x0279, 0x19f7: 0x0369, 0x19f8: 0x0289, 0x19f9: 0x13d1, 0x19fa: 0x0039, 0x19fb: 0x0ee9, + 0x19fc: 0x1159, 0x19fd: 0x0ef9, 0x19fe: 0x0f09, 0x19ff: 0x1199, // Block 0x68, offset 0x1a00 - 0x1a00: 0x0f09, 0x1a01: 0x1199, 0x1a02: 0x0f31, 0x1a03: 0x0249, 0x1a04: 0x0f41, 0x1a05: 0x0259, - 0x1a06: 0x0f51, 0x1a07: 0x0359, 0x1a08: 0x0f61, 0x1a09: 0x0f71, 0x1a0a: 0x00d9, 0x1a0b: 0x0f99, - 0x1a0c: 0x2039, 0x1a0d: 0x0269, 0x1a0e: 0x01d9, 0x1a0f: 0x0fa9, 0x1a10: 0x0fb9, 0x1a11: 0x1089, - 0x1a12: 0x0279, 0x1a13: 0x0369, 0x1a14: 0x0289, 0x1a15: 0x13d1, 0x1a16: 0x0039, 0x1a17: 0x0ee9, - 0x1a18: 0x1159, 0x1a19: 0x0ef9, 0x1a1a: 0x0f09, 0x1a1b: 0x1199, 0x1a1c: 0x0f31, 0x1a1d: 0x0249, - 0x1a1e: 0x0f41, 0x1a1f: 0x0259, 0x1a20: 0x0f51, 0x1a21: 0x0359, 0x1a22: 0x0f61, 0x1a23: 0x0f71, - 0x1a24: 0x00d9, 0x1a25: 0x0f99, 0x1a26: 0x2039, 0x1a27: 0x0269, 0x1a28: 0x01d9, 0x1a29: 0x0fa9, - 0x1a2a: 0x0fb9, 0x1a2b: 0x1089, 0x1a2c: 0x0279, 0x1a2d: 0x0369, 0x1a2e: 0x0289, 0x1a2f: 0x13d1, - 0x1a30: 0x0039, 0x1a31: 0x0ee9, 0x1a32: 0x1159, 0x1a33: 0x0ef9, 0x1a34: 0x0f09, 0x1a35: 0x1199, - 0x1a36: 0x0f31, 0x1a37: 0x0249, 0x1a38: 0x0f41, 0x1a39: 0x0259, 0x1a3a: 0x0f51, 0x1a3b: 0x0359, - 0x1a3c: 0x0f61, 0x1a3d: 0x0f71, 0x1a3e: 0x00d9, 0x1a3f: 0x0f99, + 0x1a00: 0x0f31, 0x1a01: 0x0249, 0x1a02: 0x0f41, 0x1a03: 0x0259, 0x1a04: 0x0f51, 0x1a05: 0x0359, + 0x1a06: 0x0f61, 0x1a07: 0x0f71, 0x1a08: 0x00d9, 0x1a09: 0x0f99, 0x1a0a: 0x2039, 0x1a0b: 0x0269, + 0x1a0c: 0x01d9, 0x1a0d: 0x0fa9, 0x1a0e: 0x0fb9, 0x1a0f: 0x1089, 0x1a10: 0x0279, 0x1a11: 0x0369, + 0x1a12: 0x0289, 0x1a13: 0x13d1, 0x1a14: 0x0039, 0x1a15: 0x0ee9, 0x1a16: 0x1159, 0x1a17: 0x0ef9, + 0x1a18: 0x0f09, 0x1a19: 0x1199, 0x1a1a: 0x0f31, 0x1a1b: 0x0249, 0x1a1c: 0x0f41, 0x1a1d: 0x0259, + 0x1a1e: 0x0f51, 0x1a1f: 0x0359, 0x1a20: 0x0f61, 0x1a21: 0x0f71, 0x1a22: 0x00d9, 0x1a23: 0x0f99, + 0x1a24: 0x2039, 0x1a25: 0x0269, 0x1a26: 0x01d9, 0x1a27: 0x0fa9, 0x1a28: 0x0fb9, 0x1a29: 0x1089, + 0x1a2a: 0x0279, 0x1a2b: 0x0369, 0x1a2c: 0x0289, 0x1a2d: 0x13d1, 0x1a2e: 0x0039, 0x1a2f: 0x0ee9, + 0x1a30: 0x1159, 0x1a31: 0x0ef9, 0x1a32: 0x0f09, 0x1a33: 0x1199, 0x1a34: 0x0f31, 0x1a35: 0x0249, + 0x1a36: 0x0f41, 0x1a37: 0x0259, 0x1a38: 0x0f51, 0x1a39: 0x0359, 0x1a3a: 0x0f61, 0x1a3b: 0x0f71, + 0x1a3c: 0x00d9, 0x1a3d: 0x0f99, 0x1a3e: 0x2039, 0x1a3f: 0x0269, // Block 0x69, offset 0x1a40 - 0x1a40: 0x2039, 0x1a41: 0x0269, 0x1a42: 0x01d9, 0x1a43: 0x0fa9, 0x1a44: 0x0fb9, 0x1a45: 0x1089, - 0x1a46: 0x0279, 0x1a47: 0x0369, 0x1a48: 0x0289, 0x1a49: 0x13d1, 0x1a4a: 0x0039, 0x1a4b: 0x0ee9, - 0x1a4c: 0x1159, 0x1a4d: 0x0ef9, 0x1a4e: 0x0f09, 0x1a4f: 0x1199, 0x1a50: 0x0f31, 0x1a51: 0x0249, - 0x1a52: 0x0f41, 0x1a53: 0x0259, 0x1a54: 0x0f51, 0x1a55: 0x0359, 0x1a56: 0x0f61, 0x1a57: 0x0f71, - 0x1a58: 0x00d9, 0x1a59: 0x0f99, 0x1a5a: 0x2039, 0x1a5b: 0x0269, 0x1a5c: 0x01d9, 0x1a5d: 0x0fa9, - 0x1a5e: 0x0fb9, 0x1a5f: 0x1089, 0x1a60: 0x0279, 0x1a61: 0x0369, 0x1a62: 0x0289, 0x1a63: 0x13d1, - 0x1a64: 0xba81, 0x1a65: 0xba99, 0x1a66: 0x0040, 0x1a67: 0x0040, 0x1a68: 0xbab1, 0x1a69: 0x1099, - 0x1a6a: 0x10b1, 0x1a6b: 0x10c9, 0x1a6c: 0xbac9, 0x1a6d: 0xbae1, 0x1a6e: 0xbaf9, 0x1a6f: 0x1429, - 0x1a70: 0x1a31, 0x1a71: 0xbb11, 0x1a72: 0xbb29, 0x1a73: 0xbb41, 0x1a74: 0xbb59, 0x1a75: 0xbb71, - 0x1a76: 0xbb89, 0x1a77: 0x2109, 0x1a78: 0x1111, 0x1a79: 0x1429, 0x1a7a: 0xbba1, 0x1a7b: 0xbbb9, - 0x1a7c: 0xbbd1, 0x1a7d: 0x10e1, 0x1a7e: 0x10f9, 0x1a7f: 0xbbe9, + 0x1a40: 0x01d9, 0x1a41: 0x0fa9, 0x1a42: 0x0fb9, 0x1a43: 0x1089, 0x1a44: 0x0279, 0x1a45: 0x0369, + 0x1a46: 0x0289, 0x1a47: 0x13d1, 0x1a48: 0x0039, 0x1a49: 0x0ee9, 0x1a4a: 0x1159, 0x1a4b: 0x0ef9, + 0x1a4c: 0x0f09, 0x1a4d: 0x1199, 0x1a4e: 0x0f31, 0x1a4f: 0x0249, 0x1a50: 0x0f41, 0x1a51: 0x0259, + 0x1a52: 0x0f51, 0x1a53: 0x0359, 0x1a54: 0x0f61, 0x1a55: 0x0f71, 0x1a56: 0x00d9, 0x1a57: 0x0f99, + 0x1a58: 0x2039, 0x1a59: 0x0269, 0x1a5a: 0x01d9, 0x1a5b: 0x0fa9, 0x1a5c: 0x0fb9, 0x1a5d: 0x1089, + 0x1a5e: 0x0279, 0x1a5f: 0x0369, 0x1a60: 0x0289, 0x1a61: 0x13d1, 0x1a62: 0x0039, 0x1a63: 0x0ee9, + 0x1a64: 0x1159, 0x1a65: 0x0ef9, 0x1a66: 0x0f09, 0x1a67: 0x1199, 0x1a68: 0x0f31, 0x1a69: 0x0249, + 0x1a6a: 0x0f41, 0x1a6b: 0x0259, 0x1a6c: 0x0f51, 0x1a6d: 0x0359, 0x1a6e: 0x0f61, 0x1a6f: 0x0f71, + 0x1a70: 0x00d9, 0x1a71: 0x0f99, 0x1a72: 0x2039, 0x1a73: 0x0269, 0x1a74: 0x01d9, 0x1a75: 0x0fa9, + 0x1a76: 0x0fb9, 0x1a77: 0x1089, 0x1a78: 0x0279, 0x1a79: 0x0369, 0x1a7a: 0x0289, 0x1a7b: 0x13d1, + 0x1a7c: 0x0039, 0x1a7d: 0x0ee9, 0x1a7e: 0x1159, 0x1a7f: 0x0ef9, // Block 0x6a, offset 0x1a80 - 0x1a80: 0x2079, 0x1a81: 0xbc01, 0x1a82: 0xbab1, 0x1a83: 0x1099, 0x1a84: 0x10b1, 0x1a85: 0x10c9, - 0x1a86: 0xbac9, 0x1a87: 0xbae1, 0x1a88: 0xbaf9, 0x1a89: 0x1429, 0x1a8a: 0x1a31, 0x1a8b: 0xbb11, - 0x1a8c: 0xbb29, 0x1a8d: 0xbb41, 0x1a8e: 0xbb59, 0x1a8f: 0xbb71, 0x1a90: 0xbb89, 0x1a91: 0x2109, - 0x1a92: 0x1111, 0x1a93: 0xbba1, 0x1a94: 0xbba1, 0x1a95: 0xbbb9, 0x1a96: 0xbbd1, 0x1a97: 0x10e1, - 0x1a98: 0x10f9, 0x1a99: 0xbbe9, 0x1a9a: 0x2079, 0x1a9b: 0xbc21, 0x1a9c: 0xbac9, 0x1a9d: 0x1429, - 0x1a9e: 0xbb11, 0x1a9f: 0x10e1, 0x1aa0: 0x1111, 0x1aa1: 0x2109, 0x1aa2: 0xbab1, 0x1aa3: 0x1099, - 0x1aa4: 0x10b1, 0x1aa5: 0x10c9, 0x1aa6: 0xbac9, 0x1aa7: 0xbae1, 0x1aa8: 0xbaf9, 0x1aa9: 0x1429, - 0x1aaa: 0x1a31, 0x1aab: 0xbb11, 0x1aac: 0xbb29, 0x1aad: 0xbb41, 0x1aae: 0xbb59, 0x1aaf: 0xbb71, - 0x1ab0: 0xbb89, 0x1ab1: 0x2109, 0x1ab2: 0x1111, 0x1ab3: 0x1429, 0x1ab4: 0xbba1, 0x1ab5: 0xbbb9, - 0x1ab6: 0xbbd1, 0x1ab7: 0x10e1, 0x1ab8: 0x10f9, 0x1ab9: 0xbbe9, 0x1aba: 0x2079, 0x1abb: 0xbc01, - 0x1abc: 0xbab1, 0x1abd: 0x1099, 0x1abe: 0x10b1, 0x1abf: 0x10c9, + 0x1a80: 0x0f09, 0x1a81: 0x1199, 0x1a82: 0x0f31, 0x1a83: 0x0249, 0x1a84: 0x0f41, 0x1a85: 0x0259, + 0x1a86: 0x0f51, 0x1a87: 0x0359, 0x1a88: 0x0f61, 0x1a89: 0x0f71, 0x1a8a: 0x00d9, 0x1a8b: 0x0f99, + 0x1a8c: 0x2039, 0x1a8d: 0x0269, 0x1a8e: 0x01d9, 0x1a8f: 0x0fa9, 0x1a90: 0x0fb9, 0x1a91: 0x1089, + 0x1a92: 0x0279, 0x1a93: 0x0369, 0x1a94: 0x0289, 0x1a95: 0x13d1, 0x1a96: 0x0039, 0x1a97: 0x0ee9, + 0x1a98: 0x1159, 0x1a99: 0x0ef9, 0x1a9a: 0x0f09, 0x1a9b: 0x1199, 0x1a9c: 0x0f31, 0x1a9d: 0x0249, + 0x1a9e: 0x0f41, 0x1a9f: 0x0259, 0x1aa0: 0x0f51, 0x1aa1: 0x0359, 0x1aa2: 0x0f61, 0x1aa3: 0x0f71, + 0x1aa4: 0x00d9, 0x1aa5: 0x0f99, 0x1aa6: 0x2039, 0x1aa7: 0x0269, 0x1aa8: 0x01d9, 0x1aa9: 0x0fa9, + 0x1aaa: 0x0fb9, 0x1aab: 0x1089, 0x1aac: 0x0279, 0x1aad: 0x0369, 0x1aae: 0x0289, 0x1aaf: 0x13d1, + 0x1ab0: 0x0039, 0x1ab1: 0x0ee9, 0x1ab2: 0x1159, 0x1ab3: 0x0ef9, 0x1ab4: 0x0f09, 0x1ab5: 0x1199, + 0x1ab6: 0x0f31, 0x1ab7: 0x0249, 0x1ab8: 0x0f41, 0x1ab9: 0x0259, 0x1aba: 0x0f51, 0x1abb: 0x0359, + 0x1abc: 0x0f61, 0x1abd: 0x0f71, 0x1abe: 0x00d9, 0x1abf: 0x0f99, // Block 0x6b, offset 0x1ac0 - 0x1ac0: 0xbac9, 0x1ac1: 0xbae1, 0x1ac2: 0xbaf9, 0x1ac3: 0x1429, 0x1ac4: 0x1a31, 0x1ac5: 0xbb11, - 0x1ac6: 0xbb29, 0x1ac7: 0xbb41, 0x1ac8: 0xbb59, 0x1ac9: 0xbb71, 0x1aca: 0xbb89, 0x1acb: 0x2109, - 0x1acc: 0x1111, 0x1acd: 0xbba1, 0x1ace: 0xbba1, 0x1acf: 0xbbb9, 0x1ad0: 0xbbd1, 0x1ad1: 0x10e1, - 0x1ad2: 0x10f9, 0x1ad3: 0xbbe9, 0x1ad4: 0x2079, 0x1ad5: 0xbc21, 0x1ad6: 0xbac9, 0x1ad7: 0x1429, - 0x1ad8: 0xbb11, 0x1ad9: 0x10e1, 0x1ada: 0x1111, 0x1adb: 0x2109, 0x1adc: 0xbab1, 0x1add: 0x1099, - 0x1ade: 0x10b1, 0x1adf: 0x10c9, 0x1ae0: 0xbac9, 0x1ae1: 0xbae1, 0x1ae2: 0xbaf9, 0x1ae3: 0x1429, - 0x1ae4: 0x1a31, 0x1ae5: 0xbb11, 0x1ae6: 0xbb29, 0x1ae7: 0xbb41, 0x1ae8: 0xbb59, 0x1ae9: 0xbb71, - 0x1aea: 0xbb89, 0x1aeb: 0x2109, 0x1aec: 0x1111, 0x1aed: 0x1429, 0x1aee: 0xbba1, 0x1aef: 0xbbb9, - 0x1af0: 0xbbd1, 0x1af1: 0x10e1, 0x1af2: 0x10f9, 0x1af3: 0xbbe9, 0x1af4: 0x2079, 0x1af5: 0xbc01, - 0x1af6: 0xbab1, 0x1af7: 0x1099, 0x1af8: 0x10b1, 0x1af9: 0x10c9, 0x1afa: 0xbac9, 0x1afb: 0xbae1, - 0x1afc: 0xbaf9, 0x1afd: 0x1429, 0x1afe: 0x1a31, 0x1aff: 0xbb11, + 0x1ac0: 0x2039, 0x1ac1: 0x0269, 0x1ac2: 0x01d9, 0x1ac3: 0x0fa9, 0x1ac4: 0x0fb9, 0x1ac5: 0x1089, + 0x1ac6: 0x0279, 0x1ac7: 0x0369, 0x1ac8: 0x0289, 0x1ac9: 0x13d1, 0x1aca: 0x0039, 0x1acb: 0x0ee9, + 0x1acc: 0x1159, 0x1acd: 0x0ef9, 0x1ace: 0x0f09, 0x1acf: 0x1199, 0x1ad0: 0x0f31, 0x1ad1: 0x0249, + 0x1ad2: 0x0f41, 0x1ad3: 0x0259, 0x1ad4: 0x0f51, 0x1ad5: 0x0359, 0x1ad6: 0x0f61, 0x1ad7: 0x0f71, + 0x1ad8: 0x00d9, 0x1ad9: 0x0f99, 0x1ada: 0x2039, 0x1adb: 0x0269, 0x1adc: 0x01d9, 0x1add: 0x0fa9, + 0x1ade: 0x0fb9, 0x1adf: 0x1089, 0x1ae0: 0x0279, 0x1ae1: 0x0369, 0x1ae2: 0x0289, 0x1ae3: 0x13d1, + 0x1ae4: 0xba81, 0x1ae5: 0xba99, 0x1ae6: 0x0040, 0x1ae7: 0x0040, 0x1ae8: 0xbab1, 0x1ae9: 0x1099, + 0x1aea: 0x10b1, 0x1aeb: 0x10c9, 0x1aec: 0xbac9, 0x1aed: 0xbae1, 0x1aee: 0xbaf9, 0x1aef: 0x1429, + 0x1af0: 0x1a31, 0x1af1: 0xbb11, 0x1af2: 0xbb29, 0x1af3: 0xbb41, 0x1af4: 0xbb59, 0x1af5: 0xbb71, + 0x1af6: 0xbb89, 0x1af7: 0x2109, 0x1af8: 0x1111, 0x1af9: 0x1429, 0x1afa: 0xbba1, 0x1afb: 0xbbb9, + 0x1afc: 0xbbd1, 0x1afd: 0x10e1, 0x1afe: 0x10f9, 0x1aff: 0xbbe9, // Block 0x6c, offset 0x1b00 - 0x1b00: 0xbb29, 0x1b01: 0xbb41, 0x1b02: 0xbb59, 0x1b03: 0xbb71, 0x1b04: 0xbb89, 0x1b05: 0x2109, - 0x1b06: 0x1111, 0x1b07: 0xbba1, 0x1b08: 0xbba1, 0x1b09: 0xbbb9, 0x1b0a: 0xbbd1, 0x1b0b: 0x10e1, - 0x1b0c: 0x10f9, 0x1b0d: 0xbbe9, 0x1b0e: 0x2079, 0x1b0f: 0xbc21, 0x1b10: 0xbac9, 0x1b11: 0x1429, - 0x1b12: 0xbb11, 0x1b13: 0x10e1, 0x1b14: 0x1111, 0x1b15: 0x2109, 0x1b16: 0xbab1, 0x1b17: 0x1099, - 0x1b18: 0x10b1, 0x1b19: 0x10c9, 0x1b1a: 0xbac9, 0x1b1b: 0xbae1, 0x1b1c: 0xbaf9, 0x1b1d: 0x1429, - 0x1b1e: 0x1a31, 0x1b1f: 0xbb11, 0x1b20: 0xbb29, 0x1b21: 0xbb41, 0x1b22: 0xbb59, 0x1b23: 0xbb71, - 0x1b24: 0xbb89, 0x1b25: 0x2109, 0x1b26: 0x1111, 0x1b27: 0x1429, 0x1b28: 0xbba1, 0x1b29: 0xbbb9, - 0x1b2a: 0xbbd1, 0x1b2b: 0x10e1, 0x1b2c: 0x10f9, 0x1b2d: 0xbbe9, 0x1b2e: 0x2079, 0x1b2f: 0xbc01, - 0x1b30: 0xbab1, 0x1b31: 0x1099, 0x1b32: 0x10b1, 0x1b33: 0x10c9, 0x1b34: 0xbac9, 0x1b35: 0xbae1, - 0x1b36: 0xbaf9, 0x1b37: 0x1429, 0x1b38: 0x1a31, 0x1b39: 0xbb11, 0x1b3a: 0xbb29, 0x1b3b: 0xbb41, - 0x1b3c: 0xbb59, 0x1b3d: 0xbb71, 0x1b3e: 0xbb89, 0x1b3f: 0x2109, + 0x1b00: 0x2079, 0x1b01: 0xbc01, 0x1b02: 0xbab1, 0x1b03: 0x1099, 0x1b04: 0x10b1, 0x1b05: 0x10c9, + 0x1b06: 0xbac9, 0x1b07: 0xbae1, 0x1b08: 0xbaf9, 0x1b09: 0x1429, 0x1b0a: 0x1a31, 0x1b0b: 0xbb11, + 0x1b0c: 0xbb29, 0x1b0d: 0xbb41, 0x1b0e: 0xbb59, 0x1b0f: 0xbb71, 0x1b10: 0xbb89, 0x1b11: 0x2109, + 0x1b12: 0x1111, 0x1b13: 0xbba1, 0x1b14: 0xbba1, 0x1b15: 0xbbb9, 0x1b16: 0xbbd1, 0x1b17: 0x10e1, + 0x1b18: 0x10f9, 0x1b19: 0xbbe9, 0x1b1a: 0x2079, 0x1b1b: 0xbc21, 0x1b1c: 0xbac9, 0x1b1d: 0x1429, + 0x1b1e: 0xbb11, 0x1b1f: 0x10e1, 0x1b20: 0x1111, 0x1b21: 0x2109, 0x1b22: 0xbab1, 0x1b23: 0x1099, + 0x1b24: 0x10b1, 0x1b25: 0x10c9, 0x1b26: 0xbac9, 0x1b27: 0xbae1, 0x1b28: 0xbaf9, 0x1b29: 0x1429, + 0x1b2a: 0x1a31, 0x1b2b: 0xbb11, 0x1b2c: 0xbb29, 0x1b2d: 0xbb41, 0x1b2e: 0xbb59, 0x1b2f: 0xbb71, + 0x1b30: 0xbb89, 0x1b31: 0x2109, 0x1b32: 0x1111, 0x1b33: 0x1429, 0x1b34: 0xbba1, 0x1b35: 0xbbb9, + 0x1b36: 0xbbd1, 0x1b37: 0x10e1, 0x1b38: 0x10f9, 0x1b39: 0xbbe9, 0x1b3a: 0x2079, 0x1b3b: 0xbc01, + 0x1b3c: 0xbab1, 0x1b3d: 0x1099, 0x1b3e: 0x10b1, 0x1b3f: 0x10c9, // Block 0x6d, offset 0x1b40 - 0x1b40: 0x1111, 0x1b41: 0xbba1, 0x1b42: 0xbba1, 0x1b43: 0xbbb9, 0x1b44: 0xbbd1, 0x1b45: 0x10e1, - 0x1b46: 0x10f9, 0x1b47: 0xbbe9, 0x1b48: 0x2079, 0x1b49: 0xbc21, 0x1b4a: 0xbac9, 0x1b4b: 0x1429, - 0x1b4c: 0xbb11, 0x1b4d: 0x10e1, 0x1b4e: 0x1111, 0x1b4f: 0x2109, 0x1b50: 0xbab1, 0x1b51: 0x1099, - 0x1b52: 0x10b1, 0x1b53: 0x10c9, 0x1b54: 0xbac9, 0x1b55: 0xbae1, 0x1b56: 0xbaf9, 0x1b57: 0x1429, - 0x1b58: 0x1a31, 0x1b59: 0xbb11, 0x1b5a: 0xbb29, 0x1b5b: 0xbb41, 0x1b5c: 0xbb59, 0x1b5d: 0xbb71, - 0x1b5e: 0xbb89, 0x1b5f: 0x2109, 0x1b60: 0x1111, 0x1b61: 0x1429, 0x1b62: 0xbba1, 0x1b63: 0xbbb9, - 0x1b64: 0xbbd1, 0x1b65: 0x10e1, 0x1b66: 0x10f9, 0x1b67: 0xbbe9, 0x1b68: 0x2079, 0x1b69: 0xbc01, - 0x1b6a: 0xbab1, 0x1b6b: 0x1099, 0x1b6c: 0x10b1, 0x1b6d: 0x10c9, 0x1b6e: 0xbac9, 0x1b6f: 0xbae1, - 0x1b70: 0xbaf9, 0x1b71: 0x1429, 0x1b72: 0x1a31, 0x1b73: 0xbb11, 0x1b74: 0xbb29, 0x1b75: 0xbb41, - 0x1b76: 0xbb59, 0x1b77: 0xbb71, 0x1b78: 0xbb89, 0x1b79: 0x2109, 0x1b7a: 0x1111, 0x1b7b: 0xbba1, - 0x1b7c: 0xbba1, 0x1b7d: 0xbbb9, 0x1b7e: 0xbbd1, 0x1b7f: 0x10e1, + 0x1b40: 0xbac9, 0x1b41: 0xbae1, 0x1b42: 0xbaf9, 0x1b43: 0x1429, 0x1b44: 0x1a31, 0x1b45: 0xbb11, + 0x1b46: 0xbb29, 0x1b47: 0xbb41, 0x1b48: 0xbb59, 0x1b49: 0xbb71, 0x1b4a: 0xbb89, 0x1b4b: 0x2109, + 0x1b4c: 0x1111, 0x1b4d: 0xbba1, 0x1b4e: 0xbba1, 0x1b4f: 0xbbb9, 0x1b50: 0xbbd1, 0x1b51: 0x10e1, + 0x1b52: 0x10f9, 0x1b53: 0xbbe9, 0x1b54: 0x2079, 0x1b55: 0xbc21, 0x1b56: 0xbac9, 0x1b57: 0x1429, + 0x1b58: 0xbb11, 0x1b59: 0x10e1, 0x1b5a: 0x1111, 0x1b5b: 0x2109, 0x1b5c: 0xbab1, 0x1b5d: 0x1099, + 0x1b5e: 0x10b1, 0x1b5f: 0x10c9, 0x1b60: 0xbac9, 0x1b61: 0xbae1, 0x1b62: 0xbaf9, 0x1b63: 0x1429, + 0x1b64: 0x1a31, 0x1b65: 0xbb11, 0x1b66: 0xbb29, 0x1b67: 0xbb41, 0x1b68: 0xbb59, 0x1b69: 0xbb71, + 0x1b6a: 0xbb89, 0x1b6b: 0x2109, 0x1b6c: 0x1111, 0x1b6d: 0x1429, 0x1b6e: 0xbba1, 0x1b6f: 0xbbb9, + 0x1b70: 0xbbd1, 0x1b71: 0x10e1, 0x1b72: 0x10f9, 0x1b73: 0xbbe9, 0x1b74: 0x2079, 0x1b75: 0xbc01, + 0x1b76: 0xbab1, 0x1b77: 0x1099, 0x1b78: 0x10b1, 0x1b79: 0x10c9, 0x1b7a: 0xbac9, 0x1b7b: 0xbae1, + 0x1b7c: 0xbaf9, 0x1b7d: 0x1429, 0x1b7e: 0x1a31, 0x1b7f: 0xbb11, // Block 0x6e, offset 0x1b80 - 0x1b80: 0x10f9, 0x1b81: 0xbbe9, 0x1b82: 0x2079, 0x1b83: 0xbc21, 0x1b84: 0xbac9, 0x1b85: 0x1429, - 0x1b86: 0xbb11, 0x1b87: 0x10e1, 0x1b88: 0x1111, 0x1b89: 0x2109, 0x1b8a: 0xbc41, 0x1b8b: 0xbc41, - 0x1b8c: 0x0040, 0x1b8d: 0x0040, 0x1b8e: 0x1f41, 0x1b8f: 0x00c9, 0x1b90: 0x0069, 0x1b91: 0x0079, - 0x1b92: 0x1f51, 0x1b93: 0x1f61, 0x1b94: 0x1f71, 0x1b95: 0x1f81, 0x1b96: 0x1f91, 0x1b97: 0x1fa1, - 0x1b98: 0x1f41, 0x1b99: 0x00c9, 0x1b9a: 0x0069, 0x1b9b: 0x0079, 0x1b9c: 0x1f51, 0x1b9d: 0x1f61, - 0x1b9e: 0x1f71, 0x1b9f: 0x1f81, 0x1ba0: 0x1f91, 0x1ba1: 0x1fa1, 0x1ba2: 0x1f41, 0x1ba3: 0x00c9, - 0x1ba4: 0x0069, 0x1ba5: 0x0079, 0x1ba6: 0x1f51, 0x1ba7: 0x1f61, 0x1ba8: 0x1f71, 0x1ba9: 0x1f81, - 0x1baa: 0x1f91, 0x1bab: 0x1fa1, 0x1bac: 0x1f41, 0x1bad: 0x00c9, 0x1bae: 0x0069, 0x1baf: 0x0079, - 0x1bb0: 0x1f51, 0x1bb1: 0x1f61, 0x1bb2: 0x1f71, 0x1bb3: 0x1f81, 0x1bb4: 0x1f91, 0x1bb5: 0x1fa1, - 0x1bb6: 0x1f41, 0x1bb7: 0x00c9, 0x1bb8: 0x0069, 0x1bb9: 0x0079, 0x1bba: 0x1f51, 0x1bbb: 0x1f61, - 0x1bbc: 0x1f71, 0x1bbd: 0x1f81, 0x1bbe: 0x1f91, 0x1bbf: 0x1fa1, + 0x1b80: 0xbb29, 0x1b81: 0xbb41, 0x1b82: 0xbb59, 0x1b83: 0xbb71, 0x1b84: 0xbb89, 0x1b85: 0x2109, + 0x1b86: 0x1111, 0x1b87: 0xbba1, 0x1b88: 0xbba1, 0x1b89: 0xbbb9, 0x1b8a: 0xbbd1, 0x1b8b: 0x10e1, + 0x1b8c: 0x10f9, 0x1b8d: 0xbbe9, 0x1b8e: 0x2079, 0x1b8f: 0xbc21, 0x1b90: 0xbac9, 0x1b91: 0x1429, + 0x1b92: 0xbb11, 0x1b93: 0x10e1, 0x1b94: 0x1111, 0x1b95: 0x2109, 0x1b96: 0xbab1, 0x1b97: 0x1099, + 0x1b98: 0x10b1, 0x1b99: 0x10c9, 0x1b9a: 0xbac9, 0x1b9b: 0xbae1, 0x1b9c: 0xbaf9, 0x1b9d: 0x1429, + 0x1b9e: 0x1a31, 0x1b9f: 0xbb11, 0x1ba0: 0xbb29, 0x1ba1: 0xbb41, 0x1ba2: 0xbb59, 0x1ba3: 0xbb71, + 0x1ba4: 0xbb89, 0x1ba5: 0x2109, 0x1ba6: 0x1111, 0x1ba7: 0x1429, 0x1ba8: 0xbba1, 0x1ba9: 0xbbb9, + 0x1baa: 0xbbd1, 0x1bab: 0x10e1, 0x1bac: 0x10f9, 0x1bad: 0xbbe9, 0x1bae: 0x2079, 0x1baf: 0xbc01, + 0x1bb0: 0xbab1, 0x1bb1: 0x1099, 0x1bb2: 0x10b1, 0x1bb3: 0x10c9, 0x1bb4: 0xbac9, 0x1bb5: 0xbae1, + 0x1bb6: 0xbaf9, 0x1bb7: 0x1429, 0x1bb8: 0x1a31, 0x1bb9: 0xbb11, 0x1bba: 0xbb29, 0x1bbb: 0xbb41, + 0x1bbc: 0xbb59, 0x1bbd: 0xbb71, 0x1bbe: 0xbb89, 0x1bbf: 0x2109, // Block 0x6f, offset 0x1bc0 - 0x1bc0: 0xe115, 0x1bc1: 0xe115, 0x1bc2: 0xe135, 0x1bc3: 0xe135, 0x1bc4: 0xe115, 0x1bc5: 0xe115, - 0x1bc6: 0xe175, 0x1bc7: 0xe175, 0x1bc8: 0xe115, 0x1bc9: 0xe115, 0x1bca: 0xe135, 0x1bcb: 0xe135, - 0x1bcc: 0xe115, 0x1bcd: 0xe115, 0x1bce: 0xe1f5, 0x1bcf: 0xe1f5, 0x1bd0: 0xe115, 0x1bd1: 0xe115, - 0x1bd2: 0xe135, 0x1bd3: 0xe135, 0x1bd4: 0xe115, 0x1bd5: 0xe115, 0x1bd6: 0xe175, 0x1bd7: 0xe175, - 0x1bd8: 0xe115, 0x1bd9: 0xe115, 0x1bda: 0xe135, 0x1bdb: 0xe135, 0x1bdc: 0xe115, 0x1bdd: 0xe115, - 0x1bde: 0x8b05, 0x1bdf: 0x8b05, 0x1be0: 0x04b5, 0x1be1: 0x04b5, 0x1be2: 0x0208, 0x1be3: 0x0208, - 0x1be4: 0x0208, 0x1be5: 0x0208, 0x1be6: 0x0208, 0x1be7: 0x0208, 0x1be8: 0x0208, 0x1be9: 0x0208, - 0x1bea: 0x0208, 0x1beb: 0x0208, 0x1bec: 0x0208, 0x1bed: 0x0208, 0x1bee: 0x0208, 0x1bef: 0x0208, - 0x1bf0: 0x0208, 0x1bf1: 0x0208, 0x1bf2: 0x0208, 0x1bf3: 0x0208, 0x1bf4: 0x0208, 0x1bf5: 0x0208, - 0x1bf6: 0x0208, 0x1bf7: 0x0208, 0x1bf8: 0x0208, 0x1bf9: 0x0208, 0x1bfa: 0x0208, 0x1bfb: 0x0208, - 0x1bfc: 0x0208, 0x1bfd: 0x0208, 0x1bfe: 0x0208, 0x1bff: 0x0208, + 0x1bc0: 0x1111, 0x1bc1: 0xbba1, 0x1bc2: 0xbba1, 0x1bc3: 0xbbb9, 0x1bc4: 0xbbd1, 0x1bc5: 0x10e1, + 0x1bc6: 0x10f9, 0x1bc7: 0xbbe9, 0x1bc8: 0x2079, 0x1bc9: 0xbc21, 0x1bca: 0xbac9, 0x1bcb: 0x1429, + 0x1bcc: 0xbb11, 0x1bcd: 0x10e1, 0x1bce: 0x1111, 0x1bcf: 0x2109, 0x1bd0: 0xbab1, 0x1bd1: 0x1099, + 0x1bd2: 0x10b1, 0x1bd3: 0x10c9, 0x1bd4: 0xbac9, 0x1bd5: 0xbae1, 0x1bd6: 0xbaf9, 0x1bd7: 0x1429, + 0x1bd8: 0x1a31, 0x1bd9: 0xbb11, 0x1bda: 0xbb29, 0x1bdb: 0xbb41, 0x1bdc: 0xbb59, 0x1bdd: 0xbb71, + 0x1bde: 0xbb89, 0x1bdf: 0x2109, 0x1be0: 0x1111, 0x1be1: 0x1429, 0x1be2: 0xbba1, 0x1be3: 0xbbb9, + 0x1be4: 0xbbd1, 0x1be5: 0x10e1, 0x1be6: 0x10f9, 0x1be7: 0xbbe9, 0x1be8: 0x2079, 0x1be9: 0xbc01, + 0x1bea: 0xbab1, 0x1beb: 0x1099, 0x1bec: 0x10b1, 0x1bed: 0x10c9, 0x1bee: 0xbac9, 0x1bef: 0xbae1, + 0x1bf0: 0xbaf9, 0x1bf1: 0x1429, 0x1bf2: 0x1a31, 0x1bf3: 0xbb11, 0x1bf4: 0xbb29, 0x1bf5: 0xbb41, + 0x1bf6: 0xbb59, 0x1bf7: 0xbb71, 0x1bf8: 0xbb89, 0x1bf9: 0x2109, 0x1bfa: 0x1111, 0x1bfb: 0xbba1, + 0x1bfc: 0xbba1, 0x1bfd: 0xbbb9, 0x1bfe: 0xbbd1, 0x1bff: 0x10e1, // Block 0x70, offset 0x1c00 - 0x1c00: 0xb189, 0x1c01: 0xb1a1, 0x1c02: 0xb201, 0x1c03: 0xb249, 0x1c04: 0x0040, 0x1c05: 0xb411, - 0x1c06: 0xb291, 0x1c07: 0xb219, 0x1c08: 0xb309, 0x1c09: 0xb429, 0x1c0a: 0xb399, 0x1c0b: 0xb3b1, - 0x1c0c: 0xb3c9, 0x1c0d: 0xb3e1, 0x1c0e: 0xb2a9, 0x1c0f: 0xb339, 0x1c10: 0xb369, 0x1c11: 0xb2d9, - 0x1c12: 0xb381, 0x1c13: 0xb279, 0x1c14: 0xb2c1, 0x1c15: 0xb1d1, 0x1c16: 0xb1e9, 0x1c17: 0xb231, - 0x1c18: 0xb261, 0x1c19: 0xb2f1, 0x1c1a: 0xb321, 0x1c1b: 0xb351, 0x1c1c: 0xbc59, 0x1c1d: 0x7949, - 0x1c1e: 0xbc71, 0x1c1f: 0xbc89, 0x1c20: 0x0040, 0x1c21: 0xb1a1, 0x1c22: 0xb201, 0x1c23: 0x0040, - 0x1c24: 0xb3f9, 0x1c25: 0x0040, 0x1c26: 0x0040, 0x1c27: 0xb219, 0x1c28: 0x0040, 0x1c29: 0xb429, - 0x1c2a: 0xb399, 0x1c2b: 0xb3b1, 0x1c2c: 0xb3c9, 0x1c2d: 0xb3e1, 0x1c2e: 0xb2a9, 0x1c2f: 0xb339, - 0x1c30: 0xb369, 0x1c31: 0xb2d9, 0x1c32: 0xb381, 0x1c33: 0x0040, 0x1c34: 0xb2c1, 0x1c35: 0xb1d1, - 0x1c36: 0xb1e9, 0x1c37: 0xb231, 0x1c38: 0x0040, 0x1c39: 0xb2f1, 0x1c3a: 0x0040, 0x1c3b: 0xb351, - 0x1c3c: 0x0040, 0x1c3d: 0x0040, 0x1c3e: 0x0040, 0x1c3f: 0x0040, + 0x1c00: 0x10f9, 0x1c01: 0xbbe9, 0x1c02: 0x2079, 0x1c03: 0xbc21, 0x1c04: 0xbac9, 0x1c05: 0x1429, + 0x1c06: 0xbb11, 0x1c07: 0x10e1, 0x1c08: 0x1111, 0x1c09: 0x2109, 0x1c0a: 0xbc41, 0x1c0b: 0xbc41, + 0x1c0c: 0x0040, 0x1c0d: 0x0040, 0x1c0e: 0x1f41, 0x1c0f: 0x00c9, 0x1c10: 0x0069, 0x1c11: 0x0079, + 0x1c12: 0x1f51, 0x1c13: 0x1f61, 0x1c14: 0x1f71, 0x1c15: 0x1f81, 0x1c16: 0x1f91, 0x1c17: 0x1fa1, + 0x1c18: 0x1f41, 0x1c19: 0x00c9, 0x1c1a: 0x0069, 0x1c1b: 0x0079, 0x1c1c: 0x1f51, 0x1c1d: 0x1f61, + 0x1c1e: 0x1f71, 0x1c1f: 0x1f81, 0x1c20: 0x1f91, 0x1c21: 0x1fa1, 0x1c22: 0x1f41, 0x1c23: 0x00c9, + 0x1c24: 0x0069, 0x1c25: 0x0079, 0x1c26: 0x1f51, 0x1c27: 0x1f61, 0x1c28: 0x1f71, 0x1c29: 0x1f81, + 0x1c2a: 0x1f91, 0x1c2b: 0x1fa1, 0x1c2c: 0x1f41, 0x1c2d: 0x00c9, 0x1c2e: 0x0069, 0x1c2f: 0x0079, + 0x1c30: 0x1f51, 0x1c31: 0x1f61, 0x1c32: 0x1f71, 0x1c33: 0x1f81, 0x1c34: 0x1f91, 0x1c35: 0x1fa1, + 0x1c36: 0x1f41, 0x1c37: 0x00c9, 0x1c38: 0x0069, 0x1c39: 0x0079, 0x1c3a: 0x1f51, 0x1c3b: 0x1f61, + 0x1c3c: 0x1f71, 0x1c3d: 0x1f81, 0x1c3e: 0x1f91, 0x1c3f: 0x1fa1, // Block 0x71, offset 0x1c40 - 0x1c40: 0x0040, 0x1c41: 0x0040, 0x1c42: 0xb201, 0x1c43: 0x0040, 0x1c44: 0x0040, 0x1c45: 0x0040, - 0x1c46: 0x0040, 0x1c47: 0xb219, 0x1c48: 0x0040, 0x1c49: 0xb429, 0x1c4a: 0x0040, 0x1c4b: 0xb3b1, - 0x1c4c: 0x0040, 0x1c4d: 0xb3e1, 0x1c4e: 0xb2a9, 0x1c4f: 0xb339, 0x1c50: 0x0040, 0x1c51: 0xb2d9, - 0x1c52: 0xb381, 0x1c53: 0x0040, 0x1c54: 0xb2c1, 0x1c55: 0x0040, 0x1c56: 0x0040, 0x1c57: 0xb231, - 0x1c58: 0x0040, 0x1c59: 0xb2f1, 0x1c5a: 0x0040, 0x1c5b: 0xb351, 0x1c5c: 0x0040, 0x1c5d: 0x7949, - 0x1c5e: 0x0040, 0x1c5f: 0xbc89, 0x1c60: 0x0040, 0x1c61: 0xb1a1, 0x1c62: 0xb201, 0x1c63: 0x0040, - 0x1c64: 0xb3f9, 0x1c65: 0x0040, 0x1c66: 0x0040, 0x1c67: 0xb219, 0x1c68: 0xb309, 0x1c69: 0xb429, - 0x1c6a: 0xb399, 0x1c6b: 0x0040, 0x1c6c: 0xb3c9, 0x1c6d: 0xb3e1, 0x1c6e: 0xb2a9, 0x1c6f: 0xb339, - 0x1c70: 0xb369, 0x1c71: 0xb2d9, 0x1c72: 0xb381, 0x1c73: 0x0040, 0x1c74: 0xb2c1, 0x1c75: 0xb1d1, - 0x1c76: 0xb1e9, 0x1c77: 0xb231, 0x1c78: 0x0040, 0x1c79: 0xb2f1, 0x1c7a: 0xb321, 0x1c7b: 0xb351, - 0x1c7c: 0xbc59, 0x1c7d: 0x0040, 0x1c7e: 0xbc71, 0x1c7f: 0x0040, + 0x1c40: 0xe115, 0x1c41: 0xe115, 0x1c42: 0xe135, 0x1c43: 0xe135, 0x1c44: 0xe115, 0x1c45: 0xe115, + 0x1c46: 0xe175, 0x1c47: 0xe175, 0x1c48: 0xe115, 0x1c49: 0xe115, 0x1c4a: 0xe135, 0x1c4b: 0xe135, + 0x1c4c: 0xe115, 0x1c4d: 0xe115, 0x1c4e: 0xe1f5, 0x1c4f: 0xe1f5, 0x1c50: 0xe115, 0x1c51: 0xe115, + 0x1c52: 0xe135, 0x1c53: 0xe135, 0x1c54: 0xe115, 0x1c55: 0xe115, 0x1c56: 0xe175, 0x1c57: 0xe175, + 0x1c58: 0xe115, 0x1c59: 0xe115, 0x1c5a: 0xe135, 0x1c5b: 0xe135, 0x1c5c: 0xe115, 0x1c5d: 0xe115, + 0x1c5e: 0x8b05, 0x1c5f: 0x8b05, 0x1c60: 0x04b5, 0x1c61: 0x04b5, 0x1c62: 0x0a08, 0x1c63: 0x0a08, + 0x1c64: 0x0a08, 0x1c65: 0x0a08, 0x1c66: 0x0a08, 0x1c67: 0x0a08, 0x1c68: 0x0a08, 0x1c69: 0x0a08, + 0x1c6a: 0x0a08, 0x1c6b: 0x0a08, 0x1c6c: 0x0a08, 0x1c6d: 0x0a08, 0x1c6e: 0x0a08, 0x1c6f: 0x0a08, + 0x1c70: 0x0a08, 0x1c71: 0x0a08, 0x1c72: 0x0a08, 0x1c73: 0x0a08, 0x1c74: 0x0a08, 0x1c75: 0x0a08, + 0x1c76: 0x0a08, 0x1c77: 0x0a08, 0x1c78: 0x0a08, 0x1c79: 0x0a08, 0x1c7a: 0x0a08, 0x1c7b: 0x0a08, + 0x1c7c: 0x0a08, 0x1c7d: 0x0a08, 0x1c7e: 0x0a08, 0x1c7f: 0x0a08, // Block 0x72, offset 0x1c80 - 0x1c80: 0xb189, 0x1c81: 0xb1a1, 0x1c82: 0xb201, 0x1c83: 0xb249, 0x1c84: 0xb3f9, 0x1c85: 0xb411, - 0x1c86: 0xb291, 0x1c87: 0xb219, 0x1c88: 0xb309, 0x1c89: 0xb429, 0x1c8a: 0x0040, 0x1c8b: 0xb3b1, + 0x1c80: 0xb189, 0x1c81: 0xb1a1, 0x1c82: 0xb201, 0x1c83: 0xb249, 0x1c84: 0x0040, 0x1c85: 0xb411, + 0x1c86: 0xb291, 0x1c87: 0xb219, 0x1c88: 0xb309, 0x1c89: 0xb429, 0x1c8a: 0xb399, 0x1c8b: 0xb3b1, 0x1c8c: 0xb3c9, 0x1c8d: 0xb3e1, 0x1c8e: 0xb2a9, 0x1c8f: 0xb339, 0x1c90: 0xb369, 0x1c91: 0xb2d9, 0x1c92: 0xb381, 0x1c93: 0xb279, 0x1c94: 0xb2c1, 0x1c95: 0xb1d1, 0x1c96: 0xb1e9, 0x1c97: 0xb231, - 0x1c98: 0xb261, 0x1c99: 0xb2f1, 0x1c9a: 0xb321, 0x1c9b: 0xb351, 0x1c9c: 0x0040, 0x1c9d: 0x0040, - 0x1c9e: 0x0040, 0x1c9f: 0x0040, 0x1ca0: 0x0040, 0x1ca1: 0xb1a1, 0x1ca2: 0xb201, 0x1ca3: 0xb249, - 0x1ca4: 0x0040, 0x1ca5: 0xb411, 0x1ca6: 0xb291, 0x1ca7: 0xb219, 0x1ca8: 0xb309, 0x1ca9: 0xb429, - 0x1caa: 0x0040, 0x1cab: 0xb3b1, 0x1cac: 0xb3c9, 0x1cad: 0xb3e1, 0x1cae: 0xb2a9, 0x1caf: 0xb339, - 0x1cb0: 0xb369, 0x1cb1: 0xb2d9, 0x1cb2: 0xb381, 0x1cb3: 0xb279, 0x1cb4: 0xb2c1, 0x1cb5: 0xb1d1, - 0x1cb6: 0xb1e9, 0x1cb7: 0xb231, 0x1cb8: 0xb261, 0x1cb9: 0xb2f1, 0x1cba: 0xb321, 0x1cbb: 0xb351, + 0x1c98: 0xb261, 0x1c99: 0xb2f1, 0x1c9a: 0xb321, 0x1c9b: 0xb351, 0x1c9c: 0xbc59, 0x1c9d: 0x7949, + 0x1c9e: 0xbc71, 0x1c9f: 0xbc89, 0x1ca0: 0x0040, 0x1ca1: 0xb1a1, 0x1ca2: 0xb201, 0x1ca3: 0x0040, + 0x1ca4: 0xb3f9, 0x1ca5: 0x0040, 0x1ca6: 0x0040, 0x1ca7: 0xb219, 0x1ca8: 0x0040, 0x1ca9: 0xb429, + 0x1caa: 0xb399, 0x1cab: 0xb3b1, 0x1cac: 0xb3c9, 0x1cad: 0xb3e1, 0x1cae: 0xb2a9, 0x1caf: 0xb339, + 0x1cb0: 0xb369, 0x1cb1: 0xb2d9, 0x1cb2: 0xb381, 0x1cb3: 0x0040, 0x1cb4: 0xb2c1, 0x1cb5: 0xb1d1, + 0x1cb6: 0xb1e9, 0x1cb7: 0xb231, 0x1cb8: 0x0040, 0x1cb9: 0xb2f1, 0x1cba: 0x0040, 0x1cbb: 0xb351, 0x1cbc: 0x0040, 0x1cbd: 0x0040, 0x1cbe: 0x0040, 0x1cbf: 0x0040, // Block 0x73, offset 0x1cc0 - 0x1cc0: 0x0040, 0x1cc1: 0xbca2, 0x1cc2: 0xbcba, 0x1cc3: 0xbcd2, 0x1cc4: 0xbcea, 0x1cc5: 0xbd02, - 0x1cc6: 0xbd1a, 0x1cc7: 0xbd32, 0x1cc8: 0xbd4a, 0x1cc9: 0xbd62, 0x1cca: 0xbd7a, 0x1ccb: 0x0018, - 0x1ccc: 0x0018, 0x1ccd: 0x0040, 0x1cce: 0x0040, 0x1ccf: 0x0040, 0x1cd0: 0xbd92, 0x1cd1: 0xbdb2, - 0x1cd2: 0xbdd2, 0x1cd3: 0xbdf2, 0x1cd4: 0xbe12, 0x1cd5: 0xbe32, 0x1cd6: 0xbe52, 0x1cd7: 0xbe72, - 0x1cd8: 0xbe92, 0x1cd9: 0xbeb2, 0x1cda: 0xbed2, 0x1cdb: 0xbef2, 0x1cdc: 0xbf12, 0x1cdd: 0xbf32, - 0x1cde: 0xbf52, 0x1cdf: 0xbf72, 0x1ce0: 0xbf92, 0x1ce1: 0xbfb2, 0x1ce2: 0xbfd2, 0x1ce3: 0xbff2, - 0x1ce4: 0xc012, 0x1ce5: 0xc032, 0x1ce6: 0xc052, 0x1ce7: 0xc072, 0x1ce8: 0xc092, 0x1ce9: 0xc0b2, - 0x1cea: 0xc0d1, 0x1ceb: 0x1159, 0x1cec: 0x0269, 0x1ced: 0x6671, 0x1cee: 0xc111, 0x1cef: 0x0040, - 0x1cf0: 0x0039, 0x1cf1: 0x0ee9, 0x1cf2: 0x1159, 0x1cf3: 0x0ef9, 0x1cf4: 0x0f09, 0x1cf5: 0x1199, - 0x1cf6: 0x0f31, 0x1cf7: 0x0249, 0x1cf8: 0x0f41, 0x1cf9: 0x0259, 0x1cfa: 0x0f51, 0x1cfb: 0x0359, - 0x1cfc: 0x0f61, 0x1cfd: 0x0f71, 0x1cfe: 0x00d9, 0x1cff: 0x0f99, + 0x1cc0: 0x0040, 0x1cc1: 0x0040, 0x1cc2: 0xb201, 0x1cc3: 0x0040, 0x1cc4: 0x0040, 0x1cc5: 0x0040, + 0x1cc6: 0x0040, 0x1cc7: 0xb219, 0x1cc8: 0x0040, 0x1cc9: 0xb429, 0x1cca: 0x0040, 0x1ccb: 0xb3b1, + 0x1ccc: 0x0040, 0x1ccd: 0xb3e1, 0x1cce: 0xb2a9, 0x1ccf: 0xb339, 0x1cd0: 0x0040, 0x1cd1: 0xb2d9, + 0x1cd2: 0xb381, 0x1cd3: 0x0040, 0x1cd4: 0xb2c1, 0x1cd5: 0x0040, 0x1cd6: 0x0040, 0x1cd7: 0xb231, + 0x1cd8: 0x0040, 0x1cd9: 0xb2f1, 0x1cda: 0x0040, 0x1cdb: 0xb351, 0x1cdc: 0x0040, 0x1cdd: 0x7949, + 0x1cde: 0x0040, 0x1cdf: 0xbc89, 0x1ce0: 0x0040, 0x1ce1: 0xb1a1, 0x1ce2: 0xb201, 0x1ce3: 0x0040, + 0x1ce4: 0xb3f9, 0x1ce5: 0x0040, 0x1ce6: 0x0040, 0x1ce7: 0xb219, 0x1ce8: 0xb309, 0x1ce9: 0xb429, + 0x1cea: 0xb399, 0x1ceb: 0x0040, 0x1cec: 0xb3c9, 0x1ced: 0xb3e1, 0x1cee: 0xb2a9, 0x1cef: 0xb339, + 0x1cf0: 0xb369, 0x1cf1: 0xb2d9, 0x1cf2: 0xb381, 0x1cf3: 0x0040, 0x1cf4: 0xb2c1, 0x1cf5: 0xb1d1, + 0x1cf6: 0xb1e9, 0x1cf7: 0xb231, 0x1cf8: 0x0040, 0x1cf9: 0xb2f1, 0x1cfa: 0xb321, 0x1cfb: 0xb351, + 0x1cfc: 0xbc59, 0x1cfd: 0x0040, 0x1cfe: 0xbc71, 0x1cff: 0x0040, // Block 0x74, offset 0x1d00 - 0x1d00: 0x2039, 0x1d01: 0x0269, 0x1d02: 0x01d9, 0x1d03: 0x0fa9, 0x1d04: 0x0fb9, 0x1d05: 0x1089, - 0x1d06: 0x0279, 0x1d07: 0x0369, 0x1d08: 0x0289, 0x1d09: 0x13d1, 0x1d0a: 0xc129, 0x1d0b: 0x65b1, - 0x1d0c: 0xc141, 0x1d0d: 0x1441, 0x1d0e: 0xc159, 0x1d0f: 0xc179, 0x1d10: 0x0018, 0x1d11: 0x0018, - 0x1d12: 0x0018, 0x1d13: 0x0018, 0x1d14: 0x0018, 0x1d15: 0x0018, 0x1d16: 0x0018, 0x1d17: 0x0018, - 0x1d18: 0x0018, 0x1d19: 0x0018, 0x1d1a: 0x0018, 0x1d1b: 0x0018, 0x1d1c: 0x0018, 0x1d1d: 0x0018, - 0x1d1e: 0x0018, 0x1d1f: 0x0018, 0x1d20: 0x0018, 0x1d21: 0x0018, 0x1d22: 0x0018, 0x1d23: 0x0018, - 0x1d24: 0x0018, 0x1d25: 0x0018, 0x1d26: 0x0018, 0x1d27: 0x0018, 0x1d28: 0x0018, 0x1d29: 0x0018, - 0x1d2a: 0xc191, 0x1d2b: 0xc1a9, 0x1d2c: 0x0040, 0x1d2d: 0x0040, 0x1d2e: 0x0040, 0x1d2f: 0x0040, - 0x1d30: 0x0018, 0x1d31: 0x0018, 0x1d32: 0x0018, 0x1d33: 0x0018, 0x1d34: 0x0018, 0x1d35: 0x0018, - 0x1d36: 0x0018, 0x1d37: 0x0018, 0x1d38: 0x0018, 0x1d39: 0x0018, 0x1d3a: 0x0018, 0x1d3b: 0x0018, - 0x1d3c: 0x0018, 0x1d3d: 0x0018, 0x1d3e: 0x0018, 0x1d3f: 0x0018, + 0x1d00: 0xb189, 0x1d01: 0xb1a1, 0x1d02: 0xb201, 0x1d03: 0xb249, 0x1d04: 0xb3f9, 0x1d05: 0xb411, + 0x1d06: 0xb291, 0x1d07: 0xb219, 0x1d08: 0xb309, 0x1d09: 0xb429, 0x1d0a: 0x0040, 0x1d0b: 0xb3b1, + 0x1d0c: 0xb3c9, 0x1d0d: 0xb3e1, 0x1d0e: 0xb2a9, 0x1d0f: 0xb339, 0x1d10: 0xb369, 0x1d11: 0xb2d9, + 0x1d12: 0xb381, 0x1d13: 0xb279, 0x1d14: 0xb2c1, 0x1d15: 0xb1d1, 0x1d16: 0xb1e9, 0x1d17: 0xb231, + 0x1d18: 0xb261, 0x1d19: 0xb2f1, 0x1d1a: 0xb321, 0x1d1b: 0xb351, 0x1d1c: 0x0040, 0x1d1d: 0x0040, + 0x1d1e: 0x0040, 0x1d1f: 0x0040, 0x1d20: 0x0040, 0x1d21: 0xb1a1, 0x1d22: 0xb201, 0x1d23: 0xb249, + 0x1d24: 0x0040, 0x1d25: 0xb411, 0x1d26: 0xb291, 0x1d27: 0xb219, 0x1d28: 0xb309, 0x1d29: 0xb429, + 0x1d2a: 0x0040, 0x1d2b: 0xb3b1, 0x1d2c: 0xb3c9, 0x1d2d: 0xb3e1, 0x1d2e: 0xb2a9, 0x1d2f: 0xb339, + 0x1d30: 0xb369, 0x1d31: 0xb2d9, 0x1d32: 0xb381, 0x1d33: 0xb279, 0x1d34: 0xb2c1, 0x1d35: 0xb1d1, + 0x1d36: 0xb1e9, 0x1d37: 0xb231, 0x1d38: 0xb261, 0x1d39: 0xb2f1, 0x1d3a: 0xb321, 0x1d3b: 0xb351, + 0x1d3c: 0x0040, 0x1d3d: 0x0040, 0x1d3e: 0x0040, 0x1d3f: 0x0040, // Block 0x75, offset 0x1d40 - 0x1d40: 0xc1d9, 0x1d41: 0xc211, 0x1d42: 0xc249, 0x1d43: 0x0040, 0x1d44: 0x0040, 0x1d45: 0x0040, - 0x1d46: 0x0040, 0x1d47: 0x0040, 0x1d48: 0x0040, 0x1d49: 0x0040, 0x1d4a: 0x0040, 0x1d4b: 0x0040, - 0x1d4c: 0x0040, 0x1d4d: 0x0040, 0x1d4e: 0x0040, 0x1d4f: 0x0040, 0x1d50: 0xc269, 0x1d51: 0xc289, - 0x1d52: 0xc2a9, 0x1d53: 0xc2c9, 0x1d54: 0xc2e9, 0x1d55: 0xc309, 0x1d56: 0xc329, 0x1d57: 0xc349, - 0x1d58: 0xc369, 0x1d59: 0xc389, 0x1d5a: 0xc3a9, 0x1d5b: 0xc3c9, 0x1d5c: 0xc3e9, 0x1d5d: 0xc409, - 0x1d5e: 0xc429, 0x1d5f: 0xc449, 0x1d60: 0xc469, 0x1d61: 0xc489, 0x1d62: 0xc4a9, 0x1d63: 0xc4c9, - 0x1d64: 0xc4e9, 0x1d65: 0xc509, 0x1d66: 0xc529, 0x1d67: 0xc549, 0x1d68: 0xc569, 0x1d69: 0xc589, - 0x1d6a: 0xc5a9, 0x1d6b: 0xc5c9, 0x1d6c: 0xc5e9, 0x1d6d: 0xc609, 0x1d6e: 0xc629, 0x1d6f: 0xc649, - 0x1d70: 0xc669, 0x1d71: 0xc689, 0x1d72: 0xc6a9, 0x1d73: 0xc6c9, 0x1d74: 0xc6e9, 0x1d75: 0xc709, - 0x1d76: 0xc729, 0x1d77: 0xc749, 0x1d78: 0xc769, 0x1d79: 0xc789, 0x1d7a: 0xc7a9, 0x1d7b: 0xc7c9, - 0x1d7c: 0x0040, 0x1d7d: 0x0040, 0x1d7e: 0x0040, 0x1d7f: 0x0040, + 0x1d40: 0x0040, 0x1d41: 0xbca2, 0x1d42: 0xbcba, 0x1d43: 0xbcd2, 0x1d44: 0xbcea, 0x1d45: 0xbd02, + 0x1d46: 0xbd1a, 0x1d47: 0xbd32, 0x1d48: 0xbd4a, 0x1d49: 0xbd62, 0x1d4a: 0xbd7a, 0x1d4b: 0x0018, + 0x1d4c: 0x0018, 0x1d4d: 0x0040, 0x1d4e: 0x0040, 0x1d4f: 0x0040, 0x1d50: 0xbd92, 0x1d51: 0xbdb2, + 0x1d52: 0xbdd2, 0x1d53: 0xbdf2, 0x1d54: 0xbe12, 0x1d55: 0xbe32, 0x1d56: 0xbe52, 0x1d57: 0xbe72, + 0x1d58: 0xbe92, 0x1d59: 0xbeb2, 0x1d5a: 0xbed2, 0x1d5b: 0xbef2, 0x1d5c: 0xbf12, 0x1d5d: 0xbf32, + 0x1d5e: 0xbf52, 0x1d5f: 0xbf72, 0x1d60: 0xbf92, 0x1d61: 0xbfb2, 0x1d62: 0xbfd2, 0x1d63: 0xbff2, + 0x1d64: 0xc012, 0x1d65: 0xc032, 0x1d66: 0xc052, 0x1d67: 0xc072, 0x1d68: 0xc092, 0x1d69: 0xc0b2, + 0x1d6a: 0xc0d1, 0x1d6b: 0x1159, 0x1d6c: 0x0269, 0x1d6d: 0x6671, 0x1d6e: 0xc111, 0x1d6f: 0x0040, + 0x1d70: 0x0039, 0x1d71: 0x0ee9, 0x1d72: 0x1159, 0x1d73: 0x0ef9, 0x1d74: 0x0f09, 0x1d75: 0x1199, + 0x1d76: 0x0f31, 0x1d77: 0x0249, 0x1d78: 0x0f41, 0x1d79: 0x0259, 0x1d7a: 0x0f51, 0x1d7b: 0x0359, + 0x1d7c: 0x0f61, 0x1d7d: 0x0f71, 0x1d7e: 0x00d9, 0x1d7f: 0x0f99, // Block 0x76, offset 0x1d80 - 0x1d80: 0xcaf9, 0x1d81: 0xcb19, 0x1d82: 0xcb39, 0x1d83: 0x8b1d, 0x1d84: 0xcb59, 0x1d85: 0xcb79, - 0x1d86: 0xcb99, 0x1d87: 0xcbb9, 0x1d88: 0xcbd9, 0x1d89: 0xcbf9, 0x1d8a: 0xcc19, 0x1d8b: 0xcc39, - 0x1d8c: 0xcc59, 0x1d8d: 0x8b3d, 0x1d8e: 0xcc79, 0x1d8f: 0xcc99, 0x1d90: 0xccb9, 0x1d91: 0xccd9, - 0x1d92: 0x8b5d, 0x1d93: 0xccf9, 0x1d94: 0xcd19, 0x1d95: 0xc429, 0x1d96: 0x8b7d, 0x1d97: 0xcd39, - 0x1d98: 0xcd59, 0x1d99: 0xcd79, 0x1d9a: 0xcd99, 0x1d9b: 0xcdb9, 0x1d9c: 0x8b9d, 0x1d9d: 0xcdd9, - 0x1d9e: 0xcdf9, 0x1d9f: 0xce19, 0x1da0: 0xce39, 0x1da1: 0xce59, 0x1da2: 0xc789, 0x1da3: 0xce79, - 0x1da4: 0xce99, 0x1da5: 0xceb9, 0x1da6: 0xced9, 0x1da7: 0xcef9, 0x1da8: 0xcf19, 0x1da9: 0xcf39, - 0x1daa: 0xcf59, 0x1dab: 0xcf79, 0x1dac: 0xcf99, 0x1dad: 0xcfb9, 0x1dae: 0xcfd9, 0x1daf: 0xcff9, - 0x1db0: 0xd019, 0x1db1: 0xd039, 0x1db2: 0xd039, 0x1db3: 0xd039, 0x1db4: 0x8bbd, 0x1db5: 0xd059, - 0x1db6: 0xd079, 0x1db7: 0xd099, 0x1db8: 0x8bdd, 0x1db9: 0xd0b9, 0x1dba: 0xd0d9, 0x1dbb: 0xd0f9, - 0x1dbc: 0xd119, 0x1dbd: 0xd139, 0x1dbe: 0xd159, 0x1dbf: 0xd179, + 0x1d80: 0x2039, 0x1d81: 0x0269, 0x1d82: 0x01d9, 0x1d83: 0x0fa9, 0x1d84: 0x0fb9, 0x1d85: 0x1089, + 0x1d86: 0x0279, 0x1d87: 0x0369, 0x1d88: 0x0289, 0x1d89: 0x13d1, 0x1d8a: 0xc129, 0x1d8b: 0x65b1, + 0x1d8c: 0xc141, 0x1d8d: 0x1441, 0x1d8e: 0xc159, 0x1d8f: 0xc179, 0x1d90: 0x0018, 0x1d91: 0x0018, + 0x1d92: 0x0018, 0x1d93: 0x0018, 0x1d94: 0x0018, 0x1d95: 0x0018, 0x1d96: 0x0018, 0x1d97: 0x0018, + 0x1d98: 0x0018, 0x1d99: 0x0018, 0x1d9a: 0x0018, 0x1d9b: 0x0018, 0x1d9c: 0x0018, 0x1d9d: 0x0018, + 0x1d9e: 0x0018, 0x1d9f: 0x0018, 0x1da0: 0x0018, 0x1da1: 0x0018, 0x1da2: 0x0018, 0x1da3: 0x0018, + 0x1da4: 0x0018, 0x1da5: 0x0018, 0x1da6: 0x0018, 0x1da7: 0x0018, 0x1da8: 0x0018, 0x1da9: 0x0018, + 0x1daa: 0xc191, 0x1dab: 0xc1a9, 0x1dac: 0x0040, 0x1dad: 0x0040, 0x1dae: 0x0040, 0x1daf: 0x0040, + 0x1db0: 0x0018, 0x1db1: 0x0018, 0x1db2: 0x0018, 0x1db3: 0x0018, 0x1db4: 0x0018, 0x1db5: 0x0018, + 0x1db6: 0x0018, 0x1db7: 0x0018, 0x1db8: 0x0018, 0x1db9: 0x0018, 0x1dba: 0x0018, 0x1dbb: 0x0018, + 0x1dbc: 0x0018, 0x1dbd: 0x0018, 0x1dbe: 0x0018, 0x1dbf: 0x0018, // Block 0x77, offset 0x1dc0 - 0x1dc0: 0xd199, 0x1dc1: 0xd1b9, 0x1dc2: 0xd1d9, 0x1dc3: 0xd1f9, 0x1dc4: 0xd219, 0x1dc5: 0xd239, - 0x1dc6: 0xd239, 0x1dc7: 0xd259, 0x1dc8: 0xd279, 0x1dc9: 0xd299, 0x1dca: 0xd2b9, 0x1dcb: 0xd2d9, - 0x1dcc: 0xd2f9, 0x1dcd: 0xd319, 0x1dce: 0xd339, 0x1dcf: 0xd359, 0x1dd0: 0xd379, 0x1dd1: 0xd399, - 0x1dd2: 0xd3b9, 0x1dd3: 0xd3d9, 0x1dd4: 0xd3f9, 0x1dd5: 0xd419, 0x1dd6: 0xd439, 0x1dd7: 0xd459, - 0x1dd8: 0xd479, 0x1dd9: 0x8bfd, 0x1dda: 0xd499, 0x1ddb: 0xd4b9, 0x1ddc: 0xd4d9, 0x1ddd: 0xc309, - 0x1dde: 0xd4f9, 0x1ddf: 0xd519, 0x1de0: 0x8c1d, 0x1de1: 0x8c3d, 0x1de2: 0xd539, 0x1de3: 0xd559, - 0x1de4: 0xd579, 0x1de5: 0xd599, 0x1de6: 0xd5b9, 0x1de7: 0xd5d9, 0x1de8: 0x0040, 0x1de9: 0xd5f9, - 0x1dea: 0xd619, 0x1deb: 0xd619, 0x1dec: 0x8c5d, 0x1ded: 0xd639, 0x1dee: 0xd659, 0x1def: 0xd679, - 0x1df0: 0xd699, 0x1df1: 0x8c7d, 0x1df2: 0xd6b9, 0x1df3: 0xd6d9, 0x1df4: 0x0040, 0x1df5: 0xd6f9, - 0x1df6: 0xd719, 0x1df7: 0xd739, 0x1df8: 0xd759, 0x1df9: 0xd779, 0x1dfa: 0xd799, 0x1dfb: 0x8c9d, - 0x1dfc: 0xd7b9, 0x1dfd: 0x8cbd, 0x1dfe: 0xd7d9, 0x1dff: 0xd7f9, + 0x1dc0: 0xc1d9, 0x1dc1: 0xc211, 0x1dc2: 0xc249, 0x1dc3: 0x0040, 0x1dc4: 0x0040, 0x1dc5: 0x0040, + 0x1dc6: 0x0040, 0x1dc7: 0x0040, 0x1dc8: 0x0040, 0x1dc9: 0x0040, 0x1dca: 0x0040, 0x1dcb: 0x0040, + 0x1dcc: 0x0040, 0x1dcd: 0x0040, 0x1dce: 0x0040, 0x1dcf: 0x0040, 0x1dd0: 0xc269, 0x1dd1: 0xc289, + 0x1dd2: 0xc2a9, 0x1dd3: 0xc2c9, 0x1dd4: 0xc2e9, 0x1dd5: 0xc309, 0x1dd6: 0xc329, 0x1dd7: 0xc349, + 0x1dd8: 0xc369, 0x1dd9: 0xc389, 0x1dda: 0xc3a9, 0x1ddb: 0xc3c9, 0x1ddc: 0xc3e9, 0x1ddd: 0xc409, + 0x1dde: 0xc429, 0x1ddf: 0xc449, 0x1de0: 0xc469, 0x1de1: 0xc489, 0x1de2: 0xc4a9, 0x1de3: 0xc4c9, + 0x1de4: 0xc4e9, 0x1de5: 0xc509, 0x1de6: 0xc529, 0x1de7: 0xc549, 0x1de8: 0xc569, 0x1de9: 0xc589, + 0x1dea: 0xc5a9, 0x1deb: 0xc5c9, 0x1dec: 0xc5e9, 0x1ded: 0xc609, 0x1dee: 0xc629, 0x1def: 0xc649, + 0x1df0: 0xc669, 0x1df1: 0xc689, 0x1df2: 0xc6a9, 0x1df3: 0xc6c9, 0x1df4: 0xc6e9, 0x1df5: 0xc709, + 0x1df6: 0xc729, 0x1df7: 0xc749, 0x1df8: 0xc769, 0x1df9: 0xc789, 0x1dfa: 0xc7a9, 0x1dfb: 0xc7c9, + 0x1dfc: 0x0040, 0x1dfd: 0x0040, 0x1dfe: 0x0040, 0x1dff: 0x0040, // Block 0x78, offset 0x1e00 - 0x1e00: 0xd819, 0x1e01: 0xd839, 0x1e02: 0xd859, 0x1e03: 0xd879, 0x1e04: 0xd899, 0x1e05: 0xd8b9, - 0x1e06: 0xd8d9, 0x1e07: 0xd8f9, 0x1e08: 0xd919, 0x1e09: 0x8cdd, 0x1e0a: 0xd939, 0x1e0b: 0xd959, - 0x1e0c: 0xd979, 0x1e0d: 0xd999, 0x1e0e: 0xd9b9, 0x1e0f: 0x8cfd, 0x1e10: 0xd9d9, 0x1e11: 0x8d1d, - 0x1e12: 0x8d3d, 0x1e13: 0xd9f9, 0x1e14: 0xda19, 0x1e15: 0xda19, 0x1e16: 0xda39, 0x1e17: 0x8d5d, - 0x1e18: 0x8d7d, 0x1e19: 0xda59, 0x1e1a: 0xda79, 0x1e1b: 0xda99, 0x1e1c: 0xdab9, 0x1e1d: 0xdad9, - 0x1e1e: 0xdaf9, 0x1e1f: 0xdb19, 0x1e20: 0xdb39, 0x1e21: 0xdb59, 0x1e22: 0xdb79, 0x1e23: 0xdb99, - 0x1e24: 0x8d9d, 0x1e25: 0xdbb9, 0x1e26: 0xdbd9, 0x1e27: 0xdbf9, 0x1e28: 0xdc19, 0x1e29: 0xdbf9, - 0x1e2a: 0xdc39, 0x1e2b: 0xdc59, 0x1e2c: 0xdc79, 0x1e2d: 0xdc99, 0x1e2e: 0xdcb9, 0x1e2f: 0xdcd9, - 0x1e30: 0xdcf9, 0x1e31: 0xdd19, 0x1e32: 0xdd39, 0x1e33: 0xdd59, 0x1e34: 0xdd79, 0x1e35: 0xdd99, - 0x1e36: 0xddb9, 0x1e37: 0xddd9, 0x1e38: 0x8dbd, 0x1e39: 0xddf9, 0x1e3a: 0xde19, 0x1e3b: 0xde39, - 0x1e3c: 0xde59, 0x1e3d: 0xde79, 0x1e3e: 0x8ddd, 0x1e3f: 0xde99, + 0x1e00: 0xcaf9, 0x1e01: 0xcb19, 0x1e02: 0xcb39, 0x1e03: 0x8b1d, 0x1e04: 0xcb59, 0x1e05: 0xcb79, + 0x1e06: 0xcb99, 0x1e07: 0xcbb9, 0x1e08: 0xcbd9, 0x1e09: 0xcbf9, 0x1e0a: 0xcc19, 0x1e0b: 0xcc39, + 0x1e0c: 0xcc59, 0x1e0d: 0x8b3d, 0x1e0e: 0xcc79, 0x1e0f: 0xcc99, 0x1e10: 0xccb9, 0x1e11: 0xccd9, + 0x1e12: 0x8b5d, 0x1e13: 0xccf9, 0x1e14: 0xcd19, 0x1e15: 0xc429, 0x1e16: 0x8b7d, 0x1e17: 0xcd39, + 0x1e18: 0xcd59, 0x1e19: 0xcd79, 0x1e1a: 0xcd99, 0x1e1b: 0xcdb9, 0x1e1c: 0x8b9d, 0x1e1d: 0xcdd9, + 0x1e1e: 0xcdf9, 0x1e1f: 0xce19, 0x1e20: 0xce39, 0x1e21: 0xce59, 0x1e22: 0xc789, 0x1e23: 0xce79, + 0x1e24: 0xce99, 0x1e25: 0xceb9, 0x1e26: 0xced9, 0x1e27: 0xcef9, 0x1e28: 0xcf19, 0x1e29: 0xcf39, + 0x1e2a: 0xcf59, 0x1e2b: 0xcf79, 0x1e2c: 0xcf99, 0x1e2d: 0xcfb9, 0x1e2e: 0xcfd9, 0x1e2f: 0xcff9, + 0x1e30: 0xd019, 0x1e31: 0xd039, 0x1e32: 0xd039, 0x1e33: 0xd039, 0x1e34: 0x8bbd, 0x1e35: 0xd059, + 0x1e36: 0xd079, 0x1e37: 0xd099, 0x1e38: 0x8bdd, 0x1e39: 0xd0b9, 0x1e3a: 0xd0d9, 0x1e3b: 0xd0f9, + 0x1e3c: 0xd119, 0x1e3d: 0xd139, 0x1e3e: 0xd159, 0x1e3f: 0xd179, // Block 0x79, offset 0x1e40 - 0x1e40: 0xe599, 0x1e41: 0xe5b9, 0x1e42: 0xe5d9, 0x1e43: 0xe5f9, 0x1e44: 0xe619, 0x1e45: 0xe639, - 0x1e46: 0x8efd, 0x1e47: 0xe659, 0x1e48: 0xe679, 0x1e49: 0xe699, 0x1e4a: 0xe6b9, 0x1e4b: 0xe6d9, - 0x1e4c: 0xe6f9, 0x1e4d: 0x8f1d, 0x1e4e: 0xe719, 0x1e4f: 0xe739, 0x1e50: 0x8f3d, 0x1e51: 0x8f5d, - 0x1e52: 0xe759, 0x1e53: 0xe779, 0x1e54: 0xe799, 0x1e55: 0xe7b9, 0x1e56: 0xe7d9, 0x1e57: 0xe7f9, - 0x1e58: 0xe819, 0x1e59: 0xe839, 0x1e5a: 0xe859, 0x1e5b: 0x8f7d, 0x1e5c: 0xe879, 0x1e5d: 0x8f9d, - 0x1e5e: 0xe899, 0x1e5f: 0x0040, 0x1e60: 0xe8b9, 0x1e61: 0xe8d9, 0x1e62: 0xe8f9, 0x1e63: 0x8fbd, - 0x1e64: 0xe919, 0x1e65: 0xe939, 0x1e66: 0x8fdd, 0x1e67: 0x8ffd, 0x1e68: 0xe959, 0x1e69: 0xe979, - 0x1e6a: 0xe999, 0x1e6b: 0xe9b9, 0x1e6c: 0xe9d9, 0x1e6d: 0xe9d9, 0x1e6e: 0xe9f9, 0x1e6f: 0xea19, - 0x1e70: 0xea39, 0x1e71: 0xea59, 0x1e72: 0xea79, 0x1e73: 0xea99, 0x1e74: 0xeab9, 0x1e75: 0x901d, - 0x1e76: 0xead9, 0x1e77: 0x903d, 0x1e78: 0xeaf9, 0x1e79: 0x905d, 0x1e7a: 0xeb19, 0x1e7b: 0x907d, - 0x1e7c: 0x909d, 0x1e7d: 0x90bd, 0x1e7e: 0xeb39, 0x1e7f: 0xeb59, + 0x1e40: 0xd199, 0x1e41: 0xd1b9, 0x1e42: 0xd1d9, 0x1e43: 0xd1f9, 0x1e44: 0xd219, 0x1e45: 0xd239, + 0x1e46: 0xd239, 0x1e47: 0xd259, 0x1e48: 0xd279, 0x1e49: 0xd299, 0x1e4a: 0xd2b9, 0x1e4b: 0xd2d9, + 0x1e4c: 0xd2f9, 0x1e4d: 0xd319, 0x1e4e: 0xd339, 0x1e4f: 0xd359, 0x1e50: 0xd379, 0x1e51: 0xd399, + 0x1e52: 0xd3b9, 0x1e53: 0xd3d9, 0x1e54: 0xd3f9, 0x1e55: 0xd419, 0x1e56: 0xd439, 0x1e57: 0xd459, + 0x1e58: 0xd479, 0x1e59: 0x8bfd, 0x1e5a: 0xd499, 0x1e5b: 0xd4b9, 0x1e5c: 0xd4d9, 0x1e5d: 0xc309, + 0x1e5e: 0xd4f9, 0x1e5f: 0xd519, 0x1e60: 0x8c1d, 0x1e61: 0x8c3d, 0x1e62: 0xd539, 0x1e63: 0xd559, + 0x1e64: 0xd579, 0x1e65: 0xd599, 0x1e66: 0xd5b9, 0x1e67: 0xd5d9, 0x1e68: 0x2040, 0x1e69: 0xd5f9, + 0x1e6a: 0xd619, 0x1e6b: 0xd619, 0x1e6c: 0x8c5d, 0x1e6d: 0xd639, 0x1e6e: 0xd659, 0x1e6f: 0xd679, + 0x1e70: 0xd699, 0x1e71: 0x8c7d, 0x1e72: 0xd6b9, 0x1e73: 0xd6d9, 0x1e74: 0x2040, 0x1e75: 0xd6f9, + 0x1e76: 0xd719, 0x1e77: 0xd739, 0x1e78: 0xd759, 0x1e79: 0xd779, 0x1e7a: 0xd799, 0x1e7b: 0x8c9d, + 0x1e7c: 0xd7b9, 0x1e7d: 0x8cbd, 0x1e7e: 0xd7d9, 0x1e7f: 0xd7f9, // Block 0x7a, offset 0x1e80 - 0x1e80: 0xeb79, 0x1e81: 0x90dd, 0x1e82: 0x90fd, 0x1e83: 0x911d, 0x1e84: 0x913d, 0x1e85: 0xeb99, - 0x1e86: 0xebb9, 0x1e87: 0xebb9, 0x1e88: 0xebd9, 0x1e89: 0xebf9, 0x1e8a: 0xec19, 0x1e8b: 0xec39, - 0x1e8c: 0xec59, 0x1e8d: 0x915d, 0x1e8e: 0xec79, 0x1e8f: 0xec99, 0x1e90: 0xecb9, 0x1e91: 0xecd9, - 0x1e92: 0x917d, 0x1e93: 0xecf9, 0x1e94: 0x919d, 0x1e95: 0x91bd, 0x1e96: 0xed19, 0x1e97: 0xed39, - 0x1e98: 0xed59, 0x1e99: 0xed79, 0x1e9a: 0xed99, 0x1e9b: 0xedb9, 0x1e9c: 0x91dd, 0x1e9d: 0x91fd, - 0x1e9e: 0x921d, 0x1e9f: 0x0040, 0x1ea0: 0xedd9, 0x1ea1: 0x923d, 0x1ea2: 0xedf9, 0x1ea3: 0xee19, - 0x1ea4: 0xee39, 0x1ea5: 0x925d, 0x1ea6: 0xee59, 0x1ea7: 0xee79, 0x1ea8: 0xee99, 0x1ea9: 0xeeb9, - 0x1eaa: 0xeed9, 0x1eab: 0x927d, 0x1eac: 0xeef9, 0x1ead: 0xef19, 0x1eae: 0xef39, 0x1eaf: 0xef59, - 0x1eb0: 0xef79, 0x1eb1: 0xef99, 0x1eb2: 0x929d, 0x1eb3: 0x92bd, 0x1eb4: 0xefb9, 0x1eb5: 0x92dd, - 0x1eb6: 0xefd9, 0x1eb7: 0x92fd, 0x1eb8: 0xeff9, 0x1eb9: 0xf019, 0x1eba: 0xf039, 0x1ebb: 0x931d, - 0x1ebc: 0x933d, 0x1ebd: 0xf059, 0x1ebe: 0x935d, 0x1ebf: 0xf079, + 0x1e80: 0xd819, 0x1e81: 0xd839, 0x1e82: 0xd859, 0x1e83: 0xd879, 0x1e84: 0xd899, 0x1e85: 0xd8b9, + 0x1e86: 0xd8d9, 0x1e87: 0xd8f9, 0x1e88: 0xd919, 0x1e89: 0x8cdd, 0x1e8a: 0xd939, 0x1e8b: 0xd959, + 0x1e8c: 0xd979, 0x1e8d: 0xd999, 0x1e8e: 0xd9b9, 0x1e8f: 0x8cfd, 0x1e90: 0xd9d9, 0x1e91: 0x8d1d, + 0x1e92: 0x8d3d, 0x1e93: 0xd9f9, 0x1e94: 0xda19, 0x1e95: 0xda19, 0x1e96: 0xda39, 0x1e97: 0x8d5d, + 0x1e98: 0x8d7d, 0x1e99: 0xda59, 0x1e9a: 0xda79, 0x1e9b: 0xda99, 0x1e9c: 0xdab9, 0x1e9d: 0xdad9, + 0x1e9e: 0xdaf9, 0x1e9f: 0xdb19, 0x1ea0: 0xdb39, 0x1ea1: 0xdb59, 0x1ea2: 0xdb79, 0x1ea3: 0xdb99, + 0x1ea4: 0x8d9d, 0x1ea5: 0xdbb9, 0x1ea6: 0xdbd9, 0x1ea7: 0xdbf9, 0x1ea8: 0xdc19, 0x1ea9: 0xdbf9, + 0x1eaa: 0xdc39, 0x1eab: 0xdc59, 0x1eac: 0xdc79, 0x1ead: 0xdc99, 0x1eae: 0xdcb9, 0x1eaf: 0xdcd9, + 0x1eb0: 0xdcf9, 0x1eb1: 0xdd19, 0x1eb2: 0xdd39, 0x1eb3: 0xdd59, 0x1eb4: 0xdd79, 0x1eb5: 0xdd99, + 0x1eb6: 0xddb9, 0x1eb7: 0xddd9, 0x1eb8: 0x8dbd, 0x1eb9: 0xddf9, 0x1eba: 0xde19, 0x1ebb: 0xde39, + 0x1ebc: 0xde59, 0x1ebd: 0xde79, 0x1ebe: 0x8ddd, 0x1ebf: 0xde99, // Block 0x7b, offset 0x1ec0 - 0x1ec0: 0xf6b9, 0x1ec1: 0xf6d9, 0x1ec2: 0xf6f9, 0x1ec3: 0xf719, 0x1ec4: 0xf739, 0x1ec5: 0x951d, - 0x1ec6: 0xf759, 0x1ec7: 0xf779, 0x1ec8: 0xf799, 0x1ec9: 0xf7b9, 0x1eca: 0xf7d9, 0x1ecb: 0x953d, - 0x1ecc: 0x955d, 0x1ecd: 0xf7f9, 0x1ece: 0xf819, 0x1ecf: 0xf839, 0x1ed0: 0xf859, 0x1ed1: 0xf879, - 0x1ed2: 0xf899, 0x1ed3: 0x957d, 0x1ed4: 0xf8b9, 0x1ed5: 0xf8d9, 0x1ed6: 0xf8f9, 0x1ed7: 0xf919, - 0x1ed8: 0x959d, 0x1ed9: 0x95bd, 0x1eda: 0xf939, 0x1edb: 0xf959, 0x1edc: 0xf979, 0x1edd: 0x95dd, - 0x1ede: 0xf999, 0x1edf: 0xf9b9, 0x1ee0: 0x6815, 0x1ee1: 0x95fd, 0x1ee2: 0xf9d9, 0x1ee3: 0xf9f9, - 0x1ee4: 0xfa19, 0x1ee5: 0x961d, 0x1ee6: 0xfa39, 0x1ee7: 0xfa59, 0x1ee8: 0xfa79, 0x1ee9: 0xfa99, - 0x1eea: 0xfab9, 0x1eeb: 0xfad9, 0x1eec: 0xfaf9, 0x1eed: 0x963d, 0x1eee: 0xfb19, 0x1eef: 0xfb39, - 0x1ef0: 0xfb59, 0x1ef1: 0x965d, 0x1ef2: 0xfb79, 0x1ef3: 0xfb99, 0x1ef4: 0xfbb9, 0x1ef5: 0xfbd9, - 0x1ef6: 0x7b35, 0x1ef7: 0x967d, 0x1ef8: 0xfbf9, 0x1ef9: 0xfc19, 0x1efa: 0xfc39, 0x1efb: 0x969d, - 0x1efc: 0xfc59, 0x1efd: 0x96bd, 0x1efe: 0xfc79, 0x1eff: 0xfc79, + 0x1ec0: 0xe599, 0x1ec1: 0xe5b9, 0x1ec2: 0xe5d9, 0x1ec3: 0xe5f9, 0x1ec4: 0xe619, 0x1ec5: 0xe639, + 0x1ec6: 0x8efd, 0x1ec7: 0xe659, 0x1ec8: 0xe679, 0x1ec9: 0xe699, 0x1eca: 0xe6b9, 0x1ecb: 0xe6d9, + 0x1ecc: 0xe6f9, 0x1ecd: 0x8f1d, 0x1ece: 0xe719, 0x1ecf: 0xe739, 0x1ed0: 0x8f3d, 0x1ed1: 0x8f5d, + 0x1ed2: 0xe759, 0x1ed3: 0xe779, 0x1ed4: 0xe799, 0x1ed5: 0xe7b9, 0x1ed6: 0xe7d9, 0x1ed7: 0xe7f9, + 0x1ed8: 0xe819, 0x1ed9: 0xe839, 0x1eda: 0xe859, 0x1edb: 0x8f7d, 0x1edc: 0xe879, 0x1edd: 0x8f9d, + 0x1ede: 0xe899, 0x1edf: 0x2040, 0x1ee0: 0xe8b9, 0x1ee1: 0xe8d9, 0x1ee2: 0xe8f9, 0x1ee3: 0x8fbd, + 0x1ee4: 0xe919, 0x1ee5: 0xe939, 0x1ee6: 0x8fdd, 0x1ee7: 0x8ffd, 0x1ee8: 0xe959, 0x1ee9: 0xe979, + 0x1eea: 0xe999, 0x1eeb: 0xe9b9, 0x1eec: 0xe9d9, 0x1eed: 0xe9d9, 0x1eee: 0xe9f9, 0x1eef: 0xea19, + 0x1ef0: 0xea39, 0x1ef1: 0xea59, 0x1ef2: 0xea79, 0x1ef3: 0xea99, 0x1ef4: 0xeab9, 0x1ef5: 0x901d, + 0x1ef6: 0xead9, 0x1ef7: 0x903d, 0x1ef8: 0xeaf9, 0x1ef9: 0x905d, 0x1efa: 0xeb19, 0x1efb: 0x907d, + 0x1efc: 0x909d, 0x1efd: 0x90bd, 0x1efe: 0xeb39, 0x1eff: 0xeb59, // Block 0x7c, offset 0x1f00 - 0x1f00: 0xfc99, 0x1f01: 0x96dd, 0x1f02: 0xfcb9, 0x1f03: 0xfcd9, 0x1f04: 0xfcf9, 0x1f05: 0xfd19, - 0x1f06: 0xfd39, 0x1f07: 0xfd59, 0x1f08: 0xfd79, 0x1f09: 0x96fd, 0x1f0a: 0xfd99, 0x1f0b: 0xfdb9, - 0x1f0c: 0xfdd9, 0x1f0d: 0xfdf9, 0x1f0e: 0xfe19, 0x1f0f: 0xfe39, 0x1f10: 0x971d, 0x1f11: 0xfe59, - 0x1f12: 0x973d, 0x1f13: 0x975d, 0x1f14: 0x977d, 0x1f15: 0xfe79, 0x1f16: 0xfe99, 0x1f17: 0xfeb9, - 0x1f18: 0xfed9, 0x1f19: 0xfef9, 0x1f1a: 0xff19, 0x1f1b: 0xff39, 0x1f1c: 0xff59, 0x1f1d: 0x979d, - 0x1f1e: 0x0040, 0x1f1f: 0x0040, 0x1f20: 0x0040, 0x1f21: 0x0040, 0x1f22: 0x0040, 0x1f23: 0x0040, - 0x1f24: 0x0040, 0x1f25: 0x0040, 0x1f26: 0x0040, 0x1f27: 0x0040, 0x1f28: 0x0040, 0x1f29: 0x0040, - 0x1f2a: 0x0040, 0x1f2b: 0x0040, 0x1f2c: 0x0040, 0x1f2d: 0x0040, 0x1f2e: 0x0040, 0x1f2f: 0x0040, - 0x1f30: 0x0040, 0x1f31: 0x0040, 0x1f32: 0x0040, 0x1f33: 0x0040, 0x1f34: 0x0040, 0x1f35: 0x0040, - 0x1f36: 0x0040, 0x1f37: 0x0040, 0x1f38: 0x0040, 0x1f39: 0x0040, 0x1f3a: 0x0040, 0x1f3b: 0x0040, - 0x1f3c: 0x0040, 0x1f3d: 0x0040, 0x1f3e: 0x0040, 0x1f3f: 0x0040, + 0x1f00: 0xeb79, 0x1f01: 0x90dd, 0x1f02: 0x90fd, 0x1f03: 0x911d, 0x1f04: 0x913d, 0x1f05: 0xeb99, + 0x1f06: 0xebb9, 0x1f07: 0xebb9, 0x1f08: 0xebd9, 0x1f09: 0xebf9, 0x1f0a: 0xec19, 0x1f0b: 0xec39, + 0x1f0c: 0xec59, 0x1f0d: 0x915d, 0x1f0e: 0xec79, 0x1f0f: 0xec99, 0x1f10: 0xecb9, 0x1f11: 0xecd9, + 0x1f12: 0x917d, 0x1f13: 0xecf9, 0x1f14: 0x919d, 0x1f15: 0x91bd, 0x1f16: 0xed19, 0x1f17: 0xed39, + 0x1f18: 0xed59, 0x1f19: 0xed79, 0x1f1a: 0xed99, 0x1f1b: 0xedb9, 0x1f1c: 0x91dd, 0x1f1d: 0x91fd, + 0x1f1e: 0x921d, 0x1f1f: 0x2040, 0x1f20: 0xedd9, 0x1f21: 0x923d, 0x1f22: 0xedf9, 0x1f23: 0xee19, + 0x1f24: 0xee39, 0x1f25: 0x925d, 0x1f26: 0xee59, 0x1f27: 0xee79, 0x1f28: 0xee99, 0x1f29: 0xeeb9, + 0x1f2a: 0xeed9, 0x1f2b: 0x927d, 0x1f2c: 0xeef9, 0x1f2d: 0xef19, 0x1f2e: 0xef39, 0x1f2f: 0xef59, + 0x1f30: 0xef79, 0x1f31: 0xef99, 0x1f32: 0x929d, 0x1f33: 0x92bd, 0x1f34: 0xefb9, 0x1f35: 0x92dd, + 0x1f36: 0xefd9, 0x1f37: 0x92fd, 0x1f38: 0xeff9, 0x1f39: 0xf019, 0x1f3a: 0xf039, 0x1f3b: 0x931d, + 0x1f3c: 0x933d, 0x1f3d: 0xf059, 0x1f3e: 0x935d, 0x1f3f: 0xf079, + // Block 0x7d, offset 0x1f40 + 0x1f40: 0xf6b9, 0x1f41: 0xf6d9, 0x1f42: 0xf6f9, 0x1f43: 0xf719, 0x1f44: 0xf739, 0x1f45: 0x951d, + 0x1f46: 0xf759, 0x1f47: 0xf779, 0x1f48: 0xf799, 0x1f49: 0xf7b9, 0x1f4a: 0xf7d9, 0x1f4b: 0x953d, + 0x1f4c: 0x955d, 0x1f4d: 0xf7f9, 0x1f4e: 0xf819, 0x1f4f: 0xf839, 0x1f50: 0xf859, 0x1f51: 0xf879, + 0x1f52: 0xf899, 0x1f53: 0x957d, 0x1f54: 0xf8b9, 0x1f55: 0xf8d9, 0x1f56: 0xf8f9, 0x1f57: 0xf919, + 0x1f58: 0x959d, 0x1f59: 0x95bd, 0x1f5a: 0xf939, 0x1f5b: 0xf959, 0x1f5c: 0xf979, 0x1f5d: 0x95dd, + 0x1f5e: 0xf999, 0x1f5f: 0xf9b9, 0x1f60: 0x6815, 0x1f61: 0x95fd, 0x1f62: 0xf9d9, 0x1f63: 0xf9f9, + 0x1f64: 0xfa19, 0x1f65: 0x961d, 0x1f66: 0xfa39, 0x1f67: 0xfa59, 0x1f68: 0xfa79, 0x1f69: 0xfa99, + 0x1f6a: 0xfab9, 0x1f6b: 0xfad9, 0x1f6c: 0xfaf9, 0x1f6d: 0x963d, 0x1f6e: 0xfb19, 0x1f6f: 0xfb39, + 0x1f70: 0xfb59, 0x1f71: 0x965d, 0x1f72: 0xfb79, 0x1f73: 0xfb99, 0x1f74: 0xfbb9, 0x1f75: 0xfbd9, + 0x1f76: 0x7b35, 0x1f77: 0x967d, 0x1f78: 0xfbf9, 0x1f79: 0xfc19, 0x1f7a: 0xfc39, 0x1f7b: 0x969d, + 0x1f7c: 0xfc59, 0x1f7d: 0x96bd, 0x1f7e: 0xfc79, 0x1f7f: 0xfc79, + // Block 0x7e, offset 0x1f80 + 0x1f80: 0xfc99, 0x1f81: 0x96dd, 0x1f82: 0xfcb9, 0x1f83: 0xfcd9, 0x1f84: 0xfcf9, 0x1f85: 0xfd19, + 0x1f86: 0xfd39, 0x1f87: 0xfd59, 0x1f88: 0xfd79, 0x1f89: 0x96fd, 0x1f8a: 0xfd99, 0x1f8b: 0xfdb9, + 0x1f8c: 0xfdd9, 0x1f8d: 0xfdf9, 0x1f8e: 0xfe19, 0x1f8f: 0xfe39, 0x1f90: 0x971d, 0x1f91: 0xfe59, + 0x1f92: 0x973d, 0x1f93: 0x975d, 0x1f94: 0x977d, 0x1f95: 0xfe79, 0x1f96: 0xfe99, 0x1f97: 0xfeb9, + 0x1f98: 0xfed9, 0x1f99: 0xfef9, 0x1f9a: 0xff19, 0x1f9b: 0xff39, 0x1f9c: 0xff59, 0x1f9d: 0x979d, + 0x1f9e: 0x0040, 0x1f9f: 0x0040, 0x1fa0: 0x0040, 0x1fa1: 0x0040, 0x1fa2: 0x0040, 0x1fa3: 0x0040, + 0x1fa4: 0x0040, 0x1fa5: 0x0040, 0x1fa6: 0x0040, 0x1fa7: 0x0040, 0x1fa8: 0x0040, 0x1fa9: 0x0040, + 0x1faa: 0x0040, 0x1fab: 0x0040, 0x1fac: 0x0040, 0x1fad: 0x0040, 0x1fae: 0x0040, 0x1faf: 0x0040, + 0x1fb0: 0x0040, 0x1fb1: 0x0040, 0x1fb2: 0x0040, 0x1fb3: 0x0040, 0x1fb4: 0x0040, 0x1fb5: 0x0040, + 0x1fb6: 0x0040, 0x1fb7: 0x0040, 0x1fb8: 0x0040, 0x1fb9: 0x0040, 0x1fba: 0x0040, 0x1fbb: 0x0040, + 0x1fbc: 0x0040, 0x1fbd: 0x0040, 0x1fbe: 0x0040, 0x1fbf: 0x0040, } -// idnaIndex: 35 blocks, 2240 entries, 4480 bytes +// idnaIndex: 36 blocks, 2304 entries, 4608 bytes // Block 0 is the zero block. -var idnaIndex = [2240]uint16{ +var idnaIndex = [2304]uint16{ // Block 0x0, offset 0x0 // Block 0x1, offset 0x40 // Block 0x2, offset 0x80 // Block 0x3, offset 0xc0 - 0xc2: 0x01, 0xc3: 0x7b, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x04, 0xc7: 0x05, - 0xc8: 0x06, 0xc9: 0x7c, 0xca: 0x7d, 0xcb: 0x07, 0xcc: 0x7e, 0xcd: 0x08, 0xce: 0x09, 0xcf: 0x0a, - 0xd0: 0x7f, 0xd1: 0x0b, 0xd2: 0x0c, 0xd3: 0x0d, 0xd4: 0x0e, 0xd5: 0x80, 0xd6: 0x81, 0xd7: 0x82, - 0xd8: 0x0f, 0xd9: 0x83, 0xda: 0x84, 0xdb: 0x10, 0xdc: 0x11, 0xdd: 0x85, 0xde: 0x86, 0xdf: 0x87, + 0xc2: 0x01, 0xc3: 0x7d, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x04, 0xc7: 0x05, + 0xc8: 0x06, 0xc9: 0x7e, 0xca: 0x7f, 0xcb: 0x07, 0xcc: 0x80, 0xcd: 0x08, 0xce: 0x09, 0xcf: 0x0a, + 0xd0: 0x81, 0xd1: 0x0b, 0xd2: 0x0c, 0xd3: 0x0d, 0xd4: 0x0e, 0xd5: 0x82, 0xd6: 0x83, 0xd7: 0x84, + 0xd8: 0x0f, 0xd9: 0x10, 0xda: 0x85, 0xdb: 0x11, 0xdc: 0x12, 0xdd: 0x86, 0xde: 0x87, 0xdf: 0x88, 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, 0xe5: 0x07, 0xe6: 0x07, 0xe7: 0x07, 0xe8: 0x07, 0xe9: 0x08, 0xea: 0x09, 0xeb: 0x07, 0xec: 0x07, 0xed: 0x0a, 0xee: 0x0b, 0xef: 0x0c, - 0xf0: 0x1c, 0xf1: 0x1d, 0xf2: 0x1d, 0xf3: 0x1f, 0xf4: 0x20, + 0xf0: 0x1d, 0xf1: 0x1e, 0xf2: 0x1e, 0xf3: 0x20, 0xf4: 0x21, // Block 0x4, offset 0x100 - 0x120: 0x88, 0x121: 0x89, 0x122: 0x8a, 0x123: 0x8b, 0x124: 0x8c, 0x125: 0x12, 0x126: 0x13, 0x127: 0x14, - 0x128: 0x15, 0x129: 0x16, 0x12a: 0x17, 0x12b: 0x18, 0x12c: 0x19, 0x12d: 0x1a, 0x12e: 0x1b, 0x12f: 0x8d, - 0x130: 0x8e, 0x131: 0x1c, 0x132: 0x1d, 0x133: 0x1e, 0x134: 0x8f, 0x135: 0x1f, 0x136: 0x90, 0x137: 0x91, - 0x138: 0x92, 0x139: 0x93, 0x13a: 0x20, 0x13b: 0x94, 0x13c: 0x95, 0x13d: 0x21, 0x13e: 0x22, 0x13f: 0x96, + 0x120: 0x89, 0x121: 0x13, 0x122: 0x8a, 0x123: 0x8b, 0x124: 0x8c, 0x125: 0x14, 0x126: 0x15, 0x127: 0x16, + 0x128: 0x17, 0x129: 0x18, 0x12a: 0x19, 0x12b: 0x1a, 0x12c: 0x1b, 0x12d: 0x1c, 0x12e: 0x1d, 0x12f: 0x8d, + 0x130: 0x8e, 0x131: 0x1e, 0x132: 0x1f, 0x133: 0x20, 0x134: 0x8f, 0x135: 0x21, 0x136: 0x90, 0x137: 0x91, + 0x138: 0x92, 0x139: 0x93, 0x13a: 0x22, 0x13b: 0x94, 0x13c: 0x95, 0x13d: 0x23, 0x13e: 0x24, 0x13f: 0x96, // Block 0x5, offset 0x140 - 0x140: 0x97, 0x141: 0x98, 0x142: 0x99, 0x143: 0x9a, 0x144: 0x9b, 0x145: 0x9c, 0x146: 0x9b, 0x147: 0x9b, - 0x148: 0x9d, 0x149: 0x9e, 0x14a: 0x9f, 0x14b: 0xa0, 0x14c: 0xa1, 0x14d: 0xa2, 0x14e: 0xa3, 0x14f: 0xa4, - 0x150: 0xa5, 0x151: 0x9d, 0x152: 0x9d, 0x153: 0x9d, 0x154: 0x9d, 0x155: 0x9d, 0x156: 0x9d, 0x157: 0x9d, - 0x158: 0x9d, 0x159: 0xa6, 0x15a: 0xa7, 0x15b: 0xa8, 0x15c: 0xa9, 0x15d: 0xaa, 0x15e: 0xab, 0x15f: 0xac, - 0x160: 0xad, 0x161: 0xae, 0x162: 0xaf, 0x163: 0xb0, 0x164: 0xb1, 0x165: 0xb2, 0x166: 0xb3, 0x167: 0xb4, - 0x168: 0xb5, 0x169: 0xb6, 0x16a: 0xb7, 0x16b: 0xb8, 0x16c: 0xb9, 0x16d: 0xba, 0x16e: 0xbb, 0x16f: 0xbc, - 0x170: 0xbd, 0x171: 0xbe, 0x172: 0xbf, 0x173: 0xc0, 0x174: 0x23, 0x175: 0x24, 0x176: 0x25, 0x177: 0xc1, - 0x178: 0x26, 0x179: 0x26, 0x17a: 0x27, 0x17b: 0x26, 0x17c: 0xc2, 0x17d: 0x28, 0x17e: 0x29, 0x17f: 0x2a, + 0x140: 0x97, 0x141: 0x98, 0x142: 0x99, 0x143: 0x9a, 0x144: 0x9b, 0x145: 0x9c, 0x146: 0x9d, 0x147: 0x9e, + 0x148: 0x9f, 0x149: 0xa0, 0x14a: 0xa1, 0x14b: 0xa2, 0x14c: 0xa3, 0x14d: 0xa4, 0x14e: 0xa5, 0x14f: 0xa6, + 0x150: 0xa7, 0x151: 0x9f, 0x152: 0x9f, 0x153: 0x9f, 0x154: 0x9f, 0x155: 0x9f, 0x156: 0x9f, 0x157: 0x9f, + 0x158: 0x9f, 0x159: 0xa8, 0x15a: 0xa9, 0x15b: 0xaa, 0x15c: 0xab, 0x15d: 0xac, 0x15e: 0xad, 0x15f: 0xae, + 0x160: 0xaf, 0x161: 0xb0, 0x162: 0xb1, 0x163: 0xb2, 0x164: 0xb3, 0x165: 0xb4, 0x166: 0xb5, 0x167: 0xb6, + 0x168: 0xb7, 0x169: 0xb8, 0x16a: 0xb9, 0x16b: 0xba, 0x16c: 0xbb, 0x16d: 0xbc, 0x16e: 0xbd, 0x16f: 0xbe, + 0x170: 0xbf, 0x171: 0xc0, 0x172: 0xc1, 0x173: 0xc2, 0x174: 0x25, 0x175: 0x26, 0x176: 0x27, 0x177: 0xc3, + 0x178: 0x28, 0x179: 0x28, 0x17a: 0x29, 0x17b: 0x28, 0x17c: 0xc4, 0x17d: 0x2a, 0x17e: 0x2b, 0x17f: 0x2c, // Block 0x6, offset 0x180 - 0x180: 0x2b, 0x181: 0x2c, 0x182: 0x2d, 0x183: 0xc3, 0x184: 0x2e, 0x185: 0x2f, 0x186: 0xc4, 0x187: 0x9b, - 0x188: 0xc5, 0x189: 0xc6, 0x18a: 0x9b, 0x18b: 0x9b, 0x18c: 0xc7, 0x18d: 0x9b, 0x18e: 0x9b, 0x18f: 0xc8, - 0x190: 0xc9, 0x191: 0x30, 0x192: 0x31, 0x193: 0x32, 0x194: 0x9b, 0x195: 0x9b, 0x196: 0x9b, 0x197: 0x9b, + 0x180: 0x2d, 0x181: 0x2e, 0x182: 0x2f, 0x183: 0xc5, 0x184: 0x30, 0x185: 0x31, 0x186: 0xc6, 0x187: 0x9b, + 0x188: 0xc7, 0x189: 0xc8, 0x18a: 0x9b, 0x18b: 0x9b, 0x18c: 0xc9, 0x18d: 0x9b, 0x18e: 0x9b, 0x18f: 0x9b, + 0x190: 0xca, 0x191: 0x32, 0x192: 0x33, 0x193: 0x34, 0x194: 0x9b, 0x195: 0x9b, 0x196: 0x9b, 0x197: 0x9b, 0x198: 0x9b, 0x199: 0x9b, 0x19a: 0x9b, 0x19b: 0x9b, 0x19c: 0x9b, 0x19d: 0x9b, 0x19e: 0x9b, 0x19f: 0x9b, 0x1a0: 0x9b, 0x1a1: 0x9b, 0x1a2: 0x9b, 0x1a3: 0x9b, 0x1a4: 0x9b, 0x1a5: 0x9b, 0x1a6: 0x9b, 0x1a7: 0x9b, - 0x1a8: 0xca, 0x1a9: 0xcb, 0x1aa: 0x9b, 0x1ab: 0xcc, 0x1ac: 0x9b, 0x1ad: 0xcd, 0x1ae: 0xce, 0x1af: 0xcf, - 0x1b0: 0xd0, 0x1b1: 0x33, 0x1b2: 0x26, 0x1b3: 0x34, 0x1b4: 0xd1, 0x1b5: 0xd2, 0x1b6: 0xd3, 0x1b7: 0xd4, - 0x1b8: 0xd5, 0x1b9: 0xd6, 0x1ba: 0xd7, 0x1bb: 0xd8, 0x1bc: 0xd9, 0x1bd: 0xda, 0x1be: 0xdb, 0x1bf: 0x35, + 0x1a8: 0xcb, 0x1a9: 0xcc, 0x1aa: 0x9b, 0x1ab: 0xcd, 0x1ac: 0x9b, 0x1ad: 0xce, 0x1ae: 0xcf, 0x1af: 0xd0, + 0x1b0: 0xd1, 0x1b1: 0x35, 0x1b2: 0x28, 0x1b3: 0x36, 0x1b4: 0xd2, 0x1b5: 0xd3, 0x1b6: 0xd4, 0x1b7: 0xd5, + 0x1b8: 0xd6, 0x1b9: 0xd7, 0x1ba: 0xd8, 0x1bb: 0xd9, 0x1bc: 0xda, 0x1bd: 0xdb, 0x1be: 0xdc, 0x1bf: 0x37, // Block 0x7, offset 0x1c0 - 0x1c0: 0x36, 0x1c1: 0xdc, 0x1c2: 0xdd, 0x1c3: 0xde, 0x1c4: 0xdf, 0x1c5: 0x37, 0x1c6: 0x38, 0x1c7: 0xe0, - 0x1c8: 0xe1, 0x1c9: 0x39, 0x1ca: 0x3a, 0x1cb: 0x3b, 0x1cc: 0x3c, 0x1cd: 0x3d, 0x1ce: 0x3e, 0x1cf: 0x3f, - 0x1d0: 0x9d, 0x1d1: 0x9d, 0x1d2: 0x9d, 0x1d3: 0x9d, 0x1d4: 0x9d, 0x1d5: 0x9d, 0x1d6: 0x9d, 0x1d7: 0x9d, - 0x1d8: 0x9d, 0x1d9: 0x9d, 0x1da: 0x9d, 0x1db: 0x9d, 0x1dc: 0x9d, 0x1dd: 0x9d, 0x1de: 0x9d, 0x1df: 0x9d, - 0x1e0: 0x9d, 0x1e1: 0x9d, 0x1e2: 0x9d, 0x1e3: 0x9d, 0x1e4: 0x9d, 0x1e5: 0x9d, 0x1e6: 0x9d, 0x1e7: 0x9d, - 0x1e8: 0x9d, 0x1e9: 0x9d, 0x1ea: 0x9d, 0x1eb: 0x9d, 0x1ec: 0x9d, 0x1ed: 0x9d, 0x1ee: 0x9d, 0x1ef: 0x9d, - 0x1f0: 0x9d, 0x1f1: 0x9d, 0x1f2: 0x9d, 0x1f3: 0x9d, 0x1f4: 0x9d, 0x1f5: 0x9d, 0x1f6: 0x9d, 0x1f7: 0x9d, - 0x1f8: 0x9d, 0x1f9: 0x9d, 0x1fa: 0x9d, 0x1fb: 0x9d, 0x1fc: 0x9d, 0x1fd: 0x9d, 0x1fe: 0x9d, 0x1ff: 0x9d, + 0x1c0: 0x38, 0x1c1: 0xdd, 0x1c2: 0xde, 0x1c3: 0xdf, 0x1c4: 0xe0, 0x1c5: 0x39, 0x1c6: 0x3a, 0x1c7: 0xe1, + 0x1c8: 0xe2, 0x1c9: 0x3b, 0x1ca: 0x3c, 0x1cb: 0x3d, 0x1cc: 0x3e, 0x1cd: 0x3f, 0x1ce: 0x40, 0x1cf: 0x41, + 0x1d0: 0x9f, 0x1d1: 0x9f, 0x1d2: 0x9f, 0x1d3: 0x9f, 0x1d4: 0x9f, 0x1d5: 0x9f, 0x1d6: 0x9f, 0x1d7: 0x9f, + 0x1d8: 0x9f, 0x1d9: 0x9f, 0x1da: 0x9f, 0x1db: 0x9f, 0x1dc: 0x9f, 0x1dd: 0x9f, 0x1de: 0x9f, 0x1df: 0x9f, + 0x1e0: 0x9f, 0x1e1: 0x9f, 0x1e2: 0x9f, 0x1e3: 0x9f, 0x1e4: 0x9f, 0x1e5: 0x9f, 0x1e6: 0x9f, 0x1e7: 0x9f, + 0x1e8: 0x9f, 0x1e9: 0x9f, 0x1ea: 0x9f, 0x1eb: 0x9f, 0x1ec: 0x9f, 0x1ed: 0x9f, 0x1ee: 0x9f, 0x1ef: 0x9f, + 0x1f0: 0x9f, 0x1f1: 0x9f, 0x1f2: 0x9f, 0x1f3: 0x9f, 0x1f4: 0x9f, 0x1f5: 0x9f, 0x1f6: 0x9f, 0x1f7: 0x9f, + 0x1f8: 0x9f, 0x1f9: 0x9f, 0x1fa: 0x9f, 0x1fb: 0x9f, 0x1fc: 0x9f, 0x1fd: 0x9f, 0x1fe: 0x9f, 0x1ff: 0x9f, // Block 0x8, offset 0x200 - 0x200: 0x9d, 0x201: 0x9d, 0x202: 0x9d, 0x203: 0x9d, 0x204: 0x9d, 0x205: 0x9d, 0x206: 0x9d, 0x207: 0x9d, - 0x208: 0x9d, 0x209: 0x9d, 0x20a: 0x9d, 0x20b: 0x9d, 0x20c: 0x9d, 0x20d: 0x9d, 0x20e: 0x9d, 0x20f: 0x9d, - 0x210: 0x9d, 0x211: 0x9d, 0x212: 0x9d, 0x213: 0x9d, 0x214: 0x9d, 0x215: 0x9d, 0x216: 0x9d, 0x217: 0x9d, - 0x218: 0x9d, 0x219: 0x9d, 0x21a: 0x9d, 0x21b: 0x9d, 0x21c: 0x9d, 0x21d: 0x9d, 0x21e: 0x9d, 0x21f: 0x9d, - 0x220: 0x9d, 0x221: 0x9d, 0x222: 0x9d, 0x223: 0x9d, 0x224: 0x9d, 0x225: 0x9d, 0x226: 0x9d, 0x227: 0x9d, - 0x228: 0x9d, 0x229: 0x9d, 0x22a: 0x9d, 0x22b: 0x9d, 0x22c: 0x9d, 0x22d: 0x9d, 0x22e: 0x9d, 0x22f: 0x9d, - 0x230: 0x9d, 0x231: 0x9d, 0x232: 0x9d, 0x233: 0x9d, 0x234: 0x9d, 0x235: 0x9d, 0x236: 0xb0, 0x237: 0x9b, - 0x238: 0x9d, 0x239: 0x9d, 0x23a: 0x9d, 0x23b: 0x9d, 0x23c: 0x9d, 0x23d: 0x9d, 0x23e: 0x9d, 0x23f: 0x9d, + 0x200: 0x9f, 0x201: 0x9f, 0x202: 0x9f, 0x203: 0x9f, 0x204: 0x9f, 0x205: 0x9f, 0x206: 0x9f, 0x207: 0x9f, + 0x208: 0x9f, 0x209: 0x9f, 0x20a: 0x9f, 0x20b: 0x9f, 0x20c: 0x9f, 0x20d: 0x9f, 0x20e: 0x9f, 0x20f: 0x9f, + 0x210: 0x9f, 0x211: 0x9f, 0x212: 0x9f, 0x213: 0x9f, 0x214: 0x9f, 0x215: 0x9f, 0x216: 0x9f, 0x217: 0x9f, + 0x218: 0x9f, 0x219: 0x9f, 0x21a: 0x9f, 0x21b: 0x9f, 0x21c: 0x9f, 0x21d: 0x9f, 0x21e: 0x9f, 0x21f: 0x9f, + 0x220: 0x9f, 0x221: 0x9f, 0x222: 0x9f, 0x223: 0x9f, 0x224: 0x9f, 0x225: 0x9f, 0x226: 0x9f, 0x227: 0x9f, + 0x228: 0x9f, 0x229: 0x9f, 0x22a: 0x9f, 0x22b: 0x9f, 0x22c: 0x9f, 0x22d: 0x9f, 0x22e: 0x9f, 0x22f: 0x9f, + 0x230: 0x9f, 0x231: 0x9f, 0x232: 0x9f, 0x233: 0x9f, 0x234: 0x9f, 0x235: 0x9f, 0x236: 0xb2, 0x237: 0x9b, + 0x238: 0x9f, 0x239: 0x9f, 0x23a: 0x9f, 0x23b: 0x9f, 0x23c: 0x9f, 0x23d: 0x9f, 0x23e: 0x9f, 0x23f: 0x9f, // Block 0x9, offset 0x240 - 0x240: 0x9d, 0x241: 0x9d, 0x242: 0x9d, 0x243: 0x9d, 0x244: 0x9d, 0x245: 0x9d, 0x246: 0x9d, 0x247: 0x9d, - 0x248: 0x9d, 0x249: 0x9d, 0x24a: 0x9d, 0x24b: 0x9d, 0x24c: 0x9d, 0x24d: 0x9d, 0x24e: 0x9d, 0x24f: 0x9d, - 0x250: 0x9d, 0x251: 0x9d, 0x252: 0x9d, 0x253: 0x9d, 0x254: 0x9d, 0x255: 0x9d, 0x256: 0x9d, 0x257: 0x9d, - 0x258: 0x9d, 0x259: 0x9d, 0x25a: 0x9d, 0x25b: 0x9d, 0x25c: 0x9d, 0x25d: 0x9d, 0x25e: 0x9d, 0x25f: 0x9d, - 0x260: 0x9d, 0x261: 0x9d, 0x262: 0x9d, 0x263: 0x9d, 0x264: 0x9d, 0x265: 0x9d, 0x266: 0x9d, 0x267: 0x9d, - 0x268: 0x9d, 0x269: 0x9d, 0x26a: 0x9d, 0x26b: 0x9d, 0x26c: 0x9d, 0x26d: 0x9d, 0x26e: 0x9d, 0x26f: 0x9d, - 0x270: 0x9d, 0x271: 0x9d, 0x272: 0x9d, 0x273: 0x9d, 0x274: 0x9d, 0x275: 0x9d, 0x276: 0x9d, 0x277: 0x9d, - 0x278: 0x9d, 0x279: 0x9d, 0x27a: 0x9d, 0x27b: 0x9d, 0x27c: 0x9d, 0x27d: 0x9d, 0x27e: 0x9d, 0x27f: 0x9d, + 0x240: 0x9f, 0x241: 0x9f, 0x242: 0x9f, 0x243: 0x9f, 0x244: 0x9f, 0x245: 0x9f, 0x246: 0x9f, 0x247: 0x9f, + 0x248: 0x9f, 0x249: 0x9f, 0x24a: 0x9f, 0x24b: 0x9f, 0x24c: 0x9f, 0x24d: 0x9f, 0x24e: 0x9f, 0x24f: 0x9f, + 0x250: 0x9f, 0x251: 0x9f, 0x252: 0x9f, 0x253: 0x9f, 0x254: 0x9f, 0x255: 0x9f, 0x256: 0x9f, 0x257: 0x9f, + 0x258: 0x9f, 0x259: 0x9f, 0x25a: 0x9f, 0x25b: 0x9f, 0x25c: 0x9f, 0x25d: 0x9f, 0x25e: 0x9f, 0x25f: 0x9f, + 0x260: 0x9f, 0x261: 0x9f, 0x262: 0x9f, 0x263: 0x9f, 0x264: 0x9f, 0x265: 0x9f, 0x266: 0x9f, 0x267: 0x9f, + 0x268: 0x9f, 0x269: 0x9f, 0x26a: 0x9f, 0x26b: 0x9f, 0x26c: 0x9f, 0x26d: 0x9f, 0x26e: 0x9f, 0x26f: 0x9f, + 0x270: 0x9f, 0x271: 0x9f, 0x272: 0x9f, 0x273: 0x9f, 0x274: 0x9f, 0x275: 0x9f, 0x276: 0x9f, 0x277: 0x9f, + 0x278: 0x9f, 0x279: 0x9f, 0x27a: 0x9f, 0x27b: 0x9f, 0x27c: 0x9f, 0x27d: 0x9f, 0x27e: 0x9f, 0x27f: 0x9f, // Block 0xa, offset 0x280 - 0x280: 0x9d, 0x281: 0x9d, 0x282: 0x9d, 0x283: 0x9d, 0x284: 0x9d, 0x285: 0x9d, 0x286: 0x9d, 0x287: 0x9d, - 0x288: 0x9d, 0x289: 0x9d, 0x28a: 0x9d, 0x28b: 0x9d, 0x28c: 0x9d, 0x28d: 0x9d, 0x28e: 0x9d, 0x28f: 0x9d, - 0x290: 0x9d, 0x291: 0x9d, 0x292: 0x9d, 0x293: 0x9d, 0x294: 0x9d, 0x295: 0x9d, 0x296: 0x9d, 0x297: 0x9d, - 0x298: 0x9d, 0x299: 0x9d, 0x29a: 0x9d, 0x29b: 0x9d, 0x29c: 0x9d, 0x29d: 0x9d, 0x29e: 0x9d, 0x29f: 0x9d, - 0x2a0: 0x9d, 0x2a1: 0x9d, 0x2a2: 0x9d, 0x2a3: 0x9d, 0x2a4: 0x9d, 0x2a5: 0x9d, 0x2a6: 0x9d, 0x2a7: 0x9d, - 0x2a8: 0x9d, 0x2a9: 0x9d, 0x2aa: 0x9d, 0x2ab: 0x9d, 0x2ac: 0x9d, 0x2ad: 0x9d, 0x2ae: 0x9d, 0x2af: 0x9d, - 0x2b0: 0x9d, 0x2b1: 0x9d, 0x2b2: 0x9d, 0x2b3: 0x9d, 0x2b4: 0x9d, 0x2b5: 0x9d, 0x2b6: 0x9d, 0x2b7: 0x9d, - 0x2b8: 0x9d, 0x2b9: 0x9d, 0x2ba: 0x9d, 0x2bb: 0x9d, 0x2bc: 0x9d, 0x2bd: 0x9d, 0x2be: 0x9d, 0x2bf: 0xe2, + 0x280: 0x9f, 0x281: 0x9f, 0x282: 0x9f, 0x283: 0x9f, 0x284: 0x9f, 0x285: 0x9f, 0x286: 0x9f, 0x287: 0x9f, + 0x288: 0x9f, 0x289: 0x9f, 0x28a: 0x9f, 0x28b: 0x9f, 0x28c: 0x9f, 0x28d: 0x9f, 0x28e: 0x9f, 0x28f: 0x9f, + 0x290: 0x9f, 0x291: 0x9f, 0x292: 0x9f, 0x293: 0x9f, 0x294: 0x9f, 0x295: 0x9f, 0x296: 0x9f, 0x297: 0x9f, + 0x298: 0x9f, 0x299: 0x9f, 0x29a: 0x9f, 0x29b: 0x9f, 0x29c: 0x9f, 0x29d: 0x9f, 0x29e: 0x9f, 0x29f: 0x9f, + 0x2a0: 0x9f, 0x2a1: 0x9f, 0x2a2: 0x9f, 0x2a3: 0x9f, 0x2a4: 0x9f, 0x2a5: 0x9f, 0x2a6: 0x9f, 0x2a7: 0x9f, + 0x2a8: 0x9f, 0x2a9: 0x9f, 0x2aa: 0x9f, 0x2ab: 0x9f, 0x2ac: 0x9f, 0x2ad: 0x9f, 0x2ae: 0x9f, 0x2af: 0x9f, + 0x2b0: 0x9f, 0x2b1: 0x9f, 0x2b2: 0x9f, 0x2b3: 0x9f, 0x2b4: 0x9f, 0x2b5: 0x9f, 0x2b6: 0x9f, 0x2b7: 0x9f, + 0x2b8: 0x9f, 0x2b9: 0x9f, 0x2ba: 0x9f, 0x2bb: 0x9f, 0x2bc: 0x9f, 0x2bd: 0x9f, 0x2be: 0x9f, 0x2bf: 0xe3, // Block 0xb, offset 0x2c0 - 0x2c0: 0x9d, 0x2c1: 0x9d, 0x2c2: 0x9d, 0x2c3: 0x9d, 0x2c4: 0x9d, 0x2c5: 0x9d, 0x2c6: 0x9d, 0x2c7: 0x9d, - 0x2c8: 0x9d, 0x2c9: 0x9d, 0x2ca: 0x9d, 0x2cb: 0x9d, 0x2cc: 0x9d, 0x2cd: 0x9d, 0x2ce: 0x9d, 0x2cf: 0x9d, - 0x2d0: 0x9d, 0x2d1: 0x9d, 0x2d2: 0xe3, 0x2d3: 0xe4, 0x2d4: 0x9d, 0x2d5: 0x9d, 0x2d6: 0x9d, 0x2d7: 0x9d, - 0x2d8: 0xe5, 0x2d9: 0x40, 0x2da: 0x41, 0x2db: 0xe6, 0x2dc: 0x42, 0x2dd: 0x43, 0x2de: 0x44, 0x2df: 0xe7, - 0x2e0: 0xe8, 0x2e1: 0xe9, 0x2e2: 0xea, 0x2e3: 0xeb, 0x2e4: 0xec, 0x2e5: 0xed, 0x2e6: 0xee, 0x2e7: 0xef, - 0x2e8: 0xf0, 0x2e9: 0xf1, 0x2ea: 0xf2, 0x2eb: 0xf3, 0x2ec: 0xf4, 0x2ed: 0xf5, 0x2ee: 0xf6, 0x2ef: 0xf7, - 0x2f0: 0x9d, 0x2f1: 0x9d, 0x2f2: 0x9d, 0x2f3: 0x9d, 0x2f4: 0x9d, 0x2f5: 0x9d, 0x2f6: 0x9d, 0x2f7: 0x9d, - 0x2f8: 0x9d, 0x2f9: 0x9d, 0x2fa: 0x9d, 0x2fb: 0x9d, 0x2fc: 0x9d, 0x2fd: 0x9d, 0x2fe: 0x9d, 0x2ff: 0x9d, + 0x2c0: 0x9f, 0x2c1: 0x9f, 0x2c2: 0x9f, 0x2c3: 0x9f, 0x2c4: 0x9f, 0x2c5: 0x9f, 0x2c6: 0x9f, 0x2c7: 0x9f, + 0x2c8: 0x9f, 0x2c9: 0x9f, 0x2ca: 0x9f, 0x2cb: 0x9f, 0x2cc: 0x9f, 0x2cd: 0x9f, 0x2ce: 0x9f, 0x2cf: 0x9f, + 0x2d0: 0x9f, 0x2d1: 0x9f, 0x2d2: 0xe4, 0x2d3: 0xe5, 0x2d4: 0x9f, 0x2d5: 0x9f, 0x2d6: 0x9f, 0x2d7: 0x9f, + 0x2d8: 0xe6, 0x2d9: 0x42, 0x2da: 0x43, 0x2db: 0xe7, 0x2dc: 0x44, 0x2dd: 0x45, 0x2de: 0x46, 0x2df: 0xe8, + 0x2e0: 0xe9, 0x2e1: 0xea, 0x2e2: 0xeb, 0x2e3: 0xec, 0x2e4: 0xed, 0x2e5: 0xee, 0x2e6: 0xef, 0x2e7: 0xf0, + 0x2e8: 0xf1, 0x2e9: 0xf2, 0x2ea: 0xf3, 0x2eb: 0xf4, 0x2ec: 0xf5, 0x2ed: 0xf6, 0x2ee: 0xf7, 0x2ef: 0xf8, + 0x2f0: 0x9f, 0x2f1: 0x9f, 0x2f2: 0x9f, 0x2f3: 0x9f, 0x2f4: 0x9f, 0x2f5: 0x9f, 0x2f6: 0x9f, 0x2f7: 0x9f, + 0x2f8: 0x9f, 0x2f9: 0x9f, 0x2fa: 0x9f, 0x2fb: 0x9f, 0x2fc: 0x9f, 0x2fd: 0x9f, 0x2fe: 0x9f, 0x2ff: 0x9f, // Block 0xc, offset 0x300 - 0x300: 0x9d, 0x301: 0x9d, 0x302: 0x9d, 0x303: 0x9d, 0x304: 0x9d, 0x305: 0x9d, 0x306: 0x9d, 0x307: 0x9d, - 0x308: 0x9d, 0x309: 0x9d, 0x30a: 0x9d, 0x30b: 0x9d, 0x30c: 0x9d, 0x30d: 0x9d, 0x30e: 0x9d, 0x30f: 0x9d, - 0x310: 0x9d, 0x311: 0x9d, 0x312: 0x9d, 0x313: 0x9d, 0x314: 0x9d, 0x315: 0x9d, 0x316: 0x9d, 0x317: 0x9d, - 0x318: 0x9d, 0x319: 0x9d, 0x31a: 0x9d, 0x31b: 0x9d, 0x31c: 0x9d, 0x31d: 0x9d, 0x31e: 0xf8, 0x31f: 0xf9, + 0x300: 0x9f, 0x301: 0x9f, 0x302: 0x9f, 0x303: 0x9f, 0x304: 0x9f, 0x305: 0x9f, 0x306: 0x9f, 0x307: 0x9f, + 0x308: 0x9f, 0x309: 0x9f, 0x30a: 0x9f, 0x30b: 0x9f, 0x30c: 0x9f, 0x30d: 0x9f, 0x30e: 0x9f, 0x30f: 0x9f, + 0x310: 0x9f, 0x311: 0x9f, 0x312: 0x9f, 0x313: 0x9f, 0x314: 0x9f, 0x315: 0x9f, 0x316: 0x9f, 0x317: 0x9f, + 0x318: 0x9f, 0x319: 0x9f, 0x31a: 0x9f, 0x31b: 0x9f, 0x31c: 0x9f, 0x31d: 0x9f, 0x31e: 0xf9, 0x31f: 0xfa, // Block 0xd, offset 0x340 - 0x340: 0xb8, 0x341: 0xb8, 0x342: 0xb8, 0x343: 0xb8, 0x344: 0xb8, 0x345: 0xb8, 0x346: 0xb8, 0x347: 0xb8, - 0x348: 0xb8, 0x349: 0xb8, 0x34a: 0xb8, 0x34b: 0xb8, 0x34c: 0xb8, 0x34d: 0xb8, 0x34e: 0xb8, 0x34f: 0xb8, - 0x350: 0xb8, 0x351: 0xb8, 0x352: 0xb8, 0x353: 0xb8, 0x354: 0xb8, 0x355: 0xb8, 0x356: 0xb8, 0x357: 0xb8, - 0x358: 0xb8, 0x359: 0xb8, 0x35a: 0xb8, 0x35b: 0xb8, 0x35c: 0xb8, 0x35d: 0xb8, 0x35e: 0xb8, 0x35f: 0xb8, - 0x360: 0xb8, 0x361: 0xb8, 0x362: 0xb8, 0x363: 0xb8, 0x364: 0xb8, 0x365: 0xb8, 0x366: 0xb8, 0x367: 0xb8, - 0x368: 0xb8, 0x369: 0xb8, 0x36a: 0xb8, 0x36b: 0xb8, 0x36c: 0xb8, 0x36d: 0xb8, 0x36e: 0xb8, 0x36f: 0xb8, - 0x370: 0xb8, 0x371: 0xb8, 0x372: 0xb8, 0x373: 0xb8, 0x374: 0xb8, 0x375: 0xb8, 0x376: 0xb8, 0x377: 0xb8, - 0x378: 0xb8, 0x379: 0xb8, 0x37a: 0xb8, 0x37b: 0xb8, 0x37c: 0xb8, 0x37d: 0xb8, 0x37e: 0xb8, 0x37f: 0xb8, + 0x340: 0xba, 0x341: 0xba, 0x342: 0xba, 0x343: 0xba, 0x344: 0xba, 0x345: 0xba, 0x346: 0xba, 0x347: 0xba, + 0x348: 0xba, 0x349: 0xba, 0x34a: 0xba, 0x34b: 0xba, 0x34c: 0xba, 0x34d: 0xba, 0x34e: 0xba, 0x34f: 0xba, + 0x350: 0xba, 0x351: 0xba, 0x352: 0xba, 0x353: 0xba, 0x354: 0xba, 0x355: 0xba, 0x356: 0xba, 0x357: 0xba, + 0x358: 0xba, 0x359: 0xba, 0x35a: 0xba, 0x35b: 0xba, 0x35c: 0xba, 0x35d: 0xba, 0x35e: 0xba, 0x35f: 0xba, + 0x360: 0xba, 0x361: 0xba, 0x362: 0xba, 0x363: 0xba, 0x364: 0xba, 0x365: 0xba, 0x366: 0xba, 0x367: 0xba, + 0x368: 0xba, 0x369: 0xba, 0x36a: 0xba, 0x36b: 0xba, 0x36c: 0xba, 0x36d: 0xba, 0x36e: 0xba, 0x36f: 0xba, + 0x370: 0xba, 0x371: 0xba, 0x372: 0xba, 0x373: 0xba, 0x374: 0xba, 0x375: 0xba, 0x376: 0xba, 0x377: 0xba, + 0x378: 0xba, 0x379: 0xba, 0x37a: 0xba, 0x37b: 0xba, 0x37c: 0xba, 0x37d: 0xba, 0x37e: 0xba, 0x37f: 0xba, // Block 0xe, offset 0x380 - 0x380: 0xb8, 0x381: 0xb8, 0x382: 0xb8, 0x383: 0xb8, 0x384: 0xb8, 0x385: 0xb8, 0x386: 0xb8, 0x387: 0xb8, - 0x388: 0xb8, 0x389: 0xb8, 0x38a: 0xb8, 0x38b: 0xb8, 0x38c: 0xb8, 0x38d: 0xb8, 0x38e: 0xb8, 0x38f: 0xb8, - 0x390: 0xb8, 0x391: 0xb8, 0x392: 0xb8, 0x393: 0xb8, 0x394: 0xb8, 0x395: 0xb8, 0x396: 0xb8, 0x397: 0xb8, - 0x398: 0xb8, 0x399: 0xb8, 0x39a: 0xb8, 0x39b: 0xb8, 0x39c: 0xb8, 0x39d: 0xb8, 0x39e: 0xb8, 0x39f: 0xb8, - 0x3a0: 0xb8, 0x3a1: 0xb8, 0x3a2: 0xb8, 0x3a3: 0xb8, 0x3a4: 0xfa, 0x3a5: 0xfb, 0x3a6: 0xfc, 0x3a7: 0xfd, - 0x3a8: 0x45, 0x3a9: 0xfe, 0x3aa: 0xff, 0x3ab: 0x46, 0x3ac: 0x47, 0x3ad: 0x48, 0x3ae: 0x49, 0x3af: 0x4a, - 0x3b0: 0x100, 0x3b1: 0x4b, 0x3b2: 0x4c, 0x3b3: 0x4d, 0x3b4: 0x4e, 0x3b5: 0x4f, 0x3b6: 0x101, 0x3b7: 0x50, - 0x3b8: 0x51, 0x3b9: 0x52, 0x3ba: 0x53, 0x3bb: 0x54, 0x3bc: 0x55, 0x3bd: 0x56, 0x3be: 0x57, 0x3bf: 0x58, + 0x380: 0xba, 0x381: 0xba, 0x382: 0xba, 0x383: 0xba, 0x384: 0xba, 0x385: 0xba, 0x386: 0xba, 0x387: 0xba, + 0x388: 0xba, 0x389: 0xba, 0x38a: 0xba, 0x38b: 0xba, 0x38c: 0xba, 0x38d: 0xba, 0x38e: 0xba, 0x38f: 0xba, + 0x390: 0xba, 0x391: 0xba, 0x392: 0xba, 0x393: 0xba, 0x394: 0xba, 0x395: 0xba, 0x396: 0xba, 0x397: 0xba, + 0x398: 0xba, 0x399: 0xba, 0x39a: 0xba, 0x39b: 0xba, 0x39c: 0xba, 0x39d: 0xba, 0x39e: 0xba, 0x39f: 0xba, + 0x3a0: 0xba, 0x3a1: 0xba, 0x3a2: 0xba, 0x3a3: 0xba, 0x3a4: 0xfb, 0x3a5: 0xfc, 0x3a6: 0xfd, 0x3a7: 0xfe, + 0x3a8: 0x47, 0x3a9: 0xff, 0x3aa: 0x100, 0x3ab: 0x48, 0x3ac: 0x49, 0x3ad: 0x4a, 0x3ae: 0x4b, 0x3af: 0x4c, + 0x3b0: 0x101, 0x3b1: 0x4d, 0x3b2: 0x4e, 0x3b3: 0x4f, 0x3b4: 0x50, 0x3b5: 0x51, 0x3b6: 0x102, 0x3b7: 0x52, + 0x3b8: 0x53, 0x3b9: 0x54, 0x3ba: 0x55, 0x3bb: 0x56, 0x3bc: 0x57, 0x3bd: 0x58, 0x3be: 0x59, 0x3bf: 0x5a, // Block 0xf, offset 0x3c0 - 0x3c0: 0x102, 0x3c1: 0x103, 0x3c2: 0x9d, 0x3c3: 0x104, 0x3c4: 0x105, 0x3c5: 0x9b, 0x3c6: 0x106, 0x3c7: 0x107, - 0x3c8: 0xb8, 0x3c9: 0xb8, 0x3ca: 0x108, 0x3cb: 0x109, 0x3cc: 0x10a, 0x3cd: 0x10b, 0x3ce: 0x10c, 0x3cf: 0x10d, - 0x3d0: 0x10e, 0x3d1: 0x9d, 0x3d2: 0x10f, 0x3d3: 0x110, 0x3d4: 0x111, 0x3d5: 0x112, 0x3d6: 0xb8, 0x3d7: 0xb8, - 0x3d8: 0x9d, 0x3d9: 0x9d, 0x3da: 0x9d, 0x3db: 0x9d, 0x3dc: 0x113, 0x3dd: 0x114, 0x3de: 0xb8, 0x3df: 0xb8, - 0x3e0: 0x115, 0x3e1: 0x116, 0x3e2: 0x117, 0x3e3: 0x118, 0x3e4: 0x119, 0x3e5: 0xb8, 0x3e6: 0x11a, 0x3e7: 0x11b, - 0x3e8: 0x11c, 0x3e9: 0x11d, 0x3ea: 0x11e, 0x3eb: 0x59, 0x3ec: 0x11f, 0x3ed: 0x120, 0x3ee: 0x5a, 0x3ef: 0xb8, - 0x3f0: 0x9d, 0x3f1: 0x121, 0x3f2: 0x122, 0x3f3: 0x123, 0x3f4: 0xb8, 0x3f5: 0xb8, 0x3f6: 0xb8, 0x3f7: 0xb8, - 0x3f8: 0xb8, 0x3f9: 0x124, 0x3fa: 0xb8, 0x3fb: 0xb8, 0x3fc: 0xb8, 0x3fd: 0xb8, 0x3fe: 0xb8, 0x3ff: 0xb8, + 0x3c0: 0x103, 0x3c1: 0x104, 0x3c2: 0x9f, 0x3c3: 0x105, 0x3c4: 0x106, 0x3c5: 0x9b, 0x3c6: 0x107, 0x3c7: 0x108, + 0x3c8: 0xba, 0x3c9: 0xba, 0x3ca: 0x109, 0x3cb: 0x10a, 0x3cc: 0x10b, 0x3cd: 0x10c, 0x3ce: 0x10d, 0x3cf: 0x10e, + 0x3d0: 0x10f, 0x3d1: 0x9f, 0x3d2: 0x110, 0x3d3: 0x111, 0x3d4: 0x112, 0x3d5: 0x113, 0x3d6: 0xba, 0x3d7: 0xba, + 0x3d8: 0x9f, 0x3d9: 0x9f, 0x3da: 0x9f, 0x3db: 0x9f, 0x3dc: 0x114, 0x3dd: 0x115, 0x3de: 0xba, 0x3df: 0xba, + 0x3e0: 0x116, 0x3e1: 0x117, 0x3e2: 0x118, 0x3e3: 0x119, 0x3e4: 0x11a, 0x3e5: 0xba, 0x3e6: 0x11b, 0x3e7: 0x11c, + 0x3e8: 0x11d, 0x3e9: 0x11e, 0x3ea: 0x11f, 0x3eb: 0x5b, 0x3ec: 0x120, 0x3ed: 0x121, 0x3ee: 0x5c, 0x3ef: 0xba, + 0x3f0: 0x122, 0x3f1: 0x123, 0x3f2: 0x124, 0x3f3: 0x125, 0x3f4: 0xba, 0x3f5: 0xba, 0x3f6: 0xba, 0x3f7: 0xba, + 0x3f8: 0xba, 0x3f9: 0x126, 0x3fa: 0xba, 0x3fb: 0xba, 0x3fc: 0xba, 0x3fd: 0xba, 0x3fe: 0xba, 0x3ff: 0xba, // Block 0x10, offset 0x400 - 0x400: 0x125, 0x401: 0x126, 0x402: 0x127, 0x403: 0x128, 0x404: 0x129, 0x405: 0x12a, 0x406: 0x12b, 0x407: 0x12c, - 0x408: 0x12d, 0x409: 0xb8, 0x40a: 0x12e, 0x40b: 0x12f, 0x40c: 0x5b, 0x40d: 0x5c, 0x40e: 0xb8, 0x40f: 0xb8, - 0x410: 0x130, 0x411: 0x131, 0x412: 0x132, 0x413: 0x133, 0x414: 0xb8, 0x415: 0xb8, 0x416: 0x134, 0x417: 0x135, - 0x418: 0x136, 0x419: 0x137, 0x41a: 0x138, 0x41b: 0x139, 0x41c: 0x13a, 0x41d: 0xb8, 0x41e: 0xb8, 0x41f: 0xb8, - 0x420: 0xb8, 0x421: 0xb8, 0x422: 0x13b, 0x423: 0x13c, 0x424: 0xb8, 0x425: 0xb8, 0x426: 0xb8, 0x427: 0xb8, - 0x428: 0xb8, 0x429: 0xb8, 0x42a: 0xb8, 0x42b: 0x13d, 0x42c: 0xb8, 0x42d: 0xb8, 0x42e: 0xb8, 0x42f: 0xb8, - 0x430: 0x13e, 0x431: 0x13f, 0x432: 0x140, 0x433: 0xb8, 0x434: 0xb8, 0x435: 0xb8, 0x436: 0xb8, 0x437: 0xb8, - 0x438: 0xb8, 0x439: 0xb8, 0x43a: 0xb8, 0x43b: 0xb8, 0x43c: 0xb8, 0x43d: 0xb8, 0x43e: 0xb8, 0x43f: 0xb8, + 0x400: 0x127, 0x401: 0x128, 0x402: 0x129, 0x403: 0x12a, 0x404: 0x12b, 0x405: 0x12c, 0x406: 0x12d, 0x407: 0x12e, + 0x408: 0x12f, 0x409: 0xba, 0x40a: 0x130, 0x40b: 0x131, 0x40c: 0x5d, 0x40d: 0x5e, 0x40e: 0xba, 0x40f: 0xba, + 0x410: 0x132, 0x411: 0x133, 0x412: 0x134, 0x413: 0x135, 0x414: 0xba, 0x415: 0xba, 0x416: 0x136, 0x417: 0x137, + 0x418: 0x138, 0x419: 0x139, 0x41a: 0x13a, 0x41b: 0x13b, 0x41c: 0x13c, 0x41d: 0xba, 0x41e: 0xba, 0x41f: 0xba, + 0x420: 0xba, 0x421: 0xba, 0x422: 0x13d, 0x423: 0x13e, 0x424: 0xba, 0x425: 0xba, 0x426: 0xba, 0x427: 0xba, + 0x428: 0x13f, 0x429: 0x140, 0x42a: 0x141, 0x42b: 0x142, 0x42c: 0xba, 0x42d: 0xba, 0x42e: 0xba, 0x42f: 0xba, + 0x430: 0x143, 0x431: 0x144, 0x432: 0x145, 0x433: 0xba, 0x434: 0x146, 0x435: 0x147, 0x436: 0xba, 0x437: 0xba, + 0x438: 0xba, 0x439: 0xba, 0x43a: 0xba, 0x43b: 0xba, 0x43c: 0xba, 0x43d: 0xba, 0x43e: 0xba, 0x43f: 0xba, // Block 0x11, offset 0x440 - 0x440: 0x9d, 0x441: 0x9d, 0x442: 0x9d, 0x443: 0x9d, 0x444: 0x9d, 0x445: 0x9d, 0x446: 0x9d, 0x447: 0x9d, - 0x448: 0x9d, 0x449: 0x9d, 0x44a: 0x9d, 0x44b: 0x9d, 0x44c: 0x9d, 0x44d: 0x9d, 0x44e: 0x141, 0x44f: 0xb8, - 0x450: 0x9b, 0x451: 0x142, 0x452: 0x9d, 0x453: 0x9d, 0x454: 0x9d, 0x455: 0x143, 0x456: 0xb8, 0x457: 0xb8, - 0x458: 0xb8, 0x459: 0xb8, 0x45a: 0xb8, 0x45b: 0xb8, 0x45c: 0xb8, 0x45d: 0xb8, 0x45e: 0xb8, 0x45f: 0xb8, - 0x460: 0xb8, 0x461: 0xb8, 0x462: 0xb8, 0x463: 0xb8, 0x464: 0xb8, 0x465: 0xb8, 0x466: 0xb8, 0x467: 0xb8, - 0x468: 0xb8, 0x469: 0xb8, 0x46a: 0xb8, 0x46b: 0xb8, 0x46c: 0xb8, 0x46d: 0xb8, 0x46e: 0xb8, 0x46f: 0xb8, - 0x470: 0xb8, 0x471: 0xb8, 0x472: 0xb8, 0x473: 0xb8, 0x474: 0xb8, 0x475: 0xb8, 0x476: 0xb8, 0x477: 0xb8, - 0x478: 0xb8, 0x479: 0xb8, 0x47a: 0xb8, 0x47b: 0xb8, 0x47c: 0xb8, 0x47d: 0xb8, 0x47e: 0xb8, 0x47f: 0xb8, + 0x440: 0x9f, 0x441: 0x9f, 0x442: 0x9f, 0x443: 0x9f, 0x444: 0x9f, 0x445: 0x9f, 0x446: 0x9f, 0x447: 0x9f, + 0x448: 0x9f, 0x449: 0x9f, 0x44a: 0x9f, 0x44b: 0x9f, 0x44c: 0x9f, 0x44d: 0x9f, 0x44e: 0x148, 0x44f: 0xba, + 0x450: 0x9b, 0x451: 0x149, 0x452: 0x9f, 0x453: 0x9f, 0x454: 0x9f, 0x455: 0x14a, 0x456: 0xba, 0x457: 0xba, + 0x458: 0xba, 0x459: 0xba, 0x45a: 0xba, 0x45b: 0xba, 0x45c: 0xba, 0x45d: 0xba, 0x45e: 0xba, 0x45f: 0xba, + 0x460: 0xba, 0x461: 0xba, 0x462: 0xba, 0x463: 0xba, 0x464: 0xba, 0x465: 0xba, 0x466: 0xba, 0x467: 0xba, + 0x468: 0xba, 0x469: 0xba, 0x46a: 0xba, 0x46b: 0xba, 0x46c: 0xba, 0x46d: 0xba, 0x46e: 0xba, 0x46f: 0xba, + 0x470: 0xba, 0x471: 0xba, 0x472: 0xba, 0x473: 0xba, 0x474: 0xba, 0x475: 0xba, 0x476: 0xba, 0x477: 0xba, + 0x478: 0xba, 0x479: 0xba, 0x47a: 0xba, 0x47b: 0xba, 0x47c: 0xba, 0x47d: 0xba, 0x47e: 0xba, 0x47f: 0xba, // Block 0x12, offset 0x480 - 0x480: 0x9d, 0x481: 0x9d, 0x482: 0x9d, 0x483: 0x9d, 0x484: 0x9d, 0x485: 0x9d, 0x486: 0x9d, 0x487: 0x9d, - 0x488: 0x9d, 0x489: 0x9d, 0x48a: 0x9d, 0x48b: 0x9d, 0x48c: 0x9d, 0x48d: 0x9d, 0x48e: 0x9d, 0x48f: 0x9d, - 0x490: 0x144, 0x491: 0xb8, 0x492: 0xb8, 0x493: 0xb8, 0x494: 0xb8, 0x495: 0xb8, 0x496: 0xb8, 0x497: 0xb8, - 0x498: 0xb8, 0x499: 0xb8, 0x49a: 0xb8, 0x49b: 0xb8, 0x49c: 0xb8, 0x49d: 0xb8, 0x49e: 0xb8, 0x49f: 0xb8, - 0x4a0: 0xb8, 0x4a1: 0xb8, 0x4a2: 0xb8, 0x4a3: 0xb8, 0x4a4: 0xb8, 0x4a5: 0xb8, 0x4a6: 0xb8, 0x4a7: 0xb8, - 0x4a8: 0xb8, 0x4a9: 0xb8, 0x4aa: 0xb8, 0x4ab: 0xb8, 0x4ac: 0xb8, 0x4ad: 0xb8, 0x4ae: 0xb8, 0x4af: 0xb8, - 0x4b0: 0xb8, 0x4b1: 0xb8, 0x4b2: 0xb8, 0x4b3: 0xb8, 0x4b4: 0xb8, 0x4b5: 0xb8, 0x4b6: 0xb8, 0x4b7: 0xb8, - 0x4b8: 0xb8, 0x4b9: 0xb8, 0x4ba: 0xb8, 0x4bb: 0xb8, 0x4bc: 0xb8, 0x4bd: 0xb8, 0x4be: 0xb8, 0x4bf: 0xb8, + 0x480: 0x9f, 0x481: 0x9f, 0x482: 0x9f, 0x483: 0x9f, 0x484: 0x9f, 0x485: 0x9f, 0x486: 0x9f, 0x487: 0x9f, + 0x488: 0x9f, 0x489: 0x9f, 0x48a: 0x9f, 0x48b: 0x9f, 0x48c: 0x9f, 0x48d: 0x9f, 0x48e: 0x9f, 0x48f: 0x9f, + 0x490: 0x14b, 0x491: 0xba, 0x492: 0xba, 0x493: 0xba, 0x494: 0xba, 0x495: 0xba, 0x496: 0xba, 0x497: 0xba, + 0x498: 0xba, 0x499: 0xba, 0x49a: 0xba, 0x49b: 0xba, 0x49c: 0xba, 0x49d: 0xba, 0x49e: 0xba, 0x49f: 0xba, + 0x4a0: 0xba, 0x4a1: 0xba, 0x4a2: 0xba, 0x4a3: 0xba, 0x4a4: 0xba, 0x4a5: 0xba, 0x4a6: 0xba, 0x4a7: 0xba, + 0x4a8: 0xba, 0x4a9: 0xba, 0x4aa: 0xba, 0x4ab: 0xba, 0x4ac: 0xba, 0x4ad: 0xba, 0x4ae: 0xba, 0x4af: 0xba, + 0x4b0: 0xba, 0x4b1: 0xba, 0x4b2: 0xba, 0x4b3: 0xba, 0x4b4: 0xba, 0x4b5: 0xba, 0x4b6: 0xba, 0x4b7: 0xba, + 0x4b8: 0xba, 0x4b9: 0xba, 0x4ba: 0xba, 0x4bb: 0xba, 0x4bc: 0xba, 0x4bd: 0xba, 0x4be: 0xba, 0x4bf: 0xba, // Block 0x13, offset 0x4c0 - 0x4c0: 0xb8, 0x4c1: 0xb8, 0x4c2: 0xb8, 0x4c3: 0xb8, 0x4c4: 0xb8, 0x4c5: 0xb8, 0x4c6: 0xb8, 0x4c7: 0xb8, - 0x4c8: 0xb8, 0x4c9: 0xb8, 0x4ca: 0xb8, 0x4cb: 0xb8, 0x4cc: 0xb8, 0x4cd: 0xb8, 0x4ce: 0xb8, 0x4cf: 0xb8, - 0x4d0: 0x9d, 0x4d1: 0x9d, 0x4d2: 0x9d, 0x4d3: 0x9d, 0x4d4: 0x9d, 0x4d5: 0x9d, 0x4d6: 0x9d, 0x4d7: 0x9d, - 0x4d8: 0x9d, 0x4d9: 0x145, 0x4da: 0xb8, 0x4db: 0xb8, 0x4dc: 0xb8, 0x4dd: 0xb8, 0x4de: 0xb8, 0x4df: 0xb8, - 0x4e0: 0xb8, 0x4e1: 0xb8, 0x4e2: 0xb8, 0x4e3: 0xb8, 0x4e4: 0xb8, 0x4e5: 0xb8, 0x4e6: 0xb8, 0x4e7: 0xb8, - 0x4e8: 0xb8, 0x4e9: 0xb8, 0x4ea: 0xb8, 0x4eb: 0xb8, 0x4ec: 0xb8, 0x4ed: 0xb8, 0x4ee: 0xb8, 0x4ef: 0xb8, - 0x4f0: 0xb8, 0x4f1: 0xb8, 0x4f2: 0xb8, 0x4f3: 0xb8, 0x4f4: 0xb8, 0x4f5: 0xb8, 0x4f6: 0xb8, 0x4f7: 0xb8, - 0x4f8: 0xb8, 0x4f9: 0xb8, 0x4fa: 0xb8, 0x4fb: 0xb8, 0x4fc: 0xb8, 0x4fd: 0xb8, 0x4fe: 0xb8, 0x4ff: 0xb8, + 0x4c0: 0xba, 0x4c1: 0xba, 0x4c2: 0xba, 0x4c3: 0xba, 0x4c4: 0xba, 0x4c5: 0xba, 0x4c6: 0xba, 0x4c7: 0xba, + 0x4c8: 0xba, 0x4c9: 0xba, 0x4ca: 0xba, 0x4cb: 0xba, 0x4cc: 0xba, 0x4cd: 0xba, 0x4ce: 0xba, 0x4cf: 0xba, + 0x4d0: 0x9f, 0x4d1: 0x9f, 0x4d2: 0x9f, 0x4d3: 0x9f, 0x4d4: 0x9f, 0x4d5: 0x9f, 0x4d6: 0x9f, 0x4d7: 0x9f, + 0x4d8: 0x9f, 0x4d9: 0x14c, 0x4da: 0xba, 0x4db: 0xba, 0x4dc: 0xba, 0x4dd: 0xba, 0x4de: 0xba, 0x4df: 0xba, + 0x4e0: 0xba, 0x4e1: 0xba, 0x4e2: 0xba, 0x4e3: 0xba, 0x4e4: 0xba, 0x4e5: 0xba, 0x4e6: 0xba, 0x4e7: 0xba, + 0x4e8: 0xba, 0x4e9: 0xba, 0x4ea: 0xba, 0x4eb: 0xba, 0x4ec: 0xba, 0x4ed: 0xba, 0x4ee: 0xba, 0x4ef: 0xba, + 0x4f0: 0xba, 0x4f1: 0xba, 0x4f2: 0xba, 0x4f3: 0xba, 0x4f4: 0xba, 0x4f5: 0xba, 0x4f6: 0xba, 0x4f7: 0xba, + 0x4f8: 0xba, 0x4f9: 0xba, 0x4fa: 0xba, 0x4fb: 0xba, 0x4fc: 0xba, 0x4fd: 0xba, 0x4fe: 0xba, 0x4ff: 0xba, // Block 0x14, offset 0x500 - 0x500: 0xb8, 0x501: 0xb8, 0x502: 0xb8, 0x503: 0xb8, 0x504: 0xb8, 0x505: 0xb8, 0x506: 0xb8, 0x507: 0xb8, - 0x508: 0xb8, 0x509: 0xb8, 0x50a: 0xb8, 0x50b: 0xb8, 0x50c: 0xb8, 0x50d: 0xb8, 0x50e: 0xb8, 0x50f: 0xb8, - 0x510: 0xb8, 0x511: 0xb8, 0x512: 0xb8, 0x513: 0xb8, 0x514: 0xb8, 0x515: 0xb8, 0x516: 0xb8, 0x517: 0xb8, - 0x518: 0xb8, 0x519: 0xb8, 0x51a: 0xb8, 0x51b: 0xb8, 0x51c: 0xb8, 0x51d: 0xb8, 0x51e: 0xb8, 0x51f: 0xb8, - 0x520: 0x9d, 0x521: 0x9d, 0x522: 0x9d, 0x523: 0x9d, 0x524: 0x9d, 0x525: 0x9d, 0x526: 0x9d, 0x527: 0x9d, - 0x528: 0x13d, 0x529: 0x146, 0x52a: 0xb8, 0x52b: 0x147, 0x52c: 0x148, 0x52d: 0x149, 0x52e: 0x14a, 0x52f: 0xb8, - 0x530: 0xb8, 0x531: 0xb8, 0x532: 0xb8, 0x533: 0xb8, 0x534: 0xb8, 0x535: 0xb8, 0x536: 0xb8, 0x537: 0xb8, - 0x538: 0xb8, 0x539: 0xb8, 0x53a: 0xb8, 0x53b: 0xb8, 0x53c: 0x9d, 0x53d: 0x14b, 0x53e: 0x14c, 0x53f: 0x14d, + 0x500: 0xba, 0x501: 0xba, 0x502: 0xba, 0x503: 0xba, 0x504: 0xba, 0x505: 0xba, 0x506: 0xba, 0x507: 0xba, + 0x508: 0xba, 0x509: 0xba, 0x50a: 0xba, 0x50b: 0xba, 0x50c: 0xba, 0x50d: 0xba, 0x50e: 0xba, 0x50f: 0xba, + 0x510: 0xba, 0x511: 0xba, 0x512: 0xba, 0x513: 0xba, 0x514: 0xba, 0x515: 0xba, 0x516: 0xba, 0x517: 0xba, + 0x518: 0xba, 0x519: 0xba, 0x51a: 0xba, 0x51b: 0xba, 0x51c: 0xba, 0x51d: 0xba, 0x51e: 0xba, 0x51f: 0xba, + 0x520: 0x9f, 0x521: 0x9f, 0x522: 0x9f, 0x523: 0x9f, 0x524: 0x9f, 0x525: 0x9f, 0x526: 0x9f, 0x527: 0x9f, + 0x528: 0x142, 0x529: 0x14d, 0x52a: 0xba, 0x52b: 0x14e, 0x52c: 0x14f, 0x52d: 0x150, 0x52e: 0x151, 0x52f: 0xba, + 0x530: 0xba, 0x531: 0xba, 0x532: 0xba, 0x533: 0xba, 0x534: 0xba, 0x535: 0xba, 0x536: 0xba, 0x537: 0xba, + 0x538: 0xba, 0x539: 0xba, 0x53a: 0xba, 0x53b: 0xba, 0x53c: 0x9f, 0x53d: 0x152, 0x53e: 0x153, 0x53f: 0x154, // Block 0x15, offset 0x540 - 0x540: 0x9d, 0x541: 0x9d, 0x542: 0x9d, 0x543: 0x9d, 0x544: 0x9d, 0x545: 0x9d, 0x546: 0x9d, 0x547: 0x9d, - 0x548: 0x9d, 0x549: 0x9d, 0x54a: 0x9d, 0x54b: 0x9d, 0x54c: 0x9d, 0x54d: 0x9d, 0x54e: 0x9d, 0x54f: 0x9d, - 0x550: 0x9d, 0x551: 0x9d, 0x552: 0x9d, 0x553: 0x9d, 0x554: 0x9d, 0x555: 0x9d, 0x556: 0x9d, 0x557: 0x9d, - 0x558: 0x9d, 0x559: 0x9d, 0x55a: 0x9d, 0x55b: 0x9d, 0x55c: 0x9d, 0x55d: 0x9d, 0x55e: 0x9d, 0x55f: 0x14e, - 0x560: 0x9d, 0x561: 0x9d, 0x562: 0x9d, 0x563: 0x9d, 0x564: 0x9d, 0x565: 0x9d, 0x566: 0x9d, 0x567: 0x9d, - 0x568: 0x9d, 0x569: 0x9d, 0x56a: 0x9d, 0x56b: 0x14f, 0x56c: 0xb8, 0x56d: 0xb8, 0x56e: 0xb8, 0x56f: 0xb8, - 0x570: 0xb8, 0x571: 0xb8, 0x572: 0xb8, 0x573: 0xb8, 0x574: 0xb8, 0x575: 0xb8, 0x576: 0xb8, 0x577: 0xb8, - 0x578: 0xb8, 0x579: 0xb8, 0x57a: 0xb8, 0x57b: 0xb8, 0x57c: 0xb8, 0x57d: 0xb8, 0x57e: 0xb8, 0x57f: 0xb8, + 0x540: 0x9f, 0x541: 0x9f, 0x542: 0x9f, 0x543: 0x9f, 0x544: 0x9f, 0x545: 0x9f, 0x546: 0x9f, 0x547: 0x9f, + 0x548: 0x9f, 0x549: 0x9f, 0x54a: 0x9f, 0x54b: 0x9f, 0x54c: 0x9f, 0x54d: 0x9f, 0x54e: 0x9f, 0x54f: 0x9f, + 0x550: 0x9f, 0x551: 0x9f, 0x552: 0x9f, 0x553: 0x9f, 0x554: 0x9f, 0x555: 0x9f, 0x556: 0x9f, 0x557: 0x9f, + 0x558: 0x9f, 0x559: 0x9f, 0x55a: 0x9f, 0x55b: 0x9f, 0x55c: 0x9f, 0x55d: 0x9f, 0x55e: 0x9f, 0x55f: 0x155, + 0x560: 0x9f, 0x561: 0x9f, 0x562: 0x9f, 0x563: 0x9f, 0x564: 0x9f, 0x565: 0x9f, 0x566: 0x9f, 0x567: 0x9f, + 0x568: 0x9f, 0x569: 0x9f, 0x56a: 0x9f, 0x56b: 0x156, 0x56c: 0xba, 0x56d: 0xba, 0x56e: 0xba, 0x56f: 0xba, + 0x570: 0xba, 0x571: 0xba, 0x572: 0xba, 0x573: 0xba, 0x574: 0xba, 0x575: 0xba, 0x576: 0xba, 0x577: 0xba, + 0x578: 0xba, 0x579: 0xba, 0x57a: 0xba, 0x57b: 0xba, 0x57c: 0xba, 0x57d: 0xba, 0x57e: 0xba, 0x57f: 0xba, // Block 0x16, offset 0x580 - 0x580: 0x150, 0x581: 0xb8, 0x582: 0xb8, 0x583: 0xb8, 0x584: 0xb8, 0x585: 0xb8, 0x586: 0xb8, 0x587: 0xb8, - 0x588: 0xb8, 0x589: 0xb8, 0x58a: 0xb8, 0x58b: 0xb8, 0x58c: 0xb8, 0x58d: 0xb8, 0x58e: 0xb8, 0x58f: 0xb8, - 0x590: 0xb8, 0x591: 0xb8, 0x592: 0xb8, 0x593: 0xb8, 0x594: 0xb8, 0x595: 0xb8, 0x596: 0xb8, 0x597: 0xb8, - 0x598: 0xb8, 0x599: 0xb8, 0x59a: 0xb8, 0x59b: 0xb8, 0x59c: 0xb8, 0x59d: 0xb8, 0x59e: 0xb8, 0x59f: 0xb8, - 0x5a0: 0xb8, 0x5a1: 0xb8, 0x5a2: 0xb8, 0x5a3: 0xb8, 0x5a4: 0xb8, 0x5a5: 0xb8, 0x5a6: 0xb8, 0x5a7: 0xb8, - 0x5a8: 0xb8, 0x5a9: 0xb8, 0x5aa: 0xb8, 0x5ab: 0xb8, 0x5ac: 0xb8, 0x5ad: 0xb8, 0x5ae: 0xb8, 0x5af: 0xb8, - 0x5b0: 0x9d, 0x5b1: 0x151, 0x5b2: 0x152, 0x5b3: 0xb8, 0x5b4: 0xb8, 0x5b5: 0xb8, 0x5b6: 0xb8, 0x5b7: 0xb8, - 0x5b8: 0xb8, 0x5b9: 0xb8, 0x5ba: 0xb8, 0x5bb: 0xb8, 0x5bc: 0xb8, 0x5bd: 0xb8, 0x5be: 0xb8, 0x5bf: 0xb8, + 0x580: 0x9f, 0x581: 0x9f, 0x582: 0x9f, 0x583: 0x9f, 0x584: 0x157, 0x585: 0x158, 0x586: 0x9f, 0x587: 0x9f, + 0x588: 0x9f, 0x589: 0x9f, 0x58a: 0x9f, 0x58b: 0x159, 0x58c: 0xba, 0x58d: 0xba, 0x58e: 0xba, 0x58f: 0xba, + 0x590: 0xba, 0x591: 0xba, 0x592: 0xba, 0x593: 0xba, 0x594: 0xba, 0x595: 0xba, 0x596: 0xba, 0x597: 0xba, + 0x598: 0xba, 0x599: 0xba, 0x59a: 0xba, 0x59b: 0xba, 0x59c: 0xba, 0x59d: 0xba, 0x59e: 0xba, 0x59f: 0xba, + 0x5a0: 0xba, 0x5a1: 0xba, 0x5a2: 0xba, 0x5a3: 0xba, 0x5a4: 0xba, 0x5a5: 0xba, 0x5a6: 0xba, 0x5a7: 0xba, + 0x5a8: 0xba, 0x5a9: 0xba, 0x5aa: 0xba, 0x5ab: 0xba, 0x5ac: 0xba, 0x5ad: 0xba, 0x5ae: 0xba, 0x5af: 0xba, + 0x5b0: 0x9f, 0x5b1: 0x15a, 0x5b2: 0x15b, 0x5b3: 0xba, 0x5b4: 0xba, 0x5b5: 0xba, 0x5b6: 0xba, 0x5b7: 0xba, + 0x5b8: 0xba, 0x5b9: 0xba, 0x5ba: 0xba, 0x5bb: 0xba, 0x5bc: 0xba, 0x5bd: 0xba, 0x5be: 0xba, 0x5bf: 0xba, // Block 0x17, offset 0x5c0 - 0x5c0: 0x9b, 0x5c1: 0x9b, 0x5c2: 0x9b, 0x5c3: 0x153, 0x5c4: 0x154, 0x5c5: 0x155, 0x5c6: 0x156, 0x5c7: 0x157, - 0x5c8: 0x9b, 0x5c9: 0x158, 0x5ca: 0xb8, 0x5cb: 0xb8, 0x5cc: 0x9b, 0x5cd: 0x159, 0x5ce: 0xb8, 0x5cf: 0xb8, - 0x5d0: 0x5d, 0x5d1: 0x5e, 0x5d2: 0x5f, 0x5d3: 0x60, 0x5d4: 0x61, 0x5d5: 0x62, 0x5d6: 0x63, 0x5d7: 0x64, - 0x5d8: 0x65, 0x5d9: 0x66, 0x5da: 0x67, 0x5db: 0x68, 0x5dc: 0x69, 0x5dd: 0x6a, 0x5de: 0x6b, 0x5df: 0x6c, + 0x5c0: 0x9b, 0x5c1: 0x9b, 0x5c2: 0x9b, 0x5c3: 0x15c, 0x5c4: 0x15d, 0x5c5: 0x15e, 0x5c6: 0x15f, 0x5c7: 0x160, + 0x5c8: 0x9b, 0x5c9: 0x161, 0x5ca: 0xba, 0x5cb: 0xba, 0x5cc: 0x9b, 0x5cd: 0x162, 0x5ce: 0xba, 0x5cf: 0xba, + 0x5d0: 0x5f, 0x5d1: 0x60, 0x5d2: 0x61, 0x5d3: 0x62, 0x5d4: 0x63, 0x5d5: 0x64, 0x5d6: 0x65, 0x5d7: 0x66, + 0x5d8: 0x67, 0x5d9: 0x68, 0x5da: 0x69, 0x5db: 0x6a, 0x5dc: 0x6b, 0x5dd: 0x6c, 0x5de: 0x6d, 0x5df: 0x6e, 0x5e0: 0x9b, 0x5e1: 0x9b, 0x5e2: 0x9b, 0x5e3: 0x9b, 0x5e4: 0x9b, 0x5e5: 0x9b, 0x5e6: 0x9b, 0x5e7: 0x9b, - 0x5e8: 0x15a, 0x5e9: 0x15b, 0x5ea: 0x15c, 0x5eb: 0xb8, 0x5ec: 0xb8, 0x5ed: 0xb8, 0x5ee: 0xb8, 0x5ef: 0xb8, - 0x5f0: 0xb8, 0x5f1: 0xb8, 0x5f2: 0xb8, 0x5f3: 0xb8, 0x5f4: 0xb8, 0x5f5: 0xb8, 0x5f6: 0xb8, 0x5f7: 0xb8, - 0x5f8: 0xb8, 0x5f9: 0xb8, 0x5fa: 0xb8, 0x5fb: 0xb8, 0x5fc: 0xb8, 0x5fd: 0xb8, 0x5fe: 0xb8, 0x5ff: 0xb8, + 0x5e8: 0x163, 0x5e9: 0x164, 0x5ea: 0x165, 0x5eb: 0xba, 0x5ec: 0xba, 0x5ed: 0xba, 0x5ee: 0xba, 0x5ef: 0xba, + 0x5f0: 0xba, 0x5f1: 0xba, 0x5f2: 0xba, 0x5f3: 0xba, 0x5f4: 0xba, 0x5f5: 0xba, 0x5f6: 0xba, 0x5f7: 0xba, + 0x5f8: 0xba, 0x5f9: 0xba, 0x5fa: 0xba, 0x5fb: 0xba, 0x5fc: 0xba, 0x5fd: 0xba, 0x5fe: 0xba, 0x5ff: 0xba, // Block 0x18, offset 0x600 - 0x600: 0x15d, 0x601: 0xb8, 0x602: 0xb8, 0x603: 0xb8, 0x604: 0xb8, 0x605: 0xb8, 0x606: 0xb8, 0x607: 0xb8, - 0x608: 0xb8, 0x609: 0xb8, 0x60a: 0xb8, 0x60b: 0xb8, 0x60c: 0xb8, 0x60d: 0xb8, 0x60e: 0xb8, 0x60f: 0xb8, - 0x610: 0xb8, 0x611: 0xb8, 0x612: 0xb8, 0x613: 0xb8, 0x614: 0xb8, 0x615: 0xb8, 0x616: 0xb8, 0x617: 0xb8, - 0x618: 0xb8, 0x619: 0xb8, 0x61a: 0xb8, 0x61b: 0xb8, 0x61c: 0xb8, 0x61d: 0xb8, 0x61e: 0xb8, 0x61f: 0xb8, - 0x620: 0x9d, 0x621: 0x9d, 0x622: 0x9d, 0x623: 0x15e, 0x624: 0x6d, 0x625: 0x15f, 0x626: 0xb8, 0x627: 0xb8, - 0x628: 0xb8, 0x629: 0xb8, 0x62a: 0xb8, 0x62b: 0xb8, 0x62c: 0xb8, 0x62d: 0xb8, 0x62e: 0xb8, 0x62f: 0xb8, - 0x630: 0xb8, 0x631: 0xb8, 0x632: 0xb8, 0x633: 0xb8, 0x634: 0xb8, 0x635: 0xb8, 0x636: 0xb8, 0x637: 0xb8, - 0x638: 0x6e, 0x639: 0x6f, 0x63a: 0x70, 0x63b: 0x160, 0x63c: 0xb8, 0x63d: 0xb8, 0x63e: 0xb8, 0x63f: 0xb8, + 0x600: 0x166, 0x601: 0xba, 0x602: 0xba, 0x603: 0xba, 0x604: 0xba, 0x605: 0xba, 0x606: 0xba, 0x607: 0xba, + 0x608: 0xba, 0x609: 0xba, 0x60a: 0xba, 0x60b: 0xba, 0x60c: 0xba, 0x60d: 0xba, 0x60e: 0xba, 0x60f: 0xba, + 0x610: 0xba, 0x611: 0xba, 0x612: 0xba, 0x613: 0xba, 0x614: 0xba, 0x615: 0xba, 0x616: 0xba, 0x617: 0xba, + 0x618: 0xba, 0x619: 0xba, 0x61a: 0xba, 0x61b: 0xba, 0x61c: 0xba, 0x61d: 0xba, 0x61e: 0xba, 0x61f: 0xba, + 0x620: 0x122, 0x621: 0x122, 0x622: 0x122, 0x623: 0x167, 0x624: 0x6f, 0x625: 0x168, 0x626: 0xba, 0x627: 0xba, + 0x628: 0xba, 0x629: 0xba, 0x62a: 0xba, 0x62b: 0xba, 0x62c: 0xba, 0x62d: 0xba, 0x62e: 0xba, 0x62f: 0xba, + 0x630: 0xba, 0x631: 0xba, 0x632: 0xba, 0x633: 0xba, 0x634: 0xba, 0x635: 0xba, 0x636: 0xba, 0x637: 0xba, + 0x638: 0x70, 0x639: 0x71, 0x63a: 0x72, 0x63b: 0x169, 0x63c: 0xba, 0x63d: 0xba, 0x63e: 0xba, 0x63f: 0xba, // Block 0x19, offset 0x640 - 0x640: 0x161, 0x641: 0x9b, 0x642: 0x162, 0x643: 0x163, 0x644: 0x71, 0x645: 0x72, 0x646: 0x164, 0x647: 0x165, - 0x648: 0x73, 0x649: 0x166, 0x64a: 0xb8, 0x64b: 0xb8, 0x64c: 0x9b, 0x64d: 0x9b, 0x64e: 0x9b, 0x64f: 0x9b, + 0x640: 0x16a, 0x641: 0x9b, 0x642: 0x16b, 0x643: 0x16c, 0x644: 0x73, 0x645: 0x74, 0x646: 0x16d, 0x647: 0x16e, + 0x648: 0x75, 0x649: 0x16f, 0x64a: 0xba, 0x64b: 0xba, 0x64c: 0x9b, 0x64d: 0x9b, 0x64e: 0x9b, 0x64f: 0x9b, 0x650: 0x9b, 0x651: 0x9b, 0x652: 0x9b, 0x653: 0x9b, 0x654: 0x9b, 0x655: 0x9b, 0x656: 0x9b, 0x657: 0x9b, - 0x658: 0x9b, 0x659: 0x9b, 0x65a: 0x9b, 0x65b: 0x167, 0x65c: 0x9b, 0x65d: 0x168, 0x65e: 0x9b, 0x65f: 0x169, - 0x660: 0x16a, 0x661: 0x16b, 0x662: 0x16c, 0x663: 0xb8, 0x664: 0x16d, 0x665: 0x16e, 0x666: 0x16f, 0x667: 0x170, - 0x668: 0xb8, 0x669: 0xb8, 0x66a: 0xb8, 0x66b: 0xb8, 0x66c: 0xb8, 0x66d: 0xb8, 0x66e: 0xb8, 0x66f: 0xb8, - 0x670: 0xb8, 0x671: 0xb8, 0x672: 0xb8, 0x673: 0xb8, 0x674: 0xb8, 0x675: 0xb8, 0x676: 0xb8, 0x677: 0xb8, - 0x678: 0xb8, 0x679: 0xb8, 0x67a: 0xb8, 0x67b: 0xb8, 0x67c: 0xb8, 0x67d: 0xb8, 0x67e: 0xb8, 0x67f: 0xb8, + 0x658: 0x9b, 0x659: 0x9b, 0x65a: 0x9b, 0x65b: 0x170, 0x65c: 0x9b, 0x65d: 0x171, 0x65e: 0x9b, 0x65f: 0x172, + 0x660: 0x173, 0x661: 0x174, 0x662: 0x175, 0x663: 0xba, 0x664: 0x176, 0x665: 0x177, 0x666: 0x178, 0x667: 0x179, + 0x668: 0xba, 0x669: 0xba, 0x66a: 0xba, 0x66b: 0xba, 0x66c: 0xba, 0x66d: 0xba, 0x66e: 0xba, 0x66f: 0xba, + 0x670: 0xba, 0x671: 0xba, 0x672: 0xba, 0x673: 0xba, 0x674: 0xba, 0x675: 0xba, 0x676: 0xba, 0x677: 0xba, + 0x678: 0xba, 0x679: 0xba, 0x67a: 0xba, 0x67b: 0xba, 0x67c: 0xba, 0x67d: 0xba, 0x67e: 0xba, 0x67f: 0xba, // Block 0x1a, offset 0x680 - 0x680: 0x9d, 0x681: 0x9d, 0x682: 0x9d, 0x683: 0x9d, 0x684: 0x9d, 0x685: 0x9d, 0x686: 0x9d, 0x687: 0x9d, - 0x688: 0x9d, 0x689: 0x9d, 0x68a: 0x9d, 0x68b: 0x9d, 0x68c: 0x9d, 0x68d: 0x9d, 0x68e: 0x9d, 0x68f: 0x9d, - 0x690: 0x9d, 0x691: 0x9d, 0x692: 0x9d, 0x693: 0x9d, 0x694: 0x9d, 0x695: 0x9d, 0x696: 0x9d, 0x697: 0x9d, - 0x698: 0x9d, 0x699: 0x9d, 0x69a: 0x9d, 0x69b: 0x171, 0x69c: 0x9d, 0x69d: 0x9d, 0x69e: 0x9d, 0x69f: 0x9d, - 0x6a0: 0x9d, 0x6a1: 0x9d, 0x6a2: 0x9d, 0x6a3: 0x9d, 0x6a4: 0x9d, 0x6a5: 0x9d, 0x6a6: 0x9d, 0x6a7: 0x9d, - 0x6a8: 0x9d, 0x6a9: 0x9d, 0x6aa: 0x9d, 0x6ab: 0x9d, 0x6ac: 0x9d, 0x6ad: 0x9d, 0x6ae: 0x9d, 0x6af: 0x9d, - 0x6b0: 0x9d, 0x6b1: 0x9d, 0x6b2: 0x9d, 0x6b3: 0x9d, 0x6b4: 0x9d, 0x6b5: 0x9d, 0x6b6: 0x9d, 0x6b7: 0x9d, - 0x6b8: 0x9d, 0x6b9: 0x9d, 0x6ba: 0x9d, 0x6bb: 0x9d, 0x6bc: 0x9d, 0x6bd: 0x9d, 0x6be: 0x9d, 0x6bf: 0x9d, + 0x680: 0x9f, 0x681: 0x9f, 0x682: 0x9f, 0x683: 0x9f, 0x684: 0x9f, 0x685: 0x9f, 0x686: 0x9f, 0x687: 0x9f, + 0x688: 0x9f, 0x689: 0x9f, 0x68a: 0x9f, 0x68b: 0x9f, 0x68c: 0x9f, 0x68d: 0x9f, 0x68e: 0x9f, 0x68f: 0x9f, + 0x690: 0x9f, 0x691: 0x9f, 0x692: 0x9f, 0x693: 0x9f, 0x694: 0x9f, 0x695: 0x9f, 0x696: 0x9f, 0x697: 0x9f, + 0x698: 0x9f, 0x699: 0x9f, 0x69a: 0x9f, 0x69b: 0x17a, 0x69c: 0x9f, 0x69d: 0x9f, 0x69e: 0x9f, 0x69f: 0x9f, + 0x6a0: 0x9f, 0x6a1: 0x9f, 0x6a2: 0x9f, 0x6a3: 0x9f, 0x6a4: 0x9f, 0x6a5: 0x9f, 0x6a6: 0x9f, 0x6a7: 0x9f, + 0x6a8: 0x9f, 0x6a9: 0x9f, 0x6aa: 0x9f, 0x6ab: 0x9f, 0x6ac: 0x9f, 0x6ad: 0x9f, 0x6ae: 0x9f, 0x6af: 0x9f, + 0x6b0: 0x9f, 0x6b1: 0x9f, 0x6b2: 0x9f, 0x6b3: 0x9f, 0x6b4: 0x9f, 0x6b5: 0x9f, 0x6b6: 0x9f, 0x6b7: 0x9f, + 0x6b8: 0x9f, 0x6b9: 0x9f, 0x6ba: 0x9f, 0x6bb: 0x9f, 0x6bc: 0x9f, 0x6bd: 0x9f, 0x6be: 0x9f, 0x6bf: 0x9f, // Block 0x1b, offset 0x6c0 - 0x6c0: 0x9d, 0x6c1: 0x9d, 0x6c2: 0x9d, 0x6c3: 0x9d, 0x6c4: 0x9d, 0x6c5: 0x9d, 0x6c6: 0x9d, 0x6c7: 0x9d, - 0x6c8: 0x9d, 0x6c9: 0x9d, 0x6ca: 0x9d, 0x6cb: 0x9d, 0x6cc: 0x9d, 0x6cd: 0x9d, 0x6ce: 0x9d, 0x6cf: 0x9d, - 0x6d0: 0x9d, 0x6d1: 0x9d, 0x6d2: 0x9d, 0x6d3: 0x9d, 0x6d4: 0x9d, 0x6d5: 0x9d, 0x6d6: 0x9d, 0x6d7: 0x9d, - 0x6d8: 0x9d, 0x6d9: 0x9d, 0x6da: 0x9d, 0x6db: 0x9d, 0x6dc: 0x172, 0x6dd: 0x9d, 0x6de: 0x9d, 0x6df: 0x9d, - 0x6e0: 0x173, 0x6e1: 0x9d, 0x6e2: 0x9d, 0x6e3: 0x9d, 0x6e4: 0x9d, 0x6e5: 0x9d, 0x6e6: 0x9d, 0x6e7: 0x9d, - 0x6e8: 0x9d, 0x6e9: 0x9d, 0x6ea: 0x9d, 0x6eb: 0x9d, 0x6ec: 0x9d, 0x6ed: 0x9d, 0x6ee: 0x9d, 0x6ef: 0x9d, - 0x6f0: 0x9d, 0x6f1: 0x9d, 0x6f2: 0x9d, 0x6f3: 0x9d, 0x6f4: 0x9d, 0x6f5: 0x9d, 0x6f6: 0x9d, 0x6f7: 0x9d, - 0x6f8: 0x9d, 0x6f9: 0x9d, 0x6fa: 0x9d, 0x6fb: 0x9d, 0x6fc: 0x9d, 0x6fd: 0x9d, 0x6fe: 0x9d, 0x6ff: 0x9d, + 0x6c0: 0x9f, 0x6c1: 0x9f, 0x6c2: 0x9f, 0x6c3: 0x9f, 0x6c4: 0x9f, 0x6c5: 0x9f, 0x6c6: 0x9f, 0x6c7: 0x9f, + 0x6c8: 0x9f, 0x6c9: 0x9f, 0x6ca: 0x9f, 0x6cb: 0x9f, 0x6cc: 0x9f, 0x6cd: 0x9f, 0x6ce: 0x9f, 0x6cf: 0x9f, + 0x6d0: 0x9f, 0x6d1: 0x9f, 0x6d2: 0x9f, 0x6d3: 0x9f, 0x6d4: 0x9f, 0x6d5: 0x9f, 0x6d6: 0x9f, 0x6d7: 0x9f, + 0x6d8: 0x9f, 0x6d9: 0x9f, 0x6da: 0x9f, 0x6db: 0x9f, 0x6dc: 0x17b, 0x6dd: 0x9f, 0x6de: 0x9f, 0x6df: 0x9f, + 0x6e0: 0x17c, 0x6e1: 0x9f, 0x6e2: 0x9f, 0x6e3: 0x9f, 0x6e4: 0x9f, 0x6e5: 0x9f, 0x6e6: 0x9f, 0x6e7: 0x9f, + 0x6e8: 0x9f, 0x6e9: 0x9f, 0x6ea: 0x9f, 0x6eb: 0x9f, 0x6ec: 0x9f, 0x6ed: 0x9f, 0x6ee: 0x9f, 0x6ef: 0x9f, + 0x6f0: 0x9f, 0x6f1: 0x9f, 0x6f2: 0x9f, 0x6f3: 0x9f, 0x6f4: 0x9f, 0x6f5: 0x9f, 0x6f6: 0x9f, 0x6f7: 0x9f, + 0x6f8: 0x9f, 0x6f9: 0x9f, 0x6fa: 0x9f, 0x6fb: 0x9f, 0x6fc: 0x9f, 0x6fd: 0x9f, 0x6fe: 0x9f, 0x6ff: 0x9f, // Block 0x1c, offset 0x700 - 0x700: 0x9d, 0x701: 0x9d, 0x702: 0x9d, 0x703: 0x9d, 0x704: 0x9d, 0x705: 0x9d, 0x706: 0x9d, 0x707: 0x9d, - 0x708: 0x9d, 0x709: 0x9d, 0x70a: 0x9d, 0x70b: 0x9d, 0x70c: 0x9d, 0x70d: 0x9d, 0x70e: 0x9d, 0x70f: 0x9d, - 0x710: 0x9d, 0x711: 0x9d, 0x712: 0x9d, 0x713: 0x9d, 0x714: 0x9d, 0x715: 0x9d, 0x716: 0x9d, 0x717: 0x9d, - 0x718: 0x9d, 0x719: 0x9d, 0x71a: 0x9d, 0x71b: 0x9d, 0x71c: 0x9d, 0x71d: 0x9d, 0x71e: 0x9d, 0x71f: 0x9d, - 0x720: 0x9d, 0x721: 0x9d, 0x722: 0x9d, 0x723: 0x9d, 0x724: 0x9d, 0x725: 0x9d, 0x726: 0x9d, 0x727: 0x9d, - 0x728: 0x9d, 0x729: 0x9d, 0x72a: 0x9d, 0x72b: 0x9d, 0x72c: 0x9d, 0x72d: 0x9d, 0x72e: 0x9d, 0x72f: 0x9d, - 0x730: 0x9d, 0x731: 0x9d, 0x732: 0x9d, 0x733: 0x9d, 0x734: 0x9d, 0x735: 0x9d, 0x736: 0x9d, 0x737: 0x9d, - 0x738: 0x9d, 0x739: 0x9d, 0x73a: 0x174, 0x73b: 0xb8, 0x73c: 0xb8, 0x73d: 0xb8, 0x73e: 0xb8, 0x73f: 0xb8, + 0x700: 0x9f, 0x701: 0x9f, 0x702: 0x9f, 0x703: 0x9f, 0x704: 0x9f, 0x705: 0x9f, 0x706: 0x9f, 0x707: 0x9f, + 0x708: 0x9f, 0x709: 0x9f, 0x70a: 0x9f, 0x70b: 0x9f, 0x70c: 0x9f, 0x70d: 0x9f, 0x70e: 0x9f, 0x70f: 0x9f, + 0x710: 0x9f, 0x711: 0x9f, 0x712: 0x9f, 0x713: 0x9f, 0x714: 0x9f, 0x715: 0x9f, 0x716: 0x9f, 0x717: 0x9f, + 0x718: 0x9f, 0x719: 0x9f, 0x71a: 0x9f, 0x71b: 0x9f, 0x71c: 0x9f, 0x71d: 0x9f, 0x71e: 0x9f, 0x71f: 0x9f, + 0x720: 0x9f, 0x721: 0x9f, 0x722: 0x9f, 0x723: 0x9f, 0x724: 0x9f, 0x725: 0x9f, 0x726: 0x9f, 0x727: 0x9f, + 0x728: 0x9f, 0x729: 0x9f, 0x72a: 0x9f, 0x72b: 0x9f, 0x72c: 0x9f, 0x72d: 0x9f, 0x72e: 0x9f, 0x72f: 0x9f, + 0x730: 0x9f, 0x731: 0x9f, 0x732: 0x9f, 0x733: 0x9f, 0x734: 0x9f, 0x735: 0x9f, 0x736: 0x9f, 0x737: 0x9f, + 0x738: 0x9f, 0x739: 0x9f, 0x73a: 0x17d, 0x73b: 0x9f, 0x73c: 0x9f, 0x73d: 0x9f, 0x73e: 0x9f, 0x73f: 0x9f, // Block 0x1d, offset 0x740 - 0x740: 0xb8, 0x741: 0xb8, 0x742: 0xb8, 0x743: 0xb8, 0x744: 0xb8, 0x745: 0xb8, 0x746: 0xb8, 0x747: 0xb8, - 0x748: 0xb8, 0x749: 0xb8, 0x74a: 0xb8, 0x74b: 0xb8, 0x74c: 0xb8, 0x74d: 0xb8, 0x74e: 0xb8, 0x74f: 0xb8, - 0x750: 0xb8, 0x751: 0xb8, 0x752: 0xb8, 0x753: 0xb8, 0x754: 0xb8, 0x755: 0xb8, 0x756: 0xb8, 0x757: 0xb8, - 0x758: 0xb8, 0x759: 0xb8, 0x75a: 0xb8, 0x75b: 0xb8, 0x75c: 0xb8, 0x75d: 0xb8, 0x75e: 0xb8, 0x75f: 0xb8, - 0x760: 0x74, 0x761: 0x75, 0x762: 0x76, 0x763: 0x175, 0x764: 0x77, 0x765: 0x78, 0x766: 0x176, 0x767: 0x79, - 0x768: 0x7a, 0x769: 0xb8, 0x76a: 0xb8, 0x76b: 0xb8, 0x76c: 0xb8, 0x76d: 0xb8, 0x76e: 0xb8, 0x76f: 0xb8, - 0x770: 0xb8, 0x771: 0xb8, 0x772: 0xb8, 0x773: 0xb8, 0x774: 0xb8, 0x775: 0xb8, 0x776: 0xb8, 0x777: 0xb8, - 0x778: 0xb8, 0x779: 0xb8, 0x77a: 0xb8, 0x77b: 0xb8, 0x77c: 0xb8, 0x77d: 0xb8, 0x77e: 0xb8, 0x77f: 0xb8, + 0x740: 0x9f, 0x741: 0x9f, 0x742: 0x9f, 0x743: 0x9f, 0x744: 0x9f, 0x745: 0x9f, 0x746: 0x9f, 0x747: 0x9f, + 0x748: 0x9f, 0x749: 0x9f, 0x74a: 0x9f, 0x74b: 0x9f, 0x74c: 0x9f, 0x74d: 0x9f, 0x74e: 0x9f, 0x74f: 0x9f, + 0x750: 0x9f, 0x751: 0x9f, 0x752: 0x9f, 0x753: 0x9f, 0x754: 0x9f, 0x755: 0x9f, 0x756: 0x9f, 0x757: 0x9f, + 0x758: 0x9f, 0x759: 0x9f, 0x75a: 0x9f, 0x75b: 0x9f, 0x75c: 0x9f, 0x75d: 0x9f, 0x75e: 0x9f, 0x75f: 0x9f, + 0x760: 0x9f, 0x761: 0x9f, 0x762: 0x9f, 0x763: 0x9f, 0x764: 0x9f, 0x765: 0x9f, 0x766: 0x9f, 0x767: 0x9f, + 0x768: 0x9f, 0x769: 0x9f, 0x76a: 0x9f, 0x76b: 0x9f, 0x76c: 0x9f, 0x76d: 0x9f, 0x76e: 0x9f, 0x76f: 0x17e, + 0x770: 0xba, 0x771: 0xba, 0x772: 0xba, 0x773: 0xba, 0x774: 0xba, 0x775: 0xba, 0x776: 0xba, 0x777: 0xba, + 0x778: 0xba, 0x779: 0xba, 0x77a: 0xba, 0x77b: 0xba, 0x77c: 0xba, 0x77d: 0xba, 0x77e: 0xba, 0x77f: 0xba, // Block 0x1e, offset 0x780 - 0x790: 0x0d, 0x791: 0x0e, 0x792: 0x0f, 0x793: 0x10, 0x794: 0x11, 0x795: 0x0b, 0x796: 0x12, 0x797: 0x07, - 0x798: 0x13, 0x799: 0x0b, 0x79a: 0x0b, 0x79b: 0x14, 0x79c: 0x0b, 0x79d: 0x15, 0x79e: 0x16, 0x79f: 0x17, - 0x7a0: 0x07, 0x7a1: 0x07, 0x7a2: 0x07, 0x7a3: 0x07, 0x7a4: 0x07, 0x7a5: 0x07, 0x7a6: 0x07, 0x7a7: 0x07, - 0x7a8: 0x07, 0x7a9: 0x07, 0x7aa: 0x18, 0x7ab: 0x19, 0x7ac: 0x1a, 0x7ad: 0x0b, 0x7ae: 0x0b, 0x7af: 0x1b, - 0x7b0: 0x0b, 0x7b1: 0x0b, 0x7b2: 0x0b, 0x7b3: 0x0b, 0x7b4: 0x0b, 0x7b5: 0x0b, 0x7b6: 0x0b, 0x7b7: 0x0b, - 0x7b8: 0x0b, 0x7b9: 0x0b, 0x7ba: 0x0b, 0x7bb: 0x0b, 0x7bc: 0x0b, 0x7bd: 0x0b, 0x7be: 0x0b, 0x7bf: 0x0b, + 0x780: 0xba, 0x781: 0xba, 0x782: 0xba, 0x783: 0xba, 0x784: 0xba, 0x785: 0xba, 0x786: 0xba, 0x787: 0xba, + 0x788: 0xba, 0x789: 0xba, 0x78a: 0xba, 0x78b: 0xba, 0x78c: 0xba, 0x78d: 0xba, 0x78e: 0xba, 0x78f: 0xba, + 0x790: 0xba, 0x791: 0xba, 0x792: 0xba, 0x793: 0xba, 0x794: 0xba, 0x795: 0xba, 0x796: 0xba, 0x797: 0xba, + 0x798: 0xba, 0x799: 0xba, 0x79a: 0xba, 0x79b: 0xba, 0x79c: 0xba, 0x79d: 0xba, 0x79e: 0xba, 0x79f: 0xba, + 0x7a0: 0x76, 0x7a1: 0x77, 0x7a2: 0x78, 0x7a3: 0x17f, 0x7a4: 0x79, 0x7a5: 0x7a, 0x7a6: 0x180, 0x7a7: 0x7b, + 0x7a8: 0x7c, 0x7a9: 0xba, 0x7aa: 0xba, 0x7ab: 0xba, 0x7ac: 0xba, 0x7ad: 0xba, 0x7ae: 0xba, 0x7af: 0xba, + 0x7b0: 0xba, 0x7b1: 0xba, 0x7b2: 0xba, 0x7b3: 0xba, 0x7b4: 0xba, 0x7b5: 0xba, 0x7b6: 0xba, 0x7b7: 0xba, + 0x7b8: 0xba, 0x7b9: 0xba, 0x7ba: 0xba, 0x7bb: 0xba, 0x7bc: 0xba, 0x7bd: 0xba, 0x7be: 0xba, 0x7bf: 0xba, // Block 0x1f, offset 0x7c0 - 0x7c0: 0x0b, 0x7c1: 0x0b, 0x7c2: 0x0b, 0x7c3: 0x0b, 0x7c4: 0x0b, 0x7c5: 0x0b, 0x7c6: 0x0b, 0x7c7: 0x0b, - 0x7c8: 0x0b, 0x7c9: 0x0b, 0x7ca: 0x0b, 0x7cb: 0x0b, 0x7cc: 0x0b, 0x7cd: 0x0b, 0x7ce: 0x0b, 0x7cf: 0x0b, - 0x7d0: 0x0b, 0x7d1: 0x0b, 0x7d2: 0x0b, 0x7d3: 0x0b, 0x7d4: 0x0b, 0x7d5: 0x0b, 0x7d6: 0x0b, 0x7d7: 0x0b, - 0x7d8: 0x0b, 0x7d9: 0x0b, 0x7da: 0x0b, 0x7db: 0x0b, 0x7dc: 0x0b, 0x7dd: 0x0b, 0x7de: 0x0b, 0x7df: 0x0b, - 0x7e0: 0x0b, 0x7e1: 0x0b, 0x7e2: 0x0b, 0x7e3: 0x0b, 0x7e4: 0x0b, 0x7e5: 0x0b, 0x7e6: 0x0b, 0x7e7: 0x0b, - 0x7e8: 0x0b, 0x7e9: 0x0b, 0x7ea: 0x0b, 0x7eb: 0x0b, 0x7ec: 0x0b, 0x7ed: 0x0b, 0x7ee: 0x0b, 0x7ef: 0x0b, + 0x7d0: 0x0d, 0x7d1: 0x0e, 0x7d2: 0x0f, 0x7d3: 0x10, 0x7d4: 0x11, 0x7d5: 0x0b, 0x7d6: 0x12, 0x7d7: 0x07, + 0x7d8: 0x13, 0x7d9: 0x0b, 0x7da: 0x0b, 0x7db: 0x14, 0x7dc: 0x0b, 0x7dd: 0x15, 0x7de: 0x16, 0x7df: 0x17, + 0x7e0: 0x07, 0x7e1: 0x07, 0x7e2: 0x07, 0x7e3: 0x07, 0x7e4: 0x07, 0x7e5: 0x07, 0x7e6: 0x07, 0x7e7: 0x07, + 0x7e8: 0x07, 0x7e9: 0x07, 0x7ea: 0x18, 0x7eb: 0x19, 0x7ec: 0x1a, 0x7ed: 0x07, 0x7ee: 0x1b, 0x7ef: 0x1c, 0x7f0: 0x0b, 0x7f1: 0x0b, 0x7f2: 0x0b, 0x7f3: 0x0b, 0x7f4: 0x0b, 0x7f5: 0x0b, 0x7f6: 0x0b, 0x7f7: 0x0b, 0x7f8: 0x0b, 0x7f9: 0x0b, 0x7fa: 0x0b, 0x7fb: 0x0b, 0x7fc: 0x0b, 0x7fd: 0x0b, 0x7fe: 0x0b, 0x7ff: 0x0b, // Block 0x20, offset 0x800 - 0x800: 0x177, 0x801: 0x178, 0x802: 0xb8, 0x803: 0xb8, 0x804: 0x179, 0x805: 0x179, 0x806: 0x179, 0x807: 0x17a, - 0x808: 0xb8, 0x809: 0xb8, 0x80a: 0xb8, 0x80b: 0xb8, 0x80c: 0xb8, 0x80d: 0xb8, 0x80e: 0xb8, 0x80f: 0xb8, - 0x810: 0xb8, 0x811: 0xb8, 0x812: 0xb8, 0x813: 0xb8, 0x814: 0xb8, 0x815: 0xb8, 0x816: 0xb8, 0x817: 0xb8, - 0x818: 0xb8, 0x819: 0xb8, 0x81a: 0xb8, 0x81b: 0xb8, 0x81c: 0xb8, 0x81d: 0xb8, 0x81e: 0xb8, 0x81f: 0xb8, - 0x820: 0xb8, 0x821: 0xb8, 0x822: 0xb8, 0x823: 0xb8, 0x824: 0xb8, 0x825: 0xb8, 0x826: 0xb8, 0x827: 0xb8, - 0x828: 0xb8, 0x829: 0xb8, 0x82a: 0xb8, 0x82b: 0xb8, 0x82c: 0xb8, 0x82d: 0xb8, 0x82e: 0xb8, 0x82f: 0xb8, - 0x830: 0xb8, 0x831: 0xb8, 0x832: 0xb8, 0x833: 0xb8, 0x834: 0xb8, 0x835: 0xb8, 0x836: 0xb8, 0x837: 0xb8, - 0x838: 0xb8, 0x839: 0xb8, 0x83a: 0xb8, 0x83b: 0xb8, 0x83c: 0xb8, 0x83d: 0xb8, 0x83e: 0xb8, 0x83f: 0xb8, + 0x800: 0x0b, 0x801: 0x0b, 0x802: 0x0b, 0x803: 0x0b, 0x804: 0x0b, 0x805: 0x0b, 0x806: 0x0b, 0x807: 0x0b, + 0x808: 0x0b, 0x809: 0x0b, 0x80a: 0x0b, 0x80b: 0x0b, 0x80c: 0x0b, 0x80d: 0x0b, 0x80e: 0x0b, 0x80f: 0x0b, + 0x810: 0x0b, 0x811: 0x0b, 0x812: 0x0b, 0x813: 0x0b, 0x814: 0x0b, 0x815: 0x0b, 0x816: 0x0b, 0x817: 0x0b, + 0x818: 0x0b, 0x819: 0x0b, 0x81a: 0x0b, 0x81b: 0x0b, 0x81c: 0x0b, 0x81d: 0x0b, 0x81e: 0x0b, 0x81f: 0x0b, + 0x820: 0x0b, 0x821: 0x0b, 0x822: 0x0b, 0x823: 0x0b, 0x824: 0x0b, 0x825: 0x0b, 0x826: 0x0b, 0x827: 0x0b, + 0x828: 0x0b, 0x829: 0x0b, 0x82a: 0x0b, 0x82b: 0x0b, 0x82c: 0x0b, 0x82d: 0x0b, 0x82e: 0x0b, 0x82f: 0x0b, + 0x830: 0x0b, 0x831: 0x0b, 0x832: 0x0b, 0x833: 0x0b, 0x834: 0x0b, 0x835: 0x0b, 0x836: 0x0b, 0x837: 0x0b, + 0x838: 0x0b, 0x839: 0x0b, 0x83a: 0x0b, 0x83b: 0x0b, 0x83c: 0x0b, 0x83d: 0x0b, 0x83e: 0x0b, 0x83f: 0x0b, // Block 0x21, offset 0x840 - 0x840: 0x0b, 0x841: 0x0b, 0x842: 0x0b, 0x843: 0x0b, 0x844: 0x0b, 0x845: 0x0b, 0x846: 0x0b, 0x847: 0x0b, - 0x848: 0x0b, 0x849: 0x0b, 0x84a: 0x0b, 0x84b: 0x0b, 0x84c: 0x0b, 0x84d: 0x0b, 0x84e: 0x0b, 0x84f: 0x0b, - 0x850: 0x0b, 0x851: 0x0b, 0x852: 0x0b, 0x853: 0x0b, 0x854: 0x0b, 0x855: 0x0b, 0x856: 0x0b, 0x857: 0x0b, - 0x858: 0x0b, 0x859: 0x0b, 0x85a: 0x0b, 0x85b: 0x0b, 0x85c: 0x0b, 0x85d: 0x0b, 0x85e: 0x0b, 0x85f: 0x0b, - 0x860: 0x1e, 0x861: 0x0b, 0x862: 0x0b, 0x863: 0x0b, 0x864: 0x0b, 0x865: 0x0b, 0x866: 0x0b, 0x867: 0x0b, - 0x868: 0x0b, 0x869: 0x0b, 0x86a: 0x0b, 0x86b: 0x0b, 0x86c: 0x0b, 0x86d: 0x0b, 0x86e: 0x0b, 0x86f: 0x0b, - 0x870: 0x0b, 0x871: 0x0b, 0x872: 0x0b, 0x873: 0x0b, 0x874: 0x0b, 0x875: 0x0b, 0x876: 0x0b, 0x877: 0x0b, - 0x878: 0x0b, 0x879: 0x0b, 0x87a: 0x0b, 0x87b: 0x0b, 0x87c: 0x0b, 0x87d: 0x0b, 0x87e: 0x0b, 0x87f: 0x0b, + 0x840: 0x181, 0x841: 0x182, 0x842: 0xba, 0x843: 0xba, 0x844: 0x183, 0x845: 0x183, 0x846: 0x183, 0x847: 0x184, + 0x848: 0xba, 0x849: 0xba, 0x84a: 0xba, 0x84b: 0xba, 0x84c: 0xba, 0x84d: 0xba, 0x84e: 0xba, 0x84f: 0xba, + 0x850: 0xba, 0x851: 0xba, 0x852: 0xba, 0x853: 0xba, 0x854: 0xba, 0x855: 0xba, 0x856: 0xba, 0x857: 0xba, + 0x858: 0xba, 0x859: 0xba, 0x85a: 0xba, 0x85b: 0xba, 0x85c: 0xba, 0x85d: 0xba, 0x85e: 0xba, 0x85f: 0xba, + 0x860: 0xba, 0x861: 0xba, 0x862: 0xba, 0x863: 0xba, 0x864: 0xba, 0x865: 0xba, 0x866: 0xba, 0x867: 0xba, + 0x868: 0xba, 0x869: 0xba, 0x86a: 0xba, 0x86b: 0xba, 0x86c: 0xba, 0x86d: 0xba, 0x86e: 0xba, 0x86f: 0xba, + 0x870: 0xba, 0x871: 0xba, 0x872: 0xba, 0x873: 0xba, 0x874: 0xba, 0x875: 0xba, 0x876: 0xba, 0x877: 0xba, + 0x878: 0xba, 0x879: 0xba, 0x87a: 0xba, 0x87b: 0xba, 0x87c: 0xba, 0x87d: 0xba, 0x87e: 0xba, 0x87f: 0xba, // Block 0x22, offset 0x880 0x880: 0x0b, 0x881: 0x0b, 0x882: 0x0b, 0x883: 0x0b, 0x884: 0x0b, 0x885: 0x0b, 0x886: 0x0b, 0x887: 0x0b, 0x888: 0x0b, 0x889: 0x0b, 0x88a: 0x0b, 0x88b: 0x0b, 0x88c: 0x0b, 0x88d: 0x0b, 0x88e: 0x0b, 0x88f: 0x0b, + 0x890: 0x0b, 0x891: 0x0b, 0x892: 0x0b, 0x893: 0x0b, 0x894: 0x0b, 0x895: 0x0b, 0x896: 0x0b, 0x897: 0x0b, + 0x898: 0x0b, 0x899: 0x0b, 0x89a: 0x0b, 0x89b: 0x0b, 0x89c: 0x0b, 0x89d: 0x0b, 0x89e: 0x0b, 0x89f: 0x0b, + 0x8a0: 0x1f, 0x8a1: 0x0b, 0x8a2: 0x0b, 0x8a3: 0x0b, 0x8a4: 0x0b, 0x8a5: 0x0b, 0x8a6: 0x0b, 0x8a7: 0x0b, + 0x8a8: 0x0b, 0x8a9: 0x0b, 0x8aa: 0x0b, 0x8ab: 0x0b, 0x8ac: 0x0b, 0x8ad: 0x0b, 0x8ae: 0x0b, 0x8af: 0x0b, + 0x8b0: 0x0b, 0x8b1: 0x0b, 0x8b2: 0x0b, 0x8b3: 0x0b, 0x8b4: 0x0b, 0x8b5: 0x0b, 0x8b6: 0x0b, 0x8b7: 0x0b, + 0x8b8: 0x0b, 0x8b9: 0x0b, 0x8ba: 0x0b, 0x8bb: 0x0b, 0x8bc: 0x0b, 0x8bd: 0x0b, 0x8be: 0x0b, 0x8bf: 0x0b, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x0b, 0x8c1: 0x0b, 0x8c2: 0x0b, 0x8c3: 0x0b, 0x8c4: 0x0b, 0x8c5: 0x0b, 0x8c6: 0x0b, 0x8c7: 0x0b, + 0x8c8: 0x0b, 0x8c9: 0x0b, 0x8ca: 0x0b, 0x8cb: 0x0b, 0x8cc: 0x0b, 0x8cd: 0x0b, 0x8ce: 0x0b, 0x8cf: 0x0b, } -// idnaSparseOffset: 256 entries, 512 bytes -var idnaSparseOffset = []uint16{0x0, 0x8, 0x19, 0x25, 0x27, 0x2c, 0x34, 0x3f, 0x4b, 0x5c, 0x60, 0x6f, 0x74, 0x7b, 0x87, 0x95, 0xa3, 0xa8, 0xb1, 0xc1, 0xcf, 0xdc, 0xe8, 0xf9, 0x103, 0x10a, 0x117, 0x128, 0x12f, 0x13a, 0x149, 0x157, 0x161, 0x163, 0x167, 0x169, 0x175, 0x180, 0x188, 0x18e, 0x194, 0x199, 0x19e, 0x1a1, 0x1a5, 0x1ab, 0x1b0, 0x1bc, 0x1c6, 0x1cc, 0x1dd, 0x1e7, 0x1ea, 0x1f2, 0x1f5, 0x202, 0x20a, 0x20e, 0x215, 0x21d, 0x22d, 0x239, 0x23b, 0x245, 0x251, 0x25d, 0x269, 0x271, 0x276, 0x280, 0x291, 0x295, 0x2a0, 0x2a4, 0x2ad, 0x2b5, 0x2bb, 0x2c0, 0x2c3, 0x2c6, 0x2ca, 0x2d0, 0x2d4, 0x2d8, 0x2de, 0x2e5, 0x2eb, 0x2f3, 0x2fa, 0x305, 0x30f, 0x313, 0x316, 0x31c, 0x320, 0x322, 0x325, 0x327, 0x32a, 0x334, 0x337, 0x346, 0x34a, 0x34f, 0x352, 0x356, 0x35b, 0x360, 0x366, 0x36c, 0x37b, 0x381, 0x385, 0x394, 0x399, 0x3a1, 0x3ab, 0x3b6, 0x3be, 0x3cf, 0x3d8, 0x3e8, 0x3f5, 0x3ff, 0x404, 0x411, 0x415, 0x41a, 0x41c, 0x420, 0x422, 0x426, 0x42f, 0x435, 0x439, 0x449, 0x453, 0x458, 0x45b, 0x461, 0x468, 0x46d, 0x471, 0x477, 0x47c, 0x485, 0x48a, 0x490, 0x497, 0x49e, 0x4a5, 0x4a9, 0x4ae, 0x4b1, 0x4b6, 0x4c2, 0x4c8, 0x4cd, 0x4d4, 0x4dc, 0x4e1, 0x4e5, 0x4f5, 0x4fc, 0x500, 0x504, 0x50b, 0x50e, 0x511, 0x515, 0x519, 0x51f, 0x528, 0x534, 0x53b, 0x544, 0x54c, 0x553, 0x561, 0x56e, 0x57b, 0x584, 0x588, 0x596, 0x59e, 0x5a9, 0x5b2, 0x5b8, 0x5c0, 0x5c9, 0x5d3, 0x5d6, 0x5e2, 0x5e5, 0x5ea, 0x5ed, 0x5f7, 0x600, 0x60c, 0x60f, 0x614, 0x617, 0x61a, 0x61d, 0x624, 0x62b, 0x62f, 0x63a, 0x63d, 0x643, 0x648, 0x64c, 0x64f, 0x652, 0x655, 0x65a, 0x664, 0x667, 0x66b, 0x67a, 0x686, 0x68a, 0x68f, 0x694, 0x698, 0x69d, 0x6a6, 0x6b1, 0x6b7, 0x6bf, 0x6c3, 0x6c7, 0x6cd, 0x6d3, 0x6d8, 0x6db, 0x6e9, 0x6f0, 0x6f3, 0x6f6, 0x6fa, 0x700, 0x705, 0x70f, 0x714, 0x717, 0x71a, 0x71d, 0x720, 0x724, 0x727, 0x737, 0x748, 0x74d, 0x74f, 0x751} +// idnaSparseOffset: 264 entries, 528 bytes +var idnaSparseOffset = []uint16{0x0, 0x8, 0x19, 0x25, 0x27, 0x2c, 0x34, 0x3f, 0x4b, 0x4f, 0x5e, 0x63, 0x6b, 0x77, 0x85, 0x8a, 0x93, 0xa3, 0xb1, 0xbd, 0xc9, 0xda, 0xe4, 0xeb, 0xf8, 0x109, 0x110, 0x11b, 0x12a, 0x138, 0x142, 0x144, 0x149, 0x14c, 0x14f, 0x151, 0x15d, 0x168, 0x170, 0x176, 0x17c, 0x181, 0x186, 0x189, 0x18d, 0x193, 0x198, 0x1a4, 0x1ae, 0x1b4, 0x1c5, 0x1cf, 0x1d2, 0x1da, 0x1dd, 0x1ea, 0x1f2, 0x1f6, 0x1fd, 0x205, 0x215, 0x221, 0x223, 0x22d, 0x239, 0x245, 0x251, 0x259, 0x25e, 0x268, 0x279, 0x27d, 0x288, 0x28c, 0x295, 0x29d, 0x2a3, 0x2a8, 0x2ab, 0x2af, 0x2b5, 0x2b9, 0x2bd, 0x2c3, 0x2ca, 0x2d0, 0x2d8, 0x2df, 0x2ea, 0x2f4, 0x2f8, 0x2fb, 0x301, 0x305, 0x307, 0x30a, 0x30c, 0x30f, 0x319, 0x31c, 0x32b, 0x32f, 0x334, 0x337, 0x33b, 0x340, 0x345, 0x34b, 0x351, 0x360, 0x366, 0x36a, 0x379, 0x37e, 0x386, 0x390, 0x39b, 0x3a3, 0x3b4, 0x3bd, 0x3cd, 0x3da, 0x3e4, 0x3e9, 0x3f6, 0x3fa, 0x3ff, 0x401, 0x405, 0x407, 0x40b, 0x414, 0x41a, 0x41e, 0x42e, 0x438, 0x43d, 0x440, 0x446, 0x44d, 0x452, 0x456, 0x45c, 0x461, 0x46a, 0x46f, 0x475, 0x47c, 0x483, 0x48a, 0x48e, 0x493, 0x496, 0x49b, 0x4a7, 0x4ad, 0x4b2, 0x4b9, 0x4c1, 0x4c6, 0x4ca, 0x4da, 0x4e1, 0x4e5, 0x4e9, 0x4f0, 0x4f2, 0x4f5, 0x4f8, 0x4fc, 0x500, 0x506, 0x50f, 0x51b, 0x522, 0x52b, 0x533, 0x53a, 0x548, 0x555, 0x562, 0x56b, 0x56f, 0x57d, 0x585, 0x590, 0x599, 0x59f, 0x5a7, 0x5b0, 0x5ba, 0x5bd, 0x5c9, 0x5cc, 0x5d1, 0x5de, 0x5e7, 0x5f3, 0x5f6, 0x600, 0x609, 0x615, 0x622, 0x62a, 0x62d, 0x632, 0x635, 0x638, 0x63b, 0x642, 0x649, 0x64d, 0x658, 0x65b, 0x661, 0x666, 0x66a, 0x66d, 0x670, 0x673, 0x676, 0x679, 0x67e, 0x688, 0x68b, 0x68f, 0x69e, 0x6aa, 0x6ae, 0x6b3, 0x6b8, 0x6bc, 0x6c1, 0x6ca, 0x6d5, 0x6db, 0x6e3, 0x6e7, 0x6eb, 0x6f1, 0x6f7, 0x6fc, 0x6ff, 0x70f, 0x716, 0x719, 0x71c, 0x720, 0x726, 0x72b, 0x730, 0x735, 0x738, 0x73d, 0x740, 0x743, 0x747, 0x74b, 0x74e, 0x75e, 0x76f, 0x774, 0x776, 0x778} -// idnaSparseValues: 1876 entries, 7504 bytes -var idnaSparseValues = [1876]valueRange{ +// idnaSparseValues: 1915 entries, 7660 bytes +var idnaSparseValues = [1915]valueRange{ // Block 0x0, offset 0x0 {value: 0x0000, lo: 0x07}, {value: 0xe105, lo: 0x80, hi: 0x96}, @@ -2382,7 +2415,7 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0008, lo: 0xb9, hi: 0xbf}, // Block 0x3, offset 0x25 {value: 0x0000, lo: 0x01}, - {value: 0x1308, lo: 0x80, hi: 0xbf}, + {value: 0x3308, lo: 0x80, hi: 0xbf}, // Block 0x4, offset 0x27 {value: 0x0000, lo: 0x04}, {value: 0x03f5, lo: 0x80, hi: 0x8f}, @@ -2407,155 +2440,123 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0040, lo: 0x8b, hi: 0x8c}, {value: 0x0018, lo: 0x8d, hi: 0x8f}, {value: 0x0040, lo: 0x90, hi: 0x90}, - {value: 0x1308, lo: 0x91, hi: 0xbd}, - {value: 0x0018, lo: 0xbe, hi: 0xbe}, - {value: 0x1308, lo: 0xbf, hi: 0xbf}, + {value: 0x3308, lo: 0x91, hi: 0xbd}, + {value: 0x0818, lo: 0xbe, hi: 0xbe}, + {value: 0x3308, lo: 0xbf, hi: 0xbf}, // Block 0x7, offset 0x3f {value: 0x0000, lo: 0x0b}, - {value: 0x0018, lo: 0x80, hi: 0x80}, - {value: 0x1308, lo: 0x81, hi: 0x82}, - {value: 0x0018, lo: 0x83, hi: 0x83}, - {value: 0x1308, lo: 0x84, hi: 0x85}, - {value: 0x0018, lo: 0x86, hi: 0x86}, - {value: 0x1308, lo: 0x87, hi: 0x87}, + {value: 0x0818, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x82}, + {value: 0x0818, lo: 0x83, hi: 0x83}, + {value: 0x3308, lo: 0x84, hi: 0x85}, + {value: 0x0818, lo: 0x86, hi: 0x86}, + {value: 0x3308, lo: 0x87, hi: 0x87}, {value: 0x0040, lo: 0x88, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0xaa}, + {value: 0x0808, lo: 0x90, hi: 0xaa}, {value: 0x0040, lo: 0xab, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xb4}, + {value: 0x0808, lo: 0xb0, hi: 0xb4}, {value: 0x0040, lo: 0xb5, hi: 0xbf}, // Block 0x8, offset 0x4b - {value: 0x0000, lo: 0x10}, - {value: 0x0018, lo: 0x80, hi: 0x80}, - {value: 0x0208, lo: 0x81, hi: 0x87}, - {value: 0x0408, lo: 0x88, hi: 0x88}, - {value: 0x0208, lo: 0x89, hi: 0x8a}, - {value: 0x1308, lo: 0x8b, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xa9}, - {value: 0x0018, lo: 0xaa, hi: 0xad}, - {value: 0x0208, lo: 0xae, hi: 0xaf}, - {value: 0x1308, lo: 0xb0, hi: 0xb0}, - {value: 0x0408, lo: 0xb1, hi: 0xb3}, - {value: 0x0008, lo: 0xb4, hi: 0xb4}, - {value: 0x0429, lo: 0xb5, hi: 0xb5}, - {value: 0x0451, lo: 0xb6, hi: 0xb6}, - {value: 0x0479, lo: 0xb7, hi: 0xb7}, - {value: 0x04a1, lo: 0xb8, hi: 0xb8}, - {value: 0x0208, lo: 0xb9, hi: 0xbf}, - // Block 0x9, offset 0x5c {value: 0x0000, lo: 0x03}, - {value: 0x0208, lo: 0x80, hi: 0x87}, - {value: 0x0408, lo: 0x88, hi: 0x99}, - {value: 0x0208, lo: 0x9a, hi: 0xbf}, - // Block 0xa, offset 0x60 + {value: 0x0a08, lo: 0x80, hi: 0x87}, + {value: 0x0c08, lo: 0x88, hi: 0x99}, + {value: 0x0a08, lo: 0x9a, hi: 0xbf}, + // Block 0x9, offset 0x4f {value: 0x0000, lo: 0x0e}, - {value: 0x1308, lo: 0x80, hi: 0x8a}, + {value: 0x3308, lo: 0x80, hi: 0x8a}, {value: 0x0040, lo: 0x8b, hi: 0x8c}, - {value: 0x0408, lo: 0x8d, hi: 0x8d}, - {value: 0x0208, lo: 0x8e, hi: 0x98}, - {value: 0x0408, lo: 0x99, hi: 0x9b}, - {value: 0x0208, lo: 0x9c, hi: 0xaa}, - {value: 0x0408, lo: 0xab, hi: 0xac}, - {value: 0x0208, lo: 0xad, hi: 0xb0}, - {value: 0x0408, lo: 0xb1, hi: 0xb1}, - {value: 0x0208, lo: 0xb2, hi: 0xb2}, - {value: 0x0408, lo: 0xb3, hi: 0xb4}, - {value: 0x0208, lo: 0xb5, hi: 0xb7}, - {value: 0x0408, lo: 0xb8, hi: 0xb9}, - {value: 0x0208, lo: 0xba, hi: 0xbf}, - // Block 0xb, offset 0x6f + {value: 0x0c08, lo: 0x8d, hi: 0x8d}, + {value: 0x0a08, lo: 0x8e, hi: 0x98}, + {value: 0x0c08, lo: 0x99, hi: 0x9b}, + {value: 0x0a08, lo: 0x9c, hi: 0xaa}, + {value: 0x0c08, lo: 0xab, hi: 0xac}, + {value: 0x0a08, lo: 0xad, hi: 0xb0}, + {value: 0x0c08, lo: 0xb1, hi: 0xb1}, + {value: 0x0a08, lo: 0xb2, hi: 0xb2}, + {value: 0x0c08, lo: 0xb3, hi: 0xb4}, + {value: 0x0a08, lo: 0xb5, hi: 0xb7}, + {value: 0x0c08, lo: 0xb8, hi: 0xb9}, + {value: 0x0a08, lo: 0xba, hi: 0xbf}, + // Block 0xa, offset 0x5e {value: 0x0000, lo: 0x04}, - {value: 0x0008, lo: 0x80, hi: 0xa5}, - {value: 0x1308, lo: 0xa6, hi: 0xb0}, - {value: 0x0008, lo: 0xb1, hi: 0xb1}, + {value: 0x0808, lo: 0x80, hi: 0xa5}, + {value: 0x3308, lo: 0xa6, hi: 0xb0}, + {value: 0x0808, lo: 0xb1, hi: 0xb1}, {value: 0x0040, lo: 0xb2, hi: 0xbf}, - // Block 0xc, offset 0x74 - {value: 0x0000, lo: 0x06}, - {value: 0x0008, lo: 0x80, hi: 0x89}, - {value: 0x0208, lo: 0x8a, hi: 0xaa}, - {value: 0x1308, lo: 0xab, hi: 0xb3}, - {value: 0x0008, lo: 0xb4, hi: 0xb5}, - {value: 0x0018, lo: 0xb6, hi: 0xba}, + // Block 0xb, offset 0x63 + {value: 0x0000, lo: 0x07}, + {value: 0x0808, lo: 0x80, hi: 0x89}, + {value: 0x0a08, lo: 0x8a, hi: 0xaa}, + {value: 0x3308, lo: 0xab, hi: 0xb3}, + {value: 0x0808, lo: 0xb4, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xb9}, + {value: 0x0818, lo: 0xba, hi: 0xba}, {value: 0x0040, lo: 0xbb, hi: 0xbf}, - // Block 0xd, offset 0x7b + // Block 0xc, offset 0x6b {value: 0x0000, lo: 0x0b}, - {value: 0x0008, lo: 0x80, hi: 0x95}, - {value: 0x1308, lo: 0x96, hi: 0x99}, - {value: 0x0008, lo: 0x9a, hi: 0x9a}, - {value: 0x1308, lo: 0x9b, hi: 0xa3}, - {value: 0x0008, lo: 0xa4, hi: 0xa4}, - {value: 0x1308, lo: 0xa5, hi: 0xa7}, - {value: 0x0008, lo: 0xa8, hi: 0xa8}, - {value: 0x1308, lo: 0xa9, hi: 0xad}, + {value: 0x0808, lo: 0x80, hi: 0x95}, + {value: 0x3308, lo: 0x96, hi: 0x99}, + {value: 0x0808, lo: 0x9a, hi: 0x9a}, + {value: 0x3308, lo: 0x9b, hi: 0xa3}, + {value: 0x0808, lo: 0xa4, hi: 0xa4}, + {value: 0x3308, lo: 0xa5, hi: 0xa7}, + {value: 0x0808, lo: 0xa8, hi: 0xa8}, + {value: 0x3308, lo: 0xa9, hi: 0xad}, {value: 0x0040, lo: 0xae, hi: 0xaf}, - {value: 0x0018, lo: 0xb0, hi: 0xbe}, + {value: 0x0818, lo: 0xb0, hi: 0xbe}, {value: 0x0040, lo: 0xbf, hi: 0xbf}, - // Block 0xe, offset 0x87 - {value: 0x0000, lo: 0x0d}, - {value: 0x0408, lo: 0x80, hi: 0x80}, - {value: 0x0208, lo: 0x81, hi: 0x85}, - {value: 0x0408, lo: 0x86, hi: 0x87}, - {value: 0x0208, lo: 0x88, hi: 0x88}, - {value: 0x0408, lo: 0x89, hi: 0x89}, - {value: 0x0208, lo: 0x8a, hi: 0x93}, - {value: 0x0408, lo: 0x94, hi: 0x94}, - {value: 0x0208, lo: 0x95, hi: 0x95}, - {value: 0x0008, lo: 0x96, hi: 0x98}, - {value: 0x1308, lo: 0x99, hi: 0x9b}, - {value: 0x0040, lo: 0x9c, hi: 0x9d}, - {value: 0x0018, lo: 0x9e, hi: 0x9e}, - {value: 0x0040, lo: 0x9f, hi: 0xbf}, - // Block 0xf, offset 0x95 + // Block 0xd, offset 0x77 {value: 0x0000, lo: 0x0d}, {value: 0x0040, lo: 0x80, hi: 0x9f}, - {value: 0x0208, lo: 0xa0, hi: 0xa9}, - {value: 0x0408, lo: 0xaa, hi: 0xac}, - {value: 0x0008, lo: 0xad, hi: 0xad}, - {value: 0x0408, lo: 0xae, hi: 0xae}, - {value: 0x0208, lo: 0xaf, hi: 0xb0}, - {value: 0x0408, lo: 0xb1, hi: 0xb2}, - {value: 0x0208, lo: 0xb3, hi: 0xb4}, + {value: 0x0a08, lo: 0xa0, hi: 0xa9}, + {value: 0x0c08, lo: 0xaa, hi: 0xac}, + {value: 0x0808, lo: 0xad, hi: 0xad}, + {value: 0x0c08, lo: 0xae, hi: 0xae}, + {value: 0x0a08, lo: 0xaf, hi: 0xb0}, + {value: 0x0c08, lo: 0xb1, hi: 0xb2}, + {value: 0x0a08, lo: 0xb3, hi: 0xb4}, {value: 0x0040, lo: 0xb5, hi: 0xb5}, - {value: 0x0208, lo: 0xb6, hi: 0xb8}, - {value: 0x0408, lo: 0xb9, hi: 0xb9}, - {value: 0x0208, lo: 0xba, hi: 0xbd}, + {value: 0x0a08, lo: 0xb6, hi: 0xb8}, + {value: 0x0c08, lo: 0xb9, hi: 0xb9}, + {value: 0x0a08, lo: 0xba, hi: 0xbd}, {value: 0x0040, lo: 0xbe, hi: 0xbf}, - // Block 0x10, offset 0xa3 + // Block 0xe, offset 0x85 {value: 0x0000, lo: 0x04}, {value: 0x0040, lo: 0x80, hi: 0x93}, - {value: 0x1308, lo: 0x94, hi: 0xa1}, - {value: 0x0040, lo: 0xa2, hi: 0xa2}, - {value: 0x1308, lo: 0xa3, hi: 0xbf}, - // Block 0x11, offset 0xa8 + {value: 0x3308, lo: 0x94, hi: 0xa1}, + {value: 0x0840, lo: 0xa2, hi: 0xa2}, + {value: 0x3308, lo: 0xa3, hi: 0xbf}, + // Block 0xf, offset 0x8a {value: 0x0000, lo: 0x08}, - {value: 0x1308, lo: 0x80, hi: 0x82}, - {value: 0x1008, lo: 0x83, hi: 0x83}, + {value: 0x3308, lo: 0x80, hi: 0x82}, + {value: 0x3008, lo: 0x83, hi: 0x83}, {value: 0x0008, lo: 0x84, hi: 0xb9}, - {value: 0x1308, lo: 0xba, hi: 0xba}, - {value: 0x1008, lo: 0xbb, hi: 0xbb}, - {value: 0x1308, lo: 0xbc, hi: 0xbc}, + {value: 0x3308, lo: 0xba, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbc}, {value: 0x0008, lo: 0xbd, hi: 0xbd}, - {value: 0x1008, lo: 0xbe, hi: 0xbf}, - // Block 0x12, offset 0xb1 + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0x10, offset 0x93 {value: 0x0000, lo: 0x0f}, - {value: 0x1308, lo: 0x80, hi: 0x80}, - {value: 0x1008, lo: 0x81, hi: 0x82}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x3008, lo: 0x81, hi: 0x82}, {value: 0x0040, lo: 0x83, hi: 0x85}, - {value: 0x1008, lo: 0x86, hi: 0x88}, + {value: 0x3008, lo: 0x86, hi: 0x88}, {value: 0x0040, lo: 0x89, hi: 0x89}, - {value: 0x1008, lo: 0x8a, hi: 0x8c}, - {value: 0x1b08, lo: 0x8d, hi: 0x8d}, + {value: 0x3008, lo: 0x8a, hi: 0x8c}, + {value: 0x3b08, lo: 0x8d, hi: 0x8d}, {value: 0x0040, lo: 0x8e, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0x90}, {value: 0x0040, lo: 0x91, hi: 0x96}, - {value: 0x1008, lo: 0x97, hi: 0x97}, + {value: 0x3008, lo: 0x97, hi: 0x97}, {value: 0x0040, lo: 0x98, hi: 0xa5}, {value: 0x0008, lo: 0xa6, hi: 0xaf}, {value: 0x0018, lo: 0xb0, hi: 0xba}, {value: 0x0040, lo: 0xbb, hi: 0xbf}, - // Block 0x13, offset 0xc1 + // Block 0x11, offset 0xa3 {value: 0x0000, lo: 0x0d}, - {value: 0x1308, lo: 0x80, hi: 0x80}, - {value: 0x1008, lo: 0x81, hi: 0x83}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x3008, lo: 0x81, hi: 0x83}, {value: 0x0040, lo: 0x84, hi: 0x84}, {value: 0x0008, lo: 0x85, hi: 0x8c}, {value: 0x0040, lo: 0x8d, hi: 0x8d}, @@ -2566,25 +2567,24 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0008, lo: 0xaa, hi: 0xb9}, {value: 0x0040, lo: 0xba, hi: 0xbc}, {value: 0x0008, lo: 0xbd, hi: 0xbd}, - {value: 0x1308, lo: 0xbe, hi: 0xbf}, - // Block 0x14, offset 0xcf - {value: 0x0000, lo: 0x0c}, - {value: 0x0040, lo: 0x80, hi: 0x80}, - {value: 0x1308, lo: 0x81, hi: 0x81}, - {value: 0x1008, lo: 0x82, hi: 0x83}, + {value: 0x3308, lo: 0xbe, hi: 0xbf}, + // Block 0x12, offset 0xb1 + {value: 0x0000, lo: 0x0b}, + {value: 0x3308, lo: 0x80, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x83}, {value: 0x0040, lo: 0x84, hi: 0x84}, {value: 0x0008, lo: 0x85, hi: 0x8c}, {value: 0x0040, lo: 0x8d, hi: 0x8d}, {value: 0x0008, lo: 0x8e, hi: 0x90}, {value: 0x0040, lo: 0x91, hi: 0x91}, {value: 0x0008, lo: 0x92, hi: 0xba}, - {value: 0x0040, lo: 0xbb, hi: 0xbc}, + {value: 0x3b08, lo: 0xbb, hi: 0xbc}, {value: 0x0008, lo: 0xbd, hi: 0xbd}, - {value: 0x1008, lo: 0xbe, hi: 0xbf}, - // Block 0x15, offset 0xdc + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0x13, offset 0xbd {value: 0x0000, lo: 0x0b}, {value: 0x0040, lo: 0x80, hi: 0x81}, - {value: 0x1008, lo: 0x82, hi: 0x83}, + {value: 0x3008, lo: 0x82, hi: 0x83}, {value: 0x0040, lo: 0x84, hi: 0x84}, {value: 0x0008, lo: 0x85, hi: 0x96}, {value: 0x0040, lo: 0x97, hi: 0x99}, @@ -2594,50 +2594,50 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0040, lo: 0xbc, hi: 0xbc}, {value: 0x0008, lo: 0xbd, hi: 0xbd}, {value: 0x0040, lo: 0xbe, hi: 0xbf}, - // Block 0x16, offset 0xe8 + // Block 0x14, offset 0xc9 {value: 0x0000, lo: 0x10}, {value: 0x0008, lo: 0x80, hi: 0x86}, {value: 0x0040, lo: 0x87, hi: 0x89}, - {value: 0x1b08, lo: 0x8a, hi: 0x8a}, + {value: 0x3b08, lo: 0x8a, hi: 0x8a}, {value: 0x0040, lo: 0x8b, hi: 0x8e}, - {value: 0x1008, lo: 0x8f, hi: 0x91}, - {value: 0x1308, lo: 0x92, hi: 0x94}, + {value: 0x3008, lo: 0x8f, hi: 0x91}, + {value: 0x3308, lo: 0x92, hi: 0x94}, {value: 0x0040, lo: 0x95, hi: 0x95}, - {value: 0x1308, lo: 0x96, hi: 0x96}, + {value: 0x3308, lo: 0x96, hi: 0x96}, {value: 0x0040, lo: 0x97, hi: 0x97}, - {value: 0x1008, lo: 0x98, hi: 0x9f}, + {value: 0x3008, lo: 0x98, hi: 0x9f}, {value: 0x0040, lo: 0xa0, hi: 0xa5}, {value: 0x0008, lo: 0xa6, hi: 0xaf}, {value: 0x0040, lo: 0xb0, hi: 0xb1}, - {value: 0x1008, lo: 0xb2, hi: 0xb3}, + {value: 0x3008, lo: 0xb2, hi: 0xb3}, {value: 0x0018, lo: 0xb4, hi: 0xb4}, {value: 0x0040, lo: 0xb5, hi: 0xbf}, - // Block 0x17, offset 0xf9 + // Block 0x15, offset 0xda {value: 0x0000, lo: 0x09}, {value: 0x0040, lo: 0x80, hi: 0x80}, {value: 0x0008, lo: 0x81, hi: 0xb0}, - {value: 0x1308, lo: 0xb1, hi: 0xb1}, + {value: 0x3308, lo: 0xb1, hi: 0xb1}, {value: 0x0008, lo: 0xb2, hi: 0xb2}, {value: 0x08f1, lo: 0xb3, hi: 0xb3}, - {value: 0x1308, lo: 0xb4, hi: 0xb9}, - {value: 0x1b08, lo: 0xba, hi: 0xba}, + {value: 0x3308, lo: 0xb4, hi: 0xb9}, + {value: 0x3b08, lo: 0xba, hi: 0xba}, {value: 0x0040, lo: 0xbb, hi: 0xbe}, {value: 0x0018, lo: 0xbf, hi: 0xbf}, - // Block 0x18, offset 0x103 + // Block 0x16, offset 0xe4 {value: 0x0000, lo: 0x06}, {value: 0x0008, lo: 0x80, hi: 0x86}, - {value: 0x1308, lo: 0x87, hi: 0x8e}, + {value: 0x3308, lo: 0x87, hi: 0x8e}, {value: 0x0018, lo: 0x8f, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0x99}, {value: 0x0018, lo: 0x9a, hi: 0x9b}, {value: 0x0040, lo: 0x9c, hi: 0xbf}, - // Block 0x19, offset 0x10a + // Block 0x17, offset 0xeb {value: 0x0000, lo: 0x0c}, {value: 0x0008, lo: 0x80, hi: 0x84}, {value: 0x0040, lo: 0x85, hi: 0x85}, {value: 0x0008, lo: 0x86, hi: 0x86}, {value: 0x0040, lo: 0x87, hi: 0x87}, - {value: 0x1308, lo: 0x88, hi: 0x8d}, + {value: 0x3308, lo: 0x88, hi: 0x8d}, {value: 0x0040, lo: 0x8e, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0x99}, {value: 0x0040, lo: 0x9a, hi: 0x9b}, @@ -2645,76 +2645,76 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0999, lo: 0x9d, hi: 0x9d}, {value: 0x0008, lo: 0x9e, hi: 0x9f}, {value: 0x0040, lo: 0xa0, hi: 0xbf}, - // Block 0x1a, offset 0x117 + // Block 0x18, offset 0xf8 {value: 0x0000, lo: 0x10}, {value: 0x0008, lo: 0x80, hi: 0x80}, {value: 0x0018, lo: 0x81, hi: 0x8a}, {value: 0x0008, lo: 0x8b, hi: 0x8b}, {value: 0xe03d, lo: 0x8c, hi: 0x8c}, {value: 0x0018, lo: 0x8d, hi: 0x97}, - {value: 0x1308, lo: 0x98, hi: 0x99}, + {value: 0x3308, lo: 0x98, hi: 0x99}, {value: 0x0018, lo: 0x9a, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xa9}, {value: 0x0018, lo: 0xaa, hi: 0xb4}, - {value: 0x1308, lo: 0xb5, hi: 0xb5}, + {value: 0x3308, lo: 0xb5, hi: 0xb5}, {value: 0x0018, lo: 0xb6, hi: 0xb6}, - {value: 0x1308, lo: 0xb7, hi: 0xb7}, + {value: 0x3308, lo: 0xb7, hi: 0xb7}, {value: 0x0018, lo: 0xb8, hi: 0xb8}, - {value: 0x1308, lo: 0xb9, hi: 0xb9}, + {value: 0x3308, lo: 0xb9, hi: 0xb9}, {value: 0x0018, lo: 0xba, hi: 0xbd}, - {value: 0x1008, lo: 0xbe, hi: 0xbf}, - // Block 0x1b, offset 0x128 + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0x19, offset 0x109 {value: 0x0000, lo: 0x06}, {value: 0x0018, lo: 0x80, hi: 0x85}, - {value: 0x1308, lo: 0x86, hi: 0x86}, + {value: 0x3308, lo: 0x86, hi: 0x86}, {value: 0x0018, lo: 0x87, hi: 0x8c}, {value: 0x0040, lo: 0x8d, hi: 0x8d}, {value: 0x0018, lo: 0x8e, hi: 0x9a}, {value: 0x0040, lo: 0x9b, hi: 0xbf}, - // Block 0x1c, offset 0x12f + // Block 0x1a, offset 0x110 {value: 0x0000, lo: 0x0a}, {value: 0x0008, lo: 0x80, hi: 0xaa}, - {value: 0x1008, lo: 0xab, hi: 0xac}, - {value: 0x1308, lo: 0xad, hi: 0xb0}, - {value: 0x1008, lo: 0xb1, hi: 0xb1}, - {value: 0x1308, lo: 0xb2, hi: 0xb7}, - {value: 0x1008, lo: 0xb8, hi: 0xb8}, - {value: 0x1b08, lo: 0xb9, hi: 0xba}, - {value: 0x1008, lo: 0xbb, hi: 0xbc}, - {value: 0x1308, lo: 0xbd, hi: 0xbe}, + {value: 0x3008, lo: 0xab, hi: 0xac}, + {value: 0x3308, lo: 0xad, hi: 0xb0}, + {value: 0x3008, lo: 0xb1, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb7}, + {value: 0x3008, lo: 0xb8, hi: 0xb8}, + {value: 0x3b08, lo: 0xb9, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbc}, + {value: 0x3308, lo: 0xbd, hi: 0xbe}, {value: 0x0008, lo: 0xbf, hi: 0xbf}, - // Block 0x1d, offset 0x13a + // Block 0x1b, offset 0x11b {value: 0x0000, lo: 0x0e}, {value: 0x0008, lo: 0x80, hi: 0x89}, {value: 0x0018, lo: 0x8a, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0x95}, - {value: 0x1008, lo: 0x96, hi: 0x97}, - {value: 0x1308, lo: 0x98, hi: 0x99}, + {value: 0x3008, lo: 0x96, hi: 0x97}, + {value: 0x3308, lo: 0x98, hi: 0x99}, {value: 0x0008, lo: 0x9a, hi: 0x9d}, - {value: 0x1308, lo: 0x9e, hi: 0xa0}, + {value: 0x3308, lo: 0x9e, hi: 0xa0}, {value: 0x0008, lo: 0xa1, hi: 0xa1}, - {value: 0x1008, lo: 0xa2, hi: 0xa4}, + {value: 0x3008, lo: 0xa2, hi: 0xa4}, {value: 0x0008, lo: 0xa5, hi: 0xa6}, - {value: 0x1008, lo: 0xa7, hi: 0xad}, + {value: 0x3008, lo: 0xa7, hi: 0xad}, {value: 0x0008, lo: 0xae, hi: 0xb0}, - {value: 0x1308, lo: 0xb1, hi: 0xb4}, + {value: 0x3308, lo: 0xb1, hi: 0xb4}, {value: 0x0008, lo: 0xb5, hi: 0xbf}, - // Block 0x1e, offset 0x149 + // Block 0x1c, offset 0x12a {value: 0x0000, lo: 0x0d}, {value: 0x0008, lo: 0x80, hi: 0x81}, - {value: 0x1308, lo: 0x82, hi: 0x82}, - {value: 0x1008, lo: 0x83, hi: 0x84}, - {value: 0x1308, lo: 0x85, hi: 0x86}, - {value: 0x1008, lo: 0x87, hi: 0x8c}, - {value: 0x1308, lo: 0x8d, hi: 0x8d}, + {value: 0x3308, lo: 0x82, hi: 0x82}, + {value: 0x3008, lo: 0x83, hi: 0x84}, + {value: 0x3308, lo: 0x85, hi: 0x86}, + {value: 0x3008, lo: 0x87, hi: 0x8c}, + {value: 0x3308, lo: 0x8d, hi: 0x8d}, {value: 0x0008, lo: 0x8e, hi: 0x8e}, - {value: 0x1008, lo: 0x8f, hi: 0x8f}, + {value: 0x3008, lo: 0x8f, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0x99}, - {value: 0x1008, lo: 0x9a, hi: 0x9c}, - {value: 0x1308, lo: 0x9d, hi: 0x9d}, + {value: 0x3008, lo: 0x9a, hi: 0x9c}, + {value: 0x3308, lo: 0x9d, hi: 0x9d}, {value: 0x0018, lo: 0x9e, hi: 0x9f}, {value: 0x0040, lo: 0xa0, hi: 0xbf}, - // Block 0x1f, offset 0x157 + // Block 0x1d, offset 0x138 {value: 0x0000, lo: 0x09}, {value: 0x0040, lo: 0x80, hi: 0x86}, {value: 0x055d, lo: 0x87, hi: 0x87}, @@ -2725,18 +2725,27 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0018, lo: 0xbb, hi: 0xbb}, {value: 0xe105, lo: 0xbc, hi: 0xbc}, {value: 0x0008, lo: 0xbd, hi: 0xbf}, - // Block 0x20, offset 0x161 + // Block 0x1e, offset 0x142 {value: 0x0000, lo: 0x01}, {value: 0x0018, lo: 0x80, hi: 0xbf}, - // Block 0x21, offset 0x163 - {value: 0x0000, lo: 0x03}, + // Block 0x1f, offset 0x144 + {value: 0x0000, lo: 0x04}, {value: 0x0018, lo: 0x80, hi: 0x9e}, {value: 0x0040, lo: 0x9f, hi: 0xa0}, - {value: 0x0018, lo: 0xa1, hi: 0xbf}, - // Block 0x22, offset 0x167 + {value: 0x2018, lo: 0xa1, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xbf}, + // Block 0x20, offset 0x149 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xa7}, + {value: 0x2018, lo: 0xa8, hi: 0xbf}, + // Block 0x21, offset 0x14c + {value: 0x0000, lo: 0x02}, + {value: 0x2018, lo: 0x80, hi: 0x82}, + {value: 0x0018, lo: 0x83, hi: 0xbf}, + // Block 0x22, offset 0x14f {value: 0x0000, lo: 0x01}, {value: 0x0008, lo: 0x80, hi: 0xbf}, - // Block 0x23, offset 0x169 + // Block 0x23, offset 0x151 {value: 0x0000, lo: 0x0b}, {value: 0x0008, lo: 0x80, hi: 0x88}, {value: 0x0040, lo: 0x89, hi: 0x89}, @@ -2749,7 +2758,7 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0008, lo: 0x9a, hi: 0x9d}, {value: 0x0040, lo: 0x9e, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xbf}, - // Block 0x24, offset 0x175 + // Block 0x24, offset 0x15d {value: 0x0000, lo: 0x0a}, {value: 0x0008, lo: 0x80, hi: 0x88}, {value: 0x0040, lo: 0x89, hi: 0x89}, @@ -2761,7 +2770,7 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0040, lo: 0xb6, hi: 0xb7}, {value: 0x0008, lo: 0xb8, hi: 0xbe}, {value: 0x0040, lo: 0xbf, hi: 0xbf}, - // Block 0x25, offset 0x180 + // Block 0x25, offset 0x168 {value: 0x0000, lo: 0x07}, {value: 0x0008, lo: 0x80, hi: 0x80}, {value: 0x0040, lo: 0x81, hi: 0x81}, @@ -2770,146 +2779,146 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0008, lo: 0x88, hi: 0x96}, {value: 0x0040, lo: 0x97, hi: 0x97}, {value: 0x0008, lo: 0x98, hi: 0xbf}, - // Block 0x26, offset 0x188 + // Block 0x26, offset 0x170 {value: 0x0000, lo: 0x05}, {value: 0x0008, lo: 0x80, hi: 0x90}, {value: 0x0040, lo: 0x91, hi: 0x91}, {value: 0x0008, lo: 0x92, hi: 0x95}, {value: 0x0040, lo: 0x96, hi: 0x97}, {value: 0x0008, lo: 0x98, hi: 0xbf}, - // Block 0x27, offset 0x18e + // Block 0x27, offset 0x176 {value: 0x0000, lo: 0x05}, {value: 0x0008, lo: 0x80, hi: 0x9a}, {value: 0x0040, lo: 0x9b, hi: 0x9c}, - {value: 0x1308, lo: 0x9d, hi: 0x9f}, + {value: 0x3308, lo: 0x9d, hi: 0x9f}, {value: 0x0018, lo: 0xa0, hi: 0xbc}, {value: 0x0040, lo: 0xbd, hi: 0xbf}, - // Block 0x28, offset 0x194 + // Block 0x28, offset 0x17c {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0x8f}, {value: 0x0018, lo: 0x90, hi: 0x99}, {value: 0x0040, lo: 0x9a, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xbf}, - // Block 0x29, offset 0x199 + // Block 0x29, offset 0x181 {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0xb5}, {value: 0x0040, lo: 0xb6, hi: 0xb7}, {value: 0xe045, lo: 0xb8, hi: 0xbd}, {value: 0x0040, lo: 0xbe, hi: 0xbf}, - // Block 0x2a, offset 0x19e + // Block 0x2a, offset 0x186 {value: 0x0000, lo: 0x02}, {value: 0x0018, lo: 0x80, hi: 0x80}, {value: 0x0008, lo: 0x81, hi: 0xbf}, - // Block 0x2b, offset 0x1a1 + // Block 0x2b, offset 0x189 {value: 0x0000, lo: 0x03}, {value: 0x0008, lo: 0x80, hi: 0xac}, {value: 0x0018, lo: 0xad, hi: 0xae}, {value: 0x0008, lo: 0xaf, hi: 0xbf}, - // Block 0x2c, offset 0x1a5 + // Block 0x2c, offset 0x18d {value: 0x0000, lo: 0x05}, {value: 0x0040, lo: 0x80, hi: 0x80}, {value: 0x0008, lo: 0x81, hi: 0x9a}, {value: 0x0018, lo: 0x9b, hi: 0x9c}, {value: 0x0040, lo: 0x9d, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xbf}, - // Block 0x2d, offset 0x1ab + // Block 0x2d, offset 0x193 {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0xaa}, {value: 0x0018, lo: 0xab, hi: 0xb0}, {value: 0x0008, lo: 0xb1, hi: 0xb8}, {value: 0x0040, lo: 0xb9, hi: 0xbf}, - // Block 0x2e, offset 0x1b0 + // Block 0x2e, offset 0x198 {value: 0x0000, lo: 0x0b}, {value: 0x0008, lo: 0x80, hi: 0x8c}, {value: 0x0040, lo: 0x8d, hi: 0x8d}, {value: 0x0008, lo: 0x8e, hi: 0x91}, - {value: 0x1308, lo: 0x92, hi: 0x93}, - {value: 0x1b08, lo: 0x94, hi: 0x94}, + {value: 0x3308, lo: 0x92, hi: 0x93}, + {value: 0x3b08, lo: 0x94, hi: 0x94}, {value: 0x0040, lo: 0x95, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xb1}, - {value: 0x1308, lo: 0xb2, hi: 0xb3}, - {value: 0x1b08, lo: 0xb4, hi: 0xb4}, + {value: 0x3308, lo: 0xb2, hi: 0xb3}, + {value: 0x3b08, lo: 0xb4, hi: 0xb4}, {value: 0x0018, lo: 0xb5, hi: 0xb6}, {value: 0x0040, lo: 0xb7, hi: 0xbf}, - // Block 0x2f, offset 0x1bc + // Block 0x2f, offset 0x1a4 {value: 0x0000, lo: 0x09}, {value: 0x0008, lo: 0x80, hi: 0x91}, - {value: 0x1308, lo: 0x92, hi: 0x93}, + {value: 0x3308, lo: 0x92, hi: 0x93}, {value: 0x0040, lo: 0x94, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xac}, {value: 0x0040, lo: 0xad, hi: 0xad}, {value: 0x0008, lo: 0xae, hi: 0xb0}, {value: 0x0040, lo: 0xb1, hi: 0xb1}, - {value: 0x1308, lo: 0xb2, hi: 0xb3}, + {value: 0x3308, lo: 0xb2, hi: 0xb3}, {value: 0x0040, lo: 0xb4, hi: 0xbf}, - // Block 0x30, offset 0x1c6 + // Block 0x30, offset 0x1ae {value: 0x0000, lo: 0x05}, {value: 0x0008, lo: 0x80, hi: 0xb3}, - {value: 0x1340, lo: 0xb4, hi: 0xb5}, - {value: 0x1008, lo: 0xb6, hi: 0xb6}, - {value: 0x1308, lo: 0xb7, hi: 0xbd}, - {value: 0x1008, lo: 0xbe, hi: 0xbf}, - // Block 0x31, offset 0x1cc + {value: 0x3340, lo: 0xb4, hi: 0xb5}, + {value: 0x3008, lo: 0xb6, hi: 0xb6}, + {value: 0x3308, lo: 0xb7, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0x31, offset 0x1b4 {value: 0x0000, lo: 0x10}, - {value: 0x1008, lo: 0x80, hi: 0x85}, - {value: 0x1308, lo: 0x86, hi: 0x86}, - {value: 0x1008, lo: 0x87, hi: 0x88}, - {value: 0x1308, lo: 0x89, hi: 0x91}, - {value: 0x1b08, lo: 0x92, hi: 0x92}, - {value: 0x1308, lo: 0x93, hi: 0x93}, + {value: 0x3008, lo: 0x80, hi: 0x85}, + {value: 0x3308, lo: 0x86, hi: 0x86}, + {value: 0x3008, lo: 0x87, hi: 0x88}, + {value: 0x3308, lo: 0x89, hi: 0x91}, + {value: 0x3b08, lo: 0x92, hi: 0x92}, + {value: 0x3308, lo: 0x93, hi: 0x93}, {value: 0x0018, lo: 0x94, hi: 0x96}, {value: 0x0008, lo: 0x97, hi: 0x97}, {value: 0x0018, lo: 0x98, hi: 0x9b}, {value: 0x0008, lo: 0x9c, hi: 0x9c}, - {value: 0x1308, lo: 0x9d, hi: 0x9d}, + {value: 0x3308, lo: 0x9d, hi: 0x9d}, {value: 0x0040, lo: 0x9e, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xa9}, {value: 0x0040, lo: 0xaa, hi: 0xaf}, {value: 0x0018, lo: 0xb0, hi: 0xb9}, {value: 0x0040, lo: 0xba, hi: 0xbf}, - // Block 0x32, offset 0x1dd + // Block 0x32, offset 0x1c5 {value: 0x0000, lo: 0x09}, {value: 0x0018, lo: 0x80, hi: 0x85}, {value: 0x0040, lo: 0x86, hi: 0x86}, {value: 0x0218, lo: 0x87, hi: 0x87}, {value: 0x0018, lo: 0x88, hi: 0x8a}, - {value: 0x13c0, lo: 0x8b, hi: 0x8d}, + {value: 0x33c0, lo: 0x8b, hi: 0x8d}, {value: 0x0040, lo: 0x8e, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0x99}, {value: 0x0040, lo: 0x9a, hi: 0x9f}, {value: 0x0208, lo: 0xa0, hi: 0xbf}, - // Block 0x33, offset 0x1e7 + // Block 0x33, offset 0x1cf {value: 0x0000, lo: 0x02}, {value: 0x0208, lo: 0x80, hi: 0xb7}, {value: 0x0040, lo: 0xb8, hi: 0xbf}, - // Block 0x34, offset 0x1ea + // Block 0x34, offset 0x1d2 {value: 0x0000, lo: 0x07}, {value: 0x0008, lo: 0x80, hi: 0x84}, - {value: 0x1308, lo: 0x85, hi: 0x86}, + {value: 0x3308, lo: 0x85, hi: 0x86}, {value: 0x0208, lo: 0x87, hi: 0xa8}, - {value: 0x1308, lo: 0xa9, hi: 0xa9}, + {value: 0x3308, lo: 0xa9, hi: 0xa9}, {value: 0x0208, lo: 0xaa, hi: 0xaa}, {value: 0x0040, lo: 0xab, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0x35, offset 0x1f2 + // Block 0x35, offset 0x1da {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0xb5}, {value: 0x0040, lo: 0xb6, hi: 0xbf}, - // Block 0x36, offset 0x1f5 + // Block 0x36, offset 0x1dd {value: 0x0000, lo: 0x0c}, {value: 0x0008, lo: 0x80, hi: 0x9e}, {value: 0x0040, lo: 0x9f, hi: 0x9f}, - {value: 0x1308, lo: 0xa0, hi: 0xa2}, - {value: 0x1008, lo: 0xa3, hi: 0xa6}, - {value: 0x1308, lo: 0xa7, hi: 0xa8}, - {value: 0x1008, lo: 0xa9, hi: 0xab}, + {value: 0x3308, lo: 0xa0, hi: 0xa2}, + {value: 0x3008, lo: 0xa3, hi: 0xa6}, + {value: 0x3308, lo: 0xa7, hi: 0xa8}, + {value: 0x3008, lo: 0xa9, hi: 0xab}, {value: 0x0040, lo: 0xac, hi: 0xaf}, - {value: 0x1008, lo: 0xb0, hi: 0xb1}, - {value: 0x1308, lo: 0xb2, hi: 0xb2}, - {value: 0x1008, lo: 0xb3, hi: 0xb8}, - {value: 0x1308, lo: 0xb9, hi: 0xbb}, + {value: 0x3008, lo: 0xb0, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb2}, + {value: 0x3008, lo: 0xb3, hi: 0xb8}, + {value: 0x3308, lo: 0xb9, hi: 0xbb}, {value: 0x0040, lo: 0xbc, hi: 0xbf}, - // Block 0x37, offset 0x202 + // Block 0x37, offset 0x1ea {value: 0x0000, lo: 0x07}, {value: 0x0018, lo: 0x80, hi: 0x80}, {value: 0x0040, lo: 0x81, hi: 0x83}, @@ -2918,12 +2927,12 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0040, lo: 0xae, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xb4}, {value: 0x0040, lo: 0xb5, hi: 0xbf}, - // Block 0x38, offset 0x20a + // Block 0x38, offset 0x1f2 {value: 0x0000, lo: 0x03}, {value: 0x0008, lo: 0x80, hi: 0xab}, {value: 0x0040, lo: 0xac, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0x39, offset 0x20e + // Block 0x39, offset 0x1f6 {value: 0x0000, lo: 0x06}, {value: 0x0008, lo: 0x80, hi: 0x89}, {value: 0x0040, lo: 0x8a, hi: 0x8f}, @@ -2931,33 +2940,33 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0028, lo: 0x9a, hi: 0x9a}, {value: 0x0040, lo: 0x9b, hi: 0x9d}, {value: 0x0018, lo: 0x9e, hi: 0xbf}, - // Block 0x3a, offset 0x215 + // Block 0x3a, offset 0x1fd {value: 0x0000, lo: 0x07}, {value: 0x0008, lo: 0x80, hi: 0x96}, - {value: 0x1308, lo: 0x97, hi: 0x98}, - {value: 0x1008, lo: 0x99, hi: 0x9a}, - {value: 0x1308, lo: 0x9b, hi: 0x9b}, + {value: 0x3308, lo: 0x97, hi: 0x98}, + {value: 0x3008, lo: 0x99, hi: 0x9a}, + {value: 0x3308, lo: 0x9b, hi: 0x9b}, {value: 0x0040, lo: 0x9c, hi: 0x9d}, {value: 0x0018, lo: 0x9e, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xbf}, - // Block 0x3b, offset 0x21d + // Block 0x3b, offset 0x205 {value: 0x0000, lo: 0x0f}, {value: 0x0008, lo: 0x80, hi: 0x94}, - {value: 0x1008, lo: 0x95, hi: 0x95}, - {value: 0x1308, lo: 0x96, hi: 0x96}, - {value: 0x1008, lo: 0x97, hi: 0x97}, - {value: 0x1308, lo: 0x98, hi: 0x9e}, + {value: 0x3008, lo: 0x95, hi: 0x95}, + {value: 0x3308, lo: 0x96, hi: 0x96}, + {value: 0x3008, lo: 0x97, hi: 0x97}, + {value: 0x3308, lo: 0x98, hi: 0x9e}, {value: 0x0040, lo: 0x9f, hi: 0x9f}, - {value: 0x1b08, lo: 0xa0, hi: 0xa0}, - {value: 0x1008, lo: 0xa1, hi: 0xa1}, - {value: 0x1308, lo: 0xa2, hi: 0xa2}, - {value: 0x1008, lo: 0xa3, hi: 0xa4}, - {value: 0x1308, lo: 0xa5, hi: 0xac}, - {value: 0x1008, lo: 0xad, hi: 0xb2}, - {value: 0x1308, lo: 0xb3, hi: 0xbc}, + {value: 0x3b08, lo: 0xa0, hi: 0xa0}, + {value: 0x3008, lo: 0xa1, hi: 0xa1}, + {value: 0x3308, lo: 0xa2, hi: 0xa2}, + {value: 0x3008, lo: 0xa3, hi: 0xa4}, + {value: 0x3308, lo: 0xa5, hi: 0xac}, + {value: 0x3008, lo: 0xad, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xbc}, {value: 0x0040, lo: 0xbd, hi: 0xbe}, - {value: 0x1308, lo: 0xbf, hi: 0xbf}, - // Block 0x3c, offset 0x22d + {value: 0x3308, lo: 0xbf, hi: 0xbf}, + // Block 0x3c, offset 0x215 {value: 0x0000, lo: 0x0b}, {value: 0x0008, lo: 0x80, hi: 0x89}, {value: 0x0040, lo: 0x8a, hi: 0x8f}, @@ -2967,78 +2976,78 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0008, lo: 0xa7, hi: 0xa7}, {value: 0x0018, lo: 0xa8, hi: 0xad}, {value: 0x0040, lo: 0xae, hi: 0xaf}, - {value: 0x1308, lo: 0xb0, hi: 0xbd}, - {value: 0x1318, lo: 0xbe, hi: 0xbe}, + {value: 0x3308, lo: 0xb0, hi: 0xbd}, + {value: 0x3318, lo: 0xbe, hi: 0xbe}, {value: 0x0040, lo: 0xbf, hi: 0xbf}, - // Block 0x3d, offset 0x239 + // Block 0x3d, offset 0x221 {value: 0x0000, lo: 0x01}, {value: 0x0040, lo: 0x80, hi: 0xbf}, - // Block 0x3e, offset 0x23b + // Block 0x3e, offset 0x223 {value: 0x0000, lo: 0x09}, - {value: 0x1308, lo: 0x80, hi: 0x83}, - {value: 0x1008, lo: 0x84, hi: 0x84}, + {value: 0x3308, lo: 0x80, hi: 0x83}, + {value: 0x3008, lo: 0x84, hi: 0x84}, {value: 0x0008, lo: 0x85, hi: 0xb3}, - {value: 0x1308, lo: 0xb4, hi: 0xb4}, - {value: 0x1008, lo: 0xb5, hi: 0xb5}, - {value: 0x1308, lo: 0xb6, hi: 0xba}, - {value: 0x1008, lo: 0xbb, hi: 0xbb}, - {value: 0x1308, lo: 0xbc, hi: 0xbc}, - {value: 0x1008, lo: 0xbd, hi: 0xbf}, - // Block 0x3f, offset 0x245 + {value: 0x3308, lo: 0xb4, hi: 0xb4}, + {value: 0x3008, lo: 0xb5, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbc}, + {value: 0x3008, lo: 0xbd, hi: 0xbf}, + // Block 0x3f, offset 0x22d {value: 0x0000, lo: 0x0b}, - {value: 0x1008, lo: 0x80, hi: 0x81}, - {value: 0x1308, lo: 0x82, hi: 0x82}, - {value: 0x1008, lo: 0x83, hi: 0x83}, - {value: 0x1808, lo: 0x84, hi: 0x84}, + {value: 0x3008, lo: 0x80, hi: 0x81}, + {value: 0x3308, lo: 0x82, hi: 0x82}, + {value: 0x3008, lo: 0x83, hi: 0x83}, + {value: 0x3808, lo: 0x84, hi: 0x84}, {value: 0x0008, lo: 0x85, hi: 0x8b}, {value: 0x0040, lo: 0x8c, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0x99}, {value: 0x0018, lo: 0x9a, hi: 0xaa}, - {value: 0x1308, lo: 0xab, hi: 0xb3}, + {value: 0x3308, lo: 0xab, hi: 0xb3}, {value: 0x0018, lo: 0xb4, hi: 0xbc}, {value: 0x0040, lo: 0xbd, hi: 0xbf}, - // Block 0x40, offset 0x251 + // Block 0x40, offset 0x239 {value: 0x0000, lo: 0x0b}, - {value: 0x1308, lo: 0x80, hi: 0x81}, - {value: 0x1008, lo: 0x82, hi: 0x82}, + {value: 0x3308, lo: 0x80, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x82}, {value: 0x0008, lo: 0x83, hi: 0xa0}, - {value: 0x1008, lo: 0xa1, hi: 0xa1}, - {value: 0x1308, lo: 0xa2, hi: 0xa5}, - {value: 0x1008, lo: 0xa6, hi: 0xa7}, - {value: 0x1308, lo: 0xa8, hi: 0xa9}, - {value: 0x1808, lo: 0xaa, hi: 0xaa}, - {value: 0x1b08, lo: 0xab, hi: 0xab}, - {value: 0x1308, lo: 0xac, hi: 0xad}, + {value: 0x3008, lo: 0xa1, hi: 0xa1}, + {value: 0x3308, lo: 0xa2, hi: 0xa5}, + {value: 0x3008, lo: 0xa6, hi: 0xa7}, + {value: 0x3308, lo: 0xa8, hi: 0xa9}, + {value: 0x3808, lo: 0xaa, hi: 0xaa}, + {value: 0x3b08, lo: 0xab, hi: 0xab}, + {value: 0x3308, lo: 0xac, hi: 0xad}, {value: 0x0008, lo: 0xae, hi: 0xbf}, - // Block 0x41, offset 0x25d + // Block 0x41, offset 0x245 {value: 0x0000, lo: 0x0b}, {value: 0x0008, lo: 0x80, hi: 0xa5}, - {value: 0x1308, lo: 0xa6, hi: 0xa6}, - {value: 0x1008, lo: 0xa7, hi: 0xa7}, - {value: 0x1308, lo: 0xa8, hi: 0xa9}, - {value: 0x1008, lo: 0xaa, hi: 0xac}, - {value: 0x1308, lo: 0xad, hi: 0xad}, - {value: 0x1008, lo: 0xae, hi: 0xae}, - {value: 0x1308, lo: 0xaf, hi: 0xb1}, - {value: 0x1808, lo: 0xb2, hi: 0xb3}, + {value: 0x3308, lo: 0xa6, hi: 0xa6}, + {value: 0x3008, lo: 0xa7, hi: 0xa7}, + {value: 0x3308, lo: 0xa8, hi: 0xa9}, + {value: 0x3008, lo: 0xaa, hi: 0xac}, + {value: 0x3308, lo: 0xad, hi: 0xad}, + {value: 0x3008, lo: 0xae, hi: 0xae}, + {value: 0x3308, lo: 0xaf, hi: 0xb1}, + {value: 0x3808, lo: 0xb2, hi: 0xb3}, {value: 0x0040, lo: 0xb4, hi: 0xbb}, {value: 0x0018, lo: 0xbc, hi: 0xbf}, - // Block 0x42, offset 0x269 + // Block 0x42, offset 0x251 {value: 0x0000, lo: 0x07}, {value: 0x0008, lo: 0x80, hi: 0xa3}, - {value: 0x1008, lo: 0xa4, hi: 0xab}, - {value: 0x1308, lo: 0xac, hi: 0xb3}, - {value: 0x1008, lo: 0xb4, hi: 0xb5}, - {value: 0x1308, lo: 0xb6, hi: 0xb7}, + {value: 0x3008, lo: 0xa4, hi: 0xab}, + {value: 0x3308, lo: 0xac, hi: 0xb3}, + {value: 0x3008, lo: 0xb4, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xb7}, {value: 0x0040, lo: 0xb8, hi: 0xba}, {value: 0x0018, lo: 0xbb, hi: 0xbf}, - // Block 0x43, offset 0x271 + // Block 0x43, offset 0x259 {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0x89}, {value: 0x0040, lo: 0x8a, hi: 0x8c}, {value: 0x0008, lo: 0x8d, hi: 0xbd}, {value: 0x0018, lo: 0xbe, hi: 0xbf}, - // Block 0x44, offset 0x276 + // Block 0x44, offset 0x25e {value: 0x0000, lo: 0x09}, {value: 0x0e29, lo: 0x80, hi: 0x80}, {value: 0x0e41, lo: 0x81, hi: 0x81}, @@ -3049,30 +3058,30 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0eb9, lo: 0x87, hi: 0x87}, {value: 0x057d, lo: 0x88, hi: 0x88}, {value: 0x0040, lo: 0x89, hi: 0xbf}, - // Block 0x45, offset 0x280 + // Block 0x45, offset 0x268 {value: 0x0000, lo: 0x10}, {value: 0x0018, lo: 0x80, hi: 0x87}, {value: 0x0040, lo: 0x88, hi: 0x8f}, - {value: 0x1308, lo: 0x90, hi: 0x92}, + {value: 0x3308, lo: 0x90, hi: 0x92}, {value: 0x0018, lo: 0x93, hi: 0x93}, - {value: 0x1308, lo: 0x94, hi: 0xa0}, - {value: 0x1008, lo: 0xa1, hi: 0xa1}, - {value: 0x1308, lo: 0xa2, hi: 0xa8}, + {value: 0x3308, lo: 0x94, hi: 0xa0}, + {value: 0x3008, lo: 0xa1, hi: 0xa1}, + {value: 0x3308, lo: 0xa2, hi: 0xa8}, {value: 0x0008, lo: 0xa9, hi: 0xac}, - {value: 0x1308, lo: 0xad, hi: 0xad}, + {value: 0x3308, lo: 0xad, hi: 0xad}, {value: 0x0008, lo: 0xae, hi: 0xb1}, - {value: 0x1008, lo: 0xb2, hi: 0xb3}, - {value: 0x1308, lo: 0xb4, hi: 0xb4}, + {value: 0x3008, lo: 0xb2, hi: 0xb3}, + {value: 0x3308, lo: 0xb4, hi: 0xb4}, {value: 0x0008, lo: 0xb5, hi: 0xb6}, - {value: 0x0040, lo: 0xb7, hi: 0xb7}, - {value: 0x1308, lo: 0xb8, hi: 0xb9}, + {value: 0x3008, lo: 0xb7, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xb9}, {value: 0x0040, lo: 0xba, hi: 0xbf}, - // Block 0x46, offset 0x291 + // Block 0x46, offset 0x279 {value: 0x0000, lo: 0x03}, - {value: 0x1308, lo: 0x80, hi: 0xb5}, - {value: 0x0040, lo: 0xb6, hi: 0xba}, - {value: 0x1308, lo: 0xbb, hi: 0xbf}, - // Block 0x47, offset 0x295 + {value: 0x3308, lo: 0x80, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xba}, + {value: 0x3308, lo: 0xbb, hi: 0xbf}, + // Block 0x47, offset 0x27d {value: 0x0000, lo: 0x0a}, {value: 0x0008, lo: 0x80, hi: 0x87}, {value: 0xe045, lo: 0x88, hi: 0x8f}, @@ -3084,12 +3093,12 @@ var idnaSparseValues = [1876]valueRange{ {value: 0xe045, lo: 0xa8, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xb7}, {value: 0xe045, lo: 0xb8, hi: 0xbf}, - // Block 0x48, offset 0x2a0 + // Block 0x48, offset 0x288 {value: 0x0000, lo: 0x03}, {value: 0x0040, lo: 0x80, hi: 0x8f}, - {value: 0x1318, lo: 0x90, hi: 0xb0}, + {value: 0x3318, lo: 0x90, hi: 0xb0}, {value: 0x0040, lo: 0xb1, hi: 0xbf}, - // Block 0x49, offset 0x2a4 + // Block 0x49, offset 0x28c {value: 0x0000, lo: 0x08}, {value: 0x0018, lo: 0x80, hi: 0x82}, {value: 0x0040, lo: 0x83, hi: 0x83}, @@ -3099,7 +3108,7 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0018, lo: 0x8a, hi: 0x8b}, {value: 0x0040, lo: 0x8c, hi: 0x8f}, {value: 0x0018, lo: 0x90, hi: 0xbf}, - // Block 0x4a, offset 0x2ad + // Block 0x4a, offset 0x295 {value: 0x0000, lo: 0x07}, {value: 0x0018, lo: 0x80, hi: 0xab}, {value: 0x24f1, lo: 0xac, hi: 0xac}, @@ -3108,72 +3117,68 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x2579, lo: 0xaf, hi: 0xaf}, {value: 0x25b1, lo: 0xb0, hi: 0xb0}, {value: 0x0018, lo: 0xb1, hi: 0xbf}, - // Block 0x4b, offset 0x2b5 + // Block 0x4b, offset 0x29d {value: 0x0000, lo: 0x05}, {value: 0x0018, lo: 0x80, hi: 0x9f}, {value: 0x0080, lo: 0xa0, hi: 0xa0}, {value: 0x0018, lo: 0xa1, hi: 0xad}, {value: 0x0080, lo: 0xae, hi: 0xaf}, {value: 0x0018, lo: 0xb0, hi: 0xbf}, - // Block 0x4c, offset 0x2bb + // Block 0x4c, offset 0x2a3 {value: 0x0000, lo: 0x04}, {value: 0x0018, lo: 0x80, hi: 0xa8}, {value: 0x09c5, lo: 0xa9, hi: 0xa9}, {value: 0x09e5, lo: 0xaa, hi: 0xaa}, {value: 0x0018, lo: 0xab, hi: 0xbf}, - // Block 0x4d, offset 0x2c0 - {value: 0x0000, lo: 0x02}, - {value: 0x0018, lo: 0x80, hi: 0xbe}, - {value: 0x0040, lo: 0xbf, hi: 0xbf}, - // Block 0x4e, offset 0x2c3 + // Block 0x4d, offset 0x2a8 {value: 0x0000, lo: 0x02}, {value: 0x0018, lo: 0x80, hi: 0xa6}, {value: 0x0040, lo: 0xa7, hi: 0xbf}, - // Block 0x4f, offset 0x2c6 + // Block 0x4e, offset 0x2ab {value: 0x0000, lo: 0x03}, {value: 0x0018, lo: 0x80, hi: 0x8b}, {value: 0x28c1, lo: 0x8c, hi: 0x8c}, {value: 0x0018, lo: 0x8d, hi: 0xbf}, - // Block 0x50, offset 0x2ca + // Block 0x4f, offset 0x2af {value: 0x0000, lo: 0x05}, {value: 0x0018, lo: 0x80, hi: 0xb3}, {value: 0x0e66, lo: 0xb4, hi: 0xb4}, {value: 0x292a, lo: 0xb5, hi: 0xb5}, {value: 0x0e86, lo: 0xb6, hi: 0xb6}, {value: 0x0018, lo: 0xb7, hi: 0xbf}, - // Block 0x51, offset 0x2d0 + // Block 0x50, offset 0x2b5 {value: 0x0000, lo: 0x03}, {value: 0x0018, lo: 0x80, hi: 0x9b}, {value: 0x2941, lo: 0x9c, hi: 0x9c}, {value: 0x0018, lo: 0x9d, hi: 0xbf}, - // Block 0x52, offset 0x2d4 + // Block 0x51, offset 0x2b9 {value: 0x0000, lo: 0x03}, {value: 0x0018, lo: 0x80, hi: 0xb3}, {value: 0x0040, lo: 0xb4, hi: 0xb5}, {value: 0x0018, lo: 0xb6, hi: 0xbf}, - // Block 0x53, offset 0x2d8 + // Block 0x52, offset 0x2bd {value: 0x0000, lo: 0x05}, {value: 0x0018, lo: 0x80, hi: 0x95}, {value: 0x0040, lo: 0x96, hi: 0x97}, {value: 0x0018, lo: 0x98, hi: 0xb9}, {value: 0x0040, lo: 0xba, hi: 0xbc}, {value: 0x0018, lo: 0xbd, hi: 0xbf}, - // Block 0x54, offset 0x2de + // Block 0x53, offset 0x2c3 {value: 0x0000, lo: 0x06}, {value: 0x0018, lo: 0x80, hi: 0x88}, {value: 0x0040, lo: 0x89, hi: 0x89}, - {value: 0x0018, lo: 0x8a, hi: 0x91}, - {value: 0x0040, lo: 0x92, hi: 0xab}, + {value: 0x0018, lo: 0x8a, hi: 0x92}, + {value: 0x0040, lo: 0x93, hi: 0xab}, {value: 0x0018, lo: 0xac, hi: 0xaf}, {value: 0x0040, lo: 0xb0, hi: 0xbf}, - // Block 0x55, offset 0x2e5 + // Block 0x54, offset 0x2ca {value: 0x0000, lo: 0x05}, {value: 0xe185, lo: 0x80, hi: 0x8f}, {value: 0x03f5, lo: 0x90, hi: 0x9f}, {value: 0x0ea5, lo: 0xa0, hi: 0xae}, {value: 0x0040, lo: 0xaf, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0x56, offset 0x2eb + // Block 0x55, offset 0x2d0 {value: 0x0000, lo: 0x07}, {value: 0x0008, lo: 0x80, hi: 0xa5}, {value: 0x0040, lo: 0xa6, hi: 0xa6}, @@ -3182,15 +3187,15 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0008, lo: 0xad, hi: 0xad}, {value: 0x0040, lo: 0xae, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0x57, offset 0x2f3 + // Block 0x56, offset 0x2d8 {value: 0x0000, lo: 0x06}, {value: 0x0008, lo: 0x80, hi: 0xa7}, {value: 0x0040, lo: 0xa8, hi: 0xae}, {value: 0xe075, lo: 0xaf, hi: 0xaf}, {value: 0x0018, lo: 0xb0, hi: 0xb0}, {value: 0x0040, lo: 0xb1, hi: 0xbe}, - {value: 0x1b08, lo: 0xbf, hi: 0xbf}, - // Block 0x58, offset 0x2fa + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0x57, offset 0x2df {value: 0x0000, lo: 0x0a}, {value: 0x0008, lo: 0x80, hi: 0x96}, {value: 0x0040, lo: 0x97, hi: 0x9f}, @@ -3202,7 +3207,7 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0040, lo: 0xb7, hi: 0xb7}, {value: 0x0008, lo: 0xb8, hi: 0xbe}, {value: 0x0040, lo: 0xbf, hi: 0xbf}, - // Block 0x59, offset 0x305 + // Block 0x58, offset 0x2ea {value: 0x0000, lo: 0x09}, {value: 0x0008, lo: 0x80, hi: 0x86}, {value: 0x0040, lo: 0x87, hi: 0x87}, @@ -3212,62 +3217,62 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0040, lo: 0x97, hi: 0x97}, {value: 0x0008, lo: 0x98, hi: 0x9e}, {value: 0x0040, lo: 0x9f, hi: 0x9f}, - {value: 0x1308, lo: 0xa0, hi: 0xbf}, - // Block 0x5a, offset 0x30f + {value: 0x3308, lo: 0xa0, hi: 0xbf}, + // Block 0x59, offset 0x2f4 {value: 0x0000, lo: 0x03}, {value: 0x0018, lo: 0x80, hi: 0xae}, {value: 0x0008, lo: 0xaf, hi: 0xaf}, {value: 0x0018, lo: 0xb0, hi: 0xbf}, - // Block 0x5b, offset 0x313 + // Block 0x5a, offset 0x2f8 {value: 0x0000, lo: 0x02}, - {value: 0x0018, lo: 0x80, hi: 0x84}, - {value: 0x0040, lo: 0x85, hi: 0xbf}, - // Block 0x5c, offset 0x316 + {value: 0x0018, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0xbf}, + // Block 0x5b, offset 0x2fb {value: 0x0000, lo: 0x05}, {value: 0x0018, lo: 0x80, hi: 0x99}, {value: 0x0040, lo: 0x9a, hi: 0x9a}, {value: 0x0018, lo: 0x9b, hi: 0x9e}, {value: 0x0edd, lo: 0x9f, hi: 0x9f}, {value: 0x0018, lo: 0xa0, hi: 0xbf}, - // Block 0x5d, offset 0x31c + // Block 0x5c, offset 0x301 {value: 0x0000, lo: 0x03}, {value: 0x0018, lo: 0x80, hi: 0xb2}, {value: 0x0efd, lo: 0xb3, hi: 0xb3}, {value: 0x0040, lo: 0xb4, hi: 0xbf}, - // Block 0x5e, offset 0x320 + // Block 0x5d, offset 0x305 {value: 0x0020, lo: 0x01}, {value: 0x0f1d, lo: 0x80, hi: 0xbf}, - // Block 0x5f, offset 0x322 + // Block 0x5e, offset 0x307 {value: 0x0020, lo: 0x02}, {value: 0x171d, lo: 0x80, hi: 0x8f}, {value: 0x18fd, lo: 0x90, hi: 0xbf}, - // Block 0x60, offset 0x325 + // Block 0x5f, offset 0x30a {value: 0x0020, lo: 0x01}, {value: 0x1efd, lo: 0x80, hi: 0xbf}, - // Block 0x61, offset 0x327 + // Block 0x60, offset 0x30c {value: 0x0000, lo: 0x02}, {value: 0x0040, lo: 0x80, hi: 0x80}, {value: 0x0008, lo: 0x81, hi: 0xbf}, - // Block 0x62, offset 0x32a + // Block 0x61, offset 0x30f {value: 0x0000, lo: 0x09}, {value: 0x0008, lo: 0x80, hi: 0x96}, {value: 0x0040, lo: 0x97, hi: 0x98}, - {value: 0x1308, lo: 0x99, hi: 0x9a}, + {value: 0x3308, lo: 0x99, hi: 0x9a}, {value: 0x29e2, lo: 0x9b, hi: 0x9b}, {value: 0x2a0a, lo: 0x9c, hi: 0x9c}, {value: 0x0008, lo: 0x9d, hi: 0x9e}, {value: 0x2a31, lo: 0x9f, hi: 0x9f}, {value: 0x0018, lo: 0xa0, hi: 0xa0}, {value: 0x0008, lo: 0xa1, hi: 0xbf}, - // Block 0x63, offset 0x334 + // Block 0x62, offset 0x319 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0xbe}, {value: 0x2a69, lo: 0xbf, hi: 0xbf}, - // Block 0x64, offset 0x337 + // Block 0x63, offset 0x31c {value: 0x0000, lo: 0x0e}, {value: 0x0040, lo: 0x80, hi: 0x84}, - {value: 0x0008, lo: 0x85, hi: 0xad}, - {value: 0x0040, lo: 0xae, hi: 0xb0}, + {value: 0x0008, lo: 0x85, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xb0}, {value: 0x2a1d, lo: 0xb1, hi: 0xb1}, {value: 0x2a3d, lo: 0xb2, hi: 0xb2}, {value: 0x2a5d, lo: 0xb3, hi: 0xb3}, @@ -3279,150 +3284,150 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x2afd, lo: 0xba, hi: 0xbb}, {value: 0x2b1d, lo: 0xbc, hi: 0xbd}, {value: 0x2afd, lo: 0xbe, hi: 0xbf}, - // Block 0x65, offset 0x346 + // Block 0x64, offset 0x32b {value: 0x0000, lo: 0x03}, {value: 0x0018, lo: 0x80, hi: 0xa3}, {value: 0x0040, lo: 0xa4, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0x66, offset 0x34a + // Block 0x65, offset 0x32f {value: 0x0030, lo: 0x04}, {value: 0x2aa2, lo: 0x80, hi: 0x9d}, {value: 0x305a, lo: 0x9e, hi: 0x9e}, {value: 0x0040, lo: 0x9f, hi: 0x9f}, {value: 0x30a2, lo: 0xa0, hi: 0xbf}, - // Block 0x67, offset 0x34f + // Block 0x66, offset 0x334 {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0x95}, - {value: 0x0040, lo: 0x96, hi: 0xbf}, - // Block 0x68, offset 0x352 + {value: 0x0008, lo: 0x80, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xbf}, + // Block 0x67, offset 0x337 {value: 0x0000, lo: 0x03}, {value: 0x0008, lo: 0x80, hi: 0x8c}, {value: 0x0040, lo: 0x8d, hi: 0x8f}, {value: 0x0018, lo: 0x90, hi: 0xbf}, - // Block 0x69, offset 0x356 + // Block 0x68, offset 0x33b {value: 0x0000, lo: 0x04}, {value: 0x0018, lo: 0x80, hi: 0x86}, {value: 0x0040, lo: 0x87, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0xbd}, {value: 0x0018, lo: 0xbe, hi: 0xbf}, - // Block 0x6a, offset 0x35b + // Block 0x69, offset 0x340 {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0x8c}, {value: 0x0018, lo: 0x8d, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0xab}, {value: 0x0040, lo: 0xac, hi: 0xbf}, - // Block 0x6b, offset 0x360 + // Block 0x6a, offset 0x345 {value: 0x0000, lo: 0x05}, {value: 0x0008, lo: 0x80, hi: 0xa5}, {value: 0x0018, lo: 0xa6, hi: 0xaf}, - {value: 0x1308, lo: 0xb0, hi: 0xb1}, + {value: 0x3308, lo: 0xb0, hi: 0xb1}, {value: 0x0018, lo: 0xb2, hi: 0xb7}, {value: 0x0040, lo: 0xb8, hi: 0xbf}, - // Block 0x6c, offset 0x366 + // Block 0x6b, offset 0x34b {value: 0x0000, lo: 0x05}, {value: 0x0040, lo: 0x80, hi: 0xb6}, {value: 0x0008, lo: 0xb7, hi: 0xb7}, {value: 0x2009, lo: 0xb8, hi: 0xb8}, {value: 0x6e89, lo: 0xb9, hi: 0xb9}, {value: 0x0008, lo: 0xba, hi: 0xbf}, - // Block 0x6d, offset 0x36c + // Block 0x6c, offset 0x351 {value: 0x0000, lo: 0x0e}, {value: 0x0008, lo: 0x80, hi: 0x81}, - {value: 0x1308, lo: 0x82, hi: 0x82}, + {value: 0x3308, lo: 0x82, hi: 0x82}, {value: 0x0008, lo: 0x83, hi: 0x85}, - {value: 0x1b08, lo: 0x86, hi: 0x86}, + {value: 0x3b08, lo: 0x86, hi: 0x86}, {value: 0x0008, lo: 0x87, hi: 0x8a}, - {value: 0x1308, lo: 0x8b, hi: 0x8b}, + {value: 0x3308, lo: 0x8b, hi: 0x8b}, {value: 0x0008, lo: 0x8c, hi: 0xa2}, - {value: 0x1008, lo: 0xa3, hi: 0xa4}, - {value: 0x1308, lo: 0xa5, hi: 0xa6}, - {value: 0x1008, lo: 0xa7, hi: 0xa7}, + {value: 0x3008, lo: 0xa3, hi: 0xa4}, + {value: 0x3308, lo: 0xa5, hi: 0xa6}, + {value: 0x3008, lo: 0xa7, hi: 0xa7}, {value: 0x0018, lo: 0xa8, hi: 0xab}, {value: 0x0040, lo: 0xac, hi: 0xaf}, {value: 0x0018, lo: 0xb0, hi: 0xb9}, {value: 0x0040, lo: 0xba, hi: 0xbf}, - // Block 0x6e, offset 0x37b + // Block 0x6d, offset 0x360 {value: 0x0000, lo: 0x05}, {value: 0x0208, lo: 0x80, hi: 0xb1}, {value: 0x0108, lo: 0xb2, hi: 0xb2}, {value: 0x0008, lo: 0xb3, hi: 0xb3}, {value: 0x0018, lo: 0xb4, hi: 0xb7}, {value: 0x0040, lo: 0xb8, hi: 0xbf}, - // Block 0x6f, offset 0x381 + // Block 0x6e, offset 0x366 {value: 0x0000, lo: 0x03}, - {value: 0x1008, lo: 0x80, hi: 0x81}, + {value: 0x3008, lo: 0x80, hi: 0x81}, {value: 0x0008, lo: 0x82, hi: 0xb3}, - {value: 0x1008, lo: 0xb4, hi: 0xbf}, - // Block 0x70, offset 0x385 + {value: 0x3008, lo: 0xb4, hi: 0xbf}, + // Block 0x6f, offset 0x36a {value: 0x0000, lo: 0x0e}, - {value: 0x1008, lo: 0x80, hi: 0x83}, - {value: 0x1b08, lo: 0x84, hi: 0x84}, - {value: 0x1308, lo: 0x85, hi: 0x85}, + {value: 0x3008, lo: 0x80, hi: 0x83}, + {value: 0x3b08, lo: 0x84, hi: 0x84}, + {value: 0x3308, lo: 0x85, hi: 0x85}, {value: 0x0040, lo: 0x86, hi: 0x8d}, {value: 0x0018, lo: 0x8e, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0x99}, {value: 0x0040, lo: 0x9a, hi: 0x9f}, - {value: 0x1308, lo: 0xa0, hi: 0xb1}, + {value: 0x3308, lo: 0xa0, hi: 0xb1}, {value: 0x0008, lo: 0xb2, hi: 0xb7}, {value: 0x0018, lo: 0xb8, hi: 0xba}, {value: 0x0008, lo: 0xbb, hi: 0xbb}, {value: 0x0018, lo: 0xbc, hi: 0xbc}, {value: 0x0008, lo: 0xbd, hi: 0xbd}, {value: 0x0040, lo: 0xbe, hi: 0xbf}, - // Block 0x71, offset 0x394 + // Block 0x70, offset 0x379 {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0xa5}, - {value: 0x1308, lo: 0xa6, hi: 0xad}, + {value: 0x3308, lo: 0xa6, hi: 0xad}, {value: 0x0018, lo: 0xae, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0x72, offset 0x399 + // Block 0x71, offset 0x37e {value: 0x0000, lo: 0x07}, {value: 0x0008, lo: 0x80, hi: 0x86}, - {value: 0x1308, lo: 0x87, hi: 0x91}, - {value: 0x1008, lo: 0x92, hi: 0x92}, - {value: 0x1808, lo: 0x93, hi: 0x93}, + {value: 0x3308, lo: 0x87, hi: 0x91}, + {value: 0x3008, lo: 0x92, hi: 0x92}, + {value: 0x3808, lo: 0x93, hi: 0x93}, {value: 0x0040, lo: 0x94, hi: 0x9e}, {value: 0x0018, lo: 0x9f, hi: 0xbc}, {value: 0x0040, lo: 0xbd, hi: 0xbf}, - // Block 0x73, offset 0x3a1 + // Block 0x72, offset 0x386 {value: 0x0000, lo: 0x09}, - {value: 0x1308, lo: 0x80, hi: 0x82}, - {value: 0x1008, lo: 0x83, hi: 0x83}, + {value: 0x3308, lo: 0x80, hi: 0x82}, + {value: 0x3008, lo: 0x83, hi: 0x83}, {value: 0x0008, lo: 0x84, hi: 0xb2}, - {value: 0x1308, lo: 0xb3, hi: 0xb3}, - {value: 0x1008, lo: 0xb4, hi: 0xb5}, - {value: 0x1308, lo: 0xb6, hi: 0xb9}, - {value: 0x1008, lo: 0xba, hi: 0xbb}, - {value: 0x1308, lo: 0xbc, hi: 0xbc}, - {value: 0x1008, lo: 0xbd, hi: 0xbf}, - // Block 0x74, offset 0x3ab + {value: 0x3308, lo: 0xb3, hi: 0xb3}, + {value: 0x3008, lo: 0xb4, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xb9}, + {value: 0x3008, lo: 0xba, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbc}, + {value: 0x3008, lo: 0xbd, hi: 0xbf}, + // Block 0x73, offset 0x390 {value: 0x0000, lo: 0x0a}, - {value: 0x1808, lo: 0x80, hi: 0x80}, + {value: 0x3808, lo: 0x80, hi: 0x80}, {value: 0x0018, lo: 0x81, hi: 0x8d}, {value: 0x0040, lo: 0x8e, hi: 0x8e}, {value: 0x0008, lo: 0x8f, hi: 0x99}, {value: 0x0040, lo: 0x9a, hi: 0x9d}, {value: 0x0018, lo: 0x9e, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xa4}, - {value: 0x1308, lo: 0xa5, hi: 0xa5}, + {value: 0x3308, lo: 0xa5, hi: 0xa5}, {value: 0x0008, lo: 0xa6, hi: 0xbe}, {value: 0x0040, lo: 0xbf, hi: 0xbf}, - // Block 0x75, offset 0x3b6 + // Block 0x74, offset 0x39b {value: 0x0000, lo: 0x07}, {value: 0x0008, lo: 0x80, hi: 0xa8}, - {value: 0x1308, lo: 0xa9, hi: 0xae}, - {value: 0x1008, lo: 0xaf, hi: 0xb0}, - {value: 0x1308, lo: 0xb1, hi: 0xb2}, - {value: 0x1008, lo: 0xb3, hi: 0xb4}, - {value: 0x1308, lo: 0xb5, hi: 0xb6}, + {value: 0x3308, lo: 0xa9, hi: 0xae}, + {value: 0x3008, lo: 0xaf, hi: 0xb0}, + {value: 0x3308, lo: 0xb1, hi: 0xb2}, + {value: 0x3008, lo: 0xb3, hi: 0xb4}, + {value: 0x3308, lo: 0xb5, hi: 0xb6}, {value: 0x0040, lo: 0xb7, hi: 0xbf}, - // Block 0x76, offset 0x3be + // Block 0x75, offset 0x3a3 {value: 0x0000, lo: 0x10}, {value: 0x0008, lo: 0x80, hi: 0x82}, - {value: 0x1308, lo: 0x83, hi: 0x83}, + {value: 0x3308, lo: 0x83, hi: 0x83}, {value: 0x0008, lo: 0x84, hi: 0x8b}, - {value: 0x1308, lo: 0x8c, hi: 0x8c}, - {value: 0x1008, lo: 0x8d, hi: 0x8d}, + {value: 0x3308, lo: 0x8c, hi: 0x8c}, + {value: 0x3008, lo: 0x8d, hi: 0x8d}, {value: 0x0040, lo: 0x8e, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0x99}, {value: 0x0040, lo: 0x9a, hi: 0x9b}, @@ -3430,38 +3435,38 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0008, lo: 0xa0, hi: 0xb6}, {value: 0x0018, lo: 0xb7, hi: 0xb9}, {value: 0x0008, lo: 0xba, hi: 0xba}, - {value: 0x1008, lo: 0xbb, hi: 0xbb}, - {value: 0x1308, lo: 0xbc, hi: 0xbc}, - {value: 0x1008, lo: 0xbd, hi: 0xbd}, + {value: 0x3008, lo: 0xbb, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbc}, + {value: 0x3008, lo: 0xbd, hi: 0xbd}, {value: 0x0008, lo: 0xbe, hi: 0xbf}, - // Block 0x77, offset 0x3cf + // Block 0x76, offset 0x3b4 {value: 0x0000, lo: 0x08}, {value: 0x0008, lo: 0x80, hi: 0xaf}, - {value: 0x1308, lo: 0xb0, hi: 0xb0}, + {value: 0x3308, lo: 0xb0, hi: 0xb0}, {value: 0x0008, lo: 0xb1, hi: 0xb1}, - {value: 0x1308, lo: 0xb2, hi: 0xb4}, + {value: 0x3308, lo: 0xb2, hi: 0xb4}, {value: 0x0008, lo: 0xb5, hi: 0xb6}, - {value: 0x1308, lo: 0xb7, hi: 0xb8}, + {value: 0x3308, lo: 0xb7, hi: 0xb8}, {value: 0x0008, lo: 0xb9, hi: 0xbd}, - {value: 0x1308, lo: 0xbe, hi: 0xbf}, - // Block 0x78, offset 0x3d8 + {value: 0x3308, lo: 0xbe, hi: 0xbf}, + // Block 0x77, offset 0x3bd {value: 0x0000, lo: 0x0f}, {value: 0x0008, lo: 0x80, hi: 0x80}, - {value: 0x1308, lo: 0x81, hi: 0x81}, + {value: 0x3308, lo: 0x81, hi: 0x81}, {value: 0x0008, lo: 0x82, hi: 0x82}, {value: 0x0040, lo: 0x83, hi: 0x9a}, {value: 0x0008, lo: 0x9b, hi: 0x9d}, {value: 0x0018, lo: 0x9e, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xaa}, - {value: 0x1008, lo: 0xab, hi: 0xab}, - {value: 0x1308, lo: 0xac, hi: 0xad}, - {value: 0x1008, lo: 0xae, hi: 0xaf}, + {value: 0x3008, lo: 0xab, hi: 0xab}, + {value: 0x3308, lo: 0xac, hi: 0xad}, + {value: 0x3008, lo: 0xae, hi: 0xaf}, {value: 0x0018, lo: 0xb0, hi: 0xb1}, {value: 0x0008, lo: 0xb2, hi: 0xb4}, - {value: 0x1008, lo: 0xb5, hi: 0xb5}, - {value: 0x1b08, lo: 0xb6, hi: 0xb6}, + {value: 0x3008, lo: 0xb5, hi: 0xb5}, + {value: 0x3b08, lo: 0xb6, hi: 0xb6}, {value: 0x0040, lo: 0xb7, hi: 0xbf}, - // Block 0x79, offset 0x3e8 + // Block 0x78, offset 0x3cd {value: 0x0000, lo: 0x0c}, {value: 0x0040, lo: 0x80, hi: 0x80}, {value: 0x0008, lo: 0x81, hi: 0x86}, @@ -3475,7 +3480,7 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0008, lo: 0xa8, hi: 0xae}, {value: 0x0040, lo: 0xaf, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0x7a, offset 0x3f5 + // Block 0x79, offset 0x3da {value: 0x0000, lo: 0x09}, {value: 0x0008, lo: 0x80, hi: 0x9a}, {value: 0x0018, lo: 0x9b, hi: 0x9b}, @@ -3486,54 +3491,54 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0008, lo: 0xa0, hi: 0xa5}, {value: 0x0040, lo: 0xa6, hi: 0xaf}, {value: 0x4495, lo: 0xb0, hi: 0xbf}, - // Block 0x7b, offset 0x3ff + // Block 0x7a, offset 0x3e4 {value: 0x0000, lo: 0x04}, {value: 0x44b5, lo: 0x80, hi: 0x8f}, {value: 0x44d5, lo: 0x90, hi: 0x9f}, {value: 0x44f5, lo: 0xa0, hi: 0xaf}, {value: 0x44d5, lo: 0xb0, hi: 0xbf}, - // Block 0x7c, offset 0x404 + // Block 0x7b, offset 0x3e9 {value: 0x0000, lo: 0x0c}, {value: 0x0008, lo: 0x80, hi: 0xa2}, - {value: 0x1008, lo: 0xa3, hi: 0xa4}, - {value: 0x1308, lo: 0xa5, hi: 0xa5}, - {value: 0x1008, lo: 0xa6, hi: 0xa7}, - {value: 0x1308, lo: 0xa8, hi: 0xa8}, - {value: 0x1008, lo: 0xa9, hi: 0xaa}, + {value: 0x3008, lo: 0xa3, hi: 0xa4}, + {value: 0x3308, lo: 0xa5, hi: 0xa5}, + {value: 0x3008, lo: 0xa6, hi: 0xa7}, + {value: 0x3308, lo: 0xa8, hi: 0xa8}, + {value: 0x3008, lo: 0xa9, hi: 0xaa}, {value: 0x0018, lo: 0xab, hi: 0xab}, - {value: 0x1008, lo: 0xac, hi: 0xac}, - {value: 0x1b08, lo: 0xad, hi: 0xad}, + {value: 0x3008, lo: 0xac, hi: 0xac}, + {value: 0x3b08, lo: 0xad, hi: 0xad}, {value: 0x0040, lo: 0xae, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xb9}, {value: 0x0040, lo: 0xba, hi: 0xbf}, - // Block 0x7d, offset 0x411 + // Block 0x7c, offset 0x3f6 {value: 0x0000, lo: 0x03}, {value: 0x0008, lo: 0x80, hi: 0xa3}, {value: 0x0040, lo: 0xa4, hi: 0xaf}, {value: 0x0018, lo: 0xb0, hi: 0xbf}, - // Block 0x7e, offset 0x415 + // Block 0x7d, offset 0x3fa {value: 0x0000, lo: 0x04}, {value: 0x0018, lo: 0x80, hi: 0x86}, {value: 0x0040, lo: 0x87, hi: 0x8a}, {value: 0x0018, lo: 0x8b, hi: 0xbb}, {value: 0x0040, lo: 0xbc, hi: 0xbf}, - // Block 0x7f, offset 0x41a + // Block 0x7e, offset 0x3ff {value: 0x0020, lo: 0x01}, {value: 0x4515, lo: 0x80, hi: 0xbf}, - // Block 0x80, offset 0x41c + // Block 0x7f, offset 0x401 {value: 0x0020, lo: 0x03}, {value: 0x4d15, lo: 0x80, hi: 0x94}, {value: 0x4ad5, lo: 0x95, hi: 0x95}, {value: 0x4fb5, lo: 0x96, hi: 0xbf}, - // Block 0x81, offset 0x420 + // Block 0x80, offset 0x405 {value: 0x0020, lo: 0x01}, {value: 0x54f5, lo: 0x80, hi: 0xbf}, - // Block 0x82, offset 0x422 + // Block 0x81, offset 0x407 {value: 0x0020, lo: 0x03}, {value: 0x5cf5, lo: 0x80, hi: 0x84}, {value: 0x5655, lo: 0x85, hi: 0x85}, {value: 0x5d95, lo: 0x86, hi: 0xbf}, - // Block 0x83, offset 0x426 + // Block 0x82, offset 0x40b {value: 0x0020, lo: 0x08}, {value: 0x6b55, lo: 0x80, hi: 0x8f}, {value: 0x6d15, lo: 0x90, hi: 0x90}, @@ -3543,19 +3548,19 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0040, lo: 0xae, hi: 0xae}, {value: 0x0040, lo: 0xaf, hi: 0xaf}, {value: 0x70d5, lo: 0xb0, hi: 0xbf}, - // Block 0x84, offset 0x42f + // Block 0x83, offset 0x414 {value: 0x0020, lo: 0x05}, {value: 0x72d5, lo: 0x80, hi: 0xad}, {value: 0x6535, lo: 0xae, hi: 0xae}, {value: 0x7895, lo: 0xaf, hi: 0xb5}, {value: 0x6f55, lo: 0xb6, hi: 0xb6}, {value: 0x7975, lo: 0xb7, hi: 0xbf}, - // Block 0x85, offset 0x435 + // Block 0x84, offset 0x41a {value: 0x0028, lo: 0x03}, {value: 0x7c21, lo: 0x80, hi: 0x82}, {value: 0x7be1, lo: 0x83, hi: 0x83}, {value: 0x7c99, lo: 0x84, hi: 0xbf}, - // Block 0x86, offset 0x439 + // Block 0x85, offset 0x41e {value: 0x0038, lo: 0x0f}, {value: 0x9db1, lo: 0x80, hi: 0x83}, {value: 0x9e59, lo: 0x84, hi: 0x85}, @@ -3572,7 +3577,7 @@ var idnaSparseValues = [1876]valueRange{ {value: 0xa869, lo: 0xbc, hi: 0xbc}, {value: 0xa7f9, lo: 0xbd, hi: 0xbd}, {value: 0xa8d9, lo: 0xbe, hi: 0xbf}, - // Block 0x87, offset 0x449 + // Block 0x86, offset 0x42e {value: 0x0000, lo: 0x09}, {value: 0x0008, lo: 0x80, hi: 0x8b}, {value: 0x0040, lo: 0x8c, hi: 0x8c}, @@ -3583,24 +3588,24 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0008, lo: 0xbc, hi: 0xbd}, {value: 0x0040, lo: 0xbe, hi: 0xbe}, {value: 0x0008, lo: 0xbf, hi: 0xbf}, - // Block 0x88, offset 0x453 + // Block 0x87, offset 0x438 {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0x8d}, {value: 0x0040, lo: 0x8e, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0x9d}, {value: 0x0040, lo: 0x9e, hi: 0xbf}, - // Block 0x89, offset 0x458 + // Block 0x88, offset 0x43d {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0xba}, {value: 0x0040, lo: 0xbb, hi: 0xbf}, - // Block 0x8a, offset 0x45b + // Block 0x89, offset 0x440 {value: 0x0000, lo: 0x05}, {value: 0x0018, lo: 0x80, hi: 0x82}, {value: 0x0040, lo: 0x83, hi: 0x86}, {value: 0x0018, lo: 0x87, hi: 0xb3}, {value: 0x0040, lo: 0xb4, hi: 0xb6}, {value: 0x0018, lo: 0xb7, hi: 0xbf}, - // Block 0x8b, offset 0x461 + // Block 0x8a, offset 0x446 {value: 0x0000, lo: 0x06}, {value: 0x0018, lo: 0x80, hi: 0x8e}, {value: 0x0040, lo: 0x8f, hi: 0x8f}, @@ -3608,31 +3613,31 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0040, lo: 0x9c, hi: 0x9f}, {value: 0x0018, lo: 0xa0, hi: 0xa0}, {value: 0x0040, lo: 0xa1, hi: 0xbf}, - // Block 0x8c, offset 0x468 + // Block 0x8b, offset 0x44d {value: 0x0000, lo: 0x04}, {value: 0x0040, lo: 0x80, hi: 0x8f}, {value: 0x0018, lo: 0x90, hi: 0xbc}, - {value: 0x1308, lo: 0xbd, hi: 0xbd}, + {value: 0x3308, lo: 0xbd, hi: 0xbd}, {value: 0x0040, lo: 0xbe, hi: 0xbf}, - // Block 0x8d, offset 0x46d + // Block 0x8c, offset 0x452 {value: 0x0000, lo: 0x03}, {value: 0x0008, lo: 0x80, hi: 0x9c}, {value: 0x0040, lo: 0x9d, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xbf}, - // Block 0x8e, offset 0x471 + // Block 0x8d, offset 0x456 {value: 0x0000, lo: 0x05}, {value: 0x0008, lo: 0x80, hi: 0x90}, {value: 0x0040, lo: 0x91, hi: 0x9f}, - {value: 0x1308, lo: 0xa0, hi: 0xa0}, + {value: 0x3308, lo: 0xa0, hi: 0xa0}, {value: 0x0018, lo: 0xa1, hi: 0xbb}, {value: 0x0040, lo: 0xbc, hi: 0xbf}, - // Block 0x8f, offset 0x477 + // Block 0x8e, offset 0x45c {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0x9f}, {value: 0x0018, lo: 0xa0, hi: 0xa3}, - {value: 0x0040, lo: 0xa4, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0x90, offset 0x47c + {value: 0x0040, lo: 0xa4, hi: 0xac}, + {value: 0x0008, lo: 0xad, hi: 0xbf}, + // Block 0x8f, offset 0x461 {value: 0x0000, lo: 0x08}, {value: 0x0008, lo: 0x80, hi: 0x80}, {value: 0x0018, lo: 0x81, hi: 0x81}, @@ -3640,22 +3645,22 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0018, lo: 0x8a, hi: 0x8a}, {value: 0x0040, lo: 0x8b, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0xb5}, - {value: 0x1308, lo: 0xb6, hi: 0xba}, + {value: 0x3308, lo: 0xb6, hi: 0xba}, {value: 0x0040, lo: 0xbb, hi: 0xbf}, - // Block 0x91, offset 0x485 + // Block 0x90, offset 0x46a {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0x9d}, {value: 0x0040, lo: 0x9e, hi: 0x9e}, {value: 0x0018, lo: 0x9f, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xbf}, - // Block 0x92, offset 0x48a + // Block 0x91, offset 0x46f {value: 0x0000, lo: 0x05}, {value: 0x0008, lo: 0x80, hi: 0x83}, {value: 0x0040, lo: 0x84, hi: 0x87}, {value: 0x0008, lo: 0x88, hi: 0x8f}, {value: 0x0018, lo: 0x90, hi: 0x95}, {value: 0x0040, lo: 0x96, hi: 0xbf}, - // Block 0x93, offset 0x490 + // Block 0x92, offset 0x475 {value: 0x0000, lo: 0x06}, {value: 0xe145, lo: 0x80, hi: 0x87}, {value: 0xe1c5, lo: 0x88, hi: 0x8f}, @@ -3663,7 +3668,7 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x8ad5, lo: 0x98, hi: 0x9f}, {value: 0x8aed, lo: 0xa0, hi: 0xa7}, {value: 0x0008, lo: 0xa8, hi: 0xbf}, - // Block 0x94, offset 0x497 + // Block 0x93, offset 0x47c {value: 0x0000, lo: 0x06}, {value: 0x0008, lo: 0x80, hi: 0x9d}, {value: 0x0040, lo: 0x9e, hi: 0x9f}, @@ -3671,7 +3676,7 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0040, lo: 0xaa, hi: 0xaf}, {value: 0x8aed, lo: 0xb0, hi: 0xb7}, {value: 0x8ad5, lo: 0xb8, hi: 0xbf}, - // Block 0x95, offset 0x49e + // Block 0x94, offset 0x483 {value: 0x0000, lo: 0x06}, {value: 0xe145, lo: 0x80, hi: 0x87}, {value: 0xe1c5, lo: 0x88, hi: 0x8f}, @@ -3679,173 +3684,176 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0040, lo: 0x94, hi: 0x97}, {value: 0x0008, lo: 0x98, hi: 0xbb}, {value: 0x0040, lo: 0xbc, hi: 0xbf}, - // Block 0x96, offset 0x4a5 + // Block 0x95, offset 0x48a {value: 0x0000, lo: 0x03}, {value: 0x0008, lo: 0x80, hi: 0xa7}, {value: 0x0040, lo: 0xa8, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0x97, offset 0x4a9 + // Block 0x96, offset 0x48e {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0xa3}, {value: 0x0040, lo: 0xa4, hi: 0xae}, {value: 0x0018, lo: 0xaf, hi: 0xaf}, {value: 0x0040, lo: 0xb0, hi: 0xbf}, - // Block 0x98, offset 0x4ae + // Block 0x97, offset 0x493 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0xb6}, {value: 0x0040, lo: 0xb7, hi: 0xbf}, - // Block 0x99, offset 0x4b1 + // Block 0x98, offset 0x496 {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0x95}, {value: 0x0040, lo: 0x96, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xa7}, {value: 0x0040, lo: 0xa8, hi: 0xbf}, - // Block 0x9a, offset 0x4b6 + // Block 0x99, offset 0x49b {value: 0x0000, lo: 0x0b}, - {value: 0x0008, lo: 0x80, hi: 0x85}, + {value: 0x0808, lo: 0x80, hi: 0x85}, {value: 0x0040, lo: 0x86, hi: 0x87}, - {value: 0x0008, lo: 0x88, hi: 0x88}, + {value: 0x0808, lo: 0x88, hi: 0x88}, {value: 0x0040, lo: 0x89, hi: 0x89}, - {value: 0x0008, lo: 0x8a, hi: 0xb5}, + {value: 0x0808, lo: 0x8a, hi: 0xb5}, {value: 0x0040, lo: 0xb6, hi: 0xb6}, - {value: 0x0008, lo: 0xb7, hi: 0xb8}, + {value: 0x0808, lo: 0xb7, hi: 0xb8}, {value: 0x0040, lo: 0xb9, hi: 0xbb}, - {value: 0x0008, lo: 0xbc, hi: 0xbc}, + {value: 0x0808, lo: 0xbc, hi: 0xbc}, {value: 0x0040, lo: 0xbd, hi: 0xbe}, - {value: 0x0008, lo: 0xbf, hi: 0xbf}, - // Block 0x9b, offset 0x4c2 + {value: 0x0808, lo: 0xbf, hi: 0xbf}, + // Block 0x9a, offset 0x4a7 {value: 0x0000, lo: 0x05}, - {value: 0x0008, lo: 0x80, hi: 0x95}, + {value: 0x0808, lo: 0x80, hi: 0x95}, {value: 0x0040, lo: 0x96, hi: 0x96}, - {value: 0x0018, lo: 0x97, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xb6}, - {value: 0x0018, lo: 0xb7, hi: 0xbf}, - // Block 0x9c, offset 0x4c8 + {value: 0x0818, lo: 0x97, hi: 0x9f}, + {value: 0x0808, lo: 0xa0, hi: 0xb6}, + {value: 0x0818, lo: 0xb7, hi: 0xbf}, + // Block 0x9b, offset 0x4ad {value: 0x0000, lo: 0x04}, - {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x0808, lo: 0x80, hi: 0x9e}, {value: 0x0040, lo: 0x9f, hi: 0xa6}, - {value: 0x0018, lo: 0xa7, hi: 0xaf}, + {value: 0x0818, lo: 0xa7, hi: 0xaf}, {value: 0x0040, lo: 0xb0, hi: 0xbf}, - // Block 0x9d, offset 0x4cd + // Block 0x9c, offset 0x4b2 {value: 0x0000, lo: 0x06}, {value: 0x0040, lo: 0x80, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xb2}, + {value: 0x0808, lo: 0xa0, hi: 0xb2}, {value: 0x0040, lo: 0xb3, hi: 0xb3}, - {value: 0x0008, lo: 0xb4, hi: 0xb5}, + {value: 0x0808, lo: 0xb4, hi: 0xb5}, {value: 0x0040, lo: 0xb6, hi: 0xba}, - {value: 0x0018, lo: 0xbb, hi: 0xbf}, - // Block 0x9e, offset 0x4d4 + {value: 0x0818, lo: 0xbb, hi: 0xbf}, + // Block 0x9d, offset 0x4b9 {value: 0x0000, lo: 0x07}, - {value: 0x0008, lo: 0x80, hi: 0x95}, - {value: 0x0018, lo: 0x96, hi: 0x9b}, + {value: 0x0808, lo: 0x80, hi: 0x95}, + {value: 0x0818, lo: 0x96, hi: 0x9b}, {value: 0x0040, lo: 0x9c, hi: 0x9e}, {value: 0x0018, lo: 0x9f, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xb9}, + {value: 0x0808, lo: 0xa0, hi: 0xb9}, {value: 0x0040, lo: 0xba, hi: 0xbe}, - {value: 0x0018, lo: 0xbf, hi: 0xbf}, - // Block 0x9f, offset 0x4dc + {value: 0x0818, lo: 0xbf, hi: 0xbf}, + // Block 0x9e, offset 0x4c1 {value: 0x0000, lo: 0x04}, - {value: 0x0008, lo: 0x80, hi: 0xb7}, + {value: 0x0808, lo: 0x80, hi: 0xb7}, {value: 0x0040, lo: 0xb8, hi: 0xbb}, - {value: 0x0018, lo: 0xbc, hi: 0xbd}, - {value: 0x0008, lo: 0xbe, hi: 0xbf}, - // Block 0xa0, offset 0x4e1 + {value: 0x0818, lo: 0xbc, hi: 0xbd}, + {value: 0x0808, lo: 0xbe, hi: 0xbf}, + // Block 0x9f, offset 0x4c6 {value: 0x0000, lo: 0x03}, - {value: 0x0018, lo: 0x80, hi: 0x8f}, + {value: 0x0818, lo: 0x80, hi: 0x8f}, {value: 0x0040, lo: 0x90, hi: 0x91}, - {value: 0x0018, lo: 0x92, hi: 0xbf}, - // Block 0xa1, offset 0x4e5 + {value: 0x0818, lo: 0x92, hi: 0xbf}, + // Block 0xa0, offset 0x4ca {value: 0x0000, lo: 0x0f}, - {value: 0x0008, lo: 0x80, hi: 0x80}, - {value: 0x1308, lo: 0x81, hi: 0x83}, + {value: 0x0808, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x83}, {value: 0x0040, lo: 0x84, hi: 0x84}, - {value: 0x1308, lo: 0x85, hi: 0x86}, + {value: 0x3308, lo: 0x85, hi: 0x86}, {value: 0x0040, lo: 0x87, hi: 0x8b}, - {value: 0x1308, lo: 0x8c, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x93}, + {value: 0x3308, lo: 0x8c, hi: 0x8f}, + {value: 0x0808, lo: 0x90, hi: 0x93}, {value: 0x0040, lo: 0x94, hi: 0x94}, - {value: 0x0008, lo: 0x95, hi: 0x97}, + {value: 0x0808, lo: 0x95, hi: 0x97}, {value: 0x0040, lo: 0x98, hi: 0x98}, - {value: 0x0008, lo: 0x99, hi: 0xb3}, + {value: 0x0808, lo: 0x99, hi: 0xb3}, {value: 0x0040, lo: 0xb4, hi: 0xb7}, - {value: 0x1308, lo: 0xb8, hi: 0xba}, + {value: 0x3308, lo: 0xb8, hi: 0xba}, {value: 0x0040, lo: 0xbb, hi: 0xbe}, - {value: 0x1b08, lo: 0xbf, hi: 0xbf}, - // Block 0xa2, offset 0x4f5 + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xa1, offset 0x4da {value: 0x0000, lo: 0x06}, - {value: 0x0018, lo: 0x80, hi: 0x87}, + {value: 0x0818, lo: 0x80, hi: 0x87}, {value: 0x0040, lo: 0x88, hi: 0x8f}, - {value: 0x0018, lo: 0x90, hi: 0x98}, + {value: 0x0818, lo: 0x90, hi: 0x98}, {value: 0x0040, lo: 0x99, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xbc}, - {value: 0x0018, lo: 0xbd, hi: 0xbf}, - // Block 0xa3, offset 0x4fc + {value: 0x0808, lo: 0xa0, hi: 0xbc}, + {value: 0x0818, lo: 0xbd, hi: 0xbf}, + // Block 0xa2, offset 0x4e1 {value: 0x0000, lo: 0x03}, - {value: 0x0008, lo: 0x80, hi: 0x9c}, - {value: 0x0018, lo: 0x9d, hi: 0x9f}, + {value: 0x0808, lo: 0x80, hi: 0x9c}, + {value: 0x0818, lo: 0x9d, hi: 0x9f}, {value: 0x0040, lo: 0xa0, hi: 0xbf}, - // Block 0xa4, offset 0x500 + // Block 0xa3, offset 0x4e5 {value: 0x0000, lo: 0x03}, - {value: 0x0008, lo: 0x80, hi: 0xb5}, + {value: 0x0808, lo: 0x80, hi: 0xb5}, {value: 0x0040, lo: 0xb6, hi: 0xb8}, {value: 0x0018, lo: 0xb9, hi: 0xbf}, - // Block 0xa5, offset 0x504 + // Block 0xa4, offset 0x4e9 {value: 0x0000, lo: 0x06}, - {value: 0x0008, lo: 0x80, hi: 0x95}, + {value: 0x0808, lo: 0x80, hi: 0x95}, {value: 0x0040, lo: 0x96, hi: 0x97}, - {value: 0x0018, lo: 0x98, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xb2}, + {value: 0x0818, lo: 0x98, hi: 0x9f}, + {value: 0x0808, lo: 0xa0, hi: 0xb2}, {value: 0x0040, lo: 0xb3, hi: 0xb7}, - {value: 0x0018, lo: 0xb8, hi: 0xbf}, - // Block 0xa6, offset 0x50b + {value: 0x0818, lo: 0xb8, hi: 0xbf}, + // Block 0xa5, offset 0x4f0 + {value: 0x0000, lo: 0x01}, + {value: 0x0808, lo: 0x80, hi: 0xbf}, + // Block 0xa6, offset 0x4f2 {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0808, lo: 0x80, hi: 0x88}, {value: 0x0040, lo: 0x89, hi: 0xbf}, - // Block 0xa7, offset 0x50e + // Block 0xa7, offset 0x4f5 {value: 0x0000, lo: 0x02}, {value: 0x03dd, lo: 0x80, hi: 0xb2}, {value: 0x0040, lo: 0xb3, hi: 0xbf}, - // Block 0xa8, offset 0x511 + // Block 0xa8, offset 0x4f8 {value: 0x0000, lo: 0x03}, - {value: 0x0008, lo: 0x80, hi: 0xb2}, + {value: 0x0808, lo: 0x80, hi: 0xb2}, {value: 0x0040, lo: 0xb3, hi: 0xb9}, - {value: 0x0018, lo: 0xba, hi: 0xbf}, - // Block 0xa9, offset 0x515 + {value: 0x0818, lo: 0xba, hi: 0xbf}, + // Block 0xa9, offset 0x4fc {value: 0x0000, lo: 0x03}, {value: 0x0040, lo: 0x80, hi: 0x9f}, - {value: 0x0018, lo: 0xa0, hi: 0xbe}, + {value: 0x0818, lo: 0xa0, hi: 0xbe}, {value: 0x0040, lo: 0xbf, hi: 0xbf}, - // Block 0xaa, offset 0x519 + // Block 0xaa, offset 0x500 {value: 0x0000, lo: 0x05}, - {value: 0x1008, lo: 0x80, hi: 0x80}, - {value: 0x1308, lo: 0x81, hi: 0x81}, - {value: 0x1008, lo: 0x82, hi: 0x82}, + {value: 0x3008, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x82}, {value: 0x0008, lo: 0x83, hi: 0xb7}, - {value: 0x1308, lo: 0xb8, hi: 0xbf}, - // Block 0xab, offset 0x51f + {value: 0x3308, lo: 0xb8, hi: 0xbf}, + // Block 0xab, offset 0x506 {value: 0x0000, lo: 0x08}, - {value: 0x1308, lo: 0x80, hi: 0x85}, - {value: 0x1b08, lo: 0x86, hi: 0x86}, + {value: 0x3308, lo: 0x80, hi: 0x85}, + {value: 0x3b08, lo: 0x86, hi: 0x86}, {value: 0x0018, lo: 0x87, hi: 0x8d}, {value: 0x0040, lo: 0x8e, hi: 0x91}, {value: 0x0018, lo: 0x92, hi: 0xa5}, {value: 0x0008, lo: 0xa6, hi: 0xaf}, {value: 0x0040, lo: 0xb0, hi: 0xbe}, - {value: 0x1b08, lo: 0xbf, hi: 0xbf}, - // Block 0xac, offset 0x528 + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xac, offset 0x50f {value: 0x0000, lo: 0x0b}, - {value: 0x1308, lo: 0x80, hi: 0x81}, - {value: 0x1008, lo: 0x82, hi: 0x82}, + {value: 0x3308, lo: 0x80, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x82}, {value: 0x0008, lo: 0x83, hi: 0xaf}, - {value: 0x1008, lo: 0xb0, hi: 0xb2}, - {value: 0x1308, lo: 0xb3, hi: 0xb6}, - {value: 0x1008, lo: 0xb7, hi: 0xb8}, - {value: 0x1b08, lo: 0xb9, hi: 0xb9}, - {value: 0x1308, lo: 0xba, hi: 0xba}, + {value: 0x3008, lo: 0xb0, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xb6}, + {value: 0x3008, lo: 0xb7, hi: 0xb8}, + {value: 0x3b08, lo: 0xb9, hi: 0xb9}, + {value: 0x3308, lo: 0xba, hi: 0xba}, {value: 0x0018, lo: 0xbb, hi: 0xbc}, {value: 0x0340, lo: 0xbd, hi: 0xbd}, {value: 0x0018, lo: 0xbe, hi: 0xbf}, - // Block 0xad, offset 0x534 + // Block 0xad, offset 0x51b {value: 0x0000, lo: 0x06}, {value: 0x0018, lo: 0x80, hi: 0x81}, {value: 0x0040, lo: 0x82, hi: 0x8f}, @@ -3853,39 +3861,39 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0040, lo: 0xa9, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xb9}, {value: 0x0040, lo: 0xba, hi: 0xbf}, - // Block 0xae, offset 0x53b + // Block 0xae, offset 0x522 {value: 0x0000, lo: 0x08}, - {value: 0x1308, lo: 0x80, hi: 0x82}, + {value: 0x3308, lo: 0x80, hi: 0x82}, {value: 0x0008, lo: 0x83, hi: 0xa6}, - {value: 0x1308, lo: 0xa7, hi: 0xab}, - {value: 0x1008, lo: 0xac, hi: 0xac}, - {value: 0x1308, lo: 0xad, hi: 0xb2}, - {value: 0x1b08, lo: 0xb3, hi: 0xb4}, + {value: 0x3308, lo: 0xa7, hi: 0xab}, + {value: 0x3008, lo: 0xac, hi: 0xac}, + {value: 0x3308, lo: 0xad, hi: 0xb2}, + {value: 0x3b08, lo: 0xb3, hi: 0xb4}, {value: 0x0040, lo: 0xb5, hi: 0xb5}, {value: 0x0008, lo: 0xb6, hi: 0xbf}, - // Block 0xaf, offset 0x544 + // Block 0xaf, offset 0x52b {value: 0x0000, lo: 0x07}, {value: 0x0018, lo: 0x80, hi: 0x83}, {value: 0x0040, lo: 0x84, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0xb2}, - {value: 0x1308, lo: 0xb3, hi: 0xb3}, + {value: 0x3308, lo: 0xb3, hi: 0xb3}, {value: 0x0018, lo: 0xb4, hi: 0xb5}, {value: 0x0008, lo: 0xb6, hi: 0xb6}, {value: 0x0040, lo: 0xb7, hi: 0xbf}, - // Block 0xb0, offset 0x54c + // Block 0xb0, offset 0x533 {value: 0x0000, lo: 0x06}, - {value: 0x1308, lo: 0x80, hi: 0x81}, - {value: 0x1008, lo: 0x82, hi: 0x82}, + {value: 0x3308, lo: 0x80, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x82}, {value: 0x0008, lo: 0x83, hi: 0xb2}, - {value: 0x1008, lo: 0xb3, hi: 0xb5}, - {value: 0x1308, lo: 0xb6, hi: 0xbe}, - {value: 0x1008, lo: 0xbf, hi: 0xbf}, - // Block 0xb1, offset 0x553 + {value: 0x3008, lo: 0xb3, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xbe}, + {value: 0x3008, lo: 0xbf, hi: 0xbf}, + // Block 0xb1, offset 0x53a {value: 0x0000, lo: 0x0d}, - {value: 0x1808, lo: 0x80, hi: 0x80}, + {value: 0x3808, lo: 0x80, hi: 0x80}, {value: 0x0008, lo: 0x81, hi: 0x84}, {value: 0x0018, lo: 0x85, hi: 0x89}, - {value: 0x1308, lo: 0x8a, hi: 0x8c}, + {value: 0x3308, lo: 0x8a, hi: 0x8c}, {value: 0x0018, lo: 0x8d, hi: 0x8d}, {value: 0x0040, lo: 0x8e, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0x9a}, @@ -3895,21 +3903,21 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0040, lo: 0xa0, hi: 0xa0}, {value: 0x0018, lo: 0xa1, hi: 0xb4}, {value: 0x0040, lo: 0xb5, hi: 0xbf}, - // Block 0xb2, offset 0x561 + // Block 0xb2, offset 0x548 {value: 0x0000, lo: 0x0c}, {value: 0x0008, lo: 0x80, hi: 0x91}, {value: 0x0040, lo: 0x92, hi: 0x92}, {value: 0x0008, lo: 0x93, hi: 0xab}, - {value: 0x1008, lo: 0xac, hi: 0xae}, - {value: 0x1308, lo: 0xaf, hi: 0xb1}, - {value: 0x1008, lo: 0xb2, hi: 0xb3}, - {value: 0x1308, lo: 0xb4, hi: 0xb4}, - {value: 0x1808, lo: 0xb5, hi: 0xb5}, - {value: 0x1308, lo: 0xb6, hi: 0xb7}, + {value: 0x3008, lo: 0xac, hi: 0xae}, + {value: 0x3308, lo: 0xaf, hi: 0xb1}, + {value: 0x3008, lo: 0xb2, hi: 0xb3}, + {value: 0x3308, lo: 0xb4, hi: 0xb4}, + {value: 0x3808, lo: 0xb5, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xb7}, {value: 0x0018, lo: 0xb8, hi: 0xbd}, - {value: 0x1308, lo: 0xbe, hi: 0xbe}, + {value: 0x3308, lo: 0xbe, hi: 0xbe}, {value: 0x0040, lo: 0xbf, hi: 0xbf}, - // Block 0xb3, offset 0x56e + // Block 0xb3, offset 0x555 {value: 0x0000, lo: 0x0c}, {value: 0x0008, lo: 0x80, hi: 0x86}, {value: 0x0040, lo: 0x87, hi: 0x87}, @@ -3923,28 +3931,28 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0018, lo: 0xa9, hi: 0xa9}, {value: 0x0040, lo: 0xaa, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0xb4, offset 0x57b + // Block 0xb4, offset 0x562 {value: 0x0000, lo: 0x08}, {value: 0x0008, lo: 0x80, hi: 0x9e}, - {value: 0x1308, lo: 0x9f, hi: 0x9f}, - {value: 0x1008, lo: 0xa0, hi: 0xa2}, - {value: 0x1308, lo: 0xa3, hi: 0xa9}, - {value: 0x1b08, lo: 0xaa, hi: 0xaa}, + {value: 0x3308, lo: 0x9f, hi: 0x9f}, + {value: 0x3008, lo: 0xa0, hi: 0xa2}, + {value: 0x3308, lo: 0xa3, hi: 0xa9}, + {value: 0x3b08, lo: 0xaa, hi: 0xaa}, {value: 0x0040, lo: 0xab, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xb9}, {value: 0x0040, lo: 0xba, hi: 0xbf}, - // Block 0xb5, offset 0x584 + // Block 0xb5, offset 0x56b {value: 0x0000, lo: 0x03}, {value: 0x0008, lo: 0x80, hi: 0xb4}, - {value: 0x1008, lo: 0xb5, hi: 0xb7}, - {value: 0x1308, lo: 0xb8, hi: 0xbf}, - // Block 0xb6, offset 0x588 + {value: 0x3008, lo: 0xb5, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xbf}, + // Block 0xb6, offset 0x56f {value: 0x0000, lo: 0x0d}, - {value: 0x1008, lo: 0x80, hi: 0x81}, - {value: 0x1b08, lo: 0x82, hi: 0x82}, - {value: 0x1308, lo: 0x83, hi: 0x84}, - {value: 0x1008, lo: 0x85, hi: 0x85}, - {value: 0x1308, lo: 0x86, hi: 0x86}, + {value: 0x3008, lo: 0x80, hi: 0x81}, + {value: 0x3b08, lo: 0x82, hi: 0x82}, + {value: 0x3308, lo: 0x83, hi: 0x84}, + {value: 0x3008, lo: 0x85, hi: 0x85}, + {value: 0x3308, lo: 0x86, hi: 0x86}, {value: 0x0008, lo: 0x87, hi: 0x8a}, {value: 0x0018, lo: 0x8b, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0x99}, @@ -3953,56 +3961,56 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0040, lo: 0x9c, hi: 0x9c}, {value: 0x0018, lo: 0x9d, hi: 0x9d}, {value: 0x0040, lo: 0x9e, hi: 0xbf}, - // Block 0xb7, offset 0x596 + // Block 0xb7, offset 0x57d {value: 0x0000, lo: 0x07}, {value: 0x0008, lo: 0x80, hi: 0xaf}, - {value: 0x1008, lo: 0xb0, hi: 0xb2}, - {value: 0x1308, lo: 0xb3, hi: 0xb8}, - {value: 0x1008, lo: 0xb9, hi: 0xb9}, - {value: 0x1308, lo: 0xba, hi: 0xba}, - {value: 0x1008, lo: 0xbb, hi: 0xbe}, - {value: 0x1308, lo: 0xbf, hi: 0xbf}, - // Block 0xb8, offset 0x59e + {value: 0x3008, lo: 0xb0, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xb8}, + {value: 0x3008, lo: 0xb9, hi: 0xb9}, + {value: 0x3308, lo: 0xba, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbe}, + {value: 0x3308, lo: 0xbf, hi: 0xbf}, + // Block 0xb8, offset 0x585 {value: 0x0000, lo: 0x0a}, - {value: 0x1308, lo: 0x80, hi: 0x80}, - {value: 0x1008, lo: 0x81, hi: 0x81}, - {value: 0x1b08, lo: 0x82, hi: 0x82}, - {value: 0x1308, lo: 0x83, hi: 0x83}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x3008, lo: 0x81, hi: 0x81}, + {value: 0x3b08, lo: 0x82, hi: 0x82}, + {value: 0x3308, lo: 0x83, hi: 0x83}, {value: 0x0008, lo: 0x84, hi: 0x85}, {value: 0x0018, lo: 0x86, hi: 0x86}, {value: 0x0008, lo: 0x87, hi: 0x87}, {value: 0x0040, lo: 0x88, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0x99}, {value: 0x0040, lo: 0x9a, hi: 0xbf}, - // Block 0xb9, offset 0x5a9 + // Block 0xb9, offset 0x590 {value: 0x0000, lo: 0x08}, {value: 0x0008, lo: 0x80, hi: 0xae}, - {value: 0x1008, lo: 0xaf, hi: 0xb1}, - {value: 0x1308, lo: 0xb2, hi: 0xb5}, + {value: 0x3008, lo: 0xaf, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb5}, {value: 0x0040, lo: 0xb6, hi: 0xb7}, - {value: 0x1008, lo: 0xb8, hi: 0xbb}, - {value: 0x1308, lo: 0xbc, hi: 0xbd}, - {value: 0x1008, lo: 0xbe, hi: 0xbe}, - {value: 0x1b08, lo: 0xbf, hi: 0xbf}, - // Block 0xba, offset 0x5b2 + {value: 0x3008, lo: 0xb8, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xba, offset 0x599 {value: 0x0000, lo: 0x05}, - {value: 0x1308, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x80, hi: 0x80}, {value: 0x0018, lo: 0x81, hi: 0x97}, {value: 0x0008, lo: 0x98, hi: 0x9b}, - {value: 0x1308, lo: 0x9c, hi: 0x9d}, + {value: 0x3308, lo: 0x9c, hi: 0x9d}, {value: 0x0040, lo: 0x9e, hi: 0xbf}, - // Block 0xbb, offset 0x5b8 + // Block 0xbb, offset 0x59f {value: 0x0000, lo: 0x07}, {value: 0x0008, lo: 0x80, hi: 0xaf}, - {value: 0x1008, lo: 0xb0, hi: 0xb2}, - {value: 0x1308, lo: 0xb3, hi: 0xba}, - {value: 0x1008, lo: 0xbb, hi: 0xbc}, - {value: 0x1308, lo: 0xbd, hi: 0xbd}, - {value: 0x1008, lo: 0xbe, hi: 0xbe}, - {value: 0x1b08, lo: 0xbf, hi: 0xbf}, - // Block 0xbc, offset 0x5c0 + {value: 0x3008, lo: 0xb0, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbc}, + {value: 0x3308, lo: 0xbd, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xbc, offset 0x5a7 {value: 0x0000, lo: 0x08}, - {value: 0x1308, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x80, hi: 0x80}, {value: 0x0018, lo: 0x81, hi: 0x83}, {value: 0x0008, lo: 0x84, hi: 0x84}, {value: 0x0040, lo: 0x85, hi: 0x8f}, @@ -4010,60 +4018,97 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0040, lo: 0x9a, hi: 0x9f}, {value: 0x0018, lo: 0xa0, hi: 0xac}, {value: 0x0040, lo: 0xad, hi: 0xbf}, - // Block 0xbd, offset 0x5c9 + // Block 0xbd, offset 0x5b0 {value: 0x0000, lo: 0x09}, {value: 0x0008, lo: 0x80, hi: 0xaa}, - {value: 0x1308, lo: 0xab, hi: 0xab}, - {value: 0x1008, lo: 0xac, hi: 0xac}, - {value: 0x1308, lo: 0xad, hi: 0xad}, - {value: 0x1008, lo: 0xae, hi: 0xaf}, - {value: 0x1308, lo: 0xb0, hi: 0xb5}, - {value: 0x1808, lo: 0xb6, hi: 0xb6}, - {value: 0x1308, lo: 0xb7, hi: 0xb7}, + {value: 0x3308, lo: 0xab, hi: 0xab}, + {value: 0x3008, lo: 0xac, hi: 0xac}, + {value: 0x3308, lo: 0xad, hi: 0xad}, + {value: 0x3008, lo: 0xae, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb5}, + {value: 0x3808, lo: 0xb6, hi: 0xb6}, + {value: 0x3308, lo: 0xb7, hi: 0xb7}, {value: 0x0040, lo: 0xb8, hi: 0xbf}, - // Block 0xbe, offset 0x5d3 + // Block 0xbe, offset 0x5ba {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0x89}, {value: 0x0040, lo: 0x8a, hi: 0xbf}, - // Block 0xbf, offset 0x5d6 + // Block 0xbf, offset 0x5bd {value: 0x0000, lo: 0x0b}, {value: 0x0008, lo: 0x80, hi: 0x99}, {value: 0x0040, lo: 0x9a, hi: 0x9c}, - {value: 0x1308, lo: 0x9d, hi: 0x9f}, - {value: 0x1008, lo: 0xa0, hi: 0xa1}, - {value: 0x1308, lo: 0xa2, hi: 0xa5}, - {value: 0x1008, lo: 0xa6, hi: 0xa6}, - {value: 0x1308, lo: 0xa7, hi: 0xaa}, - {value: 0x1b08, lo: 0xab, hi: 0xab}, + {value: 0x3308, lo: 0x9d, hi: 0x9f}, + {value: 0x3008, lo: 0xa0, hi: 0xa1}, + {value: 0x3308, lo: 0xa2, hi: 0xa5}, + {value: 0x3008, lo: 0xa6, hi: 0xa6}, + {value: 0x3308, lo: 0xa7, hi: 0xaa}, + {value: 0x3b08, lo: 0xab, hi: 0xab}, {value: 0x0040, lo: 0xac, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xb9}, {value: 0x0018, lo: 0xba, hi: 0xbf}, - // Block 0xc0, offset 0x5e2 + // Block 0xc0, offset 0x5c9 {value: 0x0000, lo: 0x02}, {value: 0x0040, lo: 0x80, hi: 0x9f}, {value: 0x049d, lo: 0xa0, hi: 0xbf}, - // Block 0xc1, offset 0x5e5 + // Block 0xc1, offset 0x5cc {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0xa9}, {value: 0x0018, lo: 0xaa, hi: 0xb2}, {value: 0x0040, lo: 0xb3, hi: 0xbe}, {value: 0x0008, lo: 0xbf, hi: 0xbf}, - // Block 0xc2, offset 0x5ea + // Block 0xc2, offset 0x5d1 + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x86}, + {value: 0x3008, lo: 0x87, hi: 0x88}, + {value: 0x3308, lo: 0x89, hi: 0x8a}, + {value: 0x0008, lo: 0x8b, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xb3}, + {value: 0x3b08, lo: 0xb4, hi: 0xb4}, + {value: 0x3308, lo: 0xb5, hi: 0xb8}, + {value: 0x3008, lo: 0xb9, hi: 0xb9}, + {value: 0x0008, lo: 0xba, hi: 0xba}, + {value: 0x3308, lo: 0xbb, hi: 0xbe}, + {value: 0x0018, lo: 0xbf, hi: 0xbf}, + // Block 0xc3, offset 0x5de + {value: 0x0000, lo: 0x08}, + {value: 0x0018, lo: 0x80, hi: 0x86}, + {value: 0x3b08, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x90}, + {value: 0x3308, lo: 0x91, hi: 0x96}, + {value: 0x3008, lo: 0x97, hi: 0x98}, + {value: 0x3308, lo: 0x99, hi: 0x9b}, + {value: 0x0008, lo: 0x9c, hi: 0xbf}, + // Block 0xc4, offset 0x5e7 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x85}, + {value: 0x0008, lo: 0x86, hi: 0x89}, + {value: 0x3308, lo: 0x8a, hi: 0x96}, + {value: 0x3008, lo: 0x97, hi: 0x97}, + {value: 0x3308, lo: 0x98, hi: 0x98}, + {value: 0x3b08, lo: 0x99, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0x9c}, + {value: 0x0040, lo: 0x9d, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0xa2}, + {value: 0x0040, lo: 0xa3, hi: 0xbf}, + // Block 0xc5, offset 0x5f3 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0xb8}, {value: 0x0040, lo: 0xb9, hi: 0xbf}, - // Block 0xc3, offset 0x5ed + // Block 0xc6, offset 0x5f6 {value: 0x0000, lo: 0x09}, {value: 0x0008, lo: 0x80, hi: 0x88}, {value: 0x0040, lo: 0x89, hi: 0x89}, {value: 0x0008, lo: 0x8a, hi: 0xae}, - {value: 0x1008, lo: 0xaf, hi: 0xaf}, - {value: 0x1308, lo: 0xb0, hi: 0xb6}, + {value: 0x3008, lo: 0xaf, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb6}, {value: 0x0040, lo: 0xb7, hi: 0xb7}, - {value: 0x1308, lo: 0xb8, hi: 0xbd}, - {value: 0x1008, lo: 0xbe, hi: 0xbe}, - {value: 0x1b08, lo: 0xbf, hi: 0xbf}, - // Block 0xc4, offset 0x5f7 + {value: 0x3308, lo: 0xb8, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xc7, offset 0x600 {value: 0x0000, lo: 0x08}, {value: 0x0008, lo: 0x80, hi: 0x80}, {value: 0x0018, lo: 0x81, hi: 0x85}, @@ -4073,42 +4118,65 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0040, lo: 0xad, hi: 0xaf}, {value: 0x0018, lo: 0xb0, hi: 0xb1}, {value: 0x0008, lo: 0xb2, hi: 0xbf}, - // Block 0xc5, offset 0x600 + // Block 0xc8, offset 0x609 {value: 0x0000, lo: 0x0b}, {value: 0x0008, lo: 0x80, hi: 0x8f}, {value: 0x0040, lo: 0x90, hi: 0x91}, - {value: 0x1308, lo: 0x92, hi: 0xa7}, + {value: 0x3308, lo: 0x92, hi: 0xa7}, {value: 0x0040, lo: 0xa8, hi: 0xa8}, - {value: 0x1008, lo: 0xa9, hi: 0xa9}, - {value: 0x1308, lo: 0xaa, hi: 0xb0}, - {value: 0x1008, lo: 0xb1, hi: 0xb1}, - {value: 0x1308, lo: 0xb2, hi: 0xb3}, - {value: 0x1008, lo: 0xb4, hi: 0xb4}, - {value: 0x1308, lo: 0xb5, hi: 0xb6}, + {value: 0x3008, lo: 0xa9, hi: 0xa9}, + {value: 0x3308, lo: 0xaa, hi: 0xb0}, + {value: 0x3008, lo: 0xb1, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb3}, + {value: 0x3008, lo: 0xb4, hi: 0xb4}, + {value: 0x3308, lo: 0xb5, hi: 0xb6}, {value: 0x0040, lo: 0xb7, hi: 0xbf}, - // Block 0xc6, offset 0x60c + // Block 0xc9, offset 0x615 + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0x8a}, + {value: 0x0008, lo: 0x8b, hi: 0xb0}, + {value: 0x3308, lo: 0xb1, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xb9}, + {value: 0x3308, lo: 0xba, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbe}, + {value: 0x3308, lo: 0xbf, hi: 0xbf}, + // Block 0xca, offset 0x622 + {value: 0x0000, lo: 0x07}, + {value: 0x3308, lo: 0x80, hi: 0x83}, + {value: 0x3b08, lo: 0x84, hi: 0x85}, + {value: 0x0008, lo: 0x86, hi: 0x86}, + {value: 0x3308, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0xbf}, + // Block 0xcb, offset 0x62a {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0x99}, {value: 0x0040, lo: 0x9a, hi: 0xbf}, - // Block 0xc7, offset 0x60f + // Block 0xcc, offset 0x62d {value: 0x0000, lo: 0x04}, {value: 0x0018, lo: 0x80, hi: 0xae}, {value: 0x0040, lo: 0xaf, hi: 0xaf}, {value: 0x0018, lo: 0xb0, hi: 0xb4}, {value: 0x0040, lo: 0xb5, hi: 0xbf}, - // Block 0xc8, offset 0x614 + // Block 0xcd, offset 0x632 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0x83}, {value: 0x0040, lo: 0x84, hi: 0xbf}, - // Block 0xc9, offset 0x617 + // Block 0xce, offset 0x635 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0xae}, {value: 0x0040, lo: 0xaf, hi: 0xbf}, - // Block 0xca, offset 0x61a + // Block 0xcf, offset 0x638 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0x86}, {value: 0x0040, lo: 0x87, hi: 0xbf}, - // Block 0xcb, offset 0x61d + // Block 0xd0, offset 0x63b {value: 0x0000, lo: 0x06}, {value: 0x0008, lo: 0x80, hi: 0x9e}, {value: 0x0040, lo: 0x9f, hi: 0x9f}, @@ -4116,20 +4184,20 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0040, lo: 0xaa, hi: 0xad}, {value: 0x0018, lo: 0xae, hi: 0xaf}, {value: 0x0040, lo: 0xb0, hi: 0xbf}, - // Block 0xcc, offset 0x624 + // Block 0xd1, offset 0x642 {value: 0x0000, lo: 0x06}, {value: 0x0040, lo: 0x80, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0xad}, {value: 0x0040, lo: 0xae, hi: 0xaf}, - {value: 0x1308, lo: 0xb0, hi: 0xb4}, + {value: 0x3308, lo: 0xb0, hi: 0xb4}, {value: 0x0018, lo: 0xb5, hi: 0xb5}, {value: 0x0040, lo: 0xb6, hi: 0xbf}, - // Block 0xcd, offset 0x62b + // Block 0xd2, offset 0x649 {value: 0x0000, lo: 0x03}, {value: 0x0008, lo: 0x80, hi: 0xaf}, - {value: 0x1308, lo: 0xb0, hi: 0xb6}, + {value: 0x3308, lo: 0xb0, hi: 0xb6}, {value: 0x0018, lo: 0xb7, hi: 0xbf}, - // Block 0xce, offset 0x62f + // Block 0xd3, offset 0x64d {value: 0x0000, lo: 0x0a}, {value: 0x0008, lo: 0x80, hi: 0x83}, {value: 0x0018, lo: 0x84, hi: 0x85}, @@ -4141,67 +4209,75 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0008, lo: 0xa3, hi: 0xb7}, {value: 0x0040, lo: 0xb8, hi: 0xbc}, {value: 0x0008, lo: 0xbd, hi: 0xbf}, - // Block 0xcf, offset 0x63a + // Block 0xd4, offset 0x658 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0x8f}, {value: 0x0040, lo: 0x90, hi: 0xbf}, - // Block 0xd0, offset 0x63d + // Block 0xd5, offset 0x65b {value: 0x0000, lo: 0x05}, {value: 0x0008, lo: 0x80, hi: 0x84}, {value: 0x0040, lo: 0x85, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0x90}, - {value: 0x1008, lo: 0x91, hi: 0xbe}, + {value: 0x3008, lo: 0x91, hi: 0xbe}, {value: 0x0040, lo: 0xbf, hi: 0xbf}, - // Block 0xd1, offset 0x643 + // Block 0xd6, offset 0x661 {value: 0x0000, lo: 0x04}, {value: 0x0040, lo: 0x80, hi: 0x8e}, - {value: 0x1308, lo: 0x8f, hi: 0x92}, + {value: 0x3308, lo: 0x8f, hi: 0x92}, {value: 0x0008, lo: 0x93, hi: 0x9f}, {value: 0x0040, lo: 0xa0, hi: 0xbf}, - // Block 0xd2, offset 0x648 + // Block 0xd7, offset 0x666 {value: 0x0000, lo: 0x03}, {value: 0x0040, lo: 0x80, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xa0}, - {value: 0x0040, lo: 0xa1, hi: 0xbf}, - // Block 0xd3, offset 0x64c + {value: 0x0008, lo: 0xa0, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xbf}, + // Block 0xd8, offset 0x66a {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0xac}, {value: 0x0040, lo: 0xad, hi: 0xbf}, - // Block 0xd4, offset 0x64f + // Block 0xd9, offset 0x66d {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0xb2}, {value: 0x0040, lo: 0xb3, hi: 0xbf}, - // Block 0xd5, offset 0x652 + // Block 0xda, offset 0x670 {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0x81}, - {value: 0x0040, lo: 0x82, hi: 0xbf}, - // Block 0xd6, offset 0x655 + {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0xbf}, + // Block 0xdb, offset 0x673 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0xdc, offset 0x676 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0xdd, offset 0x679 {value: 0x0000, lo: 0x04}, {value: 0x0008, lo: 0x80, hi: 0xaa}, {value: 0x0040, lo: 0xab, hi: 0xaf}, {value: 0x0008, lo: 0xb0, hi: 0xbc}, {value: 0x0040, lo: 0xbd, hi: 0xbf}, - // Block 0xd7, offset 0x65a + // Block 0xde, offset 0x67e {value: 0x0000, lo: 0x09}, {value: 0x0008, lo: 0x80, hi: 0x88}, {value: 0x0040, lo: 0x89, hi: 0x8f}, {value: 0x0008, lo: 0x90, hi: 0x99}, {value: 0x0040, lo: 0x9a, hi: 0x9b}, {value: 0x0018, lo: 0x9c, hi: 0x9c}, - {value: 0x1308, lo: 0x9d, hi: 0x9e}, + {value: 0x3308, lo: 0x9d, hi: 0x9e}, {value: 0x0018, lo: 0x9f, hi: 0x9f}, {value: 0x03c0, lo: 0xa0, hi: 0xa3}, {value: 0x0040, lo: 0xa4, hi: 0xbf}, - // Block 0xd8, offset 0x664 + // Block 0xdf, offset 0x688 {value: 0x0000, lo: 0x02}, {value: 0x0018, lo: 0x80, hi: 0xb5}, {value: 0x0040, lo: 0xb6, hi: 0xbf}, - // Block 0xd9, offset 0x667 + // Block 0xe0, offset 0x68b {value: 0x0000, lo: 0x03}, {value: 0x0018, lo: 0x80, hi: 0xa6}, {value: 0x0040, lo: 0xa7, hi: 0xa8}, {value: 0x0018, lo: 0xa9, hi: 0xbf}, - // Block 0xda, offset 0x66b + // Block 0xe1, offset 0x68f {value: 0x0000, lo: 0x0e}, {value: 0x0018, lo: 0x80, hi: 0x9d}, {value: 0xb5b9, lo: 0x9e, hi: 0x9e}, @@ -4211,127 +4287,127 @@ var idnaSparseValues = [1876]valueRange{ {value: 0xb719, lo: 0xa2, hi: 0xa2}, {value: 0xb781, lo: 0xa3, hi: 0xa3}, {value: 0xb7e9, lo: 0xa4, hi: 0xa4}, - {value: 0x1018, lo: 0xa5, hi: 0xa6}, - {value: 0x1318, lo: 0xa7, hi: 0xa9}, + {value: 0x3018, lo: 0xa5, hi: 0xa6}, + {value: 0x3318, lo: 0xa7, hi: 0xa9}, {value: 0x0018, lo: 0xaa, hi: 0xac}, - {value: 0x1018, lo: 0xad, hi: 0xb2}, + {value: 0x3018, lo: 0xad, hi: 0xb2}, {value: 0x0340, lo: 0xb3, hi: 0xba}, - {value: 0x1318, lo: 0xbb, hi: 0xbf}, - // Block 0xdb, offset 0x67a + {value: 0x3318, lo: 0xbb, hi: 0xbf}, + // Block 0xe2, offset 0x69e {value: 0x0000, lo: 0x0b}, - {value: 0x1318, lo: 0x80, hi: 0x82}, + {value: 0x3318, lo: 0x80, hi: 0x82}, {value: 0x0018, lo: 0x83, hi: 0x84}, - {value: 0x1318, lo: 0x85, hi: 0x8b}, + {value: 0x3318, lo: 0x85, hi: 0x8b}, {value: 0x0018, lo: 0x8c, hi: 0xa9}, - {value: 0x1318, lo: 0xaa, hi: 0xad}, + {value: 0x3318, lo: 0xaa, hi: 0xad}, {value: 0x0018, lo: 0xae, hi: 0xba}, {value: 0xb851, lo: 0xbb, hi: 0xbb}, {value: 0xb899, lo: 0xbc, hi: 0xbc}, {value: 0xb8e1, lo: 0xbd, hi: 0xbd}, {value: 0xb949, lo: 0xbe, hi: 0xbe}, {value: 0xb9b1, lo: 0xbf, hi: 0xbf}, - // Block 0xdc, offset 0x686 + // Block 0xe3, offset 0x6aa {value: 0x0000, lo: 0x03}, {value: 0xba19, lo: 0x80, hi: 0x80}, {value: 0x0018, lo: 0x81, hi: 0xa8}, {value: 0x0040, lo: 0xa9, hi: 0xbf}, - // Block 0xdd, offset 0x68a + // Block 0xe4, offset 0x6ae {value: 0x0000, lo: 0x04}, {value: 0x0018, lo: 0x80, hi: 0x81}, - {value: 0x1318, lo: 0x82, hi: 0x84}, + {value: 0x3318, lo: 0x82, hi: 0x84}, {value: 0x0018, lo: 0x85, hi: 0x85}, {value: 0x0040, lo: 0x86, hi: 0xbf}, - // Block 0xde, offset 0x68f + // Block 0xe5, offset 0x6b3 {value: 0x0000, lo: 0x04}, {value: 0x0018, lo: 0x80, hi: 0x96}, {value: 0x0040, lo: 0x97, hi: 0x9f}, {value: 0x0018, lo: 0xa0, hi: 0xb1}, {value: 0x0040, lo: 0xb2, hi: 0xbf}, - // Block 0xdf, offset 0x694 + // Block 0xe6, offset 0x6b8 {value: 0x0000, lo: 0x03}, - {value: 0x1308, lo: 0x80, hi: 0xb6}, + {value: 0x3308, lo: 0x80, hi: 0xb6}, {value: 0x0018, lo: 0xb7, hi: 0xba}, - {value: 0x1308, lo: 0xbb, hi: 0xbf}, - // Block 0xe0, offset 0x698 + {value: 0x3308, lo: 0xbb, hi: 0xbf}, + // Block 0xe7, offset 0x6bc {value: 0x0000, lo: 0x04}, - {value: 0x1308, lo: 0x80, hi: 0xac}, + {value: 0x3308, lo: 0x80, hi: 0xac}, {value: 0x0018, lo: 0xad, hi: 0xb4}, - {value: 0x1308, lo: 0xb5, hi: 0xb5}, + {value: 0x3308, lo: 0xb5, hi: 0xb5}, {value: 0x0018, lo: 0xb6, hi: 0xbf}, - // Block 0xe1, offset 0x69d + // Block 0xe8, offset 0x6c1 {value: 0x0000, lo: 0x08}, {value: 0x0018, lo: 0x80, hi: 0x83}, - {value: 0x1308, lo: 0x84, hi: 0x84}, + {value: 0x3308, lo: 0x84, hi: 0x84}, {value: 0x0018, lo: 0x85, hi: 0x8b}, {value: 0x0040, lo: 0x8c, hi: 0x9a}, - {value: 0x1308, lo: 0x9b, hi: 0x9f}, + {value: 0x3308, lo: 0x9b, hi: 0x9f}, {value: 0x0040, lo: 0xa0, hi: 0xa0}, - {value: 0x1308, lo: 0xa1, hi: 0xaf}, + {value: 0x3308, lo: 0xa1, hi: 0xaf}, {value: 0x0040, lo: 0xb0, hi: 0xbf}, - // Block 0xe2, offset 0x6a6 + // Block 0xe9, offset 0x6ca {value: 0x0000, lo: 0x0a}, - {value: 0x1308, lo: 0x80, hi: 0x86}, + {value: 0x3308, lo: 0x80, hi: 0x86}, {value: 0x0040, lo: 0x87, hi: 0x87}, - {value: 0x1308, lo: 0x88, hi: 0x98}, + {value: 0x3308, lo: 0x88, hi: 0x98}, {value: 0x0040, lo: 0x99, hi: 0x9a}, - {value: 0x1308, lo: 0x9b, hi: 0xa1}, + {value: 0x3308, lo: 0x9b, hi: 0xa1}, {value: 0x0040, lo: 0xa2, hi: 0xa2}, - {value: 0x1308, lo: 0xa3, hi: 0xa4}, + {value: 0x3308, lo: 0xa3, hi: 0xa4}, {value: 0x0040, lo: 0xa5, hi: 0xa5}, - {value: 0x1308, lo: 0xa6, hi: 0xaa}, + {value: 0x3308, lo: 0xa6, hi: 0xaa}, {value: 0x0040, lo: 0xab, hi: 0xbf}, - // Block 0xe3, offset 0x6b1 + // Block 0xea, offset 0x6d5 {value: 0x0000, lo: 0x05}, - {value: 0x0008, lo: 0x80, hi: 0x84}, + {value: 0x0808, lo: 0x80, hi: 0x84}, {value: 0x0040, lo: 0x85, hi: 0x86}, - {value: 0x0018, lo: 0x87, hi: 0x8f}, - {value: 0x1308, lo: 0x90, hi: 0x96}, + {value: 0x0818, lo: 0x87, hi: 0x8f}, + {value: 0x3308, lo: 0x90, hi: 0x96}, {value: 0x0040, lo: 0x97, hi: 0xbf}, - // Block 0xe4, offset 0x6b7 + // Block 0xeb, offset 0x6db {value: 0x0000, lo: 0x07}, - {value: 0x0208, lo: 0x80, hi: 0x83}, - {value: 0x1308, lo: 0x84, hi: 0x8a}, + {value: 0x0a08, lo: 0x80, hi: 0x83}, + {value: 0x3308, lo: 0x84, hi: 0x8a}, {value: 0x0040, lo: 0x8b, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0808, lo: 0x90, hi: 0x99}, {value: 0x0040, lo: 0x9a, hi: 0x9d}, - {value: 0x0018, lo: 0x9e, hi: 0x9f}, + {value: 0x0818, lo: 0x9e, hi: 0x9f}, {value: 0x0040, lo: 0xa0, hi: 0xbf}, - // Block 0xe5, offset 0x6bf + // Block 0xec, offset 0x6e3 {value: 0x0000, lo: 0x03}, {value: 0x0040, lo: 0x80, hi: 0xaf}, {value: 0x0018, lo: 0xb0, hi: 0xb1}, {value: 0x0040, lo: 0xb2, hi: 0xbf}, - // Block 0xe6, offset 0x6c3 + // Block 0xed, offset 0x6e7 {value: 0x0000, lo: 0x03}, {value: 0x0018, lo: 0x80, hi: 0xab}, {value: 0x0040, lo: 0xac, hi: 0xaf}, {value: 0x0018, lo: 0xb0, hi: 0xbf}, - // Block 0xe7, offset 0x6c7 + // Block 0xee, offset 0x6eb {value: 0x0000, lo: 0x05}, {value: 0x0018, lo: 0x80, hi: 0x93}, {value: 0x0040, lo: 0x94, hi: 0x9f}, {value: 0x0018, lo: 0xa0, hi: 0xae}, {value: 0x0040, lo: 0xaf, hi: 0xb0}, {value: 0x0018, lo: 0xb1, hi: 0xbf}, - // Block 0xe8, offset 0x6cd + // Block 0xef, offset 0x6f1 {value: 0x0000, lo: 0x05}, {value: 0x0040, lo: 0x80, hi: 0x80}, {value: 0x0018, lo: 0x81, hi: 0x8f}, {value: 0x0040, lo: 0x90, hi: 0x90}, {value: 0x0018, lo: 0x91, hi: 0xb5}, {value: 0x0040, lo: 0xb6, hi: 0xbf}, - // Block 0xe9, offset 0x6d3 + // Block 0xf0, offset 0x6f7 {value: 0x0000, lo: 0x04}, {value: 0x0018, lo: 0x80, hi: 0x8f}, {value: 0xc1c1, lo: 0x90, hi: 0x90}, {value: 0x0018, lo: 0x91, hi: 0xac}, {value: 0x0040, lo: 0xad, hi: 0xbf}, - // Block 0xea, offset 0x6d8 + // Block 0xf1, offset 0x6fc {value: 0x0000, lo: 0x02}, {value: 0x0040, lo: 0x80, hi: 0xa5}, {value: 0x0018, lo: 0xa6, hi: 0xbf}, - // Block 0xeb, offset 0x6db - {value: 0x0000, lo: 0x0d}, + // Block 0xf2, offset 0x6ff + {value: 0x0000, lo: 0x0f}, {value: 0xc7e9, lo: 0x80, hi: 0x80}, {value: 0xc839, lo: 0x81, hi: 0x81}, {value: 0xc889, lo: 0x82, hi: 0x82}, @@ -4344,84 +4420,88 @@ var idnaSparseValues = [1876]valueRange{ {value: 0x0040, lo: 0x89, hi: 0x8f}, {value: 0xcab9, lo: 0x90, hi: 0x90}, {value: 0xcad9, lo: 0x91, hi: 0x91}, - {value: 0x0040, lo: 0x92, hi: 0xbf}, - // Block 0xec, offset 0x6e9 + {value: 0x0040, lo: 0x92, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa5}, + {value: 0x0040, lo: 0xa6, hi: 0xbf}, + // Block 0xf3, offset 0x70f {value: 0x0000, lo: 0x06}, - {value: 0x0018, lo: 0x80, hi: 0x92}, - {value: 0x0040, lo: 0x93, hi: 0x9f}, + {value: 0x0018, lo: 0x80, hi: 0x94}, + {value: 0x0040, lo: 0x95, hi: 0x9f}, {value: 0x0018, lo: 0xa0, hi: 0xac}, {value: 0x0040, lo: 0xad, hi: 0xaf}, - {value: 0x0018, lo: 0xb0, hi: 0xb6}, - {value: 0x0040, lo: 0xb7, hi: 0xbf}, - // Block 0xed, offset 0x6f0 + {value: 0x0018, lo: 0xb0, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0xf4, offset 0x716 {value: 0x0000, lo: 0x02}, {value: 0x0018, lo: 0x80, hi: 0xb3}, {value: 0x0040, lo: 0xb4, hi: 0xbf}, - // Block 0xee, offset 0x6f3 + // Block 0xf5, offset 0x719 {value: 0x0000, lo: 0x02}, {value: 0x0018, lo: 0x80, hi: 0x94}, {value: 0x0040, lo: 0x95, hi: 0xbf}, - // Block 0xef, offset 0x6f6 + // Block 0xf6, offset 0x71c {value: 0x0000, lo: 0x03}, {value: 0x0018, lo: 0x80, hi: 0x8b}, {value: 0x0040, lo: 0x8c, hi: 0x8f}, {value: 0x0018, lo: 0x90, hi: 0xbf}, - // Block 0xf0, offset 0x6fa + // Block 0xf7, offset 0x720 {value: 0x0000, lo: 0x05}, {value: 0x0018, lo: 0x80, hi: 0x87}, {value: 0x0040, lo: 0x88, hi: 0x8f}, {value: 0x0018, lo: 0x90, hi: 0x99}, {value: 0x0040, lo: 0x9a, hi: 0x9f}, {value: 0x0018, lo: 0xa0, hi: 0xbf}, - // Block 0xf1, offset 0x700 + // Block 0xf8, offset 0x726 {value: 0x0000, lo: 0x04}, {value: 0x0018, lo: 0x80, hi: 0x87}, {value: 0x0040, lo: 0x88, hi: 0x8f}, {value: 0x0018, lo: 0x90, hi: 0xad}, {value: 0x0040, lo: 0xae, hi: 0xbf}, - // Block 0xf2, offset 0x705 - {value: 0x0000, lo: 0x09}, - {value: 0x0040, lo: 0x80, hi: 0x8f}, - {value: 0x0018, lo: 0x90, hi: 0x9e}, - {value: 0x0040, lo: 0x9f, hi: 0x9f}, - {value: 0x0018, lo: 0xa0, hi: 0xa7}, - {value: 0x0040, lo: 0xa8, hi: 0xaf}, - {value: 0x0018, lo: 0xb0, hi: 0xb0}, - {value: 0x0040, lo: 0xb1, hi: 0xb2}, - {value: 0x0018, lo: 0xb3, hi: 0xbe}, - {value: 0x0040, lo: 0xbf, hi: 0xbf}, - // Block 0xf3, offset 0x70f + // Block 0xf9, offset 0x72b {value: 0x0000, lo: 0x04}, {value: 0x0018, lo: 0x80, hi: 0x8b}, {value: 0x0040, lo: 0x8c, hi: 0x8f}, - {value: 0x0018, lo: 0x90, hi: 0x9e}, - {value: 0x0040, lo: 0x9f, hi: 0xbf}, - // Block 0xf4, offset 0x714 - {value: 0x0000, lo: 0x02}, - {value: 0x0018, lo: 0x80, hi: 0x91}, - {value: 0x0040, lo: 0x92, hi: 0xbf}, - // Block 0xf5, offset 0x717 + {value: 0x0018, lo: 0x90, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xfa, offset 0x730 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xbf}, + // Block 0xfb, offset 0x735 {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x97}, + {value: 0x0040, lo: 0x98, hi: 0xbf}, + // Block 0xfc, offset 0x738 + {value: 0x0000, lo: 0x04}, {value: 0x0018, lo: 0x80, hi: 0x80}, - {value: 0x0040, lo: 0x81, hi: 0xbf}, - // Block 0xf6, offset 0x71a + {value: 0x0040, lo: 0x81, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xbf}, + // Block 0xfd, offset 0x73d {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0x96}, {value: 0x0040, lo: 0x97, hi: 0xbf}, - // Block 0xf7, offset 0x71d + // Block 0xfe, offset 0x740 {value: 0x0000, lo: 0x02}, {value: 0x0008, lo: 0x80, hi: 0xb4}, {value: 0x0040, lo: 0xb5, hi: 0xbf}, - // Block 0xf8, offset 0x720 + // Block 0xff, offset 0x743 {value: 0x0000, lo: 0x03}, {value: 0x0008, lo: 0x80, hi: 0x9d}, {value: 0x0040, lo: 0x9e, hi: 0x9f}, {value: 0x0008, lo: 0xa0, hi: 0xbf}, - // Block 0xf9, offset 0x724 - {value: 0x0000, lo: 0x02}, + // Block 0x100, offset 0x747 + {value: 0x0000, lo: 0x03}, {value: 0x0008, lo: 0x80, hi: 0xa1}, - {value: 0x0040, lo: 0xa2, hi: 0xbf}, - // Block 0xfa, offset 0x727 + {value: 0x0040, lo: 0xa2, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x101, offset 0x74b + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xa0}, + {value: 0x0040, lo: 0xa1, hi: 0xbf}, + // Block 0x102, offset 0x74e {value: 0x0020, lo: 0x0f}, {value: 0xdeb9, lo: 0x80, hi: 0x89}, {value: 0x8dfd, lo: 0x8a, hi: 0x8a}, @@ -4438,7 +4518,7 @@ var idnaSparseValues = [1876]valueRange{ {value: 0xe4f9, lo: 0xba, hi: 0xba}, {value: 0x8edd, lo: 0xbb, hi: 0xbb}, {value: 0xe519, lo: 0xbc, hi: 0xbf}, - // Block 0xfb, offset 0x737 + // Block 0x103, offset 0x75e {value: 0x0020, lo: 0x10}, {value: 0x937d, lo: 0x80, hi: 0x80}, {value: 0xf099, lo: 0x81, hi: 0x86}, @@ -4455,23 +4535,23 @@ var idnaSparseValues = [1876]valueRange{ {value: 0xf4d9, lo: 0xae, hi: 0xaf}, {value: 0x94dd, lo: 0xb0, hi: 0xb1}, {value: 0xf519, lo: 0xb2, hi: 0xbe}, - {value: 0x0040, lo: 0xbf, hi: 0xbf}, - // Block 0xfc, offset 0x748 + {value: 0x2040, lo: 0xbf, hi: 0xbf}, + // Block 0x104, offset 0x76f {value: 0x0000, lo: 0x04}, {value: 0x0040, lo: 0x80, hi: 0x80}, {value: 0x0340, lo: 0x81, hi: 0x81}, {value: 0x0040, lo: 0x82, hi: 0x9f}, {value: 0x0340, lo: 0xa0, hi: 0xbf}, - // Block 0xfd, offset 0x74d + // Block 0x105, offset 0x774 {value: 0x0000, lo: 0x01}, {value: 0x0340, lo: 0x80, hi: 0xbf}, - // Block 0xfe, offset 0x74f + // Block 0x106, offset 0x776 {value: 0x0000, lo: 0x01}, - {value: 0x13c0, lo: 0x80, hi: 0xbf}, - // Block 0xff, offset 0x751 + {value: 0x33c0, lo: 0x80, hi: 0xbf}, + // Block 0x107, offset 0x778 {value: 0x0000, lo: 0x02}, - {value: 0x13c0, lo: 0x80, hi: 0xaf}, + {value: 0x33c0, lo: 0x80, hi: 0xaf}, {value: 0x0040, lo: 0xb0, hi: 0xbf}, } -// Total table size 41559 bytes (40KiB); checksum: F4A1FA4E +// Total table size 42115 bytes (41KiB); checksum: F4A1FA4E diff --git a/vendor/golang.org/x/net/idna/trieval.go b/vendor/golang.org/x/net/idna/trieval.go index 63cb03b..7a8cf88 100644 --- a/vendor/golang.org/x/net/idna/trieval.go +++ b/vendor/golang.org/x/net/idna/trieval.go @@ -26,9 +26,9 @@ package idna // 15..3 index into xor or mapping table // } // } else { -// 15..13 unused -// 12 modifier (including virama) -// 11 virama modifier +// 15..14 unused +// 13 mayNeedNorm +// 12..11 attributes // 10..8 joining type // 7..3 category type // } @@ -49,15 +49,20 @@ const ( joinShift = 8 joinMask = 0x07 - viramaModifier = 0x0800 + // Attributes + attributesMask = 0x1800 + viramaModifier = 0x1800 modifier = 0x1000 + rtl = 0x0800 + + mayNeedNorm = 0x2000 ) // A category corresponds to a category defined in the IDNA mapping table. type category uint16 const ( - unknown category = 0 // not defined currently in unicode. + unknown category = 0 // not currently defined in unicode. mapped category = 1 disallowedSTD3Mapped category = 2 deviation category = 3 @@ -110,5 +115,5 @@ func (c info) isModifier() bool { } func (c info) isViramaModifier() bool { - return c&(viramaModifier|catSmallMask) == viramaModifier + return c&(attributesMask|catSmallMask) == viramaModifier } diff --git a/vendor/golang.org/x/net/internal/iana/const.go b/vendor/golang.org/x/net/internal/iana/const.go index c9df24d..826633e 100644 --- a/vendor/golang.org/x/net/internal/iana/const.go +++ b/vendor/golang.org/x/net/internal/iana/const.go @@ -1,5 +1,5 @@ // go generate gen.go -// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT +// Code generated by the command above; DO NOT EDIT. // Package iana provides protocol number resources managed by the Internet Assigned Numbers Authority (IANA). package iana // import "golang.org/x/net/internal/iana" @@ -38,7 +38,7 @@ const ( CongestionExperienced = 0x3 // CE (Congestion Experienced) ) -// Protocol Numbers, Updated: 2016-06-22 +// Protocol Numbers, Updated: 2017-10-13 const ( ProtocolIP = 0 // IPv4 encapsulation, pseudo protocol number ProtocolHOPOPT = 0 // IPv6 Hop-by-Hop Option @@ -178,3 +178,50 @@ const ( ProtocolROHC = 142 // Robust Header Compression ProtocolReserved = 255 // Reserved ) + +// Address Family Numbers, Updated: 2016-10-25 +const ( + AddrFamilyIPv4 = 1 // IP (IP version 4) + AddrFamilyIPv6 = 2 // IP6 (IP version 6) + AddrFamilyNSAP = 3 // NSAP + AddrFamilyHDLC = 4 // HDLC (8-bit multidrop) + AddrFamilyBBN1822 = 5 // BBN 1822 + AddrFamily802 = 6 // 802 (includes all 802 media plus Ethernet "canonical format") + AddrFamilyE163 = 7 // E.163 + AddrFamilyE164 = 8 // E.164 (SMDS, Frame Relay, ATM) + AddrFamilyF69 = 9 // F.69 (Telex) + AddrFamilyX121 = 10 // X.121 (X.25, Frame Relay) + AddrFamilyIPX = 11 // IPX + AddrFamilyAppletalk = 12 // Appletalk + AddrFamilyDecnetIV = 13 // Decnet IV + AddrFamilyBanyanVines = 14 // Banyan Vines + AddrFamilyE164withSubaddress = 15 // E.164 with NSAP format subaddress + AddrFamilyDNS = 16 // DNS (Domain Name System) + AddrFamilyDistinguishedName = 17 // Distinguished Name + AddrFamilyASNumber = 18 // AS Number + AddrFamilyXTPoverIPv4 = 19 // XTP over IP version 4 + AddrFamilyXTPoverIPv6 = 20 // XTP over IP version 6 + AddrFamilyXTPnativemodeXTP = 21 // XTP native mode XTP + AddrFamilyFibreChannelWorldWidePortName = 22 // Fibre Channel World-Wide Port Name + AddrFamilyFibreChannelWorldWideNodeName = 23 // Fibre Channel World-Wide Node Name + AddrFamilyGWID = 24 // GWID + AddrFamilyL2VPN = 25 // AFI for L2VPN information + AddrFamilyMPLSTPSectionEndpointID = 26 // MPLS-TP Section Endpoint Identifier + AddrFamilyMPLSTPLSPEndpointID = 27 // MPLS-TP LSP Endpoint Identifier + AddrFamilyMPLSTPPseudowireEndpointID = 28 // MPLS-TP Pseudowire Endpoint Identifier + AddrFamilyMTIPv4 = 29 // MT IP: Multi-Topology IP version 4 + AddrFamilyMTIPv6 = 30 // MT IPv6: Multi-Topology IP version 6 + AddrFamilyEIGRPCommonServiceFamily = 16384 // EIGRP Common Service Family + AddrFamilyEIGRPIPv4ServiceFamily = 16385 // EIGRP IPv4 Service Family + AddrFamilyEIGRPIPv6ServiceFamily = 16386 // EIGRP IPv6 Service Family + AddrFamilyLISPCanonicalAddressFormat = 16387 // LISP Canonical Address Format (LCAF) + AddrFamilyBGPLS = 16388 // BGP-LS + AddrFamily48bitMAC = 16389 // 48-bit MAC + AddrFamily64bitMAC = 16390 // 64-bit MAC + AddrFamilyOUI = 16391 // OUI + AddrFamilyMACFinal24bits = 16392 // MAC/24 + AddrFamilyMACFinal40bits = 16393 // MAC/40 + AddrFamilyIPv6Initial64bits = 16394 // IPv6/64 + AddrFamilyRBridgePortID = 16395 // RBridge Port ID + AddrFamilyTRILLNickname = 16396 // TRILL Nickname +) diff --git a/vendor/golang.org/x/net/internal/iana/gen.go b/vendor/golang.org/x/net/internal/iana/gen.go index 86c78b3..2227e09 100644 --- a/vendor/golang.org/x/net/internal/iana/gen.go +++ b/vendor/golang.org/x/net/internal/iana/gen.go @@ -28,23 +28,27 @@ var registries = []struct { parse func(io.Writer, io.Reader) error }{ { - "http://www.iana.org/assignments/dscp-registry/dscp-registry.xml", + "https://www.iana.org/assignments/dscp-registry/dscp-registry.xml", parseDSCPRegistry, }, { - "http://www.iana.org/assignments/ipv4-tos-byte/ipv4-tos-byte.xml", + "https://www.iana.org/assignments/ipv4-tos-byte/ipv4-tos-byte.xml", parseTOSTCByte, }, { - "http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xml", + "https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xml", parseProtocolNumbers, }, + { + "http://www.iana.org/assignments/address-family-numbers/address-family-numbers.xml", + parseAddrFamilyNumbers, + }, } func main() { var bb bytes.Buffer fmt.Fprintf(&bb, "// go generate gen.go\n") - fmt.Fprintf(&bb, "// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n") + fmt.Fprintf(&bb, "// Code generated by the command above; DO NOT EDIT.\n\n") fmt.Fprintf(&bb, "// Package iana provides protocol number resources managed by the Internet Assigned Numbers Authority (IANA).\n") fmt.Fprintf(&bb, `package iana // import "golang.org/x/net/internal/iana"`+"\n\n") for _, r := range registries { @@ -291,3 +295,93 @@ func (pn *protocolNumbers) escape() []canonProtocolRecord { } return prs } + +func parseAddrFamilyNumbers(w io.Writer, r io.Reader) error { + dec := xml.NewDecoder(r) + var afn addrFamilylNumbers + if err := dec.Decode(&afn); err != nil { + return err + } + afrs := afn.escape() + fmt.Fprintf(w, "// %s, Updated: %s\n", afn.Title, afn.Updated) + fmt.Fprintf(w, "const (\n") + for _, afr := range afrs { + if afr.Name == "" { + continue + } + fmt.Fprintf(w, "AddrFamily%s = %d", afr.Name, afr.Value) + fmt.Fprintf(w, "// %s\n", afr.Descr) + } + fmt.Fprintf(w, ")\n") + return nil +} + +type addrFamilylNumbers struct { + XMLName xml.Name `xml:"registry"` + Title string `xml:"title"` + Updated string `xml:"updated"` + RegTitle string `xml:"registry>title"` + Note string `xml:"registry>note"` + Records []struct { + Value string `xml:"value"` + Descr string `xml:"description"` + } `xml:"registry>record"` +} + +type canonAddrFamilyRecord struct { + Name string + Descr string + Value int +} + +func (afn *addrFamilylNumbers) escape() []canonAddrFamilyRecord { + afrs := make([]canonAddrFamilyRecord, len(afn.Records)) + sr := strings.NewReplacer( + "IP version 4", "IPv4", + "IP version 6", "IPv6", + "Identifier", "ID", + "-", "", + "-", "", + "/", "", + ".", "", + " ", "", + ) + for i, afr := range afn.Records { + if strings.Contains(afr.Descr, "Unassigned") || + strings.Contains(afr.Descr, "Reserved") { + continue + } + afrs[i].Descr = afr.Descr + s := strings.TrimSpace(afr.Descr) + switch s { + case "IP (IP version 4)": + afrs[i].Name = "IPv4" + case "IP6 (IP version 6)": + afrs[i].Name = "IPv6" + case "AFI for L2VPN information": + afrs[i].Name = "L2VPN" + case "E.164 with NSAP format subaddress": + afrs[i].Name = "E164withSubaddress" + case "MT IP: Multi-Topology IP version 4": + afrs[i].Name = "MTIPv4" + case "MAC/24": + afrs[i].Name = "MACFinal24bits" + case "MAC/40": + afrs[i].Name = "MACFinal40bits" + case "IPv6/64": + afrs[i].Name = "IPv6Initial64bits" + default: + n := strings.Index(s, "(") + if n > 0 { + s = s[:n] + } + n = strings.Index(s, ":") + if n > 0 { + s = s[:n] + } + afrs[i].Name = sr.Replace(s) + } + afrs[i].Value, _ = strconv.Atoi(afr.Value) + } + return afrs +} diff --git a/vendor/golang.org/x/net/internal/nettest/stack.go b/vendor/golang.org/x/net/internal/nettest/stack.go index cc92c03..06f4e09 100644 --- a/vendor/golang.org/x/net/internal/nettest/stack.go +++ b/vendor/golang.org/x/net/internal/nettest/stack.go @@ -74,6 +74,11 @@ func TestableNetwork(network string) bool { switch runtime.GOOS { case "android", "darwin", "freebsd", "nacl", "plan9", "windows": return false + case "netbsd": + // It passes on amd64 at least. 386 fails (Issue 22927). arm is unknown. + if runtime.GOARCH == "386" { + return false + } } } return true diff --git a/vendor/golang.org/x/net/internal/socket/cmsghdr.go b/vendor/golang.org/x/net/internal/socket/cmsghdr.go new file mode 100644 index 0000000..1eb07d2 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/cmsghdr.go @@ -0,0 +1,11 @@ +// Copyright 2017 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 dragonfly freebsd linux netbsd openbsd solaris + +package socket + +func (h *cmsghdr) len() int { return int(h.Len) } +func (h *cmsghdr) lvl() int { return int(h.Level) } +func (h *cmsghdr) typ() int { return int(h.Type) } diff --git a/vendor/golang.org/x/net/internal/socket/cmsghdr_bsd.go b/vendor/golang.org/x/net/internal/socket/cmsghdr_bsd.go new file mode 100644 index 0000000..d1d0c2d --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/cmsghdr_bsd.go @@ -0,0 +1,13 @@ +// Copyright 2017 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 dragonfly freebsd netbsd openbsd + +package socket + +func (h *cmsghdr) set(l, lvl, typ int) { + h.Len = uint32(l) + h.Level = int32(lvl) + h.Type = int32(typ) +} diff --git a/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_32bit.go b/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_32bit.go new file mode 100644 index 0000000..bac6681 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_32bit.go @@ -0,0 +1,14 @@ +// Copyright 2017 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 arm mips mipsle 386 +// +build linux + +package socket + +func (h *cmsghdr) set(l, lvl, typ int) { + h.Len = uint32(l) + h.Level = int32(lvl) + h.Type = int32(typ) +} diff --git a/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_64bit.go b/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_64bit.go new file mode 100644 index 0000000..63f0534 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_64bit.go @@ -0,0 +1,14 @@ +// Copyright 2017 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 arm64 amd64 ppc64 ppc64le mips64 mips64le s390x +// +build linux + +package socket + +func (h *cmsghdr) set(l, lvl, typ int) { + h.Len = uint64(l) + h.Level = int32(lvl) + h.Type = int32(typ) +} diff --git a/vendor/golang.org/x/net/internal/socket/cmsghdr_solaris_64bit.go b/vendor/golang.org/x/net/internal/socket/cmsghdr_solaris_64bit.go new file mode 100644 index 0000000..7dedd43 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/cmsghdr_solaris_64bit.go @@ -0,0 +1,14 @@ +// Copyright 2017 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 amd64 +// +build solaris + +package socket + +func (h *cmsghdr) set(l, lvl, typ int) { + h.Len = uint32(l) + h.Level = int32(lvl) + h.Type = int32(typ) +} diff --git a/vendor/golang.org/x/net/internal/socket/cmsghdr_stub.go b/vendor/golang.org/x/net/internal/socket/cmsghdr_stub.go new file mode 100644 index 0000000..a4e7122 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/cmsghdr_stub.go @@ -0,0 +1,17 @@ +// Copyright 2017 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,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris + +package socket + +type cmsghdr struct{} + +const sizeofCmsghdr = 0 + +func (h *cmsghdr) len() int { return 0 } +func (h *cmsghdr) lvl() int { return 0 } +func (h *cmsghdr) typ() int { return 0 } + +func (h *cmsghdr) set(l, lvl, typ int) {} diff --git a/vendor/golang.org/x/net/internal/socket/defs_darwin.go b/vendor/golang.org/x/net/internal/socket/defs_darwin.go new file mode 100644 index 0000000..14e28c0 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/defs_darwin.go @@ -0,0 +1,44 @@ +// Copyright 2017 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 ignore + +// +godefs map struct_in_addr [4]byte /* in_addr */ +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package socket + +/* +#include + +#include +*/ +import "C" + +const ( + sysAF_UNSPEC = C.AF_UNSPEC + sysAF_INET = C.AF_INET + sysAF_INET6 = C.AF_INET6 + + sysSOCK_RAW = C.SOCK_RAW +) + +type iovec C.struct_iovec + +type msghdr C.struct_msghdr + +type cmsghdr C.struct_cmsghdr + +type sockaddrInet C.struct_sockaddr_in + +type sockaddrInet6 C.struct_sockaddr_in6 + +const ( + sizeofIovec = C.sizeof_struct_iovec + sizeofMsghdr = C.sizeof_struct_msghdr + sizeofCmsghdr = C.sizeof_struct_cmsghdr + + sizeofSockaddrInet = C.sizeof_struct_sockaddr_in + sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 +) diff --git a/vendor/golang.org/x/net/internal/socket/defs_dragonfly.go b/vendor/golang.org/x/net/internal/socket/defs_dragonfly.go new file mode 100644 index 0000000..14e28c0 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/defs_dragonfly.go @@ -0,0 +1,44 @@ +// Copyright 2017 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 ignore + +// +godefs map struct_in_addr [4]byte /* in_addr */ +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package socket + +/* +#include + +#include +*/ +import "C" + +const ( + sysAF_UNSPEC = C.AF_UNSPEC + sysAF_INET = C.AF_INET + sysAF_INET6 = C.AF_INET6 + + sysSOCK_RAW = C.SOCK_RAW +) + +type iovec C.struct_iovec + +type msghdr C.struct_msghdr + +type cmsghdr C.struct_cmsghdr + +type sockaddrInet C.struct_sockaddr_in + +type sockaddrInet6 C.struct_sockaddr_in6 + +const ( + sizeofIovec = C.sizeof_struct_iovec + sizeofMsghdr = C.sizeof_struct_msghdr + sizeofCmsghdr = C.sizeof_struct_cmsghdr + + sizeofSockaddrInet = C.sizeof_struct_sockaddr_in + sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 +) diff --git a/vendor/golang.org/x/net/internal/socket/defs_freebsd.go b/vendor/golang.org/x/net/internal/socket/defs_freebsd.go new file mode 100644 index 0000000..14e28c0 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/defs_freebsd.go @@ -0,0 +1,44 @@ +// Copyright 2017 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 ignore + +// +godefs map struct_in_addr [4]byte /* in_addr */ +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package socket + +/* +#include + +#include +*/ +import "C" + +const ( + sysAF_UNSPEC = C.AF_UNSPEC + sysAF_INET = C.AF_INET + sysAF_INET6 = C.AF_INET6 + + sysSOCK_RAW = C.SOCK_RAW +) + +type iovec C.struct_iovec + +type msghdr C.struct_msghdr + +type cmsghdr C.struct_cmsghdr + +type sockaddrInet C.struct_sockaddr_in + +type sockaddrInet6 C.struct_sockaddr_in6 + +const ( + sizeofIovec = C.sizeof_struct_iovec + sizeofMsghdr = C.sizeof_struct_msghdr + sizeofCmsghdr = C.sizeof_struct_cmsghdr + + sizeofSockaddrInet = C.sizeof_struct_sockaddr_in + sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 +) diff --git a/vendor/golang.org/x/net/internal/socket/defs_linux.go b/vendor/golang.org/x/net/internal/socket/defs_linux.go new file mode 100644 index 0000000..ce9ec2f --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/defs_linux.go @@ -0,0 +1,49 @@ +// Copyright 2017 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 ignore + +// +godefs map struct_in_addr [4]byte /* in_addr */ +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package socket + +/* +#include +#include + +#define _GNU_SOURCE +#include +*/ +import "C" + +const ( + sysAF_UNSPEC = C.AF_UNSPEC + sysAF_INET = C.AF_INET + sysAF_INET6 = C.AF_INET6 + + sysSOCK_RAW = C.SOCK_RAW +) + +type iovec C.struct_iovec + +type msghdr C.struct_msghdr + +type mmsghdr C.struct_mmsghdr + +type cmsghdr C.struct_cmsghdr + +type sockaddrInet C.struct_sockaddr_in + +type sockaddrInet6 C.struct_sockaddr_in6 + +const ( + sizeofIovec = C.sizeof_struct_iovec + sizeofMsghdr = C.sizeof_struct_msghdr + sizeofMmsghdr = C.sizeof_struct_mmsghdr + sizeofCmsghdr = C.sizeof_struct_cmsghdr + + sizeofSockaddrInet = C.sizeof_struct_sockaddr_in + sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 +) diff --git a/vendor/golang.org/x/net/internal/socket/defs_netbsd.go b/vendor/golang.org/x/net/internal/socket/defs_netbsd.go new file mode 100644 index 0000000..3f84335 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/defs_netbsd.go @@ -0,0 +1,47 @@ +// Copyright 2017 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 ignore + +// +godefs map struct_in_addr [4]byte /* in_addr */ +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package socket + +/* +#include + +#include +*/ +import "C" + +const ( + sysAF_UNSPEC = C.AF_UNSPEC + sysAF_INET = C.AF_INET + sysAF_INET6 = C.AF_INET6 + + sysSOCK_RAW = C.SOCK_RAW +) + +type iovec C.struct_iovec + +type msghdr C.struct_msghdr + +type mmsghdr C.struct_mmsghdr + +type cmsghdr C.struct_cmsghdr + +type sockaddrInet C.struct_sockaddr_in + +type sockaddrInet6 C.struct_sockaddr_in6 + +const ( + sizeofIovec = C.sizeof_struct_iovec + sizeofMsghdr = C.sizeof_struct_msghdr + sizeofMmsghdr = C.sizeof_struct_mmsghdr + sizeofCmsghdr = C.sizeof_struct_cmsghdr + + sizeofSockaddrInet = C.sizeof_struct_sockaddr_in + sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 +) diff --git a/vendor/golang.org/x/net/internal/socket/defs_openbsd.go b/vendor/golang.org/x/net/internal/socket/defs_openbsd.go new file mode 100644 index 0000000..14e28c0 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/defs_openbsd.go @@ -0,0 +1,44 @@ +// Copyright 2017 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 ignore + +// +godefs map struct_in_addr [4]byte /* in_addr */ +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package socket + +/* +#include + +#include +*/ +import "C" + +const ( + sysAF_UNSPEC = C.AF_UNSPEC + sysAF_INET = C.AF_INET + sysAF_INET6 = C.AF_INET6 + + sysSOCK_RAW = C.SOCK_RAW +) + +type iovec C.struct_iovec + +type msghdr C.struct_msghdr + +type cmsghdr C.struct_cmsghdr + +type sockaddrInet C.struct_sockaddr_in + +type sockaddrInet6 C.struct_sockaddr_in6 + +const ( + sizeofIovec = C.sizeof_struct_iovec + sizeofMsghdr = C.sizeof_struct_msghdr + sizeofCmsghdr = C.sizeof_struct_cmsghdr + + sizeofSockaddrInet = C.sizeof_struct_sockaddr_in + sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 +) diff --git a/vendor/golang.org/x/net/internal/socket/defs_solaris.go b/vendor/golang.org/x/net/internal/socket/defs_solaris.go new file mode 100644 index 0000000..14e28c0 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/defs_solaris.go @@ -0,0 +1,44 @@ +// Copyright 2017 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 ignore + +// +godefs map struct_in_addr [4]byte /* in_addr */ +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package socket + +/* +#include + +#include +*/ +import "C" + +const ( + sysAF_UNSPEC = C.AF_UNSPEC + sysAF_INET = C.AF_INET + sysAF_INET6 = C.AF_INET6 + + sysSOCK_RAW = C.SOCK_RAW +) + +type iovec C.struct_iovec + +type msghdr C.struct_msghdr + +type cmsghdr C.struct_cmsghdr + +type sockaddrInet C.struct_sockaddr_in + +type sockaddrInet6 C.struct_sockaddr_in6 + +const ( + sizeofIovec = C.sizeof_struct_iovec + sizeofMsghdr = C.sizeof_struct_msghdr + sizeofCmsghdr = C.sizeof_struct_cmsghdr + + sizeofSockaddrInet = C.sizeof_struct_sockaddr_in + sizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 +) diff --git a/vendor/golang.org/x/net/internal/socket/iovec_32bit.go b/vendor/golang.org/x/net/internal/socket/iovec_32bit.go new file mode 100644 index 0000000..05d6082 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/iovec_32bit.go @@ -0,0 +1,19 @@ +// Copyright 2017 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 arm mips mipsle 386 +// +build darwin dragonfly freebsd linux netbsd openbsd + +package socket + +import "unsafe" + +func (v *iovec) set(b []byte) { + l := len(b) + if l == 0 { + return + } + v.Base = (*byte)(unsafe.Pointer(&b[0])) + v.Len = uint32(l) +} diff --git a/vendor/golang.org/x/net/internal/socket/iovec_64bit.go b/vendor/golang.org/x/net/internal/socket/iovec_64bit.go new file mode 100644 index 0000000..afb34ad --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/iovec_64bit.go @@ -0,0 +1,19 @@ +// Copyright 2017 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 arm64 amd64 ppc64 ppc64le mips64 mips64le s390x +// +build darwin dragonfly freebsd linux netbsd openbsd + +package socket + +import "unsafe" + +func (v *iovec) set(b []byte) { + l := len(b) + if l == 0 { + return + } + v.Base = (*byte)(unsafe.Pointer(&b[0])) + v.Len = uint64(l) +} diff --git a/vendor/golang.org/x/net/internal/socket/iovec_solaris_64bit.go b/vendor/golang.org/x/net/internal/socket/iovec_solaris_64bit.go new file mode 100644 index 0000000..8d17a40 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/iovec_solaris_64bit.go @@ -0,0 +1,19 @@ +// Copyright 2017 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 amd64 +// +build solaris + +package socket + +import "unsafe" + +func (v *iovec) set(b []byte) { + l := len(b) + if l == 0 { + return + } + v.Base = (*int8)(unsafe.Pointer(&b[0])) + v.Len = uint64(l) +} diff --git a/vendor/golang.org/x/net/internal/socket/iovec_stub.go b/vendor/golang.org/x/net/internal/socket/iovec_stub.go new file mode 100644 index 0000000..c87d2a9 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/iovec_stub.go @@ -0,0 +1,11 @@ +// Copyright 2017 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,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris + +package socket + +type iovec struct{} + +func (v *iovec) set(b []byte) {} diff --git a/vendor/golang.org/x/net/internal/socket/mmsghdr_stub.go b/vendor/golang.org/x/net/internal/socket/mmsghdr_stub.go new file mode 100644 index 0000000..2e80a9c --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/mmsghdr_stub.go @@ -0,0 +1,21 @@ +// Copyright 2017 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 !linux,!netbsd + +package socket + +import "net" + +type mmsghdr struct{} + +type mmsghdrs []mmsghdr + +func (hs mmsghdrs) pack(ms []Message, parseFn func([]byte, string) (net.Addr, error), marshalFn func(net.Addr) []byte) error { + return nil +} + +func (hs mmsghdrs) unpack(ms []Message, parseFn func([]byte, string) (net.Addr, error), hint string) error { + return nil +} diff --git a/vendor/golang.org/x/net/internal/socket/mmsghdr_unix.go b/vendor/golang.org/x/net/internal/socket/mmsghdr_unix.go new file mode 100644 index 0000000..3c42ea7 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/mmsghdr_unix.go @@ -0,0 +1,42 @@ +// Copyright 2017 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 linux netbsd + +package socket + +import "net" + +type mmsghdrs []mmsghdr + +func (hs mmsghdrs) pack(ms []Message, parseFn func([]byte, string) (net.Addr, error), marshalFn func(net.Addr) []byte) error { + for i := range hs { + vs := make([]iovec, len(ms[i].Buffers)) + var sa []byte + if parseFn != nil { + sa = make([]byte, sizeofSockaddrInet6) + } + if marshalFn != nil { + sa = marshalFn(ms[i].Addr) + } + hs[i].Hdr.pack(vs, ms[i].Buffers, ms[i].OOB, sa) + } + return nil +} + +func (hs mmsghdrs) unpack(ms []Message, parseFn func([]byte, string) (net.Addr, error), hint string) error { + for i := range hs { + ms[i].N = int(hs[i].Len) + ms[i].NN = hs[i].Hdr.controllen() + ms[i].Flags = hs[i].Hdr.flags() + if parseFn != nil { + var err error + ms[i].Addr, err = parseFn(hs[i].Hdr.name(), hint) + if err != nil { + return err + } + } + } + return nil +} diff --git a/vendor/golang.org/x/net/internal/socket/msghdr_bsd.go b/vendor/golang.org/x/net/internal/socket/msghdr_bsd.go new file mode 100644 index 0000000..5567afc --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/msghdr_bsd.go @@ -0,0 +1,39 @@ +// Copyright 2017 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 dragonfly freebsd netbsd openbsd + +package socket + +import "unsafe" + +func (h *msghdr) pack(vs []iovec, bs [][]byte, oob []byte, sa []byte) { + for i := range vs { + vs[i].set(bs[i]) + } + h.setIov(vs) + if len(oob) > 0 { + h.Control = (*byte)(unsafe.Pointer(&oob[0])) + h.Controllen = uint32(len(oob)) + } + if sa != nil { + h.Name = (*byte)(unsafe.Pointer(&sa[0])) + h.Namelen = uint32(len(sa)) + } +} + +func (h *msghdr) name() []byte { + if h.Name != nil && h.Namelen > 0 { + return (*[sizeofSockaddrInet6]byte)(unsafe.Pointer(h.Name))[:h.Namelen] + } + return nil +} + +func (h *msghdr) controllen() int { + return int(h.Controllen) +} + +func (h *msghdr) flags() int { + return int(h.Flags) +} diff --git a/vendor/golang.org/x/net/internal/socket/msghdr_bsdvar.go b/vendor/golang.org/x/net/internal/socket/msghdr_bsdvar.go new file mode 100644 index 0000000..b8c87b7 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/msghdr_bsdvar.go @@ -0,0 +1,16 @@ +// Copyright 2017 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 dragonfly freebsd netbsd + +package socket + +func (h *msghdr) setIov(vs []iovec) { + l := len(vs) + if l == 0 { + return + } + h.Iov = &vs[0] + h.Iovlen = int32(l) +} diff --git a/vendor/golang.org/x/net/internal/socket/msghdr_linux.go b/vendor/golang.org/x/net/internal/socket/msghdr_linux.go new file mode 100644 index 0000000..5a38798 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/msghdr_linux.go @@ -0,0 +1,36 @@ +// Copyright 2017 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. + +package socket + +import "unsafe" + +func (h *msghdr) pack(vs []iovec, bs [][]byte, oob []byte, sa []byte) { + for i := range vs { + vs[i].set(bs[i]) + } + h.setIov(vs) + if len(oob) > 0 { + h.setControl(oob) + } + if sa != nil { + h.Name = (*byte)(unsafe.Pointer(&sa[0])) + h.Namelen = uint32(len(sa)) + } +} + +func (h *msghdr) name() []byte { + if h.Name != nil && h.Namelen > 0 { + return (*[sizeofSockaddrInet6]byte)(unsafe.Pointer(h.Name))[:h.Namelen] + } + return nil +} + +func (h *msghdr) controllen() int { + return int(h.Controllen) +} + +func (h *msghdr) flags() int { + return int(h.Flags) +} diff --git a/vendor/golang.org/x/net/internal/socket/msghdr_linux_32bit.go b/vendor/golang.org/x/net/internal/socket/msghdr_linux_32bit.go new file mode 100644 index 0000000..a7a5987 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/msghdr_linux_32bit.go @@ -0,0 +1,24 @@ +// Copyright 2017 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 arm mips mipsle 386 +// +build linux + +package socket + +import "unsafe" + +func (h *msghdr) setIov(vs []iovec) { + l := len(vs) + if l == 0 { + return + } + h.Iov = &vs[0] + h.Iovlen = uint32(l) +} + +func (h *msghdr) setControl(b []byte) { + h.Control = (*byte)(unsafe.Pointer(&b[0])) + h.Controllen = uint32(len(b)) +} diff --git a/vendor/golang.org/x/net/internal/socket/msghdr_linux_64bit.go b/vendor/golang.org/x/net/internal/socket/msghdr_linux_64bit.go new file mode 100644 index 0000000..610fc4f --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/msghdr_linux_64bit.go @@ -0,0 +1,24 @@ +// Copyright 2017 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 arm64 amd64 ppc64 ppc64le mips64 mips64le s390x +// +build linux + +package socket + +import "unsafe" + +func (h *msghdr) setIov(vs []iovec) { + l := len(vs) + if l == 0 { + return + } + h.Iov = &vs[0] + h.Iovlen = uint64(l) +} + +func (h *msghdr) setControl(b []byte) { + h.Control = (*byte)(unsafe.Pointer(&b[0])) + h.Controllen = uint64(len(b)) +} diff --git a/vendor/golang.org/x/net/internal/socket/msghdr_openbsd.go b/vendor/golang.org/x/net/internal/socket/msghdr_openbsd.go new file mode 100644 index 0000000..71a69e2 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/msghdr_openbsd.go @@ -0,0 +1,14 @@ +// Copyright 2017 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. + +package socket + +func (h *msghdr) setIov(vs []iovec) { + l := len(vs) + if l == 0 { + return + } + h.Iov = &vs[0] + h.Iovlen = uint32(l) +} diff --git a/vendor/golang.org/x/net/internal/socket/msghdr_solaris_64bit.go b/vendor/golang.org/x/net/internal/socket/msghdr_solaris_64bit.go new file mode 100644 index 0000000..6465b20 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/msghdr_solaris_64bit.go @@ -0,0 +1,36 @@ +// Copyright 2017 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 amd64 +// +build solaris + +package socket + +import "unsafe" + +func (h *msghdr) pack(vs []iovec, bs [][]byte, oob []byte, sa []byte) { + for i := range vs { + vs[i].set(bs[i]) + } + if len(vs) > 0 { + h.Iov = &vs[0] + h.Iovlen = int32(len(vs)) + } + if len(oob) > 0 { + h.Accrights = (*int8)(unsafe.Pointer(&oob[0])) + h.Accrightslen = int32(len(oob)) + } + if sa != nil { + h.Name = (*byte)(unsafe.Pointer(&sa[0])) + h.Namelen = uint32(len(sa)) + } +} + +func (h *msghdr) controllen() int { + return int(h.Accrightslen) +} + +func (h *msghdr) flags() int { + return int(NativeEndian.Uint32(h.Pad_cgo_2[:])) +} diff --git a/vendor/golang.org/x/net/internal/socket/msghdr_stub.go b/vendor/golang.org/x/net/internal/socket/msghdr_stub.go new file mode 100644 index 0000000..64e8173 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/msghdr_stub.go @@ -0,0 +1,14 @@ +// Copyright 2017 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,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris + +package socket + +type msghdr struct{} + +func (h *msghdr) pack(vs []iovec, bs [][]byte, oob []byte, sa []byte) {} +func (h *msghdr) name() []byte { return nil } +func (h *msghdr) controllen() int { return 0 } +func (h *msghdr) flags() int { return 0 } diff --git a/vendor/golang.org/x/net/internal/socket/rawconn_mmsg.go b/vendor/golang.org/x/net/internal/socket/rawconn_mmsg.go new file mode 100644 index 0000000..499164a --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/rawconn_mmsg.go @@ -0,0 +1,74 @@ +// Copyright 2017 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 go1.9 +// +build linux + +package socket + +import ( + "net" + "os" + "syscall" +) + +func (c *Conn) recvMsgs(ms []Message, flags int) (int, error) { + hs := make(mmsghdrs, len(ms)) + var parseFn func([]byte, string) (net.Addr, error) + if c.network != "tcp" { + parseFn = parseInetAddr + } + if err := hs.pack(ms, parseFn, nil); err != nil { + return 0, err + } + var operr error + var n int + fn := func(s uintptr) bool { + n, operr = recvmmsg(s, hs, flags) + if operr == syscall.EAGAIN { + return false + } + return true + } + if err := c.c.Read(fn); err != nil { + return n, err + } + if operr != nil { + return n, os.NewSyscallError("recvmmsg", operr) + } + if err := hs[:n].unpack(ms[:n], parseFn, c.network); err != nil { + return n, err + } + return n, nil +} + +func (c *Conn) sendMsgs(ms []Message, flags int) (int, error) { + hs := make(mmsghdrs, len(ms)) + var marshalFn func(net.Addr) []byte + if c.network != "tcp" { + marshalFn = marshalInetAddr + } + if err := hs.pack(ms, nil, marshalFn); err != nil { + return 0, err + } + var operr error + var n int + fn := func(s uintptr) bool { + n, operr = sendmmsg(s, hs, flags) + if operr == syscall.EAGAIN { + return false + } + return true + } + if err := c.c.Write(fn); err != nil { + return n, err + } + if operr != nil { + return n, os.NewSyscallError("sendmmsg", operr) + } + if err := hs[:n].unpack(ms[:n], nil, ""); err != nil { + return n, err + } + return n, nil +} diff --git a/vendor/golang.org/x/net/internal/socket/rawconn_msg.go b/vendor/golang.org/x/net/internal/socket/rawconn_msg.go new file mode 100644 index 0000000..b21d2e6 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/rawconn_msg.go @@ -0,0 +1,77 @@ +// Copyright 2017 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 go1.9 +// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows + +package socket + +import ( + "os" + "syscall" +) + +func (c *Conn) recvMsg(m *Message, flags int) error { + var h msghdr + vs := make([]iovec, len(m.Buffers)) + var sa []byte + if c.network != "tcp" { + sa = make([]byte, sizeofSockaddrInet6) + } + h.pack(vs, m.Buffers, m.OOB, sa) + var operr error + var n int + fn := func(s uintptr) bool { + n, operr = recvmsg(s, &h, flags) + if operr == syscall.EAGAIN { + return false + } + return true + } + if err := c.c.Read(fn); err != nil { + return err + } + if operr != nil { + return os.NewSyscallError("recvmsg", operr) + } + if c.network != "tcp" { + var err error + m.Addr, err = parseInetAddr(sa[:], c.network) + if err != nil { + return err + } + } + m.N = n + m.NN = h.controllen() + m.Flags = h.flags() + return nil +} + +func (c *Conn) sendMsg(m *Message, flags int) error { + var h msghdr + vs := make([]iovec, len(m.Buffers)) + var sa []byte + if m.Addr != nil { + sa = marshalInetAddr(m.Addr) + } + h.pack(vs, m.Buffers, m.OOB, sa) + var operr error + var n int + fn := func(s uintptr) bool { + n, operr = sendmsg(s, &h, flags) + if operr == syscall.EAGAIN { + return false + } + return true + } + if err := c.c.Write(fn); err != nil { + return err + } + if operr != nil { + return os.NewSyscallError("sendmsg", operr) + } + m.N = n + m.NN = len(m.OOB) + return nil +} diff --git a/vendor/golang.org/x/net/internal/socket/rawconn_nommsg.go b/vendor/golang.org/x/net/internal/socket/rawconn_nommsg.go new file mode 100644 index 0000000..f78832a --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/rawconn_nommsg.go @@ -0,0 +1,18 @@ +// Copyright 2017 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 go1.9 +// +build !linux + +package socket + +import "errors" + +func (c *Conn) recvMsgs(ms []Message, flags int) (int, error) { + return 0, errors.New("not implemented") +} + +func (c *Conn) sendMsgs(ms []Message, flags int) (int, error) { + return 0, errors.New("not implemented") +} diff --git a/vendor/golang.org/x/net/internal/socket/rawconn_nomsg.go b/vendor/golang.org/x/net/internal/socket/rawconn_nomsg.go new file mode 100644 index 0000000..96733cb --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/rawconn_nomsg.go @@ -0,0 +1,18 @@ +// Copyright 2017 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 go1.9 +// +build !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris,!windows + +package socket + +import "errors" + +func (c *Conn) recvMsg(m *Message, flags int) error { + return errors.New("not implemented") +} + +func (c *Conn) sendMsg(m *Message, flags int) error { + return errors.New("not implemented") +} diff --git a/vendor/golang.org/x/net/internal/socket/rawconn_stub.go b/vendor/golang.org/x/net/internal/socket/rawconn_stub.go new file mode 100644 index 0000000..d2add1a --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/rawconn_stub.go @@ -0,0 +1,25 @@ +// Copyright 2017 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 !go1.9 + +package socket + +import "errors" + +func (c *Conn) recvMsg(m *Message, flags int) error { + return errors.New("not implemented") +} + +func (c *Conn) sendMsg(m *Message, flags int) error { + return errors.New("not implemented") +} + +func (c *Conn) recvMsgs(ms []Message, flags int) (int, error) { + return 0, errors.New("not implemented") +} + +func (c *Conn) sendMsgs(ms []Message, flags int) (int, error) { + return 0, errors.New("not implemented") +} diff --git a/vendor/golang.org/x/net/internal/socket/socket.go b/vendor/golang.org/x/net/internal/socket/socket.go index 366b8da..5f9730e 100644 --- a/vendor/golang.org/x/net/internal/socket/socket.go +++ b/vendor/golang.org/x/net/internal/socket/socket.go @@ -6,7 +6,11 @@ // calls. package socket // import "golang.org/x/net/internal/socket" -import "errors" +import ( + "errors" + "net" + "unsafe" +) // An Option represents a sticky socket option. type Option struct { @@ -82,3 +86,200 @@ func (o *Option) SetInt(c *Conn, v int) error { } return o.set(c, b) } + +func controlHeaderLen() int { + return roundup(sizeofCmsghdr) +} + +func controlMessageLen(dataLen int) int { + return roundup(sizeofCmsghdr) + dataLen +} + +// ControlMessageSpace returns the whole length of control message. +func ControlMessageSpace(dataLen int) int { + return roundup(sizeofCmsghdr) + roundup(dataLen) +} + +// A ControlMessage represents the head message in a stream of control +// messages. +// +// A control message comprises of a header, data and a few padding +// fields to conform to the interface to the kernel. +// +// See RFC 3542 for further information. +type ControlMessage []byte + +// Data returns the data field of the control message at the head on +// m. +func (m ControlMessage) Data(dataLen int) []byte { + l := controlHeaderLen() + if len(m) < l || len(m) < l+dataLen { + return nil + } + return m[l : l+dataLen] +} + +// Next returns the control message at the next on m. +// +// Next works only for standard control messages. +func (m ControlMessage) Next(dataLen int) ControlMessage { + l := ControlMessageSpace(dataLen) + if len(m) < l { + return nil + } + return m[l:] +} + +// MarshalHeader marshals the header fields of the control message at +// the head on m. +func (m ControlMessage) MarshalHeader(lvl, typ, dataLen int) error { + if len(m) < controlHeaderLen() { + return errors.New("short message") + } + h := (*cmsghdr)(unsafe.Pointer(&m[0])) + h.set(controlMessageLen(dataLen), lvl, typ) + return nil +} + +// ParseHeader parses and returns the header fields of the control +// message at the head on m. +func (m ControlMessage) ParseHeader() (lvl, typ, dataLen int, err error) { + l := controlHeaderLen() + if len(m) < l { + return 0, 0, 0, errors.New("short message") + } + h := (*cmsghdr)(unsafe.Pointer(&m[0])) + return h.lvl(), h.typ(), int(uint64(h.len()) - uint64(l)), nil +} + +// Marshal marshals the control message at the head on m, and returns +// the next control message. +func (m ControlMessage) Marshal(lvl, typ int, data []byte) (ControlMessage, error) { + l := len(data) + if len(m) < ControlMessageSpace(l) { + return nil, errors.New("short message") + } + h := (*cmsghdr)(unsafe.Pointer(&m[0])) + h.set(controlMessageLen(l), lvl, typ) + if l > 0 { + copy(m.Data(l), data) + } + return m.Next(l), nil +} + +// Parse parses m as a single or multiple control messages. +// +// Parse works for both standard and compatible messages. +func (m ControlMessage) Parse() ([]ControlMessage, error) { + var ms []ControlMessage + for len(m) >= controlHeaderLen() { + h := (*cmsghdr)(unsafe.Pointer(&m[0])) + l := h.len() + if l <= 0 { + return nil, errors.New("invalid header length") + } + if uint64(l) < uint64(controlHeaderLen()) { + return nil, errors.New("invalid message length") + } + if uint64(l) > uint64(len(m)) { + return nil, errors.New("short buffer") + } + // On message reception: + // + // |<- ControlMessageSpace --------------->| + // |<- controlMessageLen ---------->| | + // |<- controlHeaderLen ->| | | + // +---------------+------+---------+------+ + // | Header | PadH | Data | PadD | + // +---------------+------+---------+------+ + // + // On compatible message reception: + // + // | ... |<- controlMessageLen ----------->| + // | ... |<- controlHeaderLen ->| | + // +-----+---------------+------+----------+ + // | ... | Header | PadH | Data | + // +-----+---------------+------+----------+ + ms = append(ms, ControlMessage(m[:l])) + ll := l - controlHeaderLen() + if len(m) >= ControlMessageSpace(ll) { + m = m[ControlMessageSpace(ll):] + } else { + m = m[controlMessageLen(ll):] + } + } + return ms, nil +} + +// NewControlMessage returns a new stream of control messages. +func NewControlMessage(dataLen []int) ControlMessage { + var l int + for i := range dataLen { + l += ControlMessageSpace(dataLen[i]) + } + return make([]byte, l) +} + +// A Message represents an IO message. +type Message struct { + // When writing, the Buffers field must contain at least one + // byte to write. + // When reading, the Buffers field will always contain a byte + // to read. + Buffers [][]byte + + // OOB contains protocol-specific control or miscellaneous + // ancillary data known as out-of-band data. + OOB []byte + + // Addr specifies a destination address when writing. + // It can be nil when the underlying protocol of the raw + // connection uses connection-oriented communication. + // After a successful read, it may contain the source address + // on the received packet. + Addr net.Addr + + N int // # of bytes read or written from/to Buffers + NN int // # of bytes read or written from/to OOB + Flags int // protocol-specific information on the received message +} + +// RecvMsg wraps recvmsg system call. +// +// The provided flags is a set of platform-dependent flags, such as +// syscall.MSG_PEEK. +func (c *Conn) RecvMsg(m *Message, flags int) error { + return c.recvMsg(m, flags) +} + +// SendMsg wraps sendmsg system call. +// +// The provided flags is a set of platform-dependent flags, such as +// syscall.MSG_DONTROUTE. +func (c *Conn) SendMsg(m *Message, flags int) error { + return c.sendMsg(m, flags) +} + +// RecvMsgs wraps recvmmsg system call. +// +// It returns the number of processed messages. +// +// The provided flags is a set of platform-dependent flags, such as +// syscall.MSG_PEEK. +// +// Only Linux supports this. +func (c *Conn) RecvMsgs(ms []Message, flags int) (int, error) { + return c.recvMsgs(ms, flags) +} + +// SendMsgs wraps sendmmsg system call. +// +// It returns the number of processed messages. +// +// The provided flags is a set of platform-dependent flags, such as +// syscall.MSG_DONTROUTE. +// +// Only Linux supports this. +func (c *Conn) SendMsgs(ms []Message, flags int) (int, error) { + return c.sendMsgs(ms, flags) +} diff --git a/vendor/golang.org/x/net/internal/socket/socket_go1_9_test.go b/vendor/golang.org/x/net/internal/socket/socket_go1_9_test.go new file mode 100644 index 0000000..c4edd4a --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/socket_go1_9_test.go @@ -0,0 +1,259 @@ +// Copyright 2017 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 go1.9 +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +package socket_test + +import ( + "bytes" + "fmt" + "net" + "runtime" + "testing" + + "golang.org/x/net/internal/nettest" + "golang.org/x/net/internal/socket" +) + +type mockControl struct { + Level int + Type int + Data []byte +} + +func TestControlMessage(t *testing.T) { + for _, tt := range []struct { + cs []mockControl + }{ + { + []mockControl{ + {Level: 1, Type: 1}, + }, + }, + { + []mockControl{ + {Level: 2, Type: 2, Data: []byte{0xfe}}, + }, + }, + { + []mockControl{ + {Level: 3, Type: 3, Data: []byte{0xfe, 0xff, 0xff, 0xfe}}, + }, + }, + { + []mockControl{ + {Level: 4, Type: 4, Data: []byte{0xfe, 0xff, 0xff, 0xfe, 0xfe, 0xff, 0xff, 0xfe}}, + }, + }, + { + []mockControl{ + {Level: 4, Type: 4, Data: []byte{0xfe, 0xff, 0xff, 0xfe, 0xfe, 0xff, 0xff, 0xfe}}, + {Level: 2, Type: 2, Data: []byte{0xfe}}, + }, + }, + } { + var w []byte + var tailPadLen int + mm := socket.NewControlMessage([]int{0}) + for i, c := range tt.cs { + m := socket.NewControlMessage([]int{len(c.Data)}) + l := len(m) - len(mm) + if i == len(tt.cs)-1 && l > len(c.Data) { + tailPadLen = l - len(c.Data) + } + w = append(w, m...) + } + + var err error + ww := make([]byte, len(w)) + copy(ww, w) + m := socket.ControlMessage(ww) + for _, c := range tt.cs { + if err = m.MarshalHeader(c.Level, c.Type, len(c.Data)); err != nil { + t.Fatalf("(%v).MarshalHeader() = %v", tt.cs, err) + } + copy(m.Data(len(c.Data)), c.Data) + m = m.Next(len(c.Data)) + } + m = socket.ControlMessage(w) + for _, c := range tt.cs { + m, err = m.Marshal(c.Level, c.Type, c.Data) + if err != nil { + t.Fatalf("(%v).Marshal() = %v", tt.cs, err) + } + } + if !bytes.Equal(ww, w) { + t.Fatalf("got %#v; want %#v", ww, w) + } + + ws := [][]byte{w} + if tailPadLen > 0 { + // Test a message with no tail padding. + nopad := w[:len(w)-tailPadLen] + ws = append(ws, [][]byte{nopad}...) + } + for _, w := range ws { + ms, err := socket.ControlMessage(w).Parse() + if err != nil { + t.Fatalf("(%v).Parse() = %v", tt.cs, err) + } + for i, m := range ms { + lvl, typ, dataLen, err := m.ParseHeader() + if err != nil { + t.Fatalf("(%v).ParseHeader() = %v", tt.cs, err) + } + if lvl != tt.cs[i].Level || typ != tt.cs[i].Type || dataLen != len(tt.cs[i].Data) { + t.Fatalf("%v: got %d, %d, %d; want %d, %d, %d", tt.cs[i], lvl, typ, dataLen, tt.cs[i].Level, tt.cs[i].Type, len(tt.cs[i].Data)) + } + } + } + } +} + +func TestUDP(t *testing.T) { + c, err := nettest.NewLocalPacketListener("udp") + if err != nil { + t.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err) + } + defer c.Close() + cc, err := socket.NewConn(c.(net.Conn)) + if err != nil { + t.Fatal(err) + } + + t.Run("Message", func(t *testing.T) { + data := []byte("HELLO-R-U-THERE") + wm := socket.Message{ + Buffers: bytes.SplitAfter(data, []byte("-")), + Addr: c.LocalAddr(), + } + if err := cc.SendMsg(&wm, 0); err != nil { + t.Fatal(err) + } + b := make([]byte, 32) + rm := socket.Message{ + Buffers: [][]byte{b[:1], b[1:3], b[3:7], b[7:11], b[11:]}, + } + if err := cc.RecvMsg(&rm, 0); err != nil { + t.Fatal(err) + } + if !bytes.Equal(b[:rm.N], data) { + t.Fatalf("got %#v; want %#v", b[:rm.N], data) + } + }) + switch runtime.GOOS { + case "android", "linux": + t.Run("Messages", func(t *testing.T) { + data := []byte("HELLO-R-U-THERE") + wmbs := bytes.SplitAfter(data, []byte("-")) + wms := []socket.Message{ + {Buffers: wmbs[:1], Addr: c.LocalAddr()}, + {Buffers: wmbs[1:], Addr: c.LocalAddr()}, + } + n, err := cc.SendMsgs(wms, 0) + if err != nil { + t.Fatal(err) + } + if n != len(wms) { + t.Fatalf("got %d; want %d", n, len(wms)) + } + b := make([]byte, 32) + rmbs := [][][]byte{{b[:len(wmbs[0])]}, {b[len(wmbs[0]):]}} + rms := []socket.Message{ + {Buffers: rmbs[0]}, + {Buffers: rmbs[1]}, + } + n, err = cc.RecvMsgs(rms, 0) + if err != nil { + t.Fatal(err) + } + if n != len(rms) { + t.Fatalf("got %d; want %d", n, len(rms)) + } + nn := 0 + for i := 0; i < n; i++ { + nn += rms[i].N + } + if !bytes.Equal(b[:nn], data) { + t.Fatalf("got %#v; want %#v", b[:nn], data) + } + }) + } + + // The behavior of transmission for zero byte paylaod depends + // on each platform implementation. Some may transmit only + // protocol header and options, other may transmit nothing. + // We test only that SendMsg and SendMsgs will not crash with + // empty buffers. + wm := socket.Message{ + Buffers: [][]byte{{}}, + Addr: c.LocalAddr(), + } + cc.SendMsg(&wm, 0) + wms := []socket.Message{ + {Buffers: [][]byte{{}}, Addr: c.LocalAddr()}, + } + cc.SendMsgs(wms, 0) +} + +func BenchmarkUDP(b *testing.B) { + c, err := nettest.NewLocalPacketListener("udp") + if err != nil { + b.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err) + } + defer c.Close() + cc, err := socket.NewConn(c.(net.Conn)) + if err != nil { + b.Fatal(err) + } + data := []byte("HELLO-R-U-THERE") + wm := socket.Message{ + Buffers: [][]byte{data}, + Addr: c.LocalAddr(), + } + rm := socket.Message{ + Buffers: [][]byte{make([]byte, 128)}, + OOB: make([]byte, 128), + } + + for M := 1; M <= 1<<9; M = M << 1 { + b.Run(fmt.Sprintf("Iter-%d", M), func(b *testing.B) { + for i := 0; i < b.N; i++ { + for j := 0; j < M; j++ { + if err := cc.SendMsg(&wm, 0); err != nil { + b.Fatal(err) + } + if err := cc.RecvMsg(&rm, 0); err != nil { + b.Fatal(err) + } + } + } + }) + switch runtime.GOOS { + case "android", "linux": + wms := make([]socket.Message, M) + for i := range wms { + wms[i].Buffers = [][]byte{data} + wms[i].Addr = c.LocalAddr() + } + rms := make([]socket.Message, M) + for i := range rms { + rms[i].Buffers = [][]byte{make([]byte, 128)} + rms[i].OOB = make([]byte, 128) + } + b.Run(fmt.Sprintf("Batch-%d", M), func(b *testing.B) { + for i := 0; i < b.N; i++ { + if _, err := cc.SendMsgs(wms, 0); err != nil { + b.Fatal(err) + } + if _, err := cc.RecvMsgs(rms, 0); err != nil { + b.Fatal(err) + } + } + }) + } + } +} diff --git a/vendor/golang.org/x/net/internal/socket/sys.go b/vendor/golang.org/x/net/internal/socket/sys.go index 51702b8..4f0eead 100644 --- a/vendor/golang.org/x/net/internal/socket/sys.go +++ b/vendor/golang.org/x/net/internal/socket/sys.go @@ -9,9 +9,13 @@ import ( "unsafe" ) -// NativeEndian is the machine native endian implementation of -// ByteOrder. -var NativeEndian binary.ByteOrder +var ( + // NativeEndian is the machine native endian implementation of + // ByteOrder. + NativeEndian binary.ByteOrder + + kernelAlign int +) func init() { i := uint32(1) @@ -21,4 +25,9 @@ func init() { } else { NativeEndian = binary.BigEndian } + kernelAlign = probeProtocolStack() +} + +func roundup(l int) int { + return (l + kernelAlign - 1) & ^(kernelAlign - 1) } diff --git a/vendor/golang.org/x/net/internal/socket/sys_bsd.go b/vendor/golang.org/x/net/internal/socket/sys_bsd.go new file mode 100644 index 0000000..f13e14f --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_bsd.go @@ -0,0 +1,17 @@ +// Copyright 2017 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 dragonfly freebsd openbsd + +package socket + +import "errors" + +func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + return 0, errors.New("not implemented") +} + +func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + return 0, errors.New("not implemented") +} diff --git a/vendor/golang.org/x/net/internal/socket/sys_bsdvar.go b/vendor/golang.org/x/net/internal/socket/sys_bsdvar.go new file mode 100644 index 0000000..f723fa3 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_bsdvar.go @@ -0,0 +1,14 @@ +// Copyright 2017 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 freebsd netbsd openbsd + +package socket + +import "unsafe" + +func probeProtocolStack() int { + var p uintptr + return int(unsafe.Sizeof(p)) +} diff --git a/vendor/golang.org/x/net/internal/socket/sys_darwin.go b/vendor/golang.org/x/net/internal/socket/sys_darwin.go new file mode 100644 index 0000000..b17d223 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_darwin.go @@ -0,0 +1,7 @@ +// Copyright 2017 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. + +package socket + +func probeProtocolStack() int { return 4 } diff --git a/vendor/golang.org/x/net/internal/socket/sys_dragonfly.go b/vendor/golang.org/x/net/internal/socket/sys_dragonfly.go new file mode 100644 index 0000000..b17d223 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_dragonfly.go @@ -0,0 +1,7 @@ +// Copyright 2017 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. + +package socket + +func probeProtocolStack() int { return 4 } diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux.go b/vendor/golang.org/x/net/internal/socket/sys_linux.go new file mode 100644 index 0000000..1559521 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux.go @@ -0,0 +1,27 @@ +// Copyright 2017 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 linux,!s390x,!386 + +package socket + +import ( + "syscall" + "unsafe" +) + +func probeProtocolStack() int { + var p uintptr + return int(unsafe.Sizeof(p)) +} + +func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + n, _, errno := syscall.Syscall6(sysRECVMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0) + return int(n), errnoErr(errno) +} + +func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + n, _, errno := syscall.Syscall6(sysSENDMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0) + return int(n), errnoErr(errno) +} diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_386.go b/vendor/golang.org/x/net/internal/socket/sys_linux_386.go index 0a9ec1a..235b2cc 100644 --- a/vendor/golang.org/x/net/internal/socket/sys_linux_386.go +++ b/vendor/golang.org/x/net/internal/socket/sys_linux_386.go @@ -9,9 +9,15 @@ import ( "unsafe" ) +func probeProtocolStack() int { return 4 } + const ( sysSETSOCKOPT = 0xe sysGETSOCKOPT = 0xf + sysSENDMSG = 0x10 + sysRECVMSG = 0x11 + sysRECVMMSG = 0x13 + sysSENDMMSG = 0x14 ) func socketcall(call, a0, a1, a2, a3, a4, a5 uintptr) (uintptr, syscall.Errno) @@ -27,3 +33,23 @@ func setsockopt(s uintptr, level, name int, b []byte) error { _, errno := socketcall(sysSETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(len(b)), 0) return errnoErr(errno) } + +func recvmsg(s uintptr, h *msghdr, flags int) (int, error) { + n, errno := socketcall(sysRECVMSG, s, uintptr(unsafe.Pointer(h)), uintptr(flags), 0, 0, 0) + return int(n), errnoErr(errno) +} + +func sendmsg(s uintptr, h *msghdr, flags int) (int, error) { + n, errno := socketcall(sysSENDMSG, s, uintptr(unsafe.Pointer(h)), uintptr(flags), 0, 0, 0) + return int(n), errnoErr(errno) +} + +func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + n, errno := socketcall(sysRECVMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0) + return int(n), errnoErr(errno) +} + +func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + n, errno := socketcall(sysSENDMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0) + return int(n), errnoErr(errno) +} diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_amd64.go b/vendor/golang.org/x/net/internal/socket/sys_linux_amd64.go new file mode 100644 index 0000000..9decee2 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux_amd64.go @@ -0,0 +1,10 @@ +// Copyright 2017 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. + +package socket + +const ( + sysRECVMMSG = 0x12b + sysSENDMMSG = 0x133 +) diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_arm.go b/vendor/golang.org/x/net/internal/socket/sys_linux_arm.go new file mode 100644 index 0000000..d753b43 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux_arm.go @@ -0,0 +1,10 @@ +// Copyright 2017 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. + +package socket + +const ( + sysRECVMMSG = 0x16d + sysSENDMMSG = 0x176 +) diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_arm64.go b/vendor/golang.org/x/net/internal/socket/sys_linux_arm64.go new file mode 100644 index 0000000..b670894 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux_arm64.go @@ -0,0 +1,10 @@ +// Copyright 2017 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. + +package socket + +const ( + sysRECVMMSG = 0xf3 + sysSENDMMSG = 0x10d +) diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_mips.go b/vendor/golang.org/x/net/internal/socket/sys_linux_mips.go new file mode 100644 index 0000000..9c0d740 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux_mips.go @@ -0,0 +1,10 @@ +// Copyright 2017 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. + +package socket + +const ( + sysRECVMMSG = 0x10ef + sysSENDMMSG = 0x10f7 +) diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_mips64.go b/vendor/golang.org/x/net/internal/socket/sys_linux_mips64.go new file mode 100644 index 0000000..071a4ab --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux_mips64.go @@ -0,0 +1,10 @@ +// Copyright 2017 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. + +package socket + +const ( + sysRECVMMSG = 0x14ae + sysSENDMMSG = 0x14b6 +) diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_mips64le.go b/vendor/golang.org/x/net/internal/socket/sys_linux_mips64le.go new file mode 100644 index 0000000..071a4ab --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux_mips64le.go @@ -0,0 +1,10 @@ +// Copyright 2017 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. + +package socket + +const ( + sysRECVMMSG = 0x14ae + sysSENDMMSG = 0x14b6 +) diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_mipsle.go b/vendor/golang.org/x/net/internal/socket/sys_linux_mipsle.go new file mode 100644 index 0000000..9c0d740 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux_mipsle.go @@ -0,0 +1,10 @@ +// Copyright 2017 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. + +package socket + +const ( + sysRECVMMSG = 0x10ef + sysSENDMMSG = 0x10f7 +) diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64.go b/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64.go new file mode 100644 index 0000000..21c1e3f --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64.go @@ -0,0 +1,10 @@ +// Copyright 2017 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. + +package socket + +const ( + sysRECVMMSG = 0x157 + sysSENDMMSG = 0x15d +) diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64le.go b/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64le.go new file mode 100644 index 0000000..21c1e3f --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64le.go @@ -0,0 +1,10 @@ +// Copyright 2017 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. + +package socket + +const ( + sysRECVMMSG = 0x157 + sysSENDMMSG = 0x15d +) diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.go b/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.go new file mode 100644 index 0000000..327979e --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.go @@ -0,0 +1,55 @@ +// Copyright 2017 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. + +package socket + +import ( + "syscall" + "unsafe" +) + +func probeProtocolStack() int { return 8 } + +const ( + sysSETSOCKOPT = 0xe + sysGETSOCKOPT = 0xf + sysSENDMSG = 0x10 + sysRECVMSG = 0x11 + sysRECVMMSG = 0x13 + sysSENDMMSG = 0x14 +) + +func socketcall(call, a0, a1, a2, a3, a4, a5 uintptr) (uintptr, syscall.Errno) +func rawsocketcall(call, a0, a1, a2, a3, a4, a5 uintptr) (uintptr, syscall.Errno) + +func getsockopt(s uintptr, level, name int, b []byte) (int, error) { + l := uint32(len(b)) + _, errno := socketcall(sysGETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(unsafe.Pointer(&l)), 0) + return int(l), errnoErr(errno) +} + +func setsockopt(s uintptr, level, name int, b []byte) error { + _, errno := socketcall(sysSETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(len(b)), 0) + return errnoErr(errno) +} + +func recvmsg(s uintptr, h *msghdr, flags int) (int, error) { + n, errno := socketcall(sysRECVMSG, s, uintptr(unsafe.Pointer(h)), uintptr(flags), 0, 0, 0) + return int(n), errnoErr(errno) +} + +func sendmsg(s uintptr, h *msghdr, flags int) (int, error) { + n, errno := socketcall(sysSENDMSG, s, uintptr(unsafe.Pointer(h)), uintptr(flags), 0, 0, 0) + return int(n), errnoErr(errno) +} + +func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + n, errno := socketcall(sysRECVMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0) + return int(n), errnoErr(errno) +} + +func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + n, errno := socketcall(sysSENDMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0) + return int(n), errnoErr(errno) +} diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.s b/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.s new file mode 100644 index 0000000..06d7562 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.s @@ -0,0 +1,11 @@ +// Copyright 2017 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. + +#include "textflag.h" + +TEXT ·socketcall(SB),NOSPLIT,$0-72 + JMP syscall·socketcall(SB) + +TEXT ·rawsocketcall(SB),NOSPLIT,$0-72 + JMP syscall·rawsocketcall(SB) diff --git a/vendor/golang.org/x/net/internal/socket/sys_netbsd.go b/vendor/golang.org/x/net/internal/socket/sys_netbsd.go new file mode 100644 index 0000000..431851c --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_netbsd.go @@ -0,0 +1,25 @@ +// Copyright 2017 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. + +package socket + +import ( + "syscall" + "unsafe" +) + +const ( + sysRECVMMSG = 0x1db + sysSENDMMSG = 0x1dc +) + +func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + n, _, errno := syscall.Syscall6(sysRECVMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0) + return int(n), errnoErr(errno) +} + +func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + n, _, errno := syscall.Syscall6(sysSENDMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0) + return int(n), errnoErr(errno) +} diff --git a/vendor/golang.org/x/net/internal/socket/sys_posix.go b/vendor/golang.org/x/net/internal/socket/sys_posix.go new file mode 100644 index 0000000..dc130c2 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/sys_posix.go @@ -0,0 +1,168 @@ +// Copyright 2017 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 go1.9 +// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows + +package socket + +import ( + "encoding/binary" + "errors" + "net" + "runtime" + "strconv" + "sync" + "time" +) + +func marshalInetAddr(a net.Addr) []byte { + switch a := a.(type) { + case *net.TCPAddr: + return marshalSockaddr(a.IP, a.Port, a.Zone) + case *net.UDPAddr: + return marshalSockaddr(a.IP, a.Port, a.Zone) + case *net.IPAddr: + return marshalSockaddr(a.IP, 0, a.Zone) + default: + return nil + } +} + +func marshalSockaddr(ip net.IP, port int, zone string) []byte { + if ip4 := ip.To4(); ip4 != nil { + b := make([]byte, sizeofSockaddrInet) + switch runtime.GOOS { + case "android", "linux", "solaris", "windows": + NativeEndian.PutUint16(b[:2], uint16(sysAF_INET)) + default: + b[0] = sizeofSockaddrInet + b[1] = sysAF_INET + } + binary.BigEndian.PutUint16(b[2:4], uint16(port)) + copy(b[4:8], ip4) + return b + } + if ip6 := ip.To16(); ip6 != nil && ip.To4() == nil { + b := make([]byte, sizeofSockaddrInet6) + switch runtime.GOOS { + case "android", "linux", "solaris", "windows": + NativeEndian.PutUint16(b[:2], uint16(sysAF_INET6)) + default: + b[0] = sizeofSockaddrInet6 + b[1] = sysAF_INET6 + } + binary.BigEndian.PutUint16(b[2:4], uint16(port)) + copy(b[8:24], ip6) + if zone != "" { + NativeEndian.PutUint32(b[24:28], uint32(zoneCache.index(zone))) + } + return b + } + return nil +} + +func parseInetAddr(b []byte, network string) (net.Addr, error) { + if len(b) < 2 { + return nil, errors.New("invalid address") + } + var af int + switch runtime.GOOS { + case "android", "linux", "solaris", "windows": + af = int(NativeEndian.Uint16(b[:2])) + default: + af = int(b[1]) + } + var ip net.IP + var zone string + if af == sysAF_INET { + if len(b) < sizeofSockaddrInet { + return nil, errors.New("short address") + } + ip = make(net.IP, net.IPv4len) + copy(ip, b[4:8]) + } + if af == sysAF_INET6 { + if len(b) < sizeofSockaddrInet6 { + return nil, errors.New("short address") + } + ip = make(net.IP, net.IPv6len) + copy(ip, b[8:24]) + if id := int(NativeEndian.Uint32(b[24:28])); id > 0 { + zone = zoneCache.name(id) + } + } + switch network { + case "tcp", "tcp4", "tcp6": + return &net.TCPAddr{IP: ip, Port: int(binary.BigEndian.Uint16(b[2:4])), Zone: zone}, nil + case "udp", "udp4", "udp6": + return &net.UDPAddr{IP: ip, Port: int(binary.BigEndian.Uint16(b[2:4])), Zone: zone}, nil + default: + return &net.IPAddr{IP: ip, Zone: zone}, nil + } +} + +// An ipv6ZoneCache represents a cache holding partial network +// interface information. It is used for reducing the cost of IPv6 +// addressing scope zone resolution. +// +// Multiple names sharing the index are managed by first-come +// first-served basis for consistency. +type ipv6ZoneCache struct { + sync.RWMutex // guard the following + lastFetched time.Time // last time routing information was fetched + toIndex map[string]int // interface name to its index + toName map[int]string // interface index to its name +} + +var zoneCache = ipv6ZoneCache{ + toIndex: make(map[string]int), + toName: make(map[int]string), +} + +func (zc *ipv6ZoneCache) update(ift []net.Interface) { + zc.Lock() + defer zc.Unlock() + now := time.Now() + if zc.lastFetched.After(now.Add(-60 * time.Second)) { + return + } + zc.lastFetched = now + if len(ift) == 0 { + var err error + if ift, err = net.Interfaces(); err != nil { + return + } + } + zc.toIndex = make(map[string]int, len(ift)) + zc.toName = make(map[int]string, len(ift)) + for _, ifi := range ift { + zc.toIndex[ifi.Name] = ifi.Index + if _, ok := zc.toName[ifi.Index]; !ok { + zc.toName[ifi.Index] = ifi.Name + } + } +} + +func (zc *ipv6ZoneCache) name(zone int) string { + zoneCache.update(nil) + zoneCache.RLock() + defer zoneCache.RUnlock() + name, ok := zoneCache.toName[zone] + if !ok { + name = strconv.Itoa(zone) + } + return name +} + +func (zc *ipv6ZoneCache) index(zone string) int { + zoneCache.update(nil) + zoneCache.RLock() + defer zoneCache.RUnlock() + index, ok := zoneCache.toIndex[zone] + if !ok { + index, _ = strconv.Atoi(zone) + } + return index +} diff --git a/vendor/golang.org/x/net/internal/socket/sys_solaris.go b/vendor/golang.org/x/net/internal/socket/sys_solaris.go index 707adaa..cced74e 100644 --- a/vendor/golang.org/x/net/internal/socket/sys_solaris.go +++ b/vendor/golang.org/x/net/internal/socket/sys_solaris.go @@ -5,19 +5,37 @@ package socket import ( + "errors" + "runtime" "syscall" "unsafe" ) +func probeProtocolStack() int { + switch runtime.GOARCH { + case "amd64": + return 4 + default: + var p uintptr + return int(unsafe.Sizeof(p)) + } +} + //go:cgo_import_dynamic libc___xnet_getsockopt __xnet_getsockopt "libsocket.so" //go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so" +//go:cgo_import_dynamic libc___xnet_recvmsg __xnet_recvmsg "libsocket.so" +//go:cgo_import_dynamic libc___xnet_sendmsg __xnet_sendmsg "libsocket.so" //go:linkname procGetsockopt libc___xnet_getsockopt //go:linkname procSetsockopt libc_setsockopt +//go:linkname procRecvmsg libc___xnet_recvmsg +//go:linkname procSendmsg libc___xnet_sendmsg var ( procGetsockopt uintptr procSetsockopt uintptr + procRecvmsg uintptr + procSendmsg uintptr ) func sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (uintptr, uintptr, syscall.Errno) @@ -33,3 +51,21 @@ func setsockopt(s uintptr, level, name int, b []byte) error { _, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procSetsockopt)), 5, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(len(b)), 0) return errnoErr(errno) } + +func recvmsg(s uintptr, h *msghdr, flags int) (int, error) { + n, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procRecvmsg)), 3, s, uintptr(unsafe.Pointer(h)), uintptr(flags), 0, 0, 0) + return int(n), errnoErr(errno) +} + +func sendmsg(s uintptr, h *msghdr, flags int) (int, error) { + n, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procSendmsg)), 3, s, uintptr(unsafe.Pointer(h)), uintptr(flags), 0, 0, 0) + return int(n), errnoErr(errno) +} + +func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + return 0, errors.New("not implemented") +} + +func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + return 0, errors.New("not implemented") +} diff --git a/vendor/golang.org/x/net/internal/socket/sys_stub.go b/vendor/golang.org/x/net/internal/socket/sys_stub.go index c3a8e13..d9f06d0 100644 --- a/vendor/golang.org/x/net/internal/socket/sys_stub.go +++ b/vendor/golang.org/x/net/internal/socket/sys_stub.go @@ -2,11 +2,42 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build nacl plan9 +// +build !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris,!windows package socket -import "errors" +import ( + "errors" + "net" + "runtime" + "unsafe" +) + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0xa + + sysSOCK_RAW = 0x3 +) + +func probeProtocolStack() int { + switch runtime.GOARCH { + case "amd64p32", "mips64p32": + return 4 + default: + var p uintptr + return int(unsafe.Sizeof(p)) + } +} + +func marshalInetAddr(ip net.IP, port int, zone string) []byte { + return nil +} + +func parseInetAddr(b []byte, network string) (net.Addr, error) { + return nil, errors.New("not implemented") +} func getsockopt(s uintptr, level, name int, b []byte) (int, error) { return 0, errors.New("not implemented") @@ -15,3 +46,19 @@ func getsockopt(s uintptr, level, name int, b []byte) (int, error) { func setsockopt(s uintptr, level, name int, b []byte) error { return errors.New("not implemented") } + +func recvmsg(s uintptr, h *msghdr, flags int) (int, error) { + return 0, errors.New("not implemented") +} + +func sendmsg(s uintptr, h *msghdr, flags int) (int, error) { + return 0, errors.New("not implemented") +} + +func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + return 0, errors.New("not implemented") +} + +func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + return 0, errors.New("not implemented") +} diff --git a/vendor/golang.org/x/net/internal/socket/sys_unix.go b/vendor/golang.org/x/net/internal/socket/sys_unix.go index c94595e..18eba30 100644 --- a/vendor/golang.org/x/net/internal/socket/sys_unix.go +++ b/vendor/golang.org/x/net/internal/socket/sys_unix.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build darwin dragonfly freebsd linux,!386 netbsd openbsd +// +build darwin dragonfly freebsd linux,!s390x,!386 netbsd openbsd package socket @@ -21,3 +21,13 @@ func setsockopt(s uintptr, level, name int, b []byte) error { _, _, errno := syscall.Syscall6(syscall.SYS_SETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(len(b)), 0) return errnoErr(errno) } + +func recvmsg(s uintptr, h *msghdr, flags int) (int, error) { + n, _, errno := syscall.Syscall(syscall.SYS_RECVMSG, s, uintptr(unsafe.Pointer(h)), uintptr(flags)) + return int(n), errnoErr(errno) +} + +func sendmsg(s uintptr, h *msghdr, flags int) (int, error) { + n, _, errno := syscall.Syscall(syscall.SYS_SENDMSG, s, uintptr(unsafe.Pointer(h)), uintptr(flags)) + return int(n), errnoErr(errno) +} diff --git a/vendor/golang.org/x/net/internal/socket/sys_windows.go b/vendor/golang.org/x/net/internal/socket/sys_windows.go index bd3bce6..54a470e 100644 --- a/vendor/golang.org/x/net/internal/socket/sys_windows.go +++ b/vendor/golang.org/x/net/internal/socket/sys_windows.go @@ -5,10 +5,44 @@ package socket import ( + "errors" "syscall" "unsafe" ) +func probeProtocolStack() int { + var p uintptr + return int(unsafe.Sizeof(p)) +} + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x17 + + sysSOCK_RAW = 0x3 +) + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) + func getsockopt(s uintptr, level, name int, b []byte) (int, error) { l := uint32(len(b)) err := syscall.Getsockopt(syscall.Handle(s), int32(level), int32(name), (*byte)(unsafe.Pointer(&b[0])), (*int32)(unsafe.Pointer(&l))) @@ -18,3 +52,19 @@ func getsockopt(s uintptr, level, name int, b []byte) (int, error) { func setsockopt(s uintptr, level, name int, b []byte) error { return syscall.Setsockopt(syscall.Handle(s), int32(level), int32(name), (*byte)(unsafe.Pointer(&b[0])), int32(len(b))) } + +func recvmsg(s uintptr, h *msghdr, flags int) (int, error) { + return 0, errors.New("not implemented") +} + +func sendmsg(s uintptr, h *msghdr, flags int) (int, error) { + return 0, errors.New("not implemented") +} + +func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + return 0, errors.New("not implemented") +} + +func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + return 0, errors.New("not implemented") +} diff --git a/vendor/golang.org/x/net/internal/socket/zsys_darwin_386.go b/vendor/golang.org/x/net/internal/socket/zsys_darwin_386.go new file mode 100644 index 0000000..26f8fef --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_darwin_386.go @@ -0,0 +1,59 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_darwin.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x1e + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_darwin_amd64.go b/vendor/golang.org/x/net/internal/socket/zsys_darwin_amd64.go new file mode 100644 index 0000000..e2987f7 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_darwin_amd64.go @@ -0,0 +1,61 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_darwin.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x1e + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x30 + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_darwin_arm.go b/vendor/golang.org/x/net/internal/socket/zsys_darwin_arm.go new file mode 100644 index 0000000..26f8fef --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_darwin_arm.go @@ -0,0 +1,59 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_darwin.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x1e + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_darwin_arm64.go b/vendor/golang.org/x/net/internal/socket/zsys_darwin_arm64.go new file mode 100644 index 0000000..e2987f7 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_darwin_arm64.go @@ -0,0 +1,61 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_darwin.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x1e + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x30 + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_dragonfly_amd64.go b/vendor/golang.org/x/net/internal/socket/zsys_dragonfly_amd64.go new file mode 100644 index 0000000..c582abd --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_dragonfly_amd64.go @@ -0,0 +1,61 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_dragonfly.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x1c + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x30 + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_freebsd_386.go b/vendor/golang.org/x/net/internal/socket/zsys_freebsd_386.go new file mode 100644 index 0000000..04a2488 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_freebsd_386.go @@ -0,0 +1,59 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_freebsd.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x1c + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_freebsd_amd64.go b/vendor/golang.org/x/net/internal/socket/zsys_freebsd_amd64.go new file mode 100644 index 0000000..35c7cb9 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_freebsd_amd64.go @@ -0,0 +1,61 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_freebsd.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x1c + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x30 + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_freebsd_arm.go b/vendor/golang.org/x/net/internal/socket/zsys_freebsd_arm.go new file mode 100644 index 0000000..04a2488 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_freebsd_arm.go @@ -0,0 +1,59 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_freebsd.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x1c + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_386.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_386.go new file mode 100644 index 0000000..4302069 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_386.go @@ -0,0 +1,63 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0xa + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c + sizeofMmsghdr = 0x20 + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_amd64.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_amd64.go new file mode 100644 index 0000000..1502f6c --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_amd64.go @@ -0,0 +1,66 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0xa + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 + Pad_cgo_0 [4]byte +} + +type cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x38 + sizeofMmsghdr = 0x40 + sizeofCmsghdr = 0x10 + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_arm.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_arm.go new file mode 100644 index 0000000..4302069 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_arm.go @@ -0,0 +1,63 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0xa + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c + sizeofMmsghdr = 0x20 + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_arm64.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_arm64.go new file mode 100644 index 0000000..1502f6c --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_arm64.go @@ -0,0 +1,66 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0xa + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 + Pad_cgo_0 [4]byte +} + +type cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x38 + sizeofMmsghdr = 0x40 + sizeofCmsghdr = 0x10 + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_mips.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_mips.go new file mode 100644 index 0000000..4302069 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_mips.go @@ -0,0 +1,63 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0xa + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c + sizeofMmsghdr = 0x20 + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64.go new file mode 100644 index 0000000..1502f6c --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64.go @@ -0,0 +1,66 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0xa + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 + Pad_cgo_0 [4]byte +} + +type cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x38 + sizeofMmsghdr = 0x40 + sizeofCmsghdr = 0x10 + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64le.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64le.go new file mode 100644 index 0000000..1502f6c --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64le.go @@ -0,0 +1,66 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0xa + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 + Pad_cgo_0 [4]byte +} + +type cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x38 + sizeofMmsghdr = 0x40 + sizeofCmsghdr = 0x10 + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_mipsle.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_mipsle.go new file mode 100644 index 0000000..4302069 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_mipsle.go @@ -0,0 +1,63 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0xa + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c + sizeofMmsghdr = 0x20 + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64.go new file mode 100644 index 0000000..1502f6c --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64.go @@ -0,0 +1,66 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0xa + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 + Pad_cgo_0 [4]byte +} + +type cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x38 + sizeofMmsghdr = 0x40 + sizeofCmsghdr = 0x10 + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64le.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64le.go new file mode 100644 index 0000000..1502f6c --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64le.go @@ -0,0 +1,66 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0xa + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 + Pad_cgo_0 [4]byte +} + +type cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x38 + sizeofMmsghdr = 0x40 + sizeofCmsghdr = 0x10 + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_s390x.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_s390x.go new file mode 100644 index 0000000..1502f6c --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_s390x.go @@ -0,0 +1,66 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0xa + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 + Pad_cgo_0 [4]byte +} + +type cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x38 + sizeofMmsghdr = 0x40 + sizeofCmsghdr = 0x10 + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_netbsd_386.go b/vendor/golang.org/x/net/internal/socket/zsys_netbsd_386.go new file mode 100644 index 0000000..db60491 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_netbsd_386.go @@ -0,0 +1,65 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_netbsd.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x18 + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c + sizeofMmsghdr = 0x20 + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_netbsd_amd64.go b/vendor/golang.org/x/net/internal/socket/zsys_netbsd_amd64.go new file mode 100644 index 0000000..2a1a799 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_netbsd_amd64.go @@ -0,0 +1,68 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_netbsd.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x18 + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 + Pad_cgo_0 [4]byte +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x30 + sizeofMmsghdr = 0x40 + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm.go b/vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm.go new file mode 100644 index 0000000..db60491 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm.go @@ -0,0 +1,65 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_netbsd.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x18 + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c + sizeofMmsghdr = 0x20 + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_openbsd_386.go b/vendor/golang.org/x/net/internal/socket/zsys_openbsd_386.go new file mode 100644 index 0000000..1c83636 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_openbsd_386.go @@ -0,0 +1,59 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_openbsd.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x18 + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_openbsd_amd64.go b/vendor/golang.org/x/net/internal/socket/zsys_openbsd_amd64.go new file mode 100644 index 0000000..a6c0bf4 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_openbsd_amd64.go @@ -0,0 +1,61 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_openbsd.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x18 + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen uint32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x30 + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_openbsd_arm.go b/vendor/golang.org/x/net/internal/socket/zsys_openbsd_arm.go new file mode 100644 index 0000000..1c83636 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_openbsd_arm.go @@ -0,0 +1,59 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_openbsd.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x18 + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/golang.org/x/net/internal/socket/zsys_solaris_amd64.go b/vendor/golang.org/x/net/internal/socket/zsys_solaris_amd64.go new file mode 100644 index 0000000..327c632 --- /dev/null +++ b/vendor/golang.org/x/net/internal/socket/zsys_solaris_amd64.go @@ -0,0 +1,60 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_solaris.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x1a + + sysSOCK_RAW = 0x4 +) + +type iovec struct { + Base *int8 + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Accrights *int8 + Accrightslen int32 + Pad_cgo_2 [4]byte +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 + X__sin6_src_id uint32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x30 + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x20 +) diff --git a/vendor/golang.org/x/net/ipv4/batch.go b/vendor/golang.org/x/net/ipv4/batch.go new file mode 100644 index 0000000..b445499 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/batch.go @@ -0,0 +1,191 @@ +// Copyright 2017 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 go1.9 + +package ipv4 + +import ( + "net" + "runtime" + "syscall" + + "golang.org/x/net/internal/socket" +) + +// BUG(mikio): On Windows, the ReadBatch and WriteBatch methods of +// PacketConn are not implemented. + +// BUG(mikio): On Windows, the ReadBatch and WriteBatch methods of +// RawConn are not implemented. + +// A Message represents an IO message. +// +// type Message struct { +// Buffers [][]byte +// OOB []byte +// Addr net.Addr +// N int +// NN int +// Flags int +// } +// +// The Buffers fields represents a list of contiguous buffers, which +// can be used for vectored IO, for example, putting a header and a +// payload in each slice. +// When writing, the Buffers field must contain at least one byte to +// write. +// When reading, the Buffers field will always contain a byte to read. +// +// The OOB field contains protocol-specific control or miscellaneous +// ancillary data known as out-of-band data. +// It can be nil when not required. +// +// The Addr field specifies a destination address when writing. +// It can be nil when the underlying protocol of the endpoint uses +// connection-oriented communication. +// After a successful read, it may contain the source address on the +// received packet. +// +// The N field indicates the number of bytes read or written from/to +// Buffers. +// +// The NN field indicates the number of bytes read or written from/to +// OOB. +// +// The Flags field contains protocol-specific information on the +// received message. +type Message = socket.Message + +// ReadBatch reads a batch of messages. +// +// The provided flags is a set of platform-dependent flags, such as +// syscall.MSG_PEEK. +// +// On a successful read it returns the number of messages received, up +// to len(ms). +// +// On Linux, a batch read will be optimized. +// On other platforms, this method will read only a single message. +// +// Unlike the ReadFrom method, it doesn't strip the IPv4 header +// followed by option headers from the received IPv4 datagram when the +// underlying transport is net.IPConn. Each Buffers field of Message +// must be large enough to accommodate an IPv4 header and option +// headers. +func (c *payloadHandler) ReadBatch(ms []Message, flags int) (int, error) { + if !c.ok() { + return 0, syscall.EINVAL + } + switch runtime.GOOS { + case "linux": + n, err := c.RecvMsgs([]socket.Message(ms), flags) + if err != nil { + err = &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + return n, err + default: + n := 1 + err := c.RecvMsg(&ms[0], flags) + if err != nil { + n = 0 + err = &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + return n, err + } +} + +// WriteBatch writes a batch of messages. +// +// The provided flags is a set of platform-dependent flags, such as +// syscall.MSG_DONTROUTE. +// +// It returns the number of messages written on a successful write. +// +// On Linux, a batch write will be optimized. +// On other platforms, this method will write only a single message. +func (c *payloadHandler) WriteBatch(ms []Message, flags int) (int, error) { + if !c.ok() { + return 0, syscall.EINVAL + } + switch runtime.GOOS { + case "linux": + n, err := c.SendMsgs([]socket.Message(ms), flags) + if err != nil { + err = &net.OpError{Op: "write", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + return n, err + default: + n := 1 + err := c.SendMsg(&ms[0], flags) + if err != nil { + n = 0 + err = &net.OpError{Op: "write", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + return n, err + } +} + +// ReadBatch reads a batch of messages. +// +// The provided flags is a set of platform-dependent flags, such as +// syscall.MSG_PEEK. +// +// On a successful read it returns the number of messages received, up +// to len(ms). +// +// On Linux, a batch read will be optimized. +// On other platforms, this method will read only a single message. +func (c *packetHandler) ReadBatch(ms []Message, flags int) (int, error) { + if !c.ok() { + return 0, syscall.EINVAL + } + switch runtime.GOOS { + case "linux": + n, err := c.RecvMsgs([]socket.Message(ms), flags) + if err != nil { + err = &net.OpError{Op: "read", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err} + } + return n, err + default: + n := 1 + err := c.RecvMsg(&ms[0], flags) + if err != nil { + n = 0 + err = &net.OpError{Op: "read", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err} + } + return n, err + } +} + +// WriteBatch writes a batch of messages. +// +// The provided flags is a set of platform-dependent flags, such as +// syscall.MSG_DONTROUTE. +// +// It returns the number of messages written on a successful write. +// +// On Linux, a batch write will be optimized. +// On other platforms, this method will write only a single message. +func (c *packetHandler) WriteBatch(ms []Message, flags int) (int, error) { + if !c.ok() { + return 0, syscall.EINVAL + } + switch runtime.GOOS { + case "linux": + n, err := c.SendMsgs([]socket.Message(ms), flags) + if err != nil { + err = &net.OpError{Op: "write", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err} + } + return n, err + default: + n := 1 + err := c.SendMsg(&ms[0], flags) + if err != nil { + n = 0 + err = &net.OpError{Op: "write", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err} + } + return n, err + } +} diff --git a/vendor/golang.org/x/net/ipv4/control.go b/vendor/golang.org/x/net/ipv4/control.go index da4da2d..a2b02ca 100644 --- a/vendor/golang.org/x/net/ipv4/control.go +++ b/vendor/golang.org/x/net/ipv4/control.go @@ -8,6 +8,9 @@ import ( "fmt" "net" "sync" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" ) type rawOpt struct { @@ -51,6 +54,77 @@ func (cm *ControlMessage) String() string { return fmt.Sprintf("ttl=%d src=%v dst=%v ifindex=%d", cm.TTL, cm.Src, cm.Dst, cm.IfIndex) } +// Marshal returns the binary encoding of cm. +func (cm *ControlMessage) Marshal() []byte { + if cm == nil { + return nil + } + var m socket.ControlMessage + if ctlOpts[ctlPacketInfo].name > 0 && (cm.Src.To4() != nil || cm.IfIndex > 0) { + m = socket.NewControlMessage([]int{ctlOpts[ctlPacketInfo].length}) + } + if len(m) > 0 { + ctlOpts[ctlPacketInfo].marshal(m, cm) + } + return m +} + +// Parse parses b as a control message and stores the result in cm. +func (cm *ControlMessage) Parse(b []byte) error { + ms, err := socket.ControlMessage(b).Parse() + if err != nil { + return err + } + for _, m := range ms { + lvl, typ, l, err := m.ParseHeader() + if err != nil { + return err + } + if lvl != iana.ProtocolIP { + continue + } + switch { + case typ == ctlOpts[ctlTTL].name && l >= ctlOpts[ctlTTL].length: + ctlOpts[ctlTTL].parse(cm, m.Data(l)) + case typ == ctlOpts[ctlDst].name && l >= ctlOpts[ctlDst].length: + ctlOpts[ctlDst].parse(cm, m.Data(l)) + case typ == ctlOpts[ctlInterface].name && l >= ctlOpts[ctlInterface].length: + ctlOpts[ctlInterface].parse(cm, m.Data(l)) + case typ == ctlOpts[ctlPacketInfo].name && l >= ctlOpts[ctlPacketInfo].length: + ctlOpts[ctlPacketInfo].parse(cm, m.Data(l)) + } + } + return nil +} + +// NewControlMessage returns a new control message. +// +// The returned message is large enough for options specified by cf. +func NewControlMessage(cf ControlFlags) []byte { + opt := rawOpt{cflags: cf} + var l int + if opt.isset(FlagTTL) && ctlOpts[ctlTTL].name > 0 { + l += socket.ControlMessageSpace(ctlOpts[ctlTTL].length) + } + if ctlOpts[ctlPacketInfo].name > 0 { + if opt.isset(FlagSrc | FlagDst | FlagInterface) { + l += socket.ControlMessageSpace(ctlOpts[ctlPacketInfo].length) + } + } else { + if opt.isset(FlagDst) && ctlOpts[ctlDst].name > 0 { + l += socket.ControlMessageSpace(ctlOpts[ctlDst].length) + } + if opt.isset(FlagInterface) && ctlOpts[ctlInterface].name > 0 { + l += socket.ControlMessageSpace(ctlOpts[ctlInterface].length) + } + } + var b []byte + if l > 0 { + b = make([]byte, l) + } + return b +} + // Ancillary data socket options const ( ctlTTL = iota // header field diff --git a/vendor/golang.org/x/net/ipv4/control_bsd.go b/vendor/golang.org/x/net/ipv4/control_bsd.go index 3f27f99..77e7ad5 100644 --- a/vendor/golang.org/x/net/ipv4/control_bsd.go +++ b/vendor/golang.org/x/net/ipv4/control_bsd.go @@ -12,26 +12,26 @@ import ( "unsafe" "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" ) func marshalDst(b []byte, cm *ControlMessage) []byte { - m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0])) - m.Level = iana.ProtocolIP - m.Type = sysIP_RECVDSTADDR - m.SetLen(syscall.CmsgLen(net.IPv4len)) - return b[syscall.CmsgSpace(net.IPv4len):] + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIP, sysIP_RECVDSTADDR, net.IPv4len) + return m.Next(net.IPv4len) } func parseDst(cm *ControlMessage, b []byte) { - cm.Dst = b[:net.IPv4len] + if len(cm.Dst) < net.IPv4len { + cm.Dst = make(net.IP, net.IPv4len) + } + copy(cm.Dst, b[:net.IPv4len]) } func marshalInterface(b []byte, cm *ControlMessage) []byte { - m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0])) - m.Level = iana.ProtocolIP - m.Type = sysIP_RECVIF - m.SetLen(syscall.CmsgLen(syscall.SizeofSockaddrDatalink)) - return b[syscall.CmsgSpace(syscall.SizeofSockaddrDatalink):] + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIP, sysIP_RECVIF, syscall.SizeofSockaddrDatalink) + return m.Next(syscall.SizeofSockaddrDatalink) } func parseInterface(cm *ControlMessage, b []byte) { diff --git a/vendor/golang.org/x/net/ipv4/control_pktinfo.go b/vendor/golang.org/x/net/ipv4/control_pktinfo.go index 9ed9773..425338f 100644 --- a/vendor/golang.org/x/net/ipv4/control_pktinfo.go +++ b/vendor/golang.org/x/net/ipv4/control_pktinfo.go @@ -7,19 +7,18 @@ package ipv4 import ( - "syscall" + "net" "unsafe" "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" ) func marshalPacketInfo(b []byte, cm *ControlMessage) []byte { - m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0])) - m.Level = iana.ProtocolIP - m.Type = sysIP_PKTINFO - m.SetLen(syscall.CmsgLen(sizeofInetPktinfo)) + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIP, sysIP_PKTINFO, sizeofInetPktinfo) if cm != nil { - pi := (*inetPktinfo)(unsafe.Pointer(&b[syscall.CmsgLen(0)])) + pi := (*inetPktinfo)(unsafe.Pointer(&m.Data(sizeofInetPktinfo)[0])) if ip := cm.Src.To4(); ip != nil { copy(pi.Spec_dst[:], ip) } @@ -27,11 +26,14 @@ func marshalPacketInfo(b []byte, cm *ControlMessage) []byte { pi.setIfindex(cm.IfIndex) } } - return b[syscall.CmsgSpace(sizeofInetPktinfo):] + return m.Next(sizeofInetPktinfo) } func parsePacketInfo(cm *ControlMessage, b []byte) { pi := (*inetPktinfo)(unsafe.Pointer(&b[0])) cm.IfIndex = int(pi.Ifindex) - cm.Dst = pi.Addr[:] + if len(cm.Dst) < net.IPv4len { + cm.Dst = make(net.IP, net.IPv4len) + } + copy(cm.Dst, pi.Addr[:]) } diff --git a/vendor/golang.org/x/net/ipv4/control_stub.go b/vendor/golang.org/x/net/ipv4/control_stub.go index de9b1a0..5a2f7d8 100644 --- a/vendor/golang.org/x/net/ipv4/control_stub.go +++ b/vendor/golang.org/x/net/ipv4/control_stub.go @@ -11,15 +11,3 @@ import "golang.org/x/net/internal/socket" func setControlMessage(c *socket.Conn, opt *rawOpt, cf ControlFlags, on bool) error { return errOpNoSupport } - -func newControlMessage(opt *rawOpt) []byte { - return nil -} - -func parseControlMessage(b []byte) (*ControlMessage, error) { - return nil, errOpNoSupport -} - -func marshalControlMessage(cm *ControlMessage) []byte { - return nil -} diff --git a/vendor/golang.org/x/net/ipv4/control_test.go b/vendor/golang.org/x/net/ipv4/control_test.go new file mode 100644 index 0000000..f87fe12 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/control_test.go @@ -0,0 +1,21 @@ +// Copyright 2017 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. + +package ipv4_test + +import ( + "testing" + + "golang.org/x/net/ipv4" +) + +func TestControlMessageParseWithFuzz(t *testing.T) { + var cm ipv4.ControlMessage + for _, fuzz := range []string{ + "\f\x00\x00\x00\x00\x00\x00\x00\x14\x00\x00\x00", + "\f\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x00\x00", + } { + cm.Parse([]byte(fuzz)) + } +} diff --git a/vendor/golang.org/x/net/ipv4/control_unix.go b/vendor/golang.org/x/net/ipv4/control_unix.go index 9111520..e1ae816 100644 --- a/vendor/golang.org/x/net/ipv4/control_unix.go +++ b/vendor/golang.org/x/net/ipv4/control_unix.go @@ -7,8 +7,6 @@ package ipv4 import ( - "os" - "syscall" "unsafe" "golang.org/x/net/internal/iana" @@ -64,84 +62,10 @@ func setControlMessage(c *socket.Conn, opt *rawOpt, cf ControlFlags, on bool) er return nil } -func newControlMessage(opt *rawOpt) (oob []byte) { - opt.RLock() - var l int - if opt.isset(FlagTTL) && ctlOpts[ctlTTL].name > 0 { - l += syscall.CmsgSpace(ctlOpts[ctlTTL].length) - } - if ctlOpts[ctlPacketInfo].name > 0 { - if opt.isset(FlagSrc | FlagDst | FlagInterface) { - l += syscall.CmsgSpace(ctlOpts[ctlPacketInfo].length) - } - } else { - if opt.isset(FlagDst) && ctlOpts[ctlDst].name > 0 { - l += syscall.CmsgSpace(ctlOpts[ctlDst].length) - } - if opt.isset(FlagInterface) && ctlOpts[ctlInterface].name > 0 { - l += syscall.CmsgSpace(ctlOpts[ctlInterface].length) - } - } - if l > 0 { - oob = make([]byte, l) - } - opt.RUnlock() - return -} - -func parseControlMessage(b []byte) (*ControlMessage, error) { - if len(b) == 0 { - return nil, nil - } - cmsgs, err := syscall.ParseSocketControlMessage(b) - if err != nil { - return nil, os.NewSyscallError("parse socket control message", err) - } - cm := &ControlMessage{} - for _, m := range cmsgs { - if m.Header.Level != iana.ProtocolIP { - continue - } - switch int(m.Header.Type) { - case ctlOpts[ctlTTL].name: - ctlOpts[ctlTTL].parse(cm, m.Data[:]) - case ctlOpts[ctlDst].name: - ctlOpts[ctlDst].parse(cm, m.Data[:]) - case ctlOpts[ctlInterface].name: - ctlOpts[ctlInterface].parse(cm, m.Data[:]) - case ctlOpts[ctlPacketInfo].name: - ctlOpts[ctlPacketInfo].parse(cm, m.Data[:]) - } - } - return cm, nil -} - -func marshalControlMessage(cm *ControlMessage) (oob []byte) { - if cm == nil { - return nil - } - var l int - pktinfo := false - if ctlOpts[ctlPacketInfo].name > 0 && (cm.Src.To4() != nil || cm.IfIndex > 0) { - pktinfo = true - l += syscall.CmsgSpace(ctlOpts[ctlPacketInfo].length) - } - if l > 0 { - oob = make([]byte, l) - b := oob - if pktinfo { - b = ctlOpts[ctlPacketInfo].marshal(b, cm) - } - } - return -} - func marshalTTL(b []byte, cm *ControlMessage) []byte { - m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0])) - m.Level = iana.ProtocolIP - m.Type = sysIP_RECVTTL - m.SetLen(syscall.CmsgLen(1)) - return b[syscall.CmsgSpace(1):] + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIP, sysIP_RECVTTL, 1) + return m.Next(1) } func parseTTL(cm *ControlMessage, b []byte) { diff --git a/vendor/golang.org/x/net/ipv4/control_windows.go b/vendor/golang.org/x/net/ipv4/control_windows.go index 5560fcf..ce55c66 100644 --- a/vendor/golang.org/x/net/ipv4/control_windows.go +++ b/vendor/golang.org/x/net/ipv4/control_windows.go @@ -14,18 +14,3 @@ func setControlMessage(c *socket.Conn, opt *rawOpt, cf ControlFlags, on bool) er // TODO(mikio): implement this return syscall.EWINDOWS } - -func newControlMessage(opt *rawOpt) []byte { - // TODO(mikio): implement this - return nil -} - -func parseControlMessage(b []byte) (*ControlMessage, error) { - // TODO(mikio): implement this - return nil, syscall.EWINDOWS -} - -func marshalControlMessage(cm *ControlMessage) []byte { - // TODO(mikio): implement this - return nil -} diff --git a/vendor/golang.org/x/net/ipv4/endpoint.go b/vendor/golang.org/x/net/ipv4/endpoint.go index f173ed4..2ab8773 100644 --- a/vendor/golang.org/x/net/ipv4/endpoint.go +++ b/vendor/golang.org/x/net/ipv4/endpoint.go @@ -105,12 +105,7 @@ func NewPacketConn(c net.PacketConn) *PacketConn { p := &PacketConn{ genericOpt: genericOpt{Conn: cc}, dgramOpt: dgramOpt{Conn: cc}, - payloadHandler: payloadHandler{PacketConn: c}, - } - if _, ok := c.(*net.IPConn); ok { - if so, ok := sockOpts[ssoStripHeader]; ok { - so.SetInt(p.dgramOpt.Conn, boolint(true)) - } + payloadHandler: payloadHandler{PacketConn: c, Conn: cc}, } return p } @@ -140,7 +135,7 @@ func (c *RawConn) SetDeadline(t time.Time) error { if !c.packetHandler.ok() { return syscall.EINVAL } - return c.packetHandler.c.SetDeadline(t) + return c.packetHandler.IPConn.SetDeadline(t) } // SetReadDeadline sets the read deadline associated with the @@ -149,7 +144,7 @@ func (c *RawConn) SetReadDeadline(t time.Time) error { if !c.packetHandler.ok() { return syscall.EINVAL } - return c.packetHandler.c.SetReadDeadline(t) + return c.packetHandler.IPConn.SetReadDeadline(t) } // SetWriteDeadline sets the write deadline associated with the @@ -158,7 +153,7 @@ func (c *RawConn) SetWriteDeadline(t time.Time) error { if !c.packetHandler.ok() { return syscall.EINVAL } - return c.packetHandler.c.SetWriteDeadline(t) + return c.packetHandler.IPConn.SetWriteDeadline(t) } // Close closes the endpoint. @@ -166,7 +161,7 @@ func (c *RawConn) Close() error { if !c.packetHandler.ok() { return syscall.EINVAL } - return c.packetHandler.c.Close() + return c.packetHandler.IPConn.Close() } // NewRawConn returns a new RawConn using c as its underlying @@ -179,7 +174,7 @@ func NewRawConn(c net.PacketConn) (*RawConn, error) { r := &RawConn{ genericOpt: genericOpt{Conn: cc}, dgramOpt: dgramOpt{Conn: cc}, - packetHandler: packetHandler{c: c.(*net.IPConn)}, + packetHandler: packetHandler{IPConn: c.(*net.IPConn), Conn: cc}, } so, ok := sockOpts[ssoHeaderPrepend] if !ok { diff --git a/vendor/golang.org/x/net/ipv4/gen.go b/vendor/golang.org/x/net/ipv4/gen.go index ffb44fe..1bb1737 100644 --- a/vendor/golang.org/x/net/ipv4/gen.go +++ b/vendor/golang.org/x/net/ipv4/gen.go @@ -72,7 +72,7 @@ var registries = []struct { parse func(io.Writer, io.Reader) error }{ { - "http://www.iana.org/assignments/icmp-parameters/icmp-parameters.xml", + "https://www.iana.org/assignments/icmp-parameters/icmp-parameters.xml", parseICMPv4Parameters, }, } @@ -80,7 +80,7 @@ var registries = []struct { func geniana() error { var bb bytes.Buffer fmt.Fprintf(&bb, "// go generate gen.go\n") - fmt.Fprintf(&bb, "// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n") + fmt.Fprintf(&bb, "// Code generated by the command above; DO NOT EDIT.\n\n") fmt.Fprintf(&bb, "package ipv4\n\n") for _, r := range registries { resp, err := http.Get(r.url) diff --git a/vendor/golang.org/x/net/ipv4/header.go b/vendor/golang.org/x/net/ipv4/header.go index 6480597..8bb0f0f 100644 --- a/vendor/golang.org/x/net/ipv4/header.go +++ b/vendor/golang.org/x/net/ipv4/header.go @@ -51,7 +51,7 @@ func (h *Header) String() string { return fmt.Sprintf("ver=%d hdrlen=%d tos=%#x totallen=%d id=%#x flags=%#x fragoff=%#x ttl=%d proto=%d cksum=%#x src=%v dst=%v", h.Version, h.Len, h.TOS, h.TotalLen, h.ID, h.Flags, h.FragOff, h.TTL, h.Protocol, h.Checksum, h.Src, h.Dst) } -// Marshal returns the binary encoding of the IPv4 header h. +// Marshal returns the binary encoding of h. func (h *Header) Marshal() ([]byte, error) { if h == nil { return nil, syscall.EINVAL @@ -98,26 +98,24 @@ func (h *Header) Marshal() ([]byte, error) { return b, nil } -// ParseHeader parses b as an IPv4 header. -func ParseHeader(b []byte) (*Header, error) { - if len(b) < HeaderLen { - return nil, errHeaderTooShort +// Parse parses b as an IPv4 header and sotres the result in h. +func (h *Header) Parse(b []byte) error { + if h == nil || len(b) < HeaderLen { + return errHeaderTooShort } hdrlen := int(b[0]&0x0f) << 2 if hdrlen > len(b) { - return nil, errBufferTooShort - } - h := &Header{ - Version: int(b[0] >> 4), - Len: hdrlen, - TOS: int(b[1]), - ID: int(binary.BigEndian.Uint16(b[4:6])), - TTL: int(b[8]), - Protocol: int(b[9]), - Checksum: int(binary.BigEndian.Uint16(b[10:12])), - Src: net.IPv4(b[12], b[13], b[14], b[15]), - Dst: net.IPv4(b[16], b[17], b[18], b[19]), + return errBufferTooShort } + h.Version = int(b[0] >> 4) + h.Len = hdrlen + h.TOS = int(b[1]) + h.ID = int(binary.BigEndian.Uint16(b[4:6])) + h.TTL = int(b[8]) + h.Protocol = int(b[9]) + h.Checksum = int(binary.BigEndian.Uint16(b[10:12])) + h.Src = net.IPv4(b[12], b[13], b[14], b[15]) + h.Dst = net.IPv4(b[16], b[17], b[18], b[19]) switch runtime.GOOS { case "darwin", "dragonfly", "netbsd": h.TotalLen = int(socket.NativeEndian.Uint16(b[2:4])) + hdrlen @@ -139,9 +137,23 @@ func ParseHeader(b []byte) (*Header, error) { } h.Flags = HeaderFlags(h.FragOff&0xe000) >> 13 h.FragOff = h.FragOff & 0x1fff - if hdrlen-HeaderLen > 0 { - h.Options = make([]byte, hdrlen-HeaderLen) - copy(h.Options, b[HeaderLen:]) + optlen := hdrlen - HeaderLen + if optlen > 0 && len(b) >= hdrlen { + if cap(h.Options) < optlen { + h.Options = make([]byte, optlen) + } else { + h.Options = h.Options[:optlen] + } + copy(h.Options, b[HeaderLen:hdrlen]) + } + return nil +} + +// ParseHeader parses b as an IPv4 header. +func ParseHeader(b []byte) (*Header, error) { + h := new(Header) + if err := h.Parse(b); err != nil { + return nil, err } return h, nil } diff --git a/vendor/golang.org/x/net/ipv4/header_test.go b/vendor/golang.org/x/net/ipv4/header_test.go index 8dd6fc6..a246aee 100644 --- a/vendor/golang.org/x/net/ipv4/header_test.go +++ b/vendor/golang.org/x/net/ipv4/header_test.go @@ -17,138 +17,212 @@ import ( ) type headerTest struct { - wireHeaderFromKernel [HeaderLen]byte - wireHeaderToKernel [HeaderLen]byte - wireHeaderFromTradBSDKernel [HeaderLen]byte - wireHeaderToTradBSDKernel [HeaderLen]byte - wireHeaderFromFreeBSD10Kernel [HeaderLen]byte - wireHeaderToFreeBSD10Kernel [HeaderLen]byte + wireHeaderFromKernel []byte + wireHeaderToKernel []byte + wireHeaderFromTradBSDKernel []byte + wireHeaderToTradBSDKernel []byte + wireHeaderFromFreeBSD10Kernel []byte + wireHeaderToFreeBSD10Kernel []byte *Header } -var headerLittleEndianTest = headerTest{ +var headerLittleEndianTests = []headerTest{ // TODO(mikio): Add platform dependent wire header formats when // we support new platforms. - wireHeaderFromKernel: [HeaderLen]byte{ - 0x45, 0x01, 0xbe, 0xef, - 0xca, 0xfe, 0x45, 0xdc, - 0xff, 0x01, 0xde, 0xad, - 172, 16, 254, 254, - 192, 168, 0, 1, + { + wireHeaderFromKernel: []byte{ + 0x45, 0x01, 0xbe, 0xef, + 0xca, 0xfe, 0x45, 0xdc, + 0xff, 0x01, 0xde, 0xad, + 172, 16, 254, 254, + 192, 168, 0, 1, + }, + wireHeaderToKernel: []byte{ + 0x45, 0x01, 0xbe, 0xef, + 0xca, 0xfe, 0x45, 0xdc, + 0xff, 0x01, 0xde, 0xad, + 172, 16, 254, 254, + 192, 168, 0, 1, + }, + wireHeaderFromTradBSDKernel: []byte{ + 0x45, 0x01, 0xdb, 0xbe, + 0xca, 0xfe, 0xdc, 0x45, + 0xff, 0x01, 0xde, 0xad, + 172, 16, 254, 254, + 192, 168, 0, 1, + }, + wireHeaderToTradBSDKernel: []byte{ + 0x45, 0x01, 0xef, 0xbe, + 0xca, 0xfe, 0xdc, 0x45, + 0xff, 0x01, 0xde, 0xad, + 172, 16, 254, 254, + 192, 168, 0, 1, + }, + wireHeaderFromFreeBSD10Kernel: []byte{ + 0x45, 0x01, 0xef, 0xbe, + 0xca, 0xfe, 0xdc, 0x45, + 0xff, 0x01, 0xde, 0xad, + 172, 16, 254, 254, + 192, 168, 0, 1, + }, + wireHeaderToFreeBSD10Kernel: []byte{ + 0x45, 0x01, 0xef, 0xbe, + 0xca, 0xfe, 0xdc, 0x45, + 0xff, 0x01, 0xde, 0xad, + 172, 16, 254, 254, + 192, 168, 0, 1, + }, + Header: &Header{ + Version: Version, + Len: HeaderLen, + TOS: 1, + TotalLen: 0xbeef, + ID: 0xcafe, + Flags: DontFragment, + FragOff: 1500, + TTL: 255, + Protocol: 1, + Checksum: 0xdead, + Src: net.IPv4(172, 16, 254, 254), + Dst: net.IPv4(192, 168, 0, 1), + }, }, - wireHeaderToKernel: [HeaderLen]byte{ - 0x45, 0x01, 0xbe, 0xef, - 0xca, 0xfe, 0x45, 0xdc, - 0xff, 0x01, 0xde, 0xad, - 172, 16, 254, 254, - 192, 168, 0, 1, - }, - wireHeaderFromTradBSDKernel: [HeaderLen]byte{ - 0x45, 0x01, 0xdb, 0xbe, - 0xca, 0xfe, 0xdc, 0x45, - 0xff, 0x01, 0xde, 0xad, - 172, 16, 254, 254, - 192, 168, 0, 1, - }, - wireHeaderToTradBSDKernel: [HeaderLen]byte{ - 0x45, 0x01, 0xef, 0xbe, - 0xca, 0xfe, 0xdc, 0x45, - 0xff, 0x01, 0xde, 0xad, - 172, 16, 254, 254, - 192, 168, 0, 1, - }, - wireHeaderFromFreeBSD10Kernel: [HeaderLen]byte{ - 0x45, 0x01, 0xef, 0xbe, - 0xca, 0xfe, 0xdc, 0x45, - 0xff, 0x01, 0xde, 0xad, - 172, 16, 254, 254, - 192, 168, 0, 1, - }, - wireHeaderToFreeBSD10Kernel: [HeaderLen]byte{ - 0x45, 0x01, 0xef, 0xbe, - 0xca, 0xfe, 0xdc, 0x45, - 0xff, 0x01, 0xde, 0xad, - 172, 16, 254, 254, - 192, 168, 0, 1, - }, - Header: &Header{ - Version: Version, - Len: HeaderLen, - TOS: 1, - TotalLen: 0xbeef, - ID: 0xcafe, - Flags: DontFragment, - FragOff: 1500, - TTL: 255, - Protocol: 1, - Checksum: 0xdead, - Src: net.IPv4(172, 16, 254, 254), - Dst: net.IPv4(192, 168, 0, 1), + + // with option headers + { + wireHeaderFromKernel: []byte{ + 0x46, 0x01, 0xbe, 0xf3, + 0xca, 0xfe, 0x45, 0xdc, + 0xff, 0x01, 0xde, 0xad, + 172, 16, 254, 254, + 192, 168, 0, 1, + 0xff, 0xfe, 0xfe, 0xff, + }, + wireHeaderToKernel: []byte{ + 0x46, 0x01, 0xbe, 0xf3, + 0xca, 0xfe, 0x45, 0xdc, + 0xff, 0x01, 0xde, 0xad, + 172, 16, 254, 254, + 192, 168, 0, 1, + 0xff, 0xfe, 0xfe, 0xff, + }, + wireHeaderFromTradBSDKernel: []byte{ + 0x46, 0x01, 0xdb, 0xbe, + 0xca, 0xfe, 0xdc, 0x45, + 0xff, 0x01, 0xde, 0xad, + 172, 16, 254, 254, + 192, 168, 0, 1, + 0xff, 0xfe, 0xfe, 0xff, + }, + wireHeaderToTradBSDKernel: []byte{ + 0x46, 0x01, 0xf3, 0xbe, + 0xca, 0xfe, 0xdc, 0x45, + 0xff, 0x01, 0xde, 0xad, + 172, 16, 254, 254, + 192, 168, 0, 1, + 0xff, 0xfe, 0xfe, 0xff, + }, + wireHeaderFromFreeBSD10Kernel: []byte{ + 0x46, 0x01, 0xf3, 0xbe, + 0xca, 0xfe, 0xdc, 0x45, + 0xff, 0x01, 0xde, 0xad, + 172, 16, 254, 254, + 192, 168, 0, 1, + 0xff, 0xfe, 0xfe, 0xff, + }, + wireHeaderToFreeBSD10Kernel: []byte{ + 0x46, 0x01, 0xf3, 0xbe, + 0xca, 0xfe, 0xdc, 0x45, + 0xff, 0x01, 0xde, 0xad, + 172, 16, 254, 254, + 192, 168, 0, 1, + 0xff, 0xfe, 0xfe, 0xff, + }, + Header: &Header{ + Version: Version, + Len: HeaderLen + 4, + TOS: 1, + TotalLen: 0xbef3, + ID: 0xcafe, + Flags: DontFragment, + FragOff: 1500, + TTL: 255, + Protocol: 1, + Checksum: 0xdead, + Src: net.IPv4(172, 16, 254, 254), + Dst: net.IPv4(192, 168, 0, 1), + Options: []byte{0xff, 0xfe, 0xfe, 0xff}, + }, }, } func TestMarshalHeader(t *testing.T) { - tt := &headerLittleEndianTest if socket.NativeEndian != binary.LittleEndian { t.Skip("no test for non-little endian machine yet") } - b, err := tt.Header.Marshal() - if err != nil { - t.Fatal(err) - } - var wh []byte - switch runtime.GOOS { - case "darwin", "dragonfly", "netbsd": - wh = tt.wireHeaderToTradBSDKernel[:] - case "freebsd": - switch { - case freebsdVersion < 1000000: - wh = tt.wireHeaderToTradBSDKernel[:] - case 1000000 <= freebsdVersion && freebsdVersion < 1100000: - wh = tt.wireHeaderToFreeBSD10Kernel[:] + for _, tt := range headerLittleEndianTests { + b, err := tt.Header.Marshal() + if err != nil { + t.Fatal(err) + } + var wh []byte + switch runtime.GOOS { + case "darwin", "dragonfly", "netbsd": + wh = tt.wireHeaderToTradBSDKernel + case "freebsd": + switch { + case freebsdVersion < 1000000: + wh = tt.wireHeaderToTradBSDKernel + case 1000000 <= freebsdVersion && freebsdVersion < 1100000: + wh = tt.wireHeaderToFreeBSD10Kernel + default: + wh = tt.wireHeaderToKernel + } default: - wh = tt.wireHeaderToKernel[:] + wh = tt.wireHeaderToKernel + } + if !bytes.Equal(b, wh) { + t.Fatalf("got %#v; want %#v", b, wh) } - default: - wh = tt.wireHeaderToKernel[:] - } - if !bytes.Equal(b, wh) { - t.Fatalf("got %#v; want %#v", b, wh) } } func TestParseHeader(t *testing.T) { - tt := &headerLittleEndianTest if socket.NativeEndian != binary.LittleEndian { t.Skip("no test for big endian machine yet") } - var wh []byte - switch runtime.GOOS { - case "darwin", "dragonfly", "netbsd": - wh = tt.wireHeaderFromTradBSDKernel[:] - case "freebsd": - switch { - case freebsdVersion < 1000000: - wh = tt.wireHeaderFromTradBSDKernel[:] - case 1000000 <= freebsdVersion && freebsdVersion < 1100000: - wh = tt.wireHeaderFromFreeBSD10Kernel[:] + for _, tt := range headerLittleEndianTests { + var wh []byte + switch runtime.GOOS { + case "darwin", "dragonfly", "netbsd": + wh = tt.wireHeaderFromTradBSDKernel + case "freebsd": + switch { + case freebsdVersion < 1000000: + wh = tt.wireHeaderFromTradBSDKernel + case 1000000 <= freebsdVersion && freebsdVersion < 1100000: + wh = tt.wireHeaderFromFreeBSD10Kernel + default: + wh = tt.wireHeaderFromKernel + } default: - wh = tt.wireHeaderFromKernel[:] + wh = tt.wireHeaderFromKernel + } + h, err := ParseHeader(wh) + if err != nil { + t.Fatal(err) + } + if err := h.Parse(wh); err != nil { + t.Fatal(err) + } + if !reflect.DeepEqual(h, tt.Header) { + t.Fatalf("got %#v; want %#v", h, tt.Header) + } + s := h.String() + if strings.Contains(s, ",") { + t.Fatalf("should be space-separated values: %s", s) } - default: - wh = tt.wireHeaderFromKernel[:] - } - h, err := ParseHeader(wh) - if err != nil { - t.Fatal(err) - } - if !reflect.DeepEqual(h, tt.Header) { - t.Fatalf("got %#v; want %#v", h, tt.Header) - } - s := h.String() - if strings.Contains(s, ",") { - t.Fatalf("should be space-separated values: %s", s) } } diff --git a/vendor/golang.org/x/net/ipv4/helper.go b/vendor/golang.org/x/net/ipv4/helper.go index 5f747a4..a5052e3 100644 --- a/vendor/golang.org/x/net/ipv4/helper.go +++ b/vendor/golang.org/x/net/ipv4/helper.go @@ -43,3 +43,21 @@ func netAddrToIP4(a net.Addr) net.IP { } return nil } + +func opAddr(a net.Addr) net.Addr { + switch a.(type) { + case *net.TCPAddr: + if a == nil { + return nil + } + case *net.UDPAddr: + if a == nil { + return nil + } + case *net.IPAddr: + if a == nil { + return nil + } + } + return a +} diff --git a/vendor/golang.org/x/net/ipv4/iana.go b/vendor/golang.org/x/net/ipv4/iana.go index be10c94..4375b40 100644 --- a/vendor/golang.org/x/net/ipv4/iana.go +++ b/vendor/golang.org/x/net/ipv4/iana.go @@ -1,9 +1,9 @@ // go generate gen.go -// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT +// Code generated by the command above; DO NOT EDIT. package ipv4 -// Internet Control Message Protocol (ICMP) Parameters, Updated: 2013-04-19 +// Internet Control Message Protocol (ICMP) Parameters, Updated: 2018-02-26 const ( ICMPTypeEchoReply ICMPType = 0 // Echo Reply ICMPTypeDestinationUnreachable ICMPType = 3 // Destination Unreachable @@ -16,9 +16,11 @@ const ( ICMPTypeTimestamp ICMPType = 13 // Timestamp ICMPTypeTimestampReply ICMPType = 14 // Timestamp Reply ICMPTypePhoturis ICMPType = 40 // Photuris + ICMPTypeExtendedEchoRequest ICMPType = 42 // Extended Echo Request + ICMPTypeExtendedEchoReply ICMPType = 43 // Extended Echo Reply ) -// Internet Control Message Protocol (ICMP) Parameters, Updated: 2013-04-19 +// Internet Control Message Protocol (ICMP) Parameters, Updated: 2018-02-26 var icmpTypes = map[ICMPType]string{ 0: "echo reply", 3: "destination unreachable", @@ -31,4 +33,6 @@ var icmpTypes = map[ICMPType]string{ 13: "timestamp", 14: "timestamp reply", 40: "photuris", + 42: "extended echo request", + 43: "extended echo reply", } diff --git a/vendor/golang.org/x/net/ipv4/icmp.go b/vendor/golang.org/x/net/ipv4/icmp.go index 097bea8..9902bb3 100644 --- a/vendor/golang.org/x/net/ipv4/icmp.go +++ b/vendor/golang.org/x/net/ipv4/icmp.go @@ -26,7 +26,7 @@ func (typ ICMPType) Protocol() int { // packets. The filter belongs to a packet delivery path on a host and // it cannot interact with forwarding packets or tunnel-outer packets. // -// Note: RFC 2460 defines a reasonable role model and it works not +// Note: RFC 8200 defines a reasonable role model and it works not // only for IPv6 but IPv4. A node means a device that implements IP. // A router means a node that forwards IP packets not explicitly // addressed to itself, and a host means a node that is not a router. diff --git a/vendor/golang.org/x/net/ipv4/multicastlistener_test.go b/vendor/golang.org/x/net/ipv4/multicastlistener_test.go index a0c24b5..e43fbbe 100644 --- a/vendor/golang.org/x/net/ipv4/multicastlistener_test.go +++ b/vendor/golang.org/x/net/ipv4/multicastlistener_test.go @@ -69,13 +69,16 @@ func TestUDPMultiplePacketConnWithMultipleGroupListeners(t *testing.T) { } for _, gaddr := range udpMultipleGroupListenerTests { - c1, err := net.ListenPacket("udp4", "224.0.0.0:1024") // wildcard address with reusable port + c1, err := net.ListenPacket("udp4", "224.0.0.0:0") // wildcard address with reusable port if err != nil { t.Fatal(err) } defer c1.Close() - - c2, err := net.ListenPacket("udp4", "224.0.0.0:1024") // wildcard address with reusable port + _, port, err := net.SplitHostPort(c1.LocalAddr().String()) + if err != nil { + t.Fatal(err) + } + c2, err := net.ListenPacket("udp4", net.JoinHostPort("224.0.0.0", port)) // wildcard address with reusable port if err != nil { t.Fatal(err) } @@ -131,16 +134,29 @@ func TestUDPPerInterfaceSinglePacketConnWithSingleGroupListener(t *testing.T) { if err != nil { t.Fatal(err) } + port := "0" for i, ifi := range ift { ip, ok := nettest.IsMulticastCapable("ip4", &ifi) if !ok { continue } - c, err := net.ListenPacket("udp4", ip.String()+":"+"1024") // unicast address with non-reusable port + c, err := net.ListenPacket("udp4", net.JoinHostPort(ip.String(), port)) // unicast address with non-reusable port if err != nil { - t.Fatal(err) + // The listen may fail when the serivce is + // already in use, but it's fine because the + // purpose of this is not to test the + // bookkeeping of IP control block inside the + // kernel. + t.Log(err) + continue } defer c.Close() + if port == "0" { + _, port, err = net.SplitHostPort(c.LocalAddr().String()) + if err != nil { + t.Fatal(err) + } + } p := ipv4.NewPacketConn(c) if err := p.JoinGroup(&ifi, &gaddr); err != nil { t.Fatal(err) diff --git a/vendor/golang.org/x/net/ipv4/packet.go b/vendor/golang.org/x/net/ipv4/packet.go index d43723c..f00f5b0 100644 --- a/vendor/golang.org/x/net/ipv4/packet.go +++ b/vendor/golang.org/x/net/ipv4/packet.go @@ -7,6 +7,8 @@ package ipv4 import ( "net" "syscall" + + "golang.org/x/net/internal/socket" ) // BUG(mikio): On Windows, the ReadFrom and WriteTo methods of RawConn @@ -14,11 +16,12 @@ import ( // A packetHandler represents the IPv4 datagram handler. type packetHandler struct { - c *net.IPConn + *net.IPConn + *socket.Conn rawOpt } -func (c *packetHandler) ok() bool { return c != nil && c.c != nil } +func (c *packetHandler) ok() bool { return c != nil && c.IPConn != nil && c.Conn != nil } // ReadFrom reads an IPv4 datagram from the endpoint c, copying the // datagram into b. It returns the received datagram as the IPv4 @@ -27,25 +30,7 @@ func (c *packetHandler) ReadFrom(b []byte) (h *Header, p []byte, cm *ControlMess if !c.ok() { return nil, nil, nil, syscall.EINVAL } - oob := newControlMessage(&c.rawOpt) - n, oobn, _, src, err := c.c.ReadMsgIP(b, oob) - if err != nil { - return nil, nil, nil, err - } - var hs []byte - if hs, p, err = slicePacket(b[:n]); err != nil { - return nil, nil, nil, err - } - if h, err = ParseHeader(hs); err != nil { - return nil, nil, nil, err - } - if cm, err = parseControlMessage(oob[:oobn]); err != nil { - return nil, nil, nil, err - } - if src != nil && cm != nil { - cm.Src = src.IP - } - return + return c.readFrom(b) } func slicePacket(b []byte) (h, p []byte, err error) { @@ -80,21 +65,5 @@ func (c *packetHandler) WriteTo(h *Header, p []byte, cm *ControlMessage) error { if !c.ok() { return syscall.EINVAL } - oob := marshalControlMessage(cm) - wh, err := h.Marshal() - if err != nil { - return err - } - dst := &net.IPAddr{} - if cm != nil { - if ip := cm.Dst.To4(); ip != nil { - dst.IP = ip - } - } - if dst.IP == nil { - dst.IP = h.Dst - } - wh = append(wh, p...) - _, _, err = c.c.WriteMsgIP(wh, oob, dst) - return err + return c.writeTo(h, p, cm) } diff --git a/vendor/golang.org/x/net/ipv4/packet_go1_8.go b/vendor/golang.org/x/net/ipv4/packet_go1_8.go new file mode 100644 index 0000000..b47d186 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/packet_go1_8.go @@ -0,0 +1,56 @@ +// Copyright 2012 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 !go1.9 + +package ipv4 + +import "net" + +func (c *packetHandler) readFrom(b []byte) (h *Header, p []byte, cm *ControlMessage, err error) { + c.rawOpt.RLock() + oob := NewControlMessage(c.rawOpt.cflags) + c.rawOpt.RUnlock() + n, nn, _, src, err := c.ReadMsgIP(b, oob) + if err != nil { + return nil, nil, nil, err + } + var hs []byte + if hs, p, err = slicePacket(b[:n]); err != nil { + return nil, nil, nil, err + } + if h, err = ParseHeader(hs); err != nil { + return nil, nil, nil, err + } + if nn > 0 { + cm = new(ControlMessage) + if err := cm.Parse(oob[:nn]); err != nil { + return nil, nil, nil, err + } + } + if src != nil && cm != nil { + cm.Src = src.IP + } + return +} + +func (c *packetHandler) writeTo(h *Header, p []byte, cm *ControlMessage) error { + oob := cm.Marshal() + wh, err := h.Marshal() + if err != nil { + return err + } + dst := new(net.IPAddr) + if cm != nil { + if ip := cm.Dst.To4(); ip != nil { + dst.IP = ip + } + } + if dst.IP == nil { + dst.IP = h.Dst + } + wh = append(wh, p...) + _, _, err = c.WriteMsgIP(wh, oob, dst) + return err +} diff --git a/vendor/golang.org/x/net/ipv4/packet_go1_9.go b/vendor/golang.org/x/net/ipv4/packet_go1_9.go new file mode 100644 index 0000000..082c36d --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/packet_go1_9.go @@ -0,0 +1,67 @@ +// Copyright 2017 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 go1.9 + +package ipv4 + +import ( + "net" + + "golang.org/x/net/internal/socket" +) + +func (c *packetHandler) readFrom(b []byte) (h *Header, p []byte, cm *ControlMessage, err error) { + c.rawOpt.RLock() + m := socket.Message{ + Buffers: [][]byte{b}, + OOB: NewControlMessage(c.rawOpt.cflags), + } + c.rawOpt.RUnlock() + if err := c.RecvMsg(&m, 0); err != nil { + return nil, nil, nil, &net.OpError{Op: "read", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err} + } + var hs []byte + if hs, p, err = slicePacket(b[:m.N]); err != nil { + return nil, nil, nil, &net.OpError{Op: "read", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err} + } + if h, err = ParseHeader(hs); err != nil { + return nil, nil, nil, &net.OpError{Op: "read", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err} + } + if m.NN > 0 { + cm = new(ControlMessage) + if err := cm.Parse(m.OOB[:m.NN]); err != nil { + return nil, nil, nil, &net.OpError{Op: "read", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err} + } + } + if src, ok := m.Addr.(*net.IPAddr); ok && cm != nil { + cm.Src = src.IP + } + return +} + +func (c *packetHandler) writeTo(h *Header, p []byte, cm *ControlMessage) error { + m := socket.Message{ + OOB: cm.Marshal(), + } + wh, err := h.Marshal() + if err != nil { + return err + } + m.Buffers = [][]byte{wh, p} + dst := new(net.IPAddr) + if cm != nil { + if ip := cm.Dst.To4(); ip != nil { + dst.IP = ip + } + } + if dst.IP == nil { + dst.IP = h.Dst + } + m.Addr = dst + if err := c.SendMsg(&m, 0); err != nil { + return &net.OpError{Op: "write", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Addr: opAddr(dst), Err: err} + } + return nil +} diff --git a/vendor/golang.org/x/net/ipv4/payload.go b/vendor/golang.org/x/net/ipv4/payload.go index be130e4..f95f811 100644 --- a/vendor/golang.org/x/net/ipv4/payload.go +++ b/vendor/golang.org/x/net/ipv4/payload.go @@ -4,7 +4,11 @@ package ipv4 -import "net" +import ( + "net" + + "golang.org/x/net/internal/socket" +) // BUG(mikio): On Windows, the ControlMessage for ReadFrom and WriteTo // methods of PacketConn is not implemented. @@ -12,7 +16,8 @@ import "net" // A payloadHandler represents the IPv4 datagram payload handler. type payloadHandler struct { net.PacketConn + *socket.Conn rawOpt } -func (c *payloadHandler) ok() bool { return c != nil && c.PacketConn != nil } +func (c *payloadHandler) ok() bool { return c != nil && c.PacketConn != nil && c.Conn != nil } diff --git a/vendor/golang.org/x/net/ipv4/payload_cmsg.go b/vendor/golang.org/x/net/ipv4/payload_cmsg.go index 9a155d2..3f06d76 100644 --- a/vendor/golang.org/x/net/ipv4/payload_cmsg.go +++ b/vendor/golang.org/x/net/ipv4/payload_cmsg.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build !plan9,!windows +// +build !nacl,!plan9,!windows package ipv4 @@ -19,37 +19,7 @@ func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net. if !c.ok() { return 0, nil, nil, syscall.EINVAL } - oob := newControlMessage(&c.rawOpt) - var oobn int - switch c := c.PacketConn.(type) { - case *net.UDPConn: - if n, oobn, _, src, err = c.ReadMsgUDP(b, oob); err != nil { - return 0, nil, nil, err - } - case *net.IPConn: - if _, ok := sockOpts[ssoStripHeader]; ok { - if n, oobn, _, src, err = c.ReadMsgIP(b, oob); err != nil { - return 0, nil, nil, err - } - } else { - nb := make([]byte, maxHeaderLen+len(b)) - if n, oobn, _, src, err = c.ReadMsgIP(nb, oob); err != nil { - return 0, nil, nil, err - } - hdrlen := int(nb[0]&0x0f) << 2 - copy(b, nb[hdrlen:]) - n -= hdrlen - } - default: - return 0, nil, nil, errInvalidConnType - } - if cm, err = parseControlMessage(oob[:oobn]); err != nil { - return 0, nil, nil, err - } - if cm != nil { - cm.Src = netAddrToIP4(src) - } - return + return c.readFrom(b) } // WriteTo writes a payload of the IPv4 datagram, to the destination @@ -62,20 +32,5 @@ func (c *payloadHandler) WriteTo(b []byte, cm *ControlMessage, dst net.Addr) (n if !c.ok() { return 0, syscall.EINVAL } - oob := marshalControlMessage(cm) - if dst == nil { - return 0, errMissingAddress - } - switch c := c.PacketConn.(type) { - case *net.UDPConn: - n, _, err = c.WriteMsgUDP(b, oob, dst.(*net.UDPAddr)) - case *net.IPConn: - n, _, err = c.WriteMsgIP(b, oob, dst.(*net.IPAddr)) - default: - return 0, errInvalidConnType - } - if err != nil { - return 0, err - } - return + return c.writeTo(b, cm, dst) } diff --git a/vendor/golang.org/x/net/ipv4/payload_cmsg_go1_8.go b/vendor/golang.org/x/net/ipv4/payload_cmsg_go1_8.go new file mode 100644 index 0000000..d26ccd9 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/payload_cmsg_go1_8.go @@ -0,0 +1,59 @@ +// Copyright 2012 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 !go1.9 +// +build !nacl,!plan9,!windows + +package ipv4 + +import "net" + +func (c *payloadHandler) readFrom(b []byte) (n int, cm *ControlMessage, src net.Addr, err error) { + c.rawOpt.RLock() + oob := NewControlMessage(c.rawOpt.cflags) + c.rawOpt.RUnlock() + var nn int + switch c := c.PacketConn.(type) { + case *net.UDPConn: + if n, nn, _, src, err = c.ReadMsgUDP(b, oob); err != nil { + return 0, nil, nil, err + } + case *net.IPConn: + nb := make([]byte, maxHeaderLen+len(b)) + if n, nn, _, src, err = c.ReadMsgIP(nb, oob); err != nil { + return 0, nil, nil, err + } + hdrlen := int(nb[0]&0x0f) << 2 + copy(b, nb[hdrlen:]) + n -= hdrlen + default: + return 0, nil, nil, &net.OpError{Op: "read", Net: c.LocalAddr().Network(), Source: c.LocalAddr(), Err: errInvalidConnType} + } + if nn > 0 { + cm = new(ControlMessage) + if err = cm.Parse(oob[:nn]); err != nil { + return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + } + if cm != nil { + cm.Src = netAddrToIP4(src) + } + return +} + +func (c *payloadHandler) writeTo(b []byte, cm *ControlMessage, dst net.Addr) (n int, err error) { + oob := cm.Marshal() + if dst == nil { + return 0, &net.OpError{Op: "write", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: errMissingAddress} + } + switch c := c.PacketConn.(type) { + case *net.UDPConn: + n, _, err = c.WriteMsgUDP(b, oob, dst.(*net.UDPAddr)) + case *net.IPConn: + n, _, err = c.WriteMsgIP(b, oob, dst.(*net.IPAddr)) + default: + return 0, &net.OpError{Op: "write", Net: c.LocalAddr().Network(), Source: c.LocalAddr(), Addr: opAddr(dst), Err: errInvalidConnType} + } + return +} diff --git a/vendor/golang.org/x/net/ipv4/payload_cmsg_go1_9.go b/vendor/golang.org/x/net/ipv4/payload_cmsg_go1_9.go new file mode 100644 index 0000000..2f19311 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/payload_cmsg_go1_9.go @@ -0,0 +1,67 @@ +// Copyright 2017 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 go1.9 +// +build !nacl,!plan9,!windows + +package ipv4 + +import ( + "net" + + "golang.org/x/net/internal/socket" +) + +func (c *payloadHandler) readFrom(b []byte) (int, *ControlMessage, net.Addr, error) { + c.rawOpt.RLock() + m := socket.Message{ + OOB: NewControlMessage(c.rawOpt.cflags), + } + c.rawOpt.RUnlock() + switch c.PacketConn.(type) { + case *net.UDPConn: + m.Buffers = [][]byte{b} + if err := c.RecvMsg(&m, 0); err != nil { + return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + case *net.IPConn: + h := make([]byte, HeaderLen) + m.Buffers = [][]byte{h, b} + if err := c.RecvMsg(&m, 0); err != nil { + return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + hdrlen := int(h[0]&0x0f) << 2 + if hdrlen > len(h) { + d := hdrlen - len(h) + copy(b, b[d:]) + m.N -= d + } else { + m.N -= hdrlen + } + default: + return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: errInvalidConnType} + } + var cm *ControlMessage + if m.NN > 0 { + cm = new(ControlMessage) + if err := cm.Parse(m.OOB[:m.NN]); err != nil { + return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + cm.Src = netAddrToIP4(m.Addr) + } + return m.N, cm, m.Addr, nil +} + +func (c *payloadHandler) writeTo(b []byte, cm *ControlMessage, dst net.Addr) (int, error) { + m := socket.Message{ + Buffers: [][]byte{b}, + OOB: cm.Marshal(), + Addr: dst, + } + err := c.SendMsg(&m, 0) + if err != nil { + err = &net.OpError{Op: "write", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Addr: opAddr(dst), Err: err} + } + return m.N, err +} diff --git a/vendor/golang.org/x/net/ipv4/payload_nocmsg.go b/vendor/golang.org/x/net/ipv4/payload_nocmsg.go index 6f9d5b0..3926de7 100644 --- a/vendor/golang.org/x/net/ipv4/payload_nocmsg.go +++ b/vendor/golang.org/x/net/ipv4/payload_nocmsg.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build plan9 windows +// +build nacl plan9 windows package ipv4 diff --git a/vendor/golang.org/x/net/ipv4/readwrite_go1_8_test.go b/vendor/golang.org/x/net/ipv4/readwrite_go1_8_test.go new file mode 100644 index 0000000..1cd926e --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/readwrite_go1_8_test.go @@ -0,0 +1,248 @@ +// Copyright 2012 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 !go1.9 + +package ipv4_test + +import ( + "bytes" + "fmt" + "net" + "runtime" + "strings" + "sync" + "testing" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/nettest" + "golang.org/x/net/ipv4" +) + +func BenchmarkPacketConnReadWriteUnicast(b *testing.B) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + b.Skipf("not supported on %s", runtime.GOOS) + } + + payload := []byte("HELLO-R-U-THERE") + iph, err := (&ipv4.Header{ + Version: ipv4.Version, + Len: ipv4.HeaderLen, + TotalLen: ipv4.HeaderLen + len(payload), + TTL: 1, + Protocol: iana.ProtocolReserved, + Src: net.IPv4(192, 0, 2, 1), + Dst: net.IPv4(192, 0, 2, 254), + }).Marshal() + if err != nil { + b.Fatal(err) + } + greh := []byte{0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00} + datagram := append(greh, append(iph, payload...)...) + bb := make([]byte, 128) + cm := ipv4.ControlMessage{ + Src: net.IPv4(127, 0, 0, 1), + } + if ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback); ifi != nil { + cm.IfIndex = ifi.Index + } + + b.Run("UDP", func(b *testing.B) { + c, err := nettest.NewLocalPacketListener("udp4") + if err != nil { + b.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err) + } + defer c.Close() + p := ipv4.NewPacketConn(c) + dst := c.LocalAddr() + cf := ipv4.FlagTTL | ipv4.FlagInterface + if err := p.SetControlMessage(cf, true); err != nil { + b.Fatal(err) + } + b.Run("Net", func(b *testing.B) { + for i := 0; i < b.N; i++ { + if _, err := c.WriteTo(payload, dst); err != nil { + b.Fatal(err) + } + if _, _, err := c.ReadFrom(bb); err != nil { + b.Fatal(err) + } + } + }) + b.Run("ToFrom", func(b *testing.B) { + for i := 0; i < b.N; i++ { + if _, err := p.WriteTo(payload, &cm, dst); err != nil { + b.Fatal(err) + } + if _, _, _, err := p.ReadFrom(bb); err != nil { + b.Fatal(err) + } + } + }) + }) + b.Run("IP", func(b *testing.B) { + switch runtime.GOOS { + case "netbsd": + b.Skip("need to configure gre on netbsd") + case "openbsd": + b.Skip("net.inet.gre.allow=0 by default on openbsd") + } + + c, err := net.ListenPacket(fmt.Sprintf("ip4:%d", iana.ProtocolGRE), "127.0.0.1") + if err != nil { + b.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err) + } + defer c.Close() + p := ipv4.NewPacketConn(c) + dst := c.LocalAddr() + cf := ipv4.FlagTTL | ipv4.FlagInterface + if err := p.SetControlMessage(cf, true); err != nil { + b.Fatal(err) + } + b.Run("Net", func(b *testing.B) { + for i := 0; i < b.N; i++ { + if _, err := c.WriteTo(datagram, dst); err != nil { + b.Fatal(err) + } + if _, _, err := c.ReadFrom(bb); err != nil { + b.Fatal(err) + } + } + }) + b.Run("ToFrom", func(b *testing.B) { + for i := 0; i < b.N; i++ { + if _, err := p.WriteTo(datagram, &cm, dst); err != nil { + b.Fatal(err) + } + if _, _, _, err := p.ReadFrom(bb); err != nil { + b.Fatal(err) + } + } + }) + }) +} + +func TestPacketConnConcurrentReadWriteUnicast(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + + payload := []byte("HELLO-R-U-THERE") + iph, err := (&ipv4.Header{ + Version: ipv4.Version, + Len: ipv4.HeaderLen, + TotalLen: ipv4.HeaderLen + len(payload), + TTL: 1, + Protocol: iana.ProtocolReserved, + Src: net.IPv4(192, 0, 2, 1), + Dst: net.IPv4(192, 0, 2, 254), + }).Marshal() + if err != nil { + t.Fatal(err) + } + greh := []byte{0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00} + datagram := append(greh, append(iph, payload...)...) + + t.Run("UDP", func(t *testing.T) { + c, err := nettest.NewLocalPacketListener("udp4") + if err != nil { + t.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err) + } + defer c.Close() + p := ipv4.NewPacketConn(c) + t.Run("ToFrom", func(t *testing.T) { + testPacketConnConcurrentReadWriteUnicast(t, p, payload, c.LocalAddr()) + }) + }) + t.Run("IP", func(t *testing.T) { + switch runtime.GOOS { + case "netbsd": + t.Skip("need to configure gre on netbsd") + case "openbsd": + t.Skip("net.inet.gre.allow=0 by default on openbsd") + } + + c, err := net.ListenPacket(fmt.Sprintf("ip4:%d", iana.ProtocolGRE), "127.0.0.1") + if err != nil { + t.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err) + } + defer c.Close() + p := ipv4.NewPacketConn(c) + t.Run("ToFrom", func(t *testing.T) { + testPacketConnConcurrentReadWriteUnicast(t, p, datagram, c.LocalAddr()) + }) + }) +} + +func testPacketConnConcurrentReadWriteUnicast(t *testing.T, p *ipv4.PacketConn, data []byte, dst net.Addr) { + ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback) + cf := ipv4.FlagTTL | ipv4.FlagSrc | ipv4.FlagDst | ipv4.FlagInterface + + if err := p.SetControlMessage(cf, true); err != nil { // probe before test + if nettest.ProtocolNotSupported(err) { + t.Skipf("not supported on %s", runtime.GOOS) + } + t.Fatal(err) + } + + var wg sync.WaitGroup + reader := func() { + defer wg.Done() + b := make([]byte, 128) + n, cm, _, err := p.ReadFrom(b) + if err != nil { + t.Error(err) + return + } + if !bytes.Equal(b[:n], data) { + t.Errorf("got %#v; want %#v", b[:n], data) + return + } + s := cm.String() + if strings.Contains(s, ",") { + t.Errorf("should be space-separated values: %s", s) + return + } + } + writer := func(toggle bool) { + defer wg.Done() + cm := ipv4.ControlMessage{ + Src: net.IPv4(127, 0, 0, 1), + } + if ifi != nil { + cm.IfIndex = ifi.Index + } + if err := p.SetControlMessage(cf, toggle); err != nil { + t.Error(err) + return + } + n, err := p.WriteTo(data, &cm, dst) + if err != nil { + t.Error(err) + return + } + if n != len(data) { + t.Errorf("got %d; want %d", n, len(data)) + return + } + } + + const N = 10 + wg.Add(N) + for i := 0; i < N; i++ { + go reader() + } + wg.Add(2 * N) + for i := 0; i < 2*N; i++ { + go writer(i%2 != 0) + + } + wg.Add(N) + for i := 0; i < N; i++ { + go reader() + } + wg.Wait() +} diff --git a/vendor/golang.org/x/net/ipv4/readwrite_go1_9_test.go b/vendor/golang.org/x/net/ipv4/readwrite_go1_9_test.go new file mode 100644 index 0000000..365de02 --- /dev/null +++ b/vendor/golang.org/x/net/ipv4/readwrite_go1_9_test.go @@ -0,0 +1,388 @@ +// Copyright 2017 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 go1.9 + +package ipv4_test + +import ( + "bytes" + "fmt" + "net" + "runtime" + "strings" + "sync" + "testing" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/nettest" + "golang.org/x/net/ipv4" +) + +func BenchmarkPacketConnReadWriteUnicast(b *testing.B) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + b.Skipf("not supported on %s", runtime.GOOS) + } + + payload := []byte("HELLO-R-U-THERE") + iph, err := (&ipv4.Header{ + Version: ipv4.Version, + Len: ipv4.HeaderLen, + TotalLen: ipv4.HeaderLen + len(payload), + TTL: 1, + Protocol: iana.ProtocolReserved, + Src: net.IPv4(192, 0, 2, 1), + Dst: net.IPv4(192, 0, 2, 254), + }).Marshal() + if err != nil { + b.Fatal(err) + } + greh := []byte{0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00} + datagram := append(greh, append(iph, payload...)...) + bb := make([]byte, 128) + cm := ipv4.ControlMessage{ + Src: net.IPv4(127, 0, 0, 1), + } + if ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback); ifi != nil { + cm.IfIndex = ifi.Index + } + + b.Run("UDP", func(b *testing.B) { + c, err := nettest.NewLocalPacketListener("udp4") + if err != nil { + b.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err) + } + defer c.Close() + p := ipv4.NewPacketConn(c) + dst := c.LocalAddr() + cf := ipv4.FlagTTL | ipv4.FlagInterface + if err := p.SetControlMessage(cf, true); err != nil { + b.Fatal(err) + } + wms := []ipv4.Message{ + { + Buffers: [][]byte{payload}, + Addr: dst, + OOB: cm.Marshal(), + }, + } + rms := []ipv4.Message{ + { + Buffers: [][]byte{bb}, + OOB: ipv4.NewControlMessage(cf), + }, + } + b.Run("Net", func(b *testing.B) { + for i := 0; i < b.N; i++ { + if _, err := c.WriteTo(payload, dst); err != nil { + b.Fatal(err) + } + if _, _, err := c.ReadFrom(bb); err != nil { + b.Fatal(err) + } + } + }) + b.Run("ToFrom", func(b *testing.B) { + for i := 0; i < b.N; i++ { + if _, err := p.WriteTo(payload, &cm, dst); err != nil { + b.Fatal(err) + } + if _, _, _, err := p.ReadFrom(bb); err != nil { + b.Fatal(err) + } + } + }) + b.Run("Batch", func(b *testing.B) { + for i := 0; i < b.N; i++ { + if _, err := p.WriteBatch(wms, 0); err != nil { + b.Fatal(err) + } + if _, err := p.ReadBatch(rms, 0); err != nil { + b.Fatal(err) + } + } + }) + }) + b.Run("IP", func(b *testing.B) { + switch runtime.GOOS { + case "netbsd": + b.Skip("need to configure gre on netbsd") + case "openbsd": + b.Skip("net.inet.gre.allow=0 by default on openbsd") + } + + c, err := net.ListenPacket(fmt.Sprintf("ip4:%d", iana.ProtocolGRE), "127.0.0.1") + if err != nil { + b.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err) + } + defer c.Close() + p := ipv4.NewPacketConn(c) + dst := c.LocalAddr() + cf := ipv4.FlagTTL | ipv4.FlagInterface + if err := p.SetControlMessage(cf, true); err != nil { + b.Fatal(err) + } + wms := []ipv4.Message{ + { + Buffers: [][]byte{datagram}, + Addr: dst, + OOB: cm.Marshal(), + }, + } + rms := []ipv4.Message{ + { + Buffers: [][]byte{bb}, + OOB: ipv4.NewControlMessage(cf), + }, + } + b.Run("Net", func(b *testing.B) { + for i := 0; i < b.N; i++ { + if _, err := c.WriteTo(datagram, dst); err != nil { + b.Fatal(err) + } + if _, _, err := c.ReadFrom(bb); err != nil { + b.Fatal(err) + } + } + }) + b.Run("ToFrom", func(b *testing.B) { + for i := 0; i < b.N; i++ { + if _, err := p.WriteTo(datagram, &cm, dst); err != nil { + b.Fatal(err) + } + if _, _, _, err := p.ReadFrom(bb); err != nil { + b.Fatal(err) + } + } + }) + b.Run("Batch", func(b *testing.B) { + for i := 0; i < b.N; i++ { + if _, err := p.WriteBatch(wms, 0); err != nil { + b.Fatal(err) + } + if _, err := p.ReadBatch(rms, 0); err != nil { + b.Fatal(err) + } + } + }) + }) +} + +func TestPacketConnConcurrentReadWriteUnicast(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + + payload := []byte("HELLO-R-U-THERE") + iph, err := (&ipv4.Header{ + Version: ipv4.Version, + Len: ipv4.HeaderLen, + TotalLen: ipv4.HeaderLen + len(payload), + TTL: 1, + Protocol: iana.ProtocolReserved, + Src: net.IPv4(192, 0, 2, 1), + Dst: net.IPv4(192, 0, 2, 254), + }).Marshal() + if err != nil { + t.Fatal(err) + } + greh := []byte{0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00} + datagram := append(greh, append(iph, payload...)...) + + t.Run("UDP", func(t *testing.T) { + c, err := nettest.NewLocalPacketListener("udp4") + if err != nil { + t.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err) + } + defer c.Close() + p := ipv4.NewPacketConn(c) + t.Run("ToFrom", func(t *testing.T) { + testPacketConnConcurrentReadWriteUnicast(t, p, payload, c.LocalAddr(), false) + }) + t.Run("Batch", func(t *testing.T) { + testPacketConnConcurrentReadWriteUnicast(t, p, payload, c.LocalAddr(), true) + }) + }) + t.Run("IP", func(t *testing.T) { + switch runtime.GOOS { + case "netbsd": + t.Skip("need to configure gre on netbsd") + case "openbsd": + t.Skip("net.inet.gre.allow=0 by default on openbsd") + } + + c, err := net.ListenPacket(fmt.Sprintf("ip4:%d", iana.ProtocolGRE), "127.0.0.1") + if err != nil { + t.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err) + } + defer c.Close() + p := ipv4.NewPacketConn(c) + t.Run("ToFrom", func(t *testing.T) { + testPacketConnConcurrentReadWriteUnicast(t, p, datagram, c.LocalAddr(), false) + }) + t.Run("Batch", func(t *testing.T) { + testPacketConnConcurrentReadWriteUnicast(t, p, datagram, c.LocalAddr(), true) + }) + }) +} + +func testPacketConnConcurrentReadWriteUnicast(t *testing.T, p *ipv4.PacketConn, data []byte, dst net.Addr, batch bool) { + ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback) + cf := ipv4.FlagTTL | ipv4.FlagSrc | ipv4.FlagDst | ipv4.FlagInterface + + if err := p.SetControlMessage(cf, true); err != nil { // probe before test + if nettest.ProtocolNotSupported(err) { + t.Skipf("not supported on %s", runtime.GOOS) + } + t.Fatal(err) + } + + var wg sync.WaitGroup + reader := func() { + defer wg.Done() + b := make([]byte, 128) + n, cm, _, err := p.ReadFrom(b) + if err != nil { + t.Error(err) + return + } + if !bytes.Equal(b[:n], data) { + t.Errorf("got %#v; want %#v", b[:n], data) + return + } + s := cm.String() + if strings.Contains(s, ",") { + t.Errorf("should be space-separated values: %s", s) + return + } + } + batchReader := func() { + defer wg.Done() + ms := []ipv4.Message{ + { + Buffers: [][]byte{make([]byte, 128)}, + OOB: ipv4.NewControlMessage(cf), + }, + } + n, err := p.ReadBatch(ms, 0) + if err != nil { + t.Error(err) + return + } + if n != len(ms) { + t.Errorf("got %d; want %d", n, len(ms)) + return + } + var cm ipv4.ControlMessage + if err := cm.Parse(ms[0].OOB[:ms[0].NN]); err != nil { + t.Error(err) + return + } + var b []byte + if _, ok := dst.(*net.IPAddr); ok { + var h ipv4.Header + if err := h.Parse(ms[0].Buffers[0][:ms[0].N]); err != nil { + t.Error(err) + return + } + b = ms[0].Buffers[0][h.Len:ms[0].N] + } else { + b = ms[0].Buffers[0][:ms[0].N] + } + if !bytes.Equal(b, data) { + t.Errorf("got %#v; want %#v", b, data) + return + } + s := cm.String() + if strings.Contains(s, ",") { + t.Errorf("should be space-separated values: %s", s) + return + } + } + writer := func(toggle bool) { + defer wg.Done() + cm := ipv4.ControlMessage{ + Src: net.IPv4(127, 0, 0, 1), + } + if ifi != nil { + cm.IfIndex = ifi.Index + } + if err := p.SetControlMessage(cf, toggle); err != nil { + t.Error(err) + return + } + n, err := p.WriteTo(data, &cm, dst) + if err != nil { + t.Error(err) + return + } + if n != len(data) { + t.Errorf("got %d; want %d", n, len(data)) + return + } + } + batchWriter := func(toggle bool) { + defer wg.Done() + cm := ipv4.ControlMessage{ + Src: net.IPv4(127, 0, 0, 1), + } + if ifi != nil { + cm.IfIndex = ifi.Index + } + if err := p.SetControlMessage(cf, toggle); err != nil { + t.Error(err) + return + } + ms := []ipv4.Message{ + { + Buffers: [][]byte{data}, + OOB: cm.Marshal(), + Addr: dst, + }, + } + n, err := p.WriteBatch(ms, 0) + if err != nil { + t.Error(err) + return + } + if n != len(ms) { + t.Errorf("got %d; want %d", n, len(ms)) + return + } + if ms[0].N != len(data) { + t.Errorf("got %d; want %d", ms[0].N, len(data)) + return + } + } + + const N = 10 + wg.Add(N) + for i := 0; i < N; i++ { + if batch { + go batchReader() + } else { + go reader() + } + } + wg.Add(2 * N) + for i := 0; i < 2*N; i++ { + if batch { + go batchWriter(i%2 != 0) + } else { + go writer(i%2 != 0) + } + + } + wg.Add(N) + for i := 0; i < N; i++ { + if batch { + go batchReader() + } else { + go reader() + } + } + wg.Wait() +} diff --git a/vendor/golang.org/x/net/ipv4/readwrite_test.go b/vendor/golang.org/x/net/ipv4/readwrite_test.go index a2384b8..3896a8a 100644 --- a/vendor/golang.org/x/net/ipv4/readwrite_test.go +++ b/vendor/golang.org/x/net/ipv4/readwrite_test.go @@ -16,77 +16,47 @@ import ( "golang.org/x/net/ipv4" ) -func benchmarkUDPListener() (net.PacketConn, net.Addr, error) { - c, err := net.ListenPacket("udp4", "127.0.0.1:0") +func BenchmarkReadWriteUnicast(b *testing.B) { + c, err := nettest.NewLocalPacketListener("udp4") if err != nil { - return nil, nil, err - } - dst, err := net.ResolveUDPAddr("udp4", c.LocalAddr().String()) - if err != nil { - c.Close() - return nil, nil, err - } - return c, dst, nil -} - -func BenchmarkReadWriteNetUDP(b *testing.B) { - c, dst, err := benchmarkUDPListener() - if err != nil { - b.Fatal(err) + b.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err) } defer c.Close() + dst := c.LocalAddr() wb, rb := []byte("HELLO-R-U-THERE"), make([]byte, 128) - b.ResetTimer() - for i := 0; i < b.N; i++ { - benchmarkReadWriteNetUDP(b, c, wb, rb, dst) - } -} - -func benchmarkReadWriteNetUDP(b *testing.B, c net.PacketConn, wb, rb []byte, dst net.Addr) { - if _, err := c.WriteTo(wb, dst); err != nil { - b.Fatal(err) - } - if _, _, err := c.ReadFrom(rb); err != nil { - b.Fatal(err) - } -} - -func BenchmarkReadWriteIPv4UDP(b *testing.B) { - c, dst, err := benchmarkUDPListener() - if err != nil { - b.Fatal(err) - } - defer c.Close() - - p := ipv4.NewPacketConn(c) - defer p.Close() - cf := ipv4.FlagTTL | ipv4.FlagInterface - if err := p.SetControlMessage(cf, true); err != nil { - b.Fatal(err) - } - ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback) - wb, rb := []byte("HELLO-R-U-THERE"), make([]byte, 128) - b.ResetTimer() - for i := 0; i < b.N; i++ { - benchmarkReadWriteIPv4UDP(b, p, wb, rb, dst, ifi) - } -} + b.Run("NetUDP", func(b *testing.B) { + for i := 0; i < b.N; i++ { + if _, err := c.WriteTo(wb, dst); err != nil { + b.Fatal(err) + } + if _, _, err := c.ReadFrom(rb); err != nil { + b.Fatal(err) + } + } + }) + b.Run("IPv4UDP", func(b *testing.B) { + p := ipv4.NewPacketConn(c) + cf := ipv4.FlagTTL | ipv4.FlagInterface + if err := p.SetControlMessage(cf, true); err != nil { + b.Fatal(err) + } + cm := ipv4.ControlMessage{TTL: 1} + ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback) + if ifi != nil { + cm.IfIndex = ifi.Index + } -func benchmarkReadWriteIPv4UDP(b *testing.B, p *ipv4.PacketConn, wb, rb []byte, dst net.Addr, ifi *net.Interface) { - cm := ipv4.ControlMessage{TTL: 1} - if ifi != nil { - cm.IfIndex = ifi.Index - } - if n, err := p.WriteTo(wb, &cm, dst); err != nil { - b.Fatal(err) - } else if n != len(wb) { - b.Fatalf("got %v; want %v", n, len(wb)) - } - if _, _, _, err := p.ReadFrom(rb); err != nil { - b.Fatal(err) - } + for i := 0; i < b.N; i++ { + if _, err := p.WriteTo(wb, &cm, dst); err != nil { + b.Fatal(err) + } + if _, _, _, err := p.ReadFrom(rb); err != nil { + b.Fatal(err) + } + } + }) } func TestPacketConnConcurrentReadWriteUnicastUDP(t *testing.T) { @@ -95,7 +65,7 @@ func TestPacketConnConcurrentReadWriteUnicastUDP(t *testing.T) { t.Skipf("not supported on %s", runtime.GOOS) } - c, err := net.ListenPacket("udp4", "127.0.0.1:0") + c, err := nettest.NewLocalPacketListener("udp4") if err != nil { t.Fatal(err) } @@ -103,11 +73,7 @@ func TestPacketConnConcurrentReadWriteUnicastUDP(t *testing.T) { p := ipv4.NewPacketConn(c) defer p.Close() - dst, err := net.ResolveUDPAddr("udp4", c.LocalAddr().String()) - if err != nil { - t.Fatal(err) - } - + dst := c.LocalAddr() ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback) cf := ipv4.FlagTTL | ipv4.FlagSrc | ipv4.FlagDst | ipv4.FlagInterface wb := []byte("HELLO-R-U-THERE") @@ -152,7 +118,7 @@ func TestPacketConnConcurrentReadWriteUnicastUDP(t *testing.T) { t.Error(err) return } else if n != len(wb) { - t.Errorf("short write: %v", n) + t.Errorf("got %d; want %d", n, len(wb)) return } } diff --git a/vendor/golang.org/x/net/ipv4/unicast_test.go b/vendor/golang.org/x/net/ipv4/unicast_test.go index bce8763..02c089f 100644 --- a/vendor/golang.org/x/net/ipv4/unicast_test.go +++ b/vendor/golang.org/x/net/ipv4/unicast_test.go @@ -28,18 +28,15 @@ func TestPacketConnReadWriteUnicastUDP(t *testing.T) { t.Skipf("not available on %s", runtime.GOOS) } - c, err := net.ListenPacket("udp4", "127.0.0.1:0") + c, err := nettest.NewLocalPacketListener("udp4") if err != nil { t.Fatal(err) } defer c.Close() - - dst, err := net.ResolveUDPAddr("udp4", c.LocalAddr().String()) - if err != nil { - t.Fatal(err) - } p := ipv4.NewPacketConn(c) defer p.Close() + + dst := c.LocalAddr() cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface wb := []byte("HELLO-R-U-THERE") diff --git a/vendor/golang.org/x/net/ipv6/batch.go b/vendor/golang.org/x/net/ipv6/batch.go new file mode 100644 index 0000000..4f5fe68 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/batch.go @@ -0,0 +1,119 @@ +// Copyright 2017 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 go1.9 + +package ipv6 + +import ( + "net" + "runtime" + "syscall" + + "golang.org/x/net/internal/socket" +) + +// BUG(mikio): On Windows, the ReadBatch and WriteBatch methods of +// PacketConn are not implemented. + +// A Message represents an IO message. +// +// type Message struct { +// Buffers [][]byte +// OOB []byte +// Addr net.Addr +// N int +// NN int +// Flags int +// } +// +// The Buffers fields represents a list of contiguous buffers, which +// can be used for vectored IO, for example, putting a header and a +// payload in each slice. +// When writing, the Buffers field must contain at least one byte to +// write. +// When reading, the Buffers field will always contain a byte to read. +// +// The OOB field contains protocol-specific control or miscellaneous +// ancillary data known as out-of-band data. +// It can be nil when not required. +// +// The Addr field specifies a destination address when writing. +// It can be nil when the underlying protocol of the endpoint uses +// connection-oriented communication. +// After a successful read, it may contain the source address on the +// received packet. +// +// The N field indicates the number of bytes read or written from/to +// Buffers. +// +// The NN field indicates the number of bytes read or written from/to +// OOB. +// +// The Flags field contains protocol-specific information on the +// received message. +type Message = socket.Message + +// ReadBatch reads a batch of messages. +// +// The provided flags is a set of platform-dependent flags, such as +// syscall.MSG_PEEK. +// +// On a successful read it returns the number of messages received, up +// to len(ms). +// +// On Linux, a batch read will be optimized. +// On other platforms, this method will read only a single message. +func (c *payloadHandler) ReadBatch(ms []Message, flags int) (int, error) { + if !c.ok() { + return 0, syscall.EINVAL + } + switch runtime.GOOS { + case "linux": + n, err := c.RecvMsgs([]socket.Message(ms), flags) + if err != nil { + err = &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + return n, err + default: + n := 1 + err := c.RecvMsg(&ms[0], flags) + if err != nil { + n = 0 + err = &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + return n, err + } +} + +// WriteBatch writes a batch of messages. +// +// The provided flags is a set of platform-dependent flags, such as +// syscall.MSG_DONTROUTE. +// +// It returns the number of messages written on a successful write. +// +// On Linux, a batch write will be optimized. +// On other platforms, this method will write only a single message. +func (c *payloadHandler) WriteBatch(ms []Message, flags int) (int, error) { + if !c.ok() { + return 0, syscall.EINVAL + } + switch runtime.GOOS { + case "linux": + n, err := c.SendMsgs([]socket.Message(ms), flags) + if err != nil { + err = &net.OpError{Op: "write", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + return n, err + default: + n := 1 + err := c.SendMsg(&ms[0], flags) + if err != nil { + n = 0 + err = &net.OpError{Op: "write", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + return n, err + } +} diff --git a/vendor/golang.org/x/net/ipv6/control.go b/vendor/golang.org/x/net/ipv6/control.go index 674628d..2da6444 100644 --- a/vendor/golang.org/x/net/ipv6/control.go +++ b/vendor/golang.org/x/net/ipv6/control.go @@ -8,6 +8,9 @@ import ( "fmt" "net" "sync" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" ) // Note that RFC 3542 obsoletes RFC 2292 but OS X Snow Leopard and the @@ -66,6 +69,105 @@ func (cm *ControlMessage) String() string { return fmt.Sprintf("tclass=%#x hoplim=%d src=%v dst=%v ifindex=%d nexthop=%v mtu=%d", cm.TrafficClass, cm.HopLimit, cm.Src, cm.Dst, cm.IfIndex, cm.NextHop, cm.MTU) } +// Marshal returns the binary encoding of cm. +func (cm *ControlMessage) Marshal() []byte { + if cm == nil { + return nil + } + var l int + tclass := false + if ctlOpts[ctlTrafficClass].name > 0 && cm.TrafficClass > 0 { + tclass = true + l += socket.ControlMessageSpace(ctlOpts[ctlTrafficClass].length) + } + hoplimit := false + if ctlOpts[ctlHopLimit].name > 0 && cm.HopLimit > 0 { + hoplimit = true + l += socket.ControlMessageSpace(ctlOpts[ctlHopLimit].length) + } + pktinfo := false + if ctlOpts[ctlPacketInfo].name > 0 && (cm.Src.To16() != nil && cm.Src.To4() == nil || cm.IfIndex > 0) { + pktinfo = true + l += socket.ControlMessageSpace(ctlOpts[ctlPacketInfo].length) + } + nexthop := false + if ctlOpts[ctlNextHop].name > 0 && cm.NextHop.To16() != nil && cm.NextHop.To4() == nil { + nexthop = true + l += socket.ControlMessageSpace(ctlOpts[ctlNextHop].length) + } + var b []byte + if l > 0 { + b = make([]byte, l) + bb := b + if tclass { + bb = ctlOpts[ctlTrafficClass].marshal(bb, cm) + } + if hoplimit { + bb = ctlOpts[ctlHopLimit].marshal(bb, cm) + } + if pktinfo { + bb = ctlOpts[ctlPacketInfo].marshal(bb, cm) + } + if nexthop { + bb = ctlOpts[ctlNextHop].marshal(bb, cm) + } + } + return b +} + +// Parse parses b as a control message and stores the result in cm. +func (cm *ControlMessage) Parse(b []byte) error { + ms, err := socket.ControlMessage(b).Parse() + if err != nil { + return err + } + for _, m := range ms { + lvl, typ, l, err := m.ParseHeader() + if err != nil { + return err + } + if lvl != iana.ProtocolIPv6 { + continue + } + switch { + case typ == ctlOpts[ctlTrafficClass].name && l >= ctlOpts[ctlTrafficClass].length: + ctlOpts[ctlTrafficClass].parse(cm, m.Data(l)) + case typ == ctlOpts[ctlHopLimit].name && l >= ctlOpts[ctlHopLimit].length: + ctlOpts[ctlHopLimit].parse(cm, m.Data(l)) + case typ == ctlOpts[ctlPacketInfo].name && l >= ctlOpts[ctlPacketInfo].length: + ctlOpts[ctlPacketInfo].parse(cm, m.Data(l)) + case typ == ctlOpts[ctlPathMTU].name && l >= ctlOpts[ctlPathMTU].length: + ctlOpts[ctlPathMTU].parse(cm, m.Data(l)) + } + } + return nil +} + +// NewControlMessage returns a new control message. +// +// The returned message is large enough for options specified by cf. +func NewControlMessage(cf ControlFlags) []byte { + opt := rawOpt{cflags: cf} + var l int + if opt.isset(FlagTrafficClass) && ctlOpts[ctlTrafficClass].name > 0 { + l += socket.ControlMessageSpace(ctlOpts[ctlTrafficClass].length) + } + if opt.isset(FlagHopLimit) && ctlOpts[ctlHopLimit].name > 0 { + l += socket.ControlMessageSpace(ctlOpts[ctlHopLimit].length) + } + if opt.isset(flagPacketInfo) && ctlOpts[ctlPacketInfo].name > 0 { + l += socket.ControlMessageSpace(ctlOpts[ctlPacketInfo].length) + } + if opt.isset(FlagPathMTU) && ctlOpts[ctlPathMTU].name > 0 { + l += socket.ControlMessageSpace(ctlOpts[ctlPathMTU].length) + } + var b []byte + if l > 0 { + b = make([]byte, l) + } + return b +} + // Ancillary data socket options const ( ctlTrafficClass = iota // header field diff --git a/vendor/golang.org/x/net/ipv6/control_rfc2292_unix.go b/vendor/golang.org/x/net/ipv6/control_rfc2292_unix.go index d1693af..9fd9eb1 100644 --- a/vendor/golang.org/x/net/ipv6/control_rfc2292_unix.go +++ b/vendor/golang.org/x/net/ipv6/control_rfc2292_unix.go @@ -7,31 +7,26 @@ package ipv6 import ( - "syscall" "unsafe" "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" ) func marshal2292HopLimit(b []byte, cm *ControlMessage) []byte { - m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0])) - m.Level = iana.ProtocolIPv6 - m.Type = sysIPV6_2292HOPLIMIT - m.SetLen(syscall.CmsgLen(4)) + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIPv6, sysIPV6_2292HOPLIMIT, 4) if cm != nil { - data := b[syscall.CmsgLen(0):] - nativeEndian.PutUint32(data[:4], uint32(cm.HopLimit)) + socket.NativeEndian.PutUint32(m.Data(4), uint32(cm.HopLimit)) } - return b[syscall.CmsgSpace(4):] + return m.Next(4) } func marshal2292PacketInfo(b []byte, cm *ControlMessage) []byte { - m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0])) - m.Level = iana.ProtocolIPv6 - m.Type = sysIPV6_2292PKTINFO - m.SetLen(syscall.CmsgLen(sizeofInet6Pktinfo)) + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIPv6, sysIPV6_2292PKTINFO, sizeofInet6Pktinfo) if cm != nil { - pi := (*inet6Pktinfo)(unsafe.Pointer(&b[syscall.CmsgLen(0)])) + pi := (*inet6Pktinfo)(unsafe.Pointer(&m.Data(sizeofInet6Pktinfo)[0])) if ip := cm.Src.To16(); ip != nil && ip.To4() == nil { copy(pi.Addr[:], ip) } @@ -39,17 +34,15 @@ func marshal2292PacketInfo(b []byte, cm *ControlMessage) []byte { pi.setIfindex(cm.IfIndex) } } - return b[syscall.CmsgSpace(sizeofInet6Pktinfo):] + return m.Next(sizeofInet6Pktinfo) } func marshal2292NextHop(b []byte, cm *ControlMessage) []byte { - m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0])) - m.Level = iana.ProtocolIPv6 - m.Type = sysIPV6_2292NEXTHOP - m.SetLen(syscall.CmsgLen(sizeofSockaddrInet6)) + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIPv6, sysIPV6_2292NEXTHOP, sizeofSockaddrInet6) if cm != nil { - sa := (*sockaddrInet6)(unsafe.Pointer(&b[syscall.CmsgLen(0)])) + sa := (*sockaddrInet6)(unsafe.Pointer(&m.Data(sizeofSockaddrInet6)[0])) sa.setSockaddr(cm.NextHop, cm.IfIndex) } - return b[syscall.CmsgSpace(sizeofSockaddrInet6):] + return m.Next(sizeofSockaddrInet6) } diff --git a/vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go b/vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go index 2800df4..eec529c 100644 --- a/vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go +++ b/vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go @@ -7,51 +7,44 @@ package ipv6 import ( - "syscall" + "net" "unsafe" "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" ) func marshalTrafficClass(b []byte, cm *ControlMessage) []byte { - m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0])) - m.Level = iana.ProtocolIPv6 - m.Type = sysIPV6_TCLASS - m.SetLen(syscall.CmsgLen(4)) + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIPv6, sysIPV6_TCLASS, 4) if cm != nil { - data := b[syscall.CmsgLen(0):] - nativeEndian.PutUint32(data[:4], uint32(cm.TrafficClass)) + socket.NativeEndian.PutUint32(m.Data(4), uint32(cm.TrafficClass)) } - return b[syscall.CmsgSpace(4):] + return m.Next(4) } func parseTrafficClass(cm *ControlMessage, b []byte) { - cm.TrafficClass = int(nativeEndian.Uint32(b[:4])) + cm.TrafficClass = int(socket.NativeEndian.Uint32(b[:4])) } func marshalHopLimit(b []byte, cm *ControlMessage) []byte { - m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0])) - m.Level = iana.ProtocolIPv6 - m.Type = sysIPV6_HOPLIMIT - m.SetLen(syscall.CmsgLen(4)) + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIPv6, sysIPV6_HOPLIMIT, 4) if cm != nil { - data := b[syscall.CmsgLen(0):] - nativeEndian.PutUint32(data[:4], uint32(cm.HopLimit)) + socket.NativeEndian.PutUint32(m.Data(4), uint32(cm.HopLimit)) } - return b[syscall.CmsgSpace(4):] + return m.Next(4) } func parseHopLimit(cm *ControlMessage, b []byte) { - cm.HopLimit = int(nativeEndian.Uint32(b[:4])) + cm.HopLimit = int(socket.NativeEndian.Uint32(b[:4])) } func marshalPacketInfo(b []byte, cm *ControlMessage) []byte { - m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0])) - m.Level = iana.ProtocolIPv6 - m.Type = sysIPV6_PKTINFO - m.SetLen(syscall.CmsgLen(sizeofInet6Pktinfo)) + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIPv6, sysIPV6_PKTINFO, sizeofInet6Pktinfo) if cm != nil { - pi := (*inet6Pktinfo)(unsafe.Pointer(&b[syscall.CmsgLen(0)])) + pi := (*inet6Pktinfo)(unsafe.Pointer(&m.Data(sizeofInet6Pktinfo)[0])) if ip := cm.Src.To16(); ip != nil && ip.To4() == nil { copy(pi.Addr[:], ip) } @@ -59,41 +52,43 @@ func marshalPacketInfo(b []byte, cm *ControlMessage) []byte { pi.setIfindex(cm.IfIndex) } } - return b[syscall.CmsgSpace(sizeofInet6Pktinfo):] + return m.Next(sizeofInet6Pktinfo) } func parsePacketInfo(cm *ControlMessage, b []byte) { pi := (*inet6Pktinfo)(unsafe.Pointer(&b[0])) - cm.Dst = pi.Addr[:] + if len(cm.Dst) < net.IPv6len { + cm.Dst = make(net.IP, net.IPv6len) + } + copy(cm.Dst, pi.Addr[:]) cm.IfIndex = int(pi.Ifindex) } func marshalNextHop(b []byte, cm *ControlMessage) []byte { - m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0])) - m.Level = iana.ProtocolIPv6 - m.Type = sysIPV6_NEXTHOP - m.SetLen(syscall.CmsgLen(sizeofSockaddrInet6)) + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIPv6, sysIPV6_NEXTHOP, sizeofSockaddrInet6) if cm != nil { - sa := (*sockaddrInet6)(unsafe.Pointer(&b[syscall.CmsgLen(0)])) + sa := (*sockaddrInet6)(unsafe.Pointer(&m.Data(sizeofSockaddrInet6)[0])) sa.setSockaddr(cm.NextHop, cm.IfIndex) } - return b[syscall.CmsgSpace(sizeofSockaddrInet6):] + return m.Next(sizeofSockaddrInet6) } func parseNextHop(cm *ControlMessage, b []byte) { } func marshalPathMTU(b []byte, cm *ControlMessage) []byte { - m := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0])) - m.Level = iana.ProtocolIPv6 - m.Type = sysIPV6_PATHMTU - m.SetLen(syscall.CmsgLen(sizeofIPv6Mtuinfo)) - return b[syscall.CmsgSpace(sizeofIPv6Mtuinfo):] + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIPv6, sysIPV6_PATHMTU, sizeofIPv6Mtuinfo) + return m.Next(sizeofIPv6Mtuinfo) } func parsePathMTU(cm *ControlMessage, b []byte) { mi := (*ipv6Mtuinfo)(unsafe.Pointer(&b[0])) - cm.Dst = mi.Addr.Addr[:] + if len(cm.Dst) < net.IPv6len { + cm.Dst = make(net.IP, net.IPv6len) + } + copy(cm.Dst, mi.Addr.Addr[:]) cm.IfIndex = int(mi.Addr.Scope_id) cm.MTU = int(mi.Mtu) } diff --git a/vendor/golang.org/x/net/ipv6/control_stub.go b/vendor/golang.org/x/net/ipv6/control_stub.go index 963d200..a045f28 100644 --- a/vendor/golang.org/x/net/ipv6/control_stub.go +++ b/vendor/golang.org/x/net/ipv6/control_stub.go @@ -11,15 +11,3 @@ import "golang.org/x/net/internal/socket" func setControlMessage(c *socket.Conn, opt *rawOpt, cf ControlFlags, on bool) error { return errOpNoSupport } - -func newControlMessage(opt *rawOpt) (oob []byte) { - return nil -} - -func parseControlMessage(b []byte) (*ControlMessage, error) { - return nil, errOpNoSupport -} - -func marshalControlMessage(cm *ControlMessage) (oob []byte) { - return nil -} diff --git a/vendor/golang.org/x/net/ipv6/control_test.go b/vendor/golang.org/x/net/ipv6/control_test.go new file mode 100644 index 0000000..c186ca9 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/control_test.go @@ -0,0 +1,21 @@ +// Copyright 2017 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. + +package ipv6_test + +import ( + "testing" + + "golang.org/x/net/ipv6" +) + +func TestControlMessageParseWithFuzz(t *testing.T) { + var cm ipv6.ControlMessage + for _, fuzz := range []string{ + "\f\x00\x00\x00)\x00\x00\x00.\x00\x00\x00", + "\f\x00\x00\x00)\x00\x00\x00,\x00\x00\x00", + } { + cm.Parse([]byte(fuzz)) + } +} diff --git a/vendor/golang.org/x/net/ipv6/control_unix.go b/vendor/golang.org/x/net/ipv6/control_unix.go index 29a59e0..6651506 100644 --- a/vendor/golang.org/x/net/ipv6/control_unix.go +++ b/vendor/golang.org/x/net/ipv6/control_unix.go @@ -6,13 +6,7 @@ package ipv6 -import ( - "os" - "syscall" - - "golang.org/x/net/internal/iana" - "golang.org/x/net/internal/socket" -) +import "golang.org/x/net/internal/socket" func setControlMessage(c *socket.Conn, opt *rawOpt, cf ControlFlags, on bool) error { opt.Lock() @@ -59,96 +53,3 @@ func setControlMessage(c *socket.Conn, opt *rawOpt, cf ControlFlags, on bool) er } return nil } - -func newControlMessage(opt *rawOpt) (oob []byte) { - opt.RLock() - var l int - if opt.isset(FlagTrafficClass) && ctlOpts[ctlTrafficClass].name > 0 { - l += syscall.CmsgSpace(ctlOpts[ctlTrafficClass].length) - } - if opt.isset(FlagHopLimit) && ctlOpts[ctlHopLimit].name > 0 { - l += syscall.CmsgSpace(ctlOpts[ctlHopLimit].length) - } - if opt.isset(flagPacketInfo) && ctlOpts[ctlPacketInfo].name > 0 { - l += syscall.CmsgSpace(ctlOpts[ctlPacketInfo].length) - } - if opt.isset(FlagPathMTU) && ctlOpts[ctlPathMTU].name > 0 { - l += syscall.CmsgSpace(ctlOpts[ctlPathMTU].length) - } - if l > 0 { - oob = make([]byte, l) - } - opt.RUnlock() - return -} - -func parseControlMessage(b []byte) (*ControlMessage, error) { - if len(b) == 0 { - return nil, nil - } - cmsgs, err := syscall.ParseSocketControlMessage(b) - if err != nil { - return nil, os.NewSyscallError("parse socket control message", err) - } - cm := &ControlMessage{} - for _, m := range cmsgs { - if m.Header.Level != iana.ProtocolIPv6 { - continue - } - switch int(m.Header.Type) { - case ctlOpts[ctlTrafficClass].name: - ctlOpts[ctlTrafficClass].parse(cm, m.Data[:]) - case ctlOpts[ctlHopLimit].name: - ctlOpts[ctlHopLimit].parse(cm, m.Data[:]) - case ctlOpts[ctlPacketInfo].name: - ctlOpts[ctlPacketInfo].parse(cm, m.Data[:]) - case ctlOpts[ctlPathMTU].name: - ctlOpts[ctlPathMTU].parse(cm, m.Data[:]) - } - } - return cm, nil -} - -func marshalControlMessage(cm *ControlMessage) (oob []byte) { - if cm == nil { - return - } - var l int - tclass := false - if ctlOpts[ctlTrafficClass].name > 0 && cm.TrafficClass > 0 { - tclass = true - l += syscall.CmsgSpace(ctlOpts[ctlTrafficClass].length) - } - hoplimit := false - if ctlOpts[ctlHopLimit].name > 0 && cm.HopLimit > 0 { - hoplimit = true - l += syscall.CmsgSpace(ctlOpts[ctlHopLimit].length) - } - pktinfo := false - if ctlOpts[ctlPacketInfo].name > 0 && (cm.Src.To16() != nil && cm.Src.To4() == nil || cm.IfIndex > 0) { - pktinfo = true - l += syscall.CmsgSpace(ctlOpts[ctlPacketInfo].length) - } - nexthop := false - if ctlOpts[ctlNextHop].name > 0 && cm.NextHop.To16() != nil && cm.NextHop.To4() == nil { - nexthop = true - l += syscall.CmsgSpace(ctlOpts[ctlNextHop].length) - } - if l > 0 { - oob = make([]byte, l) - b := oob - if tclass { - b = ctlOpts[ctlTrafficClass].marshal(b, cm) - } - if hoplimit { - b = ctlOpts[ctlHopLimit].marshal(b, cm) - } - if pktinfo { - b = ctlOpts[ctlPacketInfo].marshal(b, cm) - } - if nexthop { - b = ctlOpts[ctlNextHop].marshal(b, cm) - } - } - return -} diff --git a/vendor/golang.org/x/net/ipv6/control_windows.go b/vendor/golang.org/x/net/ipv6/control_windows.go index 97bb1e4..ef2563b 100644 --- a/vendor/golang.org/x/net/ipv6/control_windows.go +++ b/vendor/golang.org/x/net/ipv6/control_windows.go @@ -14,18 +14,3 @@ func setControlMessage(c *socket.Conn, opt *rawOpt, cf ControlFlags, on bool) er // TODO(mikio): implement this return syscall.EWINDOWS } - -func newControlMessage(opt *rawOpt) (oob []byte) { - // TODO(mikio): implement this - return nil -} - -func parseControlMessage(b []byte) (*ControlMessage, error) { - // TODO(mikio): implement this - return nil, syscall.EWINDOWS -} - -func marshalControlMessage(cm *ControlMessage) (oob []byte) { - // TODO(mikio): implement this - return nil -} diff --git a/vendor/golang.org/x/net/ipv6/doc.go b/vendor/golang.org/x/net/ipv6/doc.go index eaa24c5..664a97d 100644 --- a/vendor/golang.org/x/net/ipv6/doc.go +++ b/vendor/golang.org/x/net/ipv6/doc.go @@ -8,7 +8,7 @@ // The package provides IP-level socket options that allow // manipulation of IPv6 facilities. // -// The IPv6 protocol is defined in RFC 2460. +// The IPv6 protocol is defined in RFC 8200. // Socket interface extensions are defined in RFC 3493, RFC 3542 and // RFC 3678. // MLDv1 and MLDv2 are defined in RFC 2710 and RFC 3810. diff --git a/vendor/golang.org/x/net/ipv6/endpoint.go b/vendor/golang.org/x/net/ipv6/endpoint.go index 001d267..0624c17 100644 --- a/vendor/golang.org/x/net/ipv6/endpoint.go +++ b/vendor/golang.org/x/net/ipv6/endpoint.go @@ -123,6 +123,6 @@ func NewPacketConn(c net.PacketConn) *PacketConn { return &PacketConn{ genericOpt: genericOpt{Conn: cc}, dgramOpt: dgramOpt{Conn: cc}, - payloadHandler: payloadHandler{PacketConn: c}, + payloadHandler: payloadHandler{PacketConn: c, Conn: cc}, } } diff --git a/vendor/golang.org/x/net/ipv6/gen.go b/vendor/golang.org/x/net/ipv6/gen.go index 41886ec..5885664 100644 --- a/vendor/golang.org/x/net/ipv6/gen.go +++ b/vendor/golang.org/x/net/ipv6/gen.go @@ -72,7 +72,7 @@ var registries = []struct { parse func(io.Writer, io.Reader) error }{ { - "http://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xml", + "https://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xml", parseICMPv6Parameters, }, } @@ -80,7 +80,7 @@ var registries = []struct { func geniana() error { var bb bytes.Buffer fmt.Fprintf(&bb, "// go generate gen.go\n") - fmt.Fprintf(&bb, "// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n") + fmt.Fprintf(&bb, "// Code generated by the command above; DO NOT EDIT.\n\n") fmt.Fprintf(&bb, "package ipv6\n\n") for _, r := range registries { resp, err := http.Get(r.url) diff --git a/vendor/golang.org/x/net/ipv6/helper.go b/vendor/golang.org/x/net/ipv6/helper.go index 7a42e58..2597401 100644 --- a/vendor/golang.org/x/net/ipv6/helper.go +++ b/vendor/golang.org/x/net/ipv6/helper.go @@ -5,10 +5,8 @@ package ipv6 import ( - "encoding/binary" "errors" "net" - "unsafe" ) var ( @@ -17,20 +15,8 @@ var ( errInvalidConnType = errors.New("invalid conn type") errOpNoSupport = errors.New("operation not supported") errNoSuchInterface = errors.New("no such interface") - - nativeEndian binary.ByteOrder ) -func init() { - i := uint32(1) - b := (*[4]byte)(unsafe.Pointer(&i)) - if b[0] == 1 { - nativeEndian = binary.LittleEndian - } else { - nativeEndian = binary.BigEndian - } -} - func boolint(b bool) int { if b { return 1 @@ -51,3 +37,21 @@ func netAddrToIP16(a net.Addr) net.IP { } return nil } + +func opAddr(a net.Addr) net.Addr { + switch a.(type) { + case *net.TCPAddr: + if a == nil { + return nil + } + case *net.UDPAddr: + if a == nil { + return nil + } + case *net.IPAddr: + if a == nil { + return nil + } + } + return a +} diff --git a/vendor/golang.org/x/net/ipv6/iana.go b/vendor/golang.org/x/net/ipv6/iana.go index 3c6214f..32db1aa 100644 --- a/vendor/golang.org/x/net/ipv6/iana.go +++ b/vendor/golang.org/x/net/ipv6/iana.go @@ -1,9 +1,9 @@ // go generate gen.go -// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT +// Code generated by the command above; DO NOT EDIT. package ipv6 -// Internet Control Message Protocol version 6 (ICMPv6) Parameters, Updated: 2015-07-07 +// Internet Control Message Protocol version 6 (ICMPv6) Parameters, Updated: 2018-03-09 const ( ICMPTypeDestinationUnreachable ICMPType = 1 // Destination Unreachable ICMPTypePacketTooBig ICMPType = 2 // Packet Too Big @@ -40,9 +40,11 @@ const ( ICMPTypeDuplicateAddressRequest ICMPType = 157 // Duplicate Address Request ICMPTypeDuplicateAddressConfirmation ICMPType = 158 // Duplicate Address Confirmation ICMPTypeMPLControl ICMPType = 159 // MPL Control Message + ICMPTypeExtendedEchoRequest ICMPType = 160 // Extended Echo Request + ICMPTypeExtendedEchoReply ICMPType = 161 // Extended Echo Reply ) -// Internet Control Message Protocol version 6 (ICMPv6) Parameters, Updated: 2015-07-07 +// Internet Control Message Protocol version 6 (ICMPv6) Parameters, Updated: 2018-03-09 var icmpTypes = map[ICMPType]string{ 1: "destination unreachable", 2: "packet too big", @@ -79,4 +81,6 @@ var icmpTypes = map[ICMPType]string{ 157: "duplicate address request", 158: "duplicate address confirmation", 159: "mpl control message", + 160: "extended echo request", + 161: "extended echo reply", } diff --git a/vendor/golang.org/x/net/ipv6/icmp.go b/vendor/golang.org/x/net/ipv6/icmp.go index ff21d10..b7f48e2 100644 --- a/vendor/golang.org/x/net/ipv6/icmp.go +++ b/vendor/golang.org/x/net/ipv6/icmp.go @@ -29,7 +29,7 @@ func (typ ICMPType) Protocol() int { // packets. The filter belongs to a packet delivery path on a host and // it cannot interact with forwarding packets or tunnel-outer packets. // -// Note: RFC 2460 defines a reasonable role model. A node means a +// Note: RFC 8200 defines a reasonable role model. A node means a // device that implements IP. A router means a node that forwards IP // packets not explicitly addressed to itself, and a host means a node // that is not a router. diff --git a/vendor/golang.org/x/net/ipv6/multicastlistener_test.go b/vendor/golang.org/x/net/ipv6/multicastlistener_test.go index 044db15..b27713e 100644 --- a/vendor/golang.org/x/net/ipv6/multicastlistener_test.go +++ b/vendor/golang.org/x/net/ipv6/multicastlistener_test.go @@ -5,7 +5,6 @@ package ipv6_test import ( - "fmt" "net" "runtime" "testing" @@ -70,13 +69,16 @@ func TestUDPMultiplePacketConnWithMultipleGroupListeners(t *testing.T) { } for _, gaddr := range udpMultipleGroupListenerTests { - c1, err := net.ListenPacket("udp6", "[ff02::]:1024") // wildcard address with reusable port + c1, err := net.ListenPacket("udp6", "[ff02::]:0") // wildcard address with reusable port if err != nil { t.Fatal(err) } defer c1.Close() - - c2, err := net.ListenPacket("udp6", "[ff02::]:1024") // wildcard address with reusable port + _, port, err := net.SplitHostPort(c1.LocalAddr().String()) + if err != nil { + t.Fatal(err) + } + c2, err := net.ListenPacket("udp6", net.JoinHostPort("ff02::", port)) // wildcard address with reusable port if err != nil { t.Fatal(err) } @@ -132,16 +134,29 @@ func TestUDPPerInterfaceSinglePacketConnWithSingleGroupListener(t *testing.T) { if err != nil { t.Fatal(err) } + port := "0" for i, ifi := range ift { ip, ok := nettest.IsMulticastCapable("ip6", &ifi) if !ok { continue } - c, err := net.ListenPacket("udp6", fmt.Sprintf("[%s%%%s]:1024", ip.String(), ifi.Name)) // unicast address with non-reusable port + c, err := net.ListenPacket("udp6", net.JoinHostPort(ip.String()+"%"+ifi.Name, port)) // unicast address with non-reusable port if err != nil { - t.Fatal(err) + // The listen may fail when the serivce is + // already in use, but it's fine because the + // purpose of this is not to test the + // bookkeeping of IP control block inside the + // kernel. + t.Log(err) + continue } defer c.Close() + if port == "0" { + _, port, err = net.SplitHostPort(c.LocalAddr().String()) + if err != nil { + t.Fatal(err) + } + } p := ipv6.NewPacketConn(c) if err := p.JoinGroup(&ifi, &gaddr); err != nil { t.Fatal(err) @@ -227,7 +242,7 @@ func TestIPPerInterfaceSinglePacketConnWithSingleGroupListener(t *testing.T) { if !ok { continue } - c, err := net.ListenPacket("ip6:ipv6-icmp", fmt.Sprintf("%s%%%s", ip.String(), ifi.Name)) // unicast address + c, err := net.ListenPacket("ip6:ipv6-icmp", ip.String()+"%"+ifi.Name) // unicast address if err != nil { t.Fatal(err) } diff --git a/vendor/golang.org/x/net/ipv6/payload.go b/vendor/golang.org/x/net/ipv6/payload.go index d9f8225..a8197f1 100644 --- a/vendor/golang.org/x/net/ipv6/payload.go +++ b/vendor/golang.org/x/net/ipv6/payload.go @@ -4,7 +4,11 @@ package ipv6 -import "net" +import ( + "net" + + "golang.org/x/net/internal/socket" +) // BUG(mikio): On Windows, the ControlMessage for ReadFrom and WriteTo // methods of PacketConn is not implemented. @@ -12,7 +16,8 @@ import "net" // A payloadHandler represents the IPv6 datagram payload handler. type payloadHandler struct { net.PacketConn + *socket.Conn rawOpt } -func (c *payloadHandler) ok() bool { return c != nil && c.PacketConn != nil } +func (c *payloadHandler) ok() bool { return c != nil && c.PacketConn != nil && c.Conn != nil } diff --git a/vendor/golang.org/x/net/ipv6/payload_cmsg.go b/vendor/golang.org/x/net/ipv6/payload_cmsg.go index e853c80..4ee4b06 100644 --- a/vendor/golang.org/x/net/ipv6/payload_cmsg.go +++ b/vendor/golang.org/x/net/ipv6/payload_cmsg.go @@ -19,27 +19,7 @@ func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net. if !c.ok() { return 0, nil, nil, syscall.EINVAL } - oob := newControlMessage(&c.rawOpt) - var oobn int - switch c := c.PacketConn.(type) { - case *net.UDPConn: - if n, oobn, _, src, err = c.ReadMsgUDP(b, oob); err != nil { - return 0, nil, nil, err - } - case *net.IPConn: - if n, oobn, _, src, err = c.ReadMsgIP(b, oob); err != nil { - return 0, nil, nil, err - } - default: - return 0, nil, nil, errInvalidConnType - } - if cm, err = parseControlMessage(oob[:oobn]); err != nil { - return 0, nil, nil, err - } - if cm != nil { - cm.Src = netAddrToIP16(src) - } - return + return c.readFrom(b) } // WriteTo writes a payload of the IPv6 datagram, to the destination @@ -51,20 +31,5 @@ func (c *payloadHandler) WriteTo(b []byte, cm *ControlMessage, dst net.Addr) (n if !c.ok() { return 0, syscall.EINVAL } - oob := marshalControlMessage(cm) - if dst == nil { - return 0, errMissingAddress - } - switch c := c.PacketConn.(type) { - case *net.UDPConn: - n, _, err = c.WriteMsgUDP(b, oob, dst.(*net.UDPAddr)) - case *net.IPConn: - n, _, err = c.WriteMsgIP(b, oob, dst.(*net.IPAddr)) - default: - return 0, errInvalidConnType - } - if err != nil { - return 0, err - } - return + return c.writeTo(b, cm, dst) } diff --git a/vendor/golang.org/x/net/ipv6/payload_cmsg_go1_8.go b/vendor/golang.org/x/net/ipv6/payload_cmsg_go1_8.go new file mode 100644 index 0000000..fdc6c39 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/payload_cmsg_go1_8.go @@ -0,0 +1,55 @@ +// Copyright 2013 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 !go1.9 +// +build !nacl,!plan9,!windows + +package ipv6 + +import "net" + +func (c *payloadHandler) readFrom(b []byte) (n int, cm *ControlMessage, src net.Addr, err error) { + c.rawOpt.RLock() + oob := NewControlMessage(c.rawOpt.cflags) + c.rawOpt.RUnlock() + var nn int + switch c := c.PacketConn.(type) { + case *net.UDPConn: + if n, nn, _, src, err = c.ReadMsgUDP(b, oob); err != nil { + return 0, nil, nil, err + } + case *net.IPConn: + if n, nn, _, src, err = c.ReadMsgIP(b, oob); err != nil { + return 0, nil, nil, err + } + default: + return 0, nil, nil, &net.OpError{Op: "read", Net: c.LocalAddr().Network(), Source: c.LocalAddr(), Err: errInvalidConnType} + } + if nn > 0 { + cm = new(ControlMessage) + if err = cm.Parse(oob[:nn]); err != nil { + return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + } + if cm != nil { + cm.Src = netAddrToIP16(src) + } + return +} + +func (c *payloadHandler) writeTo(b []byte, cm *ControlMessage, dst net.Addr) (n int, err error) { + oob := cm.Marshal() + if dst == nil { + return 0, &net.OpError{Op: "write", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: errMissingAddress} + } + switch c := c.PacketConn.(type) { + case *net.UDPConn: + n, _, err = c.WriteMsgUDP(b, oob, dst.(*net.UDPAddr)) + case *net.IPConn: + n, _, err = c.WriteMsgIP(b, oob, dst.(*net.IPAddr)) + default: + return 0, &net.OpError{Op: "write", Net: c.LocalAddr().Network(), Source: c.LocalAddr(), Addr: opAddr(dst), Err: errInvalidConnType} + } + return +} diff --git a/vendor/golang.org/x/net/ipv6/payload_cmsg_go1_9.go b/vendor/golang.org/x/net/ipv6/payload_cmsg_go1_9.go new file mode 100644 index 0000000..8f6d02e --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/payload_cmsg_go1_9.go @@ -0,0 +1,57 @@ +// Copyright 2017 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 go1.9 +// +build !nacl,!plan9,!windows + +package ipv6 + +import ( + "net" + + "golang.org/x/net/internal/socket" +) + +func (c *payloadHandler) readFrom(b []byte) (int, *ControlMessage, net.Addr, error) { + c.rawOpt.RLock() + m := socket.Message{ + Buffers: [][]byte{b}, + OOB: NewControlMessage(c.rawOpt.cflags), + } + c.rawOpt.RUnlock() + switch c.PacketConn.(type) { + case *net.UDPConn: + if err := c.RecvMsg(&m, 0); err != nil { + return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + case *net.IPConn: + if err := c.RecvMsg(&m, 0); err != nil { + return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + default: + return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: errInvalidConnType} + } + var cm *ControlMessage + if m.NN > 0 { + cm = new(ControlMessage) + if err := cm.Parse(m.OOB[:m.NN]); err != nil { + return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + cm.Src = netAddrToIP16(m.Addr) + } + return m.N, cm, m.Addr, nil +} + +func (c *payloadHandler) writeTo(b []byte, cm *ControlMessage, dst net.Addr) (int, error) { + m := socket.Message{ + Buffers: [][]byte{b}, + OOB: cm.Marshal(), + Addr: dst, + } + err := c.SendMsg(&m, 0) + if err != nil { + err = &net.OpError{Op: "write", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Addr: opAddr(dst), Err: err} + } + return m.N, err +} diff --git a/vendor/golang.org/x/net/ipv6/readwrite_go1_8_test.go b/vendor/golang.org/x/net/ipv6/readwrite_go1_8_test.go new file mode 100644 index 0000000..c11d92a --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/readwrite_go1_8_test.go @@ -0,0 +1,242 @@ +// Copyright 2013 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 !go1.9 + +package ipv6_test + +import ( + "bytes" + "fmt" + "net" + "runtime" + "strings" + "sync" + "testing" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/nettest" + "golang.org/x/net/ipv6" +) + +func BenchmarkPacketConnReadWriteUnicast(b *testing.B) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + b.Skipf("not supported on %s", runtime.GOOS) + } + + payload := []byte("HELLO-R-U-THERE") + iph := []byte{ + 0x69, 0x8b, 0xee, 0xf1, 0xca, 0xfe, 0xff, 0x01, + 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + } + greh := []byte{0x00, 0x00, 0x86, 0xdd, 0x00, 0x00, 0x00, 0x00} + datagram := append(greh, append(iph, payload...)...) + bb := make([]byte, 128) + cm := ipv6.ControlMessage{ + TrafficClass: iana.DiffServAF11 | iana.CongestionExperienced, + HopLimit: 1, + Src: net.IPv6loopback, + } + if ifi := nettest.RoutedInterface("ip6", net.FlagUp|net.FlagLoopback); ifi != nil { + cm.IfIndex = ifi.Index + } + + b.Run("UDP", func(b *testing.B) { + c, err := nettest.NewLocalPacketListener("udp6") + if err != nil { + b.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err) + } + defer c.Close() + p := ipv6.NewPacketConn(c) + dst := c.LocalAddr() + cf := ipv6.FlagHopLimit | ipv6.FlagInterface + if err := p.SetControlMessage(cf, true); err != nil { + b.Fatal(err) + } + b.Run("Net", func(b *testing.B) { + for i := 0; i < b.N; i++ { + if _, err := c.WriteTo(payload, dst); err != nil { + b.Fatal(err) + } + if _, _, err := c.ReadFrom(bb); err != nil { + b.Fatal(err) + } + } + }) + b.Run("ToFrom", func(b *testing.B) { + for i := 0; i < b.N; i++ { + if _, err := p.WriteTo(payload, &cm, dst); err != nil { + b.Fatal(err) + } + if _, _, _, err := p.ReadFrom(bb); err != nil { + b.Fatal(err) + } + } + }) + }) + b.Run("IP", func(b *testing.B) { + switch runtime.GOOS { + case "netbsd": + b.Skip("need to configure gre on netbsd") + case "openbsd": + b.Skip("net.inet.gre.allow=0 by default on openbsd") + } + + c, err := net.ListenPacket(fmt.Sprintf("ip6:%d", iana.ProtocolGRE), "::1") + if err != nil { + b.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err) + } + defer c.Close() + p := ipv6.NewPacketConn(c) + dst := c.LocalAddr() + cf := ipv6.FlagTrafficClass | ipv6.FlagHopLimit | ipv6.FlagSrc | ipv6.FlagDst | ipv6.FlagInterface | ipv6.FlagPathMTU + if err := p.SetControlMessage(cf, true); err != nil { + b.Fatal(err) + } + b.Run("Net", func(b *testing.B) { + for i := 0; i < b.N; i++ { + if _, err := c.WriteTo(datagram, dst); err != nil { + b.Fatal(err) + } + if _, _, err := c.ReadFrom(bb); err != nil { + b.Fatal(err) + } + } + }) + b.Run("ToFrom", func(b *testing.B) { + for i := 0; i < b.N; i++ { + if _, err := p.WriteTo(datagram, &cm, dst); err != nil { + b.Fatal(err) + } + if _, _, _, err := p.ReadFrom(bb); err != nil { + b.Fatal(err) + } + } + }) + }) +} + +func TestPacketConnConcurrentReadWriteUnicast(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + + payload := []byte("HELLO-R-U-THERE") + iph := []byte{ + 0x69, 0x8b, 0xee, 0xf1, 0xca, 0xfe, 0xff, 0x01, + 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + } + greh := []byte{0x00, 0x00, 0x86, 0xdd, 0x00, 0x00, 0x00, 0x00} + datagram := append(greh, append(iph, payload...)...) + + t.Run("UDP", func(t *testing.T) { + c, err := nettest.NewLocalPacketListener("udp6") + if err != nil { + t.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err) + } + defer c.Close() + p := ipv6.NewPacketConn(c) + t.Run("ToFrom", func(t *testing.T) { + testPacketConnConcurrentReadWriteUnicast(t, p, payload, c.LocalAddr()) + }) + }) + t.Run("IP", func(t *testing.T) { + switch runtime.GOOS { + case "netbsd": + t.Skip("need to configure gre on netbsd") + case "openbsd": + t.Skip("net.inet.gre.allow=0 by default on openbsd") + } + + c, err := net.ListenPacket(fmt.Sprintf("ip6:%d", iana.ProtocolGRE), "::1") + if err != nil { + t.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err) + } + defer c.Close() + p := ipv6.NewPacketConn(c) + t.Run("ToFrom", func(t *testing.T) { + testPacketConnConcurrentReadWriteUnicast(t, p, datagram, c.LocalAddr()) + }) + }) +} + +func testPacketConnConcurrentReadWriteUnicast(t *testing.T, p *ipv6.PacketConn, data []byte, dst net.Addr) { + ifi := nettest.RoutedInterface("ip6", net.FlagUp|net.FlagLoopback) + cf := ipv6.FlagTrafficClass | ipv6.FlagHopLimit | ipv6.FlagSrc | ipv6.FlagDst | ipv6.FlagInterface | ipv6.FlagPathMTU + + if err := p.SetControlMessage(cf, true); err != nil { // probe before test + if nettest.ProtocolNotSupported(err) { + t.Skipf("not supported on %s", runtime.GOOS) + } + t.Fatal(err) + } + + var wg sync.WaitGroup + reader := func() { + defer wg.Done() + b := make([]byte, 128) + n, cm, _, err := p.ReadFrom(b) + if err != nil { + t.Error(err) + return + } + if !bytes.Equal(b[:n], data) { + t.Errorf("got %#v; want %#v", b[:n], data) + return + } + s := cm.String() + if strings.Contains(s, ",") { + t.Errorf("should be space-separated values: %s", s) + return + } + } + writer := func(toggle bool) { + defer wg.Done() + cm := ipv6.ControlMessage{ + TrafficClass: iana.DiffServAF11 | iana.CongestionExperienced, + HopLimit: 1, + Src: net.IPv6loopback, + } + if ifi != nil { + cm.IfIndex = ifi.Index + } + if err := p.SetControlMessage(cf, toggle); err != nil { + t.Error(err) + return + } + n, err := p.WriteTo(data, &cm, dst) + if err != nil { + t.Error(err) + return + } + if n != len(data) { + t.Errorf("got %d; want %d", n, len(data)) + return + } + } + + const N = 10 + wg.Add(N) + for i := 0; i < N; i++ { + go reader() + } + wg.Add(2 * N) + for i := 0; i < 2*N; i++ { + go writer(i%2 != 0) + + } + wg.Add(N) + for i := 0; i < N; i++ { + go reader() + } + wg.Wait() +} diff --git a/vendor/golang.org/x/net/ipv6/readwrite_go1_9_test.go b/vendor/golang.org/x/net/ipv6/readwrite_go1_9_test.go new file mode 100644 index 0000000..e2fd733 --- /dev/null +++ b/vendor/golang.org/x/net/ipv6/readwrite_go1_9_test.go @@ -0,0 +1,373 @@ +// Copyright 2017 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 go1.9 + +package ipv6_test + +import ( + "bytes" + "fmt" + "net" + "runtime" + "strings" + "sync" + "testing" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/nettest" + "golang.org/x/net/ipv6" +) + +func BenchmarkPacketConnReadWriteUnicast(b *testing.B) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + b.Skipf("not supported on %s", runtime.GOOS) + } + + payload := []byte("HELLO-R-U-THERE") + iph := []byte{ + 0x69, 0x8b, 0xee, 0xf1, 0xca, 0xfe, 0xff, 0x01, + 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + } + greh := []byte{0x00, 0x00, 0x86, 0xdd, 0x00, 0x00, 0x00, 0x00} + datagram := append(greh, append(iph, payload...)...) + bb := make([]byte, 128) + cm := ipv6.ControlMessage{ + TrafficClass: iana.DiffServAF11 | iana.CongestionExperienced, + HopLimit: 1, + Src: net.IPv6loopback, + } + if ifi := nettest.RoutedInterface("ip6", net.FlagUp|net.FlagLoopback); ifi != nil { + cm.IfIndex = ifi.Index + } + + b.Run("UDP", func(b *testing.B) { + c, err := nettest.NewLocalPacketListener("udp6") + if err != nil { + b.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err) + } + defer c.Close() + p := ipv6.NewPacketConn(c) + dst := c.LocalAddr() + cf := ipv6.FlagHopLimit | ipv6.FlagInterface + if err := p.SetControlMessage(cf, true); err != nil { + b.Fatal(err) + } + wms := []ipv6.Message{ + { + Buffers: [][]byte{payload}, + Addr: dst, + OOB: cm.Marshal(), + }, + } + rms := []ipv6.Message{ + { + Buffers: [][]byte{bb}, + OOB: ipv6.NewControlMessage(cf), + }, + } + b.Run("Net", func(b *testing.B) { + for i := 0; i < b.N; i++ { + if _, err := c.WriteTo(payload, dst); err != nil { + b.Fatal(err) + } + if _, _, err := c.ReadFrom(bb); err != nil { + b.Fatal(err) + } + } + }) + b.Run("ToFrom", func(b *testing.B) { + for i := 0; i < b.N; i++ { + if _, err := p.WriteTo(payload, &cm, dst); err != nil { + b.Fatal(err) + } + if _, _, _, err := p.ReadFrom(bb); err != nil { + b.Fatal(err) + } + } + }) + b.Run("Batch", func(b *testing.B) { + for i := 0; i < b.N; i++ { + if _, err := p.WriteBatch(wms, 0); err != nil { + b.Fatal(err) + } + if _, err := p.ReadBatch(rms, 0); err != nil { + b.Fatal(err) + } + } + }) + }) + b.Run("IP", func(b *testing.B) { + switch runtime.GOOS { + case "netbsd": + b.Skip("need to configure gre on netbsd") + case "openbsd": + b.Skip("net.inet.gre.allow=0 by default on openbsd") + } + + c, err := net.ListenPacket(fmt.Sprintf("ip6:%d", iana.ProtocolGRE), "::1") + if err != nil { + b.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err) + } + defer c.Close() + p := ipv6.NewPacketConn(c) + dst := c.LocalAddr() + cf := ipv6.FlagTrafficClass | ipv6.FlagHopLimit | ipv6.FlagSrc | ipv6.FlagDst | ipv6.FlagInterface | ipv6.FlagPathMTU + if err := p.SetControlMessage(cf, true); err != nil { + b.Fatal(err) + } + wms := []ipv6.Message{ + { + Buffers: [][]byte{datagram}, + Addr: dst, + OOB: cm.Marshal(), + }, + } + rms := []ipv6.Message{ + { + Buffers: [][]byte{bb}, + OOB: ipv6.NewControlMessage(cf), + }, + } + b.Run("Net", func(b *testing.B) { + for i := 0; i < b.N; i++ { + if _, err := c.WriteTo(datagram, dst); err != nil { + b.Fatal(err) + } + if _, _, err := c.ReadFrom(bb); err != nil { + b.Fatal(err) + } + } + }) + b.Run("ToFrom", func(b *testing.B) { + for i := 0; i < b.N; i++ { + if _, err := p.WriteTo(datagram, &cm, dst); err != nil { + b.Fatal(err) + } + if _, _, _, err := p.ReadFrom(bb); err != nil { + b.Fatal(err) + } + } + }) + b.Run("Batch", func(b *testing.B) { + for i := 0; i < b.N; i++ { + if _, err := p.WriteBatch(wms, 0); err != nil { + b.Fatal(err) + } + if _, err := p.ReadBatch(rms, 0); err != nil { + b.Fatal(err) + } + } + }) + }) +} + +func TestPacketConnConcurrentReadWriteUnicast(t *testing.T) { + switch runtime.GOOS { + case "nacl", "plan9", "windows": + t.Skipf("not supported on %s", runtime.GOOS) + } + + payload := []byte("HELLO-R-U-THERE") + iph := []byte{ + 0x69, 0x8b, 0xee, 0xf1, 0xca, 0xfe, 0xff, 0x01, + 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + } + greh := []byte{0x00, 0x00, 0x86, 0xdd, 0x00, 0x00, 0x00, 0x00} + datagram := append(greh, append(iph, payload...)...) + + t.Run("UDP", func(t *testing.T) { + c, err := nettest.NewLocalPacketListener("udp6") + if err != nil { + t.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err) + } + defer c.Close() + p := ipv6.NewPacketConn(c) + t.Run("ToFrom", func(t *testing.T) { + testPacketConnConcurrentReadWriteUnicast(t, p, payload, c.LocalAddr(), false) + }) + t.Run("Batch", func(t *testing.T) { + testPacketConnConcurrentReadWriteUnicast(t, p, payload, c.LocalAddr(), true) + }) + }) + t.Run("IP", func(t *testing.T) { + switch runtime.GOOS { + case "netbsd": + t.Skip("need to configure gre on netbsd") + case "openbsd": + t.Skip("net.inet.gre.allow=0 by default on openbsd") + } + + c, err := net.ListenPacket(fmt.Sprintf("ip6:%d", iana.ProtocolGRE), "::1") + if err != nil { + t.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err) + } + defer c.Close() + p := ipv6.NewPacketConn(c) + t.Run("ToFrom", func(t *testing.T) { + testPacketConnConcurrentReadWriteUnicast(t, p, datagram, c.LocalAddr(), false) + }) + t.Run("Batch", func(t *testing.T) { + testPacketConnConcurrentReadWriteUnicast(t, p, datagram, c.LocalAddr(), true) + }) + }) +} + +func testPacketConnConcurrentReadWriteUnicast(t *testing.T, p *ipv6.PacketConn, data []byte, dst net.Addr, batch bool) { + ifi := nettest.RoutedInterface("ip6", net.FlagUp|net.FlagLoopback) + cf := ipv6.FlagTrafficClass | ipv6.FlagHopLimit | ipv6.FlagSrc | ipv6.FlagDst | ipv6.FlagInterface | ipv6.FlagPathMTU + + if err := p.SetControlMessage(cf, true); err != nil { // probe before test + if nettest.ProtocolNotSupported(err) { + t.Skipf("not supported on %s", runtime.GOOS) + } + t.Fatal(err) + } + + var wg sync.WaitGroup + reader := func() { + defer wg.Done() + b := make([]byte, 128) + n, cm, _, err := p.ReadFrom(b) + if err != nil { + t.Error(err) + return + } + if !bytes.Equal(b[:n], data) { + t.Errorf("got %#v; want %#v", b[:n], data) + return + } + s := cm.String() + if strings.Contains(s, ",") { + t.Errorf("should be space-separated values: %s", s) + return + } + } + batchReader := func() { + defer wg.Done() + ms := []ipv6.Message{ + { + Buffers: [][]byte{make([]byte, 128)}, + OOB: ipv6.NewControlMessage(cf), + }, + } + n, err := p.ReadBatch(ms, 0) + if err != nil { + t.Error(err) + return + } + if n != len(ms) { + t.Errorf("got %d; want %d", n, len(ms)) + return + } + var cm ipv6.ControlMessage + if err := cm.Parse(ms[0].OOB[:ms[0].NN]); err != nil { + t.Error(err) + return + } + b := ms[0].Buffers[0][:ms[0].N] + if !bytes.Equal(b, data) { + t.Errorf("got %#v; want %#v", b, data) + return + } + s := cm.String() + if strings.Contains(s, ",") { + t.Errorf("should be space-separated values: %s", s) + return + } + } + writer := func(toggle bool) { + defer wg.Done() + cm := ipv6.ControlMessage{ + TrafficClass: iana.DiffServAF11 | iana.CongestionExperienced, + HopLimit: 1, + Src: net.IPv6loopback, + } + if ifi != nil { + cm.IfIndex = ifi.Index + } + if err := p.SetControlMessage(cf, toggle); err != nil { + t.Error(err) + return + } + n, err := p.WriteTo(data, &cm, dst) + if err != nil { + t.Error(err) + return + } + if n != len(data) { + t.Errorf("got %d; want %d", n, len(data)) + return + } + } + batchWriter := func(toggle bool) { + defer wg.Done() + cm := ipv6.ControlMessage{ + TrafficClass: iana.DiffServAF11 | iana.CongestionExperienced, + HopLimit: 1, + Src: net.IPv6loopback, + } + if ifi != nil { + cm.IfIndex = ifi.Index + } + if err := p.SetControlMessage(cf, toggle); err != nil { + t.Error(err) + return + } + ms := []ipv6.Message{ + { + Buffers: [][]byte{data}, + OOB: cm.Marshal(), + Addr: dst, + }, + } + n, err := p.WriteBatch(ms, 0) + if err != nil { + t.Error(err) + return + } + if n != len(ms) { + t.Errorf("got %d; want %d", n, len(ms)) + return + } + if ms[0].N != len(data) { + t.Errorf("got %d; want %d", ms[0].N, len(data)) + return + } + } + + const N = 10 + wg.Add(N) + for i := 0; i < N; i++ { + if batch { + go batchReader() + } else { + go reader() + } + } + wg.Add(2 * N) + for i := 0; i < 2*N; i++ { + if batch { + go batchWriter(i%2 != 0) + } else { + go writer(i%2 != 0) + } + } + wg.Add(N) + for i := 0; i < N; i++ { + if batch { + go batchReader() + } else { + go reader() + } + } + wg.Wait() +} diff --git a/vendor/golang.org/x/net/ipv6/readwrite_test.go b/vendor/golang.org/x/net/ipv6/readwrite_test.go index 41f59be..206b915 100644 --- a/vendor/golang.org/x/net/ipv6/readwrite_test.go +++ b/vendor/golang.org/x/net/ipv6/readwrite_test.go @@ -17,87 +17,50 @@ import ( "golang.org/x/net/ipv6" ) -func benchmarkUDPListener() (net.PacketConn, net.Addr, error) { - c, err := net.ListenPacket("udp6", "[::1]:0") +func BenchmarkReadWriteUnicast(b *testing.B) { + c, err := nettest.NewLocalPacketListener("udp6") if err != nil { - return nil, nil, err - } - dst, err := net.ResolveUDPAddr("udp6", c.LocalAddr().String()) - if err != nil { - c.Close() - return nil, nil, err - } - return c, dst, nil -} - -func BenchmarkReadWriteNetUDP(b *testing.B) { - if !supportsIPv6 { - b.Skip("ipv6 is not supported") - } - - c, dst, err := benchmarkUDPListener() - if err != nil { - b.Fatal(err) + b.Skipf("not supported on %s/%s: %v", runtime.GOOS, runtime.GOARCH, err) } defer c.Close() + dst := c.LocalAddr() wb, rb := []byte("HELLO-R-U-THERE"), make([]byte, 128) - b.ResetTimer() - for i := 0; i < b.N; i++ { - benchmarkReadWriteNetUDP(b, c, wb, rb, dst) - } -} - -func benchmarkReadWriteNetUDP(b *testing.B, c net.PacketConn, wb, rb []byte, dst net.Addr) { - if _, err := c.WriteTo(wb, dst); err != nil { - b.Fatal(err) - } - if _, _, err := c.ReadFrom(rb); err != nil { - b.Fatal(err) - } -} -func BenchmarkReadWriteIPv6UDP(b *testing.B) { - if !supportsIPv6 { - b.Skip("ipv6 is not supported") - } - - c, dst, err := benchmarkUDPListener() - if err != nil { - b.Fatal(err) - } - defer c.Close() - - p := ipv6.NewPacketConn(c) - cf := ipv6.FlagTrafficClass | ipv6.FlagHopLimit | ipv6.FlagSrc | ipv6.FlagDst | ipv6.FlagInterface | ipv6.FlagPathMTU - if err := p.SetControlMessage(cf, true); err != nil { - b.Fatal(err) - } - ifi := nettest.RoutedInterface("ip6", net.FlagUp|net.FlagLoopback) - - wb, rb := []byte("HELLO-R-U-THERE"), make([]byte, 128) - b.ResetTimer() - for i := 0; i < b.N; i++ { - benchmarkReadWriteIPv6UDP(b, p, wb, rb, dst, ifi) - } -} + b.Run("NetUDP", func(b *testing.B) { + for i := 0; i < b.N; i++ { + if _, err := c.WriteTo(wb, dst); err != nil { + b.Fatal(err) + } + if _, _, err := c.ReadFrom(rb); err != nil { + b.Fatal(err) + } + } + }) + b.Run("IPv6UDP", func(b *testing.B) { + p := ipv6.NewPacketConn(c) + cf := ipv6.FlagTrafficClass | ipv6.FlagHopLimit | ipv6.FlagSrc | ipv6.FlagDst | ipv6.FlagInterface | ipv6.FlagPathMTU + if err := p.SetControlMessage(cf, true); err != nil { + b.Fatal(err) + } + cm := ipv6.ControlMessage{ + TrafficClass: iana.DiffServAF11 | iana.CongestionExperienced, + HopLimit: 1, + } + ifi := nettest.RoutedInterface("ip6", net.FlagUp|net.FlagLoopback) + if ifi != nil { + cm.IfIndex = ifi.Index + } -func benchmarkReadWriteIPv6UDP(b *testing.B, p *ipv6.PacketConn, wb, rb []byte, dst net.Addr, ifi *net.Interface) { - cm := ipv6.ControlMessage{ - TrafficClass: iana.DiffServAF11 | iana.CongestionExperienced, - HopLimit: 1, - } - if ifi != nil { - cm.IfIndex = ifi.Index - } - if n, err := p.WriteTo(wb, &cm, dst); err != nil { - b.Fatal(err) - } else if n != len(wb) { - b.Fatalf("got %v; want %v", n, len(wb)) - } - if _, _, _, err := p.ReadFrom(rb); err != nil { - b.Fatal(err) - } + for i := 0; i < b.N; i++ { + if _, err := p.WriteTo(wb, &cm, dst); err != nil { + b.Fatal(err) + } + if _, _, _, err := p.ReadFrom(rb); err != nil { + b.Fatal(err) + } + } + }) } func TestPacketConnConcurrentReadWriteUnicastUDP(t *testing.T) { @@ -109,7 +72,7 @@ func TestPacketConnConcurrentReadWriteUnicastUDP(t *testing.T) { t.Skip("ipv6 is not supported") } - c, err := net.ListenPacket("udp6", "[::1]:0") + c, err := nettest.NewLocalPacketListener("udp6") if err != nil { t.Fatal(err) } @@ -117,11 +80,7 @@ func TestPacketConnConcurrentReadWriteUnicastUDP(t *testing.T) { p := ipv6.NewPacketConn(c) defer p.Close() - dst, err := net.ResolveUDPAddr("udp6", c.LocalAddr().String()) - if err != nil { - t.Fatal(err) - } - + dst := c.LocalAddr() ifi := nettest.RoutedInterface("ip6", net.FlagUp|net.FlagLoopback) cf := ipv6.FlagTrafficClass | ipv6.FlagHopLimit | ipv6.FlagSrc | ipv6.FlagDst | ipv6.FlagInterface | ipv6.FlagPathMTU wb := []byte("HELLO-R-U-THERE") @@ -167,7 +126,7 @@ func TestPacketConnConcurrentReadWriteUnicastUDP(t *testing.T) { t.Error(err) return } else if n != len(wb) { - t.Errorf("got %v; want %v", n, len(wb)) + t.Errorf("got %d; want %d", n, len(wb)) return } } diff --git a/vendor/golang.org/x/net/ipv6/unicast_test.go b/vendor/golang.org/x/net/ipv6/unicast_test.go index 406d071..a0b7d95 100644 --- a/vendor/golang.org/x/net/ipv6/unicast_test.go +++ b/vendor/golang.org/x/net/ipv6/unicast_test.go @@ -27,7 +27,7 @@ func TestPacketConnReadWriteUnicastUDP(t *testing.T) { t.Skip("ipv6 is not supported") } - c, err := net.ListenPacket("udp6", "[::1]:0") + c, err := nettest.NewLocalPacketListener("udp6") if err != nil { t.Fatal(err) } @@ -35,11 +35,7 @@ func TestPacketConnReadWriteUnicastUDP(t *testing.T) { p := ipv6.NewPacketConn(c) defer p.Close() - dst, err := net.ResolveUDPAddr("udp6", c.LocalAddr().String()) - if err != nil { - t.Fatal(err) - } - + dst := c.LocalAddr() cm := ipv6.ControlMessage{ TrafficClass: iana.DiffServAF11 | iana.CongestionExperienced, Src: net.IPv6loopback, @@ -54,7 +50,8 @@ func TestPacketConnReadWriteUnicastUDP(t *testing.T) { for i, toggle := range []bool{true, false, true} { if err := p.SetControlMessage(cf, toggle); err != nil { if nettest.ProtocolNotSupported(err) { - t.Skipf("not supported on %s", runtime.GOOS) + t.Logf("not supported on %s", runtime.GOOS) + continue } t.Fatal(err) } @@ -151,7 +148,8 @@ func TestPacketConnReadWriteUnicastICMP(t *testing.T) { } if err := p.SetControlMessage(cf, toggle); err != nil { if nettest.ProtocolNotSupported(err) { - t.Skipf("not supported on %s", runtime.GOOS) + t.Logf("not supported on %s", runtime.GOOS) + continue } t.Fatal(err) } diff --git a/vendor/golang.org/x/net/proxy/per_host.go b/vendor/golang.org/x/net/proxy/per_host.go index f540b19..0689bb6 100644 --- a/vendor/golang.org/x/net/proxy/per_host.go +++ b/vendor/golang.org/x/net/proxy/per_host.go @@ -9,7 +9,7 @@ import ( "strings" ) -// A PerHost directs connections to a default Dialer unless the hostname +// A PerHost directs connections to a default Dialer unless the host name // requested matches one of a number of exceptions. type PerHost struct { def, bypass Dialer @@ -61,7 +61,7 @@ func (p *PerHost) dialerForRequest(host string) Dialer { return p.bypass } if host == zone[1:] { - // For a zone "example.com", we match "example.com" + // For a zone ".example.com", we match "example.com" // too. return p.bypass } @@ -76,7 +76,7 @@ func (p *PerHost) dialerForRequest(host string) Dialer { // AddFromString parses a string that contains comma-separated values // specifying hosts that should use the bypass proxy. Each value is either an -// IP address, a CIDR range, a zone (*.example.com) or a hostname +// IP address, a CIDR range, a zone (*.example.com) or a host name // (localhost). A best effort is made to parse the string and errors are // ignored. func (p *PerHost) AddFromString(s string) { @@ -131,7 +131,7 @@ func (p *PerHost) AddZone(zone string) { p.bypassZones = append(p.bypassZones, zone) } -// AddHost specifies a hostname that will use the bypass proxy. +// AddHost specifies a host name that will use the bypass proxy. func (p *PerHost) AddHost(host string) { if strings.HasSuffix(host, ".") { host = host[:len(host)-1] diff --git a/vendor/golang.org/x/net/proxy/proxy.go b/vendor/golang.org/x/net/proxy/proxy.go index 78a8b7b..553ead7 100644 --- a/vendor/golang.org/x/net/proxy/proxy.go +++ b/vendor/golang.org/x/net/proxy/proxy.go @@ -11,6 +11,7 @@ import ( "net" "net/url" "os" + "sync" ) // A Dialer is a means to establish a connection. @@ -27,7 +28,7 @@ type Auth struct { // FromEnvironment returns the dialer specified by the proxy related variables in // the environment. func FromEnvironment() Dialer { - allProxy := os.Getenv("all_proxy") + allProxy := allProxyEnv.Get() if len(allProxy) == 0 { return Direct } @@ -41,7 +42,7 @@ func FromEnvironment() Dialer { return Direct } - noProxy := os.Getenv("no_proxy") + noProxy := noProxyEnv.Get() if len(noProxy) == 0 { return proxy } @@ -92,3 +93,42 @@ func FromURL(u *url.URL, forward Dialer) (Dialer, error) { return nil, errors.New("proxy: unknown scheme: " + u.Scheme) } + +var ( + allProxyEnv = &envOnce{ + names: []string{"ALL_PROXY", "all_proxy"}, + } + noProxyEnv = &envOnce{ + names: []string{"NO_PROXY", "no_proxy"}, + } +) + +// envOnce looks up an environment variable (optionally by multiple +// names) once. It mitigates expensive lookups on some platforms +// (e.g. Windows). +// (Borrowed from net/http/transport.go) +type envOnce struct { + names []string + once sync.Once + val string +} + +func (e *envOnce) Get() string { + e.once.Do(e.init) + return e.val +} + +func (e *envOnce) init() { + for _, n := range e.names { + e.val = os.Getenv(n) + if e.val != "" { + return + } + } +} + +// reset is used by tests +func (e *envOnce) reset() { + e.once = sync.Once{} + e.val = "" +} diff --git a/vendor/golang.org/x/net/proxy/proxy_test.go b/vendor/golang.org/x/net/proxy/proxy_test.go index c19a5c0..0f31e21 100644 --- a/vendor/golang.org/x/net/proxy/proxy_test.go +++ b/vendor/golang.org/x/net/proxy/proxy_test.go @@ -5,14 +5,73 @@ package proxy import ( + "bytes" + "fmt" "io" "net" "net/url" + "os" "strconv" + "strings" "sync" "testing" ) +type proxyFromEnvTest struct { + allProxyEnv string + noProxyEnv string + wantTypeOf Dialer +} + +func (t proxyFromEnvTest) String() string { + var buf bytes.Buffer + space := func() { + if buf.Len() > 0 { + buf.WriteByte(' ') + } + } + if t.allProxyEnv != "" { + fmt.Fprintf(&buf, "all_proxy=%q", t.allProxyEnv) + } + if t.noProxyEnv != "" { + space() + fmt.Fprintf(&buf, "no_proxy=%q", t.noProxyEnv) + } + return strings.TrimSpace(buf.String()) +} + +func TestFromEnvironment(t *testing.T) { + ResetProxyEnv() + + type dummyDialer struct { + direct + } + + RegisterDialerType("irc", func(_ *url.URL, _ Dialer) (Dialer, error) { + return dummyDialer{}, nil + }) + + proxyFromEnvTests := []proxyFromEnvTest{ + {allProxyEnv: "127.0.0.1:8080", noProxyEnv: "localhost, 127.0.0.1", wantTypeOf: direct{}}, + {allProxyEnv: "ftp://example.com:8000", noProxyEnv: "localhost, 127.0.0.1", wantTypeOf: direct{}}, + {allProxyEnv: "socks5://example.com:8080", noProxyEnv: "localhost, 127.0.0.1", wantTypeOf: &PerHost{}}, + {allProxyEnv: "irc://example.com:8000", wantTypeOf: dummyDialer{}}, + {noProxyEnv: "localhost, 127.0.0.1", wantTypeOf: direct{}}, + {wantTypeOf: direct{}}, + } + + for _, tt := range proxyFromEnvTests { + os.Setenv("ALL_PROXY", tt.allProxyEnv) + os.Setenv("NO_PROXY", tt.noProxyEnv) + ResetCachedEnvironment() + + d := FromEnvironment() + if got, want := fmt.Sprintf("%T", d), fmt.Sprintf("%T", tt.wantTypeOf); got != want { + t.Errorf("%v: got type = %T, want %T", tt, d, tt.wantTypeOf) + } + } +} + func TestFromURL(t *testing.T) { endSystem, err := net.Listen("tcp", "127.0.0.1:0") if err != nil { @@ -140,3 +199,17 @@ func socks5Gateway(t *testing.T, gateway, endSystem net.Listener, typ byte, wg * return } } + +func ResetProxyEnv() { + for _, env := range []*envOnce{allProxyEnv, noProxyEnv} { + for _, v := range env.names { + os.Setenv(v, "") + } + } + ResetCachedEnvironment() +} + +func ResetCachedEnvironment() { + allProxyEnv.reset() + noProxyEnv.reset() +} diff --git a/vendor/golang.org/x/net/proxy/socks5.go b/vendor/golang.org/x/net/proxy/socks5.go index 973f57f..3fed38e 100644 --- a/vendor/golang.org/x/net/proxy/socks5.go +++ b/vendor/golang.org/x/net/proxy/socks5.go @@ -12,7 +12,7 @@ import ( ) // SOCKS5 returns a Dialer that makes SOCKSv5 connections to the given address -// with an optional username and password. See RFC 1928. +// with an optional username and password. See RFC 1928 and RFC 1929. func SOCKS5(network, addr string, auth *Auth, forward Dialer) (Dialer, error) { s := &socks5{ network: network, @@ -60,7 +60,7 @@ var socks5Errors = []string{ "address type not supported", } -// Dial connects to the address addr on the network net via the SOCKS5 proxy. +// Dial connects to the address addr on the given network via the SOCKS5 proxy. func (s *socks5) Dial(network, addr string) (net.Conn, error) { switch network { case "tcp", "tcp6", "tcp4": @@ -120,6 +120,7 @@ func (s *socks5) connect(conn net.Conn, target string) error { return errors.New("proxy: SOCKS5 proxy at " + s.addr + " requires authentication") } + // See RFC 1929 if buf[1] == socks5AuthPassword { buf = buf[:0] buf = append(buf, 1 /* password protocol version */) @@ -154,7 +155,7 @@ func (s *socks5) connect(conn net.Conn, target string) error { buf = append(buf, ip...) } else { if len(host) > 255 { - return errors.New("proxy: destination hostname too long: " + host) + return errors.New("proxy: destination host name too long: " + host) } buf = append(buf, socks5Domain) buf = append(buf, byte(len(host))) diff --git a/vendor/golang.org/x/net/publicsuffix/gen.go b/vendor/golang.org/x/net/publicsuffix/gen.go index a2d4995..f85a3c3 100644 --- a/vendor/golang.org/x/net/publicsuffix/gen.go +++ b/vendor/golang.org/x/net/publicsuffix/gen.go @@ -37,7 +37,7 @@ import ( const ( // These sum of these four values must be no greater than 32. - nodesBitsChildren = 9 + nodesBitsChildren = 10 nodesBitsICANN = 1 nodesBitsTextOffset = 15 nodesBitsTextLength = 6 diff --git a/vendor/golang.org/x/net/publicsuffix/list_test.go b/vendor/golang.org/x/net/publicsuffix/list_test.go index a08e64e..42d79cc 100644 --- a/vendor/golang.org/x/net/publicsuffix/list_test.go +++ b/vendor/golang.org/x/net/publicsuffix/list_test.go @@ -216,13 +216,13 @@ var publicSuffixTestCases = []struct { {"aaa.xn--p1ai", "xn--p1ai"}, {"www.xxx.yyy.xn--p1ai", "xn--p1ai"}, - // The .zw rules are: - // *.zw - {"zw", "zw"}, - {"www.zw", "www.zw"}, - {"zzz.zw", "zzz.zw"}, - {"www.zzz.zw", "zzz.zw"}, - {"www.xxx.yyy.zzz.zw", "zzz.zw"}, + // The .bd rules are: + // *.bd + {"bd", "bd"}, + {"www.bd", "www.bd"}, + {"zzz.bd", "zzz.bd"}, + {"www.zzz.bd", "zzz.bd"}, + {"www.xxx.yyy.zzz.bd", "zzz.bd"}, // There are no .nosuchtld rules. {"nosuchtld", "nosuchtld"}, diff --git a/vendor/golang.org/x/net/publicsuffix/table.go b/vendor/golang.org/x/net/publicsuffix/table.go index 5db1e69..a870b36 100644 --- a/vendor/golang.org/x/net/publicsuffix/table.go +++ b/vendor/golang.org/x/net/publicsuffix/table.go @@ -2,10 +2,10 @@ package publicsuffix -const version = "publicsuffix.org's public_suffix_list.dat, git revision 45a2bf8ef3e22000fbe4bfa5f9252db41d777001 (2017-01-18T01:04:06Z)" +const version = "publicsuffix.org's public_suffix_list.dat, git revision 0f3b07d9aab6d6c9fe74990af98316468d40f488 (2018-01-25T09:22:16Z)" const ( - nodesBitsChildren = 9 + nodesBitsChildren = 10 nodesBitsICANN = 1 nodesBitsTextOffset = 15 nodesBitsTextLength = 6 @@ -23,447 +23,464 @@ const ( ) // numTLD is the number of top level domains. -const numTLD = 1554 +const numTLD = 1551 // Text is the combined text of all labels. -const text = "bikedagestangeorgeorgiaxagrocerybnikahokutobishimaizuruhreportar" + - "nobrzegyptianaturalhistorymuseumcentereviewskrakoweddinggfarmers" + - "einexus-2bilbaogakievenesalangenikiiyamanouchikuhokuryugasakitau" + - "rayasudabillustrationikkoebenhavnikolaevennodessagamiharabiomuta" + - "shinainfinitintuitattoolsztynsettlersalondonetskarpaczeladzjcbre" + - "mangerbirdartcenterprisesakikuchikuseikarugapartmentsaltdalimoli" + - "serniabirkenesoddtangenovaravennagasukeverbankaruizawabirthplace" + - "vje-og-hornnesalvadordalibabajddarchaeologyusuisserveexchangebja" + - "rkoyuufcfanikonantanangerbjerkreimbalsanagochihayaakasakawaharau" + - "malopolskanlandds3-us-west-1bjugninohekinannestadrangedalindasda" + - "burblockbusternidray-dnsupdaterbloombergbauerninomiyakonojosoyro" + - "rosalzburgjovikarumaifarmsteadraydnsamegawabloxcmsamnangerblueda" + - "ncebmoattachmentsamsclubindalindesnesamsungladell-ogliastraderbm" + - "sandvikcoromantovalle-d-aostatic-accessanfranciscofreakunemurora" + - "ngeiseiyoichiropracticasinordre-landrivelandrobaknoluoktabuseekl" + - "ogesurancertmgretachikawakkanaibetsubamericanfamilydscloudcontro" + - "lledekafjordrudunsangoppdalivornobmweirbnpparibaselburglassassin" + - "ationalheritagematsubarakawagoebnrwfarsundupontariobonnirasakinu" + - "yamashinashikitchenishiazainvestmentsanjournalismailillesandefjo" + - "rdurbanamexhibitionishigobookingliwicebootsannanishiharaboschaef" + - "flerdalomzaporizhzhegurinzais-a-bulls-fanishiizunazukis-a-candid" + - "atebostikasaokamiminersannohelplfinancialorenskoglobalashovhachi" + - "nohedmarkashibatakasakiyokawarabostonakijinsekikogentinglobodoes" + - "-itvedestrandurhamburglogowhalingloppenzaogashimadachicagoboatsa" + - "nokashiharabotanicalgardenishikatakayamatta-varjjataxihuanishika" + - "tsuragithubusercontentgoryuzawabotanicgardenishikawazukamitondab" + - "ayashiogamagoriziabotanybouncemerckmsdnipropetrovskjakdnepropetr" + - "ovskiervaapsteiermarkashiwarabounty-fullensakerrypropertiesantab" + - "arbaraboutiquebecngmbhartiffanybozentsujiiebradescorporationishi" + - "merabrandywinevalleybrasiliabresciabrindisibenikebristoloslocalh" + - "istoryggeelvinckashiwazakiyosatokashikiyosemitebritishcolumbialo" + - "wiezachpomorskienishinomiyashironobroadcastlefrakkestadvrcambrid" + - "gestonextdirectjeldsundvrdnsantacruzsantafedextraspacekitagataji" + - "rittogoldpoint2thisamitsukebroadwaybroke-itjmaxxxboxenapponazure" + - "-mobilebrokerbronnoysundwgminakamichiharabrothermesaverdeatnurem" + - "bergmodellingmxfinitybrowsersafetymarketsanukis-a-catererbrumund" + - "dalotenkawabrunelasticbeanstalkasukabedzin-the-bandaikawachinaga" + - "noharamcoalaskanittedallasalleasinglest-mon-blogueurovisionthewi" + - "fiat-band-campaniabrusselsaotomemergencyberlevagangaviikanonjis-" + - "a-celticsfanishinoomotegobruxellesapodlasiellakasamatsudovre-eik" + - "erbryanskjervoyagebrynewhampshirebungoonordlandyndns-at-workingg" + - "roupalacebuskerudinewjerseybuzenishinoshimattelefonicarbonia-igl" + - "esias-carboniaiglesiascarboniabuzzlgrimstadyndns-blogdnsapporobw" + - "hoswhokksundyndns-freebox-ostrowiecateringebuilderschmidtre-gaul" + - "dalottebzhitomirumalselvendrellottokonamegatakasugais-a-chefashi" + - "onishiokoppegardyndns-homednsardegnamsskoganeis-a-conservativefs" + - "nillfjordyndns-ipaleocondoshichinohealth-carereformitakeharaconf" + - "erenceconstructionconsuladoesntexistanbullensvanguardyndns-wikin" + - "dlegokasells-for-lessaudaconsultanthropologyconsultingvolluxuryc" + - "ontactoyookanmakiwakunigamifunecontemporaryarteducationalchikugo" + - "doharuovatoyosatoyakokonoecontractorskenconventureshinodesashibe" + - "tsuikinderoycookingchannelblagdenesnaaseralingenkainanaejrietisa" + - "latinabenonichernihivanovodkagoshimalvikasumigaurawa-mazowszexjc" + - "palermomahachijorpelandyndns-mailouvreisenishitosashimizunaminam" + - "iashigaracoolkuszkoladbrokesauheradyndns-workisboringrpamperedch" + - "efastlylbaltimore-og-romsdalwaysdatabaseballangenoamishirasatoch" + - "igiessenebakkeshibechambagriculturennebudejjudygarlandigitalavan" + - "genavigationavuotnaklodzkodairamusementarumizusawabruzzoologyeon" + - "gbuk12cooperaunitemasekatsushikabeeldengeluidyndns1copenhagencyc" + - "lopedichernivtsiciliacorsicagliarightathomeftpanamacorvettenriku" + - "zentakataitogliattiresavannahgacosenzaganquannakadomaritimekeepi" + - "ngatlantaijis-a-financialadvisor-aurdaluzerncosidnsfor-better-th" + - "anawawildlifedjeffersoncostumedio-campidano-mediocampidanomedioc" + - "ouchpotatofriesaves-the-whalessandria-trani-barletta-andriatrani" + - "barlettaandriacouncilvivano-frankivskatsuyamasfjordencouponsavon" + - "aplesaxocoursesbschokoladencq-acranbrookuwanalyticscholarshipsch" + - "oolcreditcardynnschulezajskydivingruecreditunioncremonashorokana" + - "iecrewilliamhillcricketrzyncrimeastcoastaldefencecrotonewyorkshi" + - "recipesaro-urbino-pesarourbinopesaromasvuotnaharimamurogawacrown" + - "providercrsvpanasonichernovtsykkylvenetogakushimotoganewportllig" + - "atjxn--0trq7p7nnishiwakis-a-cpadoval-daostavalleycruiseschwarzgw" + - "angjuegoshikiminokamoenairtraffichiryukyuragifuchungbukasuyaltak" + - "ashimaseratis-a-cubicle-slavellinowtvalleaostatoilowiczest-le-pa" + - "trondheimmobilienissandnessjoenissayokoshibahikariwanumatakazaki" + - "s-a-democratkmaxxn--11b4c3dyndns-office-on-the-webcampobassociat" + - "esardiniacryptonomichigangwoncuisinellahppiacenzakopanerairguard" + - "ynv6culturalcentertainmentoyotaris-a-geekgalaxycuneocupcakecxn--" + - "1ctwolominamatakkokaminokawanishiaizubangecymrussiacyonabarulsan" + - "doycyouthdfcbankaufenfiguerestaurantoyotomiyazakis-a-greenfilate" + - "liafilminamiawajikis-a-guruslivinghistoryfinalfinancefineartscie" + - "ntistoragefinlandfinnoyfirebaseapparliamentoyotsukaidownloadfire" + - "nzefirestonefirmdaleirfjordfishingolffanscjohnsonfitjarqhachioji" + - "yahikobeatscotlandfitnessettlementoyourafjalerflesbergushikamifu" + - "ranoshiroomuraflickragerotikakamigaharaflightscrapper-siteflirfl" + - "ogintogurafloraflorencefloridavvesiidazaifudaigojomedizinhistori" + - "schescrappingxn--1lqs71dfloristanohatakahamaniwakuratexascolipic" + - "enord-aurdalipayflorogerserveftparmaflowerservegame-serversaille" + - "servehalflifestyleflynnhubambleclercartoonartdecoldwarmiamibugat" + - "tipschlesisches3-us-west-2fndfoodnetworkshoppingfor-ourfor-somee" + - "thnologyfor-theaterforexrothruherecreationforgotdnservehttparoch" + - "erkasyno-dservehumourforli-cesena-forlicesenaforlikescandynamic-" + - "dnserveirchitachinakagawatchandclockaszubyforsaleirvikazoforsand" + - "asuoloftoystre-slidrettozawafortmissoulair-traffic-controlleyfor" + - "tworthachirogatakahatakaishimogosenforuminamibosogndalfosneserve" + - "minecraftozsdev-myqnapcloudcontrolappspotagerfotaruis-a-hard-wor" + - "kerfoxfordedyn-ip24freeboxoservemp3utilitiesquarezzoologicalvink" + - "lein-addrammenuernbergdyniabogadocscbnl-o-g-i-nativeamericananti" + - "ques3-ap-northeast-1kappchizippodhaleangaviikadenadexeterepbodyn" + - "athomebuilt3l3p0rtargets-itargiving12000emmafanconagawakayamadri" + - "dvagsoyericssonyoursidealerimo-i-ranaamesjevuemielno-ip6freemaso" + - "nryfreiburgfreightcminamidaitomangotsukisosakitagawafreseniuscou" + - "ntryestateofdelawaredstonefribourgfriuli-v-giuliafriuli-ve-giuli" + - "afriuli-vegiuliafriuli-venezia-giuliafriuli-veneziagiuliafriuli-" + - "vgiuliafriuliv-giuliafriulive-giuliafriulivegiuliafriulivenezia-" + - "giuliafriuliveneziagiuliafriulivgiuliafrlfroganservep2parservepi" + - "cservequakefrognfrolandfrom-akrehamnfrom-alfrom-arfrom-azwinbana" + - "narepublicasadelamonedatsunanjoburgjerstadotsuruokakegawasnesodd" + - "enmarkhangelskiptveterinairealtychyattorneyagawalmartatamotors3-" + - "ap-south-1from-capebretonamiastapleservesarcasmatartanddesignfro" + - "m-collectionfrom-ctrani-andria-barletta-trani-andriafrom-dchitos" + - "etogitsuldalucaniafrom-defenseljordfrom-flanderservicesettsurgeo" + - "nshalloffamemorialfrom-gausdalfrom-higashiagatsumagoizumizakiraf" + - "rom-iafrom-idfrom-ilfrom-incheonfrom-ksevastopolefrom-kyowariasa" + - "hikawafrom-lajollamericanexpressexyfrom-mannortonsbergfrom-mdfro" + - "m-megurokunohealthcareersevenassisicilyfrom-midoris-a-hunterfrom" + - "-mnfrom-mochizukirkenesewindmillfrom-msfranziskanerdpolicefrom-m" + - "tnfrom-nchloefrom-ndfrom-nefrom-nhktraniandriabarlettatraniandri" + - "afrom-njelenia-gorafrom-nminamiechizenfrom-nvalled-aostavangerfr" + - "om-nyfrom-ohkurafrom-oketohmansionshangrilanciafrom-orfrom-pader" + - "bornfrom-pratohnoshoooshikamaishimodatextileitungsenfrom-ris-a-k" + - "nightpointtokaizukameokameyamatotakadafrom-schoenbrunnfrom-sdfro" + - "m-tnfrom-txn--1qqw23afrom-utazuerichardlillehammerfeste-ipartis-" + - "a-landscaperfrom-vaksdalfrom-vtranoyfrom-wafrom-wielunnerfrom-wv" + - "alledaostavernfrom-wyfrosinonefrostalowa-wolawafroyahababyglandf" + - "stcgroupartnersharis-a-lawyerfujiiderafujikawaguchikonefujiminoh" + - "tawaramotoineppubolognakanotoddenfujinomiyadafujiokayamanxn--2m4" + - "a15efujisatoshonairportland-4-salernoboribetsucksharpartshawaiij" + - "imarugame-hostrodawarafujisawafujishiroishidakabiratoridegreefuj" + - "itsurugashimamateramodalenfujixeroxn--30rr7yfujiyoshidafukayabea" + - "rdubaiduckdnshellaspeziafukuchiyamadafukudominichocolatelevision" + - "issedaluccapitalonewmexicoffeedbackplaneapplinzis-a-designerimar" + - "umorimachidafukuis-a-liberalfukumitsubishigakirovogradoyfukuokaz" + - "akiryuohadanotaireshimojis-a-libertarianfukuroishikarikaturindal" + - "fukusakisarazurewebsiteshikagamiishibukawafukuyamagatakaharustka" + - "noyakagefunabashiriuchinadafunagatakahashimamakishiwadafunahashi" + - "kamiamakusatsumasendaisennangonohejis-a-linux-useranishiaritabas" + - "hijonawatefundaciofuoiskujukuriyamaoris-a-llamarylandfuosskoczow" + - "indowshimokawafurnituredumbrellanbibaidarfurubiraquarelleborkang" + - "erfurudonostiaarpartyfurukawairtelecityeatshimokitayamafusodegau" + - "rafussaikisofukushimapasadenamsosnowiechofunatorientexpressarluc" + - "ernefutabayamaguchinomigawafutboldlygoingnowhere-for-moregontrai" + - "lroadfuttsurugimperiafuturehostingfuturemailingfvgfyis-a-musicia" + - "nfylkesbiblackfridayfyresdalhangglidinghangoutsystemscloudfrontd" + - "oorhannanmokuizumodenakasatsunais-a-painteractivegarsheis-a-pats" + - "fanhannotteroyhanyuzenhapmirhareidsbergenharstadharvestcelebrati" + - "onhasamarnardalhasaminami-alpssells-itransportransurlhashbanghas" + - "udahasura-appassenger-associationhasvikazunohatogayahoohatoyamaz" + - "akitahiroshimarriottrapaniimimatakatoris-a-personaltrainerhatsuk" + - "aichikaiseis-a-photographerokuappaviancargodaddynaliascoli-picen" + - "oipirangamvikddielddanuorrissagaeroclubmedecincinnationwidealsta" + - "haugesunderseaportsinfolldalabamagasakishimabarackmazehattfjelld" + - "alhayashimamotobungotakadapliernewhollandhazuminobusellsyourhome" + - "goodshimotsumahboehringerikehelsinkitakamiizumisanofidelitysvard" + - "ollshinichinanhembygdsforbundhemneshinjournalistjohnhemsedalhepf" + - "orgeherokussldheroyhgtvallee-aosteroyhigashichichibunkyonanaoshi" + - "mageandsoundandvisionhigashihiroshimanehigashiizumozakitakatakam" + - "oriokalmykiahigashikagawahigashikagurasoedahigashikawakitaaikita" + - "kyushuaiahigashikurumeiwamarshallstatebankfhappouhigashimatsushi" + - "maritimodernhigashimatsuyamakitaakitadaitoigawahigashimurayamamo" + - "torcycleshinjukumanohigashinarusembokukitamidsundhigashinehigash" + - "iomihachimanchesterhigashiosakasayamanakakogawahigashishirakawam" + - "atakanabeautydalhigashisumiyoshikawaminamiaikitamotosumitakagild" + - "eskaliszhigashitsunowruzhgorodeohigashiurausukitanakagusukumodum" + - "inamiiselectravelchannelhigashiyamatokoriyamanashifteditchyourip" + - "fizerhigashiyodogawahigashiyoshinogaris-a-playerhiraizumisatohob" + - "by-sitehirakatashinagawahiranais-a-republicancerresearchaeologic" + - "aliforniahirarahiratsukagawahirayaitakanezawahistorichouseshinka" + - "migotoyohashimotoshimahitachiomiyaginankokubunjis-a-rockstaracho" + - "wicehitachiotagooglecodespotravelersinsurancehitraeumtgeradeloit" + - "tevadsoccertificationhjartdalhjelmelandholeckobierzyceholidayhom" + - "eipgfoggiahomelinkhakassiahomelinuxn--32vp30haebaruminamifuranoh" + - "omeofficehomesecuritymaceratakaokaluganskodjejuifminamiizukamiok" + - "amikitayamatsuris-a-socialistmein-vigorgehomesecuritypccwinnersh" + - "inshinotsurgeryhomesenseminehomeunixn--3bst00minamimakis-a-soxfa" + - "nhondahoneywellbeingzonehongopocznosegawahonjyoitakarazukamakura" + - "zakitashiobarahornindalhorseoulminamiminowahortendofinternet-dns" + - "hinshirohospitalhoteleshintokushimahotmailhoyangerhoylandetroits" + - "kolelhumanitieshintomikasaharahurdalhurumajis-a-studentalhyllest" + - "adhyogoris-a-teacherkassymantechnologyhyugawarahyundaiwafunehzch" + - "onanbuildingripescaravantaajlchoyodobashichikashukujitawarajlljm" + - "pharmacienshirakofuefukihaboromskoguchikuzenjnjeonnamerikawauejo" + - "yokaichibahcavuotnagaranzannefrankfurtrentino-alto-adigejpmorgan" + - "jpnjprshiranukamogawajuniperjurkoshunantokigawakosugekotohiradom" + - "ainsureggiocalabriakotourakouhokutamakis-an-artisteinkjerusalemb" + - "roiderykounosupplieshiraokanagawakouyamashikokuchuokouzushimasoy" + - "kozagawakozakis-an-engineeringkpnkppspdnshiratakahagivestbytomar" + - "idagawassamukawataricohdatingkrasnodarkredirectmeldalkristiansan" + - "dcatshishikuis-an-entertainerkristiansundkrodsheradkrokstadelval" + - "daostarostwodzislawioshisognekryminamisanrikubetsupportrentino-a" + - "ltoadigekumatorinokumejimasudakumenanyokkaichirurgiens-dentistes" + - "-en-francekunisakis-bykunitachiarailwaykunitomigusukumamotoyamas" + - "sa-carrara-massacarraramassabusinessebyklegallocus-1kunneppulawy" + - "kunstsammlungkunstunddesignkuokgrouphdkureggioemiliaromagnakayam" + - "atsumaebashikshacknetrentino-s-tirollagrigentomologyeonggiehtavu" + - "oatnagaivuotnagaokakyotambabia-goracleaningkurgankurobelaudibleb" + - "timnetzkurogimilanokuroisoftwarendalenugkuromatsunais-certifiedo" + - "gawarabikomaezakirunorthwesternmutualkurotakikawasakis-foundatio" + - "nkushirogawakusupplykutchanelkutnokuzumakis-gonekvafjordkvalsund" + - "kvamfamberkeleykvanangenkvinesdalkvinnheradkviteseidskogkvitsoyk" + - "wpspiegelkzmissilevangermisugitokorozawamitourismolancastermitoy" + - "oakemiuramiyazumiyotamanomjondalenmlbfanmonmouthagebostadmonster" + - "monticellombardiamondshisuifuelveruminamitanemontrealestatefarme" + - "quipmentrentino-stirolmonza-brianzaporizhzhiamonza-e-della-brian" + - "zapposhitaramamonzabrianzaptokuyamatsusakahoginowaniihamatamakaw" + - "ajimarburgmonzaebrianzaramonzaedellabrianzamoparachutingmordovia" + - "jessheiminamiuonumatsumotofukemoriyamatsushigemoriyoshimilitarym" + - "ormoneymoroyamatsuuramortgagemoscowitdkmpspbarcelonagasakijobser" + - "verisignieznord-odalaziobihirosakikamijimassnasaarlandd-dnshome-" + - "webservercellikes-piedmontblancomeeres3-ap-southeast-1moseushist" + - "orymosjoenmoskeneshizukuishimofusaitamatsukuris-into-gamessinats" + - "ukigatakasagotembaixadamosshizuokananporovigotpantheonsitemosvik" + - "nx-serveronakatsugawamoteginozawaonsenmoviemovistargardmtpchrist" + - "masakikugawatchesarufutsunomiyawakasaikaitakoelniyodogawamtranby" + - "muenstermugithubcloudusercontentrentino-sud-tirolmuikamisatokama" + - "chippubetsubetsugarumukochikushinonsenergymulhouservebeermunakat" + - "anemuncieszynmuosattemuphiladelphiaareadmyblogsitemurmanskolobrz" + - "egersundmurotorcraftrentino-sudtirolmusashimurayamatsuzakis-leet" + - "rdmusashinoharamuseetrentino-sued-tirolmuseumverenigingmutsuzawa" + - "mutuellewismillermy-vigorlicemy-wanggouvicenzamyactivedirectorym" + - "yasustor-elvdalmycdn77-securechtrainingmydissentrentino-suedtiro" + - "lmydrobofagemydshoujis-lostre-toteneis-a-techietis-a-therapistoi" + - "amyeffectrentinoa-adigemyfirewallonieruchomoscienceandindustrynm" + - "yfritzmyftpaccesshowamyfusionmyhome-serverrankoshigayamelhusgard" + - "enmykolaivaolbia-tempio-olbiatempioolbialystokkepnogiftshowtimet" + - "eorapphilatelymymediapchromedicaltanissettairamyokohamamatsudamy" + - "pepsongdalenviknakanojohanamakinoharamypetshriramlidlugolekagami" + - "nogatagajobojis-not-certifieducatorahimeshimakanegasakinkobayash" + - "ikaoirminamiogunicomcastresistancemyphotoshibahccavuotnagareyama" + - "lborkdalvdalcesienarashinomypsxn--3e0b707emysecuritycamerakermys" + - "hopblocksigdalmyvnchryslerpictetrentinoaadigepicturesimple-urlpi" + - "emontepilotsirdalpimientaketomisatolgapinkomakiyosunndalpioneerp" + - "ippuphoenixn--3oq18vl8pn36apiszpittsburghofauskedsmokorsetagayas" + - "ells-for-ulvikautokeinopiwatepizzapkomatsushimashikizunokunimiho" + - "boleslawiechristiansburgriwataraidyndns-picsarpsborgroks-thisaya" + - "manobeokakudamatsueplanetariuminamiyamashirokawanabellevuelosang" + - "elesjaguarchitecturealtorlandplantationplantslingplatforminanopl" + - "aystationplazaplchungnamdalseidfjordyndns-remotewdyndns-serverda" + - "luroyplombardynamisches-dnslupskomforbarclaycards3-website-ap-no" + - "rtheast-1plumbingopmnpodzonepohlpoivronpokerpokrovskommunalforbu" + - "ndpolitiendapolkowicepoltavalle-aostathellexusdecorativeartsnoas" + - "aitomobellunorddalpomorzeszowithgoogleapisa-hockeynutsiracusakat" + - "akinouepordenonepornporsangerporsanguidelmenhorstalbansokanazawa" + - "porsgrunnanpoznanpraxis-a-bookkeeperugiaprdpreservationpresidiop" + - "rgmrprimeloyalistockholmestrandprincipeprivatizehealthinsurancep" + - "rochowiceproductionsokndalprofbsbxn--1lqs03nprogressivegasiaproj" + - "ectrentinoalto-adigepromombetsurfbx-ostrowwlkpmgulenpropertyprot" + - "ectionprotonetrentinoaltoadigeprudentialpruszkowithyoutubentleyp" + - "rzeworskogptplusterpvtrentinos-tirolpwchurchaseljeepostfoldnavyp" + - "zqldqponqslgbtrentinostirolquicksytesolarssonqvcirclegnicafedera" + - "tionstufftoread-booksnesolundbeckommunestuttgartrentoyokawasusak" + - "is-slickharkovalleeaosteigensusonosuzakaneyamazoesuzukaniepcesuz" + - "ukis-uberleetrentino-a-adigesvalbardunloppacificircustomersveios" + - "velvikomvuxn--3ds443gsvizzeraswedenswidnicarrierswiebodzindianap" + - "olis-a-bloggerswiftcoversicherungswinoujscienceandhistoryswisshi" + - "kis-very-badaddjamisonsynology-dsolutionsolognetuscanytushuissie" + - "r-justicetuvalle-daostaticsootuxfamilyvenneslaskerrylogisticsopo" + - "trentinosud-tirolvestfoldvestnesor-odalvestre-slidreamhostersor-" + - "varangervestre-totennishiawakuravestvagoyvevelstadvibo-valentiav" + - "ibovalentiavideovillaskoyabearalvahkihokumakogengerdalpha-myqnap" + - "cloudapplebesbydgoszczecinemakeupowiathletajimabariakembuchikuma" + - "gayagawakuyabukicks-assedicitadeliveryvinnicartiervinnytsiavipsi" + - "naapphonefossilkomaganevirginiavirtualvirtueeldomeindianmarketin" + - "gvirtuelvisakegawavistaprinternationalfirearmsorfoldviterboltroa" + - "ndinosaurepaircraftrevisohughesomavivoldavlaanderenvladikavkazim" + - "ierz-dolnyvladimirvlogoiphotographysiovolkswagentsorreisahayakaw" + - "akamiichikawamisatotalvologdanskongsvingervolvolkenkundenvolyngd" + - "alvossevangenvotevotingvotoyonakagyokutoursortlandworldworse-tha" + - "ndawowiwatsukiyonowritesthisblogsytewroclawloclawekoninjavald-ao" + - "starnbergwtciticatholicheltenham-radio-opencraftranagatorodoywtf" + - "bxosciencecentersciencehistorywuozuwwwmflabsorumincommbanklabudh" + - "abikinokawabarthagakhanamigawawzmiuwajimaxn--4gq48lf9jetztrentin" + - "o-aadigexn--4it168dxn--4it797konsulatrobeepilepsydneyxn--4pvxsou" + - "thcarolinazawaxn--54b7fta0ccivilizationxn--55qw42gxn--55qx5dxn--" + - "5js045dxn--5rtp49civilwarmanagementmpalmspringsakerxn--5rtq34kon" + - "yvelolxn--5su34j936bgsgxn--5tzm5gxn--6btw5axn--6frz82gxn--6orx2r" + - "xn--6qq986b3xlxn--7t0a264claimsasayamaxn--80adxhksouthwestfalenx" + - "n--80ao21axn--80aqecdr1axn--80asehdbarefootballooningjesdalillyo" + - "mbondiscountysnes3-website-ap-southeast-2xn--80aswgxn--80audneda" + - "lnxn--8ltr62kooris-an-actorxn--8pvr4uxn--8y0a063axn--90a3academy" + - "-firewall-gatewayxn--90aishobaraomoriguchiharahkkeravjuedischesa" + - "peakebayernrtrogstadxn--90azhytomyrxn--9dbhblg6dietcimdbargainst" + - "itutelemarkaratsuginamikatagamiharuconnectatarantottoribestadisc" + - "overyomitanobirastronomy-gatewayokosukanzakiwienaturalsciencesna" + - "turelles3-ap-southeast-2xn--9dbq2axn--9et52uxn--9krt00axn--andy-" + - "iraxn--aroport-byanaizuxn--asky-iraxn--aurskog-hland-jnbarreauct" + - "ionayorovnobninskarelianceu-1xn--avery-yuasakuhokkaidontexistein" + - "geekopervikhmelnitskiyamashikexn--b-5gaxn--b4w605ferdxn--bck1b9a" + - "5dre4clickatowicexn--bdddj-mrabdxn--bearalvhki-y4axn--berlevg-jx" + - "axn--bhcavuotna-s4axn--bhccavuotna-k7axn--bidr-5nachikatsuuraxn-" + - "-bievt-0qa2xn--bjarky-fyandexn--3pxu8konskowolayangroupharmacysh" + - "iraois-an-accountantshinyoshitomiokamitsuexn--bjddar-ptamayufuet" + - "tertdasnetzxn--blt-elabourxn--bmlo-graingerxn--bod-2naroyxn--brn" + - "ny-wuaccident-investigation-aptibleaseating-organicbcn-north-1xn" + - "--brnnysund-m8accident-prevention-webhopenairbusantiquest-a-la-m" + - "aisondre-landebudapest-a-la-masionionjukudoyamagazineat-urlxn--b" + - "rum-voagatromsakakinokiaxn--btsfjord-9zaxn--c1avgxn--c2br7gxn--c" + - "3s14mintelligencexn--cck2b3barrel-of-knowledgemologicallyngenvir" + - "onmentalconservationflfanfshostrolekamisunagawaugustowadaegubs3-" + - "ca-central-1xn--cg4bkis-very-evillagexn--ciqpnxn--clchc0ea0b2g2a" + - "9gcdn77-sslattumisakis-into-carshioyanagawaxn--comunicaes-v6a2ox" + - "n--correios-e-telecomunicaes-ghc29axn--czr694barrell-of-knowledg" + - "eologyonagoyaukraanghkeymachineustarhubalestrandabergamoareke164" + - "xn--czrs0tromsojaworznoxn--czru2dxn--czrw28bashkiriaurskog-holan" + - "droverhalla-speziaeroportalaheadjudaicaaarborteaches-yogasawarac" + - "ingroks-theatree12xn--d1acj3basilicataniaustevollarvikarasjokara" + - "suyamarylhurstjordalshalsenaturbruksgymnaturhistorisches3-eu-cen" + - "tral-1xn--d1alfaromeoxn--d1atrusteexn--d5qv7z876clinichernigover" + - "nmentjometlifeinsurancexn--davvenjrga-y4axn--djrs72d6uyxn--djty4" + - "koryokamikawanehonbetsurutaharaxn--dnna-grajewolterskluwerxn--dr" + - "bak-wuaxn--dyry-iraxn--e1a4cliniquenoharaxn--eckvdtc9dxn--efvn9s" + - "owaxn--efvy88haibarakitahatakamatsukawaxn--ehqz56nxn--elqq16hair" + - "-surveillancexn--estv75gxn--eveni-0qa01gaxn--f6qx53axn--fct429ko" + - "saigawaxn--fhbeiarnxn--finny-yuaxn--fiq228c5hspjelkavikomonoxn--" + - "fiq64basketballfinanzgoraustinnatuurwetenschappenaumburgjemnes3-" + - "eu-west-1xn--fiqs8spreadbettingxn--fiqz9spydebergxn--fjord-lraxn" + - "--fjq720axn--fl-ziaxn--flor-jraxn--flw351exn--fpcrj9c3dxn--frde-" + - "grandrapidsrlxn--frna-woaraisaijotrvarggatritonxn--frya-hraxn--f" + - "zc2c9e2clintonoshoesaseboknowsitallutskypexn--fzys8d69uvgmailxn-" + - "-g2xx48clothingrondarxn--gckr3f0fermobilyxn--gecrj9cloudnsdojoet" + - "suwanouchikujogaszczytnore-og-uvdaluxembourgrongaxn--ggaviika-8y" + - "a47hakatanotogawaxn--gildeskl-g0axn--givuotna-8yaotsurreyxn--gjv" + - "ik-wuaxn--gk3at1exn--gls-elacaixaxn--gmq050is-very-goodhandsonxn" + - "--gmqw5axn--h-2failxn--h1aeghakodatexn--h2brj9cnsaskatchewanxn--" + - "hbmer-xqaxn--hcesuolo-7ya35batodayonaguniversityoriikariyakumold" + - "eltaiwanairlinedre-eikerxn--hery-iraxn--hgebostad-g3axn--hmmrfea" + - "sta-s4acctrysiljan-mayenxn--hnefoss-q1axn--hobl-iraxn--holtlen-h" + - "xaxn--hpmir-xqaxn--hxt814exn--hyanger-q1axn--hylandet-54axn--i1b" + - "6b1a6a2exn--imr513nxn--indery-fyasakaiminatoyonezawaxn--io0a7is-" + - "very-nicexn--j1aeferraraxn--j1amhakonexn--j6w193gxn--jlq61u9w7ba" + - "tsfjordishakotankarlsoyoshiokarasjohkamikoaniikappugliaustraliai" + - "sondriodejaneirochesterhcloudfunctions3-external-1xn--jlster-bya" + - "sugis-very-sweetpepperxn--jrpeland-54axn--jvr189misasaguris-into" + - "-cartoonshirahamatonbetsurnadalxn--k7yn95exn--karmy-yuaxn--kbrq7" + - "oxn--kcrx77d1x4axn--kfjord-iuaxn--klbu-woaxn--klt787dxn--kltp7dx" + - "n--kltx9axn--klty5xn--42c2d9axn--koluokta-7ya57hakubadajozorahol" + - "taleniwaizumiotsukumiyamazonawsabaerobaticketshimonosekikawaxn--" + - "kprw13dxn--kpry57dxn--kpu716ferrarivnexn--kput3is-with-thebandoo" + - "mdnsiskinkyotobetsumidatlantichoseiroumuenchenisshingugexn--krag" + - "er-gyasuokanraxn--kranghke-b0axn--krdsherad-m8axn--krehamn-dxaxn" + - "--krjohka-hwab49jevnakershuscultureggio-emilia-romagnakatombetsu" + - "my-routerxn--ksnes-uuaxn--kvfjord-nxaxn--kvitsy-fyatomitamamurax" + - "n--kvnangen-k0axn--l-1fairwindsrtrentinosudtirolxn--l1accenturek" + - "lamborghiniizaxn--laheadju-7yatsukanumazuryxn--langevg-jxaxn--lc" + - "vr32dxn--ldingen-q1axn--leagaviika-52bauhausposts-and-telecommun" + - "icationsncfdivtasvuodnakaiwamizawaustrheimatunduhrennesoyokotebi" + - "nagisochildrensgardenaustdalavagiskebinorfolkebibleikangerxn--le" + - "sund-huaxn--lgbbat1ad8jewelryxn--lgrd-poacoachampionshiphoptobam" + - "agentositelekommunikationlinebraskaunjargallupinbbcaseihichisobe" + - "tsuitainairforceoceanographics3-website-eu-west-1xn--lhppi-xqaxn" + - "--linds-pramericanartulangevagrarboretumbriamallamaintenancechir" + - "ealminnesotaketakatsukis-into-animelbournexn--lns-qlansrvareserv" + - "eblogspotrentinosued-tirolxn--loabt-0qaxn--lrdal-sraxn--lrenskog" + - "-54axn--lt-liacntoyonoxn--lten-granexn--lury-iraxn--mely-iraxn--" + - "merker-kuaxn--mgb2ddestordalxn--mgb9awbferreroticanonoichinomiya" + - "kexn--mgba3a3ejtunesomnaritakurashikis-savedunetbankharkivguccip" + - "rianiigataishinomakimobetsuliguriaxn--mgba3a4f16axn--mgba3a4fran" + - "amizuholdingsmileksvikosakaerodromegalsacebetsukubankhmelnytskyi" + - "vanylvenicexn--mgba7c0bbn0axn--mgbaakc7dvfetsundynvpnxn--mgbaam7" + - "a8hakuis-a-nascarfanxn--mgbab2bdxn--mgbai9a5eva00bbtateshinanoma" + - "chintaifun-dnsaliaskimitsubatamicable-modembetsukuibigawauthorda" + - "landroiddnskingjerdrumckinseyokozebizenakaniikawatanaguraetnagah" + - "amaroygardendoftheinternetflixilovecollegefantasyleaguernseyboml" + - "oans3-ap-northeast-2xn--mgbai9azgqp6jewishartgalleryxn--mgbayh7g" + - "padualstackspace-to-rentalstomakomaibaraxn--mgbb9fbpobanazawaxn-" + - "-mgbbh1a71exn--mgbc0a9azcgxn--mgbca7dzdoxn--mgberp4a5d4a87gxn--m" + - "gberp4a5d4arxn--mgbi4ecexposedxn--mgbpl2fhskleppiagetmyiphilipsy" + - "nology-diskstationxn--mgbqly7c0a67fbcolonialwilliamsburgrossetou" + - "chijiwadellogliastradingroundhandlingroznyxn--mgbqly7cvafredriks" + - "tadtvstoreitrentinosuedtirolxn--mgbt3dhdxn--mgbtf8flatangerxn--m" + - "gbtx2bbvacationswatch-and-clockerxn--mgbx4cd0abbottunkongsbergxn" + - "--mix082fgunmarcheaparisor-fronxn--mix891fhvalerxn--mjndalen-64a" + - "xn--mk0axindustriesteambulancexn--mk1bu44coloradoplateaudioxn--m" + - "kru45isleofmandalxn--mlatvuopmi-s4axn--mli-tlanxesstorfjordxn--m" + - "lselv-iuaxn--moreke-juaxn--mori-qsakuragawaxn--mosjen-eyatsushir" + - "oxn--mot-tlapyxn--mre-og-romsdal-qqbeppublishproxyzgorzeleccolog" + - "newspaperxn--msy-ula0hakusandiegoodyearthadselfipassagenshimonit" + - "ayanagitlaborxn--mtta-vrjjat-k7afamilycompanycolumbusheyxn--muos" + - "t-0qaxn--mxtq1misawaxn--ngbc5azdxn--ngbe9e0axn--ngbrxn--45brj9ci" + - "vilaviationxn--nit225koseis-an-actresshiojirishirifujiedaxn--nme" + - "sjevuemie-tcbalatinord-frontierxn--nnx388axn--nodexn--nqv7fs00em" + - "axn--nry-yla5gxn--ntso0iqx3axn--ntsq17gxn--nttery-byaeservecount" + - "erstrikexn--nvuotna-hwaxn--nyqy26axn--o1achattanooganordreisa-ge" + - "ekosherbrookegawaxn--o3cw4haldenxn--od0algxn--od0aq3bernuorockar" + - "tuzyukibmdivttasvuotnakamagayachts3-website-sa-east-1xn--ogbpf8f" + - "lekkefjordxn--oppegrd-ixaxn--ostery-fyawaraxn--osyro-wuaxn--p1ac" + - "fidonnakamuratajimicrolightinguovdageaidnunzenxn--p1aissmarterth" + - "anyouxn--pbt977communitysfjordyndns-weberlincolnxn--pgbs0dhlxn--" + - "porsgu-sta26fieldyroyrvikinguitarschweizparaglidingujolsterxn--p" + - "ssu33lxn--pssy2uxn--q9jyb4comobaraxn--qcka1pmcdonaldstpetersburg" + - "xn--qqqt11misconfusedxn--qxamuneuestreamsterdamnserverbaniaxn--r" + - "ady-iraxn--rdal-poaxn--rde-ulaquilancashirehabmerxn--rdy-0nabari" + - "wchoshibuyachiyodavvenjargaulardalukowiiheyaizuwakamatsubushikus" + - "akadogawaxn--rennesy-v1axn--rhkkervju-01aflakstadaokagakibichuox" + - "n--rholt-mragowoodsidexn--rhqv96gxn--rht27zxn--rht3dxn--rht61exn" + - "--risa-5narusawaxn--risr-iraxn--rland-uuaxn--rlingen-mxaxn--rmsk" + - "og-byawatahamaxn--rny31halsaintlouis-a-anarchistoireggio-calabri" + - "axn--rovu88beskidyn-vpncasertaipeiheijiinetnedalimanowarudautomo" + - "tivecodyn-o-saurlandes3-fips-us-gov-west-1xn--rros-granvindafjor" + - "dxn--rskog-uuaxn--rst-0narutokyotangovturystykannamihamadaxn--rs" + - "ta-francaiseharaxn--ryken-vuaxn--ryrvik-byaxn--s-1faitheguardian" + - "xn--s9brj9comparemarkerryhotelsassaris-a-doctorayxn--sandnessjen" + - "-ogbizxn--sandy-yuaxn--seral-lraxn--ses554gxn--sgne-gratangenxn-" + - "-skierv-utazaskvolloabathsbcompute-1xn--skjervy-v1axn--skjk-soax" + - "n--sknit-yqaxn--sknland-fxaxn--slat-5narviikamishihoronobeauxart" + - "sandcraftstudioxn--slt-elabbvieeexn--smla-hraxn--smna-gratis-a-b" + - "ruinsfanxn--snase-nraxn--sndre-land-0cbstudyndns-at-homedepotenz" + - "amamicrosoftbankomorotsukaminoyamaxunusualpersonxn--snes-poaxn--" + - "snsa-roaxn--sr-aurdal-l8axn--sr-fron-q1axn--sr-odal-q1axn--sr-va" + - "ranger-ggbestbuyshouses3-website-us-east-1xn--srfold-byaxn--srre" + - "isa-q1axn--srum-grazxn--stfold-9xaxn--stjrdal-s1axn--stjrdalshal" + - "sen-sqbetainaboxfusejnynysadodgeometre-experts-comptables3-websi" + - "te-us-west-1xn--stre-toten-zcbieigersundiyukuhashimoichinosekiga" + - "harautoscanadaejeonbukaratehimeji234xn--t60b56axn--tckweathercha" + - "nnelxn--tiq49xqyjfkhersonxn--tjme-hraxn--tn0agrinet-freakstuff-4" + - "-salexn--tnsberg-q1axn--tor131oxn--trany-yuaxn--trgstad-r1axn--t" + - "rna-woaxn--troms-zuaxn--tysvr-vraxn--uc0atvaroyxn--uc0ay4axn--ui" + - "st22hammarfeastafricapetownnews-stagingxn--uisz3gxn--unjrga-rtao" + - "baokinawashirosatochiokinoshimalatvuopmiasakuchinotsuchiurakawal" + - "brzycharternopilawalesundxn--unup4yxn--uuwu58axn--vads-jraxn--va" + - "rd-jraxn--vegrshei-c0axn--vermgensberater-ctbielawalterxn--vermg" + - "ensberatung-pwbiellaakesvuemielecceu-2xn--vestvgy-ixa6oxn--vg-yi" + - "abcgxn--vgan-qoaxn--vgsy-qoa0jgoraxn--vgu402computerhistoryofsci" + - "ence-fictionxn--vhquvbarclays3-website-ap-southeast-1xn--vler-qo" + - "axn--vre-eiker-k8axn--vrggt-xqadxn--vry-yla5gxn--vuq861bieszczad" + - "ygeyachimataikikonaioirasebastopologyeongnamegawakeisenbahnhlfan" + - "hs3-website-us-west-2xn--w4r85el8fhu5dnraxn--w4rs40lxn--wcvs22dx" + - "n--wgbh1comsecuritytacticsatxn--1ck2e1balsfjordgcahcesuolodingen" + - "aval-d-aosta-valleyolasitemrxn--wgbl6axn--xhq521bievatmallorcada" + - "quesakuraiitatebayashiibaghdadultateyamaveroykenglanddnss3-sa-ea" + - "st-1xn--xkc2al3hye2axn--xkc2dl3a5ee0hamurakamigoriginshimosuwalk" + - "is-a-nurservebbshimotsukexn--y9a3aquariumishimatsunoxn--yer-znar" + - "vikoshimizumakis-an-anarchistoricalsocietyxn--yfro4i67oxn--ygard" + - "en-p1axn--ygbi2ammxn--45q11civilisationxn--ystre-slidre-ujbifuka" + - "gawarszawashingtondclkarmoyurihonjoyentatsunoceanographiquevents" + - "akyotanabeneventoeidsvollimitednpagefrontappagespeedmobilizerodd" + - "avocatanzarowegroweibolzanordkappgafanpachigasakidsmynasushiobar" + - "agusarts3-us-east-2xn--zbx025dxn--zf0ao64axn--zf0avxn--4gbrimini" + - "ngxn--zfr164bihorologyusuharavoues3-us-gov-west-1xperiaxz" +const text = "0emmafann-arboretumbriamallamaceiobihirosakikamijimatsuzaki234li" + + "ma-cityeatselinogradult3l3p0rtargets-itargivestbytomaritimekeepi" + + "ng120009guacuiababia-goracleaningroks-theatreeastcoastaldefencea" + + "tonsbergjemnes3-ap-northeast-1337bilbaogashimadachicagoboats3-we" + + "bsite-us-east-1billustrationikonanporovnopocznoppdalindesnes3-we" + + "bsite-us-west-1biobirdartcenterprisesakimobetsuitainairforcechir" + + "ealminamiechizeninohekinannestadiybirkenesoddtangenovaranzanpach" + + "igasakievennodesaarlandnpanasonicateringebuilderschmidtre-gaulda" + + "livornobirthplacebitballooningladefinimakanegasakinkobayashikaoi" + + "rminamifuranobjarkoybjerkreimbananarepublicasadelamonedatingjesd" + + "alimitediscountysvardolls3-eu-west-3utilitiesquare7bjugninomiyak" + + "onojorpelandrangedalombardiamonds3-website-us-west-2blancomedica" + + "ltanissettaipeiheijinuyamashinatsukigatakasagotpantheonsitebloom" + + "bergbauernuorochesterbloxcms5ybluedancebmoattachmentsakyotanabel" + + "lunord-aurdalvdalcesalangenirasakinvestmentsalondonetskarmoybmsa" + + "ltdalombardynamisches-dnsaludray-dnsupdaternopilawawebspacebmwed" + + "dinglassassinationalheritagebnpparibaselburgleezebnrwedeployboml" + + "oansalvadordalibabalsanagochihayaakasakawaharaholtalenvironmenta" + + "lconservationishiazainzais-a-candidatebondrayddnsfreebox-osascol" + + "i-picenordre-landraydnsalzburgliwicebonnishigobookinglobalashovh" + + "achinohedmarkarpaczeladzparaglidingloboavistaprintelligencebooml" + + "adbrokesamegawabootsamnangerboschaefflerdalwaysdatabaseballangen" + + "oamishirasatochigiessensiositelekommunikationishiharabostikaruiz" + + "awabostonakijinsekikogentinglogowegroweibolognagasukebotanicalga" + + "rdenishiizunazukis-a-catererbotanicgardenishikatakayamatsushigeb" + + "otanybouncemerckmsdnipropetrovskjervoyagebounty-fullensakerrypro" + + "pertiesampagespeedmobilizeroboutiquebecatholicaxiascolipicenodum" + + "inamiiselectjomemorialomzaporizhzheguris-a-celticsfanishikatsura" + + "git-repostfoldnavybozentsujiiebplacedekagaminord-odalondrinaples" + + "amsclubindalorenskogloppenzaolbia-tempio-olbiatempioolbialystokk" + + "embuchikumagayagawakuyabukihokumakogenglandrivelandrobaknoluokta" + + "chikawakkanaibetsubamericanfamilydscloudcontrolappspotagerbrandy" + + "winevalleybrasiliabrindisibenikebristoloseyouripirangapartmentsa" + + "msungmbhartiffanybritishcolumbialowiezachpomorskienishikawazukam" + + "itsuebroadcastlefrakkestadrudunsandvikcoromantovalle-d-aostathel" + + "lebroadwaybroke-itjxjavald-aostaplesanfranciscofreakunemurorange" + + "iseiyoichippubetsubetsugarugbyengerdalaskanittedallasalleasingle" + + "surancertmgretagajobojis-a-chefarmsteadupontariodejaneirodoybrok" + + "erbronnoysundurbanamexnetlifyis-a-conservativefsnillfjordurhambu" + + "rgminakamichiharabrothermesaverdeatnurembergmodellingmxn--0trq7p" + + "7nnishimerabrowsersafetymarketsangobrumunddalotenkawabrunelastic" + + "beanstalkarumaifarsundyndns-at-workinggrouparisor-fronishinomiya" + + "shironobrusselsanjotkmaxxn--11b4c3dyndns-blogdnsannanishinoomote" + + "gobruxellesannohelplfinancialottebryanskleppgafanquannefrankfurt" + + "ksatxn--12c1fe0bradescorporationishinoshimatsuurabrynewjerseybus" + + "kerudinewportlligatmparliamentoyosatoyonakagyokutoyokawabuzenish" + + "iokoppegardyndns-freeboxoslodingenishitosashimizunaminamibosognd" + + "alottokorozawabuzzweirbwfashionishiwakis-a-cpadualstackspace-to-" + + "rentalstomakomaibarabzhitomirumalatvuopmicrolightingrimstadyndns" + + "-homednsanokasaokaminokawanishiaizubangecommunitysnesardegnaroyc" + + "omobaracomparemarkerryhotelsardiniacompute-1computerhistoryofsci" + + "ence-fictioncomsecuritytacticsarlutskashiwazakiyosemitecondoshic" + + "hinohealth-carereformitakeharaconferenceconstructionconsuladohar" + + "uovatrani-andria-barletta-trani-andriaconsultanthropologyconsult" + + "ingvolluxembourgruecontactraniandriabarlettatraniandriacontagema" + + "tsubaracontemporaryarteducationalchikugojomedio-campidano-medioc" + + "ampidanomediocontractorskenconventureshinodearthdfcbankasukabedz" + + "in-the-bandaioiraseeklogest-mon-blogueurovisionionjukudoyamainte" + + "nancebetsuikidsmynasushiobarackmazerbaijan-mayenebakkeshibechamb" + + "agriculturennebudapest-a-la-masionthewifiat-band-campaniacooking" + + "channelsdvrdnsdojoetsuwanouchikujogaszczytnordlandyndns-weberlin" + + "colncoolkuszkolahppiacenzagancooperativano-frankivskodjeffersonc" + + "openhagencyclopedichernivtsiciliacorsicagliaribeiraokinawashiros" + + "atochiokinoshimaizuruhrcorvettemasekasumigaurawa-mazowszextraspa" + + "cekitagatajirissagamiharacosenzakopanerairguardiannakadomarinebr" + + "askaunjargalsaceocosidnsfor-better-thanawatchesarpsborguitarsaru" + + "futsunomiyawakasaikaitakoelncostumedizinhistorischesasayamacouch" + + "potatofriesasebofagecounciluxurycouponsaskatchewancoursesassaris" + + "-a-doctoraycq-acranbrookuwanalyticsaudacreditcardyndns-wikiracre" + + "ditunioncremonashgabadaddjaguarqhachiojiyahoooshikamaishimodatec" + + "rewhoswhokksundyndns-workisboringujoinvillewismillercricketrzync" + + "rimeast-kazakhstanangercrotonexus-3crownprovidercrsvparsauherady" + + "ndns1cruisesavannahgacryptonomichigangwoncuisinellair-traffic-co" + + "ntrolleyculturalcentertainmentranoycuneocupcakecuritibaghdadynns" + + "aves-the-whalessandria-trani-barletta-andriatranibarlettaandriac" + + "xn--12cfi8ixb8luzerncyberlevagangaviikanonjis-a-financialadvisor" + + "-aurdalvivanovodkamisatokashikiwakunigamiharufcfancymrussiacyona" + + "barulsandoycyoutheworkpccwiiheyakagefgushikamifuranorth-kazakhst" + + "anfhvalerfidonnakanotoddenfieldynvpnchernovtsykkylvenetogakushim" + + "otoganewyorkshirecipesaro-urbino-pesarourbinopesaromasvuotnakaiw" + + "amizawassamukawataricohdatsunanjoburgriwataraidyndns-iparmattele" + + "fonicapitalonewspaperfigueresinstagingxn--1ctwolominamatakkokami" + + "noyamaxunusualpersonfilateliafilegearfilminamimakis-a-geekaszuby" + + "finalfinancefineartscholarshipschoolfinlandyroyrvikingulenfinnoy" + + "firebaseappartis-a-greenfirenzefirestonefirmdaleirvikatowicefish" + + "ingolffanschulefitjarfitnessettlementransurlfjalerflesbergflickr" + + "agerotikakamigaharaflightschwarzgwangjuniperflirflogintohmalvika" + + "tsushikabeeldengeluidfloraflorencefloridavvesiidazaifudaigokasel" + + "jordfloripaderbornfloristanohatakahamamurogawaflorogerschweizflo" + + "wersciencecentersciencehistoryflynnhosting-clusterflynnhubarclay" + + "s3-sa-east-1fndfor-ourfor-someeresistancefor-theaterforexrothach" + + "irogatakamoriokalmykiaforgotdnscientistockholmestrandforli-cesen" + + "a-forlicesenaforlikescandynamic-dnscjohnsonforsaleitungsenforsan" + + "dasuoloftrapaniizafortalfortmissoulancashireggio-calabriafortwor" + + "thadanorthwesternmutualforuminamiminowafosnescotlandfotaruis-a-g" + + "urufoxfordebianfozorafredrikstadtvscrapper-sitefreeddnsgeekgalax" + + "yfreemasonryfreesitevadsochildrensgardenfreetlscrappingfreiburgf" + + "reightravelchannelfreseniuscountryestateofdelawarezzoologyfribou" + + "rgfriuli-v-giuliafriuli-ve-giuliafriuli-vegiuliafriuli-venezia-g" + + "iuliafriuli-veneziagiuliafriuli-vgiuliafriuliv-giuliafriulive-gi" + + "uliafriulivegiuliafriulivenezia-giuliafriuliveneziagiuliafriuliv" + + "giuliafrlfroganscrysechirurgiens-dentistes-en-francefrognfroland" + + "from-akrehamnfrom-alfrom-arfrom-azfrom-canonoichinomiyakefrom-co" + + "dynaliasdaburfrom-ctravelersinsurancefrom-dchiryukyuragifuchungb" + + "ukharafrom-dedyn-ip24from-flanderservegame-serversicherungfrom-g" + + "ausdalfrom-higashiagatsumagoianiafrom-iafrom-idfrom-ilfrom-inche" + + "onfrom-kservehalflifestylefrom-kyowariasahikawafrom-lancasterfro" + + "m-mangonohejis-a-hard-workerfrom-mdfrom-meethnologyfrom-mifunefr" + + "om-mnfrom-modalenfrom-mservehttpartnerservehumourfrom-mtnfrom-nc" + + "hitachinakagawatchandclockashibatakashimarumorimachidafrom-ndfro" + + "m-nefrom-nh-servebbserveirchitosetogitsuliguriafrom-njaworznotog" + + "awafrom-nminamiogunicomcastresindeviceserveminecraftrdfrom-nv-in" + + "foodnetworkshoppingfrom-nyfrom-ohtawaramotoineppuboliviajessheim" + + "periafrom-oketohnoshooguyfrom-orfrom-padovaksdalfrom-pratohobby-" + + "sitexashorokanaiefrom-rivnefrom-schoenbrunnfrom-sdfrom-tnfrom-tx" + + "n--1lqs03nfrom-utazuerichardlillehammerfeste-ipartservemp3from-v" + + "al-daostavalleyfrom-vtrentino-a-adigefrom-wafrom-wielunnerfrom-w" + + "valled-aostatoilfrom-wyfrosinonefrostalowa-wolawafroyahikobeardu" + + "baiduckdnservep2partyfstavernfujiiderafujikawaguchikonefujiminok" + + "amoenairtelecitychyattorneyagawakeisenbahnfujinomiyadafujiokayam" + + "angyshlakasamatsudontexistmein-vigorgefujisatoshonairtrafficplex" + + "us-1fujisawafujishiroishidakabiratoridefensells-for-lesservepics" + + "ervequakefujitsurugashimaringatlantakaharufujixeroxn--1lqs71dfuj" + + "iyoshidafukayabeatservesarcasmatartanddesignfukuchiyamadafukudom" + + "inichocolatelevisionissedalouvreisenisshingugefukuis-a-hunterfuk" + + "umitsubishigakirovogradoyfukuokazakiryuohadselfipasadenaritakura" + + "shikis-a-knightpointtokamachintaifun-dnsaliasiafukuroishikarikat" + + "urindalfukusakisarazurewebsiteshikagamiishibukawafukuyamagatakah" + + "ashimamakishiwadafunabashiriuchinadafunagatakahatakaishimogosenf" + + "unahashikamiamakusatsumasendaisennangoodyearfundaciofuoiskujukur" + + "iyamaniwakuratextileksvikatsuyamarylandfuosskoczowildlifedorainf" + + "racloudcontrolledogawarabikomaezakirunore-og-uvdalfurnitureggio-" + + "emilia-romagnakatombetsumitakagiizefurubirafurudonostiaarpassage" + + "nservicesettsurgeonshalloffameloyalistjordalshalsenfurukawais-a-" + + "landscaperfusodegaurafussaikisofukushimannorfolkebiblelveruminam" + + "isanrikubetsupportrentino-aadigefutabayamaguchinomigawafutboldly" + + "goingnowhere-for-morenakatsugawafuttsurugiminamitanefuturecmseva" + + "stopolefuturehostingfuturemailingfvgfylkesbiblackfridayfyresdalh" + + "angoutsystemscloudfunctionsevenassisicilyhannanmokuizumodenakaya" + + "mapassenger-associationhannosegawahanyuzenhapmirhareidsbergenhar" + + "stadharvestcelebrationhasamarburghasaminami-alpssells-itrentino-" + + "altoadigehashbanghasudahasura-appatriahasvikazohatogayaitakanabe" + + "autysfjordhatoyamazakitakamiizumisanofidelityhatsukaichikaiseis-" + + "a-linux-useranishiaritabashijonawatehattfjelldalhayashimamotobun" + + "gotakadapliernewmexicoalhazuminobusellsyourhomegoodsewilliamhill" + + "hbodoes-itvedestrandhelsinkitakatakanezawahembygdsforbundhemnesh" + + "aris-a-llamarriottrentino-s-tirollagrigentomologyeonggiehtavuoat" + + "nagaivuotnagaokakyotambabydgoszczecinemaceratabusebastopologyeon" + + "gnamegawakayamadridhemsedalhepforgeherokussldheroyhgtvalledaosta" + + "vangerhigashichichibunkyonanaoshimageandsoundandvisionhigashihir" + + "oshimanehigashiizumozakitakyushuaiahigashikagawahigashikagurasoe" + + "dahigashikawakitaaikitamihamadahigashikurumeguromskoghigashimats" + + "ushimarcheapaviancargodaddyn-vpnplus-2higashimatsuyamakitaakitad" + + "aitoigawahigashimurayamamotorcyclesharpfizerhigashinarusembokuki" + + "tamotosumy-routerhigashinehigashiomihachimanaustdalhigashiosakas" + + "ayamanakakogawahigashishirakawamatakaokaluganskydivinghigashisum" + + "iyoshikawaminamiaikitanakagusukumodernhigashitsunoshiroomurahiga" + + "shiurausukitashiobarahigashiyamatokoriyamanashifteditchyouripgfo" + + "ggiahigashiyodogawahigashiyoshinogaris-a-musicianhiraizumisatoka" + + "izukamakurazakitaurayasudahirakatashinagawahiranais-a-nascarfanh" + + "irarahiratsukagawahirayaizuwakamatsubushikusakadogawahistorichou" + + "seshawaiijimaritimoduminamiyamashirokawanabelembetsukubankazunow" + + "tvallee-aosteroyhitachiomiyagildeskaliszhitachiotagoperauniteroi" + + "zumizakisosakitagawahitraeumtgeradellogliastradinghjartdalhjelme" + + "landholeckobierzyceholidayhomeipharmacienshellaspeziahomelinkddi" + + "elddanuorrikuzentakataiwanairlinedre-eikerhomelinuxn--1qqw23ahom" + + "eofficehomesecuritymacaparecidahomesecuritypchofunatoriginsurecr" + + "eationiyodogawahomesenseminehomeunixn--2m4a15ehondahoneywellbein" + + "gzonehongotembaixadahonjyoitakarazukameokameyamatotakadahorninda" + + "lhorseoullensvanguardhortendofinternet-dnshimojis-a-nurservebeer" + + "hospitalhoteleshimokawahotmailhoyangerhoylandetroitskypehumaniti" + + "eshimokitayamahurdalhurumajis-a-painteractivegarsheis-a-patsfanh" + + "yllestadhyogoris-a-personaltrainerhyugawarahyundaiwafunejewelryj" + + "ewishartgalleryjfkharkovanylvenicejgorajlcube-serverrankoshigaya" + + "kumoldelmenhorstalbanshinichinanjlljmphilatelyjnjcphiladelphiaar" + + "eadmyblogsitejoyentrentino-sued-tiroljoyokaichibalatinoipifonymi" + + "nanojpmorganjpnjprshinjournalismailillesandefjordjurkoshunantank" + + "hmelnitskiyamarylhurstjohnkosugekotohiradomainshinjukumanokotour" + + "akouhokutamakis-a-techietis-a-photographerokuappharmacyshimonita" + + "yanagithubusercontentrentino-stirolkounosupplieshinkamigotoyohas" + + "himotottoris-a-therapistoiakouyamashikekouzushimashikis-an-accou" + + "ntantshimonosekikawakozagawakozakis-an-actorkozowinbarrel-of-kno" + + "wledgeologyonagoyaustrheimatunduhrennesoyolasitebizenakasatsunai" + + "rportland-4-salernoboribetsucks3-eu-central-1kpnkppspdnshinshino" + + "tsurgerykrasnodarkredstonekristiansandcatshinshirokristiansundkr" + + "odsheradkrokstadelvaldaostarnbergkrymincommbankhmelnytskyivaokum" + + "atorinokumejimasoykumenantokonamegatakatoris-an-actresshimosuwal" + + "kis-a-playerkunisakis-an-anarchistoricalsocietykunitachiarailway" + + "kunitomigusukumamotoyamashikokuchuokunneppugliakunstsammlungkuns" + + "tunddesignkuokgrouphoenixn--30rr7ykurehabmerkurgankurobelaudible" + + "borkangerkurogiminamiashigarakuroisoftwarendalenugkuromatsunais-" + + "an-artisteinkjerusalembroiderykurotakikawasakis-an-engineeringku" + + "shirogawakustanais-an-entertainerkusupplykutchanelkutnokuzumakis" + + "-bykvafjordkvalsundkvamfamberkeleykvanangenkvinesdalkvinnheradkv" + + "iteseidskogkvitsoykwpspiegelkzmitoyoakemiuramiyazumiyotamanomjon" + + "dalenmlbfanmonstermontrealestatefarmequipmentrentinoa-adigemonza" + + "-brianzaporizhzhiamonza-e-della-brianzapposhintomikasaharamonzab" + + "rianzaptokyotangotsukitahatakamatsukawamonzaebrianzaramonzaedell" + + "abrianzamoonscalemoparachutingmordoviamoriyamatsumotofukemoriyos" + + "himinamiawajikis-into-animeiwamarshallstatebankfhappoumormonmout" + + "hagakhanamigawamoroyamatsunomortgagemoscowindmillmoseushistorymo" + + "sjoenmoskeneshinyoshitomiokamogawamosshiojirishirifujiedamosvikn" + + "x-serveronamsskoganeis-a-rockstarachowicemoteginowaniihamatamaka" + + "wajimansionshioyanaizumoviemovimientolgamovistargardmtpchoyodoba" + + "shichikashukujitawaramtranbymuenstermuginozawaonsenmuikamisunaga" + + "wamukodairamulhouserveblogspotrentinoaadigemunakatanemuncienciam" + + "uosattemuphonefosshirahamatonbetsurnadalmurmanskolobrzegersundmu" + + "rotorcraftrentinoalto-adigemusashimurayamatsusakahoginankokubunj" + + "is-into-carshimotsukemusashinoharamuseetrentinoaltoadigemuseumve" + + "renigingmusicarbonia-iglesias-carboniaiglesiascarboniamutsuzawam" + + "y-vigorlicemy-wanggouvicenzamyactivedirectorymyasustor-elvdalmyc" + + "dn77-securecifedexhibitionmyddnskingmydissentrentinos-tirolmydro" + + "boehringerikemydshirakofuefukihaborokunohealthcareershiranukanag" + + "awamyeffectrentinostirolmyfirewallonieruchomoscienceandindustryn" + + "myfritzmyftpaccesshiraois-into-cartoonshimotsumamyhome-serversai" + + "lleshiraokananiimihoboleslawiechristiansburgrondarmykolaivaporcl" + + "oudmymailermymediapchristmasakinderoymyokohamamatsudamypephotogr" + + "aphysiomypetshiratakahagitlabormyphotoshibalestrandabergamoareke" + + "ymachinewhampshirebungoonombresciamypsxn--32vp30hagebostadmysecu" + + "ritycamerakermyshopblockshishikuis-into-gamessinazawamytis-a-boo" + + "kkeeperugiamytuleapiagetmyipictetrentinosud-tirolmyvnchromedicin" + + "akamagayachtsantabarbaramywireitrentinosudtirolpinkomaganepionee" + + "rpippulawypiszpittsburghofauskedsmokorsetagayasells-for-unzenpiw" + + "atepixolinopizzapkomakiyosunndalplanetariuminnesotaketakatsukis-" + + "certifieducatorahimeshimamateramobilyplantationplantshitaramapla" + + "tformshangrilanshizukuishimofusaitamatsukuris-lostre-toteneis-a-" + + "republicancerresearchaeologicaliforniaplaystationplazaplchungnam" + + "dalseidfjordyndns-mailucaniaplumbingoplurinacionalpmnpodzonepohl" + + "poivronpokerpokrovskomatsushimasfjordenpoliticarrierpolitiendapo" + + "lkowicepoltavalle-aostarostwodzislawindowshizuokanazawapomorzesz" + + "owinnershoujis-not-certifiedunetbankhakassiapordenonepornporsang" + + "erporsanguidell-ogliastraderporsgrunnanyokoshibahikariwanumatake" + + "tomisatoshimapoznanpraxis-a-bruinsfanprdpreservationpresidioprgm" + + "rprimeldalprincipeprivatizehealthinsuranceprochowiceproductionsh" + + "owaprofesionalprogressivegaskvolloabathsbchurchaseljeepsongdalen" + + "viknaharimalopolskanlandyndns-office-on-the-webcampinashikiminoh" + + "kurapromombetsurfbsbxn--12co0c3b4evalleaostaticsavonarusawaprope" + + "rtyprotectionprotonetrentinosued-tirolprudentialpruszkowioshowti" + + "memergencyahabahcavuotnagarahkkeravjuegoshikikonaikawachinaganoh" + + "aramcoachampionshiphoptobishimagentositecnologiaprzeworskogptplu" + + "sgardenpupictureshisognepvhaibarakitahiroshimaoris-a-lawyerpvtre" + + "ntinosuedtirolpwciprianiigataishinomakindlegnicafederationpzqldq" + + "ponqslgbtrentoyonezawaquicksyteshriramlidlugolekafjordquipelemen" + + "tsienarutomobellevuelosangelesjabbottrevisohughesigdalqvcirclego" + + "doesntexisteingeekashiharasrtroandinosaurepaircraftrogstadsrvare" + + "servecounterstrikestoragestordalstoregontrailroadstorfjordstorjd" + + "evcloudfrontdoorstpetersburgstreamsterdamnserverbaniastudiostudy" + + "ndns-at-homedepotenzamamidsundstuff-4-salestufftoread-booksnesir" + + "dalstuttgartromsakakinokiasusakis-savedsusonosuzakaniepcesuzukan" + + "makiwiensuzukis-slickharkivalleeaosteigensvalbardunloppacificirc" + + "ustomersveiosvelvikomvuxn--2scrj9choshibuyachiyodavvenjargaulard" + + "alowiczest-le-patronsvizzerasvn-reposjcbnlswedenswidnicartoonart" + + "decologiaswiebodzindianapolis-a-bloggerswiftcoverswinoujsciencea" + + "ndhistoryswisshikis-uberleetrentino-sud-tirolsynology-dslingtush" + + "uissier-justicetuvalle-daostatic-accessnoasaitotaltuxfamilytwmai" + + "lvenneslaskerrylogisticsokaneyamazoevestfoldvestnesokndalvestre-" + + "slidrepbodynathomebuiltrusteevestre-totennishiawakuravestvagoyve" + + "velstadvibo-valentiavibovalentiavideovillasnesoddenmarkhangelskj" + + "akdnepropetrovskiervaapsteiermarkongsvingervinnicasacamdvrcampin" + + "agrandebugattipschlesischesolarssonvinnytsiavipsinaappiemontevir" + + "giniavirtualvirtueeldomeindianmarketingvirtuelvisakegawaviterbok" + + "nowsitallvivoldavixn--3bst00misakis-foundationvlaanderenvladikav" + + "kazimierz-dolnyvladimirvlogoipilotshisuifuelblagdenesnaaseraling" + + "enkainanaejrietisalatinabenonichryslervolkswagentsolognevologdan" + + "skoninjambylvolvolkenkundenvolyngdalvossevangenvotevotingvotoyon" + + "owiwatsukiyonoticiaskimitsubatamibudejjuedischesapeakebayernrtrv" + + "arggatromsojamisonwloclawekonsulatrobeepilepsydneywmflabsolundbe" + + "ckommuneworldworse-thandawowitdkonskowolayangrouphilipsynology-d" + + "iskstationwpdevcloudwritesthisblogsytewroclawithgoogleapisa-hock" + + "eynutsiracusakatakinouewtcmisasaguris-gonewtfbx-ostrowwlkpmgunma" + + "nxn--1ck2e1barclaycards3-fips-us-gov-west-1wuozuwwwithyoutubenev" + + "entoeidsvollwzmiuwajimaxn--42c2d9axn--45br5cylxn--45brj9citadeli" + + "veryxn--45q11citichernigovernmentoyotaris-a-cubicle-slavellinota" + + "irestaurantoyotomiyazakis-a-democratoyotsukaidoxn--4gbriminingxn" + + "--4it168dxn--4it797kooris-a-soxfanxn--4pvxs4allxn--54b7fta0ccivi" + + "laviationxn--55qw42gxn--55qx5dxn--5js045dxn--5rtp49civilisationx" + + "n--5rtq34kopervikhersonxn--5su34j936bgsgxn--5tzm5gxn--6btw5axn--" + + "6frz82gxn--6orx2rxn--6qq986b3xlxn--7t0a264civilizationxn--80adxh" + + "ksolutionsilkomforbargainstitutelemarkarateu-1xn--80ao21axn--80a" + + "qecdr1axn--80asehdbarsyonlinewhollandiscoveryonaguniversityoriik" + + "aratsuginamikatagamilitaryoshiokaracoldwarmiastageu-2xn--80aswgx" + + "n--80audnedalnxn--8ltr62koryokamikawanehonbetsurutaharaxn--8pvr4" + + "uxn--8y0a063axn--90a3academiamicaaarborteaches-yogasawaracingxn-" + + "-90aeroportalaheadjudaicable-modemocraciaxn--90aishobarakawagoex" + + "n--90azhytomyrxn--9dbhblg6dietcimdbashkiriauthordalandeportenrig" + + "htathomeftpalmaseratibigawastronomy-gatewayokosukanzakiyosatokig" + + "awagrocerybnikahokutobamagazineat-url-o-g-i-natuurwetenschappena" + + "umburgjerdrumeteorappalermomahachijolstereportarumizusawaetnagah" + + "amaroygardendoftheinternetflixilovecollegefantasyleaguernseybolt" + + "arnobrzegyptianaturhistorisches3-ap-northeast-2ixboxenapponazure" + + "-mobile12hpaleobirabogadocscbgdyniabruzzoologicalvinklein-addram" + + "menuernberggfarmerseine164xn--9dbq2axn--9et52uxn--9krt00axn--and" + + "y-iraxn--aroport-byandexn--3ds443gxn--asky-iraxn--aurskog-hland-" + + "jnbasilicataniautomotiveconomiasakuchinotsuchiurakawalmartataran" + + "toyakokonoehimejibmdgcahcesuolocalhostrodawaraumalborkdalaziocea" + + "nographics3-eu-west-1xn--avery-yuasakuhokkaidoomdnsiskinkyotobet" + + "sumidatlanticivilwarmanagementoyouraxn--b-5gaxn--b4w605ferdxn--b" + + "ck1b9a5dre4claimsantacruzsantafedjejuifminamiizukamishihoronobea" + + "uxartsandcraftsantamariakexn--bdddj-mrabdxn--bearalvhki-y4axn--b" + + "erlevg-jxaxn--bhcavuotna-s4axn--bhccavuotna-k7axn--bidr-5nachika" + + "tsuuraxn--bievt-0qa2xn--bjarky-fyaotsurreyxn--bjddar-ptamayufuet" + + "tertdasnetzxn--blt-elabourxn--bmlo-graingerxn--bod-2natalxn--brn" + + "ny-wuacademy-firewall-gatewayxn--brnnysund-m8accident-investigat" + + "ion-aptibleaseating-organicbcn-north-1xn--brum-voagatrysiljanxn-" + + "-btsfjord-9zaxn--c1avgxn--c2br7gxn--c3s14misawaxn--cck2b3basketb" + + "allyngenhktatsunoddautoscanadaejeonbukarasjohkamikoaniikappueblo" + + "ckbustermezgoraugustowadaegubambleclerc66xn--cg4bkis-very-badajo" + + "zxn--ciqpnxn--clchc0ea0b2g2a9gcdn77-sslattumisconfusedxn--comuni" + + "caes-v6a2oxn--correios-e-telecomunicaes-ghc29axn--czr694batodayu" + + "kindustriaveroykeniwaizumiotsukumiyamazonawsadodgemologicallilly" + + "ombolzanord-frontiereviewskrakowebhostingjerstadotsuruokakegawau" + + "kraanghkepnogifts3-ap-southeast-2xn--czrs0tulanxesslupskommunalf" + + "orbundxn--czru2dxn--czrw28batsfjordishakotanhlfanhs3-us-gov-west" + + "-1xn--d1acj3bauhausposts-and-telecommunicationsncfdisrechtranaka" + + "muratajimidoriopretogoldpoint2thisamitsukeu-3xn--d1alfaromeoxn--" + + "d1atuneslzxn--d5qv7z876clanbibaidarmeniaxn--davvenjrga-y4axn--dj" + + "rs72d6uyxn--djty4kosaigawaxn--dnna-grajewolterskluwerxn--drbak-w" + + "uaxn--dyry-iraxn--e1a4cldmailuccapetownnews-stagingrongaxn--eckv" + + "dtc9dxn--efvn9somaxn--efvy88hair-surveillancexn--ehqz56nxn--elqq" + + "16hakatanortonxn--estv75gxn--eveni-0qa01gaxn--f6qx53axn--fct429k" + + "osakaerodromegallupinbarreauctionflfanfshostrowiecaseihichisobet" + + "suldalimoliserniaustraliaisondriobranconagawalesundemoneyokozebi" + + "nordreisa-geekaragandamusementashkentatamotors3-ap-southeast-1pa" + + "sswordd-dnshome-webservercellikes-piedmonticellocus-4xn--fhbeiar" + + "nxn--finny-yuaxn--fiq228c5hsomnarviikamitondabayashiogamagorizia" + + "xn--fiq64bbcasertairavennagatorockartuzyukuhashimoichinosekigaha" + + "ravocatanzarowebredirectmetacentrumetlifeinsurancempresashibetsu" + + "kuiitatebayashiibajddarchitecturealtydalipayomitanoceanographiqu" + + "emrevistanbulminamidaitomandalimanowarudaurskog-holandroverhalla" + + "-speziajudygarlanddnss3-ap-south-1kappchizippodhaleangaviikadena" + + "amesjevuemielno-ip6xn--fiqs8sooxn--fiqz9sopotritonxn--fjord-lrax" + + "n--fjq720axn--fl-ziaxn--flor-jraxn--flw351exn--fpcrj9c3dxn--frde" + + "-grandrapidsor-odalxn--frna-woaraisaijosoyrorosor-varangerxn--fr" + + "ya-hraxn--fzc2c9e2clickashiwaraxn--fzys8d69uvgmailxn--g2xx48clin" + + "ichernihivguccieszynissandnessjoenissayokkaichiropracticheltenha" + + "m-radio-opencraftrainingripescaravantaaxn--gckr3f0fbxosaxoxn--ge" + + "crj9cliniquenoharaxn--ggaviika-8ya47hakodatexn--gildeskl-g0axn--" + + "givuotna-8yasakaiminatoyookannamilanotteroyxn--gjvik-wuaxn--gk3a" + + "t1exn--gls-elacaixaxn--gmq050is-very-evillagexn--gmqw5axn--h-2fa" + + "ilxn--h1aeghakonexn--h2breg3evenesorfoldxn--h2brj9c8clintonoshoe" + + "santoandreamhostersanukis-a-designerimarnardalucernexn--h3cuzk1d" + + "igitalxn--hbmer-xqaxn--hcesuolo-7ya35bbtattoolsztynsettlers3-us-" + + "west-1xn--hery-iraxn--hgebostad-g3axn--hmmrfeasta-s4accident-pre" + + "vention-webhopenairbusantiquest-a-la-maisondre-landroidvagsoyeri" + + "cssonyoursidealerimo-i-ranadexeterxn--hnefoss-q1axn--hobl-iraxn-" + + "-holtlen-hxaxn--hpmir-xqaxn--hxt814exn--hyanger-q1axn--hylandet-" + + "54axn--i1b6b1a6a2exn--imr513nxn--indery-fyasugivingxn--io0a7is-v" + + "ery-goodhandsonxn--j1aefedorapeopleikangerxn--j1amhakubahccavuot" + + "nagareyamakeupowiathletajimabaridagawalbrzycharternidxn--j6w193g" + + "xn--jlq61u9w7bbvacationswatch-and-clockerhcloudns3-us-west-2xn--" + + "jlster-byasuokanraxn--jrpeland-54axn--jvr189mishimasudaxn--k7yn9" + + "5exn--karmy-yuaxn--kbrq7oxn--kcrx77d1x4axn--kfjord-iuaxn--klbu-w" + + "oaxn--klt787dxn--kltp7dxn--kltx9axn--klty5xn--3e0b707exn--koluok" + + "ta-7ya57hakuis-a-liberalxn--kprw13dxn--kpry57dxn--kpu716fedorapr" + + "ojectransportexn--kput3is-very-nicexn--krager-gyatomitamamuraxn-" + + "-kranghke-b0axn--krdsherad-m8axn--krehamn-dxaxn--krjohka-hwab49j" + + "dfastlylbarcelonagasakikuchikuseikarugamvikarasjokarasuyamarugam" + + "e-hostrolekamiminers3-external-1xn--ksnes-uuaxn--kvfjord-nxaxn--" + + "kvitsy-fyatsukanumazuryxn--kvnangen-k0axn--l-1fairwindsorocabals" + + "fjordxn--l1accentureklamborghinikis-very-sweetpepperxn--laheadju" + + "-7yatsushiroxn--langevg-jxaxn--lcvr32dxn--ldingen-q1axn--leagavi" + + "ika-52bentleyurihonjournalistgoryusuharavoues3-eu-west-2xn--lesu" + + "nd-huaxn--lgbbat1ad8jelenia-goraxn--lgrd-poacctunkongsbergxn--lh" + + "ppi-xqaxn--linds-pramericanarturystykanoyaltakasakiyokawaraxn--l" + + "ns-qlapyatigorskoseis-a-studentalxn--loabt-0qaxn--lrdal-sraxn--l" + + "renskog-54axn--lt-liaclothingdustkagoshimalselvendrellukowhaling" + + "rossetouchijiwadegreexn--lten-granexn--lury-iraxn--m3ch0j3axn--m" + + "ely-iraxn--merker-kuaxn--mgb2ddesorreisahayakawakamiichikawamisa" + + "toursimple-urlxn--mgb9awbfeiraquarellebesbyglandynulvikasuyanaga" + + "waxn--mgba3a3ejtuscanyxn--mgba3a4f16axn--mgba3a4franamizuholding" + + "smilevangerxn--mgba7c0bbn0axn--mgbaakc7dvfermochizukirkenesbscho" + + "koladenxn--mgbaam7a8hakusandiegooglecodespotrentino-alto-adigexn" + + "--mgbab2bdxn--mgbai9a5eva00beppublishproxyzjampagefrontappalmspr" + + "ingsakerxn--mgbai9azgqp6jeonnamerikawauexn--mgbayh7gpalacexn--mg" + + "bb9fbpobanazawaxn--mgbbh1a71exn--mgbc0a9azcgxn--mgbca7dzdoxn--mg" + + "berp4a5d4a87gxn--mgberp4a5d4arxn--mgbgu82axn--mgbi4ecexposedxn--" + + "mgbpl2fhskoleirfjordxn--mgbqly7c0a67fbcngroundhandlingroznyxn--m" + + "gbqly7cvafranziskanerdpolicexn--mgbt3dhdxn--mgbtf8flatangerxn--m" + + "gbtx2beskidyn-o-saurlandes3-website-ap-northeast-1xn--mgbx4cd0ab" + + "bvieeexn--mix082ferraraxn--mix891ferrarittoguraxn--mjndalen-64ax" + + "n--mk0axindigenaklodzkochikushinonsenergyxn--mk1bu44cnsaobernard" + + "ownloadyndns-picsaogoncartierxn--mkru45is-with-thebandovre-eiker" + + "xn--mlatvuopmi-s4axn--mli-tlaquilanciaxn--mlselv-iuaxn--moreke-j" + + "uaxn--mori-qsakuragawaxn--mosjen-eyawaraxn--mot-tlarvikosherbroo" + + "kegawaxn--mre-og-romsdal-qqbestbuyshouses3-website-ap-southeast-" + + "1xn--msy-ula0haldenxn--mtta-vrjjat-k7afamilycompanycntoystre-sli" + + "drettozawaxn--muost-0qaxn--mxtq1missilezajsklabudhabikinokawabar" + + "thaebaruminamiuonumassa-carrara-massacarraramassabusinessebykleg" + + "allocalhistoryggeelvinckaufenxn--ngbc5azdxn--ngbe9e0axn--ngbrxn-" + + "-3hcrj9cistrondheimmobilienxn--nit225koshimizumakizunokunimimata" + + "kasugais-a-teacherkassymantechnologyxn--nmesjevuemie-tcbaltimore" + + "-og-romsdalpha-myqnapcloudaccesscambridgestoneuesortlandxn--nnx3" + + "88axn--nodessakuraisleofmanchesterxn--nqv7fs00emaxn--nry-yla5gxn" + + "--ntso0iqx3axn--ntsq17gxn--nttery-byaeserveexchangexn--nvuotna-h" + + "waxn--nyqy26axn--o1achattanooganordkappimientakazakis-leetnedalx" + + "n--o3cw4halsaintlouis-a-anarchistoireggiocalabriaxn--o3cyx2axn--" + + "od0algxn--od0aq3betainaboxfusejnynysagaeroclubmedecincinnationwi" + + "dealstahaugesunderseaportsinfolldalabamagasakishimabaraogakibich" + + "uomutashinaindustriesteambulanceu-4xn--ogbpf8flekkefjordxn--oppe" + + "grd-ixaxn--ostery-fyawatahamaxn--osyro-wuaxn--p1acferreroticampo" + + "bassociatestinguovdageaidnuslivinghistoryxn--p1aissmarterthanyou" + + "xn--pbt977coguchikuzenxn--pgbs0dhlxn--porsgu-sta26fetsundynv6xn-" + + "-pssu33lxn--pssy2uxn--q9jyb4collectionxn--qcka1pmckinseyxn--qqqt" + + "11misugitokuyamatsumaebashikshacknetrentino-suedtirolxn--qxamune" + + "ustarhubsoruminternationalfirearmshintokushimaxn--rady-iraxn--rd" + + "al-poaxn--rde-ulavagiskexn--rdy-0nabariwchonanbuildingroks-thisa" + + "yamanobeokakudamatsuexn--rennesy-v1axn--rhkkervju-01aflakstadaok" + + "agakicks-assedicolognextdirectozsdeloittemp-dnsaotomelhusdecorat" + + "iveartsapodlasiellaktyubinskiptveterinairealtorlandyndns-remotew" + + "dyndns-serverdaluroyxn--rholt-mragowoodsideltaitogliattiresouthc" + + "arolinarvikomonoxn--rhqv96gxn--rht27zxn--rht3dxn--rht61exn--risa" + + "-5nativeamericanantiquesouthwestfalenxn--risr-iraxn--rland-uuaxn" + + "--rlingen-mxaxn--rmskog-byaxn--rny31hammarfeastafricapebretonami" + + "crosoftbankautokeinowruzhgorodeoxn--rovu88bhzcasinorddalindaskoy" + + "abearalvahkijobserverisignieznogataijinfinitintuitaxihuanikkoebe" + + "nhavnikolaevents3-website-ap-southeast-2xn--rros-granvindafjordx" + + "n--rskog-uuaxn--rst-0naturalhistorymuseumcenterxn--rsta-francais" + + "eharaxn--rvc1e0am3exn--ryken-vuaxn--ryrvik-byaxn--s-1faithruhere" + + "dumbrellajollamericanexpressexyxn--s9brj9colonialwilliamsburgrpa" + + "rocherkasyno-dsapporoxn--sandnessjen-ogbizxn--sandy-yuaxn--seral" + + "-lraxn--ses554gxn--sgne-gratangenxn--skierv-utazassnasabaerobati" + + "cketsowaxn--skjervy-v1axn--skjk-soaxn--sknit-yqaxn--sknland-fxax" + + "n--slat-5naturalsciencesnaturellespjelkavikomorotsukamiokamikita" + + "yamatsuris-a-socialistcgrouphdxn--slt-elabcgxn--smla-hraxn--smna" + + "-gratis-a-bulls-fanxn--snase-nraxn--sndre-land-0cbremangerxn--sn" + + "es-poaxn--snsa-roaxn--sr-aurdal-l8axn--sr-fron-q1axn--sr-odal-q1" + + "axn--sr-varanger-ggbieigersundivtasvuodnakaniikawatanaguraxauste" + + "vollavangenaval-d-aosta-valleyokotebinagisoccertificationavigati" + + "onavoibestadds3-ca-central-1xn--srfold-byaxn--srreisa-q1axn--sru" + + "m-grazxn--stfold-9xaxn--stjrdal-s1axn--stjrdalshalsen-sqbielawal" + + "terxn--stre-toten-zcbspreadbettingxn--t60b56axn--tckweatherchann" + + "elxn--tiq49xqyjetztrentino-sudtirolxn--tjme-hraxn--tn0agrinet-fr" + + "eakspydebergxn--tnsberg-q1axn--tor131oxn--trany-yuaxn--trgstad-r" + + "1axn--trna-woaxn--troms-zuaxn--tysvr-vraxn--uc0atvaroyxn--uc0ay4" + + "axn--uist22hamurakamigoris-a-libertarianxn--uisz3gxn--unjrga-rta" + + "obaomoriguchiharagusartsrlxn--unup4yxn--uuwu58axn--vads-jraxn--v" + + "ard-jraxn--vegrshei-c0axn--vermgensberater-ctbiellaakesvuemielec" + + "ceverbankareliancevje-og-hornnes3-website-eu-west-1xn--vermgensb" + + "eratung-pwbieszczadygeyachimataikikugawarszawashingtondclkariyam" + + "elbournexn--vestvgy-ixa6oxn--vg-yiabkhaziaxn--vgan-qoaxn--vgsy-q" + + "oa0jevnakershuscultureggioemiliaromagnamsosnowiechoseiroumuenche" + + "nxn--vgu402coloradoplateaudioxn--vhquvbarrell-of-knowledgeometre" + + "-experts-comptables3-us-east-2xn--vler-qoaxn--vre-eiker-k8axn--v" + + "rggt-xqadxn--vry-yla5gxn--vuq861bievatmallorcadaques3-website-sa" + + "-east-1xn--w4r85el8fhu5dnraxn--w4rs40lxn--wcvs22dxn--wgbh1columb" + + "usheyxn--wgbl6axn--xhq521bifukagawashtenawdev-myqnapcloudapplebt" + + "imnetzlgjovikarlsoyusuisserveftpanamatta-varjjatjeldsundivttasvu" + + "otnakanojohanamakinoharaxn--xkc2al3hye2axn--xkc2dl3a5ee0hangglid" + + "ingxn--y9a3aquariumitourismolangevagrarchaeologyeongbukmpspbaref" + + "ootballfinanzgorzeleccoffeedbackplaneapplinziiyamanouchikuhokury" + + "ugasakitchenayorovigovtateshinanomachimkentateyamaustinnavuotnar" + + "ashinobninsk12xn--yer-znaturbruksgymnxn--yfro4i67oxn--ygarden-p1" + + "axn--ygbi2ammxn--3oq18vl8pn36axn--ystre-slidre-ujbihorologyuucon" + + "nectjmaxxxfinityuzawaxn--zbx025dxn--zf0ao64axn--zf0avxn--3pxu8ko" + + "nyvelolxn--zfr164bikedagestangeorgeorgiaxperiaxz" // 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 @@ -477,8133 +494,8523 @@ const text = "bikedagestangeorgeorgiaxagrocerybnikahokutobishimaizuruhreportar" // An I denotes an ICANN domain. // // The layout within the uint32, from MSB to LSB, is: -// [ 1 bits] unused -// [ 9 bits] children index +// [ 0 bits] unused +// [10 bits] children index // [ 1 bits] ICANN bit // [15 bits] text index // [ 6 bits] text length var nodes = [...]uint32{ - 0x32f983, - 0x28a344, - 0x30e286, - 0x371b43, - 0x371b46, - 0x394646, - 0x3a5003, - 0x367844, - 0x260687, - 0x30dec8, - 0x1a04cc2, - 0x316e47, - 0x355d89, - 0x32228a, - 0x32228b, - 0x22eec3, - 0x28fac6, - 0x2327c5, - 0x1e04e02, - 0x217c04, - 0x2a90c3, - 0x3ac705, - 0x2203942, - 0x329e03, - 0x26957c4, - 0x368e05, - 0x2a10182, - 0x3787ce, - 0x253343, - 0x3a03c6, - 0x2e00142, - 0x30e407, - 0x23ae46, - 0x3200c42, - 0x22a343, - 0x254b04, - 0x325a86, - 0x35c208, - 0x28a706, - 0x21ad04, - 0x3601442, - 0x332309, - 0x207587, - 0x256286, - 0x339309, - 0x29d788, - 0x328d44, - 0x364906, - 0x36b606, - 0x3a02942, - 0x27144f, - 0x20f94e, - 0x2131c4, - 0x2c6085, - 0x367745, - 0x385989, - 0x241a89, - 0x368047, - 0x23c9c6, - 0x273a43, - 0x3e02342, - 0x2df283, - 0x205aca, - 0x221d83, - 0x303145, - 0x289c02, - 0x289c09, - 0x4200f82, - 0x203d84, - 0x2250c6, - 0x2eb205, - 0x34cbc4, - 0x4a04c04, - 0x205283, - 0x231ac4, - 0x4e02e02, - 0x209f04, - 0x52f4e04, - 0x24ae0a, - 0x5601342, - 0x303907, - 0x26b8c8, - 0x6202f82, - 0x31cf07, - 0x2c2e04, - 0x2c2e07, - 0x373d85, - 0x357a47, - 0x367e06, - 0x2e8384, - 0x39c0c5, - 0x294847, - 0x7206cc2, - 0x34f703, - 0x200582, - 0x200583, - 0x76125c2, - 0x221ec5, - 0x7a02302, - 0x27bd84, - 0x2810c5, - 0x213107, - 0x269f0e, - 0x224bc4, - 0x206a84, - 0x211503, - 0x2ceac9, - 0x2ed94b, - 0x3a6548, - 0x3148c8, - 0x318dc8, - 0x237908, - 0x33914a, - 0x357947, - 0x318146, - 0x7ea4fc2, - 0x35bc03, - 0x366c43, - 0x371144, - 0x3a5043, - 0x324cc3, - 0x171f542, - 0x8203682, - 0x252185, - 0x2a11c6, - 0x2d6d44, - 0x2f6e07, - 0x382986, - 0x319dc4, - 0x398247, - 0x20f7c3, - 0x86c8902, - 0x8b124c2, - 0x8e1c502, - 0x21c506, - 0x9200002, - 0x359b85, - 0x320a83, - 0x200004, - 0x2ee344, - 0x2ee345, - 0x203e43, - 0x9768883, - 0x9a07f42, - 0x28e245, - 0x28e24b, - 0x2d0686, - 0x20a0cb, - 0x225b04, - 0x20a7c9, - 0x20be84, - 0x9e0c0c2, - 0x20cf83, - 0x210843, - 0x1600802, - 0x260903, - 0x2109ca, - 0xa211cc2, - 0x217e85, - 0x2983ca, - 0x2dc184, - 0x369f03, - 0x315044, - 0x213643, - 0x213644, - 0x213647, - 0x213985, - 0x213e05, - 0x2150c6, - 0x2167c6, - 0x2182c3, - 0x21c188, - 0x221c43, - 0xa601082, - 0x21cac8, - 0x21ff0b, - 0x2216c8, - 0x2221c6, - 0x222a47, - 0x226488, - 0xb2413c2, - 0xb6c2fc2, - 0x326388, - 0x257ec7, - 0x22bac5, - 0x22bac8, - 0x2bf708, - 0x3871c3, - 0x22a784, - 0x371182, - 0xba2af82, - 0xbe5ba02, - 0xc62c1c2, - 0x22c1c3, - 0xca0e542, - 0x367803, - 0x2f8e04, - 0x218443, - 0x328d04, - 0x25fe4b, - 0x21fe43, - 0x2e4d06, - 0x226284, - 0x2a5a8e, - 0x361c05, - 0x3a04c8, - 0x282247, - 0x28224a, - 0x229d03, - 0x2b3447, - 0x2edb05, - 0x22ea44, - 0x272486, - 0x272487, - 0x32b704, - 0x304ac7, - 0x26a244, - 0x35bc84, - 0x35bc86, - 0x386904, - 0x20e546, - 0x223c83, - 0x22b888, - 0x30c3c8, - 0x24e2c3, - 0x2608c3, - 0x204f04, - 0x395943, - 0xce0d882, - 0xd2db442, - 0x20c043, - 0x201806, - 0x35c383, - 0x28bfc4, - 0xd6081c2, - 0x2081c3, - 0x358243, - 0x219942, - 0xda02ac2, - 0x2c55c6, - 0x2334c7, - 0x2f7a85, - 0x37da44, - 0x3723c5, - 0x367007, - 0x274205, - 0x2d3e89, - 0x2e0586, - 0x2e5488, - 0x2f7986, - 0xde0db42, - 0x362f48, - 0x2f8bc6, - 0x20db45, - 0x304687, - 0x30c2c4, - 0x30c2c5, - 0x28a8c4, - 0x28a8c8, - 0xe20a182, - 0xe60c502, - 0x313646, - 0x2c28c8, - 0x31f145, - 0x332c06, - 0x3356c8, - 0x33e1c8, - 0xea0fd45, - 0xee0c504, - 0x2958c7, - 0xf20bbc2, - 0xf61c402, - 0x1060d1c2, - 0x35aa45, - 0x2a8505, - 0x282606, - 0x3698c7, - 0x376ec7, - 0x10ed0783, - 0x2e3447, - 0x30dc88, - 0x3823c9, - 0x378987, - 0x390287, - 0x3a5b08, - 0x3aa206, - 0x22e546, - 0x22f18c, - 0x230b0a, - 0x230fc7, - 0x23268b, - 0x233307, - 0x23330e, - 0x236244, - 0x23a184, - 0x23b547, - 0x264f47, - 0x240d46, - 0x240d47, - 0x241207, - 0x18a20802, - 0x2420c6, - 0x2420ca, - 0x24294b, - 0x243407, - 0x244ec5, - 0x245203, - 0x246c46, - 0x246c47, - 0x241c43, - 0x18e38702, - 0x24b74a, - 0x19356fc2, - 0x196acdc2, - 0x19a4cec2, - 0x19e26982, - 0x24da85, - 0x24e0c4, - 0x1a604d02, - 0x209f85, - 0x294ac3, - 0x20bf85, - 0x237804, - 0x20a684, - 0x2ba5c6, - 0x26a546, - 0x28e443, - 0x3b1484, - 0x209383, - 0x1aa03b02, - 0x263544, - 0x263546, - 0x295e45, - 0x27fdc6, - 0x304788, - 0x20cb44, - 0x2a8e88, - 0x343fc5, - 0x24a108, - 0x2b1cc6, - 0x2bddc7, - 0x26cdc4, - 0x26cdc6, - 0x25e303, - 0x382e43, - 0x2c9388, - 0x318bc4, - 0x238d47, - 0x220246, - 0x2dad89, - 0x315108, - 0x319f08, - 0x349184, - 0x39b9c3, - 0x23e342, - 0x1ba34682, - 0x1be16102, - 0x3b2783, - 0x1c204a42, - 0x2607c4, - 0x390a46, - 0x39a6c5, - 0x2a4383, - 0x232004, - 0x2b6f47, - 0x26aa43, - 0x250d08, - 0x20e8c5, - 0x370083, - 0x281045, - 0x281184, - 0x2fb8c6, - 0x210384, - 0x211a46, - 0x213046, - 0x263004, - 0x21fd83, - 0x2225c3, - 0x1c604e42, - 0x377905, - 0x222e03, - 0x1ca1c3c2, - 0x22f143, - 0x210085, - 0x231b83, - 0x231b89, - 0x1ce07d02, - 0x1d601142, - 0x28d9c5, - 0x21a746, - 0x2d6906, - 0x2b94c8, - 0x2b94cb, - 0x20538b, - 0x2f7c85, - 0x2e1045, - 0x2c9fc9, - 0x1600742, - 0x2631c8, - 0x206044, - 0x1de001c2, - 0x25fa83, - 0x1e665106, - 0x20f088, - 0x1ea04782, - 0x233ec8, - 0x1ee01742, - 0x225c4a, - 0x1f2d0e43, - 0x3b1e86, - 0x206988, - 0x207d48, - 0x39a9c6, - 0x36d5c7, - 0x271647, - 0x220b0a, - 0x2dc204, - 0x3423c4, - 0x355589, - 0x1fb8fc85, - 0x20fb46, - 0x208203, - 0x251944, - 0x201e44, - 0x201e47, - 0x22cec7, - 0x237044, - 0x220a45, - 0x2826c8, - 0x350707, - 0x3619c7, - 0x1fe041c2, - 0x226004, - 0x298cc8, - 0x381004, - 0x24f0c4, - 0x24fa45, - 0x24fb87, - 0x215809, - 0x2505c4, - 0x2510c9, - 0x251308, - 0x2516c4, - 0x2516c7, - 0x20251c43, - 0x252487, - 0x16101c2, - 0x179d442, - 0x253386, - 0x2539c7, - 0x253e84, - 0x255607, - 0x256907, - 0x257483, - 0x2abc02, - 0x229c02, - 0x258743, - 0x258744, - 0x25874b, - 0x3149c8, - 0x25f184, - 0x2594c5, - 0x25ba87, - 0x25d8c5, - 0x2c4dca, - 0x25f0c3, - 0x2060da42, - 0x22b484, - 0x264d09, - 0x268983, - 0x268a47, - 0x28ee89, - 0x37b5c8, - 0x2d8483, - 0x27ff47, - 0x280689, - 0x2316c3, - 0x288284, - 0x289389, - 0x28c6c6, - 0x28dc83, - 0x2023c2, - 0x24ca43, - 0x36ab47, - 0x2bfa85, - 0x35ba06, - 0x256bc4, - 0x2d1d45, + 0x31a803, + 0x284d84, + 0x382f06, + 0x2f37c3, + 0x2f37c6, + 0x37af86, + 0x3a7a03, + 0x31b604, + 0x322487, + 0x382b48, + 0x1a00742, + 0x32e147, + 0x3672c9, + 0x2b4eca, + 0x2b4ecb, + 0x232183, + 0x2ab9c6, + 0x238485, + 0x1e01482, + 0x203b44, + 0x260543, + 0x201485, + 0x2215842, + 0x332603, + 0x271b0c4, + 0x31fe05, + 0x2a00102, + 0x38194e, + 0x256483, + 0x39cbc6, + 0x2e03d02, + 0x2c8047, + 0x23e146, + 0x3205c42, + 0x257dc3, + 0x257dc4, + 0x357406, + 0x205d08, + 0x277146, + 0x302004, + 0x3600602, + 0x33acc9, + 0x211307, + 0x347986, + 0x3c1109, + 0x2c78c8, + 0x331004, + 0x241286, + 0x230106, + 0x3a00582, + 0x3a234f, + 0x21f4ce, + 0x226484, + 0x2c1545, + 0x31a705, + 0x2f6809, + 0x244689, + 0x357c07, + 0x22bbc6, + 0x206dc3, + 0x3e03942, + 0x21d6c3, + 0x220d4a, + 0x21fbc3, + 0x3bde45, + 0x2f2542, + 0x370749, + 0x4200282, + 0x216c84, + 0x2ef006, + 0x2bb6c5, + 0x2d7c04, + 0x4a14344, + 0x205583, + 0x2374c4, + 0x4e02b82, + 0x267184, + 0x527eac4, + 0x39004a, + 0x5600cc2, + 0x35c447, + 0x2774c8, + 0x6207ec2, + 0x340687, + 0x2bde44, + 0x2bde47, + 0x3b9605, + 0x339407, + 0x31ca86, + 0x325384, + 0x3314c5, + 0x298307, + 0x720fc02, + 0x335a43, + 0x21ab82, + 0x3aae43, + 0x7612442, + 0x27f485, + 0x7a023c2, + 0x293584, + 0x276005, + 0x2263c7, + 0x20974e, + 0x2391c4, + 0x238cc4, + 0x20b583, + 0x364209, + 0x30e2cb, + 0x259e48, + 0x3c0ec8, + 0x316488, + 0x215cc8, + 0x330e4a, + 0x339307, + 0x309d86, + 0x7e6e442, + 0x345243, + 0x355943, + 0x35d344, + 0x3a7a43, + 0x32f6c3, + 0x172a782, + 0x8203102, + 0x27b385, + 0x28df86, + 0x2a9f04, + 0x369187, + 0x23ce86, + 0x3806c4, + 0x3806c7, 0x205a83, - 0x218506, - 0x20a9c2, - 0x391084, - 0x22ad02, - 0x22ad03, - 0x20a00182, - 0x29b083, - 0x216c44, - 0x216c47, - 0x200306, - 0x201e02, - 0x20e01dc2, - 0x21e184, - 0x2123b882, - 0x21600502, - 0x2dfcc4, - 0x2dfcc5, - 0x2b9cc5, - 0x262746, - 0x21a0ca82, - 0x20ca85, - 0x210d85, - 0x225883, - 0x215c06, - 0x216dc5, - 0x21c482, - 0x33de05, - 0x21c484, - 0x2230c3, - 0x223303, - 0x21e097c2, - 0x294a47, - 0x221144, - 0x221149, - 0x251844, - 0x228903, - 0x341cc9, - 0x3777c8, - 0x2a8384, - 0x2a8386, - 0x210503, - 0x259b43, - 0x332ec3, - 0x222ebc02, - 0x30eb82, - 0x22600642, - 0x3238c8, - 0x35c588, - 0x394d86, - 0x24ed45, - 0x2b32c5, - 0x200647, - 0x228fc5, - 0x2630c2, - 0x22a9a502, - 0x1614502, - 0x38fe08, - 0x362e85, - 0x351d04, - 0x2f18c5, - 0x3836c7, - 0x24f5c4, - 0x246f82, - 0x22e01182, - 0x336f04, - 0x2173c7, - 0x28e9c7, - 0x357a04, - 0x298383, - 0x24e204, - 0x24e208, - 0x22e886, - 0x27230a, - 0x2156c4, - 0x298708, - 0x259784, - 0x222b46, - 0x29a4c4, - 0x35ad46, - 0x221409, - 0x25b287, - 0x234483, - 0x23274842, - 0x274843, - 0x20c2c2, - 0x23651b02, - 0x2f0b06, - 0x364148, - 0x2a9d87, - 0x395d09, - 0x297f09, - 0x2ab245, - 0x2ad3c9, - 0x2ae045, - 0x2ae189, - 0x2af5c5, - 0x2b0208, - 0x27f284, - 0x23a8d6c7, - 0x294403, - 0x2b0407, - 0x390646, - 0x2b08c7, - 0x2a6d45, - 0x2a7f83, - 0x23e00dc2, - 0x392604, - 0x2423b8c2, - 0x264403, - 0x24618d82, - 0x307646, - 0x26b845, - 0x2b2bc7, - 0x37f183, - 0x324c44, - 0x2138c3, - 0x2386c3, - 0x24a0a3c2, - 0x25201a02, - 0x394744, - 0x2abbc3, - 0x38c985, - 0x226d85, - 0x25602282, - 0x25e00bc2, - 0x280286, - 0x318d04, - 0x2491c4, - 0x2491ca, - 0x26601d42, - 0x37324a, - 0x204148, - 0x26a964c4, - 0x201d43, - 0x25ff43, - 0x318f09, - 0x2a8909, - 0x2b7046, - 0x26e04303, - 0x328145, - 0x30664d, - 0x204306, - 0x21268b, - 0x27203482, - 0x295048, - 0x27e1c282, - 0x282051c2, - 0x37aa85, - 0x28600b02, - 0x2a3147, - 0x212b87, - 0x201503, - 0x22f848, - 0x28a02f02, - 0x202f04, - 0x217043, - 0x38d045, - 0x386fc3, - 0x2eb106, - 0x30bdc4, - 0x204ec3, - 0x234f83, - 0x28e07042, - 0x2f7c04, - 0x30ed45, - 0x35a587, - 0x27dbc3, - 0x2b36c3, - 0x2b3ec3, - 0x1621ac2, - 0x2b3f83, - 0x2b4b03, - 0x2920ae42, - 0x2cee84, - 0x26a746, - 0x33c7c3, - 0x2b4f83, - 0x296b5e02, - 0x2b5e08, - 0x2b60c4, - 0x2470c6, - 0x2b6547, - 0x24e3c6, - 0x295304, - 0x37200082, - 0x39050b, - 0x2ffbce, - 0x21bb0f, - 0x29da43, - 0x37a4ca02, - 0x166b142, - 0x37e02442, - 0x29c243, - 0x2472c3, - 0x233106, - 0x22ff46, - 0x212307, - 0x31aa84, - 0x3821a882, - 0x3860ec02, - 0x2d4ac5, - 0x2e88c7, - 0x37e046, - 0x38a82882, - 0x2f5b04, - 0x2b9783, - 0x38e01b02, - 0x39352883, - 0x2ba984, - 0x2c06c9, - 0x16c6fc2, - 0x39642682, - 0x351245, - 0x39ac7242, - 0x39e02682, - 0x341687, - 0x2364c9, - 0x35600b, - 0x271405, - 0x2c7c89, - 0x276a46, - 0x2d06c7, - 0x3a2092c4, - 0x32ef49, - 0x374b07, - 0x2255c7, - 0x234003, - 0x37b386, - 0x30f887, - 0x265383, - 0x27c5c6, - 0x3aa022c2, - 0x3ae31e02, - 0x220443, - 0x324845, - 0x257747, - 0x21fac6, - 0x2bfa05, - 0x230044, - 0x2efa45, - 0x2f8284, - 0x3b205e82, - 0x349f07, - 0x2e1c44, - 0x23e244, - 0x33328d, - 0x257249, - 0x381588, - 0x25ac04, - 0x314e85, - 0x3b2607, - 0x205e84, - 0x382a47, - 0x20c705, - 0x3b6aa384, - 0x36dec5, - 0x267644, - 0x24f706, - 0x3696c5, - 0x3ba24742, - 0x369fc4, - 0x369fc5, - 0x3716c6, - 0x2bfb45, - 0x25c104, - 0x3120c3, - 0x204986, - 0x22c085, - 0x22c785, - 0x3697c4, - 0x215743, - 0x21574c, - 0x3be8d002, - 0x3c2045c2, - 0x3c605d82, - 0x205d83, - 0x205d84, - 0x3ca032c2, - 0x2f9648, - 0x35bac5, - 0x33f884, - 0x230e46, - 0x3ce073c2, - 0x3d20fc42, - 0x3d600c02, - 0x321e85, - 0x262ec6, - 0x20b484, - 0x325fc6, - 0x3036c6, - 0x202983, - 0x3db1164a, - 0x264785, - 0x28b4c3, - 0x223886, - 0x305e09, - 0x223887, - 0x293308, - 0x29d649, - 0x248108, - 0x229a46, - 0x208843, - 0x3de017c2, - 0x384b03, - 0x384b09, - 0x368548, - 0x3e2513c2, - 0x3e601f02, - 0x22d603, - 0x2e0405, - 0x258f44, - 0x35e849, - 0x226784, - 0x26f288, - 0x205c03, - 0x2602c4, - 0x2784c3, - 0x21a788, - 0x3331c7, - 0x3ea0f302, - 0x2432c2, - 0x257d85, - 0x3960c9, - 0x20fbc3, - 0x281ac4, - 0x328104, - 0x219e03, - 0x28380a, - 0x3ef73102, - 0x3f2c0202, - 0x2c8883, - 0x374fc3, - 0x1649202, - 0x262a43, - 0x3f60bcc2, - 0x3fa05f02, - 0x3fe22044, - 0x222046, - 0x33e8c6, - 0x277844, - 0x2474c3, - 0x39bc83, - 0x235143, - 0x242cc6, - 0x2ce085, - 0x2c8e47, - 0x2d0589, - 0x2ccac5, - 0x2cdfc6, - 0x2ce548, - 0x2ce746, - 0x245bc4, - 0x29ef8b, - 0x2d3983, - 0x2d3985, - 0x2d3ac8, - 0x226302, - 0x341982, - 0x4024db02, - 0x4060b602, - 0x21a8c3, - 0x40a73fc2, - 0x273fc3, - 0x2d3dc4, - 0x2d4e43, - 0x41201682, - 0x41601686, - 0x2c47c6, - 0x2da008, - 0x41a95242, - 0x41e10882, - 0x42223342, - 0x4265e402, - 0x42a14202, - 0x42e01302, - 0x234103, - 0x261c05, - 0x32d1c6, - 0x43213184, - 0x295c4a, - 0x201306, - 0x2f7ec4, - 0x269ec3, - 0x43e0c002, - 0x202082, - 0x231743, - 0x44204ac3, - 0x362b47, - 0x3695c7, - 0x45a58847, - 0x32d747, - 0x228543, - 0x2977ca, - 0x377004, - 0x220144, - 0x22014a, - 0x202085, - 0x45e04182, - 0x3294c3, - 0x462002c2, - 0x2104c3, - 0x274803, - 0x46a00842, - 0x2e33c4, - 0x21db44, - 0x208285, - 0x30bd05, - 0x249406, - 0x249786, - 0x46e09282, - 0x47201002, - 0x3274c5, - 0x2c44d2, - 0x271ac6, - 0x248803, - 0x2a2486, - 0x248805, - 0x1610a02, - 0x4f611802, - 0x3522c3, - 0x211803, - 0x278203, - 0x4fa11f82, - 0x378ac3, - 0x4fe14602, - 0x200a83, - 0x2ceec8, - 0x24a843, - 0x24a846, - 0x3a1087, - 0x321b06, - 0x321b0b, - 0x2f7e07, - 0x392404, - 0x50603ec2, - 0x364805, - 0x50a04a83, - 0x239f83, - 0x326805, - 0x35b5c3, - 0x35b5c6, - 0x26334a, - 0x2774c3, - 0x23ad04, - 0x2c2806, - 0x20df46, - 0x50e00383, - 0x324b07, - 0x28bb8d, - 0x3adbc7, - 0x2a0685, - 0x250b46, - 0x22c0c3, - 0x52a15e43, - 0x52e04c82, - 0x3b2804, - 0x236d8c, - 0x245309, - 0x24bcc7, - 0x3724c5, - 0x268d84, - 0x27c1c8, - 0x27ed05, - 0x5328a405, - 0x377c09, - 0x256343, - 0x2acd44, - 0x53617902, - 0x21aac3, - 0x53a99f82, - 0x2a3fc6, - 0x16aa082, - 0x53e943c2, - 0x321d88, - 0x2c08c3, - 0x36de07, - 0x305105, - 0x2943c5, - 0x30860b, - 0x2e3906, - 0x308806, - 0x36dbc6, - 0x268f84, - 0x2e5686, - 0x2e5b48, - 0x23e943, - 0x23cf83, - 0x23cf84, - 0x2e6984, - 0x2e6e07, - 0x2e8745, - 0x542e8882, - 0x54606ec2, - 0x206ec5, - 0x2a4a84, - 0x2ebf8b, - 0x2ee248, - 0x2f7304, - 0x290602, - 0x54eb6042, - 0x38c543, - 0x2ee704, - 0x2ee9c5, - 0x2ef087, - 0x2f1404, - 0x2f7cc4, - 0x552054c2, - 0x35d209, - 0x2f2445, - 0x2716c5, - 0x2f3105, - 0x5561aa03, - 0x2f4244, - 0x2f424b, - 0x2f4684, - 0x2f4b0b, - 0x2f5505, - 0x21bc4a, - 0x2f5d08, - 0x2f5f0a, - 0x2f6783, - 0x2f678a, - 0x55a1b282, - 0x55e01202, - 0x26a103, - 0x562f7902, - 0x2f7903, - 0x5673aa42, - 0x56b21202, - 0x2f8104, - 0x21c2c6, - 0x325d05, - 0x2f8b43, - 0x32ff46, - 0x30c845, - 0x2e9784, - 0x56e00e02, - 0x2d7904, - 0x2c9c4a, - 0x2eb487, - 0x26b686, - 0x244007, - 0x236ec3, - 0x265488, - 0x28954b, - 0x386a45, - 0x235905, - 0x235906, - 0x370204, - 0x31d488, - 0x215a83, - 0x2b5984, - 0x36b507, - 0x307206, - 0x200e06, - 0x2a58ca, - 0x24e684, - 0x24e68a, - 0x57201946, - 0x201947, - 0x259547, - 0x279804, - 0x279809, - 0x2ba485, - 0x23b80b, - 0x2769c3, - 0x211c03, - 0x2a3f43, - 0x22ec44, - 0x57600682, - 0x259f06, - 0x2a7d05, - 0x2a26c5, - 0x2564c6, - 0x2531c4, - 0x57a01f82, - 0x245244, - 0x57e00d42, - 0x200d44, - 0x224303, - 0x58211842, - 0x3398c3, - 0x2478c6, - 0x58602602, - 0x2cfb88, - 0x223704, - 0x223706, - 0x375846, - 0x25bb44, - 0x204905, - 0x20c408, - 0x20c907, - 0x20d007, - 0x20d00f, - 0x298bc6, - 0x227843, - 0x227844, - 0x28be84, - 0x210e83, - 0x222c84, - 0x241104, - 0x58a36b82, - 0x28e183, + 0x86c31c2, + 0x8b14902, + 0x8e21182, + 0x221186, + 0x9200882, + 0x286c45, + 0x32bcc3, + 0x3c6444, + 0x2e3804, + 0x2e3805, + 0x2053c3, + 0x96b6c03, + 0x9a09342, + 0x289b05, + 0x289b0b, + 0x20bd06, + 0x331f4b, + 0x22aa44, + 0x20cec9, + 0x20d784, + 0x9e0d9c2, + 0x20ef03, + 0x20fec3, + 0x1610702, + 0x2fb9c3, + 0x21070a, + 0xa200302, + 0x203dc5, + 0x2d400a, + 0x243384, + 0x210f03, + 0x212984, + 0x213b83, + 0x213b84, + 0x213b87, + 0x2153c5, + 0x215705, + 0x216d46, + 0x2170c6, + 0x217d43, + 0x21a708, + 0x212d43, + 0xa6004c2, + 0x22c3c8, + 0x3878cb, + 0x223088, + 0x225f06, + 0x227447, + 0x22a1c8, + 0xb604002, + 0xbaf21c2, + 0x23b388, + 0x3031c7, + 0x207a45, + 0x207a48, + 0x383c48, + 0x2fa9c3, + 0x22f384, + 0x35d382, + 0xbe2f582, + 0xc201bc2, + 0xca30502, + 0x230503, + 0xce03cc2, + 0x31b5c3, + 0x2f1b84, + 0x20bf83, + 0x335e04, + 0x322b8b, + 0x237c03, + 0x2db106, + 0x237c04, + 0x2e21ce, + 0x2669c5, + 0x33d7c8, + 0x251107, + 0x25110a, + 0x2342c3, + 0x34f747, + 0x30e485, + 0x2342c4, + 0x2d4b86, + 0x2d4b87, + 0x2d0204, + 0x37d587, + 0x209a84, + 0x340c44, + 0x340c46, + 0x25d944, + 0x39db46, + 0x207803, + 0x207808, + 0x21a988, + 0x238c83, + 0x2fb983, + 0x3a8c04, + 0x3ae4c3, + 0xd24d5c2, + 0xd6d2fc2, + 0x2083c3, + 0x205646, 0x241383, - 0x58e0c4c2, - 0x22a543, - 0x260883, - 0x213e8a, - 0x22bc87, - 0x241c8c, - 0x241f46, - 0x242406, - 0x246dc7, - 0x592ddb07, - 0x251a09, - 0x21cc04, - 0x252284, - 0x59609f42, - 0x59a01702, - 0x2a5c86, - 0x324904, - 0x2db5c6, - 0x2ab348, - 0x20eec4, - 0x2a3186, - 0x2d68c5, - 0x26ebc8, - 0x205583, - 0x272605, - 0x273583, - 0x2717c3, - 0x2717c4, - 0x273983, - 0x59edeec2, - 0x5a200b42, - 0x276889, - 0x27ec05, - 0x27ee04, - 0x281305, - 0x212504, - 0x2c1247, - 0x33d3c5, - 0x258a04, - 0x258a08, - 0x2dc3c6, - 0x2de404, - 0x2dfdc8, - 0x2e1a87, - 0x5a60e5c2, - 0x305304, - 0x210f44, - 0x2257c7, - 0x5aa53d84, - 0x249682, - 0x5ae01ac2, - 0x21b083, - 0x351144, - 0x242643, - 0x33d945, - 0x5b21de42, - 0x2ebb05, - 0x212bc2, - 0x381dc5, - 0x364305, - 0x5b60c842, - 0x3581c4, - 0x5ba06342, - 0x2a9146, - 0x2ac506, - 0x396208, - 0x2c3608, - 0x3075c4, - 0x2f8905, - 0x2fe809, - 0x2e10c4, - 0x263304, - 0x20aec3, - 0x5be20c45, - 0x2c7087, - 0x25e944, - 0x33a48d, - 0x33c282, - 0x33c283, - 0x355783, - 0x5c200202, - 0x388b45, - 0x26c747, - 0x2a7e04, - 0x32d807, - 0x29d849, - 0x2c9d89, - 0x248ac7, - 0x243843, - 0x27c008, - 0x2f33c9, - 0x2500c7, - 0x370145, - 0x385886, - 0x394246, - 0x3959c5, - 0x257345, - 0x5c603102, - 0x27eb05, - 0x2b8308, - 0x2c5386, - 0x2bcc07, - 0x2f5744, + 0x354bc4, + 0xda4b182, + 0x24cb83, + 0x339c03, + 0x218882, + 0xde03c02, + 0x2c0b06, + 0x23c007, + 0x2eab45, + 0x38a504, + 0x2981c5, + 0x27e687, + 0x2d84c9, + 0x2dcd46, + 0x307788, + 0x2eaa46, + 0xe2010c2, + 0x2f1408, + 0x2f3e06, + 0x223a85, + 0x30fe07, + 0x310344, + 0x310345, + 0x2010c4, + 0x2010c8, + 0xe619382, + 0xea02642, + 0x3292c6, + 0x202648, + 0x34d485, + 0x34df06, + 0x350108, + 0x36d548, + 0xee1f8c5, + 0xf21d0c4, + 0x38ca87, + 0xf60d642, + 0xfaefa02, + 0x10e02c42, + 0x2ef105, + 0x373905, + 0x3c1546, + 0x3208c7, + 0x3973c7, + 0x1160be03, + 0x26f507, + 0x2b99c8, + 0x231a09, + 0x381b07, + 0x2321c7, + 0x232b08, + 0x233306, + 0x233dc6, + 0x234a0c, + 0x235e4a, + 0x2364c7, + 0x23834b, + 0x23be47, + 0x23be4e, + 0x1a23d104, + 0x23d744, + 0x23e847, + 0x2616c7, + 0x243806, + 0x243807, + 0x243c87, + 0x1a630a42, + 0x2449c6, + 0x2449ca, + 0x244f4b, + 0x246d07, + 0x2478c5, + 0x247c03, + 0x248146, + 0x248147, + 0x322643, + 0x1aa022c2, + 0x248a4a, + 0x1af68802, + 0x1b24d602, + 0x1b64afc2, + 0x1ba3e242, + 0x24cc85, + 0x24d2c4, + 0x1c204ac2, + 0x267205, + 0x245543, + 0x20d885, + 0x215bc4, + 0x20f984, + 0x209d86, + 0x2505c6, + 0x289d03, + 0x3b6d84, + 0x3ac2c3, + 0x1ca02e02, + 0x3582c4, + 0x3582c6, + 0x38d005, + 0x36e3c6, + 0x30ff08, + 0x227b84, + 0x397848, + 0x399a45, + 0x311708, + 0x36c6c6, + 0x265847, + 0x27b984, + 0x27b986, + 0x26f803, + 0x3917c3, + 0x20b648, + 0x31c684, + 0x354fc7, + 0x2d2906, + 0x2d2909, + 0x20a1c8, + 0x317908, + 0x338884, + 0x2067c3, + 0x23dd42, + 0x1da4c3c2, + 0x1de14202, + 0x207583, + 0x1e20a502, + 0x3225c4, + 0x2440c6, + 0x335b45, + 0x283403, + 0x234ec4, + 0x2b1a07, + 0x336bc3, + 0x37cfc8, + 0x21ea85, + 0x25f7c3, + 0x275f85, + 0x2760c4, + 0x2f9c06, + 0x222704, + 0x225986, + 0x226306, + 0x357d84, + 0x23c203, + 0x1e614582, + 0x238ac5, + 0x2011c3, + 0x1ea05ec2, + 0x2319c3, + 0x21c8c5, + 0x237583, + 0x237589, + 0x1ee01f02, + 0x1f608ac2, + 0x289645, + 0x219286, + 0x37c8c6, + 0x2bfcc8, + 0x2bfccb, + 0x20568b, + 0x21c145, + 0x2ead45, + 0x2c3909, + 0x1603142, + 0x357f48, + 0x23e504, + 0x1fe01b02, + 0x20aac3, + 0x20661886, + 0x224fc8, + 0x20a003c2, + 0x307348, + 0x20e0a6c2, + 0x23994a, + 0x212c8d03, + 0x39f286, + 0x3b5048, + 0x389ac8, + 0x3ba046, + 0x377d47, + 0x3a2547, + 0x23fe0a, + 0x243404, + 0x352f84, + 0x366b89, + 0x21ba1d45, + 0x21f6c6, + 0x200143, + 0x255184, + 0x21e25784, + 0x323307, + 0x22f607, + 0x364044, + 0x2d3345, + 0x3c1608, + 0x37b847, + 0x38fc87, + 0x22208882, + 0x23b9c4, + 0x28e948, + 0x24e244, + 0x252944, + 0x253005, + 0x253147, + 0x22b509, + 0x254004, + 0x2547c9, + 0x254a08, + 0x254f04, + 0x254f07, + 0x226553c3, + 0x255547, + 0x1626d02, + 0x16ad402, + 0x255e86, + 0x2564c7, + 0x256b04, + 0x258487, + 0x258f47, + 0x259783, + 0x329982, + 0x205dc2, + 0x270003, + 0x270004, + 0x27000b, + 0x3c0fc8, + 0x25f184, + 0x25ad05, + 0x25cac7, + 0x25e5c5, + 0x30590a, + 0x25f0c3, + 0x22a12c42, + 0x212c44, + 0x261489, + 0x265183, + 0x265247, + 0x2f61c9, + 0x336308, + 0x25d1c3, + 0x27a247, + 0x27aa89, + 0x26be83, + 0x281b04, + 0x283c89, + 0x287dc6, + 0x2266c3, + 0x2039c2, + 0x241243, 0x2ad207, - 0x2faf46, - 0x5ca2fb02, - 0x3713c6, - 0x2fd38a, - 0x2fde45, - 0x5cee4742, - 0x5d245702, - 0x30fbc6, - 0x2b25c8, - 0x5d68eb87, - 0x5da04602, - 0x20edc3, - 0x38c706, - 0x2246c4, - 0x3a0f46, - 0x262446, - 0x26bd0a, - 0x319a45, - 0x204446, - 0x218c83, - 0x218c84, - 0x205302, - 0x30c283, - 0x5de05dc2, - 0x2ce903, - 0x3734c4, - 0x2b2704, - 0x2b270a, - 0x229b03, - 0x28a7c8, - 0x229b0a, - 0x23a407, - 0x301446, - 0x2a9004, - 0x296e42, - 0x219542, - 0x5e206e42, - 0x24e1c3, - 0x259307, - 0x330207, - 0x38fd4b, - 0x28a2c4, - 0x34f9c7, - 0x2ef186, - 0x21c607, - 0x258004, - 0x23c445, - 0x2c17c5, - 0x5e620382, - 0x221a86, - 0x246043, - 0x24a2c2, - 0x24a2c6, - 0x5ea04802, - 0x5ee05bc2, - 0x3abd45, - 0x5f222e82, - 0x5f600a42, - 0x343745, - 0x38e6c5, - 0x204505, - 0x270ac3, - 0x390b05, - 0x2e39c7, - 0x309445, - 0x30a985, - 0x3a05c4, - 0x24c646, - 0x25c1c4, - 0x5fa03382, - 0x6060ce05, - 0x36f447, - 0x2db7c8, - 0x2a32c6, - 0x2a32cd, - 0x2a86c9, - 0x2a86d2, - 0x332705, - 0x33c843, - 0x60a044c2, - 0x2f6d84, - 0x204383, - 0x3623c5, - 0x2fed85, - 0x60e17082, - 0x3700c3, - 0x6124d082, - 0x616c3142, - 0x61a18dc2, - 0x364c05, - 0x329ec3, - 0x319888, - 0x61e02d82, - 0x62206902, - 0x2e3386, - 0x34398a, - 0x272243, - 0x25c083, - 0x2ed703, - 0x62e016c2, - 0x71211fc2, - 0x71a19682, - 0x206602, - 0x3711c9, - 0x2c6404, - 0x22fb48, - 0x71ef8b82, - 0x72202502, - 0x2f4d45, - 0x232ac8, - 0x2cf008, - 0x2fd54c, - 0x23bd83, - 0x267002, - 0x726019c2, - 0x2ccf46, - 0x3022c5, - 0x239103, - 0x383586, - 0x302406, - 0x21e2c3, - 0x304ec3, - 0x3055c6, - 0x306204, - 0x225d46, - 0x2d3b45, - 0x30648a, - 0x240544, - 0x307884, - 0x307a4a, - 0x72a037c2, - 0x234605, - 0x30898a, - 0x309a85, - 0x30a344, - 0x30a446, - 0x30a5c4, - 0x228306, - 0x72e39342, - 0x2eadc6, - 0x3a2445, - 0x26bb87, - 0x3a3c46, - 0x246fc4, - 0x2da807, - 0x311586, - 0x25b5c5, - 0x2d4287, - 0x39cd87, - 0x39cd8e, - 0x24abc6, - 0x382905, - 0x285407, - 0x201c43, - 0x201c47, - 0x3b3445, - 0x2108c4, - 0x211882, - 0x22afc7, - 0x31ab04, - 0x22fec4, - 0x24314b, - 0x21d283, - 0x288fc7, - 0x21d284, + 0x383fc5, + 0x340346, + 0x268984, + 0x2dba05, + 0x220d03, + 0x217f86, + 0x20d0c2, + 0x3a3984, + 0x22e2ab02, + 0x22ab03, + 0x23201802, + 0x252843, + 0x217544, + 0x217547, + 0x3c6746, + 0x255e42, + 0x23629942, + 0x384384, + 0x23a30b82, + 0x23e01a42, + 0x337304, + 0x337305, + 0x201a45, + 0x35ab46, + 0x24208742, + 0x208745, + 0x2100c5, + 0x210ac3, + 0x213d06, + 0x214885, + 0x221102, + 0x34db45, + 0x221104, + 0x227ac3, + 0x227d03, + 0x2460ad82, + 0x298507, + 0x33a504, + 0x33a509, + 0x255084, + 0x281903, + 0x35b109, + 0x281908, + 0x24b0cc04, + 0x30cc06, + 0x2a2c83, + 0x20cb03, + 0x30e843, + 0x24eefe82, + 0x375502, + 0x25201402, + 0x32d8c8, + 0x327088, + 0x3a8046, + 0x2544c5, + 0x34f5c5, + 0x31e0c7, + 0x229985, + 0x25cd82, + 0x25694cc2, + 0x1602202, + 0x240a88, + 0x34e285, + 0x27ca84, + 0x2e7205, + 0x241d87, + 0x25efc4, + 0x248942, + 0x25a2dac2, + 0x33e704, + 0x226ec7, + 0x289fc7, + 0x3393c4, + 0x291003, + 0x238bc4, + 0x238bc8, + 0x234106, + 0x2d4a0a, + 0x22b3c4, + 0x291508, + 0x288204, + 0x227546, + 0x294c84, + 0x2ef406, + 0x33a7c9, + 0x26d007, + 0x34e1c3, + 0x25eebfc2, + 0x331203, + 0x207c82, + 0x2625c982, + 0x30cf06, + 0x371e48, + 0x2a44c7, + 0x2f7209, + 0x290ac9, + 0x2a61c5, + 0x2a73c9, + 0x2a7b85, + 0x2a7cc9, + 0x2a9045, + 0x2aa008, + 0x266598c4, + 0x26a598c7, + 0x232583, + 0x2aa207, + 0x232586, + 0x2aa5c7, + 0x2a0f45, + 0x2ca8c3, + 0x26e35c02, + 0x2ea984, + 0x27230bc2, + 0x276552c2, + 0x2f3ac6, + 0x277445, + 0x2acac7, + 0x326403, + 0x32f644, + 0x2130c3, + 0x23b0c3, + 0x27a07d02, + 0x28206202, + 0x37b084, + 0x329943, + 0x24b905, + 0x28603882, + 0x28e00c42, + 0x2e0586, + 0x31c7c4, + 0x385444, + 0x38544a, + 0x29601342, + 0x38e2ca, + 0x39e948, + 0x29a6ff84, + 0x201fc3, + 0x208c43, + 0x3165c9, + 0x267709, + 0x2a6e06, + 0x29e14bc3, + 0x214bc5, + 0x39434d, + 0x39eb06, + 0x20e84b, + 0x2a200802, + 0x220b88, + 0x2ca1a802, + 0x2ce00942, + 0x2c9a85, + 0x2d205842, + 0x21b147, + 0x2b0747, + 0x214a43, + 0x348148, + 0x2d601102, + 0x29f384, + 0x291203, + 0x325545, + 0x395983, + 0x245646, + 0x223504, + 0x2fb943, + 0x2aec03, + 0x2da03202, + 0x2eacc4, + 0x3af385, 0x2ace07, - 0x2824c3, - 0x334b4d, - 0x389388, - 0x228e04, - 0x258905, - 0x30ac85, - 0x30b0c3, - 0x73201a82, - 0x30c243, - 0x30cf43, - 0x221c04, - 0x280785, - 0x223387, - 0x218d06, - 0x373203, - 0x24a40b, - 0x3aa70b, - 0x27928b, - 0x28088a, - 0x2ad8cb, - 0x2fc28b, - 0x2e478c, - 0x2e7291, - 0x32170a, - 0x34e48b, - 0x379d0b, - 0x3b048a, - 0x3b4cca, - 0x30ea4d, - 0x31038e, - 0x3109cb, - 0x310c8a, - 0x312191, - 0x3125ca, - 0x312acb, - 0x31300e, - 0x31398c, - 0x313fcb, - 0x31428e, - 0x31460c, - 0x315a4a, - 0x31694c, - 0x73716c4a, - 0x317449, - 0x31b60a, - 0x31b88a, - 0x31bb0b, - 0x31e9ce, - 0x31ed51, - 0x327a09, - 0x327c4a, - 0x32844b, - 0x32a30a, - 0x32ab96, - 0x32c8cb, - 0x32e00a, - 0x32e5ca, - 0x33048b, - 0x332189, - 0x3354c9, - 0x335a4d, - 0x3360cb, - 0x33734b, - 0x337d0b, - 0x3381c9, - 0x33880e, - 0x338f0a, - 0x33a24a, - 0x33a7ca, - 0x33af8b, - 0x33b7cb, - 0x33ba8d, - 0x33cecd, - 0x33da90, - 0x33df4b, - 0x33e54c, - 0x33ea4b, - 0x34118b, - 0x34290b, - 0x3463cb, - 0x346e4f, - 0x34720b, - 0x347d0a, - 0x348249, - 0x348609, - 0x34898b, - 0x348c4e, - 0x34b98b, - 0x34d04f, - 0x34ff0b, - 0x3501cb, - 0x35048b, - 0x35098a, - 0x355c09, - 0x35a20f, - 0x36128c, - 0x36170c, - 0x36208e, - 0x36388f, - 0x363c4e, - 0x3652d0, - 0x3656cf, - 0x365d4e, - 0x36650c, - 0x366812, - 0x36a511, - 0x36ad0e, - 0x36ba0e, - 0x36bf4e, - 0x36c2cf, - 0x36c68e, - 0x36ca13, - 0x36ced1, - 0x36d30e, - 0x36d78c, - 0x36e493, - 0x36fa90, - 0x37070c, - 0x370a0c, - 0x370ecb, - 0x37184e, - 0x371f8b, - 0x3727cb, - 0x37378c, - 0x37914a, - 0x37950c, - 0x37980c, - 0x379b09, - 0x37b7cb, - 0x37ba88, - 0x37bc89, - 0x37bc8f, - 0x37d5cb, - 0x37e44a, - 0x37fd4c, - 0x380e09, - 0x381b88, - 0x38214b, - 0x382c0b, - 0x38418a, - 0x38440b, - 0x38488c, - 0x385548, - 0x38958b, - 0x38c04b, - 0x39000b, - 0x39180b, - 0x39c90b, - 0x39cbc9, - 0x39d10d, - 0x3a264a, - 0x3a3597, - 0x3a3dd8, - 0x3a6309, - 0x3a7b4b, - 0x3a9554, - 0x3a9a4b, - 0x3a9fca, - 0x3ab70a, - 0x3ab98b, - 0x3ad110, - 0x3ad511, - 0x3ae64a, - 0x3afa8d, - 0x3b018d, - 0x3b508b, - 0x3b5c46, - 0x221b83, - 0x73b76c03, - 0x37f706, - 0x292c85, - 0x396787, - 0x3215c6, - 0x1639f02, - 0x2b3809, - 0x32fd44, - 0x2e0bc8, - 0x24e103, - 0x2f6cc7, - 0x241b82, - 0x2b2c03, - 0x73e06c82, - 0x2cb006, - 0x2cc544, - 0x3b2e84, - 0x2616c3, - 0x2616c5, - 0x746c7282, - 0x74aae504, - 0x279747, - 0x1669e02, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x20fbc3, - 0x204ac3, - 0x200383, - 0x20abc3, - 0x204cc2, - 0x15f048, - 0x20d1c2, - 0x332ec3, - 0x20fbc3, - 0x204ac3, - 0x200383, - 0x213e83, - 0x324156, - 0x325393, - 0x34f849, - 0x2957c8, - 0x364689, - 0x308b06, - 0x336f50, - 0x25c9d3, - 0x3072c8, - 0x344207, - 0x27e407, - 0x2475ca, - 0x373549, - 0x239789, - 0x29258b, - 0x367e06, - 0x314aca, - 0x2221c6, - 0x32f943, - 0x294985, - 0x22b888, - 0x2a920d, - 0x35ab0c, - 0x3a2107, - 0x379f8d, - 0x20c504, - 0x22ef0a, - 0x23064a, - 0x230b0a, - 0x20fe87, - 0x240387, - 0x243084, - 0x26cdc6, - 0x3aab84, - 0x2e26c8, - 0x2267c9, - 0x2b94c6, - 0x2b94c8, - 0x24c34d, - 0x2c9fc9, - 0x207d48, - 0x271647, - 0x2f8e8a, - 0x2539c6, - 0x2642c7, - 0x2c96c4, - 0x28e807, - 0x332eca, - 0x36f5ce, - 0x228fc5, - 0x28e70b, - 0x262089, - 0x2a8909, - 0x2129c7, - 0x29998a, - 0x225707, - 0x2ffd09, - 0x326b48, - 0x35dc4b, - 0x2e0405, - 0x38144a, - 0x223109, - 0x23908a, - 0x2ccb4b, - 0x383a0b, - 0x292315, - 0x2e6185, - 0x2716c5, - 0x2f424a, - 0x25980a, - 0x261e07, - 0x21d743, - 0x2a5c08, - 0x2d828a, - 0x223706, - 0x24ff09, - 0x26ebc8, - 0x2de404, - 0x242649, - 0x2c3608, - 0x2b1c07, - 0x20ce06, - 0x36f447, - 0x293cc7, - 0x242ac5, - 0x228e0c, - 0x258905, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x204ac3, - 0x200383, - 0x20d1c2, - 0x2d0783, - 0x204ac3, - 0x20abc3, - 0x200383, - 0x2d0783, - 0x204ac3, - 0x24a843, - 0x200383, - 0x15f048, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x20fbc3, - 0x204ac3, - 0x200383, - 0x15f048, - 0x20d1c2, - 0x2000c2, - 0x230d42, - 0x202f02, - 0x202382, - 0x261e82, - 0x46d0783, - 0x231b83, - 0x2135c3, - 0x332ec3, - 0x204303, + 0x277e03, + 0x2ad9c3, + 0x2ae803, + 0x16ae8c2, + 0x2ae8c3, + 0x2aeb83, + 0x2de0b0c2, + 0x39e304, + 0x2507c6, + 0x22a443, + 0x2af343, + 0x2e2b0102, + 0x2b0108, + 0x2b03c4, + 0x2ee8c6, + 0x256947, + 0x3845c6, + 0x2a4f04, + 0x3be01ec2, + 0x23244b, + 0x2ff28e, + 0x219e0f, + 0x2c7b83, + 0x3c65fe82, + 0x1647302, + 0x3ca00a82, + 0x25b4c3, + 0x205983, + 0x2d8746, + 0x2f1946, + 0x3c2147, + 0x2f9084, + 0x3ce193c2, + 0x3d21edc2, + 0x2425c5, + 0x2e44c7, + 0x37fd86, + 0x3d64d542, + 0x30de04, + 0x2b7b43, + 0x3da09602, + 0x3df63443, + 0x2b8444, + 0x2bd289, + 0x16c2482, + 0x3e20dd82, + 0x327e05, + 0x3e6c2702, + 0x3ea00682, + 0x352307, + 0x214fc9, + 0x36754b, + 0x3a2305, + 0x26ad09, + 0x37e806, + 0x20bd47, + 0x3ee074c4, + 0x348c89, + 0x337b07, + 0x224c87, + 0x230803, + 0x2afc46, + 0x30a7c7, 0x20fbc3, - 0x204ac3, - 0x200383, - 0x201383, - 0x15f048, - 0x32df04, - 0x260087, - 0x263d43, - 0x37aa84, - 0x214543, - 0x212a43, - 0x332ec3, - 0x13ecc7, - 0x204cc2, - 0x168883, - 0x5a0d1c2, - 0x8d54d, - 0x8d88d, - 0x230d42, - 0x964c4, - 0x200382, - 0x5e963c8, - 0xf39c4, - 0x15f048, - 0x14020c2, - 0x1509cc6, - 0x20e443, - 0x26ae03, - 0x66d0783, - 0x22ef04, - 0x6a31b83, - 0x6f32ec3, - 0x20a3c2, - 0x2964c4, - 0x204ac3, - 0x2fc883, - 0x201882, - 0x200383, - 0x21c802, - 0x2f8043, - 0x202602, - 0x203f83, - 0x26ec83, - 0x206d02, - 0x15f048, - 0x20e443, - 0x2fc883, - 0x201882, - 0x2f8043, - 0x202602, - 0x203f83, - 0x26ec83, - 0x206d02, - 0x2f8043, - 0x202602, - 0x203f83, - 0x26ec83, + 0x2f0d46, + 0x3f6038c2, + 0x3fa0e402, + 0x3bec83, + 0x32f245, + 0x332807, + 0x222386, + 0x383f45, + 0x2f3f04, + 0x278f45, + 0x2f2144, + 0x3fe00f82, + 0x341587, + 0x2f2984, + 0x26a444, + 0x34694d, + 0x26a449, + 0x230b08, + 0x25c404, + 0x335ec5, + 0x20a047, + 0x341144, + 0x23cf47, + 0x204cc5, + 0x402a4e44, + 0x30bcc5, + 0x263e44, + 0x390706, + 0x3206c5, + 0x406291c2, + 0x210fc4, + 0x210fc5, + 0x35d8c6, + 0x343b85, + 0x25d144, + 0x3c6103, + 0x20eb46, + 0x22b705, + 0x22f045, + 0x3207c4, + 0x22b443, + 0x22b44c, + 0x40aacf02, + 0x40e0a5c2, + 0x41201542, + 0x20f003, + 0x20f004, + 0x41604482, + 0x30ae88, + 0x340405, + 0x236184, + 0x243686, + 0x41a0e302, + 0x41e1de42, + 0x422000c2, + 0x2b2cc5, + 0x294346, + 0x229304, + 0x357946, + 0x35c206, + 0x222a83, + 0x4272850a, + 0x26b085, + 0x28b003, + 0x228606, + 0x304789, + 0x228607, + 0x292288, + 0x2c7789, + 0x31d348, + 0x250e46, + 0x209703, + 0x42a6f582, + 0x392c08, + 0x42e54ac2, + 0x43201e42, + 0x20be83, + 0x2d8345, + 0x26ba04, + 0x3b6fc9, + 0x2ee004, + 0x21b388, + 0x20dc03, + 0x323004, + 0x2a5fc3, + 0x2192c8, + 0x346887, + 0x43a25242, + 0x290ec2, + 0x31a685, + 0x39cf89, + 0x21f743, + 0x27bfc4, + 0x394304, + 0x20a0c3, + 0x27d04a, + 0x43f7c0c2, + 0x44210f82, + 0x2c3143, + 0x37ea83, + 0x1600082, + 0x200083, + 0x44603282, + 0x44a05a02, + 0x44e1a484, + 0x322046, + 0x2e07c6, + 0x245e44, + 0x277043, + 0x345c03, + 0x2ec1c3, + 0x2452c6, + 0x341d05, + 0x2c32c7, + 0x2c6445, + 0x2c7d86, + 0x2c8708, + 0x2c8906, + 0x24efc4, + 0x29960b, + 0x2cb583, + 0x2cb585, + 0x2cba08, + 0x21a202, + 0x352602, + 0x4524cd02, + 0x4560d682, + 0x219403, + 0x45a6cd82, + 0x26cd83, + 0x2cbd04, + 0x2cc543, + 0x462168c2, + 0x466d0e06, + 0x25e446, + 0x46ad0f42, + 0x46e0ff02, + 0x47227d42, + 0x4763a3c2, + 0x47a1b5c2, + 0x47e047c2, + 0x20dec3, + 0x358645, + 0x2b6306, + 0x48226444, + 0x38ce0a, + 0x3a0546, + 0x21c384, + 0x277943, + 0x48e02f02, + 0x2032c2, + 0x26fb43, + 0x4920ec83, + 0x2e6747, + 0x3205c7, + 0x4aa70107, + 0x393f87, + 0x22cd03, + 0x3176ca, + 0x251304, + 0x397504, + 0x39750a, + 0x247705, + 0x4ae1f682, + 0x258443, + 0x4b202002, + 0x228803, + 0x3311c3, + 0x4ba02742, + 0x26f484, + 0x220704, + 0x2046c5, + 0x3080c5, + 0x34e4c6, + 0x34e846, + 0x4be53982, + 0x4c201382, + 0x2f8545, + 0x25e152, + 0x33f206, + 0x25e8c3, + 0x39d486, + 0x2a1f45, + 0x1604842, + 0x54610c82, + 0x35e3c3, + 0x210c83, + 0x27e483, + 0x54a0c502, + 0x381c43, + 0x54e06e02, + 0x200843, + 0x39e348, + 0x285603, + 0x2a6046, + 0x23ecc7, + 0x30b986, + 0x30b98b, + 0x21c2c7, + 0x2ea784, + 0x55601c82, + 0x340285, + 0x55a09cc3, + 0x292c83, + 0x239b45, + 0x3175c3, + 0x55f175c6, + 0x3580ca, + 0x245ac3, + 0x23e004, + 0x202586, + 0x223e86, + 0x56241d03, + 0x32f507, + 0x2a6d07, + 0x29ae85, + 0x311986, + 0x22b743, + 0x58e13f43, + 0x59206f02, + 0x21a244, + 0x207609, + 0x240887, + 0x229a85, + 0x247d04, + 0x26c7c8, + 0x273b85, + 0x59676405, + 0x284e49, + 0x347a43, + 0x24d584, + 0x59a0b182, + 0x219603, + 0x59e94742, + 0x299986, + 0x162bac2, + 0x5a2a47c2, + 0x2b2bc8, + 0x3a76c3, + 0x30bc07, + 0x2ce245, + 0x2b2785, + 0x2d8e4b, + 0x2d9846, + 0x2d9046, + 0x2dc486, + 0x279f04, + 0x2dc6c6, + 0x5a6f0248, + 0x237cc3, + 0x201f83, + 0x201f84, + 0x2ddbc4, + 0x2dde87, + 0x2df2c5, + 0x5aadf402, + 0x5ae08302, + 0x208305, + 0x2bb184, + 0x2e298b, + 0x2e3708, + 0x298804, + 0x230982, + 0x5b64e882, + 0x24e883, + 0x2e3f04, + 0x2e41c5, + 0x2e4d07, + 0x2e6d44, + 0x21c184, + 0x5ba057c2, + 0x36b449, + 0x2e84c5, + 0x3a25c5, + 0x2e9045, + 0x5be19543, + 0x2e9d04, + 0x2e9d0b, + 0x2ea0c4, + 0x2ea38b, + 0x2ec105, + 0x219f4a, + 0x2ecec8, + 0x2ed0ca, + 0x2ed983, + 0x2ed98a, + 0x5c21fc42, + 0x5c648602, + 0x209943, + 0x5caf1382, + 0x2f1383, + 0x5cf6c182, + 0x5d32c442, + 0x2f1fc4, + 0x21a846, + 0x357685, + 0x2f3d83, + 0x31adc6, + 0x34f085, + 0x250ac4, + 0x5d600382, + 0x2aefc4, + 0x2c358a, + 0x398a07, + 0x3477c6, + 0x24f3c7, + 0x244a03, + 0x2b8488, + 0x3a1f8b, + 0x2bd905, + 0x27c785, + 0x27c786, + 0x2dd704, + 0x3b5288, + 0x21d343, + 0x230004, + 0x230007, + 0x2f4a06, + 0x31fa06, + 0x2e200a, + 0x254844, + 0x31104a, + 0x5db364c6, + 0x3364c7, + 0x25ad87, + 0x273544, + 0x273549, + 0x250485, + 0x31cf4b, + 0x2e1283, + 0x225b43, + 0x5de20b43, + 0x2344c4, + 0x5e200982, + 0x3a3006, + 0x5e6ca645, + 0x39d6c5, + 0x258c46, + 0x29cd44, + 0x5ea07bc2, + 0x247c44, + 0x5ee16f02, + 0x224645, + 0x23f4c4, + 0x228d83, + 0x5f610cc2, + 0x210cc3, + 0x267b86, + 0x5fa00a02, + 0x2073c8, + 0x228484, + 0x228486, + 0x37f306, + 0x25cb84, + 0x20eac5, + 0x21cfc8, + 0x220f87, + 0x2227c7, + 0x2227cf, + 0x28e846, + 0x309bc3, + 0x398184, + 0x233744, + 0x2101c3, + 0x227684, + 0x34fd84, + 0x5fe030c2, + 0x289a43, + 0x372e83, + 0x60207c02, + 0x25c503, + 0x322683, + 0x21578a, + 0x207c07, + 0x2534cc, + 0x253786, + 0x255246, + 0x256647, + 0x60632f47, + 0x25c889, + 0x22c504, + 0x25eb04, + 0x60a09f82, + 0x60e01282, + 0x2e23c6, + 0x32f304, + 0x2d3146, + 0x2333c8, + 0x239444, + 0x21b186, + 0x37c885, + 0x285048, + 0x205883, + 0x28a685, + 0x290cc3, + 0x3a26c3, + 0x3a26c4, + 0x212c03, + 0x6125fd82, + 0x61603a42, + 0x2e1149, + 0x299885, + 0x2a1084, + 0x2a4a45, + 0x212384, + 0x393607, + 0x353f05, + 0x2702c4, + 0x2702c8, + 0x2e61c6, + 0x2e9f84, + 0x2ede88, + 0x2f27c7, + 0x61a04042, + 0x316244, + 0x210284, + 0x224e87, + 0x61e04044, + 0x2c9002, + 0x6220ed42, + 0x221b83, + 0x2d37c4, + 0x29bb43, + 0x2aacc5, + 0x6262e642, + 0x2fddc5, + 0x23a382, + 0x390c85, + 0x372005, + 0x62a04e02, + 0x339b84, + 0x62e06a42, + 0x3aba46, + 0x3a7346, + 0x39d0c8, + 0x2be888, + 0x2f3a44, + 0x303685, + 0x316049, + 0x2eadc4, + 0x358084, + 0x2b6983, + 0x6320fd85, + 0x2c2547, + 0x21fc84, + 0x3ae54d, + 0x2f4682, + 0x3b35c3, + 0x2f4683, + 0x63601b42, + 0x396e45, + 0x223747, + 0x2b9604, + 0x394047, + 0x2c7989, + 0x2c36c9, + 0x275247, + 0x202bc3, + 0x3a7508, + 0x25b949, + 0x2f5487, + 0x2f5805, + 0x2f6706, + 0x2f6d46, + 0x2f6ec5, + 0x26a545, + 0x63a00d42, + 0x2b7685, + 0x2b3a08, + 0x2c08c6, + 0x63e872c7, + 0x2ec344, + 0x2b8047, + 0x2f9206, + 0x6420a402, + 0x35d5c6, + 0x2fc9ca, + 0x2fd245, + 0x646da942, + 0x64a4eb02, + 0x30ab06, + 0x386548, + 0x64e8a187, + 0x6523c902, + 0x215c43, + 0x20c246, + 0x229144, + 0x3b2f86, + 0x201746, + 0x34290a, + 0x325e45, + 0x3559c6, + 0x39ec43, + 0x39ec44, + 0x202c02, + 0x31c743, + 0x6560f042, + 0x30b743, + 0x38e544, + 0x2b2484, + 0x38668a, + 0x214c43, + 0x277208, + 0x250f0a, + 0x23f747, + 0x300986, + 0x260484, + 0x21c242, + 0x2a3702, + 0x65a02982, + 0x238b83, + 0x25ab47, + 0x202987, + 0x284d04, + 0x3a4f87, + 0x2e4e06, + 0x221287, + 0x303304, + 0x399d85, + 0x292705, + 0x65e1b2c2, + 0x3c50c6, + 0x223443, + 0x22a4c2, + 0x22a4c6, + 0x66222342, + 0x6660e982, + 0x3bb945, + 0x66a27882, + 0x66e01c42, + 0x334e85, + 0x2c51c5, + 0x355a85, + 0x289043, + 0x244185, + 0x2d9907, + 0x2feb45, + 0x370005, + 0x33d8c4, + 0x310806, + 0x381d44, + 0x67202a82, + 0x67ee7585, + 0x2a3ac7, + 0x34f408, + 0x261146, + 0x26114d, + 0x2674c9, + 0x2674d2, + 0x300585, + 0x309f43, + 0x6820c202, + 0x30ee44, + 0x39eb83, + 0x33b0c5, + 0x2fdf05, + 0x68630882, + 0x25f803, + 0x68a51b02, + 0x692d6142, + 0x69602242, + 0x2a1d45, + 0x394183, + 0x3c4f08, + 0x69a0ad42, + 0x69e0c842, + 0x26f446, + 0x317c4a, + 0x20e043, + 0x25d0c3, + 0x337d03, + 0x6aa04182, + 0x78e0c542, + 0x79600d82, 0x206d02, - 0x2d0783, - 0x368883, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x2964c4, - 0x204303, - 0x20fbc3, - 0x213184, - 0x204ac3, - 0x200383, - 0x210582, - 0x21aa03, - 0x15f048, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x20fbc3, - 0x204ac3, - 0x200383, - 0x368883, - 0x20d1c2, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x2964c4, - 0x204ac3, - 0x200383, - 0x370145, - 0x217082, - 0x204cc2, - 0x15f048, - 0x1491b48, - 0x332ec3, - 0x2461c1, - 0x2096c1, - 0x202201, - 0x209441, - 0x24a5c1, - 0x27e081, - 0x24c0c1, - 0x2462c1, - 0x2e7481, - 0x30ed01, - 0x200141, + 0x35d3c9, + 0x2c18c4, + 0x2a9348, + 0x79af3dc2, + 0x79e01ac2, + 0x2ea5c5, + 0x238788, + 0x39e488, + 0x268b8c, + 0x23f683, + 0x7a263802, + 0x7a611d82, + 0x270d46, + 0x301805, + 0x2787c3, + 0x253c06, + 0x301946, + 0x29bc83, + 0x303b03, + 0x303f46, + 0x304b84, + 0x239a46, + 0x214a05, + 0x214a0a, + 0x24c1c4, + 0x305244, + 0x305b8a, + 0x7aa04982, + 0x24c345, + 0x30798a, + 0x308305, + 0x308bc4, + 0x308cc6, + 0x308e44, + 0x2198c6, + 0x7ae308c2, + 0x2f3446, + 0x341ac5, + 0x325cc7, + 0x3adf46, + 0x256844, + 0x2d2387, + 0x328446, + 0x241a05, + 0x241a07, + 0x3aed07, + 0x3aed0e, + 0x2ebb06, + 0x23ce05, + 0x203f87, + 0x20ff43, + 0x20ff47, + 0x217945, + 0x22f484, + 0x22f5c2, + 0x246087, + 0x2f9104, + 0x244dc4, + 0x290d4b, + 0x220003, + 0x2e58c7, + 0x220004, + 0x2e6047, + 0x2903c3, + 0x33ca0d, + 0x3998c8, + 0x2297c4, + 0x2701c5, + 0x30b205, + 0x30b643, + 0x7b228382, + 0x30d5c3, + 0x30da83, + 0x321c04, + 0x27ab85, + 0x3c5247, + 0x39ecc6, + 0x37c1c3, + 0x22a60b, + 0x30e04b, + 0x2a5c8b, + 0x2fa5cb, + 0x2bd60a, + 0x30548b, + 0x3245cb, + 0x360a8c, + 0x384f4b, + 0x3c4351, + 0x3c5d4a, + 0x30f5cb, + 0x30f88c, + 0x30fb8b, + 0x31010a, + 0x311bca, + 0x312bce, + 0x31324b, + 0x31350a, + 0x3145d1, + 0x314a0a, + 0x314f0b, + 0x31544e, + 0x315d8c, + 0x316b8b, + 0x316e4e, + 0x3171cc, + 0x318d4a, + 0x31a04c, + 0x7b71a34a, + 0x31af48, + 0x31ba49, + 0x32368a, + 0x32390a, + 0x323b8b, + 0x328b4e, + 0x328ed1, + 0x330349, + 0x33058a, + 0x330bcb, + 0x332a4a, + 0x333296, + 0x334b8b, + 0x33784a, + 0x33818a, + 0x33908b, + 0x33ab49, + 0x33d389, + 0x33de0d, + 0x33e48b, + 0x33f38b, + 0x33fd4b, + 0x343d49, + 0x34438e, + 0x34500a, + 0x34a4ca, + 0x34a7ca, + 0x34afcb, + 0x34b80b, + 0x34bacd, + 0x34d18d, + 0x34d7d0, + 0x34dc8b, + 0x34f9cc, + 0x34fe8b, + 0x351e0b, + 0x35344e, + 0x353a0b, + 0x353a0d, + 0x35964b, + 0x35a0cf, + 0x35a48b, + 0x35acca, + 0x35b3c9, + 0x35ba89, + 0x35cd4b, + 0x35d00e, + 0x35e88b, + 0x35f64f, + 0x36160b, + 0x3618cb, + 0x361b8b, + 0x36238a, + 0x367149, + 0x36a18f, + 0x36f54c, + 0x37038c, + 0x37108e, + 0x37158f, + 0x37194e, + 0x3722d0, + 0x3726cf, + 0x3731ce, + 0x373f8c, + 0x374292, + 0x375211, + 0x375a0e, + 0x375e8e, + 0x3763ce, + 0x37674f, + 0x376b0e, + 0x376e93, + 0x377351, + 0x37778c, + 0x377a8e, + 0x377f0c, + 0x378513, + 0x378ed0, + 0x37970c, + 0x379a0c, + 0x379ecb, + 0x37ac8e, + 0x37b18b, + 0x37b5cb, + 0x37ca4c, + 0x3825ca, + 0x38474c, + 0x384a4c, + 0x384d49, + 0x387e0b, + 0x3880c8, + 0x388889, + 0x38888f, + 0x38a08b, + 0x7bb8afca, + 0x38e8cc, + 0x38fa89, + 0x390a48, + 0x39100b, + 0x39158b, + 0x39220a, + 0x39248b, + 0x39298c, + 0x393d48, + 0x39a40b, + 0x39d80b, + 0x3a114e, + 0x3a27cb, + 0x3a410b, + 0x3ae88b, + 0x3aeb49, + 0x3af08d, + 0x3b368a, + 0x3b45d7, + 0x3b5cd8, + 0x3b9749, + 0x3bb58b, + 0x3bc1d4, + 0x3bc6cb, + 0x3bcc4a, + 0x3bd14a, + 0x3bd3cb, + 0x3bf610, + 0x3bfa11, + 0x3c00ca, + 0x3c394d, + 0x3c404d, + 0x3c61cb, + 0x3c6a06, + 0x3c51c3, + 0x7bf74a03, + 0x2dd1c6, + 0x245a05, + 0x252087, + 0x324486, + 0x1601182, + 0x2cbe89, + 0x31abc4, + 0x2d8988, + 0x220a83, + 0x30ed87, + 0x201c02, + 0x2acb03, + 0x7c200dc2, + 0x2c4946, + 0x2c5c84, + 0x21a604, + 0x349a43, + 0x349a45, + 0x7cac2742, + 0x7cea8044, + 0x273487, + 0x7d22f442, + 0x20be03, + 0x237583, + 0x30e843, + 0x21f743, + 0x20ec83, + 0x241d03, + 0x20ae43, + 0x200742, + 0xcd588, + 0x202c42, + 0x30e843, + 0x21f743, + 0x20ec83, + 0xae43, + 0x241d03, + 0x207c03, + 0x32eb56, + 0x356d13, + 0x3a4e09, + 0x38c988, + 0x340109, + 0x307b06, + 0x33e750, + 0x248c93, + 0x2f4ac8, + 0x2a5687, + 0x2b6f87, + 0x278c8a, + 0x38e5c9, + 0x342549, + 0x28b30b, + 0x31ca86, + 0x20850a, + 0x225f06, + 0x31a7c3, + 0x298445, + 0x207808, + 0x3abb0d, + 0x2ef1cc, + 0x35cac7, + 0x312f0d, + 0x21d0c4, + 0x23478a, + 0x23598a, + 0x235e4a, + 0x21fa07, + 0x243507, + 0x245fc4, + 0x27b986, + 0x3264c4, + 0x2e01c8, + 0x2ee049, + 0x2bfcc6, + 0x2bfcc8, + 0x24944d, + 0x2c3909, + 0x389ac8, + 0x3a2547, + 0x2f1c0a, + 0x2564c6, + 0x260fc7, + 0x306a04, + 0x214707, + 0x3105ca, + 0x378a0e, + 0x229985, + 0x3bfe0b, + 0x300389, + 0x267709, + 0x2b0587, + 0x3694ca, + 0x224dc7, + 0x2ff3c9, + 0x31e5c8, + 0x239e8b, + 0x2d8345, + 0x2309ca, + 0x227b09, + 0x3abe0a, + 0x2c64cb, + 0x21460b, + 0x28b095, + 0x306745, + 0x3a25c5, + 0x2e9d0a, + 0x2a6f0a, + 0x300107, + 0x2388c3, + 0x2e2348, + 0x2cf00a, + 0x228486, + 0x25b789, + 0x285048, + 0x2e9f84, + 0x29bb49, + 0x2be888, + 0x36c607, + 0x2e7586, + 0x2a3ac7, + 0x2ac6c7, + 0x2450c5, + 0x2297cc, + 0x2701c5, + 0x20be03, + 0x237583, + 0x30e843, + 0x20ec83, + 0x241d03, + 0x202c42, + 0x20be03, + 0x20ec83, + 0x20ae43, + 0x241d03, + 0x20be03, + 0x20ec83, + 0xae43, + 0x285603, + 0x241d03, + 0xcd588, + 0x20be03, + 0x237583, + 0x30e843, + 0x21f743, + 0x20ec83, + 0xae43, + 0x241d03, + 0xcd588, + 0x202c42, + 0x209d42, + 0x236082, + 0x201102, + 0x2013c2, + 0x2db482, + 0x460be03, + 0x237583, + 0x203d43, + 0x30e843, + 0x214bc3, + 0x21f743, + 0x2d1206, + 0x20ec83, + 0x241d03, + 0x238843, + 0xcd588, + 0x323584, + 0x322dc7, + 0x34a403, + 0x2402c4, + 0x21b903, + 0x283cc3, + 0x30e843, + 0x15da87, + 0x1221c4, + 0x121b83, + 0xf45, + 0x200742, + 0xb6c03, + 0x5a02c42, + 0x1488d09, + 0x891cd, + 0x8950d, + 0x236082, + 0x6ff84, + 0xf89, + 0x200342, + 0x5f8d588, + 0xe9484, + 0xcd588, + 0x1426502, + 0x1508546, + 0x233603, + 0x2b8283, + 0x660be03, + 0x234784, + 0x6a37583, + 0x6f0e843, + 0x207d02, + 0x26ff84, + 0x20ec83, + 0x2fbbc3, + 0x2056c2, + 0x241d03, + 0x21c4c2, + 0x2f1f03, + 0x200a02, + 0x29d2c3, + 0x26f883, + 0x20fc42, + 0xcd588, + 0x233603, + 0x2fbbc3, + 0x2056c2, + 0x2f1f03, + 0x200a02, + 0x29d2c3, + 0x26f883, + 0x20fc42, + 0x2f1f03, + 0x200a02, + 0x29d2c3, + 0x26f883, + 0x20fc42, + 0x20be03, + 0x2b6c03, + 0x20be03, + 0x237583, + 0x30e843, + 0x26ff84, + 0x214bc3, + 0x21f743, + 0x226444, + 0x20ec83, + 0x241d03, + 0x204bc2, + 0x219543, + 0xcd588, + 0x20be03, + 0x237583, + 0x30e843, + 0x21f743, + 0x20ec83, + 0x241d03, + 0x2b6c03, + 0x202c42, + 0x20be03, + 0x237583, + 0x30e843, + 0x26ff84, + 0x20ec83, + 0x241d03, + 0x2f5805, + 0x230882, + 0x200742, + 0xcd588, + 0x1455908, + 0x1367ca, + 0x30e843, 0x200001, - 0x15f048, - 0x200701, + 0x202081, + 0x200ec1, + 0x200f01, + 0x200f41, + 0x20d701, + 0x312181, + 0x203801, + 0x24b241, + 0x2021c1, 0x200101, - 0x2000c1, - 0x201e41, - 0x200181, - 0x200941, + 0x200301, + 0x117485, + 0xcd588, + 0x200781, + 0x2014c1, 0x200041, - 0x204ec1, - 0x200081, - 0x201481, + 0x200141, + 0x201401, + 0x200901, + 0x200541, 0x200c01, + 0x200a81, + 0x200641, + 0x200081, + 0x2001c1, + 0x200341, + 0x201681, + 0x20ab41, 0x2002c1, - 0x200381, - 0x200e81, - 0x21c2c1, - 0x2003c1, - 0x200201, - 0x200241, 0x200a01, - 0x2019c1, - 0x201a81, - 0x2005c1, - 0x2007c1, - 0x200cc1, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x204ac3, - 0x200383, - 0x20d1c2, - 0x2d0783, - 0x231b83, - 0x200382, - 0x200383, - 0x13ecc7, - 0xfcc7, - 0x28b86, - 0x3dcca, - 0x8cc48, - 0x58dc8, - 0x59207, - 0x62a46, - 0xde185, - 0x63c85, - 0x177ac6, - 0x125886, - 0x24ae04, - 0x31cdc7, - 0x15f048, - 0x2da904, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x204ac3, - 0x200383, - 0x2d0783, - 0x231b83, - 0x2135c3, - 0x332ec3, - 0x204303, - 0x20fbc3, - 0x204ac3, - 0x200383, - 0x217082, - 0x2c8dc3, - 0x21fd43, - 0x200603, - 0x202942, - 0x251d43, - 0x205283, - 0x21e743, - 0x200001, - 0x203e43, - 0x225b04, - 0x37f1c3, - 0x318cc3, - 0x21c403, - 0x360383, - 0xaad0783, - 0x23a184, - 0x21c3c3, - 0x22f143, - 0x231b83, - 0x2318c3, - 0x23a943, - 0x2a85c3, - 0x318c43, - 0x233ec3, - 0x201e43, - 0x253f84, - 0x2abc02, - 0x258683, - 0x25eb43, - 0x27bfc3, - 0x262883, - 0x201dc3, - 0x332ec3, - 0x208803, - 0x209e43, - 0x204143, - 0x210203, - 0x2ff083, - 0xae30043, - 0x2b1083, - 0x2113c3, - 0x22d603, - 0x20fbc3, - 0x226302, - 0x201683, - 0x204ac3, - 0x160abc3, - 0x27d643, - 0x20ff03, - 0x216ec3, - 0x200383, - 0x3b37c3, - 0x21aa03, - 0x241f03, - 0x304f43, - 0x2f8203, - 0x30c845, - 0x2202c3, - 0x2f8243, - 0x35ed83, - 0x218c84, - 0x265203, - 0x311883, - 0x2d8fc3, - 0x201383, - 0x217082, - 0x23bd83, - 0x308484, - 0x22fec4, - 0x22a843, - 0x15f048, - 0x4cc2, - 0x1442, - 0x2942, - 0x5ac2, - 0x2302, - 0x702, - 0x4e242, - 0x1c2, - 0x8a42, - 0xc02, - 0xf302, - 0xb602, - 0x73fc2, - 0x4c82, - 0x61e82, - 0x17902, - 0x3cf82, - 0x54c2, - 0x18b82, - 0xfc2, - 0x682, - 0x1bb82, - 0x1f82, - 0xc4c2, - 0x1702, - 0x20c42, - 0xa42, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x204ac3, - 0x200383, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x204ac3, - 0x200383, - 0x20d1c2, - 0x200383, - 0xc2d0783, - 0x332ec3, - 0x20fbc3, - 0x20dc42, - 0x15f048, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x204ac3, - 0x200383, - 0x6c82, - 0x2031c2, - 0x24ac42, - 0x15f048, - 0xd1c2, - 0x233482, - 0x208842, - 0x22f942, - 0x204182, - 0x209282, - 0x63c85, - 0x204702, - 0x201882, - 0x211f82, - 0x2034c2, - 0x217902, - 0x384982, - 0x201ac2, - 0x245742, - 0x13ecc7, - 0x169a8d, - 0xde209, - 0x56bcb, - 0xe3888, - 0x55109, - 0x332ec3, - 0x15f048, - 0x15f048, - 0x59b46, - 0x204cc2, - 0x24ae04, - 0x20d1c2, - 0x2d0783, + 0x200401, + 0x200441, + 0x201ac1, + 0x203f81, + 0x20d601, + 0x201181, + 0x200dc1, + 0x20be03, + 0x237583, + 0x30e843, + 0x20ec83, + 0x241d03, + 0x202c42, + 0x20be03, + 0x237583, + 0x200342, + 0x241d03, + 0x15da87, + 0x1f847, + 0x29546, + 0x4160a, + 0x88348, + 0x5a588, + 0x5aa47, + 0x86, + 0xd61c5, + 0x14a345, + 0x7dac6, + 0x157206, + 0x28b304, + 0x340547, + 0xcd588, + 0x2d2484, + 0x20be03, + 0x237583, + 0x30e843, + 0x20ec83, + 0x241d03, + 0x31a548, + 0x31e084, + 0x2374c4, + 0x22aa44, + 0x270c47, + 0x2cde07, + 0x20be03, + 0x23d74b, + 0x31b7ca, + 0x31cd47, + 0x2fc048, + 0x3255c8, + 0x237583, + 0x346c47, + 0x203d43, + 0x37c208, + 0x335049, + 0x26ff84, + 0x214bc3, + 0x2dce48, + 0x21f743, + 0x2cb6ca, + 0x2d1206, + 0x3a0547, + 0x20ec83, + 0x2da606, + 0x309308, + 0x241d03, + 0x28d806, + 0x2e394d, + 0x2e49c8, + 0x2ea0cb, + 0x331e86, + 0x348087, + 0x20f605, + 0x2ef98a, + 0x22bfc5, + 0x36210a, + 0x230882, + 0x203f83, + 0x244dc4, + 0x2021c6, + 0x3a7a03, + 0x2af043, + 0x24be43, + 0x23b003, + 0x349183, + 0x200582, + 0x2d7285, + 0x2a6589, + 0x245743, + 0x205583, + 0x202fc3, + 0x200301, + 0x2a1a85, + 0x39da83, + 0x2053c3, + 0x22aa44, + 0x326443, + 0x214948, + 0x2ec443, + 0x302e8d, + 0x2ebbc8, + 0x21ab46, + 0x31c783, + 0x378983, + 0x381cc3, + 0xaa0be03, + 0x236dc8, + 0x23d744, + 0x246d03, + 0x2022c6, + 0x249bc8, + 0x202e03, + 0x2ef9c3, + 0x2319c3, + 0x237583, + 0x21d8c3, + 0x21e903, + 0x21a303, + 0x31c703, + 0x2b25c3, + 0x225783, + 0x370645, + 0x256c04, + 0x258107, + 0x329982, + 0x25a303, + 0x25d486, + 0x25ed03, + 0x25f3c3, + 0x276543, + 0x202043, + 0x323283, + 0x269687, + 0xaf0e843, + 0x2363c3, + 0x2096c3, + 0x204d03, + 0x26ff83, + 0x2f3783, + 0x374ac5, + 0x363fc3, + 0x246889, + 0x20b0c3, + 0x2fe203, + 0xb2527c3, + 0x286d03, + 0x21cd08, + 0x2a64c6, + 0x200706, + 0x29aa46, + 0x27a5c7, + 0x200c83, + 0x20be83, + 0x21f743, + 0x288446, + 0x21a202, + 0x29ea43, + 0x32dd05, + 0x20ec83, + 0x2a2e47, + 0x160ae43, + 0x24e483, + 0x21fa83, + 0x225e03, + 0x241d03, + 0x212e46, + 0x31d286, + 0x36aa43, + 0x22ba83, + 0x219543, + 0x253743, + 0x303b83, + 0x2f0603, + 0x2f20c3, + 0x34f085, + 0x24f3c3, + 0x2d3246, + 0x23eb08, + 0x225b43, + 0x341789, + 0x33a308, + 0x2110c8, + 0x21a185, + 0x32a38a, + 0x35400a, + 0x37cd8b, + 0x37d408, + 0x2fb903, + 0x2f2103, + 0x33b1c3, + 0x366d88, + 0x2f4e83, + 0x39ec44, + 0x261983, + 0x202983, + 0x22d483, + 0x26fcc3, + 0x238843, + 0x230882, + 0x22d0c3, + 0x23f683, + 0x305403, + 0x3065c4, + 0x244dc4, + 0x3be143, + 0xcd588, + 0x200742, + 0x200602, + 0x200582, + 0x203402, + 0x2023c2, + 0x200782, + 0x238c02, + 0x201b02, + 0x202542, 0x2000c2, - 0x231b83, - 0x208a42, - 0x2da904, - 0x204303, - 0x2513c2, - 0x204ac3, - 0x200382, - 0x200383, - 0x2716c6, - 0x31c0cf, - 0x70d8c3, - 0x15f048, - 0x20d1c2, - 0x2135c3, - 0x332ec3, - 0x20fbc3, - 0x155afcb, - 0xde548, - 0x14ff507, - 0x13ecc7, - 0x20d1c2, - 0x2d0783, - 0x332ec3, - 0x204ac3, - 0x204cc2, + 0x225242, + 0x20d682, + 0x26cd82, + 0x206f02, + 0x2db482, + 0x20b182, + 0x201f82, + 0x2057c2, + 0x2f5f42, + 0x208102, + 0x200982, + 0x219e82, + 0x207bc2, + 0x207c02, + 0x201282, + 0x20fd82, + 0x201c42, + 0x742, + 0x602, + 0x582, + 0x3402, + 0x23c2, + 0x782, + 0x38c02, + 0x1b02, + 0x2542, + 0xc2, + 0x25242, + 0xd682, + 0x6cd82, + 0x6f02, + 0xdb482, + 0xb182, + 0x1f82, + 0x57c2, + 0xf5f42, + 0x8102, + 0x982, + 0x19e82, + 0x7bc2, + 0x7c02, + 0x1282, + 0xfd82, + 0x1c42, + 0x20be03, + 0x237583, + 0x30e843, + 0x20ec83, + 0x241d03, + 0x3f82, + 0x20be03, + 0x237583, + 0x30e843, + 0x20ec83, + 0x241d03, + 0x202c42, + 0x241d03, + 0xc60be03, + 0x30e843, + 0x21f743, + 0xaff03, + 0x223b82, + 0xcd588, + 0x20be03, + 0x237583, + 0x30e843, + 0x20ec83, + 0xaff03, + 0x241d03, + 0xdc2, + 0x142f49, + 0x202382, + 0x15bda05, + 0x2eaa02, + 0xcd588, + 0x2c42, + 0x23bfc2, + 0x200482, + 0x244482, + 0x21f682, + 0x253982, + 0x14a345, + 0x203082, + 0x2056c2, + 0x20c502, + 0x203042, + 0x20b182, + 0x392a82, + 0x20ed42, + 0x24eb42, + 0x15da87, + 0x120a8d, + 0xd6249, + 0x6898b, + 0xd97c8, + 0x60b89, + 0xfeec6, + 0x30e843, + 0xcd588, + 0x1221c4, + 0x121b83, + 0xf45, + 0xcd588, + 0x5b646, + 0xf89, + 0xab07, + 0x200742, + 0x28b304, + 0x202c42, + 0x20be03, + 0x209d42, + 0x237583, + 0x202542, + 0x2d2484, + 0x214bc3, + 0x254ac2, + 0x20ec83, + 0x200342, + 0x241d03, + 0x3a25c6, + 0x32414f, + 0x70ec03, + 0xcd588, + 0x202c42, + 0x203d43, + 0x30e843, + 0x21f743, + 0xae43, + 0x14ef74b, + 0x141650a, + 0x14eca47, + 0x78d4b, + 0xd7e45, + 0x15da87, + 0x202c42, + 0x20be03, + 0x30e843, + 0x20ec83, + 0x200742, + 0x211a42, + 0x209342, + 0xfe0be03, + 0x2442c2, + 0x237583, + 0x226d02, + 0x22ab02, + 0x30e843, + 0x25cd82, + 0x251942, + 0x2a8002, + 0x211742, + 0x28d302, + 0x2029c2, 0x200902, - 0x207f42, - 0xfad0783, - 0x2416c2, - 0x231b83, - 0x2101c2, - 0x22ad02, - 0x332ec3, - 0x2630c2, - 0x255302, - 0x2ae4c2, - 0x203742, - 0x291e02, - 0x209902, - 0x200b82, - 0x274842, - 0x258142, + 0x2ebfc2, + 0x278142, + 0x25c982, + 0x2ad9c2, + 0x2fcdc2, + 0x223482, + 0x23d082, + 0x21f743, + 0x205a02, + 0x20ec83, + 0x211e82, + 0x2c9fc2, + 0x241d03, + 0x2457c2, + 0x207c02, + 0x209f82, + 0x203a42, + 0x204e02, + 0x2da942, + 0x21b2c2, 0x251b02, - 0x2b36c2, - 0x242602, - 0x246082, - 0x263c42, - 0x20fbc3, - 0x205f02, - 0x204ac3, - 0x231302, - 0x27de02, - 0x200383, - 0x251dc2, - 0x20c4c2, - 0x209f42, - 0x200b42, - 0x20c842, - 0x2e4742, - 0x220382, - 0x24d082, - 0x234f42, - 0x310c8a, - 0x347d0a, - 0x37e80a, - 0x3b5dc2, - 0x2046c2, - 0x204e82, - 0xff4f589, - 0x10324d0a, - 0x15926c7, - 0x1410c43, - 0x243d0, - 0x9402, - 0x24fe44, - 0x10ad0783, - 0x231b83, - 0x251304, - 0x332ec3, - 0x2964c4, - 0x204303, - 0x20fbc3, - 0x204ac3, - 0x20abc3, - 0x200383, - 0x2202c3, - 0x24abc3, - 0x15f048, - 0x14629c4, - 0x614c5, - 0x5f88a, - 0x1168c2, - 0x1a03c6, - 0x102d11, - 0x1134f589, - 0x61548, - 0x82a08, - 0x5e887, - 0xf82, - 0x19a18a, - 0x2ac47, - 0x15f048, - 0x10b708, - 0xbac7, - 0x16c1b74b, - 0x1082, - 0x15de87, - 0xdb4a, - 0x5e58f, - 0xfd4f, - 0x1c402, - 0xd1c2, - 0xa8508, - 0x185b0a, - 0x1681c8, - 0x3b02, - 0x5e30f, - 0xa3d4b, - 0x1672c8, - 0x13edc7, - 0x15104a, - 0x2f64b, - 0x11dd09, - 0x150f47, - 0x100c4c, - 0x1b3c47, - 0x18d18a, - 0x94b88, - 0x195a8e, - 0x28b8e, - 0x2aa8b, - 0x2b2cb, - 0x2d3cb, - 0x2e209, - 0x3558b, - 0x4a68d, - 0xe984b, - 0xec8cd, - 0xecc4d, - 0x18274a, - 0x2fd0b, - 0x3688b, - 0x42305, - 0x14243d0, - 0x125d8f, - 0x1264cf, - 0x48dcd, - 0x25910, - 0x1742, - 0x17203988, - 0xfb48, - 0x176f4745, - 0x505cb, - 0x117050, - 0x57488, - 0x2b48a, - 0x5f4c9, - 0x695c7, - 0x69907, - 0x69ac7, - 0x6c287, - 0x6d307, - 0x6dd07, - 0x6e487, - 0x6e8c7, - 0x6f487, - 0x6f787, - 0x6ffc7, - 0x70187, - 0x70347, - 0x70507, - 0x70807, - 0x70c47, - 0x718c7, - 0x71d87, - 0x729c7, - 0x72f07, - 0x730c7, - 0x73807, + 0x2234c2, + 0x31350a, + 0x35acca, + 0x38bf0a, + 0x3c6b82, + 0x20f2c2, + 0x374a82, + 0x103358c9, + 0x1072f70a, + 0x14328c7, + 0x10a03fc2, + 0x1410983, + 0x3342, + 0x12f70a, + 0x253404, + 0x1120be03, + 0x237583, + 0x254a04, + 0x30e843, + 0x26ff84, + 0x214bc3, + 0x21f743, + 0x20ec83, + 0x1aec5, + 0x20ae43, + 0x241d03, + 0x24f3c3, + 0x203f83, + 0xcd588, + 0x1400004, + 0x149845, + 0x142f49, + 0xa8ca, + 0x119fc2, + 0x19cbc6, + 0x187251, + 0x11b358c9, + 0x1498c8, + 0x1c1948, + 0x1fbc7, + 0x282, + 0x11748b, + 0x18c40a, + 0x844a, + 0x2aa47, + 0xcd588, + 0x10c788, + 0xd547, + 0x18419a4b, + 0x1c787, + 0x4c2, + 0x5e87, + 0x23a8a, + 0x1f8cf, + 0x8308f, + 0xefa02, + 0x2c42, + 0x173908, + 0xf698a, + 0x12b48, + 0x5fcc8, + 0xd3708, + 0x2e02, + 0x1bda8f, + 0x9dc8b, + 0x7e948, + 0x3c2c7, + 0x127c0a, + 0xf400b, + 0x78449, + 0x127b07, + 0x12a48, + 0x1541cc, + 0x3a347, + 0x17a28a, + 0x67008, + 0xf6f8e, + 0x2954e, + 0x2a88b, + 0x2e28b, + 0x30e8b, + 0x50b89, + 0xe32cb, + 0xeb5cd, + 0x17d18b, + 0x198c8d, + 0x19900d, + 0x3cc4a, + 0x44c0b, + 0x4638b, + 0x49ec5, + 0x18828e50, + 0x15770f, + 0x3b4cf, + 0xfb1cd, + 0x39610, + 0xa6c2, + 0x18e071c8, + 0x1f6c8, + 0x192ec405, + 0x5400b, + 0x12e350, + 0x59c88, + 0x12c4a, + 0x2e449, + 0x66007, + 0x66347, + 0x66507, + 0x66887, + 0x67347, + 0x67947, + 0x68187, + 0x68547, + 0x68e87, + 0x69187, + 0x69847, + 0x69a07, + 0x69bc7, + 0x69d87, + 0x6a087, + 0x6a687, + 0x6af47, + 0x6b707, + 0x6bcc7, + 0x6bf87, + 0x6c147, + 0x6c447, + 0x6cc47, + 0x6ce47, + 0x6dd87, + 0x6df47, + 0x6e107, + 0x6ebc7, + 0x6f0c7, + 0x6fd87, + 0x70687, + 0x71147, + 0x71647, + 0x71807, + 0x71c07, + 0x72447, + 0x726c7, + 0x72ac7, + 0x72c87, + 0x72e47, + 0x73287, 0x73e87, - 0x74087, - 0x74347, - 0x74507, - 0x746c7, - 0x75047, - 0x754c7, - 0x75987, - 0x76147, - 0x76407, - 0x76bc7, - 0x76d87, - 0x77107, - 0x77d07, - 0x78987, - 0x78d87, - 0x78f47, - 0x79107, - 0x79547, - 0x7a307, - 0x7a607, - 0x7a907, - 0x7aac7, - 0x7ae47, - 0x7b387, - 0xa9c2, - 0x4c94a, - 0x16dc87, - 0x178d528b, - 0x14d5296, - 0x19151, - 0xf080a, - 0xa838a, - 0x59b46, - 0xd2acb, - 0x642, - 0x2e891, - 0x94609, - 0x9a109, - 0x74842, - 0xa4f4a, - 0xaa689, - 0xab24f, - 0xaca4e, - 0xad708, - 0x18d82, - 0x15da89, - 0x18b88e, - 0xfd08c, - 0xf254f, - 0x146ce, - 0x23b4c, - 0x2ccc9, - 0x2db51, - 0x465c8, - 0x482d2, - 0x49fcd, - 0x82bcd, - 0x19090b, - 0x3d2d5, - 0x4c809, - 0x4ec0a, - 0x4f489, - 0x5ecd0, - 0x72c4b, - 0x79f4f, - 0x7c48b, - 0x8340c, - 0x84610, - 0x8894a, - 0x8dd0d, - 0x16618e, - 0x1ae00a, - 0x8f7cc, - 0x93994, - 0x94291, - 0xa494b, - 0xa578f, - 0xa7bcd, - 0xac3ce, - 0xb1acc, - 0xb220c, - 0xdc90b, - 0xdcc0e, - 0x122110, - 0x11640b, - 0x17a64d, - 0x1af38f, - 0xb798c, - 0xb934e, - 0xbb311, - 0xc3ccc, - 0xc5a47, - 0x15e58d, - 0x12b50c, - 0x14be50, - 0xd1b4d, - 0xd8e47, - 0xe2350, - 0xfa008, - 0xfb08b, - 0x150bcf, - 0x17de88, - 0xf0a0d, - 0x181d50, - 0x17fb1846, - 0xb6003, - 0x1b02, - 0xd0309, - 0x5ac0a, - 0x1084c6, - 0x180dff49, - 0x13203, - 0xdab91, - 0xdafc9, - 0xdc047, - 0x5e40b, - 0xe4a90, - 0xe4f4c, - 0xe5385, - 0x126cc8, - 0x19dc0a, - 0x129607, - 0x1002, - 0x12464a, - 0x25e49, - 0x3a20a, - 0x8eacf, - 0x44f4b, - 0x1b280c, - 0x1b2ad2, - 0xaa085, - 0x2124a, - 0x186f2fc5, - 0x17698c, - 0x121203, - 0x184982, - 0xf86ca, - 0x96b88, - 0xeca88, - 0x14a587, - 0xd42, - 0x2602, - 0x3f390, - 0x1702, - 0x1aa2cf, - 0x177ac6, - 0x301ce, - 0xe7fcb, - 0x1ae208, - 0xd6c09, - 0x17cd92, - 0x7c0d, - 0x56608, - 0x56a89, - 0x5700d, - 0x59c89, - 0x5a28b, - 0x5b088, - 0x5f6c8, - 0x68bc8, - 0x68e49, - 0x6904a, - 0x6c8cc, - 0xe5d0a, - 0x104f87, - 0x16b2cd, - 0xf910b, - 0x12fb4c, - 0x1a05d0, - 0x6902, - 0x1968cd, - 0x16c2, - 0x11fc2, - 0x104eca, - 0xf070a, - 0xf6bcb, - 0x36a4c, - 0x10b48e, - 0x21ccd, - 0x1ab488, - 0x6c82, - 0x1166118e, - 0x11f6a18e, - 0x1266c00a, - 0x12ed0a0e, - 0x137156ce, - 0x13f2a00c, - 0x15926c7, - 0x15926c9, - 0x1410c43, - 0x14731e8c, - 0x14f3a009, - 0x1409402, - 0x610d1, - 0x16a0d1, - 0x6bf4d, - 0xd0951, - 0x11b1d1, - 0x129f4f, - 0x131dcf, - 0x139f4c, - 0x14a94d, - 0x18d555, - 0x1ace0c, - 0x1b41cc, - 0x1b5850, - 0x940c, - 0x5838c, - 0xedc19, - 0x1a6719, - 0x115419, - 0x15c754, - 0x17f854, - 0x198594, - 0x19ae14, - 0x1a9054, - 0x1577fb09, - 0x15d98849, - 0x167b4289, - 0x11b6b089, - 0x9402, - 0x1236b089, - 0x9402, - 0xedc0a, - 0x9402, - 0x12b6b089, - 0x9402, - 0xedc0a, - 0x9402, - 0x1336b089, - 0x9402, - 0x13b6b089, - 0x9402, - 0x1436b089, - 0x9402, - 0xedc0a, - 0x9402, - 0x14b6b089, - 0x9402, - 0xedc0a, - 0x9402, - 0x1536b089, - 0x9402, - 0x15b6b089, - 0x9402, - 0x1636b089, - 0x9402, - 0x16b6b089, - 0x9402, - 0xedc0a, - 0x9402, - 0x102d05, - 0x19a184, - 0x11d644, - 0x1a4884, - 0xbfc04, - 0x2144, - 0x5e884, - 0x1482283, - 0x1420183, - 0xffd84, - 0x1542b83, - 0x1742, - 0x21cc3, - 0x204cc2, - 0x20d1c2, - 0x2000c2, - 0x2041c2, - 0x208a42, - 0x200382, - 0x202602, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x204143, - 0x204ac3, - 0x200383, - 0x15f048, - 0x2d0783, - 0x231b83, - 0x204ac3, - 0x200383, - 0x3b943, - 0x332ec3, - 0x204cc2, - 0x368883, - 0x1a2d0783, - 0x20ef47, - 0x332ec3, - 0x205d83, - 0x213184, - 0x204ac3, - 0x200383, - 0x25084a, - 0x2716c5, - 0x21aa03, - 0x205bc2, - 0x15f048, - 0x15f048, - 0xd1c2, - 0x11f0c2, - 0x15dfc5, - 0x15f048, - 0xd0783, - 0x1ae3db07, - 0xcfd46, - 0x1b1acd05, - 0xcfe07, - 0xa54a, - 0xa408, - 0xb747, - 0x5f2c8, - 0x18c407, - 0xed30f, - 0x3ab07, - 0x165bc6, - 0x117050, - 0x122f0f, - 0x108544, - 0x1b4cfece, - 0xafd0c, - 0x11de8a, - 0xac687, - 0x12d54a, - 0x60989, - 0xc2f4a, - 0x77a8a, - 0x1084c6, - 0xac74a, - 0x11a58a, - 0x154009, - 0xda448, - 0xda746, - 0xde74d, - 0xb9905, - 0x5a107, - 0x16df94, - 0xfe58b, - 0x16710a, - 0xa8bcd, - 0x28b83, - 0x28b83, - 0x28b86, - 0x28b83, - 0x168883, - 0x15f048, - 0xd1c2, - 0x51304, - 0x8cdc3, - 0x170145, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x204ac3, - 0x200383, - 0x205283, - 0x2d0783, - 0x231b83, - 0x2135c3, - 0x332ec3, - 0x20fbc3, - 0x204ac3, - 0x200383, - 0x29a2c3, - 0x24abc3, - 0x205283, - 0x24ae04, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x204ac3, - 0x200383, - 0x209103, - 0x2d0783, - 0x231b83, - 0x2041c3, - 0x2135c3, - 0x332ec3, - 0x2964c4, - 0x23a0c3, - 0x22d603, - 0x20fbc3, - 0x204ac3, - 0x200383, - 0x21aa03, - 0x38c743, - 0x1d2d0783, - 0x231b83, - 0x2c3ec3, - 0x332ec3, - 0x2075c3, - 0x22d603, - 0x200383, - 0x2054c3, - 0x343c44, - 0x15f048, - 0x1dad0783, - 0x231b83, - 0x2ad7c3, - 0x332ec3, - 0x20fbc3, - 0x213184, - 0x204ac3, - 0x200383, - 0x21d7c3, - 0x15f048, - 0x1e2d0783, - 0x231b83, - 0x2135c3, - 0x20abc3, - 0x200383, - 0x15f048, - 0x15926c7, - 0x368883, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x2964c4, - 0x213184, - 0x204ac3, - 0x200383, - 0x13ecc7, - 0x16e1cb, - 0xdb3c4, - 0xb9905, - 0x1491b48, - 0xae2cd, - 0x1f68a405, - 0x192c4, - 0x1a5c3, - 0x367fc5, - 0x15f048, - 0x1d202, - 0x2803, - 0xf7286, - 0x32f448, - 0x304507, - 0x24ae04, - 0x3b3006, - 0x3b5706, - 0x15f048, - 0x310683, - 0x2384c9, - 0x2bdad5, - 0xbdadf, - 0x2d0783, - 0x39a9d2, - 0xf5806, - 0x10cfc5, - 0x2b48a, - 0x5f4c9, - 0x39a78f, - 0x2da904, - 0x20f345, - 0x2fee50, - 0x2959c7, - 0x20abc3, - 0x2842c8, - 0x1257c6, - 0x2b400a, - 0x200e84, - 0x2f2a03, - 0x2716c6, - 0x205bc2, - 0x26b44b, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x20fbc3, - 0x204ac3, - 0x200383, - 0x2f74c3, - 0x20d1c2, - 0x204ac3, - 0x200383, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x20fbc3, - 0x200383, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x205d83, - 0x223103, - 0x200383, - 0x20d1c2, - 0x2d0783, - 0x231b83, - 0x204ac3, - 0x200383, - 0x204cc2, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x204ac3, - 0x200383, - 0x24ae04, - 0x2d0783, - 0x231b83, - 0x222044, - 0x204ac3, - 0x200383, - 0x15f048, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x204ac3, - 0x200383, - 0x2d0783, - 0x231b83, - 0x2135c3, - 0x209e43, - 0x20fbc3, - 0x204ac3, - 0x200383, - 0x20d1c2, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x204ac3, - 0x200383, - 0x15f048, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x262fc3, - 0x1e303, - 0x5d83, - 0x204ac3, - 0x200383, - 0x310c8a, - 0x32a949, - 0x34184b, - 0x341f8a, - 0x347d0a, - 0x356e8b, - 0x37300a, - 0x37914a, - 0x37e80a, - 0x37ea8b, - 0x39d949, - 0x39f84a, - 0x39fbcb, - 0x3a9d0b, - 0x3b4a8a, - 0x2d0783, - 0x231b83, - 0x2135c3, - 0x20fbc3, - 0x204ac3, - 0x200383, - 0x10c9c9, - 0x15f048, - 0x2d0783, - 0x2695c4, - 0x200c82, - 0x213184, - 0x3ac705, - 0x205283, - 0x24ae04, - 0x2d0783, - 0x23a184, - 0x231b83, - 0x251304, - 0x2da904, - 0x2964c4, - 0x22d603, - 0x204ac3, - 0x200383, - 0x293ac5, - 0x209103, - 0x21aa03, - 0x22c6c3, - 0x258a04, - 0x262904, - 0x35d705, - 0x15f048, - 0x306e44, - 0x20e546, - 0x28a8c4, - 0x20d1c2, - 0x361ac7, - 0x253587, - 0x24f0c4, - 0x25d8c5, - 0x2d1d45, - 0x2b0405, - 0x2964c4, - 0x23cfc8, - 0x33f306, - 0x311f48, - 0x227b05, - 0x2e0405, - 0x377004, - 0x200383, - 0x2f39c4, - 0x355f46, - 0x2717c3, - 0x258a04, - 0x291a45, - 0x363644, - 0x234e84, - 0x205bc2, - 0x25e206, - 0x392206, - 0x3022c5, - 0x204cc2, - 0x368883, - 0x24e0d1c2, - 0x232dc4, - 0x208a42, - 0x20fbc3, - 0x25e402, - 0x204ac3, - 0x200382, - 0x213e83, - 0x24abc3, - 0x15f048, - 0x15f048, - 0x332ec3, - 0x204cc2, - 0x25a0d1c2, - 0x332ec3, - 0x2702c3, - 0x23a0c3, - 0x32bc44, - 0x204ac3, - 0x200383, - 0x15f048, - 0x204cc2, - 0x2620d1c2, - 0x2d0783, - 0x204ac3, - 0x200383, - 0x682, - 0x2044c2, - 0x217082, - 0x205d83, - 0x2ec383, - 0x204cc2, - 0x15f048, - 0x13ecc7, - 0x20d1c2, - 0x231b83, + 0x743c7, + 0x74947, + 0x74b07, + 0x74e87, + 0x75407, + 0xd0c2, + 0x5fdca, + 0xdc547, + 0x84785, + 0xb3111, + 0x10ac6, + 0x10cc0a, + 0x17378a, + 0x5b646, + 0xcb0b, + 0x1402, + 0x34111, + 0xb29c9, + 0x948c9, + 0xebfc2, + 0x71e8a, + 0xa5a89, + 0xa61cf, + 0xa67ce, + 0xa7708, + 0x552c2, + 0x549, + 0x18b4ce, + 0xfc6cc, + 0xdbe0f, + 0x1a814e, + 0x1840c, + 0x25589, + 0x26751, + 0x2f988, + 0x1109d2, + 0x1115cd, + 0x1545cd, + 0x43f8b, + 0x4bad5, + 0x52c49, + 0x5438a, + 0x5ee89, + 0x6b310, + 0x7cc8b, + 0x85ecf, + 0xf0c0b, + 0x16130c, + 0x1b2610, + 0x9208a, + 0x9e90d, + 0x9fc4e, + 0xa9bca, + 0xab6cc, + 0xac394, + 0xb2651, + 0xbb04b, + 0xe1ecf, + 0xca50d, + 0x1a720e, + 0x16c4cc, + 0x18618c, + 0xb234b, + 0xb428e, + 0xb4d50, + 0xb584b, + 0xbaa8d, + 0xbb4cf, + 0xbef4c, + 0xbfb4e, + 0xc0411, + 0xdff4c, + 0x10d8c7, + 0xc738d, + 0xd000c, + 0xd65d0, + 0xdb80d, + 0x18acc7, + 0xe6310, + 0xf9348, + 0xfd44b, + 0x17d9cf, + 0x142188, + 0x10ce0d, + 0x190c10, + 0xf5f89, + 0x196af346, + 0xb0303, + 0xb5b05, + 0x9602, + 0x143709, + 0x5c40a, + 0x106606, + 0x2098a, + 0x1991f309, + 0x264c3, + 0xd2711, + 0xd2b49, + 0xd3ec7, + 0x1873cb, + 0xdae90, + 0xdb34c, + 0xdc2c8, + 0xdcc45, + 0x11e748, + 0x1afe8a, + 0x26587, + 0x140947, + 0x1382, + 0x12f04a, + 0x3b809, + 0x71505, + 0xa2cca, + 0x8a0cf, + 0x4794b, + 0x174b8c, + 0x1a252, + 0x9df05, + 0xdf0c8, + 0x13a60a, + 0x19ee8f05, + 0x17478c, + 0x12c443, + 0x192a82, + 0xf258a, + 0x14f2d8c, + 0x3a6c8, + 0x198e48, + 0x15da07, + 0x16f02, + 0xa02, + 0x49fd0, + 0x653c7, + 0x1282, + 0x333cf, + 0x7dac6, + 0x79a8e, + 0xdeb8b, + 0x6e308, + 0xa9dc9, + 0xf5012, + 0x18998d, + 0x1be608, + 0x68849, + 0x6a20d, + 0x6c5c9, + 0x6c98b, + 0x6e4c8, + 0x73c88, + 0x76248, + 0x79dc9, + 0x79fca, + 0x7b48c, + 0x17010a, + 0x103bc7, + 0x2fdcd, + 0xf7a8b, + 0x11a9cc, + 0x1979c8, + 0x4d3c9, + 0x13d8d0, + 0xc842, + 0x521cd, + 0x4182, + 0xc542, + 0x103b0a, + 0x10cb0a, + 0x10ec8b, + 0x4654c, + 0x10c28a, + 0x10c50e, + 0x121ccd, + 0xb6a08, + 0xdc2, + 0x11e0340e, + 0x1272184e, + 0x12f4960a, + 0x13742c0e, + 0x13f374ce, + 0x147ac40c, + 0x14328c7, + 0x14328c9, + 0x1410983, + 0x14eb784c, + 0x15727309, + 0x15f69bc9, + 0x1660a6c9, + 0x3342, + 0x3351, + 0x121791, + 0x14954d, + 0x142b51, + 0x137411, + 0x1ac34f, + 0xb778f, + 0x12724c, + 0x169b0c, + 0xa60c, + 0x1654cd, + 0x10e595, + 0x5a00c, + 0x1ba48c, + 0x138c90, + 0x155e8c, + 0x15dc0c, + 0x17a659, + 0x180a19, + 0x19f3d9, + 0x1b57d4, + 0x1bbcd4, + 0x3ed4, + 0x4ed4, + 0xb814, + 0x16e5a0c9, + 0x17404189, + 0x17fba549, + 0x1222fb89, + 0x3342, + 0x12a2fb89, + 0x3342, + 0x3eca, + 0x3342, + 0x1322fb89, + 0x3342, + 0x3eca, + 0x3342, + 0x13a2fb89, + 0x3342, + 0x1422fb89, + 0x3342, + 0x14a2fb89, + 0x3342, + 0x3eca, + 0x3342, + 0x1522fb89, + 0x3342, + 0x3eca, + 0x3342, + 0x15a2fb89, + 0x3342, + 0x1622fb89, + 0x3342, + 0x3eca, + 0x3342, + 0x16a2fb89, + 0x3342, + 0x3eca, + 0x3342, + 0x1722fb89, + 0x3342, + 0x17a2fb89, + 0x3342, + 0x1822fb89, + 0x3342, + 0x3eca, + 0x3342, + 0x187245, + 0x18c404, + 0x340e, + 0x12184e, + 0x14960a, + 0x142c0e, + 0x1374ce, + 0x1ac40c, + 0xb784c, + 0x127309, + 0x169bc9, + 0xa6c9, + 0x5a0c9, + 0x4189, + 0x1ba549, + 0x10e78d, + 0x5189, + 0xbac9, + 0x116a84, + 0x118c44, + 0x13aa44, + 0x18e7c4, + 0x79004, + 0x98884, + 0x477c4, + 0x143c44, + 0x1fbc4, + 0x157cd03, + 0xa6c2, + 0x121cc3, + 0x2e02, + 0x200742, + 0x202c42, + 0x209d42, + 0x208882, + 0x202542, + 0x200342, + 0x200a02, + 0x20be03, + 0x237583, + 0x30e843, + 0x26ff83, + 0x20ec83, + 0x241d03, + 0xcd588, + 0x20be03, + 0x237583, + 0x20ec83, + 0x241d03, + 0x1a9c3, + 0x30e843, + 0x6ff84, + 0x200742, + 0x2b6c03, + 0x1be0be03, + 0x2394c7, + 0x30e843, + 0x20f003, + 0x226444, + 0x20ec83, + 0x241d03, + 0x22d50a, + 0x3a25c5, + 0x219543, + 0x20e982, + 0xcd588, + 0xcd588, + 0x2c42, + 0x129242, + 0x1c74660b, + 0x5fc5, + 0x1f8c5, + 0xf9fc6, + 0x1221c4, + 0x121b83, + 0xf45, + 0x117485, + 0xcd588, + 0x1c787, + 0xbe03, + 0x1ce41447, + 0x143146, + 0x1d149445, + 0x143207, + 0xf84a, + 0xf708, + 0x13407, + 0x68348, + 0x98647, + 0xf28f, + 0x47f87, + 0x4e786, + 0x12e350, + 0x12cf0f, + 0x1c009, + 0x106684, + 0x1d5432ce, + 0xa978c, + 0xf420a, + 0x785c7, + 0xd9f8a, + 0x11e909, + 0xada0c, + 0x1bdf0a, + 0x5cc0a, + 0xf89, + 0x106606, + 0x7868a, + 0x11d84a, + 0x9a209, + 0xd1fc8, + 0xd22c6, + 0xd6c0d, + 0xb7cc5, + 0xab07, + 0xfb709, + 0x1a3207, + 0x10bd94, + 0xfdb4b, + 0x7e78a, + 0xa358d, + 0xf283, + 0xf283, + 0x29546, + 0xf283, + 0xb6c03, + 0xcd588, + 0x2c42, + 0x54a04, + 0x5da83, + 0xf5805, + 0x20be03, + 0x237583, + 0x30e843, + 0x20ec83, + 0x241d03, + 0x205583, + 0x20be03, + 0x237583, + 0x203d43, + 0x30e843, + 0x21f743, + 0x20ec83, + 0x241d03, + 0x294a83, + 0x203f83, + 0x205583, + 0x28b304, + 0x20be03, + 0x237583, + 0x30e843, + 0x20ec83, + 0x241d03, + 0x235cc3, + 0x20be03, + 0x237583, + 0x208883, + 0x203d43, + 0x30e843, + 0x26ff84, + 0x3c32c3, + 0x20be83, + 0x21f743, + 0x20ec83, + 0x241d03, + 0x219543, + 0x20c283, + 0x1f20be03, + 0x237583, + 0x24e683, + 0x30e843, + 0x211343, + 0x20be83, + 0x241d03, + 0x2057c3, + 0x317f04, + 0xcd588, + 0x1fa0be03, + 0x237583, + 0x2a77c3, + 0x30e843, + 0x21f743, + 0x226444, + 0x20ec83, + 0x241d03, + 0x232f43, + 0xcd588, + 0x2020be03, + 0x237583, + 0x203d43, + 0x20ae43, + 0x241d03, + 0xcd588, + 0x14328c7, + 0x2b6c03, + 0x20be03, + 0x237583, + 0x30e843, + 0x26ff84, + 0x226444, + 0x20ec83, + 0x241d03, + 0x142f49, + 0x117485, + 0x15da87, + 0x10bfcb, + 0xd2f44, + 0xb7cc5, + 0x1455908, + 0xa7e0d, + 0x21676405, + 0x8f204, + 0x10ec3, + 0xf5e85, + 0x31cc45, + 0xcd588, + 0xf282, + 0x3a283, + 0xefec6, + 0x31b0c8, + 0x397247, + 0x28b304, + 0x346046, + 0x3699c6, + 0xcd588, + 0x312ec3, + 0x23aec9, + 0x265555, + 0x6555f, + 0x20be03, + 0x3ba052, + 0x10db06, + 0x14fc85, + 0x12c4a, + 0x2e449, + 0x3b9e0f, + 0x2d2484, + 0x225285, + 0x2fdfd0, + 0x38cb87, + 0x20ae43, + 0x310f08, + 0x157146, + 0x2a47ca, + 0x22d244, + 0x2e8943, + 0x3a25c6, + 0x20e982, + 0x3987cb, + 0xae43, + 0x20be03, + 0x237583, + 0x30e843, + 0x21f743, + 0x20ec83, + 0x241d03, + 0x2f0ec3, + 0x202c42, + 0xee203, + 0x20ec83, + 0x241d03, + 0x20be03, + 0x237583, + 0x30e843, + 0x21f743, + 0x241d03, + 0x20be03, + 0x237583, + 0x30e843, + 0x20f003, + 0x227b03, + 0x241d03, + 0x202c42, + 0x20be03, + 0x237583, + 0x20ec83, + 0xae43, + 0x241d03, + 0x200742, + 0x20be03, + 0x237583, + 0x30e843, + 0x20ec83, + 0x241d03, + 0x1f8c5, + 0x28b304, + 0x20be03, + 0x237583, + 0x21a484, + 0x20ec83, + 0x241d03, + 0xcd588, + 0x20be03, + 0x237583, + 0x30e843, + 0x20ec83, + 0xaff03, + 0x241d03, + 0x20be03, + 0x237583, + 0x203d43, + 0x204d03, + 0x21f743, + 0x20ec83, + 0xae43, + 0x241d03, + 0x202c42, + 0x20be03, + 0x237583, + 0x30e843, + 0x20ec83, + 0x241d03, + 0xcd588, + 0x20be03, + 0x237583, + 0x30e843, + 0x357d43, + 0x3cf83, + 0xf003, + 0x20ec83, + 0x241d03, + 0x31350a, + 0x333049, + 0x3524cb, + 0x352b4a, + 0x35acca, + 0x3686cb, + 0x37bfca, + 0x3825ca, + 0x38bf0a, + 0x38c18b, + 0x3afbc9, + 0x3b1a0a, + 0x3b1d8b, + 0x3bc98b, + 0x3c5b0a, + 0x20be03, + 0x237583, + 0x203d43, + 0x21f743, + 0x20ec83, + 0xae43, + 0x241d03, + 0x18754b, + 0x60308, + 0x14f209, + 0xcd588, + 0x20be03, + 0x266004, + 0x206302, + 0x226444, + 0x201485, + 0x205583, + 0x28b304, + 0x20be03, + 0x23d744, + 0x237583, + 0x254a04, + 0x2d2484, + 0x26ff84, + 0x20be83, + 0x20ec83, + 0x241d03, + 0x252385, + 0x235cc3, + 0x219543, + 0x2b5d83, + 0x2702c4, + 0x2020c4, + 0x3c0885, + 0xcd588, + 0x320f04, + 0x39db46, + 0x2010c4, + 0x202c42, + 0x38fd87, + 0x256087, + 0x252944, + 0x25e5c5, + 0x2dba05, + 0x232585, + 0x26ff84, + 0x27a688, + 0x23c806, + 0x3c5f88, + 0x278185, + 0x2d8345, 0x251304, - 0x202743, - 0x332ec3, - 0x209e43, - 0x20fbc3, - 0x204ac3, - 0x2183c3, - 0x200383, - 0x21d743, - 0x1286d3, - 0x12cb54, - 0x13ecc7, - 0x1fd86, - 0x5ae0b, - 0x28b86, - 0x58c07, - 0x130089, - 0xe9cca, - 0x8cb0d, - 0x16978c, - 0x13d64a, - 0x63c85, - 0xa588, - 0x177ac6, - 0x125886, - 0x201742, - 0x827cc, - 0x19a347, - 0x23551, - 0x2d0783, - 0x5f245, - 0x102c4, - 0x274341c6, - 0x19146, - 0x178146, - 0x920ca, - 0xb2f03, - 0x27a5c984, - 0x130045, - 0xa383, - 0xd2b8c, - 0xf6188, - 0xbaf48, - 0xa3bc9, - 0x20c48, - 0x141dd06, - 0xfbc88, - 0x5e884, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x20fbc3, - 0x204ac3, - 0x200383, - 0x204cc2, - 0x20d1c2, - 0x332ec3, - 0x20a3c2, - 0x204ac3, - 0x200383, - 0x213e83, - 0x36388f, - 0x363c4e, - 0x15f048, - 0x2d0783, - 0x4cd07, - 0x231b83, - 0x332ec3, - 0x204303, - 0x204ac3, - 0x200383, - 0x21d0c3, - 0x239c47, - 0x200142, - 0x2c1949, - 0x201442, - 0x23f68b, - 0x2b5b8a, - 0x2bcfc9, + 0x241d03, + 0x2e9484, + 0x367486, + 0x3a26c3, + 0x2702c4, + 0x362205, + 0x26e984, + 0x23fd84, + 0x20e982, + 0x397746, + 0x3a4b06, + 0x301805, + 0x200742, + 0x2b6c03, + 0x27e02c42, + 0x207344, + 0x202542, + 0x21f743, + 0x23a3c2, + 0x20ec83, + 0x200342, + 0x207c03, + 0x203f83, + 0xcd588, + 0xcd588, + 0x30e843, + 0x200742, + 0x28a02c42, + 0x30e843, + 0x2574c3, + 0x3c32c3, + 0x2168c4, + 0x20ec83, + 0x241d03, + 0xcd588, + 0x200742, + 0x29202c42, + 0x20be03, + 0x20ec83, + 0xae43, + 0x241d03, + 0x982, + 0x20c202, + 0x230882, + 0x20f003, + 0x2e2d83, + 0x200742, + 0x117485, + 0xcd588, + 0x15da87, + 0x202c42, + 0x237583, + 0x254a04, + 0x206c03, + 0x30e843, + 0x204d03, + 0x21f743, + 0x20ec83, + 0x207783, + 0x241d03, + 0x2388c3, + 0xb5cd3, + 0x1b9994, + 0x15da87, + 0x102dc6, + 0x5c60b, + 0x29546, + 0x5a3c7, + 0x2809, + 0x195d4a, + 0x8820d, + 0x12078c, + 0x104fca, + 0x14a345, + 0xf888, + 0x7dac6, + 0x6ff06, + 0x157206, + 0x20a6c2, + 0x1c170c, + 0x18c5c7, + 0x282d1, + 0x20be03, + 0x682c5, + 0x8808, + 0x22644, + 0x2a507646, + 0xb3106, + 0xd95c6, + 0x8d5ca, + 0x19dac3, + 0x2aa48c44, + 0x27c5, + 0x15cc83, + 0x2ae38a07, + 0x1aec5, + 0xcbcc, + 0xed348, + 0x6f6cb, + 0x2b25168c, + 0x140d6c3, + 0xb8888, + 0x9db09, + 0x3ff48, + 0x14208c6, + 0x2b76d609, + 0xd7e4a, + 0x10d08, + 0xf9fc8, + 0x1fbc4, + 0x118b45, + 0x6f807, + 0x2ba6f803, + 0x2bf39c86, + 0x2c2e9d04, + 0x2c790207, + 0xf9fc4, + 0xf9fc4, + 0xf9fc4, + 0xf9fc4, + 0x20be03, + 0x237583, + 0x30e843, + 0x21f743, + 0x20ec83, + 0x241d03, + 0x200742, + 0x202c42, + 0x30e843, + 0x207d02, + 0x20ec83, + 0x241d03, + 0x207c03, + 0x37158f, + 0x37194e, + 0xcd588, + 0x20be03, + 0x49a07, + 0x237583, + 0x30e843, + 0x214bc3, + 0x20ec83, + 0x241d03, + 0x220443, + 0x322887, + 0x203d02, + 0x292889, + 0x200602, + 0x24a2cb, + 0x2cf44a, + 0x28d009, + 0x200182, + 0x3418c6, + 0x235295, + 0x24a415, + 0x236793, + 0x24a993, + 0x203942, + 0x222dc5, + 0x3ab48c, + 0x27410b, + 0x2a2205, + 0x203402, + 0x2f2542, + 0x37e706, 0x200282, - 0x262b46, - 0x26d615, - 0x23f7d5, - 0x274a13, - 0x23fd53, - 0x202342, - 0x20d605, - 0x3ab1cc, - 0x24698b, - 0x29a745, - 0x205ac2, - 0x289c02, - 0x386746, + 0x261bc6, + 0x212ecd, + 0x21ac4c, + 0x228ec4, + 0x200cc2, + 0x2149c2, + 0x310d88, + 0x2023c2, + 0x211446, + 0x35c704, + 0x235455, + 0x236913, + 0x2108c3, + 0x32508a, + 0x20df47, + 0x30eec9, + 0x2d9d07, + 0x314902, + 0x200882, + 0x3b4b46, + 0x2099c2, + 0xcd588, + 0x210702, + 0x200302, + 0x217a07, + 0x336087, + 0x21c485, + 0x2004c2, + 0x2da6c7, + 0x220488, + 0x204002, + 0x2f21c2, + 0x230502, + 0x203cc2, + 0x23e988, + 0x20bf83, + 0x25dc48, + 0x20bf8d, + 0x237c03, + 0x23bc48, + 0x237c0f, + 0x237fce, + 0x38feca, + 0x2d1311, + 0x2d1790, + 0x38360d, + 0x38394c, + 0x3452c7, + 0x325207, + 0x346109, + 0x228fc2, + 0x200782, + 0x25becc, + 0x25c1cb, + 0x203c02, + 0x2b2506, + 0x2010c2, + 0x202642, + 0x2efa02, + 0x202c42, + 0x231fc4, + 0x240647, + 0x230a42, + 0x245207, + 0x2475c7, + 0x21bc02, + 0x21b282, + 0x2498c5, + 0x204ac2, + 0x2e72ce, + 0x2a384d, + 0x237583, + 0x28400e, + 0x3b868d, + 0x348003, + 0x202ec2, + 0x2817c4, + 0x238c42, + 0x202e82, + 0x372a45, + 0x37b407, + 0x24d902, + 0x208882, + 0x254607, + 0x257688, + 0x329982, + 0x29df86, + 0x25bd4c, + 0x25c08b, + 0x212c42, + 0x26208f, + 0x262450, + 0x26284f, + 0x262c15, + 0x263154, + 0x26364e, + 0x2639ce, + 0x263d4f, + 0x26410e, + 0x264494, + 0x264993, + 0x264e4d, + 0x2755c9, + 0x289843, + 0x201802, + 0x215f45, + 0x206c06, + 0x202542, + 0x344e47, + 0x30e843, + 0x201402, + 0x36dfc8, + 0x2d1551, + 0x2d1990, + 0x200c42, + 0x270f87, + 0x205842, + 0x341287, + 0x209602, + 0x348f89, + 0x37e6c7, + 0x2a4b48, + 0x307486, + 0x2e2c83, + 0x326e05, + 0x20e402, + 0x202682, + 0x3b4f45, + 0x3c1485, 0x200f82, - 0x25fb86, - 0x294d0d, - 0x255dcc, - 0x224444, - 0x201342, - 0x203782, - 0x248688, - 0x202302, - 0x208886, - 0x303bc4, - 0x26d7d5, - 0x274b93, - 0x210b83, - 0x33070a, - 0x2f0187, - 0x3b2209, - 0x32dc47, - 0x3124c2, - 0x200002, - 0x3a4386, - 0x20a0c2, - 0x15f048, - 0x200802, - 0x211cc2, - 0x27d407, - 0x3b3507, - 0x21c7c5, - 0x201082, - 0x21d707, - 0x21d8c8, - 0x2413c2, - 0x2c2fc2, - 0x22c1c2, - 0x20e542, - 0x23b688, - 0x218443, - 0x2b72c8, - 0x2e078d, - 0x21fe43, - 0x226288, - 0x23e88f, - 0x23ec4e, - 0x24ac8a, - 0x229d11, - 0x22a190, - 0x2bf0cd, - 0x2bf40c, - 0x38c5c7, - 0x330887, - 0x3b30c9, - 0x204f02, - 0x200702, - 0x25a6cc, - 0x25a9cb, - 0x202ac2, - 0x2dcac6, - 0x20db42, + 0x214d03, + 0x26ea07, + 0x208007, + 0x2085c2, + 0x22e684, + 0x20b4c3, + 0x20b4c9, + 0x20f108, + 0x201542, + 0x204482, + 0x2e3547, + 0x33d705, + 0x293988, + 0x222a87, + 0x201cc3, + 0x298106, + 0x38348d, + 0x38380c, + 0x2e0646, + 0x200482, + 0x26f582, + 0x201e42, + 0x237a8f, + 0x237e8e, + 0x2dba87, + 0x200b82, + 0x3517c5, + 0x3517c6, + 0x203282, + 0x205a02, + 0x28ad86, + 0x292ac3, + 0x3411c6, + 0x2c3ec5, + 0x2c3ecd, + 0x2c4495, + 0x2c4e8c, + 0x2c59cd, + 0x2c5d92, + 0x20d682, + 0x26cd82, + 0x2047c2, + 0x21ce86, + 0x2fc586, + 0x201382, + 0x206c86, 0x20c502, - 0x21c402, - 0x20d1c2, - 0x384684, - 0x23c7c7, - 0x220802, - 0x242c07, - 0x243c47, - 0x2271c2, - 0x20e482, - 0x24cbc5, - 0x204d02, - 0x20cb4e, - 0x36f1cd, - 0x231b83, - 0x353a0e, - 0x2c0b8d, - 0x3ab643, - 0x201842, - 0x206744, - 0x208182, - 0x220a42, - 0x33e805, - 0x348447, - 0x372202, - 0x2041c2, - 0x250f07, - 0x2543c8, - 0x2abc02, - 0x2aa106, - 0x25a54c, - 0x25a88b, - 0x20da42, - 0x26588f, - 0x265c50, - 0x26604f, - 0x266415, - 0x266954, - 0x266e4e, - 0x2671ce, - 0x26754f, - 0x26790e, - 0x267c94, - 0x268193, - 0x26864d, - 0x27b549, - 0x28dbc3, - 0x200182, - 0x237b85, - 0x206506, - 0x208a42, - 0x21a2c7, - 0x332ec3, - 0x200642, - 0x36edc8, - 0x229f51, - 0x22a390, - 0x200bc2, - 0x28d387, - 0x200b02, - 0x205fc7, - 0x201b02, - 0x32f249, - 0x386707, - 0x281408, - 0x234006, - 0x2cf4c3, - 0x2cf4c5, - 0x231e02, - 0x204842, - 0x3a4785, - 0x376e05, - 0x205e82, - 0x245f43, - 0x3636c7, - 0x210687, - 0x204982, - 0x3aae04, - 0x214183, - 0x2c9209, - 0x2ed188, - 0x205d82, - 0x2032c2, - 0x26e2c7, - 0x282185, - 0x2ab548, - 0x20d2c7, - 0x216143, - 0x372306, - 0x2bef4d, - 0x2bf2cc, - 0x280346, - 0x208842, - 0x2017c2, - 0x201f02, - 0x23e70f, - 0x23eb0e, - 0x2d1dc7, - 0x203cc2, - 0x2c3345, - 0x2c3346, - 0x20bcc2, - 0x205f02, - 0x28f406, - 0x205f03, - 0x205f06, - 0x2ca585, - 0x2ca58d, - 0x2cab55, - 0x2cb38c, - 0x2cc28d, - 0x2cc652, - 0x20b602, - 0x273fc2, - 0x201302, - 0x240fc6, - 0x2fcf46, - 0x201002, - 0x206586, - 0x211f82, - 0x37edc5, - 0x202382, - 0x20cc89, - 0x2df2cc, - 0x2df60b, + 0x20d245, + 0x2013c2, + 0x2a3949, + 0x21d70c, + 0x21da4b, + 0x200342, + 0x258508, + 0x20cb42, + 0x206f02, + 0x271946, + 0x22fb05, + 0x31f507, + 0x250d85, + 0x2982c5, + 0x249a82, + 0x204c02, + 0x20b182, + 0x2dc107, + 0x24f4cd, + 0x24f84c, + 0x34f687, + 0x22bac2, + 0x201f82, + 0x23d488, + 0x343888, + 0x303d48, + 0x30cdc4, + 0x2b4507, + 0x2e3c83, + 0x24e882, + 0x204882, + 0x2e6b09, + 0x2f7387, + 0x2057c2, + 0x271d45, + 0x248602, + 0x209942, + 0x2bca43, + 0x2bca46, + 0x2f0602, + 0x2f1e82, + 0x201442, + 0x3b33c6, + 0x3454c7, + 0x205e42, 0x200382, - 0x255688, - 0x213a02, - 0x204c82, - 0x246746, - 0x36b005, - 0x235007, - 0x2567c5, - 0x294805, - 0x24cd82, - 0x20a642, - 0x217902, - 0x2f2847, - 0x24410d, - 0x24448c, - 0x2b3387, - 0x2aa082, - 0x23cf82, - 0x24ba48, - 0x2d0488, - 0x2e5f88, - 0x2f09c4, - 0x2dce87, - 0x2ee483, - 0x2b6042, - 0x200e82, - 0x2f11c9, - 0x395e87, - 0x2054c2, - 0x277245, - 0x201202, - 0x26a102, - 0x349c43, - 0x349c46, - 0x2f74c2, - 0x2f7fc2, + 0x25da8f, + 0x283e4d, + 0x38b8ce, + 0x3b850c, + 0x2017c2, + 0x200502, + 0x3072c5, + 0x311d86, + 0x209002, + 0x208102, + 0x200982, + 0x222a04, + 0x2dcdc4, + 0x3c23c6, + 0x200a02, + 0x2b7307, + 0x231d03, + 0x231d08, + 0x2326c8, + 0x243e07, + 0x2ecbc6, + 0x204042, + 0x23e683, + 0x23e687, + 0x28a8c6, + 0x2f3045, + 0x30d148, + 0x206a42, + 0x341687, + 0x20fd82, + 0x2f4682, + 0x20c142, + 0x2f1149, + 0x20a402, + 0x201742, + 0x24adc3, + 0x325ec7, + 0x2040c2, + 0x21d88c, + 0x21db8b, + 0x2e06c6, + 0x35cbc5, + 0x227882, + 0x201c42, + 0x2ba046, + 0x22e983, + 0x331547, + 0x20cb82, + 0x202a82, + 0x235115, + 0x24a5d5, + 0x236653, + 0x24ab13, + 0x25d207, + 0x274548, + 0x274550, + 0x28744f, + 0x373ad3, + 0x28cdd2, + 0x292450, + 0x2b350f, + 0x2fd6d2, + 0x3af491, + 0x2af493, + 0x3938d2, + 0x2c3b0f, + 0x2cd74e, + 0x2cf252, + 0x2d09d1, + 0x2d3b0f, + 0x2d528e, + 0x2dc811, + 0x2dd7d0, + 0x2ed512, + 0x2f0f51, + 0x2f2206, + 0x2f3907, + 0x38e407, + 0x200d02, + 0x27efc5, + 0x3713c7, + 0x230882, + 0x20f6c2, + 0x22d0c5, + 0x200443, + 0x200446, + 0x24f68d, + 0x24f9cc, + 0x206d02, + 0x3ab30b, + 0x273fca, + 0x22358a, + 0x2b9489, + 0x2e530b, + 0x222bcd, + 0x2fe44c, + 0x2ec88a, + 0x27500c, + 0x294d4b, + 0x2a204c, + 0x2f968b, + 0x2b9e83, + 0x2f4f06, + 0x3b9942, + 0x2f3dc2, + 0x20e343, + 0x201ac2, + 0x207203, + 0x24ec86, + 0x262dc7, + 0x2ad706, + 0x2f6b48, + 0x343588, + 0x2ca146, + 0x211d82, + 0x3011cd, + 0x30150c, + 0x2d2547, + 0x304e07, + 0x23c242, + 0x219742, + 0x23e602, + 0x257a42, + 0x202c42, + 0x20ec83, + 0x241d03, + 0x20be03, + 0x237583, + 0x30e843, + 0x21f743, + 0x226444, + 0x20ec83, + 0x241d03, + 0x207c03, + 0x200742, + 0x201482, + 0x2e68ecc5, + 0x2ea8e4c5, + 0x2efb3086, + 0xcd588, + 0x2f2afb05, + 0x202c42, + 0x209d42, + 0x2f726285, + 0x2fa7cb85, + 0x2fe7d647, + 0x302867c9, + 0x30667d84, + 0x202542, 0x201402, - 0x3b3fc6, - 0x206687, - 0x207842, - 0x200e02, - 0x38bc8f, - 0x35384d, - 0x2b714e, - 0x2c0a0c, - 0x2003c2, - 0x205502, - 0x233e45, - 0x3b4e86, - 0x201ec2, - 0x200fc2, - 0x200682, - 0x20d244, - 0x2e0604, - 0x2d29c6, - 0x202602, - 0x27e787, - 0x22d703, - 0x22d708, - 0x24b048, - 0x390787, - 0x240ec6, - 0x20e5c2, - 0x23b383, - 0x23b387, - 0x272846, - 0x2e4385, - 0x2f0d48, - 0x206342, - 0x34a007, - 0x220c42, - 0x33c282, - 0x203b82, - 0x2dbe09, - 0x22fb02, - 0x200242, - 0x240183, - 0x319ac7, - 0x2018c2, - 0x2df44c, - 0x2df74b, - 0x2803c6, - 0x20a2c5, - 0x222e82, - 0x200a42, - 0x2bd306, - 0x235b83, - 0x39c147, - 0x23bb02, - 0x203382, - 0x26d495, - 0x23f995, - 0x2748d3, - 0x23fed3, - 0x2934c7, - 0x2b5948, - 0x2fb310, - 0x30ee4f, - 0x2b5953, - 0x2bcd92, - 0x2c1510, - 0x2ca1cf, - 0x2d57d2, - 0x2d84d1, - 0x2d9513, - 0x2dbbd2, - 0x2dd20f, - 0x2e57ce, - 0x2f5092, - 0x2f6351, - 0x2f754f, - 0x2f834e, - 0x300011, - 0x355810, - 0x35f212, - 0x3702d1, - 0x2f9bc6, - 0x307487, - 0x373387, - 0x204b42, - 0x284e05, - 0x2febc7, - 0x217082, - 0x203142, - 0x2293c5, - 0x21ee43, - 0x35d986, - 0x2442cd, - 0x24460c, - 0x206602, - 0x3ab04b, - 0x24684a, - 0x30be4a, - 0x2bbf49, - 0x2ef68b, - 0x20d40d, - 0x2ff2cc, - 0x24890a, - 0x275b0c, - 0x27afcb, - 0x29a58c, - 0x2fa34b, - 0x2df243, - 0x35ee06, - 0x3a6502, - 0x2f8b82, - 0x2db2c3, - 0x202502, - 0x202503, - 0x245886, - 0x2665c7, - 0x365146, - 0x385cc8, - 0x2d0188, - 0x2d3186, - 0x2019c2, - 0x301c8d, - 0x301fcc, - 0x2da9c7, - 0x306d07, - 0x21fdc2, - 0x21ac02, - 0x23b302, - 0x254782, - 0x20d1c2, - 0x204ac3, - 0x200383, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x20fbc3, - 0x213184, - 0x204ac3, - 0x200383, - 0x213e83, - 0x204cc2, - 0x204e02, - 0x29a94005, - 0x29e02e85, - 0x2a3177c6, - 0x15f048, - 0x2a6b5145, - 0x20d1c2, - 0x2000c2, - 0x2ab9c685, - 0x2ae83305, - 0x2b283e07, - 0x2b68b309, - 0x2ba47ac4, - 0x208a42, - 0x200642, - 0x2bf72245, - 0x2c293149, - 0x2c71db88, - 0x2cab2085, - 0x2cf363c7, - 0x2d219b08, - 0x2d6e8605, - 0x2da5b4c6, - 0x2de346c9, - 0x2e2b8648, - 0x2e6c4b48, - 0x2ea9cf0a, - 0x2ee52104, - 0x2f2d6585, - 0x2f6becc8, - 0x2fb51245, - 0x2184c2, - 0x2fe63b83, - 0x302a7786, - 0x3064ea48, - 0x30a24f06, - 0x30ecec88, - 0x3132d1c6, - 0x316e4444, - 0x202082, - 0x31b630c7, - 0x31eaeb84, - 0x3227dc47, - 0x327a1087, - 0x200382, - 0x32aa0685, - 0x32e03bc4, - 0x332d1807, - 0x3362adc7, - 0x33a87406, - 0x33e36085, - 0x3429b807, - 0x346d2688, - 0x34a37f07, - 0x34eb0689, - 0x3538e6c5, - 0x35719c07, - 0x35a92e46, - 0x35e62d48, - 0x2460cd, - 0x24cf09, - 0x2f484b, - 0x25534b, - 0x27de4b, - 0x2aa88b, - 0x30f20b, - 0x30f4cb, - 0x30fd49, - 0x310f0b, - 0x3111cb, - 0x311ccb, - 0x31284a, - 0x312d8a, - 0x31338c, - 0x31608b, - 0x3166ca, - 0x327eca, - 0x3328ce, - 0x333a4e, - 0x333dca, - 0x335d8a, - 0x3369cb, - 0x336c8b, - 0x337a4b, - 0x34c7cb, - 0x34cdca, - 0x34da8b, - 0x34dd4a, - 0x34dfca, - 0x34e24a, - 0x373ecb, - 0x37a2cb, - 0x37c38e, - 0x37c70b, - 0x383ecb, - 0x38500b, - 0x38984a, - 0x389ac9, - 0x389d0a, - 0x38b38a, - 0x39e50b, - 0x39fe8b, - 0x3a09ca, - 0x3a28cb, - 0x3a588b, - 0x3b44cb, - 0x36285b88, - 0x3668c289, - 0x36aa3a49, - 0x36ee0bc8, - 0x33c685, - 0x202943, - 0x212944, - 0x206885, - 0x247806, - 0x25b245, - 0x28adc4, - 0x21a1c8, - 0x30af85, - 0x297a44, - 0x209907, - 0x2a280a, - 0x361d8a, - 0x3101c7, - 0x211f47, - 0x2fdec7, - 0x255b47, - 0x2fad45, - 0x343d06, - 0x22cb47, - 0x26fec4, - 0x2e6b46, - 0x2e6a46, - 0x208305, - 0x3492c4, - 0x38ec86, - 0x2a1647, - 0x22d046, - 0x351b47, - 0x26a783, - 0x2b4846, - 0x232045, - 0x283f07, - 0x270e0a, - 0x26dfc4, - 0x218ec8, - 0x2affc9, - 0x2cb147, - 0x334646, - 0x255908, - 0x200a49, - 0x3b23c4, - 0x2210c4, - 0x278285, - 0x22c848, - 0x2c7f47, - 0x2a7109, - 0x2f9cc8, - 0x347a86, - 0x24c646, - 0x29de88, - 0x354c46, - 0x202e85, - 0x2874c6, - 0x27e108, - 0x254b86, - 0x25d14b, - 0x29dac6, - 0x29f50d, - 0x3b1785, - 0x2aea46, - 0x20f505, - 0x349909, - 0x2abe87, - 0x3195c8, - 0x292986, - 0x29e709, - 0x364546, - 0x270d85, - 0x2a4dc6, - 0x2c99c6, - 0x2cdb89, - 0x200846, - 0x253087, - 0x277885, - 0x202383, - 0x25d2c5, - 0x29f7c7, - 0x358e06, - 0x3b1689, - 0x3177c6, - 0x287706, - 0x215ec9, - 0x286ec9, - 0x2a5607, - 0x2cf688, - 0x377f89, - 0x284a88, - 0x379386, - 0x2d9dc5, - 0x23cb4a, - 0x287786, - 0x3a8506, - 0x2cbbc5, - 0x272188, - 0x215587, - 0x22e68a, - 0x251746, - 0x24d345, - 0x329cc6, - 0x2d6347, - 0x334507, - 0x2c4145, - 0x270f45, - 0x2b2f86, - 0x351746, - 0x387046, - 0x2b8bc4, - 0x286209, - 0x28d146, - 0x30e50a, - 0x222848, - 0x309148, - 0x361d8a, - 0x2145c5, - 0x2a1585, - 0x37f588, - 0x2b6348, - 0x21b507, - 0x293846, - 0x320d48, - 0x3674c7, - 0x285188, - 0x2b9206, - 0x2885c8, - 0x29ad46, - 0x227c87, - 0x272b06, - 0x38ec86, - 0x25d9ca, - 0x384706, - 0x2d9dc9, - 0x2b5446, - 0x2e3d8a, - 0x2e4449, - 0x362586, - 0x2ba844, - 0x237c4d, - 0x28c507, - 0x3268c6, - 0x2c4a05, - 0x3645c5, - 0x375846, - 0x2d1649, - 0x2b4287, - 0x27f886, - 0x2c9546, - 0x28ae49, - 0x264a04, - 0x2d4a44, - 0x3ac808, - 0x245c46, - 0x277308, - 0x2e66c8, - 0x202fc7, - 0x3a80c9, - 0x387247, - 0x2b500a, - 0x2498cf, - 0x250b0a, - 0x233c45, - 0x27e345, - 0x218745, - 0x303b07, - 0x20e183, - 0x2cf888, - 0x3028c6, - 0x3029c9, - 0x2d4006, - 0x3aeb47, - 0x29e4c9, - 0x3194c8, - 0x2cbc87, - 0x30d803, - 0x33c705, - 0x20e105, - 0x2b8a0b, - 0x351304, - 0x257984, - 0x27cbc6, - 0x30e887, - 0x38b10a, - 0x2757c7, - 0x38c807, - 0x283305, - 0x200045, - 0x240909, - 0x38ec86, - 0x27564d, - 0x35af05, - 0x29f4c3, - 0x20ad83, - 0x34f785, - 0x347845, - 0x255908, - 0x280047, - 0x2d47c6, - 0x2a36c6, - 0x2296c5, - 0x231e47, - 0x202ac7, - 0x33f1c7, - 0x2d660a, - 0x2b4908, - 0x2b8bc4, - 0x254907, - 0x281607, - 0x3400c6, - 0x26f8c7, - 0x2eaa08, - 0x2e9e88, - 0x2abd86, - 0x2d1ec8, - 0x2008c4, - 0x22cb46, - 0x247d86, - 0x216646, - 0x3a8c46, - 0x22d9c4, - 0x255c06, - 0x2c31c6, - 0x29d406, - 0x235ec6, - 0x20ac46, - 0x2ea846, - 0x2d46c8, - 0x3af1c8, - 0x2d6e48, - 0x25b448, - 0x37f506, - 0x212485, - 0x2e2006, - 0x2b2105, - 0x388c87, - 0x216605, - 0x2136c3, - 0x203ec5, - 0x33fb44, - 0x20ad85, - 0x2266c3, - 0x338007, - 0x34bc88, - 0x351c06, - 0x32250d, - 0x27e306, - 0x29c985, - 0x2d9743, - 0x2be689, - 0x264b86, - 0x23c0c6, - 0x2a4ec4, - 0x250a87, - 0x233006, - 0x2b4545, - 0x234a83, - 0x207ac4, - 0x2817c6, - 0x2ded04, - 0x32b8c8, - 0x39ba49, - 0x24d849, - 0x2a4cca, - 0x387acd, - 0x208d07, - 0x224bc6, - 0x20a684, - 0x28b309, - 0x28a088, - 0x28c106, - 0x23dfc6, - 0x26f8c7, - 0x2b9a46, - 0x21f706, - 0x3ac246, - 0x3a110a, - 0x219b08, - 0x2464c5, - 0x26fd09, - 0x28568a, - 0x2fa988, - 0x2a0ec8, - 0x29bd48, - 0x2af08c, - 0x316305, - 0x2a3948, - 0x2e8e06, - 0x319746, - 0x3aea07, - 0x2756c5, - 0x287645, - 0x24d709, - 0x213487, - 0x302985, - 0x227487, - 0x20ad83, - 0x2c8485, - 0x20b8c8, - 0x25d647, - 0x2a0d89, - 0x2de405, - 0x307784, - 0x2a6508, - 0x363207, - 0x2cbe48, - 0x368c48, - 0x2dc805, - 0x304286, - 0x278686, - 0x2ac1c9, - 0x31c407, - 0x2b29c6, - 0x3b3907, - 0x221d03, - 0x247ac4, - 0x2a7885, - 0x231f84, - 0x383c84, - 0x286947, - 0x35bdc7, - 0x27fa44, - 0x2a0bd0, - 0x367c87, - 0x200045, - 0x2536cc, - 0x225344, - 0x2b1588, - 0x227b89, - 0x2b4e06, - 0x220d88, - 0x247344, - 0x247348, - 0x22ec86, - 0x235d48, - 0x2a1c06, - 0x2d328b, - 0x202385, - 0x2cb988, - 0x216ac4, - 0x39be8a, - 0x2a0d89, - 0x381346, - 0x218808, - 0x25ebc5, - 0x2b69c4, - 0x2b1486, - 0x33f088, - 0x285b88, - 0x340bc6, - 0x31d104, - 0x23cac6, - 0x3872c7, - 0x27db47, - 0x26f8cf, - 0x205547, - 0x362647, - 0x38eb45, - 0x352245, - 0x2a52c9, - 0x30e1c6, - 0x284045, - 0x2871c7, - 0x2c1108, - 0x29d505, - 0x272b06, - 0x222688, - 0x224f0a, - 0x2e13c8, - 0x28f187, - 0x249d06, - 0x26fcc6, - 0x20df43, - 0x218303, - 0x285849, - 0x377e09, - 0x2b0586, - 0x2de405, - 0x2163c8, - 0x218808, - 0x354dc8, - 0x3ac2cb, - 0x322747, - 0x30b249, - 0x26fb48, - 0x335844, - 0x349588, - 0x291409, - 0x2b2cc5, - 0x303a07, - 0x247b45, - 0x285a88, - 0x293e8b, - 0x29b550, - 0x2ae605, - 0x216a0c, - 0x2d4985, - 0x283383, - 0x29f386, - 0x2c0984, - 0x203cc6, - 0x2a1647, - 0x222704, - 0x24b388, - 0x2cf74d, - 0x35e245, - 0x208d44, - 0x233984, - 0x287bc9, - 0x2990c8, - 0x317647, - 0x22ed08, - 0x2862c8, - 0x27fb85, - 0x20f747, - 0x27fb07, - 0x238287, - 0x270f49, - 0x232e89, - 0x242d86, - 0x2bf606, - 0x26fb06, - 0x289845, - 0x39b744, - 0x3b0e86, - 0x3b5306, - 0x27fbc8, - 0x2d600b, - 0x26de87, - 0x20a684, - 0x364a46, - 0x367a47, - 0x34f0c5, - 0x263645, - 0x212dc4, - 0x232e06, - 0x3b0f08, - 0x28b309, - 0x252f86, - 0x289a48, - 0x2b4606, - 0x342708, - 0x34c34c, - 0x27fa46, - 0x29c64d, - 0x29cacb, - 0x253145, - 0x202c07, - 0x200946, - 0x3343c8, - 0x242e09, - 0x393c88, - 0x200045, - 0x2e2a87, - 0x284b88, - 0x358649, - 0x344106, - 0x252e8a, - 0x334148, - 0x393acb, - 0x3298cc, - 0x247448, - 0x280e46, - 0x303d08, - 0x3a8347, - 0x363489, - 0x29304d, - 0x29f986, - 0x21e608, - 0x3af089, - 0x2bfd08, - 0x2886c8, - 0x2c3a0c, - 0x2c5047, - 0x2c5507, - 0x270d85, - 0x31e5c7, - 0x2c0fc8, - 0x2b1506, - 0x2aaccc, - 0x2f55c8, - 0x2d0d88, - 0x2ba286, - 0x20de87, - 0x242f84, - 0x25b448, - 0x28f50c, - 0x353d0c, - 0x233cc5, - 0x2d2887, - 0x31d086, - 0x20de06, - 0x349ac8, - 0x2027c4, - 0x22d04b, - 0x27e8cb, - 0x249d06, - 0x2cf5c7, - 0x31a2c5, - 0x276545, - 0x22d186, - 0x25eb85, - 0x3512c5, - 0x2cd5c7, - 0x27d1c9, - 0x351904, - 0x34ee05, - 0x2e6fc5, - 0x2dea88, - 0x2287c5, - 0x2bca49, - 0x37aac7, - 0x37aacb, - 0x244806, - 0x2d4409, - 0x349208, - 0x27c385, - 0x238388, - 0x232ec8, - 0x23a6c7, - 0x2e2f87, - 0x2869c9, - 0x235c87, - 0x289149, - 0x2acf8c, - 0x2b0588, - 0x2b6189, - 0x321f87, - 0x286389, - 0x35bf07, - 0x3299c8, - 0x3a8285, - 0x22cac6, - 0x2c4a48, - 0x2f0fc8, - 0x285549, - 0x351307, - 0x276605, - 0x36b6c9, - 0x2b9ec6, - 0x2323c4, - 0x2323c6, - 0x24e8c8, - 0x252847, - 0x2d6208, - 0x2d1f89, - 0x3a1e07, - 0x2a29c6, - 0x202cc4, - 0x203f49, - 0x20f5c8, - 0x2ba147, - 0x343e06, - 0x20e1c6, - 0x3a8484, - 0x247f86, - 0x201b83, - 0x296789, - 0x202346, - 0x2d2205, - 0x2a36c6, - 0x24f305, - 0x285008, - 0x247187, - 0x244b46, - 0x39c6c6, - 0x309148, - 0x2a5447, - 0x29f9c5, - 0x2a09c8, - 0x3ada88, - 0x334148, - 0x2d4845, - 0x22cb46, - 0x24d609, - 0x2ac044, - 0x24f18b, - 0x21f40b, - 0x2463c9, - 0x20ad83, - 0x25bf05, - 0x213a86, - 0x313788, - 0x249844, - 0x351c06, - 0x2d6749, - 0x2bc545, - 0x2cd506, - 0x363206, - 0x2163c4, - 0x2aec0a, - 0x2d2148, - 0x2f0fc6, - 0x2c2585, - 0x3b1987, - 0x231147, - 0x304284, - 0x21f647, - 0x2165c4, - 0x2165c6, - 0x203c83, - 0x270f45, - 0x350e85, - 0x205788, - 0x254ac5, - 0x27f789, - 0x25b287, - 0x25b28b, - 0x2a758c, - 0x2a810a, - 0x3363c7, - 0x204083, - 0x212188, - 0x2d4a05, - 0x29d585, - 0x20ae44, - 0x3298c6, - 0x227b86, - 0x247fc7, - 0x2349cb, - 0x22d9c4, - 0x2e8f04, - 0x219e04, - 0x2cd786, - 0x222704, - 0x22c948, - 0x33c5c5, - 0x244d85, - 0x354d07, - 0x202d09, - 0x347845, - 0x37584a, - 0x277789, - 0x29810a, - 0x3a1249, - 0x335fc4, - 0x2c9605, - 0x2b9b48, - 0x2d18cb, - 0x278285, - 0x2f0086, - 0x2200c4, - 0x27fcc6, - 0x3a1c89, - 0x364b07, - 0x317988, - 0x387e46, - 0x387247, - 0x285b88, - 0x380946, - 0x37f0c4, - 0x363f87, - 0x366085, - 0x377547, - 0x25b4c4, - 0x2008c6, - 0x2f1e08, - 0x29cc88, - 0x2e88c7, - 0x27d548, - 0x29ae05, - 0x20abc4, - 0x361c88, - 0x27d644, - 0x2186c5, - 0x2fac44, - 0x3675c7, - 0x28d207, - 0x2864c8, - 0x2cbfc6, - 0x254a45, - 0x27f588, - 0x2e15c8, - 0x2a4c09, - 0x21f706, - 0x22e708, - 0x39bd0a, - 0x34f148, - 0x2e8605, - 0x2e2206, - 0x277648, - 0x2e2b4a, - 0x20b387, - 0x28a645, - 0x298888, - 0x2b3c44, - 0x272206, - 0x2c5888, - 0x20ac46, - 0x239a88, + 0x30b0dec5, + 0x30e95f49, + 0x31327988, + 0x316ac205, + 0x31af0707, + 0x31e21cc8, + 0x322def85, + 0x3266d246, + 0x32b6d849, + 0x32ed4ec8, + 0x332bf988, + 0x3369658a, + 0x33a75e04, + 0x33f7c545, + 0x342bc308, + 0x34727e05, + 0x217f42, + 0x34a061c3, + 0x34ea2606, + 0x35311408, + 0x356eee46, + 0x35b643c8, + 0x35eb6306, + 0x363c2f44, + 0x2032c2, + 0x366f1587, + 0x36aa8644, + 0x36e77e87, + 0x3723ecc7, + 0x200342, + 0x3769ae85, + 0x37a403c4, + 0x37ee1787, + 0x383a3387, + 0x38681606, + 0x38a7d205, + 0x38e96047, + 0x392e5a48, + 0x396162c7, + 0x39b94949, + 0x39ec51c5, + 0x3a2b4107, + 0x3a68e306, + 0x3aa941c8, + 0x227d8d, + 0x251989, + 0x272fcb, + 0x27ac8b, + 0x2a78cb, + 0x2da98b, + 0x311f8b, + 0x31224b, + 0x312889, + 0x31378b, + 0x313a4b, + 0x313fcb, + 0x314c8a, + 0x3151ca, + 0x3157cc, + 0x31938b, + 0x319dca, + 0x33080a, + 0x33b28e, + 0x33be8e, + 0x33c20a, + 0x33e14a, + 0x33eb4b, + 0x33ee0b, + 0x33fa8b, + 0x35edcb, + 0x35f3ca, + 0x36008b, + 0x36034a, + 0x3605ca, + 0x36084a, + 0x37d74b, + 0x3856cb, + 0x388f8e, + 0x38930b, + 0x391f4b, + 0x392e0b, + 0x39a6ca, + 0x39a949, + 0x39ab8a, + 0x39c6ca, + 0x3b06cb, + 0x3b204b, + 0x3b2a0a, + 0x3b390b, + 0x3b904b, + 0x3c554b, + 0x3ae7fd48, + 0x3b287989, + 0x3b69d989, + 0x3bad8988, + 0x34c805, + 0x200583, + 0x22a3c4, + 0x217c05, + 0x267ac6, + 0x26cfc5, + 0x286284, + 0x344d48, + 0x30b505, + 0x290604, + 0x2064c7, + 0x29cf0a, + 0x266b4a, + 0x2dbb87, + 0x20c4c7, + 0x2fd2c7, + 0x282187, + 0x2f8c45, + 0x3b6e46, + 0x386007, + 0x244e44, + 0x2df546, + 0x2df446, + 0x204745, + 0x3389c4, + 0x2975c6, 0x29bfc7, - 0x209806, - 0x2ba844, - 0x28ba07, - 0x2b6804, - 0x3a1c47, - 0x23bf0d, - 0x21b585, - 0x2d144b, - 0x2a1d06, - 0x255788, - 0x24b344, - 0x27bc86, - 0x2817c6, - 0x304047, - 0x29c30d, - 0x226dc7, - 0x2b6d48, - 0x271a05, - 0x27f048, - 0x2c7ec6, - 0x29ae88, - 0x223a06, - 0x26a9c7, - 0x336689, - 0x33d2c7, - 0x28c3c8, - 0x279685, - 0x21c848, - 0x20dd45, - 0x396005, - 0x3a14c5, - 0x221443, - 0x235984, - 0x26fd05, - 0x2346c9, - 0x285f86, - 0x2eab08, - 0x2e2d45, - 0x2b8847, - 0x2aee8a, - 0x2cd449, - 0x2c98ca, - 0x2d6ec8, - 0x2272cc, - 0x28724d, - 0x2ff683, - 0x239988, - 0x207a85, - 0x224cc6, - 0x319346, - 0x2e7f05, - 0x3b3a09, - 0x358f45, - 0x27f588, - 0x2841c6, - 0x348806, - 0x2a63c9, - 0x38f247, - 0x294146, - 0x2aee08, - 0x216548, - 0x2e0dc7, - 0x235ece, - 0x2c8105, - 0x358545, - 0x20ab48, - 0x27f3c7, - 0x20e202, - 0x2c3584, - 0x203bca, - 0x2ba208, - 0x367b46, - 0x29e608, - 0x278686, - 0x31a7c8, - 0x2b29c8, - 0x395fc4, - 0x2b8d85, - 0x68a8c4, - 0x68a8c4, - 0x68a8c4, - 0x202403, - 0x20e046, - 0x27fa46, - 0x2a220c, - 0x209843, - 0x285686, - 0x215344, - 0x264b08, - 0x2d6585, - 0x203cc6, - 0x2bedc8, - 0x2d8206, - 0x244ac6, - 0x381148, - 0x2a7907, - 0x235a49, - 0x2d4bca, - 0x208a84, - 0x216605, - 0x2a70c5, - 0x264886, - 0x208d46, - 0x2a2dc6, - 0x2f9ec6, - 0x235b84, - 0x235b8b, - 0x231144, - 0x2a23c5, - 0x2b19c5, - 0x203086, - 0x3b5548, - 0x287107, - 0x317744, - 0x2453c3, - 0x2b3745, - 0x30a847, - 0x28700b, - 0x205687, - 0x2becc8, - 0x2e8b47, - 0x231646, - 0x24d1c8, - 0x2e318b, - 0x2067c6, - 0x213bc9, - 0x2e3305, - 0x30d803, - 0x2cd506, - 0x29bec8, - 0x214cc3, - 0x200a03, - 0x285b86, - 0x278686, - 0x375dca, - 0x280e85, - 0x28160b, - 0x2a360b, - 0x245103, - 0x202043, - 0x2b4f84, - 0x278447, - 0x247444, - 0x202ec4, - 0x2e8c84, - 0x34f448, - 0x2c24c8, - 0x3b2049, - 0x38e748, - 0x200c07, - 0x235ec6, - 0x2ea74f, - 0x2c8246, - 0x2d6504, - 0x2c230a, - 0x30a747, - 0x208386, - 0x292e89, - 0x3b1fc5, - 0x2058c5, - 0x3b2106, - 0x21c983, - 0x2b3c89, - 0x219c86, - 0x212009, - 0x38b106, - 0x270f45, - 0x2340c5, - 0x205543, - 0x278588, - 0x211607, - 0x3028c4, - 0x264988, - 0x2313c4, - 0x338d86, - 0x29f386, - 0x2419c6, - 0x2cb849, - 0x29d505, - 0x38ec86, + 0x22df06, + 0x27c8c7, + 0x250803, + 0x3912c6, + 0x234f05, + 0x27d747, + 0x26a84a, + 0x26e7c4, + 0x21bd88, + 0x2b8a49, + 0x2e0d07, + 0x319c46, + 0x258788, + 0x2ef589, + 0x30f084, + 0x33a484, + 0x29ef05, + 0x2ba648, + 0x2c2807, + 0x2b3e49, + 0x22dc08, + 0x2f2306, + 0x310806, + 0x297f88, + 0x362bc6, + 0x28e4c5, + 0x2816c6, + 0x278988, + 0x237986, + 0x25af0b, + 0x2c7c06, + 0x299b0d, + 0x369405, + 0x2a8506, + 0x21f085, + 0x331b49, + 0x3a6cc7, + 0x318308, + 0x2a1e46, + 0x298d89, + 0x33ffc6, + 0x26a7c5, + 0x24c486, + 0x288b86, + 0x2c6e49, + 0x31e2c6, + 0x29cc07, + 0x245e85, + 0x203983, + 0x25b085, + 0x299dc7, + 0x3ab746, + 0x369309, + 0x3b3086, + 0x26b146, + 0x213fc9, + 0x2810c9, + 0x29fac7, + 0x200908, + 0x2b2f49, + 0x27ec48, + 0x330a46, + 0x2d1d85, + 0x240c8a, + 0x26b1c6, + 0x239346, + 0x2cac05, + 0x2d4888, + 0x22b287, + 0x233f0a, + 0x254f86, + 0x251dc5, + 0x3324c6, + 0x224507, + 0x319b07, + 0x2835c5, + 0x26a985, + 0x395a06, + 0x3b8c06, + 0x2fa846, + 0x2bc7c4, + 0x280449, + 0x288806, + 0x2c814a, + 0x227248, + 0x36fd08, + 0x266b4a, + 0x212505, + 0x29bf05, + 0x2dd048, + 0x2c9688, + 0x233907, + 0x2ba946, + 0x32bf88, + 0x309507, + 0x27f348, + 0x2b5706, + 0x281e48, + 0x295586, + 0x278307, + 0x33a206, + 0x2975c6, + 0x22ecca, + 0x232046, + 0x2d1d89, + 0x2ee586, + 0x35c00a, + 0x3c2f49, + 0x27dd86, + 0x2b8304, + 0x21600d, + 0x287c07, + 0x239c06, + 0x2bf845, + 0x340045, + 0x37f306, + 0x2e15c9, + 0x2d4407, + 0x279406, + 0x306886, + 0x286309, + 0x2a3204, + 0x242544, + 0x3c2a88, + 0x24f046, + 0x271348, + 0x2e8008, + 0x29f447, + 0x3b6589, + 0x2faa47, + 0x2af9ca, + 0x2e79cf, + 0x31194a, + 0x3070c5, + 0x278bc5, + 0x218b05, + 0x35c647, + 0x2240c3, + 0x200b08, + 0x21e646, + 0x21e749, + 0x2d8646, + 0x2c8547, + 0x298b49, + 0x318208, + 0x2cacc7, + 0x30eb43, + 0x34c885, + 0x224045, + 0x2bc60b, + 0x327ec4, + 0x2d6884, + 0x276bc6, + 0x30f407, + 0x38f4ca, + 0x206247, + 0x20c347, + 0x27cb85, + 0x3c6485, + 0x282609, + 0x2975c6, + 0x2060cd, + 0x31e505, + 0x2b18c3, + 0x20b003, + 0x3a4d45, + 0x351305, + 0x258788, + 0x27a347, + 0x2422c6, + 0x29d606, + 0x22de05, + 0x237847, + 0x3c1d47, + 0x23c6c7, + 0x37c5ca, + 0x391388, + 0x2bc7c4, + 0x257bc7, + 0x27bb07, + 0x33f086, + 0x2692c7, + 0x2a1808, + 0x395f08, + 0x329b06, + 0x20c708, + 0x2cfbc4, + 0x386006, + 0x370d86, + 0x36bd46, + 0x277806, + 0x29b244, + 0x282246, + 0x2be246, + 0x297986, + 0x2060c6, + 0x20aec6, + 0x2a1646, + 0x2421c8, + 0x385a88, + 0x2cdac8, + 0x26d1c8, + 0x2dcfc6, + 0x212305, + 0x39e746, + 0x2ac285, + 0x396f87, + 0x22dcc5, + 0x213c03, + 0x38e045, + 0x33dd04, + 0x20b005, + 0x247643, + 0x33c4c7, + 0x30d708, + 0x27c986, + 0x2c930d, + 0x278b86, + 0x296f45, + 0x222083, + 0x2bbcc9, + 0x2a3386, + 0x291706, + 0x271e04, + 0x3118c7, + 0x23a1c6, + 0x2d46c5, + 0x21af83, + 0x3be4c4, + 0x27bcc6, + 0x3b6f44, + 0x370e88, + 0x3459c9, + 0x2317c9, + 0x29ed0a, + 0x2a05cd, + 0x2118c7, + 0x2391c6, + 0x20f984, + 0x2867c9, + 0x284ac8, + 0x287806, + 0x241906, + 0x2692c7, + 0x2d9346, + 0x22a046, + 0x347086, + 0x23ed4a, + 0x221cc8, + 0x22f885, 0x2a2fc9, - 0x2c7606, - 0x2ea846, - 0x386e86, - 0x200b45, - 0x2fac46, - 0x26a9c4, - 0x3a8285, - 0x2c4a44, - 0x2b7846, - 0x35aec4, - 0x20f843, - 0x28a145, - 0x232bc8, - 0x2e9687, - 0x2bd949, - 0x28a548, - 0x29dc51, - 0x36328a, - 0x249c47, - 0x2ea1c6, - 0x215344, - 0x2c4b48, - 0x282f48, - 0x29de0a, - 0x2bc80d, - 0x2a4dc6, - 0x381246, - 0x28bac6, - 0x2c3fc7, - 0x2b6e05, - 0x262c07, - 0x264a45, - 0x37ac04, - 0x2ad586, - 0x216287, - 0x2b398d, - 0x277587, - 0x21a0c8, - 0x27f889, - 0x2e2106, - 0x344085, - 0x226704, - 0x24e9c6, - 0x304186, - 0x2ba386, - 0x29ee88, - 0x2179c3, - 0x203043, - 0x3598c5, - 0x2300c6, - 0x2b2985, - 0x388048, - 0x2a180a, - 0x2cee04, - 0x264b08, - 0x29bd48, - 0x202ec7, - 0x2e2e09, - 0x2be9c8, - 0x28b387, - 0x2936c6, - 0x20ac4a, - 0x24ea48, - 0x396449, - 0x299188, - 0x21cec9, - 0x2ea087, - 0x2effc5, - 0x3ac4c6, - 0x2b1388, - 0x285d08, - 0x2a1048, - 0x249e08, - 0x2a23c5, - 0x20f444, - 0x211308, - 0x208484, - 0x3a1044, - 0x270f45, - 0x297a87, - 0x202ac9, - 0x303e47, - 0x215f45, - 0x27cdc6, - 0x34ebc6, - 0x203d44, - 0x2a6706, - 0x254884, - 0x27ef46, - 0x202886, - 0x214b06, - 0x200045, - 0x387f07, - 0x204083, - 0x206b49, - 0x308f48, - 0x264984, - 0x28b20d, - 0x29cd88, - 0x3053c8, + 0x27f84a, + 0x2ff648, + 0x29b6c8, + 0x291688, + 0x29d24c, + 0x3124c5, + 0x29d888, + 0x385d86, + 0x24c9c6, + 0x35eb07, + 0x206145, + 0x281845, + 0x231689, + 0x2139c7, + 0x21e705, + 0x22aec7, + 0x20b003, + 0x2c2d45, + 0x2151c8, + 0x280d47, + 0x29b589, + 0x2e9f85, + 0x33e384, + 0x2a0288, + 0x2f16c7, + 0x2cae88, + 0x3aac88, + 0x2e1dc5, + 0x21e546, + 0x29d706, + 0x3a7009, + 0x2cb3c7, + 0x2ac8c6, + 0x206e87, + 0x239fc3, + 0x267d84, + 0x2cfcc5, + 0x2f3f84, + 0x246804, + 0x27ffc7, + 0x340d87, + 0x26dc84, + 0x29b3d0, + 0x31d507, + 0x3c6485, + 0x2561cc, + 0x224a04, + 0x2c4c88, + 0x278209, + 0x375886, + 0x240088, + 0x21ca84, + 0x276ec8, + 0x234506, + 0x22eb48, + 0x29a086, + 0x28854b, + 0x38ddc5, + 0x2cfb48, + 0x2173c4, + 0x345e0a, + 0x29b589, + 0x33a106, + 0x218bc8, + 0x25ed85, + 0x31dec4, + 0x2c4b86, + 0x23c588, + 0x27fd48, + 0x32c806, + 0x3c2344, + 0x240c06, + 0x2faac7, + 0x277d87, + 0x2692cf, + 0x205847, + 0x27de47, + 0x351685, + 0x35e345, + 0x29f789, + 0x382e46, + 0x27d885, + 0x2813c7, + 0x3934c8, + 0x2c7645, + 0x33a206, + 0x227088, + 0x2eee4a, + 0x3bf088, + 0x28ab07, + 0x2e7e06, + 0x2a2f86, + 0x202583, + 0x20de03, + 0x27fa09, + 0x2b2dc9, + 0x2c4a86, + 0x2e9f85, + 0x36bac8, + 0x218bc8, + 0x362d48, + 0x34710b, + 0x2c9547, + 0x309149, + 0x269548, + 0x350284, + 0x318648, + 0x28c889, + 0x2acbc5, + 0x35c547, + 0x267e05, + 0x27fc48, + 0x28eb4b, + 0x295d90, + 0x2a8145, + 0x21730c, + 0x242485, + 0x27cc03, + 0x2b1d06, + 0x2bd884, + 0x2404c6, + 0x29bfc7, + 0x227104, + 0x248688, + 0x2009cd, + 0x2dfc05, + 0x211904, + 0x28f244, + 0x28f249, + 0x2ae548, + 0x31bc47, + 0x234588, + 0x280508, + 0x279705, + 0x21f2c7, + 0x279687, + 0x23ac87, + 0x26a989, + 0x346dc9, + 0x272146, + 0x383b46, + 0x269506, + 0x33b6c5, + 0x3aa4c4, + 0x3bd646, + 0x3c4c46, + 0x279748, + 0x2241cb, + 0x26e687, + 0x20f984, + 0x23a106, + 0x2a1b47, + 0x335405, + 0x3583c5, + 0x223884, + 0x346d46, + 0x3bd6c8, + 0x2867c9, + 0x2091c6, + 0x2848c8, + 0x2d4786, + 0x350908, + 0x2ce58c, + 0x2795c6, + 0x296c0d, + 0x29708b, + 0x29ccc5, + 0x3c1e87, + 0x31e3c6, + 0x3199c8, + 0x2721c9, + 0x329dc8, + 0x3c6485, + 0x208947, + 0x27ed48, + 0x24ff89, + 0x2a5586, + 0x24da8a, + 0x319748, + 0x329c0b, + 0x2ccd8c, + 0x276fc8, + 0x27b286, + 0x21dfc8, + 0x2eeac7, + 0x205989, + 0x2f084d, + 0x2974c6, + 0x31dd48, + 0x385949, + 0x2bc8c8, + 0x281f48, + 0x2bec8c, + 0x2bff87, + 0x2c0a47, + 0x26a7c5, + 0x2b4807, + 0x393388, + 0x2c4c06, + 0x20904c, + 0x2ec1c8, + 0x2c8c48, + 0x250286, + 0x223dc7, + 0x272344, + 0x26d1c8, + 0x2b6d0c, + 0x28430c, + 0x307145, + 0x2047c7, + 0x3c22c6, + 0x223d46, + 0x331d08, + 0x367784, + 0x22df0b, + 0x2b744b, + 0x2e7e06, + 0x200847, + 0x322385, + 0x271285, + 0x22e046, + 0x25ed45, + 0x327e85, + 0x2c6c87, + 0x270a09, + 0x3b8dc4, + 0x25f405, + 0x2de045, + 0x2add08, + 0x2da405, + 0x287109, + 0x2c9ac7, + 0x2c9acb, + 0x24fbc6, + 0x241f09, + 0x338908, + 0x291f85, + 0x23ad88, + 0x346e08, + 0x2570c7, + 0x208e47, + 0x280049, + 0x22ea87, + 0x2aa389, + 0x2b7dcc, + 0x394848, + 0x2d4d09, + 0x2d6447, + 0x2805c9, + 0x340ec7, + 0x2cce88, + 0x3b6745, + 0x385f86, + 0x2bf888, + 0x30d3c8, + 0x27f709, + 0x327ec7, + 0x256d85, + 0x2301c9, + 0x201c46, + 0x28e304, + 0x326006, + 0x311288, + 0x328747, + 0x2243c8, + 0x20c7c9, + 0x325b87, + 0x29d0c6, + 0x3c1f44, + 0x38e0c9, + 0x21f148, + 0x250147, + 0x2adf86, + 0x224106, + 0x2392c4, + 0x26d846, + 0x20af83, + 0x38d949, + 0x38dd86, + 0x20ca45, + 0x29d606, + 0x2c7205, + 0x27f1c8, + 0x2ee987, + 0x2eb146, + 0x3262c6, + 0x36fd08, + 0x29f907, + 0x297505, + 0x29b1c8, + 0x3b2448, + 0x319748, + 0x242345, + 0x386006, + 0x231589, + 0x3a6e84, + 0x2c708b, + 0x229d4b, + 0x22f789, + 0x20b003, + 0x25cf45, + 0x22abc6, + 0x242cc8, + 0x34e904, + 0x27c986, + 0x37c709, + 0x2f0405, + 0x2c6bc6, + 0x2f16c6, + 0x20c984, + 0x2a86ca, + 0x20c988, + 0x30d3c6, + 0x2934c5, + 0x331287, + 0x351547, + 0x21e544, + 0x229f87, + 0x22dc84, + 0x22dc86, + 0x200b43, + 0x26a985, + 0x37dc85, + 0x364648, + 0x257d85, + 0x279309, + 0x26d007, + 0x26d00b, + 0x2a240c, + 0x2a2a0a, + 0x2f0707, + 0x205c83, + 0x2ebcc8, + 0x242505, + 0x2c76c5, + 0x34c944, + 0x2ccd86, + 0x278206, + 0x26d887, + 0x23f8cb, + 0x29b244, + 0x2d7404, + 0x2c2784, + 0x2c6986, + 0x227104, + 0x2ba748, + 0x34c745, + 0x258a45, + 0x362c87, + 0x3c1f89, + 0x351305, + 0x37f30a, + 0x245d89, + 0x2d698a, + 0x23ee89, + 0x3a5104, + 0x306945, + 0x2d9448, + 0x2e184b, + 0x29ef05, + 0x2f3206, + 0x247684, + 0x279846, + 0x325a09, + 0x2a1c47, + 0x3b3248, + 0x2a0946, + 0x2faa47, + 0x27fd48, + 0x37f886, + 0x334f84, + 0x371c87, + 0x361205, + 0x373507, + 0x21c984, + 0x31e346, + 0x2e5bc8, + 0x297248, + 0x2e44c7, + 0x24e388, + 0x295645, + 0x20ae44, + 0x266a48, + 0x24e484, + 0x208e45, + 0x2f8e44, + 0x309607, + 0x2888c7, + 0x280708, + 0x2cb006, + 0x257d05, + 0x279108, + 0x3bf288, + 0x29ec49, + 0x22a046, + 0x233f88, + 0x345c8a, + 0x335488, + 0x2def85, + 0x225446, + 0x245c48, + 0x208a0a, + 0x229207, + 0x285dc5, + 0x28e508, + 0x2cc2c4, + 0x2d4906, + 0x2c0dc8, + 0x20aec6, + 0x31fc48, + 0x25b247, + 0x2063c6, + 0x2b8304, + 0x2a6b87, + 0x2b0d44, + 0x3259c7, + 0x2a524d, + 0x22f805, + 0x2e13cb, + 0x284586, + 0x258608, + 0x248644, + 0x2ee246, + 0x27bcc6, + 0x21e307, + 0x2968cd, + 0x24b947, + 0x2b1808, + 0x286985, + 0x364e48, + 0x2c2786, + 0x2956c8, + 0x354486, + 0x336b47, + 0x2c5689, + 0x353e07, + 0x287ac8, + 0x2733c5, + 0x21c508, + 0x223c85, + 0x2f7505, + 0x23f105, + 0x24c4c3, + 0x277884, + 0x28e705, + 0x36d849, + 0x36b906, + 0x2a1908, + 0x208c05, + 0x2b46c7, + 0x29f14a, + 0x2c6b09, + 0x288a8a, + 0x2cdb48, + 0x22ad0c, + 0x28144d, + 0x34a703, + 0x31fb48, + 0x3be485, + 0x2eec06, + 0x318086, + 0x2deac5, + 0x206f89, + 0x3ab885, + 0x279108, + 0x25e046, + 0x3532c6, + 0x2a0149, + 0x3a0f87, + 0x28ee06, + 0x29f0c8, + 0x36bc48, + 0x2d8b87, + 0x2be3ce, + 0x2c29c5, + 0x24fe85, + 0x20adc8, + 0x3269c7, + 0x208f82, + 0x2be804, + 0x2403ca, + 0x250208, + 0x346f46, + 0x298c88, + 0x29d706, + 0x31da88, + 0x2ac8c8, + 0x2f74c4, + 0x2b4a85, + 0x6010c4, + 0x6010c4, + 0x6010c4, + 0x200a43, + 0x223f86, + 0x2795c6, + 0x29c98c, + 0x201343, + 0x21c986, + 0x200b04, + 0x2a3308, + 0x37c545, + 0x2404c6, + 0x2bc408, + 0x2cef86, + 0x2eb0c6, + 0x339f08, + 0x2cfd47, + 0x22e849, + 0x2a714a, + 0x211644, + 0x22dcc5, + 0x2b3e05, + 0x2c5406, + 0x211906, + 0x29c706, + 0x2f8686, + 0x22e984, + 0x22e98b, + 0x22d744, + 0x242085, + 0x2ab5c5, + 0x29f506, + 0x369808, + 0x281307, + 0x38dd04, + 0x2076c3, + 0x2cbdc5, + 0x22dac7, + 0x28120b, + 0x364547, + 0x2bc308, + 0x2b4bc7, + 0x26be06, + 0x251c48, + 0x26f24b, + 0x217b46, + 0x216b09, + 0x26f3c5, + 0x30eb43, + 0x2c6bc6, + 0x25b148, + 0x20c843, + 0x22dbc3, + 0x27fd46, + 0x29d706, + 0x36808a, + 0x27b2c5, + 0x27bb0b, + 0x29d54b, + 0x247b03, + 0x220043, + 0x2af944, + 0x2a88c7, + 0x25b1c4, + 0x240084, + 0x385c04, + 0x335788, + 0x293408, + 0x20dd89, + 0x2c5248, + 0x23f387, + 0x2060c6, + 0x2a154f, + 0x2c2b06, + 0x2cd084, + 0x29324a, + 0x22d9c7, + 0x2b0e46, + 0x28e349, + 0x20dd05, + 0x364785, + 0x20de46, + 0x21c643, + 0x2cc309, + 0x221e46, + 0x20c589, + 0x38f4c6, + 0x26a985, + 0x307545, + 0x205843, + 0x2a8a08, + 0x31be07, + 0x21e644, + 0x2a3188, + 0x24c744, + 0x39a286, + 0x2b1d06, + 0x2445c6, + 0x2cfa09, + 0x2c7645, + 0x2975c6, + 0x21afc9, + 0x393086, + 0x2a1646, + 0x395846, + 0x203a45, + 0x2f8e46, + 0x336b44, + 0x3b6745, + 0x2bf884, + 0x2b2206, + 0x31e4c4, + 0x200d03, + 0x284b85, + 0x238888, + 0x2509c7, + 0x34e989, + 0x285cc8, + 0x297d51, + 0x2f174a, + 0x2e7d47, + 0x396246, + 0x200b04, + 0x2bf988, + 0x26d9c8, + 0x297f0a, + 0x286ecd, + 0x24c486, + 0x33a006, + 0x2a6c46, + 0x283447, + 0x2b18c5, + 0x341987, + 0x2009c5, + 0x2c9c04, + 0x2a7586, + 0x26d6c7, + 0x2cc00d, + 0x245b87, + 0x344c48, + 0x279409, + 0x225346, + 0x2a5505, + 0x2fa084, + 0x311386, + 0x21e446, + 0x250386, + 0x299508, + 0x21d683, + 0x208d83, + 0x341f45, + 0x257e46, + 0x2ac885, + 0x2a0b48, + 0x29c18a, + 0x39e284, + 0x2a3308, + 0x291688, + 0x29f347, + 0x208cc9, + 0x2bc008, + 0x286847, + 0x385e86, + 0x20aeca, + 0x311408, + 0x3a6b09, + 0x2ae608, + 0x228089, + 0x396107, + 0x2fea85, + 0x347306, + 0x2c4a88, + 0x27a888, + 0x28de08, + 0x38ab08, + 0x242085, + 0x203bc4, + 0x236ec8, + 0x209784, + 0x23ec84, + 0x26a985, + 0x290647, + 0x3c1d49, + 0x21e107, + 0x214045, + 0x276dc6, + 0x35bc86, + 0x211a84, + 0x2a0486, + 0x257b44, + 0x2a11c6, + 0x3c1b06, + 0x2181c6, + 0x3c6485, + 0x2a0a07, + 0x205c83, + 0x216e89, + 0x36fb08, + 0x2866c4, + 0x2866cd, + 0x297348, + 0x2ddc88, + 0x3a6a86, + 0x2c5789, + 0x2c6b09, + 0x325705, + 0x29c28a, + 0x252a0a, + 0x25e6cc, + 0x25e846, + 0x277c06, + 0x2c2c86, + 0x372b09, + 0x2eee46, + 0x29f946, + 0x3ab946, + 0x26d1c8, + 0x24e386, + 0x2cca0b, + 0x2907c5, + 0x258a45, + 0x277e85, + 0x3c2806, + 0x20ae83, + 0x244546, + 0x245b07, + 0x2bf845, + 0x3108c5, + 0x340045, + 0x2f83c6, + 0x3257c4, + 0x327886, + 0x2bad89, + 0x3c268c, + 0x2c9948, + 0x23c504, + 0x2f8b46, + 0x284686, + 0x25b148, + 0x218bc8, + 0x3c2589, + 0x331287, + 0x24ed89, + 0x37ba46, + 0x230604, + 0x20d804, + 0x280344, + 0x27fd48, + 0x3c1b8a, + 0x351286, + 0x35e207, + 0x36e207, + 0x242005, + 0x2b3dc4, + 0x28c846, + 0x2b1906, + 0x23a283, + 0x36f947, + 0x3aab88, + 0x32584a, + 0x22ca48, + 0x3643c8, + 0x31e505, + 0x29cdc5, + 0x26e785, + 0x2423c6, + 0x243286, + 0x340cc5, + 0x38db89, + 0x2b3bcc, + 0x26e847, + 0x297f88, + 0x2dee05, + 0x6010c4, + 0x24d184, + 0x280e84, + 0x21b846, + 0x29e4ce, + 0x364807, + 0x283645, + 0x3a6e0c, + 0x2f8f47, + 0x26d647, + 0x2f4449, + 0x21be49, + 0x285dc5, + 0x36fb08, + 0x231589, + 0x319605, + 0x2bf788, + 0x221fc6, + 0x266cc6, + 0x3c2f44, + 0x28b688, + 0x225503, + 0x3875c4, + 0x2cbe45, + 0x388307, + 0x228785, + 0x345b49, + 0x2ab04d, + 0x2b0486, + 0x207704, + 0x2ba8c8, + 0x27084a, + 0x228b87, + 0x31ce85, + 0x23b3c3, + 0x29d70e, + 0x2a8b0c, + 0x2ff747, + 0x29e687, + 0x217b83, + 0x2eee85, + 0x280e85, + 0x299048, + 0x2963c9, + 0x23c406, + 0x25b1c4, + 0x2e7c86, + 0x23390b, + 0x38320c, + 0x33a8c7, + 0x2cccc5, + 0x3b2348, + 0x2d8945, + 0x293247, + 0x2f1587, + 0x245945, + 0x20ae83, + 0x335ac4, + 0x22a385, + 0x3b8cc5, + 0x3b8cc6, + 0x2b5308, + 0x26d6c7, + 0x318386, + 0x205c06, + 0x23f046, + 0x27e509, + 0x21f3c7, + 0x250646, + 0x383386, + 0x275d06, + 0x2a8605, + 0x3c53c6, + 0x3746c5, + 0x2da488, + 0x28ff4b, + 0x28c586, + 0x36e244, + 0x2e0409, + 0x26d004, + 0x221f48, + 0x326107, + 0x281e44, + 0x2bb308, + 0x2c0844, + 0x2a8644, + 0x286605, + 0x2dfc46, + 0x3356c7, + 0x27f283, + 0x29d185, + 0x32ce84, + 0x24fec6, + 0x325788, + 0x2b6c05, + 0x28fc09, + 0x2303c5, + 0x21c988, + 0x2312c7, + 0x38de88, + 0x2ba487, + 0x27df09, + 0x2820c6, + 0x305706, + 0x2b3084, + 0x2d7345, + 0x300a4c, + 0x277e87, + 0x278a87, + 0x36e0c8, + 0x2b0486, + 0x271484, + 0x30a244, + 0x27fec9, + 0x2c2d86, + 0x282687, + 0x277784, + 0x24d786, + 0x317bc5, + 0x2cab47, + 0x2cc986, + 0x24d949, + 0x383047, + 0x2692c7, + 0x29ffc6, + 0x24d6c5, + 0x27d1c8, + 0x221cc8, + 0x348546, + 0x2b6c45, + 0x349e86, + 0x206543, + 0x298ec9, + 0x29c48e, + 0x2ba1c8, + 0x24c848, + 0x34834b, + 0x28fe46, + 0x211584, + 0x281044, + 0x29c58a, + 0x217207, + 0x250705, + 0x216b09, + 0x2be305, + 0x23ecc7, + 0x24e304, + 0x2a9a47, + 0x2e7f08, + 0x2e0dc6, + 0x24c589, + 0x2bc10a, + 0x217186, + 0x296e86, + 0x2ab545, + 0x3898c5, + 0x347ac7, + 0x24cf08, + 0x317b08, + 0x2f74c6, + 0x3075c5, + 0x21168e, + 0x2bc7c4, + 0x298fc5, + 0x276749, + 0x382c48, + 0x28aa46, + 0x29accc, + 0x29bd90, + 0x29e10f, + 0x29f688, + 0x2f0707, + 0x3c6485, + 0x28e705, + 0x335549, + 0x28e709, + 0x240d06, + 0x29ef87, + 0x2d7245, + 0x34d589, + 0x33f106, + 0x2eec8d, + 0x280209, + 0x240084, + 0x2b9f48, + 0x236f89, + 0x351446, + 0x2ebec5, + 0x305706, + 0x3b3109, + 0x277608, + 0x212305, + 0x28b684, + 0x29ae8b, + 0x351305, + 0x242d46, + 0x281786, + 0x285206, + 0x28f64b, + 0x28fd09, + 0x205b45, + 0x396e87, + 0x2f16c6, + 0x240206, + 0x280c08, + 0x2dfd49, + 0x344a0c, + 0x22d8c8, + 0x308ec6, + 0x32c803, + 0x32a506, + 0x27ddc5, + 0x27be48, + 0x306fc6, + 0x2cad88, + 0x2062c5, + 0x27a585, + 0x365288, + 0x31dc07, + 0x317fc7, + 0x26d887, + 0x240088, + 0x2c5508, + 0x2b1206, + 0x2b2047, + 0x267c47, + 0x28f34a, + 0x256c83, + 0x3c2806, + 0x23c645, + 0x2403c4, + 0x279409, + 0x27de84, + 0x250a44, + 0x29a104, + 0x29e68b, + 0x31bd47, + 0x2118c5, + 0x295348, + 0x276dc6, + 0x276dc8, + 0x27b206, + 0x28b5c5, + 0x28b885, + 0x28d446, + 0x28dbc8, + 0x28e288, + 0x2795c6, + 0x29518f, + 0x298990, + 0x369405, + 0x205c83, + 0x2306c5, + 0x309088, + 0x28e609, + 0x319748, + 0x24c408, + 0x238d88, + 0x31be07, + 0x276a89, + 0x2caf88, + 0x28dac4, + 0x299f88, + 0x2addc9, + 0x2b38c7, + 0x299f04, + 0x21e1c8, + 0x2a07ca, + 0x2aff86, + 0x24c486, + 0x229f09, + 0x29bfc7, + 0x2c83c8, + 0x345608, + 0x294048, + 0x25d345, + 0x38a705, + 0x258a45, + 0x280e45, + 0x37ffc7, + 0x20ae85, + 0x2bf845, + 0x206d86, + 0x319687, + 0x2e1787, + 0x2a0ac6, + 0x2ce085, + 0x242d46, + 0x24c685, + 0x2d70c8, + 0x2ff5c4, + 0x393106, + 0x334e84, + 0x31dec8, + 0x22f10a, + 0x27a34c, + 0x23fac5, + 0x283506, + 0x344bc6, + 0x341e06, + 0x308f44, + 0x317e85, + 0x27b047, + 0x29c049, + 0x2c6f47, + 0x6010c4, + 0x6010c4, + 0x31bbc5, + 0x2cb984, + 0x29a68a, + 0x276c46, + 0x251e84, + 0x204745, + 0x36c3c5, + 0x2b1804, + 0x2813c7, + 0x230347, + 0x2c6988, + 0x31fec8, + 0x212309, + 0x26eec8, + 0x29a84b, + 0x2b7fc4, + 0x37b985, + 0x27d905, + 0x26d809, + 0x2dfd49, + 0x2e0308, + 0x22d748, + 0x29f504, + 0x2846c5, + 0x200583, + 0x2c53c5, + 0x297646, + 0x29620c, + 0x21f046, + 0x2ebdc6, + 0x28acc5, + 0x2f8448, + 0x35ec46, 0x3963c6, - 0x336789, - 0x2cd449, - 0x3a1985, - 0x2a190a, - 0x2adb4a, - 0x2af7cc, - 0x2af946, - 0x27d9c6, - 0x2c83c6, - 0x273209, - 0x224f06, - 0x262c46, - 0x359006, - 0x25b448, - 0x27d546, - 0x2d36cb, - 0x297c05, - 0x244d85, - 0x27dc45, - 0x366f46, - 0x20ac03, - 0x241946, - 0x277507, - 0x2c4a05, - 0x24c705, - 0x3645c5, - 0x327346, - 0x31da84, - 0x31da86, - 0x3add49, - 0x366dcc, - 0x37a948, - 0x33f004, - 0x2fa886, - 0x2a1e06, - 0x29bec8, - 0x218808, - 0x366cc9, - 0x3b1987, - 0x245989, - 0x254106, - 0x22c2c4, - 0x20bf04, - 0x286cc4, - 0x285b88, - 0x20290a, - 0x3477c6, - 0x352107, - 0x36f007, - 0x2d4505, - 0x2a7084, - 0x2913c6, - 0x2b6e46, - 0x202803, - 0x308d87, - 0x368b48, - 0x3a1aca, - 0x2ce348, - 0x2cec88, - 0x35af05, - 0x253245, - 0x26df85, - 0x2d48c6, - 0x33d4c6, - 0x35bd05, - 0x2969c9, - 0x2a6e8c, - 0x26e047, - 0x29de88, - 0x381a45, - 0x68a8c4, - 0x24df84, - 0x25d784, - 0x214486, - 0x2a450e, - 0x205947, - 0x2c41c5, - 0x2abfcc, - 0x231287, - 0x216207, - 0x218089, - 0x218f89, - 0x28a645, - 0x308f48, - 0x24d609, - 0x334005, - 0x2c4948, - 0x322906, - 0x361f06, - 0x2e4444, - 0x2ae848, - 0x251f43, - 0x303084, - 0x2b37c5, - 0x3ac0c7, - 0x210445, - 0x39bbc9, - 0x28aa8d, - 0x299886, - 0x245404, - 0x2937c8, - 0x27d00a, - 0x224107, - 0x23be45, - 0x203143, - 0x2a37ce, - 0x27868c, - 0x2faa87, - 0x2a46c7, - 0x203c03, - 0x224f45, - 0x25d785, - 0x29e9c8, - 0x29bb89, - 0x33ef06, - 0x247444, - 0x249b86, - 0x21e3cb, - 0x2cd1cc, - 0x221507, - 0x2d5c45, - 0x3ad988, - 0x2e0b85, - 0x2c2307, - 0x3630c7, - 0x251f45, - 0x20ac03, - 0x39a644, - 0x212905, - 0x351805, - 0x351806, - 0x34fd08, - 0x216287, - 0x319646, - 0x35c106, - 0x3a1406, - 0x2d5e89, - 0x20f847, - 0x26a5c6, - 0x2cd346, - 0x252006, - 0x2aeb45, - 0x219646, - 0x3768c5, - 0x228848, - 0x2973cb, - 0x291086, - 0x36f044, - 0x2e2909, - 0x25b284, - 0x322888, - 0x2324c7, - 0x2885c4, - 0x2be288, - 0x2c5304, - 0x2aeb84, - 0x28b145, - 0x35e286, - 0x34f387, - 0x239b43, - 0x2a2a85, - 0x322e84, - 0x358586, - 0x3a1a08, - 0x368885, - 0x297089, - 0x3363c5, - 0x2e1e88, - 0x215207, - 0x388dc8, - 0x2bd787, - 0x362709, - 0x255a86, - 0x32b3c6, - 0x359004, - 0x293605, - 0x30150c, - 0x27dc47, - 0x27e207, - 0x36eec8, - 0x299886, - 0x277444, - 0x32e344, - 0x286849, - 0x2c84c6, - 0x240987, - 0x3a8bc4, - 0x286086, - 0x343905, - 0x2cbb07, - 0x2d3646, - 0x252d49, - 0x2aab07, - 0x26f8c7, - 0x2a6246, - 0x3879c5, - 0x283988, - 0x219b08, - 0x2646c6, - 0x3688c5, - 0x261b06, - 0x209983, - 0x29e849, - 0x2a2b4e, - 0x2bd488, - 0x2314c8, - 0x2644cb, - 0x2972c6, - 0x2089c4, - 0x244ac4, - 0x2a2c4a, - 0x216907, - 0x26a685, - 0x213bc9, - 0x2c3285, - 0x3a1087, - 0x2b4c04, - 0x284487, - 0x2e65c8, - 0x2cb206, - 0x21e789, - 0x2beaca, - 0x216886, - 0x29c8c6, - 0x2b1945, - 0x37ccc5, - 0x31a107, - 0x24dd08, - 0x343848, - 0x395fc6, - 0x234145, - 0x208ace, - 0x2b8bc4, - 0x264645, - 0x27c749, - 0x30dfc8, - 0x28f0c6, - 0x2a04cc, - 0x2a1410, - 0x2a414f, - 0x2a51c8, - 0x3363c7, - 0x200045, - 0x26fd05, - 0x34f209, - 0x298a89, - 0x23cbc6, - 0x278307, - 0x2d2805, - 0x21b509, - 0x340146, - 0x224d4d, - 0x286b89, - 0x202ec4, - 0x2bd208, - 0x2113c9, - 0x347986, - 0x27cec5, - 0x32b3c6, - 0x317849, - 0x26ba08, - 0x212485, - 0x2ae844, - 0x2a068b, - 0x347845, - 0x2a07c6, - 0x287586, - 0x26ed86, - 0x287fcb, - 0x297189, - 0x35c045, - 0x388b87, - 0x363206, - 0x220f06, - 0x25d508, - 0x35e389, - 0x219e8c, - 0x30a648, - 0x360406, - 0x340bc3, - 0x303c06, - 0x287e05, - 0x281948, + 0x24c486, + 0x22c7cc, + 0x250544, + 0x23f18a, + 0x28ac08, + 0x296047, + 0x32cd86, + 0x23c4c7, + 0x2e7885, + 0x2adf86, + 0x35aa46, + 0x366207, + 0x250a84, + 0x309705, + 0x276744, + 0x2c9c87, + 0x276988, + 0x277a8a, + 0x27ebc7, + 0x2a8207, + 0x2f0687, + 0x2d8a89, + 0x29620a, + 0x22e943, + 0x250985, + 0x218203, + 0x385c49, + 0x336dc8, + 0x351687, + 0x319849, + 0x221dc6, + 0x3b6808, + 0x33c445, + 0x3bf38a, + 0x200c89, + 0x3299c9, + 0x35eb07, + 0x26dac9, + 0x2180c8, + 0x3663c6, + 0x2836c8, + 0x203a47, + 0x22ea87, + 0x245d87, + 0x2e5a48, + 0x2f89c6, + 0x2a0585, + 0x27b047, + 0x296988, + 0x334e04, + 0x2c8004, + 0x28ed07, + 0x2acc47, + 0x23140a, + 0x366346, + 0x364c4a, + 0x2be747, + 0x2bc587, + 0x3097c4, + 0x2aa444, + 0x2caa46, + 0x23a444, + 0x23a44c, + 0x39ee05, + 0x218a09, + 0x337284, + 0x2b18c5, + 0x2707c8, + 0x239dc5, + 0x37f306, + 0x2311c4, + 0x2d02ca, + 0x2cb2c6, + 0x29180a, + 0x2162c7, + 0x224505, + 0x21c645, + 0x24204a, + 0x28dd45, + 0x29ed06, + 0x209784, + 0x2afac6, + 0x347b85, + 0x307086, + 0x2e44cc, + 0x218d4a, + 0x252b04, + 0x2060c6, + 0x29bfc7, + 0x2cc904, + 0x26d1c8, + 0x2f3106, + 0x211509, + 0x2db609, + 0x394949, + 0x2c7246, + 0x203b46, + 0x283807, + 0x38dac8, + 0x203949, + 0x31bd47, + 0x2954c6, + 0x2faac7, + 0x2a6b05, + 0x2bc7c4, + 0x2833c7, + 0x267e05, + 0x286545, + 0x31f747, + 0x245808, + 0x3b22c6, + 0x2977cd, + 0x29924f, + 0x29d54d, + 0x214084, + 0x238986, + 0x2d0688, + 0x3ab905, + 0x28f508, + 0x256f8a, + 0x240084, 0x233b46, - 0x2cbd48, - 0x275845, - 0x29dfc5, - 0x215348, - 0x31a947, - 0x319287, - 0x247fc7, - 0x220d88, - 0x336508, - 0x31e4c6, - 0x2b7687, - 0x247987, - 0x287cca, - 0x254003, - 0x366f46, - 0x202a45, - 0x203bc4, - 0x27f889, - 0x362684, - 0x2a7e44, - 0x2a1c84, - 0x2a46cb, - 0x211547, - 0x208d05, - 0x29ab08, - 0x27cdc6, - 0x27cdc8, - 0x280dc6, - 0x2900c5, - 0x290385, - 0x291f46, - 0x292b08, - 0x292dc8, - 0x27fa46, - 0x29a94f, - 0x29e310, - 0x3b1785, - 0x204083, - 0x22c385, - 0x30b188, - 0x298989, - 0x334148, - 0x2d5d08, - 0x224788, - 0x211607, - 0x27ca89, - 0x2cbf48, - 0x25bd44, - 0x2a1b08, - 0x2deb49, - 0x2b81c7, - 0x29f904, - 0x303f08, - 0x387cca, - 0x2ebe06, - 0x2a4dc6, - 0x21f5c9, - 0x2a1647, - 0x2ce1c8, - 0x30cc88, - 0x3a8a48, - 0x356245, - 0x37dc45, - 0x244d85, - 0x25d745, - 0x37e287, - 0x20ac05, - 0x2c4a05, - 0x2b5546, - 0x334087, - 0x2d1807, - 0x387fc6, - 0x2d7405, - 0x2a07c6, - 0x212245, - 0x2b84c8, - 0x2f1d84, - 0x2c7686, - 0x343744, - 0x2b69c8, - 0x2c778a, - 0x28004c, - 0x234bc5, - 0x2c4086, - 0x21a046, - 0x368706, - 0x30b384, - 0x343bc5, - 0x280c07, - 0x2a16c9, - 0x2cdc87, - 0x68a8c4, - 0x68a8c4, - 0x3175c5, - 0x32dd04, - 0x29fe8a, - 0x27cc46, - 0x24d404, - 0x208305, - 0x37a545, - 0x2b6d44, - 0x2871c7, - 0x36b847, - 0x2cd788, - 0x368ec8, - 0x212489, - 0x340248, - 0x2a004b, - 0x250b44, - 0x221005, - 0x2840c5, - 0x247f49, - 0x35e389, - 0x2e2808, - 0x232248, - 0x203084, - 0x2a1e45, - 0x202943, - 0x264845, - 0x38ed06, - 0x29b9cc, - 0x20f4c6, - 0x247246, - 0x28f345, - 0x3273c8, - 0x2bd606, - 0x2ea346, - 0x2a4dc6, - 0x2297cc, - 0x2ba544, - 0x3a154a, - 0x28f288, - 0x29b807, - 0x322d86, - 0x33efc7, - 0x2f2185, - 0x343e06, - 0x34af86, - 0x356707, - 0x2be7c4, - 0x3676c5, - 0x27c744, - 0x37ac87, - 0x27c988, - 0x27d84a, - 0x284a07, - 0x2d22c7, - 0x336347, - 0x2e0cc9, - 0x29b9ca, - 0x219e43, - 0x2e9645, - 0x200c83, - 0x2e8cc9, - 0x26ac48, - 0x38eb47, - 0x334249, - 0x219c06, - 0x2d4108, - 0x337f85, - 0x2e16ca, - 0x2d8c49, - 0x2abc49, - 0x3aea07, - 0x283049, - 0x214a08, - 0x3568c6, - 0x2c4248, - 0x217b07, - 0x235c87, - 0x277787, - 0x2d2688, - 0x2fa706, - 0x387a85, - 0x280c07, - 0x29c3c8, - 0x3436c4, - 0x30e3c4, - 0x294047, - 0x2b2d47, - 0x24d48a, - 0x356846, - 0x330f0a, - 0x2c34c7, - 0x2b8987, - 0x257e44, - 0x289204, - 0x2d3546, - 0x3b3d44, - 0x3b3d4c, - 0x203505, - 0x218649, - 0x2dfc44, - 0x2b6e05, - 0x27cf88, - 0x292e85, - 0x375846, - 0x217f84, - 0x3ae3ca, - 0x32b7c6, - 0x2a68ca, - 0x237f07, - 0x2d3385, - 0x21c985, - 0x2d454a, - 0x2a6805, - 0x2a4cc6, - 0x208484, - 0x2b5106, - 0x31a1c5, - 0x233c06, - 0x2e88cc, - 0x2cd90a, - 0x2936c4, - 0x235ec6, - 0x2a1647, - 0x2d5204, - 0x25b448, - 0x38e5c6, - 0x208949, - 0x2bb109, - 0x2b0689, - 0x24f346, - 0x217c06, - 0x2c4387, - 0x296908, - 0x217a09, - 0x211547, - 0x29ac86, - 0x3872c7, - 0x28b985, - 0x2b8bc4, - 0x2c3f47, - 0x247b45, - 0x28b085, - 0x235247, - 0x251e08, - 0x3ad906, - 0x29d24d, - 0x29ebcf, - 0x2a360d, - 0x215f84, - 0x232cc6, - 0x2d91c8, - 0x358fc5, - 0x287e88, - 0x23a58a, - 0x202ec4, - 0x21e946, - 0x239607, - 0x22d9c7, - 0x2a79c9, - 0x2c4205, - 0x2b6d44, - 0x2b8cca, - 0x2be589, - 0x283147, - 0x272086, - 0x347986, - 0x2a1d86, - 0x364046, - 0x2d890f, - 0x2d9089, - 0x27d546, - 0x282e46, - 0x32fd89, - 0x2b7787, - 0x226743, - 0x229946, - 0x218303, - 0x2e7dc8, - 0x387107, - 0x2a53c9, - 0x29f208, - 0x3193c8, + 0x2cd107, + 0x2ca387, + 0x2cfe09, + 0x283685, + 0x2b1804, + 0x2b49ca, + 0x2bbbc9, + 0x26dbc7, + 0x297a86, 0x351446, - 0x20f409, - 0x23c1c5, - 0x2b7844, - 0x2a73c7, - 0x273285, - 0x215f84, - 0x208dc8, - 0x216bc4, - 0x2b74c7, - 0x34bc06, - 0x2b3045, - 0x299188, - 0x34784b, - 0x319c07, - 0x2d47c6, - 0x2c82c4, - 0x32d146, - 0x270f45, - 0x247b45, - 0x283709, - 0x286dc9, - 0x235cc4, - 0x235d05, - 0x235f05, - 0x2e1546, - 0x309048, - 0x2c2c46, - 0x36898b, - 0x2b4c8a, - 0x2b6905, - 0x290406, - 0x3025c5, - 0x2e0a45, - 0x2ab6c7, - 0x3ac808, - 0x245984, - 0x26c586, - 0x292e46, - 0x214bc7, - 0x30d7c4, - 0x2817c6, - 0x2b9f85, - 0x2b9f89, - 0x2135c4, - 0x2a7209, - 0x27fa46, - 0x2c5108, - 0x235f05, - 0x36f105, - 0x233c06, - 0x219d89, - 0x218f89, - 0x2472c6, - 0x30e0c8, - 0x28abc8, - 0x302584, - 0x2b9004, - 0x2b9008, - 0x3269c8, - 0x245a89, - 0x38ec86, - 0x2a4dc6, - 0x320c0d, - 0x351c06, - 0x34c209, - 0x23d1c5, - 0x3b2106, - 0x262d48, - 0x31d9c5, - 0x2479c4, - 0x270f45, - 0x2866c8, - 0x29fc49, - 0x27c804, - 0x2008c6, - 0x39660a, - 0x2fa988, - 0x24d609, - 0x244c4a, - 0x3341c6, - 0x29ed88, - 0x2c20c5, - 0x2c0e48, - 0x2bd885, - 0x219ac9, - 0x36bd09, - 0x203602, - 0x2e3305, - 0x276286, - 0x27f987, - 0x295705, - 0x2f0ec6, - 0x306288, - 0x299886, - 0x2b9a09, - 0x27e306, - 0x25d388, - 0x2afb85, - 0x25c586, - 0x26aac8, - 0x285b88, - 0x2e9f88, - 0x347b08, - 0x219644, - 0x209fc3, - 0x2b9c44, - 0x249b06, - 0x28b9c4, - 0x231407, - 0x2ea249, - 0x2c7a05, - 0x30cc86, - 0x229946, - 0x34fb4b, - 0x2b6846, - 0x20edc6, - 0x2cb6c8, - 0x24c646, - 0x2bcb03, - 0x2080c3, - 0x2b8bc4, - 0x22e605, - 0x2b4447, - 0x27c988, - 0x27c98f, - 0x280b0b, - 0x308e48, - 0x200946, - 0x30914e, - 0x233c03, - 0x2b43c4, - 0x2b67c5, - 0x2b6bc6, - 0x2914cb, - 0x297b46, - 0x222709, - 0x2b3045, - 0x38a208, - 0x211d88, - 0x218e4c, - 0x2a4706, - 0x264886, - 0x2de405, - 0x28c188, - 0x26aac5, - 0x335848, - 0x2a084a, - 0x2a3a49, - 0x68a8c4, - 0x3760d1c2, - 0x15f048, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x20fbc3, - 0x204ac3, - 0x200383, - 0x368883, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x2964c4, - 0x204ac3, - 0x200383, - 0x210e03, - 0x24ae04, - 0x2d0783, - 0x23a184, - 0x231b83, - 0x2da904, - 0x332ec3, - 0x2959c7, - 0x20fbc3, - 0x20abc3, - 0x2842c8, - 0x200383, - 0x2b400b, - 0x2f2a03, - 0x2716c6, - 0x205bc2, - 0x26b44b, - 0x231b83, - 0x332ec3, - 0x204ac3, - 0x200383, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x200383, - 0x200e03, - 0x203383, - 0x204cc2, - 0x15f048, - 0x325b45, - 0x247bc8, - 0x2ec408, - 0x20d1c2, - 0x329dc5, - 0x39c307, - 0x2001c2, - 0x24b587, - 0x208a42, - 0x246f87, - 0x239ec9, - 0x2c1c88, - 0x3a88c9, - 0x338b02, - 0x270647, - 0x2abac4, - 0x39c3c7, - 0x2b4b87, - 0x24ca02, - 0x20fbc3, - 0x20b602, - 0x202082, - 0x200382, - 0x217902, - 0x200e02, - 0x20c4c2, - 0x2af685, - 0x24dec5, - 0xd1c2, - 0x31b83, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x204ac3, - 0x200383, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x20fbc3, - 0x204ac3, - 0x200383, - 0x117c3, - 0x701, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x2964c4, - 0x204303, - 0x204ac3, - 0x200383, - 0x21bd03, - 0x3a40d686, - 0x5e303, - 0x854c5, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x204ac3, - 0x200383, - 0x20d1c2, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x204ac3, - 0x200383, - 0x8082, - 0x15f048, - 0x4dcc4, - 0xe0f85, - 0x204cc2, - 0x2cfa44, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x236d03, - 0x2b0405, - 0x204303, - 0x205d83, - 0x204ac3, - 0x2104c3, - 0x200383, - 0x213e83, - 0x24ae83, - 0x24abc3, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x204ac3, - 0x200383, - 0x20d1c2, - 0x200383, - 0x15f048, - 0x332ec3, - 0x15f048, - 0x26ae03, - 0x2d0783, - 0x22ef04, - 0x231b83, - 0x332ec3, - 0x20a3c2, - 0x20fbc3, - 0x204ac3, - 0x200383, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x20a3c2, - 0x22d603, - 0x204ac3, - 0x200383, - 0x2ec383, - 0x213e83, - 0x204cc2, - 0x20d1c2, - 0x332ec3, - 0x204ac3, - 0x200383, - 0x2716c5, - 0x1540c6, - 0x24ae04, - 0x205bc2, - 0x15f048, - 0x204cc2, - 0x1d508, - 0x20d1c2, - 0x97606, - 0x1681c4, - 0x16e1cb, - 0x3dc06, - 0xfcc7, - 0x231b83, - 0x332ec3, - 0x15ae05, - 0x19c804, - 0x221543, - 0x53fc7, - 0xdc304, - 0x204ac3, - 0x94fc4, - 0x200383, - 0x2f39c4, - 0xfe588, - 0x125886, - 0x114f85, - 0x20d1c2, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x20fbc3, - 0x20abc3, - 0x200383, - 0x2f2a03, - 0x205bc2, - 0x15f048, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x204143, - 0x213184, - 0x204ac3, - 0x200383, - 0x2d0783, - 0x231b83, - 0x2da904, - 0x332ec3, - 0x204ac3, - 0x200383, - 0x2716c6, - 0x231b83, - 0x332ec3, - 0x178ac3, - 0x200383, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x204ac3, - 0x200383, - 0xfcc7, - 0x15f048, - 0x332ec3, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x204ac3, - 0x200383, - 0x40ed0783, - 0x231b83, - 0x204ac3, - 0x200383, - 0x15f048, - 0x204cc2, - 0x20d1c2, - 0x2d0783, - 0x332ec3, - 0x204ac3, - 0x200382, - 0x200383, - 0x316e47, - 0x23860b, - 0x2396c3, - 0x24be08, - 0x296687, - 0x225246, - 0x2c6145, - 0x373549, - 0x20f948, - 0x260d09, - 0x260d10, - 0x35d28b, - 0x385989, - 0x209303, - 0x2b5649, - 0x230806, - 0x23080c, - 0x260f08, - 0x3ae848, - 0x35d7c9, - 0x2a5d0e, - 0x20780b, - 0x2eb20c, - 0x205283, - 0x26cc4c, - 0x205289, - 0x257a87, - 0x231acc, - 0x36aa8a, - 0x24fe44, - 0x393f4d, - 0x26cb08, - 0x210e0d, - 0x272746, - 0x29258b, - 0x31a3c9, - 0x23d087, - 0x339606, - 0x349d89, - 0x38ce8a, - 0x37a0c8, - 0x2f24c4, - 0x34ecc7, - 0x3ac5c7, - 0x3a8dc4, - 0x32d984, - 0x237209, - 0x2ceac9, - 0x237908, - 0x210b85, - 0x392545, - 0x20aa06, - 0x393e09, - 0x23a80d, - 0x2eac88, - 0x20a907, - 0x2c61c8, - 0x382986, - 0x37ed04, - 0x359b85, - 0x202246, - 0x203204, - 0x205187, - 0x206d8a, - 0x211cc4, - 0x2167c6, - 0x2182c9, - 0x2182cf, - 0x2197cd, - 0x21a486, - 0x21d110, - 0x21d506, - 0x21dc47, - 0x21ebc7, - 0x21ebcf, - 0x21f889, - 0x2242c6, - 0x226487, - 0x226488, - 0x227649, - 0x2b3108, - 0x2e7907, - 0x20a203, - 0x378c86, - 0x3abf08, - 0x2a5fca, - 0x21fe49, - 0x20fa83, - 0x39c206, - 0x26c3ca, - 0x2fca47, - 0x2578ca, - 0x26a24e, - 0x21f9c6, - 0x2e3507, - 0x227086, - 0x201806, - 0x37da4b, - 0x30c58a, - 0x317ecd, - 0x217cc7, - 0x359188, - 0x359189, - 0x35918f, - 0x20e28c, - 0x281bc9, - 0x2e928e, - 0x295aca, - 0x3035c6, - 0x2fbbc6, - 0x3b06cc, - 0x3106cc, - 0x311448, - 0x33d1c7, - 0x25b7c5, - 0x2251c4, - 0x2438ce, - 0x38d104, - 0x257bc7, - 0x26d08a, - 0x36e914, - 0x373a4f, - 0x21ed88, - 0x378b48, - 0x357e8d, - 0x357e8e, - 0x3823c9, - 0x3a5b08, - 0x3a5b0f, - 0x2317cc, - 0x2317cf, - 0x232a07, - 0x23acca, - 0x21cc4b, - 0x23bcc8, - 0x23e5c7, - 0x264f4d, - 0x3151c6, - 0x394106, - 0x2417c9, - 0x259888, - 0x24c108, - 0x24c10e, - 0x238707, - 0x226985, - 0x24da85, - 0x205e04, - 0x225506, - 0x237808, - 0x260183, - 0x2efb8e, - 0x265308, - 0x2f198b, - 0x26afc7, - 0x395e05, - 0x26cdc6, - 0x2b0e07, - 0x307048, - 0x319f09, - 0x298fc5, - 0x28a188, - 0x217306, - 0x3a02ca, - 0x2437c9, - 0x231b89, - 0x231b8b, - 0x201148, - 0x3a8c89, - 0x210c46, - 0x22c54a, - 0x2b7f4a, - 0x23aecc, - 0x3acb87, - 0x2c1a8a, - 0x328ecb, - 0x328ed9, - 0x30fa48, - 0x271745, - 0x265106, - 0x258fc9, - 0x261cc6, - 0x21324a, - 0x20fb46, - 0x201e44, - 0x2c9ecd, - 0x201e47, - 0x20b549, - 0x383305, - 0x24e548, + 0x284606, + 0x371d46, + 0x2cf6cf, + 0x2d0549, + 0x24e386, + 0x354846, + 0x31ac09, + 0x2b2147, + 0x20be43, + 0x22c946, + 0x20de03, + 0x2de988, + 0x2fa907, + 0x29f889, + 0x2b1b88, + 0x318108, + 0x328006, + 0x21ef89, + 0x399b05, + 0x2b2204, + 0x2e8187, + 0x372b85, + 0x214084, + 0x211988, + 0x2174c4, + 0x2b1e87, + 0x30d686, + 0x395ac5, + 0x2ae608, + 0x35130b, + 0x2b4107, + 0x2422c6, + 0x2c2b84, + 0x2b6286, + 0x26a985, + 0x267e05, + 0x27cf49, + 0x280fc9, + 0x22eac4, + 0x22eb05, + 0x206105, + 0x3bf206, + 0x36fc08, + 0x2bdc86, + 0x3aa9cb, + 0x37570a, + 0x2ba585, + 0x28b906, + 0x39df85, + 0x345405, + 0x29b847, + 0x3c2a88, + 0x24ed84, + 0x39ce86, + 0x28e306, + 0x218287, + 0x30eb04, + 0x27bcc6, + 0x35c745, + 0x35c749, + 0x203d44, + 0x2b3f49, + 0x2795c6, + 0x2c0048, + 0x206105, + 0x36e305, + 0x307086, + 0x344909, + 0x21be49, + 0x2ebe46, + 0x382d48, + 0x2ab188, + 0x39df44, + 0x2b5504, + 0x2b5508, + 0x239d08, 0x24ee89, - 0x24f0c4, - 0x24fd47, - 0x24fd48, - 0x250287, - 0x26ea08, - 0x2545c7, - 0x35c2c5, - 0x25c70c, - 0x25cf49, - 0x2c4dca, - 0x38f0c9, - 0x2b5749, - 0x2739cc, - 0x263e0b, - 0x2640c8, - 0x265688, - 0x268a44, - 0x288288, - 0x289389, - 0x36ab47, - 0x218506, - 0x317287, - 0x21e1c9, - 0x328b0b, - 0x32cfc7, - 0x200407, - 0x238047, - 0x210d84, - 0x210d85, - 0x2ac905, - 0x33c00b, - 0x399404, - 0x369d08, - 0x26f08a, - 0x2173c7, - 0x341dc7, - 0x290c12, - 0x27ee46, - 0x22e886, - 0x35898e, - 0x281346, - 0x298708, - 0x29938f, - 0x2111c8, - 0x38bb08, - 0x3af64a, - 0x3af651, - 0x2a6b4e, - 0x254e4a, - 0x254e4c, - 0x2014c7, - 0x3a5d10, - 0x3b5388, - 0x2a6d45, - 0x2b114a, - 0x20324c, - 0x29afcd, - 0x2fce06, - 0x2fce07, - 0x2fce0c, - 0x305c8c, - 0x32814c, - 0x28f98b, - 0x289b84, - 0x21f744, - 0x374149, - 0x2fe3c7, - 0x23e389, - 0x2b7d89, - 0x35a587, - 0x36a906, - 0x36a909, - 0x39d403, - 0x2129ca, - 0x32f807, - 0x238acb, - 0x317d4a, - 0x2abb44, - 0x39c546, - 0x284c89, - 0x3b3bc4, - 0x2035ca, - 0x2d4ac5, - 0x2c0005, - 0x2c000d, - 0x2c034e, - 0x378205, - 0x323506, - 0x2712c7, - 0x38684a, - 0x38d406, - 0x35ecc4, - 0x2f8987, - 0x2da18b, - 0x382a47, - 0x282ac4, - 0x24f706, - 0x24f70d, - 0x21de8c, - 0x204986, - 0x2eae8a, - 0x235806, - 0x2f3248, - 0x28bf47, - 0x33f88a, - 0x23d986, - 0x217bc3, - 0x262ec6, - 0x3abd88, - 0x2a024a, - 0x2766c7, - 0x2766c8, - 0x27dd84, - 0x2cc0c7, - 0x23ccc8, - 0x29e008, - 0x288b48, - 0x33110a, - 0x2e0405, - 0x2e0687, - 0x254c93, - 0x2d0806, - 0x26f288, - 0x222c09, - 0x24b448, - 0x3514cb, - 0x2cddc8, - 0x273704, - 0x215446, - 0x3b4f06, - 0x35e0c9, - 0x2c72c7, - 0x25c808, - 0x29e186, - 0x235144, - 0x2ce085, - 0x2c8a08, - 0x2c900a, - 0x2c9b48, - 0x2ce746, - 0x29ef8a, - 0x351988, - 0x2d5008, - 0x2d6a88, - 0x2d70c6, - 0x2d93c6, - 0x20168c, - 0x2d99d0, - 0x28de45, - 0x210fc8, - 0x306790, - 0x210fd0, - 0x260b8e, - 0x20130e, - 0x201314, - 0x31abcf, - 0x31af86, - 0x3319d1, - 0x339793, - 0x339c08, - 0x3aafc5, - 0x35b6c8, - 0x385785, - 0x22854c, - 0x229489, - 0x282449, - 0x245d47, - 0x377009, - 0x243d87, - 0x2fadc6, - 0x359987, - 0x261245, - 0x211803, - 0x260349, - 0x222ec9, - 0x378ac3, - 0x39a544, - 0x35c40d, - 0x3b1b0f, - 0x235185, - 0x35b5c6, - 0x211b07, - 0x325987, - 0x28cd86, - 0x28cd8b, - 0x2a82c5, - 0x25f106, - 0x2fba47, - 0x276ec9, - 0x2290c6, - 0x22e405, - 0x31190b, - 0x23bb46, - 0x3724c5, - 0x28b548, - 0x321d88, - 0x2d75cc, - 0x2d75d0, - 0x2e0149, - 0x2e7107, - 0x30860b, - 0x2e6186, - 0x2e77ca, - 0x2ea4cb, - 0x2eb74a, - 0x2eb9c6, - 0x2ec245, - 0x32f546, - 0x27e4c8, - 0x245e0a, - 0x357b1c, - 0x2f2acc, - 0x2f2dc8, - 0x2716c5, - 0x2f4f07, - 0x26a106, - 0x27d385, - 0x21c2c6, - 0x28cf48, - 0x2be807, - 0x2a5c08, - 0x2e360a, - 0x34a10c, - 0x34a389, - 0x37ee87, - 0x20d244, - 0x24db46, - 0x38b68a, - 0x2b7e85, - 0x20734c, - 0x20b088, - 0x377648, - 0x20d98c, - 0x21be8c, - 0x2206c9, - 0x220907, - 0x342c0c, - 0x3aa644, - 0x23c54a, - 0x2580cc, - 0x278acb, - 0x24140b, - 0x241f46, - 0x383847, - 0x2ddb07, - 0x3a5f4f, - 0x2fda11, - 0x2ddb12, - 0x30d0cd, - 0x30d0ce, - 0x30d40e, - 0x31ad88, - 0x31ad92, - 0x252288, - 0x2962c7, - 0x25260a, - 0x204748, - 0x281305, - 0x37e0ca, - 0x21da47, - 0x305304, - 0x21b083, - 0x2b0fc5, - 0x3af8c7, - 0x2fea07, - 0x29b1ce, - 0x30ff4d, - 0x313c49, - 0x220c45, - 0x33aa03, - 0x25fac6, - 0x36ffc5, - 0x2f1bc8, - 0x30c009, - 0x265145, - 0x26514f, - 0x2ec087, - 0x373485, - 0x21b2ca, - 0x299b86, - 0x2f33c9, - 0x384d0c, - 0x2f99c9, - 0x207b06, - 0x26ee8c, - 0x340cc6, - 0x2fc548, - 0x2fc746, - 0x30fbc6, - 0x349344, - 0x264443, - 0x2b270a, - 0x35b211, - 0x281d8a, - 0x255d05, - 0x277947, - 0x259307, - 0x23cdc4, - 0x23cdcb, - 0x3a8748, - 0x2bd306, - 0x36ef45, - 0x3a05c4, - 0x291949, - 0x330304, - 0x25cd87, - 0x332705, - 0x332707, - 0x358bc5, - 0x2af743, - 0x296188, - 0x34398a, - 0x239b43, - 0x325b8a, - 0x3b4086, - 0x264ecf, - 0x353689, - 0x2efb10, - 0x2dee88, - 0x2d0e89, - 0x29d087, - 0x24f68f, - 0x334604, - 0x2da984, - 0x21d386, - 0x2b3546, - 0x256dca, - 0x383586, - 0x32a787, - 0x3055c8, - 0x3057c7, - 0x306047, - 0x307a4a, - 0x309b4b, - 0x3a2445, - 0x2dd748, - 0x2166c3, - 0x3b120c, - 0x37140f, - 0x25b5cd, - 0x2c4607, - 0x313d89, - 0x217687, - 0x23e148, - 0x36eb0c, - 0x273608, - 0x258908, - 0x3188ce, - 0x32bad4, - 0x32bfe4, - 0x3424ca, - 0x35ea8b, - 0x243e44, - 0x243e49, - 0x21e9c8, - 0x24e105, - 0x25fc8a, - 0x239d87, - 0x2957c4, - 0x368883, - 0x2d0783, - 0x23a184, - 0x231b83, - 0x332ec3, - 0x2964c4, - 0x204303, - 0x20fbc3, - 0x201686, - 0x213184, - 0x204ac3, - 0x200383, - 0x21aa03, - 0x204cc2, - 0x368883, - 0x20d1c2, - 0x2d0783, - 0x23a184, - 0x231b83, - 0x332ec3, - 0x204303, - 0x201686, - 0x204ac3, - 0x200383, - 0x15f048, - 0x2d0783, - 0x231b83, - 0x2135c3, - 0x204ac3, - 0x200383, - 0x15f048, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x20fbc3, - 0x213184, - 0x204ac3, - 0x200383, - 0x204cc2, - 0x21fd43, - 0x20d1c2, - 0x231b83, - 0x332ec3, - 0x20fbc3, - 0x204ac3, - 0x200383, - 0x20e542, - 0x20d882, - 0x20d1c2, - 0x2d0783, - 0x209c02, - 0x201d42, - 0x2964c4, - 0x222044, - 0x223342, - 0x213184, + 0x2975c6, + 0x24c486, + 0x32be4d, + 0x27c986, + 0x2ce449, + 0x39e845, + 0x20de46, + 0x2941c8, + 0x3277c5, + 0x267c84, + 0x26a985, + 0x280908, + 0x29a449, + 0x276804, + 0x31e346, + 0x251f0a, + 0x2ff648, + 0x231589, + 0x25890a, + 0x3197c6, + 0x299408, + 0x293005, + 0x28ae88, + 0x2e7905, + 0x221c89, + 0x376189, + 0x23c442, + 0x26f3c5, + 0x2ebf86, + 0x279507, + 0x38c8c5, + 0x30d2c6, + 0x304c08, + 0x2b0486, + 0x2d9309, + 0x278b86, + 0x280a88, + 0x2a9605, + 0x382106, + 0x336c48, + 0x27fd48, + 0x396008, + 0x2f2388, + 0x3c53c4, + 0x21e583, + 0x2d9544, + 0x27edc6, + 0x2a6b44, + 0x24c787, + 0x3962c9, + 0x3c0485, + 0x345606, + 0x22c946, + 0x2b514b, + 0x2b0d86, + 0x293b06, + 0x393208, + 0x310806, + 0x224303, + 0x3c4e83, + 0x2bc7c4, + 0x233e85, + 0x2d45c7, + 0x276988, + 0x27698f, + 0x27af4b, + 0x36fa08, + 0x31e3c6, + 0x36fd0e, + 0x242483, + 0x2d4544, + 0x2b0d05, + 0x2b1686, + 0x28c94b, + 0x290706, + 0x227109, + 0x395ac5, + 0x2eccc8, + 0x20e688, + 0x21bd0c, + 0x29e6c6, + 0x2c5406, + 0x2e9f85, + 0x287888, + 0x27a345, + 0x350288, + 0x29b04a, + 0x29d989, + 0x6010c4, + 0x200742, + 0x3c202c42, + 0x202542, + 0x26ff84, + 0x201e42, + 0x21a484, + 0x2032c2, + 0x200342, + 0x207c02, + 0xcd588, + 0x20be03, + 0x237583, + 0x30e843, + 0x21f743, + 0x20ec83, + 0x241d03, + 0x2b6c03, + 0x20be03, + 0x237583, + 0x30e843, + 0x26ff84, + 0x20ec83, + 0x241d03, + 0x210143, + 0x28b304, + 0x20be03, + 0x23d744, + 0x237583, + 0x2d2484, + 0x30e843, + 0x38cb87, + 0x21f743, + 0x20ae43, + 0x310f08, + 0x241d03, + 0x2a47cb, + 0x2e8943, + 0x3a25c6, + 0x20e982, + 0x3987cb, + 0x237583, + 0x30e843, + 0x20ec83, + 0x241d03, + 0x20be03, + 0x237583, + 0x30e843, + 0x241d03, + 0x2098c3, + 0x204543, + 0x200742, + 0xcd588, + 0x3574c5, + 0x267e88, + 0x2e2e08, + 0x202c42, + 0x3325c5, + 0x331707, + 0x201b02, + 0x248887, + 0x202542, + 0x256807, + 0x3c0b89, + 0x292bc8, + 0x293ec9, + 0x247342, + 0x269ec7, + 0x329844, + 0x3317c7, + 0x375607, + 0x25fe82, + 0x21f743, + 0x20d682, + 0x2032c2, + 0x200342, + 0x20b182, 0x200382, - 0x200383, - 0x21aa03, - 0x241f46, - 0x217082, - 0x2016c2, - 0x201a82, - 0x436111c3, - 0x43a014c3, - 0x59a86, - 0x59a86, - 0x24ae04, - 0x143768a, - 0x2608c, - 0x21ecc, - 0x852cd, - 0x2ac47, - 0x1a608, - 0x218c8, - 0x19834a, - 0x446db445, - 0x12b089, - 0x103008, - 0x8ed4a, - 0x14a60e, - 0x144b24b, - 0x1681c4, - 0x1672c8, - 0x13edc7, - 0x16f07, - 0x11dd09, - 0x1b3c47, - 0x94b88, - 0x61f49, - 0x4bfc5, - 0x12494e, - 0xafbcd, - 0xfb48, - 0x44a37046, - 0x45437048, - 0x79c88, - 0x117050, - 0x69c87, - 0x6cf47, - 0x71187, - 0x75f87, - 0xa9c2, - 0x62507, - 0x10c74c, - 0x3b9c7, - 0xa9f46, - 0xaa689, - 0xad708, - 0x18d82, - 0x1d42, - 0x24a0b, - 0x2ccc9, - 0x4c809, - 0x17de88, - 0xb5e02, - 0x104389, - 0xd2fca, - 0xdb9c9, - 0xdd048, - 0xddfc7, - 0xe0389, - 0xe4685, - 0xe4a90, - 0x1a8e86, - 0x63c85, - 0x4a84d, - 0x1b3806, - 0xee547, - 0xf39d8, - 0x96b88, - 0xba9ca, - 0x53b4d, - 0x1702, - 0x177ac6, - 0x91788, - 0x1ae208, - 0x15ef09, - 0x56608, - 0x5dece, - 0xd68d, - 0xf8805, - 0x62288, - 0x59688, - 0x6902, - 0x125886, - 0x6c82, - 0x3c1, - 0x8b4c3, - 0x44ef4244, - 0x4529a283, - 0x141, - 0x15c06, - 0x141, - 0x1, - 0x15c06, - 0x8b4c3, - 0x14e4285, - 0x24fe44, - 0x2d0783, - 0x251304, - 0x2964c4, - 0x204ac3, - 0x222ac5, - 0x21bd03, - 0x2202c3, - 0x370145, - 0x24abc3, - 0x466d0783, - 0x231b83, - 0x332ec3, - 0x200041, - 0x20fbc3, - 0x222044, - 0x213184, - 0x204ac3, - 0x200383, - 0x213e83, - 0x15f048, - 0x204cc2, - 0x368883, - 0x20d1c2, - 0x2d0783, - 0x231b83, - 0x2135c3, - 0x201d42, - 0x2964c4, - 0x204303, - 0x20fbc3, - 0x204ac3, - 0x20abc3, - 0x200383, - 0x24abc3, - 0x15f048, - 0x371182, - 0xd1c2, - 0x1491b48, - 0x10598e, - 0x47608c42, - 0x32f9c8, - 0x233d86, - 0x210186, - 0x233707, - 0x47a00902, - 0x47f53508, - 0x20ebca, - 0x269708, - 0x201442, - 0x32f649, - 0x3a2487, - 0x218486, - 0x295ec9, - 0x247ec4, - 0x2e4186, - 0x2e1bc4, - 0x26bdc4, - 0x25bf49, - 0x326286, - 0x24df85, - 0x291285, - 0x390387, - 0x2c3747, - 0x2911c4, - 0x233946, - 0x2ffb45, - 0x367445, - 0x302505, - 0x392307, - 0x26ae05, - 0x315e49, - 0x32d305, - 0x307184, - 0x38d347, - 0x32ecce, - 0x330a09, - 0x358849, - 0x3ac9c6, - 0x2fe248, - 0x2b520b, - 0x2e3b0c, - 0x2898c6, - 0x2076c7, - 0x37b305, - 0x32d98a, - 0x237a09, - 0x3aa989, - 0x257646, - 0x2fb805, - 0x2aabc5, - 0x348f89, - 0x30268b, - 0x280f46, - 0x338346, - 0x20a904, - 0x2908c6, - 0x226a08, - 0x3abc06, - 0x20c5c6, - 0x206188, - 0x207f47, - 0x208649, - 0x209705, - 0x15f048, - 0x216e84, - 0x33d5c4, - 0x369f05, - 0x204f49, - 0x222347, - 0x22234b, - 0x223e4a, - 0x228485, - 0x4820a002, - 0x238987, - 0x48629248, - 0x27be07, - 0x2bf945, - 0x3aac0a, - 0xd1c2, - 0x38740b, - 0x25470a, - 0x222dc6, - 0x395e03, - 0x29538d, - 0x3582cc, - 0x37f24d, - 0x381085, - 0x227dc5, - 0x2601c7, - 0x209c09, - 0x20eac6, - 0x383405, - 0x2d8008, - 0x2907c3, - 0x2ec708, - 0x2907c8, - 0x2c6c47, - 0x3b2448, - 0x39b7c9, - 0x2c9747, - 0x238187, - 0x302b88, - 0x38ca44, - 0x38ca47, - 0x272648, - 0x2024c6, - 0x206fcf, - 0x2118c7, - 0x2e7a86, - 0x23e2c5, - 0x223783, - 0x365a47, - 0x36da03, - 0x250446, - 0x251c46, - 0x252a06, - 0x296e85, - 0x26ea03, - 0x388a48, - 0x370c89, - 0x37ffcb, - 0x252b88, - 0x254285, - 0x256405, - 0x48aabc02, - 0x359a49, - 0x296547, - 0x25f185, - 0x25be47, - 0x25dd86, - 0x363f05, - 0x36fe0b, - 0x2640c4, - 0x2692c5, - 0x269407, - 0x27b786, - 0x27bbc5, - 0x288487, - 0x288d47, - 0x2d1784, - 0x28e04a, - 0x28e508, - 0x2c2149, - 0x3648c5, - 0x2951c6, - 0x226bca, - 0x387646, + 0x207c02, + 0x2a9105, + 0x24d0c5, + 0x2c42, + 0x37583, + 0x20be03, + 0x237583, + 0x30e843, + 0x20ec83, + 0x241d03, + 0x20be03, + 0x237583, + 0x30e843, + 0x21f743, + 0x20ec83, + 0xaff03, + 0x241d03, + 0x10c43, + 0x781, + 0x20be03, + 0x237583, + 0x30e843, + 0x26ff84, + 0x214bc3, + 0x20ec83, + 0xaff03, + 0x241d03, + 0x21a003, + 0x3f0eca46, + 0x6f803, + 0x7f685, + 0x20be03, + 0x237583, + 0x30e843, + 0x20ec83, + 0x241d03, + 0x202c42, + 0x20be03, + 0x237583, + 0x30e843, + 0x20ec83, + 0x241d03, + 0x9482, + 0xcd588, + 0xae43, + 0xaff03, + 0x4cec4, + 0xd8d45, + 0x200742, + 0x3a4c04, + 0x20be03, + 0x237583, + 0x30e843, + 0x3a2f03, + 0x232585, + 0x214bc3, + 0x20f003, + 0x20ec83, + 0x228803, + 0x241d03, + 0x207c03, + 0x2605c3, + 0x203f83, + 0x20be03, + 0x237583, + 0x30e843, + 0x20ec83, + 0x241d03, + 0x202c42, + 0x241d03, + 0xcd588, + 0x30e843, + 0xaff03, + 0xcd588, + 0xaff03, + 0x2b8283, + 0x20be03, + 0x234784, + 0x237583, + 0x30e843, + 0x207d02, + 0x21f743, + 0x20ec83, + 0x241d03, + 0x20be03, + 0x237583, + 0x30e843, + 0x207d02, + 0x20be83, + 0x20ec83, + 0x241d03, + 0x2e2d83, + 0x207c03, + 0x200742, + 0x202c42, + 0x30e843, + 0x20ec83, + 0x241d03, + 0x3a25c5, + 0x9a2c6, + 0x28b304, + 0x20e982, + 0xcd588, + 0x200742, + 0x20288, + 0x132983, + 0x202c42, + 0x43490186, + 0x12b44, + 0x10bfcb, + 0x41546, + 0x1f847, + 0x237583, + 0x52748, + 0x30e843, + 0xef4c5, + 0xe84, + 0x222003, + 0x56c47, + 0xd4344, + 0x20ec83, + 0xafd44, + 0xaff03, + 0x241d03, + 0x2e9484, + 0xfdb48, + 0x157206, + 0x10d08, + 0x135fc5, + 0x126749, + 0x202c42, + 0x20be03, + 0x237583, + 0x30e843, + 0x21f743, + 0x20ae43, + 0x241d03, + 0x2e8943, + 0x20e982, + 0xcd588, + 0x20be03, + 0x237583, + 0x30e843, + 0x26ff83, + 0x226444, + 0x20ec83, + 0xae43, + 0x241d03, + 0x20be03, + 0x237583, + 0x2d2484, + 0x30e843, + 0x20ec83, + 0x241d03, + 0x3a25c6, + 0x237583, + 0x30e843, + 0x181c43, + 0x241d03, + 0x20be03, + 0x237583, + 0x30e843, + 0x20ec83, + 0x241d03, + 0x1f847, + 0xcd588, + 0x30e843, + 0x20be03, + 0x237583, + 0x30e843, + 0x20ec83, + 0x241d03, + 0x45e0be03, + 0x237583, + 0x20ec83, + 0x241d03, + 0xcd588, + 0x200742, + 0x202c42, + 0x20be03, + 0x30e843, + 0x20ec83, + 0x200342, + 0x241d03, + 0x32e147, + 0x23b00b, + 0x205d03, + 0x2409c8, + 0x38d847, + 0x224906, + 0x2c1605, + 0x38e5c9, + 0x21f4c8, + 0x36b4c9, + 0x39b210, + 0x36b4cb, + 0x2f6809, + 0x207503, + 0x22bcc9, + 0x235b46, + 0x235b4c, + 0x357588, + 0x3c02c8, + 0x200289, + 0x2e244e, + 0x3c094b, + 0x34754c, + 0x205583, + 0x27b80c, + 0x205589, + 0x2fbf47, + 0x2374cc, + 0x2ad14a, + 0x253404, + 0x32a08d, + 0x27b6c8, + 0x21014d, + 0x28a7c6, + 0x28b30b, + 0x31d689, + 0x27a747, + 0x3c2c46, + 0x341409, + 0x32538a, + 0x313048, + 0x2e8544, + 0x332e87, + 0x249d47, + 0x277984, + 0x2d9a44, + 0x386dc9, + 0x364209, + 0x215cc8, + 0x2108c5, + 0x2ea8c5, + 0x20d106, + 0x329f49, + 0x25720d, + 0x2f3308, + 0x20d007, + 0x2c1688, + 0x23ce86, + 0x37ce44, + 0x286c45, + 0x203846, + 0x2043c4, + 0x205487, + 0x2081ca, + 0x213904, + 0x2170c6, + 0x217d49, + 0x217d4f, + 0x21870d, + 0x218fc6, + 0x21fe90, + 0x220286, + 0x220807, + 0x221447, + 0x22144f, + 0x222149, + 0x228d46, + 0x22a1c7, + 0x22a1c8, + 0x22b089, + 0x395b88, + 0x2de4c7, + 0x22cf43, + 0x3bcfc6, + 0x3bbb08, + 0x2e270a, + 0x387809, + 0x212743, + 0x331606, + 0x39ccca, + 0x2e4b47, + 0x2fbd8a, + 0x209a8e, + 0x222286, 0x26f5c7, - 0x2c1e0d, - 0x2a1f09, - 0x3597c5, - 0x339dc7, - 0x368388, - 0x26a888, - 0x314d07, - 0x20b246, - 0x217807, - 0x221143, - 0x33c004, - 0x3607c5, - 0x38dcc7, - 0x391d09, - 0x22a8c8, - 0x33fac5, - 0x242844, - 0x2f5bc5, - 0x38174d, - 0x203742, - 0x386ac6, - 0x377a06, - 0x2c8bca, - 0x37e686, - 0x38b5c5, - 0x368fc5, - 0x368fc7, - 0x3a010c, - 0x279b0a, - 0x290586, - 0x225085, - 0x290706, - 0x290a47, - 0x292846, - 0x296d8c, - 0x296009, - 0x48e16087, - 0x299745, - 0x299746, - 0x299d08, - 0x236785, - 0x2a8b45, - 0x2a9548, - 0x2a974a, - 0x49258142, - 0x4960c2c2, - 0x2e8f85, - 0x28b9c3, - 0x22b108, - 0x241d03, - 0x2a99c4, - 0x2f350b, - 0x34ef48, - 0x305148, - 0x49b67ec9, - 0x2af389, - 0x2afac6, - 0x2b0a88, - 0x2b0c89, - 0x2b1786, - 0x2b1905, - 0x372a86, - 0x2b1e49, - 0x319d87, - 0x25c446, - 0x233147, - 0x20e947, - 0x362e04, - 0x49f453c9, - 0x2cd008, - 0x353408, - 0x383d07, - 0x2c8686, - 0x235389, - 0x210147, - 0x34970a, - 0x330d48, - 0x349407, - 0x3b1546, - 0x2e834a, - 0x2733c8, - 0x30de45, - 0x36dac5, - 0x2f9807, - 0x371d49, - 0x3097cb, - 0x31e0c8, - 0x32d389, - 0x253487, - 0x2bad4c, - 0x2bb74c, - 0x2bba4a, - 0x2bbccc, - 0x2c5c08, - 0x2c5e08, - 0x2c6004, - 0x2c63c9, - 0x2c6609, - 0x2c684a, - 0x2c6ac9, - 0x2c6e07, - 0x3a448c, - 0x24b946, - 0x35d588, - 0x387706, - 0x330c06, - 0x3596c7, - 0x238ec8, - 0x2618cb, - 0x303207, - 0x359c49, - 0x251489, - 0x25bbc7, - 0x2e1e04, - 0x3643c7, - 0x2e1246, - 0x214046, - 0x2eb045, - 0x2c7408, - 0x2976c4, - 0x2976c6, - 0x2799cb, - 0x212cc9, - 0x209e06, - 0x20c709, - 0x392486, - 0x3aae08, - 0x214183, - 0x2fb985, - 0x215a09, - 0x224085, - 0x2f9644, - 0x27acc6, - 0x2ed005, - 0x2f7346, - 0x309ec7, - 0x328dc6, - 0x3a174b, - 0x22c447, - 0x234886, - 0x3742c6, - 0x390446, - 0x291189, - 0x240aca, - 0x2b8ec5, - 0x21898d, - 0x2a9846, - 0x2babc6, - 0x2ded86, - 0x2f31c5, - 0x2e4d87, - 0x29fa87, - 0x22bd4e, - 0x20fbc3, - 0x2c8649, - 0x263709, - 0x32dd87, - 0x2804c7, - 0x2a2ec5, - 0x343f05, - 0x4a23734f, - 0x2d10c7, - 0x2d1288, - 0x2d25c4, - 0x2d2e86, - 0x4a64db02, - 0x2d7346, - 0x201686, - 0x2638ce, - 0x2ec54a, - 0x28b6c6, - 0x22d88a, - 0x209a09, - 0x323d05, - 0x393948, - 0x3aef46, - 0x359508, - 0x2392c8, - 0x34434b, - 0x233805, - 0x26ae88, - 0x2062cc, - 0x2bf807, - 0x252546, - 0x281fc8, - 0x2253c8, - 0x4aa09282, - 0x25604b, - 0x37b489, - 0x2cf2c9, - 0x2f02c7, - 0x3b3648, - 0x4ae289c8, - 0x20e64b, - 0x37dd09, - 0x33f58d, - 0x27d648, - 0x290188, - 0x4b201882, - 0x3b2f44, - 0x4b60dc42, - 0x2f9486, - 0x4ba038c2, - 0x2448ca, - 0x210546, - 0x22d208, - 0x289e88, - 0x2e4086, - 0x2eb5c6, - 0x2f7106, - 0x2f1b45, - 0x23c804, - 0x4be1de04, - 0x20ae86, - 0x29a787, - 0x4c2f7d07, - 0x2dc60b, - 0x32f089, - 0x227e0a, - 0x263144, - 0x369108, - 0x25c20d, - 0x2f1509, - 0x2f1748, - 0x2f2009, - 0x2f39c4, - 0x20ce44, - 0x283cc5, - 0x317b0b, - 0x34eec6, - 0x33c645, - 0x21fb89, - 0x233a08, - 0x263844, - 0x32db09, - 0x208f45, - 0x2c3788, - 0x238847, - 0x358c48, - 0x284e86, - 0x22b987, - 0x2984c9, - 0x311a89, - 0x372545, - 0x295645, - 0x4c626a82, - 0x306f44, - 0x30ce05, - 0x2c1846, - 0x327285, - 0x2b4707, - 0x20af85, - 0x27b7c4, - 0x3aca86, - 0x383487, - 0x232106, - 0x21e105, - 0x202608, - 0x233f85, - 0x205d07, - 0x20bc49, - 0x212e0a, - 0x2494c7, - 0x2494cc, - 0x24df46, - 0x2e9ac9, - 0x230505, - 0x2366c8, - 0x210c03, - 0x210c05, - 0x2f7b45, - 0x26e707, - 0x4ca27202, - 0x227a07, - 0x2e5206, - 0x345306, - 0x2e62c6, - 0x225306, - 0x2091c8, - 0x35b805, - 0x2e7b47, - 0x2e7b4d, - 0x21b083, - 0x21f305, - 0x21b087, - 0x26b308, - 0x21ac45, - 0x2281c8, - 0x2ab9c6, - 0x32b247, - 0x2c7bc5, - 0x233886, - 0x2cfac5, - 0x22dfca, - 0x2efec6, - 0x25dbc7, - 0x2bc605, - 0x2f44c7, - 0x2f8904, - 0x2f95c6, - 0x3624c5, - 0x32608b, - 0x2e10c9, - 0x23d74a, - 0x3725c8, - 0x3007c8, - 0x300f0c, - 0x306b47, - 0x308c48, - 0x30aa88, - 0x30dac5, - 0x338b4a, - 0x33aa09, - 0x4ce00202, - 0x200206, - 0x20d684, - 0x2ef889, - 0x275d49, - 0x27b1c7, - 0x2fa547, - 0x2b7c09, - 0x331308, - 0x33130f, - 0x2dfa86, - 0x2db10b, - 0x361545, - 0x361547, - 0x374c89, - 0x2171c6, - 0x32da87, - 0x2dde85, - 0x22f544, - 0x26e186, - 0x211984, - 0x2e6c47, - 0x34c5c8, - 0x4d2fb708, - 0x2fbe85, - 0x2fbfc7, - 0x245709, - 0x208444, - 0x208448, - 0x4d7190c8, - 0x23cdc4, - 0x230c88, - 0x3396c4, - 0x220389, - 0x333105, - 0x4da05bc2, - 0x2dfac5, - 0x2e6845, - 0x271b88, - 0x232847, - 0x4de03382, - 0x30cbc5, - 0x2d4e86, - 0x27a786, - 0x306f08, - 0x318308, - 0x327246, - 0x32e246, - 0x249009, - 0x345246, - 0x21708b, - 0x2a12c5, - 0x204686, - 0x382588, - 0x3152c6, - 0x298e46, - 0x21b94a, - 0x22f9ca, - 0x2e8245, - 0x35b8c7, - 0x2f0cc6, - 0x4e206602, - 0x21b1c7, - 0x2a9085, - 0x226b44, - 0x226b45, - 0x263046, - 0x27a447, - 0x20d405, - 0x22fb44, - 0x365008, - 0x298f05, - 0x33c8c7, - 0x39fa85, - 0x22df05, - 0x256b44, - 0x28fbc9, - 0x2ff988, - 0x2ecec6, - 0x2de9c6, - 0x2b9d46, - 0x4e700448, - 0x300647, - 0x3009cd, - 0x30120c, - 0x301809, - 0x301a49, - 0x4eb546c2, - 0x3a5503, - 0x20b303, - 0x2e1305, - 0x38ddca, - 0x327106, - 0x307905, - 0x30a084, - 0x30a08b, - 0x31bdcc, - 0x31c5cc, - 0x31c8d5, - 0x31d74d, - 0x31f44f, - 0x31f812, - 0x31fc8f, - 0x320052, - 0x3204d3, - 0x32098d, - 0x320f4d, - 0x3212ce, - 0x322a8e, - 0x3232cc, - 0x32368c, - 0x323acb, - 0x323e4e, - 0x324f92, - 0x326ecc, - 0x327610, - 0x3335d2, - 0x3347cc, - 0x334e8d, - 0x3351cc, - 0x337611, - 0x3384cd, - 0x33ac4d, - 0x33b24a, - 0x33b4cc, - 0x33bdcc, - 0x33c34c, - 0x33cbcc, - 0x33fc53, - 0x340450, - 0x340850, - 0x340e4d, - 0x34144c, - 0x342209, - 0x342f0d, - 0x343253, - 0x344911, - 0x344d53, - 0x34560f, - 0x3459cc, - 0x345ccf, - 0x34608d, - 0x34668f, - 0x346a50, - 0x3474ce, - 0x34ac8e, - 0x34b590, - 0x34ca8d, - 0x34d40e, - 0x34d78c, - 0x34e753, - 0x351e0e, - 0x352390, - 0x352791, - 0x352bcf, - 0x352f93, - 0x35424d, - 0x35458f, - 0x35494e, - 0x354fd0, - 0x3553c9, - 0x356390, - 0x356acf, - 0x35714f, - 0x357512, - 0x359e8e, - 0x35a74d, - 0x35cc4d, - 0x35cf8d, - 0x35f68d, - 0x35f9cd, - 0x35fd10, - 0x36010b, - 0x36058c, - 0x36090c, - 0x360c0c, - 0x360f0e, - 0x372c10, - 0x374452, - 0x3748cb, - 0x374ece, - 0x37524e, - 0x375ace, - 0x37604b, - 0x4ef76396, - 0x37724d, - 0x378354, - 0x378e0d, - 0x37ae55, - 0x37c04d, - 0x37c9cf, - 0x37d20f, - 0x38028f, - 0x38064e, - 0x380acd, - 0x382f11, - 0x385ecc, - 0x3861cc, - 0x3864cb, - 0x386c4c, - 0x38824f, - 0x388612, - 0x388fcd, - 0x389f8c, - 0x38a40c, - 0x38a70d, - 0x38aa4f, - 0x38ae0e, - 0x38da8c, - 0x38e04d, - 0x38e38b, - 0x38ee8c, - 0x38f40d, - 0x38f74e, - 0x38fac9, - 0x390c53, - 0x39118d, - 0x3914cd, - 0x391acc, - 0x391f4e, - 0x39290f, - 0x392ccc, - 0x392fcd, - 0x39330f, - 0x3936cc, - 0x3943cc, - 0x39484c, - 0x394b4c, - 0x39520d, - 0x395552, - 0x396c0c, - 0x396f0c, - 0x397211, - 0x39764f, - 0x397a0f, - 0x397dd3, - 0x398a8e, - 0x398e0f, - 0x3991cc, - 0x4f39950e, - 0x39988f, - 0x399c56, - 0x39b312, - 0x39d64c, - 0x39e14f, - 0x39e7cd, - 0x39eb0f, - 0x39eecc, - 0x39f1cd, - 0x39f50d, - 0x3a0c4e, - 0x3a2b8c, - 0x3a2e8c, - 0x3a3190, - 0x3a4991, - 0x3a4dcb, - 0x3a510c, - 0x3a540e, - 0x3a7051, - 0x3a748e, - 0x3a780d, - 0x3aed0b, - 0x3afdcf, - 0x3b09d4, - 0x2630c2, - 0x2630c2, - 0x202583, - 0x2630c2, - 0x202583, - 0x2630c2, - 0x20ae82, - 0x372ac5, - 0x3a6d4c, - 0x2630c2, - 0x2630c2, - 0x20ae82, - 0x2630c2, - 0x29a385, - 0x212e05, - 0x2630c2, - 0x2630c2, - 0x211cc2, - 0x29a385, - 0x31e789, - 0x34460c, - 0x2630c2, - 0x2630c2, - 0x2630c2, - 0x2630c2, - 0x372ac5, - 0x2630c2, - 0x2630c2, - 0x2630c2, - 0x2630c2, - 0x211cc2, - 0x31e789, - 0x2630c2, - 0x2630c2, - 0x2630c2, - 0x212e05, - 0x2630c2, - 0x212e05, - 0x34460c, - 0x3a6d4c, - 0x368883, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x2964c4, - 0x204ac3, - 0x200383, - 0x1f08, - 0x15444, - 0xc1348, - 0x204cc2, - 0x5020d1c2, - 0x243403, - 0x24c944, - 0x202743, - 0x38e8c4, - 0x22e886, - 0x213843, - 0x31aa84, - 0x288845, - 0x20fbc3, - 0x204ac3, - 0x200383, - 0x25084a, - 0x241f46, - 0x3755cc, - 0x15f048, - 0x20d1c2, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x22d603, - 0x201686, - 0x204ac3, - 0x200383, - 0x21aa03, - 0xaa288, - 0x3942, - 0x513856c5, - 0x2ac47, - 0xd7a88, - 0xc0ce, - 0x8c792, - 0x16780b, - 0x516db445, - 0x51adb44c, - 0xf207, - 0x13ecc7, - 0x1698ca, - 0x3efd0, - 0x1acd05, - 0x16e1cb, - 0x1672c8, - 0x13edc7, - 0x2f64b, - 0x11dd09, - 0x150f47, - 0x1b3c47, - 0x81187, - 0x20586, - 0x94b88, - 0x52028b86, - 0xafbcd, - 0x169290, - 0x52401742, - 0xfb48, - 0x71f47, - 0x7f149, - 0x59b46, - 0x99f08, - 0x74842, - 0xa4f4a, - 0x2d587, - 0x3b9c7, - 0xaa689, - 0xad708, - 0x15ae05, - 0x194e8e, - 0x14d4e, - 0x26f4f, - 0x2ccc9, - 0x4c809, - 0x77e8b, - 0x878cf, - 0x8fdcc, - 0xadd8b, - 0xc4d08, - 0xdc507, - 0x162908, - 0xfe04b, - 0x12a54c, - 0x141acc, - 0x147f4c, - 0x14b0cd, - 0x17de88, - 0x42602, - 0x104389, - 0x18528b, - 0xc8886, - 0x116f8b, - 0xdd5ca, - 0xde185, - 0xe4a90, - 0x1294c6, - 0x63c85, - 0xe6448, - 0xee547, - 0xee807, - 0x5e987, - 0xf92ca, - 0xd790a, - 0x177ac6, - 0x97ccd, - 0x1ae208, - 0x56608, - 0x56a89, - 0xb9905, - 0x19de4c, - 0x14b2cb, - 0x171c84, - 0xff749, - 0x8146, - 0x16c2, - 0x125886, - 0x10d947, - 0x6c82, - 0xcb605, - 0x29b04, - 0x701, - 0x2bc43, - 0x51fadbc6, - 0x9a283, - 0x8a42, - 0x2d584, - 0x1442, - 0x4ae04, + 0x21bac6, + 0x205646, + 0x38a50b, + 0x34edca, + 0x309b0d, + 0x203c07, + 0x260648, + 0x260649, + 0x26064f, + 0x34eb0c, + 0x27c0c9, + 0x2d778e, + 0x38cc8a, + 0x293886, + 0x2f9f06, + 0x313ccc, + 0x315a8c, + 0x328308, + 0x353d07, + 0x26d545, + 0x290504, + 0x202c4e, + 0x266f84, + 0x3188c7, + 0x39270a, + 0x3a2a54, + 0x3b92cf, + 0x221608, + 0x3bce88, + 0x33984d, + 0x33984e, + 0x231a09, + 0x232b08, + 0x232b0f, + 0x2371cc, + 0x2371cf, + 0x2386c7, + 0x23dfca, + 0x22c54b, + 0x23f5c8, + 0x242707, + 0x2616cd, + 0x20a286, + 0x32a246, + 0x2443c9, + 0x2a6f88, + 0x249208, + 0x24920e, + 0x23b107, + 0x24b505, + 0x24cc85, + 0x204c44, + 0x224bc6, + 0x215bc8, + 0x322ec3, + 0x397e4e, + 0x261a88, + 0x2ae14b, + 0x301c07, + 0x2f7305, + 0x27b986, + 0x2aab07, + 0x2f4848, + 0x317909, + 0x20a505, + 0x284bc8, + 0x226e06, + 0x39caca, + 0x202b49, + 0x237589, + 0x23758b, + 0x3211c8, + 0x277849, + 0x210986, + 0x36db0a, + 0x2bf50a, + 0x23e1cc, + 0x21e907, + 0x2929ca, + 0x211d0b, + 0x211d19, + 0x30a988, + 0x3a2645, + 0x261886, + 0x26ba89, + 0x358706, + 0x2d340a, + 0x21f6c6, + 0x225784, + 0x2c380d, + 0x323307, + 0x225789, + 0x24e685, + 0x251548, + 0x252509, + 0x252944, + 0x253307, + 0x253308, + 0x253907, + 0x268688, + 0x257887, + 0x205dc5, + 0x25d60c, + 0x25de49, + 0x30590a, + 0x3a0e09, + 0x22bdc9, + 0x37924c, + 0x26004b, + 0x260dc8, + 0x261e88, + 0x265244, + 0x281b08, + 0x283c89, + 0x2ad207, + 0x217f86, + 0x31d907, + 0x3843c9, + 0x335c0b, + 0x2b6107, + 0x3c6847, + 0x216407, + 0x2100c4, + 0x2100c5, + 0x278845, + 0x34c04b, + 0x3ad084, + 0x320d08, + 0x28550a, + 0x226ec7, + 0x35b207, + 0x28c112, + 0x2a10c6, + 0x234106, + 0x2b658e, + 0x2a4a86, + 0x291508, + 0x291a8f, + 0x210508, + 0x38b748, + 0x2bb78a, + 0x2bb791, + 0x2a0d4e, + 0x242a0a, + 0x242a0c, + 0x232d07, + 0x232d10, + 0x3c4cc8, + 0x2a0f45, + 0x2aae0a, + 0x20440c, + 0x29580d, + 0x2fc446, + 0x2fc447, + 0x2fc44c, + 0x30460c, + 0x214bcc, + 0x2ab88b, + 0x3706c4, + 0x211dc4, + 0x388489, + 0x30a2c7, + 0x23dd89, + 0x2bf349, + 0x2ace07, + 0x2acfc6, + 0x2acfc9, + 0x2ad3c3, + 0x2b058a, + 0x31b487, + 0x3491cb, + 0x30998a, + 0x3298c4, + 0x316946, + 0x27ee49, + 0x23a2c4, + 0x39eeca, + 0x2425c5, + 0x2bcbc5, + 0x2bcbcd, + 0x2bcf0e, + 0x2d9685, + 0x32d506, + 0x3a21c7, + 0x25d88a, + 0x37a506, + 0x2e1304, + 0x303707, + 0x246a4b, + 0x23cf47, + 0x3c1a04, + 0x390706, + 0x39070d, + 0x38408c, + 0x20eb46, + 0x2f350a, + 0x27c686, + 0x285788, + 0x354b47, + 0x23618a, + 0x24b386, + 0x203b03, + 0x294346, + 0x3bb988, + 0x38860a, + 0x2cb107, + 0x2cb108, + 0x30df84, + 0x28c687, + 0x201cc8, + 0x2a12c8, + 0x2827c8, + 0x2b130a, + 0x2d8345, + 0x20be87, + 0x242853, + 0x25a706, + 0x21b388, + 0x227609, + 0x248748, + 0x32808b, + 0x318488, + 0x246b84, + 0x365386, + 0x311e06, + 0x2dfa89, + 0x382807, + 0x25d708, + 0x29c806, + 0x31f644, + 0x341d05, + 0x2c7e48, + 0x34398a, + 0x2c3488, + 0x2c8906, + 0x29960a, + 0x3b8e48, + 0x2cc708, + 0x2cd2c8, + 0x2cdd46, + 0x2d0886, + 0x3a08cc, + 0x2d0e10, + 0x29ea45, + 0x210308, + 0x394490, + 0x210310, + 0x39b08e, + 0x3a054e, + 0x3a0554, + 0x3a624f, + 0x3a6606, + 0x321391, + 0x31eb13, + 0x31ef88, + 0x3ab285, + 0x240f08, + 0x387b05, + 0x2da18c, + 0x22cd09, + 0x290349, + 0x22d187, + 0x251309, + 0x24f147, + 0x2f8cc6, + 0x286a47, + 0x2034c5, + 0x210c83, + 0x323089, + 0x2278c9, + 0x381c43, + 0x38c7c4, + 0x326f0d, + 0x347c8f, + 0x31f685, + 0x3175c6, + 0x225a47, + 0x357307, + 0x2f5886, + 0x2f588b, + 0x2a2bc5, + 0x25f106, + 0x2f9d87, + 0x258249, + 0x375d06, + 0x322285, + 0x374e4b, + 0x3be7c6, + 0x229a85, + 0x27dc08, + 0x2b2bc8, + 0x2aec8c, + 0x2aec90, + 0x2ae949, + 0x2bd487, + 0x2d8e4b, + 0x306746, + 0x2de38a, + 0x2df80b, + 0x2e094a, + 0x2e0bc6, + 0x2e2c45, + 0x31b1c6, + 0x2b7048, + 0x22d24a, + 0x3394dc, + 0x2e8a0c, + 0x2e8d08, + 0x3a25c5, + 0x361f87, + 0x209946, + 0x270bc5, + 0x21a846, + 0x2f5a48, + 0x2bbe47, + 0x2e2348, + 0x25a7ca, + 0x225b4c, + 0x20d309, + 0x345787, + 0x222a04, + 0x24cd46, + 0x38b2ca, + 0x2bf445, + 0x2110cc, + 0x213588, + 0x373608, + 0x2238cc, + 0x2dd30c, + 0x329409, + 0x329647, + 0x24398c, + 0x22c044, + 0x2482ca, + 0x3033cc, + 0x27280b, + 0x372f0b, + 0x253786, + 0x258d87, + 0x232f47, + 0x232f4f, + 0x2fce11, + 0x2d5b52, + 0x2590cd, + 0x2590ce, + 0x25940e, + 0x3a6408, + 0x3a6412, + 0x25eb08, + 0x38d487, + 0x2556ca, + 0x355cc8, + 0x2a4a45, + 0x37fe0a, + 0x220607, + 0x316244, + 0x221b83, + 0x378205, + 0x2bba07, + 0x307c47, + 0x295a0e, + 0x399e8d, + 0x39b5c9, + 0x20fd85, + 0x3b00c3, + 0x20ab06, + 0x25f705, + 0x2ae388, + 0x2b9609, + 0x2618c5, + 0x2618cf, + 0x2e2a87, + 0x38e505, + 0x3025ca, + 0x2b1506, + 0x25b949, + 0x2f640c, + 0x2f80c9, + 0x3be506, + 0x28530c, + 0x32c906, + 0x2fb508, + 0x2fba86, + 0x30ab06, + 0x2b0f04, + 0x30d603, + 0x38668a, + 0x216711, + 0x27c28a, + 0x272085, + 0x282347, + 0x25ab47, + 0x201dc4, + 0x201dcb, + 0x293d48, + 0x2ba046, + 0x36e145, + 0x33d8c4, + 0x362109, + 0x202a84, + 0x249047, + 0x300585, + 0x300587, + 0x2b67c5, + 0x3482c3, + 0x38d348, + 0x317c4a, + 0x27f283, + 0x35750a, + 0x3b3486, + 0x26164f, + 0x3b8349, + 0x397dd0, + 0x2effc8, + 0x2c8d49, + 0x296707, + 0x39068f, + 0x319c04, + 0x2d2504, + 0x220106, + 0x34f846, + 0x2d6e8a, + 0x253c06, + 0x352987, + 0x303f48, + 0x304147, + 0x3049c7, + 0x305b8a, + 0x3083cb, + 0x341ac5, + 0x2d5788, + 0x256703, + 0x3b6b0c, + 0x35d60f, + 0x26d34d, + 0x25e287, + 0x39b709, + 0x36de47, + 0x282c48, + 0x3a2c4c, + 0x2c8a48, + 0x2701c8, + 0x31c38e, + 0x333d94, + 0x3342a4, + 0x35308a, + 0x36becb, + 0x24f204, + 0x24f209, + 0x233bc8, + 0x24d305, + 0x3229ca, + 0x261cc7, + 0x31b0c4, + 0x2b6c03, + 0x20be03, + 0x23d744, + 0x237583, + 0x30e843, + 0x26ff84, + 0x214bc3, + 0x21f743, + 0x2d0e06, + 0x226444, + 0x20ec83, + 0x241d03, + 0x219543, + 0x200742, + 0x2b6c03, + 0x202c42, + 0x20be03, + 0x23d744, + 0x237583, + 0x30e843, + 0x214bc3, + 0x2d0e06, + 0x20ec83, + 0x241d03, + 0xcd588, + 0x20be03, + 0x237583, + 0x203d43, + 0x20ec83, + 0xaff03, + 0x241d03, + 0xcd588, + 0x20be03, + 0x237583, + 0x30e843, + 0x21f743, + 0x226444, + 0x20ec83, + 0x241d03, + 0x200742, + 0x24be43, + 0x202c42, + 0x237583, + 0x30e843, + 0x21f743, + 0x20ec83, + 0x241d03, + 0x203cc2, + 0x24d5c2, + 0x202c42, + 0x20be03, + 0x20b2c2, + 0x201342, + 0x26ff84, + 0x21a484, + 0x227d42, + 0x226444, + 0x200342, + 0x241d03, + 0x219543, + 0x253786, + 0x230882, + 0x204182, + 0x228382, + 0x48610503, + 0x48a32d03, + 0x5b586, + 0x5b586, + 0x28b304, + 0x20ae43, + 0x15a4a, + 0x3ba4c, + 0x121ecc, + 0x7f48d, + 0x117485, + 0x2aa47, + 0x14ec6, + 0x19148, + 0x1c787, + 0x23288, + 0x1807ca, + 0x102c07, + 0x496d2fc5, + 0x133789, + 0x3c00b, + 0x18754b, + 0x1bdd08, + 0xf608a, + 0x8a34e, + 0x144854b, + 0x12b44, + 0x5f246, + 0x8808, + 0x7e948, + 0x3c2c7, + 0x910c7, + 0x78449, + 0x3a347, + 0x67008, + 0x100249, + 0x170bc4, + 0x191e05, + 0x12f34e, + 0xa964d, + 0x1f6c8, + 0x49b64046, + 0x4a564048, + 0x739c8, + 0x12e350, + 0x5978c, + 0x666c7, + 0x66e47, + 0x6abc7, + 0x704c7, + 0xd0c2, + 0x1807, + 0x14ef8c, + 0x11d107, + 0xa4686, + 0xa5a89, + 0xa7708, + 0x552c2, 0x1342, - 0x2f82, - 0x3682, - 0x1124c2, - 0xe542, - 0xdb442, - 0x2ac2, - 0x1c402, - 0x26982, - 0x4d02, - 0x3b02, - 0x34682, - 0x31b83, - 0x7d02, - 0x1c2, - 0x41c2, - 0xda42, - 0x642, + 0x3900b, + 0xafdc7, + 0x25589, + 0x52c49, + 0x142188, + 0xb0102, + 0x1970c9, + 0xc9f8a, + 0xc6209, + 0xd3909, + 0xd50c8, + 0xd6007, + 0xd82c9, + 0xda885, + 0xdae90, + 0x138ac6, + 0x14a345, + 0xeb78d, + 0x2bac6, + 0xe3d47, + 0xe9498, + 0x3a6c8, + 0x14640a, + 0x16f02, + 0x5f88d, + 0x1282, + 0x7dac6, + 0x8cc08, + 0x6e308, + 0xcd449, + 0x1be608, + 0x6f98e, + 0xab07, + 0xfe68d, + 0xf26c5, + 0x1588, + 0x1a1e08, + 0xfeec6, + 0xc842, + 0x157206, 0xdc2, - 0x18d82, - 0x1a02, - 0x2282, - 0x1d42, - 0x4303, - 0xb02, - 0x2f02, - 0xb5e02, - 0x1b02, - 0x5d82, - 0x32c2, - 0x73c2, - 0x17c2, + 0x2c1, + 0x60a07, + 0x8b003, + 0x49ee9d04, + 0x4a294a43, + 0x101, + 0x13d06, + 0x101, + 0x301, + 0x13d06, + 0x8b003, + 0x140e3c5, + 0x253404, + 0x20be03, + 0x254a04, + 0x26ff84, + 0x20ec83, + 0x2274c5, + 0x21a003, + 0x24f3c3, + 0x2f5805, + 0x203f83, + 0x4b60be03, + 0x237583, + 0x30e843, + 0x200541, + 0x21f743, + 0x21a484, + 0x226444, + 0x20ec83, + 0x241d03, + 0x207c03, + 0xcd588, + 0x200742, + 0x2b6c03, + 0x202c42, + 0x20be03, + 0x237583, + 0x203d43, + 0x201342, + 0x26ff84, + 0x214bc3, + 0x21f743, + 0x20ec83, + 0x20ae43, + 0x241d03, + 0x203f83, + 0xcd588, + 0x35d382, + 0x1851c7, + 0x2c42, + 0x141c85, + 0x598cf, + 0x1455908, + 0x10430e, + 0x4c607402, + 0x31a848, + 0x307206, + 0x2c1146, + 0x306b87, + 0x4ca11a42, + 0x4cfb81c8, + 0x21ed8a, + 0x266148, + 0x200602, + 0x31b2c9, + 0x341b07, + 0x217f06, + 0x38d089, + 0x20bfc4, + 0x20e2c6, + 0x2f2904, + 0x270984, + 0x25cf89, + 0x3030c6, + 0x24d185, + 0x2faf45, + 0x2322c7, + 0x2be9c7, + 0x354984, + 0x306dc6, + 0x2ff205, + 0x309485, + 0x39dec5, + 0x2ea687, + 0x301a45, + 0x319149, + 0x336f85, + 0x2f4984, + 0x37a447, + 0x348a0e, + 0x3aaec9, + 0x2b6449, + 0x335246, + 0x2454c8, + 0x2ee34b, + 0x35bd8c, + 0x33b746, + 0x347407, + 0x2afbc5, + 0x2d9a4a, + 0x215dc9, + 0x366f09, + 0x332706, + 0x2f9b45, + 0x383105, + 0x338689, + 0x39e04b, + 0x275e86, + 0x343ec6, + 0x203104, + 0x28bdc6, + 0x24b588, + 0x3bb806, + 0x21d186, + 0x206888, + 0x209347, + 0x209509, + 0x20acc5, + 0xcd588, + 0x291044, + 0x304f44, + 0x210f05, + 0x3a8c49, + 0x226087, + 0x22608b, + 0x2288ca, + 0x22cc45, + 0x4d207a42, + 0x309847, + 0x4d62cf48, + 0x370a47, + 0x383e85, + 0x32654a, + 0x2c42, + 0x2fac0b, + 0x2579ca, + 0x2277c6, + 0x210d83, + 0x2a4f8d, + 0x3aa74c, + 0x3bedcd, + 0x24e2c5, + 0x37dd45, + 0x322f07, + 0x20b2c9, + 0x21ec86, + 0x253a85, + 0x2ced88, + 0x28bcc3, + 0x2e3108, + 0x28bcc8, + 0x2c2107, + 0x30f108, + 0x3aa549, + 0x286d47, + 0x23ab87, + 0x224788, + 0x38ae04, + 0x38ae07, + 0x28a6c8, + 0x353706, + 0x3b544f, + 0x2293c7, + 0x2de646, + 0x329785, + 0x228503, + 0x391c87, + 0x378183, + 0x253e86, + 0x2553c6, + 0x255b06, + 0x28fa05, + 0x268683, + 0x396d48, + 0x379c89, + 0x38eb4b, + 0x255c88, + 0x257545, + 0x258b85, + 0x4db29982, + 0x286b09, + 0x38d707, + 0x25f185, + 0x25ce87, + 0x25e9c6, + 0x371c05, + 0x25f54b, + 0x260dc4, + 0x265d05, + 0x265e47, + 0x275806, + 0x275c45, + 0x281d07, + 0x2829c7, + 0x2e1704, + 0x28990a, + 0x289dc8, + 0x293089, + 0x241245, + 0x364946, + 0x24b74a, + 0x2fae46, + 0x268fc7, + 0x292d4d, + 0x2a2709, + 0x3954c5, + 0x2031c7, + 0x31f148, + 0x336a08, + 0x209ec7, + 0x3be1c6, + 0x21d4c7, + 0x255083, + 0x303044, + 0x36e785, + 0x39fc47, + 0x3a4609, + 0x230cc8, + 0x33dc85, + 0x2363c4, + 0x253d45, + 0x39038d, + 0x211742, + 0x2bd986, + 0x27da06, + 0x2dac0a, + 0x381346, + 0x38b205, + 0x31ffc5, + 0x31ffc7, + 0x39c90c, + 0x27384a, + 0x28ba86, + 0x2c4d85, + 0x28bc06, + 0x28bf47, + 0x28d986, + 0x28f90c, + 0x38d1c9, + 0x4de14187, + 0x291e45, + 0x291e46, + 0x2944c8, + 0x247e85, + 0x2a3505, + 0x2a3c88, + 0x2a3e8a, + 0x4e278142, + 0x4e607c82, + 0x2d7485, + 0x2a6b43, + 0x2461c8, + 0x211b83, + 0x2a4104, + 0x25ba8b, + 0x211b88, + 0x2ce288, + 0x4eb1cb49, + 0x2a8e09, + 0x2a9546, + 0x2aa788, + 0x2aa989, + 0x2ab386, + 0x2ab505, + 0x24e0c6, + 0x2abfc9, + 0x3ac147, + 0x381fc6, + 0x2d8787, + 0x21eb07, + 0x34e204, + 0x4ee3a9c9, + 0x270e08, + 0x3b80c8, + 0x31f887, + 0x2c2f46, + 0x20b0c9, + 0x2f2bc7, + 0x33194a, + 0x364a88, + 0x3be307, + 0x20ed86, + 0x39d28a, + 0x372cc8, + 0x382ac5, + 0x22b9c5, + 0x30b047, + 0x36ac49, + 0x30280b, + 0x314248, + 0x337009, + 0x255f87, + 0x2b868c, + 0x2b8c8c, + 0x2b8f8a, + 0x2b920c, + 0x2c10c8, + 0x2c12c8, + 0x2c14c4, + 0x2c1889, + 0x2c1ac9, + 0x2c1d0a, + 0x2c1f89, + 0x2c22c7, + 0x3b4c4c, + 0x23d386, + 0x3c0708, + 0x2faf06, + 0x37fc46, + 0x3953c7, + 0x3ab0c8, + 0x349c4b, + 0x370907, + 0x35b849, + 0x3782c9, + 0x254b87, + 0x2f2b44, + 0x282487, + 0x2eaf46, + 0x215946, + 0x2f36c5, + 0x3720c8, + 0x290244, + 0x290246, + 0x27370b, + 0x2b0889, + 0x39ddc6, + 0x204cc9, + 0x2ea806, + 0x22e688, + 0x20b4c3, + 0x2f9cc5, + 0x21d2c9, + 0x228b05, + 0x30ae84, + 0x274d06, + 0x3993c5, + 0x259b06, + 0x308747, + 0x331086, + 0x23078b, + 0x36da07, + 0x256e46, + 0x348606, + 0x232386, + 0x354949, + 0x2e474a, + 0x2ba345, + 0x3be8cd, + 0x2a3f86, + 0x2e9106, + 0x397cc6, + 0x285705, + 0x2db187, + 0x2f75c7, + 0x207cce, + 0x21f743, + 0x2c2f09, + 0x358489, + 0x2d9e47, + 0x26c287, + 0x2a1445, + 0x2ae085, + 0x4f386f0f, + 0x2c8f87, + 0x2c9148, + 0x2c9884, + 0x2c9e46, + 0x4f64cd02, + 0x2cdfc6, + 0x2d0e06, + 0x349f8e, + 0x2e2f4a, + 0x3b8946, + 0x2ca24a, + 0x2065c9, + 0x231e85, + 0x344788, + 0x39a146, + 0x29aac8, + 0x3c2dc8, + 0x2a57cb, + 0x306c85, + 0x301ac8, + 0x2069cc, + 0x383d47, + 0x255606, + 0x27c4c8, + 0x224a88, + 0x4fa53982, + 0x20e08b, + 0x3361c9, + 0x21cb09, + 0x39dc47, + 0x38a7c8, + 0x4fe3ca88, + 0x21318b, + 0x342009, + 0x28394d, + 0x24e488, + 0x3518c8, + 0x502056c2, + 0x331404, + 0x50623b82, + 0x2f7e06, + 0x50a0a542, + 0x24fc8a, + 0x204b86, + 0x22e0c8, + 0x2be048, + 0x326cc6, + 0x398b46, + 0x2efd46, + 0x2ae305, + 0x240684, + 0x50e2e604, + 0x34c986, + 0x2a2247, + 0x5121c1c7, + 0x2e1bcb, + 0x348dc9, + 0x37dd8a, + 0x357ec4, + 0x320108, + 0x381d8d, + 0x2e6e49, + 0x2e7088, + 0x2e7709, + 0x2e9484, + 0x22c404, + 0x27d505, + 0x2ee68b, + 0x211b06, + 0x34c7c5, + 0x222449, + 0x306e88, + 0x29fb44, + 0x2d9bc9, + 0x326b05, + 0x2bea08, + 0x23b247, + 0x2b6848, + 0x27f046, + 0x207907, + 0x2d4109, + 0x374fc9, + 0x229b05, + 0x240305, + 0x51607482, + 0x2f4744, + 0x225dc5, + 0x292786, + 0x2f8305, + 0x297b87, + 0x34ca85, + 0x275844, + 0x335306, + 0x253b07, + 0x234fc6, + 0x384305, + 0x20e4c8, + 0x307405, + 0x20ef87, + 0x2154c9, + 0x2b09ca, + 0x34e587, + 0x34e58c, + 0x24d146, + 0x241b89, + 0x244885, + 0x247dc8, + 0x201283, + 0x210945, + 0x2eac05, + 0x257f47, + 0x51a12c02, + 0x398347, + 0x2f3c06, + 0x32fdc6, + 0x2f7f46, + 0x2249c6, + 0x2eb408, + 0x241045, + 0x2de707, + 0x2de70d, + 0x221b83, + 0x221b85, + 0x302387, + 0x398688, + 0x301f45, + 0x219788, + 0x23dc86, + 0x333947, + 0x3c0645, + 0x306d06, + 0x3a4c85, + 0x226bca, + 0x2fe986, + 0x22eec7, + 0x2f04c5, + 0x2ffc87, + 0x303684, + 0x30ae06, + 0x3446c5, + 0x357a0b, + 0x2eadc9, + 0x24bf4a, + 0x229b88, + 0x34c2c8, + 0x34cb8c, + 0x353847, + 0x36f808, + 0x387c08, + 0x394205, + 0x3a684a, + 0x3b00c9, + 0x51e01b42, + 0x3c6646, + 0x222e44, + 0x222e49, + 0x294f49, + 0x276587, + 0x2f9887, + 0x2bf1c9, + 0x285908, + 0x28590f, + 0x21dec6, + 0x2d2c8b, + 0x2f5645, + 0x2f5647, + 0x2f5c49, + 0x25bbc6, + 0x2d9b47, + 0x2d5ec5, + 0x234dc4, + 0x341006, + 0x226244, + 0x2df647, + 0x2ce808, + 0x522f9a48, + 0x2fa1c5, + 0x2fa307, + 0x24eb09, + 0x20de44, + 0x2473c8, + 0x52716788, + 0x201dc4, + 0x235fc8, + 0x3c2d04, + 0x3bebc9, + 0x21b2c5, + 0x52a0e982, + 0x21df05, + 0x2cb8c5, + 0x203008, + 0x238507, + 0x52e02a82, + 0x339e45, + 0x2cc586, + 0x249746, + 0x2f4708, + 0x2f4c88, + 0x2f82c6, + 0x30a146, + 0x385289, + 0x32fd06, + 0x29124b, + 0x3478c5, + 0x355c06, + 0x28e088, + 0x231bc6, + 0x20a386, + 0x219c4a, + 0x2a91ca, + 0x370c85, + 0x241107, + 0x30d0c6, + 0x53206d02, + 0x3024c7, + 0x260505, + 0x24b6c4, + 0x24b6c5, + 0x357dc6, + 0x271a47, + 0x220105, + 0x295004, + 0x2ad5c8, + 0x20a445, + 0x309fc7, + 0x3b1c45, + 0x226b05, + 0x268904, + 0x2abac9, + 0x2ff048, + 0x399286, + 0x2adc46, + 0x201ac6, + 0x536ff908, + 0x2ffb07, + 0x2ffe4d, + 0x30074c, + 0x300d49, + 0x300f89, + 0x53b65c82, + 0x3b7e83, + 0x2228c3, + 0x2eb005, + 0x39fd4a, + 0x32fbc6, + 0x3052c5, + 0x308904, + 0x30890b, + 0x323e4c, + 0x32488c, + 0x324b95, + 0x32754d, + 0x32a68f, + 0x32aa52, + 0x32aecf, + 0x32b292, + 0x32b713, + 0x32bbcd, + 0x32c18d, + 0x32c50e, + 0x32ca8e, + 0x32d2cc, + 0x32d68c, + 0x32dacb, + 0x32de4e, + 0x32e752, + 0x32f98c, + 0x32ff50, + 0x33ba12, + 0x33c68c, + 0x33cd4d, + 0x33d08c, + 0x33f651, + 0x34404d, + 0x34ac8d, + 0x34b28a, + 0x34b50c, + 0x34be0c, + 0x34c4cc, + 0x34ce8c, + 0x350493, + 0x350b10, + 0x350f10, + 0x351acd, + 0x3520cc, + 0x352dc9, + 0x35518d, + 0x3554d3, + 0x356491, + 0x3568d3, + 0x35888f, + 0x358c4c, + 0x358f4f, + 0x35930d, + 0x35990f, + 0x359cd0, + 0x35a74e, + 0x35df0e, + 0x35e490, + 0x35f08d, + 0x35fa0e, + 0x35fd8c, + 0x360d93, + 0x3628ce, + 0x362f50, + 0x363351, + 0x36378f, + 0x363b53, + 0x36580d, + 0x365b4f, + 0x365f0e, + 0x3665d0, + 0x3669c9, + 0x367d10, + 0x36830f, + 0x36898f, + 0x368d52, + 0x369e0e, + 0x36a80d, + 0x36ae8d, + 0x36b1cd, + 0x36c84d, + 0x36cb8d, + 0x36ced0, + 0x36d2cb, + 0x36e54c, + 0x36e8cc, + 0x36eecc, + 0x36f1ce, + 0x37bbd0, + 0x37e012, + 0x37e48b, + 0x37e98e, + 0x37ed0e, + 0x37f58e, + 0x37fa0b, + 0x53f80196, + 0x38104d, + 0x3814d4, + 0x38228d, + 0x386915, + 0x388c4d, + 0x3895cf, + 0x389ccf, + 0x38ee0f, + 0x38f1ce, + 0x38f74d, + 0x391891, + 0x394b8c, + 0x394e8c, + 0x39518b, + 0x39560c, + 0x39654f, + 0x396912, + 0x39950d, + 0x39ae0c, + 0x39b94c, + 0x39bc4d, + 0x39bf8f, + 0x39c34e, + 0x39fa0c, + 0x39ffcd, + 0x3a030b, + 0x3a0bcc, + 0x3a14cd, + 0x3a180e, + 0x3a1b89, + 0x3a3553, + 0x3a3a8d, + 0x3a3dcd, + 0x3a43cc, + 0x3a484e, + 0x3a520f, + 0x3a55cc, + 0x3a58cd, + 0x3a5c0f, + 0x3a5fcc, + 0x3a778c, + 0x3a7b0c, + 0x3a7e0c, + 0x3a84cd, + 0x3a8812, + 0x3a8e8c, + 0x3a918c, + 0x3a9491, + 0x3a98cf, + 0x3a9c8f, + 0x3aa053, + 0x3ac70e, + 0x3aca8f, + 0x3ace4c, + 0x543ad18e, + 0x3ad50f, + 0x3ad8d6, + 0x3ae0d2, + 0x3af8cc, + 0x3b030f, + 0x3b098d, + 0x3b0ccf, + 0x3b108c, + 0x3b138d, + 0x3b16cd, + 0x3b2c8e, + 0x3b3bcc, + 0x3b3ecc, + 0x3b41d0, + 0x3b7211, + 0x3b764b, + 0x3b7a8c, + 0x3b7d8e, + 0x3baa91, + 0x3baece, + 0x3bb24d, + 0x3c338b, + 0x3c3c8f, + 0x3c4794, + 0x25cd82, + 0x25cd82, + 0x2032c3, + 0x25cd82, + 0x2032c3, + 0x25cd82, + 0x2009c2, + 0x24e105, + 0x3ba78c, + 0x25cd82, + 0x25cd82, + 0x2009c2, + 0x25cd82, + 0x294b45, + 0x2b09c5, + 0x25cd82, + 0x25cd82, + 0x200302, + 0x294b45, + 0x328909, + 0x35618c, + 0x25cd82, + 0x25cd82, + 0x25cd82, + 0x25cd82, + 0x24e105, + 0x25cd82, + 0x25cd82, + 0x25cd82, + 0x25cd82, + 0x200302, + 0x328909, + 0x25cd82, + 0x25cd82, + 0x25cd82, + 0x2b09c5, + 0x25cd82, + 0x2b09c5, + 0x35618c, + 0x3ba78c, + 0x2b6c03, + 0x20be03, + 0x237583, + 0x30e843, + 0x26ff84, + 0x20ec83, + 0x241d03, + 0x1233c8, + 0x6fac4, + 0xae43, + 0x193708, + 0x200742, + 0x55202c42, + 0x246d03, + 0x252d84, + 0x206c03, + 0x3c24c4, + 0x234106, + 0x2137c3, + 0x2f9084, + 0x2f0b05, + 0x21f743, + 0x20ec83, + 0xaff03, + 0x241d03, + 0x22d50a, + 0x253786, + 0x37f08c, + 0xcd588, + 0x202c42, + 0x20be03, + 0x237583, + 0x30e843, + 0x20be83, + 0x2d0e06, + 0x20ec83, + 0x241d03, + 0x219543, + 0xa4d48, + 0x117485, + 0x187689, + 0x15842, + 0x56793ec5, + 0x2aa47, + 0xaf148, + 0xd9ce, + 0x87e92, + 0x11b5cb, + 0x102d06, + 0x56ad2fc5, + 0x56ed2fcc, + 0x25147, + 0x15da87, + 0x1208ca, + 0x42ed0, + 0x149445, + 0x10bfcb, + 0x7e948, + 0x3c2c7, + 0xf400b, + 0x78449, + 0x127b07, + 0x3a347, + 0x760c7, + 0x3c206, + 0x67008, + 0x57429546, + 0xa964d, + 0x120290, + 0x5780a6c2, + 0x1f6c8, + 0x82dd0, + 0x15b5cc, + 0x57f61e0d, + 0x5fbc8, + 0x6b8c7, + 0x164f49, + 0x5b646, + 0x946c8, + 0xebfc2, + 0x71e8a, + 0x31047, + 0x11d107, + 0xa5a89, + 0xa7708, + 0xef4c5, + 0xe85ce, + 0x1260e, + 0x1b98f, + 0x25589, + 0x52c49, + 0x7e10b, + 0x8ef4f, + 0xabccc, + 0x1125cb, + 0x105848, + 0xe1ac7, + 0xf87c8, + 0x132c8b, + 0x15274c, + 0x15af0c, + 0x1625cc, + 0x16784d, + 0x142188, + 0xfcdc2, + 0x1970c9, + 0x133acb, + 0xc3146, + 0x12e28b, + 0xd560a, + 0xd61c5, + 0xdae90, + 0xdd606, + 0x140806, + 0x14a345, + 0x18a988, + 0xe3d47, + 0xe4007, + 0x1fcc7, + 0xf7c4a, + 0xaefca, + 0x7dac6, + 0x9088d, + 0x6e308, + 0x1be608, + 0x68849, + 0xb7cc5, + 0xf778c, + 0x167a4b, + 0x16ab84, + 0xfec89, + 0xfeec6, + 0x4cb06, + 0x4182, + 0x157206, + 0x14634b, + 0x10ac87, + 0xdc2, + 0xc5105, + 0x16704, + 0x781, + 0x7bc3, + 0x572a6d06, + 0x94a43, + 0x2542, + 0x31044, + 0x602, + 0x8b304, + 0xcc2, + 0x7ec2, + 0x3102, + 0x114902, + 0x3cc2, + 0xd2fc2, + 0x3c02, + 0xefa02, + 0x3e242, + 0x4ac2, + 0x2e02, + 0x4c3c2, + 0x37583, 0x1f02, - 0x173102, - 0x73fc2, - 0x5e402, - 0x4ac3, - 0x2c2, - 0x9282, - 0x1002, - 0x14602, - 0x1724c5, - 0x6ec2, - 0x1202, - 0x41703, - 0x682, - 0xd42, - 0x1702, - 0xe5c2, - 0x1ac2, - 0x3382, - 0x6902, - 0x16c2, - 0x73c07, - 0x213dc3, - 0x204cc2, - 0x2d0783, - 0x231b83, - 0x2135c3, - 0x201d43, - 0x22d603, - 0x204ac3, - 0x20abc3, - 0x200383, - 0x29a2c3, - 0x1a5c3, - 0x15f048, - 0x2d0783, - 0x231b83, - 0x2135c3, - 0x20fbc3, - 0x204ac3, - 0x20abc3, - 0x200383, - 0x2d0783, - 0x231b83, - 0x200383, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x200041, - 0x20fbc3, - 0x204ac3, - 0x2104c3, - 0x200383, - 0x368883, - 0x2d0783, - 0x231b83, - 0x20fb43, - 0x2135c3, - 0x2300c3, - 0x287703, - 0x210503, - 0x234743, - 0x332ec3, - 0x2964c4, - 0x204ac3, - 0x200383, - 0x24abc3, - 0x200604, - 0x250c83, - 0x5283, - 0x3abd03, - 0x329b88, - 0x2e8384, - 0x2c264a, - 0x224906, - 0x10f9c4, - 0x38c2c7, - 0x21eeca, - 0x2df949, - 0x3a3b07, - 0x3a7dca, - 0x368883, - 0x2e900b, - 0x303349, - 0x2b9e45, - 0x2d7187, - 0xd1c2, - 0x2d0783, - 0x204d07, - 0x248d45, - 0x2e1cc9, - 0x231b83, - 0x233606, - 0x2c56c3, - 0xe1183, - 0x109686, - 0x60546, - 0x137c7, - 0x217546, - 0x222645, - 0x2cf187, - 0x2da587, - 0x54b32ec3, - 0x334a07, - 0x3642c3, - 0x3a2385, - 0x2964c4, - 0x32e3c8, - 0x2751cc, - 0x3a5745, - 0x2a2086, - 0x204bc7, - 0x37ef47, - 0x25b8c7, - 0x31f248, - 0x307ecf, - 0x2dfb85, - 0x243507, - 0x2394c7, - 0x2a9b0a, - 0x2d7e49, - 0x30bc85, - 0x32194a, - 0x1b06, - 0x2c5745, - 0x376284, - 0x289dc6, - 0x2f8cc7, - 0x242507, - 0x38cbc8, - 0x214185, - 0x248c46, - 0x20c545, - 0x387845, - 0x212c04, - 0x2e3f87, - 0x20900a, - 0x234d48, - 0x356946, - 0x2d603, - 0x2e0405, - 0x26c686, - 0x3a46c6, - 0x263b86, - 0x20fbc3, - 0x389247, - 0x239445, - 0x204ac3, - 0x2dd88d, - 0x20abc3, - 0x38ccc8, - 0x39a5c4, - 0x27ba85, - 0x2a9a06, - 0x2362c6, - 0x204587, - 0x2ae707, - 0x270b05, - 0x200383, - 0x27f2c7, - 0x329709, - 0x22b689, - 0x2f590a, - 0x24cd82, - 0x3a2344, - 0x2e76c4, - 0x261787, - 0x2278c8, - 0x2ef309, - 0x21f1c9, - 0x2f0487, - 0x303806, - 0xf22c6, - 0x2f39c4, - 0x2f3fca, - 0x2f6a08, - 0x2f6fc9, - 0x2bfe86, - 0x2b6ec5, - 0x234c08, - 0x2c9c4a, - 0x22c6c3, - 0x200786, - 0x2f0587, - 0x217f85, - 0x39a485, - 0x2717c3, - 0x258a04, - 0x36da85, - 0x288e47, - 0x2ffac5, - 0x2ed686, - 0xfff05, - 0x264a03, - 0x28b789, - 0x27b84c, - 0x2a7e0c, - 0x2d3bc8, - 0x3ade87, - 0x2fc8c8, - 0x2fcc0a, - 0x2fd84b, - 0x303488, - 0x33f408, - 0x2363c6, - 0x262685, - 0x200f4a, - 0x219545, - 0x205bc2, - 0x2c7a87, - 0x2a32c6, - 0x355ec5, - 0x38e989, - 0x26b785, - 0x285ec5, - 0x3a1f49, - 0x257cc6, - 0x3b1088, - 0x23e0c3, - 0x3b3306, - 0x27ac06, - 0x30ba85, - 0x30ba89, - 0x2bc289, - 0x24d0c7, - 0x10b904, - 0x30b907, - 0x21f0c9, - 0x23c905, - 0x4bbc8, - 0x3b3205, - 0x339505, - 0x376c89, - 0x205ac2, - 0x2e95c4, - 0x20d782, - 0x200b02, - 0x2ce985, - 0x30f748, - 0x2b9845, - 0x2c6fc3, - 0x2c6fc5, - 0x2d7543, - 0x210882, - 0x2e30c4, - 0x351903, - 0x204c82, - 0x35bb44, - 0x2e85c3, - 0x200e82, - 0x25e903, - 0x291704, - 0x2e7083, - 0x246f04, - 0x202602, - 0x21a903, - 0x215b43, - 0x206342, - 0x33c282, - 0x2bc0c9, - 0x202d82, - 0x28d304, - 0x201782, - 0x234a84, - 0x3037c4, - 0x2bcc44, - 0x2016c2, - 0x241a02, - 0x220883, - 0x225f83, - 0x387944, - 0x269e44, - 0x2bc484, - 0x2ce884, - 0x30b143, - 0x34f743, - 0x201a84, - 0x30d784, - 0x30e786, - 0x2e7782, - 0x20d1c2, - 0x231b83, - 0x332ec3, - 0x204ac3, - 0x200383, - 0x204cc2, - 0x368883, - 0x2d0783, - 0x231b83, - 0x2001c3, - 0x332ec3, - 0x2964c4, - 0x2bc384, - 0x213184, - 0x204ac3, - 0x200383, - 0x21aa03, - 0x2f4684, - 0x32f983, - 0x2bf3c3, - 0x345184, - 0x3b3006, - 0x211503, - 0x13ecc7, - 0x234fc3, - 0x23a943, - 0x2b6703, - 0x265383, - 0x22d603, - 0x2db6c5, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x204ac3, - 0x200383, - 0x2ed143, - 0x2ab343, - 0x15f048, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x204303, - 0x204ac3, - 0x23ee04, - 0x200383, - 0x26a104, - 0x2c2d45, - 0x13ecc7, - 0x20d1c2, - 0x2000c2, - 0x208a42, - 0x202082, - 0x200382, - 0x2d0783, - 0x23a184, - 0x231b83, - 0x332ec3, - 0x20fbc3, - 0x204ac3, - 0x200383, - 0x15f048, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x20fbc3, - 0x213184, - 0x204ac3, - 0x200383, - 0x213e83, - 0x24ae04, - 0x15f048, - 0x2d0783, - 0x20abc3, - 0x1a5c3, - 0x24fe44, - 0x15f048, - 0x2d0783, - 0x251304, - 0x2964c4, - 0x20abc3, - 0x201882, - 0x200383, - 0x2202c3, - 0x58a04, - 0x370145, - 0x205bc2, - 0x30d8c3, - 0x204cc2, - 0x15f048, - 0x20d1c2, - 0x231b83, - 0x332ec3, - 0x201d42, - 0x200383, - 0x204cc2, - 0x15f048, - 0x231b83, - 0x332ec3, - 0x204303, - 0x20fbc3, - 0x30b544, - 0x204cc2, - 0x20d1c2, - 0x2d0783, - 0x231b83, - 0x2da904, - 0x332ec3, - 0x204303, - 0x20fbc3, - 0x204ac3, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x22d603, - 0x204ac3, - 0x200383, - 0x26a103, - 0x213e83, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x204ac3, - 0x200383, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x204ac3, - 0x200383, - 0x1a5c3, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x2964c4, - 0x22d603, - 0x204ac3, - 0x200383, - 0x217082, - 0x200141, - 0x204cc2, - 0x200001, - 0x31f542, - 0x15f048, + 0x1b02, + 0x8882, + 0x12c42, + 0x1402, + 0x35c02, + 0x552c2, + 0x6202, + 0x3882, + 0x1342, + 0x14bc3, + 0x5842, + 0x1102, + 0xb0102, + 0x9602, + 0x1542, + 0x4482, + 0xe302, + 0x6f582, + 0x1e42, + 0x17c0c2, + 0x6cd82, + 0x3a3c2, + 0xec83, + 0x2002, + 0x53982, + 0x1382, + 0x6e02, + 0x29a85, + 0x8302, + 0x48602, + 0x44303, + 0x982, + 0x16f02, + 0x1282, + 0x4042, + 0xed42, + 0x2a82, + 0xc842, + 0x4182, + 0x1f8c5, + 0x582009c2, + 0x587696c3, + 0x1fbc3, + 0x58a009c2, + 0x1fbc3, + 0x179487, + 0x215383, + 0x200742, + 0x20be03, + 0x237583, + 0x203d43, + 0x201fc3, + 0x20be83, + 0x20ec83, + 0x20ae43, + 0x241d03, + 0x294a83, + 0x10ec3, + 0xcd588, + 0x20be03, + 0x237583, + 0x203d43, + 0x21f743, + 0x20ec83, + 0x20ae43, + 0xaff03, + 0x241d03, + 0x20be03, + 0x237583, + 0x241d03, + 0x20be03, + 0x237583, + 0x30e843, + 0x200541, + 0x21f743, + 0x20ec83, + 0x228803, + 0x241d03, + 0x3744, + 0x2b6c03, + 0x20be03, + 0x237583, + 0x21f6c3, + 0x203d43, + 0x257e43, + 0x26b143, + 0x2a2c83, + 0x280e83, + 0x30e843, + 0x26ff84, + 0x20ec83, + 0x241d03, + 0x203f83, + 0x31e084, + 0x250b03, + 0x5583, + 0x22d443, + 0x332388, + 0x325384, + 0x2023ca, + 0x238f06, + 0x10a904, + 0x37a147, + 0x22174a, + 0x21dd89, + 0x3ade07, + 0x3b628a, + 0x2b6c03, + 0x2d750b, + 0x293609, + 0x201bc5, + 0x34e347, + 0x2c42, + 0x20be03, + 0x214447, + 0x2fb145, + 0x2f2a09, + 0x237583, + 0x306a86, + 0x2c0c03, + 0xeae83, + 0x107f06, + 0x122746, + 0x13747, + 0x2176c6, + 0x227045, + 0x39e607, + 0x2d2107, + 0x5b30e843, + 0x33c8c7, + 0x371fc3, + 0x20fb85, + 0x26ff84, + 0x26ed48, + 0x36a50c, + 0x2ad885, + 0x2a2886, + 0x214307, + 0x345847, + 0x252e47, + 0x254d08, + 0x30600f, + 0x3371c5, + 0x246e07, + 0x37c407, + 0x2a424a, + 0x2cebc9, + 0x308045, + 0x30b7ca, + 0x136686, + 0x2c0c85, + 0x36c104, + 0x2bdf86, + 0x2f1a47, + 0x382947, + 0x348748, + 0x21b545, + 0x2fb046, 0x21d105, - 0x200701, - 0xd0783, + 0x36dd45, + 0x289684, + 0x326bc7, + 0x2eb24a, + 0x23fc48, + 0x366446, + 0xbe83, + 0x2d8345, + 0x318a86, + 0x3b4e86, + 0x34a246, + 0x21f743, + 0x399787, + 0x37c385, + 0x20ec83, + 0x2d58cd, + 0x20ae43, + 0x348848, + 0x38c844, + 0x275b05, + 0x2a4146, + 0x23d186, + 0x355b07, + 0x204a07, + 0x289085, + 0x241d03, + 0x3268c7, + 0x3650c9, + 0x340a49, + 0x30dc0a, + 0x249a82, + 0x20fb44, + 0x2de284, + 0x349b07, + 0x398208, + 0x2e4f89, + 0x221a49, + 0x2e5dc7, + 0x35c346, + 0xe8346, + 0x2e9484, + 0x2e9a8a, + 0x2edc08, + 0x2efc09, + 0x2de106, + 0x2b1985, + 0x23fb08, + 0x2c358a, + 0x2b5d83, + 0x31e206, + 0x2e5ec7, + 0x2311c5, + 0x38c705, + 0x3a26c3, + 0x2702c4, + 0x22b985, + 0x282ac7, + 0x2ff185, + 0x337c86, + 0x14aa05, + 0x2a3203, + 0x3b8a09, + 0x2758cc, + 0x2ca74c, + 0x2cbb08, + 0x2baec7, + 0x2fbc08, + 0x2fc24a, + 0x2fcc4b, + 0x293748, + 0x23c908, + 0x23d286, + 0x201985, + 0x320fca, + 0x369705, + 0x20e982, + 0x3c0507, + 0x261146, + 0x367405, + 0x36b749, + 0x277385, + 0x36d785, + 0x35c909, + 0x3189c6, + 0x3b6988, + 0x20fc43, + 0x217806, + 0x274c46, + 0x30a485, + 0x30a489, + 0x2e56c9, + 0x251b47, + 0x10c984, + 0x30c987, + 0x221949, + 0x23d605, + 0x40788, + 0x346245, + 0x332285, + 0x3c1309, + 0x203402, + 0x250904, + 0x203c82, + 0x205842, + 0x3c0d85, + 0x30a688, + 0x2b7c05, + 0x2c2483, + 0x2c2485, + 0x2ce1c3, + 0x20ff02, + 0x208f84, + 0x2c7d03, + 0x206f02, + 0x340484, + 0x2def43, + 0x204882, + 0x21fc43, + 0x28cb84, + 0x2f01c3, + 0x256784, + 0x200a02, + 0x219443, + 0x21d403, + 0x206a42, + 0x2f4682, + 0x2e5509, + 0x20ad42, + 0x2889c4, + 0x200442, + 0x23f984, + 0x35c304, + 0x287304, + 0x204182, + 0x23c542, + 0x3295c3, + 0x23b943, + 0x24d644, + 0x2b5c04, + 0x2eddc4, + 0x30b6c4, + 0x309043, + 0x335a83, + 0x336604, + 0x30eac4, + 0x30f306, + 0x2145c2, + 0x202c42, + 0x237583, + 0x30e843, + 0x20ec83, + 0x241d03, + 0x200742, + 0x2b6c03, + 0x20be03, + 0x237583, + 0x201b03, + 0x30e843, + 0x26ff84, + 0x2e57c4, + 0x226444, + 0x20ec83, + 0x241d03, + 0x219543, + 0x2ea0c4, + 0x31a803, + 0x2a6503, + 0x36aac4, + 0x346046, + 0x20b583, + 0x15da87, + 0x22fac3, + 0x21e903, + 0x2b0c43, + 0x20fbc3, + 0x20be83, + 0x339d45, + 0x20be03, + 0x237583, + 0x30e843, + 0x20ec83, + 0x241d03, + 0x210e03, + 0x2333c3, + 0xcd588, + 0x20be03, + 0x237583, + 0x30e843, + 0x214bc3, + 0x20ec83, + 0x238184, + 0xaff03, + 0x241d03, + 0x209944, + 0x2bdd85, + 0x15da87, + 0x202c42, + 0x209d42, + 0x202542, + 0x2032c2, + 0xae43, + 0x200342, + 0x20be03, + 0x23d744, + 0x237583, + 0x30e843, + 0x21f743, + 0x20ec83, + 0x241d03, + 0xcd588, + 0x20be03, + 0x237583, + 0x30e843, + 0x21f743, + 0x226444, + 0x20ec83, + 0xae43, + 0x241d03, + 0x207c03, + 0x28b304, + 0xcd588, + 0x20be03, + 0x20ae43, + 0x10ec3, + 0x13b5c4, + 0x253404, + 0xcd588, + 0x20be03, + 0x254a04, + 0x26ff84, + 0x20ae43, + 0x2056c2, + 0x241d03, + 0x24f3c3, + 0x702c4, + 0x2f5805, + 0x20e982, + 0x30ec03, + 0xf89, + 0xd3686, + 0xfcc8, + 0x200742, + 0xcd588, + 0x202c42, + 0x237583, + 0x30e843, + 0x201342, + 0xae43, + 0x241d03, + 0x200742, + 0x1b6447, + 0x11c889, + 0x5483, + 0xcd588, + 0x1226c3, + 0x5f33d587, + 0xbe03, + 0x1c6548, + 0x237583, + 0x30e843, + 0x178d46, + 0x214bc3, + 0x5b388, + 0xc0248, + 0x40e06, + 0x21f743, + 0xc6788, + 0x97c03, + 0xdbd45, + 0x37787, + 0xec83, + 0x6c83, + 0x41d03, + 0x4bc2, + 0x16c18a, + 0x1c0e43, + 0x30c5c4, + 0x105e0b, + 0x1063c8, + 0x8d302, + 0x200742, + 0x202c42, + 0x20be03, + 0x237583, + 0x2d2484, + 0x30e843, + 0x214bc3, + 0x21f743, + 0x20ec83, + 0x20be03, + 0x237583, + 0x30e843, + 0x20be83, + 0x20ec83, + 0x241d03, + 0x209943, + 0x207c03, + 0x20be03, + 0x237583, + 0x30e843, + 0x20ec83, + 0x241d03, + 0x20be03, + 0x237583, + 0x30e843, + 0x20ec83, + 0x241d03, + 0x10ec3, + 0x20be03, + 0x237583, + 0x30e843, + 0x26ff84, + 0x20be83, + 0x20ec83, + 0x241d03, + 0x230882, 0x200101, - 0x2000c1, - 0x201e41, - 0x29da82, - 0x36da04, - 0x372a43, - 0x200181, - 0x200941, + 0x200742, + 0x200301, + 0x32a782, + 0xcd588, + 0x21fe85, + 0x200781, + 0xbe03, + 0x2014c1, 0x200041, + 0x200141, + 0x24e082, + 0x378184, + 0x24e083, + 0x201401, + 0x200901, + 0x200541, + 0x200a81, + 0x316307, + 0x337dcf, + 0x2fa486, + 0x200641, + 0x33b606, 0x200081, - 0x2ed7c7, - 0x2eeccf, - 0x2fc146, - 0x201481, - 0x289786, - 0x200c01, + 0x2001c1, + 0x3c35ce, + 0x200341, + 0x241d03, + 0x201681, + 0x254285, + 0x204bc2, + 0x3a25c5, 0x2002c1, - 0x33168e, - 0x200381, - 0x200383, - 0x200e81, - 0x279e45, - 0x210582, - 0x2716c5, - 0x2003c1, - 0x200201, - 0x200241, - 0x205bc2, 0x200a01, - 0x201a81, - 0x2005c1, - 0x2007c1, - 0x200cc1, - 0x15f048, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x204ac3, - 0x200383, - 0x21bd03, - 0x2d0783, - 0x332ec3, - 0x91d48, - 0x20fbc3, - 0x204ac3, - 0x48803, - 0x200383, - 0x14ebc48, - 0x15f048, - 0x4dcc4, - 0x15f048, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x204ac3, - 0x200383, - 0x205283, - 0x15f048, - 0x2d0783, - 0x231b83, - 0x2da904, - 0x200383, - 0x293ac5, - 0x343984, - 0x2d0783, - 0x204ac3, - 0x200383, - 0x16b18a, - 0x20d1c2, - 0x2d0783, - 0x22f489, - 0x231b83, - 0x2d2389, - 0x332ec3, - 0x20fbc3, - 0x204ac3, - 0x200383, - 0x2f37c8, - 0x226647, - 0x370145, - 0x3a7f87, - 0x26b0cb, - 0x215cc8, - 0x32eac9, - 0x228087, - 0x200108, - 0x36f906, - 0x2344c7, - 0x29c108, - 0x2ab806, - 0x31d407, - 0x2aa449, - 0x2ba749, - 0x2c2ac6, - 0x2c38c5, - 0x2cce08, - 0x2b4783, + 0x200401, + 0x20e982, + 0x200441, + 0x203f81, + 0x20d601, + 0x201181, + 0x200dc1, + 0xcd588, + 0x20be03, + 0x237583, + 0x30e843, + 0x20ec83, + 0x241d03, + 0x21a003, + 0x20be03, + 0x30e843, + 0x8d248, + 0x21f743, + 0x20ec83, + 0x5e8c3, + 0x241d03, + 0x14e0f48, + 0x10d08, + 0xcd588, + 0xae43, + 0x24704, + 0x4cec4, + 0x14e0f4a, + 0xcd588, + 0xaff03, + 0x20be03, + 0x237583, + 0x30e843, + 0x20ec83, + 0x241d03, + 0x205583, + 0xcd588, + 0x20be03, + 0x237583, + 0x2d2484, + 0x241d03, + 0x252385, + 0x317c44, + 0x20be03, + 0x20ec83, + 0x241d03, + 0x2fc8a, + 0xfd504, + 0x112a46, + 0x202c42, + 0x20be03, + 0x234d09, + 0x237583, + 0x2a82c9, + 0x30e843, + 0x21f743, + 0x20ec83, + 0x241d03, + 0x2e9288, + 0x397b87, + 0x2f5805, + 0x1b7888, + 0x1b6447, + 0x19848a, + 0x101d0b, + 0x13b847, + 0x45388, + 0x3a80a, + 0x13dc8, + 0x11c889, + 0x2b847, + 0x67fc7, + 0x1c28c8, + 0x1c6548, + 0x470cf, + 0x26505, + 0x1c6847, + 0x178d46, + 0x4c207, + 0x108186, + 0x5b388, + 0x9b986, + 0x1187c7, + 0x142349, + 0x1b5207, + 0xe68c9, + 0xb8209, + 0xbdb06, + 0xc0248, + 0xbeb45, + 0x77fca, + 0xc6788, + 0x97c03, + 0xcea08, + 0x37787, + 0x1ac045, + 0x4dc90, + 0x6c83, + 0xaff03, + 0x1c3147, + 0x1d5c5, + 0xe4308, + 0x605c5, + 0x1c0e43, + 0x142748, + 0x132146, + 0x199bc9, + 0xaab87, + 0x124b, + 0x137a84, + 0xfe3c4, + 0x105e0b, + 0x1063c8, + 0x107e07, + 0x117485, + 0x20be03, + 0x237583, + 0x203d43, + 0x241d03, + 0x244a03, + 0x30e843, + 0xaff03, + 0x20be03, + 0x237583, + 0x30e843, + 0x21f743, + 0x20ec83, + 0x241d03, + 0x7e24b, + 0x200742, + 0x202c42, + 0x241d03, + 0xcd588, + 0x200742, + 0x202c42, + 0x202542, + 0x201342, + 0x200b82, + 0x20ec83, + 0x200342, + 0x200742, + 0x2b6c03, + 0x202c42, + 0x20be03, + 0x237583, + 0x202542, + 0x30e843, + 0x214bc3, + 0x21f743, + 0x226444, + 0x20ec83, + 0x207783, + 0x241d03, + 0x30c5c4, + 0x203f83, + 0x30e843, + 0x202c42, + 0x20be03, + 0x237583, + 0x30e843, + 0x21f743, + 0x20ec83, + 0x20ae43, + 0x241d03, + 0x3afd87, + 0x20be03, + 0x279947, + 0x2e6686, + 0x216543, + 0x208883, + 0x30e843, + 0x204d03, + 0x26ff84, + 0x38b344, + 0x2b9906, + 0x20c743, + 0x20ec83, + 0x241d03, + 0x252385, + 0x309e84, + 0x320dc3, + 0x20d203, + 0x3c0507, + 0x23b1c5, + 0x20be03, + 0x237583, + 0x30e843, + 0x21f743, + 0x20ec83, + 0x241d03, + 0x98747, + 0x2149c2, + 0x26e443, + 0x20df43, + 0x2b6c03, + 0x6760be03, + 0x20b2c2, + 0x237583, + 0x206c03, + 0x30e843, + 0x26ff84, + 0x3c32c3, + 0x3371c3, + 0x21f743, + 0x226444, + 0x67a02f02, + 0x20ec83, + 0x241d03, + 0x235cc3, + 0x214c43, + 0x230882, + 0x203f83, + 0xcd588, + 0x30e843, + 0x10ec3, + 0x31b0c4, + 0x2b6c03, + 0x202c42, + 0x20be03, + 0x23d744, + 0x237583, + 0x30e843, + 0x26ff84, + 0x214bc3, + 0x39e304, + 0x21a484, + 0x2d0e06, + 0x226444, + 0x20ec83, + 0x241d03, + 0x219543, + 0x261146, + 0x4170b, + 0x29546, + 0xeb94a, + 0x10b34a, + 0xcd588, + 0x21d0c4, + 0x68e0be03, + 0x2b6bc4, + 0x237583, + 0x268984, + 0x30e843, + 0x357d43, + 0x21f743, + 0x20ec83, + 0xaff03, + 0x241d03, + 0x55a43, + 0x33840b, + 0x3b1a0a, + 0x3c580c, + 0xd80c8, + 0x200742, + 0x202c42, + 0x202542, + 0x232585, + 0x26ff84, + 0x201e42, + 0x21f743, + 0x21a484, + 0x2032c2, + 0x200342, + 0x207c02, + 0x230882, + 0xb6c03, + 0x4d5c2, + 0x386389, + 0x3a3088, + 0x310449, + 0x34e049, + 0x23e48a, + 0x24e90a, + 0x219382, + 0x2efa02, + 0x2c42, + 0x20be03, + 0x230a42, + 0x246fc6, + 0x368802, + 0x207582, + 0x30208e, + 0x21948e, + 0x27bf47, + 0x20ec07, + 0x2e89c2, + 0x237583, + 0x30e843, + 0x209182, + 0x201342, + 0x6ff83, + 0x23d94f, + 0x247302, + 0x2f9507, + 0x2ad447, + 0x314407, + 0x2b0fcc, + 0x2b9b8c, + 0x207144, + 0x27d34a, + 0x2193c2, + 0x209602, + 0x2b9844, + 0x2028c2, + 0x2c10c2, + 0x2b9dc4, + 0x217f42, + 0x201542, + 0xf003, + 0x29ba07, + 0x233805, + 0x20e302, + 0x24c184, + 0x37c0c2, 0x2d7c88, - 0x231d87, - 0x206583, - 0x31d287, - 0x217905, - 0x2eeb08, - 0x359105, - 0x2cea43, - 0x23c289, - 0x2b0e87, - 0x35d504, - 0x2ff244, - 0x307ccb, - 0x308288, - 0x309587, - 0x2d0783, - 0x231b83, - 0x2135c3, - 0x200383, - 0x236ec3, - 0x332ec3, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x20fbc3, - 0x204ac3, - 0x200383, - 0x77fcb, - 0x204cc2, - 0x20d1c2, - 0x200383, - 0x15f048, - 0x204cc2, - 0x20d1c2, - 0x208a42, - 0x201d42, - 0x203cc2, - 0x204ac3, - 0x200382, - 0x204cc2, - 0x368883, - 0x20d1c2, - 0x2d0783, - 0x231b83, - 0x208a42, - 0x332ec3, - 0x204303, - 0x20fbc3, - 0x213184, - 0x204ac3, - 0x2183c3, - 0x200383, - 0x30b544, - 0x24abc3, - 0x332ec3, - 0x20d1c2, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x20fbc3, - 0x204ac3, - 0x20abc3, - 0x200383, - 0x39db07, - 0x2d0783, - 0x26e5c7, - 0x362a86, - 0x215ac3, - 0x2041c3, - 0x332ec3, - 0x209e43, - 0x2964c4, - 0x38b704, - 0x30dbc6, - 0x201303, - 0x204ac3, - 0x200383, - 0x293ac5, - 0x318244, - 0x369dc3, - 0x37ed83, - 0x2c7a87, - 0x2387c5, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x20fbc3, - 0x204ac3, - 0x200383, - 0x203782, - 0x3ae343, - 0x2c2d43, - 0x368883, - 0x5fed0783, - 0x209c02, - 0x231b83, - 0x202743, - 0x332ec3, - 0x2964c4, - 0x23a0c3, - 0x2dfb83, - 0x20fbc3, - 0x213184, - 0x6020c002, - 0x204ac3, - 0x200383, - 0x209103, - 0x229b03, - 0x217082, - 0x24abc3, - 0x15f048, - 0x332ec3, - 0x1a5c3, - 0x2957c4, - 0x368883, - 0x20d1c2, - 0x2d0783, - 0x23a184, - 0x231b83, - 0x332ec3, - 0x2964c4, - 0x204303, - 0x2cee84, - 0x222044, - 0x201686, - 0x213184, - 0x204ac3, - 0x200383, - 0x21aa03, - 0x2a32c6, - 0x3ddcb, - 0x28b86, - 0x4aa0a, - 0x10adca, - 0x15f048, - 0x20c504, - 0x2d0783, - 0x368844, - 0x231b83, - 0x256bc4, - 0x332ec3, - 0x262fc3, - 0x20fbc3, - 0x204ac3, - 0x200383, - 0x32e84b, - 0x39f84a, - 0x3b478c, - 0x204cc2, - 0x20d1c2, - 0x208a42, - 0x2b0405, - 0x2964c4, - 0x201f02, - 0x20fbc3, - 0x222044, - 0x202082, - 0x200382, - 0x20c4c2, - 0x217082, - 0x168883, - 0xd882, - 0x2b2409, - 0x259f88, - 0x332d49, - 0x234309, - 0x23b18a, - 0x24550a, - 0x20a182, - 0x21c402, - 0xd1c2, - 0x2d0783, - 0x220802, - 0x2436c6, - 0x356fc2, - 0x20a542, - 0x21ad8e, - 0x21a94e, - 0x281a47, - 0x204a47, - 0x221202, - 0x231b83, - 0x332ec3, - 0x20b502, - 0x201d42, - 0x4143, - 0x24058f, - 0x26b142, - 0x362cc7, - 0x2fa1c7, - 0x39d487, - 0x31e28c, - 0x364d0c, - 0x202444, - 0x283b0a, - 0x21a882, - 0x201b02, - 0x2bc744, - 0x22b1c2, - 0x2c5c02, - 0x364f44, - 0x2184c2, - 0x205d82, - 0x5d83, - 0x2ab887, - 0x33d885, - 0x2073c2, - 0x240504, - 0x373102, - 0x2df088, - 0x204ac3, - 0x203808, - 0x203ac2, - 0x232d85, - 0x203ac6, - 0x200383, - 0x206ec2, - 0x2ef547, - 0x10582, - 0x350845, - 0x31d185, - 0x207c82, - 0x236b82, - 0x3a860a, - 0x27098a, - 0x212bc2, - 0x353f84, - 0x2018c2, - 0x3a2208, - 0x219682, - 0x2a2588, - 0x304987, - 0x304c89, - 0x2037c2, - 0x309e45, - 0x247e85, - 0x21424b, - 0x2ca84c, - 0x22c208, - 0x3186c8, - 0x2e7782, - 0x204642, - 0x204cc2, - 0x15f048, - 0x20d1c2, - 0x2d0783, - 0x208a42, - 0x202082, - 0x200382, - 0x200383, - 0x20c4c2, - 0x204cc2, - 0x6260d1c2, - 0x62b32ec3, - 0x205d83, - 0x201f02, - 0x204ac3, - 0x3a8fc3, - 0x200383, - 0x2ec383, - 0x273d06, - 0x1613e83, - 0x15f048, - 0x63c85, - 0xae2cd, - 0xaafca, - 0x6ebc7, - 0x63201b82, - 0x63601442, - 0x63a00f82, - 0x63e02e02, - 0x642125c2, - 0x6460e542, - 0x13ecc7, - 0x64a0d1c2, - 0x64e0e482, - 0x6520fe42, - 0x65603b02, - 0x21a943, - 0x102c4, - 0x220a43, - 0x65a14002, - 0x65e023c2, - 0x51847, - 0x66214502, - 0x66600b82, - 0x66a00542, - 0x66e0a3c2, - 0x67202282, - 0x67601d42, - 0xbe445, - 0x221443, - 0x3b3bc4, - 0x67a2b1c2, - 0x67e42682, - 0x68202682, - 0x7e5cb, - 0x68600c02, - 0x68e513c2, - 0x69201f02, - 0x69603cc2, - 0x69a0bcc2, - 0x69e05f02, - 0x6a20b602, - 0x6a673fc2, - 0x6aa0c002, - 0x6ae04a02, - 0x6b202082, - 0x6b603702, - 0x6ba12982, - 0x6be31302, - 0x94fc4, - 0x358183, - 0x6c2126c2, - 0x6c61a582, - 0x6ca098c2, - 0x6ce00982, - 0x6d200382, - 0x6d604c82, - 0x78147, - 0x6da054c2, - 0x6de05502, - 0x6e20c4c2, - 0x6e609f42, - 0x19de4c, - 0x6ea22e82, - 0x6ee79242, - 0x6f200a02, - 0x6f606602, - 0x6fa019c2, - 0x6fe3b302, - 0x70206d02, - 0x70613882, - 0x70a7af82, - 0x70e43e02, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x75c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x68a3a0c3, - 0x2075c3, - 0x2db744, - 0x259e86, - 0x2f74c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x20d882, - 0x20d882, - 0x23a0c3, - 0x2075c3, - 0x716d0783, - 0x231b83, - 0x329e83, - 0x20fbc3, - 0x204ac3, - 0x200383, - 0x15f048, - 0x20d1c2, - 0x2d0783, - 0x204ac3, - 0x200383, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x20fbc3, - 0x204ac3, - 0x200383, - 0x24fe44, - 0x20d1c2, - 0x2d0783, - 0x3303c3, - 0x231b83, - 0x251304, - 0x2135c3, - 0x332ec3, - 0x2964c4, - 0x204303, - 0x20fbc3, - 0x204ac3, - 0x200383, - 0x2202c3, - 0x370145, - 0x2b2703, - 0x24abc3, - 0x20d1c2, - 0x2d0783, - 0x23a0c3, - 0x204ac3, - 0x200383, - 0x204cc2, - 0x368883, - 0x15f048, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x22e886, - 0x2964c4, - 0x204303, - 0x213184, - 0x204ac3, - 0x200383, - 0x21aa03, - 0x2d0783, - 0x231b83, - 0x204ac3, - 0x200383, - 0x2d0783, - 0x28b86, - 0x231b83, - 0x332ec3, - 0xe1946, - 0x204ac3, - 0x200383, - 0x315cc8, - 0x318509, - 0x327a09, - 0x332548, - 0x37d888, - 0x37d889, - 0x9da85, - 0x204cc2, - 0x238605, - 0x205d43, - 0x7420d1c2, - 0x231b83, - 0x332ec3, - 0x33e387, - 0x265383, - 0x20fbc3, - 0x204ac3, - 0x2104c3, - 0x212483, - 0x20abc3, - 0x200383, - 0x241f46, - 0x205bc2, - 0x24abc3, - 0x15f048, - 0x204cc2, - 0x368883, - 0x20d1c2, - 0x2d0783, - 0x231b83, - 0x332ec3, - 0x2964c4, + 0x20ec83, + 0x39f108, + 0x206a82, + 0x207305, + 0x388206, + 0x241d03, + 0x208302, + 0x2e51c7, + 0x4bc2, + 0x272585, + 0x204905, + 0x212182, + 0x2030c2, + 0x293c0a, + 0x288f0a, + 0x23a382, + 0x29a184, + 0x2040c2, + 0x20fa08, + 0x200d82, + 0x39d588, + 0x302ac7, + 0x3038c9, + 0x204982, + 0x3086c5, + 0x36ba05, + 0x21b60b, + 0x2c418c, + 0x230548, + 0x31c188, + 0x2145c2, + 0x355bc2, + 0x200742, + 0xcd588, + 0x202c42, + 0x20be03, + 0x202542, + 0x2032c2, + 0xae43, + 0x200342, + 0x241d03, + 0x207c02, + 0x200742, + 0x6a202c42, + 0x6a70e843, + 0x20f003, + 0x201e42, + 0x20ec83, + 0x338c03, + 0x241d03, + 0x2e2d83, + 0x379586, + 0x1607c03, + 0xcd588, + 0x6e247, + 0x14a345, + 0xa7e0d, + 0xa5f4a, + 0x85047, + 0x6ae00a42, + 0x6b200602, + 0x6b600282, + 0x6ba02b82, + 0x6be12442, + 0x6c203cc2, + 0x15da87, + 0x6c602c42, + 0x6ca1b282, + 0x6ce1f9c2, + 0x6d202e02, + 0x219483, + 0x22644, + 0x282dc3, + 0x6d615902, + 0x6da039c2, + 0x55087, + 0x6de02202, + 0x6e200902, + 0x6e600542, + 0x6ea07d02, + 0x6ee03882, + 0x6f201342, + 0xc0f85, + 0x24c4c3, + 0x23a2c4, + 0x6f6028c2, + 0x6fa0dd82, + 0x6fe00682, + 0xb714b, + 0x702000c2, + 0x70a54ac2, + 0x70e01e42, + 0x71200b82, + 0x71603282, + 0x71a05a02, + 0x71e0d682, + 0x7226cd82, + 0x72602f02, + 0x72a04d42, + 0x72e032c2, + 0x7323e0c2, + 0x7362a402, + 0x73a11e82, + 0xafd44, + 0x339b43, + 0x73e0e882, + 0x742190c2, + 0x74606482, + 0x74a02882, + 0x74e00342, + 0x75206f02, + 0x7e3c7, + 0x756057c2, + 0x75a00502, + 0x75e07c02, + 0x76209f82, + 0xf778c, + 0x76627882, + 0x76a2c0c2, + 0x76e0a902, + 0x77206d02, + 0x77611d82, + 0x77a3e602, + 0x77e0fc42, + 0x78213802, + 0x78674fc2, + 0x78a4f1c2, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x11343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x707c32c3, + 0x211343, + 0x339dc4, + 0x3a2f86, + 0x2f0ec3, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x200189, + 0x24d5c2, + 0x391283, + 0x2b8503, + 0x202f85, + 0x206c03, + 0x3c32c3, + 0x211343, + 0x29ea43, + 0x233d43, + 0x3bd849, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x24d5c2, + 0x24d5c2, + 0x3c32c3, + 0x211343, + 0x7920be03, + 0x237583, + 0x332683, + 0x21f743, + 0x20ec83, + 0xae43, + 0x241d03, + 0xcd588, + 0x202c42, + 0x20be03, + 0x20ec83, + 0x241d03, + 0x20be03, + 0x237583, + 0x30e843, + 0x21f743, + 0x20ec83, + 0xae43, + 0x241d03, + 0x253404, + 0x202c42, + 0x20be03, + 0x322183, + 0x237583, + 0x254a04, + 0x203d43, + 0x30e843, + 0x26ff84, + 0x214bc3, + 0x21f743, + 0x20ec83, + 0x241d03, + 0x24f3c3, + 0x2f5805, + 0x233d43, + 0x203f83, + 0xae43, + 0x202c42, + 0x20be03, + 0x3c32c3, + 0x20ec83, + 0x241d03, + 0x200742, + 0x2b6c03, + 0xcd588, + 0x20be03, + 0x237583, + 0x30e843, + 0x234106, + 0x26ff84, + 0x214bc3, + 0x226444, + 0x20ec83, + 0x241d03, + 0x219543, + 0x20be03, + 0x237583, + 0x20ec83, + 0x241d03, + 0x144be47, + 0x20be03, + 0x29546, + 0x237583, + 0x30e843, + 0xd91c6, + 0x20ec83, + 0x241d03, + 0x318fc8, + 0x31bfc9, + 0x330349, + 0x33af08, + 0x38a348, + 0x38a349, + 0x22c10d, + 0x24b00f, + 0x2ec510, + 0x354d0d, + 0x36ebcc, + 0x38bc4b, + 0xaf148, + 0xc7bc5, + 0x200742, + 0x23b005, + 0x20bfc3, + 0x7c602c42, + 0x237583, + 0x30e843, + 0x2d7ac7, 0x20fbc3, - 0x204ac3, - 0x200383, - 0x213e83, - 0x153ca46, + 0x21f743, + 0x20ec83, + 0x228803, + 0x20c0c3, + 0x20ae43, + 0x241d03, + 0x253786, + 0x20e982, + 0x203f83, + 0xcd588, + 0x200742, + 0x2b6c03, + 0x202c42, + 0x20be03, + 0x237583, + 0x30e843, + 0x26ff84, + 0x21f743, + 0x20ec83, + 0x241d03, + 0x207c03, + 0xf84, + 0x154ab06, + 0x200742, + 0x202c42, + 0x30e843, + 0x21f743, + 0x241d03, } // children is the list of nodes' children, the parent's wildcard bit and the @@ -8623,471 +9030,505 @@ var children = [...]uint32{ 0x40000000, 0x50000000, 0x60000000, - 0x1860612, - 0x1864618, - 0x1884619, - 0x19e0621, - 0x19f4678, - 0x1a0867d, - 0x1a18682, - 0x1a34686, + 0x185460f, + 0x1858615, + 0x187c616, + 0x19d861f, + 0x19ec676, + 0x1a0067b, + 0x1a14680, + 0x1a34685, 0x1a3868d, 0x1a5068e, - 0x1a74694, - 0x1a7869d, - 0x1a9069e, - 0x1a946a4, + 0x1a78694, + 0x1a7c69e, + 0x1a9469f, 0x1a986a5, - 0x1ac06a6, - 0x1ac46b0, - 0x21acc6b1, - 0x1b146b3, - 0x1b186c5, - 0x1b386c6, - 0x1b4c6ce, - 0x1b506d3, - 0x1b806d4, - 0x1b9c6e0, - 0x1bc46e7, - 0x1bd06f1, - 0x1bd46f4, - 0x1c686f5, - 0x1c7c71a, - 0x1c9071f, - 0x1cc0724, - 0x1cd0730, - 0x1ce4734, - 0x1d08739, - 0x1e20742, - 0x1e24788, - 0x1e90789, - 0x1ea47a4, - 0x1eb87a9, - 0x1ec07ae, - 0x1ed07b0, - 0x1ed47b4, - 0x1eec7b5, - 0x1f347bb, - 0x1f4c7cd, - 0x1f507d3, - 0x1f547d4, - 0x1f5c7d5, - 0x1f987d7, - 0x61f9c7e6, - 0x1fb07e7, - 0x1fbc7ec, - 0x1fc07ef, - 0x1fd07f0, - 0x20807f4, - 0x2084820, - 0x22090821, - 0x22098824, - 0x20cc826, - 0x20d0833, - 0x2514834, - 0x225ac945, - 0x225b096b, - 0x225b496c, - 0x225c096d, - 0x225c4970, - 0x225d0971, - 0x225d4974, - 0x225d8975, - 0x225dc976, - 0x225e0977, - 0x225e4978, - 0x225f0979, - 0x225f497c, - 0x2260097d, - 0x22604980, - 0x22608981, - 0x2260c982, - 0x22610983, - 0x22614984, - 0x2618985, - 0x2261c986, - 0x22628987, - 0x2262c98a, - 0x263498b, - 0x2264498d, - 0x22648991, - 0x2654992, - 0x22658995, - 0x265c996, - 0x22660997, - 0x267c998, - 0x269499f, - 0x26989a5, - 0x26a89a6, - 0x26b09aa, - 0x26e49ac, - 0x26e89b9, - 0x26f89ba, - 0x27909be, - 0x227949e4, - 0x279c9e5, - 0x27a09e7, - 0x27b89e8, - 0x27cc9ee, - 0x27f49f3, - 0x28149fd, - 0x2844a05, - 0x286ca11, - 0x2870a1b, - 0x2894a1c, - 0x2898a25, - 0x28aca26, - 0x28b0a2b, - 0x28b4a2c, - 0x28d4a2d, - 0x28eca35, - 0x28f0a3b, - 0x228f4a3c, - 0x28f8a3d, - 0x2908a3e, - 0x290ca42, - 0x2984a43, - 0x29a0a61, - 0x29aca68, - 0x29c0a6b, - 0x29d8a70, - 0x29eca76, - 0x2a04a7b, - 0x2a1ca81, - 0x2a34a87, - 0x2a50a8d, - 0x2a68a94, - 0x2ac8a9a, + 0x1a9c6a6, + 0x1ad86a7, + 0x1adc6b6, + 0x21ae46b7, + 0x1b2c6b9, + 0x1b306cb, + 0x1b506cc, + 0x1b646d4, + 0x1b686d9, + 0x1b986da, + 0x1bb46e6, + 0x1bdc6ed, + 0x1bec6f7, + 0x1bf06fb, + 0x1c886fc, + 0x1c9c722, + 0x1cb0727, + 0x1ce072c, + 0x1cf0738, + 0x1d0473c, + 0x1da8741, + 0x1fa076a, + 0x1fa47e8, + 0x20107e9, + 0x207c804, + 0x209481f, + 0x20a8825, + 0x20b082a, + 0x20c482c, + 0x20c8831, + 0x20e4832, + 0x2134839, + 0x215084d, + 0x2154854, + 0x2158855, + 0x2174856, + 0x21b085d, + 0x621b486c, + 0x21cc86d, + 0x21e0873, + 0x21e4878, + 0x21f4879, + 0x22a487d, + 0x22a88a9, + 0x222b88aa, + 0x222bc8ae, + 0x222c08af, + 0x22f88b0, + 0x22fc8be, + 0x278c8bf, + 0x228349e3, + 0x22838a0d, + 0x2283ca0e, + 0x22848a0f, + 0x2284ca12, + 0x22858a13, + 0x2285ca16, + 0x22860a17, + 0x22864a18, + 0x22868a19, + 0x2286ca1a, + 0x22878a1b, + 0x2287ca1e, + 0x22888a1f, + 0x2288ca22, + 0x22890a23, + 0x22894a24, + 0x228a0a25, + 0x228a4a28, + 0x228b0a29, + 0x228b4a2c, + 0x228b8a2d, + 0x228bca2e, + 0x28c0a2f, + 0x228c4a30, + 0x228d0a31, + 0x228d4a34, + 0x28dca35, + 0x291ca37, + 0x2293ca47, + 0x22940a4f, + 0x22944a50, + 0x2948a51, + 0x2294ca52, + 0x2950a53, + 0x296ca54, + 0x2984a5b, + 0x2988a61, + 0x2998a62, + 0x29a4a66, + 0x29d8a69, + 0x29dca76, + 0x29f0a77, + 0x229f8a7c, + 0x2ab8a7e, + 0x22abcaae, + 0x2ac4aaf, + 0x2ac8ab1, 0x2ae0ab2, - 0x2ae4ab8, - 0x2af8ab9, - 0x2b3cabe, - 0x2bbcacf, - 0x2be8aef, - 0x2becafa, - 0x2bf4afb, - 0x2c14afd, - 0x2c18b05, - 0x2c38b06, - 0x2c40b0e, - 0x2c78b10, - 0x2cb8b1e, + 0x2af4ab8, + 0x2b1cabd, + 0x2b3cac7, + 0x2b6cacf, + 0x2b94adb, + 0x2b98ae5, + 0x2bbcae6, + 0x2bc0aef, + 0x2bd4af0, + 0x2bd8af5, + 0x2bdcaf6, + 0x2bfcaf7, + 0x2c1caff, + 0x2c20b07, + 0x22c24b08, + 0x2c28b09, + 0x2c2cb0a, + 0x2c3cb0b, + 0x2c40b0f, + 0x2cb8b10, 0x2cbcb2e, - 0x2d0cb2f, - 0x2d10b43, - 0x22d14b44, + 0x2cd8b2f, + 0x2ce8b36, + 0x2cfcb3a, + 0x2d14b3f, 0x2d2cb45, - 0x2d50b4b, - 0x2d70b54, - 0x3334b5c, - 0x3340ccd, - 0x3360cd0, - 0x351ccd8, - 0x35ecd47, - 0x365cd7b, - 0x36b4d97, - 0x379cdad, - 0x37f4de7, - 0x3830dfd, - 0x392ce0c, - 0x39f8e4b, - 0x3a90e7e, - 0x3b20ea4, - 0x3b84ec8, - 0x3dbcee1, - 0x3e74f6f, - 0x3f40f9d, - 0x3f8cfd0, - 0x4014fe3, - 0x4051005, - 0x40a1014, - 0x4119028, - 0x6411d046, - 0x64121047, - 0x64125048, - 0x41a1049, - 0x41fd068, - 0x427907f, - 0x42f109e, - 0x43710bc, - 0x43dd0dc, - 0x45090f7, - 0x4561142, - 0x64565158, - 0x45fd159, - 0x468517f, - 0x46d11a1, - 0x47391b4, - 0x47e11ce, - 0x48a91f8, - 0x491122a, - 0x4a25244, - 0x64a29289, - 0x64a2d28a, - 0x4a8928b, - 0x4ae52a2, - 0x4b752b9, - 0x4bf12dd, - 0x4c352fc, - 0x4d1930d, - 0x4d4d346, - 0x4dad353, - 0x4e2136b, - 0x4ea9388, - 0x4ee93aa, - 0x4f593ba, - 0x64f5d3d6, - 0x64f613d7, - 0x24f653d8, - 0x4f7d3d9, - 0x4f993df, - 0x4fdd3e6, - 0x4fed3f7, - 0x50053fb, - 0x507d401, - 0x508541f, - 0x5099421, - 0x50b1426, - 0x50d942c, - 0x50dd436, - 0x50e5437, - 0x50f9439, - 0x511543e, - 0x5119445, - 0x5121446, - 0x515d448, - 0x5171457, - 0x517945c, - 0x518145e, - 0x5185460, - 0x51a9461, - 0x51cd46a, - 0x51e5473, - 0x51e9479, - 0x51f147a, - 0x51f547c, - 0x524d47d, - 0x5271493, - 0x529149c, - 0x52ad4a4, - 0x52bd4ab, - 0x52d14af, - 0x52d54b4, - 0x52dd4b5, - 0x52f14b7, - 0x53014bc, - 0x53054c0, - 0x53214c1, - 0x5bb14c8, - 0x5be96ec, - 0x5c156fa, - 0x5c2d705, - 0x5c4d70b, - 0x5c6d713, - 0x5cb171b, - 0x5cb972c, - 0x25cbd72e, - 0x25cc172f, - 0x5cc5730, - 0x5e01731, - 0x25e05780, - 0x25e11781, - 0x25e19784, - 0x25e25786, - 0x5e29789, - 0x5e2d78a, - 0x5e5578b, - 0x5e7d795, - 0x5e8179f, - 0x5eb97a0, - 0x5ecd7ae, - 0x6a257b3, - 0x6a29a89, - 0x6a2da8a, - 0x26a31a8b, - 0x6a35a8c, - 0x26a39a8d, - 0x6a3da8e, - 0x26a49a8f, - 0x6a4da92, - 0x6a51a93, - 0x26a55a94, - 0x6a59a95, - 0x26a61a96, - 0x6a65a98, - 0x6a69a99, - 0x26a79a9a, - 0x6a7da9e, - 0x6a81a9f, - 0x6a85aa0, - 0x6a89aa1, - 0x26a8daa2, - 0x6a91aa3, - 0x6a95aa4, - 0x6a99aa5, - 0x6a9daa6, - 0x26aa5aa7, - 0x6aa9aa9, - 0x6aadaaa, - 0x6ab1aab, - 0x26ab5aac, - 0x6ab9aad, - 0x26ac1aae, - 0x26ac5ab0, - 0x6ae1ab1, - 0x6aedab8, - 0x6b2dabb, - 0x6b31acb, - 0x6b55acc, - 0x6b59ad5, - 0x6cc1ad6, - 0x26cc5b30, - 0x26ccdb31, - 0x26cd1b33, - 0x26cd5b34, - 0x6cddb35, - 0x6db9b37, - 0x6dbdb6e, - 0x6de9b6f, - 0x6dedb7a, - 0x6e0db7b, - 0x6e19b83, - 0x6e39b86, - 0x6e71b8e, - 0x7109b9c, - 0x71c5c42, - 0x71d9c71, - 0x720dc76, - 0x723dc83, - 0x7259c8f, - 0x727dc96, - 0x7299c9f, - 0x72b5ca6, - 0x72d9cad, - 0x72e9cb6, - 0x72edcba, - 0x7321cbb, - 0x733dcc8, - 0x7359ccf, - 0x737dcd6, - 0x739dcdf, - 0x73b1ce7, - 0x73c5cec, - 0x73c9cf1, - 0x73e9cf2, - 0x748dcfa, - 0x74a9d23, - 0x74c9d2a, - 0x74cdd32, - 0x74d1d33, - 0x74d5d34, - 0x74e9d35, - 0x7509d3a, - 0x7515d42, - 0x7519d45, - 0x7549d46, - 0x75c9d52, - 0x75ddd72, - 0x75e1d77, - 0x75f9d78, - 0x75fdd7e, - 0x7609d7f, - 0x760dd82, - 0x7629d83, - 0x7665d8a, - 0x7669d99, - 0x7689d9a, - 0x76d9da2, - 0x76f1db6, - 0x7745dbc, - 0x7749dd1, - 0x774ddd2, - 0x7751dd3, - 0x7795dd4, - 0x77a5de5, - 0x77ddde9, - 0x780ddf7, - 0x7955e03, - 0x7979e55, - 0x79a5e5e, - 0x79b1e69, - 0x79b9e6c, - 0x7ac9e6e, - 0x7ad5eb2, - 0x7ae1eb5, - 0x7aedeb8, - 0x7af9ebb, - 0x7b05ebe, - 0x7b11ec1, - 0x7b1dec4, - 0x7b29ec7, - 0x7b35eca, - 0x7b41ecd, - 0x7b4ded0, - 0x7b59ed3, - 0x7b65ed6, - 0x7b6ded9, - 0x7b79edb, - 0x7b85ede, - 0x7b91ee1, - 0x7b9dee4, - 0x7ba9ee7, - 0x7bb5eea, - 0x7bc1eed, - 0x7bcdef0, - 0x7bd9ef3, - 0x7be5ef6, - 0x7bf1ef9, - 0x7bfdefc, - 0x7c09eff, - 0x7c15f02, - 0x7c21f05, - 0x7c2df08, - 0x7c39f0b, - 0x7c41f0e, - 0x7c4df10, - 0x7c59f13, - 0x7c65f16, - 0x7c71f19, - 0x7c7df1c, - 0x7c89f1f, - 0x7c95f22, - 0x7ca1f25, - 0x7cadf28, - 0x7cb9f2b, - 0x7cc5f2e, - 0x7cd1f31, - 0x7cddf34, - 0x7ce5f37, - 0x7cf1f39, - 0x7cfdf3c, - 0x7d09f3f, - 0x7d15f42, - 0x7d21f45, - 0x7d2df48, - 0x7d39f4b, - 0x7d45f4e, - 0x7d49f51, - 0x7d55f52, - 0x7d6df55, - 0x7d71f5b, - 0x7d81f5c, - 0x7d99f60, - 0x7dddf66, - 0x7df1f77, - 0x7e25f7c, - 0x7e35f89, - 0x7e51f8d, - 0x7e69f94, - 0x7e6df9a, - 0x27eb1f9b, - 0x7eb5fac, - 0x7ee1fad, - 0x7ee5fb8, + 0x2d44b4b, + 0x2d48b51, + 0x2d60b52, + 0x2d7cb58, + 0x2d9cb5f, + 0x2db4b67, + 0x2e14b6d, + 0x2e30b85, + 0x2e38b8c, + 0x2e3cb8e, + 0x2e50b8f, + 0x2e94b94, + 0x2f14ba5, + 0x2f40bc5, + 0x2f44bd0, + 0x2f4cbd1, + 0x2f6cbd3, + 0x2f70bdb, + 0x2f94bdc, + 0x2f9cbe5, + 0x2fd8be7, + 0x301cbf6, + 0x3020c07, + 0x3094c08, + 0x3098c25, + 0x2309cc26, + 0x230a0c27, + 0x230a4c28, + 0x230b4c29, + 0x230b8c2d, + 0x230bcc2e, + 0x230c0c2f, + 0x230c4c30, + 0x30dcc31, + 0x3100c37, + 0x3120c40, + 0x36e4c48, + 0x36f0db9, + 0x3710dbc, + 0x38ccdc4, + 0x399ce33, + 0x3a0ce67, + 0x3a64e83, + 0x3b4ce99, + 0x3ba4ed3, + 0x3be0ee9, + 0x3cdcef8, + 0x3da8f37, + 0x3e40f6a, + 0x3ed0f90, + 0x3f34fb4, + 0x416cfcd, + 0x422505b, + 0x42f1089, + 0x433d0bc, + 0x43c50cf, + 0x44010f1, + 0x4451100, + 0x44c9114, + 0x644cd132, + 0x644d1133, + 0x644d5134, + 0x4551135, + 0x45ad154, + 0x462916b, + 0x46a118a, + 0x47211a8, + 0x478d1c8, + 0x48b91e3, + 0x491122e, + 0x64915244, + 0x49ad245, + 0x4a3526b, + 0x4a8128d, + 0x4ae92a0, + 0x4b912ba, + 0x4c592e4, + 0x4cc1316, + 0x4dd5330, + 0x64dd9375, + 0x64ddd376, + 0x4e39377, + 0x4e9538e, + 0x4f253a5, + 0x4fa13c9, + 0x4fe53e8, + 0x50c93f9, + 0x50fd432, + 0x515d43f, + 0x51d1457, + 0x5259474, + 0x5299496, + 0x53094a6, + 0x6530d4c2, + 0x53314c3, + 0x53354cc, + 0x534d4cd, + 0x53694d3, + 0x53ad4da, + 0x53bd4eb, + 0x53d54ef, + 0x544d4f5, + 0x5455513, + 0x5469515, + 0x548551a, + 0x54b1521, + 0x54b552c, + 0x54bd52d, + 0x54d152f, + 0x54ed534, + 0x54f953b, + 0x550153e, + 0x553d540, + 0x555154f, + 0x5559554, + 0x5565556, + 0x556d559, + 0x559155b, + 0x55b5564, + 0x55cd56d, + 0x55d1573, + 0x55d9574, + 0x55dd576, + 0x5645577, + 0x5649591, + 0x566d592, + 0x569159b, + 0x56ad5a4, + 0x56bd5ab, + 0x56d15af, + 0x56d55b4, + 0x56dd5b5, + 0x56f15b7, + 0x57015bc, + 0x57055c0, + 0x57215c1, + 0x5fb15c8, + 0x5fe97ec, + 0x60157fa, + 0x6031805, + 0x605180c, + 0x6071814, + 0x60b581c, + 0x60bd82d, + 0x260c182f, + 0x260c5830, + 0x60cd831, + 0x6245833, + 0x26249891, + 0x26259892, + 0x26261896, + 0x2626d898, + 0x627189b, + 0x627589c, + 0x629d89d, + 0x62c58a7, + 0x62c98b1, + 0x63018b2, + 0x63218c0, + 0x6e798c8, + 0x6e7db9e, + 0x6e81b9f, + 0x26e85ba0, + 0x6e89ba1, + 0x26e8dba2, + 0x6e91ba3, + 0x26e9dba4, + 0x6ea1ba7, + 0x6ea5ba8, + 0x26ea9ba9, + 0x6eadbaa, + 0x26eb5bab, + 0x6eb9bad, + 0x6ebdbae, + 0x26ecdbaf, + 0x6ed1bb3, + 0x6ed5bb4, + 0x6ed9bb5, + 0x6eddbb6, + 0x26ee1bb7, + 0x6ee5bb8, + 0x6ee9bb9, + 0x6eedbba, + 0x6ef1bbb, + 0x26ef9bbc, + 0x6efdbbe, + 0x6f01bbf, + 0x6f05bc0, + 0x26f09bc1, + 0x6f0dbc2, + 0x26f15bc3, + 0x26f19bc5, + 0x6f35bc6, + 0x6f45bcd, + 0x6f89bd1, + 0x6f8dbe2, + 0x6fb1be3, + 0x6fb5bec, + 0x6fb9bed, + 0x7145bee, + 0x27149c51, + 0x27151c52, + 0x27155c54, + 0x27159c55, + 0x7161c56, + 0x723dc58, + 0x27249c8f, + 0x2724dc92, + 0x27251c93, + 0x27255c94, + 0x7259c95, + 0x7285c96, + 0x7289ca1, + 0x72adca2, + 0x72b9cab, + 0x72d9cae, + 0x72ddcb6, + 0x7315cb7, + 0x75adcc5, + 0x7669d6b, + 0x767dd9a, + 0x76b1d9f, + 0x76e1dac, + 0x76fddb8, + 0x7725dbf, + 0x7745dc9, + 0x7761dd1, + 0x7789dd8, + 0x7799de2, + 0x779dde6, + 0x77a1de7, + 0x77d5de8, + 0x77e1df5, + 0x7801df8, + 0x7879e00, + 0x2787de1e, + 0x78a1e1f, + 0x78c1e28, + 0x78d5e30, + 0x78e9e35, + 0x78ede3a, + 0x790de3b, + 0x79b1e43, + 0x79cde6c, + 0x79f1e73, + 0x79f9e7c, + 0x7a05e7e, + 0x7a0de81, + 0x7a21e83, + 0x7a41e88, + 0x7a4de90, + 0x7a59e93, + 0x7a89e96, + 0x7b5dea2, + 0x7b61ed7, + 0x7b75ed8, + 0x7b7dedd, + 0x7b95edf, + 0x7b99ee5, + 0x7ba5ee6, + 0x7ba9ee9, + 0x7bc5eea, + 0x7c01ef1, + 0x7c05f00, + 0x7c25f01, + 0x7c75f09, + 0x7c91f1d, + 0x7ce5f24, + 0x7ce9f39, + 0x7cedf3a, + 0x7cf1f3b, + 0x7d35f3c, + 0x7d45f4d, + 0x7d85f51, + 0x7d89f61, + 0x7db9f62, + 0x7f01f6e, + 0x7f29fc0, + 0x7f55fca, + 0x7f65fd5, + 0x7f6dfd9, + 0x807dfdb, + 0x808a01f, + 0x8096022, + 0x80a2025, + 0x80ae028, + 0x80ba02b, + 0x80c602e, + 0x80d2031, + 0x80de034, + 0x80ea037, + 0x80f603a, + 0x810203d, + 0x810e040, + 0x811a043, + 0x8122046, + 0x812e048, + 0x813a04b, + 0x814604e, + 0x8152051, + 0x815e054, + 0x816a057, + 0x817605a, + 0x818205d, + 0x818e060, + 0x819a063, + 0x81a6066, + 0x81d2069, + 0x81de074, + 0x81ea077, + 0x81f607a, + 0x820207d, + 0x820e080, + 0x8216083, + 0x8222085, + 0x822e088, + 0x823a08b, + 0x824608e, + 0x8252091, + 0x825e094, + 0x826a097, + 0x827609a, + 0x828209d, + 0x828e0a0, + 0x829a0a3, + 0x82a60a6, + 0x82b20a9, + 0x82ba0ac, + 0x82c60ae, + 0x82d20b1, + 0x82de0b4, + 0x82ea0b7, + 0x82f60ba, + 0x83020bd, + 0x830e0c0, + 0x831a0c3, + 0x831e0c6, + 0x832a0c7, + 0x83460ca, + 0x834a0d1, + 0x835a0d2, + 0x83760d6, + 0x83ba0dd, + 0x83be0ee, + 0x83d20ef, + 0x84060f4, + 0x8416101, + 0x8436105, + 0x844e10d, + 0x8466113, + 0x846e119, + 0x284b211b, + 0x84b612c, + 0x84e212d, + 0x84ea138, + 0x84fe13a, } -// max children 466 (capacity 511) -// max text offset 28023 (capacity 32767) +// max children 500 (capacity 1023) +// max text offset 29102 (capacity 32767) // max text length 36 (capacity 63) -// max hi 8121 (capacity 16383) -// max lo 8120 (capacity 16383) +// max hi 8511 (capacity 16383) +// max lo 8506 (capacity 16383) diff --git a/vendor/golang.org/x/net/publicsuffix/table_test.go b/vendor/golang.org/x/net/publicsuffix/table_test.go index f60c80e..228010c 100644 --- a/vendor/golang.org/x/net/publicsuffix/table_test.go +++ b/vendor/golang.org/x/net/publicsuffix/table_test.go @@ -148,6 +148,7 @@ var rules = [...]string{ "gov.ar", "int.ar", "mil.ar", + "musica.ar", "net.ar", "org.ar", "tur.ar", @@ -301,30 +302,79 @@ var rules = [...]string{ "bo", "com.bo", "edu.bo", - "gov.bo", "gob.bo", "int.bo", "org.bo", "net.bo", "mil.bo", "tv.bo", + "web.bo", + "academia.bo", + "agro.bo", + "arte.bo", + "blog.bo", + "bolivia.bo", + "ciencia.bo", + "cooperativa.bo", + "democracia.bo", + "deporte.bo", + "ecologia.bo", + "economia.bo", + "empresa.bo", + "indigena.bo", + "industria.bo", + "info.bo", + "medicina.bo", + "movimiento.bo", + "musica.bo", + "natural.bo", + "nombre.bo", + "noticias.bo", + "patria.bo", + "politica.bo", + "profesional.bo", + "plurinacional.bo", + "pueblo.bo", + "revista.bo", + "salud.bo", + "tecnologia.bo", + "tksat.bo", + "transporte.bo", + "wiki.bo", "br", + "9guacu.br", + "abc.br", "adm.br", "adv.br", "agr.br", + "aju.br", "am.br", + "anani.br", + "aparecida.br", "arq.br", "art.br", "ato.br", "b.br", + "belem.br", + "bhz.br", "bio.br", "blog.br", "bmd.br", + "boavista.br", + "bsb.br", + "campinagrande.br", + "campinas.br", + "caxias.br", "cim.br", "cng.br", "cnt.br", "com.br", + "contagem.br", "coop.br", + "cri.br", + "cuiaba.br", + "curitiba.br", + "def.br", "ecn.br", "eco.br", "edu.br", @@ -334,48 +384,114 @@ var rules = [...]string{ "etc.br", "eti.br", "far.br", + "feira.br", "flog.br", + "floripa.br", "fm.br", "fnd.br", + "fortal.br", "fot.br", + "foz.br", "fst.br", "g12.br", "ggf.br", + "goiania.br", "gov.br", + "ac.gov.br", + "al.gov.br", + "am.gov.br", + "ap.gov.br", + "ba.gov.br", + "ce.gov.br", + "df.gov.br", + "es.gov.br", + "go.gov.br", + "ma.gov.br", + "mg.gov.br", + "ms.gov.br", + "mt.gov.br", + "pa.gov.br", + "pb.gov.br", + "pe.gov.br", + "pi.gov.br", + "pr.gov.br", + "rj.gov.br", + "rn.gov.br", + "ro.gov.br", + "rr.gov.br", + "rs.gov.br", + "sc.gov.br", + "se.gov.br", + "sp.gov.br", + "to.gov.br", + "gru.br", "imb.br", "ind.br", "inf.br", + "jab.br", + "jampa.br", + "jdf.br", + "joinville.br", "jor.br", "jus.br", "leg.br", "lel.br", + "londrina.br", + "macapa.br", + "maceio.br", + "manaus.br", + "maringa.br", "mat.br", "med.br", "mil.br", + "morena.br", "mp.br", "mus.br", + "natal.br", "net.br", + "niteroi.br", "*.nom.br", "not.br", "ntr.br", "odo.br", "org.br", + "osasco.br", + "palmas.br", + "poa.br", "ppg.br", "pro.br", "psc.br", "psi.br", + "pvh.br", "qsl.br", "radio.br", "rec.br", + "recife.br", + "ribeirao.br", + "rio.br", + "riobranco.br", + "riopreto.br", + "salvador.br", + "sampa.br", + "santamaria.br", + "santoandre.br", + "saobernardo.br", + "saogonca.br", + "sjc.br", "slg.br", + "slz.br", + "sorocaba.br", "srv.br", "taxi.br", "teo.br", + "the.br", "tmp.br", "trd.br", "tur.br", "tv.br", + "udi.br", "vet.br", + "vix.br", "vlog.br", "wiki.br", "zlg.br", @@ -3078,7 +3194,16 @@ var rules = [...]string{ "uenohara.yamanashi.jp", "yamanakako.yamanashi.jp", "yamanashi.yamanashi.jp", - "*.ke", + "ke", + "ac.ke", + "co.ke", + "go.ke", + "info.ke", + "me.ke", + "mobi.ke", + "ne.ke", + "or.ke", + "sc.ke", "kg", "org.kg", "net.kg", @@ -3943,6 +4068,7 @@ var rules = [...]string{ "name", "nc", "asso.nc", + "nom.nc", "ne", "net", "nf", @@ -5262,38 +5388,6 @@ var rules = [...]string{ "saotome.st", "store.st", "su", - "adygeya.su", - "arkhangelsk.su", - "balashov.su", - "bashkiria.su", - "bryansk.su", - "dagestan.su", - "grozny.su", - "ivanovo.su", - "kalmykia.su", - "kaluga.su", - "karelia.su", - "khakassia.su", - "krasnodar.su", - "kurgan.su", - "lenug.su", - "mordovia.su", - "msk.su", - "murmansk.su", - "nalchik.su", - "nov.su", - "obninsk.su", - "penza.su", - "pokrovsk.su", - "sochi.su", - "spb.su", - "togliatti.su", - "troitsk.su", - "tula.su", - "tuva.su", - "vladikavkaz.su", - "vladimir.su", - "vologda.su", "sv", "com.sv", "edu.sv", @@ -5773,6 +5867,14 @@ var rules = [...]string{ "pvt.k12.ma.us", "chtr.k12.ma.us", "paroch.k12.ma.us", + "ann-arbor.mi.us", + "cog.mi.us", + "dst.mi.us", + "eaton.mi.us", + "gen.mi.us", + "mus.mi.us", + "tec.mi.us", + "washtenaw.mi.us", "uy", "com.uy", "edu.uy", @@ -5847,6 +5949,7 @@ var rules = [...]string{ "xn--mgbaam7a8h", "xn--y9a3aq", "xn--54b7fta0cc", + "xn--90ae", "xn--90ais", "xn--fiqs8s", "xn--fiqz9s", @@ -5856,6 +5959,13 @@ var rules = [...]string{ "xn--node", "xn--qxam", "xn--j6w193g", + "xn--2scrj9c", + "xn--3hcrj9c", + "xn--45br5cyl", + "xn--h2breg3eve", + "xn--h2brj9c8c", + "xn--mgbgu82a", + "xn--rvc1e0am3e", "xn--h2brj9c", "xn--mgbbh1a71e", "xn--fpcrj9c3d", @@ -5900,6 +6010,12 @@ var rules = [...]string{ "xn--ogbpf8fl", "xn--mgbtf8fl", "xn--o3cw4h", + "xn--12c1fe0br.xn--o3cw4h", + "xn--12co0c3b4eva.xn--o3cw4h", + "xn--h3cuzk1di.xn--o3cw4h", + "xn--o3cyx2a.xn--o3cw4h", + "xn--m3ch0j3a.xn--o3cw4h", + "xn--12cfi8ixb8l.xn--o3cw4h", "xn--pgbs0dh", "xn--kpry57d", "xn--kprw13d", @@ -5937,7 +6053,12 @@ var rules = [...]string{ "net.zm", "org.zm", "sch.zm", - "*.zw", + "zw", + "ac.zw", + "co.zw", + "gov.zw", + "mil.zw", + "org.zw", "aaa", "aarp", "abarth", @@ -6136,7 +6257,6 @@ var rules = [...]string{ "chat", "cheap", "chintai", - "chloe", "christmas", "chrome", "chrysler", @@ -6248,7 +6368,6 @@ var rules = [...]string{ "durban", "dvag", "dvr", - "dwg", "earth", "eat", "eco", @@ -6428,7 +6547,6 @@ var rules = [...]string{ "house", "how", "hsbc", - "htc", "hughes", "hyatt", "hyundai", @@ -6438,7 +6556,6 @@ var rules = [...]string{ "icu", "ieee", "ifm", - "iinet", "ikano", "imamat", "imdb", @@ -6581,8 +6698,6 @@ var rules = [...]string{ "maserati", "mattel", "mba", - "mcd", - "mcdonalds", "mckinsey", "med", "media", @@ -6613,7 +6728,6 @@ var rules = [...]string{ "monash", "money", "monster", - "montblanc", "mopar", "mormon", "mortgage", @@ -6628,7 +6742,6 @@ var rules = [...]string{ "mtpc", "mtr", "mutual", - "mutuelle", "nab", "nadex", "nagoya", @@ -6686,14 +6799,12 @@ var rules = [...]string{ "oracle", "orange", "organic", - "orientexpress", "origins", "osaka", "otsuka", "ott", "ovh", "page", - "pamperedchef", "panasonic", "panerai", "paris", @@ -6795,6 +6906,7 @@ var rules = [...]string{ "rogers", "room", "rsvp", + "rugby", "ruhr", "run", "rwe", @@ -6937,7 +7049,6 @@ var rules = [...]string{ "thd", "theater", "theatre", - "theguardian", "tiaa", "tickets", "tienda", @@ -7062,7 +7173,6 @@ var rules = [...]string{ "xn--42c2d9a", "xn--45q11c", "xn--4gbrim", - "xn--4gq48lf9j", "xn--55qw42g", "xn--55qx5d", "xn--5su34j936bgsg", @@ -7165,20 +7275,42 @@ var rules = [...]string{ "zippo", "zone", "zuerich", + "cc.ua", + "inf.ua", + "ltd.ua", + "1password.ca", + "1password.com", + "1password.eu", "beep.pl", "*.compute.estate", "*.alces.network", - "*.alwaysdata.net", + "alwaysdata.net", "cloudfront.net", "*.compute.amazonaws.com", "*.compute-1.amazonaws.com", "*.compute.amazonaws.com.cn", "us-east-1.amazonaws.com", - "elasticbeanstalk.cn-north-1.amazonaws.com.cn", - "*.elasticbeanstalk.com", + "cn-north-1.eb.amazonaws.com.cn", + "elasticbeanstalk.com", + "ap-northeast-1.elasticbeanstalk.com", + "ap-northeast-2.elasticbeanstalk.com", + "ap-south-1.elasticbeanstalk.com", + "ap-southeast-1.elasticbeanstalk.com", + "ap-southeast-2.elasticbeanstalk.com", + "ca-central-1.elasticbeanstalk.com", + "eu-central-1.elasticbeanstalk.com", + "eu-west-1.elasticbeanstalk.com", + "eu-west-2.elasticbeanstalk.com", + "eu-west-3.elasticbeanstalk.com", + "sa-east-1.elasticbeanstalk.com", + "us-east-1.elasticbeanstalk.com", + "us-east-2.elasticbeanstalk.com", + "us-gov-west-1.elasticbeanstalk.com", + "us-west-1.elasticbeanstalk.com", + "us-west-2.elasticbeanstalk.com", "*.elb.amazonaws.com", "*.elb.amazonaws.com.cn", - "*.s3.amazonaws.com", + "s3.amazonaws.com", "s3-ap-northeast-1.amazonaws.com", "s3-ap-northeast-2.amazonaws.com", "s3-ap-south-1.amazonaws.com", @@ -7187,6 +7319,8 @@ var rules = [...]string{ "s3-ca-central-1.amazonaws.com", "s3-eu-central-1.amazonaws.com", "s3-eu-west-1.amazonaws.com", + "s3-eu-west-2.amazonaws.com", + "s3-eu-west-3.amazonaws.com", "s3-external-1.amazonaws.com", "s3-fips-us-gov-west-1.amazonaws.com", "s3-sa-east-1.amazonaws.com", @@ -7199,6 +7333,8 @@ var rules = [...]string{ "s3.cn-north-1.amazonaws.com.cn", "s3.ca-central-1.amazonaws.com", "s3.eu-central-1.amazonaws.com", + "s3.eu-west-2.amazonaws.com", + "s3.eu-west-3.amazonaws.com", "s3.us-east-2.amazonaws.com", "s3.dualstack.ap-northeast-1.amazonaws.com", "s3.dualstack.ap-northeast-2.amazonaws.com", @@ -7208,6 +7344,8 @@ var rules = [...]string{ "s3.dualstack.ca-central-1.amazonaws.com", "s3.dualstack.eu-central-1.amazonaws.com", "s3.dualstack.eu-west-1.amazonaws.com", + "s3.dualstack.eu-west-2.amazonaws.com", + "s3.dualstack.eu-west-3.amazonaws.com", "s3.dualstack.sa-east-1.amazonaws.com", "s3.dualstack.us-east-1.amazonaws.com", "s3.dualstack.us-east-2.amazonaws.com", @@ -7223,6 +7361,8 @@ var rules = [...]string{ "s3-website.ap-south-1.amazonaws.com", "s3-website.ca-central-1.amazonaws.com", "s3-website.eu-central-1.amazonaws.com", + "s3-website.eu-west-2.amazonaws.com", + "s3-website.eu-west-3.amazonaws.com", "s3-website.us-east-2.amazonaws.com", "t3l3p0rt.net", "tele.amune.org", @@ -7234,10 +7374,19 @@ var rules = [...]string{ "sweetpepper.org", "myasustor.com", "myfritz.net", + "*.awdev.ca", + "*.advisor.ws", "backplaneapp.io", "betainabox.com", "bnr.la", + "boomla.net", "boxfuse.io", + "square7.ch", + "bplaced.com", + "bplaced.de", + "square7.de", + "bplaced.net", + "square7.net", "browsersafetymark.io", "mycd.eu", "ae.org", @@ -7277,6 +7426,12 @@ var rules = [...]string{ "certmgr.org", "xenapponazure.com", "virtueeldomein.nl", + "c66.me", + "jdevcloud.com", + "wpdevcloud.com", + "cloudaccess.host", + "freesite.host", + "cloudaccess.net", "cloudcontrolled.com", "cloudcontrolapp.com", "co.ca", @@ -7299,7 +7454,8 @@ var rules = [...]string{ "cloudns.us", "co.nl", "co.no", - "*.platform.sh", + "webhosting.be", + "hosting-cluster.nl", "dyn.cosidns.de", "dynamisches-dns.de", "dnsupdater.de", @@ -7315,13 +7471,16 @@ var rules = [...]string{ "cyon.link", "cyon.site", "daplie.me", + "localhost.daplie.me", "biz.dk", "co.dk", "firm.dk", "reg.dk", "store.dk", + "debian.net", "dedyn.io", "dnshome.de", + "drayddns.com", "dreamhosters.com", "mydrobo.com", "drud.io", @@ -7617,8 +7776,28 @@ var rules = [...]string{ "dyn.home-webserver.de", "myhome-server.de", "ddnss.org", + "definima.net", + "definima.io", + "ddnsfree.com", + "ddnsgeek.com", + "giize.com", + "gleeze.com", + "kozow.com", + "loseyourip.com", + "ooguy.com", + "theworkpc.com", + "casacam.net", + "dynu.net", + "accesscam.org", + "camdvr.org", + "freeddns.org", + "mywire.org", + "webredirect.org", + "myddns.rocks", + "blogsite.xyz", "dynv6.net", "e4.cz", + "mytuleap.com", "enonic.io", "customer.enonic.io", "eu.org", @@ -7679,27 +7858,117 @@ var rules = [...]string{ "us.eu.org", "eu-1.evennode.com", "eu-2.evennode.com", + "eu-3.evennode.com", + "eu-4.evennode.com", "us-1.evennode.com", "us-2.evennode.com", + "us-3.evennode.com", + "us-4.evennode.com", + "twmail.cc", + "twmail.net", + "twmail.org", + "mymailer.com.tw", + "url.tw", "apps.fbsbx.com", + "ru.net", + "adygeya.ru", + "bashkiria.ru", + "bir.ru", + "cbg.ru", + "com.ru", + "dagestan.ru", + "grozny.ru", + "kalmykia.ru", + "kustanai.ru", + "marine.ru", + "mordovia.ru", + "msk.ru", + "mytis.ru", + "nalchik.ru", + "nov.ru", + "pyatigorsk.ru", + "spb.ru", + "vladikavkaz.ru", + "vladimir.ru", + "abkhazia.su", + "adygeya.su", + "aktyubinsk.su", + "arkhangelsk.su", + "armenia.su", + "ashgabad.su", + "azerbaijan.su", + "balashov.su", + "bashkiria.su", + "bryansk.su", + "bukhara.su", + "chimkent.su", + "dagestan.su", + "east-kazakhstan.su", + "exnet.su", + "georgia.su", + "grozny.su", + "ivanovo.su", + "jambyl.su", + "kalmykia.su", + "kaluga.su", + "karacol.su", + "karaganda.su", + "karelia.su", + "khakassia.su", + "krasnodar.su", + "kurgan.su", + "kustanai.su", + "lenug.su", + "mangyshlak.su", + "mordovia.su", + "msk.su", + "murmansk.su", + "nalchik.su", + "navoi.su", + "north-kazakhstan.su", + "nov.su", + "obninsk.su", + "penza.su", + "pokrovsk.su", + "sochi.su", + "spb.su", + "tashkent.su", + "termez.su", + "togliatti.su", + "troitsk.su", + "tselinograd.su", + "tula.su", + "tuva.su", + "vladikavkaz.su", + "vladimir.su", + "vologda.su", + "channelsdvr.net", + "fastlylb.net", + "map.fastlylb.net", + "freetls.fastly.net", "map.fastly.net", "a.prod.fastly.net", "global.prod.fastly.net", "a.ssl.fastly.net", "b.ssl.fastly.net", "global.ssl.fastly.net", - "fastlylb.net", - "map.fastlylb.net", "fhapp.xyz", + "fedorainfracloud.org", + "fedorapeople.org", + "cloud.fedoraproject.org", + "app.os.fedoraproject.org", + "app.os.stg.fedoraproject.org", + "filegear.me", "firebaseapp.com", "flynnhub.com", + "flynnhosting.net", "freebox-os.com", "freeboxos.com", "fbx-os.fr", "fbxos.fr", "freebox-os.fr", "freeboxos.fr", - "myfusion.cloud", + "*.futurecms.at", "futurehosting.at", "futuremailing.at", "*.ex.ortsinfo.at", @@ -7708,11 +7977,6 @@ var rules = [...]string{ "service.gov.uk", "github.io", "githubusercontent.com", - "githubcloud.com", - "*.api.githubcloud.com", - "*.ext.githubcloud.com", - "gist.githubcloud.com", - "*.githubcloudusercontent.com", "gitlab.io", "homeoffice.gov.uk", "ro.im", @@ -7795,6 +8059,7 @@ var rules = [...]string{ "blogspot.ug", "blogspot.vn", "cloudfunctions.net", + "cloud.goog", "codespot.com", "googleapis.com", "googlecode.com", @@ -7807,9 +8072,11 @@ var rules = [...]string{ "hepforge.org", "herokuapp.com", "herokussl.com", + "moonscale.net", "iki.fi", "biz.at", "info.at", + "info.cx", "ac.leg.br", "al.leg.br", "am.leg.br", @@ -7837,6 +8104,8 @@ var rules = [...]string{ "se.leg.br", "sp.leg.br", "to.leg.br", + "pixolino.com", + "ipifony.net", "*.triton.zone", "*.cns.joyent.com", "js.org", @@ -7844,7 +8113,22 @@ var rules = [...]string{ "knightpoint.systems", "co.krd", "edu.krd", + "git-repos.de", + "lcube-server.de", + "svn-repos.de", + "we.bs", + "barsy.bg", + "barsyonline.com", + "barsy.de", + "barsy.eu", + "barsy.in", + "barsy.net", + "barsy.online", + "barsy.support", "*.magentosite.cloud", + "hb.cldmail.ru", + "cloud.metacentrum.cz", + "custom.metacentrum.cz", "meteorapp.com", "eu.meteorapp.com", "co.pl", @@ -7852,8 +8136,14 @@ var rules = [...]string{ "azure-mobile.net", "cloudapp.net", "bmoattachments.org", + "net.ru", + "org.ru", + "pp.ru", + "bitballoon.com", + "netlify.com", "4u.com", "ngrok.io", + "nh-serv.co.uk", "nfshost.com", "nsupdate.info", "nerdpol.ovh", @@ -7942,7 +8232,48 @@ var rules = [...]string{ "sytes.net", "webhop.me", "zapto.org", + "stage.nodeart.io", + "nodum.co", + "nodum.io", "nyc.mn", + "nom.ae", + "nom.ai", + "nom.al", + "nym.by", + "nym.bz", + "nom.cl", + "nom.gd", + "nom.gl", + "nym.gr", + "nom.gt", + "nom.hn", + "nom.im", + "nym.kz", + "nym.la", + "nom.li", + "nym.li", + "nym.lt", + "nym.lu", + "nym.me", + "nom.mk", + "nym.mx", + "nom.nu", + "nym.nz", + "nym.pe", + "nym.pt", + "nom.pw", + "nom.qa", + "nom.rs", + "nom.si", + "nym.sk", + "nym.su", + "nym.sx", + "nym.tw", + "nom.ug", + "nom.uy", + "nom.vc", + "nom.vg", + "cya.gg", "nid.io", "opencraft.hosting", "operaunite.com", @@ -7961,17 +8292,25 @@ var rules = [...]string{ "gotpantheon.com", "mypep.link", "on-web.fr", + "*.platform.sh", + "*.platformsh.site", "xen.prgmr.com", "priv.at", "protonet.io", "chirurgiens-dentistes-en-france.fr", + "byen.site", "qa2.com", "dev-myqnapcloud.com", "alpha-myqnapcloud.com", "myqnapcloud.com", + "*.quipelements.com", + "vapor.cloud", + "vaporcloud.io", "rackmaze.com", "rackmaze.net", "rhcloud.com", + "resindevice.io", + "devices.resinstaging.io", "hzc.io", "wellbeingzone.eu", "ptplus.fit", @@ -7979,6 +8318,7 @@ var rules = [...]string{ "sandcats.io", "logoip.de", "logoip.com", + "scrysec.com", "firewall-gateway.com", "firewall-gateway.de", "my-gateway.de", @@ -7989,6 +8329,8 @@ var rules = [...]string{ "my-firewall.org", "myfirewall.org", "spdns.org", + "*.s5y.io", + "*.sensiosite.cloud", "biz.ua", "co.ua", "pp.ua", @@ -8009,6 +8351,8 @@ var rules = [...]string{ "*.stolos.io", "spacekit.io", "stackspace.space", + "storj.farm", + "temp-dns.com", "diskstation.me", "dscloud.biz", "dscloud.me", @@ -8022,14 +8366,38 @@ var rules = [...]string{ "i234.me", "myds.me", "synology.me", + "vpnplus.to", "taifun-dns.de", "gda.pl", "gdansk.pl", "gdynia.pl", "med.pl", "sopot.pl", + "cust.dev.thingdust.io", + "cust.disrec.thingdust.io", + "cust.prod.thingdust.io", + "cust.testing.thingdust.io", "bloxcms.com", "townnews-staging.com", + "12hp.at", + "2ix.at", + "4lima.at", + "lima-city.at", + "12hp.ch", + "2ix.ch", + "4lima.ch", + "lima-city.ch", + "trafficplex.cloud", + "de.cool", + "12hp.de", + "2ix.de", + "4lima.de", + "lima-city.de", + "1337.pictures", + "clan.rip", + "lima-city.rocks", + "webspace.rocks", + "lima.zone", "*.transurl.be", "*.transurl.eu", "*.transurl.nl", @@ -8047,14 +8415,22 @@ var rules = [...]string{ "syno-ds.de", "synology-diskstation.de", "synology-ds.de", + "uber.space", "hk.com", "hk.org", "ltd.hk", "inc.hk", "lib.de.us", "router.management", + "v-info.info", + "wedeploy.io", + "wedeploy.me", + "wedeploy.sh", "remotewd.com", "wmflabs.org", + "cistron.nl", + "demon.nl", + "xs4all.space", "yolasite.com", "ybo.faith", "yombo.me", @@ -8066,9 +8442,6 @@ var rules = [...]string{ "za.net", "za.org", "now.sh", - "cc.ua", - "inf.ua", - "ltd.ua", } var nodeLabels = [...]string{ @@ -8317,7 +8690,6 @@ var nodeLabels = [...]string{ "chat", "cheap", "chintai", - "chloe", "christmas", "chrome", "chrysler", @@ -8449,7 +8821,6 @@ var nodeLabels = [...]string{ "durban", "dvag", "dvr", - "dwg", "dz", "earth", "eat", @@ -8669,7 +9040,6 @@ var nodeLabels = [...]string{ "hr", "hsbc", "ht", - "htc", "hu", "hughes", "hyatt", @@ -8682,7 +9052,6 @@ var nodeLabels = [...]string{ "ie", "ieee", "ifm", - "iinet", "ikano", "il", "im", @@ -8864,8 +9233,6 @@ var nodeLabels = [...]string{ "mattel", "mba", "mc", - "mcd", - "mcdonalds", "mckinsey", "md", "me", @@ -8907,7 +9274,6 @@ var nodeLabels = [...]string{ "monash", "money", "monster", - "montblanc", "mopar", "mormon", "mortgage", @@ -8929,7 +9295,6 @@ var nodeLabels = [...]string{ "mu", "museum", "mutual", - "mutuelle", "mv", "mw", "mx", @@ -9009,7 +9374,6 @@ var nodeLabels = [...]string{ "orange", "org", "organic", - "orientexpress", "origins", "osaka", "otsuka", @@ -9017,7 +9381,6 @@ var nodeLabels = [...]string{ "ovh", "pa", "page", - "pamperedchef", "panasonic", "panerai", "paris", @@ -9139,6 +9502,7 @@ var nodeLabels = [...]string{ "rs", "rsvp", "ru", + "rugby", "ruhr", "run", "rw", @@ -9309,7 +9673,6 @@ var nodeLabels = [...]string{ "thd", "theater", "theatre", - "theguardian", "tiaa", "tickets", "tienda", @@ -9453,17 +9816,19 @@ var nodeLabels = [...]string{ "xn--11b4c3d", "xn--1ck2e1b", "xn--1qqw23a", + "xn--2scrj9c", "xn--30rr7y", "xn--3bst00m", "xn--3ds443g", "xn--3e0b707e", + "xn--3hcrj9c", "xn--3oq18vl8pn36a", "xn--3pxu8k", "xn--42c2d9a", + "xn--45br5cyl", "xn--45brj9c", "xn--45q11c", "xn--4gbrim", - "xn--4gq48lf9j", "xn--54b7fta0cc", "xn--55qw42g", "xn--55qx5d", @@ -9478,6 +9843,7 @@ var nodeLabels = [...]string{ "xn--80aswg", "xn--8y0a063a", "xn--90a3ac", + "xn--90ae", "xn--90ais", "xn--9dbq2a", "xn--9et52u", @@ -9513,7 +9879,9 @@ var nodeLabels = [...]string{ "xn--gckr3f0f", "xn--gecrj9c", "xn--gk3at1e", + "xn--h2breg3eve", "xn--h2brj9c", + "xn--h2brj9c8c", "xn--hxt814e", "xn--i1b6b1a6a2e", "xn--imr513n", @@ -9548,6 +9916,7 @@ var nodeLabels = [...]string{ "xn--mgbca7dzdo", "xn--mgberp4a5d4a87g", "xn--mgberp4a5d4ar", + "xn--mgbgu82a", "xn--mgbi4ecexp", "xn--mgbpl2fh", "xn--mgbqly7c0a67fbc", @@ -9580,6 +9949,7 @@ var nodeLabels = [...]string{ "xn--qxam", "xn--rhqv96g", "xn--rovu88b", + "xn--rvc1e0am3e", "xn--s9brj9c", "xn--ses554g", "xn--t60b56a", @@ -9639,6 +10009,7 @@ var nodeLabels = [...]string{ "gov", "mil", "net", + "nom", "org", "sch", "accident-investigation", @@ -9740,6 +10111,7 @@ var nodeLabels = [...]string{ "org", "com", "net", + "nom", "off", "org", "blogspot", @@ -9748,6 +10120,7 @@ var nodeLabels = [...]string{ "gov", "mil", "net", + "nom", "org", "blogspot", "co", @@ -9762,6 +10135,7 @@ var nodeLabels = [...]string{ "gov", "int", "mil", + "musica", "net", "org", "tur", @@ -9774,13 +10148,18 @@ var nodeLabels = [...]string{ "urn", "gov", "cloudns", + "12hp", + "2ix", + "4lima", "ac", "biz", "co", + "futurecms", "futurehosting", "futuremailing", "gv", "info", + "lima-city", "or", "ortsinfo", "priv", @@ -9852,6 +10231,7 @@ var nodeLabels = [...]string{ "ac", "blogspot", "transurl", + "webhosting", "gov", "0", "1", @@ -9865,6 +10245,7 @@ var nodeLabels = [...]string{ "9", "a", "b", + "barsy", "blogspot", "c", "d", @@ -9921,31 +10302,80 @@ var nodeLabels = [...]string{ "gov", "net", "org", + "academia", + "agro", + "arte", + "blog", + "bolivia", + "ciencia", "com", + "cooperativa", + "democracia", + "deporte", + "ecologia", + "economia", "edu", + "empresa", "gob", - "gov", + "indigena", + "industria", + "info", "int", + "medicina", "mil", + "movimiento", + "musica", + "natural", "net", + "nombre", + "noticias", "org", + "patria", + "plurinacional", + "politica", + "profesional", + "pueblo", + "revista", + "salud", + "tecnologia", + "tksat", + "transporte", "tv", + "web", + "wiki", + "9guacu", + "abc", "adm", "adv", "agr", + "aju", "am", + "anani", + "aparecida", "arq", "art", "ato", "b", + "belem", + "bhz", "bio", "blog", "bmd", + "boavista", + "bsb", + "campinagrande", + "campinas", + "caxias", "cim", "cng", "cnt", "com", + "contagem", "coop", + "cri", + "cuiaba", + "curitiba", + "def", "ecn", "eco", "edu", @@ -9955,48 +10385,87 @@ var nodeLabels = [...]string{ "etc", "eti", "far", + "feira", "flog", + "floripa", "fm", "fnd", + "fortal", "fot", + "foz", "fst", "g12", "ggf", + "goiania", "gov", + "gru", "imb", "ind", "inf", + "jab", + "jampa", + "jdf", + "joinville", "jor", "jus", "leg", "lel", + "londrina", + "macapa", + "maceio", + "manaus", + "maringa", "mat", "med", "mil", + "morena", "mp", "mus", + "natal", "net", + "niteroi", "nom", "not", "ntr", "odo", "org", + "osasco", + "palmas", + "poa", "ppg", "pro", "psc", "psi", + "pvh", "qsl", "radio", "rec", + "recife", + "ribeirao", + "rio", + "riobranco", + "riopreto", + "salvador", + "sampa", + "santamaria", + "santoandre", + "saobernardo", + "saogonca", + "sjc", "slg", + "slz", + "sorocaba", "srv", "taxi", "teo", + "the", "tmp", "trd", "tur", "tv", + "udi", "vet", + "vix", "vlog", "wiki", "zlg", @@ -10028,11 +10497,39 @@ var nodeLabels = [...]string{ "se", "sp", "to", + "ac", + "al", + "am", + "ap", + "ba", + "ce", + "df", + "es", + "go", + "ma", + "mg", + "ms", + "mt", + "pa", + "pb", + "pe", + "pi", + "pr", + "rj", + "rn", + "ro", + "rr", + "rs", + "sc", + "se", + "sp", + "to", "com", "edu", "gov", "net", "org", + "we", "com", "edu", "gov", @@ -10043,15 +10540,19 @@ var nodeLabels = [...]string{ "com", "gov", "mil", + "nym", "of", "blogspot", "com", "edu", "gov", "net", + "nym", "org", "za", + "1password", "ab", + "awdev", "bc", "blogspot", "co", @@ -10075,10 +10576,16 @@ var nodeLabels = [...]string{ "game-server", "myphotos", "scrapping", + "twmail", "gov", "blogspot", + "12hp", + "2ix", + "4lima", "blogspot", "gotdns", + "lima-city", + "square7", "ac", "asso", "co", @@ -10100,9 +10607,12 @@ var nodeLabels = [...]string{ "gob", "gov", "mil", + "nom", "magentosite", - "myfusion", + "sensiosite", "statics", + "trafficplex", + "vapor", "cloudns", "co", "com", @@ -10155,9 +10665,10 @@ var nodeLabels = [...]string{ "amazonaws", "cn-north-1", "compute", + "eb", "elb", - "elasticbeanstalk", "s3", + "cn-north-1", "arts", "com", "edu", @@ -10167,6 +10678,7 @@ var nodeLabels = [...]string{ "int", "mil", "net", + "nodum", "nom", "org", "rec", @@ -10174,6 +10686,7 @@ var nodeLabels = [...]string{ "blogspot", "0emm", "1kapp", + "1password", "3utilities", "4u", "africa", @@ -10183,12 +10696,15 @@ var nodeLabels = [...]string{ "applinzi", "appspot", "ar", + "barsyonline", "betainabox", + "bitballoon", "blogdns", "blogspot", "blogsyte", "bloxcms", "bounty-full", + "bplaced", "br", "cechire", "ciscofreak", @@ -10198,6 +10714,8 @@ var nodeLabels = [...]string{ "co", "codespot", "damnserver", + "ddnsfree", + "ddnsgeek", "ddnsking", "de", "dev-myqnapcloud", @@ -10208,6 +10726,7 @@ var nodeLabels = [...]string{ "doesntexist", "dontexist", "doomdns", + "drayddns", "dreamhosters", "dsmynas", "dyn-o-saur", @@ -10291,9 +10810,9 @@ var nodeLabels = [...]string{ "gb", "geekgalaxy", "getmyip", - "githubcloud", - "githubcloudusercontent", + "giize", "githubusercontent", + "gleeze", "googleapis", "googlecode", "gotdns", @@ -10368,12 +10887,15 @@ var nodeLabels = [...]string{ "isa-geek", "isa-hockeynut", "issmarterthanyou", + "jdevcloud", "joyent", "jpn", + "kozow", "kr", "likes-pie", "likescandy", "logoip", + "loseyourip", "meteorapp", "mex", "myactivedirectory", @@ -10382,31 +10904,37 @@ var nodeLabels = [...]string{ "myqnapcloud", "mysecuritycamera", "myshopblocks", + "mytuleap", "myvnc", "neat-url", "net-freaks", + "netlify", "nfshost", "no", "on-aptible", "onthewifi", + "ooguy", "operaunite", "outsystemscloud", "ownprovider", "pagefrontapp", "pagespeedmobilizer", "pgfog", + "pixolino", "point2this", "prgmr", "publishproxy", "qa2", "qc", "quicksytes", + "quipelements", "rackmaze", "remotewd", "rhcloud", "ru", "sa", "saves-the-whales", + "scrysec", "se", "securitytactics", "selfip", @@ -10432,6 +10960,8 @@ var nodeLabels = [...]string{ "space-to-rent", "stufftoread", "teaches-yoga", + "temp-dns", + "theworkpc", "townnews-staging", "uk", "unusualperson", @@ -10441,6 +10971,7 @@ var nodeLabels = [...]string{ "withgoogle", "withyoutube", "workisboring", + "wpdevcloud", "writesthisblog", "xenapponazure", "yolasite", @@ -10456,6 +10987,8 @@ var nodeLabels = [...]string{ "elb", "eu-central-1", "eu-west-1", + "eu-west-2", + "eu-west-3", "s3", "s3-ap-northeast-1", "s3-ap-northeast-2", @@ -10465,6 +10998,8 @@ var nodeLabels = [...]string{ "s3-ca-central-1", "s3-eu-central-1", "s3-eu-west-1", + "s3-eu-west-2", + "s3-eu-west-3", "s3-external-1", "s3-fips-us-gov-west-1", "s3-sa-east-1", @@ -10509,6 +11044,14 @@ var nodeLabels = [...]string{ "s3", "dualstack", "s3", + "s3-website", + "s3", + "dualstack", + "s3", + "s3-website", + "s3", + "dualstack", + "s3", "dualstack", "s3", "dualstack", @@ -10517,17 +11060,35 @@ var nodeLabels = [...]string{ "s3", "alpha", "beta", + "ap-northeast-1", + "ap-northeast-2", + "ap-south-1", + "ap-southeast-1", + "ap-southeast-2", + "ca-central-1", + "eu-central-1", + "eu-west-1", + "eu-west-2", + "eu-west-3", + "sa-east-1", + "us-east-1", + "us-east-2", + "us-gov-west-1", + "us-west-1", + "us-west-2", "eu-1", "eu-2", + "eu-3", + "eu-4", "us-1", "us-2", + "us-3", + "us-4", "apps", - "api", - "ext", - "gist", "cns", "eu", "xen", + "de", "ac", "co", "ed", @@ -10548,6 +11109,7 @@ var nodeLabels = [...]string{ "org", "ath", "gov", + "info", "ac", "biz", "com", @@ -10565,8 +11127,16 @@ var nodeLabels = [...]string{ "blogspot", "co", "e4", + "metacentrum", "realm", + "cloud", + "custom", + "12hp", + "2ix", + "4lima", + "barsy", "blogspot", + "bplaced", "com", "cosidns", "dd-dns", @@ -10582,6 +11152,7 @@ var nodeLabels = [...]string{ "dynvpn", "firewall-gateway", "fuettertdasnetz", + "git-repos", "goip", "home-webserver", "internet-dns", @@ -10589,8 +11160,10 @@ var nodeLabels = [...]string{ "istmein", "keymachine", "l-o-g-i-n", + "lcube-server", "lebtimnetz", "leitungsen", + "lima-city", "logoip", "mein-vigor", "my-gateway", @@ -10599,6 +11172,8 @@ var nodeLabels = [...]string{ "my-wan", "myhome-server", "spdns", + "square7", + "svn-repos", "syno-ds", "synology-diskstation", "synology-ds", @@ -10685,6 +11260,8 @@ var nodeLabels = [...]string{ "name", "net", "org", + "1password", + "barsy", "cloudns", "diskstation", "mycd", @@ -10694,6 +11271,7 @@ var nodeLabels = [...]string{ "party", "user", "ybo", + "storj", "aland", "blogspot", "dy", @@ -10729,6 +11307,7 @@ var nodeLabels = [...]string{ "presse", "tm", "veterinaire", + "nom", "com", "edu", "gov", @@ -10737,6 +11316,7 @@ var nodeLabels = [...]string{ "org", "pvt", "co", + "cya", "net", "org", "com", @@ -10754,6 +11334,7 @@ var nodeLabels = [...]string{ "com", "edu", "net", + "nom", "org", "ac", "com", @@ -10761,6 +11342,7 @@ var nodeLabels = [...]string{ "gov", "net", "org", + "cloud", "asso", "com", "edu", @@ -10772,6 +11354,7 @@ var nodeLabels = [...]string{ "edu", "gov", "net", + "nym", "org", "com", "edu", @@ -10779,6 +11362,7 @@ var nodeLabels = [...]string{ "ind", "mil", "net", + "nom", "org", "co", "com", @@ -10815,7 +11399,10 @@ var nodeLabels = [...]string{ "gob", "mil", "net", + "nom", "org", + "cloudaccess", + "freesite", "opencraft", "blogspot", "com", @@ -10898,6 +11485,7 @@ var nodeLabels = [...]string{ "co", "com", "net", + "nom", "org", "ro", "tt", @@ -10905,6 +11493,7 @@ var nodeLabels = [...]string{ "ltd", "plc", "ac", + "barsy", "blogspot", "cloudns", "co", @@ -10933,6 +11522,7 @@ var nodeLabels = [...]string{ "no-ip", "nsupdate", "selfip", + "v-info", "webhop", "eu", "backplaneapp", @@ -10940,6 +11530,7 @@ var nodeLabels = [...]string{ "browsersafetymark", "com", "dedyn", + "definima", "drud", "enonic", "github", @@ -10949,14 +11540,32 @@ var nodeLabels = [...]string{ "lair", "ngrok", "nid", + "nodeart", + "nodum", "pantheonsite", "protonet", + "resindevice", + "resinstaging", + "s5y", "sandcats", "shiftedit", "spacekit", "stolos", + "thingdust", + "vaporcloud", + "wedeploy", "customer", "apps", + "stage", + "devices", + "dev", + "disrec", + "prod", + "testing", + "cust", + "cust", + "cust", + "cust", "com", "edu", "gov", @@ -13151,7 +13760,15 @@ var nodeLabels = [...]string{ "yamanakako", "yamanashi", "city", + "ac", "co", + "go", + "info", + "me", + "mobi", + "ne", + "or", + "sc", "blogspot", "com", "edu", @@ -13235,6 +13852,7 @@ var nodeLabels = [...]string{ "gov", "mil", "net", + "nym", "org", "bnr", "c", @@ -13244,6 +13862,7 @@ var nodeLabels = [...]string{ "info", "int", "net", + "nym", "org", "per", "static", @@ -13262,6 +13881,8 @@ var nodeLabels = [...]string{ "org", "oy", "blogspot", + "nom", + "nym", "cyon", "mypep", "ac", @@ -13288,7 +13909,9 @@ var nodeLabels = [...]string{ "org", "blogspot", "gov", + "nym", "blogspot", + "nym", "asn", "com", "conf", @@ -13319,6 +13942,7 @@ var nodeLabels = [...]string{ "blogspot", "ac", "brasilia", + "c66", "co", "daplie", "ddns", @@ -13326,6 +13950,7 @@ var nodeLabels = [...]string{ "dnsfor", "dscloud", "edu", + "filegear", "gov", "hopto", "i234", @@ -13334,11 +13959,14 @@ var nodeLabels = [...]string{ "myds", "net", "noip", + "nym", "org", "priv", "synology", "webhop", + "wedeploy", "yombo", + "localhost", "co", "com", "edu", @@ -13355,6 +13983,7 @@ var nodeLabels = [...]string{ "inf", "name", "net", + "nom", "org", "com", "edu", @@ -13970,6 +14599,7 @@ var nodeLabels = [...]string{ "edu", "gob", "net", + "nym", "org", "blogspot", "com", @@ -14009,21 +14639,30 @@ var nodeLabels = [...]string{ "forgot", "forgot", "asso", + "nom", "alwaysdata", "at-band-camp", "azure-mobile", "azurewebsites", + "barsy", "blogdns", + "boomla", "bounceme", + "bplaced", "broke-it", "buyshouses", + "casacam", "cdn77", "cdn77-ssl", + "channelsdvr", + "cloudaccess", "cloudapp", "cloudfront", "cloudfunctions", "cryptonomic", "ddns", + "debian", + "definima", "dnsalias", "dnsdojo", "does-it", @@ -14031,6 +14670,7 @@ var nodeLabels = [...]string{ "dsmynas", "dynalias", "dynathome", + "dynu", "dynv6", "eating-organic", "endofinternet", @@ -14039,6 +14679,7 @@ var nodeLabels = [...]string{ "fastlylb", "feste-ip", "firewall-gateway", + "flynnhosting", "from-az", "from-co", "from-la", @@ -14053,12 +14694,14 @@ var nodeLabels = [...]string{ "hu", "in", "in-the-band", + "ipifony", "is-a-chef", "is-a-geek", "isa-geek", "jp", "kicks-ass", "knx-server", + "moonscale", "mydissent", "myeffect", "myfritz", @@ -14073,6 +14716,7 @@ var nodeLabels = [...]string{ "privatizehealthinsurance", "rackmaze", "redirectme", + "ru", "scrapper-site", "se", "selfip", @@ -14081,14 +14725,17 @@ var nodeLabels = [...]string{ "serveblog", "serveftp", "serveminecraft", + "square7", "static-access", "sytes", "t3l3p0rt", "thruhere", + "twmail", "uk", "webhop", "za", "r", + "freetls", "map", "prod", "ssl", @@ -14136,7 +14783,10 @@ var nodeLabels = [...]string{ "web", "blogspot", "bv", + "cistron", "co", + "demon", + "hosting-cluster", "transurl", "virtueeldomein", "aa", @@ -14914,6 +15564,7 @@ var nodeLabels = [...]string{ "org", "merseine", "mine", + "nom", "shacknet", "ac", "co", @@ -14927,6 +15578,7 @@ var nodeLabels = [...]string{ "maori", "mil", "net", + "nym", "org", "parliament", "school", @@ -14942,6 +15594,8 @@ var nodeLabels = [...]string{ "org", "pro", "homelink", + "barsy", + "accesscam", "ae", "amune", "blogdns", @@ -14949,6 +15603,7 @@ var nodeLabels = [...]string{ "bmoattachments", "boldlygoingnowhere", "cable-modem", + "camdvr", "cdn77", "cdn77-secure", "certmgr", @@ -14971,6 +15626,10 @@ var nodeLabels = [...]string{ "endoftheinternet", "eu", "familyds", + "fedorainfracloud", + "fedorapeople", + "fedoraproject", + "freeddns", "from-me", "game-host", "gotdns", @@ -15008,6 +15667,7 @@ var nodeLabels = [...]string{ "myfirewall", "myftp", "mysecuritycamera", + "mywire", "nflfan", "no-ip", "pimienta", @@ -15026,9 +15686,11 @@ var nodeLabels = [...]string{ "sweetpepper", "tunk", "tuxfamily", + "twmail", "ufcfan", "us", "webhop", + "webredirect", "wmflabs", "za", "zapto", @@ -15094,6 +15756,12 @@ var nodeLabels = [...]string{ "tr", "uk", "us", + "cloud", + "os", + "stg", + "app", + "os", + "app", "nerdpol", "abo", "ac", @@ -15114,6 +15782,7 @@ var nodeLabels = [...]string{ "mil", "net", "nom", + "nym", "org", "com", "edu", @@ -15126,6 +15795,7 @@ var nodeLabels = [...]string{ "net", "ngo", "org", + "1337", "biz", "com", "edu", @@ -15397,6 +16067,7 @@ var nodeLabels = [...]string{ "int", "net", "nome", + "nym", "org", "publ", "belau", @@ -15405,6 +16076,7 @@ var nodeLabels = [...]string{ "ed", "go", "ne", + "nom", "or", "com", "coop", @@ -15420,6 +16092,7 @@ var nodeLabels = [...]string{ "mil", "name", "net", + "nom", "org", "sch", "asso", @@ -15427,6 +16100,7 @@ var nodeLabels = [...]string{ "com", "nom", "ybo", + "clan", "arts", "blogspot", "com", @@ -15440,20 +16114,48 @@ var nodeLabels = [...]string{ "store", "tm", "www", + "lima-city", + "myddns", + "webspace", "ac", "blogspot", "co", "edu", "gov", "in", + "nom", "org", "ac", + "adygeya", + "bashkiria", + "bir", "blogspot", + "cbg", + "cldmail", + "com", + "dagestan", "edu", "gov", + "grozny", "int", + "kalmykia", + "kustanai", + "marine", "mil", + "mordovia", + "msk", + "mytis", + "nalchik", + "net", + "nov", + "org", + "pp", + "pyatigorsk", + "spb", "test", + "vladikavkaz", + "vladimir", + "hb", "ac", "co", "com", @@ -15546,9 +16248,14 @@ var nodeLabels = [...]string{ "now", "org", "platform", + "wedeploy", "blogspot", + "nom", + "byen", "cyon", + "platformsh", "blogspot", + "nym", "com", "edu", "gov", @@ -15566,6 +16273,8 @@ var nodeLabels = [...]string{ "net", "org", "stackspace", + "uber", + "xs4all", "co", "com", "consulado", @@ -15578,44 +16287,67 @@ var nodeLabels = [...]string{ "principe", "saotome", "store", + "abkhazia", "adygeya", + "aktyubinsk", "arkhangelsk", + "armenia", + "ashgabad", + "azerbaijan", "balashov", "bashkiria", "bryansk", + "bukhara", + "chimkent", "dagestan", + "east-kazakhstan", + "exnet", + "georgia", "grozny", "ivanovo", + "jambyl", "kalmykia", "kaluga", + "karacol", + "karaganda", "karelia", "khakassia", "krasnodar", "kurgan", + "kustanai", "lenug", + "mangyshlak", "mordovia", "msk", "murmansk", "nalchik", + "navoi", + "north-kazakhstan", "nov", + "nym", "obninsk", "penza", "pokrovsk", "sochi", "spb", + "tashkent", + "termez", "togliatti", "troitsk", + "tselinograd", "tula", "tuva", "vladikavkaz", "vladimir", "vologda", + "barsy", "com", "edu", "gob", "org", "red", "gov", + "nym", "com", "edu", "gov", @@ -15684,6 +16416,7 @@ var nodeLabels = [...]string{ "mil", "net", "org", + "vpnplus", "av", "bbs", "bel", @@ -15739,10 +16472,13 @@ var nodeLabels = [...]string{ "idv", "mil", "net", + "nym", "org", + "url", "xn--czrw28b", "xn--uc0atv", "xn--zf0ao64a", + "mymailer", "ac", "co", "go", @@ -15843,6 +16579,7 @@ var nodeLabels = [...]string{ "com", "go", "ne", + "nom", "or", "org", "sc", @@ -15858,6 +16595,7 @@ var nodeLabels = [...]string{ "police", "sch", "blogspot", + "nh-serv", "no-ip", "wellbeingzone", "homeoffice", @@ -16004,9 +16742,17 @@ var nodeLabels = [...]string{ "cc", "k12", "lib", + "ann-arbor", "cc", + "cog", + "dst", + "eaton", + "gen", "k12", "lib", + "mus", + "tec", + "washtenaw", "cc", "k12", "lib", @@ -16098,6 +16844,7 @@ var nodeLabels = [...]string{ "gub", "mil", "net", + "nom", "org", "blogspot", "co", @@ -16109,6 +16856,7 @@ var nodeLabels = [...]string{ "gov", "mil", "net", + "nom", "org", "arts", "co", @@ -16127,6 +16875,7 @@ var nodeLabels = [...]string{ "store", "tec", "web", + "nom", "co", "com", "k12", @@ -16149,6 +16898,7 @@ var nodeLabels = [...]string{ "edu", "net", "org", + "advisor", "com", "dyndns", "edu", @@ -16162,6 +16912,13 @@ var nodeLabels = [...]string{ "xn--d1at", "xn--o1ac", "xn--o1ach", + "xn--12c1fe0br", + "xn--12cfi8ixb8l", + "xn--12co0c3b4eva", + "xn--h3cuzk1di", + "xn--m3ch0j3a", + "xn--o3cyx2a", + "blogsite", "fhapp", "ac", "agric", @@ -16192,5 +16949,11 @@ var nodeLabels = [...]string{ "net", "org", "sch", + "lima", "triton", + "ac", + "co", + "gov", + "mil", + "org", } diff --git a/vendor/golang.org/x/net/route/defs_openbsd.go b/vendor/golang.org/x/net/route/defs_openbsd.go index 0f66d36..173bb5d 100644 --- a/vendor/golang.org/x/net/route/defs_openbsd.go +++ b/vendor/golang.org/x/net/route/defs_openbsd.go @@ -69,6 +69,9 @@ const ( sysRTM_IFINFO = C.RTM_IFINFO sysRTM_IFANNOUNCE = C.RTM_IFANNOUNCE sysRTM_DESYNC = C.RTM_DESYNC + sysRTM_INVALIDATE = C.RTM_INVALIDATE + sysRTM_BFD = C.RTM_BFD + sysRTM_PROPOSAL = C.RTM_PROPOSAL sysRTA_DST = C.RTA_DST sysRTA_GATEWAY = C.RTA_GATEWAY @@ -81,6 +84,10 @@ const ( sysRTA_SRC = C.RTA_SRC sysRTA_SRCMASK = C.RTA_SRCMASK sysRTA_LABEL = C.RTA_LABEL + sysRTA_BFD = C.RTA_BFD + sysRTA_DNS = C.RTA_DNS + sysRTA_STATIC = C.RTA_STATIC + sysRTA_SEARCH = C.RTA_SEARCH sysRTAX_DST = C.RTAX_DST sysRTAX_GATEWAY = C.RTAX_GATEWAY @@ -93,6 +100,10 @@ const ( sysRTAX_SRC = C.RTAX_SRC sysRTAX_SRCMASK = C.RTAX_SRCMASK sysRTAX_LABEL = C.RTAX_LABEL + sysRTAX_BFD = C.RTAX_BFD + sysRTAX_DNS = C.RTAX_DNS + sysRTAX_STATIC = C.RTAX_STATIC + sysRTAX_SEARCH = C.RTAX_SEARCH sysRTAX_MAX = C.RTAX_MAX ) diff --git a/vendor/golang.org/x/net/route/route_classic.go b/vendor/golang.org/x/net/route/route_classic.go index 61b2bb4..02fa688 100644 --- a/vendor/golang.org/x/net/route/route_classic.go +++ b/vendor/golang.org/x/net/route/route_classic.go @@ -6,7 +6,10 @@ package route -import "syscall" +import ( + "runtime" + "syscall" +) func (m *RouteMessage) marshal() ([]byte, error) { w, ok := wireFormats[m.Type] @@ -14,6 +17,11 @@ func (m *RouteMessage) marshal() ([]byte, error) { return nil, errUnsupportedMessage } l := w.bodyOff + addrsSpace(m.Addrs) + if runtime.GOOS == "darwin" { + // Fix stray pointer writes on macOS. + // See golang.org/issue/22456. + l += 1024 + } b := make([]byte, l) nativeEndian.PutUint16(b[:2], uint16(l)) if m.Version == 0 { diff --git a/vendor/golang.org/x/net/route/route_test.go b/vendor/golang.org/x/net/route/route_test.go index 63fd8c5..61bd174 100644 --- a/vendor/golang.org/x/net/route/route_test.go +++ b/vendor/golang.org/x/net/route/route_test.go @@ -74,6 +74,10 @@ var addrAttrNames = [...]string{ "df:mpls1-n:tag-o:src", // mpls1 for dragonfly, tag for netbsd, src for openbsd "df:mpls2-o:srcmask", // mpls2 for dragonfly, srcmask for openbsd "df:mpls3-o:label", // mpls3 for dragonfly, label for openbsd + "o:bfd", // bfd for openbsd + "o:dns", // dns for openbsd + "o:static", // static for openbsd + "o:search", // search for openbsd } func (attrs addrAttrs) String() string { diff --git a/vendor/golang.org/x/net/route/sys_darwin.go b/vendor/golang.org/x/net/route/sys_darwin.go index e742c91..d2daf5c 100644 --- a/vendor/golang.org/x/net/route/sys_darwin.go +++ b/vendor/golang.org/x/net/route/sys_darwin.go @@ -13,7 +13,7 @@ func (typ RIBType) parseable() bool { } } -// A RouteMetrics represents route metrics. +// RouteMetrics represents route metrics. type RouteMetrics struct { PathMTU int // path maximum transmission unit } @@ -30,7 +30,7 @@ func (m *RouteMessage) Sys() []Sys { } } -// A InterfaceMetrics represents interface metrics. +// InterfaceMetrics represents interface metrics. type InterfaceMetrics struct { Type int // interface type MTU int // maximum transmission unit diff --git a/vendor/golang.org/x/net/route/sys_dragonfly.go b/vendor/golang.org/x/net/route/sys_dragonfly.go index b175cb1..0c14bc2 100644 --- a/vendor/golang.org/x/net/route/sys_dragonfly.go +++ b/vendor/golang.org/x/net/route/sys_dragonfly.go @@ -8,7 +8,7 @@ import "unsafe" func (typ RIBType) parseable() bool { return true } -// A RouteMetrics represents route metrics. +// RouteMetrics represents route metrics. type RouteMetrics struct { PathMTU int // path maximum transmission unit } @@ -25,7 +25,7 @@ func (m *RouteMessage) Sys() []Sys { } } -// A InterfaceMetrics represents interface metrics. +// InterfaceMetrics represents interface metrics. type InterfaceMetrics struct { Type int // interface type MTU int // maximum transmission unit diff --git a/vendor/golang.org/x/net/route/sys_freebsd.go b/vendor/golang.org/x/net/route/sys_freebsd.go index 010d4ae..89ba1c4 100644 --- a/vendor/golang.org/x/net/route/sys_freebsd.go +++ b/vendor/golang.org/x/net/route/sys_freebsd.go @@ -11,7 +11,7 @@ import ( func (typ RIBType) parseable() bool { return true } -// A RouteMetrics represents route metrics. +// RouteMetrics represents route metrics. type RouteMetrics struct { PathMTU int // path maximum transmission unit } @@ -35,7 +35,7 @@ func (m *RouteMessage) Sys() []Sys { } } -// A InterfaceMetrics represents interface metrics. +// InterfaceMetrics represents interface metrics. type InterfaceMetrics struct { Type int // interface type MTU int // maximum transmission unit diff --git a/vendor/golang.org/x/net/route/sys_netbsd.go b/vendor/golang.org/x/net/route/sys_netbsd.go index b4e3301..02f71d5 100644 --- a/vendor/golang.org/x/net/route/sys_netbsd.go +++ b/vendor/golang.org/x/net/route/sys_netbsd.go @@ -6,7 +6,7 @@ package route func (typ RIBType) parseable() bool { return true } -// A RouteMetrics represents route metrics. +// RouteMetrics represents route metrics. type RouteMetrics struct { PathMTU int // path maximum transmission unit } @@ -23,7 +23,7 @@ func (m *RouteMessage) Sys() []Sys { } } -// A InterfaceMetrics represents interface metrics. +// RouteMetrics represents route metrics. type InterfaceMetrics struct { Type int // interface type MTU int // maximum transmission unit diff --git a/vendor/golang.org/x/net/route/sys_openbsd.go b/vendor/golang.org/x/net/route/sys_openbsd.go index 8798dc4..c5674e8 100644 --- a/vendor/golang.org/x/net/route/sys_openbsd.go +++ b/vendor/golang.org/x/net/route/sys_openbsd.go @@ -15,7 +15,7 @@ func (typ RIBType) parseable() bool { } } -// A RouteMetrics represents route metrics. +// RouteMetrics represents route metrics. type RouteMetrics struct { PathMTU int // path maximum transmission unit } @@ -32,7 +32,7 @@ func (m *RouteMessage) Sys() []Sys { } } -// A InterfaceMetrics represents interface metrics. +// InterfaceMetrics represents interface metrics. type InterfaceMetrics struct { Type int // interface type MTU int // maximum transmission unit @@ -75,5 +75,6 @@ func probeRoutingStack() (int, map[int]*wireFormat) { sysRTM_DELADDR: ifam, sysRTM_IFINFO: ifm, sysRTM_IFANNOUNCE: ifanm, + sysRTM_DESYNC: rtm, } } diff --git a/vendor/golang.org/x/net/route/syscall.go b/vendor/golang.org/x/net/route/syscall.go index c211188..5f69ea6 100644 --- a/vendor/golang.org/x/net/route/syscall.go +++ b/vendor/golang.org/x/net/route/syscall.go @@ -20,7 +20,7 @@ func sysctl(mib []int32, old *byte, oldlen *uintptr, new *byte, newlen uintptr) } else { p = unsafe.Pointer(&zero) } - _, _, errno := syscall.Syscall6(syscall.SYS___SYSCTL, uintptr(p), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + _, _, errno := syscall.Syscall6(syscall.SYS___SYSCTL, uintptr(p), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), newlen) if errno != 0 { return error(errno) } diff --git a/vendor/golang.org/x/net/route/zsys_openbsd.go b/vendor/golang.org/x/net/route/zsys_openbsd.go index f5a1ff9..db8c8ef 100644 --- a/vendor/golang.org/x/net/route/zsys_openbsd.go +++ b/vendor/golang.org/x/net/route/zsys_openbsd.go @@ -54,6 +54,9 @@ const ( sysRTM_IFINFO = 0xe sysRTM_IFANNOUNCE = 0xf sysRTM_DESYNC = 0x10 + sysRTM_INVALIDATE = 0x11 + sysRTM_BFD = 0x12 + sysRTM_PROPOSAL = 0x13 sysRTA_DST = 0x1 sysRTA_GATEWAY = 0x2 @@ -66,6 +69,10 @@ const ( sysRTA_SRC = 0x100 sysRTA_SRCMASK = 0x200 sysRTA_LABEL = 0x400 + sysRTA_BFD = 0x800 + sysRTA_DNS = 0x1000 + sysRTA_STATIC = 0x2000 + sysRTA_SEARCH = 0x4000 sysRTAX_DST = 0x0 sysRTAX_GATEWAY = 0x1 @@ -78,7 +85,11 @@ const ( sysRTAX_SRC = 0x8 sysRTAX_SRCMASK = 0x9 sysRTAX_LABEL = 0xa - sysRTAX_MAX = 0xb + sysRTAX_BFD = 0xb + sysRTAX_DNS = 0xc + sysRTAX_STATIC = 0xd + sysRTAX_SEARCH = 0xe + sysRTAX_MAX = 0xf ) const ( diff --git a/vendor/golang.org/x/net/trace/events.go b/vendor/golang.org/x/net/trace/events.go index d8daec1..c646a69 100644 --- a/vendor/golang.org/x/net/trace/events.go +++ b/vendor/golang.org/x/net/trace/events.go @@ -39,9 +39,9 @@ var buckets = []bucket{ } // RenderEvents renders the HTML page typically served at /debug/events. -// It does not do any auth checking; see AuthRequest for the default auth check -// used by the handler registered on http.DefaultServeMux. -// req may be nil. +// It does not do any auth checking. The request may be nil. +// +// Most users will use the Events handler. func RenderEvents(w http.ResponseWriter, req *http.Request, sensitive bool) { now := time.Now() data := &struct { diff --git a/vendor/golang.org/x/net/trace/trace.go b/vendor/golang.org/x/net/trace/trace.go index 3d9b646..a46ee0e 100644 --- a/vendor/golang.org/x/net/trace/trace.go +++ b/vendor/golang.org/x/net/trace/trace.go @@ -110,30 +110,46 @@ var AuthRequest = func(req *http.Request) (any, sensitive bool) { } func init() { - http.HandleFunc("/debug/requests", func(w http.ResponseWriter, req *http.Request) { - any, sensitive := AuthRequest(req) - if !any { - http.Error(w, "not allowed", http.StatusUnauthorized) - return - } - w.Header().Set("Content-Type", "text/html; charset=utf-8") - Render(w, req, sensitive) - }) - http.HandleFunc("/debug/events", func(w http.ResponseWriter, req *http.Request) { - any, sensitive := AuthRequest(req) - if !any { - http.Error(w, "not allowed", http.StatusUnauthorized) - return - } - w.Header().Set("Content-Type", "text/html; charset=utf-8") - RenderEvents(w, req, sensitive) - }) + // TODO(jbd): Serve Traces from /debug/traces in the future? + // There is no requirement for a request to be present to have traces. + http.HandleFunc("/debug/requests", Traces) + http.HandleFunc("/debug/events", Events) +} + +// Traces responds with traces from the program. +// The package initialization registers it in http.DefaultServeMux +// at /debug/requests. +// +// It performs authorization by running AuthRequest. +func Traces(w http.ResponseWriter, req *http.Request) { + any, sensitive := AuthRequest(req) + if !any { + http.Error(w, "not allowed", http.StatusUnauthorized) + return + } + w.Header().Set("Content-Type", "text/html; charset=utf-8") + Render(w, req, sensitive) +} + +// Events responds with a page of events collected by EventLogs. +// The package initialization registers it in http.DefaultServeMux +// at /debug/events. +// +// It performs authorization by running AuthRequest. +func Events(w http.ResponseWriter, req *http.Request) { + any, sensitive := AuthRequest(req) + if !any { + http.Error(w, "not allowed", http.StatusUnauthorized) + return + } + w.Header().Set("Content-Type", "text/html; charset=utf-8") + RenderEvents(w, req, sensitive) } // Render renders the HTML page typically served at /debug/requests. -// It does not do any auth checking; see AuthRequest for the default auth check -// used by the handler registered on http.DefaultServeMux. -// req may be nil. +// It does not do any auth checking. The request may be nil. +// +// Most users will use the Traces handler. func Render(w io.Writer, req *http.Request, sensitive bool) { data := &struct { Families []string @@ -352,7 +368,11 @@ func New(family, title string) Trace { } func (tr *trace) Finish() { - tr.Elapsed = time.Now().Sub(tr.Start) + elapsed := time.Now().Sub(tr.Start) + tr.mu.Lock() + tr.Elapsed = elapsed + tr.mu.Unlock() + if DebugUseAfterFinish { buf := make([]byte, 4<<10) // 4 KB should be enough n := runtime.Stack(buf, false) @@ -365,14 +385,17 @@ func (tr *trace) Finish() { m.Remove(tr) f := getFamily(tr.Family, true) + tr.mu.RLock() // protects tr fields in Cond.match calls for _, b := range f.Buckets { if b.Cond.match(tr) { b.Add(tr) } } + tr.mu.RUnlock() + // Add a sample of elapsed time as microseconds to the family's timeseries h := new(histogram) - h.addMeasurement(tr.Elapsed.Nanoseconds() / 1e3) + h.addMeasurement(elapsed.Nanoseconds() / 1e3) f.LatencyMu.Lock() f.Latency.Add(h) f.LatencyMu.Unlock() @@ -668,25 +691,20 @@ type trace struct { // Title is the title of this trace. Title string - // Timing information. - Start time.Time - Elapsed time.Duration // zero while active - - // Trace information if non-zero. - traceID uint64 - spanID uint64 + // Start time of the this trace. + Start time.Time - // Whether this trace resulted in an error. - IsError bool - - // Append-only sequence of events (modulo discards). mu sync.RWMutex - events []event + events []event // Append-only sequence of events (modulo discards). maxEvents int + recycler func(interface{}) + IsError bool // Whether this trace resulted in an error. + Elapsed time.Duration // Elapsed time for this trace, zero while active. + traceID uint64 // Trace information if non-zero. + spanID uint64 - refs int32 // how many buckets this is in - recycler func(interface{}) - disc discarded // scratch space to avoid allocation + refs int32 // how many buckets this is in + disc discarded // scratch space to avoid allocation finishStack []byte // where finish was called, if DebugUseAfterFinish is set @@ -698,14 +716,18 @@ func (tr *trace) reset() { tr.Family = "" tr.Title = "" tr.Start = time.Time{} + + tr.mu.Lock() tr.Elapsed = 0 tr.traceID = 0 tr.spanID = 0 tr.IsError = false tr.maxEvents = 0 tr.events = nil - tr.refs = 0 tr.recycler = nil + tr.mu.Unlock() + + tr.refs = 0 tr.disc = 0 tr.finishStack = nil for i := range tr.eventsBuf { @@ -785,21 +807,31 @@ func (tr *trace) LazyPrintf(format string, a ...interface{}) { tr.addEvent(&lazySprintf{format, a}, false, false) } -func (tr *trace) SetError() { tr.IsError = true } +func (tr *trace) SetError() { + tr.mu.Lock() + tr.IsError = true + tr.mu.Unlock() +} func (tr *trace) SetRecycler(f func(interface{})) { + tr.mu.Lock() tr.recycler = f + tr.mu.Unlock() } func (tr *trace) SetTraceInfo(traceID, spanID uint64) { + tr.mu.Lock() tr.traceID, tr.spanID = traceID, spanID + tr.mu.Unlock() } func (tr *trace) SetMaxEvents(m int) { + tr.mu.Lock() // Always keep at least three events: first, discarded count, last. if len(tr.events) == 0 && m > 3 { tr.maxEvents = m } + tr.mu.Unlock() } func (tr *trace) ref() { @@ -808,6 +840,7 @@ func (tr *trace) ref() { func (tr *trace) unref() { if atomic.AddInt32(&tr.refs, -1) == 0 { + tr.mu.RLock() if tr.recycler != nil { // freeTrace clears tr, so we hold tr.recycler and tr.events here. go func(f func(interface{}), es []event) { @@ -818,6 +851,7 @@ func (tr *trace) unref() { } }(tr.recycler, tr.events) } + tr.mu.RUnlock() freeTrace(tr) } @@ -828,7 +862,10 @@ func (tr *trace) When() string { } func (tr *trace) ElapsedTime() string { + tr.mu.RLock() t := tr.Elapsed + tr.mu.RUnlock() + if t == 0 { // Active trace. t = time.Since(tr.Start) diff --git a/vendor/golang.org/x/net/webdav/lock_test.go b/vendor/golang.org/x/net/webdav/lock_test.go index 116d6c0..5cf14cd 100644 --- a/vendor/golang.org/x/net/webdav/lock_test.go +++ b/vendor/golang.org/x/net/webdav/lock_test.go @@ -69,7 +69,7 @@ var lockTestDurations = []time.Duration{ // lockTestNames are the names of a set of mutually compatible locks. For each // name fragment: // - _ means no explicit lock. -// - i means a infinite-depth lock, +// - i means an infinite-depth lock, // - z means a zero-depth lock, var lockTestNames = []string{ "/_/_/_/_/z", diff --git a/vendor/golang.org/x/sys/CONTRIBUTING.md b/vendor/golang.org/x/sys/CONTRIBUTING.md index 88dff59..d0485e8 100644 --- a/vendor/golang.org/x/sys/CONTRIBUTING.md +++ b/vendor/golang.org/x/sys/CONTRIBUTING.md @@ -4,16 +4,15 @@ Go is an open source project. It is the work of hundreds of contributors. We appreciate your help! - ## Filing issues When [filing an issue](https://golang.org/issue/new), make sure to answer these five questions: -1. What version of Go are you using (`go version`)? -2. What operating system and processor architecture are you using? -3. What did you do? -4. What did you expect to see? -5. What did you see instead? +1. What version of Go are you using (`go version`)? +2. What operating system and processor architecture are you using? +3. What did you do? +4. What did you expect to see? +5. What did you see instead? General questions should go to the [golang-nuts mailing list](https://groups.google.com/group/golang-nuts) instead of the issue tracker. The gophers there will answer or ask you to file an issue if you've tripped over a bug. @@ -23,9 +22,5 @@ The gophers there will answer or ask you to file an issue if you've tripped over Please read the [Contribution Guidelines](https://golang.org/doc/contribute.html) before sending patches. -**We do not accept GitHub pull requests** -(we use [Gerrit](https://code.google.com/p/gerrit/) instead for code review). - Unless otherwise noted, the Go source files are distributed under the BSD-style license found in the LICENSE file. - diff --git a/vendor/golang.org/x/sys/README b/vendor/golang.org/x/sys/README deleted file mode 100644 index bd422b4..0000000 --- a/vendor/golang.org/x/sys/README +++ /dev/null @@ -1,3 +0,0 @@ -This repository holds supplemental Go packages for low-level interactions with the operating system. - -To submit changes to this repository, see http://golang.org/doc/contribute.html. diff --git a/vendor/golang.org/x/sys/README.md b/vendor/golang.org/x/sys/README.md new file mode 100644 index 0000000..ef6c9e5 --- /dev/null +++ b/vendor/golang.org/x/sys/README.md @@ -0,0 +1,18 @@ +# sys + +This repository holds supplemental Go packages for low-level interactions with +the operating system. + +## Download/Install + +The easiest way to install is to run `go get -u golang.org/x/sys`. You can +also manually git clone the repository to `$GOPATH/src/golang.org/x/sys`. + +## Report Issues / Send Patches + +This repository uses Gerrit for code changes. To learn how to submit changes to +this repository, see https://golang.org/doc/contribute.html. + +The main issue tracker for the sys repository is located at +https://github.com/golang/go/issues. Prefix your issue with "x/sys:" in the +subject line, so it is easy to find. diff --git a/vendor/golang.org/x/sys/plan9/asm.s b/vendor/golang.org/x/sys/plan9/asm.s index d4ca868..06449eb 100644 --- a/vendor/golang.org/x/sys/plan9/asm.s +++ b/vendor/golang.org/x/sys/plan9/asm.s @@ -1,4 +1,4 @@ -// Copyright 2014 The Go Authors. All rights reserved. +// Copyright 2014 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. diff --git a/vendor/golang.org/x/sys/plan9/asm_plan9_arm.s b/vendor/golang.org/x/sys/plan9/asm_plan9_arm.s new file mode 100644 index 0000000..afb7c0a --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/asm_plan9_arm.s @@ -0,0 +1,25 @@ +// Copyright 2009 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. + +#include "textflag.h" + +// System call support for plan9 on arm + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-32 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-44 + JMP syscall·Syscall6(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + JMP syscall·RawSyscall6(SB) + +TEXT ·seek(SB),NOSPLIT,$0-36 + JMP syscall·exit(SB) diff --git a/vendor/golang.org/x/sys/plan9/env_plan9.go b/vendor/golang.org/x/sys/plan9/env_plan9.go index 25a96e7..8f19180 100644 --- a/vendor/golang.org/x/sys/plan9/env_plan9.go +++ b/vendor/golang.org/x/sys/plan9/env_plan9.go @@ -1,4 +1,4 @@ -// Copyright 2011 The Go Authors. All rights reserved. +// Copyright 2011 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. @@ -25,3 +25,7 @@ func Clearenv() { func Environ() []string { return syscall.Environ() } + +func Unsetenv(key string) error { + return syscall.Unsetenv(key) +} diff --git a/vendor/golang.org/x/sys/plan9/env_unset.go b/vendor/golang.org/x/sys/plan9/env_unset.go deleted file mode 100644 index c37fc26..0000000 --- a/vendor/golang.org/x/sys/plan9/env_unset.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2014 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 go1.4 - -package plan9 - -import "syscall" - -func Unsetenv(key string) error { - // This was added in Go 1.4. - return syscall.Unsetenv(key) -} diff --git a/vendor/golang.org/x/sys/plan9/errors_plan9.go b/vendor/golang.org/x/sys/plan9/errors_plan9.go index 110cf6a..65fe74d 100644 --- a/vendor/golang.org/x/sys/plan9/errors_plan9.go +++ b/vendor/golang.org/x/sys/plan9/errors_plan9.go @@ -1,4 +1,4 @@ -// Copyright 2011 The Go Authors. All rights reserved. +// Copyright 2011 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. diff --git a/vendor/golang.org/x/sys/plan9/race.go b/vendor/golang.org/x/sys/plan9/race.go index c7ff5df..42edd93 100644 --- a/vendor/golang.org/x/sys/plan9/race.go +++ b/vendor/golang.org/x/sys/plan9/race.go @@ -1,4 +1,4 @@ -// Copyright 2012 The Go Authors. All rights reserved. +// Copyright 2012 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. diff --git a/vendor/golang.org/x/sys/plan9/race0.go b/vendor/golang.org/x/sys/plan9/race0.go index 06cabcc..c89cf8f 100644 --- a/vendor/golang.org/x/sys/plan9/race0.go +++ b/vendor/golang.org/x/sys/plan9/race0.go @@ -1,4 +1,4 @@ -// Copyright 2012 The Go Authors. All rights reserved. +// Copyright 2012 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. diff --git a/vendor/golang.org/x/sys/plan9/syscall.go b/vendor/golang.org/x/sys/plan9/syscall.go index df6f8c5..163254c 100644 --- a/vendor/golang.org/x/sys/plan9/syscall.go +++ b/vendor/golang.org/x/sys/plan9/syscall.go @@ -5,17 +5,20 @@ // +build plan9 // Package plan9 contains an interface to the low-level operating system -// primitives. OS details vary depending on the underlying system, and +// primitives. OS details vary depending on the underlying system, and // by default, godoc will display the OS-specific documentation for the current -// system. If you want godoc to display documentation for another -// system, set $GOOS and $GOARCH to the desired system. For example, if +// system. If you want godoc to display documentation for another +// system, set $GOOS and $GOARCH to the desired system. For example, if // you want to view documentation for freebsd/arm on linux/amd64, set $GOOS // to freebsd and $GOARCH to arm. +// // The primary use of this package is inside other packages that provide a more // portable interface to the system, such as "os", "time" and "net". Use // those packages rather than this one if you can. +// // For details of the functions and data types in this package consult // the manuals for the appropriate operating system. +// // These calls return err == nil to indicate success; otherwise // err represents an operating system error describing the failure and // holds a value of type syscall.ErrorString. diff --git a/vendor/golang.org/x/sys/plan9/syscall_plan9.go b/vendor/golang.org/x/sys/plan9/syscall_plan9.go index d39d07d..84e1471 100644 --- a/vendor/golang.org/x/sys/plan9/syscall_plan9.go +++ b/vendor/golang.org/x/sys/plan9/syscall_plan9.go @@ -12,6 +12,7 @@ package plan9 import ( + "bytes" "syscall" "unsafe" ) @@ -50,12 +51,11 @@ func atoi(b []byte) (n uint) { } func cstring(s []byte) string { - for i := range s { - if s[i] == 0 { - return string(s[0:i]) - } + i := bytes.IndexByte(s, 0) + if i == -1 { + i = len(s) } - return string(s) + return string(s[:i]) } func errstr() string { diff --git a/vendor/golang.org/x/sys/plan9/zsyscall_plan9_arm.go b/vendor/golang.org/x/sys/plan9/zsyscall_plan9_arm.go new file mode 100644 index 0000000..8dd8723 --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/zsyscall_plan9_arm.go @@ -0,0 +1,284 @@ +// mksyscall.pl -l32 -plan9 -tags plan9,arm syscall_plan9.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build plan9,arm + +package plan9 + +import "unsafe" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fd2path(fd int, buf []byte) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_FD2PATH, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]int32) (err error) { + r0, _, e1 := Syscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func await(s []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(s) > 0 { + _p0 = unsafe.Pointer(&s[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_AWAIT, uintptr(_p0), uintptr(len(s)), 0) + n = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func open(path string, mode int) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + fd = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func create(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func remove(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_REMOVE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func stat(path string, edir []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(edir) > 0 { + _p1 = unsafe.Pointer(&edir[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(edir))) + n = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(name string, old string, flag int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(old) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_BIND, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flag)) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(fd int, afd int, old string, flag int, aname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(old) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(aname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_MOUNT, uintptr(fd), uintptr(afd), uintptr(unsafe.Pointer(_p0)), uintptr(flag), uintptr(unsafe.Pointer(_p1)), 0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wstat(path string, edir []byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(edir) > 0 { + _p1 = unsafe.Pointer(&edir[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(edir))) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int, newfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), uintptr(newfd), 0) + fd = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + r0, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, edir []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(edir) > 0 { + _p0 = unsafe.Pointer(&edir[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(_p0), uintptr(len(edir))) + n = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fwstat(fd int, edir []byte) (err error) { + var _p0 unsafe.Pointer + if len(edir) > 0 { + _p0 = unsafe.Pointer(&edir[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_FWSTAT, uintptr(fd), uintptr(_p0), uintptr(len(edir))) + if int32(r0) == -1 { + err = e1 + } + return +} diff --git a/vendor/golang.org/x/sys/unix/.gitignore b/vendor/golang.org/x/sys/unix/.gitignore index e482715..e3e0fc6 100644 --- a/vendor/golang.org/x/sys/unix/.gitignore +++ b/vendor/golang.org/x/sys/unix/.gitignore @@ -1 +1,2 @@ _obj/ +unix.test diff --git a/vendor/golang.org/x/sys/unix/affinity_linux.go b/vendor/golang.org/x/sys/unix/affinity_linux.go new file mode 100644 index 0000000..72afe33 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/affinity_linux.go @@ -0,0 +1,124 @@ +// Copyright 2018 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. + +// CPU affinity functions + +package unix + +import ( + "unsafe" +) + +const cpuSetSize = _CPU_SETSIZE / _NCPUBITS + +// CPUSet represents a CPU affinity mask. +type CPUSet [cpuSetSize]cpuMask + +func schedAffinity(trap uintptr, pid int, set *CPUSet) error { + _, _, e := RawSyscall(trap, uintptr(pid), uintptr(unsafe.Sizeof(*set)), uintptr(unsafe.Pointer(set))) + if e != 0 { + return errnoErr(e) + } + return nil +} + +// SchedGetaffinity gets the CPU affinity mask of the thread specified by pid. +// If pid is 0 the calling thread is used. +func SchedGetaffinity(pid int, set *CPUSet) error { + return schedAffinity(SYS_SCHED_GETAFFINITY, pid, set) +} + +// SchedSetaffinity sets the CPU affinity mask of the thread specified by pid. +// If pid is 0 the calling thread is used. +func SchedSetaffinity(pid int, set *CPUSet) error { + return schedAffinity(SYS_SCHED_SETAFFINITY, pid, set) +} + +// Zero clears the set s, so that it contains no CPUs. +func (s *CPUSet) Zero() { + for i := range s { + s[i] = 0 + } +} + +func cpuBitsIndex(cpu int) int { + return cpu / _NCPUBITS +} + +func cpuBitsMask(cpu int) cpuMask { + return cpuMask(1 << (uint(cpu) % _NCPUBITS)) +} + +// Set adds cpu to the set s. +func (s *CPUSet) Set(cpu int) { + i := cpuBitsIndex(cpu) + if i < len(s) { + s[i] |= cpuBitsMask(cpu) + } +} + +// Clear removes cpu from the set s. +func (s *CPUSet) Clear(cpu int) { + i := cpuBitsIndex(cpu) + if i < len(s) { + s[i] &^= cpuBitsMask(cpu) + } +} + +// IsSet reports whether cpu is in the set s. +func (s *CPUSet) IsSet(cpu int) bool { + i := cpuBitsIndex(cpu) + if i < len(s) { + return s[i]&cpuBitsMask(cpu) != 0 + } + return false +} + +// Count returns the number of CPUs in the set s. +func (s *CPUSet) Count() int { + c := 0 + for _, b := range s { + c += onesCount64(uint64(b)) + } + return c +} + +// onesCount64 is a copy of Go 1.9's math/bits.OnesCount64. +// Once this package can require Go 1.9, we can delete this +// and update the caller to use bits.OnesCount64. +func onesCount64(x uint64) int { + const m0 = 0x5555555555555555 // 01010101 ... + const m1 = 0x3333333333333333 // 00110011 ... + const m2 = 0x0f0f0f0f0f0f0f0f // 00001111 ... + const m3 = 0x00ff00ff00ff00ff // etc. + const m4 = 0x0000ffff0000ffff + + // Implementation: Parallel summing of adjacent bits. + // See "Hacker's Delight", Chap. 5: Counting Bits. + // The following pattern shows the general approach: + // + // x = x>>1&(m0&m) + x&(m0&m) + // x = x>>2&(m1&m) + x&(m1&m) + // x = x>>4&(m2&m) + x&(m2&m) + // x = x>>8&(m3&m) + x&(m3&m) + // x = x>>16&(m4&m) + x&(m4&m) + // x = x>>32&(m5&m) + x&(m5&m) + // return int(x) + // + // Masking (& operations) can be left away when there's no + // danger that a field's sum will carry over into the next + // field: Since the result cannot be > 64, 8 bits is enough + // and we can ignore the masks for the shifts by 8 and up. + // Per "Hacker's Delight", the first line can be simplified + // more, but it saves at best one instruction, so we leave + // it alone for clarity. + const m = 1<<64 - 1 + x = x>>1&(m0&m) + x&(m0&m) + x = x>>2&(m1&m) + x&(m1&m) + x = (x>>4 + x) & (m2 & m) + x += x >> 8 + x += x >> 16 + x += x >> 32 + return int(x) & (1<<7 - 1) +} diff --git a/vendor/golang.org/x/sys/unix/asm_linux_386.s b/vendor/golang.org/x/sys/unix/asm_linux_386.s index 4db2909..448bebb 100644 --- a/vendor/golang.org/x/sys/unix/asm_linux_386.s +++ b/vendor/golang.org/x/sys/unix/asm_linux_386.s @@ -10,21 +10,51 @@ // System calls for 386, Linux // +// See ../runtime/sys_linux_386.s for the reason why we always use int 0x80 +// instead of the glibc-specific "CALL 0x10(GS)". +#define INVOKE_SYSCALL INT $0x80 + // Just jump to package syscall's implementation for all these functions. // The runtime may know about them. -TEXT ·Syscall(SB),NOSPLIT,$0-28 +TEXT ·Syscall(SB),NOSPLIT,$0-28 JMP syscall·Syscall(SB) -TEXT ·Syscall6(SB),NOSPLIT,$0-40 +TEXT ·Syscall6(SB),NOSPLIT,$0-40 JMP syscall·Syscall6(SB) +TEXT ·SyscallNoError(SB),NOSPLIT,$0-24 + CALL runtime·entersyscall(SB) + MOVL trap+0(FP), AX // syscall entry + MOVL a1+4(FP), BX + MOVL a2+8(FP), CX + MOVL a3+12(FP), DX + MOVL $0, SI + MOVL $0, DI + INVOKE_SYSCALL + MOVL AX, r1+16(FP) + MOVL DX, r2+20(FP) + CALL runtime·exitsyscall(SB) + RET + TEXT ·RawSyscall(SB),NOSPLIT,$0-28 JMP syscall·RawSyscall(SB) -TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 JMP syscall·RawSyscall6(SB) +TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24 + MOVL trap+0(FP), AX // syscall entry + MOVL a1+4(FP), BX + MOVL a2+8(FP), CX + MOVL a3+12(FP), DX + MOVL $0, SI + MOVL $0, DI + INVOKE_SYSCALL + MOVL AX, r1+16(FP) + MOVL DX, r2+20(FP) + RET + TEXT ·socketcall(SB),NOSPLIT,$0-36 JMP syscall·socketcall(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_amd64.s b/vendor/golang.org/x/sys/unix/asm_linux_amd64.s index 44e25c6..c6468a9 100644 --- a/vendor/golang.org/x/sys/unix/asm_linux_amd64.s +++ b/vendor/golang.org/x/sys/unix/asm_linux_amd64.s @@ -13,17 +13,45 @@ // Just jump to package syscall's implementation for all these functions. // The runtime may know about them. -TEXT ·Syscall(SB),NOSPLIT,$0-56 +TEXT ·Syscall(SB),NOSPLIT,$0-56 JMP syscall·Syscall(SB) TEXT ·Syscall6(SB),NOSPLIT,$0-80 JMP syscall·Syscall6(SB) +TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 + CALL runtime·entersyscall(SB) + MOVQ a1+8(FP), DI + MOVQ a2+16(FP), SI + MOVQ a3+24(FP), DX + MOVQ $0, R10 + MOVQ $0, R8 + MOVQ $0, R9 + MOVQ trap+0(FP), AX // syscall entry + SYSCALL + MOVQ AX, r1+32(FP) + MOVQ DX, r2+40(FP) + CALL runtime·exitsyscall(SB) + RET + TEXT ·RawSyscall(SB),NOSPLIT,$0-56 JMP syscall·RawSyscall(SB) TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 JMP syscall·RawSyscall6(SB) +TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48 + MOVQ a1+8(FP), DI + MOVQ a2+16(FP), SI + MOVQ a3+24(FP), DX + MOVQ $0, R10 + MOVQ $0, R8 + MOVQ $0, R9 + MOVQ trap+0(FP), AX // syscall entry + SYSCALL + MOVQ AX, r1+32(FP) + MOVQ DX, r2+40(FP) + RET + TEXT ·gettimeofday(SB),NOSPLIT,$0-16 JMP syscall·gettimeofday(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_arm.s b/vendor/golang.org/x/sys/unix/asm_linux_arm.s index cf0b574..cf0f357 100644 --- a/vendor/golang.org/x/sys/unix/asm_linux_arm.s +++ b/vendor/golang.org/x/sys/unix/asm_linux_arm.s @@ -13,17 +13,44 @@ // Just jump to package syscall's implementation for all these functions. // The runtime may know about them. -TEXT ·Syscall(SB),NOSPLIT,$0-28 +TEXT ·Syscall(SB),NOSPLIT,$0-28 B syscall·Syscall(SB) -TEXT ·Syscall6(SB),NOSPLIT,$0-40 +TEXT ·Syscall6(SB),NOSPLIT,$0-40 B syscall·Syscall6(SB) +TEXT ·SyscallNoError(SB),NOSPLIT,$0-24 + BL runtime·entersyscall(SB) + MOVW trap+0(FP), R7 + MOVW a1+4(FP), R0 + MOVW a2+8(FP), R1 + MOVW a3+12(FP), R2 + MOVW $0, R3 + MOVW $0, R4 + MOVW $0, R5 + SWI $0 + MOVW R0, r1+16(FP) + MOVW $0, R0 + MOVW R0, r2+20(FP) + BL runtime·exitsyscall(SB) + RET + TEXT ·RawSyscall(SB),NOSPLIT,$0-28 B syscall·RawSyscall(SB) -TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 B syscall·RawSyscall6(SB) -TEXT ·seek(SB),NOSPLIT,$0-32 +TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24 + MOVW trap+0(FP), R7 // syscall entry + MOVW a1+4(FP), R0 + MOVW a2+8(FP), R1 + MOVW a3+12(FP), R2 + SWI $0 + MOVW R0, r1+16(FP) + MOVW $0, R0 + MOVW R0, r2+20(FP) + RET + +TEXT ·seek(SB),NOSPLIT,$0-28 B syscall·seek(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_arm64.s b/vendor/golang.org/x/sys/unix/asm_linux_arm64.s index 4be9bfe..afe6fdf 100644 --- a/vendor/golang.org/x/sys/unix/asm_linux_arm64.s +++ b/vendor/golang.org/x/sys/unix/asm_linux_arm64.s @@ -11,14 +11,42 @@ // Just jump to package syscall's implementation for all these functions. // The runtime may know about them. -TEXT ·Syscall(SB),NOSPLIT,$0-56 +TEXT ·Syscall(SB),NOSPLIT,$0-56 B syscall·Syscall(SB) TEXT ·Syscall6(SB),NOSPLIT,$0-80 B syscall·Syscall6(SB) +TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 + BL runtime·entersyscall(SB) + MOVD a1+8(FP), R0 + MOVD a2+16(FP), R1 + MOVD a3+24(FP), R2 + MOVD $0, R3 + MOVD $0, R4 + MOVD $0, R5 + MOVD trap+0(FP), R8 // syscall entry + SVC + MOVD R0, r1+32(FP) // r1 + MOVD R1, r2+40(FP) // r2 + BL runtime·exitsyscall(SB) + RET + TEXT ·RawSyscall(SB),NOSPLIT,$0-56 B syscall·RawSyscall(SB) TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 B syscall·RawSyscall6(SB) + +TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48 + MOVD a1+8(FP), R0 + MOVD a2+16(FP), R1 + MOVD a3+24(FP), R2 + MOVD $0, R3 + MOVD $0, R4 + MOVD $0, R5 + MOVD trap+0(FP), R8 // syscall entry + SVC + MOVD R0, r1+32(FP) + MOVD R1, r2+40(FP) + RET diff --git a/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s b/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s index 724e580..ab9d638 100644 --- a/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s +++ b/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s @@ -15,14 +15,42 @@ // Just jump to package syscall's implementation for all these functions. // The runtime may know about them. -TEXT ·Syscall(SB),NOSPLIT,$0-56 +TEXT ·Syscall(SB),NOSPLIT,$0-56 JMP syscall·Syscall(SB) -TEXT ·Syscall6(SB),NOSPLIT,$0-80 +TEXT ·Syscall6(SB),NOSPLIT,$0-80 JMP syscall·Syscall6(SB) -TEXT ·RawSyscall(SB),NOSPLIT,$0-56 +TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 + JAL runtime·entersyscall(SB) + MOVV a1+8(FP), R4 + MOVV a2+16(FP), R5 + MOVV a3+24(FP), R6 + MOVV R0, R7 + MOVV R0, R8 + MOVV R0, R9 + MOVV trap+0(FP), R2 // syscall entry + SYSCALL + MOVV R2, r1+32(FP) + MOVV R3, r2+40(FP) + JAL runtime·exitsyscall(SB) + RET + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 JMP syscall·RawSyscall(SB) -TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 JMP syscall·RawSyscall6(SB) + +TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48 + MOVV a1+8(FP), R4 + MOVV a2+16(FP), R5 + MOVV a3+24(FP), R6 + MOVV R0, R7 + MOVV R0, R8 + MOVV R0, R9 + MOVV trap+0(FP), R2 // syscall entry + SYSCALL + MOVV R2, r1+32(FP) + MOVV R3, r2+40(FP) + RET diff --git a/vendor/golang.org/x/sys/unix/asm_linux_mipsx.s b/vendor/golang.org/x/sys/unix/asm_linux_mipsx.s index 2ea4257..99e5399 100644 --- a/vendor/golang.org/x/sys/unix/asm_linux_mipsx.s +++ b/vendor/golang.org/x/sys/unix/asm_linux_mipsx.s @@ -15,17 +15,40 @@ // Just jump to package syscall's implementation for all these functions. // The runtime may know about them. -TEXT ·Syscall(SB),NOSPLIT,$0-28 +TEXT ·Syscall(SB),NOSPLIT,$0-28 JMP syscall·Syscall(SB) -TEXT ·Syscall6(SB),NOSPLIT,$0-40 +TEXT ·Syscall6(SB),NOSPLIT,$0-40 JMP syscall·Syscall6(SB) -TEXT ·Syscall9(SB),NOSPLIT,$0-52 +TEXT ·Syscall9(SB),NOSPLIT,$0-52 JMP syscall·Syscall9(SB) -TEXT ·RawSyscall(SB),NOSPLIT,$0-28 +TEXT ·SyscallNoError(SB),NOSPLIT,$0-24 + JAL runtime·entersyscall(SB) + MOVW a1+4(FP), R4 + MOVW a2+8(FP), R5 + MOVW a3+12(FP), R6 + MOVW R0, R7 + MOVW trap+0(FP), R2 // syscall entry + SYSCALL + MOVW R2, r1+16(FP) // r1 + MOVW R3, r2+20(FP) // r2 + JAL runtime·exitsyscall(SB) + RET + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 JMP syscall·RawSyscall(SB) -TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 JMP syscall·RawSyscall6(SB) + +TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24 + MOVW a1+4(FP), R4 + MOVW a2+8(FP), R5 + MOVW a3+12(FP), R6 + MOVW trap+0(FP), R2 // syscall entry + SYSCALL + MOVW R2, r1+16(FP) + MOVW R3, r2+20(FP) + RET diff --git a/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s b/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s index 8d231fe..649e587 100644 --- a/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s +++ b/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s @@ -15,14 +15,42 @@ // Just jump to package syscall's implementation for all these functions. // The runtime may know about them. -TEXT ·Syscall(SB),NOSPLIT,$0-56 +TEXT ·Syscall(SB),NOSPLIT,$0-56 BR syscall·Syscall(SB) TEXT ·Syscall6(SB),NOSPLIT,$0-80 BR syscall·Syscall6(SB) +TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 + BL runtime·entersyscall(SB) + MOVD a1+8(FP), R3 + MOVD a2+16(FP), R4 + MOVD a3+24(FP), R5 + MOVD R0, R6 + MOVD R0, R7 + MOVD R0, R8 + MOVD trap+0(FP), R9 // syscall entry + SYSCALL R9 + MOVD R3, r1+32(FP) + MOVD R4, r2+40(FP) + BL runtime·exitsyscall(SB) + RET + TEXT ·RawSyscall(SB),NOSPLIT,$0-56 BR syscall·RawSyscall(SB) TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 BR syscall·RawSyscall6(SB) + +TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48 + MOVD a1+8(FP), R3 + MOVD a2+16(FP), R4 + MOVD a3+24(FP), R5 + MOVD R0, R6 + MOVD R0, R7 + MOVD R0, R8 + MOVD trap+0(FP), R9 // syscall entry + SYSCALL R9 + MOVD R3, r1+32(FP) + MOVD R4, r2+40(FP) + RET diff --git a/vendor/golang.org/x/sys/unix/asm_linux_s390x.s b/vendor/golang.org/x/sys/unix/asm_linux_s390x.s index 1188985..a5a863c 100644 --- a/vendor/golang.org/x/sys/unix/asm_linux_s390x.s +++ b/vendor/golang.org/x/sys/unix/asm_linux_s390x.s @@ -21,8 +21,36 @@ TEXT ·Syscall(SB),NOSPLIT,$0-56 TEXT ·Syscall6(SB),NOSPLIT,$0-80 BR syscall·Syscall6(SB) +TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 + BL runtime·entersyscall(SB) + MOVD a1+8(FP), R2 + MOVD a2+16(FP), R3 + MOVD a3+24(FP), R4 + MOVD $0, R5 + MOVD $0, R6 + MOVD $0, R7 + MOVD trap+0(FP), R1 // syscall entry + SYSCALL + MOVD R2, r1+32(FP) + MOVD R3, r2+40(FP) + BL runtime·exitsyscall(SB) + RET + TEXT ·RawSyscall(SB),NOSPLIT,$0-56 BR syscall·RawSyscall(SB) TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 BR syscall·RawSyscall6(SB) + +TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48 + MOVD a1+8(FP), R2 + MOVD a2+16(FP), R3 + MOVD a3+24(FP), R4 + MOVD $0, R5 + MOVD $0, R6 + MOVD $0, R7 + MOVD trap+0(FP), R1 // syscall entry + SYSCALL + MOVD R2, r1+32(FP) + MOVD R3, r2+40(FP) + RET diff --git a/vendor/golang.org/x/sys/unix/asm_openbsd_arm.s b/vendor/golang.org/x/sys/unix/asm_openbsd_arm.s new file mode 100644 index 0000000..469bfa1 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_openbsd_arm.s @@ -0,0 +1,29 @@ +// Copyright 2017 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 !gccgo + +#include "textflag.h" + +// +// System call support for ARM, OpenBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + B syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + B syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + B syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + B syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + B syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/cap_freebsd.go b/vendor/golang.org/x/sys/unix/cap_freebsd.go new file mode 100644 index 0000000..83b6bce --- /dev/null +++ b/vendor/golang.org/x/sys/unix/cap_freebsd.go @@ -0,0 +1,195 @@ +// Copyright 2017 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 freebsd + +package unix + +import ( + errorspkg "errors" + "fmt" +) + +// Go implementation of C mostly found in /usr/src/sys/kern/subr_capability.c + +const ( + // This is the version of CapRights this package understands. See C implementation for parallels. + capRightsGoVersion = CAP_RIGHTS_VERSION_00 + capArSizeMin = CAP_RIGHTS_VERSION_00 + 2 + capArSizeMax = capRightsGoVersion + 2 +) + +var ( + bit2idx = []int{ + -1, 0, 1, -1, 2, -1, -1, -1, 3, -1, -1, -1, -1, -1, -1, -1, + 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + } +) + +func capidxbit(right uint64) int { + return int((right >> 57) & 0x1f) +} + +func rightToIndex(right uint64) (int, error) { + idx := capidxbit(right) + if idx < 0 || idx >= len(bit2idx) { + return -2, fmt.Errorf("index for right 0x%x out of range", right) + } + return bit2idx[idx], nil +} + +func caprver(right uint64) int { + return int(right >> 62) +} + +func capver(rights *CapRights) int { + return caprver(rights.Rights[0]) +} + +func caparsize(rights *CapRights) int { + return capver(rights) + 2 +} + +// CapRightsSet sets the permissions in setrights in rights. +func CapRightsSet(rights *CapRights, setrights []uint64) error { + // This is essentially a copy of cap_rights_vset() + if capver(rights) != CAP_RIGHTS_VERSION_00 { + return fmt.Errorf("bad rights version %d", capver(rights)) + } + + n := caparsize(rights) + if n < capArSizeMin || n > capArSizeMax { + return errorspkg.New("bad rights size") + } + + for _, right := range setrights { + if caprver(right) != CAP_RIGHTS_VERSION_00 { + return errorspkg.New("bad right version") + } + i, err := rightToIndex(right) + if err != nil { + return err + } + if i >= n { + return errorspkg.New("index overflow") + } + if capidxbit(rights.Rights[i]) != capidxbit(right) { + return errorspkg.New("index mismatch") + } + rights.Rights[i] |= right + if capidxbit(rights.Rights[i]) != capidxbit(right) { + return errorspkg.New("index mismatch (after assign)") + } + } + + return nil +} + +// CapRightsClear clears the permissions in clearrights from rights. +func CapRightsClear(rights *CapRights, clearrights []uint64) error { + // This is essentially a copy of cap_rights_vclear() + if capver(rights) != CAP_RIGHTS_VERSION_00 { + return fmt.Errorf("bad rights version %d", capver(rights)) + } + + n := caparsize(rights) + if n < capArSizeMin || n > capArSizeMax { + return errorspkg.New("bad rights size") + } + + for _, right := range clearrights { + if caprver(right) != CAP_RIGHTS_VERSION_00 { + return errorspkg.New("bad right version") + } + i, err := rightToIndex(right) + if err != nil { + return err + } + if i >= n { + return errorspkg.New("index overflow") + } + if capidxbit(rights.Rights[i]) != capidxbit(right) { + return errorspkg.New("index mismatch") + } + rights.Rights[i] &= ^(right & 0x01FFFFFFFFFFFFFF) + if capidxbit(rights.Rights[i]) != capidxbit(right) { + return errorspkg.New("index mismatch (after assign)") + } + } + + return nil +} + +// CapRightsIsSet checks whether all the permissions in setrights are present in rights. +func CapRightsIsSet(rights *CapRights, setrights []uint64) (bool, error) { + // This is essentially a copy of cap_rights_is_vset() + if capver(rights) != CAP_RIGHTS_VERSION_00 { + return false, fmt.Errorf("bad rights version %d", capver(rights)) + } + + n := caparsize(rights) + if n < capArSizeMin || n > capArSizeMax { + return false, errorspkg.New("bad rights size") + } + + for _, right := range setrights { + if caprver(right) != CAP_RIGHTS_VERSION_00 { + return false, errorspkg.New("bad right version") + } + i, err := rightToIndex(right) + if err != nil { + return false, err + } + if i >= n { + return false, errorspkg.New("index overflow") + } + if capidxbit(rights.Rights[i]) != capidxbit(right) { + return false, errorspkg.New("index mismatch") + } + if (rights.Rights[i] & right) != right { + return false, nil + } + } + + return true, nil +} + +func capright(idx uint64, bit uint64) uint64 { + return ((1 << (57 + idx)) | bit) +} + +// CapRightsInit returns a pointer to an initialised CapRights structure filled with rights. +// See man cap_rights_init(3) and rights(4). +func CapRightsInit(rights []uint64) (*CapRights, error) { + var r CapRights + r.Rights[0] = (capRightsGoVersion << 62) | capright(0, 0) + r.Rights[1] = capright(1, 0) + + err := CapRightsSet(&r, rights) + if err != nil { + return nil, err + } + return &r, nil +} + +// CapRightsLimit reduces the operations permitted on fd to at most those contained in rights. +// The capability rights on fd can never be increased by CapRightsLimit. +// See man cap_rights_limit(2) and rights(4). +func CapRightsLimit(fd uintptr, rights *CapRights) error { + return capRightsLimit(int(fd), rights) +} + +// CapRightsGet returns a CapRights structure containing the operations permitted on fd. +// See man cap_rights_get(3) and rights(4). +func CapRightsGet(fd uintptr) (*CapRights, error) { + r, err := CapRightsInit(nil) + if err != nil { + return nil, err + } + err = capRightsGet(capRightsGoVersion, int(fd), r) + if err != nil { + return nil, err + } + return r, nil +} diff --git a/vendor/golang.org/x/sys/unix/creds_test.go b/vendor/golang.org/x/sys/unix/creds_test.go index eaae7c3..6b292b1 100644 --- a/vendor/golang.org/x/sys/unix/creds_test.go +++ b/vendor/golang.org/x/sys/unix/creds_test.go @@ -1,4 +1,4 @@ -// Copyright 2012 The Go Authors. All rights reserved. +// Copyright 2012 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. @@ -8,6 +8,7 @@ package unix_test import ( "bytes" + "go/build" "net" "os" "syscall" @@ -21,101 +22,131 @@ import ( // sockets. The SO_PASSCRED socket option is enabled on the sending // socket for this to work. func TestSCMCredentials(t *testing.T) { - fds, err := unix.Socketpair(unix.AF_LOCAL, unix.SOCK_STREAM, 0) - if err != nil { - t.Fatalf("Socketpair: %v", err) + socketTypeTests := []struct { + socketType int + dataLen int + }{ + { + unix.SOCK_STREAM, + 1, + }, { + unix.SOCK_DGRAM, + 0, + }, } - defer unix.Close(fds[0]) - defer unix.Close(fds[1]) - err = unix.SetsockoptInt(fds[0], unix.SOL_SOCKET, unix.SO_PASSCRED, 1) - if err != nil { - t.Fatalf("SetsockoptInt: %v", err) - } + for _, tt := range socketTypeTests { + if tt.socketType == unix.SOCK_DGRAM && !atLeast1p10() { + t.Log("skipping DGRAM test on pre-1.10") + continue + } - srvFile := os.NewFile(uintptr(fds[0]), "server") - defer srvFile.Close() - srv, err := net.FileConn(srvFile) - if err != nil { - t.Errorf("FileConn: %v", err) - return - } - defer srv.Close() - - cliFile := os.NewFile(uintptr(fds[1]), "client") - defer cliFile.Close() - cli, err := net.FileConn(cliFile) - if err != nil { - t.Errorf("FileConn: %v", err) - return - } - defer cli.Close() + fds, err := unix.Socketpair(unix.AF_LOCAL, tt.socketType, 0) + if err != nil { + t.Fatalf("Socketpair: %v", err) + } + defer unix.Close(fds[0]) + defer unix.Close(fds[1]) + + err = unix.SetsockoptInt(fds[0], unix.SOL_SOCKET, unix.SO_PASSCRED, 1) + if err != nil { + t.Fatalf("SetsockoptInt: %v", err) + } + + srvFile := os.NewFile(uintptr(fds[0]), "server") + defer srvFile.Close() + srv, err := net.FileConn(srvFile) + if err != nil { + t.Errorf("FileConn: %v", err) + return + } + defer srv.Close() + + cliFile := os.NewFile(uintptr(fds[1]), "client") + defer cliFile.Close() + cli, err := net.FileConn(cliFile) + if err != nil { + t.Errorf("FileConn: %v", err) + return + } + defer cli.Close() + + var ucred unix.Ucred + if os.Getuid() != 0 { + ucred.Pid = int32(os.Getpid()) + ucred.Uid = 0 + ucred.Gid = 0 + oob := unix.UnixCredentials(&ucred) + _, _, err := cli.(*net.UnixConn).WriteMsgUnix(nil, oob, nil) + if op, ok := err.(*net.OpError); ok { + err = op.Err + } + if sys, ok := err.(*os.SyscallError); ok { + err = sys.Err + } + if err != syscall.EPERM { + t.Fatalf("WriteMsgUnix failed with %v, want EPERM", err) + } + } - var ucred unix.Ucred - if os.Getuid() != 0 { ucred.Pid = int32(os.Getpid()) - ucred.Uid = 0 - ucred.Gid = 0 + ucred.Uid = uint32(os.Getuid()) + ucred.Gid = uint32(os.Getgid()) oob := unix.UnixCredentials(&ucred) - _, _, err := cli.(*net.UnixConn).WriteMsgUnix(nil, oob, nil) - if op, ok := err.(*net.OpError); ok { - err = op.Err + + // On SOCK_STREAM, this is internally going to send a dummy byte + n, oobn, err := cli.(*net.UnixConn).WriteMsgUnix(nil, oob, nil) + if err != nil { + t.Fatalf("WriteMsgUnix: %v", err) } - if sys, ok := err.(*os.SyscallError); ok { - err = sys.Err + if n != 0 { + t.Fatalf("WriteMsgUnix n = %d, want 0", n) } - if err != syscall.EPERM { - t.Fatalf("WriteMsgUnix failed with %v, want EPERM", err) + if oobn != len(oob) { + t.Fatalf("WriteMsgUnix oobn = %d, want %d", oobn, len(oob)) } - } - - ucred.Pid = int32(os.Getpid()) - ucred.Uid = uint32(os.Getuid()) - ucred.Gid = uint32(os.Getgid()) - oob := unix.UnixCredentials(&ucred) - // this is going to send a dummy byte - n, oobn, err := cli.(*net.UnixConn).WriteMsgUnix(nil, oob, nil) - if err != nil { - t.Fatalf("WriteMsgUnix: %v", err) - } - if n != 0 { - t.Fatalf("WriteMsgUnix n = %d, want 0", n) - } - if oobn != len(oob) { - t.Fatalf("WriteMsgUnix oobn = %d, want %d", oobn, len(oob)) - } + oob2 := make([]byte, 10*len(oob)) + n, oobn2, flags, _, err := srv.(*net.UnixConn).ReadMsgUnix(nil, oob2) + if err != nil { + t.Fatalf("ReadMsgUnix: %v", err) + } + if flags != 0 { + t.Fatalf("ReadMsgUnix flags = 0x%x, want 0", flags) + } + if n != tt.dataLen { + t.Fatalf("ReadMsgUnix n = %d, want %d", n, tt.dataLen) + } + if oobn2 != oobn { + // without SO_PASSCRED set on the socket, ReadMsgUnix will + // return zero oob bytes + t.Fatalf("ReadMsgUnix oobn = %d, want %d", oobn2, oobn) + } + oob2 = oob2[:oobn2] + if !bytes.Equal(oob, oob2) { + t.Fatal("ReadMsgUnix oob bytes don't match") + } - oob2 := make([]byte, 10*len(oob)) - n, oobn2, flags, _, err := srv.(*net.UnixConn).ReadMsgUnix(nil, oob2) - if err != nil { - t.Fatalf("ReadMsgUnix: %v", err) - } - if flags != 0 { - t.Fatalf("ReadMsgUnix flags = 0x%x, want 0", flags) - } - if n != 1 { - t.Fatalf("ReadMsgUnix n = %d, want 1 (dummy byte)", n) - } - if oobn2 != oobn { - // without SO_PASSCRED set on the socket, ReadMsgUnix will - // return zero oob bytes - t.Fatalf("ReadMsgUnix oobn = %d, want %d", oobn2, oobn) - } - oob2 = oob2[:oobn2] - if !bytes.Equal(oob, oob2) { - t.Fatal("ReadMsgUnix oob bytes don't match") + scm, err := unix.ParseSocketControlMessage(oob2) + if err != nil { + t.Fatalf("ParseSocketControlMessage: %v", err) + } + newUcred, err := unix.ParseUnixCredentials(&scm[0]) + if err != nil { + t.Fatalf("ParseUnixCredentials: %v", err) + } + if *newUcred != ucred { + t.Fatalf("ParseUnixCredentials = %+v, want %+v", newUcred, ucred) + } } +} - scm, err := unix.ParseSocketControlMessage(oob2) - if err != nil { - t.Fatalf("ParseSocketControlMessage: %v", err) - } - newUcred, err := unix.ParseUnixCredentials(&scm[0]) - if err != nil { - t.Fatalf("ParseUnixCredentials: %v", err) - } - if *newUcred != ucred { - t.Fatalf("ParseUnixCredentials = %+v, want %+v", newUcred, ucred) +// atLeast1p10 reports whether we are running on Go 1.10 or later. +func atLeast1p10() bool { + for _, ver := range build.Default.ReleaseTags { + if ver == "go1.10" { + return true + } } + return false } diff --git a/vendor/golang.org/x/sys/unix/dev_darwin.go b/vendor/golang.org/x/sys/unix/dev_darwin.go new file mode 100644 index 0000000..8d1dc0f --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_darwin.go @@ -0,0 +1,24 @@ +// Copyright 2017 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. + +// Functions to access/create device major and minor numbers matching the +// encoding used in Darwin's sys/types.h header. + +package unix + +// Major returns the major component of a Darwin device number. +func Major(dev uint64) uint32 { + return uint32((dev >> 24) & 0xff) +} + +// Minor returns the minor component of a Darwin device number. +func Minor(dev uint64) uint32 { + return uint32(dev & 0xffffff) +} + +// Mkdev returns a Darwin device number generated from the given major and minor +// components. +func Mkdev(major, minor uint32) uint64 { + return (uint64(major) << 24) | uint64(minor) +} diff --git a/vendor/golang.org/x/sys/unix/dev_darwin_test.go b/vendor/golang.org/x/sys/unix/dev_darwin_test.go new file mode 100644 index 0000000..bf1adf3 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_darwin_test.go @@ -0,0 +1,51 @@ +// Copyright 2017 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 go1.7 + +package unix_test + +import ( + "fmt" + "testing" + + "golang.org/x/sys/unix" +) + +func TestDevices(t *testing.T) { + testCases := []struct { + path string + major uint32 + minor uint32 + }{ + // Most of the device major/minor numbers on Darwin are + // dynamically generated by devfs. These are some well-known + // static numbers. + {"/dev/ttyp0", 4, 0}, + {"/dev/ttys0", 4, 48}, + {"/dev/ptyp0", 5, 0}, + {"/dev/ptyr0", 5, 32}, + } + for _, tc := range testCases { + t.Run(fmt.Sprintf("%s %v:%v", tc.path, tc.major, tc.minor), func(t *testing.T) { + var stat unix.Stat_t + err := unix.Stat(tc.path, &stat) + if err != nil { + t.Errorf("failed to stat device: %v", err) + return + } + + dev := uint64(stat.Rdev) + if unix.Major(dev) != tc.major { + t.Errorf("for %s Major(%#x) == %d, want %d", tc.path, dev, unix.Major(dev), tc.major) + } + if unix.Minor(dev) != tc.minor { + t.Errorf("for %s Minor(%#x) == %d, want %d", tc.path, dev, unix.Minor(dev), tc.minor) + } + if unix.Mkdev(tc.major, tc.minor) != dev { + t.Errorf("for %s Mkdev(%d, %d) == %#x, want %#x", tc.path, tc.major, tc.minor, unix.Mkdev(tc.major, tc.minor), dev) + } + }) + } +} diff --git a/vendor/golang.org/x/sys/unix/dev_dragonfly.go b/vendor/golang.org/x/sys/unix/dev_dragonfly.go new file mode 100644 index 0000000..8502f20 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_dragonfly.go @@ -0,0 +1,30 @@ +// Copyright 2017 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. + +// Functions to access/create device major and minor numbers matching the +// encoding used in Dragonfly's sys/types.h header. +// +// The information below is extracted and adapted from sys/types.h: +// +// Minor gives a cookie instead of an index since in order to avoid changing the +// meanings of bits 0-15 or wasting time and space shifting bits 16-31 for +// devices that don't use them. + +package unix + +// Major returns the major component of a DragonFlyBSD device number. +func Major(dev uint64) uint32 { + return uint32((dev >> 8) & 0xff) +} + +// Minor returns the minor component of a DragonFlyBSD device number. +func Minor(dev uint64) uint32 { + return uint32(dev & 0xffff00ff) +} + +// Mkdev returns a DragonFlyBSD device number generated from the given major and +// minor components. +func Mkdev(major, minor uint32) uint64 { + return (uint64(major) << 8) | uint64(minor) +} diff --git a/vendor/golang.org/x/sys/unix/dev_dragonfly_test.go b/vendor/golang.org/x/sys/unix/dev_dragonfly_test.go new file mode 100644 index 0000000..9add376 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_dragonfly_test.go @@ -0,0 +1,50 @@ +// Copyright 2017 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 go1.7 + +package unix_test + +import ( + "fmt" + "testing" + + "golang.org/x/sys/unix" +) + +func TestDevices(t *testing.T) { + testCases := []struct { + path string + major uint32 + minor uint32 + }{ + // Minor is a cookie instead of an index on DragonFlyBSD + {"/dev/null", 10, 0x00000002}, + {"/dev/random", 10, 0x00000003}, + {"/dev/urandom", 10, 0x00000004}, + {"/dev/zero", 10, 0x0000000c}, + {"/dev/bpf", 15, 0xffff00ff}, + } + for _, tc := range testCases { + t.Run(fmt.Sprintf("%s %v:%v", tc.path, tc.major, tc.minor), func(t *testing.T) { + var stat unix.Stat_t + err := unix.Stat(tc.path, &stat) + if err != nil { + t.Errorf("failed to stat device: %v", err) + return + } + + dev := uint64(stat.Rdev) + if unix.Major(dev) != tc.major { + t.Errorf("for %s Major(%#x) == %d, want %d", tc.path, dev, unix.Major(dev), tc.major) + } + if unix.Minor(dev) != tc.minor { + t.Errorf("for %s Minor(%#x) == %d, want %d", tc.path, dev, unix.Minor(dev), tc.minor) + } + if unix.Mkdev(tc.major, tc.minor) != dev { + t.Errorf("for %s Mkdev(%d, %d) == %#x, want %#x", tc.path, tc.major, tc.minor, unix.Mkdev(tc.major, tc.minor), dev) + } + }) + } +} diff --git a/vendor/golang.org/x/sys/unix/dev_freebsd.go b/vendor/golang.org/x/sys/unix/dev_freebsd.go new file mode 100644 index 0000000..eba3b4b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_freebsd.go @@ -0,0 +1,30 @@ +// Copyright 2017 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. + +// Functions to access/create device major and minor numbers matching the +// encoding used in FreeBSD's sys/types.h header. +// +// The information below is extracted and adapted from sys/types.h: +// +// Minor gives a cookie instead of an index since in order to avoid changing the +// meanings of bits 0-15 or wasting time and space shifting bits 16-31 for +// devices that don't use them. + +package unix + +// Major returns the major component of a FreeBSD device number. +func Major(dev uint64) uint32 { + return uint32((dev >> 8) & 0xff) +} + +// Minor returns the minor component of a FreeBSD device number. +func Minor(dev uint64) uint32 { + return uint32(dev & 0xffff00ff) +} + +// Mkdev returns a FreeBSD device number generated from the given major and +// minor components. +func Mkdev(major, minor uint32) uint64 { + return (uint64(major) << 8) | uint64(minor) +} diff --git a/vendor/golang.org/x/sys/unix/dev_linux.go b/vendor/golang.org/x/sys/unix/dev_linux.go new file mode 100644 index 0000000..d165d6f --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_linux.go @@ -0,0 +1,42 @@ +// Copyright 2017 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. + +// Functions to access/create device major and minor numbers matching the +// encoding used by the Linux kernel and glibc. +// +// The information below is extracted and adapted from bits/sysmacros.h in the +// glibc sources: +// +// dev_t in glibc is 64-bit, with 32-bit major and minor numbers. glibc's +// default encoding is MMMM Mmmm mmmM MMmm, where M is a hex digit of the major +// number and m is a hex digit of the minor number. This is backward compatible +// with legacy systems where dev_t is 16 bits wide, encoded as MMmm. It is also +// backward compatible with the Linux kernel, which for some architectures uses +// 32-bit dev_t, encoded as mmmM MMmm. + +package unix + +// Major returns the major component of a Linux device number. +func Major(dev uint64) uint32 { + major := uint32((dev & 0x00000000000fff00) >> 8) + major |= uint32((dev & 0xfffff00000000000) >> 32) + return major +} + +// Minor returns the minor component of a Linux device number. +func Minor(dev uint64) uint32 { + minor := uint32((dev & 0x00000000000000ff) >> 0) + minor |= uint32((dev & 0x00000ffffff00000) >> 12) + return minor +} + +// Mkdev returns a Linux device number generated from the given major and minor +// components. +func Mkdev(major, minor uint32) uint64 { + dev := (uint64(major) & 0x00000fff) << 8 + dev |= (uint64(major) & 0xfffff000) << 32 + dev |= (uint64(minor) & 0x000000ff) << 0 + dev |= (uint64(minor) & 0xffffff00) << 12 + return dev +} diff --git a/vendor/golang.org/x/sys/unix/dev_linux_test.go b/vendor/golang.org/x/sys/unix/dev_linux_test.go new file mode 100644 index 0000000..2fd3ead --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_linux_test.go @@ -0,0 +1,53 @@ +// Copyright 2017 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 go1.7 + +package unix_test + +import ( + "fmt" + "testing" + + "golang.org/x/sys/unix" +) + +func TestDevices(t *testing.T) { + testCases := []struct { + path string + major uint32 + minor uint32 + }{ + // well known major/minor numbers according to + // https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/admin-guide/devices.txt + {"/dev/null", 1, 3}, + {"/dev/zero", 1, 5}, + {"/dev/random", 1, 8}, + {"/dev/full", 1, 7}, + {"/dev/urandom", 1, 9}, + {"/dev/tty", 5, 0}, + } + for _, tc := range testCases { + t.Run(fmt.Sprintf("%s %v:%v", tc.path, tc.major, tc.minor), func(t *testing.T) { + var stat unix.Stat_t + err := unix.Stat(tc.path, &stat) + if err != nil { + t.Errorf("failed to stat device: %v", err) + return + } + + dev := uint64(stat.Rdev) + if unix.Major(dev) != tc.major { + t.Errorf("for %s Major(%#x) == %d, want %d", tc.path, dev, unix.Major(dev), tc.major) + } + if unix.Minor(dev) != tc.minor { + t.Errorf("for %s Minor(%#x) == %d, want %d", tc.path, dev, unix.Minor(dev), tc.minor) + } + if unix.Mkdev(tc.major, tc.minor) != dev { + t.Errorf("for %s Mkdev(%d, %d) == %#x, want %#x", tc.path, tc.major, tc.minor, unix.Mkdev(tc.major, tc.minor), dev) + } + }) + + } +} diff --git a/vendor/golang.org/x/sys/unix/dev_netbsd.go b/vendor/golang.org/x/sys/unix/dev_netbsd.go new file mode 100644 index 0000000..b4a203d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_netbsd.go @@ -0,0 +1,29 @@ +// Copyright 2017 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. + +// Functions to access/create device major and minor numbers matching the +// encoding used in NetBSD's sys/types.h header. + +package unix + +// Major returns the major component of a NetBSD device number. +func Major(dev uint64) uint32 { + return uint32((dev & 0x000fff00) >> 8) +} + +// Minor returns the minor component of a NetBSD device number. +func Minor(dev uint64) uint32 { + minor := uint32((dev & 0x000000ff) >> 0) + minor |= uint32((dev & 0xfff00000) >> 12) + return minor +} + +// Mkdev returns a NetBSD device number generated from the given major and minor +// components. +func Mkdev(major, minor uint32) uint64 { + dev := (uint64(major) << 8) & 0x000fff00 + dev |= (uint64(minor) << 12) & 0xfff00000 + dev |= (uint64(minor) << 0) & 0x000000ff + return dev +} diff --git a/vendor/golang.org/x/sys/unix/dev_netbsd_test.go b/vendor/golang.org/x/sys/unix/dev_netbsd_test.go new file mode 100644 index 0000000..441058a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_netbsd_test.go @@ -0,0 +1,50 @@ +// Copyright 2017 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 go1.7 + +package unix_test + +import ( + "fmt" + "testing" + + "golang.org/x/sys/unix" +) + +func TestDevices(t *testing.T) { + testCases := []struct { + path string + major uint32 + minor uint32 + }{ + // well known major/minor numbers according to /dev/MAKEDEV on + // NetBSD 8.0 + {"/dev/null", 2, 2}, + {"/dev/zero", 2, 12}, + {"/dev/random", 46, 0}, + {"/dev/urandom", 46, 1}, + } + for _, tc := range testCases { + t.Run(fmt.Sprintf("%s %v:%v", tc.path, tc.major, tc.minor), func(t *testing.T) { + var stat unix.Stat_t + err := unix.Stat(tc.path, &stat) + if err != nil { + t.Errorf("failed to stat device: %v", err) + return + } + + dev := uint64(stat.Rdev) + if unix.Major(dev) != tc.major { + t.Errorf("for %s Major(%#x) == %d, want %d", tc.path, dev, unix.Major(dev), tc.major) + } + if unix.Minor(dev) != tc.minor { + t.Errorf("for %s Minor(%#x) == %d, want %d", tc.path, dev, unix.Minor(dev), tc.minor) + } + if unix.Mkdev(tc.major, tc.minor) != dev { + t.Errorf("for %s Mkdev(%d, %d) == %#x, want %#x", tc.path, tc.major, tc.minor, unix.Mkdev(tc.major, tc.minor), dev) + } + }) + } +} diff --git a/vendor/golang.org/x/sys/unix/dev_openbsd.go b/vendor/golang.org/x/sys/unix/dev_openbsd.go new file mode 100644 index 0000000..f3430c4 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_openbsd.go @@ -0,0 +1,29 @@ +// Copyright 2017 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. + +// Functions to access/create device major and minor numbers matching the +// encoding used in OpenBSD's sys/types.h header. + +package unix + +// Major returns the major component of an OpenBSD device number. +func Major(dev uint64) uint32 { + return uint32((dev & 0x0000ff00) >> 8) +} + +// Minor returns the minor component of an OpenBSD device number. +func Minor(dev uint64) uint32 { + minor := uint32((dev & 0x000000ff) >> 0) + minor |= uint32((dev & 0xffff0000) >> 8) + return minor +} + +// Mkdev returns an OpenBSD device number generated from the given major and minor +// components. +func Mkdev(major, minor uint32) uint64 { + dev := (uint64(major) << 8) & 0x0000ff00 + dev |= (uint64(minor) << 8) & 0xffff0000 + dev |= (uint64(minor) << 0) & 0x000000ff + return dev +} diff --git a/vendor/golang.org/x/sys/unix/dev_openbsd_test.go b/vendor/golang.org/x/sys/unix/dev_openbsd_test.go new file mode 100644 index 0000000..e6cb64f --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_openbsd_test.go @@ -0,0 +1,54 @@ +// Copyright 2017 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 go1.7 + +package unix_test + +import ( + "fmt" + "testing" + + "golang.org/x/sys/unix" +) + +func TestDevices(t *testing.T) { + testCases := []struct { + path string + major uint32 + minor uint32 + }{ + // well known major/minor numbers according to /dev/MAKEDEV on + // OpenBSD 6.0 + {"/dev/null", 2, 2}, + {"/dev/zero", 2, 12}, + {"/dev/ttyp0", 5, 0}, + {"/dev/ttyp1", 5, 1}, + {"/dev/random", 45, 0}, + {"/dev/srandom", 45, 1}, + {"/dev/urandom", 45, 2}, + {"/dev/arandom", 45, 3}, + } + for _, tc := range testCases { + t.Run(fmt.Sprintf("%s %v:%v", tc.path, tc.major, tc.minor), func(t *testing.T) { + var stat unix.Stat_t + err := unix.Stat(tc.path, &stat) + if err != nil { + t.Errorf("failed to stat device: %v", err) + return + } + + dev := uint64(stat.Rdev) + if unix.Major(dev) != tc.major { + t.Errorf("for %s Major(%#x) == %d, want %d", tc.path, dev, unix.Major(dev), tc.major) + } + if unix.Minor(dev) != tc.minor { + t.Errorf("for %s Minor(%#x) == %d, want %d", tc.path, dev, unix.Minor(dev), tc.minor) + } + if unix.Mkdev(tc.major, tc.minor) != dev { + t.Errorf("for %s Mkdev(%d, %d) == %#x, want %#x", tc.path, tc.major, tc.minor, unix.Mkdev(tc.major, tc.minor), dev) + } + }) + } +} diff --git a/vendor/golang.org/x/sys/unix/dev_solaris_test.go b/vendor/golang.org/x/sys/unix/dev_solaris_test.go new file mode 100644 index 0000000..656508c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_solaris_test.go @@ -0,0 +1,51 @@ +// Copyright 2017 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 go1.7 + +package unix_test + +import ( + "fmt" + "testing" + + "golang.org/x/sys/unix" +) + +func TestDevices(t *testing.T) { + testCases := []struct { + path string + major uint32 + minor uint32 + }{ + // Well-known major/minor numbers on OpenSolaris according to + // /etc/name_to_major + {"/dev/zero", 134, 12}, + {"/dev/null", 134, 2}, + {"/dev/ptyp0", 172, 0}, + {"/dev/ttyp0", 175, 0}, + {"/dev/ttyp1", 175, 1}, + } + for _, tc := range testCases { + t.Run(fmt.Sprintf("%s %v:%v", tc.path, tc.major, tc.minor), func(t *testing.T) { + var stat unix.Stat_t + err := unix.Stat(tc.path, &stat) + if err != nil { + t.Errorf("failed to stat device: %v", err) + return + } + + dev := uint64(stat.Rdev) + if unix.Major(dev) != tc.major { + t.Errorf("for %s Major(%#x) == %d, want %d", tc.path, dev, unix.Major(dev), tc.major) + } + if unix.Minor(dev) != tc.minor { + t.Errorf("for %s Minor(%#x) == %d, want %d", tc.path, dev, unix.Minor(dev), tc.minor) + } + if unix.Mkdev(tc.major, tc.minor) != dev { + t.Errorf("for %s Mkdev(%d, %d) == %#x, want %#x", tc.path, tc.major, tc.minor, unix.Mkdev(tc.major, tc.minor), dev) + } + }) + } +} diff --git a/vendor/golang.org/x/sys/unix/dirent.go b/vendor/golang.org/x/sys/unix/dirent.go index bd47581..95fd353 100644 --- a/vendor/golang.org/x/sys/unix/dirent.go +++ b/vendor/golang.org/x/sys/unix/dirent.go @@ -6,97 +6,12 @@ package unix -import "unsafe" - -// readInt returns the size-bytes unsigned integer in native byte order at offset off. -func readInt(b []byte, off, size uintptr) (u uint64, ok bool) { - if len(b) < int(off+size) { - return 0, false - } - if isBigEndian { - return readIntBE(b[off:], size), true - } - return readIntLE(b[off:], size), true -} - -func readIntBE(b []byte, size uintptr) uint64 { - switch size { - case 1: - return uint64(b[0]) - case 2: - _ = b[1] // bounds check hint to compiler; see golang.org/issue/14808 - return uint64(b[1]) | uint64(b[0])<<8 - case 4: - _ = b[3] // bounds check hint to compiler; see golang.org/issue/14808 - return uint64(b[3]) | uint64(b[2])<<8 | uint64(b[1])<<16 | uint64(b[0])<<24 - case 8: - _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808 - return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 | - uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56 - default: - panic("syscall: readInt with unsupported size") - } -} - -func readIntLE(b []byte, size uintptr) uint64 { - switch size { - case 1: - return uint64(b[0]) - case 2: - _ = b[1] // bounds check hint to compiler; see golang.org/issue/14808 - return uint64(b[0]) | uint64(b[1])<<8 - case 4: - _ = b[3] // bounds check hint to compiler; see golang.org/issue/14808 - return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 - case 8: - _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808 - return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | - uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 - default: - panic("syscall: readInt with unsupported size") - } -} +import "syscall" // ParseDirent parses up to max directory entries in buf, // appending the names to names. It returns the number of // bytes consumed from buf, the number of entries added // to names, and the new names slice. func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) { - origlen := len(buf) - count = 0 - for max != 0 && len(buf) > 0 { - reclen, ok := direntReclen(buf) - if !ok || reclen > uint64(len(buf)) { - return origlen, count, names - } - rec := buf[:reclen] - buf = buf[reclen:] - ino, ok := direntIno(rec) - if !ok { - break - } - if ino == 0 { // File absent in directory. - continue - } - const namoff = uint64(unsafe.Offsetof(Dirent{}.Name)) - namlen, ok := direntNamlen(rec) - if !ok || namoff+namlen > uint64(len(rec)) { - break - } - name := rec[namoff : namoff+namlen] - for i, c := range name { - if c == 0 { - name = name[:i] - break - } - } - // Check for useless names before allocating a string. - if string(name) == "." || string(name) == ".." { - continue - } - max-- - count++ - names = append(names, string(name)) - } - return origlen - len(buf), count, names + return syscall.ParseDirent(buf, max, names) } diff --git a/vendor/golang.org/x/sys/unix/env_unix.go b/vendor/golang.org/x/sys/unix/env_unix.go index 45e281a..706b3cd 100644 --- a/vendor/golang.org/x/sys/unix/env_unix.go +++ b/vendor/golang.org/x/sys/unix/env_unix.go @@ -1,4 +1,4 @@ -// Copyright 2010 The Go Authors. All rights reserved. +// Copyright 2010 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. @@ -25,3 +25,7 @@ func Clearenv() { func Environ() []string { return syscall.Environ() } + +func Unsetenv(key string) error { + return syscall.Unsetenv(key) +} diff --git a/vendor/golang.org/x/sys/unix/env_unset.go b/vendor/golang.org/x/sys/unix/env_unset.go deleted file mode 100644 index 9222262..0000000 --- a/vendor/golang.org/x/sys/unix/env_unset.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2014 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 go1.4 - -package unix - -import "syscall" - -func Unsetenv(key string) error { - // This was added in Go 1.4. - return syscall.Unsetenv(key) -} diff --git a/vendor/golang.org/x/sys/unix/errors_freebsd_386.go b/vendor/golang.org/x/sys/unix/errors_freebsd_386.go new file mode 100644 index 0000000..c56bc8b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/errors_freebsd_386.go @@ -0,0 +1,227 @@ +// Copyright 2017 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. + +// Constants that were deprecated or moved to enums in the FreeBSD headers. Keep +// them here for backwards compatibility. + +package unix + +const ( + IFF_SMART = 0x20 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BSC = 0x53 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_IPXIP = 0xf9 + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf6 + IFT_PFSYNC = 0xf7 + IFT_PLC = 0xae + IFT_POS = 0xab + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VOICEEM = 0x64 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IPPROTO_MAXID = 0x34 + IPV6_FAITH = 0x1d + IP_FAITH = 0x16 + MAP_NORESERVE = 0x40 + MAP_RENAME = 0x20 + NET_RT_MAXID = 0x6 + RTF_PRCLONING = 0x10000 + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + SIOCADDRT = 0x8030720a + SIOCALIFADDR = 0x8118691b + SIOCDELRT = 0x8030720b + SIOCDLIFADDR = 0x8118691d + SIOCGLIFADDR = 0xc118691c + SIOCGLIFPHYADDR = 0xc118694b + SIOCSLIFPHYADDR = 0x8118694a +) diff --git a/vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go new file mode 100644 index 0000000..3e97711 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go @@ -0,0 +1,227 @@ +// Copyright 2017 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. + +// Constants that were deprecated or moved to enums in the FreeBSD headers. Keep +// them here for backwards compatibility. + +package unix + +const ( + IFF_SMART = 0x20 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BSC = 0x53 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_IPXIP = 0xf9 + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf6 + IFT_PFSYNC = 0xf7 + IFT_PLC = 0xae + IFT_POS = 0xab + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VOICEEM = 0x64 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IPPROTO_MAXID = 0x34 + IPV6_FAITH = 0x1d + IP_FAITH = 0x16 + MAP_NORESERVE = 0x40 + MAP_RENAME = 0x20 + NET_RT_MAXID = 0x6 + RTF_PRCLONING = 0x10000 + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + SIOCADDRT = 0x8040720a + SIOCALIFADDR = 0x8118691b + SIOCDELRT = 0x8040720b + SIOCDLIFADDR = 0x8118691d + SIOCGLIFADDR = 0xc118691c + SIOCGLIFPHYADDR = 0xc118694b + SIOCSLIFPHYADDR = 0x8118694a +) diff --git a/vendor/golang.org/x/sys/unix/errors_freebsd_arm.go b/vendor/golang.org/x/sys/unix/errors_freebsd_arm.go new file mode 100644 index 0000000..856dca3 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/errors_freebsd_arm.go @@ -0,0 +1,226 @@ +// Copyright 2017 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. + +package unix + +const ( + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BSC = 0x53 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf6 + IFT_PFSYNC = 0xf7 + IFT_PLC = 0xae + IFT_POS = 0xab + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VOICEEM = 0x64 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + + // missing constants on FreeBSD-11.1-RELEASE, copied from old values in ztypes_freebsd_arm.go + IFF_SMART = 0x20 + IFT_FAITH = 0xf2 + IFT_IPXIP = 0xf9 + IPPROTO_MAXID = 0x34 + IPV6_FAITH = 0x1d + IP_FAITH = 0x16 + MAP_NORESERVE = 0x40 + MAP_RENAME = 0x20 + NET_RT_MAXID = 0x6 + RTF_PRCLONING = 0x10000 + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + SIOCADDRT = 0x8030720a + SIOCALIFADDR = 0x8118691b + SIOCDELRT = 0x8030720b + SIOCDLIFADDR = 0x8118691d + SIOCGLIFADDR = 0xc118691c + SIOCGLIFPHYADDR = 0xc118694b + SIOCSLIFPHYADDR = 0x8118694a +) diff --git a/vendor/golang.org/x/sys/unix/example_test.go b/vendor/golang.org/x/sys/unix/example_test.go new file mode 100644 index 0000000..10619af --- /dev/null +++ b/vendor/golang.org/x/sys/unix/example_test.go @@ -0,0 +1,19 @@ +// Copyright 2018 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 dragonfly freebsd linux netbsd openbsd solaris + +package unix_test + +import ( + "log" + "os" + + "golang.org/x/sys/unix" +) + +func ExampleExec() { + err := unix.Exec("/bin/ls", []string{"ls", "-al"}, os.Environ()) + log.Fatal(err) +} diff --git a/vendor/golang.org/x/sys/unix/export_test.go b/vendor/golang.org/x/sys/unix/export_test.go index b4fdd97..e802469 100644 --- a/vendor/golang.org/x/sys/unix/export_test.go +++ b/vendor/golang.org/x/sys/unix/export_test.go @@ -1,4 +1,4 @@ -// Copyright 2015 The Go Authors. All rights reserved. +// Copyright 2015 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. diff --git a/vendor/golang.org/x/sys/unix/flock.go b/vendor/golang.org/x/sys/unix/flock.go index ce67a59..2994ce7 100644 --- a/vendor/golang.org/x/sys/unix/flock.go +++ b/vendor/golang.org/x/sys/unix/flock.go @@ -1,5 +1,3 @@ -// +build linux darwin freebsd openbsd netbsd dragonfly - // Copyright 2014 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. diff --git a/vendor/golang.org/x/sys/unix/gccgo.go b/vendor/golang.org/x/sys/unix/gccgo.go index 94c8232..50062e3 100644 --- a/vendor/golang.org/x/sys/unix/gccgo.go +++ b/vendor/golang.org/x/sys/unix/gccgo.go @@ -1,4 +1,4 @@ -// Copyright 2015 The Go Authors. All rights reserved. +// Copyright 2015 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. @@ -8,12 +8,22 @@ package unix import "syscall" -// We can't use the gc-syntax .s files for gccgo. On the plus side +// We can't use the gc-syntax .s files for gccgo. On the plus side // much of the functionality can be written directly in Go. +//extern gccgoRealSyscallNoError +func realSyscallNoError(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r uintptr) + //extern gccgoRealSyscall func realSyscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r, errno uintptr) +func SyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr) { + syscall.Entersyscall() + r := realSyscallNoError(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0) + syscall.Exitsyscall() + return r, 0 +} + func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) { syscall.Entersyscall() r, errno := realSyscall(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0) @@ -35,6 +45,11 @@ func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, return r, 0, syscall.Errno(errno) } +func RawSyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr) { + r := realSyscallNoError(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0) + return r, 0 +} + func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) { r, errno := realSyscall(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0) return r, 0, syscall.Errno(errno) diff --git a/vendor/golang.org/x/sys/unix/gccgo_c.c b/vendor/golang.org/x/sys/unix/gccgo_c.c index 07f6be0..24e96b1 100644 --- a/vendor/golang.org/x/sys/unix/gccgo_c.c +++ b/vendor/golang.org/x/sys/unix/gccgo_c.c @@ -1,4 +1,4 @@ -// Copyright 2015 The Go Authors. All rights reserved. +// Copyright 2015 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. @@ -31,6 +31,12 @@ gccgoRealSyscall(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintp return r; } +uintptr_t +gccgoRealSyscallNoError(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9) +{ + return syscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9); +} + // Define the use function in C so that it is not inlined. extern void use(void *) __asm__ (GOSYM_PREFIX GOPKGPATH ".use") __attribute__((noinline)); diff --git a/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go b/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go index bffe1a7..251a977 100644 --- a/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go @@ -1,4 +1,4 @@ -// Copyright 2015 The Go Authors. All rights reserved. +// Copyright 2015 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. diff --git a/vendor/golang.org/x/sys/unix/gccgo_linux_sparc64.go b/vendor/golang.org/x/sys/unix/gccgo_linux_sparc64.go deleted file mode 100644 index 5633269..0000000 --- a/vendor/golang.org/x/sys/unix/gccgo_linux_sparc64.go +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2016 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 gccgo,linux,sparc64 - -package unix - -import "syscall" - -//extern sysconf -func realSysconf(name int) int64 - -func sysconf(name int) (n int64, err syscall.Errno) { - r := realSysconf(name) - if r < 0 { - return 0, syscall.GetErrno() - } - return r, 0 -} diff --git a/vendor/golang.org/x/sys/unix/linux/Dockerfile b/vendor/golang.org/x/sys/unix/linux/Dockerfile index 4397143..c3b29ea 100644 --- a/vendor/golang.org/x/sys/unix/linux/Dockerfile +++ b/vendor/golang.org/x/sys/unix/linux/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:16.04 +FROM ubuntu:17.10 # Dependencies to get the git sources and go binaries RUN apt-get update && apt-get install -y \ @@ -9,15 +9,15 @@ RUN apt-get update && apt-get install -y \ # Get the git sources. If not cached, this takes O(5 minutes). WORKDIR /git RUN git config --global advice.detachedHead false -# Linux Kernel: Released 19 Feb 2017 -RUN git clone --branch v4.10 --depth 1 https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux -# GNU C library: Released 05 Feb 2017 (we should try to get a secure way to clone this) -RUN git clone --branch glibc-2.25 --depth 1 git://sourceware.org/git/glibc.git +# Linux Kernel: Released 28 Jan 2018 +RUN git clone --branch v4.15 --depth 1 https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux +# GNU C library: Released 01 Feb 2018 (we should try to get a secure way to clone this) +RUN git clone --branch glibc-2.27 --depth 1 git://sourceware.org/git/glibc.git -# Get Go 1.8 (https://github.com/docker-library/golang/blob/master/1.8/Dockerfile) -ENV GOLANG_VERSION 1.8 +# Get Go 1.10 +ENV GOLANG_VERSION 1.10 ENV GOLANG_DOWNLOAD_URL https://golang.org/dl/go$GOLANG_VERSION.linux-amd64.tar.gz -ENV GOLANG_DOWNLOAD_SHA256 53ab94104ee3923e228a2cb2116e5e462ad3ebaeea06ff04463479d7f12d27ca +ENV GOLANG_DOWNLOAD_SHA256 b5a64335f1490277b585832d1f6c7f8c6c11206cba5cd3f771dcb87b98ad1a33 RUN curl -fsSL "$GOLANG_DOWNLOAD_URL" -o golang.tar.gz \ && echo "$GOLANG_DOWNLOAD_SHA256 golang.tar.gz" | sha256sum -c - \ @@ -28,9 +28,9 @@ ENV PATH /usr/local/go/bin:$PATH # Linux and Glibc build dependencies RUN apt-get update && apt-get install -y \ - gawk make python \ + bison gawk make python \ gcc gcc-multilib \ - gettext texinfo \ + gettext texinfo \ && rm -rf /var/lib/apt/lists/* # Emulator and cross compilers RUN apt-get update && apt-get install -y \ diff --git a/vendor/golang.org/x/sys/unix/linux/mkall.go b/vendor/golang.org/x/sys/unix/linux/mkall.go index 429754f..89b2fe8 100644 --- a/vendor/golang.org/x/sys/unix/linux/mkall.go +++ b/vendor/golang.org/x/sys/unix/linux/mkall.go @@ -15,12 +15,17 @@ package main import ( + "bufio" + "bytes" "fmt" + "io" + "io/ioutil" "os" "os/exec" "path/filepath" "runtime" "strings" + "unicode" ) // These will be paths to the appropriate source directories. @@ -128,6 +133,15 @@ var targets = []target{ // }, } +// ptracePairs is a list of pairs of targets that can, in some cases, +// run each other's binaries. +var ptracePairs = []struct{ a1, a2 string }{ + {"386", "amd64"}, + {"arm", "arm64"}, + {"mips", "mips64"}, + {"mipsle", "mips64le"}, +} + func main() { if runtime.GOOS != GOOS || runtime.GOARCH != BuildArch { fmt.Printf("Build system has GOOS_GOARCH = %s_%s, need %s_%s\n", @@ -158,6 +172,18 @@ func main() { fmt.Printf("----- SUCCESS: %s -----\n\n", t.GoArch) } } + + fmt.Printf("----- GENERATING ptrace pairs -----\n") + ok := true + for _, p := range ptracePairs { + if err := generatePtracePair(p.a1, p.a2); err != nil { + fmt.Printf("%v\n***** FAILURE: %s/%s *****\n\n", err, p.a1, p.a2) + ok = false + } + } + if ok { + fmt.Printf("----- SUCCESS ptrace pairs -----\n\n") + } } // Makes an exec.Cmd with Stderr attached to os.Stderr @@ -377,3 +403,80 @@ func (t *target) mksyscallFlags() (flags []string) { } return } + +// generatePtracePair takes a pair of GOARCH values that can run each +// other's binaries, such as 386 and amd64. It extracts the PtraceRegs +// type for each one. It writes a new file defining the types +// PtraceRegsArch1 and PtraceRegsArch2 and the corresponding functions +// Ptrace{Get,Set}Regs{arch1,arch2}. This permits debugging the other +// binary on a native system. +func generatePtracePair(arch1, arch2 string) error { + def1, err := ptraceDef(arch1) + if err != nil { + return err + } + def2, err := ptraceDef(arch2) + if err != nil { + return err + } + f, err := os.Create(fmt.Sprintf("zptrace%s_linux.go", arch1)) + if err != nil { + return err + } + buf := bufio.NewWriter(f) + fmt.Fprintf(buf, "// Code generated by linux/mkall.go generatePtracePair(%s, %s). DO NOT EDIT.\n", arch1, arch2) + fmt.Fprintf(buf, "\n") + fmt.Fprintf(buf, "// +build linux\n") + fmt.Fprintf(buf, "// +build %s %s\n", arch1, arch2) + fmt.Fprintf(buf, "\n") + fmt.Fprintf(buf, "package unix\n") + fmt.Fprintf(buf, "\n") + fmt.Fprintf(buf, "%s\n", `import "unsafe"`) + fmt.Fprintf(buf, "\n") + writeOnePtrace(buf, arch1, def1) + fmt.Fprintf(buf, "\n") + writeOnePtrace(buf, arch2, def2) + if err := buf.Flush(); err != nil { + return err + } + if err := f.Close(); err != nil { + return err + } + return nil +} + +// ptraceDef returns the definition of PtraceRegs for arch. +func ptraceDef(arch string) (string, error) { + filename := fmt.Sprintf("ztypes_linux_%s.go", arch) + data, err := ioutil.ReadFile(filename) + if err != nil { + return "", fmt.Errorf("reading %s: %v", filename, err) + } + start := bytes.Index(data, []byte("type PtraceRegs struct")) + if start < 0 { + return "", fmt.Errorf("%s: no definition of PtraceRegs", filename) + } + data = data[start:] + end := bytes.Index(data, []byte("\n}\n")) + if end < 0 { + return "", fmt.Errorf("%s: can't find end of PtraceRegs definition", filename) + } + return string(data[:end+2]), nil +} + +// writeOnePtrace writes out the ptrace definitions for arch. +func writeOnePtrace(w io.Writer, arch, def string) { + uarch := string(unicode.ToUpper(rune(arch[0]))) + arch[1:] + fmt.Fprintf(w, "// PtraceRegs%s is the registers used by %s binaries.\n", uarch, arch) + fmt.Fprintf(w, "%s\n", strings.Replace(def, "PtraceRegs", "PtraceRegs"+uarch, 1)) + fmt.Fprintf(w, "\n") + fmt.Fprintf(w, "// PtraceGetRegs%s fetches the registers used by %s binaries.\n", uarch, arch) + fmt.Fprintf(w, "func PtraceGetRegs%s(pid int, regsout *PtraceRegs%s) error {\n", uarch, uarch) + fmt.Fprintf(w, "\treturn ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout)))\n") + fmt.Fprintf(w, "}\n") + fmt.Fprintf(w, "\n") + fmt.Fprintf(w, "// PtraceSetRegs%s sets the registers used by %s binaries.\n", uarch, arch) + fmt.Fprintf(w, "func PtraceSetRegs%s(pid int, regs *PtraceRegs%s) error {\n", uarch, uarch) + fmt.Fprintf(w, "\treturn ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs)))\n") + fmt.Fprintf(w, "}\n") +} diff --git a/vendor/golang.org/x/sys/unix/linux/types.go b/vendor/golang.org/x/sys/unix/linux/types.go index 7236b72..186a98f 100644 --- a/vendor/golang.org/x/sys/unix/linux/types.go +++ b/vendor/golang.org/x/sys/unix/linux/types.go @@ -24,10 +24,12 @@ package unix #include #include #include +#include #include #include #include #include +#include #include #include #include @@ -45,10 +47,12 @@ package unix #include #include #include +#include #include #include +#include #include -#include +#include #include #include #include @@ -60,6 +64,9 @@ package unix #include #include #include +#include +#include +#include // On mips64, the glibc stat and kernel stat do not agree #if (defined(__mips__) && _MIPS_SIM == _MIPS_SIM_ABI64) @@ -110,13 +117,20 @@ struct stat { #endif -// Certain constants and structs are missing from the fs/crypto UAPI -#define FS_MAX_KEY_SIZE 64 -struct fscrypt_key { - __u32 mode; - __u8 raw[FS_MAX_KEY_SIZE]; - __u32 size; -}; +// These are defined in linux/fcntl.h, but including it globally causes +// conflicts with fcntl.h +#ifndef AT_STATX_SYNC_TYPE +# define AT_STATX_SYNC_TYPE 0x6000 // Type of synchronisation required from statx() +#endif +#ifndef AT_STATX_SYNC_AS_STAT +# define AT_STATX_SYNC_AS_STAT 0x0000 // - Do whatever stat() does +#endif +#ifndef AT_STATX_FORCE_SYNC +# define AT_STATX_FORCE_SYNC 0x2000 // - Force the attributes to be sync'd with the server +#endif +#ifndef AT_STATX_DONT_SYNC +# define AT_STATX_DONT_SYNC 0x4000 // - Don't sync attributes with the server +#endif #ifdef TCSETS2 // On systems that have "struct termios2" use this as type Termios. @@ -148,7 +162,21 @@ struct sockaddr_hci { sa_family_t hci_family; unsigned short hci_dev; unsigned short hci_channel; -};; +}; + +// copied from /usr/include/bluetooth/bluetooth.h +#define BDADDR_BREDR 0x00 +#define BDADDR_LE_PUBLIC 0x01 +#define BDADDR_LE_RANDOM 0x02 + +// copied from /usr/include/bluetooth/l2cap.h +struct sockaddr_l2 { + sa_family_t l2_family; + unsigned short l2_psm; + uint8_t l2_bdaddr[6]; + unsigned short l2_cid; + uint8_t l2_bdaddr_type; +}; // copied from /usr/include/linux/un.h struct my_sockaddr_un { @@ -251,6 +279,10 @@ type Stat_t C.struct_stat type Statfs_t C.struct_statfs +type StatxTimestamp C.struct_statx_timestamp + +type Statx_t C.struct_statx + type Dirent C.struct_dirent type Fsid C.fsid_t @@ -292,6 +324,8 @@ type RawSockaddrNetlink C.struct_sockaddr_nl type RawSockaddrHCI C.struct_sockaddr_hci +type RawSockaddrL2 C.struct_sockaddr_l2 + type RawSockaddrCAN C.struct_sockaddr_can type RawSockaddrALG C.struct_sockaddr_alg @@ -314,6 +348,8 @@ type IPMreqn C.struct_ip_mreqn type IPv6Mreq C.struct_ipv6_mreq +type PacketMreq C.struct_packet_mreq + type Msghdr C.struct_msghdr type Cmsghdr C.struct_cmsghdr @@ -338,13 +374,16 @@ const ( SizeofSockaddrLinklayer = C.sizeof_struct_sockaddr_ll SizeofSockaddrNetlink = C.sizeof_struct_sockaddr_nl SizeofSockaddrHCI = C.sizeof_struct_sockaddr_hci + SizeofSockaddrL2 = C.sizeof_struct_sockaddr_l2 SizeofSockaddrCAN = C.sizeof_struct_sockaddr_can SizeofSockaddrALG = C.sizeof_struct_sockaddr_alg SizeofSockaddrVM = C.sizeof_struct_sockaddr_vm SizeofLinger = C.sizeof_struct_linger + SizeofIovec = C.sizeof_struct_iovec SizeofIPMreq = C.sizeof_struct_ip_mreq SizeofIPMreqn = C.sizeof_struct_ip_mreqn SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq + SizeofPacketMreq = C.sizeof_struct_packet_mreq SizeofMsghdr = C.sizeof_struct_msghdr SizeofCmsghdr = C.sizeof_struct_cmsghdr SizeofInet4Pktinfo = C.sizeof_struct_in_pktinfo @@ -358,97 +397,123 @@ const ( // Netlink routing and interface messages const ( - IFA_UNSPEC = C.IFA_UNSPEC - IFA_ADDRESS = C.IFA_ADDRESS - IFA_LOCAL = C.IFA_LOCAL - IFA_LABEL = C.IFA_LABEL - IFA_BROADCAST = C.IFA_BROADCAST - IFA_ANYCAST = C.IFA_ANYCAST - IFA_CACHEINFO = C.IFA_CACHEINFO - IFA_MULTICAST = C.IFA_MULTICAST - IFLA_UNSPEC = C.IFLA_UNSPEC - IFLA_ADDRESS = C.IFLA_ADDRESS - IFLA_BROADCAST = C.IFLA_BROADCAST - IFLA_IFNAME = C.IFLA_IFNAME - IFLA_MTU = C.IFLA_MTU - IFLA_LINK = C.IFLA_LINK - IFLA_QDISC = C.IFLA_QDISC - IFLA_STATS = C.IFLA_STATS - IFLA_COST = C.IFLA_COST - IFLA_PRIORITY = C.IFLA_PRIORITY - IFLA_MASTER = C.IFLA_MASTER - IFLA_WIRELESS = C.IFLA_WIRELESS - IFLA_PROTINFO = C.IFLA_PROTINFO - IFLA_TXQLEN = C.IFLA_TXQLEN - IFLA_MAP = C.IFLA_MAP - IFLA_WEIGHT = C.IFLA_WEIGHT - IFLA_OPERSTATE = C.IFLA_OPERSTATE - IFLA_LINKMODE = C.IFLA_LINKMODE - IFLA_LINKINFO = C.IFLA_LINKINFO - IFLA_NET_NS_PID = C.IFLA_NET_NS_PID - IFLA_IFALIAS = C.IFLA_IFALIAS - IFLA_MAX = C.IFLA_MAX - RT_SCOPE_UNIVERSE = C.RT_SCOPE_UNIVERSE - RT_SCOPE_SITE = C.RT_SCOPE_SITE - RT_SCOPE_LINK = C.RT_SCOPE_LINK - RT_SCOPE_HOST = C.RT_SCOPE_HOST - RT_SCOPE_NOWHERE = C.RT_SCOPE_NOWHERE - RT_TABLE_UNSPEC = C.RT_TABLE_UNSPEC - RT_TABLE_COMPAT = C.RT_TABLE_COMPAT - RT_TABLE_DEFAULT = C.RT_TABLE_DEFAULT - RT_TABLE_MAIN = C.RT_TABLE_MAIN - RT_TABLE_LOCAL = C.RT_TABLE_LOCAL - RT_TABLE_MAX = C.RT_TABLE_MAX - RTA_UNSPEC = C.RTA_UNSPEC - RTA_DST = C.RTA_DST - RTA_SRC = C.RTA_SRC - RTA_IIF = C.RTA_IIF - RTA_OIF = C.RTA_OIF - RTA_GATEWAY = C.RTA_GATEWAY - RTA_PRIORITY = C.RTA_PRIORITY - RTA_PREFSRC = C.RTA_PREFSRC - RTA_METRICS = C.RTA_METRICS - RTA_MULTIPATH = C.RTA_MULTIPATH - RTA_FLOW = C.RTA_FLOW - RTA_CACHEINFO = C.RTA_CACHEINFO - RTA_TABLE = C.RTA_TABLE - RTN_UNSPEC = C.RTN_UNSPEC - RTN_UNICAST = C.RTN_UNICAST - RTN_LOCAL = C.RTN_LOCAL - RTN_BROADCAST = C.RTN_BROADCAST - RTN_ANYCAST = C.RTN_ANYCAST - RTN_MULTICAST = C.RTN_MULTICAST - RTN_BLACKHOLE = C.RTN_BLACKHOLE - RTN_UNREACHABLE = C.RTN_UNREACHABLE - RTN_PROHIBIT = C.RTN_PROHIBIT - RTN_THROW = C.RTN_THROW - RTN_NAT = C.RTN_NAT - RTN_XRESOLVE = C.RTN_XRESOLVE - RTNLGRP_NONE = C.RTNLGRP_NONE - RTNLGRP_LINK = C.RTNLGRP_LINK - RTNLGRP_NOTIFY = C.RTNLGRP_NOTIFY - RTNLGRP_NEIGH = C.RTNLGRP_NEIGH - RTNLGRP_TC = C.RTNLGRP_TC - RTNLGRP_IPV4_IFADDR = C.RTNLGRP_IPV4_IFADDR - RTNLGRP_IPV4_MROUTE = C.RTNLGRP_IPV4_MROUTE - RTNLGRP_IPV4_ROUTE = C.RTNLGRP_IPV4_ROUTE - RTNLGRP_IPV4_RULE = C.RTNLGRP_IPV4_RULE - RTNLGRP_IPV6_IFADDR = C.RTNLGRP_IPV6_IFADDR - RTNLGRP_IPV6_MROUTE = C.RTNLGRP_IPV6_MROUTE - RTNLGRP_IPV6_ROUTE = C.RTNLGRP_IPV6_ROUTE - RTNLGRP_IPV6_IFINFO = C.RTNLGRP_IPV6_IFINFO - RTNLGRP_IPV6_PREFIX = C.RTNLGRP_IPV6_PREFIX - RTNLGRP_IPV6_RULE = C.RTNLGRP_IPV6_RULE - RTNLGRP_ND_USEROPT = C.RTNLGRP_ND_USEROPT - SizeofNlMsghdr = C.sizeof_struct_nlmsghdr - SizeofNlMsgerr = C.sizeof_struct_nlmsgerr - SizeofRtGenmsg = C.sizeof_struct_rtgenmsg - SizeofNlAttr = C.sizeof_struct_nlattr - SizeofRtAttr = C.sizeof_struct_rtattr - SizeofIfInfomsg = C.sizeof_struct_ifinfomsg - SizeofIfAddrmsg = C.sizeof_struct_ifaddrmsg - SizeofRtMsg = C.sizeof_struct_rtmsg - SizeofRtNexthop = C.sizeof_struct_rtnexthop + IFA_UNSPEC = C.IFA_UNSPEC + IFA_ADDRESS = C.IFA_ADDRESS + IFA_LOCAL = C.IFA_LOCAL + IFA_LABEL = C.IFA_LABEL + IFA_BROADCAST = C.IFA_BROADCAST + IFA_ANYCAST = C.IFA_ANYCAST + IFA_CACHEINFO = C.IFA_CACHEINFO + IFA_MULTICAST = C.IFA_MULTICAST + IFLA_UNSPEC = C.IFLA_UNSPEC + IFLA_ADDRESS = C.IFLA_ADDRESS + IFLA_BROADCAST = C.IFLA_BROADCAST + IFLA_IFNAME = C.IFLA_IFNAME + IFLA_MTU = C.IFLA_MTU + IFLA_LINK = C.IFLA_LINK + IFLA_QDISC = C.IFLA_QDISC + IFLA_STATS = C.IFLA_STATS + IFLA_COST = C.IFLA_COST + IFLA_PRIORITY = C.IFLA_PRIORITY + IFLA_MASTER = C.IFLA_MASTER + IFLA_WIRELESS = C.IFLA_WIRELESS + IFLA_PROTINFO = C.IFLA_PROTINFO + IFLA_TXQLEN = C.IFLA_TXQLEN + IFLA_MAP = C.IFLA_MAP + IFLA_WEIGHT = C.IFLA_WEIGHT + IFLA_OPERSTATE = C.IFLA_OPERSTATE + IFLA_LINKMODE = C.IFLA_LINKMODE + IFLA_LINKINFO = C.IFLA_LINKINFO + IFLA_NET_NS_PID = C.IFLA_NET_NS_PID + IFLA_IFALIAS = C.IFLA_IFALIAS + IFLA_NUM_VF = C.IFLA_NUM_VF + IFLA_VFINFO_LIST = C.IFLA_VFINFO_LIST + IFLA_STATS64 = C.IFLA_STATS64 + IFLA_VF_PORTS = C.IFLA_VF_PORTS + IFLA_PORT_SELF = C.IFLA_PORT_SELF + IFLA_AF_SPEC = C.IFLA_AF_SPEC + IFLA_GROUP = C.IFLA_GROUP + IFLA_NET_NS_FD = C.IFLA_NET_NS_FD + IFLA_EXT_MASK = C.IFLA_EXT_MASK + IFLA_PROMISCUITY = C.IFLA_PROMISCUITY + IFLA_NUM_TX_QUEUES = C.IFLA_NUM_TX_QUEUES + IFLA_NUM_RX_QUEUES = C.IFLA_NUM_RX_QUEUES + IFLA_CARRIER = C.IFLA_CARRIER + IFLA_PHYS_PORT_ID = C.IFLA_PHYS_PORT_ID + IFLA_CARRIER_CHANGES = C.IFLA_CARRIER_CHANGES + IFLA_PHYS_SWITCH_ID = C.IFLA_PHYS_SWITCH_ID + IFLA_LINK_NETNSID = C.IFLA_LINK_NETNSID + IFLA_PHYS_PORT_NAME = C.IFLA_PHYS_PORT_NAME + IFLA_PROTO_DOWN = C.IFLA_PROTO_DOWN + IFLA_GSO_MAX_SEGS = C.IFLA_GSO_MAX_SEGS + IFLA_GSO_MAX_SIZE = C.IFLA_GSO_MAX_SIZE + IFLA_PAD = C.IFLA_PAD + IFLA_XDP = C.IFLA_XDP + IFLA_EVENT = C.IFLA_EVENT + IFLA_NEW_NETNSID = C.IFLA_NEW_NETNSID + IFLA_IF_NETNSID = C.IFLA_IF_NETNSID + IFLA_MAX = C.IFLA_MAX + RT_SCOPE_UNIVERSE = C.RT_SCOPE_UNIVERSE + RT_SCOPE_SITE = C.RT_SCOPE_SITE + RT_SCOPE_LINK = C.RT_SCOPE_LINK + RT_SCOPE_HOST = C.RT_SCOPE_HOST + RT_SCOPE_NOWHERE = C.RT_SCOPE_NOWHERE + RT_TABLE_UNSPEC = C.RT_TABLE_UNSPEC + RT_TABLE_COMPAT = C.RT_TABLE_COMPAT + RT_TABLE_DEFAULT = C.RT_TABLE_DEFAULT + RT_TABLE_MAIN = C.RT_TABLE_MAIN + RT_TABLE_LOCAL = C.RT_TABLE_LOCAL + RT_TABLE_MAX = C.RT_TABLE_MAX + RTA_UNSPEC = C.RTA_UNSPEC + RTA_DST = C.RTA_DST + RTA_SRC = C.RTA_SRC + RTA_IIF = C.RTA_IIF + RTA_OIF = C.RTA_OIF + RTA_GATEWAY = C.RTA_GATEWAY + RTA_PRIORITY = C.RTA_PRIORITY + RTA_PREFSRC = C.RTA_PREFSRC + RTA_METRICS = C.RTA_METRICS + RTA_MULTIPATH = C.RTA_MULTIPATH + RTA_FLOW = C.RTA_FLOW + RTA_CACHEINFO = C.RTA_CACHEINFO + RTA_TABLE = C.RTA_TABLE + RTN_UNSPEC = C.RTN_UNSPEC + RTN_UNICAST = C.RTN_UNICAST + RTN_LOCAL = C.RTN_LOCAL + RTN_BROADCAST = C.RTN_BROADCAST + RTN_ANYCAST = C.RTN_ANYCAST + RTN_MULTICAST = C.RTN_MULTICAST + RTN_BLACKHOLE = C.RTN_BLACKHOLE + RTN_UNREACHABLE = C.RTN_UNREACHABLE + RTN_PROHIBIT = C.RTN_PROHIBIT + RTN_THROW = C.RTN_THROW + RTN_NAT = C.RTN_NAT + RTN_XRESOLVE = C.RTN_XRESOLVE + RTNLGRP_NONE = C.RTNLGRP_NONE + RTNLGRP_LINK = C.RTNLGRP_LINK + RTNLGRP_NOTIFY = C.RTNLGRP_NOTIFY + RTNLGRP_NEIGH = C.RTNLGRP_NEIGH + RTNLGRP_TC = C.RTNLGRP_TC + RTNLGRP_IPV4_IFADDR = C.RTNLGRP_IPV4_IFADDR + RTNLGRP_IPV4_MROUTE = C.RTNLGRP_IPV4_MROUTE + RTNLGRP_IPV4_ROUTE = C.RTNLGRP_IPV4_ROUTE + RTNLGRP_IPV4_RULE = C.RTNLGRP_IPV4_RULE + RTNLGRP_IPV6_IFADDR = C.RTNLGRP_IPV6_IFADDR + RTNLGRP_IPV6_MROUTE = C.RTNLGRP_IPV6_MROUTE + RTNLGRP_IPV6_ROUTE = C.RTNLGRP_IPV6_ROUTE + RTNLGRP_IPV6_IFINFO = C.RTNLGRP_IPV6_IFINFO + RTNLGRP_IPV6_PREFIX = C.RTNLGRP_IPV6_PREFIX + RTNLGRP_IPV6_RULE = C.RTNLGRP_IPV6_RULE + RTNLGRP_ND_USEROPT = C.RTNLGRP_ND_USEROPT + SizeofNlMsghdr = C.sizeof_struct_nlmsghdr + SizeofNlMsgerr = C.sizeof_struct_nlmsgerr + SizeofRtGenmsg = C.sizeof_struct_rtgenmsg + SizeofNlAttr = C.sizeof_struct_nlattr + SizeofRtAttr = C.sizeof_struct_rtattr + SizeofIfInfomsg = C.sizeof_struct_ifinfomsg + SizeofIfAddrmsg = C.sizeof_struct_ifaddrmsg + SizeofRtMsg = C.sizeof_struct_rtmsg + SizeofRtNexthop = C.sizeof_struct_rtnexthop ) type NlMsghdr C.struct_nlmsghdr @@ -511,8 +576,15 @@ type Ustat_t C.struct_ustat type EpollEvent C.struct_my_epoll_event const ( - AT_FDCWD = C.AT_FDCWD - AT_REMOVEDIR = C.AT_REMOVEDIR + AT_EMPTY_PATH = C.AT_EMPTY_PATH + AT_FDCWD = C.AT_FDCWD + AT_NO_AUTOMOUNT = C.AT_NO_AUTOMOUNT + AT_REMOVEDIR = C.AT_REMOVEDIR + + AT_STATX_SYNC_AS_STAT = C.AT_STATX_SYNC_AS_STAT + AT_STATX_FORCE_SYNC = C.AT_STATX_FORCE_SYNC + AT_STATX_DONT_SYNC = C.AT_STATX_DONT_SYNC + AT_SYMLINK_FOLLOW = C.AT_SYMLINK_FOLLOW AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW ) @@ -533,10 +605,92 @@ type Sigset_t C.sigset_t const RNDGETENTCNT = C.RNDGETENTCNT -// sysconf information - -const _SC_PAGESIZE = C._SC_PAGESIZE +const PERF_IOC_FLAG_GROUP = C.PERF_IOC_FLAG_GROUP // Terminal handling type Termios C.termios_t + +type Winsize C.struct_winsize + +// Taskstats and cgroup stats. + +type Taskstats C.struct_taskstats + +const ( + TASKSTATS_CMD_UNSPEC = C.TASKSTATS_CMD_UNSPEC + TASKSTATS_CMD_GET = C.TASKSTATS_CMD_GET + TASKSTATS_CMD_NEW = C.TASKSTATS_CMD_NEW + TASKSTATS_TYPE_UNSPEC = C.TASKSTATS_TYPE_UNSPEC + TASKSTATS_TYPE_PID = C.TASKSTATS_TYPE_PID + TASKSTATS_TYPE_TGID = C.TASKSTATS_TYPE_TGID + TASKSTATS_TYPE_STATS = C.TASKSTATS_TYPE_STATS + TASKSTATS_TYPE_AGGR_PID = C.TASKSTATS_TYPE_AGGR_PID + TASKSTATS_TYPE_AGGR_TGID = C.TASKSTATS_TYPE_AGGR_TGID + TASKSTATS_TYPE_NULL = C.TASKSTATS_TYPE_NULL + TASKSTATS_CMD_ATTR_UNSPEC = C.TASKSTATS_CMD_ATTR_UNSPEC + TASKSTATS_CMD_ATTR_PID = C.TASKSTATS_CMD_ATTR_PID + TASKSTATS_CMD_ATTR_TGID = C.TASKSTATS_CMD_ATTR_TGID + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = C.TASKSTATS_CMD_ATTR_REGISTER_CPUMASK + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = C.TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK +) + +type CGroupStats C.struct_cgroupstats + +const ( + CGROUPSTATS_CMD_UNSPEC = C.__TASKSTATS_CMD_MAX + CGROUPSTATS_CMD_GET = C.CGROUPSTATS_CMD_GET + CGROUPSTATS_CMD_NEW = C.CGROUPSTATS_CMD_NEW + CGROUPSTATS_TYPE_UNSPEC = C.CGROUPSTATS_TYPE_UNSPEC + CGROUPSTATS_TYPE_CGROUP_STATS = C.CGROUPSTATS_TYPE_CGROUP_STATS + CGROUPSTATS_CMD_ATTR_UNSPEC = C.CGROUPSTATS_CMD_ATTR_UNSPEC + CGROUPSTATS_CMD_ATTR_FD = C.CGROUPSTATS_CMD_ATTR_FD +) + +// Generic netlink + +type Genlmsghdr C.struct_genlmsghdr + +const ( + CTRL_CMD_UNSPEC = C.CTRL_CMD_UNSPEC + CTRL_CMD_NEWFAMILY = C.CTRL_CMD_NEWFAMILY + CTRL_CMD_DELFAMILY = C.CTRL_CMD_DELFAMILY + CTRL_CMD_GETFAMILY = C.CTRL_CMD_GETFAMILY + CTRL_CMD_NEWOPS = C.CTRL_CMD_NEWOPS + CTRL_CMD_DELOPS = C.CTRL_CMD_DELOPS + CTRL_CMD_GETOPS = C.CTRL_CMD_GETOPS + CTRL_CMD_NEWMCAST_GRP = C.CTRL_CMD_NEWMCAST_GRP + CTRL_CMD_DELMCAST_GRP = C.CTRL_CMD_DELMCAST_GRP + CTRL_CMD_GETMCAST_GRP = C.CTRL_CMD_GETMCAST_GRP + CTRL_ATTR_UNSPEC = C.CTRL_ATTR_UNSPEC + CTRL_ATTR_FAMILY_ID = C.CTRL_ATTR_FAMILY_ID + CTRL_ATTR_FAMILY_NAME = C.CTRL_ATTR_FAMILY_NAME + CTRL_ATTR_VERSION = C.CTRL_ATTR_VERSION + CTRL_ATTR_HDRSIZE = C.CTRL_ATTR_HDRSIZE + CTRL_ATTR_MAXATTR = C.CTRL_ATTR_MAXATTR + CTRL_ATTR_OPS = C.CTRL_ATTR_OPS + CTRL_ATTR_MCAST_GROUPS = C.CTRL_ATTR_MCAST_GROUPS + CTRL_ATTR_OP_UNSPEC = C.CTRL_ATTR_OP_UNSPEC + CTRL_ATTR_OP_ID = C.CTRL_ATTR_OP_ID + CTRL_ATTR_OP_FLAGS = C.CTRL_ATTR_OP_FLAGS + CTRL_ATTR_MCAST_GRP_UNSPEC = C.CTRL_ATTR_MCAST_GRP_UNSPEC + CTRL_ATTR_MCAST_GRP_NAME = C.CTRL_ATTR_MCAST_GRP_NAME + CTRL_ATTR_MCAST_GRP_ID = C.CTRL_ATTR_MCAST_GRP_ID +) + +// CPU affinity + +type cpuMask C.__cpu_mask + +const ( + _CPU_SETSIZE = C.__CPU_SETSIZE + _NCPUBITS = C.__NCPUBITS +) + +// Bluetooth + +const ( + BDADDR_BREDR = C.BDADDR_BREDR + BDADDR_LE_PUBLIC = C.BDADDR_LE_PUBLIC + BDADDR_LE_RANDOM = C.BDADDR_LE_RANDOM +) diff --git a/vendor/golang.org/x/sys/unix/mkall.sh b/vendor/golang.org/x/sys/unix/mkall.sh index f0d6566..1715122 100755 --- a/vendor/golang.org/x/sys/unix/mkall.sh +++ b/vendor/golang.org/x/sys/unix/mkall.sh @@ -72,7 +72,7 @@ darwin_amd64) ;; darwin_arm) mkerrors="$mkerrors" - mksysnum="./mksysnum_darwin.pl /usr/include/sys/syscall.h" + mksysnum="./mksysnum_darwin.pl $(xcrun --show-sdk-path --sdk iphoneos)/usr/include/sys/syscall.h" mktypes="GOARCH=$GOARCH go tool cgo -godefs" ;; darwin_arm64) @@ -80,12 +80,6 @@ darwin_arm64) mksysnum="./mksysnum_darwin.pl $(xcrun --show-sdk-path --sdk iphoneos)/usr/include/sys/syscall.h" mktypes="GOARCH=$GOARCH go tool cgo -godefs" ;; -dragonfly_386) - mkerrors="$mkerrors -m32" - mksyscall="./mksyscall.pl -l32 -dragonfly" - mksysnum="curl -s 'http://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/sys/kern/syscalls.master' | ./mksysnum_dragonfly.pl" - mktypes="GOARCH=$GOARCH go tool cgo -godefs" - ;; dragonfly_amd64) mkerrors="$mkerrors -m64" mksyscall="./mksyscall.pl -dragonfly" @@ -108,7 +102,7 @@ freebsd_arm) mksyscall="./mksyscall.pl -l32 -arm" mksysnum="curl -s 'http://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master' | ./mksysnum_freebsd.pl" # Let the type of C char be signed for making the bare syscall - # API consistent across over platforms. + # API consistent across platforms. mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" ;; linux_sparc64) @@ -130,11 +124,18 @@ netbsd_amd64) mksysnum="curl -s 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_netbsd.pl" mktypes="GOARCH=$GOARCH go tool cgo -godefs" ;; +netbsd_arm) + mkerrors="$mkerrors" + mksyscall="./mksyscall.pl -l32 -netbsd -arm" + mksysnum="curl -s 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_netbsd.pl" + # Let the type of C char be signed for making the bare syscall + # API consistent across platforms. + mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" + ;; openbsd_386) mkerrors="$mkerrors -m32" mksyscall="./mksyscall.pl -l32 -openbsd" mksysctl="./mksysctl_openbsd.pl" - zsysctl="zsysctl_openbsd.go" mksysnum="curl -s 'http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_openbsd.pl" mktypes="GOARCH=$GOARCH go tool cgo -godefs" ;; @@ -142,10 +143,18 @@ openbsd_amd64) mkerrors="$mkerrors -m64" mksyscall="./mksyscall.pl -openbsd" mksysctl="./mksysctl_openbsd.pl" - zsysctl="zsysctl_openbsd.go" mksysnum="curl -s 'http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_openbsd.pl" mktypes="GOARCH=$GOARCH go tool cgo -godefs" ;; +openbsd_arm) + mkerrors="$mkerrors" + mksyscall="./mksyscall.pl -l32 -openbsd -arm" + mksysctl="./mksysctl_openbsd.pl" + mksysnum="curl -s 'http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_openbsd.pl" + # Let the type of C char be signed for making the bare syscall + # API consistent across platforms. + mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" + ;; solaris_amd64) mksyscall="./mksyscall_solaris.pl" mkerrors="$mkerrors -m64" diff --git a/vendor/golang.org/x/sys/unix/mkerrors.sh b/vendor/golang.org/x/sys/unix/mkerrors.sh index 5da8224..3b5e2c0 100755 --- a/vendor/golang.org/x/sys/unix/mkerrors.sh +++ b/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -17,8 +17,8 @@ if test -z "$GOARCH" -o -z "$GOOS"; then fi # Check that we are using the new build system if we should -if [[ "$GOOS" -eq "linux" ]] && [[ "$GOARCH" != "sparc64" ]]; then - if [[ "$GOLANG_SYS_BUILD" -ne "docker" ]]; then +if [[ "$GOOS" = "linux" ]] && [[ "$GOARCH" != "sparc64" ]]; then + if [[ "$GOLANG_SYS_BUILD" != "docker" ]]; then echo 1>&2 "In the new build system, mkerrors should not be called directly." echo 1>&2 "See README.md" exit 1 @@ -27,7 +27,7 @@ fi CC=${CC:-cc} -if [[ "$GOOS" -eq "solaris" ]]; then +if [[ "$GOOS" = "solaris" ]]; then # Assumes GNU versions of utilities in PATH. export PATH=/usr/gnu/bin:$PATH fi @@ -38,6 +38,8 @@ includes_Darwin=' #define _DARWIN_C_SOURCE #define KERNEL #define _DARWIN_USE_64_BIT_INODE +#include +#include #include #include #include @@ -45,6 +47,8 @@ includes_Darwin=' #include #include #include +#include +#include #include #include #include @@ -75,6 +79,7 @@ includes_DragonFly=' ' includes_FreeBSD=' +#include #include #include #include @@ -82,6 +87,7 @@ includes_FreeBSD=' #include #include #include +#include #include #include #include @@ -143,6 +149,7 @@ struct ltchars { #include #include +#include #include #include #include @@ -152,6 +159,7 @@ struct ltchars { #include #include #include +#include #include #include #include @@ -164,16 +172,23 @@ struct ltchars { #include #include #include +#include #include #include #include #include #include +#include +#include #include #include #include #include #include +#include +#include +#include +#include #include #include @@ -274,6 +289,7 @@ includes_SunOS=' #include #include #include +#include #include #include #include @@ -338,6 +354,7 @@ ccflags="$@" $2 !~ /^EXPR_/ && $2 ~ /^E[A-Z0-9_]+$/ || $2 ~ /^B[0-9_]+$/ || + $2 ~ /^(OLD|NEW)DEV$/ || $2 == "BOTHER" || $2 ~ /^CI?BAUD(EX)?$/ || $2 == "IBSHIFT" || @@ -347,6 +364,7 @@ ccflags="$@" $2 ~ /^IGN/ || $2 ~ /^IX(ON|ANY|OFF)$/ || $2 ~ /^IN(LCR|PCK)$/ || + $2 !~ "X86_CR3_PCID_NOFLUSH" && $2 ~ /(^FLU?SH)|(FLU?SH$)/ || $2 ~ /^C(LOCAL|READ|MSPAR|RTSCTS)$/ || $2 == "BRKINT" || @@ -371,11 +389,13 @@ ccflags="$@" $2 == "SOMAXCONN" || $2 == "NAME_MAX" || $2 == "IFNAMSIZ" || - $2 ~ /^CTL_(MAXNAME|NET|QUERY)$/ || + $2 ~ /^CTL_(HW|KERN|MAXNAME|NET|QUERY)$/ || + $2 ~ /^KERN_(HOSTNAME|OS(RELEASE|TYPE)|VERSION)$/ || + $2 ~ /^HW_MACHINE$/ || $2 ~ /^SYSCTL_VERS/ || - $2 ~ /^(MS|MNT)_/ || + $2 ~ /^(MS|MNT|UMOUNT)_/ || $2 ~ /^TUN(SET|GET|ATTACH|DETACH)/ || - $2 ~ /^(O|F|FD|NAME|S|PTRACE|PT)_/ || + $2 ~ /^(O|F|E?FD|NAME|S|PTRACE|PT)_/ || $2 ~ /^LINUX_REBOOT_CMD_/ || $2 ~ /^LINUX_REBOOT_MAGIC[12]$/ || $2 !~ "NLA_TYPE_MASK" && @@ -389,20 +409,33 @@ ccflags="$@" $2 ~ /^(IFF|IFT|NET_RT|RTM|RTF|RTV|RTA|RTAX)_/ || $2 ~ /^BIOC/ || $2 ~ /^RUSAGE_(SELF|CHILDREN|THREAD)/ || - $2 ~ /^RLIMIT_(AS|CORE|CPU|DATA|FSIZE|NOFILE|STACK)|RLIM_INFINITY/ || + $2 ~ /^RLIMIT_(AS|CORE|CPU|DATA|FSIZE|LOCKS|MEMLOCK|MSGQUEUE|NICE|NOFILE|NPROC|RSS|RTPRIO|RTTIME|SIGPENDING|STACK)|RLIM_INFINITY/ || $2 ~ /^PRIO_(PROCESS|PGRP|USER)/ || $2 ~ /^CLONE_[A-Z_]+/ || $2 !~ /^(BPF_TIMEVAL)$/ && $2 ~ /^(BPF|DLT)_/ || $2 ~ /^CLOCK_/ || $2 ~ /^CAN_/ || + $2 ~ /^CAP_/ || $2 ~ /^ALG_/ || $2 ~ /^FS_(POLICY_FLAGS|KEY_DESC|ENCRYPTION_MODE|[A-Z0-9_]+_KEY_SIZE|IOC_(GET|SET)_ENCRYPTION)/ || $2 ~ /^GRND_/ || $2 ~ /^KEY_(SPEC|REQKEY_DEFL)_/ || $2 ~ /^KEYCTL_/ || + $2 ~ /^PERF_EVENT_IOC_/ || + $2 ~ /^SECCOMP_MODE_/ || $2 ~ /^SPLICE_/ || $2 ~ /^(VM|VMADDR)_/ || + $2 ~ /^IOCTL_VM_SOCKETS_/ || + $2 ~ /^(TASKSTATS|TS)_/ || + $2 ~ /^CGROUPSTATS_/ || + $2 ~ /^GENL_/ || + $2 ~ /^STATX_/ || + $2 ~ /^UTIME_/ || + $2 ~ /^XATTR_(CREATE|REPLACE)/ || + $2 ~ /^ATTR_(BIT_MAP_COUNT|(CMN|VOL|FILE)_)/ || + $2 ~ /^FSOPT_/ || + $2 ~ /^WDIOC_/ || $2 !~ "WMESGLEN" && $2 ~ /^W[A-Z0-9]+$/ || $2 ~ /^BLK[A-Z]*(GET$|SET$|BUF$|PART$|SIZE)/ {printf("\t%s = C.%s\n", $2, $2)} diff --git a/vendor/golang.org/x/sys/unix/mkpost.go b/vendor/golang.org/x/sys/unix/mkpost.go index d3ff659..23590bd 100644 --- a/vendor/golang.org/x/sys/unix/mkpost.go +++ b/vendor/golang.org/x/sys/unix/mkpost.go @@ -56,14 +56,23 @@ func main() { removeFieldsRegex := regexp.MustCompile(`X__glibc\S*`) b = removeFieldsRegex.ReplaceAll(b, []byte("_")) + // Convert [65]int8 to [65]byte in Utsname members to simplify + // conversion to string; see golang.org/issue/20753 + convertUtsnameRegex := regexp.MustCompile(`((Sys|Node|Domain)name|Release|Version|Machine)(\s+)\[(\d+)\]u?int8`) + b = convertUtsnameRegex.ReplaceAll(b, []byte("$1$3[$4]byte")) + + // Remove spare fields (e.g. in Statx_t) + spareFieldsRegex := regexp.MustCompile(`X__spare\S*`) + b = spareFieldsRegex.ReplaceAll(b, []byte("_")) + + // Remove cgo padding fields + removePaddingFieldsRegex := regexp.MustCompile(`Pad_cgo_\d+`) + b = removePaddingFieldsRegex.ReplaceAll(b, []byte("_")) + // We refuse to export private fields on s390x if goarch == "s390x" && goos == "linux" { - // Remove cgo padding fields - removeFieldsRegex := regexp.MustCompile(`Pad_cgo_\d+`) - b = removeFieldsRegex.ReplaceAll(b, []byte("_")) - // Remove padding, hidden, or unused fields - removeFieldsRegex = regexp.MustCompile(`X_\S+`) + removeFieldsRegex = regexp.MustCompile(`\bX_\S+`) b = removeFieldsRegex.ReplaceAll(b, []byte("_")) } diff --git a/vendor/golang.org/x/sys/unix/mksyscall.pl b/vendor/golang.org/x/sys/unix/mksyscall.pl index fb929b4..1f6b926 100755 --- a/vendor/golang.org/x/sys/unix/mksyscall.pl +++ b/vendor/golang.org/x/sys/unix/mksyscall.pl @@ -210,7 +210,15 @@ ($) # Determine which form to use; pad args with zeros. my $asm = "Syscall"; if ($nonblock) { - $asm = "RawSyscall"; + if ($errvar eq "" && $ENV{'GOOS'} eq "linux") { + $asm = "RawSyscallNoError"; + } else { + $asm = "RawSyscall"; + } + } else { + if ($errvar eq "" && $ENV{'GOOS'} eq "linux") { + $asm = "SyscallNoError"; + } } if(@args <= 3) { while(@args < 3) { @@ -284,7 +292,12 @@ ($) if ($ret[0] eq "_" && $ret[1] eq "_" && $ret[2] eq "_") { $text .= "\t$call\n"; } else { - $text .= "\t$ret[0], $ret[1], $ret[2] := $call\n"; + if ($errvar eq "" && $ENV{'GOOS'} eq "linux") { + # raw syscall without error on Linux, see golang.org/issue/22924 + $text .= "\t$ret[0], $ret[1] := $call\n"; + } else { + $text .= "\t$ret[0], $ret[1], $ret[2] := $call\n"; + } } $text .= $body; diff --git a/vendor/golang.org/x/sys/unix/mksysnum_freebsd.pl b/vendor/golang.org/x/sys/unix/mksysnum_freebsd.pl index c83064f..a0a22bf 100755 --- a/vendor/golang.org/x/sys/unix/mksysnum_freebsd.pl +++ b/vendor/golang.org/x/sys/unix/mksysnum_freebsd.pl @@ -40,21 +40,8 @@ package unix if($name eq 'SYS_SYS_EXIT'){ $name = 'SYS_EXIT'; } - if($name =~ /^SYS_CAP_+/ || $name =~ /^SYS___CAP_+/){ - next - } print " $name = $num; // $proto\n"; - - # We keep Capsicum syscall numbers for FreeBSD - # 9-STABLE here because we are not sure whether they - # are mature and stable. - if($num == 513){ - print " SYS_CAP_NEW = 514 // { int cap_new(int fd, uint64_t rights); }\n"; - print " SYS_CAP_GETRIGHTS = 515 // { int cap_getrights(int fd, \\\n"; - print " SYS_CAP_ENTER = 516 // { int cap_enter(void); }\n"; - print " SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); }\n"; - } } } diff --git a/vendor/golang.org/x/sys/unix/mksysnum_netbsd.pl b/vendor/golang.org/x/sys/unix/mksysnum_netbsd.pl index d31f2c4..85988b1 100755 --- a/vendor/golang.org/x/sys/unix/mksysnum_netbsd.pl +++ b/vendor/golang.org/x/sys/unix/mksysnum_netbsd.pl @@ -47,7 +47,7 @@ package unix $name = "$7_$11" if $11 ne ''; $name =~ y/a-z/A-Z/; - if($compat eq '' || $compat eq '30' || $compat eq '50') { + if($compat eq '' || $compat eq '13' || $compat eq '30' || $compat eq '50') { print " $name = $num; // $proto\n"; } } diff --git a/vendor/golang.org/x/sys/unix/mmap_unix_test.go b/vendor/golang.org/x/sys/unix/mmap_unix_test.go index 18ccec0..3258ca3 100644 --- a/vendor/golang.org/x/sys/unix/mmap_unix_test.go +++ b/vendor/golang.org/x/sys/unix/mmap_unix_test.go @@ -17,6 +17,18 @@ func TestMmap(t *testing.T) { if err != nil { t.Fatalf("Mmap: %v", err) } + if err := unix.Mprotect(b, unix.PROT_READ|unix.PROT_WRITE); err != nil { + t.Fatalf("Mprotect: %v", err) + } + + b[0] = 42 + + if err := unix.Msync(b, unix.MS_SYNC); err != nil { + t.Fatalf("Msync: %v", err) + } + if err := unix.Madvise(b, unix.MADV_DONTNEED); err != nil { + t.Fatalf("Madvise: %v", err) + } if err := unix.Munmap(b); err != nil { t.Fatalf("Munmap: %v", err) } diff --git a/vendor/golang.org/x/sys/unix/pagesize_unix.go b/vendor/golang.org/x/sys/unix/pagesize_unix.go new file mode 100644 index 0000000..83c85e0 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/pagesize_unix.go @@ -0,0 +1,15 @@ +// Copyright 2017 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 dragonfly freebsd linux netbsd openbsd solaris + +// For Unix, get the pagesize from the runtime. + +package unix + +import "syscall" + +func Getpagesize() int { + return syscall.Getpagesize() +} diff --git a/vendor/golang.org/x/sys/unix/race.go b/vendor/golang.org/x/sys/unix/race.go index 3c7627e..61712b5 100644 --- a/vendor/golang.org/x/sys/unix/race.go +++ b/vendor/golang.org/x/sys/unix/race.go @@ -1,4 +1,4 @@ -// Copyright 2012 The Go Authors. All rights reserved. +// Copyright 2012 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. diff --git a/vendor/golang.org/x/sys/unix/race0.go b/vendor/golang.org/x/sys/unix/race0.go index f8678e0..dd08204 100644 --- a/vendor/golang.org/x/sys/unix/race0.go +++ b/vendor/golang.org/x/sys/unix/race0.go @@ -1,4 +1,4 @@ -// Copyright 2012 The Go Authors. All rights reserved. +// Copyright 2012 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. diff --git a/vendor/golang.org/x/sys/unix/sockcmsg_linux.go b/vendor/golang.org/x/sys/unix/sockcmsg_linux.go index d9ff473..6079eb4 100644 --- a/vendor/golang.org/x/sys/unix/sockcmsg_linux.go +++ b/vendor/golang.org/x/sys/unix/sockcmsg_linux.go @@ -1,4 +1,4 @@ -// Copyright 2011 The Go Authors. All rights reserved. +// Copyright 2011 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. diff --git a/vendor/golang.org/x/sys/unix/syscall.go b/vendor/golang.org/x/sys/unix/syscall.go index 85e3502..ef35fce 100644 --- a/vendor/golang.org/x/sys/unix/syscall.go +++ b/vendor/golang.org/x/sys/unix/syscall.go @@ -5,30 +5,33 @@ // +build darwin dragonfly freebsd linux netbsd openbsd solaris // Package unix contains an interface to the low-level operating system -// primitives. OS details vary depending on the underlying system, and +// primitives. OS details vary depending on the underlying system, and // by default, godoc will display OS-specific documentation for the current -// system. If you want godoc to display OS documentation for another -// system, set $GOOS and $GOARCH to the desired system. For example, if +// system. If you want godoc to display OS documentation for another +// system, set $GOOS and $GOARCH to the desired system. For example, if // you want to view documentation for freebsd/arm on linux/amd64, set $GOOS // to freebsd and $GOARCH to arm. +// // The primary use of this package is inside other packages that provide a more // portable interface to the system, such as "os", "time" and "net". Use // those packages rather than this one if you can. +// // For details of the functions and data types in this package consult // the manuals for the appropriate operating system. +// // These calls return err == nil to indicate success; otherwise // err represents an operating system error describing the failure and // holds a value of type syscall.Errno. package unix // import "golang.org/x/sys/unix" +import "strings" + // ByteSliceFromString returns a NUL-terminated slice of bytes // containing the text of s. If s contains a NUL byte at any // location, it returns (nil, EINVAL). func ByteSliceFromString(s string) ([]byte, error) { - for i := 0; i < len(s); i++ { - if s[i] == 0 { - return nil, EINVAL - } + if strings.IndexByte(s, 0) != -1 { + return nil, EINVAL } a := make([]byte, len(s)+1) copy(a, s) @@ -49,21 +52,3 @@ func BytePtrFromString(s string) (*byte, error) { // Single-word zero for use when we need a valid pointer to 0 bytes. // See mkunix.pl. var _zero uintptr - -func (ts *Timespec) Unix() (sec int64, nsec int64) { - return int64(ts.Sec), int64(ts.Nsec) -} - -func (tv *Timeval) Unix() (sec int64, nsec int64) { - return int64(tv.Sec), int64(tv.Usec) * 1000 -} - -func (ts *Timespec) Nano() int64 { - return int64(ts.Sec)*1e9 + int64(ts.Nsec) -} - -func (tv *Timeval) Nano() int64 { - return int64(tv.Sec)*1e9 + int64(tv.Usec)*1000 -} - -func TimevalToNsec(tv Timeval) int64 { return int64(tv.Sec)*1e9 + int64(tv.Usec)*1e3 } diff --git a/vendor/golang.org/x/sys/unix/syscall_bsd.go b/vendor/golang.org/x/sys/unix/syscall_bsd.go index ccb29c7..d3903ed 100644 --- a/vendor/golang.org/x/sys/unix/syscall_bsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_bsd.go @@ -34,7 +34,7 @@ func Getgroups() (gids []int, err error) { return nil, nil } - // Sanity check group count. Max is 16 on BSD. + // Sanity check group count. Max is 16 on BSD. if n < 0 || n > 1000 { return nil, EINVAL } @@ -352,6 +352,18 @@ func GetsockoptICMPv6Filter(fd, level, opt int) (*ICMPv6Filter, error) { return &value, err } +// GetsockoptString returns the string value of the socket option opt for the +// socket associated with fd at the given socket level. +func GetsockoptString(fd, level, opt int) (string, error) { + buf := make([]byte, 256) + vallen := _Socklen(len(buf)) + err := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen) + if err != nil { + return "", err + } + return string(buf[:vallen-1]), nil +} + //sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) //sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) //sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) @@ -561,13 +573,24 @@ func Utimes(path string, tv []Timeval) error { func UtimesNano(path string, ts []Timespec) error { if ts == nil { + err := utimensat(AT_FDCWD, path, nil, 0) + if err != ENOSYS { + return err + } return utimes(path, nil) } - // TODO: The BSDs can do utimensat with SYS_UTIMENSAT but it - // isn't supported by darwin so this uses utimes instead if len(ts) != 2 { return EINVAL } + // Darwin setattrlist can set nanosecond timestamps + err := setattrlistTimes(path, ts, 0) + if err != ENOSYS { + return err + } + err = utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) + if err != ENOSYS { + return err + } // Not as efficient as it could be because Timespec and // Timeval have different types in the different OSes tv := [2]Timeval{ @@ -577,6 +600,20 @@ func UtimesNano(path string, ts []Timespec) error { return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) } +func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error { + if ts == nil { + return utimensat(dirfd, path, nil, flags) + } + if len(ts) != 2 { + return EINVAL + } + err := setattrlistTimes(path, ts, flags) + if err != ENOSYS { + return err + } + return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags) +} + //sys futimes(fd int, timeval *[2]Timeval) (err error) func Futimes(fd int, tv []Timeval) error { @@ -591,12 +628,18 @@ func Futimes(fd int, tv []Timeval) error { //sys fcntl(fd int, cmd int, arg int) (val int, err error) +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} + // TODO: wrap // Acct(name nil-string) (err error) // Gethostuuid(uuid *byte, timeout *Timespec) (err error) -// Madvise(addr *byte, len int, behav int) (err error) -// Mprotect(addr *byte, len int, prot int) (err error) -// Msync(addr *byte, len int, flags int) (err error) // Ptrace(req int, pid int, addr uintptr, data int) (ret uintptr, err error) var mapper = &mmapper{ @@ -612,3 +655,11 @@ func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, e func Munmap(b []byte) (err error) { return mapper.Munmap(b) } + +//sys Madvise(b []byte, behav int) (err error) +//sys Mlock(b []byte) (err error) +//sys Mlockall(flags int) (err error) +//sys Mprotect(b []byte, prot int) (err error) +//sys Msync(b []byte, flags int) (err error) +//sys Munlock(b []byte) (err error) +//sys Munlockall() (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_bsd_test.go b/vendor/golang.org/x/sys/unix/syscall_bsd_test.go index d8085a0..6c4e2ac 100644 --- a/vendor/golang.org/x/sys/unix/syscall_bsd_test.go +++ b/vendor/golang.org/x/sys/unix/syscall_bsd_test.go @@ -10,6 +10,7 @@ import ( "os/exec" "runtime" "testing" + "time" "golang.org/x/sys/unix" ) @@ -50,6 +51,28 @@ func TestGetfsstat(t *testing.T) { } } +func TestSelect(t *testing.T) { + err := unix.Select(0, nil, nil, nil, &unix.Timeval{Sec: 0, Usec: 0}) + if err != nil { + t.Fatalf("Select: %v", err) + } + + dur := 250 * time.Millisecond + tv := unix.NsecToTimeval(int64(dur)) + start := time.Now() + err = unix.Select(0, nil, nil, nil, &tv) + took := time.Since(start) + if err != nil { + t.Fatalf("Select: %v", err) + } + + // On some BSDs the actual timeout might also be slightly less than the requested. + // Add an acceptable margin to avoid flaky tests. + if took < dur*2/3 { + t.Errorf("Select: timeout should have been at least %v, got %v", dur, took) + } +} + func TestSysctlRaw(t *testing.T) { if runtime.GOOS == "openbsd" { t.Skip("kern.proc.pid does not exist on OpenBSD") @@ -60,3 +83,11 @@ func TestSysctlRaw(t *testing.T) { t.Fatal(err) } } + +func TestSysctlUint32(t *testing.T) { + maxproc, err := unix.SysctlUint32("kern.maxproc") + if err != nil { + t.Fatal(err) + } + t.Logf("kern.maxproc: %v", maxproc) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/golang.org/x/sys/unix/syscall_darwin.go index 7d91ac0..006e21f 100644 --- a/vendor/golang.org/x/sys/unix/syscall_darwin.go +++ b/vendor/golang.org/x/sys/unix/syscall_darwin.go @@ -36,6 +36,7 @@ func Getwd() (string, error) { return "", ENOTSUP } +// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets. type SockaddrDatalink struct { Len uint8 Family uint8 @@ -54,7 +55,7 @@ func nametomib(name string) (mib []_C_int, err error) { // NOTE(rsc): It seems strange to set the buffer to have // size CTL_MAXNAME+2 but use only CTL_MAXNAME - // as the size. I don't know why the +2 is here, but the + // as the size. I don't know why the +2 is here, but the // kernel uses +2 for its own implementation of this function. // I am scared that if we don't include the +2 here, the kernel // will silently write 2 words farther than we specify @@ -76,18 +77,6 @@ func nametomib(name string) (mib []_C_int, err error) { return buf[0 : n/siz], nil } -func direntIno(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino)) -} - -func direntReclen(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) -} - -func direntNamlen(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) -} - //sys ptrace(request int, pid int, addr uintptr, data uintptr) (err error) func PtraceAttach(pid int) (err error) { return ptrace(PT_ATTACH, pid, 0, 0) } func PtraceDetach(pid int) (err error) { return ptrace(PT_DETACH, pid, 0, 0) } @@ -187,6 +176,42 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { return } +func setattrlistTimes(path string, times []Timespec, flags int) error { + _p0, err := BytePtrFromString(path) + if err != nil { + return err + } + + var attrList attrList + attrList.bitmapCount = ATTR_BIT_MAP_COUNT + attrList.CommonAttr = ATTR_CMN_MODTIME | ATTR_CMN_ACCTIME + + // order is mtime, atime: the opposite of Chtimes + attributes := [2]Timespec{times[1], times[0]} + options := 0 + if flags&AT_SYMLINK_NOFOLLOW != 0 { + options |= FSOPT_NOFOLLOW + } + _, _, e1 := Syscall6( + SYS_SETATTRLIST, + uintptr(unsafe.Pointer(_p0)), + uintptr(unsafe.Pointer(&attrList)), + uintptr(unsafe.Pointer(&attributes)), + uintptr(unsafe.Sizeof(attributes)), + uintptr(options), + 0, + ) + if e1 != 0 { + return e1 + } + return nil +} + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) error { + // Darwin doesn't support SYS_UTIMENSAT + return ENOSYS +} + /* * Wrapped */ @@ -195,6 +220,91 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { func Kill(pid int, signum syscall.Signal) (err error) { return kill(pid, int(signum), 1) } +//sys ioctl(fd int, req uint, arg uintptr) (err error) + +// ioctl itself should not be exposed directly, but additional get/set +// functions for specific types are permissible. + +// IoctlSetInt performs an ioctl operation which sets an integer value +// on fd, using the specified request number. +func IoctlSetInt(fd int, req uint, value int) error { + return ioctl(fd, req, uintptr(value)) +} + +func IoctlSetWinsize(fd int, req uint, value *Winsize) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +func IoctlSetTermios(fd int, req uint, value *Termios) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +// IoctlGetInt performs an ioctl operation which gets an integer value +// from fd, using the specified request number. +func IoctlGetInt(fd int, req uint) (int, error) { + var value int + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return value, err +} + +func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { + var value Winsize + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func IoctlGetTermios(fd int, req uint) (*Termios, error) { + var value Termios + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func Uname(uname *Utsname) error { + mib := []_C_int{CTL_KERN, KERN_OSTYPE} + n := unsafe.Sizeof(uname.Sysname) + if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_HOSTNAME} + n = unsafe.Sizeof(uname.Nodename) + if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_OSRELEASE} + n = unsafe.Sizeof(uname.Release) + if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_VERSION} + n = unsafe.Sizeof(uname.Version) + if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil { + return err + } + + // The version might have newlines or tabs in it, convert them to + // spaces. + for i, b := range uname.Version { + if b == '\n' || b == '\t' { + if i == len(uname.Version)-1 { + uname.Version[i] = 0 + } else { + uname.Version[i] = ' ' + } + } + } + + mib = []_C_int{CTL_HW, HW_MACHINE} + n = unsafe.Sizeof(uname.Machine) + if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil { + return err + } + + return nil +} + /* * Exposed directly */ @@ -210,13 +320,17 @@ func Kill(pid int, signum syscall.Signal) (err error) { return kill(pid, int(sig //sys Dup2(from int, to int) (err error) //sys Exchangedata(path1 string, path2 string, options int) (err error) //sys Exit(code int) +//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) //sys Fchdir(fd int) (err error) //sys Fchflags(fd int, flags int) (err error) //sys Fchmod(fd int, mode uint32) (err error) +//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) //sys Fchown(fd int, uid int, gid int) (err error) +//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) //sys Flock(fd int, how int) (err error) //sys Fpathconf(fd int, name int) (val int, err error) //sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 +//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64 //sys Fstatfs(fd int, stat *Statfs_t) (err error) = SYS_FSTATFS64 //sys Fsync(fd int) (err error) //sys Ftruncate(fd int, length int64) (err error) @@ -238,23 +352,23 @@ func Kill(pid int, signum syscall.Signal) (err error) { return kill(pid, int(sig //sys Kqueue() (fd int, err error) //sys Lchown(path string, uid int, gid int) (err error) //sys Link(path string, link string) (err error) +//sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) //sys Listen(s int, backlog int) (err error) //sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 //sys Mkdir(path string, mode uint32) (err error) +//sys Mkdirat(dirfd int, path string, mode uint32) (err error) //sys Mkfifo(path string, mode uint32) (err error) //sys Mknod(path string, mode uint32, dev int) (err error) -//sys Mlock(b []byte) (err error) -//sys Mlockall(flags int) (err error) -//sys Mprotect(b []byte, prot int) (err error) -//sys Munlock(b []byte) (err error) -//sys Munlockall() (err error) //sys Open(path string, mode int, perm uint32) (fd int, err error) +//sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) //sys Pathconf(path string, name int) (val int, err error) //sys Pread(fd int, p []byte, offset int64) (n int, err error) //sys Pwrite(fd int, p []byte, offset int64) (n int, err error) //sys read(fd int, p []byte) (n int, err error) //sys Readlink(path string, buf []byte) (n int, err error) +//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error) //sys Rename(from string, to string) (err error) +//sys Renameat(fromfd int, from string, tofd int, to string) (err error) //sys Revoke(path string) (err error) //sys Rmdir(path string) (err error) //sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK @@ -275,11 +389,13 @@ func Kill(pid int, signum syscall.Signal) (err error) { return kill(pid, int(sig //sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 //sys Statfs(path string, stat *Statfs_t) (err error) = SYS_STATFS64 //sys Symlink(path string, link string) (err error) +//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error) //sys Sync() (err error) //sys Truncate(path string, length int64) (err error) //sys Umask(newmask int) (oldmask int) //sys Undelete(path string) (err error) //sys Unlink(path string) (err error) +//sys Unlinkat(dirfd int, path string, flags int) (err error) //sys Unmount(path string, flags int) (err error) //sys write(fd int, p []byte) (n int, err error) //sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) @@ -319,9 +435,6 @@ func Kill(pid int, signum syscall.Signal) (err error) { return kill(pid, int(sig // Add_profil // Kdebug_trace // Sigreturn -// Mmap -// Mlock -// Munlock // Atsocket // Kqueue_from_portset_np // Kqueue_portset @@ -331,7 +444,6 @@ func Kill(pid int, signum syscall.Signal) (err error) { return kill(pid, int(sig // Searchfs // Delete // Copyfile -// Poll // Watchevent // Waitevent // Modwatch @@ -414,8 +526,6 @@ func Kill(pid int, signum syscall.Signal) (err error) { return kill(pid, int(sig // Lio_listio // __pthread_cond_wait // Iopolicysys -// Mlockall -// Munlockall // __pthread_kill // __pthread_sigmask // __sigwait @@ -469,7 +579,6 @@ func Kill(pid int, signum syscall.Signal) (err error) { return kill(pid, int(sig // Sendmsg_nocancel // Recvfrom_nocancel // Accept_nocancel -// Msync_nocancel // Fcntl_nocancel // Select_nocancel // Fsync_nocancel 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 c172a3d..b3ac109 100644 --- a/vendor/golang.org/x/sys/unix/syscall_darwin_386.go +++ b/vendor/golang.org/x/sys/unix/syscall_darwin_386.go @@ -11,27 +11,18 @@ import ( "unsafe" ) -func Getpagesize() int { return 4096 } - -func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } - -func NsecToTimespec(nsec int64) (ts Timespec) { - ts.Sec = int32(nsec / 1e9) - ts.Nsec = int32(nsec % 1e9) - return +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: int32(sec), Nsec: int32(nsec)} } -func NsecToTimeval(nsec int64) (tv Timeval) { - nsec += 999 // round up to microsecond - tv.Usec = int32(nsec % 1e9 / 1e3) - tv.Sec = int32(nsec / 1e9) - return +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: int32(sec), Usec: int32(usec)} } //sysnb gettimeofday(tp *Timeval) (sec int32, usec int32, err error) func Gettimeofday(tv *Timeval) (err error) { // The tv passed to gettimeofday must be non-nil - // but is otherwise unused. The answers come back + // but is otherwise unused. The answers come back // in the two registers. sec, usec, err := gettimeofday(tv) tv.Sec = int32(sec) 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 fc1e5a4..7521944 100644 --- a/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go @@ -11,29 +11,18 @@ import ( "unsafe" ) -//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) - -func Getpagesize() int { return 4096 } - -func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } - -func NsecToTimespec(nsec int64) (ts Timespec) { - ts.Sec = nsec / 1e9 - ts.Nsec = nsec % 1e9 - return +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} } -func NsecToTimeval(nsec int64) (tv Timeval) { - nsec += 999 // round up to microsecond - tv.Usec = int32(nsec % 1e9 / 1e3) - tv.Sec = int64(nsec / 1e9) - return +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} } //sysnb gettimeofday(tp *Timeval) (sec int64, usec int32, err error) func Gettimeofday(tv *Timeval) (err error) { // The tv passed to gettimeofday must be non-nil - // but is otherwise unused. The answers come back + // but is otherwise unused. The answers come back // in the two registers. sec, usec, err := gettimeofday(tv) tv.Sec = sec 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 d286cf4..faae207 100644 --- a/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go +++ b/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go @@ -9,27 +9,18 @@ import ( "unsafe" ) -func Getpagesize() int { return 4096 } - -func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } - -func NsecToTimespec(nsec int64) (ts Timespec) { - ts.Sec = int32(nsec / 1e9) - ts.Nsec = int32(nsec % 1e9) - return +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: int32(sec), Nsec: int32(nsec)} } -func NsecToTimeval(nsec int64) (tv Timeval) { - nsec += 999 // round up to microsecond - tv.Usec = int32(nsec % 1e9 / 1e3) - tv.Sec = int32(nsec / 1e9) - return +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: int32(sec), Usec: int32(usec)} } //sysnb gettimeofday(tp *Timeval) (sec int32, usec int32, err error) func Gettimeofday(tv *Timeval) (err error) { // The tv passed to gettimeofday must be non-nil - // but is otherwise unused. The answers come back + // but is otherwise unused. The answers come back // in the two registers. sec, usec, err := gettimeofday(tv) tv.Sec = int32(sec) @@ -69,3 +60,7 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e } func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) // sic + +// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions +// of darwin/arm the syscall is called sysctl instead of __sysctl. +const SYS___SYSCTL = SYS_SYSCTL 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 c33905c..d6d9628 100644 --- a/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go @@ -11,27 +11,18 @@ import ( "unsafe" ) -func Getpagesize() int { return 16384 } - -func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } - -func NsecToTimespec(nsec int64) (ts Timespec) { - ts.Sec = nsec / 1e9 - ts.Nsec = nsec % 1e9 - return +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} } -func NsecToTimeval(nsec int64) (tv Timeval) { - nsec += 999 // round up to microsecond - tv.Usec = int32(nsec % 1e9 / 1e3) - tv.Sec = int64(nsec / 1e9) - return +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} } //sysnb gettimeofday(tp *Timeval) (sec int64, usec int32, err error) func Gettimeofday(tv *Timeval) (err error) { // The tv passed to gettimeofday must be non-nil - // but is otherwise unused. The answers come back + // but is otherwise unused. The answers come back // in the two registers. sec, usec, err := gettimeofday(tv) tv.Sec = sec diff --git a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go index 7e0210f..b5072de 100644 --- a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go +++ b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go @@ -14,6 +14,7 @@ package unix import "unsafe" +// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets. type SockaddrDatalink struct { Len uint8 Family uint8 @@ -56,22 +57,6 @@ func nametomib(name string) (mib []_C_int, err error) { return buf[0 : n/siz], nil } -func direntIno(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno)) -} - -func direntReclen(buf []byte) (uint64, bool) { - namlen, ok := direntNamlen(buf) - if !ok { - return 0, false - } - return (16 + namlen + 1 + 7) &^ 7, true -} - -func direntNamlen(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) -} - //sysnb pipe() (r int, w int, err error) func Pipe(p []int) (err error) { @@ -110,6 +95,23 @@ func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) { return } +const ImplementsGetwd = true + +//sys Getcwd(buf []byte) (n int, err error) = SYS___GETCWD + +func Getwd() (string, error) { + var buf [PathMax]byte + _, err := Getcwd(buf[0:]) + if err != nil { + return "", err + } + n := clen(buf[:]) + if n < 1 { + return "", EINVAL + } + return string(buf[:n]), nil +} + func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { var _p0 unsafe.Pointer var bufsize uintptr @@ -125,6 +127,113 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { return } +func setattrlistTimes(path string, times []Timespec, flags int) error { + // used on Darwin for UtimesNano + return ENOSYS +} + +//sys ioctl(fd int, req uint, arg uintptr) (err error) + +// ioctl itself should not be exposed directly, but additional get/set +// functions for specific types are permissible. + +// IoctlSetInt performs an ioctl operation which sets an integer value +// on fd, using the specified request number. +func IoctlSetInt(fd int, req uint, value int) error { + return ioctl(fd, req, uintptr(value)) +} + +func IoctlSetWinsize(fd int, req uint, value *Winsize) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +func IoctlSetTermios(fd int, req uint, value *Termios) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +// IoctlGetInt performs an ioctl operation which gets an integer value +// from fd, using the specified request number. +func IoctlGetInt(fd int, req uint) (int, error) { + var value int + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return value, err +} + +func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { + var value Winsize + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func IoctlGetTermios(fd int, req uint) (*Termios, error) { + var value Termios + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func sysctlUname(mib []_C_int, old *byte, oldlen *uintptr) error { + err := sysctl(mib, old, oldlen, nil, 0) + if err != nil { + // Utsname members on Dragonfly are only 32 bytes and + // the syscall returns ENOMEM in case the actual value + // is longer. + if err == ENOMEM { + err = nil + } + } + return err +} + +func Uname(uname *Utsname) error { + mib := []_C_int{CTL_KERN, KERN_OSTYPE} + n := unsafe.Sizeof(uname.Sysname) + if err := sysctlUname(mib, &uname.Sysname[0], &n); err != nil { + return err + } + uname.Sysname[unsafe.Sizeof(uname.Sysname)-1] = 0 + + mib = []_C_int{CTL_KERN, KERN_HOSTNAME} + n = unsafe.Sizeof(uname.Nodename) + if err := sysctlUname(mib, &uname.Nodename[0], &n); err != nil { + return err + } + uname.Nodename[unsafe.Sizeof(uname.Nodename)-1] = 0 + + mib = []_C_int{CTL_KERN, KERN_OSRELEASE} + n = unsafe.Sizeof(uname.Release) + if err := sysctlUname(mib, &uname.Release[0], &n); err != nil { + return err + } + uname.Release[unsafe.Sizeof(uname.Release)-1] = 0 + + mib = []_C_int{CTL_KERN, KERN_VERSION} + n = unsafe.Sizeof(uname.Version) + if err := sysctlUname(mib, &uname.Version[0], &n); err != nil { + return err + } + + // The version might have newlines or tabs in it, convert them to + // spaces. + for i, b := range uname.Version { + if b == '\n' || b == '\t' { + if i == len(uname.Version)-1 { + uname.Version[i] = 0 + } else { + uname.Version[i] = ' ' + } + } + } + + mib = []_C_int{CTL_HW, HW_MACHINE} + n = unsafe.Sizeof(uname.Machine) + if err := sysctlUname(mib, &uname.Machine[0], &n); err != nil { + return err + } + uname.Machine[unsafe.Sizeof(uname.Machine)-1] = 0 + + return nil +} + /* * Exposed directly */ @@ -142,10 +251,12 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { //sys Fchdir(fd int) (err error) //sys Fchflags(fd int, flags int) (err error) //sys Fchmod(fd int, mode uint32) (err error) +//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) //sys Fchown(fd int, uid int, gid int) (err error) //sys Flock(fd int, how int) (err error) //sys Fpathconf(fd int, name int) (val int, err error) //sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) //sys Fstatfs(fd int, stat *Statfs_t) (err error) //sys Fsync(fd int) (err error) //sys Ftruncate(fd int, length int64) (err error) @@ -174,11 +285,6 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { //sys Mkdir(path string, mode uint32) (err error) //sys Mkfifo(path string, mode uint32) (err error) //sys Mknod(path string, mode uint32, dev int) (err error) -//sys Mlock(b []byte) (err error) -//sys Mlockall(flags int) (err error) -//sys Mprotect(b []byte, prot int) (err error) -//sys Munlock(b []byte) (err error) -//sys Munlockall() (err error) //sys Nanosleep(time *Timespec, leftover *Timespec) (err error) //sys Open(path string, mode int, perm uint32) (fd int, err error) //sys Pathconf(path string, name int) (val int, err error) @@ -218,6 +324,7 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { //sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ //sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE //sys accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) +//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) /* * Unimplemented @@ -229,7 +336,6 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { // Getlogin // Sigpending // Sigaltstack -// Ioctl // Reboot // Execve // Vfork @@ -252,9 +358,6 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { // Add_profil // Kdebug_trace // Sigreturn -// Mmap -// Mlock -// Munlock // Atsocket // Kqueue_from_portset_np // Kqueue_portset @@ -264,7 +367,6 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { // Searchfs // Delete // Copyfile -// Poll // Watchevent // Waitevent // Modwatch @@ -347,8 +449,6 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { // Lio_listio // __pthread_cond_wait // Iopolicysys -// Mlockall -// Munlockall // __pthread_kill // __pthread_sigmask // __sigwait @@ -401,7 +501,6 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { // Sendmsg_nocancel // Recvfrom_nocancel // Accept_nocancel -// Msync_nocancel // Fcntl_nocancel // Select_nocancel // Fsync_nocancel @@ -413,7 +512,6 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { // Pread_nocancel // Pwrite_nocancel // Waitid_nocancel -// Poll_nocancel // Msgsnd_nocancel // Msgrcv_nocancel // Sem_wait_nocancel diff --git a/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go index da7cb79..9babb31 100644 --- a/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go +++ b/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go @@ -11,21 +11,12 @@ import ( "unsafe" ) -func Getpagesize() int { return 4096 } - -func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } - -func NsecToTimespec(nsec int64) (ts Timespec) { - ts.Sec = nsec / 1e9 - ts.Nsec = nsec % 1e9 - return +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} } -func NsecToTimeval(nsec int64) (tv Timeval) { - nsec += 999 // round up to microsecond - tv.Usec = nsec % 1e9 / 1e3 - tv.Sec = int64(nsec / 1e9) - return +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} } func SetKevent(k *Kevent_t, fd, mode, flags int) { diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd.go b/vendor/golang.org/x/sys/unix/syscall_freebsd.go index 077d1f3..ba9df4a 100644 --- a/vendor/golang.org/x/sys/unix/syscall_freebsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd.go @@ -12,8 +12,12 @@ package unix -import "unsafe" +import ( + "strings" + "unsafe" +) +// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets. type SockaddrDatalink struct { Len uint8 Family uint8 @@ -32,7 +36,7 @@ func nametomib(name string) (mib []_C_int, err error) { // NOTE(rsc): It seems strange to set the buffer to have // size CTL_MAXNAME+2 but use only CTL_MAXNAME - // as the size. I don't know why the +2 is here, but the + // as the size. I don't know why the +2 is here, but the // kernel uses +2 for its own implementation of this function. // I am scared that if we don't include the +2 here, the kernel // will silently write 2 words farther than we specify @@ -54,18 +58,6 @@ func nametomib(name string) (mib []_C_int, err error) { return buf[0 : n/siz], nil } -func direntIno(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno)) -} - -func direntReclen(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) -} - -func direntNamlen(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) -} - //sysnb pipe() (r int, w int, err error) func Pipe(p []int) (err error) { @@ -105,6 +97,23 @@ func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) { return } +const ImplementsGetwd = true + +//sys Getcwd(buf []byte) (n int, err error) = SYS___GETCWD + +func Getwd() (string, error) { + var buf [PathMax]byte + _, err := Getcwd(buf[0:]) + if err != nil { + return "", err + } + n := clen(buf[:]) + if n < 1 { + return "", EINVAL + } + return string(buf[:n]), nil +} + func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { var _p0 unsafe.Pointer var bufsize uintptr @@ -120,17 +129,15 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { return } +func setattrlistTimes(path string, times []Timespec, flags int) error { + // used on Darwin for UtimesNano + return ENOSYS +} + // Derive extattr namespace and attribute name func xattrnamespace(fullattr string) (ns int, attr string, err error) { - s := -1 - for idx, val := range fullattr { - if val == '.' { - s = idx - break - } - } - + s := strings.IndexByte(fullattr, '.') if s == -1 { return -1, "", ENOATTR } @@ -271,7 +278,6 @@ func Listxattr(file string, dest []byte) (sz int, err error) { // FreeBSD won't allow you to list xattrs from multiple namespaces s := 0 - var e error for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} { stmp, e := ExtattrListFile(file, nsid, uintptr(d), destsiz) @@ -283,7 +289,6 @@ func Listxattr(file string, dest []byte) (sz int, err error) { * we don't have read permissions on, so don't ignore those errors */ if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER { - e = nil continue } else if e != nil { return s, e @@ -297,7 +302,7 @@ func Listxattr(file string, dest []byte) (sz int, err error) { d = initxattrdest(dest, s) } - return s, e + return s, nil } func Flistxattr(fd int, dest []byte) (sz int, err error) { @@ -305,11 +310,9 @@ func Flistxattr(fd int, dest []byte) (sz int, err error) { destsiz := len(dest) s := 0 - var e error for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} { stmp, e := ExtattrListFd(fd, nsid, uintptr(d), destsiz) if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER { - e = nil continue } else if e != nil { return s, e @@ -323,7 +326,7 @@ func Flistxattr(fd int, dest []byte) (sz int, err error) { d = initxattrdest(dest, s) } - return s, e + return s, nil } func Llistxattr(link string, dest []byte) (sz int, err error) { @@ -331,11 +334,9 @@ func Llistxattr(link string, dest []byte) (sz int, err error) { destsiz := len(dest) s := 0 - var e error for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} { stmp, e := ExtattrListLink(link, nsid, uintptr(d), destsiz) if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER { - e = nil continue } else if e != nil { return s, e @@ -349,7 +350,92 @@ func Llistxattr(link string, dest []byte) (sz int, err error) { d = initxattrdest(dest, s) } - return s, e + return s, nil +} + +//sys ioctl(fd int, req uint, arg uintptr) (err error) + +// ioctl itself should not be exposed directly, but additional get/set +// functions for specific types are permissible. + +// IoctlSetInt performs an ioctl operation which sets an integer value +// on fd, using the specified request number. +func IoctlSetInt(fd int, req uint, value int) error { + return ioctl(fd, req, uintptr(value)) +} + +func IoctlSetWinsize(fd int, req uint, value *Winsize) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +func IoctlSetTermios(fd int, req uint, value *Termios) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +// IoctlGetInt performs an ioctl operation which gets an integer value +// from fd, using the specified request number. +func IoctlGetInt(fd int, req uint) (int, error) { + var value int + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return value, err +} + +func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { + var value Winsize + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func IoctlGetTermios(fd int, req uint) (*Termios, error) { + var value Termios + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func Uname(uname *Utsname) error { + mib := []_C_int{CTL_KERN, KERN_OSTYPE} + n := unsafe.Sizeof(uname.Sysname) + if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_HOSTNAME} + n = unsafe.Sizeof(uname.Nodename) + if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_OSRELEASE} + n = unsafe.Sizeof(uname.Release) + if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_VERSION} + n = unsafe.Sizeof(uname.Version) + if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil { + return err + } + + // The version might have newlines or tabs in it, convert them to + // spaces. + for i, b := range uname.Version { + if b == '\n' || b == '\t' { + if i == len(uname.Version)-1 { + uname.Version[i] = 0 + } else { + uname.Version[i] = ' ' + } + } + } + + mib = []_C_int{CTL_HW, HW_MACHINE} + n = unsafe.Sizeof(uname.Machine) + if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil { + return err + } + + return nil } /* @@ -357,6 +443,9 @@ func Llistxattr(link string, dest []byte) (sz int, err error) { */ //sys Access(path string, mode uint32) (err error) //sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) +//sys CapEnter() (err error) +//sys capRightsGet(version int, fd int, rightsp *CapRights) (err error) = SYS___CAP_RIGHTS_GET +//sys capRightsLimit(fd int, rightsp *CapRights) (err error) //sys Chdir(path string) (err error) //sys Chflags(path string, flags int) (err error) //sys Chmod(path string, mode uint32) (err error) @@ -379,16 +468,21 @@ func Llistxattr(link string, dest []byte) (sz int, err error) { //sys ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) //sys ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_POSIX_FADVISE +//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) //sys Fchdir(fd int) (err error) //sys Fchflags(fd int, flags int) (err error) //sys Fchmod(fd int, mode uint32) (err error) +//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) //sys Fchown(fd int, uid int, gid int) (err error) +//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) //sys Flock(fd int, how int) (err error) //sys Fpathconf(fd int, name int) (val int, err error) //sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) //sys Fstatfs(fd int, stat *Statfs_t) (err error) //sys Fsync(fd int) (err error) //sys Ftruncate(fd int, length int64) (err error) +//sys Getdents(fd int, buf []byte) (n int, err error) //sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) //sys Getdtablesize() (size int) //sysnb Getegid() (egid int) @@ -409,24 +503,24 @@ func Llistxattr(link string, dest []byte) (sz int, err error) { //sys Kqueue() (fd int, err error) //sys Lchown(path string, uid int, gid int) (err error) //sys Link(path string, link string) (err error) +//sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) //sys Listen(s int, backlog int) (err error) //sys Lstat(path string, stat *Stat_t) (err error) //sys Mkdir(path string, mode uint32) (err error) +//sys Mkdirat(dirfd int, path string, mode uint32) (err error) //sys Mkfifo(path string, mode uint32) (err error) //sys Mknod(path string, mode uint32, dev int) (err error) -//sys Mlock(b []byte) (err error) -//sys Mlockall(flags int) (err error) -//sys Mprotect(b []byte, prot int) (err error) -//sys Munlock(b []byte) (err error) -//sys Munlockall() (err error) //sys Nanosleep(time *Timespec, leftover *Timespec) (err error) //sys Open(path string, mode int, perm uint32) (fd int, err error) +//sys Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) //sys Pathconf(path string, name int) (val int, err error) //sys Pread(fd int, p []byte, offset int64) (n int, err error) //sys Pwrite(fd int, p []byte, offset int64) (n int, err error) //sys read(fd int, p []byte) (n int, err error) //sys Readlink(path string, buf []byte) (n int, err error) +//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error) //sys Rename(from string, to string) (err error) +//sys Renameat(fromfd int, from string, tofd int, to string) (err error) //sys Revoke(path string) (err error) //sys Rmdir(path string) (err error) //sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK @@ -448,11 +542,13 @@ func Llistxattr(link string, dest []byte) (sz int, err error) { //sys Stat(path string, stat *Stat_t) (err error) //sys Statfs(path string, stat *Statfs_t) (err error) //sys Symlink(path string, link string) (err error) +//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error) //sys Sync() (err error) //sys Truncate(path string, length int64) (err error) //sys Umask(newmask int) (oldmask int) //sys Undelete(path string) (err error) //sys Unlink(path string) (err error) +//sys Unlinkat(dirfd int, path string, flags int) (err error) //sys Unmount(path string, flags int) (err error) //sys write(fd int, p []byte) (n int, err error) //sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) @@ -460,6 +556,7 @@ func Llistxattr(link string, dest []byte) (sz int, err error) { //sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ //sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE //sys accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) +//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) /* * Unimplemented @@ -493,9 +590,6 @@ func Llistxattr(link string, dest []byte) (sz int, err error) { // Add_profil // Kdebug_trace // Sigreturn -// Mmap -// Mlock -// Munlock // Atsocket // Kqueue_from_portset_np // Kqueue_portset @@ -505,7 +599,6 @@ func Llistxattr(link string, dest []byte) (sz int, err error) { // Searchfs // Delete // Copyfile -// Poll // Watchevent // Waitevent // Modwatch @@ -588,8 +681,6 @@ func Llistxattr(link string, dest []byte) (sz int, err error) { // Lio_listio // __pthread_cond_wait // Iopolicysys -// Mlockall -// Munlockall // __pthread_kill // __pthread_sigmask // __sigwait @@ -642,7 +733,6 @@ func Llistxattr(link string, dest []byte) (sz int, err error) { // Sendmsg_nocancel // Recvfrom_nocancel // Accept_nocancel -// Msync_nocancel // Fcntl_nocancel // Select_nocancel // Fsync_nocancel diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go index 6a0cd80..21e0395 100644 --- a/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go @@ -11,21 +11,12 @@ import ( "unsafe" ) -func Getpagesize() int { return 4096 } - -func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } - -func NsecToTimespec(nsec int64) (ts Timespec) { - ts.Sec = int32(nsec / 1e9) - ts.Nsec = int32(nsec % 1e9) - return +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: int32(sec), Nsec: int32(nsec)} } -func NsecToTimeval(nsec int64) (tv Timeval) { - nsec += 999 // round up to microsecond - tv.Usec = int32(nsec % 1e9 / 1e3) - tv.Sec = int32(nsec / 1e9) - return +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: int32(sec), Usec: int32(usec)} } func SetKevent(k *Kevent_t, fd, mode, flags int) { diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go index e142540..9c945a6 100644 --- a/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go @@ -11,21 +11,12 @@ import ( "unsafe" ) -func Getpagesize() int { return 4096 } - -func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } - -func NsecToTimespec(nsec int64) (ts Timespec) { - ts.Sec = nsec / 1e9 - ts.Nsec = nsec % 1e9 - return +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} } -func NsecToTimeval(nsec int64) (tv Timeval) { - nsec += 999 // round up to microsecond - tv.Usec = nsec % 1e9 / 1e3 - tv.Sec = int64(nsec / 1e9) - return +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} } func SetKevent(k *Kevent_t, fd, mode, flags int) { diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go index 5504cb1..5cd6243 100644 --- a/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go @@ -11,21 +11,12 @@ import ( "unsafe" ) -func Getpagesize() int { return 4096 } - -func TimespecToNsec(ts Timespec) int64 { return ts.Sec*1e9 + int64(ts.Nsec) } - -func NsecToTimespec(nsec int64) (ts Timespec) { - ts.Sec = nsec / 1e9 - ts.Nsec = int32(nsec % 1e9) - return +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: int32(nsec)} } -func NsecToTimeval(nsec int64) (tv Timeval) { - nsec += 999 // round up to microsecond - tv.Usec = int32(nsec % 1e9 / 1e3) - tv.Sec = nsec / 1e9 - return +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} } func SetKevent(k *Kevent_t, fd, mode, flags int) { diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_test.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_test.go index 3c3d825..654439e 100644 --- a/vendor/golang.org/x/sys/unix/syscall_freebsd_test.go +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_test.go @@ -7,14 +7,291 @@ package unix_test import ( + "flag" + "fmt" + "io/ioutil" + "os" + "os/exec" + "path" + "path/filepath" + "runtime" "testing" "golang.org/x/sys/unix" ) func TestSysctlUint64(t *testing.T) { - _, err := unix.SysctlUint64("security.mac.labeled") + _, err := unix.SysctlUint64("vm.swap_total") if err != nil { t.Fatal(err) } } + +// FIXME: Infrastructure for launching tests in subprocesses stolen from openbsd_test.go - refactor? +// testCmd generates a proper command that, when executed, runs the test +// corresponding to the given key. + +type testProc struct { + fn func() // should always exit instead of returning + arg func(t *testing.T) string // generate argument for test + cleanup func(arg string) error // for instance, delete coredumps from testing pledge + success bool // whether zero-exit means success or failure +} + +var ( + testProcs = map[string]testProc{} + procName = "" + procArg = "" +) + +const ( + optName = "sys-unix-internal-procname" + optArg = "sys-unix-internal-arg" +) + +func init() { + flag.StringVar(&procName, optName, "", "internal use only") + flag.StringVar(&procArg, optArg, "", "internal use only") + +} + +func testCmd(procName string, procArg string) (*exec.Cmd, error) { + exe, err := filepath.Abs(os.Args[0]) + if err != nil { + return nil, err + } + cmd := exec.Command(exe, "-"+optName+"="+procName, "-"+optArg+"="+procArg) + cmd.Stdout, cmd.Stderr = os.Stdout, os.Stderr + return cmd, nil +} + +// ExitsCorrectly is a comprehensive, one-line-of-use wrapper for testing +// a testProc with a key. +func ExitsCorrectly(t *testing.T, procName string) { + s := testProcs[procName] + arg := "-" + if s.arg != nil { + arg = s.arg(t) + } + c, err := testCmd(procName, arg) + defer func(arg string) { + if err := s.cleanup(arg); err != nil { + t.Fatalf("Failed to run cleanup for %s %s %#v", procName, err, err) + } + }(arg) + if err != nil { + t.Fatalf("Failed to construct command for %s", procName) + } + if (c.Run() == nil) != s.success { + result := "succeed" + if !s.success { + result = "fail" + } + t.Fatalf("Process did not %s when it was supposed to", result) + } +} + +func TestMain(m *testing.M) { + flag.Parse() + if procName != "" { + t := testProcs[procName] + t.fn() + os.Stderr.WriteString("test function did not exit\n") + if t.success { + os.Exit(1) + } else { + os.Exit(0) + } + } + os.Exit(m.Run()) +} + +// end of infrastructure + +const testfile = "gocapmodetest" +const testfile2 = testfile + "2" + +func CapEnterTest() { + _, err := os.OpenFile(path.Join(procArg, testfile), os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) + if err != nil { + panic(fmt.Sprintf("OpenFile: %s", err)) + } + + err = unix.CapEnter() + if err != nil { + panic(fmt.Sprintf("CapEnter: %s", err)) + } + + _, err = os.OpenFile(path.Join(procArg, testfile2), os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) + if err == nil { + panic("OpenFile works!") + } + if err.(*os.PathError).Err != unix.ECAPMODE { + panic(fmt.Sprintf("OpenFile failed wrong: %s %#v", err, err)) + } + os.Exit(0) +} + +func makeTempDir(t *testing.T) string { + d, err := ioutil.TempDir("", "go_openat_test") + if err != nil { + t.Fatalf("TempDir failed: %s", err) + } + return d +} + +func removeTempDir(arg string) error { + err := os.RemoveAll(arg) + if err != nil && err.(*os.PathError).Err == unix.ENOENT { + return nil + } + return err +} + +func init() { + testProcs["cap_enter"] = testProc{ + CapEnterTest, + makeTempDir, + removeTempDir, + true, + } +} + +func TestCapEnter(t *testing.T) { + if runtime.GOARCH != "amd64" { + t.Skipf("skipping test on %s", runtime.GOARCH) + } + ExitsCorrectly(t, "cap_enter") +} + +func OpenatTest() { + f, err := os.Open(procArg) + if err != nil { + panic(err) + } + + err = unix.CapEnter() + if err != nil { + panic(fmt.Sprintf("CapEnter: %s", err)) + } + + fxx, err := unix.Openat(int(f.Fd()), "xx", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) + if err != nil { + panic(err) + } + unix.Close(fxx) + + // The right to open BASE/xx is not ambient + _, err = os.OpenFile(procArg+"/xx", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) + if err == nil { + panic("OpenFile succeeded") + } + if err.(*os.PathError).Err != unix.ECAPMODE { + panic(fmt.Sprintf("OpenFile failed wrong: %s %#v", err, err)) + } + + // Can't make a new directory either + err = os.Mkdir(procArg+"2", 0777) + if err == nil { + panic("MKdir succeeded") + } + if err.(*os.PathError).Err != unix.ECAPMODE { + panic(fmt.Sprintf("Mkdir failed wrong: %s %#v", err, err)) + } + + // Remove all caps except read and lookup. + r, err := unix.CapRightsInit([]uint64{unix.CAP_READ, unix.CAP_LOOKUP}) + if err != nil { + panic(fmt.Sprintf("CapRightsInit failed: %s %#v", err, err)) + } + err = unix.CapRightsLimit(f.Fd(), r) + if err != nil { + panic(fmt.Sprintf("CapRightsLimit failed: %s %#v", err, err)) + } + + // Check we can get the rights back again + r, err = unix.CapRightsGet(f.Fd()) + if err != nil { + panic(fmt.Sprintf("CapRightsGet failed: %s %#v", err, err)) + } + b, err := unix.CapRightsIsSet(r, []uint64{unix.CAP_READ, unix.CAP_LOOKUP}) + if err != nil { + panic(fmt.Sprintf("CapRightsIsSet failed: %s %#v", err, err)) + } + if !b { + panic(fmt.Sprintf("Unexpected rights")) + } + b, err = unix.CapRightsIsSet(r, []uint64{unix.CAP_READ, unix.CAP_LOOKUP, unix.CAP_WRITE}) + if err != nil { + panic(fmt.Sprintf("CapRightsIsSet failed: %s %#v", err, err)) + } + if b { + panic(fmt.Sprintf("Unexpected rights (2)")) + } + + // Can no longer create a file + _, err = unix.Openat(int(f.Fd()), "xx2", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) + if err == nil { + panic("Openat succeeded") + } + if err != unix.ENOTCAPABLE { + panic(fmt.Sprintf("OpenFileAt failed wrong: %s %#v", err, err)) + } + + // But can read an existing one + _, err = unix.Openat(int(f.Fd()), "xx", os.O_RDONLY, 0666) + if err != nil { + panic(fmt.Sprintf("Openat failed: %s %#v", err, err)) + } + + os.Exit(0) +} + +func init() { + testProcs["openat"] = testProc{ + OpenatTest, + makeTempDir, + removeTempDir, + true, + } +} + +func TestOpenat(t *testing.T) { + if runtime.GOARCH != "amd64" { + t.Skipf("skipping test on %s", runtime.GOARCH) + } + ExitsCorrectly(t, "openat") +} + +func TestCapRightsSetAndClear(t *testing.T) { + r, err := unix.CapRightsInit([]uint64{unix.CAP_READ, unix.CAP_WRITE, unix.CAP_PDWAIT}) + if err != nil { + t.Fatalf("CapRightsInit failed: %s", err) + } + + err = unix.CapRightsSet(r, []uint64{unix.CAP_EVENT, unix.CAP_LISTEN}) + if err != nil { + t.Fatalf("CapRightsSet failed: %s", err) + } + + b, err := unix.CapRightsIsSet(r, []uint64{unix.CAP_READ, unix.CAP_WRITE, unix.CAP_PDWAIT, unix.CAP_EVENT, unix.CAP_LISTEN}) + if err != nil { + t.Fatalf("CapRightsIsSet failed: %s", err) + } + if !b { + t.Fatalf("Wrong rights set") + } + + err = unix.CapRightsClear(r, []uint64{unix.CAP_READ, unix.CAP_PDWAIT}) + if err != nil { + t.Fatalf("CapRightsClear failed: %s", err) + } + + b, err = unix.CapRightsIsSet(r, []uint64{unix.CAP_WRITE, unix.CAP_EVENT, unix.CAP_LISTEN}) + if err != nil { + t.Fatalf("CapRightsIsSet failed: %s", err) + } + if !b { + t.Fatalf("Wrong rights set") + } +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go index c1abe45..76cf81f 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux.go @@ -36,6 +36,20 @@ func Creat(path string, mode uint32) (fd int, err error) { return Open(path, O_CREAT|O_WRONLY|O_TRUNC, mode) } +//sys fchmodat(dirfd int, path string, mode uint32) (err error) + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + // Linux fchmodat doesn't support the flags parameter. Mimick glibc's behavior + // and check the flags. Otherwise the mode would be applied to the symlink + // destination which is not what the user expects. + if flags&^AT_SYMLINK_NOFOLLOW != 0 { + return EINVAL + } else if flags&AT_SYMLINK_NOFOLLOW != 0 { + return EOPNOTSUPP + } + return fchmodat(dirfd, path, mode) +} + //sys ioctl(fd int, req uint, arg uintptr) (err error) // ioctl itself should not be exposed directly, but additional get/set @@ -43,10 +57,18 @@ func Creat(path string, mode uint32) (fd int, err error) { // IoctlSetInt performs an ioctl operation which sets an integer value // on fd, using the specified request number. -func IoctlSetInt(fd int, req uint, value int) (err error) { +func IoctlSetInt(fd int, req uint, value int) error { return ioctl(fd, req, uintptr(value)) } +func IoctlSetWinsize(fd int, req uint, value *Winsize) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +func IoctlSetTermios(fd int, req uint, value *Termios) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + // IoctlGetInt performs an ioctl operation which gets an integer value // from fd, using the specified request number. func IoctlGetInt(fd int, req uint) (int, error) { @@ -55,6 +77,18 @@ func IoctlGetInt(fd int, req uint) (int, error) { return value, err } +func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { + var value Winsize + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func IoctlGetTermios(fd int, req uint) (*Termios, error) { + var value Termios + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + //sys Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) func Link(oldpath string, newpath string) (err error) { @@ -221,7 +255,7 @@ func Getgroups() (gids []int, err error) { return nil, nil } - // Sanity check group count. Max is 1<<16 on Linux. + // Sanity check group count. Max is 1<<16 on Linux. if n < 0 || n > 1<<20 { return nil, EINVAL } @@ -256,8 +290,8 @@ type WaitStatus uint32 // 0x7F (stopped), or a signal number that caused an exit. // The 0x80 bit is whether there was a core dump. // An extra number (exit code, signal causing a stop) -// is in the high bits. At least that's the idea. -// There are various irregularities. For example, the +// is in the high bits. At least that's the idea. +// There are various irregularities. For example, the // "continued" status is 0xFFFF, distinguishing itself // from stopped via the core dump bit. @@ -318,10 +352,14 @@ func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, return } -func Mkfifo(path string, mode uint32) (err error) { +func Mkfifo(path string, mode uint32) error { return Mknod(path, mode|S_IFIFO, 0) } +func Mkfifoat(dirfd int, path string, mode uint32) error { + return Mknodat(dirfd, path, mode|S_IFIFO, 0) +} + func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { if sa.Port < 0 || sa.Port > 0xFFFF { return nil, 0, EINVAL @@ -375,6 +413,7 @@ func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) { return unsafe.Pointer(&sa.raw), sl, nil } +// SockaddrLinklayer implements the Sockaddr interface for AF_PACKET type sockets. type SockaddrLinklayer struct { Protocol uint16 Ifindex int @@ -401,6 +440,7 @@ func (sa *SockaddrLinklayer) sockaddr() (unsafe.Pointer, _Socklen, error) { return unsafe.Pointer(&sa.raw), SizeofSockaddrLinklayer, nil } +// SockaddrNetlink implements the Sockaddr interface for AF_NETLINK type sockets. type SockaddrNetlink struct { Family uint16 Pad uint16 @@ -417,6 +457,8 @@ func (sa *SockaddrNetlink) sockaddr() (unsafe.Pointer, _Socklen, error) { return unsafe.Pointer(&sa.raw), SizeofSockaddrNetlink, nil } +// SockaddrHCI implements the Sockaddr interface for AF_BLUETOOTH type sockets +// using the HCI protocol. type SockaddrHCI struct { Dev uint16 Channel uint16 @@ -430,6 +472,31 @@ func (sa *SockaddrHCI) sockaddr() (unsafe.Pointer, _Socklen, error) { return unsafe.Pointer(&sa.raw), SizeofSockaddrHCI, nil } +// SockaddrL2 implements the Sockaddr interface for AF_BLUETOOTH type sockets +// using the L2CAP protocol. +type SockaddrL2 struct { + PSM uint16 + CID uint16 + Addr [6]uint8 + AddrType uint8 + raw RawSockaddrL2 +} + +func (sa *SockaddrL2) sockaddr() (unsafe.Pointer, _Socklen, error) { + sa.raw.Family = AF_BLUETOOTH + psm := (*[2]byte)(unsafe.Pointer(&sa.raw.Psm)) + psm[0] = byte(sa.PSM) + psm[1] = byte(sa.PSM >> 8) + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Bdaddr[i] = sa.Addr[len(sa.Addr)-1-i] + } + cid := (*[2]byte)(unsafe.Pointer(&sa.raw.Cid)) + cid[0] = byte(sa.CID) + cid[1] = byte(sa.CID >> 8) + sa.raw.Bdaddr_type = sa.AddrType + return unsafe.Pointer(&sa.raw), SizeofSockaddrL2, nil +} + // SockaddrCAN implements the Sockaddr interface for AF_CAN type sockets. // The RxID and TxID fields are used for transport protocol addressing in // (CAN_TP16, CAN_TP20, CAN_MCNET, and CAN_ISOTP), they can be left with @@ -770,6 +837,24 @@ func GetsockoptTCPInfo(fd, level, opt int) (*TCPInfo, error) { return &value, err } +// GetsockoptString returns the string value of the socket option opt for the +// socket associated with fd at the given socket level. +func GetsockoptString(fd, level, opt int) (string, error) { + buf := make([]byte, 256) + vallen := _Socklen(len(buf)) + err := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen) + if err != nil { + if err == ERANGE { + buf = make([]byte, vallen) + err = getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen) + } + if err != nil { + return "", err + } + } + return string(buf[:vallen-1]), nil +} + func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) { return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq)) } @@ -888,17 +973,22 @@ func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from msg.Namelen = uint32(SizeofSockaddrAny) var iov Iovec if len(p) > 0 { - iov.Base = (*byte)(unsafe.Pointer(&p[0])) + iov.Base = &p[0] iov.SetLen(len(p)) } var dummy byte if len(oob) > 0 { + var sockType int + sockType, err = GetsockoptInt(fd, SOL_SOCKET, SO_TYPE) + if err != nil { + return + } // receive at least one normal byte - if len(p) == 0 { + if sockType != SOCK_DGRAM && len(p) == 0 { iov.Base = &dummy iov.SetLen(1) } - msg.Control = (*byte)(unsafe.Pointer(&oob[0])) + msg.Control = &oob[0] msg.SetControllen(len(oob)) } msg.Iov = &iov @@ -931,21 +1021,26 @@ func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) } } var msg Msghdr - msg.Name = (*byte)(unsafe.Pointer(ptr)) + msg.Name = (*byte)(ptr) msg.Namelen = uint32(salen) var iov Iovec if len(p) > 0 { - iov.Base = (*byte)(unsafe.Pointer(&p[0])) + iov.Base = &p[0] iov.SetLen(len(p)) } var dummy byte if len(oob) > 0 { + var sockType int + sockType, err = GetsockoptInt(fd, SOL_SOCKET, SO_TYPE) + if err != nil { + return 0, err + } // send at least one normal byte - if len(p) == 0 { + if sockType != SOCK_DGRAM && len(p) == 0 { iov.Base = &dummy iov.SetLen(1) } - msg.Control = (*byte)(unsafe.Pointer(&oob[0])) + msg.Control = &oob[0] msg.SetControllen(len(oob)) } msg.Iov = &iov @@ -975,7 +1070,7 @@ func ptracePeek(req int, pid int, addr uintptr, out []byte) (count int, err erro var buf [sizeofPtr]byte - // Leading edge. PEEKTEXT/PEEKDATA don't require aligned + // Leading edge. PEEKTEXT/PEEKDATA don't require aligned // access (PEEKUSER warns that it might), but if we don't // align our reads, we might straddle an unmapped page // boundary and not get the bytes leading up to the page @@ -1077,6 +1172,10 @@ func PtracePokeData(pid int, addr uintptr, data []byte) (count int, err error) { return ptracePoke(PTRACE_POKEDATA, PTRACE_PEEKDATA, pid, addr, data) } +func PtracePokeUser(pid int, addr uintptr, data []byte) (count int, err error) { + return ptracePoke(PTRACE_POKEUSR, PTRACE_PEEKUSR, pid, addr, data) +} + func PtraceGetRegs(pid int, regsout *PtraceRegs) (err error) { return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) } @@ -1120,22 +1219,6 @@ func ReadDirent(fd int, buf []byte) (n int, err error) { return Getdents(fd, buf) } -func direntIno(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino)) -} - -func direntReclen(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) -} - -func direntNamlen(buf []byte) (uint64, bool) { - reclen, ok := direntReclen(buf) - if !ok { - return 0, false - } - return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true -} - //sys mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) func Mount(source string, target string, fstype string, flags uintptr, data string) (err error) { @@ -1171,12 +1254,12 @@ func Mount(source string, target string, fstype string, flags uintptr, data stri //sysnb EpollCreate(size int) (fd int, err error) //sysnb EpollCreate1(flag int) (fd int, err error) //sysnb EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) +//sys Eventfd(initval uint, flags int) (fd int, err error) = SYS_EVENTFD2 //sys Exit(code int) = SYS_EXIT_GROUP //sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) //sys Fallocate(fd int, mode uint32, off int64, len int64) (err error) //sys Fchdir(fd int) (err error) //sys Fchmod(fd int, mode uint32) (err error) -//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) //sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) //sys fcntl(fd int, cmd int, arg int) (val int, err error) //sys Fdatasync(fd int) (err error) @@ -1203,13 +1286,18 @@ func Getpgrp() (pid int) { //sysnb InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) //sysnb Kill(pid int, sig syscall.Signal) (err error) //sys Klogctl(typ int, buf []byte) (n int, err error) = SYS_SYSLOG +//sys Lgetxattr(path string, attr string, dest []byte) (sz int, err error) //sys Listxattr(path string, dest []byte) (sz int, err error) +//sys Llistxattr(path string, dest []byte) (sz int, err error) +//sys Lremovexattr(path string, attr string) (err error) +//sys Lsetxattr(path string, attr string, data []byte, flags int) (err error) //sys Mkdirat(dirfd int, path string, mode uint32) (err error) //sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error) //sys Nanosleep(time *Timespec, leftover *Timespec) (err error) //sys PivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT //sysnb prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) = SYS_PRLIMIT64 //sys Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) +//sys Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) = SYS_PSELECT6 //sys read(fd int, p []byte) (n int, err error) //sys Removexattr(path string, attr string) (err error) //sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) @@ -1236,7 +1324,9 @@ func Setgid(uid int) (err error) { //sys Setpriority(which int, who int, prio int) (err error) //sys Setxattr(path string, attr string, data []byte, flags int) (err error) +//sys Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) //sys Sync() +//sys Syncfs(fd int) (err error) //sysnb Sysinfo(info *Sysinfo_t) (err error) //sys Tee(rfd int, wfd int, len int, flags int) (n int64, err error) //sysnb Tgkill(tgid int, tid int, sig syscall.Signal) (err error) @@ -1271,8 +1361,9 @@ func Munmap(b []byte) (err error) { //sys Madvise(b []byte, advice int) (err error) //sys Mprotect(b []byte, prot int) (err error) //sys Mlock(b []byte) (err error) -//sys Munlock(b []byte) (err error) //sys Mlockall(flags int) (err error) +//sys Msync(b []byte, flags int) (err error) +//sys Munlock(b []byte) (err error) //sys Munlockall() (err error) // Vmsplice splices user pages from a slice of Iovecs into a pipe specified by fd, @@ -1312,7 +1403,6 @@ func Vmsplice(fd int, iovs []Iovec, flags int) (int, error) { // EpollCtlOld // EpollPwait // EpollWaitOld -// Eventfd // Execve // Fgetxattr // Flistxattr @@ -1334,18 +1424,13 @@ func Vmsplice(fd int, iovs []Iovec, flags int) (int, error) { // IoprioGet // IoprioSet // KexecLoad -// Lgetxattr -// Llistxattr // LookupDcookie -// Lremovexattr -// Lsetxattr // Mbind // MigratePages // Mincore // ModifyLdt // Mount // MovePages -// Mprotect // MqGetsetattr // MqNotify // MqOpen @@ -1357,8 +1442,6 @@ func Vmsplice(fd int, iovs []Iovec, flags int) (int, error) { // Msgget // Msgrcv // Msgsnd -// Msync -// Newfstatat // Nfsservctl // Personality // Pselect6 @@ -1379,11 +1462,9 @@ func Vmsplice(fd int, iovs []Iovec, flags int) (int, error) { // RtSigtimedwait // SchedGetPriorityMax // SchedGetPriorityMin -// SchedGetaffinity // SchedGetparam // SchedGetscheduler // SchedRrGetInterval -// SchedSetaffinity // SchedSetparam // SchedYield // Security diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_386.go b/vendor/golang.org/x/sys/unix/syscall_linux_386.go index 2b881b9..bb8e4fb 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_386.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_386.go @@ -14,21 +14,12 @@ import ( "unsafe" ) -func Getpagesize() int { return 4096 } - -func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } - -func NsecToTimespec(nsec int64) (ts Timespec) { - ts.Sec = int32(nsec / 1e9) - ts.Nsec = int32(nsec % 1e9) - return +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: int32(sec), Nsec: int32(nsec)} } -func NsecToTimeval(nsec int64) (tv Timeval) { - nsec += 999 // round up to microsecond - tv.Sec = int32(nsec / 1e9) - tv.Usec = int32(nsec % 1e9 / 1e3) - return +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: int32(sec), Usec: int32(usec)} } //sysnb pipe(p *[2]_C_int) (err error) @@ -63,6 +54,7 @@ func Pipe2(p []int, flags int) (err error) { //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64_64 //sys Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32 //sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 +//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64 //sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64 //sysnb Getegid() (egid int) = SYS_GETEGID32 //sysnb Geteuid() (euid int) = SYS_GETEUID32 @@ -185,9 +177,9 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { // On x86 Linux, all the socket calls go through an extra indirection, // I think because the 5-register system call interface can't handle -// the 6-argument calls like sendto and recvfrom. Instead the +// the 6-argument calls like sendto and recvfrom. Instead the // arguments to the underlying system call are the number below -// and a pointer to an array of uintptr. We hide the pointer in the +// and a pointer to an array of uintptr. We hide the pointer in the // socketcall assembly to avoid allocation on every system call. const ( diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go index 9516a3f..53d38a5 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go @@ -11,6 +11,7 @@ package unix //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 //sys Fchown(fd int, uid int, gid int) (err error) //sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT //sys Fstatfs(fd int, buf *Statfs_t) (err error) //sys Ftruncate(fd int, length int64) (err error) //sysnb Getegid() (egid int) @@ -69,8 +70,6 @@ func Gettimeofday(tv *Timeval) (err error) { return nil } -func Getpagesize() int { return 4096 } - func Time(t *Time_t) (tt Time_t, err error) { var tv Timeval errno := gettimeofday(&tv) @@ -85,19 +84,12 @@ func Time(t *Time_t) (tt Time_t, err error) { //sys Utime(path string, buf *Utimbuf) (err error) -func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } - -func NsecToTimespec(nsec int64) (ts Timespec) { - ts.Sec = nsec / 1e9 - ts.Nsec = nsec % 1e9 - return +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} } -func NsecToTimeval(nsec int64) (tv Timeval) { - nsec += 999 // round up to microsecond - tv.Sec = nsec / 1e9 - tv.Usec = nsec % 1e9 / 1e3 - return +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} } //sysnb pipe(p *[2]_C_int) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm.go index 71d8702..c59f858 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm.go @@ -11,21 +11,12 @@ import ( "unsafe" ) -func Getpagesize() int { return 4096 } - -func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } - -func NsecToTimespec(nsec int64) (ts Timespec) { - ts.Sec = int32(nsec / 1e9) - ts.Nsec = int32(nsec % 1e9) - return +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: int32(sec), Nsec: int32(nsec)} } -func NsecToTimeval(nsec int64) (tv Timeval) { - nsec += 999 // round up to microsecond - tv.Sec = int32(nsec / 1e9) - tv.Usec = int32(nsec % 1e9 / 1e3) - return +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: int32(sec), Usec: int32(usec)} } func Pipe(p []int) (err error) { @@ -86,6 +77,7 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { //sys Dup2(oldfd int, newfd int) (err error) //sys Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32 //sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 +//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64 //sysnb Getegid() (egid int) = SYS_GETEGID32 //sysnb Geteuid() (euid int) = SYS_GETEUID32 //sysnb Getgid() (gid int) = SYS_GETGID32 diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go index 4a13639..a1e8a60 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go @@ -7,6 +7,7 @@ package unix //sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 //sys Fchown(fd int, uid int, gid int) (err error) //sys Fstat(fd int, stat *Stat_t) (err error) //sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) @@ -21,7 +22,15 @@ package unix //sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 //sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 //sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK -//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS_PSELECT6 + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + var ts *Timespec + if timeout != nil { + ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} + } + return Pselect(nfd, r, w, e, ts, nil) +} + //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) //sys Setfsgid(gid int) (err error) //sys Setfsuid(uid int) (err error) @@ -66,23 +75,14 @@ func Lstat(path string, stat *Stat_t) (err error) { //sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) //sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) -func Getpagesize() int { return 65536 } - //sysnb Gettimeofday(tv *Timeval) (err error) -func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } - -func NsecToTimespec(nsec int64) (ts Timespec) { - ts.Sec = nsec / 1e9 - ts.Nsec = nsec % 1e9 - return +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} } -func NsecToTimeval(nsec int64) (tv Timeval) { - nsec += 999 // round up to microsecond - tv.Sec = nsec / 1e9 - tv.Usec = nsec % 1e9 / 1e3 - return +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} } func Time(t *Time_t) (Time_t, error) { diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_gc.go b/vendor/golang.org/x/sys/unix/syscall_linux_gc.go new file mode 100644 index 0000000..c26e6ec --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_gc.go @@ -0,0 +1,14 @@ +// Copyright 2018 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 linux,!gccgo + +package unix + +// SyscallNoError may be used instead of Syscall for syscalls that don't fail. +func SyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr) + +// RawSyscallNoError may be used instead of RawSyscall for syscalls that don't +// fail. +func RawSyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_gccgo.go b/vendor/golang.org/x/sys/unix/syscall_linux_gccgo.go new file mode 100644 index 0000000..df9c123 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_gccgo.go @@ -0,0 +1,21 @@ +// Copyright 2018 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 linux +// +build gccgo +// +build 386 arm + +package unix + +import ( + "syscall" + "unsafe" +) + +func seek(fd int, offset int64, whence int) (newoffset int64, err syscall.Errno) { + offsetLow := uint32(offset & 0xffffffff) + offsetHigh := uint32((offset >> 32) & 0xffffffff) + _, _, err = Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offsetHigh), uintptr(offsetLow), uintptr(unsafe.Pointer(&newoffset)), uintptr(whence), 0) + return newoffset, err +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go index 73318e5..090ed40 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go @@ -9,7 +9,9 @@ package unix //sys Dup2(oldfd int, newfd int) (err error) //sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 //sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT //sys Fstatfs(fd int, buf *Statfs_t) (err error) //sys Ftruncate(fd int, length int64) (err error) //sysnb Getegid() (egid int) @@ -23,7 +25,15 @@ package unix //sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 //sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 //sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK -//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS_PSELECT6 + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + var ts *Timespec + if timeout != nil { + ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} + } + return Pselect(nfd, r, w, e, ts, nil) +} + //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) //sys Setfsgid(gid int) (err error) //sys Setfsuid(uid int) (err error) @@ -55,8 +65,6 @@ package unix //sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) //sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) -func Getpagesize() int { return 65536 } - //sysnb Gettimeofday(tv *Timeval) (err error) func Time(t *Time_t) (tt Time_t, err error) { @@ -73,19 +81,12 @@ func Time(t *Time_t) (tt Time_t, err error) { //sys Utime(path string, buf *Utimbuf) (err error) -func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } - -func NsecToTimespec(nsec int64) (ts Timespec) { - ts.Sec = nsec / 1e9 - ts.Nsec = nsec % 1e9 - return +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} } -func NsecToTimeval(nsec int64) (tv Timeval) { - nsec += 999 // round up to microsecond - tv.Sec = nsec / 1e9 - tv.Usec = nsec % 1e9 / 1e3 - return +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} } func Pipe(p []int) (err error) { diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go index b83d93f..3d5817f 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go @@ -15,6 +15,7 @@ import ( func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) //sys Dup2(oldfd int, newfd int) (err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 //sys Fchown(fd int, uid int, gid int) (err error) //sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64 //sysnb Getegid() (egid int) @@ -65,6 +66,7 @@ func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, //sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 //sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 +//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64 //sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 //sys Utime(path string, buf *Utimbuf) (err error) @@ -99,19 +101,12 @@ func Seek(fd int, offset int64, whence int) (off int64, err error) { return } -func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } - -func NsecToTimespec(nsec int64) (ts Timespec) { - ts.Sec = int32(nsec / 1e9) - ts.Nsec = int32(nsec % 1e9) - return +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: int32(sec), Nsec: int32(nsec)} } -func NsecToTimeval(nsec int64) (tv Timeval) { - nsec += 999 // round up to microsecond - tv.Sec = int32(nsec / 1e9) - tv.Usec = int32(nsec % 1e9 / 1e3) - return +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: int32(sec), Usec: int32(usec)} } //sysnb pipe2(p *[2]_C_int, flags int) (err error) @@ -235,5 +230,3 @@ func Poll(fds []PollFd, timeout int) (n int, err error) { } return poll(&fds[0], len(fds), timeout) } - -func Getpagesize() int { return 4096 } diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go index 60770f6..6fb8733 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go @@ -9,8 +9,10 @@ package unix //sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) //sys Dup2(oldfd int, newfd int) (err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 //sys Fchown(fd int, uid int, gid int) (err error) //sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT //sys Fstatfs(fd int, buf *Statfs_t) (err error) //sys Ftruncate(fd int, length int64) (err error) //sysnb Getegid() (egid int) @@ -28,7 +30,7 @@ package unix //sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 //sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 //sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK -//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) //sys Setfsgid(gid int) (err error) //sys Setfsuid(uid int) (err error) @@ -61,26 +63,17 @@ package unix //sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) //sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) -func Getpagesize() int { return 65536 } - //sysnb Gettimeofday(tv *Timeval) (err error) //sysnb Time(t *Time_t) (tt Time_t, err error) //sys Utime(path string, buf *Utimbuf) (err error) -func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } - -func NsecToTimespec(nsec int64) (ts Timespec) { - ts.Sec = nsec / 1e9 - ts.Nsec = nsec % 1e9 - return +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} } -func NsecToTimeval(nsec int64) (tv Timeval) { - nsec += 999 // round up to microsecond - tv.Sec = nsec / 1e9 - tv.Usec = nsec % 1e9 / 1e3 - return +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} } func (r *PtraceRegs) PC() uint64 { return r.Nip } diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go index 1708a4b..c0d86e7 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go @@ -15,6 +15,7 @@ import ( //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 //sys Fchown(fd int, uid int, gid int) (err error) //sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT //sys Fstatfs(fd int, buf *Statfs_t) (err error) //sys Ftruncate(fd int, length int64) (err error) //sysnb Getegid() (egid int) @@ -46,8 +47,6 @@ import ( //sysnb getgroups(n int, list *_Gid_t) (nn int, err error) //sysnb setgroups(n int, list *_Gid_t) (err error) -func Getpagesize() int { return 4096 } - //sysnb Gettimeofday(tv *Timeval) (err error) func Time(t *Time_t) (tt Time_t, err error) { @@ -64,19 +63,12 @@ func Time(t *Time_t) (tt Time_t, err error) { //sys Utime(path string, buf *Utimbuf) (err error) -func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } - -func NsecToTimespec(nsec int64) (ts Timespec) { - ts.Sec = nsec / 1e9 - ts.Nsec = nsec % 1e9 - return +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} } -func NsecToTimeval(nsec int64) (tv Timeval) { - nsec += 999 // round up to microsecond - tv.Sec = nsec / 1e9 - tv.Usec = nsec % 1e9 / 1e3 - return +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} } //sysnb pipe2(p *[2]_C_int, flags int) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go b/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go index 20b7454..78c1e0d 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go @@ -6,15 +6,12 @@ package unix -import ( - "sync/atomic" - "syscall" -) - //sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 //sys Dup2(oldfd int, newfd int) (err error) //sys Fchown(fd int, uid int, gid int) (err error) //sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64 //sys Fstatfs(fd int, buf *Statfs_t) (err error) //sys Ftruncate(fd int, length int64) (err error) //sysnb Getegid() (egid int) @@ -63,21 +60,6 @@ import ( //sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) //sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) -func sysconf(name int) (n int64, err syscall.Errno) - -// pageSize caches the value of Getpagesize, since it can't change -// once the system is booted. -var pageSize int64 // accessed atomically - -func Getpagesize() int { - n := atomic.LoadInt64(&pageSize) - if n == 0 { - n, _ = sysconf(_SC_PAGESIZE) - atomic.StoreInt64(&pageSize, n) - } - return int(n) -} - func Ioperm(from int, num int, on int) (err error) { return ENOSYS } @@ -102,19 +84,12 @@ func Time(t *Time_t) (tt Time_t, err error) { //sys Utime(path string, buf *Utimbuf) (err error) -func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } - -func NsecToTimespec(nsec int64) (ts Timespec) { - ts.Sec = nsec / 1e9 - ts.Nsec = nsec % 1e9 - return +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} } -func NsecToTimeval(nsec int64) (tv Timeval) { - nsec += 999 // round up to microsecond - tv.Sec = nsec / 1e9 - tv.Usec = int32(nsec % 1e9 / 1e3) - return +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} } func (r *PtraceRegs) PC() uint64 { return r.Tpc } diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_test.go b/vendor/golang.org/x/sys/unix/syscall_linux_test.go index e42b4ee..a2bc440 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_test.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_test.go @@ -7,8 +7,9 @@ package unix_test import ( - "io/ioutil" "os" + "runtime" + "runtime/debug" "testing" "time" @@ -30,34 +31,6 @@ func TestIoctlGetInt(t *testing.T) { t.Logf("%d bits of entropy available", v) } -func TestPoll(t *testing.T) { - f, cleanup := mktmpfifo(t) - defer cleanup() - - const timeout = 100 - - ok := make(chan bool, 1) - go func() { - select { - case <-time.After(10 * timeout * time.Millisecond): - t.Errorf("Poll: failed to timeout after %d milliseconds", 10*timeout) - case <-ok: - } - }() - - fds := []unix.PollFd{{Fd: int32(f.Fd()), Events: unix.POLLIN}} - n, err := unix.Poll(fds, timeout) - ok <- true - if err != nil { - t.Errorf("Poll: unexpected error: %v", err) - return - } - if n != 0 { - t.Errorf("Poll: wrong number of events: got %v, expected %v", n, 0) - return - } -} - func TestPpoll(t *testing.T) { f, cleanup := mktmpfifo(t) defer cleanup() @@ -87,25 +60,6 @@ func TestPpoll(t *testing.T) { } } -// mktmpfifo creates a temporary FIFO and provides a cleanup function. -func mktmpfifo(t *testing.T) (*os.File, func()) { - err := unix.Mkfifo("fifo", 0666) - if err != nil { - t.Fatalf("mktmpfifo: failed to create FIFO: %v", err) - } - - f, err := os.OpenFile("fifo", os.O_RDWR, 0666) - if err != nil { - os.Remove("fifo") - t.Fatalf("mktmpfifo: failed to open FIFO: %v", err) - } - - return f, func() { - f.Close() - os.Remove("fifo") - } -} - func TestTime(t *testing.T) { var ut unix.Time_t ut2, err := unix.Time(&ut) @@ -158,44 +112,262 @@ func TestUtime(t *testing.T) { } } -func TestGetrlimit(t *testing.T) { +func TestUtimesNanoAt(t *testing.T) { + defer chtmpdir(t)() + + symlink := "symlink1" + os.Remove(symlink) + err := os.Symlink("nonexisting", symlink) + if err != nil { + t.Fatal(err) + } + + ts := []unix.Timespec{ + {Sec: 1111, Nsec: 2222}, + {Sec: 3333, Nsec: 4444}, + } + err = unix.UtimesNanoAt(unix.AT_FDCWD, symlink, ts, unix.AT_SYMLINK_NOFOLLOW) + if err != nil { + t.Fatalf("UtimesNanoAt: %v", err) + } + + var st unix.Stat_t + err = unix.Lstat(symlink, &st) + if err != nil { + t.Fatalf("Lstat: %v", err) + } + if st.Atim != ts[0] { + t.Errorf("UtimesNanoAt: wrong atime: %v", st.Atim) + } + if st.Mtim != ts[1] { + t.Errorf("UtimesNanoAt: wrong mtime: %v", st.Mtim) + } +} + +func TestRlimitAs(t *testing.T) { + // disable GC during to avoid flaky test + defer debug.SetGCPercent(debug.SetGCPercent(-1)) + var rlim unix.Rlimit err := unix.Getrlimit(unix.RLIMIT_AS, &rlim) if err != nil { t.Fatalf("Getrlimit: %v", err) } + var zero unix.Rlimit + if zero == rlim { + t.Fatalf("Getrlimit: got zero value %#v", rlim) + } + set := rlim + set.Cur = uint64(unix.Getpagesize()) + err = unix.Setrlimit(unix.RLIMIT_AS, &set) + if err != nil { + t.Fatalf("Setrlimit: set failed: %#v %v", set, err) + } + + // RLIMIT_AS was set to the page size, so mmap()'ing twice the page size + // should fail. See 'man 2 getrlimit'. + _, err = unix.Mmap(-1, 0, 2*unix.Getpagesize(), unix.PROT_NONE, unix.MAP_ANON|unix.MAP_PRIVATE) + if err == nil { + t.Fatal("Mmap: unexpectedly suceeded after setting RLIMIT_AS") + } + + err = unix.Setrlimit(unix.RLIMIT_AS, &rlim) + if err != nil { + t.Fatalf("Setrlimit: restore failed: %#v %v", rlim, err) + } + + b, err := unix.Mmap(-1, 0, 2*unix.Getpagesize(), unix.PROT_NONE, unix.MAP_ANON|unix.MAP_PRIVATE) + if err != nil { + t.Fatalf("Mmap: %v", err) + } + err = unix.Munmap(b) + if err != nil { + t.Fatalf("Munmap: %v", err) + } } -// utilities taken from os/os_test.go +func TestSelect(t *testing.T) { + _, err := unix.Select(0, nil, nil, nil, &unix.Timeval{Sec: 0, Usec: 0}) + if err != nil { + t.Fatalf("Select: %v", err) + } -func touch(t *testing.T, name string) { - f, err := os.Create(name) + dur := 150 * time.Millisecond + tv := unix.NsecToTimeval(int64(dur)) + start := time.Now() + _, err = unix.Select(0, nil, nil, nil, &tv) + took := time.Since(start) if err != nil { - t.Fatal(err) + t.Fatalf("Select: %v", err) } - if err := f.Close(); err != nil { - t.Fatal(err) + + if took < dur { + t.Errorf("Select: timeout should have been at least %v, got %v", dur, took) + } +} + +func TestPselect(t *testing.T) { + _, err := unix.Pselect(0, nil, nil, nil, &unix.Timespec{Sec: 0, Nsec: 0}, nil) + if err != nil { + t.Fatalf("Pselect: %v", err) + } + + dur := 2500 * time.Microsecond + ts := unix.NsecToTimespec(int64(dur)) + start := time.Now() + _, err = unix.Pselect(0, nil, nil, nil, &ts, nil) + took := time.Since(start) + if err != nil { + t.Fatalf("Pselect: %v", err) + } + + if took < dur { + t.Errorf("Pselect: timeout should have been at least %v, got %v", dur, took) } } -// chtmpdir changes the working directory to a new temporary directory and -// provides a cleanup function. Used when PWD is read-only. -func chtmpdir(t *testing.T) func() { - oldwd, err := os.Getwd() +func TestSchedSetaffinity(t *testing.T) { + runtime.LockOSThread() + defer runtime.UnlockOSThread() + + var oldMask unix.CPUSet + err := unix.SchedGetaffinity(0, &oldMask) if err != nil { - t.Fatalf("chtmpdir: %v", err) + t.Fatalf("SchedGetaffinity: %v", err) } - d, err := ioutil.TempDir("", "test") + + var newMask unix.CPUSet + newMask.Zero() + if newMask.Count() != 0 { + t.Errorf("CpuZero: didn't zero CPU set: %v", newMask) + } + cpu := 1 + newMask.Set(cpu) + if newMask.Count() != 1 || !newMask.IsSet(cpu) { + t.Errorf("CpuSet: didn't set CPU %d in set: %v", cpu, newMask) + } + cpu = 5 + newMask.Set(cpu) + if newMask.Count() != 2 || !newMask.IsSet(cpu) { + t.Errorf("CpuSet: didn't set CPU %d in set: %v", cpu, newMask) + } + newMask.Clear(cpu) + if newMask.Count() != 1 || newMask.IsSet(cpu) { + t.Errorf("CpuClr: didn't clear CPU %d in set: %v", cpu, newMask) + } + + if runtime.NumCPU() < 2 { + t.Skip("skipping setaffinity tests on single CPU system") + } + + err = unix.SchedSetaffinity(0, &newMask) if err != nil { - t.Fatalf("chtmpdir: %v", err) + t.Fatalf("SchedSetaffinity: %v", err) } - if err := os.Chdir(d); err != nil { - t.Fatalf("chtmpdir: %v", err) + + var gotMask unix.CPUSet + err = unix.SchedGetaffinity(0, &gotMask) + if err != nil { + t.Fatalf("SchedGetaffinity: %v", err) } - return func() { - if err := os.Chdir(oldwd); err != nil { - t.Fatalf("chtmpdir: %v", err) - } - os.RemoveAll(d) + + if gotMask != newMask { + t.Errorf("SchedSetaffinity: returned affinity mask does not match set affinity mask") + } + + // Restore old mask so it doesn't affect successive tests + err = unix.SchedSetaffinity(0, &oldMask) + if err != nil { + t.Fatalf("SchedSetaffinity: %v", err) + } +} + +func TestStatx(t *testing.T) { + var stx unix.Statx_t + err := unix.Statx(unix.AT_FDCWD, ".", 0, 0, &stx) + if err == unix.ENOSYS { + t.Skip("statx syscall is not available, skipping test") + } else if err != nil { + t.Fatalf("Statx: %v", err) + } + + defer chtmpdir(t)() + touch(t, "file1") + + var st unix.Stat_t + err = unix.Stat("file1", &st) + if err != nil { + t.Fatalf("Stat: %v", err) + } + + flags := unix.AT_STATX_SYNC_AS_STAT + err = unix.Statx(unix.AT_FDCWD, "file1", flags, unix.STATX_ALL, &stx) + if err != nil { + t.Fatalf("Statx: %v", err) + } + + if uint32(stx.Mode) != st.Mode { + t.Errorf("Statx: returned stat mode does not match Stat") + } + + atime := unix.StatxTimestamp{Sec: int64(st.Atim.Sec), Nsec: uint32(st.Atim.Nsec)} + ctime := unix.StatxTimestamp{Sec: int64(st.Ctim.Sec), Nsec: uint32(st.Ctim.Nsec)} + mtime := unix.StatxTimestamp{Sec: int64(st.Mtim.Sec), Nsec: uint32(st.Mtim.Nsec)} + + if stx.Atime != atime { + t.Errorf("Statx: returned stat atime does not match Stat") + } + if stx.Ctime != ctime { + t.Errorf("Statx: returned stat ctime does not match Stat") + } + if stx.Mtime != mtime { + t.Errorf("Statx: returned stat mtime does not match Stat") + } + + err = os.Symlink("file1", "symlink1") + if err != nil { + t.Fatal(err) + } + + err = unix.Lstat("symlink1", &st) + if err != nil { + t.Fatalf("Lstat: %v", err) + } + + err = unix.Statx(unix.AT_FDCWD, "symlink1", flags, unix.STATX_BASIC_STATS, &stx) + if err != nil { + t.Fatalf("Statx: %v", err) + } + + // follow symlink, expect a regulat file + if stx.Mode&unix.S_IFREG == 0 { + t.Errorf("Statx: didn't follow symlink") + } + + err = unix.Statx(unix.AT_FDCWD, "symlink1", flags|unix.AT_SYMLINK_NOFOLLOW, unix.STATX_ALL, &stx) + if err != nil { + t.Fatalf("Statx: %v", err) + } + + // follow symlink, expect a symlink + if stx.Mode&unix.S_IFLNK == 0 { + t.Errorf("Statx: unexpectedly followed symlink") + } + if uint32(stx.Mode) != st.Mode { + t.Errorf("Statx: returned stat mode does not match Lstat") + } + + atime = unix.StatxTimestamp{Sec: int64(st.Atim.Sec), Nsec: uint32(st.Atim.Nsec)} + ctime = unix.StatxTimestamp{Sec: int64(st.Ctim.Sec), Nsec: uint32(st.Ctim.Nsec)} + mtime = unix.StatxTimestamp{Sec: int64(st.Mtim.Sec), Nsec: uint32(st.Mtim.Nsec)} + + if stx.Atime != atime { + t.Errorf("Statx: returned stat atime does not match Lstat") + } + if stx.Ctime != ctime { + t.Errorf("Statx: returned stat ctime does not match Lstat") + } + if stx.Mtime != mtime { + t.Errorf("Statx: returned stat mtime does not match Lstat") } } diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd.go b/vendor/golang.org/x/sys/unix/syscall_netbsd.go index 01f6a48..e1a3baa 100644 --- a/vendor/golang.org/x/sys/unix/syscall_netbsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_netbsd.go @@ -17,6 +17,7 @@ import ( "unsafe" ) +// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets. type SockaddrDatalink struct { Len uint8 Family uint8 @@ -55,7 +56,6 @@ func sysctlNodes(mib []_C_int) (nodes []Sysctlnode, err error) { } func nametomib(name string) (mib []_C_int, err error) { - // Split name into components. var parts []string last := 0 @@ -93,18 +93,6 @@ func nametomib(name string) (mib []_C_int, err error) { return mib, nil } -func direntIno(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno)) -} - -func direntReclen(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) -} - -func direntNamlen(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) -} - //sysnb pipe() (fd1 int, fd2 int, err error) func Pipe(p []int) (err error) { if len(p) != 2 { @@ -119,11 +107,118 @@ func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { return getdents(fd, buf) } +const ImplementsGetwd = true + +//sys Getcwd(buf []byte) (n int, err error) = SYS___GETCWD + +func Getwd() (string, error) { + var buf [PathMax]byte + _, err := Getcwd(buf[0:]) + if err != nil { + return "", err + } + n := clen(buf[:]) + if n < 1 { + return "", EINVAL + } + return string(buf[:n]), nil +} + // TODO func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { return -1, ENOSYS } +func setattrlistTimes(path string, times []Timespec, flags int) error { + // used on Darwin for UtimesNano + return ENOSYS +} + +//sys ioctl(fd int, req uint, arg uintptr) (err error) + +// ioctl itself should not be exposed directly, but additional get/set +// functions for specific types are permissible. + +// IoctlSetInt performs an ioctl operation which sets an integer value +// on fd, using the specified request number. +func IoctlSetInt(fd int, req uint, value int) error { + return ioctl(fd, req, uintptr(value)) +} + +func IoctlSetWinsize(fd int, req uint, value *Winsize) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +func IoctlSetTermios(fd int, req uint, value *Termios) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +// IoctlGetInt performs an ioctl operation which gets an integer value +// from fd, using the specified request number. +func IoctlGetInt(fd int, req uint) (int, error) { + var value int + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return value, err +} + +func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { + var value Winsize + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func IoctlGetTermios(fd int, req uint) (*Termios, error) { + var value Termios + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func Uname(uname *Utsname) error { + mib := []_C_int{CTL_KERN, KERN_OSTYPE} + n := unsafe.Sizeof(uname.Sysname) + if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_HOSTNAME} + n = unsafe.Sizeof(uname.Nodename) + if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_OSRELEASE} + n = unsafe.Sizeof(uname.Release) + if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_VERSION} + n = unsafe.Sizeof(uname.Version) + if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil { + return err + } + + // The version might have newlines or tabs in it, convert them to + // spaces. + for i, b := range uname.Version { + if b == '\n' || b == '\t' { + if i == len(uname.Version)-1 { + uname.Version[i] = 0 + } else { + uname.Version[i] = ' ' + } + } + } + + mib = []_C_int{CTL_HW, HW_MACHINE} + n = unsafe.Sizeof(uname.Machine) + if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil { + return err + } + + return nil +} + /* * Exposed directly */ @@ -138,13 +233,16 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e //sys Dup(fd int) (nfd int, err error) //sys Dup2(from int, to int) (err error) //sys Exit(code int) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_POSIX_FADVISE //sys Fchdir(fd int) (err error) //sys Fchflags(fd int, flags int) (err error) //sys Fchmod(fd int, mode uint32) (err error) +//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) //sys Fchown(fd int, uid int, gid int) (err error) //sys Flock(fd int, how int) (err error) //sys Fpathconf(fd int, name int) (val int, err error) //sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) //sys Fsync(fd int) (err error) //sys Ftruncate(fd int, length int64) (err error) //sysnb Getegid() (egid int) @@ -170,11 +268,6 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e //sys Mkdir(path string, mode uint32) (err error) //sys Mkfifo(path string, mode uint32) (err error) //sys Mknod(path string, mode uint32, dev int) (err error) -//sys Mlock(b []byte) (err error) -//sys Mlockall(flags int) (err error) -//sys Mprotect(b []byte, prot int) (err error) -//sys Munlock(b []byte) (err error) -//sys Munlockall() (err error) //sys Nanosleep(time *Timespec, leftover *Timespec) (err error) //sys Open(path string, mode int, perm uint32) (fd int, err error) //sys Pathconf(path string, name int) (val int, err error) @@ -210,6 +303,7 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e //sys munmap(addr uintptr, length uintptr) (err error) //sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ //sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE +//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) /* * Unimplemented @@ -229,7 +323,6 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e // __msync13 // __ntp_gettime30 // __posix_chown -// __posix_fadvise50 // __posix_fchown // __posix_lchown // __posix_rename @@ -388,7 +481,6 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e // getitimer // getvfsstat // getxattr -// ioctl // ktrace // lchflags // lchmod @@ -426,7 +518,6 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e // ntp_adjtime // pmc_control // pmc_get_info -// poll // pollts // preadv // profil diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go b/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go index afaca09..24f74e5 100644 --- a/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go +++ b/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go @@ -6,21 +6,12 @@ package unix -func Getpagesize() int { return 4096 } - -func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } - -func NsecToTimespec(nsec int64) (ts Timespec) { - ts.Sec = int64(nsec / 1e9) - ts.Nsec = int32(nsec % 1e9) - return +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: int32(nsec)} } -func NsecToTimeval(nsec int64) (tv Timeval) { - nsec += 999 // round up to microsecond - tv.Usec = int32(nsec % 1e9 / 1e3) - tv.Sec = int64(nsec / 1e9) - return +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} } func SetKevent(k *Kevent_t, fd, mode, flags int) { diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go index a6ff04c..6878bf7 100644 --- a/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go @@ -6,21 +6,12 @@ package unix -func Getpagesize() int { return 4096 } - -func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } - -func NsecToTimespec(nsec int64) (ts Timespec) { - ts.Sec = int64(nsec / 1e9) - ts.Nsec = int64(nsec % 1e9) - return +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} } -func NsecToTimeval(nsec int64) (tv Timeval) { - nsec += 999 // round up to microsecond - tv.Usec = int32(nsec % 1e9 / 1e3) - tv.Sec = int64(nsec / 1e9) - return +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} } func SetKevent(k *Kevent_t, fd, mode, flags int) { diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go b/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go index 68a6969..dbbfcf7 100644 --- a/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go +++ b/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go @@ -6,21 +6,12 @@ package unix -func Getpagesize() int { return 4096 } - -func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } - -func NsecToTimespec(nsec int64) (ts Timespec) { - ts.Sec = int64(nsec / 1e9) - ts.Nsec = int32(nsec % 1e9) - return +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: int32(nsec)} } -func NsecToTimeval(nsec int64) (tv Timeval) { - nsec += 999 // round up to microsecond - tv.Usec = int32(nsec % 1e9 / 1e3) - tv.Sec = int64(nsec / 1e9) - return +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} } func SetKevent(k *Kevent_t, fd, mode, flags int) { diff --git a/vendor/golang.org/x/sys/unix/syscall_no_getwd.go b/vendor/golang.org/x/sys/unix/syscall_no_getwd.go deleted file mode 100644 index 530792e..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_no_getwd.go +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2013 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 dragonfly freebsd netbsd openbsd - -package unix - -const ImplementsGetwd = false - -func Getwd() (string, error) { return "", ENOTSUP } diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd.go b/vendor/golang.org/x/sys/unix/syscall_openbsd.go index c0d2b6c..387e1cf 100644 --- a/vendor/golang.org/x/sys/unix/syscall_openbsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_openbsd.go @@ -13,10 +13,12 @@ package unix import ( + "sort" "syscall" "unsafe" ) +// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets. type SockaddrDatalink struct { Len uint8 Family uint8 @@ -32,39 +34,15 @@ type SockaddrDatalink struct { func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) func nametomib(name string) (mib []_C_int, err error) { - - // Perform lookup via a binary search - left := 0 - right := len(sysctlMib) - 1 - for { - idx := left + (right-left)/2 - switch { - case name == sysctlMib[idx].ctlname: - return sysctlMib[idx].ctloid, nil - case name > sysctlMib[idx].ctlname: - left = idx + 1 - default: - right = idx - 1 - } - if left > right { - break - } + i := sort.Search(len(sysctlMib), func(i int) bool { + return sysctlMib[i].ctlname >= name + }) + if i < len(sysctlMib) && sysctlMib[i].ctlname == name { + return sysctlMib[i].ctloid, nil } return nil, EINVAL } -func direntIno(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno)) -} - -func direntReclen(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) -} - -func direntNamlen(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) -} - //sysnb pipe(p *[2]_C_int) (err error) func Pipe(p []int) (err error) { if len(p) != 2 { @@ -82,6 +60,23 @@ func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { return getdents(fd, buf) } +const ImplementsGetwd = true + +//sys Getcwd(buf []byte) (n int, err error) = SYS___GETCWD + +func Getwd() (string, error) { + var buf [PathMax]byte + _, err := Getcwd(buf[0:]) + if err != nil { + return "", err + } + n := clen(buf[:]) + if n < 1 { + return "", EINVAL + } + return string(buf[:n]), nil +} + // TODO func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { return -1, ENOSYS @@ -102,6 +97,96 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { return } +func setattrlistTimes(path string, times []Timespec, flags int) error { + // used on Darwin for UtimesNano + return ENOSYS +} + +//sys ioctl(fd int, req uint, arg uintptr) (err error) + +// ioctl itself should not be exposed directly, but additional get/set +// functions for specific types are permissible. + +// IoctlSetInt performs an ioctl operation which sets an integer value +// on fd, using the specified request number. +func IoctlSetInt(fd int, req uint, value int) error { + return ioctl(fd, req, uintptr(value)) +} + +func IoctlSetWinsize(fd int, req uint, value *Winsize) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +func IoctlSetTermios(fd int, req uint, value *Termios) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +// IoctlGetInt performs an ioctl operation which gets an integer value +// from fd, using the specified request number. +func IoctlGetInt(fd int, req uint) (int, error) { + var value int + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return value, err +} + +func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { + var value Winsize + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func IoctlGetTermios(fd int, req uint) (*Termios, error) { + var value Termios + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func Uname(uname *Utsname) error { + mib := []_C_int{CTL_KERN, KERN_OSTYPE} + n := unsafe.Sizeof(uname.Sysname) + if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_HOSTNAME} + n = unsafe.Sizeof(uname.Nodename) + if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_OSRELEASE} + n = unsafe.Sizeof(uname.Release) + if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_VERSION} + n = unsafe.Sizeof(uname.Version) + if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil { + return err + } + + // The version might have newlines or tabs in it, convert them to + // spaces. + for i, b := range uname.Version { + if b == '\n' || b == '\t' { + if i == len(uname.Version)-1 { + uname.Version[i] = 0 + } else { + uname.Version[i] = ' ' + } + } + } + + mib = []_C_int{CTL_HW, HW_MACHINE} + n = unsafe.Sizeof(uname.Machine) + if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil { + return err + } + + return nil +} + /* * Exposed directly */ @@ -119,10 +204,12 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { //sys Fchdir(fd int) (err error) //sys Fchflags(fd int, flags int) (err error) //sys Fchmod(fd int, mode uint32) (err error) +//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) //sys Fchown(fd int, uid int, gid int) (err error) //sys Flock(fd int, how int) (err error) //sys Fpathconf(fd int, name int) (val int, err error) //sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) //sys Fstatfs(fd int, stat *Statfs_t) (err error) //sys Fsync(fd int) (err error) //sys Ftruncate(fd int, length int64) (err error) @@ -149,11 +236,6 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { //sys Mkdir(path string, mode uint32) (err error) //sys Mkfifo(path string, mode uint32) (err error) //sys Mknod(path string, mode uint32, dev int) (err error) -//sys Mlock(b []byte) (err error) -//sys Mlockall(flags int) (err error) -//sys Mprotect(b []byte, prot int) (err error) -//sys Munlock(b []byte) (err error) -//sys Munlockall() (err error) //sys Nanosleep(time *Timespec, leftover *Timespec) (err error) //sys Open(path string, mode int, perm uint32) (fd int, err error) //sys Pathconf(path string, name int) (val int, err error) @@ -193,6 +275,7 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { //sys munmap(addr uintptr, length uintptr) (err error) //sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ //sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE +//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) /* * Unimplemented @@ -226,7 +309,6 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { // getresuid // getrtable // getthrid -// ioctl // ktrace // lfs_bmapv // lfs_markv @@ -247,7 +329,6 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { // nfssvc // nnpfspioctl // openat -// poll // preadv // profil // pwritev @@ -282,6 +363,5 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { // thrsleep // thrwakeup // unlinkat -// utimensat // vfork // writev diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go index a66ddc5..994964a 100644 --- a/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go +++ b/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go @@ -6,21 +6,12 @@ package unix -func Getpagesize() int { return 4096 } - -func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } - -func NsecToTimespec(nsec int64) (ts Timespec) { - ts.Sec = int64(nsec / 1e9) - ts.Nsec = int32(nsec % 1e9) - return +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: int32(nsec)} } -func NsecToTimeval(nsec int64) (tv Timeval) { - nsec += 999 // round up to microsecond - tv.Usec = int32(nsec % 1e9 / 1e3) - tv.Sec = int64(nsec / 1e9) - return +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} } func SetKevent(k *Kevent_t, fd, mode, flags int) { diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go index 0776c1f..649e67f 100644 --- a/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go @@ -6,21 +6,12 @@ package unix -func Getpagesize() int { return 4096 } - -func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } - -func NsecToTimespec(nsec int64) (ts Timespec) { - ts.Sec = nsec / 1e9 - ts.Nsec = nsec % 1e9 - return +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} } -func NsecToTimeval(nsec int64) (tv Timeval) { - nsec += 999 // round up to microsecond - tv.Usec = nsec % 1e9 / 1e3 - tv.Sec = nsec / 1e9 - return +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} } func SetKevent(k *Kevent_t, fd, mode, flags int) { diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go new file mode 100644 index 0000000..59844f5 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go @@ -0,0 +1,33 @@ +// Copyright 2017 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 arm,openbsd + +package unix + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris.go b/vendor/golang.org/x/sys/unix/syscall_solaris.go index 4b8ddab..f4d2a34 100644 --- a/vendor/golang.org/x/sys/unix/syscall_solaris.go +++ b/vendor/golang.org/x/sys/unix/syscall_solaris.go @@ -13,7 +13,6 @@ package unix import ( - "sync/atomic" "syscall" "unsafe" ) @@ -24,6 +23,7 @@ type syscallFunc uintptr func rawSysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) func sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) +// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets. type SockaddrDatalink struct { Family uint16 Index uint16 @@ -35,31 +35,6 @@ type SockaddrDatalink struct { raw RawSockaddrDatalink } -func clen(n []byte) int { - for i := 0; i < len(n); i++ { - if n[i] == 0 { - return i - } - } - return len(n) -} - -func direntIno(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino)) -} - -func direntReclen(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) -} - -func direntNamlen(buf []byte) (uint64, bool) { - reclen, ok := direntReclen(buf) - if !ok { - return 0, false - } - return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true -} - //sysnb pipe(p *[2]_C_int) (n int, err error) func Pipe(p []int) (err error) { @@ -140,6 +115,18 @@ func Getsockname(fd int) (sa Sockaddr, err error) { return anyToSockaddr(&rsa) } +// GetsockoptString returns the string value of the socket option opt for the +// socket associated with fd at the given socket level. +func GetsockoptString(fd, level, opt int) (string, error) { + buf := make([]byte, 256) + vallen := _Socklen(len(buf)) + err := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen) + if err != nil { + return "", err + } + return string(buf[:vallen-1]), nil +} + const ImplementsGetwd = true //sys Getcwd(buf []byte) (n int, err error) @@ -167,7 +154,7 @@ func Getwd() (wd string, err error) { func Getgroups() (gids []int, err error) { n, err := getgroups(0, nil) - // Check for error and sanity check group count. Newer versions of + // Check for error and sanity check group count. Newer versions of // Solaris allow up to 1024 (NGROUPS_MAX). if n < 0 || n > 1024 { if err != nil { @@ -351,7 +338,7 @@ func Futimesat(dirfd int, path string, tv []Timeval) error { } // Solaris doesn't have an futimes function because it allows NULL to be -// specified as the path for futimesat. However, Go doesn't like +// specified as the path for futimesat. However, Go doesn't like // NULL-style string interfaces, so this simple wrapper is provided. func Futimes(fd int, tv []Timeval) error { if tv == nil { @@ -515,6 +502,24 @@ func Acct(path string) (err error) { return acct(pathp) } +//sys __makedev(version int, major uint, minor uint) (val uint64) + +func Mkdev(major, minor uint32) uint64 { + return __makedev(NEWDEV, uint(major), uint(minor)) +} + +//sys __major(version int, dev uint64) (val uint) + +func Major(dev uint64) uint32 { + return uint32(__major(NEWDEV, dev)) +} + +//sys __minor(version int, dev uint64) (val uint) + +func Minor(dev uint64) uint32 { + return uint32(__minor(NEWDEV, dev)) +} + /* * Expose the ioctl function */ @@ -561,6 +566,15 @@ func IoctlGetTermio(fd int, req uint) (*Termio, error) { return &value, err } +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} + /* * Exposed directly */ @@ -581,8 +595,10 @@ func IoctlGetTermio(fd int, req uint) (*Termio, error) { //sys Fchown(fd int, uid int, gid int) (err error) //sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) //sys Fdatasync(fd int) (err error) +//sys Flock(fd int, how int) (err error) //sys Fpathconf(fd int, name int) (val int, err error) //sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) //sys Fstatvfs(fd int, vfsstat *Statvfs_t) (err error) //sys Getdents(fd int, buf []byte, basep *uintptr) (n int, err error) //sysnb Getgid() (gid int) @@ -612,6 +628,7 @@ func IoctlGetTermio(fd int, req uint) (*Termio, error) { //sys Mlock(b []byte) (err error) //sys Mlockall(flags int) (err error) //sys Mprotect(b []byte, prot int) (err error) +//sys Msync(b []byte, flags int) (err error) //sys Munlock(b []byte) (err error) //sys Munlockall() (err error) //sys Nanosleep(time *Timespec, leftover *Timespec) (err error) @@ -627,6 +644,7 @@ func IoctlGetTermio(fd int, req uint) (*Termio, error) { //sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) //sys Rmdir(path string) (err error) //sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = lseek +//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) //sysnb Setegid(egid int) (err error) //sysnb Seteuid(euid int) (err error) //sysnb Setgid(gid int) (err error) @@ -698,18 +716,3 @@ func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, e func Munmap(b []byte) (err error) { return mapper.Munmap(b) } - -//sys sysconf(name int) (n int64, err error) - -// pageSize caches the value of Getpagesize, since it can't change -// once the system is booted. -var pageSize int64 // accessed atomically - -func Getpagesize() int { - n := atomic.LoadInt64(&pageSize) - if n == 0 { - n, _ = sysconf(_SC_PAGESIZE) - atomic.StoreInt64(&pageSize, n) - } - return int(n) -} diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go b/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go index 5aff62c..9d4e7a6 100644 --- a/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go +++ b/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go @@ -6,19 +6,12 @@ package unix -func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } - -func NsecToTimespec(nsec int64) (ts Timespec) { - ts.Sec = nsec / 1e9 - ts.Nsec = nsec % 1e9 - return +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} } -func NsecToTimeval(nsec int64) (tv Timeval) { - nsec += 999 // round up to microsecond - tv.Usec = nsec % 1e9 / 1e3 - tv.Sec = int64(nsec / 1e9) - return +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} } func (iov *Iovec) SetLen(length int) { diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris_test.go b/vendor/golang.org/x/sys/unix/syscall_solaris_test.go index d3e7d2b..57dba88 100644 --- a/vendor/golang.org/x/sys/unix/syscall_solaris_test.go +++ b/vendor/golang.org/x/sys/unix/syscall_solaris_test.go @@ -9,10 +9,31 @@ package unix_test import ( "os/exec" "testing" + "time" "golang.org/x/sys/unix" ) +func TestSelect(t *testing.T) { + err := unix.Select(0, nil, nil, nil, &unix.Timeval{Sec: 0, Usec: 0}) + if err != nil { + t.Fatalf("Select: %v", err) + } + + dur := 150 * time.Millisecond + tv := unix.NsecToTimeval(int64(dur)) + start := time.Now() + err = unix.Select(0, nil, nil, nil, &tv) + took := time.Since(start) + if err != nil { + t.Fatalf("Select: %v", err) + } + + if took < dur { + t.Errorf("Select: timeout should have been at least %v, got %v", dur, took) + } +} + func TestStatvfs(t *testing.T) { if err := unix.Statvfs("", nil); err == nil { t.Fatal(`Statvfs("") expected failure`) diff --git a/vendor/golang.org/x/sys/unix/syscall_test.go b/vendor/golang.org/x/sys/unix/syscall_test.go index 95eac92..a8eef7c 100644 --- a/vendor/golang.org/x/sys/unix/syscall_test.go +++ b/vendor/golang.org/x/sys/unix/syscall_test.go @@ -48,3 +48,13 @@ func TestItoa(t *testing.T) { t.Fatalf("itoa(%d) = %s, want %s", i, s, f) } } + +func TestUname(t *testing.T) { + var utsname unix.Utsname + err := unix.Uname(&utsname) + if err != nil { + t.Fatalf("Uname: %v", err) + } + + t.Logf("OS: %s/%s %s", utsname.Sysname[:], utsname.Machine[:], utsname.Release[:]) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_unix.go b/vendor/golang.org/x/sys/unix/syscall_unix.go index 3ed8a91..95ce555 100644 --- a/vendor/golang.org/x/sys/unix/syscall_unix.go +++ b/vendor/golang.org/x/sys/unix/syscall_unix.go @@ -7,6 +7,7 @@ package unix import ( + "bytes" "runtime" "sync" "syscall" @@ -50,6 +51,15 @@ func errnoErr(e syscall.Errno) error { return e } +// clen returns the index of the first NULL byte in n or len(n) if n contains no NULL byte. +func clen(n []byte) int { + i := bytes.IndexByte(n, 0) + if i == -1 { + i = len(n) + } + return i +} + // Mmap manager, for use by operating system-specific implementations. type mmapper struct { @@ -138,16 +148,19 @@ func Write(fd int, p []byte) (n int, err error) { // creation of IPv6 sockets to return EAFNOSUPPORT. var SocketDisableIPv6 bool +// Sockaddr represents a socket address. type Sockaddr interface { sockaddr() (ptr unsafe.Pointer, len _Socklen, err error) // lowercase; only we can define Sockaddrs } +// SockaddrInet4 implements the Sockaddr interface for AF_INET type sockets. type SockaddrInet4 struct { Port int Addr [4]byte raw RawSockaddrInet4 } +// SockaddrInet6 implements the Sockaddr interface for AF_INET6 type sockets. type SockaddrInet6 struct { Port int ZoneId uint32 @@ -155,6 +168,7 @@ type SockaddrInet6 struct { raw RawSockaddrInet6 } +// SockaddrUnix implements the Sockaddr interface for AF_UNIX type sockets. type SockaddrUnix struct { Name string raw RawSockaddrUnix @@ -291,3 +305,12 @@ func SetNonblock(fd int, nonblocking bool) (err error) { _, err = fcntl(fd, F_SETFL, flag) return err } + +// Exec calls execve(2), which replaces the calling executable in the process +// tree. argv0 should be the full path to an executable ("/bin/ls") and the +// executable name should also be the first argument in argv (["ls", "-l"]). +// envv are the environment variables that should be passed to the new +// process (["USER=go", "PWD=/tmp"]). +func Exec(argv0 string, argv []string, envv []string) error { + return syscall.Exec(argv0, argv, envv) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_unix_test.go b/vendor/golang.org/x/sys/unix/syscall_unix_test.go index 394b350..bbdb6fa 100644 --- a/vendor/golang.org/x/sys/unix/syscall_unix_test.go +++ b/vendor/golang.org/x/sys/unix/syscall_unix_test.go @@ -138,6 +138,9 @@ func TestPassFD(t *testing.T) { uc.Close() }) _, oobn, _, _, err := uc.ReadMsgUnix(buf, oob) + if err != nil { + t.Fatalf("ReadMsgUnix: %v", err) + } closeUnix.Stop() scms, err := unix.ParseSocketControlMessage(oob[:oobn]) @@ -335,6 +338,9 @@ func TestDup(t *testing.T) { t.Fatalf("Write to dup2 fd failed: %v", err) } _, err = unix.Seek(f, 0, 0) + if err != nil { + t.Fatalf("Seek failed: %v", err) + } _, err = unix.Read(f, b2) if err != nil { t.Fatalf("Read back failed: %v", err) @@ -343,3 +349,227 @@ func TestDup(t *testing.T) { t.Errorf("Dup: stdout write not in file, expected %v, got %v", string(b1), string(b2)) } } + +func TestPoll(t *testing.T) { + f, cleanup := mktmpfifo(t) + defer cleanup() + + const timeout = 100 + + ok := make(chan bool, 1) + go func() { + select { + case <-time.After(10 * timeout * time.Millisecond): + t.Errorf("Poll: failed to timeout after %d milliseconds", 10*timeout) + case <-ok: + } + }() + + fds := []unix.PollFd{{Fd: int32(f.Fd()), Events: unix.POLLIN}} + n, err := unix.Poll(fds, timeout) + ok <- true + if err != nil { + t.Errorf("Poll: unexpected error: %v", err) + return + } + if n != 0 { + t.Errorf("Poll: wrong number of events: got %v, expected %v", n, 0) + return + } +} + +func TestGetwd(t *testing.T) { + fd, err := os.Open(".") + if err != nil { + t.Fatalf("Open .: %s", err) + } + defer fd.Close() + // These are chosen carefully not to be symlinks on a Mac + // (unlike, say, /var, /etc) + dirs := []string{"/", "/usr/bin"} + if runtime.GOOS == "darwin" { + switch runtime.GOARCH { + case "arm", "arm64": + d1, err := ioutil.TempDir("", "d1") + if err != nil { + t.Fatalf("TempDir: %v", err) + } + d2, err := ioutil.TempDir("", "d2") + if err != nil { + t.Fatalf("TempDir: %v", err) + } + dirs = []string{d1, d2} + } + } + oldwd := os.Getenv("PWD") + for _, d := range dirs { + err = os.Chdir(d) + if err != nil { + t.Fatalf("Chdir: %v", err) + } + pwd, err := unix.Getwd() + if err != nil { + t.Fatalf("Getwd in %s: %s", d, err) + } + os.Setenv("PWD", oldwd) + err = fd.Chdir() + if err != nil { + // We changed the current directory and cannot go back. + // Don't let the tests continue; they'll scribble + // all over some other directory. + fmt.Fprintf(os.Stderr, "fchdir back to dot failed: %s\n", err) + os.Exit(1) + } + if pwd != d { + t.Fatalf("Getwd returned %q want %q", pwd, d) + } + } +} + +func TestFstatat(t *testing.T) { + defer chtmpdir(t)() + + touch(t, "file1") + + var st1 unix.Stat_t + err := unix.Stat("file1", &st1) + if err != nil { + t.Fatalf("Stat: %v", err) + } + + var st2 unix.Stat_t + err = unix.Fstatat(unix.AT_FDCWD, "file1", &st2, 0) + if err != nil { + t.Fatalf("Fstatat: %v", err) + } + + if st1 != st2 { + t.Errorf("Fstatat: returned stat does not match Stat") + } + + err = os.Symlink("file1", "symlink1") + if err != nil { + t.Fatal(err) + } + + err = unix.Lstat("symlink1", &st1) + if err != nil { + t.Fatalf("Lstat: %v", err) + } + + err = unix.Fstatat(unix.AT_FDCWD, "symlink1", &st2, unix.AT_SYMLINK_NOFOLLOW) + if err != nil { + t.Fatalf("Fstatat: %v", err) + } + + if st1 != st2 { + t.Errorf("Fstatat: returned stat does not match Lstat") + } +} + +func TestFchmodat(t *testing.T) { + defer chtmpdir(t)() + + touch(t, "file1") + err := os.Symlink("file1", "symlink1") + if err != nil { + t.Fatal(err) + } + + mode := os.FileMode(0444) + err = unix.Fchmodat(unix.AT_FDCWD, "symlink1", uint32(mode), 0) + if err != nil { + t.Fatalf("Fchmodat: unexpected error: %v", err) + } + + fi, err := os.Stat("file1") + if err != nil { + t.Fatal(err) + } + + if fi.Mode() != mode { + t.Errorf("Fchmodat: failed to change file mode: expected %v, got %v", mode, fi.Mode()) + } + + mode = os.FileMode(0644) + didChmodSymlink := true + err = unix.Fchmodat(unix.AT_FDCWD, "symlink1", uint32(mode), unix.AT_SYMLINK_NOFOLLOW) + if err != nil { + if (runtime.GOOS == "linux" || runtime.GOOS == "solaris") && err == unix.EOPNOTSUPP { + // Linux and Illumos don't support flags != 0 + didChmodSymlink = false + } else { + t.Fatalf("Fchmodat: unexpected error: %v", err) + } + } + + if !didChmodSymlink { + // Didn't change mode of the symlink. On Linux, the permissions + // of a symbolic link are always 0777 according to symlink(7) + mode = os.FileMode(0777) + } + + var st unix.Stat_t + err = unix.Lstat("symlink1", &st) + if err != nil { + t.Fatal(err) + } + + got := os.FileMode(st.Mode & 0777) + if got != mode { + t.Errorf("Fchmodat: failed to change symlink mode: expected %v, got %v", mode, got) + } +} + +// mktmpfifo creates a temporary FIFO and provides a cleanup function. +func mktmpfifo(t *testing.T) (*os.File, func()) { + err := unix.Mkfifo("fifo", 0666) + if err != nil { + t.Fatalf("mktmpfifo: failed to create FIFO: %v", err) + } + + f, err := os.OpenFile("fifo", os.O_RDWR, 0666) + if err != nil { + os.Remove("fifo") + t.Fatalf("mktmpfifo: failed to open FIFO: %v", err) + } + + return f, func() { + f.Close() + os.Remove("fifo") + } +} + +// utilities taken from os/os_test.go + +func touch(t *testing.T, name string) { + f, err := os.Create(name) + if err != nil { + t.Fatal(err) + } + if err := f.Close(); err != nil { + t.Fatal(err) + } +} + +// chtmpdir changes the working directory to a new temporary directory and +// provides a cleanup function. Used when PWD is read-only. +func chtmpdir(t *testing.T) func() { + oldwd, err := os.Getwd() + if err != nil { + t.Fatalf("chtmpdir: %v", err) + } + d, err := ioutil.TempDir("", "test") + if err != nil { + t.Fatalf("chtmpdir: %v", err) + } + if err := os.Chdir(d); err != nil { + t.Fatalf("chtmpdir: %v", err) + } + return func() { + if err := os.Chdir(oldwd); err != nil { + t.Fatalf("chtmpdir: %v", err) + } + os.RemoveAll(d) + } +} diff --git a/vendor/golang.org/x/sys/unix/timestruct.go b/vendor/golang.org/x/sys/unix/timestruct.go new file mode 100644 index 0000000..47b9011 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/timestruct.go @@ -0,0 +1,82 @@ +// Copyright 2017 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 dragonfly freebsd linux netbsd openbsd solaris + +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) } + +// NsecToTimespec takes a number of nanoseconds since the Unix epoch +// and returns the corresponding Timespec value. +func NsecToTimespec(nsec int64) Timespec { + sec := nsec / 1e9 + nsec = nsec % 1e9 + if nsec < 0 { + nsec += 1e9 + sec-- + } + return setTimespec(sec, nsec) +} + +// TimeToTimespec converts t into a Timespec. +// On some 32-bit systems the range of valid Timespec values are smaller +// than that of time.Time values. So if t is out of the valid range of +// Timespec, it returns a zero Timespec and ERANGE. +func TimeToTimespec(t time.Time) (Timespec, error) { + sec := t.Unix() + nsec := int64(t.Nanosecond()) + ts := setTimespec(sec, nsec) + + // Currently all targets have either int32 or int64 for Timespec.Sec. + // If there were a new target with floating point type for it, we have + // to consider the rounding error. + if int64(ts.Sec) != sec { + return Timespec{}, ERANGE + } + 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 } + +// NsecToTimeval takes a number of nanoseconds since the Unix epoch +// and returns the corresponding Timeval value. +func NsecToTimeval(nsec int64) Timeval { + nsec += 999 // round up to microsecond + usec := nsec % 1e9 / 1e3 + sec := nsec / 1e9 + if usec < 0 { + usec += 1e6 + sec-- + } + return setTimeval(sec, usec) +} + +// Unix returns ts as the number of seconds and nanoseconds elapsed since the +// Unix epoch. +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. +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. +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. +func (tv *Timeval) Nano() int64 { + return int64(tv.Sec)*1e9 + int64(tv.Usec)*1000 +} diff --git a/vendor/golang.org/x/sys/unix/timestruct_test.go b/vendor/golang.org/x/sys/unix/timestruct_test.go new file mode 100644 index 0000000..4215f46 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/timestruct_test.go @@ -0,0 +1,54 @@ +// Copyright 2017 The Go Authors. All right reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +package unix_test + +import ( + "testing" + "time" + "unsafe" + + "golang.org/x/sys/unix" +) + +func TestTimeToTimespec(t *testing.T) { + timeTests := []struct { + time time.Time + valid bool + }{ + {time.Unix(0, 0), true}, + {time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC), true}, + {time.Date(2262, time.December, 31, 23, 0, 0, 0, time.UTC), false}, + {time.Unix(0x7FFFFFFF, 0), true}, + {time.Unix(0x80000000, 0), false}, + {time.Unix(0x7FFFFFFF, 1000000000), false}, + {time.Unix(0x7FFFFFFF, 999999999), true}, + {time.Unix(-0x80000000, 0), true}, + {time.Unix(-0x80000001, 0), false}, + {time.Date(2038, time.January, 19, 3, 14, 7, 0, time.UTC), true}, + {time.Date(2038, time.January, 19, 3, 14, 8, 0, time.UTC), false}, + {time.Date(1901, time.December, 13, 20, 45, 52, 0, time.UTC), true}, + {time.Date(1901, time.December, 13, 20, 45, 51, 0, time.UTC), false}, + } + + // Currently all targets have either int32 or int64 for Timespec.Sec. + // If there were a new target with unsigned or floating point type for + // it, this test must be adjusted. + have64BitTime := (unsafe.Sizeof(unix.Timespec{}.Sec) == 8) + for _, tt := range timeTests { + ts, err := unix.TimeToTimespec(tt.time) + tt.valid = tt.valid || have64BitTime + if tt.valid && err != nil { + t.Errorf("TimeToTimespec(%v): %v", tt.time, err) + } + if err == nil { + tstime := time.Unix(int64(ts.Sec), int64(ts.Nsec)) + if !tstime.Equal(tt.time) { + t.Errorf("TimeToTimespec(%v) is the time %v", tt.time, tstime) + } + } + } +} diff --git a/vendor/golang.org/x/sys/unix/types_darwin.go b/vendor/golang.org/x/sys/unix/types_darwin.go index a350817..46b9908 100644 --- a/vendor/golang.org/x/sys/unix/types_darwin.go +++ b/vendor/golang.org/x/sys/unix/types_darwin.go @@ -19,6 +19,7 @@ package unix #define _DARWIN_USE_64_BIT_INODE #include #include +#include #include #include #include @@ -38,6 +39,7 @@ package unix #include #include #include +#include #include #include #include @@ -242,9 +244,34 @@ type BpfHdr C.struct_bpf_hdr type Termios C.struct_termios +type Winsize C.struct_winsize + // fchmodat-like syscalls. const ( AT_FDCWD = C.AT_FDCWD + AT_REMOVEDIR = C.AT_REMOVEDIR + AT_SYMLINK_FOLLOW = C.AT_SYMLINK_FOLLOW AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW ) + +// poll + +type PollFd C.struct_pollfd + +const ( + POLLERR = C.POLLERR + POLLHUP = C.POLLHUP + POLLIN = C.POLLIN + POLLNVAL = C.POLLNVAL + POLLOUT = C.POLLOUT + POLLPRI = C.POLLPRI + POLLRDBAND = C.POLLRDBAND + POLLRDNORM = C.POLLRDNORM + POLLWRBAND = C.POLLWRBAND + POLLWRNORM = C.POLLWRNORM +) + +// uname + +type Utsname C.struct_utsname diff --git a/vendor/golang.org/x/sys/unix/types_dragonfly.go b/vendor/golang.org/x/sys/unix/types_dragonfly.go index a818704..0c63304 100644 --- a/vendor/golang.org/x/sys/unix/types_dragonfly.go +++ b/vendor/golang.org/x/sys/unix/types_dragonfly.go @@ -17,6 +17,7 @@ package unix #define KERNEL #include #include +#include #include #include #include @@ -34,6 +35,7 @@ package unix #include #include #include +#include #include #include #include @@ -125,6 +127,12 @@ type Dirent C.struct_dirent type Fsid C.struct_fsid +// File system limits + +const ( + PathMax = C.PATH_MAX +) + // Sockets type RawSockaddrInet4 C.struct_sockaddr_in @@ -240,3 +248,33 @@ type BpfHdr C.struct_bpf_hdr // Terminal handling type Termios C.struct_termios + +type Winsize C.struct_winsize + +// fchmodat-like syscalls. + +const ( + AT_FDCWD = C.AT_FDCWD + AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW +) + +// poll + +type PollFd C.struct_pollfd + +const ( + POLLERR = C.POLLERR + POLLHUP = C.POLLHUP + POLLIN = C.POLLIN + POLLNVAL = C.POLLNVAL + POLLOUT = C.POLLOUT + POLLPRI = C.POLLPRI + POLLRDBAND = C.POLLRDBAND + POLLRDNORM = C.POLLRDNORM + POLLWRBAND = C.POLLWRBAND + POLLWRNORM = C.POLLWRNORM +) + +// Uname + +type Utsname C.struct_utsname diff --git a/vendor/golang.org/x/sys/unix/types_freebsd.go b/vendor/golang.org/x/sys/unix/types_freebsd.go index 972e69a..4eb02cd 100644 --- a/vendor/golang.org/x/sys/unix/types_freebsd.go +++ b/vendor/golang.org/x/sys/unix/types_freebsd.go @@ -17,10 +17,12 @@ package unix #define KERNEL #include #include +#include #include #include #include #include +#include #include #include #include @@ -34,6 +36,7 @@ package unix #include #include #include +#include #include #include #include @@ -130,7 +133,10 @@ struct if_data8 { u_long ifi_iqdrops; u_long ifi_noproto; u_long ifi_hwassist; +// FIXME: these are now unions, so maybe need to change definitions? +#undef ifi_epoch time_t ifi_epoch; +#undef ifi_lastchange struct timeval ifi_lastchange; }; @@ -210,6 +216,12 @@ type Dirent C.struct_dirent type Fsid C.struct_fsid +// File system limits + +const ( + PathMax = C.PATH_MAX +) + // Advice to Fadvise const ( @@ -351,3 +363,40 @@ type BpfZbufHeader C.struct_bpf_zbuf_header // Terminal handling type Termios C.struct_termios + +type Winsize C.struct_winsize + +// fchmodat-like syscalls. + +const ( + AT_FDCWD = C.AT_FDCWD + AT_REMOVEDIR = C.AT_REMOVEDIR + AT_SYMLINK_FOLLOW = C.AT_SYMLINK_FOLLOW + AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW +) + +// poll + +type PollFd C.struct_pollfd + +const ( + POLLERR = C.POLLERR + POLLHUP = C.POLLHUP + POLLIN = C.POLLIN + POLLINIGNEOF = C.POLLINIGNEOF + POLLNVAL = C.POLLNVAL + POLLOUT = C.POLLOUT + POLLPRI = C.POLLPRI + POLLRDBAND = C.POLLRDBAND + POLLRDNORM = C.POLLRDNORM + POLLWRBAND = C.POLLWRBAND + POLLWRNORM = C.POLLWRNORM +) + +// Capabilities + +type CapRights C.struct_cap_rights + +// Uname + +type Utsname C.struct_utsname diff --git a/vendor/golang.org/x/sys/unix/types_netbsd.go b/vendor/golang.org/x/sys/unix/types_netbsd.go index 7cfdb9c..1494aaf 100644 --- a/vendor/golang.org/x/sys/unix/types_netbsd.go +++ b/vendor/golang.org/x/sys/unix/types_netbsd.go @@ -17,6 +17,7 @@ package unix #define KERNEL #include #include +#include #include #include #include @@ -36,6 +37,7 @@ package unix #include #include #include +#include #include #include #include @@ -110,6 +112,23 @@ type Dirent C.struct_dirent type Fsid C.fsid_t +// File system limits + +const ( + PathMax = C.PATH_MAX +) + +// Advice to Fadvise + +const ( + FADV_NORMAL = C.POSIX_FADV_NORMAL + FADV_RANDOM = C.POSIX_FADV_RANDOM + FADV_SEQUENTIAL = C.POSIX_FADV_SEQUENTIAL + FADV_WILLNEED = C.POSIX_FADV_WILLNEED + FADV_DONTNEED = C.POSIX_FADV_DONTNEED + FADV_NOREUSE = C.POSIX_FADV_NOREUSE +) + // Sockets type RawSockaddrInet4 C.struct_sockaddr_in @@ -227,6 +246,36 @@ type BpfTimeval C.struct_bpf_timeval type Termios C.struct_termios +type Winsize C.struct_winsize + +// fchmodat-like syscalls. + +const ( + AT_FDCWD = C.AT_FDCWD + AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW +) + +// poll + +type PollFd C.struct_pollfd + +const ( + POLLERR = C.POLLERR + POLLHUP = C.POLLHUP + POLLIN = C.POLLIN + POLLNVAL = C.POLLNVAL + POLLOUT = C.POLLOUT + POLLPRI = C.POLLPRI + POLLRDBAND = C.POLLRDBAND + POLLRDNORM = C.POLLRDNORM + POLLWRBAND = C.POLLWRBAND + POLLWRNORM = C.POLLWRNORM +) + // Sysctl type Sysctlnode C.struct_sysctlnode + +// Uname + +type Utsname C.struct_utsname diff --git a/vendor/golang.org/x/sys/unix/types_openbsd.go b/vendor/golang.org/x/sys/unix/types_openbsd.go index 6c7c227..649e559 100644 --- a/vendor/golang.org/x/sys/unix/types_openbsd.go +++ b/vendor/golang.org/x/sys/unix/types_openbsd.go @@ -17,6 +17,7 @@ package unix #define KERNEL #include #include +#include #include #include #include @@ -35,6 +36,7 @@ package unix #include #include #include +#include #include #include #include @@ -126,6 +128,12 @@ type Dirent C.struct_dirent type Fsid C.fsid_t +// File system limits + +const ( + PathMax = C.PATH_MAX +) + // Sockets type RawSockaddrInet4 C.struct_sockaddr_in @@ -242,3 +250,33 @@ type BpfTimeval C.struct_bpf_timeval // Terminal handling type Termios C.struct_termios + +type Winsize C.struct_winsize + +// fchmodat-like syscalls. + +const ( + AT_FDCWD = C.AT_FDCWD + AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW +) + +// poll + +type PollFd C.struct_pollfd + +const ( + POLLERR = C.POLLERR + POLLHUP = C.POLLHUP + POLLIN = C.POLLIN + POLLNVAL = C.POLLNVAL + POLLOUT = C.POLLOUT + POLLPRI = C.POLLPRI + POLLRDBAND = C.POLLRDBAND + POLLRDNORM = C.POLLRDNORM + POLLWRBAND = C.POLLWRBAND + POLLWRNORM = C.POLLWRNORM +) + +// Uname + +type Utsname C.struct_utsname diff --git a/vendor/golang.org/x/sys/unix/types_solaris.go b/vendor/golang.org/x/sys/unix/types_solaris.go index 393c7f0..f777155 100644 --- a/vendor/golang.org/x/sys/unix/types_solaris.go +++ b/vendor/golang.org/x/sys/unix/types_solaris.go @@ -24,6 +24,7 @@ package unix #include #include #include +#include #include #include #include @@ -256,10 +257,6 @@ type BpfTimeval C.struct_bpf_timeval type BpfHdr C.struct_bpf_hdr -// sysconf information - -const _SC_PAGESIZE = C._SC_PAGESIZE - // Terminal handling type Termios C.struct_termios @@ -267,3 +264,20 @@ type Termios C.struct_termios type Termio C.struct_termio type Winsize C.struct_winsize + +// poll + +type PollFd C.struct_pollfd + +const ( + POLLERR = C.POLLERR + POLLHUP = C.POLLHUP + POLLIN = C.POLLIN + POLLNVAL = C.POLLNVAL + POLLOUT = C.POLLOUT + POLLPRI = C.POLLPRI + POLLRDBAND = C.POLLRDBAND + POLLRDNORM = C.POLLRDNORM + POLLWRBAND = C.POLLWRBAND + POLLWRNORM = C.POLLWRNORM +) diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_386.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_386.go index 8e63888..dcba884 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_darwin_386.go +++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_386.go @@ -1,5 +1,5 @@ // mkerrors.sh -m32 -// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT +// Code generated by the command above; see README.md. DO NOT EDIT. // +build 386,darwin @@ -48,6 +48,87 @@ const ( AF_UNIX = 0x1 AF_UNSPEC = 0x0 AF_UTUN = 0x26 + ALTWERASE = 0x200 + ATTR_BIT_MAP_COUNT = 0x5 + ATTR_CMN_ACCESSMASK = 0x20000 + ATTR_CMN_ACCTIME = 0x1000 + ATTR_CMN_ADDEDTIME = 0x10000000 + ATTR_CMN_BKUPTIME = 0x2000 + ATTR_CMN_CHGTIME = 0x800 + ATTR_CMN_CRTIME = 0x200 + ATTR_CMN_DATA_PROTECT_FLAGS = 0x40000000 + ATTR_CMN_DEVID = 0x2 + ATTR_CMN_DOCUMENT_ID = 0x100000 + ATTR_CMN_ERROR = 0x20000000 + ATTR_CMN_EXTENDED_SECURITY = 0x400000 + ATTR_CMN_FILEID = 0x2000000 + ATTR_CMN_FLAGS = 0x40000 + ATTR_CMN_FNDRINFO = 0x4000 + ATTR_CMN_FSID = 0x4 + ATTR_CMN_FULLPATH = 0x8000000 + ATTR_CMN_GEN_COUNT = 0x80000 + ATTR_CMN_GRPID = 0x10000 + ATTR_CMN_GRPUUID = 0x1000000 + ATTR_CMN_MODTIME = 0x400 + ATTR_CMN_NAME = 0x1 + ATTR_CMN_NAMEDATTRCOUNT = 0x80000 + ATTR_CMN_NAMEDATTRLIST = 0x100000 + ATTR_CMN_OBJID = 0x20 + ATTR_CMN_OBJPERMANENTID = 0x40 + ATTR_CMN_OBJTAG = 0x10 + ATTR_CMN_OBJTYPE = 0x8 + ATTR_CMN_OWNERID = 0x8000 + ATTR_CMN_PARENTID = 0x4000000 + ATTR_CMN_PAROBJID = 0x80 + ATTR_CMN_RETURNED_ATTRS = 0x80000000 + ATTR_CMN_SCRIPT = 0x100 + ATTR_CMN_SETMASK = 0x41c7ff00 + ATTR_CMN_USERACCESS = 0x200000 + ATTR_CMN_UUID = 0x800000 + ATTR_CMN_VALIDMASK = 0xffffffff + ATTR_CMN_VOLSETMASK = 0x6700 + ATTR_FILE_ALLOCSIZE = 0x4 + ATTR_FILE_CLUMPSIZE = 0x10 + ATTR_FILE_DATAALLOCSIZE = 0x400 + ATTR_FILE_DATAEXTENTS = 0x800 + ATTR_FILE_DATALENGTH = 0x200 + ATTR_FILE_DEVTYPE = 0x20 + ATTR_FILE_FILETYPE = 0x40 + ATTR_FILE_FORKCOUNT = 0x80 + ATTR_FILE_FORKLIST = 0x100 + ATTR_FILE_IOBLOCKSIZE = 0x8 + ATTR_FILE_LINKCOUNT = 0x1 + ATTR_FILE_RSRCALLOCSIZE = 0x2000 + ATTR_FILE_RSRCEXTENTS = 0x4000 + ATTR_FILE_RSRCLENGTH = 0x1000 + ATTR_FILE_SETMASK = 0x20 + ATTR_FILE_TOTALSIZE = 0x2 + ATTR_FILE_VALIDMASK = 0x37ff + ATTR_VOL_ALLOCATIONCLUMP = 0x40 + ATTR_VOL_ATTRIBUTES = 0x40000000 + ATTR_VOL_CAPABILITIES = 0x20000 + ATTR_VOL_DIRCOUNT = 0x400 + ATTR_VOL_ENCODINGSUSED = 0x10000 + ATTR_VOL_FILECOUNT = 0x200 + ATTR_VOL_FSTYPE = 0x1 + ATTR_VOL_INFO = 0x80000000 + ATTR_VOL_IOBLOCKSIZE = 0x80 + ATTR_VOL_MAXOBJCOUNT = 0x800 + ATTR_VOL_MINALLOCATION = 0x20 + ATTR_VOL_MOUNTEDDEVICE = 0x8000 + ATTR_VOL_MOUNTFLAGS = 0x4000 + ATTR_VOL_MOUNTPOINT = 0x1000 + ATTR_VOL_NAME = 0x2000 + ATTR_VOL_OBJCOUNT = 0x100 + ATTR_VOL_QUOTA_SIZE = 0x10000000 + ATTR_VOL_RESERVED_SIZE = 0x20000000 + ATTR_VOL_SETMASK = 0x80002000 + ATTR_VOL_SIGNATURE = 0x2 + ATTR_VOL_SIZE = 0x4 + ATTR_VOL_SPACEAVAIL = 0x10 + ATTR_VOL_SPACEFREE = 0x8 + ATTR_VOL_UUID = 0x40000 + ATTR_VOL_VALIDMASK = 0xf007ffff B0 = 0x0 B110 = 0x6e B115200 = 0x1c200 @@ -138,9 +219,26 @@ const ( BPF_W = 0x0 BPF_X = 0x8 BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x8000 + BSDLY = 0x8000 CFLUSH = 0xf CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_MONOTONIC_RAW_APPROX = 0x5 + CLOCK_PROCESS_CPUTIME_ID = 0xc + CLOCK_REALTIME = 0x0 + CLOCK_THREAD_CPUTIME_ID = 0x10 + CLOCK_UPTIME_RAW = 0x8 + CLOCK_UPTIME_RAW_APPROX = 0x9 + CR0 = 0x0 + CR1 = 0x1000 + CR2 = 0x2000 + CR3 = 0x3000 + CRDLY = 0x3000 CREAD = 0x800 + CRTSCTS = 0x30000 CS5 = 0x0 CS6 = 0x100 CS7 = 0x200 @@ -151,6 +249,8 @@ const ( CSTOP = 0x13 CSTOPB = 0x400 CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 CTL_MAXNAME = 0xc CTL_NET = 0x4 DLT_A429 = 0xb8 @@ -332,13 +432,14 @@ const ( ECHONL = 0x10 ECHOPRT = 0x20 EVFILT_AIO = -0x3 + EVFILT_EXCEPT = -0xf EVFILT_FS = -0x9 EVFILT_MACHPORT = -0x8 EVFILT_PROC = -0x5 EVFILT_READ = -0x1 EVFILT_SIGNAL = -0x6 - EVFILT_SYSCOUNT = 0xe - EVFILT_THREADMARKER = 0xe + EVFILT_SYSCOUNT = 0xf + EVFILT_THREADMARKER = 0xf EVFILT_TIMER = -0x7 EVFILT_USER = -0xa EVFILT_VM = -0xc @@ -349,6 +450,7 @@ const ( EV_DELETE = 0x2 EV_DISABLE = 0x8 EV_DISPATCH = 0x80 + EV_DISPATCH2 = 0x180 EV_ENABLE = 0x4 EV_EOF = 0x8000 EV_ERROR = 0x4000 @@ -359,16 +461,30 @@ const ( EV_POLL = 0x1000 EV_RECEIPT = 0x40 EV_SYSFLAGS = 0xf000 + EV_UDATA_SPECIFIC = 0x100 + EV_VANISHED = 0x200 EXTA = 0x4b00 EXTB = 0x9600 EXTPROC = 0x800 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x4000 + FFDLY = 0x4000 FLUSHO = 0x800000 + FSOPT_ATTR_CMN_EXTENDED = 0x20 + FSOPT_NOFOLLOW = 0x1 + FSOPT_NOINMEMUPDATE = 0x2 + FSOPT_PACK_INVAL_ATTRS = 0x8 + FSOPT_REPORT_FULLSIZE = 0x4 F_ADDFILESIGS = 0x3d + F_ADDFILESIGS_FOR_DYLD_SIM = 0x53 + F_ADDFILESIGS_RETURN = 0x61 F_ADDSIGS = 0x3b F_ALLOCATEALL = 0x4 F_ALLOCATECONTIG = 0x2 + F_BARRIERFSYNC = 0x55 + F_CHECK_LV = 0x62 F_CHKCLEAN = 0x29 F_DUPFD = 0x0 F_DUPFD_CLOEXEC = 0x43 @@ -396,6 +512,7 @@ const ( F_PATHPKG_CHECK = 0x34 F_PEOFPOSMODE = 0x3 F_PREALLOCATE = 0x2a + F_PUNCHHOLE = 0x63 F_RDADVISE = 0x2c F_RDAHEAD = 0x2d F_RDLCK = 0x1 @@ -412,10 +529,12 @@ const ( F_SINGLE_WRITER = 0x4c F_THAW_FS = 0x36 F_TRANSCODEKEY = 0x4b + F_TRIM_ACTIVE_FILE = 0x64 F_UNLCK = 0x2 F_VOLPOSMODE = 0x4 F_WRLCK = 0x3 HUPCL = 0x4000 + HW_MACHINE = 0x1 ICANON = 0x100 ICMP6_FILTER = 0x12 ICRNL = 0x100 @@ -652,6 +771,7 @@ const ( IPV6_FAITH = 0x1d IPV6_FLOWINFO_MASK = 0xffffff0f IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FLOW_ECN_MASK = 0x300 IPV6_FRAGTTL = 0x3c IPV6_FW_ADD = 0x1e IPV6_FW_DEL = 0x1f @@ -742,6 +862,7 @@ const ( IP_RECVOPTS = 0x5 IP_RECVPKTINFO = 0x1a IP_RECVRETOPTS = 0x6 + IP_RECVTOS = 0x1b IP_RECVTTL = 0x18 IP_RETOPTS = 0x8 IP_RF = 0x8000 @@ -760,6 +881,10 @@ const ( IXANY = 0x800 IXOFF = 0x400 IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 LOCK_EX = 0x2 LOCK_NB = 0x4 LOCK_SH = 0x1 @@ -770,11 +895,13 @@ const ( MADV_FREE_REUSABLE = 0x7 MADV_FREE_REUSE = 0x8 MADV_NORMAL = 0x0 + MADV_PAGEOUT = 0xa MADV_RANDOM = 0x1 MADV_SEQUENTIAL = 0x2 MADV_WILLNEED = 0x3 MADV_ZERO_WIRED_PAGES = 0x6 MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 MAP_COPY = 0x2 MAP_FILE = 0x0 MAP_FIXED = 0x10 @@ -786,9 +913,43 @@ const ( MAP_PRIVATE = 0x2 MAP_RENAME = 0x20 MAP_RESERVED0080 = 0x80 + MAP_RESILIENT_CODESIGN = 0x2000 + MAP_RESILIENT_MEDIA = 0x4000 MAP_SHARED = 0x1 MCL_CURRENT = 0x1 MCL_FUTURE = 0x2 + MNT_ASYNC = 0x40 + MNT_AUTOMOUNTED = 0x400000 + MNT_CMDFLAGS = 0xf0000 + MNT_CPROTECT = 0x80 + MNT_DEFWRITE = 0x2000000 + MNT_DONTBROWSE = 0x100000 + MNT_DOVOLFS = 0x8000 + MNT_DWAIT = 0x4 + MNT_EXPORTED = 0x100 + MNT_FORCE = 0x80000 + MNT_IGNORE_OWNERSHIP = 0x200000 + MNT_JOURNALED = 0x800000 + MNT_LOCAL = 0x1000 + MNT_MULTILABEL = 0x4000000 + MNT_NOATIME = 0x10000000 + MNT_NOBLOCK = 0x20000 + MNT_NODEV = 0x10 + MNT_NOEXEC = 0x4 + MNT_NOSUID = 0x8 + MNT_NOUSERXATTR = 0x1000000 + MNT_NOWAIT = 0x2 + MNT_QUARANTINE = 0x400 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UNKNOWNPERMISSIONS = 0x200000 + MNT_UPDATE = 0x10000 + MNT_VISFLAGMASK = 0x17f0f5ff + MNT_WAIT = 0x1 MSG_CTRUNC = 0x20 MSG_DONTROUTE = 0x4 MSG_DONTWAIT = 0x80 @@ -819,7 +980,13 @@ const ( NET_RT_MAXID = 0xa NET_RT_STAT = 0x4 NET_RT_TRASH = 0x5 + NL0 = 0x0 + NL1 = 0x100 + NL2 = 0x200 + NL3 = 0x300 + NLDLY = 0x300 NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 NOTE_ABSOLUTE = 0x8 NOTE_ATTRIB = 0x8 NOTE_BACKGROUND = 0x40 @@ -843,11 +1010,14 @@ const ( NOTE_FFNOP = 0x0 NOTE_FFOR = 0x80000000 NOTE_FORK = 0x40000000 + NOTE_FUNLOCK = 0x100 NOTE_LEEWAY = 0x10 NOTE_LINK = 0x10 NOTE_LOWAT = 0x1 + NOTE_MACH_CONTINUOUS_TIME = 0x80 NOTE_NONE = 0x80 NOTE_NSECONDS = 0x4 + NOTE_OOB = 0x2 NOTE_PCTRLMASK = -0x100000 NOTE_PDATAMASK = 0xfffff NOTE_REAP = 0x10000000 @@ -872,6 +1042,7 @@ const ( ONOCR = 0x20 ONOEOT = 0x8 OPOST = 0x1 + OXTABS = 0x4 O_ACCMODE = 0x3 O_ALERT = 0x20000000 O_APPEND = 0x8 @@ -880,6 +1051,7 @@ const ( O_CREAT = 0x200 O_DIRECTORY = 0x100000 O_DP_GETRAWENCRYPTED = 0x1 + O_DP_GETRAWUNENCRYPTED = 0x2 O_DSYNC = 0x400000 O_EVTONLY = 0x8000 O_EXCL = 0x800 @@ -932,7 +1104,10 @@ const ( RLIMIT_CPU_USAGE_MONITOR = 0x2 RLIMIT_DATA = 0x2 RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 RLIMIT_STACK = 0x3 RLIM_INFINITY = 0x7fffffffffffffff RTAX_AUTHOR = 0x6 @@ -1102,6 +1277,8 @@ const ( SO_LABEL = 0x1010 SO_LINGER = 0x80 SO_LINGER_SEC = 0x1080 + SO_NETSVC_MARKING_LEVEL = 0x1119 + SO_NET_SERVICE_TYPE = 0x1116 SO_NKE = 0x1021 SO_NOADDRERR = 0x1023 SO_NOSIGPIPE = 0x1022 @@ -1157,11 +1334,22 @@ const ( S_IXGRP = 0x8 S_IXOTH = 0x1 S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x400 + TAB2 = 0x800 + TAB3 = 0x4 + TABDLY = 0xc04 TCIFLUSH = 0x1 + TCIOFF = 0x3 TCIOFLUSH = 0x3 + TCION = 0x4 TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 TCP_CONNECTIONTIMEOUT = 0x20 + TCP_CONNECTION_INFO = 0x106 TCP_ENABLE_ECN = 0x104 + TCP_FASTOPEN = 0x105 TCP_KEEPALIVE = 0x10 TCP_KEEPCNT = 0x102 TCP_KEEPINTVL = 0x101 @@ -1261,6 +1449,11 @@ const ( VKILL = 0x5 VLNEXT = 0xe VMIN = 0x10 + VM_LOADAVG = 0x2 + VM_MACHFACTOR = 0x4 + VM_MAXID = 0x6 + VM_METER = 0x1 + VM_SWAPUSAGE = 0x5 VQUIT = 0x9 VREPRINT = 0x6 VSTART = 0xc diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go index 9594f93..1a51c96 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go @@ -1,5 +1,5 @@ // mkerrors.sh -m64 -// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT +// Code generated by the command above; see README.md. DO NOT EDIT. // +build amd64,darwin @@ -48,6 +48,87 @@ const ( AF_UNIX = 0x1 AF_UNSPEC = 0x0 AF_UTUN = 0x26 + ALTWERASE = 0x200 + ATTR_BIT_MAP_COUNT = 0x5 + ATTR_CMN_ACCESSMASK = 0x20000 + ATTR_CMN_ACCTIME = 0x1000 + ATTR_CMN_ADDEDTIME = 0x10000000 + ATTR_CMN_BKUPTIME = 0x2000 + ATTR_CMN_CHGTIME = 0x800 + ATTR_CMN_CRTIME = 0x200 + ATTR_CMN_DATA_PROTECT_FLAGS = 0x40000000 + ATTR_CMN_DEVID = 0x2 + ATTR_CMN_DOCUMENT_ID = 0x100000 + ATTR_CMN_ERROR = 0x20000000 + ATTR_CMN_EXTENDED_SECURITY = 0x400000 + ATTR_CMN_FILEID = 0x2000000 + ATTR_CMN_FLAGS = 0x40000 + ATTR_CMN_FNDRINFO = 0x4000 + ATTR_CMN_FSID = 0x4 + ATTR_CMN_FULLPATH = 0x8000000 + ATTR_CMN_GEN_COUNT = 0x80000 + ATTR_CMN_GRPID = 0x10000 + ATTR_CMN_GRPUUID = 0x1000000 + ATTR_CMN_MODTIME = 0x400 + ATTR_CMN_NAME = 0x1 + ATTR_CMN_NAMEDATTRCOUNT = 0x80000 + ATTR_CMN_NAMEDATTRLIST = 0x100000 + ATTR_CMN_OBJID = 0x20 + ATTR_CMN_OBJPERMANENTID = 0x40 + ATTR_CMN_OBJTAG = 0x10 + ATTR_CMN_OBJTYPE = 0x8 + ATTR_CMN_OWNERID = 0x8000 + ATTR_CMN_PARENTID = 0x4000000 + ATTR_CMN_PAROBJID = 0x80 + ATTR_CMN_RETURNED_ATTRS = 0x80000000 + ATTR_CMN_SCRIPT = 0x100 + ATTR_CMN_SETMASK = 0x41c7ff00 + ATTR_CMN_USERACCESS = 0x200000 + ATTR_CMN_UUID = 0x800000 + ATTR_CMN_VALIDMASK = 0xffffffff + ATTR_CMN_VOLSETMASK = 0x6700 + ATTR_FILE_ALLOCSIZE = 0x4 + ATTR_FILE_CLUMPSIZE = 0x10 + ATTR_FILE_DATAALLOCSIZE = 0x400 + ATTR_FILE_DATAEXTENTS = 0x800 + ATTR_FILE_DATALENGTH = 0x200 + ATTR_FILE_DEVTYPE = 0x20 + ATTR_FILE_FILETYPE = 0x40 + ATTR_FILE_FORKCOUNT = 0x80 + ATTR_FILE_FORKLIST = 0x100 + ATTR_FILE_IOBLOCKSIZE = 0x8 + ATTR_FILE_LINKCOUNT = 0x1 + ATTR_FILE_RSRCALLOCSIZE = 0x2000 + ATTR_FILE_RSRCEXTENTS = 0x4000 + ATTR_FILE_RSRCLENGTH = 0x1000 + ATTR_FILE_SETMASK = 0x20 + ATTR_FILE_TOTALSIZE = 0x2 + ATTR_FILE_VALIDMASK = 0x37ff + ATTR_VOL_ALLOCATIONCLUMP = 0x40 + ATTR_VOL_ATTRIBUTES = 0x40000000 + ATTR_VOL_CAPABILITIES = 0x20000 + ATTR_VOL_DIRCOUNT = 0x400 + ATTR_VOL_ENCODINGSUSED = 0x10000 + ATTR_VOL_FILECOUNT = 0x200 + ATTR_VOL_FSTYPE = 0x1 + ATTR_VOL_INFO = 0x80000000 + ATTR_VOL_IOBLOCKSIZE = 0x80 + ATTR_VOL_MAXOBJCOUNT = 0x800 + ATTR_VOL_MINALLOCATION = 0x20 + ATTR_VOL_MOUNTEDDEVICE = 0x8000 + ATTR_VOL_MOUNTFLAGS = 0x4000 + ATTR_VOL_MOUNTPOINT = 0x1000 + ATTR_VOL_NAME = 0x2000 + ATTR_VOL_OBJCOUNT = 0x100 + ATTR_VOL_QUOTA_SIZE = 0x10000000 + ATTR_VOL_RESERVED_SIZE = 0x20000000 + ATTR_VOL_SETMASK = 0x80002000 + ATTR_VOL_SIGNATURE = 0x2 + ATTR_VOL_SIZE = 0x4 + ATTR_VOL_SPACEAVAIL = 0x10 + ATTR_VOL_SPACEFREE = 0x8 + ATTR_VOL_UUID = 0x40000 + ATTR_VOL_VALIDMASK = 0xf007ffff B0 = 0x0 B110 = 0x6e B115200 = 0x1c200 @@ -138,9 +219,26 @@ const ( BPF_W = 0x0 BPF_X = 0x8 BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x8000 + BSDLY = 0x8000 CFLUSH = 0xf CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_MONOTONIC_RAW_APPROX = 0x5 + CLOCK_PROCESS_CPUTIME_ID = 0xc + CLOCK_REALTIME = 0x0 + CLOCK_THREAD_CPUTIME_ID = 0x10 + CLOCK_UPTIME_RAW = 0x8 + CLOCK_UPTIME_RAW_APPROX = 0x9 + CR0 = 0x0 + CR1 = 0x1000 + CR2 = 0x2000 + CR3 = 0x3000 + CRDLY = 0x3000 CREAD = 0x800 + CRTSCTS = 0x30000 CS5 = 0x0 CS6 = 0x100 CS7 = 0x200 @@ -151,6 +249,8 @@ const ( CSTOP = 0x13 CSTOPB = 0x400 CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 CTL_MAXNAME = 0xc CTL_NET = 0x4 DLT_A429 = 0xb8 @@ -332,13 +432,14 @@ const ( ECHONL = 0x10 ECHOPRT = 0x20 EVFILT_AIO = -0x3 + EVFILT_EXCEPT = -0xf EVFILT_FS = -0x9 EVFILT_MACHPORT = -0x8 EVFILT_PROC = -0x5 EVFILT_READ = -0x1 EVFILT_SIGNAL = -0x6 - EVFILT_SYSCOUNT = 0xe - EVFILT_THREADMARKER = 0xe + EVFILT_SYSCOUNT = 0xf + EVFILT_THREADMARKER = 0xf EVFILT_TIMER = -0x7 EVFILT_USER = -0xa EVFILT_VM = -0xc @@ -349,6 +450,7 @@ const ( EV_DELETE = 0x2 EV_DISABLE = 0x8 EV_DISPATCH = 0x80 + EV_DISPATCH2 = 0x180 EV_ENABLE = 0x4 EV_EOF = 0x8000 EV_ERROR = 0x4000 @@ -359,16 +461,30 @@ const ( EV_POLL = 0x1000 EV_RECEIPT = 0x40 EV_SYSFLAGS = 0xf000 + EV_UDATA_SPECIFIC = 0x100 + EV_VANISHED = 0x200 EXTA = 0x4b00 EXTB = 0x9600 EXTPROC = 0x800 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x4000 + FFDLY = 0x4000 FLUSHO = 0x800000 + FSOPT_ATTR_CMN_EXTENDED = 0x20 + FSOPT_NOFOLLOW = 0x1 + FSOPT_NOINMEMUPDATE = 0x2 + FSOPT_PACK_INVAL_ATTRS = 0x8 + FSOPT_REPORT_FULLSIZE = 0x4 F_ADDFILESIGS = 0x3d + F_ADDFILESIGS_FOR_DYLD_SIM = 0x53 + F_ADDFILESIGS_RETURN = 0x61 F_ADDSIGS = 0x3b F_ALLOCATEALL = 0x4 F_ALLOCATECONTIG = 0x2 + F_BARRIERFSYNC = 0x55 + F_CHECK_LV = 0x62 F_CHKCLEAN = 0x29 F_DUPFD = 0x0 F_DUPFD_CLOEXEC = 0x43 @@ -396,6 +512,7 @@ const ( F_PATHPKG_CHECK = 0x34 F_PEOFPOSMODE = 0x3 F_PREALLOCATE = 0x2a + F_PUNCHHOLE = 0x63 F_RDADVISE = 0x2c F_RDAHEAD = 0x2d F_RDLCK = 0x1 @@ -412,10 +529,12 @@ const ( F_SINGLE_WRITER = 0x4c F_THAW_FS = 0x36 F_TRANSCODEKEY = 0x4b + F_TRIM_ACTIVE_FILE = 0x64 F_UNLCK = 0x2 F_VOLPOSMODE = 0x4 F_WRLCK = 0x3 HUPCL = 0x4000 + HW_MACHINE = 0x1 ICANON = 0x100 ICMP6_FILTER = 0x12 ICRNL = 0x100 @@ -652,6 +771,7 @@ const ( IPV6_FAITH = 0x1d IPV6_FLOWINFO_MASK = 0xffffff0f IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FLOW_ECN_MASK = 0x300 IPV6_FRAGTTL = 0x3c IPV6_FW_ADD = 0x1e IPV6_FW_DEL = 0x1f @@ -742,6 +862,7 @@ const ( IP_RECVOPTS = 0x5 IP_RECVPKTINFO = 0x1a IP_RECVRETOPTS = 0x6 + IP_RECVTOS = 0x1b IP_RECVTTL = 0x18 IP_RETOPTS = 0x8 IP_RF = 0x8000 @@ -760,6 +881,10 @@ const ( IXANY = 0x800 IXOFF = 0x400 IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 LOCK_EX = 0x2 LOCK_NB = 0x4 LOCK_SH = 0x1 @@ -770,11 +895,13 @@ const ( MADV_FREE_REUSABLE = 0x7 MADV_FREE_REUSE = 0x8 MADV_NORMAL = 0x0 + MADV_PAGEOUT = 0xa MADV_RANDOM = 0x1 MADV_SEQUENTIAL = 0x2 MADV_WILLNEED = 0x3 MADV_ZERO_WIRED_PAGES = 0x6 MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 MAP_COPY = 0x2 MAP_FILE = 0x0 MAP_FIXED = 0x10 @@ -786,9 +913,43 @@ const ( MAP_PRIVATE = 0x2 MAP_RENAME = 0x20 MAP_RESERVED0080 = 0x80 + MAP_RESILIENT_CODESIGN = 0x2000 + MAP_RESILIENT_MEDIA = 0x4000 MAP_SHARED = 0x1 MCL_CURRENT = 0x1 MCL_FUTURE = 0x2 + MNT_ASYNC = 0x40 + MNT_AUTOMOUNTED = 0x400000 + MNT_CMDFLAGS = 0xf0000 + MNT_CPROTECT = 0x80 + MNT_DEFWRITE = 0x2000000 + MNT_DONTBROWSE = 0x100000 + MNT_DOVOLFS = 0x8000 + MNT_DWAIT = 0x4 + MNT_EXPORTED = 0x100 + MNT_FORCE = 0x80000 + MNT_IGNORE_OWNERSHIP = 0x200000 + MNT_JOURNALED = 0x800000 + MNT_LOCAL = 0x1000 + MNT_MULTILABEL = 0x4000000 + MNT_NOATIME = 0x10000000 + MNT_NOBLOCK = 0x20000 + MNT_NODEV = 0x10 + MNT_NOEXEC = 0x4 + MNT_NOSUID = 0x8 + MNT_NOUSERXATTR = 0x1000000 + MNT_NOWAIT = 0x2 + MNT_QUARANTINE = 0x400 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UNKNOWNPERMISSIONS = 0x200000 + MNT_UPDATE = 0x10000 + MNT_VISFLAGMASK = 0x17f0f5ff + MNT_WAIT = 0x1 MSG_CTRUNC = 0x20 MSG_DONTROUTE = 0x4 MSG_DONTWAIT = 0x80 @@ -819,7 +980,13 @@ const ( NET_RT_MAXID = 0xa NET_RT_STAT = 0x4 NET_RT_TRASH = 0x5 + NL0 = 0x0 + NL1 = 0x100 + NL2 = 0x200 + NL3 = 0x300 + NLDLY = 0x300 NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 NOTE_ABSOLUTE = 0x8 NOTE_ATTRIB = 0x8 NOTE_BACKGROUND = 0x40 @@ -843,11 +1010,14 @@ const ( NOTE_FFNOP = 0x0 NOTE_FFOR = 0x80000000 NOTE_FORK = 0x40000000 + NOTE_FUNLOCK = 0x100 NOTE_LEEWAY = 0x10 NOTE_LINK = 0x10 NOTE_LOWAT = 0x1 + NOTE_MACH_CONTINUOUS_TIME = 0x80 NOTE_NONE = 0x80 NOTE_NSECONDS = 0x4 + NOTE_OOB = 0x2 NOTE_PCTRLMASK = -0x100000 NOTE_PDATAMASK = 0xfffff NOTE_REAP = 0x10000000 @@ -872,6 +1042,7 @@ const ( ONOCR = 0x20 ONOEOT = 0x8 OPOST = 0x1 + OXTABS = 0x4 O_ACCMODE = 0x3 O_ALERT = 0x20000000 O_APPEND = 0x8 @@ -880,6 +1051,7 @@ const ( O_CREAT = 0x200 O_DIRECTORY = 0x100000 O_DP_GETRAWENCRYPTED = 0x1 + O_DP_GETRAWUNENCRYPTED = 0x2 O_DSYNC = 0x400000 O_EVTONLY = 0x8000 O_EXCL = 0x800 @@ -932,7 +1104,10 @@ const ( RLIMIT_CPU_USAGE_MONITOR = 0x2 RLIMIT_DATA = 0x2 RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 RLIMIT_STACK = 0x3 RLIM_INFINITY = 0x7fffffffffffffff RTAX_AUTHOR = 0x6 @@ -1102,6 +1277,8 @@ const ( SO_LABEL = 0x1010 SO_LINGER = 0x80 SO_LINGER_SEC = 0x1080 + SO_NETSVC_MARKING_LEVEL = 0x1119 + SO_NET_SERVICE_TYPE = 0x1116 SO_NKE = 0x1021 SO_NOADDRERR = 0x1023 SO_NOSIGPIPE = 0x1022 @@ -1157,11 +1334,22 @@ const ( S_IXGRP = 0x8 S_IXOTH = 0x1 S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x400 + TAB2 = 0x800 + TAB3 = 0x4 + TABDLY = 0xc04 TCIFLUSH = 0x1 + TCIOFF = 0x3 TCIOFLUSH = 0x3 + TCION = 0x4 TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 TCP_CONNECTIONTIMEOUT = 0x20 + TCP_CONNECTION_INFO = 0x106 TCP_ENABLE_ECN = 0x104 + TCP_FASTOPEN = 0x105 TCP_KEEPALIVE = 0x10 TCP_KEEPCNT = 0x102 TCP_KEEPINTVL = 0x101 @@ -1261,6 +1449,11 @@ const ( VKILL = 0x5 VLNEXT = 0xe VMIN = 0x10 + VM_LOADAVG = 0x2 + VM_MACHFACTOR = 0x4 + VM_MAXID = 0x6 + VM_METER = 0x1 + VM_SWAPUSAGE = 0x5 VQUIT = 0x9 VREPRINT = 0x6 VSTART = 0xc diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go index a410e88..fa135b1 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go +++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go @@ -1,11 +1,11 @@ // mkerrors.sh -// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm,darwin // Created by cgo -godefs - DO NOT EDIT // cgo -godefs -- _const.go -// +build arm,darwin - package unix import "syscall" @@ -48,6 +48,87 @@ const ( AF_UNIX = 0x1 AF_UNSPEC = 0x0 AF_UTUN = 0x26 + ALTWERASE = 0x200 + ATTR_BIT_MAP_COUNT = 0x5 + ATTR_CMN_ACCESSMASK = 0x20000 + ATTR_CMN_ACCTIME = 0x1000 + ATTR_CMN_ADDEDTIME = 0x10000000 + ATTR_CMN_BKUPTIME = 0x2000 + ATTR_CMN_CHGTIME = 0x800 + ATTR_CMN_CRTIME = 0x200 + ATTR_CMN_DATA_PROTECT_FLAGS = 0x40000000 + ATTR_CMN_DEVID = 0x2 + ATTR_CMN_DOCUMENT_ID = 0x100000 + ATTR_CMN_ERROR = 0x20000000 + ATTR_CMN_EXTENDED_SECURITY = 0x400000 + ATTR_CMN_FILEID = 0x2000000 + ATTR_CMN_FLAGS = 0x40000 + ATTR_CMN_FNDRINFO = 0x4000 + ATTR_CMN_FSID = 0x4 + ATTR_CMN_FULLPATH = 0x8000000 + ATTR_CMN_GEN_COUNT = 0x80000 + ATTR_CMN_GRPID = 0x10000 + ATTR_CMN_GRPUUID = 0x1000000 + ATTR_CMN_MODTIME = 0x400 + ATTR_CMN_NAME = 0x1 + ATTR_CMN_NAMEDATTRCOUNT = 0x80000 + ATTR_CMN_NAMEDATTRLIST = 0x100000 + ATTR_CMN_OBJID = 0x20 + ATTR_CMN_OBJPERMANENTID = 0x40 + ATTR_CMN_OBJTAG = 0x10 + ATTR_CMN_OBJTYPE = 0x8 + ATTR_CMN_OWNERID = 0x8000 + ATTR_CMN_PARENTID = 0x4000000 + ATTR_CMN_PAROBJID = 0x80 + ATTR_CMN_RETURNED_ATTRS = 0x80000000 + ATTR_CMN_SCRIPT = 0x100 + ATTR_CMN_SETMASK = 0x41c7ff00 + ATTR_CMN_USERACCESS = 0x200000 + ATTR_CMN_UUID = 0x800000 + ATTR_CMN_VALIDMASK = 0xffffffff + ATTR_CMN_VOLSETMASK = 0x6700 + ATTR_FILE_ALLOCSIZE = 0x4 + ATTR_FILE_CLUMPSIZE = 0x10 + ATTR_FILE_DATAALLOCSIZE = 0x400 + ATTR_FILE_DATAEXTENTS = 0x800 + ATTR_FILE_DATALENGTH = 0x200 + ATTR_FILE_DEVTYPE = 0x20 + ATTR_FILE_FILETYPE = 0x40 + ATTR_FILE_FORKCOUNT = 0x80 + ATTR_FILE_FORKLIST = 0x100 + ATTR_FILE_IOBLOCKSIZE = 0x8 + ATTR_FILE_LINKCOUNT = 0x1 + ATTR_FILE_RSRCALLOCSIZE = 0x2000 + ATTR_FILE_RSRCEXTENTS = 0x4000 + ATTR_FILE_RSRCLENGTH = 0x1000 + ATTR_FILE_SETMASK = 0x20 + ATTR_FILE_TOTALSIZE = 0x2 + ATTR_FILE_VALIDMASK = 0x37ff + ATTR_VOL_ALLOCATIONCLUMP = 0x40 + ATTR_VOL_ATTRIBUTES = 0x40000000 + ATTR_VOL_CAPABILITIES = 0x20000 + ATTR_VOL_DIRCOUNT = 0x400 + ATTR_VOL_ENCODINGSUSED = 0x10000 + ATTR_VOL_FILECOUNT = 0x200 + ATTR_VOL_FSTYPE = 0x1 + ATTR_VOL_INFO = 0x80000000 + ATTR_VOL_IOBLOCKSIZE = 0x80 + ATTR_VOL_MAXOBJCOUNT = 0x800 + ATTR_VOL_MINALLOCATION = 0x20 + ATTR_VOL_MOUNTEDDEVICE = 0x8000 + ATTR_VOL_MOUNTFLAGS = 0x4000 + ATTR_VOL_MOUNTPOINT = 0x1000 + ATTR_VOL_NAME = 0x2000 + ATTR_VOL_OBJCOUNT = 0x100 + ATTR_VOL_QUOTA_SIZE = 0x10000000 + ATTR_VOL_RESERVED_SIZE = 0x20000000 + ATTR_VOL_SETMASK = 0x80002000 + ATTR_VOL_SIGNATURE = 0x2 + ATTR_VOL_SIZE = 0x4 + ATTR_VOL_SPACEAVAIL = 0x10 + ATTR_VOL_SPACEFREE = 0x8 + ATTR_VOL_UUID = 0x40000 + ATTR_VOL_VALIDMASK = 0xf007ffff B0 = 0x0 B110 = 0x6e B115200 = 0x1c200 @@ -86,6 +167,7 @@ const ( BIOCSBLEN = 0xc0044266 BIOCSDLT = 0x80044278 BIOCSETF = 0x80104267 + BIOCSETFNR = 0x8010427e BIOCSETIF = 0x8020426c BIOCSHDRCMPLT = 0x80044275 BIOCSRSIG = 0x80044273 @@ -137,9 +219,26 @@ const ( BPF_W = 0x0 BPF_X = 0x8 BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x8000 + BSDLY = 0x8000 CFLUSH = 0xf CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_MONOTONIC_RAW_APPROX = 0x5 + CLOCK_PROCESS_CPUTIME_ID = 0xc + CLOCK_REALTIME = 0x0 + CLOCK_THREAD_CPUTIME_ID = 0x10 + CLOCK_UPTIME_RAW = 0x8 + CLOCK_UPTIME_RAW_APPROX = 0x9 + CR0 = 0x0 + CR1 = 0x1000 + CR2 = 0x2000 + CR3 = 0x3000 + CRDLY = 0x3000 CREAD = 0x800 + CRTSCTS = 0x30000 CS5 = 0x0 CS6 = 0x100 CS7 = 0x200 @@ -150,35 +249,172 @@ const ( CSTOP = 0x13 CSTOPB = 0x400 CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 CTL_MAXNAME = 0xc CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde DLT_APPLE_IP_OVER_IEEE1394 = 0x8a DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 DLT_ATM_CLIP = 0x13 DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 DLT_CHAOS = 0x5 DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 DLT_EN10MB = 0x1 DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 DLT_IEEE802 = 0x6 DLT_IEEE802_11 = 0x69 DLT_IEEE802_11_RADIO = 0x7f DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 DLT_LINUX_SLL = 0x71 DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0xf5 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d DLT_PFLOG = 0x75 DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 DLT_PPP = 0x9 DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 DLT_RAW = 0xc + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 DLT_SLIP = 0x8 DLT_SLIP_BSDOS = 0xf + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 DT_BLK = 0x6 DT_CHR = 0x2 DT_DIR = 0x4 @@ -196,13 +432,14 @@ const ( ECHONL = 0x10 ECHOPRT = 0x20 EVFILT_AIO = -0x3 + EVFILT_EXCEPT = -0xf EVFILT_FS = -0x9 EVFILT_MACHPORT = -0x8 EVFILT_PROC = -0x5 EVFILT_READ = -0x1 EVFILT_SIGNAL = -0x6 - EVFILT_SYSCOUNT = 0xe - EVFILT_THREADMARKER = 0xe + EVFILT_SYSCOUNT = 0xf + EVFILT_THREADMARKER = 0xf EVFILT_TIMER = -0x7 EVFILT_USER = -0xa EVFILT_VM = -0xc @@ -213,6 +450,7 @@ const ( EV_DELETE = 0x2 EV_DISABLE = 0x8 EV_DISPATCH = 0x80 + EV_DISPATCH2 = 0x180 EV_ENABLE = 0x4 EV_EOF = 0x8000 EV_ERROR = 0x4000 @@ -223,16 +461,30 @@ const ( EV_POLL = 0x1000 EV_RECEIPT = 0x40 EV_SYSFLAGS = 0xf000 + EV_UDATA_SPECIFIC = 0x100 + EV_VANISHED = 0x200 EXTA = 0x4b00 EXTB = 0x9600 EXTPROC = 0x800 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x4000 + FFDLY = 0x4000 FLUSHO = 0x800000 + FSOPT_ATTR_CMN_EXTENDED = 0x20 + FSOPT_NOFOLLOW = 0x1 + FSOPT_NOINMEMUPDATE = 0x2 + FSOPT_PACK_INVAL_ATTRS = 0x8 + FSOPT_REPORT_FULLSIZE = 0x4 F_ADDFILESIGS = 0x3d + F_ADDFILESIGS_FOR_DYLD_SIM = 0x53 + F_ADDFILESIGS_RETURN = 0x61 F_ADDSIGS = 0x3b F_ALLOCATEALL = 0x4 F_ALLOCATECONTIG = 0x2 + F_BARRIERFSYNC = 0x55 + F_CHECK_LV = 0x62 F_CHKCLEAN = 0x29 F_DUPFD = 0x0 F_DUPFD_CLOEXEC = 0x43 @@ -260,6 +512,7 @@ const ( F_PATHPKG_CHECK = 0x34 F_PEOFPOSMODE = 0x3 F_PREALLOCATE = 0x2a + F_PUNCHHOLE = 0x63 F_RDADVISE = 0x2c F_RDAHEAD = 0x2d F_RDLCK = 0x1 @@ -276,10 +529,12 @@ const ( F_SINGLE_WRITER = 0x4c F_THAW_FS = 0x36 F_TRANSCODEKEY = 0x4b + F_TRIM_ACTIVE_FILE = 0x64 F_UNLCK = 0x2 F_VOLPOSMODE = 0x4 F_WRLCK = 0x3 HUPCL = 0x4000 + HW_MACHINE = 0x1 ICANON = 0x100 ICMP6_FILTER = 0x12 ICRNL = 0x100 @@ -347,6 +602,7 @@ const ( IFT_PDP = 0xff IFT_PFLOG = 0xf5 IFT_PFSYNC = 0xf6 + IFT_PKTAP = 0xfe IFT_PPP = 0x17 IFT_PROPMUX = 0x36 IFT_PROPVIRTUAL = 0x35 @@ -515,7 +771,8 @@ const ( IPV6_FAITH = 0x1d IPV6_FLOWINFO_MASK = 0xffffff0f IPV6_FLOWLABEL_MASK = 0xffff0f00 - IPV6_FRAGTTL = 0x78 + IPV6_FLOW_ECN_MASK = 0x300 + IPV6_FRAGTTL = 0x3c IPV6_FW_ADD = 0x1e IPV6_FW_DEL = 0x1f IPV6_FW_FLUSH = 0x20 @@ -605,6 +862,7 @@ const ( IP_RECVOPTS = 0x5 IP_RECVPKTINFO = 0x1a IP_RECVRETOPTS = 0x6 + IP_RECVTOS = 0x1b IP_RECVTTL = 0x18 IP_RETOPTS = 0x8 IP_RF = 0x8000 @@ -623,6 +881,10 @@ const ( IXANY = 0x800 IXOFF = 0x400 IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 LOCK_EX = 0x2 LOCK_NB = 0x4 LOCK_SH = 0x1 @@ -633,11 +895,13 @@ const ( MADV_FREE_REUSABLE = 0x7 MADV_FREE_REUSE = 0x8 MADV_NORMAL = 0x0 + MADV_PAGEOUT = 0xa MADV_RANDOM = 0x1 MADV_SEQUENTIAL = 0x2 MADV_WILLNEED = 0x3 MADV_ZERO_WIRED_PAGES = 0x6 MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 MAP_COPY = 0x2 MAP_FILE = 0x0 MAP_FIXED = 0x10 @@ -649,9 +913,43 @@ const ( MAP_PRIVATE = 0x2 MAP_RENAME = 0x20 MAP_RESERVED0080 = 0x80 + MAP_RESILIENT_CODESIGN = 0x2000 + MAP_RESILIENT_MEDIA = 0x4000 MAP_SHARED = 0x1 MCL_CURRENT = 0x1 MCL_FUTURE = 0x2 + MNT_ASYNC = 0x40 + MNT_AUTOMOUNTED = 0x400000 + MNT_CMDFLAGS = 0xf0000 + MNT_CPROTECT = 0x80 + MNT_DEFWRITE = 0x2000000 + MNT_DONTBROWSE = 0x100000 + MNT_DOVOLFS = 0x8000 + MNT_DWAIT = 0x4 + MNT_EXPORTED = 0x100 + MNT_FORCE = 0x80000 + MNT_IGNORE_OWNERSHIP = 0x200000 + MNT_JOURNALED = 0x800000 + MNT_LOCAL = 0x1000 + MNT_MULTILABEL = 0x4000000 + MNT_NOATIME = 0x10000000 + MNT_NOBLOCK = 0x20000 + MNT_NODEV = 0x10 + MNT_NOEXEC = 0x4 + MNT_NOSUID = 0x8 + MNT_NOUSERXATTR = 0x1000000 + MNT_NOWAIT = 0x2 + MNT_QUARANTINE = 0x400 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UNKNOWNPERMISSIONS = 0x200000 + MNT_UPDATE = 0x10000 + MNT_VISFLAGMASK = 0x17f0f5ff + MNT_WAIT = 0x1 MSG_CTRUNC = 0x20 MSG_DONTROUTE = 0x4 MSG_DONTWAIT = 0x80 @@ -682,7 +980,13 @@ const ( NET_RT_MAXID = 0xa NET_RT_STAT = 0x4 NET_RT_TRASH = 0x5 + NL0 = 0x0 + NL1 = 0x100 + NL2 = 0x200 + NL3 = 0x300 + NLDLY = 0x300 NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 NOTE_ABSOLUTE = 0x8 NOTE_ATTRIB = 0x8 NOTE_BACKGROUND = 0x40 @@ -706,11 +1010,14 @@ const ( NOTE_FFNOP = 0x0 NOTE_FFOR = 0x80000000 NOTE_FORK = 0x40000000 + NOTE_FUNLOCK = 0x100 NOTE_LEEWAY = 0x10 NOTE_LINK = 0x10 NOTE_LOWAT = 0x1 + NOTE_MACH_CONTINUOUS_TIME = 0x80 NOTE_NONE = 0x80 NOTE_NSECONDS = 0x4 + NOTE_OOB = 0x2 NOTE_PCTRLMASK = -0x100000 NOTE_PDATAMASK = 0xfffff NOTE_REAP = 0x10000000 @@ -735,6 +1042,7 @@ const ( ONOCR = 0x20 ONOEOT = 0x8 OPOST = 0x1 + OXTABS = 0x4 O_ACCMODE = 0x3 O_ALERT = 0x20000000 O_APPEND = 0x8 @@ -743,6 +1051,7 @@ const ( O_CREAT = 0x200 O_DIRECTORY = 0x100000 O_DP_GETRAWENCRYPTED = 0x1 + O_DP_GETRAWUNENCRYPTED = 0x2 O_DSYNC = 0x400000 O_EVTONLY = 0x8000 O_EXCL = 0x800 @@ -795,7 +1104,10 @@ const ( RLIMIT_CPU_USAGE_MONITOR = 0x2 RLIMIT_DATA = 0x2 RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 RLIMIT_STACK = 0x3 RLIM_INFINITY = 0x7fffffffffffffff RTAX_AUTHOR = 0x6 @@ -830,6 +1142,7 @@ const ( RTF_LOCAL = 0x200000 RTF_MODIFIED = 0x20 RTF_MULTICAST = 0x800000 + RTF_NOIFREF = 0x2000 RTF_PINNED = 0x100000 RTF_PRCLONING = 0x10000 RTF_PROTO1 = 0x8000 @@ -964,6 +1277,8 @@ const ( SO_LABEL = 0x1010 SO_LINGER = 0x80 SO_LINGER_SEC = 0x1080 + SO_NETSVC_MARKING_LEVEL = 0x1119 + SO_NET_SERVICE_TYPE = 0x1116 SO_NKE = 0x1021 SO_NOADDRERR = 0x1023 SO_NOSIGPIPE = 0x1022 @@ -1019,11 +1334,22 @@ const ( S_IXGRP = 0x8 S_IXOTH = 0x1 S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x400 + TAB2 = 0x800 + TAB3 = 0x4 + TABDLY = 0xc04 TCIFLUSH = 0x1 + TCIOFF = 0x3 TCIOFLUSH = 0x3 + TCION = 0x4 TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 TCP_CONNECTIONTIMEOUT = 0x20 + TCP_CONNECTION_INFO = 0x106 TCP_ENABLE_ECN = 0x104 + TCP_FASTOPEN = 0x105 TCP_KEEPALIVE = 0x10 TCP_KEEPCNT = 0x102 TCP_KEEPINTVL = 0x101 @@ -1123,6 +1449,11 @@ const ( VKILL = 0x5 VLNEXT = 0xe VMIN = 0x10 + VM_LOADAVG = 0x2 + VM_MACHFACTOR = 0x4 + VM_MAXID = 0x6 + VM_METER = 0x1 + VM_SWAPUSAGE = 0x5 VQUIT = 0x9 VREPRINT = 0x6 VSTART = 0xc @@ -1291,3 +1622,148 @@ const ( SIGXCPU = syscall.Signal(0x18) SIGXFSZ = syscall.Signal(0x19) ) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "resource busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "operation timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "device power is off", + 83: "device error", + 84: "value too large to be stored in data type", + 85: "bad executable (or shared library)", + 86: "bad CPU type in executable", + 87: "shared library version mismatch", + 88: "malformed Mach-o file", + 89: "operation canceled", + 90: "identifier removed", + 91: "no message of desired type", + 92: "illegal byte sequence", + 93: "attribute not found", + 94: "bad message", + 95: "EMULTIHOP (Reserved)", + 96: "no message available on STREAM", + 97: "ENOLINK (Reserved)", + 98: "no STREAM resources", + 99: "not a STREAM", + 100: "protocol error", + 101: "STREAM ioctl timeout", + 102: "operation not supported on socket", + 103: "policy not found", + 104: "state not recoverable", + 105: "previous owner died", + 106: "interface output queue is full", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "suspended (signal)", + 18: "suspended", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go index 3189c6b..6419c65 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go @@ -1,5 +1,5 @@ // mkerrors.sh -m64 -// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT +// Code generated by the command above; see README.md. DO NOT EDIT. // +build arm64,darwin @@ -48,6 +48,87 @@ const ( AF_UNIX = 0x1 AF_UNSPEC = 0x0 AF_UTUN = 0x26 + ALTWERASE = 0x200 + ATTR_BIT_MAP_COUNT = 0x5 + ATTR_CMN_ACCESSMASK = 0x20000 + ATTR_CMN_ACCTIME = 0x1000 + ATTR_CMN_ADDEDTIME = 0x10000000 + ATTR_CMN_BKUPTIME = 0x2000 + ATTR_CMN_CHGTIME = 0x800 + ATTR_CMN_CRTIME = 0x200 + ATTR_CMN_DATA_PROTECT_FLAGS = 0x40000000 + ATTR_CMN_DEVID = 0x2 + ATTR_CMN_DOCUMENT_ID = 0x100000 + ATTR_CMN_ERROR = 0x20000000 + ATTR_CMN_EXTENDED_SECURITY = 0x400000 + ATTR_CMN_FILEID = 0x2000000 + ATTR_CMN_FLAGS = 0x40000 + ATTR_CMN_FNDRINFO = 0x4000 + ATTR_CMN_FSID = 0x4 + ATTR_CMN_FULLPATH = 0x8000000 + ATTR_CMN_GEN_COUNT = 0x80000 + ATTR_CMN_GRPID = 0x10000 + ATTR_CMN_GRPUUID = 0x1000000 + ATTR_CMN_MODTIME = 0x400 + ATTR_CMN_NAME = 0x1 + ATTR_CMN_NAMEDATTRCOUNT = 0x80000 + ATTR_CMN_NAMEDATTRLIST = 0x100000 + ATTR_CMN_OBJID = 0x20 + ATTR_CMN_OBJPERMANENTID = 0x40 + ATTR_CMN_OBJTAG = 0x10 + ATTR_CMN_OBJTYPE = 0x8 + ATTR_CMN_OWNERID = 0x8000 + ATTR_CMN_PARENTID = 0x4000000 + ATTR_CMN_PAROBJID = 0x80 + ATTR_CMN_RETURNED_ATTRS = 0x80000000 + ATTR_CMN_SCRIPT = 0x100 + ATTR_CMN_SETMASK = 0x41c7ff00 + ATTR_CMN_USERACCESS = 0x200000 + ATTR_CMN_UUID = 0x800000 + ATTR_CMN_VALIDMASK = 0xffffffff + ATTR_CMN_VOLSETMASK = 0x6700 + ATTR_FILE_ALLOCSIZE = 0x4 + ATTR_FILE_CLUMPSIZE = 0x10 + ATTR_FILE_DATAALLOCSIZE = 0x400 + ATTR_FILE_DATAEXTENTS = 0x800 + ATTR_FILE_DATALENGTH = 0x200 + ATTR_FILE_DEVTYPE = 0x20 + ATTR_FILE_FILETYPE = 0x40 + ATTR_FILE_FORKCOUNT = 0x80 + ATTR_FILE_FORKLIST = 0x100 + ATTR_FILE_IOBLOCKSIZE = 0x8 + ATTR_FILE_LINKCOUNT = 0x1 + ATTR_FILE_RSRCALLOCSIZE = 0x2000 + ATTR_FILE_RSRCEXTENTS = 0x4000 + ATTR_FILE_RSRCLENGTH = 0x1000 + ATTR_FILE_SETMASK = 0x20 + ATTR_FILE_TOTALSIZE = 0x2 + ATTR_FILE_VALIDMASK = 0x37ff + ATTR_VOL_ALLOCATIONCLUMP = 0x40 + ATTR_VOL_ATTRIBUTES = 0x40000000 + ATTR_VOL_CAPABILITIES = 0x20000 + ATTR_VOL_DIRCOUNT = 0x400 + ATTR_VOL_ENCODINGSUSED = 0x10000 + ATTR_VOL_FILECOUNT = 0x200 + ATTR_VOL_FSTYPE = 0x1 + ATTR_VOL_INFO = 0x80000000 + ATTR_VOL_IOBLOCKSIZE = 0x80 + ATTR_VOL_MAXOBJCOUNT = 0x800 + ATTR_VOL_MINALLOCATION = 0x20 + ATTR_VOL_MOUNTEDDEVICE = 0x8000 + ATTR_VOL_MOUNTFLAGS = 0x4000 + ATTR_VOL_MOUNTPOINT = 0x1000 + ATTR_VOL_NAME = 0x2000 + ATTR_VOL_OBJCOUNT = 0x100 + ATTR_VOL_QUOTA_SIZE = 0x10000000 + ATTR_VOL_RESERVED_SIZE = 0x20000000 + ATTR_VOL_SETMASK = 0x80002000 + ATTR_VOL_SIGNATURE = 0x2 + ATTR_VOL_SIZE = 0x4 + ATTR_VOL_SPACEAVAIL = 0x10 + ATTR_VOL_SPACEFREE = 0x8 + ATTR_VOL_UUID = 0x40000 + ATTR_VOL_VALIDMASK = 0xf007ffff B0 = 0x0 B110 = 0x6e B115200 = 0x1c200 @@ -138,9 +219,26 @@ const ( BPF_W = 0x0 BPF_X = 0x8 BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x8000 + BSDLY = 0x8000 CFLUSH = 0xf CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_MONOTONIC_RAW_APPROX = 0x5 + CLOCK_PROCESS_CPUTIME_ID = 0xc + CLOCK_REALTIME = 0x0 + CLOCK_THREAD_CPUTIME_ID = 0x10 + CLOCK_UPTIME_RAW = 0x8 + CLOCK_UPTIME_RAW_APPROX = 0x9 + CR0 = 0x0 + CR1 = 0x1000 + CR2 = 0x2000 + CR3 = 0x3000 + CRDLY = 0x3000 CREAD = 0x800 + CRTSCTS = 0x30000 CS5 = 0x0 CS6 = 0x100 CS7 = 0x200 @@ -151,6 +249,8 @@ const ( CSTOP = 0x13 CSTOPB = 0x400 CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 CTL_MAXNAME = 0xc CTL_NET = 0x4 DLT_A429 = 0xb8 @@ -332,13 +432,14 @@ const ( ECHONL = 0x10 ECHOPRT = 0x20 EVFILT_AIO = -0x3 + EVFILT_EXCEPT = -0xf EVFILT_FS = -0x9 EVFILT_MACHPORT = -0x8 EVFILT_PROC = -0x5 EVFILT_READ = -0x1 EVFILT_SIGNAL = -0x6 - EVFILT_SYSCOUNT = 0xe - EVFILT_THREADMARKER = 0xe + EVFILT_SYSCOUNT = 0xf + EVFILT_THREADMARKER = 0xf EVFILT_TIMER = -0x7 EVFILT_USER = -0xa EVFILT_VM = -0xc @@ -349,6 +450,7 @@ const ( EV_DELETE = 0x2 EV_DISABLE = 0x8 EV_DISPATCH = 0x80 + EV_DISPATCH2 = 0x180 EV_ENABLE = 0x4 EV_EOF = 0x8000 EV_ERROR = 0x4000 @@ -359,16 +461,30 @@ const ( EV_POLL = 0x1000 EV_RECEIPT = 0x40 EV_SYSFLAGS = 0xf000 + EV_UDATA_SPECIFIC = 0x100 + EV_VANISHED = 0x200 EXTA = 0x4b00 EXTB = 0x9600 EXTPROC = 0x800 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x4000 + FFDLY = 0x4000 FLUSHO = 0x800000 + FSOPT_ATTR_CMN_EXTENDED = 0x20 + FSOPT_NOFOLLOW = 0x1 + FSOPT_NOINMEMUPDATE = 0x2 + FSOPT_PACK_INVAL_ATTRS = 0x8 + FSOPT_REPORT_FULLSIZE = 0x4 F_ADDFILESIGS = 0x3d + F_ADDFILESIGS_FOR_DYLD_SIM = 0x53 + F_ADDFILESIGS_RETURN = 0x61 F_ADDSIGS = 0x3b F_ALLOCATEALL = 0x4 F_ALLOCATECONTIG = 0x2 + F_BARRIERFSYNC = 0x55 + F_CHECK_LV = 0x62 F_CHKCLEAN = 0x29 F_DUPFD = 0x0 F_DUPFD_CLOEXEC = 0x43 @@ -396,6 +512,7 @@ const ( F_PATHPKG_CHECK = 0x34 F_PEOFPOSMODE = 0x3 F_PREALLOCATE = 0x2a + F_PUNCHHOLE = 0x63 F_RDADVISE = 0x2c F_RDAHEAD = 0x2d F_RDLCK = 0x1 @@ -412,10 +529,12 @@ const ( F_SINGLE_WRITER = 0x4c F_THAW_FS = 0x36 F_TRANSCODEKEY = 0x4b + F_TRIM_ACTIVE_FILE = 0x64 F_UNLCK = 0x2 F_VOLPOSMODE = 0x4 F_WRLCK = 0x3 HUPCL = 0x4000 + HW_MACHINE = 0x1 ICANON = 0x100 ICMP6_FILTER = 0x12 ICRNL = 0x100 @@ -652,6 +771,7 @@ const ( IPV6_FAITH = 0x1d IPV6_FLOWINFO_MASK = 0xffffff0f IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FLOW_ECN_MASK = 0x300 IPV6_FRAGTTL = 0x3c IPV6_FW_ADD = 0x1e IPV6_FW_DEL = 0x1f @@ -742,6 +862,7 @@ const ( IP_RECVOPTS = 0x5 IP_RECVPKTINFO = 0x1a IP_RECVRETOPTS = 0x6 + IP_RECVTOS = 0x1b IP_RECVTTL = 0x18 IP_RETOPTS = 0x8 IP_RF = 0x8000 @@ -760,6 +881,10 @@ const ( IXANY = 0x800 IXOFF = 0x400 IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 LOCK_EX = 0x2 LOCK_NB = 0x4 LOCK_SH = 0x1 @@ -770,11 +895,13 @@ const ( MADV_FREE_REUSABLE = 0x7 MADV_FREE_REUSE = 0x8 MADV_NORMAL = 0x0 + MADV_PAGEOUT = 0xa MADV_RANDOM = 0x1 MADV_SEQUENTIAL = 0x2 MADV_WILLNEED = 0x3 MADV_ZERO_WIRED_PAGES = 0x6 MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 MAP_COPY = 0x2 MAP_FILE = 0x0 MAP_FIXED = 0x10 @@ -786,9 +913,43 @@ const ( MAP_PRIVATE = 0x2 MAP_RENAME = 0x20 MAP_RESERVED0080 = 0x80 + MAP_RESILIENT_CODESIGN = 0x2000 + MAP_RESILIENT_MEDIA = 0x4000 MAP_SHARED = 0x1 MCL_CURRENT = 0x1 MCL_FUTURE = 0x2 + MNT_ASYNC = 0x40 + MNT_AUTOMOUNTED = 0x400000 + MNT_CMDFLAGS = 0xf0000 + MNT_CPROTECT = 0x80 + MNT_DEFWRITE = 0x2000000 + MNT_DONTBROWSE = 0x100000 + MNT_DOVOLFS = 0x8000 + MNT_DWAIT = 0x4 + MNT_EXPORTED = 0x100 + MNT_FORCE = 0x80000 + MNT_IGNORE_OWNERSHIP = 0x200000 + MNT_JOURNALED = 0x800000 + MNT_LOCAL = 0x1000 + MNT_MULTILABEL = 0x4000000 + MNT_NOATIME = 0x10000000 + MNT_NOBLOCK = 0x20000 + MNT_NODEV = 0x10 + MNT_NOEXEC = 0x4 + MNT_NOSUID = 0x8 + MNT_NOUSERXATTR = 0x1000000 + MNT_NOWAIT = 0x2 + MNT_QUARANTINE = 0x400 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UNKNOWNPERMISSIONS = 0x200000 + MNT_UPDATE = 0x10000 + MNT_VISFLAGMASK = 0x17f0f5ff + MNT_WAIT = 0x1 MSG_CTRUNC = 0x20 MSG_DONTROUTE = 0x4 MSG_DONTWAIT = 0x80 @@ -819,7 +980,13 @@ const ( NET_RT_MAXID = 0xa NET_RT_STAT = 0x4 NET_RT_TRASH = 0x5 + NL0 = 0x0 + NL1 = 0x100 + NL2 = 0x200 + NL3 = 0x300 + NLDLY = 0x300 NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 NOTE_ABSOLUTE = 0x8 NOTE_ATTRIB = 0x8 NOTE_BACKGROUND = 0x40 @@ -843,11 +1010,14 @@ const ( NOTE_FFNOP = 0x0 NOTE_FFOR = 0x80000000 NOTE_FORK = 0x40000000 + NOTE_FUNLOCK = 0x100 NOTE_LEEWAY = 0x10 NOTE_LINK = 0x10 NOTE_LOWAT = 0x1 + NOTE_MACH_CONTINUOUS_TIME = 0x80 NOTE_NONE = 0x80 NOTE_NSECONDS = 0x4 + NOTE_OOB = 0x2 NOTE_PCTRLMASK = -0x100000 NOTE_PDATAMASK = 0xfffff NOTE_REAP = 0x10000000 @@ -872,6 +1042,7 @@ const ( ONOCR = 0x20 ONOEOT = 0x8 OPOST = 0x1 + OXTABS = 0x4 O_ACCMODE = 0x3 O_ALERT = 0x20000000 O_APPEND = 0x8 @@ -880,6 +1051,7 @@ const ( O_CREAT = 0x200 O_DIRECTORY = 0x100000 O_DP_GETRAWENCRYPTED = 0x1 + O_DP_GETRAWUNENCRYPTED = 0x2 O_DSYNC = 0x400000 O_EVTONLY = 0x8000 O_EXCL = 0x800 @@ -932,7 +1104,10 @@ const ( RLIMIT_CPU_USAGE_MONITOR = 0x2 RLIMIT_DATA = 0x2 RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 RLIMIT_STACK = 0x3 RLIM_INFINITY = 0x7fffffffffffffff RTAX_AUTHOR = 0x6 @@ -1102,6 +1277,8 @@ const ( SO_LABEL = 0x1010 SO_LINGER = 0x80 SO_LINGER_SEC = 0x1080 + SO_NETSVC_MARKING_LEVEL = 0x1119 + SO_NET_SERVICE_TYPE = 0x1116 SO_NKE = 0x1021 SO_NOADDRERR = 0x1023 SO_NOSIGPIPE = 0x1022 @@ -1157,11 +1334,22 @@ const ( S_IXGRP = 0x8 S_IXOTH = 0x1 S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x400 + TAB2 = 0x800 + TAB3 = 0x4 + TABDLY = 0xc04 TCIFLUSH = 0x1 + TCIOFF = 0x3 TCIOFLUSH = 0x3 + TCION = 0x4 TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 TCP_CONNECTIONTIMEOUT = 0x20 + TCP_CONNECTION_INFO = 0x106 TCP_ENABLE_ECN = 0x104 + TCP_FASTOPEN = 0x105 TCP_KEEPALIVE = 0x10 TCP_KEEPCNT = 0x102 TCP_KEEPINTVL = 0x101 @@ -1261,6 +1449,11 @@ const ( VKILL = 0x5 VLNEXT = 0xe VMIN = 0x10 + VM_LOADAVG = 0x2 + VM_MACHFACTOR = 0x4 + VM_MAXID = 0x6 + VM_METER = 0x1 + VM_SWAPUSAGE = 0x5 VQUIT = 0x9 VREPRINT = 0x6 VSTART = 0xc diff --git a/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go index 8f40598..474441b 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go @@ -168,6 +168,8 @@ const ( CSTOP = 0x13 CSTOPB = 0x400 CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 CTL_MAXNAME = 0xc CTL_NET = 0x4 DLT_A429 = 0xb8 @@ -353,6 +355,7 @@ const ( F_UNLCK = 0x2 F_WRLCK = 0x3 HUPCL = 0x4000 + HW_MACHINE = 0x1 ICANON = 0x100 ICMP6_FILTER = 0x12 ICRNL = 0x100 @@ -835,6 +838,10 @@ const ( IXANY = 0x800 IXOFF = 0x400 IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 LOCK_EX = 0x2 LOCK_NB = 0x4 LOCK_SH = 0x1 @@ -973,7 +980,10 @@ const ( RLIMIT_CPU = 0x0 RLIMIT_DATA = 0x2 RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 RLIMIT_STACK = 0x3 RLIM_INFINITY = 0x7fffffffffffffff RTAX_AUTHOR = 0x6 diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go index 7b95751..a8b0587 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go +++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go @@ -1,5 +1,5 @@ // mkerrors.sh -m32 -// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT +// Code generated by the command above; see README.md. DO NOT EDIT. // +build 386,freebsd @@ -11,1456 +11,1469 @@ package unix import "syscall" const ( - AF_APPLETALK = 0x10 - AF_ARP = 0x23 - AF_ATM = 0x1e - AF_BLUETOOTH = 0x24 - AF_CCITT = 0xa - AF_CHAOS = 0x5 - AF_CNT = 0x15 - AF_COIP = 0x14 - AF_DATAKIT = 0x9 - AF_DECnet = 0xc - AF_DLI = 0xd - AF_E164 = 0x1a - AF_ECMA = 0x8 - AF_HYLINK = 0xf - AF_IEEE80211 = 0x25 - AF_IMPLINK = 0x3 - AF_INET = 0x2 - AF_INET6 = 0x1c - AF_INET6_SDP = 0x2a - AF_INET_SDP = 0x28 - AF_IPX = 0x17 - AF_ISDN = 0x1a - AF_ISO = 0x7 - AF_LAT = 0xe - AF_LINK = 0x12 - AF_LOCAL = 0x1 - AF_MAX = 0x2a - AF_NATM = 0x1d - AF_NETBIOS = 0x6 - AF_NETGRAPH = 0x20 - AF_OSI = 0x7 - AF_PUP = 0x4 - AF_ROUTE = 0x11 - AF_SCLUSTER = 0x22 - AF_SIP = 0x18 - AF_SLOW = 0x21 - AF_SNA = 0xb - AF_UNIX = 0x1 - AF_UNSPEC = 0x0 - AF_VENDOR00 = 0x27 - AF_VENDOR01 = 0x29 - AF_VENDOR02 = 0x2b - AF_VENDOR03 = 0x2d - AF_VENDOR04 = 0x2f - AF_VENDOR05 = 0x31 - AF_VENDOR06 = 0x33 - AF_VENDOR07 = 0x35 - AF_VENDOR08 = 0x37 - AF_VENDOR09 = 0x39 - AF_VENDOR10 = 0x3b - AF_VENDOR11 = 0x3d - AF_VENDOR12 = 0x3f - AF_VENDOR13 = 0x41 - AF_VENDOR14 = 0x43 - AF_VENDOR15 = 0x45 - AF_VENDOR16 = 0x47 - AF_VENDOR17 = 0x49 - AF_VENDOR18 = 0x4b - AF_VENDOR19 = 0x4d - AF_VENDOR20 = 0x4f - AF_VENDOR21 = 0x51 - AF_VENDOR22 = 0x53 - AF_VENDOR23 = 0x55 - AF_VENDOR24 = 0x57 - AF_VENDOR25 = 0x59 - AF_VENDOR26 = 0x5b - AF_VENDOR27 = 0x5d - AF_VENDOR28 = 0x5f - AF_VENDOR29 = 0x61 - AF_VENDOR30 = 0x63 - AF_VENDOR31 = 0x65 - AF_VENDOR32 = 0x67 - AF_VENDOR33 = 0x69 - AF_VENDOR34 = 0x6b - AF_VENDOR35 = 0x6d - AF_VENDOR36 = 0x6f - AF_VENDOR37 = 0x71 - AF_VENDOR38 = 0x73 - AF_VENDOR39 = 0x75 - AF_VENDOR40 = 0x77 - AF_VENDOR41 = 0x79 - AF_VENDOR42 = 0x7b - AF_VENDOR43 = 0x7d - AF_VENDOR44 = 0x7f - AF_VENDOR45 = 0x81 - AF_VENDOR46 = 0x83 - AF_VENDOR47 = 0x85 - B0 = 0x0 - B110 = 0x6e - B115200 = 0x1c200 - B1200 = 0x4b0 - B134 = 0x86 - B14400 = 0x3840 - B150 = 0x96 - B1800 = 0x708 - B19200 = 0x4b00 - B200 = 0xc8 - B230400 = 0x38400 - B2400 = 0x960 - B28800 = 0x7080 - B300 = 0x12c - B38400 = 0x9600 - B460800 = 0x70800 - B4800 = 0x12c0 - B50 = 0x32 - B57600 = 0xe100 - B600 = 0x258 - B7200 = 0x1c20 - B75 = 0x4b - B76800 = 0x12c00 - B921600 = 0xe1000 - B9600 = 0x2580 - BIOCFEEDBACK = 0x8004427c - BIOCFLUSH = 0x20004268 - BIOCGBLEN = 0x40044266 - BIOCGDIRECTION = 0x40044276 - BIOCGDLT = 0x4004426a - BIOCGDLTLIST = 0xc0084279 - BIOCGETBUFMODE = 0x4004427d - BIOCGETIF = 0x4020426b - BIOCGETZMAX = 0x4004427f - BIOCGHDRCMPLT = 0x40044274 - BIOCGRSIG = 0x40044272 - BIOCGRTIMEOUT = 0x4008426e - BIOCGSEESENT = 0x40044276 - BIOCGSTATS = 0x4008426f - BIOCGTSTAMP = 0x40044283 - BIOCIMMEDIATE = 0x80044270 - BIOCLOCK = 0x2000427a - BIOCPROMISC = 0x20004269 - BIOCROTZBUF = 0x400c4280 - BIOCSBLEN = 0xc0044266 - BIOCSDIRECTION = 0x80044277 - BIOCSDLT = 0x80044278 - BIOCSETBUFMODE = 0x8004427e - BIOCSETF = 0x80084267 - BIOCSETFNR = 0x80084282 - BIOCSETIF = 0x8020426c - BIOCSETWF = 0x8008427b - BIOCSETZBUF = 0x800c4281 - BIOCSHDRCMPLT = 0x80044275 - BIOCSRSIG = 0x80044273 - BIOCSRTIMEOUT = 0x8008426d - BIOCSSEESENT = 0x80044277 - BIOCSTSTAMP = 0x80044284 - BIOCVERSION = 0x40044271 - BPF_A = 0x10 - BPF_ABS = 0x20 - BPF_ADD = 0x0 - BPF_ALIGNMENT = 0x4 - BPF_ALU = 0x4 - BPF_AND = 0x50 - BPF_B = 0x10 - BPF_BUFMODE_BUFFER = 0x1 - BPF_BUFMODE_ZBUF = 0x2 - BPF_DIV = 0x30 - BPF_H = 0x8 - BPF_IMM = 0x0 - BPF_IND = 0x40 - BPF_JA = 0x0 - BPF_JEQ = 0x10 - BPF_JGE = 0x30 - BPF_JGT = 0x20 - BPF_JMP = 0x5 - BPF_JSET = 0x40 - BPF_K = 0x0 - BPF_LD = 0x0 - BPF_LDX = 0x1 - BPF_LEN = 0x80 - BPF_LSH = 0x60 - BPF_MAJOR_VERSION = 0x1 - BPF_MAXBUFSIZE = 0x80000 - BPF_MAXINSNS = 0x200 - BPF_MEM = 0x60 - BPF_MEMWORDS = 0x10 - BPF_MINBUFSIZE = 0x20 - BPF_MINOR_VERSION = 0x1 - BPF_MISC = 0x7 - BPF_MSH = 0xa0 - BPF_MUL = 0x20 - BPF_NEG = 0x80 - BPF_OR = 0x40 - BPF_RELEASE = 0x30bb6 - BPF_RET = 0x6 - BPF_RSH = 0x70 - BPF_ST = 0x2 - BPF_STX = 0x3 - BPF_SUB = 0x10 - BPF_TAX = 0x0 - BPF_TXA = 0x80 - BPF_T_BINTIME = 0x2 - BPF_T_BINTIME_FAST = 0x102 - BPF_T_BINTIME_MONOTONIC = 0x202 - BPF_T_BINTIME_MONOTONIC_FAST = 0x302 - BPF_T_FAST = 0x100 - BPF_T_FLAG_MASK = 0x300 - BPF_T_FORMAT_MASK = 0x3 - BPF_T_MICROTIME = 0x0 - BPF_T_MICROTIME_FAST = 0x100 - BPF_T_MICROTIME_MONOTONIC = 0x200 - BPF_T_MICROTIME_MONOTONIC_FAST = 0x300 - BPF_T_MONOTONIC = 0x200 - BPF_T_MONOTONIC_FAST = 0x300 - BPF_T_NANOTIME = 0x1 - BPF_T_NANOTIME_FAST = 0x101 - BPF_T_NANOTIME_MONOTONIC = 0x201 - BPF_T_NANOTIME_MONOTONIC_FAST = 0x301 - BPF_T_NONE = 0x3 - BPF_T_NORMAL = 0x0 - BPF_W = 0x0 - BPF_X = 0x8 - BRKINT = 0x2 - CFLUSH = 0xf - CLOCAL = 0x8000 - CLOCK_MONOTONIC = 0x4 - CLOCK_MONOTONIC_FAST = 0xc - CLOCK_MONOTONIC_PRECISE = 0xb - CLOCK_PROCESS_CPUTIME_ID = 0xf - CLOCK_PROF = 0x2 - CLOCK_REALTIME = 0x0 - CLOCK_REALTIME_FAST = 0xa - CLOCK_REALTIME_PRECISE = 0x9 - CLOCK_SECOND = 0xd - CLOCK_THREAD_CPUTIME_ID = 0xe - CLOCK_UPTIME = 0x5 - CLOCK_UPTIME_FAST = 0x8 - CLOCK_UPTIME_PRECISE = 0x7 - CLOCK_VIRTUAL = 0x1 - CREAD = 0x800 - CS5 = 0x0 - CS6 = 0x100 - CS7 = 0x200 - CS8 = 0x300 - CSIZE = 0x300 - CSTART = 0x11 - CSTATUS = 0x14 - CSTOP = 0x13 - CSTOPB = 0x400 - CSUSP = 0x1a - CTL_MAXNAME = 0x18 - CTL_NET = 0x4 - DLT_A429 = 0xb8 - DLT_A653_ICM = 0xb9 - DLT_AIRONET_HEADER = 0x78 - DLT_AOS = 0xde - DLT_APPLE_IP_OVER_IEEE1394 = 0x8a - DLT_ARCNET = 0x7 - DLT_ARCNET_LINUX = 0x81 - DLT_ATM_CLIP = 0x13 - DLT_ATM_RFC1483 = 0xb - DLT_AURORA = 0x7e - DLT_AX25 = 0x3 - DLT_AX25_KISS = 0xca - DLT_BACNET_MS_TP = 0xa5 - DLT_BLUETOOTH_HCI_H4 = 0xbb - DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 - DLT_CAN20B = 0xbe - DLT_CAN_SOCKETCAN = 0xe3 - DLT_CHAOS = 0x5 - DLT_CHDLC = 0x68 - DLT_CISCO_IOS = 0x76 - DLT_C_HDLC = 0x68 - DLT_C_HDLC_WITH_DIR = 0xcd - DLT_DBUS = 0xe7 - DLT_DECT = 0xdd - DLT_DOCSIS = 0x8f - DLT_DVB_CI = 0xeb - DLT_ECONET = 0x73 - DLT_EN10MB = 0x1 - DLT_EN3MB = 0x2 - DLT_ENC = 0x6d - DLT_ERF = 0xc5 - DLT_ERF_ETH = 0xaf - DLT_ERF_POS = 0xb0 - DLT_FC_2 = 0xe0 - DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 - DLT_FDDI = 0xa - DLT_FLEXRAY = 0xd2 - DLT_FRELAY = 0x6b - DLT_FRELAY_WITH_DIR = 0xce - DLT_GCOM_SERIAL = 0xad - DLT_GCOM_T1E1 = 0xac - DLT_GPF_F = 0xab - DLT_GPF_T = 0xaa - DLT_GPRS_LLC = 0xa9 - DLT_GSMTAP_ABIS = 0xda - DLT_GSMTAP_UM = 0xd9 - DLT_HHDLC = 0x79 - DLT_IBM_SN = 0x92 - DLT_IBM_SP = 0x91 - DLT_IEEE802 = 0x6 - DLT_IEEE802_11 = 0x69 - DLT_IEEE802_11_RADIO = 0x7f - DLT_IEEE802_11_RADIO_AVS = 0xa3 - DLT_IEEE802_15_4 = 0xc3 - DLT_IEEE802_15_4_LINUX = 0xbf - DLT_IEEE802_15_4_NOFCS = 0xe6 - DLT_IEEE802_15_4_NONASK_PHY = 0xd7 - DLT_IEEE802_16_MAC_CPS = 0xbc - DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 - DLT_IPFILTER = 0x74 - DLT_IPMB = 0xc7 - DLT_IPMB_LINUX = 0xd1 - DLT_IPNET = 0xe2 - DLT_IPOIB = 0xf2 - DLT_IPV4 = 0xe4 - DLT_IPV6 = 0xe5 - DLT_IP_OVER_FC = 0x7a - DLT_JUNIPER_ATM1 = 0x89 - DLT_JUNIPER_ATM2 = 0x87 - DLT_JUNIPER_ATM_CEMIC = 0xee - DLT_JUNIPER_CHDLC = 0xb5 - DLT_JUNIPER_ES = 0x84 - DLT_JUNIPER_ETHER = 0xb2 - DLT_JUNIPER_FIBRECHANNEL = 0xea - DLT_JUNIPER_FRELAY = 0xb4 - DLT_JUNIPER_GGSN = 0x85 - DLT_JUNIPER_ISM = 0xc2 - DLT_JUNIPER_MFR = 0x86 - DLT_JUNIPER_MLFR = 0x83 - DLT_JUNIPER_MLPPP = 0x82 - DLT_JUNIPER_MONITOR = 0xa4 - DLT_JUNIPER_PIC_PEER = 0xae - DLT_JUNIPER_PPP = 0xb3 - DLT_JUNIPER_PPPOE = 0xa7 - DLT_JUNIPER_PPPOE_ATM = 0xa8 - DLT_JUNIPER_SERVICES = 0x88 - DLT_JUNIPER_SRX_E2E = 0xe9 - DLT_JUNIPER_ST = 0xc8 - DLT_JUNIPER_VP = 0xb7 - DLT_JUNIPER_VS = 0xe8 - DLT_LAPB_WITH_DIR = 0xcf - DLT_LAPD = 0xcb - DLT_LIN = 0xd4 - DLT_LINUX_EVDEV = 0xd8 - DLT_LINUX_IRDA = 0x90 - DLT_LINUX_LAPD = 0xb1 - DLT_LINUX_PPP_WITHDIRECTION = 0xa6 - DLT_LINUX_SLL = 0x71 - DLT_LOOP = 0x6c - DLT_LTALK = 0x72 - DLT_MATCHING_MAX = 0xf6 - DLT_MATCHING_MIN = 0x68 - DLT_MFR = 0xb6 - DLT_MOST = 0xd3 - DLT_MPEG_2_TS = 0xf3 - DLT_MPLS = 0xdb - DLT_MTP2 = 0x8c - DLT_MTP2_WITH_PHDR = 0x8b - DLT_MTP3 = 0x8d - DLT_MUX27010 = 0xec - DLT_NETANALYZER = 0xf0 - DLT_NETANALYZER_TRANSPARENT = 0xf1 - DLT_NFC_LLCP = 0xf5 - DLT_NFLOG = 0xef - DLT_NG40 = 0xf4 - DLT_NULL = 0x0 - DLT_PCI_EXP = 0x7d - DLT_PFLOG = 0x75 - DLT_PFSYNC = 0x79 - DLT_PPI = 0xc0 - DLT_PPP = 0x9 - DLT_PPP_BSDOS = 0x10 - DLT_PPP_ETHER = 0x33 - DLT_PPP_PPPD = 0xa6 - DLT_PPP_SERIAL = 0x32 - DLT_PPP_WITH_DIR = 0xcc - DLT_PPP_WITH_DIRECTION = 0xa6 - DLT_PRISM_HEADER = 0x77 - DLT_PRONET = 0x4 - DLT_RAIF1 = 0xc6 - DLT_RAW = 0xc - DLT_RIO = 0x7c - DLT_SCCP = 0x8e - DLT_SITA = 0xc4 - DLT_SLIP = 0x8 - DLT_SLIP_BSDOS = 0xf - DLT_STANAG_5066_D_PDU = 0xed - DLT_SUNATM = 0x7b - DLT_SYMANTEC_FIREWALL = 0x63 - DLT_TZSP = 0x80 - DLT_USB = 0xba - DLT_USB_LINUX = 0xbd - DLT_USB_LINUX_MMAPPED = 0xdc - DLT_USER0 = 0x93 - DLT_USER1 = 0x94 - DLT_USER10 = 0x9d - DLT_USER11 = 0x9e - DLT_USER12 = 0x9f - DLT_USER13 = 0xa0 - DLT_USER14 = 0xa1 - DLT_USER15 = 0xa2 - DLT_USER2 = 0x95 - DLT_USER3 = 0x96 - DLT_USER4 = 0x97 - DLT_USER5 = 0x98 - DLT_USER6 = 0x99 - DLT_USER7 = 0x9a - DLT_USER8 = 0x9b - DLT_USER9 = 0x9c - DLT_WIHART = 0xdf - DLT_X2E_SERIAL = 0xd5 - DLT_X2E_XORAYA = 0xd6 - DT_BLK = 0x6 - DT_CHR = 0x2 - DT_DIR = 0x4 - DT_FIFO = 0x1 - DT_LNK = 0xa - DT_REG = 0x8 - DT_SOCK = 0xc - DT_UNKNOWN = 0x0 - DT_WHT = 0xe - ECHO = 0x8 - ECHOCTL = 0x40 - ECHOE = 0x2 - ECHOK = 0x4 - ECHOKE = 0x1 - ECHONL = 0x10 - ECHOPRT = 0x20 - EVFILT_AIO = -0x3 - EVFILT_FS = -0x9 - EVFILT_LIO = -0xa - EVFILT_PROC = -0x5 - EVFILT_READ = -0x1 - EVFILT_SIGNAL = -0x6 - EVFILT_SYSCOUNT = 0xb - EVFILT_TIMER = -0x7 - EVFILT_USER = -0xb - EVFILT_VNODE = -0x4 - EVFILT_WRITE = -0x2 - EV_ADD = 0x1 - EV_CLEAR = 0x20 - EV_DELETE = 0x2 - EV_DISABLE = 0x8 - EV_DISPATCH = 0x80 - EV_DROP = 0x1000 - EV_ENABLE = 0x4 - EV_EOF = 0x8000 - EV_ERROR = 0x4000 - EV_FLAG1 = 0x2000 - EV_ONESHOT = 0x10 - EV_RECEIPT = 0x40 - EV_SYSFLAGS = 0xf000 - EXTA = 0x4b00 - EXTATTR_NAMESPACE_EMPTY = 0x0 - EXTATTR_NAMESPACE_SYSTEM = 0x2 - EXTATTR_NAMESPACE_USER = 0x1 - EXTB = 0x9600 - EXTPROC = 0x800 - FD_CLOEXEC = 0x1 - FD_SETSIZE = 0x400 - FLUSHO = 0x800000 - F_CANCEL = 0x5 - F_DUP2FD = 0xa - F_DUP2FD_CLOEXEC = 0x12 - F_DUPFD = 0x0 - F_DUPFD_CLOEXEC = 0x11 - F_GETFD = 0x1 - F_GETFL = 0x3 - F_GETLK = 0xb - F_GETOWN = 0x5 - F_OGETLK = 0x7 - F_OK = 0x0 - F_OSETLK = 0x8 - F_OSETLKW = 0x9 - F_RDAHEAD = 0x10 - F_RDLCK = 0x1 - F_READAHEAD = 0xf - F_SETFD = 0x2 - F_SETFL = 0x4 - F_SETLK = 0xc - F_SETLKW = 0xd - F_SETLK_REMOTE = 0xe - F_SETOWN = 0x6 - F_UNLCK = 0x2 - F_UNLCKSYS = 0x4 - F_WRLCK = 0x3 - HUPCL = 0x4000 - ICANON = 0x100 - ICMP6_FILTER = 0x12 - ICRNL = 0x100 - IEXTEN = 0x400 - IFAN_ARRIVAL = 0x0 - IFAN_DEPARTURE = 0x1 - IFF_ALLMULTI = 0x200 - IFF_ALTPHYS = 0x4000 - IFF_BROADCAST = 0x2 - IFF_CANTCHANGE = 0x218f72 - IFF_CANTCONFIG = 0x10000 - IFF_DEBUG = 0x4 - IFF_DRV_OACTIVE = 0x400 - IFF_DRV_RUNNING = 0x40 - IFF_DYING = 0x200000 - IFF_LINK0 = 0x1000 - IFF_LINK1 = 0x2000 - IFF_LINK2 = 0x4000 - IFF_LOOPBACK = 0x8 - IFF_MONITOR = 0x40000 - IFF_MULTICAST = 0x8000 - IFF_NOARP = 0x80 - IFF_OACTIVE = 0x400 - IFF_POINTOPOINT = 0x10 - IFF_PPROMISC = 0x20000 - IFF_PROMISC = 0x100 - IFF_RENAMING = 0x400000 - IFF_RUNNING = 0x40 - IFF_SIMPLEX = 0x800 - IFF_SMART = 0x20 - IFF_STATICARP = 0x80000 - IFF_UP = 0x1 - IFNAMSIZ = 0x10 - IFT_1822 = 0x2 - IFT_A12MPPSWITCH = 0x82 - IFT_AAL2 = 0xbb - IFT_AAL5 = 0x31 - IFT_ADSL = 0x5e - IFT_AFLANE8023 = 0x3b - IFT_AFLANE8025 = 0x3c - IFT_ARAP = 0x58 - IFT_ARCNET = 0x23 - IFT_ARCNETPLUS = 0x24 - IFT_ASYNC = 0x54 - IFT_ATM = 0x25 - IFT_ATMDXI = 0x69 - IFT_ATMFUNI = 0x6a - IFT_ATMIMA = 0x6b - IFT_ATMLOGICAL = 0x50 - IFT_ATMRADIO = 0xbd - IFT_ATMSUBINTERFACE = 0x86 - IFT_ATMVCIENDPT = 0xc2 - IFT_ATMVIRTUAL = 0x95 - IFT_BGPPOLICYACCOUNTING = 0xa2 - IFT_BRIDGE = 0xd1 - IFT_BSC = 0x53 - IFT_CARP = 0xf8 - IFT_CCTEMUL = 0x3d - IFT_CEPT = 0x13 - IFT_CES = 0x85 - IFT_CHANNEL = 0x46 - IFT_CNR = 0x55 - IFT_COFFEE = 0x84 - IFT_COMPOSITELINK = 0x9b - IFT_DCN = 0x8d - IFT_DIGITALPOWERLINE = 0x8a - IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba - IFT_DLSW = 0x4a - IFT_DOCSCABLEDOWNSTREAM = 0x80 - IFT_DOCSCABLEMACLAYER = 0x7f - IFT_DOCSCABLEUPSTREAM = 0x81 - IFT_DS0 = 0x51 - IFT_DS0BUNDLE = 0x52 - IFT_DS1FDL = 0xaa - IFT_DS3 = 0x1e - IFT_DTM = 0x8c - IFT_DVBASILN = 0xac - IFT_DVBASIOUT = 0xad - IFT_DVBRCCDOWNSTREAM = 0x93 - IFT_DVBRCCMACLAYER = 0x92 - IFT_DVBRCCUPSTREAM = 0x94 - IFT_ENC = 0xf4 - IFT_EON = 0x19 - IFT_EPLRS = 0x57 - IFT_ESCON = 0x49 - IFT_ETHER = 0x6 - IFT_FAITH = 0xf2 - IFT_FAST = 0x7d - IFT_FASTETHER = 0x3e - IFT_FASTETHERFX = 0x45 - IFT_FDDI = 0xf - IFT_FIBRECHANNEL = 0x38 - IFT_FRAMERELAYINTERCONNECT = 0x3a - IFT_FRAMERELAYMPI = 0x5c - IFT_FRDLCIENDPT = 0xc1 - IFT_FRELAY = 0x20 - IFT_FRELAYDCE = 0x2c - IFT_FRF16MFRBUNDLE = 0xa3 - IFT_FRFORWARD = 0x9e - IFT_G703AT2MB = 0x43 - IFT_G703AT64K = 0x42 - IFT_GIF = 0xf0 - IFT_GIGABITETHERNET = 0x75 - IFT_GR303IDT = 0xb2 - IFT_GR303RDT = 0xb1 - IFT_H323GATEKEEPER = 0xa4 - IFT_H323PROXY = 0xa5 - IFT_HDH1822 = 0x3 - IFT_HDLC = 0x76 - IFT_HDSL2 = 0xa8 - IFT_HIPERLAN2 = 0xb7 - IFT_HIPPI = 0x2f - IFT_HIPPIINTERFACE = 0x39 - IFT_HOSTPAD = 0x5a - IFT_HSSI = 0x2e - IFT_HY = 0xe - IFT_IBM370PARCHAN = 0x48 - IFT_IDSL = 0x9a - IFT_IEEE1394 = 0x90 - IFT_IEEE80211 = 0x47 - IFT_IEEE80212 = 0x37 - IFT_IEEE8023ADLAG = 0xa1 - IFT_IFGSN = 0x91 - IFT_IMT = 0xbe - IFT_INFINIBAND = 0xc7 - IFT_INTERLEAVE = 0x7c - IFT_IP = 0x7e - IFT_IPFORWARD = 0x8e - IFT_IPOVERATM = 0x72 - IFT_IPOVERCDLC = 0x6d - IFT_IPOVERCLAW = 0x6e - IFT_IPSWITCH = 0x4e - IFT_IPXIP = 0xf9 - IFT_ISDN = 0x3f - IFT_ISDNBASIC = 0x14 - IFT_ISDNPRIMARY = 0x15 - IFT_ISDNS = 0x4b - IFT_ISDNU = 0x4c - IFT_ISO88022LLC = 0x29 - IFT_ISO88023 = 0x7 - IFT_ISO88024 = 0x8 - IFT_ISO88025 = 0x9 - IFT_ISO88025CRFPINT = 0x62 - IFT_ISO88025DTR = 0x56 - IFT_ISO88025FIBER = 0x73 - IFT_ISO88026 = 0xa - IFT_ISUP = 0xb3 - IFT_L2VLAN = 0x87 - IFT_L3IPVLAN = 0x88 - IFT_L3IPXVLAN = 0x89 - IFT_LAPB = 0x10 - IFT_LAPD = 0x4d - IFT_LAPF = 0x77 - IFT_LOCALTALK = 0x2a - IFT_LOOP = 0x18 - IFT_MEDIAMAILOVERIP = 0x8b - IFT_MFSIGLINK = 0xa7 - IFT_MIOX25 = 0x26 - IFT_MODEM = 0x30 - IFT_MPC = 0x71 - IFT_MPLS = 0xa6 - IFT_MPLSTUNNEL = 0x96 - IFT_MSDSL = 0x8f - IFT_MVL = 0xbf - IFT_MYRINET = 0x63 - IFT_NFAS = 0xaf - IFT_NSIP = 0x1b - IFT_OPTICALCHANNEL = 0xc3 - IFT_OPTICALTRANSPORT = 0xc4 - IFT_OTHER = 0x1 - IFT_P10 = 0xc - IFT_P80 = 0xd - IFT_PARA = 0x22 - IFT_PFLOG = 0xf6 - IFT_PFSYNC = 0xf7 - IFT_PLC = 0xae - IFT_POS = 0xab - IFT_PPP = 0x17 - IFT_PPPMULTILINKBUNDLE = 0x6c - IFT_PROPBWAP2MP = 0xb8 - IFT_PROPCNLS = 0x59 - IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 - IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 - IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 - IFT_PROPMUX = 0x36 - IFT_PROPVIRTUAL = 0x35 - IFT_PROPWIRELESSP2P = 0x9d - IFT_PTPSERIAL = 0x16 - IFT_PVC = 0xf1 - IFT_QLLC = 0x44 - IFT_RADIOMAC = 0xbc - IFT_RADSL = 0x5f - IFT_REACHDSL = 0xc0 - IFT_RFC1483 = 0x9f - IFT_RS232 = 0x21 - IFT_RSRB = 0x4f - IFT_SDLC = 0x11 - IFT_SDSL = 0x60 - IFT_SHDSL = 0xa9 - IFT_SIP = 0x1f - IFT_SLIP = 0x1c - IFT_SMDSDXI = 0x2b - IFT_SMDSICIP = 0x34 - IFT_SONET = 0x27 - IFT_SONETOVERHEADCHANNEL = 0xb9 - IFT_SONETPATH = 0x32 - IFT_SONETVT = 0x33 - IFT_SRP = 0x97 - IFT_SS7SIGLINK = 0x9c - IFT_STACKTOSTACK = 0x6f - IFT_STARLAN = 0xb - IFT_STF = 0xd7 - IFT_T1 = 0x12 - IFT_TDLC = 0x74 - IFT_TERMPAD = 0x5b - IFT_TR008 = 0xb0 - IFT_TRANSPHDLC = 0x7b - IFT_TUNNEL = 0x83 - IFT_ULTRA = 0x1d - IFT_USB = 0xa0 - IFT_V11 = 0x40 - IFT_V35 = 0x2d - IFT_V36 = 0x41 - IFT_V37 = 0x78 - IFT_VDSL = 0x61 - IFT_VIRTUALIPADDRESS = 0x70 - IFT_VOICEEM = 0x64 - IFT_VOICEENCAP = 0x67 - IFT_VOICEFXO = 0x65 - IFT_VOICEFXS = 0x66 - IFT_VOICEOVERATM = 0x98 - IFT_VOICEOVERFRAMERELAY = 0x99 - IFT_VOICEOVERIP = 0x68 - IFT_X213 = 0x5d - IFT_X25 = 0x5 - IFT_X25DDN = 0x4 - IFT_X25HUNTGROUP = 0x7a - IFT_X25MLP = 0x79 - IFT_X25PLE = 0x28 - IFT_XETHER = 0x1a - IGNBRK = 0x1 - IGNCR = 0x80 - IGNPAR = 0x4 - IMAXBEL = 0x2000 - INLCR = 0x40 - INPCK = 0x10 - IN_CLASSA_HOST = 0xffffff - IN_CLASSA_MAX = 0x80 - IN_CLASSA_NET = 0xff000000 - IN_CLASSA_NSHIFT = 0x18 - IN_CLASSB_HOST = 0xffff - IN_CLASSB_MAX = 0x10000 - IN_CLASSB_NET = 0xffff0000 - IN_CLASSB_NSHIFT = 0x10 - IN_CLASSC_HOST = 0xff - IN_CLASSC_NET = 0xffffff00 - IN_CLASSC_NSHIFT = 0x8 - IN_CLASSD_HOST = 0xfffffff - IN_CLASSD_NET = 0xf0000000 - IN_CLASSD_NSHIFT = 0x1c - IN_LOOPBACKNET = 0x7f - IN_RFC3021_MASK = 0xfffffffe - IPPROTO_3PC = 0x22 - IPPROTO_ADFS = 0x44 - IPPROTO_AH = 0x33 - IPPROTO_AHIP = 0x3d - IPPROTO_APES = 0x63 - IPPROTO_ARGUS = 0xd - IPPROTO_AX25 = 0x5d - IPPROTO_BHA = 0x31 - IPPROTO_BLT = 0x1e - IPPROTO_BRSATMON = 0x4c - IPPROTO_CARP = 0x70 - IPPROTO_CFTP = 0x3e - IPPROTO_CHAOS = 0x10 - IPPROTO_CMTP = 0x26 - IPPROTO_CPHB = 0x49 - IPPROTO_CPNX = 0x48 - IPPROTO_DDP = 0x25 - IPPROTO_DGP = 0x56 - IPPROTO_DIVERT = 0x102 - IPPROTO_DONE = 0x101 - IPPROTO_DSTOPTS = 0x3c - IPPROTO_EGP = 0x8 - IPPROTO_EMCON = 0xe - IPPROTO_ENCAP = 0x62 - IPPROTO_EON = 0x50 - IPPROTO_ESP = 0x32 - IPPROTO_ETHERIP = 0x61 - IPPROTO_FRAGMENT = 0x2c - IPPROTO_GGP = 0x3 - IPPROTO_GMTP = 0x64 - IPPROTO_GRE = 0x2f - IPPROTO_HELLO = 0x3f - IPPROTO_HIP = 0x8b - IPPROTO_HMP = 0x14 - IPPROTO_HOPOPTS = 0x0 - IPPROTO_ICMP = 0x1 - IPPROTO_ICMPV6 = 0x3a - IPPROTO_IDP = 0x16 - IPPROTO_IDPR = 0x23 - IPPROTO_IDRP = 0x2d - IPPROTO_IGMP = 0x2 - IPPROTO_IGP = 0x55 - IPPROTO_IGRP = 0x58 - IPPROTO_IL = 0x28 - IPPROTO_INLSP = 0x34 - IPPROTO_INP = 0x20 - IPPROTO_IP = 0x0 - IPPROTO_IPCOMP = 0x6c - IPPROTO_IPCV = 0x47 - IPPROTO_IPEIP = 0x5e - IPPROTO_IPIP = 0x4 - IPPROTO_IPPC = 0x43 - IPPROTO_IPV4 = 0x4 - IPPROTO_IPV6 = 0x29 - IPPROTO_IRTP = 0x1c - IPPROTO_KRYPTOLAN = 0x41 - IPPROTO_LARP = 0x5b - IPPROTO_LEAF1 = 0x19 - IPPROTO_LEAF2 = 0x1a - IPPROTO_MAX = 0x100 - IPPROTO_MAXID = 0x34 - IPPROTO_MEAS = 0x13 - IPPROTO_MH = 0x87 - IPPROTO_MHRP = 0x30 - IPPROTO_MICP = 0x5f - IPPROTO_MOBILE = 0x37 - IPPROTO_MPLS = 0x89 - IPPROTO_MTP = 0x5c - IPPROTO_MUX = 0x12 - IPPROTO_ND = 0x4d - IPPROTO_NHRP = 0x36 - IPPROTO_NONE = 0x3b - IPPROTO_NSP = 0x1f - IPPROTO_NVPII = 0xb - IPPROTO_OLD_DIVERT = 0xfe - IPPROTO_OSPFIGP = 0x59 - IPPROTO_PFSYNC = 0xf0 - IPPROTO_PGM = 0x71 - IPPROTO_PIGP = 0x9 - IPPROTO_PIM = 0x67 - IPPROTO_PRM = 0x15 - IPPROTO_PUP = 0xc - IPPROTO_PVP = 0x4b - IPPROTO_RAW = 0xff - IPPROTO_RCCMON = 0xa - IPPROTO_RDP = 0x1b - IPPROTO_RESERVED_253 = 0xfd - IPPROTO_RESERVED_254 = 0xfe - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e - IPPROTO_RVD = 0x42 - IPPROTO_SATEXPAK = 0x40 - IPPROTO_SATMON = 0x45 - IPPROTO_SCCSP = 0x60 - IPPROTO_SCTP = 0x84 - IPPROTO_SDRP = 0x2a - IPPROTO_SEND = 0x103 - IPPROTO_SEP = 0x21 - IPPROTO_SHIM6 = 0x8c - IPPROTO_SKIP = 0x39 - IPPROTO_SPACER = 0x7fff - IPPROTO_SRPC = 0x5a - IPPROTO_ST = 0x7 - IPPROTO_SVMTP = 0x52 - IPPROTO_SWIPE = 0x35 - IPPROTO_TCF = 0x57 - IPPROTO_TCP = 0x6 - IPPROTO_TLSP = 0x38 - IPPROTO_TP = 0x1d - IPPROTO_TPXX = 0x27 - IPPROTO_TRUNK1 = 0x17 - IPPROTO_TRUNK2 = 0x18 - IPPROTO_TTP = 0x54 - IPPROTO_UDP = 0x11 - IPPROTO_UDPLITE = 0x88 - IPPROTO_VINES = 0x53 - IPPROTO_VISA = 0x46 - IPPROTO_VMTP = 0x51 - IPPROTO_WBEXPAK = 0x4f - IPPROTO_WBMON = 0x4e - IPPROTO_WSN = 0x4a - IPPROTO_XNET = 0xf - IPPROTO_XTP = 0x24 - IPV6_AUTOFLOWLABEL = 0x3b - IPV6_BINDANY = 0x40 - IPV6_BINDV6ONLY = 0x1b - IPV6_CHECKSUM = 0x1a - IPV6_DEFAULT_MULTICAST_HOPS = 0x1 - IPV6_DEFAULT_MULTICAST_LOOP = 0x1 - IPV6_DEFHLIM = 0x40 - IPV6_DONTFRAG = 0x3e - IPV6_DSTOPTS = 0x32 - IPV6_FAITH = 0x1d - IPV6_FLOWINFO_MASK = 0xffffff0f - IPV6_FLOWLABEL_MASK = 0xffff0f00 - IPV6_FRAGTTL = 0x78 - IPV6_FW_ADD = 0x1e - IPV6_FW_DEL = 0x1f - IPV6_FW_FLUSH = 0x20 - IPV6_FW_GET = 0x22 - IPV6_FW_ZERO = 0x21 - IPV6_HLIMDEC = 0x1 - IPV6_HOPLIMIT = 0x2f - IPV6_HOPOPTS = 0x31 - IPV6_IPSEC_POLICY = 0x1c - IPV6_JOIN_GROUP = 0xc - IPV6_LEAVE_GROUP = 0xd - IPV6_MAXHLIM = 0xff - IPV6_MAXOPTHDR = 0x800 - IPV6_MAXPACKET = 0xffff - IPV6_MAX_GROUP_SRC_FILTER = 0x200 - IPV6_MAX_MEMBERSHIPS = 0xfff - IPV6_MAX_SOCK_SRC_FILTER = 0x80 - IPV6_MIN_MEMBERSHIPS = 0x1f - IPV6_MMTU = 0x500 - IPV6_MSFILTER = 0x4a - IPV6_MULTICAST_HOPS = 0xa - IPV6_MULTICAST_IF = 0x9 - IPV6_MULTICAST_LOOP = 0xb - IPV6_NEXTHOP = 0x30 - IPV6_PATHMTU = 0x2c - IPV6_PKTINFO = 0x2e - IPV6_PORTRANGE = 0xe - IPV6_PORTRANGE_DEFAULT = 0x0 - IPV6_PORTRANGE_HIGH = 0x1 - IPV6_PORTRANGE_LOW = 0x2 - IPV6_PREFER_TEMPADDR = 0x3f - IPV6_RECVDSTOPTS = 0x28 - IPV6_RECVHOPLIMIT = 0x25 - IPV6_RECVHOPOPTS = 0x27 - IPV6_RECVPATHMTU = 0x2b - IPV6_RECVPKTINFO = 0x24 - IPV6_RECVRTHDR = 0x26 - IPV6_RECVTCLASS = 0x39 - IPV6_RTHDR = 0x33 - IPV6_RTHDRDSTOPTS = 0x23 - IPV6_RTHDR_LOOSE = 0x0 - IPV6_RTHDR_STRICT = 0x1 - IPV6_RTHDR_TYPE_0 = 0x0 - IPV6_SOCKOPT_RESERVED1 = 0x3 - IPV6_TCLASS = 0x3d - IPV6_UNICAST_HOPS = 0x4 - IPV6_USE_MIN_MTU = 0x2a - IPV6_V6ONLY = 0x1b - IPV6_VERSION = 0x60 - IPV6_VERSION_MASK = 0xf0 - IP_ADD_MEMBERSHIP = 0xc - IP_ADD_SOURCE_MEMBERSHIP = 0x46 - IP_BINDANY = 0x18 - IP_BLOCK_SOURCE = 0x48 - IP_DEFAULT_MULTICAST_LOOP = 0x1 - IP_DEFAULT_MULTICAST_TTL = 0x1 - IP_DF = 0x4000 - IP_DONTFRAG = 0x43 - IP_DROP_MEMBERSHIP = 0xd - IP_DROP_SOURCE_MEMBERSHIP = 0x47 - IP_DUMMYNET3 = 0x31 - IP_DUMMYNET_CONFIGURE = 0x3c - IP_DUMMYNET_DEL = 0x3d - IP_DUMMYNET_FLUSH = 0x3e - IP_DUMMYNET_GET = 0x40 - IP_FAITH = 0x16 - IP_FW3 = 0x30 - IP_FW_ADD = 0x32 - IP_FW_DEL = 0x33 - IP_FW_FLUSH = 0x34 - IP_FW_GET = 0x36 - IP_FW_NAT_CFG = 0x38 - IP_FW_NAT_DEL = 0x39 - IP_FW_NAT_GET_CONFIG = 0x3a - IP_FW_NAT_GET_LOG = 0x3b - IP_FW_RESETLOG = 0x37 - IP_FW_TABLE_ADD = 0x28 - IP_FW_TABLE_DEL = 0x29 - IP_FW_TABLE_FLUSH = 0x2a - IP_FW_TABLE_GETSIZE = 0x2b - IP_FW_TABLE_LIST = 0x2c - IP_FW_ZERO = 0x35 - IP_HDRINCL = 0x2 - IP_IPSEC_POLICY = 0x15 - IP_MAXPACKET = 0xffff - IP_MAX_GROUP_SRC_FILTER = 0x200 - IP_MAX_MEMBERSHIPS = 0xfff - IP_MAX_SOCK_MUTE_FILTER = 0x80 - IP_MAX_SOCK_SRC_FILTER = 0x80 - IP_MAX_SOURCE_FILTER = 0x400 - IP_MF = 0x2000 - IP_MINTTL = 0x42 - IP_MIN_MEMBERSHIPS = 0x1f - IP_MSFILTER = 0x4a - IP_MSS = 0x240 - IP_MULTICAST_IF = 0x9 - IP_MULTICAST_LOOP = 0xb - IP_MULTICAST_TTL = 0xa - IP_MULTICAST_VIF = 0xe - IP_OFFMASK = 0x1fff - IP_ONESBCAST = 0x17 - IP_OPTIONS = 0x1 - IP_PORTRANGE = 0x13 - IP_PORTRANGE_DEFAULT = 0x0 - IP_PORTRANGE_HIGH = 0x1 - IP_PORTRANGE_LOW = 0x2 - IP_RECVDSTADDR = 0x7 - IP_RECVIF = 0x14 - IP_RECVOPTS = 0x5 - IP_RECVRETOPTS = 0x6 - IP_RECVTOS = 0x44 - IP_RECVTTL = 0x41 - IP_RETOPTS = 0x8 - IP_RF = 0x8000 - IP_RSVP_OFF = 0x10 - IP_RSVP_ON = 0xf - IP_RSVP_VIF_OFF = 0x12 - IP_RSVP_VIF_ON = 0x11 - IP_SENDSRCADDR = 0x7 - IP_TOS = 0x3 - IP_TTL = 0x4 - IP_UNBLOCK_SOURCE = 0x49 - ISIG = 0x80 - ISTRIP = 0x20 - IXANY = 0x800 - IXOFF = 0x400 - IXON = 0x200 - LOCK_EX = 0x2 - LOCK_NB = 0x4 - LOCK_SH = 0x1 - LOCK_UN = 0x8 - MADV_AUTOSYNC = 0x7 - MADV_CORE = 0x9 - MADV_DONTNEED = 0x4 - MADV_FREE = 0x5 - MADV_NOCORE = 0x8 - MADV_NORMAL = 0x0 - MADV_NOSYNC = 0x6 - MADV_PROTECT = 0xa - MADV_RANDOM = 0x1 - MADV_SEQUENTIAL = 0x2 - MADV_WILLNEED = 0x3 - MAP_ALIGNED_SUPER = 0x1000000 - MAP_ALIGNMENT_MASK = -0x1000000 - MAP_ALIGNMENT_SHIFT = 0x18 - MAP_ANON = 0x1000 - MAP_ANONYMOUS = 0x1000 - MAP_COPY = 0x2 - MAP_EXCL = 0x4000 - MAP_FILE = 0x0 - MAP_FIXED = 0x10 - MAP_HASSEMAPHORE = 0x200 - MAP_NOCORE = 0x20000 - MAP_NORESERVE = 0x40 - MAP_NOSYNC = 0x800 - MAP_PREFAULT_READ = 0x40000 - MAP_PRIVATE = 0x2 - MAP_RENAME = 0x20 - MAP_RESERVED0080 = 0x80 - MAP_RESERVED0100 = 0x100 - MAP_SHARED = 0x1 - MAP_STACK = 0x400 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MSG_CMSG_CLOEXEC = 0x40000 - MSG_COMPAT = 0x8000 - MSG_CTRUNC = 0x20 - MSG_DONTROUTE = 0x4 - MSG_DONTWAIT = 0x80 - MSG_EOF = 0x100 - MSG_EOR = 0x8 - MSG_NBIO = 0x4000 - MSG_NOSIGNAL = 0x20000 - MSG_NOTIFICATION = 0x2000 - MSG_OOB = 0x1 - MSG_PEEK = 0x2 - MSG_TRUNC = 0x10 - MSG_WAITALL = 0x40 - MS_ASYNC = 0x1 - MS_INVALIDATE = 0x2 - MS_SYNC = 0x0 - NAME_MAX = 0xff - NET_RT_DUMP = 0x1 - NET_RT_FLAGS = 0x2 - NET_RT_IFLIST = 0x3 - NET_RT_IFLISTL = 0x5 - NET_RT_IFMALIST = 0x4 - NET_RT_MAXID = 0x6 - NOFLSH = 0x80000000 - NOTE_ATTRIB = 0x8 - NOTE_CHILD = 0x4 - NOTE_DELETE = 0x1 - NOTE_EXEC = 0x20000000 - NOTE_EXIT = 0x80000000 - NOTE_EXTEND = 0x4 - NOTE_FFAND = 0x40000000 - NOTE_FFCOPY = 0xc0000000 - NOTE_FFCTRLMASK = 0xc0000000 - NOTE_FFLAGSMASK = 0xffffff - NOTE_FFNOP = 0x0 - NOTE_FFOR = 0x80000000 - NOTE_FORK = 0x40000000 - NOTE_LINK = 0x10 - NOTE_LOWAT = 0x1 - NOTE_PCTRLMASK = 0xf0000000 - NOTE_PDATAMASK = 0xfffff - NOTE_RENAME = 0x20 - NOTE_REVOKE = 0x40 - NOTE_TRACK = 0x1 - NOTE_TRACKERR = 0x2 - NOTE_TRIGGER = 0x1000000 - NOTE_WRITE = 0x2 - OCRNL = 0x10 - ONLCR = 0x2 - ONLRET = 0x40 - ONOCR = 0x20 - ONOEOT = 0x8 - OPOST = 0x1 - O_ACCMODE = 0x3 - O_APPEND = 0x8 - O_ASYNC = 0x40 - O_CLOEXEC = 0x100000 - O_CREAT = 0x200 - O_DIRECT = 0x10000 - O_DIRECTORY = 0x20000 - O_EXCL = 0x800 - O_EXEC = 0x40000 - O_EXLOCK = 0x20 - O_FSYNC = 0x80 - O_NDELAY = 0x4 - O_NOCTTY = 0x8000 - O_NOFOLLOW = 0x100 - O_NONBLOCK = 0x4 - O_RDONLY = 0x0 - O_RDWR = 0x2 - O_SHLOCK = 0x10 - O_SYNC = 0x80 - O_TRUNC = 0x400 - O_TTY_INIT = 0x80000 - O_WRONLY = 0x1 - PARENB = 0x1000 - PARMRK = 0x8 - PARODD = 0x2000 - PENDIN = 0x20000000 - PRIO_PGRP = 0x1 - PRIO_PROCESS = 0x0 - PRIO_USER = 0x2 - PROT_EXEC = 0x4 - PROT_NONE = 0x0 - PROT_READ = 0x1 - PROT_WRITE = 0x2 - RLIMIT_AS = 0xa - RLIMIT_CORE = 0x4 - RLIMIT_CPU = 0x0 - RLIMIT_DATA = 0x2 - RLIMIT_FSIZE = 0x1 - RLIMIT_NOFILE = 0x8 - RLIMIT_STACK = 0x3 - RLIM_INFINITY = 0x7fffffffffffffff - RTAX_AUTHOR = 0x6 - RTAX_BRD = 0x7 - RTAX_DST = 0x0 - RTAX_GATEWAY = 0x1 - RTAX_GENMASK = 0x3 - RTAX_IFA = 0x5 - RTAX_IFP = 0x4 - RTAX_MAX = 0x8 - RTAX_NETMASK = 0x2 - RTA_AUTHOR = 0x40 - RTA_BRD = 0x80 - RTA_DST = 0x1 - RTA_GATEWAY = 0x2 - RTA_GENMASK = 0x8 - RTA_IFA = 0x20 - RTA_IFP = 0x10 - RTA_NETMASK = 0x4 - RTF_BLACKHOLE = 0x1000 - RTF_BROADCAST = 0x400000 - RTF_DONE = 0x40 - RTF_DYNAMIC = 0x10 - RTF_FMASK = 0x1004d808 - RTF_GATEWAY = 0x2 - RTF_GWFLAG_COMPAT = 0x80000000 - RTF_HOST = 0x4 - RTF_LLDATA = 0x400 - RTF_LLINFO = 0x400 - RTF_LOCAL = 0x200000 - RTF_MODIFIED = 0x20 - RTF_MULTICAST = 0x800000 - RTF_PINNED = 0x100000 - RTF_PRCLONING = 0x10000 - RTF_PROTO1 = 0x8000 - RTF_PROTO2 = 0x4000 - RTF_PROTO3 = 0x40000 - RTF_REJECT = 0x8 - RTF_RNH_LOCKED = 0x40000000 - RTF_STATIC = 0x800 - RTF_STICKY = 0x10000000 - RTF_UP = 0x1 - RTF_XRESOLVE = 0x200 - RTM_ADD = 0x1 - RTM_CHANGE = 0x3 - RTM_DELADDR = 0xd - RTM_DELETE = 0x2 - RTM_DELMADDR = 0x10 - RTM_GET = 0x4 - RTM_IEEE80211 = 0x12 - RTM_IFANNOUNCE = 0x11 - RTM_IFINFO = 0xe - RTM_LOCK = 0x8 - RTM_LOSING = 0x5 - RTM_MISS = 0x7 - RTM_NEWADDR = 0xc - RTM_NEWMADDR = 0xf - RTM_OLDADD = 0x9 - RTM_OLDDEL = 0xa - RTM_REDIRECT = 0x6 - RTM_RESOLVE = 0xb - RTM_RTTUNIT = 0xf4240 - RTM_VERSION = 0x5 - RTV_EXPIRE = 0x4 - RTV_HOPCOUNT = 0x2 - RTV_MTU = 0x1 - RTV_RPIPE = 0x8 - RTV_RTT = 0x40 - RTV_RTTVAR = 0x80 - RTV_SPIPE = 0x10 - RTV_SSTHRESH = 0x20 - RTV_WEIGHT = 0x100 - RT_ALL_FIBS = -0x1 - RT_CACHING_CONTEXT = 0x1 - RT_DEFAULT_FIB = 0x0 - RT_NORTREF = 0x2 - RUSAGE_CHILDREN = -0x1 - RUSAGE_SELF = 0x0 - RUSAGE_THREAD = 0x1 - SCM_BINTIME = 0x4 - SCM_CREDS = 0x3 - SCM_RIGHTS = 0x1 - SCM_TIMESTAMP = 0x2 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 - SIOCADDMULTI = 0x80206931 - SIOCADDRT = 0x8030720a - SIOCAIFADDR = 0x8040691a - SIOCAIFGROUP = 0x80246987 - SIOCALIFADDR = 0x8118691b - SIOCATMARK = 0x40047307 - SIOCDELMULTI = 0x80206932 - SIOCDELRT = 0x8030720b - SIOCDIFADDR = 0x80206919 - SIOCDIFGROUP = 0x80246989 - SIOCDIFPHYADDR = 0x80206949 - SIOCDLIFADDR = 0x8118691d - SIOCGDRVSPEC = 0xc01c697b - SIOCGETSGCNT = 0xc0147210 - SIOCGETVIFCNT = 0xc014720f - SIOCGHIWAT = 0x40047301 - SIOCGIFADDR = 0xc0206921 - SIOCGIFBRDADDR = 0xc0206923 - SIOCGIFCAP = 0xc020691f - SIOCGIFCONF = 0xc0086924 - SIOCGIFDESCR = 0xc020692a - SIOCGIFDSTADDR = 0xc0206922 - SIOCGIFFIB = 0xc020695c - SIOCGIFFLAGS = 0xc0206911 - SIOCGIFGENERIC = 0xc020693a - SIOCGIFGMEMB = 0xc024698a - SIOCGIFGROUP = 0xc0246988 - SIOCGIFINDEX = 0xc0206920 - SIOCGIFMAC = 0xc0206926 - SIOCGIFMEDIA = 0xc0286938 - SIOCGIFMETRIC = 0xc0206917 - SIOCGIFMTU = 0xc0206933 - SIOCGIFNETMASK = 0xc0206925 - SIOCGIFPDSTADDR = 0xc0206948 - SIOCGIFPHYS = 0xc0206935 - SIOCGIFPSRCADDR = 0xc0206947 - SIOCGIFSTATUS = 0xc331693b - SIOCGLIFADDR = 0xc118691c - SIOCGLIFPHYADDR = 0xc118694b - SIOCGLOWAT = 0x40047303 - SIOCGPGRP = 0x40047309 - SIOCGPRIVATE_0 = 0xc0206950 - SIOCGPRIVATE_1 = 0xc0206951 - SIOCIFCREATE = 0xc020697a - SIOCIFCREATE2 = 0xc020697c - SIOCIFDESTROY = 0x80206979 - SIOCIFGCLONERS = 0xc00c6978 - SIOCSDRVSPEC = 0x801c697b - SIOCSHIWAT = 0x80047300 - SIOCSIFADDR = 0x8020690c - SIOCSIFBRDADDR = 0x80206913 - SIOCSIFCAP = 0x8020691e - SIOCSIFDESCR = 0x80206929 - SIOCSIFDSTADDR = 0x8020690e - SIOCSIFFIB = 0x8020695d - SIOCSIFFLAGS = 0x80206910 - SIOCSIFGENERIC = 0x80206939 - SIOCSIFLLADDR = 0x8020693c - SIOCSIFMAC = 0x80206927 - SIOCSIFMEDIA = 0xc0206937 - SIOCSIFMETRIC = 0x80206918 - SIOCSIFMTU = 0x80206934 - SIOCSIFNAME = 0x80206928 - SIOCSIFNETMASK = 0x80206916 - SIOCSIFPHYADDR = 0x80406946 - SIOCSIFPHYS = 0x80206936 - SIOCSIFRVNET = 0xc020695b - SIOCSIFVNET = 0xc020695a - SIOCSLIFPHYADDR = 0x8118694a - SIOCSLOWAT = 0x80047302 - SIOCSPGRP = 0x80047308 - SOCK_CLOEXEC = 0x10000000 - SOCK_DGRAM = 0x2 - SOCK_MAXADDRLEN = 0xff - SOCK_NONBLOCK = 0x20000000 - SOCK_RAW = 0x3 - SOCK_RDM = 0x4 - SOCK_SEQPACKET = 0x5 - SOCK_STREAM = 0x1 - SOL_SOCKET = 0xffff - SOMAXCONN = 0x80 - SO_ACCEPTCONN = 0x2 - SO_ACCEPTFILTER = 0x1000 - SO_BINTIME = 0x2000 - SO_BROADCAST = 0x20 - SO_DEBUG = 0x1 - SO_DONTROUTE = 0x10 - SO_ERROR = 0x1007 - SO_KEEPALIVE = 0x8 - SO_LABEL = 0x1009 - SO_LINGER = 0x80 - SO_LISTENINCQLEN = 0x1013 - SO_LISTENQLEN = 0x1012 - SO_LISTENQLIMIT = 0x1011 - SO_NOSIGPIPE = 0x800 - SO_NO_DDP = 0x8000 - SO_NO_OFFLOAD = 0x4000 - SO_OOBINLINE = 0x100 - SO_PEERLABEL = 0x1010 - SO_PROTOCOL = 0x1016 - SO_PROTOTYPE = 0x1016 - SO_RCVBUF = 0x1002 - SO_RCVLOWAT = 0x1004 - SO_RCVTIMEO = 0x1006 - SO_REUSEADDR = 0x4 - SO_REUSEPORT = 0x200 - SO_SETFIB = 0x1014 - SO_SNDBUF = 0x1001 - SO_SNDLOWAT = 0x1003 - SO_SNDTIMEO = 0x1005 - SO_TIMESTAMP = 0x400 - SO_TYPE = 0x1008 - SO_USELOOPBACK = 0x40 - SO_USER_COOKIE = 0x1015 - SO_VENDOR = 0x80000000 - TCIFLUSH = 0x1 - TCIOFLUSH = 0x3 - TCOFLUSH = 0x2 - TCP_CA_NAME_MAX = 0x10 - TCP_CONGESTION = 0x40 - TCP_INFO = 0x20 - TCP_KEEPCNT = 0x400 - TCP_KEEPIDLE = 0x100 - TCP_KEEPINIT = 0x80 - TCP_KEEPINTVL = 0x200 - TCP_MAXBURST = 0x4 - TCP_MAXHLEN = 0x3c - TCP_MAXOLEN = 0x28 - TCP_MAXSEG = 0x2 - TCP_MAXWIN = 0xffff - TCP_MAX_SACK = 0x4 - TCP_MAX_WINSHIFT = 0xe - TCP_MD5SIG = 0x10 - TCP_MINMSS = 0xd8 - TCP_MSS = 0x218 - TCP_NODELAY = 0x1 - TCP_NOOPT = 0x8 - TCP_NOPUSH = 0x4 - TCP_VENDOR = 0x80000000 - TCSAFLUSH = 0x2 - TIOCCBRK = 0x2000747a - TIOCCDTR = 0x20007478 - TIOCCONS = 0x80047462 - TIOCDRAIN = 0x2000745e - TIOCEXCL = 0x2000740d - TIOCEXT = 0x80047460 - TIOCFLUSH = 0x80047410 - TIOCGDRAINWAIT = 0x40047456 - TIOCGETA = 0x402c7413 - TIOCGETD = 0x4004741a - TIOCGPGRP = 0x40047477 - TIOCGPTN = 0x4004740f - TIOCGSID = 0x40047463 - TIOCGWINSZ = 0x40087468 - TIOCMBIC = 0x8004746b - TIOCMBIS = 0x8004746c - TIOCMGDTRWAIT = 0x4004745a - TIOCMGET = 0x4004746a - TIOCMSDTRWAIT = 0x8004745b - TIOCMSET = 0x8004746d - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DCD = 0x40 - TIOCM_DSR = 0x100 - TIOCM_DTR = 0x2 - TIOCM_LE = 0x1 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_RTS = 0x4 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x20007471 - TIOCNXCL = 0x2000740e - TIOCOUTQ = 0x40047473 - TIOCPKT = 0x80047470 - TIOCPKT_DATA = 0x0 - TIOCPKT_DOSTOP = 0x20 - TIOCPKT_FLUSHREAD = 0x1 - TIOCPKT_FLUSHWRITE = 0x2 - TIOCPKT_IOCTL = 0x40 - TIOCPKT_NOSTOP = 0x10 - TIOCPKT_START = 0x8 - TIOCPKT_STOP = 0x4 - TIOCPTMASTER = 0x2000741c - TIOCSBRK = 0x2000747b - TIOCSCTTY = 0x20007461 - TIOCSDRAINWAIT = 0x80047457 - TIOCSDTR = 0x20007479 - TIOCSETA = 0x802c7414 - TIOCSETAF = 0x802c7416 - TIOCSETAW = 0x802c7415 - TIOCSETD = 0x8004741b - TIOCSIG = 0x2004745f - TIOCSPGRP = 0x80047476 - TIOCSTART = 0x2000746e - TIOCSTAT = 0x20007465 - TIOCSTI = 0x80017472 - TIOCSTOP = 0x2000746f - TIOCSWINSZ = 0x80087467 - TIOCTIMESTAMP = 0x40087459 - TIOCUCNTL = 0x80047466 - TOSTOP = 0x400000 - VDISCARD = 0xf - VDSUSP = 0xb - VEOF = 0x0 - VEOL = 0x1 - VEOL2 = 0x2 - VERASE = 0x3 - VERASE2 = 0x7 - VINTR = 0x8 - VKILL = 0x5 - VLNEXT = 0xe - VMIN = 0x10 - VQUIT = 0x9 - VREPRINT = 0x6 - VSTART = 0xc - VSTATUS = 0x12 - VSTOP = 0xd - VSUSP = 0xa - VTIME = 0x11 - VWERASE = 0x4 - WCONTINUED = 0x4 - WCOREFLAG = 0x80 - WEXITED = 0x10 - WLINUXCLONE = 0x80000000 - WNOHANG = 0x1 - WNOWAIT = 0x8 - WSTOPPED = 0x2 - WTRAPPED = 0x20 - WUNTRACED = 0x2 + AF_APPLETALK = 0x10 + AF_ARP = 0x23 + AF_ATM = 0x1e + AF_BLUETOOTH = 0x24 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1c + AF_INET6_SDP = 0x2a + AF_INET_SDP = 0x28 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x2a + AF_NATM = 0x1d + AF_NETBIOS = 0x6 + AF_NETGRAPH = 0x20 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SCLUSTER = 0x22 + AF_SIP = 0x18 + AF_SLOW = 0x21 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VENDOR00 = 0x27 + AF_VENDOR01 = 0x29 + AF_VENDOR02 = 0x2b + AF_VENDOR03 = 0x2d + AF_VENDOR04 = 0x2f + AF_VENDOR05 = 0x31 + AF_VENDOR06 = 0x33 + AF_VENDOR07 = 0x35 + AF_VENDOR08 = 0x37 + AF_VENDOR09 = 0x39 + AF_VENDOR10 = 0x3b + AF_VENDOR11 = 0x3d + AF_VENDOR12 = 0x3f + AF_VENDOR13 = 0x41 + AF_VENDOR14 = 0x43 + AF_VENDOR15 = 0x45 + AF_VENDOR16 = 0x47 + AF_VENDOR17 = 0x49 + AF_VENDOR18 = 0x4b + AF_VENDOR19 = 0x4d + AF_VENDOR20 = 0x4f + AF_VENDOR21 = 0x51 + AF_VENDOR22 = 0x53 + AF_VENDOR23 = 0x55 + AF_VENDOR24 = 0x57 + AF_VENDOR25 = 0x59 + AF_VENDOR26 = 0x5b + AF_VENDOR27 = 0x5d + AF_VENDOR28 = 0x5f + AF_VENDOR29 = 0x61 + AF_VENDOR30 = 0x63 + AF_VENDOR31 = 0x65 + AF_VENDOR32 = 0x67 + AF_VENDOR33 = 0x69 + AF_VENDOR34 = 0x6b + AF_VENDOR35 = 0x6d + AF_VENDOR36 = 0x6f + AF_VENDOR37 = 0x71 + AF_VENDOR38 = 0x73 + AF_VENDOR39 = 0x75 + AF_VENDOR40 = 0x77 + AF_VENDOR41 = 0x79 + AF_VENDOR42 = 0x7b + AF_VENDOR43 = 0x7d + AF_VENDOR44 = 0x7f + AF_VENDOR45 = 0x81 + AF_VENDOR46 = 0x83 + AF_VENDOR47 = 0x85 + ALTWERASE = 0x200 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427c + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRECTION = 0x40044276 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0084279 + BIOCGETBUFMODE = 0x4004427d + BIOCGETIF = 0x4020426b + BIOCGETZMAX = 0x4004427f + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4008426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCGTSTAMP = 0x40044283 + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x2000427a + BIOCPROMISC = 0x20004269 + BIOCROTZBUF = 0x400c4280 + BIOCSBLEN = 0xc0044266 + BIOCSDIRECTION = 0x80044277 + BIOCSDLT = 0x80044278 + BIOCSETBUFMODE = 0x8004427e + BIOCSETF = 0x80084267 + BIOCSETFNR = 0x80084282 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x8008427b + BIOCSETZBUF = 0x800c4281 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8008426d + BIOCSSEESENT = 0x80044277 + BIOCSTSTAMP = 0x80044284 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_BUFMODE_BUFFER = 0x1 + BPF_BUFMODE_ZBUF = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_T_BINTIME = 0x2 + BPF_T_BINTIME_FAST = 0x102 + BPF_T_BINTIME_MONOTONIC = 0x202 + BPF_T_BINTIME_MONOTONIC_FAST = 0x302 + BPF_T_FAST = 0x100 + BPF_T_FLAG_MASK = 0x300 + BPF_T_FORMAT_MASK = 0x3 + BPF_T_MICROTIME = 0x0 + BPF_T_MICROTIME_FAST = 0x100 + BPF_T_MICROTIME_MONOTONIC = 0x200 + BPF_T_MICROTIME_MONOTONIC_FAST = 0x300 + BPF_T_MONOTONIC = 0x200 + BPF_T_MONOTONIC_FAST = 0x300 + BPF_T_NANOTIME = 0x1 + BPF_T_NANOTIME_FAST = 0x101 + BPF_T_NANOTIME_MONOTONIC = 0x201 + BPF_T_NANOTIME_MONOTONIC_FAST = 0x301 + BPF_T_NONE = 0x3 + BPF_T_NORMAL = 0x0 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + CAP_ACCEPT = 0x200000020000000 + CAP_ACL_CHECK = 0x400000000010000 + CAP_ACL_DELETE = 0x400000000020000 + CAP_ACL_GET = 0x400000000040000 + CAP_ACL_SET = 0x400000000080000 + CAP_ALL0 = 0x20007ffffffffff + CAP_ALL1 = 0x4000000001fffff + CAP_BIND = 0x200000040000000 + CAP_BINDAT = 0x200008000000400 + CAP_CHFLAGSAT = 0x200000000001400 + CAP_CONNECT = 0x200000080000000 + CAP_CONNECTAT = 0x200010000000400 + CAP_CREATE = 0x200000000000040 + CAP_EVENT = 0x400000000000020 + CAP_EXTATTR_DELETE = 0x400000000001000 + CAP_EXTATTR_GET = 0x400000000002000 + CAP_EXTATTR_LIST = 0x400000000004000 + CAP_EXTATTR_SET = 0x400000000008000 + CAP_FCHDIR = 0x200000000000800 + CAP_FCHFLAGS = 0x200000000001000 + CAP_FCHMOD = 0x200000000002000 + CAP_FCHMODAT = 0x200000000002400 + CAP_FCHOWN = 0x200000000004000 + CAP_FCHOWNAT = 0x200000000004400 + CAP_FCNTL = 0x200000000008000 + CAP_FCNTL_ALL = 0x78 + CAP_FCNTL_GETFL = 0x8 + CAP_FCNTL_GETOWN = 0x20 + CAP_FCNTL_SETFL = 0x10 + CAP_FCNTL_SETOWN = 0x40 + CAP_FEXECVE = 0x200000000000080 + CAP_FLOCK = 0x200000000010000 + CAP_FPATHCONF = 0x200000000020000 + CAP_FSCK = 0x200000000040000 + CAP_FSTAT = 0x200000000080000 + CAP_FSTATAT = 0x200000000080400 + CAP_FSTATFS = 0x200000000100000 + CAP_FSYNC = 0x200000000000100 + CAP_FTRUNCATE = 0x200000000000200 + CAP_FUTIMES = 0x200000000200000 + CAP_FUTIMESAT = 0x200000000200400 + CAP_GETPEERNAME = 0x200000100000000 + CAP_GETSOCKNAME = 0x200000200000000 + CAP_GETSOCKOPT = 0x200000400000000 + CAP_IOCTL = 0x400000000000080 + CAP_IOCTLS_ALL = 0x7fffffff + CAP_KQUEUE = 0x400000000100040 + CAP_KQUEUE_CHANGE = 0x400000000100000 + CAP_KQUEUE_EVENT = 0x400000000000040 + CAP_LINKAT_SOURCE = 0x200020000000400 + CAP_LINKAT_TARGET = 0x200000000400400 + CAP_LISTEN = 0x200000800000000 + CAP_LOOKUP = 0x200000000000400 + CAP_MAC_GET = 0x400000000000001 + CAP_MAC_SET = 0x400000000000002 + CAP_MKDIRAT = 0x200000000800400 + CAP_MKFIFOAT = 0x200000001000400 + CAP_MKNODAT = 0x200000002000400 + CAP_MMAP = 0x200000000000010 + CAP_MMAP_R = 0x20000000000001d + CAP_MMAP_RW = 0x20000000000001f + CAP_MMAP_RWX = 0x20000000000003f + CAP_MMAP_RX = 0x20000000000003d + CAP_MMAP_W = 0x20000000000001e + CAP_MMAP_WX = 0x20000000000003e + CAP_MMAP_X = 0x20000000000003c + CAP_PDGETPID = 0x400000000000200 + CAP_PDKILL = 0x400000000000800 + CAP_PDWAIT = 0x400000000000400 + CAP_PEELOFF = 0x200001000000000 + CAP_POLL_EVENT = 0x400000000000020 + CAP_PREAD = 0x20000000000000d + CAP_PWRITE = 0x20000000000000e + CAP_READ = 0x200000000000001 + CAP_RECV = 0x200000000000001 + CAP_RENAMEAT_SOURCE = 0x200000004000400 + CAP_RENAMEAT_TARGET = 0x200040000000400 + CAP_RIGHTS_VERSION = 0x0 + CAP_RIGHTS_VERSION_00 = 0x0 + CAP_SEEK = 0x20000000000000c + CAP_SEEK_TELL = 0x200000000000004 + CAP_SEM_GETVALUE = 0x400000000000004 + CAP_SEM_POST = 0x400000000000008 + CAP_SEM_WAIT = 0x400000000000010 + CAP_SEND = 0x200000000000002 + CAP_SETSOCKOPT = 0x200002000000000 + CAP_SHUTDOWN = 0x200004000000000 + CAP_SOCK_CLIENT = 0x200007780000003 + CAP_SOCK_SERVER = 0x200007f60000003 + CAP_SYMLINKAT = 0x200000008000400 + CAP_TTYHOOK = 0x400000000000100 + CAP_UNLINKAT = 0x200000010000400 + CAP_UNUSED0_44 = 0x200080000000000 + CAP_UNUSED0_57 = 0x300000000000000 + CAP_UNUSED1_22 = 0x400000000200000 + CAP_UNUSED1_57 = 0x500000000000000 + CAP_WRITE = 0x200000000000002 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x4 + CLOCK_MONOTONIC_FAST = 0xc + CLOCK_MONOTONIC_PRECISE = 0xb + CLOCK_PROCESS_CPUTIME_ID = 0xf + CLOCK_PROF = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_FAST = 0xa + CLOCK_REALTIME_PRECISE = 0x9 + CLOCK_SECOND = 0xd + CLOCK_THREAD_CPUTIME_ID = 0xe + CLOCK_UPTIME = 0x5 + CLOCK_UPTIME_FAST = 0x8 + CLOCK_UPTIME_PRECISE = 0x7 + CLOCK_VIRTUAL = 0x1 + CREAD = 0x800 + CRTSCTS = 0x30000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0x18 + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_BREDR_BB = 0xff + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_BLUETOOTH_LE_LL = 0xfb + DLT_BLUETOOTH_LE_LL_WITH_PHDR = 0x100 + DLT_BLUETOOTH_LINUX_MONITOR = 0xfe + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_EPON = 0x103 + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_INFINIBAND = 0xf7 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPMI_HPM_2 = 0x104 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0x104 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NETLINK = 0xfd + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x79 + DLT_PKTAP = 0x102 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PROFIBUS_DL = 0x101 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RIO = 0x7c + DLT_RTAC_SERIAL = 0xfa + DLT_SCCP = 0x8e + DLT_SCTP = 0xf8 + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USBPCAP = 0xf9 + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WIHART = 0xdf + DLT_WIRESHARK_UPPER_PDU = 0xfc + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_FS = -0x9 + EVFILT_LIO = -0xa + EVFILT_PROC = -0x5 + EVFILT_PROCDESC = -0x8 + EVFILT_READ = -0x1 + EVFILT_SENDFILE = -0xc + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xc + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xb + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_DROP = 0x1000 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_FLAG2 = 0x4000 + EV_FORCEONESHOT = 0x100 + EV_ONESHOT = 0x10 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTATTR_NAMESPACE_EMPTY = 0x0 + EXTATTR_NAMESPACE_SYSTEM = 0x2 + EXTATTR_NAMESPACE_USER = 0x1 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_CANCEL = 0x5 + F_DUP2FD = 0xa + F_DUP2FD_CLOEXEC = 0x12 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x11 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0xb + F_GETOWN = 0x5 + F_OGETLK = 0x7 + F_OK = 0x0 + F_OSETLK = 0x8 + F_OSETLKW = 0x9 + F_RDAHEAD = 0x10 + F_RDLCK = 0x1 + F_READAHEAD = 0xf + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0xc + F_SETLKW = 0xd + F_SETLK_REMOTE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_UNLCKSYS = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x218f52 + IFF_CANTCONFIG = 0x10000 + IFF_DEBUG = 0x4 + IFF_DRV_OACTIVE = 0x400 + IFF_DRV_RUNNING = 0x40 + IFF_DYING = 0x200000 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MONITOR = 0x40000 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PPROMISC = 0x20000 + IFF_PROMISC = 0x100 + IFF_RENAMING = 0x400000 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_STATICARP = 0x80000 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_IEEE1394 = 0x90 + IFT_INFINIBAND = 0xc7 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_PPP = 0x17 + IFT_PROPVIRTUAL = 0x35 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_MASK = 0xfffffffe + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CARP = 0x70 + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0x102 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HIP = 0x8b + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MEAS = 0x13 + IPPROTO_MH = 0x87 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OLD_DIVERT = 0xfe + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_RESERVED_253 = 0xfd + IPPROTO_RESERVED_254 = 0xfe + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEND = 0x103 + IPPROTO_SEP = 0x21 + IPPROTO_SHIM6 = 0x8c + IPPROTO_SKIP = 0x39 + IPPROTO_SPACER = 0x7fff + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TLSP = 0x38 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_BINDANY = 0x40 + IPV6_BINDMULTI = 0x41 + IPV6_BINDV6ONLY = 0x1b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FLOWID = 0x43 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FLOWTYPE = 0x44 + IPV6_FRAGTTL = 0x78 + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MSFILTER = 0x4a + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_PREFER_TEMPADDR = 0x3f + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVFLOWID = 0x46 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRSSBUCKETID = 0x47 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RSSBUCKETID = 0x45 + IPV6_RSS_LISTEN_BUCKET = 0x42 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BINDANY = 0x18 + IP_BINDMULTI = 0x19 + IP_BLOCK_SOURCE = 0x48 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DONTFRAG = 0x43 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET3 = 0x31 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FLOWID = 0x5a + IP_FLOWTYPE = 0x5b + IP_FW3 = 0x30 + IP_FW_ADD = 0x32 + IP_FW_DEL = 0x33 + IP_FW_FLUSH = 0x34 + IP_FW_GET = 0x36 + IP_FW_NAT_CFG = 0x38 + IP_FW_NAT_DEL = 0x39 + IP_FW_NAT_GET_CONFIG = 0x3a + IP_FW_NAT_GET_LOG = 0x3b + IP_FW_RESETLOG = 0x37 + IP_FW_TABLE_ADD = 0x28 + IP_FW_TABLE_DEL = 0x29 + IP_FW_TABLE_FLUSH = 0x2a + IP_FW_TABLE_GETSIZE = 0x2b + IP_FW_TABLE_LIST = 0x2c + IP_FW_ZERO = 0x35 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MAX_SOURCE_FILTER = 0x400 + IP_MF = 0x2000 + IP_MINTTL = 0x42 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_OFFMASK = 0x1fff + IP_ONESBCAST = 0x17 + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVFLOWID = 0x5d + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVRSSBUCKETID = 0x5e + IP_RECVTOS = 0x44 + IP_RECVTTL = 0x41 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSSBUCKETID = 0x5c + IP_RSS_LISTEN_BUCKET = 0x1a + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_SENDSRCADDR = 0x7 + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_AUTOSYNC = 0x7 + MADV_CORE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_NOCORE = 0x8 + MADV_NORMAL = 0x0 + MADV_NOSYNC = 0x6 + MADV_PROTECT = 0xa + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MAP_ALIGNED_SUPER = 0x1000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_EXCL = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_NOCORE = 0x20000 + MAP_NOSYNC = 0x800 + MAP_PREFAULT_READ = 0x40000 + MAP_PRIVATE = 0x2 + MAP_RESERVED0020 = 0x20 + MAP_RESERVED0040 = 0x40 + MAP_RESERVED0080 = 0x80 + MAP_RESERVED0100 = 0x100 + MAP_SHARED = 0x1 + MAP_STACK = 0x400 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ACLS = 0x8000000 + MNT_ASYNC = 0x40 + MNT_AUTOMOUNTED = 0x200000000 + MNT_BYFSID = 0x8000000 + MNT_CMDFLAGS = 0xd0f0000 + MNT_DEFEXPORTED = 0x200 + MNT_DELEXPORT = 0x20000 + MNT_EXKERB = 0x800 + MNT_EXPORTANON = 0x400 + MNT_EXPORTED = 0x100 + MNT_EXPUBLIC = 0x20000000 + MNT_EXRDONLY = 0x80 + MNT_FORCE = 0x80000 + MNT_GJOURNAL = 0x2000000 + MNT_IGNORE = 0x800000 + MNT_LAZY = 0x3 + MNT_LOCAL = 0x1000 + MNT_MULTILABEL = 0x4000000 + MNT_NFS4ACLS = 0x10 + MNT_NOATIME = 0x10000000 + MNT_NOCLUSTERR = 0x40000000 + MNT_NOCLUSTERW = 0x80000000 + MNT_NOEXEC = 0x4 + MNT_NONBUSY = 0x4000000 + MNT_NOSUID = 0x8 + MNT_NOSYMFOLLOW = 0x400000 + MNT_NOWAIT = 0x2 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SNAPSHOT = 0x1000000 + MNT_SOFTDEP = 0x200000 + MNT_SUIDDIR = 0x100000 + MNT_SUJ = 0x100000000 + MNT_SUSPEND = 0x4 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UPDATE = 0x10000 + MNT_UPDATEMASK = 0x2d8d0807e + MNT_USER = 0x8000 + MNT_VISFLAGMASK = 0x3fef0ffff + MNT_WAIT = 0x1 + MSG_CMSG_CLOEXEC = 0x40000 + MSG_COMPAT = 0x8000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_NBIO = 0x4000 + MSG_NOSIGNAL = 0x20000 + MSG_NOTIFICATION = 0x2000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITFORONE = 0x80000 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x0 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLISTL = 0x5 + NET_RT_IFMALIST = 0x4 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_CLOSE = 0x100 + NOTE_CLOSE_WRITE = 0x200 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FILE_POLL = 0x2 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_MSECONDS = 0x2 + NOTE_NSECONDS = 0x8 + NOTE_OPEN = 0x80 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_READ = 0x400 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x4 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x100000 + O_CREAT = 0x200 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x20000 + O_EXCL = 0x800 + O_EXEC = 0x40000 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_TTY_INIT = 0x80000 + O_VERIFY = 0x200000 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FIXEDMTU = 0x80000 + RTF_FMASK = 0x1004d808 + RTF_GATEWAY = 0x2 + RTF_GWFLAG_COMPAT = 0x80000000 + RTF_HOST = 0x4 + RTF_LLDATA = 0x400 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_PINNED = 0x100000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_REJECT = 0x8 + RTF_RNH_LOCKED = 0x40000000 + RTF_STATIC = 0x800 + RTF_STICKY = 0x10000000 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x12 + RTM_IFANNOUNCE = 0x11 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RTV_WEIGHT = 0x100 + RT_ALL_FIBS = -0x1 + RT_BLACKHOLE = 0x40 + RT_CACHING_CONTEXT = 0x1 + RT_DEFAULT_FIB = 0x0 + RT_HAS_GW = 0x80 + RT_HAS_HEADER = 0x10 + RT_HAS_HEADER_BIT = 0x4 + RT_L2_ME = 0x4 + RT_L2_ME_BIT = 0x2 + RT_LLE_CACHE = 0x100 + RT_MAY_LOOP = 0x8 + RT_MAY_LOOP_BIT = 0x3 + RT_NORTREF = 0x2 + RT_REJECT = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_BINTIME = 0x4 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80246987 + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80246989 + SIOCDIFPHYADDR = 0x80206949 + SIOCGDRVSPEC = 0xc01c697b + SIOCGETSGCNT = 0xc0147210 + SIOCGETVIFCNT = 0xc014720f + SIOCGHIWAT = 0x40047301 + SIOCGI2C = 0xc020693d + SIOCGIFADDR = 0xc0206921 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020691f + SIOCGIFCONF = 0xc0086924 + SIOCGIFDESCR = 0xc020692a + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFIB = 0xc020695c + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc024698a + SIOCGIFGROUP = 0xc0246988 + SIOCGIFINDEX = 0xc0206920 + SIOCGIFMAC = 0xc0206926 + SIOCGIFMEDIA = 0xc0286938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFSTATUS = 0xc331693b + SIOCGIFXMEDIA = 0xc028698b + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGPRIVATE_0 = 0xc0206950 + SIOCGPRIVATE_1 = 0xc0206951 + SIOCGTUNFIB = 0xc020695e + SIOCIFCREATE = 0xc020697a + SIOCIFCREATE2 = 0xc020697c + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc00c6978 + SIOCSDRVSPEC = 0x801c697b + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020691e + SIOCSIFDESCR = 0x80206929 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFIB = 0x8020695d + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206927 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNAME = 0x80206928 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPHYS = 0x80206936 + SIOCSIFRVNET = 0xc020695b + SIOCSIFVNET = 0xc020695a + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSTUNFIB = 0x8020695f + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_NONBLOCK = 0x20000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BINTIME = 0x2000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1009 + SO_LINGER = 0x80 + SO_LISTENINCQLEN = 0x1013 + SO_LISTENQLEN = 0x1012 + SO_LISTENQLIMIT = 0x1011 + SO_NOSIGPIPE = 0x800 + SO_NO_DDP = 0x8000 + SO_NO_OFFLOAD = 0x4000 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1010 + SO_PROTOCOL = 0x1016 + SO_PROTOTYPE = 0x1016 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SETFIB = 0x1014 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_USER_COOKIE = 0x1015 + SO_VENDOR = 0x80000000 + TAB0 = 0x0 + TAB3 = 0x4 + TABDLY = 0x4 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCP_CA_NAME_MAX = 0x10 + TCP_CCALGOOPT = 0x41 + TCP_CONGESTION = 0x40 + TCP_FASTOPEN = 0x401 + TCP_FUNCTION_BLK = 0x2000 + TCP_FUNCTION_NAME_LEN_MAX = 0x20 + TCP_INFO = 0x20 + TCP_KEEPCNT = 0x400 + TCP_KEEPIDLE = 0x100 + TCP_KEEPINIT = 0x80 + TCP_KEEPINTVL = 0x200 + TCP_MAXBURST = 0x4 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_PCAP_IN = 0x1000 + TCP_PCAP_OUT = 0x800 + TCP_VENDOR = 0x80000000 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGPTN = 0x4004740f + TIOCGSID = 0x40047463 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DCD = 0x40 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMASTER = 0x2000741c + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40087459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VERASE2 = 0x7 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x4 + WCOREFLAG = 0x80 + WEXITED = 0x10 + WLINUXCLONE = 0x80000000 + WNOHANG = 0x1 + WNOWAIT = 0x8 + WSTOPPED = 0x2 + WTRAPPED = 0x20 + WUNTRACED = 0x2 ) // Errors diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go index e48e779..cf5f012 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go @@ -1,5 +1,5 @@ // mkerrors.sh -m64 -// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT +// Code generated by the command above; see README.md. DO NOT EDIT. // +build amd64,freebsd @@ -11,1461 +11,1470 @@ package unix import "syscall" const ( - AF_APPLETALK = 0x10 - AF_ARP = 0x23 - AF_ATM = 0x1e - AF_BLUETOOTH = 0x24 - AF_CCITT = 0xa - AF_CHAOS = 0x5 - AF_CNT = 0x15 - AF_COIP = 0x14 - AF_DATAKIT = 0x9 - AF_DECnet = 0xc - AF_DLI = 0xd - AF_E164 = 0x1a - AF_ECMA = 0x8 - AF_HYLINK = 0xf - AF_IEEE80211 = 0x25 - AF_IMPLINK = 0x3 - AF_INET = 0x2 - AF_INET6 = 0x1c - AF_INET6_SDP = 0x2a - AF_INET_SDP = 0x28 - AF_IPX = 0x17 - AF_ISDN = 0x1a - AF_ISO = 0x7 - AF_LAT = 0xe - AF_LINK = 0x12 - AF_LOCAL = 0x1 - AF_MAX = 0x2a - AF_NATM = 0x1d - AF_NETBIOS = 0x6 - AF_NETGRAPH = 0x20 - AF_OSI = 0x7 - AF_PUP = 0x4 - AF_ROUTE = 0x11 - AF_SCLUSTER = 0x22 - AF_SIP = 0x18 - AF_SLOW = 0x21 - AF_SNA = 0xb - AF_UNIX = 0x1 - AF_UNSPEC = 0x0 - AF_VENDOR00 = 0x27 - AF_VENDOR01 = 0x29 - AF_VENDOR02 = 0x2b - AF_VENDOR03 = 0x2d - AF_VENDOR04 = 0x2f - AF_VENDOR05 = 0x31 - AF_VENDOR06 = 0x33 - AF_VENDOR07 = 0x35 - AF_VENDOR08 = 0x37 - AF_VENDOR09 = 0x39 - AF_VENDOR10 = 0x3b - AF_VENDOR11 = 0x3d - AF_VENDOR12 = 0x3f - AF_VENDOR13 = 0x41 - AF_VENDOR14 = 0x43 - AF_VENDOR15 = 0x45 - AF_VENDOR16 = 0x47 - AF_VENDOR17 = 0x49 - AF_VENDOR18 = 0x4b - AF_VENDOR19 = 0x4d - AF_VENDOR20 = 0x4f - AF_VENDOR21 = 0x51 - AF_VENDOR22 = 0x53 - AF_VENDOR23 = 0x55 - AF_VENDOR24 = 0x57 - AF_VENDOR25 = 0x59 - AF_VENDOR26 = 0x5b - AF_VENDOR27 = 0x5d - AF_VENDOR28 = 0x5f - AF_VENDOR29 = 0x61 - AF_VENDOR30 = 0x63 - AF_VENDOR31 = 0x65 - AF_VENDOR32 = 0x67 - AF_VENDOR33 = 0x69 - AF_VENDOR34 = 0x6b - AF_VENDOR35 = 0x6d - AF_VENDOR36 = 0x6f - AF_VENDOR37 = 0x71 - AF_VENDOR38 = 0x73 - AF_VENDOR39 = 0x75 - AF_VENDOR40 = 0x77 - AF_VENDOR41 = 0x79 - AF_VENDOR42 = 0x7b - AF_VENDOR43 = 0x7d - AF_VENDOR44 = 0x7f - AF_VENDOR45 = 0x81 - AF_VENDOR46 = 0x83 - AF_VENDOR47 = 0x85 - B0 = 0x0 - B110 = 0x6e - B115200 = 0x1c200 - B1200 = 0x4b0 - B134 = 0x86 - B14400 = 0x3840 - B150 = 0x96 - B1800 = 0x708 - B19200 = 0x4b00 - B200 = 0xc8 - B230400 = 0x38400 - B2400 = 0x960 - B28800 = 0x7080 - B300 = 0x12c - B38400 = 0x9600 - B460800 = 0x70800 - B4800 = 0x12c0 - B50 = 0x32 - B57600 = 0xe100 - B600 = 0x258 - B7200 = 0x1c20 - B75 = 0x4b - B76800 = 0x12c00 - B921600 = 0xe1000 - B9600 = 0x2580 - BIOCFEEDBACK = 0x8004427c - BIOCFLUSH = 0x20004268 - BIOCGBLEN = 0x40044266 - BIOCGDIRECTION = 0x40044276 - BIOCGDLT = 0x4004426a - BIOCGDLTLIST = 0xc0104279 - BIOCGETBUFMODE = 0x4004427d - BIOCGETIF = 0x4020426b - BIOCGETZMAX = 0x4008427f - BIOCGHDRCMPLT = 0x40044274 - BIOCGRSIG = 0x40044272 - BIOCGRTIMEOUT = 0x4010426e - BIOCGSEESENT = 0x40044276 - BIOCGSTATS = 0x4008426f - BIOCGTSTAMP = 0x40044283 - BIOCIMMEDIATE = 0x80044270 - BIOCLOCK = 0x2000427a - BIOCPROMISC = 0x20004269 - BIOCROTZBUF = 0x40184280 - BIOCSBLEN = 0xc0044266 - BIOCSDIRECTION = 0x80044277 - BIOCSDLT = 0x80044278 - BIOCSETBUFMODE = 0x8004427e - BIOCSETF = 0x80104267 - BIOCSETFNR = 0x80104282 - BIOCSETIF = 0x8020426c - BIOCSETWF = 0x8010427b - BIOCSETZBUF = 0x80184281 - BIOCSHDRCMPLT = 0x80044275 - BIOCSRSIG = 0x80044273 - BIOCSRTIMEOUT = 0x8010426d - BIOCSSEESENT = 0x80044277 - BIOCSTSTAMP = 0x80044284 - BIOCVERSION = 0x40044271 - BPF_A = 0x10 - BPF_ABS = 0x20 - BPF_ADD = 0x0 - BPF_ALIGNMENT = 0x8 - BPF_ALU = 0x4 - BPF_AND = 0x50 - BPF_B = 0x10 - BPF_BUFMODE_BUFFER = 0x1 - BPF_BUFMODE_ZBUF = 0x2 - BPF_DIV = 0x30 - BPF_H = 0x8 - BPF_IMM = 0x0 - BPF_IND = 0x40 - BPF_JA = 0x0 - BPF_JEQ = 0x10 - BPF_JGE = 0x30 - BPF_JGT = 0x20 - BPF_JMP = 0x5 - BPF_JSET = 0x40 - BPF_K = 0x0 - BPF_LD = 0x0 - BPF_LDX = 0x1 - BPF_LEN = 0x80 - BPF_LSH = 0x60 - BPF_MAJOR_VERSION = 0x1 - BPF_MAXBUFSIZE = 0x80000 - BPF_MAXINSNS = 0x200 - BPF_MEM = 0x60 - BPF_MEMWORDS = 0x10 - BPF_MINBUFSIZE = 0x20 - BPF_MINOR_VERSION = 0x1 - BPF_MISC = 0x7 - BPF_MSH = 0xa0 - BPF_MUL = 0x20 - BPF_NEG = 0x80 - BPF_OR = 0x40 - BPF_RELEASE = 0x30bb6 - BPF_RET = 0x6 - BPF_RSH = 0x70 - BPF_ST = 0x2 - BPF_STX = 0x3 - BPF_SUB = 0x10 - BPF_TAX = 0x0 - BPF_TXA = 0x80 - BPF_T_BINTIME = 0x2 - BPF_T_BINTIME_FAST = 0x102 - BPF_T_BINTIME_MONOTONIC = 0x202 - BPF_T_BINTIME_MONOTONIC_FAST = 0x302 - BPF_T_FAST = 0x100 - BPF_T_FLAG_MASK = 0x300 - BPF_T_FORMAT_MASK = 0x3 - BPF_T_MICROTIME = 0x0 - BPF_T_MICROTIME_FAST = 0x100 - BPF_T_MICROTIME_MONOTONIC = 0x200 - BPF_T_MICROTIME_MONOTONIC_FAST = 0x300 - BPF_T_MONOTONIC = 0x200 - BPF_T_MONOTONIC_FAST = 0x300 - BPF_T_NANOTIME = 0x1 - BPF_T_NANOTIME_FAST = 0x101 - BPF_T_NANOTIME_MONOTONIC = 0x201 - BPF_T_NANOTIME_MONOTONIC_FAST = 0x301 - BPF_T_NONE = 0x3 - BPF_T_NORMAL = 0x0 - BPF_W = 0x0 - BPF_X = 0x8 - BRKINT = 0x2 - CFLUSH = 0xf - CLOCAL = 0x8000 - CLOCK_MONOTONIC = 0x4 - CLOCK_MONOTONIC_FAST = 0xc - CLOCK_MONOTONIC_PRECISE = 0xb - CLOCK_PROCESS_CPUTIME_ID = 0xf - CLOCK_PROF = 0x2 - CLOCK_REALTIME = 0x0 - CLOCK_REALTIME_FAST = 0xa - CLOCK_REALTIME_PRECISE = 0x9 - CLOCK_SECOND = 0xd - CLOCK_THREAD_CPUTIME_ID = 0xe - CLOCK_UPTIME = 0x5 - CLOCK_UPTIME_FAST = 0x8 - CLOCK_UPTIME_PRECISE = 0x7 - CLOCK_VIRTUAL = 0x1 - CREAD = 0x800 - CS5 = 0x0 - CS6 = 0x100 - CS7 = 0x200 - CS8 = 0x300 - CSIZE = 0x300 - CSTART = 0x11 - CSTATUS = 0x14 - CSTOP = 0x13 - CSTOPB = 0x400 - CSUSP = 0x1a - CTL_MAXNAME = 0x18 - CTL_NET = 0x4 - DLT_A429 = 0xb8 - DLT_A653_ICM = 0xb9 - DLT_AIRONET_HEADER = 0x78 - DLT_AOS = 0xde - DLT_APPLE_IP_OVER_IEEE1394 = 0x8a - DLT_ARCNET = 0x7 - DLT_ARCNET_LINUX = 0x81 - DLT_ATM_CLIP = 0x13 - DLT_ATM_RFC1483 = 0xb - DLT_AURORA = 0x7e - DLT_AX25 = 0x3 - DLT_AX25_KISS = 0xca - DLT_BACNET_MS_TP = 0xa5 - DLT_BLUETOOTH_HCI_H4 = 0xbb - DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 - DLT_CAN20B = 0xbe - DLT_CAN_SOCKETCAN = 0xe3 - DLT_CHAOS = 0x5 - DLT_CHDLC = 0x68 - DLT_CISCO_IOS = 0x76 - DLT_C_HDLC = 0x68 - DLT_C_HDLC_WITH_DIR = 0xcd - DLT_DBUS = 0xe7 - DLT_DECT = 0xdd - DLT_DOCSIS = 0x8f - DLT_DVB_CI = 0xeb - DLT_ECONET = 0x73 - DLT_EN10MB = 0x1 - DLT_EN3MB = 0x2 - DLT_ENC = 0x6d - DLT_ERF = 0xc5 - DLT_ERF_ETH = 0xaf - DLT_ERF_POS = 0xb0 - DLT_FC_2 = 0xe0 - DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 - DLT_FDDI = 0xa - DLT_FLEXRAY = 0xd2 - DLT_FRELAY = 0x6b - DLT_FRELAY_WITH_DIR = 0xce - DLT_GCOM_SERIAL = 0xad - DLT_GCOM_T1E1 = 0xac - DLT_GPF_F = 0xab - DLT_GPF_T = 0xaa - DLT_GPRS_LLC = 0xa9 - DLT_GSMTAP_ABIS = 0xda - DLT_GSMTAP_UM = 0xd9 - DLT_HHDLC = 0x79 - DLT_IBM_SN = 0x92 - DLT_IBM_SP = 0x91 - DLT_IEEE802 = 0x6 - DLT_IEEE802_11 = 0x69 - DLT_IEEE802_11_RADIO = 0x7f - DLT_IEEE802_11_RADIO_AVS = 0xa3 - DLT_IEEE802_15_4 = 0xc3 - DLT_IEEE802_15_4_LINUX = 0xbf - DLT_IEEE802_15_4_NOFCS = 0xe6 - DLT_IEEE802_15_4_NONASK_PHY = 0xd7 - DLT_IEEE802_16_MAC_CPS = 0xbc - DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 - DLT_IPFILTER = 0x74 - DLT_IPMB = 0xc7 - DLT_IPMB_LINUX = 0xd1 - DLT_IPNET = 0xe2 - DLT_IPOIB = 0xf2 - DLT_IPV4 = 0xe4 - DLT_IPV6 = 0xe5 - DLT_IP_OVER_FC = 0x7a - DLT_JUNIPER_ATM1 = 0x89 - DLT_JUNIPER_ATM2 = 0x87 - DLT_JUNIPER_ATM_CEMIC = 0xee - DLT_JUNIPER_CHDLC = 0xb5 - DLT_JUNIPER_ES = 0x84 - DLT_JUNIPER_ETHER = 0xb2 - DLT_JUNIPER_FIBRECHANNEL = 0xea - DLT_JUNIPER_FRELAY = 0xb4 - DLT_JUNIPER_GGSN = 0x85 - DLT_JUNIPER_ISM = 0xc2 - DLT_JUNIPER_MFR = 0x86 - DLT_JUNIPER_MLFR = 0x83 - DLT_JUNIPER_MLPPP = 0x82 - DLT_JUNIPER_MONITOR = 0xa4 - DLT_JUNIPER_PIC_PEER = 0xae - DLT_JUNIPER_PPP = 0xb3 - DLT_JUNIPER_PPPOE = 0xa7 - DLT_JUNIPER_PPPOE_ATM = 0xa8 - DLT_JUNIPER_SERVICES = 0x88 - DLT_JUNIPER_SRX_E2E = 0xe9 - DLT_JUNIPER_ST = 0xc8 - DLT_JUNIPER_VP = 0xb7 - DLT_JUNIPER_VS = 0xe8 - DLT_LAPB_WITH_DIR = 0xcf - DLT_LAPD = 0xcb - DLT_LIN = 0xd4 - DLT_LINUX_EVDEV = 0xd8 - DLT_LINUX_IRDA = 0x90 - DLT_LINUX_LAPD = 0xb1 - DLT_LINUX_PPP_WITHDIRECTION = 0xa6 - DLT_LINUX_SLL = 0x71 - DLT_LOOP = 0x6c - DLT_LTALK = 0x72 - DLT_MATCHING_MAX = 0xf6 - DLT_MATCHING_MIN = 0x68 - DLT_MFR = 0xb6 - DLT_MOST = 0xd3 - DLT_MPEG_2_TS = 0xf3 - DLT_MPLS = 0xdb - DLT_MTP2 = 0x8c - DLT_MTP2_WITH_PHDR = 0x8b - DLT_MTP3 = 0x8d - DLT_MUX27010 = 0xec - DLT_NETANALYZER = 0xf0 - DLT_NETANALYZER_TRANSPARENT = 0xf1 - DLT_NFC_LLCP = 0xf5 - DLT_NFLOG = 0xef - DLT_NG40 = 0xf4 - DLT_NULL = 0x0 - DLT_PCI_EXP = 0x7d - DLT_PFLOG = 0x75 - DLT_PFSYNC = 0x79 - DLT_PPI = 0xc0 - DLT_PPP = 0x9 - DLT_PPP_BSDOS = 0x10 - DLT_PPP_ETHER = 0x33 - DLT_PPP_PPPD = 0xa6 - DLT_PPP_SERIAL = 0x32 - DLT_PPP_WITH_DIR = 0xcc - DLT_PPP_WITH_DIRECTION = 0xa6 - DLT_PRISM_HEADER = 0x77 - DLT_PRONET = 0x4 - DLT_RAIF1 = 0xc6 - DLT_RAW = 0xc - DLT_RIO = 0x7c - DLT_SCCP = 0x8e - DLT_SITA = 0xc4 - DLT_SLIP = 0x8 - DLT_SLIP_BSDOS = 0xf - DLT_STANAG_5066_D_PDU = 0xed - DLT_SUNATM = 0x7b - DLT_SYMANTEC_FIREWALL = 0x63 - DLT_TZSP = 0x80 - DLT_USB = 0xba - DLT_USB_LINUX = 0xbd - DLT_USB_LINUX_MMAPPED = 0xdc - DLT_USER0 = 0x93 - DLT_USER1 = 0x94 - DLT_USER10 = 0x9d - DLT_USER11 = 0x9e - DLT_USER12 = 0x9f - DLT_USER13 = 0xa0 - DLT_USER14 = 0xa1 - DLT_USER15 = 0xa2 - DLT_USER2 = 0x95 - DLT_USER3 = 0x96 - DLT_USER4 = 0x97 - DLT_USER5 = 0x98 - DLT_USER6 = 0x99 - DLT_USER7 = 0x9a - DLT_USER8 = 0x9b - DLT_USER9 = 0x9c - DLT_WIHART = 0xdf - DLT_X2E_SERIAL = 0xd5 - DLT_X2E_XORAYA = 0xd6 - DT_BLK = 0x6 - DT_CHR = 0x2 - DT_DIR = 0x4 - DT_FIFO = 0x1 - DT_LNK = 0xa - DT_REG = 0x8 - DT_SOCK = 0xc - DT_UNKNOWN = 0x0 - DT_WHT = 0xe - ECHO = 0x8 - ECHOCTL = 0x40 - ECHOE = 0x2 - ECHOK = 0x4 - ECHOKE = 0x1 - ECHONL = 0x10 - ECHOPRT = 0x20 - EVFILT_AIO = -0x3 - EVFILT_FS = -0x9 - EVFILT_LIO = -0xa - EVFILT_PROC = -0x5 - EVFILT_READ = -0x1 - EVFILT_SIGNAL = -0x6 - EVFILT_SYSCOUNT = 0xb - EVFILT_TIMER = -0x7 - EVFILT_USER = -0xb - EVFILT_VNODE = -0x4 - EVFILT_WRITE = -0x2 - EV_ADD = 0x1 - EV_CLEAR = 0x20 - EV_DELETE = 0x2 - EV_DISABLE = 0x8 - EV_DISPATCH = 0x80 - EV_DROP = 0x1000 - EV_ENABLE = 0x4 - EV_EOF = 0x8000 - EV_ERROR = 0x4000 - EV_FLAG1 = 0x2000 - EV_ONESHOT = 0x10 - EV_RECEIPT = 0x40 - EV_SYSFLAGS = 0xf000 - EXTA = 0x4b00 - EXTATTR_NAMESPACE_EMPTY = 0x0 - EXTATTR_NAMESPACE_SYSTEM = 0x2 - EXTATTR_NAMESPACE_USER = 0x1 - EXTB = 0x9600 - EXTPROC = 0x800 - FD_CLOEXEC = 0x1 - FD_SETSIZE = 0x400 - FLUSHO = 0x800000 - F_CANCEL = 0x5 - F_DUP2FD = 0xa - F_DUP2FD_CLOEXEC = 0x12 - F_DUPFD = 0x0 - F_DUPFD_CLOEXEC = 0x11 - F_GETFD = 0x1 - F_GETFL = 0x3 - F_GETLK = 0xb - F_GETOWN = 0x5 - F_OGETLK = 0x7 - F_OK = 0x0 - F_OSETLK = 0x8 - F_OSETLKW = 0x9 - F_RDAHEAD = 0x10 - F_RDLCK = 0x1 - F_READAHEAD = 0xf - F_SETFD = 0x2 - F_SETFL = 0x4 - F_SETLK = 0xc - F_SETLKW = 0xd - F_SETLK_REMOTE = 0xe - F_SETOWN = 0x6 - F_UNLCK = 0x2 - F_UNLCKSYS = 0x4 - F_WRLCK = 0x3 - HUPCL = 0x4000 - ICANON = 0x100 - ICMP6_FILTER = 0x12 - ICRNL = 0x100 - IEXTEN = 0x400 - IFAN_ARRIVAL = 0x0 - IFAN_DEPARTURE = 0x1 - IFF_ALLMULTI = 0x200 - IFF_ALTPHYS = 0x4000 - IFF_BROADCAST = 0x2 - IFF_CANTCHANGE = 0x218f72 - IFF_CANTCONFIG = 0x10000 - IFF_DEBUG = 0x4 - IFF_DRV_OACTIVE = 0x400 - IFF_DRV_RUNNING = 0x40 - IFF_DYING = 0x200000 - IFF_LINK0 = 0x1000 - IFF_LINK1 = 0x2000 - IFF_LINK2 = 0x4000 - IFF_LOOPBACK = 0x8 - IFF_MONITOR = 0x40000 - IFF_MULTICAST = 0x8000 - IFF_NOARP = 0x80 - IFF_OACTIVE = 0x400 - IFF_POINTOPOINT = 0x10 - IFF_PPROMISC = 0x20000 - IFF_PROMISC = 0x100 - IFF_RENAMING = 0x400000 - IFF_RUNNING = 0x40 - IFF_SIMPLEX = 0x800 - IFF_SMART = 0x20 - IFF_STATICARP = 0x80000 - IFF_UP = 0x1 - IFNAMSIZ = 0x10 - IFT_1822 = 0x2 - IFT_A12MPPSWITCH = 0x82 - IFT_AAL2 = 0xbb - IFT_AAL5 = 0x31 - IFT_ADSL = 0x5e - IFT_AFLANE8023 = 0x3b - IFT_AFLANE8025 = 0x3c - IFT_ARAP = 0x58 - IFT_ARCNET = 0x23 - IFT_ARCNETPLUS = 0x24 - IFT_ASYNC = 0x54 - IFT_ATM = 0x25 - IFT_ATMDXI = 0x69 - IFT_ATMFUNI = 0x6a - IFT_ATMIMA = 0x6b - IFT_ATMLOGICAL = 0x50 - IFT_ATMRADIO = 0xbd - IFT_ATMSUBINTERFACE = 0x86 - IFT_ATMVCIENDPT = 0xc2 - IFT_ATMVIRTUAL = 0x95 - IFT_BGPPOLICYACCOUNTING = 0xa2 - IFT_BRIDGE = 0xd1 - IFT_BSC = 0x53 - IFT_CARP = 0xf8 - IFT_CCTEMUL = 0x3d - IFT_CEPT = 0x13 - IFT_CES = 0x85 - IFT_CHANNEL = 0x46 - IFT_CNR = 0x55 - IFT_COFFEE = 0x84 - IFT_COMPOSITELINK = 0x9b - IFT_DCN = 0x8d - IFT_DIGITALPOWERLINE = 0x8a - IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba - IFT_DLSW = 0x4a - IFT_DOCSCABLEDOWNSTREAM = 0x80 - IFT_DOCSCABLEMACLAYER = 0x7f - IFT_DOCSCABLEUPSTREAM = 0x81 - IFT_DS0 = 0x51 - IFT_DS0BUNDLE = 0x52 - IFT_DS1FDL = 0xaa - IFT_DS3 = 0x1e - IFT_DTM = 0x8c - IFT_DVBASILN = 0xac - IFT_DVBASIOUT = 0xad - IFT_DVBRCCDOWNSTREAM = 0x93 - IFT_DVBRCCMACLAYER = 0x92 - IFT_DVBRCCUPSTREAM = 0x94 - IFT_ENC = 0xf4 - IFT_EON = 0x19 - IFT_EPLRS = 0x57 - IFT_ESCON = 0x49 - IFT_ETHER = 0x6 - IFT_FAITH = 0xf2 - IFT_FAST = 0x7d - IFT_FASTETHER = 0x3e - IFT_FASTETHERFX = 0x45 - IFT_FDDI = 0xf - IFT_FIBRECHANNEL = 0x38 - IFT_FRAMERELAYINTERCONNECT = 0x3a - IFT_FRAMERELAYMPI = 0x5c - IFT_FRDLCIENDPT = 0xc1 - IFT_FRELAY = 0x20 - IFT_FRELAYDCE = 0x2c - IFT_FRF16MFRBUNDLE = 0xa3 - IFT_FRFORWARD = 0x9e - IFT_G703AT2MB = 0x43 - IFT_G703AT64K = 0x42 - IFT_GIF = 0xf0 - IFT_GIGABITETHERNET = 0x75 - IFT_GR303IDT = 0xb2 - IFT_GR303RDT = 0xb1 - IFT_H323GATEKEEPER = 0xa4 - IFT_H323PROXY = 0xa5 - IFT_HDH1822 = 0x3 - IFT_HDLC = 0x76 - IFT_HDSL2 = 0xa8 - IFT_HIPERLAN2 = 0xb7 - IFT_HIPPI = 0x2f - IFT_HIPPIINTERFACE = 0x39 - IFT_HOSTPAD = 0x5a - IFT_HSSI = 0x2e - IFT_HY = 0xe - IFT_IBM370PARCHAN = 0x48 - IFT_IDSL = 0x9a - IFT_IEEE1394 = 0x90 - IFT_IEEE80211 = 0x47 - IFT_IEEE80212 = 0x37 - IFT_IEEE8023ADLAG = 0xa1 - IFT_IFGSN = 0x91 - IFT_IMT = 0xbe - IFT_INFINIBAND = 0xc7 - IFT_INTERLEAVE = 0x7c - IFT_IP = 0x7e - IFT_IPFORWARD = 0x8e - IFT_IPOVERATM = 0x72 - IFT_IPOVERCDLC = 0x6d - IFT_IPOVERCLAW = 0x6e - IFT_IPSWITCH = 0x4e - IFT_IPXIP = 0xf9 - IFT_ISDN = 0x3f - IFT_ISDNBASIC = 0x14 - IFT_ISDNPRIMARY = 0x15 - IFT_ISDNS = 0x4b - IFT_ISDNU = 0x4c - IFT_ISO88022LLC = 0x29 - IFT_ISO88023 = 0x7 - IFT_ISO88024 = 0x8 - IFT_ISO88025 = 0x9 - IFT_ISO88025CRFPINT = 0x62 - IFT_ISO88025DTR = 0x56 - IFT_ISO88025FIBER = 0x73 - IFT_ISO88026 = 0xa - IFT_ISUP = 0xb3 - IFT_L2VLAN = 0x87 - IFT_L3IPVLAN = 0x88 - IFT_L3IPXVLAN = 0x89 - IFT_LAPB = 0x10 - IFT_LAPD = 0x4d - IFT_LAPF = 0x77 - IFT_LOCALTALK = 0x2a - IFT_LOOP = 0x18 - IFT_MEDIAMAILOVERIP = 0x8b - IFT_MFSIGLINK = 0xa7 - IFT_MIOX25 = 0x26 - IFT_MODEM = 0x30 - IFT_MPC = 0x71 - IFT_MPLS = 0xa6 - IFT_MPLSTUNNEL = 0x96 - IFT_MSDSL = 0x8f - IFT_MVL = 0xbf - IFT_MYRINET = 0x63 - IFT_NFAS = 0xaf - IFT_NSIP = 0x1b - IFT_OPTICALCHANNEL = 0xc3 - IFT_OPTICALTRANSPORT = 0xc4 - IFT_OTHER = 0x1 - IFT_P10 = 0xc - IFT_P80 = 0xd - IFT_PARA = 0x22 - IFT_PFLOG = 0xf6 - IFT_PFSYNC = 0xf7 - IFT_PLC = 0xae - IFT_POS = 0xab - IFT_PPP = 0x17 - IFT_PPPMULTILINKBUNDLE = 0x6c - IFT_PROPBWAP2MP = 0xb8 - IFT_PROPCNLS = 0x59 - IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 - IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 - IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 - IFT_PROPMUX = 0x36 - IFT_PROPVIRTUAL = 0x35 - IFT_PROPWIRELESSP2P = 0x9d - IFT_PTPSERIAL = 0x16 - IFT_PVC = 0xf1 - IFT_QLLC = 0x44 - IFT_RADIOMAC = 0xbc - IFT_RADSL = 0x5f - IFT_REACHDSL = 0xc0 - IFT_RFC1483 = 0x9f - IFT_RS232 = 0x21 - IFT_RSRB = 0x4f - IFT_SDLC = 0x11 - IFT_SDSL = 0x60 - IFT_SHDSL = 0xa9 - IFT_SIP = 0x1f - IFT_SLIP = 0x1c - IFT_SMDSDXI = 0x2b - IFT_SMDSICIP = 0x34 - IFT_SONET = 0x27 - IFT_SONETOVERHEADCHANNEL = 0xb9 - IFT_SONETPATH = 0x32 - IFT_SONETVT = 0x33 - IFT_SRP = 0x97 - IFT_SS7SIGLINK = 0x9c - IFT_STACKTOSTACK = 0x6f - IFT_STARLAN = 0xb - IFT_STF = 0xd7 - IFT_T1 = 0x12 - IFT_TDLC = 0x74 - IFT_TERMPAD = 0x5b - IFT_TR008 = 0xb0 - IFT_TRANSPHDLC = 0x7b - IFT_TUNNEL = 0x83 - IFT_ULTRA = 0x1d - IFT_USB = 0xa0 - IFT_V11 = 0x40 - IFT_V35 = 0x2d - IFT_V36 = 0x41 - IFT_V37 = 0x78 - IFT_VDSL = 0x61 - IFT_VIRTUALIPADDRESS = 0x70 - IFT_VOICEEM = 0x64 - IFT_VOICEENCAP = 0x67 - IFT_VOICEFXO = 0x65 - IFT_VOICEFXS = 0x66 - IFT_VOICEOVERATM = 0x98 - IFT_VOICEOVERFRAMERELAY = 0x99 - IFT_VOICEOVERIP = 0x68 - IFT_X213 = 0x5d - IFT_X25 = 0x5 - IFT_X25DDN = 0x4 - IFT_X25HUNTGROUP = 0x7a - IFT_X25MLP = 0x79 - IFT_X25PLE = 0x28 - IFT_XETHER = 0x1a - IGNBRK = 0x1 - IGNCR = 0x80 - IGNPAR = 0x4 - IMAXBEL = 0x2000 - INLCR = 0x40 - INPCK = 0x10 - IN_CLASSA_HOST = 0xffffff - IN_CLASSA_MAX = 0x80 - IN_CLASSA_NET = 0xff000000 - IN_CLASSA_NSHIFT = 0x18 - IN_CLASSB_HOST = 0xffff - IN_CLASSB_MAX = 0x10000 - IN_CLASSB_NET = 0xffff0000 - IN_CLASSB_NSHIFT = 0x10 - IN_CLASSC_HOST = 0xff - IN_CLASSC_NET = 0xffffff00 - IN_CLASSC_NSHIFT = 0x8 - IN_CLASSD_HOST = 0xfffffff - IN_CLASSD_NET = 0xf0000000 - IN_CLASSD_NSHIFT = 0x1c - IN_LOOPBACKNET = 0x7f - IN_RFC3021_MASK = 0xfffffffe - IPPROTO_3PC = 0x22 - IPPROTO_ADFS = 0x44 - IPPROTO_AH = 0x33 - IPPROTO_AHIP = 0x3d - IPPROTO_APES = 0x63 - IPPROTO_ARGUS = 0xd - IPPROTO_AX25 = 0x5d - IPPROTO_BHA = 0x31 - IPPROTO_BLT = 0x1e - IPPROTO_BRSATMON = 0x4c - IPPROTO_CARP = 0x70 - IPPROTO_CFTP = 0x3e - IPPROTO_CHAOS = 0x10 - IPPROTO_CMTP = 0x26 - IPPROTO_CPHB = 0x49 - IPPROTO_CPNX = 0x48 - IPPROTO_DDP = 0x25 - IPPROTO_DGP = 0x56 - IPPROTO_DIVERT = 0x102 - IPPROTO_DONE = 0x101 - IPPROTO_DSTOPTS = 0x3c - IPPROTO_EGP = 0x8 - IPPROTO_EMCON = 0xe - IPPROTO_ENCAP = 0x62 - IPPROTO_EON = 0x50 - IPPROTO_ESP = 0x32 - IPPROTO_ETHERIP = 0x61 - IPPROTO_FRAGMENT = 0x2c - IPPROTO_GGP = 0x3 - IPPROTO_GMTP = 0x64 - IPPROTO_GRE = 0x2f - IPPROTO_HELLO = 0x3f - IPPROTO_HIP = 0x8b - IPPROTO_HMP = 0x14 - IPPROTO_HOPOPTS = 0x0 - IPPROTO_ICMP = 0x1 - IPPROTO_ICMPV6 = 0x3a - IPPROTO_IDP = 0x16 - IPPROTO_IDPR = 0x23 - IPPROTO_IDRP = 0x2d - IPPROTO_IGMP = 0x2 - IPPROTO_IGP = 0x55 - IPPROTO_IGRP = 0x58 - IPPROTO_IL = 0x28 - IPPROTO_INLSP = 0x34 - IPPROTO_INP = 0x20 - IPPROTO_IP = 0x0 - IPPROTO_IPCOMP = 0x6c - IPPROTO_IPCV = 0x47 - IPPROTO_IPEIP = 0x5e - IPPROTO_IPIP = 0x4 - IPPROTO_IPPC = 0x43 - IPPROTO_IPV4 = 0x4 - IPPROTO_IPV6 = 0x29 - IPPROTO_IRTP = 0x1c - IPPROTO_KRYPTOLAN = 0x41 - IPPROTO_LARP = 0x5b - IPPROTO_LEAF1 = 0x19 - IPPROTO_LEAF2 = 0x1a - IPPROTO_MAX = 0x100 - IPPROTO_MAXID = 0x34 - IPPROTO_MEAS = 0x13 - IPPROTO_MH = 0x87 - IPPROTO_MHRP = 0x30 - IPPROTO_MICP = 0x5f - IPPROTO_MOBILE = 0x37 - IPPROTO_MPLS = 0x89 - IPPROTO_MTP = 0x5c - IPPROTO_MUX = 0x12 - IPPROTO_ND = 0x4d - IPPROTO_NHRP = 0x36 - IPPROTO_NONE = 0x3b - IPPROTO_NSP = 0x1f - IPPROTO_NVPII = 0xb - IPPROTO_OLD_DIVERT = 0xfe - IPPROTO_OSPFIGP = 0x59 - IPPROTO_PFSYNC = 0xf0 - IPPROTO_PGM = 0x71 - IPPROTO_PIGP = 0x9 - IPPROTO_PIM = 0x67 - IPPROTO_PRM = 0x15 - IPPROTO_PUP = 0xc - IPPROTO_PVP = 0x4b - IPPROTO_RAW = 0xff - IPPROTO_RCCMON = 0xa - IPPROTO_RDP = 0x1b - IPPROTO_RESERVED_253 = 0xfd - IPPROTO_RESERVED_254 = 0xfe - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e - IPPROTO_RVD = 0x42 - IPPROTO_SATEXPAK = 0x40 - IPPROTO_SATMON = 0x45 - IPPROTO_SCCSP = 0x60 - IPPROTO_SCTP = 0x84 - IPPROTO_SDRP = 0x2a - IPPROTO_SEND = 0x103 - IPPROTO_SEP = 0x21 - IPPROTO_SHIM6 = 0x8c - IPPROTO_SKIP = 0x39 - IPPROTO_SPACER = 0x7fff - IPPROTO_SRPC = 0x5a - IPPROTO_ST = 0x7 - IPPROTO_SVMTP = 0x52 - IPPROTO_SWIPE = 0x35 - IPPROTO_TCF = 0x57 - IPPROTO_TCP = 0x6 - IPPROTO_TLSP = 0x38 - IPPROTO_TP = 0x1d - IPPROTO_TPXX = 0x27 - IPPROTO_TRUNK1 = 0x17 - IPPROTO_TRUNK2 = 0x18 - IPPROTO_TTP = 0x54 - IPPROTO_UDP = 0x11 - IPPROTO_UDPLITE = 0x88 - IPPROTO_VINES = 0x53 - IPPROTO_VISA = 0x46 - IPPROTO_VMTP = 0x51 - IPPROTO_WBEXPAK = 0x4f - IPPROTO_WBMON = 0x4e - IPPROTO_WSN = 0x4a - IPPROTO_XNET = 0xf - IPPROTO_XTP = 0x24 - IPV6_AUTOFLOWLABEL = 0x3b - IPV6_BINDANY = 0x40 - IPV6_BINDV6ONLY = 0x1b - IPV6_CHECKSUM = 0x1a - IPV6_DEFAULT_MULTICAST_HOPS = 0x1 - IPV6_DEFAULT_MULTICAST_LOOP = 0x1 - IPV6_DEFHLIM = 0x40 - IPV6_DONTFRAG = 0x3e - IPV6_DSTOPTS = 0x32 - IPV6_FAITH = 0x1d - IPV6_FLOWINFO_MASK = 0xffffff0f - IPV6_FLOWLABEL_MASK = 0xffff0f00 - IPV6_FRAGTTL = 0x78 - IPV6_FW_ADD = 0x1e - IPV6_FW_DEL = 0x1f - IPV6_FW_FLUSH = 0x20 - IPV6_FW_GET = 0x22 - IPV6_FW_ZERO = 0x21 - IPV6_HLIMDEC = 0x1 - IPV6_HOPLIMIT = 0x2f - IPV6_HOPOPTS = 0x31 - IPV6_IPSEC_POLICY = 0x1c - IPV6_JOIN_GROUP = 0xc - IPV6_LEAVE_GROUP = 0xd - IPV6_MAXHLIM = 0xff - IPV6_MAXOPTHDR = 0x800 - IPV6_MAXPACKET = 0xffff - IPV6_MAX_GROUP_SRC_FILTER = 0x200 - IPV6_MAX_MEMBERSHIPS = 0xfff - IPV6_MAX_SOCK_SRC_FILTER = 0x80 - IPV6_MIN_MEMBERSHIPS = 0x1f - IPV6_MMTU = 0x500 - IPV6_MSFILTER = 0x4a - IPV6_MULTICAST_HOPS = 0xa - IPV6_MULTICAST_IF = 0x9 - IPV6_MULTICAST_LOOP = 0xb - IPV6_NEXTHOP = 0x30 - IPV6_PATHMTU = 0x2c - IPV6_PKTINFO = 0x2e - IPV6_PORTRANGE = 0xe - IPV6_PORTRANGE_DEFAULT = 0x0 - IPV6_PORTRANGE_HIGH = 0x1 - IPV6_PORTRANGE_LOW = 0x2 - IPV6_PREFER_TEMPADDR = 0x3f - IPV6_RECVDSTOPTS = 0x28 - IPV6_RECVHOPLIMIT = 0x25 - IPV6_RECVHOPOPTS = 0x27 - IPV6_RECVPATHMTU = 0x2b - IPV6_RECVPKTINFO = 0x24 - IPV6_RECVRTHDR = 0x26 - IPV6_RECVTCLASS = 0x39 - IPV6_RTHDR = 0x33 - IPV6_RTHDRDSTOPTS = 0x23 - IPV6_RTHDR_LOOSE = 0x0 - IPV6_RTHDR_STRICT = 0x1 - IPV6_RTHDR_TYPE_0 = 0x0 - IPV6_SOCKOPT_RESERVED1 = 0x3 - IPV6_TCLASS = 0x3d - IPV6_UNICAST_HOPS = 0x4 - IPV6_USE_MIN_MTU = 0x2a - IPV6_V6ONLY = 0x1b - IPV6_VERSION = 0x60 - IPV6_VERSION_MASK = 0xf0 - IP_ADD_MEMBERSHIP = 0xc - IP_ADD_SOURCE_MEMBERSHIP = 0x46 - IP_BINDANY = 0x18 - IP_BLOCK_SOURCE = 0x48 - IP_DEFAULT_MULTICAST_LOOP = 0x1 - IP_DEFAULT_MULTICAST_TTL = 0x1 - IP_DF = 0x4000 - IP_DONTFRAG = 0x43 - IP_DROP_MEMBERSHIP = 0xd - IP_DROP_SOURCE_MEMBERSHIP = 0x47 - IP_DUMMYNET3 = 0x31 - IP_DUMMYNET_CONFIGURE = 0x3c - IP_DUMMYNET_DEL = 0x3d - IP_DUMMYNET_FLUSH = 0x3e - IP_DUMMYNET_GET = 0x40 - IP_FAITH = 0x16 - IP_FW3 = 0x30 - IP_FW_ADD = 0x32 - IP_FW_DEL = 0x33 - IP_FW_FLUSH = 0x34 - IP_FW_GET = 0x36 - IP_FW_NAT_CFG = 0x38 - IP_FW_NAT_DEL = 0x39 - IP_FW_NAT_GET_CONFIG = 0x3a - IP_FW_NAT_GET_LOG = 0x3b - IP_FW_RESETLOG = 0x37 - IP_FW_TABLE_ADD = 0x28 - IP_FW_TABLE_DEL = 0x29 - IP_FW_TABLE_FLUSH = 0x2a - IP_FW_TABLE_GETSIZE = 0x2b - IP_FW_TABLE_LIST = 0x2c - IP_FW_ZERO = 0x35 - IP_HDRINCL = 0x2 - IP_IPSEC_POLICY = 0x15 - IP_MAXPACKET = 0xffff - IP_MAX_GROUP_SRC_FILTER = 0x200 - IP_MAX_MEMBERSHIPS = 0xfff - IP_MAX_SOCK_MUTE_FILTER = 0x80 - IP_MAX_SOCK_SRC_FILTER = 0x80 - IP_MAX_SOURCE_FILTER = 0x400 - IP_MF = 0x2000 - IP_MINTTL = 0x42 - IP_MIN_MEMBERSHIPS = 0x1f - IP_MSFILTER = 0x4a - IP_MSS = 0x240 - IP_MULTICAST_IF = 0x9 - IP_MULTICAST_LOOP = 0xb - IP_MULTICAST_TTL = 0xa - IP_MULTICAST_VIF = 0xe - IP_OFFMASK = 0x1fff - IP_ONESBCAST = 0x17 - IP_OPTIONS = 0x1 - IP_PORTRANGE = 0x13 - IP_PORTRANGE_DEFAULT = 0x0 - IP_PORTRANGE_HIGH = 0x1 - IP_PORTRANGE_LOW = 0x2 - IP_RECVDSTADDR = 0x7 - IP_RECVIF = 0x14 - IP_RECVOPTS = 0x5 - IP_RECVRETOPTS = 0x6 - IP_RECVTOS = 0x44 - IP_RECVTTL = 0x41 - IP_RETOPTS = 0x8 - IP_RF = 0x8000 - IP_RSVP_OFF = 0x10 - IP_RSVP_ON = 0xf - IP_RSVP_VIF_OFF = 0x12 - IP_RSVP_VIF_ON = 0x11 - IP_SENDSRCADDR = 0x7 - IP_TOS = 0x3 - IP_TTL = 0x4 - IP_UNBLOCK_SOURCE = 0x49 - ISIG = 0x80 - ISTRIP = 0x20 - IXANY = 0x800 - IXOFF = 0x400 - IXON = 0x200 - LOCK_EX = 0x2 - LOCK_NB = 0x4 - LOCK_SH = 0x1 - LOCK_UN = 0x8 - MADV_AUTOSYNC = 0x7 - MADV_CORE = 0x9 - MADV_DONTNEED = 0x4 - MADV_FREE = 0x5 - MADV_NOCORE = 0x8 - MADV_NORMAL = 0x0 - MADV_NOSYNC = 0x6 - MADV_PROTECT = 0xa - MADV_RANDOM = 0x1 - MADV_SEQUENTIAL = 0x2 - MADV_WILLNEED = 0x3 - MAP_32BIT = 0x80000 - MAP_ALIGNED_SUPER = 0x1000000 - MAP_ALIGNMENT_MASK = -0x1000000 - MAP_ALIGNMENT_SHIFT = 0x18 - MAP_ANON = 0x1000 - MAP_ANONYMOUS = 0x1000 - MAP_COPY = 0x2 - MAP_EXCL = 0x4000 - MAP_FILE = 0x0 - MAP_FIXED = 0x10 - MAP_HASSEMAPHORE = 0x200 - MAP_NOCORE = 0x20000 - MAP_NORESERVE = 0x40 - MAP_NOSYNC = 0x800 - MAP_PREFAULT_READ = 0x40000 - MAP_PRIVATE = 0x2 - MAP_RENAME = 0x20 - MAP_RESERVED0080 = 0x80 - MAP_RESERVED0100 = 0x100 - MAP_SHARED = 0x1 - MAP_STACK = 0x400 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MSG_CMSG_CLOEXEC = 0x40000 - MSG_COMPAT = 0x8000 - MSG_CTRUNC = 0x20 - MSG_DONTROUTE = 0x4 - MSG_DONTWAIT = 0x80 - MSG_EOF = 0x100 - MSG_EOR = 0x8 - MSG_NBIO = 0x4000 - MSG_NOSIGNAL = 0x20000 - MSG_NOTIFICATION = 0x2000 - MSG_OOB = 0x1 - MSG_PEEK = 0x2 - MSG_TRUNC = 0x10 - MSG_WAITALL = 0x40 - MS_ASYNC = 0x1 - MS_INVALIDATE = 0x2 - MS_SYNC = 0x0 - NAME_MAX = 0xff - NET_RT_DUMP = 0x1 - NET_RT_FLAGS = 0x2 - NET_RT_IFLIST = 0x3 - NET_RT_IFLISTL = 0x5 - NET_RT_IFMALIST = 0x4 - NET_RT_MAXID = 0x6 - NOFLSH = 0x80000000 - NOTE_ATTRIB = 0x8 - NOTE_CHILD = 0x4 - NOTE_DELETE = 0x1 - NOTE_EXEC = 0x20000000 - NOTE_EXIT = 0x80000000 - NOTE_EXTEND = 0x4 - NOTE_FFAND = 0x40000000 - NOTE_FFCOPY = 0xc0000000 - NOTE_FFCTRLMASK = 0xc0000000 - NOTE_FFLAGSMASK = 0xffffff - NOTE_FFNOP = 0x0 - NOTE_FFOR = 0x80000000 - NOTE_FORK = 0x40000000 - NOTE_LINK = 0x10 - NOTE_LOWAT = 0x1 - NOTE_MSECONDS = 0x2 - NOTE_NSECONDS = 0x8 - NOTE_PCTRLMASK = 0xf0000000 - NOTE_PDATAMASK = 0xfffff - NOTE_RENAME = 0x20 - NOTE_REVOKE = 0x40 - NOTE_SECONDS = 0x1 - NOTE_TRACK = 0x1 - NOTE_TRACKERR = 0x2 - NOTE_TRIGGER = 0x1000000 - NOTE_USECONDS = 0x4 - NOTE_WRITE = 0x2 - OCRNL = 0x10 - ONLCR = 0x2 - ONLRET = 0x40 - ONOCR = 0x20 - ONOEOT = 0x8 - OPOST = 0x1 - O_ACCMODE = 0x3 - O_APPEND = 0x8 - O_ASYNC = 0x40 - O_CLOEXEC = 0x100000 - O_CREAT = 0x200 - O_DIRECT = 0x10000 - O_DIRECTORY = 0x20000 - O_EXCL = 0x800 - O_EXEC = 0x40000 - O_EXLOCK = 0x20 - O_FSYNC = 0x80 - O_NDELAY = 0x4 - O_NOCTTY = 0x8000 - O_NOFOLLOW = 0x100 - O_NONBLOCK = 0x4 - O_RDONLY = 0x0 - O_RDWR = 0x2 - O_SHLOCK = 0x10 - O_SYNC = 0x80 - O_TRUNC = 0x400 - O_TTY_INIT = 0x80000 - O_WRONLY = 0x1 - PARENB = 0x1000 - PARMRK = 0x8 - PARODD = 0x2000 - PENDIN = 0x20000000 - PRIO_PGRP = 0x1 - PRIO_PROCESS = 0x0 - PRIO_USER = 0x2 - PROT_EXEC = 0x4 - PROT_NONE = 0x0 - PROT_READ = 0x1 - PROT_WRITE = 0x2 - RLIMIT_AS = 0xa - RLIMIT_CORE = 0x4 - RLIMIT_CPU = 0x0 - RLIMIT_DATA = 0x2 - RLIMIT_FSIZE = 0x1 - RLIMIT_NOFILE = 0x8 - RLIMIT_STACK = 0x3 - RLIM_INFINITY = 0x7fffffffffffffff - RTAX_AUTHOR = 0x6 - RTAX_BRD = 0x7 - RTAX_DST = 0x0 - RTAX_GATEWAY = 0x1 - RTAX_GENMASK = 0x3 - RTAX_IFA = 0x5 - RTAX_IFP = 0x4 - RTAX_MAX = 0x8 - RTAX_NETMASK = 0x2 - RTA_AUTHOR = 0x40 - RTA_BRD = 0x80 - RTA_DST = 0x1 - RTA_GATEWAY = 0x2 - RTA_GENMASK = 0x8 - RTA_IFA = 0x20 - RTA_IFP = 0x10 - RTA_NETMASK = 0x4 - RTF_BLACKHOLE = 0x1000 - RTF_BROADCAST = 0x400000 - RTF_DONE = 0x40 - RTF_DYNAMIC = 0x10 - RTF_FMASK = 0x1004d808 - RTF_GATEWAY = 0x2 - RTF_GWFLAG_COMPAT = 0x80000000 - RTF_HOST = 0x4 - RTF_LLDATA = 0x400 - RTF_LLINFO = 0x400 - RTF_LOCAL = 0x200000 - RTF_MODIFIED = 0x20 - RTF_MULTICAST = 0x800000 - RTF_PINNED = 0x100000 - RTF_PRCLONING = 0x10000 - RTF_PROTO1 = 0x8000 - RTF_PROTO2 = 0x4000 - RTF_PROTO3 = 0x40000 - RTF_REJECT = 0x8 - RTF_RNH_LOCKED = 0x40000000 - RTF_STATIC = 0x800 - RTF_STICKY = 0x10000000 - RTF_UP = 0x1 - RTF_XRESOLVE = 0x200 - RTM_ADD = 0x1 - RTM_CHANGE = 0x3 - RTM_DELADDR = 0xd - RTM_DELETE = 0x2 - RTM_DELMADDR = 0x10 - RTM_GET = 0x4 - RTM_IEEE80211 = 0x12 - RTM_IFANNOUNCE = 0x11 - RTM_IFINFO = 0xe - RTM_LOCK = 0x8 - RTM_LOSING = 0x5 - RTM_MISS = 0x7 - RTM_NEWADDR = 0xc - RTM_NEWMADDR = 0xf - RTM_OLDADD = 0x9 - RTM_OLDDEL = 0xa - RTM_REDIRECT = 0x6 - RTM_RESOLVE = 0xb - RTM_RTTUNIT = 0xf4240 - RTM_VERSION = 0x5 - RTV_EXPIRE = 0x4 - RTV_HOPCOUNT = 0x2 - RTV_MTU = 0x1 - RTV_RPIPE = 0x8 - RTV_RTT = 0x40 - RTV_RTTVAR = 0x80 - RTV_SPIPE = 0x10 - RTV_SSTHRESH = 0x20 - RTV_WEIGHT = 0x100 - RT_ALL_FIBS = -0x1 - RT_CACHING_CONTEXT = 0x1 - RT_DEFAULT_FIB = 0x0 - RT_NORTREF = 0x2 - RUSAGE_CHILDREN = -0x1 - RUSAGE_SELF = 0x0 - RUSAGE_THREAD = 0x1 - SCM_BINTIME = 0x4 - SCM_CREDS = 0x3 - SCM_RIGHTS = 0x1 - SCM_TIMESTAMP = 0x2 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 - SIOCADDMULTI = 0x80206931 - SIOCADDRT = 0x8040720a - SIOCAIFADDR = 0x8040691a - SIOCAIFGROUP = 0x80286987 - SIOCALIFADDR = 0x8118691b - SIOCATMARK = 0x40047307 - SIOCDELMULTI = 0x80206932 - SIOCDELRT = 0x8040720b - SIOCDIFADDR = 0x80206919 - SIOCDIFGROUP = 0x80286989 - SIOCDIFPHYADDR = 0x80206949 - SIOCDLIFADDR = 0x8118691d - SIOCGDRVSPEC = 0xc028697b - SIOCGETSGCNT = 0xc0207210 - SIOCGETVIFCNT = 0xc028720f - SIOCGHIWAT = 0x40047301 - SIOCGIFADDR = 0xc0206921 - SIOCGIFBRDADDR = 0xc0206923 - SIOCGIFCAP = 0xc020691f - SIOCGIFCONF = 0xc0106924 - SIOCGIFDESCR = 0xc020692a - SIOCGIFDSTADDR = 0xc0206922 - SIOCGIFFIB = 0xc020695c - SIOCGIFFLAGS = 0xc0206911 - SIOCGIFGENERIC = 0xc020693a - SIOCGIFGMEMB = 0xc028698a - SIOCGIFGROUP = 0xc0286988 - SIOCGIFINDEX = 0xc0206920 - SIOCGIFMAC = 0xc0206926 - SIOCGIFMEDIA = 0xc0306938 - SIOCGIFMETRIC = 0xc0206917 - SIOCGIFMTU = 0xc0206933 - SIOCGIFNETMASK = 0xc0206925 - SIOCGIFPDSTADDR = 0xc0206948 - SIOCGIFPHYS = 0xc0206935 - SIOCGIFPSRCADDR = 0xc0206947 - SIOCGIFSTATUS = 0xc331693b - SIOCGLIFADDR = 0xc118691c - SIOCGLIFPHYADDR = 0xc118694b - SIOCGLOWAT = 0x40047303 - SIOCGPGRP = 0x40047309 - SIOCGPRIVATE_0 = 0xc0206950 - SIOCGPRIVATE_1 = 0xc0206951 - SIOCIFCREATE = 0xc020697a - SIOCIFCREATE2 = 0xc020697c - SIOCIFDESTROY = 0x80206979 - SIOCIFGCLONERS = 0xc0106978 - SIOCSDRVSPEC = 0x8028697b - SIOCSHIWAT = 0x80047300 - SIOCSIFADDR = 0x8020690c - SIOCSIFBRDADDR = 0x80206913 - SIOCSIFCAP = 0x8020691e - SIOCSIFDESCR = 0x80206929 - SIOCSIFDSTADDR = 0x8020690e - SIOCSIFFIB = 0x8020695d - SIOCSIFFLAGS = 0x80206910 - SIOCSIFGENERIC = 0x80206939 - SIOCSIFLLADDR = 0x8020693c - SIOCSIFMAC = 0x80206927 - SIOCSIFMEDIA = 0xc0206937 - SIOCSIFMETRIC = 0x80206918 - SIOCSIFMTU = 0x80206934 - SIOCSIFNAME = 0x80206928 - SIOCSIFNETMASK = 0x80206916 - SIOCSIFPHYADDR = 0x80406946 - SIOCSIFPHYS = 0x80206936 - SIOCSIFRVNET = 0xc020695b - SIOCSIFVNET = 0xc020695a - SIOCSLIFPHYADDR = 0x8118694a - SIOCSLOWAT = 0x80047302 - SIOCSPGRP = 0x80047308 - SOCK_CLOEXEC = 0x10000000 - SOCK_DGRAM = 0x2 - SOCK_MAXADDRLEN = 0xff - SOCK_NONBLOCK = 0x20000000 - SOCK_RAW = 0x3 - SOCK_RDM = 0x4 - SOCK_SEQPACKET = 0x5 - SOCK_STREAM = 0x1 - SOL_SOCKET = 0xffff - SOMAXCONN = 0x80 - SO_ACCEPTCONN = 0x2 - SO_ACCEPTFILTER = 0x1000 - SO_BINTIME = 0x2000 - SO_BROADCAST = 0x20 - SO_DEBUG = 0x1 - SO_DONTROUTE = 0x10 - SO_ERROR = 0x1007 - SO_KEEPALIVE = 0x8 - SO_LABEL = 0x1009 - SO_LINGER = 0x80 - SO_LISTENINCQLEN = 0x1013 - SO_LISTENQLEN = 0x1012 - SO_LISTENQLIMIT = 0x1011 - SO_NOSIGPIPE = 0x800 - SO_NO_DDP = 0x8000 - SO_NO_OFFLOAD = 0x4000 - SO_OOBINLINE = 0x100 - SO_PEERLABEL = 0x1010 - SO_PROTOCOL = 0x1016 - SO_PROTOTYPE = 0x1016 - SO_RCVBUF = 0x1002 - SO_RCVLOWAT = 0x1004 - SO_RCVTIMEO = 0x1006 - SO_REUSEADDR = 0x4 - SO_REUSEPORT = 0x200 - SO_SETFIB = 0x1014 - SO_SNDBUF = 0x1001 - SO_SNDLOWAT = 0x1003 - SO_SNDTIMEO = 0x1005 - SO_TIMESTAMP = 0x400 - SO_TYPE = 0x1008 - SO_USELOOPBACK = 0x40 - SO_USER_COOKIE = 0x1015 - SO_VENDOR = 0x80000000 - TCIFLUSH = 0x1 - TCIOFLUSH = 0x3 - TCOFLUSH = 0x2 - TCP_CA_NAME_MAX = 0x10 - TCP_CONGESTION = 0x40 - TCP_INFO = 0x20 - TCP_KEEPCNT = 0x400 - TCP_KEEPIDLE = 0x100 - TCP_KEEPINIT = 0x80 - TCP_KEEPINTVL = 0x200 - TCP_MAXBURST = 0x4 - TCP_MAXHLEN = 0x3c - TCP_MAXOLEN = 0x28 - TCP_MAXSEG = 0x2 - TCP_MAXWIN = 0xffff - TCP_MAX_SACK = 0x4 - TCP_MAX_WINSHIFT = 0xe - TCP_MD5SIG = 0x10 - TCP_MINMSS = 0xd8 - TCP_MSS = 0x218 - TCP_NODELAY = 0x1 - TCP_NOOPT = 0x8 - TCP_NOPUSH = 0x4 - TCP_VENDOR = 0x80000000 - TCSAFLUSH = 0x2 - TIOCCBRK = 0x2000747a - TIOCCDTR = 0x20007478 - TIOCCONS = 0x80047462 - TIOCDRAIN = 0x2000745e - TIOCEXCL = 0x2000740d - TIOCEXT = 0x80047460 - TIOCFLUSH = 0x80047410 - TIOCGDRAINWAIT = 0x40047456 - TIOCGETA = 0x402c7413 - TIOCGETD = 0x4004741a - TIOCGPGRP = 0x40047477 - TIOCGPTN = 0x4004740f - TIOCGSID = 0x40047463 - TIOCGWINSZ = 0x40087468 - TIOCMBIC = 0x8004746b - TIOCMBIS = 0x8004746c - TIOCMGDTRWAIT = 0x4004745a - TIOCMGET = 0x4004746a - TIOCMSDTRWAIT = 0x8004745b - TIOCMSET = 0x8004746d - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DCD = 0x40 - TIOCM_DSR = 0x100 - TIOCM_DTR = 0x2 - TIOCM_LE = 0x1 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_RTS = 0x4 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x20007471 - TIOCNXCL = 0x2000740e - TIOCOUTQ = 0x40047473 - TIOCPKT = 0x80047470 - TIOCPKT_DATA = 0x0 - TIOCPKT_DOSTOP = 0x20 - TIOCPKT_FLUSHREAD = 0x1 - TIOCPKT_FLUSHWRITE = 0x2 - TIOCPKT_IOCTL = 0x40 - TIOCPKT_NOSTOP = 0x10 - TIOCPKT_START = 0x8 - TIOCPKT_STOP = 0x4 - TIOCPTMASTER = 0x2000741c - TIOCSBRK = 0x2000747b - TIOCSCTTY = 0x20007461 - TIOCSDRAINWAIT = 0x80047457 - TIOCSDTR = 0x20007479 - TIOCSETA = 0x802c7414 - TIOCSETAF = 0x802c7416 - TIOCSETAW = 0x802c7415 - TIOCSETD = 0x8004741b - TIOCSIG = 0x2004745f - TIOCSPGRP = 0x80047476 - TIOCSTART = 0x2000746e - TIOCSTAT = 0x20007465 - TIOCSTI = 0x80017472 - TIOCSTOP = 0x2000746f - TIOCSWINSZ = 0x80087467 - TIOCTIMESTAMP = 0x40107459 - TIOCUCNTL = 0x80047466 - TOSTOP = 0x400000 - VDISCARD = 0xf - VDSUSP = 0xb - VEOF = 0x0 - VEOL = 0x1 - VEOL2 = 0x2 - VERASE = 0x3 - VERASE2 = 0x7 - VINTR = 0x8 - VKILL = 0x5 - VLNEXT = 0xe - VMIN = 0x10 - VQUIT = 0x9 - VREPRINT = 0x6 - VSTART = 0xc - VSTATUS = 0x12 - VSTOP = 0xd - VSUSP = 0xa - VTIME = 0x11 - VWERASE = 0x4 - WCONTINUED = 0x4 - WCOREFLAG = 0x80 - WEXITED = 0x10 - WLINUXCLONE = 0x80000000 - WNOHANG = 0x1 - WNOWAIT = 0x8 - WSTOPPED = 0x2 - WTRAPPED = 0x20 - WUNTRACED = 0x2 + AF_APPLETALK = 0x10 + AF_ARP = 0x23 + AF_ATM = 0x1e + AF_BLUETOOTH = 0x24 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1c + AF_INET6_SDP = 0x2a + AF_INET_SDP = 0x28 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x2a + AF_NATM = 0x1d + AF_NETBIOS = 0x6 + AF_NETGRAPH = 0x20 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SCLUSTER = 0x22 + AF_SIP = 0x18 + AF_SLOW = 0x21 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VENDOR00 = 0x27 + AF_VENDOR01 = 0x29 + AF_VENDOR02 = 0x2b + AF_VENDOR03 = 0x2d + AF_VENDOR04 = 0x2f + AF_VENDOR05 = 0x31 + AF_VENDOR06 = 0x33 + AF_VENDOR07 = 0x35 + AF_VENDOR08 = 0x37 + AF_VENDOR09 = 0x39 + AF_VENDOR10 = 0x3b + AF_VENDOR11 = 0x3d + AF_VENDOR12 = 0x3f + AF_VENDOR13 = 0x41 + AF_VENDOR14 = 0x43 + AF_VENDOR15 = 0x45 + AF_VENDOR16 = 0x47 + AF_VENDOR17 = 0x49 + AF_VENDOR18 = 0x4b + AF_VENDOR19 = 0x4d + AF_VENDOR20 = 0x4f + AF_VENDOR21 = 0x51 + AF_VENDOR22 = 0x53 + AF_VENDOR23 = 0x55 + AF_VENDOR24 = 0x57 + AF_VENDOR25 = 0x59 + AF_VENDOR26 = 0x5b + AF_VENDOR27 = 0x5d + AF_VENDOR28 = 0x5f + AF_VENDOR29 = 0x61 + AF_VENDOR30 = 0x63 + AF_VENDOR31 = 0x65 + AF_VENDOR32 = 0x67 + AF_VENDOR33 = 0x69 + AF_VENDOR34 = 0x6b + AF_VENDOR35 = 0x6d + AF_VENDOR36 = 0x6f + AF_VENDOR37 = 0x71 + AF_VENDOR38 = 0x73 + AF_VENDOR39 = 0x75 + AF_VENDOR40 = 0x77 + AF_VENDOR41 = 0x79 + AF_VENDOR42 = 0x7b + AF_VENDOR43 = 0x7d + AF_VENDOR44 = 0x7f + AF_VENDOR45 = 0x81 + AF_VENDOR46 = 0x83 + AF_VENDOR47 = 0x85 + ALTWERASE = 0x200 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427c + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRECTION = 0x40044276 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0104279 + BIOCGETBUFMODE = 0x4004427d + BIOCGETIF = 0x4020426b + BIOCGETZMAX = 0x4008427f + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCGTSTAMP = 0x40044283 + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x2000427a + BIOCPROMISC = 0x20004269 + BIOCROTZBUF = 0x40184280 + BIOCSBLEN = 0xc0044266 + BIOCSDIRECTION = 0x80044277 + BIOCSDLT = 0x80044278 + BIOCSETBUFMODE = 0x8004427e + BIOCSETF = 0x80104267 + BIOCSETFNR = 0x80104282 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x8010427b + BIOCSETZBUF = 0x80184281 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCSTSTAMP = 0x80044284 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x8 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_BUFMODE_BUFFER = 0x1 + BPF_BUFMODE_ZBUF = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_T_BINTIME = 0x2 + BPF_T_BINTIME_FAST = 0x102 + BPF_T_BINTIME_MONOTONIC = 0x202 + BPF_T_BINTIME_MONOTONIC_FAST = 0x302 + BPF_T_FAST = 0x100 + BPF_T_FLAG_MASK = 0x300 + BPF_T_FORMAT_MASK = 0x3 + BPF_T_MICROTIME = 0x0 + BPF_T_MICROTIME_FAST = 0x100 + BPF_T_MICROTIME_MONOTONIC = 0x200 + BPF_T_MICROTIME_MONOTONIC_FAST = 0x300 + BPF_T_MONOTONIC = 0x200 + BPF_T_MONOTONIC_FAST = 0x300 + BPF_T_NANOTIME = 0x1 + BPF_T_NANOTIME_FAST = 0x101 + BPF_T_NANOTIME_MONOTONIC = 0x201 + BPF_T_NANOTIME_MONOTONIC_FAST = 0x301 + BPF_T_NONE = 0x3 + BPF_T_NORMAL = 0x0 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + CAP_ACCEPT = 0x200000020000000 + CAP_ACL_CHECK = 0x400000000010000 + CAP_ACL_DELETE = 0x400000000020000 + CAP_ACL_GET = 0x400000000040000 + CAP_ACL_SET = 0x400000000080000 + CAP_ALL0 = 0x20007ffffffffff + CAP_ALL1 = 0x4000000001fffff + CAP_BIND = 0x200000040000000 + CAP_BINDAT = 0x200008000000400 + CAP_CHFLAGSAT = 0x200000000001400 + CAP_CONNECT = 0x200000080000000 + CAP_CONNECTAT = 0x200010000000400 + CAP_CREATE = 0x200000000000040 + CAP_EVENT = 0x400000000000020 + CAP_EXTATTR_DELETE = 0x400000000001000 + CAP_EXTATTR_GET = 0x400000000002000 + CAP_EXTATTR_LIST = 0x400000000004000 + CAP_EXTATTR_SET = 0x400000000008000 + CAP_FCHDIR = 0x200000000000800 + CAP_FCHFLAGS = 0x200000000001000 + CAP_FCHMOD = 0x200000000002000 + CAP_FCHMODAT = 0x200000000002400 + CAP_FCHOWN = 0x200000000004000 + CAP_FCHOWNAT = 0x200000000004400 + CAP_FCNTL = 0x200000000008000 + CAP_FCNTL_ALL = 0x78 + CAP_FCNTL_GETFL = 0x8 + CAP_FCNTL_GETOWN = 0x20 + CAP_FCNTL_SETFL = 0x10 + CAP_FCNTL_SETOWN = 0x40 + CAP_FEXECVE = 0x200000000000080 + CAP_FLOCK = 0x200000000010000 + CAP_FPATHCONF = 0x200000000020000 + CAP_FSCK = 0x200000000040000 + CAP_FSTAT = 0x200000000080000 + CAP_FSTATAT = 0x200000000080400 + CAP_FSTATFS = 0x200000000100000 + CAP_FSYNC = 0x200000000000100 + CAP_FTRUNCATE = 0x200000000000200 + CAP_FUTIMES = 0x200000000200000 + CAP_FUTIMESAT = 0x200000000200400 + CAP_GETPEERNAME = 0x200000100000000 + CAP_GETSOCKNAME = 0x200000200000000 + CAP_GETSOCKOPT = 0x200000400000000 + CAP_IOCTL = 0x400000000000080 + CAP_IOCTLS_ALL = 0x7fffffffffffffff + CAP_KQUEUE = 0x400000000100040 + CAP_KQUEUE_CHANGE = 0x400000000100000 + CAP_KQUEUE_EVENT = 0x400000000000040 + CAP_LINKAT_SOURCE = 0x200020000000400 + CAP_LINKAT_TARGET = 0x200000000400400 + CAP_LISTEN = 0x200000800000000 + CAP_LOOKUP = 0x200000000000400 + CAP_MAC_GET = 0x400000000000001 + CAP_MAC_SET = 0x400000000000002 + CAP_MKDIRAT = 0x200000000800400 + CAP_MKFIFOAT = 0x200000001000400 + CAP_MKNODAT = 0x200000002000400 + CAP_MMAP = 0x200000000000010 + CAP_MMAP_R = 0x20000000000001d + CAP_MMAP_RW = 0x20000000000001f + CAP_MMAP_RWX = 0x20000000000003f + CAP_MMAP_RX = 0x20000000000003d + CAP_MMAP_W = 0x20000000000001e + CAP_MMAP_WX = 0x20000000000003e + CAP_MMAP_X = 0x20000000000003c + CAP_PDGETPID = 0x400000000000200 + CAP_PDKILL = 0x400000000000800 + CAP_PDWAIT = 0x400000000000400 + CAP_PEELOFF = 0x200001000000000 + CAP_POLL_EVENT = 0x400000000000020 + CAP_PREAD = 0x20000000000000d + CAP_PWRITE = 0x20000000000000e + CAP_READ = 0x200000000000001 + CAP_RECV = 0x200000000000001 + CAP_RENAMEAT_SOURCE = 0x200000004000400 + CAP_RENAMEAT_TARGET = 0x200040000000400 + CAP_RIGHTS_VERSION = 0x0 + CAP_RIGHTS_VERSION_00 = 0x0 + CAP_SEEK = 0x20000000000000c + CAP_SEEK_TELL = 0x200000000000004 + CAP_SEM_GETVALUE = 0x400000000000004 + CAP_SEM_POST = 0x400000000000008 + CAP_SEM_WAIT = 0x400000000000010 + CAP_SEND = 0x200000000000002 + CAP_SETSOCKOPT = 0x200002000000000 + CAP_SHUTDOWN = 0x200004000000000 + CAP_SOCK_CLIENT = 0x200007780000003 + CAP_SOCK_SERVER = 0x200007f60000003 + CAP_SYMLINKAT = 0x200000008000400 + CAP_TTYHOOK = 0x400000000000100 + CAP_UNLINKAT = 0x200000010000400 + CAP_UNUSED0_44 = 0x200080000000000 + CAP_UNUSED0_57 = 0x300000000000000 + CAP_UNUSED1_22 = 0x400000000200000 + CAP_UNUSED1_57 = 0x500000000000000 + CAP_WRITE = 0x200000000000002 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x4 + CLOCK_MONOTONIC_FAST = 0xc + CLOCK_MONOTONIC_PRECISE = 0xb + CLOCK_PROCESS_CPUTIME_ID = 0xf + CLOCK_PROF = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_FAST = 0xa + CLOCK_REALTIME_PRECISE = 0x9 + CLOCK_SECOND = 0xd + CLOCK_THREAD_CPUTIME_ID = 0xe + CLOCK_UPTIME = 0x5 + CLOCK_UPTIME_FAST = 0x8 + CLOCK_UPTIME_PRECISE = 0x7 + CLOCK_VIRTUAL = 0x1 + CREAD = 0x800 + CRTSCTS = 0x30000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0x18 + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_BREDR_BB = 0xff + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_BLUETOOTH_LE_LL = 0xfb + DLT_BLUETOOTH_LE_LL_WITH_PHDR = 0x100 + DLT_BLUETOOTH_LINUX_MONITOR = 0xfe + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_EPON = 0x103 + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_INFINIBAND = 0xf7 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPMI_HPM_2 = 0x104 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0x104 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NETLINK = 0xfd + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x79 + DLT_PKTAP = 0x102 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PROFIBUS_DL = 0x101 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RIO = 0x7c + DLT_RTAC_SERIAL = 0xfa + DLT_SCCP = 0x8e + DLT_SCTP = 0xf8 + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USBPCAP = 0xf9 + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WIHART = 0xdf + DLT_WIRESHARK_UPPER_PDU = 0xfc + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_FS = -0x9 + EVFILT_LIO = -0xa + EVFILT_PROC = -0x5 + EVFILT_PROCDESC = -0x8 + EVFILT_READ = -0x1 + EVFILT_SENDFILE = -0xc + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xc + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xb + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_DROP = 0x1000 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_FLAG2 = 0x4000 + EV_FORCEONESHOT = 0x100 + EV_ONESHOT = 0x10 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTATTR_NAMESPACE_EMPTY = 0x0 + EXTATTR_NAMESPACE_SYSTEM = 0x2 + EXTATTR_NAMESPACE_USER = 0x1 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_CANCEL = 0x5 + F_DUP2FD = 0xa + F_DUP2FD_CLOEXEC = 0x12 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x11 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0xb + F_GETOWN = 0x5 + F_OGETLK = 0x7 + F_OK = 0x0 + F_OSETLK = 0x8 + F_OSETLKW = 0x9 + F_RDAHEAD = 0x10 + F_RDLCK = 0x1 + F_READAHEAD = 0xf + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0xc + F_SETLKW = 0xd + F_SETLK_REMOTE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_UNLCKSYS = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x218f52 + IFF_CANTCONFIG = 0x10000 + IFF_DEBUG = 0x4 + IFF_DRV_OACTIVE = 0x400 + IFF_DRV_RUNNING = 0x40 + IFF_DYING = 0x200000 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MONITOR = 0x40000 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PPROMISC = 0x20000 + IFF_PROMISC = 0x100 + IFF_RENAMING = 0x400000 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_STATICARP = 0x80000 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_IEEE1394 = 0x90 + IFT_INFINIBAND = 0xc7 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_PPP = 0x17 + IFT_PROPVIRTUAL = 0x35 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_MASK = 0xfffffffe + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CARP = 0x70 + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0x102 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HIP = 0x8b + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MEAS = 0x13 + IPPROTO_MH = 0x87 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OLD_DIVERT = 0xfe + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_RESERVED_253 = 0xfd + IPPROTO_RESERVED_254 = 0xfe + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEND = 0x103 + IPPROTO_SEP = 0x21 + IPPROTO_SHIM6 = 0x8c + IPPROTO_SKIP = 0x39 + IPPROTO_SPACER = 0x7fff + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TLSP = 0x38 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_BINDANY = 0x40 + IPV6_BINDMULTI = 0x41 + IPV6_BINDV6ONLY = 0x1b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FLOWID = 0x43 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FLOWTYPE = 0x44 + IPV6_FRAGTTL = 0x78 + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MSFILTER = 0x4a + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_PREFER_TEMPADDR = 0x3f + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVFLOWID = 0x46 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRSSBUCKETID = 0x47 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RSSBUCKETID = 0x45 + IPV6_RSS_LISTEN_BUCKET = 0x42 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BINDANY = 0x18 + IP_BINDMULTI = 0x19 + IP_BLOCK_SOURCE = 0x48 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DONTFRAG = 0x43 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET3 = 0x31 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FLOWID = 0x5a + IP_FLOWTYPE = 0x5b + IP_FW3 = 0x30 + IP_FW_ADD = 0x32 + IP_FW_DEL = 0x33 + IP_FW_FLUSH = 0x34 + IP_FW_GET = 0x36 + IP_FW_NAT_CFG = 0x38 + IP_FW_NAT_DEL = 0x39 + IP_FW_NAT_GET_CONFIG = 0x3a + IP_FW_NAT_GET_LOG = 0x3b + IP_FW_RESETLOG = 0x37 + IP_FW_TABLE_ADD = 0x28 + IP_FW_TABLE_DEL = 0x29 + IP_FW_TABLE_FLUSH = 0x2a + IP_FW_TABLE_GETSIZE = 0x2b + IP_FW_TABLE_LIST = 0x2c + IP_FW_ZERO = 0x35 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MAX_SOURCE_FILTER = 0x400 + IP_MF = 0x2000 + IP_MINTTL = 0x42 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_OFFMASK = 0x1fff + IP_ONESBCAST = 0x17 + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVFLOWID = 0x5d + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVRSSBUCKETID = 0x5e + IP_RECVTOS = 0x44 + IP_RECVTTL = 0x41 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSSBUCKETID = 0x5c + IP_RSS_LISTEN_BUCKET = 0x1a + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_SENDSRCADDR = 0x7 + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_AUTOSYNC = 0x7 + MADV_CORE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_NOCORE = 0x8 + MADV_NORMAL = 0x0 + MADV_NOSYNC = 0x6 + MADV_PROTECT = 0xa + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MAP_32BIT = 0x80000 + MAP_ALIGNED_SUPER = 0x1000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_EXCL = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_NOCORE = 0x20000 + MAP_NOSYNC = 0x800 + MAP_PREFAULT_READ = 0x40000 + MAP_PRIVATE = 0x2 + MAP_RESERVED0020 = 0x20 + MAP_RESERVED0040 = 0x40 + MAP_RESERVED0080 = 0x80 + MAP_RESERVED0100 = 0x100 + MAP_SHARED = 0x1 + MAP_STACK = 0x400 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ACLS = 0x8000000 + MNT_ASYNC = 0x40 + MNT_AUTOMOUNTED = 0x200000000 + MNT_BYFSID = 0x8000000 + MNT_CMDFLAGS = 0xd0f0000 + MNT_DEFEXPORTED = 0x200 + MNT_DELEXPORT = 0x20000 + MNT_EXKERB = 0x800 + MNT_EXPORTANON = 0x400 + MNT_EXPORTED = 0x100 + MNT_EXPUBLIC = 0x20000000 + MNT_EXRDONLY = 0x80 + MNT_FORCE = 0x80000 + MNT_GJOURNAL = 0x2000000 + MNT_IGNORE = 0x800000 + MNT_LAZY = 0x3 + MNT_LOCAL = 0x1000 + MNT_MULTILABEL = 0x4000000 + MNT_NFS4ACLS = 0x10 + MNT_NOATIME = 0x10000000 + MNT_NOCLUSTERR = 0x40000000 + MNT_NOCLUSTERW = 0x80000000 + MNT_NOEXEC = 0x4 + MNT_NONBUSY = 0x4000000 + MNT_NOSUID = 0x8 + MNT_NOSYMFOLLOW = 0x400000 + MNT_NOWAIT = 0x2 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SNAPSHOT = 0x1000000 + MNT_SOFTDEP = 0x200000 + MNT_SUIDDIR = 0x100000 + MNT_SUJ = 0x100000000 + MNT_SUSPEND = 0x4 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UPDATE = 0x10000 + MNT_UPDATEMASK = 0x2d8d0807e + MNT_USER = 0x8000 + MNT_VISFLAGMASK = 0x3fef0ffff + MNT_WAIT = 0x1 + MSG_CMSG_CLOEXEC = 0x40000 + MSG_COMPAT = 0x8000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_NBIO = 0x4000 + MSG_NOSIGNAL = 0x20000 + MSG_NOTIFICATION = 0x2000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITFORONE = 0x80000 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x0 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLISTL = 0x5 + NET_RT_IFMALIST = 0x4 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_CLOSE = 0x100 + NOTE_CLOSE_WRITE = 0x200 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FILE_POLL = 0x2 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_MSECONDS = 0x2 + NOTE_NSECONDS = 0x8 + NOTE_OPEN = 0x80 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_READ = 0x400 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x4 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x100000 + O_CREAT = 0x200 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x20000 + O_EXCL = 0x800 + O_EXEC = 0x40000 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_TTY_INIT = 0x80000 + O_VERIFY = 0x200000 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FIXEDMTU = 0x80000 + RTF_FMASK = 0x1004d808 + RTF_GATEWAY = 0x2 + RTF_GWFLAG_COMPAT = 0x80000000 + RTF_HOST = 0x4 + RTF_LLDATA = 0x400 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_PINNED = 0x100000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_REJECT = 0x8 + RTF_RNH_LOCKED = 0x40000000 + RTF_STATIC = 0x800 + RTF_STICKY = 0x10000000 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x12 + RTM_IFANNOUNCE = 0x11 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RTV_WEIGHT = 0x100 + RT_ALL_FIBS = -0x1 + RT_BLACKHOLE = 0x40 + RT_CACHING_CONTEXT = 0x1 + RT_DEFAULT_FIB = 0x0 + RT_HAS_GW = 0x80 + RT_HAS_HEADER = 0x10 + RT_HAS_HEADER_BIT = 0x4 + RT_L2_ME = 0x4 + RT_L2_ME_BIT = 0x2 + RT_LLE_CACHE = 0x100 + RT_MAY_LOOP = 0x8 + RT_MAY_LOOP_BIT = 0x3 + RT_NORTREF = 0x2 + RT_REJECT = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_BINTIME = 0x4 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80286987 + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80286989 + SIOCDIFPHYADDR = 0x80206949 + SIOCGDRVSPEC = 0xc028697b + SIOCGETSGCNT = 0xc0207210 + SIOCGETVIFCNT = 0xc028720f + SIOCGHIWAT = 0x40047301 + SIOCGI2C = 0xc020693d + SIOCGIFADDR = 0xc0206921 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020691f + SIOCGIFCONF = 0xc0106924 + SIOCGIFDESCR = 0xc020692a + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFIB = 0xc020695c + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc028698a + SIOCGIFGROUP = 0xc0286988 + SIOCGIFINDEX = 0xc0206920 + SIOCGIFMAC = 0xc0206926 + SIOCGIFMEDIA = 0xc0306938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFSTATUS = 0xc331693b + SIOCGIFXMEDIA = 0xc030698b + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGPRIVATE_0 = 0xc0206950 + SIOCGPRIVATE_1 = 0xc0206951 + SIOCGTUNFIB = 0xc020695e + SIOCIFCREATE = 0xc020697a + SIOCIFCREATE2 = 0xc020697c + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106978 + SIOCSDRVSPEC = 0x8028697b + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020691e + SIOCSIFDESCR = 0x80206929 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFIB = 0x8020695d + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206927 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNAME = 0x80206928 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPHYS = 0x80206936 + SIOCSIFRVNET = 0xc020695b + SIOCSIFVNET = 0xc020695a + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSTUNFIB = 0x8020695f + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_NONBLOCK = 0x20000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BINTIME = 0x2000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1009 + SO_LINGER = 0x80 + SO_LISTENINCQLEN = 0x1013 + SO_LISTENQLEN = 0x1012 + SO_LISTENQLIMIT = 0x1011 + SO_NOSIGPIPE = 0x800 + SO_NO_DDP = 0x8000 + SO_NO_OFFLOAD = 0x4000 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1010 + SO_PROTOCOL = 0x1016 + SO_PROTOTYPE = 0x1016 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SETFIB = 0x1014 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_USER_COOKIE = 0x1015 + SO_VENDOR = 0x80000000 + TAB0 = 0x0 + TAB3 = 0x4 + TABDLY = 0x4 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCP_CA_NAME_MAX = 0x10 + TCP_CCALGOOPT = 0x41 + TCP_CONGESTION = 0x40 + TCP_FASTOPEN = 0x401 + TCP_FUNCTION_BLK = 0x2000 + TCP_FUNCTION_NAME_LEN_MAX = 0x20 + TCP_INFO = 0x20 + TCP_KEEPCNT = 0x400 + TCP_KEEPIDLE = 0x100 + TCP_KEEPINIT = 0x80 + TCP_KEEPINTVL = 0x200 + TCP_MAXBURST = 0x4 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_PCAP_IN = 0x1000 + TCP_PCAP_OUT = 0x800 + TCP_VENDOR = 0x80000000 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGPTN = 0x4004740f + TIOCGSID = 0x40047463 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DCD = 0x40 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMASTER = 0x2000741c + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VERASE2 = 0x7 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x4 + WCOREFLAG = 0x80 + WEXITED = 0x10 + WLINUXCLONE = 0x80000000 + WNOHANG = 0x1 + WNOWAIT = 0x8 + WSTOPPED = 0x2 + WTRAPPED = 0x20 + WUNTRACED = 0x2 ) // Errors diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go index 2afbe2d..9bbb90a 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go +++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go @@ -1,5 +1,5 @@ // mkerrors.sh -// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT +// Code generated by the command above; see README.md. DO NOT EDIT. // +build arm,freebsd @@ -11,1442 +11,1478 @@ package unix import "syscall" const ( - AF_APPLETALK = 0x10 - AF_ARP = 0x23 - AF_ATM = 0x1e - AF_BLUETOOTH = 0x24 - AF_CCITT = 0xa - AF_CHAOS = 0x5 - AF_CNT = 0x15 - AF_COIP = 0x14 - AF_DATAKIT = 0x9 - AF_DECnet = 0xc - AF_DLI = 0xd - AF_E164 = 0x1a - AF_ECMA = 0x8 - AF_HYLINK = 0xf - AF_IEEE80211 = 0x25 - AF_IMPLINK = 0x3 - AF_INET = 0x2 - AF_INET6 = 0x1c - AF_INET6_SDP = 0x2a - AF_INET_SDP = 0x28 - AF_IPX = 0x17 - AF_ISDN = 0x1a - AF_ISO = 0x7 - AF_LAT = 0xe - AF_LINK = 0x12 - AF_LOCAL = 0x1 - AF_MAX = 0x2a - AF_NATM = 0x1d - AF_NETBIOS = 0x6 - AF_NETGRAPH = 0x20 - AF_OSI = 0x7 - AF_PUP = 0x4 - AF_ROUTE = 0x11 - AF_SCLUSTER = 0x22 - AF_SIP = 0x18 - AF_SLOW = 0x21 - AF_SNA = 0xb - AF_UNIX = 0x1 - AF_UNSPEC = 0x0 - AF_VENDOR00 = 0x27 - AF_VENDOR01 = 0x29 - AF_VENDOR02 = 0x2b - AF_VENDOR03 = 0x2d - AF_VENDOR04 = 0x2f - AF_VENDOR05 = 0x31 - AF_VENDOR06 = 0x33 - AF_VENDOR07 = 0x35 - AF_VENDOR08 = 0x37 - AF_VENDOR09 = 0x39 - AF_VENDOR10 = 0x3b - AF_VENDOR11 = 0x3d - AF_VENDOR12 = 0x3f - AF_VENDOR13 = 0x41 - AF_VENDOR14 = 0x43 - AF_VENDOR15 = 0x45 - AF_VENDOR16 = 0x47 - AF_VENDOR17 = 0x49 - AF_VENDOR18 = 0x4b - AF_VENDOR19 = 0x4d - AF_VENDOR20 = 0x4f - AF_VENDOR21 = 0x51 - AF_VENDOR22 = 0x53 - AF_VENDOR23 = 0x55 - AF_VENDOR24 = 0x57 - AF_VENDOR25 = 0x59 - AF_VENDOR26 = 0x5b - AF_VENDOR27 = 0x5d - AF_VENDOR28 = 0x5f - AF_VENDOR29 = 0x61 - AF_VENDOR30 = 0x63 - AF_VENDOR31 = 0x65 - AF_VENDOR32 = 0x67 - AF_VENDOR33 = 0x69 - AF_VENDOR34 = 0x6b - AF_VENDOR35 = 0x6d - AF_VENDOR36 = 0x6f - AF_VENDOR37 = 0x71 - AF_VENDOR38 = 0x73 - AF_VENDOR39 = 0x75 - AF_VENDOR40 = 0x77 - AF_VENDOR41 = 0x79 - AF_VENDOR42 = 0x7b - AF_VENDOR43 = 0x7d - AF_VENDOR44 = 0x7f - AF_VENDOR45 = 0x81 - AF_VENDOR46 = 0x83 - AF_VENDOR47 = 0x85 - B0 = 0x0 - B110 = 0x6e - B115200 = 0x1c200 - B1200 = 0x4b0 - B134 = 0x86 - B14400 = 0x3840 - B150 = 0x96 - B1800 = 0x708 - B19200 = 0x4b00 - B200 = 0xc8 - B230400 = 0x38400 - B2400 = 0x960 - B28800 = 0x7080 - B300 = 0x12c - B38400 = 0x9600 - B460800 = 0x70800 - B4800 = 0x12c0 - B50 = 0x32 - B57600 = 0xe100 - B600 = 0x258 - B7200 = 0x1c20 - B75 = 0x4b - B76800 = 0x12c00 - B921600 = 0xe1000 - B9600 = 0x2580 - BIOCFEEDBACK = 0x8004427c - BIOCFLUSH = 0x20004268 - BIOCGBLEN = 0x40044266 - BIOCGDIRECTION = 0x40044276 - BIOCGDLT = 0x4004426a - BIOCGDLTLIST = 0xc0084279 - BIOCGETBUFMODE = 0x4004427d - BIOCGETIF = 0x4020426b - BIOCGETZMAX = 0x4004427f - BIOCGHDRCMPLT = 0x40044274 - BIOCGRSIG = 0x40044272 - BIOCGRTIMEOUT = 0x4008426e - BIOCGSEESENT = 0x40044276 - BIOCGSTATS = 0x4008426f - BIOCGTSTAMP = 0x40044283 - BIOCIMMEDIATE = 0x80044270 - BIOCLOCK = 0x2000427a - BIOCPROMISC = 0x20004269 - BIOCROTZBUF = 0x400c4280 - BIOCSBLEN = 0xc0044266 - BIOCSDIRECTION = 0x80044277 - BIOCSDLT = 0x80044278 - BIOCSETBUFMODE = 0x8004427e - BIOCSETF = 0x80084267 - BIOCSETFNR = 0x80084282 - BIOCSETIF = 0x8020426c - BIOCSETWF = 0x8008427b - BIOCSETZBUF = 0x800c4281 - BIOCSHDRCMPLT = 0x80044275 - BIOCSRSIG = 0x80044273 - BIOCSRTIMEOUT = 0x8008426d - BIOCSSEESENT = 0x80044277 - BIOCSTSTAMP = 0x80044284 - BIOCVERSION = 0x40044271 - BPF_A = 0x10 - BPF_ABS = 0x20 - BPF_ADD = 0x0 - BPF_ALIGNMENT = 0x4 - BPF_ALU = 0x4 - BPF_AND = 0x50 - BPF_B = 0x10 - BPF_BUFMODE_BUFFER = 0x1 - BPF_BUFMODE_ZBUF = 0x2 - BPF_DIV = 0x30 - BPF_H = 0x8 - BPF_IMM = 0x0 - BPF_IND = 0x40 - BPF_JA = 0x0 - BPF_JEQ = 0x10 - BPF_JGE = 0x30 - BPF_JGT = 0x20 - BPF_JMP = 0x5 - BPF_JSET = 0x40 - BPF_K = 0x0 - BPF_LD = 0x0 - BPF_LDX = 0x1 - BPF_LEN = 0x80 - BPF_LSH = 0x60 - BPF_MAJOR_VERSION = 0x1 - BPF_MAXBUFSIZE = 0x80000 - BPF_MAXINSNS = 0x200 - BPF_MEM = 0x60 - BPF_MEMWORDS = 0x10 - BPF_MINBUFSIZE = 0x20 - BPF_MINOR_VERSION = 0x1 - BPF_MISC = 0x7 - BPF_MSH = 0xa0 - BPF_MUL = 0x20 - BPF_NEG = 0x80 - BPF_OR = 0x40 - BPF_RELEASE = 0x30bb6 - BPF_RET = 0x6 - BPF_RSH = 0x70 - BPF_ST = 0x2 - BPF_STX = 0x3 - BPF_SUB = 0x10 - BPF_TAX = 0x0 - BPF_TXA = 0x80 - BPF_T_BINTIME = 0x2 - BPF_T_BINTIME_FAST = 0x102 - BPF_T_BINTIME_MONOTONIC = 0x202 - BPF_T_BINTIME_MONOTONIC_FAST = 0x302 - BPF_T_FAST = 0x100 - BPF_T_FLAG_MASK = 0x300 - BPF_T_FORMAT_MASK = 0x3 - BPF_T_MICROTIME = 0x0 - BPF_T_MICROTIME_FAST = 0x100 - BPF_T_MICROTIME_MONOTONIC = 0x200 - BPF_T_MICROTIME_MONOTONIC_FAST = 0x300 - BPF_T_MONOTONIC = 0x200 - BPF_T_MONOTONIC_FAST = 0x300 - BPF_T_NANOTIME = 0x1 - BPF_T_NANOTIME_FAST = 0x101 - BPF_T_NANOTIME_MONOTONIC = 0x201 - BPF_T_NANOTIME_MONOTONIC_FAST = 0x301 - BPF_T_NONE = 0x3 - BPF_T_NORMAL = 0x0 - BPF_W = 0x0 - BPF_X = 0x8 - BRKINT = 0x2 - CFLUSH = 0xf - CLOCAL = 0x8000 - CREAD = 0x800 - CS5 = 0x0 - CS6 = 0x100 - CS7 = 0x200 - CS8 = 0x300 - CSIZE = 0x300 - CSTART = 0x11 - CSTATUS = 0x14 - CSTOP = 0x13 - CSTOPB = 0x400 - CSUSP = 0x1a - CTL_MAXNAME = 0x18 - CTL_NET = 0x4 - DLT_A429 = 0xb8 - DLT_A653_ICM = 0xb9 - DLT_AIRONET_HEADER = 0x78 - DLT_AOS = 0xde - DLT_APPLE_IP_OVER_IEEE1394 = 0x8a - DLT_ARCNET = 0x7 - DLT_ARCNET_LINUX = 0x81 - DLT_ATM_CLIP = 0x13 - DLT_ATM_RFC1483 = 0xb - DLT_AURORA = 0x7e - DLT_AX25 = 0x3 - DLT_AX25_KISS = 0xca - DLT_BACNET_MS_TP = 0xa5 - DLT_BLUETOOTH_HCI_H4 = 0xbb - DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 - DLT_CAN20B = 0xbe - DLT_CAN_SOCKETCAN = 0xe3 - DLT_CHAOS = 0x5 - DLT_CHDLC = 0x68 - DLT_CISCO_IOS = 0x76 - DLT_C_HDLC = 0x68 - DLT_C_HDLC_WITH_DIR = 0xcd - DLT_DBUS = 0xe7 - DLT_DECT = 0xdd - DLT_DOCSIS = 0x8f - DLT_DVB_CI = 0xeb - DLT_ECONET = 0x73 - DLT_EN10MB = 0x1 - DLT_EN3MB = 0x2 - DLT_ENC = 0x6d - DLT_ERF = 0xc5 - DLT_ERF_ETH = 0xaf - DLT_ERF_POS = 0xb0 - DLT_FC_2 = 0xe0 - DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 - DLT_FDDI = 0xa - DLT_FLEXRAY = 0xd2 - DLT_FRELAY = 0x6b - DLT_FRELAY_WITH_DIR = 0xce - DLT_GCOM_SERIAL = 0xad - DLT_GCOM_T1E1 = 0xac - DLT_GPF_F = 0xab - DLT_GPF_T = 0xaa - DLT_GPRS_LLC = 0xa9 - DLT_GSMTAP_ABIS = 0xda - DLT_GSMTAP_UM = 0xd9 - DLT_HHDLC = 0x79 - DLT_IBM_SN = 0x92 - DLT_IBM_SP = 0x91 - DLT_IEEE802 = 0x6 - DLT_IEEE802_11 = 0x69 - DLT_IEEE802_11_RADIO = 0x7f - DLT_IEEE802_11_RADIO_AVS = 0xa3 - DLT_IEEE802_15_4 = 0xc3 - DLT_IEEE802_15_4_LINUX = 0xbf - DLT_IEEE802_15_4_NOFCS = 0xe6 - DLT_IEEE802_15_4_NONASK_PHY = 0xd7 - DLT_IEEE802_16_MAC_CPS = 0xbc - DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 - DLT_IPFILTER = 0x74 - DLT_IPMB = 0xc7 - DLT_IPMB_LINUX = 0xd1 - DLT_IPNET = 0xe2 - DLT_IPOIB = 0xf2 - DLT_IPV4 = 0xe4 - DLT_IPV6 = 0xe5 - DLT_IP_OVER_FC = 0x7a - DLT_JUNIPER_ATM1 = 0x89 - DLT_JUNIPER_ATM2 = 0x87 - DLT_JUNIPER_ATM_CEMIC = 0xee - DLT_JUNIPER_CHDLC = 0xb5 - DLT_JUNIPER_ES = 0x84 - DLT_JUNIPER_ETHER = 0xb2 - DLT_JUNIPER_FIBRECHANNEL = 0xea - DLT_JUNIPER_FRELAY = 0xb4 - DLT_JUNIPER_GGSN = 0x85 - DLT_JUNIPER_ISM = 0xc2 - DLT_JUNIPER_MFR = 0x86 - DLT_JUNIPER_MLFR = 0x83 - DLT_JUNIPER_MLPPP = 0x82 - DLT_JUNIPER_MONITOR = 0xa4 - DLT_JUNIPER_PIC_PEER = 0xae - DLT_JUNIPER_PPP = 0xb3 - DLT_JUNIPER_PPPOE = 0xa7 - DLT_JUNIPER_PPPOE_ATM = 0xa8 - DLT_JUNIPER_SERVICES = 0x88 - DLT_JUNIPER_SRX_E2E = 0xe9 - DLT_JUNIPER_ST = 0xc8 - DLT_JUNIPER_VP = 0xb7 - DLT_JUNIPER_VS = 0xe8 - DLT_LAPB_WITH_DIR = 0xcf - DLT_LAPD = 0xcb - DLT_LIN = 0xd4 - DLT_LINUX_EVDEV = 0xd8 - DLT_LINUX_IRDA = 0x90 - DLT_LINUX_LAPD = 0xb1 - DLT_LINUX_PPP_WITHDIRECTION = 0xa6 - DLT_LINUX_SLL = 0x71 - DLT_LOOP = 0x6c - DLT_LTALK = 0x72 - DLT_MATCHING_MAX = 0xf6 - DLT_MATCHING_MIN = 0x68 - DLT_MFR = 0xb6 - DLT_MOST = 0xd3 - DLT_MPEG_2_TS = 0xf3 - DLT_MPLS = 0xdb - DLT_MTP2 = 0x8c - DLT_MTP2_WITH_PHDR = 0x8b - DLT_MTP3 = 0x8d - DLT_MUX27010 = 0xec - DLT_NETANALYZER = 0xf0 - DLT_NETANALYZER_TRANSPARENT = 0xf1 - DLT_NFC_LLCP = 0xf5 - DLT_NFLOG = 0xef - DLT_NG40 = 0xf4 - DLT_NULL = 0x0 - DLT_PCI_EXP = 0x7d - DLT_PFLOG = 0x75 - DLT_PFSYNC = 0x79 - DLT_PPI = 0xc0 - DLT_PPP = 0x9 - DLT_PPP_BSDOS = 0x10 - DLT_PPP_ETHER = 0x33 - DLT_PPP_PPPD = 0xa6 - DLT_PPP_SERIAL = 0x32 - DLT_PPP_WITH_DIR = 0xcc - DLT_PPP_WITH_DIRECTION = 0xa6 - DLT_PRISM_HEADER = 0x77 - DLT_PRONET = 0x4 - DLT_RAIF1 = 0xc6 - DLT_RAW = 0xc - DLT_RIO = 0x7c - DLT_SCCP = 0x8e - DLT_SITA = 0xc4 - DLT_SLIP = 0x8 - DLT_SLIP_BSDOS = 0xf - DLT_STANAG_5066_D_PDU = 0xed - DLT_SUNATM = 0x7b - DLT_SYMANTEC_FIREWALL = 0x63 - DLT_TZSP = 0x80 - DLT_USB = 0xba - DLT_USB_LINUX = 0xbd - DLT_USB_LINUX_MMAPPED = 0xdc - DLT_USER0 = 0x93 - DLT_USER1 = 0x94 - DLT_USER10 = 0x9d - DLT_USER11 = 0x9e - DLT_USER12 = 0x9f - DLT_USER13 = 0xa0 - DLT_USER14 = 0xa1 - DLT_USER15 = 0xa2 - DLT_USER2 = 0x95 - DLT_USER3 = 0x96 - DLT_USER4 = 0x97 - DLT_USER5 = 0x98 - DLT_USER6 = 0x99 - DLT_USER7 = 0x9a - DLT_USER8 = 0x9b - DLT_USER9 = 0x9c - DLT_WIHART = 0xdf - DLT_X2E_SERIAL = 0xd5 - DLT_X2E_XORAYA = 0xd6 - DT_BLK = 0x6 - DT_CHR = 0x2 - DT_DIR = 0x4 - DT_FIFO = 0x1 - DT_LNK = 0xa - DT_REG = 0x8 - DT_SOCK = 0xc - DT_UNKNOWN = 0x0 - DT_WHT = 0xe - ECHO = 0x8 - ECHOCTL = 0x40 - ECHOE = 0x2 - ECHOK = 0x4 - ECHOKE = 0x1 - ECHONL = 0x10 - ECHOPRT = 0x20 - EVFILT_AIO = -0x3 - EVFILT_FS = -0x9 - EVFILT_LIO = -0xa - EVFILT_PROC = -0x5 - EVFILT_READ = -0x1 - EVFILT_SIGNAL = -0x6 - EVFILT_SYSCOUNT = 0xb - EVFILT_TIMER = -0x7 - EVFILT_USER = -0xb - EVFILT_VNODE = -0x4 - EVFILT_WRITE = -0x2 - EV_ADD = 0x1 - EV_CLEAR = 0x20 - EV_DELETE = 0x2 - EV_DISABLE = 0x8 - EV_DISPATCH = 0x80 - EV_DROP = 0x1000 - EV_ENABLE = 0x4 - EV_EOF = 0x8000 - EV_ERROR = 0x4000 - EV_FLAG1 = 0x2000 - EV_ONESHOT = 0x10 - EV_RECEIPT = 0x40 - EV_SYSFLAGS = 0xf000 - EXTA = 0x4b00 - EXTATTR_NAMESPACE_EMPTY = 0x0 - EXTATTR_NAMESPACE_SYSTEM = 0x2 - EXTATTR_NAMESPACE_USER = 0x1 - EXTB = 0x9600 - EXTPROC = 0x800 - FD_CLOEXEC = 0x1 - FD_SETSIZE = 0x400 - FLUSHO = 0x800000 - F_CANCEL = 0x5 - F_DUP2FD = 0xa - F_DUP2FD_CLOEXEC = 0x12 - F_DUPFD = 0x0 - F_DUPFD_CLOEXEC = 0x11 - F_GETFD = 0x1 - F_GETFL = 0x3 - F_GETLK = 0xb - F_GETOWN = 0x5 - F_OGETLK = 0x7 - F_OK = 0x0 - F_OSETLK = 0x8 - F_OSETLKW = 0x9 - F_RDAHEAD = 0x10 - F_RDLCK = 0x1 - F_READAHEAD = 0xf - F_SETFD = 0x2 - F_SETFL = 0x4 - F_SETLK = 0xc - F_SETLKW = 0xd - F_SETLK_REMOTE = 0xe - F_SETOWN = 0x6 - F_UNLCK = 0x2 - F_UNLCKSYS = 0x4 - F_WRLCK = 0x3 - HUPCL = 0x4000 - ICANON = 0x100 - ICMP6_FILTER = 0x12 - ICRNL = 0x100 - IEXTEN = 0x400 - IFAN_ARRIVAL = 0x0 - IFAN_DEPARTURE = 0x1 - IFF_ALLMULTI = 0x200 - IFF_ALTPHYS = 0x4000 - IFF_BROADCAST = 0x2 - IFF_CANTCHANGE = 0x218f72 - IFF_CANTCONFIG = 0x10000 - IFF_DEBUG = 0x4 - IFF_DRV_OACTIVE = 0x400 - IFF_DRV_RUNNING = 0x40 - IFF_DYING = 0x200000 - IFF_LINK0 = 0x1000 - IFF_LINK1 = 0x2000 - IFF_LINK2 = 0x4000 - IFF_LOOPBACK = 0x8 - IFF_MONITOR = 0x40000 - IFF_MULTICAST = 0x8000 - IFF_NOARP = 0x80 - IFF_OACTIVE = 0x400 - IFF_POINTOPOINT = 0x10 - IFF_PPROMISC = 0x20000 - IFF_PROMISC = 0x100 - IFF_RENAMING = 0x400000 - IFF_RUNNING = 0x40 - IFF_SIMPLEX = 0x800 - IFF_SMART = 0x20 - IFF_STATICARP = 0x80000 - IFF_UP = 0x1 - IFNAMSIZ = 0x10 - IFT_1822 = 0x2 - IFT_A12MPPSWITCH = 0x82 - IFT_AAL2 = 0xbb - IFT_AAL5 = 0x31 - IFT_ADSL = 0x5e - IFT_AFLANE8023 = 0x3b - IFT_AFLANE8025 = 0x3c - IFT_ARAP = 0x58 - IFT_ARCNET = 0x23 - IFT_ARCNETPLUS = 0x24 - IFT_ASYNC = 0x54 - IFT_ATM = 0x25 - IFT_ATMDXI = 0x69 - IFT_ATMFUNI = 0x6a - IFT_ATMIMA = 0x6b - IFT_ATMLOGICAL = 0x50 - IFT_ATMRADIO = 0xbd - IFT_ATMSUBINTERFACE = 0x86 - IFT_ATMVCIENDPT = 0xc2 - IFT_ATMVIRTUAL = 0x95 - IFT_BGPPOLICYACCOUNTING = 0xa2 - IFT_BRIDGE = 0xd1 - IFT_BSC = 0x53 - IFT_CARP = 0xf8 - IFT_CCTEMUL = 0x3d - IFT_CEPT = 0x13 - IFT_CES = 0x85 - IFT_CHANNEL = 0x46 - IFT_CNR = 0x55 - IFT_COFFEE = 0x84 - IFT_COMPOSITELINK = 0x9b - IFT_DCN = 0x8d - IFT_DIGITALPOWERLINE = 0x8a - IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba - IFT_DLSW = 0x4a - IFT_DOCSCABLEDOWNSTREAM = 0x80 - IFT_DOCSCABLEMACLAYER = 0x7f - IFT_DOCSCABLEUPSTREAM = 0x81 - IFT_DS0 = 0x51 - IFT_DS0BUNDLE = 0x52 - IFT_DS1FDL = 0xaa - IFT_DS3 = 0x1e - IFT_DTM = 0x8c - IFT_DVBASILN = 0xac - IFT_DVBASIOUT = 0xad - IFT_DVBRCCDOWNSTREAM = 0x93 - IFT_DVBRCCMACLAYER = 0x92 - IFT_DVBRCCUPSTREAM = 0x94 - IFT_ENC = 0xf4 - IFT_EON = 0x19 - IFT_EPLRS = 0x57 - IFT_ESCON = 0x49 - IFT_ETHER = 0x6 - IFT_FAITH = 0xf2 - IFT_FAST = 0x7d - IFT_FASTETHER = 0x3e - IFT_FASTETHERFX = 0x45 - IFT_FDDI = 0xf - IFT_FIBRECHANNEL = 0x38 - IFT_FRAMERELAYINTERCONNECT = 0x3a - IFT_FRAMERELAYMPI = 0x5c - IFT_FRDLCIENDPT = 0xc1 - IFT_FRELAY = 0x20 - IFT_FRELAYDCE = 0x2c - IFT_FRF16MFRBUNDLE = 0xa3 - IFT_FRFORWARD = 0x9e - IFT_G703AT2MB = 0x43 - IFT_G703AT64K = 0x42 - IFT_GIF = 0xf0 - IFT_GIGABITETHERNET = 0x75 - IFT_GR303IDT = 0xb2 - IFT_GR303RDT = 0xb1 - IFT_H323GATEKEEPER = 0xa4 - IFT_H323PROXY = 0xa5 - IFT_HDH1822 = 0x3 - IFT_HDLC = 0x76 - IFT_HDSL2 = 0xa8 - IFT_HIPERLAN2 = 0xb7 - IFT_HIPPI = 0x2f - IFT_HIPPIINTERFACE = 0x39 - IFT_HOSTPAD = 0x5a - IFT_HSSI = 0x2e - IFT_HY = 0xe - IFT_IBM370PARCHAN = 0x48 - IFT_IDSL = 0x9a - IFT_IEEE1394 = 0x90 - IFT_IEEE80211 = 0x47 - IFT_IEEE80212 = 0x37 - IFT_IEEE8023ADLAG = 0xa1 - IFT_IFGSN = 0x91 - IFT_IMT = 0xbe - IFT_INFINIBAND = 0xc7 - IFT_INTERLEAVE = 0x7c - IFT_IP = 0x7e - IFT_IPFORWARD = 0x8e - IFT_IPOVERATM = 0x72 - IFT_IPOVERCDLC = 0x6d - IFT_IPOVERCLAW = 0x6e - IFT_IPSWITCH = 0x4e - IFT_IPXIP = 0xf9 - IFT_ISDN = 0x3f - IFT_ISDNBASIC = 0x14 - IFT_ISDNPRIMARY = 0x15 - IFT_ISDNS = 0x4b - IFT_ISDNU = 0x4c - IFT_ISO88022LLC = 0x29 - IFT_ISO88023 = 0x7 - IFT_ISO88024 = 0x8 - IFT_ISO88025 = 0x9 - IFT_ISO88025CRFPINT = 0x62 - IFT_ISO88025DTR = 0x56 - IFT_ISO88025FIBER = 0x73 - IFT_ISO88026 = 0xa - IFT_ISUP = 0xb3 - IFT_L2VLAN = 0x87 - IFT_L3IPVLAN = 0x88 - IFT_L3IPXVLAN = 0x89 - IFT_LAPB = 0x10 - IFT_LAPD = 0x4d - IFT_LAPF = 0x77 - IFT_LOCALTALK = 0x2a - IFT_LOOP = 0x18 - IFT_MEDIAMAILOVERIP = 0x8b - IFT_MFSIGLINK = 0xa7 - IFT_MIOX25 = 0x26 - IFT_MODEM = 0x30 - IFT_MPC = 0x71 - IFT_MPLS = 0xa6 - IFT_MPLSTUNNEL = 0x96 - IFT_MSDSL = 0x8f - IFT_MVL = 0xbf - IFT_MYRINET = 0x63 - IFT_NFAS = 0xaf - IFT_NSIP = 0x1b - IFT_OPTICALCHANNEL = 0xc3 - IFT_OPTICALTRANSPORT = 0xc4 - IFT_OTHER = 0x1 - IFT_P10 = 0xc - IFT_P80 = 0xd - IFT_PARA = 0x22 - IFT_PFLOG = 0xf6 - IFT_PFSYNC = 0xf7 - IFT_PLC = 0xae - IFT_POS = 0xab - IFT_PPP = 0x17 - IFT_PPPMULTILINKBUNDLE = 0x6c - IFT_PROPBWAP2MP = 0xb8 - IFT_PROPCNLS = 0x59 - IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 - IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 - IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 - IFT_PROPMUX = 0x36 - IFT_PROPVIRTUAL = 0x35 - IFT_PROPWIRELESSP2P = 0x9d - IFT_PTPSERIAL = 0x16 - IFT_PVC = 0xf1 - IFT_QLLC = 0x44 - IFT_RADIOMAC = 0xbc - IFT_RADSL = 0x5f - IFT_REACHDSL = 0xc0 - IFT_RFC1483 = 0x9f - IFT_RS232 = 0x21 - IFT_RSRB = 0x4f - IFT_SDLC = 0x11 - IFT_SDSL = 0x60 - IFT_SHDSL = 0xa9 - IFT_SIP = 0x1f - IFT_SLIP = 0x1c - IFT_SMDSDXI = 0x2b - IFT_SMDSICIP = 0x34 - IFT_SONET = 0x27 - IFT_SONETOVERHEADCHANNEL = 0xb9 - IFT_SONETPATH = 0x32 - IFT_SONETVT = 0x33 - IFT_SRP = 0x97 - IFT_SS7SIGLINK = 0x9c - IFT_STACKTOSTACK = 0x6f - IFT_STARLAN = 0xb - IFT_STF = 0xd7 - IFT_T1 = 0x12 - IFT_TDLC = 0x74 - IFT_TERMPAD = 0x5b - IFT_TR008 = 0xb0 - IFT_TRANSPHDLC = 0x7b - IFT_TUNNEL = 0x83 - IFT_ULTRA = 0x1d - IFT_USB = 0xa0 - IFT_V11 = 0x40 - IFT_V35 = 0x2d - IFT_V36 = 0x41 - IFT_V37 = 0x78 - IFT_VDSL = 0x61 - IFT_VIRTUALIPADDRESS = 0x70 - IFT_VOICEEM = 0x64 - IFT_VOICEENCAP = 0x67 - IFT_VOICEFXO = 0x65 - IFT_VOICEFXS = 0x66 - IFT_VOICEOVERATM = 0x98 - IFT_VOICEOVERFRAMERELAY = 0x99 - IFT_VOICEOVERIP = 0x68 - IFT_X213 = 0x5d - IFT_X25 = 0x5 - IFT_X25DDN = 0x4 - IFT_X25HUNTGROUP = 0x7a - IFT_X25MLP = 0x79 - IFT_X25PLE = 0x28 - IFT_XETHER = 0x1a - IGNBRK = 0x1 - IGNCR = 0x80 - IGNPAR = 0x4 - IMAXBEL = 0x2000 - INLCR = 0x40 - INPCK = 0x10 - IN_CLASSA_HOST = 0xffffff - IN_CLASSA_MAX = 0x80 - IN_CLASSA_NET = 0xff000000 - IN_CLASSA_NSHIFT = 0x18 - IN_CLASSB_HOST = 0xffff - IN_CLASSB_MAX = 0x10000 - IN_CLASSB_NET = 0xffff0000 - IN_CLASSB_NSHIFT = 0x10 - IN_CLASSC_HOST = 0xff - IN_CLASSC_NET = 0xffffff00 - IN_CLASSC_NSHIFT = 0x8 - IN_CLASSD_HOST = 0xfffffff - IN_CLASSD_NET = 0xf0000000 - IN_CLASSD_NSHIFT = 0x1c - IN_LOOPBACKNET = 0x7f - IN_RFC3021_MASK = 0xfffffffe - IPPROTO_3PC = 0x22 - IPPROTO_ADFS = 0x44 - IPPROTO_AH = 0x33 - IPPROTO_AHIP = 0x3d - IPPROTO_APES = 0x63 - IPPROTO_ARGUS = 0xd - IPPROTO_AX25 = 0x5d - IPPROTO_BHA = 0x31 - IPPROTO_BLT = 0x1e - IPPROTO_BRSATMON = 0x4c - IPPROTO_CARP = 0x70 - IPPROTO_CFTP = 0x3e - IPPROTO_CHAOS = 0x10 - IPPROTO_CMTP = 0x26 - IPPROTO_CPHB = 0x49 - IPPROTO_CPNX = 0x48 - IPPROTO_DDP = 0x25 - IPPROTO_DGP = 0x56 - IPPROTO_DIVERT = 0x102 - IPPROTO_DONE = 0x101 - IPPROTO_DSTOPTS = 0x3c - IPPROTO_EGP = 0x8 - IPPROTO_EMCON = 0xe - IPPROTO_ENCAP = 0x62 - IPPROTO_EON = 0x50 - IPPROTO_ESP = 0x32 - IPPROTO_ETHERIP = 0x61 - IPPROTO_FRAGMENT = 0x2c - IPPROTO_GGP = 0x3 - IPPROTO_GMTP = 0x64 - IPPROTO_GRE = 0x2f - IPPROTO_HELLO = 0x3f - IPPROTO_HIP = 0x8b - IPPROTO_HMP = 0x14 - IPPROTO_HOPOPTS = 0x0 - IPPROTO_ICMP = 0x1 - IPPROTO_ICMPV6 = 0x3a - IPPROTO_IDP = 0x16 - IPPROTO_IDPR = 0x23 - IPPROTO_IDRP = 0x2d - IPPROTO_IGMP = 0x2 - IPPROTO_IGP = 0x55 - IPPROTO_IGRP = 0x58 - IPPROTO_IL = 0x28 - IPPROTO_INLSP = 0x34 - IPPROTO_INP = 0x20 - IPPROTO_IP = 0x0 - IPPROTO_IPCOMP = 0x6c - IPPROTO_IPCV = 0x47 - IPPROTO_IPEIP = 0x5e - IPPROTO_IPIP = 0x4 - IPPROTO_IPPC = 0x43 - IPPROTO_IPV4 = 0x4 - IPPROTO_IPV6 = 0x29 - IPPROTO_IRTP = 0x1c - IPPROTO_KRYPTOLAN = 0x41 - IPPROTO_LARP = 0x5b - IPPROTO_LEAF1 = 0x19 - IPPROTO_LEAF2 = 0x1a - IPPROTO_MAX = 0x100 - IPPROTO_MAXID = 0x34 - IPPROTO_MEAS = 0x13 - IPPROTO_MH = 0x87 - IPPROTO_MHRP = 0x30 - IPPROTO_MICP = 0x5f - IPPROTO_MOBILE = 0x37 - IPPROTO_MPLS = 0x89 - IPPROTO_MTP = 0x5c - IPPROTO_MUX = 0x12 - IPPROTO_ND = 0x4d - IPPROTO_NHRP = 0x36 - IPPROTO_NONE = 0x3b - IPPROTO_NSP = 0x1f - IPPROTO_NVPII = 0xb - IPPROTO_OLD_DIVERT = 0xfe - IPPROTO_OSPFIGP = 0x59 - IPPROTO_PFSYNC = 0xf0 - IPPROTO_PGM = 0x71 - IPPROTO_PIGP = 0x9 - IPPROTO_PIM = 0x67 - IPPROTO_PRM = 0x15 - IPPROTO_PUP = 0xc - IPPROTO_PVP = 0x4b - IPPROTO_RAW = 0xff - IPPROTO_RCCMON = 0xa - IPPROTO_RDP = 0x1b - IPPROTO_RESERVED_253 = 0xfd - IPPROTO_RESERVED_254 = 0xfe - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e - IPPROTO_RVD = 0x42 - IPPROTO_SATEXPAK = 0x40 - IPPROTO_SATMON = 0x45 - IPPROTO_SCCSP = 0x60 - IPPROTO_SCTP = 0x84 - IPPROTO_SDRP = 0x2a - IPPROTO_SEND = 0x103 - IPPROTO_SEP = 0x21 - IPPROTO_SHIM6 = 0x8c - IPPROTO_SKIP = 0x39 - IPPROTO_SPACER = 0x7fff - IPPROTO_SRPC = 0x5a - IPPROTO_ST = 0x7 - IPPROTO_SVMTP = 0x52 - IPPROTO_SWIPE = 0x35 - IPPROTO_TCF = 0x57 - IPPROTO_TCP = 0x6 - IPPROTO_TLSP = 0x38 - IPPROTO_TP = 0x1d - IPPROTO_TPXX = 0x27 - IPPROTO_TRUNK1 = 0x17 - IPPROTO_TRUNK2 = 0x18 - IPPROTO_TTP = 0x54 - IPPROTO_UDP = 0x11 - IPPROTO_UDPLITE = 0x88 - IPPROTO_VINES = 0x53 - IPPROTO_VISA = 0x46 - IPPROTO_VMTP = 0x51 - IPPROTO_WBEXPAK = 0x4f - IPPROTO_WBMON = 0x4e - IPPROTO_WSN = 0x4a - IPPROTO_XNET = 0xf - IPPROTO_XTP = 0x24 - IPV6_AUTOFLOWLABEL = 0x3b - IPV6_BINDANY = 0x40 - IPV6_BINDV6ONLY = 0x1b - IPV6_CHECKSUM = 0x1a - IPV6_DEFAULT_MULTICAST_HOPS = 0x1 - IPV6_DEFAULT_MULTICAST_LOOP = 0x1 - IPV6_DEFHLIM = 0x40 - IPV6_DONTFRAG = 0x3e - IPV6_DSTOPTS = 0x32 - IPV6_FAITH = 0x1d - IPV6_FLOWINFO_MASK = 0xffffff0f - IPV6_FLOWLABEL_MASK = 0xffff0f00 - IPV6_FRAGTTL = 0x78 - IPV6_FW_ADD = 0x1e - IPV6_FW_DEL = 0x1f - IPV6_FW_FLUSH = 0x20 - IPV6_FW_GET = 0x22 - IPV6_FW_ZERO = 0x21 - IPV6_HLIMDEC = 0x1 - IPV6_HOPLIMIT = 0x2f - IPV6_HOPOPTS = 0x31 - IPV6_IPSEC_POLICY = 0x1c - IPV6_JOIN_GROUP = 0xc - IPV6_LEAVE_GROUP = 0xd - IPV6_MAXHLIM = 0xff - IPV6_MAXOPTHDR = 0x800 - IPV6_MAXPACKET = 0xffff - IPV6_MAX_GROUP_SRC_FILTER = 0x200 - IPV6_MAX_MEMBERSHIPS = 0xfff - IPV6_MAX_SOCK_SRC_FILTER = 0x80 - IPV6_MIN_MEMBERSHIPS = 0x1f - IPV6_MMTU = 0x500 - IPV6_MSFILTER = 0x4a - IPV6_MULTICAST_HOPS = 0xa - IPV6_MULTICAST_IF = 0x9 - IPV6_MULTICAST_LOOP = 0xb - IPV6_NEXTHOP = 0x30 - IPV6_PATHMTU = 0x2c - IPV6_PKTINFO = 0x2e - IPV6_PORTRANGE = 0xe - IPV6_PORTRANGE_DEFAULT = 0x0 - IPV6_PORTRANGE_HIGH = 0x1 - IPV6_PORTRANGE_LOW = 0x2 - IPV6_PREFER_TEMPADDR = 0x3f - IPV6_RECVDSTOPTS = 0x28 - IPV6_RECVHOPLIMIT = 0x25 - IPV6_RECVHOPOPTS = 0x27 - IPV6_RECVPATHMTU = 0x2b - IPV6_RECVPKTINFO = 0x24 - IPV6_RECVRTHDR = 0x26 - IPV6_RECVTCLASS = 0x39 - IPV6_RTHDR = 0x33 - IPV6_RTHDRDSTOPTS = 0x23 - IPV6_RTHDR_LOOSE = 0x0 - IPV6_RTHDR_STRICT = 0x1 - IPV6_RTHDR_TYPE_0 = 0x0 - IPV6_SOCKOPT_RESERVED1 = 0x3 - IPV6_TCLASS = 0x3d - IPV6_UNICAST_HOPS = 0x4 - IPV6_USE_MIN_MTU = 0x2a - IPV6_V6ONLY = 0x1b - IPV6_VERSION = 0x60 - IPV6_VERSION_MASK = 0xf0 - IP_ADD_MEMBERSHIP = 0xc - IP_ADD_SOURCE_MEMBERSHIP = 0x46 - IP_BINDANY = 0x18 - IP_BLOCK_SOURCE = 0x48 - IP_DEFAULT_MULTICAST_LOOP = 0x1 - IP_DEFAULT_MULTICAST_TTL = 0x1 - IP_DF = 0x4000 - IP_DONTFRAG = 0x43 - IP_DROP_MEMBERSHIP = 0xd - IP_DROP_SOURCE_MEMBERSHIP = 0x47 - IP_DUMMYNET3 = 0x31 - IP_DUMMYNET_CONFIGURE = 0x3c - IP_DUMMYNET_DEL = 0x3d - IP_DUMMYNET_FLUSH = 0x3e - IP_DUMMYNET_GET = 0x40 - IP_FAITH = 0x16 - IP_FW3 = 0x30 - IP_FW_ADD = 0x32 - IP_FW_DEL = 0x33 - IP_FW_FLUSH = 0x34 - IP_FW_GET = 0x36 - IP_FW_NAT_CFG = 0x38 - IP_FW_NAT_DEL = 0x39 - IP_FW_NAT_GET_CONFIG = 0x3a - IP_FW_NAT_GET_LOG = 0x3b - IP_FW_RESETLOG = 0x37 - IP_FW_TABLE_ADD = 0x28 - IP_FW_TABLE_DEL = 0x29 - IP_FW_TABLE_FLUSH = 0x2a - IP_FW_TABLE_GETSIZE = 0x2b - IP_FW_TABLE_LIST = 0x2c - IP_FW_ZERO = 0x35 - IP_HDRINCL = 0x2 - IP_IPSEC_POLICY = 0x15 - IP_MAXPACKET = 0xffff - IP_MAX_GROUP_SRC_FILTER = 0x200 - IP_MAX_MEMBERSHIPS = 0xfff - IP_MAX_SOCK_MUTE_FILTER = 0x80 - IP_MAX_SOCK_SRC_FILTER = 0x80 - IP_MAX_SOURCE_FILTER = 0x400 - IP_MF = 0x2000 - IP_MINTTL = 0x42 - IP_MIN_MEMBERSHIPS = 0x1f - IP_MSFILTER = 0x4a - IP_MSS = 0x240 - IP_MULTICAST_IF = 0x9 - IP_MULTICAST_LOOP = 0xb - IP_MULTICAST_TTL = 0xa - IP_MULTICAST_VIF = 0xe - IP_OFFMASK = 0x1fff - IP_ONESBCAST = 0x17 - IP_OPTIONS = 0x1 - IP_PORTRANGE = 0x13 - IP_PORTRANGE_DEFAULT = 0x0 - IP_PORTRANGE_HIGH = 0x1 - IP_PORTRANGE_LOW = 0x2 - IP_RECVDSTADDR = 0x7 - IP_RECVIF = 0x14 - IP_RECVOPTS = 0x5 - IP_RECVRETOPTS = 0x6 - IP_RECVTOS = 0x44 - IP_RECVTTL = 0x41 - IP_RETOPTS = 0x8 - IP_RF = 0x8000 - IP_RSVP_OFF = 0x10 - IP_RSVP_ON = 0xf - IP_RSVP_VIF_OFF = 0x12 - IP_RSVP_VIF_ON = 0x11 - IP_SENDSRCADDR = 0x7 - IP_TOS = 0x3 - IP_TTL = 0x4 - IP_UNBLOCK_SOURCE = 0x49 - ISIG = 0x80 - ISTRIP = 0x20 - IXANY = 0x800 - IXOFF = 0x400 - IXON = 0x200 - LOCK_EX = 0x2 - LOCK_NB = 0x4 - LOCK_SH = 0x1 - LOCK_UN = 0x8 - MADV_AUTOSYNC = 0x7 - MADV_CORE = 0x9 - MADV_DONTNEED = 0x4 - MADV_FREE = 0x5 - MADV_NOCORE = 0x8 - MADV_NORMAL = 0x0 - MADV_NOSYNC = 0x6 - MADV_PROTECT = 0xa - MADV_RANDOM = 0x1 - MADV_SEQUENTIAL = 0x2 - MADV_WILLNEED = 0x3 - MAP_ALIGNED_SUPER = 0x1000000 - MAP_ALIGNMENT_MASK = -0x1000000 - MAP_ALIGNMENT_SHIFT = 0x18 - MAP_ANON = 0x1000 - MAP_ANONYMOUS = 0x1000 - MAP_COPY = 0x2 - MAP_EXCL = 0x4000 - MAP_FILE = 0x0 - MAP_FIXED = 0x10 - MAP_HASSEMAPHORE = 0x200 - MAP_NOCORE = 0x20000 - MAP_NORESERVE = 0x40 - MAP_NOSYNC = 0x800 - MAP_PREFAULT_READ = 0x40000 - MAP_PRIVATE = 0x2 - MAP_RENAME = 0x20 - MAP_RESERVED0080 = 0x80 - MAP_RESERVED0100 = 0x100 - MAP_SHARED = 0x1 - MAP_STACK = 0x400 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MSG_CMSG_CLOEXEC = 0x40000 - MSG_COMPAT = 0x8000 - MSG_CTRUNC = 0x20 - MSG_DONTROUTE = 0x4 - MSG_DONTWAIT = 0x80 - MSG_EOF = 0x100 - MSG_EOR = 0x8 - MSG_NBIO = 0x4000 - MSG_NOSIGNAL = 0x20000 - MSG_NOTIFICATION = 0x2000 - MSG_OOB = 0x1 - MSG_PEEK = 0x2 - MSG_TRUNC = 0x10 - MSG_WAITALL = 0x40 - MS_ASYNC = 0x1 - MS_INVALIDATE = 0x2 - MS_SYNC = 0x0 - NAME_MAX = 0xff - NET_RT_DUMP = 0x1 - NET_RT_FLAGS = 0x2 - NET_RT_IFLIST = 0x3 - NET_RT_IFLISTL = 0x5 - NET_RT_IFMALIST = 0x4 - NET_RT_MAXID = 0x6 - NOFLSH = 0x80000000 - NOTE_ATTRIB = 0x8 - NOTE_CHILD = 0x4 - NOTE_DELETE = 0x1 - NOTE_EXEC = 0x20000000 - NOTE_EXIT = 0x80000000 - NOTE_EXTEND = 0x4 - NOTE_FFAND = 0x40000000 - NOTE_FFCOPY = 0xc0000000 - NOTE_FFCTRLMASK = 0xc0000000 - NOTE_FFLAGSMASK = 0xffffff - NOTE_FFNOP = 0x0 - NOTE_FFOR = 0x80000000 - NOTE_FORK = 0x40000000 - NOTE_LINK = 0x10 - NOTE_LOWAT = 0x1 - NOTE_PCTRLMASK = 0xf0000000 - NOTE_PDATAMASK = 0xfffff - NOTE_RENAME = 0x20 - NOTE_REVOKE = 0x40 - NOTE_TRACK = 0x1 - NOTE_TRACKERR = 0x2 - NOTE_TRIGGER = 0x1000000 - NOTE_WRITE = 0x2 - OCRNL = 0x10 - ONLCR = 0x2 - ONLRET = 0x40 - ONOCR = 0x20 - ONOEOT = 0x8 - OPOST = 0x1 - O_ACCMODE = 0x3 - O_APPEND = 0x8 - O_ASYNC = 0x40 - O_CLOEXEC = 0x100000 - O_CREAT = 0x200 - O_DIRECT = 0x10000 - O_DIRECTORY = 0x20000 - O_EXCL = 0x800 - O_EXEC = 0x40000 - O_EXLOCK = 0x20 - O_FSYNC = 0x80 - O_NDELAY = 0x4 - O_NOCTTY = 0x8000 - O_NOFOLLOW = 0x100 - O_NONBLOCK = 0x4 - O_RDONLY = 0x0 - O_RDWR = 0x2 - O_SHLOCK = 0x10 - O_SYNC = 0x80 - O_TRUNC = 0x400 - O_TTY_INIT = 0x80000 - O_WRONLY = 0x1 - PARENB = 0x1000 - PARMRK = 0x8 - PARODD = 0x2000 - PENDIN = 0x20000000 - PRIO_PGRP = 0x1 - PRIO_PROCESS = 0x0 - PRIO_USER = 0x2 - PROT_EXEC = 0x4 - PROT_NONE = 0x0 - PROT_READ = 0x1 - PROT_WRITE = 0x2 - RLIMIT_AS = 0xa - RLIMIT_CORE = 0x4 - RLIMIT_CPU = 0x0 - RLIMIT_DATA = 0x2 - RLIMIT_FSIZE = 0x1 - RLIMIT_NOFILE = 0x8 - RLIMIT_STACK = 0x3 - RLIM_INFINITY = 0x7fffffffffffffff - RTAX_AUTHOR = 0x6 - RTAX_BRD = 0x7 - RTAX_DST = 0x0 - RTAX_GATEWAY = 0x1 - RTAX_GENMASK = 0x3 - RTAX_IFA = 0x5 - RTAX_IFP = 0x4 - RTAX_MAX = 0x8 - RTAX_NETMASK = 0x2 - RTA_AUTHOR = 0x40 - RTA_BRD = 0x80 - RTA_DST = 0x1 - RTA_GATEWAY = 0x2 - RTA_GENMASK = 0x8 - RTA_IFA = 0x20 - RTA_IFP = 0x10 - RTA_NETMASK = 0x4 - RTF_BLACKHOLE = 0x1000 - RTF_BROADCAST = 0x400000 - RTF_DONE = 0x40 - RTF_DYNAMIC = 0x10 - RTF_FMASK = 0x1004d808 - RTF_GATEWAY = 0x2 - RTF_GWFLAG_COMPAT = 0x80000000 - RTF_HOST = 0x4 - RTF_LLDATA = 0x400 - RTF_LLINFO = 0x400 - RTF_LOCAL = 0x200000 - RTF_MODIFIED = 0x20 - RTF_MULTICAST = 0x800000 - RTF_PINNED = 0x100000 - RTF_PRCLONING = 0x10000 - RTF_PROTO1 = 0x8000 - RTF_PROTO2 = 0x4000 - RTF_PROTO3 = 0x40000 - RTF_REJECT = 0x8 - RTF_RNH_LOCKED = 0x40000000 - RTF_STATIC = 0x800 - RTF_STICKY = 0x10000000 - RTF_UP = 0x1 - RTF_XRESOLVE = 0x200 - RTM_ADD = 0x1 - RTM_CHANGE = 0x3 - RTM_DELADDR = 0xd - RTM_DELETE = 0x2 - RTM_DELMADDR = 0x10 - RTM_GET = 0x4 - RTM_IEEE80211 = 0x12 - RTM_IFANNOUNCE = 0x11 - RTM_IFINFO = 0xe - RTM_LOCK = 0x8 - RTM_LOSING = 0x5 - RTM_MISS = 0x7 - RTM_NEWADDR = 0xc - RTM_NEWMADDR = 0xf - RTM_OLDADD = 0x9 - RTM_OLDDEL = 0xa - RTM_REDIRECT = 0x6 - RTM_RESOLVE = 0xb - RTM_RTTUNIT = 0xf4240 - RTM_VERSION = 0x5 - RTV_EXPIRE = 0x4 - RTV_HOPCOUNT = 0x2 - RTV_MTU = 0x1 - RTV_RPIPE = 0x8 - RTV_RTT = 0x40 - RTV_RTTVAR = 0x80 - RTV_SPIPE = 0x10 - RTV_SSTHRESH = 0x20 - RTV_WEIGHT = 0x100 - RT_ALL_FIBS = -0x1 - RT_CACHING_CONTEXT = 0x1 - RT_DEFAULT_FIB = 0x0 - RT_NORTREF = 0x2 - RUSAGE_CHILDREN = -0x1 - RUSAGE_SELF = 0x0 - RUSAGE_THREAD = 0x1 - SCM_BINTIME = 0x4 - SCM_CREDS = 0x3 - SCM_RIGHTS = 0x1 - SCM_TIMESTAMP = 0x2 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 - SIOCADDMULTI = 0x80206931 - SIOCADDRT = 0x8030720a - SIOCAIFADDR = 0x8040691a - SIOCAIFGROUP = 0x80246987 - SIOCALIFADDR = 0x8118691b - SIOCATMARK = 0x40047307 - SIOCDELMULTI = 0x80206932 - SIOCDELRT = 0x8030720b - SIOCDIFADDR = 0x80206919 - SIOCDIFGROUP = 0x80246989 - SIOCDIFPHYADDR = 0x80206949 - SIOCDLIFADDR = 0x8118691d - SIOCGDRVSPEC = 0xc01c697b - SIOCGETSGCNT = 0xc0147210 - SIOCGETVIFCNT = 0xc014720f - SIOCGHIWAT = 0x40047301 - SIOCGIFADDR = 0xc0206921 - SIOCGIFBRDADDR = 0xc0206923 - SIOCGIFCAP = 0xc020691f - SIOCGIFCONF = 0xc0086924 - SIOCGIFDESCR = 0xc020692a - SIOCGIFDSTADDR = 0xc0206922 - SIOCGIFFIB = 0xc020695c - SIOCGIFFLAGS = 0xc0206911 - SIOCGIFGENERIC = 0xc020693a - SIOCGIFGMEMB = 0xc024698a - SIOCGIFGROUP = 0xc0246988 - SIOCGIFINDEX = 0xc0206920 - SIOCGIFMAC = 0xc0206926 - SIOCGIFMEDIA = 0xc0286938 - SIOCGIFMETRIC = 0xc0206917 - SIOCGIFMTU = 0xc0206933 - SIOCGIFNETMASK = 0xc0206925 - SIOCGIFPDSTADDR = 0xc0206948 - SIOCGIFPHYS = 0xc0206935 - SIOCGIFPSRCADDR = 0xc0206947 - SIOCGIFSTATUS = 0xc331693b - SIOCGLIFADDR = 0xc118691c - SIOCGLIFPHYADDR = 0xc118694b - SIOCGLOWAT = 0x40047303 - SIOCGPGRP = 0x40047309 - SIOCGPRIVATE_0 = 0xc0206950 - SIOCGPRIVATE_1 = 0xc0206951 - SIOCIFCREATE = 0xc020697a - SIOCIFCREATE2 = 0xc020697c - SIOCIFDESTROY = 0x80206979 - SIOCIFGCLONERS = 0xc00c6978 - SIOCSDRVSPEC = 0x801c697b - SIOCSHIWAT = 0x80047300 - SIOCSIFADDR = 0x8020690c - SIOCSIFBRDADDR = 0x80206913 - SIOCSIFCAP = 0x8020691e - SIOCSIFDESCR = 0x80206929 - SIOCSIFDSTADDR = 0x8020690e - SIOCSIFFIB = 0x8020695d - SIOCSIFFLAGS = 0x80206910 - SIOCSIFGENERIC = 0x80206939 - SIOCSIFLLADDR = 0x8020693c - SIOCSIFMAC = 0x80206927 - SIOCSIFMEDIA = 0xc0206937 - SIOCSIFMETRIC = 0x80206918 - SIOCSIFMTU = 0x80206934 - SIOCSIFNAME = 0x80206928 - SIOCSIFNETMASK = 0x80206916 - SIOCSIFPHYADDR = 0x80406946 - SIOCSIFPHYS = 0x80206936 - SIOCSIFRVNET = 0xc020695b - SIOCSIFVNET = 0xc020695a - SIOCSLIFPHYADDR = 0x8118694a - SIOCSLOWAT = 0x80047302 - SIOCSPGRP = 0x80047308 - SOCK_CLOEXEC = 0x10000000 - SOCK_DGRAM = 0x2 - SOCK_MAXADDRLEN = 0xff - SOCK_NONBLOCK = 0x20000000 - SOCK_RAW = 0x3 - SOCK_RDM = 0x4 - SOCK_SEQPACKET = 0x5 - SOCK_STREAM = 0x1 - SOL_SOCKET = 0xffff - SOMAXCONN = 0x80 - SO_ACCEPTCONN = 0x2 - SO_ACCEPTFILTER = 0x1000 - SO_BINTIME = 0x2000 - SO_BROADCAST = 0x20 - SO_DEBUG = 0x1 - SO_DONTROUTE = 0x10 - SO_ERROR = 0x1007 - SO_KEEPALIVE = 0x8 - SO_LABEL = 0x1009 - SO_LINGER = 0x80 - SO_LISTENINCQLEN = 0x1013 - SO_LISTENQLEN = 0x1012 - SO_LISTENQLIMIT = 0x1011 - SO_NOSIGPIPE = 0x800 - SO_NO_DDP = 0x8000 - SO_NO_OFFLOAD = 0x4000 - SO_OOBINLINE = 0x100 - SO_PEERLABEL = 0x1010 - SO_PROTOCOL = 0x1016 - SO_PROTOTYPE = 0x1016 - SO_RCVBUF = 0x1002 - SO_RCVLOWAT = 0x1004 - SO_RCVTIMEO = 0x1006 - SO_REUSEADDR = 0x4 - SO_REUSEPORT = 0x200 - SO_SETFIB = 0x1014 - SO_SNDBUF = 0x1001 - SO_SNDLOWAT = 0x1003 - SO_SNDTIMEO = 0x1005 - SO_TIMESTAMP = 0x400 - SO_TYPE = 0x1008 - SO_USELOOPBACK = 0x40 - SO_USER_COOKIE = 0x1015 - SO_VENDOR = 0x80000000 - TCIFLUSH = 0x1 - TCIOFLUSH = 0x3 - TCOFLUSH = 0x2 - TCP_CA_NAME_MAX = 0x10 - TCP_CONGESTION = 0x40 - TCP_INFO = 0x20 - TCP_KEEPCNT = 0x400 - TCP_KEEPIDLE = 0x100 - TCP_KEEPINIT = 0x80 - TCP_KEEPINTVL = 0x200 - TCP_MAXBURST = 0x4 - TCP_MAXHLEN = 0x3c - TCP_MAXOLEN = 0x28 - TCP_MAXSEG = 0x2 - TCP_MAXWIN = 0xffff - TCP_MAX_SACK = 0x4 - TCP_MAX_WINSHIFT = 0xe - TCP_MD5SIG = 0x10 - TCP_MINMSS = 0xd8 - TCP_MSS = 0x218 - TCP_NODELAY = 0x1 - TCP_NOOPT = 0x8 - TCP_NOPUSH = 0x4 - TCP_VENDOR = 0x80000000 - TCSAFLUSH = 0x2 - TIOCCBRK = 0x2000747a - TIOCCDTR = 0x20007478 - TIOCCONS = 0x80047462 - TIOCDRAIN = 0x2000745e - TIOCEXCL = 0x2000740d - TIOCEXT = 0x80047460 - TIOCFLUSH = 0x80047410 - TIOCGDRAINWAIT = 0x40047456 - TIOCGETA = 0x402c7413 - TIOCGETD = 0x4004741a - TIOCGPGRP = 0x40047477 - TIOCGPTN = 0x4004740f - TIOCGSID = 0x40047463 - TIOCGWINSZ = 0x40087468 - TIOCMBIC = 0x8004746b - TIOCMBIS = 0x8004746c - TIOCMGDTRWAIT = 0x4004745a - TIOCMGET = 0x4004746a - TIOCMSDTRWAIT = 0x8004745b - TIOCMSET = 0x8004746d - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DCD = 0x40 - TIOCM_DSR = 0x100 - TIOCM_DTR = 0x2 - TIOCM_LE = 0x1 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_RTS = 0x4 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x20007471 - TIOCNXCL = 0x2000740e - TIOCOUTQ = 0x40047473 - TIOCPKT = 0x80047470 - TIOCPKT_DATA = 0x0 - TIOCPKT_DOSTOP = 0x20 - TIOCPKT_FLUSHREAD = 0x1 - TIOCPKT_FLUSHWRITE = 0x2 - TIOCPKT_IOCTL = 0x40 - TIOCPKT_NOSTOP = 0x10 - TIOCPKT_START = 0x8 - TIOCPKT_STOP = 0x4 - TIOCPTMASTER = 0x2000741c - TIOCSBRK = 0x2000747b - TIOCSCTTY = 0x20007461 - TIOCSDRAINWAIT = 0x80047457 - TIOCSDTR = 0x20007479 - TIOCSETA = 0x802c7414 - TIOCSETAF = 0x802c7416 - TIOCSETAW = 0x802c7415 - TIOCSETD = 0x8004741b - TIOCSIG = 0x2004745f - TIOCSPGRP = 0x80047476 - TIOCSTART = 0x2000746e - TIOCSTAT = 0x20007465 - TIOCSTI = 0x80017472 - TIOCSTOP = 0x2000746f - TIOCSWINSZ = 0x80087467 - TIOCTIMESTAMP = 0x40087459 - TIOCUCNTL = 0x80047466 - TOSTOP = 0x400000 - VDISCARD = 0xf - VDSUSP = 0xb - VEOF = 0x0 - VEOL = 0x1 - VEOL2 = 0x2 - VERASE = 0x3 - VERASE2 = 0x7 - VINTR = 0x8 - VKILL = 0x5 - VLNEXT = 0xe - VMIN = 0x10 - VQUIT = 0x9 - VREPRINT = 0x6 - VSTART = 0xc - VSTATUS = 0x12 - VSTOP = 0xd - VSUSP = 0xa - VTIME = 0x11 - VWERASE = 0x4 - WCONTINUED = 0x4 - WCOREFLAG = 0x80 - WEXITED = 0x10 - WLINUXCLONE = 0x80000000 - WNOHANG = 0x1 - WNOWAIT = 0x8 - WSTOPPED = 0x2 - WTRAPPED = 0x20 - WUNTRACED = 0x2 + AF_APPLETALK = 0x10 + AF_ARP = 0x23 + AF_ATM = 0x1e + AF_BLUETOOTH = 0x24 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1c + AF_INET6_SDP = 0x2a + AF_INET_SDP = 0x28 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x2a + AF_NATM = 0x1d + AF_NETBIOS = 0x6 + AF_NETGRAPH = 0x20 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SCLUSTER = 0x22 + AF_SIP = 0x18 + AF_SLOW = 0x21 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VENDOR00 = 0x27 + AF_VENDOR01 = 0x29 + AF_VENDOR02 = 0x2b + AF_VENDOR03 = 0x2d + AF_VENDOR04 = 0x2f + AF_VENDOR05 = 0x31 + AF_VENDOR06 = 0x33 + AF_VENDOR07 = 0x35 + AF_VENDOR08 = 0x37 + AF_VENDOR09 = 0x39 + AF_VENDOR10 = 0x3b + AF_VENDOR11 = 0x3d + AF_VENDOR12 = 0x3f + AF_VENDOR13 = 0x41 + AF_VENDOR14 = 0x43 + AF_VENDOR15 = 0x45 + AF_VENDOR16 = 0x47 + AF_VENDOR17 = 0x49 + AF_VENDOR18 = 0x4b + AF_VENDOR19 = 0x4d + AF_VENDOR20 = 0x4f + AF_VENDOR21 = 0x51 + AF_VENDOR22 = 0x53 + AF_VENDOR23 = 0x55 + AF_VENDOR24 = 0x57 + AF_VENDOR25 = 0x59 + AF_VENDOR26 = 0x5b + AF_VENDOR27 = 0x5d + AF_VENDOR28 = 0x5f + AF_VENDOR29 = 0x61 + AF_VENDOR30 = 0x63 + AF_VENDOR31 = 0x65 + AF_VENDOR32 = 0x67 + AF_VENDOR33 = 0x69 + AF_VENDOR34 = 0x6b + AF_VENDOR35 = 0x6d + AF_VENDOR36 = 0x6f + AF_VENDOR37 = 0x71 + AF_VENDOR38 = 0x73 + AF_VENDOR39 = 0x75 + AF_VENDOR40 = 0x77 + AF_VENDOR41 = 0x79 + AF_VENDOR42 = 0x7b + AF_VENDOR43 = 0x7d + AF_VENDOR44 = 0x7f + AF_VENDOR45 = 0x81 + AF_VENDOR46 = 0x83 + AF_VENDOR47 = 0x85 + ALTWERASE = 0x200 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427c + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRECTION = 0x40044276 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0084279 + BIOCGETBUFMODE = 0x4004427d + BIOCGETIF = 0x4020426b + BIOCGETZMAX = 0x4004427f + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCGTSTAMP = 0x40044283 + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x2000427a + BIOCPROMISC = 0x20004269 + BIOCROTZBUF = 0x400c4280 + BIOCSBLEN = 0xc0044266 + BIOCSDIRECTION = 0x80044277 + BIOCSDLT = 0x80044278 + BIOCSETBUFMODE = 0x8004427e + BIOCSETF = 0x80084267 + BIOCSETFNR = 0x80084282 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x8008427b + BIOCSETZBUF = 0x800c4281 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCSTSTAMP = 0x80044284 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_BUFMODE_BUFFER = 0x1 + BPF_BUFMODE_ZBUF = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_T_BINTIME = 0x2 + BPF_T_BINTIME_FAST = 0x102 + BPF_T_BINTIME_MONOTONIC = 0x202 + BPF_T_BINTIME_MONOTONIC_FAST = 0x302 + BPF_T_FAST = 0x100 + BPF_T_FLAG_MASK = 0x300 + BPF_T_FORMAT_MASK = 0x3 + BPF_T_MICROTIME = 0x0 + BPF_T_MICROTIME_FAST = 0x100 + BPF_T_MICROTIME_MONOTONIC = 0x200 + BPF_T_MICROTIME_MONOTONIC_FAST = 0x300 + BPF_T_MONOTONIC = 0x200 + BPF_T_MONOTONIC_FAST = 0x300 + BPF_T_NANOTIME = 0x1 + BPF_T_NANOTIME_FAST = 0x101 + BPF_T_NANOTIME_MONOTONIC = 0x201 + BPF_T_NANOTIME_MONOTONIC_FAST = 0x301 + BPF_T_NONE = 0x3 + BPF_T_NORMAL = 0x0 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + CAP_ACCEPT = 0x200000020000000 + CAP_ACL_CHECK = 0x400000000010000 + CAP_ACL_DELETE = 0x400000000020000 + CAP_ACL_GET = 0x400000000040000 + CAP_ACL_SET = 0x400000000080000 + CAP_ALL0 = 0x20007ffffffffff + CAP_ALL1 = 0x4000000001fffff + CAP_BIND = 0x200000040000000 + CAP_BINDAT = 0x200008000000400 + CAP_CHFLAGSAT = 0x200000000001400 + CAP_CONNECT = 0x200000080000000 + CAP_CONNECTAT = 0x200010000000400 + CAP_CREATE = 0x200000000000040 + CAP_EVENT = 0x400000000000020 + CAP_EXTATTR_DELETE = 0x400000000001000 + CAP_EXTATTR_GET = 0x400000000002000 + CAP_EXTATTR_LIST = 0x400000000004000 + CAP_EXTATTR_SET = 0x400000000008000 + CAP_FCHDIR = 0x200000000000800 + CAP_FCHFLAGS = 0x200000000001000 + CAP_FCHMOD = 0x200000000002000 + CAP_FCHMODAT = 0x200000000002400 + CAP_FCHOWN = 0x200000000004000 + CAP_FCHOWNAT = 0x200000000004400 + CAP_FCNTL = 0x200000000008000 + CAP_FCNTL_ALL = 0x78 + CAP_FCNTL_GETFL = 0x8 + CAP_FCNTL_GETOWN = 0x20 + CAP_FCNTL_SETFL = 0x10 + CAP_FCNTL_SETOWN = 0x40 + CAP_FEXECVE = 0x200000000000080 + CAP_FLOCK = 0x200000000010000 + CAP_FPATHCONF = 0x200000000020000 + CAP_FSCK = 0x200000000040000 + CAP_FSTAT = 0x200000000080000 + CAP_FSTATAT = 0x200000000080400 + CAP_FSTATFS = 0x200000000100000 + CAP_FSYNC = 0x200000000000100 + CAP_FTRUNCATE = 0x200000000000200 + CAP_FUTIMES = 0x200000000200000 + CAP_FUTIMESAT = 0x200000000200400 + CAP_GETPEERNAME = 0x200000100000000 + CAP_GETSOCKNAME = 0x200000200000000 + CAP_GETSOCKOPT = 0x200000400000000 + CAP_IOCTL = 0x400000000000080 + CAP_IOCTLS_ALL = 0x7fffffff + CAP_KQUEUE = 0x400000000100040 + CAP_KQUEUE_CHANGE = 0x400000000100000 + CAP_KQUEUE_EVENT = 0x400000000000040 + CAP_LINKAT_SOURCE = 0x200020000000400 + CAP_LINKAT_TARGET = 0x200000000400400 + CAP_LISTEN = 0x200000800000000 + CAP_LOOKUP = 0x200000000000400 + CAP_MAC_GET = 0x400000000000001 + CAP_MAC_SET = 0x400000000000002 + CAP_MKDIRAT = 0x200000000800400 + CAP_MKFIFOAT = 0x200000001000400 + CAP_MKNODAT = 0x200000002000400 + CAP_MMAP = 0x200000000000010 + CAP_MMAP_R = 0x20000000000001d + CAP_MMAP_RW = 0x20000000000001f + CAP_MMAP_RWX = 0x20000000000003f + CAP_MMAP_RX = 0x20000000000003d + CAP_MMAP_W = 0x20000000000001e + CAP_MMAP_WX = 0x20000000000003e + CAP_MMAP_X = 0x20000000000003c + CAP_PDGETPID = 0x400000000000200 + CAP_PDKILL = 0x400000000000800 + CAP_PDWAIT = 0x400000000000400 + CAP_PEELOFF = 0x200001000000000 + CAP_POLL_EVENT = 0x400000000000020 + CAP_PREAD = 0x20000000000000d + CAP_PWRITE = 0x20000000000000e + CAP_READ = 0x200000000000001 + CAP_RECV = 0x200000000000001 + CAP_RENAMEAT_SOURCE = 0x200000004000400 + CAP_RENAMEAT_TARGET = 0x200040000000400 + CAP_RIGHTS_VERSION = 0x0 + CAP_RIGHTS_VERSION_00 = 0x0 + CAP_SEEK = 0x20000000000000c + CAP_SEEK_TELL = 0x200000000000004 + CAP_SEM_GETVALUE = 0x400000000000004 + CAP_SEM_POST = 0x400000000000008 + CAP_SEM_WAIT = 0x400000000000010 + CAP_SEND = 0x200000000000002 + CAP_SETSOCKOPT = 0x200002000000000 + CAP_SHUTDOWN = 0x200004000000000 + CAP_SOCK_CLIENT = 0x200007780000003 + CAP_SOCK_SERVER = 0x200007f60000003 + CAP_SYMLINKAT = 0x200000008000400 + CAP_TTYHOOK = 0x400000000000100 + CAP_UNLINKAT = 0x200000010000400 + CAP_UNUSED0_44 = 0x200080000000000 + CAP_UNUSED0_57 = 0x300000000000000 + CAP_UNUSED1_22 = 0x400000000200000 + CAP_UNUSED1_57 = 0x500000000000000 + CAP_WRITE = 0x200000000000002 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x4 + CLOCK_MONOTONIC_FAST = 0xc + CLOCK_MONOTONIC_PRECISE = 0xb + CLOCK_PROCESS_CPUTIME_ID = 0xf + CLOCK_PROF = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_FAST = 0xa + CLOCK_REALTIME_PRECISE = 0x9 + CLOCK_SECOND = 0xd + CLOCK_THREAD_CPUTIME_ID = 0xe + CLOCK_UPTIME = 0x5 + CLOCK_UPTIME_FAST = 0x8 + CLOCK_UPTIME_PRECISE = 0x7 + CLOCK_VIRTUAL = 0x1 + CREAD = 0x800 + CRTSCTS = 0x30000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0x18 + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_BREDR_BB = 0xff + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_BLUETOOTH_LE_LL = 0xfb + DLT_BLUETOOTH_LE_LL_WITH_PHDR = 0x100 + DLT_BLUETOOTH_LINUX_MONITOR = 0xfe + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_CLASS_NETBSD_RAWAF = 0x2240000 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_EPON = 0x103 + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_INFINIBAND = 0xf7 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPMI_HPM_2 = 0x104 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_ISO_14443 = 0x108 + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0x109 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NETLINK = 0xfd + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x79 + DLT_PKTAP = 0x102 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0xe + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PROFIBUS_DL = 0x101 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RDS = 0x109 + DLT_REDBACK_SMARTEDGE = 0x20 + DLT_RIO = 0x7c + DLT_RTAC_SERIAL = 0xfa + DLT_SCCP = 0x8e + DLT_SCTP = 0xf8 + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xd + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USBPCAP = 0xf9 + DLT_USB_FREEBSD = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WATTSTOPPER_DLM = 0x107 + DLT_WIHART = 0xdf + DLT_WIRESHARK_UPPER_PDU = 0xfc + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DLT_ZWAVE_R1_R2 = 0x105 + DLT_ZWAVE_R3 = 0x106 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_FS = -0x9 + EVFILT_LIO = -0xa + EVFILT_PROC = -0x5 + EVFILT_PROCDESC = -0x8 + EVFILT_READ = -0x1 + EVFILT_SENDFILE = -0xc + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xc + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xb + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_DROP = 0x1000 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_FLAG2 = 0x4000 + EV_FORCEONESHOT = 0x100 + EV_ONESHOT = 0x10 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTATTR_NAMESPACE_EMPTY = 0x0 + EXTATTR_NAMESPACE_SYSTEM = 0x2 + EXTATTR_NAMESPACE_USER = 0x1 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_CANCEL = 0x5 + F_DUP2FD = 0xa + F_DUP2FD_CLOEXEC = 0x12 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x11 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0xb + F_GETOWN = 0x5 + F_OGETLK = 0x7 + F_OK = 0x0 + F_OSETLK = 0x8 + F_OSETLKW = 0x9 + F_RDAHEAD = 0x10 + F_RDLCK = 0x1 + F_READAHEAD = 0xf + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0xc + F_SETLKW = 0xd + F_SETLK_REMOTE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_UNLCKSYS = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x218f52 + IFF_CANTCONFIG = 0x10000 + IFF_DEBUG = 0x4 + IFF_DRV_OACTIVE = 0x400 + IFF_DRV_RUNNING = 0x40 + IFF_DYING = 0x200000 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MONITOR = 0x40000 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PPROMISC = 0x20000 + IFF_PROMISC = 0x100 + IFF_RENAMING = 0x400000 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_STATICARP = 0x80000 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_IEEE1394 = 0x90 + IFT_INFINIBAND = 0xc7 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_PPP = 0x17 + IFT_PROPVIRTUAL = 0x35 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_MASK = 0xfffffffe + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CARP = 0x70 + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0x102 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HIP = 0x8b + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MEAS = 0x13 + IPPROTO_MH = 0x87 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OLD_DIVERT = 0xfe + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_RESERVED_253 = 0xfd + IPPROTO_RESERVED_254 = 0xfe + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEND = 0x103 + IPPROTO_SEP = 0x21 + IPPROTO_SHIM6 = 0x8c + IPPROTO_SKIP = 0x39 + IPPROTO_SPACER = 0x7fff + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TLSP = 0x38 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_BINDANY = 0x40 + IPV6_BINDMULTI = 0x41 + IPV6_BINDV6ONLY = 0x1b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FLOWID = 0x43 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FLOWTYPE = 0x44 + IPV6_FRAGTTL = 0x78 + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MSFILTER = 0x4a + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_PREFER_TEMPADDR = 0x3f + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVFLOWID = 0x46 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRSSBUCKETID = 0x47 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RSSBUCKETID = 0x45 + IPV6_RSS_LISTEN_BUCKET = 0x42 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BINDANY = 0x18 + IP_BINDMULTI = 0x19 + IP_BLOCK_SOURCE = 0x48 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DONTFRAG = 0x43 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET3 = 0x31 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FLOWID = 0x5a + IP_FLOWTYPE = 0x5b + IP_FW3 = 0x30 + IP_FW_ADD = 0x32 + IP_FW_DEL = 0x33 + IP_FW_FLUSH = 0x34 + IP_FW_GET = 0x36 + IP_FW_NAT_CFG = 0x38 + IP_FW_NAT_DEL = 0x39 + IP_FW_NAT_GET_CONFIG = 0x3a + IP_FW_NAT_GET_LOG = 0x3b + IP_FW_RESETLOG = 0x37 + IP_FW_TABLE_ADD = 0x28 + IP_FW_TABLE_DEL = 0x29 + IP_FW_TABLE_FLUSH = 0x2a + IP_FW_TABLE_GETSIZE = 0x2b + IP_FW_TABLE_LIST = 0x2c + IP_FW_ZERO = 0x35 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MAX_SOURCE_FILTER = 0x400 + IP_MF = 0x2000 + IP_MINTTL = 0x42 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_OFFMASK = 0x1fff + IP_ONESBCAST = 0x17 + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVFLOWID = 0x5d + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVRSSBUCKETID = 0x5e + IP_RECVTOS = 0x44 + IP_RECVTTL = 0x41 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSSBUCKETID = 0x5c + IP_RSS_LISTEN_BUCKET = 0x1a + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_SENDSRCADDR = 0x7 + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_AUTOSYNC = 0x7 + MADV_CORE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_NOCORE = 0x8 + MADV_NORMAL = 0x0 + MADV_NOSYNC = 0x6 + MADV_PROTECT = 0xa + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MAP_ALIGNED_SUPER = 0x1000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_EXCL = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GUARD = 0x2000 + MAP_HASSEMAPHORE = 0x200 + MAP_NOCORE = 0x20000 + MAP_NOSYNC = 0x800 + MAP_PREFAULT_READ = 0x40000 + MAP_PRIVATE = 0x2 + MAP_RESERVED0020 = 0x20 + MAP_RESERVED0040 = 0x40 + MAP_RESERVED0080 = 0x80 + MAP_RESERVED0100 = 0x100 + MAP_SHARED = 0x1 + MAP_STACK = 0x400 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ACLS = 0x8000000 + MNT_ASYNC = 0x40 + MNT_AUTOMOUNTED = 0x200000000 + MNT_BYFSID = 0x8000000 + MNT_CMDFLAGS = 0xd0f0000 + MNT_DEFEXPORTED = 0x200 + MNT_DELEXPORT = 0x20000 + MNT_EXKERB = 0x800 + MNT_EXPORTANON = 0x400 + MNT_EXPORTED = 0x100 + MNT_EXPUBLIC = 0x20000000 + MNT_EXRDONLY = 0x80 + MNT_FORCE = 0x80000 + MNT_GJOURNAL = 0x2000000 + MNT_IGNORE = 0x800000 + MNT_LAZY = 0x3 + MNT_LOCAL = 0x1000 + MNT_MULTILABEL = 0x4000000 + MNT_NFS4ACLS = 0x10 + MNT_NOATIME = 0x10000000 + MNT_NOCLUSTERR = 0x40000000 + MNT_NOCLUSTERW = 0x80000000 + MNT_NOEXEC = 0x4 + MNT_NONBUSY = 0x4000000 + MNT_NOSUID = 0x8 + MNT_NOSYMFOLLOW = 0x400000 + MNT_NOWAIT = 0x2 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SNAPSHOT = 0x1000000 + MNT_SOFTDEP = 0x200000 + MNT_SUIDDIR = 0x100000 + MNT_SUJ = 0x100000000 + MNT_SUSPEND = 0x4 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UPDATE = 0x10000 + MNT_UPDATEMASK = 0x2d8d0807e + MNT_USER = 0x8000 + MNT_VISFLAGMASK = 0x3fef0ffff + MNT_WAIT = 0x1 + MSG_CMSG_CLOEXEC = 0x40000 + MSG_COMPAT = 0x8000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_NBIO = 0x4000 + MSG_NOSIGNAL = 0x20000 + MSG_NOTIFICATION = 0x2000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITFORONE = 0x80000 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x0 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLISTL = 0x5 + NET_RT_IFMALIST = 0x4 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_CLOSE = 0x100 + NOTE_CLOSE_WRITE = 0x200 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FILE_POLL = 0x2 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_MSECONDS = 0x2 + NOTE_NSECONDS = 0x8 + NOTE_OPEN = 0x80 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_READ = 0x400 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x4 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x100000 + O_CREAT = 0x200 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x20000 + O_EXCL = 0x800 + O_EXEC = 0x40000 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_TTY_INIT = 0x80000 + O_VERIFY = 0x200000 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FIXEDMTU = 0x80000 + RTF_FMASK = 0x1004d808 + RTF_GATEWAY = 0x2 + RTF_GWFLAG_COMPAT = 0x80000000 + RTF_HOST = 0x4 + RTF_LLDATA = 0x400 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_PINNED = 0x100000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_REJECT = 0x8 + RTF_RNH_LOCKED = 0x40000000 + RTF_STATIC = 0x800 + RTF_STICKY = 0x10000000 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x12 + RTM_IFANNOUNCE = 0x11 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RTV_WEIGHT = 0x100 + RT_ALL_FIBS = -0x1 + RT_BLACKHOLE = 0x40 + RT_CACHING_CONTEXT = 0x1 + RT_DEFAULT_FIB = 0x0 + RT_HAS_GW = 0x80 + RT_HAS_HEADER = 0x10 + RT_HAS_HEADER_BIT = 0x4 + RT_L2_ME = 0x4 + RT_L2_ME_BIT = 0x2 + RT_LLE_CACHE = 0x100 + RT_MAY_LOOP = 0x8 + RT_MAY_LOOP_BIT = 0x3 + RT_NORTREF = 0x2 + RT_REJECT = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_BINTIME = 0x4 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80246987 + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80246989 + SIOCDIFPHYADDR = 0x80206949 + SIOCGDRVSPEC = 0xc01c697b + SIOCGETSGCNT = 0xc0147210 + SIOCGETVIFCNT = 0xc014720f + SIOCGHIWAT = 0x40047301 + SIOCGHWADDR = 0xc020693e + SIOCGI2C = 0xc020693d + SIOCGIFADDR = 0xc0206921 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020691f + SIOCGIFCONF = 0xc0086924 + SIOCGIFDESCR = 0xc020692a + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFIB = 0xc020695c + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc024698a + SIOCGIFGROUP = 0xc0246988 + SIOCGIFINDEX = 0xc0206920 + SIOCGIFMAC = 0xc0206926 + SIOCGIFMEDIA = 0xc0286938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFSTATUS = 0xc331693b + SIOCGIFXMEDIA = 0xc028698b + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGPRIVATE_0 = 0xc0206950 + SIOCGPRIVATE_1 = 0xc0206951 + SIOCGTUNFIB = 0xc020695e + SIOCIFCREATE = 0xc020697a + SIOCIFCREATE2 = 0xc020697c + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc00c6978 + SIOCSDRVSPEC = 0x801c697b + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020691e + SIOCSIFDESCR = 0x80206929 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFIB = 0x8020695d + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206927 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNAME = 0x80206928 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPHYS = 0x80206936 + SIOCSIFRVNET = 0xc020695b + SIOCSIFVNET = 0xc020695a + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSTUNFIB = 0x8020695f + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_NONBLOCK = 0x20000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BINTIME = 0x2000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1009 + SO_LINGER = 0x80 + SO_LISTENINCQLEN = 0x1013 + SO_LISTENQLEN = 0x1012 + SO_LISTENQLIMIT = 0x1011 + SO_NOSIGPIPE = 0x800 + SO_NO_DDP = 0x8000 + SO_NO_OFFLOAD = 0x4000 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1010 + SO_PROTOCOL = 0x1016 + SO_PROTOTYPE = 0x1016 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SETFIB = 0x1014 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_USER_COOKIE = 0x1015 + SO_VENDOR = 0x80000000 + TAB0 = 0x0 + TAB3 = 0x4 + TABDLY = 0x4 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCP_CA_NAME_MAX = 0x10 + TCP_CCALGOOPT = 0x41 + TCP_CONGESTION = 0x40 + TCP_FASTOPEN = 0x401 + TCP_FUNCTION_BLK = 0x2000 + TCP_FUNCTION_NAME_LEN_MAX = 0x20 + TCP_INFO = 0x20 + TCP_KEEPCNT = 0x400 + TCP_KEEPIDLE = 0x100 + TCP_KEEPINIT = 0x80 + TCP_KEEPINTVL = 0x200 + TCP_MAXBURST = 0x4 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_PCAP_IN = 0x1000 + TCP_PCAP_OUT = 0x800 + TCP_VENDOR = 0x80000000 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGPTN = 0x4004740f + TIOCGSID = 0x40047463 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DCD = 0x40 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMASTER = 0x2000741c + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VERASE2 = 0x7 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x4 + WCOREFLAG = 0x80 + WEXITED = 0x10 + WLINUXCLONE = 0x80000000 + WNOHANG = 0x1 + WNOWAIT = 0x8 + WSTOPPED = 0x2 + WTRAPPED = 0x20 + WUNTRACED = 0x2 ) // Errors 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 b536f67..fa06374 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go @@ -36,7 +36,7 @@ const ( AF_KEY = 0xf AF_LLC = 0x1a AF_LOCAL = 0x1 - AF_MAX = 0x2b + AF_MAX = 0x2c AF_MPLS = 0x1c AF_NETBEUI = 0xd AF_NETLINK = 0x10 @@ -51,6 +51,7 @@ const ( AF_ROUTE = 0x10 AF_RXRPC = 0x21 AF_SECURITY = 0xe + AF_SMC = 0x2b AF_SNA = 0x16 AF_TIPC = 0x1e AF_UNIX = 0x1 @@ -120,6 +121,7 @@ const ( ARPHRD_PPP = 0x200 ARPHRD_PRONET = 0x4 ARPHRD_RAWHDLC = 0x206 + ARPHRD_RAWIP = 0x207 ARPHRD_ROSE = 0x10e ARPHRD_RSRVD = 0x104 ARPHRD_SIT = 0x308 @@ -129,6 +131,7 @@ const ( ARPHRD_TUNNEL = 0x300 ARPHRD_TUNNEL6 = 0x301 ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a ARPHRD_X25 = 0x10f B0 = 0x0 B1000000 = 0x1008 @@ -325,6 +328,9 @@ const ( ECHOKE = 0x800 ECHONL = 0x40 ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EFD_SEMAPHORE = 0x1 ENCODING_DEFAULT = 0x0 ENCODING_FM_MARK = 0x3 ENCODING_FM_SPACE = 0x4 @@ -385,13 +391,16 @@ const ( ETH_P_DSA = 0x1b ETH_P_ECONET = 0x18 ETH_P_EDSA = 0xdada + ETH_P_ERSPAN = 0x88be ETH_P_FCOE = 0x8906 ETH_P_FIP = 0x8914 ETH_P_HDLC = 0x19 ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 ETH_P_IEEE802154 = 0xf6 ETH_P_IEEEPUP = 0xa00 ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IFE = 0xed3e ETH_P_IP = 0x800 ETH_P_IPV6 = 0x86dd ETH_P_IPX = 0x8137 @@ -402,11 +411,13 @@ const ( ETH_P_LOOP = 0x60 ETH_P_LOOPBACK = 0x9000 ETH_P_MACSEC = 0x88e5 + ETH_P_MAP = 0xf9 ETH_P_MOBITEX = 0x15 ETH_P_MPLS_MC = 0x8848 ETH_P_MPLS_UC = 0x8847 ETH_P_MVRP = 0x88f5 ETH_P_NCSI = 0x88f8 + ETH_P_NSH = 0x894f ETH_P_PAE = 0x888e ETH_P_PAUSE = 0x8808 ETH_P_PHONET = 0xf5 @@ -450,6 +461,8 @@ const ( FF1 = 0x8000 FFDLY = 0x8000 FLUSHO = 0x1000 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 @@ -468,6 +481,7 @@ const ( FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 FS_POLICY_FLAGS_VALID = 0x3 + F_ADD_SEALS = 0x409 F_DUPFD = 0x0 F_DUPFD_CLOEXEC = 0x406 F_EXLCK = 0x4 @@ -480,6 +494,9 @@ const ( F_GETOWN_EX = 0x10 F_GETPIPE_SZ = 0x408 F_GETSIG = 0xb + F_GET_FILE_RW_HINT = 0x40d + F_GET_RW_HINT = 0x40b + F_GET_SEALS = 0x40a F_LOCK = 0x1 F_NOTIFY = 0x402 F_OFD_GETLK = 0x24 @@ -487,6 +504,10 @@ const ( F_OFD_SETLKW = 0x26 F_OK = 0x0 F_RDLCK = 0x0 + F_SEAL_GROW = 0x4 + F_SEAL_SEAL = 0x1 + F_SEAL_SHRINK = 0x2 + F_SEAL_WRITE = 0x8 F_SETFD = 0x2 F_SETFL = 0x4 F_SETLEASE = 0x400 @@ -498,12 +519,27 @@ const ( F_SETOWN_EX = 0xf F_SETPIPE_SZ = 0x407 F_SETSIG = 0xa + F_SET_FILE_RW_HINT = 0x40e + F_SET_RW_HINT = 0x40c F_SHLCK = 0x8 F_TEST = 0x3 F_TLOCK = 0x2 F_ULOCK = 0x0 F_UNLCK = 0x2 F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 GRND_NONBLOCK = 0x1 GRND_RANDOM = 0x2 HUPCL = 0x400 @@ -540,6 +576,8 @@ const ( IFF_MASTER = 0x400 IFF_MULTICAST = 0x1000 IFF_MULTI_QUEUE = 0x100 + IFF_NAPI = 0x10 + IFF_NAPI_FRAGS = 0x20 IFF_NOARP = 0x80 IFF_NOFILTER = 0x1000 IFF_NOTRAILERS = 0x20 @@ -602,6 +640,7 @@ const ( IN_OPEN = 0x20 IN_Q_OVERFLOW = 0x4000 IN_UNMOUNT = 0x2000 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 IPPROTO_AH = 0x33 IPPROTO_BEETPH = 0x5e IPPROTO_COMP = 0x6c @@ -641,8 +680,10 @@ const ( IPV6_2292PKTOPTIONS = 0x6 IPV6_2292RTHDR = 0x5 IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 IPV6_ADD_MEMBERSHIP = 0x14 IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 IPV6_CHECKSUM = 0x7 IPV6_DONTFRAG = 0x3e IPV6_DROP_MEMBERSHIP = 0x15 @@ -655,12 +696,14 @@ const ( IPV6_JOIN_GROUP = 0x14 IPV6_LEAVE_ANYCAST = 0x1c IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 IPV6_MTU = 0x18 IPV6_MTU_DISCOVER = 0x17 IPV6_MULTICAST_HOPS = 0x12 IPV6_MULTICAST_IF = 0x11 IPV6_MULTICAST_LOOP = 0x13 IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a IPV6_PATHMTU = 0x3d IPV6_PKTINFO = 0x32 IPV6_PMTUDISC_DO = 0x2 @@ -671,8 +714,10 @@ const ( IPV6_PMTUDISC_WANT = 0x1 IPV6_RECVDSTOPTS = 0x3a IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d IPV6_RECVHOPLIMIT = 0x33 IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a IPV6_RECVPATHMTU = 0x3c IPV6_RECVPKTINFO = 0x31 IPV6_RECVRTHDR = 0x38 @@ -686,7 +731,9 @@ const ( IPV6_RXDSTOPTS = 0x3b IPV6_RXHOPOPTS = 0x36 IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c IPV6_V6ONLY = 0x1a IPV6_XFRM_POLICY = 0x23 IP_ADD_MEMBERSHIP = 0x23 @@ -729,6 +776,7 @@ const ( IP_PMTUDISC_PROBE = 0x3 IP_PMTUDISC_WANT = 0x1 IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 IP_RECVOPTS = 0x6 IP_RECVORIGDSTADDR = 0x14 IP_RECVRETOPTS = 0x7 @@ -766,6 +814,7 @@ const ( KEYCTL_NEGATE = 0xd KEYCTL_READ = 0xb KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d KEYCTL_REVOKE = 0x3 KEYCTL_SEARCH = 0xa KEYCTL_SESSION_TO_PARENT = 0x12 @@ -813,6 +862,7 @@ const ( MADV_FREE = 0x8 MADV_HUGEPAGE = 0xe MADV_HWPOISON = 0x64 + MADV_KEEPONFORK = 0x13 MADV_MERGEABLE = 0xc MADV_NOHUGEPAGE = 0xf MADV_NORMAL = 0x0 @@ -821,6 +871,7 @@ const ( MADV_SEQUENTIAL = 0x2 MADV_UNMERGEABLE = 0xd MADV_WILLNEED = 0x3 + MADV_WIPEONFORK = 0x12 MAP_32BIT = 0x40 MAP_ANON = 0x20 MAP_ANONYMOUS = 0x20 @@ -867,6 +918,7 @@ const ( MSG_TRYHARD = 0x4 MSG_WAITALL = 0x100 MSG_WAITFORONE = 0x10000 + MSG_ZEROCOPY = 0x4000000 MS_ACTIVE = 0x40000000 MS_ASYNC = 0x1 MS_BIND = 0x1000 @@ -899,6 +951,7 @@ const ( MS_SILENT = 0x8000 MS_SLAVE = 0x80000 MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 MS_SYNC = 0x4 MS_SYNCHRONOUS = 0x10 MS_UNBINDABLE = 0x20000 @@ -913,6 +966,7 @@ const ( NETLINK_DNRTMSG = 0xe NETLINK_DROP_MEMBERSHIP = 0x2 NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb NETLINK_FIB_LOOKUP = 0xa NETLINK_FIREWALL = 0x3 NETLINK_GENERIC = 0x10 @@ -931,6 +985,7 @@ const ( NETLINK_RX_RING = 0x6 NETLINK_SCSITRANSPORT = 0x12 NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 NETLINK_SOCK_DIAG = 0x4 NETLINK_TX_RING = 0x7 NETLINK_UNUSED = 0x1 @@ -951,8 +1006,10 @@ const ( NLMSG_NOOP = 0x1 NLMSG_OVERRUN = 0x4 NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 NLM_F_APPEND = 0x800 NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 NLM_F_CREATE = 0x400 NLM_F_DUMP = 0x300 NLM_F_DUMP_FILTERED = 0x20 @@ -961,6 +1018,7 @@ const ( NLM_F_EXCL = 0x200 NLM_F_MATCH = 0x200 NLM_F_MULTI = 0x2 + NLM_F_NONREC = 0x100 NLM_F_REPLACE = 0x100 NLM_F_REQUEST = 0x1 NLM_F_ROOT = 0x100 @@ -1009,6 +1067,7 @@ const ( PACKET_FANOUT_EBPF = 0x7 PACKET_FANOUT_FLAG_DEFRAG = 0x8000 PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 PACKET_FANOUT_HASH = 0x0 PACKET_FANOUT_LB = 0x1 PACKET_FANOUT_QM = 0x5 @@ -1053,6 +1112,16 @@ const ( PARMRK = 0x8 PARODD = 0x200 PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x2401 + PERF_EVENT_IOC_ENABLE = 0x2400 + PERF_EVENT_IOC_ID = 0x80042407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 + PERF_EVENT_IOC_PERIOD = 0x40082404 + PERF_EVENT_IOC_REFRESH = 0x2402 + PERF_EVENT_IOC_RESET = 0x2403 + PERF_EVENT_IOC_SET_BPF = 0x40042408 + PERF_EVENT_IOC_SET_FILTER = 0x40042406 + PERF_EVENT_IOC_SET_OUTPUT = 0x2405 PRIO_PGRP = 0x1 PRIO_PROCESS = 0x0 PRIO_USER = 0x2 @@ -1148,6 +1217,11 @@ const ( PR_SET_TIMING = 0xe PR_SET_TSC = 0x1a PR_SET_UNALIGN = 0x6 + PR_SVE_GET_VL = 0x33 + PR_SVE_SET_VL = 0x32 + PR_SVE_SET_VL_ONEXEC = 0x40000 + PR_SVE_VL_INHERIT = 0x20000 + PR_SVE_VL_LEN_MASK = 0xffff PR_TASK_PERF_EVENTS_DISABLE = 0x1f PR_TASK_PERF_EVENTS_ENABLE = 0x20 PR_TIMING_STATISTICAL = 0x0 @@ -1219,12 +1293,22 @@ const ( RLIMIT_CPU = 0x0 RLIMIT_DATA = 0x2 RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x8 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb RLIMIT_STACK = 0x3 - RLIM_INFINITY = -0x1 + RLIM_INFINITY = 0xffffffffffffffff RTAX_ADVMSS = 0x8 RTAX_CC_ALGO = 0x10 RTAX_CWND = 0x7 + RTAX_FASTOPEN_NO_COOKIE = 0x11 RTAX_FEATURES = 0xc RTAX_FEATURE_ALLFRAG = 0x8 RTAX_FEATURE_ECN = 0x1 @@ -1235,7 +1319,7 @@ const ( RTAX_INITCWND = 0xb RTAX_INITRWND = 0xe RTAX_LOCK = 0x1 - RTAX_MAX = 0x10 + RTAX_MAX = 0x11 RTAX_MTU = 0x2 RTAX_QUICKACK = 0xf RTAX_REORDERING = 0x9 @@ -1246,7 +1330,7 @@ const ( RTAX_UNSPEC = 0x0 RTAX_WINDOW = 0x3 RTA_ALIGNTO = 0x4 - RTA_MAX = 0x19 + RTA_MAX = 0x1a RTCF_DIRECTSRC = 0x4000000 RTCF_DOREDIRECT = 0x1000000 RTCF_LOG = 0x2000000 @@ -1290,6 +1374,7 @@ const ( RTM_DELLINK = 0x11 RTM_DELMDB = 0x55 RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 RTM_DELNSID = 0x59 RTM_DELQDISC = 0x25 RTM_DELROUTE = 0x19 @@ -1298,6 +1383,7 @@ const ( RTM_DELTFILTER = 0x2d RTM_F_CLONED = 0x200 RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 RTM_F_LOOKUP_TABLE = 0x1000 RTM_F_NOTIFY = 0x100 RTM_F_PREFIX = 0x800 @@ -1319,10 +1405,11 @@ const ( RTM_GETSTATS = 0x5e RTM_GETTCLASS = 0x2a RTM_GETTFILTER = 0x2e - RTM_MAX = 0x5f + RTM_MAX = 0x63 RTM_NEWACTION = 0x30 RTM_NEWADDR = 0x14 RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 RTM_NEWLINK = 0x10 RTM_NEWMDB = 0x54 RTM_NEWNDUSEROPT = 0x44 @@ -1337,8 +1424,8 @@ const ( RTM_NEWSTATS = 0x5c RTM_NEWTCLASS = 0x28 RTM_NEWTFILTER = 0x2c - RTM_NR_FAMILIES = 0x14 - RTM_NR_MSGTYPES = 0x50 + RTM_NR_FAMILIES = 0x15 + RTM_NR_MSGTYPES = 0x54 RTM_SETDCB = 0x4f RTM_SETLINK = 0x13 RTM_SETNEIGHTBL = 0x43 @@ -1349,6 +1436,7 @@ const ( RTNH_F_OFFLOAD = 0x8 RTNH_F_ONLINK = 0x4 RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 RTN_MAX = 0xb RTPROT_BABEL = 0x2a RTPROT_BIRD = 0xc @@ -1379,8 +1467,12 @@ const ( SCM_TIMESTAMP = 0x1d SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 @@ -1388,6 +1480,16 @@ const ( SIOCADDMULTI = 0x8931 SIOCADDRT = 0x890b SIOCATMARK = 0x8905 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 SIOCDARP = 0x8953 SIOCDELDLCI = 0x8981 SIOCDELMULTI = 0x8932 @@ -1395,7 +1497,9 @@ const ( SIOCDEVPRIVATE = 0x89f0 SIOCDIFADDR = 0x8936 SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 SIOCGIFADDR = 0x8915 SIOCGIFBR = 0x8940 SIOCGIFBRDADDR = 0x8919 @@ -1415,13 +1519,21 @@ const ( SIOCGIFPFLAGS = 0x8935 SIOCGIFSLAVE = 0x8929 SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 SIOCGPGRP = 0x8904 SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c SIOCGSTAMP = 0x8906 SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x541b + SIOCOUTQ = 0x5411 + SIOCOUTQNSD = 0x894b SIOCPROTOPRIVATE = 0x89e0 SIOCRTMSG = 0x890d SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 SIOCSIFADDR = 0x8916 SIOCSIFBR = 0x8941 SIOCSIFBRDADDR = 0x891a @@ -1440,11 +1552,15 @@ const ( SIOCSIFPFLAGS = 0x8934 SIOCSIFSLAVE = 0x8930 SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 SIOCSPGRP = 0x8902 SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a SOCK_CLOEXEC = 0x80000 SOCK_DCCP = 0x6 SOCK_DGRAM = 0x2 + SOCK_IOC_TYPE = 0x89 SOCK_NONBLOCK = 0x800 SOCK_PACKET = 0xa SOCK_RAW = 0x3 @@ -1477,6 +1593,7 @@ const ( SOL_SOCKET = 0x1 SOL_TCP = 0x6 SOL_TIPC = 0x10f + SOL_TLS = 0x11a SOL_X25 = 0x106 SOMAXCONN = 0x80 SO_ACCEPTCONN = 0x1e @@ -1490,6 +1607,7 @@ const ( SO_BSDCOMPAT = 0xe SO_BUSY_POLL = 0x2e SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 SO_DEBUG = 0x1 SO_DETACH_BPF = 0x1b SO_DETACH_FILTER = 0x1b @@ -1498,11 +1616,13 @@ const ( SO_ERROR = 0x4 SO_GET_FILTER = 0x1a SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 SO_KEEPALIVE = 0x9 SO_LINGER = 0xd SO_LOCK_FILTER = 0x2c SO_MARK = 0x24 SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 SO_NOFCS = 0x2b SO_NO_CHECK = 0xb SO_OOBINLINE = 0xa @@ -1510,6 +1630,7 @@ const ( SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 + SO_PEERGROUPS = 0x3b SO_PEERNAME = 0x1c SO_PEERSEC = 0x1f SO_PRIORITY = 0xc @@ -1541,10 +1662,32 @@ const ( SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 SO_VM_SOCKETS_TRUSTED = 0x5 SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c SPLICE_F_GIFT = 0x8 SPLICE_F_MORE = 0x4 SPLICE_F_MOVE = 0x1 SPLICE_F_NONBLOCK = 0x2 + STATX_ALL = 0xfff + STATX_ATIME = 0x20 + STATX_ATTR_APPEND = 0x20 + STATX_ATTR_AUTOMOUNT = 0x1000 + STATX_ATTR_COMPRESSED = 0x4 + STATX_ATTR_ENCRYPTED = 0x800 + STATX_ATTR_IMMUTABLE = 0x10 + STATX_ATTR_NODUMP = 0x40 + STATX_BASIC_STATS = 0x7ff + STATX_BLOCKS = 0x400 + STATX_BTIME = 0x800 + STATX_CTIME = 0x80 + STATX_GID = 0x10 + STATX_INO = 0x100 + STATX_MODE = 0x2 + STATX_MTIME = 0x40 + STATX_NLINK = 0x4 + STATX_SIZE = 0x200 + STATX_TYPE = 0x1 + STATX_UID = 0x8 + STATX__RESERVED = 0x80000000 S_BLKSIZE = 0x200 S_IEXEC = 0x40 S_IFBLK = 0x6000 @@ -1577,6 +1720,12 @@ const ( TAB2 = 0x1000 TAB3 = 0x1800 TABDLY = 0x1800 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 TCFLSH = 0x540b TCGETA = 0x5405 TCGETS = 0x5401 @@ -1600,6 +1749,7 @@ const ( TCP_CORK = 0x3 TCP_DEFER_ACCEPT = 0x9 TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e TCP_INFO = 0xb TCP_KEEPCNT = 0x6 TCP_KEEPIDLE = 0x4 @@ -1609,6 +1759,8 @@ const ( TCP_MAXWIN = 0xffff TCP_MAX_WINSHIFT = 0xe TCP_MD5SIG = 0xe + TCP_MD5SIG_EXT = 0x20 + TCP_MD5SIG_FLAG_PREFIX = 0x1 TCP_MD5SIG_MAXKEYLEN = 0x50 TCP_MSS = 0x200 TCP_MSS_DEFAULT = 0x218 @@ -1629,6 +1781,7 @@ const ( TCP_THIN_DUPACK = 0x11 TCP_THIN_LINEAR_TIMEOUTS = 0x10 TCP_TIMESTAMP = 0x18 + TCP_ULP = 0x1f TCP_USER_TIMEOUT = 0x12 TCP_WINDOW_CLAMP = 0xa TCSAFLUSH = 0x2 @@ -1659,6 +1812,7 @@ const ( TIOCGPKT = 0x80045438 TIOCGPTLCK = 0x80045439 TIOCGPTN = 0x80045430 + TIOCGPTPEER = 0x5441 TIOCGRS485 = 0x542e TIOCGSERIAL = 0x541e TIOCGSID = 0x5429 @@ -1716,6 +1870,7 @@ const ( TIOCSWINSZ = 0x5414 TIOCVHANGUP = 0x5437 TOSTOP = 0x100 + TS_COMM_LEN = 0x20 TUNATTACHFILTER = 0x400854d5 TUNDETACHFILTER = 0x400854d6 TUNGETFEATURES = 0x800454cf @@ -1740,6 +1895,9 @@ const ( TUNSETVNETBE = 0x400454de TUNSETVNETHDRSZ = 0x400454d8 TUNSETVNETLE = 0x400454dc + UMOUNT_NOFOLLOW = 0x8 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe VDISCARD = 0xd VEOF = 0x4 VEOL = 0xb @@ -1769,6 +1927,17 @@ const ( WALL = 0x40000000 WCLONE = 0x80000000 WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x80045702 + WDIOC_GETPRETIMEOUT = 0x80045709 + WDIOC_GETSTATUS = 0x80045701 + WDIOC_GETSUPPORT = 0x80285700 + WDIOC_GETTEMP = 0x80045703 + WDIOC_GETTIMELEFT = 0x8004570a + WDIOC_GETTIMEOUT = 0x80045707 + WDIOC_KEEPALIVE = 0x80045705 + WDIOC_SETOPTIONS = 0x80045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 WEXITED = 0x4 WNOHANG = 0x1 WNOTHREAD = 0x20000000 @@ -1776,6 +1945,8 @@ const ( WORDSIZE = 0x20 WSTOPPED = 0x2 WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 XCASE = 0x4 XTABS = 0x1800 ) @@ -1947,7 +2118,6 @@ const ( SIGTSTP = syscall.Signal(0x14) SIGTTIN = syscall.Signal(0x15) SIGTTOU = syscall.Signal(0x16) - SIGUNUSED = syscall.Signal(0x1f) SIGURG = syscall.Signal(0x17) SIGUSR1 = syscall.Signal(0xa) SIGUSR2 = syscall.Signal(0xc) 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 e8b2335..eb2a22f 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go @@ -36,7 +36,7 @@ const ( AF_KEY = 0xf AF_LLC = 0x1a AF_LOCAL = 0x1 - AF_MAX = 0x2b + AF_MAX = 0x2c AF_MPLS = 0x1c AF_NETBEUI = 0xd AF_NETLINK = 0x10 @@ -51,6 +51,7 @@ const ( AF_ROUTE = 0x10 AF_RXRPC = 0x21 AF_SECURITY = 0xe + AF_SMC = 0x2b AF_SNA = 0x16 AF_TIPC = 0x1e AF_UNIX = 0x1 @@ -120,6 +121,7 @@ const ( ARPHRD_PPP = 0x200 ARPHRD_PRONET = 0x4 ARPHRD_RAWHDLC = 0x206 + ARPHRD_RAWIP = 0x207 ARPHRD_ROSE = 0x10e ARPHRD_RSRVD = 0x104 ARPHRD_SIT = 0x308 @@ -129,6 +131,7 @@ const ( ARPHRD_TUNNEL = 0x300 ARPHRD_TUNNEL6 = 0x301 ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a ARPHRD_X25 = 0x10f B0 = 0x0 B1000000 = 0x1008 @@ -325,6 +328,9 @@ const ( ECHOKE = 0x800 ECHONL = 0x40 ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EFD_SEMAPHORE = 0x1 ENCODING_DEFAULT = 0x0 ENCODING_FM_MARK = 0x3 ENCODING_FM_SPACE = 0x4 @@ -385,13 +391,16 @@ const ( ETH_P_DSA = 0x1b ETH_P_ECONET = 0x18 ETH_P_EDSA = 0xdada + ETH_P_ERSPAN = 0x88be ETH_P_FCOE = 0x8906 ETH_P_FIP = 0x8914 ETH_P_HDLC = 0x19 ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 ETH_P_IEEE802154 = 0xf6 ETH_P_IEEEPUP = 0xa00 ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IFE = 0xed3e ETH_P_IP = 0x800 ETH_P_IPV6 = 0x86dd ETH_P_IPX = 0x8137 @@ -402,11 +411,13 @@ const ( ETH_P_LOOP = 0x60 ETH_P_LOOPBACK = 0x9000 ETH_P_MACSEC = 0x88e5 + ETH_P_MAP = 0xf9 ETH_P_MOBITEX = 0x15 ETH_P_MPLS_MC = 0x8848 ETH_P_MPLS_UC = 0x8847 ETH_P_MVRP = 0x88f5 ETH_P_NCSI = 0x88f8 + ETH_P_NSH = 0x894f ETH_P_PAE = 0x888e ETH_P_PAUSE = 0x8808 ETH_P_PHONET = 0xf5 @@ -450,6 +461,8 @@ const ( FF1 = 0x8000 FFDLY = 0x8000 FLUSHO = 0x1000 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 @@ -468,6 +481,7 @@ const ( FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 FS_POLICY_FLAGS_VALID = 0x3 + F_ADD_SEALS = 0x409 F_DUPFD = 0x0 F_DUPFD_CLOEXEC = 0x406 F_EXLCK = 0x4 @@ -480,6 +494,9 @@ const ( F_GETOWN_EX = 0x10 F_GETPIPE_SZ = 0x408 F_GETSIG = 0xb + F_GET_FILE_RW_HINT = 0x40d + F_GET_RW_HINT = 0x40b + F_GET_SEALS = 0x40a F_LOCK = 0x1 F_NOTIFY = 0x402 F_OFD_GETLK = 0x24 @@ -487,6 +504,10 @@ const ( F_OFD_SETLKW = 0x26 F_OK = 0x0 F_RDLCK = 0x0 + F_SEAL_GROW = 0x4 + F_SEAL_SEAL = 0x1 + F_SEAL_SHRINK = 0x2 + F_SEAL_WRITE = 0x8 F_SETFD = 0x2 F_SETFL = 0x4 F_SETLEASE = 0x400 @@ -498,12 +519,27 @@ const ( F_SETOWN_EX = 0xf F_SETPIPE_SZ = 0x407 F_SETSIG = 0xa + F_SET_FILE_RW_HINT = 0x40e + F_SET_RW_HINT = 0x40c F_SHLCK = 0x8 F_TEST = 0x3 F_TLOCK = 0x2 F_ULOCK = 0x0 F_UNLCK = 0x2 F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 GRND_NONBLOCK = 0x1 GRND_RANDOM = 0x2 HUPCL = 0x400 @@ -540,6 +576,8 @@ const ( IFF_MASTER = 0x400 IFF_MULTICAST = 0x1000 IFF_MULTI_QUEUE = 0x100 + IFF_NAPI = 0x10 + IFF_NAPI_FRAGS = 0x20 IFF_NOARP = 0x80 IFF_NOFILTER = 0x1000 IFF_NOTRAILERS = 0x20 @@ -602,6 +640,7 @@ const ( IN_OPEN = 0x20 IN_Q_OVERFLOW = 0x4000 IN_UNMOUNT = 0x2000 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 IPPROTO_AH = 0x33 IPPROTO_BEETPH = 0x5e IPPROTO_COMP = 0x6c @@ -641,8 +680,10 @@ const ( IPV6_2292PKTOPTIONS = 0x6 IPV6_2292RTHDR = 0x5 IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 IPV6_ADD_MEMBERSHIP = 0x14 IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 IPV6_CHECKSUM = 0x7 IPV6_DONTFRAG = 0x3e IPV6_DROP_MEMBERSHIP = 0x15 @@ -655,12 +696,14 @@ const ( IPV6_JOIN_GROUP = 0x14 IPV6_LEAVE_ANYCAST = 0x1c IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 IPV6_MTU = 0x18 IPV6_MTU_DISCOVER = 0x17 IPV6_MULTICAST_HOPS = 0x12 IPV6_MULTICAST_IF = 0x11 IPV6_MULTICAST_LOOP = 0x13 IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a IPV6_PATHMTU = 0x3d IPV6_PKTINFO = 0x32 IPV6_PMTUDISC_DO = 0x2 @@ -671,8 +714,10 @@ const ( IPV6_PMTUDISC_WANT = 0x1 IPV6_RECVDSTOPTS = 0x3a IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d IPV6_RECVHOPLIMIT = 0x33 IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a IPV6_RECVPATHMTU = 0x3c IPV6_RECVPKTINFO = 0x31 IPV6_RECVRTHDR = 0x38 @@ -686,7 +731,9 @@ const ( IPV6_RXDSTOPTS = 0x3b IPV6_RXHOPOPTS = 0x36 IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c IPV6_V6ONLY = 0x1a IPV6_XFRM_POLICY = 0x23 IP_ADD_MEMBERSHIP = 0x23 @@ -729,6 +776,7 @@ const ( IP_PMTUDISC_PROBE = 0x3 IP_PMTUDISC_WANT = 0x1 IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 IP_RECVOPTS = 0x6 IP_RECVORIGDSTADDR = 0x14 IP_RECVRETOPTS = 0x7 @@ -766,6 +814,7 @@ const ( KEYCTL_NEGATE = 0xd KEYCTL_READ = 0xb KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d KEYCTL_REVOKE = 0x3 KEYCTL_SEARCH = 0xa KEYCTL_SESSION_TO_PARENT = 0x12 @@ -813,6 +862,7 @@ const ( MADV_FREE = 0x8 MADV_HUGEPAGE = 0xe MADV_HWPOISON = 0x64 + MADV_KEEPONFORK = 0x13 MADV_MERGEABLE = 0xc MADV_NOHUGEPAGE = 0xf MADV_NORMAL = 0x0 @@ -821,6 +871,7 @@ const ( MADV_SEQUENTIAL = 0x2 MADV_UNMERGEABLE = 0xd MADV_WILLNEED = 0x3 + MADV_WIPEONFORK = 0x12 MAP_32BIT = 0x40 MAP_ANON = 0x20 MAP_ANONYMOUS = 0x20 @@ -867,6 +918,7 @@ const ( MSG_TRYHARD = 0x4 MSG_WAITALL = 0x100 MSG_WAITFORONE = 0x10000 + MSG_ZEROCOPY = 0x4000000 MS_ACTIVE = 0x40000000 MS_ASYNC = 0x1 MS_BIND = 0x1000 @@ -899,6 +951,7 @@ const ( MS_SILENT = 0x8000 MS_SLAVE = 0x80000 MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 MS_SYNC = 0x4 MS_SYNCHRONOUS = 0x10 MS_UNBINDABLE = 0x20000 @@ -913,6 +966,7 @@ const ( NETLINK_DNRTMSG = 0xe NETLINK_DROP_MEMBERSHIP = 0x2 NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb NETLINK_FIB_LOOKUP = 0xa NETLINK_FIREWALL = 0x3 NETLINK_GENERIC = 0x10 @@ -931,6 +985,7 @@ const ( NETLINK_RX_RING = 0x6 NETLINK_SCSITRANSPORT = 0x12 NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 NETLINK_SOCK_DIAG = 0x4 NETLINK_TX_RING = 0x7 NETLINK_UNUSED = 0x1 @@ -951,8 +1006,10 @@ const ( NLMSG_NOOP = 0x1 NLMSG_OVERRUN = 0x4 NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 NLM_F_APPEND = 0x800 NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 NLM_F_CREATE = 0x400 NLM_F_DUMP = 0x300 NLM_F_DUMP_FILTERED = 0x20 @@ -961,6 +1018,7 @@ const ( NLM_F_EXCL = 0x200 NLM_F_MATCH = 0x200 NLM_F_MULTI = 0x2 + NLM_F_NONREC = 0x100 NLM_F_REPLACE = 0x100 NLM_F_REQUEST = 0x1 NLM_F_ROOT = 0x100 @@ -1009,6 +1067,7 @@ const ( PACKET_FANOUT_EBPF = 0x7 PACKET_FANOUT_FLAG_DEFRAG = 0x8000 PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 PACKET_FANOUT_HASH = 0x0 PACKET_FANOUT_LB = 0x1 PACKET_FANOUT_QM = 0x5 @@ -1053,6 +1112,16 @@ const ( PARMRK = 0x8 PARODD = 0x200 PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x2401 + PERF_EVENT_IOC_ENABLE = 0x2400 + PERF_EVENT_IOC_ID = 0x80082407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 + PERF_EVENT_IOC_PERIOD = 0x40082404 + PERF_EVENT_IOC_REFRESH = 0x2402 + PERF_EVENT_IOC_RESET = 0x2403 + PERF_EVENT_IOC_SET_BPF = 0x40042408 + PERF_EVENT_IOC_SET_FILTER = 0x40082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x2405 PRIO_PGRP = 0x1 PRIO_PROCESS = 0x0 PRIO_USER = 0x2 @@ -1140,7 +1209,7 @@ const ( PR_SET_NO_NEW_PRIVS = 0x26 PR_SET_PDEATHSIG = 0x1 PR_SET_PTRACER = 0x59616d61 - PR_SET_PTRACER_ANY = -0x1 + PR_SET_PTRACER_ANY = 0xffffffffffffffff PR_SET_SECCOMP = 0x16 PR_SET_SECUREBITS = 0x1c PR_SET_THP_DISABLE = 0x29 @@ -1148,6 +1217,11 @@ const ( PR_SET_TIMING = 0xe PR_SET_TSC = 0x1a PR_SET_UNALIGN = 0x6 + PR_SVE_GET_VL = 0x33 + PR_SVE_SET_VL = 0x32 + PR_SVE_SET_VL_ONEXEC = 0x40000 + PR_SVE_VL_INHERIT = 0x20000 + PR_SVE_VL_LEN_MASK = 0xffff PR_TASK_PERF_EVENTS_DISABLE = 0x1f PR_TASK_PERF_EVENTS_ENABLE = 0x20 PR_TIMING_STATISTICAL = 0x0 @@ -1220,12 +1294,22 @@ const ( RLIMIT_CPU = 0x0 RLIMIT_DATA = 0x2 RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x8 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb RLIMIT_STACK = 0x3 - RLIM_INFINITY = -0x1 + RLIM_INFINITY = 0xffffffffffffffff RTAX_ADVMSS = 0x8 RTAX_CC_ALGO = 0x10 RTAX_CWND = 0x7 + RTAX_FASTOPEN_NO_COOKIE = 0x11 RTAX_FEATURES = 0xc RTAX_FEATURE_ALLFRAG = 0x8 RTAX_FEATURE_ECN = 0x1 @@ -1236,7 +1320,7 @@ const ( RTAX_INITCWND = 0xb RTAX_INITRWND = 0xe RTAX_LOCK = 0x1 - RTAX_MAX = 0x10 + RTAX_MAX = 0x11 RTAX_MTU = 0x2 RTAX_QUICKACK = 0xf RTAX_REORDERING = 0x9 @@ -1247,7 +1331,7 @@ const ( RTAX_UNSPEC = 0x0 RTAX_WINDOW = 0x3 RTA_ALIGNTO = 0x4 - RTA_MAX = 0x19 + RTA_MAX = 0x1a RTCF_DIRECTSRC = 0x4000000 RTCF_DOREDIRECT = 0x1000000 RTCF_LOG = 0x2000000 @@ -1291,6 +1375,7 @@ const ( RTM_DELLINK = 0x11 RTM_DELMDB = 0x55 RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 RTM_DELNSID = 0x59 RTM_DELQDISC = 0x25 RTM_DELROUTE = 0x19 @@ -1299,6 +1384,7 @@ const ( RTM_DELTFILTER = 0x2d RTM_F_CLONED = 0x200 RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 RTM_F_LOOKUP_TABLE = 0x1000 RTM_F_NOTIFY = 0x100 RTM_F_PREFIX = 0x800 @@ -1320,10 +1406,11 @@ const ( RTM_GETSTATS = 0x5e RTM_GETTCLASS = 0x2a RTM_GETTFILTER = 0x2e - RTM_MAX = 0x5f + RTM_MAX = 0x63 RTM_NEWACTION = 0x30 RTM_NEWADDR = 0x14 RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 RTM_NEWLINK = 0x10 RTM_NEWMDB = 0x54 RTM_NEWNDUSEROPT = 0x44 @@ -1338,8 +1425,8 @@ const ( RTM_NEWSTATS = 0x5c RTM_NEWTCLASS = 0x28 RTM_NEWTFILTER = 0x2c - RTM_NR_FAMILIES = 0x14 - RTM_NR_MSGTYPES = 0x50 + RTM_NR_FAMILIES = 0x15 + RTM_NR_MSGTYPES = 0x54 RTM_SETDCB = 0x4f RTM_SETLINK = 0x13 RTM_SETNEIGHTBL = 0x43 @@ -1350,6 +1437,7 @@ const ( RTNH_F_OFFLOAD = 0x8 RTNH_F_ONLINK = 0x4 RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 RTN_MAX = 0xb RTPROT_BABEL = 0x2a RTPROT_BIRD = 0xc @@ -1380,8 +1468,12 @@ const ( SCM_TIMESTAMP = 0x1d SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 @@ -1389,6 +1481,16 @@ const ( SIOCADDMULTI = 0x8931 SIOCADDRT = 0x890b SIOCATMARK = 0x8905 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 SIOCDARP = 0x8953 SIOCDELDLCI = 0x8981 SIOCDELMULTI = 0x8932 @@ -1396,7 +1498,9 @@ const ( SIOCDEVPRIVATE = 0x89f0 SIOCDIFADDR = 0x8936 SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 SIOCGIFADDR = 0x8915 SIOCGIFBR = 0x8940 SIOCGIFBRDADDR = 0x8919 @@ -1416,13 +1520,21 @@ const ( SIOCGIFPFLAGS = 0x8935 SIOCGIFSLAVE = 0x8929 SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 SIOCGPGRP = 0x8904 SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c SIOCGSTAMP = 0x8906 SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x541b + SIOCOUTQ = 0x5411 + SIOCOUTQNSD = 0x894b SIOCPROTOPRIVATE = 0x89e0 SIOCRTMSG = 0x890d SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 SIOCSIFADDR = 0x8916 SIOCSIFBR = 0x8941 SIOCSIFBRDADDR = 0x891a @@ -1441,11 +1553,15 @@ const ( SIOCSIFPFLAGS = 0x8934 SIOCSIFSLAVE = 0x8930 SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 SIOCSPGRP = 0x8902 SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a SOCK_CLOEXEC = 0x80000 SOCK_DCCP = 0x6 SOCK_DGRAM = 0x2 + SOCK_IOC_TYPE = 0x89 SOCK_NONBLOCK = 0x800 SOCK_PACKET = 0xa SOCK_RAW = 0x3 @@ -1478,6 +1594,7 @@ const ( SOL_SOCKET = 0x1 SOL_TCP = 0x6 SOL_TIPC = 0x10f + SOL_TLS = 0x11a SOL_X25 = 0x106 SOMAXCONN = 0x80 SO_ACCEPTCONN = 0x1e @@ -1491,6 +1608,7 @@ const ( SO_BSDCOMPAT = 0xe SO_BUSY_POLL = 0x2e SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 SO_DEBUG = 0x1 SO_DETACH_BPF = 0x1b SO_DETACH_FILTER = 0x1b @@ -1499,11 +1617,13 @@ const ( SO_ERROR = 0x4 SO_GET_FILTER = 0x1a SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 SO_KEEPALIVE = 0x9 SO_LINGER = 0xd SO_LOCK_FILTER = 0x2c SO_MARK = 0x24 SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 SO_NOFCS = 0x2b SO_NO_CHECK = 0xb SO_OOBINLINE = 0xa @@ -1511,6 +1631,7 @@ const ( SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 + SO_PEERGROUPS = 0x3b SO_PEERNAME = 0x1c SO_PEERSEC = 0x1f SO_PRIORITY = 0xc @@ -1542,10 +1663,32 @@ const ( SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 SO_VM_SOCKETS_TRUSTED = 0x5 SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c SPLICE_F_GIFT = 0x8 SPLICE_F_MORE = 0x4 SPLICE_F_MOVE = 0x1 SPLICE_F_NONBLOCK = 0x2 + STATX_ALL = 0xfff + STATX_ATIME = 0x20 + STATX_ATTR_APPEND = 0x20 + STATX_ATTR_AUTOMOUNT = 0x1000 + STATX_ATTR_COMPRESSED = 0x4 + STATX_ATTR_ENCRYPTED = 0x800 + STATX_ATTR_IMMUTABLE = 0x10 + STATX_ATTR_NODUMP = 0x40 + STATX_BASIC_STATS = 0x7ff + STATX_BLOCKS = 0x400 + STATX_BTIME = 0x800 + STATX_CTIME = 0x80 + STATX_GID = 0x10 + STATX_INO = 0x100 + STATX_MODE = 0x2 + STATX_MTIME = 0x40 + STATX_NLINK = 0x4 + STATX_SIZE = 0x200 + STATX_TYPE = 0x1 + STATX_UID = 0x8 + STATX__RESERVED = 0x80000000 S_BLKSIZE = 0x200 S_IEXEC = 0x40 S_IFBLK = 0x6000 @@ -1578,6 +1721,12 @@ const ( TAB2 = 0x1000 TAB3 = 0x1800 TABDLY = 0x1800 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 TCFLSH = 0x540b TCGETA = 0x5405 TCGETS = 0x5401 @@ -1601,6 +1750,7 @@ const ( TCP_CORK = 0x3 TCP_DEFER_ACCEPT = 0x9 TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e TCP_INFO = 0xb TCP_KEEPCNT = 0x6 TCP_KEEPIDLE = 0x4 @@ -1610,6 +1760,8 @@ const ( TCP_MAXWIN = 0xffff TCP_MAX_WINSHIFT = 0xe TCP_MD5SIG = 0xe + TCP_MD5SIG_EXT = 0x20 + TCP_MD5SIG_FLAG_PREFIX = 0x1 TCP_MD5SIG_MAXKEYLEN = 0x50 TCP_MSS = 0x200 TCP_MSS_DEFAULT = 0x218 @@ -1630,6 +1782,7 @@ const ( TCP_THIN_DUPACK = 0x11 TCP_THIN_LINEAR_TIMEOUTS = 0x10 TCP_TIMESTAMP = 0x18 + TCP_ULP = 0x1f TCP_USER_TIMEOUT = 0x12 TCP_WINDOW_CLAMP = 0xa TCSAFLUSH = 0x2 @@ -1660,6 +1813,7 @@ const ( TIOCGPKT = 0x80045438 TIOCGPTLCK = 0x80045439 TIOCGPTN = 0x80045430 + TIOCGPTPEER = 0x5441 TIOCGRS485 = 0x542e TIOCGSERIAL = 0x541e TIOCGSID = 0x5429 @@ -1717,6 +1871,7 @@ const ( TIOCSWINSZ = 0x5414 TIOCVHANGUP = 0x5437 TOSTOP = 0x100 + TS_COMM_LEN = 0x20 TUNATTACHFILTER = 0x401054d5 TUNDETACHFILTER = 0x401054d6 TUNGETFEATURES = 0x800454cf @@ -1741,6 +1896,9 @@ const ( TUNSETVNETBE = 0x400454de TUNSETVNETHDRSZ = 0x400454d8 TUNSETVNETLE = 0x400454dc + UMOUNT_NOFOLLOW = 0x8 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe VDISCARD = 0xd VEOF = 0x4 VEOL = 0xb @@ -1770,6 +1928,17 @@ const ( WALL = 0x40000000 WCLONE = 0x80000000 WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x80045702 + WDIOC_GETPRETIMEOUT = 0x80045709 + WDIOC_GETSTATUS = 0x80045701 + WDIOC_GETSUPPORT = 0x80285700 + WDIOC_GETTEMP = 0x80045703 + WDIOC_GETTIMELEFT = 0x8004570a + WDIOC_GETTIMEOUT = 0x80045707 + WDIOC_KEEPALIVE = 0x80045705 + WDIOC_SETOPTIONS = 0x80045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 WEXITED = 0x4 WNOHANG = 0x1 WNOTHREAD = 0x20000000 @@ -1777,6 +1946,8 @@ const ( WORDSIZE = 0x40 WSTOPPED = 0x2 WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 XCASE = 0x4 XTABS = 0x1800 ) @@ -1948,7 +2119,6 @@ const ( SIGTSTP = syscall.Signal(0x14) SIGTTIN = syscall.Signal(0x15) SIGTTOU = syscall.Signal(0x16) - SIGUNUSED = syscall.Signal(0x1f) SIGURG = syscall.Signal(0x17) SIGUSR1 = syscall.Signal(0xa) SIGUSR2 = syscall.Signal(0xc) 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 fd0fb1c..37d212c 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go @@ -36,7 +36,7 @@ const ( AF_KEY = 0xf AF_LLC = 0x1a AF_LOCAL = 0x1 - AF_MAX = 0x2b + AF_MAX = 0x2c AF_MPLS = 0x1c AF_NETBEUI = 0xd AF_NETLINK = 0x10 @@ -51,6 +51,7 @@ const ( AF_ROUTE = 0x10 AF_RXRPC = 0x21 AF_SECURITY = 0xe + AF_SMC = 0x2b AF_SNA = 0x16 AF_TIPC = 0x1e AF_UNIX = 0x1 @@ -120,6 +121,7 @@ const ( ARPHRD_PPP = 0x200 ARPHRD_PRONET = 0x4 ARPHRD_RAWHDLC = 0x206 + ARPHRD_RAWIP = 0x207 ARPHRD_ROSE = 0x10e ARPHRD_RSRVD = 0x104 ARPHRD_SIT = 0x308 @@ -129,6 +131,7 @@ const ( ARPHRD_TUNNEL = 0x300 ARPHRD_TUNNEL6 = 0x301 ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a ARPHRD_X25 = 0x10f B0 = 0x0 B1000000 = 0x1008 @@ -325,6 +328,9 @@ const ( ECHOKE = 0x800 ECHONL = 0x40 ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EFD_SEMAPHORE = 0x1 ENCODING_DEFAULT = 0x0 ENCODING_FM_MARK = 0x3 ENCODING_FM_SPACE = 0x4 @@ -385,13 +391,16 @@ const ( ETH_P_DSA = 0x1b ETH_P_ECONET = 0x18 ETH_P_EDSA = 0xdada + ETH_P_ERSPAN = 0x88be ETH_P_FCOE = 0x8906 ETH_P_FIP = 0x8914 ETH_P_HDLC = 0x19 ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 ETH_P_IEEE802154 = 0xf6 ETH_P_IEEEPUP = 0xa00 ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IFE = 0xed3e ETH_P_IP = 0x800 ETH_P_IPV6 = 0x86dd ETH_P_IPX = 0x8137 @@ -402,11 +411,13 @@ const ( ETH_P_LOOP = 0x60 ETH_P_LOOPBACK = 0x9000 ETH_P_MACSEC = 0x88e5 + ETH_P_MAP = 0xf9 ETH_P_MOBITEX = 0x15 ETH_P_MPLS_MC = 0x8848 ETH_P_MPLS_UC = 0x8847 ETH_P_MVRP = 0x88f5 ETH_P_NCSI = 0x88f8 + ETH_P_NSH = 0x894f ETH_P_PAE = 0x888e ETH_P_PAUSE = 0x8808 ETH_P_PHONET = 0xf5 @@ -450,6 +461,8 @@ const ( FF1 = 0x8000 FFDLY = 0x8000 FLUSHO = 0x1000 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 @@ -468,6 +481,7 @@ const ( FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 FS_POLICY_FLAGS_VALID = 0x3 + F_ADD_SEALS = 0x409 F_DUPFD = 0x0 F_DUPFD_CLOEXEC = 0x406 F_EXLCK = 0x4 @@ -480,6 +494,9 @@ const ( F_GETOWN_EX = 0x10 F_GETPIPE_SZ = 0x408 F_GETSIG = 0xb + F_GET_FILE_RW_HINT = 0x40d + F_GET_RW_HINT = 0x40b + F_GET_SEALS = 0x40a F_LOCK = 0x1 F_NOTIFY = 0x402 F_OFD_GETLK = 0x24 @@ -487,6 +504,10 @@ const ( F_OFD_SETLKW = 0x26 F_OK = 0x0 F_RDLCK = 0x0 + F_SEAL_GROW = 0x4 + F_SEAL_SEAL = 0x1 + F_SEAL_SHRINK = 0x2 + F_SEAL_WRITE = 0x8 F_SETFD = 0x2 F_SETFL = 0x4 F_SETLEASE = 0x400 @@ -498,12 +519,27 @@ const ( F_SETOWN_EX = 0xf F_SETPIPE_SZ = 0x407 F_SETSIG = 0xa + F_SET_FILE_RW_HINT = 0x40e + F_SET_RW_HINT = 0x40c F_SHLCK = 0x8 F_TEST = 0x3 F_TLOCK = 0x2 F_ULOCK = 0x0 F_UNLCK = 0x2 F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 GRND_NONBLOCK = 0x1 GRND_RANDOM = 0x2 HUPCL = 0x400 @@ -540,6 +576,8 @@ const ( IFF_MASTER = 0x400 IFF_MULTICAST = 0x1000 IFF_MULTI_QUEUE = 0x100 + IFF_NAPI = 0x10 + IFF_NAPI_FRAGS = 0x20 IFF_NOARP = 0x80 IFF_NOFILTER = 0x1000 IFF_NOTRAILERS = 0x20 @@ -602,6 +640,7 @@ const ( IN_OPEN = 0x20 IN_Q_OVERFLOW = 0x4000 IN_UNMOUNT = 0x2000 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 IPPROTO_AH = 0x33 IPPROTO_BEETPH = 0x5e IPPROTO_COMP = 0x6c @@ -641,8 +680,10 @@ const ( IPV6_2292PKTOPTIONS = 0x6 IPV6_2292RTHDR = 0x5 IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 IPV6_ADD_MEMBERSHIP = 0x14 IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 IPV6_CHECKSUM = 0x7 IPV6_DONTFRAG = 0x3e IPV6_DROP_MEMBERSHIP = 0x15 @@ -655,12 +696,14 @@ const ( IPV6_JOIN_GROUP = 0x14 IPV6_LEAVE_ANYCAST = 0x1c IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 IPV6_MTU = 0x18 IPV6_MTU_DISCOVER = 0x17 IPV6_MULTICAST_HOPS = 0x12 IPV6_MULTICAST_IF = 0x11 IPV6_MULTICAST_LOOP = 0x13 IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a IPV6_PATHMTU = 0x3d IPV6_PKTINFO = 0x32 IPV6_PMTUDISC_DO = 0x2 @@ -671,8 +714,10 @@ const ( IPV6_PMTUDISC_WANT = 0x1 IPV6_RECVDSTOPTS = 0x3a IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d IPV6_RECVHOPLIMIT = 0x33 IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a IPV6_RECVPATHMTU = 0x3c IPV6_RECVPKTINFO = 0x31 IPV6_RECVRTHDR = 0x38 @@ -686,7 +731,9 @@ const ( IPV6_RXDSTOPTS = 0x3b IPV6_RXHOPOPTS = 0x36 IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c IPV6_V6ONLY = 0x1a IPV6_XFRM_POLICY = 0x23 IP_ADD_MEMBERSHIP = 0x23 @@ -729,6 +776,7 @@ const ( IP_PMTUDISC_PROBE = 0x3 IP_PMTUDISC_WANT = 0x1 IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 IP_RECVOPTS = 0x6 IP_RECVORIGDSTADDR = 0x14 IP_RECVRETOPTS = 0x7 @@ -766,6 +814,7 @@ const ( KEYCTL_NEGATE = 0xd KEYCTL_READ = 0xb KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d KEYCTL_REVOKE = 0x3 KEYCTL_SEARCH = 0xa KEYCTL_SESSION_TO_PARENT = 0x12 @@ -813,6 +862,7 @@ const ( MADV_FREE = 0x8 MADV_HUGEPAGE = 0xe MADV_HWPOISON = 0x64 + MADV_KEEPONFORK = 0x13 MADV_MERGEABLE = 0xc MADV_NOHUGEPAGE = 0xf MADV_NORMAL = 0x0 @@ -821,6 +871,7 @@ const ( MADV_SEQUENTIAL = 0x2 MADV_UNMERGEABLE = 0xd MADV_WILLNEED = 0x3 + MADV_WIPEONFORK = 0x12 MAP_ANON = 0x20 MAP_ANONYMOUS = 0x20 MAP_DENYWRITE = 0x800 @@ -866,6 +917,7 @@ const ( MSG_TRYHARD = 0x4 MSG_WAITALL = 0x100 MSG_WAITFORONE = 0x10000 + MSG_ZEROCOPY = 0x4000000 MS_ACTIVE = 0x40000000 MS_ASYNC = 0x1 MS_BIND = 0x1000 @@ -898,6 +950,7 @@ const ( MS_SILENT = 0x8000 MS_SLAVE = 0x80000 MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 MS_SYNC = 0x4 MS_SYNCHRONOUS = 0x10 MS_UNBINDABLE = 0x20000 @@ -912,6 +965,7 @@ const ( NETLINK_DNRTMSG = 0xe NETLINK_DROP_MEMBERSHIP = 0x2 NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb NETLINK_FIB_LOOKUP = 0xa NETLINK_FIREWALL = 0x3 NETLINK_GENERIC = 0x10 @@ -930,6 +984,7 @@ const ( NETLINK_RX_RING = 0x6 NETLINK_SCSITRANSPORT = 0x12 NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 NETLINK_SOCK_DIAG = 0x4 NETLINK_TX_RING = 0x7 NETLINK_UNUSED = 0x1 @@ -950,8 +1005,10 @@ const ( NLMSG_NOOP = 0x1 NLMSG_OVERRUN = 0x4 NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 NLM_F_APPEND = 0x800 NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 NLM_F_CREATE = 0x400 NLM_F_DUMP = 0x300 NLM_F_DUMP_FILTERED = 0x20 @@ -960,6 +1017,7 @@ const ( NLM_F_EXCL = 0x200 NLM_F_MATCH = 0x200 NLM_F_MULTI = 0x2 + NLM_F_NONREC = 0x100 NLM_F_REPLACE = 0x100 NLM_F_REQUEST = 0x1 NLM_F_ROOT = 0x100 @@ -1008,6 +1066,7 @@ const ( PACKET_FANOUT_EBPF = 0x7 PACKET_FANOUT_FLAG_DEFRAG = 0x8000 PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 PACKET_FANOUT_HASH = 0x0 PACKET_FANOUT_LB = 0x1 PACKET_FANOUT_QM = 0x5 @@ -1052,6 +1111,16 @@ const ( PARMRK = 0x8 PARODD = 0x200 PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x2401 + PERF_EVENT_IOC_ENABLE = 0x2400 + PERF_EVENT_IOC_ID = 0x80042407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 + PERF_EVENT_IOC_PERIOD = 0x40082404 + PERF_EVENT_IOC_REFRESH = 0x2402 + PERF_EVENT_IOC_RESET = 0x2403 + PERF_EVENT_IOC_SET_BPF = 0x40042408 + PERF_EVENT_IOC_SET_FILTER = 0x40042406 + PERF_EVENT_IOC_SET_OUTPUT = 0x2405 PRIO_PGRP = 0x1 PRIO_PROCESS = 0x0 PRIO_USER = 0x2 @@ -1147,6 +1216,11 @@ const ( PR_SET_TIMING = 0xe PR_SET_TSC = 0x1a PR_SET_UNALIGN = 0x6 + PR_SVE_GET_VL = 0x33 + PR_SVE_SET_VL = 0x32 + PR_SVE_SET_VL_ONEXEC = 0x40000 + PR_SVE_VL_INHERIT = 0x20000 + PR_SVE_VL_LEN_MASK = 0xffff PR_TASK_PERF_EVENTS_DISABLE = 0x1f PR_TASK_PERF_EVENTS_ENABLE = 0x20 PR_TIMING_STATISTICAL = 0x0 @@ -1168,6 +1242,9 @@ const ( PTRACE_EVENT_VFORK_DONE = 0x5 PTRACE_GETCRUNCHREGS = 0x19 PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETFDPIC = 0x1f + PTRACE_GETFDPIC_EXEC = 0x0 + PTRACE_GETFDPIC_INTERP = 0x1 PTRACE_GETFPREGS = 0xe PTRACE_GETHBPREGS = 0x1d PTRACE_GETREGS = 0xc @@ -1224,12 +1301,22 @@ const ( RLIMIT_CPU = 0x0 RLIMIT_DATA = 0x2 RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x8 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb RLIMIT_STACK = 0x3 - RLIM_INFINITY = -0x1 + RLIM_INFINITY = 0xffffffffffffffff RTAX_ADVMSS = 0x8 RTAX_CC_ALGO = 0x10 RTAX_CWND = 0x7 + RTAX_FASTOPEN_NO_COOKIE = 0x11 RTAX_FEATURES = 0xc RTAX_FEATURE_ALLFRAG = 0x8 RTAX_FEATURE_ECN = 0x1 @@ -1240,7 +1327,7 @@ const ( RTAX_INITCWND = 0xb RTAX_INITRWND = 0xe RTAX_LOCK = 0x1 - RTAX_MAX = 0x10 + RTAX_MAX = 0x11 RTAX_MTU = 0x2 RTAX_QUICKACK = 0xf RTAX_REORDERING = 0x9 @@ -1251,7 +1338,7 @@ const ( RTAX_UNSPEC = 0x0 RTAX_WINDOW = 0x3 RTA_ALIGNTO = 0x4 - RTA_MAX = 0x19 + RTA_MAX = 0x1a RTCF_DIRECTSRC = 0x4000000 RTCF_DOREDIRECT = 0x1000000 RTCF_LOG = 0x2000000 @@ -1295,6 +1382,7 @@ const ( RTM_DELLINK = 0x11 RTM_DELMDB = 0x55 RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 RTM_DELNSID = 0x59 RTM_DELQDISC = 0x25 RTM_DELROUTE = 0x19 @@ -1303,6 +1391,7 @@ const ( RTM_DELTFILTER = 0x2d RTM_F_CLONED = 0x200 RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 RTM_F_LOOKUP_TABLE = 0x1000 RTM_F_NOTIFY = 0x100 RTM_F_PREFIX = 0x800 @@ -1324,10 +1413,11 @@ const ( RTM_GETSTATS = 0x5e RTM_GETTCLASS = 0x2a RTM_GETTFILTER = 0x2e - RTM_MAX = 0x5f + RTM_MAX = 0x63 RTM_NEWACTION = 0x30 RTM_NEWADDR = 0x14 RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 RTM_NEWLINK = 0x10 RTM_NEWMDB = 0x54 RTM_NEWNDUSEROPT = 0x44 @@ -1342,8 +1432,8 @@ const ( RTM_NEWSTATS = 0x5c RTM_NEWTCLASS = 0x28 RTM_NEWTFILTER = 0x2c - RTM_NR_FAMILIES = 0x14 - RTM_NR_MSGTYPES = 0x50 + RTM_NR_FAMILIES = 0x15 + RTM_NR_MSGTYPES = 0x54 RTM_SETDCB = 0x4f RTM_SETLINK = 0x13 RTM_SETNEIGHTBL = 0x43 @@ -1354,6 +1444,7 @@ const ( RTNH_F_OFFLOAD = 0x8 RTNH_F_ONLINK = 0x4 RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 RTN_MAX = 0xb RTPROT_BABEL = 0x2a RTPROT_BIRD = 0xc @@ -1384,8 +1475,12 @@ const ( SCM_TIMESTAMP = 0x1d SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 @@ -1393,6 +1488,16 @@ const ( SIOCADDMULTI = 0x8931 SIOCADDRT = 0x890b SIOCATMARK = 0x8905 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 SIOCDARP = 0x8953 SIOCDELDLCI = 0x8981 SIOCDELMULTI = 0x8932 @@ -1400,7 +1505,9 @@ const ( SIOCDEVPRIVATE = 0x89f0 SIOCDIFADDR = 0x8936 SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 SIOCGIFADDR = 0x8915 SIOCGIFBR = 0x8940 SIOCGIFBRDADDR = 0x8919 @@ -1420,13 +1527,21 @@ const ( SIOCGIFPFLAGS = 0x8935 SIOCGIFSLAVE = 0x8929 SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 SIOCGPGRP = 0x8904 SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c SIOCGSTAMP = 0x8906 SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x541b + SIOCOUTQ = 0x5411 + SIOCOUTQNSD = 0x894b SIOCPROTOPRIVATE = 0x89e0 SIOCRTMSG = 0x890d SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 SIOCSIFADDR = 0x8916 SIOCSIFBR = 0x8941 SIOCSIFBRDADDR = 0x891a @@ -1445,11 +1560,15 @@ const ( SIOCSIFPFLAGS = 0x8934 SIOCSIFSLAVE = 0x8930 SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 SIOCSPGRP = 0x8902 SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a SOCK_CLOEXEC = 0x80000 SOCK_DCCP = 0x6 SOCK_DGRAM = 0x2 + SOCK_IOC_TYPE = 0x89 SOCK_NONBLOCK = 0x800 SOCK_PACKET = 0xa SOCK_RAW = 0x3 @@ -1482,6 +1601,7 @@ const ( SOL_SOCKET = 0x1 SOL_TCP = 0x6 SOL_TIPC = 0x10f + SOL_TLS = 0x11a SOL_X25 = 0x106 SOMAXCONN = 0x80 SO_ACCEPTCONN = 0x1e @@ -1495,6 +1615,7 @@ const ( SO_BSDCOMPAT = 0xe SO_BUSY_POLL = 0x2e SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 SO_DEBUG = 0x1 SO_DETACH_BPF = 0x1b SO_DETACH_FILTER = 0x1b @@ -1503,11 +1624,13 @@ const ( SO_ERROR = 0x4 SO_GET_FILTER = 0x1a SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 SO_KEEPALIVE = 0x9 SO_LINGER = 0xd SO_LOCK_FILTER = 0x2c SO_MARK = 0x24 SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 SO_NOFCS = 0x2b SO_NO_CHECK = 0xb SO_OOBINLINE = 0xa @@ -1515,6 +1638,7 @@ const ( SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 + SO_PEERGROUPS = 0x3b SO_PEERNAME = 0x1c SO_PEERSEC = 0x1f SO_PRIORITY = 0xc @@ -1546,10 +1670,32 @@ const ( SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 SO_VM_SOCKETS_TRUSTED = 0x5 SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c SPLICE_F_GIFT = 0x8 SPLICE_F_MORE = 0x4 SPLICE_F_MOVE = 0x1 SPLICE_F_NONBLOCK = 0x2 + STATX_ALL = 0xfff + STATX_ATIME = 0x20 + STATX_ATTR_APPEND = 0x20 + STATX_ATTR_AUTOMOUNT = 0x1000 + STATX_ATTR_COMPRESSED = 0x4 + STATX_ATTR_ENCRYPTED = 0x800 + STATX_ATTR_IMMUTABLE = 0x10 + STATX_ATTR_NODUMP = 0x40 + STATX_BASIC_STATS = 0x7ff + STATX_BLOCKS = 0x400 + STATX_BTIME = 0x800 + STATX_CTIME = 0x80 + STATX_GID = 0x10 + STATX_INO = 0x100 + STATX_MODE = 0x2 + STATX_MTIME = 0x40 + STATX_NLINK = 0x4 + STATX_SIZE = 0x200 + STATX_TYPE = 0x1 + STATX_UID = 0x8 + STATX__RESERVED = 0x80000000 S_BLKSIZE = 0x200 S_IEXEC = 0x40 S_IFBLK = 0x6000 @@ -1582,6 +1728,12 @@ const ( TAB2 = 0x1000 TAB3 = 0x1800 TABDLY = 0x1800 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 TCFLSH = 0x540b TCGETA = 0x5405 TCGETS = 0x5401 @@ -1605,6 +1757,7 @@ const ( TCP_CORK = 0x3 TCP_DEFER_ACCEPT = 0x9 TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e TCP_INFO = 0xb TCP_KEEPCNT = 0x6 TCP_KEEPIDLE = 0x4 @@ -1614,6 +1767,8 @@ const ( TCP_MAXWIN = 0xffff TCP_MAX_WINSHIFT = 0xe TCP_MD5SIG = 0xe + TCP_MD5SIG_EXT = 0x20 + TCP_MD5SIG_FLAG_PREFIX = 0x1 TCP_MD5SIG_MAXKEYLEN = 0x50 TCP_MSS = 0x200 TCP_MSS_DEFAULT = 0x218 @@ -1634,6 +1789,7 @@ const ( TCP_THIN_DUPACK = 0x11 TCP_THIN_LINEAR_TIMEOUTS = 0x10 TCP_TIMESTAMP = 0x18 + TCP_ULP = 0x1f TCP_USER_TIMEOUT = 0x12 TCP_WINDOW_CLAMP = 0xa TCSAFLUSH = 0x2 @@ -1664,6 +1820,7 @@ const ( TIOCGPKT = 0x80045438 TIOCGPTLCK = 0x80045439 TIOCGPTN = 0x80045430 + TIOCGPTPEER = 0x5441 TIOCGRS485 = 0x542e TIOCGSERIAL = 0x541e TIOCGSID = 0x5429 @@ -1721,6 +1878,7 @@ const ( TIOCSWINSZ = 0x5414 TIOCVHANGUP = 0x5437 TOSTOP = 0x100 + TS_COMM_LEN = 0x20 TUNATTACHFILTER = 0x400854d5 TUNDETACHFILTER = 0x400854d6 TUNGETFEATURES = 0x800454cf @@ -1745,6 +1903,9 @@ const ( TUNSETVNETBE = 0x400454de TUNSETVNETHDRSZ = 0x400454d8 TUNSETVNETLE = 0x400454dc + UMOUNT_NOFOLLOW = 0x8 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe VDISCARD = 0xd VEOF = 0x4 VEOL = 0xb @@ -1774,6 +1935,17 @@ const ( WALL = 0x40000000 WCLONE = 0x80000000 WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x80045702 + WDIOC_GETPRETIMEOUT = 0x80045709 + WDIOC_GETSTATUS = 0x80045701 + WDIOC_GETSUPPORT = 0x80285700 + WDIOC_GETTEMP = 0x80045703 + WDIOC_GETTIMELEFT = 0x8004570a + WDIOC_GETTIMEOUT = 0x80045707 + WDIOC_KEEPALIVE = 0x80045705 + WDIOC_SETOPTIONS = 0x80045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 WEXITED = 0x4 WNOHANG = 0x1 WNOTHREAD = 0x20000000 @@ -1781,6 +1953,8 @@ const ( WORDSIZE = 0x20 WSTOPPED = 0x2 WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 XCASE = 0x4 XTABS = 0x1800 ) @@ -1952,7 +2126,6 @@ const ( SIGTSTP = syscall.Signal(0x14) SIGTTIN = syscall.Signal(0x15) SIGTTOU = syscall.Signal(0x16) - SIGUNUSED = syscall.Signal(0x1f) SIGURG = syscall.Signal(0x17) SIGUSR1 = syscall.Signal(0xa) SIGUSR2 = syscall.Signal(0xc) 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 50f7efb..51d84a3 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go @@ -36,7 +36,7 @@ const ( AF_KEY = 0xf AF_LLC = 0x1a AF_LOCAL = 0x1 - AF_MAX = 0x2b + AF_MAX = 0x2c AF_MPLS = 0x1c AF_NETBEUI = 0xd AF_NETLINK = 0x10 @@ -51,6 +51,7 @@ const ( AF_ROUTE = 0x10 AF_RXRPC = 0x21 AF_SECURITY = 0xe + AF_SMC = 0x2b AF_SNA = 0x16 AF_TIPC = 0x1e AF_UNIX = 0x1 @@ -120,6 +121,7 @@ const ( ARPHRD_PPP = 0x200 ARPHRD_PRONET = 0x4 ARPHRD_RAWHDLC = 0x206 + ARPHRD_RAWIP = 0x207 ARPHRD_ROSE = 0x10e ARPHRD_RSRVD = 0x104 ARPHRD_SIT = 0x308 @@ -129,6 +131,7 @@ const ( ARPHRD_TUNNEL = 0x300 ARPHRD_TUNNEL6 = 0x301 ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a ARPHRD_X25 = 0x10f B0 = 0x0 B1000000 = 0x1008 @@ -325,6 +328,9 @@ const ( ECHOKE = 0x800 ECHONL = 0x40 ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EFD_SEMAPHORE = 0x1 ENCODING_DEFAULT = 0x0 ENCODING_FM_MARK = 0x3 ENCODING_FM_SPACE = 0x4 @@ -386,13 +392,16 @@ const ( ETH_P_DSA = 0x1b ETH_P_ECONET = 0x18 ETH_P_EDSA = 0xdada + ETH_P_ERSPAN = 0x88be ETH_P_FCOE = 0x8906 ETH_P_FIP = 0x8914 ETH_P_HDLC = 0x19 ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 ETH_P_IEEE802154 = 0xf6 ETH_P_IEEEPUP = 0xa00 ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IFE = 0xed3e ETH_P_IP = 0x800 ETH_P_IPV6 = 0x86dd ETH_P_IPX = 0x8137 @@ -403,11 +412,13 @@ const ( ETH_P_LOOP = 0x60 ETH_P_LOOPBACK = 0x9000 ETH_P_MACSEC = 0x88e5 + ETH_P_MAP = 0xf9 ETH_P_MOBITEX = 0x15 ETH_P_MPLS_MC = 0x8848 ETH_P_MPLS_UC = 0x8847 ETH_P_MVRP = 0x88f5 ETH_P_NCSI = 0x88f8 + ETH_P_NSH = 0x894f ETH_P_PAE = 0x888e ETH_P_PAUSE = 0x8808 ETH_P_PHONET = 0xf5 @@ -438,6 +449,7 @@ const ( EXTA = 0xe EXTB = 0xf EXTPROC = 0x10000 + EXTRA_MAGIC = 0x45585401 FALLOC_FL_COLLAPSE_RANGE = 0x8 FALLOC_FL_INSERT_RANGE = 0x20 FALLOC_FL_KEEP_SIZE = 0x1 @@ -451,6 +463,8 @@ const ( FF1 = 0x8000 FFDLY = 0x8000 FLUSHO = 0x1000 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 @@ -469,6 +483,7 @@ const ( FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 FS_POLICY_FLAGS_VALID = 0x3 + F_ADD_SEALS = 0x409 F_DUPFD = 0x0 F_DUPFD_CLOEXEC = 0x406 F_EXLCK = 0x4 @@ -481,6 +496,9 @@ const ( F_GETOWN_EX = 0x10 F_GETPIPE_SZ = 0x408 F_GETSIG = 0xb + F_GET_FILE_RW_HINT = 0x40d + F_GET_RW_HINT = 0x40b + F_GET_SEALS = 0x40a F_LOCK = 0x1 F_NOTIFY = 0x402 F_OFD_GETLK = 0x24 @@ -488,6 +506,10 @@ const ( F_OFD_SETLKW = 0x26 F_OK = 0x0 F_RDLCK = 0x0 + F_SEAL_GROW = 0x4 + F_SEAL_SEAL = 0x1 + F_SEAL_SHRINK = 0x2 + F_SEAL_WRITE = 0x8 F_SETFD = 0x2 F_SETFL = 0x4 F_SETLEASE = 0x400 @@ -499,12 +521,27 @@ const ( F_SETOWN_EX = 0xf F_SETPIPE_SZ = 0x407 F_SETSIG = 0xa + F_SET_FILE_RW_HINT = 0x40e + F_SET_RW_HINT = 0x40c F_SHLCK = 0x8 F_TEST = 0x3 F_TLOCK = 0x2 F_ULOCK = 0x0 F_UNLCK = 0x2 F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 GRND_NONBLOCK = 0x1 GRND_RANDOM = 0x2 HUPCL = 0x400 @@ -541,6 +578,8 @@ const ( IFF_MASTER = 0x400 IFF_MULTICAST = 0x1000 IFF_MULTI_QUEUE = 0x100 + IFF_NAPI = 0x10 + IFF_NAPI_FRAGS = 0x20 IFF_NOARP = 0x80 IFF_NOFILTER = 0x1000 IFF_NOTRAILERS = 0x20 @@ -603,6 +642,7 @@ const ( IN_OPEN = 0x20 IN_Q_OVERFLOW = 0x4000 IN_UNMOUNT = 0x2000 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 IPPROTO_AH = 0x33 IPPROTO_BEETPH = 0x5e IPPROTO_COMP = 0x6c @@ -642,8 +682,10 @@ const ( IPV6_2292PKTOPTIONS = 0x6 IPV6_2292RTHDR = 0x5 IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 IPV6_ADD_MEMBERSHIP = 0x14 IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 IPV6_CHECKSUM = 0x7 IPV6_DONTFRAG = 0x3e IPV6_DROP_MEMBERSHIP = 0x15 @@ -656,12 +698,14 @@ const ( IPV6_JOIN_GROUP = 0x14 IPV6_LEAVE_ANYCAST = 0x1c IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 IPV6_MTU = 0x18 IPV6_MTU_DISCOVER = 0x17 IPV6_MULTICAST_HOPS = 0x12 IPV6_MULTICAST_IF = 0x11 IPV6_MULTICAST_LOOP = 0x13 IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a IPV6_PATHMTU = 0x3d IPV6_PKTINFO = 0x32 IPV6_PMTUDISC_DO = 0x2 @@ -672,8 +716,10 @@ const ( IPV6_PMTUDISC_WANT = 0x1 IPV6_RECVDSTOPTS = 0x3a IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d IPV6_RECVHOPLIMIT = 0x33 IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a IPV6_RECVPATHMTU = 0x3c IPV6_RECVPKTINFO = 0x31 IPV6_RECVRTHDR = 0x38 @@ -687,7 +733,9 @@ const ( IPV6_RXDSTOPTS = 0x3b IPV6_RXHOPOPTS = 0x36 IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c IPV6_V6ONLY = 0x1a IPV6_XFRM_POLICY = 0x23 IP_ADD_MEMBERSHIP = 0x23 @@ -730,6 +778,7 @@ const ( IP_PMTUDISC_PROBE = 0x3 IP_PMTUDISC_WANT = 0x1 IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 IP_RECVOPTS = 0x6 IP_RECVORIGDSTADDR = 0x14 IP_RECVRETOPTS = 0x7 @@ -767,6 +816,7 @@ const ( KEYCTL_NEGATE = 0xd KEYCTL_READ = 0xb KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d KEYCTL_REVOKE = 0x3 KEYCTL_SEARCH = 0xa KEYCTL_SESSION_TO_PARENT = 0x12 @@ -814,6 +864,7 @@ const ( MADV_FREE = 0x8 MADV_HUGEPAGE = 0xe MADV_HWPOISON = 0x64 + MADV_KEEPONFORK = 0x13 MADV_MERGEABLE = 0xc MADV_NOHUGEPAGE = 0xf MADV_NORMAL = 0x0 @@ -822,6 +873,7 @@ const ( MADV_SEQUENTIAL = 0x2 MADV_UNMERGEABLE = 0xd MADV_WILLNEED = 0x3 + MADV_WIPEONFORK = 0x12 MAP_ANON = 0x20 MAP_ANONYMOUS = 0x20 MAP_DENYWRITE = 0x800 @@ -867,6 +919,7 @@ const ( MSG_TRYHARD = 0x4 MSG_WAITALL = 0x100 MSG_WAITFORONE = 0x10000 + MSG_ZEROCOPY = 0x4000000 MS_ACTIVE = 0x40000000 MS_ASYNC = 0x1 MS_BIND = 0x1000 @@ -899,6 +952,7 @@ const ( MS_SILENT = 0x8000 MS_SLAVE = 0x80000 MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 MS_SYNC = 0x4 MS_SYNCHRONOUS = 0x10 MS_UNBINDABLE = 0x20000 @@ -913,6 +967,7 @@ const ( NETLINK_DNRTMSG = 0xe NETLINK_DROP_MEMBERSHIP = 0x2 NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb NETLINK_FIB_LOOKUP = 0xa NETLINK_FIREWALL = 0x3 NETLINK_GENERIC = 0x10 @@ -931,6 +986,7 @@ const ( NETLINK_RX_RING = 0x6 NETLINK_SCSITRANSPORT = 0x12 NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 NETLINK_SOCK_DIAG = 0x4 NETLINK_TX_RING = 0x7 NETLINK_UNUSED = 0x1 @@ -951,8 +1007,10 @@ const ( NLMSG_NOOP = 0x1 NLMSG_OVERRUN = 0x4 NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 NLM_F_APPEND = 0x800 NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 NLM_F_CREATE = 0x400 NLM_F_DUMP = 0x300 NLM_F_DUMP_FILTERED = 0x20 @@ -961,6 +1019,7 @@ const ( NLM_F_EXCL = 0x200 NLM_F_MATCH = 0x200 NLM_F_MULTI = 0x2 + NLM_F_NONREC = 0x100 NLM_F_REPLACE = 0x100 NLM_F_REQUEST = 0x1 NLM_F_ROOT = 0x100 @@ -1009,6 +1068,7 @@ const ( PACKET_FANOUT_EBPF = 0x7 PACKET_FANOUT_FLAG_DEFRAG = 0x8000 PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 PACKET_FANOUT_HASH = 0x0 PACKET_FANOUT_LB = 0x1 PACKET_FANOUT_QM = 0x5 @@ -1053,6 +1113,16 @@ const ( PARMRK = 0x8 PARODD = 0x200 PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x2401 + PERF_EVENT_IOC_ENABLE = 0x2400 + PERF_EVENT_IOC_ID = 0x80082407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 + PERF_EVENT_IOC_PERIOD = 0x40082404 + PERF_EVENT_IOC_REFRESH = 0x2402 + PERF_EVENT_IOC_RESET = 0x2403 + PERF_EVENT_IOC_SET_BPF = 0x40042408 + PERF_EVENT_IOC_SET_FILTER = 0x40082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x2405 PRIO_PGRP = 0x1 PRIO_PROCESS = 0x0 PRIO_USER = 0x2 @@ -1140,7 +1210,7 @@ const ( PR_SET_NO_NEW_PRIVS = 0x26 PR_SET_PDEATHSIG = 0x1 PR_SET_PTRACER = 0x59616d61 - PR_SET_PTRACER_ANY = -0x1 + PR_SET_PTRACER_ANY = 0xffffffffffffffff PR_SET_SECCOMP = 0x16 PR_SET_SECUREBITS = 0x1c PR_SET_THP_DISABLE = 0x29 @@ -1148,6 +1218,11 @@ const ( PR_SET_TIMING = 0xe PR_SET_TSC = 0x1a PR_SET_UNALIGN = 0x6 + PR_SVE_GET_VL = 0x33 + PR_SVE_SET_VL = 0x32 + PR_SVE_SET_VL_ONEXEC = 0x40000 + PR_SVE_VL_INHERIT = 0x20000 + PR_SVE_VL_LEN_MASK = 0xffff PR_TASK_PERF_EVENTS_DISABLE = 0x1f PR_TASK_PERF_EVENTS_ENABLE = 0x20 PR_TIMING_STATISTICAL = 0x0 @@ -1209,12 +1284,22 @@ const ( RLIMIT_CPU = 0x0 RLIMIT_DATA = 0x2 RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x8 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb RLIMIT_STACK = 0x3 - RLIM_INFINITY = -0x1 + RLIM_INFINITY = 0xffffffffffffffff RTAX_ADVMSS = 0x8 RTAX_CC_ALGO = 0x10 RTAX_CWND = 0x7 + RTAX_FASTOPEN_NO_COOKIE = 0x11 RTAX_FEATURES = 0xc RTAX_FEATURE_ALLFRAG = 0x8 RTAX_FEATURE_ECN = 0x1 @@ -1225,7 +1310,7 @@ const ( RTAX_INITCWND = 0xb RTAX_INITRWND = 0xe RTAX_LOCK = 0x1 - RTAX_MAX = 0x10 + RTAX_MAX = 0x11 RTAX_MTU = 0x2 RTAX_QUICKACK = 0xf RTAX_REORDERING = 0x9 @@ -1236,7 +1321,7 @@ const ( RTAX_UNSPEC = 0x0 RTAX_WINDOW = 0x3 RTA_ALIGNTO = 0x4 - RTA_MAX = 0x19 + RTA_MAX = 0x1a RTCF_DIRECTSRC = 0x4000000 RTCF_DOREDIRECT = 0x1000000 RTCF_LOG = 0x2000000 @@ -1280,6 +1365,7 @@ const ( RTM_DELLINK = 0x11 RTM_DELMDB = 0x55 RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 RTM_DELNSID = 0x59 RTM_DELQDISC = 0x25 RTM_DELROUTE = 0x19 @@ -1288,6 +1374,7 @@ const ( RTM_DELTFILTER = 0x2d RTM_F_CLONED = 0x200 RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 RTM_F_LOOKUP_TABLE = 0x1000 RTM_F_NOTIFY = 0x100 RTM_F_PREFIX = 0x800 @@ -1309,10 +1396,11 @@ const ( RTM_GETSTATS = 0x5e RTM_GETTCLASS = 0x2a RTM_GETTFILTER = 0x2e - RTM_MAX = 0x5f + RTM_MAX = 0x63 RTM_NEWACTION = 0x30 RTM_NEWADDR = 0x14 RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 RTM_NEWLINK = 0x10 RTM_NEWMDB = 0x54 RTM_NEWNDUSEROPT = 0x44 @@ -1327,8 +1415,8 @@ const ( RTM_NEWSTATS = 0x5c RTM_NEWTCLASS = 0x28 RTM_NEWTFILTER = 0x2c - RTM_NR_FAMILIES = 0x14 - RTM_NR_MSGTYPES = 0x50 + RTM_NR_FAMILIES = 0x15 + RTM_NR_MSGTYPES = 0x54 RTM_SETDCB = 0x4f RTM_SETLINK = 0x13 RTM_SETNEIGHTBL = 0x43 @@ -1339,6 +1427,7 @@ const ( RTNH_F_OFFLOAD = 0x8 RTNH_F_ONLINK = 0x4 RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 RTN_MAX = 0xb RTPROT_BABEL = 0x2a RTPROT_BIRD = 0xc @@ -1369,8 +1458,12 @@ const ( SCM_TIMESTAMP = 0x1d SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 @@ -1378,6 +1471,16 @@ const ( SIOCADDMULTI = 0x8931 SIOCADDRT = 0x890b SIOCATMARK = 0x8905 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 SIOCDARP = 0x8953 SIOCDELDLCI = 0x8981 SIOCDELMULTI = 0x8932 @@ -1385,7 +1488,9 @@ const ( SIOCDEVPRIVATE = 0x89f0 SIOCDIFADDR = 0x8936 SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 SIOCGIFADDR = 0x8915 SIOCGIFBR = 0x8940 SIOCGIFBRDADDR = 0x8919 @@ -1405,13 +1510,21 @@ const ( SIOCGIFPFLAGS = 0x8935 SIOCGIFSLAVE = 0x8929 SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 SIOCGPGRP = 0x8904 SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c SIOCGSTAMP = 0x8906 SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x541b + SIOCOUTQ = 0x5411 + SIOCOUTQNSD = 0x894b SIOCPROTOPRIVATE = 0x89e0 SIOCRTMSG = 0x890d SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 SIOCSIFADDR = 0x8916 SIOCSIFBR = 0x8941 SIOCSIFBRDADDR = 0x891a @@ -1430,11 +1543,15 @@ const ( SIOCSIFPFLAGS = 0x8934 SIOCSIFSLAVE = 0x8930 SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 SIOCSPGRP = 0x8902 SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a SOCK_CLOEXEC = 0x80000 SOCK_DCCP = 0x6 SOCK_DGRAM = 0x2 + SOCK_IOC_TYPE = 0x89 SOCK_NONBLOCK = 0x800 SOCK_PACKET = 0xa SOCK_RAW = 0x3 @@ -1467,6 +1584,7 @@ const ( SOL_SOCKET = 0x1 SOL_TCP = 0x6 SOL_TIPC = 0x10f + SOL_TLS = 0x11a SOL_X25 = 0x106 SOMAXCONN = 0x80 SO_ACCEPTCONN = 0x1e @@ -1480,6 +1598,7 @@ const ( SO_BSDCOMPAT = 0xe SO_BUSY_POLL = 0x2e SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 SO_DEBUG = 0x1 SO_DETACH_BPF = 0x1b SO_DETACH_FILTER = 0x1b @@ -1488,11 +1607,13 @@ const ( SO_ERROR = 0x4 SO_GET_FILTER = 0x1a SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 SO_KEEPALIVE = 0x9 SO_LINGER = 0xd SO_LOCK_FILTER = 0x2c SO_MARK = 0x24 SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 SO_NOFCS = 0x2b SO_NO_CHECK = 0xb SO_OOBINLINE = 0xa @@ -1500,6 +1621,7 @@ const ( SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 + SO_PEERGROUPS = 0x3b SO_PEERNAME = 0x1c SO_PEERSEC = 0x1f SO_PRIORITY = 0xc @@ -1531,10 +1653,32 @@ const ( SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 SO_VM_SOCKETS_TRUSTED = 0x5 SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c SPLICE_F_GIFT = 0x8 SPLICE_F_MORE = 0x4 SPLICE_F_MOVE = 0x1 SPLICE_F_NONBLOCK = 0x2 + STATX_ALL = 0xfff + STATX_ATIME = 0x20 + STATX_ATTR_APPEND = 0x20 + STATX_ATTR_AUTOMOUNT = 0x1000 + STATX_ATTR_COMPRESSED = 0x4 + STATX_ATTR_ENCRYPTED = 0x800 + STATX_ATTR_IMMUTABLE = 0x10 + STATX_ATTR_NODUMP = 0x40 + STATX_BASIC_STATS = 0x7ff + STATX_BLOCKS = 0x400 + STATX_BTIME = 0x800 + STATX_CTIME = 0x80 + STATX_GID = 0x10 + STATX_INO = 0x100 + STATX_MODE = 0x2 + STATX_MTIME = 0x40 + STATX_NLINK = 0x4 + STATX_SIZE = 0x200 + STATX_TYPE = 0x1 + STATX_UID = 0x8 + STATX__RESERVED = 0x80000000 S_BLKSIZE = 0x200 S_IEXEC = 0x40 S_IFBLK = 0x6000 @@ -1567,6 +1711,12 @@ const ( TAB2 = 0x1000 TAB3 = 0x1800 TABDLY = 0x1800 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 TCFLSH = 0x540b TCGETA = 0x5405 TCGETS = 0x5401 @@ -1590,6 +1740,7 @@ const ( TCP_CORK = 0x3 TCP_DEFER_ACCEPT = 0x9 TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e TCP_INFO = 0xb TCP_KEEPCNT = 0x6 TCP_KEEPIDLE = 0x4 @@ -1599,6 +1750,8 @@ const ( TCP_MAXWIN = 0xffff TCP_MAX_WINSHIFT = 0xe TCP_MD5SIG = 0xe + TCP_MD5SIG_EXT = 0x20 + TCP_MD5SIG_FLAG_PREFIX = 0x1 TCP_MD5SIG_MAXKEYLEN = 0x50 TCP_MSS = 0x200 TCP_MSS_DEFAULT = 0x218 @@ -1619,6 +1772,7 @@ const ( TCP_THIN_DUPACK = 0x11 TCP_THIN_LINEAR_TIMEOUTS = 0x10 TCP_TIMESTAMP = 0x18 + TCP_ULP = 0x1f TCP_USER_TIMEOUT = 0x12 TCP_WINDOW_CLAMP = 0xa TCSAFLUSH = 0x2 @@ -1649,6 +1803,7 @@ const ( TIOCGPKT = 0x80045438 TIOCGPTLCK = 0x80045439 TIOCGPTN = 0x80045430 + TIOCGPTPEER = 0x5441 TIOCGRS485 = 0x542e TIOCGSERIAL = 0x541e TIOCGSID = 0x5429 @@ -1706,6 +1861,7 @@ const ( TIOCSWINSZ = 0x5414 TIOCVHANGUP = 0x5437 TOSTOP = 0x100 + TS_COMM_LEN = 0x20 TUNATTACHFILTER = 0x401054d5 TUNDETACHFILTER = 0x401054d6 TUNGETFEATURES = 0x800454cf @@ -1730,6 +1886,9 @@ const ( TUNSETVNETBE = 0x400454de TUNSETVNETHDRSZ = 0x400454d8 TUNSETVNETLE = 0x400454dc + UMOUNT_NOFOLLOW = 0x8 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe VDISCARD = 0xd VEOF = 0x4 VEOL = 0xb @@ -1759,6 +1918,17 @@ const ( WALL = 0x40000000 WCLONE = 0x80000000 WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x80045702 + WDIOC_GETPRETIMEOUT = 0x80045709 + WDIOC_GETSTATUS = 0x80045701 + WDIOC_GETSUPPORT = 0x80285700 + WDIOC_GETTEMP = 0x80045703 + WDIOC_GETTIMELEFT = 0x8004570a + WDIOC_GETTIMEOUT = 0x80045707 + WDIOC_KEEPALIVE = 0x80045705 + WDIOC_SETOPTIONS = 0x80045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 WEXITED = 0x4 WNOHANG = 0x1 WNOTHREAD = 0x20000000 @@ -1766,6 +1936,8 @@ const ( WORDSIZE = 0x40 WSTOPPED = 0x2 WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 XCASE = 0x4 XTABS = 0x1800 ) @@ -1937,7 +2109,6 @@ const ( SIGTSTP = syscall.Signal(0x14) SIGTTIN = syscall.Signal(0x15) SIGTTOU = syscall.Signal(0x16) - SIGUNUSED = syscall.Signal(0x1f) SIGURG = syscall.Signal(0x17) SIGUSR1 = syscall.Signal(0xa) SIGUSR2 = syscall.Signal(0xc) 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 984b768..8aec95d 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go @@ -36,7 +36,7 @@ const ( AF_KEY = 0xf AF_LLC = 0x1a AF_LOCAL = 0x1 - AF_MAX = 0x2b + AF_MAX = 0x2c AF_MPLS = 0x1c AF_NETBEUI = 0xd AF_NETLINK = 0x10 @@ -51,6 +51,7 @@ const ( AF_ROUTE = 0x10 AF_RXRPC = 0x21 AF_SECURITY = 0xe + AF_SMC = 0x2b AF_SNA = 0x16 AF_TIPC = 0x1e AF_UNIX = 0x1 @@ -120,6 +121,7 @@ const ( ARPHRD_PPP = 0x200 ARPHRD_PRONET = 0x4 ARPHRD_RAWHDLC = 0x206 + ARPHRD_RAWIP = 0x207 ARPHRD_ROSE = 0x10e ARPHRD_RSRVD = 0x104 ARPHRD_SIT = 0x308 @@ -129,6 +131,7 @@ const ( ARPHRD_TUNNEL = 0x300 ARPHRD_TUNNEL6 = 0x301 ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a ARPHRD_X25 = 0x10f B0 = 0x0 B1000000 = 0x1008 @@ -325,6 +328,9 @@ const ( ECHOKE = 0x800 ECHONL = 0x40 ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x80 + EFD_SEMAPHORE = 0x1 ENCODING_DEFAULT = 0x0 ENCODING_FM_MARK = 0x3 ENCODING_FM_SPACE = 0x4 @@ -385,13 +391,16 @@ const ( ETH_P_DSA = 0x1b ETH_P_ECONET = 0x18 ETH_P_EDSA = 0xdada + ETH_P_ERSPAN = 0x88be ETH_P_FCOE = 0x8906 ETH_P_FIP = 0x8914 ETH_P_HDLC = 0x19 ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 ETH_P_IEEE802154 = 0xf6 ETH_P_IEEEPUP = 0xa00 ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IFE = 0xed3e ETH_P_IP = 0x800 ETH_P_IPV6 = 0x86dd ETH_P_IPX = 0x8137 @@ -402,11 +411,13 @@ const ( ETH_P_LOOP = 0x60 ETH_P_LOOPBACK = 0x9000 ETH_P_MACSEC = 0x88e5 + ETH_P_MAP = 0xf9 ETH_P_MOBITEX = 0x15 ETH_P_MPLS_MC = 0x8848 ETH_P_MPLS_UC = 0x8847 ETH_P_MVRP = 0x88f5 ETH_P_NCSI = 0x88f8 + ETH_P_NSH = 0x894f ETH_P_PAE = 0x888e ETH_P_PAUSE = 0x8808 ETH_P_PHONET = 0xf5 @@ -450,6 +461,8 @@ const ( FF1 = 0x8000 FFDLY = 0x8000 FLUSHO = 0x2000 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 @@ -468,6 +481,7 @@ const ( FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 FS_POLICY_FLAGS_VALID = 0x3 + F_ADD_SEALS = 0x409 F_DUPFD = 0x0 F_DUPFD_CLOEXEC = 0x406 F_EXLCK = 0x4 @@ -480,6 +494,9 @@ const ( F_GETOWN_EX = 0x10 F_GETPIPE_SZ = 0x408 F_GETSIG = 0xb + F_GET_FILE_RW_HINT = 0x40d + F_GET_RW_HINT = 0x40b + F_GET_SEALS = 0x40a F_LOCK = 0x1 F_NOTIFY = 0x402 F_OFD_GETLK = 0x24 @@ -487,6 +504,10 @@ const ( F_OFD_SETLKW = 0x26 F_OK = 0x0 F_RDLCK = 0x0 + F_SEAL_GROW = 0x4 + F_SEAL_SEAL = 0x1 + F_SEAL_SHRINK = 0x2 + F_SEAL_WRITE = 0x8 F_SETFD = 0x2 F_SETFL = 0x4 F_SETLEASE = 0x400 @@ -498,12 +519,27 @@ const ( F_SETOWN_EX = 0xf F_SETPIPE_SZ = 0x407 F_SETSIG = 0xa + F_SET_FILE_RW_HINT = 0x40e + F_SET_RW_HINT = 0x40c F_SHLCK = 0x8 F_TEST = 0x3 F_TLOCK = 0x2 F_ULOCK = 0x0 F_UNLCK = 0x2 F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 GRND_NONBLOCK = 0x1 GRND_RANDOM = 0x2 HUPCL = 0x400 @@ -540,6 +576,8 @@ const ( IFF_MASTER = 0x400 IFF_MULTICAST = 0x1000 IFF_MULTI_QUEUE = 0x100 + IFF_NAPI = 0x10 + IFF_NAPI_FRAGS = 0x20 IFF_NOARP = 0x80 IFF_NOFILTER = 0x1000 IFF_NOTRAILERS = 0x20 @@ -602,6 +640,7 @@ const ( IN_OPEN = 0x20 IN_Q_OVERFLOW = 0x4000 IN_UNMOUNT = 0x2000 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 IPPROTO_AH = 0x33 IPPROTO_BEETPH = 0x5e IPPROTO_COMP = 0x6c @@ -641,8 +680,10 @@ const ( IPV6_2292PKTOPTIONS = 0x6 IPV6_2292RTHDR = 0x5 IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 IPV6_ADD_MEMBERSHIP = 0x14 IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 IPV6_CHECKSUM = 0x7 IPV6_DONTFRAG = 0x3e IPV6_DROP_MEMBERSHIP = 0x15 @@ -655,12 +696,14 @@ const ( IPV6_JOIN_GROUP = 0x14 IPV6_LEAVE_ANYCAST = 0x1c IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 IPV6_MTU = 0x18 IPV6_MTU_DISCOVER = 0x17 IPV6_MULTICAST_HOPS = 0x12 IPV6_MULTICAST_IF = 0x11 IPV6_MULTICAST_LOOP = 0x13 IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a IPV6_PATHMTU = 0x3d IPV6_PKTINFO = 0x32 IPV6_PMTUDISC_DO = 0x2 @@ -671,8 +714,10 @@ const ( IPV6_PMTUDISC_WANT = 0x1 IPV6_RECVDSTOPTS = 0x3a IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d IPV6_RECVHOPLIMIT = 0x33 IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a IPV6_RECVPATHMTU = 0x3c IPV6_RECVPKTINFO = 0x31 IPV6_RECVRTHDR = 0x38 @@ -686,7 +731,9 @@ const ( IPV6_RXDSTOPTS = 0x3b IPV6_RXHOPOPTS = 0x36 IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c IPV6_V6ONLY = 0x1a IPV6_XFRM_POLICY = 0x23 IP_ADD_MEMBERSHIP = 0x23 @@ -729,6 +776,7 @@ const ( IP_PMTUDISC_PROBE = 0x3 IP_PMTUDISC_WANT = 0x1 IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 IP_RECVOPTS = 0x6 IP_RECVORIGDSTADDR = 0x14 IP_RECVRETOPTS = 0x7 @@ -766,6 +814,7 @@ const ( KEYCTL_NEGATE = 0xd KEYCTL_READ = 0xb KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d KEYCTL_REVOKE = 0x3 KEYCTL_SEARCH = 0xa KEYCTL_SESSION_TO_PARENT = 0x12 @@ -813,6 +862,7 @@ const ( MADV_FREE = 0x8 MADV_HUGEPAGE = 0xe MADV_HWPOISON = 0x64 + MADV_KEEPONFORK = 0x13 MADV_MERGEABLE = 0xc MADV_NOHUGEPAGE = 0xf MADV_NORMAL = 0x0 @@ -821,6 +871,7 @@ const ( MADV_SEQUENTIAL = 0x2 MADV_UNMERGEABLE = 0xd MADV_WILLNEED = 0x3 + MADV_WIPEONFORK = 0x12 MAP_ANON = 0x800 MAP_ANONYMOUS = 0x800 MAP_DENYWRITE = 0x2000 @@ -867,6 +918,7 @@ const ( MSG_TRYHARD = 0x4 MSG_WAITALL = 0x100 MSG_WAITFORONE = 0x10000 + MSG_ZEROCOPY = 0x4000000 MS_ACTIVE = 0x40000000 MS_ASYNC = 0x1 MS_BIND = 0x1000 @@ -899,6 +951,7 @@ const ( MS_SILENT = 0x8000 MS_SLAVE = 0x80000 MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 MS_SYNC = 0x4 MS_SYNCHRONOUS = 0x10 MS_UNBINDABLE = 0x20000 @@ -913,6 +966,7 @@ const ( NETLINK_DNRTMSG = 0xe NETLINK_DROP_MEMBERSHIP = 0x2 NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb NETLINK_FIB_LOOKUP = 0xa NETLINK_FIREWALL = 0x3 NETLINK_GENERIC = 0x10 @@ -931,6 +985,7 @@ const ( NETLINK_RX_RING = 0x6 NETLINK_SCSITRANSPORT = 0x12 NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 NETLINK_SOCK_DIAG = 0x4 NETLINK_TX_RING = 0x7 NETLINK_UNUSED = 0x1 @@ -951,8 +1006,10 @@ const ( NLMSG_NOOP = 0x1 NLMSG_OVERRUN = 0x4 NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 NLM_F_APPEND = 0x800 NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 NLM_F_CREATE = 0x400 NLM_F_DUMP = 0x300 NLM_F_DUMP_FILTERED = 0x20 @@ -961,6 +1018,7 @@ const ( NLM_F_EXCL = 0x200 NLM_F_MATCH = 0x200 NLM_F_MULTI = 0x2 + NLM_F_NONREC = 0x100 NLM_F_REPLACE = 0x100 NLM_F_REQUEST = 0x1 NLM_F_ROOT = 0x100 @@ -1009,6 +1067,7 @@ const ( PACKET_FANOUT_EBPF = 0x7 PACKET_FANOUT_FLAG_DEFRAG = 0x8000 PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 PACKET_FANOUT_HASH = 0x0 PACKET_FANOUT_LB = 0x1 PACKET_FANOUT_QM = 0x5 @@ -1053,6 +1112,16 @@ const ( PARMRK = 0x8 PARODD = 0x200 PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x20002401 + PERF_EVENT_IOC_ENABLE = 0x20002400 + PERF_EVENT_IOC_ID = 0x40042407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 + PERF_EVENT_IOC_PERIOD = 0x80082404 + PERF_EVENT_IOC_REFRESH = 0x20002402 + PERF_EVENT_IOC_RESET = 0x20002403 + PERF_EVENT_IOC_SET_BPF = 0x80042408 + PERF_EVENT_IOC_SET_FILTER = 0x80042406 + PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 PRIO_PGRP = 0x1 PRIO_PROCESS = 0x0 PRIO_USER = 0x2 @@ -1148,6 +1217,11 @@ const ( PR_SET_TIMING = 0xe PR_SET_TSC = 0x1a PR_SET_UNALIGN = 0x6 + PR_SVE_GET_VL = 0x33 + PR_SVE_SET_VL = 0x32 + PR_SVE_SET_VL_ONEXEC = 0x40000 + PR_SVE_VL_INHERIT = 0x20000 + PR_SVE_VL_LEN_MASK = 0xffff PR_TASK_PERF_EVENTS_DISABLE = 0x1f PR_TASK_PERF_EVENTS_ENABLE = 0x20 PR_TIMING_STATISTICAL = 0x0 @@ -1221,12 +1295,22 @@ const ( RLIMIT_CPU = 0x0 RLIMIT_DATA = 0x2 RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x9 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd RLIMIT_NOFILE = 0x5 + RLIMIT_NPROC = 0x8 + RLIMIT_RSS = 0x7 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb RLIMIT_STACK = 0x3 - RLIM_INFINITY = -0x1 + RLIM_INFINITY = 0xffffffffffffffff RTAX_ADVMSS = 0x8 RTAX_CC_ALGO = 0x10 RTAX_CWND = 0x7 + RTAX_FASTOPEN_NO_COOKIE = 0x11 RTAX_FEATURES = 0xc RTAX_FEATURE_ALLFRAG = 0x8 RTAX_FEATURE_ECN = 0x1 @@ -1237,7 +1321,7 @@ const ( RTAX_INITCWND = 0xb RTAX_INITRWND = 0xe RTAX_LOCK = 0x1 - RTAX_MAX = 0x10 + RTAX_MAX = 0x11 RTAX_MTU = 0x2 RTAX_QUICKACK = 0xf RTAX_REORDERING = 0x9 @@ -1248,7 +1332,7 @@ const ( RTAX_UNSPEC = 0x0 RTAX_WINDOW = 0x3 RTA_ALIGNTO = 0x4 - RTA_MAX = 0x19 + RTA_MAX = 0x1a RTCF_DIRECTSRC = 0x4000000 RTCF_DOREDIRECT = 0x1000000 RTCF_LOG = 0x2000000 @@ -1292,6 +1376,7 @@ const ( RTM_DELLINK = 0x11 RTM_DELMDB = 0x55 RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 RTM_DELNSID = 0x59 RTM_DELQDISC = 0x25 RTM_DELROUTE = 0x19 @@ -1300,6 +1385,7 @@ const ( RTM_DELTFILTER = 0x2d RTM_F_CLONED = 0x200 RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 RTM_F_LOOKUP_TABLE = 0x1000 RTM_F_NOTIFY = 0x100 RTM_F_PREFIX = 0x800 @@ -1321,10 +1407,11 @@ const ( RTM_GETSTATS = 0x5e RTM_GETTCLASS = 0x2a RTM_GETTFILTER = 0x2e - RTM_MAX = 0x5f + RTM_MAX = 0x63 RTM_NEWACTION = 0x30 RTM_NEWADDR = 0x14 RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 RTM_NEWLINK = 0x10 RTM_NEWMDB = 0x54 RTM_NEWNDUSEROPT = 0x44 @@ -1339,8 +1426,8 @@ const ( RTM_NEWSTATS = 0x5c RTM_NEWTCLASS = 0x28 RTM_NEWTFILTER = 0x2c - RTM_NR_FAMILIES = 0x14 - RTM_NR_MSGTYPES = 0x50 + RTM_NR_FAMILIES = 0x15 + RTM_NR_MSGTYPES = 0x54 RTM_SETDCB = 0x4f RTM_SETLINK = 0x13 RTM_SETNEIGHTBL = 0x43 @@ -1351,6 +1438,7 @@ const ( RTNH_F_OFFLOAD = 0x8 RTNH_F_ONLINK = 0x4 RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 RTN_MAX = 0xb RTPROT_BABEL = 0x2a RTPROT_BIRD = 0xc @@ -1381,8 +1469,12 @@ const ( SCM_TIMESTAMP = 0x1d SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 @@ -1390,6 +1482,16 @@ const ( SIOCADDMULTI = 0x8931 SIOCADDRT = 0x890b SIOCATMARK = 0x40047307 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 SIOCDARP = 0x8953 SIOCDELDLCI = 0x8981 SIOCDELMULTI = 0x8932 @@ -1397,7 +1499,9 @@ const ( SIOCDEVPRIVATE = 0x89f0 SIOCDIFADDR = 0x8936 SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 SIOCGIFADDR = 0x8915 SIOCGIFBR = 0x8940 SIOCGIFBRDADDR = 0x8919 @@ -1417,13 +1521,21 @@ const ( SIOCGIFPFLAGS = 0x8935 SIOCGIFSLAVE = 0x8929 SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 SIOCGPGRP = 0x40047309 SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c SIOCGSTAMP = 0x8906 SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x467f + SIOCOUTQ = 0x7472 + SIOCOUTQNSD = 0x894b SIOCPROTOPRIVATE = 0x89e0 SIOCRTMSG = 0x890d SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 SIOCSIFADDR = 0x8916 SIOCSIFBR = 0x8941 SIOCSIFBRDADDR = 0x891a @@ -1442,11 +1554,15 @@ const ( SIOCSIFPFLAGS = 0x8934 SIOCSIFSLAVE = 0x8930 SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 SIOCSPGRP = 0x80047308 SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a SOCK_CLOEXEC = 0x80000 SOCK_DCCP = 0x6 SOCK_DGRAM = 0x1 + SOCK_IOC_TYPE = 0x89 SOCK_NONBLOCK = 0x80 SOCK_PACKET = 0xa SOCK_RAW = 0x3 @@ -1479,6 +1595,7 @@ const ( SOL_SOCKET = 0xffff SOL_TCP = 0x6 SOL_TIPC = 0x10f + SOL_TLS = 0x11a SOL_X25 = 0x106 SOMAXCONN = 0x80 SO_ACCEPTCONN = 0x1009 @@ -1492,6 +1609,7 @@ const ( SO_BSDCOMPAT = 0xe SO_BUSY_POLL = 0x2e SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 SO_DEBUG = 0x1 SO_DETACH_BPF = 0x1b SO_DETACH_FILTER = 0x1b @@ -1500,11 +1618,13 @@ const ( SO_ERROR = 0x1007 SO_GET_FILTER = 0x1a SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 SO_KEEPALIVE = 0x8 SO_LINGER = 0x80 SO_LOCK_FILTER = 0x2c SO_MARK = 0x24 SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 SO_NOFCS = 0x2b SO_NO_CHECK = 0xb SO_OOBINLINE = 0x100 @@ -1512,6 +1632,7 @@ const ( SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x12 + SO_PEERGROUPS = 0x3b SO_PEERNAME = 0x1c SO_PEERSEC = 0x1e SO_PRIORITY = 0xc @@ -1544,10 +1665,32 @@ const ( SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 SO_VM_SOCKETS_TRUSTED = 0x5 SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c SPLICE_F_GIFT = 0x8 SPLICE_F_MORE = 0x4 SPLICE_F_MOVE = 0x1 SPLICE_F_NONBLOCK = 0x2 + STATX_ALL = 0xfff + STATX_ATIME = 0x20 + STATX_ATTR_APPEND = 0x20 + STATX_ATTR_AUTOMOUNT = 0x1000 + STATX_ATTR_COMPRESSED = 0x4 + STATX_ATTR_ENCRYPTED = 0x800 + STATX_ATTR_IMMUTABLE = 0x10 + STATX_ATTR_NODUMP = 0x40 + STATX_BASIC_STATS = 0x7ff + STATX_BLOCKS = 0x400 + STATX_BTIME = 0x800 + STATX_CTIME = 0x80 + STATX_GID = 0x10 + STATX_INO = 0x100 + STATX_MODE = 0x2 + STATX_MTIME = 0x40 + STATX_NLINK = 0x4 + STATX_SIZE = 0x200 + STATX_TYPE = 0x1 + STATX_UID = 0x8 + STATX__RESERVED = 0x80000000 S_BLKSIZE = 0x200 S_IEXEC = 0x40 S_IFBLK = 0x6000 @@ -1580,6 +1723,12 @@ const ( TAB2 = 0x1000 TAB3 = 0x1800 TABDLY = 0x1800 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 TCFLSH = 0x5407 TCGETA = 0x5401 TCGETS = 0x540d @@ -1602,6 +1751,7 @@ const ( TCP_CORK = 0x3 TCP_DEFER_ACCEPT = 0x9 TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e TCP_INFO = 0xb TCP_KEEPCNT = 0x6 TCP_KEEPIDLE = 0x4 @@ -1611,6 +1761,8 @@ const ( TCP_MAXWIN = 0xffff TCP_MAX_WINSHIFT = 0xe TCP_MD5SIG = 0xe + TCP_MD5SIG_EXT = 0x20 + TCP_MD5SIG_FLAG_PREFIX = 0x1 TCP_MD5SIG_MAXKEYLEN = 0x50 TCP_MSS = 0x200 TCP_MSS_DEFAULT = 0x218 @@ -1631,6 +1783,7 @@ const ( TCP_THIN_DUPACK = 0x11 TCP_THIN_LINEAR_TIMEOUTS = 0x10 TCP_TIMESTAMP = 0x18 + TCP_ULP = 0x1f TCP_USER_TIMEOUT = 0x12 TCP_WINDOW_CLAMP = 0xa TCSAFLUSH = 0x5410 @@ -1660,6 +1813,7 @@ const ( TIOCGPKT = 0x40045438 TIOCGPTLCK = 0x40045439 TIOCGPTN = 0x40045430 + TIOCGPTPEER = 0x20005441 TIOCGRS485 = 0x4020542e TIOCGSERIAL = 0x5484 TIOCGSID = 0x7416 @@ -1720,6 +1874,7 @@ const ( TIOCSWINSZ = 0x80087467 TIOCVHANGUP = 0x5437 TOSTOP = 0x8000 + TS_COMM_LEN = 0x20 TUNATTACHFILTER = 0x800854d5 TUNDETACHFILTER = 0x800854d6 TUNGETFEATURES = 0x400454cf @@ -1744,6 +1899,9 @@ const ( TUNSETVNETBE = 0x800454de TUNSETVNETHDRSZ = 0x800454d8 TUNSETVNETLE = 0x800454dc + UMOUNT_NOFOLLOW = 0x8 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe VDISCARD = 0xd VEOF = 0x10 VEOL = 0x11 @@ -1774,6 +1932,17 @@ const ( WALL = 0x40000000 WCLONE = 0x80000000 WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x40045702 + WDIOC_GETPRETIMEOUT = 0x40045709 + WDIOC_GETSTATUS = 0x40045701 + WDIOC_GETSUPPORT = 0x40285700 + WDIOC_GETTEMP = 0x40045703 + WDIOC_GETTIMELEFT = 0x4004570a + WDIOC_GETTIMEOUT = 0x40045707 + WDIOC_KEEPALIVE = 0x40045705 + WDIOC_SETOPTIONS = 0x40045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 WEXITED = 0x4 WNOHANG = 0x1 WNOTHREAD = 0x20000000 @@ -1781,6 +1950,8 @@ const ( WORDSIZE = 0x20 WSTOPPED = 0x2 WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 XCASE = 0x4 XTABS = 0x1800 ) 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 75f72da..423f48a 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go @@ -36,7 +36,7 @@ const ( AF_KEY = 0xf AF_LLC = 0x1a AF_LOCAL = 0x1 - AF_MAX = 0x2b + AF_MAX = 0x2c AF_MPLS = 0x1c AF_NETBEUI = 0xd AF_NETLINK = 0x10 @@ -51,6 +51,7 @@ const ( AF_ROUTE = 0x10 AF_RXRPC = 0x21 AF_SECURITY = 0xe + AF_SMC = 0x2b AF_SNA = 0x16 AF_TIPC = 0x1e AF_UNIX = 0x1 @@ -120,6 +121,7 @@ const ( ARPHRD_PPP = 0x200 ARPHRD_PRONET = 0x4 ARPHRD_RAWHDLC = 0x206 + ARPHRD_RAWIP = 0x207 ARPHRD_ROSE = 0x10e ARPHRD_RSRVD = 0x104 ARPHRD_SIT = 0x308 @@ -129,6 +131,7 @@ const ( ARPHRD_TUNNEL = 0x300 ARPHRD_TUNNEL6 = 0x301 ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a ARPHRD_X25 = 0x10f B0 = 0x0 B1000000 = 0x1008 @@ -325,6 +328,9 @@ const ( ECHOKE = 0x800 ECHONL = 0x40 ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x80 + EFD_SEMAPHORE = 0x1 ENCODING_DEFAULT = 0x0 ENCODING_FM_MARK = 0x3 ENCODING_FM_SPACE = 0x4 @@ -385,13 +391,16 @@ const ( ETH_P_DSA = 0x1b ETH_P_ECONET = 0x18 ETH_P_EDSA = 0xdada + ETH_P_ERSPAN = 0x88be ETH_P_FCOE = 0x8906 ETH_P_FIP = 0x8914 ETH_P_HDLC = 0x19 ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 ETH_P_IEEE802154 = 0xf6 ETH_P_IEEEPUP = 0xa00 ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IFE = 0xed3e ETH_P_IP = 0x800 ETH_P_IPV6 = 0x86dd ETH_P_IPX = 0x8137 @@ -402,11 +411,13 @@ const ( ETH_P_LOOP = 0x60 ETH_P_LOOPBACK = 0x9000 ETH_P_MACSEC = 0x88e5 + ETH_P_MAP = 0xf9 ETH_P_MOBITEX = 0x15 ETH_P_MPLS_MC = 0x8848 ETH_P_MPLS_UC = 0x8847 ETH_P_MVRP = 0x88f5 ETH_P_NCSI = 0x88f8 + ETH_P_NSH = 0x894f ETH_P_PAE = 0x888e ETH_P_PAUSE = 0x8808 ETH_P_PHONET = 0xf5 @@ -450,6 +461,8 @@ const ( FF1 = 0x8000 FFDLY = 0x8000 FLUSHO = 0x2000 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 @@ -468,6 +481,7 @@ const ( FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 FS_POLICY_FLAGS_VALID = 0x3 + F_ADD_SEALS = 0x409 F_DUPFD = 0x0 F_DUPFD_CLOEXEC = 0x406 F_EXLCK = 0x4 @@ -480,6 +494,9 @@ const ( F_GETOWN_EX = 0x10 F_GETPIPE_SZ = 0x408 F_GETSIG = 0xb + F_GET_FILE_RW_HINT = 0x40d + F_GET_RW_HINT = 0x40b + F_GET_SEALS = 0x40a F_LOCK = 0x1 F_NOTIFY = 0x402 F_OFD_GETLK = 0x24 @@ -487,6 +504,10 @@ const ( F_OFD_SETLKW = 0x26 F_OK = 0x0 F_RDLCK = 0x0 + F_SEAL_GROW = 0x4 + F_SEAL_SEAL = 0x1 + F_SEAL_SHRINK = 0x2 + F_SEAL_WRITE = 0x8 F_SETFD = 0x2 F_SETFL = 0x4 F_SETLEASE = 0x400 @@ -498,12 +519,27 @@ const ( F_SETOWN_EX = 0xf F_SETPIPE_SZ = 0x407 F_SETSIG = 0xa + F_SET_FILE_RW_HINT = 0x40e + F_SET_RW_HINT = 0x40c F_SHLCK = 0x8 F_TEST = 0x3 F_TLOCK = 0x2 F_ULOCK = 0x0 F_UNLCK = 0x2 F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 GRND_NONBLOCK = 0x1 GRND_RANDOM = 0x2 HUPCL = 0x400 @@ -540,6 +576,8 @@ const ( IFF_MASTER = 0x400 IFF_MULTICAST = 0x1000 IFF_MULTI_QUEUE = 0x100 + IFF_NAPI = 0x10 + IFF_NAPI_FRAGS = 0x20 IFF_NOARP = 0x80 IFF_NOFILTER = 0x1000 IFF_NOTRAILERS = 0x20 @@ -602,6 +640,7 @@ const ( IN_OPEN = 0x20 IN_Q_OVERFLOW = 0x4000 IN_UNMOUNT = 0x2000 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 IPPROTO_AH = 0x33 IPPROTO_BEETPH = 0x5e IPPROTO_COMP = 0x6c @@ -641,8 +680,10 @@ const ( IPV6_2292PKTOPTIONS = 0x6 IPV6_2292RTHDR = 0x5 IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 IPV6_ADD_MEMBERSHIP = 0x14 IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 IPV6_CHECKSUM = 0x7 IPV6_DONTFRAG = 0x3e IPV6_DROP_MEMBERSHIP = 0x15 @@ -655,12 +696,14 @@ const ( IPV6_JOIN_GROUP = 0x14 IPV6_LEAVE_ANYCAST = 0x1c IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 IPV6_MTU = 0x18 IPV6_MTU_DISCOVER = 0x17 IPV6_MULTICAST_HOPS = 0x12 IPV6_MULTICAST_IF = 0x11 IPV6_MULTICAST_LOOP = 0x13 IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a IPV6_PATHMTU = 0x3d IPV6_PKTINFO = 0x32 IPV6_PMTUDISC_DO = 0x2 @@ -671,8 +714,10 @@ const ( IPV6_PMTUDISC_WANT = 0x1 IPV6_RECVDSTOPTS = 0x3a IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d IPV6_RECVHOPLIMIT = 0x33 IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a IPV6_RECVPATHMTU = 0x3c IPV6_RECVPKTINFO = 0x31 IPV6_RECVRTHDR = 0x38 @@ -686,7 +731,9 @@ const ( IPV6_RXDSTOPTS = 0x3b IPV6_RXHOPOPTS = 0x36 IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c IPV6_V6ONLY = 0x1a IPV6_XFRM_POLICY = 0x23 IP_ADD_MEMBERSHIP = 0x23 @@ -729,6 +776,7 @@ const ( IP_PMTUDISC_PROBE = 0x3 IP_PMTUDISC_WANT = 0x1 IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 IP_RECVOPTS = 0x6 IP_RECVORIGDSTADDR = 0x14 IP_RECVRETOPTS = 0x7 @@ -766,6 +814,7 @@ const ( KEYCTL_NEGATE = 0xd KEYCTL_READ = 0xb KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d KEYCTL_REVOKE = 0x3 KEYCTL_SEARCH = 0xa KEYCTL_SESSION_TO_PARENT = 0x12 @@ -813,6 +862,7 @@ const ( MADV_FREE = 0x8 MADV_HUGEPAGE = 0xe MADV_HWPOISON = 0x64 + MADV_KEEPONFORK = 0x13 MADV_MERGEABLE = 0xc MADV_NOHUGEPAGE = 0xf MADV_NORMAL = 0x0 @@ -821,6 +871,7 @@ const ( MADV_SEQUENTIAL = 0x2 MADV_UNMERGEABLE = 0xd MADV_WILLNEED = 0x3 + MADV_WIPEONFORK = 0x12 MAP_ANON = 0x800 MAP_ANONYMOUS = 0x800 MAP_DENYWRITE = 0x2000 @@ -867,6 +918,7 @@ const ( MSG_TRYHARD = 0x4 MSG_WAITALL = 0x100 MSG_WAITFORONE = 0x10000 + MSG_ZEROCOPY = 0x4000000 MS_ACTIVE = 0x40000000 MS_ASYNC = 0x1 MS_BIND = 0x1000 @@ -899,6 +951,7 @@ const ( MS_SILENT = 0x8000 MS_SLAVE = 0x80000 MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 MS_SYNC = 0x4 MS_SYNCHRONOUS = 0x10 MS_UNBINDABLE = 0x20000 @@ -913,6 +966,7 @@ const ( NETLINK_DNRTMSG = 0xe NETLINK_DROP_MEMBERSHIP = 0x2 NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb NETLINK_FIB_LOOKUP = 0xa NETLINK_FIREWALL = 0x3 NETLINK_GENERIC = 0x10 @@ -931,6 +985,7 @@ const ( NETLINK_RX_RING = 0x6 NETLINK_SCSITRANSPORT = 0x12 NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 NETLINK_SOCK_DIAG = 0x4 NETLINK_TX_RING = 0x7 NETLINK_UNUSED = 0x1 @@ -951,8 +1006,10 @@ const ( NLMSG_NOOP = 0x1 NLMSG_OVERRUN = 0x4 NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 NLM_F_APPEND = 0x800 NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 NLM_F_CREATE = 0x400 NLM_F_DUMP = 0x300 NLM_F_DUMP_FILTERED = 0x20 @@ -961,6 +1018,7 @@ const ( NLM_F_EXCL = 0x200 NLM_F_MATCH = 0x200 NLM_F_MULTI = 0x2 + NLM_F_NONREC = 0x100 NLM_F_REPLACE = 0x100 NLM_F_REQUEST = 0x1 NLM_F_ROOT = 0x100 @@ -1009,6 +1067,7 @@ const ( PACKET_FANOUT_EBPF = 0x7 PACKET_FANOUT_FLAG_DEFRAG = 0x8000 PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 PACKET_FANOUT_HASH = 0x0 PACKET_FANOUT_LB = 0x1 PACKET_FANOUT_QM = 0x5 @@ -1053,6 +1112,16 @@ const ( PARMRK = 0x8 PARODD = 0x200 PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x20002401 + PERF_EVENT_IOC_ENABLE = 0x20002400 + PERF_EVENT_IOC_ID = 0x40082407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 + PERF_EVENT_IOC_PERIOD = 0x80082404 + PERF_EVENT_IOC_REFRESH = 0x20002402 + PERF_EVENT_IOC_RESET = 0x20002403 + PERF_EVENT_IOC_SET_BPF = 0x80042408 + PERF_EVENT_IOC_SET_FILTER = 0x80082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 PRIO_PGRP = 0x1 PRIO_PROCESS = 0x0 PRIO_USER = 0x2 @@ -1140,7 +1209,7 @@ const ( PR_SET_NO_NEW_PRIVS = 0x26 PR_SET_PDEATHSIG = 0x1 PR_SET_PTRACER = 0x59616d61 - PR_SET_PTRACER_ANY = -0x1 + PR_SET_PTRACER_ANY = 0xffffffffffffffff PR_SET_SECCOMP = 0x16 PR_SET_SECUREBITS = 0x1c PR_SET_THP_DISABLE = 0x29 @@ -1148,6 +1217,11 @@ const ( PR_SET_TIMING = 0xe PR_SET_TSC = 0x1a PR_SET_UNALIGN = 0x6 + PR_SVE_GET_VL = 0x33 + PR_SVE_SET_VL = 0x32 + PR_SVE_SET_VL_ONEXEC = 0x40000 + PR_SVE_VL_INHERIT = 0x20000 + PR_SVE_VL_LEN_MASK = 0xffff PR_TASK_PERF_EVENTS_DISABLE = 0x1f PR_TASK_PERF_EVENTS_ENABLE = 0x20 PR_TIMING_STATISTICAL = 0x0 @@ -1221,12 +1295,22 @@ const ( RLIMIT_CPU = 0x0 RLIMIT_DATA = 0x2 RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x9 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd RLIMIT_NOFILE = 0x5 + RLIMIT_NPROC = 0x8 + RLIMIT_RSS = 0x7 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb RLIMIT_STACK = 0x3 - RLIM_INFINITY = -0x1 + RLIM_INFINITY = 0xffffffffffffffff RTAX_ADVMSS = 0x8 RTAX_CC_ALGO = 0x10 RTAX_CWND = 0x7 + RTAX_FASTOPEN_NO_COOKIE = 0x11 RTAX_FEATURES = 0xc RTAX_FEATURE_ALLFRAG = 0x8 RTAX_FEATURE_ECN = 0x1 @@ -1237,7 +1321,7 @@ const ( RTAX_INITCWND = 0xb RTAX_INITRWND = 0xe RTAX_LOCK = 0x1 - RTAX_MAX = 0x10 + RTAX_MAX = 0x11 RTAX_MTU = 0x2 RTAX_QUICKACK = 0xf RTAX_REORDERING = 0x9 @@ -1248,7 +1332,7 @@ const ( RTAX_UNSPEC = 0x0 RTAX_WINDOW = 0x3 RTA_ALIGNTO = 0x4 - RTA_MAX = 0x19 + RTA_MAX = 0x1a RTCF_DIRECTSRC = 0x4000000 RTCF_DOREDIRECT = 0x1000000 RTCF_LOG = 0x2000000 @@ -1292,6 +1376,7 @@ const ( RTM_DELLINK = 0x11 RTM_DELMDB = 0x55 RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 RTM_DELNSID = 0x59 RTM_DELQDISC = 0x25 RTM_DELROUTE = 0x19 @@ -1300,6 +1385,7 @@ const ( RTM_DELTFILTER = 0x2d RTM_F_CLONED = 0x200 RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 RTM_F_LOOKUP_TABLE = 0x1000 RTM_F_NOTIFY = 0x100 RTM_F_PREFIX = 0x800 @@ -1321,10 +1407,11 @@ const ( RTM_GETSTATS = 0x5e RTM_GETTCLASS = 0x2a RTM_GETTFILTER = 0x2e - RTM_MAX = 0x5f + RTM_MAX = 0x63 RTM_NEWACTION = 0x30 RTM_NEWADDR = 0x14 RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 RTM_NEWLINK = 0x10 RTM_NEWMDB = 0x54 RTM_NEWNDUSEROPT = 0x44 @@ -1339,8 +1426,8 @@ const ( RTM_NEWSTATS = 0x5c RTM_NEWTCLASS = 0x28 RTM_NEWTFILTER = 0x2c - RTM_NR_FAMILIES = 0x14 - RTM_NR_MSGTYPES = 0x50 + RTM_NR_FAMILIES = 0x15 + RTM_NR_MSGTYPES = 0x54 RTM_SETDCB = 0x4f RTM_SETLINK = 0x13 RTM_SETNEIGHTBL = 0x43 @@ -1351,6 +1438,7 @@ const ( RTNH_F_OFFLOAD = 0x8 RTNH_F_ONLINK = 0x4 RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 RTN_MAX = 0xb RTPROT_BABEL = 0x2a RTPROT_BIRD = 0xc @@ -1381,8 +1469,12 @@ const ( SCM_TIMESTAMP = 0x1d SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 @@ -1390,6 +1482,16 @@ const ( SIOCADDMULTI = 0x8931 SIOCADDRT = 0x890b SIOCATMARK = 0x40047307 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 SIOCDARP = 0x8953 SIOCDELDLCI = 0x8981 SIOCDELMULTI = 0x8932 @@ -1397,7 +1499,9 @@ const ( SIOCDEVPRIVATE = 0x89f0 SIOCDIFADDR = 0x8936 SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 SIOCGIFADDR = 0x8915 SIOCGIFBR = 0x8940 SIOCGIFBRDADDR = 0x8919 @@ -1417,13 +1521,21 @@ const ( SIOCGIFPFLAGS = 0x8935 SIOCGIFSLAVE = 0x8929 SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 SIOCGPGRP = 0x40047309 SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c SIOCGSTAMP = 0x8906 SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x467f + SIOCOUTQ = 0x7472 + SIOCOUTQNSD = 0x894b SIOCPROTOPRIVATE = 0x89e0 SIOCRTMSG = 0x890d SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 SIOCSIFADDR = 0x8916 SIOCSIFBR = 0x8941 SIOCSIFBRDADDR = 0x891a @@ -1442,11 +1554,15 @@ const ( SIOCSIFPFLAGS = 0x8934 SIOCSIFSLAVE = 0x8930 SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 SIOCSPGRP = 0x80047308 SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a SOCK_CLOEXEC = 0x80000 SOCK_DCCP = 0x6 SOCK_DGRAM = 0x1 + SOCK_IOC_TYPE = 0x89 SOCK_NONBLOCK = 0x80 SOCK_PACKET = 0xa SOCK_RAW = 0x3 @@ -1479,6 +1595,7 @@ const ( SOL_SOCKET = 0xffff SOL_TCP = 0x6 SOL_TIPC = 0x10f + SOL_TLS = 0x11a SOL_X25 = 0x106 SOMAXCONN = 0x80 SO_ACCEPTCONN = 0x1009 @@ -1492,6 +1609,7 @@ const ( SO_BSDCOMPAT = 0xe SO_BUSY_POLL = 0x2e SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 SO_DEBUG = 0x1 SO_DETACH_BPF = 0x1b SO_DETACH_FILTER = 0x1b @@ -1500,11 +1618,13 @@ const ( SO_ERROR = 0x1007 SO_GET_FILTER = 0x1a SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 SO_KEEPALIVE = 0x8 SO_LINGER = 0x80 SO_LOCK_FILTER = 0x2c SO_MARK = 0x24 SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 SO_NOFCS = 0x2b SO_NO_CHECK = 0xb SO_OOBINLINE = 0x100 @@ -1512,6 +1632,7 @@ const ( SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x12 + SO_PEERGROUPS = 0x3b SO_PEERNAME = 0x1c SO_PEERSEC = 0x1e SO_PRIORITY = 0xc @@ -1544,10 +1665,32 @@ const ( SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 SO_VM_SOCKETS_TRUSTED = 0x5 SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c SPLICE_F_GIFT = 0x8 SPLICE_F_MORE = 0x4 SPLICE_F_MOVE = 0x1 SPLICE_F_NONBLOCK = 0x2 + STATX_ALL = 0xfff + STATX_ATIME = 0x20 + STATX_ATTR_APPEND = 0x20 + STATX_ATTR_AUTOMOUNT = 0x1000 + STATX_ATTR_COMPRESSED = 0x4 + STATX_ATTR_ENCRYPTED = 0x800 + STATX_ATTR_IMMUTABLE = 0x10 + STATX_ATTR_NODUMP = 0x40 + STATX_BASIC_STATS = 0x7ff + STATX_BLOCKS = 0x400 + STATX_BTIME = 0x800 + STATX_CTIME = 0x80 + STATX_GID = 0x10 + STATX_INO = 0x100 + STATX_MODE = 0x2 + STATX_MTIME = 0x40 + STATX_NLINK = 0x4 + STATX_SIZE = 0x200 + STATX_TYPE = 0x1 + STATX_UID = 0x8 + STATX__RESERVED = 0x80000000 S_BLKSIZE = 0x200 S_IEXEC = 0x40 S_IFBLK = 0x6000 @@ -1580,6 +1723,12 @@ const ( TAB2 = 0x1000 TAB3 = 0x1800 TABDLY = 0x1800 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 TCFLSH = 0x5407 TCGETA = 0x5401 TCGETS = 0x540d @@ -1602,6 +1751,7 @@ const ( TCP_CORK = 0x3 TCP_DEFER_ACCEPT = 0x9 TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e TCP_INFO = 0xb TCP_KEEPCNT = 0x6 TCP_KEEPIDLE = 0x4 @@ -1611,6 +1761,8 @@ const ( TCP_MAXWIN = 0xffff TCP_MAX_WINSHIFT = 0xe TCP_MD5SIG = 0xe + TCP_MD5SIG_EXT = 0x20 + TCP_MD5SIG_FLAG_PREFIX = 0x1 TCP_MD5SIG_MAXKEYLEN = 0x50 TCP_MSS = 0x200 TCP_MSS_DEFAULT = 0x218 @@ -1631,6 +1783,7 @@ const ( TCP_THIN_DUPACK = 0x11 TCP_THIN_LINEAR_TIMEOUTS = 0x10 TCP_TIMESTAMP = 0x18 + TCP_ULP = 0x1f TCP_USER_TIMEOUT = 0x12 TCP_WINDOW_CLAMP = 0xa TCSAFLUSH = 0x5410 @@ -1660,6 +1813,7 @@ const ( TIOCGPKT = 0x40045438 TIOCGPTLCK = 0x40045439 TIOCGPTN = 0x40045430 + TIOCGPTPEER = 0x20005441 TIOCGRS485 = 0x4020542e TIOCGSERIAL = 0x5484 TIOCGSID = 0x7416 @@ -1720,6 +1874,7 @@ const ( TIOCSWINSZ = 0x80087467 TIOCVHANGUP = 0x5437 TOSTOP = 0x8000 + TS_COMM_LEN = 0x20 TUNATTACHFILTER = 0x801054d5 TUNDETACHFILTER = 0x801054d6 TUNGETFEATURES = 0x400454cf @@ -1744,6 +1899,9 @@ const ( TUNSETVNETBE = 0x800454de TUNSETVNETHDRSZ = 0x800454d8 TUNSETVNETLE = 0x800454dc + UMOUNT_NOFOLLOW = 0x8 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe VDISCARD = 0xd VEOF = 0x10 VEOL = 0x11 @@ -1774,6 +1932,17 @@ const ( WALL = 0x40000000 WCLONE = 0x80000000 WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x40045702 + WDIOC_GETPRETIMEOUT = 0x40045709 + WDIOC_GETSTATUS = 0x40045701 + WDIOC_GETSUPPORT = 0x40285700 + WDIOC_GETTEMP = 0x40045703 + WDIOC_GETTIMELEFT = 0x4004570a + WDIOC_GETTIMEOUT = 0x40045707 + WDIOC_KEEPALIVE = 0x40045705 + WDIOC_SETOPTIONS = 0x40045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 WEXITED = 0x4 WNOHANG = 0x1 WNOTHREAD = 0x20000000 @@ -1781,6 +1950,8 @@ const ( WORDSIZE = 0x40 WSTOPPED = 0x2 WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 XCASE = 0x4 XTABS = 0x1800 ) 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 06d704e..5e40607 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go @@ -36,7 +36,7 @@ const ( AF_KEY = 0xf AF_LLC = 0x1a AF_LOCAL = 0x1 - AF_MAX = 0x2b + AF_MAX = 0x2c AF_MPLS = 0x1c AF_NETBEUI = 0xd AF_NETLINK = 0x10 @@ -51,6 +51,7 @@ const ( AF_ROUTE = 0x10 AF_RXRPC = 0x21 AF_SECURITY = 0xe + AF_SMC = 0x2b AF_SNA = 0x16 AF_TIPC = 0x1e AF_UNIX = 0x1 @@ -120,6 +121,7 @@ const ( ARPHRD_PPP = 0x200 ARPHRD_PRONET = 0x4 ARPHRD_RAWHDLC = 0x206 + ARPHRD_RAWIP = 0x207 ARPHRD_ROSE = 0x10e ARPHRD_RSRVD = 0x104 ARPHRD_SIT = 0x308 @@ -129,6 +131,7 @@ const ( ARPHRD_TUNNEL = 0x300 ARPHRD_TUNNEL6 = 0x301 ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a ARPHRD_X25 = 0x10f B0 = 0x0 B1000000 = 0x1008 @@ -325,6 +328,9 @@ const ( ECHOKE = 0x800 ECHONL = 0x40 ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x80 + EFD_SEMAPHORE = 0x1 ENCODING_DEFAULT = 0x0 ENCODING_FM_MARK = 0x3 ENCODING_FM_SPACE = 0x4 @@ -385,13 +391,16 @@ const ( ETH_P_DSA = 0x1b ETH_P_ECONET = 0x18 ETH_P_EDSA = 0xdada + ETH_P_ERSPAN = 0x88be ETH_P_FCOE = 0x8906 ETH_P_FIP = 0x8914 ETH_P_HDLC = 0x19 ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 ETH_P_IEEE802154 = 0xf6 ETH_P_IEEEPUP = 0xa00 ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IFE = 0xed3e ETH_P_IP = 0x800 ETH_P_IPV6 = 0x86dd ETH_P_IPX = 0x8137 @@ -402,11 +411,13 @@ const ( ETH_P_LOOP = 0x60 ETH_P_LOOPBACK = 0x9000 ETH_P_MACSEC = 0x88e5 + ETH_P_MAP = 0xf9 ETH_P_MOBITEX = 0x15 ETH_P_MPLS_MC = 0x8848 ETH_P_MPLS_UC = 0x8847 ETH_P_MVRP = 0x88f5 ETH_P_NCSI = 0x88f8 + ETH_P_NSH = 0x894f ETH_P_PAE = 0x888e ETH_P_PAUSE = 0x8808 ETH_P_PHONET = 0xf5 @@ -450,6 +461,8 @@ const ( FF1 = 0x8000 FFDLY = 0x8000 FLUSHO = 0x2000 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 @@ -468,6 +481,7 @@ const ( FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 FS_POLICY_FLAGS_VALID = 0x3 + F_ADD_SEALS = 0x409 F_DUPFD = 0x0 F_DUPFD_CLOEXEC = 0x406 F_EXLCK = 0x4 @@ -480,6 +494,9 @@ const ( F_GETOWN_EX = 0x10 F_GETPIPE_SZ = 0x408 F_GETSIG = 0xb + F_GET_FILE_RW_HINT = 0x40d + F_GET_RW_HINT = 0x40b + F_GET_SEALS = 0x40a F_LOCK = 0x1 F_NOTIFY = 0x402 F_OFD_GETLK = 0x24 @@ -487,6 +504,10 @@ const ( F_OFD_SETLKW = 0x26 F_OK = 0x0 F_RDLCK = 0x0 + F_SEAL_GROW = 0x4 + F_SEAL_SEAL = 0x1 + F_SEAL_SHRINK = 0x2 + F_SEAL_WRITE = 0x8 F_SETFD = 0x2 F_SETFL = 0x4 F_SETLEASE = 0x400 @@ -498,12 +519,27 @@ const ( F_SETOWN_EX = 0xf F_SETPIPE_SZ = 0x407 F_SETSIG = 0xa + F_SET_FILE_RW_HINT = 0x40e + F_SET_RW_HINT = 0x40c F_SHLCK = 0x8 F_TEST = 0x3 F_TLOCK = 0x2 F_ULOCK = 0x0 F_UNLCK = 0x2 F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 GRND_NONBLOCK = 0x1 GRND_RANDOM = 0x2 HUPCL = 0x400 @@ -540,6 +576,8 @@ const ( IFF_MASTER = 0x400 IFF_MULTICAST = 0x1000 IFF_MULTI_QUEUE = 0x100 + IFF_NAPI = 0x10 + IFF_NAPI_FRAGS = 0x20 IFF_NOARP = 0x80 IFF_NOFILTER = 0x1000 IFF_NOTRAILERS = 0x20 @@ -602,6 +640,7 @@ const ( IN_OPEN = 0x20 IN_Q_OVERFLOW = 0x4000 IN_UNMOUNT = 0x2000 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 IPPROTO_AH = 0x33 IPPROTO_BEETPH = 0x5e IPPROTO_COMP = 0x6c @@ -641,8 +680,10 @@ const ( IPV6_2292PKTOPTIONS = 0x6 IPV6_2292RTHDR = 0x5 IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 IPV6_ADD_MEMBERSHIP = 0x14 IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 IPV6_CHECKSUM = 0x7 IPV6_DONTFRAG = 0x3e IPV6_DROP_MEMBERSHIP = 0x15 @@ -655,12 +696,14 @@ const ( IPV6_JOIN_GROUP = 0x14 IPV6_LEAVE_ANYCAST = 0x1c IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 IPV6_MTU = 0x18 IPV6_MTU_DISCOVER = 0x17 IPV6_MULTICAST_HOPS = 0x12 IPV6_MULTICAST_IF = 0x11 IPV6_MULTICAST_LOOP = 0x13 IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a IPV6_PATHMTU = 0x3d IPV6_PKTINFO = 0x32 IPV6_PMTUDISC_DO = 0x2 @@ -671,8 +714,10 @@ const ( IPV6_PMTUDISC_WANT = 0x1 IPV6_RECVDSTOPTS = 0x3a IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d IPV6_RECVHOPLIMIT = 0x33 IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a IPV6_RECVPATHMTU = 0x3c IPV6_RECVPKTINFO = 0x31 IPV6_RECVRTHDR = 0x38 @@ -686,7 +731,9 @@ const ( IPV6_RXDSTOPTS = 0x3b IPV6_RXHOPOPTS = 0x36 IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c IPV6_V6ONLY = 0x1a IPV6_XFRM_POLICY = 0x23 IP_ADD_MEMBERSHIP = 0x23 @@ -729,6 +776,7 @@ const ( IP_PMTUDISC_PROBE = 0x3 IP_PMTUDISC_WANT = 0x1 IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 IP_RECVOPTS = 0x6 IP_RECVORIGDSTADDR = 0x14 IP_RECVRETOPTS = 0x7 @@ -766,6 +814,7 @@ const ( KEYCTL_NEGATE = 0xd KEYCTL_READ = 0xb KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d KEYCTL_REVOKE = 0x3 KEYCTL_SEARCH = 0xa KEYCTL_SESSION_TO_PARENT = 0x12 @@ -813,6 +862,7 @@ const ( MADV_FREE = 0x8 MADV_HUGEPAGE = 0xe MADV_HWPOISON = 0x64 + MADV_KEEPONFORK = 0x13 MADV_MERGEABLE = 0xc MADV_NOHUGEPAGE = 0xf MADV_NORMAL = 0x0 @@ -821,6 +871,7 @@ const ( MADV_SEQUENTIAL = 0x2 MADV_UNMERGEABLE = 0xd MADV_WILLNEED = 0x3 + MADV_WIPEONFORK = 0x12 MAP_ANON = 0x800 MAP_ANONYMOUS = 0x800 MAP_DENYWRITE = 0x2000 @@ -867,6 +918,7 @@ const ( MSG_TRYHARD = 0x4 MSG_WAITALL = 0x100 MSG_WAITFORONE = 0x10000 + MSG_ZEROCOPY = 0x4000000 MS_ACTIVE = 0x40000000 MS_ASYNC = 0x1 MS_BIND = 0x1000 @@ -899,6 +951,7 @@ const ( MS_SILENT = 0x8000 MS_SLAVE = 0x80000 MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 MS_SYNC = 0x4 MS_SYNCHRONOUS = 0x10 MS_UNBINDABLE = 0x20000 @@ -913,6 +966,7 @@ const ( NETLINK_DNRTMSG = 0xe NETLINK_DROP_MEMBERSHIP = 0x2 NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb NETLINK_FIB_LOOKUP = 0xa NETLINK_FIREWALL = 0x3 NETLINK_GENERIC = 0x10 @@ -931,6 +985,7 @@ const ( NETLINK_RX_RING = 0x6 NETLINK_SCSITRANSPORT = 0x12 NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 NETLINK_SOCK_DIAG = 0x4 NETLINK_TX_RING = 0x7 NETLINK_UNUSED = 0x1 @@ -951,8 +1006,10 @@ const ( NLMSG_NOOP = 0x1 NLMSG_OVERRUN = 0x4 NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 NLM_F_APPEND = 0x800 NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 NLM_F_CREATE = 0x400 NLM_F_DUMP = 0x300 NLM_F_DUMP_FILTERED = 0x20 @@ -961,6 +1018,7 @@ const ( NLM_F_EXCL = 0x200 NLM_F_MATCH = 0x200 NLM_F_MULTI = 0x2 + NLM_F_NONREC = 0x100 NLM_F_REPLACE = 0x100 NLM_F_REQUEST = 0x1 NLM_F_ROOT = 0x100 @@ -1009,6 +1067,7 @@ const ( PACKET_FANOUT_EBPF = 0x7 PACKET_FANOUT_FLAG_DEFRAG = 0x8000 PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 PACKET_FANOUT_HASH = 0x0 PACKET_FANOUT_LB = 0x1 PACKET_FANOUT_QM = 0x5 @@ -1053,6 +1112,16 @@ const ( PARMRK = 0x8 PARODD = 0x200 PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x20002401 + PERF_EVENT_IOC_ENABLE = 0x20002400 + PERF_EVENT_IOC_ID = 0x40082407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 + PERF_EVENT_IOC_PERIOD = 0x80082404 + PERF_EVENT_IOC_REFRESH = 0x20002402 + PERF_EVENT_IOC_RESET = 0x20002403 + PERF_EVENT_IOC_SET_BPF = 0x80042408 + PERF_EVENT_IOC_SET_FILTER = 0x80082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 PRIO_PGRP = 0x1 PRIO_PROCESS = 0x0 PRIO_USER = 0x2 @@ -1140,7 +1209,7 @@ const ( PR_SET_NO_NEW_PRIVS = 0x26 PR_SET_PDEATHSIG = 0x1 PR_SET_PTRACER = 0x59616d61 - PR_SET_PTRACER_ANY = -0x1 + PR_SET_PTRACER_ANY = 0xffffffffffffffff PR_SET_SECCOMP = 0x16 PR_SET_SECUREBITS = 0x1c PR_SET_THP_DISABLE = 0x29 @@ -1148,6 +1217,11 @@ const ( PR_SET_TIMING = 0xe PR_SET_TSC = 0x1a PR_SET_UNALIGN = 0x6 + PR_SVE_GET_VL = 0x33 + PR_SVE_SET_VL = 0x32 + PR_SVE_SET_VL_ONEXEC = 0x40000 + PR_SVE_VL_INHERIT = 0x20000 + PR_SVE_VL_LEN_MASK = 0xffff PR_TASK_PERF_EVENTS_DISABLE = 0x1f PR_TASK_PERF_EVENTS_ENABLE = 0x20 PR_TIMING_STATISTICAL = 0x0 @@ -1221,12 +1295,22 @@ const ( RLIMIT_CPU = 0x0 RLIMIT_DATA = 0x2 RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x9 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd RLIMIT_NOFILE = 0x5 + RLIMIT_NPROC = 0x8 + RLIMIT_RSS = 0x7 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb RLIMIT_STACK = 0x3 - RLIM_INFINITY = -0x1 + RLIM_INFINITY = 0xffffffffffffffff RTAX_ADVMSS = 0x8 RTAX_CC_ALGO = 0x10 RTAX_CWND = 0x7 + RTAX_FASTOPEN_NO_COOKIE = 0x11 RTAX_FEATURES = 0xc RTAX_FEATURE_ALLFRAG = 0x8 RTAX_FEATURE_ECN = 0x1 @@ -1237,7 +1321,7 @@ const ( RTAX_INITCWND = 0xb RTAX_INITRWND = 0xe RTAX_LOCK = 0x1 - RTAX_MAX = 0x10 + RTAX_MAX = 0x11 RTAX_MTU = 0x2 RTAX_QUICKACK = 0xf RTAX_REORDERING = 0x9 @@ -1248,7 +1332,7 @@ const ( RTAX_UNSPEC = 0x0 RTAX_WINDOW = 0x3 RTA_ALIGNTO = 0x4 - RTA_MAX = 0x19 + RTA_MAX = 0x1a RTCF_DIRECTSRC = 0x4000000 RTCF_DOREDIRECT = 0x1000000 RTCF_LOG = 0x2000000 @@ -1292,6 +1376,7 @@ const ( RTM_DELLINK = 0x11 RTM_DELMDB = 0x55 RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 RTM_DELNSID = 0x59 RTM_DELQDISC = 0x25 RTM_DELROUTE = 0x19 @@ -1300,6 +1385,7 @@ const ( RTM_DELTFILTER = 0x2d RTM_F_CLONED = 0x200 RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 RTM_F_LOOKUP_TABLE = 0x1000 RTM_F_NOTIFY = 0x100 RTM_F_PREFIX = 0x800 @@ -1321,10 +1407,11 @@ const ( RTM_GETSTATS = 0x5e RTM_GETTCLASS = 0x2a RTM_GETTFILTER = 0x2e - RTM_MAX = 0x5f + RTM_MAX = 0x63 RTM_NEWACTION = 0x30 RTM_NEWADDR = 0x14 RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 RTM_NEWLINK = 0x10 RTM_NEWMDB = 0x54 RTM_NEWNDUSEROPT = 0x44 @@ -1339,8 +1426,8 @@ const ( RTM_NEWSTATS = 0x5c RTM_NEWTCLASS = 0x28 RTM_NEWTFILTER = 0x2c - RTM_NR_FAMILIES = 0x14 - RTM_NR_MSGTYPES = 0x50 + RTM_NR_FAMILIES = 0x15 + RTM_NR_MSGTYPES = 0x54 RTM_SETDCB = 0x4f RTM_SETLINK = 0x13 RTM_SETNEIGHTBL = 0x43 @@ -1351,6 +1438,7 @@ const ( RTNH_F_OFFLOAD = 0x8 RTNH_F_ONLINK = 0x4 RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 RTN_MAX = 0xb RTPROT_BABEL = 0x2a RTPROT_BIRD = 0xc @@ -1381,8 +1469,12 @@ const ( SCM_TIMESTAMP = 0x1d SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 @@ -1390,6 +1482,16 @@ const ( SIOCADDMULTI = 0x8931 SIOCADDRT = 0x890b SIOCATMARK = 0x40047307 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 SIOCDARP = 0x8953 SIOCDELDLCI = 0x8981 SIOCDELMULTI = 0x8932 @@ -1397,7 +1499,9 @@ const ( SIOCDEVPRIVATE = 0x89f0 SIOCDIFADDR = 0x8936 SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 SIOCGIFADDR = 0x8915 SIOCGIFBR = 0x8940 SIOCGIFBRDADDR = 0x8919 @@ -1417,13 +1521,21 @@ const ( SIOCGIFPFLAGS = 0x8935 SIOCGIFSLAVE = 0x8929 SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 SIOCGPGRP = 0x40047309 SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c SIOCGSTAMP = 0x8906 SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x467f + SIOCOUTQ = 0x7472 + SIOCOUTQNSD = 0x894b SIOCPROTOPRIVATE = 0x89e0 SIOCRTMSG = 0x890d SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 SIOCSIFADDR = 0x8916 SIOCSIFBR = 0x8941 SIOCSIFBRDADDR = 0x891a @@ -1442,11 +1554,15 @@ const ( SIOCSIFPFLAGS = 0x8934 SIOCSIFSLAVE = 0x8930 SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 SIOCSPGRP = 0x80047308 SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a SOCK_CLOEXEC = 0x80000 SOCK_DCCP = 0x6 SOCK_DGRAM = 0x1 + SOCK_IOC_TYPE = 0x89 SOCK_NONBLOCK = 0x80 SOCK_PACKET = 0xa SOCK_RAW = 0x3 @@ -1479,6 +1595,7 @@ const ( SOL_SOCKET = 0xffff SOL_TCP = 0x6 SOL_TIPC = 0x10f + SOL_TLS = 0x11a SOL_X25 = 0x106 SOMAXCONN = 0x80 SO_ACCEPTCONN = 0x1009 @@ -1492,6 +1609,7 @@ const ( SO_BSDCOMPAT = 0xe SO_BUSY_POLL = 0x2e SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 SO_DEBUG = 0x1 SO_DETACH_BPF = 0x1b SO_DETACH_FILTER = 0x1b @@ -1500,11 +1618,13 @@ const ( SO_ERROR = 0x1007 SO_GET_FILTER = 0x1a SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 SO_KEEPALIVE = 0x8 SO_LINGER = 0x80 SO_LOCK_FILTER = 0x2c SO_MARK = 0x24 SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 SO_NOFCS = 0x2b SO_NO_CHECK = 0xb SO_OOBINLINE = 0x100 @@ -1512,6 +1632,7 @@ const ( SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x12 + SO_PEERGROUPS = 0x3b SO_PEERNAME = 0x1c SO_PEERSEC = 0x1e SO_PRIORITY = 0xc @@ -1544,10 +1665,32 @@ const ( SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 SO_VM_SOCKETS_TRUSTED = 0x5 SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c SPLICE_F_GIFT = 0x8 SPLICE_F_MORE = 0x4 SPLICE_F_MOVE = 0x1 SPLICE_F_NONBLOCK = 0x2 + STATX_ALL = 0xfff + STATX_ATIME = 0x20 + STATX_ATTR_APPEND = 0x20 + STATX_ATTR_AUTOMOUNT = 0x1000 + STATX_ATTR_COMPRESSED = 0x4 + STATX_ATTR_ENCRYPTED = 0x800 + STATX_ATTR_IMMUTABLE = 0x10 + STATX_ATTR_NODUMP = 0x40 + STATX_BASIC_STATS = 0x7ff + STATX_BLOCKS = 0x400 + STATX_BTIME = 0x800 + STATX_CTIME = 0x80 + STATX_GID = 0x10 + STATX_INO = 0x100 + STATX_MODE = 0x2 + STATX_MTIME = 0x40 + STATX_NLINK = 0x4 + STATX_SIZE = 0x200 + STATX_TYPE = 0x1 + STATX_UID = 0x8 + STATX__RESERVED = 0x80000000 S_BLKSIZE = 0x200 S_IEXEC = 0x40 S_IFBLK = 0x6000 @@ -1580,6 +1723,12 @@ const ( TAB2 = 0x1000 TAB3 = 0x1800 TABDLY = 0x1800 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 TCFLSH = 0x5407 TCGETA = 0x5401 TCGETS = 0x540d @@ -1602,6 +1751,7 @@ const ( TCP_CORK = 0x3 TCP_DEFER_ACCEPT = 0x9 TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e TCP_INFO = 0xb TCP_KEEPCNT = 0x6 TCP_KEEPIDLE = 0x4 @@ -1611,6 +1761,8 @@ const ( TCP_MAXWIN = 0xffff TCP_MAX_WINSHIFT = 0xe TCP_MD5SIG = 0xe + TCP_MD5SIG_EXT = 0x20 + TCP_MD5SIG_FLAG_PREFIX = 0x1 TCP_MD5SIG_MAXKEYLEN = 0x50 TCP_MSS = 0x200 TCP_MSS_DEFAULT = 0x218 @@ -1631,6 +1783,7 @@ const ( TCP_THIN_DUPACK = 0x11 TCP_THIN_LINEAR_TIMEOUTS = 0x10 TCP_TIMESTAMP = 0x18 + TCP_ULP = 0x1f TCP_USER_TIMEOUT = 0x12 TCP_WINDOW_CLAMP = 0xa TCSAFLUSH = 0x5410 @@ -1660,6 +1813,7 @@ const ( TIOCGPKT = 0x40045438 TIOCGPTLCK = 0x40045439 TIOCGPTN = 0x40045430 + TIOCGPTPEER = 0x20005441 TIOCGRS485 = 0x4020542e TIOCGSERIAL = 0x5484 TIOCGSID = 0x7416 @@ -1720,6 +1874,7 @@ const ( TIOCSWINSZ = 0x80087467 TIOCVHANGUP = 0x5437 TOSTOP = 0x8000 + TS_COMM_LEN = 0x20 TUNATTACHFILTER = 0x801054d5 TUNDETACHFILTER = 0x801054d6 TUNGETFEATURES = 0x400454cf @@ -1744,6 +1899,9 @@ const ( TUNSETVNETBE = 0x800454de TUNSETVNETHDRSZ = 0x800454d8 TUNSETVNETLE = 0x800454dc + UMOUNT_NOFOLLOW = 0x8 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe VDISCARD = 0xd VEOF = 0x10 VEOL = 0x11 @@ -1774,6 +1932,17 @@ const ( WALL = 0x40000000 WCLONE = 0x80000000 WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x40045702 + WDIOC_GETPRETIMEOUT = 0x40045709 + WDIOC_GETSTATUS = 0x40045701 + WDIOC_GETSUPPORT = 0x40285700 + WDIOC_GETTEMP = 0x40045703 + WDIOC_GETTIMELEFT = 0x4004570a + WDIOC_GETTIMEOUT = 0x40045707 + WDIOC_KEEPALIVE = 0x40045705 + WDIOC_SETOPTIONS = 0x40045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 WEXITED = 0x4 WNOHANG = 0x1 WNOTHREAD = 0x20000000 @@ -1781,6 +1950,8 @@ const ( WORDSIZE = 0x40 WSTOPPED = 0x2 WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 XCASE = 0x4 XTABS = 0x1800 ) 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 94e1ac2..b9b9d63 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go @@ -36,7 +36,7 @@ const ( AF_KEY = 0xf AF_LLC = 0x1a AF_LOCAL = 0x1 - AF_MAX = 0x2b + AF_MAX = 0x2c AF_MPLS = 0x1c AF_NETBEUI = 0xd AF_NETLINK = 0x10 @@ -51,6 +51,7 @@ const ( AF_ROUTE = 0x10 AF_RXRPC = 0x21 AF_SECURITY = 0xe + AF_SMC = 0x2b AF_SNA = 0x16 AF_TIPC = 0x1e AF_UNIX = 0x1 @@ -120,6 +121,7 @@ const ( ARPHRD_PPP = 0x200 ARPHRD_PRONET = 0x4 ARPHRD_RAWHDLC = 0x206 + ARPHRD_RAWIP = 0x207 ARPHRD_ROSE = 0x10e ARPHRD_RSRVD = 0x104 ARPHRD_SIT = 0x308 @@ -129,6 +131,7 @@ const ( ARPHRD_TUNNEL = 0x300 ARPHRD_TUNNEL6 = 0x301 ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a ARPHRD_X25 = 0x10f B0 = 0x0 B1000000 = 0x1008 @@ -325,6 +328,9 @@ const ( ECHOKE = 0x800 ECHONL = 0x40 ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x80 + EFD_SEMAPHORE = 0x1 ENCODING_DEFAULT = 0x0 ENCODING_FM_MARK = 0x3 ENCODING_FM_SPACE = 0x4 @@ -385,13 +391,16 @@ const ( ETH_P_DSA = 0x1b ETH_P_ECONET = 0x18 ETH_P_EDSA = 0xdada + ETH_P_ERSPAN = 0x88be ETH_P_FCOE = 0x8906 ETH_P_FIP = 0x8914 ETH_P_HDLC = 0x19 ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 ETH_P_IEEE802154 = 0xf6 ETH_P_IEEEPUP = 0xa00 ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IFE = 0xed3e ETH_P_IP = 0x800 ETH_P_IPV6 = 0x86dd ETH_P_IPX = 0x8137 @@ -402,11 +411,13 @@ const ( ETH_P_LOOP = 0x60 ETH_P_LOOPBACK = 0x9000 ETH_P_MACSEC = 0x88e5 + ETH_P_MAP = 0xf9 ETH_P_MOBITEX = 0x15 ETH_P_MPLS_MC = 0x8848 ETH_P_MPLS_UC = 0x8847 ETH_P_MVRP = 0x88f5 ETH_P_NCSI = 0x88f8 + ETH_P_NSH = 0x894f ETH_P_PAE = 0x888e ETH_P_PAUSE = 0x8808 ETH_P_PHONET = 0xf5 @@ -450,6 +461,8 @@ const ( FF1 = 0x8000 FFDLY = 0x8000 FLUSHO = 0x2000 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 @@ -468,6 +481,7 @@ const ( FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 FS_POLICY_FLAGS_VALID = 0x3 + F_ADD_SEALS = 0x409 F_DUPFD = 0x0 F_DUPFD_CLOEXEC = 0x406 F_EXLCK = 0x4 @@ -480,6 +494,9 @@ const ( F_GETOWN_EX = 0x10 F_GETPIPE_SZ = 0x408 F_GETSIG = 0xb + F_GET_FILE_RW_HINT = 0x40d + F_GET_RW_HINT = 0x40b + F_GET_SEALS = 0x40a F_LOCK = 0x1 F_NOTIFY = 0x402 F_OFD_GETLK = 0x24 @@ -487,6 +504,10 @@ const ( F_OFD_SETLKW = 0x26 F_OK = 0x0 F_RDLCK = 0x0 + F_SEAL_GROW = 0x4 + F_SEAL_SEAL = 0x1 + F_SEAL_SHRINK = 0x2 + F_SEAL_WRITE = 0x8 F_SETFD = 0x2 F_SETFL = 0x4 F_SETLEASE = 0x400 @@ -498,12 +519,27 @@ const ( F_SETOWN_EX = 0xf F_SETPIPE_SZ = 0x407 F_SETSIG = 0xa + F_SET_FILE_RW_HINT = 0x40e + F_SET_RW_HINT = 0x40c F_SHLCK = 0x8 F_TEST = 0x3 F_TLOCK = 0x2 F_ULOCK = 0x0 F_UNLCK = 0x2 F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 GRND_NONBLOCK = 0x1 GRND_RANDOM = 0x2 HUPCL = 0x400 @@ -540,6 +576,8 @@ const ( IFF_MASTER = 0x400 IFF_MULTICAST = 0x1000 IFF_MULTI_QUEUE = 0x100 + IFF_NAPI = 0x10 + IFF_NAPI_FRAGS = 0x20 IFF_NOARP = 0x80 IFF_NOFILTER = 0x1000 IFF_NOTRAILERS = 0x20 @@ -602,6 +640,7 @@ const ( IN_OPEN = 0x20 IN_Q_OVERFLOW = 0x4000 IN_UNMOUNT = 0x2000 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 IPPROTO_AH = 0x33 IPPROTO_BEETPH = 0x5e IPPROTO_COMP = 0x6c @@ -641,8 +680,10 @@ const ( IPV6_2292PKTOPTIONS = 0x6 IPV6_2292RTHDR = 0x5 IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 IPV6_ADD_MEMBERSHIP = 0x14 IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 IPV6_CHECKSUM = 0x7 IPV6_DONTFRAG = 0x3e IPV6_DROP_MEMBERSHIP = 0x15 @@ -655,12 +696,14 @@ const ( IPV6_JOIN_GROUP = 0x14 IPV6_LEAVE_ANYCAST = 0x1c IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 IPV6_MTU = 0x18 IPV6_MTU_DISCOVER = 0x17 IPV6_MULTICAST_HOPS = 0x12 IPV6_MULTICAST_IF = 0x11 IPV6_MULTICAST_LOOP = 0x13 IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a IPV6_PATHMTU = 0x3d IPV6_PKTINFO = 0x32 IPV6_PMTUDISC_DO = 0x2 @@ -671,8 +714,10 @@ const ( IPV6_PMTUDISC_WANT = 0x1 IPV6_RECVDSTOPTS = 0x3a IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d IPV6_RECVHOPLIMIT = 0x33 IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a IPV6_RECVPATHMTU = 0x3c IPV6_RECVPKTINFO = 0x31 IPV6_RECVRTHDR = 0x38 @@ -686,7 +731,9 @@ const ( IPV6_RXDSTOPTS = 0x3b IPV6_RXHOPOPTS = 0x36 IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c IPV6_V6ONLY = 0x1a IPV6_XFRM_POLICY = 0x23 IP_ADD_MEMBERSHIP = 0x23 @@ -729,6 +776,7 @@ const ( IP_PMTUDISC_PROBE = 0x3 IP_PMTUDISC_WANT = 0x1 IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 IP_RECVOPTS = 0x6 IP_RECVORIGDSTADDR = 0x14 IP_RECVRETOPTS = 0x7 @@ -766,6 +814,7 @@ const ( KEYCTL_NEGATE = 0xd KEYCTL_READ = 0xb KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d KEYCTL_REVOKE = 0x3 KEYCTL_SEARCH = 0xa KEYCTL_SESSION_TO_PARENT = 0x12 @@ -813,6 +862,7 @@ const ( MADV_FREE = 0x8 MADV_HUGEPAGE = 0xe MADV_HWPOISON = 0x64 + MADV_KEEPONFORK = 0x13 MADV_MERGEABLE = 0xc MADV_NOHUGEPAGE = 0xf MADV_NORMAL = 0x0 @@ -821,6 +871,7 @@ const ( MADV_SEQUENTIAL = 0x2 MADV_UNMERGEABLE = 0xd MADV_WILLNEED = 0x3 + MADV_WIPEONFORK = 0x12 MAP_ANON = 0x800 MAP_ANONYMOUS = 0x800 MAP_DENYWRITE = 0x2000 @@ -867,6 +918,7 @@ const ( MSG_TRYHARD = 0x4 MSG_WAITALL = 0x100 MSG_WAITFORONE = 0x10000 + MSG_ZEROCOPY = 0x4000000 MS_ACTIVE = 0x40000000 MS_ASYNC = 0x1 MS_BIND = 0x1000 @@ -899,6 +951,7 @@ const ( MS_SILENT = 0x8000 MS_SLAVE = 0x80000 MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 MS_SYNC = 0x4 MS_SYNCHRONOUS = 0x10 MS_UNBINDABLE = 0x20000 @@ -913,6 +966,7 @@ const ( NETLINK_DNRTMSG = 0xe NETLINK_DROP_MEMBERSHIP = 0x2 NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb NETLINK_FIB_LOOKUP = 0xa NETLINK_FIREWALL = 0x3 NETLINK_GENERIC = 0x10 @@ -931,6 +985,7 @@ const ( NETLINK_RX_RING = 0x6 NETLINK_SCSITRANSPORT = 0x12 NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 NETLINK_SOCK_DIAG = 0x4 NETLINK_TX_RING = 0x7 NETLINK_UNUSED = 0x1 @@ -951,8 +1006,10 @@ const ( NLMSG_NOOP = 0x1 NLMSG_OVERRUN = 0x4 NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 NLM_F_APPEND = 0x800 NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 NLM_F_CREATE = 0x400 NLM_F_DUMP = 0x300 NLM_F_DUMP_FILTERED = 0x20 @@ -961,6 +1018,7 @@ const ( NLM_F_EXCL = 0x200 NLM_F_MATCH = 0x200 NLM_F_MULTI = 0x2 + NLM_F_NONREC = 0x100 NLM_F_REPLACE = 0x100 NLM_F_REQUEST = 0x1 NLM_F_ROOT = 0x100 @@ -1009,6 +1067,7 @@ const ( PACKET_FANOUT_EBPF = 0x7 PACKET_FANOUT_FLAG_DEFRAG = 0x8000 PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 PACKET_FANOUT_HASH = 0x0 PACKET_FANOUT_LB = 0x1 PACKET_FANOUT_QM = 0x5 @@ -1053,6 +1112,16 @@ const ( PARMRK = 0x8 PARODD = 0x200 PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x20002401 + PERF_EVENT_IOC_ENABLE = 0x20002400 + PERF_EVENT_IOC_ID = 0x40042407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 + PERF_EVENT_IOC_PERIOD = 0x80082404 + PERF_EVENT_IOC_REFRESH = 0x20002402 + PERF_EVENT_IOC_RESET = 0x20002403 + PERF_EVENT_IOC_SET_BPF = 0x80042408 + PERF_EVENT_IOC_SET_FILTER = 0x80042406 + PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 PRIO_PGRP = 0x1 PRIO_PROCESS = 0x0 PRIO_USER = 0x2 @@ -1148,6 +1217,11 @@ const ( PR_SET_TIMING = 0xe PR_SET_TSC = 0x1a PR_SET_UNALIGN = 0x6 + PR_SVE_GET_VL = 0x33 + PR_SVE_SET_VL = 0x32 + PR_SVE_SET_VL_ONEXEC = 0x40000 + PR_SVE_VL_INHERIT = 0x20000 + PR_SVE_VL_LEN_MASK = 0xffff PR_TASK_PERF_EVENTS_DISABLE = 0x1f PR_TASK_PERF_EVENTS_ENABLE = 0x20 PR_TIMING_STATISTICAL = 0x0 @@ -1221,12 +1295,22 @@ const ( RLIMIT_CPU = 0x0 RLIMIT_DATA = 0x2 RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x9 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd RLIMIT_NOFILE = 0x5 + RLIMIT_NPROC = 0x8 + RLIMIT_RSS = 0x7 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb RLIMIT_STACK = 0x3 - RLIM_INFINITY = -0x1 + RLIM_INFINITY = 0xffffffffffffffff RTAX_ADVMSS = 0x8 RTAX_CC_ALGO = 0x10 RTAX_CWND = 0x7 + RTAX_FASTOPEN_NO_COOKIE = 0x11 RTAX_FEATURES = 0xc RTAX_FEATURE_ALLFRAG = 0x8 RTAX_FEATURE_ECN = 0x1 @@ -1237,7 +1321,7 @@ const ( RTAX_INITCWND = 0xb RTAX_INITRWND = 0xe RTAX_LOCK = 0x1 - RTAX_MAX = 0x10 + RTAX_MAX = 0x11 RTAX_MTU = 0x2 RTAX_QUICKACK = 0xf RTAX_REORDERING = 0x9 @@ -1248,7 +1332,7 @@ const ( RTAX_UNSPEC = 0x0 RTAX_WINDOW = 0x3 RTA_ALIGNTO = 0x4 - RTA_MAX = 0x19 + RTA_MAX = 0x1a RTCF_DIRECTSRC = 0x4000000 RTCF_DOREDIRECT = 0x1000000 RTCF_LOG = 0x2000000 @@ -1292,6 +1376,7 @@ const ( RTM_DELLINK = 0x11 RTM_DELMDB = 0x55 RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 RTM_DELNSID = 0x59 RTM_DELQDISC = 0x25 RTM_DELROUTE = 0x19 @@ -1300,6 +1385,7 @@ const ( RTM_DELTFILTER = 0x2d RTM_F_CLONED = 0x200 RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 RTM_F_LOOKUP_TABLE = 0x1000 RTM_F_NOTIFY = 0x100 RTM_F_PREFIX = 0x800 @@ -1321,10 +1407,11 @@ const ( RTM_GETSTATS = 0x5e RTM_GETTCLASS = 0x2a RTM_GETTFILTER = 0x2e - RTM_MAX = 0x5f + RTM_MAX = 0x63 RTM_NEWACTION = 0x30 RTM_NEWADDR = 0x14 RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 RTM_NEWLINK = 0x10 RTM_NEWMDB = 0x54 RTM_NEWNDUSEROPT = 0x44 @@ -1339,8 +1426,8 @@ const ( RTM_NEWSTATS = 0x5c RTM_NEWTCLASS = 0x28 RTM_NEWTFILTER = 0x2c - RTM_NR_FAMILIES = 0x14 - RTM_NR_MSGTYPES = 0x50 + RTM_NR_FAMILIES = 0x15 + RTM_NR_MSGTYPES = 0x54 RTM_SETDCB = 0x4f RTM_SETLINK = 0x13 RTM_SETNEIGHTBL = 0x43 @@ -1351,6 +1438,7 @@ const ( RTNH_F_OFFLOAD = 0x8 RTNH_F_ONLINK = 0x4 RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 RTN_MAX = 0xb RTPROT_BABEL = 0x2a RTPROT_BIRD = 0xc @@ -1381,8 +1469,12 @@ const ( SCM_TIMESTAMP = 0x1d SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 @@ -1390,6 +1482,16 @@ const ( SIOCADDMULTI = 0x8931 SIOCADDRT = 0x890b SIOCATMARK = 0x40047307 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 SIOCDARP = 0x8953 SIOCDELDLCI = 0x8981 SIOCDELMULTI = 0x8932 @@ -1397,7 +1499,9 @@ const ( SIOCDEVPRIVATE = 0x89f0 SIOCDIFADDR = 0x8936 SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 SIOCGIFADDR = 0x8915 SIOCGIFBR = 0x8940 SIOCGIFBRDADDR = 0x8919 @@ -1417,13 +1521,21 @@ const ( SIOCGIFPFLAGS = 0x8935 SIOCGIFSLAVE = 0x8929 SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 SIOCGPGRP = 0x40047309 SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c SIOCGSTAMP = 0x8906 SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x467f + SIOCOUTQ = 0x7472 + SIOCOUTQNSD = 0x894b SIOCPROTOPRIVATE = 0x89e0 SIOCRTMSG = 0x890d SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 SIOCSIFADDR = 0x8916 SIOCSIFBR = 0x8941 SIOCSIFBRDADDR = 0x891a @@ -1442,11 +1554,15 @@ const ( SIOCSIFPFLAGS = 0x8934 SIOCSIFSLAVE = 0x8930 SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 SIOCSPGRP = 0x80047308 SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a SOCK_CLOEXEC = 0x80000 SOCK_DCCP = 0x6 SOCK_DGRAM = 0x1 + SOCK_IOC_TYPE = 0x89 SOCK_NONBLOCK = 0x80 SOCK_PACKET = 0xa SOCK_RAW = 0x3 @@ -1479,6 +1595,7 @@ const ( SOL_SOCKET = 0xffff SOL_TCP = 0x6 SOL_TIPC = 0x10f + SOL_TLS = 0x11a SOL_X25 = 0x106 SOMAXCONN = 0x80 SO_ACCEPTCONN = 0x1009 @@ -1492,6 +1609,7 @@ const ( SO_BSDCOMPAT = 0xe SO_BUSY_POLL = 0x2e SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 SO_DEBUG = 0x1 SO_DETACH_BPF = 0x1b SO_DETACH_FILTER = 0x1b @@ -1500,11 +1618,13 @@ const ( SO_ERROR = 0x1007 SO_GET_FILTER = 0x1a SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 SO_KEEPALIVE = 0x8 SO_LINGER = 0x80 SO_LOCK_FILTER = 0x2c SO_MARK = 0x24 SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 SO_NOFCS = 0x2b SO_NO_CHECK = 0xb SO_OOBINLINE = 0x100 @@ -1512,6 +1632,7 @@ const ( SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x12 + SO_PEERGROUPS = 0x3b SO_PEERNAME = 0x1c SO_PEERSEC = 0x1e SO_PRIORITY = 0xc @@ -1544,10 +1665,32 @@ const ( SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 SO_VM_SOCKETS_TRUSTED = 0x5 SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c SPLICE_F_GIFT = 0x8 SPLICE_F_MORE = 0x4 SPLICE_F_MOVE = 0x1 SPLICE_F_NONBLOCK = 0x2 + STATX_ALL = 0xfff + STATX_ATIME = 0x20 + STATX_ATTR_APPEND = 0x20 + STATX_ATTR_AUTOMOUNT = 0x1000 + STATX_ATTR_COMPRESSED = 0x4 + STATX_ATTR_ENCRYPTED = 0x800 + STATX_ATTR_IMMUTABLE = 0x10 + STATX_ATTR_NODUMP = 0x40 + STATX_BASIC_STATS = 0x7ff + STATX_BLOCKS = 0x400 + STATX_BTIME = 0x800 + STATX_CTIME = 0x80 + STATX_GID = 0x10 + STATX_INO = 0x100 + STATX_MODE = 0x2 + STATX_MTIME = 0x40 + STATX_NLINK = 0x4 + STATX_SIZE = 0x200 + STATX_TYPE = 0x1 + STATX_UID = 0x8 + STATX__RESERVED = 0x80000000 S_BLKSIZE = 0x200 S_IEXEC = 0x40 S_IFBLK = 0x6000 @@ -1580,6 +1723,12 @@ const ( TAB2 = 0x1000 TAB3 = 0x1800 TABDLY = 0x1800 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 TCFLSH = 0x5407 TCGETA = 0x5401 TCGETS = 0x540d @@ -1602,6 +1751,7 @@ const ( TCP_CORK = 0x3 TCP_DEFER_ACCEPT = 0x9 TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e TCP_INFO = 0xb TCP_KEEPCNT = 0x6 TCP_KEEPIDLE = 0x4 @@ -1611,6 +1761,8 @@ const ( TCP_MAXWIN = 0xffff TCP_MAX_WINSHIFT = 0xe TCP_MD5SIG = 0xe + TCP_MD5SIG_EXT = 0x20 + TCP_MD5SIG_FLAG_PREFIX = 0x1 TCP_MD5SIG_MAXKEYLEN = 0x50 TCP_MSS = 0x200 TCP_MSS_DEFAULT = 0x218 @@ -1631,6 +1783,7 @@ const ( TCP_THIN_DUPACK = 0x11 TCP_THIN_LINEAR_TIMEOUTS = 0x10 TCP_TIMESTAMP = 0x18 + TCP_ULP = 0x1f TCP_USER_TIMEOUT = 0x12 TCP_WINDOW_CLAMP = 0xa TCSAFLUSH = 0x5410 @@ -1660,6 +1813,7 @@ const ( TIOCGPKT = 0x40045438 TIOCGPTLCK = 0x40045439 TIOCGPTN = 0x40045430 + TIOCGPTPEER = 0x20005441 TIOCGRS485 = 0x4020542e TIOCGSERIAL = 0x5484 TIOCGSID = 0x7416 @@ -1720,6 +1874,7 @@ const ( TIOCSWINSZ = 0x80087467 TIOCVHANGUP = 0x5437 TOSTOP = 0x8000 + TS_COMM_LEN = 0x20 TUNATTACHFILTER = 0x800854d5 TUNDETACHFILTER = 0x800854d6 TUNGETFEATURES = 0x400454cf @@ -1744,6 +1899,9 @@ const ( TUNSETVNETBE = 0x800454de TUNSETVNETHDRSZ = 0x800454d8 TUNSETVNETLE = 0x800454dc + UMOUNT_NOFOLLOW = 0x8 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe VDISCARD = 0xd VEOF = 0x10 VEOL = 0x11 @@ -1774,6 +1932,17 @@ const ( WALL = 0x40000000 WCLONE = 0x80000000 WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x40045702 + WDIOC_GETPRETIMEOUT = 0x40045709 + WDIOC_GETSTATUS = 0x40045701 + WDIOC_GETSUPPORT = 0x40285700 + WDIOC_GETTEMP = 0x40045703 + WDIOC_GETTIMELEFT = 0x4004570a + WDIOC_GETTIMEOUT = 0x40045707 + WDIOC_KEEPALIVE = 0x40045705 + WDIOC_SETOPTIONS = 0x40045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 WEXITED = 0x4 WNOHANG = 0x1 WNOTHREAD = 0x20000000 @@ -1781,6 +1950,8 @@ const ( WORDSIZE = 0x20 WSTOPPED = 0x2 WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 XCASE = 0x4 XTABS = 0x1800 ) 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 0645c5c..509418e 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go @@ -36,7 +36,7 @@ const ( AF_KEY = 0xf AF_LLC = 0x1a AF_LOCAL = 0x1 - AF_MAX = 0x2b + AF_MAX = 0x2c AF_MPLS = 0x1c AF_NETBEUI = 0xd AF_NETLINK = 0x10 @@ -51,6 +51,7 @@ const ( AF_ROUTE = 0x10 AF_RXRPC = 0x21 AF_SECURITY = 0xe + AF_SMC = 0x2b AF_SNA = 0x16 AF_TIPC = 0x1e AF_UNIX = 0x1 @@ -120,6 +121,7 @@ const ( ARPHRD_PPP = 0x200 ARPHRD_PRONET = 0x4 ARPHRD_RAWHDLC = 0x206 + ARPHRD_RAWIP = 0x207 ARPHRD_ROSE = 0x10e ARPHRD_RSRVD = 0x104 ARPHRD_SIT = 0x308 @@ -129,6 +131,7 @@ const ( ARPHRD_TUNNEL = 0x300 ARPHRD_TUNNEL6 = 0x301 ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a ARPHRD_X25 = 0x10f B0 = 0x0 B1000000 = 0x17 @@ -325,6 +328,9 @@ const ( ECHOKE = 0x1 ECHONL = 0x10 ECHOPRT = 0x20 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EFD_SEMAPHORE = 0x1 ENCODING_DEFAULT = 0x0 ENCODING_FM_MARK = 0x3 ENCODING_FM_SPACE = 0x4 @@ -385,13 +391,16 @@ const ( ETH_P_DSA = 0x1b ETH_P_ECONET = 0x18 ETH_P_EDSA = 0xdada + ETH_P_ERSPAN = 0x88be ETH_P_FCOE = 0x8906 ETH_P_FIP = 0x8914 ETH_P_HDLC = 0x19 ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 ETH_P_IEEE802154 = 0xf6 ETH_P_IEEEPUP = 0xa00 ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IFE = 0xed3e ETH_P_IP = 0x800 ETH_P_IPV6 = 0x86dd ETH_P_IPX = 0x8137 @@ -402,11 +411,13 @@ const ( ETH_P_LOOP = 0x60 ETH_P_LOOPBACK = 0x9000 ETH_P_MACSEC = 0x88e5 + ETH_P_MAP = 0xf9 ETH_P_MOBITEX = 0x15 ETH_P_MPLS_MC = 0x8848 ETH_P_MPLS_UC = 0x8847 ETH_P_MVRP = 0x88f5 ETH_P_NCSI = 0x88f8 + ETH_P_NSH = 0x894f ETH_P_PAE = 0x888e ETH_P_PAUSE = 0x8808 ETH_P_PHONET = 0xf5 @@ -450,6 +461,8 @@ const ( FF1 = 0x4000 FFDLY = 0x4000 FLUSHO = 0x800000 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 @@ -468,6 +481,7 @@ const ( FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 FS_POLICY_FLAGS_VALID = 0x3 + F_ADD_SEALS = 0x409 F_DUPFD = 0x0 F_DUPFD_CLOEXEC = 0x406 F_EXLCK = 0x4 @@ -480,6 +494,9 @@ const ( F_GETOWN_EX = 0x10 F_GETPIPE_SZ = 0x408 F_GETSIG = 0xb + F_GET_FILE_RW_HINT = 0x40d + F_GET_RW_HINT = 0x40b + F_GET_SEALS = 0x40a F_LOCK = 0x1 F_NOTIFY = 0x402 F_OFD_GETLK = 0x24 @@ -487,6 +504,10 @@ const ( F_OFD_SETLKW = 0x26 F_OK = 0x0 F_RDLCK = 0x0 + F_SEAL_GROW = 0x4 + F_SEAL_SEAL = 0x1 + F_SEAL_SHRINK = 0x2 + F_SEAL_WRITE = 0x8 F_SETFD = 0x2 F_SETFL = 0x4 F_SETLEASE = 0x400 @@ -498,12 +519,27 @@ const ( F_SETOWN_EX = 0xf F_SETPIPE_SZ = 0x407 F_SETSIG = 0xa + F_SET_FILE_RW_HINT = 0x40e + F_SET_RW_HINT = 0x40c F_SHLCK = 0x8 F_TEST = 0x3 F_TLOCK = 0x2 F_ULOCK = 0x0 F_UNLCK = 0x2 F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 GRND_NONBLOCK = 0x1 GRND_RANDOM = 0x2 HUPCL = 0x4000 @@ -540,6 +576,8 @@ const ( IFF_MASTER = 0x400 IFF_MULTICAST = 0x1000 IFF_MULTI_QUEUE = 0x100 + IFF_NAPI = 0x10 + IFF_NAPI_FRAGS = 0x20 IFF_NOARP = 0x80 IFF_NOFILTER = 0x1000 IFF_NOTRAILERS = 0x20 @@ -602,6 +640,7 @@ const ( IN_OPEN = 0x20 IN_Q_OVERFLOW = 0x4000 IN_UNMOUNT = 0x2000 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 IPPROTO_AH = 0x33 IPPROTO_BEETPH = 0x5e IPPROTO_COMP = 0x6c @@ -641,8 +680,10 @@ const ( IPV6_2292PKTOPTIONS = 0x6 IPV6_2292RTHDR = 0x5 IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 IPV6_ADD_MEMBERSHIP = 0x14 IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 IPV6_CHECKSUM = 0x7 IPV6_DONTFRAG = 0x3e IPV6_DROP_MEMBERSHIP = 0x15 @@ -655,12 +696,14 @@ const ( IPV6_JOIN_GROUP = 0x14 IPV6_LEAVE_ANYCAST = 0x1c IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 IPV6_MTU = 0x18 IPV6_MTU_DISCOVER = 0x17 IPV6_MULTICAST_HOPS = 0x12 IPV6_MULTICAST_IF = 0x11 IPV6_MULTICAST_LOOP = 0x13 IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a IPV6_PATHMTU = 0x3d IPV6_PKTINFO = 0x32 IPV6_PMTUDISC_DO = 0x2 @@ -671,8 +714,10 @@ const ( IPV6_PMTUDISC_WANT = 0x1 IPV6_RECVDSTOPTS = 0x3a IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d IPV6_RECVHOPLIMIT = 0x33 IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a IPV6_RECVPATHMTU = 0x3c IPV6_RECVPKTINFO = 0x31 IPV6_RECVRTHDR = 0x38 @@ -686,7 +731,9 @@ const ( IPV6_RXDSTOPTS = 0x3b IPV6_RXHOPOPTS = 0x36 IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c IPV6_V6ONLY = 0x1a IPV6_XFRM_POLICY = 0x23 IP_ADD_MEMBERSHIP = 0x23 @@ -729,6 +776,7 @@ const ( IP_PMTUDISC_PROBE = 0x3 IP_PMTUDISC_WANT = 0x1 IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 IP_RECVOPTS = 0x6 IP_RECVORIGDSTADDR = 0x14 IP_RECVRETOPTS = 0x7 @@ -766,6 +814,7 @@ const ( KEYCTL_NEGATE = 0xd KEYCTL_READ = 0xb KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d KEYCTL_REVOKE = 0x3 KEYCTL_SEARCH = 0xa KEYCTL_SESSION_TO_PARENT = 0x12 @@ -813,6 +862,7 @@ const ( MADV_FREE = 0x8 MADV_HUGEPAGE = 0xe MADV_HWPOISON = 0x64 + MADV_KEEPONFORK = 0x13 MADV_MERGEABLE = 0xc MADV_NOHUGEPAGE = 0xf MADV_NORMAL = 0x0 @@ -821,6 +871,7 @@ const ( MADV_SEQUENTIAL = 0x2 MADV_UNMERGEABLE = 0xd MADV_WILLNEED = 0x3 + MADV_WIPEONFORK = 0x12 MAP_ANON = 0x20 MAP_ANONYMOUS = 0x20 MAP_DENYWRITE = 0x800 @@ -866,6 +917,7 @@ const ( MSG_TRYHARD = 0x4 MSG_WAITALL = 0x100 MSG_WAITFORONE = 0x10000 + MSG_ZEROCOPY = 0x4000000 MS_ACTIVE = 0x40000000 MS_ASYNC = 0x1 MS_BIND = 0x1000 @@ -898,6 +950,7 @@ const ( MS_SILENT = 0x8000 MS_SLAVE = 0x80000 MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 MS_SYNC = 0x4 MS_SYNCHRONOUS = 0x10 MS_UNBINDABLE = 0x20000 @@ -912,6 +965,7 @@ const ( NETLINK_DNRTMSG = 0xe NETLINK_DROP_MEMBERSHIP = 0x2 NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb NETLINK_FIB_LOOKUP = 0xa NETLINK_FIREWALL = 0x3 NETLINK_GENERIC = 0x10 @@ -930,6 +984,7 @@ const ( NETLINK_RX_RING = 0x6 NETLINK_SCSITRANSPORT = 0x12 NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 NETLINK_SOCK_DIAG = 0x4 NETLINK_TX_RING = 0x7 NETLINK_UNUSED = 0x1 @@ -952,8 +1007,10 @@ const ( NLMSG_NOOP = 0x1 NLMSG_OVERRUN = 0x4 NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 NLM_F_APPEND = 0x800 NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 NLM_F_CREATE = 0x400 NLM_F_DUMP = 0x300 NLM_F_DUMP_FILTERED = 0x20 @@ -962,6 +1019,7 @@ const ( NLM_F_EXCL = 0x200 NLM_F_MATCH = 0x200 NLM_F_MULTI = 0x2 + NLM_F_NONREC = 0x100 NLM_F_REPLACE = 0x100 NLM_F_REQUEST = 0x1 NLM_F_ROOT = 0x100 @@ -1010,6 +1068,7 @@ const ( PACKET_FANOUT_EBPF = 0x7 PACKET_FANOUT_FLAG_DEFRAG = 0x8000 PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 PACKET_FANOUT_HASH = 0x0 PACKET_FANOUT_LB = 0x1 PACKET_FANOUT_QM = 0x5 @@ -1054,6 +1113,16 @@ const ( PARMRK = 0x8 PARODD = 0x2000 PENDIN = 0x20000000 + PERF_EVENT_IOC_DISABLE = 0x20002401 + PERF_EVENT_IOC_ENABLE = 0x20002400 + PERF_EVENT_IOC_ID = 0x40082407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 + PERF_EVENT_IOC_PERIOD = 0x80082404 + PERF_EVENT_IOC_REFRESH = 0x20002402 + PERF_EVENT_IOC_RESET = 0x20002403 + PERF_EVENT_IOC_SET_BPF = 0x80042408 + PERF_EVENT_IOC_SET_FILTER = 0x80082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 PRIO_PGRP = 0x1 PRIO_PROCESS = 0x0 PRIO_USER = 0x2 @@ -1142,7 +1211,7 @@ const ( PR_SET_NO_NEW_PRIVS = 0x26 PR_SET_PDEATHSIG = 0x1 PR_SET_PTRACER = 0x59616d61 - PR_SET_PTRACER_ANY = -0x1 + PR_SET_PTRACER_ANY = 0xffffffffffffffff PR_SET_SECCOMP = 0x16 PR_SET_SECUREBITS = 0x1c PR_SET_THP_DISABLE = 0x29 @@ -1150,6 +1219,11 @@ const ( PR_SET_TIMING = 0xe PR_SET_TSC = 0x1a PR_SET_UNALIGN = 0x6 + PR_SVE_GET_VL = 0x33 + PR_SVE_SET_VL = 0x32 + PR_SVE_SET_VL_ONEXEC = 0x40000 + PR_SVE_VL_INHERIT = 0x20000 + PR_SVE_VL_LEN_MASK = 0xffff PR_TASK_PERF_EVENTS_DISABLE = 0x1f PR_TASK_PERF_EVENTS_ENABLE = 0x20 PR_TIMING_STATISTICAL = 0x0 @@ -1277,12 +1351,22 @@ const ( RLIMIT_CPU = 0x0 RLIMIT_DATA = 0x2 RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x8 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb RLIMIT_STACK = 0x3 - RLIM_INFINITY = -0x1 + RLIM_INFINITY = 0xffffffffffffffff RTAX_ADVMSS = 0x8 RTAX_CC_ALGO = 0x10 RTAX_CWND = 0x7 + RTAX_FASTOPEN_NO_COOKIE = 0x11 RTAX_FEATURES = 0xc RTAX_FEATURE_ALLFRAG = 0x8 RTAX_FEATURE_ECN = 0x1 @@ -1293,7 +1377,7 @@ const ( RTAX_INITCWND = 0xb RTAX_INITRWND = 0xe RTAX_LOCK = 0x1 - RTAX_MAX = 0x10 + RTAX_MAX = 0x11 RTAX_MTU = 0x2 RTAX_QUICKACK = 0xf RTAX_REORDERING = 0x9 @@ -1304,7 +1388,7 @@ const ( RTAX_UNSPEC = 0x0 RTAX_WINDOW = 0x3 RTA_ALIGNTO = 0x4 - RTA_MAX = 0x19 + RTA_MAX = 0x1a RTCF_DIRECTSRC = 0x4000000 RTCF_DOREDIRECT = 0x1000000 RTCF_LOG = 0x2000000 @@ -1348,6 +1432,7 @@ const ( RTM_DELLINK = 0x11 RTM_DELMDB = 0x55 RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 RTM_DELNSID = 0x59 RTM_DELQDISC = 0x25 RTM_DELROUTE = 0x19 @@ -1356,6 +1441,7 @@ const ( RTM_DELTFILTER = 0x2d RTM_F_CLONED = 0x200 RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 RTM_F_LOOKUP_TABLE = 0x1000 RTM_F_NOTIFY = 0x100 RTM_F_PREFIX = 0x800 @@ -1377,10 +1463,11 @@ const ( RTM_GETSTATS = 0x5e RTM_GETTCLASS = 0x2a RTM_GETTFILTER = 0x2e - RTM_MAX = 0x5f + RTM_MAX = 0x63 RTM_NEWACTION = 0x30 RTM_NEWADDR = 0x14 RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 RTM_NEWLINK = 0x10 RTM_NEWMDB = 0x54 RTM_NEWNDUSEROPT = 0x44 @@ -1395,8 +1482,8 @@ const ( RTM_NEWSTATS = 0x5c RTM_NEWTCLASS = 0x28 RTM_NEWTFILTER = 0x2c - RTM_NR_FAMILIES = 0x14 - RTM_NR_MSGTYPES = 0x50 + RTM_NR_FAMILIES = 0x15 + RTM_NR_MSGTYPES = 0x54 RTM_SETDCB = 0x4f RTM_SETLINK = 0x13 RTM_SETNEIGHTBL = 0x43 @@ -1407,6 +1494,7 @@ const ( RTNH_F_OFFLOAD = 0x8 RTNH_F_ONLINK = 0x4 RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 RTN_MAX = 0xb RTPROT_BABEL = 0x2a RTPROT_BIRD = 0xc @@ -1437,8 +1525,12 @@ const ( SCM_TIMESTAMP = 0x1d SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 @@ -1446,6 +1538,16 @@ const ( SIOCADDMULTI = 0x8931 SIOCADDRT = 0x890b SIOCATMARK = 0x8905 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 SIOCDARP = 0x8953 SIOCDELDLCI = 0x8981 SIOCDELMULTI = 0x8932 @@ -1453,7 +1555,9 @@ const ( SIOCDEVPRIVATE = 0x89f0 SIOCDIFADDR = 0x8936 SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 SIOCGIFADDR = 0x8915 SIOCGIFBR = 0x8940 SIOCGIFBRDADDR = 0x8919 @@ -1473,13 +1577,21 @@ const ( SIOCGIFPFLAGS = 0x8935 SIOCGIFSLAVE = 0x8929 SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 SIOCGPGRP = 0x8904 SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c SIOCGSTAMP = 0x8906 SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x4004667f + SIOCOUTQ = 0x40047473 + SIOCOUTQNSD = 0x894b SIOCPROTOPRIVATE = 0x89e0 SIOCRTMSG = 0x890d SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 SIOCSIFADDR = 0x8916 SIOCSIFBR = 0x8941 SIOCSIFBRDADDR = 0x891a @@ -1498,11 +1610,15 @@ const ( SIOCSIFPFLAGS = 0x8934 SIOCSIFSLAVE = 0x8930 SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 SIOCSPGRP = 0x8902 SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a SOCK_CLOEXEC = 0x80000 SOCK_DCCP = 0x6 SOCK_DGRAM = 0x2 + SOCK_IOC_TYPE = 0x89 SOCK_NONBLOCK = 0x800 SOCK_PACKET = 0xa SOCK_RAW = 0x3 @@ -1535,6 +1651,7 @@ const ( SOL_SOCKET = 0x1 SOL_TCP = 0x6 SOL_TIPC = 0x10f + SOL_TLS = 0x11a SOL_X25 = 0x106 SOMAXCONN = 0x80 SO_ACCEPTCONN = 0x1e @@ -1548,6 +1665,7 @@ const ( SO_BSDCOMPAT = 0xe SO_BUSY_POLL = 0x2e SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 SO_DEBUG = 0x1 SO_DETACH_BPF = 0x1b SO_DETACH_FILTER = 0x1b @@ -1556,11 +1674,13 @@ const ( SO_ERROR = 0x4 SO_GET_FILTER = 0x1a SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 SO_KEEPALIVE = 0x9 SO_LINGER = 0xd SO_LOCK_FILTER = 0x2c SO_MARK = 0x24 SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 SO_NOFCS = 0x2b SO_NO_CHECK = 0xb SO_OOBINLINE = 0xa @@ -1568,6 +1688,7 @@ const ( SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x15 + SO_PEERGROUPS = 0x3b SO_PEERNAME = 0x1c SO_PEERSEC = 0x1f SO_PRIORITY = 0xc @@ -1599,10 +1720,32 @@ const ( SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 SO_VM_SOCKETS_TRUSTED = 0x5 SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c SPLICE_F_GIFT = 0x8 SPLICE_F_MORE = 0x4 SPLICE_F_MOVE = 0x1 SPLICE_F_NONBLOCK = 0x2 + STATX_ALL = 0xfff + STATX_ATIME = 0x20 + STATX_ATTR_APPEND = 0x20 + STATX_ATTR_AUTOMOUNT = 0x1000 + STATX_ATTR_COMPRESSED = 0x4 + STATX_ATTR_ENCRYPTED = 0x800 + STATX_ATTR_IMMUTABLE = 0x10 + STATX_ATTR_NODUMP = 0x40 + STATX_BASIC_STATS = 0x7ff + STATX_BLOCKS = 0x400 + STATX_BTIME = 0x800 + STATX_CTIME = 0x80 + STATX_GID = 0x10 + STATX_INO = 0x100 + STATX_MODE = 0x2 + STATX_MTIME = 0x40 + STATX_NLINK = 0x4 + STATX_SIZE = 0x200 + STATX_TYPE = 0x1 + STATX_UID = 0x8 + STATX__RESERVED = 0x80000000 S_BLKSIZE = 0x200 S_IEXEC = 0x40 S_IFBLK = 0x6000 @@ -1635,6 +1778,12 @@ const ( TAB2 = 0x800 TAB3 = 0xc00 TABDLY = 0xc00 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 TCFLSH = 0x2000741f TCGETA = 0x40147417 TCGETS = 0x402c7413 @@ -1656,6 +1805,7 @@ const ( TCP_CORK = 0x3 TCP_DEFER_ACCEPT = 0x9 TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e TCP_INFO = 0xb TCP_KEEPCNT = 0x6 TCP_KEEPIDLE = 0x4 @@ -1665,6 +1815,8 @@ const ( TCP_MAXWIN = 0xffff TCP_MAX_WINSHIFT = 0xe TCP_MD5SIG = 0xe + TCP_MD5SIG_EXT = 0x20 + TCP_MD5SIG_FLAG_PREFIX = 0x1 TCP_MD5SIG_MAXKEYLEN = 0x50 TCP_MSS = 0x200 TCP_MSS_DEFAULT = 0x218 @@ -1685,6 +1837,7 @@ const ( TCP_THIN_DUPACK = 0x11 TCP_THIN_LINEAR_TIMEOUTS = 0x10 TCP_TIMESTAMP = 0x18 + TCP_ULP = 0x1f TCP_USER_TIMEOUT = 0x12 TCP_WINDOW_CLAMP = 0xa TCSAFLUSH = 0x2 @@ -1712,6 +1865,7 @@ const ( TIOCGPKT = 0x40045438 TIOCGPTLCK = 0x40045439 TIOCGPTN = 0x40045430 + TIOCGPTPEER = 0x20005441 TIOCGRS485 = 0x542e TIOCGSERIAL = 0x541e TIOCGSID = 0x5429 @@ -1778,6 +1932,7 @@ const ( TIOCSWINSZ = 0x80087467 TIOCVHANGUP = 0x5437 TOSTOP = 0x400000 + TS_COMM_LEN = 0x20 TUNATTACHFILTER = 0x801054d5 TUNDETACHFILTER = 0x801054d6 TUNGETFEATURES = 0x400454cf @@ -1802,6 +1957,9 @@ const ( TUNSETVNETBE = 0x800454de TUNSETVNETHDRSZ = 0x800454d8 TUNSETVNETLE = 0x800454dc + UMOUNT_NOFOLLOW = 0x8 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe VDISCARD = 0x10 VEOF = 0x4 VEOL = 0x6 @@ -1831,6 +1989,17 @@ const ( WALL = 0x40000000 WCLONE = 0x80000000 WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x40045702 + WDIOC_GETPRETIMEOUT = 0x40045709 + WDIOC_GETSTATUS = 0x40045701 + WDIOC_GETSUPPORT = 0x40285700 + WDIOC_GETTEMP = 0x40045703 + WDIOC_GETTIMELEFT = 0x4004570a + WDIOC_GETTIMEOUT = 0x40045707 + WDIOC_KEEPALIVE = 0x40045705 + WDIOC_SETOPTIONS = 0x40045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 WEXITED = 0x4 WNOHANG = 0x1 WNOTHREAD = 0x20000000 @@ -1838,6 +2007,8 @@ const ( WORDSIZE = 0x40 WSTOPPED = 0x2 WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 XCASE = 0x4000 XTABS = 0xc00 ) @@ -2009,7 +2180,6 @@ const ( SIGTSTP = syscall.Signal(0x14) SIGTTIN = syscall.Signal(0x15) SIGTTOU = syscall.Signal(0x16) - SIGUNUSED = syscall.Signal(0x1f) SIGURG = syscall.Signal(0x17) SIGUSR1 = syscall.Signal(0xa) SIGUSR2 = syscall.Signal(0xc) 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 e946a24..26afbb8 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go @@ -36,7 +36,7 @@ const ( AF_KEY = 0xf AF_LLC = 0x1a AF_LOCAL = 0x1 - AF_MAX = 0x2b + AF_MAX = 0x2c AF_MPLS = 0x1c AF_NETBEUI = 0xd AF_NETLINK = 0x10 @@ -51,6 +51,7 @@ const ( AF_ROUTE = 0x10 AF_RXRPC = 0x21 AF_SECURITY = 0xe + AF_SMC = 0x2b AF_SNA = 0x16 AF_TIPC = 0x1e AF_UNIX = 0x1 @@ -120,6 +121,7 @@ const ( ARPHRD_PPP = 0x200 ARPHRD_PRONET = 0x4 ARPHRD_RAWHDLC = 0x206 + ARPHRD_RAWIP = 0x207 ARPHRD_ROSE = 0x10e ARPHRD_RSRVD = 0x104 ARPHRD_SIT = 0x308 @@ -129,6 +131,7 @@ const ( ARPHRD_TUNNEL = 0x300 ARPHRD_TUNNEL6 = 0x301 ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a ARPHRD_X25 = 0x10f B0 = 0x0 B1000000 = 0x17 @@ -325,6 +328,9 @@ const ( ECHOKE = 0x1 ECHONL = 0x10 ECHOPRT = 0x20 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EFD_SEMAPHORE = 0x1 ENCODING_DEFAULT = 0x0 ENCODING_FM_MARK = 0x3 ENCODING_FM_SPACE = 0x4 @@ -385,13 +391,16 @@ const ( ETH_P_DSA = 0x1b ETH_P_ECONET = 0x18 ETH_P_EDSA = 0xdada + ETH_P_ERSPAN = 0x88be ETH_P_FCOE = 0x8906 ETH_P_FIP = 0x8914 ETH_P_HDLC = 0x19 ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 ETH_P_IEEE802154 = 0xf6 ETH_P_IEEEPUP = 0xa00 ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IFE = 0xed3e ETH_P_IP = 0x800 ETH_P_IPV6 = 0x86dd ETH_P_IPX = 0x8137 @@ -402,11 +411,13 @@ const ( ETH_P_LOOP = 0x60 ETH_P_LOOPBACK = 0x9000 ETH_P_MACSEC = 0x88e5 + ETH_P_MAP = 0xf9 ETH_P_MOBITEX = 0x15 ETH_P_MPLS_MC = 0x8848 ETH_P_MPLS_UC = 0x8847 ETH_P_MVRP = 0x88f5 ETH_P_NCSI = 0x88f8 + ETH_P_NSH = 0x894f ETH_P_PAE = 0x888e ETH_P_PAUSE = 0x8808 ETH_P_PHONET = 0xf5 @@ -450,6 +461,8 @@ const ( FF1 = 0x4000 FFDLY = 0x4000 FLUSHO = 0x800000 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 @@ -468,6 +481,7 @@ const ( FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 FS_POLICY_FLAGS_VALID = 0x3 + F_ADD_SEALS = 0x409 F_DUPFD = 0x0 F_DUPFD_CLOEXEC = 0x406 F_EXLCK = 0x4 @@ -480,6 +494,9 @@ const ( F_GETOWN_EX = 0x10 F_GETPIPE_SZ = 0x408 F_GETSIG = 0xb + F_GET_FILE_RW_HINT = 0x40d + F_GET_RW_HINT = 0x40b + F_GET_SEALS = 0x40a F_LOCK = 0x1 F_NOTIFY = 0x402 F_OFD_GETLK = 0x24 @@ -487,6 +504,10 @@ const ( F_OFD_SETLKW = 0x26 F_OK = 0x0 F_RDLCK = 0x0 + F_SEAL_GROW = 0x4 + F_SEAL_SEAL = 0x1 + F_SEAL_SHRINK = 0x2 + F_SEAL_WRITE = 0x8 F_SETFD = 0x2 F_SETFL = 0x4 F_SETLEASE = 0x400 @@ -498,12 +519,27 @@ const ( F_SETOWN_EX = 0xf F_SETPIPE_SZ = 0x407 F_SETSIG = 0xa + F_SET_FILE_RW_HINT = 0x40e + F_SET_RW_HINT = 0x40c F_SHLCK = 0x8 F_TEST = 0x3 F_TLOCK = 0x2 F_ULOCK = 0x0 F_UNLCK = 0x2 F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 GRND_NONBLOCK = 0x1 GRND_RANDOM = 0x2 HUPCL = 0x4000 @@ -540,6 +576,8 @@ const ( IFF_MASTER = 0x400 IFF_MULTICAST = 0x1000 IFF_MULTI_QUEUE = 0x100 + IFF_NAPI = 0x10 + IFF_NAPI_FRAGS = 0x20 IFF_NOARP = 0x80 IFF_NOFILTER = 0x1000 IFF_NOTRAILERS = 0x20 @@ -602,6 +640,7 @@ const ( IN_OPEN = 0x20 IN_Q_OVERFLOW = 0x4000 IN_UNMOUNT = 0x2000 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 IPPROTO_AH = 0x33 IPPROTO_BEETPH = 0x5e IPPROTO_COMP = 0x6c @@ -641,8 +680,10 @@ const ( IPV6_2292PKTOPTIONS = 0x6 IPV6_2292RTHDR = 0x5 IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 IPV6_ADD_MEMBERSHIP = 0x14 IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 IPV6_CHECKSUM = 0x7 IPV6_DONTFRAG = 0x3e IPV6_DROP_MEMBERSHIP = 0x15 @@ -655,12 +696,14 @@ const ( IPV6_JOIN_GROUP = 0x14 IPV6_LEAVE_ANYCAST = 0x1c IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 IPV6_MTU = 0x18 IPV6_MTU_DISCOVER = 0x17 IPV6_MULTICAST_HOPS = 0x12 IPV6_MULTICAST_IF = 0x11 IPV6_MULTICAST_LOOP = 0x13 IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a IPV6_PATHMTU = 0x3d IPV6_PKTINFO = 0x32 IPV6_PMTUDISC_DO = 0x2 @@ -671,8 +714,10 @@ const ( IPV6_PMTUDISC_WANT = 0x1 IPV6_RECVDSTOPTS = 0x3a IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d IPV6_RECVHOPLIMIT = 0x33 IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a IPV6_RECVPATHMTU = 0x3c IPV6_RECVPKTINFO = 0x31 IPV6_RECVRTHDR = 0x38 @@ -686,7 +731,9 @@ const ( IPV6_RXDSTOPTS = 0x3b IPV6_RXHOPOPTS = 0x36 IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c IPV6_V6ONLY = 0x1a IPV6_XFRM_POLICY = 0x23 IP_ADD_MEMBERSHIP = 0x23 @@ -729,6 +776,7 @@ const ( IP_PMTUDISC_PROBE = 0x3 IP_PMTUDISC_WANT = 0x1 IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 IP_RECVOPTS = 0x6 IP_RECVORIGDSTADDR = 0x14 IP_RECVRETOPTS = 0x7 @@ -766,6 +814,7 @@ const ( KEYCTL_NEGATE = 0xd KEYCTL_READ = 0xb KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d KEYCTL_REVOKE = 0x3 KEYCTL_SEARCH = 0xa KEYCTL_SESSION_TO_PARENT = 0x12 @@ -813,6 +862,7 @@ const ( MADV_FREE = 0x8 MADV_HUGEPAGE = 0xe MADV_HWPOISON = 0x64 + MADV_KEEPONFORK = 0x13 MADV_MERGEABLE = 0xc MADV_NOHUGEPAGE = 0xf MADV_NORMAL = 0x0 @@ -821,6 +871,7 @@ const ( MADV_SEQUENTIAL = 0x2 MADV_UNMERGEABLE = 0xd MADV_WILLNEED = 0x3 + MADV_WIPEONFORK = 0x12 MAP_ANON = 0x20 MAP_ANONYMOUS = 0x20 MAP_DENYWRITE = 0x800 @@ -866,6 +917,7 @@ const ( MSG_TRYHARD = 0x4 MSG_WAITALL = 0x100 MSG_WAITFORONE = 0x10000 + MSG_ZEROCOPY = 0x4000000 MS_ACTIVE = 0x40000000 MS_ASYNC = 0x1 MS_BIND = 0x1000 @@ -898,6 +950,7 @@ const ( MS_SILENT = 0x8000 MS_SLAVE = 0x80000 MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 MS_SYNC = 0x4 MS_SYNCHRONOUS = 0x10 MS_UNBINDABLE = 0x20000 @@ -912,6 +965,7 @@ const ( NETLINK_DNRTMSG = 0xe NETLINK_DROP_MEMBERSHIP = 0x2 NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb NETLINK_FIB_LOOKUP = 0xa NETLINK_FIREWALL = 0x3 NETLINK_GENERIC = 0x10 @@ -930,6 +984,7 @@ const ( NETLINK_RX_RING = 0x6 NETLINK_SCSITRANSPORT = 0x12 NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 NETLINK_SOCK_DIAG = 0x4 NETLINK_TX_RING = 0x7 NETLINK_UNUSED = 0x1 @@ -952,8 +1007,10 @@ const ( NLMSG_NOOP = 0x1 NLMSG_OVERRUN = 0x4 NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 NLM_F_APPEND = 0x800 NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 NLM_F_CREATE = 0x400 NLM_F_DUMP = 0x300 NLM_F_DUMP_FILTERED = 0x20 @@ -962,6 +1019,7 @@ const ( NLM_F_EXCL = 0x200 NLM_F_MATCH = 0x200 NLM_F_MULTI = 0x2 + NLM_F_NONREC = 0x100 NLM_F_REPLACE = 0x100 NLM_F_REQUEST = 0x1 NLM_F_ROOT = 0x100 @@ -1010,6 +1068,7 @@ const ( PACKET_FANOUT_EBPF = 0x7 PACKET_FANOUT_FLAG_DEFRAG = 0x8000 PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 PACKET_FANOUT_HASH = 0x0 PACKET_FANOUT_LB = 0x1 PACKET_FANOUT_QM = 0x5 @@ -1054,6 +1113,16 @@ const ( PARMRK = 0x8 PARODD = 0x2000 PENDIN = 0x20000000 + PERF_EVENT_IOC_DISABLE = 0x20002401 + PERF_EVENT_IOC_ENABLE = 0x20002400 + PERF_EVENT_IOC_ID = 0x40082407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 + PERF_EVENT_IOC_PERIOD = 0x80082404 + PERF_EVENT_IOC_REFRESH = 0x20002402 + PERF_EVENT_IOC_RESET = 0x20002403 + PERF_EVENT_IOC_SET_BPF = 0x80042408 + PERF_EVENT_IOC_SET_FILTER = 0x80082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 PRIO_PGRP = 0x1 PRIO_PROCESS = 0x0 PRIO_USER = 0x2 @@ -1142,7 +1211,7 @@ const ( PR_SET_NO_NEW_PRIVS = 0x26 PR_SET_PDEATHSIG = 0x1 PR_SET_PTRACER = 0x59616d61 - PR_SET_PTRACER_ANY = -0x1 + PR_SET_PTRACER_ANY = 0xffffffffffffffff PR_SET_SECCOMP = 0x16 PR_SET_SECUREBITS = 0x1c PR_SET_THP_DISABLE = 0x29 @@ -1150,6 +1219,11 @@ const ( PR_SET_TIMING = 0xe PR_SET_TSC = 0x1a PR_SET_UNALIGN = 0x6 + PR_SVE_GET_VL = 0x33 + PR_SVE_SET_VL = 0x32 + PR_SVE_SET_VL_ONEXEC = 0x40000 + PR_SVE_VL_INHERIT = 0x20000 + PR_SVE_VL_LEN_MASK = 0xffff PR_TASK_PERF_EVENTS_DISABLE = 0x1f PR_TASK_PERF_EVENTS_ENABLE = 0x20 PR_TIMING_STATISTICAL = 0x0 @@ -1277,12 +1351,22 @@ const ( RLIMIT_CPU = 0x0 RLIMIT_DATA = 0x2 RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x8 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb RLIMIT_STACK = 0x3 - RLIM_INFINITY = -0x1 + RLIM_INFINITY = 0xffffffffffffffff RTAX_ADVMSS = 0x8 RTAX_CC_ALGO = 0x10 RTAX_CWND = 0x7 + RTAX_FASTOPEN_NO_COOKIE = 0x11 RTAX_FEATURES = 0xc RTAX_FEATURE_ALLFRAG = 0x8 RTAX_FEATURE_ECN = 0x1 @@ -1293,7 +1377,7 @@ const ( RTAX_INITCWND = 0xb RTAX_INITRWND = 0xe RTAX_LOCK = 0x1 - RTAX_MAX = 0x10 + RTAX_MAX = 0x11 RTAX_MTU = 0x2 RTAX_QUICKACK = 0xf RTAX_REORDERING = 0x9 @@ -1304,7 +1388,7 @@ const ( RTAX_UNSPEC = 0x0 RTAX_WINDOW = 0x3 RTA_ALIGNTO = 0x4 - RTA_MAX = 0x19 + RTA_MAX = 0x1a RTCF_DIRECTSRC = 0x4000000 RTCF_DOREDIRECT = 0x1000000 RTCF_LOG = 0x2000000 @@ -1348,6 +1432,7 @@ const ( RTM_DELLINK = 0x11 RTM_DELMDB = 0x55 RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 RTM_DELNSID = 0x59 RTM_DELQDISC = 0x25 RTM_DELROUTE = 0x19 @@ -1356,6 +1441,7 @@ const ( RTM_DELTFILTER = 0x2d RTM_F_CLONED = 0x200 RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 RTM_F_LOOKUP_TABLE = 0x1000 RTM_F_NOTIFY = 0x100 RTM_F_PREFIX = 0x800 @@ -1377,10 +1463,11 @@ const ( RTM_GETSTATS = 0x5e RTM_GETTCLASS = 0x2a RTM_GETTFILTER = 0x2e - RTM_MAX = 0x5f + RTM_MAX = 0x63 RTM_NEWACTION = 0x30 RTM_NEWADDR = 0x14 RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 RTM_NEWLINK = 0x10 RTM_NEWMDB = 0x54 RTM_NEWNDUSEROPT = 0x44 @@ -1395,8 +1482,8 @@ const ( RTM_NEWSTATS = 0x5c RTM_NEWTCLASS = 0x28 RTM_NEWTFILTER = 0x2c - RTM_NR_FAMILIES = 0x14 - RTM_NR_MSGTYPES = 0x50 + RTM_NR_FAMILIES = 0x15 + RTM_NR_MSGTYPES = 0x54 RTM_SETDCB = 0x4f RTM_SETLINK = 0x13 RTM_SETNEIGHTBL = 0x43 @@ -1407,6 +1494,7 @@ const ( RTNH_F_OFFLOAD = 0x8 RTNH_F_ONLINK = 0x4 RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 RTN_MAX = 0xb RTPROT_BABEL = 0x2a RTPROT_BIRD = 0xc @@ -1437,8 +1525,12 @@ const ( SCM_TIMESTAMP = 0x1d SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 @@ -1446,6 +1538,16 @@ const ( SIOCADDMULTI = 0x8931 SIOCADDRT = 0x890b SIOCATMARK = 0x8905 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 SIOCDARP = 0x8953 SIOCDELDLCI = 0x8981 SIOCDELMULTI = 0x8932 @@ -1453,7 +1555,9 @@ const ( SIOCDEVPRIVATE = 0x89f0 SIOCDIFADDR = 0x8936 SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 SIOCGIFADDR = 0x8915 SIOCGIFBR = 0x8940 SIOCGIFBRDADDR = 0x8919 @@ -1473,13 +1577,21 @@ const ( SIOCGIFPFLAGS = 0x8935 SIOCGIFSLAVE = 0x8929 SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 SIOCGPGRP = 0x8904 SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c SIOCGSTAMP = 0x8906 SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x4004667f + SIOCOUTQ = 0x40047473 + SIOCOUTQNSD = 0x894b SIOCPROTOPRIVATE = 0x89e0 SIOCRTMSG = 0x890d SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 SIOCSIFADDR = 0x8916 SIOCSIFBR = 0x8941 SIOCSIFBRDADDR = 0x891a @@ -1498,11 +1610,15 @@ const ( SIOCSIFPFLAGS = 0x8934 SIOCSIFSLAVE = 0x8930 SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 SIOCSPGRP = 0x8902 SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a SOCK_CLOEXEC = 0x80000 SOCK_DCCP = 0x6 SOCK_DGRAM = 0x2 + SOCK_IOC_TYPE = 0x89 SOCK_NONBLOCK = 0x800 SOCK_PACKET = 0xa SOCK_RAW = 0x3 @@ -1535,6 +1651,7 @@ const ( SOL_SOCKET = 0x1 SOL_TCP = 0x6 SOL_TIPC = 0x10f + SOL_TLS = 0x11a SOL_X25 = 0x106 SOMAXCONN = 0x80 SO_ACCEPTCONN = 0x1e @@ -1548,6 +1665,7 @@ const ( SO_BSDCOMPAT = 0xe SO_BUSY_POLL = 0x2e SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 SO_DEBUG = 0x1 SO_DETACH_BPF = 0x1b SO_DETACH_FILTER = 0x1b @@ -1556,11 +1674,13 @@ const ( SO_ERROR = 0x4 SO_GET_FILTER = 0x1a SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 SO_KEEPALIVE = 0x9 SO_LINGER = 0xd SO_LOCK_FILTER = 0x2c SO_MARK = 0x24 SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 SO_NOFCS = 0x2b SO_NO_CHECK = 0xb SO_OOBINLINE = 0xa @@ -1568,6 +1688,7 @@ const ( SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x15 + SO_PEERGROUPS = 0x3b SO_PEERNAME = 0x1c SO_PEERSEC = 0x1f SO_PRIORITY = 0xc @@ -1599,10 +1720,32 @@ const ( SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 SO_VM_SOCKETS_TRUSTED = 0x5 SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c SPLICE_F_GIFT = 0x8 SPLICE_F_MORE = 0x4 SPLICE_F_MOVE = 0x1 SPLICE_F_NONBLOCK = 0x2 + STATX_ALL = 0xfff + STATX_ATIME = 0x20 + STATX_ATTR_APPEND = 0x20 + STATX_ATTR_AUTOMOUNT = 0x1000 + STATX_ATTR_COMPRESSED = 0x4 + STATX_ATTR_ENCRYPTED = 0x800 + STATX_ATTR_IMMUTABLE = 0x10 + STATX_ATTR_NODUMP = 0x40 + STATX_BASIC_STATS = 0x7ff + STATX_BLOCKS = 0x400 + STATX_BTIME = 0x800 + STATX_CTIME = 0x80 + STATX_GID = 0x10 + STATX_INO = 0x100 + STATX_MODE = 0x2 + STATX_MTIME = 0x40 + STATX_NLINK = 0x4 + STATX_SIZE = 0x200 + STATX_TYPE = 0x1 + STATX_UID = 0x8 + STATX__RESERVED = 0x80000000 S_BLKSIZE = 0x200 S_IEXEC = 0x40 S_IFBLK = 0x6000 @@ -1635,6 +1778,12 @@ const ( TAB2 = 0x800 TAB3 = 0xc00 TABDLY = 0xc00 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 TCFLSH = 0x2000741f TCGETA = 0x40147417 TCGETS = 0x402c7413 @@ -1656,6 +1805,7 @@ const ( TCP_CORK = 0x3 TCP_DEFER_ACCEPT = 0x9 TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e TCP_INFO = 0xb TCP_KEEPCNT = 0x6 TCP_KEEPIDLE = 0x4 @@ -1665,6 +1815,8 @@ const ( TCP_MAXWIN = 0xffff TCP_MAX_WINSHIFT = 0xe TCP_MD5SIG = 0xe + TCP_MD5SIG_EXT = 0x20 + TCP_MD5SIG_FLAG_PREFIX = 0x1 TCP_MD5SIG_MAXKEYLEN = 0x50 TCP_MSS = 0x200 TCP_MSS_DEFAULT = 0x218 @@ -1685,6 +1837,7 @@ const ( TCP_THIN_DUPACK = 0x11 TCP_THIN_LINEAR_TIMEOUTS = 0x10 TCP_TIMESTAMP = 0x18 + TCP_ULP = 0x1f TCP_USER_TIMEOUT = 0x12 TCP_WINDOW_CLAMP = 0xa TCSAFLUSH = 0x2 @@ -1712,6 +1865,7 @@ const ( TIOCGPKT = 0x40045438 TIOCGPTLCK = 0x40045439 TIOCGPTN = 0x40045430 + TIOCGPTPEER = 0x20005441 TIOCGRS485 = 0x542e TIOCGSERIAL = 0x541e TIOCGSID = 0x5429 @@ -1778,6 +1932,7 @@ const ( TIOCSWINSZ = 0x80087467 TIOCVHANGUP = 0x5437 TOSTOP = 0x400000 + TS_COMM_LEN = 0x20 TUNATTACHFILTER = 0x801054d5 TUNDETACHFILTER = 0x801054d6 TUNGETFEATURES = 0x400454cf @@ -1802,6 +1957,9 @@ const ( TUNSETVNETBE = 0x800454de TUNSETVNETHDRSZ = 0x800454d8 TUNSETVNETLE = 0x800454dc + UMOUNT_NOFOLLOW = 0x8 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe VDISCARD = 0x10 VEOF = 0x4 VEOL = 0x6 @@ -1831,6 +1989,17 @@ const ( WALL = 0x40000000 WCLONE = 0x80000000 WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x40045702 + WDIOC_GETPRETIMEOUT = 0x40045709 + WDIOC_GETSTATUS = 0x40045701 + WDIOC_GETSUPPORT = 0x40285700 + WDIOC_GETTEMP = 0x40045703 + WDIOC_GETTIMELEFT = 0x4004570a + WDIOC_GETTIMEOUT = 0x40045707 + WDIOC_KEEPALIVE = 0x40045705 + WDIOC_SETOPTIONS = 0x40045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 WEXITED = 0x4 WNOHANG = 0x1 WNOTHREAD = 0x20000000 @@ -1838,6 +2007,8 @@ const ( WORDSIZE = 0x40 WSTOPPED = 0x2 WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 XCASE = 0x4000 XTABS = 0xc00 ) @@ -2009,7 +2180,6 @@ const ( SIGTSTP = syscall.Signal(0x14) SIGTTIN = syscall.Signal(0x15) SIGTTOU = syscall.Signal(0x16) - SIGUNUSED = syscall.Signal(0x1f) SIGURG = syscall.Signal(0x17) SIGUSR1 = syscall.Signal(0xa) SIGUSR2 = syscall.Signal(0xc) 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 4d14fd6..eeb9941 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go @@ -36,7 +36,7 @@ const ( AF_KEY = 0xf AF_LLC = 0x1a AF_LOCAL = 0x1 - AF_MAX = 0x2b + AF_MAX = 0x2c AF_MPLS = 0x1c AF_NETBEUI = 0xd AF_NETLINK = 0x10 @@ -51,6 +51,7 @@ const ( AF_ROUTE = 0x10 AF_RXRPC = 0x21 AF_SECURITY = 0xe + AF_SMC = 0x2b AF_SNA = 0x16 AF_TIPC = 0x1e AF_UNIX = 0x1 @@ -120,6 +121,7 @@ const ( ARPHRD_PPP = 0x200 ARPHRD_PRONET = 0x4 ARPHRD_RAWHDLC = 0x206 + ARPHRD_RAWIP = 0x207 ARPHRD_ROSE = 0x10e ARPHRD_RSRVD = 0x104 ARPHRD_SIT = 0x308 @@ -129,6 +131,7 @@ const ( ARPHRD_TUNNEL = 0x300 ARPHRD_TUNNEL6 = 0x301 ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a ARPHRD_X25 = 0x10f B0 = 0x0 B1000000 = 0x1008 @@ -325,6 +328,9 @@ const ( ECHOKE = 0x800 ECHONL = 0x40 ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EFD_SEMAPHORE = 0x1 ENCODING_DEFAULT = 0x0 ENCODING_FM_MARK = 0x3 ENCODING_FM_SPACE = 0x4 @@ -385,13 +391,16 @@ const ( ETH_P_DSA = 0x1b ETH_P_ECONET = 0x18 ETH_P_EDSA = 0xdada + ETH_P_ERSPAN = 0x88be ETH_P_FCOE = 0x8906 ETH_P_FIP = 0x8914 ETH_P_HDLC = 0x19 ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 ETH_P_IEEE802154 = 0xf6 ETH_P_IEEEPUP = 0xa00 ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IFE = 0xed3e ETH_P_IP = 0x800 ETH_P_IPV6 = 0x86dd ETH_P_IPX = 0x8137 @@ -402,11 +411,13 @@ const ( ETH_P_LOOP = 0x60 ETH_P_LOOPBACK = 0x9000 ETH_P_MACSEC = 0x88e5 + ETH_P_MAP = 0xf9 ETH_P_MOBITEX = 0x15 ETH_P_MPLS_MC = 0x8848 ETH_P_MPLS_UC = 0x8847 ETH_P_MVRP = 0x88f5 ETH_P_NCSI = 0x88f8 + ETH_P_NSH = 0x894f ETH_P_PAE = 0x888e ETH_P_PAUSE = 0x8808 ETH_P_PHONET = 0xf5 @@ -450,6 +461,8 @@ const ( FF1 = 0x8000 FFDLY = 0x8000 FLUSHO = 0x1000 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 @@ -468,6 +481,7 @@ const ( FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 FS_POLICY_FLAGS_VALID = 0x3 + F_ADD_SEALS = 0x409 F_DUPFD = 0x0 F_DUPFD_CLOEXEC = 0x406 F_EXLCK = 0x4 @@ -480,6 +494,9 @@ const ( F_GETOWN_EX = 0x10 F_GETPIPE_SZ = 0x408 F_GETSIG = 0xb + F_GET_FILE_RW_HINT = 0x40d + F_GET_RW_HINT = 0x40b + F_GET_SEALS = 0x40a F_LOCK = 0x1 F_NOTIFY = 0x402 F_OFD_GETLK = 0x24 @@ -487,6 +504,10 @@ const ( F_OFD_SETLKW = 0x26 F_OK = 0x0 F_RDLCK = 0x0 + F_SEAL_GROW = 0x4 + F_SEAL_SEAL = 0x1 + F_SEAL_SHRINK = 0x2 + F_SEAL_WRITE = 0x8 F_SETFD = 0x2 F_SETFL = 0x4 F_SETLEASE = 0x400 @@ -498,12 +519,27 @@ const ( F_SETOWN_EX = 0xf F_SETPIPE_SZ = 0x407 F_SETSIG = 0xa + F_SET_FILE_RW_HINT = 0x40e + F_SET_RW_HINT = 0x40c F_SHLCK = 0x8 F_TEST = 0x3 F_TLOCK = 0x2 F_ULOCK = 0x0 F_UNLCK = 0x2 F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 GRND_NONBLOCK = 0x1 GRND_RANDOM = 0x2 HUPCL = 0x400 @@ -540,6 +576,8 @@ const ( IFF_MASTER = 0x400 IFF_MULTICAST = 0x1000 IFF_MULTI_QUEUE = 0x100 + IFF_NAPI = 0x10 + IFF_NAPI_FRAGS = 0x20 IFF_NOARP = 0x80 IFF_NOFILTER = 0x1000 IFF_NOTRAILERS = 0x20 @@ -602,6 +640,7 @@ const ( IN_OPEN = 0x20 IN_Q_OVERFLOW = 0x4000 IN_UNMOUNT = 0x2000 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 IPPROTO_AH = 0x33 IPPROTO_BEETPH = 0x5e IPPROTO_COMP = 0x6c @@ -641,8 +680,10 @@ const ( IPV6_2292PKTOPTIONS = 0x6 IPV6_2292RTHDR = 0x5 IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 IPV6_ADD_MEMBERSHIP = 0x14 IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 IPV6_CHECKSUM = 0x7 IPV6_DONTFRAG = 0x3e IPV6_DROP_MEMBERSHIP = 0x15 @@ -655,12 +696,14 @@ const ( IPV6_JOIN_GROUP = 0x14 IPV6_LEAVE_ANYCAST = 0x1c IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 IPV6_MTU = 0x18 IPV6_MTU_DISCOVER = 0x17 IPV6_MULTICAST_HOPS = 0x12 IPV6_MULTICAST_IF = 0x11 IPV6_MULTICAST_LOOP = 0x13 IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a IPV6_PATHMTU = 0x3d IPV6_PKTINFO = 0x32 IPV6_PMTUDISC_DO = 0x2 @@ -671,8 +714,10 @@ const ( IPV6_PMTUDISC_WANT = 0x1 IPV6_RECVDSTOPTS = 0x3a IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d IPV6_RECVHOPLIMIT = 0x33 IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a IPV6_RECVPATHMTU = 0x3c IPV6_RECVPKTINFO = 0x31 IPV6_RECVRTHDR = 0x38 @@ -686,7 +731,9 @@ const ( IPV6_RXDSTOPTS = 0x3b IPV6_RXHOPOPTS = 0x36 IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c IPV6_V6ONLY = 0x1a IPV6_XFRM_POLICY = 0x23 IP_ADD_MEMBERSHIP = 0x23 @@ -729,6 +776,7 @@ const ( IP_PMTUDISC_PROBE = 0x3 IP_PMTUDISC_WANT = 0x1 IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 IP_RECVOPTS = 0x6 IP_RECVORIGDSTADDR = 0x14 IP_RECVRETOPTS = 0x7 @@ -766,6 +814,7 @@ const ( KEYCTL_NEGATE = 0xd KEYCTL_READ = 0xb KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d KEYCTL_REVOKE = 0x3 KEYCTL_SEARCH = 0xa KEYCTL_SESSION_TO_PARENT = 0x12 @@ -813,6 +862,7 @@ const ( MADV_FREE = 0x8 MADV_HUGEPAGE = 0xe MADV_HWPOISON = 0x64 + MADV_KEEPONFORK = 0x13 MADV_MERGEABLE = 0xc MADV_NOHUGEPAGE = 0xf MADV_NORMAL = 0x0 @@ -821,6 +871,7 @@ const ( MADV_SEQUENTIAL = 0x2 MADV_UNMERGEABLE = 0xd MADV_WILLNEED = 0x3 + MADV_WIPEONFORK = 0x12 MAP_ANON = 0x20 MAP_ANONYMOUS = 0x20 MAP_DENYWRITE = 0x800 @@ -866,6 +917,7 @@ const ( MSG_TRYHARD = 0x4 MSG_WAITALL = 0x100 MSG_WAITFORONE = 0x10000 + MSG_ZEROCOPY = 0x4000000 MS_ACTIVE = 0x40000000 MS_ASYNC = 0x1 MS_BIND = 0x1000 @@ -898,6 +950,7 @@ const ( MS_SILENT = 0x8000 MS_SLAVE = 0x80000 MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 MS_SYNC = 0x4 MS_SYNCHRONOUS = 0x10 MS_UNBINDABLE = 0x20000 @@ -912,6 +965,7 @@ const ( NETLINK_DNRTMSG = 0xe NETLINK_DROP_MEMBERSHIP = 0x2 NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb NETLINK_FIB_LOOKUP = 0xa NETLINK_FIREWALL = 0x3 NETLINK_GENERIC = 0x10 @@ -930,6 +984,7 @@ const ( NETLINK_RX_RING = 0x6 NETLINK_SCSITRANSPORT = 0x12 NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 NETLINK_SOCK_DIAG = 0x4 NETLINK_TX_RING = 0x7 NETLINK_UNUSED = 0x1 @@ -950,8 +1005,10 @@ const ( NLMSG_NOOP = 0x1 NLMSG_OVERRUN = 0x4 NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 NLM_F_APPEND = 0x800 NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 NLM_F_CREATE = 0x400 NLM_F_DUMP = 0x300 NLM_F_DUMP_FILTERED = 0x20 @@ -960,6 +1017,7 @@ const ( NLM_F_EXCL = 0x200 NLM_F_MATCH = 0x200 NLM_F_MULTI = 0x2 + NLM_F_NONREC = 0x100 NLM_F_REPLACE = 0x100 NLM_F_REQUEST = 0x1 NLM_F_ROOT = 0x100 @@ -1008,6 +1066,7 @@ const ( PACKET_FANOUT_EBPF = 0x7 PACKET_FANOUT_FLAG_DEFRAG = 0x8000 PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 PACKET_FANOUT_HASH = 0x0 PACKET_FANOUT_LB = 0x1 PACKET_FANOUT_QM = 0x5 @@ -1052,6 +1111,16 @@ const ( PARMRK = 0x8 PARODD = 0x200 PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x2401 + PERF_EVENT_IOC_ENABLE = 0x2400 + PERF_EVENT_IOC_ID = 0x80082407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 + PERF_EVENT_IOC_PERIOD = 0x40082404 + PERF_EVENT_IOC_REFRESH = 0x2402 + PERF_EVENT_IOC_RESET = 0x2403 + PERF_EVENT_IOC_SET_BPF = 0x40042408 + PERF_EVENT_IOC_SET_FILTER = 0x40082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x2405 PRIO_PGRP = 0x1 PRIO_PROCESS = 0x0 PRIO_USER = 0x2 @@ -1139,7 +1208,7 @@ const ( PR_SET_NO_NEW_PRIVS = 0x26 PR_SET_PDEATHSIG = 0x1 PR_SET_PTRACER = 0x59616d61 - PR_SET_PTRACER_ANY = -0x1 + PR_SET_PTRACER_ANY = 0xffffffffffffffff PR_SET_SECCOMP = 0x16 PR_SET_SECUREBITS = 0x1c PR_SET_THP_DISABLE = 0x29 @@ -1147,6 +1216,11 @@ const ( PR_SET_TIMING = 0xe PR_SET_TSC = 0x1a PR_SET_UNALIGN = 0x6 + PR_SVE_GET_VL = 0x33 + PR_SVE_SET_VL = 0x32 + PR_SVE_SET_VL_ONEXEC = 0x40000 + PR_SVE_VL_INHERIT = 0x20000 + PR_SVE_VL_LEN_MASK = 0xffff PR_TASK_PERF_EVENTS_DISABLE = 0x1f PR_TASK_PERF_EVENTS_ENABLE = 0x20 PR_TIMING_STATISTICAL = 0x0 @@ -1281,12 +1355,22 @@ const ( RLIMIT_CPU = 0x0 RLIMIT_DATA = 0x2 RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x8 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb RLIMIT_STACK = 0x3 - RLIM_INFINITY = -0x1 + RLIM_INFINITY = 0xffffffffffffffff RTAX_ADVMSS = 0x8 RTAX_CC_ALGO = 0x10 RTAX_CWND = 0x7 + RTAX_FASTOPEN_NO_COOKIE = 0x11 RTAX_FEATURES = 0xc RTAX_FEATURE_ALLFRAG = 0x8 RTAX_FEATURE_ECN = 0x1 @@ -1297,7 +1381,7 @@ const ( RTAX_INITCWND = 0xb RTAX_INITRWND = 0xe RTAX_LOCK = 0x1 - RTAX_MAX = 0x10 + RTAX_MAX = 0x11 RTAX_MTU = 0x2 RTAX_QUICKACK = 0xf RTAX_REORDERING = 0x9 @@ -1308,7 +1392,7 @@ const ( RTAX_UNSPEC = 0x0 RTAX_WINDOW = 0x3 RTA_ALIGNTO = 0x4 - RTA_MAX = 0x19 + RTA_MAX = 0x1a RTCF_DIRECTSRC = 0x4000000 RTCF_DOREDIRECT = 0x1000000 RTCF_LOG = 0x2000000 @@ -1352,6 +1436,7 @@ const ( RTM_DELLINK = 0x11 RTM_DELMDB = 0x55 RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 RTM_DELNSID = 0x59 RTM_DELQDISC = 0x25 RTM_DELROUTE = 0x19 @@ -1360,6 +1445,7 @@ const ( RTM_DELTFILTER = 0x2d RTM_F_CLONED = 0x200 RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 RTM_F_LOOKUP_TABLE = 0x1000 RTM_F_NOTIFY = 0x100 RTM_F_PREFIX = 0x800 @@ -1381,10 +1467,11 @@ const ( RTM_GETSTATS = 0x5e RTM_GETTCLASS = 0x2a RTM_GETTFILTER = 0x2e - RTM_MAX = 0x5f + RTM_MAX = 0x63 RTM_NEWACTION = 0x30 RTM_NEWADDR = 0x14 RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 RTM_NEWLINK = 0x10 RTM_NEWMDB = 0x54 RTM_NEWNDUSEROPT = 0x44 @@ -1399,8 +1486,8 @@ const ( RTM_NEWSTATS = 0x5c RTM_NEWTCLASS = 0x28 RTM_NEWTFILTER = 0x2c - RTM_NR_FAMILIES = 0x14 - RTM_NR_MSGTYPES = 0x50 + RTM_NR_FAMILIES = 0x15 + RTM_NR_MSGTYPES = 0x54 RTM_SETDCB = 0x4f RTM_SETLINK = 0x13 RTM_SETNEIGHTBL = 0x43 @@ -1411,6 +1498,7 @@ const ( RTNH_F_OFFLOAD = 0x8 RTNH_F_ONLINK = 0x4 RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 RTN_MAX = 0xb RTPROT_BABEL = 0x2a RTPROT_BIRD = 0xc @@ -1441,8 +1529,12 @@ const ( SCM_TIMESTAMP = 0x1d SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 @@ -1450,6 +1542,16 @@ const ( SIOCADDMULTI = 0x8931 SIOCADDRT = 0x890b SIOCATMARK = 0x8905 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 SIOCDARP = 0x8953 SIOCDELDLCI = 0x8981 SIOCDELMULTI = 0x8932 @@ -1457,7 +1559,9 @@ const ( SIOCDEVPRIVATE = 0x89f0 SIOCDIFADDR = 0x8936 SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 SIOCGIFADDR = 0x8915 SIOCGIFBR = 0x8940 SIOCGIFBRDADDR = 0x8919 @@ -1477,13 +1581,21 @@ const ( SIOCGIFPFLAGS = 0x8935 SIOCGIFSLAVE = 0x8929 SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 SIOCGPGRP = 0x8904 SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c SIOCGSTAMP = 0x8906 SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x541b + SIOCOUTQ = 0x5411 + SIOCOUTQNSD = 0x894b SIOCPROTOPRIVATE = 0x89e0 SIOCRTMSG = 0x890d SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 SIOCSIFADDR = 0x8916 SIOCSIFBR = 0x8941 SIOCSIFBRDADDR = 0x891a @@ -1502,11 +1614,15 @@ const ( SIOCSIFPFLAGS = 0x8934 SIOCSIFSLAVE = 0x8930 SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 SIOCSPGRP = 0x8902 SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a SOCK_CLOEXEC = 0x80000 SOCK_DCCP = 0x6 SOCK_DGRAM = 0x2 + SOCK_IOC_TYPE = 0x89 SOCK_NONBLOCK = 0x800 SOCK_PACKET = 0xa SOCK_RAW = 0x3 @@ -1539,6 +1655,7 @@ const ( SOL_SOCKET = 0x1 SOL_TCP = 0x6 SOL_TIPC = 0x10f + SOL_TLS = 0x11a SOL_X25 = 0x106 SOMAXCONN = 0x80 SO_ACCEPTCONN = 0x1e @@ -1552,6 +1669,7 @@ const ( SO_BSDCOMPAT = 0xe SO_BUSY_POLL = 0x2e SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 SO_DEBUG = 0x1 SO_DETACH_BPF = 0x1b SO_DETACH_FILTER = 0x1b @@ -1560,11 +1678,13 @@ const ( SO_ERROR = 0x4 SO_GET_FILTER = 0x1a SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 SO_KEEPALIVE = 0x9 SO_LINGER = 0xd SO_LOCK_FILTER = 0x2c SO_MARK = 0x24 SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 SO_NOFCS = 0x2b SO_NO_CHECK = 0xb SO_OOBINLINE = 0xa @@ -1572,6 +1692,7 @@ const ( SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 + SO_PEERGROUPS = 0x3b SO_PEERNAME = 0x1c SO_PEERSEC = 0x1f SO_PRIORITY = 0xc @@ -1603,10 +1724,32 @@ const ( SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 SO_VM_SOCKETS_TRUSTED = 0x5 SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c SPLICE_F_GIFT = 0x8 SPLICE_F_MORE = 0x4 SPLICE_F_MOVE = 0x1 SPLICE_F_NONBLOCK = 0x2 + STATX_ALL = 0xfff + STATX_ATIME = 0x20 + STATX_ATTR_APPEND = 0x20 + STATX_ATTR_AUTOMOUNT = 0x1000 + STATX_ATTR_COMPRESSED = 0x4 + STATX_ATTR_ENCRYPTED = 0x800 + STATX_ATTR_IMMUTABLE = 0x10 + STATX_ATTR_NODUMP = 0x40 + STATX_BASIC_STATS = 0x7ff + STATX_BLOCKS = 0x400 + STATX_BTIME = 0x800 + STATX_CTIME = 0x80 + STATX_GID = 0x10 + STATX_INO = 0x100 + STATX_MODE = 0x2 + STATX_MTIME = 0x40 + STATX_NLINK = 0x4 + STATX_SIZE = 0x200 + STATX_TYPE = 0x1 + STATX_UID = 0x8 + STATX__RESERVED = 0x80000000 S_BLKSIZE = 0x200 S_IEXEC = 0x40 S_IFBLK = 0x6000 @@ -1639,6 +1782,12 @@ const ( TAB2 = 0x1000 TAB3 = 0x1800 TABDLY = 0x1800 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 TCFLSH = 0x540b TCGETA = 0x5405 TCGETS = 0x5401 @@ -1662,6 +1811,7 @@ const ( TCP_CORK = 0x3 TCP_DEFER_ACCEPT = 0x9 TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e TCP_INFO = 0xb TCP_KEEPCNT = 0x6 TCP_KEEPIDLE = 0x4 @@ -1671,6 +1821,8 @@ const ( TCP_MAXWIN = 0xffff TCP_MAX_WINSHIFT = 0xe TCP_MD5SIG = 0xe + TCP_MD5SIG_EXT = 0x20 + TCP_MD5SIG_FLAG_PREFIX = 0x1 TCP_MD5SIG_MAXKEYLEN = 0x50 TCP_MSS = 0x200 TCP_MSS_DEFAULT = 0x218 @@ -1691,6 +1843,7 @@ const ( TCP_THIN_DUPACK = 0x11 TCP_THIN_LINEAR_TIMEOUTS = 0x10 TCP_TIMESTAMP = 0x18 + TCP_ULP = 0x1f TCP_USER_TIMEOUT = 0x12 TCP_WINDOW_CLAMP = 0xa TCSAFLUSH = 0x2 @@ -1721,6 +1874,7 @@ const ( TIOCGPKT = 0x80045438 TIOCGPTLCK = 0x80045439 TIOCGPTN = 0x80045430 + TIOCGPTPEER = 0x5441 TIOCGRS485 = 0x542e TIOCGSERIAL = 0x541e TIOCGSID = 0x5429 @@ -1778,6 +1932,7 @@ const ( TIOCSWINSZ = 0x5414 TIOCVHANGUP = 0x5437 TOSTOP = 0x100 + TS_COMM_LEN = 0x20 TUNATTACHFILTER = 0x401054d5 TUNDETACHFILTER = 0x401054d6 TUNGETFEATURES = 0x800454cf @@ -1802,6 +1957,9 @@ const ( TUNSETVNETBE = 0x400454de TUNSETVNETHDRSZ = 0x400454d8 TUNSETVNETLE = 0x400454dc + UMOUNT_NOFOLLOW = 0x8 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe VDISCARD = 0xd VEOF = 0x4 VEOL = 0xb @@ -1831,6 +1989,17 @@ const ( WALL = 0x40000000 WCLONE = 0x80000000 WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x80045702 + WDIOC_GETPRETIMEOUT = 0x80045709 + WDIOC_GETSTATUS = 0x80045701 + WDIOC_GETSUPPORT = 0x80285700 + WDIOC_GETTEMP = 0x80045703 + WDIOC_GETTIMELEFT = 0x8004570a + WDIOC_GETTIMEOUT = 0x80045707 + WDIOC_KEEPALIVE = 0x80045705 + WDIOC_SETOPTIONS = 0x80045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 WEXITED = 0x4 WNOHANG = 0x1 WNOTHREAD = 0x20000000 @@ -1838,6 +2007,8 @@ const ( WORDSIZE = 0x40 WSTOPPED = 0x2 WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 XCASE = 0x4 XTABS = 0x1800 ) @@ -2009,7 +2180,6 @@ const ( SIGTSTP = syscall.Signal(0x14) SIGTTIN = syscall.Signal(0x15) SIGTTOU = syscall.Signal(0x16) - SIGUNUSED = syscall.Signal(0x1f) SIGURG = syscall.Signal(0x17) SIGUSR1 = syscall.Signal(0xa) SIGUSR2 = syscall.Signal(0xc) diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go index b4338d5..1612b66 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go +++ b/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go @@ -1,5 +1,5 @@ // mkerrors.sh -m32 -// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT +// Code generated by the command above; see README.md. DO NOT EDIT. // +build 386,netbsd @@ -169,6 +169,8 @@ const ( CSTOP = 0x13 CSTOPB = 0x400 CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 CTL_MAXNAME = 0xc CTL_NET = 0x4 CTL_QUERY = -0x2 @@ -581,6 +583,7 @@ const ( F_UNLCK = 0x2 F_WRLCK = 0x3 HUPCL = 0x4000 + HW_MACHINE = 0x1 ICANON = 0x100 ICMP6_FILTER = 0x12 ICRNL = 0x100 @@ -970,6 +973,10 @@ const ( IXANY = 0x800 IXOFF = 0x400 IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 LOCK_EX = 0x2 LOCK_NB = 0x4 LOCK_SH = 0x1 diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go index 4994437..c994ab6 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go @@ -1,5 +1,5 @@ // mkerrors.sh -m64 -// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT +// Code generated by the command above; see README.md. DO NOT EDIT. // +build amd64,netbsd @@ -169,6 +169,8 @@ const ( CSTOP = 0x13 CSTOPB = 0x400 CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 CTL_MAXNAME = 0xc CTL_NET = 0x4 CTL_QUERY = -0x2 @@ -571,6 +573,7 @@ const ( F_UNLCK = 0x2 F_WRLCK = 0x3 HUPCL = 0x4000 + HW_MACHINE = 0x1 ICANON = 0x100 ICMP6_FILTER = 0x12 ICRNL = 0x100 @@ -960,6 +963,10 @@ const ( IXANY = 0x800 IXOFF = 0x400 IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 LOCK_EX = 0x2 LOCK_NB = 0x4 LOCK_SH = 0x1 diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go index ac85ca6..a8f9efe 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go +++ b/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go @@ -1,5 +1,5 @@ // mkerrors.sh -marm -// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT +// Code generated by the command above; see README.md. DO NOT EDIT. // +build arm,netbsd @@ -161,6 +161,8 @@ const ( CSTOP = 0x13 CSTOPB = 0x400 CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 CTL_MAXNAME = 0xc CTL_NET = 0x4 CTL_QUERY = -0x2 @@ -563,6 +565,7 @@ const ( F_UNLCK = 0x2 F_WRLCK = 0x3 HUPCL = 0x4000 + HW_MACHINE = 0x1 ICANON = 0x100 ICMP6_FILTER = 0x12 ICRNL = 0x100 @@ -952,6 +955,10 @@ const ( IXANY = 0x800 IXOFF = 0x400 IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 LOCK_EX = 0x2 LOCK_NB = 0x4 LOCK_SH = 0x1 @@ -1006,6 +1013,9 @@ const ( MSG_TRUNC = 0x10 MSG_USERFLAGS = 0xffffff MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x4 NAME_MAX = 0x1ff NET_RT_DUMP = 0x1 NET_RT_FLAGS = 0x2 diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go index 3322e99..04e4f33 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go +++ b/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go @@ -1,5 +1,5 @@ // mkerrors.sh -m32 -// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT +// Code generated by the command above; see README.md. DO NOT EDIT. // +build 386,openbsd @@ -157,6 +157,8 @@ const ( CSTOP = 0x13 CSTOPB = 0x400 CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 CTL_MAXNAME = 0xc CTL_NET = 0x4 DIOCOSFPFLUSH = 0x2000444e @@ -442,6 +444,7 @@ const ( F_UNLCK = 0x2 F_WRLCK = 0x3 HUPCL = 0x4000 + HW_MACHINE = 0x1 ICANON = 0x100 ICMP6_FILTER = 0x12 ICRNL = 0x100 @@ -860,6 +863,10 @@ const ( IXANY = 0x800 IXOFF = 0x400 IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 LCNT_OVERLOAD_FLUSH = 0x6 LOCK_EX = 0x2 LOCK_NB = 0x4 diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go index 1758ecc..c80ff98 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go @@ -1,5 +1,5 @@ // mkerrors.sh -m64 -// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT +// Code generated by the command above; see README.md. DO NOT EDIT. // +build amd64,openbsd @@ -157,6 +157,8 @@ const ( CSTOP = 0x13 CSTOPB = 0x400 CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 CTL_MAXNAME = 0xc CTL_NET = 0x4 DIOCOSFPFLUSH = 0x2000444e @@ -442,6 +444,7 @@ const ( F_UNLCK = 0x2 F_WRLCK = 0x3 HUPCL = 0x4000 + HW_MACHINE = 0x1 ICANON = 0x100 ICMP6_FILTER = 0x12 ICRNL = 0x100 @@ -860,6 +863,10 @@ const ( IXANY = 0x800 IXOFF = 0x400 IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 LCNT_OVERLOAD_FLUSH = 0x6 LOCK_EX = 0x2 LOCK_NB = 0x4 diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go new file mode 100644 index 0000000..4c32049 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go @@ -0,0 +1,1593 @@ +// mkerrors.sh +// Code generated by the command above; see README.md. DO NOT EDIT. + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- _const.go + +// +build arm,openbsd + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_BLUETOOTH = 0x20 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_ENCAP = 0x1c + AF_HYLINK = 0xf + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_KEY = 0x1e + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x24 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SIP = 0x1d + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRFILT = 0x4004427c + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc008427b + BIOCGETIF = 0x4020426b + BIOCGFILDROP = 0x40044278 + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044273 + BIOCGRTIMEOUT = 0x400c426e + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x20004276 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDIRFILT = 0x8004427d + BIOCSDLT = 0x8004427a + BIOCSETF = 0x80084267 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x80084277 + BIOCSFILDROP = 0x80044279 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044272 + BIOCSRTIMEOUT = 0x800c426d + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIRECTION_IN = 0x1 + BPF_DIRECTION_OUT = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x200000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CREAD = 0x800 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0xff + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DIOCOSFPFLUSH = 0x2000444e + DLT_ARCNET = 0x7 + DLT_ATM_RFC1483 = 0xb + DLT_AX25 = 0x3 + DLT_CHAOS = 0x5 + DLT_C_HDLC = 0x68 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0xd + DLT_FDDI = 0xa + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_LOOP = 0xc + DLT_MPLS = 0xdb + DLT_NULL = 0x0 + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_SERIAL = 0x32 + DLT_PRONET = 0x4 + DLT_RAW = 0xe + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMT_TAGOVF = 0x1 + EMUL_ENABLED = 0x1 + EMUL_NATIVE = 0x2 + ENDRUNDISC = 0x9 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_AOE = 0x88a2 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LLDP = 0x88cc + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_QINQ = 0x88a8 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOW = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_ALIGN = 0x2 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_DIX_LEN = 0x600 + ETHER_MAX_LEN = 0x5ee + ETHER_MIN_LEN = 0x40 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = -0x3 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0x7 + EVFILT_TIMER = -0x7 + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xa + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETOWN = 0x5 + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFA_ROUTE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8e52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BLUETOOTH = 0xf8 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf7 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DUMMY = 0xf1 + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf3 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFLOW = 0xf9 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf2 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_HOST = 0x1 + IN_RFC3021_NET = 0xfffffffe + IN_RFC3021_NSHIFT = 0x1f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DIVERT = 0x102 + IPPROTO_DIVERT_INIT = 0x2 + IPPROTO_DIVERT_RESP = 0x1 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x103 + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPV6_AUTH_LEVEL = 0x35 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_ESP_NETWORK_LEVEL = 0x37 + IPV6_ESP_TRANS_LEVEL = 0x36 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPCOMP_LEVEL = 0x3c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_OPTIONS = 0x1 + IPV6_PATHMTU = 0x2c + IPV6_PIPEX = 0x3f + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVDSTPORT = 0x40 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTABLE = 0x1021 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_AUTH_LEVEL = 0x14 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DIVERTFL = 0x1022 + IP_DROP_MEMBERSHIP = 0xd + IP_ESP_NETWORK_LEVEL = 0x16 + IP_ESP_TRANS_LEVEL = 0x15 + IP_HDRINCL = 0x2 + IP_IPCOMP_LEVEL = 0x1d + IP_IPSECFLOWINFO = 0x24 + IP_IPSEC_LOCAL_AUTH = 0x1b + IP_IPSEC_LOCAL_CRED = 0x19 + IP_IPSEC_LOCAL_ID = 0x17 + IP_IPSEC_REMOTE_AUTH = 0x1c + IP_IPSEC_REMOTE_CRED = 0x1a + IP_IPSEC_REMOTE_ID = 0x18 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0xfff + IP_MF = 0x2000 + IP_MINTTL = 0x20 + IP_MIN_MEMBERSHIPS = 0xf + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PIPEX = 0x22 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVDSTPORT = 0x21 + IP_RECVIF = 0x1e + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVRTABLE = 0x23 + IP_RECVTTL = 0x1f + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RTABLE = 0x1021 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LCNT_OVERLOAD_FLUSH = 0x6 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_FLAGMASK = 0x3ff7 + MAP_HASSEMAPHORE = 0x0 + MAP_INHERIT = 0x0 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_INHERIT_ZERO = 0x3 + MAP_NOEXTEND = 0x0 + MAP_NORESERVE = 0x0 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x0 + MAP_SHARED = 0x1 + MAP_TRYFIXED = 0x0 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_BCAST = 0x100 + MSG_CMSG_CLOEXEC = 0x800 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_MCAST = 0x200 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x4 + MS_SYNC = 0x2 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_MAXID = 0x6 + NET_RT_STATS = 0x4 + NET_RT_TABLE = 0x5 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EOF = 0x2 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRUNCATE = 0x80 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x80 + ONOCR = 0x40 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x10000 + O_CREAT = 0x200 + O_DIRECTORY = 0x20000 + O_DSYNC = 0x80 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x80 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PF_FLUSH = 0x1 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_LABEL = 0xa + RTAX_MAX = 0xb + RTAX_NETMASK = 0x2 + RTAX_SRC = 0x8 + RTAX_SRCMASK = 0x9 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_LABEL = 0x400 + RTA_NETMASK = 0x4 + RTA_SRC = 0x100 + RTA_SRCMASK = 0x200 + RTF_ANNOUNCE = 0x4000 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CLONED = 0x10000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FMASK = 0x70f808 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_MPATH = 0x40000 + RTF_MPLS = 0x100000 + RTF_PERMANENT_ARP = 0x2000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x2000 + RTF_REJECT = 0x8 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_USETRAILERS = 0x8000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DESYNC = 0x10 + RTM_GET = 0x4 + RTM_IFANNOUNCE = 0xf + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MAXSIZE = 0x800 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RT_TABLEID_MAX = 0xff + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80246987 + SIOCALIFADDR = 0x8218691c + SIOCATMARK = 0x40047307 + SIOCBRDGADD = 0x8054693c + SIOCBRDGADDS = 0x80546941 + SIOCBRDGARL = 0x806e694d + SIOCBRDGDADDR = 0x81286947 + SIOCBRDGDEL = 0x8054693d + SIOCBRDGDELS = 0x80546942 + SIOCBRDGFLUSH = 0x80546948 + SIOCBRDGFRL = 0x806e694e + SIOCBRDGGCACHE = 0xc0146941 + SIOCBRDGGFD = 0xc0146952 + SIOCBRDGGHT = 0xc0146951 + SIOCBRDGGIFFLGS = 0xc054693e + SIOCBRDGGMA = 0xc0146953 + SIOCBRDGGPARAM = 0xc03c6958 + SIOCBRDGGPRI = 0xc0146950 + SIOCBRDGGRL = 0xc028694f + SIOCBRDGGSIFS = 0xc054693c + SIOCBRDGGTO = 0xc0146946 + SIOCBRDGIFS = 0xc0546942 + SIOCBRDGRTS = 0xc0186943 + SIOCBRDGSADDR = 0xc1286944 + SIOCBRDGSCACHE = 0x80146940 + SIOCBRDGSFD = 0x80146952 + SIOCBRDGSHT = 0x80146951 + SIOCBRDGSIFCOST = 0x80546955 + SIOCBRDGSIFFLGS = 0x8054693f + SIOCBRDGSIFPRIO = 0x80546954 + SIOCBRDGSMA = 0x80146953 + SIOCBRDGSPRI = 0x80146950 + SIOCBRDGSPROTO = 0x8014695a + SIOCBRDGSTO = 0x80146945 + SIOCBRDGSTXHC = 0x80146959 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80246989 + SIOCDIFPHYADDR = 0x80206949 + SIOCDLIFADDR = 0x8218691e + SIOCGETKALIVE = 0xc01869a4 + SIOCGETLABEL = 0x8020699a + SIOCGETPFLOW = 0xc02069fe + SIOCGETPFSYNC = 0xc02069f8 + SIOCGETSGCNT = 0xc0147534 + SIOCGETVIFCNT = 0xc0147533 + SIOCGETVLAN = 0xc0206990 + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFASYNCMAP = 0xc020697c + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCONF = 0xc0086924 + SIOCGIFDATA = 0xc020691b + SIOCGIFDESCR = 0xc0206981 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGATTR = 0xc024698b + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc024698a + SIOCGIFGROUP = 0xc0246988 + SIOCGIFHARDMTU = 0xc02069a5 + SIOCGIFMEDIA = 0xc0286936 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc020697e + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPRIORITY = 0xc020699c + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFRDOMAIN = 0xc02069a0 + SIOCGIFRTLABEL = 0xc0206983 + SIOCGIFRXR = 0x802069aa + SIOCGIFTIMESLOT = 0xc0206986 + SIOCGIFXFLAGS = 0xc020699e + SIOCGLIFADDR = 0xc218691d + SIOCGLIFPHYADDR = 0xc218694b + SIOCGLIFPHYRTABLE = 0xc02069a2 + SIOCGLIFPHYTTL = 0xc02069a9 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGSPPPPARAMS = 0xc0206994 + SIOCGVH = 0xc02069f6 + SIOCGVNETID = 0xc02069a7 + SIOCIFCREATE = 0x8020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc00c6978 + SIOCSETKALIVE = 0x801869a3 + SIOCSETLABEL = 0x80206999 + SIOCSETPFLOW = 0x802069fd + SIOCSETPFSYNC = 0x802069f7 + SIOCSETVLAN = 0x8020698f + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFASYNCMAP = 0x8020697d + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFDESCR = 0x80206980 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGATTR = 0x8024698c + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020691f + SIOCSIFMEDIA = 0xc0206935 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x8020697f + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPRIORITY = 0x8020699b + SIOCSIFRDOMAIN = 0x8020699f + SIOCSIFRTLABEL = 0x80206982 + SIOCSIFTIMESLOT = 0x80206985 + SIOCSIFXFLAGS = 0x8020699d + SIOCSLIFPHYADDR = 0x8218694a + SIOCSLIFPHYRTABLE = 0x802069a1 + SIOCSLIFPHYTTL = 0x802069a8 + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSSPPPPARAMS = 0x80206993 + SIOCSVH = 0xc02069f5 + SIOCSVNETID = 0x802069a6 + SOCK_CLOEXEC = 0x8000 + SOCK_DGRAM = 0x2 + SOCK_NONBLOCK = 0x4000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BINDANY = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NETPROC = 0x1020 + SO_OOBINLINE = 0x100 + SO_PEERCRED = 0x1022 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RTABLE = 0x1021 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_SPLICE = 0x1023 + SO_TIMESTAMP = 0x800 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x3 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x4 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOPUSH = 0x10 + TCP_NSTATES = 0xb + TCP_SACK_ENABLE = 0x8 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_PPS = 0x10 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGPGRP = 0x40047477 + TIOCGSID = 0x40047463 + TIOCGTSTAMP = 0x400c745b + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMODG = 0x4004746a + TIOCMODS = 0x8004746d + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x8004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x80047465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSTSTAMP = 0x8008745a + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALTSIG = 0x4 + WCONTINUED = 0x8 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x58) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x59) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EIPSEC = syscall.Errno(0x52) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x5b) + ELOOP = syscall.Errno(0x3e) + EMEDIUMTYPE = syscall.Errno(0x56) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x53) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOMEDIUM = syscall.Errno(0x55) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5a) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x5b) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x57) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "connection timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "IPsec processing failure", + 83: "attribute not found", + 84: "illegal byte sequence", + 85: "no medium found", + 86: "wrong medium type", + 87: "value too large to be stored in data type", + 88: "operation canceled", + 89: "identifier removed", + 90: "no message of desired type", + 91: "not supported", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "stopped (signal)", + 18: "stopped", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", + 32: "thread AST", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go index 81e83d7..09eedb0 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go @@ -664,6 +664,8 @@ const ( MS_OLDSYNC = 0x0 MS_SYNC = 0x4 M_FLUSH = 0x86 + NAME_MAX = 0xff + NEWDEV = 0x1 NL0 = 0x0 NL1 = 0x100 NLDLY = 0x100 @@ -672,6 +674,9 @@ const ( OFDEL = 0x80 OFILL = 0x40 OLCUC = 0x2 + OLDDEV = 0x0 + ONBITSMAJOR = 0x7 + ONBITSMINOR = 0x8 ONLCR = 0x4 ONLRET = 0x20 ONOCR = 0x10 @@ -1105,6 +1110,7 @@ const ( VEOL = 0x5 VEOL2 = 0x6 VERASE = 0x2 + VERASE2 = 0x11 VINTR = 0x0 VKILL = 0x3 VLNEXT = 0xf diff --git a/vendor/golang.org/x/sys/unix/zptrace386_linux.go b/vendor/golang.org/x/sys/unix/zptrace386_linux.go new file mode 100644 index 0000000..2d21c49 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zptrace386_linux.go @@ -0,0 +1,80 @@ +// Code generated by linux/mkall.go generatePtracePair(386, amd64). DO NOT EDIT. + +// +build linux +// +build 386 amd64 + +package unix + +import "unsafe" + +// PtraceRegs386 is the registers used by 386 binaries. +type PtraceRegs386 struct { + Ebx int32 + Ecx int32 + Edx int32 + Esi int32 + Edi int32 + Ebp int32 + Eax int32 + Xds int32 + Xes int32 + Xfs int32 + Xgs int32 + Orig_eax int32 + Eip int32 + Xcs int32 + Eflags int32 + Esp int32 + Xss int32 +} + +// PtraceGetRegs386 fetches the registers used by 386 binaries. +func PtraceGetRegs386(pid int, regsout *PtraceRegs386) error { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +// PtraceSetRegs386 sets the registers used by 386 binaries. +func PtraceSetRegs386(pid int, regs *PtraceRegs386) error { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} + +// PtraceRegsAmd64 is the registers used by amd64 binaries. +type PtraceRegsAmd64 struct { + R15 uint64 + R14 uint64 + R13 uint64 + R12 uint64 + Rbp uint64 + Rbx uint64 + R11 uint64 + R10 uint64 + R9 uint64 + R8 uint64 + Rax uint64 + Rcx uint64 + Rdx uint64 + Rsi uint64 + Rdi uint64 + Orig_rax uint64 + Rip uint64 + Cs uint64 + Eflags uint64 + Rsp uint64 + Ss uint64 + Fs_base uint64 + Gs_base uint64 + Ds uint64 + Es uint64 + Fs uint64 + Gs uint64 +} + +// PtraceGetRegsAmd64 fetches the registers used by amd64 binaries. +func PtraceGetRegsAmd64(pid int, regsout *PtraceRegsAmd64) error { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +// PtraceSetRegsAmd64 sets the registers used by amd64 binaries. +func PtraceSetRegsAmd64(pid int, regs *PtraceRegsAmd64) error { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} diff --git a/vendor/golang.org/x/sys/unix/zptracearm_linux.go b/vendor/golang.org/x/sys/unix/zptracearm_linux.go new file mode 100644 index 0000000..faf23bb --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zptracearm_linux.go @@ -0,0 +1,41 @@ +// Code generated by linux/mkall.go generatePtracePair(arm, arm64). DO NOT EDIT. + +// +build linux +// +build arm arm64 + +package unix + +import "unsafe" + +// PtraceRegsArm is the registers used by arm binaries. +type PtraceRegsArm struct { + Uregs [18]uint32 +} + +// PtraceGetRegsArm fetches the registers used by arm binaries. +func PtraceGetRegsArm(pid int, regsout *PtraceRegsArm) error { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +// PtraceSetRegsArm sets the registers used by arm binaries. +func PtraceSetRegsArm(pid int, regs *PtraceRegsArm) error { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} + +// PtraceRegsArm64 is the registers used by arm64 binaries. +type PtraceRegsArm64 struct { + Regs [31]uint64 + Sp uint64 + Pc uint64 + Pstate uint64 +} + +// PtraceGetRegsArm64 fetches the registers used by arm64 binaries. +func PtraceGetRegsArm64(pid int, regsout *PtraceRegsArm64) error { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +// PtraceSetRegsArm64 sets the registers used by arm64 binaries. +func PtraceSetRegsArm64(pid int, regs *PtraceRegsArm64) error { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} diff --git a/vendor/golang.org/x/sys/unix/zptracemips_linux.go b/vendor/golang.org/x/sys/unix/zptracemips_linux.go new file mode 100644 index 0000000..c431131 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zptracemips_linux.go @@ -0,0 +1,50 @@ +// Code generated by linux/mkall.go generatePtracePair(mips, mips64). DO NOT EDIT. + +// +build linux +// +build mips mips64 + +package unix + +import "unsafe" + +// PtraceRegsMips is the registers used by mips binaries. +type PtraceRegsMips struct { + Regs [32]uint64 + Lo uint64 + Hi uint64 + Epc uint64 + Badvaddr uint64 + Status uint64 + Cause uint64 +} + +// PtraceGetRegsMips fetches the registers used by mips binaries. +func PtraceGetRegsMips(pid int, regsout *PtraceRegsMips) error { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +// PtraceSetRegsMips sets the registers used by mips binaries. +func PtraceSetRegsMips(pid int, regs *PtraceRegsMips) error { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} + +// PtraceRegsMips64 is the registers used by mips64 binaries. +type PtraceRegsMips64 struct { + Regs [32]uint64 + Lo uint64 + Hi uint64 + Epc uint64 + Badvaddr uint64 + Status uint64 + Cause uint64 +} + +// PtraceGetRegsMips64 fetches the registers used by mips64 binaries. +func PtraceGetRegsMips64(pid int, regsout *PtraceRegsMips64) error { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +// PtraceSetRegsMips64 sets the registers used by mips64 binaries. +func PtraceSetRegsMips64(pid int, regs *PtraceRegsMips64) error { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} diff --git a/vendor/golang.org/x/sys/unix/zptracemipsle_linux.go b/vendor/golang.org/x/sys/unix/zptracemipsle_linux.go new file mode 100644 index 0000000..dc3d6d3 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zptracemipsle_linux.go @@ -0,0 +1,50 @@ +// Code generated by linux/mkall.go generatePtracePair(mipsle, mips64le). DO NOT EDIT. + +// +build linux +// +build mipsle mips64le + +package unix + +import "unsafe" + +// PtraceRegsMipsle is the registers used by mipsle binaries. +type PtraceRegsMipsle struct { + Regs [32]uint64 + Lo uint64 + Hi uint64 + Epc uint64 + Badvaddr uint64 + Status uint64 + Cause uint64 +} + +// PtraceGetRegsMipsle fetches the registers used by mipsle binaries. +func PtraceGetRegsMipsle(pid int, regsout *PtraceRegsMipsle) error { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +// PtraceSetRegsMipsle sets the registers used by mipsle binaries. +func PtraceSetRegsMipsle(pid int, regs *PtraceRegsMipsle) error { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} + +// PtraceRegsMips64le is the registers used by mips64le binaries. +type PtraceRegsMips64le struct { + Regs [32]uint64 + Lo uint64 + Hi uint64 + Epc uint64 + Badvaddr uint64 + Status uint64 + Cause uint64 +} + +// PtraceGetRegsMips64le fetches the registers used by mips64le binaries. +func PtraceGetRegsMips64le(pid int, regsout *PtraceRegsMips64le) error { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +// PtraceSetRegsMips64le sets the registers used by mips64le binaries. +func PtraceSetRegsMips64le(pid int, regs *PtraceRegsMips64le) error { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} 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 e48f4a5..4c9f727 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go @@ -1,5 +1,5 @@ // mksyscall.pl -l32 -tags darwin,386 syscall_bsd.go syscall_darwin.go syscall_darwin_386.go -// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT +// Code generated by the command above; see README.md. DO NOT EDIT. // +build darwin,386 @@ -266,6 +266,117 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// 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) { _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) if e1 != 0 { @@ -298,6 +409,16 @@ func kill(pid int, signum int, posix int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Access(path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -456,6 +577,21 @@ func Exit(code int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fchdir(fd int) (err error) { _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) if e1 != 0 { @@ -486,6 +622,21 @@ func Fchmod(fd int, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fchown(fd int, uid int, gid int) (err error) { _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) if e1 != 0 { @@ -496,6 +647,21 @@ func Fchown(fd int, uid int, gid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Flock(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) if e1 != 0 { @@ -527,6 +693,21 @@ func Fstat(fd int, stat *Stat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fstatfs(fd int, stat *Statfs_t) (err error) { _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { @@ -745,6 +926,26 @@ func Link(path string, link string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Listen(s int, backlog int) (err error) { _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) if e1 != 0 { @@ -785,13 +986,13 @@ func Mkdir(path string, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mkfifo(path string, mode uint32) (err error) { +func Mkdirat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } - _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) if e1 != 0 { err = errnoErr(e1) } @@ -800,39 +1001,13 @@ func Mkfifo(path string, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mknod(path string, mode uint32, dev int) (err error) { +func Mkfifo(path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } - _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } @@ -841,14 +1016,13 @@ func Mlockall(flags int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return } - _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) if e1 != 0 { err = errnoErr(e1) } @@ -857,24 +1031,14 @@ func Mprotect(b []byte, prot int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) if e1 != 0 { err = errnoErr(e1) } @@ -883,13 +1047,13 @@ func Munlockall() (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Open(path string, mode int, perm uint32) (fd int, err error) { +func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } - r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -988,6 +1152,28 @@ func Readlink(path string, buf []byte) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Rename(from string, to string) (err error) { var _p0 *byte _p0, err = BytePtrFromString(from) @@ -1008,6 +1194,26 @@ func Rename(from string, to string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Revoke(path string) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -1245,6 +1451,26 @@ func Symlink(path string, link string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Sync() (err error) { _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) if e1 != 0 { @@ -1308,6 +1534,21 @@ func Unlink(path string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Unmount(path string, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) 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 672ada0..2562377 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go @@ -1,5 +1,5 @@ // mksyscall.pl -tags darwin,amd64 syscall_bsd.go syscall_darwin.go syscall_darwin_amd64.go -// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT +// Code generated by the command above; see README.md. DO NOT EDIT. // +build darwin,amd64 @@ -266,6 +266,117 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// 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) { _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) if e1 != 0 { @@ -298,6 +409,16 @@ func kill(pid int, signum int, posix int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Access(path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -456,6 +577,21 @@ func Exit(code int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fchdir(fd int) (err error) { _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) if e1 != 0 { @@ -486,6 +622,21 @@ func Fchmod(fd int, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fchown(fd int, uid int, gid int) (err error) { _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) if e1 != 0 { @@ -496,6 +647,21 @@ func Fchown(fd int, uid int, gid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Flock(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) if e1 != 0 { @@ -527,6 +693,21 @@ func Fstat(fd int, stat *Stat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fstatfs(fd int, stat *Statfs_t) (err error) { _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { @@ -745,6 +926,26 @@ func Link(path string, link string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Listen(s int, backlog int) (err error) { _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) if e1 != 0 { @@ -785,13 +986,13 @@ func Mkdir(path string, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mkfifo(path string, mode uint32) (err error) { +func Mkdirat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } - _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) if e1 != 0 { err = errnoErr(e1) } @@ -800,39 +1001,13 @@ func Mkfifo(path string, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mknod(path string, mode uint32, dev int) (err error) { +func Mkfifo(path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } - _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } @@ -841,14 +1016,13 @@ func Mlockall(flags int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return } - _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) if e1 != 0 { err = errnoErr(e1) } @@ -857,24 +1031,14 @@ func Mprotect(b []byte, prot int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) if e1 != 0 { err = errnoErr(e1) } @@ -883,13 +1047,13 @@ func Munlockall() (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Open(path string, mode int, perm uint32) (fd int, err error) { +func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } - r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -988,6 +1152,28 @@ func Readlink(path string, buf []byte) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Rename(from string, to string) (err error) { var _p0 *byte _p0, err = BytePtrFromString(from) @@ -1008,6 +1194,26 @@ func Rename(from string, to string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Revoke(path string) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -1245,6 +1451,26 @@ func Symlink(path string, link string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Sync() (err error) { _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) if e1 != 0 { @@ -1308,6 +1534,21 @@ func Unlink(path string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Unmount(path string, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -1383,21 +1624,6 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func gettimeofday(tp *Timeval) (sec int64, usec int32, err error) { r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) sec = int64(r0) 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 d516409..4ae787e 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go @@ -1,5 +1,5 @@ -// mksyscall.pl -l32 -tags darwin,arm syscall_bsd.go syscall_darwin.go syscall_darwin_arm.go -// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT +// mksyscall.pl -tags darwin,arm syscall_bsd.go syscall_darwin.go syscall_darwin_arm.go +// Code generated by the command above; see README.md. DO NOT EDIT. // +build darwin,arm @@ -266,6 +266,117 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// 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) { _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) if e1 != 0 { @@ -298,6 +409,16 @@ func kill(pid int, signum int, posix int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Access(path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -456,6 +577,21 @@ func Exit(code int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fchdir(fd int) (err error) { _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) if e1 != 0 { @@ -486,6 +622,21 @@ func Fchmod(fd int, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fchown(fd int, uid int, gid int) (err error) { _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) if e1 != 0 { @@ -496,6 +647,21 @@ func Fchown(fd int, uid int, gid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Flock(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) if e1 != 0 { @@ -527,6 +693,21 @@ func Fstat(fd int, stat *Stat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fstatfs(fd int, stat *Statfs_t) (err error) { _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { @@ -745,6 +926,26 @@ func Link(path string, link string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Listen(s int, backlog int) (err error) { _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) if e1 != 0 { @@ -785,13 +986,13 @@ func Mkdir(path string, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mkfifo(path string, mode uint32) (err error) { +func Mkdirat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } - _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) if e1 != 0 { err = errnoErr(e1) } @@ -800,39 +1001,13 @@ func Mkfifo(path string, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mknod(path string, mode uint32, dev int) (err error) { +func Mkfifo(path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } - _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } @@ -841,14 +1016,13 @@ func Mlockall(flags int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return } - _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) if e1 != 0 { err = errnoErr(e1) } @@ -857,24 +1031,14 @@ func Mprotect(b []byte, prot int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) if e1 != 0 { err = errnoErr(e1) } @@ -883,13 +1047,13 @@ func Munlockall() (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Open(path string, mode int, perm uint32) (fd int, err error) { +func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } - r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -988,6 +1152,28 @@ func Readlink(path string, buf []byte) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Rename(from string, to string) (err error) { var _p0 *byte _p0, err = BytePtrFromString(from) @@ -1008,6 +1194,26 @@ func Rename(from string, to string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Revoke(path string) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -1245,6 +1451,26 @@ func Symlink(path string, link string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Sync() (err error) { _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) if e1 != 0 { @@ -1308,6 +1534,21 @@ func Unlink(path string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Unmount(path string, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) 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 e97759c..14ed688 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go @@ -1,5 +1,5 @@ // mksyscall.pl -tags darwin,arm64 syscall_bsd.go syscall_darwin.go syscall_darwin_arm64.go -// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT +// Code generated by the command above; see README.md. DO NOT EDIT. // +build darwin,arm64 @@ -266,6 +266,117 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// 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) { _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) if e1 != 0 { @@ -298,6 +409,16 @@ func kill(pid int, signum int, posix int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Access(path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -456,6 +577,21 @@ func Exit(code int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fchdir(fd int) (err error) { _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) if e1 != 0 { @@ -486,6 +622,21 @@ func Fchmod(fd int, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fchown(fd int, uid int, gid int) (err error) { _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) if e1 != 0 { @@ -496,6 +647,21 @@ func Fchown(fd int, uid int, gid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Flock(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) if e1 != 0 { @@ -527,6 +693,21 @@ func Fstat(fd int, stat *Stat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fstatfs(fd int, stat *Statfs_t) (err error) { _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { @@ -745,6 +926,26 @@ func Link(path string, link string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Listen(s int, backlog int) (err error) { _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) if e1 != 0 { @@ -785,13 +986,13 @@ func Mkdir(path string, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mkfifo(path string, mode uint32) (err error) { +func Mkdirat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } - _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) if e1 != 0 { err = errnoErr(e1) } @@ -800,39 +1001,13 @@ func Mkfifo(path string, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mknod(path string, mode uint32, dev int) (err error) { +func Mkfifo(path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } - _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } @@ -841,14 +1016,13 @@ func Mlockall(flags int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return } - _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) if e1 != 0 { err = errnoErr(e1) } @@ -857,24 +1031,14 @@ func Mprotect(b []byte, prot int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) if e1 != 0 { err = errnoErr(e1) } @@ -883,13 +1047,13 @@ func Munlockall() (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Open(path string, mode int, perm uint32) (fd int, err error) { +func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } - r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -988,6 +1152,28 @@ func Readlink(path string, buf []byte) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Rename(from string, to string) (err error) { var _p0 *byte _p0, err = BytePtrFromString(from) @@ -1008,6 +1194,26 @@ func Rename(from string, to string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Revoke(path string) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -1245,6 +1451,26 @@ func Symlink(path string, link string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Sync() (err error) { _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) if e1 != 0 { @@ -1308,6 +1534,21 @@ func Unlink(path string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Unmount(path string, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go index eafceb8..91f36e9 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go @@ -266,6 +266,117 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func pipe() (r int, w int, err error) { r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) r = int(r0) @@ -312,6 +423,33 @@ func extpwrite(fd int, p []byte, flags int, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Access(path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -480,6 +618,21 @@ func Fchmod(fd int, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fchown(fd int, uid int, gid int) (err error) { _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) if e1 != 0 { @@ -521,6 +674,21 @@ func Fstat(fd int, stat *Stat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fstatfs(fd int, stat *Statfs_t) (err error) { _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { @@ -829,74 +997,6 @@ func Mknod(path string, mode uint32, dev int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Nanosleep(time *Timespec, leftover *Timespec) (err error) { _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { @@ -1391,3 +1491,18 @@ func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go index f53801c..a86434a 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go @@ -1,5 +1,5 @@ // mksyscall.pl -l32 -tags freebsd,386 syscall_bsd.go syscall_freebsd.go syscall_freebsd_386.go -// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT +// Code generated by the command above; see README.md. DO NOT EDIT. // +build freebsd,386 @@ -266,6 +266,117 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func pipe() (r int, w int, err error) { r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) r = int(r0) @@ -278,6 +389,33 @@ func pipe() (r int, w int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Access(path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -303,6 +441,36 @@ func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func CapEnter() (err error) { + _, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func capRightsGet(version int, fd int, rightsp *CapRights) (err error) { + _, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func capRightsLimit(fd int, rightsp *CapRights) (err error) { + _, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Chdir(path string) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -640,6 +808,21 @@ func Fadvise(fd int, offset int64, length int64, advice int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fchdir(fd int) (err error) { _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) if e1 != 0 { @@ -670,6 +853,21 @@ func Fchmod(fd int, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fchown(fd int, uid int, gid int) (err error) { _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) if e1 != 0 { @@ -680,6 +878,21 @@ func Fchown(fd int, uid int, gid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Flock(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) if e1 != 0 { @@ -711,6 +924,21 @@ func Fstat(fd int, stat *Stat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fstatfs(fd int, stat *Statfs_t) (err error) { _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { @@ -741,6 +969,23 @@ func Ftruncate(fd int, length int64) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { var _p0 unsafe.Pointer if len(buf) > 0 { @@ -949,6 +1194,26 @@ func Link(path string, link string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Listen(s int, backlog int) (err error) { _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) if e1 != 0 { @@ -989,13 +1254,13 @@ func Mkdir(path string, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mkfifo(path string, mode uint32) (err error) { +func Mkdirat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } - _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) if e1 != 0 { err = errnoErr(e1) } @@ -1004,39 +1269,13 @@ func Mkfifo(path string, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mknod(path string, mode uint32, dev int) (err error) { +func Mkfifo(path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } - _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } @@ -1045,14 +1284,13 @@ func Mlockall(flags int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return } - _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) if e1 != 0 { err = errnoErr(e1) } @@ -1061,14 +1299,8 @@ func Mprotect(b []byte, prot int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { err = errnoErr(e1) } @@ -1077,18 +1309,14 @@ func Munlock(b []byte) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Munlockall() (err error) { - _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Nanosleep(time *Timespec, leftover *Timespec) (err error) { - _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) if e1 != 0 { err = errnoErr(e1) } @@ -1097,13 +1325,13 @@ func Nanosleep(time *Timespec, leftover *Timespec) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Open(path string, mode int, perm uint32) (fd int, err error) { +func Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } - r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1202,6 +1430,28 @@ func Readlink(path string, buf []byte) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Rename(from string, to string) (err error) { var _p0 *byte _p0, err = BytePtrFromString(from) @@ -1222,6 +1472,26 @@ func Rename(from string, to string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Revoke(path string) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -1469,6 +1739,26 @@ func Symlink(path string, link string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Sync() (err error) { _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) if e1 != 0 { @@ -1532,6 +1822,21 @@ func Unlink(path string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Unmount(path string, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -1615,3 +1920,18 @@ func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go index 55b0741..040e2f7 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go @@ -1,5 +1,5 @@ // mksyscall.pl -tags freebsd,amd64 syscall_bsd.go syscall_freebsd.go syscall_freebsd_amd64.go -// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT +// Code generated by the command above; see README.md. DO NOT EDIT. // +build freebsd,amd64 @@ -266,6 +266,117 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func pipe() (r int, w int, err error) { r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) r = int(r0) @@ -278,6 +389,33 @@ func pipe() (r int, w int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Access(path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -303,6 +441,36 @@ func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func CapEnter() (err error) { + _, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func capRightsGet(version int, fd int, rightsp *CapRights) (err error) { + _, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func capRightsLimit(fd int, rightsp *CapRights) (err error) { + _, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Chdir(path string) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -640,6 +808,21 @@ func Fadvise(fd int, offset int64, length int64, advice int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fchdir(fd int) (err error) { _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) if e1 != 0 { @@ -670,6 +853,21 @@ func Fchmod(fd int, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fchown(fd int, uid int, gid int) (err error) { _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) if e1 != 0 { @@ -680,6 +878,21 @@ func Fchown(fd int, uid int, gid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Flock(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) if e1 != 0 { @@ -711,6 +924,21 @@ func Fstat(fd int, stat *Stat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fstatfs(fd int, stat *Statfs_t) (err error) { _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { @@ -741,6 +969,23 @@ func Ftruncate(fd int, length int64) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { var _p0 unsafe.Pointer if len(buf) > 0 { @@ -949,6 +1194,26 @@ func Link(path string, link string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Listen(s int, backlog int) (err error) { _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) if e1 != 0 { @@ -989,13 +1254,13 @@ func Mkdir(path string, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mkfifo(path string, mode uint32) (err error) { +func Mkdirat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } - _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) if e1 != 0 { err = errnoErr(e1) } @@ -1004,39 +1269,13 @@ func Mkfifo(path string, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mknod(path string, mode uint32, dev int) (err error) { +func Mkfifo(path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } - _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } @@ -1045,14 +1284,13 @@ func Mlockall(flags int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return } - _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) if e1 != 0 { err = errnoErr(e1) } @@ -1061,14 +1299,8 @@ func Mprotect(b []byte, prot int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { err = errnoErr(e1) } @@ -1077,18 +1309,14 @@ func Munlock(b []byte) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Munlockall() (err error) { - _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Nanosleep(time *Timespec, leftover *Timespec) (err error) { - _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) if e1 != 0 { err = errnoErr(e1) } @@ -1097,13 +1325,13 @@ func Nanosleep(time *Timespec, leftover *Timespec) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Open(path string, mode int, perm uint32) (fd int, err error) { +func Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } - r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1202,6 +1430,28 @@ func Readlink(path string, buf []byte) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Rename(from string, to string) (err error) { var _p0 *byte _p0, err = BytePtrFromString(from) @@ -1222,6 +1472,26 @@ func Rename(from string, to string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Revoke(path string) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -1469,6 +1739,26 @@ func Symlink(path string, link string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Sync() (err error) { _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) if e1 != 0 { @@ -1532,6 +1822,21 @@ func Unlink(path string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Unmount(path string, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -1615,3 +1920,18 @@ func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go index 0e9b42b..cddc5e8 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go @@ -1,5 +1,5 @@ // mksyscall.pl -l32 -arm -tags freebsd,arm syscall_bsd.go syscall_freebsd.go syscall_freebsd_arm.go -// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT +// Code generated by the command above; see README.md. DO NOT EDIT. // +build freebsd,arm @@ -266,6 +266,117 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func pipe() (r int, w int, err error) { r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) r = int(r0) @@ -278,6 +389,33 @@ func pipe() (r int, w int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Access(path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -303,6 +441,36 @@ func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func CapEnter() (err error) { + _, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func capRightsGet(version int, fd int, rightsp *CapRights) (err error) { + _, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func capRightsLimit(fd int, rightsp *CapRights) (err error) { + _, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Chdir(path string) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -640,6 +808,21 @@ func Fadvise(fd int, offset int64, length int64, advice int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fchdir(fd int) (err error) { _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) if e1 != 0 { @@ -670,6 +853,21 @@ func Fchmod(fd int, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fchown(fd int, uid int, gid int) (err error) { _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) if e1 != 0 { @@ -680,6 +878,21 @@ func Fchown(fd int, uid int, gid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Flock(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) if e1 != 0 { @@ -711,6 +924,21 @@ func Fstat(fd int, stat *Stat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fstatfs(fd int, stat *Statfs_t) (err error) { _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { @@ -741,6 +969,23 @@ func Ftruncate(fd int, length int64) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { var _p0 unsafe.Pointer if len(buf) > 0 { @@ -949,6 +1194,26 @@ func Link(path string, link string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Listen(s int, backlog int) (err error) { _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) if e1 != 0 { @@ -989,13 +1254,13 @@ func Mkdir(path string, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mkfifo(path string, mode uint32) (err error) { +func Mkdirat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } - _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) if e1 != 0 { err = errnoErr(e1) } @@ -1004,39 +1269,13 @@ func Mkfifo(path string, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mknod(path string, mode uint32, dev int) (err error) { +func Mkfifo(path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } - _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } @@ -1045,14 +1284,13 @@ func Mlockall(flags int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return } - _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) if e1 != 0 { err = errnoErr(e1) } @@ -1061,14 +1299,8 @@ func Mprotect(b []byte, prot int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { err = errnoErr(e1) } @@ -1077,18 +1309,14 @@ func Munlock(b []byte) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Munlockall() (err error) { - _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Nanosleep(time *Timespec, leftover *Timespec) (err error) { - _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) if e1 != 0 { err = errnoErr(e1) } @@ -1097,13 +1325,13 @@ func Nanosleep(time *Timespec, leftover *Timespec) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Open(path string, mode int, perm uint32) (fd int, err error) { +func Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } - r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1202,6 +1430,28 @@ func Readlink(path string, buf []byte) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Rename(from string, to string) (err error) { var _p0 *byte _p0, err = BytePtrFromString(from) @@ -1222,6 +1472,26 @@ func Rename(from string, to string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Revoke(path string) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -1469,6 +1739,26 @@ func Symlink(path string, link string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Sync() (err error) { _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) if e1 != 0 { @@ -1532,6 +1822,21 @@ func Unlink(path string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Unmount(path string, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -1615,3 +1920,18 @@ func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go index e119de0..ef9602c 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go @@ -14,6 +14,21 @@ var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { @@ -511,8 +526,19 @@ func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Exit(code int) { - Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + SyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0) return } @@ -563,21 +589,6 @@ func Fchmod(fd int, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -663,7 +674,7 @@ func Getpgid(pid int) (pgid int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpid() (pid int) { - r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0) pid = int(r0) return } @@ -671,7 +682,7 @@ func Getpid() (pid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getppid() (ppid int) { - r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0) ppid = int(r0) return } @@ -728,7 +739,7 @@ func Getsid(pid int) (sid int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Gettid() (tid int) { - r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0) tid = int(r0) return } @@ -827,6 +838,33 @@ func Klogctl(typ int, buf []byte) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Listxattr(path string, dest []byte) (sz int, err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -849,6 +887,74 @@ func Listxattr(path string, dest []byte) (sz int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Mkdirat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -929,6 +1035,17 @@ func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func read(fd int, p []byte) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { @@ -1121,8 +1238,33 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Sync() { - Syscall(SYS_SYNC, 0, 0, 0) + SyscallNoError(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } return } @@ -1171,7 +1313,7 @@ func Times(tms *Tms) (ticks uintptr, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Umask(mask int) (oldmask int) { - r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + r0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0) oldmask = int(r0) return } @@ -1330,14 +1472,24 @@ func Mlock(b []byte) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Munlock(b []byte) (err error) { +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) if e1 != 0 { err = errnoErr(e1) } @@ -1346,8 +1498,14 @@ func Munlock(b []byte) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) if e1 != 0 { err = errnoErr(e1) } @@ -1426,6 +1584,21 @@ func Fstat(fd int, stat *Stat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Ftruncate(fd int, length int64) (err error) { _, _, e1 := Syscall(SYS_FTRUNCATE64, uintptr(fd), uintptr(length), uintptr(length>>32)) if e1 != 0 { @@ -1437,7 +1610,7 @@ func Ftruncate(fd int, length int64) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getegid() (egid int) { - r0, _, _ := RawSyscall(SYS_GETEGID32, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETEGID32, 0, 0, 0) egid = int(r0) return } @@ -1445,7 +1618,7 @@ func Getegid() (egid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Geteuid() (euid int) { - r0, _, _ := RawSyscall(SYS_GETEUID32, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETEUID32, 0, 0, 0) euid = int(r0) return } @@ -1453,7 +1626,7 @@ func Geteuid() (euid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getgid() (gid int) { - r0, _, _ := RawSyscall(SYS_GETGID32, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETGID32, 0, 0, 0) gid = int(r0) return } @@ -1461,7 +1634,7 @@ func Getgid() (gid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETUID32, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETUID32, 0, 0, 0) uid = int(r0) return } diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go index 5a6b63e..63054b3 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go @@ -14,6 +14,21 @@ var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { @@ -511,8 +526,19 @@ func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Exit(code int) { - Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + SyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0) return } @@ -563,21 +589,6 @@ func Fchmod(fd int, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -663,7 +674,7 @@ func Getpgid(pid int) (pgid int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpid() (pid int) { - r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0) pid = int(r0) return } @@ -671,7 +682,7 @@ func Getpid() (pid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getppid() (ppid int) { - r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0) ppid = int(r0) return } @@ -728,7 +739,7 @@ func Getsid(pid int) (sid int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Gettid() (tid int) { - r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0) tid = int(r0) return } @@ -827,6 +838,33 @@ func Klogctl(typ int, buf []byte) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Listxattr(path string, dest []byte) (sz int, err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -849,6 +887,74 @@ func Listxattr(path string, dest []byte) (sz int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Mkdirat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -929,6 +1035,17 @@ func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func read(fd int, p []byte) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { @@ -1121,8 +1238,33 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Sync() { - Syscall(SYS_SYNC, 0, 0, 0) + SyscallNoError(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } return } @@ -1171,7 +1313,7 @@ func Times(tms *Tms) (ticks uintptr, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Umask(mask int) (oldmask int) { - r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + r0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0) oldmask = int(r0) return } @@ -1330,14 +1472,24 @@ func Mlock(b []byte) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Munlock(b []byte) (err error) { +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) if e1 != 0 { err = errnoErr(e1) } @@ -1346,8 +1498,14 @@ func Munlock(b []byte) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) if e1 != 0 { err = errnoErr(e1) } @@ -1423,6 +1581,21 @@ func Fstat(fd int, stat *Stat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fstatfs(fd int, buf *Statfs_t) (err error) { _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) if e1 != 0 { @@ -1444,7 +1617,7 @@ func Ftruncate(fd int, length int64) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getegid() (egid int) { - r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) egid = int(r0) return } @@ -1452,7 +1625,7 @@ func Getegid() (egid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Geteuid() (euid int) { - r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) euid = int(r0) return } @@ -1460,7 +1633,7 @@ func Geteuid() (euid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getgid() (gid int) { - r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) gid = int(r0) return } @@ -1478,7 +1651,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) uid = int(r0) return } diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go index 7de84dc..8b10ee1 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go @@ -14,6 +14,21 @@ var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { @@ -511,8 +526,19 @@ func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Exit(code int) { - Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + SyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0) return } @@ -563,21 +589,6 @@ func Fchmod(fd int, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -663,7 +674,7 @@ func Getpgid(pid int) (pgid int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpid() (pid int) { - r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0) pid = int(r0) return } @@ -671,7 +682,7 @@ func Getpid() (pid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getppid() (ppid int) { - r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0) ppid = int(r0) return } @@ -728,7 +739,7 @@ func Getsid(pid int) (sid int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Gettid() (tid int) { - r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0) tid = int(r0) return } @@ -827,6 +838,33 @@ func Klogctl(typ int, buf []byte) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Listxattr(path string, dest []byte) (sz int, err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -849,6 +887,74 @@ func Listxattr(path string, dest []byte) (sz int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Mkdirat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -929,6 +1035,17 @@ func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func read(fd int, p []byte) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { @@ -1121,8 +1238,33 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Sync() { - Syscall(SYS_SYNC, 0, 0, 0) + SyscallNoError(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } return } @@ -1171,7 +1313,7 @@ func Times(tms *Tms) (ticks uintptr, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Umask(mask int) (oldmask int) { - r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + r0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0) oldmask = int(r0) return } @@ -1330,14 +1472,24 @@ func Mlock(b []byte) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Munlock(b []byte) (err error) { +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) if e1 != 0 { err = errnoErr(e1) } @@ -1346,8 +1498,14 @@ func Munlock(b []byte) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) if e1 != 0 { err = errnoErr(e1) } @@ -1585,8 +1743,23 @@ func Fstat(fd int, stat *Stat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Getegid() (egid int) { - r0, _, _ := RawSyscall(SYS_GETEGID32, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETEGID32, 0, 0, 0) egid = int(r0) return } @@ -1594,7 +1767,7 @@ func Getegid() (egid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Geteuid() (euid int) { - r0, _, _ := RawSyscall(SYS_GETEUID32, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETEUID32, 0, 0, 0) euid = int(r0) return } @@ -1602,7 +1775,7 @@ func Geteuid() (euid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getgid() (gid int) { - r0, _, _ := RawSyscall(SYS_GETGID32, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETGID32, 0, 0, 0) gid = int(r0) return } @@ -1610,7 +1783,7 @@ func Getgid() (gid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETUID32, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETUID32, 0, 0, 0) uid = int(r0) return } diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go index 4a6a122..8c9e26a 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go @@ -14,6 +14,21 @@ var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { @@ -511,8 +526,19 @@ func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Exit(code int) { - Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + SyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0) return } @@ -563,21 +589,6 @@ func Fchmod(fd int, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -663,7 +674,7 @@ func Getpgid(pid int) (pgid int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpid() (pid int) { - r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0) pid = int(r0) return } @@ -671,7 +682,7 @@ func Getpid() (pid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getppid() (ppid int) { - r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0) ppid = int(r0) return } @@ -728,7 +739,7 @@ func Getsid(pid int) (sid int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Gettid() (tid int) { - r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0) tid = int(r0) return } @@ -827,6 +838,33 @@ func Klogctl(typ int, buf []byte) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Listxattr(path string, dest []byte) (sz int, err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -849,6 +887,74 @@ func Listxattr(path string, dest []byte) (sz int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Mkdirat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -929,6 +1035,17 @@ func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func read(fd int, p []byte) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { @@ -1121,8 +1238,33 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Sync() { - Syscall(SYS_SYNC, 0, 0, 0) + SyscallNoError(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } return } @@ -1171,7 +1313,7 @@ func Times(tms *Tms) (ticks uintptr, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Umask(mask int) (oldmask int) { - r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + r0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0) oldmask = int(r0) return } @@ -1330,14 +1472,24 @@ func Mlock(b []byte) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Munlock(b []byte) (err error) { +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) if e1 != 0 { err = errnoErr(e1) } @@ -1346,8 +1498,14 @@ func Munlock(b []byte) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) if e1 != 0 { err = errnoErr(e1) } @@ -1383,6 +1541,16 @@ func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fchown(fd int, uid int, gid int) (err error) { _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) if e1 != 0 { @@ -1439,7 +1607,7 @@ func Ftruncate(fd int, length int64) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getegid() (egid int) { - r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) egid = int(r0) return } @@ -1447,7 +1615,7 @@ func Getegid() (egid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Geteuid() (euid int) { - r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) euid = int(r0) return } @@ -1455,7 +1623,7 @@ func Geteuid() (euid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getgid() (gid int) { - r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) gid = int(r0) return } @@ -1473,7 +1641,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) uid = int(r0) return } @@ -1535,17 +1703,6 @@ func Seek(fd int, offset int64, whence int) (off int64, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) written = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go index 3b4c934..8dc2b58 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go @@ -14,6 +14,21 @@ var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { @@ -511,8 +526,19 @@ func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Exit(code int) { - Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + SyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0) return } @@ -563,21 +589,6 @@ func Fchmod(fd int, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -663,7 +674,7 @@ func Getpgid(pid int) (pgid int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpid() (pid int) { - r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0) pid = int(r0) return } @@ -671,7 +682,7 @@ func Getpid() (pid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getppid() (ppid int) { - r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0) ppid = int(r0) return } @@ -728,7 +739,7 @@ func Getsid(pid int) (sid int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Gettid() (tid int) { - r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0) tid = int(r0) return } @@ -827,6 +838,33 @@ func Klogctl(typ int, buf []byte) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Listxattr(path string, dest []byte) (sz int, err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -849,6 +887,74 @@ func Listxattr(path string, dest []byte) (sz int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Mkdirat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -929,6 +1035,17 @@ func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func read(fd int, p []byte) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { @@ -1121,8 +1238,33 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Sync() { - Syscall(SYS_SYNC, 0, 0, 0) + SyscallNoError(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } return } @@ -1171,7 +1313,7 @@ func Times(tms *Tms) (ticks uintptr, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Umask(mask int) (oldmask int) { - r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + r0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0) oldmask = int(r0) return } @@ -1330,14 +1472,24 @@ func Mlock(b []byte) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Munlock(b []byte) (err error) { +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) if e1 != 0 { err = errnoErr(e1) } @@ -1346,8 +1498,14 @@ func Munlock(b []byte) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) if e1 != 0 { err = errnoErr(e1) } @@ -1376,6 +1534,16 @@ func Dup2(oldfd int, newfd int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall9(SYS_FADVISE64, uintptr(fd), 0, uintptr(offset>>32), uintptr(offset), uintptr(length>>32), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fchown(fd int, uid int, gid int) (err error) { _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) if e1 != 0 { @@ -1397,7 +1565,7 @@ func Ftruncate(fd int, length int64) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getegid() (egid int) { - r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) egid = int(r0) return } @@ -1405,7 +1573,7 @@ func Getegid() (egid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Geteuid() (euid int) { - r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) euid = int(r0) return } @@ -1413,7 +1581,7 @@ func Geteuid() (euid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getgid() (gid int) { - r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) gid = int(r0) return } @@ -1421,7 +1589,7 @@ func Getgid() (gid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) uid = int(r0) return } @@ -1871,6 +2039,21 @@ func Fstat(fd int, stat *Stat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Stat(path string, stat *Stat_t) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go index 5a496a9..e8beef8 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go @@ -14,6 +14,21 @@ var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { @@ -511,8 +526,19 @@ func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Exit(code int) { - Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + SyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0) return } @@ -563,21 +589,6 @@ func Fchmod(fd int, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -663,7 +674,7 @@ func Getpgid(pid int) (pgid int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpid() (pid int) { - r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0) pid = int(r0) return } @@ -671,7 +682,7 @@ func Getpid() (pid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getppid() (ppid int) { - r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0) ppid = int(r0) return } @@ -728,7 +739,7 @@ func Getsid(pid int) (sid int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Gettid() (tid int) { - r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0) tid = int(r0) return } @@ -827,6 +838,33 @@ func Klogctl(typ int, buf []byte) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Listxattr(path string, dest []byte) (sz int, err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -849,6 +887,74 @@ func Listxattr(path string, dest []byte) (sz int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Mkdirat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -929,6 +1035,17 @@ func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func read(fd int, p []byte) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { @@ -1121,8 +1238,33 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Sync() { - Syscall(SYS_SYNC, 0, 0, 0) + SyscallNoError(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } return } @@ -1171,7 +1313,7 @@ func Times(tms *Tms) (ticks uintptr, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Umask(mask int) (oldmask int) { - r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + r0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0) oldmask = int(r0) return } @@ -1330,14 +1472,24 @@ func Mlock(b []byte) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Munlock(b []byte) (err error) { +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) if e1 != 0 { err = errnoErr(e1) } @@ -1346,8 +1498,14 @@ func Munlock(b []byte) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) if e1 != 0 { err = errnoErr(e1) } @@ -1393,6 +1551,16 @@ func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fchown(fd int, uid int, gid int) (err error) { _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) if e1 != 0 { @@ -1403,6 +1571,21 @@ func Fchown(fd int, uid int, gid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fstatfs(fd int, buf *Statfs_t) (err error) { _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) if e1 != 0 { @@ -1424,7 +1607,7 @@ func Ftruncate(fd int, length int64) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getegid() (egid int) { - r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) egid = int(r0) return } @@ -1432,7 +1615,7 @@ func Getegid() (egid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Geteuid() (euid int) { - r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) euid = int(r0) return } @@ -1440,7 +1623,7 @@ func Geteuid() (euid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getgid() (gid int) { - r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) gid = int(r0) return } @@ -1458,7 +1641,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) uid = int(r0) return } @@ -1545,17 +1728,6 @@ func Seek(fd int, offset int64, whence int) (off int64, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) written = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go index cfa7fe8..899e440 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go @@ -14,6 +14,21 @@ var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { @@ -511,8 +526,19 @@ func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Exit(code int) { - Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + SyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0) return } @@ -563,21 +589,6 @@ func Fchmod(fd int, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -663,7 +674,7 @@ func Getpgid(pid int) (pgid int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpid() (pid int) { - r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0) pid = int(r0) return } @@ -671,7 +682,7 @@ func Getpid() (pid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getppid() (ppid int) { - r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0) ppid = int(r0) return } @@ -728,7 +739,7 @@ func Getsid(pid int) (sid int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Gettid() (tid int) { - r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0) tid = int(r0) return } @@ -827,6 +838,33 @@ func Klogctl(typ int, buf []byte) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Listxattr(path string, dest []byte) (sz int, err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -849,6 +887,74 @@ func Listxattr(path string, dest []byte) (sz int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Mkdirat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -929,6 +1035,17 @@ func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func read(fd int, p []byte) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { @@ -1121,8 +1238,33 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Sync() { - Syscall(SYS_SYNC, 0, 0, 0) + SyscallNoError(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } return } @@ -1171,7 +1313,7 @@ func Times(tms *Tms) (ticks uintptr, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Umask(mask int) (oldmask int) { - r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + r0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0) oldmask = int(r0) return } @@ -1330,14 +1472,24 @@ func Mlock(b []byte) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Munlock(b []byte) (err error) { +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) if e1 != 0 { err = errnoErr(e1) } @@ -1346,8 +1498,14 @@ func Munlock(b []byte) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) if e1 != 0 { err = errnoErr(e1) } @@ -1393,6 +1551,16 @@ func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fchown(fd int, uid int, gid int) (err error) { _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) if e1 != 0 { @@ -1403,6 +1571,21 @@ func Fchown(fd int, uid int, gid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fstatfs(fd int, buf *Statfs_t) (err error) { _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) if e1 != 0 { @@ -1424,7 +1607,7 @@ func Ftruncate(fd int, length int64) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getegid() (egid int) { - r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) egid = int(r0) return } @@ -1432,7 +1615,7 @@ func Getegid() (egid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Geteuid() (euid int) { - r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) euid = int(r0) return } @@ -1440,7 +1623,7 @@ func Geteuid() (euid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getgid() (gid int) { - r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) gid = int(r0) return } @@ -1458,7 +1641,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) uid = int(r0) return } @@ -1545,17 +1728,6 @@ func Seek(fd int, offset int64, whence int) (off int64, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) written = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go index 7f83efd..7a477cb 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go @@ -14,6 +14,21 @@ var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { @@ -511,8 +526,19 @@ func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Exit(code int) { - Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + SyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0) return } @@ -563,21 +589,6 @@ func Fchmod(fd int, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -663,7 +674,7 @@ func Getpgid(pid int) (pgid int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpid() (pid int) { - r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0) pid = int(r0) return } @@ -671,7 +682,7 @@ func Getpid() (pid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getppid() (ppid int) { - r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0) ppid = int(r0) return } @@ -728,7 +739,7 @@ func Getsid(pid int) (sid int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Gettid() (tid int) { - r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0) tid = int(r0) return } @@ -827,6 +838,33 @@ func Klogctl(typ int, buf []byte) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Listxattr(path string, dest []byte) (sz int, err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -849,6 +887,74 @@ func Listxattr(path string, dest []byte) (sz int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Mkdirat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -929,6 +1035,17 @@ func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func read(fd int, p []byte) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { @@ -1121,8 +1238,33 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Sync() { - Syscall(SYS_SYNC, 0, 0, 0) + SyscallNoError(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } return } @@ -1171,7 +1313,7 @@ func Times(tms *Tms) (ticks uintptr, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Umask(mask int) (oldmask int) { - r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + r0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0) oldmask = int(r0) return } @@ -1330,14 +1472,24 @@ func Mlock(b []byte) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Munlock(b []byte) (err error) { +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) if e1 != 0 { err = errnoErr(e1) } @@ -1346,8 +1498,14 @@ func Munlock(b []byte) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) if e1 != 0 { err = errnoErr(e1) } @@ -1376,6 +1534,16 @@ func Dup2(oldfd int, newfd int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall9(SYS_FADVISE64, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fchown(fd int, uid int, gid int) (err error) { _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) if e1 != 0 { @@ -1397,7 +1565,7 @@ func Ftruncate(fd int, length int64) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getegid() (egid int) { - r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) egid = int(r0) return } @@ -1405,7 +1573,7 @@ func Getegid() (egid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Geteuid() (euid int) { - r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) euid = int(r0) return } @@ -1413,7 +1581,7 @@ func Geteuid() (euid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getgid() (gid int) { - r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) gid = int(r0) return } @@ -1421,7 +1589,7 @@ func Getgid() (gid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) uid = int(r0) return } @@ -1871,6 +2039,21 @@ func Fstat(fd int, stat *Stat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Stat(path string, stat *Stat_t) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go index 9a57e35..9dc4c7d 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go @@ -14,6 +14,21 @@ var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { @@ -511,8 +526,19 @@ func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Exit(code int) { - Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + SyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0) return } @@ -563,21 +589,6 @@ func Fchmod(fd int, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -663,7 +674,7 @@ func Getpgid(pid int) (pgid int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpid() (pid int) { - r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0) pid = int(r0) return } @@ -671,7 +682,7 @@ func Getpid() (pid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getppid() (ppid int) { - r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0) ppid = int(r0) return } @@ -728,7 +739,7 @@ func Getsid(pid int) (sid int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Gettid() (tid int) { - r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0) tid = int(r0) return } @@ -827,6 +838,33 @@ func Klogctl(typ int, buf []byte) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Listxattr(path string, dest []byte) (sz int, err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -849,6 +887,74 @@ func Listxattr(path string, dest []byte) (sz int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Mkdirat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -929,6 +1035,17 @@ func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func read(fd int, p []byte) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { @@ -1121,8 +1238,33 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Sync() { - Syscall(SYS_SYNC, 0, 0, 0) + SyscallNoError(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } return } @@ -1171,7 +1313,7 @@ func Times(tms *Tms) (ticks uintptr, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Umask(mask int) (oldmask int) { - r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + r0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0) oldmask = int(r0) return } @@ -1330,14 +1472,24 @@ func Mlock(b []byte) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Munlock(b []byte) (err error) { +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) if e1 != 0 { err = errnoErr(e1) } @@ -1346,8 +1498,14 @@ func Munlock(b []byte) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) if e1 != 0 { err = errnoErr(e1) } @@ -1393,6 +1551,16 @@ func Dup2(oldfd int, newfd int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fchown(fd int, uid int, gid int) (err error) { _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) if e1 != 0 { @@ -1413,6 +1581,21 @@ func Fstat(fd int, stat *Stat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fstatfs(fd int, buf *Statfs_t) (err error) { _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) if e1 != 0 { @@ -1434,7 +1617,7 @@ func Ftruncate(fd int, length int64) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getegid() (egid int) { - r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) egid = int(r0) return } @@ -1442,7 +1625,7 @@ func Getegid() (egid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Geteuid() (euid int) { - r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) euid = int(r0) return } @@ -1450,7 +1633,7 @@ func Geteuid() (euid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getgid() (gid int) { - r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) gid = int(r0) return } @@ -1468,7 +1651,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) uid = int(r0) return } @@ -1602,7 +1785,7 @@ func Seek(fd int, offset int64, whence int) (off int64, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go index d12ce4d..f0d1ee1 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go @@ -14,6 +14,21 @@ var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { @@ -511,8 +526,19 @@ func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Exit(code int) { - Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + SyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0) return } @@ -563,21 +589,6 @@ func Fchmod(fd int, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -663,7 +674,7 @@ func Getpgid(pid int) (pgid int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpid() (pid int) { - r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0) pid = int(r0) return } @@ -671,7 +682,7 @@ func Getpid() (pid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getppid() (ppid int) { - r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0) ppid = int(r0) return } @@ -728,7 +739,7 @@ func Getsid(pid int) (sid int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Gettid() (tid int) { - r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0) tid = int(r0) return } @@ -827,6 +838,33 @@ func Klogctl(typ int, buf []byte) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Listxattr(path string, dest []byte) (sz int, err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -849,6 +887,74 @@ func Listxattr(path string, dest []byte) (sz int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Mkdirat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -929,6 +1035,17 @@ func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func read(fd int, p []byte) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { @@ -1121,8 +1238,33 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Sync() { - Syscall(SYS_SYNC, 0, 0, 0) + SyscallNoError(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } return } @@ -1171,7 +1313,7 @@ func Times(tms *Tms) (ticks uintptr, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Umask(mask int) (oldmask int) { - r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + r0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0) oldmask = int(r0) return } @@ -1330,14 +1472,24 @@ func Mlock(b []byte) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Munlock(b []byte) (err error) { +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) if e1 != 0 { err = errnoErr(e1) } @@ -1346,8 +1498,14 @@ func Munlock(b []byte) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) if e1 != 0 { err = errnoErr(e1) } @@ -1393,6 +1551,16 @@ func Dup2(oldfd int, newfd int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fchown(fd int, uid int, gid int) (err error) { _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) if e1 != 0 { @@ -1413,6 +1581,21 @@ func Fstat(fd int, stat *Stat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fstatfs(fd int, buf *Statfs_t) (err error) { _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) if e1 != 0 { @@ -1434,7 +1617,7 @@ func Ftruncate(fd int, length int64) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getegid() (egid int) { - r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) egid = int(r0) return } @@ -1442,7 +1625,7 @@ func Getegid() (egid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Geteuid() (euid int) { - r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) euid = int(r0) return } @@ -1450,7 +1633,7 @@ func Geteuid() (euid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getgid() (gid int) { - r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) gid = int(r0) return } @@ -1468,7 +1651,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) uid = int(r0) return } @@ -1602,7 +1785,7 @@ func Seek(fd int, offset int64, whence int) (off int64, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go index bd28929..c443baf 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go @@ -14,6 +14,21 @@ var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { @@ -511,8 +526,19 @@ func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Exit(code int) { - Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + SyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0) return } @@ -563,21 +589,6 @@ func Fchmod(fd int, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -663,7 +674,7 @@ func Getpgid(pid int) (pgid int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpid() (pid int) { - r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0) pid = int(r0) return } @@ -671,7 +682,7 @@ func Getpid() (pid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getppid() (ppid int) { - r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0) ppid = int(r0) return } @@ -728,7 +739,7 @@ func Getsid(pid int) (sid int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Gettid() (tid int) { - r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0) tid = int(r0) return } @@ -827,6 +838,33 @@ func Klogctl(typ int, buf []byte) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Listxattr(path string, dest []byte) (sz int, err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -849,6 +887,74 @@ func Listxattr(path string, dest []byte) (sz int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Mkdirat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -929,6 +1035,17 @@ func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func read(fd int, p []byte) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { @@ -1121,8 +1238,33 @@ func Setxattr(path string, attr string, data []byte, flags int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Sync() { - Syscall(SYS_SYNC, 0, 0, 0) + SyscallNoError(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } return } @@ -1171,7 +1313,7 @@ func Times(tms *Tms) (ticks uintptr, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Umask(mask int) (oldmask int) { - r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + r0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0) oldmask = int(r0) return } @@ -1330,14 +1472,24 @@ func Mlock(b []byte) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Munlock(b []byte) (err error) { +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { var _p0 unsafe.Pointer if len(b) > 0 { _p0 = unsafe.Pointer(&b[0]) } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) if e1 != 0 { err = errnoErr(e1) } @@ -1346,8 +1498,14 @@ func Munlock(b []byte) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) if e1 != 0 { err = errnoErr(e1) } @@ -1423,6 +1581,21 @@ func Fstat(fd int, stat *Stat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fstatfs(fd int, buf *Statfs_t) (err error) { _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) if e1 != 0 { @@ -1444,7 +1617,7 @@ func Ftruncate(fd int, length int64) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getegid() (egid int) { - r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) egid = int(r0) return } @@ -1452,7 +1625,7 @@ func Getegid() (egid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Geteuid() (euid int) { - r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) euid = int(r0) return } @@ -1460,7 +1633,7 @@ func Geteuid() (euid int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getgid() (gid int) { - r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) gid = int(r0) return } @@ -1478,7 +1651,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getuid() (uid int) { - r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) uid = int(r0) return } diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go index 2dd9843..c01b3b6 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go @@ -1222,6 +1222,16 @@ func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Dup2(oldfd int, newfd int) (err error) { _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go index 3182345..fb4b962 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go @@ -1,5 +1,5 @@ // mksyscall.pl -l32 -netbsd -tags netbsd,386 syscall_bsd.go syscall_netbsd.go syscall_netbsd_386.go -// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT +// Code generated by the command above; see README.md. DO NOT EDIT. // +build netbsd,386 @@ -266,6 +266,117 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func pipe() (fd1 int, fd2 int, err error) { r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) fd1 = int(r0) @@ -295,6 +406,33 @@ func getdents(fd int, buf []byte) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Access(path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -433,6 +571,16 @@ func Exit(code int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall9(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), 0, uintptr(length), uintptr(length>>32), uintptr(advice), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fchdir(fd int) (err error) { _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) if e1 != 0 { @@ -463,6 +611,21 @@ func Fchmod(fd int, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fchown(fd int, uid int, gid int) (err error) { _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) if e1 != 0 { @@ -504,6 +667,21 @@ func Fstat(fd int, stat *Stat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fsync(fd int) (err error) { _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) if e1 != 0 { @@ -777,74 +955,6 @@ func Mknod(path string, mode uint32, dev int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Nanosleep(time *Timespec, leftover *Timespec) (err error) { _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { @@ -1297,3 +1407,18 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) { } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go index 74ba818..beac82e 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go @@ -1,5 +1,5 @@ // mksyscall.pl -netbsd -tags netbsd,amd64 syscall_bsd.go syscall_netbsd.go syscall_netbsd_amd64.go -// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT +// Code generated by the command above; see README.md. DO NOT EDIT. // +build netbsd,amd64 @@ -266,6 +266,117 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func pipe() (fd1 int, fd2 int, err error) { r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) fd1 = int(r0) @@ -295,6 +406,33 @@ func getdents(fd int, buf []byte) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Access(path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -433,6 +571,16 @@ func Exit(code int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), 0, uintptr(length), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fchdir(fd int) (err error) { _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) if e1 != 0 { @@ -463,6 +611,21 @@ func Fchmod(fd int, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fchown(fd int, uid int, gid int) (err error) { _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) if e1 != 0 { @@ -504,6 +667,21 @@ func Fstat(fd int, stat *Stat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fsync(fd int) (err error) { _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) if e1 != 0 { @@ -777,74 +955,6 @@ func Mknod(path string, mode uint32, dev int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Nanosleep(time *Timespec, leftover *Timespec) (err error) { _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { @@ -1297,3 +1407,18 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) { } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go index 1f346e2..7bd5f60 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go @@ -1,5 +1,5 @@ -// mksyscall.pl -l32 -arm -tags netbsd,arm syscall_bsd.go syscall_netbsd.go syscall_netbsd_arm.go -// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT +// mksyscall.pl -l32 -netbsd -arm -tags netbsd,arm syscall_bsd.go syscall_netbsd.go syscall_netbsd_arm.go +// Code generated by the command above; see README.md. DO NOT EDIT. // +build netbsd,arm @@ -266,6 +266,117 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func pipe() (fd1 int, fd2 int, err error) { r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) fd1 = int(r0) @@ -295,6 +406,33 @@ func getdents(fd int, buf []byte) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Access(path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -433,6 +571,16 @@ func Exit(code int) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall9(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), 0, uintptr(length), uintptr(length>>32), uintptr(advice), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fchdir(fd int) (err error) { _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) if e1 != 0 { @@ -463,6 +611,21 @@ func Fchmod(fd int, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fchown(fd int, uid int, gid int) (err error) { _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) if e1 != 0 { @@ -504,6 +667,21 @@ func Fstat(fd int, stat *Stat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fsync(fd int) (err error) { _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) if e1 != 0 { @@ -777,74 +955,6 @@ func Mknod(path string, mode uint32, dev int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Nanosleep(time *Timespec, leftover *Timespec) (err error) { _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { @@ -1297,3 +1407,18 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) { } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go index ca3e813..5c09c07 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go @@ -1,5 +1,5 @@ // mksyscall.pl -l32 -openbsd -tags openbsd,386 syscall_bsd.go syscall_openbsd.go syscall_openbsd_386.go -// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT +// Code generated by the command above; see README.md. DO NOT EDIT. // +build openbsd,386 @@ -266,6 +266,117 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func pipe(p *[2]_C_int) (err error) { _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) if e1 != 0 { @@ -293,6 +404,33 @@ func getdents(fd int, buf []byte) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Access(path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -461,6 +599,21 @@ func Fchmod(fd int, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fchown(fd int, uid int, gid int) (err error) { _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) if e1 != 0 { @@ -502,6 +655,21 @@ func Fstat(fd int, stat *Stat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fstatfs(fd int, stat *Statfs_t) (err error) { _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { @@ -785,74 +953,6 @@ func Mknod(path string, mode uint32, dev int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Nanosleep(time *Timespec, leftover *Timespec) (err error) { _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { @@ -1355,3 +1455,18 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) { } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go index bf63d55..54ccc93 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go @@ -1,5 +1,5 @@ // mksyscall.pl -openbsd -tags openbsd,amd64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_amd64.go -// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT +// Code generated by the command above; see README.md. DO NOT EDIT. // +build openbsd,amd64 @@ -266,6 +266,117 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func pipe(p *[2]_C_int) (err error) { _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) if e1 != 0 { @@ -293,6 +404,33 @@ func getdents(fd int, buf []byte) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Access(path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -461,6 +599,21 @@ func Fchmod(fd int, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fchown(fd int, uid int, gid int) (err error) { _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) if e1 != 0 { @@ -502,6 +655,21 @@ func Fstat(fd int, stat *Stat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fstatfs(fd int, stat *Statfs_t) (err error) { _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { @@ -785,74 +953,6 @@ func Mknod(path string, mode uint32, dev int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Nanosleep(time *Timespec, leftover *Timespec) (err error) { _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { @@ -1355,3 +1455,18 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) { } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go new file mode 100644 index 0000000..59258b0 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go @@ -0,0 +1,1472 @@ +// mksyscall.pl -l32 -openbsd -arm -tags openbsd,arm syscall_bsd.go syscall_openbsd.go syscall_openbsd_arm.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build openbsd,arm + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(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 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(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 d1ed021..5e88619 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go @@ -25,7 +25,11 @@ import ( //go:cgo_import_dynamic libc___xnet_recvmsg __xnet_recvmsg "libsocket.so" //go:cgo_import_dynamic libc___xnet_sendmsg __xnet_sendmsg "libsocket.so" //go:cgo_import_dynamic libc_acct acct "libc.so" +//go:cgo_import_dynamic libc___makedev __makedev "libc.so" +//go:cgo_import_dynamic libc___major __major "libc.so" +//go:cgo_import_dynamic libc___minor __minor "libc.so" //go:cgo_import_dynamic libc_ioctl ioctl "libc.so" +//go:cgo_import_dynamic libc_poll poll "libc.so" //go:cgo_import_dynamic libc_access access "libc.so" //go:cgo_import_dynamic libc_adjtime adjtime "libc.so" //go:cgo_import_dynamic libc_chdir chdir "libc.so" @@ -43,8 +47,10 @@ import ( //go:cgo_import_dynamic libc_fchown fchown "libc.so" //go:cgo_import_dynamic libc_fchownat fchownat "libc.so" //go:cgo_import_dynamic libc_fdatasync fdatasync "libc.so" +//go:cgo_import_dynamic libc_flock flock "libc.so" //go:cgo_import_dynamic libc_fpathconf fpathconf "libc.so" //go:cgo_import_dynamic libc_fstat fstat "libc.so" +//go:cgo_import_dynamic libc_fstatat fstatat "libc.so" //go:cgo_import_dynamic libc_fstatvfs fstatvfs "libc.so" //go:cgo_import_dynamic libc_getdents getdents "libc.so" //go:cgo_import_dynamic libc_getgid getgid "libc.so" @@ -74,6 +80,7 @@ import ( //go:cgo_import_dynamic libc_mlock mlock "libc.so" //go:cgo_import_dynamic libc_mlockall mlockall "libc.so" //go:cgo_import_dynamic libc_mprotect mprotect "libc.so" +//go:cgo_import_dynamic libc_msync msync "libc.so" //go:cgo_import_dynamic libc_munlock munlock "libc.so" //go:cgo_import_dynamic libc_munlockall munlockall "libc.so" //go:cgo_import_dynamic libc_nanosleep nanosleep "libc.so" @@ -89,6 +96,7 @@ import ( //go:cgo_import_dynamic libc_renameat renameat "libc.so" //go:cgo_import_dynamic libc_rmdir rmdir "libc.so" //go:cgo_import_dynamic libc_lseek lseek "libc.so" +//go:cgo_import_dynamic libc_select select "libc.so" //go:cgo_import_dynamic libc_setegid setegid "libc.so" //go:cgo_import_dynamic libc_seteuid seteuid "libc.so" //go:cgo_import_dynamic libc_setgid setgid "libc.so" @@ -128,7 +136,6 @@ import ( //go:cgo_import_dynamic libc_getpeername getpeername "libsocket.so" //go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so" //go:cgo_import_dynamic libc_recvfrom recvfrom "libsocket.so" -//go:cgo_import_dynamic libc_sysconf sysconf "libc.so" //go:linkname procpipe libc_pipe //go:linkname procgetsockname libc_getsockname @@ -145,7 +152,11 @@ import ( //go:linkname proc__xnet_recvmsg libc___xnet_recvmsg //go:linkname proc__xnet_sendmsg libc___xnet_sendmsg //go:linkname procacct libc_acct +//go:linkname proc__makedev libc___makedev +//go:linkname proc__major libc___major +//go:linkname proc__minor libc___minor //go:linkname procioctl libc_ioctl +//go:linkname procpoll libc_poll //go:linkname procAccess libc_access //go:linkname procAdjtime libc_adjtime //go:linkname procChdir libc_chdir @@ -163,8 +174,10 @@ import ( //go:linkname procFchown libc_fchown //go:linkname procFchownat libc_fchownat //go:linkname procFdatasync libc_fdatasync +//go:linkname procFlock libc_flock //go:linkname procFpathconf libc_fpathconf //go:linkname procFstat libc_fstat +//go:linkname procFstatat libc_fstatat //go:linkname procFstatvfs libc_fstatvfs //go:linkname procGetdents libc_getdents //go:linkname procGetgid libc_getgid @@ -194,6 +207,7 @@ import ( //go:linkname procMlock libc_mlock //go:linkname procMlockall libc_mlockall //go:linkname procMprotect libc_mprotect +//go:linkname procMsync libc_msync //go:linkname procMunlock libc_munlock //go:linkname procMunlockall libc_munlockall //go:linkname procNanosleep libc_nanosleep @@ -209,6 +223,7 @@ import ( //go:linkname procRenameat libc_renameat //go:linkname procRmdir libc_rmdir //go:linkname proclseek libc_lseek +//go:linkname procSelect libc_select //go:linkname procSetegid libc_setegid //go:linkname procSeteuid libc_seteuid //go:linkname procSetgid libc_setgid @@ -248,7 +263,6 @@ import ( //go:linkname procgetpeername libc_getpeername //go:linkname procsetsockopt libc_setsockopt //go:linkname procrecvfrom libc_recvfrom -//go:linkname procsysconf libc_sysconf var ( procpipe, @@ -266,7 +280,11 @@ var ( proc__xnet_recvmsg, proc__xnet_sendmsg, procacct, + proc__makedev, + proc__major, + proc__minor, procioctl, + procpoll, procAccess, procAdjtime, procChdir, @@ -284,8 +302,10 @@ var ( procFchown, procFchownat, procFdatasync, + procFlock, procFpathconf, procFstat, + procFstatat, procFstatvfs, procGetdents, procGetgid, @@ -315,6 +335,7 @@ var ( procMlock, procMlockall, procMprotect, + procMsync, procMunlock, procMunlockall, procNanosleep, @@ -330,6 +351,7 @@ var ( procRenameat, procRmdir, proclseek, + procSelect, procSetegid, procSeteuid, procSetgid, @@ -368,8 +390,7 @@ var ( proc__xnet_getsockopt, procgetpeername, procsetsockopt, - procrecvfrom, - procsysconf syscallFunc + procrecvfrom syscallFunc ) func pipe(p *[2]_C_int) (n int, err error) { @@ -519,6 +540,24 @@ func acct(path *byte) (err error) { return } +func __makedev(version int, major uint, minor uint) (val uint64) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__makedev)), 3, uintptr(version), uintptr(major), uintptr(minor), 0, 0, 0) + val = uint64(r0) + return +} + +func __major(version int, dev uint64) (val uint) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__major)), 2, uintptr(version), uintptr(dev), 0, 0, 0, 0) + val = uint(r0) + return +} + +func __minor(version int, dev uint64) (val uint) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__minor)), 2, uintptr(version), uintptr(dev), 0, 0, 0, 0) + val = uint(r0) + return +} + func ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procioctl)), 3, uintptr(fd), uintptr(req), uintptr(arg), 0, 0, 0) if e1 != 0 { @@ -527,6 +566,15 @@ func ioctl(fd int, req uint, arg uintptr) (err error) { return } +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpoll)), 3, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + func Access(path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -702,6 +750,14 @@ func Fdatasync(fd int) (err error) { return } +func Flock(fd int, how int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFlock)), 2, uintptr(fd), uintptr(how), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + func Fpathconf(fd int, name int) (val int, err error) { r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFpathconf)), 2, uintptr(fd), uintptr(name), 0, 0, 0, 0) val = int(r0) @@ -719,6 +775,19 @@ func Fstat(fd int, stat *Stat_t) (err error) { return } +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstatat)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = e1 + } + return +} + func Fstatvfs(fd int, vfsstat *Statvfs_t) (err error) { _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstatvfs)), 2, uintptr(fd), uintptr(unsafe.Pointer(vfsstat)), 0, 0, 0, 0) if e1 != 0 { @@ -1009,6 +1078,18 @@ func Mprotect(b []byte, prot int) (err error) { return } +func Msync(b []byte, flags int) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMsync)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(flags), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + func Munlock(b []byte) (err error) { var _p0 *byte if len(b) > 0 { @@ -1202,6 +1283,14 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { return } +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSelect)), 5, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = e1 + } + return +} + func Setegid(egid int) (err error) { _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetegid)), 1, uintptr(egid), 0, 0, 0, 0, 0) if e1 != 0 { @@ -1578,12 +1667,3 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl } return } - -func sysconf(name int) (n int64, err error) { - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsysconf)), 1, uintptr(name), 0, 0, 0, 0, 0) - n = int64(r0) - if e1 != 0 { - err = e1 - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go similarity index 100% rename from vendor/golang.org/x/sys/unix/zsysctl_openbsd.go rename to vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go new file mode 100644 index 0000000..83bb935 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go @@ -0,0 +1,270 @@ +// mksysctl_openbsd.pl +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +package unix + +type mibentry struct { + ctlname string + ctloid []_C_int +} + +var sysctlMib = []mibentry{ + {"ddb.console", []_C_int{9, 6}}, + {"ddb.log", []_C_int{9, 7}}, + {"ddb.max_line", []_C_int{9, 3}}, + {"ddb.max_width", []_C_int{9, 2}}, + {"ddb.panic", []_C_int{9, 5}}, + {"ddb.radix", []_C_int{9, 1}}, + {"ddb.tab_stop_width", []_C_int{9, 4}}, + {"ddb.trigger", []_C_int{9, 8}}, + {"fs.posix.setuid", []_C_int{3, 1, 1}}, + {"hw.allowpowerdown", []_C_int{6, 22}}, + {"hw.byteorder", []_C_int{6, 4}}, + {"hw.cpuspeed", []_C_int{6, 12}}, + {"hw.diskcount", []_C_int{6, 10}}, + {"hw.disknames", []_C_int{6, 8}}, + {"hw.diskstats", []_C_int{6, 9}}, + {"hw.machine", []_C_int{6, 1}}, + {"hw.model", []_C_int{6, 2}}, + {"hw.ncpu", []_C_int{6, 3}}, + {"hw.ncpufound", []_C_int{6, 21}}, + {"hw.pagesize", []_C_int{6, 7}}, + {"hw.physmem", []_C_int{6, 19}}, + {"hw.product", []_C_int{6, 15}}, + {"hw.serialno", []_C_int{6, 17}}, + {"hw.setperf", []_C_int{6, 13}}, + {"hw.usermem", []_C_int{6, 20}}, + {"hw.uuid", []_C_int{6, 18}}, + {"hw.vendor", []_C_int{6, 14}}, + {"hw.version", []_C_int{6, 16}}, + {"kern.arandom", []_C_int{1, 37}}, + {"kern.argmax", []_C_int{1, 8}}, + {"kern.boottime", []_C_int{1, 21}}, + {"kern.bufcachepercent", []_C_int{1, 72}}, + {"kern.ccpu", []_C_int{1, 45}}, + {"kern.clockrate", []_C_int{1, 12}}, + {"kern.consdev", []_C_int{1, 75}}, + {"kern.cp_time", []_C_int{1, 40}}, + {"kern.cp_time2", []_C_int{1, 71}}, + {"kern.cryptodevallowsoft", []_C_int{1, 53}}, + {"kern.domainname", []_C_int{1, 22}}, + {"kern.file", []_C_int{1, 73}}, + {"kern.forkstat", []_C_int{1, 42}}, + {"kern.fscale", []_C_int{1, 46}}, + {"kern.fsync", []_C_int{1, 33}}, + {"kern.hostid", []_C_int{1, 11}}, + {"kern.hostname", []_C_int{1, 10}}, + {"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}}, + {"kern.job_control", []_C_int{1, 19}}, + {"kern.malloc.buckets", []_C_int{1, 39, 1}}, + {"kern.malloc.kmemnames", []_C_int{1, 39, 3}}, + {"kern.maxclusters", []_C_int{1, 67}}, + {"kern.maxfiles", []_C_int{1, 7}}, + {"kern.maxlocksperuid", []_C_int{1, 70}}, + {"kern.maxpartitions", []_C_int{1, 23}}, + {"kern.maxproc", []_C_int{1, 6}}, + {"kern.maxthread", []_C_int{1, 25}}, + {"kern.maxvnodes", []_C_int{1, 5}}, + {"kern.mbstat", []_C_int{1, 59}}, + {"kern.msgbuf", []_C_int{1, 48}}, + {"kern.msgbufsize", []_C_int{1, 38}}, + {"kern.nchstats", []_C_int{1, 41}}, + {"kern.netlivelocks", []_C_int{1, 76}}, + {"kern.nfiles", []_C_int{1, 56}}, + {"kern.ngroups", []_C_int{1, 18}}, + {"kern.nosuidcoredump", []_C_int{1, 32}}, + {"kern.nprocs", []_C_int{1, 47}}, + {"kern.nselcoll", []_C_int{1, 43}}, + {"kern.nthreads", []_C_int{1, 26}}, + {"kern.numvnodes", []_C_int{1, 58}}, + {"kern.osrelease", []_C_int{1, 2}}, + {"kern.osrevision", []_C_int{1, 3}}, + {"kern.ostype", []_C_int{1, 1}}, + {"kern.osversion", []_C_int{1, 27}}, + {"kern.pool_debug", []_C_int{1, 77}}, + {"kern.posix1version", []_C_int{1, 17}}, + {"kern.proc", []_C_int{1, 66}}, + {"kern.random", []_C_int{1, 31}}, + {"kern.rawpartition", []_C_int{1, 24}}, + {"kern.saved_ids", []_C_int{1, 20}}, + {"kern.securelevel", []_C_int{1, 9}}, + {"kern.seminfo", []_C_int{1, 61}}, + {"kern.shminfo", []_C_int{1, 62}}, + {"kern.somaxconn", []_C_int{1, 28}}, + {"kern.sominconn", []_C_int{1, 29}}, + {"kern.splassert", []_C_int{1, 54}}, + {"kern.stackgap_random", []_C_int{1, 50}}, + {"kern.sysvipc_info", []_C_int{1, 51}}, + {"kern.sysvmsg", []_C_int{1, 34}}, + {"kern.sysvsem", []_C_int{1, 35}}, + {"kern.sysvshm", []_C_int{1, 36}}, + {"kern.timecounter.choice", []_C_int{1, 69, 4}}, + {"kern.timecounter.hardware", []_C_int{1, 69, 3}}, + {"kern.timecounter.tick", []_C_int{1, 69, 1}}, + {"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}}, + {"kern.tty.maxptys", []_C_int{1, 44, 6}}, + {"kern.tty.nptys", []_C_int{1, 44, 7}}, + {"kern.tty.tk_cancc", []_C_int{1, 44, 4}}, + {"kern.tty.tk_nin", []_C_int{1, 44, 1}}, + {"kern.tty.tk_nout", []_C_int{1, 44, 2}}, + {"kern.tty.tk_rawcc", []_C_int{1, 44, 3}}, + {"kern.tty.ttyinfo", []_C_int{1, 44, 5}}, + {"kern.ttycount", []_C_int{1, 57}}, + {"kern.userasymcrypto", []_C_int{1, 60}}, + {"kern.usercrypto", []_C_int{1, 52}}, + {"kern.usermount", []_C_int{1, 30}}, + {"kern.version", []_C_int{1, 4}}, + {"kern.vnode", []_C_int{1, 13}}, + {"kern.watchdog.auto", []_C_int{1, 64, 2}}, + {"kern.watchdog.period", []_C_int{1, 64, 1}}, + {"net.bpf.bufsize", []_C_int{4, 31, 1}}, + {"net.bpf.maxbufsize", []_C_int{4, 31, 2}}, + {"net.inet.ah.enable", []_C_int{4, 2, 51, 1}}, + {"net.inet.ah.stats", []_C_int{4, 2, 51, 2}}, + {"net.inet.carp.allow", []_C_int{4, 2, 112, 1}}, + {"net.inet.carp.log", []_C_int{4, 2, 112, 3}}, + {"net.inet.carp.preempt", []_C_int{4, 2, 112, 2}}, + {"net.inet.carp.stats", []_C_int{4, 2, 112, 4}}, + {"net.inet.divert.recvspace", []_C_int{4, 2, 258, 1}}, + {"net.inet.divert.sendspace", []_C_int{4, 2, 258, 2}}, + {"net.inet.divert.stats", []_C_int{4, 2, 258, 3}}, + {"net.inet.esp.enable", []_C_int{4, 2, 50, 1}}, + {"net.inet.esp.stats", []_C_int{4, 2, 50, 4}}, + {"net.inet.esp.udpencap", []_C_int{4, 2, 50, 2}}, + {"net.inet.esp.udpencap_port", []_C_int{4, 2, 50, 3}}, + {"net.inet.etherip.allow", []_C_int{4, 2, 97, 1}}, + {"net.inet.etherip.stats", []_C_int{4, 2, 97, 2}}, + {"net.inet.gre.allow", []_C_int{4, 2, 47, 1}}, + {"net.inet.gre.wccp", []_C_int{4, 2, 47, 2}}, + {"net.inet.icmp.bmcastecho", []_C_int{4, 2, 1, 2}}, + {"net.inet.icmp.errppslimit", []_C_int{4, 2, 1, 3}}, + {"net.inet.icmp.maskrepl", []_C_int{4, 2, 1, 1}}, + {"net.inet.icmp.rediraccept", []_C_int{4, 2, 1, 4}}, + {"net.inet.icmp.redirtimeout", []_C_int{4, 2, 1, 5}}, + {"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}}, + {"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}}, + {"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}}, + {"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}}, + {"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}}, + {"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}}, + {"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}}, + {"net.inet.ip.ifq.drops", []_C_int{4, 2, 0, 30, 3}}, + {"net.inet.ip.ifq.len", []_C_int{4, 2, 0, 30, 1}}, + {"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}}, + {"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}}, + {"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}}, + {"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}}, + {"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}}, + {"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}}, + {"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}}, + {"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}}, + {"net.inet.ip.multipath", []_C_int{4, 2, 0, 32}}, + {"net.inet.ip.portfirst", []_C_int{4, 2, 0, 7}}, + {"net.inet.ip.porthifirst", []_C_int{4, 2, 0, 9}}, + {"net.inet.ip.porthilast", []_C_int{4, 2, 0, 10}}, + {"net.inet.ip.portlast", []_C_int{4, 2, 0, 8}}, + {"net.inet.ip.redirect", []_C_int{4, 2, 0, 2}}, + {"net.inet.ip.sourceroute", []_C_int{4, 2, 0, 5}}, + {"net.inet.ip.stats", []_C_int{4, 2, 0, 33}}, + {"net.inet.ip.ttl", []_C_int{4, 2, 0, 3}}, + {"net.inet.ipcomp.enable", []_C_int{4, 2, 108, 1}}, + {"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}}, + {"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}}, + {"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}}, + {"net.inet.mobileip.allow", []_C_int{4, 2, 55, 1}}, + {"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}}, + {"net.inet.pim.stats", []_C_int{4, 2, 103, 1}}, + {"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}}, + {"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}}, + {"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}}, + {"net.inet.tcp.drop", []_C_int{4, 2, 6, 19}}, + {"net.inet.tcp.ecn", []_C_int{4, 2, 6, 14}}, + {"net.inet.tcp.ident", []_C_int{4, 2, 6, 9}}, + {"net.inet.tcp.keepidle", []_C_int{4, 2, 6, 3}}, + {"net.inet.tcp.keepinittime", []_C_int{4, 2, 6, 2}}, + {"net.inet.tcp.keepintvl", []_C_int{4, 2, 6, 4}}, + {"net.inet.tcp.mssdflt", []_C_int{4, 2, 6, 11}}, + {"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}}, + {"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}}, + {"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}}, + {"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}}, + {"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}}, + {"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}}, + {"net.inet.tcp.slowhz", []_C_int{4, 2, 6, 5}}, + {"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}}, + {"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}}, + {"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}}, + {"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}}, + {"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}}, + {"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}}, + {"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}}, + {"net.inet.udp.stats", []_C_int{4, 2, 17, 5}}, + {"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}}, + {"net.inet6.divert.sendspace", []_C_int{4, 24, 86, 2}}, + {"net.inet6.divert.stats", []_C_int{4, 24, 86, 3}}, + {"net.inet6.icmp6.errppslimit", []_C_int{4, 24, 30, 14}}, + {"net.inet6.icmp6.mtudisc_hiwat", []_C_int{4, 24, 30, 16}}, + {"net.inet6.icmp6.mtudisc_lowat", []_C_int{4, 24, 30, 17}}, + {"net.inet6.icmp6.nd6_debug", []_C_int{4, 24, 30, 18}}, + {"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}}, + {"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}}, + {"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}}, + {"net.inet6.icmp6.nd6_prune", []_C_int{4, 24, 30, 6}}, + {"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}}, + {"net.inet6.icmp6.nd6_useloopback", []_C_int{4, 24, 30, 11}}, + {"net.inet6.icmp6.nodeinfo", []_C_int{4, 24, 30, 13}}, + {"net.inet6.icmp6.rediraccept", []_C_int{4, 24, 30, 2}}, + {"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}}, + {"net.inet6.ip6.accept_rtadv", []_C_int{4, 24, 17, 12}}, + {"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}}, + {"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}}, + {"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}}, + {"net.inet6.ip6.defmcasthlim", []_C_int{4, 24, 17, 18}}, + {"net.inet6.ip6.forwarding", []_C_int{4, 24, 17, 1}}, + {"net.inet6.ip6.forwsrcrt", []_C_int{4, 24, 17, 5}}, + {"net.inet6.ip6.hdrnestlimit", []_C_int{4, 24, 17, 15}}, + {"net.inet6.ip6.hlim", []_C_int{4, 24, 17, 3}}, + {"net.inet6.ip6.log_interval", []_C_int{4, 24, 17, 14}}, + {"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}}, + {"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}}, + {"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}}, + {"net.inet6.ip6.maxifdefrouters", []_C_int{4, 24, 17, 47}}, + {"net.inet6.ip6.maxifprefixes", []_C_int{4, 24, 17, 46}}, + {"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}}, + {"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}}, + {"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}}, + {"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}}, + {"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}}, + {"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}}, + {"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}}, + {"net.inet6.ip6.rr_prune", []_C_int{4, 24, 17, 22}}, + {"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}}, + {"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}}, + {"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}}, + {"net.inet6.ip6.v6only", []_C_int{4, 24, 17, 24}}, + {"net.key.sadb_dump", []_C_int{4, 30, 1}}, + {"net.key.spd_dump", []_C_int{4, 30, 2}}, + {"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}}, + {"net.mpls.ifq.drops", []_C_int{4, 33, 3, 3}}, + {"net.mpls.ifq.len", []_C_int{4, 33, 3, 1}}, + {"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}}, + {"net.mpls.mapttl_ip", []_C_int{4, 33, 5}}, + {"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}}, + {"net.mpls.maxloop_inkernel", []_C_int{4, 33, 4}}, + {"net.mpls.ttl", []_C_int{4, 33, 2}}, + {"net.pflow.stats", []_C_int{4, 34, 1}}, + {"net.pipex.enable", []_C_int{4, 35, 1}}, + {"vm.anonmin", []_C_int{2, 7}}, + {"vm.loadavg", []_C_int{2, 2}}, + {"vm.maxslp", []_C_int{2, 10}}, + {"vm.nkmempages", []_C_int{2, 6}}, + {"vm.psstrings", []_C_int{2, 3}}, + {"vm.swapencrypt.enable", []_C_int{2, 5, 0}}, + {"vm.swapencrypt.keyscreated", []_C_int{2, 5, 1}}, + {"vm.swapencrypt.keysdeleted", []_C_int{2, 5, 2}}, + {"vm.uspace", []_C_int{2, 11}}, + {"vm.uvmexp", []_C_int{2, 4}}, + {"vm.vmmeter", []_C_int{2, 1}}, + {"vm.vnodemin", []_C_int{2, 9}}, + {"vm.vtextmin", []_C_int{2, 8}}, +} diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go new file mode 100644 index 0000000..83bb935 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go @@ -0,0 +1,270 @@ +// mksysctl_openbsd.pl +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +package unix + +type mibentry struct { + ctlname string + ctloid []_C_int +} + +var sysctlMib = []mibentry{ + {"ddb.console", []_C_int{9, 6}}, + {"ddb.log", []_C_int{9, 7}}, + {"ddb.max_line", []_C_int{9, 3}}, + {"ddb.max_width", []_C_int{9, 2}}, + {"ddb.panic", []_C_int{9, 5}}, + {"ddb.radix", []_C_int{9, 1}}, + {"ddb.tab_stop_width", []_C_int{9, 4}}, + {"ddb.trigger", []_C_int{9, 8}}, + {"fs.posix.setuid", []_C_int{3, 1, 1}}, + {"hw.allowpowerdown", []_C_int{6, 22}}, + {"hw.byteorder", []_C_int{6, 4}}, + {"hw.cpuspeed", []_C_int{6, 12}}, + {"hw.diskcount", []_C_int{6, 10}}, + {"hw.disknames", []_C_int{6, 8}}, + {"hw.diskstats", []_C_int{6, 9}}, + {"hw.machine", []_C_int{6, 1}}, + {"hw.model", []_C_int{6, 2}}, + {"hw.ncpu", []_C_int{6, 3}}, + {"hw.ncpufound", []_C_int{6, 21}}, + {"hw.pagesize", []_C_int{6, 7}}, + {"hw.physmem", []_C_int{6, 19}}, + {"hw.product", []_C_int{6, 15}}, + {"hw.serialno", []_C_int{6, 17}}, + {"hw.setperf", []_C_int{6, 13}}, + {"hw.usermem", []_C_int{6, 20}}, + {"hw.uuid", []_C_int{6, 18}}, + {"hw.vendor", []_C_int{6, 14}}, + {"hw.version", []_C_int{6, 16}}, + {"kern.arandom", []_C_int{1, 37}}, + {"kern.argmax", []_C_int{1, 8}}, + {"kern.boottime", []_C_int{1, 21}}, + {"kern.bufcachepercent", []_C_int{1, 72}}, + {"kern.ccpu", []_C_int{1, 45}}, + {"kern.clockrate", []_C_int{1, 12}}, + {"kern.consdev", []_C_int{1, 75}}, + {"kern.cp_time", []_C_int{1, 40}}, + {"kern.cp_time2", []_C_int{1, 71}}, + {"kern.cryptodevallowsoft", []_C_int{1, 53}}, + {"kern.domainname", []_C_int{1, 22}}, + {"kern.file", []_C_int{1, 73}}, + {"kern.forkstat", []_C_int{1, 42}}, + {"kern.fscale", []_C_int{1, 46}}, + {"kern.fsync", []_C_int{1, 33}}, + {"kern.hostid", []_C_int{1, 11}}, + {"kern.hostname", []_C_int{1, 10}}, + {"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}}, + {"kern.job_control", []_C_int{1, 19}}, + {"kern.malloc.buckets", []_C_int{1, 39, 1}}, + {"kern.malloc.kmemnames", []_C_int{1, 39, 3}}, + {"kern.maxclusters", []_C_int{1, 67}}, + {"kern.maxfiles", []_C_int{1, 7}}, + {"kern.maxlocksperuid", []_C_int{1, 70}}, + {"kern.maxpartitions", []_C_int{1, 23}}, + {"kern.maxproc", []_C_int{1, 6}}, + {"kern.maxthread", []_C_int{1, 25}}, + {"kern.maxvnodes", []_C_int{1, 5}}, + {"kern.mbstat", []_C_int{1, 59}}, + {"kern.msgbuf", []_C_int{1, 48}}, + {"kern.msgbufsize", []_C_int{1, 38}}, + {"kern.nchstats", []_C_int{1, 41}}, + {"kern.netlivelocks", []_C_int{1, 76}}, + {"kern.nfiles", []_C_int{1, 56}}, + {"kern.ngroups", []_C_int{1, 18}}, + {"kern.nosuidcoredump", []_C_int{1, 32}}, + {"kern.nprocs", []_C_int{1, 47}}, + {"kern.nselcoll", []_C_int{1, 43}}, + {"kern.nthreads", []_C_int{1, 26}}, + {"kern.numvnodes", []_C_int{1, 58}}, + {"kern.osrelease", []_C_int{1, 2}}, + {"kern.osrevision", []_C_int{1, 3}}, + {"kern.ostype", []_C_int{1, 1}}, + {"kern.osversion", []_C_int{1, 27}}, + {"kern.pool_debug", []_C_int{1, 77}}, + {"kern.posix1version", []_C_int{1, 17}}, + {"kern.proc", []_C_int{1, 66}}, + {"kern.random", []_C_int{1, 31}}, + {"kern.rawpartition", []_C_int{1, 24}}, + {"kern.saved_ids", []_C_int{1, 20}}, + {"kern.securelevel", []_C_int{1, 9}}, + {"kern.seminfo", []_C_int{1, 61}}, + {"kern.shminfo", []_C_int{1, 62}}, + {"kern.somaxconn", []_C_int{1, 28}}, + {"kern.sominconn", []_C_int{1, 29}}, + {"kern.splassert", []_C_int{1, 54}}, + {"kern.stackgap_random", []_C_int{1, 50}}, + {"kern.sysvipc_info", []_C_int{1, 51}}, + {"kern.sysvmsg", []_C_int{1, 34}}, + {"kern.sysvsem", []_C_int{1, 35}}, + {"kern.sysvshm", []_C_int{1, 36}}, + {"kern.timecounter.choice", []_C_int{1, 69, 4}}, + {"kern.timecounter.hardware", []_C_int{1, 69, 3}}, + {"kern.timecounter.tick", []_C_int{1, 69, 1}}, + {"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}}, + {"kern.tty.maxptys", []_C_int{1, 44, 6}}, + {"kern.tty.nptys", []_C_int{1, 44, 7}}, + {"kern.tty.tk_cancc", []_C_int{1, 44, 4}}, + {"kern.tty.tk_nin", []_C_int{1, 44, 1}}, + {"kern.tty.tk_nout", []_C_int{1, 44, 2}}, + {"kern.tty.tk_rawcc", []_C_int{1, 44, 3}}, + {"kern.tty.ttyinfo", []_C_int{1, 44, 5}}, + {"kern.ttycount", []_C_int{1, 57}}, + {"kern.userasymcrypto", []_C_int{1, 60}}, + {"kern.usercrypto", []_C_int{1, 52}}, + {"kern.usermount", []_C_int{1, 30}}, + {"kern.version", []_C_int{1, 4}}, + {"kern.vnode", []_C_int{1, 13}}, + {"kern.watchdog.auto", []_C_int{1, 64, 2}}, + {"kern.watchdog.period", []_C_int{1, 64, 1}}, + {"net.bpf.bufsize", []_C_int{4, 31, 1}}, + {"net.bpf.maxbufsize", []_C_int{4, 31, 2}}, + {"net.inet.ah.enable", []_C_int{4, 2, 51, 1}}, + {"net.inet.ah.stats", []_C_int{4, 2, 51, 2}}, + {"net.inet.carp.allow", []_C_int{4, 2, 112, 1}}, + {"net.inet.carp.log", []_C_int{4, 2, 112, 3}}, + {"net.inet.carp.preempt", []_C_int{4, 2, 112, 2}}, + {"net.inet.carp.stats", []_C_int{4, 2, 112, 4}}, + {"net.inet.divert.recvspace", []_C_int{4, 2, 258, 1}}, + {"net.inet.divert.sendspace", []_C_int{4, 2, 258, 2}}, + {"net.inet.divert.stats", []_C_int{4, 2, 258, 3}}, + {"net.inet.esp.enable", []_C_int{4, 2, 50, 1}}, + {"net.inet.esp.stats", []_C_int{4, 2, 50, 4}}, + {"net.inet.esp.udpencap", []_C_int{4, 2, 50, 2}}, + {"net.inet.esp.udpencap_port", []_C_int{4, 2, 50, 3}}, + {"net.inet.etherip.allow", []_C_int{4, 2, 97, 1}}, + {"net.inet.etherip.stats", []_C_int{4, 2, 97, 2}}, + {"net.inet.gre.allow", []_C_int{4, 2, 47, 1}}, + {"net.inet.gre.wccp", []_C_int{4, 2, 47, 2}}, + {"net.inet.icmp.bmcastecho", []_C_int{4, 2, 1, 2}}, + {"net.inet.icmp.errppslimit", []_C_int{4, 2, 1, 3}}, + {"net.inet.icmp.maskrepl", []_C_int{4, 2, 1, 1}}, + {"net.inet.icmp.rediraccept", []_C_int{4, 2, 1, 4}}, + {"net.inet.icmp.redirtimeout", []_C_int{4, 2, 1, 5}}, + {"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}}, + {"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}}, + {"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}}, + {"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}}, + {"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}}, + {"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}}, + {"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}}, + {"net.inet.ip.ifq.drops", []_C_int{4, 2, 0, 30, 3}}, + {"net.inet.ip.ifq.len", []_C_int{4, 2, 0, 30, 1}}, + {"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}}, + {"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}}, + {"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}}, + {"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}}, + {"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}}, + {"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}}, + {"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}}, + {"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}}, + {"net.inet.ip.multipath", []_C_int{4, 2, 0, 32}}, + {"net.inet.ip.portfirst", []_C_int{4, 2, 0, 7}}, + {"net.inet.ip.porthifirst", []_C_int{4, 2, 0, 9}}, + {"net.inet.ip.porthilast", []_C_int{4, 2, 0, 10}}, + {"net.inet.ip.portlast", []_C_int{4, 2, 0, 8}}, + {"net.inet.ip.redirect", []_C_int{4, 2, 0, 2}}, + {"net.inet.ip.sourceroute", []_C_int{4, 2, 0, 5}}, + {"net.inet.ip.stats", []_C_int{4, 2, 0, 33}}, + {"net.inet.ip.ttl", []_C_int{4, 2, 0, 3}}, + {"net.inet.ipcomp.enable", []_C_int{4, 2, 108, 1}}, + {"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}}, + {"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}}, + {"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}}, + {"net.inet.mobileip.allow", []_C_int{4, 2, 55, 1}}, + {"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}}, + {"net.inet.pim.stats", []_C_int{4, 2, 103, 1}}, + {"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}}, + {"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}}, + {"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}}, + {"net.inet.tcp.drop", []_C_int{4, 2, 6, 19}}, + {"net.inet.tcp.ecn", []_C_int{4, 2, 6, 14}}, + {"net.inet.tcp.ident", []_C_int{4, 2, 6, 9}}, + {"net.inet.tcp.keepidle", []_C_int{4, 2, 6, 3}}, + {"net.inet.tcp.keepinittime", []_C_int{4, 2, 6, 2}}, + {"net.inet.tcp.keepintvl", []_C_int{4, 2, 6, 4}}, + {"net.inet.tcp.mssdflt", []_C_int{4, 2, 6, 11}}, + {"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}}, + {"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}}, + {"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}}, + {"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}}, + {"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}}, + {"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}}, + {"net.inet.tcp.slowhz", []_C_int{4, 2, 6, 5}}, + {"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}}, + {"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}}, + {"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}}, + {"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}}, + {"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}}, + {"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}}, + {"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}}, + {"net.inet.udp.stats", []_C_int{4, 2, 17, 5}}, + {"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}}, + {"net.inet6.divert.sendspace", []_C_int{4, 24, 86, 2}}, + {"net.inet6.divert.stats", []_C_int{4, 24, 86, 3}}, + {"net.inet6.icmp6.errppslimit", []_C_int{4, 24, 30, 14}}, + {"net.inet6.icmp6.mtudisc_hiwat", []_C_int{4, 24, 30, 16}}, + {"net.inet6.icmp6.mtudisc_lowat", []_C_int{4, 24, 30, 17}}, + {"net.inet6.icmp6.nd6_debug", []_C_int{4, 24, 30, 18}}, + {"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}}, + {"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}}, + {"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}}, + {"net.inet6.icmp6.nd6_prune", []_C_int{4, 24, 30, 6}}, + {"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}}, + {"net.inet6.icmp6.nd6_useloopback", []_C_int{4, 24, 30, 11}}, + {"net.inet6.icmp6.nodeinfo", []_C_int{4, 24, 30, 13}}, + {"net.inet6.icmp6.rediraccept", []_C_int{4, 24, 30, 2}}, + {"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}}, + {"net.inet6.ip6.accept_rtadv", []_C_int{4, 24, 17, 12}}, + {"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}}, + {"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}}, + {"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}}, + {"net.inet6.ip6.defmcasthlim", []_C_int{4, 24, 17, 18}}, + {"net.inet6.ip6.forwarding", []_C_int{4, 24, 17, 1}}, + {"net.inet6.ip6.forwsrcrt", []_C_int{4, 24, 17, 5}}, + {"net.inet6.ip6.hdrnestlimit", []_C_int{4, 24, 17, 15}}, + {"net.inet6.ip6.hlim", []_C_int{4, 24, 17, 3}}, + {"net.inet6.ip6.log_interval", []_C_int{4, 24, 17, 14}}, + {"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}}, + {"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}}, + {"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}}, + {"net.inet6.ip6.maxifdefrouters", []_C_int{4, 24, 17, 47}}, + {"net.inet6.ip6.maxifprefixes", []_C_int{4, 24, 17, 46}}, + {"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}}, + {"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}}, + {"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}}, + {"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}}, + {"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}}, + {"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}}, + {"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}}, + {"net.inet6.ip6.rr_prune", []_C_int{4, 24, 17, 22}}, + {"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}}, + {"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}}, + {"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}}, + {"net.inet6.ip6.v6only", []_C_int{4, 24, 17, 24}}, + {"net.key.sadb_dump", []_C_int{4, 30, 1}}, + {"net.key.spd_dump", []_C_int{4, 30, 2}}, + {"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}}, + {"net.mpls.ifq.drops", []_C_int{4, 33, 3, 3}}, + {"net.mpls.ifq.len", []_C_int{4, 33, 3, 1}}, + {"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}}, + {"net.mpls.mapttl_ip", []_C_int{4, 33, 5}}, + {"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}}, + {"net.mpls.maxloop_inkernel", []_C_int{4, 33, 4}}, + {"net.mpls.ttl", []_C_int{4, 33, 2}}, + {"net.pflow.stats", []_C_int{4, 34, 1}}, + {"net.pipex.enable", []_C_int{4, 35, 1}}, + {"vm.anonmin", []_C_int{2, 7}}, + {"vm.loadavg", []_C_int{2, 2}}, + {"vm.maxslp", []_C_int{2, 10}}, + {"vm.nkmempages", []_C_int{2, 6}}, + {"vm.psstrings", []_C_int{2, 3}}, + {"vm.swapencrypt.enable", []_C_int{2, 5, 0}}, + {"vm.swapencrypt.keyscreated", []_C_int{2, 5, 1}}, + {"vm.swapencrypt.keysdeleted", []_C_int{2, 5, 2}}, + {"vm.uspace", []_C_int{2, 11}}, + {"vm.uvmexp", []_C_int{2, 4}}, + {"vm.vmmeter", []_C_int{2, 1}}, + {"vm.vnodemin", []_C_int{2, 9}}, + {"vm.vtextmin", []_C_int{2, 8}}, +} diff --git a/vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go b/vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go index 2786773..d1d36da 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go @@ -1,5 +1,5 @@ -// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/sys/syscall.h -// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT +// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/sys/syscall.h +// Code generated by the command above; see README.md. DO NOT EDIT. // +build 386,darwin @@ -121,13 +121,15 @@ const ( SYS_CSOPS = 169 SYS_CSOPS_AUDITTOKEN = 170 SYS_WAITID = 173 + SYS_KDEBUG_TYPEFILTER = 177 + SYS_KDEBUG_TRACE_STRING = 178 SYS_KDEBUG_TRACE64 = 179 SYS_KDEBUG_TRACE = 180 SYS_SETGID = 181 SYS_SETEGID = 182 SYS_SETEUID = 183 SYS_SIGRETURN = 184 - SYS_CHUD = 185 + SYS_THREAD_SELFCOUNTS = 186 SYS_FDATASYNC = 187 SYS_STAT = 188 SYS_FSTAT = 189 @@ -278,7 +280,6 @@ const ( SYS_KQUEUE = 362 SYS_KEVENT = 363 SYS_LCHOWN = 364 - SYS_STACK_SNAPSHOT = 365 SYS_BSDTHREAD_REGISTER = 366 SYS_WORKQ_OPEN = 367 SYS_WORKQ_KERNRETURN = 368 @@ -287,6 +288,8 @@ const ( SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL = 371 SYS_THREAD_SELFID = 372 SYS_LEDGER = 373 + SYS_KEVENT_QOS = 374 + SYS_KEVENT_ID = 375 SYS___MAC_EXECVE = 380 SYS___MAC_SYSCALL = 381 SYS___MAC_GET_FILE = 382 @@ -298,11 +301,8 @@ const ( SYS___MAC_GET_FD = 388 SYS___MAC_SET_FD = 389 SYS___MAC_GET_PID = 390 - SYS___MAC_GET_LCID = 391 - SYS___MAC_GET_LCTX = 392 - SYS___MAC_SET_LCTX = 393 - SYS_SETLCID = 394 - SYS_GETLCID = 395 + SYS_PSELECT = 394 + SYS_PSELECT_NOCANCEL = 395 SYS_READ_NOCANCEL = 396 SYS_WRITE_NOCANCEL = 397 SYS_OPEN_NOCANCEL = 398 @@ -351,6 +351,7 @@ const ( SYS_GUARDED_CLOSE_NP = 442 SYS_GUARDED_KQUEUE_NP = 443 SYS_CHANGE_FDGUARD_NP = 444 + SYS_USRCTL = 445 SYS_PROC_RLIMIT_CONTROL = 446 SYS_CONNECTX = 447 SYS_DISCONNECTX = 448 @@ -367,6 +368,7 @@ const ( SYS_COALITION_INFO = 459 SYS_NECP_MATCH_POLICY = 460 SYS_GETATTRLISTBULK = 461 + SYS_CLONEFILEAT = 462 SYS_OPENAT = 463 SYS_OPENAT_NOCANCEL = 464 SYS_RENAMEAT = 465 @@ -392,7 +394,43 @@ const ( SYS_GUARDED_WRITE_NP = 485 SYS_GUARDED_PWRITE_NP = 486 SYS_GUARDED_WRITEV_NP = 487 - SYS_RENAME_EXT = 488 + SYS_RENAMEATX_NP = 488 SYS_MREMAP_ENCRYPTED = 489 - SYS_MAXSYSCALL = 490 + SYS_NETAGENT_TRIGGER = 490 + SYS_STACK_SNAPSHOT_WITH_CONFIG = 491 + SYS_MICROSTACKSHOT = 492 + SYS_GRAB_PGO_DATA = 493 + SYS_PERSONA = 494 + SYS_WORK_INTERVAL_CTL = 499 + SYS_GETENTROPY = 500 + SYS_NECP_OPEN = 501 + SYS_NECP_CLIENT_ACTION = 502 + SYS___NEXUS_OPEN = 503 + SYS___NEXUS_REGISTER = 504 + SYS___NEXUS_DEREGISTER = 505 + SYS___NEXUS_CREATE = 506 + SYS___NEXUS_DESTROY = 507 + SYS___NEXUS_GET_OPT = 508 + SYS___NEXUS_SET_OPT = 509 + SYS___CHANNEL_OPEN = 510 + SYS___CHANNEL_GET_INFO = 511 + SYS___CHANNEL_SYNC = 512 + SYS___CHANNEL_GET_OPT = 513 + SYS___CHANNEL_SET_OPT = 514 + SYS_ULOCK_WAIT = 515 + SYS_ULOCK_WAKE = 516 + SYS_FCLONEFILEAT = 517 + SYS_FS_SNAPSHOT = 518 + SYS_TERMINATE_WITH_PAYLOAD = 520 + SYS_ABORT_WITH_PAYLOAD = 521 + SYS_NECP_SESSION_OPEN = 522 + SYS_NECP_SESSION_ACTION = 523 + SYS_SETATTRLISTAT = 524 + SYS_NET_QOS_GUIDELINE = 525 + SYS_FMOUNT = 526 + SYS_NTP_ADJTIME = 527 + SYS_NTP_GETTIME = 528 + SYS_OS_FAULT_WITH_PAYLOAD = 529 + SYS_MAXSYSCALL = 530 + SYS_INVALID = 63 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go index 09de240..e35de41 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go @@ -1,5 +1,5 @@ -// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/sys/syscall.h -// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT +// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/sys/syscall.h +// Code generated by the command above; see README.md. DO NOT EDIT. // +build amd64,darwin @@ -121,13 +121,15 @@ const ( SYS_CSOPS = 169 SYS_CSOPS_AUDITTOKEN = 170 SYS_WAITID = 173 + SYS_KDEBUG_TYPEFILTER = 177 + SYS_KDEBUG_TRACE_STRING = 178 SYS_KDEBUG_TRACE64 = 179 SYS_KDEBUG_TRACE = 180 SYS_SETGID = 181 SYS_SETEGID = 182 SYS_SETEUID = 183 SYS_SIGRETURN = 184 - SYS_CHUD = 185 + SYS_THREAD_SELFCOUNTS = 186 SYS_FDATASYNC = 187 SYS_STAT = 188 SYS_FSTAT = 189 @@ -278,7 +280,6 @@ const ( SYS_KQUEUE = 362 SYS_KEVENT = 363 SYS_LCHOWN = 364 - SYS_STACK_SNAPSHOT = 365 SYS_BSDTHREAD_REGISTER = 366 SYS_WORKQ_OPEN = 367 SYS_WORKQ_KERNRETURN = 368 @@ -287,6 +288,8 @@ const ( SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL = 371 SYS_THREAD_SELFID = 372 SYS_LEDGER = 373 + SYS_KEVENT_QOS = 374 + SYS_KEVENT_ID = 375 SYS___MAC_EXECVE = 380 SYS___MAC_SYSCALL = 381 SYS___MAC_GET_FILE = 382 @@ -298,11 +301,8 @@ const ( SYS___MAC_GET_FD = 388 SYS___MAC_SET_FD = 389 SYS___MAC_GET_PID = 390 - SYS___MAC_GET_LCID = 391 - SYS___MAC_GET_LCTX = 392 - SYS___MAC_SET_LCTX = 393 - SYS_SETLCID = 394 - SYS_GETLCID = 395 + SYS_PSELECT = 394 + SYS_PSELECT_NOCANCEL = 395 SYS_READ_NOCANCEL = 396 SYS_WRITE_NOCANCEL = 397 SYS_OPEN_NOCANCEL = 398 @@ -351,6 +351,7 @@ const ( SYS_GUARDED_CLOSE_NP = 442 SYS_GUARDED_KQUEUE_NP = 443 SYS_CHANGE_FDGUARD_NP = 444 + SYS_USRCTL = 445 SYS_PROC_RLIMIT_CONTROL = 446 SYS_CONNECTX = 447 SYS_DISCONNECTX = 448 @@ -367,6 +368,7 @@ const ( SYS_COALITION_INFO = 459 SYS_NECP_MATCH_POLICY = 460 SYS_GETATTRLISTBULK = 461 + SYS_CLONEFILEAT = 462 SYS_OPENAT = 463 SYS_OPENAT_NOCANCEL = 464 SYS_RENAMEAT = 465 @@ -392,7 +394,43 @@ const ( SYS_GUARDED_WRITE_NP = 485 SYS_GUARDED_PWRITE_NP = 486 SYS_GUARDED_WRITEV_NP = 487 - SYS_RENAME_EXT = 488 + SYS_RENAMEATX_NP = 488 SYS_MREMAP_ENCRYPTED = 489 - SYS_MAXSYSCALL = 490 + SYS_NETAGENT_TRIGGER = 490 + SYS_STACK_SNAPSHOT_WITH_CONFIG = 491 + SYS_MICROSTACKSHOT = 492 + SYS_GRAB_PGO_DATA = 493 + SYS_PERSONA = 494 + SYS_WORK_INTERVAL_CTL = 499 + SYS_GETENTROPY = 500 + SYS_NECP_OPEN = 501 + SYS_NECP_CLIENT_ACTION = 502 + SYS___NEXUS_OPEN = 503 + SYS___NEXUS_REGISTER = 504 + SYS___NEXUS_DEREGISTER = 505 + SYS___NEXUS_CREATE = 506 + SYS___NEXUS_DESTROY = 507 + SYS___NEXUS_GET_OPT = 508 + SYS___NEXUS_SET_OPT = 509 + SYS___CHANNEL_OPEN = 510 + SYS___CHANNEL_GET_INFO = 511 + SYS___CHANNEL_SYNC = 512 + SYS___CHANNEL_GET_OPT = 513 + SYS___CHANNEL_SET_OPT = 514 + SYS_ULOCK_WAIT = 515 + SYS_ULOCK_WAKE = 516 + SYS_FCLONEFILEAT = 517 + SYS_FS_SNAPSHOT = 518 + SYS_TERMINATE_WITH_PAYLOAD = 520 + SYS_ABORT_WITH_PAYLOAD = 521 + SYS_NECP_SESSION_OPEN = 522 + SYS_NECP_SESSION_ACTION = 523 + SYS_SETATTRLISTAT = 524 + SYS_NET_QOS_GUIDELINE = 525 + SYS_FMOUNT = 526 + SYS_NTP_ADJTIME = 527 + SYS_NTP_GETTIME = 528 + SYS_OS_FAULT_WITH_PAYLOAD = 529 + SYS_MAXSYSCALL = 530 + SYS_INVALID = 63 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go index b8c9aea..f2df27d 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go @@ -1,5 +1,5 @@ -// mksysnum_darwin.pl /usr/include/sys/syscall.h -// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT +// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.1.sdk/usr/include/sys/syscall.h +// Code generated by the command above; see README.md. DO NOT EDIT. // +build arm,darwin @@ -121,12 +121,15 @@ const ( SYS_CSOPS = 169 SYS_CSOPS_AUDITTOKEN = 170 SYS_WAITID = 173 + SYS_KDEBUG_TYPEFILTER = 177 + SYS_KDEBUG_TRACE_STRING = 178 + SYS_KDEBUG_TRACE64 = 179 SYS_KDEBUG_TRACE = 180 SYS_SETGID = 181 SYS_SETEGID = 182 SYS_SETEUID = 183 SYS_SIGRETURN = 184 - SYS_CHUD = 185 + SYS_THREAD_SELFCOUNTS = 186 SYS_FDATASYNC = 187 SYS_STAT = 188 SYS_FSTAT = 189 @@ -140,17 +143,10 @@ const ( SYS_LSEEK = 199 SYS_TRUNCATE = 200 SYS_FTRUNCATE = 201 - SYS___SYSCTL = 202 + SYS_SYSCTL = 202 SYS_MLOCK = 203 SYS_MUNLOCK = 204 SYS_UNDELETE = 205 - SYS_ATSOCKET = 206 - SYS_ATGETMSG = 207 - SYS_ATPUTMSG = 208 - SYS_ATPSNDREQ = 209 - SYS_ATPSNDRSP = 210 - SYS_ATPGETREQ = 211 - SYS_ATPGETRSP = 212 SYS_OPEN_DPROTECTED_NP = 216 SYS_GETATTRLIST = 220 SYS_SETATTRLIST = 221 @@ -202,9 +198,7 @@ const ( SYS_SEM_WAIT = 271 SYS_SEM_TRYWAIT = 272 SYS_SEM_POST = 273 - SYS_SEM_GETVALUE = 274 - SYS_SEM_INIT = 275 - SYS_SEM_DESTROY = 276 + SYS_SYSCTLBYNAME = 274 SYS_OPEN_EXTENDED = 277 SYS_UMASK_EXTENDED = 278 SYS_STAT_EXTENDED = 279 @@ -286,7 +280,6 @@ const ( SYS_KQUEUE = 362 SYS_KEVENT = 363 SYS_LCHOWN = 364 - SYS_STACK_SNAPSHOT = 365 SYS_BSDTHREAD_REGISTER = 366 SYS_WORKQ_OPEN = 367 SYS_WORKQ_KERNRETURN = 368 @@ -295,6 +288,8 @@ const ( SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL = 371 SYS_THREAD_SELFID = 372 SYS_LEDGER = 373 + SYS_KEVENT_QOS = 374 + SYS_KEVENT_ID = 375 SYS___MAC_EXECVE = 380 SYS___MAC_SYSCALL = 381 SYS___MAC_GET_FILE = 382 @@ -306,11 +301,8 @@ const ( SYS___MAC_GET_FD = 388 SYS___MAC_SET_FD = 389 SYS___MAC_GET_PID = 390 - SYS___MAC_GET_LCID = 391 - SYS___MAC_GET_LCTX = 392 - SYS___MAC_SET_LCTX = 393 - SYS_SETLCID = 394 - SYS_GETLCID = 395 + SYS_PSELECT = 394 + SYS_PSELECT_NOCANCEL = 395 SYS_READ_NOCANCEL = 396 SYS_WRITE_NOCANCEL = 397 SYS_OPEN_NOCANCEL = 398 @@ -354,5 +346,91 @@ const ( SYS_PID_SHUTDOWN_SOCKETS = 436 SYS_SHARED_REGION_MAP_AND_SLIDE_NP = 438 SYS_KAS_INFO = 439 - SYS_MAXSYSCALL = 440 + SYS_MEMORYSTATUS_CONTROL = 440 + SYS_GUARDED_OPEN_NP = 441 + SYS_GUARDED_CLOSE_NP = 442 + SYS_GUARDED_KQUEUE_NP = 443 + SYS_CHANGE_FDGUARD_NP = 444 + SYS_USRCTL = 445 + SYS_PROC_RLIMIT_CONTROL = 446 + SYS_CONNECTX = 447 + SYS_DISCONNECTX = 448 + SYS_PEELOFF = 449 + SYS_SOCKET_DELEGATE = 450 + SYS_TELEMETRY = 451 + SYS_PROC_UUID_POLICY = 452 + SYS_MEMORYSTATUS_GET_LEVEL = 453 + SYS_SYSTEM_OVERRIDE = 454 + SYS_VFS_PURGE = 455 + SYS_SFI_CTL = 456 + SYS_SFI_PIDCTL = 457 + SYS_COALITION = 458 + SYS_COALITION_INFO = 459 + SYS_NECP_MATCH_POLICY = 460 + SYS_GETATTRLISTBULK = 461 + SYS_CLONEFILEAT = 462 + SYS_OPENAT = 463 + SYS_OPENAT_NOCANCEL = 464 + SYS_RENAMEAT = 465 + SYS_FACCESSAT = 466 + SYS_FCHMODAT = 467 + SYS_FCHOWNAT = 468 + SYS_FSTATAT = 469 + SYS_FSTATAT64 = 470 + SYS_LINKAT = 471 + SYS_UNLINKAT = 472 + SYS_READLINKAT = 473 + SYS_SYMLINKAT = 474 + SYS_MKDIRAT = 475 + SYS_GETATTRLISTAT = 476 + SYS_PROC_TRACE_LOG = 477 + SYS_BSDTHREAD_CTL = 478 + SYS_OPENBYID_NP = 479 + SYS_RECVMSG_X = 480 + SYS_SENDMSG_X = 481 + SYS_THREAD_SELFUSAGE = 482 + SYS_CSRCTL = 483 + SYS_GUARDED_OPEN_DPROTECTED_NP = 484 + SYS_GUARDED_WRITE_NP = 485 + SYS_GUARDED_PWRITE_NP = 486 + SYS_GUARDED_WRITEV_NP = 487 + SYS_RENAMEATX_NP = 488 + SYS_MREMAP_ENCRYPTED = 489 + SYS_NETAGENT_TRIGGER = 490 + SYS_STACK_SNAPSHOT_WITH_CONFIG = 491 + SYS_MICROSTACKSHOT = 492 + SYS_GRAB_PGO_DATA = 493 + SYS_PERSONA = 494 + SYS_WORK_INTERVAL_CTL = 499 + SYS_GETENTROPY = 500 + SYS_NECP_OPEN = 501 + SYS_NECP_CLIENT_ACTION = 502 + SYS___NEXUS_OPEN = 503 + SYS___NEXUS_REGISTER = 504 + SYS___NEXUS_DEREGISTER = 505 + SYS___NEXUS_CREATE = 506 + SYS___NEXUS_DESTROY = 507 + SYS___NEXUS_GET_OPT = 508 + SYS___NEXUS_SET_OPT = 509 + SYS___CHANNEL_OPEN = 510 + SYS___CHANNEL_GET_INFO = 511 + SYS___CHANNEL_SYNC = 512 + SYS___CHANNEL_GET_OPT = 513 + SYS___CHANNEL_SET_OPT = 514 + SYS_ULOCK_WAIT = 515 + SYS_ULOCK_WAKE = 516 + SYS_FCLONEFILEAT = 517 + SYS_FS_SNAPSHOT = 518 + SYS_TERMINATE_WITH_PAYLOAD = 520 + SYS_ABORT_WITH_PAYLOAD = 521 + SYS_NECP_SESSION_OPEN = 522 + SYS_NECP_SESSION_ACTION = 523 + SYS_SETATTRLISTAT = 524 + SYS_NET_QOS_GUIDELINE = 525 + SYS_FMOUNT = 526 + SYS_NTP_ADJTIME = 527 + SYS_NTP_GETTIME = 528 + SYS_OS_FAULT_WITH_PAYLOAD = 529 + SYS_MAXSYSCALL = 530 + SYS_INVALID = 63 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go index 26677eb..9694630 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go @@ -1,5 +1,5 @@ -// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.4.sdk/usr/include/sys/syscall.h -// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT +// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.1.sdk/usr/include/sys/syscall.h +// Code generated by the command above; see README.md. DO NOT EDIT. // +build arm64,darwin @@ -121,13 +121,15 @@ const ( SYS_CSOPS = 169 SYS_CSOPS_AUDITTOKEN = 170 SYS_WAITID = 173 + SYS_KDEBUG_TYPEFILTER = 177 + SYS_KDEBUG_TRACE_STRING = 178 SYS_KDEBUG_TRACE64 = 179 SYS_KDEBUG_TRACE = 180 SYS_SETGID = 181 SYS_SETEGID = 182 SYS_SETEUID = 183 SYS_SIGRETURN = 184 - SYS_CHUD = 185 + SYS_THREAD_SELFCOUNTS = 186 SYS_FDATASYNC = 187 SYS_STAT = 188 SYS_FSTAT = 189 @@ -278,7 +280,6 @@ const ( SYS_KQUEUE = 362 SYS_KEVENT = 363 SYS_LCHOWN = 364 - SYS_STACK_SNAPSHOT = 365 SYS_BSDTHREAD_REGISTER = 366 SYS_WORKQ_OPEN = 367 SYS_WORKQ_KERNRETURN = 368 @@ -287,6 +288,8 @@ const ( SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL = 371 SYS_THREAD_SELFID = 372 SYS_LEDGER = 373 + SYS_KEVENT_QOS = 374 + SYS_KEVENT_ID = 375 SYS___MAC_EXECVE = 380 SYS___MAC_SYSCALL = 381 SYS___MAC_GET_FILE = 382 @@ -298,11 +301,8 @@ const ( SYS___MAC_GET_FD = 388 SYS___MAC_SET_FD = 389 SYS___MAC_GET_PID = 390 - SYS___MAC_GET_LCID = 391 - SYS___MAC_GET_LCTX = 392 - SYS___MAC_SET_LCTX = 393 - SYS_SETLCID = 394 - SYS_GETLCID = 395 + SYS_PSELECT = 394 + SYS_PSELECT_NOCANCEL = 395 SYS_READ_NOCANCEL = 396 SYS_WRITE_NOCANCEL = 397 SYS_OPEN_NOCANCEL = 398 @@ -351,6 +351,7 @@ const ( SYS_GUARDED_CLOSE_NP = 442 SYS_GUARDED_KQUEUE_NP = 443 SYS_CHANGE_FDGUARD_NP = 444 + SYS_USRCTL = 445 SYS_PROC_RLIMIT_CONTROL = 446 SYS_CONNECTX = 447 SYS_DISCONNECTX = 448 @@ -367,6 +368,7 @@ const ( SYS_COALITION_INFO = 459 SYS_NECP_MATCH_POLICY = 460 SYS_GETATTRLISTBULK = 461 + SYS_CLONEFILEAT = 462 SYS_OPENAT = 463 SYS_OPENAT_NOCANCEL = 464 SYS_RENAMEAT = 465 @@ -392,7 +394,43 @@ const ( SYS_GUARDED_WRITE_NP = 485 SYS_GUARDED_PWRITE_NP = 486 SYS_GUARDED_WRITEV_NP = 487 - SYS_RENAME_EXT = 488 + SYS_RENAMEATX_NP = 488 SYS_MREMAP_ENCRYPTED = 489 - SYS_MAXSYSCALL = 490 + SYS_NETAGENT_TRIGGER = 490 + SYS_STACK_SNAPSHOT_WITH_CONFIG = 491 + SYS_MICROSTACKSHOT = 492 + SYS_GRAB_PGO_DATA = 493 + SYS_PERSONA = 494 + SYS_WORK_INTERVAL_CTL = 499 + SYS_GETENTROPY = 500 + SYS_NECP_OPEN = 501 + SYS_NECP_CLIENT_ACTION = 502 + SYS___NEXUS_OPEN = 503 + SYS___NEXUS_REGISTER = 504 + SYS___NEXUS_DEREGISTER = 505 + SYS___NEXUS_CREATE = 506 + SYS___NEXUS_DESTROY = 507 + SYS___NEXUS_GET_OPT = 508 + SYS___NEXUS_SET_OPT = 509 + SYS___CHANNEL_OPEN = 510 + SYS___CHANNEL_GET_INFO = 511 + SYS___CHANNEL_SYNC = 512 + SYS___CHANNEL_GET_OPT = 513 + SYS___CHANNEL_SET_OPT = 514 + SYS_ULOCK_WAIT = 515 + SYS_ULOCK_WAKE = 516 + SYS_FCLONEFILEAT = 517 + SYS_FS_SNAPSHOT = 518 + SYS_TERMINATE_WITH_PAYLOAD = 520 + SYS_ABORT_WITH_PAYLOAD = 521 + SYS_NECP_SESSION_OPEN = 522 + SYS_NECP_SESSION_ACTION = 523 + SYS_SETATTRLISTAT = 524 + SYS_NET_QOS_GUIDELINE = 525 + SYS_FMOUNT = 526 + SYS_NTP_ADJTIME = 527 + SYS_NTP_GETTIME = 528 + SYS_OS_FAULT_WITH_PAYLOAD = 529 + SYS_MAXSYSCALL = 530 + SYS_INVALID = 63 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go index 262a845..b64a812 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go @@ -1,5 +1,5 @@ // mksysnum_freebsd.pl -// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT +// Code generated by the command above; see README.md. DO NOT EDIT. // +build 386,freebsd @@ -7,345 +7,347 @@ package unix const ( // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int - SYS_EXIT = 1 // { void sys_exit(int rval); } exit \ - SYS_FORK = 2 // { int fork(void); } - SYS_READ = 3 // { ssize_t read(int fd, void *buf, \ - SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, \ - SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } - SYS_CLOSE = 6 // { int close(int fd); } - SYS_WAIT4 = 7 // { int wait4(int pid, int *status, \ - SYS_LINK = 9 // { int link(char *path, char *link); } - SYS_UNLINK = 10 // { int unlink(char *path); } - SYS_CHDIR = 12 // { int chdir(char *path); } - SYS_FCHDIR = 13 // { int fchdir(int fd); } - SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); } - SYS_CHMOD = 15 // { int chmod(char *path, int mode); } - SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } - SYS_OBREAK = 17 // { int obreak(char *nsize); } break \ - SYS_GETPID = 20 // { pid_t getpid(void); } - SYS_MOUNT = 21 // { int mount(char *type, char *path, \ - SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } - SYS_SETUID = 23 // { int setuid(uid_t uid); } - SYS_GETUID = 24 // { uid_t getuid(void); } - SYS_GETEUID = 25 // { uid_t geteuid(void); } - SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, \ - SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, \ - SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, \ - SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, \ - SYS_ACCEPT = 30 // { int accept(int s, \ - SYS_GETPEERNAME = 31 // { int getpeername(int fdes, \ - SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, \ - SYS_ACCESS = 33 // { int access(char *path, int amode); } - SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); } - SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); } - SYS_SYNC = 36 // { int sync(void); } - SYS_KILL = 37 // { int kill(int pid, int signum); } - SYS_GETPPID = 39 // { pid_t getppid(void); } - SYS_DUP = 41 // { int dup(u_int fd); } - SYS_PIPE = 42 // { int pipe(void); } - SYS_GETEGID = 43 // { gid_t getegid(void); } - SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \ - SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, \ - SYS_GETGID = 47 // { gid_t getgid(void); } - SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int \ - SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } - SYS_ACCT = 51 // { int acct(char *path); } - SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, \ - SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, \ - SYS_REBOOT = 55 // { int reboot(int opt); } - SYS_REVOKE = 56 // { int revoke(char *path); } - SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } - SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, \ - SYS_EXECVE = 59 // { int execve(char *fname, char **argv, \ - SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args \ - SYS_CHROOT = 61 // { int chroot(char *path); } - SYS_MSYNC = 65 // { int msync(void *addr, size_t len, \ - SYS_VFORK = 66 // { int vfork(void); } - SYS_SBRK = 69 // { int sbrk(int incr); } - SYS_SSTK = 70 // { int sstk(int incr); } - SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise \ - SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } - SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, \ - SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, \ - SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \ - SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, \ - SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, \ - SYS_GETPGRP = 81 // { int getpgrp(void); } - SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } - SYS_SETITIMER = 83 // { int setitimer(u_int which, struct \ - SYS_SWAPON = 85 // { int swapon(char *name); } - SYS_GETITIMER = 86 // { int getitimer(u_int which, \ - SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } - SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); } - SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } - SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \ - SYS_FSYNC = 95 // { int fsync(int fd); } - SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, \ - SYS_SOCKET = 97 // { int socket(int domain, int type, \ - SYS_CONNECT = 98 // { int connect(int s, caddr_t name, \ - SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } - SYS_BIND = 104 // { int bind(int s, caddr_t name, \ - SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \ - SYS_LISTEN = 106 // { int listen(int s, int backlog); } - SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \ - SYS_GETRUSAGE = 117 // { int getrusage(int who, \ - SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \ - SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, \ - SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \ - SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \ - SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } - SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } - SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } - SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } - SYS_RENAME = 128 // { int rename(char *from, char *to); } - SYS_FLOCK = 131 // { int flock(int fd, int how); } - SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } - SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \ - SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } - SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, \ - SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } - SYS_RMDIR = 137 // { int rmdir(char *path); } - SYS_UTIMES = 138 // { int utimes(char *path, \ - SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \ - SYS_SETSID = 147 // { int setsid(void); } - SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \ - SYS_LGETFH = 160 // { int lgetfh(char *fname, \ - SYS_GETFH = 161 // { int getfh(char *fname, \ - SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } - SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \ - SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \ - SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, \ - SYS_SETFIB = 175 // { int setfib(int fibnum); } - SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } - SYS_SETGID = 181 // { int setgid(gid_t gid); } - SYS_SETEGID = 182 // { int setegid(gid_t egid); } - SYS_SETEUID = 183 // { int seteuid(uid_t euid); } - SYS_STAT = 188 // { int stat(char *path, struct stat *ub); } - SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); } - SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); } - SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } - SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } - SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \ - SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \ - SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, \ - SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \ - SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, \ - SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, \ - SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, \ - SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, \ - SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } - SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } - SYS_UNDELETE = 205 // { int undelete(char *path); } - SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } - SYS_GETPGID = 207 // { int getpgid(pid_t pid); } - SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \ - SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \ - SYS_CLOCK_SETTIME = 233 // { int clock_settime( \ - SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \ - SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, \ - SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); } - SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, \ - SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct \ - SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); } - SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \ - SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); } - SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( \ - SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( \ - SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,\ - SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); } - SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, \ - SYS_RFORK = 251 // { int rfork(int flags); } - SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, \ - SYS_ISSETUGID = 253 // { int issetugid(void); } - SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } - SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, \ - SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } - SYS_LUTIMES = 276 // { int lutimes(char *path, \ - SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); } - SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); } - SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); } - SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, \ - SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, \ - SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, \ - SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, \ - SYS_MODNEXT = 300 // { int modnext(int modid); } - SYS_MODSTAT = 301 // { int modstat(int modid, \ - SYS_MODFNEXT = 302 // { int modfnext(int modid); } - SYS_MODFIND = 303 // { int modfind(const char *name); } - SYS_KLDLOAD = 304 // { int kldload(const char *file); } - SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } - SYS_KLDFIND = 306 // { int kldfind(const char *file); } - SYS_KLDNEXT = 307 // { int kldnext(int fileid); } - SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct \ - SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } - SYS_GETSID = 310 // { int getsid(pid_t pid); } - SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, \ - SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, \ - SYS_YIELD = 321 // { int yield(void); } - SYS_MLOCKALL = 324 // { int mlockall(int how); } - SYS_MUNLOCKALL = 325 // { int munlockall(void); } - SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); } - SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, \ - SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct \ - SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int \ - SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } - SYS_SCHED_YIELD = 331 // { int sched_yield (void); } - SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } - SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } - SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, \ - SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } - SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, \ - SYS_JAIL = 338 // { int jail(struct jail *jail); } - SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, \ - SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } - SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } - SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, \ - SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, \ - SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \ - SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \ - SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, \ - SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, \ - SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \ - SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, \ - SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \ - SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, \ - SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \ - SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( \ - SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( \ - SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \ - SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, \ - SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, \ - SYS_KQUEUE = 362 // { int kqueue(void); } - SYS_KEVENT = 363 // { int kevent(int fd, \ - SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, \ - SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, \ - SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, \ - SYS___SETUGID = 374 // { int __setugid(int flag); } - SYS_EACCESS = 376 // { int eaccess(char *path, int amode); } - SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, \ - SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); } - SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); } - SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, \ - SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, \ - SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, \ - SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, \ - SYS_KENV = 390 // { int kenv(int what, const char *name, \ - SYS_LCHFLAGS = 391 // { int lchflags(const char *path, \ - SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, \ - SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, \ - SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, \ - SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, \ - SYS_STATFS = 396 // { int statfs(char *path, \ - SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); } - SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, \ - SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, \ - SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, \ - SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, \ - SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( \ - SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( \ - SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( \ - SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, \ - SYS_SIGACTION = 416 // { int sigaction(int sig, \ - SYS_SIGRETURN = 417 // { int sigreturn( \ - SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); } - SYS_SETCONTEXT = 422 // { int setcontext( \ - SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, \ - SYS_SWAPOFF = 424 // { int swapoff(const char *name); } - SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, \ - SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, \ - SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, \ - SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, \ - SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, \ - SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, \ - SYS_THR_EXIT = 431 // { void thr_exit(long *state); } - SYS_THR_SELF = 432 // { int thr_self(long *id); } - SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); } - SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); } - SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); } - SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); } - SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, \ - SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( \ - SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( \ - SYS_THR_SUSPEND = 442 // { int thr_suspend( \ - SYS_THR_WAKE = 443 // { int thr_wake(long id); } - SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); } - SYS_AUDIT = 445 // { int audit(const void *record, \ - SYS_AUDITON = 446 // { int auditon(int cmd, void *data, \ - SYS_GETAUID = 447 // { int getauid(uid_t *auid); } - SYS_SETAUID = 448 // { int setauid(uid_t *auid); } - SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); } - SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); } - SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( \ - SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( \ - SYS_AUDITCTL = 453 // { int auditctl(char *path); } - SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, \ - SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, \ - SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); } - SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); } - SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); } - SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, \ - SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); } - SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, \ - SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, \ - SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, \ - SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, \ - SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, \ - SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, \ - SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, \ - SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); } - SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); } - SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); } - SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, \ - SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); } - SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); } - SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, \ - SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, \ - SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, \ - SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, \ - SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, \ - SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, \ - SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, \ - SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, \ - SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, \ - SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, \ - SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, \ - SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); } - SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); } - SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, \ - SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, \ - SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, \ - SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, \ - SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, \ - SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); } - SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); } - SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, \ - SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, \ - SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); } - SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); } - SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); } - SYS_CAP_NEW = 514 // { int cap_new(int fd, uint64_t rights); } - SYS_CAP_GETRIGHTS = 515 // { int cap_getrights(int fd, \ - SYS_CAP_ENTER = 516 // { int cap_enter(void); } - SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); } - SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); } - SYS_PDKILL = 519 // { int pdkill(int fd, int signum); } - SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); } - SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, \ - SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, \ - SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); } - SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, \ - SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, \ - SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, \ - SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, \ - SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, \ - SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, \ - SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, \ - SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, \ - SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, \ - SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, \ - SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, \ - SYS_ACCEPT4 = 541 // { int accept4(int s, \ - SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); } - SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, \ - SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \ + SYS_EXIT = 1 // { void sys_exit(int rval); } exit \ + SYS_FORK = 2 // { int fork(void); } + SYS_READ = 3 // { ssize_t read(int fd, void *buf, \ + SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, \ + SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } + SYS_CLOSE = 6 // { int close(int fd); } + SYS_WAIT4 = 7 // { int wait4(int pid, int *status, \ + SYS_LINK = 9 // { int link(char *path, char *link); } + SYS_UNLINK = 10 // { int unlink(char *path); } + SYS_CHDIR = 12 // { int chdir(char *path); } + SYS_FCHDIR = 13 // { int fchdir(int fd); } + SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); } + SYS_CHMOD = 15 // { int chmod(char *path, int mode); } + SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } + SYS_OBREAK = 17 // { int obreak(char *nsize); } break \ + SYS_GETPID = 20 // { pid_t getpid(void); } + SYS_MOUNT = 21 // { int mount(char *type, char *path, \ + SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } + SYS_SETUID = 23 // { int setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t getuid(void); } + SYS_GETEUID = 25 // { uid_t geteuid(void); } + SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, \ + SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, \ + SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, \ + SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, \ + SYS_ACCEPT = 30 // { int accept(int s, \ + SYS_GETPEERNAME = 31 // { int getpeername(int fdes, \ + SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, \ + SYS_ACCESS = 33 // { int access(char *path, int amode); } + SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { int sync(void); } + SYS_KILL = 37 // { int kill(int pid, int signum); } + SYS_GETPPID = 39 // { pid_t getppid(void); } + SYS_DUP = 41 // { int dup(u_int fd); } + SYS_PIPE = 42 // { int pipe(void); } + SYS_GETEGID = 43 // { gid_t getegid(void); } + SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \ + SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, \ + SYS_GETGID = 47 // { gid_t getgid(void); } + SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int \ + SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } + SYS_ACCT = 51 // { int acct(char *path); } + SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, \ + SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, \ + SYS_REBOOT = 55 // { int reboot(int opt); } + SYS_REVOKE = 56 // { int revoke(char *path); } + SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } + SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, \ + SYS_EXECVE = 59 // { int execve(char *fname, char **argv, \ + SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args \ + SYS_CHROOT = 61 // { int chroot(char *path); } + SYS_MSYNC = 65 // { int msync(void *addr, size_t len, \ + SYS_VFORK = 66 // { int vfork(void); } + SYS_SBRK = 69 // { int sbrk(int incr); } + SYS_SSTK = 70 // { int sstk(int incr); } + SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise \ + SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, \ + SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, \ + SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \ + SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, \ + SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, \ + SYS_GETPGRP = 81 // { int getpgrp(void); } + SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } + SYS_SETITIMER = 83 // { int setitimer(u_int which, struct \ + SYS_SWAPON = 85 // { int swapon(char *name); } + SYS_GETITIMER = 86 // { int getitimer(u_int which, \ + SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } + SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); } + SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } + SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \ + SYS_FSYNC = 95 // { int fsync(int fd); } + SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, \ + SYS_SOCKET = 97 // { int socket(int domain, int type, \ + SYS_CONNECT = 98 // { int connect(int s, caddr_t name, \ + SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } + SYS_BIND = 104 // { int bind(int s, caddr_t name, \ + SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \ + SYS_LISTEN = 106 // { int listen(int s, int backlog); } + SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \ + SYS_GETRUSAGE = 117 // { int getrusage(int who, \ + SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \ + SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, \ + SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \ + SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \ + SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } + SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } + SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } + SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } + SYS_RENAME = 128 // { int rename(char *from, char *to); } + SYS_FLOCK = 131 // { int flock(int fd, int how); } + SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } + SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \ + SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, \ + SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } + SYS_RMDIR = 137 // { int rmdir(char *path); } + SYS_UTIMES = 138 // { int utimes(char *path, \ + SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \ + SYS_SETSID = 147 // { int setsid(void); } + SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \ + SYS_LGETFH = 160 // { int lgetfh(char *fname, \ + SYS_GETFH = 161 // { int getfh(char *fname, \ + SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } + SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \ + SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \ + SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, \ + SYS_SETFIB = 175 // { int setfib(int fibnum); } + SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int setgid(gid_t gid); } + SYS_SETEGID = 182 // { int setegid(gid_t egid); } + SYS_SETEUID = 183 // { int seteuid(uid_t euid); } + SYS_STAT = 188 // { int stat(char *path, struct stat *ub); } + SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); } + SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); } + SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } + SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \ + SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \ + SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, \ + SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \ + SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, \ + SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, \ + SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, \ + SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, \ + SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int undelete(char *path); } + SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } + SYS_GETPGID = 207 // { int getpgid(pid_t pid); } + SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \ + SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \ + SYS_CLOCK_SETTIME = 233 // { int clock_settime( \ + SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \ + SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, \ + SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); } + SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, \ + SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct \ + SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); } + SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \ + SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); } + SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( \ + SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( \ + SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,\ + SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); } + SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, \ + SYS_RFORK = 251 // { int rfork(int flags); } + SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, \ + SYS_ISSETUGID = 253 // { int issetugid(void); } + SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } + SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, \ + SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } + SYS_LUTIMES = 276 // { int lutimes(char *path, \ + SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); } + SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); } + SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); } + SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, \ + SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, \ + SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, \ + SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, \ + SYS_MODNEXT = 300 // { int modnext(int modid); } + SYS_MODSTAT = 301 // { int modstat(int modid, \ + SYS_MODFNEXT = 302 // { int modfnext(int modid); } + SYS_MODFIND = 303 // { int modfind(const char *name); } + SYS_KLDLOAD = 304 // { int kldload(const char *file); } + SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } + SYS_KLDFIND = 306 // { int kldfind(const char *file); } + SYS_KLDNEXT = 307 // { int kldnext(int fileid); } + SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct \ + SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } + SYS_GETSID = 310 // { int getsid(pid_t pid); } + SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, \ + SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, \ + SYS_YIELD = 321 // { int yield(void); } + SYS_MLOCKALL = 324 // { int mlockall(int how); } + SYS_MUNLOCKALL = 325 // { int munlockall(void); } + SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); } + SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, \ + SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct \ + SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int \ + SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } + SYS_SCHED_YIELD = 331 // { int sched_yield (void); } + SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } + SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } + SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, \ + SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } + SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, \ + SYS_JAIL = 338 // { int jail(struct jail *jail); } + SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, \ + SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } + SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } + SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, \ + SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, \ + SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \ + SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \ + SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, \ + SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, \ + SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \ + SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, \ + SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \ + SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, \ + SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \ + SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( \ + SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( \ + SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \ + SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, \ + SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, \ + SYS_KQUEUE = 362 // { int kqueue(void); } + SYS_KEVENT = 363 // { int kevent(int fd, \ + SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, \ + SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, \ + SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, \ + SYS___SETUGID = 374 // { int __setugid(int flag); } + SYS_EACCESS = 376 // { int eaccess(char *path, int amode); } + SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, \ + SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); } + SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); } + SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, \ + SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, \ + SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, \ + SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, \ + SYS_KENV = 390 // { int kenv(int what, const char *name, \ + SYS_LCHFLAGS = 391 // { int lchflags(const char *path, \ + SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, \ + SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, \ + SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, \ + SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, \ + SYS_STATFS = 396 // { int statfs(char *path, \ + SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, \ + SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, \ + SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, \ + SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, \ + SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( \ + SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( \ + SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( \ + SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, \ + SYS_SIGACTION = 416 // { int sigaction(int sig, \ + SYS_SIGRETURN = 417 // { int sigreturn( \ + SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 422 // { int setcontext( \ + SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, \ + SYS_SWAPOFF = 424 // { int swapoff(const char *name); } + SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, \ + SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, \ + SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, \ + SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, \ + SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, \ + SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, \ + SYS_THR_EXIT = 431 // { void thr_exit(long *state); } + SYS_THR_SELF = 432 // { int thr_self(long *id); } + SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); } + SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); } + SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); } + SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); } + SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, \ + SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( \ + SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( \ + SYS_THR_SUSPEND = 442 // { int thr_suspend( \ + SYS_THR_WAKE = 443 // { int thr_wake(long id); } + SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); } + SYS_AUDIT = 445 // { int audit(const void *record, \ + SYS_AUDITON = 446 // { int auditon(int cmd, void *data, \ + SYS_GETAUID = 447 // { int getauid(uid_t *auid); } + SYS_SETAUID = 448 // { int setauid(uid_t *auid); } + SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); } + SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); } + SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( \ + SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( \ + SYS_AUDITCTL = 453 // { int auditctl(char *path); } + SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, \ + SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, \ + SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); } + SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); } + SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); } + SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, \ + SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, \ + SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, \ + SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, \ + SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, \ + SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); } + SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); } + SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); } + SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, \ + SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); } + SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); } + SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, \ + SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, \ + SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, \ + SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, \ + SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, \ + SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, \ + SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, \ + SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, \ + SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, \ + SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, \ + SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, \ + SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); } + SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); } + SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, \ + SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, \ + SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, \ + SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, \ + SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, \ + SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); } + SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); } + SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, \ + SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, \ + SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); } + SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); } + SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); } + SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, \ + SYS_CAP_ENTER = 516 // { int cap_enter(void); } + SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); } + SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); } + SYS_PDKILL = 519 // { int pdkill(int fd, int signum); } + SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); } + SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, \ + SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, \ + SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); } + SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, \ + SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, \ + SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, \ + SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, \ + SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, \ + SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, \ + SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, \ + SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, \ + SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, \ + SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, \ + SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, \ + SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, \ + SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, \ + SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, \ + SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, \ + SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, \ + SYS_ACCEPT4 = 541 // { int accept4(int s, \ + SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); } + SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, \ + SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \ + SYS_FUTIMENS = 546 // { int futimens(int fd, \ + SYS_UTIMENSAT = 547 // { int utimensat(int fd, \ ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go index 57a60ea..81722ac 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go @@ -1,5 +1,5 @@ // mksysnum_freebsd.pl -// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT +// Code generated by the command above; see README.md. DO NOT EDIT. // +build amd64,freebsd @@ -7,345 +7,347 @@ package unix const ( // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int - SYS_EXIT = 1 // { void sys_exit(int rval); } exit \ - SYS_FORK = 2 // { int fork(void); } - SYS_READ = 3 // { ssize_t read(int fd, void *buf, \ - SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, \ - SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } - SYS_CLOSE = 6 // { int close(int fd); } - SYS_WAIT4 = 7 // { int wait4(int pid, int *status, \ - SYS_LINK = 9 // { int link(char *path, char *link); } - SYS_UNLINK = 10 // { int unlink(char *path); } - SYS_CHDIR = 12 // { int chdir(char *path); } - SYS_FCHDIR = 13 // { int fchdir(int fd); } - SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); } - SYS_CHMOD = 15 // { int chmod(char *path, int mode); } - SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } - SYS_OBREAK = 17 // { int obreak(char *nsize); } break \ - SYS_GETPID = 20 // { pid_t getpid(void); } - SYS_MOUNT = 21 // { int mount(char *type, char *path, \ - SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } - SYS_SETUID = 23 // { int setuid(uid_t uid); } - SYS_GETUID = 24 // { uid_t getuid(void); } - SYS_GETEUID = 25 // { uid_t geteuid(void); } - SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, \ - SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, \ - SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, \ - SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, \ - SYS_ACCEPT = 30 // { int accept(int s, \ - SYS_GETPEERNAME = 31 // { int getpeername(int fdes, \ - SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, \ - SYS_ACCESS = 33 // { int access(char *path, int amode); } - SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); } - SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); } - SYS_SYNC = 36 // { int sync(void); } - SYS_KILL = 37 // { int kill(int pid, int signum); } - SYS_GETPPID = 39 // { pid_t getppid(void); } - SYS_DUP = 41 // { int dup(u_int fd); } - SYS_PIPE = 42 // { int pipe(void); } - SYS_GETEGID = 43 // { gid_t getegid(void); } - SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \ - SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, \ - SYS_GETGID = 47 // { gid_t getgid(void); } - SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int \ - SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } - SYS_ACCT = 51 // { int acct(char *path); } - SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, \ - SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, \ - SYS_REBOOT = 55 // { int reboot(int opt); } - SYS_REVOKE = 56 // { int revoke(char *path); } - SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } - SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, \ - SYS_EXECVE = 59 // { int execve(char *fname, char **argv, \ - SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args \ - SYS_CHROOT = 61 // { int chroot(char *path); } - SYS_MSYNC = 65 // { int msync(void *addr, size_t len, \ - SYS_VFORK = 66 // { int vfork(void); } - SYS_SBRK = 69 // { int sbrk(int incr); } - SYS_SSTK = 70 // { int sstk(int incr); } - SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise \ - SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } - SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, \ - SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, \ - SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \ - SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, \ - SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, \ - SYS_GETPGRP = 81 // { int getpgrp(void); } - SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } - SYS_SETITIMER = 83 // { int setitimer(u_int which, struct \ - SYS_SWAPON = 85 // { int swapon(char *name); } - SYS_GETITIMER = 86 // { int getitimer(u_int which, \ - SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } - SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); } - SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } - SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \ - SYS_FSYNC = 95 // { int fsync(int fd); } - SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, \ - SYS_SOCKET = 97 // { int socket(int domain, int type, \ - SYS_CONNECT = 98 // { int connect(int s, caddr_t name, \ - SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } - SYS_BIND = 104 // { int bind(int s, caddr_t name, \ - SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \ - SYS_LISTEN = 106 // { int listen(int s, int backlog); } - SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \ - SYS_GETRUSAGE = 117 // { int getrusage(int who, \ - SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \ - SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, \ - SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \ - SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \ - SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } - SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } - SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } - SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } - SYS_RENAME = 128 // { int rename(char *from, char *to); } - SYS_FLOCK = 131 // { int flock(int fd, int how); } - SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } - SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \ - SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } - SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, \ - SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } - SYS_RMDIR = 137 // { int rmdir(char *path); } - SYS_UTIMES = 138 // { int utimes(char *path, \ - SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \ - SYS_SETSID = 147 // { int setsid(void); } - SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \ - SYS_LGETFH = 160 // { int lgetfh(char *fname, \ - SYS_GETFH = 161 // { int getfh(char *fname, \ - SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } - SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \ - SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \ - SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, \ - SYS_SETFIB = 175 // { int setfib(int fibnum); } - SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } - SYS_SETGID = 181 // { int setgid(gid_t gid); } - SYS_SETEGID = 182 // { int setegid(gid_t egid); } - SYS_SETEUID = 183 // { int seteuid(uid_t euid); } - SYS_STAT = 188 // { int stat(char *path, struct stat *ub); } - SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); } - SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); } - SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } - SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } - SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \ - SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \ - SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, \ - SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \ - SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, \ - SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, \ - SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, \ - SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, \ - SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } - SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } - SYS_UNDELETE = 205 // { int undelete(char *path); } - SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } - SYS_GETPGID = 207 // { int getpgid(pid_t pid); } - SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \ - SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \ - SYS_CLOCK_SETTIME = 233 // { int clock_settime( \ - SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \ - SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, \ - SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); } - SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, \ - SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct \ - SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); } - SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \ - SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); } - SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( \ - SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( \ - SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,\ - SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); } - SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, \ - SYS_RFORK = 251 // { int rfork(int flags); } - SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, \ - SYS_ISSETUGID = 253 // { int issetugid(void); } - SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } - SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, \ - SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } - SYS_LUTIMES = 276 // { int lutimes(char *path, \ - SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); } - SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); } - SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); } - SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, \ - SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, \ - SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, \ - SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, \ - SYS_MODNEXT = 300 // { int modnext(int modid); } - SYS_MODSTAT = 301 // { int modstat(int modid, \ - SYS_MODFNEXT = 302 // { int modfnext(int modid); } - SYS_MODFIND = 303 // { int modfind(const char *name); } - SYS_KLDLOAD = 304 // { int kldload(const char *file); } - SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } - SYS_KLDFIND = 306 // { int kldfind(const char *file); } - SYS_KLDNEXT = 307 // { int kldnext(int fileid); } - SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct \ - SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } - SYS_GETSID = 310 // { int getsid(pid_t pid); } - SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, \ - SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, \ - SYS_YIELD = 321 // { int yield(void); } - SYS_MLOCKALL = 324 // { int mlockall(int how); } - SYS_MUNLOCKALL = 325 // { int munlockall(void); } - SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); } - SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, \ - SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct \ - SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int \ - SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } - SYS_SCHED_YIELD = 331 // { int sched_yield (void); } - SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } - SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } - SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, \ - SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } - SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, \ - SYS_JAIL = 338 // { int jail(struct jail *jail); } - SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, \ - SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } - SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } - SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, \ - SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, \ - SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \ - SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \ - SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, \ - SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, \ - SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \ - SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, \ - SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \ - SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, \ - SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \ - SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( \ - SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( \ - SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \ - SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, \ - SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, \ - SYS_KQUEUE = 362 // { int kqueue(void); } - SYS_KEVENT = 363 // { int kevent(int fd, \ - SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, \ - SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, \ - SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, \ - SYS___SETUGID = 374 // { int __setugid(int flag); } - SYS_EACCESS = 376 // { int eaccess(char *path, int amode); } - SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, \ - SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); } - SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); } - SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, \ - SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, \ - SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, \ - SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, \ - SYS_KENV = 390 // { int kenv(int what, const char *name, \ - SYS_LCHFLAGS = 391 // { int lchflags(const char *path, \ - SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, \ - SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, \ - SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, \ - SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, \ - SYS_STATFS = 396 // { int statfs(char *path, \ - SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); } - SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, \ - SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, \ - SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, \ - SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, \ - SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( \ - SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( \ - SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( \ - SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, \ - SYS_SIGACTION = 416 // { int sigaction(int sig, \ - SYS_SIGRETURN = 417 // { int sigreturn( \ - SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); } - SYS_SETCONTEXT = 422 // { int setcontext( \ - SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, \ - SYS_SWAPOFF = 424 // { int swapoff(const char *name); } - SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, \ - SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, \ - SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, \ - SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, \ - SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, \ - SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, \ - SYS_THR_EXIT = 431 // { void thr_exit(long *state); } - SYS_THR_SELF = 432 // { int thr_self(long *id); } - SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); } - SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); } - SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); } - SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); } - SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, \ - SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( \ - SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( \ - SYS_THR_SUSPEND = 442 // { int thr_suspend( \ - SYS_THR_WAKE = 443 // { int thr_wake(long id); } - SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); } - SYS_AUDIT = 445 // { int audit(const void *record, \ - SYS_AUDITON = 446 // { int auditon(int cmd, void *data, \ - SYS_GETAUID = 447 // { int getauid(uid_t *auid); } - SYS_SETAUID = 448 // { int setauid(uid_t *auid); } - SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); } - SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); } - SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( \ - SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( \ - SYS_AUDITCTL = 453 // { int auditctl(char *path); } - SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, \ - SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, \ - SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); } - SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); } - SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); } - SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, \ - SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); } - SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, \ - SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, \ - SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, \ - SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, \ - SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, \ - SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, \ - SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, \ - SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); } - SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); } - SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); } - SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, \ - SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); } - SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); } - SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, \ - SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, \ - SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, \ - SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, \ - SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, \ - SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, \ - SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, \ - SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, \ - SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, \ - SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, \ - SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, \ - SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); } - SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); } - SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, \ - SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, \ - SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, \ - SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, \ - SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, \ - SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); } - SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); } - SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, \ - SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, \ - SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); } - SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); } - SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); } - SYS_CAP_NEW = 514 // { int cap_new(int fd, uint64_t rights); } - SYS_CAP_GETRIGHTS = 515 // { int cap_getrights(int fd, \ - SYS_CAP_ENTER = 516 // { int cap_enter(void); } - SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); } - SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); } - SYS_PDKILL = 519 // { int pdkill(int fd, int signum); } - SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); } - SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, \ - SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, \ - SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); } - SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, \ - SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, \ - SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, \ - SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, \ - SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, \ - SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, \ - SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, \ - SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, \ - SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, \ - SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, \ - SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, \ - SYS_ACCEPT4 = 541 // { int accept4(int s, \ - SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); } - SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, \ - SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \ + SYS_EXIT = 1 // { void sys_exit(int rval); } exit \ + SYS_FORK = 2 // { int fork(void); } + SYS_READ = 3 // { ssize_t read(int fd, void *buf, \ + SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, \ + SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } + SYS_CLOSE = 6 // { int close(int fd); } + SYS_WAIT4 = 7 // { int wait4(int pid, int *status, \ + SYS_LINK = 9 // { int link(char *path, char *link); } + SYS_UNLINK = 10 // { int unlink(char *path); } + SYS_CHDIR = 12 // { int chdir(char *path); } + SYS_FCHDIR = 13 // { int fchdir(int fd); } + SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); } + SYS_CHMOD = 15 // { int chmod(char *path, int mode); } + SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } + SYS_OBREAK = 17 // { int obreak(char *nsize); } break \ + SYS_GETPID = 20 // { pid_t getpid(void); } + SYS_MOUNT = 21 // { int mount(char *type, char *path, \ + SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } + SYS_SETUID = 23 // { int setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t getuid(void); } + SYS_GETEUID = 25 // { uid_t geteuid(void); } + SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, \ + SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, \ + SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, \ + SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, \ + SYS_ACCEPT = 30 // { int accept(int s, \ + SYS_GETPEERNAME = 31 // { int getpeername(int fdes, \ + SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, \ + SYS_ACCESS = 33 // { int access(char *path, int amode); } + SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { int sync(void); } + SYS_KILL = 37 // { int kill(int pid, int signum); } + SYS_GETPPID = 39 // { pid_t getppid(void); } + SYS_DUP = 41 // { int dup(u_int fd); } + SYS_PIPE = 42 // { int pipe(void); } + SYS_GETEGID = 43 // { gid_t getegid(void); } + SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \ + SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, \ + SYS_GETGID = 47 // { gid_t getgid(void); } + SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int \ + SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } + SYS_ACCT = 51 // { int acct(char *path); } + SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, \ + SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, \ + SYS_REBOOT = 55 // { int reboot(int opt); } + SYS_REVOKE = 56 // { int revoke(char *path); } + SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } + SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, \ + SYS_EXECVE = 59 // { int execve(char *fname, char **argv, \ + SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args \ + SYS_CHROOT = 61 // { int chroot(char *path); } + SYS_MSYNC = 65 // { int msync(void *addr, size_t len, \ + SYS_VFORK = 66 // { int vfork(void); } + SYS_SBRK = 69 // { int sbrk(int incr); } + SYS_SSTK = 70 // { int sstk(int incr); } + SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise \ + SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, \ + SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, \ + SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \ + SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, \ + SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, \ + SYS_GETPGRP = 81 // { int getpgrp(void); } + SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } + SYS_SETITIMER = 83 // { int setitimer(u_int which, struct \ + SYS_SWAPON = 85 // { int swapon(char *name); } + SYS_GETITIMER = 86 // { int getitimer(u_int which, \ + SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } + SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); } + SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } + SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \ + SYS_FSYNC = 95 // { int fsync(int fd); } + SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, \ + SYS_SOCKET = 97 // { int socket(int domain, int type, \ + SYS_CONNECT = 98 // { int connect(int s, caddr_t name, \ + SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } + SYS_BIND = 104 // { int bind(int s, caddr_t name, \ + SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \ + SYS_LISTEN = 106 // { int listen(int s, int backlog); } + SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \ + SYS_GETRUSAGE = 117 // { int getrusage(int who, \ + SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \ + SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, \ + SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \ + SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \ + SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } + SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } + SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } + SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } + SYS_RENAME = 128 // { int rename(char *from, char *to); } + SYS_FLOCK = 131 // { int flock(int fd, int how); } + SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } + SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \ + SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, \ + SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } + SYS_RMDIR = 137 // { int rmdir(char *path); } + SYS_UTIMES = 138 // { int utimes(char *path, \ + SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \ + SYS_SETSID = 147 // { int setsid(void); } + SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \ + SYS_LGETFH = 160 // { int lgetfh(char *fname, \ + SYS_GETFH = 161 // { int getfh(char *fname, \ + SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } + SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \ + SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \ + SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, \ + SYS_SETFIB = 175 // { int setfib(int fibnum); } + SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int setgid(gid_t gid); } + SYS_SETEGID = 182 // { int setegid(gid_t egid); } + SYS_SETEUID = 183 // { int seteuid(uid_t euid); } + SYS_STAT = 188 // { int stat(char *path, struct stat *ub); } + SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); } + SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); } + SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } + SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \ + SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \ + SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, \ + SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \ + SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, \ + SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, \ + SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, \ + SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, \ + SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int undelete(char *path); } + SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } + SYS_GETPGID = 207 // { int getpgid(pid_t pid); } + SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \ + SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \ + SYS_CLOCK_SETTIME = 233 // { int clock_settime( \ + SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \ + SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, \ + SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); } + SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, \ + SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct \ + SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); } + SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \ + SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); } + SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( \ + SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( \ + SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,\ + SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); } + SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, \ + SYS_RFORK = 251 // { int rfork(int flags); } + SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, \ + SYS_ISSETUGID = 253 // { int issetugid(void); } + SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } + SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, \ + SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } + SYS_LUTIMES = 276 // { int lutimes(char *path, \ + SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); } + SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); } + SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); } + SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, \ + SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, \ + SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, \ + SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, \ + SYS_MODNEXT = 300 // { int modnext(int modid); } + SYS_MODSTAT = 301 // { int modstat(int modid, \ + SYS_MODFNEXT = 302 // { int modfnext(int modid); } + SYS_MODFIND = 303 // { int modfind(const char *name); } + SYS_KLDLOAD = 304 // { int kldload(const char *file); } + SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } + SYS_KLDFIND = 306 // { int kldfind(const char *file); } + SYS_KLDNEXT = 307 // { int kldnext(int fileid); } + SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct \ + SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } + SYS_GETSID = 310 // { int getsid(pid_t pid); } + SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, \ + SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, \ + SYS_YIELD = 321 // { int yield(void); } + SYS_MLOCKALL = 324 // { int mlockall(int how); } + SYS_MUNLOCKALL = 325 // { int munlockall(void); } + SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); } + SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, \ + SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct \ + SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int \ + SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } + SYS_SCHED_YIELD = 331 // { int sched_yield (void); } + SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } + SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } + SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, \ + SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } + SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, \ + SYS_JAIL = 338 // { int jail(struct jail *jail); } + SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, \ + SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } + SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } + SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, \ + SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, \ + SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \ + SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \ + SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, \ + SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, \ + SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \ + SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, \ + SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \ + SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, \ + SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \ + SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( \ + SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( \ + SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \ + SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, \ + SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, \ + SYS_KQUEUE = 362 // { int kqueue(void); } + SYS_KEVENT = 363 // { int kevent(int fd, \ + SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, \ + SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, \ + SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, \ + SYS___SETUGID = 374 // { int __setugid(int flag); } + SYS_EACCESS = 376 // { int eaccess(char *path, int amode); } + SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, \ + SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); } + SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); } + SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, \ + SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, \ + SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, \ + SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, \ + SYS_KENV = 390 // { int kenv(int what, const char *name, \ + SYS_LCHFLAGS = 391 // { int lchflags(const char *path, \ + SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, \ + SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, \ + SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, \ + SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, \ + SYS_STATFS = 396 // { int statfs(char *path, \ + SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, \ + SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, \ + SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, \ + SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, \ + SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( \ + SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( \ + SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( \ + SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, \ + SYS_SIGACTION = 416 // { int sigaction(int sig, \ + SYS_SIGRETURN = 417 // { int sigreturn( \ + SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 422 // { int setcontext( \ + SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, \ + SYS_SWAPOFF = 424 // { int swapoff(const char *name); } + SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, \ + SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, \ + SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, \ + SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, \ + SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, \ + SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, \ + SYS_THR_EXIT = 431 // { void thr_exit(long *state); } + SYS_THR_SELF = 432 // { int thr_self(long *id); } + SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); } + SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); } + SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); } + SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); } + SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, \ + SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( \ + SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( \ + SYS_THR_SUSPEND = 442 // { int thr_suspend( \ + SYS_THR_WAKE = 443 // { int thr_wake(long id); } + SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); } + SYS_AUDIT = 445 // { int audit(const void *record, \ + SYS_AUDITON = 446 // { int auditon(int cmd, void *data, \ + SYS_GETAUID = 447 // { int getauid(uid_t *auid); } + SYS_SETAUID = 448 // { int setauid(uid_t *auid); } + SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); } + SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); } + SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( \ + SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( \ + SYS_AUDITCTL = 453 // { int auditctl(char *path); } + SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, \ + SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, \ + SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); } + SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); } + SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); } + SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, \ + SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, \ + SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, \ + SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, \ + SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, \ + SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); } + SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); } + SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); } + SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, \ + SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); } + SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); } + SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, \ + SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, \ + SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, \ + SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, \ + SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, \ + SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, \ + SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, \ + SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, \ + SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, \ + SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, \ + SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, \ + SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); } + SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); } + SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, \ + SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, \ + SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, \ + SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, \ + SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, \ + SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); } + SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); } + SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, \ + SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, \ + SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); } + SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); } + SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); } + SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, \ + SYS_CAP_ENTER = 516 // { int cap_enter(void); } + SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); } + SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); } + SYS_PDKILL = 519 // { int pdkill(int fd, int signum); } + SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); } + SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, \ + SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, \ + SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); } + SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, \ + SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, \ + SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, \ + SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, \ + SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, \ + SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, \ + SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, \ + SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, \ + SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, \ + SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, \ + SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, \ + SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, \ + SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, \ + SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, \ + SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, \ + SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, \ + SYS_ACCEPT4 = 541 // { int accept4(int s, \ + SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); } + SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, \ + SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \ + SYS_FUTIMENS = 546 // { int futimens(int fd, \ + SYS_UTIMENSAT = 547 // { int utimensat(int fd, \ ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go index 206b9f6..4488314 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go @@ -1,5 +1,5 @@ // mksysnum_freebsd.pl -// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT +// Code generated by the command above; see README.md. DO NOT EDIT. // +build arm,freebsd @@ -7,345 +7,347 @@ package unix const ( // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int - SYS_EXIT = 1 // { void sys_exit(int rval); } exit \ - SYS_FORK = 2 // { int fork(void); } - SYS_READ = 3 // { ssize_t read(int fd, void *buf, \ - SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, \ - SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } - SYS_CLOSE = 6 // { int close(int fd); } - SYS_WAIT4 = 7 // { int wait4(int pid, int *status, \ - SYS_LINK = 9 // { int link(char *path, char *link); } - SYS_UNLINK = 10 // { int unlink(char *path); } - SYS_CHDIR = 12 // { int chdir(char *path); } - SYS_FCHDIR = 13 // { int fchdir(int fd); } - SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); } - SYS_CHMOD = 15 // { int chmod(char *path, int mode); } - SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } - SYS_OBREAK = 17 // { int obreak(char *nsize); } break \ - SYS_GETPID = 20 // { pid_t getpid(void); } - SYS_MOUNT = 21 // { int mount(char *type, char *path, \ - SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } - SYS_SETUID = 23 // { int setuid(uid_t uid); } - SYS_GETUID = 24 // { uid_t getuid(void); } - SYS_GETEUID = 25 // { uid_t geteuid(void); } - SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, \ - SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, \ - SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, \ - SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, \ - SYS_ACCEPT = 30 // { int accept(int s, \ - SYS_GETPEERNAME = 31 // { int getpeername(int fdes, \ - SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, \ - SYS_ACCESS = 33 // { int access(char *path, int amode); } - SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); } - SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); } - SYS_SYNC = 36 // { int sync(void); } - SYS_KILL = 37 // { int kill(int pid, int signum); } - SYS_GETPPID = 39 // { pid_t getppid(void); } - SYS_DUP = 41 // { int dup(u_int fd); } - SYS_PIPE = 42 // { int pipe(void); } - SYS_GETEGID = 43 // { gid_t getegid(void); } - SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \ - SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, \ - SYS_GETGID = 47 // { gid_t getgid(void); } - SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int \ - SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } - SYS_ACCT = 51 // { int acct(char *path); } - SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, \ - SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, \ - SYS_REBOOT = 55 // { int reboot(int opt); } - SYS_REVOKE = 56 // { int revoke(char *path); } - SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } - SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, \ - SYS_EXECVE = 59 // { int execve(char *fname, char **argv, \ - SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args \ - SYS_CHROOT = 61 // { int chroot(char *path); } - SYS_MSYNC = 65 // { int msync(void *addr, size_t len, \ - SYS_VFORK = 66 // { int vfork(void); } - SYS_SBRK = 69 // { int sbrk(int incr); } - SYS_SSTK = 70 // { int sstk(int incr); } - SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise \ - SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } - SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, \ - SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, \ - SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \ - SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, \ - SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, \ - SYS_GETPGRP = 81 // { int getpgrp(void); } - SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } - SYS_SETITIMER = 83 // { int setitimer(u_int which, struct \ - SYS_SWAPON = 85 // { int swapon(char *name); } - SYS_GETITIMER = 86 // { int getitimer(u_int which, \ - SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } - SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); } - SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } - SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \ - SYS_FSYNC = 95 // { int fsync(int fd); } - SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, \ - SYS_SOCKET = 97 // { int socket(int domain, int type, \ - SYS_CONNECT = 98 // { int connect(int s, caddr_t name, \ - SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } - SYS_BIND = 104 // { int bind(int s, caddr_t name, \ - SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \ - SYS_LISTEN = 106 // { int listen(int s, int backlog); } - SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \ - SYS_GETRUSAGE = 117 // { int getrusage(int who, \ - SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \ - SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, \ - SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \ - SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \ - SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } - SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } - SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } - SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } - SYS_RENAME = 128 // { int rename(char *from, char *to); } - SYS_FLOCK = 131 // { int flock(int fd, int how); } - SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } - SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \ - SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } - SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, \ - SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } - SYS_RMDIR = 137 // { int rmdir(char *path); } - SYS_UTIMES = 138 // { int utimes(char *path, \ - SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \ - SYS_SETSID = 147 // { int setsid(void); } - SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \ - SYS_LGETFH = 160 // { int lgetfh(char *fname, \ - SYS_GETFH = 161 // { int getfh(char *fname, \ - SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } - SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \ - SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \ - SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, \ - SYS_SETFIB = 175 // { int setfib(int fibnum); } - SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } - SYS_SETGID = 181 // { int setgid(gid_t gid); } - SYS_SETEGID = 182 // { int setegid(gid_t egid); } - SYS_SETEUID = 183 // { int seteuid(uid_t euid); } - SYS_STAT = 188 // { int stat(char *path, struct stat *ub); } - SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); } - SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); } - SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } - SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } - SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \ - SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \ - SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, \ - SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \ - SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, \ - SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, \ - SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, \ - SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, \ - SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } - SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } - SYS_UNDELETE = 205 // { int undelete(char *path); } - SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } - SYS_GETPGID = 207 // { int getpgid(pid_t pid); } - SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \ - SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \ - SYS_CLOCK_SETTIME = 233 // { int clock_settime( \ - SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \ - SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, \ - SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); } - SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, \ - SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct \ - SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); } - SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \ - SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); } - SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( \ - SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( \ - SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,\ - SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); } - SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, \ - SYS_RFORK = 251 // { int rfork(int flags); } - SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, \ - SYS_ISSETUGID = 253 // { int issetugid(void); } - SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } - SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, \ - SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } - SYS_LUTIMES = 276 // { int lutimes(char *path, \ - SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); } - SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); } - SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); } - SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, \ - SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, \ - SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, \ - SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, \ - SYS_MODNEXT = 300 // { int modnext(int modid); } - SYS_MODSTAT = 301 // { int modstat(int modid, \ - SYS_MODFNEXT = 302 // { int modfnext(int modid); } - SYS_MODFIND = 303 // { int modfind(const char *name); } - SYS_KLDLOAD = 304 // { int kldload(const char *file); } - SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } - SYS_KLDFIND = 306 // { int kldfind(const char *file); } - SYS_KLDNEXT = 307 // { int kldnext(int fileid); } - SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct \ - SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } - SYS_GETSID = 310 // { int getsid(pid_t pid); } - SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, \ - SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, \ - SYS_YIELD = 321 // { int yield(void); } - SYS_MLOCKALL = 324 // { int mlockall(int how); } - SYS_MUNLOCKALL = 325 // { int munlockall(void); } - SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); } - SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, \ - SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct \ - SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int \ - SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } - SYS_SCHED_YIELD = 331 // { int sched_yield (void); } - SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } - SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } - SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, \ - SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } - SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, \ - SYS_JAIL = 338 // { int jail(struct jail *jail); } - SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, \ - SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } - SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } - SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, \ - SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, \ - SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \ - SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \ - SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, \ - SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, \ - SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \ - SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, \ - SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \ - SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, \ - SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \ - SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( \ - SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( \ - SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \ - SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, \ - SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, \ - SYS_KQUEUE = 362 // { int kqueue(void); } - SYS_KEVENT = 363 // { int kevent(int fd, \ - SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, \ - SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, \ - SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, \ - SYS___SETUGID = 374 // { int __setugid(int flag); } - SYS_EACCESS = 376 // { int eaccess(char *path, int amode); } - SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, \ - SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); } - SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); } - SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, \ - SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, \ - SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, \ - SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, \ - SYS_KENV = 390 // { int kenv(int what, const char *name, \ - SYS_LCHFLAGS = 391 // { int lchflags(const char *path, \ - SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, \ - SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, \ - SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, \ - SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, \ - SYS_STATFS = 396 // { int statfs(char *path, \ - SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); } - SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, \ - SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, \ - SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, \ - SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, \ - SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( \ - SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( \ - SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( \ - SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, \ - SYS_SIGACTION = 416 // { int sigaction(int sig, \ - SYS_SIGRETURN = 417 // { int sigreturn( \ - SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); } - SYS_SETCONTEXT = 422 // { int setcontext( \ - SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, \ - SYS_SWAPOFF = 424 // { int swapoff(const char *name); } - SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, \ - SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, \ - SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, \ - SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, \ - SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, \ - SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, \ - SYS_THR_EXIT = 431 // { void thr_exit(long *state); } - SYS_THR_SELF = 432 // { int thr_self(long *id); } - SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); } - SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); } - SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); } - SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); } - SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, \ - SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( \ - SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( \ - SYS_THR_SUSPEND = 442 // { int thr_suspend( \ - SYS_THR_WAKE = 443 // { int thr_wake(long id); } - SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); } - SYS_AUDIT = 445 // { int audit(const void *record, \ - SYS_AUDITON = 446 // { int auditon(int cmd, void *data, \ - SYS_GETAUID = 447 // { int getauid(uid_t *auid); } - SYS_SETAUID = 448 // { int setauid(uid_t *auid); } - SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); } - SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); } - SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( \ - SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( \ - SYS_AUDITCTL = 453 // { int auditctl(char *path); } - SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, \ - SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, \ - SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); } - SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); } - SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); } - SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, \ - SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); } - SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, \ - SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, \ - SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, \ - SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, \ - SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, \ - SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, \ - SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, \ - SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); } - SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); } - SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); } - SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, \ - SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); } - SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); } - SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, \ - SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, \ - SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, \ - SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, \ - SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, \ - SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, \ - SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, \ - SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, \ - SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, \ - SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, \ - SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, \ - SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); } - SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); } - SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, \ - SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, \ - SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, \ - SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, \ - SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, \ - SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); } - SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); } - SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, \ - SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, \ - SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); } - SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); } - SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); } - SYS_CAP_NEW = 514 // { int cap_new(int fd, uint64_t rights); } - SYS_CAP_GETRIGHTS = 515 // { int cap_getrights(int fd, \ - SYS_CAP_ENTER = 516 // { int cap_enter(void); } - SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); } - SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); } - SYS_PDKILL = 519 // { int pdkill(int fd, int signum); } - SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); } - SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, \ - SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, \ - SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); } - SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, \ - SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, \ - SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, \ - SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, \ - SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, \ - SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, \ - SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, \ - SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, \ - SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, \ - SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, \ - SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, \ - SYS_ACCEPT4 = 541 // { int accept4(int s, \ - SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); } - SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, \ - SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \ + SYS_EXIT = 1 // { void sys_exit(int rval); } exit \ + SYS_FORK = 2 // { int fork(void); } + SYS_READ = 3 // { ssize_t read(int fd, void *buf, \ + SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, \ + SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } + SYS_CLOSE = 6 // { int close(int fd); } + SYS_WAIT4 = 7 // { int wait4(int pid, int *status, \ + SYS_LINK = 9 // { int link(char *path, char *link); } + SYS_UNLINK = 10 // { int unlink(char *path); } + SYS_CHDIR = 12 // { int chdir(char *path); } + SYS_FCHDIR = 13 // { int fchdir(int fd); } + SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); } + SYS_CHMOD = 15 // { int chmod(char *path, int mode); } + SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } + SYS_OBREAK = 17 // { int obreak(char *nsize); } break \ + SYS_GETPID = 20 // { pid_t getpid(void); } + SYS_MOUNT = 21 // { int mount(char *type, char *path, \ + SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } + SYS_SETUID = 23 // { int setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t getuid(void); } + SYS_GETEUID = 25 // { uid_t geteuid(void); } + SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, \ + SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, \ + SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, \ + SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, \ + SYS_ACCEPT = 30 // { int accept(int s, \ + SYS_GETPEERNAME = 31 // { int getpeername(int fdes, \ + SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, \ + SYS_ACCESS = 33 // { int access(char *path, int amode); } + SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { int sync(void); } + SYS_KILL = 37 // { int kill(int pid, int signum); } + SYS_GETPPID = 39 // { pid_t getppid(void); } + SYS_DUP = 41 // { int dup(u_int fd); } + SYS_PIPE = 42 // { int pipe(void); } + SYS_GETEGID = 43 // { gid_t getegid(void); } + SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \ + SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, \ + SYS_GETGID = 47 // { gid_t getgid(void); } + SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int \ + SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } + SYS_ACCT = 51 // { int acct(char *path); } + SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, \ + SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, \ + SYS_REBOOT = 55 // { int reboot(int opt); } + SYS_REVOKE = 56 // { int revoke(char *path); } + SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } + SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, \ + SYS_EXECVE = 59 // { int execve(char *fname, char **argv, \ + SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args \ + SYS_CHROOT = 61 // { int chroot(char *path); } + SYS_MSYNC = 65 // { int msync(void *addr, size_t len, \ + SYS_VFORK = 66 // { int vfork(void); } + SYS_SBRK = 69 // { int sbrk(int incr); } + SYS_SSTK = 70 // { int sstk(int incr); } + SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise \ + SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, \ + SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, \ + SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \ + SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, \ + SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, \ + SYS_GETPGRP = 81 // { int getpgrp(void); } + SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } + SYS_SETITIMER = 83 // { int setitimer(u_int which, struct \ + SYS_SWAPON = 85 // { int swapon(char *name); } + SYS_GETITIMER = 86 // { int getitimer(u_int which, \ + SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } + SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); } + SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } + SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \ + SYS_FSYNC = 95 // { int fsync(int fd); } + SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, \ + SYS_SOCKET = 97 // { int socket(int domain, int type, \ + SYS_CONNECT = 98 // { int connect(int s, caddr_t name, \ + SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } + SYS_BIND = 104 // { int bind(int s, caddr_t name, \ + SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \ + SYS_LISTEN = 106 // { int listen(int s, int backlog); } + SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \ + SYS_GETRUSAGE = 117 // { int getrusage(int who, \ + SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \ + SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, \ + SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \ + SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \ + SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } + SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } + SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } + SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } + SYS_RENAME = 128 // { int rename(char *from, char *to); } + SYS_FLOCK = 131 // { int flock(int fd, int how); } + SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } + SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \ + SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, \ + SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } + SYS_RMDIR = 137 // { int rmdir(char *path); } + SYS_UTIMES = 138 // { int utimes(char *path, \ + SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \ + SYS_SETSID = 147 // { int setsid(void); } + SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \ + SYS_LGETFH = 160 // { int lgetfh(char *fname, \ + SYS_GETFH = 161 // { int getfh(char *fname, \ + SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } + SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \ + SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \ + SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, \ + SYS_SETFIB = 175 // { int setfib(int fibnum); } + SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int setgid(gid_t gid); } + SYS_SETEGID = 182 // { int setegid(gid_t egid); } + SYS_SETEUID = 183 // { int seteuid(uid_t euid); } + SYS_STAT = 188 // { int stat(char *path, struct stat *ub); } + SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); } + SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); } + SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } + SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \ + SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \ + SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, \ + SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \ + SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, \ + SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, \ + SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, \ + SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, \ + SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int undelete(char *path); } + SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } + SYS_GETPGID = 207 // { int getpgid(pid_t pid); } + SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \ + SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \ + SYS_CLOCK_SETTIME = 233 // { int clock_settime( \ + SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \ + SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, \ + SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); } + SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, \ + SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct \ + SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); } + SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \ + SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); } + SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( \ + SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( \ + SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,\ + SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); } + SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, \ + SYS_RFORK = 251 // { int rfork(int flags); } + SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, \ + SYS_ISSETUGID = 253 // { int issetugid(void); } + SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } + SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, \ + SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } + SYS_LUTIMES = 276 // { int lutimes(char *path, \ + SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); } + SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); } + SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); } + SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, \ + SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, \ + SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, \ + SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, \ + SYS_MODNEXT = 300 // { int modnext(int modid); } + SYS_MODSTAT = 301 // { int modstat(int modid, \ + SYS_MODFNEXT = 302 // { int modfnext(int modid); } + SYS_MODFIND = 303 // { int modfind(const char *name); } + SYS_KLDLOAD = 304 // { int kldload(const char *file); } + SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } + SYS_KLDFIND = 306 // { int kldfind(const char *file); } + SYS_KLDNEXT = 307 // { int kldnext(int fileid); } + SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct \ + SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } + SYS_GETSID = 310 // { int getsid(pid_t pid); } + SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, \ + SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, \ + SYS_YIELD = 321 // { int yield(void); } + SYS_MLOCKALL = 324 // { int mlockall(int how); } + SYS_MUNLOCKALL = 325 // { int munlockall(void); } + SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); } + SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, \ + SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct \ + SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int \ + SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } + SYS_SCHED_YIELD = 331 // { int sched_yield (void); } + SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } + SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } + SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, \ + SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } + SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, \ + SYS_JAIL = 338 // { int jail(struct jail *jail); } + SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, \ + SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } + SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } + SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, \ + SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, \ + SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \ + SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \ + SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, \ + SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, \ + SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \ + SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, \ + SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \ + SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, \ + SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \ + SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( \ + SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( \ + SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \ + SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, \ + SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, \ + SYS_KQUEUE = 362 // { int kqueue(void); } + SYS_KEVENT = 363 // { int kevent(int fd, \ + SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, \ + SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, \ + SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, \ + SYS___SETUGID = 374 // { int __setugid(int flag); } + SYS_EACCESS = 376 // { int eaccess(char *path, int amode); } + SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, \ + SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); } + SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); } + SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, \ + SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, \ + SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, \ + SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, \ + SYS_KENV = 390 // { int kenv(int what, const char *name, \ + SYS_LCHFLAGS = 391 // { int lchflags(const char *path, \ + SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, \ + SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, \ + SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, \ + SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, \ + SYS_STATFS = 396 // { int statfs(char *path, \ + SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, \ + SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, \ + SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, \ + SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, \ + SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( \ + SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( \ + SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( \ + SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, \ + SYS_SIGACTION = 416 // { int sigaction(int sig, \ + SYS_SIGRETURN = 417 // { int sigreturn( \ + SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 422 // { int setcontext( \ + SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, \ + SYS_SWAPOFF = 424 // { int swapoff(const char *name); } + SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, \ + SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, \ + SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, \ + SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, \ + SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, \ + SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, \ + SYS_THR_EXIT = 431 // { void thr_exit(long *state); } + SYS_THR_SELF = 432 // { int thr_self(long *id); } + SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); } + SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); } + SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); } + SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); } + SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, \ + SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( \ + SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( \ + SYS_THR_SUSPEND = 442 // { int thr_suspend( \ + SYS_THR_WAKE = 443 // { int thr_wake(long id); } + SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); } + SYS_AUDIT = 445 // { int audit(const void *record, \ + SYS_AUDITON = 446 // { int auditon(int cmd, void *data, \ + SYS_GETAUID = 447 // { int getauid(uid_t *auid); } + SYS_SETAUID = 448 // { int setauid(uid_t *auid); } + SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); } + SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); } + SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( \ + SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( \ + SYS_AUDITCTL = 453 // { int auditctl(char *path); } + SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, \ + SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, \ + SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); } + SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); } + SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); } + SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, \ + SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, \ + SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, \ + SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, \ + SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, \ + SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); } + SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); } + SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); } + SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, \ + SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); } + SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); } + SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, \ + SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, \ + SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, \ + SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, \ + SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, \ + SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, \ + SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, \ + SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, \ + SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, \ + SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, \ + SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, \ + SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); } + SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); } + SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, \ + SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, \ + SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, \ + SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, \ + SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, \ + SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); } + SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); } + SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, \ + SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, \ + SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); } + SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); } + SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); } + SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, \ + SYS_CAP_ENTER = 516 // { int cap_enter(void); } + SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); } + SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); } + SYS_PDKILL = 519 // { int pdkill(int fd, int signum); } + SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); } + SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, \ + SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, \ + SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); } + SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, \ + SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, \ + SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, \ + SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, \ + SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, \ + SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, \ + SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, \ + SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, \ + SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, \ + SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, \ + SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, \ + SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, \ + SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, \ + SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, \ + SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, \ + SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, \ + SYS_ACCEPT4 = 541 // { int accept4(int s, \ + SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); } + SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, \ + SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \ + SYS_FUTIMENS = 546 // { int futimens(int fd, \ + SYS_UTIMENSAT = 547 // { int utimensat(int fd, \ ) 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 cef4fed..95ab129 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go @@ -385,4 +385,6 @@ const ( SYS_PKEY_MPROTECT = 380 SYS_PKEY_ALLOC = 381 SYS_PKEY_FREE = 382 + SYS_STATX = 383 + SYS_ARCH_PRCTL = 384 ) 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 49bfa12..c5dabf2 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go @@ -338,4 +338,5 @@ const ( SYS_PKEY_MPROTECT = 329 SYS_PKEY_ALLOC = 330 SYS_PKEY_FREE = 331 + SYS_STATX = 332 ) 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 97b182e..ab7fa5f 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go @@ -358,4 +358,5 @@ const ( SYS_PKEY_MPROTECT = 394 SYS_PKEY_ALLOC = 395 SYS_PKEY_FREE = 396 + SYS_STATX = 397 ) 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 6407843..b1c6b4b 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go @@ -282,4 +282,5 @@ const ( SYS_PKEY_MPROTECT = 288 SYS_PKEY_ALLOC = 289 SYS_PKEY_FREE = 290 + SYS_STATX = 291 ) 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 939567c..2e9aa7a 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go @@ -371,4 +371,5 @@ const ( SYS_PKEY_MPROTECT = 4363 SYS_PKEY_ALLOC = 4364 SYS_PKEY_FREE = 4365 + SYS_STATX = 4366 ) 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 09db959..9282763 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go @@ -331,4 +331,5 @@ const ( SYS_PKEY_MPROTECT = 5323 SYS_PKEY_ALLOC = 5324 SYS_PKEY_FREE = 5325 + SYS_STATX = 5326 ) 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 d1b872a..45bd3fd 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go @@ -331,4 +331,5 @@ const ( SYS_PKEY_MPROTECT = 5323 SYS_PKEY_ALLOC = 5324 SYS_PKEY_FREE = 5325 + SYS_STATX = 5326 ) 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 82ba20f..62ccac4 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go @@ -371,4 +371,5 @@ const ( SYS_PKEY_MPROTECT = 4363 SYS_PKEY_ALLOC = 4364 SYS_PKEY_FREE = 4365 + SYS_STATX = 4366 ) 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 8944448..dfe5dab 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go @@ -366,4 +366,5 @@ const ( SYS_PREADV2 = 380 SYS_PWRITEV2 = 381 SYS_KEXEC_FILE_LOAD = 382 + SYS_STATX = 383 ) 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 90a039b..eca97f7 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go @@ -366,4 +366,5 @@ const ( SYS_PREADV2 = 380 SYS_PWRITEV2 = 381 SYS_KEXEC_FILE_LOAD = 382 + SYS_STATX = 383 ) 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 aab0cdb..8bf50c8 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go @@ -306,6 +306,9 @@ const ( SYS_COPY_FILE_RANGE = 375 SYS_PREADV2 = 376 SYS_PWRITEV2 = 377 + SYS_S390_GUARDED_STORAGE = 378 + SYS_STATX = 379 + SYS_S390_STHYI = 380 SYS_SELECT = 142 SYS_GETRLIMIT = 191 SYS_LCHOWN = 198 diff --git a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go index f60d8f9..8afda9c 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go @@ -134,6 +134,7 @@ const ( SYS_MINHERIT = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); } SYS_LCHMOD = 274 // { int|sys||lchmod(const char *path, mode_t mode); } SYS_LCHOWN = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); } + SYS_MSYNC = 277 // { int|sys|13|msync(void *addr, size_t len, int flags); } SYS___POSIX_CHOWN = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); } SYS___POSIX_FCHOWN = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); } SYS___POSIX_LCHOWN = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); } diff --git a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go index 48a91d4..aea8dbe 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go @@ -134,6 +134,7 @@ const ( SYS_MINHERIT = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); } SYS_LCHMOD = 274 // { int|sys||lchmod(const char *path, mode_t mode); } SYS_LCHOWN = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); } + SYS_MSYNC = 277 // { int|sys|13|msync(void *addr, size_t len, int flags); } SYS___POSIX_CHOWN = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); } SYS___POSIX_FCHOWN = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); } SYS___POSIX_LCHOWN = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); } diff --git a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go index 612ba66..c6158a7 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go @@ -134,6 +134,7 @@ const ( SYS_MINHERIT = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); } SYS_LCHMOD = 274 // { int|sys||lchmod(const char *path, mode_t mode); } SYS_LCHOWN = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); } + SYS_MSYNC = 277 // { int|sys|13|msync(void *addr, size_t len, int flags); } SYS___POSIX_CHOWN = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); } SYS___POSIX_FCHOWN = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); } SYS___POSIX_LCHOWN = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); } diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go new file mode 100644 index 0000000..32653e5 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go @@ -0,0 +1,213 @@ +// mksysnum_openbsd.pl +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build arm,openbsd + +package unix + +const ( + SYS_EXIT = 1 // { void sys_exit(int rval); } + SYS_FORK = 2 // { int sys_fork(void); } + SYS_READ = 3 // { ssize_t sys_read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, \ + SYS_OPEN = 5 // { int sys_open(const char *path, \ + SYS_CLOSE = 6 // { int sys_close(int fd); } + SYS_GETENTROPY = 7 // { int sys_getentropy(void *buf, size_t nbyte); } + SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, \ + SYS_LINK = 9 // { int sys_link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int sys_unlink(const char *path); } + SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, \ + SYS_CHDIR = 12 // { int sys_chdir(const char *path); } + SYS_FCHDIR = 13 // { int sys_fchdir(int fd); } + SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, \ + SYS_CHMOD = 15 // { int sys_chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, \ + SYS_OBREAK = 17 // { int sys_obreak(char *nsize); } break + SYS_GETDTABLECOUNT = 18 // { int sys_getdtablecount(void); } + SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, \ + SYS_GETPID = 20 // { pid_t sys_getpid(void); } + SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, \ + SYS_UNMOUNT = 22 // { int sys_unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int sys_setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t sys_getuid(void); } + SYS_GETEUID = 25 // { uid_t sys_geteuid(void); } + SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, \ + SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, \ + SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, \ + SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, \ + SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, \ + SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, \ + SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, \ + SYS_ACCESS = 33 // { int sys_access(const char *path, int amode); } + SYS_CHFLAGS = 34 // { int sys_chflags(const char *path, u_int flags); } + SYS_FCHFLAGS = 35 // { int sys_fchflags(int fd, u_int flags); } + SYS_SYNC = 36 // { void sys_sync(void); } + SYS_STAT = 38 // { int sys_stat(const char *path, struct stat *ub); } + SYS_GETPPID = 39 // { pid_t sys_getppid(void); } + SYS_LSTAT = 40 // { int sys_lstat(const char *path, struct stat *ub); } + SYS_DUP = 41 // { int sys_dup(int fd); } + SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, \ + SYS_GETEGID = 43 // { gid_t sys_getegid(void); } + SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, \ + SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, \ + SYS_SIGACTION = 46 // { int sys_sigaction(int signum, \ + SYS_GETGID = 47 // { gid_t sys_getgid(void); } + SYS_SIGPROCMASK = 48 // { int sys_sigprocmask(int how, sigset_t mask); } + SYS_GETLOGIN = 49 // { int sys_getlogin(char *namebuf, u_int namelen); } + SYS_SETLOGIN = 50 // { int sys_setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int sys_acct(const char *path); } + SYS_SIGPENDING = 52 // { int sys_sigpending(void); } + SYS_FSTAT = 53 // { int sys_fstat(int fd, struct stat *sb); } + SYS_IOCTL = 54 // { int sys_ioctl(int fd, \ + SYS_REBOOT = 55 // { int sys_reboot(int opt); } + SYS_REVOKE = 56 // { int sys_revoke(const char *path); } + SYS_SYMLINK = 57 // { int sys_symlink(const char *path, \ + SYS_READLINK = 58 // { ssize_t sys_readlink(const char *path, \ + SYS_EXECVE = 59 // { int sys_execve(const char *path, \ + SYS_UMASK = 60 // { mode_t sys_umask(mode_t newmask); } + SYS_CHROOT = 61 // { int sys_chroot(const char *path); } + SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, \ + SYS_STATFS = 63 // { int sys_statfs(const char *path, \ + SYS_FSTATFS = 64 // { int sys_fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, \ + SYS_VFORK = 66 // { int sys_vfork(void); } + SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, \ + SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, \ + SYS_SETITIMER = 69 // { int sys_setitimer(int which, \ + SYS_GETITIMER = 70 // { int sys_getitimer(int which, \ + SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, \ + SYS_KEVENT = 72 // { int sys_kevent(int fd, \ + SYS_MUNMAP = 73 // { int sys_munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, \ + SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, \ + SYS_UTIMES = 76 // { int sys_utimes(const char *path, \ + SYS_FUTIMES = 77 // { int sys_futimes(int fd, \ + SYS_MINCORE = 78 // { int sys_mincore(void *addr, size_t len, \ + SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, \ + SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, \ + SYS_GETPGRP = 81 // { int sys_getpgrp(void); } + SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, pid_t pgid); } + SYS_SENDSYSLOG = 83 // { int sys_sendsyslog(const void *buf, size_t nbyte); } + SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, \ + SYS_FUTIMENS = 85 // { int sys_futimens(int fd, \ + SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, \ + SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, \ + SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, \ + SYS_DUP2 = 90 // { int sys_dup2(int from, int to); } + SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, \ + SYS_FCNTL = 92 // { int sys_fcntl(int fd, int cmd, ... void *arg); } + SYS_ACCEPT4 = 93 // { int sys_accept4(int s, struct sockaddr *name, \ + SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, \ + SYS_FSYNC = 95 // { int sys_fsync(int fd); } + SYS_SETPRIORITY = 96 // { int sys_setpriority(int which, id_t who, int prio); } + SYS_SOCKET = 97 // { int sys_socket(int domain, int type, int protocol); } + SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, \ + SYS_GETDENTS = 99 // { int sys_getdents(int fd, void *buf, size_t buflen); } + SYS_GETPRIORITY = 100 // { int sys_getpriority(int which, id_t who); } + SYS_PIPE2 = 101 // { int sys_pipe2(int *fdp, int flags); } + SYS_DUP3 = 102 // { int sys_dup3(int from, int to, int flags); } + SYS_SIGRETURN = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); } + SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, \ + SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, \ + SYS_LISTEN = 106 // { int sys_listen(int s, int backlog); } + SYS_CHFLAGSAT = 107 // { int sys_chflagsat(int fd, const char *path, \ + SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, \ + SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, \ + SYS_SIGSUSPEND = 111 // { int sys_sigsuspend(int mask); } + SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, \ + SYS_READV = 120 // { ssize_t sys_readv(int fd, \ + SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, \ + SYS_KILL = 122 // { int sys_kill(int pid, int signum); } + SYS_FCHOWN = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int sys_fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int sys_setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int sys_rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int sys_flock(int fd, int how); } + SYS_MKFIFO = 132 // { int sys_mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, \ + SYS_SHUTDOWN = 134 // { int sys_shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, \ + SYS_MKDIR = 136 // { int sys_mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int sys_rmdir(const char *path); } + SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, \ + SYS_SETSID = 147 // { int sys_setsid(void); } + SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, \ + SYS_NFSSVC = 155 // { int sys_nfssvc(int flag, void *argp); } + SYS_GETFH = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); } + SYS_SYSARCH = 165 // { int sys_sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, \ + SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, \ + SYS_SETGID = 181 // { int sys_setgid(gid_t gid); } + SYS_SETEGID = 182 // { int sys_setegid(gid_t egid); } + SYS_SETEUID = 183 // { int sys_seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long sys_pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long sys_fpathconf(int fd, int name); } + SYS_SWAPCTL = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); } + SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, \ + SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, \ + SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, \ + SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, \ + SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, \ + SYS_FTRUNCATE = 201 // { int sys_ftruncate(int fd, int pad, off_t length); } + SYS___SYSCTL = 202 // { int sys___sysctl(const int *name, u_int namelen, \ + SYS_MLOCK = 203 // { int sys_mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int sys_munlock(const void *addr, size_t len); } + SYS_GETPGID = 207 // { pid_t sys_getpgid(pid_t pid); } + SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, \ + SYS_SEMGET = 221 // { int sys_semget(key_t key, int nsems, int semflg); } + SYS_MSGGET = 225 // { int sys_msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, \ + SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, \ + SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, \ + SYS_SHMDT = 230 // { int sys_shmdt(const void *shmaddr); } + SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, \ + SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, \ + SYS_ISSETUGID = 253 // { int sys_issetugid(void); } + SYS_LCHOWN = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 255 // { pid_t sys_getsid(pid_t pid); } + SYS_MSYNC = 256 // { int sys_msync(void *addr, size_t len, int flags); } + SYS_PIPE = 263 // { int sys_pipe(int *fdp); } + SYS_FHOPEN = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); } + SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, \ + SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, \ + SYS_KQUEUE = 269 // { int sys_kqueue(void); } + SYS_MLOCKALL = 271 // { int sys_mlockall(int flags); } + SYS_MUNLOCKALL = 272 // { int sys_munlockall(void); } + SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, \ + SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, \ + SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, \ + SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, \ + SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, \ + SYS_CLOSEFROM = 287 // { int sys_closefrom(int fd); } + SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, \ + SYS_SHMGET = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); } + SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, \ + SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, \ + SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, \ + SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, \ + SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, \ + SYS_SCHED_YIELD = 298 // { int sys_sched_yield(void); } + SYS_GETTHRID = 299 // { pid_t sys_getthrid(void); } + SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, \ + SYS___THREXIT = 302 // { void sys___threxit(pid_t *notdead); } + SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, \ + SYS___GETCWD = 304 // { int sys___getcwd(char *buf, size_t len); } + SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, \ + SYS_SETRTABLE = 310 // { int sys_setrtable(int rtableid); } + SYS_GETRTABLE = 311 // { int sys_getrtable(void); } + SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, \ + SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, \ + SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, \ + SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, \ + SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, \ + SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, \ + SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, \ + SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, \ + SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, \ + SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, \ + SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, \ + SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, \ + SYS___SET_TCB = 329 // { void sys___set_tcb(void *tcb); } + SYS___GET_TCB = 330 // { void *sys___get_tcb(void); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_solaris_amd64.go deleted file mode 100644 index c708659..0000000 --- a/vendor/golang.org/x/sys/unix/zsysnum_solaris_amd64.go +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2014 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 amd64,solaris - -package unix - -// TODO(aram): remove these before Go 1.3. -const ( - SYS_EXECVE = 59 - SYS_FCNTL = 62 -) 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 2de1d44..327af5f 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go @@ -1,6 +1,7 @@ +// cgo -godefs types_darwin.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + // +build 386,darwin -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs types_darwin.go package unix @@ -135,13 +136,13 @@ type Fsid struct { } type Dirent struct { - Ino uint64 - Seekoff uint64 - Reclen uint16 - Namlen uint16 - Type uint8 - Name [1024]int8 - Pad_cgo_0 [3]byte + Ino uint64 + Seekoff uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [1024]int8 + _ [3]byte } type RawSockaddrInet4 struct { @@ -294,14 +295,14 @@ const ( ) type IfMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Pad_cgo_0 [2]byte - Data IfData + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Data IfData } type IfData struct { @@ -337,51 +338,51 @@ type IfData struct { } type IfaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Pad_cgo_0 [2]byte - Metric int32 + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Metric int32 } type IfmaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Pad_cgo_0 [2]byte + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte } type IfmaMsghdr2 struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Pad_cgo_0 [2]byte - Refcount int32 + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Refcount int32 } type RtMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - Pad_cgo_0 [2]byte - Flags int32 - Addrs int32 - Pid int32 - Seq int32 - Errno int32 - Use int32 - Inits uint32 - Rmx RtMetrics + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + _ [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint32 + Rmx RtMetrics } type RtMetrics struct { @@ -429,11 +430,11 @@ type BpfInsn struct { } type BpfHdr struct { - Tstamp Timeval - Caplen uint32 - Datalen uint32 - Hdrlen uint16 - Pad_cgo_0 [2]byte + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + _ [2]byte } type Termios struct { @@ -445,3 +446,44 @@ type Termios struct { Ispeed uint32 Ospeed uint32 } + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x2 + AT_REMOVEDIR = 0x80 + AT_SYMLINK_FOLLOW = 0x40 + AT_SYMLINK_NOFOLLOW = 0x20 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} 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 0446578..116e6e0 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go @@ -1,6 +1,7 @@ +// cgo -godefs types_darwin.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + // +build amd64,darwin -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs types_darwin.go package unix @@ -25,9 +26,9 @@ type Timespec struct { } type Timeval struct { - Sec int64 - Usec int32 - Pad_cgo_0 [4]byte + Sec int64 + Usec int32 + _ [4]byte } type Timeval32 struct { @@ -69,7 +70,7 @@ type Stat_t struct { Uid uint32 Gid uint32 Rdev int32 - Pad_cgo_0 [4]byte + _ [4]byte Atimespec Timespec Mtimespec Timespec Ctimespec Timespec @@ -119,9 +120,9 @@ type Fstore_t struct { } type Radvisory_t struct { - Offset int64 - Count int32 - Pad_cgo_0 [4]byte + Offset int64 + Count int32 + _ [4]byte } type Fbootstraptransfer_t struct { @@ -131,9 +132,9 @@ type Fbootstraptransfer_t struct { } type Log2phys_t struct { - Flags uint32 - Pad_cgo_0 [8]byte - Pad_cgo_1 [8]byte + Flags uint32 + _ [8]byte + _ [8]byte } type Fsid struct { @@ -141,13 +142,13 @@ type Fsid struct { } type Dirent struct { - Ino uint64 - Seekoff uint64 - Reclen uint16 - Namlen uint16 - Type uint8 - Name [1024]int8 - Pad_cgo_0 [3]byte + Ino uint64 + Seekoff uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [1024]int8 + _ [3]byte } type RawSockaddrInet4 struct { @@ -220,10 +221,10 @@ type IPv6Mreq struct { type Msghdr struct { Name *byte Namelen uint32 - Pad_cgo_0 [4]byte + _ [4]byte Iov *Iovec Iovlen int32 - Pad_cgo_1 [4]byte + _ [4]byte Control *byte Controllen uint32 Flags int32 @@ -302,14 +303,14 @@ const ( ) type IfMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Pad_cgo_0 [2]byte - Data IfData + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Data IfData } type IfData struct { @@ -345,51 +346,51 @@ type IfData struct { } type IfaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Pad_cgo_0 [2]byte - Metric int32 + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Metric int32 } type IfmaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Pad_cgo_0 [2]byte + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte } type IfmaMsghdr2 struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Pad_cgo_0 [2]byte - Refcount int32 + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Refcount int32 } type RtMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - Pad_cgo_0 [2]byte - Flags int32 - Addrs int32 - Pid int32 - Seq int32 - Errno int32 - Use int32 - Inits uint32 - Rmx RtMetrics + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + _ [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint32 + Rmx RtMetrics } type RtMetrics struct { @@ -425,9 +426,9 @@ type BpfStat struct { } type BpfProgram struct { - Len uint32 - Pad_cgo_0 [4]byte - Insns *BpfInsn + Len uint32 + _ [4]byte + Insns *BpfInsn } type BpfInsn struct { @@ -438,25 +439,61 @@ type BpfInsn struct { } type BpfHdr struct { - Tstamp Timeval32 - Caplen uint32 - Datalen uint32 - Hdrlen uint16 - Pad_cgo_0 [2]byte + Tstamp Timeval32 + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + _ [2]byte } type Termios struct { - Iflag uint64 - Oflag uint64 - Cflag uint64 - Lflag uint64 - Cc [20]uint8 - Pad_cgo_0 [4]byte - Ispeed uint64 - Ospeed uint64 + Iflag uint64 + Oflag uint64 + Cflag uint64 + Lflag uint64 + Cc [20]uint8 + _ [4]byte + Ispeed uint64 + Ospeed uint64 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 } const ( AT_FDCWD = -0x2 + AT_REMOVEDIR = 0x80 + AT_SYMLINK_FOLLOW = 0x40 AT_SYMLINK_NOFOLLOW = 0x20 ) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} 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 66df363..2750ad7 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go @@ -137,13 +137,13 @@ type Fsid struct { } type Dirent struct { - Ino uint64 - Seekoff uint64 - Reclen uint16 - Namlen uint16 - Type uint8 - Name [1024]int8 - Pad_cgo_0 [3]byte + Ino uint64 + Seekoff uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [1024]int8 + _ [3]byte } type RawSockaddrInet4 struct { @@ -296,14 +296,14 @@ const ( ) type IfMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Pad_cgo_0 [2]byte - Data IfData + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Data IfData } type IfData struct { @@ -339,51 +339,51 @@ type IfData struct { } type IfaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Pad_cgo_0 [2]byte - Metric int32 + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Metric int32 } type IfmaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Pad_cgo_0 [2]byte + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte } type IfmaMsghdr2 struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Pad_cgo_0 [2]byte - Refcount int32 + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Refcount int32 } type RtMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - Pad_cgo_0 [2]byte - Flags int32 - Addrs int32 - Pid int32 - Seq int32 - Errno int32 - Use int32 - Inits uint32 - Rmx RtMetrics + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + _ [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint32 + Rmx RtMetrics } type RtMetrics struct { @@ -431,11 +431,11 @@ type BpfInsn struct { } type BpfHdr struct { - Tstamp Timeval - Caplen uint32 - Datalen uint32 - Hdrlen uint16 - Pad_cgo_0 [2]byte + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + _ [2]byte } type Termios struct { @@ -447,3 +447,44 @@ type Termios struct { Ispeed uint32 Ospeed uint32 } + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x2 + AT_REMOVEDIR = 0x80 + AT_SYMLINK_FOLLOW = 0x40 + AT_SYMLINK_NOFOLLOW = 0x20 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} 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 85d56ea..8cead09 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go @@ -1,6 +1,7 @@ +// cgo -godefs types_darwin.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + // +build arm64,darwin -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs types_darwin.go package unix @@ -25,9 +26,9 @@ type Timespec struct { } type Timeval struct { - Sec int64 - Usec int32 - Pad_cgo_0 [4]byte + Sec int64 + Usec int32 + _ [4]byte } type Timeval32 struct { @@ -69,7 +70,7 @@ type Stat_t struct { Uid uint32 Gid uint32 Rdev int32 - Pad_cgo_0 [4]byte + _ [4]byte Atimespec Timespec Mtimespec Timespec Ctimespec Timespec @@ -119,9 +120,9 @@ type Fstore_t struct { } type Radvisory_t struct { - Offset int64 - Count int32 - Pad_cgo_0 [4]byte + Offset int64 + Count int32 + _ [4]byte } type Fbootstraptransfer_t struct { @@ -131,9 +132,9 @@ type Fbootstraptransfer_t struct { } type Log2phys_t struct { - Flags uint32 - Pad_cgo_0 [8]byte - Pad_cgo_1 [8]byte + Flags uint32 + _ [8]byte + _ [8]byte } type Fsid struct { @@ -141,13 +142,13 @@ type Fsid struct { } type Dirent struct { - Ino uint64 - Seekoff uint64 - Reclen uint16 - Namlen uint16 - Type uint8 - Name [1024]int8 - Pad_cgo_0 [3]byte + Ino uint64 + Seekoff uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [1024]int8 + _ [3]byte } type RawSockaddrInet4 struct { @@ -220,10 +221,10 @@ type IPv6Mreq struct { type Msghdr struct { Name *byte Namelen uint32 - Pad_cgo_0 [4]byte + _ [4]byte Iov *Iovec Iovlen int32 - Pad_cgo_1 [4]byte + _ [4]byte Control *byte Controllen uint32 Flags int32 @@ -302,14 +303,14 @@ const ( ) type IfMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Pad_cgo_0 [2]byte - Data IfData + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Data IfData } type IfData struct { @@ -345,51 +346,51 @@ type IfData struct { } type IfaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Pad_cgo_0 [2]byte - Metric int32 + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Metric int32 } type IfmaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Pad_cgo_0 [2]byte + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte } type IfmaMsghdr2 struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Pad_cgo_0 [2]byte - Refcount int32 + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Refcount int32 } type RtMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - Pad_cgo_0 [2]byte - Flags int32 - Addrs int32 - Pid int32 - Seq int32 - Errno int32 - Use int32 - Inits uint32 - Rmx RtMetrics + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + _ [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint32 + Rmx RtMetrics } type RtMetrics struct { @@ -425,9 +426,9 @@ type BpfStat struct { } type BpfProgram struct { - Len uint32 - Pad_cgo_0 [4]byte - Insns *BpfInsn + Len uint32 + _ [4]byte + Insns *BpfInsn } type BpfInsn struct { @@ -438,20 +439,61 @@ type BpfInsn struct { } type BpfHdr struct { - Tstamp Timeval32 - Caplen uint32 - Datalen uint32 - Hdrlen uint16 - Pad_cgo_0 [2]byte + Tstamp Timeval32 + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + _ [2]byte } type Termios struct { - Iflag uint64 - Oflag uint64 - Cflag uint64 - Lflag uint64 - Cc [20]uint8 - Pad_cgo_0 [4]byte - Ispeed uint64 - Ospeed uint64 + Iflag uint64 + Oflag uint64 + Cflag uint64 + Lflag uint64 + Cc [20]uint8 + _ [4]byte + Ispeed uint64 + Ospeed uint64 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x2 + AT_REMOVEDIR = 0x80 + AT_SYMLINK_FOLLOW = 0x40 + AT_SYMLINK_NOFOLLOW = 0x20 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte } 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 e585c89..315a553 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go @@ -108,7 +108,7 @@ type Statfs_t struct { Owner uint32 Type int32 Flags int32 - Pad_cgo_0 [4]byte + _ [4]byte Syncwrites int64 Asyncwrites int64 Fstypename [16]int8 @@ -118,7 +118,7 @@ type Statfs_t struct { Spares1 int16 Mntfromname [80]int8 Spares2 int16 - Pad_cgo_1 [4]byte + _ [4]byte Spare [2]int64 } @@ -143,6 +143,10 @@ type Fsid struct { Val [2]int32 } +const ( + PathMax = 0x400 +) + type RawSockaddrInet4 struct { Len uint8 Family uint8 @@ -215,10 +219,10 @@ type IPv6Mreq struct { type Msghdr struct { Name *byte Namelen uint32 - Pad_cgo_0 [4]byte + _ [4]byte Iov *Iovec Iovlen int32 - Pad_cgo_1 [4]byte + _ [4]byte Control *byte Controllen uint32 Flags int32 @@ -290,14 +294,14 @@ const ( ) type IfMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Pad_cgo_0 [2]byte - Data IfData + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Data IfData } type IfData struct { @@ -307,7 +311,7 @@ type IfData struct { Hdrlen uint8 Recvquota uint8 Xmitquota uint8 - Pad_cgo_0 [2]byte + _ [2]byte Mtu uint64 Metric uint64 Link_state uint64 @@ -329,24 +333,24 @@ type IfData struct { } type IfaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Pad_cgo_0 [2]byte - Metric int32 + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Metric int32 } type IfmaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Pad_cgo_0 [2]byte + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte } type IfAnnounceMsghdr struct { @@ -359,19 +363,19 @@ type IfAnnounceMsghdr struct { } type RtMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - Pad_cgo_0 [2]byte - Flags int32 - Addrs int32 - Pid int32 - Seq int32 - Errno int32 - Use int32 - Inits uint64 - Rmx RtMetrics + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + _ [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint64 + Rmx RtMetrics } type RtMetrics struct { @@ -387,7 +391,7 @@ type RtMetrics struct { Hopcount uint64 Mssopt uint16 Pad uint16 - Pad_cgo_0 [4]byte + _ [4]byte Msl uint64 Iwmaxsegs uint64 Iwcapsegs uint64 @@ -412,9 +416,9 @@ type BpfStat struct { } type BpfProgram struct { - Len uint32 - Pad_cgo_0 [4]byte - Insns *BpfInsn + Len uint32 + _ [4]byte + Insns *BpfInsn } type BpfInsn struct { @@ -425,11 +429,11 @@ type BpfInsn struct { } type BpfHdr struct { - Tstamp Timeval - Caplen uint32 - Datalen uint32 - Hdrlen uint16 - Pad_cgo_0 [6]byte + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + _ [6]byte } type Termios struct { @@ -441,3 +445,42 @@ type Termios struct { Ispeed uint32 Ospeed uint32 } + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = 0xfffafdcd + AT_SYMLINK_NOFOLLOW = 0x1 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Utsname struct { + Sysname [32]byte + Nodename [32]byte + Release [32]byte + Version [32]byte + Machine [32]byte +} 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 8cf3094..878a21a 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go @@ -1,6 +1,7 @@ +// cgo -godefs types_freebsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + // +build 386,freebsd -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs types_freebsd.go package unix @@ -85,7 +86,7 @@ type Stat_t struct { Ctimespec Timespec Size int64 Blocks int64 - Blksize uint32 + Blksize int32 Flags uint32 Gen uint32 Lspare int32 @@ -139,6 +140,10 @@ type Fsid struct { Val [2]int32 } +const ( + PathMax = 0x400 +) + const ( FADV_NORMAL = 0x0 FADV_RANDOM = 0x1 @@ -288,9 +293,9 @@ type FdSet struct { } const ( - sizeofIfMsghdr = 0x64 + sizeofIfMsghdr = 0xa8 SizeofIfMsghdr = 0x60 - sizeofIfData = 0x54 + sizeofIfData = 0x98 SizeofIfData = 0x50 SizeofIfaMsghdr = 0x14 SizeofIfmaMsghdr = 0x10 @@ -322,31 +327,31 @@ type IfMsghdr struct { } type ifData struct { - Type uint8 - Physical uint8 - Addrlen uint8 - Hdrlen uint8 - Link_state uint8 - Vhid uint8 - Baudrate_pf uint8 - Datalen uint8 - Mtu uint32 - Metric uint32 - Baudrate uint32 - Ipackets uint32 - Ierrors uint32 - Opackets uint32 - Oerrors uint32 - Collisions uint32 - Ibytes uint32 - Obytes uint32 - Imcasts uint32 - Omcasts uint32 - Iqdrops uint32 - Noproto uint32 - Hwassist uint64 - Epoch int32 - Lastchange Timeval + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Vhid uint8 + Datalen uint16 + Mtu uint32 + Metric uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Oqdrops uint64 + Noproto uint64 + Hwassist uint64 + X__ifi_epoch [8]byte + X__ifi_lastchange [16]byte } type IfData struct { @@ -500,3 +505,49 @@ type Termios struct { Ispeed uint32 Ospeed uint32 } + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x800 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x200 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLINIGNEOF = 0x2000 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type CapRights struct { + Rights [2]uint64 +} + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} 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 e5feb20..8408af1 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go @@ -1,6 +1,7 @@ +// cgo -godefs types_freebsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + // +build amd64,freebsd -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs types_freebsd.go package unix @@ -85,7 +86,7 @@ type Stat_t struct { Ctimespec Timespec Size int64 Blocks int64 - Blksize uint32 + Blksize int32 Flags uint32 Gen uint32 Lspare int32 @@ -139,6 +140,10 @@ type Fsid struct { Val [2]int32 } +const ( + PathMax = 0x400 +) + const ( FADV_NORMAL = 0x0 FADV_RANDOM = 0x1 @@ -324,31 +329,31 @@ type IfMsghdr struct { } type ifData struct { - Type uint8 - Physical uint8 - Addrlen uint8 - Hdrlen uint8 - Link_state uint8 - Vhid uint8 - Baudrate_pf uint8 - Datalen uint8 - Mtu uint64 - Metric uint64 - Baudrate uint64 - Ipackets uint64 - Ierrors uint64 - Opackets uint64 - Oerrors uint64 - Collisions uint64 - Ibytes uint64 - Obytes uint64 - Imcasts uint64 - Omcasts uint64 - Iqdrops uint64 - Noproto uint64 - Hwassist uint64 - Epoch int64 - Lastchange Timeval + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Vhid uint8 + Datalen uint16 + Mtu uint32 + Metric uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Oqdrops uint64 + Noproto uint64 + Hwassist uint64 + X__ifi_epoch [8]byte + X__ifi_lastchange [16]byte } type IfData struct { @@ -503,3 +508,49 @@ type Termios struct { Ispeed uint32 Ospeed uint32 } + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x800 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x200 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLINIGNEOF = 0x2000 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type CapRights struct { + Rights [2]uint64 +} + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} 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 5472b54..4b2d9a4 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go @@ -1,5 +1,5 @@ -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs -- -fsigned-char types_freebsd.go +// cgo -godefs -- -fsigned-char types_freebsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. // +build arm,freebsd @@ -88,7 +88,7 @@ type Stat_t struct { Ctimespec Timespec Size int64 Blocks int64 - Blksize uint32 + Blksize int32 Flags uint32 Gen uint32 Lspare int32 @@ -142,6 +142,19 @@ type Fsid struct { Val [2]int32 } +const ( + PathMax = 0x400 +) + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + type RawSockaddrInet4 struct { Len uint8 Family uint8 @@ -282,9 +295,9 @@ type FdSet struct { } const ( - sizeofIfMsghdr = 0x70 + sizeofIfMsghdr = 0xa8 SizeofIfMsghdr = 0x70 - sizeofIfData = 0x60 + sizeofIfData = 0x98 SizeofIfData = 0x60 SizeofIfaMsghdr = 0x14 SizeofIfmaMsghdr = 0x10 @@ -316,31 +329,31 @@ type IfMsghdr struct { } type ifData struct { - Type uint8 - Physical uint8 - Addrlen uint8 - Hdrlen uint8 - Link_state uint8 - Vhid uint8 - Baudrate_pf uint8 - Datalen uint8 - Mtu uint32 - Metric uint32 - Baudrate uint32 - Ipackets uint32 - Ierrors uint32 - Opackets uint32 - Oerrors uint32 - Collisions uint32 - Ibytes uint32 - Obytes uint32 - Imcasts uint32 - Omcasts uint32 - Iqdrops uint32 - Noproto uint32 - Hwassist uint64 - Epoch int64 - Lastchange Timeval + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Vhid uint8 + Datalen uint16 + Mtu uint32 + Metric uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Oqdrops uint64 + Noproto uint64 + Hwassist uint64 + X__ifi_epoch [8]byte + X__ifi_lastchange [16]byte } type IfData struct { @@ -495,3 +508,49 @@ type Termios struct { Ispeed uint32 Ospeed uint32 } + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x800 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x200 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLINIGNEOF = 0x2000 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type CapRights struct { + Rights [2]uint64 +} + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} 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 7fc1eb2..f9a9935 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go @@ -52,7 +52,7 @@ type Timex struct { Errcnt int32 Stbcnt int32 Tai int32 - Pad_cgo_0 [44]byte + _ [44]byte } type Time_t int32 @@ -98,7 +98,7 @@ type _Gid_t uint32 type Stat_t struct { Dev uint64 X__pad1 uint16 - Pad_cgo_0 [2]byte + _ [2]byte X__st_ino uint32 Mode uint32 Nlink uint32 @@ -106,7 +106,7 @@ type Stat_t struct { Gid uint32 Rdev uint64 X__pad2 uint16 - Pad_cgo_1 [2]byte + _ [2]byte Size int64 Blksize int32 Blocks int64 @@ -131,13 +131,43 @@ type Statfs_t struct { Spare [4]int32 } +type StatxTimestamp struct { + Sec int64 + Nsec uint32 + X__reserved int32 +} + +type Statx_t struct { + Mask uint32 + Blksize uint32 + Attributes uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Mode uint16 + _ [1]uint16 + Ino uint64 + Size uint64 + Blocks uint64 + Attributes_mask uint64 + Atime StatxTimestamp + Btime StatxTimestamp + Ctime StatxTimestamp + Mtime StatxTimestamp + Rdev_major uint32 + Rdev_minor uint32 + Dev_major uint32 + Dev_minor uint32 + _ [14]uint64 +} + type Dirent struct { - Ino uint64 - Off int64 - Reclen uint16 - Type uint8 - Name [256]int8 - Pad_cgo_0 [1]byte + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + _ [1]byte } type Fsid struct { @@ -224,11 +254,20 @@ type RawSockaddrHCI struct { Channel uint16 } +type RawSockaddrL2 struct { + Family uint16 + Psm uint16 + Bdaddr [6]uint8 + Cid uint16 + Bdaddr_type uint8 + _ [1]byte +} + type RawSockaddrCAN struct { - Family uint16 - Pad_cgo_0 [2]byte - Ifindex int32 - Addr [8]byte + Family uint16 + _ [2]byte + Ifindex int32 + Addr [8]byte } type RawSockaddrALG struct { @@ -285,6 +324,13 @@ type IPv6Mreq struct { Interface uint32 } +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + type Msghdr struct { Name *byte Namelen uint32 @@ -334,7 +380,7 @@ type TCPInfo struct { Probes uint8 Backoff uint8 Options uint8 - Pad_cgo_0 [2]byte + _ [2]byte Rto uint32 Ato uint32 Snd_mss uint32 @@ -369,13 +415,16 @@ const ( SizeofSockaddrLinklayer = 0x14 SizeofSockaddrNetlink = 0xc SizeofSockaddrHCI = 0x6 + SizeofSockaddrL2 = 0xe SizeofSockaddrCAN = 0x10 SizeofSockaddrALG = 0x58 SizeofSockaddrVM = 0x10 SizeofLinger = 0x8 + SizeofIovec = 0x8 SizeofIPMreq = 0x8 SizeofIPMreqn = 0xc SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 SizeofMsghdr = 0x1c SizeofCmsghdr = 0xc SizeofInet4Pktinfo = 0xc @@ -387,97 +436,123 @@ const ( ) const ( - IFA_UNSPEC = 0x0 - IFA_ADDRESS = 0x1 - IFA_LOCAL = 0x2 - IFA_LABEL = 0x3 - IFA_BROADCAST = 0x4 - IFA_ANYCAST = 0x5 - IFA_CACHEINFO = 0x6 - IFA_MULTICAST = 0x7 - IFLA_UNSPEC = 0x0 - IFLA_ADDRESS = 0x1 - IFLA_BROADCAST = 0x2 - IFLA_IFNAME = 0x3 - IFLA_MTU = 0x4 - IFLA_LINK = 0x5 - IFLA_QDISC = 0x6 - IFLA_STATS = 0x7 - IFLA_COST = 0x8 - IFLA_PRIORITY = 0x9 - IFLA_MASTER = 0xa - IFLA_WIRELESS = 0xb - IFLA_PROTINFO = 0xc - IFLA_TXQLEN = 0xd - IFLA_MAP = 0xe - IFLA_WEIGHT = 0xf - IFLA_OPERSTATE = 0x10 - IFLA_LINKMODE = 0x11 - IFLA_LINKINFO = 0x12 - IFLA_NET_NS_PID = 0x13 - IFLA_IFALIAS = 0x14 - IFLA_MAX = 0x2b - RT_SCOPE_UNIVERSE = 0x0 - RT_SCOPE_SITE = 0xc8 - RT_SCOPE_LINK = 0xfd - RT_SCOPE_HOST = 0xfe - RT_SCOPE_NOWHERE = 0xff - RT_TABLE_UNSPEC = 0x0 - RT_TABLE_COMPAT = 0xfc - RT_TABLE_DEFAULT = 0xfd - RT_TABLE_MAIN = 0xfe - RT_TABLE_LOCAL = 0xff - RT_TABLE_MAX = 0xffffffff - RTA_UNSPEC = 0x0 - RTA_DST = 0x1 - RTA_SRC = 0x2 - RTA_IIF = 0x3 - RTA_OIF = 0x4 - RTA_GATEWAY = 0x5 - RTA_PRIORITY = 0x6 - RTA_PREFSRC = 0x7 - RTA_METRICS = 0x8 - RTA_MULTIPATH = 0x9 - RTA_FLOW = 0xb - RTA_CACHEINFO = 0xc - RTA_TABLE = 0xf - RTN_UNSPEC = 0x0 - RTN_UNICAST = 0x1 - RTN_LOCAL = 0x2 - RTN_BROADCAST = 0x3 - RTN_ANYCAST = 0x4 - RTN_MULTICAST = 0x5 - RTN_BLACKHOLE = 0x6 - RTN_UNREACHABLE = 0x7 - RTN_PROHIBIT = 0x8 - RTN_THROW = 0x9 - RTN_NAT = 0xa - RTN_XRESOLVE = 0xb - RTNLGRP_NONE = 0x0 - RTNLGRP_LINK = 0x1 - RTNLGRP_NOTIFY = 0x2 - RTNLGRP_NEIGH = 0x3 - RTNLGRP_TC = 0x4 - RTNLGRP_IPV4_IFADDR = 0x5 - RTNLGRP_IPV4_MROUTE = 0x6 - RTNLGRP_IPV4_ROUTE = 0x7 - RTNLGRP_IPV4_RULE = 0x8 - RTNLGRP_IPV6_IFADDR = 0x9 - RTNLGRP_IPV6_MROUTE = 0xa - RTNLGRP_IPV6_ROUTE = 0xb - RTNLGRP_IPV6_IFINFO = 0xc - RTNLGRP_IPV6_PREFIX = 0x12 - RTNLGRP_IPV6_RULE = 0x13 - RTNLGRP_ND_USEROPT = 0x14 - SizeofNlMsghdr = 0x10 - SizeofNlMsgerr = 0x14 - SizeofRtGenmsg = 0x1 - SizeofNlAttr = 0x4 - SizeofRtAttr = 0x4 - SizeofIfInfomsg = 0x10 - SizeofIfAddrmsg = 0x8 - SizeofRtMsg = 0xc - SizeofRtNexthop = 0x8 + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_MAX = 0x2e + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 ) type NlMsghdr struct { @@ -556,9 +631,9 @@ type SockFilter struct { } type SockFprog struct { - Len uint16 - Pad_cgo_0 [2]byte - Filter *SockFilter + Len uint16 + _ [2]byte + Filter *SockFilter } type InotifyEvent struct { @@ -612,12 +687,12 @@ type Sysinfo_t struct { } type Utsname struct { - Sysname [65]int8 - Nodename [65]int8 - Release [65]int8 - Version [65]int8 - Machine [65]int8 - Domainname [65]int8 + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte } type Ustat_t struct { @@ -634,8 +709,15 @@ type EpollEvent struct { } const ( - AT_FDCWD = -0x64 - AT_REMOVEDIR = 0x200 + AT_EMPTY_PATH = 0x1000 + AT_FDCWD = -0x64 + AT_NO_AUTOMOUNT = 0x800 + AT_REMOVEDIR = 0x200 + + AT_STATX_SYNC_AS_STAT = 0x0 + AT_STATX_FORCE_SYNC = 0x2000 + AT_STATX_DONT_SYNC = 0x4000 + AT_SYMLINK_FOLLOW = 0x400 AT_SYMLINK_NOFOLLOW = 0x100 ) @@ -662,7 +744,7 @@ type Sigset_t struct { const RNDGETENTCNT = 0x80045200 -const _SC_PAGESIZE = 0x1e +const PERF_IOC_FLAG_GROUP = 0x1 type Termios struct { Iflag uint32 @@ -674,3 +756,142 @@ type Termios struct { Ispeed uint32 Ospeed uint32 } + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + _ [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + _ [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + _ [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type CGroupStats struct { + Sleeping uint64 + Running uint64 + Stopped uint64 + Uninterruptible uint64 + Io_wait uint64 +} + +const ( + CGROUPSTATS_CMD_UNSPEC = 0x3 + CGROUPSTATS_CMD_GET = 0x4 + CGROUPSTATS_CMD_NEW = 0x5 + CGROUPSTATS_TYPE_UNSPEC = 0x0 + CGROUPSTATS_TYPE_CGROUP_STATS = 0x1 + CGROUPSTATS_CMD_ATTR_UNSPEC = 0x0 + CGROUPSTATS_CMD_ATTR_FD = 0x1 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) + +type cpuMask uint32 + +const ( + _CPU_SETSIZE = 0x400 + _NCPUBITS = 0x20 +) + +const ( + BDADDR_BREDR = 0x0 + BDADDR_LE_PUBLIC = 0x1 + BDADDR_LE_RANDOM = 0x2 +) 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 60a26ee..4df7088 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go @@ -33,13 +33,13 @@ type Timeval struct { type Timex struct { Modes uint32 - Pad_cgo_0 [4]byte + _ [4]byte Offset int64 Freq int64 Maxerror int64 Esterror int64 Status int32 - Pad_cgo_1 [4]byte + _ [4]byte Constant int64 Precision int64 Tolerance int64 @@ -48,14 +48,14 @@ type Timex struct { Ppsfreq int64 Jitter int64 Shift int32 - Pad_cgo_2 [4]byte + _ [4]byte Stabil int64 Jitcnt int64 Calcnt int64 Errcnt int64 Stbcnt int64 Tai int32 - Pad_cgo_3 [44]byte + _ [44]byte } type Time_t int64 @@ -131,13 +131,43 @@ type Statfs_t struct { Spare [4]int64 } +type StatxTimestamp struct { + Sec int64 + Nsec uint32 + X__reserved int32 +} + +type Statx_t struct { + Mask uint32 + Blksize uint32 + Attributes uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Mode uint16 + _ [1]uint16 + Ino uint64 + Size uint64 + Blocks uint64 + Attributes_mask uint64 + Atime StatxTimestamp + Btime StatxTimestamp + Ctime StatxTimestamp + Mtime StatxTimestamp + Rdev_major uint32 + Rdev_minor uint32 + Dev_major uint32 + Dev_minor uint32 + _ [14]uint64 +} + type Dirent struct { - Ino uint64 - Off int64 - Reclen uint16 - Type uint8 - Name [256]int8 - Pad_cgo_0 [5]byte + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + _ [5]byte } type Fsid struct { @@ -145,13 +175,13 @@ type Fsid struct { } type Flock_t struct { - Type int16 - Whence int16 - Pad_cgo_0 [4]byte - Start int64 - Len int64 - Pid int32 - Pad_cgo_1 [4]byte + Type int16 + Whence int16 + _ [4]byte + Start int64 + Len int64 + Pid int32 + _ [4]byte } type FscryptPolicy struct { @@ -226,11 +256,20 @@ type RawSockaddrHCI struct { Channel uint16 } +type RawSockaddrL2 struct { + Family uint16 + Psm uint16 + Bdaddr [6]uint8 + Cid uint16 + Bdaddr_type uint8 + _ [1]byte +} + type RawSockaddrCAN struct { - Family uint16 - Pad_cgo_0 [2]byte - Ifindex int32 - Addr [8]byte + Family uint16 + _ [2]byte + Ifindex int32 + Addr [8]byte } type RawSockaddrALG struct { @@ -287,16 +326,23 @@ type IPv6Mreq struct { Interface uint32 } +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + type Msghdr struct { Name *byte Namelen uint32 - Pad_cgo_0 [4]byte + _ [4]byte Iov *Iovec Iovlen uint64 Control *byte Controllen uint64 Flags int32 - Pad_cgo_1 [4]byte + _ [4]byte } type Cmsghdr struct { @@ -338,7 +384,7 @@ type TCPInfo struct { Probes uint8 Backoff uint8 Options uint8 - Pad_cgo_0 [2]byte + _ [2]byte Rto uint32 Ato uint32 Snd_mss uint32 @@ -373,13 +419,16 @@ const ( SizeofSockaddrLinklayer = 0x14 SizeofSockaddrNetlink = 0xc SizeofSockaddrHCI = 0x6 + SizeofSockaddrL2 = 0xe SizeofSockaddrCAN = 0x10 SizeofSockaddrALG = 0x58 SizeofSockaddrVM = 0x10 SizeofLinger = 0x8 + SizeofIovec = 0x10 SizeofIPMreq = 0x8 SizeofIPMreqn = 0xc SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 SizeofMsghdr = 0x38 SizeofCmsghdr = 0x10 SizeofInet4Pktinfo = 0xc @@ -391,97 +440,123 @@ const ( ) const ( - IFA_UNSPEC = 0x0 - IFA_ADDRESS = 0x1 - IFA_LOCAL = 0x2 - IFA_LABEL = 0x3 - IFA_BROADCAST = 0x4 - IFA_ANYCAST = 0x5 - IFA_CACHEINFO = 0x6 - IFA_MULTICAST = 0x7 - IFLA_UNSPEC = 0x0 - IFLA_ADDRESS = 0x1 - IFLA_BROADCAST = 0x2 - IFLA_IFNAME = 0x3 - IFLA_MTU = 0x4 - IFLA_LINK = 0x5 - IFLA_QDISC = 0x6 - IFLA_STATS = 0x7 - IFLA_COST = 0x8 - IFLA_PRIORITY = 0x9 - IFLA_MASTER = 0xa - IFLA_WIRELESS = 0xb - IFLA_PROTINFO = 0xc - IFLA_TXQLEN = 0xd - IFLA_MAP = 0xe - IFLA_WEIGHT = 0xf - IFLA_OPERSTATE = 0x10 - IFLA_LINKMODE = 0x11 - IFLA_LINKINFO = 0x12 - IFLA_NET_NS_PID = 0x13 - IFLA_IFALIAS = 0x14 - IFLA_MAX = 0x2b - RT_SCOPE_UNIVERSE = 0x0 - RT_SCOPE_SITE = 0xc8 - RT_SCOPE_LINK = 0xfd - RT_SCOPE_HOST = 0xfe - RT_SCOPE_NOWHERE = 0xff - RT_TABLE_UNSPEC = 0x0 - RT_TABLE_COMPAT = 0xfc - RT_TABLE_DEFAULT = 0xfd - RT_TABLE_MAIN = 0xfe - RT_TABLE_LOCAL = 0xff - RT_TABLE_MAX = 0xffffffff - RTA_UNSPEC = 0x0 - RTA_DST = 0x1 - RTA_SRC = 0x2 - RTA_IIF = 0x3 - RTA_OIF = 0x4 - RTA_GATEWAY = 0x5 - RTA_PRIORITY = 0x6 - RTA_PREFSRC = 0x7 - RTA_METRICS = 0x8 - RTA_MULTIPATH = 0x9 - RTA_FLOW = 0xb - RTA_CACHEINFO = 0xc - RTA_TABLE = 0xf - RTN_UNSPEC = 0x0 - RTN_UNICAST = 0x1 - RTN_LOCAL = 0x2 - RTN_BROADCAST = 0x3 - RTN_ANYCAST = 0x4 - RTN_MULTICAST = 0x5 - RTN_BLACKHOLE = 0x6 - RTN_UNREACHABLE = 0x7 - RTN_PROHIBIT = 0x8 - RTN_THROW = 0x9 - RTN_NAT = 0xa - RTN_XRESOLVE = 0xb - RTNLGRP_NONE = 0x0 - RTNLGRP_LINK = 0x1 - RTNLGRP_NOTIFY = 0x2 - RTNLGRP_NEIGH = 0x3 - RTNLGRP_TC = 0x4 - RTNLGRP_IPV4_IFADDR = 0x5 - RTNLGRP_IPV4_MROUTE = 0x6 - RTNLGRP_IPV4_ROUTE = 0x7 - RTNLGRP_IPV4_RULE = 0x8 - RTNLGRP_IPV6_IFADDR = 0x9 - RTNLGRP_IPV6_MROUTE = 0xa - RTNLGRP_IPV6_ROUTE = 0xb - RTNLGRP_IPV6_IFINFO = 0xc - RTNLGRP_IPV6_PREFIX = 0x12 - RTNLGRP_IPV6_RULE = 0x13 - RTNLGRP_ND_USEROPT = 0x14 - SizeofNlMsghdr = 0x10 - SizeofNlMsgerr = 0x14 - SizeofRtGenmsg = 0x1 - SizeofNlAttr = 0x4 - SizeofRtAttr = 0x4 - SizeofIfInfomsg = 0x10 - SizeofIfAddrmsg = 0x8 - SizeofRtMsg = 0xc - SizeofRtNexthop = 0x8 + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_MAX = 0x2e + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 ) type NlMsghdr struct { @@ -560,9 +635,9 @@ type SockFilter struct { } type SockFprog struct { - Len uint16 - Pad_cgo_0 [6]byte - Filter *SockFilter + Len uint16 + _ [6]byte + Filter *SockFilter } type InotifyEvent struct { @@ -619,30 +694,30 @@ type Sysinfo_t struct { Freeswap uint64 Procs uint16 Pad uint16 - Pad_cgo_0 [4]byte + _ [4]byte Totalhigh uint64 Freehigh uint64 Unit uint32 X_f [0]int8 - Pad_cgo_1 [4]byte + _ [4]byte } type Utsname struct { - Sysname [65]int8 - Nodename [65]int8 - Release [65]int8 - Version [65]int8 - Machine [65]int8 - Domainname [65]int8 + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte } type Ustat_t struct { - Tfree int32 - Pad_cgo_0 [4]byte - Tinode uint64 - Fname [6]int8 - Fpack [6]int8 - Pad_cgo_1 [4]byte + Tfree int32 + _ [4]byte + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + _ [4]byte } type EpollEvent struct { @@ -652,8 +727,15 @@ type EpollEvent struct { } const ( - AT_FDCWD = -0x64 - AT_REMOVEDIR = 0x200 + AT_EMPTY_PATH = 0x1000 + AT_FDCWD = -0x64 + AT_NO_AUTOMOUNT = 0x800 + AT_REMOVEDIR = 0x200 + + AT_STATX_SYNC_AS_STAT = 0x0 + AT_STATX_FORCE_SYNC = 0x2000 + AT_STATX_DONT_SYNC = 0x4000 + AT_SYMLINK_FOLLOW = 0x400 AT_SYMLINK_NOFOLLOW = 0x100 ) @@ -680,7 +762,7 @@ type Sigset_t struct { const RNDGETENTCNT = 0x80045200 -const _SC_PAGESIZE = 0x1e +const PERF_IOC_FLAG_GROUP = 0x1 type Termios struct { Iflag uint32 @@ -692,3 +774,142 @@ type Termios struct { Ispeed uint32 Ospeed uint32 } + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + _ [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + _ [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + _ [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type CGroupStats struct { + Sleeping uint64 + Running uint64 + Stopped uint64 + Uninterruptible uint64 + Io_wait uint64 +} + +const ( + CGROUPSTATS_CMD_UNSPEC = 0x3 + CGROUPSTATS_CMD_GET = 0x4 + CGROUPSTATS_CMD_NEW = 0x5 + CGROUPSTATS_TYPE_UNSPEC = 0x0 + CGROUPSTATS_TYPE_CGROUP_STATS = 0x1 + CGROUPSTATS_CMD_ATTR_UNSPEC = 0x0 + CGROUPSTATS_CMD_ATTR_FD = 0x1 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) + +type cpuMask uint64 + +const ( + _CPU_SETSIZE = 0x400 + _NCPUBITS = 0x40 +) + +const ( + BDADDR_BREDR = 0x0 + BDADDR_LE_PUBLIC = 0x1 + BDADDR_LE_RANDOM = 0x2 +) 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 b994baa..a181469 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go @@ -52,7 +52,7 @@ type Timex struct { Errcnt int32 Stbcnt int32 Tai int32 - Pad_cgo_0 [44]byte + _ [44]byte } type Time_t int32 @@ -98,7 +98,7 @@ type _Gid_t uint32 type Stat_t struct { Dev uint64 X__pad1 uint16 - Pad_cgo_0 [2]byte + _ [2]byte X__st_ino uint32 Mode uint32 Nlink uint32 @@ -106,10 +106,10 @@ type Stat_t struct { Gid uint32 Rdev uint64 X__pad2 uint16 - Pad_cgo_1 [6]byte + _ [6]byte Size int64 Blksize int32 - Pad_cgo_2 [4]byte + _ [4]byte Blocks int64 Atim Timespec Mtim Timespec @@ -118,28 +118,58 @@ type Stat_t struct { } type Statfs_t struct { - Type int32 - Bsize int32 - Blocks uint64 - Bfree uint64 - Bavail uint64 - Files uint64 - Ffree uint64 - Fsid Fsid - Namelen int32 - Frsize int32 - Flags int32 - Spare [4]int32 - Pad_cgo_0 [4]byte + Type int32 + Bsize int32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int32 + Frsize int32 + Flags int32 + Spare [4]int32 + _ [4]byte +} + +type StatxTimestamp struct { + Sec int64 + Nsec uint32 + X__reserved int32 +} + +type Statx_t struct { + Mask uint32 + Blksize uint32 + Attributes uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Mode uint16 + _ [1]uint16 + Ino uint64 + Size uint64 + Blocks uint64 + Attributes_mask uint64 + Atime StatxTimestamp + Btime StatxTimestamp + Ctime StatxTimestamp + Mtime StatxTimestamp + Rdev_major uint32 + Rdev_minor uint32 + Dev_major uint32 + Dev_minor uint32 + _ [14]uint64 } type Dirent struct { - Ino uint64 - Off int64 - Reclen uint16 - Type uint8 - Name [256]uint8 - Pad_cgo_0 [5]byte + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]uint8 + _ [5]byte } type Fsid struct { @@ -147,13 +177,13 @@ type Fsid struct { } type Flock_t struct { - Type int16 - Whence int16 - Pad_cgo_0 [4]byte - Start int64 - Len int64 - Pid int32 - Pad_cgo_1 [4]byte + Type int16 + Whence int16 + _ [4]byte + Start int64 + Len int64 + Pid int32 + _ [4]byte } type FscryptPolicy struct { @@ -228,11 +258,20 @@ type RawSockaddrHCI struct { Channel uint16 } +type RawSockaddrL2 struct { + Family uint16 + Psm uint16 + Bdaddr [6]uint8 + Cid uint16 + Bdaddr_type uint8 + _ [1]byte +} + type RawSockaddrCAN struct { - Family uint16 - Pad_cgo_0 [2]byte - Ifindex int32 - Addr [8]byte + Family uint16 + _ [2]byte + Ifindex int32 + Addr [8]byte } type RawSockaddrALG struct { @@ -289,6 +328,13 @@ type IPv6Mreq struct { Interface uint32 } +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + type Msghdr struct { Name *byte Namelen uint32 @@ -338,7 +384,7 @@ type TCPInfo struct { Probes uint8 Backoff uint8 Options uint8 - Pad_cgo_0 [2]byte + _ [2]byte Rto uint32 Ato uint32 Snd_mss uint32 @@ -373,13 +419,16 @@ const ( SizeofSockaddrLinklayer = 0x14 SizeofSockaddrNetlink = 0xc SizeofSockaddrHCI = 0x6 + SizeofSockaddrL2 = 0xe SizeofSockaddrCAN = 0x10 SizeofSockaddrALG = 0x58 SizeofSockaddrVM = 0x10 SizeofLinger = 0x8 + SizeofIovec = 0x8 SizeofIPMreq = 0x8 SizeofIPMreqn = 0xc SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 SizeofMsghdr = 0x1c SizeofCmsghdr = 0xc SizeofInet4Pktinfo = 0xc @@ -391,97 +440,123 @@ const ( ) const ( - IFA_UNSPEC = 0x0 - IFA_ADDRESS = 0x1 - IFA_LOCAL = 0x2 - IFA_LABEL = 0x3 - IFA_BROADCAST = 0x4 - IFA_ANYCAST = 0x5 - IFA_CACHEINFO = 0x6 - IFA_MULTICAST = 0x7 - IFLA_UNSPEC = 0x0 - IFLA_ADDRESS = 0x1 - IFLA_BROADCAST = 0x2 - IFLA_IFNAME = 0x3 - IFLA_MTU = 0x4 - IFLA_LINK = 0x5 - IFLA_QDISC = 0x6 - IFLA_STATS = 0x7 - IFLA_COST = 0x8 - IFLA_PRIORITY = 0x9 - IFLA_MASTER = 0xa - IFLA_WIRELESS = 0xb - IFLA_PROTINFO = 0xc - IFLA_TXQLEN = 0xd - IFLA_MAP = 0xe - IFLA_WEIGHT = 0xf - IFLA_OPERSTATE = 0x10 - IFLA_LINKMODE = 0x11 - IFLA_LINKINFO = 0x12 - IFLA_NET_NS_PID = 0x13 - IFLA_IFALIAS = 0x14 - IFLA_MAX = 0x2b - RT_SCOPE_UNIVERSE = 0x0 - RT_SCOPE_SITE = 0xc8 - RT_SCOPE_LINK = 0xfd - RT_SCOPE_HOST = 0xfe - RT_SCOPE_NOWHERE = 0xff - RT_TABLE_UNSPEC = 0x0 - RT_TABLE_COMPAT = 0xfc - RT_TABLE_DEFAULT = 0xfd - RT_TABLE_MAIN = 0xfe - RT_TABLE_LOCAL = 0xff - RT_TABLE_MAX = 0xffffffff - RTA_UNSPEC = 0x0 - RTA_DST = 0x1 - RTA_SRC = 0x2 - RTA_IIF = 0x3 - RTA_OIF = 0x4 - RTA_GATEWAY = 0x5 - RTA_PRIORITY = 0x6 - RTA_PREFSRC = 0x7 - RTA_METRICS = 0x8 - RTA_MULTIPATH = 0x9 - RTA_FLOW = 0xb - RTA_CACHEINFO = 0xc - RTA_TABLE = 0xf - RTN_UNSPEC = 0x0 - RTN_UNICAST = 0x1 - RTN_LOCAL = 0x2 - RTN_BROADCAST = 0x3 - RTN_ANYCAST = 0x4 - RTN_MULTICAST = 0x5 - RTN_BLACKHOLE = 0x6 - RTN_UNREACHABLE = 0x7 - RTN_PROHIBIT = 0x8 - RTN_THROW = 0x9 - RTN_NAT = 0xa - RTN_XRESOLVE = 0xb - RTNLGRP_NONE = 0x0 - RTNLGRP_LINK = 0x1 - RTNLGRP_NOTIFY = 0x2 - RTNLGRP_NEIGH = 0x3 - RTNLGRP_TC = 0x4 - RTNLGRP_IPV4_IFADDR = 0x5 - RTNLGRP_IPV4_MROUTE = 0x6 - RTNLGRP_IPV4_ROUTE = 0x7 - RTNLGRP_IPV4_RULE = 0x8 - RTNLGRP_IPV6_IFADDR = 0x9 - RTNLGRP_IPV6_MROUTE = 0xa - RTNLGRP_IPV6_ROUTE = 0xb - RTNLGRP_IPV6_IFINFO = 0xc - RTNLGRP_IPV6_PREFIX = 0x12 - RTNLGRP_IPV6_RULE = 0x13 - RTNLGRP_ND_USEROPT = 0x14 - SizeofNlMsghdr = 0x10 - SizeofNlMsgerr = 0x14 - SizeofRtGenmsg = 0x1 - SizeofNlAttr = 0x4 - SizeofRtAttr = 0x4 - SizeofIfInfomsg = 0x10 - SizeofIfAddrmsg = 0x8 - SizeofRtMsg = 0xc - SizeofRtNexthop = 0x8 + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_MAX = 0x2e + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 ) type NlMsghdr struct { @@ -560,9 +635,9 @@ type SockFilter struct { } type SockFprog struct { - Len uint16 - Pad_cgo_0 [2]byte - Filter *SockFilter + Len uint16 + _ [2]byte + Filter *SockFilter } type InotifyEvent struct { @@ -600,12 +675,12 @@ type Sysinfo_t struct { } type Utsname struct { - Sysname [65]uint8 - Nodename [65]uint8 - Release [65]uint8 - Version [65]uint8 - Machine [65]uint8 - Domainname [65]uint8 + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte } type Ustat_t struct { @@ -623,8 +698,15 @@ type EpollEvent struct { } const ( - AT_FDCWD = -0x64 - AT_REMOVEDIR = 0x200 + AT_EMPTY_PATH = 0x1000 + AT_FDCWD = -0x64 + AT_NO_AUTOMOUNT = 0x800 + AT_REMOVEDIR = 0x200 + + AT_STATX_SYNC_AS_STAT = 0x0 + AT_STATX_FORCE_SYNC = 0x2000 + AT_STATX_DONT_SYNC = 0x4000 + AT_SYMLINK_FOLLOW = 0x400 AT_SYMLINK_NOFOLLOW = 0x100 ) @@ -651,7 +733,7 @@ type Sigset_t struct { const RNDGETENTCNT = 0x80045200 -const _SC_PAGESIZE = 0x1e +const PERF_IOC_FLAG_GROUP = 0x1 type Termios struct { Iflag uint32 @@ -663,3 +745,142 @@ type Termios struct { Ispeed uint32 Ospeed uint32 } + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + _ [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + _ [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]uint8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + _ [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type CGroupStats struct { + Sleeping uint64 + Running uint64 + Stopped uint64 + Uninterruptible uint64 + Io_wait uint64 +} + +const ( + CGROUPSTATS_CMD_UNSPEC = 0x3 + CGROUPSTATS_CMD_GET = 0x4 + CGROUPSTATS_CMD_NEW = 0x5 + CGROUPSTATS_TYPE_UNSPEC = 0x0 + CGROUPSTATS_TYPE_CGROUP_STATS = 0x1 + CGROUPSTATS_CMD_ATTR_UNSPEC = 0x0 + CGROUPSTATS_CMD_ATTR_FD = 0x1 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) + +type cpuMask uint32 + +const ( + _CPU_SETSIZE = 0x400 + _NCPUBITS = 0x20 +) + +const ( + BDADDR_BREDR = 0x0 + BDADDR_LE_PUBLIC = 0x1 + BDADDR_LE_RANDOM = 0x2 +) 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 c19c478..cff50c3 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go @@ -33,13 +33,13 @@ type Timeval struct { type Timex struct { Modes uint32 - Pad_cgo_0 [4]byte + _ [4]byte Offset int64 Freq int64 Maxerror int64 Esterror int64 Status int32 - Pad_cgo_1 [4]byte + _ [4]byte Constant int64 Precision int64 Tolerance int64 @@ -48,14 +48,14 @@ type Timex struct { Ppsfreq int64 Jitter int64 Shift int32 - Pad_cgo_2 [4]byte + _ [4]byte Stabil int64 Jitcnt int64 Calcnt int64 Errcnt int64 Stbcnt int64 Tai int32 - Pad_cgo_3 [44]byte + _ [44]byte } type Time_t int64 @@ -132,13 +132,43 @@ type Statfs_t struct { Spare [4]int64 } +type StatxTimestamp struct { + Sec int64 + Nsec uint32 + X__reserved int32 +} + +type Statx_t struct { + Mask uint32 + Blksize uint32 + Attributes uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Mode uint16 + _ [1]uint16 + Ino uint64 + Size uint64 + Blocks uint64 + Attributes_mask uint64 + Atime StatxTimestamp + Btime StatxTimestamp + Ctime StatxTimestamp + Mtime StatxTimestamp + Rdev_major uint32 + Rdev_minor uint32 + Dev_major uint32 + Dev_minor uint32 + _ [14]uint64 +} + type Dirent struct { - Ino uint64 - Off int64 - Reclen uint16 - Type uint8 - Name [256]int8 - Pad_cgo_0 [5]byte + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + _ [5]byte } type Fsid struct { @@ -146,13 +176,13 @@ type Fsid struct { } type Flock_t struct { - Type int16 - Whence int16 - Pad_cgo_0 [4]byte - Start int64 - Len int64 - Pid int32 - Pad_cgo_1 [4]byte + Type int16 + Whence int16 + _ [4]byte + Start int64 + Len int64 + Pid int32 + _ [4]byte } type FscryptPolicy struct { @@ -227,11 +257,20 @@ type RawSockaddrHCI struct { Channel uint16 } +type RawSockaddrL2 struct { + Family uint16 + Psm uint16 + Bdaddr [6]uint8 + Cid uint16 + Bdaddr_type uint8 + _ [1]byte +} + type RawSockaddrCAN struct { - Family uint16 - Pad_cgo_0 [2]byte - Ifindex int32 - Addr [8]byte + Family uint16 + _ [2]byte + Ifindex int32 + Addr [8]byte } type RawSockaddrALG struct { @@ -288,16 +327,23 @@ type IPv6Mreq struct { Interface uint32 } +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + type Msghdr struct { Name *byte Namelen uint32 - Pad_cgo_0 [4]byte + _ [4]byte Iov *Iovec Iovlen uint64 Control *byte Controllen uint64 Flags int32 - Pad_cgo_1 [4]byte + _ [4]byte } type Cmsghdr struct { @@ -339,7 +385,7 @@ type TCPInfo struct { Probes uint8 Backoff uint8 Options uint8 - Pad_cgo_0 [2]byte + _ [2]byte Rto uint32 Ato uint32 Snd_mss uint32 @@ -374,13 +420,16 @@ const ( SizeofSockaddrLinklayer = 0x14 SizeofSockaddrNetlink = 0xc SizeofSockaddrHCI = 0x6 + SizeofSockaddrL2 = 0xe SizeofSockaddrCAN = 0x10 SizeofSockaddrALG = 0x58 SizeofSockaddrVM = 0x10 SizeofLinger = 0x8 + SizeofIovec = 0x10 SizeofIPMreq = 0x8 SizeofIPMreqn = 0xc SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 SizeofMsghdr = 0x38 SizeofCmsghdr = 0x10 SizeofInet4Pktinfo = 0xc @@ -392,97 +441,123 @@ const ( ) const ( - IFA_UNSPEC = 0x0 - IFA_ADDRESS = 0x1 - IFA_LOCAL = 0x2 - IFA_LABEL = 0x3 - IFA_BROADCAST = 0x4 - IFA_ANYCAST = 0x5 - IFA_CACHEINFO = 0x6 - IFA_MULTICAST = 0x7 - IFLA_UNSPEC = 0x0 - IFLA_ADDRESS = 0x1 - IFLA_BROADCAST = 0x2 - IFLA_IFNAME = 0x3 - IFLA_MTU = 0x4 - IFLA_LINK = 0x5 - IFLA_QDISC = 0x6 - IFLA_STATS = 0x7 - IFLA_COST = 0x8 - IFLA_PRIORITY = 0x9 - IFLA_MASTER = 0xa - IFLA_WIRELESS = 0xb - IFLA_PROTINFO = 0xc - IFLA_TXQLEN = 0xd - IFLA_MAP = 0xe - IFLA_WEIGHT = 0xf - IFLA_OPERSTATE = 0x10 - IFLA_LINKMODE = 0x11 - IFLA_LINKINFO = 0x12 - IFLA_NET_NS_PID = 0x13 - IFLA_IFALIAS = 0x14 - IFLA_MAX = 0x2b - RT_SCOPE_UNIVERSE = 0x0 - RT_SCOPE_SITE = 0xc8 - RT_SCOPE_LINK = 0xfd - RT_SCOPE_HOST = 0xfe - RT_SCOPE_NOWHERE = 0xff - RT_TABLE_UNSPEC = 0x0 - RT_TABLE_COMPAT = 0xfc - RT_TABLE_DEFAULT = 0xfd - RT_TABLE_MAIN = 0xfe - RT_TABLE_LOCAL = 0xff - RT_TABLE_MAX = 0xffffffff - RTA_UNSPEC = 0x0 - RTA_DST = 0x1 - RTA_SRC = 0x2 - RTA_IIF = 0x3 - RTA_OIF = 0x4 - RTA_GATEWAY = 0x5 - RTA_PRIORITY = 0x6 - RTA_PREFSRC = 0x7 - RTA_METRICS = 0x8 - RTA_MULTIPATH = 0x9 - RTA_FLOW = 0xb - RTA_CACHEINFO = 0xc - RTA_TABLE = 0xf - RTN_UNSPEC = 0x0 - RTN_UNICAST = 0x1 - RTN_LOCAL = 0x2 - RTN_BROADCAST = 0x3 - RTN_ANYCAST = 0x4 - RTN_MULTICAST = 0x5 - RTN_BLACKHOLE = 0x6 - RTN_UNREACHABLE = 0x7 - RTN_PROHIBIT = 0x8 - RTN_THROW = 0x9 - RTN_NAT = 0xa - RTN_XRESOLVE = 0xb - RTNLGRP_NONE = 0x0 - RTNLGRP_LINK = 0x1 - RTNLGRP_NOTIFY = 0x2 - RTNLGRP_NEIGH = 0x3 - RTNLGRP_TC = 0x4 - RTNLGRP_IPV4_IFADDR = 0x5 - RTNLGRP_IPV4_MROUTE = 0x6 - RTNLGRP_IPV4_ROUTE = 0x7 - RTNLGRP_IPV4_RULE = 0x8 - RTNLGRP_IPV6_IFADDR = 0x9 - RTNLGRP_IPV6_MROUTE = 0xa - RTNLGRP_IPV6_ROUTE = 0xb - RTNLGRP_IPV6_IFINFO = 0xc - RTNLGRP_IPV6_PREFIX = 0x12 - RTNLGRP_IPV6_RULE = 0x13 - RTNLGRP_ND_USEROPT = 0x14 - SizeofNlMsghdr = 0x10 - SizeofNlMsgerr = 0x14 - SizeofRtGenmsg = 0x1 - SizeofNlAttr = 0x4 - SizeofRtAttr = 0x4 - SizeofIfInfomsg = 0x10 - SizeofIfAddrmsg = 0x8 - SizeofRtMsg = 0xc - SizeofRtNexthop = 0x8 + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_MAX = 0x2e + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 ) type NlMsghdr struct { @@ -561,9 +636,9 @@ type SockFilter struct { } type SockFprog struct { - Len uint16 - Pad_cgo_0 [6]byte - Filter *SockFilter + Len uint16 + _ [6]byte + Filter *SockFilter } type InotifyEvent struct { @@ -597,30 +672,30 @@ type Sysinfo_t struct { Freeswap uint64 Procs uint16 Pad uint16 - Pad_cgo_0 [4]byte + _ [4]byte Totalhigh uint64 Freehigh uint64 Unit uint32 X_f [0]int8 - Pad_cgo_1 [4]byte + _ [4]byte } type Utsname struct { - Sysname [65]int8 - Nodename [65]int8 - Release [65]int8 - Version [65]int8 - Machine [65]int8 - Domainname [65]int8 + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte } type Ustat_t struct { - Tfree int32 - Pad_cgo_0 [4]byte - Tinode uint64 - Fname [6]int8 - Fpack [6]int8 - Pad_cgo_1 [4]byte + Tfree int32 + _ [4]byte + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + _ [4]byte } type EpollEvent struct { @@ -631,8 +706,15 @@ type EpollEvent struct { } const ( - AT_FDCWD = -0x64 - AT_REMOVEDIR = 0x200 + AT_EMPTY_PATH = 0x1000 + AT_FDCWD = -0x64 + AT_NO_AUTOMOUNT = 0x800 + AT_REMOVEDIR = 0x200 + + AT_STATX_SYNC_AS_STAT = 0x0 + AT_STATX_FORCE_SYNC = 0x2000 + AT_STATX_DONT_SYNC = 0x4000 + AT_SYMLINK_FOLLOW = 0x400 AT_SYMLINK_NOFOLLOW = 0x100 ) @@ -659,7 +741,7 @@ type Sigset_t struct { const RNDGETENTCNT = 0x80045200 -const _SC_PAGESIZE = 0x1e +const PERF_IOC_FLAG_GROUP = 0x1 type Termios struct { Iflag uint32 @@ -671,3 +753,142 @@ type Termios struct { Ispeed uint32 Ospeed uint32 } + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + _ [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + _ [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + _ [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type CGroupStats struct { + Sleeping uint64 + Running uint64 + Stopped uint64 + Uninterruptible uint64 + Io_wait uint64 +} + +const ( + CGROUPSTATS_CMD_UNSPEC = 0x3 + CGROUPSTATS_CMD_GET = 0x4 + CGROUPSTATS_CMD_NEW = 0x5 + CGROUPSTATS_TYPE_UNSPEC = 0x0 + CGROUPSTATS_TYPE_CGROUP_STATS = 0x1 + CGROUPSTATS_CMD_ATTR_UNSPEC = 0x0 + CGROUPSTATS_CMD_ATTR_FD = 0x1 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) + +type cpuMask uint64 + +const ( + _CPU_SETSIZE = 0x400 + _NCPUBITS = 0x40 +) + +const ( + BDADDR_BREDR = 0x0 + BDADDR_LE_PUBLIC = 0x1 + BDADDR_LE_RANDOM = 0x2 +) 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 c84e462..87d0a8b 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go @@ -52,7 +52,7 @@ type Timex struct { Errcnt int32 Stbcnt int32 Tai int32 - Pad_cgo_0 [44]byte + _ [44]byte } type Time_t int32 @@ -116,29 +116,59 @@ type Stat_t struct { } type Statfs_t struct { - Type int32 - Bsize int32 - Frsize int32 - Pad_cgo_0 [4]byte - Blocks uint64 - Bfree uint64 - Files uint64 - Ffree uint64 - Bavail uint64 - Fsid Fsid - Namelen int32 - Flags int32 - Spare [5]int32 - Pad_cgo_1 [4]byte + Type int32 + Bsize int32 + Frsize int32 + _ [4]byte + Blocks uint64 + Bfree uint64 + Files uint64 + Ffree uint64 + Bavail uint64 + Fsid Fsid + Namelen int32 + Flags int32 + Spare [5]int32 + _ [4]byte +} + +type StatxTimestamp struct { + Sec int64 + Nsec uint32 + X__reserved int32 +} + +type Statx_t struct { + Mask uint32 + Blksize uint32 + Attributes uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Mode uint16 + _ [1]uint16 + Ino uint64 + Size uint64 + Blocks uint64 + Attributes_mask uint64 + Atime StatxTimestamp + Btime StatxTimestamp + Ctime StatxTimestamp + Mtime StatxTimestamp + Rdev_major uint32 + Rdev_minor uint32 + Dev_major uint32 + Dev_minor uint32 + _ [14]uint64 } type Dirent struct { - Ino uint64 - Off int64 - Reclen uint16 - Type uint8 - Name [256]int8 - Pad_cgo_0 [5]byte + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + _ [5]byte } type Fsid struct { @@ -146,13 +176,13 @@ type Fsid struct { } type Flock_t struct { - Type int16 - Whence int16 - Pad_cgo_0 [4]byte - Start int64 - Len int64 - Pid int32 - Pad_cgo_1 [4]byte + Type int16 + Whence int16 + _ [4]byte + Start int64 + Len int64 + Pid int32 + _ [4]byte } type FscryptPolicy struct { @@ -227,11 +257,20 @@ type RawSockaddrHCI struct { Channel uint16 } +type RawSockaddrL2 struct { + Family uint16 + Psm uint16 + Bdaddr [6]uint8 + Cid uint16 + Bdaddr_type uint8 + _ [1]byte +} + type RawSockaddrCAN struct { - Family uint16 - Pad_cgo_0 [2]byte - Ifindex int32 - Addr [8]byte + Family uint16 + _ [2]byte + Ifindex int32 + Addr [8]byte } type RawSockaddrALG struct { @@ -288,6 +327,13 @@ type IPv6Mreq struct { Interface uint32 } +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + type Msghdr struct { Name *byte Namelen uint32 @@ -337,7 +383,7 @@ type TCPInfo struct { Probes uint8 Backoff uint8 Options uint8 - Pad_cgo_0 [2]byte + _ [2]byte Rto uint32 Ato uint32 Snd_mss uint32 @@ -372,13 +418,16 @@ const ( SizeofSockaddrLinklayer = 0x14 SizeofSockaddrNetlink = 0xc SizeofSockaddrHCI = 0x6 + SizeofSockaddrL2 = 0xe SizeofSockaddrCAN = 0x10 SizeofSockaddrALG = 0x58 SizeofSockaddrVM = 0x10 SizeofLinger = 0x8 + SizeofIovec = 0x8 SizeofIPMreq = 0x8 SizeofIPMreqn = 0xc SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 SizeofMsghdr = 0x1c SizeofCmsghdr = 0xc SizeofInet4Pktinfo = 0xc @@ -390,97 +439,123 @@ const ( ) const ( - IFA_UNSPEC = 0x0 - IFA_ADDRESS = 0x1 - IFA_LOCAL = 0x2 - IFA_LABEL = 0x3 - IFA_BROADCAST = 0x4 - IFA_ANYCAST = 0x5 - IFA_CACHEINFO = 0x6 - IFA_MULTICAST = 0x7 - IFLA_UNSPEC = 0x0 - IFLA_ADDRESS = 0x1 - IFLA_BROADCAST = 0x2 - IFLA_IFNAME = 0x3 - IFLA_MTU = 0x4 - IFLA_LINK = 0x5 - IFLA_QDISC = 0x6 - IFLA_STATS = 0x7 - IFLA_COST = 0x8 - IFLA_PRIORITY = 0x9 - IFLA_MASTER = 0xa - IFLA_WIRELESS = 0xb - IFLA_PROTINFO = 0xc - IFLA_TXQLEN = 0xd - IFLA_MAP = 0xe - IFLA_WEIGHT = 0xf - IFLA_OPERSTATE = 0x10 - IFLA_LINKMODE = 0x11 - IFLA_LINKINFO = 0x12 - IFLA_NET_NS_PID = 0x13 - IFLA_IFALIAS = 0x14 - IFLA_MAX = 0x2b - RT_SCOPE_UNIVERSE = 0x0 - RT_SCOPE_SITE = 0xc8 - RT_SCOPE_LINK = 0xfd - RT_SCOPE_HOST = 0xfe - RT_SCOPE_NOWHERE = 0xff - RT_TABLE_UNSPEC = 0x0 - RT_TABLE_COMPAT = 0xfc - RT_TABLE_DEFAULT = 0xfd - RT_TABLE_MAIN = 0xfe - RT_TABLE_LOCAL = 0xff - RT_TABLE_MAX = 0xffffffff - RTA_UNSPEC = 0x0 - RTA_DST = 0x1 - RTA_SRC = 0x2 - RTA_IIF = 0x3 - RTA_OIF = 0x4 - RTA_GATEWAY = 0x5 - RTA_PRIORITY = 0x6 - RTA_PREFSRC = 0x7 - RTA_METRICS = 0x8 - RTA_MULTIPATH = 0x9 - RTA_FLOW = 0xb - RTA_CACHEINFO = 0xc - RTA_TABLE = 0xf - RTN_UNSPEC = 0x0 - RTN_UNICAST = 0x1 - RTN_LOCAL = 0x2 - RTN_BROADCAST = 0x3 - RTN_ANYCAST = 0x4 - RTN_MULTICAST = 0x5 - RTN_BLACKHOLE = 0x6 - RTN_UNREACHABLE = 0x7 - RTN_PROHIBIT = 0x8 - RTN_THROW = 0x9 - RTN_NAT = 0xa - RTN_XRESOLVE = 0xb - RTNLGRP_NONE = 0x0 - RTNLGRP_LINK = 0x1 - RTNLGRP_NOTIFY = 0x2 - RTNLGRP_NEIGH = 0x3 - RTNLGRP_TC = 0x4 - RTNLGRP_IPV4_IFADDR = 0x5 - RTNLGRP_IPV4_MROUTE = 0x6 - RTNLGRP_IPV4_ROUTE = 0x7 - RTNLGRP_IPV4_RULE = 0x8 - RTNLGRP_IPV6_IFADDR = 0x9 - RTNLGRP_IPV6_MROUTE = 0xa - RTNLGRP_IPV6_ROUTE = 0xb - RTNLGRP_IPV6_IFINFO = 0xc - RTNLGRP_IPV6_PREFIX = 0x12 - RTNLGRP_IPV6_RULE = 0x13 - RTNLGRP_ND_USEROPT = 0x14 - SizeofNlMsghdr = 0x10 - SizeofNlMsgerr = 0x14 - SizeofRtGenmsg = 0x1 - SizeofNlAttr = 0x4 - SizeofRtAttr = 0x4 - SizeofIfInfomsg = 0x10 - SizeofIfAddrmsg = 0x8 - SizeofRtMsg = 0xc - SizeofRtNexthop = 0x8 + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_MAX = 0x2e + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 ) type NlMsghdr struct { @@ -559,9 +634,9 @@ type SockFilter struct { } type SockFprog struct { - Len uint16 - Pad_cgo_0 [2]byte - Filter *SockFilter + Len uint16 + _ [2]byte + Filter *SockFilter } type InotifyEvent struct { @@ -605,12 +680,12 @@ type Sysinfo_t struct { } type Utsname struct { - Sysname [65]int8 - Nodename [65]int8 - Release [65]int8 - Version [65]int8 - Machine [65]int8 - Domainname [65]int8 + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte } type Ustat_t struct { @@ -628,8 +703,15 @@ type EpollEvent struct { } const ( - AT_FDCWD = -0x64 - AT_REMOVEDIR = 0x200 + AT_EMPTY_PATH = 0x1000 + AT_FDCWD = -0x64 + AT_NO_AUTOMOUNT = 0x800 + AT_REMOVEDIR = 0x200 + + AT_STATX_SYNC_AS_STAT = 0x0 + AT_STATX_FORCE_SYNC = 0x2000 + AT_STATX_DONT_SYNC = 0x4000 + AT_SYMLINK_FOLLOW = 0x400 AT_SYMLINK_NOFOLLOW = 0x100 ) @@ -656,7 +738,7 @@ type Sigset_t struct { const RNDGETENTCNT = 0x40045200 -const _SC_PAGESIZE = 0x1e +const PERF_IOC_FLAG_GROUP = 0x1 type Termios struct { Iflag uint32 @@ -668,3 +750,142 @@ type Termios struct { Ispeed uint32 Ospeed uint32 } + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + _ [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + _ [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + _ [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type CGroupStats struct { + Sleeping uint64 + Running uint64 + Stopped uint64 + Uninterruptible uint64 + Io_wait uint64 +} + +const ( + CGROUPSTATS_CMD_UNSPEC = 0x3 + CGROUPSTATS_CMD_GET = 0x4 + CGROUPSTATS_CMD_NEW = 0x5 + CGROUPSTATS_TYPE_UNSPEC = 0x0 + CGROUPSTATS_TYPE_CGROUP_STATS = 0x1 + CGROUPSTATS_CMD_ATTR_UNSPEC = 0x0 + CGROUPSTATS_CMD_ATTR_FD = 0x1 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) + +type cpuMask uint32 + +const ( + _CPU_SETSIZE = 0x400 + _NCPUBITS = 0x20 +) + +const ( + BDADDR_BREDR = 0x0 + BDADDR_LE_PUBLIC = 0x1 + BDADDR_LE_RANDOM = 0x2 +) 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 0c75cb9..cf4e2bd 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go @@ -33,13 +33,13 @@ type Timeval struct { type Timex struct { Modes uint32 - Pad_cgo_0 [4]byte + _ [4]byte Offset int64 Freq int64 Maxerror int64 Esterror int64 Status int32 - Pad_cgo_1 [4]byte + _ [4]byte Constant int64 Precision int64 Tolerance int64 @@ -48,14 +48,14 @@ type Timex struct { Ppsfreq int64 Jitter int64 Shift int32 - Pad_cgo_2 [4]byte + _ [4]byte Stabil int64 Jitcnt int64 Calcnt int64 Errcnt int64 Stbcnt int64 Tai int32 - Pad_cgo_3 [44]byte + _ [44]byte } type Time_t int64 @@ -132,13 +132,43 @@ type Statfs_t struct { Spare [5]int64 } +type StatxTimestamp struct { + Sec int64 + Nsec uint32 + X__reserved int32 +} + +type Statx_t struct { + Mask uint32 + Blksize uint32 + Attributes uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Mode uint16 + _ [1]uint16 + Ino uint64 + Size uint64 + Blocks uint64 + Attributes_mask uint64 + Atime StatxTimestamp + Btime StatxTimestamp + Ctime StatxTimestamp + Mtime StatxTimestamp + Rdev_major uint32 + Rdev_minor uint32 + Dev_major uint32 + Dev_minor uint32 + _ [14]uint64 +} + type Dirent struct { - Ino uint64 - Off int64 - Reclen uint16 - Type uint8 - Name [256]int8 - Pad_cgo_0 [5]byte + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + _ [5]byte } type Fsid struct { @@ -146,13 +176,13 @@ type Fsid struct { } type Flock_t struct { - Type int16 - Whence int16 - Pad_cgo_0 [4]byte - Start int64 - Len int64 - Pid int32 - Pad_cgo_1 [4]byte + Type int16 + Whence int16 + _ [4]byte + Start int64 + Len int64 + Pid int32 + _ [4]byte } type FscryptPolicy struct { @@ -227,11 +257,20 @@ type RawSockaddrHCI struct { Channel uint16 } +type RawSockaddrL2 struct { + Family uint16 + Psm uint16 + Bdaddr [6]uint8 + Cid uint16 + Bdaddr_type uint8 + _ [1]byte +} + type RawSockaddrCAN struct { - Family uint16 - Pad_cgo_0 [2]byte - Ifindex int32 - Addr [8]byte + Family uint16 + _ [2]byte + Ifindex int32 + Addr [8]byte } type RawSockaddrALG struct { @@ -288,16 +327,23 @@ type IPv6Mreq struct { Interface uint32 } +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + type Msghdr struct { Name *byte Namelen uint32 - Pad_cgo_0 [4]byte + _ [4]byte Iov *Iovec Iovlen uint64 Control *byte Controllen uint64 Flags int32 - Pad_cgo_1 [4]byte + _ [4]byte } type Cmsghdr struct { @@ -339,7 +385,7 @@ type TCPInfo struct { Probes uint8 Backoff uint8 Options uint8 - Pad_cgo_0 [2]byte + _ [2]byte Rto uint32 Ato uint32 Snd_mss uint32 @@ -374,13 +420,16 @@ const ( SizeofSockaddrLinklayer = 0x14 SizeofSockaddrNetlink = 0xc SizeofSockaddrHCI = 0x6 + SizeofSockaddrL2 = 0xe SizeofSockaddrCAN = 0x10 SizeofSockaddrALG = 0x58 SizeofSockaddrVM = 0x10 SizeofLinger = 0x8 + SizeofIovec = 0x10 SizeofIPMreq = 0x8 SizeofIPMreqn = 0xc SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 SizeofMsghdr = 0x38 SizeofCmsghdr = 0x10 SizeofInet4Pktinfo = 0xc @@ -392,97 +441,123 @@ const ( ) const ( - IFA_UNSPEC = 0x0 - IFA_ADDRESS = 0x1 - IFA_LOCAL = 0x2 - IFA_LABEL = 0x3 - IFA_BROADCAST = 0x4 - IFA_ANYCAST = 0x5 - IFA_CACHEINFO = 0x6 - IFA_MULTICAST = 0x7 - IFLA_UNSPEC = 0x0 - IFLA_ADDRESS = 0x1 - IFLA_BROADCAST = 0x2 - IFLA_IFNAME = 0x3 - IFLA_MTU = 0x4 - IFLA_LINK = 0x5 - IFLA_QDISC = 0x6 - IFLA_STATS = 0x7 - IFLA_COST = 0x8 - IFLA_PRIORITY = 0x9 - IFLA_MASTER = 0xa - IFLA_WIRELESS = 0xb - IFLA_PROTINFO = 0xc - IFLA_TXQLEN = 0xd - IFLA_MAP = 0xe - IFLA_WEIGHT = 0xf - IFLA_OPERSTATE = 0x10 - IFLA_LINKMODE = 0x11 - IFLA_LINKINFO = 0x12 - IFLA_NET_NS_PID = 0x13 - IFLA_IFALIAS = 0x14 - IFLA_MAX = 0x2b - RT_SCOPE_UNIVERSE = 0x0 - RT_SCOPE_SITE = 0xc8 - RT_SCOPE_LINK = 0xfd - RT_SCOPE_HOST = 0xfe - RT_SCOPE_NOWHERE = 0xff - RT_TABLE_UNSPEC = 0x0 - RT_TABLE_COMPAT = 0xfc - RT_TABLE_DEFAULT = 0xfd - RT_TABLE_MAIN = 0xfe - RT_TABLE_LOCAL = 0xff - RT_TABLE_MAX = 0xffffffff - RTA_UNSPEC = 0x0 - RTA_DST = 0x1 - RTA_SRC = 0x2 - RTA_IIF = 0x3 - RTA_OIF = 0x4 - RTA_GATEWAY = 0x5 - RTA_PRIORITY = 0x6 - RTA_PREFSRC = 0x7 - RTA_METRICS = 0x8 - RTA_MULTIPATH = 0x9 - RTA_FLOW = 0xb - RTA_CACHEINFO = 0xc - RTA_TABLE = 0xf - RTN_UNSPEC = 0x0 - RTN_UNICAST = 0x1 - RTN_LOCAL = 0x2 - RTN_BROADCAST = 0x3 - RTN_ANYCAST = 0x4 - RTN_MULTICAST = 0x5 - RTN_BLACKHOLE = 0x6 - RTN_UNREACHABLE = 0x7 - RTN_PROHIBIT = 0x8 - RTN_THROW = 0x9 - RTN_NAT = 0xa - RTN_XRESOLVE = 0xb - RTNLGRP_NONE = 0x0 - RTNLGRP_LINK = 0x1 - RTNLGRP_NOTIFY = 0x2 - RTNLGRP_NEIGH = 0x3 - RTNLGRP_TC = 0x4 - RTNLGRP_IPV4_IFADDR = 0x5 - RTNLGRP_IPV4_MROUTE = 0x6 - RTNLGRP_IPV4_ROUTE = 0x7 - RTNLGRP_IPV4_RULE = 0x8 - RTNLGRP_IPV6_IFADDR = 0x9 - RTNLGRP_IPV6_MROUTE = 0xa - RTNLGRP_IPV6_ROUTE = 0xb - RTNLGRP_IPV6_IFINFO = 0xc - RTNLGRP_IPV6_PREFIX = 0x12 - RTNLGRP_IPV6_RULE = 0x13 - RTNLGRP_ND_USEROPT = 0x14 - SizeofNlMsghdr = 0x10 - SizeofNlMsgerr = 0x14 - SizeofRtGenmsg = 0x1 - SizeofNlAttr = 0x4 - SizeofRtAttr = 0x4 - SizeofIfInfomsg = 0x10 - SizeofIfAddrmsg = 0x8 - SizeofRtMsg = 0xc - SizeofRtNexthop = 0x8 + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_MAX = 0x2e + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 ) type NlMsghdr struct { @@ -561,9 +636,9 @@ type SockFilter struct { } type SockFprog struct { - Len uint16 - Pad_cgo_0 [6]byte - Filter *SockFilter + Len uint16 + _ [6]byte + Filter *SockFilter } type InotifyEvent struct { @@ -600,30 +675,30 @@ type Sysinfo_t struct { Freeswap uint64 Procs uint16 Pad uint16 - Pad_cgo_0 [4]byte + _ [4]byte Totalhigh uint64 Freehigh uint64 Unit uint32 X_f [0]int8 - Pad_cgo_1 [4]byte + _ [4]byte } type Utsname struct { - Sysname [65]int8 - Nodename [65]int8 - Release [65]int8 - Version [65]int8 - Machine [65]int8 - Domainname [65]int8 + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte } type Ustat_t struct { - Tfree int32 - Pad_cgo_0 [4]byte - Tinode uint64 - Fname [6]int8 - Fpack [6]int8 - Pad_cgo_1 [4]byte + Tfree int32 + _ [4]byte + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + _ [4]byte } type EpollEvent struct { @@ -633,8 +708,15 @@ type EpollEvent struct { } const ( - AT_FDCWD = -0x64 - AT_REMOVEDIR = 0x200 + AT_EMPTY_PATH = 0x1000 + AT_FDCWD = -0x64 + AT_NO_AUTOMOUNT = 0x800 + AT_REMOVEDIR = 0x200 + + AT_STATX_SYNC_AS_STAT = 0x0 + AT_STATX_FORCE_SYNC = 0x2000 + AT_STATX_DONT_SYNC = 0x4000 + AT_SYMLINK_FOLLOW = 0x400 AT_SYMLINK_NOFOLLOW = 0x100 ) @@ -661,7 +743,7 @@ type Sigset_t struct { const RNDGETENTCNT = 0x40045200 -const _SC_PAGESIZE = 0x1e +const PERF_IOC_FLAG_GROUP = 0x1 type Termios struct { Iflag uint32 @@ -673,3 +755,142 @@ type Termios struct { Ispeed uint32 Ospeed uint32 } + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + _ [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + _ [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + _ [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type CGroupStats struct { + Sleeping uint64 + Running uint64 + Stopped uint64 + Uninterruptible uint64 + Io_wait uint64 +} + +const ( + CGROUPSTATS_CMD_UNSPEC = 0x3 + CGROUPSTATS_CMD_GET = 0x4 + CGROUPSTATS_CMD_NEW = 0x5 + CGROUPSTATS_TYPE_UNSPEC = 0x0 + CGROUPSTATS_TYPE_CGROUP_STATS = 0x1 + CGROUPSTATS_CMD_ATTR_UNSPEC = 0x0 + CGROUPSTATS_CMD_ATTR_FD = 0x1 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) + +type cpuMask uint64 + +const ( + _CPU_SETSIZE = 0x400 + _NCPUBITS = 0x40 +) + +const ( + BDADDR_BREDR = 0x0 + BDADDR_LE_PUBLIC = 0x1 + BDADDR_LE_RANDOM = 0x2 +) 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 c75f75a..b8da482 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go @@ -33,13 +33,13 @@ type Timeval struct { type Timex struct { Modes uint32 - Pad_cgo_0 [4]byte + _ [4]byte Offset int64 Freq int64 Maxerror int64 Esterror int64 Status int32 - Pad_cgo_1 [4]byte + _ [4]byte Constant int64 Precision int64 Tolerance int64 @@ -48,14 +48,14 @@ type Timex struct { Ppsfreq int64 Jitter int64 Shift int32 - Pad_cgo_2 [4]byte + _ [4]byte Stabil int64 Jitcnt int64 Calcnt int64 Errcnt int64 Stbcnt int64 Tai int32 - Pad_cgo_3 [44]byte + _ [44]byte } type Time_t int64 @@ -132,13 +132,43 @@ type Statfs_t struct { Spare [5]int64 } +type StatxTimestamp struct { + Sec int64 + Nsec uint32 + X__reserved int32 +} + +type Statx_t struct { + Mask uint32 + Blksize uint32 + Attributes uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Mode uint16 + _ [1]uint16 + Ino uint64 + Size uint64 + Blocks uint64 + Attributes_mask uint64 + Atime StatxTimestamp + Btime StatxTimestamp + Ctime StatxTimestamp + Mtime StatxTimestamp + Rdev_major uint32 + Rdev_minor uint32 + Dev_major uint32 + Dev_minor uint32 + _ [14]uint64 +} + type Dirent struct { - Ino uint64 - Off int64 - Reclen uint16 - Type uint8 - Name [256]int8 - Pad_cgo_0 [5]byte + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + _ [5]byte } type Fsid struct { @@ -146,13 +176,13 @@ type Fsid struct { } type Flock_t struct { - Type int16 - Whence int16 - Pad_cgo_0 [4]byte - Start int64 - Len int64 - Pid int32 - Pad_cgo_1 [4]byte + Type int16 + Whence int16 + _ [4]byte + Start int64 + Len int64 + Pid int32 + _ [4]byte } type FscryptPolicy struct { @@ -227,11 +257,20 @@ type RawSockaddrHCI struct { Channel uint16 } +type RawSockaddrL2 struct { + Family uint16 + Psm uint16 + Bdaddr [6]uint8 + Cid uint16 + Bdaddr_type uint8 + _ [1]byte +} + type RawSockaddrCAN struct { - Family uint16 - Pad_cgo_0 [2]byte - Ifindex int32 - Addr [8]byte + Family uint16 + _ [2]byte + Ifindex int32 + Addr [8]byte } type RawSockaddrALG struct { @@ -288,16 +327,23 @@ type IPv6Mreq struct { Interface uint32 } +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + type Msghdr struct { Name *byte Namelen uint32 - Pad_cgo_0 [4]byte + _ [4]byte Iov *Iovec Iovlen uint64 Control *byte Controllen uint64 Flags int32 - Pad_cgo_1 [4]byte + _ [4]byte } type Cmsghdr struct { @@ -339,7 +385,7 @@ type TCPInfo struct { Probes uint8 Backoff uint8 Options uint8 - Pad_cgo_0 [2]byte + _ [2]byte Rto uint32 Ato uint32 Snd_mss uint32 @@ -374,13 +420,16 @@ const ( SizeofSockaddrLinklayer = 0x14 SizeofSockaddrNetlink = 0xc SizeofSockaddrHCI = 0x6 + SizeofSockaddrL2 = 0xe SizeofSockaddrCAN = 0x10 SizeofSockaddrALG = 0x58 SizeofSockaddrVM = 0x10 SizeofLinger = 0x8 + SizeofIovec = 0x10 SizeofIPMreq = 0x8 SizeofIPMreqn = 0xc SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 SizeofMsghdr = 0x38 SizeofCmsghdr = 0x10 SizeofInet4Pktinfo = 0xc @@ -392,97 +441,123 @@ const ( ) const ( - IFA_UNSPEC = 0x0 - IFA_ADDRESS = 0x1 - IFA_LOCAL = 0x2 - IFA_LABEL = 0x3 - IFA_BROADCAST = 0x4 - IFA_ANYCAST = 0x5 - IFA_CACHEINFO = 0x6 - IFA_MULTICAST = 0x7 - IFLA_UNSPEC = 0x0 - IFLA_ADDRESS = 0x1 - IFLA_BROADCAST = 0x2 - IFLA_IFNAME = 0x3 - IFLA_MTU = 0x4 - IFLA_LINK = 0x5 - IFLA_QDISC = 0x6 - IFLA_STATS = 0x7 - IFLA_COST = 0x8 - IFLA_PRIORITY = 0x9 - IFLA_MASTER = 0xa - IFLA_WIRELESS = 0xb - IFLA_PROTINFO = 0xc - IFLA_TXQLEN = 0xd - IFLA_MAP = 0xe - IFLA_WEIGHT = 0xf - IFLA_OPERSTATE = 0x10 - IFLA_LINKMODE = 0x11 - IFLA_LINKINFO = 0x12 - IFLA_NET_NS_PID = 0x13 - IFLA_IFALIAS = 0x14 - IFLA_MAX = 0x2b - RT_SCOPE_UNIVERSE = 0x0 - RT_SCOPE_SITE = 0xc8 - RT_SCOPE_LINK = 0xfd - RT_SCOPE_HOST = 0xfe - RT_SCOPE_NOWHERE = 0xff - RT_TABLE_UNSPEC = 0x0 - RT_TABLE_COMPAT = 0xfc - RT_TABLE_DEFAULT = 0xfd - RT_TABLE_MAIN = 0xfe - RT_TABLE_LOCAL = 0xff - RT_TABLE_MAX = 0xffffffff - RTA_UNSPEC = 0x0 - RTA_DST = 0x1 - RTA_SRC = 0x2 - RTA_IIF = 0x3 - RTA_OIF = 0x4 - RTA_GATEWAY = 0x5 - RTA_PRIORITY = 0x6 - RTA_PREFSRC = 0x7 - RTA_METRICS = 0x8 - RTA_MULTIPATH = 0x9 - RTA_FLOW = 0xb - RTA_CACHEINFO = 0xc - RTA_TABLE = 0xf - RTN_UNSPEC = 0x0 - RTN_UNICAST = 0x1 - RTN_LOCAL = 0x2 - RTN_BROADCAST = 0x3 - RTN_ANYCAST = 0x4 - RTN_MULTICAST = 0x5 - RTN_BLACKHOLE = 0x6 - RTN_UNREACHABLE = 0x7 - RTN_PROHIBIT = 0x8 - RTN_THROW = 0x9 - RTN_NAT = 0xa - RTN_XRESOLVE = 0xb - RTNLGRP_NONE = 0x0 - RTNLGRP_LINK = 0x1 - RTNLGRP_NOTIFY = 0x2 - RTNLGRP_NEIGH = 0x3 - RTNLGRP_TC = 0x4 - RTNLGRP_IPV4_IFADDR = 0x5 - RTNLGRP_IPV4_MROUTE = 0x6 - RTNLGRP_IPV4_ROUTE = 0x7 - RTNLGRP_IPV4_RULE = 0x8 - RTNLGRP_IPV6_IFADDR = 0x9 - RTNLGRP_IPV6_MROUTE = 0xa - RTNLGRP_IPV6_ROUTE = 0xb - RTNLGRP_IPV6_IFINFO = 0xc - RTNLGRP_IPV6_PREFIX = 0x12 - RTNLGRP_IPV6_RULE = 0x13 - RTNLGRP_ND_USEROPT = 0x14 - SizeofNlMsghdr = 0x10 - SizeofNlMsgerr = 0x14 - SizeofRtGenmsg = 0x1 - SizeofNlAttr = 0x4 - SizeofRtAttr = 0x4 - SizeofIfInfomsg = 0x10 - SizeofIfAddrmsg = 0x8 - SizeofRtMsg = 0xc - SizeofRtNexthop = 0x8 + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_MAX = 0x2e + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 ) type NlMsghdr struct { @@ -561,9 +636,9 @@ type SockFilter struct { } type SockFprog struct { - Len uint16 - Pad_cgo_0 [6]byte - Filter *SockFilter + Len uint16 + _ [6]byte + Filter *SockFilter } type InotifyEvent struct { @@ -600,30 +675,30 @@ type Sysinfo_t struct { Freeswap uint64 Procs uint16 Pad uint16 - Pad_cgo_0 [4]byte + _ [4]byte Totalhigh uint64 Freehigh uint64 Unit uint32 X_f [0]int8 - Pad_cgo_1 [4]byte + _ [4]byte } type Utsname struct { - Sysname [65]int8 - Nodename [65]int8 - Release [65]int8 - Version [65]int8 - Machine [65]int8 - Domainname [65]int8 + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte } type Ustat_t struct { - Tfree int32 - Pad_cgo_0 [4]byte - Tinode uint64 - Fname [6]int8 - Fpack [6]int8 - Pad_cgo_1 [4]byte + Tfree int32 + _ [4]byte + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + _ [4]byte } type EpollEvent struct { @@ -633,8 +708,15 @@ type EpollEvent struct { } const ( - AT_FDCWD = -0x64 - AT_REMOVEDIR = 0x200 + AT_EMPTY_PATH = 0x1000 + AT_FDCWD = -0x64 + AT_NO_AUTOMOUNT = 0x800 + AT_REMOVEDIR = 0x200 + + AT_STATX_SYNC_AS_STAT = 0x0 + AT_STATX_FORCE_SYNC = 0x2000 + AT_STATX_DONT_SYNC = 0x4000 + AT_SYMLINK_FOLLOW = 0x400 AT_SYMLINK_NOFOLLOW = 0x100 ) @@ -661,7 +743,7 @@ type Sigset_t struct { const RNDGETENTCNT = 0x40045200 -const _SC_PAGESIZE = 0x1e +const PERF_IOC_FLAG_GROUP = 0x1 type Termios struct { Iflag uint32 @@ -673,3 +755,142 @@ type Termios struct { Ispeed uint32 Ospeed uint32 } + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + _ [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + _ [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + _ [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type CGroupStats struct { + Sleeping uint64 + Running uint64 + Stopped uint64 + Uninterruptible uint64 + Io_wait uint64 +} + +const ( + CGROUPSTATS_CMD_UNSPEC = 0x3 + CGROUPSTATS_CMD_GET = 0x4 + CGROUPSTATS_CMD_NEW = 0x5 + CGROUPSTATS_TYPE_UNSPEC = 0x0 + CGROUPSTATS_TYPE_CGROUP_STATS = 0x1 + CGROUPSTATS_CMD_ATTR_UNSPEC = 0x0 + CGROUPSTATS_CMD_ATTR_FD = 0x1 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) + +type cpuMask uint64 + +const ( + _CPU_SETSIZE = 0x400 + _NCPUBITS = 0x40 +) + +const ( + BDADDR_BREDR = 0x0 + BDADDR_LE_PUBLIC = 0x1 + BDADDR_LE_RANDOM = 0x2 +) 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 cfc219f..7106b51 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go @@ -52,7 +52,7 @@ type Timex struct { Errcnt int32 Stbcnt int32 Tai int32 - Pad_cgo_0 [44]byte + _ [44]byte } type Time_t int32 @@ -116,29 +116,59 @@ type Stat_t struct { } type Statfs_t struct { - Type int32 - Bsize int32 - Frsize int32 - Pad_cgo_0 [4]byte - Blocks uint64 - Bfree uint64 - Files uint64 - Ffree uint64 - Bavail uint64 - Fsid Fsid - Namelen int32 - Flags int32 - Spare [5]int32 - Pad_cgo_1 [4]byte + Type int32 + Bsize int32 + Frsize int32 + _ [4]byte + Blocks uint64 + Bfree uint64 + Files uint64 + Ffree uint64 + Bavail uint64 + Fsid Fsid + Namelen int32 + Flags int32 + Spare [5]int32 + _ [4]byte +} + +type StatxTimestamp struct { + Sec int64 + Nsec uint32 + X__reserved int32 +} + +type Statx_t struct { + Mask uint32 + Blksize uint32 + Attributes uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Mode uint16 + _ [1]uint16 + Ino uint64 + Size uint64 + Blocks uint64 + Attributes_mask uint64 + Atime StatxTimestamp + Btime StatxTimestamp + Ctime StatxTimestamp + Mtime StatxTimestamp + Rdev_major uint32 + Rdev_minor uint32 + Dev_major uint32 + Dev_minor uint32 + _ [14]uint64 } type Dirent struct { - Ino uint64 - Off int64 - Reclen uint16 - Type uint8 - Name [256]int8 - Pad_cgo_0 [5]byte + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + _ [5]byte } type Fsid struct { @@ -146,13 +176,13 @@ type Fsid struct { } type Flock_t struct { - Type int16 - Whence int16 - Pad_cgo_0 [4]byte - Start int64 - Len int64 - Pid int32 - Pad_cgo_1 [4]byte + Type int16 + Whence int16 + _ [4]byte + Start int64 + Len int64 + Pid int32 + _ [4]byte } type FscryptPolicy struct { @@ -227,11 +257,20 @@ type RawSockaddrHCI struct { Channel uint16 } +type RawSockaddrL2 struct { + Family uint16 + Psm uint16 + Bdaddr [6]uint8 + Cid uint16 + Bdaddr_type uint8 + _ [1]byte +} + type RawSockaddrCAN struct { - Family uint16 - Pad_cgo_0 [2]byte - Ifindex int32 - Addr [8]byte + Family uint16 + _ [2]byte + Ifindex int32 + Addr [8]byte } type RawSockaddrALG struct { @@ -288,6 +327,13 @@ type IPv6Mreq struct { Interface uint32 } +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + type Msghdr struct { Name *byte Namelen uint32 @@ -337,7 +383,7 @@ type TCPInfo struct { Probes uint8 Backoff uint8 Options uint8 - Pad_cgo_0 [2]byte + _ [2]byte Rto uint32 Ato uint32 Snd_mss uint32 @@ -372,13 +418,16 @@ const ( SizeofSockaddrLinklayer = 0x14 SizeofSockaddrNetlink = 0xc SizeofSockaddrHCI = 0x6 + SizeofSockaddrL2 = 0xe SizeofSockaddrCAN = 0x10 SizeofSockaddrALG = 0x58 SizeofSockaddrVM = 0x10 SizeofLinger = 0x8 + SizeofIovec = 0x8 SizeofIPMreq = 0x8 SizeofIPMreqn = 0xc SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 SizeofMsghdr = 0x1c SizeofCmsghdr = 0xc SizeofInet4Pktinfo = 0xc @@ -390,97 +439,123 @@ const ( ) const ( - IFA_UNSPEC = 0x0 - IFA_ADDRESS = 0x1 - IFA_LOCAL = 0x2 - IFA_LABEL = 0x3 - IFA_BROADCAST = 0x4 - IFA_ANYCAST = 0x5 - IFA_CACHEINFO = 0x6 - IFA_MULTICAST = 0x7 - IFLA_UNSPEC = 0x0 - IFLA_ADDRESS = 0x1 - IFLA_BROADCAST = 0x2 - IFLA_IFNAME = 0x3 - IFLA_MTU = 0x4 - IFLA_LINK = 0x5 - IFLA_QDISC = 0x6 - IFLA_STATS = 0x7 - IFLA_COST = 0x8 - IFLA_PRIORITY = 0x9 - IFLA_MASTER = 0xa - IFLA_WIRELESS = 0xb - IFLA_PROTINFO = 0xc - IFLA_TXQLEN = 0xd - IFLA_MAP = 0xe - IFLA_WEIGHT = 0xf - IFLA_OPERSTATE = 0x10 - IFLA_LINKMODE = 0x11 - IFLA_LINKINFO = 0x12 - IFLA_NET_NS_PID = 0x13 - IFLA_IFALIAS = 0x14 - IFLA_MAX = 0x2b - RT_SCOPE_UNIVERSE = 0x0 - RT_SCOPE_SITE = 0xc8 - RT_SCOPE_LINK = 0xfd - RT_SCOPE_HOST = 0xfe - RT_SCOPE_NOWHERE = 0xff - RT_TABLE_UNSPEC = 0x0 - RT_TABLE_COMPAT = 0xfc - RT_TABLE_DEFAULT = 0xfd - RT_TABLE_MAIN = 0xfe - RT_TABLE_LOCAL = 0xff - RT_TABLE_MAX = 0xffffffff - RTA_UNSPEC = 0x0 - RTA_DST = 0x1 - RTA_SRC = 0x2 - RTA_IIF = 0x3 - RTA_OIF = 0x4 - RTA_GATEWAY = 0x5 - RTA_PRIORITY = 0x6 - RTA_PREFSRC = 0x7 - RTA_METRICS = 0x8 - RTA_MULTIPATH = 0x9 - RTA_FLOW = 0xb - RTA_CACHEINFO = 0xc - RTA_TABLE = 0xf - RTN_UNSPEC = 0x0 - RTN_UNICAST = 0x1 - RTN_LOCAL = 0x2 - RTN_BROADCAST = 0x3 - RTN_ANYCAST = 0x4 - RTN_MULTICAST = 0x5 - RTN_BLACKHOLE = 0x6 - RTN_UNREACHABLE = 0x7 - RTN_PROHIBIT = 0x8 - RTN_THROW = 0x9 - RTN_NAT = 0xa - RTN_XRESOLVE = 0xb - RTNLGRP_NONE = 0x0 - RTNLGRP_LINK = 0x1 - RTNLGRP_NOTIFY = 0x2 - RTNLGRP_NEIGH = 0x3 - RTNLGRP_TC = 0x4 - RTNLGRP_IPV4_IFADDR = 0x5 - RTNLGRP_IPV4_MROUTE = 0x6 - RTNLGRP_IPV4_ROUTE = 0x7 - RTNLGRP_IPV4_RULE = 0x8 - RTNLGRP_IPV6_IFADDR = 0x9 - RTNLGRP_IPV6_MROUTE = 0xa - RTNLGRP_IPV6_ROUTE = 0xb - RTNLGRP_IPV6_IFINFO = 0xc - RTNLGRP_IPV6_PREFIX = 0x12 - RTNLGRP_IPV6_RULE = 0x13 - RTNLGRP_ND_USEROPT = 0x14 - SizeofNlMsghdr = 0x10 - SizeofNlMsgerr = 0x14 - SizeofRtGenmsg = 0x1 - SizeofNlAttr = 0x4 - SizeofRtAttr = 0x4 - SizeofIfInfomsg = 0x10 - SizeofIfAddrmsg = 0x8 - SizeofRtMsg = 0xc - SizeofRtNexthop = 0x8 + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_MAX = 0x2e + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 ) type NlMsghdr struct { @@ -559,9 +634,9 @@ type SockFilter struct { } type SockFprog struct { - Len uint16 - Pad_cgo_0 [2]byte - Filter *SockFilter + Len uint16 + _ [2]byte + Filter *SockFilter } type InotifyEvent struct { @@ -605,12 +680,12 @@ type Sysinfo_t struct { } type Utsname struct { - Sysname [65]int8 - Nodename [65]int8 - Release [65]int8 - Version [65]int8 - Machine [65]int8 - Domainname [65]int8 + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte } type Ustat_t struct { @@ -628,8 +703,15 @@ type EpollEvent struct { } const ( - AT_FDCWD = -0x64 - AT_REMOVEDIR = 0x200 + AT_EMPTY_PATH = 0x1000 + AT_FDCWD = -0x64 + AT_NO_AUTOMOUNT = 0x800 + AT_REMOVEDIR = 0x200 + + AT_STATX_SYNC_AS_STAT = 0x0 + AT_STATX_FORCE_SYNC = 0x2000 + AT_STATX_DONT_SYNC = 0x4000 + AT_SYMLINK_FOLLOW = 0x400 AT_SYMLINK_NOFOLLOW = 0x100 ) @@ -656,7 +738,7 @@ type Sigset_t struct { const RNDGETENTCNT = 0x40045200 -const _SC_PAGESIZE = 0x1e +const PERF_IOC_FLAG_GROUP = 0x1 type Termios struct { Iflag uint32 @@ -668,3 +750,142 @@ type Termios struct { Ispeed uint32 Ospeed uint32 } + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + _ [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + _ [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + _ [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type CGroupStats struct { + Sleeping uint64 + Running uint64 + Stopped uint64 + Uninterruptible uint64 + Io_wait uint64 +} + +const ( + CGROUPSTATS_CMD_UNSPEC = 0x3 + CGROUPSTATS_CMD_GET = 0x4 + CGROUPSTATS_CMD_NEW = 0x5 + CGROUPSTATS_TYPE_UNSPEC = 0x0 + CGROUPSTATS_TYPE_CGROUP_STATS = 0x1 + CGROUPSTATS_CMD_ATTR_UNSPEC = 0x0 + CGROUPSTATS_CMD_ATTR_FD = 0x1 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) + +type cpuMask uint32 + +const ( + _CPU_SETSIZE = 0x400 + _NCPUBITS = 0x20 +) + +const ( + BDADDR_BREDR = 0x0 + BDADDR_LE_PUBLIC = 0x1 + BDADDR_LE_RANDOM = 0x2 +) 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 4c28522..319071c 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go @@ -33,13 +33,13 @@ type Timeval struct { type Timex struct { Modes uint32 - Pad_cgo_0 [4]byte + _ [4]byte Offset int64 Freq int64 Maxerror int64 Esterror int64 Status int32 - Pad_cgo_1 [4]byte + _ [4]byte Constant int64 Precision int64 Tolerance int64 @@ -48,14 +48,14 @@ type Timex struct { Ppsfreq int64 Jitter int64 Shift int32 - Pad_cgo_2 [4]byte + _ [4]byte Stabil int64 Jitcnt int64 Calcnt int64 Errcnt int64 Stbcnt int64 Tai int32 - Pad_cgo_3 [44]byte + _ [44]byte } type Time_t int64 @@ -133,13 +133,43 @@ type Statfs_t struct { Spare [4]int64 } +type StatxTimestamp struct { + Sec int64 + Nsec uint32 + X__reserved int32 +} + +type Statx_t struct { + Mask uint32 + Blksize uint32 + Attributes uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Mode uint16 + _ [1]uint16 + Ino uint64 + Size uint64 + Blocks uint64 + Attributes_mask uint64 + Atime StatxTimestamp + Btime StatxTimestamp + Ctime StatxTimestamp + Mtime StatxTimestamp + Rdev_major uint32 + Rdev_minor uint32 + Dev_major uint32 + Dev_minor uint32 + _ [14]uint64 +} + type Dirent struct { - Ino uint64 - Off int64 - Reclen uint16 - Type uint8 - Name [256]uint8 - Pad_cgo_0 [5]byte + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]uint8 + _ [5]byte } type Fsid struct { @@ -147,13 +177,13 @@ type Fsid struct { } type Flock_t struct { - Type int16 - Whence int16 - Pad_cgo_0 [4]byte - Start int64 - Len int64 - Pid int32 - Pad_cgo_1 [4]byte + Type int16 + Whence int16 + _ [4]byte + Start int64 + Len int64 + Pid int32 + _ [4]byte } type FscryptPolicy struct { @@ -228,11 +258,20 @@ type RawSockaddrHCI struct { Channel uint16 } +type RawSockaddrL2 struct { + Family uint16 + Psm uint16 + Bdaddr [6]uint8 + Cid uint16 + Bdaddr_type uint8 + _ [1]byte +} + type RawSockaddrCAN struct { - Family uint16 - Pad_cgo_0 [2]byte - Ifindex int32 - Addr [8]byte + Family uint16 + _ [2]byte + Ifindex int32 + Addr [8]byte } type RawSockaddrALG struct { @@ -289,16 +328,23 @@ type IPv6Mreq struct { Interface uint32 } +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + type Msghdr struct { Name *byte Namelen uint32 - Pad_cgo_0 [4]byte + _ [4]byte Iov *Iovec Iovlen uint64 Control *byte Controllen uint64 Flags int32 - Pad_cgo_1 [4]byte + _ [4]byte } type Cmsghdr struct { @@ -340,7 +386,7 @@ type TCPInfo struct { Probes uint8 Backoff uint8 Options uint8 - Pad_cgo_0 [2]byte + _ [2]byte Rto uint32 Ato uint32 Snd_mss uint32 @@ -375,13 +421,16 @@ const ( SizeofSockaddrLinklayer = 0x14 SizeofSockaddrNetlink = 0xc SizeofSockaddrHCI = 0x6 + SizeofSockaddrL2 = 0xe SizeofSockaddrCAN = 0x10 SizeofSockaddrALG = 0x58 SizeofSockaddrVM = 0x10 SizeofLinger = 0x8 + SizeofIovec = 0x10 SizeofIPMreq = 0x8 SizeofIPMreqn = 0xc SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 SizeofMsghdr = 0x38 SizeofCmsghdr = 0x10 SizeofInet4Pktinfo = 0xc @@ -393,97 +442,123 @@ const ( ) const ( - IFA_UNSPEC = 0x0 - IFA_ADDRESS = 0x1 - IFA_LOCAL = 0x2 - IFA_LABEL = 0x3 - IFA_BROADCAST = 0x4 - IFA_ANYCAST = 0x5 - IFA_CACHEINFO = 0x6 - IFA_MULTICAST = 0x7 - IFLA_UNSPEC = 0x0 - IFLA_ADDRESS = 0x1 - IFLA_BROADCAST = 0x2 - IFLA_IFNAME = 0x3 - IFLA_MTU = 0x4 - IFLA_LINK = 0x5 - IFLA_QDISC = 0x6 - IFLA_STATS = 0x7 - IFLA_COST = 0x8 - IFLA_PRIORITY = 0x9 - IFLA_MASTER = 0xa - IFLA_WIRELESS = 0xb - IFLA_PROTINFO = 0xc - IFLA_TXQLEN = 0xd - IFLA_MAP = 0xe - IFLA_WEIGHT = 0xf - IFLA_OPERSTATE = 0x10 - IFLA_LINKMODE = 0x11 - IFLA_LINKINFO = 0x12 - IFLA_NET_NS_PID = 0x13 - IFLA_IFALIAS = 0x14 - IFLA_MAX = 0x2b - RT_SCOPE_UNIVERSE = 0x0 - RT_SCOPE_SITE = 0xc8 - RT_SCOPE_LINK = 0xfd - RT_SCOPE_HOST = 0xfe - RT_SCOPE_NOWHERE = 0xff - RT_TABLE_UNSPEC = 0x0 - RT_TABLE_COMPAT = 0xfc - RT_TABLE_DEFAULT = 0xfd - RT_TABLE_MAIN = 0xfe - RT_TABLE_LOCAL = 0xff - RT_TABLE_MAX = 0xffffffff - RTA_UNSPEC = 0x0 - RTA_DST = 0x1 - RTA_SRC = 0x2 - RTA_IIF = 0x3 - RTA_OIF = 0x4 - RTA_GATEWAY = 0x5 - RTA_PRIORITY = 0x6 - RTA_PREFSRC = 0x7 - RTA_METRICS = 0x8 - RTA_MULTIPATH = 0x9 - RTA_FLOW = 0xb - RTA_CACHEINFO = 0xc - RTA_TABLE = 0xf - RTN_UNSPEC = 0x0 - RTN_UNICAST = 0x1 - RTN_LOCAL = 0x2 - RTN_BROADCAST = 0x3 - RTN_ANYCAST = 0x4 - RTN_MULTICAST = 0x5 - RTN_BLACKHOLE = 0x6 - RTN_UNREACHABLE = 0x7 - RTN_PROHIBIT = 0x8 - RTN_THROW = 0x9 - RTN_NAT = 0xa - RTN_XRESOLVE = 0xb - RTNLGRP_NONE = 0x0 - RTNLGRP_LINK = 0x1 - RTNLGRP_NOTIFY = 0x2 - RTNLGRP_NEIGH = 0x3 - RTNLGRP_TC = 0x4 - RTNLGRP_IPV4_IFADDR = 0x5 - RTNLGRP_IPV4_MROUTE = 0x6 - RTNLGRP_IPV4_ROUTE = 0x7 - RTNLGRP_IPV4_RULE = 0x8 - RTNLGRP_IPV6_IFADDR = 0x9 - RTNLGRP_IPV6_MROUTE = 0xa - RTNLGRP_IPV6_ROUTE = 0xb - RTNLGRP_IPV6_IFINFO = 0xc - RTNLGRP_IPV6_PREFIX = 0x12 - RTNLGRP_IPV6_RULE = 0x13 - RTNLGRP_ND_USEROPT = 0x14 - SizeofNlMsghdr = 0x10 - SizeofNlMsgerr = 0x14 - SizeofRtGenmsg = 0x1 - SizeofNlAttr = 0x4 - SizeofRtAttr = 0x4 - SizeofIfInfomsg = 0x10 - SizeofIfAddrmsg = 0x8 - SizeofRtMsg = 0xc - SizeofRtNexthop = 0x8 + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_MAX = 0x2e + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 ) type NlMsghdr struct { @@ -562,9 +637,9 @@ type SockFilter struct { } type SockFprog struct { - Len uint16 - Pad_cgo_0 [6]byte - Filter *SockFilter + Len uint16 + _ [6]byte + Filter *SockFilter } type InotifyEvent struct { @@ -607,30 +682,30 @@ type Sysinfo_t struct { Freeswap uint64 Procs uint16 Pad uint16 - Pad_cgo_0 [4]byte + _ [4]byte Totalhigh uint64 Freehigh uint64 Unit uint32 X_f [0]uint8 - Pad_cgo_1 [4]byte + _ [4]byte } type Utsname struct { - Sysname [65]uint8 - Nodename [65]uint8 - Release [65]uint8 - Version [65]uint8 - Machine [65]uint8 - Domainname [65]uint8 + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte } type Ustat_t struct { - Tfree int32 - Pad_cgo_0 [4]byte - Tinode uint64 - Fname [6]uint8 - Fpack [6]uint8 - Pad_cgo_1 [4]byte + Tfree int32 + _ [4]byte + Tinode uint64 + Fname [6]uint8 + Fpack [6]uint8 + _ [4]byte } type EpollEvent struct { @@ -641,8 +716,15 @@ type EpollEvent struct { } const ( - AT_FDCWD = -0x64 - AT_REMOVEDIR = 0x200 + AT_EMPTY_PATH = 0x1000 + AT_FDCWD = -0x64 + AT_NO_AUTOMOUNT = 0x800 + AT_REMOVEDIR = 0x200 + + AT_STATX_SYNC_AS_STAT = 0x0 + AT_STATX_FORCE_SYNC = 0x2000 + AT_STATX_DONT_SYNC = 0x4000 + AT_SYMLINK_FOLLOW = 0x400 AT_SYMLINK_NOFOLLOW = 0x100 ) @@ -669,7 +751,7 @@ type Sigset_t struct { const RNDGETENTCNT = 0x40045200 -const _SC_PAGESIZE = 0x1e +const PERF_IOC_FLAG_GROUP = 0x1 type Termios struct { Iflag uint32 @@ -681,3 +763,142 @@ type Termios struct { Ispeed uint32 Ospeed uint32 } + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + _ [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + _ [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]uint8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + _ [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type CGroupStats struct { + Sleeping uint64 + Running uint64 + Stopped uint64 + Uninterruptible uint64 + Io_wait uint64 +} + +const ( + CGROUPSTATS_CMD_UNSPEC = 0x3 + CGROUPSTATS_CMD_GET = 0x4 + CGROUPSTATS_CMD_NEW = 0x5 + CGROUPSTATS_TYPE_UNSPEC = 0x0 + CGROUPSTATS_TYPE_CGROUP_STATS = 0x1 + CGROUPSTATS_CMD_ATTR_UNSPEC = 0x0 + CGROUPSTATS_CMD_ATTR_FD = 0x1 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) + +type cpuMask uint64 + +const ( + _CPU_SETSIZE = 0x400 + _NCPUBITS = 0x40 +) + +const ( + BDADDR_BREDR = 0x0 + BDADDR_LE_PUBLIC = 0x1 + BDADDR_LE_RANDOM = 0x2 +) 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 1b511be..ef00ed4 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go @@ -33,13 +33,13 @@ type Timeval struct { type Timex struct { Modes uint32 - Pad_cgo_0 [4]byte + _ [4]byte Offset int64 Freq int64 Maxerror int64 Esterror int64 Status int32 - Pad_cgo_1 [4]byte + _ [4]byte Constant int64 Precision int64 Tolerance int64 @@ -48,14 +48,14 @@ type Timex struct { Ppsfreq int64 Jitter int64 Shift int32 - Pad_cgo_2 [4]byte + _ [4]byte Stabil int64 Jitcnt int64 Calcnt int64 Errcnt int64 Stbcnt int64 Tai int32 - Pad_cgo_3 [44]byte + _ [44]byte } type Time_t int64 @@ -133,13 +133,43 @@ type Statfs_t struct { Spare [4]int64 } +type StatxTimestamp struct { + Sec int64 + Nsec uint32 + X__reserved int32 +} + +type Statx_t struct { + Mask uint32 + Blksize uint32 + Attributes uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Mode uint16 + _ [1]uint16 + Ino uint64 + Size uint64 + Blocks uint64 + Attributes_mask uint64 + Atime StatxTimestamp + Btime StatxTimestamp + Ctime StatxTimestamp + Mtime StatxTimestamp + Rdev_major uint32 + Rdev_minor uint32 + Dev_major uint32 + Dev_minor uint32 + _ [14]uint64 +} + type Dirent struct { - Ino uint64 - Off int64 - Reclen uint16 - Type uint8 - Name [256]uint8 - Pad_cgo_0 [5]byte + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]uint8 + _ [5]byte } type Fsid struct { @@ -147,13 +177,13 @@ type Fsid struct { } type Flock_t struct { - Type int16 - Whence int16 - Pad_cgo_0 [4]byte - Start int64 - Len int64 - Pid int32 - Pad_cgo_1 [4]byte + Type int16 + Whence int16 + _ [4]byte + Start int64 + Len int64 + Pid int32 + _ [4]byte } type FscryptPolicy struct { @@ -228,11 +258,20 @@ type RawSockaddrHCI struct { Channel uint16 } +type RawSockaddrL2 struct { + Family uint16 + Psm uint16 + Bdaddr [6]uint8 + Cid uint16 + Bdaddr_type uint8 + _ [1]byte +} + type RawSockaddrCAN struct { - Family uint16 - Pad_cgo_0 [2]byte - Ifindex int32 - Addr [8]byte + Family uint16 + _ [2]byte + Ifindex int32 + Addr [8]byte } type RawSockaddrALG struct { @@ -289,16 +328,23 @@ type IPv6Mreq struct { Interface uint32 } +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + type Msghdr struct { Name *byte Namelen uint32 - Pad_cgo_0 [4]byte + _ [4]byte Iov *Iovec Iovlen uint64 Control *byte Controllen uint64 Flags int32 - Pad_cgo_1 [4]byte + _ [4]byte } type Cmsghdr struct { @@ -340,7 +386,7 @@ type TCPInfo struct { Probes uint8 Backoff uint8 Options uint8 - Pad_cgo_0 [2]byte + _ [2]byte Rto uint32 Ato uint32 Snd_mss uint32 @@ -375,13 +421,16 @@ const ( SizeofSockaddrLinklayer = 0x14 SizeofSockaddrNetlink = 0xc SizeofSockaddrHCI = 0x6 + SizeofSockaddrL2 = 0xe SizeofSockaddrCAN = 0x10 SizeofSockaddrALG = 0x58 SizeofSockaddrVM = 0x10 SizeofLinger = 0x8 + SizeofIovec = 0x10 SizeofIPMreq = 0x8 SizeofIPMreqn = 0xc SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 SizeofMsghdr = 0x38 SizeofCmsghdr = 0x10 SizeofInet4Pktinfo = 0xc @@ -393,97 +442,123 @@ const ( ) const ( - IFA_UNSPEC = 0x0 - IFA_ADDRESS = 0x1 - IFA_LOCAL = 0x2 - IFA_LABEL = 0x3 - IFA_BROADCAST = 0x4 - IFA_ANYCAST = 0x5 - IFA_CACHEINFO = 0x6 - IFA_MULTICAST = 0x7 - IFLA_UNSPEC = 0x0 - IFLA_ADDRESS = 0x1 - IFLA_BROADCAST = 0x2 - IFLA_IFNAME = 0x3 - IFLA_MTU = 0x4 - IFLA_LINK = 0x5 - IFLA_QDISC = 0x6 - IFLA_STATS = 0x7 - IFLA_COST = 0x8 - IFLA_PRIORITY = 0x9 - IFLA_MASTER = 0xa - IFLA_WIRELESS = 0xb - IFLA_PROTINFO = 0xc - IFLA_TXQLEN = 0xd - IFLA_MAP = 0xe - IFLA_WEIGHT = 0xf - IFLA_OPERSTATE = 0x10 - IFLA_LINKMODE = 0x11 - IFLA_LINKINFO = 0x12 - IFLA_NET_NS_PID = 0x13 - IFLA_IFALIAS = 0x14 - IFLA_MAX = 0x2b - RT_SCOPE_UNIVERSE = 0x0 - RT_SCOPE_SITE = 0xc8 - RT_SCOPE_LINK = 0xfd - RT_SCOPE_HOST = 0xfe - RT_SCOPE_NOWHERE = 0xff - RT_TABLE_UNSPEC = 0x0 - RT_TABLE_COMPAT = 0xfc - RT_TABLE_DEFAULT = 0xfd - RT_TABLE_MAIN = 0xfe - RT_TABLE_LOCAL = 0xff - RT_TABLE_MAX = 0xffffffff - RTA_UNSPEC = 0x0 - RTA_DST = 0x1 - RTA_SRC = 0x2 - RTA_IIF = 0x3 - RTA_OIF = 0x4 - RTA_GATEWAY = 0x5 - RTA_PRIORITY = 0x6 - RTA_PREFSRC = 0x7 - RTA_METRICS = 0x8 - RTA_MULTIPATH = 0x9 - RTA_FLOW = 0xb - RTA_CACHEINFO = 0xc - RTA_TABLE = 0xf - RTN_UNSPEC = 0x0 - RTN_UNICAST = 0x1 - RTN_LOCAL = 0x2 - RTN_BROADCAST = 0x3 - RTN_ANYCAST = 0x4 - RTN_MULTICAST = 0x5 - RTN_BLACKHOLE = 0x6 - RTN_UNREACHABLE = 0x7 - RTN_PROHIBIT = 0x8 - RTN_THROW = 0x9 - RTN_NAT = 0xa - RTN_XRESOLVE = 0xb - RTNLGRP_NONE = 0x0 - RTNLGRP_LINK = 0x1 - RTNLGRP_NOTIFY = 0x2 - RTNLGRP_NEIGH = 0x3 - RTNLGRP_TC = 0x4 - RTNLGRP_IPV4_IFADDR = 0x5 - RTNLGRP_IPV4_MROUTE = 0x6 - RTNLGRP_IPV4_ROUTE = 0x7 - RTNLGRP_IPV4_RULE = 0x8 - RTNLGRP_IPV6_IFADDR = 0x9 - RTNLGRP_IPV6_MROUTE = 0xa - RTNLGRP_IPV6_ROUTE = 0xb - RTNLGRP_IPV6_IFINFO = 0xc - RTNLGRP_IPV6_PREFIX = 0x12 - RTNLGRP_IPV6_RULE = 0x13 - RTNLGRP_ND_USEROPT = 0x14 - SizeofNlMsghdr = 0x10 - SizeofNlMsgerr = 0x14 - SizeofRtGenmsg = 0x1 - SizeofNlAttr = 0x4 - SizeofRtAttr = 0x4 - SizeofIfInfomsg = 0x10 - SizeofIfAddrmsg = 0x8 - SizeofRtMsg = 0xc - SizeofRtNexthop = 0x8 + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_MAX = 0x2e + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 ) type NlMsghdr struct { @@ -562,9 +637,9 @@ type SockFilter struct { } type SockFprog struct { - Len uint16 - Pad_cgo_0 [6]byte - Filter *SockFilter + Len uint16 + _ [6]byte + Filter *SockFilter } type InotifyEvent struct { @@ -607,30 +682,30 @@ type Sysinfo_t struct { Freeswap uint64 Procs uint16 Pad uint16 - Pad_cgo_0 [4]byte + _ [4]byte Totalhigh uint64 Freehigh uint64 Unit uint32 X_f [0]uint8 - Pad_cgo_1 [4]byte + _ [4]byte } type Utsname struct { - Sysname [65]uint8 - Nodename [65]uint8 - Release [65]uint8 - Version [65]uint8 - Machine [65]uint8 - Domainname [65]uint8 + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte } type Ustat_t struct { - Tfree int32 - Pad_cgo_0 [4]byte - Tinode uint64 - Fname [6]uint8 - Fpack [6]uint8 - Pad_cgo_1 [4]byte + Tfree int32 + _ [4]byte + Tinode uint64 + Fname [6]uint8 + Fpack [6]uint8 + _ [4]byte } type EpollEvent struct { @@ -641,8 +716,15 @@ type EpollEvent struct { } const ( - AT_FDCWD = -0x64 - AT_REMOVEDIR = 0x200 + AT_EMPTY_PATH = 0x1000 + AT_FDCWD = -0x64 + AT_NO_AUTOMOUNT = 0x800 + AT_REMOVEDIR = 0x200 + + AT_STATX_SYNC_AS_STAT = 0x0 + AT_STATX_FORCE_SYNC = 0x2000 + AT_STATX_DONT_SYNC = 0x4000 + AT_SYMLINK_FOLLOW = 0x400 AT_SYMLINK_NOFOLLOW = 0x100 ) @@ -669,7 +751,7 @@ type Sigset_t struct { const RNDGETENTCNT = 0x40045200 -const _SC_PAGESIZE = 0x1e +const PERF_IOC_FLAG_GROUP = 0x1 type Termios struct { Iflag uint32 @@ -681,3 +763,142 @@ type Termios struct { Ispeed uint32 Ospeed uint32 } + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + _ [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + _ [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]uint8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + _ [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type CGroupStats struct { + Sleeping uint64 + Running uint64 + Stopped uint64 + Uninterruptible uint64 + Io_wait uint64 +} + +const ( + CGROUPSTATS_CMD_UNSPEC = 0x3 + CGROUPSTATS_CMD_GET = 0x4 + CGROUPSTATS_CMD_NEW = 0x5 + CGROUPSTATS_TYPE_UNSPEC = 0x0 + CGROUPSTATS_TYPE_CGROUP_STATS = 0x1 + CGROUPSTATS_CMD_ATTR_UNSPEC = 0x0 + CGROUPSTATS_CMD_ATTR_FD = 0x1 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) + +type cpuMask uint64 + +const ( + _CPU_SETSIZE = 0x400 + _NCPUBITS = 0x40 +) + +const ( + BDADDR_BREDR = 0x0 + BDADDR_LE_PUBLIC = 0x1 + BDADDR_LE_RANDOM = 0x2 +) 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 b408752..e9ee497 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go @@ -132,6 +132,36 @@ type Statfs_t struct { _ [4]byte } +type StatxTimestamp struct { + Sec int64 + Nsec uint32 + _ int32 +} + +type Statx_t struct { + Mask uint32 + Blksize uint32 + Attributes uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Mode uint16 + _ [1]uint16 + Ino uint64 + Size uint64 + Blocks uint64 + Attributes_mask uint64 + Atime StatxTimestamp + Btime StatxTimestamp + Ctime StatxTimestamp + Mtime StatxTimestamp + Rdev_major uint32 + Rdev_minor uint32 + Dev_major uint32 + Dev_minor uint32 + _ [14]uint64 +} + type Dirent struct { Ino uint64 Off int64 @@ -227,6 +257,15 @@ type RawSockaddrHCI struct { Channel uint16 } +type RawSockaddrL2 struct { + Family uint16 + Psm uint16 + Bdaddr [6]uint8 + Cid uint16 + Bdaddr_type uint8 + _ [1]byte +} + type RawSockaddrCAN struct { Family uint16 _ [2]byte @@ -288,6 +327,13 @@ type IPv6Mreq struct { Interface uint32 } +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + type Msghdr struct { Name *byte Namelen uint32 @@ -374,13 +420,16 @@ const ( SizeofSockaddrLinklayer = 0x14 SizeofSockaddrNetlink = 0xc SizeofSockaddrHCI = 0x6 + SizeofSockaddrL2 = 0xe SizeofSockaddrCAN = 0x10 SizeofSockaddrALG = 0x58 SizeofSockaddrVM = 0x10 SizeofLinger = 0x8 + SizeofIovec = 0x10 SizeofIPMreq = 0x8 SizeofIPMreqn = 0xc SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 SizeofMsghdr = 0x38 SizeofCmsghdr = 0x10 SizeofInet4Pktinfo = 0xc @@ -392,97 +441,123 @@ const ( ) const ( - IFA_UNSPEC = 0x0 - IFA_ADDRESS = 0x1 - IFA_LOCAL = 0x2 - IFA_LABEL = 0x3 - IFA_BROADCAST = 0x4 - IFA_ANYCAST = 0x5 - IFA_CACHEINFO = 0x6 - IFA_MULTICAST = 0x7 - IFLA_UNSPEC = 0x0 - IFLA_ADDRESS = 0x1 - IFLA_BROADCAST = 0x2 - IFLA_IFNAME = 0x3 - IFLA_MTU = 0x4 - IFLA_LINK = 0x5 - IFLA_QDISC = 0x6 - IFLA_STATS = 0x7 - IFLA_COST = 0x8 - IFLA_PRIORITY = 0x9 - IFLA_MASTER = 0xa - IFLA_WIRELESS = 0xb - IFLA_PROTINFO = 0xc - IFLA_TXQLEN = 0xd - IFLA_MAP = 0xe - IFLA_WEIGHT = 0xf - IFLA_OPERSTATE = 0x10 - IFLA_LINKMODE = 0x11 - IFLA_LINKINFO = 0x12 - IFLA_NET_NS_PID = 0x13 - IFLA_IFALIAS = 0x14 - IFLA_MAX = 0x2b - RT_SCOPE_UNIVERSE = 0x0 - RT_SCOPE_SITE = 0xc8 - RT_SCOPE_LINK = 0xfd - RT_SCOPE_HOST = 0xfe - RT_SCOPE_NOWHERE = 0xff - RT_TABLE_UNSPEC = 0x0 - RT_TABLE_COMPAT = 0xfc - RT_TABLE_DEFAULT = 0xfd - RT_TABLE_MAIN = 0xfe - RT_TABLE_LOCAL = 0xff - RT_TABLE_MAX = 0xffffffff - RTA_UNSPEC = 0x0 - RTA_DST = 0x1 - RTA_SRC = 0x2 - RTA_IIF = 0x3 - RTA_OIF = 0x4 - RTA_GATEWAY = 0x5 - RTA_PRIORITY = 0x6 - RTA_PREFSRC = 0x7 - RTA_METRICS = 0x8 - RTA_MULTIPATH = 0x9 - RTA_FLOW = 0xb - RTA_CACHEINFO = 0xc - RTA_TABLE = 0xf - RTN_UNSPEC = 0x0 - RTN_UNICAST = 0x1 - RTN_LOCAL = 0x2 - RTN_BROADCAST = 0x3 - RTN_ANYCAST = 0x4 - RTN_MULTICAST = 0x5 - RTN_BLACKHOLE = 0x6 - RTN_UNREACHABLE = 0x7 - RTN_PROHIBIT = 0x8 - RTN_THROW = 0x9 - RTN_NAT = 0xa - RTN_XRESOLVE = 0xb - RTNLGRP_NONE = 0x0 - RTNLGRP_LINK = 0x1 - RTNLGRP_NOTIFY = 0x2 - RTNLGRP_NEIGH = 0x3 - RTNLGRP_TC = 0x4 - RTNLGRP_IPV4_IFADDR = 0x5 - RTNLGRP_IPV4_MROUTE = 0x6 - RTNLGRP_IPV4_ROUTE = 0x7 - RTNLGRP_IPV4_RULE = 0x8 - RTNLGRP_IPV6_IFADDR = 0x9 - RTNLGRP_IPV6_MROUTE = 0xa - RTNLGRP_IPV6_ROUTE = 0xb - RTNLGRP_IPV6_IFINFO = 0xc - RTNLGRP_IPV6_PREFIX = 0x12 - RTNLGRP_IPV6_RULE = 0x13 - RTNLGRP_ND_USEROPT = 0x14 - SizeofNlMsghdr = 0x10 - SizeofNlMsgerr = 0x14 - SizeofRtGenmsg = 0x1 - SizeofNlAttr = 0x4 - SizeofRtAttr = 0x4 - SizeofIfInfomsg = 0x10 - SizeofIfAddrmsg = 0x8 - SizeofRtMsg = 0xc - SizeofRtNexthop = 0x8 + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_MAX = 0x2e + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 ) type NlMsghdr struct { @@ -633,12 +708,12 @@ type Sysinfo_t struct { } type Utsname struct { - Sysname [65]int8 - Nodename [65]int8 - Release [65]int8 - Version [65]int8 - Machine [65]int8 - Domainname [65]int8 + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte } type Ustat_t struct { @@ -658,8 +733,15 @@ type EpollEvent struct { } const ( - AT_FDCWD = -0x64 - AT_REMOVEDIR = 0x200 + AT_EMPTY_PATH = 0x1000 + AT_FDCWD = -0x64 + AT_NO_AUTOMOUNT = 0x800 + AT_REMOVEDIR = 0x200 + + AT_STATX_SYNC_AS_STAT = 0x0 + AT_STATX_FORCE_SYNC = 0x2000 + AT_STATX_DONT_SYNC = 0x4000 + AT_SYMLINK_FOLLOW = 0x400 AT_SYMLINK_NOFOLLOW = 0x100 ) @@ -686,7 +768,7 @@ type Sigset_t struct { const RNDGETENTCNT = 0x80045200 -const _SC_PAGESIZE = 0x1e +const PERF_IOC_FLAG_GROUP = 0x1 type Termios struct { Iflag uint32 @@ -698,3 +780,142 @@ type Termios struct { Ispeed uint32 Ospeed uint32 } + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + _ [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + _ [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + _ [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type CGroupStats struct { + Sleeping uint64 + Running uint64 + Stopped uint64 + Uninterruptible uint64 + Io_wait uint64 +} + +const ( + CGROUPSTATS_CMD_UNSPEC = 0x3 + CGROUPSTATS_CMD_GET = 0x4 + CGROUPSTATS_CMD_NEW = 0x5 + CGROUPSTATS_TYPE_UNSPEC = 0x0 + CGROUPSTATS_TYPE_CGROUP_STATS = 0x1 + CGROUPSTATS_CMD_ATTR_UNSPEC = 0x0 + CGROUPSTATS_CMD_ATTR_FD = 0x1 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) + +type cpuMask uint64 + +const ( + _CPU_SETSIZE = 0x400 + _NCPUBITS = 0x40 +) + +const ( + BDADDR_BREDR = 0x0 + BDADDR_LE_PUBLIC = 0x1 + BDADDR_LE_RANDOM = 0x2 +) 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 22bdab9..8e7384b 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go @@ -376,97 +376,123 @@ const ( ) const ( - IFA_UNSPEC = 0x0 - IFA_ADDRESS = 0x1 - IFA_LOCAL = 0x2 - IFA_LABEL = 0x3 - IFA_BROADCAST = 0x4 - IFA_ANYCAST = 0x5 - IFA_CACHEINFO = 0x6 - IFA_MULTICAST = 0x7 - IFLA_UNSPEC = 0x0 - IFLA_ADDRESS = 0x1 - IFLA_BROADCAST = 0x2 - IFLA_IFNAME = 0x3 - IFLA_MTU = 0x4 - IFLA_LINK = 0x5 - IFLA_QDISC = 0x6 - IFLA_STATS = 0x7 - IFLA_COST = 0x8 - IFLA_PRIORITY = 0x9 - IFLA_MASTER = 0xa - IFLA_WIRELESS = 0xb - IFLA_PROTINFO = 0xc - IFLA_TXQLEN = 0xd - IFLA_MAP = 0xe - IFLA_WEIGHT = 0xf - IFLA_OPERSTATE = 0x10 - IFLA_LINKMODE = 0x11 - IFLA_LINKINFO = 0x12 - IFLA_NET_NS_PID = 0x13 - IFLA_IFALIAS = 0x14 - IFLA_MAX = 0x2a - RT_SCOPE_UNIVERSE = 0x0 - RT_SCOPE_SITE = 0xc8 - RT_SCOPE_LINK = 0xfd - RT_SCOPE_HOST = 0xfe - RT_SCOPE_NOWHERE = 0xff - RT_TABLE_UNSPEC = 0x0 - RT_TABLE_COMPAT = 0xfc - RT_TABLE_DEFAULT = 0xfd - RT_TABLE_MAIN = 0xfe - RT_TABLE_LOCAL = 0xff - RT_TABLE_MAX = 0xffffffff - RTA_UNSPEC = 0x0 - RTA_DST = 0x1 - RTA_SRC = 0x2 - RTA_IIF = 0x3 - RTA_OIF = 0x4 - RTA_GATEWAY = 0x5 - RTA_PRIORITY = 0x6 - RTA_PREFSRC = 0x7 - RTA_METRICS = 0x8 - RTA_MULTIPATH = 0x9 - RTA_FLOW = 0xb - RTA_CACHEINFO = 0xc - RTA_TABLE = 0xf - RTN_UNSPEC = 0x0 - RTN_UNICAST = 0x1 - RTN_LOCAL = 0x2 - RTN_BROADCAST = 0x3 - RTN_ANYCAST = 0x4 - RTN_MULTICAST = 0x5 - RTN_BLACKHOLE = 0x6 - RTN_UNREACHABLE = 0x7 - RTN_PROHIBIT = 0x8 - RTN_THROW = 0x9 - RTN_NAT = 0xa - RTN_XRESOLVE = 0xb - RTNLGRP_NONE = 0x0 - RTNLGRP_LINK = 0x1 - RTNLGRP_NOTIFY = 0x2 - RTNLGRP_NEIGH = 0x3 - RTNLGRP_TC = 0x4 - RTNLGRP_IPV4_IFADDR = 0x5 - RTNLGRP_IPV4_MROUTE = 0x6 - RTNLGRP_IPV4_ROUTE = 0x7 - RTNLGRP_IPV4_RULE = 0x8 - RTNLGRP_IPV6_IFADDR = 0x9 - RTNLGRP_IPV6_MROUTE = 0xa - RTNLGRP_IPV6_ROUTE = 0xb - RTNLGRP_IPV6_IFINFO = 0xc - RTNLGRP_IPV6_PREFIX = 0x12 - RTNLGRP_IPV6_RULE = 0x13 - RTNLGRP_ND_USEROPT = 0x14 - SizeofNlMsghdr = 0x10 - SizeofNlMsgerr = 0x14 - SizeofRtGenmsg = 0x1 - SizeofNlAttr = 0x4 - SizeofRtAttr = 0x4 - SizeofIfInfomsg = 0x10 - SizeofIfAddrmsg = 0x8 - SizeofRtMsg = 0xc - SizeofRtNexthop = 0x8 + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_MAX = 0x2e + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 ) type NlMsghdr struct { @@ -601,12 +627,12 @@ type Sysinfo_t struct { } type Utsname struct { - Sysname [65]int8 - Nodename [65]int8 - Release [65]int8 - Version [65]int8 - Machine [65]int8 - Domainname [65]int8 + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte } type Ustat_t struct { @@ -652,8 +678,6 @@ type Sigset_t struct { X__val [16]uint64 } -const _SC_PAGESIZE = 0x1e - type Termios struct { Iflag uint32 Oflag uint32 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 caf755f..4b86fb2 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go +++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go @@ -1,5 +1,5 @@ -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs types_netbsd.go +// cgo -godefs types_netbsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. // +build 386,netbsd @@ -99,6 +99,19 @@ type Fsid struct { X__fsid_val [2]int32 } +const ( + PathMax = 0x400 +) + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + type RawSockaddrInet4 struct { Len uint8 Family uint8 @@ -382,6 +395,37 @@ type Termios struct { Ospeed int32 } +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x64 + AT_SYMLINK_NOFOLLOW = 0x200 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + type Sysctlnode struct { Flags uint32 Num int32 @@ -394,3 +438,11 @@ type Sysctlnode struct { X_sysctl_parent [8]byte X_sysctl_desc [8]byte } + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} 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 91b4a53..9048a50 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go @@ -1,5 +1,5 @@ -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs types_netbsd.go +// cgo -godefs types_netbsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. // +build amd64,netbsd @@ -103,6 +103,19 @@ type Fsid struct { X__fsid_val [2]int32 } +const ( + PathMax = 0x400 +) + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + type RawSockaddrInet4 struct { Len uint8 Family uint8 @@ -389,6 +402,37 @@ type Termios struct { Ospeed int32 } +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x64 + AT_SYMLINK_NOFOLLOW = 0x200 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + type Sysctlnode struct { Flags uint32 Num int32 @@ -401,3 +445,11 @@ type Sysctlnode struct { X_sysctl_parent [8]byte X_sysctl_desc [8]byte } + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} 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 c0758f9..00525e7 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go +++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go @@ -1,5 +1,5 @@ -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs types_netbsd.go +// cgo -godefs types_netbsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. // +build arm,netbsd @@ -104,6 +104,19 @@ type Fsid struct { X__fsid_val [2]int32 } +const ( + PathMax = 0x400 +) + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + type RawSockaddrInet4 struct { Len uint8 Family uint8 @@ -387,6 +400,37 @@ type Termios struct { Ospeed int32 } +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x64 + AT_SYMLINK_NOFOLLOW = 0x200 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + type Sysctlnode struct { Flags uint32 Num int32 @@ -399,3 +443,11 @@ type Sysctlnode struct { X_sysctl_parent [8]byte X_sysctl_desc [8]byte } + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} 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 860a469..d5a2d75 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go +++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go @@ -1,5 +1,5 @@ -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs types_openbsd.go +// cgo -godefs types_openbsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. // +build 386,openbsd @@ -140,6 +140,10 @@ type Fsid struct { Val [2]int32 } +const ( + PathMax = 0x400 +) + type RawSockaddrInet4 struct { Len uint8 Family uint8 @@ -439,3 +443,42 @@ type Termios struct { Ispeed int32 Ospeed int32 } + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x64 + AT_SYMLINK_NOFOLLOW = 0x2 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} 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 23c5272..d531410 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go @@ -1,5 +1,5 @@ -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs types_openbsd.go +// cgo -godefs types_openbsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. // +build amd64,openbsd @@ -142,6 +142,10 @@ type Fsid struct { Val [2]int32 } +const ( + PathMax = 0x400 +) + type RawSockaddrInet4 struct { Len uint8 Family uint8 @@ -446,3 +450,42 @@ type Termios struct { Ispeed int32 Ospeed int32 } + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x64 + AT_SYMLINK_NOFOLLOW = 0x2 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go new file mode 100644 index 0000000..e35b13b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go @@ -0,0 +1,477 @@ +// cgo -godefs types_openbsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm,openbsd + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int32 +} + +type Timeval struct { + Sec int64 + Usec int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +const ( + S_IFMT = 0xf000 + S_IFIFO = 0x1000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFBLK = 0x6000 + S_IFREG = 0x8000 + S_IFLNK = 0xa000 + S_IFSOCK = 0xc000 + S_ISUID = 0x800 + S_ISGID = 0x400 + S_ISVTX = 0x200 + S_IRUSR = 0x100 + S_IWUSR = 0x80 + S_IXUSR = 0x40 +) + +type Stat_t struct { + Mode uint32 + Dev int32 + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev int32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + X__st_birthtim Timespec +} + +type Statfs_t struct { + F_flags uint32 + F_bsize uint32 + F_iosize uint32 + F_blocks uint64 + F_bfree uint64 + F_bavail int64 + F_files uint64 + F_ffree uint64 + F_favail int64 + F_syncwrites uint64 + F_syncreads uint64 + F_asyncwrites uint64 + F_asyncreads uint64 + F_fsid Fsid + F_namemax uint32 + F_owner uint32 + F_ctime uint64 + F_fstypename [16]uint8 + F_mntonname [90]uint8 + F_mntfromname [90]uint8 + F_mntfromspec [90]uint8 + Pad_cgo_0 [2]byte + Mount_info [160]byte +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Off int64 + Reclen uint16 + Type uint8 + Namlen uint8 + X__d_padding [4]uint8 + Name [256]uint8 +} + +type Fsid struct { + Val [2]int32 +} + +const ( + PathMax = 0x400 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [24]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x20 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [32]uint32 +} + +const ( + SizeofIfMsghdr = 0x98 + SizeofIfData = 0x80 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x1a + SizeofRtMsghdr = 0x60 + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Xflags int32 + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Mtu uint32 + Metric uint32 + Pad uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Capabilities uint32 + Lastchange Timeval +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Metric int32 +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + What uint16 + Name [16]uint8 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Priority uint8 + Mpls uint8 + Addrs int32 + Flags int32 + Fmask int32 + Pid int32 + Seq int32 + Errno int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Pksent uint64 + Expire int64 + Locks uint32 + Mtu uint32 + Refcnt uint32 + Hopcount uint32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pad uint32 +} + +type Mclpool struct{} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type BpfTimeval struct { + Sec uint32 + Usec uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x64 + AT_SYMLINK_NOFOLLOW = 0x2 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} 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 92336f9..2248598 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go @@ -93,40 +93,40 @@ const ( ) type Stat_t struct { - Dev uint64 - Ino uint64 - Mode uint32 - Nlink uint32 - Uid uint32 - Gid uint32 - Rdev uint64 - Size int64 - Atim Timespec - Mtim Timespec - Ctim Timespec - Blksize int32 - Pad_cgo_0 [4]byte - Blocks int64 - Fstype [16]int8 + Dev uint64 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + Size int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Blksize int32 + _ [4]byte + Blocks int64 + Fstype [16]int8 } type Flock_t struct { - Type int16 - Whence int16 - Pad_cgo_0 [4]byte - Start int64 - Len int64 - Sysid int32 - Pid int32 - Pad [4]int64 + Type int16 + Whence int16 + _ [4]byte + Start int64 + Len int64 + Sysid int32 + Pid int32 + Pad [4]int64 } type Dirent struct { - Ino uint64 - Off int64 - Reclen uint16 - Name [1]int8 - Pad_cgo_0 [5]byte + Ino uint64 + Off int64 + Reclen uint16 + Name [1]int8 + _ [5]byte } type _Fsblkcnt_t uint64 @@ -213,13 +213,13 @@ type IPv6Mreq struct { type Msghdr struct { Name *byte Namelen uint32 - Pad_cgo_0 [4]byte + _ [4]byte Iov *Iovec Iovlen int32 - Pad_cgo_1 [4]byte + _ [4]byte Accrights *int8 Accrightslen int32 - Pad_cgo_2 [4]byte + _ [4]byte } type Cmsghdr struct { @@ -263,19 +263,19 @@ type FdSet struct { } type Utsname struct { - Sysname [257]int8 - Nodename [257]int8 - Release [257]int8 - Version [257]int8 - Machine [257]int8 + Sysname [257]byte + Nodename [257]byte + Release [257]byte + Version [257]byte + Machine [257]byte } type Ustat_t struct { - Tfree int64 - Tinode uint64 - Fname [6]int8 - Fpack [6]int8 - Pad_cgo_0 [4]byte + Tfree int64 + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + _ [4]byte } const ( @@ -295,21 +295,21 @@ const ( ) type IfMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Pad_cgo_0 [2]byte - Data IfData + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Data IfData } type IfData struct { Type uint8 Addrlen uint8 Hdrlen uint8 - Pad_cgo_0 [1]byte + _ [1]byte Mtu uint32 Metric uint32 Baudrate uint32 @@ -328,30 +328,30 @@ type IfData struct { } type IfaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Pad_cgo_0 [2]byte - Metric int32 + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Metric int32 } type RtMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - Pad_cgo_0 [2]byte - Flags int32 - Addrs int32 - Pid int32 - Seq int32 - Errno int32 - Use int32 - Inits uint32 - Rmx RtMetrics + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + _ [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint32 + Rmx RtMetrics } type RtMetrics struct { @@ -388,9 +388,9 @@ type BpfStat struct { } type BpfProgram struct { - Len uint32 - Pad_cgo_0 [4]byte - Insns *BpfInsn + Len uint32 + _ [4]byte + Insns *BpfInsn } type BpfInsn struct { @@ -406,32 +406,30 @@ type BpfTimeval struct { } type BpfHdr struct { - Tstamp BpfTimeval - Caplen uint32 - Datalen uint32 - Hdrlen uint16 - Pad_cgo_0 [2]byte + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + _ [2]byte } -const _SC_PAGESIZE = 0xb - type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Cc [19]uint8 - Pad_cgo_0 [1]byte + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [19]uint8 + _ [1]byte } type Termio struct { - Iflag uint16 - Oflag uint16 - Cflag uint16 - Lflag uint16 - Line int8 - Cc [8]uint8 - Pad_cgo_0 [1]byte + Iflag uint16 + Oflag uint16 + Cflag uint16 + Lflag uint16 + Line int8 + Cc [8]uint8 + _ [1]byte } type Winsize struct { @@ -440,3 +438,22 @@ type Winsize struct { Xpixel uint16 Ypixel uint16 } + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) diff --git a/vendor/golang.org/x/sys/windows/dll_windows.go b/vendor/golang.org/x/sys/windows/dll_windows.go index 0f62046..e92c05b 100644 --- a/vendor/golang.org/x/sys/windows/dll_windows.go +++ b/vendor/golang.org/x/sys/windows/dll_windows.go @@ -1,4 +1,4 @@ -// Copyright 2011 The Go Authors. All rights reserved. +// Copyright 2011 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. @@ -116,7 +116,7 @@ func (p *Proc) Addr() uintptr { //go:uintptrescapes -// Call executes procedure p with arguments a. It will panic, if more then 15 arguments +// Call executes procedure p with arguments a. It will panic, if more than 15 arguments // are supplied. // // The returned error is always non-nil, constructed from the result of GetLastError. @@ -160,7 +160,6 @@ func (p *Proc) Call(a ...uintptr) (r1, r2 uintptr, lastErr error) { default: panic("Call " + p.Name + " with too many arguments " + itoa(len(a)) + ".") } - return } // A LazyDLL implements access to a single DLL. @@ -290,6 +289,7 @@ func (p *LazyProc) mustFind() { // Addr returns the address of the procedure represented by p. // The return value can be passed to Syscall to run the procedure. +// It will panic if the procedure cannot be found. func (p *LazyProc) Addr() uintptr { p.mustFind() return p.proc.Addr() @@ -297,8 +297,8 @@ func (p *LazyProc) Addr() uintptr { //go:uintptrescapes -// Call executes procedure p with arguments a. It will panic, if more then 15 arguments -// are supplied. +// Call executes procedure p with arguments a. It will panic, if more than 15 arguments +// are supplied. It will also panic if the procedure cannot be found. // // The returned error is always non-nil, constructed from the result of GetLastError. // Callers must inspect the primary return value to decide whether an error occurred diff --git a/vendor/golang.org/x/sys/windows/env_unset.go b/vendor/golang.org/x/sys/windows/env_unset.go deleted file mode 100644 index 4ed03ae..0000000 --- a/vendor/golang.org/x/sys/windows/env_unset.go +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2014 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 windows -// +build go1.4 - -package windows - -import "syscall" - -func Unsetenv(key string) error { - // This was added in Go 1.4. - return syscall.Unsetenv(key) -} diff --git a/vendor/golang.org/x/sys/windows/env_windows.go b/vendor/golang.org/x/sys/windows/env_windows.go index a9d8ef4..bdc71e2 100644 --- a/vendor/golang.org/x/sys/windows/env_windows.go +++ b/vendor/golang.org/x/sys/windows/env_windows.go @@ -1,4 +1,4 @@ -// Copyright 2010 The Go Authors. All rights reserved. +// Copyright 2010 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. @@ -23,3 +23,7 @@ func Clearenv() { func Environ() []string { return syscall.Environ() } + +func Unsetenv(key string) error { + return syscall.Unsetenv(key) +} diff --git a/vendor/golang.org/x/sys/windows/memory_windows.go b/vendor/golang.org/x/sys/windows/memory_windows.go new file mode 100644 index 0000000..f80a420 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/memory_windows.go @@ -0,0 +1,26 @@ +// Copyright 2017 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. + +package windows + +const ( + MEM_COMMIT = 0x00001000 + MEM_RESERVE = 0x00002000 + MEM_DECOMMIT = 0x00004000 + MEM_RELEASE = 0x00008000 + MEM_RESET = 0x00080000 + MEM_TOP_DOWN = 0x00100000 + MEM_WRITE_WATCH = 0x00200000 + MEM_PHYSICAL = 0x00400000 + MEM_RESET_UNDO = 0x01000000 + MEM_LARGE_PAGES = 0x20000000 + + PAGE_NOACCESS = 0x01 + PAGE_READONLY = 0x02 + PAGE_READWRITE = 0x04 + PAGE_WRITECOPY = 0x08 + PAGE_EXECUTE_READ = 0x20 + PAGE_EXECUTE_READWRITE = 0x40 + PAGE_EXECUTE_WRITECOPY = 0x80 +) diff --git a/vendor/golang.org/x/sys/windows/mksyscall.go b/vendor/golang.org/x/sys/windows/mksyscall.go index e1c88c9..fb7db0e 100644 --- a/vendor/golang.org/x/sys/windows/mksyscall.go +++ b/vendor/golang.org/x/sys/windows/mksyscall.go @@ -1,4 +1,4 @@ -// Copyright 2009 The Go Authors. All rights reserved. +// Copyright 2009 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. diff --git a/vendor/golang.org/x/sys/windows/race.go b/vendor/golang.org/x/sys/windows/race.go index 343e18a..a74e3e2 100644 --- a/vendor/golang.org/x/sys/windows/race.go +++ b/vendor/golang.org/x/sys/windows/race.go @@ -1,4 +1,4 @@ -// Copyright 2012 The Go Authors. All rights reserved. +// Copyright 2012 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. diff --git a/vendor/golang.org/x/sys/windows/race0.go b/vendor/golang.org/x/sys/windows/race0.go index 17af843..e44a3cb 100644 --- a/vendor/golang.org/x/sys/windows/race0.go +++ b/vendor/golang.org/x/sys/windows/race0.go @@ -1,4 +1,4 @@ -// Copyright 2012 The Go Authors. All rights reserved. +// Copyright 2012 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. diff --git a/vendor/golang.org/x/sys/windows/registry/key.go b/vendor/golang.org/x/sys/windows/registry/key.go index d0beb19..c256483 100644 --- a/vendor/golang.org/x/sys/windows/registry/key.go +++ b/vendor/golang.org/x/sys/windows/registry/key.go @@ -113,12 +113,10 @@ func OpenRemoteKey(pcname string, k Key) (Key, error) { // The parameter n controls the number of returned names, // analogous to the way os.File.Readdirnames works. func (k Key) ReadSubKeyNames(n int) ([]string, error) { - ki, err := k.Stat() - if err != nil { - return nil, err - } - names := make([]string, 0, ki.SubKeyCount) - buf := make([]uint16, ki.MaxSubKeyLen+1) // extra room for terminating zero byte + names := make([]string, 0) + // Registry key size limit is 255 bytes and described there: + // https://msdn.microsoft.com/library/windows/desktop/ms724872.aspx + buf := make([]uint16, 256) //plus extra room for terminating zero byte loopItems: for i := uint32(0); ; i++ { if n > 0 { diff --git a/vendor/golang.org/x/sys/windows/registry/registry_test.go b/vendor/golang.org/x/sys/windows/registry/registry_test.go index 9c1b782..2f4dd69 100644 --- a/vendor/golang.org/x/sys/windows/registry/registry_test.go +++ b/vendor/golang.org/x/sys/windows/registry/registry_test.go @@ -29,7 +29,7 @@ func randKeyName(prefix string) string { } func TestReadSubKeyNames(t *testing.T) { - k, err := registry.OpenKey(registry.CLASSES_ROOT, "TypeLib", registry.ENUMERATE_SUB_KEYS|registry.QUERY_VALUE) + k, err := registry.OpenKey(registry.CLASSES_ROOT, "TypeLib", registry.ENUMERATE_SUB_KEYS) if err != nil { t.Fatal(err) } @@ -336,7 +336,7 @@ func testGetValue(t *testing.T, k registry.Key, test ValueTest, size int) { // read data with short buffer gotsize, gottype, err = k.GetValue(test.Name, make([]byte, size-1)) if err == nil { - t.Errorf("GetValue(%s, [%d]byte) should fail, but suceeded", test.Name, size-1) + t.Errorf("GetValue(%s, [%d]byte) should fail, but succeeded", test.Name, size-1) return } if err != registry.ErrShortBuffer { diff --git a/vendor/golang.org/x/sys/windows/security_windows.go b/vendor/golang.org/x/sys/windows/security_windows.go index ca09bdd..f1ec5dc 100644 --- a/vendor/golang.org/x/sys/windows/security_windows.go +++ b/vendor/golang.org/x/sys/windows/security_windows.go @@ -1,4 +1,4 @@ -// Copyright 2012 The Go Authors. All rights reserved. +// Copyright 2012 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. @@ -132,6 +132,36 @@ const ( SECURITY_NT_NON_UNIQUE_RID = 0x15 ) +// Predefined domain-relative RIDs for local groups. +// See https://msdn.microsoft.com/en-us/library/windows/desktop/aa379649(v=vs.85).aspx +const ( + DOMAIN_ALIAS_RID_ADMINS = 0x220 + DOMAIN_ALIAS_RID_USERS = 0x221 + DOMAIN_ALIAS_RID_GUESTS = 0x222 + DOMAIN_ALIAS_RID_POWER_USERS = 0x223 + DOMAIN_ALIAS_RID_ACCOUNT_OPS = 0x224 + DOMAIN_ALIAS_RID_SYSTEM_OPS = 0x225 + DOMAIN_ALIAS_RID_PRINT_OPS = 0x226 + DOMAIN_ALIAS_RID_BACKUP_OPS = 0x227 + DOMAIN_ALIAS_RID_REPLICATOR = 0x228 + DOMAIN_ALIAS_RID_RAS_SERVERS = 0x229 + DOMAIN_ALIAS_RID_PREW2KCOMPACCESS = 0x22a + DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS = 0x22b + DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS = 0x22c + DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS = 0x22d + DOMAIN_ALIAS_RID_MONITORING_USERS = 0X22e + DOMAIN_ALIAS_RID_LOGGING_USERS = 0x22f + DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS = 0x230 + DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS = 0x231 + DOMAIN_ALIAS_RID_DCOM_USERS = 0x232 + DOMAIN_ALIAS_RID_IUSERS = 0x238 + DOMAIN_ALIAS_RID_CRYPTO_OPERATORS = 0x239 + DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP = 0x23b + DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP = 0x23c + DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP = 0x23d + DOMAIN_ALIAS_RID_CERTSVC_DCOM_ACCESS_GROUP = 0x23e +) + //sys LookupAccountSid(systemName *uint16, sid *SID, name *uint16, nameLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *uint32) (err error) = advapi32.LookupAccountSidW //sys LookupAccountName(systemName *uint16, accountName *uint16, sid *SID, sidLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *uint32) (err error) = advapi32.LookupAccountNameW //sys ConvertSidToStringSid(sid *SID, stringSid **uint16) (err error) = advapi32.ConvertSidToStringSidW @@ -335,6 +365,8 @@ type Tokengroups struct { Groups [1]SIDAndAttributes } +// Authorization Functions +//sys checkTokenMembership(tokenHandle Token, sidToCheck *SID, isMember *int32) (err error) = advapi32.CheckTokenMembership //sys OpenProcessToken(h Handle, access uint32, token *Token) (err error) = advapi32.OpenProcessToken //sys GetTokenInformation(t Token, infoClass uint32, info *byte, infoLen uint32, returnedLen *uint32) (err error) = advapi32.GetTokenInformation //sys GetUserProfileDirectory(t Token, dir *uint16, dirLen *uint32) (err error) = userenv.GetUserProfileDirectoryW @@ -433,3 +465,12 @@ func (t Token) GetUserProfileDirectory() (string, error) { } } } + +// IsMember reports whether the access token t is a member of the provided SID. +func (t Token) IsMember(sid *SID) (bool, error) { + var b int32 + if e := checkTokenMembership(t, sid, &b); e != nil { + return false, e + } + return b != 0, nil +} diff --git a/vendor/golang.org/x/sys/windows/service.go b/vendor/golang.org/x/sys/windows/service.go index 1c11d39..a500dd7 100644 --- a/vendor/golang.org/x/sys/windows/service.go +++ b/vendor/golang.org/x/sys/windows/service.go @@ -95,6 +95,8 @@ const ( SERVICE_CONFIG_FAILURE_ACTIONS = 2 NO_ERROR = 0 + + SC_ENUM_PROCESS_INFO = 0 ) type SERVICE_STATUS struct { @@ -128,6 +130,24 @@ type SERVICE_DESCRIPTION struct { Description *uint16 } +type SERVICE_STATUS_PROCESS struct { + ServiceType uint32 + CurrentState uint32 + ControlsAccepted uint32 + Win32ExitCode uint32 + ServiceSpecificExitCode uint32 + CheckPoint uint32 + WaitHint uint32 + ProcessId uint32 + ServiceFlags uint32 +} + +type ENUM_SERVICE_STATUS_PROCESS struct { + ServiceName *uint16 + DisplayName *uint16 + ServiceStatusProcess SERVICE_STATUS_PROCESS +} + //sys CloseServiceHandle(handle Handle) (err error) = advapi32.CloseServiceHandle //sys CreateService(mgr Handle, serviceName *uint16, displayName *uint16, access uint32, srvType uint32, startType uint32, errCtl uint32, pathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16) (handle Handle, err error) [failretval==0] = advapi32.CreateServiceW //sys OpenService(mgr Handle, serviceName *uint16, access uint32) (handle Handle, err error) [failretval==0] = advapi32.OpenServiceW @@ -141,3 +161,4 @@ type SERVICE_DESCRIPTION struct { //sys QueryServiceConfig(service Handle, serviceConfig *QUERY_SERVICE_CONFIG, bufSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceConfigW //sys ChangeServiceConfig2(service Handle, infoLevel uint32, info *byte) (err error) = advapi32.ChangeServiceConfig2W //sys QueryServiceConfig2(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceConfig2W +//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 diff --git a/vendor/golang.org/x/sys/windows/svc/eventlog/log_test.go b/vendor/golang.org/x/sys/windows/svc/eventlog/log_test.go index 4dd8ad9..6fbbd4a 100644 --- a/vendor/golang.org/x/sys/windows/svc/eventlog/log_test.go +++ b/vendor/golang.org/x/sys/windows/svc/eventlog/log_test.go @@ -1,4 +1,4 @@ -// Copyright 2012 The Go Authors. All rights reserved. +// Copyright 2012 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. diff --git a/vendor/golang.org/x/sys/windows/svc/go12.go b/vendor/golang.org/x/sys/windows/svc/go12.go index 6f0a924..cd8b913 100644 --- a/vendor/golang.org/x/sys/windows/svc/go12.go +++ b/vendor/golang.org/x/sys/windows/svc/go12.go @@ -1,4 +1,4 @@ -// Copyright 2014 The Go Authors. All rights reserved. +// Copyright 2014 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. diff --git a/vendor/golang.org/x/sys/windows/svc/go13.go b/vendor/golang.org/x/sys/windows/svc/go13.go index 432a9e7..9d7f3ce 100644 --- a/vendor/golang.org/x/sys/windows/svc/go13.go +++ b/vendor/golang.org/x/sys/windows/svc/go13.go @@ -1,4 +1,4 @@ -// Copyright 2014 The Go Authors. All rights reserved. +// Copyright 2014 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. diff --git a/vendor/golang.org/x/sys/windows/svc/mgr/mgr.go b/vendor/golang.org/x/sys/windows/svc/mgr/mgr.go index e20a1fa..76965b5 100644 --- a/vendor/golang.org/x/sys/windows/svc/mgr/mgr.go +++ b/vendor/golang.org/x/sys/windows/svc/mgr/mgr.go @@ -14,6 +14,7 @@ package mgr import ( "syscall" "unicode/utf16" + "unsafe" "golang.org/x/sys/windows" ) @@ -119,3 +120,43 @@ func (m *Mgr) OpenService(name string) (*Service, error) { } return &Service{Name: name, Handle: h}, nil } + +// ListServices enumerates services in the specified +// service control manager database m. +// If the caller does not have the SERVICE_QUERY_STATUS +// access right to a service, the service is silently +// omitted from the list of services returned. +func (m *Mgr) ListServices() ([]string, error) { + var err error + var bytesNeeded, servicesReturned uint32 + var buf []byte + for { + var p *byte + if len(buf) > 0 { + p = &buf[0] + } + err = windows.EnumServicesStatusEx(m.Handle, windows.SC_ENUM_PROCESS_INFO, + windows.SERVICE_WIN32, windows.SERVICE_STATE_ALL, + p, uint32(len(buf)), &bytesNeeded, &servicesReturned, nil, nil) + if err == nil { + break + } + if err != syscall.ERROR_MORE_DATA { + return nil, err + } + if bytesNeeded <= uint32(len(buf)) { + return nil, err + } + buf = make([]byte, bytesNeeded) + } + if servicesReturned == 0 { + return nil, nil + } + services := (*[1 << 20]windows.ENUM_SERVICE_STATUS_PROCESS)(unsafe.Pointer(&buf[0]))[:servicesReturned] + var names []string + for _, s := range services { + name := syscall.UTF16ToString((*[1 << 20]uint16)(unsafe.Pointer(s.ServiceName))[:]) + names = append(names, name) + } + return names, nil +} diff --git a/vendor/golang.org/x/sys/windows/svc/mgr/mgr_test.go b/vendor/golang.org/x/sys/windows/svc/mgr/mgr_test.go index 78be970..1569a22 100644 --- a/vendor/golang.org/x/sys/windows/svc/mgr/mgr_test.go +++ b/vendor/golang.org/x/sys/windows/svc/mgr/mgr_test.go @@ -1,4 +1,4 @@ -// Copyright 2012 The Go Authors. All rights reserved. +// Copyright 2012 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. @@ -150,5 +150,20 @@ func TestMyService(t *testing.T) { testConfig(t, s, c) + svcnames, err := m.ListServices() + if err != nil { + t.Fatalf("ListServices failed: %v", err) + } + var myserviceIsInstalled bool + for _, sn := range svcnames { + if sn == name { + myserviceIsInstalled = true + break + } + } + if !myserviceIsInstalled { + t.Errorf("ListServices failed to find %q service", name) + } + remove(t, s) } diff --git a/vendor/golang.org/x/sys/windows/svc/mgr/service.go b/vendor/golang.org/x/sys/windows/svc/mgr/service.go index ac9fba5..fdc46af 100644 --- a/vendor/golang.org/x/sys/windows/svc/mgr/service.go +++ b/vendor/golang.org/x/sys/windows/svc/mgr/service.go @@ -15,8 +15,6 @@ import ( // TODO(brainman): Use EnumDependentServices to enumerate dependent services. -// TODO(brainman): Use EnumServicesStatus to enumerate services in the specified service control manager database. - // Service is used to access Windows service. type Service struct { Name string diff --git a/vendor/golang.org/x/sys/windows/svc/service.go b/vendor/golang.org/x/sys/windows/svc/service.go index 1ea4a88..903cba3 100644 --- a/vendor/golang.org/x/sys/windows/svc/service.go +++ b/vendor/golang.org/x/sys/windows/svc/service.go @@ -56,9 +56,14 @@ const ( type Accepted uint32 const ( - AcceptStop = Accepted(windows.SERVICE_ACCEPT_STOP) - AcceptShutdown = Accepted(windows.SERVICE_ACCEPT_SHUTDOWN) - AcceptPauseAndContinue = Accepted(windows.SERVICE_ACCEPT_PAUSE_CONTINUE) + AcceptStop = Accepted(windows.SERVICE_ACCEPT_STOP) + AcceptShutdown = Accepted(windows.SERVICE_ACCEPT_SHUTDOWN) + AcceptPauseAndContinue = Accepted(windows.SERVICE_ACCEPT_PAUSE_CONTINUE) + AcceptParamChange = Accepted(windows.SERVICE_ACCEPT_PARAMCHANGE) + AcceptNetBindChange = Accepted(windows.SERVICE_ACCEPT_NETBINDCHANGE) + AcceptHardwareProfileChange = Accepted(windows.SERVICE_ACCEPT_HARDWAREPROFILECHANGE) + AcceptPowerEvent = Accepted(windows.SERVICE_ACCEPT_POWEREVENT) + AcceptSessionChange = Accepted(windows.SERVICE_ACCEPT_SESSIONCHANGE) ) // Status combines State and Accepted commands to fully describe running service. @@ -180,6 +185,21 @@ func (s *service) updateStatus(status *Status, ec *exitCode) error { if status.Accepts&AcceptPauseAndContinue != 0 { t.ControlsAccepted |= windows.SERVICE_ACCEPT_PAUSE_CONTINUE } + if status.Accepts&AcceptParamChange != 0 { + t.ControlsAccepted |= windows.SERVICE_ACCEPT_PARAMCHANGE + } + if status.Accepts&AcceptNetBindChange != 0 { + t.ControlsAccepted |= windows.SERVICE_ACCEPT_NETBINDCHANGE + } + if status.Accepts&AcceptHardwareProfileChange != 0 { + t.ControlsAccepted |= windows.SERVICE_ACCEPT_HARDWAREPROFILECHANGE + } + if status.Accepts&AcceptPowerEvent != 0 { + t.ControlsAccepted |= windows.SERVICE_ACCEPT_POWEREVENT + } + if status.Accepts&AcceptSessionChange != 0 { + t.ControlsAccepted |= windows.SERVICE_ACCEPT_SESSIONCHANGE + } if ec.errno == 0 { t.Win32ExitCode = windows.NO_ERROR t.ServiceSpecificExitCode = windows.NO_ERROR diff --git a/vendor/golang.org/x/sys/windows/svc/svc_test.go b/vendor/golang.org/x/sys/windows/svc/svc_test.go index 764da54..da7ec66 100644 --- a/vendor/golang.org/x/sys/windows/svc/svc_test.go +++ b/vendor/golang.org/x/sys/windows/svc/svc_test.go @@ -1,4 +1,4 @@ -// Copyright 2012 The Go Authors. All rights reserved. +// Copyright 2012 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. diff --git a/vendor/golang.org/x/sys/windows/syscall.go b/vendor/golang.org/x/sys/windows/syscall.go index 4e2fbe8..af828a9 100644 --- a/vendor/golang.org/x/sys/windows/syscall.go +++ b/vendor/golang.org/x/sys/windows/syscall.go @@ -5,17 +5,20 @@ // +build windows // Package windows contains an interface to the low-level operating system -// primitives. OS details vary depending on the underlying system, and +// primitives. OS details vary depending on the underlying system, and // by default, godoc will display the OS-specific documentation for the current -// system. If you want godoc to display syscall documentation for another -// system, set $GOOS and $GOARCH to the desired system. For example, if +// system. If you want godoc to display syscall documentation for another +// system, set $GOOS and $GOARCH to the desired system. For example, if // you want to view documentation for freebsd/arm on linux/amd64, set $GOOS // to freebsd and $GOARCH to arm. +// // The primary use of this package is inside other packages that provide a more // portable interface to the system, such as "os", "time" and "net". Use // those packages rather than this one if you can. +// // For details of the functions and data types in this package consult // the manuals for the appropriate operating system. +// // These calls return err == nil to indicate success; otherwise // err represents an operating system error describing the failure and // holds a value of type syscall.Errno. diff --git a/vendor/golang.org/x/sys/windows/syscall_test.go b/vendor/golang.org/x/sys/windows/syscall_test.go index 62588b9..d7009e4 100644 --- a/vendor/golang.org/x/sys/windows/syscall_test.go +++ b/vendor/golang.org/x/sys/windows/syscall_test.go @@ -7,6 +7,7 @@ package windows_test import ( + "syscall" "testing" "golang.org/x/sys/windows" @@ -31,3 +32,22 @@ func TestEnv(t *testing.T) { // make sure TESTENV gets set to "", not deleted testSetGetenv(t, "TESTENV", "") } + +func TestGetProcAddressByOrdinal(t *testing.T) { + // Attempt calling shlwapi.dll:IsOS, resolving it by ordinal, as + // suggested in + // https://msdn.microsoft.com/en-us/library/windows/desktop/bb773795.aspx + h, err := windows.LoadLibrary("shlwapi.dll") + if err != nil { + t.Fatalf("Failed to load shlwapi.dll: %s", err) + } + procIsOS, err := windows.GetProcAddressByOrdinal(h, 437) + if err != nil { + t.Fatalf("Could not find shlwapi.dll:IsOS by ordinal: %s", err) + } + const OS_NT = 1 + r, _, _ := syscall.Syscall(procIsOS, 1, OS_NT, 0, 0) + if r == 0 { + t.Error("shlwapi.dll:IsOS(OS_NT) returned 0, expected non-zero value") + } +} diff --git a/vendor/golang.org/x/sys/windows/syscall_windows.go b/vendor/golang.org/x/sys/windows/syscall_windows.go index e439c48..1e9f4bb 100644 --- a/vendor/golang.org/x/sys/windows/syscall_windows.go +++ b/vendor/golang.org/x/sys/windows/syscall_windows.go @@ -1,4 +1,4 @@ -// Copyright 2009 The Go Authors. All rights reserved. +// Copyright 2009 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. @@ -16,7 +16,46 @@ import ( type Handle uintptr -const InvalidHandle = ^Handle(0) +const ( + InvalidHandle = ^Handle(0) + + // Flags for DefineDosDevice. + DDD_EXACT_MATCH_ON_REMOVE = 0x00000004 + DDD_NO_BROADCAST_SYSTEM = 0x00000008 + DDD_RAW_TARGET_PATH = 0x00000001 + DDD_REMOVE_DEFINITION = 0x00000002 + + // Return values for GetDriveType. + DRIVE_UNKNOWN = 0 + DRIVE_NO_ROOT_DIR = 1 + DRIVE_REMOVABLE = 2 + DRIVE_FIXED = 3 + DRIVE_REMOTE = 4 + DRIVE_CDROM = 5 + DRIVE_RAMDISK = 6 + + // File system flags from GetVolumeInformation and GetVolumeInformationByHandle. + FILE_CASE_SENSITIVE_SEARCH = 0x00000001 + FILE_CASE_PRESERVED_NAMES = 0x00000002 + FILE_FILE_COMPRESSION = 0x00000010 + FILE_DAX_VOLUME = 0x20000000 + FILE_NAMED_STREAMS = 0x00040000 + FILE_PERSISTENT_ACLS = 0x00000008 + FILE_READ_ONLY_VOLUME = 0x00080000 + FILE_SEQUENTIAL_WRITE_ONCE = 0x00100000 + FILE_SUPPORTS_ENCRYPTION = 0x00020000 + FILE_SUPPORTS_EXTENDED_ATTRIBUTES = 0x00800000 + FILE_SUPPORTS_HARD_LINKS = 0x00400000 + FILE_SUPPORTS_OBJECT_IDS = 0x00010000 + FILE_SUPPORTS_OPEN_BY_FILE_ID = 0x01000000 + FILE_SUPPORTS_REPARSE_POINTS = 0x00000080 + FILE_SUPPORTS_SPARSE_FILES = 0x00000040 + FILE_SUPPORTS_TRANSACTIONS = 0x00200000 + FILE_SUPPORTS_USN_JOURNAL = 0x02000000 + FILE_UNICODE_ON_DISK = 0x00000004 + FILE_VOLUME_IS_COMPRESSED = 0x00008000 + FILE_VOLUME_QUOTAS = 0x00000020 +) // StringToUTF16 is deprecated. Use UTF16FromString instead. // If s contains a NUL byte this function panics instead of @@ -71,12 +110,17 @@ func UTF16PtrFromString(s string) (*uint16, error) { func Getpagesize() int { return 4096 } -// Converts a Go function to a function pointer conforming -// to the stdcall or cdecl calling convention. This is useful when -// interoperating with Windows code requiring callbacks. -// Implemented in runtime/syscall_windows.goc -func NewCallback(fn interface{}) uintptr -func NewCallbackCDecl(fn interface{}) uintptr +// NewCallback converts a Go function to a function pointer conforming to the stdcall calling convention. +// This is useful when interoperating with Windows code requiring callbacks. +func NewCallback(fn interface{}) uintptr { + return syscall.NewCallback(fn) +} + +// NewCallbackCDecl converts a Go function to a function pointer conforming to the cdecl calling convention. +// This is useful when interoperating with Windows code requiring callbacks. +func NewCallbackCDecl(fn interface{}) uintptr { + return syscall.NewCallbackCDecl(fn) +} // windows api calls @@ -154,6 +198,9 @@ func NewCallbackCDecl(fn interface{}) uintptr //sys FlushViewOfFile(addr uintptr, length uintptr) (err error) //sys VirtualLock(addr uintptr, length uintptr) (err error) //sys VirtualUnlock(addr uintptr, length uintptr) (err error) +//sys VirtualAlloc(address uintptr, size uintptr, alloctype uint32, protect uint32) (value uintptr, err error) = kernel32.VirtualAlloc +//sys VirtualFree(address uintptr, size uintptr, freetype uint32) (err error) = kernel32.VirtualFree +//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 CertOpenSystemStore(hprov Handle, name *uint16) (store Handle, err error) = crypt32.CertOpenSystemStoreW @@ -173,6 +220,8 @@ func NewCallbackCDecl(fn interface{}) uintptr //sys RegQueryValueEx(key Handle, name *uint16, reserved *uint32, valtype *uint32, buf *byte, buflen *uint32) (regerrno error) = advapi32.RegQueryValueExW //sys getCurrentProcessId() (pid uint32) = kernel32.GetCurrentProcessId //sys GetConsoleMode(console Handle, mode *uint32) (err error) = kernel32.GetConsoleMode +//sys SetConsoleMode(console Handle, mode uint32) (err error) = kernel32.SetConsoleMode +//sys GetConsoleScreenBufferInfo(console Handle, info *ConsoleScreenBufferInfo) (err error) = kernel32.GetConsoleScreenBufferInfo //sys WriteConsole(console Handle, buf *uint16, towrite uint32, written *uint32, reserved *byte) (err error) = kernel32.WriteConsoleW //sys ReadConsole(console Handle, buf *uint16, toread uint32, read *uint32, inputControl *byte) (err error) = kernel32.ReadConsoleW //sys CreateToolhelp32Snapshot(flags uint32, processId uint32) (handle Handle, err error) [failretval==InvalidHandle] = kernel32.CreateToolhelp32Snapshot @@ -183,11 +232,51 @@ func NewCallbackCDecl(fn interface{}) uintptr //sys CreateSymbolicLink(symlinkfilename *uint16, targetfilename *uint16, flags uint32) (err error) [failretval&0xff==0] = CreateSymbolicLinkW //sys CreateHardLink(filename *uint16, existingfilename *uint16, reserved uintptr) (err error) [failretval&0xff==0] = CreateHardLinkW //sys GetCurrentThreadId() (id uint32) -//sys CreateEvent(eventAttrs *syscall.SecurityAttributes, manualReset uint32, initialState uint32, name *uint16) (handle Handle, err error) = kernel32.CreateEventW +//sys CreateEvent(eventAttrs *SecurityAttributes, manualReset uint32, initialState uint32, name *uint16) (handle Handle, err error) = kernel32.CreateEventW +//sys CreateEventEx(eventAttrs *SecurityAttributes, name *uint16, flags uint32, desiredAccess uint32) (handle Handle, err error) = kernel32.CreateEventExW +//sys OpenEvent(desiredAccess uint32, inheritHandle bool, name *uint16) (handle Handle, err error) = kernel32.OpenEventW //sys SetEvent(event Handle) (err error) = kernel32.SetEvent +//sys ResetEvent(event Handle) (err error) = kernel32.ResetEvent +//sys PulseEvent(event Handle) (err error) = kernel32.PulseEvent + +// Volume Management Functions +//sys DefineDosDevice(flags uint32, deviceName *uint16, targetPath *uint16) (err error) = DefineDosDeviceW +//sys DeleteVolumeMountPoint(volumeMountPoint *uint16) (err error) = DeleteVolumeMountPointW +//sys FindFirstVolume(volumeName *uint16, bufferLength uint32) (handle Handle, err error) [failretval==InvalidHandle] = FindFirstVolumeW +//sys FindFirstVolumeMountPoint(rootPathName *uint16, volumeMountPoint *uint16, bufferLength uint32) (handle Handle, err error) [failretval==InvalidHandle] = FindFirstVolumeMountPointW +//sys FindNextVolume(findVolume Handle, volumeName *uint16, bufferLength uint32) (err error) = FindNextVolumeW +//sys FindNextVolumeMountPoint(findVolumeMountPoint Handle, volumeMountPoint *uint16, bufferLength uint32) (err error) = FindNextVolumeMountPointW +//sys FindVolumeClose(findVolume Handle) (err error) +//sys FindVolumeMountPointClose(findVolumeMountPoint Handle) (err error) +//sys GetDriveType(rootPathName *uint16) (driveType uint32) = GetDriveTypeW +//sys GetLogicalDrives() (drivesBitMask uint32, err error) [failretval==0] +//sys GetLogicalDriveStrings(bufferLength uint32, buffer *uint16) (n uint32, err error) [failretval==0] = GetLogicalDriveStringsW +//sys GetVolumeInformation(rootPathName *uint16, volumeNameBuffer *uint16, volumeNameSize uint32, volumeNameSerialNumber *uint32, maximumComponentLength *uint32, fileSystemFlags *uint32, fileSystemNameBuffer *uint16, fileSystemNameSize uint32) (err error) = GetVolumeInformationW +//sys GetVolumeInformationByHandle(file Handle, volumeNameBuffer *uint16, volumeNameSize uint32, volumeNameSerialNumber *uint32, maximumComponentLength *uint32, fileSystemFlags *uint32, fileSystemNameBuffer *uint16, fileSystemNameSize uint32) (err error) = GetVolumeInformationByHandleW +//sys GetVolumeNameForVolumeMountPoint(volumeMountPoint *uint16, volumeName *uint16, bufferlength uint32) (err error) = GetVolumeNameForVolumeMountPointW +//sys GetVolumePathName(fileName *uint16, volumePathName *uint16, bufferLength uint32) (err error) = GetVolumePathNameW +//sys GetVolumePathNamesForVolumeName(volumeName *uint16, volumePathNames *uint16, bufferLength uint32, returnLength *uint32) (err error) = GetVolumePathNamesForVolumeNameW +//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 // syscall interface implementation for other packages +// GetProcAddressByOrdinal retrieves the address of the exported +// function from module by ordinal. +func GetProcAddressByOrdinal(module Handle, ordinal uintptr) (proc uintptr, err error) { + r0, _, e1 := syscall.Syscall(procGetProcAddress.Addr(), 2, uintptr(module), ordinal, 0) + proc = uintptr(r0) + if proc == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + func Exit(code int) { ExitProcess(uint32(code)) } func makeInheritSa() *SecurityAttributes { @@ -767,6 +856,75 @@ func ConnectEx(fd Handle, sa Sockaddr, sendBuf *byte, sendDataLen uint32, bytesS return connectEx(fd, ptr, n, sendBuf, sendDataLen, bytesSent, overlapped) } +var sendRecvMsgFunc struct { + once sync.Once + sendAddr uintptr + recvAddr uintptr + err error +} + +func loadWSASendRecvMsg() error { + sendRecvMsgFunc.once.Do(func() { + var s Handle + s, sendRecvMsgFunc.err = Socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP) + if sendRecvMsgFunc.err != nil { + return + } + defer CloseHandle(s) + var n uint32 + sendRecvMsgFunc.err = WSAIoctl(s, + SIO_GET_EXTENSION_FUNCTION_POINTER, + (*byte)(unsafe.Pointer(&WSAID_WSARECVMSG)), + uint32(unsafe.Sizeof(WSAID_WSARECVMSG)), + (*byte)(unsafe.Pointer(&sendRecvMsgFunc.recvAddr)), + uint32(unsafe.Sizeof(sendRecvMsgFunc.recvAddr)), + &n, nil, 0) + if sendRecvMsgFunc.err != nil { + return + } + sendRecvMsgFunc.err = WSAIoctl(s, + SIO_GET_EXTENSION_FUNCTION_POINTER, + (*byte)(unsafe.Pointer(&WSAID_WSASENDMSG)), + uint32(unsafe.Sizeof(WSAID_WSASENDMSG)), + (*byte)(unsafe.Pointer(&sendRecvMsgFunc.sendAddr)), + uint32(unsafe.Sizeof(sendRecvMsgFunc.sendAddr)), + &n, nil, 0) + }) + return sendRecvMsgFunc.err +} + +func WSASendMsg(fd Handle, msg *WSAMsg, flags uint32, bytesSent *uint32, overlapped *Overlapped, croutine *byte) error { + err := loadWSASendRecvMsg() + if err != nil { + return err + } + r1, _, e1 := syscall.Syscall6(sendRecvMsgFunc.sendAddr, 6, uintptr(fd), uintptr(unsafe.Pointer(msg)), uintptr(flags), uintptr(unsafe.Pointer(bytesSent)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine))) + if r1 == socket_error { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return err +} + +func WSARecvMsg(fd Handle, msg *WSAMsg, bytesReceived *uint32, overlapped *Overlapped, croutine *byte) error { + err := loadWSASendRecvMsg() + if err != nil { + return err + } + r1, _, e1 := syscall.Syscall6(sendRecvMsgFunc.recvAddr, 5, uintptr(fd), uintptr(unsafe.Pointer(msg)), uintptr(unsafe.Pointer(bytesReceived)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)), 0) + if r1 == socket_error { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return err +} + // Invented structures to support what package os expects. type Rusage struct { CreationTime Filetime diff --git a/vendor/golang.org/x/sys/windows/syscall_windows_test.go b/vendor/golang.org/x/sys/windows/syscall_windows_test.go index 0f73c11..9c7133c 100644 --- a/vendor/golang.org/x/sys/windows/syscall_windows_test.go +++ b/vendor/golang.org/x/sys/windows/syscall_windows_test.go @@ -81,7 +81,7 @@ func TestFormatMessage(t *testing.T) { buf := make([]uint16, 300) _, err = windows.FormatMessage(flags, uintptr(dll.Handle), uint32(errno), 0, buf, nil) if err != nil { - t.Fatal("FormatMessage for handle=%x and errno=%x failed: %v", dll.Handle, errno, err) + t.Fatalf("FormatMessage for handle=%x and errno=%x failed: %v", dll.Handle, errno, err) } } diff --git a/vendor/golang.org/x/sys/windows/types_windows.go b/vendor/golang.org/x/sys/windows/types_windows.go new file mode 100644 index 0000000..52c2037 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/types_windows.go @@ -0,0 +1,1333 @@ +// Copyright 2011 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. + +package windows + +import "syscall" + +const ( + // Windows errors. + ERROR_FILE_NOT_FOUND syscall.Errno = 2 + ERROR_PATH_NOT_FOUND syscall.Errno = 3 + ERROR_ACCESS_DENIED syscall.Errno = 5 + ERROR_NO_MORE_FILES syscall.Errno = 18 + ERROR_HANDLE_EOF syscall.Errno = 38 + ERROR_NETNAME_DELETED syscall.Errno = 64 + ERROR_FILE_EXISTS syscall.Errno = 80 + ERROR_BROKEN_PIPE syscall.Errno = 109 + ERROR_BUFFER_OVERFLOW syscall.Errno = 111 + ERROR_INSUFFICIENT_BUFFER syscall.Errno = 122 + ERROR_MOD_NOT_FOUND syscall.Errno = 126 + ERROR_PROC_NOT_FOUND syscall.Errno = 127 + ERROR_ALREADY_EXISTS syscall.Errno = 183 + ERROR_ENVVAR_NOT_FOUND syscall.Errno = 203 + ERROR_MORE_DATA syscall.Errno = 234 + ERROR_OPERATION_ABORTED syscall.Errno = 995 + ERROR_IO_PENDING syscall.Errno = 997 + ERROR_SERVICE_SPECIFIC_ERROR syscall.Errno = 1066 + ERROR_NOT_FOUND syscall.Errno = 1168 + ERROR_PRIVILEGE_NOT_HELD syscall.Errno = 1314 + WSAEACCES syscall.Errno = 10013 + WSAEMSGSIZE syscall.Errno = 10040 + WSAECONNRESET syscall.Errno = 10054 +) + +const ( + // Invented values to support what package os expects. + O_RDONLY = 0x00000 + O_WRONLY = 0x00001 + O_RDWR = 0x00002 + O_CREAT = 0x00040 + O_EXCL = 0x00080 + O_NOCTTY = 0x00100 + O_TRUNC = 0x00200 + O_NONBLOCK = 0x00800 + O_APPEND = 0x00400 + O_SYNC = 0x01000 + O_ASYNC = 0x02000 + O_CLOEXEC = 0x80000 +) + +const ( + // More invented values for signals + SIGHUP = Signal(0x1) + SIGINT = Signal(0x2) + SIGQUIT = Signal(0x3) + SIGILL = Signal(0x4) + SIGTRAP = Signal(0x5) + SIGABRT = Signal(0x6) + SIGBUS = Signal(0x7) + SIGFPE = Signal(0x8) + SIGKILL = Signal(0x9) + SIGSEGV = Signal(0xb) + SIGPIPE = Signal(0xd) + SIGALRM = Signal(0xe) + SIGTERM = Signal(0xf) +) + +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "bus error", + 8: "floating point exception", + 9: "killed", + 10: "user defined signal 1", + 11: "segmentation fault", + 12: "user defined signal 2", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", +} + +const ( + GENERIC_READ = 0x80000000 + GENERIC_WRITE = 0x40000000 + GENERIC_EXECUTE = 0x20000000 + GENERIC_ALL = 0x10000000 + + FILE_LIST_DIRECTORY = 0x00000001 + FILE_APPEND_DATA = 0x00000004 + FILE_WRITE_ATTRIBUTES = 0x00000100 + + FILE_SHARE_READ = 0x00000001 + FILE_SHARE_WRITE = 0x00000002 + FILE_SHARE_DELETE = 0x00000004 + FILE_ATTRIBUTE_READONLY = 0x00000001 + FILE_ATTRIBUTE_HIDDEN = 0x00000002 + FILE_ATTRIBUTE_SYSTEM = 0x00000004 + FILE_ATTRIBUTE_DIRECTORY = 0x00000010 + FILE_ATTRIBUTE_ARCHIVE = 0x00000020 + FILE_ATTRIBUTE_NORMAL = 0x00000080 + FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400 + + INVALID_FILE_ATTRIBUTES = 0xffffffff + + CREATE_NEW = 1 + CREATE_ALWAYS = 2 + OPEN_EXISTING = 3 + OPEN_ALWAYS = 4 + TRUNCATE_EXISTING = 5 + + FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000 + FILE_FLAG_BACKUP_SEMANTICS = 0x02000000 + FILE_FLAG_OVERLAPPED = 0x40000000 + + HANDLE_FLAG_INHERIT = 0x00000001 + STARTF_USESTDHANDLES = 0x00000100 + STARTF_USESHOWWINDOW = 0x00000001 + DUPLICATE_CLOSE_SOURCE = 0x00000001 + DUPLICATE_SAME_ACCESS = 0x00000002 + + STD_INPUT_HANDLE = -10 & (1<<32 - 1) + STD_OUTPUT_HANDLE = -11 & (1<<32 - 1) + STD_ERROR_HANDLE = -12 & (1<<32 - 1) + + FILE_BEGIN = 0 + FILE_CURRENT = 1 + FILE_END = 2 + + LANG_ENGLISH = 0x09 + SUBLANG_ENGLISH_US = 0x01 + + FORMAT_MESSAGE_ALLOCATE_BUFFER = 256 + FORMAT_MESSAGE_IGNORE_INSERTS = 512 + FORMAT_MESSAGE_FROM_STRING = 1024 + FORMAT_MESSAGE_FROM_HMODULE = 2048 + FORMAT_MESSAGE_FROM_SYSTEM = 4096 + FORMAT_MESSAGE_ARGUMENT_ARRAY = 8192 + FORMAT_MESSAGE_MAX_WIDTH_MASK = 255 + + MAX_PATH = 260 + MAX_LONG_PATH = 32768 + + MAX_COMPUTERNAME_LENGTH = 15 + + TIME_ZONE_ID_UNKNOWN = 0 + TIME_ZONE_ID_STANDARD = 1 + + TIME_ZONE_ID_DAYLIGHT = 2 + IGNORE = 0 + INFINITE = 0xffffffff + + WAIT_TIMEOUT = 258 + WAIT_ABANDONED = 0x00000080 + WAIT_OBJECT_0 = 0x00000000 + WAIT_FAILED = 0xFFFFFFFF + + PROCESS_TERMINATE = 1 + PROCESS_QUERY_INFORMATION = 0x00000400 + SYNCHRONIZE = 0x00100000 + + FILE_MAP_COPY = 0x01 + FILE_MAP_WRITE = 0x02 + FILE_MAP_READ = 0x04 + FILE_MAP_EXECUTE = 0x20 + + CTRL_C_EVENT = 0 + CTRL_BREAK_EVENT = 1 + + // Windows reserves errors >= 1<<29 for application use. + APPLICATION_ERROR = 1 << 29 +) + +const ( + // Process creation flags. + CREATE_BREAKAWAY_FROM_JOB = 0x01000000 + CREATE_DEFAULT_ERROR_MODE = 0x04000000 + CREATE_NEW_CONSOLE = 0x00000010 + CREATE_NEW_PROCESS_GROUP = 0x00000200 + CREATE_NO_WINDOW = 0x08000000 + CREATE_PROTECTED_PROCESS = 0x00040000 + CREATE_PRESERVE_CODE_AUTHZ_LEVEL = 0x02000000 + CREATE_SEPARATE_WOW_VDM = 0x00000800 + CREATE_SHARED_WOW_VDM = 0x00001000 + CREATE_SUSPENDED = 0x00000004 + CREATE_UNICODE_ENVIRONMENT = 0x00000400 + DEBUG_ONLY_THIS_PROCESS = 0x00000002 + DEBUG_PROCESS = 0x00000001 + DETACHED_PROCESS = 0x00000008 + EXTENDED_STARTUPINFO_PRESENT = 0x00080000 + INHERIT_PARENT_AFFINITY = 0x00010000 +) + +const ( + // flags for CreateToolhelp32Snapshot + TH32CS_SNAPHEAPLIST = 0x01 + TH32CS_SNAPPROCESS = 0x02 + TH32CS_SNAPTHREAD = 0x04 + TH32CS_SNAPMODULE = 0x08 + TH32CS_SNAPMODULE32 = 0x10 + TH32CS_SNAPALL = TH32CS_SNAPHEAPLIST | TH32CS_SNAPMODULE | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD + TH32CS_INHERIT = 0x80000000 +) + +const ( + // filters for ReadDirectoryChangesW + FILE_NOTIFY_CHANGE_FILE_NAME = 0x001 + FILE_NOTIFY_CHANGE_DIR_NAME = 0x002 + FILE_NOTIFY_CHANGE_ATTRIBUTES = 0x004 + FILE_NOTIFY_CHANGE_SIZE = 0x008 + FILE_NOTIFY_CHANGE_LAST_WRITE = 0x010 + FILE_NOTIFY_CHANGE_LAST_ACCESS = 0x020 + FILE_NOTIFY_CHANGE_CREATION = 0x040 + FILE_NOTIFY_CHANGE_SECURITY = 0x100 +) + +const ( + // do not reorder + FILE_ACTION_ADDED = iota + 1 + FILE_ACTION_REMOVED + FILE_ACTION_MODIFIED + FILE_ACTION_RENAMED_OLD_NAME + FILE_ACTION_RENAMED_NEW_NAME +) + +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 + CRYPT_VERIFYCONTEXT = 0xF0000000 + CRYPT_NEWKEYSET = 0x00000008 + CRYPT_DELETEKEYSET = 0x00000010 + CRYPT_MACHINE_KEYSET = 0x00000020 + CRYPT_SILENT = 0x00000040 + CRYPT_DEFAULT_CONTAINER_OPTIONAL = 0x00000080 + + USAGE_MATCH_TYPE_AND = 0 + USAGE_MATCH_TYPE_OR = 1 + + X509_ASN_ENCODING = 0x00000001 + PKCS_7_ASN_ENCODING = 0x00010000 + + CERT_STORE_PROV_MEMORY = 2 + + CERT_STORE_ADD_ALWAYS = 4 + + CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG = 0x00000004 + + CERT_TRUST_NO_ERROR = 0x00000000 + CERT_TRUST_IS_NOT_TIME_VALID = 0x00000001 + CERT_TRUST_IS_REVOKED = 0x00000004 + CERT_TRUST_IS_NOT_SIGNATURE_VALID = 0x00000008 + CERT_TRUST_IS_NOT_VALID_FOR_USAGE = 0x00000010 + CERT_TRUST_IS_UNTRUSTED_ROOT = 0x00000020 + CERT_TRUST_REVOCATION_STATUS_UNKNOWN = 0x00000040 + CERT_TRUST_IS_CYCLIC = 0x00000080 + CERT_TRUST_INVALID_EXTENSION = 0x00000100 + CERT_TRUST_INVALID_POLICY_CONSTRAINTS = 0x00000200 + CERT_TRUST_INVALID_BASIC_CONSTRAINTS = 0x00000400 + CERT_TRUST_INVALID_NAME_CONSTRAINTS = 0x00000800 + CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT = 0x00001000 + CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT = 0x00002000 + CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT = 0x00004000 + CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT = 0x00008000 + CERT_TRUST_IS_OFFLINE_REVOCATION = 0x01000000 + CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY = 0x02000000 + CERT_TRUST_IS_EXPLICIT_DISTRUST = 0x04000000 + CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT = 0x08000000 + + CERT_CHAIN_POLICY_BASE = 1 + CERT_CHAIN_POLICY_AUTHENTICODE = 2 + CERT_CHAIN_POLICY_AUTHENTICODE_TS = 3 + CERT_CHAIN_POLICY_SSL = 4 + CERT_CHAIN_POLICY_BASIC_CONSTRAINTS = 5 + CERT_CHAIN_POLICY_NT_AUTH = 6 + CERT_CHAIN_POLICY_MICROSOFT_ROOT = 7 + CERT_CHAIN_POLICY_EV = 8 + + CERT_E_EXPIRED = 0x800B0101 + CERT_E_ROLE = 0x800B0103 + CERT_E_PURPOSE = 0x800B0106 + CERT_E_UNTRUSTEDROOT = 0x800B0109 + CERT_E_CN_NO_MATCH = 0x800B010F + + AUTHTYPE_CLIENT = 1 + AUTHTYPE_SERVER = 2 +) + +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") +) + +// Invented values to support what package os expects. +type Timeval struct { + Sec int32 + Usec int32 +} + +func (tv *Timeval) Nanoseconds() int64 { + return (int64(tv.Sec)*1e6 + int64(tv.Usec)) * 1e3 +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + tv.Sec = int32(nsec / 1e9) + tv.Usec = int32(nsec % 1e9 / 1e3) + return +} + +type SecurityAttributes struct { + Length uint32 + SecurityDescriptor uintptr + InheritHandle uint32 +} + +type Overlapped struct { + Internal uintptr + InternalHigh uintptr + Offset uint32 + OffsetHigh uint32 + HEvent Handle +} + +type FileNotifyInformation struct { + NextEntryOffset uint32 + Action uint32 + FileNameLength uint32 + FileName uint16 +} + +type Filetime struct { + LowDateTime uint32 + HighDateTime uint32 +} + +// Nanoseconds returns Filetime ft in nanoseconds +// since Epoch (00:00:00 UTC, January 1, 1970). +func (ft *Filetime) Nanoseconds() int64 { + // 100-nanosecond intervals since January 1, 1601 + nsec := int64(ft.HighDateTime)<<32 + int64(ft.LowDateTime) + // change starting time to the Epoch (00:00:00 UTC, January 1, 1970) + nsec -= 116444736000000000 + // convert into nanoseconds + nsec *= 100 + return nsec +} + +func NsecToFiletime(nsec int64) (ft Filetime) { + // convert into 100-nanosecond + nsec /= 100 + // change starting time to January 1, 1601 + nsec += 116444736000000000 + // split into high / low + ft.LowDateTime = uint32(nsec & 0xffffffff) + ft.HighDateTime = uint32(nsec >> 32 & 0xffffffff) + return ft +} + +type Win32finddata struct { + FileAttributes uint32 + CreationTime Filetime + LastAccessTime Filetime + LastWriteTime Filetime + FileSizeHigh uint32 + FileSizeLow uint32 + Reserved0 uint32 + Reserved1 uint32 + FileName [MAX_PATH - 1]uint16 + AlternateFileName [13]uint16 +} + +// This is the actual system call structure. +// Win32finddata is what we committed to in Go 1. +type win32finddata1 struct { + FileAttributes uint32 + CreationTime Filetime + LastAccessTime Filetime + LastWriteTime Filetime + FileSizeHigh uint32 + FileSizeLow uint32 + Reserved0 uint32 + Reserved1 uint32 + FileName [MAX_PATH]uint16 + AlternateFileName [14]uint16 +} + +func copyFindData(dst *Win32finddata, src *win32finddata1) { + dst.FileAttributes = src.FileAttributes + dst.CreationTime = src.CreationTime + dst.LastAccessTime = src.LastAccessTime + dst.LastWriteTime = src.LastWriteTime + dst.FileSizeHigh = src.FileSizeHigh + dst.FileSizeLow = src.FileSizeLow + dst.Reserved0 = src.Reserved0 + dst.Reserved1 = src.Reserved1 + + // The src is 1 element bigger than dst, but it must be NUL. + copy(dst.FileName[:], src.FileName[:]) + copy(dst.AlternateFileName[:], src.AlternateFileName[:]) +} + +type ByHandleFileInformation struct { + FileAttributes uint32 + CreationTime Filetime + LastAccessTime Filetime + LastWriteTime Filetime + VolumeSerialNumber uint32 + FileSizeHigh uint32 + FileSizeLow uint32 + NumberOfLinks uint32 + FileIndexHigh uint32 + FileIndexLow uint32 +} + +const ( + GetFileExInfoStandard = 0 + GetFileExMaxInfoLevel = 1 +) + +type Win32FileAttributeData struct { + FileAttributes uint32 + CreationTime Filetime + LastAccessTime Filetime + LastWriteTime Filetime + FileSizeHigh uint32 + FileSizeLow uint32 +} + +// ShowWindow constants +const ( + // winuser.h + SW_HIDE = 0 + SW_NORMAL = 1 + SW_SHOWNORMAL = 1 + SW_SHOWMINIMIZED = 2 + SW_SHOWMAXIMIZED = 3 + SW_MAXIMIZE = 3 + SW_SHOWNOACTIVATE = 4 + SW_SHOW = 5 + SW_MINIMIZE = 6 + SW_SHOWMINNOACTIVE = 7 + SW_SHOWNA = 8 + SW_RESTORE = 9 + SW_SHOWDEFAULT = 10 + SW_FORCEMINIMIZE = 11 +) + +type StartupInfo struct { + Cb uint32 + _ *uint16 + Desktop *uint16 + Title *uint16 + X uint32 + Y uint32 + XSize uint32 + YSize uint32 + XCountChars uint32 + YCountChars uint32 + FillAttribute uint32 + Flags uint32 + ShowWindow uint16 + _ uint16 + _ *byte + StdInput Handle + StdOutput Handle + StdErr Handle +} + +type ProcessInformation struct { + Process Handle + Thread Handle + ProcessId uint32 + ThreadId uint32 +} + +type ProcessEntry32 struct { + Size uint32 + Usage uint32 + ProcessID uint32 + DefaultHeapID uintptr + ModuleID uint32 + Threads uint32 + ParentProcessID uint32 + PriClassBase int32 + Flags uint32 + ExeFile [MAX_PATH]uint16 +} + +type Systemtime struct { + Year uint16 + Month uint16 + DayOfWeek uint16 + Day uint16 + Hour uint16 + Minute uint16 + Second uint16 + Milliseconds uint16 +} + +type Timezoneinformation struct { + Bias int32 + StandardName [32]uint16 + StandardDate Systemtime + StandardBias int32 + DaylightName [32]uint16 + DaylightDate Systemtime + DaylightBias int32 +} + +// Socket related. + +const ( + AF_UNSPEC = 0 + AF_UNIX = 1 + AF_INET = 2 + AF_INET6 = 23 + AF_NETBIOS = 17 + + SOCK_STREAM = 1 + SOCK_DGRAM = 2 + SOCK_RAW = 3 + SOCK_SEQPACKET = 5 + + IPPROTO_IP = 0 + IPPROTO_IPV6 = 0x29 + IPPROTO_TCP = 6 + IPPROTO_UDP = 17 + + SOL_SOCKET = 0xffff + SO_REUSEADDR = 4 + SO_KEEPALIVE = 8 + SO_DONTROUTE = 16 + SO_BROADCAST = 32 + SO_LINGER = 128 + SO_RCVBUF = 0x1002 + SO_SNDBUF = 0x1001 + SO_UPDATE_ACCEPT_CONTEXT = 0x700b + SO_UPDATE_CONNECT_CONTEXT = 0x7010 + + IOC_OUT = 0x40000000 + IOC_IN = 0x80000000 + IOC_VENDOR = 0x18000000 + IOC_INOUT = IOC_IN | IOC_OUT + IOC_WS2 = 0x08000000 + SIO_GET_EXTENSION_FUNCTION_POINTER = IOC_INOUT | IOC_WS2 | 6 + SIO_KEEPALIVE_VALS = IOC_IN | IOC_VENDOR | 4 + SIO_UDP_CONNRESET = IOC_IN | IOC_VENDOR | 12 + + // cf. http://support.microsoft.com/default.aspx?scid=kb;en-us;257460 + + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_LOOP = 0xb + IP_ADD_MEMBERSHIP = 0xc + IP_DROP_MEMBERSHIP = 0xd + + IPV6_V6ONLY = 0x1b + IPV6_UNICAST_HOPS = 0x4 + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_LOOP = 0xb + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_DONTROUTE = 0x4 + MSG_WAITALL = 0x8 + + MSG_TRUNC = 0x0100 + MSG_CTRUNC = 0x0200 + MSG_BCAST = 0x0400 + MSG_MCAST = 0x0800 + + SOMAXCONN = 0x7fffffff + + TCP_NODELAY = 1 + + SHUT_RD = 0 + SHUT_WR = 1 + SHUT_RDWR = 2 + + WSADESCRIPTION_LEN = 256 + WSASYS_STATUS_LEN = 128 +) + +type WSABuf struct { + Len uint32 + Buf *byte +} + +type WSAMsg struct { + Name *syscall.RawSockaddrAny + Namelen int32 + Buffers *WSABuf + BufferCount uint32 + Control WSABuf + Flags uint32 +} + +// Invented values to support what package os expects. +const ( + S_IFMT = 0x1f000 + S_IFIFO = 0x1000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFBLK = 0x6000 + S_IFREG = 0x8000 + S_IFLNK = 0xa000 + S_IFSOCK = 0xc000 + S_ISUID = 0x800 + S_ISGID = 0x400 + S_ISVTX = 0x200 + S_IRUSR = 0x100 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXUSR = 0x40 +) + +const ( + FILE_TYPE_CHAR = 0x0002 + FILE_TYPE_DISK = 0x0001 + FILE_TYPE_PIPE = 0x0003 + FILE_TYPE_REMOTE = 0x8000 + FILE_TYPE_UNKNOWN = 0x0000 +) + +type Hostent struct { + Name *byte + Aliases **byte + AddrType uint16 + Length uint16 + AddrList **byte +} + +type Protoent struct { + Name *byte + Aliases **byte + Proto uint16 +} + +const ( + DNS_TYPE_A = 0x0001 + DNS_TYPE_NS = 0x0002 + DNS_TYPE_MD = 0x0003 + DNS_TYPE_MF = 0x0004 + DNS_TYPE_CNAME = 0x0005 + DNS_TYPE_SOA = 0x0006 + DNS_TYPE_MB = 0x0007 + DNS_TYPE_MG = 0x0008 + DNS_TYPE_MR = 0x0009 + DNS_TYPE_NULL = 0x000a + DNS_TYPE_WKS = 0x000b + DNS_TYPE_PTR = 0x000c + DNS_TYPE_HINFO = 0x000d + DNS_TYPE_MINFO = 0x000e + DNS_TYPE_MX = 0x000f + DNS_TYPE_TEXT = 0x0010 + DNS_TYPE_RP = 0x0011 + DNS_TYPE_AFSDB = 0x0012 + DNS_TYPE_X25 = 0x0013 + DNS_TYPE_ISDN = 0x0014 + DNS_TYPE_RT = 0x0015 + DNS_TYPE_NSAP = 0x0016 + DNS_TYPE_NSAPPTR = 0x0017 + DNS_TYPE_SIG = 0x0018 + DNS_TYPE_KEY = 0x0019 + DNS_TYPE_PX = 0x001a + DNS_TYPE_GPOS = 0x001b + DNS_TYPE_AAAA = 0x001c + DNS_TYPE_LOC = 0x001d + DNS_TYPE_NXT = 0x001e + DNS_TYPE_EID = 0x001f + DNS_TYPE_NIMLOC = 0x0020 + DNS_TYPE_SRV = 0x0021 + DNS_TYPE_ATMA = 0x0022 + DNS_TYPE_NAPTR = 0x0023 + DNS_TYPE_KX = 0x0024 + DNS_TYPE_CERT = 0x0025 + DNS_TYPE_A6 = 0x0026 + DNS_TYPE_DNAME = 0x0027 + DNS_TYPE_SINK = 0x0028 + DNS_TYPE_OPT = 0x0029 + DNS_TYPE_DS = 0x002B + DNS_TYPE_RRSIG = 0x002E + DNS_TYPE_NSEC = 0x002F + DNS_TYPE_DNSKEY = 0x0030 + DNS_TYPE_DHCID = 0x0031 + DNS_TYPE_UINFO = 0x0064 + DNS_TYPE_UID = 0x0065 + DNS_TYPE_GID = 0x0066 + DNS_TYPE_UNSPEC = 0x0067 + DNS_TYPE_ADDRS = 0x00f8 + DNS_TYPE_TKEY = 0x00f9 + DNS_TYPE_TSIG = 0x00fa + DNS_TYPE_IXFR = 0x00fb + DNS_TYPE_AXFR = 0x00fc + DNS_TYPE_MAILB = 0x00fd + DNS_TYPE_MAILA = 0x00fe + DNS_TYPE_ALL = 0x00ff + DNS_TYPE_ANY = 0x00ff + DNS_TYPE_WINS = 0xff01 + DNS_TYPE_WINSR = 0xff02 + DNS_TYPE_NBSTAT = 0xff01 +) + +const ( + DNS_INFO_NO_RECORDS = 0x251D +) + +const ( + // flags inside DNSRecord.Dw + DnsSectionQuestion = 0x0000 + DnsSectionAnswer = 0x0001 + DnsSectionAuthority = 0x0002 + DnsSectionAdditional = 0x0003 +) + +type DNSSRVData struct { + Target *uint16 + Priority uint16 + Weight uint16 + Port uint16 + Pad uint16 +} + +type DNSPTRData struct { + Host *uint16 +} + +type DNSMXData struct { + NameExchange *uint16 + Preference uint16 + Pad uint16 +} + +type DNSTXTData struct { + StringCount uint16 + StringArray [1]*uint16 +} + +type DNSRecord struct { + Next *DNSRecord + Name *uint16 + Type uint16 + Length uint16 + Dw uint32 + Ttl uint32 + Reserved uint32 + Data [40]byte +} + +const ( + TF_DISCONNECT = 1 + TF_REUSE_SOCKET = 2 + TF_WRITE_BEHIND = 4 + TF_USE_DEFAULT_WORKER = 0 + TF_USE_SYSTEM_THREAD = 16 + TF_USE_KERNEL_APC = 32 +) + +type TransmitFileBuffers struct { + Head uintptr + HeadLength uint32 + Tail uintptr + TailLength uint32 +} + +const ( + IFF_UP = 1 + IFF_BROADCAST = 2 + IFF_LOOPBACK = 4 + IFF_POINTTOPOINT = 8 + IFF_MULTICAST = 16 +) + +const SIO_GET_INTERFACE_LIST = 0x4004747F + +// TODO(mattn): SockaddrGen is union of sockaddr/sockaddr_in/sockaddr_in6_old. +// will be fixed to change variable type as suitable. + +type SockaddrGen [24]byte + +type InterfaceInfo struct { + Flags uint32 + Address SockaddrGen + BroadcastAddress SockaddrGen + Netmask SockaddrGen +} + +type IpAddressString struct { + String [16]byte +} + +type IpMaskString IpAddressString + +type IpAddrString struct { + Next *IpAddrString + IpAddress IpAddressString + IpMask IpMaskString + Context uint32 +} + +const MAX_ADAPTER_NAME_LENGTH = 256 +const MAX_ADAPTER_DESCRIPTION_LENGTH = 128 +const MAX_ADAPTER_ADDRESS_LENGTH = 8 + +type IpAdapterInfo struct { + Next *IpAdapterInfo + ComboIndex uint32 + AdapterName [MAX_ADAPTER_NAME_LENGTH + 4]byte + Description [MAX_ADAPTER_DESCRIPTION_LENGTH + 4]byte + AddressLength uint32 + Address [MAX_ADAPTER_ADDRESS_LENGTH]byte + Index uint32 + Type uint32 + DhcpEnabled uint32 + CurrentIpAddress *IpAddrString + IpAddressList IpAddrString + GatewayList IpAddrString + DhcpServer IpAddrString + HaveWins bool + PrimaryWinsServer IpAddrString + SecondaryWinsServer IpAddrString + LeaseObtained int64 + LeaseExpires int64 +} + +const MAXLEN_PHYSADDR = 8 +const MAX_INTERFACE_NAME_LEN = 256 +const MAXLEN_IFDESCR = 256 + +type MibIfRow struct { + Name [MAX_INTERFACE_NAME_LEN]uint16 + Index uint32 + Type uint32 + Mtu uint32 + Speed uint32 + PhysAddrLen uint32 + PhysAddr [MAXLEN_PHYSADDR]byte + AdminStatus uint32 + OperStatus uint32 + LastChange uint32 + InOctets uint32 + InUcastPkts uint32 + InNUcastPkts uint32 + InDiscards uint32 + InErrors uint32 + InUnknownProtos uint32 + OutOctets uint32 + OutUcastPkts uint32 + OutNUcastPkts uint32 + OutDiscards uint32 + OutErrors uint32 + OutQLen uint32 + DescrLen uint32 + Descr [MAXLEN_IFDESCR]byte +} + +type CertContext struct { + EncodingType uint32 + EncodedCert *byte + Length uint32 + CertInfo uintptr + Store Handle +} + +type CertChainContext struct { + Size uint32 + TrustStatus CertTrustStatus + ChainCount uint32 + Chains **CertSimpleChain + LowerQualityChainCount uint32 + LowerQualityChains **CertChainContext + HasRevocationFreshnessTime uint32 + RevocationFreshnessTime uint32 +} + +type CertSimpleChain struct { + Size uint32 + TrustStatus CertTrustStatus + NumElements uint32 + Elements **CertChainElement + TrustListInfo uintptr + HasRevocationFreshnessTime uint32 + RevocationFreshnessTime uint32 +} + +type CertChainElement struct { + Size uint32 + CertContext *CertContext + TrustStatus CertTrustStatus + RevocationInfo *CertRevocationInfo + IssuanceUsage *CertEnhKeyUsage + ApplicationUsage *CertEnhKeyUsage + ExtendedErrorInfo *uint16 +} + +type CertRevocationInfo struct { + Size uint32 + RevocationResult uint32 + RevocationOid *byte + OidSpecificInfo uintptr + HasFreshnessTime uint32 + FreshnessTime uint32 + CrlInfo uintptr // *CertRevocationCrlInfo +} + +type CertTrustStatus struct { + ErrorStatus uint32 + InfoStatus uint32 +} + +type CertUsageMatch struct { + Type uint32 + Usage CertEnhKeyUsage +} + +type CertEnhKeyUsage struct { + Length uint32 + UsageIdentifiers **byte +} + +type CertChainPara struct { + Size uint32 + RequestedUsage CertUsageMatch + RequstedIssuancePolicy CertUsageMatch + URLRetrievalTimeout uint32 + CheckRevocationFreshnessTime uint32 + RevocationFreshnessTime uint32 + CacheResync *Filetime +} + +type CertChainPolicyPara struct { + Size uint32 + Flags uint32 + ExtraPolicyPara uintptr +} + +type SSLExtraCertChainPolicyPara struct { + Size uint32 + AuthType uint32 + Checks uint32 + ServerName *uint16 +} + +type CertChainPolicyStatus struct { + Size uint32 + Error uint32 + ChainIndex uint32 + ElementIndex uint32 + ExtraPolicyStatus uintptr +} + +const ( + // do not reorder + HKEY_CLASSES_ROOT = 0x80000000 + iota + HKEY_CURRENT_USER + HKEY_LOCAL_MACHINE + HKEY_USERS + HKEY_PERFORMANCE_DATA + HKEY_CURRENT_CONFIG + HKEY_DYN_DATA + + KEY_QUERY_VALUE = 1 + KEY_SET_VALUE = 2 + KEY_CREATE_SUB_KEY = 4 + KEY_ENUMERATE_SUB_KEYS = 8 + KEY_NOTIFY = 16 + KEY_CREATE_LINK = 32 + KEY_WRITE = 0x20006 + KEY_EXECUTE = 0x20019 + KEY_READ = 0x20019 + KEY_WOW64_64KEY = 0x0100 + KEY_WOW64_32KEY = 0x0200 + KEY_ALL_ACCESS = 0xf003f +) + +const ( + // do not reorder + REG_NONE = iota + REG_SZ + REG_EXPAND_SZ + REG_BINARY + REG_DWORD_LITTLE_ENDIAN + REG_DWORD_BIG_ENDIAN + REG_LINK + REG_MULTI_SZ + REG_RESOURCE_LIST + REG_FULL_RESOURCE_DESCRIPTOR + REG_RESOURCE_REQUIREMENTS_LIST + REG_QWORD_LITTLE_ENDIAN + REG_DWORD = REG_DWORD_LITTLE_ENDIAN + REG_QWORD = REG_QWORD_LITTLE_ENDIAN +) + +type AddrinfoW struct { + Flags int32 + Family int32 + Socktype int32 + Protocol int32 + Addrlen uintptr + Canonname *uint16 + Addr uintptr + Next *AddrinfoW +} + +const ( + AI_PASSIVE = 1 + AI_CANONNAME = 2 + AI_NUMERICHOST = 4 +) + +type GUID struct { + Data1 uint32 + Data2 uint16 + Data3 uint16 + Data4 [8]byte +} + +var WSAID_CONNECTEX = GUID{ + 0x25a207b9, + 0xddf3, + 0x4660, + [8]byte{0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e}, +} + +var WSAID_WSASENDMSG = GUID{ + 0xa441e712, + 0x754f, + 0x43ca, + [8]byte{0x84, 0xa7, 0x0d, 0xee, 0x44, 0xcf, 0x60, 0x6d}, +} + +var WSAID_WSARECVMSG = GUID{ + 0xf689d7c8, + 0x6f1f, + 0x436b, + [8]byte{0x8a, 0x53, 0xe5, 0x4f, 0xe3, 0x51, 0xc3, 0x22}, +} + +const ( + FILE_SKIP_COMPLETION_PORT_ON_SUCCESS = 1 + FILE_SKIP_SET_EVENT_ON_HANDLE = 2 +) + +const ( + WSAPROTOCOL_LEN = 255 + MAX_PROTOCOL_CHAIN = 7 + BASE_PROTOCOL = 1 + LAYERED_PROTOCOL = 0 + + XP1_CONNECTIONLESS = 0x00000001 + XP1_GUARANTEED_DELIVERY = 0x00000002 + XP1_GUARANTEED_ORDER = 0x00000004 + XP1_MESSAGE_ORIENTED = 0x00000008 + XP1_PSEUDO_STREAM = 0x00000010 + XP1_GRACEFUL_CLOSE = 0x00000020 + XP1_EXPEDITED_DATA = 0x00000040 + XP1_CONNECT_DATA = 0x00000080 + XP1_DISCONNECT_DATA = 0x00000100 + XP1_SUPPORT_BROADCAST = 0x00000200 + XP1_SUPPORT_MULTIPOINT = 0x00000400 + XP1_MULTIPOINT_CONTROL_PLANE = 0x00000800 + XP1_MULTIPOINT_DATA_PLANE = 0x00001000 + XP1_QOS_SUPPORTED = 0x00002000 + XP1_UNI_SEND = 0x00008000 + XP1_UNI_RECV = 0x00010000 + XP1_IFS_HANDLES = 0x00020000 + XP1_PARTIAL_MESSAGE = 0x00040000 + XP1_SAN_SUPPORT_SDP = 0x00080000 + + PFL_MULTIPLE_PROTO_ENTRIES = 0x00000001 + PFL_RECOMMENDED_PROTO_ENTRY = 0x00000002 + PFL_HIDDEN = 0x00000004 + PFL_MATCHES_PROTOCOL_ZERO = 0x00000008 + PFL_NETWORKDIRECT_PROVIDER = 0x00000010 +) + +type WSAProtocolInfo struct { + ServiceFlags1 uint32 + ServiceFlags2 uint32 + ServiceFlags3 uint32 + ServiceFlags4 uint32 + ProviderFlags uint32 + ProviderId GUID + CatalogEntryId uint32 + ProtocolChain WSAProtocolChain + Version int32 + AddressFamily int32 + MaxSockAddr int32 + MinSockAddr int32 + SocketType int32 + Protocol int32 + ProtocolMaxOffset int32 + NetworkByteOrder int32 + SecurityScheme int32 + MessageSize uint32 + ProviderReserved uint32 + ProtocolName [WSAPROTOCOL_LEN + 1]uint16 +} + +type WSAProtocolChain struct { + ChainLen int32 + ChainEntries [MAX_PROTOCOL_CHAIN]uint32 +} + +type TCPKeepalive struct { + OnOff uint32 + Time uint32 + Interval uint32 +} + +type symbolicLinkReparseBuffer struct { + SubstituteNameOffset uint16 + SubstituteNameLength uint16 + PrintNameOffset uint16 + PrintNameLength uint16 + Flags uint32 + PathBuffer [1]uint16 +} + +type mountPointReparseBuffer struct { + SubstituteNameOffset uint16 + SubstituteNameLength uint16 + PrintNameOffset uint16 + PrintNameLength uint16 + PathBuffer [1]uint16 +} + +type reparseDataBuffer struct { + ReparseTag uint32 + ReparseDataLength uint16 + Reserved uint16 + + // GenericReparseBuffer + reparseBuffer byte +} + +const ( + FSCTL_GET_REPARSE_POINT = 0x900A8 + MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 16 * 1024 + IO_REPARSE_TAG_MOUNT_POINT = 0xA0000003 + IO_REPARSE_TAG_SYMLINK = 0xA000000C + SYMBOLIC_LINK_FLAG_DIRECTORY = 0x1 +) + +const ( + ComputerNameNetBIOS = 0 + ComputerNameDnsHostname = 1 + ComputerNameDnsDomain = 2 + ComputerNameDnsFullyQualified = 3 + ComputerNamePhysicalNetBIOS = 4 + ComputerNamePhysicalDnsHostname = 5 + ComputerNamePhysicalDnsDomain = 6 + ComputerNamePhysicalDnsFullyQualified = 7 + ComputerNameMax = 8 +) + +const ( + MOVEFILE_REPLACE_EXISTING = 0x1 + MOVEFILE_COPY_ALLOWED = 0x2 + MOVEFILE_DELAY_UNTIL_REBOOT = 0x4 + MOVEFILE_WRITE_THROUGH = 0x8 + MOVEFILE_CREATE_HARDLINK = 0x10 + MOVEFILE_FAIL_IF_NOT_TRACKABLE = 0x20 +) + +const GAA_FLAG_INCLUDE_PREFIX = 0x00000010 + +const ( + IF_TYPE_OTHER = 1 + IF_TYPE_ETHERNET_CSMACD = 6 + IF_TYPE_ISO88025_TOKENRING = 9 + IF_TYPE_PPP = 23 + IF_TYPE_SOFTWARE_LOOPBACK = 24 + IF_TYPE_ATM = 37 + IF_TYPE_IEEE80211 = 71 + IF_TYPE_TUNNEL = 131 + IF_TYPE_IEEE1394 = 144 +) + +type SocketAddress struct { + Sockaddr *syscall.RawSockaddrAny + SockaddrLength int32 +} + +type IpAdapterUnicastAddress struct { + Length uint32 + Flags uint32 + Next *IpAdapterUnicastAddress + Address SocketAddress + PrefixOrigin int32 + SuffixOrigin int32 + DadState int32 + ValidLifetime uint32 + PreferredLifetime uint32 + LeaseLifetime uint32 + OnLinkPrefixLength uint8 +} + +type IpAdapterAnycastAddress struct { + Length uint32 + Flags uint32 + Next *IpAdapterAnycastAddress + Address SocketAddress +} + +type IpAdapterMulticastAddress struct { + Length uint32 + Flags uint32 + Next *IpAdapterMulticastAddress + Address SocketAddress +} + +type IpAdapterDnsServerAdapter struct { + Length uint32 + Reserved uint32 + Next *IpAdapterDnsServerAdapter + Address SocketAddress +} + +type IpAdapterPrefix struct { + Length uint32 + Flags uint32 + Next *IpAdapterPrefix + Address SocketAddress + PrefixLength uint32 +} + +type IpAdapterAddresses struct { + Length uint32 + IfIndex uint32 + Next *IpAdapterAddresses + AdapterName *byte + FirstUnicastAddress *IpAdapterUnicastAddress + FirstAnycastAddress *IpAdapterAnycastAddress + FirstMulticastAddress *IpAdapterMulticastAddress + FirstDnsServerAddress *IpAdapterDnsServerAdapter + DnsSuffix *uint16 + Description *uint16 + FriendlyName *uint16 + PhysicalAddress [syscall.MAX_ADAPTER_ADDRESS_LENGTH]byte + PhysicalAddressLength uint32 + Flags uint32 + Mtu uint32 + IfType uint32 + OperStatus uint32 + Ipv6IfIndex uint32 + ZoneIndices [16]uint32 + FirstPrefix *IpAdapterPrefix + /* more fields might be present here. */ +} + +const ( + IfOperStatusUp = 1 + IfOperStatusDown = 2 + IfOperStatusTesting = 3 + IfOperStatusUnknown = 4 + IfOperStatusDormant = 5 + IfOperStatusNotPresent = 6 + IfOperStatusLowerLayerDown = 7 +) + +// Console related constants used for the mode parameter to SetConsoleMode. See +// https://docs.microsoft.com/en-us/windows/console/setconsolemode for details. + +const ( + ENABLE_PROCESSED_INPUT = 0x1 + ENABLE_LINE_INPUT = 0x2 + ENABLE_ECHO_INPUT = 0x4 + ENABLE_WINDOW_INPUT = 0x8 + ENABLE_MOUSE_INPUT = 0x10 + ENABLE_INSERT_MODE = 0x20 + ENABLE_QUICK_EDIT_MODE = 0x40 + ENABLE_EXTENDED_FLAGS = 0x80 + ENABLE_AUTO_POSITION = 0x100 + ENABLE_VIRTUAL_TERMINAL_INPUT = 0x200 + + ENABLE_PROCESSED_OUTPUT = 0x1 + ENABLE_WRAP_AT_EOL_OUTPUT = 0x2 + ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x4 + DISABLE_NEWLINE_AUTO_RETURN = 0x8 + ENABLE_LVB_GRID_WORLDWIDE = 0x10 +) + +type Coord struct { + X int16 + Y int16 +} + +type SmallRect struct { + Left int16 + Top int16 + Right int16 + Bottom int16 +} + +// Used with GetConsoleScreenBuffer to retreive information about a console +// screen buffer. See +// https://docs.microsoft.com/en-us/windows/console/console-screen-buffer-info-str +// for details. + +type ConsoleScreenBufferInfo struct { + Size Coord + CursorPosition Coord + Attributes uint16 + Window SmallRect + MaximumWindowSize Coord +} diff --git a/vendor/golang.org/x/sys/windows/types_windows_386.go b/vendor/golang.org/x/sys/windows/types_windows_386.go new file mode 100644 index 0000000..fe0ddd0 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/types_windows_386.go @@ -0,0 +1,22 @@ +// Copyright 2011 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. + +package windows + +type WSAData struct { + Version uint16 + HighVersion uint16 + Description [WSADESCRIPTION_LEN + 1]byte + SystemStatus [WSASYS_STATUS_LEN + 1]byte + MaxSockets uint16 + MaxUdpDg uint16 + VendorInfo *byte +} + +type Servent struct { + Name *byte + Aliases **byte + Port uint16 + Proto *byte +} diff --git a/vendor/golang.org/x/sys/windows/types_windows_amd64.go b/vendor/golang.org/x/sys/windows/types_windows_amd64.go new file mode 100644 index 0000000..7e154c2 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/types_windows_amd64.go @@ -0,0 +1,22 @@ +// Copyright 2011 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. + +package windows + +type WSAData struct { + Version uint16 + HighVersion uint16 + MaxSockets uint16 + MaxUdpDg uint16 + VendorInfo *byte + Description [WSADESCRIPTION_LEN + 1]byte + SystemStatus [WSASYS_STATUS_LEN + 1]byte +} + +type Servent struct { + Name *byte + Aliases **byte + Proto *byte + Port uint16 +} diff --git a/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/vendor/golang.org/x/sys/windows/zsyscall_windows.go index f7bc8d6..c7b3b15 100644 --- a/vendor/golang.org/x/sys/windows/zsyscall_windows.go +++ b/vendor/golang.org/x/sys/windows/zsyscall_windows.go @@ -64,6 +64,7 @@ var ( procQueryServiceConfigW = modadvapi32.NewProc("QueryServiceConfigW") procChangeServiceConfig2W = modadvapi32.NewProc("ChangeServiceConfig2W") procQueryServiceConfig2W = modadvapi32.NewProc("QueryServiceConfig2W") + procEnumServicesStatusExW = modadvapi32.NewProc("EnumServicesStatusExW") procGetLastError = modkernel32.NewProc("GetLastError") procLoadLibraryW = modkernel32.NewProc("LoadLibraryW") procLoadLibraryExW = modkernel32.NewProc("LoadLibraryExW") @@ -138,6 +139,9 @@ var ( procFlushViewOfFile = modkernel32.NewProc("FlushViewOfFile") procVirtualLock = modkernel32.NewProc("VirtualLock") procVirtualUnlock = modkernel32.NewProc("VirtualUnlock") + procVirtualAlloc = modkernel32.NewProc("VirtualAlloc") + procVirtualFree = modkernel32.NewProc("VirtualFree") + procVirtualProtect = modkernel32.NewProc("VirtualProtect") procTransmitFile = modmswsock.NewProc("TransmitFile") procReadDirectoryChangesW = modkernel32.NewProc("ReadDirectoryChangesW") procCertOpenSystemStoreW = modcrypt32.NewProc("CertOpenSystemStoreW") @@ -157,6 +161,8 @@ var ( procRegQueryValueExW = modadvapi32.NewProc("RegQueryValueExW") procGetCurrentProcessId = modkernel32.NewProc("GetCurrentProcessId") procGetConsoleMode = modkernel32.NewProc("GetConsoleMode") + procSetConsoleMode = modkernel32.NewProc("SetConsoleMode") + procGetConsoleScreenBufferInfo = modkernel32.NewProc("GetConsoleScreenBufferInfo") procWriteConsoleW = modkernel32.NewProc("WriteConsoleW") procReadConsoleW = modkernel32.NewProc("ReadConsoleW") procCreateToolhelp32Snapshot = modkernel32.NewProc("CreateToolhelp32Snapshot") @@ -167,7 +173,30 @@ var ( procCreateHardLinkW = modkernel32.NewProc("CreateHardLinkW") procGetCurrentThreadId = modkernel32.NewProc("GetCurrentThreadId") procCreateEventW = modkernel32.NewProc("CreateEventW") + procCreateEventExW = modkernel32.NewProc("CreateEventExW") + procOpenEventW = modkernel32.NewProc("OpenEventW") procSetEvent = modkernel32.NewProc("SetEvent") + procResetEvent = modkernel32.NewProc("ResetEvent") + procPulseEvent = modkernel32.NewProc("PulseEvent") + procDefineDosDeviceW = modkernel32.NewProc("DefineDosDeviceW") + procDeleteVolumeMountPointW = modkernel32.NewProc("DeleteVolumeMountPointW") + procFindFirstVolumeW = modkernel32.NewProc("FindFirstVolumeW") + procFindFirstVolumeMountPointW = modkernel32.NewProc("FindFirstVolumeMountPointW") + procFindNextVolumeW = modkernel32.NewProc("FindNextVolumeW") + procFindNextVolumeMountPointW = modkernel32.NewProc("FindNextVolumeMountPointW") + procFindVolumeClose = modkernel32.NewProc("FindVolumeClose") + procFindVolumeMountPointClose = modkernel32.NewProc("FindVolumeMountPointClose") + procGetDriveTypeW = modkernel32.NewProc("GetDriveTypeW") + procGetLogicalDrives = modkernel32.NewProc("GetLogicalDrives") + procGetLogicalDriveStringsW = modkernel32.NewProc("GetLogicalDriveStringsW") + procGetVolumeInformationW = modkernel32.NewProc("GetVolumeInformationW") + procGetVolumeInformationByHandleW = modkernel32.NewProc("GetVolumeInformationByHandleW") + procGetVolumeNameForVolumeMountPointW = modkernel32.NewProc("GetVolumeNameForVolumeMountPointW") + procGetVolumePathNameW = modkernel32.NewProc("GetVolumePathNameW") + procGetVolumePathNamesForVolumeNameW = modkernel32.NewProc("GetVolumePathNamesForVolumeNameW") + procQueryDosDeviceW = modkernel32.NewProc("QueryDosDeviceW") + procSetVolumeLabelW = modkernel32.NewProc("SetVolumeLabelW") + procSetVolumeMountPointW = modkernel32.NewProc("SetVolumeMountPointW") procWSAStartup = modws2_32.NewProc("WSAStartup") procWSACleanup = modws2_32.NewProc("WSACleanup") procWSAIoctl = modws2_32.NewProc("WSAIoctl") @@ -217,6 +246,7 @@ var ( procAllocateAndInitializeSid = modadvapi32.NewProc("AllocateAndInitializeSid") procFreeSid = modadvapi32.NewProc("FreeSid") procEqualSid = modadvapi32.NewProc("EqualSid") + procCheckTokenMembership = modadvapi32.NewProc("CheckTokenMembership") procOpenProcessToken = modadvapi32.NewProc("OpenProcessToken") procGetTokenInformation = modadvapi32.NewProc("GetTokenInformation") procGetUserProfileDirectoryW = moduserenv.NewProc("GetUserProfileDirectoryW") @@ -430,6 +460,18 @@ func QueryServiceConfig2(service Handle, infoLevel uint32, buff *byte, buffSize return } +func EnumServicesStatusEx(mgr Handle, infoLevel uint32, serviceType uint32, serviceState uint32, services *byte, bufSize uint32, bytesNeeded *uint32, servicesReturned *uint32, resumeHandle *uint32, groupName *uint16) (err error) { + r1, _, e1 := syscall.Syscall12(procEnumServicesStatusExW.Addr(), 10, uintptr(mgr), uintptr(infoLevel), uintptr(serviceType), uintptr(serviceState), uintptr(unsafe.Pointer(services)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded)), uintptr(unsafe.Pointer(servicesReturned)), uintptr(unsafe.Pointer(resumeHandle)), uintptr(unsafe.Pointer(groupName)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + func GetLastError() (lasterr error) { r0, _, _ := syscall.Syscall(procGetLastError.Addr(), 0, 0, 0, 0) if r0 != 0 { @@ -1371,6 +1413,43 @@ func VirtualUnlock(addr uintptr, length uintptr) (err error) { return } +func VirtualAlloc(address uintptr, size uintptr, alloctype uint32, protect uint32) (value uintptr, err error) { + r0, _, e1 := syscall.Syscall6(procVirtualAlloc.Addr(), 4, uintptr(address), uintptr(size), uintptr(alloctype), uintptr(protect), 0, 0) + value = uintptr(r0) + if value == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func VirtualFree(address uintptr, size uintptr, freetype uint32) (err error) { + r1, _, e1 := syscall.Syscall(procVirtualFree.Addr(), 3, uintptr(address), uintptr(size), uintptr(freetype)) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func VirtualProtect(address uintptr, size uintptr, newprotect uint32, oldprotect *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procVirtualProtect.Addr(), 4, uintptr(address), uintptr(size), uintptr(newprotect), uintptr(unsafe.Pointer(oldprotect)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + func TransmitFile(s Handle, handle Handle, bytesToWrite uint32, bytsPerSend uint32, overlapped *Overlapped, transmitFileBuf *TransmitFileBuffers, flags uint32) (err error) { r1, _, e1 := syscall.Syscall9(procTransmitFile.Addr(), 7, uintptr(s), uintptr(handle), uintptr(bytesToWrite), uintptr(bytsPerSend), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(transmitFileBuf)), uintptr(flags), 0, 0) if r1 == 0 { @@ -1576,6 +1655,30 @@ func GetConsoleMode(console Handle, mode *uint32) (err error) { return } +func SetConsoleMode(console Handle, mode uint32) (err error) { + r1, _, e1 := syscall.Syscall(procSetConsoleMode.Addr(), 2, uintptr(console), uintptr(mode), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetConsoleScreenBufferInfo(console Handle, info *ConsoleScreenBufferInfo) (err error) { + r1, _, e1 := syscall.Syscall(procGetConsoleScreenBufferInfo.Addr(), 2, uintptr(console), uintptr(unsafe.Pointer(info)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + func WriteConsole(console Handle, buf *uint16, towrite uint32, written *uint32, reserved *byte) (err error) { r1, _, e1 := syscall.Syscall6(procWriteConsoleW.Addr(), 5, uintptr(console), uintptr(unsafe.Pointer(buf)), uintptr(towrite), uintptr(unsafe.Pointer(written)), uintptr(unsafe.Pointer(reserved)), 0) if r1 == 0 { @@ -1679,7 +1782,7 @@ func GetCurrentThreadId() (id uint32) { return } -func CreateEvent(eventAttrs *syscall.SecurityAttributes, manualReset uint32, initialState uint32, name *uint16) (handle Handle, err error) { +func CreateEvent(eventAttrs *SecurityAttributes, manualReset uint32, initialState uint32, name *uint16) (handle Handle, err error) { r0, _, e1 := syscall.Syscall6(procCreateEventW.Addr(), 4, uintptr(unsafe.Pointer(eventAttrs)), uintptr(manualReset), uintptr(initialState), uintptr(unsafe.Pointer(name)), 0, 0) handle = Handle(r0) if handle == 0 { @@ -1692,6 +1795,38 @@ func CreateEvent(eventAttrs *syscall.SecurityAttributes, manualReset uint32, ini return } +func CreateEventEx(eventAttrs *SecurityAttributes, name *uint16, flags uint32, desiredAccess uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall6(procCreateEventExW.Addr(), 4, uintptr(unsafe.Pointer(eventAttrs)), uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(desiredAccess), 0, 0) + handle = Handle(r0) + if handle == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func OpenEvent(desiredAccess uint32, inheritHandle bool, name *uint16) (handle Handle, err error) { + var _p0 uint32 + if inheritHandle { + _p0 = 1 + } else { + _p0 = 0 + } + r0, _, e1 := syscall.Syscall(procOpenEventW.Addr(), 3, uintptr(desiredAccess), uintptr(_p0), uintptr(unsafe.Pointer(name))) + handle = Handle(r0) + if handle == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + func SetEvent(event Handle) (err error) { r1, _, e1 := syscall.Syscall(procSetEvent.Addr(), 1, uintptr(event), 0, 0) if r1 == 0 { @@ -1704,6 +1839,257 @@ func SetEvent(event Handle) (err error) { return } +func ResetEvent(event Handle) (err error) { + r1, _, e1 := syscall.Syscall(procResetEvent.Addr(), 1, uintptr(event), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func PulseEvent(event Handle) (err error) { + r1, _, e1 := syscall.Syscall(procPulseEvent.Addr(), 1, uintptr(event), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func DefineDosDevice(flags uint32, deviceName *uint16, targetPath *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procDefineDosDeviceW.Addr(), 3, uintptr(flags), uintptr(unsafe.Pointer(deviceName)), uintptr(unsafe.Pointer(targetPath))) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func DeleteVolumeMountPoint(volumeMountPoint *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procDeleteVolumeMountPointW.Addr(), 1, uintptr(unsafe.Pointer(volumeMountPoint)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func FindFirstVolume(volumeName *uint16, bufferLength uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procFindFirstVolumeW.Addr(), 2, uintptr(unsafe.Pointer(volumeName)), uintptr(bufferLength), 0) + handle = Handle(r0) + if handle == InvalidHandle { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func FindFirstVolumeMountPoint(rootPathName *uint16, volumeMountPoint *uint16, bufferLength uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procFindFirstVolumeMountPointW.Addr(), 3, uintptr(unsafe.Pointer(rootPathName)), uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(bufferLength)) + handle = Handle(r0) + if handle == InvalidHandle { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func FindNextVolume(findVolume Handle, volumeName *uint16, bufferLength uint32) (err error) { + r1, _, e1 := syscall.Syscall(procFindNextVolumeW.Addr(), 3, uintptr(findVolume), uintptr(unsafe.Pointer(volumeName)), uintptr(bufferLength)) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func FindNextVolumeMountPoint(findVolumeMountPoint Handle, volumeMountPoint *uint16, bufferLength uint32) (err error) { + r1, _, e1 := syscall.Syscall(procFindNextVolumeMountPointW.Addr(), 3, uintptr(findVolumeMountPoint), uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(bufferLength)) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func FindVolumeClose(findVolume Handle) (err error) { + r1, _, e1 := syscall.Syscall(procFindVolumeClose.Addr(), 1, uintptr(findVolume), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func FindVolumeMountPointClose(findVolumeMountPoint Handle) (err error) { + r1, _, e1 := syscall.Syscall(procFindVolumeMountPointClose.Addr(), 1, uintptr(findVolumeMountPoint), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetDriveType(rootPathName *uint16) (driveType uint32) { + r0, _, _ := syscall.Syscall(procGetDriveTypeW.Addr(), 1, uintptr(unsafe.Pointer(rootPathName)), 0, 0) + driveType = uint32(r0) + return +} + +func GetLogicalDrives() (drivesBitMask uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetLogicalDrives.Addr(), 0, 0, 0, 0) + drivesBitMask = uint32(r0) + if drivesBitMask == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetLogicalDriveStrings(bufferLength uint32, buffer *uint16) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetLogicalDriveStringsW.Addr(), 2, uintptr(bufferLength), uintptr(unsafe.Pointer(buffer)), 0) + n = uint32(r0) + if n == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetVolumeInformation(rootPathName *uint16, volumeNameBuffer *uint16, volumeNameSize uint32, volumeNameSerialNumber *uint32, maximumComponentLength *uint32, fileSystemFlags *uint32, fileSystemNameBuffer *uint16, fileSystemNameSize uint32) (err error) { + r1, _, e1 := syscall.Syscall9(procGetVolumeInformationW.Addr(), 8, uintptr(unsafe.Pointer(rootPathName)), uintptr(unsafe.Pointer(volumeNameBuffer)), uintptr(volumeNameSize), uintptr(unsafe.Pointer(volumeNameSerialNumber)), uintptr(unsafe.Pointer(maximumComponentLength)), uintptr(unsafe.Pointer(fileSystemFlags)), uintptr(unsafe.Pointer(fileSystemNameBuffer)), uintptr(fileSystemNameSize), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetVolumeInformationByHandle(file Handle, volumeNameBuffer *uint16, volumeNameSize uint32, volumeNameSerialNumber *uint32, maximumComponentLength *uint32, fileSystemFlags *uint32, fileSystemNameBuffer *uint16, fileSystemNameSize uint32) (err error) { + r1, _, e1 := syscall.Syscall9(procGetVolumeInformationByHandleW.Addr(), 8, uintptr(file), uintptr(unsafe.Pointer(volumeNameBuffer)), uintptr(volumeNameSize), uintptr(unsafe.Pointer(volumeNameSerialNumber)), uintptr(unsafe.Pointer(maximumComponentLength)), uintptr(unsafe.Pointer(fileSystemFlags)), uintptr(unsafe.Pointer(fileSystemNameBuffer)), uintptr(fileSystemNameSize), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetVolumeNameForVolumeMountPoint(volumeMountPoint *uint16, volumeName *uint16, bufferlength uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetVolumeNameForVolumeMountPointW.Addr(), 3, uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(unsafe.Pointer(volumeName)), uintptr(bufferlength)) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetVolumePathName(fileName *uint16, volumePathName *uint16, bufferLength uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetVolumePathNameW.Addr(), 3, uintptr(unsafe.Pointer(fileName)), uintptr(unsafe.Pointer(volumePathName)), uintptr(bufferLength)) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetVolumePathNamesForVolumeName(volumeName *uint16, volumePathNames *uint16, bufferLength uint32, returnLength *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetVolumePathNamesForVolumeNameW.Addr(), 4, uintptr(unsafe.Pointer(volumeName)), uintptr(unsafe.Pointer(volumePathNames)), uintptr(bufferLength), uintptr(unsafe.Pointer(returnLength)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func QueryDosDevice(deviceName *uint16, targetPath *uint16, max uint32) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procQueryDosDeviceW.Addr(), 3, uintptr(unsafe.Pointer(deviceName)), uintptr(unsafe.Pointer(targetPath)), uintptr(max)) + n = uint32(r0) + if n == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func SetVolumeLabel(rootPathName *uint16, volumeName *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procSetVolumeLabelW.Addr(), 2, uintptr(unsafe.Pointer(rootPathName)), uintptr(unsafe.Pointer(volumeName)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func SetVolumeMountPoint(volumeMountPoint *uint16, volumeName *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procSetVolumeMountPointW.Addr(), 2, uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(unsafe.Pointer(volumeName)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + func WSAStartup(verreq uint32, data *WSAData) (sockerr error) { r0, _, _ := syscall.Syscall(procWSAStartup.Addr(), 2, uintptr(verreq), uintptr(unsafe.Pointer(data)), 0) if r0 != 0 { @@ -2252,6 +2638,18 @@ func EqualSid(sid1 *SID, sid2 *SID) (isEqual bool) { return } +func checkTokenMembership(tokenHandle Token, sidToCheck *SID, isMember *int32) (err error) { + r1, _, e1 := syscall.Syscall(procCheckTokenMembership.Addr(), 3, uintptr(tokenHandle), uintptr(unsafe.Pointer(sidToCheck)), uintptr(unsafe.Pointer(isMember))) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + func OpenProcessToken(h Handle, access uint32, token *Token) (err error) { r1, _, e1 := syscall.Syscall(procOpenProcessToken.Addr(), 3, uintptr(h), uintptr(access), uintptr(unsafe.Pointer(token))) if r1 == 0 { diff --git a/vendor/golang.org/x/sys/windows/ztypes_windows.go b/vendor/golang.org/x/sys/windows/ztypes_windows.go deleted file mode 100644 index a907ff2..0000000 --- a/vendor/golang.org/x/sys/windows/ztypes_windows.go +++ /dev/null @@ -1,1242 +0,0 @@ -// Copyright 2011 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. - -package windows - -import "syscall" - -const ( - // Windows errors. - ERROR_FILE_NOT_FOUND syscall.Errno = 2 - ERROR_PATH_NOT_FOUND syscall.Errno = 3 - ERROR_ACCESS_DENIED syscall.Errno = 5 - ERROR_NO_MORE_FILES syscall.Errno = 18 - ERROR_HANDLE_EOF syscall.Errno = 38 - ERROR_NETNAME_DELETED syscall.Errno = 64 - ERROR_FILE_EXISTS syscall.Errno = 80 - ERROR_BROKEN_PIPE syscall.Errno = 109 - ERROR_BUFFER_OVERFLOW syscall.Errno = 111 - ERROR_INSUFFICIENT_BUFFER syscall.Errno = 122 - ERROR_MOD_NOT_FOUND syscall.Errno = 126 - ERROR_PROC_NOT_FOUND syscall.Errno = 127 - ERROR_ALREADY_EXISTS syscall.Errno = 183 - ERROR_ENVVAR_NOT_FOUND syscall.Errno = 203 - ERROR_MORE_DATA syscall.Errno = 234 - ERROR_OPERATION_ABORTED syscall.Errno = 995 - ERROR_IO_PENDING syscall.Errno = 997 - ERROR_SERVICE_SPECIFIC_ERROR syscall.Errno = 1066 - ERROR_NOT_FOUND syscall.Errno = 1168 - ERROR_PRIVILEGE_NOT_HELD syscall.Errno = 1314 - WSAEACCES syscall.Errno = 10013 - WSAECONNRESET syscall.Errno = 10054 -) - -const ( - // Invented values to support what package os expects. - O_RDONLY = 0x00000 - O_WRONLY = 0x00001 - O_RDWR = 0x00002 - O_CREAT = 0x00040 - O_EXCL = 0x00080 - O_NOCTTY = 0x00100 - O_TRUNC = 0x00200 - O_NONBLOCK = 0x00800 - O_APPEND = 0x00400 - O_SYNC = 0x01000 - O_ASYNC = 0x02000 - O_CLOEXEC = 0x80000 -) - -const ( - // More invented values for signals - SIGHUP = Signal(0x1) - SIGINT = Signal(0x2) - SIGQUIT = Signal(0x3) - SIGILL = Signal(0x4) - SIGTRAP = Signal(0x5) - SIGABRT = Signal(0x6) - SIGBUS = Signal(0x7) - SIGFPE = Signal(0x8) - SIGKILL = Signal(0x9) - SIGSEGV = Signal(0xb) - SIGPIPE = Signal(0xd) - SIGALRM = Signal(0xe) - SIGTERM = Signal(0xf) -) - -var signals = [...]string{ - 1: "hangup", - 2: "interrupt", - 3: "quit", - 4: "illegal instruction", - 5: "trace/breakpoint trap", - 6: "aborted", - 7: "bus error", - 8: "floating point exception", - 9: "killed", - 10: "user defined signal 1", - 11: "segmentation fault", - 12: "user defined signal 2", - 13: "broken pipe", - 14: "alarm clock", - 15: "terminated", -} - -const ( - GENERIC_READ = 0x80000000 - GENERIC_WRITE = 0x40000000 - GENERIC_EXECUTE = 0x20000000 - GENERIC_ALL = 0x10000000 - - FILE_LIST_DIRECTORY = 0x00000001 - FILE_APPEND_DATA = 0x00000004 - FILE_WRITE_ATTRIBUTES = 0x00000100 - - FILE_SHARE_READ = 0x00000001 - FILE_SHARE_WRITE = 0x00000002 - FILE_SHARE_DELETE = 0x00000004 - FILE_ATTRIBUTE_READONLY = 0x00000001 - FILE_ATTRIBUTE_HIDDEN = 0x00000002 - FILE_ATTRIBUTE_SYSTEM = 0x00000004 - FILE_ATTRIBUTE_DIRECTORY = 0x00000010 - FILE_ATTRIBUTE_ARCHIVE = 0x00000020 - FILE_ATTRIBUTE_NORMAL = 0x00000080 - FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400 - - INVALID_FILE_ATTRIBUTES = 0xffffffff - - CREATE_NEW = 1 - CREATE_ALWAYS = 2 - OPEN_EXISTING = 3 - OPEN_ALWAYS = 4 - TRUNCATE_EXISTING = 5 - - FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000 - FILE_FLAG_BACKUP_SEMANTICS = 0x02000000 - FILE_FLAG_OVERLAPPED = 0x40000000 - - HANDLE_FLAG_INHERIT = 0x00000001 - STARTF_USESTDHANDLES = 0x00000100 - STARTF_USESHOWWINDOW = 0x00000001 - DUPLICATE_CLOSE_SOURCE = 0x00000001 - DUPLICATE_SAME_ACCESS = 0x00000002 - - STD_INPUT_HANDLE = -10 & (1<<32 - 1) - STD_OUTPUT_HANDLE = -11 & (1<<32 - 1) - STD_ERROR_HANDLE = -12 & (1<<32 - 1) - - FILE_BEGIN = 0 - FILE_CURRENT = 1 - FILE_END = 2 - - LANG_ENGLISH = 0x09 - SUBLANG_ENGLISH_US = 0x01 - - FORMAT_MESSAGE_ALLOCATE_BUFFER = 256 - FORMAT_MESSAGE_IGNORE_INSERTS = 512 - FORMAT_MESSAGE_FROM_STRING = 1024 - FORMAT_MESSAGE_FROM_HMODULE = 2048 - FORMAT_MESSAGE_FROM_SYSTEM = 4096 - FORMAT_MESSAGE_ARGUMENT_ARRAY = 8192 - FORMAT_MESSAGE_MAX_WIDTH_MASK = 255 - - MAX_PATH = 260 - MAX_LONG_PATH = 32768 - - MAX_COMPUTERNAME_LENGTH = 15 - - TIME_ZONE_ID_UNKNOWN = 0 - TIME_ZONE_ID_STANDARD = 1 - - TIME_ZONE_ID_DAYLIGHT = 2 - IGNORE = 0 - INFINITE = 0xffffffff - - WAIT_TIMEOUT = 258 - WAIT_ABANDONED = 0x00000080 - WAIT_OBJECT_0 = 0x00000000 - WAIT_FAILED = 0xFFFFFFFF - - CREATE_NEW_PROCESS_GROUP = 0x00000200 - CREATE_UNICODE_ENVIRONMENT = 0x00000400 - - PROCESS_TERMINATE = 1 - PROCESS_QUERY_INFORMATION = 0x00000400 - SYNCHRONIZE = 0x00100000 - - PAGE_READONLY = 0x02 - PAGE_READWRITE = 0x04 - PAGE_WRITECOPY = 0x08 - PAGE_EXECUTE_READ = 0x20 - PAGE_EXECUTE_READWRITE = 0x40 - PAGE_EXECUTE_WRITECOPY = 0x80 - - FILE_MAP_COPY = 0x01 - FILE_MAP_WRITE = 0x02 - FILE_MAP_READ = 0x04 - FILE_MAP_EXECUTE = 0x20 - - CTRL_C_EVENT = 0 - CTRL_BREAK_EVENT = 1 - - // Windows reserves errors >= 1<<29 for application use. - APPLICATION_ERROR = 1 << 29 -) - -const ( - // flags for CreateToolhelp32Snapshot - TH32CS_SNAPHEAPLIST = 0x01 - TH32CS_SNAPPROCESS = 0x02 - TH32CS_SNAPTHREAD = 0x04 - TH32CS_SNAPMODULE = 0x08 - TH32CS_SNAPMODULE32 = 0x10 - TH32CS_SNAPALL = TH32CS_SNAPHEAPLIST | TH32CS_SNAPMODULE | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD - TH32CS_INHERIT = 0x80000000 -) - -const ( - // filters for ReadDirectoryChangesW - FILE_NOTIFY_CHANGE_FILE_NAME = 0x001 - FILE_NOTIFY_CHANGE_DIR_NAME = 0x002 - FILE_NOTIFY_CHANGE_ATTRIBUTES = 0x004 - FILE_NOTIFY_CHANGE_SIZE = 0x008 - FILE_NOTIFY_CHANGE_LAST_WRITE = 0x010 - FILE_NOTIFY_CHANGE_LAST_ACCESS = 0x020 - FILE_NOTIFY_CHANGE_CREATION = 0x040 - FILE_NOTIFY_CHANGE_SECURITY = 0x100 -) - -const ( - // do not reorder - FILE_ACTION_ADDED = iota + 1 - FILE_ACTION_REMOVED - FILE_ACTION_MODIFIED - FILE_ACTION_RENAMED_OLD_NAME - FILE_ACTION_RENAMED_NEW_NAME -) - -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 - CRYPT_VERIFYCONTEXT = 0xF0000000 - CRYPT_NEWKEYSET = 0x00000008 - CRYPT_DELETEKEYSET = 0x00000010 - CRYPT_MACHINE_KEYSET = 0x00000020 - CRYPT_SILENT = 0x00000040 - CRYPT_DEFAULT_CONTAINER_OPTIONAL = 0x00000080 - - USAGE_MATCH_TYPE_AND = 0 - USAGE_MATCH_TYPE_OR = 1 - - X509_ASN_ENCODING = 0x00000001 - PKCS_7_ASN_ENCODING = 0x00010000 - - CERT_STORE_PROV_MEMORY = 2 - - CERT_STORE_ADD_ALWAYS = 4 - - CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG = 0x00000004 - - CERT_TRUST_NO_ERROR = 0x00000000 - CERT_TRUST_IS_NOT_TIME_VALID = 0x00000001 - CERT_TRUST_IS_REVOKED = 0x00000004 - CERT_TRUST_IS_NOT_SIGNATURE_VALID = 0x00000008 - CERT_TRUST_IS_NOT_VALID_FOR_USAGE = 0x00000010 - CERT_TRUST_IS_UNTRUSTED_ROOT = 0x00000020 - CERT_TRUST_REVOCATION_STATUS_UNKNOWN = 0x00000040 - CERT_TRUST_IS_CYCLIC = 0x00000080 - CERT_TRUST_INVALID_EXTENSION = 0x00000100 - CERT_TRUST_INVALID_POLICY_CONSTRAINTS = 0x00000200 - CERT_TRUST_INVALID_BASIC_CONSTRAINTS = 0x00000400 - CERT_TRUST_INVALID_NAME_CONSTRAINTS = 0x00000800 - CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT = 0x00001000 - CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT = 0x00002000 - CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT = 0x00004000 - CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT = 0x00008000 - CERT_TRUST_IS_OFFLINE_REVOCATION = 0x01000000 - CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY = 0x02000000 - CERT_TRUST_IS_EXPLICIT_DISTRUST = 0x04000000 - CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT = 0x08000000 - - CERT_CHAIN_POLICY_BASE = 1 - CERT_CHAIN_POLICY_AUTHENTICODE = 2 - CERT_CHAIN_POLICY_AUTHENTICODE_TS = 3 - CERT_CHAIN_POLICY_SSL = 4 - CERT_CHAIN_POLICY_BASIC_CONSTRAINTS = 5 - CERT_CHAIN_POLICY_NT_AUTH = 6 - CERT_CHAIN_POLICY_MICROSOFT_ROOT = 7 - CERT_CHAIN_POLICY_EV = 8 - - CERT_E_EXPIRED = 0x800B0101 - CERT_E_ROLE = 0x800B0103 - CERT_E_PURPOSE = 0x800B0106 - CERT_E_UNTRUSTEDROOT = 0x800B0109 - CERT_E_CN_NO_MATCH = 0x800B010F - - AUTHTYPE_CLIENT = 1 - AUTHTYPE_SERVER = 2 -) - -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") -) - -// Invented values to support what package os expects. -type Timeval struct { - Sec int32 - Usec int32 -} - -func (tv *Timeval) Nanoseconds() int64 { - return (int64(tv.Sec)*1e6 + int64(tv.Usec)) * 1e3 -} - -func NsecToTimeval(nsec int64) (tv Timeval) { - tv.Sec = int32(nsec / 1e9) - tv.Usec = int32(nsec % 1e9 / 1e3) - return -} - -type SecurityAttributes struct { - Length uint32 - SecurityDescriptor uintptr - InheritHandle uint32 -} - -type Overlapped struct { - Internal uintptr - InternalHigh uintptr - Offset uint32 - OffsetHigh uint32 - HEvent Handle -} - -type FileNotifyInformation struct { - NextEntryOffset uint32 - Action uint32 - FileNameLength uint32 - FileName uint16 -} - -type Filetime struct { - LowDateTime uint32 - HighDateTime uint32 -} - -// Nanoseconds returns Filetime ft in nanoseconds -// since Epoch (00:00:00 UTC, January 1, 1970). -func (ft *Filetime) Nanoseconds() int64 { - // 100-nanosecond intervals since January 1, 1601 - nsec := int64(ft.HighDateTime)<<32 + int64(ft.LowDateTime) - // change starting time to the Epoch (00:00:00 UTC, January 1, 1970) - nsec -= 116444736000000000 - // convert into nanoseconds - nsec *= 100 - return nsec -} - -func NsecToFiletime(nsec int64) (ft Filetime) { - // convert into 100-nanosecond - nsec /= 100 - // change starting time to January 1, 1601 - nsec += 116444736000000000 - // split into high / low - ft.LowDateTime = uint32(nsec & 0xffffffff) - ft.HighDateTime = uint32(nsec >> 32 & 0xffffffff) - return ft -} - -type Win32finddata struct { - FileAttributes uint32 - CreationTime Filetime - LastAccessTime Filetime - LastWriteTime Filetime - FileSizeHigh uint32 - FileSizeLow uint32 - Reserved0 uint32 - Reserved1 uint32 - FileName [MAX_PATH - 1]uint16 - AlternateFileName [13]uint16 -} - -// This is the actual system call structure. -// Win32finddata is what we committed to in Go 1. -type win32finddata1 struct { - FileAttributes uint32 - CreationTime Filetime - LastAccessTime Filetime - LastWriteTime Filetime - FileSizeHigh uint32 - FileSizeLow uint32 - Reserved0 uint32 - Reserved1 uint32 - FileName [MAX_PATH]uint16 - AlternateFileName [14]uint16 -} - -func copyFindData(dst *Win32finddata, src *win32finddata1) { - dst.FileAttributes = src.FileAttributes - dst.CreationTime = src.CreationTime - dst.LastAccessTime = src.LastAccessTime - dst.LastWriteTime = src.LastWriteTime - dst.FileSizeHigh = src.FileSizeHigh - dst.FileSizeLow = src.FileSizeLow - dst.Reserved0 = src.Reserved0 - dst.Reserved1 = src.Reserved1 - - // The src is 1 element bigger than dst, but it must be NUL. - copy(dst.FileName[:], src.FileName[:]) - copy(dst.AlternateFileName[:], src.AlternateFileName[:]) -} - -type ByHandleFileInformation struct { - FileAttributes uint32 - CreationTime Filetime - LastAccessTime Filetime - LastWriteTime Filetime - VolumeSerialNumber uint32 - FileSizeHigh uint32 - FileSizeLow uint32 - NumberOfLinks uint32 - FileIndexHigh uint32 - FileIndexLow uint32 -} - -const ( - GetFileExInfoStandard = 0 - GetFileExMaxInfoLevel = 1 -) - -type Win32FileAttributeData struct { - FileAttributes uint32 - CreationTime Filetime - LastAccessTime Filetime - LastWriteTime Filetime - FileSizeHigh uint32 - FileSizeLow uint32 -} - -// ShowWindow constants -const ( - // winuser.h - SW_HIDE = 0 - SW_NORMAL = 1 - SW_SHOWNORMAL = 1 - SW_SHOWMINIMIZED = 2 - SW_SHOWMAXIMIZED = 3 - SW_MAXIMIZE = 3 - SW_SHOWNOACTIVATE = 4 - SW_SHOW = 5 - SW_MINIMIZE = 6 - SW_SHOWMINNOACTIVE = 7 - SW_SHOWNA = 8 - SW_RESTORE = 9 - SW_SHOWDEFAULT = 10 - SW_FORCEMINIMIZE = 11 -) - -type StartupInfo struct { - Cb uint32 - _ *uint16 - Desktop *uint16 - Title *uint16 - X uint32 - Y uint32 - XSize uint32 - YSize uint32 - XCountChars uint32 - YCountChars uint32 - FillAttribute uint32 - Flags uint32 - ShowWindow uint16 - _ uint16 - _ *byte - StdInput Handle - StdOutput Handle - StdErr Handle -} - -type ProcessInformation struct { - Process Handle - Thread Handle - ProcessId uint32 - ThreadId uint32 -} - -type ProcessEntry32 struct { - Size uint32 - Usage uint32 - ProcessID uint32 - DefaultHeapID uintptr - ModuleID uint32 - Threads uint32 - ParentProcessID uint32 - PriClassBase int32 - Flags uint32 - ExeFile [MAX_PATH]uint16 -} - -type Systemtime struct { - Year uint16 - Month uint16 - DayOfWeek uint16 - Day uint16 - Hour uint16 - Minute uint16 - Second uint16 - Milliseconds uint16 -} - -type Timezoneinformation struct { - Bias int32 - StandardName [32]uint16 - StandardDate Systemtime - StandardBias int32 - DaylightName [32]uint16 - DaylightDate Systemtime - DaylightBias int32 -} - -// Socket related. - -const ( - AF_UNSPEC = 0 - AF_UNIX = 1 - AF_INET = 2 - AF_INET6 = 23 - AF_NETBIOS = 17 - - SOCK_STREAM = 1 - SOCK_DGRAM = 2 - SOCK_RAW = 3 - SOCK_SEQPACKET = 5 - - IPPROTO_IP = 0 - IPPROTO_IPV6 = 0x29 - IPPROTO_TCP = 6 - IPPROTO_UDP = 17 - - SOL_SOCKET = 0xffff - SO_REUSEADDR = 4 - SO_KEEPALIVE = 8 - SO_DONTROUTE = 16 - SO_BROADCAST = 32 - SO_LINGER = 128 - SO_RCVBUF = 0x1002 - SO_SNDBUF = 0x1001 - SO_UPDATE_ACCEPT_CONTEXT = 0x700b - SO_UPDATE_CONNECT_CONTEXT = 0x7010 - - IOC_OUT = 0x40000000 - IOC_IN = 0x80000000 - IOC_VENDOR = 0x18000000 - IOC_INOUT = IOC_IN | IOC_OUT - IOC_WS2 = 0x08000000 - SIO_GET_EXTENSION_FUNCTION_POINTER = IOC_INOUT | IOC_WS2 | 6 - SIO_KEEPALIVE_VALS = IOC_IN | IOC_VENDOR | 4 - SIO_UDP_CONNRESET = IOC_IN | IOC_VENDOR | 12 - - // cf. http://support.microsoft.com/default.aspx?scid=kb;en-us;257460 - - IP_TOS = 0x3 - IP_TTL = 0x4 - IP_MULTICAST_IF = 0x9 - IP_MULTICAST_TTL = 0xa - IP_MULTICAST_LOOP = 0xb - IP_ADD_MEMBERSHIP = 0xc - IP_DROP_MEMBERSHIP = 0xd - - IPV6_V6ONLY = 0x1b - IPV6_UNICAST_HOPS = 0x4 - IPV6_MULTICAST_IF = 0x9 - IPV6_MULTICAST_HOPS = 0xa - IPV6_MULTICAST_LOOP = 0xb - IPV6_JOIN_GROUP = 0xc - IPV6_LEAVE_GROUP = 0xd - - SOMAXCONN = 0x7fffffff - - TCP_NODELAY = 1 - - SHUT_RD = 0 - SHUT_WR = 1 - SHUT_RDWR = 2 - - WSADESCRIPTION_LEN = 256 - WSASYS_STATUS_LEN = 128 -) - -type WSABuf struct { - Len uint32 - Buf *byte -} - -// Invented values to support what package os expects. -const ( - S_IFMT = 0x1f000 - S_IFIFO = 0x1000 - S_IFCHR = 0x2000 - S_IFDIR = 0x4000 - S_IFBLK = 0x6000 - S_IFREG = 0x8000 - S_IFLNK = 0xa000 - S_IFSOCK = 0xc000 - S_ISUID = 0x800 - S_ISGID = 0x400 - S_ISVTX = 0x200 - S_IRUSR = 0x100 - S_IWRITE = 0x80 - S_IWUSR = 0x80 - S_IXUSR = 0x40 -) - -const ( - FILE_TYPE_CHAR = 0x0002 - FILE_TYPE_DISK = 0x0001 - FILE_TYPE_PIPE = 0x0003 - FILE_TYPE_REMOTE = 0x8000 - FILE_TYPE_UNKNOWN = 0x0000 -) - -type Hostent struct { - Name *byte - Aliases **byte - AddrType uint16 - Length uint16 - AddrList **byte -} - -type Protoent struct { - Name *byte - Aliases **byte - Proto uint16 -} - -const ( - DNS_TYPE_A = 0x0001 - DNS_TYPE_NS = 0x0002 - DNS_TYPE_MD = 0x0003 - DNS_TYPE_MF = 0x0004 - DNS_TYPE_CNAME = 0x0005 - DNS_TYPE_SOA = 0x0006 - DNS_TYPE_MB = 0x0007 - DNS_TYPE_MG = 0x0008 - DNS_TYPE_MR = 0x0009 - DNS_TYPE_NULL = 0x000a - DNS_TYPE_WKS = 0x000b - DNS_TYPE_PTR = 0x000c - DNS_TYPE_HINFO = 0x000d - DNS_TYPE_MINFO = 0x000e - DNS_TYPE_MX = 0x000f - DNS_TYPE_TEXT = 0x0010 - DNS_TYPE_RP = 0x0011 - DNS_TYPE_AFSDB = 0x0012 - DNS_TYPE_X25 = 0x0013 - DNS_TYPE_ISDN = 0x0014 - DNS_TYPE_RT = 0x0015 - DNS_TYPE_NSAP = 0x0016 - DNS_TYPE_NSAPPTR = 0x0017 - DNS_TYPE_SIG = 0x0018 - DNS_TYPE_KEY = 0x0019 - DNS_TYPE_PX = 0x001a - DNS_TYPE_GPOS = 0x001b - DNS_TYPE_AAAA = 0x001c - DNS_TYPE_LOC = 0x001d - DNS_TYPE_NXT = 0x001e - DNS_TYPE_EID = 0x001f - DNS_TYPE_NIMLOC = 0x0020 - DNS_TYPE_SRV = 0x0021 - DNS_TYPE_ATMA = 0x0022 - DNS_TYPE_NAPTR = 0x0023 - DNS_TYPE_KX = 0x0024 - DNS_TYPE_CERT = 0x0025 - DNS_TYPE_A6 = 0x0026 - DNS_TYPE_DNAME = 0x0027 - DNS_TYPE_SINK = 0x0028 - DNS_TYPE_OPT = 0x0029 - DNS_TYPE_DS = 0x002B - DNS_TYPE_RRSIG = 0x002E - DNS_TYPE_NSEC = 0x002F - DNS_TYPE_DNSKEY = 0x0030 - DNS_TYPE_DHCID = 0x0031 - DNS_TYPE_UINFO = 0x0064 - DNS_TYPE_UID = 0x0065 - DNS_TYPE_GID = 0x0066 - DNS_TYPE_UNSPEC = 0x0067 - DNS_TYPE_ADDRS = 0x00f8 - DNS_TYPE_TKEY = 0x00f9 - DNS_TYPE_TSIG = 0x00fa - DNS_TYPE_IXFR = 0x00fb - DNS_TYPE_AXFR = 0x00fc - DNS_TYPE_MAILB = 0x00fd - DNS_TYPE_MAILA = 0x00fe - DNS_TYPE_ALL = 0x00ff - DNS_TYPE_ANY = 0x00ff - DNS_TYPE_WINS = 0xff01 - DNS_TYPE_WINSR = 0xff02 - DNS_TYPE_NBSTAT = 0xff01 -) - -const ( - DNS_INFO_NO_RECORDS = 0x251D -) - -const ( - // flags inside DNSRecord.Dw - DnsSectionQuestion = 0x0000 - DnsSectionAnswer = 0x0001 - DnsSectionAuthority = 0x0002 - DnsSectionAdditional = 0x0003 -) - -type DNSSRVData struct { - Target *uint16 - Priority uint16 - Weight uint16 - Port uint16 - Pad uint16 -} - -type DNSPTRData struct { - Host *uint16 -} - -type DNSMXData struct { - NameExchange *uint16 - Preference uint16 - Pad uint16 -} - -type DNSTXTData struct { - StringCount uint16 - StringArray [1]*uint16 -} - -type DNSRecord struct { - Next *DNSRecord - Name *uint16 - Type uint16 - Length uint16 - Dw uint32 - Ttl uint32 - Reserved uint32 - Data [40]byte -} - -const ( - TF_DISCONNECT = 1 - TF_REUSE_SOCKET = 2 - TF_WRITE_BEHIND = 4 - TF_USE_DEFAULT_WORKER = 0 - TF_USE_SYSTEM_THREAD = 16 - TF_USE_KERNEL_APC = 32 -) - -type TransmitFileBuffers struct { - Head uintptr - HeadLength uint32 - Tail uintptr - TailLength uint32 -} - -const ( - IFF_UP = 1 - IFF_BROADCAST = 2 - IFF_LOOPBACK = 4 - IFF_POINTTOPOINT = 8 - IFF_MULTICAST = 16 -) - -const SIO_GET_INTERFACE_LIST = 0x4004747F - -// TODO(mattn): SockaddrGen is union of sockaddr/sockaddr_in/sockaddr_in6_old. -// will be fixed to change variable type as suitable. - -type SockaddrGen [24]byte - -type InterfaceInfo struct { - Flags uint32 - Address SockaddrGen - BroadcastAddress SockaddrGen - Netmask SockaddrGen -} - -type IpAddressString struct { - String [16]byte -} - -type IpMaskString IpAddressString - -type IpAddrString struct { - Next *IpAddrString - IpAddress IpAddressString - IpMask IpMaskString - Context uint32 -} - -const MAX_ADAPTER_NAME_LENGTH = 256 -const MAX_ADAPTER_DESCRIPTION_LENGTH = 128 -const MAX_ADAPTER_ADDRESS_LENGTH = 8 - -type IpAdapterInfo struct { - Next *IpAdapterInfo - ComboIndex uint32 - AdapterName [MAX_ADAPTER_NAME_LENGTH + 4]byte - Description [MAX_ADAPTER_DESCRIPTION_LENGTH + 4]byte - AddressLength uint32 - Address [MAX_ADAPTER_ADDRESS_LENGTH]byte - Index uint32 - Type uint32 - DhcpEnabled uint32 - CurrentIpAddress *IpAddrString - IpAddressList IpAddrString - GatewayList IpAddrString - DhcpServer IpAddrString - HaveWins bool - PrimaryWinsServer IpAddrString - SecondaryWinsServer IpAddrString - LeaseObtained int64 - LeaseExpires int64 -} - -const MAXLEN_PHYSADDR = 8 -const MAX_INTERFACE_NAME_LEN = 256 -const MAXLEN_IFDESCR = 256 - -type MibIfRow struct { - Name [MAX_INTERFACE_NAME_LEN]uint16 - Index uint32 - Type uint32 - Mtu uint32 - Speed uint32 - PhysAddrLen uint32 - PhysAddr [MAXLEN_PHYSADDR]byte - AdminStatus uint32 - OperStatus uint32 - LastChange uint32 - InOctets uint32 - InUcastPkts uint32 - InNUcastPkts uint32 - InDiscards uint32 - InErrors uint32 - InUnknownProtos uint32 - OutOctets uint32 - OutUcastPkts uint32 - OutNUcastPkts uint32 - OutDiscards uint32 - OutErrors uint32 - OutQLen uint32 - DescrLen uint32 - Descr [MAXLEN_IFDESCR]byte -} - -type CertContext struct { - EncodingType uint32 - EncodedCert *byte - Length uint32 - CertInfo uintptr - Store Handle -} - -type CertChainContext struct { - Size uint32 - TrustStatus CertTrustStatus - ChainCount uint32 - Chains **CertSimpleChain - LowerQualityChainCount uint32 - LowerQualityChains **CertChainContext - HasRevocationFreshnessTime uint32 - RevocationFreshnessTime uint32 -} - -type CertSimpleChain struct { - Size uint32 - TrustStatus CertTrustStatus - NumElements uint32 - Elements **CertChainElement - TrustListInfo uintptr - HasRevocationFreshnessTime uint32 - RevocationFreshnessTime uint32 -} - -type CertChainElement struct { - Size uint32 - CertContext *CertContext - TrustStatus CertTrustStatus - RevocationInfo *CertRevocationInfo - IssuanceUsage *CertEnhKeyUsage - ApplicationUsage *CertEnhKeyUsage - ExtendedErrorInfo *uint16 -} - -type CertRevocationInfo struct { - Size uint32 - RevocationResult uint32 - RevocationOid *byte - OidSpecificInfo uintptr - HasFreshnessTime uint32 - FreshnessTime uint32 - CrlInfo uintptr // *CertRevocationCrlInfo -} - -type CertTrustStatus struct { - ErrorStatus uint32 - InfoStatus uint32 -} - -type CertUsageMatch struct { - Type uint32 - Usage CertEnhKeyUsage -} - -type CertEnhKeyUsage struct { - Length uint32 - UsageIdentifiers **byte -} - -type CertChainPara struct { - Size uint32 - RequestedUsage CertUsageMatch - RequstedIssuancePolicy CertUsageMatch - URLRetrievalTimeout uint32 - CheckRevocationFreshnessTime uint32 - RevocationFreshnessTime uint32 - CacheResync *Filetime -} - -type CertChainPolicyPara struct { - Size uint32 - Flags uint32 - ExtraPolicyPara uintptr -} - -type SSLExtraCertChainPolicyPara struct { - Size uint32 - AuthType uint32 - Checks uint32 - ServerName *uint16 -} - -type CertChainPolicyStatus struct { - Size uint32 - Error uint32 - ChainIndex uint32 - ElementIndex uint32 - ExtraPolicyStatus uintptr -} - -const ( - // do not reorder - HKEY_CLASSES_ROOT = 0x80000000 + iota - HKEY_CURRENT_USER - HKEY_LOCAL_MACHINE - HKEY_USERS - HKEY_PERFORMANCE_DATA - HKEY_CURRENT_CONFIG - HKEY_DYN_DATA - - KEY_QUERY_VALUE = 1 - KEY_SET_VALUE = 2 - KEY_CREATE_SUB_KEY = 4 - KEY_ENUMERATE_SUB_KEYS = 8 - KEY_NOTIFY = 16 - KEY_CREATE_LINK = 32 - KEY_WRITE = 0x20006 - KEY_EXECUTE = 0x20019 - KEY_READ = 0x20019 - KEY_WOW64_64KEY = 0x0100 - KEY_WOW64_32KEY = 0x0200 - KEY_ALL_ACCESS = 0xf003f -) - -const ( - // do not reorder - REG_NONE = iota - REG_SZ - REG_EXPAND_SZ - REG_BINARY - REG_DWORD_LITTLE_ENDIAN - REG_DWORD_BIG_ENDIAN - REG_LINK - REG_MULTI_SZ - REG_RESOURCE_LIST - REG_FULL_RESOURCE_DESCRIPTOR - REG_RESOURCE_REQUIREMENTS_LIST - REG_QWORD_LITTLE_ENDIAN - REG_DWORD = REG_DWORD_LITTLE_ENDIAN - REG_QWORD = REG_QWORD_LITTLE_ENDIAN -) - -type AddrinfoW struct { - Flags int32 - Family int32 - Socktype int32 - Protocol int32 - Addrlen uintptr - Canonname *uint16 - Addr uintptr - Next *AddrinfoW -} - -const ( - AI_PASSIVE = 1 - AI_CANONNAME = 2 - AI_NUMERICHOST = 4 -) - -type GUID struct { - Data1 uint32 - Data2 uint16 - Data3 uint16 - Data4 [8]byte -} - -var WSAID_CONNECTEX = GUID{ - 0x25a207b9, - 0xddf3, - 0x4660, - [8]byte{0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e}, -} - -const ( - FILE_SKIP_COMPLETION_PORT_ON_SUCCESS = 1 - FILE_SKIP_SET_EVENT_ON_HANDLE = 2 -) - -const ( - WSAPROTOCOL_LEN = 255 - MAX_PROTOCOL_CHAIN = 7 - BASE_PROTOCOL = 1 - LAYERED_PROTOCOL = 0 - - XP1_CONNECTIONLESS = 0x00000001 - XP1_GUARANTEED_DELIVERY = 0x00000002 - XP1_GUARANTEED_ORDER = 0x00000004 - XP1_MESSAGE_ORIENTED = 0x00000008 - XP1_PSEUDO_STREAM = 0x00000010 - XP1_GRACEFUL_CLOSE = 0x00000020 - XP1_EXPEDITED_DATA = 0x00000040 - XP1_CONNECT_DATA = 0x00000080 - XP1_DISCONNECT_DATA = 0x00000100 - XP1_SUPPORT_BROADCAST = 0x00000200 - XP1_SUPPORT_MULTIPOINT = 0x00000400 - XP1_MULTIPOINT_CONTROL_PLANE = 0x00000800 - XP1_MULTIPOINT_DATA_PLANE = 0x00001000 - XP1_QOS_SUPPORTED = 0x00002000 - XP1_UNI_SEND = 0x00008000 - XP1_UNI_RECV = 0x00010000 - XP1_IFS_HANDLES = 0x00020000 - XP1_PARTIAL_MESSAGE = 0x00040000 - XP1_SAN_SUPPORT_SDP = 0x00080000 - - PFL_MULTIPLE_PROTO_ENTRIES = 0x00000001 - PFL_RECOMMENDED_PROTO_ENTRY = 0x00000002 - PFL_HIDDEN = 0x00000004 - PFL_MATCHES_PROTOCOL_ZERO = 0x00000008 - PFL_NETWORKDIRECT_PROVIDER = 0x00000010 -) - -type WSAProtocolInfo struct { - ServiceFlags1 uint32 - ServiceFlags2 uint32 - ServiceFlags3 uint32 - ServiceFlags4 uint32 - ProviderFlags uint32 - ProviderId GUID - CatalogEntryId uint32 - ProtocolChain WSAProtocolChain - Version int32 - AddressFamily int32 - MaxSockAddr int32 - MinSockAddr int32 - SocketType int32 - Protocol int32 - ProtocolMaxOffset int32 - NetworkByteOrder int32 - SecurityScheme int32 - MessageSize uint32 - ProviderReserved uint32 - ProtocolName [WSAPROTOCOL_LEN + 1]uint16 -} - -type WSAProtocolChain struct { - ChainLen int32 - ChainEntries [MAX_PROTOCOL_CHAIN]uint32 -} - -type TCPKeepalive struct { - OnOff uint32 - Time uint32 - Interval uint32 -} - -type symbolicLinkReparseBuffer struct { - SubstituteNameOffset uint16 - SubstituteNameLength uint16 - PrintNameOffset uint16 - PrintNameLength uint16 - Flags uint32 - PathBuffer [1]uint16 -} - -type mountPointReparseBuffer struct { - SubstituteNameOffset uint16 - SubstituteNameLength uint16 - PrintNameOffset uint16 - PrintNameLength uint16 - PathBuffer [1]uint16 -} - -type reparseDataBuffer struct { - ReparseTag uint32 - ReparseDataLength uint16 - Reserved uint16 - - // GenericReparseBuffer - reparseBuffer byte -} - -const ( - FSCTL_GET_REPARSE_POINT = 0x900A8 - MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 16 * 1024 - IO_REPARSE_TAG_MOUNT_POINT = 0xA0000003 - IO_REPARSE_TAG_SYMLINK = 0xA000000C - SYMBOLIC_LINK_FLAG_DIRECTORY = 0x1 -) - -const ( - ComputerNameNetBIOS = 0 - ComputerNameDnsHostname = 1 - ComputerNameDnsDomain = 2 - ComputerNameDnsFullyQualified = 3 - ComputerNamePhysicalNetBIOS = 4 - ComputerNamePhysicalDnsHostname = 5 - ComputerNamePhysicalDnsDomain = 6 - ComputerNamePhysicalDnsFullyQualified = 7 - ComputerNameMax = 8 -) - -const ( - MOVEFILE_REPLACE_EXISTING = 0x1 - MOVEFILE_COPY_ALLOWED = 0x2 - MOVEFILE_DELAY_UNTIL_REBOOT = 0x4 - MOVEFILE_WRITE_THROUGH = 0x8 - MOVEFILE_CREATE_HARDLINK = 0x10 - MOVEFILE_FAIL_IF_NOT_TRACKABLE = 0x20 -) - -const GAA_FLAG_INCLUDE_PREFIX = 0x00000010 - -const ( - IF_TYPE_OTHER = 1 - IF_TYPE_ETHERNET_CSMACD = 6 - IF_TYPE_ISO88025_TOKENRING = 9 - IF_TYPE_PPP = 23 - IF_TYPE_SOFTWARE_LOOPBACK = 24 - IF_TYPE_ATM = 37 - IF_TYPE_IEEE80211 = 71 - IF_TYPE_TUNNEL = 131 - IF_TYPE_IEEE1394 = 144 -) - -type SocketAddress struct { - Sockaddr *syscall.RawSockaddrAny - SockaddrLength int32 -} - -type IpAdapterUnicastAddress struct { - Length uint32 - Flags uint32 - Next *IpAdapterUnicastAddress - Address SocketAddress - PrefixOrigin int32 - SuffixOrigin int32 - DadState int32 - ValidLifetime uint32 - PreferredLifetime uint32 - LeaseLifetime uint32 - OnLinkPrefixLength uint8 -} - -type IpAdapterAnycastAddress struct { - Length uint32 - Flags uint32 - Next *IpAdapterAnycastAddress - Address SocketAddress -} - -type IpAdapterMulticastAddress struct { - Length uint32 - Flags uint32 - Next *IpAdapterMulticastAddress - Address SocketAddress -} - -type IpAdapterDnsServerAdapter struct { - Length uint32 - Reserved uint32 - Next *IpAdapterDnsServerAdapter - Address SocketAddress -} - -type IpAdapterPrefix struct { - Length uint32 - Flags uint32 - Next *IpAdapterPrefix - Address SocketAddress - PrefixLength uint32 -} - -type IpAdapterAddresses struct { - Length uint32 - IfIndex uint32 - Next *IpAdapterAddresses - AdapterName *byte - FirstUnicastAddress *IpAdapterUnicastAddress - FirstAnycastAddress *IpAdapterAnycastAddress - FirstMulticastAddress *IpAdapterMulticastAddress - FirstDnsServerAddress *IpAdapterDnsServerAdapter - DnsSuffix *uint16 - Description *uint16 - FriendlyName *uint16 - PhysicalAddress [syscall.MAX_ADAPTER_ADDRESS_LENGTH]byte - PhysicalAddressLength uint32 - Flags uint32 - Mtu uint32 - IfType uint32 - OperStatus uint32 - Ipv6IfIndex uint32 - ZoneIndices [16]uint32 - FirstPrefix *IpAdapterPrefix - /* more fields might be present here. */ -} - -const ( - IfOperStatusUp = 1 - IfOperStatusDown = 2 - IfOperStatusTesting = 3 - IfOperStatusUnknown = 4 - IfOperStatusDormant = 5 - IfOperStatusNotPresent = 6 - IfOperStatusLowerLayerDown = 7 -) diff --git a/vendor/golang.org/x/sys/windows/ztypes_windows_386.go b/vendor/golang.org/x/sys/windows/ztypes_windows_386.go deleted file mode 100644 index 10f33be..0000000 --- a/vendor/golang.org/x/sys/windows/ztypes_windows_386.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2011 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. - -package windows - -type WSAData struct { - Version uint16 - HighVersion uint16 - Description [WSADESCRIPTION_LEN + 1]byte - SystemStatus [WSASYS_STATUS_LEN + 1]byte - MaxSockets uint16 - MaxUdpDg uint16 - VendorInfo *byte -} - -type Servent struct { - Name *byte - Aliases **byte - Port uint16 - Proto *byte -} diff --git a/vendor/golang.org/x/sys/windows/ztypes_windows_amd64.go b/vendor/golang.org/x/sys/windows/ztypes_windows_amd64.go deleted file mode 100644 index 3f272c2..0000000 --- a/vendor/golang.org/x/sys/windows/ztypes_windows_amd64.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2011 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. - -package windows - -type WSAData struct { - Version uint16 - HighVersion uint16 - MaxSockets uint16 - MaxUdpDg uint16 - VendorInfo *byte - Description [WSADESCRIPTION_LEN + 1]byte - SystemStatus [WSASYS_STATUS_LEN + 1]byte -} - -type Servent struct { - Name *byte - Aliases **byte - Proto *byte - Port uint16 -} diff --git a/vendor/golang.org/x/text/CONTRIBUTING.md b/vendor/golang.org/x/text/CONTRIBUTING.md index 88dff59..d0485e8 100644 --- a/vendor/golang.org/x/text/CONTRIBUTING.md +++ b/vendor/golang.org/x/text/CONTRIBUTING.md @@ -4,16 +4,15 @@ Go is an open source project. It is the work of hundreds of contributors. We appreciate your help! - ## Filing issues When [filing an issue](https://golang.org/issue/new), make sure to answer these five questions: -1. What version of Go are you using (`go version`)? -2. What operating system and processor architecture are you using? -3. What did you do? -4. What did you expect to see? -5. What did you see instead? +1. What version of Go are you using (`go version`)? +2. What operating system and processor architecture are you using? +3. What did you do? +4. What did you expect to see? +5. What did you see instead? General questions should go to the [golang-nuts mailing list](https://groups.google.com/group/golang-nuts) instead of the issue tracker. The gophers there will answer or ask you to file an issue if you've tripped over a bug. @@ -23,9 +22,5 @@ The gophers there will answer or ask you to file an issue if you've tripped over Please read the [Contribution Guidelines](https://golang.org/doc/contribute.html) before sending patches. -**We do not accept GitHub pull requests** -(we use [Gerrit](https://code.google.com/p/gerrit/) instead for code review). - Unless otherwise noted, the Go source files are distributed under the BSD-style license found in the LICENSE file. - diff --git a/vendor/golang.org/x/text/README b/vendor/golang.org/x/text/README deleted file mode 100644 index 4826fe8..0000000 --- a/vendor/golang.org/x/text/README +++ /dev/null @@ -1,23 +0,0 @@ -This repository holds supplementary Go libraries for text processing, many involving Unicode. - -To submit changes to this repository, see http://golang.org/doc/contribute.html. - -To generate the tables in this repository (except for the encoding tables), -run go generate from this directory. By default tables are generated for the -Unicode version in core and the CLDR version defined in -golang.org/x/text/unicode/cldr. - -Running go generate will as a side effect create a DATA subdirectory in this -directory which holds all files that are used as a source for generating the -tables. This directory will also serve as a cache. - -Run - - go test ./... - -from this directory to run all tests. Add the "-tags icu" flag to also run -ICU conformance tests (if available). This requires that you have the correct -ICU version installed on your system. - -TODO: -- updating unversioned source files. \ No newline at end of file diff --git a/vendor/golang.org/x/text/README.md b/vendor/golang.org/x/text/README.md new file mode 100644 index 0000000..b3f365e --- /dev/null +++ b/vendor/golang.org/x/text/README.md @@ -0,0 +1,93 @@ +# Go Text + +This repository holds supplementary Go libraries for text processing, many involving Unicode. + +## Semantic Versioning +This repo uses Semantic versioning (http://semver.org/), so +1. MAJOR version when you make incompatible API changes, +1. MINOR version when you add functionality in a backwards-compatible manner, + and +1. PATCH version when you make backwards-compatible bug fixes. + +Until version 1.0.0 of x/text is reached, the minor version is considered a +major version. So going from 0.1.0 to 0.2.0 is considered to be a major version +bump. + +A major new CLDR version is mapped to a minor version increase in x/text. +Any other new CLDR version is mapped to a patch version increase in x/text. + +It is important that the Unicode version used in `x/text` matches the one used +by your Go compiler. The `x/text` repository supports multiple versions of +Unicode and will match the version of Unicode to that of the Go compiler. At the +moment this is supported for Go compilers from version 1.7. + +## Download/Install + +The easiest way to install is to run `go get -u golang.org/x/text`. You can +also manually git clone the repository to `$GOPATH/src/golang.org/x/text`. + +## Contribute +To submit changes to this repository, see http://golang.org/doc/contribute.html. + +To generate the tables in this repository (except for the encoding tables), +run go generate from this directory. By default tables are generated for the +Unicode version in core and the CLDR version defined in +golang.org/x/text/unicode/cldr. + +Running go generate will as a side effect create a DATA subdirectory in this +directory, which holds all files that are used as a source for generating the +tables. This directory will also serve as a cache. + +## Testing +Run + + go test ./... + +from this directory to run all tests. Add the "-tags icu" flag to also run +ICU conformance tests (if available). This requires that you have the correct +ICU version installed on your system. + +TODO: +- updating unversioned source files. + +## Generating Tables + +To generate the tables in this repository (except for the encoding +tables), run `go generate` from this directory. By default tables are +generated for the Unicode version in core and the CLDR version defined in +golang.org/x/text/unicode/cldr. + +Running go generate will as a side effect create a DATA subdirectory in this +directory which holds all files that are used as a source for generating the +tables. This directory will also serve as a cache. + +## Versions +To update a Unicode version run + + UNICODE_VERSION=x.x.x go generate + +where `x.x.x` must correspond to a directory in http://www.unicode.org/Public/. +If this version is newer than the version in core it will also update the +relevant packages there. The idna package in x/net will always be updated. + +To update a CLDR version run + + CLDR_VERSION=version go generate + +where `version` must correspond to a directory in +http://www.unicode.org/Public/cldr/. + +Note that the code gets adapted over time to changes in the data and that +backwards compatibility is not maintained. +So updating to a different version may not work. + +The files in DATA/{iana|icu|w3|whatwg} are currently not versioned. + +## Report Issues / Send Patches + +This repository uses Gerrit for code changes. To learn how to submit changes to +this repository, see https://golang.org/doc/contribute.html. + +The main issue tracker for the image repository is located at +https://github.com/golang/go/issues. Prefix your issue with "x/image:" in the +subject line, so it is easy to find. diff --git a/vendor/golang.org/x/text/cases/gen.go b/vendor/golang.org/x/text/cases/gen.go index eb399ba..1cfe1c0 100644 --- a/vendor/golang.org/x/text/cases/gen.go +++ b/vendor/golang.org/x/text/cases/gen.go @@ -207,7 +207,7 @@ func genTables() { } w := gen.NewCodeWriter() - defer w.WriteGoFile("tables.go", "cases") + defer w.WriteVersionedGoFile("tables.go", "cases") gen.WriteUnicodeVersion(w) @@ -596,7 +596,7 @@ func verifyProperties(chars []runeInfo) { // decomposition is greater than U+00FF, the rune is always // great and not a modifier. if f := runes[0]; unicode.IsMark(f) || f > 0xFF && !unicode.Is(unicode.Greek, f) { - log.Fatalf("%U: expeced first rune of Greek decomposition to be letter, found %U", r, f) + log.Fatalf("%U: expected first rune of Greek decomposition to be letter, found %U", r, f) } // A.6.2: Any follow-up rune in a Greek decomposition is a // modifier of which the first should be gobbled in @@ -605,7 +605,7 @@ func verifyProperties(chars []runeInfo) { switch m { case 0x0313, 0x0314, 0x0301, 0x0300, 0x0306, 0x0342, 0x0308, 0x0304, 0x345: default: - log.Fatalf("%U: modifier %U is outside of expeced Greek modifier set", r, m) + log.Fatalf("%U: modifier %U is outside of expected Greek modifier set", r, m) } } } @@ -761,7 +761,7 @@ func genTablesTest() { fmt.Fprintln(w, ")") - gen.WriteGoFile("tables_test.go", "cases", w.Bytes()) + gen.WriteVersionedGoFile("tables_test.go", "cases", w.Bytes()) } // These functions are just used for verification that their definition have not diff --git a/vendor/golang.org/x/text/cases/tables.go b/vendor/golang.org/x/text/cases/tables.go deleted file mode 100644 index e6e95a6..0000000 --- a/vendor/golang.org/x/text/cases/tables.go +++ /dev/null @@ -1,2211 +0,0 @@ -// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. - -package cases - -// UnicodeVersion is the Unicode version from which the tables in this package are derived. -const UnicodeVersion = "9.0.0" - -var xorData string = "" + // Size: 185 bytes - "\x00\x06\x07\x00\x01?\x00\x0f\x03\x00\x0f\x12\x00\x0f\x1f\x00\x0f\x1d" + - "\x00\x01\x13\x00\x0f\x16\x00\x0f\x0b\x00\x0f3\x00\x0f7\x00\x01#\x00\x0f?" + - "\x00\x0e'\x00\x0f/\x00\x0e>\x00\x0f*\x00\x0c&\x00\x0c*\x00\x0c;\x00\x0c9" + - "\x00\x0c%\x00\x01\x08\x00\x03\x0d\x00\x03\x09\x00\x02\x06\x00\x02\x02" + - "\x00\x02\x0c\x00\x01\x00\x00\x01\x03\x00\x01\x01\x00\x01 \x00\x01\x0c" + - "\x00\x01\x10\x00\x03\x10\x00\x036 \x00\x037 \x00\x0b#\x10\x00\x0b 0\x00" + - "\x0b!\x10\x00\x0b!0\x00\x0b(\x04\x00\x03\x04\x1e\x00\x03\x0a\x00\x02:" + - "\x00\x02>\x00\x02,\x00\x02\x00\x00\x02\x10\x00\x01<\x00\x01&\x00\x01*" + - "\x00\x01.\x00\x010\x003 \x00\x01\x18\x00\x01(\x00\x01\x1e\x00\x01\x22" - -var exceptions string = "" + // Size: 1852 bytes - "\x00\x12\x10μΜ\x12\x12ssSSSs\x13\x18i̇i̇\x10\x08I\x13\x18ʼnʼN\x11\x08sS" + - "\x12\x12dždžDž\x12\x12dždžDŽ\x10\x12DŽDž\x12\x12ljljLj\x12\x12ljljLJ\x10\x12LJLj\x12\x12" + - "njnjNj\x12\x12njnjNJ\x10\x12NJNj\x13\x18ǰJ̌\x12\x12dzdzDz\x12\x12dzdzDZ\x10\x12DZDz" + - "\x13\x18ⱥⱥ\x13\x18ⱦⱦ\x10\x18Ȿ\x10\x18Ɀ\x10\x18Ɐ\x10\x18Ɑ\x10\x18Ɒ\x10" + - "\x18Ɜ\x10\x18Ɡ\x10\x18Ɥ\x10\x18Ɦ\x10\x18Ɪ\x10\x18Ɫ\x10\x18Ɬ\x10\x18Ɱ\x10" + - "\x18Ɽ\x10\x18Ʇ\x10\x18Ʝ\x10\x18Ʞ2\x10ιΙ\x160ΐΪ́\x160ΰΫ́\x12\x10σΣ" + - "\x12\x10βΒ\x12\x10θΘ\x12\x10φΦ\x12\x10πΠ\x12\x10κΚ\x12\x10ρΡ\x12\x10εΕ" + - "\x14$եւԵՒԵւ\x12\x10вВ\x12\x10дД\x12\x10оО\x12\x10сС\x12\x10тТ\x12\x10тТ" + - "\x12\x10ъЪ\x12\x10ѣѢ\x13\x18ꙋꙊ\x13\x18ẖH̱\x13\x18ẗT̈\x13\x18ẘW̊\x13" + - "\x18ẙY̊\x13\x18aʾAʾ\x13\x18ṡṠ\x12\x10ssß\x14 ὐΥ̓\x160ὒΥ̓̀\x160ὔΥ̓́" + - "\x160ὖΥ̓͂\x15+ἀιἈΙᾈ\x15+ἁιἉΙᾉ\x15+ἂιἊΙᾊ\x15+ἃιἋΙᾋ\x15+ἄιἌΙᾌ\x15+ἅιἍΙᾍ" + - "\x15+ἆιἎΙᾎ\x15+ἇιἏΙᾏ\x15\x1dἀιᾀἈΙ\x15\x1dἁιᾁἉΙ\x15\x1dἂιᾂἊΙ\x15\x1dἃιᾃἋΙ" + - "\x15\x1dἄιᾄἌΙ\x15\x1dἅιᾅἍΙ\x15\x1dἆιᾆἎΙ\x15\x1dἇιᾇἏΙ\x15+ἠιἨΙᾘ\x15+ἡιἩΙᾙ" + - "\x15+ἢιἪΙᾚ\x15+ἣιἫΙᾛ\x15+ἤιἬΙᾜ\x15+ἥιἭΙᾝ\x15+ἦιἮΙᾞ\x15+ἧιἯΙᾟ\x15\x1dἠιᾐἨ" + - "Ι\x15\x1dἡιᾑἩΙ\x15\x1dἢιᾒἪΙ\x15\x1dἣιᾓἫΙ\x15\x1dἤιᾔἬΙ\x15\x1dἥιᾕἭΙ\x15" + - "\x1dἦιᾖἮΙ\x15\x1dἧιᾗἯΙ\x15+ὠιὨΙᾨ\x15+ὡιὩΙᾩ\x15+ὢιὪΙᾪ\x15+ὣιὫΙᾫ\x15+ὤιὬΙᾬ" + - "\x15+ὥιὭΙᾭ\x15+ὦιὮΙᾮ\x15+ὧιὯΙᾯ\x15\x1dὠιᾠὨΙ\x15\x1dὡιᾡὩΙ\x15\x1dὢιᾢὪΙ" + - "\x15\x1dὣιᾣὫΙ\x15\x1dὤιᾤὬΙ\x15\x1dὥιᾥὭΙ\x15\x1dὦιᾦὮΙ\x15\x1dὧιᾧὯΙ\x15-ὰι" + - "ᾺΙᾺͅ\x14#αιΑΙᾼ\x14$άιΆΙΆͅ\x14 ᾶΑ͂\x166ᾶιΑ͂Ιᾼ͂\x14\x1cαιᾳΑΙ\x12\x10ι" + - "Ι\x15-ὴιῊΙῊͅ\x14#ηιΗΙῌ\x14$ήιΉΙΉͅ\x14 ῆΗ͂\x166ῆιΗ͂Ιῌ͂\x14\x1cηιῃΗΙ" + - "\x160ῒΪ̀\x160ΐΪ́\x14 ῖΙ͂\x160ῗΪ͂\x160ῢΫ̀\x160ΰΫ́\x14 ῤΡ" + - "̓\x14 ῦΥ͂\x160ῧΫ͂\x15-ὼιῺΙῺͅ\x14#ωιΩΙῼ\x14$ώιΏΙΏͅ\x14 ῶΩ͂\x166ῶιΩ" + - "͂Ιῼ͂\x14\x1cωιῳΩΙ\x12\x10ωω\x11\x08kk\x12\x10åå\x12\x10ɫɫ\x12\x10ɽɽ" + - "\x10\x10Ⱥ\x10\x10Ⱦ\x12\x10ɑɑ\x12\x10ɱɱ\x12\x10ɐɐ\x12\x10ɒɒ\x12\x10ȿȿ\x12" + - "\x10ɀɀ\x12\x10ɥɥ\x12\x10ɦɦ\x12\x10ɜɜ\x12\x10ɡɡ\x12\x10ɬɬ\x12\x10ɪɪ\x12" + - "\x10ʞʞ\x12\x10ʇʇ\x12\x10ʝʝ\x12\x12ffFFFf\x12\x12fiFIFi\x12\x12flFLFl\x13" + - "\x1bffiFFIFfi\x13\x1bfflFFLFfl\x12\x12stSTSt\x12\x12stSTSt\x14$մնՄՆՄն" + - "\x14$մեՄԵՄե\x14$միՄԻՄի\x14$վնՎՆՎն\x14$մխՄԽՄխ" - -// 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 *caseTrie) lookup(s []byte) (v uint16, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return caseValues[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 := caseIndex[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 := caseIndex[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 = caseIndex[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 := caseIndex[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 = caseIndex[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 = caseIndex[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 *caseTrie) lookupUnsafe(s []byte) uint16 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return caseValues[c0] - } - i := caseIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = caseIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = caseIndex[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 *caseTrie) lookupString(s string) (v uint16, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return caseValues[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 := caseIndex[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 := caseIndex[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 = caseIndex[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 := caseIndex[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 = caseIndex[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 = caseIndex[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 *caseTrie) lookupStringUnsafe(s string) uint16 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return caseValues[c0] - } - i := caseIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = caseIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = caseIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// caseTrie. Total size: 11742 bytes (11.47 KiB). Checksum: 147a11466b427436. -type caseTrie struct{} - -func newCaseTrie(i int) *caseTrie { - return &caseTrie{} -} - -// lookupValue determines the type of block n and looks up the value for b. -func (t *caseTrie) lookupValue(n uint32, b byte) uint16 { - switch { - case n < 18: - return uint16(caseValues[n<<6+uint32(b)]) - default: - n -= 18 - return uint16(sparse.lookup(n, b)) - } -} - -// caseValues: 20 blocks, 1280 entries, 2560 bytes -// The third block is the zero block. -var caseValues = [1280]uint16{ - // Block 0x0, offset 0x0 - 0x27: 0x0054, - 0x2e: 0x0054, - 0x30: 0x0010, 0x31: 0x0010, 0x32: 0x0010, 0x33: 0x0010, 0x34: 0x0010, 0x35: 0x0010, - 0x36: 0x0010, 0x37: 0x0010, 0x38: 0x0010, 0x39: 0x0010, 0x3a: 0x0054, - // Block 0x1, offset 0x40 - 0x41: 0x2013, 0x42: 0x2013, 0x43: 0x2013, 0x44: 0x2013, 0x45: 0x2013, - 0x46: 0x2013, 0x47: 0x2013, 0x48: 0x2013, 0x49: 0x2013, 0x4a: 0x2013, 0x4b: 0x2013, - 0x4c: 0x2013, 0x4d: 0x2013, 0x4e: 0x2013, 0x4f: 0x2013, 0x50: 0x2013, 0x51: 0x2013, - 0x52: 0x2013, 0x53: 0x2013, 0x54: 0x2013, 0x55: 0x2013, 0x56: 0x2013, 0x57: 0x2013, - 0x58: 0x2013, 0x59: 0x2013, 0x5a: 0x2013, - 0x5e: 0x0004, 0x5f: 0x0010, 0x60: 0x0004, 0x61: 0x2012, 0x62: 0x2012, 0x63: 0x2012, - 0x64: 0x2012, 0x65: 0x2012, 0x66: 0x2012, 0x67: 0x2012, 0x68: 0x2012, 0x69: 0x2012, - 0x6a: 0x2012, 0x6b: 0x2012, 0x6c: 0x2012, 0x6d: 0x2012, 0x6e: 0x2012, 0x6f: 0x2012, - 0x70: 0x2012, 0x71: 0x2012, 0x72: 0x2012, 0x73: 0x2012, 0x74: 0x2012, 0x75: 0x2012, - 0x76: 0x2012, 0x77: 0x2012, 0x78: 0x2012, 0x79: 0x2012, 0x7a: 0x2012, - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc0: 0x0852, 0xc1: 0x0b53, 0xc2: 0x0113, 0xc3: 0x0112, 0xc4: 0x0113, 0xc5: 0x0112, - 0xc6: 0x0b53, 0xc7: 0x0f13, 0xc8: 0x0f12, 0xc9: 0x0e53, 0xca: 0x1153, 0xcb: 0x0713, - 0xcc: 0x0712, 0xcd: 0x0012, 0xce: 0x1453, 0xcf: 0x1753, 0xd0: 0x1a53, 0xd1: 0x0313, - 0xd2: 0x0312, 0xd3: 0x1d53, 0xd4: 0x2053, 0xd5: 0x2352, 0xd6: 0x2653, 0xd7: 0x2653, - 0xd8: 0x0113, 0xd9: 0x0112, 0xda: 0x2952, 0xdb: 0x0012, 0xdc: 0x1d53, 0xdd: 0x2c53, - 0xde: 0x2f52, 0xdf: 0x3253, 0xe0: 0x0113, 0xe1: 0x0112, 0xe2: 0x0113, 0xe3: 0x0112, - 0xe4: 0x0113, 0xe5: 0x0112, 0xe6: 0x3553, 0xe7: 0x0f13, 0xe8: 0x0f12, 0xe9: 0x3853, - 0xea: 0x0012, 0xeb: 0x0012, 0xec: 0x0113, 0xed: 0x0112, 0xee: 0x3553, 0xef: 0x1f13, - 0xf0: 0x1f12, 0xf1: 0x3b53, 0xf2: 0x3e53, 0xf3: 0x0713, 0xf4: 0x0712, 0xf5: 0x0313, - 0xf6: 0x0312, 0xf7: 0x4153, 0xf8: 0x0113, 0xf9: 0x0112, 0xfa: 0x0012, 0xfb: 0x0010, - 0xfc: 0x0113, 0xfd: 0x0112, 0xfe: 0x0012, 0xff: 0x4452, - // Block 0x4, offset 0x100 - 0x100: 0x0010, 0x101: 0x0010, 0x102: 0x0010, 0x103: 0x0010, 0x104: 0x04cb, 0x105: 0x05c9, - 0x106: 0x06ca, 0x107: 0x078b, 0x108: 0x0889, 0x109: 0x098a, 0x10a: 0x0a4b, 0x10b: 0x0b49, - 0x10c: 0x0c4a, 0x10d: 0x0313, 0x10e: 0x0312, 0x10f: 0x1f13, 0x110: 0x1f12, 0x111: 0x0313, - 0x112: 0x0312, 0x113: 0x0713, 0x114: 0x0712, 0x115: 0x0313, 0x116: 0x0312, 0x117: 0x0f13, - 0x118: 0x0f12, 0x119: 0x0313, 0x11a: 0x0312, 0x11b: 0x0713, 0x11c: 0x0712, 0x11d: 0x1452, - 0x11e: 0x0113, 0x11f: 0x0112, 0x120: 0x0113, 0x121: 0x0112, 0x122: 0x0113, 0x123: 0x0112, - 0x124: 0x0113, 0x125: 0x0112, 0x126: 0x0113, 0x127: 0x0112, 0x128: 0x0113, 0x129: 0x0112, - 0x12a: 0x0113, 0x12b: 0x0112, 0x12c: 0x0113, 0x12d: 0x0112, 0x12e: 0x0113, 0x12f: 0x0112, - 0x130: 0x0d0a, 0x131: 0x0e0b, 0x132: 0x0f09, 0x133: 0x100a, 0x134: 0x0113, 0x135: 0x0112, - 0x136: 0x2353, 0x137: 0x4453, 0x138: 0x0113, 0x139: 0x0112, 0x13a: 0x0113, 0x13b: 0x0112, - 0x13c: 0x0113, 0x13d: 0x0112, 0x13e: 0x0113, 0x13f: 0x0112, - // Block 0x5, offset 0x140 - 0x140: 0x136a, 0x141: 0x0313, 0x142: 0x0312, 0x143: 0x0853, 0x144: 0x4753, 0x145: 0x4a53, - 0x146: 0x0113, 0x147: 0x0112, 0x148: 0x0113, 0x149: 0x0112, 0x14a: 0x0113, 0x14b: 0x0112, - 0x14c: 0x0113, 0x14d: 0x0112, 0x14e: 0x0113, 0x14f: 0x0112, 0x150: 0x140a, 0x151: 0x14aa, - 0x152: 0x154a, 0x153: 0x0b52, 0x154: 0x0b52, 0x155: 0x0012, 0x156: 0x0e52, 0x157: 0x1152, - 0x158: 0x0012, 0x159: 0x1752, 0x15a: 0x0012, 0x15b: 0x1a52, 0x15c: 0x15ea, 0x15d: 0x0012, - 0x15e: 0x0012, 0x15f: 0x0012, 0x160: 0x1d52, 0x161: 0x168a, 0x162: 0x0012, 0x163: 0x2052, - 0x164: 0x0012, 0x165: 0x172a, 0x166: 0x17ca, 0x167: 0x0012, 0x168: 0x2652, 0x169: 0x2652, - 0x16a: 0x186a, 0x16b: 0x190a, 0x16c: 0x19aa, 0x16d: 0x0012, 0x16e: 0x0012, 0x16f: 0x1d52, - 0x170: 0x0012, 0x171: 0x1a4a, 0x172: 0x2c52, 0x173: 0x0012, 0x174: 0x0012, 0x175: 0x3252, - 0x176: 0x0012, 0x177: 0x0012, 0x178: 0x0012, 0x179: 0x0012, 0x17a: 0x0012, 0x17b: 0x0012, - 0x17c: 0x0012, 0x17d: 0x1aea, 0x17e: 0x0012, 0x17f: 0x0012, - // Block 0x6, offset 0x180 - 0x180: 0x3552, 0x181: 0x0012, 0x182: 0x0012, 0x183: 0x3852, 0x184: 0x0012, 0x185: 0x0012, - 0x186: 0x0012, 0x187: 0x1b8a, 0x188: 0x3552, 0x189: 0x4752, 0x18a: 0x3b52, 0x18b: 0x3e52, - 0x18c: 0x4a52, 0x18d: 0x0012, 0x18e: 0x0012, 0x18f: 0x0012, 0x190: 0x0012, 0x191: 0x0012, - 0x192: 0x4152, 0x193: 0x0012, 0x194: 0x0010, 0x195: 0x0012, 0x196: 0x0012, 0x197: 0x0012, - 0x198: 0x0012, 0x199: 0x0012, 0x19a: 0x0012, 0x19b: 0x0012, 0x19c: 0x0012, 0x19d: 0x1c2a, - 0x19e: 0x1cca, 0x19f: 0x0012, 0x1a0: 0x0012, 0x1a1: 0x0012, 0x1a2: 0x0012, 0x1a3: 0x0012, - 0x1a4: 0x0012, 0x1a5: 0x0012, 0x1a6: 0x0012, 0x1a7: 0x0012, 0x1a8: 0x0012, 0x1a9: 0x0012, - 0x1aa: 0x0012, 0x1ab: 0x0012, 0x1ac: 0x0012, 0x1ad: 0x0012, 0x1ae: 0x0012, 0x1af: 0x0012, - 0x1b0: 0x0015, 0x1b1: 0x0015, 0x1b2: 0x0015, 0x1b3: 0x0015, 0x1b4: 0x0015, 0x1b5: 0x0015, - 0x1b6: 0x0015, 0x1b7: 0x0015, 0x1b8: 0x0015, 0x1b9: 0x0014, 0x1ba: 0x0014, 0x1bb: 0x0014, - 0x1bc: 0x0014, 0x1bd: 0x0014, 0x1be: 0x0014, 0x1bf: 0x0014, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x0024, 0x1c1: 0x0024, 0x1c2: 0x0024, 0x1c3: 0x0024, 0x1c4: 0x0024, 0x1c5: 0x1d6d, - 0x1c6: 0x0024, 0x1c7: 0x0034, 0x1c8: 0x0034, 0x1c9: 0x0034, 0x1ca: 0x0024, 0x1cb: 0x0024, - 0x1cc: 0x0024, 0x1cd: 0x0034, 0x1ce: 0x0034, 0x1cf: 0x0014, 0x1d0: 0x0024, 0x1d1: 0x0024, - 0x1d2: 0x0024, 0x1d3: 0x0034, 0x1d4: 0x0034, 0x1d5: 0x0034, 0x1d6: 0x0034, 0x1d7: 0x0024, - 0x1d8: 0x0034, 0x1d9: 0x0034, 0x1da: 0x0034, 0x1db: 0x0024, 0x1dc: 0x0034, 0x1dd: 0x0034, - 0x1de: 0x0034, 0x1df: 0x0034, 0x1e0: 0x0034, 0x1e1: 0x0034, 0x1e2: 0x0034, 0x1e3: 0x0024, - 0x1e4: 0x0024, 0x1e5: 0x0024, 0x1e6: 0x0024, 0x1e7: 0x0024, 0x1e8: 0x0024, 0x1e9: 0x0024, - 0x1ea: 0x0024, 0x1eb: 0x0024, 0x1ec: 0x0024, 0x1ed: 0x0024, 0x1ee: 0x0024, 0x1ef: 0x0024, - 0x1f0: 0x0113, 0x1f1: 0x0112, 0x1f2: 0x0113, 0x1f3: 0x0112, 0x1f4: 0x0014, 0x1f5: 0x0004, - 0x1f6: 0x0113, 0x1f7: 0x0112, 0x1fa: 0x0015, 0x1fb: 0x4d52, - 0x1fc: 0x5052, 0x1fd: 0x5052, 0x1ff: 0x5353, - // Block 0x8, offset 0x200 - 0x204: 0x0004, 0x205: 0x0004, - 0x206: 0x2a13, 0x207: 0x0054, 0x208: 0x2513, 0x209: 0x2713, 0x20a: 0x2513, - 0x20c: 0x5653, 0x20e: 0x5953, 0x20f: 0x5c53, 0x210: 0x1e2a, 0x211: 0x2013, - 0x212: 0x2013, 0x213: 0x2013, 0x214: 0x2013, 0x215: 0x2013, 0x216: 0x2013, 0x217: 0x2013, - 0x218: 0x2013, 0x219: 0x2013, 0x21a: 0x2013, 0x21b: 0x2013, 0x21c: 0x2013, 0x21d: 0x2013, - 0x21e: 0x2013, 0x21f: 0x2013, 0x220: 0x5f53, 0x221: 0x5f53, 0x223: 0x5f53, - 0x224: 0x5f53, 0x225: 0x5f53, 0x226: 0x5f53, 0x227: 0x5f53, 0x228: 0x5f53, 0x229: 0x5f53, - 0x22a: 0x5f53, 0x22b: 0x5f53, 0x22c: 0x2a12, 0x22d: 0x2512, 0x22e: 0x2712, 0x22f: 0x2512, - 0x230: 0x1fea, 0x231: 0x2012, 0x232: 0x2012, 0x233: 0x2012, 0x234: 0x2012, 0x235: 0x2012, - 0x236: 0x2012, 0x237: 0x2012, 0x238: 0x2012, 0x239: 0x2012, 0x23a: 0x2012, 0x23b: 0x2012, - 0x23c: 0x2012, 0x23d: 0x2012, 0x23e: 0x2012, 0x23f: 0x2012, - // Block 0x9, offset 0x240 - 0x240: 0x5f52, 0x241: 0x5f52, 0x242: 0x21aa, 0x243: 0x5f52, 0x244: 0x5f52, 0x245: 0x5f52, - 0x246: 0x5f52, 0x247: 0x5f52, 0x248: 0x5f52, 0x249: 0x5f52, 0x24a: 0x5f52, 0x24b: 0x5f52, - 0x24c: 0x5652, 0x24d: 0x5952, 0x24e: 0x5c52, 0x24f: 0x1813, 0x250: 0x226a, 0x251: 0x232a, - 0x252: 0x0013, 0x253: 0x0013, 0x254: 0x0013, 0x255: 0x23ea, 0x256: 0x24aa, 0x257: 0x1812, - 0x258: 0x0113, 0x259: 0x0112, 0x25a: 0x0113, 0x25b: 0x0112, 0x25c: 0x0113, 0x25d: 0x0112, - 0x25e: 0x0113, 0x25f: 0x0112, 0x260: 0x0113, 0x261: 0x0112, 0x262: 0x0113, 0x263: 0x0112, - 0x264: 0x0113, 0x265: 0x0112, 0x266: 0x0113, 0x267: 0x0112, 0x268: 0x0113, 0x269: 0x0112, - 0x26a: 0x0113, 0x26b: 0x0112, 0x26c: 0x0113, 0x26d: 0x0112, 0x26e: 0x0113, 0x26f: 0x0112, - 0x270: 0x256a, 0x271: 0x262a, 0x272: 0x0b12, 0x273: 0x5352, 0x274: 0x6253, 0x275: 0x26ea, - 0x277: 0x0f13, 0x278: 0x0f12, 0x279: 0x0b13, 0x27a: 0x0113, 0x27b: 0x0112, - 0x27c: 0x0012, 0x27d: 0x4d53, 0x27e: 0x5053, 0x27f: 0x5053, - // Block 0xa, offset 0x280 - 0x280: 0x0812, 0x281: 0x0812, 0x282: 0x0812, 0x283: 0x0812, 0x284: 0x0812, 0x285: 0x0812, - 0x288: 0x0813, 0x289: 0x0813, 0x28a: 0x0813, 0x28b: 0x0813, - 0x28c: 0x0813, 0x28d: 0x0813, 0x290: 0x372a, 0x291: 0x0812, - 0x292: 0x386a, 0x293: 0x0812, 0x294: 0x3a2a, 0x295: 0x0812, 0x296: 0x3bea, 0x297: 0x0812, - 0x299: 0x0813, 0x29b: 0x0813, 0x29d: 0x0813, - 0x29f: 0x0813, 0x2a0: 0x0812, 0x2a1: 0x0812, 0x2a2: 0x0812, 0x2a3: 0x0812, - 0x2a4: 0x0812, 0x2a5: 0x0812, 0x2a6: 0x0812, 0x2a7: 0x0812, 0x2a8: 0x0813, 0x2a9: 0x0813, - 0x2aa: 0x0813, 0x2ab: 0x0813, 0x2ac: 0x0813, 0x2ad: 0x0813, 0x2ae: 0x0813, 0x2af: 0x0813, - 0x2b0: 0x8b52, 0x2b1: 0x8b52, 0x2b2: 0x8e52, 0x2b3: 0x8e52, 0x2b4: 0x9152, 0x2b5: 0x9152, - 0x2b6: 0x9452, 0x2b7: 0x9452, 0x2b8: 0x9752, 0x2b9: 0x9752, 0x2ba: 0x9a52, 0x2bb: 0x9a52, - 0x2bc: 0x4d52, 0x2bd: 0x4d52, - // Block 0xb, offset 0x2c0 - 0x2c0: 0x3daa, 0x2c1: 0x3f8a, 0x2c2: 0x416a, 0x2c3: 0x434a, 0x2c4: 0x452a, 0x2c5: 0x470a, - 0x2c6: 0x48ea, 0x2c7: 0x4aca, 0x2c8: 0x4ca9, 0x2c9: 0x4e89, 0x2ca: 0x5069, 0x2cb: 0x5249, - 0x2cc: 0x5429, 0x2cd: 0x5609, 0x2ce: 0x57e9, 0x2cf: 0x59c9, 0x2d0: 0x5baa, 0x2d1: 0x5d8a, - 0x2d2: 0x5f6a, 0x2d3: 0x614a, 0x2d4: 0x632a, 0x2d5: 0x650a, 0x2d6: 0x66ea, 0x2d7: 0x68ca, - 0x2d8: 0x6aa9, 0x2d9: 0x6c89, 0x2da: 0x6e69, 0x2db: 0x7049, 0x2dc: 0x7229, 0x2dd: 0x7409, - 0x2de: 0x75e9, 0x2df: 0x77c9, 0x2e0: 0x79aa, 0x2e1: 0x7b8a, 0x2e2: 0x7d6a, 0x2e3: 0x7f4a, - 0x2e4: 0x812a, 0x2e5: 0x830a, 0x2e6: 0x84ea, 0x2e7: 0x86ca, 0x2e8: 0x88a9, 0x2e9: 0x8a89, - 0x2ea: 0x8c69, 0x2eb: 0x8e49, 0x2ec: 0x9029, 0x2ed: 0x9209, 0x2ee: 0x93e9, 0x2ef: 0x95c9, - 0x2f0: 0x0812, 0x2f1: 0x0812, 0x2f2: 0x97aa, 0x2f3: 0x99ca, 0x2f4: 0x9b6a, - 0x2f6: 0x9d2a, 0x2f7: 0x9e6a, 0x2f8: 0x0813, 0x2f9: 0x0813, 0x2fa: 0x8b53, 0x2fb: 0x8b53, - 0x2fc: 0xa0e9, 0x2fd: 0x0004, 0x2fe: 0xa28a, 0x2ff: 0x0004, - // Block 0xc, offset 0x300 - 0x300: 0x0004, 0x301: 0x0004, 0x302: 0xa34a, 0x303: 0xa56a, 0x304: 0xa70a, - 0x306: 0xa8ca, 0x307: 0xaa0a, 0x308: 0x8e53, 0x309: 0x8e53, 0x30a: 0x9153, 0x30b: 0x9153, - 0x30c: 0xac89, 0x30d: 0x0004, 0x30e: 0x0004, 0x30f: 0x0004, 0x310: 0x0812, 0x311: 0x0812, - 0x312: 0xae2a, 0x313: 0xafea, 0x316: 0xb1aa, 0x317: 0xb2ea, - 0x318: 0x0813, 0x319: 0x0813, 0x31a: 0x9453, 0x31b: 0x9453, 0x31d: 0x0004, - 0x31e: 0x0004, 0x31f: 0x0004, 0x320: 0x0812, 0x321: 0x0812, 0x322: 0xb4aa, 0x323: 0xb66a, - 0x324: 0xb82a, 0x325: 0x0912, 0x326: 0xb96a, 0x327: 0xbaaa, 0x328: 0x0813, 0x329: 0x0813, - 0x32a: 0x9a53, 0x32b: 0x9a53, 0x32c: 0x0913, 0x32d: 0x0004, 0x32e: 0x0004, 0x32f: 0x0004, - 0x332: 0xbc6a, 0x333: 0xbe8a, 0x334: 0xc02a, - 0x336: 0xc1ea, 0x337: 0xc32a, 0x338: 0x9753, 0x339: 0x9753, 0x33a: 0x4d53, 0x33b: 0x4d53, - 0x33c: 0xc5a9, 0x33d: 0x0004, 0x33e: 0x0004, - // Block 0xd, offset 0x340 - 0x342: 0x0013, - 0x347: 0x0013, 0x34a: 0x0012, 0x34b: 0x0013, - 0x34c: 0x0013, 0x34d: 0x0013, 0x34e: 0x0012, 0x34f: 0x0012, 0x350: 0x0013, 0x351: 0x0013, - 0x352: 0x0013, 0x353: 0x0012, 0x355: 0x0013, - 0x359: 0x0013, 0x35a: 0x0013, 0x35b: 0x0013, 0x35c: 0x0013, 0x35d: 0x0013, - 0x364: 0x0013, 0x366: 0xc74b, 0x368: 0x0013, - 0x36a: 0xc80b, 0x36b: 0xc88b, 0x36c: 0x0013, 0x36d: 0x0013, 0x36f: 0x0012, - 0x370: 0x0013, 0x371: 0x0013, 0x372: 0x9d53, 0x373: 0x0013, 0x374: 0x0012, 0x375: 0x0010, - 0x376: 0x0010, 0x377: 0x0010, 0x378: 0x0010, 0x379: 0x0012, - 0x37c: 0x0012, 0x37d: 0x0012, 0x37e: 0x0013, 0x37f: 0x0013, - // Block 0xe, offset 0x380 - 0x380: 0x1a13, 0x381: 0x1a13, 0x382: 0x1e13, 0x383: 0x1e13, 0x384: 0x1a13, 0x385: 0x1a13, - 0x386: 0x2613, 0x387: 0x2613, 0x388: 0x2a13, 0x389: 0x2a13, 0x38a: 0x2e13, 0x38b: 0x2e13, - 0x38c: 0x2a13, 0x38d: 0x2a13, 0x38e: 0x2613, 0x38f: 0x2613, 0x390: 0xa052, 0x391: 0xa052, - 0x392: 0xa352, 0x393: 0xa352, 0x394: 0xa652, 0x395: 0xa652, 0x396: 0xa352, 0x397: 0xa352, - 0x398: 0xa052, 0x399: 0xa052, 0x39a: 0x1a12, 0x39b: 0x1a12, 0x39c: 0x1e12, 0x39d: 0x1e12, - 0x39e: 0x1a12, 0x39f: 0x1a12, 0x3a0: 0x2612, 0x3a1: 0x2612, 0x3a2: 0x2a12, 0x3a3: 0x2a12, - 0x3a4: 0x2e12, 0x3a5: 0x2e12, 0x3a6: 0x2a12, 0x3a7: 0x2a12, 0x3a8: 0x2612, 0x3a9: 0x2612, - // Block 0xf, offset 0x3c0 - 0x3c0: 0x6552, 0x3c1: 0x6552, 0x3c2: 0x6552, 0x3c3: 0x6552, 0x3c4: 0x6552, 0x3c5: 0x6552, - 0x3c6: 0x6552, 0x3c7: 0x6552, 0x3c8: 0x6552, 0x3c9: 0x6552, 0x3ca: 0x6552, 0x3cb: 0x6552, - 0x3cc: 0x6552, 0x3cd: 0x6552, 0x3ce: 0x6552, 0x3cf: 0x6552, 0x3d0: 0xa952, 0x3d1: 0xa952, - 0x3d2: 0xa952, 0x3d3: 0xa952, 0x3d4: 0xa952, 0x3d5: 0xa952, 0x3d6: 0xa952, 0x3d7: 0xa952, - 0x3d8: 0xa952, 0x3d9: 0xa952, 0x3da: 0xa952, 0x3db: 0xa952, 0x3dc: 0xa952, 0x3dd: 0xa952, - 0x3de: 0xa952, 0x3e0: 0x0113, 0x3e1: 0x0112, 0x3e2: 0xc94b, 0x3e3: 0x8853, - 0x3e4: 0xca0b, 0x3e5: 0xcaca, 0x3e6: 0xcb4a, 0x3e7: 0x0f13, 0x3e8: 0x0f12, 0x3e9: 0x0313, - 0x3ea: 0x0312, 0x3eb: 0x0713, 0x3ec: 0x0712, 0x3ed: 0xcbcb, 0x3ee: 0xcc8b, 0x3ef: 0xcd4b, - 0x3f0: 0xce0b, 0x3f1: 0x0012, 0x3f2: 0x0113, 0x3f3: 0x0112, 0x3f4: 0x0012, 0x3f5: 0x0313, - 0x3f6: 0x0312, 0x3f7: 0x0012, 0x3f8: 0x0012, 0x3f9: 0x0012, 0x3fa: 0x0012, 0x3fb: 0x0012, - 0x3fc: 0x0015, 0x3fd: 0x0015, 0x3fe: 0xcecb, 0x3ff: 0xcf8b, - // Block 0x10, offset 0x400 - 0x400: 0x0113, 0x401: 0x0112, 0x402: 0x0113, 0x403: 0x0112, 0x404: 0x0113, 0x405: 0x0112, - 0x406: 0x0113, 0x407: 0x0112, 0x408: 0x0014, 0x409: 0x0004, 0x40a: 0x0004, 0x40b: 0x0713, - 0x40c: 0x0712, 0x40d: 0xd04b, 0x40e: 0x0012, 0x40f: 0x0010, 0x410: 0x0113, 0x411: 0x0112, - 0x412: 0x0113, 0x413: 0x0112, 0x414: 0x0012, 0x415: 0x0012, 0x416: 0x0113, 0x417: 0x0112, - 0x418: 0x0113, 0x419: 0x0112, 0x41a: 0x0113, 0x41b: 0x0112, 0x41c: 0x0113, 0x41d: 0x0112, - 0x41e: 0x0113, 0x41f: 0x0112, 0x420: 0x0113, 0x421: 0x0112, 0x422: 0x0113, 0x423: 0x0112, - 0x424: 0x0113, 0x425: 0x0112, 0x426: 0x0113, 0x427: 0x0112, 0x428: 0x0113, 0x429: 0x0112, - 0x42a: 0xd10b, 0x42b: 0xd1cb, 0x42c: 0xd28b, 0x42d: 0xd34b, 0x42e: 0xd40b, - 0x430: 0xd4cb, 0x431: 0xd58b, 0x432: 0xd64b, 0x433: 0xac53, 0x434: 0x0113, 0x435: 0x0112, - 0x436: 0x0113, 0x437: 0x0112, - // Block 0x11, offset 0x440 - 0x440: 0xd70a, 0x441: 0xd80a, 0x442: 0xd90a, 0x443: 0xda0a, 0x444: 0xdb6a, 0x445: 0xdcca, - 0x446: 0xddca, - 0x453: 0xdeca, 0x454: 0xe08a, 0x455: 0xe24a, 0x456: 0xe40a, 0x457: 0xe5ca, - 0x45d: 0x0010, - 0x45e: 0x0034, 0x45f: 0x0010, 0x460: 0x0010, 0x461: 0x0010, 0x462: 0x0010, 0x463: 0x0010, - 0x464: 0x0010, 0x465: 0x0010, 0x466: 0x0010, 0x467: 0x0010, 0x468: 0x0010, - 0x46a: 0x0010, 0x46b: 0x0010, 0x46c: 0x0010, 0x46d: 0x0010, 0x46e: 0x0010, 0x46f: 0x0010, - 0x470: 0x0010, 0x471: 0x0010, 0x472: 0x0010, 0x473: 0x0010, 0x474: 0x0010, 0x475: 0x0010, - 0x476: 0x0010, 0x478: 0x0010, 0x479: 0x0010, 0x47a: 0x0010, 0x47b: 0x0010, - 0x47c: 0x0010, 0x47e: 0x0010, - // Block 0x12, offset 0x480 - 0x480: 0x2213, 0x481: 0x2213, 0x482: 0x2613, 0x483: 0x2613, 0x484: 0x2213, 0x485: 0x2213, - 0x486: 0x2e13, 0x487: 0x2e13, 0x488: 0x2213, 0x489: 0x2213, 0x48a: 0x2613, 0x48b: 0x2613, - 0x48c: 0x2213, 0x48d: 0x2213, 0x48e: 0x3e13, 0x48f: 0x3e13, 0x490: 0x2213, 0x491: 0x2213, - 0x492: 0x2613, 0x493: 0x2613, 0x494: 0x2213, 0x495: 0x2213, 0x496: 0x2e13, 0x497: 0x2e13, - 0x498: 0x2213, 0x499: 0x2213, 0x49a: 0x2613, 0x49b: 0x2613, 0x49c: 0x2213, 0x49d: 0x2213, - 0x49e: 0xb553, 0x49f: 0xb553, 0x4a0: 0xb853, 0x4a1: 0xb853, 0x4a2: 0x2212, 0x4a3: 0x2212, - 0x4a4: 0x2612, 0x4a5: 0x2612, 0x4a6: 0x2212, 0x4a7: 0x2212, 0x4a8: 0x2e12, 0x4a9: 0x2e12, - 0x4aa: 0x2212, 0x4ab: 0x2212, 0x4ac: 0x2612, 0x4ad: 0x2612, 0x4ae: 0x2212, 0x4af: 0x2212, - 0x4b0: 0x3e12, 0x4b1: 0x3e12, 0x4b2: 0x2212, 0x4b3: 0x2212, 0x4b4: 0x2612, 0x4b5: 0x2612, - 0x4b6: 0x2212, 0x4b7: 0x2212, 0x4b8: 0x2e12, 0x4b9: 0x2e12, 0x4ba: 0x2212, 0x4bb: 0x2212, - 0x4bc: 0x2612, 0x4bd: 0x2612, 0x4be: 0x2212, 0x4bf: 0x2212, - // Block 0x13, offset 0x4c0 - 0x4c2: 0x0010, - 0x4c7: 0x0010, 0x4c9: 0x0010, 0x4cb: 0x0010, - 0x4cd: 0x0010, 0x4ce: 0x0010, 0x4cf: 0x0010, 0x4d1: 0x0010, - 0x4d2: 0x0010, 0x4d4: 0x0010, 0x4d7: 0x0010, - 0x4d9: 0x0010, 0x4db: 0x0010, 0x4dd: 0x0010, - 0x4df: 0x0010, 0x4e1: 0x0010, 0x4e2: 0x0010, - 0x4e4: 0x0010, 0x4e7: 0x0010, 0x4e8: 0x0010, 0x4e9: 0x0010, - 0x4ea: 0x0010, 0x4ec: 0x0010, 0x4ed: 0x0010, 0x4ee: 0x0010, 0x4ef: 0x0010, - 0x4f0: 0x0010, 0x4f1: 0x0010, 0x4f2: 0x0010, 0x4f4: 0x0010, 0x4f5: 0x0010, - 0x4f6: 0x0010, 0x4f7: 0x0010, 0x4f9: 0x0010, 0x4fa: 0x0010, 0x4fb: 0x0010, - 0x4fc: 0x0010, 0x4fe: 0x0010, -} - -// caseIndex: 25 blocks, 1600 entries, 3200 bytes -// Block 0 is the zero block. -var caseIndex = [1600]uint16{ - // Block 0x0, offset 0x0 - // Block 0x1, offset 0x40 - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc2: 0x12, 0xc3: 0x13, 0xc4: 0x14, 0xc5: 0x15, 0xc6: 0x01, 0xc7: 0x02, - 0xc8: 0x16, 0xc9: 0x03, 0xca: 0x04, 0xcb: 0x17, 0xcc: 0x18, 0xcd: 0x05, 0xce: 0x06, 0xcf: 0x07, - 0xd0: 0x19, 0xd1: 0x1a, 0xd2: 0x1b, 0xd3: 0x1c, 0xd4: 0x1d, 0xd5: 0x1e, 0xd6: 0x1f, 0xd7: 0x20, - 0xd8: 0x21, 0xd9: 0x22, 0xda: 0x23, 0xdb: 0x24, 0xdc: 0x25, 0xdd: 0x26, 0xde: 0x27, 0xdf: 0x28, - 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, - 0xea: 0x06, 0xeb: 0x07, 0xec: 0x07, 0xed: 0x08, 0xef: 0x09, - 0xf0: 0x14, 0xf3: 0x16, - // Block 0x4, offset 0x100 - 0x120: 0x29, 0x121: 0x2a, 0x122: 0x2b, 0x123: 0x2c, 0x124: 0x2d, 0x125: 0x2e, 0x126: 0x2f, 0x127: 0x30, - 0x128: 0x31, 0x129: 0x32, 0x12a: 0x33, 0x12b: 0x34, 0x12c: 0x35, 0x12d: 0x36, 0x12e: 0x37, 0x12f: 0x38, - 0x130: 0x39, 0x131: 0x3a, 0x132: 0x3b, 0x133: 0x3c, 0x134: 0x3d, 0x135: 0x3e, 0x136: 0x3f, 0x137: 0x40, - 0x138: 0x41, 0x139: 0x42, 0x13a: 0x43, 0x13b: 0x44, 0x13c: 0x45, 0x13d: 0x46, 0x13e: 0x47, 0x13f: 0x48, - // Block 0x5, offset 0x140 - 0x140: 0x49, 0x141: 0x4a, 0x142: 0x4b, 0x143: 0x4c, 0x144: 0x23, 0x145: 0x23, 0x146: 0x23, 0x147: 0x23, - 0x148: 0x23, 0x149: 0x4d, 0x14a: 0x4e, 0x14b: 0x4f, 0x14c: 0x50, 0x14d: 0x51, 0x14e: 0x52, 0x14f: 0x53, - 0x150: 0x54, 0x151: 0x23, 0x152: 0x23, 0x153: 0x23, 0x154: 0x23, 0x155: 0x23, 0x156: 0x23, 0x157: 0x23, - 0x158: 0x23, 0x159: 0x55, 0x15a: 0x56, 0x15b: 0x57, 0x15c: 0x58, 0x15d: 0x59, 0x15e: 0x5a, 0x15f: 0x5b, - 0x160: 0x5c, 0x161: 0x5d, 0x162: 0x5e, 0x163: 0x5f, 0x164: 0x60, 0x165: 0x61, 0x167: 0x62, - 0x168: 0x63, 0x169: 0x64, 0x16a: 0x65, 0x16c: 0x66, 0x16d: 0x67, 0x16e: 0x68, 0x16f: 0x69, - 0x170: 0x6a, 0x171: 0x6b, 0x172: 0x6c, 0x173: 0x6d, 0x174: 0x6e, 0x175: 0x6f, 0x176: 0x70, 0x177: 0x71, - 0x178: 0x72, 0x179: 0x72, 0x17a: 0x73, 0x17b: 0x72, 0x17c: 0x74, 0x17d: 0x08, 0x17e: 0x09, 0x17f: 0x0a, - // Block 0x6, offset 0x180 - 0x180: 0x75, 0x181: 0x76, 0x182: 0x77, 0x183: 0x78, 0x184: 0x0b, 0x185: 0x79, 0x186: 0x7a, - 0x192: 0x7b, 0x193: 0x0c, - 0x1b0: 0x7c, 0x1b1: 0x0d, 0x1b2: 0x72, 0x1b3: 0x7d, 0x1b4: 0x7e, 0x1b5: 0x7f, 0x1b6: 0x80, 0x1b7: 0x81, - 0x1b8: 0x82, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x83, 0x1c2: 0x84, 0x1c3: 0x85, 0x1c4: 0x86, 0x1c5: 0x23, 0x1c6: 0x87, - // Block 0x8, offset 0x200 - 0x200: 0x88, 0x201: 0x23, 0x202: 0x23, 0x203: 0x23, 0x204: 0x23, 0x205: 0x23, 0x206: 0x23, 0x207: 0x23, - 0x208: 0x23, 0x209: 0x23, 0x20a: 0x23, 0x20b: 0x23, 0x20c: 0x23, 0x20d: 0x23, 0x20e: 0x23, 0x20f: 0x23, - 0x210: 0x23, 0x211: 0x23, 0x212: 0x89, 0x213: 0x8a, 0x214: 0x23, 0x215: 0x23, 0x216: 0x23, 0x217: 0x23, - 0x218: 0x8b, 0x219: 0x8c, 0x21a: 0x8d, 0x21b: 0x8e, 0x21c: 0x8f, 0x21d: 0x90, 0x21e: 0x0e, 0x21f: 0x91, - 0x220: 0x92, 0x221: 0x93, 0x222: 0x23, 0x223: 0x94, 0x224: 0x95, 0x225: 0x96, 0x226: 0x97, 0x227: 0x98, - 0x228: 0x99, 0x229: 0x9a, 0x22a: 0x9b, 0x22b: 0x9c, 0x22c: 0x9d, 0x22d: 0x9e, 0x22e: 0x9f, 0x22f: 0xa0, - 0x230: 0x23, 0x231: 0x23, 0x232: 0x23, 0x233: 0x23, 0x234: 0x23, 0x235: 0x23, 0x236: 0x23, 0x237: 0x23, - 0x238: 0x23, 0x239: 0x23, 0x23a: 0x23, 0x23b: 0x23, 0x23c: 0x23, 0x23d: 0x23, 0x23e: 0x23, 0x23f: 0x23, - // Block 0x9, offset 0x240 - 0x240: 0x23, 0x241: 0x23, 0x242: 0x23, 0x243: 0x23, 0x244: 0x23, 0x245: 0x23, 0x246: 0x23, 0x247: 0x23, - 0x248: 0x23, 0x249: 0x23, 0x24a: 0x23, 0x24b: 0x23, 0x24c: 0x23, 0x24d: 0x23, 0x24e: 0x23, 0x24f: 0x23, - 0x250: 0x23, 0x251: 0x23, 0x252: 0x23, 0x253: 0x23, 0x254: 0x23, 0x255: 0x23, 0x256: 0x23, 0x257: 0x23, - 0x258: 0x23, 0x259: 0x23, 0x25a: 0x23, 0x25b: 0x23, 0x25c: 0x23, 0x25d: 0x23, 0x25e: 0x23, 0x25f: 0x23, - 0x260: 0x23, 0x261: 0x23, 0x262: 0x23, 0x263: 0x23, 0x264: 0x23, 0x265: 0x23, 0x266: 0x23, 0x267: 0x23, - 0x268: 0x23, 0x269: 0x23, 0x26a: 0x23, 0x26b: 0x23, 0x26c: 0x23, 0x26d: 0x23, 0x26e: 0x23, 0x26f: 0x23, - 0x270: 0x23, 0x271: 0x23, 0x272: 0x23, 0x273: 0x23, 0x274: 0x23, 0x275: 0x23, 0x276: 0x23, 0x277: 0x23, - 0x278: 0x23, 0x279: 0x23, 0x27a: 0x23, 0x27b: 0x23, 0x27c: 0x23, 0x27d: 0x23, 0x27e: 0x23, 0x27f: 0x23, - // Block 0xa, offset 0x280 - 0x280: 0x23, 0x281: 0x23, 0x282: 0x23, 0x283: 0x23, 0x284: 0x23, 0x285: 0x23, 0x286: 0x23, 0x287: 0x23, - 0x288: 0x23, 0x289: 0x23, 0x28a: 0x23, 0x28b: 0x23, 0x28c: 0x23, 0x28d: 0x23, 0x28e: 0x23, 0x28f: 0x23, - 0x290: 0x23, 0x291: 0x23, 0x292: 0x23, 0x293: 0x23, 0x294: 0x23, 0x295: 0x23, 0x296: 0x23, 0x297: 0x23, - 0x298: 0x23, 0x299: 0x23, 0x29a: 0x23, 0x29b: 0x23, 0x29c: 0x23, 0x29d: 0x23, 0x29e: 0xa1, 0x29f: 0xa2, - // Block 0xb, offset 0x2c0 - 0x2ec: 0x0f, 0x2ed: 0xa3, 0x2ee: 0xa4, 0x2ef: 0xa5, - 0x2f0: 0x23, 0x2f1: 0x23, 0x2f2: 0x23, 0x2f3: 0x23, 0x2f4: 0xa6, 0x2f5: 0xa7, 0x2f6: 0xa8, 0x2f7: 0xa9, - 0x2f8: 0xaa, 0x2f9: 0xab, 0x2fa: 0x23, 0x2fb: 0xac, 0x2fc: 0xad, 0x2fd: 0xae, 0x2fe: 0xaf, 0x2ff: 0xb0, - // Block 0xc, offset 0x300 - 0x300: 0xb1, 0x301: 0xb2, 0x302: 0x23, 0x303: 0xb3, 0x305: 0xb4, 0x307: 0xb5, - 0x30a: 0xb6, 0x30b: 0xb7, 0x30c: 0xb8, 0x30d: 0xb9, 0x30e: 0xba, 0x30f: 0xbb, - 0x310: 0xbc, 0x311: 0xbd, 0x312: 0xbe, 0x313: 0xbf, 0x314: 0xc0, 0x315: 0xc1, - 0x318: 0x23, 0x319: 0x23, 0x31a: 0x23, 0x31b: 0x23, 0x31c: 0xc2, 0x31d: 0xc3, - 0x320: 0xc4, 0x321: 0xc5, 0x322: 0xc6, 0x323: 0xc7, 0x324: 0xc8, 0x326: 0xc9, - 0x328: 0xca, 0x329: 0xcb, 0x32a: 0xcc, 0x32b: 0xcd, 0x32c: 0x5f, 0x32d: 0xce, 0x32e: 0xcf, - 0x330: 0x23, 0x331: 0xd0, 0x332: 0xd1, 0x333: 0xd2, - // Block 0xd, offset 0x340 - 0x340: 0xd3, 0x341: 0xd4, 0x342: 0xd5, 0x343: 0xd6, 0x344: 0xd7, 0x345: 0xd8, 0x346: 0xd9, 0x347: 0xda, - 0x348: 0xdb, 0x34a: 0xdc, 0x34b: 0xdd, 0x34c: 0xde, 0x34d: 0xdf, - 0x350: 0xe0, 0x351: 0xe1, 0x352: 0xe2, 0x353: 0xe3, 0x356: 0xe4, 0x357: 0xe5, - 0x358: 0xe6, 0x359: 0xe7, 0x35a: 0xe8, 0x35b: 0xe9, 0x35c: 0xea, - 0x362: 0xeb, 0x363: 0xec, - 0x36b: 0xed, - 0x370: 0xee, 0x371: 0xef, 0x372: 0xf0, - // Block 0xe, offset 0x380 - 0x380: 0x23, 0x381: 0x23, 0x382: 0x23, 0x383: 0x23, 0x384: 0x23, 0x385: 0x23, 0x386: 0x23, 0x387: 0x23, - 0x388: 0x23, 0x389: 0x23, 0x38a: 0x23, 0x38b: 0x23, 0x38c: 0x23, 0x38d: 0x23, 0x38e: 0xf1, - 0x390: 0x23, 0x391: 0xf2, 0x392: 0x23, 0x393: 0x23, 0x394: 0x23, 0x395: 0xf3, - // Block 0xf, offset 0x3c0 - 0x3c0: 0x23, 0x3c1: 0x23, 0x3c2: 0x23, 0x3c3: 0x23, 0x3c4: 0x23, 0x3c5: 0x23, 0x3c6: 0x23, 0x3c7: 0x23, - 0x3c8: 0x23, 0x3c9: 0x23, 0x3ca: 0x23, 0x3cb: 0x23, 0x3cc: 0x23, 0x3cd: 0x23, 0x3ce: 0x23, 0x3cf: 0x23, - 0x3d0: 0xf2, - // Block 0x10, offset 0x400 - 0x410: 0x23, 0x411: 0x23, 0x412: 0x23, 0x413: 0x23, 0x414: 0x23, 0x415: 0x23, 0x416: 0x23, 0x417: 0x23, - 0x418: 0x23, 0x419: 0xf4, - // Block 0x11, offset 0x440 - 0x460: 0x23, 0x461: 0x23, 0x462: 0x23, 0x463: 0x23, 0x464: 0x23, 0x465: 0x23, 0x466: 0x23, 0x467: 0x23, - 0x468: 0xed, 0x469: 0xf5, 0x46b: 0xf6, 0x46c: 0xf7, 0x46d: 0xf8, 0x46e: 0xf9, - 0x47c: 0x23, 0x47d: 0xfa, 0x47e: 0xfb, 0x47f: 0xfc, - // Block 0x12, offset 0x480 - 0x4b0: 0x23, 0x4b1: 0xfd, 0x4b2: 0xfe, - // Block 0x13, offset 0x4c0 - 0x4c5: 0xff, 0x4c6: 0x100, - 0x4c9: 0x101, - 0x4d0: 0x102, 0x4d1: 0x103, 0x4d2: 0x104, 0x4d3: 0x105, 0x4d4: 0x106, 0x4d5: 0x107, 0x4d6: 0x108, 0x4d7: 0x109, - 0x4d8: 0x10a, 0x4d9: 0x10b, 0x4da: 0x10c, 0x4db: 0x10d, 0x4dc: 0x10e, 0x4dd: 0x10f, 0x4de: 0x110, 0x4df: 0x111, - 0x4e8: 0x112, 0x4e9: 0x113, 0x4ea: 0x114, - // Block 0x14, offset 0x500 - 0x500: 0x115, - 0x520: 0x23, 0x521: 0x23, 0x522: 0x23, 0x523: 0x116, 0x524: 0x10, 0x525: 0x117, - 0x538: 0x118, 0x539: 0x11, 0x53a: 0x119, - // Block 0x15, offset 0x540 - 0x544: 0x11a, 0x545: 0x11b, 0x546: 0x11c, - 0x54f: 0x11d, - // Block 0x16, offset 0x580 - 0x590: 0x0a, 0x591: 0x0b, 0x592: 0x0c, 0x593: 0x0d, 0x594: 0x0e, 0x596: 0x0f, - 0x59b: 0x10, 0x59d: 0x11, 0x59e: 0x12, 0x59f: 0x13, - // Block 0x17, offset 0x5c0 - 0x5c0: 0x11e, 0x5c1: 0x11f, 0x5c4: 0x11f, 0x5c5: 0x11f, 0x5c6: 0x11f, 0x5c7: 0x120, - // Block 0x18, offset 0x600 - 0x620: 0x15, -} - -// sparseOffsets: 272 entries, 544 bytes -var sparseOffsets = []uint16{0x0, 0x9, 0xf, 0x18, 0x24, 0x2e, 0x3a, 0x3d, 0x41, 0x44, 0x48, 0x52, 0x54, 0x59, 0x69, 0x70, 0x75, 0x83, 0x84, 0x92, 0xa1, 0xab, 0xae, 0xb4, 0xbc, 0xbe, 0xc0, 0xce, 0xd4, 0xe2, 0xed, 0xf8, 0x103, 0x10f, 0x119, 0x124, 0x12f, 0x13b, 0x147, 0x14f, 0x157, 0x161, 0x16c, 0x178, 0x17e, 0x189, 0x18e, 0x196, 0x199, 0x19e, 0x1a2, 0x1a6, 0x1ad, 0x1b6, 0x1be, 0x1bf, 0x1c8, 0x1cf, 0x1d7, 0x1dd, 0x1e3, 0x1e8, 0x1ec, 0x1ef, 0x1f1, 0x1f4, 0x1f9, 0x1fa, 0x1fc, 0x1fe, 0x200, 0x207, 0x20c, 0x210, 0x219, 0x21c, 0x21f, 0x225, 0x226, 0x231, 0x232, 0x233, 0x238, 0x245, 0x24d, 0x255, 0x25e, 0x267, 0x270, 0x275, 0x278, 0x281, 0x28e, 0x290, 0x297, 0x299, 0x2a4, 0x2a5, 0x2b0, 0x2b8, 0x2c0, 0x2c6, 0x2c7, 0x2d5, 0x2da, 0x2dd, 0x2e2, 0x2e6, 0x2ec, 0x2f1, 0x2f4, 0x2f9, 0x2fe, 0x2ff, 0x305, 0x307, 0x308, 0x30a, 0x30c, 0x30f, 0x310, 0x312, 0x315, 0x31b, 0x31f, 0x321, 0x327, 0x32e, 0x332, 0x33b, 0x33c, 0x344, 0x348, 0x34d, 0x355, 0x35b, 0x361, 0x36b, 0x370, 0x379, 0x37f, 0x386, 0x38a, 0x392, 0x394, 0x396, 0x399, 0x39b, 0x39d, 0x39e, 0x39f, 0x3a1, 0x3a3, 0x3a9, 0x3ae, 0x3b0, 0x3b6, 0x3b9, 0x3bb, 0x3c1, 0x3c6, 0x3c8, 0x3c9, 0x3ca, 0x3cb, 0x3cd, 0x3cf, 0x3d1, 0x3d4, 0x3d6, 0x3d9, 0x3e1, 0x3e4, 0x3e8, 0x3f0, 0x3f2, 0x3f3, 0x3f4, 0x3f6, 0x3fc, 0x3fe, 0x3ff, 0x401, 0x403, 0x405, 0x412, 0x413, 0x414, 0x418, 0x41a, 0x41b, 0x41c, 0x41d, 0x41e, 0x422, 0x426, 0x42c, 0x42e, 0x435, 0x438, 0x43c, 0x442, 0x44b, 0x451, 0x457, 0x461, 0x46b, 0x46d, 0x474, 0x47a, 0x480, 0x486, 0x489, 0x48f, 0x492, 0x49a, 0x49b, 0x4a2, 0x4a3, 0x4a6, 0x4a7, 0x4ad, 0x4b0, 0x4b8, 0x4b9, 0x4ba, 0x4bb, 0x4bc, 0x4be, 0x4c0, 0x4c2, 0x4c6, 0x4c7, 0x4c9, 0x4ca, 0x4cb, 0x4cd, 0x4d2, 0x4d7, 0x4db, 0x4dc, 0x4df, 0x4e3, 0x4ee, 0x4f2, 0x4fa, 0x4ff, 0x503, 0x506, 0x50a, 0x50d, 0x510, 0x515, 0x519, 0x51d, 0x521, 0x525, 0x527, 0x529, 0x52c, 0x531, 0x533, 0x538, 0x541, 0x546, 0x547, 0x54a, 0x54b, 0x54c, 0x54e, 0x54f, 0x550} - -// sparseValues: 1360 entries, 5440 bytes -var sparseValues = [1360]valueRange{ - // Block 0x0, offset 0x0 - {value: 0x0004, lo: 0xa8, hi: 0xa8}, - {value: 0x0012, lo: 0xaa, hi: 0xaa}, - {value: 0x0014, lo: 0xad, hi: 0xad}, - {value: 0x0004, lo: 0xaf, hi: 0xaf}, - {value: 0x0004, lo: 0xb4, hi: 0xb4}, - {value: 0x002a, lo: 0xb5, hi: 0xb5}, - {value: 0x0054, lo: 0xb7, hi: 0xb7}, - {value: 0x0004, lo: 0xb8, hi: 0xb8}, - {value: 0x0012, lo: 0xba, hi: 0xba}, - // Block 0x1, offset 0x9 - {value: 0x2013, lo: 0x80, hi: 0x96}, - {value: 0x2013, lo: 0x98, hi: 0x9e}, - {value: 0x00ea, lo: 0x9f, hi: 0x9f}, - {value: 0x2012, lo: 0xa0, hi: 0xb6}, - {value: 0x2012, lo: 0xb8, hi: 0xbe}, - {value: 0x0252, lo: 0xbf, hi: 0xbf}, - // Block 0x2, offset 0xf - {value: 0x0117, lo: 0x80, hi: 0xaf}, - {value: 0x01eb, lo: 0xb0, hi: 0xb0}, - {value: 0x02ea, lo: 0xb1, hi: 0xb1}, - {value: 0x0117, lo: 0xb2, hi: 0xb7}, - {value: 0x0012, lo: 0xb8, hi: 0xb8}, - {value: 0x0316, lo: 0xb9, hi: 0xba}, - {value: 0x0716, lo: 0xbb, hi: 0xbc}, - {value: 0x0316, lo: 0xbd, hi: 0xbe}, - {value: 0x0553, lo: 0xbf, hi: 0xbf}, - // Block 0x3, offset 0x18 - {value: 0x0552, lo: 0x80, hi: 0x80}, - {value: 0x0316, lo: 0x81, hi: 0x82}, - {value: 0x0716, lo: 0x83, hi: 0x84}, - {value: 0x0316, lo: 0x85, hi: 0x86}, - {value: 0x0f16, lo: 0x87, hi: 0x88}, - {value: 0x034a, lo: 0x89, hi: 0x89}, - {value: 0x0117, lo: 0x8a, hi: 0xb7}, - {value: 0x0253, lo: 0xb8, hi: 0xb8}, - {value: 0x0316, lo: 0xb9, hi: 0xba}, - {value: 0x0716, lo: 0xbb, hi: 0xbc}, - {value: 0x0316, lo: 0xbd, hi: 0xbe}, - {value: 0x044a, lo: 0xbf, hi: 0xbf}, - // Block 0x4, offset 0x24 - {value: 0x0117, lo: 0x80, hi: 0x9f}, - {value: 0x2f53, lo: 0xa0, hi: 0xa0}, - {value: 0x0012, lo: 0xa1, hi: 0xa1}, - {value: 0x0117, lo: 0xa2, hi: 0xb3}, - {value: 0x0012, lo: 0xb4, hi: 0xb9}, - {value: 0x10cb, lo: 0xba, hi: 0xba}, - {value: 0x0716, lo: 0xbb, hi: 0xbc}, - {value: 0x2953, lo: 0xbd, hi: 0xbd}, - {value: 0x11cb, lo: 0xbe, hi: 0xbe}, - {value: 0x12ca, lo: 0xbf, hi: 0xbf}, - // Block 0x5, offset 0x2e - {value: 0x0015, lo: 0x80, hi: 0x81}, - {value: 0x0004, lo: 0x82, hi: 0x85}, - {value: 0x0014, lo: 0x86, hi: 0x91}, - {value: 0x0004, lo: 0x92, hi: 0x96}, - {value: 0x0054, lo: 0x97, hi: 0x97}, - {value: 0x0004, lo: 0x98, hi: 0x9f}, - {value: 0x0015, lo: 0xa0, hi: 0xa4}, - {value: 0x0004, lo: 0xa5, hi: 0xab}, - {value: 0x0014, lo: 0xac, hi: 0xac}, - {value: 0x0004, lo: 0xad, hi: 0xad}, - {value: 0x0014, lo: 0xae, hi: 0xae}, - {value: 0x0004, lo: 0xaf, hi: 0xbf}, - // Block 0x6, offset 0x3a - {value: 0x0024, lo: 0x80, hi: 0x94}, - {value: 0x0034, lo: 0x95, hi: 0xbc}, - {value: 0x0024, lo: 0xbd, hi: 0xbf}, - // Block 0x7, offset 0x3d - {value: 0x6553, lo: 0x80, hi: 0x8f}, - {value: 0x2013, lo: 0x90, hi: 0x9f}, - {value: 0x5f53, lo: 0xa0, hi: 0xaf}, - {value: 0x2012, lo: 0xb0, hi: 0xbf}, - // Block 0x8, offset 0x41 - {value: 0x5f52, lo: 0x80, hi: 0x8f}, - {value: 0x6552, lo: 0x90, hi: 0x9f}, - {value: 0x0117, lo: 0xa0, hi: 0xbf}, - // Block 0x9, offset 0x44 - {value: 0x0117, lo: 0x80, hi: 0x81}, - {value: 0x0024, lo: 0x83, hi: 0x87}, - {value: 0x0014, lo: 0x88, hi: 0x89}, - {value: 0x0117, lo: 0x8a, hi: 0xbf}, - // Block 0xa, offset 0x48 - {value: 0x0f13, lo: 0x80, hi: 0x80}, - {value: 0x0316, lo: 0x81, hi: 0x82}, - {value: 0x0716, lo: 0x83, hi: 0x84}, - {value: 0x0316, lo: 0x85, hi: 0x86}, - {value: 0x0f16, lo: 0x87, hi: 0x88}, - {value: 0x0316, lo: 0x89, hi: 0x8a}, - {value: 0x0716, lo: 0x8b, hi: 0x8c}, - {value: 0x0316, lo: 0x8d, hi: 0x8e}, - {value: 0x0f12, lo: 0x8f, hi: 0x8f}, - {value: 0x0117, lo: 0x90, hi: 0xbf}, - // Block 0xb, offset 0x52 - {value: 0x0117, lo: 0x80, hi: 0xaf}, - {value: 0x6553, lo: 0xb1, hi: 0xbf}, - // Block 0xc, offset 0x54 - {value: 0x3013, lo: 0x80, hi: 0x8f}, - {value: 0x6853, lo: 0x90, hi: 0x96}, - {value: 0x0014, lo: 0x99, hi: 0x99}, - {value: 0x6552, lo: 0xa1, hi: 0xaf}, - {value: 0x3012, lo: 0xb0, hi: 0xbf}, - // Block 0xd, offset 0x59 - {value: 0x6852, lo: 0x80, hi: 0x86}, - {value: 0x27aa, lo: 0x87, hi: 0x87}, - {value: 0x0034, lo: 0x91, hi: 0x91}, - {value: 0x0024, lo: 0x92, hi: 0x95}, - {value: 0x0034, lo: 0x96, hi: 0x96}, - {value: 0x0024, lo: 0x97, hi: 0x99}, - {value: 0x0034, lo: 0x9a, hi: 0x9b}, - {value: 0x0024, lo: 0x9c, hi: 0xa1}, - {value: 0x0034, lo: 0xa2, hi: 0xa7}, - {value: 0x0024, lo: 0xa8, hi: 0xa9}, - {value: 0x0034, lo: 0xaa, hi: 0xaa}, - {value: 0x0024, lo: 0xab, hi: 0xac}, - {value: 0x0034, lo: 0xad, hi: 0xae}, - {value: 0x0024, lo: 0xaf, hi: 0xaf}, - {value: 0x0034, lo: 0xb0, hi: 0xbd}, - {value: 0x0034, lo: 0xbf, hi: 0xbf}, - // Block 0xe, offset 0x69 - {value: 0x0034, lo: 0x81, hi: 0x82}, - {value: 0x0024, lo: 0x84, hi: 0x84}, - {value: 0x0034, lo: 0x85, hi: 0x85}, - {value: 0x0034, lo: 0x87, hi: 0x87}, - {value: 0x0010, lo: 0x90, hi: 0xaa}, - {value: 0x0010, lo: 0xb0, hi: 0xb3}, - {value: 0x0054, lo: 0xb4, hi: 0xb4}, - // Block 0xf, offset 0x70 - {value: 0x0014, lo: 0x80, hi: 0x85}, - {value: 0x0024, lo: 0x90, hi: 0x97}, - {value: 0x0034, lo: 0x98, hi: 0x9a}, - {value: 0x0014, lo: 0x9c, hi: 0x9c}, - {value: 0x0010, lo: 0xa0, hi: 0xbf}, - // Block 0x10, offset 0x75 - {value: 0x0014, lo: 0x80, hi: 0x80}, - {value: 0x0010, lo: 0x81, hi: 0x8a}, - {value: 0x0034, lo: 0x8b, hi: 0x92}, - {value: 0x0024, lo: 0x93, hi: 0x94}, - {value: 0x0034, lo: 0x95, hi: 0x96}, - {value: 0x0024, lo: 0x97, hi: 0x9b}, - {value: 0x0034, lo: 0x9c, hi: 0x9c}, - {value: 0x0024, lo: 0x9d, hi: 0x9e}, - {value: 0x0034, lo: 0x9f, hi: 0x9f}, - {value: 0x0010, lo: 0xa0, hi: 0xa9}, - {value: 0x0010, lo: 0xab, hi: 0xab}, - {value: 0x0010, lo: 0xae, hi: 0xaf}, - {value: 0x0034, lo: 0xb0, hi: 0xb0}, - {value: 0x0010, lo: 0xb1, hi: 0xbf}, - // Block 0x11, offset 0x83 - {value: 0x0010, lo: 0x80, hi: 0xbf}, - // Block 0x12, offset 0x84 - {value: 0x0010, lo: 0x80, hi: 0x93}, - {value: 0x0010, lo: 0x95, hi: 0x95}, - {value: 0x0024, lo: 0x96, hi: 0x9c}, - {value: 0x0014, lo: 0x9d, hi: 0x9d}, - {value: 0x0024, lo: 0x9f, hi: 0xa2}, - {value: 0x0034, lo: 0xa3, hi: 0xa3}, - {value: 0x0024, lo: 0xa4, hi: 0xa4}, - {value: 0x0014, lo: 0xa5, hi: 0xa6}, - {value: 0x0024, lo: 0xa7, hi: 0xa8}, - {value: 0x0034, lo: 0xaa, hi: 0xaa}, - {value: 0x0024, lo: 0xab, hi: 0xac}, - {value: 0x0034, lo: 0xad, hi: 0xad}, - {value: 0x0010, lo: 0xae, hi: 0xbc}, - {value: 0x0010, lo: 0xbf, hi: 0xbf}, - // Block 0x13, offset 0x92 - {value: 0x0014, lo: 0x8f, hi: 0x8f}, - {value: 0x0010, lo: 0x90, hi: 0x90}, - {value: 0x0034, lo: 0x91, hi: 0x91}, - {value: 0x0010, lo: 0x92, hi: 0xaf}, - {value: 0x0024, lo: 0xb0, hi: 0xb0}, - {value: 0x0034, lo: 0xb1, hi: 0xb1}, - {value: 0x0024, lo: 0xb2, hi: 0xb3}, - {value: 0x0034, lo: 0xb4, hi: 0xb4}, - {value: 0x0024, lo: 0xb5, hi: 0xb6}, - {value: 0x0034, lo: 0xb7, hi: 0xb9}, - {value: 0x0024, lo: 0xba, hi: 0xba}, - {value: 0x0034, lo: 0xbb, hi: 0xbc}, - {value: 0x0024, lo: 0xbd, hi: 0xbd}, - {value: 0x0034, lo: 0xbe, hi: 0xbe}, - {value: 0x0024, lo: 0xbf, hi: 0xbf}, - // Block 0x14, offset 0xa1 - {value: 0x0024, lo: 0x80, hi: 0x81}, - {value: 0x0034, lo: 0x82, hi: 0x82}, - {value: 0x0024, lo: 0x83, hi: 0x83}, - {value: 0x0034, lo: 0x84, hi: 0x84}, - {value: 0x0024, lo: 0x85, hi: 0x85}, - {value: 0x0034, lo: 0x86, hi: 0x86}, - {value: 0x0024, lo: 0x87, hi: 0x87}, - {value: 0x0034, lo: 0x88, hi: 0x88}, - {value: 0x0024, lo: 0x89, hi: 0x8a}, - {value: 0x0010, lo: 0x8d, hi: 0xbf}, - // Block 0x15, offset 0xab - {value: 0x0010, lo: 0x80, hi: 0xa5}, - {value: 0x0014, lo: 0xa6, hi: 0xb0}, - {value: 0x0010, lo: 0xb1, hi: 0xb1}, - // Block 0x16, offset 0xae - {value: 0x0010, lo: 0x80, hi: 0xaa}, - {value: 0x0024, lo: 0xab, hi: 0xb1}, - {value: 0x0034, lo: 0xb2, hi: 0xb2}, - {value: 0x0024, lo: 0xb3, hi: 0xb3}, - {value: 0x0014, lo: 0xb4, hi: 0xb5}, - {value: 0x0014, lo: 0xba, hi: 0xba}, - // Block 0x17, offset 0xb4 - {value: 0x0010, lo: 0x80, hi: 0x95}, - {value: 0x0024, lo: 0x96, hi: 0x99}, - {value: 0x0014, lo: 0x9a, hi: 0x9a}, - {value: 0x0024, lo: 0x9b, hi: 0xa3}, - {value: 0x0014, lo: 0xa4, hi: 0xa4}, - {value: 0x0024, lo: 0xa5, hi: 0xa7}, - {value: 0x0014, lo: 0xa8, hi: 0xa8}, - {value: 0x0024, lo: 0xa9, hi: 0xad}, - // Block 0x18, offset 0xbc - {value: 0x0010, lo: 0x80, hi: 0x98}, - {value: 0x0034, lo: 0x99, hi: 0x9b}, - // Block 0x19, offset 0xbe - {value: 0x0010, lo: 0xa0, hi: 0xb4}, - {value: 0x0010, lo: 0xb6, hi: 0xbd}, - // Block 0x1a, offset 0xc0 - {value: 0x0024, lo: 0x94, hi: 0xa1}, - {value: 0x0014, lo: 0xa2, hi: 0xa2}, - {value: 0x0034, lo: 0xa3, hi: 0xa3}, - {value: 0x0024, lo: 0xa4, hi: 0xa5}, - {value: 0x0034, lo: 0xa6, hi: 0xa6}, - {value: 0x0024, lo: 0xa7, hi: 0xa8}, - {value: 0x0034, lo: 0xa9, hi: 0xa9}, - {value: 0x0024, lo: 0xaa, hi: 0xac}, - {value: 0x0034, lo: 0xad, hi: 0xb2}, - {value: 0x0024, lo: 0xb3, hi: 0xb5}, - {value: 0x0034, lo: 0xb6, hi: 0xb6}, - {value: 0x0024, lo: 0xb7, hi: 0xb8}, - {value: 0x0034, lo: 0xb9, hi: 0xba}, - {value: 0x0024, lo: 0xbb, hi: 0xbf}, - // Block 0x1b, offset 0xce - {value: 0x0014, lo: 0x80, hi: 0x82}, - {value: 0x0010, lo: 0x83, hi: 0xb9}, - {value: 0x0014, lo: 0xba, hi: 0xba}, - {value: 0x0010, lo: 0xbb, hi: 0xbb}, - {value: 0x0034, lo: 0xbc, hi: 0xbc}, - {value: 0x0010, lo: 0xbd, hi: 0xbf}, - // Block 0x1c, offset 0xd4 - {value: 0x0010, lo: 0x80, hi: 0x80}, - {value: 0x0014, lo: 0x81, hi: 0x88}, - {value: 0x0010, lo: 0x89, hi: 0x8c}, - {value: 0x0034, lo: 0x8d, hi: 0x8d}, - {value: 0x0010, lo: 0x8e, hi: 0x90}, - {value: 0x0024, lo: 0x91, hi: 0x91}, - {value: 0x0034, lo: 0x92, hi: 0x92}, - {value: 0x0024, lo: 0x93, hi: 0x94}, - {value: 0x0014, lo: 0x95, hi: 0x97}, - {value: 0x0010, lo: 0x98, hi: 0xa1}, - {value: 0x0014, lo: 0xa2, hi: 0xa3}, - {value: 0x0010, lo: 0xa6, hi: 0xaf}, - {value: 0x0014, lo: 0xb1, hi: 0xb1}, - {value: 0x0010, lo: 0xb2, hi: 0xbf}, - // Block 0x1d, offset 0xe2 - {value: 0x0010, lo: 0x80, hi: 0x80}, - {value: 0x0014, lo: 0x81, hi: 0x81}, - {value: 0x0010, lo: 0x82, hi: 0x83}, - {value: 0x0010, lo: 0x85, hi: 0x8c}, - {value: 0x0010, lo: 0x8f, hi: 0x90}, - {value: 0x0010, lo: 0x93, hi: 0xa8}, - {value: 0x0010, lo: 0xaa, hi: 0xb0}, - {value: 0x0010, lo: 0xb2, hi: 0xb2}, - {value: 0x0010, lo: 0xb6, hi: 0xb9}, - {value: 0x0034, lo: 0xbc, hi: 0xbc}, - {value: 0x0010, lo: 0xbd, hi: 0xbf}, - // Block 0x1e, offset 0xed - {value: 0x0010, lo: 0x80, hi: 0x80}, - {value: 0x0014, lo: 0x81, hi: 0x84}, - {value: 0x0010, lo: 0x87, hi: 0x88}, - {value: 0x0010, lo: 0x8b, hi: 0x8c}, - {value: 0x0034, lo: 0x8d, hi: 0x8d}, - {value: 0x0010, lo: 0x8e, hi: 0x8e}, - {value: 0x0010, lo: 0x97, hi: 0x97}, - {value: 0x0010, lo: 0x9c, hi: 0x9d}, - {value: 0x0010, lo: 0x9f, hi: 0xa1}, - {value: 0x0014, lo: 0xa2, hi: 0xa3}, - {value: 0x0010, lo: 0xa6, hi: 0xb1}, - // Block 0x1f, offset 0xf8 - {value: 0x0014, lo: 0x81, hi: 0x82}, - {value: 0x0010, lo: 0x83, hi: 0x83}, - {value: 0x0010, lo: 0x85, hi: 0x8a}, - {value: 0x0010, lo: 0x8f, hi: 0x90}, - {value: 0x0010, lo: 0x93, hi: 0xa8}, - {value: 0x0010, lo: 0xaa, hi: 0xb0}, - {value: 0x0010, lo: 0xb2, hi: 0xb3}, - {value: 0x0010, lo: 0xb5, hi: 0xb6}, - {value: 0x0010, lo: 0xb8, hi: 0xb9}, - {value: 0x0034, lo: 0xbc, hi: 0xbc}, - {value: 0x0010, lo: 0xbe, hi: 0xbf}, - // Block 0x20, offset 0x103 - {value: 0x0010, lo: 0x80, hi: 0x80}, - {value: 0x0014, lo: 0x81, hi: 0x82}, - {value: 0x0014, lo: 0x87, hi: 0x88}, - {value: 0x0014, lo: 0x8b, hi: 0x8c}, - {value: 0x0034, lo: 0x8d, hi: 0x8d}, - {value: 0x0014, lo: 0x91, hi: 0x91}, - {value: 0x0010, lo: 0x99, hi: 0x9c}, - {value: 0x0010, lo: 0x9e, hi: 0x9e}, - {value: 0x0010, lo: 0xa6, hi: 0xaf}, - {value: 0x0014, lo: 0xb0, hi: 0xb1}, - {value: 0x0010, lo: 0xb2, hi: 0xb4}, - {value: 0x0014, lo: 0xb5, hi: 0xb5}, - // Block 0x21, offset 0x10f - {value: 0x0014, lo: 0x81, hi: 0x82}, - {value: 0x0010, lo: 0x83, hi: 0x83}, - {value: 0x0010, lo: 0x85, hi: 0x8d}, - {value: 0x0010, lo: 0x8f, hi: 0x91}, - {value: 0x0010, lo: 0x93, hi: 0xa8}, - {value: 0x0010, lo: 0xaa, hi: 0xb0}, - {value: 0x0010, lo: 0xb2, hi: 0xb3}, - {value: 0x0010, lo: 0xb5, hi: 0xb9}, - {value: 0x0034, lo: 0xbc, hi: 0xbc}, - {value: 0x0010, lo: 0xbd, hi: 0xbf}, - // Block 0x22, offset 0x119 - {value: 0x0010, lo: 0x80, hi: 0x80}, - {value: 0x0014, lo: 0x81, hi: 0x85}, - {value: 0x0014, lo: 0x87, hi: 0x88}, - {value: 0x0010, lo: 0x89, hi: 0x89}, - {value: 0x0010, lo: 0x8b, hi: 0x8c}, - {value: 0x0034, lo: 0x8d, hi: 0x8d}, - {value: 0x0010, lo: 0x90, hi: 0x90}, - {value: 0x0010, lo: 0xa0, hi: 0xa1}, - {value: 0x0014, lo: 0xa2, hi: 0xa3}, - {value: 0x0010, lo: 0xa6, hi: 0xaf}, - {value: 0x0010, lo: 0xb9, hi: 0xb9}, - // Block 0x23, offset 0x124 - {value: 0x0014, lo: 0x81, hi: 0x81}, - {value: 0x0010, lo: 0x82, hi: 0x83}, - {value: 0x0010, lo: 0x85, hi: 0x8c}, - {value: 0x0010, lo: 0x8f, hi: 0x90}, - {value: 0x0010, lo: 0x93, hi: 0xa8}, - {value: 0x0010, lo: 0xaa, hi: 0xb0}, - {value: 0x0010, lo: 0xb2, hi: 0xb3}, - {value: 0x0010, lo: 0xb5, hi: 0xb9}, - {value: 0x0034, lo: 0xbc, hi: 0xbc}, - {value: 0x0010, lo: 0xbd, hi: 0xbe}, - {value: 0x0014, lo: 0xbf, hi: 0xbf}, - // Block 0x24, offset 0x12f - {value: 0x0010, lo: 0x80, hi: 0x80}, - {value: 0x0014, lo: 0x81, hi: 0x84}, - {value: 0x0010, lo: 0x87, hi: 0x88}, - {value: 0x0010, lo: 0x8b, hi: 0x8c}, - {value: 0x0034, lo: 0x8d, hi: 0x8d}, - {value: 0x0014, lo: 0x96, hi: 0x96}, - {value: 0x0010, lo: 0x97, hi: 0x97}, - {value: 0x0010, lo: 0x9c, hi: 0x9d}, - {value: 0x0010, lo: 0x9f, hi: 0xa1}, - {value: 0x0014, lo: 0xa2, hi: 0xa3}, - {value: 0x0010, lo: 0xa6, hi: 0xaf}, - {value: 0x0010, lo: 0xb1, hi: 0xb1}, - // Block 0x25, offset 0x13b - {value: 0x0014, lo: 0x82, hi: 0x82}, - {value: 0x0010, lo: 0x83, hi: 0x83}, - {value: 0x0010, lo: 0x85, hi: 0x8a}, - {value: 0x0010, lo: 0x8e, hi: 0x90}, - {value: 0x0010, lo: 0x92, hi: 0x95}, - {value: 0x0010, lo: 0x99, hi: 0x9a}, - {value: 0x0010, lo: 0x9c, hi: 0x9c}, - {value: 0x0010, lo: 0x9e, hi: 0x9f}, - {value: 0x0010, lo: 0xa3, hi: 0xa4}, - {value: 0x0010, lo: 0xa8, hi: 0xaa}, - {value: 0x0010, lo: 0xae, hi: 0xb9}, - {value: 0x0010, lo: 0xbe, hi: 0xbf}, - // Block 0x26, offset 0x147 - {value: 0x0014, lo: 0x80, hi: 0x80}, - {value: 0x0010, lo: 0x81, hi: 0x82}, - {value: 0x0010, lo: 0x86, hi: 0x88}, - {value: 0x0010, lo: 0x8a, hi: 0x8c}, - {value: 0x0034, lo: 0x8d, hi: 0x8d}, - {value: 0x0010, lo: 0x90, hi: 0x90}, - {value: 0x0010, lo: 0x97, hi: 0x97}, - {value: 0x0010, lo: 0xa6, hi: 0xaf}, - // Block 0x27, offset 0x14f - {value: 0x0014, lo: 0x80, hi: 0x80}, - {value: 0x0010, lo: 0x81, hi: 0x83}, - {value: 0x0010, lo: 0x85, hi: 0x8c}, - {value: 0x0010, lo: 0x8e, hi: 0x90}, - {value: 0x0010, lo: 0x92, hi: 0xa8}, - {value: 0x0010, lo: 0xaa, hi: 0xb9}, - {value: 0x0010, lo: 0xbd, hi: 0xbd}, - {value: 0x0014, lo: 0xbe, hi: 0xbf}, - // Block 0x28, offset 0x157 - {value: 0x0014, lo: 0x80, hi: 0x80}, - {value: 0x0010, lo: 0x81, hi: 0x84}, - {value: 0x0014, lo: 0x86, hi: 0x88}, - {value: 0x0014, lo: 0x8a, hi: 0x8c}, - {value: 0x0034, lo: 0x8d, hi: 0x8d}, - {value: 0x0034, lo: 0x95, hi: 0x96}, - {value: 0x0010, lo: 0x98, hi: 0x9a}, - {value: 0x0010, lo: 0xa0, hi: 0xa1}, - {value: 0x0014, lo: 0xa2, hi: 0xa3}, - {value: 0x0010, lo: 0xa6, hi: 0xaf}, - // Block 0x29, offset 0x161 - {value: 0x0010, lo: 0x80, hi: 0x80}, - {value: 0x0014, lo: 0x81, hi: 0x81}, - {value: 0x0010, lo: 0x82, hi: 0x83}, - {value: 0x0010, lo: 0x85, hi: 0x8c}, - {value: 0x0010, lo: 0x8e, hi: 0x90}, - {value: 0x0010, lo: 0x92, hi: 0xa8}, - {value: 0x0010, lo: 0xaa, hi: 0xb3}, - {value: 0x0010, lo: 0xb5, hi: 0xb9}, - {value: 0x0034, lo: 0xbc, hi: 0xbc}, - {value: 0x0010, lo: 0xbd, hi: 0xbe}, - {value: 0x0014, lo: 0xbf, hi: 0xbf}, - // Block 0x2a, offset 0x16c - {value: 0x0010, lo: 0x80, hi: 0x84}, - {value: 0x0014, lo: 0x86, hi: 0x86}, - {value: 0x0010, lo: 0x87, hi: 0x88}, - {value: 0x0010, lo: 0x8a, hi: 0x8b}, - {value: 0x0014, lo: 0x8c, hi: 0x8c}, - {value: 0x0034, lo: 0x8d, hi: 0x8d}, - {value: 0x0010, lo: 0x95, hi: 0x96}, - {value: 0x0010, lo: 0x9e, hi: 0x9e}, - {value: 0x0010, lo: 0xa0, hi: 0xa1}, - {value: 0x0014, lo: 0xa2, hi: 0xa3}, - {value: 0x0010, lo: 0xa6, hi: 0xaf}, - {value: 0x0010, lo: 0xb1, hi: 0xb2}, - // Block 0x2b, offset 0x178 - {value: 0x0014, lo: 0x81, hi: 0x81}, - {value: 0x0010, lo: 0x82, hi: 0x83}, - {value: 0x0010, lo: 0x85, hi: 0x8c}, - {value: 0x0010, lo: 0x8e, hi: 0x90}, - {value: 0x0010, lo: 0x92, hi: 0xba}, - {value: 0x0010, lo: 0xbd, hi: 0xbf}, - // Block 0x2c, offset 0x17e - {value: 0x0010, lo: 0x80, hi: 0x80}, - {value: 0x0014, lo: 0x81, hi: 0x84}, - {value: 0x0010, lo: 0x86, hi: 0x88}, - {value: 0x0010, lo: 0x8a, hi: 0x8c}, - {value: 0x0034, lo: 0x8d, hi: 0x8d}, - {value: 0x0010, lo: 0x8e, hi: 0x8e}, - {value: 0x0010, lo: 0x94, hi: 0x97}, - {value: 0x0010, lo: 0x9f, hi: 0xa1}, - {value: 0x0014, lo: 0xa2, hi: 0xa3}, - {value: 0x0010, lo: 0xa6, hi: 0xaf}, - {value: 0x0010, lo: 0xba, hi: 0xbf}, - // Block 0x2d, offset 0x189 - {value: 0x0010, lo: 0x82, hi: 0x83}, - {value: 0x0010, lo: 0x85, hi: 0x96}, - {value: 0x0010, lo: 0x9a, hi: 0xb1}, - {value: 0x0010, lo: 0xb3, hi: 0xbb}, - {value: 0x0010, lo: 0xbd, hi: 0xbd}, - // Block 0x2e, offset 0x18e - {value: 0x0010, lo: 0x80, hi: 0x86}, - {value: 0x0034, lo: 0x8a, hi: 0x8a}, - {value: 0x0010, lo: 0x8f, hi: 0x91}, - {value: 0x0014, lo: 0x92, hi: 0x94}, - {value: 0x0014, lo: 0x96, hi: 0x96}, - {value: 0x0010, lo: 0x98, hi: 0x9f}, - {value: 0x0010, lo: 0xa6, hi: 0xaf}, - {value: 0x0010, lo: 0xb2, hi: 0xb3}, - // Block 0x2f, offset 0x196 - {value: 0x0014, lo: 0xb1, hi: 0xb1}, - {value: 0x0014, lo: 0xb4, hi: 0xb7}, - {value: 0x0034, lo: 0xb8, hi: 0xba}, - // Block 0x30, offset 0x199 - {value: 0x0004, lo: 0x86, hi: 0x86}, - {value: 0x0014, lo: 0x87, hi: 0x87}, - {value: 0x0034, lo: 0x88, hi: 0x8b}, - {value: 0x0014, lo: 0x8c, hi: 0x8e}, - {value: 0x0010, lo: 0x90, hi: 0x99}, - // Block 0x31, offset 0x19e - {value: 0x0014, lo: 0xb1, hi: 0xb1}, - {value: 0x0014, lo: 0xb4, hi: 0xb7}, - {value: 0x0034, lo: 0xb8, hi: 0xb9}, - {value: 0x0014, lo: 0xbb, hi: 0xbc}, - // Block 0x32, offset 0x1a2 - {value: 0x0004, lo: 0x86, hi: 0x86}, - {value: 0x0034, lo: 0x88, hi: 0x8b}, - {value: 0x0014, lo: 0x8c, hi: 0x8d}, - {value: 0x0010, lo: 0x90, hi: 0x99}, - // Block 0x33, offset 0x1a6 - {value: 0x0010, lo: 0x80, hi: 0x80}, - {value: 0x0034, lo: 0x98, hi: 0x99}, - {value: 0x0010, lo: 0xa0, hi: 0xa9}, - {value: 0x0034, lo: 0xb5, hi: 0xb5}, - {value: 0x0034, lo: 0xb7, hi: 0xb7}, - {value: 0x0034, lo: 0xb9, hi: 0xb9}, - {value: 0x0010, lo: 0xbe, hi: 0xbf}, - // Block 0x34, offset 0x1ad - {value: 0x0010, lo: 0x80, hi: 0x87}, - {value: 0x0010, lo: 0x89, hi: 0xac}, - {value: 0x0034, lo: 0xb1, hi: 0xb2}, - {value: 0x0014, lo: 0xb3, hi: 0xb3}, - {value: 0x0034, lo: 0xb4, hi: 0xb4}, - {value: 0x0014, lo: 0xb5, hi: 0xb9}, - {value: 0x0034, lo: 0xba, hi: 0xbd}, - {value: 0x0014, lo: 0xbe, hi: 0xbe}, - {value: 0x0010, lo: 0xbf, hi: 0xbf}, - // Block 0x35, offset 0x1b6 - {value: 0x0034, lo: 0x80, hi: 0x80}, - {value: 0x0014, lo: 0x81, hi: 0x81}, - {value: 0x0024, lo: 0x82, hi: 0x83}, - {value: 0x0034, lo: 0x84, hi: 0x84}, - {value: 0x0024, lo: 0x86, hi: 0x87}, - {value: 0x0010, lo: 0x88, hi: 0x8c}, - {value: 0x0014, lo: 0x8d, hi: 0x97}, - {value: 0x0014, lo: 0x99, hi: 0xbc}, - // Block 0x36, offset 0x1be - {value: 0x0034, lo: 0x86, hi: 0x86}, - // Block 0x37, offset 0x1bf - {value: 0x0010, lo: 0xab, hi: 0xac}, - {value: 0x0014, lo: 0xad, hi: 0xb0}, - {value: 0x0010, lo: 0xb1, hi: 0xb1}, - {value: 0x0014, lo: 0xb2, hi: 0xb6}, - {value: 0x0034, lo: 0xb7, hi: 0xb7}, - {value: 0x0010, lo: 0xb8, hi: 0xb8}, - {value: 0x0034, lo: 0xb9, hi: 0xba}, - {value: 0x0010, lo: 0xbb, hi: 0xbc}, - {value: 0x0014, lo: 0xbd, hi: 0xbe}, - // Block 0x38, offset 0x1c8 - {value: 0x0010, lo: 0x80, hi: 0x89}, - {value: 0x0010, lo: 0x96, hi: 0x97}, - {value: 0x0014, lo: 0x98, hi: 0x99}, - {value: 0x0014, lo: 0x9e, hi: 0xa0}, - {value: 0x0010, lo: 0xa2, hi: 0xa4}, - {value: 0x0010, lo: 0xa7, hi: 0xad}, - {value: 0x0014, lo: 0xb1, hi: 0xb4}, - // Block 0x39, offset 0x1cf - {value: 0x0014, lo: 0x82, hi: 0x82}, - {value: 0x0010, lo: 0x83, hi: 0x84}, - {value: 0x0014, lo: 0x85, hi: 0x86}, - {value: 0x0010, lo: 0x87, hi: 0x8c}, - {value: 0x0034, lo: 0x8d, hi: 0x8d}, - {value: 0x0010, lo: 0x8f, hi: 0x9c}, - {value: 0x0014, lo: 0x9d, hi: 0x9d}, - {value: 0x6c53, lo: 0xa0, hi: 0xbf}, - // Block 0x3a, offset 0x1d7 - {value: 0x7053, lo: 0x80, hi: 0x85}, - {value: 0x7053, lo: 0x87, hi: 0x87}, - {value: 0x7053, lo: 0x8d, hi: 0x8d}, - {value: 0x0010, lo: 0x90, hi: 0xba}, - {value: 0x0014, lo: 0xbc, hi: 0xbc}, - {value: 0x0010, lo: 0xbd, hi: 0xbf}, - // Block 0x3b, offset 0x1dd - {value: 0x0010, lo: 0x80, hi: 0x88}, - {value: 0x0010, lo: 0x8a, hi: 0x8d}, - {value: 0x0010, lo: 0x90, hi: 0x96}, - {value: 0x0010, lo: 0x98, hi: 0x98}, - {value: 0x0010, lo: 0x9a, hi: 0x9d}, - {value: 0x0010, lo: 0xa0, hi: 0xbf}, - // Block 0x3c, offset 0x1e3 - {value: 0x0010, lo: 0x80, hi: 0x88}, - {value: 0x0010, lo: 0x8a, hi: 0x8d}, - {value: 0x0010, lo: 0x90, hi: 0xb0}, - {value: 0x0010, lo: 0xb2, hi: 0xb5}, - {value: 0x0010, lo: 0xb8, hi: 0xbe}, - // Block 0x3d, offset 0x1e8 - {value: 0x0010, lo: 0x80, hi: 0x80}, - {value: 0x0010, lo: 0x82, hi: 0x85}, - {value: 0x0010, lo: 0x88, hi: 0x96}, - {value: 0x0010, lo: 0x98, hi: 0xbf}, - // Block 0x3e, offset 0x1ec - {value: 0x0010, lo: 0x80, hi: 0x90}, - {value: 0x0010, lo: 0x92, hi: 0x95}, - {value: 0x0010, lo: 0x98, hi: 0xbf}, - // Block 0x3f, offset 0x1ef - {value: 0x0010, lo: 0x80, hi: 0x9a}, - {value: 0x0024, lo: 0x9d, hi: 0x9f}, - // Block 0x40, offset 0x1f1 - {value: 0x0010, lo: 0x80, hi: 0x8f}, - {value: 0x7453, lo: 0xa0, hi: 0xaf}, - {value: 0x7853, lo: 0xb0, hi: 0xbf}, - // Block 0x41, offset 0x1f4 - {value: 0x7c53, lo: 0x80, hi: 0x8f}, - {value: 0x8053, lo: 0x90, hi: 0x9f}, - {value: 0x7c53, lo: 0xa0, hi: 0xaf}, - {value: 0x0813, lo: 0xb0, hi: 0xb5}, - {value: 0x0892, lo: 0xb8, hi: 0xbd}, - // Block 0x42, offset 0x1f9 - {value: 0x0010, lo: 0x81, hi: 0xbf}, - // Block 0x43, offset 0x1fa - {value: 0x0010, lo: 0x80, hi: 0xac}, - {value: 0x0010, lo: 0xaf, hi: 0xbf}, - // Block 0x44, offset 0x1fc - {value: 0x0010, lo: 0x81, hi: 0x9a}, - {value: 0x0010, lo: 0xa0, hi: 0xbf}, - // Block 0x45, offset 0x1fe - {value: 0x0010, lo: 0x80, hi: 0xaa}, - {value: 0x0010, lo: 0xae, hi: 0xb8}, - // Block 0x46, offset 0x200 - {value: 0x0010, lo: 0x80, hi: 0x8c}, - {value: 0x0010, lo: 0x8e, hi: 0x91}, - {value: 0x0014, lo: 0x92, hi: 0x93}, - {value: 0x0034, lo: 0x94, hi: 0x94}, - {value: 0x0010, lo: 0xa0, hi: 0xb1}, - {value: 0x0014, lo: 0xb2, hi: 0xb3}, - {value: 0x0034, lo: 0xb4, hi: 0xb4}, - // Block 0x47, offset 0x207 - {value: 0x0010, lo: 0x80, hi: 0x91}, - {value: 0x0014, lo: 0x92, hi: 0x93}, - {value: 0x0010, lo: 0xa0, hi: 0xac}, - {value: 0x0010, lo: 0xae, hi: 0xb0}, - {value: 0x0014, lo: 0xb2, hi: 0xb3}, - // Block 0x48, offset 0x20c - {value: 0x0014, lo: 0xb4, hi: 0xb5}, - {value: 0x0010, lo: 0xb6, hi: 0xb6}, - {value: 0x0014, lo: 0xb7, hi: 0xbd}, - {value: 0x0010, lo: 0xbe, hi: 0xbf}, - // Block 0x49, offset 0x210 - {value: 0x0010, lo: 0x80, hi: 0x85}, - {value: 0x0014, lo: 0x86, hi: 0x86}, - {value: 0x0010, lo: 0x87, hi: 0x88}, - {value: 0x0014, lo: 0x89, hi: 0x91}, - {value: 0x0034, lo: 0x92, hi: 0x92}, - {value: 0x0014, lo: 0x93, hi: 0x93}, - {value: 0x0004, lo: 0x97, hi: 0x97}, - {value: 0x0024, lo: 0x9d, hi: 0x9d}, - {value: 0x0010, lo: 0xa0, hi: 0xa9}, - // Block 0x4a, offset 0x219 - {value: 0x0014, lo: 0x8b, hi: 0x8e}, - {value: 0x0010, lo: 0x90, hi: 0x99}, - {value: 0x0010, lo: 0xa0, hi: 0xbf}, - // Block 0x4b, offset 0x21c - {value: 0x0010, lo: 0x80, hi: 0x82}, - {value: 0x0014, lo: 0x83, hi: 0x83}, - {value: 0x0010, lo: 0x84, hi: 0xb7}, - // Block 0x4c, offset 0x21f - {value: 0x0010, lo: 0x80, hi: 0x84}, - {value: 0x0014, lo: 0x85, hi: 0x86}, - {value: 0x0010, lo: 0x87, hi: 0xa8}, - {value: 0x0034, lo: 0xa9, hi: 0xa9}, - {value: 0x0010, lo: 0xaa, hi: 0xaa}, - {value: 0x0010, lo: 0xb0, hi: 0xbf}, - // Block 0x4d, offset 0x225 - {value: 0x0010, lo: 0x80, hi: 0xb5}, - // Block 0x4e, offset 0x226 - {value: 0x0010, lo: 0x80, hi: 0x9e}, - {value: 0x0014, lo: 0xa0, hi: 0xa2}, - {value: 0x0010, lo: 0xa3, hi: 0xa6}, - {value: 0x0014, lo: 0xa7, hi: 0xa8}, - {value: 0x0010, lo: 0xa9, hi: 0xab}, - {value: 0x0010, lo: 0xb0, hi: 0xb1}, - {value: 0x0014, lo: 0xb2, hi: 0xb2}, - {value: 0x0010, lo: 0xb3, hi: 0xb8}, - {value: 0x0034, lo: 0xb9, hi: 0xb9}, - {value: 0x0024, lo: 0xba, hi: 0xba}, - {value: 0x0034, lo: 0xbb, hi: 0xbb}, - // Block 0x4f, offset 0x231 - {value: 0x0010, lo: 0x86, hi: 0x8f}, - // Block 0x50, offset 0x232 - {value: 0x0010, lo: 0x90, hi: 0x99}, - // Block 0x51, offset 0x233 - {value: 0x0010, lo: 0x80, hi: 0x96}, - {value: 0x0024, lo: 0x97, hi: 0x97}, - {value: 0x0034, lo: 0x98, hi: 0x98}, - {value: 0x0010, lo: 0x99, hi: 0x9a}, - {value: 0x0014, lo: 0x9b, hi: 0x9b}, - // Block 0x52, offset 0x238 - {value: 0x0010, lo: 0x95, hi: 0x95}, - {value: 0x0014, lo: 0x96, hi: 0x96}, - {value: 0x0010, lo: 0x97, hi: 0x97}, - {value: 0x0014, lo: 0x98, hi: 0x9e}, - {value: 0x0034, lo: 0xa0, hi: 0xa0}, - {value: 0x0010, lo: 0xa1, hi: 0xa1}, - {value: 0x0014, lo: 0xa2, hi: 0xa2}, - {value: 0x0010, lo: 0xa3, hi: 0xa4}, - {value: 0x0014, lo: 0xa5, hi: 0xac}, - {value: 0x0010, lo: 0xad, hi: 0xb2}, - {value: 0x0014, lo: 0xb3, hi: 0xb4}, - {value: 0x0024, lo: 0xb5, hi: 0xbc}, - {value: 0x0034, lo: 0xbf, hi: 0xbf}, - // Block 0x53, offset 0x245 - {value: 0x0010, lo: 0x80, hi: 0x89}, - {value: 0x0010, lo: 0x90, hi: 0x99}, - {value: 0x0004, lo: 0xa7, hi: 0xa7}, - {value: 0x0024, lo: 0xb0, hi: 0xb4}, - {value: 0x0034, lo: 0xb5, hi: 0xba}, - {value: 0x0024, lo: 0xbb, hi: 0xbc}, - {value: 0x0034, lo: 0xbd, hi: 0xbd}, - {value: 0x0014, lo: 0xbe, hi: 0xbe}, - // Block 0x54, offset 0x24d - {value: 0x0014, lo: 0x80, hi: 0x83}, - {value: 0x0010, lo: 0x84, hi: 0xb3}, - {value: 0x0034, lo: 0xb4, hi: 0xb4}, - {value: 0x0010, lo: 0xb5, hi: 0xb5}, - {value: 0x0014, lo: 0xb6, hi: 0xba}, - {value: 0x0010, lo: 0xbb, hi: 0xbb}, - {value: 0x0014, lo: 0xbc, hi: 0xbc}, - {value: 0x0010, lo: 0xbd, hi: 0xbf}, - // Block 0x55, offset 0x255 - {value: 0x0010, lo: 0x80, hi: 0x81}, - {value: 0x0014, lo: 0x82, hi: 0x82}, - {value: 0x0010, lo: 0x83, hi: 0x83}, - {value: 0x0030, lo: 0x84, hi: 0x84}, - {value: 0x0010, lo: 0x85, hi: 0x8b}, - {value: 0x0010, lo: 0x90, hi: 0x99}, - {value: 0x0024, lo: 0xab, hi: 0xab}, - {value: 0x0034, lo: 0xac, hi: 0xac}, - {value: 0x0024, lo: 0xad, hi: 0xb3}, - // Block 0x56, offset 0x25e - {value: 0x0014, lo: 0x80, hi: 0x81}, - {value: 0x0010, lo: 0x82, hi: 0xa1}, - {value: 0x0014, lo: 0xa2, hi: 0xa5}, - {value: 0x0010, lo: 0xa6, hi: 0xa7}, - {value: 0x0014, lo: 0xa8, hi: 0xa9}, - {value: 0x0030, lo: 0xaa, hi: 0xaa}, - {value: 0x0034, lo: 0xab, hi: 0xab}, - {value: 0x0014, lo: 0xac, hi: 0xad}, - {value: 0x0010, lo: 0xae, hi: 0xbf}, - // Block 0x57, offset 0x267 - {value: 0x0010, lo: 0x80, hi: 0xa5}, - {value: 0x0034, lo: 0xa6, hi: 0xa6}, - {value: 0x0010, lo: 0xa7, hi: 0xa7}, - {value: 0x0014, lo: 0xa8, hi: 0xa9}, - {value: 0x0010, lo: 0xaa, hi: 0xac}, - {value: 0x0014, lo: 0xad, hi: 0xad}, - {value: 0x0010, lo: 0xae, hi: 0xae}, - {value: 0x0014, lo: 0xaf, hi: 0xb1}, - {value: 0x0030, lo: 0xb2, hi: 0xb3}, - // Block 0x58, offset 0x270 - {value: 0x0010, lo: 0x80, hi: 0xab}, - {value: 0x0014, lo: 0xac, hi: 0xb3}, - {value: 0x0010, lo: 0xb4, hi: 0xb5}, - {value: 0x0014, lo: 0xb6, hi: 0xb6}, - {value: 0x0034, lo: 0xb7, hi: 0xb7}, - // Block 0x59, offset 0x275 - {value: 0x0010, lo: 0x80, hi: 0x89}, - {value: 0x0010, lo: 0x8d, hi: 0xb7}, - {value: 0x0014, lo: 0xb8, hi: 0xbd}, - // Block 0x5a, offset 0x278 - {value: 0x296a, lo: 0x80, hi: 0x80}, - {value: 0x2a2a, lo: 0x81, hi: 0x81}, - {value: 0x2aea, lo: 0x82, hi: 0x82}, - {value: 0x2baa, lo: 0x83, hi: 0x83}, - {value: 0x2c6a, lo: 0x84, hi: 0x84}, - {value: 0x2d2a, lo: 0x85, hi: 0x85}, - {value: 0x2dea, lo: 0x86, hi: 0x86}, - {value: 0x2eaa, lo: 0x87, hi: 0x87}, - {value: 0x2f6a, lo: 0x88, hi: 0x88}, - // Block 0x5b, offset 0x281 - {value: 0x0024, lo: 0x90, hi: 0x92}, - {value: 0x0034, lo: 0x94, hi: 0x99}, - {value: 0x0024, lo: 0x9a, hi: 0x9b}, - {value: 0x0034, lo: 0x9c, hi: 0x9f}, - {value: 0x0024, lo: 0xa0, hi: 0xa0}, - {value: 0x0010, lo: 0xa1, hi: 0xa1}, - {value: 0x0034, lo: 0xa2, hi: 0xa8}, - {value: 0x0010, lo: 0xa9, hi: 0xac}, - {value: 0x0034, lo: 0xad, hi: 0xad}, - {value: 0x0010, lo: 0xae, hi: 0xb3}, - {value: 0x0024, lo: 0xb4, hi: 0xb4}, - {value: 0x0010, lo: 0xb5, hi: 0xb6}, - {value: 0x0024, lo: 0xb8, hi: 0xb9}, - // Block 0x5c, offset 0x28e - {value: 0x0012, lo: 0x80, hi: 0xab}, - {value: 0x0015, lo: 0xac, hi: 0xbf}, - // Block 0x5d, offset 0x290 - {value: 0x0015, lo: 0x80, hi: 0xaa}, - {value: 0x0012, lo: 0xab, hi: 0xb7}, - {value: 0x0015, lo: 0xb8, hi: 0xb8}, - {value: 0x8452, lo: 0xb9, hi: 0xb9}, - {value: 0x0012, lo: 0xba, hi: 0xbc}, - {value: 0x8852, lo: 0xbd, hi: 0xbd}, - {value: 0x0012, lo: 0xbe, hi: 0xbf}, - // Block 0x5e, offset 0x297 - {value: 0x0012, lo: 0x80, hi: 0x9a}, - {value: 0x0015, lo: 0x9b, hi: 0xbf}, - // Block 0x5f, offset 0x299 - {value: 0x0024, lo: 0x80, hi: 0x81}, - {value: 0x0034, lo: 0x82, hi: 0x82}, - {value: 0x0024, lo: 0x83, hi: 0x89}, - {value: 0x0034, lo: 0x8a, hi: 0x8a}, - {value: 0x0024, lo: 0x8b, hi: 0x8c}, - {value: 0x0034, lo: 0x8d, hi: 0x90}, - {value: 0x0024, lo: 0x91, hi: 0xb5}, - {value: 0x0024, lo: 0xbb, hi: 0xbb}, - {value: 0x0034, lo: 0xbc, hi: 0xbd}, - {value: 0x0024, lo: 0xbe, hi: 0xbe}, - {value: 0x0034, lo: 0xbf, hi: 0xbf}, - // Block 0x60, offset 0x2a4 - {value: 0x0117, lo: 0x80, hi: 0xbf}, - // Block 0x61, offset 0x2a5 - {value: 0x0117, lo: 0x80, hi: 0x95}, - {value: 0x306a, lo: 0x96, hi: 0x96}, - {value: 0x316a, lo: 0x97, hi: 0x97}, - {value: 0x326a, lo: 0x98, hi: 0x98}, - {value: 0x336a, lo: 0x99, hi: 0x99}, - {value: 0x346a, lo: 0x9a, hi: 0x9a}, - {value: 0x356a, lo: 0x9b, hi: 0x9b}, - {value: 0x0012, lo: 0x9c, hi: 0x9d}, - {value: 0x366b, lo: 0x9e, hi: 0x9e}, - {value: 0x0012, lo: 0x9f, hi: 0x9f}, - {value: 0x0117, lo: 0xa0, hi: 0xbf}, - // Block 0x62, offset 0x2b0 - {value: 0x0812, lo: 0x80, hi: 0x87}, - {value: 0x0813, lo: 0x88, hi: 0x8f}, - {value: 0x0812, lo: 0x90, hi: 0x95}, - {value: 0x0813, lo: 0x98, hi: 0x9d}, - {value: 0x0812, lo: 0xa0, hi: 0xa7}, - {value: 0x0813, lo: 0xa8, hi: 0xaf}, - {value: 0x0812, lo: 0xb0, hi: 0xb7}, - {value: 0x0813, lo: 0xb8, hi: 0xbf}, - // Block 0x63, offset 0x2b8 - {value: 0x0004, lo: 0x8b, hi: 0x8b}, - {value: 0x0014, lo: 0x8c, hi: 0x8f}, - {value: 0x0054, lo: 0x98, hi: 0x99}, - {value: 0x0054, lo: 0xa4, hi: 0xa4}, - {value: 0x0054, lo: 0xa7, hi: 0xa7}, - {value: 0x0014, lo: 0xaa, hi: 0xae}, - {value: 0x0010, lo: 0xaf, hi: 0xaf}, - {value: 0x0010, lo: 0xbf, hi: 0xbf}, - // Block 0x64, offset 0x2c0 - {value: 0x0010, lo: 0x80, hi: 0x80}, - {value: 0x0010, lo: 0x94, hi: 0x94}, - {value: 0x0014, lo: 0xa0, hi: 0xa4}, - {value: 0x0014, lo: 0xa6, hi: 0xaf}, - {value: 0x0015, lo: 0xb1, hi: 0xb1}, - {value: 0x0015, lo: 0xbf, hi: 0xbf}, - // Block 0x65, offset 0x2c6 - {value: 0x0015, lo: 0x90, hi: 0x9c}, - // Block 0x66, offset 0x2c7 - {value: 0x0024, lo: 0x90, hi: 0x91}, - {value: 0x0034, lo: 0x92, hi: 0x93}, - {value: 0x0024, lo: 0x94, hi: 0x97}, - {value: 0x0034, lo: 0x98, hi: 0x9a}, - {value: 0x0024, lo: 0x9b, hi: 0x9c}, - {value: 0x0014, lo: 0x9d, hi: 0xa0}, - {value: 0x0024, lo: 0xa1, hi: 0xa1}, - {value: 0x0014, lo: 0xa2, hi: 0xa4}, - {value: 0x0034, lo: 0xa5, hi: 0xa6}, - {value: 0x0024, lo: 0xa7, hi: 0xa7}, - {value: 0x0034, lo: 0xa8, hi: 0xa8}, - {value: 0x0024, lo: 0xa9, hi: 0xa9}, - {value: 0x0034, lo: 0xaa, hi: 0xaf}, - {value: 0x0024, lo: 0xb0, hi: 0xb0}, - // Block 0x67, offset 0x2d5 - {value: 0x0016, lo: 0x85, hi: 0x86}, - {value: 0x0012, lo: 0x87, hi: 0x89}, - {value: 0x9d52, lo: 0x8e, hi: 0x8e}, - {value: 0x1013, lo: 0xa0, hi: 0xaf}, - {value: 0x1012, lo: 0xb0, hi: 0xbf}, - // Block 0x68, offset 0x2da - {value: 0x0010, lo: 0x80, hi: 0x82}, - {value: 0x0716, lo: 0x83, hi: 0x84}, - {value: 0x0010, lo: 0x85, hi: 0x88}, - // Block 0x69, offset 0x2dd - {value: 0xa053, lo: 0xb6, hi: 0xb7}, - {value: 0xa353, lo: 0xb8, hi: 0xb9}, - {value: 0xa653, lo: 0xba, hi: 0xbb}, - {value: 0xa353, lo: 0xbc, hi: 0xbd}, - {value: 0xa053, lo: 0xbe, hi: 0xbf}, - // Block 0x6a, offset 0x2e2 - {value: 0x3013, lo: 0x80, hi: 0x8f}, - {value: 0x6553, lo: 0x90, hi: 0x9f}, - {value: 0xa953, lo: 0xa0, hi: 0xae}, - {value: 0x3012, lo: 0xb0, hi: 0xbf}, - // Block 0x6b, offset 0x2e6 - {value: 0x0117, lo: 0x80, hi: 0xa3}, - {value: 0x0012, lo: 0xa4, hi: 0xa4}, - {value: 0x0716, lo: 0xab, hi: 0xac}, - {value: 0x0316, lo: 0xad, hi: 0xae}, - {value: 0x0024, lo: 0xaf, hi: 0xb1}, - {value: 0x0117, lo: 0xb2, hi: 0xb3}, - // Block 0x6c, offset 0x2ec - {value: 0x6c52, lo: 0x80, hi: 0x9f}, - {value: 0x7052, lo: 0xa0, hi: 0xa5}, - {value: 0x7052, lo: 0xa7, hi: 0xa7}, - {value: 0x7052, lo: 0xad, hi: 0xad}, - {value: 0x0010, lo: 0xb0, hi: 0xbf}, - // Block 0x6d, offset 0x2f1 - {value: 0x0010, lo: 0x80, hi: 0xa7}, - {value: 0x0014, lo: 0xaf, hi: 0xaf}, - {value: 0x0034, lo: 0xbf, hi: 0xbf}, - // Block 0x6e, offset 0x2f4 - {value: 0x0010, lo: 0x80, hi: 0x96}, - {value: 0x0010, lo: 0xa0, hi: 0xa6}, - {value: 0x0010, lo: 0xa8, hi: 0xae}, - {value: 0x0010, lo: 0xb0, hi: 0xb6}, - {value: 0x0010, lo: 0xb8, hi: 0xbe}, - // Block 0x6f, offset 0x2f9 - {value: 0x0010, lo: 0x80, hi: 0x86}, - {value: 0x0010, lo: 0x88, hi: 0x8e}, - {value: 0x0010, lo: 0x90, hi: 0x96}, - {value: 0x0010, lo: 0x98, hi: 0x9e}, - {value: 0x0024, lo: 0xa0, hi: 0xbf}, - // Block 0x70, offset 0x2fe - {value: 0x0014, lo: 0xaf, hi: 0xaf}, - // Block 0x71, offset 0x2ff - {value: 0x0014, lo: 0x85, hi: 0x85}, - {value: 0x0034, lo: 0xaa, hi: 0xad}, - {value: 0x0030, lo: 0xae, hi: 0xaf}, - {value: 0x0004, lo: 0xb1, hi: 0xb5}, - {value: 0x0014, lo: 0xbb, hi: 0xbb}, - {value: 0x0010, lo: 0xbc, hi: 0xbc}, - // Block 0x72, offset 0x305 - {value: 0x0034, lo: 0x99, hi: 0x9a}, - {value: 0x0004, lo: 0x9b, hi: 0x9e}, - // Block 0x73, offset 0x307 - {value: 0x0004, lo: 0xbc, hi: 0xbe}, - // Block 0x74, offset 0x308 - {value: 0x0010, lo: 0x85, hi: 0xad}, - {value: 0x0010, lo: 0xb1, hi: 0xbf}, - // Block 0x75, offset 0x30a - {value: 0x0010, lo: 0x80, hi: 0x8e}, - {value: 0x0010, lo: 0xa0, hi: 0xba}, - // Block 0x76, offset 0x30c - {value: 0x0010, lo: 0x80, hi: 0x94}, - {value: 0x0014, lo: 0x95, hi: 0x95}, - {value: 0x0010, lo: 0x96, hi: 0xbf}, - // Block 0x77, offset 0x30f - {value: 0x0010, lo: 0x80, hi: 0x8c}, - // Block 0x78, offset 0x310 - {value: 0x0010, lo: 0x90, hi: 0xb7}, - {value: 0x0014, lo: 0xb8, hi: 0xbd}, - // Block 0x79, offset 0x312 - {value: 0x0010, lo: 0x80, hi: 0x8b}, - {value: 0x0014, lo: 0x8c, hi: 0x8c}, - {value: 0x0010, lo: 0x90, hi: 0xab}, - // Block 0x7a, offset 0x315 - {value: 0x0117, lo: 0x80, hi: 0xad}, - {value: 0x0010, lo: 0xae, hi: 0xae}, - {value: 0x0024, lo: 0xaf, hi: 0xaf}, - {value: 0x0014, lo: 0xb0, hi: 0xb2}, - {value: 0x0024, lo: 0xb4, hi: 0xbd}, - {value: 0x0014, lo: 0xbf, hi: 0xbf}, - // Block 0x7b, offset 0x31b - {value: 0x0117, lo: 0x80, hi: 0x9b}, - {value: 0x0015, lo: 0x9c, hi: 0x9d}, - {value: 0x0024, lo: 0x9e, hi: 0x9f}, - {value: 0x0010, lo: 0xa0, hi: 0xbf}, - // Block 0x7c, offset 0x31f - {value: 0x0010, lo: 0x80, hi: 0xaf}, - {value: 0x0024, lo: 0xb0, hi: 0xb1}, - // Block 0x7d, offset 0x321 - {value: 0x0004, lo: 0x80, hi: 0x96}, - {value: 0x0014, lo: 0x97, hi: 0x9f}, - {value: 0x0004, lo: 0xa0, hi: 0xa1}, - {value: 0x0117, lo: 0xa2, hi: 0xaf}, - {value: 0x0012, lo: 0xb0, hi: 0xb1}, - {value: 0x0117, lo: 0xb2, hi: 0xbf}, - // Block 0x7e, offset 0x327 - {value: 0x0117, lo: 0x80, hi: 0xaf}, - {value: 0x0015, lo: 0xb0, hi: 0xb0}, - {value: 0x0012, lo: 0xb1, hi: 0xb8}, - {value: 0x0316, lo: 0xb9, hi: 0xba}, - {value: 0x0716, lo: 0xbb, hi: 0xbc}, - {value: 0x8453, lo: 0xbd, hi: 0xbd}, - {value: 0x0117, lo: 0xbe, hi: 0xbf}, - // Block 0x7f, offset 0x32e - {value: 0x0010, lo: 0xb7, hi: 0xb7}, - {value: 0x0015, lo: 0xb8, hi: 0xb9}, - {value: 0x0012, lo: 0xba, hi: 0xba}, - {value: 0x0010, lo: 0xbb, hi: 0xbf}, - // Block 0x80, offset 0x332 - {value: 0x0010, lo: 0x80, hi: 0x81}, - {value: 0x0014, lo: 0x82, hi: 0x82}, - {value: 0x0010, lo: 0x83, hi: 0x85}, - {value: 0x0034, lo: 0x86, hi: 0x86}, - {value: 0x0010, lo: 0x87, hi: 0x8a}, - {value: 0x0014, lo: 0x8b, hi: 0x8b}, - {value: 0x0010, lo: 0x8c, hi: 0xa4}, - {value: 0x0014, lo: 0xa5, hi: 0xa6}, - {value: 0x0010, lo: 0xa7, hi: 0xa7}, - // Block 0x81, offset 0x33b - {value: 0x0010, lo: 0x80, hi: 0xb3}, - // Block 0x82, offset 0x33c - {value: 0x0010, lo: 0x80, hi: 0x83}, - {value: 0x0034, lo: 0x84, hi: 0x84}, - {value: 0x0014, lo: 0x85, hi: 0x85}, - {value: 0x0010, lo: 0x90, hi: 0x99}, - {value: 0x0024, lo: 0xa0, hi: 0xb1}, - {value: 0x0010, lo: 0xb2, hi: 0xb7}, - {value: 0x0010, lo: 0xbb, hi: 0xbb}, - {value: 0x0010, lo: 0xbd, hi: 0xbd}, - // Block 0x83, offset 0x344 - {value: 0x0010, lo: 0x80, hi: 0xa5}, - {value: 0x0014, lo: 0xa6, hi: 0xaa}, - {value: 0x0034, lo: 0xab, hi: 0xad}, - {value: 0x0010, lo: 0xb0, hi: 0xbf}, - // Block 0x84, offset 0x348 - {value: 0x0010, lo: 0x80, hi: 0x86}, - {value: 0x0014, lo: 0x87, hi: 0x91}, - {value: 0x0010, lo: 0x92, hi: 0x92}, - {value: 0x0030, lo: 0x93, hi: 0x93}, - {value: 0x0010, lo: 0xa0, hi: 0xbc}, - // Block 0x85, offset 0x34d - {value: 0x0014, lo: 0x80, hi: 0x82}, - {value: 0x0010, lo: 0x83, hi: 0xb2}, - {value: 0x0034, lo: 0xb3, hi: 0xb3}, - {value: 0x0010, lo: 0xb4, hi: 0xb5}, - {value: 0x0014, lo: 0xb6, hi: 0xb9}, - {value: 0x0010, lo: 0xba, hi: 0xbb}, - {value: 0x0014, lo: 0xbc, hi: 0xbc}, - {value: 0x0010, lo: 0xbd, hi: 0xbf}, - // Block 0x86, offset 0x355 - {value: 0x0030, lo: 0x80, hi: 0x80}, - {value: 0x0014, lo: 0x8f, hi: 0x8f}, - {value: 0x0010, lo: 0x90, hi: 0x99}, - {value: 0x0014, lo: 0xa5, hi: 0xa5}, - {value: 0x0004, lo: 0xa6, hi: 0xa6}, - {value: 0x0010, lo: 0xb0, hi: 0xb9}, - // Block 0x87, offset 0x35b - {value: 0x0010, lo: 0x80, hi: 0xa8}, - {value: 0x0014, lo: 0xa9, hi: 0xae}, - {value: 0x0010, lo: 0xaf, hi: 0xb0}, - {value: 0x0014, lo: 0xb1, hi: 0xb2}, - {value: 0x0010, lo: 0xb3, hi: 0xb4}, - {value: 0x0014, lo: 0xb5, hi: 0xb6}, - // Block 0x88, offset 0x361 - {value: 0x0010, lo: 0x80, hi: 0x82}, - {value: 0x0014, lo: 0x83, hi: 0x83}, - {value: 0x0010, lo: 0x84, hi: 0x8b}, - {value: 0x0014, lo: 0x8c, hi: 0x8c}, - {value: 0x0010, lo: 0x8d, hi: 0x8d}, - {value: 0x0010, lo: 0x90, hi: 0x99}, - {value: 0x0004, lo: 0xb0, hi: 0xb0}, - {value: 0x0010, lo: 0xbb, hi: 0xbb}, - {value: 0x0014, lo: 0xbc, hi: 0xbc}, - {value: 0x0010, lo: 0xbd, hi: 0xbd}, - // Block 0x89, offset 0x36b - {value: 0x0024, lo: 0xb0, hi: 0xb0}, - {value: 0x0024, lo: 0xb2, hi: 0xb3}, - {value: 0x0034, lo: 0xb4, hi: 0xb4}, - {value: 0x0024, lo: 0xb7, hi: 0xb8}, - {value: 0x0024, lo: 0xbe, hi: 0xbf}, - // Block 0x8a, offset 0x370 - {value: 0x0024, lo: 0x81, hi: 0x81}, - {value: 0x0004, lo: 0x9d, hi: 0x9d}, - {value: 0x0010, lo: 0xa0, hi: 0xab}, - {value: 0x0014, lo: 0xac, hi: 0xad}, - {value: 0x0010, lo: 0xae, hi: 0xaf}, - {value: 0x0010, lo: 0xb2, hi: 0xb2}, - {value: 0x0014, lo: 0xb3, hi: 0xb4}, - {value: 0x0010, lo: 0xb5, hi: 0xb5}, - {value: 0x0034, lo: 0xb6, hi: 0xb6}, - // Block 0x8b, offset 0x379 - {value: 0x0010, lo: 0x81, hi: 0x86}, - {value: 0x0010, lo: 0x89, hi: 0x8e}, - {value: 0x0010, lo: 0x91, hi: 0x96}, - {value: 0x0010, lo: 0xa0, hi: 0xa6}, - {value: 0x0010, lo: 0xa8, hi: 0xae}, - {value: 0x0012, lo: 0xb0, hi: 0xbf}, - // Block 0x8c, offset 0x37f - {value: 0x0012, lo: 0x80, hi: 0x92}, - {value: 0xac52, lo: 0x93, hi: 0x93}, - {value: 0x0012, lo: 0x94, hi: 0x9a}, - {value: 0x0004, lo: 0x9b, hi: 0x9b}, - {value: 0x0015, lo: 0x9c, hi: 0x9f}, - {value: 0x0012, lo: 0xa0, hi: 0xa5}, - {value: 0x74d2, lo: 0xb0, hi: 0xbf}, - // Block 0x8d, offset 0x386 - {value: 0x78d2, lo: 0x80, hi: 0x8f}, - {value: 0x7cd2, lo: 0x90, hi: 0x9f}, - {value: 0x80d2, lo: 0xa0, hi: 0xaf}, - {value: 0x7cd2, lo: 0xb0, hi: 0xbf}, - // Block 0x8e, offset 0x38a - {value: 0x0010, lo: 0x80, hi: 0xa4}, - {value: 0x0014, lo: 0xa5, hi: 0xa5}, - {value: 0x0010, lo: 0xa6, hi: 0xa7}, - {value: 0x0014, lo: 0xa8, hi: 0xa8}, - {value: 0x0010, lo: 0xa9, hi: 0xaa}, - {value: 0x0010, lo: 0xac, hi: 0xac}, - {value: 0x0034, lo: 0xad, hi: 0xad}, - {value: 0x0010, lo: 0xb0, hi: 0xb9}, - // Block 0x8f, offset 0x392 - {value: 0x0010, lo: 0x80, hi: 0xa3}, - {value: 0x0010, lo: 0xb0, hi: 0xbf}, - // Block 0x90, offset 0x394 - {value: 0x0010, lo: 0x80, hi: 0x86}, - {value: 0x0010, lo: 0x8b, hi: 0xbb}, - // Block 0x91, offset 0x396 - {value: 0x0010, lo: 0x80, hi: 0x81}, - {value: 0x0010, lo: 0x83, hi: 0x84}, - {value: 0x0010, lo: 0x86, hi: 0xbf}, - // Block 0x92, offset 0x399 - {value: 0x0010, lo: 0x80, hi: 0xb1}, - {value: 0x0004, lo: 0xb2, hi: 0xbf}, - // Block 0x93, offset 0x39b - {value: 0x0004, lo: 0x80, hi: 0x81}, - {value: 0x0010, lo: 0x93, hi: 0xbf}, - // Block 0x94, offset 0x39d - {value: 0x0010, lo: 0x80, hi: 0xbd}, - // Block 0x95, offset 0x39e - {value: 0x0010, lo: 0x90, hi: 0xbf}, - // Block 0x96, offset 0x39f - {value: 0x0010, lo: 0x80, hi: 0x8f}, - {value: 0x0010, lo: 0x92, hi: 0xbf}, - // Block 0x97, offset 0x3a1 - {value: 0x0010, lo: 0x80, hi: 0x87}, - {value: 0x0010, lo: 0xb0, hi: 0xbb}, - // Block 0x98, offset 0x3a3 - {value: 0x0014, lo: 0x80, hi: 0x8f}, - {value: 0x0054, lo: 0x93, hi: 0x93}, - {value: 0x0024, lo: 0xa0, hi: 0xa6}, - {value: 0x0034, lo: 0xa7, hi: 0xad}, - {value: 0x0024, lo: 0xae, hi: 0xaf}, - {value: 0x0010, lo: 0xb3, hi: 0xb4}, - // Block 0x99, offset 0x3a9 - {value: 0x0010, lo: 0x8d, hi: 0x8f}, - {value: 0x0054, lo: 0x92, hi: 0x92}, - {value: 0x0054, lo: 0x95, hi: 0x95}, - {value: 0x0010, lo: 0xb0, hi: 0xb4}, - {value: 0x0010, lo: 0xb6, hi: 0xbf}, - // Block 0x9a, offset 0x3ae - {value: 0x0010, lo: 0x80, hi: 0xbc}, - {value: 0x0014, lo: 0xbf, hi: 0xbf}, - // Block 0x9b, offset 0x3b0 - {value: 0x0054, lo: 0x87, hi: 0x87}, - {value: 0x0054, lo: 0x8e, hi: 0x8e}, - {value: 0x0054, lo: 0x9a, hi: 0x9a}, - {value: 0x5f53, lo: 0xa1, hi: 0xba}, - {value: 0x0004, lo: 0xbe, hi: 0xbe}, - {value: 0x0010, lo: 0xbf, hi: 0xbf}, - // Block 0x9c, offset 0x3b6 - {value: 0x0004, lo: 0x80, hi: 0x80}, - {value: 0x5f52, lo: 0x81, hi: 0x9a}, - {value: 0x0004, lo: 0xb0, hi: 0xb0}, - // Block 0x9d, offset 0x3b9 - {value: 0x0014, lo: 0x9e, hi: 0x9f}, - {value: 0x0010, lo: 0xa0, hi: 0xbe}, - // Block 0x9e, offset 0x3bb - {value: 0x0010, lo: 0x82, hi: 0x87}, - {value: 0x0010, lo: 0x8a, hi: 0x8f}, - {value: 0x0010, lo: 0x92, hi: 0x97}, - {value: 0x0010, lo: 0x9a, hi: 0x9c}, - {value: 0x0004, lo: 0xa3, hi: 0xa3}, - {value: 0x0014, lo: 0xb9, hi: 0xbb}, - // Block 0x9f, offset 0x3c1 - {value: 0x0010, lo: 0x80, hi: 0x8b}, - {value: 0x0010, lo: 0x8d, hi: 0xa6}, - {value: 0x0010, lo: 0xa8, hi: 0xba}, - {value: 0x0010, lo: 0xbc, hi: 0xbd}, - {value: 0x0010, lo: 0xbf, hi: 0xbf}, - // Block 0xa0, offset 0x3c6 - {value: 0x0010, lo: 0x80, hi: 0x8d}, - {value: 0x0010, lo: 0x90, hi: 0x9d}, - // Block 0xa1, offset 0x3c8 - {value: 0x0010, lo: 0x80, hi: 0xba}, - // Block 0xa2, offset 0x3c9 - {value: 0x0010, lo: 0x80, hi: 0xb4}, - // Block 0xa3, offset 0x3ca - {value: 0x0034, lo: 0xbd, hi: 0xbd}, - // Block 0xa4, offset 0x3cb - {value: 0x0010, lo: 0x80, hi: 0x9c}, - {value: 0x0010, lo: 0xa0, hi: 0xbf}, - // Block 0xa5, offset 0x3cd - {value: 0x0010, lo: 0x80, hi: 0x90}, - {value: 0x0034, lo: 0xa0, hi: 0xa0}, - // Block 0xa6, offset 0x3cf - {value: 0x0010, lo: 0x80, hi: 0x9f}, - {value: 0x0010, lo: 0xb0, hi: 0xbf}, - // Block 0xa7, offset 0x3d1 - {value: 0x0010, lo: 0x80, hi: 0x8a}, - {value: 0x0010, lo: 0x90, hi: 0xb5}, - {value: 0x0024, lo: 0xb6, hi: 0xba}, - // Block 0xa8, offset 0x3d4 - {value: 0x0010, lo: 0x80, hi: 0x9d}, - {value: 0x0010, lo: 0xa0, hi: 0xbf}, - // Block 0xa9, offset 0x3d6 - {value: 0x0010, lo: 0x80, hi: 0x83}, - {value: 0x0010, lo: 0x88, hi: 0x8f}, - {value: 0x0010, lo: 0x91, hi: 0x95}, - // Block 0xaa, offset 0x3d9 - {value: 0x2813, lo: 0x80, hi: 0x87}, - {value: 0x3813, lo: 0x88, hi: 0x8f}, - {value: 0x2813, lo: 0x90, hi: 0x97}, - {value: 0xaf53, lo: 0x98, hi: 0x9f}, - {value: 0xb253, lo: 0xa0, hi: 0xa7}, - {value: 0x2812, lo: 0xa8, hi: 0xaf}, - {value: 0x3812, lo: 0xb0, hi: 0xb7}, - {value: 0x2812, lo: 0xb8, hi: 0xbf}, - // Block 0xab, offset 0x3e1 - {value: 0xaf52, lo: 0x80, hi: 0x87}, - {value: 0xb252, lo: 0x88, hi: 0x8f}, - {value: 0x0010, lo: 0x90, hi: 0xbf}, - // Block 0xac, offset 0x3e4 - {value: 0x0010, lo: 0x80, hi: 0x9d}, - {value: 0x0010, lo: 0xa0, hi: 0xa9}, - {value: 0xb253, lo: 0xb0, hi: 0xb7}, - {value: 0xaf53, lo: 0xb8, hi: 0xbf}, - // Block 0xad, offset 0x3e8 - {value: 0x2813, lo: 0x80, hi: 0x87}, - {value: 0x3813, lo: 0x88, hi: 0x8f}, - {value: 0x2813, lo: 0x90, hi: 0x93}, - {value: 0xb252, lo: 0x98, hi: 0x9f}, - {value: 0xaf52, lo: 0xa0, hi: 0xa7}, - {value: 0x2812, lo: 0xa8, hi: 0xaf}, - {value: 0x3812, lo: 0xb0, hi: 0xb7}, - {value: 0x2812, lo: 0xb8, hi: 0xbb}, - // Block 0xae, offset 0x3f0 - {value: 0x0010, lo: 0x80, hi: 0xa7}, - {value: 0x0010, lo: 0xb0, hi: 0xbf}, - // Block 0xaf, offset 0x3f2 - {value: 0x0010, lo: 0x80, hi: 0xa3}, - // Block 0xb0, offset 0x3f3 - {value: 0x0010, lo: 0x80, hi: 0xb6}, - // Block 0xb1, offset 0x3f4 - {value: 0x0010, lo: 0x80, hi: 0x95}, - {value: 0x0010, lo: 0xa0, hi: 0xa7}, - // Block 0xb2, offset 0x3f6 - {value: 0x0010, lo: 0x80, hi: 0x85}, - {value: 0x0010, lo: 0x88, hi: 0x88}, - {value: 0x0010, lo: 0x8a, hi: 0xb5}, - {value: 0x0010, lo: 0xb7, hi: 0xb8}, - {value: 0x0010, lo: 0xbc, hi: 0xbc}, - {value: 0x0010, lo: 0xbf, hi: 0xbf}, - // Block 0xb3, offset 0x3fc - {value: 0x0010, lo: 0x80, hi: 0x95}, - {value: 0x0010, lo: 0xa0, hi: 0xb6}, - // Block 0xb4, offset 0x3fe - {value: 0x0010, lo: 0x80, hi: 0x9e}, - // Block 0xb5, offset 0x3ff - {value: 0x0010, lo: 0xa0, hi: 0xb2}, - {value: 0x0010, lo: 0xb4, hi: 0xb5}, - // Block 0xb6, offset 0x401 - {value: 0x0010, lo: 0x80, hi: 0x95}, - {value: 0x0010, lo: 0xa0, hi: 0xb9}, - // Block 0xb7, offset 0x403 - {value: 0x0010, lo: 0x80, hi: 0xb7}, - {value: 0x0010, lo: 0xbe, hi: 0xbf}, - // Block 0xb8, offset 0x405 - {value: 0x0010, lo: 0x80, hi: 0x80}, - {value: 0x0014, lo: 0x81, hi: 0x83}, - {value: 0x0014, lo: 0x85, hi: 0x86}, - {value: 0x0014, lo: 0x8c, hi: 0x8c}, - {value: 0x0034, lo: 0x8d, hi: 0x8d}, - {value: 0x0014, lo: 0x8e, hi: 0x8e}, - {value: 0x0024, lo: 0x8f, hi: 0x8f}, - {value: 0x0010, lo: 0x90, hi: 0x93}, - {value: 0x0010, lo: 0x95, hi: 0x97}, - {value: 0x0010, lo: 0x99, hi: 0xb3}, - {value: 0x0024, lo: 0xb8, hi: 0xb8}, - {value: 0x0034, lo: 0xb9, hi: 0xba}, - {value: 0x0034, lo: 0xbf, hi: 0xbf}, - // Block 0xb9, offset 0x412 - {value: 0x0010, lo: 0xa0, hi: 0xbc}, - // Block 0xba, offset 0x413 - {value: 0x0010, lo: 0x80, hi: 0x9c}, - // Block 0xbb, offset 0x414 - {value: 0x0010, lo: 0x80, hi: 0x87}, - {value: 0x0010, lo: 0x89, hi: 0xa4}, - {value: 0x0024, lo: 0xa5, hi: 0xa5}, - {value: 0x0034, lo: 0xa6, hi: 0xa6}, - // Block 0xbc, offset 0x418 - {value: 0x0010, lo: 0x80, hi: 0x95}, - {value: 0x0010, lo: 0xa0, hi: 0xb2}, - // Block 0xbd, offset 0x41a - {value: 0x0010, lo: 0x80, hi: 0x91}, - // Block 0xbe, offset 0x41b - {value: 0x0010, lo: 0x80, hi: 0x88}, - // Block 0xbf, offset 0x41c - {value: 0x5653, lo: 0x80, hi: 0xb2}, - // Block 0xc0, offset 0x41d - {value: 0x5652, lo: 0x80, hi: 0xb2}, - // Block 0xc1, offset 0x41e - {value: 0x0010, lo: 0x80, hi: 0x80}, - {value: 0x0014, lo: 0x81, hi: 0x81}, - {value: 0x0010, lo: 0x82, hi: 0xb7}, - {value: 0x0014, lo: 0xb8, hi: 0xbf}, - // Block 0xc2, offset 0x422 - {value: 0x0014, lo: 0x80, hi: 0x85}, - {value: 0x0034, lo: 0x86, hi: 0x86}, - {value: 0x0010, lo: 0xa6, hi: 0xaf}, - {value: 0x0034, lo: 0xbf, hi: 0xbf}, - // Block 0xc3, offset 0x426 - {value: 0x0014, lo: 0x80, hi: 0x81}, - {value: 0x0010, lo: 0x82, hi: 0xb2}, - {value: 0x0014, lo: 0xb3, hi: 0xb6}, - {value: 0x0010, lo: 0xb7, hi: 0xb8}, - {value: 0x0034, lo: 0xb9, hi: 0xba}, - {value: 0x0014, lo: 0xbd, hi: 0xbd}, - // Block 0xc4, offset 0x42c - {value: 0x0010, lo: 0x90, hi: 0xa8}, - {value: 0x0010, lo: 0xb0, hi: 0xb9}, - // Block 0xc5, offset 0x42e - {value: 0x0024, lo: 0x80, hi: 0x82}, - {value: 0x0010, lo: 0x83, hi: 0xa6}, - {value: 0x0014, lo: 0xa7, hi: 0xab}, - {value: 0x0010, lo: 0xac, hi: 0xac}, - {value: 0x0014, lo: 0xad, hi: 0xb2}, - {value: 0x0034, lo: 0xb3, hi: 0xb4}, - {value: 0x0010, lo: 0xb6, hi: 0xbf}, - // Block 0xc6, offset 0x435 - {value: 0x0010, lo: 0x90, hi: 0xb2}, - {value: 0x0034, lo: 0xb3, hi: 0xb3}, - {value: 0x0010, lo: 0xb6, hi: 0xb6}, - // Block 0xc7, offset 0x438 - {value: 0x0014, lo: 0x80, hi: 0x81}, - {value: 0x0010, lo: 0x82, hi: 0xb5}, - {value: 0x0014, lo: 0xb6, hi: 0xbe}, - {value: 0x0010, lo: 0xbf, hi: 0xbf}, - // Block 0xc8, offset 0x43c - {value: 0x0030, lo: 0x80, hi: 0x80}, - {value: 0x0010, lo: 0x81, hi: 0x84}, - {value: 0x0034, lo: 0x8a, hi: 0x8a}, - {value: 0x0014, lo: 0x8b, hi: 0x8c}, - {value: 0x0010, lo: 0x90, hi: 0x9a}, - {value: 0x0010, lo: 0x9c, hi: 0x9c}, - // Block 0xc9, offset 0x442 - {value: 0x0010, lo: 0x80, hi: 0x91}, - {value: 0x0010, lo: 0x93, hi: 0xae}, - {value: 0x0014, lo: 0xaf, hi: 0xb1}, - {value: 0x0010, lo: 0xb2, hi: 0xb3}, - {value: 0x0014, lo: 0xb4, hi: 0xb4}, - {value: 0x0030, lo: 0xb5, hi: 0xb5}, - {value: 0x0034, lo: 0xb6, hi: 0xb6}, - {value: 0x0014, lo: 0xb7, hi: 0xb7}, - {value: 0x0014, lo: 0xbe, hi: 0xbe}, - // Block 0xca, offset 0x44b - {value: 0x0010, lo: 0x80, hi: 0x86}, - {value: 0x0010, lo: 0x88, hi: 0x88}, - {value: 0x0010, lo: 0x8a, hi: 0x8d}, - {value: 0x0010, lo: 0x8f, hi: 0x9d}, - {value: 0x0010, lo: 0x9f, hi: 0xa8}, - {value: 0x0010, lo: 0xb0, hi: 0xbf}, - // Block 0xcb, offset 0x451 - {value: 0x0010, lo: 0x80, hi: 0x9e}, - {value: 0x0014, lo: 0x9f, hi: 0x9f}, - {value: 0x0010, lo: 0xa0, hi: 0xa2}, - {value: 0x0014, lo: 0xa3, hi: 0xa8}, - {value: 0x0034, lo: 0xa9, hi: 0xaa}, - {value: 0x0010, lo: 0xb0, hi: 0xb9}, - // Block 0xcc, offset 0x457 - {value: 0x0014, lo: 0x80, hi: 0x81}, - {value: 0x0010, lo: 0x82, hi: 0x83}, - {value: 0x0010, lo: 0x85, hi: 0x8c}, - {value: 0x0010, lo: 0x8f, hi: 0x90}, - {value: 0x0010, lo: 0x93, hi: 0xa8}, - {value: 0x0010, lo: 0xaa, hi: 0xb0}, - {value: 0x0010, lo: 0xb2, hi: 0xb3}, - {value: 0x0010, lo: 0xb5, hi: 0xb9}, - {value: 0x0034, lo: 0xbc, hi: 0xbc}, - {value: 0x0010, lo: 0xbd, hi: 0xbf}, - // Block 0xcd, offset 0x461 - {value: 0x0014, lo: 0x80, hi: 0x80}, - {value: 0x0010, lo: 0x81, hi: 0x84}, - {value: 0x0010, lo: 0x87, hi: 0x88}, - {value: 0x0010, lo: 0x8b, hi: 0x8c}, - {value: 0x0030, lo: 0x8d, hi: 0x8d}, - {value: 0x0010, lo: 0x90, hi: 0x90}, - {value: 0x0010, lo: 0x97, hi: 0x97}, - {value: 0x0010, lo: 0x9d, hi: 0xa3}, - {value: 0x0024, lo: 0xa6, hi: 0xac}, - {value: 0x0024, lo: 0xb0, hi: 0xb4}, - // Block 0xce, offset 0x46b - {value: 0x0010, lo: 0x80, hi: 0xb7}, - {value: 0x0014, lo: 0xb8, hi: 0xbf}, - // Block 0xcf, offset 0x46d - {value: 0x0010, lo: 0x80, hi: 0x81}, - {value: 0x0034, lo: 0x82, hi: 0x82}, - {value: 0x0014, lo: 0x83, hi: 0x84}, - {value: 0x0010, lo: 0x85, hi: 0x85}, - {value: 0x0034, lo: 0x86, hi: 0x86}, - {value: 0x0010, lo: 0x87, hi: 0x8a}, - {value: 0x0010, lo: 0x90, hi: 0x99}, - // Block 0xd0, offset 0x474 - {value: 0x0010, lo: 0x80, hi: 0xb2}, - {value: 0x0014, lo: 0xb3, hi: 0xb8}, - {value: 0x0010, lo: 0xb9, hi: 0xb9}, - {value: 0x0014, lo: 0xba, hi: 0xba}, - {value: 0x0010, lo: 0xbb, hi: 0xbe}, - {value: 0x0014, lo: 0xbf, hi: 0xbf}, - // Block 0xd1, offset 0x47a - {value: 0x0014, lo: 0x80, hi: 0x80}, - {value: 0x0010, lo: 0x81, hi: 0x81}, - {value: 0x0034, lo: 0x82, hi: 0x83}, - {value: 0x0010, lo: 0x84, hi: 0x85}, - {value: 0x0010, lo: 0x87, hi: 0x87}, - {value: 0x0010, lo: 0x90, hi: 0x99}, - // Block 0xd2, offset 0x480 - {value: 0x0010, lo: 0x80, hi: 0xb1}, - {value: 0x0014, lo: 0xb2, hi: 0xb5}, - {value: 0x0010, lo: 0xb8, hi: 0xbb}, - {value: 0x0014, lo: 0xbc, hi: 0xbd}, - {value: 0x0010, lo: 0xbe, hi: 0xbe}, - {value: 0x0034, lo: 0xbf, hi: 0xbf}, - // Block 0xd3, offset 0x486 - {value: 0x0034, lo: 0x80, hi: 0x80}, - {value: 0x0010, lo: 0x98, hi: 0x9b}, - {value: 0x0014, lo: 0x9c, hi: 0x9d}, - // Block 0xd4, offset 0x489 - {value: 0x0010, lo: 0x80, hi: 0xb2}, - {value: 0x0014, lo: 0xb3, hi: 0xba}, - {value: 0x0010, lo: 0xbb, hi: 0xbc}, - {value: 0x0014, lo: 0xbd, hi: 0xbd}, - {value: 0x0010, lo: 0xbe, hi: 0xbe}, - {value: 0x0034, lo: 0xbf, hi: 0xbf}, - // Block 0xd5, offset 0x48f - {value: 0x0014, lo: 0x80, hi: 0x80}, - {value: 0x0010, lo: 0x84, hi: 0x84}, - {value: 0x0010, lo: 0x90, hi: 0x99}, - // Block 0xd6, offset 0x492 - {value: 0x0010, lo: 0x80, hi: 0xaa}, - {value: 0x0014, lo: 0xab, hi: 0xab}, - {value: 0x0010, lo: 0xac, hi: 0xac}, - {value: 0x0014, lo: 0xad, hi: 0xad}, - {value: 0x0010, lo: 0xae, hi: 0xaf}, - {value: 0x0014, lo: 0xb0, hi: 0xb5}, - {value: 0x0030, lo: 0xb6, hi: 0xb6}, - {value: 0x0034, lo: 0xb7, hi: 0xb7}, - // Block 0xd7, offset 0x49a - {value: 0x0010, lo: 0x80, hi: 0x89}, - // Block 0xd8, offset 0x49b - {value: 0x0014, lo: 0x9d, hi: 0x9f}, - {value: 0x0010, lo: 0xa0, hi: 0xa1}, - {value: 0x0014, lo: 0xa2, hi: 0xa5}, - {value: 0x0010, lo: 0xa6, hi: 0xa6}, - {value: 0x0014, lo: 0xa7, hi: 0xaa}, - {value: 0x0034, lo: 0xab, hi: 0xab}, - {value: 0x0010, lo: 0xb0, hi: 0xb9}, - // Block 0xd9, offset 0x4a2 - {value: 0x5f53, lo: 0xa0, hi: 0xbf}, - // Block 0xda, offset 0x4a3 - {value: 0x5f52, lo: 0x80, hi: 0x9f}, - {value: 0x0010, lo: 0xa0, hi: 0xa9}, - {value: 0x0010, lo: 0xbf, hi: 0xbf}, - // Block 0xdb, offset 0x4a6 - {value: 0x0010, lo: 0x80, hi: 0xb8}, - // Block 0xdc, offset 0x4a7 - {value: 0x0010, lo: 0x80, hi: 0x88}, - {value: 0x0010, lo: 0x8a, hi: 0xaf}, - {value: 0x0014, lo: 0xb0, hi: 0xb6}, - {value: 0x0014, lo: 0xb8, hi: 0xbd}, - {value: 0x0010, lo: 0xbe, hi: 0xbe}, - {value: 0x0034, lo: 0xbf, hi: 0xbf}, - // Block 0xdd, offset 0x4ad - {value: 0x0010, lo: 0x80, hi: 0x80}, - {value: 0x0010, lo: 0x90, hi: 0x99}, - {value: 0x0010, lo: 0xb2, hi: 0xbf}, - // Block 0xde, offset 0x4b0 - {value: 0x0010, lo: 0x80, hi: 0x8f}, - {value: 0x0014, lo: 0x92, hi: 0xa7}, - {value: 0x0010, lo: 0xa9, hi: 0xa9}, - {value: 0x0014, lo: 0xaa, hi: 0xb0}, - {value: 0x0010, lo: 0xb1, hi: 0xb1}, - {value: 0x0014, lo: 0xb2, hi: 0xb3}, - {value: 0x0010, lo: 0xb4, hi: 0xb4}, - {value: 0x0014, lo: 0xb5, hi: 0xb6}, - // Block 0xdf, offset 0x4b8 - {value: 0x0010, lo: 0x80, hi: 0x99}, - // Block 0xe0, offset 0x4b9 - {value: 0x0010, lo: 0x80, hi: 0xae}, - // Block 0xe1, offset 0x4ba - {value: 0x0010, lo: 0x80, hi: 0x83}, - // Block 0xe2, offset 0x4bb - {value: 0x0010, lo: 0x80, hi: 0x86}, - // Block 0xe3, offset 0x4bc - {value: 0x0010, lo: 0x80, hi: 0x9e}, - {value: 0x0010, lo: 0xa0, hi: 0xa9}, - // Block 0xe4, offset 0x4be - {value: 0x0010, lo: 0x90, hi: 0xad}, - {value: 0x0034, lo: 0xb0, hi: 0xb4}, - // Block 0xe5, offset 0x4c0 - {value: 0x0010, lo: 0x80, hi: 0xaf}, - {value: 0x0024, lo: 0xb0, hi: 0xb6}, - // Block 0xe6, offset 0x4c2 - {value: 0x0014, lo: 0x80, hi: 0x83}, - {value: 0x0010, lo: 0x90, hi: 0x99}, - {value: 0x0010, lo: 0xa3, hi: 0xb7}, - {value: 0x0010, lo: 0xbd, hi: 0xbf}, - // Block 0xe7, offset 0x4c6 - {value: 0x0010, lo: 0x80, hi: 0x8f}, - // Block 0xe8, offset 0x4c7 - {value: 0x0010, lo: 0x80, hi: 0x84}, - {value: 0x0010, lo: 0x90, hi: 0xbe}, - // Block 0xe9, offset 0x4c9 - {value: 0x0014, lo: 0x8f, hi: 0x9f}, - // Block 0xea, offset 0x4ca - {value: 0x0014, lo: 0xa0, hi: 0xa0}, - // Block 0xeb, offset 0x4cb - {value: 0x0010, lo: 0x80, hi: 0xaa}, - {value: 0x0010, lo: 0xb0, hi: 0xbc}, - // Block 0xec, offset 0x4cd - {value: 0x0010, lo: 0x80, hi: 0x88}, - {value: 0x0010, lo: 0x90, hi: 0x99}, - {value: 0x0014, lo: 0x9d, hi: 0x9d}, - {value: 0x0034, lo: 0x9e, hi: 0x9e}, - {value: 0x0014, lo: 0xa0, hi: 0xa3}, - // Block 0xed, offset 0x4d2 - {value: 0x0030, lo: 0xa5, hi: 0xa6}, - {value: 0x0034, lo: 0xa7, hi: 0xa9}, - {value: 0x0030, lo: 0xad, hi: 0xb2}, - {value: 0x0014, lo: 0xb3, hi: 0xba}, - {value: 0x0034, lo: 0xbb, hi: 0xbf}, - // Block 0xee, offset 0x4d7 - {value: 0x0034, lo: 0x80, hi: 0x82}, - {value: 0x0024, lo: 0x85, hi: 0x89}, - {value: 0x0034, lo: 0x8a, hi: 0x8b}, - {value: 0x0024, lo: 0xaa, hi: 0xad}, - // Block 0xef, offset 0x4db - {value: 0x0024, lo: 0x82, hi: 0x84}, - // Block 0xf0, offset 0x4dc - {value: 0x0013, lo: 0x80, hi: 0x99}, - {value: 0x0012, lo: 0x9a, hi: 0xb3}, - {value: 0x0013, lo: 0xb4, hi: 0xbf}, - // Block 0xf1, offset 0x4df - {value: 0x0013, lo: 0x80, hi: 0x8d}, - {value: 0x0012, lo: 0x8e, hi: 0x94}, - {value: 0x0012, lo: 0x96, hi: 0xa7}, - {value: 0x0013, lo: 0xa8, hi: 0xbf}, - // Block 0xf2, offset 0x4e3 - {value: 0x0013, lo: 0x80, hi: 0x81}, - {value: 0x0012, lo: 0x82, hi: 0x9b}, - {value: 0x0013, lo: 0x9c, hi: 0x9c}, - {value: 0x0013, lo: 0x9e, hi: 0x9f}, - {value: 0x0013, lo: 0xa2, hi: 0xa2}, - {value: 0x0013, lo: 0xa5, hi: 0xa6}, - {value: 0x0013, lo: 0xa9, hi: 0xac}, - {value: 0x0013, lo: 0xae, hi: 0xb5}, - {value: 0x0012, lo: 0xb6, hi: 0xb9}, - {value: 0x0012, lo: 0xbb, hi: 0xbb}, - {value: 0x0012, lo: 0xbd, hi: 0xbf}, - // Block 0xf3, offset 0x4ee - {value: 0x0012, lo: 0x80, hi: 0x83}, - {value: 0x0012, lo: 0x85, hi: 0x8f}, - {value: 0x0013, lo: 0x90, hi: 0xa9}, - {value: 0x0012, lo: 0xaa, hi: 0xbf}, - // Block 0xf4, offset 0x4f2 - {value: 0x0012, lo: 0x80, hi: 0x83}, - {value: 0x0013, lo: 0x84, hi: 0x85}, - {value: 0x0013, lo: 0x87, hi: 0x8a}, - {value: 0x0013, lo: 0x8d, hi: 0x94}, - {value: 0x0013, lo: 0x96, hi: 0x9c}, - {value: 0x0012, lo: 0x9e, hi: 0xb7}, - {value: 0x0013, lo: 0xb8, hi: 0xb9}, - {value: 0x0013, lo: 0xbb, hi: 0xbe}, - // Block 0xf5, offset 0x4fa - {value: 0x0013, lo: 0x80, hi: 0x84}, - {value: 0x0013, lo: 0x86, hi: 0x86}, - {value: 0x0013, lo: 0x8a, hi: 0x90}, - {value: 0x0012, lo: 0x92, hi: 0xab}, - {value: 0x0013, lo: 0xac, hi: 0xbf}, - // Block 0xf6, offset 0x4ff - {value: 0x0013, lo: 0x80, hi: 0x85}, - {value: 0x0012, lo: 0x86, hi: 0x9f}, - {value: 0x0013, lo: 0xa0, hi: 0xb9}, - {value: 0x0012, lo: 0xba, hi: 0xbf}, - // Block 0xf7, offset 0x503 - {value: 0x0012, lo: 0x80, hi: 0x93}, - {value: 0x0013, lo: 0x94, hi: 0xad}, - {value: 0x0012, lo: 0xae, hi: 0xbf}, - // Block 0xf8, offset 0x506 - {value: 0x0012, lo: 0x80, hi: 0x87}, - {value: 0x0013, lo: 0x88, hi: 0xa1}, - {value: 0x0012, lo: 0xa2, hi: 0xbb}, - {value: 0x0013, lo: 0xbc, hi: 0xbf}, - // Block 0xf9, offset 0x50a - {value: 0x0013, lo: 0x80, hi: 0x95}, - {value: 0x0012, lo: 0x96, hi: 0xaf}, - {value: 0x0013, lo: 0xb0, hi: 0xbf}, - // Block 0xfa, offset 0x50d - {value: 0x0013, lo: 0x80, hi: 0x89}, - {value: 0x0012, lo: 0x8a, hi: 0xa5}, - {value: 0x0013, lo: 0xa8, hi: 0xbf}, - // Block 0xfb, offset 0x510 - {value: 0x0013, lo: 0x80, hi: 0x80}, - {value: 0x0012, lo: 0x82, hi: 0x9a}, - {value: 0x0012, lo: 0x9c, hi: 0xa1}, - {value: 0x0013, lo: 0xa2, hi: 0xba}, - {value: 0x0012, lo: 0xbc, hi: 0xbf}, - // Block 0xfc, offset 0x515 - {value: 0x0012, lo: 0x80, hi: 0x94}, - {value: 0x0012, lo: 0x96, hi: 0x9b}, - {value: 0x0013, lo: 0x9c, hi: 0xb4}, - {value: 0x0012, lo: 0xb6, hi: 0xbf}, - // Block 0xfd, offset 0x519 - {value: 0x0012, lo: 0x80, hi: 0x8e}, - {value: 0x0012, lo: 0x90, hi: 0x95}, - {value: 0x0013, lo: 0x96, hi: 0xae}, - {value: 0x0012, lo: 0xb0, hi: 0xbf}, - // Block 0xfe, offset 0x51d - {value: 0x0012, lo: 0x80, hi: 0x88}, - {value: 0x0012, lo: 0x8a, hi: 0x8f}, - {value: 0x0013, lo: 0x90, hi: 0xa8}, - {value: 0x0012, lo: 0xaa, hi: 0xbf}, - // Block 0xff, offset 0x521 - {value: 0x0012, lo: 0x80, hi: 0x82}, - {value: 0x0012, lo: 0x84, hi: 0x89}, - {value: 0x0017, lo: 0x8a, hi: 0x8b}, - {value: 0x0010, lo: 0x8e, hi: 0xbf}, - // Block 0x100, offset 0x525 - {value: 0x0014, lo: 0x80, hi: 0xb6}, - {value: 0x0014, lo: 0xbb, hi: 0xbf}, - // Block 0x101, offset 0x527 - {value: 0x0014, lo: 0x80, hi: 0xac}, - {value: 0x0014, lo: 0xb5, hi: 0xb5}, - // Block 0x102, offset 0x529 - {value: 0x0014, lo: 0x84, hi: 0x84}, - {value: 0x0014, lo: 0x9b, hi: 0x9f}, - {value: 0x0014, lo: 0xa1, hi: 0xaf}, - // Block 0x103, offset 0x52c - {value: 0x0024, lo: 0x80, hi: 0x86}, - {value: 0x0024, lo: 0x88, hi: 0x98}, - {value: 0x0024, lo: 0x9b, hi: 0xa1}, - {value: 0x0024, lo: 0xa3, hi: 0xa4}, - {value: 0x0024, lo: 0xa6, hi: 0xaa}, - // Block 0x104, offset 0x531 - {value: 0x0010, lo: 0x80, hi: 0x84}, - {value: 0x0034, lo: 0x90, hi: 0x96}, - // Block 0x105, offset 0x533 - {value: 0xb552, lo: 0x80, hi: 0x81}, - {value: 0xb852, lo: 0x82, hi: 0x83}, - {value: 0x0024, lo: 0x84, hi: 0x89}, - {value: 0x0034, lo: 0x8a, hi: 0x8a}, - {value: 0x0010, lo: 0x90, hi: 0x99}, - // Block 0x106, offset 0x538 - {value: 0x0010, lo: 0x80, hi: 0x83}, - {value: 0x0010, lo: 0x85, hi: 0x9f}, - {value: 0x0010, lo: 0xa1, hi: 0xa2}, - {value: 0x0010, lo: 0xa4, hi: 0xa4}, - {value: 0x0010, lo: 0xa7, hi: 0xa7}, - {value: 0x0010, lo: 0xa9, hi: 0xb2}, - {value: 0x0010, lo: 0xb4, hi: 0xb7}, - {value: 0x0010, lo: 0xb9, hi: 0xb9}, - {value: 0x0010, lo: 0xbb, hi: 0xbb}, - // Block 0x107, offset 0x541 - {value: 0x0010, lo: 0x80, hi: 0x89}, - {value: 0x0010, lo: 0x8b, hi: 0x9b}, - {value: 0x0010, lo: 0xa1, hi: 0xa3}, - {value: 0x0010, lo: 0xa5, hi: 0xa9}, - {value: 0x0010, lo: 0xab, hi: 0xbb}, - // Block 0x108, offset 0x546 - {value: 0x0013, lo: 0xb0, hi: 0xbf}, - // Block 0x109, offset 0x547 - {value: 0x0013, lo: 0x80, hi: 0x89}, - {value: 0x0013, lo: 0x90, hi: 0xa9}, - {value: 0x0013, lo: 0xb0, hi: 0xbf}, - // Block 0x10a, offset 0x54a - {value: 0x0013, lo: 0x80, hi: 0x89}, - // Block 0x10b, offset 0x54b - {value: 0x0004, lo: 0xbb, hi: 0xbf}, - // Block 0x10c, offset 0x54c - {value: 0x0014, lo: 0x81, hi: 0x81}, - {value: 0x0014, lo: 0xa0, hi: 0xbf}, - // Block 0x10d, offset 0x54e - {value: 0x0014, lo: 0x80, hi: 0xbf}, - // Block 0x10e, offset 0x54f - {value: 0x0014, lo: 0x80, hi: 0xaf}, -} - -// Total table size 13811 bytes (13KiB); checksum: 4CC48DA3 diff --git a/vendor/golang.org/x/text/cases/tables10.0.0.go b/vendor/golang.org/x/text/cases/tables10.0.0.go new file mode 100644 index 0000000..9800782 --- /dev/null +++ b/vendor/golang.org/x/text/cases/tables10.0.0.go @@ -0,0 +1,2253 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// +build go1.10 + +package cases + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "10.0.0" + +var xorData string = "" + // Size: 185 bytes + "\x00\x06\x07\x00\x01?\x00\x0f\x03\x00\x0f\x12\x00\x0f\x1f\x00\x0f\x1d" + + "\x00\x01\x13\x00\x0f\x16\x00\x0f\x0b\x00\x0f3\x00\x0f7\x00\x01#\x00\x0f?" + + "\x00\x0e'\x00\x0f/\x00\x0e>\x00\x0f*\x00\x0c&\x00\x0c*\x00\x0c;\x00\x0c9" + + "\x00\x0c%\x00\x01\x08\x00\x03\x0d\x00\x03\x09\x00\x02\x06\x00\x02\x02" + + "\x00\x02\x0c\x00\x01\x00\x00\x01\x03\x00\x01\x01\x00\x01 \x00\x01\x0c" + + "\x00\x01\x10\x00\x03\x10\x00\x036 \x00\x037 \x00\x0b#\x10\x00\x0b 0\x00" + + "\x0b!\x10\x00\x0b!0\x00\x0b(\x04\x00\x03\x04\x1e\x00\x03\x0a\x00\x02:" + + "\x00\x02>\x00\x02,\x00\x02\x00\x00\x02\x10\x00\x01<\x00\x01&\x00\x01*" + + "\x00\x01.\x00\x010\x003 \x00\x01\x18\x00\x01(\x00\x01\x1e\x00\x01\x22" + +var exceptions string = "" + // Size: 1852 bytes + "\x00\x12\x10μΜ\x12\x12ssSSSs\x13\x18i̇i̇\x10\x08I\x13\x18ʼnʼN\x11\x08sS" + + "\x12\x12dždžDž\x12\x12dždžDŽ\x10\x12DŽDž\x12\x12ljljLj\x12\x12ljljLJ\x10\x12LJLj\x12\x12" + + "njnjNj\x12\x12njnjNJ\x10\x12NJNj\x13\x18ǰJ̌\x12\x12dzdzDz\x12\x12dzdzDZ\x10\x12DZDz" + + "\x13\x18ⱥⱥ\x13\x18ⱦⱦ\x10\x18Ȿ\x10\x18Ɀ\x10\x18Ɐ\x10\x18Ɑ\x10\x18Ɒ\x10" + + "\x18Ɜ\x10\x18Ɡ\x10\x18Ɥ\x10\x18Ɦ\x10\x18Ɪ\x10\x18Ɫ\x10\x18Ɬ\x10\x18Ɱ\x10" + + "\x18Ɽ\x10\x18Ʇ\x10\x18Ʝ\x10\x18Ʞ2\x10ιΙ\x160ΐΪ́\x160ΰΫ́\x12\x10σΣ" + + "\x12\x10βΒ\x12\x10θΘ\x12\x10φΦ\x12\x10πΠ\x12\x10κΚ\x12\x10ρΡ\x12\x10εΕ" + + "\x14$եւԵՒԵւ\x12\x10вВ\x12\x10дД\x12\x10оО\x12\x10сС\x12\x10тТ\x12\x10тТ" + + "\x12\x10ъЪ\x12\x10ѣѢ\x13\x18ꙋꙊ\x13\x18ẖH̱\x13\x18ẗT̈\x13\x18ẘW̊\x13" + + "\x18ẙY̊\x13\x18aʾAʾ\x13\x18ṡṠ\x12\x10ssß\x14 ὐΥ̓\x160ὒΥ̓̀\x160ὔΥ̓́" + + "\x160ὖΥ̓͂\x15+ἀιἈΙᾈ\x15+ἁιἉΙᾉ\x15+ἂιἊΙᾊ\x15+ἃιἋΙᾋ\x15+ἄιἌΙᾌ\x15+ἅιἍΙᾍ" + + "\x15+ἆιἎΙᾎ\x15+ἇιἏΙᾏ\x15\x1dἀιᾀἈΙ\x15\x1dἁιᾁἉΙ\x15\x1dἂιᾂἊΙ\x15\x1dἃιᾃἋΙ" + + "\x15\x1dἄιᾄἌΙ\x15\x1dἅιᾅἍΙ\x15\x1dἆιᾆἎΙ\x15\x1dἇιᾇἏΙ\x15+ἠιἨΙᾘ\x15+ἡιἩΙᾙ" + + "\x15+ἢιἪΙᾚ\x15+ἣιἫΙᾛ\x15+ἤιἬΙᾜ\x15+ἥιἭΙᾝ\x15+ἦιἮΙᾞ\x15+ἧιἯΙᾟ\x15\x1dἠιᾐἨ" + + "Ι\x15\x1dἡιᾑἩΙ\x15\x1dἢιᾒἪΙ\x15\x1dἣιᾓἫΙ\x15\x1dἤιᾔἬΙ\x15\x1dἥιᾕἭΙ\x15" + + "\x1dἦιᾖἮΙ\x15\x1dἧιᾗἯΙ\x15+ὠιὨΙᾨ\x15+ὡιὩΙᾩ\x15+ὢιὪΙᾪ\x15+ὣιὫΙᾫ\x15+ὤιὬΙᾬ" + + "\x15+ὥιὭΙᾭ\x15+ὦιὮΙᾮ\x15+ὧιὯΙᾯ\x15\x1dὠιᾠὨΙ\x15\x1dὡιᾡὩΙ\x15\x1dὢιᾢὪΙ" + + "\x15\x1dὣιᾣὫΙ\x15\x1dὤιᾤὬΙ\x15\x1dὥιᾥὭΙ\x15\x1dὦιᾦὮΙ\x15\x1dὧιᾧὯΙ\x15-ὰι" + + "ᾺΙᾺͅ\x14#αιΑΙᾼ\x14$άιΆΙΆͅ\x14 ᾶΑ͂\x166ᾶιΑ͂Ιᾼ͂\x14\x1cαιᾳΑΙ\x12\x10ι" + + "Ι\x15-ὴιῊΙῊͅ\x14#ηιΗΙῌ\x14$ήιΉΙΉͅ\x14 ῆΗ͂\x166ῆιΗ͂Ιῌ͂\x14\x1cηιῃΗΙ" + + "\x160ῒΪ̀\x160ΐΪ́\x14 ῖΙ͂\x160ῗΪ͂\x160ῢΫ̀\x160ΰΫ́\x14 ῤΡ" + + "̓\x14 ῦΥ͂\x160ῧΫ͂\x15-ὼιῺΙῺͅ\x14#ωιΩΙῼ\x14$ώιΏΙΏͅ\x14 ῶΩ͂\x166ῶιΩ" + + "͂Ιῼ͂\x14\x1cωιῳΩΙ\x12\x10ωω\x11\x08kk\x12\x10åå\x12\x10ɫɫ\x12\x10ɽɽ" + + "\x10\x10Ⱥ\x10\x10Ⱦ\x12\x10ɑɑ\x12\x10ɱɱ\x12\x10ɐɐ\x12\x10ɒɒ\x12\x10ȿȿ\x12" + + "\x10ɀɀ\x12\x10ɥɥ\x12\x10ɦɦ\x12\x10ɜɜ\x12\x10ɡɡ\x12\x10ɬɬ\x12\x10ɪɪ\x12" + + "\x10ʞʞ\x12\x10ʇʇ\x12\x10ʝʝ\x12\x12ffFFFf\x12\x12fiFIFi\x12\x12flFLFl\x13" + + "\x1bffiFFIFfi\x13\x1bfflFFLFfl\x12\x12stSTSt\x12\x12stSTSt\x14$մնՄՆՄն" + + "\x14$մեՄԵՄե\x14$միՄԻՄի\x14$վնՎՆՎն\x14$մխՄԽՄխ" + +// 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 *caseTrie) lookup(s []byte) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return caseValues[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 := caseIndex[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 := caseIndex[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 = caseIndex[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 := caseIndex[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 = caseIndex[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 = caseIndex[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 *caseTrie) lookupUnsafe(s []byte) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return caseValues[c0] + } + i := caseIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = caseIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = caseIndex[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 *caseTrie) lookupString(s string) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return caseValues[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 := caseIndex[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 := caseIndex[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 = caseIndex[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 := caseIndex[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 = caseIndex[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 = caseIndex[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 *caseTrie) lookupStringUnsafe(s string) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return caseValues[c0] + } + i := caseIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = caseIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = caseIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// caseTrie. Total size: 11892 bytes (11.61 KiB). Checksum: abd4a0bc39341b30. +type caseTrie struct{} + +func newCaseTrie(i int) *caseTrie { + return &caseTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *caseTrie) lookupValue(n uint32, b byte) uint16 { + switch { + case n < 18: + return uint16(caseValues[n<<6+uint32(b)]) + default: + n -= 18 + return uint16(sparse.lookup(n, b)) + } +} + +// caseValues: 20 blocks, 1280 entries, 2560 bytes +// The third block is the zero block. +var caseValues = [1280]uint16{ + // Block 0x0, offset 0x0 + 0x27: 0x0054, + 0x2e: 0x0054, + 0x30: 0x0010, 0x31: 0x0010, 0x32: 0x0010, 0x33: 0x0010, 0x34: 0x0010, 0x35: 0x0010, + 0x36: 0x0010, 0x37: 0x0010, 0x38: 0x0010, 0x39: 0x0010, 0x3a: 0x0054, + // Block 0x1, offset 0x40 + 0x41: 0x2013, 0x42: 0x2013, 0x43: 0x2013, 0x44: 0x2013, 0x45: 0x2013, + 0x46: 0x2013, 0x47: 0x2013, 0x48: 0x2013, 0x49: 0x2013, 0x4a: 0x2013, 0x4b: 0x2013, + 0x4c: 0x2013, 0x4d: 0x2013, 0x4e: 0x2013, 0x4f: 0x2013, 0x50: 0x2013, 0x51: 0x2013, + 0x52: 0x2013, 0x53: 0x2013, 0x54: 0x2013, 0x55: 0x2013, 0x56: 0x2013, 0x57: 0x2013, + 0x58: 0x2013, 0x59: 0x2013, 0x5a: 0x2013, + 0x5e: 0x0004, 0x5f: 0x0010, 0x60: 0x0004, 0x61: 0x2012, 0x62: 0x2012, 0x63: 0x2012, + 0x64: 0x2012, 0x65: 0x2012, 0x66: 0x2012, 0x67: 0x2012, 0x68: 0x2012, 0x69: 0x2012, + 0x6a: 0x2012, 0x6b: 0x2012, 0x6c: 0x2012, 0x6d: 0x2012, 0x6e: 0x2012, 0x6f: 0x2012, + 0x70: 0x2012, 0x71: 0x2012, 0x72: 0x2012, 0x73: 0x2012, 0x74: 0x2012, 0x75: 0x2012, + 0x76: 0x2012, 0x77: 0x2012, 0x78: 0x2012, 0x79: 0x2012, 0x7a: 0x2012, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc0: 0x0852, 0xc1: 0x0b53, 0xc2: 0x0113, 0xc3: 0x0112, 0xc4: 0x0113, 0xc5: 0x0112, + 0xc6: 0x0b53, 0xc7: 0x0f13, 0xc8: 0x0f12, 0xc9: 0x0e53, 0xca: 0x1153, 0xcb: 0x0713, + 0xcc: 0x0712, 0xcd: 0x0012, 0xce: 0x1453, 0xcf: 0x1753, 0xd0: 0x1a53, 0xd1: 0x0313, + 0xd2: 0x0312, 0xd3: 0x1d53, 0xd4: 0x2053, 0xd5: 0x2352, 0xd6: 0x2653, 0xd7: 0x2653, + 0xd8: 0x0113, 0xd9: 0x0112, 0xda: 0x2952, 0xdb: 0x0012, 0xdc: 0x1d53, 0xdd: 0x2c53, + 0xde: 0x2f52, 0xdf: 0x3253, 0xe0: 0x0113, 0xe1: 0x0112, 0xe2: 0x0113, 0xe3: 0x0112, + 0xe4: 0x0113, 0xe5: 0x0112, 0xe6: 0x3553, 0xe7: 0x0f13, 0xe8: 0x0f12, 0xe9: 0x3853, + 0xea: 0x0012, 0xeb: 0x0012, 0xec: 0x0113, 0xed: 0x0112, 0xee: 0x3553, 0xef: 0x1f13, + 0xf0: 0x1f12, 0xf1: 0x3b53, 0xf2: 0x3e53, 0xf3: 0x0713, 0xf4: 0x0712, 0xf5: 0x0313, + 0xf6: 0x0312, 0xf7: 0x4153, 0xf8: 0x0113, 0xf9: 0x0112, 0xfa: 0x0012, 0xfb: 0x0010, + 0xfc: 0x0113, 0xfd: 0x0112, 0xfe: 0x0012, 0xff: 0x4452, + // Block 0x4, offset 0x100 + 0x100: 0x0010, 0x101: 0x0010, 0x102: 0x0010, 0x103: 0x0010, 0x104: 0x04cb, 0x105: 0x05c9, + 0x106: 0x06ca, 0x107: 0x078b, 0x108: 0x0889, 0x109: 0x098a, 0x10a: 0x0a4b, 0x10b: 0x0b49, + 0x10c: 0x0c4a, 0x10d: 0x0313, 0x10e: 0x0312, 0x10f: 0x1f13, 0x110: 0x1f12, 0x111: 0x0313, + 0x112: 0x0312, 0x113: 0x0713, 0x114: 0x0712, 0x115: 0x0313, 0x116: 0x0312, 0x117: 0x0f13, + 0x118: 0x0f12, 0x119: 0x0313, 0x11a: 0x0312, 0x11b: 0x0713, 0x11c: 0x0712, 0x11d: 0x1452, + 0x11e: 0x0113, 0x11f: 0x0112, 0x120: 0x0113, 0x121: 0x0112, 0x122: 0x0113, 0x123: 0x0112, + 0x124: 0x0113, 0x125: 0x0112, 0x126: 0x0113, 0x127: 0x0112, 0x128: 0x0113, 0x129: 0x0112, + 0x12a: 0x0113, 0x12b: 0x0112, 0x12c: 0x0113, 0x12d: 0x0112, 0x12e: 0x0113, 0x12f: 0x0112, + 0x130: 0x0d0a, 0x131: 0x0e0b, 0x132: 0x0f09, 0x133: 0x100a, 0x134: 0x0113, 0x135: 0x0112, + 0x136: 0x2353, 0x137: 0x4453, 0x138: 0x0113, 0x139: 0x0112, 0x13a: 0x0113, 0x13b: 0x0112, + 0x13c: 0x0113, 0x13d: 0x0112, 0x13e: 0x0113, 0x13f: 0x0112, + // Block 0x5, offset 0x140 + 0x140: 0x136a, 0x141: 0x0313, 0x142: 0x0312, 0x143: 0x0853, 0x144: 0x4753, 0x145: 0x4a53, + 0x146: 0x0113, 0x147: 0x0112, 0x148: 0x0113, 0x149: 0x0112, 0x14a: 0x0113, 0x14b: 0x0112, + 0x14c: 0x0113, 0x14d: 0x0112, 0x14e: 0x0113, 0x14f: 0x0112, 0x150: 0x140a, 0x151: 0x14aa, + 0x152: 0x154a, 0x153: 0x0b52, 0x154: 0x0b52, 0x155: 0x0012, 0x156: 0x0e52, 0x157: 0x1152, + 0x158: 0x0012, 0x159: 0x1752, 0x15a: 0x0012, 0x15b: 0x1a52, 0x15c: 0x15ea, 0x15d: 0x0012, + 0x15e: 0x0012, 0x15f: 0x0012, 0x160: 0x1d52, 0x161: 0x168a, 0x162: 0x0012, 0x163: 0x2052, + 0x164: 0x0012, 0x165: 0x172a, 0x166: 0x17ca, 0x167: 0x0012, 0x168: 0x2652, 0x169: 0x2652, + 0x16a: 0x186a, 0x16b: 0x190a, 0x16c: 0x19aa, 0x16d: 0x0012, 0x16e: 0x0012, 0x16f: 0x1d52, + 0x170: 0x0012, 0x171: 0x1a4a, 0x172: 0x2c52, 0x173: 0x0012, 0x174: 0x0012, 0x175: 0x3252, + 0x176: 0x0012, 0x177: 0x0012, 0x178: 0x0012, 0x179: 0x0012, 0x17a: 0x0012, 0x17b: 0x0012, + 0x17c: 0x0012, 0x17d: 0x1aea, 0x17e: 0x0012, 0x17f: 0x0012, + // Block 0x6, offset 0x180 + 0x180: 0x3552, 0x181: 0x0012, 0x182: 0x0012, 0x183: 0x3852, 0x184: 0x0012, 0x185: 0x0012, + 0x186: 0x0012, 0x187: 0x1b8a, 0x188: 0x3552, 0x189: 0x4752, 0x18a: 0x3b52, 0x18b: 0x3e52, + 0x18c: 0x4a52, 0x18d: 0x0012, 0x18e: 0x0012, 0x18f: 0x0012, 0x190: 0x0012, 0x191: 0x0012, + 0x192: 0x4152, 0x193: 0x0012, 0x194: 0x0010, 0x195: 0x0012, 0x196: 0x0012, 0x197: 0x0012, + 0x198: 0x0012, 0x199: 0x0012, 0x19a: 0x0012, 0x19b: 0x0012, 0x19c: 0x0012, 0x19d: 0x1c2a, + 0x19e: 0x1cca, 0x19f: 0x0012, 0x1a0: 0x0012, 0x1a1: 0x0012, 0x1a2: 0x0012, 0x1a3: 0x0012, + 0x1a4: 0x0012, 0x1a5: 0x0012, 0x1a6: 0x0012, 0x1a7: 0x0012, 0x1a8: 0x0012, 0x1a9: 0x0012, + 0x1aa: 0x0012, 0x1ab: 0x0012, 0x1ac: 0x0012, 0x1ad: 0x0012, 0x1ae: 0x0012, 0x1af: 0x0012, + 0x1b0: 0x0015, 0x1b1: 0x0015, 0x1b2: 0x0015, 0x1b3: 0x0015, 0x1b4: 0x0015, 0x1b5: 0x0015, + 0x1b6: 0x0015, 0x1b7: 0x0015, 0x1b8: 0x0015, 0x1b9: 0x0014, 0x1ba: 0x0014, 0x1bb: 0x0014, + 0x1bc: 0x0014, 0x1bd: 0x0014, 0x1be: 0x0014, 0x1bf: 0x0014, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x0024, 0x1c1: 0x0024, 0x1c2: 0x0024, 0x1c3: 0x0024, 0x1c4: 0x0024, 0x1c5: 0x1d6d, + 0x1c6: 0x0024, 0x1c7: 0x0034, 0x1c8: 0x0034, 0x1c9: 0x0034, 0x1ca: 0x0024, 0x1cb: 0x0024, + 0x1cc: 0x0024, 0x1cd: 0x0034, 0x1ce: 0x0034, 0x1cf: 0x0014, 0x1d0: 0x0024, 0x1d1: 0x0024, + 0x1d2: 0x0024, 0x1d3: 0x0034, 0x1d4: 0x0034, 0x1d5: 0x0034, 0x1d6: 0x0034, 0x1d7: 0x0024, + 0x1d8: 0x0034, 0x1d9: 0x0034, 0x1da: 0x0034, 0x1db: 0x0024, 0x1dc: 0x0034, 0x1dd: 0x0034, + 0x1de: 0x0034, 0x1df: 0x0034, 0x1e0: 0x0034, 0x1e1: 0x0034, 0x1e2: 0x0034, 0x1e3: 0x0024, + 0x1e4: 0x0024, 0x1e5: 0x0024, 0x1e6: 0x0024, 0x1e7: 0x0024, 0x1e8: 0x0024, 0x1e9: 0x0024, + 0x1ea: 0x0024, 0x1eb: 0x0024, 0x1ec: 0x0024, 0x1ed: 0x0024, 0x1ee: 0x0024, 0x1ef: 0x0024, + 0x1f0: 0x0113, 0x1f1: 0x0112, 0x1f2: 0x0113, 0x1f3: 0x0112, 0x1f4: 0x0014, 0x1f5: 0x0004, + 0x1f6: 0x0113, 0x1f7: 0x0112, 0x1fa: 0x0015, 0x1fb: 0x4d52, + 0x1fc: 0x5052, 0x1fd: 0x5052, 0x1ff: 0x5353, + // Block 0x8, offset 0x200 + 0x204: 0x0004, 0x205: 0x0004, + 0x206: 0x2a13, 0x207: 0x0054, 0x208: 0x2513, 0x209: 0x2713, 0x20a: 0x2513, + 0x20c: 0x5653, 0x20e: 0x5953, 0x20f: 0x5c53, 0x210: 0x1e2a, 0x211: 0x2013, + 0x212: 0x2013, 0x213: 0x2013, 0x214: 0x2013, 0x215: 0x2013, 0x216: 0x2013, 0x217: 0x2013, + 0x218: 0x2013, 0x219: 0x2013, 0x21a: 0x2013, 0x21b: 0x2013, 0x21c: 0x2013, 0x21d: 0x2013, + 0x21e: 0x2013, 0x21f: 0x2013, 0x220: 0x5f53, 0x221: 0x5f53, 0x223: 0x5f53, + 0x224: 0x5f53, 0x225: 0x5f53, 0x226: 0x5f53, 0x227: 0x5f53, 0x228: 0x5f53, 0x229: 0x5f53, + 0x22a: 0x5f53, 0x22b: 0x5f53, 0x22c: 0x2a12, 0x22d: 0x2512, 0x22e: 0x2712, 0x22f: 0x2512, + 0x230: 0x1fea, 0x231: 0x2012, 0x232: 0x2012, 0x233: 0x2012, 0x234: 0x2012, 0x235: 0x2012, + 0x236: 0x2012, 0x237: 0x2012, 0x238: 0x2012, 0x239: 0x2012, 0x23a: 0x2012, 0x23b: 0x2012, + 0x23c: 0x2012, 0x23d: 0x2012, 0x23e: 0x2012, 0x23f: 0x2012, + // Block 0x9, offset 0x240 + 0x240: 0x5f52, 0x241: 0x5f52, 0x242: 0x21aa, 0x243: 0x5f52, 0x244: 0x5f52, 0x245: 0x5f52, + 0x246: 0x5f52, 0x247: 0x5f52, 0x248: 0x5f52, 0x249: 0x5f52, 0x24a: 0x5f52, 0x24b: 0x5f52, + 0x24c: 0x5652, 0x24d: 0x5952, 0x24e: 0x5c52, 0x24f: 0x1813, 0x250: 0x226a, 0x251: 0x232a, + 0x252: 0x0013, 0x253: 0x0013, 0x254: 0x0013, 0x255: 0x23ea, 0x256: 0x24aa, 0x257: 0x1812, + 0x258: 0x0113, 0x259: 0x0112, 0x25a: 0x0113, 0x25b: 0x0112, 0x25c: 0x0113, 0x25d: 0x0112, + 0x25e: 0x0113, 0x25f: 0x0112, 0x260: 0x0113, 0x261: 0x0112, 0x262: 0x0113, 0x263: 0x0112, + 0x264: 0x0113, 0x265: 0x0112, 0x266: 0x0113, 0x267: 0x0112, 0x268: 0x0113, 0x269: 0x0112, + 0x26a: 0x0113, 0x26b: 0x0112, 0x26c: 0x0113, 0x26d: 0x0112, 0x26e: 0x0113, 0x26f: 0x0112, + 0x270: 0x256a, 0x271: 0x262a, 0x272: 0x0b12, 0x273: 0x5352, 0x274: 0x6253, 0x275: 0x26ea, + 0x277: 0x0f13, 0x278: 0x0f12, 0x279: 0x0b13, 0x27a: 0x0113, 0x27b: 0x0112, + 0x27c: 0x0012, 0x27d: 0x4d53, 0x27e: 0x5053, 0x27f: 0x5053, + // Block 0xa, offset 0x280 + 0x280: 0x0812, 0x281: 0x0812, 0x282: 0x0812, 0x283: 0x0812, 0x284: 0x0812, 0x285: 0x0812, + 0x288: 0x0813, 0x289: 0x0813, 0x28a: 0x0813, 0x28b: 0x0813, + 0x28c: 0x0813, 0x28d: 0x0813, 0x290: 0x372a, 0x291: 0x0812, + 0x292: 0x386a, 0x293: 0x0812, 0x294: 0x3a2a, 0x295: 0x0812, 0x296: 0x3bea, 0x297: 0x0812, + 0x299: 0x0813, 0x29b: 0x0813, 0x29d: 0x0813, + 0x29f: 0x0813, 0x2a0: 0x0812, 0x2a1: 0x0812, 0x2a2: 0x0812, 0x2a3: 0x0812, + 0x2a4: 0x0812, 0x2a5: 0x0812, 0x2a6: 0x0812, 0x2a7: 0x0812, 0x2a8: 0x0813, 0x2a9: 0x0813, + 0x2aa: 0x0813, 0x2ab: 0x0813, 0x2ac: 0x0813, 0x2ad: 0x0813, 0x2ae: 0x0813, 0x2af: 0x0813, + 0x2b0: 0x8b52, 0x2b1: 0x8b52, 0x2b2: 0x8e52, 0x2b3: 0x8e52, 0x2b4: 0x9152, 0x2b5: 0x9152, + 0x2b6: 0x9452, 0x2b7: 0x9452, 0x2b8: 0x9752, 0x2b9: 0x9752, 0x2ba: 0x9a52, 0x2bb: 0x9a52, + 0x2bc: 0x4d52, 0x2bd: 0x4d52, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x3daa, 0x2c1: 0x3f8a, 0x2c2: 0x416a, 0x2c3: 0x434a, 0x2c4: 0x452a, 0x2c5: 0x470a, + 0x2c6: 0x48ea, 0x2c7: 0x4aca, 0x2c8: 0x4ca9, 0x2c9: 0x4e89, 0x2ca: 0x5069, 0x2cb: 0x5249, + 0x2cc: 0x5429, 0x2cd: 0x5609, 0x2ce: 0x57e9, 0x2cf: 0x59c9, 0x2d0: 0x5baa, 0x2d1: 0x5d8a, + 0x2d2: 0x5f6a, 0x2d3: 0x614a, 0x2d4: 0x632a, 0x2d5: 0x650a, 0x2d6: 0x66ea, 0x2d7: 0x68ca, + 0x2d8: 0x6aa9, 0x2d9: 0x6c89, 0x2da: 0x6e69, 0x2db: 0x7049, 0x2dc: 0x7229, 0x2dd: 0x7409, + 0x2de: 0x75e9, 0x2df: 0x77c9, 0x2e0: 0x79aa, 0x2e1: 0x7b8a, 0x2e2: 0x7d6a, 0x2e3: 0x7f4a, + 0x2e4: 0x812a, 0x2e5: 0x830a, 0x2e6: 0x84ea, 0x2e7: 0x86ca, 0x2e8: 0x88a9, 0x2e9: 0x8a89, + 0x2ea: 0x8c69, 0x2eb: 0x8e49, 0x2ec: 0x9029, 0x2ed: 0x9209, 0x2ee: 0x93e9, 0x2ef: 0x95c9, + 0x2f0: 0x0812, 0x2f1: 0x0812, 0x2f2: 0x97aa, 0x2f3: 0x99ca, 0x2f4: 0x9b6a, + 0x2f6: 0x9d2a, 0x2f7: 0x9e6a, 0x2f8: 0x0813, 0x2f9: 0x0813, 0x2fa: 0x8b53, 0x2fb: 0x8b53, + 0x2fc: 0xa0e9, 0x2fd: 0x0004, 0x2fe: 0xa28a, 0x2ff: 0x0004, + // Block 0xc, offset 0x300 + 0x300: 0x0004, 0x301: 0x0004, 0x302: 0xa34a, 0x303: 0xa56a, 0x304: 0xa70a, + 0x306: 0xa8ca, 0x307: 0xaa0a, 0x308: 0x8e53, 0x309: 0x8e53, 0x30a: 0x9153, 0x30b: 0x9153, + 0x30c: 0xac89, 0x30d: 0x0004, 0x30e: 0x0004, 0x30f: 0x0004, 0x310: 0x0812, 0x311: 0x0812, + 0x312: 0xae2a, 0x313: 0xafea, 0x316: 0xb1aa, 0x317: 0xb2ea, + 0x318: 0x0813, 0x319: 0x0813, 0x31a: 0x9453, 0x31b: 0x9453, 0x31d: 0x0004, + 0x31e: 0x0004, 0x31f: 0x0004, 0x320: 0x0812, 0x321: 0x0812, 0x322: 0xb4aa, 0x323: 0xb66a, + 0x324: 0xb82a, 0x325: 0x0912, 0x326: 0xb96a, 0x327: 0xbaaa, 0x328: 0x0813, 0x329: 0x0813, + 0x32a: 0x9a53, 0x32b: 0x9a53, 0x32c: 0x0913, 0x32d: 0x0004, 0x32e: 0x0004, 0x32f: 0x0004, + 0x332: 0xbc6a, 0x333: 0xbe8a, 0x334: 0xc02a, + 0x336: 0xc1ea, 0x337: 0xc32a, 0x338: 0x9753, 0x339: 0x9753, 0x33a: 0x4d53, 0x33b: 0x4d53, + 0x33c: 0xc5a9, 0x33d: 0x0004, 0x33e: 0x0004, + // Block 0xd, offset 0x340 + 0x342: 0x0013, + 0x347: 0x0013, 0x34a: 0x0012, 0x34b: 0x0013, + 0x34c: 0x0013, 0x34d: 0x0013, 0x34e: 0x0012, 0x34f: 0x0012, 0x350: 0x0013, 0x351: 0x0013, + 0x352: 0x0013, 0x353: 0x0012, 0x355: 0x0013, + 0x359: 0x0013, 0x35a: 0x0013, 0x35b: 0x0013, 0x35c: 0x0013, 0x35d: 0x0013, + 0x364: 0x0013, 0x366: 0xc74b, 0x368: 0x0013, + 0x36a: 0xc80b, 0x36b: 0xc88b, 0x36c: 0x0013, 0x36d: 0x0013, 0x36f: 0x0012, + 0x370: 0x0013, 0x371: 0x0013, 0x372: 0x9d53, 0x373: 0x0013, 0x374: 0x0012, 0x375: 0x0010, + 0x376: 0x0010, 0x377: 0x0010, 0x378: 0x0010, 0x379: 0x0012, + 0x37c: 0x0012, 0x37d: 0x0012, 0x37e: 0x0013, 0x37f: 0x0013, + // Block 0xe, offset 0x380 + 0x380: 0x1a13, 0x381: 0x1a13, 0x382: 0x1e13, 0x383: 0x1e13, 0x384: 0x1a13, 0x385: 0x1a13, + 0x386: 0x2613, 0x387: 0x2613, 0x388: 0x2a13, 0x389: 0x2a13, 0x38a: 0x2e13, 0x38b: 0x2e13, + 0x38c: 0x2a13, 0x38d: 0x2a13, 0x38e: 0x2613, 0x38f: 0x2613, 0x390: 0xa052, 0x391: 0xa052, + 0x392: 0xa352, 0x393: 0xa352, 0x394: 0xa652, 0x395: 0xa652, 0x396: 0xa352, 0x397: 0xa352, + 0x398: 0xa052, 0x399: 0xa052, 0x39a: 0x1a12, 0x39b: 0x1a12, 0x39c: 0x1e12, 0x39d: 0x1e12, + 0x39e: 0x1a12, 0x39f: 0x1a12, 0x3a0: 0x2612, 0x3a1: 0x2612, 0x3a2: 0x2a12, 0x3a3: 0x2a12, + 0x3a4: 0x2e12, 0x3a5: 0x2e12, 0x3a6: 0x2a12, 0x3a7: 0x2a12, 0x3a8: 0x2612, 0x3a9: 0x2612, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x6552, 0x3c1: 0x6552, 0x3c2: 0x6552, 0x3c3: 0x6552, 0x3c4: 0x6552, 0x3c5: 0x6552, + 0x3c6: 0x6552, 0x3c7: 0x6552, 0x3c8: 0x6552, 0x3c9: 0x6552, 0x3ca: 0x6552, 0x3cb: 0x6552, + 0x3cc: 0x6552, 0x3cd: 0x6552, 0x3ce: 0x6552, 0x3cf: 0x6552, 0x3d0: 0xa952, 0x3d1: 0xa952, + 0x3d2: 0xa952, 0x3d3: 0xa952, 0x3d4: 0xa952, 0x3d5: 0xa952, 0x3d6: 0xa952, 0x3d7: 0xa952, + 0x3d8: 0xa952, 0x3d9: 0xa952, 0x3da: 0xa952, 0x3db: 0xa952, 0x3dc: 0xa952, 0x3dd: 0xa952, + 0x3de: 0xa952, 0x3e0: 0x0113, 0x3e1: 0x0112, 0x3e2: 0xc94b, 0x3e3: 0x8853, + 0x3e4: 0xca0b, 0x3e5: 0xcaca, 0x3e6: 0xcb4a, 0x3e7: 0x0f13, 0x3e8: 0x0f12, 0x3e9: 0x0313, + 0x3ea: 0x0312, 0x3eb: 0x0713, 0x3ec: 0x0712, 0x3ed: 0xcbcb, 0x3ee: 0xcc8b, 0x3ef: 0xcd4b, + 0x3f0: 0xce0b, 0x3f1: 0x0012, 0x3f2: 0x0113, 0x3f3: 0x0112, 0x3f4: 0x0012, 0x3f5: 0x0313, + 0x3f6: 0x0312, 0x3f7: 0x0012, 0x3f8: 0x0012, 0x3f9: 0x0012, 0x3fa: 0x0012, 0x3fb: 0x0012, + 0x3fc: 0x0015, 0x3fd: 0x0015, 0x3fe: 0xcecb, 0x3ff: 0xcf8b, + // Block 0x10, offset 0x400 + 0x400: 0x0113, 0x401: 0x0112, 0x402: 0x0113, 0x403: 0x0112, 0x404: 0x0113, 0x405: 0x0112, + 0x406: 0x0113, 0x407: 0x0112, 0x408: 0x0014, 0x409: 0x0014, 0x40a: 0x0014, 0x40b: 0x0713, + 0x40c: 0x0712, 0x40d: 0xd04b, 0x40e: 0x0012, 0x40f: 0x0010, 0x410: 0x0113, 0x411: 0x0112, + 0x412: 0x0113, 0x413: 0x0112, 0x414: 0x0012, 0x415: 0x0012, 0x416: 0x0113, 0x417: 0x0112, + 0x418: 0x0113, 0x419: 0x0112, 0x41a: 0x0113, 0x41b: 0x0112, 0x41c: 0x0113, 0x41d: 0x0112, + 0x41e: 0x0113, 0x41f: 0x0112, 0x420: 0x0113, 0x421: 0x0112, 0x422: 0x0113, 0x423: 0x0112, + 0x424: 0x0113, 0x425: 0x0112, 0x426: 0x0113, 0x427: 0x0112, 0x428: 0x0113, 0x429: 0x0112, + 0x42a: 0xd10b, 0x42b: 0xd1cb, 0x42c: 0xd28b, 0x42d: 0xd34b, 0x42e: 0xd40b, + 0x430: 0xd4cb, 0x431: 0xd58b, 0x432: 0xd64b, 0x433: 0xac53, 0x434: 0x0113, 0x435: 0x0112, + 0x436: 0x0113, 0x437: 0x0112, + // Block 0x11, offset 0x440 + 0x440: 0xd70a, 0x441: 0xd80a, 0x442: 0xd90a, 0x443: 0xda0a, 0x444: 0xdb6a, 0x445: 0xdcca, + 0x446: 0xddca, + 0x453: 0xdeca, 0x454: 0xe08a, 0x455: 0xe24a, 0x456: 0xe40a, 0x457: 0xe5ca, + 0x45d: 0x0010, + 0x45e: 0x0034, 0x45f: 0x0010, 0x460: 0x0010, 0x461: 0x0010, 0x462: 0x0010, 0x463: 0x0010, + 0x464: 0x0010, 0x465: 0x0010, 0x466: 0x0010, 0x467: 0x0010, 0x468: 0x0010, + 0x46a: 0x0010, 0x46b: 0x0010, 0x46c: 0x0010, 0x46d: 0x0010, 0x46e: 0x0010, 0x46f: 0x0010, + 0x470: 0x0010, 0x471: 0x0010, 0x472: 0x0010, 0x473: 0x0010, 0x474: 0x0010, 0x475: 0x0010, + 0x476: 0x0010, 0x478: 0x0010, 0x479: 0x0010, 0x47a: 0x0010, 0x47b: 0x0010, + 0x47c: 0x0010, 0x47e: 0x0010, + // Block 0x12, offset 0x480 + 0x480: 0x2213, 0x481: 0x2213, 0x482: 0x2613, 0x483: 0x2613, 0x484: 0x2213, 0x485: 0x2213, + 0x486: 0x2e13, 0x487: 0x2e13, 0x488: 0x2213, 0x489: 0x2213, 0x48a: 0x2613, 0x48b: 0x2613, + 0x48c: 0x2213, 0x48d: 0x2213, 0x48e: 0x3e13, 0x48f: 0x3e13, 0x490: 0x2213, 0x491: 0x2213, + 0x492: 0x2613, 0x493: 0x2613, 0x494: 0x2213, 0x495: 0x2213, 0x496: 0x2e13, 0x497: 0x2e13, + 0x498: 0x2213, 0x499: 0x2213, 0x49a: 0x2613, 0x49b: 0x2613, 0x49c: 0x2213, 0x49d: 0x2213, + 0x49e: 0xb553, 0x49f: 0xb553, 0x4a0: 0xb853, 0x4a1: 0xb853, 0x4a2: 0x2212, 0x4a3: 0x2212, + 0x4a4: 0x2612, 0x4a5: 0x2612, 0x4a6: 0x2212, 0x4a7: 0x2212, 0x4a8: 0x2e12, 0x4a9: 0x2e12, + 0x4aa: 0x2212, 0x4ab: 0x2212, 0x4ac: 0x2612, 0x4ad: 0x2612, 0x4ae: 0x2212, 0x4af: 0x2212, + 0x4b0: 0x3e12, 0x4b1: 0x3e12, 0x4b2: 0x2212, 0x4b3: 0x2212, 0x4b4: 0x2612, 0x4b5: 0x2612, + 0x4b6: 0x2212, 0x4b7: 0x2212, 0x4b8: 0x2e12, 0x4b9: 0x2e12, 0x4ba: 0x2212, 0x4bb: 0x2212, + 0x4bc: 0x2612, 0x4bd: 0x2612, 0x4be: 0x2212, 0x4bf: 0x2212, + // Block 0x13, offset 0x4c0 + 0x4c2: 0x0010, + 0x4c7: 0x0010, 0x4c9: 0x0010, 0x4cb: 0x0010, + 0x4cd: 0x0010, 0x4ce: 0x0010, 0x4cf: 0x0010, 0x4d1: 0x0010, + 0x4d2: 0x0010, 0x4d4: 0x0010, 0x4d7: 0x0010, + 0x4d9: 0x0010, 0x4db: 0x0010, 0x4dd: 0x0010, + 0x4df: 0x0010, 0x4e1: 0x0010, 0x4e2: 0x0010, + 0x4e4: 0x0010, 0x4e7: 0x0010, 0x4e8: 0x0010, 0x4e9: 0x0010, + 0x4ea: 0x0010, 0x4ec: 0x0010, 0x4ed: 0x0010, 0x4ee: 0x0010, 0x4ef: 0x0010, + 0x4f0: 0x0010, 0x4f1: 0x0010, 0x4f2: 0x0010, 0x4f4: 0x0010, 0x4f5: 0x0010, + 0x4f6: 0x0010, 0x4f7: 0x0010, 0x4f9: 0x0010, 0x4fa: 0x0010, 0x4fb: 0x0010, + 0x4fc: 0x0010, 0x4fe: 0x0010, +} + +// caseIndex: 25 blocks, 1600 entries, 3200 bytes +// Block 0 is the zero block. +var caseIndex = [1600]uint16{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x12, 0xc3: 0x13, 0xc4: 0x14, 0xc5: 0x15, 0xc6: 0x01, 0xc7: 0x02, + 0xc8: 0x16, 0xc9: 0x03, 0xca: 0x04, 0xcb: 0x17, 0xcc: 0x18, 0xcd: 0x05, 0xce: 0x06, 0xcf: 0x07, + 0xd0: 0x19, 0xd1: 0x1a, 0xd2: 0x1b, 0xd3: 0x1c, 0xd4: 0x1d, 0xd5: 0x1e, 0xd6: 0x1f, 0xd7: 0x20, + 0xd8: 0x21, 0xd9: 0x22, 0xda: 0x23, 0xdb: 0x24, 0xdc: 0x25, 0xdd: 0x26, 0xde: 0x27, 0xdf: 0x28, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, + 0xea: 0x06, 0xeb: 0x07, 0xec: 0x07, 0xed: 0x08, 0xef: 0x09, + 0xf0: 0x14, 0xf3: 0x16, + // Block 0x4, offset 0x100 + 0x120: 0x29, 0x121: 0x2a, 0x122: 0x2b, 0x123: 0x2c, 0x124: 0x2d, 0x125: 0x2e, 0x126: 0x2f, 0x127: 0x30, + 0x128: 0x31, 0x129: 0x32, 0x12a: 0x33, 0x12b: 0x34, 0x12c: 0x35, 0x12d: 0x36, 0x12e: 0x37, 0x12f: 0x38, + 0x130: 0x39, 0x131: 0x3a, 0x132: 0x3b, 0x133: 0x3c, 0x134: 0x3d, 0x135: 0x3e, 0x136: 0x3f, 0x137: 0x40, + 0x138: 0x41, 0x139: 0x42, 0x13a: 0x43, 0x13b: 0x44, 0x13c: 0x45, 0x13d: 0x46, 0x13e: 0x47, 0x13f: 0x48, + // Block 0x5, offset 0x140 + 0x140: 0x49, 0x141: 0x4a, 0x142: 0x4b, 0x143: 0x4c, 0x144: 0x23, 0x145: 0x23, 0x146: 0x23, 0x147: 0x23, + 0x148: 0x23, 0x149: 0x4d, 0x14a: 0x4e, 0x14b: 0x4f, 0x14c: 0x50, 0x14d: 0x51, 0x14e: 0x52, 0x14f: 0x53, + 0x150: 0x54, 0x151: 0x23, 0x152: 0x23, 0x153: 0x23, 0x154: 0x23, 0x155: 0x23, 0x156: 0x23, 0x157: 0x23, + 0x158: 0x23, 0x159: 0x55, 0x15a: 0x56, 0x15b: 0x57, 0x15c: 0x58, 0x15d: 0x59, 0x15e: 0x5a, 0x15f: 0x5b, + 0x160: 0x5c, 0x161: 0x5d, 0x162: 0x5e, 0x163: 0x5f, 0x164: 0x60, 0x165: 0x61, 0x167: 0x62, + 0x168: 0x63, 0x169: 0x64, 0x16a: 0x65, 0x16c: 0x66, 0x16d: 0x67, 0x16e: 0x68, 0x16f: 0x69, + 0x170: 0x6a, 0x171: 0x6b, 0x172: 0x6c, 0x173: 0x6d, 0x174: 0x6e, 0x175: 0x6f, 0x176: 0x70, 0x177: 0x71, + 0x178: 0x72, 0x179: 0x72, 0x17a: 0x73, 0x17b: 0x72, 0x17c: 0x74, 0x17d: 0x08, 0x17e: 0x09, 0x17f: 0x0a, + // Block 0x6, offset 0x180 + 0x180: 0x75, 0x181: 0x76, 0x182: 0x77, 0x183: 0x78, 0x184: 0x0b, 0x185: 0x79, 0x186: 0x7a, + 0x192: 0x7b, 0x193: 0x0c, + 0x1b0: 0x7c, 0x1b1: 0x0d, 0x1b2: 0x72, 0x1b3: 0x7d, 0x1b4: 0x7e, 0x1b5: 0x7f, 0x1b6: 0x80, 0x1b7: 0x81, + 0x1b8: 0x82, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x83, 0x1c2: 0x84, 0x1c3: 0x85, 0x1c4: 0x86, 0x1c5: 0x23, 0x1c6: 0x87, + // Block 0x8, offset 0x200 + 0x200: 0x88, 0x201: 0x23, 0x202: 0x23, 0x203: 0x23, 0x204: 0x23, 0x205: 0x23, 0x206: 0x23, 0x207: 0x23, + 0x208: 0x23, 0x209: 0x23, 0x20a: 0x23, 0x20b: 0x23, 0x20c: 0x23, 0x20d: 0x23, 0x20e: 0x23, 0x20f: 0x23, + 0x210: 0x23, 0x211: 0x23, 0x212: 0x89, 0x213: 0x8a, 0x214: 0x23, 0x215: 0x23, 0x216: 0x23, 0x217: 0x23, + 0x218: 0x8b, 0x219: 0x8c, 0x21a: 0x8d, 0x21b: 0x8e, 0x21c: 0x8f, 0x21d: 0x90, 0x21e: 0x0e, 0x21f: 0x91, + 0x220: 0x92, 0x221: 0x93, 0x222: 0x23, 0x223: 0x94, 0x224: 0x95, 0x225: 0x96, 0x226: 0x97, 0x227: 0x98, + 0x228: 0x99, 0x229: 0x9a, 0x22a: 0x9b, 0x22b: 0x9c, 0x22c: 0x9d, 0x22d: 0x9e, 0x22e: 0x9f, 0x22f: 0xa0, + 0x230: 0x23, 0x231: 0x23, 0x232: 0x23, 0x233: 0x23, 0x234: 0x23, 0x235: 0x23, 0x236: 0x23, 0x237: 0x23, + 0x238: 0x23, 0x239: 0x23, 0x23a: 0x23, 0x23b: 0x23, 0x23c: 0x23, 0x23d: 0x23, 0x23e: 0x23, 0x23f: 0x23, + // Block 0x9, offset 0x240 + 0x240: 0x23, 0x241: 0x23, 0x242: 0x23, 0x243: 0x23, 0x244: 0x23, 0x245: 0x23, 0x246: 0x23, 0x247: 0x23, + 0x248: 0x23, 0x249: 0x23, 0x24a: 0x23, 0x24b: 0x23, 0x24c: 0x23, 0x24d: 0x23, 0x24e: 0x23, 0x24f: 0x23, + 0x250: 0x23, 0x251: 0x23, 0x252: 0x23, 0x253: 0x23, 0x254: 0x23, 0x255: 0x23, 0x256: 0x23, 0x257: 0x23, + 0x258: 0x23, 0x259: 0x23, 0x25a: 0x23, 0x25b: 0x23, 0x25c: 0x23, 0x25d: 0x23, 0x25e: 0x23, 0x25f: 0x23, + 0x260: 0x23, 0x261: 0x23, 0x262: 0x23, 0x263: 0x23, 0x264: 0x23, 0x265: 0x23, 0x266: 0x23, 0x267: 0x23, + 0x268: 0x23, 0x269: 0x23, 0x26a: 0x23, 0x26b: 0x23, 0x26c: 0x23, 0x26d: 0x23, 0x26e: 0x23, 0x26f: 0x23, + 0x270: 0x23, 0x271: 0x23, 0x272: 0x23, 0x273: 0x23, 0x274: 0x23, 0x275: 0x23, 0x276: 0x23, 0x277: 0x23, + 0x278: 0x23, 0x279: 0x23, 0x27a: 0x23, 0x27b: 0x23, 0x27c: 0x23, 0x27d: 0x23, 0x27e: 0x23, 0x27f: 0x23, + // Block 0xa, offset 0x280 + 0x280: 0x23, 0x281: 0x23, 0x282: 0x23, 0x283: 0x23, 0x284: 0x23, 0x285: 0x23, 0x286: 0x23, 0x287: 0x23, + 0x288: 0x23, 0x289: 0x23, 0x28a: 0x23, 0x28b: 0x23, 0x28c: 0x23, 0x28d: 0x23, 0x28e: 0x23, 0x28f: 0x23, + 0x290: 0x23, 0x291: 0x23, 0x292: 0x23, 0x293: 0x23, 0x294: 0x23, 0x295: 0x23, 0x296: 0x23, 0x297: 0x23, + 0x298: 0x23, 0x299: 0x23, 0x29a: 0x23, 0x29b: 0x23, 0x29c: 0x23, 0x29d: 0x23, 0x29e: 0xa1, 0x29f: 0xa2, + // Block 0xb, offset 0x2c0 + 0x2ec: 0x0f, 0x2ed: 0xa3, 0x2ee: 0xa4, 0x2ef: 0xa5, + 0x2f0: 0x23, 0x2f1: 0x23, 0x2f2: 0x23, 0x2f3: 0x23, 0x2f4: 0xa6, 0x2f5: 0xa7, 0x2f6: 0xa8, 0x2f7: 0xa9, + 0x2f8: 0xaa, 0x2f9: 0xab, 0x2fa: 0x23, 0x2fb: 0xac, 0x2fc: 0xad, 0x2fd: 0xae, 0x2fe: 0xaf, 0x2ff: 0xb0, + // Block 0xc, offset 0x300 + 0x300: 0xb1, 0x301: 0xb2, 0x302: 0x23, 0x303: 0xb3, 0x305: 0xb4, 0x307: 0xb5, + 0x30a: 0xb6, 0x30b: 0xb7, 0x30c: 0xb8, 0x30d: 0xb9, 0x30e: 0xba, 0x30f: 0xbb, + 0x310: 0xbc, 0x311: 0xbd, 0x312: 0xbe, 0x313: 0xbf, 0x314: 0xc0, 0x315: 0xc1, + 0x318: 0x23, 0x319: 0x23, 0x31a: 0x23, 0x31b: 0x23, 0x31c: 0xc2, 0x31d: 0xc3, + 0x320: 0xc4, 0x321: 0xc5, 0x322: 0xc6, 0x323: 0xc7, 0x324: 0xc8, 0x326: 0xc9, + 0x328: 0xca, 0x329: 0xcb, 0x32a: 0xcc, 0x32b: 0xcd, 0x32c: 0x5f, 0x32d: 0xce, 0x32e: 0xcf, + 0x330: 0x23, 0x331: 0xd0, 0x332: 0xd1, 0x333: 0xd2, + // Block 0xd, offset 0x340 + 0x340: 0xd3, 0x341: 0xd4, 0x342: 0xd5, 0x343: 0xd6, 0x344: 0xd7, 0x345: 0xd8, 0x346: 0xd9, 0x347: 0xda, + 0x348: 0xdb, 0x34a: 0xdc, 0x34b: 0xdd, 0x34c: 0xde, 0x34d: 0xdf, + 0x350: 0xe0, 0x351: 0xe1, 0x352: 0xe2, 0x353: 0xe3, 0x356: 0xe4, 0x357: 0xe5, + 0x358: 0xe6, 0x359: 0xe7, 0x35a: 0xe8, 0x35b: 0xe9, 0x35c: 0xea, + 0x362: 0xeb, 0x363: 0xec, + 0x368: 0xed, 0x369: 0xee, 0x36a: 0xef, 0x36b: 0xf0, + 0x370: 0xf1, 0x371: 0xf2, 0x372: 0xf3, 0x374: 0xf4, 0x375: 0xf5, + // Block 0xe, offset 0x380 + 0x380: 0x23, 0x381: 0x23, 0x382: 0x23, 0x383: 0x23, 0x384: 0x23, 0x385: 0x23, 0x386: 0x23, 0x387: 0x23, + 0x388: 0x23, 0x389: 0x23, 0x38a: 0x23, 0x38b: 0x23, 0x38c: 0x23, 0x38d: 0x23, 0x38e: 0xf6, + 0x390: 0x23, 0x391: 0xf7, 0x392: 0x23, 0x393: 0x23, 0x394: 0x23, 0x395: 0xf8, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x23, 0x3c1: 0x23, 0x3c2: 0x23, 0x3c3: 0x23, 0x3c4: 0x23, 0x3c5: 0x23, 0x3c6: 0x23, 0x3c7: 0x23, + 0x3c8: 0x23, 0x3c9: 0x23, 0x3ca: 0x23, 0x3cb: 0x23, 0x3cc: 0x23, 0x3cd: 0x23, 0x3ce: 0x23, 0x3cf: 0x23, + 0x3d0: 0xf7, + // Block 0x10, offset 0x400 + 0x410: 0x23, 0x411: 0x23, 0x412: 0x23, 0x413: 0x23, 0x414: 0x23, 0x415: 0x23, 0x416: 0x23, 0x417: 0x23, + 0x418: 0x23, 0x419: 0xf9, + // Block 0x11, offset 0x440 + 0x460: 0x23, 0x461: 0x23, 0x462: 0x23, 0x463: 0x23, 0x464: 0x23, 0x465: 0x23, 0x466: 0x23, 0x467: 0x23, + 0x468: 0xf0, 0x469: 0xfa, 0x46b: 0xfb, 0x46c: 0xfc, 0x46d: 0xfd, 0x46e: 0xfe, + 0x47c: 0x23, 0x47d: 0xff, 0x47e: 0x100, 0x47f: 0x101, + // Block 0x12, offset 0x480 + 0x4b0: 0x23, 0x4b1: 0x102, 0x4b2: 0x103, + // Block 0x13, offset 0x4c0 + 0x4c5: 0x104, 0x4c6: 0x105, + 0x4c9: 0x106, + 0x4d0: 0x107, 0x4d1: 0x108, 0x4d2: 0x109, 0x4d3: 0x10a, 0x4d4: 0x10b, 0x4d5: 0x10c, 0x4d6: 0x10d, 0x4d7: 0x10e, + 0x4d8: 0x10f, 0x4d9: 0x110, 0x4da: 0x111, 0x4db: 0x112, 0x4dc: 0x113, 0x4dd: 0x114, 0x4de: 0x115, 0x4df: 0x116, + 0x4e8: 0x117, 0x4e9: 0x118, 0x4ea: 0x119, + // Block 0x14, offset 0x500 + 0x500: 0x11a, + 0x520: 0x23, 0x521: 0x23, 0x522: 0x23, 0x523: 0x11b, 0x524: 0x10, 0x525: 0x11c, + 0x538: 0x11d, 0x539: 0x11, 0x53a: 0x11e, + // Block 0x15, offset 0x540 + 0x544: 0x11f, 0x545: 0x120, 0x546: 0x121, + 0x54f: 0x122, + // Block 0x16, offset 0x580 + 0x590: 0x0a, 0x591: 0x0b, 0x592: 0x0c, 0x593: 0x0d, 0x594: 0x0e, 0x596: 0x0f, + 0x59b: 0x10, 0x59d: 0x11, 0x59e: 0x12, 0x59f: 0x13, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x123, 0x5c1: 0x124, 0x5c4: 0x124, 0x5c5: 0x124, 0x5c6: 0x124, 0x5c7: 0x125, + // Block 0x18, offset 0x600 + 0x620: 0x15, +} + +// sparseOffsets: 277 entries, 554 bytes +var sparseOffsets = []uint16{0x0, 0x9, 0xf, 0x18, 0x24, 0x2e, 0x35, 0x38, 0x3c, 0x3f, 0x43, 0x4d, 0x4f, 0x54, 0x64, 0x6b, 0x70, 0x7e, 0x7f, 0x8d, 0x9c, 0xa6, 0xa9, 0xaf, 0xb7, 0xba, 0xbc, 0xca, 0xd0, 0xde, 0xe9, 0xf5, 0x100, 0x10c, 0x116, 0x122, 0x12d, 0x139, 0x145, 0x14d, 0x155, 0x15f, 0x16a, 0x176, 0x17d, 0x188, 0x18d, 0x195, 0x198, 0x19d, 0x1a1, 0x1a5, 0x1ac, 0x1b5, 0x1bd, 0x1be, 0x1c7, 0x1ce, 0x1d6, 0x1dc, 0x1e2, 0x1e7, 0x1eb, 0x1ee, 0x1f0, 0x1f3, 0x1f8, 0x1f9, 0x1fb, 0x1fd, 0x1ff, 0x206, 0x20b, 0x20f, 0x218, 0x21b, 0x21e, 0x224, 0x225, 0x230, 0x231, 0x232, 0x237, 0x244, 0x24c, 0x254, 0x25d, 0x266, 0x26f, 0x274, 0x277, 0x280, 0x28d, 0x28f, 0x296, 0x298, 0x2a4, 0x2a5, 0x2b0, 0x2b8, 0x2c0, 0x2c6, 0x2c7, 0x2d5, 0x2da, 0x2dd, 0x2e2, 0x2e6, 0x2ec, 0x2f1, 0x2f4, 0x2f9, 0x2fe, 0x2ff, 0x305, 0x307, 0x308, 0x30a, 0x30c, 0x30f, 0x310, 0x312, 0x315, 0x31b, 0x31f, 0x321, 0x326, 0x32d, 0x331, 0x33a, 0x33b, 0x343, 0x347, 0x34c, 0x354, 0x35a, 0x360, 0x36a, 0x36f, 0x378, 0x37e, 0x385, 0x389, 0x391, 0x393, 0x395, 0x398, 0x39a, 0x39c, 0x39d, 0x39e, 0x3a0, 0x3a2, 0x3a8, 0x3ad, 0x3af, 0x3b5, 0x3b8, 0x3ba, 0x3c0, 0x3c5, 0x3c7, 0x3c8, 0x3c9, 0x3ca, 0x3cc, 0x3ce, 0x3d0, 0x3d3, 0x3d5, 0x3d8, 0x3e0, 0x3e3, 0x3e7, 0x3ef, 0x3f1, 0x3f2, 0x3f3, 0x3f5, 0x3fb, 0x3fd, 0x3fe, 0x400, 0x402, 0x404, 0x411, 0x412, 0x413, 0x417, 0x419, 0x41a, 0x41b, 0x41c, 0x41d, 0x421, 0x425, 0x42b, 0x42d, 0x434, 0x437, 0x43b, 0x441, 0x44a, 0x450, 0x456, 0x460, 0x46a, 0x46c, 0x473, 0x479, 0x47f, 0x485, 0x488, 0x48e, 0x491, 0x499, 0x49a, 0x4a1, 0x4a2, 0x4a5, 0x4af, 0x4b5, 0x4bb, 0x4bc, 0x4c2, 0x4c5, 0x4cd, 0x4d4, 0x4db, 0x4dc, 0x4dd, 0x4de, 0x4df, 0x4e1, 0x4e3, 0x4e5, 0x4e9, 0x4ea, 0x4ec, 0x4ed, 0x4ee, 0x4f0, 0x4f5, 0x4fa, 0x4fe, 0x4ff, 0x502, 0x506, 0x511, 0x515, 0x51d, 0x522, 0x526, 0x529, 0x52d, 0x530, 0x533, 0x538, 0x53c, 0x540, 0x544, 0x548, 0x54a, 0x54c, 0x54f, 0x554, 0x556, 0x55b, 0x564, 0x569, 0x56a, 0x56d, 0x56e, 0x56f, 0x571, 0x572, 0x573} + +// sparseValues: 1395 entries, 5580 bytes +var sparseValues = [1395]valueRange{ + // Block 0x0, offset 0x0 + {value: 0x0004, lo: 0xa8, hi: 0xa8}, + {value: 0x0012, lo: 0xaa, hi: 0xaa}, + {value: 0x0014, lo: 0xad, hi: 0xad}, + {value: 0x0004, lo: 0xaf, hi: 0xaf}, + {value: 0x0004, lo: 0xb4, hi: 0xb4}, + {value: 0x002a, lo: 0xb5, hi: 0xb5}, + {value: 0x0054, lo: 0xb7, hi: 0xb7}, + {value: 0x0004, lo: 0xb8, hi: 0xb8}, + {value: 0x0012, lo: 0xba, hi: 0xba}, + // Block 0x1, offset 0x9 + {value: 0x2013, lo: 0x80, hi: 0x96}, + {value: 0x2013, lo: 0x98, hi: 0x9e}, + {value: 0x00ea, lo: 0x9f, hi: 0x9f}, + {value: 0x2012, lo: 0xa0, hi: 0xb6}, + {value: 0x2012, lo: 0xb8, hi: 0xbe}, + {value: 0x0252, lo: 0xbf, hi: 0xbf}, + // Block 0x2, offset 0xf + {value: 0x0117, lo: 0x80, hi: 0xaf}, + {value: 0x01eb, lo: 0xb0, hi: 0xb0}, + {value: 0x02ea, lo: 0xb1, hi: 0xb1}, + {value: 0x0117, lo: 0xb2, hi: 0xb7}, + {value: 0x0012, lo: 0xb8, hi: 0xb8}, + {value: 0x0316, lo: 0xb9, hi: 0xba}, + {value: 0x0716, lo: 0xbb, hi: 0xbc}, + {value: 0x0316, lo: 0xbd, hi: 0xbe}, + {value: 0x0553, lo: 0xbf, hi: 0xbf}, + // Block 0x3, offset 0x18 + {value: 0x0552, lo: 0x80, hi: 0x80}, + {value: 0x0316, lo: 0x81, hi: 0x82}, + {value: 0x0716, lo: 0x83, hi: 0x84}, + {value: 0x0316, lo: 0x85, hi: 0x86}, + {value: 0x0f16, lo: 0x87, hi: 0x88}, + {value: 0x034a, lo: 0x89, hi: 0x89}, + {value: 0x0117, lo: 0x8a, hi: 0xb7}, + {value: 0x0253, lo: 0xb8, hi: 0xb8}, + {value: 0x0316, lo: 0xb9, hi: 0xba}, + {value: 0x0716, lo: 0xbb, hi: 0xbc}, + {value: 0x0316, lo: 0xbd, hi: 0xbe}, + {value: 0x044a, lo: 0xbf, hi: 0xbf}, + // Block 0x4, offset 0x24 + {value: 0x0117, lo: 0x80, hi: 0x9f}, + {value: 0x2f53, lo: 0xa0, hi: 0xa0}, + {value: 0x0012, lo: 0xa1, hi: 0xa1}, + {value: 0x0117, lo: 0xa2, hi: 0xb3}, + {value: 0x0012, lo: 0xb4, hi: 0xb9}, + {value: 0x10cb, lo: 0xba, hi: 0xba}, + {value: 0x0716, lo: 0xbb, hi: 0xbc}, + {value: 0x2953, lo: 0xbd, hi: 0xbd}, + {value: 0x11cb, lo: 0xbe, hi: 0xbe}, + {value: 0x12ca, lo: 0xbf, hi: 0xbf}, + // Block 0x5, offset 0x2e + {value: 0x0015, lo: 0x80, hi: 0x81}, + {value: 0x0014, lo: 0x82, hi: 0x97}, + {value: 0x0004, lo: 0x98, hi: 0x9d}, + {value: 0x0014, lo: 0x9e, hi: 0x9f}, + {value: 0x0015, lo: 0xa0, hi: 0xa4}, + {value: 0x0004, lo: 0xa5, hi: 0xab}, + {value: 0x0014, lo: 0xac, hi: 0xbf}, + // Block 0x6, offset 0x35 + {value: 0x0024, lo: 0x80, hi: 0x94}, + {value: 0x0034, lo: 0x95, hi: 0xbc}, + {value: 0x0024, lo: 0xbd, hi: 0xbf}, + // Block 0x7, offset 0x38 + {value: 0x6553, lo: 0x80, hi: 0x8f}, + {value: 0x2013, lo: 0x90, hi: 0x9f}, + {value: 0x5f53, lo: 0xa0, hi: 0xaf}, + {value: 0x2012, lo: 0xb0, hi: 0xbf}, + // Block 0x8, offset 0x3c + {value: 0x5f52, lo: 0x80, hi: 0x8f}, + {value: 0x6552, lo: 0x90, hi: 0x9f}, + {value: 0x0117, lo: 0xa0, hi: 0xbf}, + // Block 0x9, offset 0x3f + {value: 0x0117, lo: 0x80, hi: 0x81}, + {value: 0x0024, lo: 0x83, hi: 0x87}, + {value: 0x0014, lo: 0x88, hi: 0x89}, + {value: 0x0117, lo: 0x8a, hi: 0xbf}, + // Block 0xa, offset 0x43 + {value: 0x0f13, lo: 0x80, hi: 0x80}, + {value: 0x0316, lo: 0x81, hi: 0x82}, + {value: 0x0716, lo: 0x83, hi: 0x84}, + {value: 0x0316, lo: 0x85, hi: 0x86}, + {value: 0x0f16, lo: 0x87, hi: 0x88}, + {value: 0x0316, lo: 0x89, hi: 0x8a}, + {value: 0x0716, lo: 0x8b, hi: 0x8c}, + {value: 0x0316, lo: 0x8d, hi: 0x8e}, + {value: 0x0f12, lo: 0x8f, hi: 0x8f}, + {value: 0x0117, lo: 0x90, hi: 0xbf}, + // Block 0xb, offset 0x4d + {value: 0x0117, lo: 0x80, hi: 0xaf}, + {value: 0x6553, lo: 0xb1, hi: 0xbf}, + // Block 0xc, offset 0x4f + {value: 0x3013, lo: 0x80, hi: 0x8f}, + {value: 0x6853, lo: 0x90, hi: 0x96}, + {value: 0x0014, lo: 0x99, hi: 0x99}, + {value: 0x6552, lo: 0xa1, hi: 0xaf}, + {value: 0x3012, lo: 0xb0, hi: 0xbf}, + // Block 0xd, offset 0x54 + {value: 0x6852, lo: 0x80, hi: 0x86}, + {value: 0x27aa, lo: 0x87, hi: 0x87}, + {value: 0x0034, lo: 0x91, hi: 0x91}, + {value: 0x0024, lo: 0x92, hi: 0x95}, + {value: 0x0034, lo: 0x96, hi: 0x96}, + {value: 0x0024, lo: 0x97, hi: 0x99}, + {value: 0x0034, lo: 0x9a, hi: 0x9b}, + {value: 0x0024, lo: 0x9c, hi: 0xa1}, + {value: 0x0034, lo: 0xa2, hi: 0xa7}, + {value: 0x0024, lo: 0xa8, hi: 0xa9}, + {value: 0x0034, lo: 0xaa, hi: 0xaa}, + {value: 0x0024, lo: 0xab, hi: 0xac}, + {value: 0x0034, lo: 0xad, hi: 0xae}, + {value: 0x0024, lo: 0xaf, hi: 0xaf}, + {value: 0x0034, lo: 0xb0, hi: 0xbd}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0xe, offset 0x64 + {value: 0x0034, lo: 0x81, hi: 0x82}, + {value: 0x0024, lo: 0x84, hi: 0x84}, + {value: 0x0034, lo: 0x85, hi: 0x85}, + {value: 0x0034, lo: 0x87, hi: 0x87}, + {value: 0x0010, lo: 0x90, hi: 0xaa}, + {value: 0x0010, lo: 0xb0, hi: 0xb3}, + {value: 0x0054, lo: 0xb4, hi: 0xb4}, + // Block 0xf, offset 0x6b + {value: 0x0014, lo: 0x80, hi: 0x85}, + {value: 0x0024, lo: 0x90, hi: 0x97}, + {value: 0x0034, lo: 0x98, hi: 0x9a}, + {value: 0x0014, lo: 0x9c, hi: 0x9c}, + {value: 0x0010, lo: 0xa0, hi: 0xbf}, + // Block 0x10, offset 0x70 + {value: 0x0014, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x81, hi: 0x8a}, + {value: 0x0034, lo: 0x8b, hi: 0x92}, + {value: 0x0024, lo: 0x93, hi: 0x94}, + {value: 0x0034, lo: 0x95, hi: 0x96}, + {value: 0x0024, lo: 0x97, hi: 0x9b}, + {value: 0x0034, lo: 0x9c, hi: 0x9c}, + {value: 0x0024, lo: 0x9d, hi: 0x9e}, + {value: 0x0034, lo: 0x9f, hi: 0x9f}, + {value: 0x0010, lo: 0xa0, hi: 0xa9}, + {value: 0x0010, lo: 0xab, hi: 0xab}, + {value: 0x0010, lo: 0xae, hi: 0xaf}, + {value: 0x0034, lo: 0xb0, hi: 0xb0}, + {value: 0x0010, lo: 0xb1, hi: 0xbf}, + // Block 0x11, offset 0x7e + {value: 0x0010, lo: 0x80, hi: 0xbf}, + // Block 0x12, offset 0x7f + {value: 0x0010, lo: 0x80, hi: 0x93}, + {value: 0x0010, lo: 0x95, hi: 0x95}, + {value: 0x0024, lo: 0x96, hi: 0x9c}, + {value: 0x0014, lo: 0x9d, hi: 0x9d}, + {value: 0x0024, lo: 0x9f, hi: 0xa2}, + {value: 0x0034, lo: 0xa3, hi: 0xa3}, + {value: 0x0024, lo: 0xa4, hi: 0xa4}, + {value: 0x0014, lo: 0xa5, hi: 0xa6}, + {value: 0x0024, lo: 0xa7, hi: 0xa8}, + {value: 0x0034, lo: 0xaa, hi: 0xaa}, + {value: 0x0024, lo: 0xab, hi: 0xac}, + {value: 0x0034, lo: 0xad, hi: 0xad}, + {value: 0x0010, lo: 0xae, hi: 0xbc}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0x13, offset 0x8d + {value: 0x0014, lo: 0x8f, hi: 0x8f}, + {value: 0x0010, lo: 0x90, hi: 0x90}, + {value: 0x0034, lo: 0x91, hi: 0x91}, + {value: 0x0010, lo: 0x92, hi: 0xaf}, + {value: 0x0024, lo: 0xb0, hi: 0xb0}, + {value: 0x0034, lo: 0xb1, hi: 0xb1}, + {value: 0x0024, lo: 0xb2, hi: 0xb3}, + {value: 0x0034, lo: 0xb4, hi: 0xb4}, + {value: 0x0024, lo: 0xb5, hi: 0xb6}, + {value: 0x0034, lo: 0xb7, hi: 0xb9}, + {value: 0x0024, lo: 0xba, hi: 0xba}, + {value: 0x0034, lo: 0xbb, hi: 0xbc}, + {value: 0x0024, lo: 0xbd, hi: 0xbd}, + {value: 0x0034, lo: 0xbe, hi: 0xbe}, + {value: 0x0024, lo: 0xbf, hi: 0xbf}, + // Block 0x14, offset 0x9c + {value: 0x0024, lo: 0x80, hi: 0x81}, + {value: 0x0034, lo: 0x82, hi: 0x82}, + {value: 0x0024, lo: 0x83, hi: 0x83}, + {value: 0x0034, lo: 0x84, hi: 0x84}, + {value: 0x0024, lo: 0x85, hi: 0x85}, + {value: 0x0034, lo: 0x86, hi: 0x86}, + {value: 0x0024, lo: 0x87, hi: 0x87}, + {value: 0x0034, lo: 0x88, hi: 0x88}, + {value: 0x0024, lo: 0x89, hi: 0x8a}, + {value: 0x0010, lo: 0x8d, hi: 0xbf}, + // Block 0x15, offset 0xa6 + {value: 0x0010, lo: 0x80, hi: 0xa5}, + {value: 0x0014, lo: 0xa6, hi: 0xb0}, + {value: 0x0010, lo: 0xb1, hi: 0xb1}, + // Block 0x16, offset 0xa9 + {value: 0x0010, lo: 0x80, hi: 0xaa}, + {value: 0x0024, lo: 0xab, hi: 0xb1}, + {value: 0x0034, lo: 0xb2, hi: 0xb2}, + {value: 0x0024, lo: 0xb3, hi: 0xb3}, + {value: 0x0014, lo: 0xb4, hi: 0xb5}, + {value: 0x0014, lo: 0xba, hi: 0xba}, + // Block 0x17, offset 0xaf + {value: 0x0010, lo: 0x80, hi: 0x95}, + {value: 0x0024, lo: 0x96, hi: 0x99}, + {value: 0x0014, lo: 0x9a, hi: 0x9a}, + {value: 0x0024, lo: 0x9b, hi: 0xa3}, + {value: 0x0014, lo: 0xa4, hi: 0xa4}, + {value: 0x0024, lo: 0xa5, hi: 0xa7}, + {value: 0x0014, lo: 0xa8, hi: 0xa8}, + {value: 0x0024, lo: 0xa9, hi: 0xad}, + // Block 0x18, offset 0xb7 + {value: 0x0010, lo: 0x80, hi: 0x98}, + {value: 0x0034, lo: 0x99, hi: 0x9b}, + {value: 0x0010, lo: 0xa0, hi: 0xaa}, + // Block 0x19, offset 0xba + {value: 0x0010, lo: 0xa0, hi: 0xb4}, + {value: 0x0010, lo: 0xb6, hi: 0xbd}, + // Block 0x1a, offset 0xbc + {value: 0x0024, lo: 0x94, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa2}, + {value: 0x0034, lo: 0xa3, hi: 0xa3}, + {value: 0x0024, lo: 0xa4, hi: 0xa5}, + {value: 0x0034, lo: 0xa6, hi: 0xa6}, + {value: 0x0024, lo: 0xa7, hi: 0xa8}, + {value: 0x0034, lo: 0xa9, hi: 0xa9}, + {value: 0x0024, lo: 0xaa, hi: 0xac}, + {value: 0x0034, lo: 0xad, hi: 0xb2}, + {value: 0x0024, lo: 0xb3, hi: 0xb5}, + {value: 0x0034, lo: 0xb6, hi: 0xb6}, + {value: 0x0024, lo: 0xb7, hi: 0xb8}, + {value: 0x0034, lo: 0xb9, hi: 0xba}, + {value: 0x0024, lo: 0xbb, hi: 0xbf}, + // Block 0x1b, offset 0xca + {value: 0x0014, lo: 0x80, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0xb9}, + {value: 0x0014, lo: 0xba, hi: 0xba}, + {value: 0x0010, lo: 0xbb, hi: 0xbb}, + {value: 0x0034, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0x1c, offset 0xd0 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x88}, + {value: 0x0010, lo: 0x89, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x8e, hi: 0x90}, + {value: 0x0024, lo: 0x91, hi: 0x91}, + {value: 0x0034, lo: 0x92, hi: 0x92}, + {value: 0x0024, lo: 0x93, hi: 0x94}, + {value: 0x0014, lo: 0x95, hi: 0x97}, + {value: 0x0010, lo: 0x98, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa3}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + {value: 0x0014, lo: 0xb1, hi: 0xb1}, + {value: 0x0010, lo: 0xb2, hi: 0xbf}, + // Block 0x1d, offset 0xde + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8c}, + {value: 0x0010, lo: 0x8f, hi: 0x90}, + {value: 0x0010, lo: 0x93, hi: 0xa8}, + {value: 0x0010, lo: 0xaa, hi: 0xb0}, + {value: 0x0010, lo: 0xb2, hi: 0xb2}, + {value: 0x0010, lo: 0xb6, hi: 0xb9}, + {value: 0x0034, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0x1e, offset 0xe9 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x84}, + {value: 0x0010, lo: 0x87, hi: 0x88}, + {value: 0x0010, lo: 0x8b, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x8e, hi: 0x8e}, + {value: 0x0010, lo: 0x97, hi: 0x97}, + {value: 0x0010, lo: 0x9c, hi: 0x9d}, + {value: 0x0010, lo: 0x9f, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa3}, + {value: 0x0010, lo: 0xa6, hi: 0xb1}, + {value: 0x0010, lo: 0xbc, hi: 0xbc}, + // Block 0x1f, offset 0xf5 + {value: 0x0014, lo: 0x81, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8a}, + {value: 0x0010, lo: 0x8f, hi: 0x90}, + {value: 0x0010, lo: 0x93, hi: 0xa8}, + {value: 0x0010, lo: 0xaa, hi: 0xb0}, + {value: 0x0010, lo: 0xb2, hi: 0xb3}, + {value: 0x0010, lo: 0xb5, hi: 0xb6}, + {value: 0x0010, lo: 0xb8, hi: 0xb9}, + {value: 0x0034, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbe, hi: 0xbf}, + // Block 0x20, offset 0x100 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x82}, + {value: 0x0014, lo: 0x87, hi: 0x88}, + {value: 0x0014, lo: 0x8b, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0014, lo: 0x91, hi: 0x91}, + {value: 0x0010, lo: 0x99, hi: 0x9c}, + {value: 0x0010, lo: 0x9e, hi: 0x9e}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + {value: 0x0014, lo: 0xb0, hi: 0xb1}, + {value: 0x0010, lo: 0xb2, hi: 0xb4}, + {value: 0x0014, lo: 0xb5, hi: 0xb5}, + // Block 0x21, offset 0x10c + {value: 0x0014, lo: 0x81, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8d}, + {value: 0x0010, lo: 0x8f, hi: 0x91}, + {value: 0x0010, lo: 0x93, hi: 0xa8}, + {value: 0x0010, lo: 0xaa, hi: 0xb0}, + {value: 0x0010, lo: 0xb2, hi: 0xb3}, + {value: 0x0010, lo: 0xb5, hi: 0xb9}, + {value: 0x0034, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0x22, offset 0x116 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x85}, + {value: 0x0014, lo: 0x87, hi: 0x88}, + {value: 0x0010, lo: 0x89, hi: 0x89}, + {value: 0x0010, lo: 0x8b, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0x90}, + {value: 0x0010, lo: 0xa0, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa3}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + {value: 0x0010, lo: 0xb9, hi: 0xb9}, + {value: 0x0014, lo: 0xba, hi: 0xbf}, + // Block 0x23, offset 0x122 + {value: 0x0014, lo: 0x81, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8c}, + {value: 0x0010, lo: 0x8f, hi: 0x90}, + {value: 0x0010, lo: 0x93, hi: 0xa8}, + {value: 0x0010, lo: 0xaa, hi: 0xb0}, + {value: 0x0010, lo: 0xb2, hi: 0xb3}, + {value: 0x0010, lo: 0xb5, hi: 0xb9}, + {value: 0x0034, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbe}, + {value: 0x0014, lo: 0xbf, hi: 0xbf}, + // Block 0x24, offset 0x12d + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x84}, + {value: 0x0010, lo: 0x87, hi: 0x88}, + {value: 0x0010, lo: 0x8b, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0014, lo: 0x96, hi: 0x96}, + {value: 0x0010, lo: 0x97, hi: 0x97}, + {value: 0x0010, lo: 0x9c, hi: 0x9d}, + {value: 0x0010, lo: 0x9f, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa3}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + {value: 0x0010, lo: 0xb1, hi: 0xb1}, + // Block 0x25, offset 0x139 + {value: 0x0014, lo: 0x82, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8a}, + {value: 0x0010, lo: 0x8e, hi: 0x90}, + {value: 0x0010, lo: 0x92, hi: 0x95}, + {value: 0x0010, lo: 0x99, hi: 0x9a}, + {value: 0x0010, lo: 0x9c, hi: 0x9c}, + {value: 0x0010, lo: 0x9e, hi: 0x9f}, + {value: 0x0010, lo: 0xa3, hi: 0xa4}, + {value: 0x0010, lo: 0xa8, hi: 0xaa}, + {value: 0x0010, lo: 0xae, hi: 0xb9}, + {value: 0x0010, lo: 0xbe, hi: 0xbf}, + // Block 0x26, offset 0x145 + {value: 0x0014, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x81, hi: 0x82}, + {value: 0x0010, lo: 0x86, hi: 0x88}, + {value: 0x0010, lo: 0x8a, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0x90}, + {value: 0x0010, lo: 0x97, hi: 0x97}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + // Block 0x27, offset 0x14d + {value: 0x0014, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x81, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8c}, + {value: 0x0010, lo: 0x8e, hi: 0x90}, + {value: 0x0010, lo: 0x92, hi: 0xa8}, + {value: 0x0010, lo: 0xaa, hi: 0xb9}, + {value: 0x0010, lo: 0xbd, hi: 0xbd}, + {value: 0x0014, lo: 0xbe, hi: 0xbf}, + // Block 0x28, offset 0x155 + {value: 0x0014, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x81, hi: 0x84}, + {value: 0x0014, lo: 0x86, hi: 0x88}, + {value: 0x0014, lo: 0x8a, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0034, lo: 0x95, hi: 0x96}, + {value: 0x0010, lo: 0x98, hi: 0x9a}, + {value: 0x0010, lo: 0xa0, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa3}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + // Block 0x29, offset 0x15f + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8c}, + {value: 0x0010, lo: 0x8e, hi: 0x90}, + {value: 0x0010, lo: 0x92, hi: 0xa8}, + {value: 0x0010, lo: 0xaa, hi: 0xb3}, + {value: 0x0010, lo: 0xb5, hi: 0xb9}, + {value: 0x0034, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbe}, + {value: 0x0014, lo: 0xbf, hi: 0xbf}, + // Block 0x2a, offset 0x16a + {value: 0x0010, lo: 0x80, hi: 0x84}, + {value: 0x0014, lo: 0x86, hi: 0x86}, + {value: 0x0010, lo: 0x87, hi: 0x88}, + {value: 0x0010, lo: 0x8a, hi: 0x8b}, + {value: 0x0014, lo: 0x8c, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x95, hi: 0x96}, + {value: 0x0010, lo: 0x9e, hi: 0x9e}, + {value: 0x0010, lo: 0xa0, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa3}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + {value: 0x0010, lo: 0xb1, hi: 0xb2}, + // Block 0x2b, offset 0x176 + {value: 0x0014, lo: 0x80, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8c}, + {value: 0x0010, lo: 0x8e, hi: 0x90}, + {value: 0x0010, lo: 0x92, hi: 0xba}, + {value: 0x0034, lo: 0xbb, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0x2c, offset 0x17d + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x84}, + {value: 0x0010, lo: 0x86, hi: 0x88}, + {value: 0x0010, lo: 0x8a, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x8e, hi: 0x8e}, + {value: 0x0010, lo: 0x94, hi: 0x97}, + {value: 0x0010, lo: 0x9f, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa3}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + {value: 0x0010, lo: 0xba, hi: 0xbf}, + // Block 0x2d, offset 0x188 + {value: 0x0010, lo: 0x82, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x96}, + {value: 0x0010, lo: 0x9a, hi: 0xb1}, + {value: 0x0010, lo: 0xb3, hi: 0xbb}, + {value: 0x0010, lo: 0xbd, hi: 0xbd}, + // Block 0x2e, offset 0x18d + {value: 0x0010, lo: 0x80, hi: 0x86}, + {value: 0x0034, lo: 0x8a, hi: 0x8a}, + {value: 0x0010, lo: 0x8f, hi: 0x91}, + {value: 0x0014, lo: 0x92, hi: 0x94}, + {value: 0x0014, lo: 0x96, hi: 0x96}, + {value: 0x0010, lo: 0x98, hi: 0x9f}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + {value: 0x0010, lo: 0xb2, hi: 0xb3}, + // Block 0x2f, offset 0x195 + {value: 0x0014, lo: 0xb1, hi: 0xb1}, + {value: 0x0014, lo: 0xb4, hi: 0xb7}, + {value: 0x0034, lo: 0xb8, hi: 0xba}, + // Block 0x30, offset 0x198 + {value: 0x0004, lo: 0x86, hi: 0x86}, + {value: 0x0014, lo: 0x87, hi: 0x87}, + {value: 0x0034, lo: 0x88, hi: 0x8b}, + {value: 0x0014, lo: 0x8c, hi: 0x8e}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + // Block 0x31, offset 0x19d + {value: 0x0014, lo: 0xb1, hi: 0xb1}, + {value: 0x0014, lo: 0xb4, hi: 0xb7}, + {value: 0x0034, lo: 0xb8, hi: 0xb9}, + {value: 0x0014, lo: 0xbb, hi: 0xbc}, + // Block 0x32, offset 0x1a1 + {value: 0x0004, lo: 0x86, hi: 0x86}, + {value: 0x0034, lo: 0x88, hi: 0x8b}, + {value: 0x0014, lo: 0x8c, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + // Block 0x33, offset 0x1a5 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0034, lo: 0x98, hi: 0x99}, + {value: 0x0010, lo: 0xa0, hi: 0xa9}, + {value: 0x0034, lo: 0xb5, hi: 0xb5}, + {value: 0x0034, lo: 0xb7, hi: 0xb7}, + {value: 0x0034, lo: 0xb9, hi: 0xb9}, + {value: 0x0010, lo: 0xbe, hi: 0xbf}, + // Block 0x34, offset 0x1ac + {value: 0x0010, lo: 0x80, hi: 0x87}, + {value: 0x0010, lo: 0x89, hi: 0xac}, + {value: 0x0034, lo: 0xb1, hi: 0xb2}, + {value: 0x0014, lo: 0xb3, hi: 0xb3}, + {value: 0x0034, lo: 0xb4, hi: 0xb4}, + {value: 0x0014, lo: 0xb5, hi: 0xb9}, + {value: 0x0034, lo: 0xba, hi: 0xbd}, + {value: 0x0014, lo: 0xbe, hi: 0xbe}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0x35, offset 0x1b5 + {value: 0x0034, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x81}, + {value: 0x0024, lo: 0x82, hi: 0x83}, + {value: 0x0034, lo: 0x84, hi: 0x84}, + {value: 0x0024, lo: 0x86, hi: 0x87}, + {value: 0x0010, lo: 0x88, hi: 0x8c}, + {value: 0x0014, lo: 0x8d, hi: 0x97}, + {value: 0x0014, lo: 0x99, hi: 0xbc}, + // Block 0x36, offset 0x1bd + {value: 0x0034, lo: 0x86, hi: 0x86}, + // Block 0x37, offset 0x1be + {value: 0x0010, lo: 0xab, hi: 0xac}, + {value: 0x0014, lo: 0xad, hi: 0xb0}, + {value: 0x0010, lo: 0xb1, hi: 0xb1}, + {value: 0x0014, lo: 0xb2, hi: 0xb6}, + {value: 0x0034, lo: 0xb7, hi: 0xb7}, + {value: 0x0010, lo: 0xb8, hi: 0xb8}, + {value: 0x0034, lo: 0xb9, hi: 0xba}, + {value: 0x0010, lo: 0xbb, hi: 0xbc}, + {value: 0x0014, lo: 0xbd, hi: 0xbe}, + // Block 0x38, offset 0x1c7 + {value: 0x0010, lo: 0x80, hi: 0x89}, + {value: 0x0010, lo: 0x96, hi: 0x97}, + {value: 0x0014, lo: 0x98, hi: 0x99}, + {value: 0x0014, lo: 0x9e, hi: 0xa0}, + {value: 0x0010, lo: 0xa2, hi: 0xa4}, + {value: 0x0010, lo: 0xa7, hi: 0xad}, + {value: 0x0014, lo: 0xb1, hi: 0xb4}, + // Block 0x39, offset 0x1ce + {value: 0x0014, lo: 0x82, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0x84}, + {value: 0x0014, lo: 0x85, hi: 0x86}, + {value: 0x0010, lo: 0x87, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x8f, hi: 0x9c}, + {value: 0x0014, lo: 0x9d, hi: 0x9d}, + {value: 0x6c53, lo: 0xa0, hi: 0xbf}, + // Block 0x3a, offset 0x1d6 + {value: 0x7053, lo: 0x80, hi: 0x85}, + {value: 0x7053, lo: 0x87, hi: 0x87}, + {value: 0x7053, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0xba}, + {value: 0x0014, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0x3b, offset 0x1dc + {value: 0x0010, lo: 0x80, hi: 0x88}, + {value: 0x0010, lo: 0x8a, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0x96}, + {value: 0x0010, lo: 0x98, hi: 0x98}, + {value: 0x0010, lo: 0x9a, hi: 0x9d}, + {value: 0x0010, lo: 0xa0, hi: 0xbf}, + // Block 0x3c, offset 0x1e2 + {value: 0x0010, lo: 0x80, hi: 0x88}, + {value: 0x0010, lo: 0x8a, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0xb0}, + {value: 0x0010, lo: 0xb2, hi: 0xb5}, + {value: 0x0010, lo: 0xb8, hi: 0xbe}, + // Block 0x3d, offset 0x1e7 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x82, hi: 0x85}, + {value: 0x0010, lo: 0x88, hi: 0x96}, + {value: 0x0010, lo: 0x98, hi: 0xbf}, + // Block 0x3e, offset 0x1eb + {value: 0x0010, lo: 0x80, hi: 0x90}, + {value: 0x0010, lo: 0x92, hi: 0x95}, + {value: 0x0010, lo: 0x98, hi: 0xbf}, + // Block 0x3f, offset 0x1ee + {value: 0x0010, lo: 0x80, hi: 0x9a}, + {value: 0x0024, lo: 0x9d, hi: 0x9f}, + // Block 0x40, offset 0x1f0 + {value: 0x0010, lo: 0x80, hi: 0x8f}, + {value: 0x7453, lo: 0xa0, hi: 0xaf}, + {value: 0x7853, lo: 0xb0, hi: 0xbf}, + // Block 0x41, offset 0x1f3 + {value: 0x7c53, lo: 0x80, hi: 0x8f}, + {value: 0x8053, lo: 0x90, hi: 0x9f}, + {value: 0x7c53, lo: 0xa0, hi: 0xaf}, + {value: 0x0813, lo: 0xb0, hi: 0xb5}, + {value: 0x0892, lo: 0xb8, hi: 0xbd}, + // Block 0x42, offset 0x1f8 + {value: 0x0010, lo: 0x81, hi: 0xbf}, + // Block 0x43, offset 0x1f9 + {value: 0x0010, lo: 0x80, hi: 0xac}, + {value: 0x0010, lo: 0xaf, hi: 0xbf}, + // Block 0x44, offset 0x1fb + {value: 0x0010, lo: 0x81, hi: 0x9a}, + {value: 0x0010, lo: 0xa0, hi: 0xbf}, + // Block 0x45, offset 0x1fd + {value: 0x0010, lo: 0x80, hi: 0xaa}, + {value: 0x0010, lo: 0xae, hi: 0xb8}, + // Block 0x46, offset 0x1ff + {value: 0x0010, lo: 0x80, hi: 0x8c}, + {value: 0x0010, lo: 0x8e, hi: 0x91}, + {value: 0x0014, lo: 0x92, hi: 0x93}, + {value: 0x0034, lo: 0x94, hi: 0x94}, + {value: 0x0010, lo: 0xa0, hi: 0xb1}, + {value: 0x0014, lo: 0xb2, hi: 0xb3}, + {value: 0x0034, lo: 0xb4, hi: 0xb4}, + // Block 0x47, offset 0x206 + {value: 0x0010, lo: 0x80, hi: 0x91}, + {value: 0x0014, lo: 0x92, hi: 0x93}, + {value: 0x0010, lo: 0xa0, hi: 0xac}, + {value: 0x0010, lo: 0xae, hi: 0xb0}, + {value: 0x0014, lo: 0xb2, hi: 0xb3}, + // Block 0x48, offset 0x20b + {value: 0x0014, lo: 0xb4, hi: 0xb5}, + {value: 0x0010, lo: 0xb6, hi: 0xb6}, + {value: 0x0014, lo: 0xb7, hi: 0xbd}, + {value: 0x0010, lo: 0xbe, hi: 0xbf}, + // Block 0x49, offset 0x20f + {value: 0x0010, lo: 0x80, hi: 0x85}, + {value: 0x0014, lo: 0x86, hi: 0x86}, + {value: 0x0010, lo: 0x87, hi: 0x88}, + {value: 0x0014, lo: 0x89, hi: 0x91}, + {value: 0x0034, lo: 0x92, hi: 0x92}, + {value: 0x0014, lo: 0x93, hi: 0x93}, + {value: 0x0004, lo: 0x97, hi: 0x97}, + {value: 0x0024, lo: 0x9d, hi: 0x9d}, + {value: 0x0010, lo: 0xa0, hi: 0xa9}, + // Block 0x4a, offset 0x218 + {value: 0x0014, lo: 0x8b, hi: 0x8e}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0010, lo: 0xa0, hi: 0xbf}, + // Block 0x4b, offset 0x21b + {value: 0x0010, lo: 0x80, hi: 0x82}, + {value: 0x0014, lo: 0x83, hi: 0x83}, + {value: 0x0010, lo: 0x84, hi: 0xb7}, + // Block 0x4c, offset 0x21e + {value: 0x0010, lo: 0x80, hi: 0x84}, + {value: 0x0014, lo: 0x85, hi: 0x86}, + {value: 0x0010, lo: 0x87, hi: 0xa8}, + {value: 0x0034, lo: 0xa9, hi: 0xa9}, + {value: 0x0010, lo: 0xaa, hi: 0xaa}, + {value: 0x0010, lo: 0xb0, hi: 0xbf}, + // Block 0x4d, offset 0x224 + {value: 0x0010, lo: 0x80, hi: 0xb5}, + // Block 0x4e, offset 0x225 + {value: 0x0010, lo: 0x80, hi: 0x9e}, + {value: 0x0014, lo: 0xa0, hi: 0xa2}, + {value: 0x0010, lo: 0xa3, hi: 0xa6}, + {value: 0x0014, lo: 0xa7, hi: 0xa8}, + {value: 0x0010, lo: 0xa9, hi: 0xab}, + {value: 0x0010, lo: 0xb0, hi: 0xb1}, + {value: 0x0014, lo: 0xb2, hi: 0xb2}, + {value: 0x0010, lo: 0xb3, hi: 0xb8}, + {value: 0x0034, lo: 0xb9, hi: 0xb9}, + {value: 0x0024, lo: 0xba, hi: 0xba}, + {value: 0x0034, lo: 0xbb, hi: 0xbb}, + // Block 0x4f, offset 0x230 + {value: 0x0010, lo: 0x86, hi: 0x8f}, + // Block 0x50, offset 0x231 + {value: 0x0010, lo: 0x90, hi: 0x99}, + // Block 0x51, offset 0x232 + {value: 0x0010, lo: 0x80, hi: 0x96}, + {value: 0x0024, lo: 0x97, hi: 0x97}, + {value: 0x0034, lo: 0x98, hi: 0x98}, + {value: 0x0010, lo: 0x99, hi: 0x9a}, + {value: 0x0014, lo: 0x9b, hi: 0x9b}, + // Block 0x52, offset 0x237 + {value: 0x0010, lo: 0x95, hi: 0x95}, + {value: 0x0014, lo: 0x96, hi: 0x96}, + {value: 0x0010, lo: 0x97, hi: 0x97}, + {value: 0x0014, lo: 0x98, hi: 0x9e}, + {value: 0x0034, lo: 0xa0, hi: 0xa0}, + {value: 0x0010, lo: 0xa1, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa2}, + {value: 0x0010, lo: 0xa3, hi: 0xa4}, + {value: 0x0014, lo: 0xa5, hi: 0xac}, + {value: 0x0010, lo: 0xad, hi: 0xb2}, + {value: 0x0014, lo: 0xb3, hi: 0xb4}, + {value: 0x0024, lo: 0xb5, hi: 0xbc}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0x53, offset 0x244 + {value: 0x0010, lo: 0x80, hi: 0x89}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0004, lo: 0xa7, hi: 0xa7}, + {value: 0x0024, lo: 0xb0, hi: 0xb4}, + {value: 0x0034, lo: 0xb5, hi: 0xba}, + {value: 0x0024, lo: 0xbb, hi: 0xbc}, + {value: 0x0034, lo: 0xbd, hi: 0xbd}, + {value: 0x0014, lo: 0xbe, hi: 0xbe}, + // Block 0x54, offset 0x24c + {value: 0x0014, lo: 0x80, hi: 0x83}, + {value: 0x0010, lo: 0x84, hi: 0xb3}, + {value: 0x0034, lo: 0xb4, hi: 0xb4}, + {value: 0x0010, lo: 0xb5, hi: 0xb5}, + {value: 0x0014, lo: 0xb6, hi: 0xba}, + {value: 0x0010, lo: 0xbb, hi: 0xbb}, + {value: 0x0014, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0x55, offset 0x254 + {value: 0x0010, lo: 0x80, hi: 0x81}, + {value: 0x0014, lo: 0x82, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0x83}, + {value: 0x0030, lo: 0x84, hi: 0x84}, + {value: 0x0010, lo: 0x85, hi: 0x8b}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0024, lo: 0xab, hi: 0xab}, + {value: 0x0034, lo: 0xac, hi: 0xac}, + {value: 0x0024, lo: 0xad, hi: 0xb3}, + // Block 0x56, offset 0x25d + {value: 0x0014, lo: 0x80, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa5}, + {value: 0x0010, lo: 0xa6, hi: 0xa7}, + {value: 0x0014, lo: 0xa8, hi: 0xa9}, + {value: 0x0030, lo: 0xaa, hi: 0xaa}, + {value: 0x0034, lo: 0xab, hi: 0xab}, + {value: 0x0014, lo: 0xac, hi: 0xad}, + {value: 0x0010, lo: 0xae, hi: 0xbf}, + // Block 0x57, offset 0x266 + {value: 0x0010, lo: 0x80, hi: 0xa5}, + {value: 0x0034, lo: 0xa6, hi: 0xa6}, + {value: 0x0010, lo: 0xa7, hi: 0xa7}, + {value: 0x0014, lo: 0xa8, hi: 0xa9}, + {value: 0x0010, lo: 0xaa, hi: 0xac}, + {value: 0x0014, lo: 0xad, hi: 0xad}, + {value: 0x0010, lo: 0xae, hi: 0xae}, + {value: 0x0014, lo: 0xaf, hi: 0xb1}, + {value: 0x0030, lo: 0xb2, hi: 0xb3}, + // Block 0x58, offset 0x26f + {value: 0x0010, lo: 0x80, hi: 0xab}, + {value: 0x0014, lo: 0xac, hi: 0xb3}, + {value: 0x0010, lo: 0xb4, hi: 0xb5}, + {value: 0x0014, lo: 0xb6, hi: 0xb6}, + {value: 0x0034, lo: 0xb7, hi: 0xb7}, + // Block 0x59, offset 0x274 + {value: 0x0010, lo: 0x80, hi: 0x89}, + {value: 0x0010, lo: 0x8d, hi: 0xb7}, + {value: 0x0014, lo: 0xb8, hi: 0xbd}, + // Block 0x5a, offset 0x277 + {value: 0x296a, lo: 0x80, hi: 0x80}, + {value: 0x2a2a, lo: 0x81, hi: 0x81}, + {value: 0x2aea, lo: 0x82, hi: 0x82}, + {value: 0x2baa, lo: 0x83, hi: 0x83}, + {value: 0x2c6a, lo: 0x84, hi: 0x84}, + {value: 0x2d2a, lo: 0x85, hi: 0x85}, + {value: 0x2dea, lo: 0x86, hi: 0x86}, + {value: 0x2eaa, lo: 0x87, hi: 0x87}, + {value: 0x2f6a, lo: 0x88, hi: 0x88}, + // Block 0x5b, offset 0x280 + {value: 0x0024, lo: 0x90, hi: 0x92}, + {value: 0x0034, lo: 0x94, hi: 0x99}, + {value: 0x0024, lo: 0x9a, hi: 0x9b}, + {value: 0x0034, lo: 0x9c, hi: 0x9f}, + {value: 0x0024, lo: 0xa0, hi: 0xa0}, + {value: 0x0010, lo: 0xa1, hi: 0xa1}, + {value: 0x0034, lo: 0xa2, hi: 0xa8}, + {value: 0x0010, lo: 0xa9, hi: 0xac}, + {value: 0x0034, lo: 0xad, hi: 0xad}, + {value: 0x0010, lo: 0xae, hi: 0xb3}, + {value: 0x0024, lo: 0xb4, hi: 0xb4}, + {value: 0x0010, lo: 0xb5, hi: 0xb7}, + {value: 0x0024, lo: 0xb8, hi: 0xb9}, + // Block 0x5c, offset 0x28d + {value: 0x0012, lo: 0x80, hi: 0xab}, + {value: 0x0015, lo: 0xac, hi: 0xbf}, + // Block 0x5d, offset 0x28f + {value: 0x0015, lo: 0x80, hi: 0xaa}, + {value: 0x0012, lo: 0xab, hi: 0xb7}, + {value: 0x0015, lo: 0xb8, hi: 0xb8}, + {value: 0x8452, lo: 0xb9, hi: 0xb9}, + {value: 0x0012, lo: 0xba, hi: 0xbc}, + {value: 0x8852, lo: 0xbd, hi: 0xbd}, + {value: 0x0012, lo: 0xbe, hi: 0xbf}, + // Block 0x5e, offset 0x296 + {value: 0x0012, lo: 0x80, hi: 0x9a}, + {value: 0x0015, lo: 0x9b, hi: 0xbf}, + // Block 0x5f, offset 0x298 + {value: 0x0024, lo: 0x80, hi: 0x81}, + {value: 0x0034, lo: 0x82, hi: 0x82}, + {value: 0x0024, lo: 0x83, hi: 0x89}, + {value: 0x0034, lo: 0x8a, hi: 0x8a}, + {value: 0x0024, lo: 0x8b, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x90}, + {value: 0x0024, lo: 0x91, hi: 0xb5}, + {value: 0x0034, lo: 0xb6, hi: 0xb9}, + {value: 0x0024, lo: 0xbb, hi: 0xbb}, + {value: 0x0034, lo: 0xbc, hi: 0xbd}, + {value: 0x0024, lo: 0xbe, hi: 0xbe}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0x60, offset 0x2a4 + {value: 0x0117, lo: 0x80, hi: 0xbf}, + // Block 0x61, offset 0x2a5 + {value: 0x0117, lo: 0x80, hi: 0x95}, + {value: 0x306a, lo: 0x96, hi: 0x96}, + {value: 0x316a, lo: 0x97, hi: 0x97}, + {value: 0x326a, lo: 0x98, hi: 0x98}, + {value: 0x336a, lo: 0x99, hi: 0x99}, + {value: 0x346a, lo: 0x9a, hi: 0x9a}, + {value: 0x356a, lo: 0x9b, hi: 0x9b}, + {value: 0x0012, lo: 0x9c, hi: 0x9d}, + {value: 0x366b, lo: 0x9e, hi: 0x9e}, + {value: 0x0012, lo: 0x9f, hi: 0x9f}, + {value: 0x0117, lo: 0xa0, hi: 0xbf}, + // Block 0x62, offset 0x2b0 + {value: 0x0812, lo: 0x80, hi: 0x87}, + {value: 0x0813, lo: 0x88, hi: 0x8f}, + {value: 0x0812, lo: 0x90, hi: 0x95}, + {value: 0x0813, lo: 0x98, hi: 0x9d}, + {value: 0x0812, lo: 0xa0, hi: 0xa7}, + {value: 0x0813, lo: 0xa8, hi: 0xaf}, + {value: 0x0812, lo: 0xb0, hi: 0xb7}, + {value: 0x0813, lo: 0xb8, hi: 0xbf}, + // Block 0x63, offset 0x2b8 + {value: 0x0004, lo: 0x8b, hi: 0x8b}, + {value: 0x0014, lo: 0x8c, hi: 0x8f}, + {value: 0x0054, lo: 0x98, hi: 0x99}, + {value: 0x0054, lo: 0xa4, hi: 0xa4}, + {value: 0x0054, lo: 0xa7, hi: 0xa7}, + {value: 0x0014, lo: 0xaa, hi: 0xae}, + {value: 0x0010, lo: 0xaf, hi: 0xaf}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0x64, offset 0x2c0 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x94, hi: 0x94}, + {value: 0x0014, lo: 0xa0, hi: 0xa4}, + {value: 0x0014, lo: 0xa6, hi: 0xaf}, + {value: 0x0015, lo: 0xb1, hi: 0xb1}, + {value: 0x0015, lo: 0xbf, hi: 0xbf}, + // Block 0x65, offset 0x2c6 + {value: 0x0015, lo: 0x90, hi: 0x9c}, + // Block 0x66, offset 0x2c7 + {value: 0x0024, lo: 0x90, hi: 0x91}, + {value: 0x0034, lo: 0x92, hi: 0x93}, + {value: 0x0024, lo: 0x94, hi: 0x97}, + {value: 0x0034, lo: 0x98, hi: 0x9a}, + {value: 0x0024, lo: 0x9b, hi: 0x9c}, + {value: 0x0014, lo: 0x9d, hi: 0xa0}, + {value: 0x0024, lo: 0xa1, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa4}, + {value: 0x0034, lo: 0xa5, hi: 0xa6}, + {value: 0x0024, lo: 0xa7, hi: 0xa7}, + {value: 0x0034, lo: 0xa8, hi: 0xa8}, + {value: 0x0024, lo: 0xa9, hi: 0xa9}, + {value: 0x0034, lo: 0xaa, hi: 0xaf}, + {value: 0x0024, lo: 0xb0, hi: 0xb0}, + // Block 0x67, offset 0x2d5 + {value: 0x0016, lo: 0x85, hi: 0x86}, + {value: 0x0012, lo: 0x87, hi: 0x89}, + {value: 0x9d52, lo: 0x8e, hi: 0x8e}, + {value: 0x1013, lo: 0xa0, hi: 0xaf}, + {value: 0x1012, lo: 0xb0, hi: 0xbf}, + // Block 0x68, offset 0x2da + {value: 0x0010, lo: 0x80, hi: 0x82}, + {value: 0x0716, lo: 0x83, hi: 0x84}, + {value: 0x0010, lo: 0x85, hi: 0x88}, + // Block 0x69, offset 0x2dd + {value: 0xa053, lo: 0xb6, hi: 0xb7}, + {value: 0xa353, lo: 0xb8, hi: 0xb9}, + {value: 0xa653, lo: 0xba, hi: 0xbb}, + {value: 0xa353, lo: 0xbc, hi: 0xbd}, + {value: 0xa053, lo: 0xbe, hi: 0xbf}, + // Block 0x6a, offset 0x2e2 + {value: 0x3013, lo: 0x80, hi: 0x8f}, + {value: 0x6553, lo: 0x90, hi: 0x9f}, + {value: 0xa953, lo: 0xa0, hi: 0xae}, + {value: 0x3012, lo: 0xb0, hi: 0xbf}, + // Block 0x6b, offset 0x2e6 + {value: 0x0117, lo: 0x80, hi: 0xa3}, + {value: 0x0012, lo: 0xa4, hi: 0xa4}, + {value: 0x0716, lo: 0xab, hi: 0xac}, + {value: 0x0316, lo: 0xad, hi: 0xae}, + {value: 0x0024, lo: 0xaf, hi: 0xb1}, + {value: 0x0117, lo: 0xb2, hi: 0xb3}, + // Block 0x6c, offset 0x2ec + {value: 0x6c52, lo: 0x80, hi: 0x9f}, + {value: 0x7052, lo: 0xa0, hi: 0xa5}, + {value: 0x7052, lo: 0xa7, hi: 0xa7}, + {value: 0x7052, lo: 0xad, hi: 0xad}, + {value: 0x0010, lo: 0xb0, hi: 0xbf}, + // Block 0x6d, offset 0x2f1 + {value: 0x0010, lo: 0x80, hi: 0xa7}, + {value: 0x0014, lo: 0xaf, hi: 0xaf}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0x6e, offset 0x2f4 + {value: 0x0010, lo: 0x80, hi: 0x96}, + {value: 0x0010, lo: 0xa0, hi: 0xa6}, + {value: 0x0010, lo: 0xa8, hi: 0xae}, + {value: 0x0010, lo: 0xb0, hi: 0xb6}, + {value: 0x0010, lo: 0xb8, hi: 0xbe}, + // Block 0x6f, offset 0x2f9 + {value: 0x0010, lo: 0x80, hi: 0x86}, + {value: 0x0010, lo: 0x88, hi: 0x8e}, + {value: 0x0010, lo: 0x90, hi: 0x96}, + {value: 0x0010, lo: 0x98, hi: 0x9e}, + {value: 0x0024, lo: 0xa0, hi: 0xbf}, + // Block 0x70, offset 0x2fe + {value: 0x0014, lo: 0xaf, hi: 0xaf}, + // Block 0x71, offset 0x2ff + {value: 0x0014, lo: 0x85, hi: 0x85}, + {value: 0x0034, lo: 0xaa, hi: 0xad}, + {value: 0x0030, lo: 0xae, hi: 0xaf}, + {value: 0x0004, lo: 0xb1, hi: 0xb5}, + {value: 0x0014, lo: 0xbb, hi: 0xbb}, + {value: 0x0010, lo: 0xbc, hi: 0xbc}, + // Block 0x72, offset 0x305 + {value: 0x0034, lo: 0x99, hi: 0x9a}, + {value: 0x0004, lo: 0x9b, hi: 0x9e}, + // Block 0x73, offset 0x307 + {value: 0x0004, lo: 0xbc, hi: 0xbe}, + // Block 0x74, offset 0x308 + {value: 0x0010, lo: 0x85, hi: 0xae}, + {value: 0x0010, lo: 0xb1, hi: 0xbf}, + // Block 0x75, offset 0x30a + {value: 0x0010, lo: 0x80, hi: 0x8e}, + {value: 0x0010, lo: 0xa0, hi: 0xba}, + // Block 0x76, offset 0x30c + {value: 0x0010, lo: 0x80, hi: 0x94}, + {value: 0x0014, lo: 0x95, hi: 0x95}, + {value: 0x0010, lo: 0x96, hi: 0xbf}, + // Block 0x77, offset 0x30f + {value: 0x0010, lo: 0x80, hi: 0x8c}, + // Block 0x78, offset 0x310 + {value: 0x0010, lo: 0x90, hi: 0xb7}, + {value: 0x0014, lo: 0xb8, hi: 0xbd}, + // Block 0x79, offset 0x312 + {value: 0x0010, lo: 0x80, hi: 0x8b}, + {value: 0x0014, lo: 0x8c, hi: 0x8c}, + {value: 0x0010, lo: 0x90, hi: 0xab}, + // Block 0x7a, offset 0x315 + {value: 0x0117, lo: 0x80, hi: 0xad}, + {value: 0x0010, lo: 0xae, hi: 0xae}, + {value: 0x0024, lo: 0xaf, hi: 0xaf}, + {value: 0x0014, lo: 0xb0, hi: 0xb2}, + {value: 0x0024, lo: 0xb4, hi: 0xbd}, + {value: 0x0014, lo: 0xbf, hi: 0xbf}, + // Block 0x7b, offset 0x31b + {value: 0x0117, lo: 0x80, hi: 0x9b}, + {value: 0x0015, lo: 0x9c, hi: 0x9d}, + {value: 0x0024, lo: 0x9e, hi: 0x9f}, + {value: 0x0010, lo: 0xa0, hi: 0xbf}, + // Block 0x7c, offset 0x31f + {value: 0x0010, lo: 0x80, hi: 0xaf}, + {value: 0x0024, lo: 0xb0, hi: 0xb1}, + // Block 0x7d, offset 0x321 + {value: 0x0004, lo: 0x80, hi: 0x96}, + {value: 0x0014, lo: 0x97, hi: 0xa1}, + {value: 0x0117, lo: 0xa2, hi: 0xaf}, + {value: 0x0012, lo: 0xb0, hi: 0xb1}, + {value: 0x0117, lo: 0xb2, hi: 0xbf}, + // Block 0x7e, offset 0x326 + {value: 0x0117, lo: 0x80, hi: 0xaf}, + {value: 0x0015, lo: 0xb0, hi: 0xb0}, + {value: 0x0012, lo: 0xb1, hi: 0xb8}, + {value: 0x0316, lo: 0xb9, hi: 0xba}, + {value: 0x0716, lo: 0xbb, hi: 0xbc}, + {value: 0x8453, lo: 0xbd, hi: 0xbd}, + {value: 0x0117, lo: 0xbe, hi: 0xbf}, + // Block 0x7f, offset 0x32d + {value: 0x0010, lo: 0xb7, hi: 0xb7}, + {value: 0x0015, lo: 0xb8, hi: 0xb9}, + {value: 0x0012, lo: 0xba, hi: 0xba}, + {value: 0x0010, lo: 0xbb, hi: 0xbf}, + // Block 0x80, offset 0x331 + {value: 0x0010, lo: 0x80, hi: 0x81}, + {value: 0x0014, lo: 0x82, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0x85}, + {value: 0x0034, lo: 0x86, hi: 0x86}, + {value: 0x0010, lo: 0x87, hi: 0x8a}, + {value: 0x0014, lo: 0x8b, hi: 0x8b}, + {value: 0x0010, lo: 0x8c, hi: 0xa4}, + {value: 0x0014, lo: 0xa5, hi: 0xa6}, + {value: 0x0010, lo: 0xa7, hi: 0xa7}, + // Block 0x81, offset 0x33a + {value: 0x0010, lo: 0x80, hi: 0xb3}, + // Block 0x82, offset 0x33b + {value: 0x0010, lo: 0x80, hi: 0x83}, + {value: 0x0034, lo: 0x84, hi: 0x84}, + {value: 0x0014, lo: 0x85, hi: 0x85}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0024, lo: 0xa0, hi: 0xb1}, + {value: 0x0010, lo: 0xb2, hi: 0xb7}, + {value: 0x0010, lo: 0xbb, hi: 0xbb}, + {value: 0x0010, lo: 0xbd, hi: 0xbd}, + // Block 0x83, offset 0x343 + {value: 0x0010, lo: 0x80, hi: 0xa5}, + {value: 0x0014, lo: 0xa6, hi: 0xaa}, + {value: 0x0034, lo: 0xab, hi: 0xad}, + {value: 0x0010, lo: 0xb0, hi: 0xbf}, + // Block 0x84, offset 0x347 + {value: 0x0010, lo: 0x80, hi: 0x86}, + {value: 0x0014, lo: 0x87, hi: 0x91}, + {value: 0x0010, lo: 0x92, hi: 0x92}, + {value: 0x0030, lo: 0x93, hi: 0x93}, + {value: 0x0010, lo: 0xa0, hi: 0xbc}, + // Block 0x85, offset 0x34c + {value: 0x0014, lo: 0x80, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0xb2}, + {value: 0x0034, lo: 0xb3, hi: 0xb3}, + {value: 0x0010, lo: 0xb4, hi: 0xb5}, + {value: 0x0014, lo: 0xb6, hi: 0xb9}, + {value: 0x0010, lo: 0xba, hi: 0xbb}, + {value: 0x0014, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0x86, offset 0x354 + {value: 0x0030, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x8f, hi: 0x8f}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0014, lo: 0xa5, hi: 0xa5}, + {value: 0x0004, lo: 0xa6, hi: 0xa6}, + {value: 0x0010, lo: 0xb0, hi: 0xb9}, + // Block 0x87, offset 0x35a + {value: 0x0010, lo: 0x80, hi: 0xa8}, + {value: 0x0014, lo: 0xa9, hi: 0xae}, + {value: 0x0010, lo: 0xaf, hi: 0xb0}, + {value: 0x0014, lo: 0xb1, hi: 0xb2}, + {value: 0x0010, lo: 0xb3, hi: 0xb4}, + {value: 0x0014, lo: 0xb5, hi: 0xb6}, + // Block 0x88, offset 0x360 + {value: 0x0010, lo: 0x80, hi: 0x82}, + {value: 0x0014, lo: 0x83, hi: 0x83}, + {value: 0x0010, lo: 0x84, hi: 0x8b}, + {value: 0x0014, lo: 0x8c, hi: 0x8c}, + {value: 0x0010, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0004, lo: 0xb0, hi: 0xb0}, + {value: 0x0010, lo: 0xbb, hi: 0xbb}, + {value: 0x0014, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbd}, + // Block 0x89, offset 0x36a + {value: 0x0024, lo: 0xb0, hi: 0xb0}, + {value: 0x0024, lo: 0xb2, hi: 0xb3}, + {value: 0x0034, lo: 0xb4, hi: 0xb4}, + {value: 0x0024, lo: 0xb7, hi: 0xb8}, + {value: 0x0024, lo: 0xbe, hi: 0xbf}, + // Block 0x8a, offset 0x36f + {value: 0x0024, lo: 0x81, hi: 0x81}, + {value: 0x0004, lo: 0x9d, hi: 0x9d}, + {value: 0x0010, lo: 0xa0, hi: 0xab}, + {value: 0x0014, lo: 0xac, hi: 0xad}, + {value: 0x0010, lo: 0xae, hi: 0xaf}, + {value: 0x0010, lo: 0xb2, hi: 0xb2}, + {value: 0x0014, lo: 0xb3, hi: 0xb4}, + {value: 0x0010, lo: 0xb5, hi: 0xb5}, + {value: 0x0034, lo: 0xb6, hi: 0xb6}, + // Block 0x8b, offset 0x378 + {value: 0x0010, lo: 0x81, hi: 0x86}, + {value: 0x0010, lo: 0x89, hi: 0x8e}, + {value: 0x0010, lo: 0x91, hi: 0x96}, + {value: 0x0010, lo: 0xa0, hi: 0xa6}, + {value: 0x0010, lo: 0xa8, hi: 0xae}, + {value: 0x0012, lo: 0xb0, hi: 0xbf}, + // Block 0x8c, offset 0x37e + {value: 0x0012, lo: 0x80, hi: 0x92}, + {value: 0xac52, lo: 0x93, hi: 0x93}, + {value: 0x0012, lo: 0x94, hi: 0x9a}, + {value: 0x0014, lo: 0x9b, hi: 0x9b}, + {value: 0x0015, lo: 0x9c, hi: 0x9f}, + {value: 0x0012, lo: 0xa0, hi: 0xa5}, + {value: 0x74d2, lo: 0xb0, hi: 0xbf}, + // Block 0x8d, offset 0x385 + {value: 0x78d2, lo: 0x80, hi: 0x8f}, + {value: 0x7cd2, lo: 0x90, hi: 0x9f}, + {value: 0x80d2, lo: 0xa0, hi: 0xaf}, + {value: 0x7cd2, lo: 0xb0, hi: 0xbf}, + // Block 0x8e, offset 0x389 + {value: 0x0010, lo: 0x80, hi: 0xa4}, + {value: 0x0014, lo: 0xa5, hi: 0xa5}, + {value: 0x0010, lo: 0xa6, hi: 0xa7}, + {value: 0x0014, lo: 0xa8, hi: 0xa8}, + {value: 0x0010, lo: 0xa9, hi: 0xaa}, + {value: 0x0010, lo: 0xac, hi: 0xac}, + {value: 0x0034, lo: 0xad, hi: 0xad}, + {value: 0x0010, lo: 0xb0, hi: 0xb9}, + // Block 0x8f, offset 0x391 + {value: 0x0010, lo: 0x80, hi: 0xa3}, + {value: 0x0010, lo: 0xb0, hi: 0xbf}, + // Block 0x90, offset 0x393 + {value: 0x0010, lo: 0x80, hi: 0x86}, + {value: 0x0010, lo: 0x8b, hi: 0xbb}, + // Block 0x91, offset 0x395 + {value: 0x0010, lo: 0x80, hi: 0x81}, + {value: 0x0010, lo: 0x83, hi: 0x84}, + {value: 0x0010, lo: 0x86, hi: 0xbf}, + // Block 0x92, offset 0x398 + {value: 0x0010, lo: 0x80, hi: 0xb1}, + {value: 0x0004, lo: 0xb2, hi: 0xbf}, + // Block 0x93, offset 0x39a + {value: 0x0004, lo: 0x80, hi: 0x81}, + {value: 0x0010, lo: 0x93, hi: 0xbf}, + // Block 0x94, offset 0x39c + {value: 0x0010, lo: 0x80, hi: 0xbd}, + // Block 0x95, offset 0x39d + {value: 0x0010, lo: 0x90, hi: 0xbf}, + // Block 0x96, offset 0x39e + {value: 0x0010, lo: 0x80, hi: 0x8f}, + {value: 0x0010, lo: 0x92, hi: 0xbf}, + // Block 0x97, offset 0x3a0 + {value: 0x0010, lo: 0x80, hi: 0x87}, + {value: 0x0010, lo: 0xb0, hi: 0xbb}, + // Block 0x98, offset 0x3a2 + {value: 0x0014, lo: 0x80, hi: 0x8f}, + {value: 0x0054, lo: 0x93, hi: 0x93}, + {value: 0x0024, lo: 0xa0, hi: 0xa6}, + {value: 0x0034, lo: 0xa7, hi: 0xad}, + {value: 0x0024, lo: 0xae, hi: 0xaf}, + {value: 0x0010, lo: 0xb3, hi: 0xb4}, + // Block 0x99, offset 0x3a8 + {value: 0x0010, lo: 0x8d, hi: 0x8f}, + {value: 0x0054, lo: 0x92, hi: 0x92}, + {value: 0x0054, lo: 0x95, hi: 0x95}, + {value: 0x0010, lo: 0xb0, hi: 0xb4}, + {value: 0x0010, lo: 0xb6, hi: 0xbf}, + // Block 0x9a, offset 0x3ad + {value: 0x0010, lo: 0x80, hi: 0xbc}, + {value: 0x0014, lo: 0xbf, hi: 0xbf}, + // Block 0x9b, offset 0x3af + {value: 0x0054, lo: 0x87, hi: 0x87}, + {value: 0x0054, lo: 0x8e, hi: 0x8e}, + {value: 0x0054, lo: 0x9a, hi: 0x9a}, + {value: 0x5f53, lo: 0xa1, hi: 0xba}, + {value: 0x0004, lo: 0xbe, hi: 0xbe}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0x9c, offset 0x3b5 + {value: 0x0004, lo: 0x80, hi: 0x80}, + {value: 0x5f52, lo: 0x81, hi: 0x9a}, + {value: 0x0004, lo: 0xb0, hi: 0xb0}, + // Block 0x9d, offset 0x3b8 + {value: 0x0014, lo: 0x9e, hi: 0x9f}, + {value: 0x0010, lo: 0xa0, hi: 0xbe}, + // Block 0x9e, offset 0x3ba + {value: 0x0010, lo: 0x82, hi: 0x87}, + {value: 0x0010, lo: 0x8a, hi: 0x8f}, + {value: 0x0010, lo: 0x92, hi: 0x97}, + {value: 0x0010, lo: 0x9a, hi: 0x9c}, + {value: 0x0004, lo: 0xa3, hi: 0xa3}, + {value: 0x0014, lo: 0xb9, hi: 0xbb}, + // Block 0x9f, offset 0x3c0 + {value: 0x0010, lo: 0x80, hi: 0x8b}, + {value: 0x0010, lo: 0x8d, hi: 0xa6}, + {value: 0x0010, lo: 0xa8, hi: 0xba}, + {value: 0x0010, lo: 0xbc, hi: 0xbd}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0xa0, offset 0x3c5 + {value: 0x0010, lo: 0x80, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0x9d}, + // Block 0xa1, offset 0x3c7 + {value: 0x0010, lo: 0x80, hi: 0xba}, + // Block 0xa2, offset 0x3c8 + {value: 0x0010, lo: 0x80, hi: 0xb4}, + // Block 0xa3, offset 0x3c9 + {value: 0x0034, lo: 0xbd, hi: 0xbd}, + // Block 0xa4, offset 0x3ca + {value: 0x0010, lo: 0x80, hi: 0x9c}, + {value: 0x0010, lo: 0xa0, hi: 0xbf}, + // Block 0xa5, offset 0x3cc + {value: 0x0010, lo: 0x80, hi: 0x90}, + {value: 0x0034, lo: 0xa0, hi: 0xa0}, + // Block 0xa6, offset 0x3ce + {value: 0x0010, lo: 0x80, hi: 0x9f}, + {value: 0x0010, lo: 0xad, hi: 0xbf}, + // Block 0xa7, offset 0x3d0 + {value: 0x0010, lo: 0x80, hi: 0x8a}, + {value: 0x0010, lo: 0x90, hi: 0xb5}, + {value: 0x0024, lo: 0xb6, hi: 0xba}, + // Block 0xa8, offset 0x3d3 + {value: 0x0010, lo: 0x80, hi: 0x9d}, + {value: 0x0010, lo: 0xa0, hi: 0xbf}, + // Block 0xa9, offset 0x3d5 + {value: 0x0010, lo: 0x80, hi: 0x83}, + {value: 0x0010, lo: 0x88, hi: 0x8f}, + {value: 0x0010, lo: 0x91, hi: 0x95}, + // Block 0xaa, offset 0x3d8 + {value: 0x2813, lo: 0x80, hi: 0x87}, + {value: 0x3813, lo: 0x88, hi: 0x8f}, + {value: 0x2813, lo: 0x90, hi: 0x97}, + {value: 0xaf53, lo: 0x98, hi: 0x9f}, + {value: 0xb253, lo: 0xa0, hi: 0xa7}, + {value: 0x2812, lo: 0xa8, hi: 0xaf}, + {value: 0x3812, lo: 0xb0, hi: 0xb7}, + {value: 0x2812, lo: 0xb8, hi: 0xbf}, + // Block 0xab, offset 0x3e0 + {value: 0xaf52, lo: 0x80, hi: 0x87}, + {value: 0xb252, lo: 0x88, hi: 0x8f}, + {value: 0x0010, lo: 0x90, hi: 0xbf}, + // Block 0xac, offset 0x3e3 + {value: 0x0010, lo: 0x80, hi: 0x9d}, + {value: 0x0010, lo: 0xa0, hi: 0xa9}, + {value: 0xb253, lo: 0xb0, hi: 0xb7}, + {value: 0xaf53, lo: 0xb8, hi: 0xbf}, + // Block 0xad, offset 0x3e7 + {value: 0x2813, lo: 0x80, hi: 0x87}, + {value: 0x3813, lo: 0x88, hi: 0x8f}, + {value: 0x2813, lo: 0x90, hi: 0x93}, + {value: 0xb252, lo: 0x98, hi: 0x9f}, + {value: 0xaf52, lo: 0xa0, hi: 0xa7}, + {value: 0x2812, lo: 0xa8, hi: 0xaf}, + {value: 0x3812, lo: 0xb0, hi: 0xb7}, + {value: 0x2812, lo: 0xb8, hi: 0xbb}, + // Block 0xae, offset 0x3ef + {value: 0x0010, lo: 0x80, hi: 0xa7}, + {value: 0x0010, lo: 0xb0, hi: 0xbf}, + // Block 0xaf, offset 0x3f1 + {value: 0x0010, lo: 0x80, hi: 0xa3}, + // Block 0xb0, offset 0x3f2 + {value: 0x0010, lo: 0x80, hi: 0xb6}, + // Block 0xb1, offset 0x3f3 + {value: 0x0010, lo: 0x80, hi: 0x95}, + {value: 0x0010, lo: 0xa0, hi: 0xa7}, + // Block 0xb2, offset 0x3f5 + {value: 0x0010, lo: 0x80, hi: 0x85}, + {value: 0x0010, lo: 0x88, hi: 0x88}, + {value: 0x0010, lo: 0x8a, hi: 0xb5}, + {value: 0x0010, lo: 0xb7, hi: 0xb8}, + {value: 0x0010, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0xb3, offset 0x3fb + {value: 0x0010, lo: 0x80, hi: 0x95}, + {value: 0x0010, lo: 0xa0, hi: 0xb6}, + // Block 0xb4, offset 0x3fd + {value: 0x0010, lo: 0x80, hi: 0x9e}, + // Block 0xb5, offset 0x3fe + {value: 0x0010, lo: 0xa0, hi: 0xb2}, + {value: 0x0010, lo: 0xb4, hi: 0xb5}, + // Block 0xb6, offset 0x400 + {value: 0x0010, lo: 0x80, hi: 0x95}, + {value: 0x0010, lo: 0xa0, hi: 0xb9}, + // Block 0xb7, offset 0x402 + {value: 0x0010, lo: 0x80, hi: 0xb7}, + {value: 0x0010, lo: 0xbe, hi: 0xbf}, + // Block 0xb8, offset 0x404 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x83}, + {value: 0x0014, lo: 0x85, hi: 0x86}, + {value: 0x0014, lo: 0x8c, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0014, lo: 0x8e, hi: 0x8e}, + {value: 0x0024, lo: 0x8f, hi: 0x8f}, + {value: 0x0010, lo: 0x90, hi: 0x93}, + {value: 0x0010, lo: 0x95, hi: 0x97}, + {value: 0x0010, lo: 0x99, hi: 0xb3}, + {value: 0x0024, lo: 0xb8, hi: 0xb8}, + {value: 0x0034, lo: 0xb9, hi: 0xba}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0xb9, offset 0x411 + {value: 0x0010, lo: 0xa0, hi: 0xbc}, + // Block 0xba, offset 0x412 + {value: 0x0010, lo: 0x80, hi: 0x9c}, + // Block 0xbb, offset 0x413 + {value: 0x0010, lo: 0x80, hi: 0x87}, + {value: 0x0010, lo: 0x89, hi: 0xa4}, + {value: 0x0024, lo: 0xa5, hi: 0xa5}, + {value: 0x0034, lo: 0xa6, hi: 0xa6}, + // Block 0xbc, offset 0x417 + {value: 0x0010, lo: 0x80, hi: 0x95}, + {value: 0x0010, lo: 0xa0, hi: 0xb2}, + // Block 0xbd, offset 0x419 + {value: 0x0010, lo: 0x80, hi: 0x91}, + // Block 0xbe, offset 0x41a + {value: 0x0010, lo: 0x80, hi: 0x88}, + // Block 0xbf, offset 0x41b + {value: 0x5653, lo: 0x80, hi: 0xb2}, + // Block 0xc0, offset 0x41c + {value: 0x5652, lo: 0x80, hi: 0xb2}, + // Block 0xc1, offset 0x41d + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0xb7}, + {value: 0x0014, lo: 0xb8, hi: 0xbf}, + // Block 0xc2, offset 0x421 + {value: 0x0014, lo: 0x80, hi: 0x85}, + {value: 0x0034, lo: 0x86, hi: 0x86}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0xc3, offset 0x425 + {value: 0x0014, lo: 0x80, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0xb2}, + {value: 0x0014, lo: 0xb3, hi: 0xb6}, + {value: 0x0010, lo: 0xb7, hi: 0xb8}, + {value: 0x0034, lo: 0xb9, hi: 0xba}, + {value: 0x0014, lo: 0xbd, hi: 0xbd}, + // Block 0xc4, offset 0x42b + {value: 0x0010, lo: 0x90, hi: 0xa8}, + {value: 0x0010, lo: 0xb0, hi: 0xb9}, + // Block 0xc5, offset 0x42d + {value: 0x0024, lo: 0x80, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0xa6}, + {value: 0x0014, lo: 0xa7, hi: 0xab}, + {value: 0x0010, lo: 0xac, hi: 0xac}, + {value: 0x0014, lo: 0xad, hi: 0xb2}, + {value: 0x0034, lo: 0xb3, hi: 0xb4}, + {value: 0x0010, lo: 0xb6, hi: 0xbf}, + // Block 0xc6, offset 0x434 + {value: 0x0010, lo: 0x90, hi: 0xb2}, + {value: 0x0034, lo: 0xb3, hi: 0xb3}, + {value: 0x0010, lo: 0xb6, hi: 0xb6}, + // Block 0xc7, offset 0x437 + {value: 0x0014, lo: 0x80, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0xb5}, + {value: 0x0014, lo: 0xb6, hi: 0xbe}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0xc8, offset 0x43b + {value: 0x0030, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x81, hi: 0x84}, + {value: 0x0034, lo: 0x8a, hi: 0x8a}, + {value: 0x0014, lo: 0x8b, hi: 0x8c}, + {value: 0x0010, lo: 0x90, hi: 0x9a}, + {value: 0x0010, lo: 0x9c, hi: 0x9c}, + // Block 0xc9, offset 0x441 + {value: 0x0010, lo: 0x80, hi: 0x91}, + {value: 0x0010, lo: 0x93, hi: 0xae}, + {value: 0x0014, lo: 0xaf, hi: 0xb1}, + {value: 0x0010, lo: 0xb2, hi: 0xb3}, + {value: 0x0014, lo: 0xb4, hi: 0xb4}, + {value: 0x0030, lo: 0xb5, hi: 0xb5}, + {value: 0x0034, lo: 0xb6, hi: 0xb6}, + {value: 0x0014, lo: 0xb7, hi: 0xb7}, + {value: 0x0014, lo: 0xbe, hi: 0xbe}, + // Block 0xca, offset 0x44a + {value: 0x0010, lo: 0x80, hi: 0x86}, + {value: 0x0010, lo: 0x88, hi: 0x88}, + {value: 0x0010, lo: 0x8a, hi: 0x8d}, + {value: 0x0010, lo: 0x8f, hi: 0x9d}, + {value: 0x0010, lo: 0x9f, hi: 0xa8}, + {value: 0x0010, lo: 0xb0, hi: 0xbf}, + // Block 0xcb, offset 0x450 + {value: 0x0010, lo: 0x80, hi: 0x9e}, + {value: 0x0014, lo: 0x9f, hi: 0x9f}, + {value: 0x0010, lo: 0xa0, hi: 0xa2}, + {value: 0x0014, lo: 0xa3, hi: 0xa8}, + {value: 0x0034, lo: 0xa9, hi: 0xaa}, + {value: 0x0010, lo: 0xb0, hi: 0xb9}, + // Block 0xcc, offset 0x456 + {value: 0x0014, lo: 0x80, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8c}, + {value: 0x0010, lo: 0x8f, hi: 0x90}, + {value: 0x0010, lo: 0x93, hi: 0xa8}, + {value: 0x0010, lo: 0xaa, hi: 0xb0}, + {value: 0x0010, lo: 0xb2, hi: 0xb3}, + {value: 0x0010, lo: 0xb5, hi: 0xb9}, + {value: 0x0034, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0xcd, offset 0x460 + {value: 0x0014, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x81, hi: 0x84}, + {value: 0x0010, lo: 0x87, hi: 0x88}, + {value: 0x0010, lo: 0x8b, hi: 0x8c}, + {value: 0x0030, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0x90}, + {value: 0x0010, lo: 0x97, hi: 0x97}, + {value: 0x0010, lo: 0x9d, hi: 0xa3}, + {value: 0x0024, lo: 0xa6, hi: 0xac}, + {value: 0x0024, lo: 0xb0, hi: 0xb4}, + // Block 0xce, offset 0x46a + {value: 0x0010, lo: 0x80, hi: 0xb7}, + {value: 0x0014, lo: 0xb8, hi: 0xbf}, + // Block 0xcf, offset 0x46c + {value: 0x0010, lo: 0x80, hi: 0x81}, + {value: 0x0034, lo: 0x82, hi: 0x82}, + {value: 0x0014, lo: 0x83, hi: 0x84}, + {value: 0x0010, lo: 0x85, hi: 0x85}, + {value: 0x0034, lo: 0x86, hi: 0x86}, + {value: 0x0010, lo: 0x87, hi: 0x8a}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + // Block 0xd0, offset 0x473 + {value: 0x0010, lo: 0x80, hi: 0xb2}, + {value: 0x0014, lo: 0xb3, hi: 0xb8}, + {value: 0x0010, lo: 0xb9, hi: 0xb9}, + {value: 0x0014, lo: 0xba, hi: 0xba}, + {value: 0x0010, lo: 0xbb, hi: 0xbe}, + {value: 0x0014, lo: 0xbf, hi: 0xbf}, + // Block 0xd1, offset 0x479 + {value: 0x0014, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x81, hi: 0x81}, + {value: 0x0034, lo: 0x82, hi: 0x83}, + {value: 0x0010, lo: 0x84, hi: 0x85}, + {value: 0x0010, lo: 0x87, hi: 0x87}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + // Block 0xd2, offset 0x47f + {value: 0x0010, lo: 0x80, hi: 0xb1}, + {value: 0x0014, lo: 0xb2, hi: 0xb5}, + {value: 0x0010, lo: 0xb8, hi: 0xbb}, + {value: 0x0014, lo: 0xbc, hi: 0xbd}, + {value: 0x0010, lo: 0xbe, hi: 0xbe}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0xd3, offset 0x485 + {value: 0x0034, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x98, hi: 0x9b}, + {value: 0x0014, lo: 0x9c, hi: 0x9d}, + // Block 0xd4, offset 0x488 + {value: 0x0010, lo: 0x80, hi: 0xb2}, + {value: 0x0014, lo: 0xb3, hi: 0xba}, + {value: 0x0010, lo: 0xbb, hi: 0xbc}, + {value: 0x0014, lo: 0xbd, hi: 0xbd}, + {value: 0x0010, lo: 0xbe, hi: 0xbe}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0xd5, offset 0x48e + {value: 0x0014, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x84, hi: 0x84}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + // Block 0xd6, offset 0x491 + {value: 0x0010, lo: 0x80, hi: 0xaa}, + {value: 0x0014, lo: 0xab, hi: 0xab}, + {value: 0x0010, lo: 0xac, hi: 0xac}, + {value: 0x0014, lo: 0xad, hi: 0xad}, + {value: 0x0010, lo: 0xae, hi: 0xaf}, + {value: 0x0014, lo: 0xb0, hi: 0xb5}, + {value: 0x0030, lo: 0xb6, hi: 0xb6}, + {value: 0x0034, lo: 0xb7, hi: 0xb7}, + // Block 0xd7, offset 0x499 + {value: 0x0010, lo: 0x80, hi: 0x89}, + // Block 0xd8, offset 0x49a + {value: 0x0014, lo: 0x9d, hi: 0x9f}, + {value: 0x0010, lo: 0xa0, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa5}, + {value: 0x0010, lo: 0xa6, hi: 0xa6}, + {value: 0x0014, lo: 0xa7, hi: 0xaa}, + {value: 0x0034, lo: 0xab, hi: 0xab}, + {value: 0x0010, lo: 0xb0, hi: 0xb9}, + // Block 0xd9, offset 0x4a1 + {value: 0x5f53, lo: 0xa0, hi: 0xbf}, + // Block 0xda, offset 0x4a2 + {value: 0x5f52, lo: 0x80, hi: 0x9f}, + {value: 0x0010, lo: 0xa0, hi: 0xa9}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0xdb, offset 0x4a5 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x86}, + {value: 0x0010, lo: 0x87, hi: 0x88}, + {value: 0x0014, lo: 0x89, hi: 0x8a}, + {value: 0x0010, lo: 0x8b, hi: 0xb2}, + {value: 0x0014, lo: 0xb3, hi: 0xb3}, + {value: 0x0034, lo: 0xb4, hi: 0xb4}, + {value: 0x0014, lo: 0xb5, hi: 0xb8}, + {value: 0x0010, lo: 0xb9, hi: 0xba}, + {value: 0x0014, lo: 0xbb, hi: 0xbe}, + // Block 0xdc, offset 0x4af + {value: 0x0034, lo: 0x87, hi: 0x87}, + {value: 0x0010, lo: 0x90, hi: 0x90}, + {value: 0x0014, lo: 0x91, hi: 0x96}, + {value: 0x0010, lo: 0x97, hi: 0x98}, + {value: 0x0014, lo: 0x99, hi: 0x9b}, + {value: 0x0010, lo: 0x9c, hi: 0xbf}, + // Block 0xdd, offset 0x4b5 + {value: 0x0010, lo: 0x80, hi: 0x83}, + {value: 0x0010, lo: 0x86, hi: 0x89}, + {value: 0x0014, lo: 0x8a, hi: 0x96}, + {value: 0x0010, lo: 0x97, hi: 0x97}, + {value: 0x0014, lo: 0x98, hi: 0x98}, + {value: 0x0034, lo: 0x99, hi: 0x99}, + // Block 0xde, offset 0x4bb + {value: 0x0010, lo: 0x80, hi: 0xb8}, + // Block 0xdf, offset 0x4bc + {value: 0x0010, lo: 0x80, hi: 0x88}, + {value: 0x0010, lo: 0x8a, hi: 0xaf}, + {value: 0x0014, lo: 0xb0, hi: 0xb6}, + {value: 0x0014, lo: 0xb8, hi: 0xbd}, + {value: 0x0010, lo: 0xbe, hi: 0xbe}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0xe0, offset 0x4c2 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0010, lo: 0xb2, hi: 0xbf}, + // Block 0xe1, offset 0x4c5 + {value: 0x0010, lo: 0x80, hi: 0x8f}, + {value: 0x0014, lo: 0x92, hi: 0xa7}, + {value: 0x0010, lo: 0xa9, hi: 0xa9}, + {value: 0x0014, lo: 0xaa, hi: 0xb0}, + {value: 0x0010, lo: 0xb1, hi: 0xb1}, + {value: 0x0014, lo: 0xb2, hi: 0xb3}, + {value: 0x0010, lo: 0xb4, hi: 0xb4}, + {value: 0x0014, lo: 0xb5, hi: 0xb6}, + // Block 0xe2, offset 0x4cd + {value: 0x0010, lo: 0x80, hi: 0x86}, + {value: 0x0010, lo: 0x88, hi: 0x89}, + {value: 0x0010, lo: 0x8b, hi: 0xb0}, + {value: 0x0014, lo: 0xb1, hi: 0xb6}, + {value: 0x0014, lo: 0xba, hi: 0xba}, + {value: 0x0014, lo: 0xbc, hi: 0xbd}, + {value: 0x0014, lo: 0xbf, hi: 0xbf}, + // Block 0xe3, offset 0x4d4 + {value: 0x0014, lo: 0x80, hi: 0x81}, + {value: 0x0034, lo: 0x82, hi: 0x82}, + {value: 0x0014, lo: 0x83, hi: 0x83}, + {value: 0x0034, lo: 0x84, hi: 0x85}, + {value: 0x0010, lo: 0x86, hi: 0x86}, + {value: 0x0014, lo: 0x87, hi: 0x87}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + // Block 0xe4, offset 0x4db + {value: 0x0010, lo: 0x80, hi: 0x99}, + // Block 0xe5, offset 0x4dc + {value: 0x0010, lo: 0x80, hi: 0xae}, + // Block 0xe6, offset 0x4dd + {value: 0x0010, lo: 0x80, hi: 0x83}, + // Block 0xe7, offset 0x4de + {value: 0x0010, lo: 0x80, hi: 0x86}, + // Block 0xe8, offset 0x4df + {value: 0x0010, lo: 0x80, hi: 0x9e}, + {value: 0x0010, lo: 0xa0, hi: 0xa9}, + // Block 0xe9, offset 0x4e1 + {value: 0x0010, lo: 0x90, hi: 0xad}, + {value: 0x0034, lo: 0xb0, hi: 0xb4}, + // Block 0xea, offset 0x4e3 + {value: 0x0010, lo: 0x80, hi: 0xaf}, + {value: 0x0024, lo: 0xb0, hi: 0xb6}, + // Block 0xeb, offset 0x4e5 + {value: 0x0014, lo: 0x80, hi: 0x83}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0010, lo: 0xa3, hi: 0xb7}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0xec, offset 0x4e9 + {value: 0x0010, lo: 0x80, hi: 0x8f}, + // Block 0xed, offset 0x4ea + {value: 0x0010, lo: 0x80, hi: 0x84}, + {value: 0x0010, lo: 0x90, hi: 0xbe}, + // Block 0xee, offset 0x4ec + {value: 0x0014, lo: 0x8f, hi: 0x9f}, + // Block 0xef, offset 0x4ed + {value: 0x0014, lo: 0xa0, hi: 0xa1}, + // Block 0xf0, offset 0x4ee + {value: 0x0010, lo: 0x80, hi: 0xaa}, + {value: 0x0010, lo: 0xb0, hi: 0xbc}, + // Block 0xf1, offset 0x4f0 + {value: 0x0010, lo: 0x80, hi: 0x88}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0014, lo: 0x9d, hi: 0x9d}, + {value: 0x0034, lo: 0x9e, hi: 0x9e}, + {value: 0x0014, lo: 0xa0, hi: 0xa3}, + // Block 0xf2, offset 0x4f5 + {value: 0x0030, lo: 0xa5, hi: 0xa6}, + {value: 0x0034, lo: 0xa7, hi: 0xa9}, + {value: 0x0030, lo: 0xad, hi: 0xb2}, + {value: 0x0014, lo: 0xb3, hi: 0xba}, + {value: 0x0034, lo: 0xbb, hi: 0xbf}, + // Block 0xf3, offset 0x4fa + {value: 0x0034, lo: 0x80, hi: 0x82}, + {value: 0x0024, lo: 0x85, hi: 0x89}, + {value: 0x0034, lo: 0x8a, hi: 0x8b}, + {value: 0x0024, lo: 0xaa, hi: 0xad}, + // Block 0xf4, offset 0x4fe + {value: 0x0024, lo: 0x82, hi: 0x84}, + // Block 0xf5, offset 0x4ff + {value: 0x0013, lo: 0x80, hi: 0x99}, + {value: 0x0012, lo: 0x9a, hi: 0xb3}, + {value: 0x0013, lo: 0xb4, hi: 0xbf}, + // Block 0xf6, offset 0x502 + {value: 0x0013, lo: 0x80, hi: 0x8d}, + {value: 0x0012, lo: 0x8e, hi: 0x94}, + {value: 0x0012, lo: 0x96, hi: 0xa7}, + {value: 0x0013, lo: 0xa8, hi: 0xbf}, + // Block 0xf7, offset 0x506 + {value: 0x0013, lo: 0x80, hi: 0x81}, + {value: 0x0012, lo: 0x82, hi: 0x9b}, + {value: 0x0013, lo: 0x9c, hi: 0x9c}, + {value: 0x0013, lo: 0x9e, hi: 0x9f}, + {value: 0x0013, lo: 0xa2, hi: 0xa2}, + {value: 0x0013, lo: 0xa5, hi: 0xa6}, + {value: 0x0013, lo: 0xa9, hi: 0xac}, + {value: 0x0013, lo: 0xae, hi: 0xb5}, + {value: 0x0012, lo: 0xb6, hi: 0xb9}, + {value: 0x0012, lo: 0xbb, hi: 0xbb}, + {value: 0x0012, lo: 0xbd, hi: 0xbf}, + // Block 0xf8, offset 0x511 + {value: 0x0012, lo: 0x80, hi: 0x83}, + {value: 0x0012, lo: 0x85, hi: 0x8f}, + {value: 0x0013, lo: 0x90, hi: 0xa9}, + {value: 0x0012, lo: 0xaa, hi: 0xbf}, + // Block 0xf9, offset 0x515 + {value: 0x0012, lo: 0x80, hi: 0x83}, + {value: 0x0013, lo: 0x84, hi: 0x85}, + {value: 0x0013, lo: 0x87, hi: 0x8a}, + {value: 0x0013, lo: 0x8d, hi: 0x94}, + {value: 0x0013, lo: 0x96, hi: 0x9c}, + {value: 0x0012, lo: 0x9e, hi: 0xb7}, + {value: 0x0013, lo: 0xb8, hi: 0xb9}, + {value: 0x0013, lo: 0xbb, hi: 0xbe}, + // Block 0xfa, offset 0x51d + {value: 0x0013, lo: 0x80, hi: 0x84}, + {value: 0x0013, lo: 0x86, hi: 0x86}, + {value: 0x0013, lo: 0x8a, hi: 0x90}, + {value: 0x0012, lo: 0x92, hi: 0xab}, + {value: 0x0013, lo: 0xac, hi: 0xbf}, + // Block 0xfb, offset 0x522 + {value: 0x0013, lo: 0x80, hi: 0x85}, + {value: 0x0012, lo: 0x86, hi: 0x9f}, + {value: 0x0013, lo: 0xa0, hi: 0xb9}, + {value: 0x0012, lo: 0xba, hi: 0xbf}, + // Block 0xfc, offset 0x526 + {value: 0x0012, lo: 0x80, hi: 0x93}, + {value: 0x0013, lo: 0x94, hi: 0xad}, + {value: 0x0012, lo: 0xae, hi: 0xbf}, + // Block 0xfd, offset 0x529 + {value: 0x0012, lo: 0x80, hi: 0x87}, + {value: 0x0013, lo: 0x88, hi: 0xa1}, + {value: 0x0012, lo: 0xa2, hi: 0xbb}, + {value: 0x0013, lo: 0xbc, hi: 0xbf}, + // Block 0xfe, offset 0x52d + {value: 0x0013, lo: 0x80, hi: 0x95}, + {value: 0x0012, lo: 0x96, hi: 0xaf}, + {value: 0x0013, lo: 0xb0, hi: 0xbf}, + // Block 0xff, offset 0x530 + {value: 0x0013, lo: 0x80, hi: 0x89}, + {value: 0x0012, lo: 0x8a, hi: 0xa5}, + {value: 0x0013, lo: 0xa8, hi: 0xbf}, + // Block 0x100, offset 0x533 + {value: 0x0013, lo: 0x80, hi: 0x80}, + {value: 0x0012, lo: 0x82, hi: 0x9a}, + {value: 0x0012, lo: 0x9c, hi: 0xa1}, + {value: 0x0013, lo: 0xa2, hi: 0xba}, + {value: 0x0012, lo: 0xbc, hi: 0xbf}, + // Block 0x101, offset 0x538 + {value: 0x0012, lo: 0x80, hi: 0x94}, + {value: 0x0012, lo: 0x96, hi: 0x9b}, + {value: 0x0013, lo: 0x9c, hi: 0xb4}, + {value: 0x0012, lo: 0xb6, hi: 0xbf}, + // Block 0x102, offset 0x53c + {value: 0x0012, lo: 0x80, hi: 0x8e}, + {value: 0x0012, lo: 0x90, hi: 0x95}, + {value: 0x0013, lo: 0x96, hi: 0xae}, + {value: 0x0012, lo: 0xb0, hi: 0xbf}, + // Block 0x103, offset 0x540 + {value: 0x0012, lo: 0x80, hi: 0x88}, + {value: 0x0012, lo: 0x8a, hi: 0x8f}, + {value: 0x0013, lo: 0x90, hi: 0xa8}, + {value: 0x0012, lo: 0xaa, hi: 0xbf}, + // Block 0x104, offset 0x544 + {value: 0x0012, lo: 0x80, hi: 0x82}, + {value: 0x0012, lo: 0x84, hi: 0x89}, + {value: 0x0017, lo: 0x8a, hi: 0x8b}, + {value: 0x0010, lo: 0x8e, hi: 0xbf}, + // Block 0x105, offset 0x548 + {value: 0x0014, lo: 0x80, hi: 0xb6}, + {value: 0x0014, lo: 0xbb, hi: 0xbf}, + // Block 0x106, offset 0x54a + {value: 0x0014, lo: 0x80, hi: 0xac}, + {value: 0x0014, lo: 0xb5, hi: 0xb5}, + // Block 0x107, offset 0x54c + {value: 0x0014, lo: 0x84, hi: 0x84}, + {value: 0x0014, lo: 0x9b, hi: 0x9f}, + {value: 0x0014, lo: 0xa1, hi: 0xaf}, + // Block 0x108, offset 0x54f + {value: 0x0024, lo: 0x80, hi: 0x86}, + {value: 0x0024, lo: 0x88, hi: 0x98}, + {value: 0x0024, lo: 0x9b, hi: 0xa1}, + {value: 0x0024, lo: 0xa3, hi: 0xa4}, + {value: 0x0024, lo: 0xa6, hi: 0xaa}, + // Block 0x109, offset 0x554 + {value: 0x0010, lo: 0x80, hi: 0x84}, + {value: 0x0034, lo: 0x90, hi: 0x96}, + // Block 0x10a, offset 0x556 + {value: 0xb552, lo: 0x80, hi: 0x81}, + {value: 0xb852, lo: 0x82, hi: 0x83}, + {value: 0x0024, lo: 0x84, hi: 0x89}, + {value: 0x0034, lo: 0x8a, hi: 0x8a}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + // Block 0x10b, offset 0x55b + {value: 0x0010, lo: 0x80, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x9f}, + {value: 0x0010, lo: 0xa1, hi: 0xa2}, + {value: 0x0010, lo: 0xa4, hi: 0xa4}, + {value: 0x0010, lo: 0xa7, hi: 0xa7}, + {value: 0x0010, lo: 0xa9, hi: 0xb2}, + {value: 0x0010, lo: 0xb4, hi: 0xb7}, + {value: 0x0010, lo: 0xb9, hi: 0xb9}, + {value: 0x0010, lo: 0xbb, hi: 0xbb}, + // Block 0x10c, offset 0x564 + {value: 0x0010, lo: 0x80, hi: 0x89}, + {value: 0x0010, lo: 0x8b, hi: 0x9b}, + {value: 0x0010, lo: 0xa1, hi: 0xa3}, + {value: 0x0010, lo: 0xa5, hi: 0xa9}, + {value: 0x0010, lo: 0xab, hi: 0xbb}, + // Block 0x10d, offset 0x569 + {value: 0x0013, lo: 0xb0, hi: 0xbf}, + // Block 0x10e, offset 0x56a + {value: 0x0013, lo: 0x80, hi: 0x89}, + {value: 0x0013, lo: 0x90, hi: 0xa9}, + {value: 0x0013, lo: 0xb0, hi: 0xbf}, + // Block 0x10f, offset 0x56d + {value: 0x0013, lo: 0x80, hi: 0x89}, + // Block 0x110, offset 0x56e + {value: 0x0004, lo: 0xbb, hi: 0xbf}, + // Block 0x111, offset 0x56f + {value: 0x0014, lo: 0x81, hi: 0x81}, + {value: 0x0014, lo: 0xa0, hi: 0xbf}, + // Block 0x112, offset 0x571 + {value: 0x0014, lo: 0x80, hi: 0xbf}, + // Block 0x113, offset 0x572 + {value: 0x0014, lo: 0x80, hi: 0xaf}, +} + +// Total table size 13961 bytes (13KiB); checksum: 4CC48DA3 diff --git a/vendor/golang.org/x/text/cases/tables10.0.0_test.go b/vendor/golang.org/x/text/cases/tables10.0.0_test.go new file mode 100644 index 0000000..c73c979 --- /dev/null +++ b/vendor/golang.org/x/text/cases/tables10.0.0_test.go @@ -0,0 +1,1160 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// +build go1.10 + +package cases + +var ( + caseIgnorable = map[rune]bool{ + 0x0027: true, + 0x002e: true, + 0x003a: true, + 0x00b7: true, + 0x0387: true, + 0x05f4: true, + 0x2018: true, + 0x2019: true, + 0x2024: true, + 0x2027: true, + 0xfe13: true, + 0xfe52: true, + 0xfe55: true, + 0xff07: true, + 0xff0e: true, + 0xff1a: true, + } + + special = map[rune]struct{ toLower, toTitle, toUpper string }{ + 0x00df: {"ß", "Ss", "SS"}, + 0x0130: {"i̇", "İ", "İ"}, + 0xfb00: {"ff", "Ff", "FF"}, + 0xfb01: {"fi", "Fi", "FI"}, + 0xfb02: {"fl", "Fl", "FL"}, + 0xfb03: {"ffi", "Ffi", "FFI"}, + 0xfb04: {"ffl", "Ffl", "FFL"}, + 0xfb05: {"ſt", "St", "ST"}, + 0xfb06: {"st", "St", "ST"}, + 0x0587: {"և", "Եւ", "ԵՒ"}, + 0xfb13: {"ﬓ", "Մն", "ՄՆ"}, + 0xfb14: {"ﬔ", "Մե", "ՄԵ"}, + 0xfb15: {"ﬕ", "Մի", "ՄԻ"}, + 0xfb16: {"ﬖ", "Վն", "ՎՆ"}, + 0xfb17: {"ﬗ", "Մխ", "ՄԽ"}, + 0x0149: {"ʼn", "ʼN", "ʼN"}, + 0x0390: {"ΐ", "Ϊ́", "Ϊ́"}, + 0x03b0: {"ΰ", "Ϋ́", "Ϋ́"}, + 0x01f0: {"ǰ", "J̌", "J̌"}, + 0x1e96: {"ẖ", "H̱", "H̱"}, + 0x1e97: {"ẗ", "T̈", "T̈"}, + 0x1e98: {"ẘ", "W̊", "W̊"}, + 0x1e99: {"ẙ", "Y̊", "Y̊"}, + 0x1e9a: {"ẚ", "Aʾ", "Aʾ"}, + 0x1f50: {"ὐ", "Υ̓", "Υ̓"}, + 0x1f52: {"ὒ", "Υ̓̀", "Υ̓̀"}, + 0x1f54: {"ὔ", "Υ̓́", "Υ̓́"}, + 0x1f56: {"ὖ", "Υ̓͂", "Υ̓͂"}, + 0x1fb6: {"ᾶ", "Α͂", "Α͂"}, + 0x1fc6: {"ῆ", "Η͂", "Η͂"}, + 0x1fd2: {"ῒ", "Ϊ̀", "Ϊ̀"}, + 0x1fd3: {"ΐ", "Ϊ́", "Ϊ́"}, + 0x1fd6: {"ῖ", "Ι͂", "Ι͂"}, + 0x1fd7: {"ῗ", "Ϊ͂", "Ϊ͂"}, + 0x1fe2: {"ῢ", "Ϋ̀", "Ϋ̀"}, + 0x1fe3: {"ΰ", "Ϋ́", "Ϋ́"}, + 0x1fe4: {"ῤ", "Ρ̓", "Ρ̓"}, + 0x1fe6: {"ῦ", "Υ͂", "Υ͂"}, + 0x1fe7: {"ῧ", "Ϋ͂", "Ϋ͂"}, + 0x1ff6: {"ῶ", "Ω͂", "Ω͂"}, + 0x1f80: {"ᾀ", "ᾈ", "ἈΙ"}, + 0x1f81: {"ᾁ", "ᾉ", "ἉΙ"}, + 0x1f82: {"ᾂ", "ᾊ", "ἊΙ"}, + 0x1f83: {"ᾃ", "ᾋ", "ἋΙ"}, + 0x1f84: {"ᾄ", "ᾌ", "ἌΙ"}, + 0x1f85: {"ᾅ", "ᾍ", "ἍΙ"}, + 0x1f86: {"ᾆ", "ᾎ", "ἎΙ"}, + 0x1f87: {"ᾇ", "ᾏ", "ἏΙ"}, + 0x1f88: {"ᾀ", "ᾈ", "ἈΙ"}, + 0x1f89: {"ᾁ", "ᾉ", "ἉΙ"}, + 0x1f8a: {"ᾂ", "ᾊ", "ἊΙ"}, + 0x1f8b: {"ᾃ", "ᾋ", "ἋΙ"}, + 0x1f8c: {"ᾄ", "ᾌ", "ἌΙ"}, + 0x1f8d: {"ᾅ", "ᾍ", "ἍΙ"}, + 0x1f8e: {"ᾆ", "ᾎ", "ἎΙ"}, + 0x1f8f: {"ᾇ", "ᾏ", "ἏΙ"}, + 0x1f90: {"ᾐ", "ᾘ", "ἨΙ"}, + 0x1f91: {"ᾑ", "ᾙ", "ἩΙ"}, + 0x1f92: {"ᾒ", "ᾚ", "ἪΙ"}, + 0x1f93: {"ᾓ", "ᾛ", "ἫΙ"}, + 0x1f94: {"ᾔ", "ᾜ", "ἬΙ"}, + 0x1f95: {"ᾕ", "ᾝ", "ἭΙ"}, + 0x1f96: {"ᾖ", "ᾞ", "ἮΙ"}, + 0x1f97: {"ᾗ", "ᾟ", "ἯΙ"}, + 0x1f98: {"ᾐ", "ᾘ", "ἨΙ"}, + 0x1f99: {"ᾑ", "ᾙ", "ἩΙ"}, + 0x1f9a: {"ᾒ", "ᾚ", "ἪΙ"}, + 0x1f9b: {"ᾓ", "ᾛ", "ἫΙ"}, + 0x1f9c: {"ᾔ", "ᾜ", "ἬΙ"}, + 0x1f9d: {"ᾕ", "ᾝ", "ἭΙ"}, + 0x1f9e: {"ᾖ", "ᾞ", "ἮΙ"}, + 0x1f9f: {"ᾗ", "ᾟ", "ἯΙ"}, + 0x1fa0: {"ᾠ", "ᾨ", "ὨΙ"}, + 0x1fa1: {"ᾡ", "ᾩ", "ὩΙ"}, + 0x1fa2: {"ᾢ", "ᾪ", "ὪΙ"}, + 0x1fa3: {"ᾣ", "ᾫ", "ὫΙ"}, + 0x1fa4: {"ᾤ", "ᾬ", "ὬΙ"}, + 0x1fa5: {"ᾥ", "ᾭ", "ὭΙ"}, + 0x1fa6: {"ᾦ", "ᾮ", "ὮΙ"}, + 0x1fa7: {"ᾧ", "ᾯ", "ὯΙ"}, + 0x1fa8: {"ᾠ", "ᾨ", "ὨΙ"}, + 0x1fa9: {"ᾡ", "ᾩ", "ὩΙ"}, + 0x1faa: {"ᾢ", "ᾪ", "ὪΙ"}, + 0x1fab: {"ᾣ", "ᾫ", "ὫΙ"}, + 0x1fac: {"ᾤ", "ᾬ", "ὬΙ"}, + 0x1fad: {"ᾥ", "ᾭ", "ὭΙ"}, + 0x1fae: {"ᾦ", "ᾮ", "ὮΙ"}, + 0x1faf: {"ᾧ", "ᾯ", "ὯΙ"}, + 0x1fb3: {"ᾳ", "ᾼ", "ΑΙ"}, + 0x1fbc: {"ᾳ", "ᾼ", "ΑΙ"}, + 0x1fc3: {"ῃ", "ῌ", "ΗΙ"}, + 0x1fcc: {"ῃ", "ῌ", "ΗΙ"}, + 0x1ff3: {"ῳ", "ῼ", "ΩΙ"}, + 0x1ffc: {"ῳ", "ῼ", "ΩΙ"}, + 0x1fb2: {"ᾲ", "Ὰͅ", "ᾺΙ"}, + 0x1fb4: {"ᾴ", "Άͅ", "ΆΙ"}, + 0x1fc2: {"ῂ", "Ὴͅ", "ῊΙ"}, + 0x1fc4: {"ῄ", "Ήͅ", "ΉΙ"}, + 0x1ff2: {"ῲ", "Ὼͅ", "ῺΙ"}, + 0x1ff4: {"ῴ", "Ώͅ", "ΏΙ"}, + 0x1fb7: {"ᾷ", "ᾼ͂", "Α͂Ι"}, + 0x1fc7: {"ῇ", "ῌ͂", "Η͂Ι"}, + 0x1ff7: {"ῷ", "ῼ͂", "Ω͂Ι"}, + } + + foldMap = map[rune]struct{ simple, full, special string }{ + 0x0049: {"", "", "ı"}, + 0x00b5: {"μ", "μ", ""}, + 0x00df: {"", "ss", ""}, + 0x0130: {"", "i̇", "i"}, + 0x0149: {"", "ʼn", ""}, + 0x017f: {"s", "s", ""}, + 0x01f0: {"", "ǰ", ""}, + 0x0345: {"ι", "ι", ""}, + 0x0390: {"", "ΐ", ""}, + 0x03b0: {"", "ΰ", ""}, + 0x03c2: {"σ", "σ", ""}, + 0x03d0: {"β", "β", ""}, + 0x03d1: {"θ", "θ", ""}, + 0x03d5: {"φ", "φ", ""}, + 0x03d6: {"π", "π", ""}, + 0x03f0: {"κ", "κ", ""}, + 0x03f1: {"ρ", "ρ", ""}, + 0x03f5: {"ε", "ε", ""}, + 0x0587: {"", "եւ", ""}, + 0x13f8: {"Ᏸ", "Ᏸ", ""}, + 0x13f9: {"Ᏹ", "Ᏹ", ""}, + 0x13fa: {"Ᏺ", "Ᏺ", ""}, + 0x13fb: {"Ᏻ", "Ᏻ", ""}, + 0x13fc: {"Ᏼ", "Ᏼ", ""}, + 0x13fd: {"Ᏽ", "Ᏽ", ""}, + 0x1c80: {"в", "в", ""}, + 0x1c81: {"д", "д", ""}, + 0x1c82: {"о", "о", ""}, + 0x1c83: {"с", "с", ""}, + 0x1c84: {"т", "т", ""}, + 0x1c85: {"т", "т", ""}, + 0x1c86: {"ъ", "ъ", ""}, + 0x1c87: {"ѣ", "ѣ", ""}, + 0x1c88: {"ꙋ", "ꙋ", ""}, + 0x1e96: {"", "ẖ", ""}, + 0x1e97: {"", "ẗ", ""}, + 0x1e98: {"", "ẘ", ""}, + 0x1e99: {"", "ẙ", ""}, + 0x1e9a: {"", "aʾ", ""}, + 0x1e9b: {"ṡ", "ṡ", ""}, + 0x1e9e: {"", "ss", ""}, + 0x1f50: {"", "ὐ", ""}, + 0x1f52: {"", "ὒ", ""}, + 0x1f54: {"", "ὔ", ""}, + 0x1f56: {"", "ὖ", ""}, + 0x1f80: {"", "ἀι", ""}, + 0x1f81: {"", "ἁι", ""}, + 0x1f82: {"", "ἂι", ""}, + 0x1f83: {"", "ἃι", ""}, + 0x1f84: {"", "ἄι", ""}, + 0x1f85: {"", "ἅι", ""}, + 0x1f86: {"", "ἆι", ""}, + 0x1f87: {"", "ἇι", ""}, + 0x1f88: {"", "ἀι", ""}, + 0x1f89: {"", "ἁι", ""}, + 0x1f8a: {"", "ἂι", ""}, + 0x1f8b: {"", "ἃι", ""}, + 0x1f8c: {"", "ἄι", ""}, + 0x1f8d: {"", "ἅι", ""}, + 0x1f8e: {"", "ἆι", ""}, + 0x1f8f: {"", "ἇι", ""}, + 0x1f90: {"", "ἠι", ""}, + 0x1f91: {"", "ἡι", ""}, + 0x1f92: {"", "ἢι", ""}, + 0x1f93: {"", "ἣι", ""}, + 0x1f94: {"", "ἤι", ""}, + 0x1f95: {"", "ἥι", ""}, + 0x1f96: {"", "ἦι", ""}, + 0x1f97: {"", "ἧι", ""}, + 0x1f98: {"", "ἠι", ""}, + 0x1f99: {"", "ἡι", ""}, + 0x1f9a: {"", "ἢι", ""}, + 0x1f9b: {"", "ἣι", ""}, + 0x1f9c: {"", "ἤι", ""}, + 0x1f9d: {"", "ἥι", ""}, + 0x1f9e: {"", "ἦι", ""}, + 0x1f9f: {"", "ἧι", ""}, + 0x1fa0: {"", "ὠι", ""}, + 0x1fa1: {"", "ὡι", ""}, + 0x1fa2: {"", "ὢι", ""}, + 0x1fa3: {"", "ὣι", ""}, + 0x1fa4: {"", "ὤι", ""}, + 0x1fa5: {"", "ὥι", ""}, + 0x1fa6: {"", "ὦι", ""}, + 0x1fa7: {"", "ὧι", ""}, + 0x1fa8: {"", "ὠι", ""}, + 0x1fa9: {"", "ὡι", ""}, + 0x1faa: {"", "ὢι", ""}, + 0x1fab: {"", "ὣι", ""}, + 0x1fac: {"", "ὤι", ""}, + 0x1fad: {"", "ὥι", ""}, + 0x1fae: {"", "ὦι", ""}, + 0x1faf: {"", "ὧι", ""}, + 0x1fb2: {"", "ὰι", ""}, + 0x1fb3: {"", "αι", ""}, + 0x1fb4: {"", "άι", ""}, + 0x1fb6: {"", "ᾶ", ""}, + 0x1fb7: {"", "ᾶι", ""}, + 0x1fbc: {"", "αι", ""}, + 0x1fbe: {"ι", "ι", ""}, + 0x1fc2: {"", "ὴι", ""}, + 0x1fc3: {"", "ηι", ""}, + 0x1fc4: {"", "ήι", ""}, + 0x1fc6: {"", "ῆ", ""}, + 0x1fc7: {"", "ῆι", ""}, + 0x1fcc: {"", "ηι", ""}, + 0x1fd2: {"", "ῒ", ""}, + 0x1fd3: {"", "ΐ", ""}, + 0x1fd6: {"", "ῖ", ""}, + 0x1fd7: {"", "ῗ", ""}, + 0x1fe2: {"", "ῢ", ""}, + 0x1fe3: {"", "ΰ", ""}, + 0x1fe4: {"", "ῤ", ""}, + 0x1fe6: {"", "ῦ", ""}, + 0x1fe7: {"", "ῧ", ""}, + 0x1ff2: {"", "ὼι", ""}, + 0x1ff3: {"", "ωι", ""}, + 0x1ff4: {"", "ώι", ""}, + 0x1ff6: {"", "ῶ", ""}, + 0x1ff7: {"", "ῶι", ""}, + 0x1ffc: {"", "ωι", ""}, + 0xab70: {"Ꭰ", "Ꭰ", ""}, + 0xab71: {"Ꭱ", "Ꭱ", ""}, + 0xab72: {"Ꭲ", "Ꭲ", ""}, + 0xab73: {"Ꭳ", "Ꭳ", ""}, + 0xab74: {"Ꭴ", "Ꭴ", ""}, + 0xab75: {"Ꭵ", "Ꭵ", ""}, + 0xab76: {"Ꭶ", "Ꭶ", ""}, + 0xab77: {"Ꭷ", "Ꭷ", ""}, + 0xab78: {"Ꭸ", "Ꭸ", ""}, + 0xab79: {"Ꭹ", "Ꭹ", ""}, + 0xab7a: {"Ꭺ", "Ꭺ", ""}, + 0xab7b: {"Ꭻ", "Ꭻ", ""}, + 0xab7c: {"Ꭼ", "Ꭼ", ""}, + 0xab7d: {"Ꭽ", "Ꭽ", ""}, + 0xab7e: {"Ꭾ", "Ꭾ", ""}, + 0xab7f: {"Ꭿ", "Ꭿ", ""}, + 0xab80: {"Ꮀ", "Ꮀ", ""}, + 0xab81: {"Ꮁ", "Ꮁ", ""}, + 0xab82: {"Ꮂ", "Ꮂ", ""}, + 0xab83: {"Ꮃ", "Ꮃ", ""}, + 0xab84: {"Ꮄ", "Ꮄ", ""}, + 0xab85: {"Ꮅ", "Ꮅ", ""}, + 0xab86: {"Ꮆ", "Ꮆ", ""}, + 0xab87: {"Ꮇ", "Ꮇ", ""}, + 0xab88: {"Ꮈ", "Ꮈ", ""}, + 0xab89: {"Ꮉ", "Ꮉ", ""}, + 0xab8a: {"Ꮊ", "Ꮊ", ""}, + 0xab8b: {"Ꮋ", "Ꮋ", ""}, + 0xab8c: {"Ꮌ", "Ꮌ", ""}, + 0xab8d: {"Ꮍ", "Ꮍ", ""}, + 0xab8e: {"Ꮎ", "Ꮎ", ""}, + 0xab8f: {"Ꮏ", "Ꮏ", ""}, + 0xab90: {"Ꮐ", "Ꮐ", ""}, + 0xab91: {"Ꮑ", "Ꮑ", ""}, + 0xab92: {"Ꮒ", "Ꮒ", ""}, + 0xab93: {"Ꮓ", "Ꮓ", ""}, + 0xab94: {"Ꮔ", "Ꮔ", ""}, + 0xab95: {"Ꮕ", "Ꮕ", ""}, + 0xab96: {"Ꮖ", "Ꮖ", ""}, + 0xab97: {"Ꮗ", "Ꮗ", ""}, + 0xab98: {"Ꮘ", "Ꮘ", ""}, + 0xab99: {"Ꮙ", "Ꮙ", ""}, + 0xab9a: {"Ꮚ", "Ꮚ", ""}, + 0xab9b: {"Ꮛ", "Ꮛ", ""}, + 0xab9c: {"Ꮜ", "Ꮜ", ""}, + 0xab9d: {"Ꮝ", "Ꮝ", ""}, + 0xab9e: {"Ꮞ", "Ꮞ", ""}, + 0xab9f: {"Ꮟ", "Ꮟ", ""}, + 0xaba0: {"Ꮠ", "Ꮠ", ""}, + 0xaba1: {"Ꮡ", "Ꮡ", ""}, + 0xaba2: {"Ꮢ", "Ꮢ", ""}, + 0xaba3: {"Ꮣ", "Ꮣ", ""}, + 0xaba4: {"Ꮤ", "Ꮤ", ""}, + 0xaba5: {"Ꮥ", "Ꮥ", ""}, + 0xaba6: {"Ꮦ", "Ꮦ", ""}, + 0xaba7: {"Ꮧ", "Ꮧ", ""}, + 0xaba8: {"Ꮨ", "Ꮨ", ""}, + 0xaba9: {"Ꮩ", "Ꮩ", ""}, + 0xabaa: {"Ꮪ", "Ꮪ", ""}, + 0xabab: {"Ꮫ", "Ꮫ", ""}, + 0xabac: {"Ꮬ", "Ꮬ", ""}, + 0xabad: {"Ꮭ", "Ꮭ", ""}, + 0xabae: {"Ꮮ", "Ꮮ", ""}, + 0xabaf: {"Ꮯ", "Ꮯ", ""}, + 0xabb0: {"Ꮰ", "Ꮰ", ""}, + 0xabb1: {"Ꮱ", "Ꮱ", ""}, + 0xabb2: {"Ꮲ", "Ꮲ", ""}, + 0xabb3: {"Ꮳ", "Ꮳ", ""}, + 0xabb4: {"Ꮴ", "Ꮴ", ""}, + 0xabb5: {"Ꮵ", "Ꮵ", ""}, + 0xabb6: {"Ꮶ", "Ꮶ", ""}, + 0xabb7: {"Ꮷ", "Ꮷ", ""}, + 0xabb8: {"Ꮸ", "Ꮸ", ""}, + 0xabb9: {"Ꮹ", "Ꮹ", ""}, + 0xabba: {"Ꮺ", "Ꮺ", ""}, + 0xabbb: {"Ꮻ", "Ꮻ", ""}, + 0xabbc: {"Ꮼ", "Ꮼ", ""}, + 0xabbd: {"Ꮽ", "Ꮽ", ""}, + 0xabbe: {"Ꮾ", "Ꮾ", ""}, + 0xabbf: {"Ꮿ", "Ꮿ", ""}, + 0xfb00: {"", "ff", ""}, + 0xfb01: {"", "fi", ""}, + 0xfb02: {"", "fl", ""}, + 0xfb03: {"", "ffi", ""}, + 0xfb04: {"", "ffl", ""}, + 0xfb05: {"", "st", ""}, + 0xfb06: {"", "st", ""}, + 0xfb13: {"", "մն", ""}, + 0xfb14: {"", "մե", ""}, + 0xfb15: {"", "մի", ""}, + 0xfb16: {"", "վն", ""}, + 0xfb17: {"", "մխ", ""}, + } + + breakProp = []struct{ lo, hi rune }{ + {0x0, 0x26}, + {0x28, 0x2d}, + {0x2f, 0x2f}, + {0x3b, 0x40}, + {0x5b, 0x5e}, + {0x60, 0x60}, + {0x7b, 0xa9}, + {0xab, 0xac}, + {0xae, 0xb4}, + {0xb6, 0xb6}, + {0xb8, 0xb9}, + {0xbb, 0xbf}, + {0xd7, 0xd7}, + {0xf7, 0xf7}, + {0x2d8, 0x2dd}, + {0x2e5, 0x2eb}, + {0x375, 0x375}, + {0x378, 0x379}, + {0x37e, 0x37e}, + {0x380, 0x385}, + {0x38b, 0x38b}, + {0x38d, 0x38d}, + {0x3a2, 0x3a2}, + {0x3f6, 0x3f6}, + {0x482, 0x482}, + {0x530, 0x530}, + {0x557, 0x558}, + {0x55a, 0x560}, + {0x588, 0x590}, + {0x5be, 0x5be}, + {0x5c0, 0x5c0}, + {0x5c3, 0x5c3}, + {0x5c6, 0x5c6}, + {0x5c8, 0x5cf}, + {0x5eb, 0x5ef}, + {0x5f5, 0x5ff}, + {0x606, 0x60f}, + {0x61b, 0x61b}, + {0x61d, 0x61f}, + {0x66a, 0x66a}, + {0x66c, 0x66d}, + {0x6d4, 0x6d4}, + {0x6de, 0x6de}, + {0x6e9, 0x6e9}, + {0x6fd, 0x6fe}, + {0x700, 0x70e}, + {0x74b, 0x74c}, + {0x7b2, 0x7bf}, + {0x7f6, 0x7f9}, + {0x7fb, 0x7ff}, + {0x82e, 0x83f}, + {0x85c, 0x85f}, + {0x86b, 0x89f}, + {0x8b5, 0x8b5}, + {0x8be, 0x8d3}, + {0x964, 0x965}, + {0x970, 0x970}, + {0x984, 0x984}, + {0x98d, 0x98e}, + {0x991, 0x992}, + {0x9a9, 0x9a9}, + {0x9b1, 0x9b1}, + {0x9b3, 0x9b5}, + {0x9ba, 0x9bb}, + {0x9c5, 0x9c6}, + {0x9c9, 0x9ca}, + {0x9cf, 0x9d6}, + {0x9d8, 0x9db}, + {0x9de, 0x9de}, + {0x9e4, 0x9e5}, + {0x9f2, 0x9fb}, + {0x9fd, 0xa00}, + {0xa04, 0xa04}, + {0xa0b, 0xa0e}, + {0xa11, 0xa12}, + {0xa29, 0xa29}, + {0xa31, 0xa31}, + {0xa34, 0xa34}, + {0xa37, 0xa37}, + {0xa3a, 0xa3b}, + {0xa3d, 0xa3d}, + {0xa43, 0xa46}, + {0xa49, 0xa4a}, + {0xa4e, 0xa50}, + {0xa52, 0xa58}, + {0xa5d, 0xa5d}, + {0xa5f, 0xa65}, + {0xa76, 0xa80}, + {0xa84, 0xa84}, + {0xa8e, 0xa8e}, + {0xa92, 0xa92}, + {0xaa9, 0xaa9}, + {0xab1, 0xab1}, + {0xab4, 0xab4}, + {0xaba, 0xabb}, + {0xac6, 0xac6}, + {0xaca, 0xaca}, + {0xace, 0xacf}, + {0xad1, 0xadf}, + {0xae4, 0xae5}, + {0xaf0, 0xaf8}, + {0xb00, 0xb00}, + {0xb04, 0xb04}, + {0xb0d, 0xb0e}, + {0xb11, 0xb12}, + {0xb29, 0xb29}, + {0xb31, 0xb31}, + {0xb34, 0xb34}, + {0xb3a, 0xb3b}, + {0xb45, 0xb46}, + {0xb49, 0xb4a}, + {0xb4e, 0xb55}, + {0xb58, 0xb5b}, + {0xb5e, 0xb5e}, + {0xb64, 0xb65}, + {0xb70, 0xb70}, + {0xb72, 0xb81}, + {0xb84, 0xb84}, + {0xb8b, 0xb8d}, + {0xb91, 0xb91}, + {0xb96, 0xb98}, + {0xb9b, 0xb9b}, + {0xb9d, 0xb9d}, + {0xba0, 0xba2}, + {0xba5, 0xba7}, + {0xbab, 0xbad}, + {0xbba, 0xbbd}, + {0xbc3, 0xbc5}, + {0xbc9, 0xbc9}, + {0xbce, 0xbcf}, + {0xbd1, 0xbd6}, + {0xbd8, 0xbe5}, + {0xbf0, 0xbff}, + {0xc04, 0xc04}, + {0xc0d, 0xc0d}, + {0xc11, 0xc11}, + {0xc29, 0xc29}, + {0xc3a, 0xc3c}, + {0xc45, 0xc45}, + {0xc49, 0xc49}, + {0xc4e, 0xc54}, + {0xc57, 0xc57}, + {0xc5b, 0xc5f}, + {0xc64, 0xc65}, + {0xc70, 0xc7f}, + {0xc84, 0xc84}, + {0xc8d, 0xc8d}, + {0xc91, 0xc91}, + {0xca9, 0xca9}, + {0xcb4, 0xcb4}, + {0xcba, 0xcbb}, + {0xcc5, 0xcc5}, + {0xcc9, 0xcc9}, + {0xcce, 0xcd4}, + {0xcd7, 0xcdd}, + {0xcdf, 0xcdf}, + {0xce4, 0xce5}, + {0xcf0, 0xcf0}, + {0xcf3, 0xcff}, + {0xd04, 0xd04}, + {0xd0d, 0xd0d}, + {0xd11, 0xd11}, + {0xd45, 0xd45}, + {0xd49, 0xd49}, + {0xd4f, 0xd53}, + {0xd58, 0xd5e}, + {0xd64, 0xd65}, + {0xd70, 0xd79}, + {0xd80, 0xd81}, + {0xd84, 0xd84}, + {0xd97, 0xd99}, + {0xdb2, 0xdb2}, + {0xdbc, 0xdbc}, + {0xdbe, 0xdbf}, + {0xdc7, 0xdc9}, + {0xdcb, 0xdce}, + {0xdd5, 0xdd5}, + {0xdd7, 0xdd7}, + {0xde0, 0xde5}, + {0xdf0, 0xdf1}, + {0xdf4, 0xe30}, + {0xe32, 0xe33}, + {0xe3b, 0xe46}, + {0xe4f, 0xe4f}, + {0xe5a, 0xeb0}, + {0xeb2, 0xeb3}, + {0xeba, 0xeba}, + {0xebd, 0xec7}, + {0xece, 0xecf}, + {0xeda, 0xeff}, + {0xf01, 0xf17}, + {0xf1a, 0xf1f}, + {0xf2a, 0xf34}, + {0xf36, 0xf36}, + {0xf38, 0xf38}, + {0xf3a, 0xf3d}, + {0xf48, 0xf48}, + {0xf6d, 0xf70}, + {0xf85, 0xf85}, + {0xf98, 0xf98}, + {0xfbd, 0xfc5}, + {0xfc7, 0x102a}, + {0x103f, 0x103f}, + {0x104a, 0x1055}, + {0x105a, 0x105d}, + {0x1061, 0x1061}, + {0x1065, 0x1066}, + {0x106e, 0x1070}, + {0x1075, 0x1081}, + {0x108e, 0x108e}, + {0x109e, 0x109f}, + {0x10c6, 0x10c6}, + {0x10c8, 0x10cc}, + {0x10ce, 0x10cf}, + {0x10fb, 0x10fb}, + {0x1249, 0x1249}, + {0x124e, 0x124f}, + {0x1257, 0x1257}, + {0x1259, 0x1259}, + {0x125e, 0x125f}, + {0x1289, 0x1289}, + {0x128e, 0x128f}, + {0x12b1, 0x12b1}, + {0x12b6, 0x12b7}, + {0x12bf, 0x12bf}, + {0x12c1, 0x12c1}, + {0x12c6, 0x12c7}, + {0x12d7, 0x12d7}, + {0x1311, 0x1311}, + {0x1316, 0x1317}, + {0x135b, 0x135c}, + {0x1360, 0x137f}, + {0x1390, 0x139f}, + {0x13f6, 0x13f7}, + {0x13fe, 0x1400}, + {0x166d, 0x166e}, + {0x1680, 0x1680}, + {0x169b, 0x169f}, + {0x16eb, 0x16ed}, + {0x16f9, 0x16ff}, + {0x170d, 0x170d}, + {0x1715, 0x171f}, + {0x1735, 0x173f}, + {0x1754, 0x175f}, + {0x176d, 0x176d}, + {0x1771, 0x1771}, + {0x1774, 0x17b3}, + {0x17d4, 0x17dc}, + {0x17de, 0x17df}, + {0x17ea, 0x180a}, + {0x180f, 0x180f}, + {0x181a, 0x181f}, + {0x1878, 0x187f}, + {0x18ab, 0x18af}, + {0x18f6, 0x18ff}, + {0x191f, 0x191f}, + {0x192c, 0x192f}, + {0x193c, 0x1945}, + {0x1950, 0x19cf}, + {0x19da, 0x19ff}, + {0x1a1c, 0x1a54}, + {0x1a5f, 0x1a5f}, + {0x1a7d, 0x1a7e}, + {0x1a8a, 0x1a8f}, + {0x1a9a, 0x1aaf}, + {0x1abf, 0x1aff}, + {0x1b4c, 0x1b4f}, + {0x1b5a, 0x1b6a}, + {0x1b74, 0x1b7f}, + {0x1bf4, 0x1bff}, + {0x1c38, 0x1c3f}, + {0x1c4a, 0x1c4c}, + {0x1c7e, 0x1c7f}, + {0x1c89, 0x1ccf}, + {0x1cd3, 0x1cd3}, + {0x1cfa, 0x1cff}, + {0x1dfa, 0x1dfa}, + {0x1f16, 0x1f17}, + {0x1f1e, 0x1f1f}, + {0x1f46, 0x1f47}, + {0x1f4e, 0x1f4f}, + {0x1f58, 0x1f58}, + {0x1f5a, 0x1f5a}, + {0x1f5c, 0x1f5c}, + {0x1f5e, 0x1f5e}, + {0x1f7e, 0x1f7f}, + {0x1fb5, 0x1fb5}, + {0x1fbd, 0x1fbd}, + {0x1fbf, 0x1fc1}, + {0x1fc5, 0x1fc5}, + {0x1fcd, 0x1fcf}, + {0x1fd4, 0x1fd5}, + {0x1fdc, 0x1fdf}, + {0x1fed, 0x1ff1}, + {0x1ff5, 0x1ff5}, + {0x1ffd, 0x200b}, + {0x2010, 0x2017}, + {0x201a, 0x2023}, + {0x2025, 0x2026}, + {0x2028, 0x2029}, + {0x2030, 0x203e}, + {0x2041, 0x2053}, + {0x2055, 0x205f}, + {0x2065, 0x2065}, + {0x2070, 0x2070}, + {0x2072, 0x207e}, + {0x2080, 0x208f}, + {0x209d, 0x20cf}, + {0x20f1, 0x2101}, + {0x2103, 0x2106}, + {0x2108, 0x2109}, + {0x2114, 0x2114}, + {0x2116, 0x2118}, + {0x211e, 0x2123}, + {0x2125, 0x2125}, + {0x2127, 0x2127}, + {0x2129, 0x2129}, + {0x212e, 0x212e}, + {0x213a, 0x213b}, + {0x2140, 0x2144}, + {0x214a, 0x214d}, + {0x214f, 0x215f}, + {0x2189, 0x24b5}, + {0x24ea, 0x2bff}, + {0x2c2f, 0x2c2f}, + {0x2c5f, 0x2c5f}, + {0x2ce5, 0x2cea}, + {0x2cf4, 0x2cff}, + {0x2d26, 0x2d26}, + {0x2d28, 0x2d2c}, + {0x2d2e, 0x2d2f}, + {0x2d68, 0x2d6e}, + {0x2d70, 0x2d7e}, + {0x2d97, 0x2d9f}, + {0x2da7, 0x2da7}, + {0x2daf, 0x2daf}, + {0x2db7, 0x2db7}, + {0x2dbf, 0x2dbf}, + {0x2dc7, 0x2dc7}, + {0x2dcf, 0x2dcf}, + {0x2dd7, 0x2dd7}, + {0x2ddf, 0x2ddf}, + {0x2e00, 0x2e2e}, + {0x2e30, 0x3004}, + {0x3006, 0x3029}, + {0x3030, 0x303a}, + {0x303d, 0x3098}, + {0x309b, 0x3104}, + {0x312f, 0x3130}, + {0x318f, 0x319f}, + {0x31bb, 0x9fff}, + {0xa48d, 0xa4cf}, + {0xa4fe, 0xa4ff}, + {0xa60d, 0xa60f}, + {0xa62c, 0xa63f}, + {0xa673, 0xa673}, + {0xa67e, 0xa67e}, + {0xa6f2, 0xa716}, + {0xa7af, 0xa7af}, + {0xa7b8, 0xa7f6}, + {0xa828, 0xa83f}, + {0xa874, 0xa87f}, + {0xa8c6, 0xa8cf}, + {0xa8da, 0xa8df}, + {0xa8f8, 0xa8fa}, + {0xa8fc, 0xa8fc}, + {0xa8fe, 0xa8ff}, + {0xa92e, 0xa92f}, + {0xa954, 0xa95f}, + {0xa97d, 0xa97f}, + {0xa9c1, 0xa9ce}, + {0xa9da, 0xa9e4}, + {0xa9e6, 0xa9ef}, + {0xa9fa, 0xa9ff}, + {0xaa37, 0xaa3f}, + {0xaa4e, 0xaa4f}, + {0xaa5a, 0xaa7a}, + {0xaa7e, 0xaaaf}, + {0xaab1, 0xaab1}, + {0xaab5, 0xaab6}, + {0xaab9, 0xaabd}, + {0xaac0, 0xaac0}, + {0xaac2, 0xaadf}, + {0xaaf0, 0xaaf1}, + {0xaaf7, 0xab00}, + {0xab07, 0xab08}, + {0xab0f, 0xab10}, + {0xab17, 0xab1f}, + {0xab27, 0xab27}, + {0xab2f, 0xab2f}, + {0xab66, 0xab6f}, + {0xabeb, 0xabeb}, + {0xabee, 0xabef}, + {0xabfa, 0xabff}, + {0xd7a4, 0xd7af}, + {0xd7c7, 0xd7ca}, + {0xd7fc, 0xfaff}, + {0xfb07, 0xfb12}, + {0xfb18, 0xfb1c}, + {0xfb29, 0xfb29}, + {0xfb37, 0xfb37}, + {0xfb3d, 0xfb3d}, + {0xfb3f, 0xfb3f}, + {0xfb42, 0xfb42}, + {0xfb45, 0xfb45}, + {0xfbb2, 0xfbd2}, + {0xfd3e, 0xfd4f}, + {0xfd90, 0xfd91}, + {0xfdc8, 0xfdef}, + {0xfdfc, 0xfdff}, + {0xfe10, 0xfe12}, + {0xfe14, 0xfe1f}, + {0xfe30, 0xfe32}, + {0xfe35, 0xfe4c}, + {0xfe50, 0xfe51}, + {0xfe53, 0xfe54}, + {0xfe56, 0xfe6f}, + {0xfe75, 0xfe75}, + {0xfefd, 0xfefe}, + {0xff00, 0xff06}, + {0xff08, 0xff0d}, + {0xff0f, 0xff19}, + {0xff1b, 0xff20}, + {0xff3b, 0xff3e}, + {0xff40, 0xff40}, + {0xff5b, 0xff9d}, + {0xffbf, 0xffc1}, + {0xffc8, 0xffc9}, + {0xffd0, 0xffd1}, + {0xffd8, 0xffd9}, + {0xffdd, 0xfff8}, + {0xfffc, 0xffff}, + {0x1000c, 0x1000c}, + {0x10027, 0x10027}, + {0x1003b, 0x1003b}, + {0x1003e, 0x1003e}, + {0x1004e, 0x1004f}, + {0x1005e, 0x1007f}, + {0x100fb, 0x1013f}, + {0x10175, 0x101fc}, + {0x101fe, 0x1027f}, + {0x1029d, 0x1029f}, + {0x102d1, 0x102df}, + {0x102e1, 0x102ff}, + {0x10320, 0x1032c}, + {0x1034b, 0x1034f}, + {0x1037b, 0x1037f}, + {0x1039e, 0x1039f}, + {0x103c4, 0x103c7}, + {0x103d0, 0x103d0}, + {0x103d6, 0x103ff}, + {0x1049e, 0x1049f}, + {0x104aa, 0x104af}, + {0x104d4, 0x104d7}, + {0x104fc, 0x104ff}, + {0x10528, 0x1052f}, + {0x10564, 0x105ff}, + {0x10737, 0x1073f}, + {0x10756, 0x1075f}, + {0x10768, 0x107ff}, + {0x10806, 0x10807}, + {0x10809, 0x10809}, + {0x10836, 0x10836}, + {0x10839, 0x1083b}, + {0x1083d, 0x1083e}, + {0x10856, 0x1085f}, + {0x10877, 0x1087f}, + {0x1089f, 0x108df}, + {0x108f3, 0x108f3}, + {0x108f6, 0x108ff}, + {0x10916, 0x1091f}, + {0x1093a, 0x1097f}, + {0x109b8, 0x109bd}, + {0x109c0, 0x109ff}, + {0x10a04, 0x10a04}, + {0x10a07, 0x10a0b}, + {0x10a14, 0x10a14}, + {0x10a18, 0x10a18}, + {0x10a34, 0x10a37}, + {0x10a3b, 0x10a3e}, + {0x10a40, 0x10a5f}, + {0x10a7d, 0x10a7f}, + {0x10a9d, 0x10abf}, + {0x10ac8, 0x10ac8}, + {0x10ae7, 0x10aff}, + {0x10b36, 0x10b3f}, + {0x10b56, 0x10b5f}, + {0x10b73, 0x10b7f}, + {0x10b92, 0x10bff}, + {0x10c49, 0x10c7f}, + {0x10cb3, 0x10cbf}, + {0x10cf3, 0x10fff}, + {0x11047, 0x11065}, + {0x11070, 0x1107e}, + {0x110bb, 0x110bc}, + {0x110be, 0x110cf}, + {0x110e9, 0x110ef}, + {0x110fa, 0x110ff}, + {0x11135, 0x11135}, + {0x11140, 0x1114f}, + {0x11174, 0x11175}, + {0x11177, 0x1117f}, + {0x111c5, 0x111c9}, + {0x111cd, 0x111cf}, + {0x111db, 0x111db}, + {0x111dd, 0x111ff}, + {0x11212, 0x11212}, + {0x11238, 0x1123d}, + {0x1123f, 0x1127f}, + {0x11287, 0x11287}, + {0x11289, 0x11289}, + {0x1128e, 0x1128e}, + {0x1129e, 0x1129e}, + {0x112a9, 0x112af}, + {0x112eb, 0x112ef}, + {0x112fa, 0x112ff}, + {0x11304, 0x11304}, + {0x1130d, 0x1130e}, + {0x11311, 0x11312}, + {0x11329, 0x11329}, + {0x11331, 0x11331}, + {0x11334, 0x11334}, + {0x1133a, 0x1133b}, + {0x11345, 0x11346}, + {0x11349, 0x1134a}, + {0x1134e, 0x1134f}, + {0x11351, 0x11356}, + {0x11358, 0x1135c}, + {0x11364, 0x11365}, + {0x1136d, 0x1136f}, + {0x11375, 0x113ff}, + {0x1144b, 0x1144f}, + {0x1145a, 0x1147f}, + {0x114c6, 0x114c6}, + {0x114c8, 0x114cf}, + {0x114da, 0x1157f}, + {0x115b6, 0x115b7}, + {0x115c1, 0x115d7}, + {0x115de, 0x115ff}, + {0x11641, 0x11643}, + {0x11645, 0x1164f}, + {0x1165a, 0x1167f}, + {0x116b8, 0x116bf}, + {0x116ca, 0x1171c}, + {0x1172c, 0x1172f}, + {0x1173a, 0x1189f}, + {0x118ea, 0x118fe}, + {0x11900, 0x119ff}, + {0x11a3f, 0x11a46}, + {0x11a48, 0x11a4f}, + {0x11a84, 0x11a85}, + {0x11a9a, 0x11abf}, + {0x11af9, 0x11bff}, + {0x11c09, 0x11c09}, + {0x11c37, 0x11c37}, + {0x11c41, 0x11c4f}, + {0x11c5a, 0x11c71}, + {0x11c90, 0x11c91}, + {0x11ca8, 0x11ca8}, + {0x11cb7, 0x11cff}, + {0x11d07, 0x11d07}, + {0x11d0a, 0x11d0a}, + {0x11d37, 0x11d39}, + {0x11d3b, 0x11d3b}, + {0x11d3e, 0x11d3e}, + {0x11d48, 0x11d4f}, + {0x11d5a, 0x11fff}, + {0x1239a, 0x123ff}, + {0x1246f, 0x1247f}, + {0x12544, 0x12fff}, + {0x1342f, 0x143ff}, + {0x14647, 0x167ff}, + {0x16a39, 0x16a3f}, + {0x16a5f, 0x16a5f}, + {0x16a6a, 0x16acf}, + {0x16aee, 0x16aef}, + {0x16af5, 0x16aff}, + {0x16b37, 0x16b3f}, + {0x16b44, 0x16b4f}, + {0x16b5a, 0x16b62}, + {0x16b78, 0x16b7c}, + {0x16b90, 0x16eff}, + {0x16f45, 0x16f4f}, + {0x16f7f, 0x16f8e}, + {0x16fa0, 0x16fdf}, + {0x16fe2, 0x1bbff}, + {0x1bc6b, 0x1bc6f}, + {0x1bc7d, 0x1bc7f}, + {0x1bc89, 0x1bc8f}, + {0x1bc9a, 0x1bc9c}, + {0x1bc9f, 0x1bc9f}, + {0x1bca4, 0x1d164}, + {0x1d16a, 0x1d16c}, + {0x1d183, 0x1d184}, + {0x1d18c, 0x1d1a9}, + {0x1d1ae, 0x1d241}, + {0x1d245, 0x1d3ff}, + {0x1d455, 0x1d455}, + {0x1d49d, 0x1d49d}, + {0x1d4a0, 0x1d4a1}, + {0x1d4a3, 0x1d4a4}, + {0x1d4a7, 0x1d4a8}, + {0x1d4ad, 0x1d4ad}, + {0x1d4ba, 0x1d4ba}, + {0x1d4bc, 0x1d4bc}, + {0x1d4c4, 0x1d4c4}, + {0x1d506, 0x1d506}, + {0x1d50b, 0x1d50c}, + {0x1d515, 0x1d515}, + {0x1d51d, 0x1d51d}, + {0x1d53a, 0x1d53a}, + {0x1d53f, 0x1d53f}, + {0x1d545, 0x1d545}, + {0x1d547, 0x1d549}, + {0x1d551, 0x1d551}, + {0x1d6a6, 0x1d6a7}, + {0x1d6c1, 0x1d6c1}, + {0x1d6db, 0x1d6db}, + {0x1d6fb, 0x1d6fb}, + {0x1d715, 0x1d715}, + {0x1d735, 0x1d735}, + {0x1d74f, 0x1d74f}, + {0x1d76f, 0x1d76f}, + {0x1d789, 0x1d789}, + {0x1d7a9, 0x1d7a9}, + {0x1d7c3, 0x1d7c3}, + {0x1d7cc, 0x1d7cd}, + {0x1d800, 0x1d9ff}, + {0x1da37, 0x1da3a}, + {0x1da6d, 0x1da74}, + {0x1da76, 0x1da83}, + {0x1da85, 0x1da9a}, + {0x1daa0, 0x1daa0}, + {0x1dab0, 0x1dfff}, + {0x1e007, 0x1e007}, + {0x1e019, 0x1e01a}, + {0x1e022, 0x1e022}, + {0x1e025, 0x1e025}, + {0x1e02b, 0x1e7ff}, + {0x1e8c5, 0x1e8cf}, + {0x1e8d7, 0x1e8ff}, + {0x1e94b, 0x1e94f}, + {0x1e95a, 0x1edff}, + {0x1ee04, 0x1ee04}, + {0x1ee20, 0x1ee20}, + {0x1ee23, 0x1ee23}, + {0x1ee25, 0x1ee26}, + {0x1ee28, 0x1ee28}, + {0x1ee33, 0x1ee33}, + {0x1ee38, 0x1ee38}, + {0x1ee3a, 0x1ee3a}, + {0x1ee3c, 0x1ee41}, + {0x1ee43, 0x1ee46}, + {0x1ee48, 0x1ee48}, + {0x1ee4a, 0x1ee4a}, + {0x1ee4c, 0x1ee4c}, + {0x1ee50, 0x1ee50}, + {0x1ee53, 0x1ee53}, + {0x1ee55, 0x1ee56}, + {0x1ee58, 0x1ee58}, + {0x1ee5a, 0x1ee5a}, + {0x1ee5c, 0x1ee5c}, + {0x1ee5e, 0x1ee5e}, + {0x1ee60, 0x1ee60}, + {0x1ee63, 0x1ee63}, + {0x1ee65, 0x1ee66}, + {0x1ee6b, 0x1ee6b}, + {0x1ee73, 0x1ee73}, + {0x1ee78, 0x1ee78}, + {0x1ee7d, 0x1ee7d}, + {0x1ee7f, 0x1ee7f}, + {0x1ee8a, 0x1ee8a}, + {0x1ee9c, 0x1eea0}, + {0x1eea4, 0x1eea4}, + {0x1eeaa, 0x1eeaa}, + {0x1eebc, 0x1f12f}, + {0x1f14a, 0x1f14f}, + {0x1f16a, 0x1f16f}, + {0x1f18a, 0x1ffff}, + } + + breakTest = []string{ + "AA", + "ÄA", + "Aa\u2060", + "Äa\u2060", + "Aa|:", + "Äa|:", + "Aa|'", + "Äa|'", + "Aa|'\u2060", + "Äa|'\u2060", + "Aa|,", + "Äa|,", + "a\u2060A", + "a\u2060̈A", + "a\u2060a\u2060", + "a\u2060̈a\u2060", + "a\u2060a|:", + "a\u2060̈a|:", + "a\u2060a|'", + "a\u2060̈a|'", + "a\u2060a|'\u2060", + "a\u2060̈a|'\u2060", + "a\u2060a|,", + "a\u2060̈a|,", + "a:A", + "a:̈A", + "a:a\u2060", + "a:̈a\u2060", + "a:a|:", + "a:̈a|:", + "a:a|'", + "a:̈a|'", + "a:a|'\u2060", + "a:̈a|'\u2060", + "a:a|,", + "a:̈a|,", + "a'A", + "a'̈A", + "a'a\u2060", + "a'̈a\u2060", + "a'a|:", + "a'̈a|:", + "a'a|'", + "a'̈a|'", + "a'a|'\u2060", + "a'̈a|'\u2060", + "a'a|,", + "a'̈a|,", + "a'\u2060A", + "a'\u2060̈A", + "a'\u2060a\u2060", + "a'\u2060̈a\u2060", + "a'\u2060a|:", + "a'\u2060̈a|:", + "a'\u2060a|'", + "a'\u2060̈a|'", + "a'\u2060a|'\u2060", + "a'\u2060̈a|'\u2060", + "a'\u2060a|,", + "a'\u2060̈a|,", + "a|,|A", + "a|,̈|A", + "a|,|a\u2060", + "a|,̈|a\u2060", + "a|,|a|:", + "a|,̈|a|:", + "a|,|a|'", + "a|,̈|a|'", + "a|,|a|'\u2060", + "a|,̈|a|'\u2060", + "a|,|a|,", + "a|,̈|a|,", + "AAA", + "A:A", + "A|:|:|A", + "A00A", + "A__A", + "a|🇦🇧|🇨|b", + "a|🇦🇧\u200d|🇨|b", + "a|🇦\u200d🇧|🇨|b", + "a|🇦🇧|🇨🇩|b", + "ä\u200d̈b", + "1_a|:|:|a", + "1_a|:|.|a", + "1_a|:|,|a", + "1_a|.|:|a", + "1_a|.|.|a", + "1_a|.|,|a", + "1_a|,|:|a", + "1_a|,|.|a", + "1_a|,|,|a", + "a_a|:|:|1", + "a|:|:|a", + "a_1|:|:|a", + "a_a|:|:|a", + "a_a|:|.|1", + "a|:|.|a", + "a_1|:|.|a", + "a_a|:|.|a", + "a_a|:|,|1", + "a|:|,|a", + "a_1|:|,|a", + "a_a|:|,|a", + "a_a|.|:|1", + "a|.|:|a", + "a_1|.|:|a", + "a_a|.|:|a", + "a_a|.|.|1", + "a|.|.|a", + "a_1|.|.|a", + "a_a|.|.|a", + "a_a|.|,|1", + "a|.|,|a", + "a_1|.|,|a", + "a_a|.|,|a", + "a_a|,|:|1", + "a|,|:|a", + "a_1|,|:|a", + "a_a|,|:|a", + "a_a|,|.|1", + "a|,|.|a", + "a_1|,|.|a", + "a_a|,|.|a", + "a_a|,|,|1", + "a|,|,|a", + "a_1|,|,|a", + "a_a|,|,|a", + } +) diff --git a/vendor/golang.org/x/text/cases/tables9.0.0.go b/vendor/golang.org/x/text/cases/tables9.0.0.go new file mode 100644 index 0000000..b8d87c6 --- /dev/null +++ b/vendor/golang.org/x/text/cases/tables9.0.0.go @@ -0,0 +1,2213 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// +build !go1.10 + +package cases + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "9.0.0" + +var xorData string = "" + // Size: 185 bytes + "\x00\x06\x07\x00\x01?\x00\x0f\x03\x00\x0f\x12\x00\x0f\x1f\x00\x0f\x1d" + + "\x00\x01\x13\x00\x0f\x16\x00\x0f\x0b\x00\x0f3\x00\x0f7\x00\x01#\x00\x0f?" + + "\x00\x0e'\x00\x0f/\x00\x0e>\x00\x0f*\x00\x0c&\x00\x0c*\x00\x0c;\x00\x0c9" + + "\x00\x0c%\x00\x01\x08\x00\x03\x0d\x00\x03\x09\x00\x02\x06\x00\x02\x02" + + "\x00\x02\x0c\x00\x01\x00\x00\x01\x03\x00\x01\x01\x00\x01 \x00\x01\x0c" + + "\x00\x01\x10\x00\x03\x10\x00\x036 \x00\x037 \x00\x0b#\x10\x00\x0b 0\x00" + + "\x0b!\x10\x00\x0b!0\x00\x0b(\x04\x00\x03\x04\x1e\x00\x03\x0a\x00\x02:" + + "\x00\x02>\x00\x02,\x00\x02\x00\x00\x02\x10\x00\x01<\x00\x01&\x00\x01*" + + "\x00\x01.\x00\x010\x003 \x00\x01\x18\x00\x01(\x00\x01\x1e\x00\x01\x22" + +var exceptions string = "" + // Size: 1852 bytes + "\x00\x12\x10μΜ\x12\x12ssSSSs\x13\x18i̇i̇\x10\x08I\x13\x18ʼnʼN\x11\x08sS" + + "\x12\x12dždžDž\x12\x12dždžDŽ\x10\x12DŽDž\x12\x12ljljLj\x12\x12ljljLJ\x10\x12LJLj\x12\x12" + + "njnjNj\x12\x12njnjNJ\x10\x12NJNj\x13\x18ǰJ̌\x12\x12dzdzDz\x12\x12dzdzDZ\x10\x12DZDz" + + "\x13\x18ⱥⱥ\x13\x18ⱦⱦ\x10\x18Ȿ\x10\x18Ɀ\x10\x18Ɐ\x10\x18Ɑ\x10\x18Ɒ\x10" + + "\x18Ɜ\x10\x18Ɡ\x10\x18Ɥ\x10\x18Ɦ\x10\x18Ɪ\x10\x18Ɫ\x10\x18Ɬ\x10\x18Ɱ\x10" + + "\x18Ɽ\x10\x18Ʇ\x10\x18Ʝ\x10\x18Ʞ2\x10ιΙ\x160ΐΪ́\x160ΰΫ́\x12\x10σΣ" + + "\x12\x10βΒ\x12\x10θΘ\x12\x10φΦ\x12\x10πΠ\x12\x10κΚ\x12\x10ρΡ\x12\x10εΕ" + + "\x14$եւԵՒԵւ\x12\x10вВ\x12\x10дД\x12\x10оО\x12\x10сС\x12\x10тТ\x12\x10тТ" + + "\x12\x10ъЪ\x12\x10ѣѢ\x13\x18ꙋꙊ\x13\x18ẖH̱\x13\x18ẗT̈\x13\x18ẘW̊\x13" + + "\x18ẙY̊\x13\x18aʾAʾ\x13\x18ṡṠ\x12\x10ssß\x14 ὐΥ̓\x160ὒΥ̓̀\x160ὔΥ̓́" + + "\x160ὖΥ̓͂\x15+ἀιἈΙᾈ\x15+ἁιἉΙᾉ\x15+ἂιἊΙᾊ\x15+ἃιἋΙᾋ\x15+ἄιἌΙᾌ\x15+ἅιἍΙᾍ" + + "\x15+ἆιἎΙᾎ\x15+ἇιἏΙᾏ\x15\x1dἀιᾀἈΙ\x15\x1dἁιᾁἉΙ\x15\x1dἂιᾂἊΙ\x15\x1dἃιᾃἋΙ" + + "\x15\x1dἄιᾄἌΙ\x15\x1dἅιᾅἍΙ\x15\x1dἆιᾆἎΙ\x15\x1dἇιᾇἏΙ\x15+ἠιἨΙᾘ\x15+ἡιἩΙᾙ" + + "\x15+ἢιἪΙᾚ\x15+ἣιἫΙᾛ\x15+ἤιἬΙᾜ\x15+ἥιἭΙᾝ\x15+ἦιἮΙᾞ\x15+ἧιἯΙᾟ\x15\x1dἠιᾐἨ" + + "Ι\x15\x1dἡιᾑἩΙ\x15\x1dἢιᾒἪΙ\x15\x1dἣιᾓἫΙ\x15\x1dἤιᾔἬΙ\x15\x1dἥιᾕἭΙ\x15" + + "\x1dἦιᾖἮΙ\x15\x1dἧιᾗἯΙ\x15+ὠιὨΙᾨ\x15+ὡιὩΙᾩ\x15+ὢιὪΙᾪ\x15+ὣιὫΙᾫ\x15+ὤιὬΙᾬ" + + "\x15+ὥιὭΙᾭ\x15+ὦιὮΙᾮ\x15+ὧιὯΙᾯ\x15\x1dὠιᾠὨΙ\x15\x1dὡιᾡὩΙ\x15\x1dὢιᾢὪΙ" + + "\x15\x1dὣιᾣὫΙ\x15\x1dὤιᾤὬΙ\x15\x1dὥιᾥὭΙ\x15\x1dὦιᾦὮΙ\x15\x1dὧιᾧὯΙ\x15-ὰι" + + "ᾺΙᾺͅ\x14#αιΑΙᾼ\x14$άιΆΙΆͅ\x14 ᾶΑ͂\x166ᾶιΑ͂Ιᾼ͂\x14\x1cαιᾳΑΙ\x12\x10ι" + + "Ι\x15-ὴιῊΙῊͅ\x14#ηιΗΙῌ\x14$ήιΉΙΉͅ\x14 ῆΗ͂\x166ῆιΗ͂Ιῌ͂\x14\x1cηιῃΗΙ" + + "\x160ῒΪ̀\x160ΐΪ́\x14 ῖΙ͂\x160ῗΪ͂\x160ῢΫ̀\x160ΰΫ́\x14 ῤΡ" + + "̓\x14 ῦΥ͂\x160ῧΫ͂\x15-ὼιῺΙῺͅ\x14#ωιΩΙῼ\x14$ώιΏΙΏͅ\x14 ῶΩ͂\x166ῶιΩ" + + "͂Ιῼ͂\x14\x1cωιῳΩΙ\x12\x10ωω\x11\x08kk\x12\x10åå\x12\x10ɫɫ\x12\x10ɽɽ" + + "\x10\x10Ⱥ\x10\x10Ⱦ\x12\x10ɑɑ\x12\x10ɱɱ\x12\x10ɐɐ\x12\x10ɒɒ\x12\x10ȿȿ\x12" + + "\x10ɀɀ\x12\x10ɥɥ\x12\x10ɦɦ\x12\x10ɜɜ\x12\x10ɡɡ\x12\x10ɬɬ\x12\x10ɪɪ\x12" + + "\x10ʞʞ\x12\x10ʇʇ\x12\x10ʝʝ\x12\x12ffFFFf\x12\x12fiFIFi\x12\x12flFLFl\x13" + + "\x1bffiFFIFfi\x13\x1bfflFFLFfl\x12\x12stSTSt\x12\x12stSTSt\x14$մնՄՆՄն" + + "\x14$մեՄԵՄե\x14$միՄԻՄի\x14$վնՎՆՎն\x14$մխՄԽՄխ" + +// 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 *caseTrie) lookup(s []byte) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return caseValues[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 := caseIndex[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 := caseIndex[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 = caseIndex[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 := caseIndex[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 = caseIndex[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 = caseIndex[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 *caseTrie) lookupUnsafe(s []byte) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return caseValues[c0] + } + i := caseIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = caseIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = caseIndex[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 *caseTrie) lookupString(s string) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return caseValues[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 := caseIndex[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 := caseIndex[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 = caseIndex[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 := caseIndex[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 = caseIndex[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 = caseIndex[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 *caseTrie) lookupStringUnsafe(s string) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return caseValues[c0] + } + i := caseIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = caseIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = caseIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// caseTrie. Total size: 11742 bytes (11.47 KiB). Checksum: 147a11466b427436. +type caseTrie struct{} + +func newCaseTrie(i int) *caseTrie { + return &caseTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *caseTrie) lookupValue(n uint32, b byte) uint16 { + switch { + case n < 18: + return uint16(caseValues[n<<6+uint32(b)]) + default: + n -= 18 + return uint16(sparse.lookup(n, b)) + } +} + +// caseValues: 20 blocks, 1280 entries, 2560 bytes +// The third block is the zero block. +var caseValues = [1280]uint16{ + // Block 0x0, offset 0x0 + 0x27: 0x0054, + 0x2e: 0x0054, + 0x30: 0x0010, 0x31: 0x0010, 0x32: 0x0010, 0x33: 0x0010, 0x34: 0x0010, 0x35: 0x0010, + 0x36: 0x0010, 0x37: 0x0010, 0x38: 0x0010, 0x39: 0x0010, 0x3a: 0x0054, + // Block 0x1, offset 0x40 + 0x41: 0x2013, 0x42: 0x2013, 0x43: 0x2013, 0x44: 0x2013, 0x45: 0x2013, + 0x46: 0x2013, 0x47: 0x2013, 0x48: 0x2013, 0x49: 0x2013, 0x4a: 0x2013, 0x4b: 0x2013, + 0x4c: 0x2013, 0x4d: 0x2013, 0x4e: 0x2013, 0x4f: 0x2013, 0x50: 0x2013, 0x51: 0x2013, + 0x52: 0x2013, 0x53: 0x2013, 0x54: 0x2013, 0x55: 0x2013, 0x56: 0x2013, 0x57: 0x2013, + 0x58: 0x2013, 0x59: 0x2013, 0x5a: 0x2013, + 0x5e: 0x0004, 0x5f: 0x0010, 0x60: 0x0004, 0x61: 0x2012, 0x62: 0x2012, 0x63: 0x2012, + 0x64: 0x2012, 0x65: 0x2012, 0x66: 0x2012, 0x67: 0x2012, 0x68: 0x2012, 0x69: 0x2012, + 0x6a: 0x2012, 0x6b: 0x2012, 0x6c: 0x2012, 0x6d: 0x2012, 0x6e: 0x2012, 0x6f: 0x2012, + 0x70: 0x2012, 0x71: 0x2012, 0x72: 0x2012, 0x73: 0x2012, 0x74: 0x2012, 0x75: 0x2012, + 0x76: 0x2012, 0x77: 0x2012, 0x78: 0x2012, 0x79: 0x2012, 0x7a: 0x2012, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc0: 0x0852, 0xc1: 0x0b53, 0xc2: 0x0113, 0xc3: 0x0112, 0xc4: 0x0113, 0xc5: 0x0112, + 0xc6: 0x0b53, 0xc7: 0x0f13, 0xc8: 0x0f12, 0xc9: 0x0e53, 0xca: 0x1153, 0xcb: 0x0713, + 0xcc: 0x0712, 0xcd: 0x0012, 0xce: 0x1453, 0xcf: 0x1753, 0xd0: 0x1a53, 0xd1: 0x0313, + 0xd2: 0x0312, 0xd3: 0x1d53, 0xd4: 0x2053, 0xd5: 0x2352, 0xd6: 0x2653, 0xd7: 0x2653, + 0xd8: 0x0113, 0xd9: 0x0112, 0xda: 0x2952, 0xdb: 0x0012, 0xdc: 0x1d53, 0xdd: 0x2c53, + 0xde: 0x2f52, 0xdf: 0x3253, 0xe0: 0x0113, 0xe1: 0x0112, 0xe2: 0x0113, 0xe3: 0x0112, + 0xe4: 0x0113, 0xe5: 0x0112, 0xe6: 0x3553, 0xe7: 0x0f13, 0xe8: 0x0f12, 0xe9: 0x3853, + 0xea: 0x0012, 0xeb: 0x0012, 0xec: 0x0113, 0xed: 0x0112, 0xee: 0x3553, 0xef: 0x1f13, + 0xf0: 0x1f12, 0xf1: 0x3b53, 0xf2: 0x3e53, 0xf3: 0x0713, 0xf4: 0x0712, 0xf5: 0x0313, + 0xf6: 0x0312, 0xf7: 0x4153, 0xf8: 0x0113, 0xf9: 0x0112, 0xfa: 0x0012, 0xfb: 0x0010, + 0xfc: 0x0113, 0xfd: 0x0112, 0xfe: 0x0012, 0xff: 0x4452, + // Block 0x4, offset 0x100 + 0x100: 0x0010, 0x101: 0x0010, 0x102: 0x0010, 0x103: 0x0010, 0x104: 0x04cb, 0x105: 0x05c9, + 0x106: 0x06ca, 0x107: 0x078b, 0x108: 0x0889, 0x109: 0x098a, 0x10a: 0x0a4b, 0x10b: 0x0b49, + 0x10c: 0x0c4a, 0x10d: 0x0313, 0x10e: 0x0312, 0x10f: 0x1f13, 0x110: 0x1f12, 0x111: 0x0313, + 0x112: 0x0312, 0x113: 0x0713, 0x114: 0x0712, 0x115: 0x0313, 0x116: 0x0312, 0x117: 0x0f13, + 0x118: 0x0f12, 0x119: 0x0313, 0x11a: 0x0312, 0x11b: 0x0713, 0x11c: 0x0712, 0x11d: 0x1452, + 0x11e: 0x0113, 0x11f: 0x0112, 0x120: 0x0113, 0x121: 0x0112, 0x122: 0x0113, 0x123: 0x0112, + 0x124: 0x0113, 0x125: 0x0112, 0x126: 0x0113, 0x127: 0x0112, 0x128: 0x0113, 0x129: 0x0112, + 0x12a: 0x0113, 0x12b: 0x0112, 0x12c: 0x0113, 0x12d: 0x0112, 0x12e: 0x0113, 0x12f: 0x0112, + 0x130: 0x0d0a, 0x131: 0x0e0b, 0x132: 0x0f09, 0x133: 0x100a, 0x134: 0x0113, 0x135: 0x0112, + 0x136: 0x2353, 0x137: 0x4453, 0x138: 0x0113, 0x139: 0x0112, 0x13a: 0x0113, 0x13b: 0x0112, + 0x13c: 0x0113, 0x13d: 0x0112, 0x13e: 0x0113, 0x13f: 0x0112, + // Block 0x5, offset 0x140 + 0x140: 0x136a, 0x141: 0x0313, 0x142: 0x0312, 0x143: 0x0853, 0x144: 0x4753, 0x145: 0x4a53, + 0x146: 0x0113, 0x147: 0x0112, 0x148: 0x0113, 0x149: 0x0112, 0x14a: 0x0113, 0x14b: 0x0112, + 0x14c: 0x0113, 0x14d: 0x0112, 0x14e: 0x0113, 0x14f: 0x0112, 0x150: 0x140a, 0x151: 0x14aa, + 0x152: 0x154a, 0x153: 0x0b52, 0x154: 0x0b52, 0x155: 0x0012, 0x156: 0x0e52, 0x157: 0x1152, + 0x158: 0x0012, 0x159: 0x1752, 0x15a: 0x0012, 0x15b: 0x1a52, 0x15c: 0x15ea, 0x15d: 0x0012, + 0x15e: 0x0012, 0x15f: 0x0012, 0x160: 0x1d52, 0x161: 0x168a, 0x162: 0x0012, 0x163: 0x2052, + 0x164: 0x0012, 0x165: 0x172a, 0x166: 0x17ca, 0x167: 0x0012, 0x168: 0x2652, 0x169: 0x2652, + 0x16a: 0x186a, 0x16b: 0x190a, 0x16c: 0x19aa, 0x16d: 0x0012, 0x16e: 0x0012, 0x16f: 0x1d52, + 0x170: 0x0012, 0x171: 0x1a4a, 0x172: 0x2c52, 0x173: 0x0012, 0x174: 0x0012, 0x175: 0x3252, + 0x176: 0x0012, 0x177: 0x0012, 0x178: 0x0012, 0x179: 0x0012, 0x17a: 0x0012, 0x17b: 0x0012, + 0x17c: 0x0012, 0x17d: 0x1aea, 0x17e: 0x0012, 0x17f: 0x0012, + // Block 0x6, offset 0x180 + 0x180: 0x3552, 0x181: 0x0012, 0x182: 0x0012, 0x183: 0x3852, 0x184: 0x0012, 0x185: 0x0012, + 0x186: 0x0012, 0x187: 0x1b8a, 0x188: 0x3552, 0x189: 0x4752, 0x18a: 0x3b52, 0x18b: 0x3e52, + 0x18c: 0x4a52, 0x18d: 0x0012, 0x18e: 0x0012, 0x18f: 0x0012, 0x190: 0x0012, 0x191: 0x0012, + 0x192: 0x4152, 0x193: 0x0012, 0x194: 0x0010, 0x195: 0x0012, 0x196: 0x0012, 0x197: 0x0012, + 0x198: 0x0012, 0x199: 0x0012, 0x19a: 0x0012, 0x19b: 0x0012, 0x19c: 0x0012, 0x19d: 0x1c2a, + 0x19e: 0x1cca, 0x19f: 0x0012, 0x1a0: 0x0012, 0x1a1: 0x0012, 0x1a2: 0x0012, 0x1a3: 0x0012, + 0x1a4: 0x0012, 0x1a5: 0x0012, 0x1a6: 0x0012, 0x1a7: 0x0012, 0x1a8: 0x0012, 0x1a9: 0x0012, + 0x1aa: 0x0012, 0x1ab: 0x0012, 0x1ac: 0x0012, 0x1ad: 0x0012, 0x1ae: 0x0012, 0x1af: 0x0012, + 0x1b0: 0x0015, 0x1b1: 0x0015, 0x1b2: 0x0015, 0x1b3: 0x0015, 0x1b4: 0x0015, 0x1b5: 0x0015, + 0x1b6: 0x0015, 0x1b7: 0x0015, 0x1b8: 0x0015, 0x1b9: 0x0014, 0x1ba: 0x0014, 0x1bb: 0x0014, + 0x1bc: 0x0014, 0x1bd: 0x0014, 0x1be: 0x0014, 0x1bf: 0x0014, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x0024, 0x1c1: 0x0024, 0x1c2: 0x0024, 0x1c3: 0x0024, 0x1c4: 0x0024, 0x1c5: 0x1d6d, + 0x1c6: 0x0024, 0x1c7: 0x0034, 0x1c8: 0x0034, 0x1c9: 0x0034, 0x1ca: 0x0024, 0x1cb: 0x0024, + 0x1cc: 0x0024, 0x1cd: 0x0034, 0x1ce: 0x0034, 0x1cf: 0x0014, 0x1d0: 0x0024, 0x1d1: 0x0024, + 0x1d2: 0x0024, 0x1d3: 0x0034, 0x1d4: 0x0034, 0x1d5: 0x0034, 0x1d6: 0x0034, 0x1d7: 0x0024, + 0x1d8: 0x0034, 0x1d9: 0x0034, 0x1da: 0x0034, 0x1db: 0x0024, 0x1dc: 0x0034, 0x1dd: 0x0034, + 0x1de: 0x0034, 0x1df: 0x0034, 0x1e0: 0x0034, 0x1e1: 0x0034, 0x1e2: 0x0034, 0x1e3: 0x0024, + 0x1e4: 0x0024, 0x1e5: 0x0024, 0x1e6: 0x0024, 0x1e7: 0x0024, 0x1e8: 0x0024, 0x1e9: 0x0024, + 0x1ea: 0x0024, 0x1eb: 0x0024, 0x1ec: 0x0024, 0x1ed: 0x0024, 0x1ee: 0x0024, 0x1ef: 0x0024, + 0x1f0: 0x0113, 0x1f1: 0x0112, 0x1f2: 0x0113, 0x1f3: 0x0112, 0x1f4: 0x0014, 0x1f5: 0x0004, + 0x1f6: 0x0113, 0x1f7: 0x0112, 0x1fa: 0x0015, 0x1fb: 0x4d52, + 0x1fc: 0x5052, 0x1fd: 0x5052, 0x1ff: 0x5353, + // Block 0x8, offset 0x200 + 0x204: 0x0004, 0x205: 0x0004, + 0x206: 0x2a13, 0x207: 0x0054, 0x208: 0x2513, 0x209: 0x2713, 0x20a: 0x2513, + 0x20c: 0x5653, 0x20e: 0x5953, 0x20f: 0x5c53, 0x210: 0x1e2a, 0x211: 0x2013, + 0x212: 0x2013, 0x213: 0x2013, 0x214: 0x2013, 0x215: 0x2013, 0x216: 0x2013, 0x217: 0x2013, + 0x218: 0x2013, 0x219: 0x2013, 0x21a: 0x2013, 0x21b: 0x2013, 0x21c: 0x2013, 0x21d: 0x2013, + 0x21e: 0x2013, 0x21f: 0x2013, 0x220: 0x5f53, 0x221: 0x5f53, 0x223: 0x5f53, + 0x224: 0x5f53, 0x225: 0x5f53, 0x226: 0x5f53, 0x227: 0x5f53, 0x228: 0x5f53, 0x229: 0x5f53, + 0x22a: 0x5f53, 0x22b: 0x5f53, 0x22c: 0x2a12, 0x22d: 0x2512, 0x22e: 0x2712, 0x22f: 0x2512, + 0x230: 0x1fea, 0x231: 0x2012, 0x232: 0x2012, 0x233: 0x2012, 0x234: 0x2012, 0x235: 0x2012, + 0x236: 0x2012, 0x237: 0x2012, 0x238: 0x2012, 0x239: 0x2012, 0x23a: 0x2012, 0x23b: 0x2012, + 0x23c: 0x2012, 0x23d: 0x2012, 0x23e: 0x2012, 0x23f: 0x2012, + // Block 0x9, offset 0x240 + 0x240: 0x5f52, 0x241: 0x5f52, 0x242: 0x21aa, 0x243: 0x5f52, 0x244: 0x5f52, 0x245: 0x5f52, + 0x246: 0x5f52, 0x247: 0x5f52, 0x248: 0x5f52, 0x249: 0x5f52, 0x24a: 0x5f52, 0x24b: 0x5f52, + 0x24c: 0x5652, 0x24d: 0x5952, 0x24e: 0x5c52, 0x24f: 0x1813, 0x250: 0x226a, 0x251: 0x232a, + 0x252: 0x0013, 0x253: 0x0013, 0x254: 0x0013, 0x255: 0x23ea, 0x256: 0x24aa, 0x257: 0x1812, + 0x258: 0x0113, 0x259: 0x0112, 0x25a: 0x0113, 0x25b: 0x0112, 0x25c: 0x0113, 0x25d: 0x0112, + 0x25e: 0x0113, 0x25f: 0x0112, 0x260: 0x0113, 0x261: 0x0112, 0x262: 0x0113, 0x263: 0x0112, + 0x264: 0x0113, 0x265: 0x0112, 0x266: 0x0113, 0x267: 0x0112, 0x268: 0x0113, 0x269: 0x0112, + 0x26a: 0x0113, 0x26b: 0x0112, 0x26c: 0x0113, 0x26d: 0x0112, 0x26e: 0x0113, 0x26f: 0x0112, + 0x270: 0x256a, 0x271: 0x262a, 0x272: 0x0b12, 0x273: 0x5352, 0x274: 0x6253, 0x275: 0x26ea, + 0x277: 0x0f13, 0x278: 0x0f12, 0x279: 0x0b13, 0x27a: 0x0113, 0x27b: 0x0112, + 0x27c: 0x0012, 0x27d: 0x4d53, 0x27e: 0x5053, 0x27f: 0x5053, + // Block 0xa, offset 0x280 + 0x280: 0x0812, 0x281: 0x0812, 0x282: 0x0812, 0x283: 0x0812, 0x284: 0x0812, 0x285: 0x0812, + 0x288: 0x0813, 0x289: 0x0813, 0x28a: 0x0813, 0x28b: 0x0813, + 0x28c: 0x0813, 0x28d: 0x0813, 0x290: 0x372a, 0x291: 0x0812, + 0x292: 0x386a, 0x293: 0x0812, 0x294: 0x3a2a, 0x295: 0x0812, 0x296: 0x3bea, 0x297: 0x0812, + 0x299: 0x0813, 0x29b: 0x0813, 0x29d: 0x0813, + 0x29f: 0x0813, 0x2a0: 0x0812, 0x2a1: 0x0812, 0x2a2: 0x0812, 0x2a3: 0x0812, + 0x2a4: 0x0812, 0x2a5: 0x0812, 0x2a6: 0x0812, 0x2a7: 0x0812, 0x2a8: 0x0813, 0x2a9: 0x0813, + 0x2aa: 0x0813, 0x2ab: 0x0813, 0x2ac: 0x0813, 0x2ad: 0x0813, 0x2ae: 0x0813, 0x2af: 0x0813, + 0x2b0: 0x8b52, 0x2b1: 0x8b52, 0x2b2: 0x8e52, 0x2b3: 0x8e52, 0x2b4: 0x9152, 0x2b5: 0x9152, + 0x2b6: 0x9452, 0x2b7: 0x9452, 0x2b8: 0x9752, 0x2b9: 0x9752, 0x2ba: 0x9a52, 0x2bb: 0x9a52, + 0x2bc: 0x4d52, 0x2bd: 0x4d52, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x3daa, 0x2c1: 0x3f8a, 0x2c2: 0x416a, 0x2c3: 0x434a, 0x2c4: 0x452a, 0x2c5: 0x470a, + 0x2c6: 0x48ea, 0x2c7: 0x4aca, 0x2c8: 0x4ca9, 0x2c9: 0x4e89, 0x2ca: 0x5069, 0x2cb: 0x5249, + 0x2cc: 0x5429, 0x2cd: 0x5609, 0x2ce: 0x57e9, 0x2cf: 0x59c9, 0x2d0: 0x5baa, 0x2d1: 0x5d8a, + 0x2d2: 0x5f6a, 0x2d3: 0x614a, 0x2d4: 0x632a, 0x2d5: 0x650a, 0x2d6: 0x66ea, 0x2d7: 0x68ca, + 0x2d8: 0x6aa9, 0x2d9: 0x6c89, 0x2da: 0x6e69, 0x2db: 0x7049, 0x2dc: 0x7229, 0x2dd: 0x7409, + 0x2de: 0x75e9, 0x2df: 0x77c9, 0x2e0: 0x79aa, 0x2e1: 0x7b8a, 0x2e2: 0x7d6a, 0x2e3: 0x7f4a, + 0x2e4: 0x812a, 0x2e5: 0x830a, 0x2e6: 0x84ea, 0x2e7: 0x86ca, 0x2e8: 0x88a9, 0x2e9: 0x8a89, + 0x2ea: 0x8c69, 0x2eb: 0x8e49, 0x2ec: 0x9029, 0x2ed: 0x9209, 0x2ee: 0x93e9, 0x2ef: 0x95c9, + 0x2f0: 0x0812, 0x2f1: 0x0812, 0x2f2: 0x97aa, 0x2f3: 0x99ca, 0x2f4: 0x9b6a, + 0x2f6: 0x9d2a, 0x2f7: 0x9e6a, 0x2f8: 0x0813, 0x2f9: 0x0813, 0x2fa: 0x8b53, 0x2fb: 0x8b53, + 0x2fc: 0xa0e9, 0x2fd: 0x0004, 0x2fe: 0xa28a, 0x2ff: 0x0004, + // Block 0xc, offset 0x300 + 0x300: 0x0004, 0x301: 0x0004, 0x302: 0xa34a, 0x303: 0xa56a, 0x304: 0xa70a, + 0x306: 0xa8ca, 0x307: 0xaa0a, 0x308: 0x8e53, 0x309: 0x8e53, 0x30a: 0x9153, 0x30b: 0x9153, + 0x30c: 0xac89, 0x30d: 0x0004, 0x30e: 0x0004, 0x30f: 0x0004, 0x310: 0x0812, 0x311: 0x0812, + 0x312: 0xae2a, 0x313: 0xafea, 0x316: 0xb1aa, 0x317: 0xb2ea, + 0x318: 0x0813, 0x319: 0x0813, 0x31a: 0x9453, 0x31b: 0x9453, 0x31d: 0x0004, + 0x31e: 0x0004, 0x31f: 0x0004, 0x320: 0x0812, 0x321: 0x0812, 0x322: 0xb4aa, 0x323: 0xb66a, + 0x324: 0xb82a, 0x325: 0x0912, 0x326: 0xb96a, 0x327: 0xbaaa, 0x328: 0x0813, 0x329: 0x0813, + 0x32a: 0x9a53, 0x32b: 0x9a53, 0x32c: 0x0913, 0x32d: 0x0004, 0x32e: 0x0004, 0x32f: 0x0004, + 0x332: 0xbc6a, 0x333: 0xbe8a, 0x334: 0xc02a, + 0x336: 0xc1ea, 0x337: 0xc32a, 0x338: 0x9753, 0x339: 0x9753, 0x33a: 0x4d53, 0x33b: 0x4d53, + 0x33c: 0xc5a9, 0x33d: 0x0004, 0x33e: 0x0004, + // Block 0xd, offset 0x340 + 0x342: 0x0013, + 0x347: 0x0013, 0x34a: 0x0012, 0x34b: 0x0013, + 0x34c: 0x0013, 0x34d: 0x0013, 0x34e: 0x0012, 0x34f: 0x0012, 0x350: 0x0013, 0x351: 0x0013, + 0x352: 0x0013, 0x353: 0x0012, 0x355: 0x0013, + 0x359: 0x0013, 0x35a: 0x0013, 0x35b: 0x0013, 0x35c: 0x0013, 0x35d: 0x0013, + 0x364: 0x0013, 0x366: 0xc74b, 0x368: 0x0013, + 0x36a: 0xc80b, 0x36b: 0xc88b, 0x36c: 0x0013, 0x36d: 0x0013, 0x36f: 0x0012, + 0x370: 0x0013, 0x371: 0x0013, 0x372: 0x9d53, 0x373: 0x0013, 0x374: 0x0012, 0x375: 0x0010, + 0x376: 0x0010, 0x377: 0x0010, 0x378: 0x0010, 0x379: 0x0012, + 0x37c: 0x0012, 0x37d: 0x0012, 0x37e: 0x0013, 0x37f: 0x0013, + // Block 0xe, offset 0x380 + 0x380: 0x1a13, 0x381: 0x1a13, 0x382: 0x1e13, 0x383: 0x1e13, 0x384: 0x1a13, 0x385: 0x1a13, + 0x386: 0x2613, 0x387: 0x2613, 0x388: 0x2a13, 0x389: 0x2a13, 0x38a: 0x2e13, 0x38b: 0x2e13, + 0x38c: 0x2a13, 0x38d: 0x2a13, 0x38e: 0x2613, 0x38f: 0x2613, 0x390: 0xa052, 0x391: 0xa052, + 0x392: 0xa352, 0x393: 0xa352, 0x394: 0xa652, 0x395: 0xa652, 0x396: 0xa352, 0x397: 0xa352, + 0x398: 0xa052, 0x399: 0xa052, 0x39a: 0x1a12, 0x39b: 0x1a12, 0x39c: 0x1e12, 0x39d: 0x1e12, + 0x39e: 0x1a12, 0x39f: 0x1a12, 0x3a0: 0x2612, 0x3a1: 0x2612, 0x3a2: 0x2a12, 0x3a3: 0x2a12, + 0x3a4: 0x2e12, 0x3a5: 0x2e12, 0x3a6: 0x2a12, 0x3a7: 0x2a12, 0x3a8: 0x2612, 0x3a9: 0x2612, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x6552, 0x3c1: 0x6552, 0x3c2: 0x6552, 0x3c3: 0x6552, 0x3c4: 0x6552, 0x3c5: 0x6552, + 0x3c6: 0x6552, 0x3c7: 0x6552, 0x3c8: 0x6552, 0x3c9: 0x6552, 0x3ca: 0x6552, 0x3cb: 0x6552, + 0x3cc: 0x6552, 0x3cd: 0x6552, 0x3ce: 0x6552, 0x3cf: 0x6552, 0x3d0: 0xa952, 0x3d1: 0xa952, + 0x3d2: 0xa952, 0x3d3: 0xa952, 0x3d4: 0xa952, 0x3d5: 0xa952, 0x3d6: 0xa952, 0x3d7: 0xa952, + 0x3d8: 0xa952, 0x3d9: 0xa952, 0x3da: 0xa952, 0x3db: 0xa952, 0x3dc: 0xa952, 0x3dd: 0xa952, + 0x3de: 0xa952, 0x3e0: 0x0113, 0x3e1: 0x0112, 0x3e2: 0xc94b, 0x3e3: 0x8853, + 0x3e4: 0xca0b, 0x3e5: 0xcaca, 0x3e6: 0xcb4a, 0x3e7: 0x0f13, 0x3e8: 0x0f12, 0x3e9: 0x0313, + 0x3ea: 0x0312, 0x3eb: 0x0713, 0x3ec: 0x0712, 0x3ed: 0xcbcb, 0x3ee: 0xcc8b, 0x3ef: 0xcd4b, + 0x3f0: 0xce0b, 0x3f1: 0x0012, 0x3f2: 0x0113, 0x3f3: 0x0112, 0x3f4: 0x0012, 0x3f5: 0x0313, + 0x3f6: 0x0312, 0x3f7: 0x0012, 0x3f8: 0x0012, 0x3f9: 0x0012, 0x3fa: 0x0012, 0x3fb: 0x0012, + 0x3fc: 0x0015, 0x3fd: 0x0015, 0x3fe: 0xcecb, 0x3ff: 0xcf8b, + // Block 0x10, offset 0x400 + 0x400: 0x0113, 0x401: 0x0112, 0x402: 0x0113, 0x403: 0x0112, 0x404: 0x0113, 0x405: 0x0112, + 0x406: 0x0113, 0x407: 0x0112, 0x408: 0x0014, 0x409: 0x0004, 0x40a: 0x0004, 0x40b: 0x0713, + 0x40c: 0x0712, 0x40d: 0xd04b, 0x40e: 0x0012, 0x40f: 0x0010, 0x410: 0x0113, 0x411: 0x0112, + 0x412: 0x0113, 0x413: 0x0112, 0x414: 0x0012, 0x415: 0x0012, 0x416: 0x0113, 0x417: 0x0112, + 0x418: 0x0113, 0x419: 0x0112, 0x41a: 0x0113, 0x41b: 0x0112, 0x41c: 0x0113, 0x41d: 0x0112, + 0x41e: 0x0113, 0x41f: 0x0112, 0x420: 0x0113, 0x421: 0x0112, 0x422: 0x0113, 0x423: 0x0112, + 0x424: 0x0113, 0x425: 0x0112, 0x426: 0x0113, 0x427: 0x0112, 0x428: 0x0113, 0x429: 0x0112, + 0x42a: 0xd10b, 0x42b: 0xd1cb, 0x42c: 0xd28b, 0x42d: 0xd34b, 0x42e: 0xd40b, + 0x430: 0xd4cb, 0x431: 0xd58b, 0x432: 0xd64b, 0x433: 0xac53, 0x434: 0x0113, 0x435: 0x0112, + 0x436: 0x0113, 0x437: 0x0112, + // Block 0x11, offset 0x440 + 0x440: 0xd70a, 0x441: 0xd80a, 0x442: 0xd90a, 0x443: 0xda0a, 0x444: 0xdb6a, 0x445: 0xdcca, + 0x446: 0xddca, + 0x453: 0xdeca, 0x454: 0xe08a, 0x455: 0xe24a, 0x456: 0xe40a, 0x457: 0xe5ca, + 0x45d: 0x0010, + 0x45e: 0x0034, 0x45f: 0x0010, 0x460: 0x0010, 0x461: 0x0010, 0x462: 0x0010, 0x463: 0x0010, + 0x464: 0x0010, 0x465: 0x0010, 0x466: 0x0010, 0x467: 0x0010, 0x468: 0x0010, + 0x46a: 0x0010, 0x46b: 0x0010, 0x46c: 0x0010, 0x46d: 0x0010, 0x46e: 0x0010, 0x46f: 0x0010, + 0x470: 0x0010, 0x471: 0x0010, 0x472: 0x0010, 0x473: 0x0010, 0x474: 0x0010, 0x475: 0x0010, + 0x476: 0x0010, 0x478: 0x0010, 0x479: 0x0010, 0x47a: 0x0010, 0x47b: 0x0010, + 0x47c: 0x0010, 0x47e: 0x0010, + // Block 0x12, offset 0x480 + 0x480: 0x2213, 0x481: 0x2213, 0x482: 0x2613, 0x483: 0x2613, 0x484: 0x2213, 0x485: 0x2213, + 0x486: 0x2e13, 0x487: 0x2e13, 0x488: 0x2213, 0x489: 0x2213, 0x48a: 0x2613, 0x48b: 0x2613, + 0x48c: 0x2213, 0x48d: 0x2213, 0x48e: 0x3e13, 0x48f: 0x3e13, 0x490: 0x2213, 0x491: 0x2213, + 0x492: 0x2613, 0x493: 0x2613, 0x494: 0x2213, 0x495: 0x2213, 0x496: 0x2e13, 0x497: 0x2e13, + 0x498: 0x2213, 0x499: 0x2213, 0x49a: 0x2613, 0x49b: 0x2613, 0x49c: 0x2213, 0x49d: 0x2213, + 0x49e: 0xb553, 0x49f: 0xb553, 0x4a0: 0xb853, 0x4a1: 0xb853, 0x4a2: 0x2212, 0x4a3: 0x2212, + 0x4a4: 0x2612, 0x4a5: 0x2612, 0x4a6: 0x2212, 0x4a7: 0x2212, 0x4a8: 0x2e12, 0x4a9: 0x2e12, + 0x4aa: 0x2212, 0x4ab: 0x2212, 0x4ac: 0x2612, 0x4ad: 0x2612, 0x4ae: 0x2212, 0x4af: 0x2212, + 0x4b0: 0x3e12, 0x4b1: 0x3e12, 0x4b2: 0x2212, 0x4b3: 0x2212, 0x4b4: 0x2612, 0x4b5: 0x2612, + 0x4b6: 0x2212, 0x4b7: 0x2212, 0x4b8: 0x2e12, 0x4b9: 0x2e12, 0x4ba: 0x2212, 0x4bb: 0x2212, + 0x4bc: 0x2612, 0x4bd: 0x2612, 0x4be: 0x2212, 0x4bf: 0x2212, + // Block 0x13, offset 0x4c0 + 0x4c2: 0x0010, + 0x4c7: 0x0010, 0x4c9: 0x0010, 0x4cb: 0x0010, + 0x4cd: 0x0010, 0x4ce: 0x0010, 0x4cf: 0x0010, 0x4d1: 0x0010, + 0x4d2: 0x0010, 0x4d4: 0x0010, 0x4d7: 0x0010, + 0x4d9: 0x0010, 0x4db: 0x0010, 0x4dd: 0x0010, + 0x4df: 0x0010, 0x4e1: 0x0010, 0x4e2: 0x0010, + 0x4e4: 0x0010, 0x4e7: 0x0010, 0x4e8: 0x0010, 0x4e9: 0x0010, + 0x4ea: 0x0010, 0x4ec: 0x0010, 0x4ed: 0x0010, 0x4ee: 0x0010, 0x4ef: 0x0010, + 0x4f0: 0x0010, 0x4f1: 0x0010, 0x4f2: 0x0010, 0x4f4: 0x0010, 0x4f5: 0x0010, + 0x4f6: 0x0010, 0x4f7: 0x0010, 0x4f9: 0x0010, 0x4fa: 0x0010, 0x4fb: 0x0010, + 0x4fc: 0x0010, 0x4fe: 0x0010, +} + +// caseIndex: 25 blocks, 1600 entries, 3200 bytes +// Block 0 is the zero block. +var caseIndex = [1600]uint16{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x12, 0xc3: 0x13, 0xc4: 0x14, 0xc5: 0x15, 0xc6: 0x01, 0xc7: 0x02, + 0xc8: 0x16, 0xc9: 0x03, 0xca: 0x04, 0xcb: 0x17, 0xcc: 0x18, 0xcd: 0x05, 0xce: 0x06, 0xcf: 0x07, + 0xd0: 0x19, 0xd1: 0x1a, 0xd2: 0x1b, 0xd3: 0x1c, 0xd4: 0x1d, 0xd5: 0x1e, 0xd6: 0x1f, 0xd7: 0x20, + 0xd8: 0x21, 0xd9: 0x22, 0xda: 0x23, 0xdb: 0x24, 0xdc: 0x25, 0xdd: 0x26, 0xde: 0x27, 0xdf: 0x28, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, + 0xea: 0x06, 0xeb: 0x07, 0xec: 0x07, 0xed: 0x08, 0xef: 0x09, + 0xf0: 0x14, 0xf3: 0x16, + // Block 0x4, offset 0x100 + 0x120: 0x29, 0x121: 0x2a, 0x122: 0x2b, 0x123: 0x2c, 0x124: 0x2d, 0x125: 0x2e, 0x126: 0x2f, 0x127: 0x30, + 0x128: 0x31, 0x129: 0x32, 0x12a: 0x33, 0x12b: 0x34, 0x12c: 0x35, 0x12d: 0x36, 0x12e: 0x37, 0x12f: 0x38, + 0x130: 0x39, 0x131: 0x3a, 0x132: 0x3b, 0x133: 0x3c, 0x134: 0x3d, 0x135: 0x3e, 0x136: 0x3f, 0x137: 0x40, + 0x138: 0x41, 0x139: 0x42, 0x13a: 0x43, 0x13b: 0x44, 0x13c: 0x45, 0x13d: 0x46, 0x13e: 0x47, 0x13f: 0x48, + // Block 0x5, offset 0x140 + 0x140: 0x49, 0x141: 0x4a, 0x142: 0x4b, 0x143: 0x4c, 0x144: 0x23, 0x145: 0x23, 0x146: 0x23, 0x147: 0x23, + 0x148: 0x23, 0x149: 0x4d, 0x14a: 0x4e, 0x14b: 0x4f, 0x14c: 0x50, 0x14d: 0x51, 0x14e: 0x52, 0x14f: 0x53, + 0x150: 0x54, 0x151: 0x23, 0x152: 0x23, 0x153: 0x23, 0x154: 0x23, 0x155: 0x23, 0x156: 0x23, 0x157: 0x23, + 0x158: 0x23, 0x159: 0x55, 0x15a: 0x56, 0x15b: 0x57, 0x15c: 0x58, 0x15d: 0x59, 0x15e: 0x5a, 0x15f: 0x5b, + 0x160: 0x5c, 0x161: 0x5d, 0x162: 0x5e, 0x163: 0x5f, 0x164: 0x60, 0x165: 0x61, 0x167: 0x62, + 0x168: 0x63, 0x169: 0x64, 0x16a: 0x65, 0x16c: 0x66, 0x16d: 0x67, 0x16e: 0x68, 0x16f: 0x69, + 0x170: 0x6a, 0x171: 0x6b, 0x172: 0x6c, 0x173: 0x6d, 0x174: 0x6e, 0x175: 0x6f, 0x176: 0x70, 0x177: 0x71, + 0x178: 0x72, 0x179: 0x72, 0x17a: 0x73, 0x17b: 0x72, 0x17c: 0x74, 0x17d: 0x08, 0x17e: 0x09, 0x17f: 0x0a, + // Block 0x6, offset 0x180 + 0x180: 0x75, 0x181: 0x76, 0x182: 0x77, 0x183: 0x78, 0x184: 0x0b, 0x185: 0x79, 0x186: 0x7a, + 0x192: 0x7b, 0x193: 0x0c, + 0x1b0: 0x7c, 0x1b1: 0x0d, 0x1b2: 0x72, 0x1b3: 0x7d, 0x1b4: 0x7e, 0x1b5: 0x7f, 0x1b6: 0x80, 0x1b7: 0x81, + 0x1b8: 0x82, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x83, 0x1c2: 0x84, 0x1c3: 0x85, 0x1c4: 0x86, 0x1c5: 0x23, 0x1c6: 0x87, + // Block 0x8, offset 0x200 + 0x200: 0x88, 0x201: 0x23, 0x202: 0x23, 0x203: 0x23, 0x204: 0x23, 0x205: 0x23, 0x206: 0x23, 0x207: 0x23, + 0x208: 0x23, 0x209: 0x23, 0x20a: 0x23, 0x20b: 0x23, 0x20c: 0x23, 0x20d: 0x23, 0x20e: 0x23, 0x20f: 0x23, + 0x210: 0x23, 0x211: 0x23, 0x212: 0x89, 0x213: 0x8a, 0x214: 0x23, 0x215: 0x23, 0x216: 0x23, 0x217: 0x23, + 0x218: 0x8b, 0x219: 0x8c, 0x21a: 0x8d, 0x21b: 0x8e, 0x21c: 0x8f, 0x21d: 0x90, 0x21e: 0x0e, 0x21f: 0x91, + 0x220: 0x92, 0x221: 0x93, 0x222: 0x23, 0x223: 0x94, 0x224: 0x95, 0x225: 0x96, 0x226: 0x97, 0x227: 0x98, + 0x228: 0x99, 0x229: 0x9a, 0x22a: 0x9b, 0x22b: 0x9c, 0x22c: 0x9d, 0x22d: 0x9e, 0x22e: 0x9f, 0x22f: 0xa0, + 0x230: 0x23, 0x231: 0x23, 0x232: 0x23, 0x233: 0x23, 0x234: 0x23, 0x235: 0x23, 0x236: 0x23, 0x237: 0x23, + 0x238: 0x23, 0x239: 0x23, 0x23a: 0x23, 0x23b: 0x23, 0x23c: 0x23, 0x23d: 0x23, 0x23e: 0x23, 0x23f: 0x23, + // Block 0x9, offset 0x240 + 0x240: 0x23, 0x241: 0x23, 0x242: 0x23, 0x243: 0x23, 0x244: 0x23, 0x245: 0x23, 0x246: 0x23, 0x247: 0x23, + 0x248: 0x23, 0x249: 0x23, 0x24a: 0x23, 0x24b: 0x23, 0x24c: 0x23, 0x24d: 0x23, 0x24e: 0x23, 0x24f: 0x23, + 0x250: 0x23, 0x251: 0x23, 0x252: 0x23, 0x253: 0x23, 0x254: 0x23, 0x255: 0x23, 0x256: 0x23, 0x257: 0x23, + 0x258: 0x23, 0x259: 0x23, 0x25a: 0x23, 0x25b: 0x23, 0x25c: 0x23, 0x25d: 0x23, 0x25e: 0x23, 0x25f: 0x23, + 0x260: 0x23, 0x261: 0x23, 0x262: 0x23, 0x263: 0x23, 0x264: 0x23, 0x265: 0x23, 0x266: 0x23, 0x267: 0x23, + 0x268: 0x23, 0x269: 0x23, 0x26a: 0x23, 0x26b: 0x23, 0x26c: 0x23, 0x26d: 0x23, 0x26e: 0x23, 0x26f: 0x23, + 0x270: 0x23, 0x271: 0x23, 0x272: 0x23, 0x273: 0x23, 0x274: 0x23, 0x275: 0x23, 0x276: 0x23, 0x277: 0x23, + 0x278: 0x23, 0x279: 0x23, 0x27a: 0x23, 0x27b: 0x23, 0x27c: 0x23, 0x27d: 0x23, 0x27e: 0x23, 0x27f: 0x23, + // Block 0xa, offset 0x280 + 0x280: 0x23, 0x281: 0x23, 0x282: 0x23, 0x283: 0x23, 0x284: 0x23, 0x285: 0x23, 0x286: 0x23, 0x287: 0x23, + 0x288: 0x23, 0x289: 0x23, 0x28a: 0x23, 0x28b: 0x23, 0x28c: 0x23, 0x28d: 0x23, 0x28e: 0x23, 0x28f: 0x23, + 0x290: 0x23, 0x291: 0x23, 0x292: 0x23, 0x293: 0x23, 0x294: 0x23, 0x295: 0x23, 0x296: 0x23, 0x297: 0x23, + 0x298: 0x23, 0x299: 0x23, 0x29a: 0x23, 0x29b: 0x23, 0x29c: 0x23, 0x29d: 0x23, 0x29e: 0xa1, 0x29f: 0xa2, + // Block 0xb, offset 0x2c0 + 0x2ec: 0x0f, 0x2ed: 0xa3, 0x2ee: 0xa4, 0x2ef: 0xa5, + 0x2f0: 0x23, 0x2f1: 0x23, 0x2f2: 0x23, 0x2f3: 0x23, 0x2f4: 0xa6, 0x2f5: 0xa7, 0x2f6: 0xa8, 0x2f7: 0xa9, + 0x2f8: 0xaa, 0x2f9: 0xab, 0x2fa: 0x23, 0x2fb: 0xac, 0x2fc: 0xad, 0x2fd: 0xae, 0x2fe: 0xaf, 0x2ff: 0xb0, + // Block 0xc, offset 0x300 + 0x300: 0xb1, 0x301: 0xb2, 0x302: 0x23, 0x303: 0xb3, 0x305: 0xb4, 0x307: 0xb5, + 0x30a: 0xb6, 0x30b: 0xb7, 0x30c: 0xb8, 0x30d: 0xb9, 0x30e: 0xba, 0x30f: 0xbb, + 0x310: 0xbc, 0x311: 0xbd, 0x312: 0xbe, 0x313: 0xbf, 0x314: 0xc0, 0x315: 0xc1, + 0x318: 0x23, 0x319: 0x23, 0x31a: 0x23, 0x31b: 0x23, 0x31c: 0xc2, 0x31d: 0xc3, + 0x320: 0xc4, 0x321: 0xc5, 0x322: 0xc6, 0x323: 0xc7, 0x324: 0xc8, 0x326: 0xc9, + 0x328: 0xca, 0x329: 0xcb, 0x32a: 0xcc, 0x32b: 0xcd, 0x32c: 0x5f, 0x32d: 0xce, 0x32e: 0xcf, + 0x330: 0x23, 0x331: 0xd0, 0x332: 0xd1, 0x333: 0xd2, + // Block 0xd, offset 0x340 + 0x340: 0xd3, 0x341: 0xd4, 0x342: 0xd5, 0x343: 0xd6, 0x344: 0xd7, 0x345: 0xd8, 0x346: 0xd9, 0x347: 0xda, + 0x348: 0xdb, 0x34a: 0xdc, 0x34b: 0xdd, 0x34c: 0xde, 0x34d: 0xdf, + 0x350: 0xe0, 0x351: 0xe1, 0x352: 0xe2, 0x353: 0xe3, 0x356: 0xe4, 0x357: 0xe5, + 0x358: 0xe6, 0x359: 0xe7, 0x35a: 0xe8, 0x35b: 0xe9, 0x35c: 0xea, + 0x362: 0xeb, 0x363: 0xec, + 0x36b: 0xed, + 0x370: 0xee, 0x371: 0xef, 0x372: 0xf0, + // Block 0xe, offset 0x380 + 0x380: 0x23, 0x381: 0x23, 0x382: 0x23, 0x383: 0x23, 0x384: 0x23, 0x385: 0x23, 0x386: 0x23, 0x387: 0x23, + 0x388: 0x23, 0x389: 0x23, 0x38a: 0x23, 0x38b: 0x23, 0x38c: 0x23, 0x38d: 0x23, 0x38e: 0xf1, + 0x390: 0x23, 0x391: 0xf2, 0x392: 0x23, 0x393: 0x23, 0x394: 0x23, 0x395: 0xf3, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x23, 0x3c1: 0x23, 0x3c2: 0x23, 0x3c3: 0x23, 0x3c4: 0x23, 0x3c5: 0x23, 0x3c6: 0x23, 0x3c7: 0x23, + 0x3c8: 0x23, 0x3c9: 0x23, 0x3ca: 0x23, 0x3cb: 0x23, 0x3cc: 0x23, 0x3cd: 0x23, 0x3ce: 0x23, 0x3cf: 0x23, + 0x3d0: 0xf2, + // Block 0x10, offset 0x400 + 0x410: 0x23, 0x411: 0x23, 0x412: 0x23, 0x413: 0x23, 0x414: 0x23, 0x415: 0x23, 0x416: 0x23, 0x417: 0x23, + 0x418: 0x23, 0x419: 0xf4, + // Block 0x11, offset 0x440 + 0x460: 0x23, 0x461: 0x23, 0x462: 0x23, 0x463: 0x23, 0x464: 0x23, 0x465: 0x23, 0x466: 0x23, 0x467: 0x23, + 0x468: 0xed, 0x469: 0xf5, 0x46b: 0xf6, 0x46c: 0xf7, 0x46d: 0xf8, 0x46e: 0xf9, + 0x47c: 0x23, 0x47d: 0xfa, 0x47e: 0xfb, 0x47f: 0xfc, + // Block 0x12, offset 0x480 + 0x4b0: 0x23, 0x4b1: 0xfd, 0x4b2: 0xfe, + // Block 0x13, offset 0x4c0 + 0x4c5: 0xff, 0x4c6: 0x100, + 0x4c9: 0x101, + 0x4d0: 0x102, 0x4d1: 0x103, 0x4d2: 0x104, 0x4d3: 0x105, 0x4d4: 0x106, 0x4d5: 0x107, 0x4d6: 0x108, 0x4d7: 0x109, + 0x4d8: 0x10a, 0x4d9: 0x10b, 0x4da: 0x10c, 0x4db: 0x10d, 0x4dc: 0x10e, 0x4dd: 0x10f, 0x4de: 0x110, 0x4df: 0x111, + 0x4e8: 0x112, 0x4e9: 0x113, 0x4ea: 0x114, + // Block 0x14, offset 0x500 + 0x500: 0x115, + 0x520: 0x23, 0x521: 0x23, 0x522: 0x23, 0x523: 0x116, 0x524: 0x10, 0x525: 0x117, + 0x538: 0x118, 0x539: 0x11, 0x53a: 0x119, + // Block 0x15, offset 0x540 + 0x544: 0x11a, 0x545: 0x11b, 0x546: 0x11c, + 0x54f: 0x11d, + // Block 0x16, offset 0x580 + 0x590: 0x0a, 0x591: 0x0b, 0x592: 0x0c, 0x593: 0x0d, 0x594: 0x0e, 0x596: 0x0f, + 0x59b: 0x10, 0x59d: 0x11, 0x59e: 0x12, 0x59f: 0x13, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x11e, 0x5c1: 0x11f, 0x5c4: 0x11f, 0x5c5: 0x11f, 0x5c6: 0x11f, 0x5c7: 0x120, + // Block 0x18, offset 0x600 + 0x620: 0x15, +} + +// sparseOffsets: 272 entries, 544 bytes +var sparseOffsets = []uint16{0x0, 0x9, 0xf, 0x18, 0x24, 0x2e, 0x3a, 0x3d, 0x41, 0x44, 0x48, 0x52, 0x54, 0x59, 0x69, 0x70, 0x75, 0x83, 0x84, 0x92, 0xa1, 0xab, 0xae, 0xb4, 0xbc, 0xbe, 0xc0, 0xce, 0xd4, 0xe2, 0xed, 0xf8, 0x103, 0x10f, 0x119, 0x124, 0x12f, 0x13b, 0x147, 0x14f, 0x157, 0x161, 0x16c, 0x178, 0x17e, 0x189, 0x18e, 0x196, 0x199, 0x19e, 0x1a2, 0x1a6, 0x1ad, 0x1b6, 0x1be, 0x1bf, 0x1c8, 0x1cf, 0x1d7, 0x1dd, 0x1e3, 0x1e8, 0x1ec, 0x1ef, 0x1f1, 0x1f4, 0x1f9, 0x1fa, 0x1fc, 0x1fe, 0x200, 0x207, 0x20c, 0x210, 0x219, 0x21c, 0x21f, 0x225, 0x226, 0x231, 0x232, 0x233, 0x238, 0x245, 0x24d, 0x255, 0x25e, 0x267, 0x270, 0x275, 0x278, 0x281, 0x28e, 0x290, 0x297, 0x299, 0x2a4, 0x2a5, 0x2b0, 0x2b8, 0x2c0, 0x2c6, 0x2c7, 0x2d5, 0x2da, 0x2dd, 0x2e2, 0x2e6, 0x2ec, 0x2f1, 0x2f4, 0x2f9, 0x2fe, 0x2ff, 0x305, 0x307, 0x308, 0x30a, 0x30c, 0x30f, 0x310, 0x312, 0x315, 0x31b, 0x31f, 0x321, 0x327, 0x32e, 0x332, 0x33b, 0x33c, 0x344, 0x348, 0x34d, 0x355, 0x35b, 0x361, 0x36b, 0x370, 0x379, 0x37f, 0x386, 0x38a, 0x392, 0x394, 0x396, 0x399, 0x39b, 0x39d, 0x39e, 0x39f, 0x3a1, 0x3a3, 0x3a9, 0x3ae, 0x3b0, 0x3b6, 0x3b9, 0x3bb, 0x3c1, 0x3c6, 0x3c8, 0x3c9, 0x3ca, 0x3cb, 0x3cd, 0x3cf, 0x3d1, 0x3d4, 0x3d6, 0x3d9, 0x3e1, 0x3e4, 0x3e8, 0x3f0, 0x3f2, 0x3f3, 0x3f4, 0x3f6, 0x3fc, 0x3fe, 0x3ff, 0x401, 0x403, 0x405, 0x412, 0x413, 0x414, 0x418, 0x41a, 0x41b, 0x41c, 0x41d, 0x41e, 0x422, 0x426, 0x42c, 0x42e, 0x435, 0x438, 0x43c, 0x442, 0x44b, 0x451, 0x457, 0x461, 0x46b, 0x46d, 0x474, 0x47a, 0x480, 0x486, 0x489, 0x48f, 0x492, 0x49a, 0x49b, 0x4a2, 0x4a3, 0x4a6, 0x4a7, 0x4ad, 0x4b0, 0x4b8, 0x4b9, 0x4ba, 0x4bb, 0x4bc, 0x4be, 0x4c0, 0x4c2, 0x4c6, 0x4c7, 0x4c9, 0x4ca, 0x4cb, 0x4cd, 0x4d2, 0x4d7, 0x4db, 0x4dc, 0x4df, 0x4e3, 0x4ee, 0x4f2, 0x4fa, 0x4ff, 0x503, 0x506, 0x50a, 0x50d, 0x510, 0x515, 0x519, 0x51d, 0x521, 0x525, 0x527, 0x529, 0x52c, 0x531, 0x533, 0x538, 0x541, 0x546, 0x547, 0x54a, 0x54b, 0x54c, 0x54e, 0x54f, 0x550} + +// sparseValues: 1360 entries, 5440 bytes +var sparseValues = [1360]valueRange{ + // Block 0x0, offset 0x0 + {value: 0x0004, lo: 0xa8, hi: 0xa8}, + {value: 0x0012, lo: 0xaa, hi: 0xaa}, + {value: 0x0014, lo: 0xad, hi: 0xad}, + {value: 0x0004, lo: 0xaf, hi: 0xaf}, + {value: 0x0004, lo: 0xb4, hi: 0xb4}, + {value: 0x002a, lo: 0xb5, hi: 0xb5}, + {value: 0x0054, lo: 0xb7, hi: 0xb7}, + {value: 0x0004, lo: 0xb8, hi: 0xb8}, + {value: 0x0012, lo: 0xba, hi: 0xba}, + // Block 0x1, offset 0x9 + {value: 0x2013, lo: 0x80, hi: 0x96}, + {value: 0x2013, lo: 0x98, hi: 0x9e}, + {value: 0x00ea, lo: 0x9f, hi: 0x9f}, + {value: 0x2012, lo: 0xa0, hi: 0xb6}, + {value: 0x2012, lo: 0xb8, hi: 0xbe}, + {value: 0x0252, lo: 0xbf, hi: 0xbf}, + // Block 0x2, offset 0xf + {value: 0x0117, lo: 0x80, hi: 0xaf}, + {value: 0x01eb, lo: 0xb0, hi: 0xb0}, + {value: 0x02ea, lo: 0xb1, hi: 0xb1}, + {value: 0x0117, lo: 0xb2, hi: 0xb7}, + {value: 0x0012, lo: 0xb8, hi: 0xb8}, + {value: 0x0316, lo: 0xb9, hi: 0xba}, + {value: 0x0716, lo: 0xbb, hi: 0xbc}, + {value: 0x0316, lo: 0xbd, hi: 0xbe}, + {value: 0x0553, lo: 0xbf, hi: 0xbf}, + // Block 0x3, offset 0x18 + {value: 0x0552, lo: 0x80, hi: 0x80}, + {value: 0x0316, lo: 0x81, hi: 0x82}, + {value: 0x0716, lo: 0x83, hi: 0x84}, + {value: 0x0316, lo: 0x85, hi: 0x86}, + {value: 0x0f16, lo: 0x87, hi: 0x88}, + {value: 0x034a, lo: 0x89, hi: 0x89}, + {value: 0x0117, lo: 0x8a, hi: 0xb7}, + {value: 0x0253, lo: 0xb8, hi: 0xb8}, + {value: 0x0316, lo: 0xb9, hi: 0xba}, + {value: 0x0716, lo: 0xbb, hi: 0xbc}, + {value: 0x0316, lo: 0xbd, hi: 0xbe}, + {value: 0x044a, lo: 0xbf, hi: 0xbf}, + // Block 0x4, offset 0x24 + {value: 0x0117, lo: 0x80, hi: 0x9f}, + {value: 0x2f53, lo: 0xa0, hi: 0xa0}, + {value: 0x0012, lo: 0xa1, hi: 0xa1}, + {value: 0x0117, lo: 0xa2, hi: 0xb3}, + {value: 0x0012, lo: 0xb4, hi: 0xb9}, + {value: 0x10cb, lo: 0xba, hi: 0xba}, + {value: 0x0716, lo: 0xbb, hi: 0xbc}, + {value: 0x2953, lo: 0xbd, hi: 0xbd}, + {value: 0x11cb, lo: 0xbe, hi: 0xbe}, + {value: 0x12ca, lo: 0xbf, hi: 0xbf}, + // Block 0x5, offset 0x2e + {value: 0x0015, lo: 0x80, hi: 0x81}, + {value: 0x0004, lo: 0x82, hi: 0x85}, + {value: 0x0014, lo: 0x86, hi: 0x91}, + {value: 0x0004, lo: 0x92, hi: 0x96}, + {value: 0x0054, lo: 0x97, hi: 0x97}, + {value: 0x0004, lo: 0x98, hi: 0x9f}, + {value: 0x0015, lo: 0xa0, hi: 0xa4}, + {value: 0x0004, lo: 0xa5, hi: 0xab}, + {value: 0x0014, lo: 0xac, hi: 0xac}, + {value: 0x0004, lo: 0xad, hi: 0xad}, + {value: 0x0014, lo: 0xae, hi: 0xae}, + {value: 0x0004, lo: 0xaf, hi: 0xbf}, + // Block 0x6, offset 0x3a + {value: 0x0024, lo: 0x80, hi: 0x94}, + {value: 0x0034, lo: 0x95, hi: 0xbc}, + {value: 0x0024, lo: 0xbd, hi: 0xbf}, + // Block 0x7, offset 0x3d + {value: 0x6553, lo: 0x80, hi: 0x8f}, + {value: 0x2013, lo: 0x90, hi: 0x9f}, + {value: 0x5f53, lo: 0xa0, hi: 0xaf}, + {value: 0x2012, lo: 0xb0, hi: 0xbf}, + // Block 0x8, offset 0x41 + {value: 0x5f52, lo: 0x80, hi: 0x8f}, + {value: 0x6552, lo: 0x90, hi: 0x9f}, + {value: 0x0117, lo: 0xa0, hi: 0xbf}, + // Block 0x9, offset 0x44 + {value: 0x0117, lo: 0x80, hi: 0x81}, + {value: 0x0024, lo: 0x83, hi: 0x87}, + {value: 0x0014, lo: 0x88, hi: 0x89}, + {value: 0x0117, lo: 0x8a, hi: 0xbf}, + // Block 0xa, offset 0x48 + {value: 0x0f13, lo: 0x80, hi: 0x80}, + {value: 0x0316, lo: 0x81, hi: 0x82}, + {value: 0x0716, lo: 0x83, hi: 0x84}, + {value: 0x0316, lo: 0x85, hi: 0x86}, + {value: 0x0f16, lo: 0x87, hi: 0x88}, + {value: 0x0316, lo: 0x89, hi: 0x8a}, + {value: 0x0716, lo: 0x8b, hi: 0x8c}, + {value: 0x0316, lo: 0x8d, hi: 0x8e}, + {value: 0x0f12, lo: 0x8f, hi: 0x8f}, + {value: 0x0117, lo: 0x90, hi: 0xbf}, + // Block 0xb, offset 0x52 + {value: 0x0117, lo: 0x80, hi: 0xaf}, + {value: 0x6553, lo: 0xb1, hi: 0xbf}, + // Block 0xc, offset 0x54 + {value: 0x3013, lo: 0x80, hi: 0x8f}, + {value: 0x6853, lo: 0x90, hi: 0x96}, + {value: 0x0014, lo: 0x99, hi: 0x99}, + {value: 0x6552, lo: 0xa1, hi: 0xaf}, + {value: 0x3012, lo: 0xb0, hi: 0xbf}, + // Block 0xd, offset 0x59 + {value: 0x6852, lo: 0x80, hi: 0x86}, + {value: 0x27aa, lo: 0x87, hi: 0x87}, + {value: 0x0034, lo: 0x91, hi: 0x91}, + {value: 0x0024, lo: 0x92, hi: 0x95}, + {value: 0x0034, lo: 0x96, hi: 0x96}, + {value: 0x0024, lo: 0x97, hi: 0x99}, + {value: 0x0034, lo: 0x9a, hi: 0x9b}, + {value: 0x0024, lo: 0x9c, hi: 0xa1}, + {value: 0x0034, lo: 0xa2, hi: 0xa7}, + {value: 0x0024, lo: 0xa8, hi: 0xa9}, + {value: 0x0034, lo: 0xaa, hi: 0xaa}, + {value: 0x0024, lo: 0xab, hi: 0xac}, + {value: 0x0034, lo: 0xad, hi: 0xae}, + {value: 0x0024, lo: 0xaf, hi: 0xaf}, + {value: 0x0034, lo: 0xb0, hi: 0xbd}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0xe, offset 0x69 + {value: 0x0034, lo: 0x81, hi: 0x82}, + {value: 0x0024, lo: 0x84, hi: 0x84}, + {value: 0x0034, lo: 0x85, hi: 0x85}, + {value: 0x0034, lo: 0x87, hi: 0x87}, + {value: 0x0010, lo: 0x90, hi: 0xaa}, + {value: 0x0010, lo: 0xb0, hi: 0xb3}, + {value: 0x0054, lo: 0xb4, hi: 0xb4}, + // Block 0xf, offset 0x70 + {value: 0x0014, lo: 0x80, hi: 0x85}, + {value: 0x0024, lo: 0x90, hi: 0x97}, + {value: 0x0034, lo: 0x98, hi: 0x9a}, + {value: 0x0014, lo: 0x9c, hi: 0x9c}, + {value: 0x0010, lo: 0xa0, hi: 0xbf}, + // Block 0x10, offset 0x75 + {value: 0x0014, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x81, hi: 0x8a}, + {value: 0x0034, lo: 0x8b, hi: 0x92}, + {value: 0x0024, lo: 0x93, hi: 0x94}, + {value: 0x0034, lo: 0x95, hi: 0x96}, + {value: 0x0024, lo: 0x97, hi: 0x9b}, + {value: 0x0034, lo: 0x9c, hi: 0x9c}, + {value: 0x0024, lo: 0x9d, hi: 0x9e}, + {value: 0x0034, lo: 0x9f, hi: 0x9f}, + {value: 0x0010, lo: 0xa0, hi: 0xa9}, + {value: 0x0010, lo: 0xab, hi: 0xab}, + {value: 0x0010, lo: 0xae, hi: 0xaf}, + {value: 0x0034, lo: 0xb0, hi: 0xb0}, + {value: 0x0010, lo: 0xb1, hi: 0xbf}, + // Block 0x11, offset 0x83 + {value: 0x0010, lo: 0x80, hi: 0xbf}, + // Block 0x12, offset 0x84 + {value: 0x0010, lo: 0x80, hi: 0x93}, + {value: 0x0010, lo: 0x95, hi: 0x95}, + {value: 0x0024, lo: 0x96, hi: 0x9c}, + {value: 0x0014, lo: 0x9d, hi: 0x9d}, + {value: 0x0024, lo: 0x9f, hi: 0xa2}, + {value: 0x0034, lo: 0xa3, hi: 0xa3}, + {value: 0x0024, lo: 0xa4, hi: 0xa4}, + {value: 0x0014, lo: 0xa5, hi: 0xa6}, + {value: 0x0024, lo: 0xa7, hi: 0xa8}, + {value: 0x0034, lo: 0xaa, hi: 0xaa}, + {value: 0x0024, lo: 0xab, hi: 0xac}, + {value: 0x0034, lo: 0xad, hi: 0xad}, + {value: 0x0010, lo: 0xae, hi: 0xbc}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0x13, offset 0x92 + {value: 0x0014, lo: 0x8f, hi: 0x8f}, + {value: 0x0010, lo: 0x90, hi: 0x90}, + {value: 0x0034, lo: 0x91, hi: 0x91}, + {value: 0x0010, lo: 0x92, hi: 0xaf}, + {value: 0x0024, lo: 0xb0, hi: 0xb0}, + {value: 0x0034, lo: 0xb1, hi: 0xb1}, + {value: 0x0024, lo: 0xb2, hi: 0xb3}, + {value: 0x0034, lo: 0xb4, hi: 0xb4}, + {value: 0x0024, lo: 0xb5, hi: 0xb6}, + {value: 0x0034, lo: 0xb7, hi: 0xb9}, + {value: 0x0024, lo: 0xba, hi: 0xba}, + {value: 0x0034, lo: 0xbb, hi: 0xbc}, + {value: 0x0024, lo: 0xbd, hi: 0xbd}, + {value: 0x0034, lo: 0xbe, hi: 0xbe}, + {value: 0x0024, lo: 0xbf, hi: 0xbf}, + // Block 0x14, offset 0xa1 + {value: 0x0024, lo: 0x80, hi: 0x81}, + {value: 0x0034, lo: 0x82, hi: 0x82}, + {value: 0x0024, lo: 0x83, hi: 0x83}, + {value: 0x0034, lo: 0x84, hi: 0x84}, + {value: 0x0024, lo: 0x85, hi: 0x85}, + {value: 0x0034, lo: 0x86, hi: 0x86}, + {value: 0x0024, lo: 0x87, hi: 0x87}, + {value: 0x0034, lo: 0x88, hi: 0x88}, + {value: 0x0024, lo: 0x89, hi: 0x8a}, + {value: 0x0010, lo: 0x8d, hi: 0xbf}, + // Block 0x15, offset 0xab + {value: 0x0010, lo: 0x80, hi: 0xa5}, + {value: 0x0014, lo: 0xa6, hi: 0xb0}, + {value: 0x0010, lo: 0xb1, hi: 0xb1}, + // Block 0x16, offset 0xae + {value: 0x0010, lo: 0x80, hi: 0xaa}, + {value: 0x0024, lo: 0xab, hi: 0xb1}, + {value: 0x0034, lo: 0xb2, hi: 0xb2}, + {value: 0x0024, lo: 0xb3, hi: 0xb3}, + {value: 0x0014, lo: 0xb4, hi: 0xb5}, + {value: 0x0014, lo: 0xba, hi: 0xba}, + // Block 0x17, offset 0xb4 + {value: 0x0010, lo: 0x80, hi: 0x95}, + {value: 0x0024, lo: 0x96, hi: 0x99}, + {value: 0x0014, lo: 0x9a, hi: 0x9a}, + {value: 0x0024, lo: 0x9b, hi: 0xa3}, + {value: 0x0014, lo: 0xa4, hi: 0xa4}, + {value: 0x0024, lo: 0xa5, hi: 0xa7}, + {value: 0x0014, lo: 0xa8, hi: 0xa8}, + {value: 0x0024, lo: 0xa9, hi: 0xad}, + // Block 0x18, offset 0xbc + {value: 0x0010, lo: 0x80, hi: 0x98}, + {value: 0x0034, lo: 0x99, hi: 0x9b}, + // Block 0x19, offset 0xbe + {value: 0x0010, lo: 0xa0, hi: 0xb4}, + {value: 0x0010, lo: 0xb6, hi: 0xbd}, + // Block 0x1a, offset 0xc0 + {value: 0x0024, lo: 0x94, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa2}, + {value: 0x0034, lo: 0xa3, hi: 0xa3}, + {value: 0x0024, lo: 0xa4, hi: 0xa5}, + {value: 0x0034, lo: 0xa6, hi: 0xa6}, + {value: 0x0024, lo: 0xa7, hi: 0xa8}, + {value: 0x0034, lo: 0xa9, hi: 0xa9}, + {value: 0x0024, lo: 0xaa, hi: 0xac}, + {value: 0x0034, lo: 0xad, hi: 0xb2}, + {value: 0x0024, lo: 0xb3, hi: 0xb5}, + {value: 0x0034, lo: 0xb6, hi: 0xb6}, + {value: 0x0024, lo: 0xb7, hi: 0xb8}, + {value: 0x0034, lo: 0xb9, hi: 0xba}, + {value: 0x0024, lo: 0xbb, hi: 0xbf}, + // Block 0x1b, offset 0xce + {value: 0x0014, lo: 0x80, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0xb9}, + {value: 0x0014, lo: 0xba, hi: 0xba}, + {value: 0x0010, lo: 0xbb, hi: 0xbb}, + {value: 0x0034, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0x1c, offset 0xd4 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x88}, + {value: 0x0010, lo: 0x89, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x8e, hi: 0x90}, + {value: 0x0024, lo: 0x91, hi: 0x91}, + {value: 0x0034, lo: 0x92, hi: 0x92}, + {value: 0x0024, lo: 0x93, hi: 0x94}, + {value: 0x0014, lo: 0x95, hi: 0x97}, + {value: 0x0010, lo: 0x98, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa3}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + {value: 0x0014, lo: 0xb1, hi: 0xb1}, + {value: 0x0010, lo: 0xb2, hi: 0xbf}, + // Block 0x1d, offset 0xe2 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8c}, + {value: 0x0010, lo: 0x8f, hi: 0x90}, + {value: 0x0010, lo: 0x93, hi: 0xa8}, + {value: 0x0010, lo: 0xaa, hi: 0xb0}, + {value: 0x0010, lo: 0xb2, hi: 0xb2}, + {value: 0x0010, lo: 0xb6, hi: 0xb9}, + {value: 0x0034, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0x1e, offset 0xed + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x84}, + {value: 0x0010, lo: 0x87, hi: 0x88}, + {value: 0x0010, lo: 0x8b, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x8e, hi: 0x8e}, + {value: 0x0010, lo: 0x97, hi: 0x97}, + {value: 0x0010, lo: 0x9c, hi: 0x9d}, + {value: 0x0010, lo: 0x9f, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa3}, + {value: 0x0010, lo: 0xa6, hi: 0xb1}, + // Block 0x1f, offset 0xf8 + {value: 0x0014, lo: 0x81, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8a}, + {value: 0x0010, lo: 0x8f, hi: 0x90}, + {value: 0x0010, lo: 0x93, hi: 0xa8}, + {value: 0x0010, lo: 0xaa, hi: 0xb0}, + {value: 0x0010, lo: 0xb2, hi: 0xb3}, + {value: 0x0010, lo: 0xb5, hi: 0xb6}, + {value: 0x0010, lo: 0xb8, hi: 0xb9}, + {value: 0x0034, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbe, hi: 0xbf}, + // Block 0x20, offset 0x103 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x82}, + {value: 0x0014, lo: 0x87, hi: 0x88}, + {value: 0x0014, lo: 0x8b, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0014, lo: 0x91, hi: 0x91}, + {value: 0x0010, lo: 0x99, hi: 0x9c}, + {value: 0x0010, lo: 0x9e, hi: 0x9e}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + {value: 0x0014, lo: 0xb0, hi: 0xb1}, + {value: 0x0010, lo: 0xb2, hi: 0xb4}, + {value: 0x0014, lo: 0xb5, hi: 0xb5}, + // Block 0x21, offset 0x10f + {value: 0x0014, lo: 0x81, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8d}, + {value: 0x0010, lo: 0x8f, hi: 0x91}, + {value: 0x0010, lo: 0x93, hi: 0xa8}, + {value: 0x0010, lo: 0xaa, hi: 0xb0}, + {value: 0x0010, lo: 0xb2, hi: 0xb3}, + {value: 0x0010, lo: 0xb5, hi: 0xb9}, + {value: 0x0034, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0x22, offset 0x119 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x85}, + {value: 0x0014, lo: 0x87, hi: 0x88}, + {value: 0x0010, lo: 0x89, hi: 0x89}, + {value: 0x0010, lo: 0x8b, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0x90}, + {value: 0x0010, lo: 0xa0, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa3}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + {value: 0x0010, lo: 0xb9, hi: 0xb9}, + // Block 0x23, offset 0x124 + {value: 0x0014, lo: 0x81, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8c}, + {value: 0x0010, lo: 0x8f, hi: 0x90}, + {value: 0x0010, lo: 0x93, hi: 0xa8}, + {value: 0x0010, lo: 0xaa, hi: 0xb0}, + {value: 0x0010, lo: 0xb2, hi: 0xb3}, + {value: 0x0010, lo: 0xb5, hi: 0xb9}, + {value: 0x0034, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbe}, + {value: 0x0014, lo: 0xbf, hi: 0xbf}, + // Block 0x24, offset 0x12f + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x84}, + {value: 0x0010, lo: 0x87, hi: 0x88}, + {value: 0x0010, lo: 0x8b, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0014, lo: 0x96, hi: 0x96}, + {value: 0x0010, lo: 0x97, hi: 0x97}, + {value: 0x0010, lo: 0x9c, hi: 0x9d}, + {value: 0x0010, lo: 0x9f, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa3}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + {value: 0x0010, lo: 0xb1, hi: 0xb1}, + // Block 0x25, offset 0x13b + {value: 0x0014, lo: 0x82, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8a}, + {value: 0x0010, lo: 0x8e, hi: 0x90}, + {value: 0x0010, lo: 0x92, hi: 0x95}, + {value: 0x0010, lo: 0x99, hi: 0x9a}, + {value: 0x0010, lo: 0x9c, hi: 0x9c}, + {value: 0x0010, lo: 0x9e, hi: 0x9f}, + {value: 0x0010, lo: 0xa3, hi: 0xa4}, + {value: 0x0010, lo: 0xa8, hi: 0xaa}, + {value: 0x0010, lo: 0xae, hi: 0xb9}, + {value: 0x0010, lo: 0xbe, hi: 0xbf}, + // Block 0x26, offset 0x147 + {value: 0x0014, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x81, hi: 0x82}, + {value: 0x0010, lo: 0x86, hi: 0x88}, + {value: 0x0010, lo: 0x8a, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0x90}, + {value: 0x0010, lo: 0x97, hi: 0x97}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + // Block 0x27, offset 0x14f + {value: 0x0014, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x81, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8c}, + {value: 0x0010, lo: 0x8e, hi: 0x90}, + {value: 0x0010, lo: 0x92, hi: 0xa8}, + {value: 0x0010, lo: 0xaa, hi: 0xb9}, + {value: 0x0010, lo: 0xbd, hi: 0xbd}, + {value: 0x0014, lo: 0xbe, hi: 0xbf}, + // Block 0x28, offset 0x157 + {value: 0x0014, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x81, hi: 0x84}, + {value: 0x0014, lo: 0x86, hi: 0x88}, + {value: 0x0014, lo: 0x8a, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0034, lo: 0x95, hi: 0x96}, + {value: 0x0010, lo: 0x98, hi: 0x9a}, + {value: 0x0010, lo: 0xa0, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa3}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + // Block 0x29, offset 0x161 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8c}, + {value: 0x0010, lo: 0x8e, hi: 0x90}, + {value: 0x0010, lo: 0x92, hi: 0xa8}, + {value: 0x0010, lo: 0xaa, hi: 0xb3}, + {value: 0x0010, lo: 0xb5, hi: 0xb9}, + {value: 0x0034, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbe}, + {value: 0x0014, lo: 0xbf, hi: 0xbf}, + // Block 0x2a, offset 0x16c + {value: 0x0010, lo: 0x80, hi: 0x84}, + {value: 0x0014, lo: 0x86, hi: 0x86}, + {value: 0x0010, lo: 0x87, hi: 0x88}, + {value: 0x0010, lo: 0x8a, hi: 0x8b}, + {value: 0x0014, lo: 0x8c, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x95, hi: 0x96}, + {value: 0x0010, lo: 0x9e, hi: 0x9e}, + {value: 0x0010, lo: 0xa0, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa3}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + {value: 0x0010, lo: 0xb1, hi: 0xb2}, + // Block 0x2b, offset 0x178 + {value: 0x0014, lo: 0x81, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8c}, + {value: 0x0010, lo: 0x8e, hi: 0x90}, + {value: 0x0010, lo: 0x92, hi: 0xba}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0x2c, offset 0x17e + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x84}, + {value: 0x0010, lo: 0x86, hi: 0x88}, + {value: 0x0010, lo: 0x8a, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x8e, hi: 0x8e}, + {value: 0x0010, lo: 0x94, hi: 0x97}, + {value: 0x0010, lo: 0x9f, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa3}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + {value: 0x0010, lo: 0xba, hi: 0xbf}, + // Block 0x2d, offset 0x189 + {value: 0x0010, lo: 0x82, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x96}, + {value: 0x0010, lo: 0x9a, hi: 0xb1}, + {value: 0x0010, lo: 0xb3, hi: 0xbb}, + {value: 0x0010, lo: 0xbd, hi: 0xbd}, + // Block 0x2e, offset 0x18e + {value: 0x0010, lo: 0x80, hi: 0x86}, + {value: 0x0034, lo: 0x8a, hi: 0x8a}, + {value: 0x0010, lo: 0x8f, hi: 0x91}, + {value: 0x0014, lo: 0x92, hi: 0x94}, + {value: 0x0014, lo: 0x96, hi: 0x96}, + {value: 0x0010, lo: 0x98, hi: 0x9f}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + {value: 0x0010, lo: 0xb2, hi: 0xb3}, + // Block 0x2f, offset 0x196 + {value: 0x0014, lo: 0xb1, hi: 0xb1}, + {value: 0x0014, lo: 0xb4, hi: 0xb7}, + {value: 0x0034, lo: 0xb8, hi: 0xba}, + // Block 0x30, offset 0x199 + {value: 0x0004, lo: 0x86, hi: 0x86}, + {value: 0x0014, lo: 0x87, hi: 0x87}, + {value: 0x0034, lo: 0x88, hi: 0x8b}, + {value: 0x0014, lo: 0x8c, hi: 0x8e}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + // Block 0x31, offset 0x19e + {value: 0x0014, lo: 0xb1, hi: 0xb1}, + {value: 0x0014, lo: 0xb4, hi: 0xb7}, + {value: 0x0034, lo: 0xb8, hi: 0xb9}, + {value: 0x0014, lo: 0xbb, hi: 0xbc}, + // Block 0x32, offset 0x1a2 + {value: 0x0004, lo: 0x86, hi: 0x86}, + {value: 0x0034, lo: 0x88, hi: 0x8b}, + {value: 0x0014, lo: 0x8c, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + // Block 0x33, offset 0x1a6 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0034, lo: 0x98, hi: 0x99}, + {value: 0x0010, lo: 0xa0, hi: 0xa9}, + {value: 0x0034, lo: 0xb5, hi: 0xb5}, + {value: 0x0034, lo: 0xb7, hi: 0xb7}, + {value: 0x0034, lo: 0xb9, hi: 0xb9}, + {value: 0x0010, lo: 0xbe, hi: 0xbf}, + // Block 0x34, offset 0x1ad + {value: 0x0010, lo: 0x80, hi: 0x87}, + {value: 0x0010, lo: 0x89, hi: 0xac}, + {value: 0x0034, lo: 0xb1, hi: 0xb2}, + {value: 0x0014, lo: 0xb3, hi: 0xb3}, + {value: 0x0034, lo: 0xb4, hi: 0xb4}, + {value: 0x0014, lo: 0xb5, hi: 0xb9}, + {value: 0x0034, lo: 0xba, hi: 0xbd}, + {value: 0x0014, lo: 0xbe, hi: 0xbe}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0x35, offset 0x1b6 + {value: 0x0034, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x81}, + {value: 0x0024, lo: 0x82, hi: 0x83}, + {value: 0x0034, lo: 0x84, hi: 0x84}, + {value: 0x0024, lo: 0x86, hi: 0x87}, + {value: 0x0010, lo: 0x88, hi: 0x8c}, + {value: 0x0014, lo: 0x8d, hi: 0x97}, + {value: 0x0014, lo: 0x99, hi: 0xbc}, + // Block 0x36, offset 0x1be + {value: 0x0034, lo: 0x86, hi: 0x86}, + // Block 0x37, offset 0x1bf + {value: 0x0010, lo: 0xab, hi: 0xac}, + {value: 0x0014, lo: 0xad, hi: 0xb0}, + {value: 0x0010, lo: 0xb1, hi: 0xb1}, + {value: 0x0014, lo: 0xb2, hi: 0xb6}, + {value: 0x0034, lo: 0xb7, hi: 0xb7}, + {value: 0x0010, lo: 0xb8, hi: 0xb8}, + {value: 0x0034, lo: 0xb9, hi: 0xba}, + {value: 0x0010, lo: 0xbb, hi: 0xbc}, + {value: 0x0014, lo: 0xbd, hi: 0xbe}, + // Block 0x38, offset 0x1c8 + {value: 0x0010, lo: 0x80, hi: 0x89}, + {value: 0x0010, lo: 0x96, hi: 0x97}, + {value: 0x0014, lo: 0x98, hi: 0x99}, + {value: 0x0014, lo: 0x9e, hi: 0xa0}, + {value: 0x0010, lo: 0xa2, hi: 0xa4}, + {value: 0x0010, lo: 0xa7, hi: 0xad}, + {value: 0x0014, lo: 0xb1, hi: 0xb4}, + // Block 0x39, offset 0x1cf + {value: 0x0014, lo: 0x82, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0x84}, + {value: 0x0014, lo: 0x85, hi: 0x86}, + {value: 0x0010, lo: 0x87, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x8f, hi: 0x9c}, + {value: 0x0014, lo: 0x9d, hi: 0x9d}, + {value: 0x6c53, lo: 0xa0, hi: 0xbf}, + // Block 0x3a, offset 0x1d7 + {value: 0x7053, lo: 0x80, hi: 0x85}, + {value: 0x7053, lo: 0x87, hi: 0x87}, + {value: 0x7053, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0xba}, + {value: 0x0014, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0x3b, offset 0x1dd + {value: 0x0010, lo: 0x80, hi: 0x88}, + {value: 0x0010, lo: 0x8a, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0x96}, + {value: 0x0010, lo: 0x98, hi: 0x98}, + {value: 0x0010, lo: 0x9a, hi: 0x9d}, + {value: 0x0010, lo: 0xa0, hi: 0xbf}, + // Block 0x3c, offset 0x1e3 + {value: 0x0010, lo: 0x80, hi: 0x88}, + {value: 0x0010, lo: 0x8a, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0xb0}, + {value: 0x0010, lo: 0xb2, hi: 0xb5}, + {value: 0x0010, lo: 0xb8, hi: 0xbe}, + // Block 0x3d, offset 0x1e8 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x82, hi: 0x85}, + {value: 0x0010, lo: 0x88, hi: 0x96}, + {value: 0x0010, lo: 0x98, hi: 0xbf}, + // Block 0x3e, offset 0x1ec + {value: 0x0010, lo: 0x80, hi: 0x90}, + {value: 0x0010, lo: 0x92, hi: 0x95}, + {value: 0x0010, lo: 0x98, hi: 0xbf}, + // Block 0x3f, offset 0x1ef + {value: 0x0010, lo: 0x80, hi: 0x9a}, + {value: 0x0024, lo: 0x9d, hi: 0x9f}, + // Block 0x40, offset 0x1f1 + {value: 0x0010, lo: 0x80, hi: 0x8f}, + {value: 0x7453, lo: 0xa0, hi: 0xaf}, + {value: 0x7853, lo: 0xb0, hi: 0xbf}, + // Block 0x41, offset 0x1f4 + {value: 0x7c53, lo: 0x80, hi: 0x8f}, + {value: 0x8053, lo: 0x90, hi: 0x9f}, + {value: 0x7c53, lo: 0xa0, hi: 0xaf}, + {value: 0x0813, lo: 0xb0, hi: 0xb5}, + {value: 0x0892, lo: 0xb8, hi: 0xbd}, + // Block 0x42, offset 0x1f9 + {value: 0x0010, lo: 0x81, hi: 0xbf}, + // Block 0x43, offset 0x1fa + {value: 0x0010, lo: 0x80, hi: 0xac}, + {value: 0x0010, lo: 0xaf, hi: 0xbf}, + // Block 0x44, offset 0x1fc + {value: 0x0010, lo: 0x81, hi: 0x9a}, + {value: 0x0010, lo: 0xa0, hi: 0xbf}, + // Block 0x45, offset 0x1fe + {value: 0x0010, lo: 0x80, hi: 0xaa}, + {value: 0x0010, lo: 0xae, hi: 0xb8}, + // Block 0x46, offset 0x200 + {value: 0x0010, lo: 0x80, hi: 0x8c}, + {value: 0x0010, lo: 0x8e, hi: 0x91}, + {value: 0x0014, lo: 0x92, hi: 0x93}, + {value: 0x0034, lo: 0x94, hi: 0x94}, + {value: 0x0010, lo: 0xa0, hi: 0xb1}, + {value: 0x0014, lo: 0xb2, hi: 0xb3}, + {value: 0x0034, lo: 0xb4, hi: 0xb4}, + // Block 0x47, offset 0x207 + {value: 0x0010, lo: 0x80, hi: 0x91}, + {value: 0x0014, lo: 0x92, hi: 0x93}, + {value: 0x0010, lo: 0xa0, hi: 0xac}, + {value: 0x0010, lo: 0xae, hi: 0xb0}, + {value: 0x0014, lo: 0xb2, hi: 0xb3}, + // Block 0x48, offset 0x20c + {value: 0x0014, lo: 0xb4, hi: 0xb5}, + {value: 0x0010, lo: 0xb6, hi: 0xb6}, + {value: 0x0014, lo: 0xb7, hi: 0xbd}, + {value: 0x0010, lo: 0xbe, hi: 0xbf}, + // Block 0x49, offset 0x210 + {value: 0x0010, lo: 0x80, hi: 0x85}, + {value: 0x0014, lo: 0x86, hi: 0x86}, + {value: 0x0010, lo: 0x87, hi: 0x88}, + {value: 0x0014, lo: 0x89, hi: 0x91}, + {value: 0x0034, lo: 0x92, hi: 0x92}, + {value: 0x0014, lo: 0x93, hi: 0x93}, + {value: 0x0004, lo: 0x97, hi: 0x97}, + {value: 0x0024, lo: 0x9d, hi: 0x9d}, + {value: 0x0010, lo: 0xa0, hi: 0xa9}, + // Block 0x4a, offset 0x219 + {value: 0x0014, lo: 0x8b, hi: 0x8e}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0010, lo: 0xa0, hi: 0xbf}, + // Block 0x4b, offset 0x21c + {value: 0x0010, lo: 0x80, hi: 0x82}, + {value: 0x0014, lo: 0x83, hi: 0x83}, + {value: 0x0010, lo: 0x84, hi: 0xb7}, + // Block 0x4c, offset 0x21f + {value: 0x0010, lo: 0x80, hi: 0x84}, + {value: 0x0014, lo: 0x85, hi: 0x86}, + {value: 0x0010, lo: 0x87, hi: 0xa8}, + {value: 0x0034, lo: 0xa9, hi: 0xa9}, + {value: 0x0010, lo: 0xaa, hi: 0xaa}, + {value: 0x0010, lo: 0xb0, hi: 0xbf}, + // Block 0x4d, offset 0x225 + {value: 0x0010, lo: 0x80, hi: 0xb5}, + // Block 0x4e, offset 0x226 + {value: 0x0010, lo: 0x80, hi: 0x9e}, + {value: 0x0014, lo: 0xa0, hi: 0xa2}, + {value: 0x0010, lo: 0xa3, hi: 0xa6}, + {value: 0x0014, lo: 0xa7, hi: 0xa8}, + {value: 0x0010, lo: 0xa9, hi: 0xab}, + {value: 0x0010, lo: 0xb0, hi: 0xb1}, + {value: 0x0014, lo: 0xb2, hi: 0xb2}, + {value: 0x0010, lo: 0xb3, hi: 0xb8}, + {value: 0x0034, lo: 0xb9, hi: 0xb9}, + {value: 0x0024, lo: 0xba, hi: 0xba}, + {value: 0x0034, lo: 0xbb, hi: 0xbb}, + // Block 0x4f, offset 0x231 + {value: 0x0010, lo: 0x86, hi: 0x8f}, + // Block 0x50, offset 0x232 + {value: 0x0010, lo: 0x90, hi: 0x99}, + // Block 0x51, offset 0x233 + {value: 0x0010, lo: 0x80, hi: 0x96}, + {value: 0x0024, lo: 0x97, hi: 0x97}, + {value: 0x0034, lo: 0x98, hi: 0x98}, + {value: 0x0010, lo: 0x99, hi: 0x9a}, + {value: 0x0014, lo: 0x9b, hi: 0x9b}, + // Block 0x52, offset 0x238 + {value: 0x0010, lo: 0x95, hi: 0x95}, + {value: 0x0014, lo: 0x96, hi: 0x96}, + {value: 0x0010, lo: 0x97, hi: 0x97}, + {value: 0x0014, lo: 0x98, hi: 0x9e}, + {value: 0x0034, lo: 0xa0, hi: 0xa0}, + {value: 0x0010, lo: 0xa1, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa2}, + {value: 0x0010, lo: 0xa3, hi: 0xa4}, + {value: 0x0014, lo: 0xa5, hi: 0xac}, + {value: 0x0010, lo: 0xad, hi: 0xb2}, + {value: 0x0014, lo: 0xb3, hi: 0xb4}, + {value: 0x0024, lo: 0xb5, hi: 0xbc}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0x53, offset 0x245 + {value: 0x0010, lo: 0x80, hi: 0x89}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0004, lo: 0xa7, hi: 0xa7}, + {value: 0x0024, lo: 0xb0, hi: 0xb4}, + {value: 0x0034, lo: 0xb5, hi: 0xba}, + {value: 0x0024, lo: 0xbb, hi: 0xbc}, + {value: 0x0034, lo: 0xbd, hi: 0xbd}, + {value: 0x0014, lo: 0xbe, hi: 0xbe}, + // Block 0x54, offset 0x24d + {value: 0x0014, lo: 0x80, hi: 0x83}, + {value: 0x0010, lo: 0x84, hi: 0xb3}, + {value: 0x0034, lo: 0xb4, hi: 0xb4}, + {value: 0x0010, lo: 0xb5, hi: 0xb5}, + {value: 0x0014, lo: 0xb6, hi: 0xba}, + {value: 0x0010, lo: 0xbb, hi: 0xbb}, + {value: 0x0014, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0x55, offset 0x255 + {value: 0x0010, lo: 0x80, hi: 0x81}, + {value: 0x0014, lo: 0x82, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0x83}, + {value: 0x0030, lo: 0x84, hi: 0x84}, + {value: 0x0010, lo: 0x85, hi: 0x8b}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0024, lo: 0xab, hi: 0xab}, + {value: 0x0034, lo: 0xac, hi: 0xac}, + {value: 0x0024, lo: 0xad, hi: 0xb3}, + // Block 0x56, offset 0x25e + {value: 0x0014, lo: 0x80, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa5}, + {value: 0x0010, lo: 0xa6, hi: 0xa7}, + {value: 0x0014, lo: 0xa8, hi: 0xa9}, + {value: 0x0030, lo: 0xaa, hi: 0xaa}, + {value: 0x0034, lo: 0xab, hi: 0xab}, + {value: 0x0014, lo: 0xac, hi: 0xad}, + {value: 0x0010, lo: 0xae, hi: 0xbf}, + // Block 0x57, offset 0x267 + {value: 0x0010, lo: 0x80, hi: 0xa5}, + {value: 0x0034, lo: 0xa6, hi: 0xa6}, + {value: 0x0010, lo: 0xa7, hi: 0xa7}, + {value: 0x0014, lo: 0xa8, hi: 0xa9}, + {value: 0x0010, lo: 0xaa, hi: 0xac}, + {value: 0x0014, lo: 0xad, hi: 0xad}, + {value: 0x0010, lo: 0xae, hi: 0xae}, + {value: 0x0014, lo: 0xaf, hi: 0xb1}, + {value: 0x0030, lo: 0xb2, hi: 0xb3}, + // Block 0x58, offset 0x270 + {value: 0x0010, lo: 0x80, hi: 0xab}, + {value: 0x0014, lo: 0xac, hi: 0xb3}, + {value: 0x0010, lo: 0xb4, hi: 0xb5}, + {value: 0x0014, lo: 0xb6, hi: 0xb6}, + {value: 0x0034, lo: 0xb7, hi: 0xb7}, + // Block 0x59, offset 0x275 + {value: 0x0010, lo: 0x80, hi: 0x89}, + {value: 0x0010, lo: 0x8d, hi: 0xb7}, + {value: 0x0014, lo: 0xb8, hi: 0xbd}, + // Block 0x5a, offset 0x278 + {value: 0x296a, lo: 0x80, hi: 0x80}, + {value: 0x2a2a, lo: 0x81, hi: 0x81}, + {value: 0x2aea, lo: 0x82, hi: 0x82}, + {value: 0x2baa, lo: 0x83, hi: 0x83}, + {value: 0x2c6a, lo: 0x84, hi: 0x84}, + {value: 0x2d2a, lo: 0x85, hi: 0x85}, + {value: 0x2dea, lo: 0x86, hi: 0x86}, + {value: 0x2eaa, lo: 0x87, hi: 0x87}, + {value: 0x2f6a, lo: 0x88, hi: 0x88}, + // Block 0x5b, offset 0x281 + {value: 0x0024, lo: 0x90, hi: 0x92}, + {value: 0x0034, lo: 0x94, hi: 0x99}, + {value: 0x0024, lo: 0x9a, hi: 0x9b}, + {value: 0x0034, lo: 0x9c, hi: 0x9f}, + {value: 0x0024, lo: 0xa0, hi: 0xa0}, + {value: 0x0010, lo: 0xa1, hi: 0xa1}, + {value: 0x0034, lo: 0xa2, hi: 0xa8}, + {value: 0x0010, lo: 0xa9, hi: 0xac}, + {value: 0x0034, lo: 0xad, hi: 0xad}, + {value: 0x0010, lo: 0xae, hi: 0xb3}, + {value: 0x0024, lo: 0xb4, hi: 0xb4}, + {value: 0x0010, lo: 0xb5, hi: 0xb6}, + {value: 0x0024, lo: 0xb8, hi: 0xb9}, + // Block 0x5c, offset 0x28e + {value: 0x0012, lo: 0x80, hi: 0xab}, + {value: 0x0015, lo: 0xac, hi: 0xbf}, + // Block 0x5d, offset 0x290 + {value: 0x0015, lo: 0x80, hi: 0xaa}, + {value: 0x0012, lo: 0xab, hi: 0xb7}, + {value: 0x0015, lo: 0xb8, hi: 0xb8}, + {value: 0x8452, lo: 0xb9, hi: 0xb9}, + {value: 0x0012, lo: 0xba, hi: 0xbc}, + {value: 0x8852, lo: 0xbd, hi: 0xbd}, + {value: 0x0012, lo: 0xbe, hi: 0xbf}, + // Block 0x5e, offset 0x297 + {value: 0x0012, lo: 0x80, hi: 0x9a}, + {value: 0x0015, lo: 0x9b, hi: 0xbf}, + // Block 0x5f, offset 0x299 + {value: 0x0024, lo: 0x80, hi: 0x81}, + {value: 0x0034, lo: 0x82, hi: 0x82}, + {value: 0x0024, lo: 0x83, hi: 0x89}, + {value: 0x0034, lo: 0x8a, hi: 0x8a}, + {value: 0x0024, lo: 0x8b, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x90}, + {value: 0x0024, lo: 0x91, hi: 0xb5}, + {value: 0x0024, lo: 0xbb, hi: 0xbb}, + {value: 0x0034, lo: 0xbc, hi: 0xbd}, + {value: 0x0024, lo: 0xbe, hi: 0xbe}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0x60, offset 0x2a4 + {value: 0x0117, lo: 0x80, hi: 0xbf}, + // Block 0x61, offset 0x2a5 + {value: 0x0117, lo: 0x80, hi: 0x95}, + {value: 0x306a, lo: 0x96, hi: 0x96}, + {value: 0x316a, lo: 0x97, hi: 0x97}, + {value: 0x326a, lo: 0x98, hi: 0x98}, + {value: 0x336a, lo: 0x99, hi: 0x99}, + {value: 0x346a, lo: 0x9a, hi: 0x9a}, + {value: 0x356a, lo: 0x9b, hi: 0x9b}, + {value: 0x0012, lo: 0x9c, hi: 0x9d}, + {value: 0x366b, lo: 0x9e, hi: 0x9e}, + {value: 0x0012, lo: 0x9f, hi: 0x9f}, + {value: 0x0117, lo: 0xa0, hi: 0xbf}, + // Block 0x62, offset 0x2b0 + {value: 0x0812, lo: 0x80, hi: 0x87}, + {value: 0x0813, lo: 0x88, hi: 0x8f}, + {value: 0x0812, lo: 0x90, hi: 0x95}, + {value: 0x0813, lo: 0x98, hi: 0x9d}, + {value: 0x0812, lo: 0xa0, hi: 0xa7}, + {value: 0x0813, lo: 0xa8, hi: 0xaf}, + {value: 0x0812, lo: 0xb0, hi: 0xb7}, + {value: 0x0813, lo: 0xb8, hi: 0xbf}, + // Block 0x63, offset 0x2b8 + {value: 0x0004, lo: 0x8b, hi: 0x8b}, + {value: 0x0014, lo: 0x8c, hi: 0x8f}, + {value: 0x0054, lo: 0x98, hi: 0x99}, + {value: 0x0054, lo: 0xa4, hi: 0xa4}, + {value: 0x0054, lo: 0xa7, hi: 0xa7}, + {value: 0x0014, lo: 0xaa, hi: 0xae}, + {value: 0x0010, lo: 0xaf, hi: 0xaf}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0x64, offset 0x2c0 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x94, hi: 0x94}, + {value: 0x0014, lo: 0xa0, hi: 0xa4}, + {value: 0x0014, lo: 0xa6, hi: 0xaf}, + {value: 0x0015, lo: 0xb1, hi: 0xb1}, + {value: 0x0015, lo: 0xbf, hi: 0xbf}, + // Block 0x65, offset 0x2c6 + {value: 0x0015, lo: 0x90, hi: 0x9c}, + // Block 0x66, offset 0x2c7 + {value: 0x0024, lo: 0x90, hi: 0x91}, + {value: 0x0034, lo: 0x92, hi: 0x93}, + {value: 0x0024, lo: 0x94, hi: 0x97}, + {value: 0x0034, lo: 0x98, hi: 0x9a}, + {value: 0x0024, lo: 0x9b, hi: 0x9c}, + {value: 0x0014, lo: 0x9d, hi: 0xa0}, + {value: 0x0024, lo: 0xa1, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa4}, + {value: 0x0034, lo: 0xa5, hi: 0xa6}, + {value: 0x0024, lo: 0xa7, hi: 0xa7}, + {value: 0x0034, lo: 0xa8, hi: 0xa8}, + {value: 0x0024, lo: 0xa9, hi: 0xa9}, + {value: 0x0034, lo: 0xaa, hi: 0xaf}, + {value: 0x0024, lo: 0xb0, hi: 0xb0}, + // Block 0x67, offset 0x2d5 + {value: 0x0016, lo: 0x85, hi: 0x86}, + {value: 0x0012, lo: 0x87, hi: 0x89}, + {value: 0x9d52, lo: 0x8e, hi: 0x8e}, + {value: 0x1013, lo: 0xa0, hi: 0xaf}, + {value: 0x1012, lo: 0xb0, hi: 0xbf}, + // Block 0x68, offset 0x2da + {value: 0x0010, lo: 0x80, hi: 0x82}, + {value: 0x0716, lo: 0x83, hi: 0x84}, + {value: 0x0010, lo: 0x85, hi: 0x88}, + // Block 0x69, offset 0x2dd + {value: 0xa053, lo: 0xb6, hi: 0xb7}, + {value: 0xa353, lo: 0xb8, hi: 0xb9}, + {value: 0xa653, lo: 0xba, hi: 0xbb}, + {value: 0xa353, lo: 0xbc, hi: 0xbd}, + {value: 0xa053, lo: 0xbe, hi: 0xbf}, + // Block 0x6a, offset 0x2e2 + {value: 0x3013, lo: 0x80, hi: 0x8f}, + {value: 0x6553, lo: 0x90, hi: 0x9f}, + {value: 0xa953, lo: 0xa0, hi: 0xae}, + {value: 0x3012, lo: 0xb0, hi: 0xbf}, + // Block 0x6b, offset 0x2e6 + {value: 0x0117, lo: 0x80, hi: 0xa3}, + {value: 0x0012, lo: 0xa4, hi: 0xa4}, + {value: 0x0716, lo: 0xab, hi: 0xac}, + {value: 0x0316, lo: 0xad, hi: 0xae}, + {value: 0x0024, lo: 0xaf, hi: 0xb1}, + {value: 0x0117, lo: 0xb2, hi: 0xb3}, + // Block 0x6c, offset 0x2ec + {value: 0x6c52, lo: 0x80, hi: 0x9f}, + {value: 0x7052, lo: 0xa0, hi: 0xa5}, + {value: 0x7052, lo: 0xa7, hi: 0xa7}, + {value: 0x7052, lo: 0xad, hi: 0xad}, + {value: 0x0010, lo: 0xb0, hi: 0xbf}, + // Block 0x6d, offset 0x2f1 + {value: 0x0010, lo: 0x80, hi: 0xa7}, + {value: 0x0014, lo: 0xaf, hi: 0xaf}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0x6e, offset 0x2f4 + {value: 0x0010, lo: 0x80, hi: 0x96}, + {value: 0x0010, lo: 0xa0, hi: 0xa6}, + {value: 0x0010, lo: 0xa8, hi: 0xae}, + {value: 0x0010, lo: 0xb0, hi: 0xb6}, + {value: 0x0010, lo: 0xb8, hi: 0xbe}, + // Block 0x6f, offset 0x2f9 + {value: 0x0010, lo: 0x80, hi: 0x86}, + {value: 0x0010, lo: 0x88, hi: 0x8e}, + {value: 0x0010, lo: 0x90, hi: 0x96}, + {value: 0x0010, lo: 0x98, hi: 0x9e}, + {value: 0x0024, lo: 0xa0, hi: 0xbf}, + // Block 0x70, offset 0x2fe + {value: 0x0014, lo: 0xaf, hi: 0xaf}, + // Block 0x71, offset 0x2ff + {value: 0x0014, lo: 0x85, hi: 0x85}, + {value: 0x0034, lo: 0xaa, hi: 0xad}, + {value: 0x0030, lo: 0xae, hi: 0xaf}, + {value: 0x0004, lo: 0xb1, hi: 0xb5}, + {value: 0x0014, lo: 0xbb, hi: 0xbb}, + {value: 0x0010, lo: 0xbc, hi: 0xbc}, + // Block 0x72, offset 0x305 + {value: 0x0034, lo: 0x99, hi: 0x9a}, + {value: 0x0004, lo: 0x9b, hi: 0x9e}, + // Block 0x73, offset 0x307 + {value: 0x0004, lo: 0xbc, hi: 0xbe}, + // Block 0x74, offset 0x308 + {value: 0x0010, lo: 0x85, hi: 0xad}, + {value: 0x0010, lo: 0xb1, hi: 0xbf}, + // Block 0x75, offset 0x30a + {value: 0x0010, lo: 0x80, hi: 0x8e}, + {value: 0x0010, lo: 0xa0, hi: 0xba}, + // Block 0x76, offset 0x30c + {value: 0x0010, lo: 0x80, hi: 0x94}, + {value: 0x0014, lo: 0x95, hi: 0x95}, + {value: 0x0010, lo: 0x96, hi: 0xbf}, + // Block 0x77, offset 0x30f + {value: 0x0010, lo: 0x80, hi: 0x8c}, + // Block 0x78, offset 0x310 + {value: 0x0010, lo: 0x90, hi: 0xb7}, + {value: 0x0014, lo: 0xb8, hi: 0xbd}, + // Block 0x79, offset 0x312 + {value: 0x0010, lo: 0x80, hi: 0x8b}, + {value: 0x0014, lo: 0x8c, hi: 0x8c}, + {value: 0x0010, lo: 0x90, hi: 0xab}, + // Block 0x7a, offset 0x315 + {value: 0x0117, lo: 0x80, hi: 0xad}, + {value: 0x0010, lo: 0xae, hi: 0xae}, + {value: 0x0024, lo: 0xaf, hi: 0xaf}, + {value: 0x0014, lo: 0xb0, hi: 0xb2}, + {value: 0x0024, lo: 0xb4, hi: 0xbd}, + {value: 0x0014, lo: 0xbf, hi: 0xbf}, + // Block 0x7b, offset 0x31b + {value: 0x0117, lo: 0x80, hi: 0x9b}, + {value: 0x0015, lo: 0x9c, hi: 0x9d}, + {value: 0x0024, lo: 0x9e, hi: 0x9f}, + {value: 0x0010, lo: 0xa0, hi: 0xbf}, + // Block 0x7c, offset 0x31f + {value: 0x0010, lo: 0x80, hi: 0xaf}, + {value: 0x0024, lo: 0xb0, hi: 0xb1}, + // Block 0x7d, offset 0x321 + {value: 0x0004, lo: 0x80, hi: 0x96}, + {value: 0x0014, lo: 0x97, hi: 0x9f}, + {value: 0x0004, lo: 0xa0, hi: 0xa1}, + {value: 0x0117, lo: 0xa2, hi: 0xaf}, + {value: 0x0012, lo: 0xb0, hi: 0xb1}, + {value: 0x0117, lo: 0xb2, hi: 0xbf}, + // Block 0x7e, offset 0x327 + {value: 0x0117, lo: 0x80, hi: 0xaf}, + {value: 0x0015, lo: 0xb0, hi: 0xb0}, + {value: 0x0012, lo: 0xb1, hi: 0xb8}, + {value: 0x0316, lo: 0xb9, hi: 0xba}, + {value: 0x0716, lo: 0xbb, hi: 0xbc}, + {value: 0x8453, lo: 0xbd, hi: 0xbd}, + {value: 0x0117, lo: 0xbe, hi: 0xbf}, + // Block 0x7f, offset 0x32e + {value: 0x0010, lo: 0xb7, hi: 0xb7}, + {value: 0x0015, lo: 0xb8, hi: 0xb9}, + {value: 0x0012, lo: 0xba, hi: 0xba}, + {value: 0x0010, lo: 0xbb, hi: 0xbf}, + // Block 0x80, offset 0x332 + {value: 0x0010, lo: 0x80, hi: 0x81}, + {value: 0x0014, lo: 0x82, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0x85}, + {value: 0x0034, lo: 0x86, hi: 0x86}, + {value: 0x0010, lo: 0x87, hi: 0x8a}, + {value: 0x0014, lo: 0x8b, hi: 0x8b}, + {value: 0x0010, lo: 0x8c, hi: 0xa4}, + {value: 0x0014, lo: 0xa5, hi: 0xa6}, + {value: 0x0010, lo: 0xa7, hi: 0xa7}, + // Block 0x81, offset 0x33b + {value: 0x0010, lo: 0x80, hi: 0xb3}, + // Block 0x82, offset 0x33c + {value: 0x0010, lo: 0x80, hi: 0x83}, + {value: 0x0034, lo: 0x84, hi: 0x84}, + {value: 0x0014, lo: 0x85, hi: 0x85}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0024, lo: 0xa0, hi: 0xb1}, + {value: 0x0010, lo: 0xb2, hi: 0xb7}, + {value: 0x0010, lo: 0xbb, hi: 0xbb}, + {value: 0x0010, lo: 0xbd, hi: 0xbd}, + // Block 0x83, offset 0x344 + {value: 0x0010, lo: 0x80, hi: 0xa5}, + {value: 0x0014, lo: 0xa6, hi: 0xaa}, + {value: 0x0034, lo: 0xab, hi: 0xad}, + {value: 0x0010, lo: 0xb0, hi: 0xbf}, + // Block 0x84, offset 0x348 + {value: 0x0010, lo: 0x80, hi: 0x86}, + {value: 0x0014, lo: 0x87, hi: 0x91}, + {value: 0x0010, lo: 0x92, hi: 0x92}, + {value: 0x0030, lo: 0x93, hi: 0x93}, + {value: 0x0010, lo: 0xa0, hi: 0xbc}, + // Block 0x85, offset 0x34d + {value: 0x0014, lo: 0x80, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0xb2}, + {value: 0x0034, lo: 0xb3, hi: 0xb3}, + {value: 0x0010, lo: 0xb4, hi: 0xb5}, + {value: 0x0014, lo: 0xb6, hi: 0xb9}, + {value: 0x0010, lo: 0xba, hi: 0xbb}, + {value: 0x0014, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0x86, offset 0x355 + {value: 0x0030, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x8f, hi: 0x8f}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0014, lo: 0xa5, hi: 0xa5}, + {value: 0x0004, lo: 0xa6, hi: 0xa6}, + {value: 0x0010, lo: 0xb0, hi: 0xb9}, + // Block 0x87, offset 0x35b + {value: 0x0010, lo: 0x80, hi: 0xa8}, + {value: 0x0014, lo: 0xa9, hi: 0xae}, + {value: 0x0010, lo: 0xaf, hi: 0xb0}, + {value: 0x0014, lo: 0xb1, hi: 0xb2}, + {value: 0x0010, lo: 0xb3, hi: 0xb4}, + {value: 0x0014, lo: 0xb5, hi: 0xb6}, + // Block 0x88, offset 0x361 + {value: 0x0010, lo: 0x80, hi: 0x82}, + {value: 0x0014, lo: 0x83, hi: 0x83}, + {value: 0x0010, lo: 0x84, hi: 0x8b}, + {value: 0x0014, lo: 0x8c, hi: 0x8c}, + {value: 0x0010, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0004, lo: 0xb0, hi: 0xb0}, + {value: 0x0010, lo: 0xbb, hi: 0xbb}, + {value: 0x0014, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbd}, + // Block 0x89, offset 0x36b + {value: 0x0024, lo: 0xb0, hi: 0xb0}, + {value: 0x0024, lo: 0xb2, hi: 0xb3}, + {value: 0x0034, lo: 0xb4, hi: 0xb4}, + {value: 0x0024, lo: 0xb7, hi: 0xb8}, + {value: 0x0024, lo: 0xbe, hi: 0xbf}, + // Block 0x8a, offset 0x370 + {value: 0x0024, lo: 0x81, hi: 0x81}, + {value: 0x0004, lo: 0x9d, hi: 0x9d}, + {value: 0x0010, lo: 0xa0, hi: 0xab}, + {value: 0x0014, lo: 0xac, hi: 0xad}, + {value: 0x0010, lo: 0xae, hi: 0xaf}, + {value: 0x0010, lo: 0xb2, hi: 0xb2}, + {value: 0x0014, lo: 0xb3, hi: 0xb4}, + {value: 0x0010, lo: 0xb5, hi: 0xb5}, + {value: 0x0034, lo: 0xb6, hi: 0xb6}, + // Block 0x8b, offset 0x379 + {value: 0x0010, lo: 0x81, hi: 0x86}, + {value: 0x0010, lo: 0x89, hi: 0x8e}, + {value: 0x0010, lo: 0x91, hi: 0x96}, + {value: 0x0010, lo: 0xa0, hi: 0xa6}, + {value: 0x0010, lo: 0xa8, hi: 0xae}, + {value: 0x0012, lo: 0xb0, hi: 0xbf}, + // Block 0x8c, offset 0x37f + {value: 0x0012, lo: 0x80, hi: 0x92}, + {value: 0xac52, lo: 0x93, hi: 0x93}, + {value: 0x0012, lo: 0x94, hi: 0x9a}, + {value: 0x0004, lo: 0x9b, hi: 0x9b}, + {value: 0x0015, lo: 0x9c, hi: 0x9f}, + {value: 0x0012, lo: 0xa0, hi: 0xa5}, + {value: 0x74d2, lo: 0xb0, hi: 0xbf}, + // Block 0x8d, offset 0x386 + {value: 0x78d2, lo: 0x80, hi: 0x8f}, + {value: 0x7cd2, lo: 0x90, hi: 0x9f}, + {value: 0x80d2, lo: 0xa0, hi: 0xaf}, + {value: 0x7cd2, lo: 0xb0, hi: 0xbf}, + // Block 0x8e, offset 0x38a + {value: 0x0010, lo: 0x80, hi: 0xa4}, + {value: 0x0014, lo: 0xa5, hi: 0xa5}, + {value: 0x0010, lo: 0xa6, hi: 0xa7}, + {value: 0x0014, lo: 0xa8, hi: 0xa8}, + {value: 0x0010, lo: 0xa9, hi: 0xaa}, + {value: 0x0010, lo: 0xac, hi: 0xac}, + {value: 0x0034, lo: 0xad, hi: 0xad}, + {value: 0x0010, lo: 0xb0, hi: 0xb9}, + // Block 0x8f, offset 0x392 + {value: 0x0010, lo: 0x80, hi: 0xa3}, + {value: 0x0010, lo: 0xb0, hi: 0xbf}, + // Block 0x90, offset 0x394 + {value: 0x0010, lo: 0x80, hi: 0x86}, + {value: 0x0010, lo: 0x8b, hi: 0xbb}, + // Block 0x91, offset 0x396 + {value: 0x0010, lo: 0x80, hi: 0x81}, + {value: 0x0010, lo: 0x83, hi: 0x84}, + {value: 0x0010, lo: 0x86, hi: 0xbf}, + // Block 0x92, offset 0x399 + {value: 0x0010, lo: 0x80, hi: 0xb1}, + {value: 0x0004, lo: 0xb2, hi: 0xbf}, + // Block 0x93, offset 0x39b + {value: 0x0004, lo: 0x80, hi: 0x81}, + {value: 0x0010, lo: 0x93, hi: 0xbf}, + // Block 0x94, offset 0x39d + {value: 0x0010, lo: 0x80, hi: 0xbd}, + // Block 0x95, offset 0x39e + {value: 0x0010, lo: 0x90, hi: 0xbf}, + // Block 0x96, offset 0x39f + {value: 0x0010, lo: 0x80, hi: 0x8f}, + {value: 0x0010, lo: 0x92, hi: 0xbf}, + // Block 0x97, offset 0x3a1 + {value: 0x0010, lo: 0x80, hi: 0x87}, + {value: 0x0010, lo: 0xb0, hi: 0xbb}, + // Block 0x98, offset 0x3a3 + {value: 0x0014, lo: 0x80, hi: 0x8f}, + {value: 0x0054, lo: 0x93, hi: 0x93}, + {value: 0x0024, lo: 0xa0, hi: 0xa6}, + {value: 0x0034, lo: 0xa7, hi: 0xad}, + {value: 0x0024, lo: 0xae, hi: 0xaf}, + {value: 0x0010, lo: 0xb3, hi: 0xb4}, + // Block 0x99, offset 0x3a9 + {value: 0x0010, lo: 0x8d, hi: 0x8f}, + {value: 0x0054, lo: 0x92, hi: 0x92}, + {value: 0x0054, lo: 0x95, hi: 0x95}, + {value: 0x0010, lo: 0xb0, hi: 0xb4}, + {value: 0x0010, lo: 0xb6, hi: 0xbf}, + // Block 0x9a, offset 0x3ae + {value: 0x0010, lo: 0x80, hi: 0xbc}, + {value: 0x0014, lo: 0xbf, hi: 0xbf}, + // Block 0x9b, offset 0x3b0 + {value: 0x0054, lo: 0x87, hi: 0x87}, + {value: 0x0054, lo: 0x8e, hi: 0x8e}, + {value: 0x0054, lo: 0x9a, hi: 0x9a}, + {value: 0x5f53, lo: 0xa1, hi: 0xba}, + {value: 0x0004, lo: 0xbe, hi: 0xbe}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0x9c, offset 0x3b6 + {value: 0x0004, lo: 0x80, hi: 0x80}, + {value: 0x5f52, lo: 0x81, hi: 0x9a}, + {value: 0x0004, lo: 0xb0, hi: 0xb0}, + // Block 0x9d, offset 0x3b9 + {value: 0x0014, lo: 0x9e, hi: 0x9f}, + {value: 0x0010, lo: 0xa0, hi: 0xbe}, + // Block 0x9e, offset 0x3bb + {value: 0x0010, lo: 0x82, hi: 0x87}, + {value: 0x0010, lo: 0x8a, hi: 0x8f}, + {value: 0x0010, lo: 0x92, hi: 0x97}, + {value: 0x0010, lo: 0x9a, hi: 0x9c}, + {value: 0x0004, lo: 0xa3, hi: 0xa3}, + {value: 0x0014, lo: 0xb9, hi: 0xbb}, + // Block 0x9f, offset 0x3c1 + {value: 0x0010, lo: 0x80, hi: 0x8b}, + {value: 0x0010, lo: 0x8d, hi: 0xa6}, + {value: 0x0010, lo: 0xa8, hi: 0xba}, + {value: 0x0010, lo: 0xbc, hi: 0xbd}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0xa0, offset 0x3c6 + {value: 0x0010, lo: 0x80, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0x9d}, + // Block 0xa1, offset 0x3c8 + {value: 0x0010, lo: 0x80, hi: 0xba}, + // Block 0xa2, offset 0x3c9 + {value: 0x0010, lo: 0x80, hi: 0xb4}, + // Block 0xa3, offset 0x3ca + {value: 0x0034, lo: 0xbd, hi: 0xbd}, + // Block 0xa4, offset 0x3cb + {value: 0x0010, lo: 0x80, hi: 0x9c}, + {value: 0x0010, lo: 0xa0, hi: 0xbf}, + // Block 0xa5, offset 0x3cd + {value: 0x0010, lo: 0x80, hi: 0x90}, + {value: 0x0034, lo: 0xa0, hi: 0xa0}, + // Block 0xa6, offset 0x3cf + {value: 0x0010, lo: 0x80, hi: 0x9f}, + {value: 0x0010, lo: 0xb0, hi: 0xbf}, + // Block 0xa7, offset 0x3d1 + {value: 0x0010, lo: 0x80, hi: 0x8a}, + {value: 0x0010, lo: 0x90, hi: 0xb5}, + {value: 0x0024, lo: 0xb6, hi: 0xba}, + // Block 0xa8, offset 0x3d4 + {value: 0x0010, lo: 0x80, hi: 0x9d}, + {value: 0x0010, lo: 0xa0, hi: 0xbf}, + // Block 0xa9, offset 0x3d6 + {value: 0x0010, lo: 0x80, hi: 0x83}, + {value: 0x0010, lo: 0x88, hi: 0x8f}, + {value: 0x0010, lo: 0x91, hi: 0x95}, + // Block 0xaa, offset 0x3d9 + {value: 0x2813, lo: 0x80, hi: 0x87}, + {value: 0x3813, lo: 0x88, hi: 0x8f}, + {value: 0x2813, lo: 0x90, hi: 0x97}, + {value: 0xaf53, lo: 0x98, hi: 0x9f}, + {value: 0xb253, lo: 0xa0, hi: 0xa7}, + {value: 0x2812, lo: 0xa8, hi: 0xaf}, + {value: 0x3812, lo: 0xb0, hi: 0xb7}, + {value: 0x2812, lo: 0xb8, hi: 0xbf}, + // Block 0xab, offset 0x3e1 + {value: 0xaf52, lo: 0x80, hi: 0x87}, + {value: 0xb252, lo: 0x88, hi: 0x8f}, + {value: 0x0010, lo: 0x90, hi: 0xbf}, + // Block 0xac, offset 0x3e4 + {value: 0x0010, lo: 0x80, hi: 0x9d}, + {value: 0x0010, lo: 0xa0, hi: 0xa9}, + {value: 0xb253, lo: 0xb0, hi: 0xb7}, + {value: 0xaf53, lo: 0xb8, hi: 0xbf}, + // Block 0xad, offset 0x3e8 + {value: 0x2813, lo: 0x80, hi: 0x87}, + {value: 0x3813, lo: 0x88, hi: 0x8f}, + {value: 0x2813, lo: 0x90, hi: 0x93}, + {value: 0xb252, lo: 0x98, hi: 0x9f}, + {value: 0xaf52, lo: 0xa0, hi: 0xa7}, + {value: 0x2812, lo: 0xa8, hi: 0xaf}, + {value: 0x3812, lo: 0xb0, hi: 0xb7}, + {value: 0x2812, lo: 0xb8, hi: 0xbb}, + // Block 0xae, offset 0x3f0 + {value: 0x0010, lo: 0x80, hi: 0xa7}, + {value: 0x0010, lo: 0xb0, hi: 0xbf}, + // Block 0xaf, offset 0x3f2 + {value: 0x0010, lo: 0x80, hi: 0xa3}, + // Block 0xb0, offset 0x3f3 + {value: 0x0010, lo: 0x80, hi: 0xb6}, + // Block 0xb1, offset 0x3f4 + {value: 0x0010, lo: 0x80, hi: 0x95}, + {value: 0x0010, lo: 0xa0, hi: 0xa7}, + // Block 0xb2, offset 0x3f6 + {value: 0x0010, lo: 0x80, hi: 0x85}, + {value: 0x0010, lo: 0x88, hi: 0x88}, + {value: 0x0010, lo: 0x8a, hi: 0xb5}, + {value: 0x0010, lo: 0xb7, hi: 0xb8}, + {value: 0x0010, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0xb3, offset 0x3fc + {value: 0x0010, lo: 0x80, hi: 0x95}, + {value: 0x0010, lo: 0xa0, hi: 0xb6}, + // Block 0xb4, offset 0x3fe + {value: 0x0010, lo: 0x80, hi: 0x9e}, + // Block 0xb5, offset 0x3ff + {value: 0x0010, lo: 0xa0, hi: 0xb2}, + {value: 0x0010, lo: 0xb4, hi: 0xb5}, + // Block 0xb6, offset 0x401 + {value: 0x0010, lo: 0x80, hi: 0x95}, + {value: 0x0010, lo: 0xa0, hi: 0xb9}, + // Block 0xb7, offset 0x403 + {value: 0x0010, lo: 0x80, hi: 0xb7}, + {value: 0x0010, lo: 0xbe, hi: 0xbf}, + // Block 0xb8, offset 0x405 + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x83}, + {value: 0x0014, lo: 0x85, hi: 0x86}, + {value: 0x0014, lo: 0x8c, hi: 0x8c}, + {value: 0x0034, lo: 0x8d, hi: 0x8d}, + {value: 0x0014, lo: 0x8e, hi: 0x8e}, + {value: 0x0024, lo: 0x8f, hi: 0x8f}, + {value: 0x0010, lo: 0x90, hi: 0x93}, + {value: 0x0010, lo: 0x95, hi: 0x97}, + {value: 0x0010, lo: 0x99, hi: 0xb3}, + {value: 0x0024, lo: 0xb8, hi: 0xb8}, + {value: 0x0034, lo: 0xb9, hi: 0xba}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0xb9, offset 0x412 + {value: 0x0010, lo: 0xa0, hi: 0xbc}, + // Block 0xba, offset 0x413 + {value: 0x0010, lo: 0x80, hi: 0x9c}, + // Block 0xbb, offset 0x414 + {value: 0x0010, lo: 0x80, hi: 0x87}, + {value: 0x0010, lo: 0x89, hi: 0xa4}, + {value: 0x0024, lo: 0xa5, hi: 0xa5}, + {value: 0x0034, lo: 0xa6, hi: 0xa6}, + // Block 0xbc, offset 0x418 + {value: 0x0010, lo: 0x80, hi: 0x95}, + {value: 0x0010, lo: 0xa0, hi: 0xb2}, + // Block 0xbd, offset 0x41a + {value: 0x0010, lo: 0x80, hi: 0x91}, + // Block 0xbe, offset 0x41b + {value: 0x0010, lo: 0x80, hi: 0x88}, + // Block 0xbf, offset 0x41c + {value: 0x5653, lo: 0x80, hi: 0xb2}, + // Block 0xc0, offset 0x41d + {value: 0x5652, lo: 0x80, hi: 0xb2}, + // Block 0xc1, offset 0x41e + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0014, lo: 0x81, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0xb7}, + {value: 0x0014, lo: 0xb8, hi: 0xbf}, + // Block 0xc2, offset 0x422 + {value: 0x0014, lo: 0x80, hi: 0x85}, + {value: 0x0034, lo: 0x86, hi: 0x86}, + {value: 0x0010, lo: 0xa6, hi: 0xaf}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0xc3, offset 0x426 + {value: 0x0014, lo: 0x80, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0xb2}, + {value: 0x0014, lo: 0xb3, hi: 0xb6}, + {value: 0x0010, lo: 0xb7, hi: 0xb8}, + {value: 0x0034, lo: 0xb9, hi: 0xba}, + {value: 0x0014, lo: 0xbd, hi: 0xbd}, + // Block 0xc4, offset 0x42c + {value: 0x0010, lo: 0x90, hi: 0xa8}, + {value: 0x0010, lo: 0xb0, hi: 0xb9}, + // Block 0xc5, offset 0x42e + {value: 0x0024, lo: 0x80, hi: 0x82}, + {value: 0x0010, lo: 0x83, hi: 0xa6}, + {value: 0x0014, lo: 0xa7, hi: 0xab}, + {value: 0x0010, lo: 0xac, hi: 0xac}, + {value: 0x0014, lo: 0xad, hi: 0xb2}, + {value: 0x0034, lo: 0xb3, hi: 0xb4}, + {value: 0x0010, lo: 0xb6, hi: 0xbf}, + // Block 0xc6, offset 0x435 + {value: 0x0010, lo: 0x90, hi: 0xb2}, + {value: 0x0034, lo: 0xb3, hi: 0xb3}, + {value: 0x0010, lo: 0xb6, hi: 0xb6}, + // Block 0xc7, offset 0x438 + {value: 0x0014, lo: 0x80, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0xb5}, + {value: 0x0014, lo: 0xb6, hi: 0xbe}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0xc8, offset 0x43c + {value: 0x0030, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x81, hi: 0x84}, + {value: 0x0034, lo: 0x8a, hi: 0x8a}, + {value: 0x0014, lo: 0x8b, hi: 0x8c}, + {value: 0x0010, lo: 0x90, hi: 0x9a}, + {value: 0x0010, lo: 0x9c, hi: 0x9c}, + // Block 0xc9, offset 0x442 + {value: 0x0010, lo: 0x80, hi: 0x91}, + {value: 0x0010, lo: 0x93, hi: 0xae}, + {value: 0x0014, lo: 0xaf, hi: 0xb1}, + {value: 0x0010, lo: 0xb2, hi: 0xb3}, + {value: 0x0014, lo: 0xb4, hi: 0xb4}, + {value: 0x0030, lo: 0xb5, hi: 0xb5}, + {value: 0x0034, lo: 0xb6, hi: 0xb6}, + {value: 0x0014, lo: 0xb7, hi: 0xb7}, + {value: 0x0014, lo: 0xbe, hi: 0xbe}, + // Block 0xca, offset 0x44b + {value: 0x0010, lo: 0x80, hi: 0x86}, + {value: 0x0010, lo: 0x88, hi: 0x88}, + {value: 0x0010, lo: 0x8a, hi: 0x8d}, + {value: 0x0010, lo: 0x8f, hi: 0x9d}, + {value: 0x0010, lo: 0x9f, hi: 0xa8}, + {value: 0x0010, lo: 0xb0, hi: 0xbf}, + // Block 0xcb, offset 0x451 + {value: 0x0010, lo: 0x80, hi: 0x9e}, + {value: 0x0014, lo: 0x9f, hi: 0x9f}, + {value: 0x0010, lo: 0xa0, hi: 0xa2}, + {value: 0x0014, lo: 0xa3, hi: 0xa8}, + {value: 0x0034, lo: 0xa9, hi: 0xaa}, + {value: 0x0010, lo: 0xb0, hi: 0xb9}, + // Block 0xcc, offset 0x457 + {value: 0x0014, lo: 0x80, hi: 0x81}, + {value: 0x0010, lo: 0x82, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x8c}, + {value: 0x0010, lo: 0x8f, hi: 0x90}, + {value: 0x0010, lo: 0x93, hi: 0xa8}, + {value: 0x0010, lo: 0xaa, hi: 0xb0}, + {value: 0x0010, lo: 0xb2, hi: 0xb3}, + {value: 0x0010, lo: 0xb5, hi: 0xb9}, + {value: 0x0034, lo: 0xbc, hi: 0xbc}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0xcd, offset 0x461 + {value: 0x0014, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x81, hi: 0x84}, + {value: 0x0010, lo: 0x87, hi: 0x88}, + {value: 0x0010, lo: 0x8b, hi: 0x8c}, + {value: 0x0030, lo: 0x8d, hi: 0x8d}, + {value: 0x0010, lo: 0x90, hi: 0x90}, + {value: 0x0010, lo: 0x97, hi: 0x97}, + {value: 0x0010, lo: 0x9d, hi: 0xa3}, + {value: 0x0024, lo: 0xa6, hi: 0xac}, + {value: 0x0024, lo: 0xb0, hi: 0xb4}, + // Block 0xce, offset 0x46b + {value: 0x0010, lo: 0x80, hi: 0xb7}, + {value: 0x0014, lo: 0xb8, hi: 0xbf}, + // Block 0xcf, offset 0x46d + {value: 0x0010, lo: 0x80, hi: 0x81}, + {value: 0x0034, lo: 0x82, hi: 0x82}, + {value: 0x0014, lo: 0x83, hi: 0x84}, + {value: 0x0010, lo: 0x85, hi: 0x85}, + {value: 0x0034, lo: 0x86, hi: 0x86}, + {value: 0x0010, lo: 0x87, hi: 0x8a}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + // Block 0xd0, offset 0x474 + {value: 0x0010, lo: 0x80, hi: 0xb2}, + {value: 0x0014, lo: 0xb3, hi: 0xb8}, + {value: 0x0010, lo: 0xb9, hi: 0xb9}, + {value: 0x0014, lo: 0xba, hi: 0xba}, + {value: 0x0010, lo: 0xbb, hi: 0xbe}, + {value: 0x0014, lo: 0xbf, hi: 0xbf}, + // Block 0xd1, offset 0x47a + {value: 0x0014, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x81, hi: 0x81}, + {value: 0x0034, lo: 0x82, hi: 0x83}, + {value: 0x0010, lo: 0x84, hi: 0x85}, + {value: 0x0010, lo: 0x87, hi: 0x87}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + // Block 0xd2, offset 0x480 + {value: 0x0010, lo: 0x80, hi: 0xb1}, + {value: 0x0014, lo: 0xb2, hi: 0xb5}, + {value: 0x0010, lo: 0xb8, hi: 0xbb}, + {value: 0x0014, lo: 0xbc, hi: 0xbd}, + {value: 0x0010, lo: 0xbe, hi: 0xbe}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0xd3, offset 0x486 + {value: 0x0034, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x98, hi: 0x9b}, + {value: 0x0014, lo: 0x9c, hi: 0x9d}, + // Block 0xd4, offset 0x489 + {value: 0x0010, lo: 0x80, hi: 0xb2}, + {value: 0x0014, lo: 0xb3, hi: 0xba}, + {value: 0x0010, lo: 0xbb, hi: 0xbc}, + {value: 0x0014, lo: 0xbd, hi: 0xbd}, + {value: 0x0010, lo: 0xbe, hi: 0xbe}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0xd5, offset 0x48f + {value: 0x0014, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x84, hi: 0x84}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + // Block 0xd6, offset 0x492 + {value: 0x0010, lo: 0x80, hi: 0xaa}, + {value: 0x0014, lo: 0xab, hi: 0xab}, + {value: 0x0010, lo: 0xac, hi: 0xac}, + {value: 0x0014, lo: 0xad, hi: 0xad}, + {value: 0x0010, lo: 0xae, hi: 0xaf}, + {value: 0x0014, lo: 0xb0, hi: 0xb5}, + {value: 0x0030, lo: 0xb6, hi: 0xb6}, + {value: 0x0034, lo: 0xb7, hi: 0xb7}, + // Block 0xd7, offset 0x49a + {value: 0x0010, lo: 0x80, hi: 0x89}, + // Block 0xd8, offset 0x49b + {value: 0x0014, lo: 0x9d, hi: 0x9f}, + {value: 0x0010, lo: 0xa0, hi: 0xa1}, + {value: 0x0014, lo: 0xa2, hi: 0xa5}, + {value: 0x0010, lo: 0xa6, hi: 0xa6}, + {value: 0x0014, lo: 0xa7, hi: 0xaa}, + {value: 0x0034, lo: 0xab, hi: 0xab}, + {value: 0x0010, lo: 0xb0, hi: 0xb9}, + // Block 0xd9, offset 0x4a2 + {value: 0x5f53, lo: 0xa0, hi: 0xbf}, + // Block 0xda, offset 0x4a3 + {value: 0x5f52, lo: 0x80, hi: 0x9f}, + {value: 0x0010, lo: 0xa0, hi: 0xa9}, + {value: 0x0010, lo: 0xbf, hi: 0xbf}, + // Block 0xdb, offset 0x4a6 + {value: 0x0010, lo: 0x80, hi: 0xb8}, + // Block 0xdc, offset 0x4a7 + {value: 0x0010, lo: 0x80, hi: 0x88}, + {value: 0x0010, lo: 0x8a, hi: 0xaf}, + {value: 0x0014, lo: 0xb0, hi: 0xb6}, + {value: 0x0014, lo: 0xb8, hi: 0xbd}, + {value: 0x0010, lo: 0xbe, hi: 0xbe}, + {value: 0x0034, lo: 0xbf, hi: 0xbf}, + // Block 0xdd, offset 0x4ad + {value: 0x0010, lo: 0x80, hi: 0x80}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0010, lo: 0xb2, hi: 0xbf}, + // Block 0xde, offset 0x4b0 + {value: 0x0010, lo: 0x80, hi: 0x8f}, + {value: 0x0014, lo: 0x92, hi: 0xa7}, + {value: 0x0010, lo: 0xa9, hi: 0xa9}, + {value: 0x0014, lo: 0xaa, hi: 0xb0}, + {value: 0x0010, lo: 0xb1, hi: 0xb1}, + {value: 0x0014, lo: 0xb2, hi: 0xb3}, + {value: 0x0010, lo: 0xb4, hi: 0xb4}, + {value: 0x0014, lo: 0xb5, hi: 0xb6}, + // Block 0xdf, offset 0x4b8 + {value: 0x0010, lo: 0x80, hi: 0x99}, + // Block 0xe0, offset 0x4b9 + {value: 0x0010, lo: 0x80, hi: 0xae}, + // Block 0xe1, offset 0x4ba + {value: 0x0010, lo: 0x80, hi: 0x83}, + // Block 0xe2, offset 0x4bb + {value: 0x0010, lo: 0x80, hi: 0x86}, + // Block 0xe3, offset 0x4bc + {value: 0x0010, lo: 0x80, hi: 0x9e}, + {value: 0x0010, lo: 0xa0, hi: 0xa9}, + // Block 0xe4, offset 0x4be + {value: 0x0010, lo: 0x90, hi: 0xad}, + {value: 0x0034, lo: 0xb0, hi: 0xb4}, + // Block 0xe5, offset 0x4c0 + {value: 0x0010, lo: 0x80, hi: 0xaf}, + {value: 0x0024, lo: 0xb0, hi: 0xb6}, + // Block 0xe6, offset 0x4c2 + {value: 0x0014, lo: 0x80, hi: 0x83}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0010, lo: 0xa3, hi: 0xb7}, + {value: 0x0010, lo: 0xbd, hi: 0xbf}, + // Block 0xe7, offset 0x4c6 + {value: 0x0010, lo: 0x80, hi: 0x8f}, + // Block 0xe8, offset 0x4c7 + {value: 0x0010, lo: 0x80, hi: 0x84}, + {value: 0x0010, lo: 0x90, hi: 0xbe}, + // Block 0xe9, offset 0x4c9 + {value: 0x0014, lo: 0x8f, hi: 0x9f}, + // Block 0xea, offset 0x4ca + {value: 0x0014, lo: 0xa0, hi: 0xa0}, + // Block 0xeb, offset 0x4cb + {value: 0x0010, lo: 0x80, hi: 0xaa}, + {value: 0x0010, lo: 0xb0, hi: 0xbc}, + // Block 0xec, offset 0x4cd + {value: 0x0010, lo: 0x80, hi: 0x88}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + {value: 0x0014, lo: 0x9d, hi: 0x9d}, + {value: 0x0034, lo: 0x9e, hi: 0x9e}, + {value: 0x0014, lo: 0xa0, hi: 0xa3}, + // Block 0xed, offset 0x4d2 + {value: 0x0030, lo: 0xa5, hi: 0xa6}, + {value: 0x0034, lo: 0xa7, hi: 0xa9}, + {value: 0x0030, lo: 0xad, hi: 0xb2}, + {value: 0x0014, lo: 0xb3, hi: 0xba}, + {value: 0x0034, lo: 0xbb, hi: 0xbf}, + // Block 0xee, offset 0x4d7 + {value: 0x0034, lo: 0x80, hi: 0x82}, + {value: 0x0024, lo: 0x85, hi: 0x89}, + {value: 0x0034, lo: 0x8a, hi: 0x8b}, + {value: 0x0024, lo: 0xaa, hi: 0xad}, + // Block 0xef, offset 0x4db + {value: 0x0024, lo: 0x82, hi: 0x84}, + // Block 0xf0, offset 0x4dc + {value: 0x0013, lo: 0x80, hi: 0x99}, + {value: 0x0012, lo: 0x9a, hi: 0xb3}, + {value: 0x0013, lo: 0xb4, hi: 0xbf}, + // Block 0xf1, offset 0x4df + {value: 0x0013, lo: 0x80, hi: 0x8d}, + {value: 0x0012, lo: 0x8e, hi: 0x94}, + {value: 0x0012, lo: 0x96, hi: 0xa7}, + {value: 0x0013, lo: 0xa8, hi: 0xbf}, + // Block 0xf2, offset 0x4e3 + {value: 0x0013, lo: 0x80, hi: 0x81}, + {value: 0x0012, lo: 0x82, hi: 0x9b}, + {value: 0x0013, lo: 0x9c, hi: 0x9c}, + {value: 0x0013, lo: 0x9e, hi: 0x9f}, + {value: 0x0013, lo: 0xa2, hi: 0xa2}, + {value: 0x0013, lo: 0xa5, hi: 0xa6}, + {value: 0x0013, lo: 0xa9, hi: 0xac}, + {value: 0x0013, lo: 0xae, hi: 0xb5}, + {value: 0x0012, lo: 0xb6, hi: 0xb9}, + {value: 0x0012, lo: 0xbb, hi: 0xbb}, + {value: 0x0012, lo: 0xbd, hi: 0xbf}, + // Block 0xf3, offset 0x4ee + {value: 0x0012, lo: 0x80, hi: 0x83}, + {value: 0x0012, lo: 0x85, hi: 0x8f}, + {value: 0x0013, lo: 0x90, hi: 0xa9}, + {value: 0x0012, lo: 0xaa, hi: 0xbf}, + // Block 0xf4, offset 0x4f2 + {value: 0x0012, lo: 0x80, hi: 0x83}, + {value: 0x0013, lo: 0x84, hi: 0x85}, + {value: 0x0013, lo: 0x87, hi: 0x8a}, + {value: 0x0013, lo: 0x8d, hi: 0x94}, + {value: 0x0013, lo: 0x96, hi: 0x9c}, + {value: 0x0012, lo: 0x9e, hi: 0xb7}, + {value: 0x0013, lo: 0xb8, hi: 0xb9}, + {value: 0x0013, lo: 0xbb, hi: 0xbe}, + // Block 0xf5, offset 0x4fa + {value: 0x0013, lo: 0x80, hi: 0x84}, + {value: 0x0013, lo: 0x86, hi: 0x86}, + {value: 0x0013, lo: 0x8a, hi: 0x90}, + {value: 0x0012, lo: 0x92, hi: 0xab}, + {value: 0x0013, lo: 0xac, hi: 0xbf}, + // Block 0xf6, offset 0x4ff + {value: 0x0013, lo: 0x80, hi: 0x85}, + {value: 0x0012, lo: 0x86, hi: 0x9f}, + {value: 0x0013, lo: 0xa0, hi: 0xb9}, + {value: 0x0012, lo: 0xba, hi: 0xbf}, + // Block 0xf7, offset 0x503 + {value: 0x0012, lo: 0x80, hi: 0x93}, + {value: 0x0013, lo: 0x94, hi: 0xad}, + {value: 0x0012, lo: 0xae, hi: 0xbf}, + // Block 0xf8, offset 0x506 + {value: 0x0012, lo: 0x80, hi: 0x87}, + {value: 0x0013, lo: 0x88, hi: 0xa1}, + {value: 0x0012, lo: 0xa2, hi: 0xbb}, + {value: 0x0013, lo: 0xbc, hi: 0xbf}, + // Block 0xf9, offset 0x50a + {value: 0x0013, lo: 0x80, hi: 0x95}, + {value: 0x0012, lo: 0x96, hi: 0xaf}, + {value: 0x0013, lo: 0xb0, hi: 0xbf}, + // Block 0xfa, offset 0x50d + {value: 0x0013, lo: 0x80, hi: 0x89}, + {value: 0x0012, lo: 0x8a, hi: 0xa5}, + {value: 0x0013, lo: 0xa8, hi: 0xbf}, + // Block 0xfb, offset 0x510 + {value: 0x0013, lo: 0x80, hi: 0x80}, + {value: 0x0012, lo: 0x82, hi: 0x9a}, + {value: 0x0012, lo: 0x9c, hi: 0xa1}, + {value: 0x0013, lo: 0xa2, hi: 0xba}, + {value: 0x0012, lo: 0xbc, hi: 0xbf}, + // Block 0xfc, offset 0x515 + {value: 0x0012, lo: 0x80, hi: 0x94}, + {value: 0x0012, lo: 0x96, hi: 0x9b}, + {value: 0x0013, lo: 0x9c, hi: 0xb4}, + {value: 0x0012, lo: 0xb6, hi: 0xbf}, + // Block 0xfd, offset 0x519 + {value: 0x0012, lo: 0x80, hi: 0x8e}, + {value: 0x0012, lo: 0x90, hi: 0x95}, + {value: 0x0013, lo: 0x96, hi: 0xae}, + {value: 0x0012, lo: 0xb0, hi: 0xbf}, + // Block 0xfe, offset 0x51d + {value: 0x0012, lo: 0x80, hi: 0x88}, + {value: 0x0012, lo: 0x8a, hi: 0x8f}, + {value: 0x0013, lo: 0x90, hi: 0xa8}, + {value: 0x0012, lo: 0xaa, hi: 0xbf}, + // Block 0xff, offset 0x521 + {value: 0x0012, lo: 0x80, hi: 0x82}, + {value: 0x0012, lo: 0x84, hi: 0x89}, + {value: 0x0017, lo: 0x8a, hi: 0x8b}, + {value: 0x0010, lo: 0x8e, hi: 0xbf}, + // Block 0x100, offset 0x525 + {value: 0x0014, lo: 0x80, hi: 0xb6}, + {value: 0x0014, lo: 0xbb, hi: 0xbf}, + // Block 0x101, offset 0x527 + {value: 0x0014, lo: 0x80, hi: 0xac}, + {value: 0x0014, lo: 0xb5, hi: 0xb5}, + // Block 0x102, offset 0x529 + {value: 0x0014, lo: 0x84, hi: 0x84}, + {value: 0x0014, lo: 0x9b, hi: 0x9f}, + {value: 0x0014, lo: 0xa1, hi: 0xaf}, + // Block 0x103, offset 0x52c + {value: 0x0024, lo: 0x80, hi: 0x86}, + {value: 0x0024, lo: 0x88, hi: 0x98}, + {value: 0x0024, lo: 0x9b, hi: 0xa1}, + {value: 0x0024, lo: 0xa3, hi: 0xa4}, + {value: 0x0024, lo: 0xa6, hi: 0xaa}, + // Block 0x104, offset 0x531 + {value: 0x0010, lo: 0x80, hi: 0x84}, + {value: 0x0034, lo: 0x90, hi: 0x96}, + // Block 0x105, offset 0x533 + {value: 0xb552, lo: 0x80, hi: 0x81}, + {value: 0xb852, lo: 0x82, hi: 0x83}, + {value: 0x0024, lo: 0x84, hi: 0x89}, + {value: 0x0034, lo: 0x8a, hi: 0x8a}, + {value: 0x0010, lo: 0x90, hi: 0x99}, + // Block 0x106, offset 0x538 + {value: 0x0010, lo: 0x80, hi: 0x83}, + {value: 0x0010, lo: 0x85, hi: 0x9f}, + {value: 0x0010, lo: 0xa1, hi: 0xa2}, + {value: 0x0010, lo: 0xa4, hi: 0xa4}, + {value: 0x0010, lo: 0xa7, hi: 0xa7}, + {value: 0x0010, lo: 0xa9, hi: 0xb2}, + {value: 0x0010, lo: 0xb4, hi: 0xb7}, + {value: 0x0010, lo: 0xb9, hi: 0xb9}, + {value: 0x0010, lo: 0xbb, hi: 0xbb}, + // Block 0x107, offset 0x541 + {value: 0x0010, lo: 0x80, hi: 0x89}, + {value: 0x0010, lo: 0x8b, hi: 0x9b}, + {value: 0x0010, lo: 0xa1, hi: 0xa3}, + {value: 0x0010, lo: 0xa5, hi: 0xa9}, + {value: 0x0010, lo: 0xab, hi: 0xbb}, + // Block 0x108, offset 0x546 + {value: 0x0013, lo: 0xb0, hi: 0xbf}, + // Block 0x109, offset 0x547 + {value: 0x0013, lo: 0x80, hi: 0x89}, + {value: 0x0013, lo: 0x90, hi: 0xa9}, + {value: 0x0013, lo: 0xb0, hi: 0xbf}, + // Block 0x10a, offset 0x54a + {value: 0x0013, lo: 0x80, hi: 0x89}, + // Block 0x10b, offset 0x54b + {value: 0x0004, lo: 0xbb, hi: 0xbf}, + // Block 0x10c, offset 0x54c + {value: 0x0014, lo: 0x81, hi: 0x81}, + {value: 0x0014, lo: 0xa0, hi: 0xbf}, + // Block 0x10d, offset 0x54e + {value: 0x0014, lo: 0x80, hi: 0xbf}, + // Block 0x10e, offset 0x54f + {value: 0x0014, lo: 0x80, hi: 0xaf}, +} + +// Total table size 13811 bytes (13KiB); checksum: 4CC48DA3 diff --git a/vendor/golang.org/x/text/cases/tables9.0.0_test.go b/vendor/golang.org/x/text/cases/tables9.0.0_test.go new file mode 100644 index 0000000..398d253 --- /dev/null +++ b/vendor/golang.org/x/text/cases/tables9.0.0_test.go @@ -0,0 +1,1156 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// +build !go1.10 + +package cases + +var ( + caseIgnorable = map[rune]bool{ + 0x0027: true, + 0x002e: true, + 0x003a: true, + 0x00b7: true, + 0x0387: true, + 0x05f4: true, + 0x2018: true, + 0x2019: true, + 0x2024: true, + 0x2027: true, + 0xfe13: true, + 0xfe52: true, + 0xfe55: true, + 0xff07: true, + 0xff0e: true, + 0xff1a: true, + } + + special = map[rune]struct{ toLower, toTitle, toUpper string }{ + 0x00df: {"ß", "Ss", "SS"}, + 0x0130: {"i̇", "İ", "İ"}, + 0xfb00: {"ff", "Ff", "FF"}, + 0xfb01: {"fi", "Fi", "FI"}, + 0xfb02: {"fl", "Fl", "FL"}, + 0xfb03: {"ffi", "Ffi", "FFI"}, + 0xfb04: {"ffl", "Ffl", "FFL"}, + 0xfb05: {"ſt", "St", "ST"}, + 0xfb06: {"st", "St", "ST"}, + 0x0587: {"և", "Եւ", "ԵՒ"}, + 0xfb13: {"ﬓ", "Մն", "ՄՆ"}, + 0xfb14: {"ﬔ", "Մե", "ՄԵ"}, + 0xfb15: {"ﬕ", "Մի", "ՄԻ"}, + 0xfb16: {"ﬖ", "Վն", "ՎՆ"}, + 0xfb17: {"ﬗ", "Մխ", "ՄԽ"}, + 0x0149: {"ʼn", "ʼN", "ʼN"}, + 0x0390: {"ΐ", "Ϊ́", "Ϊ́"}, + 0x03b0: {"ΰ", "Ϋ́", "Ϋ́"}, + 0x01f0: {"ǰ", "J̌", "J̌"}, + 0x1e96: {"ẖ", "H̱", "H̱"}, + 0x1e97: {"ẗ", "T̈", "T̈"}, + 0x1e98: {"ẘ", "W̊", "W̊"}, + 0x1e99: {"ẙ", "Y̊", "Y̊"}, + 0x1e9a: {"ẚ", "Aʾ", "Aʾ"}, + 0x1f50: {"ὐ", "Υ̓", "Υ̓"}, + 0x1f52: {"ὒ", "Υ̓̀", "Υ̓̀"}, + 0x1f54: {"ὔ", "Υ̓́", "Υ̓́"}, + 0x1f56: {"ὖ", "Υ̓͂", "Υ̓͂"}, + 0x1fb6: {"ᾶ", "Α͂", "Α͂"}, + 0x1fc6: {"ῆ", "Η͂", "Η͂"}, + 0x1fd2: {"ῒ", "Ϊ̀", "Ϊ̀"}, + 0x1fd3: {"ΐ", "Ϊ́", "Ϊ́"}, + 0x1fd6: {"ῖ", "Ι͂", "Ι͂"}, + 0x1fd7: {"ῗ", "Ϊ͂", "Ϊ͂"}, + 0x1fe2: {"ῢ", "Ϋ̀", "Ϋ̀"}, + 0x1fe3: {"ΰ", "Ϋ́", "Ϋ́"}, + 0x1fe4: {"ῤ", "Ρ̓", "Ρ̓"}, + 0x1fe6: {"ῦ", "Υ͂", "Υ͂"}, + 0x1fe7: {"ῧ", "Ϋ͂", "Ϋ͂"}, + 0x1ff6: {"ῶ", "Ω͂", "Ω͂"}, + 0x1f80: {"ᾀ", "ᾈ", "ἈΙ"}, + 0x1f81: {"ᾁ", "ᾉ", "ἉΙ"}, + 0x1f82: {"ᾂ", "ᾊ", "ἊΙ"}, + 0x1f83: {"ᾃ", "ᾋ", "ἋΙ"}, + 0x1f84: {"ᾄ", "ᾌ", "ἌΙ"}, + 0x1f85: {"ᾅ", "ᾍ", "ἍΙ"}, + 0x1f86: {"ᾆ", "ᾎ", "ἎΙ"}, + 0x1f87: {"ᾇ", "ᾏ", "ἏΙ"}, + 0x1f88: {"ᾀ", "ᾈ", "ἈΙ"}, + 0x1f89: {"ᾁ", "ᾉ", "ἉΙ"}, + 0x1f8a: {"ᾂ", "ᾊ", "ἊΙ"}, + 0x1f8b: {"ᾃ", "ᾋ", "ἋΙ"}, + 0x1f8c: {"ᾄ", "ᾌ", "ἌΙ"}, + 0x1f8d: {"ᾅ", "ᾍ", "ἍΙ"}, + 0x1f8e: {"ᾆ", "ᾎ", "ἎΙ"}, + 0x1f8f: {"ᾇ", "ᾏ", "ἏΙ"}, + 0x1f90: {"ᾐ", "ᾘ", "ἨΙ"}, + 0x1f91: {"ᾑ", "ᾙ", "ἩΙ"}, + 0x1f92: {"ᾒ", "ᾚ", "ἪΙ"}, + 0x1f93: {"ᾓ", "ᾛ", "ἫΙ"}, + 0x1f94: {"ᾔ", "ᾜ", "ἬΙ"}, + 0x1f95: {"ᾕ", "ᾝ", "ἭΙ"}, + 0x1f96: {"ᾖ", "ᾞ", "ἮΙ"}, + 0x1f97: {"ᾗ", "ᾟ", "ἯΙ"}, + 0x1f98: {"ᾐ", "ᾘ", "ἨΙ"}, + 0x1f99: {"ᾑ", "ᾙ", "ἩΙ"}, + 0x1f9a: {"ᾒ", "ᾚ", "ἪΙ"}, + 0x1f9b: {"ᾓ", "ᾛ", "ἫΙ"}, + 0x1f9c: {"ᾔ", "ᾜ", "ἬΙ"}, + 0x1f9d: {"ᾕ", "ᾝ", "ἭΙ"}, + 0x1f9e: {"ᾖ", "ᾞ", "ἮΙ"}, + 0x1f9f: {"ᾗ", "ᾟ", "ἯΙ"}, + 0x1fa0: {"ᾠ", "ᾨ", "ὨΙ"}, + 0x1fa1: {"ᾡ", "ᾩ", "ὩΙ"}, + 0x1fa2: {"ᾢ", "ᾪ", "ὪΙ"}, + 0x1fa3: {"ᾣ", "ᾫ", "ὫΙ"}, + 0x1fa4: {"ᾤ", "ᾬ", "ὬΙ"}, + 0x1fa5: {"ᾥ", "ᾭ", "ὭΙ"}, + 0x1fa6: {"ᾦ", "ᾮ", "ὮΙ"}, + 0x1fa7: {"ᾧ", "ᾯ", "ὯΙ"}, + 0x1fa8: {"ᾠ", "ᾨ", "ὨΙ"}, + 0x1fa9: {"ᾡ", "ᾩ", "ὩΙ"}, + 0x1faa: {"ᾢ", "ᾪ", "ὪΙ"}, + 0x1fab: {"ᾣ", "ᾫ", "ὫΙ"}, + 0x1fac: {"ᾤ", "ᾬ", "ὬΙ"}, + 0x1fad: {"ᾥ", "ᾭ", "ὭΙ"}, + 0x1fae: {"ᾦ", "ᾮ", "ὮΙ"}, + 0x1faf: {"ᾧ", "ᾯ", "ὯΙ"}, + 0x1fb3: {"ᾳ", "ᾼ", "ΑΙ"}, + 0x1fbc: {"ᾳ", "ᾼ", "ΑΙ"}, + 0x1fc3: {"ῃ", "ῌ", "ΗΙ"}, + 0x1fcc: {"ῃ", "ῌ", "ΗΙ"}, + 0x1ff3: {"ῳ", "ῼ", "ΩΙ"}, + 0x1ffc: {"ῳ", "ῼ", "ΩΙ"}, + 0x1fb2: {"ᾲ", "Ὰͅ", "ᾺΙ"}, + 0x1fb4: {"ᾴ", "Άͅ", "ΆΙ"}, + 0x1fc2: {"ῂ", "Ὴͅ", "ῊΙ"}, + 0x1fc4: {"ῄ", "Ήͅ", "ΉΙ"}, + 0x1ff2: {"ῲ", "Ὼͅ", "ῺΙ"}, + 0x1ff4: {"ῴ", "Ώͅ", "ΏΙ"}, + 0x1fb7: {"ᾷ", "ᾼ͂", "Α͂Ι"}, + 0x1fc7: {"ῇ", "ῌ͂", "Η͂Ι"}, + 0x1ff7: {"ῷ", "ῼ͂", "Ω͂Ι"}, + } + + foldMap = map[rune]struct{ simple, full, special string }{ + 0x0049: {"", "", "ı"}, + 0x00b5: {"μ", "μ", ""}, + 0x00df: {"", "ss", ""}, + 0x0130: {"", "i̇", "i"}, + 0x0149: {"", "ʼn", ""}, + 0x017f: {"s", "s", ""}, + 0x01f0: {"", "ǰ", ""}, + 0x0345: {"ι", "ι", ""}, + 0x0390: {"", "ΐ", ""}, + 0x03b0: {"", "ΰ", ""}, + 0x03c2: {"σ", "σ", ""}, + 0x03d0: {"β", "β", ""}, + 0x03d1: {"θ", "θ", ""}, + 0x03d5: {"φ", "φ", ""}, + 0x03d6: {"π", "π", ""}, + 0x03f0: {"κ", "κ", ""}, + 0x03f1: {"ρ", "ρ", ""}, + 0x03f5: {"ε", "ε", ""}, + 0x0587: {"", "եւ", ""}, + 0x13f8: {"Ᏸ", "Ᏸ", ""}, + 0x13f9: {"Ᏹ", "Ᏹ", ""}, + 0x13fa: {"Ᏺ", "Ᏺ", ""}, + 0x13fb: {"Ᏻ", "Ᏻ", ""}, + 0x13fc: {"Ᏼ", "Ᏼ", ""}, + 0x13fd: {"Ᏽ", "Ᏽ", ""}, + 0x1c80: {"в", "в", ""}, + 0x1c81: {"д", "д", ""}, + 0x1c82: {"о", "о", ""}, + 0x1c83: {"с", "с", ""}, + 0x1c84: {"т", "т", ""}, + 0x1c85: {"т", "т", ""}, + 0x1c86: {"ъ", "ъ", ""}, + 0x1c87: {"ѣ", "ѣ", ""}, + 0x1c88: {"ꙋ", "ꙋ", ""}, + 0x1e96: {"", "ẖ", ""}, + 0x1e97: {"", "ẗ", ""}, + 0x1e98: {"", "ẘ", ""}, + 0x1e99: {"", "ẙ", ""}, + 0x1e9a: {"", "aʾ", ""}, + 0x1e9b: {"ṡ", "ṡ", ""}, + 0x1e9e: {"", "ss", ""}, + 0x1f50: {"", "ὐ", ""}, + 0x1f52: {"", "ὒ", ""}, + 0x1f54: {"", "ὔ", ""}, + 0x1f56: {"", "ὖ", ""}, + 0x1f80: {"", "ἀι", ""}, + 0x1f81: {"", "ἁι", ""}, + 0x1f82: {"", "ἂι", ""}, + 0x1f83: {"", "ἃι", ""}, + 0x1f84: {"", "ἄι", ""}, + 0x1f85: {"", "ἅι", ""}, + 0x1f86: {"", "ἆι", ""}, + 0x1f87: {"", "ἇι", ""}, + 0x1f88: {"", "ἀι", ""}, + 0x1f89: {"", "ἁι", ""}, + 0x1f8a: {"", "ἂι", ""}, + 0x1f8b: {"", "ἃι", ""}, + 0x1f8c: {"", "ἄι", ""}, + 0x1f8d: {"", "ἅι", ""}, + 0x1f8e: {"", "ἆι", ""}, + 0x1f8f: {"", "ἇι", ""}, + 0x1f90: {"", "ἠι", ""}, + 0x1f91: {"", "ἡι", ""}, + 0x1f92: {"", "ἢι", ""}, + 0x1f93: {"", "ἣι", ""}, + 0x1f94: {"", "ἤι", ""}, + 0x1f95: {"", "ἥι", ""}, + 0x1f96: {"", "ἦι", ""}, + 0x1f97: {"", "ἧι", ""}, + 0x1f98: {"", "ἠι", ""}, + 0x1f99: {"", "ἡι", ""}, + 0x1f9a: {"", "ἢι", ""}, + 0x1f9b: {"", "ἣι", ""}, + 0x1f9c: {"", "ἤι", ""}, + 0x1f9d: {"", "ἥι", ""}, + 0x1f9e: {"", "ἦι", ""}, + 0x1f9f: {"", "ἧι", ""}, + 0x1fa0: {"", "ὠι", ""}, + 0x1fa1: {"", "ὡι", ""}, + 0x1fa2: {"", "ὢι", ""}, + 0x1fa3: {"", "ὣι", ""}, + 0x1fa4: {"", "ὤι", ""}, + 0x1fa5: {"", "ὥι", ""}, + 0x1fa6: {"", "ὦι", ""}, + 0x1fa7: {"", "ὧι", ""}, + 0x1fa8: {"", "ὠι", ""}, + 0x1fa9: {"", "ὡι", ""}, + 0x1faa: {"", "ὢι", ""}, + 0x1fab: {"", "ὣι", ""}, + 0x1fac: {"", "ὤι", ""}, + 0x1fad: {"", "ὥι", ""}, + 0x1fae: {"", "ὦι", ""}, + 0x1faf: {"", "ὧι", ""}, + 0x1fb2: {"", "ὰι", ""}, + 0x1fb3: {"", "αι", ""}, + 0x1fb4: {"", "άι", ""}, + 0x1fb6: {"", "ᾶ", ""}, + 0x1fb7: {"", "ᾶι", ""}, + 0x1fbc: {"", "αι", ""}, + 0x1fbe: {"ι", "ι", ""}, + 0x1fc2: {"", "ὴι", ""}, + 0x1fc3: {"", "ηι", ""}, + 0x1fc4: {"", "ήι", ""}, + 0x1fc6: {"", "ῆ", ""}, + 0x1fc7: {"", "ῆι", ""}, + 0x1fcc: {"", "ηι", ""}, + 0x1fd2: {"", "ῒ", ""}, + 0x1fd3: {"", "ΐ", ""}, + 0x1fd6: {"", "ῖ", ""}, + 0x1fd7: {"", "ῗ", ""}, + 0x1fe2: {"", "ῢ", ""}, + 0x1fe3: {"", "ΰ", ""}, + 0x1fe4: {"", "ῤ", ""}, + 0x1fe6: {"", "ῦ", ""}, + 0x1fe7: {"", "ῧ", ""}, + 0x1ff2: {"", "ὼι", ""}, + 0x1ff3: {"", "ωι", ""}, + 0x1ff4: {"", "ώι", ""}, + 0x1ff6: {"", "ῶ", ""}, + 0x1ff7: {"", "ῶι", ""}, + 0x1ffc: {"", "ωι", ""}, + 0xab70: {"Ꭰ", "Ꭰ", ""}, + 0xab71: {"Ꭱ", "Ꭱ", ""}, + 0xab72: {"Ꭲ", "Ꭲ", ""}, + 0xab73: {"Ꭳ", "Ꭳ", ""}, + 0xab74: {"Ꭴ", "Ꭴ", ""}, + 0xab75: {"Ꭵ", "Ꭵ", ""}, + 0xab76: {"Ꭶ", "Ꭶ", ""}, + 0xab77: {"Ꭷ", "Ꭷ", ""}, + 0xab78: {"Ꭸ", "Ꭸ", ""}, + 0xab79: {"Ꭹ", "Ꭹ", ""}, + 0xab7a: {"Ꭺ", "Ꭺ", ""}, + 0xab7b: {"Ꭻ", "Ꭻ", ""}, + 0xab7c: {"Ꭼ", "Ꭼ", ""}, + 0xab7d: {"Ꭽ", "Ꭽ", ""}, + 0xab7e: {"Ꭾ", "Ꭾ", ""}, + 0xab7f: {"Ꭿ", "Ꭿ", ""}, + 0xab80: {"Ꮀ", "Ꮀ", ""}, + 0xab81: {"Ꮁ", "Ꮁ", ""}, + 0xab82: {"Ꮂ", "Ꮂ", ""}, + 0xab83: {"Ꮃ", "Ꮃ", ""}, + 0xab84: {"Ꮄ", "Ꮄ", ""}, + 0xab85: {"Ꮅ", "Ꮅ", ""}, + 0xab86: {"Ꮆ", "Ꮆ", ""}, + 0xab87: {"Ꮇ", "Ꮇ", ""}, + 0xab88: {"Ꮈ", "Ꮈ", ""}, + 0xab89: {"Ꮉ", "Ꮉ", ""}, + 0xab8a: {"Ꮊ", "Ꮊ", ""}, + 0xab8b: {"Ꮋ", "Ꮋ", ""}, + 0xab8c: {"Ꮌ", "Ꮌ", ""}, + 0xab8d: {"Ꮍ", "Ꮍ", ""}, + 0xab8e: {"Ꮎ", "Ꮎ", ""}, + 0xab8f: {"Ꮏ", "Ꮏ", ""}, + 0xab90: {"Ꮐ", "Ꮐ", ""}, + 0xab91: {"Ꮑ", "Ꮑ", ""}, + 0xab92: {"Ꮒ", "Ꮒ", ""}, + 0xab93: {"Ꮓ", "Ꮓ", ""}, + 0xab94: {"Ꮔ", "Ꮔ", ""}, + 0xab95: {"Ꮕ", "Ꮕ", ""}, + 0xab96: {"Ꮖ", "Ꮖ", ""}, + 0xab97: {"Ꮗ", "Ꮗ", ""}, + 0xab98: {"Ꮘ", "Ꮘ", ""}, + 0xab99: {"Ꮙ", "Ꮙ", ""}, + 0xab9a: {"Ꮚ", "Ꮚ", ""}, + 0xab9b: {"Ꮛ", "Ꮛ", ""}, + 0xab9c: {"Ꮜ", "Ꮜ", ""}, + 0xab9d: {"Ꮝ", "Ꮝ", ""}, + 0xab9e: {"Ꮞ", "Ꮞ", ""}, + 0xab9f: {"Ꮟ", "Ꮟ", ""}, + 0xaba0: {"Ꮠ", "Ꮠ", ""}, + 0xaba1: {"Ꮡ", "Ꮡ", ""}, + 0xaba2: {"Ꮢ", "Ꮢ", ""}, + 0xaba3: {"Ꮣ", "Ꮣ", ""}, + 0xaba4: {"Ꮤ", "Ꮤ", ""}, + 0xaba5: {"Ꮥ", "Ꮥ", ""}, + 0xaba6: {"Ꮦ", "Ꮦ", ""}, + 0xaba7: {"Ꮧ", "Ꮧ", ""}, + 0xaba8: {"Ꮨ", "Ꮨ", ""}, + 0xaba9: {"Ꮩ", "Ꮩ", ""}, + 0xabaa: {"Ꮪ", "Ꮪ", ""}, + 0xabab: {"Ꮫ", "Ꮫ", ""}, + 0xabac: {"Ꮬ", "Ꮬ", ""}, + 0xabad: {"Ꮭ", "Ꮭ", ""}, + 0xabae: {"Ꮮ", "Ꮮ", ""}, + 0xabaf: {"Ꮯ", "Ꮯ", ""}, + 0xabb0: {"Ꮰ", "Ꮰ", ""}, + 0xabb1: {"Ꮱ", "Ꮱ", ""}, + 0xabb2: {"Ꮲ", "Ꮲ", ""}, + 0xabb3: {"Ꮳ", "Ꮳ", ""}, + 0xabb4: {"Ꮴ", "Ꮴ", ""}, + 0xabb5: {"Ꮵ", "Ꮵ", ""}, + 0xabb6: {"Ꮶ", "Ꮶ", ""}, + 0xabb7: {"Ꮷ", "Ꮷ", ""}, + 0xabb8: {"Ꮸ", "Ꮸ", ""}, + 0xabb9: {"Ꮹ", "Ꮹ", ""}, + 0xabba: {"Ꮺ", "Ꮺ", ""}, + 0xabbb: {"Ꮻ", "Ꮻ", ""}, + 0xabbc: {"Ꮼ", "Ꮼ", ""}, + 0xabbd: {"Ꮽ", "Ꮽ", ""}, + 0xabbe: {"Ꮾ", "Ꮾ", ""}, + 0xabbf: {"Ꮿ", "Ꮿ", ""}, + 0xfb00: {"", "ff", ""}, + 0xfb01: {"", "fi", ""}, + 0xfb02: {"", "fl", ""}, + 0xfb03: {"", "ffi", ""}, + 0xfb04: {"", "ffl", ""}, + 0xfb05: {"", "st", ""}, + 0xfb06: {"", "st", ""}, + 0xfb13: {"", "մն", ""}, + 0xfb14: {"", "մե", ""}, + 0xfb15: {"", "մի", ""}, + 0xfb16: {"", "վն", ""}, + 0xfb17: {"", "մխ", ""}, + } + + breakProp = []struct{ lo, hi rune }{ + {0x0, 0x26}, + {0x28, 0x2d}, + {0x2f, 0x2f}, + {0x3b, 0x40}, + {0x5b, 0x5e}, + {0x60, 0x60}, + {0x7b, 0xa9}, + {0xab, 0xac}, + {0xae, 0xb4}, + {0xb6, 0xb6}, + {0xb8, 0xb9}, + {0xbb, 0xbf}, + {0xd7, 0xd7}, + {0xf7, 0xf7}, + {0x2c2, 0x2c5}, + {0x2d2, 0x2d6}, + {0x2d8, 0x2df}, + {0x2e5, 0x2eb}, + {0x2ed, 0x2ed}, + {0x2ef, 0x2ff}, + {0x375, 0x375}, + {0x378, 0x379}, + {0x37e, 0x37e}, + {0x380, 0x385}, + {0x38b, 0x38b}, + {0x38d, 0x38d}, + {0x3a2, 0x3a2}, + {0x3f6, 0x3f6}, + {0x482, 0x482}, + {0x530, 0x530}, + {0x557, 0x558}, + {0x55a, 0x560}, + {0x588, 0x590}, + {0x5be, 0x5be}, + {0x5c0, 0x5c0}, + {0x5c3, 0x5c3}, + {0x5c6, 0x5c6}, + {0x5c8, 0x5cf}, + {0x5eb, 0x5ef}, + {0x5f5, 0x5ff}, + {0x606, 0x60f}, + {0x61b, 0x61b}, + {0x61d, 0x61f}, + {0x66a, 0x66a}, + {0x66c, 0x66d}, + {0x6d4, 0x6d4}, + {0x6de, 0x6de}, + {0x6e9, 0x6e9}, + {0x6fd, 0x6fe}, + {0x700, 0x70e}, + {0x74b, 0x74c}, + {0x7b2, 0x7bf}, + {0x7f6, 0x7f9}, + {0x7fb, 0x7ff}, + {0x82e, 0x83f}, + {0x85c, 0x89f}, + {0x8b5, 0x8b5}, + {0x8be, 0x8d3}, + {0x964, 0x965}, + {0x970, 0x970}, + {0x984, 0x984}, + {0x98d, 0x98e}, + {0x991, 0x992}, + {0x9a9, 0x9a9}, + {0x9b1, 0x9b1}, + {0x9b3, 0x9b5}, + {0x9ba, 0x9bb}, + {0x9c5, 0x9c6}, + {0x9c9, 0x9ca}, + {0x9cf, 0x9d6}, + {0x9d8, 0x9db}, + {0x9de, 0x9de}, + {0x9e4, 0x9e5}, + {0x9f2, 0xa00}, + {0xa04, 0xa04}, + {0xa0b, 0xa0e}, + {0xa11, 0xa12}, + {0xa29, 0xa29}, + {0xa31, 0xa31}, + {0xa34, 0xa34}, + {0xa37, 0xa37}, + {0xa3a, 0xa3b}, + {0xa3d, 0xa3d}, + {0xa43, 0xa46}, + {0xa49, 0xa4a}, + {0xa4e, 0xa50}, + {0xa52, 0xa58}, + {0xa5d, 0xa5d}, + {0xa5f, 0xa65}, + {0xa76, 0xa80}, + {0xa84, 0xa84}, + {0xa8e, 0xa8e}, + {0xa92, 0xa92}, + {0xaa9, 0xaa9}, + {0xab1, 0xab1}, + {0xab4, 0xab4}, + {0xaba, 0xabb}, + {0xac6, 0xac6}, + {0xaca, 0xaca}, + {0xace, 0xacf}, + {0xad1, 0xadf}, + {0xae4, 0xae5}, + {0xaf0, 0xaf8}, + {0xafa, 0xb00}, + {0xb04, 0xb04}, + {0xb0d, 0xb0e}, + {0xb11, 0xb12}, + {0xb29, 0xb29}, + {0xb31, 0xb31}, + {0xb34, 0xb34}, + {0xb3a, 0xb3b}, + {0xb45, 0xb46}, + {0xb49, 0xb4a}, + {0xb4e, 0xb55}, + {0xb58, 0xb5b}, + {0xb5e, 0xb5e}, + {0xb64, 0xb65}, + {0xb70, 0xb70}, + {0xb72, 0xb81}, + {0xb84, 0xb84}, + {0xb8b, 0xb8d}, + {0xb91, 0xb91}, + {0xb96, 0xb98}, + {0xb9b, 0xb9b}, + {0xb9d, 0xb9d}, + {0xba0, 0xba2}, + {0xba5, 0xba7}, + {0xbab, 0xbad}, + {0xbba, 0xbbd}, + {0xbc3, 0xbc5}, + {0xbc9, 0xbc9}, + {0xbce, 0xbcf}, + {0xbd1, 0xbd6}, + {0xbd8, 0xbe5}, + {0xbf0, 0xbff}, + {0xc04, 0xc04}, + {0xc0d, 0xc0d}, + {0xc11, 0xc11}, + {0xc29, 0xc29}, + {0xc3a, 0xc3c}, + {0xc45, 0xc45}, + {0xc49, 0xc49}, + {0xc4e, 0xc54}, + {0xc57, 0xc57}, + {0xc5b, 0xc5f}, + {0xc64, 0xc65}, + {0xc70, 0xc7f}, + {0xc84, 0xc84}, + {0xc8d, 0xc8d}, + {0xc91, 0xc91}, + {0xca9, 0xca9}, + {0xcb4, 0xcb4}, + {0xcba, 0xcbb}, + {0xcc5, 0xcc5}, + {0xcc9, 0xcc9}, + {0xcce, 0xcd4}, + {0xcd7, 0xcdd}, + {0xcdf, 0xcdf}, + {0xce4, 0xce5}, + {0xcf0, 0xcf0}, + {0xcf3, 0xd00}, + {0xd04, 0xd04}, + {0xd0d, 0xd0d}, + {0xd11, 0xd11}, + {0xd3b, 0xd3c}, + {0xd45, 0xd45}, + {0xd49, 0xd49}, + {0xd4f, 0xd53}, + {0xd58, 0xd5e}, + {0xd64, 0xd65}, + {0xd70, 0xd79}, + {0xd80, 0xd81}, + {0xd84, 0xd84}, + {0xd97, 0xd99}, + {0xdb2, 0xdb2}, + {0xdbc, 0xdbc}, + {0xdbe, 0xdbf}, + {0xdc7, 0xdc9}, + {0xdcb, 0xdce}, + {0xdd5, 0xdd5}, + {0xdd7, 0xdd7}, + {0xde0, 0xde5}, + {0xdf0, 0xdf1}, + {0xdf4, 0xe30}, + {0xe32, 0xe33}, + {0xe3b, 0xe46}, + {0xe4f, 0xe4f}, + {0xe5a, 0xeb0}, + {0xeb2, 0xeb3}, + {0xeba, 0xeba}, + {0xebd, 0xec7}, + {0xece, 0xecf}, + {0xeda, 0xeff}, + {0xf01, 0xf17}, + {0xf1a, 0xf1f}, + {0xf2a, 0xf34}, + {0xf36, 0xf36}, + {0xf38, 0xf38}, + {0xf3a, 0xf3d}, + {0xf48, 0xf48}, + {0xf6d, 0xf70}, + {0xf85, 0xf85}, + {0xf98, 0xf98}, + {0xfbd, 0xfc5}, + {0xfc7, 0x102a}, + {0x103f, 0x103f}, + {0x104a, 0x1055}, + {0x105a, 0x105d}, + {0x1061, 0x1061}, + {0x1065, 0x1066}, + {0x106e, 0x1070}, + {0x1075, 0x1081}, + {0x108e, 0x108e}, + {0x109e, 0x109f}, + {0x10c6, 0x10c6}, + {0x10c8, 0x10cc}, + {0x10ce, 0x10cf}, + {0x10fb, 0x10fb}, + {0x1249, 0x1249}, + {0x124e, 0x124f}, + {0x1257, 0x1257}, + {0x1259, 0x1259}, + {0x125e, 0x125f}, + {0x1289, 0x1289}, + {0x128e, 0x128f}, + {0x12b1, 0x12b1}, + {0x12b6, 0x12b7}, + {0x12bf, 0x12bf}, + {0x12c1, 0x12c1}, + {0x12c6, 0x12c7}, + {0x12d7, 0x12d7}, + {0x1311, 0x1311}, + {0x1316, 0x1317}, + {0x135b, 0x135c}, + {0x1360, 0x137f}, + {0x1390, 0x139f}, + {0x13f6, 0x13f7}, + {0x13fe, 0x1400}, + {0x166d, 0x166e}, + {0x1680, 0x1680}, + {0x169b, 0x169f}, + {0x16eb, 0x16ed}, + {0x16f9, 0x16ff}, + {0x170d, 0x170d}, + {0x1715, 0x171f}, + {0x1735, 0x173f}, + {0x1754, 0x175f}, + {0x176d, 0x176d}, + {0x1771, 0x1771}, + {0x1774, 0x17b3}, + {0x17d4, 0x17dc}, + {0x17de, 0x17df}, + {0x17ea, 0x180a}, + {0x180f, 0x180f}, + {0x181a, 0x181f}, + {0x1878, 0x187f}, + {0x18ab, 0x18af}, + {0x18f6, 0x18ff}, + {0x191f, 0x191f}, + {0x192c, 0x192f}, + {0x193c, 0x1945}, + {0x1950, 0x19cf}, + {0x19da, 0x19ff}, + {0x1a1c, 0x1a54}, + {0x1a5f, 0x1a5f}, + {0x1a7d, 0x1a7e}, + {0x1a8a, 0x1a8f}, + {0x1a9a, 0x1aaf}, + {0x1abf, 0x1aff}, + {0x1b4c, 0x1b4f}, + {0x1b5a, 0x1b6a}, + {0x1b74, 0x1b7f}, + {0x1bf4, 0x1bff}, + {0x1c38, 0x1c3f}, + {0x1c4a, 0x1c4c}, + {0x1c7e, 0x1c7f}, + {0x1c89, 0x1ccf}, + {0x1cd3, 0x1cd3}, + {0x1cf7, 0x1cf7}, + {0x1cfa, 0x1cff}, + {0x1df6, 0x1dfa}, + {0x1f16, 0x1f17}, + {0x1f1e, 0x1f1f}, + {0x1f46, 0x1f47}, + {0x1f4e, 0x1f4f}, + {0x1f58, 0x1f58}, + {0x1f5a, 0x1f5a}, + {0x1f5c, 0x1f5c}, + {0x1f5e, 0x1f5e}, + {0x1f7e, 0x1f7f}, + {0x1fb5, 0x1fb5}, + {0x1fbd, 0x1fbd}, + {0x1fbf, 0x1fc1}, + {0x1fc5, 0x1fc5}, + {0x1fcd, 0x1fcf}, + {0x1fd4, 0x1fd5}, + {0x1fdc, 0x1fdf}, + {0x1fed, 0x1ff1}, + {0x1ff5, 0x1ff5}, + {0x1ffd, 0x200b}, + {0x2010, 0x2017}, + {0x201a, 0x2023}, + {0x2025, 0x2026}, + {0x2028, 0x2029}, + {0x2030, 0x203e}, + {0x2041, 0x2053}, + {0x2055, 0x205f}, + {0x2065, 0x2065}, + {0x2070, 0x2070}, + {0x2072, 0x207e}, + {0x2080, 0x208f}, + {0x209d, 0x20cf}, + {0x20f1, 0x2101}, + {0x2103, 0x2106}, + {0x2108, 0x2109}, + {0x2114, 0x2114}, + {0x2116, 0x2118}, + {0x211e, 0x2123}, + {0x2125, 0x2125}, + {0x2127, 0x2127}, + {0x2129, 0x2129}, + {0x212e, 0x212e}, + {0x213a, 0x213b}, + {0x2140, 0x2144}, + {0x214a, 0x214d}, + {0x214f, 0x215f}, + {0x2189, 0x24b5}, + {0x24ea, 0x2bff}, + {0x2c2f, 0x2c2f}, + {0x2c5f, 0x2c5f}, + {0x2ce5, 0x2cea}, + {0x2cf4, 0x2cff}, + {0x2d26, 0x2d26}, + {0x2d28, 0x2d2c}, + {0x2d2e, 0x2d2f}, + {0x2d68, 0x2d6e}, + {0x2d70, 0x2d7e}, + {0x2d97, 0x2d9f}, + {0x2da7, 0x2da7}, + {0x2daf, 0x2daf}, + {0x2db7, 0x2db7}, + {0x2dbf, 0x2dbf}, + {0x2dc7, 0x2dc7}, + {0x2dcf, 0x2dcf}, + {0x2dd7, 0x2dd7}, + {0x2ddf, 0x2ddf}, + {0x2e00, 0x2e2e}, + {0x2e30, 0x3004}, + {0x3006, 0x3029}, + {0x3030, 0x303a}, + {0x303d, 0x3098}, + {0x309b, 0x3104}, + {0x312e, 0x3130}, + {0x318f, 0x319f}, + {0x31bb, 0x9fff}, + {0xa48d, 0xa4cf}, + {0xa4fe, 0xa4ff}, + {0xa60d, 0xa60f}, + {0xa62c, 0xa63f}, + {0xa673, 0xa673}, + {0xa67e, 0xa67e}, + {0xa6f2, 0xa716}, + {0xa720, 0xa721}, + {0xa789, 0xa78a}, + {0xa7af, 0xa7af}, + {0xa7b8, 0xa7f6}, + {0xa828, 0xa83f}, + {0xa874, 0xa87f}, + {0xa8c6, 0xa8cf}, + {0xa8da, 0xa8df}, + {0xa8f8, 0xa8fa}, + {0xa8fc, 0xa8fc}, + {0xa8fe, 0xa8ff}, + {0xa92e, 0xa92f}, + {0xa954, 0xa95f}, + {0xa97d, 0xa97f}, + {0xa9c1, 0xa9ce}, + {0xa9da, 0xa9e4}, + {0xa9e6, 0xa9ef}, + {0xa9fa, 0xa9ff}, + {0xaa37, 0xaa3f}, + {0xaa4e, 0xaa4f}, + {0xaa5a, 0xaa7a}, + {0xaa7e, 0xaaaf}, + {0xaab1, 0xaab1}, + {0xaab5, 0xaab6}, + {0xaab9, 0xaabd}, + {0xaac0, 0xaac0}, + {0xaac2, 0xaadf}, + {0xaaf0, 0xaaf1}, + {0xaaf7, 0xab00}, + {0xab07, 0xab08}, + {0xab0f, 0xab10}, + {0xab17, 0xab1f}, + {0xab27, 0xab27}, + {0xab2f, 0xab2f}, + {0xab5b, 0xab5b}, + {0xab66, 0xab6f}, + {0xabeb, 0xabeb}, + {0xabee, 0xabef}, + {0xabfa, 0xabff}, + {0xd7a4, 0xd7af}, + {0xd7c7, 0xd7ca}, + {0xd7fc, 0xfaff}, + {0xfb07, 0xfb12}, + {0xfb18, 0xfb1c}, + {0xfb29, 0xfb29}, + {0xfb37, 0xfb37}, + {0xfb3d, 0xfb3d}, + {0xfb3f, 0xfb3f}, + {0xfb42, 0xfb42}, + {0xfb45, 0xfb45}, + {0xfbb2, 0xfbd2}, + {0xfd3e, 0xfd4f}, + {0xfd90, 0xfd91}, + {0xfdc8, 0xfdef}, + {0xfdfc, 0xfdff}, + {0xfe10, 0xfe12}, + {0xfe14, 0xfe1f}, + {0xfe30, 0xfe32}, + {0xfe35, 0xfe4c}, + {0xfe50, 0xfe51}, + {0xfe53, 0xfe54}, + {0xfe56, 0xfe6f}, + {0xfe75, 0xfe75}, + {0xfefd, 0xfefe}, + {0xff00, 0xff06}, + {0xff08, 0xff0d}, + {0xff0f, 0xff19}, + {0xff1b, 0xff20}, + {0xff3b, 0xff3e}, + {0xff40, 0xff40}, + {0xff5b, 0xff9d}, + {0xffbf, 0xffc1}, + {0xffc8, 0xffc9}, + {0xffd0, 0xffd1}, + {0xffd8, 0xffd9}, + {0xffdd, 0xfff8}, + {0xfffc, 0xffff}, + {0x1000c, 0x1000c}, + {0x10027, 0x10027}, + {0x1003b, 0x1003b}, + {0x1003e, 0x1003e}, + {0x1004e, 0x1004f}, + {0x1005e, 0x1007f}, + {0x100fb, 0x1013f}, + {0x10175, 0x101fc}, + {0x101fe, 0x1027f}, + {0x1029d, 0x1029f}, + {0x102d1, 0x102df}, + {0x102e1, 0x102ff}, + {0x10320, 0x1032f}, + {0x1034b, 0x1034f}, + {0x1037b, 0x1037f}, + {0x1039e, 0x1039f}, + {0x103c4, 0x103c7}, + {0x103d0, 0x103d0}, + {0x103d6, 0x103ff}, + {0x1049e, 0x1049f}, + {0x104aa, 0x104af}, + {0x104d4, 0x104d7}, + {0x104fc, 0x104ff}, + {0x10528, 0x1052f}, + {0x10564, 0x105ff}, + {0x10737, 0x1073f}, + {0x10756, 0x1075f}, + {0x10768, 0x107ff}, + {0x10806, 0x10807}, + {0x10809, 0x10809}, + {0x10836, 0x10836}, + {0x10839, 0x1083b}, + {0x1083d, 0x1083e}, + {0x10856, 0x1085f}, + {0x10877, 0x1087f}, + {0x1089f, 0x108df}, + {0x108f3, 0x108f3}, + {0x108f6, 0x108ff}, + {0x10916, 0x1091f}, + {0x1093a, 0x1097f}, + {0x109b8, 0x109bd}, + {0x109c0, 0x109ff}, + {0x10a04, 0x10a04}, + {0x10a07, 0x10a0b}, + {0x10a14, 0x10a14}, + {0x10a18, 0x10a18}, + {0x10a34, 0x10a37}, + {0x10a3b, 0x10a3e}, + {0x10a40, 0x10a5f}, + {0x10a7d, 0x10a7f}, + {0x10a9d, 0x10abf}, + {0x10ac8, 0x10ac8}, + {0x10ae7, 0x10aff}, + {0x10b36, 0x10b3f}, + {0x10b56, 0x10b5f}, + {0x10b73, 0x10b7f}, + {0x10b92, 0x10bff}, + {0x10c49, 0x10c7f}, + {0x10cb3, 0x10cbf}, + {0x10cf3, 0x10fff}, + {0x11047, 0x11065}, + {0x11070, 0x1107e}, + {0x110bb, 0x110bc}, + {0x110be, 0x110cf}, + {0x110e9, 0x110ef}, + {0x110fa, 0x110ff}, + {0x11135, 0x11135}, + {0x11140, 0x1114f}, + {0x11174, 0x11175}, + {0x11177, 0x1117f}, + {0x111c5, 0x111c9}, + {0x111cd, 0x111cf}, + {0x111db, 0x111db}, + {0x111dd, 0x111ff}, + {0x11212, 0x11212}, + {0x11238, 0x1123d}, + {0x1123f, 0x1127f}, + {0x11287, 0x11287}, + {0x11289, 0x11289}, + {0x1128e, 0x1128e}, + {0x1129e, 0x1129e}, + {0x112a9, 0x112af}, + {0x112eb, 0x112ef}, + {0x112fa, 0x112ff}, + {0x11304, 0x11304}, + {0x1130d, 0x1130e}, + {0x11311, 0x11312}, + {0x11329, 0x11329}, + {0x11331, 0x11331}, + {0x11334, 0x11334}, + {0x1133a, 0x1133b}, + {0x11345, 0x11346}, + {0x11349, 0x1134a}, + {0x1134e, 0x1134f}, + {0x11351, 0x11356}, + {0x11358, 0x1135c}, + {0x11364, 0x11365}, + {0x1136d, 0x1136f}, + {0x11375, 0x113ff}, + {0x1144b, 0x1144f}, + {0x1145a, 0x1147f}, + {0x114c6, 0x114c6}, + {0x114c8, 0x114cf}, + {0x114da, 0x1157f}, + {0x115b6, 0x115b7}, + {0x115c1, 0x115d7}, + {0x115de, 0x115ff}, + {0x11641, 0x11643}, + {0x11645, 0x1164f}, + {0x1165a, 0x1167f}, + {0x116b8, 0x116bf}, + {0x116ca, 0x1171c}, + {0x1172c, 0x1172f}, + {0x1173a, 0x1189f}, + {0x118ea, 0x118fe}, + {0x11900, 0x11abf}, + {0x11af9, 0x11bff}, + {0x11c09, 0x11c09}, + {0x11c37, 0x11c37}, + {0x11c41, 0x11c4f}, + {0x11c5a, 0x11c71}, + {0x11c90, 0x11c91}, + {0x11ca8, 0x11ca8}, + {0x11cb7, 0x11fff}, + {0x1239a, 0x123ff}, + {0x1246f, 0x1247f}, + {0x12544, 0x12fff}, + {0x1342f, 0x143ff}, + {0x14647, 0x167ff}, + {0x16a39, 0x16a3f}, + {0x16a5f, 0x16a5f}, + {0x16a6a, 0x16acf}, + {0x16aee, 0x16aef}, + {0x16af5, 0x16aff}, + {0x16b37, 0x16b3f}, + {0x16b44, 0x16b4f}, + {0x16b5a, 0x16b62}, + {0x16b78, 0x16b7c}, + {0x16b90, 0x16eff}, + {0x16f45, 0x16f4f}, + {0x16f7f, 0x16f8e}, + {0x16fa0, 0x16fdf}, + {0x16fe1, 0x1bbff}, + {0x1bc6b, 0x1bc6f}, + {0x1bc7d, 0x1bc7f}, + {0x1bc89, 0x1bc8f}, + {0x1bc9a, 0x1bc9c}, + {0x1bc9f, 0x1bc9f}, + {0x1bca4, 0x1d164}, + {0x1d16a, 0x1d16c}, + {0x1d183, 0x1d184}, + {0x1d18c, 0x1d1a9}, + {0x1d1ae, 0x1d241}, + {0x1d245, 0x1d3ff}, + {0x1d455, 0x1d455}, + {0x1d49d, 0x1d49d}, + {0x1d4a0, 0x1d4a1}, + {0x1d4a3, 0x1d4a4}, + {0x1d4a7, 0x1d4a8}, + {0x1d4ad, 0x1d4ad}, + {0x1d4ba, 0x1d4ba}, + {0x1d4bc, 0x1d4bc}, + {0x1d4c4, 0x1d4c4}, + {0x1d506, 0x1d506}, + {0x1d50b, 0x1d50c}, + {0x1d515, 0x1d515}, + {0x1d51d, 0x1d51d}, + {0x1d53a, 0x1d53a}, + {0x1d53f, 0x1d53f}, + {0x1d545, 0x1d545}, + {0x1d547, 0x1d549}, + {0x1d551, 0x1d551}, + {0x1d6a6, 0x1d6a7}, + {0x1d6c1, 0x1d6c1}, + {0x1d6db, 0x1d6db}, + {0x1d6fb, 0x1d6fb}, + {0x1d715, 0x1d715}, + {0x1d735, 0x1d735}, + {0x1d74f, 0x1d74f}, + {0x1d76f, 0x1d76f}, + {0x1d789, 0x1d789}, + {0x1d7a9, 0x1d7a9}, + {0x1d7c3, 0x1d7c3}, + {0x1d7cc, 0x1d7cd}, + {0x1d800, 0x1d9ff}, + {0x1da37, 0x1da3a}, + {0x1da6d, 0x1da74}, + {0x1da76, 0x1da83}, + {0x1da85, 0x1da9a}, + {0x1daa0, 0x1daa0}, + {0x1dab0, 0x1dfff}, + {0x1e007, 0x1e007}, + {0x1e019, 0x1e01a}, + {0x1e022, 0x1e022}, + {0x1e025, 0x1e025}, + {0x1e02b, 0x1e7ff}, + {0x1e8c5, 0x1e8cf}, + {0x1e8d7, 0x1e8ff}, + {0x1e94b, 0x1e94f}, + {0x1e95a, 0x1edff}, + {0x1ee04, 0x1ee04}, + {0x1ee20, 0x1ee20}, + {0x1ee23, 0x1ee23}, + {0x1ee25, 0x1ee26}, + {0x1ee28, 0x1ee28}, + {0x1ee33, 0x1ee33}, + {0x1ee38, 0x1ee38}, + {0x1ee3a, 0x1ee3a}, + {0x1ee3c, 0x1ee41}, + {0x1ee43, 0x1ee46}, + {0x1ee48, 0x1ee48}, + {0x1ee4a, 0x1ee4a}, + {0x1ee4c, 0x1ee4c}, + {0x1ee50, 0x1ee50}, + {0x1ee53, 0x1ee53}, + {0x1ee55, 0x1ee56}, + {0x1ee58, 0x1ee58}, + {0x1ee5a, 0x1ee5a}, + {0x1ee5c, 0x1ee5c}, + {0x1ee5e, 0x1ee5e}, + {0x1ee60, 0x1ee60}, + {0x1ee63, 0x1ee63}, + {0x1ee65, 0x1ee66}, + {0x1ee6b, 0x1ee6b}, + {0x1ee73, 0x1ee73}, + {0x1ee78, 0x1ee78}, + {0x1ee7d, 0x1ee7d}, + {0x1ee7f, 0x1ee7f}, + {0x1ee8a, 0x1ee8a}, + {0x1ee9c, 0x1eea0}, + {0x1eea4, 0x1eea4}, + {0x1eeaa, 0x1eeaa}, + {0x1eebc, 0x1f12f}, + {0x1f14a, 0x1f14f}, + {0x1f16a, 0x1f16f}, + {0x1f18a, 0x1ffff}, + } + + breakTest = []string{ + "AA", + "ÄA", + "Aa\u2060", + "Äa\u2060", + "Aa|:", + "Äa|:", + "Aa|'", + "Äa|'", + "Aa|'\u2060", + "Äa|'\u2060", + "Aa|,", + "Äa|,", + "a\u2060A", + "a\u2060̈A", + "a\u2060a\u2060", + "a\u2060̈a\u2060", + "a\u2060a|:", + "a\u2060̈a|:", + "a\u2060a|'", + "a\u2060̈a|'", + "a\u2060a|'\u2060", + "a\u2060̈a|'\u2060", + "a\u2060a|,", + "a\u2060̈a|,", + "a:A", + "a:̈A", + "a:a\u2060", + "a:̈a\u2060", + "a:a|:", + "a:̈a|:", + "a:a|'", + "a:̈a|'", + "a:a|'\u2060", + "a:̈a|'\u2060", + "a:a|,", + "a:̈a|,", + "a'A", + "a'̈A", + "a'a\u2060", + "a'̈a\u2060", + "a'a|:", + "a'̈a|:", + "a'a|'", + "a'̈a|'", + "a'a|'\u2060", + "a'̈a|'\u2060", + "a'a|,", + "a'̈a|,", + "a'\u2060A", + "a'\u2060̈A", + "a'\u2060a\u2060", + "a'\u2060̈a\u2060", + "a'\u2060a|:", + "a'\u2060̈a|:", + "a'\u2060a|'", + "a'\u2060̈a|'", + "a'\u2060a|'\u2060", + "a'\u2060̈a|'\u2060", + "a'\u2060a|,", + "a'\u2060̈a|,", + "a|,|A", + "a|,̈|A", + "a|,|a\u2060", + "a|,̈|a\u2060", + "a|,|a|:", + "a|,̈|a|:", + "a|,|a|'", + "a|,̈|a|'", + "a|,|a|'\u2060", + "a|,̈|a|'\u2060", + "a|,|a|,", + "a|,̈|a|,", + "AAA", + "A:A", + "A|:|:|A", + "A00A", + "A__A", + "a|🇦🇧|🇨|b", + "a|🇦🇧\u200d|🇨|b", + "a|🇦\u200d🇧|🇨|b", + "a|🇦🇧|🇨🇩|b", + "ä\u200d̈b", + "1_a|:|:|a", + "1_a|:|.|a", + "1_a|:|,|a", + "1_a|.|:|a", + "1_a|.|.|a", + "1_a|.|,|a", + "1_a|,|:|a", + "1_a|,|.|a", + "1_a|,|,|a", + "a_a|:|:|1", + "a|:|:|a", + "a_1|:|:|a", + "a_a|:|:|a", + "a_a|:|.|1", + "a|:|.|a", + "a_1|:|.|a", + "a_a|:|.|a", + "a_a|:|,|1", + "a|:|,|a", + "a_1|:|,|a", + "a_a|:|,|a", + "a_a|.|:|1", + "a|.|:|a", + "a_1|.|:|a", + "a_a|.|:|a", + "a_a|.|.|1", + "a|.|.|a", + "a_1|.|.|a", + "a_a|.|.|a", + "a_a|.|,|1", + "a|.|,|a", + "a_1|.|,|a", + "a_a|.|,|a", + "a_a|,|:|1", + "a|,|:|a", + "a_1|,|:|a", + "a_a|,|:|a", + "a_a|,|.|1", + "a|,|.|a", + "a_1|,|.|a", + "a_a|,|.|a", + "a_a|,|,|1", + "a|,|,|a", + "a_1|,|,|a", + "a_a|,|,|a", + } +) diff --git a/vendor/golang.org/x/text/cases/tables_test.go b/vendor/golang.org/x/text/cases/tables_test.go deleted file mode 100644 index 85ae237..0000000 --- a/vendor/golang.org/x/text/cases/tables_test.go +++ /dev/null @@ -1,1154 +0,0 @@ -// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. - -package cases - -var ( - caseIgnorable = map[rune]bool{ - 0x0027: true, - 0x002e: true, - 0x003a: true, - 0x00b7: true, - 0x0387: true, - 0x05f4: true, - 0x2018: true, - 0x2019: true, - 0x2024: true, - 0x2027: true, - 0xfe13: true, - 0xfe52: true, - 0xfe55: true, - 0xff07: true, - 0xff0e: true, - 0xff1a: true, - } - - special = map[rune]struct{ toLower, toTitle, toUpper string }{ - 0x00df: {"ß", "Ss", "SS"}, - 0x0130: {"i̇", "İ", "İ"}, - 0xfb00: {"ff", "Ff", "FF"}, - 0xfb01: {"fi", "Fi", "FI"}, - 0xfb02: {"fl", "Fl", "FL"}, - 0xfb03: {"ffi", "Ffi", "FFI"}, - 0xfb04: {"ffl", "Ffl", "FFL"}, - 0xfb05: {"ſt", "St", "ST"}, - 0xfb06: {"st", "St", "ST"}, - 0x0587: {"և", "Եւ", "ԵՒ"}, - 0xfb13: {"ﬓ", "Մն", "ՄՆ"}, - 0xfb14: {"ﬔ", "Մե", "ՄԵ"}, - 0xfb15: {"ﬕ", "Մի", "ՄԻ"}, - 0xfb16: {"ﬖ", "Վն", "ՎՆ"}, - 0xfb17: {"ﬗ", "Մխ", "ՄԽ"}, - 0x0149: {"ʼn", "ʼN", "ʼN"}, - 0x0390: {"ΐ", "Ϊ́", "Ϊ́"}, - 0x03b0: {"ΰ", "Ϋ́", "Ϋ́"}, - 0x01f0: {"ǰ", "J̌", "J̌"}, - 0x1e96: {"ẖ", "H̱", "H̱"}, - 0x1e97: {"ẗ", "T̈", "T̈"}, - 0x1e98: {"ẘ", "W̊", "W̊"}, - 0x1e99: {"ẙ", "Y̊", "Y̊"}, - 0x1e9a: {"ẚ", "Aʾ", "Aʾ"}, - 0x1f50: {"ὐ", "Υ̓", "Υ̓"}, - 0x1f52: {"ὒ", "Υ̓̀", "Υ̓̀"}, - 0x1f54: {"ὔ", "Υ̓́", "Υ̓́"}, - 0x1f56: {"ὖ", "Υ̓͂", "Υ̓͂"}, - 0x1fb6: {"ᾶ", "Α͂", "Α͂"}, - 0x1fc6: {"ῆ", "Η͂", "Η͂"}, - 0x1fd2: {"ῒ", "Ϊ̀", "Ϊ̀"}, - 0x1fd3: {"ΐ", "Ϊ́", "Ϊ́"}, - 0x1fd6: {"ῖ", "Ι͂", "Ι͂"}, - 0x1fd7: {"ῗ", "Ϊ͂", "Ϊ͂"}, - 0x1fe2: {"ῢ", "Ϋ̀", "Ϋ̀"}, - 0x1fe3: {"ΰ", "Ϋ́", "Ϋ́"}, - 0x1fe4: {"ῤ", "Ρ̓", "Ρ̓"}, - 0x1fe6: {"ῦ", "Υ͂", "Υ͂"}, - 0x1fe7: {"ῧ", "Ϋ͂", "Ϋ͂"}, - 0x1ff6: {"ῶ", "Ω͂", "Ω͂"}, - 0x1f80: {"ᾀ", "ᾈ", "ἈΙ"}, - 0x1f81: {"ᾁ", "ᾉ", "ἉΙ"}, - 0x1f82: {"ᾂ", "ᾊ", "ἊΙ"}, - 0x1f83: {"ᾃ", "ᾋ", "ἋΙ"}, - 0x1f84: {"ᾄ", "ᾌ", "ἌΙ"}, - 0x1f85: {"ᾅ", "ᾍ", "ἍΙ"}, - 0x1f86: {"ᾆ", "ᾎ", "ἎΙ"}, - 0x1f87: {"ᾇ", "ᾏ", "ἏΙ"}, - 0x1f88: {"ᾀ", "ᾈ", "ἈΙ"}, - 0x1f89: {"ᾁ", "ᾉ", "ἉΙ"}, - 0x1f8a: {"ᾂ", "ᾊ", "ἊΙ"}, - 0x1f8b: {"ᾃ", "ᾋ", "ἋΙ"}, - 0x1f8c: {"ᾄ", "ᾌ", "ἌΙ"}, - 0x1f8d: {"ᾅ", "ᾍ", "ἍΙ"}, - 0x1f8e: {"ᾆ", "ᾎ", "ἎΙ"}, - 0x1f8f: {"ᾇ", "ᾏ", "ἏΙ"}, - 0x1f90: {"ᾐ", "ᾘ", "ἨΙ"}, - 0x1f91: {"ᾑ", "ᾙ", "ἩΙ"}, - 0x1f92: {"ᾒ", "ᾚ", "ἪΙ"}, - 0x1f93: {"ᾓ", "ᾛ", "ἫΙ"}, - 0x1f94: {"ᾔ", "ᾜ", "ἬΙ"}, - 0x1f95: {"ᾕ", "ᾝ", "ἭΙ"}, - 0x1f96: {"ᾖ", "ᾞ", "ἮΙ"}, - 0x1f97: {"ᾗ", "ᾟ", "ἯΙ"}, - 0x1f98: {"ᾐ", "ᾘ", "ἨΙ"}, - 0x1f99: {"ᾑ", "ᾙ", "ἩΙ"}, - 0x1f9a: {"ᾒ", "ᾚ", "ἪΙ"}, - 0x1f9b: {"ᾓ", "ᾛ", "ἫΙ"}, - 0x1f9c: {"ᾔ", "ᾜ", "ἬΙ"}, - 0x1f9d: {"ᾕ", "ᾝ", "ἭΙ"}, - 0x1f9e: {"ᾖ", "ᾞ", "ἮΙ"}, - 0x1f9f: {"ᾗ", "ᾟ", "ἯΙ"}, - 0x1fa0: {"ᾠ", "ᾨ", "ὨΙ"}, - 0x1fa1: {"ᾡ", "ᾩ", "ὩΙ"}, - 0x1fa2: {"ᾢ", "ᾪ", "ὪΙ"}, - 0x1fa3: {"ᾣ", "ᾫ", "ὫΙ"}, - 0x1fa4: {"ᾤ", "ᾬ", "ὬΙ"}, - 0x1fa5: {"ᾥ", "ᾭ", "ὭΙ"}, - 0x1fa6: {"ᾦ", "ᾮ", "ὮΙ"}, - 0x1fa7: {"ᾧ", "ᾯ", "ὯΙ"}, - 0x1fa8: {"ᾠ", "ᾨ", "ὨΙ"}, - 0x1fa9: {"ᾡ", "ᾩ", "ὩΙ"}, - 0x1faa: {"ᾢ", "ᾪ", "ὪΙ"}, - 0x1fab: {"ᾣ", "ᾫ", "ὫΙ"}, - 0x1fac: {"ᾤ", "ᾬ", "ὬΙ"}, - 0x1fad: {"ᾥ", "ᾭ", "ὭΙ"}, - 0x1fae: {"ᾦ", "ᾮ", "ὮΙ"}, - 0x1faf: {"ᾧ", "ᾯ", "ὯΙ"}, - 0x1fb3: {"ᾳ", "ᾼ", "ΑΙ"}, - 0x1fbc: {"ᾳ", "ᾼ", "ΑΙ"}, - 0x1fc3: {"ῃ", "ῌ", "ΗΙ"}, - 0x1fcc: {"ῃ", "ῌ", "ΗΙ"}, - 0x1ff3: {"ῳ", "ῼ", "ΩΙ"}, - 0x1ffc: {"ῳ", "ῼ", "ΩΙ"}, - 0x1fb2: {"ᾲ", "Ὰͅ", "ᾺΙ"}, - 0x1fb4: {"ᾴ", "Άͅ", "ΆΙ"}, - 0x1fc2: {"ῂ", "Ὴͅ", "ῊΙ"}, - 0x1fc4: {"ῄ", "Ήͅ", "ΉΙ"}, - 0x1ff2: {"ῲ", "Ὼͅ", "ῺΙ"}, - 0x1ff4: {"ῴ", "Ώͅ", "ΏΙ"}, - 0x1fb7: {"ᾷ", "ᾼ͂", "Α͂Ι"}, - 0x1fc7: {"ῇ", "ῌ͂", "Η͂Ι"}, - 0x1ff7: {"ῷ", "ῼ͂", "Ω͂Ι"}, - } - - foldMap = map[rune]struct{ simple, full, special string }{ - 0x0049: {"", "", "ı"}, - 0x00b5: {"μ", "μ", ""}, - 0x00df: {"", "ss", ""}, - 0x0130: {"", "i̇", "i"}, - 0x0149: {"", "ʼn", ""}, - 0x017f: {"s", "s", ""}, - 0x01f0: {"", "ǰ", ""}, - 0x0345: {"ι", "ι", ""}, - 0x0390: {"", "ΐ", ""}, - 0x03b0: {"", "ΰ", ""}, - 0x03c2: {"σ", "σ", ""}, - 0x03d0: {"β", "β", ""}, - 0x03d1: {"θ", "θ", ""}, - 0x03d5: {"φ", "φ", ""}, - 0x03d6: {"π", "π", ""}, - 0x03f0: {"κ", "κ", ""}, - 0x03f1: {"ρ", "ρ", ""}, - 0x03f5: {"ε", "ε", ""}, - 0x0587: {"", "եւ", ""}, - 0x13f8: {"Ᏸ", "Ᏸ", ""}, - 0x13f9: {"Ᏹ", "Ᏹ", ""}, - 0x13fa: {"Ᏺ", "Ᏺ", ""}, - 0x13fb: {"Ᏻ", "Ᏻ", ""}, - 0x13fc: {"Ᏼ", "Ᏼ", ""}, - 0x13fd: {"Ᏽ", "Ᏽ", ""}, - 0x1c80: {"в", "в", ""}, - 0x1c81: {"д", "д", ""}, - 0x1c82: {"о", "о", ""}, - 0x1c83: {"с", "с", ""}, - 0x1c84: {"т", "т", ""}, - 0x1c85: {"т", "т", ""}, - 0x1c86: {"ъ", "ъ", ""}, - 0x1c87: {"ѣ", "ѣ", ""}, - 0x1c88: {"ꙋ", "ꙋ", ""}, - 0x1e96: {"", "ẖ", ""}, - 0x1e97: {"", "ẗ", ""}, - 0x1e98: {"", "ẘ", ""}, - 0x1e99: {"", "ẙ", ""}, - 0x1e9a: {"", "aʾ", ""}, - 0x1e9b: {"ṡ", "ṡ", ""}, - 0x1e9e: {"", "ss", ""}, - 0x1f50: {"", "ὐ", ""}, - 0x1f52: {"", "ὒ", ""}, - 0x1f54: {"", "ὔ", ""}, - 0x1f56: {"", "ὖ", ""}, - 0x1f80: {"", "ἀι", ""}, - 0x1f81: {"", "ἁι", ""}, - 0x1f82: {"", "ἂι", ""}, - 0x1f83: {"", "ἃι", ""}, - 0x1f84: {"", "ἄι", ""}, - 0x1f85: {"", "ἅι", ""}, - 0x1f86: {"", "ἆι", ""}, - 0x1f87: {"", "ἇι", ""}, - 0x1f88: {"", "ἀι", ""}, - 0x1f89: {"", "ἁι", ""}, - 0x1f8a: {"", "ἂι", ""}, - 0x1f8b: {"", "ἃι", ""}, - 0x1f8c: {"", "ἄι", ""}, - 0x1f8d: {"", "ἅι", ""}, - 0x1f8e: {"", "ἆι", ""}, - 0x1f8f: {"", "ἇι", ""}, - 0x1f90: {"", "ἠι", ""}, - 0x1f91: {"", "ἡι", ""}, - 0x1f92: {"", "ἢι", ""}, - 0x1f93: {"", "ἣι", ""}, - 0x1f94: {"", "ἤι", ""}, - 0x1f95: {"", "ἥι", ""}, - 0x1f96: {"", "ἦι", ""}, - 0x1f97: {"", "ἧι", ""}, - 0x1f98: {"", "ἠι", ""}, - 0x1f99: {"", "ἡι", ""}, - 0x1f9a: {"", "ἢι", ""}, - 0x1f9b: {"", "ἣι", ""}, - 0x1f9c: {"", "ἤι", ""}, - 0x1f9d: {"", "ἥι", ""}, - 0x1f9e: {"", "ἦι", ""}, - 0x1f9f: {"", "ἧι", ""}, - 0x1fa0: {"", "ὠι", ""}, - 0x1fa1: {"", "ὡι", ""}, - 0x1fa2: {"", "ὢι", ""}, - 0x1fa3: {"", "ὣι", ""}, - 0x1fa4: {"", "ὤι", ""}, - 0x1fa5: {"", "ὥι", ""}, - 0x1fa6: {"", "ὦι", ""}, - 0x1fa7: {"", "ὧι", ""}, - 0x1fa8: {"", "ὠι", ""}, - 0x1fa9: {"", "ὡι", ""}, - 0x1faa: {"", "ὢι", ""}, - 0x1fab: {"", "ὣι", ""}, - 0x1fac: {"", "ὤι", ""}, - 0x1fad: {"", "ὥι", ""}, - 0x1fae: {"", "ὦι", ""}, - 0x1faf: {"", "ὧι", ""}, - 0x1fb2: {"", "ὰι", ""}, - 0x1fb3: {"", "αι", ""}, - 0x1fb4: {"", "άι", ""}, - 0x1fb6: {"", "ᾶ", ""}, - 0x1fb7: {"", "ᾶι", ""}, - 0x1fbc: {"", "αι", ""}, - 0x1fbe: {"ι", "ι", ""}, - 0x1fc2: {"", "ὴι", ""}, - 0x1fc3: {"", "ηι", ""}, - 0x1fc4: {"", "ήι", ""}, - 0x1fc6: {"", "ῆ", ""}, - 0x1fc7: {"", "ῆι", ""}, - 0x1fcc: {"", "ηι", ""}, - 0x1fd2: {"", "ῒ", ""}, - 0x1fd3: {"", "ΐ", ""}, - 0x1fd6: {"", "ῖ", ""}, - 0x1fd7: {"", "ῗ", ""}, - 0x1fe2: {"", "ῢ", ""}, - 0x1fe3: {"", "ΰ", ""}, - 0x1fe4: {"", "ῤ", ""}, - 0x1fe6: {"", "ῦ", ""}, - 0x1fe7: {"", "ῧ", ""}, - 0x1ff2: {"", "ὼι", ""}, - 0x1ff3: {"", "ωι", ""}, - 0x1ff4: {"", "ώι", ""}, - 0x1ff6: {"", "ῶ", ""}, - 0x1ff7: {"", "ῶι", ""}, - 0x1ffc: {"", "ωι", ""}, - 0xab70: {"Ꭰ", "Ꭰ", ""}, - 0xab71: {"Ꭱ", "Ꭱ", ""}, - 0xab72: {"Ꭲ", "Ꭲ", ""}, - 0xab73: {"Ꭳ", "Ꭳ", ""}, - 0xab74: {"Ꭴ", "Ꭴ", ""}, - 0xab75: {"Ꭵ", "Ꭵ", ""}, - 0xab76: {"Ꭶ", "Ꭶ", ""}, - 0xab77: {"Ꭷ", "Ꭷ", ""}, - 0xab78: {"Ꭸ", "Ꭸ", ""}, - 0xab79: {"Ꭹ", "Ꭹ", ""}, - 0xab7a: {"Ꭺ", "Ꭺ", ""}, - 0xab7b: {"Ꭻ", "Ꭻ", ""}, - 0xab7c: {"Ꭼ", "Ꭼ", ""}, - 0xab7d: {"Ꭽ", "Ꭽ", ""}, - 0xab7e: {"Ꭾ", "Ꭾ", ""}, - 0xab7f: {"Ꭿ", "Ꭿ", ""}, - 0xab80: {"Ꮀ", "Ꮀ", ""}, - 0xab81: {"Ꮁ", "Ꮁ", ""}, - 0xab82: {"Ꮂ", "Ꮂ", ""}, - 0xab83: {"Ꮃ", "Ꮃ", ""}, - 0xab84: {"Ꮄ", "Ꮄ", ""}, - 0xab85: {"Ꮅ", "Ꮅ", ""}, - 0xab86: {"Ꮆ", "Ꮆ", ""}, - 0xab87: {"Ꮇ", "Ꮇ", ""}, - 0xab88: {"Ꮈ", "Ꮈ", ""}, - 0xab89: {"Ꮉ", "Ꮉ", ""}, - 0xab8a: {"Ꮊ", "Ꮊ", ""}, - 0xab8b: {"Ꮋ", "Ꮋ", ""}, - 0xab8c: {"Ꮌ", "Ꮌ", ""}, - 0xab8d: {"Ꮍ", "Ꮍ", ""}, - 0xab8e: {"Ꮎ", "Ꮎ", ""}, - 0xab8f: {"Ꮏ", "Ꮏ", ""}, - 0xab90: {"Ꮐ", "Ꮐ", ""}, - 0xab91: {"Ꮑ", "Ꮑ", ""}, - 0xab92: {"Ꮒ", "Ꮒ", ""}, - 0xab93: {"Ꮓ", "Ꮓ", ""}, - 0xab94: {"Ꮔ", "Ꮔ", ""}, - 0xab95: {"Ꮕ", "Ꮕ", ""}, - 0xab96: {"Ꮖ", "Ꮖ", ""}, - 0xab97: {"Ꮗ", "Ꮗ", ""}, - 0xab98: {"Ꮘ", "Ꮘ", ""}, - 0xab99: {"Ꮙ", "Ꮙ", ""}, - 0xab9a: {"Ꮚ", "Ꮚ", ""}, - 0xab9b: {"Ꮛ", "Ꮛ", ""}, - 0xab9c: {"Ꮜ", "Ꮜ", ""}, - 0xab9d: {"Ꮝ", "Ꮝ", ""}, - 0xab9e: {"Ꮞ", "Ꮞ", ""}, - 0xab9f: {"Ꮟ", "Ꮟ", ""}, - 0xaba0: {"Ꮠ", "Ꮠ", ""}, - 0xaba1: {"Ꮡ", "Ꮡ", ""}, - 0xaba2: {"Ꮢ", "Ꮢ", ""}, - 0xaba3: {"Ꮣ", "Ꮣ", ""}, - 0xaba4: {"Ꮤ", "Ꮤ", ""}, - 0xaba5: {"Ꮥ", "Ꮥ", ""}, - 0xaba6: {"Ꮦ", "Ꮦ", ""}, - 0xaba7: {"Ꮧ", "Ꮧ", ""}, - 0xaba8: {"Ꮨ", "Ꮨ", ""}, - 0xaba9: {"Ꮩ", "Ꮩ", ""}, - 0xabaa: {"Ꮪ", "Ꮪ", ""}, - 0xabab: {"Ꮫ", "Ꮫ", ""}, - 0xabac: {"Ꮬ", "Ꮬ", ""}, - 0xabad: {"Ꮭ", "Ꮭ", ""}, - 0xabae: {"Ꮮ", "Ꮮ", ""}, - 0xabaf: {"Ꮯ", "Ꮯ", ""}, - 0xabb0: {"Ꮰ", "Ꮰ", ""}, - 0xabb1: {"Ꮱ", "Ꮱ", ""}, - 0xabb2: {"Ꮲ", "Ꮲ", ""}, - 0xabb3: {"Ꮳ", "Ꮳ", ""}, - 0xabb4: {"Ꮴ", "Ꮴ", ""}, - 0xabb5: {"Ꮵ", "Ꮵ", ""}, - 0xabb6: {"Ꮶ", "Ꮶ", ""}, - 0xabb7: {"Ꮷ", "Ꮷ", ""}, - 0xabb8: {"Ꮸ", "Ꮸ", ""}, - 0xabb9: {"Ꮹ", "Ꮹ", ""}, - 0xabba: {"Ꮺ", "Ꮺ", ""}, - 0xabbb: {"Ꮻ", "Ꮻ", ""}, - 0xabbc: {"Ꮼ", "Ꮼ", ""}, - 0xabbd: {"Ꮽ", "Ꮽ", ""}, - 0xabbe: {"Ꮾ", "Ꮾ", ""}, - 0xabbf: {"Ꮿ", "Ꮿ", ""}, - 0xfb00: {"", "ff", ""}, - 0xfb01: {"", "fi", ""}, - 0xfb02: {"", "fl", ""}, - 0xfb03: {"", "ffi", ""}, - 0xfb04: {"", "ffl", ""}, - 0xfb05: {"", "st", ""}, - 0xfb06: {"", "st", ""}, - 0xfb13: {"", "մն", ""}, - 0xfb14: {"", "մե", ""}, - 0xfb15: {"", "մի", ""}, - 0xfb16: {"", "վն", ""}, - 0xfb17: {"", "մխ", ""}, - } - - breakProp = []struct{ lo, hi rune }{ - {0x0, 0x26}, - {0x28, 0x2d}, - {0x2f, 0x2f}, - {0x3b, 0x40}, - {0x5b, 0x5e}, - {0x60, 0x60}, - {0x7b, 0xa9}, - {0xab, 0xac}, - {0xae, 0xb4}, - {0xb6, 0xb6}, - {0xb8, 0xb9}, - {0xbb, 0xbf}, - {0xd7, 0xd7}, - {0xf7, 0xf7}, - {0x2c2, 0x2c5}, - {0x2d2, 0x2d6}, - {0x2d8, 0x2df}, - {0x2e5, 0x2eb}, - {0x2ed, 0x2ed}, - {0x2ef, 0x2ff}, - {0x375, 0x375}, - {0x378, 0x379}, - {0x37e, 0x37e}, - {0x380, 0x385}, - {0x38b, 0x38b}, - {0x38d, 0x38d}, - {0x3a2, 0x3a2}, - {0x3f6, 0x3f6}, - {0x482, 0x482}, - {0x530, 0x530}, - {0x557, 0x558}, - {0x55a, 0x560}, - {0x588, 0x590}, - {0x5be, 0x5be}, - {0x5c0, 0x5c0}, - {0x5c3, 0x5c3}, - {0x5c6, 0x5c6}, - {0x5c8, 0x5cf}, - {0x5eb, 0x5ef}, - {0x5f5, 0x5ff}, - {0x606, 0x60f}, - {0x61b, 0x61b}, - {0x61d, 0x61f}, - {0x66a, 0x66a}, - {0x66c, 0x66d}, - {0x6d4, 0x6d4}, - {0x6de, 0x6de}, - {0x6e9, 0x6e9}, - {0x6fd, 0x6fe}, - {0x700, 0x70e}, - {0x74b, 0x74c}, - {0x7b2, 0x7bf}, - {0x7f6, 0x7f9}, - {0x7fb, 0x7ff}, - {0x82e, 0x83f}, - {0x85c, 0x89f}, - {0x8b5, 0x8b5}, - {0x8be, 0x8d3}, - {0x964, 0x965}, - {0x970, 0x970}, - {0x984, 0x984}, - {0x98d, 0x98e}, - {0x991, 0x992}, - {0x9a9, 0x9a9}, - {0x9b1, 0x9b1}, - {0x9b3, 0x9b5}, - {0x9ba, 0x9bb}, - {0x9c5, 0x9c6}, - {0x9c9, 0x9ca}, - {0x9cf, 0x9d6}, - {0x9d8, 0x9db}, - {0x9de, 0x9de}, - {0x9e4, 0x9e5}, - {0x9f2, 0xa00}, - {0xa04, 0xa04}, - {0xa0b, 0xa0e}, - {0xa11, 0xa12}, - {0xa29, 0xa29}, - {0xa31, 0xa31}, - {0xa34, 0xa34}, - {0xa37, 0xa37}, - {0xa3a, 0xa3b}, - {0xa3d, 0xa3d}, - {0xa43, 0xa46}, - {0xa49, 0xa4a}, - {0xa4e, 0xa50}, - {0xa52, 0xa58}, - {0xa5d, 0xa5d}, - {0xa5f, 0xa65}, - {0xa76, 0xa80}, - {0xa84, 0xa84}, - {0xa8e, 0xa8e}, - {0xa92, 0xa92}, - {0xaa9, 0xaa9}, - {0xab1, 0xab1}, - {0xab4, 0xab4}, - {0xaba, 0xabb}, - {0xac6, 0xac6}, - {0xaca, 0xaca}, - {0xace, 0xacf}, - {0xad1, 0xadf}, - {0xae4, 0xae5}, - {0xaf0, 0xaf8}, - {0xafa, 0xb00}, - {0xb04, 0xb04}, - {0xb0d, 0xb0e}, - {0xb11, 0xb12}, - {0xb29, 0xb29}, - {0xb31, 0xb31}, - {0xb34, 0xb34}, - {0xb3a, 0xb3b}, - {0xb45, 0xb46}, - {0xb49, 0xb4a}, - {0xb4e, 0xb55}, - {0xb58, 0xb5b}, - {0xb5e, 0xb5e}, - {0xb64, 0xb65}, - {0xb70, 0xb70}, - {0xb72, 0xb81}, - {0xb84, 0xb84}, - {0xb8b, 0xb8d}, - {0xb91, 0xb91}, - {0xb96, 0xb98}, - {0xb9b, 0xb9b}, - {0xb9d, 0xb9d}, - {0xba0, 0xba2}, - {0xba5, 0xba7}, - {0xbab, 0xbad}, - {0xbba, 0xbbd}, - {0xbc3, 0xbc5}, - {0xbc9, 0xbc9}, - {0xbce, 0xbcf}, - {0xbd1, 0xbd6}, - {0xbd8, 0xbe5}, - {0xbf0, 0xbff}, - {0xc04, 0xc04}, - {0xc0d, 0xc0d}, - {0xc11, 0xc11}, - {0xc29, 0xc29}, - {0xc3a, 0xc3c}, - {0xc45, 0xc45}, - {0xc49, 0xc49}, - {0xc4e, 0xc54}, - {0xc57, 0xc57}, - {0xc5b, 0xc5f}, - {0xc64, 0xc65}, - {0xc70, 0xc7f}, - {0xc84, 0xc84}, - {0xc8d, 0xc8d}, - {0xc91, 0xc91}, - {0xca9, 0xca9}, - {0xcb4, 0xcb4}, - {0xcba, 0xcbb}, - {0xcc5, 0xcc5}, - {0xcc9, 0xcc9}, - {0xcce, 0xcd4}, - {0xcd7, 0xcdd}, - {0xcdf, 0xcdf}, - {0xce4, 0xce5}, - {0xcf0, 0xcf0}, - {0xcf3, 0xd00}, - {0xd04, 0xd04}, - {0xd0d, 0xd0d}, - {0xd11, 0xd11}, - {0xd3b, 0xd3c}, - {0xd45, 0xd45}, - {0xd49, 0xd49}, - {0xd4f, 0xd53}, - {0xd58, 0xd5e}, - {0xd64, 0xd65}, - {0xd70, 0xd79}, - {0xd80, 0xd81}, - {0xd84, 0xd84}, - {0xd97, 0xd99}, - {0xdb2, 0xdb2}, - {0xdbc, 0xdbc}, - {0xdbe, 0xdbf}, - {0xdc7, 0xdc9}, - {0xdcb, 0xdce}, - {0xdd5, 0xdd5}, - {0xdd7, 0xdd7}, - {0xde0, 0xde5}, - {0xdf0, 0xdf1}, - {0xdf4, 0xe30}, - {0xe32, 0xe33}, - {0xe3b, 0xe46}, - {0xe4f, 0xe4f}, - {0xe5a, 0xeb0}, - {0xeb2, 0xeb3}, - {0xeba, 0xeba}, - {0xebd, 0xec7}, - {0xece, 0xecf}, - {0xeda, 0xeff}, - {0xf01, 0xf17}, - {0xf1a, 0xf1f}, - {0xf2a, 0xf34}, - {0xf36, 0xf36}, - {0xf38, 0xf38}, - {0xf3a, 0xf3d}, - {0xf48, 0xf48}, - {0xf6d, 0xf70}, - {0xf85, 0xf85}, - {0xf98, 0xf98}, - {0xfbd, 0xfc5}, - {0xfc7, 0x102a}, - {0x103f, 0x103f}, - {0x104a, 0x1055}, - {0x105a, 0x105d}, - {0x1061, 0x1061}, - {0x1065, 0x1066}, - {0x106e, 0x1070}, - {0x1075, 0x1081}, - {0x108e, 0x108e}, - {0x109e, 0x109f}, - {0x10c6, 0x10c6}, - {0x10c8, 0x10cc}, - {0x10ce, 0x10cf}, - {0x10fb, 0x10fb}, - {0x1249, 0x1249}, - {0x124e, 0x124f}, - {0x1257, 0x1257}, - {0x1259, 0x1259}, - {0x125e, 0x125f}, - {0x1289, 0x1289}, - {0x128e, 0x128f}, - {0x12b1, 0x12b1}, - {0x12b6, 0x12b7}, - {0x12bf, 0x12bf}, - {0x12c1, 0x12c1}, - {0x12c6, 0x12c7}, - {0x12d7, 0x12d7}, - {0x1311, 0x1311}, - {0x1316, 0x1317}, - {0x135b, 0x135c}, - {0x1360, 0x137f}, - {0x1390, 0x139f}, - {0x13f6, 0x13f7}, - {0x13fe, 0x1400}, - {0x166d, 0x166e}, - {0x1680, 0x1680}, - {0x169b, 0x169f}, - {0x16eb, 0x16ed}, - {0x16f9, 0x16ff}, - {0x170d, 0x170d}, - {0x1715, 0x171f}, - {0x1735, 0x173f}, - {0x1754, 0x175f}, - {0x176d, 0x176d}, - {0x1771, 0x1771}, - {0x1774, 0x17b3}, - {0x17d4, 0x17dc}, - {0x17de, 0x17df}, - {0x17ea, 0x180a}, - {0x180f, 0x180f}, - {0x181a, 0x181f}, - {0x1878, 0x187f}, - {0x18ab, 0x18af}, - {0x18f6, 0x18ff}, - {0x191f, 0x191f}, - {0x192c, 0x192f}, - {0x193c, 0x1945}, - {0x1950, 0x19cf}, - {0x19da, 0x19ff}, - {0x1a1c, 0x1a54}, - {0x1a5f, 0x1a5f}, - {0x1a7d, 0x1a7e}, - {0x1a8a, 0x1a8f}, - {0x1a9a, 0x1aaf}, - {0x1abf, 0x1aff}, - {0x1b4c, 0x1b4f}, - {0x1b5a, 0x1b6a}, - {0x1b74, 0x1b7f}, - {0x1bf4, 0x1bff}, - {0x1c38, 0x1c3f}, - {0x1c4a, 0x1c4c}, - {0x1c7e, 0x1c7f}, - {0x1c89, 0x1ccf}, - {0x1cd3, 0x1cd3}, - {0x1cf7, 0x1cf7}, - {0x1cfa, 0x1cff}, - {0x1df6, 0x1dfa}, - {0x1f16, 0x1f17}, - {0x1f1e, 0x1f1f}, - {0x1f46, 0x1f47}, - {0x1f4e, 0x1f4f}, - {0x1f58, 0x1f58}, - {0x1f5a, 0x1f5a}, - {0x1f5c, 0x1f5c}, - {0x1f5e, 0x1f5e}, - {0x1f7e, 0x1f7f}, - {0x1fb5, 0x1fb5}, - {0x1fbd, 0x1fbd}, - {0x1fbf, 0x1fc1}, - {0x1fc5, 0x1fc5}, - {0x1fcd, 0x1fcf}, - {0x1fd4, 0x1fd5}, - {0x1fdc, 0x1fdf}, - {0x1fed, 0x1ff1}, - {0x1ff5, 0x1ff5}, - {0x1ffd, 0x200b}, - {0x2010, 0x2017}, - {0x201a, 0x2023}, - {0x2025, 0x2026}, - {0x2028, 0x2029}, - {0x2030, 0x203e}, - {0x2041, 0x2053}, - {0x2055, 0x205f}, - {0x2065, 0x2065}, - {0x2070, 0x2070}, - {0x2072, 0x207e}, - {0x2080, 0x208f}, - {0x209d, 0x20cf}, - {0x20f1, 0x2101}, - {0x2103, 0x2106}, - {0x2108, 0x2109}, - {0x2114, 0x2114}, - {0x2116, 0x2118}, - {0x211e, 0x2123}, - {0x2125, 0x2125}, - {0x2127, 0x2127}, - {0x2129, 0x2129}, - {0x212e, 0x212e}, - {0x213a, 0x213b}, - {0x2140, 0x2144}, - {0x214a, 0x214d}, - {0x214f, 0x215f}, - {0x2189, 0x24b5}, - {0x24ea, 0x2bff}, - {0x2c2f, 0x2c2f}, - {0x2c5f, 0x2c5f}, - {0x2ce5, 0x2cea}, - {0x2cf4, 0x2cff}, - {0x2d26, 0x2d26}, - {0x2d28, 0x2d2c}, - {0x2d2e, 0x2d2f}, - {0x2d68, 0x2d6e}, - {0x2d70, 0x2d7e}, - {0x2d97, 0x2d9f}, - {0x2da7, 0x2da7}, - {0x2daf, 0x2daf}, - {0x2db7, 0x2db7}, - {0x2dbf, 0x2dbf}, - {0x2dc7, 0x2dc7}, - {0x2dcf, 0x2dcf}, - {0x2dd7, 0x2dd7}, - {0x2ddf, 0x2ddf}, - {0x2e00, 0x2e2e}, - {0x2e30, 0x3004}, - {0x3006, 0x3029}, - {0x3030, 0x303a}, - {0x303d, 0x3098}, - {0x309b, 0x3104}, - {0x312e, 0x3130}, - {0x318f, 0x319f}, - {0x31bb, 0x9fff}, - {0xa48d, 0xa4cf}, - {0xa4fe, 0xa4ff}, - {0xa60d, 0xa60f}, - {0xa62c, 0xa63f}, - {0xa673, 0xa673}, - {0xa67e, 0xa67e}, - {0xa6f2, 0xa716}, - {0xa720, 0xa721}, - {0xa789, 0xa78a}, - {0xa7af, 0xa7af}, - {0xa7b8, 0xa7f6}, - {0xa828, 0xa83f}, - {0xa874, 0xa87f}, - {0xa8c6, 0xa8cf}, - {0xa8da, 0xa8df}, - {0xa8f8, 0xa8fa}, - {0xa8fc, 0xa8fc}, - {0xa8fe, 0xa8ff}, - {0xa92e, 0xa92f}, - {0xa954, 0xa95f}, - {0xa97d, 0xa97f}, - {0xa9c1, 0xa9ce}, - {0xa9da, 0xa9e4}, - {0xa9e6, 0xa9ef}, - {0xa9fa, 0xa9ff}, - {0xaa37, 0xaa3f}, - {0xaa4e, 0xaa4f}, - {0xaa5a, 0xaa7a}, - {0xaa7e, 0xaaaf}, - {0xaab1, 0xaab1}, - {0xaab5, 0xaab6}, - {0xaab9, 0xaabd}, - {0xaac0, 0xaac0}, - {0xaac2, 0xaadf}, - {0xaaf0, 0xaaf1}, - {0xaaf7, 0xab00}, - {0xab07, 0xab08}, - {0xab0f, 0xab10}, - {0xab17, 0xab1f}, - {0xab27, 0xab27}, - {0xab2f, 0xab2f}, - {0xab5b, 0xab5b}, - {0xab66, 0xab6f}, - {0xabeb, 0xabeb}, - {0xabee, 0xabef}, - {0xabfa, 0xabff}, - {0xd7a4, 0xd7af}, - {0xd7c7, 0xd7ca}, - {0xd7fc, 0xfaff}, - {0xfb07, 0xfb12}, - {0xfb18, 0xfb1c}, - {0xfb29, 0xfb29}, - {0xfb37, 0xfb37}, - {0xfb3d, 0xfb3d}, - {0xfb3f, 0xfb3f}, - {0xfb42, 0xfb42}, - {0xfb45, 0xfb45}, - {0xfbb2, 0xfbd2}, - {0xfd3e, 0xfd4f}, - {0xfd90, 0xfd91}, - {0xfdc8, 0xfdef}, - {0xfdfc, 0xfdff}, - {0xfe10, 0xfe12}, - {0xfe14, 0xfe1f}, - {0xfe30, 0xfe32}, - {0xfe35, 0xfe4c}, - {0xfe50, 0xfe51}, - {0xfe53, 0xfe54}, - {0xfe56, 0xfe6f}, - {0xfe75, 0xfe75}, - {0xfefd, 0xfefe}, - {0xff00, 0xff06}, - {0xff08, 0xff0d}, - {0xff0f, 0xff19}, - {0xff1b, 0xff20}, - {0xff3b, 0xff3e}, - {0xff40, 0xff40}, - {0xff5b, 0xff9d}, - {0xffbf, 0xffc1}, - {0xffc8, 0xffc9}, - {0xffd0, 0xffd1}, - {0xffd8, 0xffd9}, - {0xffdd, 0xfff8}, - {0xfffc, 0xffff}, - {0x1000c, 0x1000c}, - {0x10027, 0x10027}, - {0x1003b, 0x1003b}, - {0x1003e, 0x1003e}, - {0x1004e, 0x1004f}, - {0x1005e, 0x1007f}, - {0x100fb, 0x1013f}, - {0x10175, 0x101fc}, - {0x101fe, 0x1027f}, - {0x1029d, 0x1029f}, - {0x102d1, 0x102df}, - {0x102e1, 0x102ff}, - {0x10320, 0x1032f}, - {0x1034b, 0x1034f}, - {0x1037b, 0x1037f}, - {0x1039e, 0x1039f}, - {0x103c4, 0x103c7}, - {0x103d0, 0x103d0}, - {0x103d6, 0x103ff}, - {0x1049e, 0x1049f}, - {0x104aa, 0x104af}, - {0x104d4, 0x104d7}, - {0x104fc, 0x104ff}, - {0x10528, 0x1052f}, - {0x10564, 0x105ff}, - {0x10737, 0x1073f}, - {0x10756, 0x1075f}, - {0x10768, 0x107ff}, - {0x10806, 0x10807}, - {0x10809, 0x10809}, - {0x10836, 0x10836}, - {0x10839, 0x1083b}, - {0x1083d, 0x1083e}, - {0x10856, 0x1085f}, - {0x10877, 0x1087f}, - {0x1089f, 0x108df}, - {0x108f3, 0x108f3}, - {0x108f6, 0x108ff}, - {0x10916, 0x1091f}, - {0x1093a, 0x1097f}, - {0x109b8, 0x109bd}, - {0x109c0, 0x109ff}, - {0x10a04, 0x10a04}, - {0x10a07, 0x10a0b}, - {0x10a14, 0x10a14}, - {0x10a18, 0x10a18}, - {0x10a34, 0x10a37}, - {0x10a3b, 0x10a3e}, - {0x10a40, 0x10a5f}, - {0x10a7d, 0x10a7f}, - {0x10a9d, 0x10abf}, - {0x10ac8, 0x10ac8}, - {0x10ae7, 0x10aff}, - {0x10b36, 0x10b3f}, - {0x10b56, 0x10b5f}, - {0x10b73, 0x10b7f}, - {0x10b92, 0x10bff}, - {0x10c49, 0x10c7f}, - {0x10cb3, 0x10cbf}, - {0x10cf3, 0x10fff}, - {0x11047, 0x11065}, - {0x11070, 0x1107e}, - {0x110bb, 0x110bc}, - {0x110be, 0x110cf}, - {0x110e9, 0x110ef}, - {0x110fa, 0x110ff}, - {0x11135, 0x11135}, - {0x11140, 0x1114f}, - {0x11174, 0x11175}, - {0x11177, 0x1117f}, - {0x111c5, 0x111c9}, - {0x111cd, 0x111cf}, - {0x111db, 0x111db}, - {0x111dd, 0x111ff}, - {0x11212, 0x11212}, - {0x11238, 0x1123d}, - {0x1123f, 0x1127f}, - {0x11287, 0x11287}, - {0x11289, 0x11289}, - {0x1128e, 0x1128e}, - {0x1129e, 0x1129e}, - {0x112a9, 0x112af}, - {0x112eb, 0x112ef}, - {0x112fa, 0x112ff}, - {0x11304, 0x11304}, - {0x1130d, 0x1130e}, - {0x11311, 0x11312}, - {0x11329, 0x11329}, - {0x11331, 0x11331}, - {0x11334, 0x11334}, - {0x1133a, 0x1133b}, - {0x11345, 0x11346}, - {0x11349, 0x1134a}, - {0x1134e, 0x1134f}, - {0x11351, 0x11356}, - {0x11358, 0x1135c}, - {0x11364, 0x11365}, - {0x1136d, 0x1136f}, - {0x11375, 0x113ff}, - {0x1144b, 0x1144f}, - {0x1145a, 0x1147f}, - {0x114c6, 0x114c6}, - {0x114c8, 0x114cf}, - {0x114da, 0x1157f}, - {0x115b6, 0x115b7}, - {0x115c1, 0x115d7}, - {0x115de, 0x115ff}, - {0x11641, 0x11643}, - {0x11645, 0x1164f}, - {0x1165a, 0x1167f}, - {0x116b8, 0x116bf}, - {0x116ca, 0x1171c}, - {0x1172c, 0x1172f}, - {0x1173a, 0x1189f}, - {0x118ea, 0x118fe}, - {0x11900, 0x11abf}, - {0x11af9, 0x11bff}, - {0x11c09, 0x11c09}, - {0x11c37, 0x11c37}, - {0x11c41, 0x11c4f}, - {0x11c5a, 0x11c71}, - {0x11c90, 0x11c91}, - {0x11ca8, 0x11ca8}, - {0x11cb7, 0x11fff}, - {0x1239a, 0x123ff}, - {0x1246f, 0x1247f}, - {0x12544, 0x12fff}, - {0x1342f, 0x143ff}, - {0x14647, 0x167ff}, - {0x16a39, 0x16a3f}, - {0x16a5f, 0x16a5f}, - {0x16a6a, 0x16acf}, - {0x16aee, 0x16aef}, - {0x16af5, 0x16aff}, - {0x16b37, 0x16b3f}, - {0x16b44, 0x16b4f}, - {0x16b5a, 0x16b62}, - {0x16b78, 0x16b7c}, - {0x16b90, 0x16eff}, - {0x16f45, 0x16f4f}, - {0x16f7f, 0x16f8e}, - {0x16fa0, 0x16fdf}, - {0x16fe1, 0x1bbff}, - {0x1bc6b, 0x1bc6f}, - {0x1bc7d, 0x1bc7f}, - {0x1bc89, 0x1bc8f}, - {0x1bc9a, 0x1bc9c}, - {0x1bc9f, 0x1bc9f}, - {0x1bca4, 0x1d164}, - {0x1d16a, 0x1d16c}, - {0x1d183, 0x1d184}, - {0x1d18c, 0x1d1a9}, - {0x1d1ae, 0x1d241}, - {0x1d245, 0x1d3ff}, - {0x1d455, 0x1d455}, - {0x1d49d, 0x1d49d}, - {0x1d4a0, 0x1d4a1}, - {0x1d4a3, 0x1d4a4}, - {0x1d4a7, 0x1d4a8}, - {0x1d4ad, 0x1d4ad}, - {0x1d4ba, 0x1d4ba}, - {0x1d4bc, 0x1d4bc}, - {0x1d4c4, 0x1d4c4}, - {0x1d506, 0x1d506}, - {0x1d50b, 0x1d50c}, - {0x1d515, 0x1d515}, - {0x1d51d, 0x1d51d}, - {0x1d53a, 0x1d53a}, - {0x1d53f, 0x1d53f}, - {0x1d545, 0x1d545}, - {0x1d547, 0x1d549}, - {0x1d551, 0x1d551}, - {0x1d6a6, 0x1d6a7}, - {0x1d6c1, 0x1d6c1}, - {0x1d6db, 0x1d6db}, - {0x1d6fb, 0x1d6fb}, - {0x1d715, 0x1d715}, - {0x1d735, 0x1d735}, - {0x1d74f, 0x1d74f}, - {0x1d76f, 0x1d76f}, - {0x1d789, 0x1d789}, - {0x1d7a9, 0x1d7a9}, - {0x1d7c3, 0x1d7c3}, - {0x1d7cc, 0x1d7cd}, - {0x1d800, 0x1d9ff}, - {0x1da37, 0x1da3a}, - {0x1da6d, 0x1da74}, - {0x1da76, 0x1da83}, - {0x1da85, 0x1da9a}, - {0x1daa0, 0x1daa0}, - {0x1dab0, 0x1dfff}, - {0x1e007, 0x1e007}, - {0x1e019, 0x1e01a}, - {0x1e022, 0x1e022}, - {0x1e025, 0x1e025}, - {0x1e02b, 0x1e7ff}, - {0x1e8c5, 0x1e8cf}, - {0x1e8d7, 0x1e8ff}, - {0x1e94b, 0x1e94f}, - {0x1e95a, 0x1edff}, - {0x1ee04, 0x1ee04}, - {0x1ee20, 0x1ee20}, - {0x1ee23, 0x1ee23}, - {0x1ee25, 0x1ee26}, - {0x1ee28, 0x1ee28}, - {0x1ee33, 0x1ee33}, - {0x1ee38, 0x1ee38}, - {0x1ee3a, 0x1ee3a}, - {0x1ee3c, 0x1ee41}, - {0x1ee43, 0x1ee46}, - {0x1ee48, 0x1ee48}, - {0x1ee4a, 0x1ee4a}, - {0x1ee4c, 0x1ee4c}, - {0x1ee50, 0x1ee50}, - {0x1ee53, 0x1ee53}, - {0x1ee55, 0x1ee56}, - {0x1ee58, 0x1ee58}, - {0x1ee5a, 0x1ee5a}, - {0x1ee5c, 0x1ee5c}, - {0x1ee5e, 0x1ee5e}, - {0x1ee60, 0x1ee60}, - {0x1ee63, 0x1ee63}, - {0x1ee65, 0x1ee66}, - {0x1ee6b, 0x1ee6b}, - {0x1ee73, 0x1ee73}, - {0x1ee78, 0x1ee78}, - {0x1ee7d, 0x1ee7d}, - {0x1ee7f, 0x1ee7f}, - {0x1ee8a, 0x1ee8a}, - {0x1ee9c, 0x1eea0}, - {0x1eea4, 0x1eea4}, - {0x1eeaa, 0x1eeaa}, - {0x1eebc, 0x1f12f}, - {0x1f14a, 0x1f14f}, - {0x1f16a, 0x1f16f}, - {0x1f18a, 0x1ffff}, - } - - breakTest = []string{ - "AA", - "ÄA", - "Aa\u2060", - "Äa\u2060", - "Aa|:", - "Äa|:", - "Aa|'", - "Äa|'", - "Aa|'\u2060", - "Äa|'\u2060", - "Aa|,", - "Äa|,", - "a\u2060A", - "a\u2060̈A", - "a\u2060a\u2060", - "a\u2060̈a\u2060", - "a\u2060a|:", - "a\u2060̈a|:", - "a\u2060a|'", - "a\u2060̈a|'", - "a\u2060a|'\u2060", - "a\u2060̈a|'\u2060", - "a\u2060a|,", - "a\u2060̈a|,", - "a:A", - "a:̈A", - "a:a\u2060", - "a:̈a\u2060", - "a:a|:", - "a:̈a|:", - "a:a|'", - "a:̈a|'", - "a:a|'\u2060", - "a:̈a|'\u2060", - "a:a|,", - "a:̈a|,", - "a'A", - "a'̈A", - "a'a\u2060", - "a'̈a\u2060", - "a'a|:", - "a'̈a|:", - "a'a|'", - "a'̈a|'", - "a'a|'\u2060", - "a'̈a|'\u2060", - "a'a|,", - "a'̈a|,", - "a'\u2060A", - "a'\u2060̈A", - "a'\u2060a\u2060", - "a'\u2060̈a\u2060", - "a'\u2060a|:", - "a'\u2060̈a|:", - "a'\u2060a|'", - "a'\u2060̈a|'", - "a'\u2060a|'\u2060", - "a'\u2060̈a|'\u2060", - "a'\u2060a|,", - "a'\u2060̈a|,", - "a|,|A", - "a|,̈|A", - "a|,|a\u2060", - "a|,̈|a\u2060", - "a|,|a|:", - "a|,̈|a|:", - "a|,|a|'", - "a|,̈|a|'", - "a|,|a|'\u2060", - "a|,̈|a|'\u2060", - "a|,|a|,", - "a|,̈|a|,", - "AAA", - "A:A", - "A|:|:|A", - "A00A", - "A__A", - "a|🇦🇧|🇨|b", - "a|🇦🇧\u200d|🇨|b", - "a|🇦\u200d🇧|🇨|b", - "a|🇦🇧|🇨🇩|b", - "ä\u200d̈b", - "1_a|:|:|a", - "1_a|:|.|a", - "1_a|:|,|a", - "1_a|.|:|a", - "1_a|.|.|a", - "1_a|.|,|a", - "1_a|,|:|a", - "1_a|,|.|a", - "1_a|,|,|a", - "a_a|:|:|1", - "a|:|:|a", - "a_1|:|:|a", - "a_a|:|:|a", - "a_a|:|.|1", - "a|:|.|a", - "a_1|:|.|a", - "a_a|:|.|a", - "a_a|:|,|1", - "a|:|,|a", - "a_1|:|,|a", - "a_a|:|,|a", - "a_a|.|:|1", - "a|.|:|a", - "a_1|.|:|a", - "a_a|.|:|a", - "a_a|.|.|1", - "a|.|.|a", - "a_1|.|.|a", - "a_a|.|.|a", - "a_a|.|,|1", - "a|.|,|a", - "a_1|.|,|a", - "a_a|.|,|a", - "a_a|,|:|1", - "a|,|:|a", - "a_1|,|:|a", - "a_a|,|:|a", - "a_a|,|.|1", - "a|,|.|a", - "a_1|,|.|a", - "a_a|,|.|a", - "a_a|,|,|1", - "a|,|,|a", - "a_1|,|,|a", - "a_a|,|,|a", - } -) diff --git a/vendor/golang.org/x/text/cmd/gotext/common.go b/vendor/golang.org/x/text/cmd/gotext/common.go new file mode 100644 index 0000000..51322db --- /dev/null +++ b/vendor/golang.org/x/text/cmd/gotext/common.go @@ -0,0 +1,49 @@ +// Copyright 2017 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. + +package main + +import ( + "fmt" + "go/build" + "go/parser" + + "golang.org/x/tools/go/loader" +) + +const ( + extractFile = "extracted.gotext.json" + outFile = "out.gotext.json" + gotextSuffix = ".gotext.json" +) + +// NOTE: The command line tool already prefixes with "gotext:". +var ( + wrap = func(err error, msg string) error { + if err == nil { + return nil + } + return fmt.Errorf("%s: %v", msg, err) + } + errorf = fmt.Errorf +) + +// TODO: still used. Remove when possible. +func loadPackages(conf *loader.Config, args []string) (*loader.Program, error) { + if len(args) == 0 { + args = []string{"."} + } + + conf.Build = &build.Default + conf.ParserMode = parser.ParseComments + + // Use the initial packages from the command line. + args, err := conf.FromArgs(args, false) + if err != nil { + return nil, wrap(err, "loading packages failed") + } + + // Load, parse and type-check the whole program. + return conf.Load() +} diff --git a/vendor/golang.org/x/text/cmd/gotext/doc.go b/vendor/golang.org/x/text/cmd/gotext/doc.go index 54eb485..2a274f7 100644 --- a/vendor/golang.org/x/text/cmd/gotext/doc.go +++ b/vendor/golang.org/x/text/cmd/gotext/doc.go @@ -1,9 +1,4 @@ -// Copyright 2016 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. - -// DO NOT EDIT THIS FILE. GENERATED BY go generate. -// Edit the documentation in other files and rerun go generate to generate this one. +// Code generated by go generate. DO NOT EDIT. // gotext is a tool for managing text in Go source code. // @@ -13,7 +8,9 @@ // // The commands are: // -// extract extract strings to be translated from code +// extract extracts strings to be translated from code +// rewrite rewrites fmt functions to use a message Printer +// generate generates code to insert translated messages // // Use "go help [command]" for more information about a command. // @@ -23,7 +20,7 @@ // Use "gotext help [topic]" for more information about that topic. // // -// Extract strings to be translated from code +// Extracts strings to be translated from code // // Usage: // @@ -32,4 +29,25 @@ // // // +// Rewrites fmt functions to use a message Printer +// +// Usage: +// +// go rewrite +// +// rewrite is typically done once for a project. It rewrites all usages of +// fmt to use x/text's message package whenever a message.Printer is in scope. +// It rewrites Print and Println calls with constant strings to the equivalent +// using Printf to allow translators to reorder arguments. +// +// +// Generates code to insert translated messages +// +// Usage: +// +// go generate +// +// +// +// package main diff --git a/vendor/golang.org/x/text/cmd/gotext/examples/extract/catalog.go b/vendor/golang.org/x/text/cmd/gotext/examples/extract/catalog.go new file mode 100644 index 0000000..bc6130a --- /dev/null +++ b/vendor/golang.org/x/text/cmd/gotext/examples/extract/catalog.go @@ -0,0 +1,84 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package main + +import ( + "golang.org/x/text/language" + "golang.org/x/text/message" + "golang.org/x/text/message/catalog" +) + +type dictionary struct { + index []uint32 + data string +} + +func (d *dictionary) Lookup(key string) (data string, ok bool) { + p := messageKeyToIndex[key] + start, end := d.index[p], d.index[p+1] + if start == end { + return "", false + } + return d.data[start:end], true +} + +func init() { + dict := map[string]catalog.Dictionary{ + "de": &dictionary{index: deIndex, data: deData}, + "en_US": &dictionary{index: en_USIndex, data: en_USData}, + "zh": &dictionary{index: zhIndex, data: zhData}, + } + fallback := language.MustParse("en-US") + cat, err := catalog.NewFromMap(dict, catalog.Fallback(fallback)) + if err != nil { + panic(err) + } + message.DefaultCatalog = cat +} + +var messageKeyToIndex = map[string]int{ + "%.2[1]f miles traveled (%[1]f)": 8, + "%[1]s is visiting %[3]s!\n": 3, + "%d files remaining!": 5, + "%d more files remaining!": 4, + "%s is out of order!": 7, + "%s is visiting %s!\n": 2, + "Hello %s!\n": 1, + "Hello world!\n": 0, + "Use the following code for your discount: %d\n": 6, +} + +var deIndex = []uint32{ // 10 elements + 0x00000000, 0x00000011, 0x00000023, 0x0000003d, + 0x00000057, 0x00000076, 0x00000076, 0x00000076, + 0x00000076, 0x00000076, +} // Size: 64 bytes + +const deData string = "" + // Size: 118 bytes + "\x04\x00\x01\x0a\x0c\x02Hallo Welt!\x04\x00\x01\x0a\x0d\x02Hallo %[1]s!" + + "\x04\x00\x01\x0a\x15\x02%[1]s besucht %[2]s!\x04\x00\x01\x0a\x15\x02%[1]" + + "s besucht %[3]s!\x02Noch %[1]d Bestände zu gehen!" + +var en_USIndex = []uint32{ // 10 elements + 0x00000000, 0x00000012, 0x00000024, 0x00000042, + 0x00000060, 0x000000a3, 0x000000ba, 0x000000ef, + 0x00000106, 0x00000125, +} // Size: 64 bytes + +const en_USData string = "" + // Size: 293 bytes + "\x04\x00\x01\x0a\x0d\x02Hello world!\x04\x00\x01\x0a\x0d\x02Hello %[1]sn" + + "\x04\x00\x01\x0a\x19\x02%[1]s is visiting %[2]s!\x04\x00\x01\x0a\x19\x02" + + "%[1]s is visiting %[3]s!\x14\x01\x81\x01\x00\x02\x14\x02One file remaini" + + "ng!\x00&\x02There are %[1]d more files remaining!\x02%[1]d files remaini" + + "ng!\x04\x00\x01\x0a0\x02Use the following code for your discount: %[1]d" + + "\x02%[1]s is out of order!\x02%.2[1]f miles traveled (%[1]f)" + +var zhIndex = []uint32{ // 10 elements + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, +} // Size: 64 bytes + +const zhData string = "" + +// Total table size 603 bytes (0KiB); checksum: 1D2754EE diff --git a/vendor/golang.org/x/text/cmd/gotext/examples/extract/locales/de/messages.gotext.json b/vendor/golang.org/x/text/cmd/gotext/examples/extract/locales/de/messages.gotext.json new file mode 100755 index 0000000..5e1d3b3 --- /dev/null +++ b/vendor/golang.org/x/text/cmd/gotext/examples/extract/locales/de/messages.gotext.json @@ -0,0 +1,186 @@ +{ + "language": "de", + "messages": [ + { + "id": "Hello world!", + "key": "Hello world!\n", + "message": "Hello world!", + "translation": "Hallo Welt!", + "position": "golang.org/x/text/cmd/gotext/examples/extract/main.go:27:10" + }, + { + "id": "Hello {City}!", + "key": "Hello %s!\n", + "message": "Hello {City}!", + "translation": "Hallo {City}!", + "placeholders": [ + { + "id": "City", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "city" + } + ], + "position": "golang.org/x/text/cmd/gotext/examples/extract/main.go:31:10" + }, + { + "id": "Hello {Town}!", + "key": "Hello %s!\n", + "message": "Hello {Town}!", + "translation": "Hallo {Town}!", + "placeholders": [ + { + "id": "Town", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "town", + "comment": "Town" + } + ], + "position": "golang.org/x/text/cmd/gotext/examples/extract/main.go:35:10" + }, + { + "id": "{Person} is visiting {Place}!", + "key": "%s is visiting %s!\n", + "message": "{Person} is visiting {Place}!", + "translation": "{Person} besucht {Place}!", + "placeholders": [ + { + "id": "Person", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "person", + "comment": "The person of matter." + }, + { + "id": "Place", + "string": "%[2]s", + "type": "string", + "underlyingType": "string", + "argNum": 2, + "expr": "place", + "comment": "Place the person is visiting." + } + ], + "position": "golang.org/x/text/cmd/gotext/examples/extract/main.go:40:10" + }, + { + "id": "{Person} is visiting {Place}!", + "key": "%[1]s is visiting %[3]s!\n", + "message": "{Person} is visiting {Place}!", + "translation": "{Person} besucht {Place}!", + "comment": "Person visiting a place.", + "placeholders": [ + { + "id": "Person", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "pp.Person" + }, + { + "id": "Place", + "string": "%[3]s", + "type": "string", + "underlyingType": "string", + "argNum": 3, + "expr": "pp.Place", + "comment": "Place the person is visiting." + }, + { + "id": "Extra", + "string": "%[2]v", + "type": "int", + "underlyingType": "int", + "argNum": 2, + "expr": "pp.extra" + } + ], + "position": "golang.org/x/text/cmd/gotext/examples/extract/main.go:55:10" + }, + { + "id": "{N} more files remaining!", + "key": "%d more files remaining!", + "message": "{N} more files remaining!", + "translation": "Noch {N} Bestände zu gehen!", + "placeholders": [ + { + "id": "N", + "string": "%[1]d", + "type": "int", + "underlyingType": "int", + "argNum": 1, + "expr": "n" + } + ], + "position": "golang.org/x/text/cmd/gotext/examples/extract/main.go:67:10" + }, + { + "id": "Use the following code for your discount: {ReferralCode}", + "key": "Use the following code for your discount: %d\n", + "message": "Use the following code for your discount: {ReferralCode}", + "translation": "", + "placeholders": [ + { + "id": "ReferralCode", + "string": "%[1]d", + "type": "golang.org/x/text/cmd/gotext/examples/extract.referralCode", + "underlyingType": "int", + "argNum": 1, + "expr": "c" + } + ], + "position": "golang.org/x/text/cmd/gotext/examples/extract/main.go:73:10" + }, + { + "id": [ "msgOutOfOrder", "{Device} is out of order!" ], + "key": "%s is out of order!", + "message": "{Device} is out of order!", + "translation": "", + "comment": "FOO\n", + "placeholders": [ + { + "id": "Device", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "device" + } + ], + "position": "golang.org/x/text/cmd/gotext/examples/extract/main.go:81:10" + }, + { + "id": "{Miles} miles traveled ({Miles_1})", + "key": "%.2[1]f miles traveled (%[1]f)", + "message": "{Miles} miles traveled ({Miles_1})", + "translation": "", + "placeholders": [ + { + "id": "Miles", + "string": "%.2[1]f", + "type": "float64", + "underlyingType": "float64", + "argNum": 1, + "expr": "miles" + }, + { + "id": "Miles_1", + "string": "%[1]f", + "type": "float64", + "underlyingType": "float64", + "argNum": 1, + "expr": "miles" + } + ], + "position": "golang.org/x/text/cmd/gotext/examples/extract/main.go:85:10" + } + ] +} diff --git a/vendor/golang.org/x/text/cmd/gotext/examples/extract/locales/de/out.gotext.json b/vendor/golang.org/x/text/cmd/gotext/examples/extract/locales/de/out.gotext.json new file mode 100755 index 0000000..696eeb7 --- /dev/null +++ b/vendor/golang.org/x/text/cmd/gotext/examples/extract/locales/de/out.gotext.json @@ -0,0 +1,137 @@ +{ + "language": "de", + "messages": [ + { + "id": "Hello world!", + "message": "Hello world!", + "translation": "Hallo Welt!" + }, + { + "id": "Hello {City}!", + "message": "Hello {City}!", + "translation": "Hallo {City}!", + "placeholders": [ + { + "id": "City", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "city" + } + ] + }, + { + "id": "{Person} is visiting {Place}!", + "message": "{Person} is visiting {Place}!", + "translation": "{Person} besucht {Place}!", + "placeholders": [ + { + "id": "Person", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "person", + "comment": "The person of matter." + }, + { + "id": "Place", + "string": "%[2]s", + "type": "string", + "underlyingType": "string", + "argNum": 2, + "expr": "place", + "comment": "Place the person is visiting." + } + ] + }, + { + "id": "{2} files remaining!", + "message": "{2} files remaining!", + "translation": "", + "placeholders": [ + { + "id": "2", + "string": "%[1]d", + "type": "int", + "underlyingType": "int", + "argNum": 1, + "expr": "2" + } + ] + }, + { + "id": "{N} more files remaining!", + "message": "{N} more files remaining!", + "translation": "Noch {N} Bestände zu gehen!", + "placeholders": [ + { + "id": "N", + "string": "%[1]d", + "type": "int", + "underlyingType": "int", + "argNum": 1, + "expr": "n" + } + ] + }, + { + "id": "Use the following code for your discount: {ReferralCode}", + "message": "Use the following code for your discount: {ReferralCode}", + "translation": "", + "placeholders": [ + { + "id": "ReferralCode", + "string": "%[1]d", + "type": "golang.org/x/text/cmd/gotext/examples/extract.referralCode", + "underlyingType": "int", + "argNum": 1, + "expr": "c" + } + ] + }, + { + "id": [ + "msgOutOfOrder", + "{Device} is out of order!" + ], + "message": "{Device} is out of order!", + "translation": "", + "comment": "FOO\n", + "placeholders": [ + { + "id": "Device", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "device" + } + ] + }, + { + "id": "{Miles} miles traveled ({Miles_1})", + "message": "{Miles} miles traveled ({Miles_1})", + "translation": "", + "placeholders": [ + { + "id": "Miles", + "string": "%.2[1]f", + "type": "float64", + "underlyingType": "float64", + "argNum": 1, + "expr": "miles" + }, + { + "id": "Miles_1", + "string": "%[1]f", + "type": "float64", + "underlyingType": "float64", + "argNum": 1, + "expr": "miles" + } + ] + } + ] +} \ No newline at end of file diff --git a/vendor/golang.org/x/text/cmd/gotext/examples/extract/locales/en-US/messages.gotext.json b/vendor/golang.org/x/text/cmd/gotext/examples/extract/locales/en-US/messages.gotext.json new file mode 100755 index 0000000..5f6f8b0 --- /dev/null +++ b/vendor/golang.org/x/text/cmd/gotext/examples/extract/locales/en-US/messages.gotext.json @@ -0,0 +1,82 @@ +{ + "language": "en-US", + "messages": [ + { + "id": "Hello world!", + "key": "Hello world!\n", + "message": "Hello world!", + "translation": "Hello world!", + "position": "golang.org/x/text/cmd/gotext/examples/extract/main.go:27:10" + }, + { + "id": "Hello {City}!", + "key": "Hello %s!\n", + "message": "Hello {City}!", + "translation": "Hello {City}n" + }, + { + "id": "Hello {Town}!", + "key": "Hello %s!\n", + "message": "Hello {Town}!", + "translation": "Hello {Town}!", + "placeholders": [ + { + "id": "Town", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "town", + "comment": "Town" + } + ] + }, + { + "id": "{Person} is visiting {Place}!", + "key": "%s is visiting %s!\n", + "message": "{Person} is visiting {Place}!", + "translation": "{Person} is visiting {Place}!\n" + }, + { + "id": "{Person} is visiting {Place}!", + "key": "%[1]s is visiting %[3]s!\n", + "message": "{Person} is visiting {Place}!", + "translation": "{Person} is visiting {Place}!", + "comment": "Person visiting a place." + }, + { + "id": "{N} more files remaining!", + "key": "%d more files remaining!", + "message": "{N} more files remaining!", + "translation": { + "select": { + "feature": "plural", + "arg": "N", + "cases": { + "one": "One file remaining!", + "other": "There are {N} more files remaining!" + } + } + } + }, + { + "id": "Use the following code for your discount: {ReferralCode}", + "key": "Use the following code for your discount: %d\n", + "message": "Use the following code for your discount: {ReferralCode}", + "translation": "" + }, + { + "id": [ "msgOutOfOrder", "{Device} is out of order!" ], + "key": "%s is out of order!", + "message": "{Device} is out of order!", + "translation": "{Device} is out of order!", + "comment": "FOO\n" + }, + { + "id": "{Miles} miles traveled ({Miles_1})", + "key": "%.2[1]f miles traveled (%[1]f)", + "message": "{Miles} miles traveled ({Miles_1})", + "translation": "{Miles} miles traveled ({Miles_1})" + } + ] +} diff --git a/vendor/golang.org/x/text/cmd/gotext/examples/extract/locales/en-US/out.gotext.json b/vendor/golang.org/x/text/cmd/gotext/examples/extract/locales/en-US/out.gotext.json new file mode 100755 index 0000000..31785bf --- /dev/null +++ b/vendor/golang.org/x/text/cmd/gotext/examples/extract/locales/en-US/out.gotext.json @@ -0,0 +1,154 @@ +{ + "language": "en-US", + "messages": [ + { + "id": "Hello world!", + "message": "Hello world!", + "translation": "Hello world!" + }, + { + "id": "Hello {City}!", + "message": "Hello {City}!", + "translation": "Hello {City}n", + "placeholders": [ + { + "id": "City", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "city" + } + ] + }, + { + "id": "{Person} is visiting {Place}!", + "message": "{Person} is visiting {Place}!", + "translation": "{Person} is visiting {Place}!", + "placeholders": [ + { + "id": "Person", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "person", + "comment": "The person of matter." + }, + { + "id": "Place", + "string": "%[2]s", + "type": "string", + "underlyingType": "string", + "argNum": 2, + "expr": "place", + "comment": "Place the person is visiting." + } + ] + }, + { + "id": "{2} files remaining!", + "message": "{2} files remaining!", + "translation": "{2} files remaining!", + "translatorComment": "Copied from source.", + "placeholders": [ + { + "id": "2", + "string": "%[1]d", + "type": "int", + "underlyingType": "int", + "argNum": 1, + "expr": "2" + } + ], + "fuzzy": true + }, + { + "id": "{N} more files remaining!", + "message": "{N} more files remaining!", + "translation": { + "select": { + "feature": "plural", + "arg": "N", + "cases": { + "one": { + "msg": "One file remaining!" + }, + "other": { + "msg": "There are {N} more files remaining!" + } + } + } + }, + "placeholders": [ + { + "id": "N", + "string": "%[1]d", + "type": "int", + "underlyingType": "int", + "argNum": 1, + "expr": "n" + } + ] + }, + { + "id": "Use the following code for your discount: {ReferralCode}", + "message": "Use the following code for your discount: {ReferralCode}", + "translation": "Use the following code for your discount: {ReferralCode}", + "translatorComment": "Copied from source.", + "placeholders": [ + { + "id": "ReferralCode", + "string": "%[1]d", + "type": "golang.org/x/text/cmd/gotext/examples/extract.referralCode", + "underlyingType": "int", + "argNum": 1, + "expr": "c" + } + ], + "fuzzy": true + }, + { + "id": [ + "msgOutOfOrder", + "{Device} is out of order!" + ], + "message": "{Device} is out of order!", + "translation": "{Device} is out of order!", + "comment": "FOO\n", + "placeholders": [ + { + "id": "Device", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "device" + } + ] + }, + { + "id": "{Miles} miles traveled ({Miles_1})", + "message": "{Miles} miles traveled ({Miles_1})", + "translation": "{Miles} miles traveled ({Miles_1})", + "placeholders": [ + { + "id": "Miles", + "string": "%.2[1]f", + "type": "float64", + "underlyingType": "float64", + "argNum": 1, + "expr": "miles" + }, + { + "id": "Miles_1", + "string": "%[1]f", + "type": "float64", + "underlyingType": "float64", + "argNum": 1, + "expr": "miles" + } + ] + } + ] +} \ No newline at end of file diff --git a/vendor/golang.org/x/text/cmd/gotext/examples/extract/locales/zh/messages.gotext.json b/vendor/golang.org/x/text/cmd/gotext/examples/extract/locales/zh/messages.gotext.json new file mode 100755 index 0000000..9913f83 --- /dev/null +++ b/vendor/golang.org/x/text/cmd/gotext/examples/extract/locales/zh/messages.gotext.json @@ -0,0 +1,203 @@ +{ + "language": "zh", + "messages": [ + { + "id": "Hello world!", + "key": "Hello world!\n", + "message": "Hello world!", + "translation": "", + "position": "golang.org/x/text/cmd/gotext/examples/extract/main.go:27:10" + }, + { + "id": "Hello {City}!", + "key": "Hello %s!\n", + "message": "Hello {City}!", + "translation": "", + "placeholders": [ + { + "id": "City", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "city" + } + ], + "position": "golang.org/x/text/cmd/gotext/examples/extract/main.go:31:10" + }, + { + "id": "Hello {Town}!", + "key": "Hello %s!\n", + "message": "Hello {Town}!", + "translation": "", + "placeholders": [ + { + "id": "Town", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "town", + "comment": "Town" + } + ], + "position": "golang.org/x/text/cmd/gotext/examples/extract/main.go:35:10" + }, + { + "id": "{Person} is visiting {Place}!", + "key": "%s is visiting %s!\n", + "message": "{Person} is visiting {Place}!", + "translation": "", + "placeholders": [ + { + "id": "Person", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "person", + "comment": "The person of matter." + }, + { + "id": "Place", + "string": "%[2]s", + "type": "string", + "underlyingType": "string", + "argNum": 2, + "expr": "place", + "comment": "Place the person is visiting." + } + ], + "position": "golang.org/x/text/cmd/gotext/examples/extract/main.go:40:10" + }, + { + "id": "{Person} is visiting {Place}!", + "key": "%[1]s is visiting %[3]s!\n", + "message": "{Person} is visiting {Place}!", + "translation": "", + "comment": "Person visiting a place.", + "placeholders": [ + { + "id": "Person", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "pp.Person" + }, + { + "id": "Place", + "string": "%[3]s", + "type": "string", + "underlyingType": "string", + "argNum": 3, + "expr": "pp.Place", + "comment": "Place the person is visiting." + }, + { + "id": "Extra", + "string": "%[2]v", + "type": "int", + "underlyingType": "int", + "argNum": 2, + "expr": "pp.extra" + } + ], + "position": "golang.org/x/text/cmd/gotext/examples/extract/main.go:55:10" + }, + { + "id": "{} files remaining!", + "key": "%d files remaining!", + "message": "{} files remaining!", + "translation": "", + "placeholders": [ + { + "id": "", + "string": "%[1]d", + "type": "int", + "underlyingType": "int", + "argNum": 1, + "expr": "2" + } + ], + "position": "golang.org/x/text/cmd/gotext/examples/extract/main.go:62:10" + }, + { + "id": "{N} more files remaining!", + "key": "%d more files remaining!", + "message": "{N} more files remaining!", + "translation": "", + "placeholders": [ + { + "id": "N", + "string": "%[1]d", + "type": "int", + "underlyingType": "int", + "argNum": 1, + "expr": "n" + } + ], + "position": "golang.org/x/text/cmd/gotext/examples/extract/main.go:67:10" + }, + { + "id": "Use the following code for your discount: {ReferralCode}\n", + "key": "Use the following code for your discount: %d\n", + "message": "Use the following code for your discount: {ReferralCode}\n", + "translation": "", + "placeholders": [ + { + "id": "ReferralCode", + "string": "%[1]d", + "type": "golang.org/x/text/cmd/gotext/examples/extract.referralCode", + "underlyingType": "int", + "argNum": 1, + "expr": "c" + } + ], + "position": "golang.org/x/text/cmd/gotext/examples/extract/main.go:73:10" + }, + { + "id": [ "{Device} is out of order!", "msgOutOfOrder" ], + "key": "%s is out of order!", + "message": "{Device} is out of order!", + "translation": "", + "comment": "FOO\n", + "placeholders": [ + { + "id": "Device", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "device" + } + ], + "position": "golang.org/x/text/cmd/gotext/examples/extract/main.go:81:10" + }, + { + "id": "{Miles} miles traveled ({Miles_1})", + "key": "%.2[1]f miles traveled (%[1]f)", + "message": "{Miles} miles traveled ({Miles_1})", + "translation": "", + "placeholders": [ + { + "id": "Miles", + "string": "%.2[1]f", + "type": "float64", + "underlyingType": "float64", + "argNum": 1, + "expr": "miles" + }, + { + "id": "Miles_1", + "string": "%[1]f", + "type": "float64", + "underlyingType": "float64", + "argNum": 1, + "expr": "miles" + } + ], + "position": "golang.org/x/text/cmd/gotext/examples/extract/main.go:85:10" + } + ] +} \ No newline at end of file diff --git a/vendor/golang.org/x/text/cmd/gotext/examples/extract/locales/zh/out.gotext.json b/vendor/golang.org/x/text/cmd/gotext/examples/extract/locales/zh/out.gotext.json new file mode 100755 index 0000000..946573e --- /dev/null +++ b/vendor/golang.org/x/text/cmd/gotext/examples/extract/locales/zh/out.gotext.json @@ -0,0 +1,137 @@ +{ + "language": "zh", + "messages": [ + { + "id": "Hello world!", + "message": "Hello world!", + "translation": "" + }, + { + "id": "Hello {City}!", + "message": "Hello {City}!", + "translation": "", + "placeholders": [ + { + "id": "City", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "city" + } + ] + }, + { + "id": "{Person} is visiting {Place}!", + "message": "{Person} is visiting {Place}!", + "translation": "", + "placeholders": [ + { + "id": "Person", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "person", + "comment": "The person of matter." + }, + { + "id": "Place", + "string": "%[2]s", + "type": "string", + "underlyingType": "string", + "argNum": 2, + "expr": "place", + "comment": "Place the person is visiting." + } + ] + }, + { + "id": "{2} files remaining!", + "message": "{2} files remaining!", + "translation": "", + "placeholders": [ + { + "id": "2", + "string": "%[1]d", + "type": "int", + "underlyingType": "int", + "argNum": 1, + "expr": "2" + } + ] + }, + { + "id": "{N} more files remaining!", + "message": "{N} more files remaining!", + "translation": "", + "placeholders": [ + { + "id": "N", + "string": "%[1]d", + "type": "int", + "underlyingType": "int", + "argNum": 1, + "expr": "n" + } + ] + }, + { + "id": "Use the following code for your discount: {ReferralCode}", + "message": "Use the following code for your discount: {ReferralCode}", + "translation": "", + "placeholders": [ + { + "id": "ReferralCode", + "string": "%[1]d", + "type": "golang.org/x/text/cmd/gotext/examples/extract.referralCode", + "underlyingType": "int", + "argNum": 1, + "expr": "c" + } + ] + }, + { + "id": [ + "msgOutOfOrder", + "{Device} is out of order!" + ], + "message": "{Device} is out of order!", + "translation": "", + "comment": "FOO\n", + "placeholders": [ + { + "id": "Device", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "device" + } + ] + }, + { + "id": "{Miles} miles traveled ({Miles_1})", + "message": "{Miles} miles traveled ({Miles_1})", + "translation": "", + "placeholders": [ + { + "id": "Miles", + "string": "%.2[1]f", + "type": "float64", + "underlyingType": "float64", + "argNum": 1, + "expr": "miles" + }, + { + "id": "Miles_1", + "string": "%[1]f", + "type": "float64", + "underlyingType": "float64", + "argNum": 1, + "expr": "miles" + } + ] + } + ] +} \ No newline at end of file diff --git a/vendor/golang.org/x/text/cmd/gotext/examples/extract/main.go b/vendor/golang.org/x/text/cmd/gotext/examples/extract/main.go new file mode 100644 index 0000000..414b453 --- /dev/null +++ b/vendor/golang.org/x/text/cmd/gotext/examples/extract/main.go @@ -0,0 +1,86 @@ +// Copyright 2017 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. + +package main + +//go:generate gotext update -out catalog.go + +import ( + "golang.org/x/text/language" + "golang.org/x/text/message" +) + +func main() { + p := message.NewPrinter(language.English) + + p.Print("Hello world!\n") + + p.Println("Hello", "world!") + + person := "Sheila" + place := "Zürich" + + p.Print("Hello ", person, " in ", place, "!\n") + + // Greet everyone. + p.Printf("Hello world!\n") + + city := "Amsterdam" + // Greet a city. + p.Printf("Hello %s!\n", city) + + town := "Amsterdam" + // Greet a town. + p.Printf("Hello %s!\n", + town, // Town + ) + + // Person visiting a place. + p.Printf("%s is visiting %s!\n", + person, // The person of matter. + place, // Place the person is visiting. + ) + + pp := struct { + Person string // The person of matter. // TODO: get this comment. + Place string + extra int + }{ + person, place, 4, + } + + // extract will drop this comment in favor of the one below. + // argument is added as a placeholder. + p.Printf("%[1]s is visiting %[3]s!\n", // Person visiting a place. + pp.Person, + pp.extra, + pp.Place, // Place the person is visiting. + ) + + // Numeric literal + p.Printf("%d files remaining!", 2) + + const n = 2 + + // Numeric var + p.Printf("%d more files remaining!", n) + + // Infer better names from type names. + type referralCode int + + const c = referralCode(5) + p.Printf("Use the following code for your discount: %d\n", c) + + // Using a constant for a message will cause the constant name to be + // added as an identifier, allowing for stable message identifiers. + + // Explain that a device is out of order. + const msgOutOfOrder = "%s is out of order!" // FOO + const device = "Soda machine" + p.Printf(msgOutOfOrder, device) + + // Double arguments. + miles := 1.2345 + p.Printf("%.2[1]f miles traveled (%[1]f)", miles) +} diff --git a/vendor/golang.org/x/text/cmd/gotext/examples/extract_http/catalog_gen.go b/vendor/golang.org/x/text/cmd/gotext/examples/extract_http/catalog_gen.go new file mode 100644 index 0000000..2c410dc --- /dev/null +++ b/vendor/golang.org/x/text/cmd/gotext/examples/extract_http/catalog_gen.go @@ -0,0 +1,57 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package main + +import ( + "golang.org/x/text/language" + "golang.org/x/text/message" + "golang.org/x/text/message/catalog" +) + +type dictionary struct { + index []uint32 + data string +} + +func (d *dictionary) Lookup(key string) (data string, ok bool) { + p := messageKeyToIndex[key] + start, end := d.index[p], d.index[p+1] + if start == end { + return "", false + } + return d.data[start:end], true +} + +func init() { + dict := map[string]catalog.Dictionary{ + "en": &dictionary{index: enIndex, data: enData}, + "zh": &dictionary{index: zhIndex, data: zhData}, + } + fallback := language.MustParse("en") + cat, err := catalog.NewFromMap(dict, catalog.Fallback(fallback)) + if err != nil { + panic(err) + } + message.DefaultCatalog = cat +} + +var messageKeyToIndex = map[string]int{ + "Do you like your browser (%s)?\n": 1, + "Hello %s!\n": 0, +} + +var enIndex = []uint32{ // 3 elements + 0x00000000, 0x00000012, 0x00000039, +} // Size: 36 bytes + +const enData string = "" + // Size: 57 bytes + "\x04\x00\x01\x0a\x0d\x02Hello %[1]s!\x04\x00\x01\x0a\x22\x02Do you like " + + "your browser (%[1]s)?" + +var zhIndex = []uint32{ // 3 elements + 0x00000000, 0x00000000, 0x00000000, +} // Size: 36 bytes + +const zhData string = "" + +// Total table size 129 bytes (0KiB); checksum: 9C146C82 diff --git a/vendor/golang.org/x/text/cmd/gotext/examples/extract_http/locales/de/out.gotext.json b/vendor/golang.org/x/text/cmd/gotext/examples/extract_http/locales/de/out.gotext.json new file mode 100755 index 0000000..d8437c0 --- /dev/null +++ b/vendor/golang.org/x/text/cmd/gotext/examples/extract_http/locales/de/out.gotext.json @@ -0,0 +1,39 @@ +{ + "language": "de", + "messages": [ + { + "id": "Hello {From}!", + "key": "Hello %s!\n", + "message": "Hello {From}!", + "translation": "", + "placeholders": [ + { + "id": "From", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "r.Header.Get(\"From\")" + } + ], + "position": "golang.org/x/text/cmd/gotext/examples/extract_http/pkg/pkg.go:22:11" + }, + { + "id": "Do you like your browser ({User_Agent})?", + "key": "Do you like your browser (%s)?\n", + "message": "Do you like your browser ({User_Agent})?", + "translation": "", + "placeholders": [ + { + "id": "User_Agent", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "r.Header.Get(\"User-Agent\")" + } + ], + "position": "golang.org/x/text/cmd/gotext/examples/extract_http/pkg/pkg.go:24:11" + } + ] +} \ No newline at end of file diff --git a/vendor/golang.org/x/text/cmd/gotext/examples/extract_http/locales/en-US/out.gotext.json b/vendor/golang.org/x/text/cmd/gotext/examples/extract_http/locales/en-US/out.gotext.json new file mode 100755 index 0000000..de59eca --- /dev/null +++ b/vendor/golang.org/x/text/cmd/gotext/examples/extract_http/locales/en-US/out.gotext.json @@ -0,0 +1,39 @@ +{ + "language": "en-US", + "messages": [ + { + "id": "Hello {From}!", + "key": "Hello %s!\n", + "message": "Hello {From}!", + "translation": "", + "placeholders": [ + { + "id": "From", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "r.Header.Get(\"From\")" + } + ], + "position": "golang.org/x/text/cmd/gotext/examples/extract_http/pkg/pkg.go:22:11" + }, + { + "id": "Do you like your browser ({User_Agent})?", + "key": "Do you like your browser (%s)?\n", + "message": "Do you like your browser ({User_Agent})?", + "translation": "", + "placeholders": [ + { + "id": "User_Agent", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "r.Header.Get(\"User-Agent\")" + } + ], + "position": "golang.org/x/text/cmd/gotext/examples/extract_http/pkg/pkg.go:24:11" + } + ] +} \ No newline at end of file diff --git a/vendor/golang.org/x/text/cmd/gotext/examples/extract_http/locales/en/out.gotext.json b/vendor/golang.org/x/text/cmd/gotext/examples/extract_http/locales/en/out.gotext.json new file mode 100644 index 0000000..1391e58 --- /dev/null +++ b/vendor/golang.org/x/text/cmd/gotext/examples/extract_http/locales/en/out.gotext.json @@ -0,0 +1,39 @@ +{ + "language": "en", + "messages": [ + { + "id": "Hello {From}!", + "message": "Hello {From}!", + "translation": "Hello {From}!", + "translatorComment": "Copied from source.", + "placeholders": [ + { + "id": "From", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "r.Header.Get(\"From\")" + } + ], + "fuzzy": true + }, + { + "id": "Do you like your browser ({User_Agent})?", + "message": "Do you like your browser ({User_Agent})?", + "translation": "Do you like your browser ({User_Agent})?", + "translatorComment": "Copied from source.", + "placeholders": [ + { + "id": "User_Agent", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "r.Header.Get(\"User-Agent\")" + } + ], + "fuzzy": true + } + ] +} \ No newline at end of file diff --git a/vendor/golang.org/x/text/cmd/gotext/examples/extract_http/locales/zh/out.gotext.json b/vendor/golang.org/x/text/cmd/gotext/examples/extract_http/locales/zh/out.gotext.json new file mode 100755 index 0000000..7b26974 --- /dev/null +++ b/vendor/golang.org/x/text/cmd/gotext/examples/extract_http/locales/zh/out.gotext.json @@ -0,0 +1,35 @@ +{ + "language": "zh", + "messages": [ + { + "id": "Hello {From}!", + "message": "Hello {From}!", + "translation": "", + "placeholders": [ + { + "id": "From", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "r.Header.Get(\"From\")" + } + ] + }, + { + "id": "Do you like your browser ({User_Agent})?", + "message": "Do you like your browser ({User_Agent})?", + "translation": "", + "placeholders": [ + { + "id": "User_Agent", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "r.Header.Get(\"User-Agent\")" + } + ] + } + ] +} \ No newline at end of file diff --git a/vendor/golang.org/x/text/cmd/gotext/examples/extract_http/main.go b/vendor/golang.org/x/text/cmd/gotext/examples/extract_http/main.go new file mode 100644 index 0000000..b5eb3b3 --- /dev/null +++ b/vendor/golang.org/x/text/cmd/gotext/examples/extract_http/main.go @@ -0,0 +1,17 @@ +// Copyright 2017 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. + +package main + +//go:generate gotext -srclang=en update -out=catalog_gen.go -lang=en,zh + +import ( + "net/http" + + "golang.org/x/text/cmd/gotext/examples/extract_http/pkg" +) + +func main() { + http.Handle("/generize", http.HandlerFunc(pkg.Generize)) +} diff --git a/vendor/golang.org/x/text/cmd/gotext/examples/extract_http/pkg/pkg.go b/vendor/golang.org/x/text/cmd/gotext/examples/extract_http/pkg/pkg.go new file mode 100644 index 0000000..7b44634 --- /dev/null +++ b/vendor/golang.org/x/text/cmd/gotext/examples/extract_http/pkg/pkg.go @@ -0,0 +1,25 @@ +// Copyright 2017 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. + +package pkg + +import ( + "net/http" + + "golang.org/x/text/language" + "golang.org/x/text/message" +) + +var matcher = language.NewMatcher(message.DefaultCatalog.Languages()) + +func Generize(w http.ResponseWriter, r *http.Request) { + lang, _ := r.Cookie("lang") + accept := r.Header.Get("Accept-Language") + tag := message.MatchLanguage(lang.String(), accept) + p := message.NewPrinter(tag) + + p.Fprintf(w, "Hello %s!\n", r.Header.Get("From")) + + p.Fprintf(w, "Do you like your browser (%s)?\n", r.Header.Get("User-Agent")) +} diff --git a/vendor/golang.org/x/text/cmd/gotext/examples/rewrite/main.go b/vendor/golang.org/x/text/cmd/gotext/examples/rewrite/main.go new file mode 100644 index 0000000..2fada45 --- /dev/null +++ b/vendor/golang.org/x/text/cmd/gotext/examples/rewrite/main.go @@ -0,0 +1,37 @@ +// Copyright 2017 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. + +package main + +import ( + "fmt" + + "golang.org/x/text/language" + "golang.org/x/text/message" +) + +func main() { + var nPizzas = 4 + // The following call gets replaced by a call to the globally + // defined printer. + fmt.Println("We ate", nPizzas, "pizzas.") + + p := message.NewPrinter(language.English) + + // Prevent build failure, although it is okay for gotext. + p.Println(1024) + + // Replaced by a call to p. + fmt.Println("Example punctuation:", "$%^&!") + + { + q := message.NewPrinter(language.French) + + const leaveAnIdentBe = "Don't expand me." + fmt.Print(leaveAnIdentBe) + q.Println() // Prevent build failure, although it is okay for gotext. + } + + fmt.Printf("Hello %s\n", "City") +} diff --git a/vendor/golang.org/x/text/cmd/gotext/examples/rewrite/printer.go b/vendor/golang.org/x/text/cmd/gotext/examples/rewrite/printer.go new file mode 100644 index 0000000..9ed0556 --- /dev/null +++ b/vendor/golang.org/x/text/cmd/gotext/examples/rewrite/printer.go @@ -0,0 +1,16 @@ +// Copyright 2017 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 ignore + +package main + +import ( + "golang.org/x/text/language" + "golang.org/x/text/message" +) + +// The printer defined here will be picked up by the first print statement +// in main.go. +var printer = message.NewPrinter(language.English) diff --git a/vendor/golang.org/x/text/cmd/gotext/extract.go b/vendor/golang.org/x/text/cmd/gotext/extract.go index 79a9b59..103d7e6 100644 --- a/vendor/golang.org/x/text/cmd/gotext/extract.go +++ b/vendor/golang.org/x/text/cmd/gotext/extract.go @@ -5,22 +5,7 @@ package main import ( - "bytes" - "encoding/json" - "fmt" - "go/ast" - "go/build" - "go/constant" - "go/format" - "go/parser" - "go/types" - "io/ioutil" - "os" - "path" - "path/filepath" - "strings" - - "golang.org/x/tools/go/loader" + "golang.org/x/text/message/pipeline" ) // TODO: @@ -29,167 +14,27 @@ import ( // - handle features (gender, plural) // - message rewriting +func init() { + lang = cmdExtract.Flag.String("lang", "en-US", "comma-separated list of languages to process") +} + var cmdExtract = &Command{ Run: runExtract, UsageLine: "extract *", - Short: "extract strings to be translated from code", + Short: "extracts strings to be translated from code", } -func runExtract(cmd *Command, args []string) error { - if len(args) == 0 { - args = []string{"."} - } - - conf := loader.Config{ - Build: &build.Default, - ParserMode: parser.ParseComments, - } - - // Use the initial packages from the command line. - args, err := conf.FromArgs(args, false) +func runExtract(cmd *Command, config *pipeline.Config, args []string) error { + config.Packages = args + state, err := pipeline.Extract(config) if err != nil { - return err + return wrap(err, "extract failed") } - - // Load, parse and type-check the whole program. - iprog, err := conf.Load() - if err != nil { - return err + if err := state.Import(); err != nil { + return wrap(err, "import failed") } - - // print returns Go syntax for the specified node. - print := func(n ast.Node) string { - var buf bytes.Buffer - format.Node(&buf, conf.Fset, n) - return buf.String() + if err := state.Merge(); err != nil { + return wrap(err, "merge failed") } - - var translations []Translation - - for _, info := range iprog.InitialPackages() { - for _, f := range info.Files { - // Associate comments with nodes. - cmap := ast.NewCommentMap(iprog.Fset, f, f.Comments) - getComment := func(n ast.Node) string { - cs := cmap.Filter(n).Comments() - if len(cs) > 0 { - return strings.TrimSpace(cs[0].Text()) - } - return "" - } - - // Find function calls. - ast.Inspect(f, func(n ast.Node) bool { - call, ok := n.(*ast.CallExpr) - if !ok { - return true - } - - // Skip calls of functions other than - // (*message.Printer).{Sp,Fp,P}rintf. - sel, ok := call.Fun.(*ast.SelectorExpr) - if !ok { - return true - } - meth := info.Selections[sel] - if meth == nil || meth.Kind() != types.MethodVal { - return true - } - // TODO: remove cheap hack and check if the type either - // implements some interface or is specifically of type - // "golang.org/x/text/message".Printer. - m, ok := extractFuncs[path.Base(meth.Recv().String())] - if !ok { - return true - } - - // argn is the index of the format string. - argn, ok := m[meth.Obj().Name()] - if !ok || argn >= len(call.Args) { - return true - } - - // Skip calls with non-constant format string. - fmtstr := info.Types[call.Args[argn]].Value - if fmtstr == nil || fmtstr.Kind() != constant.String { - return true - } - - posn := conf.Fset.Position(call.Lparen) - filepos := fmt.Sprintf("%s:%d:%d", filepath.Base(posn.Filename), posn.Line, posn.Column) - - // TODO: identify the type of the format argument. If it is not - // a string, multiple keys may be defined. - var key []string - - // TODO: replace substitutions (%v) with a translator friendly - // notation. For instance: - // "%d files remaining" -> "{numFiles} files remaining", or - // "%d files remaining" -> "{arg1} files remaining" - // Alternatively, this could be done at a later stage. - msg := constant.StringVal(fmtstr) - - // Construct a Translation unit. - c := Translation{ - Key: key, - Position: filepath.Join(info.Pkg.Path(), filepos), - Original: Text{Msg: msg}, - ExtractedComment: getComment(call.Args[0]), - // TODO(fix): this doesn't get the before comment. - // Comment: getComment(call), - } - - for i, arg := range call.Args[argn+1:] { - var val string - if v := info.Types[arg].Value; v != nil { - val = v.ExactString() - } - posn := conf.Fset.Position(arg.Pos()) - filepos := fmt.Sprintf("%s:%d:%d", filepath.Base(posn.Filename), posn.Line, posn.Column) - c.Args = append(c.Args, Argument{ - ID: i + 1, - Type: info.Types[arg].Type.String(), - UnderlyingType: info.Types[arg].Type.Underlying().String(), - Expr: print(arg), - Value: val, - Comment: getComment(arg), - Position: filepath.Join(info.Pkg.Path(), filepos), - // TODO report whether it implements - // interfaces plural.Interface, - // gender.Interface. - }) - } - - translations = append(translations, c) - return true - }) - } - } - - data, err := json.MarshalIndent(translations, "", " ") - if err != nil { - return err - } - for _, tag := range getLangs() { - // TODO: merge with existing files, don't overwrite. - os.MkdirAll(*dir, 0744) - file := filepath.Join(*dir, fmt.Sprintf("gotext_%v.out.json", tag)) - if err := ioutil.WriteFile(file, data, 0744); err != nil { - return fmt.Errorf("could not create file: %v", err) - } - } - return nil -} - -// extractFuncs indicates the types and methods for which to extract strings, -// and which argument to extract. -// TODO: use the types in conf.Import("golang.org/x/text/message") to extract -// the correct instances. -var extractFuncs = map[string]map[string]int{ - // TODO: Printer -> *golang.org/x/text/message.Printer - "message.Printer": { - "Printf": 0, - "Sprintf": 0, - "Fprintf": 1, - }, + return wrap(state.Export(), "export failed") } diff --git a/vendor/golang.org/x/text/cmd/gotext/generate.go b/vendor/golang.org/x/text/cmd/gotext/generate.go new file mode 100644 index 0000000..36820df --- /dev/null +++ b/vendor/golang.org/x/text/cmd/gotext/generate.go @@ -0,0 +1,31 @@ +// Copyright 2017 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. + +package main + +import ( + "golang.org/x/text/message/pipeline" +) + +func init() { + out = cmdGenerate.Flag.String("out", "", "output file to write to") +} + +var cmdGenerate = &Command{ + Run: runGenerate, + UsageLine: "generate ", + Short: "generates code to insert translated messages", +} + +func runGenerate(cmd *Command, config *pipeline.Config, args []string) error { + config.Packages = args + s, err := pipeline.Extract(config) + if err != nil { + return wrap(err, "extraction failed") + } + if err := s.Import(); err != nil { + return wrap(err, "import failed") + } + return wrap(s.Generate(), "generation failed") +} diff --git a/vendor/golang.org/x/text/cmd/gotext/main.go b/vendor/golang.org/x/text/cmd/gotext/main.go index b03eb55..73f6d91 100644 --- a/vendor/golang.org/x/text/cmd/gotext/main.go +++ b/vendor/golang.org/x/text/cmd/gotext/main.go @@ -25,6 +25,8 @@ import ( "unicode" "unicode/utf8" + "golang.org/x/text/message/pipeline" + "golang.org/x/text/language" "golang.org/x/tools/go/buildutil" ) @@ -34,10 +36,23 @@ func init() { } var ( - dir = flag.String("dir", "textdata", "default subdirectory to store translation files") - langs = flag.String("lang", "en", "comma-separated list of languages to process") + srcLang = flag.String("srclang", "en-US", "the source-code language") + dir = flag.String("dir", "locales", "default subdirectory to store translation files") ) +func config() (*pipeline.Config, error) { + tag, err := language.Parse(*srcLang) + if err != nil { + return nil, wrap(err, "invalid srclang") + } + return &pipeline.Config{ + SourceLanguage: tag, + Supported: getLangs(), + TranslationsPattern: `messages\.(.*)\.json`, + GenFile: *out, + }, nil +} + // NOTE: the Command struct is copied from the go tool in core. // A Command is an implementation of a go command @@ -45,7 +60,7 @@ var ( type Command struct { // Run runs the command. // The args are the arguments after the command name. - Run func(cmd *Command, args []string) error + Run func(cmd *Command, c *pipeline.Config, args []string) error // UsageLine is the one-line usage message. // The first word in the line is taken to be the command name. @@ -86,9 +101,11 @@ func (c *Command) Runnable() bool { // Commands lists the available commands and help topics. // The order here is the order in which they are printed by 'go help'. var commands = []*Command{ + cmdUpdate, cmdExtract, + cmdRewrite, + cmdGenerate, // TODO: - // - generate code from translations. // - update: full-cycle update of extraction, sending, and integration // - report: report of freshness of translations } @@ -126,8 +143,12 @@ func main() { cmd.Flag.Usage = func() { cmd.Usage() } cmd.Flag.Parse(args[1:]) args = cmd.Flag.Args() - if err := cmd.Run(cmd, args); err != nil { - fatalf("gotext: %v", err) + config, err := config() + if err != nil { + fatalf("gotext: %+v", err) + } + if err := cmd.Run(cmd, config, args); err != nil { + fatalf("gotext: %+v", err) } exit() return @@ -277,12 +298,7 @@ func help(args []string) { if strings.HasSuffix(arg, "documentation") { w := &bytes.Buffer{} - fmt.Fprintln(w, "// Copyright 2016 The Go Authors. All rights reserved.") - fmt.Fprintln(w, "// Use of this source code is governed by a BSD-style") - fmt.Fprintln(w, "// license that can be found in the LICENSE file.") - fmt.Fprintln(w) - fmt.Fprintln(w, "// DO NOT EDIT THIS FILE. GENERATED BY go generate.") - fmt.Fprintln(w, "// Edit the documentation in other files and rerun go generate to generate this one.") + fmt.Fprintln(w, "// Code generated by go generate. DO NOT EDIT.") fmt.Fprintln(w) buf := new(bytes.Buffer) printUsage(buf) @@ -292,10 +308,10 @@ func help(args []string) { if arg == "gendocumentation" { b, err := format.Source(w.Bytes()) if err != nil { - errorf("Could not format generated docs: %v\n", err) + logf("Could not format generated docs: %v\n", err) } if err := ioutil.WriteFile("doc.go", b, 0666); err != nil { - errorf("Could not create file alldocs.go: %v\n", err) + logf("Could not create file alldocs.go: %v\n", err) } } else { fmt.Println(w.String()) @@ -316,7 +332,10 @@ func help(args []string) { } func getLangs() (tags []language.Tag) { - for _, t := range strings.Split(*langs, ",") { + for _, t := range strings.Split(*lang, ",") { + if t == "" { + continue + } tag, err := language.Parse(t) if err != nil { fatalf("gotext: could not parse language %q: %v", t, err) @@ -340,11 +359,11 @@ func exit() { } func fatalf(format string, args ...interface{}) { - errorf(format, args...) + logf(format, args...) exit() } -func errorf(format string, args ...interface{}) { +func logf(format string, args ...interface{}) { log.Printf(format, args...) setExitStatus(1) } diff --git a/vendor/golang.org/x/text/cmd/gotext/message.go b/vendor/golang.org/x/text/cmd/gotext/message.go deleted file mode 100644 index 67a622f..0000000 --- a/vendor/golang.org/x/text/cmd/gotext/message.go +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright 2016 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. - -package main - -// TODO: these definitions should be moved to a package so that the can be used -// by other tools. - -// The file contains the structures used to define translations of a certain -// messages. -// -// A translation may have multiple translations strings, or messages, depending -// on the feature values of the various arguments. For instance, consider -// a hypothetical translation from English to English, where the source defines -// the format string "%d file(s) remaining". A completed translation, expressed -// in JS, for this format string could look like: -// -// { -// "Key": [ -// "\"%d files(s) remaining\"" -// ], -// "Original": { -// "Msg": "\"%d files(s) remaining\"" -// }, -// "Translation": { -// "Select": { -// "Feature": "plural", -// "Arg": 1, -// "Case": { -// "one": { "Msg": "1 file remaining" }, -// "other": { "Msg": "%d files remaining" } -// }, -// }, -// }, -// "Args": [ -// { -// "ID": 2, -// "Type": "int", -// "UnderlyingType": "int", -// "Expr": "nFiles", -// "Comment": "number of files remaining", -// "Position": "golang.org/x/text/cmd/gotext/demo.go:34:3" -// } -// ], -// "Position": "golang.org/x/text/cmd/gotext/demo.go:33:10", -// } -// -// Alternatively, the Translation section could be written as: -// -// "Translation": { -// "Msg": "%d %[files]s remaining", -// "Var": { -// "files" : { -// "Select": { -// "Feature": "plural", -// "Arg": 1, -// "Case": { -// "one": { "Msg": "file" }, -// "other": { "Msg": "files" } -// } -// } -// } -// } -// } - -// A Translation describes a translation for a single language for a single -// message. -type Translation struct { - // Key contains a list of identifiers for the message. If this list is empty - // Original is used as the key. - Key []string `json:"key,omitempty"` - Original Text `json:"original"` - Translation Text `json:"translation"` - ExtractedComment string `json:"extractedComment,omitempty"` - TranslatorComment string `json:"translatorComment,omitempty"` - - Args []Argument `json:"args,omitempty"` - - // Extraction information. - Position string `json:"position,omitempty"` // filePosition:line -} - -// An Argument contains information about the arguments passed to a message. -type Argument struct { - ID interface{} `json:"id"` // An int for printf-style calls, but could be a string. - Type string `json:"type"` - UnderlyingType string `json:"underlyingType"` - Expr string `json:"expr"` - Value string `json:"value,omitempty"` - Comment string `json:"comment,omitempty"` - Position string `json:"position,omitempty"` - - // Features contains the features that are available for the implementation - // of this argument. - Features []Feature `json:"features,omitempty"` -} - -// Feature holds information about a feature that can be implemented by -// an Argument. -type Feature struct { - Type string `json:"type"` // Right now this is only gender and plural. - - // TODO: possible values and examples for the language under consideration. - -} - -// Text defines a message to be displayed. -type Text struct { - // Msg and Select contains the message to be displayed. Within a Text value - // either Msg or Select is defined. - Msg string `json:"msg,omitempty"` - Select *Select `json:"select,omitempty"` - // Var defines a map of variables that may be substituted in the selected - // message. - Var map[string]Text `json:"var,omitempty"` - // Example contains an example message formatted with default values. - Example string `json:"example,omitempty"` -} - -// Type Select selects a Text based on the feature value associated with -// a feature of a certain argument. -type Select struct { - Feature string `json:"feature"` // Name of variable or Feature type - Arg interface{} `json:"arg"` // The argument ID. - Cases map[string]Text `json:"cases"` -} diff --git a/vendor/golang.org/x/text/cmd/gotext/rewrite.go b/vendor/golang.org/x/text/cmd/gotext/rewrite.go new file mode 100644 index 0000000..3ee9555 --- /dev/null +++ b/vendor/golang.org/x/text/cmd/gotext/rewrite.go @@ -0,0 +1,55 @@ +// Copyright 2017 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. + +package main + +import ( + "os" + + "golang.org/x/text/message/pipeline" +) + +const printerType = "golang.org/x/text/message.Printer" + +// TODO: +// - merge information into existing files +// - handle different file formats (PO, XLIFF) +// - handle features (gender, plural) +// - message rewriting + +func init() { + overwrite = cmdRewrite.Flag.Bool("w", false, "write files in place") +} + +var ( + overwrite *bool +) + +var cmdRewrite = &Command{ + Run: runRewrite, + UsageLine: "rewrite ", + Short: "rewrites fmt functions to use a message Printer", + Long: ` +rewrite is typically done once for a project. It rewrites all usages of +fmt to use x/text's message package whenever a message.Printer is in scope. +It rewrites Print and Println calls with constant strings to the equivalent +using Printf to allow translators to reorder arguments. +`, +} + +func runRewrite(cmd *Command, _ *pipeline.Config, args []string) error { + w := os.Stdout + if *overwrite { + w = nil + } + pkg := "." + switch len(args) { + case 0: + case 1: + pkg = args[0] + default: + return errorf("can only specify at most one package") + } + return pipeline.Rewrite(w, pkg) +} diff --git a/vendor/golang.org/x/text/cmd/gotext/update.go b/vendor/golang.org/x/text/cmd/gotext/update.go new file mode 100644 index 0000000..1260750 --- /dev/null +++ b/vendor/golang.org/x/text/cmd/gotext/update.go @@ -0,0 +1,52 @@ +// Copyright 2016 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. + +package main + +import ( + "golang.org/x/text/message/pipeline" +) + +// TODO: +// - merge information into existing files +// - handle different file formats (PO, XLIFF) +// - handle features (gender, plural) +// - message rewriting + +var ( + lang *string + out *string +) + +func init() { + lang = cmdUpdate.Flag.String("lang", "en-US", "comma-separated list of languages to process") + out = cmdUpdate.Flag.String("out", "", "output file to write to") +} + +var cmdUpdate = &Command{ + Run: runUpdate, + UsageLine: "update * [-out ]", + Short: "merge translations and generate catalog", +} + +func runUpdate(cmd *Command, config *pipeline.Config, args []string) error { + config.Packages = args + state, err := pipeline.Extract(config) + if err != nil { + return wrap(err, "extract failed") + } + if err := state.Import(); err != nil { + return wrap(err, "import failed") + } + if err := state.Merge(); err != nil { + return wrap(err, "merge failed") + } + if err := state.Export(); err != nil { + return wrap(err, "export failed") + } + if *out != "" { + return wrap(state.Generate(), "generation failed") + } + return nil +} diff --git a/vendor/golang.org/x/text/collate/build/builder.go b/vendor/golang.org/x/text/collate/build/builder.go index 8b5391d..1104284 100644 --- a/vendor/golang.org/x/text/collate/build/builder.go +++ b/vendor/golang.org/x/text/collate/build/builder.go @@ -472,7 +472,6 @@ func (b *Builder) build() (*table, error) { } // Build builds the root Collator. -// TODO: return Weighter instead func (b *Builder) Build() (colltab.Weighter, error) { table, err := b.build() if err != nil { diff --git a/vendor/golang.org/x/text/collate/build/colelem_test.go b/vendor/golang.org/x/text/collate/build/colelem_test.go index 3862b1e..d0c8d07 100644 --- a/vendor/golang.org/x/text/collate/build/colelem_test.go +++ b/vendor/golang.org/x/text/collate/build/colelem_test.go @@ -203,7 +203,7 @@ func TestCompareWeights(t *testing.T) { test := func(tt weightsTest, a, b [][]int) { res, level := compareWeights(mkRawCES(a), mkRawCES(b)) if res != tt.result { - t.Errorf("%d: expected comparisson result %d; found %d", i, tt.result, res) + t.Errorf("%d: expected comparison result %d; found %d", i, tt.result, res) } if level != tt.level { t.Errorf("%d: expected level %d; found %d", i, tt.level, level) diff --git a/vendor/golang.org/x/text/collate/build/contract.go b/vendor/golang.org/x/text/collate/build/contract.go index d96af78..a6a7e01 100644 --- a/vendor/golang.org/x/text/collate/build/contract.go +++ b/vendor/golang.org/x/text/collate/build/contract.go @@ -26,7 +26,7 @@ import ( // in a given contraction. // non-initial: a rune that appears in a suffix. // -// A rune may be both a initial and a non-initial and may be so in +// A rune may be both an initial and a non-initial and may be so in // many contractions. An initial may typically also appear by itself. // In case of ambiguities, the UCA requires we match the longest // contraction. diff --git a/vendor/golang.org/x/text/collate/tools/colcmp/colcmp.go b/vendor/golang.org/x/text/collate/tools/colcmp/colcmp.go index 6dda8bc..ebd6012 100644 --- a/vendor/golang.org/x/text/collate/tools/colcmp/colcmp.go +++ b/vendor/golang.org/x/text/collate/tools/colcmp/colcmp.go @@ -211,7 +211,7 @@ func (ts *Context) Print(a ...interface{}) { fmt.Fprint(ts.out, a...) } -// assertBuf sets up an io.Writer for ouput, if it doesn't already exist. +// assertBuf sets up an io.Writer for output, if it doesn't already exist. // In debug and verbose mode, output is buffered so that the regular output // will not interfere with the additional output. Otherwise, output is // written directly to stdout for a more responsive feel. diff --git a/vendor/golang.org/x/text/collate/tools/colcmp/darwin.go b/vendor/golang.org/x/text/collate/tools/colcmp/darwin.go index c2c31d5..d2300e3 100644 --- a/vendor/golang.org/x/text/collate/tools/colcmp/darwin.go +++ b/vendor/golang.org/x/text/collate/tools/colcmp/darwin.go @@ -39,13 +39,13 @@ type osxCollator struct { func (c *osxCollator) init(locale string) { l := C.CFStringCreateWithBytes( - nil, + C.kCFAllocatorDefault, osxUInt8P([]byte(locale)), C.CFIndex(len(locale)), C.kCFStringEncodingUTF8, C.Boolean(0), ) - c.loc = C.CFLocaleCreate(nil, l) + c.loc = C.CFLocaleCreate(C.kCFAllocatorDefault, l) } func newOSX8Collator(locale string) (Collator, error) { @@ -74,16 +74,16 @@ type osx16Collator struct { func (c osx16Collator) Compare(a, b Input) int { sa := C.CFStringCreateWithCharactersNoCopy( - nil, + C.kCFAllocatorDefault, osxCharP(a.UTF16), C.CFIndex(len(a.UTF16)), - nil, + C.kCFAllocatorDefault, ) sb := C.CFStringCreateWithCharactersNoCopy( - nil, + C.kCFAllocatorDefault, osxCharP(b.UTF16), C.CFIndex(len(b.UTF16)), - nil, + C.kCFAllocatorDefault, ) _range := C.CFRangeMake(0, C.CFStringGetLength(sa)) return int(C.CFStringCompareWithOptionsAndLocale(sa, sb, _range, c.opt, c.loc)) @@ -91,20 +91,20 @@ func (c osx16Collator) Compare(a, b Input) int { func (c osx8Collator) Compare(a, b Input) int { sa := C.CFStringCreateWithBytesNoCopy( - nil, + C.kCFAllocatorDefault, osxUInt8P(a.UTF8), C.CFIndex(len(a.UTF8)), C.kCFStringEncodingUTF8, C.Boolean(0), - nil, + C.kCFAllocatorDefault, ) sb := C.CFStringCreateWithBytesNoCopy( - nil, + C.kCFAllocatorDefault, osxUInt8P(b.UTF8), C.CFIndex(len(b.UTF8)), C.kCFStringEncodingUTF8, C.Boolean(0), - nil, + C.kCFAllocatorDefault, ) _range := C.CFRangeMake(0, C.CFStringGetLength(sa)) return int(C.CFStringCompareWithOptionsAndLocale(sa, sb, _range, c.opt, c.loc)) diff --git a/vendor/golang.org/x/text/collate/tools/colcmp/icu.go b/vendor/golang.org/x/text/collate/tools/colcmp/icu.go index 91980ac..76de404 100644 --- a/vendor/golang.org/x/text/collate/tools/colcmp/icu.go +++ b/vendor/golang.org/x/text/collate/tools/colcmp/icu.go @@ -165,8 +165,8 @@ func (c *icuUTF8iter) Key(s Input) []byte { return c.extendBuf(n) } -// icuUTF8conv implementes the Collator interface. -// This implentation first converts the give UTF8 string +// icuUTF8conv implements the Collator interface. +// This implementation first converts the give UTF8 string // to UTF16 and then calls the main ICU collation function. type icuUTF8conv struct { icuCollator diff --git a/vendor/golang.org/x/text/currency/common.go b/vendor/golang.org/x/text/currency/common.go index 250cb8c..fef15be 100644 --- a/vendor/golang.org/x/text/currency/common.go +++ b/vendor/golang.org/x/text/currency/common.go @@ -38,6 +38,7 @@ var roundings = [...]roundingType{ {3, 1}, {4, 1}, {2, 5}, // cash rounding alternative + {2, 50}, } // regionToCode returns a 16-bit region code. Only two-letter codes are diff --git a/vendor/golang.org/x/text/currency/currency_test.go b/vendor/golang.org/x/text/currency/currency_test.go index 566a167..db93a0f 100644 --- a/vendor/golang.org/x/text/currency/currency_test.go +++ b/vendor/golang.org/x/text/currency/currency_test.go @@ -105,10 +105,10 @@ func TestTable(t *testing.T) { } // First currency has index 1, last is numCurrencies. if c := currency.Elem(1)[:3]; c != "ADP" { - t.Errorf("first was %c; want ADP", c) + t.Errorf("first was %q; want ADP", c) } if c := currency.Elem(numCurrencies)[:3]; c != "ZWR" { - t.Errorf("last was %c; want ZWR", c) + t.Errorf("last was %q; want ZWR", c) } } diff --git a/vendor/golang.org/x/text/currency/example_test.go b/vendor/golang.org/x/text/currency/example_test.go index f7984aa..519c872 100644 --- a/vendor/golang.org/x/text/currency/example_test.go +++ b/vendor/golang.org/x/text/currency/example_test.go @@ -16,12 +16,12 @@ func ExampleQuery() { for it := currency.Query(currency.Date(t1799)); it.Next(); { from := "" if t, ok := it.From(); ok { - from = t.Format("2006-01-01") + from = t.Format("2006-01-02") } fmt.Printf("%v is used in %v since: %v\n", it.Unit(), it.Region(), from) } // Output: - // GBP is used in GB since: 1694-07-07 + // GBP is used in GB since: 1694-07-27 // GIP is used in GI since: 1713-01-01 // USD is used in US since: 1792-01-01 } diff --git a/vendor/golang.org/x/text/currency/format.go b/vendor/golang.org/x/text/currency/format.go index 97ce2d9..1115263 100644 --- a/vendor/golang.org/x/text/currency/format.go +++ b/vendor/golang.org/x/text/currency/format.go @@ -9,9 +9,8 @@ import ( "io" "sort" - "golang.org/x/text/internal" "golang.org/x/text/internal/format" - "golang.org/x/text/language" + "golang.org/x/text/internal/language/compact" ) // Amount is an amount-currency unit pair. @@ -59,9 +58,9 @@ type formattedValue struct { // Format implements fmt.Formatter. It accepts format.State for // language-specific rendering. func (v formattedValue) Format(s fmt.State, verb rune) { - var lang int + var lang compact.ID if state, ok := s.(format.State); ok { - lang, _ = language.CompactIndex(state.Language()) + lang, _ = compact.RegionalID(compact.Tag(state.Language())) } // Get the options. Use DefaultFormat if not present. @@ -138,7 +137,7 @@ type options struct { currency Unit kind Kind - symbol func(compactIndex int, c Unit) string + symbol func(compactIndex compact.ID, c Unit) string } func (o *options) format(amount interface{}) formattedValue { @@ -177,9 +176,9 @@ func formISO(x interface{}) formattedValue { return optISO.format(x) } func formSymbol(x interface{}) formattedValue { return optSymbol.format(x) } func formNarrow(x interface{}) formattedValue { return optNarrow.format(x) } -func lookupISO(x int, c Unit) string { return c.String() } -func lookupSymbol(x int, c Unit) string { return normalSymbol.lookup(x, c) } -func lookupNarrow(x int, c Unit) string { return narrowSymbol.lookup(x, c) } +func lookupISO(x compact.ID, c Unit) string { return c.String() } +func lookupSymbol(x compact.ID, c Unit) string { return normalSymbol.lookup(x, c) } +func lookupNarrow(x compact.ID, c Unit) string { return narrowSymbol.lookup(x, c) } type symbolIndex struct { index []uint16 // position corresponds with compact index of language. @@ -191,7 +190,7 @@ var ( narrowSymbol = symbolIndex{narrowLangIndex, narrowSymIndex} ) -func (x *symbolIndex) lookup(lang int, c Unit) string { +func (x *symbolIndex) lookup(lang compact.ID, c Unit) string { for { index := x.data[x.index[lang]:x.index[lang+1]] i := sort.Search(len(index), func(i int) bool { @@ -209,7 +208,7 @@ func (x *symbolIndex) lookup(lang int, c Unit) string { if lang == 0 { break } - lang = int(internal.Parent[lang]) + lang = lang.Parent() } return c.String() } diff --git a/vendor/golang.org/x/text/currency/gen.go b/vendor/golang.org/x/text/currency/gen.go index 0952d41..da7712f 100644 --- a/vendor/golang.org/x/text/currency/gen.go +++ b/vendor/golang.org/x/text/currency/gen.go @@ -18,7 +18,8 @@ import ( "strings" "time" - "golang.org/x/text/internal" + "golang.org/x/text/internal/language/compact" + "golang.org/x/text/internal/gen" "golang.org/x/text/internal/tag" "golang.org/x/text/language" @@ -265,7 +266,7 @@ func (b *builder) genSymbols(w *gen.CodeWriter, data *cldr.CLDR) { numTypes ) // language -> currency -> type -> symbol - var symbols [language.NumCompactTags][][numTypes]*string + var symbols [compact.NumCompactTags][][numTypes]*string // Collect symbol information per language. for _, lang := range data.Locales() { @@ -274,7 +275,7 @@ func (b *builder) genSymbols(w *gen.CodeWriter, data *cldr.CLDR) { continue } - langIndex, ok := language.CompactIndex(language.MustParse(lang)) + langIndex, ok := compact.LanguageID(compact.Tag(language.MustParse(lang))) if !ok { log.Fatalf("No compact index for language %s", lang) } @@ -318,8 +319,8 @@ func (b *builder) genSymbols(w *gen.CodeWriter, data *cldr.CLDR) { if sym == nil { continue } - for p := uint16(langIndex); p != 0; { - p = internal.Parent[p] + for p := compact.ID(langIndex); p != 0; { + p = p.Parent() x := symbols[p] if x == nil { continue diff --git a/vendor/golang.org/x/text/currency/gen_common.go b/vendor/golang.org/x/text/currency/gen_common.go index e6748da..e1cea24 100644 --- a/vendor/golang.org/x/text/currency/gen_common.go +++ b/vendor/golang.org/x/text/currency/gen_common.go @@ -42,6 +42,7 @@ var roundings = [...]roundingType{ {3, 1}, {4, 1}, {2, 5}, // cash rounding alternative + {2, 50}, } // regionToCode returns a 16-bit region code. Only two-letter codes are diff --git a/vendor/golang.org/x/text/currency/tables.go b/vendor/golang.org/x/text/currency/tables.go index a34c7cb..94c3f15 100644 --- a/vendor/golang.org/x/text/currency/tables.go +++ b/vendor/golang.org/x/text/currency/tables.go @@ -5,56 +5,56 @@ package currency import "golang.org/x/text/internal/tag" // CLDRVersion is the CLDR version from which the tables in this package are derived. -const CLDRVersion = "30" +const CLDRVersion = "32" const ( - xxx = 283 - xts = 281 - usd = 250 - eur = 93 - jpy = 132 - gbp = 98 + xxx = 285 + xts = 283 + usd = 252 + eur = 94 + jpy = 133 + gbp = 99 chf = 61 aud = 19 - nzd = 191 + nzd = 192 cad = 58 - sek = 218 - nok = 189 - dkk = 81 - xag = 264 - xau = 265 - xpt = 278 - xpd = 276 + sek = 219 + nok = 190 + dkk = 82 + xag = 266 + xau = 267 + xpt = 280 + xpd = 278 brl = 46 - cny = 67 - inr = 124 - rub = 209 - hkd = 113 - idr = 119 - krw = 140 - mxn = 177 - pln = 200 - sar = 212 - thb = 233 - try = 242 - twd = 244 - zar = 291 + cny = 68 + inr = 125 + rub = 210 + hkd = 114 + idr = 120 + krw = 141 + mxn = 178 + pln = 201 + sar = 213 + thb = 235 + try = 244 + twd = 246 + zar = 293 ) // currency holds an alphabetically sorted list of canonical 3-letter currency // identifiers. Each identifier is followed by a byte of type currencyInfo, // defined in gen_common.go. -const currency tag.Index = "" + // Size: 1200 bytes +const currency tag.Index = "" + // Size: 1208 bytes "\x00\x00\x00\x00ADP\x09AED\x00AFA\x00AFN\x09ALK\x00ALL\x09AMD\x09ANG\x00" + "AOA\x00AOK\x00AON\x00AOR\x00ARA\x00ARL\x00ARM\x00ARP\x00ARS\x00ATS\x00AU" + "D\x00AWG\x00AZM\x00AZN\x00BAD\x00BAM\x00BAN\x00BBD\x00BDT\x00BEC\x00BEF" + "\x00BEL\x00BGL\x00BGM\x00BGN\x00BGO\x00BHD\x1bBIF\x09BMD\x00BND\x00BOB" + "\x00BOL\x00BOP\x00BOV\x00BRB\x00BRC\x00BRE\x00BRL\x00BRN\x00BRR\x00BRZ" + "\x00BSD\x00BTN\x00BUK\x00BWP\x00BYB\x00BYN\x00BYR\x09BZD\x00CAD(CDF\x00C" + - "HE\x00CHF(CHW\x00CLE\x00CLF$CLP\x09CNX\x00CNY\x00COP\x09COU\x00CRC\x08CS" + - "D\x00CSK\x00CUC\x00CUP\x00CVE\x00CYP\x00CZK\x08DDM\x00DEM\x00DJF\x09DKK" + - "\x00DOP\x00DZD\x00ECS\x00ECV\x00EEK\x00EGP\x00ERN\x00ESA\x00ESB\x00ESP" + - "\x09ETB\x00EUR\x00FIM\x00FJD\x00FKP\x00FRF\x00GBP\x00GEK\x00GEL\x00GHC" + + "HE\x00CHF(CHW\x00CLE\x00CLF$CLP\x09CNH\x00CNX\x00CNY\x00COP\x09COU\x00CR" + + "C\x08CSD\x00CSK\x00CUC\x00CUP\x00CVE\x00CYP\x00CZK\x08DDM\x00DEM\x00DJF" + + "\x09DKK0DOP\x00DZD\x00ECS\x00ECV\x00EEK\x00EGP\x00ERN\x00ESA\x00ESB\x00E" + + "SP\x09ETB\x00EUR\x00FIM\x00FJD\x00FKP\x00FRF\x00GBP\x00GEK\x00GEL\x00GHC" + "\x00GHS\x00GIP\x00GMD\x00GNF\x09GNS\x00GQE\x00GRD\x00GTQ\x00GWE\x00GWP" + "\x00GYD\x09HKD\x00HNL\x00HRD\x00HRK\x00HTG\x00HUF\x08IDR\x09IEP\x00ILP" + "\x00ILR\x00ILS\x00INR\x00IQD\x09IRR\x09ISJ\x00ISK\x09ITL\x09JMD\x00JOD" + @@ -63,20 +63,21 @@ const currency tag.Index = "" + // Size: 1200 bytes "\x00LUF\x09LUL\x00LVL\x00LVR\x00LYD\x1bMAD\x00MAF\x00MCF\x00MDC\x00MDL" + "\x00MGA\x09MGF\x09MKD\x00MKN\x00MLF\x00MMK\x09MNT\x09MOP\x00MRO\x09MTL" + "\x00MTP\x00MUR\x09MVP\x00MVR\x00MWK\x00MXN\x00MXP\x00MXV\x00MYR\x00MZE" + - "\x00MZM\x00MZN\x00NAD\x00NGN\x00NIC\x00NIO\x00NLG\x00NOK\x00NPR\x00NZD" + + "\x00MZM\x00MZN\x00NAD\x00NGN\x00NIC\x00NIO\x00NLG\x00NOK\x08NPR\x00NZD" + "\x00OMR\x1bPAB\x00PEI\x00PEN\x00PES\x00PGK\x00PHP\x00PKR\x09PLN\x00PLZ" + "\x00PTE\x00PYG\x09QAR\x00RHD\x00ROL\x00RON\x00RSD\x09RUB\x00RUR\x00RWF" + - "\x09SAR\x00SBD\x00SCR\x00SDD\x00SDG\x00SDP\x00SEK\x00SGD\x00SHP\x00SIT" + - "\x00SKK\x00SLL\x09SOS\x09SRD\x00SRG\x00SSP\x00STD\x09SUR\x00SVC\x00SYP" + - "\x09SZL\x00THB\x00TJR\x00TJS\x00TMM\x09TMT\x00TND\x1bTOP\x00TPE\x00TRL" + - "\x09TRY\x00TTD\x00TWD\x08TZS\x09UAH\x00UAK\x00UGS\x00UGX\x09USD\x00USN" + - "\x00USS\x00UYI\x09UYP\x00UYU\x00UZS\x09VEB\x00VEF\x00VND\x09VNN\x00VUV" + - "\x09WST\x00XAF\x09XAG\x00XAU\x00XBA\x00XBB\x00XBC\x00XBD\x00XCD\x00XDR" + - "\x00XEU\x00XFO\x00XFU\x00XOF\x09XPD\x00XPF\x09XPT\x00XRE\x00XSU\x00XTS" + - "\x00XUA\x00XXX\x00YDD\x00YER\x09YUD\x00YUM\x00YUN\x00YUR\x00ZAL\x00ZAR" + - "\x00ZMK\x09ZMW\x00ZRN\x00ZRZ\x00ZWD\x09ZWL\x00ZWR\x00\xff\xff\xff\xff" + "\x09SAR\x00SBD\x00SCR\x00SDD\x00SDG\x00SDP\x00SEK\x08SGD\x00SHP\x00SIT" + + "\x00SKK\x00SLL\x09SOS\x09SRD\x00SRG\x00SSP\x00STD\x09STN\x00SUR\x00SVC" + + "\x00SYP\x09SZL\x00THB\x00TJR\x00TJS\x00TMM\x09TMT\x00TND\x1bTOP\x00TPE" + + "\x00TRL\x09TRY\x00TTD\x00TWD\x08TZS\x09UAH\x00UAK\x00UGS\x00UGX\x09USD" + + "\x00USN\x00USS\x00UYI\x09UYP\x00UYU\x00UZS\x09VEB\x00VEF\x00VND\x09VNN" + + "\x00VUV\x09WST\x00XAF\x09XAG\x00XAU\x00XBA\x00XBB\x00XBC\x00XBD\x00XCD" + + "\x00XDR\x00XEU\x00XFO\x00XFU\x00XOF\x09XPD\x00XPF\x09XPT\x00XRE\x00XSU" + + "\x00XTS\x00XUA\x00XXX\x00YDD\x00YER\x09YUD\x00YUM\x00YUN\x00YUR\x00ZAL" + + "\x00ZAR\x00ZMK\x09ZMW\x00ZRN\x00ZRZ\x00ZWD\x09ZWL\x00ZWR\x00\xff\xff\xff" + + "\xff" -const numCurrencies = 298 +const numCurrencies = 300 type toCurrency struct { region uint16 @@ -84,261 +85,261 @@ type toCurrency struct { } var regionToCurrency = []toCurrency{ // 255 elements - 0: {region: 0x4143, code: 0xdc}, - 1: {region: 0x4144, code: 0x5d}, + 0: {region: 0x4143, code: 0xdd}, + 1: {region: 0x4144, code: 0x5e}, 2: {region: 0x4145, code: 0x2}, 3: {region: 0x4146, code: 0x4}, - 4: {region: 0x4147, code: 0x10e}, - 5: {region: 0x4149, code: 0x10e}, + 4: {region: 0x4147, code: 0x110}, + 5: {region: 0x4149, code: 0x110}, 6: {region: 0x414c, code: 0x6}, 7: {region: 0x414d, code: 0x7}, 8: {region: 0x414f, code: 0x9}, 9: {region: 0x4152, code: 0x11}, - 10: {region: 0x4153, code: 0xfa}, - 11: {region: 0x4154, code: 0x5d}, + 10: {region: 0x4153, code: 0xfc}, + 11: {region: 0x4154, code: 0x5e}, 12: {region: 0x4155, code: 0x13}, 13: {region: 0x4157, code: 0x14}, - 14: {region: 0x4158, code: 0x5d}, + 14: {region: 0x4158, code: 0x5e}, 15: {region: 0x415a, code: 0x16}, 16: {region: 0x4241, code: 0x18}, 17: {region: 0x4242, code: 0x1a}, 18: {region: 0x4244, code: 0x1b}, - 19: {region: 0x4245, code: 0x5d}, - 20: {region: 0x4246, code: 0x113}, + 19: {region: 0x4245, code: 0x5e}, + 20: {region: 0x4246, code: 0x115}, 21: {region: 0x4247, code: 0x21}, 22: {region: 0x4248, code: 0x23}, 23: {region: 0x4249, code: 0x24}, - 24: {region: 0x424a, code: 0x113}, - 25: {region: 0x424c, code: 0x5d}, + 24: {region: 0x424a, code: 0x115}, + 25: {region: 0x424c, code: 0x5e}, 26: {region: 0x424d, code: 0x25}, 27: {region: 0x424e, code: 0x26}, 28: {region: 0x424f, code: 0x27}, - 29: {region: 0x4251, code: 0xfa}, + 29: {region: 0x4251, code: 0xfc}, 30: {region: 0x4252, code: 0x2e}, 31: {region: 0x4253, code: 0x32}, 32: {region: 0x4254, code: 0x33}, - 33: {region: 0x4256, code: 0xbd}, + 33: {region: 0x4256, code: 0xbe}, 34: {region: 0x4257, code: 0x35}, 35: {region: 0x4259, code: 0x37}, 36: {region: 0x425a, code: 0x39}, 37: {region: 0x4341, code: 0x3a}, 38: {region: 0x4343, code: 0x13}, 39: {region: 0x4344, code: 0x3b}, - 40: {region: 0x4346, code: 0x107}, - 41: {region: 0x4347, code: 0x107}, + 40: {region: 0x4346, code: 0x109}, + 41: {region: 0x4347, code: 0x109}, 42: {region: 0x4348, code: 0x3d}, - 43: {region: 0x4349, code: 0x113}, - 44: {region: 0x434b, code: 0xbf}, + 43: {region: 0x4349, code: 0x115}, + 44: {region: 0x434b, code: 0xc0}, 45: {region: 0x434c, code: 0x41}, - 46: {region: 0x434d, code: 0x107}, - 47: {region: 0x434e, code: 0x43}, - 48: {region: 0x434f, code: 0x44}, - 49: {region: 0x4352, code: 0x46}, - 50: {region: 0x4355, code: 0x4a}, - 51: {region: 0x4356, code: 0x4b}, + 46: {region: 0x434d, code: 0x109}, + 47: {region: 0x434e, code: 0x44}, + 48: {region: 0x434f, code: 0x45}, + 49: {region: 0x4352, code: 0x47}, + 50: {region: 0x4355, code: 0x4b}, + 51: {region: 0x4356, code: 0x4c}, 52: {region: 0x4357, code: 0x8}, 53: {region: 0x4358, code: 0x13}, - 54: {region: 0x4359, code: 0x5d}, - 55: {region: 0x435a, code: 0x4d}, - 56: {region: 0x4445, code: 0x5d}, - 57: {region: 0x4447, code: 0xfa}, - 58: {region: 0x444a, code: 0x50}, - 59: {region: 0x444b, code: 0x51}, - 60: {region: 0x444d, code: 0x10e}, - 61: {region: 0x444f, code: 0x52}, - 62: {region: 0x445a, code: 0x53}, - 63: {region: 0x4541, code: 0x5d}, - 64: {region: 0x4543, code: 0xfa}, - 65: {region: 0x4545, code: 0x5d}, - 66: {region: 0x4547, code: 0x57}, - 67: {region: 0x4548, code: 0x9d}, - 68: {region: 0x4552, code: 0x58}, - 69: {region: 0x4553, code: 0x5d}, - 70: {region: 0x4554, code: 0x5c}, - 71: {region: 0x4555, code: 0x5d}, - 72: {region: 0x4649, code: 0x5d}, - 73: {region: 0x464a, code: 0x5f}, - 74: {region: 0x464b, code: 0x60}, - 75: {region: 0x464d, code: 0xfa}, - 76: {region: 0x464f, code: 0x51}, - 77: {region: 0x4652, code: 0x5d}, - 78: {region: 0x4741, code: 0x107}, - 79: {region: 0x4742, code: 0x62}, - 80: {region: 0x4744, code: 0x10e}, - 81: {region: 0x4745, code: 0x64}, - 82: {region: 0x4746, code: 0x5d}, - 83: {region: 0x4747, code: 0x62}, - 84: {region: 0x4748, code: 0x66}, - 85: {region: 0x4749, code: 0x67}, - 86: {region: 0x474c, code: 0x51}, - 87: {region: 0x474d, code: 0x68}, - 88: {region: 0x474e, code: 0x69}, - 89: {region: 0x4750, code: 0x5d}, - 90: {region: 0x4751, code: 0x107}, - 91: {region: 0x4752, code: 0x5d}, - 92: {region: 0x4753, code: 0x62}, - 93: {region: 0x4754, code: 0x6d}, - 94: {region: 0x4755, code: 0xfa}, - 95: {region: 0x4757, code: 0x113}, - 96: {region: 0x4759, code: 0x70}, - 97: {region: 0x484b, code: 0x71}, + 54: {region: 0x4359, code: 0x5e}, + 55: {region: 0x435a, code: 0x4e}, + 56: {region: 0x4445, code: 0x5e}, + 57: {region: 0x4447, code: 0xfc}, + 58: {region: 0x444a, code: 0x51}, + 59: {region: 0x444b, code: 0x52}, + 60: {region: 0x444d, code: 0x110}, + 61: {region: 0x444f, code: 0x53}, + 62: {region: 0x445a, code: 0x54}, + 63: {region: 0x4541, code: 0x5e}, + 64: {region: 0x4543, code: 0xfc}, + 65: {region: 0x4545, code: 0x5e}, + 66: {region: 0x4547, code: 0x58}, + 67: {region: 0x4548, code: 0x9e}, + 68: {region: 0x4552, code: 0x59}, + 69: {region: 0x4553, code: 0x5e}, + 70: {region: 0x4554, code: 0x5d}, + 71: {region: 0x4555, code: 0x5e}, + 72: {region: 0x4649, code: 0x5e}, + 73: {region: 0x464a, code: 0x60}, + 74: {region: 0x464b, code: 0x61}, + 75: {region: 0x464d, code: 0xfc}, + 76: {region: 0x464f, code: 0x52}, + 77: {region: 0x4652, code: 0x5e}, + 78: {region: 0x4741, code: 0x109}, + 79: {region: 0x4742, code: 0x63}, + 80: {region: 0x4744, code: 0x110}, + 81: {region: 0x4745, code: 0x65}, + 82: {region: 0x4746, code: 0x5e}, + 83: {region: 0x4747, code: 0x63}, + 84: {region: 0x4748, code: 0x67}, + 85: {region: 0x4749, code: 0x68}, + 86: {region: 0x474c, code: 0x52}, + 87: {region: 0x474d, code: 0x69}, + 88: {region: 0x474e, code: 0x6a}, + 89: {region: 0x4750, code: 0x5e}, + 90: {region: 0x4751, code: 0x109}, + 91: {region: 0x4752, code: 0x5e}, + 92: {region: 0x4753, code: 0x63}, + 93: {region: 0x4754, code: 0x6e}, + 94: {region: 0x4755, code: 0xfc}, + 95: {region: 0x4757, code: 0x115}, + 96: {region: 0x4759, code: 0x71}, + 97: {region: 0x484b, code: 0x72}, 98: {region: 0x484d, code: 0x13}, - 99: {region: 0x484e, code: 0x72}, - 100: {region: 0x4852, code: 0x74}, - 101: {region: 0x4854, code: 0x75}, - 102: {region: 0x4855, code: 0x76}, - 103: {region: 0x4943, code: 0x5d}, - 104: {region: 0x4944, code: 0x77}, - 105: {region: 0x4945, code: 0x5d}, - 106: {region: 0x494c, code: 0x7b}, - 107: {region: 0x494d, code: 0x62}, - 108: {region: 0x494e, code: 0x7c}, - 109: {region: 0x494f, code: 0xfa}, - 110: {region: 0x4951, code: 0x7d}, - 111: {region: 0x4952, code: 0x7e}, - 112: {region: 0x4953, code: 0x80}, - 113: {region: 0x4954, code: 0x5d}, - 114: {region: 0x4a45, code: 0x62}, - 115: {region: 0x4a4d, code: 0x82}, - 116: {region: 0x4a4f, code: 0x83}, - 117: {region: 0x4a50, code: 0x84}, - 118: {region: 0x4b45, code: 0x85}, - 119: {region: 0x4b47, code: 0x86}, - 120: {region: 0x4b48, code: 0x87}, + 99: {region: 0x484e, code: 0x73}, + 100: {region: 0x4852, code: 0x75}, + 101: {region: 0x4854, code: 0x76}, + 102: {region: 0x4855, code: 0x77}, + 103: {region: 0x4943, code: 0x5e}, + 104: {region: 0x4944, code: 0x78}, + 105: {region: 0x4945, code: 0x5e}, + 106: {region: 0x494c, code: 0x7c}, + 107: {region: 0x494d, code: 0x63}, + 108: {region: 0x494e, code: 0x7d}, + 109: {region: 0x494f, code: 0xfc}, + 110: {region: 0x4951, code: 0x7e}, + 111: {region: 0x4952, code: 0x7f}, + 112: {region: 0x4953, code: 0x81}, + 113: {region: 0x4954, code: 0x5e}, + 114: {region: 0x4a45, code: 0x63}, + 115: {region: 0x4a4d, code: 0x83}, + 116: {region: 0x4a4f, code: 0x84}, + 117: {region: 0x4a50, code: 0x85}, + 118: {region: 0x4b45, code: 0x86}, + 119: {region: 0x4b47, code: 0x87}, + 120: {region: 0x4b48, code: 0x88}, 121: {region: 0x4b49, code: 0x13}, - 122: {region: 0x4b4d, code: 0x88}, - 123: {region: 0x4b4e, code: 0x10e}, - 124: {region: 0x4b50, code: 0x89}, - 125: {region: 0x4b52, code: 0x8c}, - 126: {region: 0x4b57, code: 0x8d}, - 127: {region: 0x4b59, code: 0x8e}, - 128: {region: 0x4b5a, code: 0x8f}, - 129: {region: 0x4c41, code: 0x90}, - 130: {region: 0x4c42, code: 0x91}, - 131: {region: 0x4c43, code: 0x10e}, + 122: {region: 0x4b4d, code: 0x89}, + 123: {region: 0x4b4e, code: 0x110}, + 124: {region: 0x4b50, code: 0x8a}, + 125: {region: 0x4b52, code: 0x8d}, + 126: {region: 0x4b57, code: 0x8e}, + 127: {region: 0x4b59, code: 0x8f}, + 128: {region: 0x4b5a, code: 0x90}, + 129: {region: 0x4c41, code: 0x91}, + 130: {region: 0x4c42, code: 0x92}, + 131: {region: 0x4c43, code: 0x110}, 132: {region: 0x4c49, code: 0x3d}, - 133: {region: 0x4c4b, code: 0x92}, - 134: {region: 0x4c52, code: 0x93}, - 135: {region: 0x4c53, code: 0x123}, - 136: {region: 0x4c54, code: 0x5d}, - 137: {region: 0x4c55, code: 0x5d}, - 138: {region: 0x4c56, code: 0x5d}, - 139: {region: 0x4c59, code: 0x9c}, - 140: {region: 0x4d41, code: 0x9d}, - 141: {region: 0x4d43, code: 0x5d}, - 142: {region: 0x4d44, code: 0xa1}, - 143: {region: 0x4d45, code: 0x5d}, - 144: {region: 0x4d46, code: 0x5d}, - 145: {region: 0x4d47, code: 0xa2}, - 146: {region: 0x4d48, code: 0xfa}, - 147: {region: 0x4d4b, code: 0xa4}, - 148: {region: 0x4d4c, code: 0x113}, - 149: {region: 0x4d4d, code: 0xa7}, - 150: {region: 0x4d4e, code: 0xa8}, - 151: {region: 0x4d4f, code: 0xa9}, - 152: {region: 0x4d50, code: 0xfa}, - 153: {region: 0x4d51, code: 0x5d}, - 154: {region: 0x4d52, code: 0xaa}, - 155: {region: 0x4d53, code: 0x10e}, - 156: {region: 0x4d54, code: 0x5d}, - 157: {region: 0x4d55, code: 0xad}, - 158: {region: 0x4d56, code: 0xaf}, - 159: {region: 0x4d57, code: 0xb0}, - 160: {region: 0x4d58, code: 0xb1}, - 161: {region: 0x4d59, code: 0xb4}, - 162: {region: 0x4d5a, code: 0xb7}, - 163: {region: 0x4e41, code: 0xb8}, - 164: {region: 0x4e43, code: 0x115}, - 165: {region: 0x4e45, code: 0x113}, + 133: {region: 0x4c4b, code: 0x93}, + 134: {region: 0x4c52, code: 0x94}, + 135: {region: 0x4c53, code: 0x125}, + 136: {region: 0x4c54, code: 0x5e}, + 137: {region: 0x4c55, code: 0x5e}, + 138: {region: 0x4c56, code: 0x5e}, + 139: {region: 0x4c59, code: 0x9d}, + 140: {region: 0x4d41, code: 0x9e}, + 141: {region: 0x4d43, code: 0x5e}, + 142: {region: 0x4d44, code: 0xa2}, + 143: {region: 0x4d45, code: 0x5e}, + 144: {region: 0x4d46, code: 0x5e}, + 145: {region: 0x4d47, code: 0xa3}, + 146: {region: 0x4d48, code: 0xfc}, + 147: {region: 0x4d4b, code: 0xa5}, + 148: {region: 0x4d4c, code: 0x115}, + 149: {region: 0x4d4d, code: 0xa8}, + 150: {region: 0x4d4e, code: 0xa9}, + 151: {region: 0x4d4f, code: 0xaa}, + 152: {region: 0x4d50, code: 0xfc}, + 153: {region: 0x4d51, code: 0x5e}, + 154: {region: 0x4d52, code: 0xab}, + 155: {region: 0x4d53, code: 0x110}, + 156: {region: 0x4d54, code: 0x5e}, + 157: {region: 0x4d55, code: 0xae}, + 158: {region: 0x4d56, code: 0xb0}, + 159: {region: 0x4d57, code: 0xb1}, + 160: {region: 0x4d58, code: 0xb2}, + 161: {region: 0x4d59, code: 0xb5}, + 162: {region: 0x4d5a, code: 0xb8}, + 163: {region: 0x4e41, code: 0xb9}, + 164: {region: 0x4e43, code: 0x117}, + 165: {region: 0x4e45, code: 0x115}, 166: {region: 0x4e46, code: 0x13}, - 167: {region: 0x4e47, code: 0xb9}, - 168: {region: 0x4e49, code: 0xbb}, - 169: {region: 0x4e4c, code: 0x5d}, - 170: {region: 0x4e4f, code: 0xbd}, - 171: {region: 0x4e50, code: 0xbe}, + 167: {region: 0x4e47, code: 0xba}, + 168: {region: 0x4e49, code: 0xbc}, + 169: {region: 0x4e4c, code: 0x5e}, + 170: {region: 0x4e4f, code: 0xbe}, + 171: {region: 0x4e50, code: 0xbf}, 172: {region: 0x4e52, code: 0x13}, - 173: {region: 0x4e55, code: 0xbf}, - 174: {region: 0x4e5a, code: 0xbf}, - 175: {region: 0x4f4d, code: 0xc0}, - 176: {region: 0x5041, code: 0xc1}, - 177: {region: 0x5045, code: 0xc3}, - 178: {region: 0x5046, code: 0x115}, - 179: {region: 0x5047, code: 0xc5}, - 180: {region: 0x5048, code: 0xc6}, - 181: {region: 0x504b, code: 0xc7}, - 182: {region: 0x504c, code: 0xc8}, - 183: {region: 0x504d, code: 0x5d}, - 184: {region: 0x504e, code: 0xbf}, - 185: {region: 0x5052, code: 0xfa}, - 186: {region: 0x5053, code: 0x7b}, - 187: {region: 0x5054, code: 0x5d}, - 188: {region: 0x5057, code: 0xfa}, - 189: {region: 0x5059, code: 0xcb}, - 190: {region: 0x5141, code: 0xcc}, - 191: {region: 0x5245, code: 0x5d}, - 192: {region: 0x524f, code: 0xcf}, - 193: {region: 0x5253, code: 0xd0}, - 194: {region: 0x5255, code: 0xd1}, - 195: {region: 0x5257, code: 0xd3}, - 196: {region: 0x5341, code: 0xd4}, - 197: {region: 0x5342, code: 0xd5}, - 198: {region: 0x5343, code: 0xd6}, - 199: {region: 0x5344, code: 0xd8}, - 200: {region: 0x5345, code: 0xda}, - 201: {region: 0x5347, code: 0xdb}, - 202: {region: 0x5348, code: 0xdc}, - 203: {region: 0x5349, code: 0x5d}, - 204: {region: 0x534a, code: 0xbd}, - 205: {region: 0x534b, code: 0x5d}, - 206: {region: 0x534c, code: 0xdf}, - 207: {region: 0x534d, code: 0x5d}, - 208: {region: 0x534e, code: 0x113}, - 209: {region: 0x534f, code: 0xe0}, - 210: {region: 0x5352, code: 0xe1}, - 211: {region: 0x5353, code: 0xe3}, - 212: {region: 0x5354, code: 0xe4}, - 213: {region: 0x5356, code: 0xfa}, + 173: {region: 0x4e55, code: 0xc0}, + 174: {region: 0x4e5a, code: 0xc0}, + 175: {region: 0x4f4d, code: 0xc1}, + 176: {region: 0x5041, code: 0xc2}, + 177: {region: 0x5045, code: 0xc4}, + 178: {region: 0x5046, code: 0x117}, + 179: {region: 0x5047, code: 0xc6}, + 180: {region: 0x5048, code: 0xc7}, + 181: {region: 0x504b, code: 0xc8}, + 182: {region: 0x504c, code: 0xc9}, + 183: {region: 0x504d, code: 0x5e}, + 184: {region: 0x504e, code: 0xc0}, + 185: {region: 0x5052, code: 0xfc}, + 186: {region: 0x5053, code: 0x7c}, + 187: {region: 0x5054, code: 0x5e}, + 188: {region: 0x5057, code: 0xfc}, + 189: {region: 0x5059, code: 0xcc}, + 190: {region: 0x5141, code: 0xcd}, + 191: {region: 0x5245, code: 0x5e}, + 192: {region: 0x524f, code: 0xd0}, + 193: {region: 0x5253, code: 0xd1}, + 194: {region: 0x5255, code: 0xd2}, + 195: {region: 0x5257, code: 0xd4}, + 196: {region: 0x5341, code: 0xd5}, + 197: {region: 0x5342, code: 0xd6}, + 198: {region: 0x5343, code: 0xd7}, + 199: {region: 0x5344, code: 0xd9}, + 200: {region: 0x5345, code: 0xdb}, + 201: {region: 0x5347, code: 0xdc}, + 202: {region: 0x5348, code: 0xdd}, + 203: {region: 0x5349, code: 0x5e}, + 204: {region: 0x534a, code: 0xbe}, + 205: {region: 0x534b, code: 0x5e}, + 206: {region: 0x534c, code: 0xe0}, + 207: {region: 0x534d, code: 0x5e}, + 208: {region: 0x534e, code: 0x115}, + 209: {region: 0x534f, code: 0xe1}, + 210: {region: 0x5352, code: 0xe2}, + 211: {region: 0x5353, code: 0xe4}, + 212: {region: 0x5354, code: 0xe6}, + 213: {region: 0x5356, code: 0xfc}, 214: {region: 0x5358, code: 0x8}, - 215: {region: 0x5359, code: 0xe7}, - 216: {region: 0x535a, code: 0xe8}, - 217: {region: 0x5441, code: 0x62}, - 218: {region: 0x5443, code: 0xfa}, - 219: {region: 0x5444, code: 0x107}, - 220: {region: 0x5446, code: 0x5d}, - 221: {region: 0x5447, code: 0x113}, - 222: {region: 0x5448, code: 0xe9}, - 223: {region: 0x544a, code: 0xeb}, - 224: {region: 0x544b, code: 0xbf}, - 225: {region: 0x544c, code: 0xfa}, - 226: {region: 0x544d, code: 0xed}, - 227: {region: 0x544e, code: 0xee}, - 228: {region: 0x544f, code: 0xef}, - 229: {region: 0x5452, code: 0xf2}, - 230: {region: 0x5454, code: 0xf3}, + 215: {region: 0x5359, code: 0xe9}, + 216: {region: 0x535a, code: 0xea}, + 217: {region: 0x5441, code: 0x63}, + 218: {region: 0x5443, code: 0xfc}, + 219: {region: 0x5444, code: 0x109}, + 220: {region: 0x5446, code: 0x5e}, + 221: {region: 0x5447, code: 0x115}, + 222: {region: 0x5448, code: 0xeb}, + 223: {region: 0x544a, code: 0xed}, + 224: {region: 0x544b, code: 0xc0}, + 225: {region: 0x544c, code: 0xfc}, + 226: {region: 0x544d, code: 0xef}, + 227: {region: 0x544e, code: 0xf0}, + 228: {region: 0x544f, code: 0xf1}, + 229: {region: 0x5452, code: 0xf4}, + 230: {region: 0x5454, code: 0xf5}, 231: {region: 0x5456, code: 0x13}, - 232: {region: 0x5457, code: 0xf4}, - 233: {region: 0x545a, code: 0xf5}, - 234: {region: 0x5541, code: 0xf6}, - 235: {region: 0x5547, code: 0xf9}, - 236: {region: 0x554d, code: 0xfa}, - 237: {region: 0x5553, code: 0xfa}, - 238: {region: 0x5559, code: 0xff}, - 239: {region: 0x555a, code: 0x100}, - 240: {region: 0x5641, code: 0x5d}, - 241: {region: 0x5643, code: 0x10e}, - 242: {region: 0x5645, code: 0x102}, - 243: {region: 0x5647, code: 0xfa}, - 244: {region: 0x5649, code: 0xfa}, - 245: {region: 0x564e, code: 0x103}, - 246: {region: 0x5655, code: 0x105}, - 247: {region: 0x5746, code: 0x115}, - 248: {region: 0x5753, code: 0x106}, - 249: {region: 0x584b, code: 0x5d}, - 250: {region: 0x5945, code: 0x11d}, - 251: {region: 0x5954, code: 0x5d}, - 252: {region: 0x5a41, code: 0x123}, - 253: {region: 0x5a4d, code: 0x125}, - 254: {region: 0x5a57, code: 0xfa}, + 232: {region: 0x5457, code: 0xf6}, + 233: {region: 0x545a, code: 0xf7}, + 234: {region: 0x5541, code: 0xf8}, + 235: {region: 0x5547, code: 0xfb}, + 236: {region: 0x554d, code: 0xfc}, + 237: {region: 0x5553, code: 0xfc}, + 238: {region: 0x5559, code: 0x101}, + 239: {region: 0x555a, code: 0x102}, + 240: {region: 0x5641, code: 0x5e}, + 241: {region: 0x5643, code: 0x110}, + 242: {region: 0x5645, code: 0x104}, + 243: {region: 0x5647, code: 0xfc}, + 244: {region: 0x5649, code: 0xfc}, + 245: {region: 0x564e, code: 0x105}, + 246: {region: 0x5655, code: 0x107}, + 247: {region: 0x5746, code: 0x117}, + 248: {region: 0x5753, code: 0x108}, + 249: {region: 0x584b, code: 0x5e}, + 250: {region: 0x5945, code: 0x11f}, + 251: {region: 0x5954, code: 0x5e}, + 252: {region: 0x5a41, code: 0x125}, + 253: {region: 0x5a4d, code: 0x127}, + 254: {region: 0x5a57, code: 0xfc}, } // Size: 1044 bytes type regionInfo struct { @@ -348,77 +349,77 @@ type regionInfo struct { to uint32 } -var regionData = []regionInfo{ // 493 elements - 0: {region: 0x4143, code: 0xdc, from: 0xf7021, to: 0x0}, - 1: {region: 0x4144, code: 0x5d, from: 0xf9e21, to: 0x0}, - 2: {region: 0x4144, code: 0x5b, from: 0xea221, to: 0xfa45c}, - 3: {region: 0x4144, code: 0x61, from: 0xf5021, to: 0xfa451}, +var regionData = []regionInfo{ // 495 elements + 0: {region: 0x4143, code: 0xdd, from: 0xf7021, to: 0x0}, + 1: {region: 0x4144, code: 0x5e, from: 0xf9e21, to: 0x0}, + 2: {region: 0x4144, code: 0x5c, from: 0xea221, to: 0xfa45c}, + 3: {region: 0x4144, code: 0x62, from: 0xf5021, to: 0xfa451}, 4: {region: 0x4144, code: 0x1, from: 0xf2021, to: 0xfa39f}, 5: {region: 0x4145, code: 0x2, from: 0xf6ab3, to: 0x0}, 6: {region: 0x4146, code: 0x4, from: 0xfa547, to: 0x0}, 7: {region: 0x4146, code: 0x3, from: 0xf0e6e, to: 0xfa59f}, - 8: {region: 0x4147, code: 0x10e, from: 0xf5b46, to: 0x0}, - 9: {region: 0x4149, code: 0x10e, from: 0xf5b46, to: 0x0}, + 8: {region: 0x4147, code: 0x110, from: 0xf5b46, to: 0x0}, + 9: {region: 0x4149, code: 0x110, from: 0xf5b46, to: 0x0}, 10: {region: 0x414c, code: 0x6, from: 0xf5b10, to: 0x0}, 11: {region: 0x414c, code: 0x5, from: 0xf3561, to: 0xf5b10}, 12: {region: 0x414d, code: 0x7, from: 0xf9376, to: 0x0}, - 13: {region: 0x414d, code: 0xd2, from: 0xf8f99, to: 0xf9376}, - 14: {region: 0x414d, code: 0xe5, from: 0xf5221, to: 0xf8f99}, + 13: {region: 0x414d, code: 0xd3, from: 0xf8f99, to: 0xf9376}, + 14: {region: 0x414d, code: 0xe7, from: 0xf5221, to: 0xf8f99}, 15: {region: 0x414f, code: 0x9, from: 0xf9f8d, to: 0x0}, 16: {region: 0x414f, code: 0xc, from: 0xf96e1, to: 0xfa041}, 17: {region: 0x414f, code: 0xb, from: 0xf8d39, to: 0xfa041}, 18: {region: 0x414f, code: 0xa, from: 0xf7228, to: 0xf8e61}, - 19: {region: 0x4151, code: 0x811b, from: 0x0, to: 0x0}, + 19: {region: 0x4151, code: 0x811d, from: 0x0, to: 0x0}, 20: {region: 0x4152, code: 0x11, from: 0xf9021, to: 0x0}, 21: {region: 0x4152, code: 0xd, from: 0xf82ce, to: 0xf9021}, 22: {region: 0x4152, code: 0x10, from: 0xf7ec1, to: 0xf82ce}, 23: {region: 0x4152, code: 0xe, from: 0xf6421, to: 0xf7ec1}, 24: {region: 0x4152, code: 0xf, from: 0xeb365, to: 0xf6421}, - 25: {region: 0x4153, code: 0xfa, from: 0xee0f0, to: 0x0}, - 26: {region: 0x4154, code: 0x5d, from: 0xf9e21, to: 0x0}, + 25: {region: 0x4153, code: 0xfc, from: 0xee0f0, to: 0x0}, + 26: {region: 0x4154, code: 0x5e, from: 0xf9e21, to: 0x0}, 27: {region: 0x4154, code: 0x12, from: 0xf3784, to: 0xfa45c}, 28: {region: 0x4155, code: 0x13, from: 0xf5c4e, to: 0x0}, 29: {region: 0x4157, code: 0x14, from: 0xf8421, to: 0x0}, 30: {region: 0x4157, code: 0x8, from: 0xf28aa, to: 0xf8421}, - 31: {region: 0x4158, code: 0x5d, from: 0xf9e21, to: 0x0}, + 31: {region: 0x4158, code: 0x5e, from: 0xf9e21, to: 0x0}, 32: {region: 0x415a, code: 0x16, from: 0xfac21, to: 0x0}, 33: {region: 0x415a, code: 0x15, from: 0xf9376, to: 0xfad9f}, - 34: {region: 0x415a, code: 0xd2, from: 0xf8f99, to: 0xf9421}, - 35: {region: 0x415a, code: 0xe5, from: 0xf5221, to: 0xf8f99}, + 34: {region: 0x415a, code: 0xd3, from: 0xf8f99, to: 0xf9421}, + 35: {region: 0x415a, code: 0xe7, from: 0xf5221, to: 0xf8f99}, 36: {region: 0x4241, code: 0x18, from: 0xf9621, to: 0x0}, 37: {region: 0x4241, code: 0x19, from: 0xf950f, to: 0xf9ae1}, 38: {region: 0x4241, code: 0x17, from: 0xf90e1, to: 0xf950f}, - 39: {region: 0x4241, code: 0x121, from: 0xf90e1, to: 0xf9341}, - 40: {region: 0x4241, code: 0x120, from: 0xf8c21, to: 0xf90e1}, - 41: {region: 0x4241, code: 0x11e, from: 0xf5c21, to: 0xf8c21}, + 39: {region: 0x4241, code: 0x123, from: 0xf90e1, to: 0xf9341}, + 40: {region: 0x4241, code: 0x122, from: 0xf8c21, to: 0xf90e1}, + 41: {region: 0x4241, code: 0x120, from: 0xf5c21, to: 0xf8c21}, 42: {region: 0x4242, code: 0x1a, from: 0xf6b83, to: 0x0}, - 43: {region: 0x4242, code: 0x10e, from: 0xf5b46, to: 0xf6b83}, + 43: {region: 0x4242, code: 0x110, from: 0xf5b46, to: 0xf6b83}, 44: {region: 0x4244, code: 0x1b, from: 0xf6821, to: 0x0}, - 45: {region: 0x4244, code: 0xc7, from: 0xf3881, to: 0xf6821}, - 46: {region: 0x4244, code: 0x7c, from: 0xe5711, to: 0xf3881}, - 47: {region: 0x4245, code: 0x5d, from: 0xf9e21, to: 0x0}, + 45: {region: 0x4244, code: 0xc8, from: 0xf3881, to: 0xf6821}, + 46: {region: 0x4244, code: 0x7d, from: 0xe5711, to: 0xf3881}, + 47: {region: 0x4245, code: 0x5e, from: 0xf9e21, to: 0x0}, 48: {region: 0x4245, code: 0x1d, from: 0xe4e47, to: 0xfa45c}, - 49: {region: 0x4245, code: 0xbc, from: 0xe318f, to: 0xe4e47}, + 49: {region: 0x4245, code: 0xbd, from: 0xe318f, to: 0xe4e47}, 50: {region: 0x4245, code: 0x801e, from: 0xf6421, to: 0xf8c65}, 51: {region: 0x4245, code: 0x801c, from: 0xf6421, to: 0xf8c65}, - 52: {region: 0x4246, code: 0x113, from: 0xf8104, to: 0x0}, + 52: {region: 0x4246, code: 0x115, from: 0xf8104, to: 0x0}, 53: {region: 0x4247, code: 0x21, from: 0xf9ee5, to: 0x0}, 54: {region: 0x4247, code: 0x1f, from: 0xf5421, to: 0xf9ee5}, 55: {region: 0x4247, code: 0x20, from: 0xf40ac, to: 0xf5421}, 56: {region: 0x4247, code: 0x22, from: 0xeaee8, to: 0xf40ac}, 57: {region: 0x4248, code: 0x23, from: 0xf5b50, to: 0x0}, 58: {region: 0x4249, code: 0x24, from: 0xf58b3, to: 0x0}, - 59: {region: 0x424a, code: 0x113, from: 0xf6f7e, to: 0x0}, - 60: {region: 0x424c, code: 0x5d, from: 0xf9e21, to: 0x0}, - 61: {region: 0x424c, code: 0x61, from: 0xf5021, to: 0xfa451}, + 59: {region: 0x424a, code: 0x115, from: 0xf6f7e, to: 0x0}, + 60: {region: 0x424c, code: 0x5e, from: 0xf9e21, to: 0x0}, + 61: {region: 0x424c, code: 0x62, from: 0xf5021, to: 0xfa451}, 62: {region: 0x424d, code: 0x25, from: 0xf6446, to: 0x0}, 63: {region: 0x424e, code: 0x26, from: 0xf5ecc, to: 0x0}, - 64: {region: 0x424e, code: 0xb4, from: 0xf5730, to: 0xf5ecc}, + 64: {region: 0x424e, code: 0xb5, from: 0xf5730, to: 0xf5ecc}, 65: {region: 0x424f, code: 0x27, from: 0xf8621, to: 0x0}, 66: {region: 0x424f, code: 0x29, from: 0xf5621, to: 0xf859f}, 67: {region: 0x424f, code: 0x28, from: 0xe8ed7, to: 0xf5621}, 68: {region: 0x424f, code: 0x802a, from: 0x0, to: 0x0}, - 69: {region: 0x4251, code: 0xfa, from: 0xfb621, to: 0x0}, + 69: {region: 0x4251, code: 0xfc, from: 0xfb621, to: 0x0}, 70: {region: 0x4251, code: 0x8, from: 0xfb54a, to: 0xfb621}, 71: {region: 0x4252, code: 0x2e, from: 0xf94e1, to: 0x0}, 72: {region: 0x4252, code: 0x30, from: 0xf9301, to: 0xf94e1}, @@ -429,433 +430,435 @@ var regionData = []regionInfo{ // 493 elements 77: {region: 0x4252, code: 0x31, from: 0xf2d61, to: 0xf5e4d}, 78: {region: 0x4253, code: 0x32, from: 0xf5cb9, to: 0x0}, 79: {region: 0x4254, code: 0x33, from: 0xf6c90, to: 0x0}, - 80: {region: 0x4254, code: 0x7c, from: 0xee621, to: 0x0}, + 80: {region: 0x4254, code: 0x7d, from: 0xee621, to: 0x0}, 81: {region: 0x4255, code: 0x34, from: 0xf40e1, to: 0xf8ad2}, - 82: {region: 0x4256, code: 0xbd, from: 0xee2c7, to: 0x0}, + 82: {region: 0x4256, code: 0xbe, from: 0xee2c7, to: 0x0}, 83: {region: 0x4257, code: 0x35, from: 0xf7117, to: 0x0}, - 84: {region: 0x4257, code: 0x123, from: 0xf524e, to: 0xf7117}, + 84: {region: 0x4257, code: 0x125, from: 0xf524e, to: 0xf7117}, 85: {region: 0x4259, code: 0x37, from: 0xfc0e1, to: 0x0}, 86: {region: 0x4259, code: 0x38, from: 0xfa021, to: 0xfc221}, 87: {region: 0x4259, code: 0x36, from: 0xf9501, to: 0xfa19f}, - 88: {region: 0x4259, code: 0xd2, from: 0xf8f99, to: 0xf9568}, - 89: {region: 0x4259, code: 0xe5, from: 0xf5221, to: 0xf8f99}, + 88: {region: 0x4259, code: 0xd3, from: 0xf8f99, to: 0xf9568}, + 89: {region: 0x4259, code: 0xe7, from: 0xf5221, to: 0xf8f99}, 90: {region: 0x425a, code: 0x39, from: 0xf6c21, to: 0x0}, 91: {region: 0x4341, code: 0x3a, from: 0xe8421, to: 0x0}, 92: {region: 0x4343, code: 0x13, from: 0xf5c4e, to: 0x0}, 93: {region: 0x4344, code: 0x3b, from: 0xf9ce1, to: 0x0}, - 94: {region: 0x4344, code: 0x126, from: 0xf9361, to: 0xf9ce1}, - 95: {region: 0x4344, code: 0x127, from: 0xf675b, to: 0xf9361}, - 96: {region: 0x4346, code: 0x107, from: 0xf9221, to: 0x0}, - 97: {region: 0x4347, code: 0x107, from: 0xf9221, to: 0x0}, + 94: {region: 0x4344, code: 0x128, from: 0xf9361, to: 0xf9ce1}, + 95: {region: 0x4344, code: 0x129, from: 0xf675b, to: 0xf9361}, + 96: {region: 0x4346, code: 0x109, from: 0xf9221, to: 0x0}, + 97: {region: 0x4347, code: 0x109, from: 0xf9221, to: 0x0}, 98: {region: 0x4348, code: 0x3d, from: 0xe0e71, to: 0x0}, 99: {region: 0x4348, code: 0x803c, from: 0x0, to: 0x0}, 100: {region: 0x4348, code: 0x803e, from: 0x0, to: 0x0}, - 101: {region: 0x4349, code: 0x113, from: 0xf4d84, to: 0x0}, - 102: {region: 0x434b, code: 0xbf, from: 0xf5eea, to: 0x0}, + 101: {region: 0x4349, code: 0x115, from: 0xf4d84, to: 0x0}, + 102: {region: 0x434b, code: 0xc0, from: 0xf5eea, to: 0x0}, 103: {region: 0x434c, code: 0x41, from: 0xf6f3d, to: 0x0}, 104: {region: 0x434c, code: 0x3f, from: 0xf5021, to: 0xf6f3d}, 105: {region: 0x434c, code: 0x8040, from: 0x0, to: 0x0}, - 106: {region: 0x434d, code: 0x107, from: 0xf6a81, to: 0x0}, - 107: {region: 0x434e, code: 0x43, from: 0xf4261, to: 0x0}, - 108: {region: 0x434e, code: 0x8042, from: 0xf7621, to: 0xf9d9f}, - 109: {region: 0x434f, code: 0x44, from: 0xee221, to: 0x0}, - 110: {region: 0x434f, code: 0x8045, from: 0x0, to: 0x0}, - 111: {region: 0x4350, code: 0x811b, from: 0x0, to: 0x0}, - 112: {region: 0x4352, code: 0x46, from: 0xed15a, to: 0x0}, - 113: {region: 0x4353, code: 0x47, from: 0xfa4af, to: 0xfacc3}, - 114: {region: 0x4353, code: 0x5d, from: 0xfa644, to: 0xfacc3}, - 115: {region: 0x4353, code: 0x11f, from: 0xf9438, to: 0xfa4af}, - 116: {region: 0x4355, code: 0x4a, from: 0xe8621, to: 0x0}, - 117: {region: 0x4355, code: 0x49, from: 0xf9421, to: 0x0}, - 118: {region: 0x4355, code: 0xfa, from: 0xed621, to: 0xf4e21}, - 119: {region: 0x4356, code: 0x4b, from: 0xef421, to: 0x0}, - 120: {region: 0x4356, code: 0xca, from: 0xeeeb6, to: 0xf6ee5}, - 121: {region: 0x4357, code: 0x8, from: 0xfb54a, to: 0x0}, - 122: {region: 0x4358, code: 0x13, from: 0xf5c4e, to: 0x0}, - 123: {region: 0x4359, code: 0x5d, from: 0xfb021, to: 0x0}, - 124: {region: 0x4359, code: 0x4c, from: 0xef52a, to: 0xfb03f}, - 125: {region: 0x435a, code: 0x4d, from: 0xf9221, to: 0x0}, - 126: {region: 0x435a, code: 0x48, from: 0xf42c1, to: 0xf9261}, - 127: {region: 0x4444, code: 0x4e, from: 0xf38f4, to: 0xf8d42}, - 128: {region: 0x4445, code: 0x5d, from: 0xf9e21, to: 0x0}, - 129: {region: 0x4445, code: 0x4f, from: 0xf38d4, to: 0xfa45c}, - 130: {region: 0x4447, code: 0xfa, from: 0xf5b68, to: 0x0}, - 131: {region: 0x444a, code: 0x50, from: 0xf72db, to: 0x0}, - 132: {region: 0x444b, code: 0x51, from: 0xea2bb, to: 0x0}, - 133: {region: 0x444d, code: 0x10e, from: 0xf5b46, to: 0x0}, - 134: {region: 0x444f, code: 0x52, from: 0xf3741, to: 0x0}, - 135: {region: 0x444f, code: 0xfa, from: 0xee2d5, to: 0xf3741}, - 136: {region: 0x445a, code: 0x53, from: 0xf5881, to: 0x0}, - 137: {region: 0x4541, code: 0x5d, from: 0xf9e21, to: 0x0}, - 138: {region: 0x4543, code: 0xfa, from: 0xfa142, to: 0x0}, - 139: {region: 0x4543, code: 0x54, from: 0xeb881, to: 0xfa142}, - 140: {region: 0x4543, code: 0x8055, from: 0xf92b7, to: 0xfa029}, - 141: {region: 0x4545, code: 0x5d, from: 0xfb621, to: 0x0}, - 142: {region: 0x4545, code: 0x56, from: 0xf90d5, to: 0xfb59f}, - 143: {region: 0x4545, code: 0xe5, from: 0xf5221, to: 0xf90d4}, - 144: {region: 0x4547, code: 0x57, from: 0xebb6e, to: 0x0}, - 145: {region: 0x4548, code: 0x9d, from: 0xf705a, to: 0x0}, - 146: {region: 0x4552, code: 0x58, from: 0xf9b68, to: 0x0}, - 147: {region: 0x4552, code: 0x5c, from: 0xf92b8, to: 0xf9b68}, - 148: {region: 0x4553, code: 0x5d, from: 0xf9e21, to: 0x0}, - 149: {region: 0x4553, code: 0x5b, from: 0xe9953, to: 0xfa45c}, - 150: {region: 0x4553, code: 0x8059, from: 0xf7421, to: 0xf7b9f}, - 151: {region: 0x4553, code: 0x805a, from: 0xf6e21, to: 0xf959f}, - 152: {region: 0x4554, code: 0x5c, from: 0xf712f, to: 0x0}, - 153: {region: 0x4555, code: 0x5d, from: 0xf9e21, to: 0x0}, - 154: {region: 0x4555, code: 0x8110, from: 0xf7621, to: 0xf9d9f}, - 155: {region: 0x4649, code: 0x5d, from: 0xf9e21, to: 0x0}, - 156: {region: 0x4649, code: 0x5e, from: 0xf5621, to: 0xfa45c}, - 157: {region: 0x464a, code: 0x5f, from: 0xf622d, to: 0x0}, - 158: {region: 0x464b, code: 0x60, from: 0xeda21, to: 0x0}, - 159: {region: 0x464d, code: 0xfa, from: 0xf3021, to: 0x0}, - 160: {region: 0x464d, code: 0x84, from: 0xef543, to: 0xf3021}, - 161: {region: 0x464f, code: 0x51, from: 0xf3821, to: 0x0}, - 162: {region: 0x4652, code: 0x5d, from: 0xf9e21, to: 0x0}, - 163: {region: 0x4652, code: 0x61, from: 0xf5021, to: 0xfa451}, - 164: {region: 0x4741, code: 0x107, from: 0xf9221, to: 0x0}, - 165: {region: 0x4742, code: 0x62, from: 0xd3cfb, to: 0x0}, - 166: {region: 0x4744, code: 0x10e, from: 0xf5e5b, to: 0x0}, - 167: {region: 0x4745, code: 0x64, from: 0xf9737, to: 0x0}, - 168: {region: 0x4745, code: 0x63, from: 0xf9285, to: 0xf9739}, - 169: {region: 0x4745, code: 0xd2, from: 0xf8f99, to: 0xf92cb}, - 170: {region: 0x4745, code: 0xe5, from: 0xf5221, to: 0xf8f99}, - 171: {region: 0x4746, code: 0x5d, from: 0xf9e21, to: 0x0}, - 172: {region: 0x4746, code: 0x61, from: 0xf5021, to: 0xfa451}, - 173: {region: 0x4747, code: 0x62, from: 0xe4c21, to: 0x0}, - 174: {region: 0x4748, code: 0x66, from: 0xfaee3, to: 0x0}, - 175: {region: 0x4748, code: 0x65, from: 0xf7669, to: 0xfaf9f}, - 176: {region: 0x4749, code: 0x67, from: 0xd6221, to: 0x0}, - 177: {region: 0x474c, code: 0x51, from: 0xea2bb, to: 0x0}, - 178: {region: 0x474d, code: 0x68, from: 0xf66e1, to: 0x0}, - 179: {region: 0x474e, code: 0x69, from: 0xf8426, to: 0x0}, - 180: {region: 0x474e, code: 0x6a, from: 0xf6942, to: 0xf8426}, - 181: {region: 0x4750, code: 0x5d, from: 0xf9e21, to: 0x0}, - 182: {region: 0x4750, code: 0x61, from: 0xf5021, to: 0xfa451}, - 183: {region: 0x4751, code: 0x107, from: 0xf9221, to: 0x0}, - 184: {region: 0x4751, code: 0x6b, from: 0xf6ee7, to: 0xf84c1}, - 185: {region: 0x4752, code: 0x5d, from: 0xfa221, to: 0x0}, - 186: {region: 0x4752, code: 0x6c, from: 0xf44a1, to: 0xfa45c}, - 187: {region: 0x4753, code: 0x62, from: 0xee821, to: 0x0}, - 188: {region: 0x4754, code: 0x6d, from: 0xf0abb, to: 0x0}, - 189: {region: 0x4755, code: 0xfa, from: 0xf3115, to: 0x0}, - 190: {region: 0x4757, code: 0x113, from: 0xf9a7f, to: 0x0}, - 191: {region: 0x4757, code: 0x6f, from: 0xf705c, to: 0xf9a7f}, - 192: {region: 0x4757, code: 0x6e, from: 0xef421, to: 0xf705c}, - 193: {region: 0x4759, code: 0x70, from: 0xf5cba, to: 0x0}, - 194: {region: 0x484b, code: 0x71, from: 0xece42, to: 0x0}, - 195: {region: 0x484d, code: 0x13, from: 0xf5e50, to: 0x0}, - 196: {region: 0x484e, code: 0x72, from: 0xf0c83, to: 0x0}, - 197: {region: 0x4852, code: 0x74, from: 0xf94be, to: 0x0}, - 198: {region: 0x4852, code: 0x73, from: 0xf8f97, to: 0xf9621}, - 199: {region: 0x4852, code: 0x120, from: 0xf8c21, to: 0xf8f97}, - 200: {region: 0x4852, code: 0x11e, from: 0xf5c21, to: 0xf8c21}, - 201: {region: 0x4854, code: 0x75, from: 0xea11a, to: 0x0}, - 202: {region: 0x4854, code: 0xfa, from: 0xef621, to: 0x0}, - 203: {region: 0x4855, code: 0x76, from: 0xf34f7, to: 0x0}, - 204: {region: 0x4943, code: 0x5d, from: 0xf9e21, to: 0x0}, - 205: {region: 0x4944, code: 0x77, from: 0xf5b8d, to: 0x0}, - 206: {region: 0x4945, code: 0x5d, from: 0xf9e21, to: 0x0}, - 207: {region: 0x4945, code: 0x78, from: 0xf0421, to: 0xfa449}, - 208: {region: 0x4945, code: 0x62, from: 0xe1021, to: 0xf0421}, - 209: {region: 0x494c, code: 0x7b, from: 0xf8324, to: 0x0}, - 210: {region: 0x494c, code: 0x7a, from: 0xf7856, to: 0xf8324}, - 211: {region: 0x494c, code: 0x79, from: 0xf3910, to: 0xf7856}, - 212: {region: 0x494d, code: 0x62, from: 0xe6023, to: 0x0}, - 213: {region: 0x494e, code: 0x7c, from: 0xe5711, to: 0x0}, - 214: {region: 0x494f, code: 0xfa, from: 0xf5b68, to: 0x0}, - 215: {region: 0x4951, code: 0x7d, from: 0xf1693, to: 0x0}, - 216: {region: 0x4951, code: 0x57, from: 0xf016b, to: 0xf1693}, - 217: {region: 0x4951, code: 0x7c, from: 0xf016b, to: 0xf1693}, - 218: {region: 0x4952, code: 0x7e, from: 0xf18ad, to: 0x0}, - 219: {region: 0x4953, code: 0x80, from: 0xf7a21, to: 0x0}, - 220: {region: 0x4953, code: 0x7f, from: 0xefd81, to: 0xf7a21}, - 221: {region: 0x4953, code: 0x51, from: 0xea2bb, to: 0xefd81}, - 222: {region: 0x4954, code: 0x5d, from: 0xf9e21, to: 0x0}, - 223: {region: 0x4954, code: 0x81, from: 0xe8d18, to: 0xfa45c}, - 224: {region: 0x4a45, code: 0x62, from: 0xe5a21, to: 0x0}, - 225: {region: 0x4a4d, code: 0x82, from: 0xf6328, to: 0x0}, - 226: {region: 0x4a4f, code: 0x83, from: 0xf3ce1, to: 0x0}, - 227: {region: 0x4a50, code: 0x84, from: 0xe9ec1, to: 0x0}, - 228: {region: 0x4b45, code: 0x85, from: 0xf5d2e, to: 0x0}, - 229: {region: 0x4b47, code: 0x86, from: 0xf92aa, to: 0x0}, - 230: {region: 0x4b47, code: 0xd2, from: 0xf8f99, to: 0xf92aa}, - 231: {region: 0x4b47, code: 0xe5, from: 0xf5221, to: 0xf8f99}, - 232: {region: 0x4b48, code: 0x87, from: 0xf7874, to: 0x0}, - 233: {region: 0x4b49, code: 0x13, from: 0xf5c4e, to: 0x0}, - 234: {region: 0x4b4d, code: 0x88, from: 0xf6ee6, to: 0x0}, - 235: {region: 0x4b4e, code: 0x10e, from: 0xf5b46, to: 0x0}, - 236: {region: 0x4b50, code: 0x89, from: 0xf4e91, to: 0x0}, - 237: {region: 0x4b52, code: 0x8c, from: 0xf54ca, to: 0x0}, - 238: {region: 0x4b52, code: 0x8a, from: 0xf424f, to: 0xf54ca}, - 239: {region: 0x4b52, code: 0x8b, from: 0xf330f, to: 0xf424f}, - 240: {region: 0x4b57, code: 0x8d, from: 0xf5281, to: 0x0}, - 241: {region: 0x4b59, code: 0x8e, from: 0xf6621, to: 0x0}, - 242: {region: 0x4b59, code: 0x82, from: 0xf6328, to: 0xf6621}, - 243: {region: 0x4b5a, code: 0x8f, from: 0xf9365, to: 0x0}, - 244: {region: 0x4c41, code: 0x90, from: 0xf778a, to: 0x0}, - 245: {region: 0x4c42, code: 0x91, from: 0xf3842, to: 0x0}, - 246: {region: 0x4c43, code: 0x10e, from: 0xf5b46, to: 0x0}, - 247: {region: 0x4c49, code: 0x3d, from: 0xf0241, to: 0x0}, - 248: {region: 0x4c4b, code: 0x92, from: 0xf74b6, to: 0x0}, - 249: {region: 0x4c52, code: 0x93, from: 0xf3021, to: 0x0}, - 250: {region: 0x4c53, code: 0x123, from: 0xf524e, to: 0x0}, - 251: {region: 0x4c53, code: 0x94, from: 0xf7836, to: 0x0}, - 252: {region: 0x4c54, code: 0x5d, from: 0xfbe21, to: 0x0}, - 253: {region: 0x4c54, code: 0x95, from: 0xf92d9, to: 0xfbd9f}, - 254: {region: 0x4c54, code: 0x96, from: 0xf9141, to: 0xf92d9}, - 255: {region: 0x4c54, code: 0xe5, from: 0xf5221, to: 0xf9141}, - 256: {region: 0x4c55, code: 0x5d, from: 0xf9e21, to: 0x0}, - 257: {region: 0x4c55, code: 0x98, from: 0xf3124, to: 0xfa45c}, - 258: {region: 0x4c55, code: 0x8097, from: 0xf6421, to: 0xf8c65}, - 259: {region: 0x4c55, code: 0x8099, from: 0xf6421, to: 0xf8c65}, - 260: {region: 0x4c56, code: 0x5d, from: 0xfbc21, to: 0x0}, - 261: {region: 0x4c56, code: 0x9a, from: 0xf92dc, to: 0xfbb9f}, - 262: {region: 0x4c56, code: 0x9b, from: 0xf90a7, to: 0xf9351}, - 263: {region: 0x4c56, code: 0xe5, from: 0xf5221, to: 0xf90f4}, - 264: {region: 0x4c59, code: 0x9c, from: 0xf6721, to: 0x0}, - 265: {region: 0x4d41, code: 0x9d, from: 0xf4f51, to: 0x0}, - 266: {region: 0x4d41, code: 0x9e, from: 0xeb221, to: 0xf4f51}, - 267: {region: 0x4d43, code: 0x5d, from: 0xf9e21, to: 0x0}, - 268: {region: 0x4d43, code: 0x61, from: 0xf5021, to: 0xfa451}, - 269: {region: 0x4d43, code: 0x9f, from: 0xf5021, to: 0xfa451}, - 270: {region: 0x4d44, code: 0xa1, from: 0xf937d, to: 0x0}, - 271: {region: 0x4d44, code: 0xa0, from: 0xf90c1, to: 0xf937d}, - 272: {region: 0x4d45, code: 0x5d, from: 0xfa421, to: 0x0}, - 273: {region: 0x4d45, code: 0x4f, from: 0xf9f42, to: 0xfa4af}, - 274: {region: 0x4d45, code: 0x11f, from: 0xf9438, to: 0xfa4af}, - 275: {region: 0x4d46, code: 0x5d, from: 0xf9e21, to: 0x0}, - 276: {region: 0x4d46, code: 0x61, from: 0xf5021, to: 0xfa451}, - 277: {region: 0x4d47, code: 0xa2, from: 0xf7f61, to: 0x0}, - 278: {region: 0x4d47, code: 0xa3, from: 0xf56e1, to: 0xfa99f}, - 279: {region: 0x4d48, code: 0xfa, from: 0xf3021, to: 0x0}, - 280: {region: 0x4d4b, code: 0xa4, from: 0xf92b4, to: 0x0}, - 281: {region: 0x4d4b, code: 0xa5, from: 0xf909a, to: 0xf92b4}, - 282: {region: 0x4d4c, code: 0x113, from: 0xf80c1, to: 0x0}, - 283: {region: 0x4d4c, code: 0xa6, from: 0xf54e2, to: 0xf811f}, - 284: {region: 0x4d4c, code: 0x113, from: 0xf4d78, to: 0xf54e2}, - 285: {region: 0x4d4d, code: 0xa7, from: 0xf8ad2, to: 0x0}, - 286: {region: 0x4d4d, code: 0x34, from: 0xf40e1, to: 0xf8ad2}, - 287: {region: 0x4d4e, code: 0xa8, from: 0xef661, to: 0x0}, - 288: {region: 0x4d4f, code: 0xa9, from: 0xeda21, to: 0x0}, - 289: {region: 0x4d50, code: 0xfa, from: 0xf3021, to: 0x0}, - 290: {region: 0x4d51, code: 0x5d, from: 0xf9e21, to: 0x0}, - 291: {region: 0x4d51, code: 0x61, from: 0xf5021, to: 0xfa451}, - 292: {region: 0x4d52, code: 0xaa, from: 0xf6add, to: 0x0}, - 293: {region: 0x4d52, code: 0x113, from: 0xf4d7c, to: 0xf6add}, - 294: {region: 0x4d53, code: 0x10e, from: 0xf5e5b, to: 0x0}, - 295: {region: 0x4d54, code: 0x5d, from: 0xfb021, to: 0x0}, - 296: {region: 0x4d54, code: 0xab, from: 0xf60c7, to: 0xfb03f}, - 297: {region: 0x4d54, code: 0xac, from: 0xef50d, to: 0xf60c7}, - 298: {region: 0x4d55, code: 0xad, from: 0xf1c81, to: 0x0}, - 299: {region: 0x4d56, code: 0xaf, from: 0xf7ae1, to: 0x0}, - 300: {region: 0x4d57, code: 0xb0, from: 0xf664f, to: 0x0}, - 301: {region: 0x4d58, code: 0xb1, from: 0xf9221, to: 0x0}, - 302: {region: 0x4d58, code: 0xb2, from: 0xe3c21, to: 0xf919f}, - 303: {region: 0x4d58, code: 0x80b3, from: 0x0, to: 0x0}, - 304: {region: 0x4d59, code: 0xb4, from: 0xf5730, to: 0x0}, - 305: {region: 0x4d5a, code: 0xb7, from: 0xface1, to: 0x0}, - 306: {region: 0x4d5a, code: 0xb6, from: 0xf78d0, to: 0xfad9f}, - 307: {region: 0x4d5a, code: 0xb5, from: 0xf6ed9, to: 0xf78d0}, - 308: {region: 0x4e41, code: 0xb8, from: 0xf9221, to: 0x0}, - 309: {region: 0x4e41, code: 0x123, from: 0xf524e, to: 0x0}, - 310: {region: 0x4e43, code: 0x115, from: 0xf8221, to: 0x0}, - 311: {region: 0x4e45, code: 0x113, from: 0xf4d93, to: 0x0}, - 312: {region: 0x4e46, code: 0x13, from: 0xf5c4e, to: 0x0}, - 313: {region: 0x4e47, code: 0xb9, from: 0xf6a21, to: 0x0}, - 314: {region: 0x4e49, code: 0xbb, from: 0xf8e9e, to: 0x0}, - 315: {region: 0x4e49, code: 0xba, from: 0xf884f, to: 0xf8e9e}, - 316: {region: 0x4e4c, code: 0x5d, from: 0xf9e21, to: 0x0}, - 317: {region: 0x4e4c, code: 0xbc, from: 0xe2a21, to: 0xfa45c}, - 318: {region: 0x4e4f, code: 0xbd, from: 0xee2c7, to: 0x0}, - 319: {region: 0x4e4f, code: 0xda, from: 0xea2bb, to: 0xee2c7}, - 320: {region: 0x4e50, code: 0xbe, from: 0xf1a21, to: 0x0}, - 321: {region: 0x4e50, code: 0x7c, from: 0xe9c21, to: 0xf5d51}, - 322: {region: 0x4e52, code: 0x13, from: 0xf5c4e, to: 0x0}, - 323: {region: 0x4e55, code: 0xbf, from: 0xf5eea, to: 0x0}, - 324: {region: 0x4e5a, code: 0xbf, from: 0xf5eea, to: 0x0}, - 325: {region: 0x4f4d, code: 0xc0, from: 0xf696b, to: 0x0}, - 326: {region: 0x5041, code: 0xc1, from: 0xedf64, to: 0x0}, - 327: {region: 0x5041, code: 0xfa, from: 0xedf72, to: 0x0}, - 328: {region: 0x5045, code: 0xc3, from: 0xf8ee1, to: 0x0}, - 329: {region: 0x5045, code: 0xc2, from: 0xf8241, to: 0xf8ee1}, - 330: {region: 0x5045, code: 0xc4, from: 0xe8e4e, to: 0xf8241}, - 331: {region: 0x5046, code: 0x115, from: 0xf339a, to: 0x0}, - 332: {region: 0x5047, code: 0xc5, from: 0xf6f30, to: 0x0}, - 333: {region: 0x5047, code: 0x13, from: 0xf5c4e, to: 0xf6f30}, - 334: {region: 0x5048, code: 0xc6, from: 0xf34e4, to: 0x0}, - 335: {region: 0x504b, code: 0xc7, from: 0xf3881, to: 0x0}, - 336: {region: 0x504b, code: 0x7c, from: 0xe5711, to: 0xf370f}, - 337: {region: 0x504c, code: 0xc8, from: 0xf9621, to: 0x0}, - 338: {region: 0x504c, code: 0xc9, from: 0xf3d5c, to: 0xf959f}, - 339: {region: 0x504d, code: 0x5d, from: 0xf9e21, to: 0x0}, - 340: {region: 0x504d, code: 0x61, from: 0xf6995, to: 0xfa451}, - 341: {region: 0x504e, code: 0xbf, from: 0xf622d, to: 0x0}, - 342: {region: 0x5052, code: 0xfa, from: 0xed58a, to: 0x0}, - 343: {region: 0x5052, code: 0x5b, from: 0xe1021, to: 0xed58a}, - 344: {region: 0x5053, code: 0x7b, from: 0xf8324, to: 0x0}, - 345: {region: 0x5053, code: 0x83, from: 0xf984c, to: 0x0}, - 346: {region: 0x5053, code: 0x79, from: 0xf5ec1, to: 0xf7856}, - 347: {region: 0x5053, code: 0x83, from: 0xf3ce1, to: 0xf5ec1}, - 348: {region: 0x5054, code: 0x5d, from: 0xf9e21, to: 0x0}, - 349: {region: 0x5054, code: 0xca, from: 0xeeeb6, to: 0xfa45c}, - 350: {region: 0x5057, code: 0xfa, from: 0xf3021, to: 0x0}, - 351: {region: 0x5059, code: 0xcb, from: 0xf2f61, to: 0x0}, - 352: {region: 0x5141, code: 0xcc, from: 0xf6ab3, to: 0x0}, - 353: {region: 0x5245, code: 0x5d, from: 0xf9e21, to: 0x0}, - 354: {region: 0x5245, code: 0x61, from: 0xf6e21, to: 0xfa451}, - 355: {region: 0x524f, code: 0xcf, from: 0xfaae1, to: 0x0}, - 356: {region: 0x524f, code: 0xce, from: 0xf403c, to: 0xfad9f}, - 357: {region: 0x5253, code: 0xd0, from: 0xfad59, to: 0x0}, - 358: {region: 0x5253, code: 0x47, from: 0xfa4af, to: 0xfad59}, - 359: {region: 0x5253, code: 0x11f, from: 0xf9438, to: 0xfa4af}, - 360: {region: 0x5255, code: 0xd1, from: 0xf9e21, to: 0x0}, - 361: {region: 0x5255, code: 0xd2, from: 0xf8f99, to: 0xf9d9f}, - 362: {region: 0x5257, code: 0xd3, from: 0xf58b3, to: 0x0}, - 363: {region: 0x5341, code: 0xd4, from: 0xf4156, to: 0x0}, - 364: {region: 0x5342, code: 0xd5, from: 0xf7358, to: 0x0}, - 365: {region: 0x5342, code: 0x13, from: 0xf5c4e, to: 0xf74de}, - 366: {region: 0x5343, code: 0xd6, from: 0xedf61, to: 0x0}, - 367: {region: 0x5344, code: 0xd8, from: 0xfae2a, to: 0x0}, - 368: {region: 0x5344, code: 0xd7, from: 0xf90c8, to: 0xfaede}, - 369: {region: 0x5344, code: 0xd9, from: 0xf4a88, to: 0xf9cc1}, - 370: {region: 0x5344, code: 0x57, from: 0xec233, to: 0xf4c21}, - 371: {region: 0x5344, code: 0x62, from: 0xec233, to: 0xf4c21}, - 372: {region: 0x5345, code: 0xda, from: 0xea2bb, to: 0x0}, - 373: {region: 0x5347, code: 0xdb, from: 0xf5ecc, to: 0x0}, - 374: {region: 0x5347, code: 0xb4, from: 0xf5730, to: 0xf5ecc}, - 375: {region: 0x5348, code: 0xdc, from: 0xefa4f, to: 0x0}, - 376: {region: 0x5349, code: 0x5d, from: 0xfae21, to: 0x0}, - 377: {region: 0x5349, code: 0xdd, from: 0xf9147, to: 0xfae2e}, - 378: {region: 0x534a, code: 0xbd, from: 0xee2c7, to: 0x0}, - 379: {region: 0x534b, code: 0x5d, from: 0xfb221, to: 0x0}, - 380: {region: 0x534b, code: 0xde, from: 0xf919f, to: 0xfb221}, - 381: {region: 0x534b, code: 0x48, from: 0xf42c1, to: 0xf919f}, - 382: {region: 0x534c, code: 0xdf, from: 0xf5904, to: 0x0}, - 383: {region: 0x534c, code: 0x62, from: 0xe217e, to: 0xf5c44}, - 384: {region: 0x534d, code: 0x5d, from: 0xf9e21, to: 0x0}, - 385: {region: 0x534d, code: 0x81, from: 0xe9397, to: 0xfa25c}, - 386: {region: 0x534e, code: 0x113, from: 0xf4e84, to: 0x0}, - 387: {region: 0x534f, code: 0xe0, from: 0xf50e1, to: 0x0}, - 388: {region: 0x5352, code: 0xe1, from: 0xfa821, to: 0x0}, - 389: {region: 0x5352, code: 0xe2, from: 0xf28aa, to: 0xfa79f}, - 390: {region: 0x5352, code: 0xbc, from: 0xe2f74, to: 0xf28aa}, - 391: {region: 0x5353, code: 0xe3, from: 0xfb6f2, to: 0x0}, - 392: {region: 0x5353, code: 0xd8, from: 0xfae2a, to: 0xfb721}, - 393: {region: 0x5354, code: 0xe4, from: 0xf7328, to: 0x0}, - 394: {region: 0x5355, code: 0xe5, from: 0xf5221, to: 0xf8f99}, - 395: {region: 0x5356, code: 0xfa, from: 0xfa221, to: 0x0}, - 396: {region: 0x5356, code: 0xe6, from: 0xeff6b, to: 0xfa221}, - 397: {region: 0x5358, code: 0x8, from: 0xfb54a, to: 0x0}, - 398: {region: 0x5359, code: 0xe7, from: 0xf3821, to: 0x0}, - 399: {region: 0x535a, code: 0xe8, from: 0xf6d26, to: 0x0}, - 400: {region: 0x5441, code: 0x62, from: 0xf242c, to: 0x0}, - 401: {region: 0x5443, code: 0xfa, from: 0xf6328, to: 0x0}, - 402: {region: 0x5444, code: 0x107, from: 0xf9221, to: 0x0}, - 403: {region: 0x5446, code: 0x5d, from: 0xf9e21, to: 0x0}, - 404: {region: 0x5446, code: 0x61, from: 0xf4e21, to: 0xfa451}, - 405: {region: 0x5447, code: 0x113, from: 0xf4d7c, to: 0x0}, - 406: {region: 0x5448, code: 0xe9, from: 0xf108f, to: 0x0}, - 407: {region: 0x544a, code: 0xeb, from: 0xfa15a, to: 0x0}, - 408: {region: 0x544a, code: 0xea, from: 0xf96aa, to: 0xfa159}, - 409: {region: 0x544a, code: 0xd2, from: 0xf8f99, to: 0xf96aa}, - 410: {region: 0x544b, code: 0xbf, from: 0xf5eea, to: 0x0}, - 411: {region: 0x544c, code: 0xfa, from: 0xf9f54, to: 0x0}, - 412: {region: 0x544c, code: 0xf0, from: 0xf4e22, to: 0xfa4b4}, - 413: {region: 0x544c, code: 0x77, from: 0xf6f87, to: 0xfa4b4}, - 414: {region: 0x544d, code: 0xed, from: 0xfb221, to: 0x0}, - 415: {region: 0x544d, code: 0xec, from: 0xf9361, to: 0xfb221}, - 416: {region: 0x544d, code: 0xd2, from: 0xf8f99, to: 0xf9361}, - 417: {region: 0x544d, code: 0xe5, from: 0xf5221, to: 0xf8f99}, - 418: {region: 0x544e, code: 0xee, from: 0xf4d61, to: 0x0}, - 419: {region: 0x544f, code: 0xef, from: 0xf5c4e, to: 0x0}, - 420: {region: 0x5450, code: 0xf0, from: 0xf4e22, to: 0xfa4b4}, - 421: {region: 0x5450, code: 0x77, from: 0xf6f87, to: 0xfa4b4}, - 422: {region: 0x5452, code: 0xf2, from: 0xfaa21, to: 0x0}, - 423: {region: 0x5452, code: 0xf1, from: 0xf0561, to: 0xfab9f}, - 424: {region: 0x5454, code: 0xf3, from: 0xf5821, to: 0x0}, - 425: {region: 0x5456, code: 0x13, from: 0xf5c4e, to: 0x0}, - 426: {region: 0x5457, code: 0xf4, from: 0xf3acf, to: 0x0}, - 427: {region: 0x545a, code: 0xf5, from: 0xf5cce, to: 0x0}, - 428: {region: 0x5541, code: 0xf6, from: 0xf9922, to: 0x0}, - 429: {region: 0x5541, code: 0xf7, from: 0xf916d, to: 0xf9351}, - 430: {region: 0x5541, code: 0xd2, from: 0xf8f99, to: 0xf916d}, - 431: {region: 0x5541, code: 0xe5, from: 0xf5221, to: 0xf8f99}, - 432: {region: 0x5547, code: 0xf9, from: 0xf86af, to: 0x0}, - 433: {region: 0x5547, code: 0xf8, from: 0xf5d0f, to: 0xf86af}, - 434: {region: 0x554d, code: 0xfa, from: 0xf3021, to: 0x0}, - 435: {region: 0x5553, code: 0xfa, from: 0xe0021, to: 0x0}, - 436: {region: 0x5553, code: 0x80fb, from: 0x0, to: 0x0}, - 437: {region: 0x5553, code: 0x80fc, from: 0x0, to: 0xfbc61}, - 438: {region: 0x5559, code: 0xff, from: 0xf9261, to: 0x0}, - 439: {region: 0x5559, code: 0xfe, from: 0xf6ee1, to: 0xf9261}, - 440: {region: 0x5559, code: 0x80fd, from: 0x0, to: 0x0}, - 441: {region: 0x555a, code: 0x100, from: 0xf94e1, to: 0x0}, - 442: {region: 0x5641, code: 0x5d, from: 0xf9e21, to: 0x0}, - 443: {region: 0x5641, code: 0x81, from: 0xe9d53, to: 0xfa45c}, - 444: {region: 0x5643, code: 0x10e, from: 0xf5b46, to: 0x0}, - 445: {region: 0x5645, code: 0x102, from: 0xfb021, to: 0x0}, - 446: {region: 0x5645, code: 0x101, from: 0xe9eab, to: 0xfb0de}, - 447: {region: 0x5647, code: 0xfa, from: 0xe5221, to: 0x0}, - 448: {region: 0x5647, code: 0x62, from: 0xe5221, to: 0xf4e21}, - 449: {region: 0x5649, code: 0xfa, from: 0xe5a21, to: 0x0}, - 450: {region: 0x564e, code: 0x103, from: 0xf832e, to: 0x0}, - 451: {region: 0x564e, code: 0x104, from: 0xf74a3, to: 0xf832e}, - 452: {region: 0x5655, code: 0x105, from: 0xf7a21, to: 0x0}, - 453: {region: 0x5746, code: 0x115, from: 0xf52fe, to: 0x0}, - 454: {region: 0x5753, code: 0x106, from: 0xf5eea, to: 0x0}, - 455: {region: 0x584b, code: 0x5d, from: 0xfa421, to: 0x0}, - 456: {region: 0x584b, code: 0x4f, from: 0xf9f21, to: 0xfa469}, - 457: {region: 0x584b, code: 0x11f, from: 0xf9438, to: 0xf9f3e}, - 458: {region: 0x5944, code: 0x11c, from: 0xf5a81, to: 0xf9821}, - 459: {region: 0x5945, code: 0x11d, from: 0xf8cb6, to: 0x0}, - 460: {region: 0x5954, code: 0x5d, from: 0xf9e21, to: 0x0}, - 461: {region: 0x5954, code: 0x61, from: 0xf7057, to: 0xfa451}, - 462: {region: 0x5954, code: 0x88, from: 0xf6e21, to: 0xf7057}, - 463: {region: 0x5955, code: 0x11f, from: 0xf9438, to: 0xfa4af}, - 464: {region: 0x5955, code: 0x120, from: 0xf8c21, to: 0xf90f8}, - 465: {region: 0x5955, code: 0x11e, from: 0xf5c21, to: 0xf8c21}, - 466: {region: 0x5a41, code: 0x123, from: 0xf524e, to: 0x0}, - 467: {region: 0x5a41, code: 0x8122, from: 0xf8321, to: 0xf966d}, - 468: {region: 0x5a4d, code: 0x125, from: 0xfba21, to: 0x0}, - 469: {region: 0x5a4d, code: 0x124, from: 0xf6030, to: 0xfba21}, - 470: {region: 0x5a52, code: 0x126, from: 0xf9361, to: 0xf9cff}, - 471: {region: 0x5a52, code: 0x127, from: 0xf675b, to: 0xf9361}, - 472: {region: 0x5a57, code: 0xfa, from: 0xfb28c, to: 0x0}, - 473: {region: 0x5a57, code: 0x129, from: 0xfb242, to: 0xfb28c}, - 474: {region: 0x5a57, code: 0x12a, from: 0xfb101, to: 0xfb242}, - 475: {region: 0x5a57, code: 0x128, from: 0xf7892, to: 0xfb101}, - 476: {region: 0x5a57, code: 0xcd, from: 0xf6451, to: 0xf7892}, - 477: {region: 0x5a5a, code: 0x8108, from: 0x0, to: 0x0}, - 478: {region: 0x5a5a, code: 0x8109, from: 0x0, to: 0x0}, + 106: {region: 0x434d, code: 0x109, from: 0xf6a81, to: 0x0}, + 107: {region: 0x434e, code: 0x44, from: 0xf4261, to: 0x0}, + 108: {region: 0x434e, code: 0x8043, from: 0xf7621, to: 0xf9d9f}, + 109: {region: 0x434e, code: 0x8042, from: 0xfb4f3, to: 0x0}, + 110: {region: 0x434f, code: 0x45, from: 0xee221, to: 0x0}, + 111: {region: 0x434f, code: 0x8046, from: 0x0, to: 0x0}, + 112: {region: 0x4350, code: 0x811d, from: 0x0, to: 0x0}, + 113: {region: 0x4352, code: 0x47, from: 0xed15a, to: 0x0}, + 114: {region: 0x4353, code: 0x48, from: 0xfa4af, to: 0xfacc3}, + 115: {region: 0x4353, code: 0x5e, from: 0xfa644, to: 0xfacc3}, + 116: {region: 0x4353, code: 0x121, from: 0xf9438, to: 0xfa4af}, + 117: {region: 0x4355, code: 0x4b, from: 0xe8621, to: 0x0}, + 118: {region: 0x4355, code: 0x4a, from: 0xf9421, to: 0x0}, + 119: {region: 0x4355, code: 0xfc, from: 0xed621, to: 0xf4e21}, + 120: {region: 0x4356, code: 0x4c, from: 0xef421, to: 0x0}, + 121: {region: 0x4356, code: 0xcb, from: 0xeeeb6, to: 0xf6ee5}, + 122: {region: 0x4357, code: 0x8, from: 0xfb54a, to: 0x0}, + 123: {region: 0x4358, code: 0x13, from: 0xf5c4e, to: 0x0}, + 124: {region: 0x4359, code: 0x5e, from: 0xfb021, to: 0x0}, + 125: {region: 0x4359, code: 0x4d, from: 0xef52a, to: 0xfb03f}, + 126: {region: 0x435a, code: 0x4e, from: 0xf9221, to: 0x0}, + 127: {region: 0x435a, code: 0x49, from: 0xf42c1, to: 0xf9261}, + 128: {region: 0x4444, code: 0x4f, from: 0xf38f4, to: 0xf8d42}, + 129: {region: 0x4445, code: 0x5e, from: 0xf9e21, to: 0x0}, + 130: {region: 0x4445, code: 0x50, from: 0xf38d4, to: 0xfa45c}, + 131: {region: 0x4447, code: 0xfc, from: 0xf5b68, to: 0x0}, + 132: {region: 0x444a, code: 0x51, from: 0xf72db, to: 0x0}, + 133: {region: 0x444b, code: 0x52, from: 0xea2bb, to: 0x0}, + 134: {region: 0x444d, code: 0x110, from: 0xf5b46, to: 0x0}, + 135: {region: 0x444f, code: 0x53, from: 0xf3741, to: 0x0}, + 136: {region: 0x444f, code: 0xfc, from: 0xee2d5, to: 0xf3741}, + 137: {region: 0x445a, code: 0x54, from: 0xf5881, to: 0x0}, + 138: {region: 0x4541, code: 0x5e, from: 0xf9e21, to: 0x0}, + 139: {region: 0x4543, code: 0xfc, from: 0xfa142, to: 0x0}, + 140: {region: 0x4543, code: 0x55, from: 0xeb881, to: 0xfa142}, + 141: {region: 0x4543, code: 0x8056, from: 0xf92b7, to: 0xfa029}, + 142: {region: 0x4545, code: 0x5e, from: 0xfb621, to: 0x0}, + 143: {region: 0x4545, code: 0x57, from: 0xf90d5, to: 0xfb59f}, + 144: {region: 0x4545, code: 0xe7, from: 0xf5221, to: 0xf90d4}, + 145: {region: 0x4547, code: 0x58, from: 0xebb6e, to: 0x0}, + 146: {region: 0x4548, code: 0x9e, from: 0xf705a, to: 0x0}, + 147: {region: 0x4552, code: 0x59, from: 0xf9b68, to: 0x0}, + 148: {region: 0x4552, code: 0x5d, from: 0xf92b8, to: 0xf9b68}, + 149: {region: 0x4553, code: 0x5e, from: 0xf9e21, to: 0x0}, + 150: {region: 0x4553, code: 0x5c, from: 0xe9953, to: 0xfa45c}, + 151: {region: 0x4553, code: 0x805a, from: 0xf7421, to: 0xf7b9f}, + 152: {region: 0x4553, code: 0x805b, from: 0xf6e21, to: 0xf959f}, + 153: {region: 0x4554, code: 0x5d, from: 0xf712f, to: 0x0}, + 154: {region: 0x4555, code: 0x5e, from: 0xf9e21, to: 0x0}, + 155: {region: 0x4555, code: 0x8112, from: 0xf7621, to: 0xf9d9f}, + 156: {region: 0x4649, code: 0x5e, from: 0xf9e21, to: 0x0}, + 157: {region: 0x4649, code: 0x5f, from: 0xf5621, to: 0xfa45c}, + 158: {region: 0x464a, code: 0x60, from: 0xf622d, to: 0x0}, + 159: {region: 0x464b, code: 0x61, from: 0xeda21, to: 0x0}, + 160: {region: 0x464d, code: 0xfc, from: 0xf3021, to: 0x0}, + 161: {region: 0x464d, code: 0x85, from: 0xef543, to: 0xf3021}, + 162: {region: 0x464f, code: 0x52, from: 0xf3821, to: 0x0}, + 163: {region: 0x4652, code: 0x5e, from: 0xf9e21, to: 0x0}, + 164: {region: 0x4652, code: 0x62, from: 0xf5021, to: 0xfa451}, + 165: {region: 0x4741, code: 0x109, from: 0xf9221, to: 0x0}, + 166: {region: 0x4742, code: 0x63, from: 0xd3cfb, to: 0x0}, + 167: {region: 0x4744, code: 0x110, from: 0xf5e5b, to: 0x0}, + 168: {region: 0x4745, code: 0x65, from: 0xf9737, to: 0x0}, + 169: {region: 0x4745, code: 0x64, from: 0xf9285, to: 0xf9739}, + 170: {region: 0x4745, code: 0xd3, from: 0xf8f99, to: 0xf92cb}, + 171: {region: 0x4745, code: 0xe7, from: 0xf5221, to: 0xf8f99}, + 172: {region: 0x4746, code: 0x5e, from: 0xf9e21, to: 0x0}, + 173: {region: 0x4746, code: 0x62, from: 0xf5021, to: 0xfa451}, + 174: {region: 0x4747, code: 0x63, from: 0xe4c21, to: 0x0}, + 175: {region: 0x4748, code: 0x67, from: 0xfaee3, to: 0x0}, + 176: {region: 0x4748, code: 0x66, from: 0xf7669, to: 0xfaf9f}, + 177: {region: 0x4749, code: 0x68, from: 0xd6221, to: 0x0}, + 178: {region: 0x474c, code: 0x52, from: 0xea2bb, to: 0x0}, + 179: {region: 0x474d, code: 0x69, from: 0xf66e1, to: 0x0}, + 180: {region: 0x474e, code: 0x6a, from: 0xf8426, to: 0x0}, + 181: {region: 0x474e, code: 0x6b, from: 0xf6942, to: 0xf8426}, + 182: {region: 0x4750, code: 0x5e, from: 0xf9e21, to: 0x0}, + 183: {region: 0x4750, code: 0x62, from: 0xf5021, to: 0xfa451}, + 184: {region: 0x4751, code: 0x109, from: 0xf9221, to: 0x0}, + 185: {region: 0x4751, code: 0x6c, from: 0xf6ee7, to: 0xf84c1}, + 186: {region: 0x4752, code: 0x5e, from: 0xfa221, to: 0x0}, + 187: {region: 0x4752, code: 0x6d, from: 0xf44a1, to: 0xfa45c}, + 188: {region: 0x4753, code: 0x63, from: 0xee821, to: 0x0}, + 189: {region: 0x4754, code: 0x6e, from: 0xf0abb, to: 0x0}, + 190: {region: 0x4755, code: 0xfc, from: 0xf3115, to: 0x0}, + 191: {region: 0x4757, code: 0x115, from: 0xf9a7f, to: 0x0}, + 192: {region: 0x4757, code: 0x70, from: 0xf705c, to: 0xf9a7f}, + 193: {region: 0x4757, code: 0x6f, from: 0xef421, to: 0xf705c}, + 194: {region: 0x4759, code: 0x71, from: 0xf5cba, to: 0x0}, + 195: {region: 0x484b, code: 0x72, from: 0xece42, to: 0x0}, + 196: {region: 0x484d, code: 0x13, from: 0xf5e50, to: 0x0}, + 197: {region: 0x484e, code: 0x73, from: 0xf0c83, to: 0x0}, + 198: {region: 0x4852, code: 0x75, from: 0xf94be, to: 0x0}, + 199: {region: 0x4852, code: 0x74, from: 0xf8f97, to: 0xf9621}, + 200: {region: 0x4852, code: 0x122, from: 0xf8c21, to: 0xf8f97}, + 201: {region: 0x4852, code: 0x120, from: 0xf5c21, to: 0xf8c21}, + 202: {region: 0x4854, code: 0x76, from: 0xea11a, to: 0x0}, + 203: {region: 0x4854, code: 0xfc, from: 0xef621, to: 0x0}, + 204: {region: 0x4855, code: 0x77, from: 0xf34f7, to: 0x0}, + 205: {region: 0x4943, code: 0x5e, from: 0xf9e21, to: 0x0}, + 206: {region: 0x4944, code: 0x78, from: 0xf5b8d, to: 0x0}, + 207: {region: 0x4945, code: 0x5e, from: 0xf9e21, to: 0x0}, + 208: {region: 0x4945, code: 0x79, from: 0xf0421, to: 0xfa449}, + 209: {region: 0x4945, code: 0x63, from: 0xe1021, to: 0xf0421}, + 210: {region: 0x494c, code: 0x7c, from: 0xf8324, to: 0x0}, + 211: {region: 0x494c, code: 0x7b, from: 0xf7856, to: 0xf8324}, + 212: {region: 0x494c, code: 0x7a, from: 0xf3910, to: 0xf7856}, + 213: {region: 0x494d, code: 0x63, from: 0xe6023, to: 0x0}, + 214: {region: 0x494e, code: 0x7d, from: 0xe5711, to: 0x0}, + 215: {region: 0x494f, code: 0xfc, from: 0xf5b68, to: 0x0}, + 216: {region: 0x4951, code: 0x7e, from: 0xf1693, to: 0x0}, + 217: {region: 0x4951, code: 0x58, from: 0xf016b, to: 0xf1693}, + 218: {region: 0x4951, code: 0x7d, from: 0xf016b, to: 0xf1693}, + 219: {region: 0x4952, code: 0x7f, from: 0xf18ad, to: 0x0}, + 220: {region: 0x4953, code: 0x81, from: 0xf7a21, to: 0x0}, + 221: {region: 0x4953, code: 0x80, from: 0xefd81, to: 0xf7a21}, + 222: {region: 0x4953, code: 0x52, from: 0xea2bb, to: 0xefd81}, + 223: {region: 0x4954, code: 0x5e, from: 0xf9e21, to: 0x0}, + 224: {region: 0x4954, code: 0x82, from: 0xe8d18, to: 0xfa45c}, + 225: {region: 0x4a45, code: 0x63, from: 0xe5a21, to: 0x0}, + 226: {region: 0x4a4d, code: 0x83, from: 0xf6328, to: 0x0}, + 227: {region: 0x4a4f, code: 0x84, from: 0xf3ce1, to: 0x0}, + 228: {region: 0x4a50, code: 0x85, from: 0xe9ec1, to: 0x0}, + 229: {region: 0x4b45, code: 0x86, from: 0xf5d2e, to: 0x0}, + 230: {region: 0x4b47, code: 0x87, from: 0xf92aa, to: 0x0}, + 231: {region: 0x4b47, code: 0xd3, from: 0xf8f99, to: 0xf92aa}, + 232: {region: 0x4b47, code: 0xe7, from: 0xf5221, to: 0xf8f99}, + 233: {region: 0x4b48, code: 0x88, from: 0xf7874, to: 0x0}, + 234: {region: 0x4b49, code: 0x13, from: 0xf5c4e, to: 0x0}, + 235: {region: 0x4b4d, code: 0x89, from: 0xf6ee6, to: 0x0}, + 236: {region: 0x4b4e, code: 0x110, from: 0xf5b46, to: 0x0}, + 237: {region: 0x4b50, code: 0x8a, from: 0xf4e91, to: 0x0}, + 238: {region: 0x4b52, code: 0x8d, from: 0xf54ca, to: 0x0}, + 239: {region: 0x4b52, code: 0x8b, from: 0xf424f, to: 0xf54ca}, + 240: {region: 0x4b52, code: 0x8c, from: 0xf330f, to: 0xf424f}, + 241: {region: 0x4b57, code: 0x8e, from: 0xf5281, to: 0x0}, + 242: {region: 0x4b59, code: 0x8f, from: 0xf6621, to: 0x0}, + 243: {region: 0x4b59, code: 0x83, from: 0xf6328, to: 0xf6621}, + 244: {region: 0x4b5a, code: 0x90, from: 0xf9365, to: 0x0}, + 245: {region: 0x4c41, code: 0x91, from: 0xf778a, to: 0x0}, + 246: {region: 0x4c42, code: 0x92, from: 0xf3842, to: 0x0}, + 247: {region: 0x4c43, code: 0x110, from: 0xf5b46, to: 0x0}, + 248: {region: 0x4c49, code: 0x3d, from: 0xf0241, to: 0x0}, + 249: {region: 0x4c4b, code: 0x93, from: 0xf74b6, to: 0x0}, + 250: {region: 0x4c52, code: 0x94, from: 0xf3021, to: 0x0}, + 251: {region: 0x4c53, code: 0x125, from: 0xf524e, to: 0x0}, + 252: {region: 0x4c53, code: 0x95, from: 0xf7836, to: 0x0}, + 253: {region: 0x4c54, code: 0x5e, from: 0xfbe21, to: 0x0}, + 254: {region: 0x4c54, code: 0x96, from: 0xf92d9, to: 0xfbd9f}, + 255: {region: 0x4c54, code: 0x97, from: 0xf9141, to: 0xf92d9}, + 256: {region: 0x4c54, code: 0xe7, from: 0xf5221, to: 0xf9141}, + 257: {region: 0x4c55, code: 0x5e, from: 0xf9e21, to: 0x0}, + 258: {region: 0x4c55, code: 0x99, from: 0xf3124, to: 0xfa45c}, + 259: {region: 0x4c55, code: 0x8098, from: 0xf6421, to: 0xf8c65}, + 260: {region: 0x4c55, code: 0x809a, from: 0xf6421, to: 0xf8c65}, + 261: {region: 0x4c56, code: 0x5e, from: 0xfbc21, to: 0x0}, + 262: {region: 0x4c56, code: 0x9b, from: 0xf92dc, to: 0xfbb9f}, + 263: {region: 0x4c56, code: 0x9c, from: 0xf90a7, to: 0xf9351}, + 264: {region: 0x4c56, code: 0xe7, from: 0xf5221, to: 0xf90f4}, + 265: {region: 0x4c59, code: 0x9d, from: 0xf6721, to: 0x0}, + 266: {region: 0x4d41, code: 0x9e, from: 0xf4f51, to: 0x0}, + 267: {region: 0x4d41, code: 0x9f, from: 0xeb221, to: 0xf4f51}, + 268: {region: 0x4d43, code: 0x5e, from: 0xf9e21, to: 0x0}, + 269: {region: 0x4d43, code: 0x62, from: 0xf5021, to: 0xfa451}, + 270: {region: 0x4d43, code: 0xa0, from: 0xf5021, to: 0xfa451}, + 271: {region: 0x4d44, code: 0xa2, from: 0xf937d, to: 0x0}, + 272: {region: 0x4d44, code: 0xa1, from: 0xf90c1, to: 0xf937d}, + 273: {region: 0x4d45, code: 0x5e, from: 0xfa421, to: 0x0}, + 274: {region: 0x4d45, code: 0x50, from: 0xf9f42, to: 0xfa4af}, + 275: {region: 0x4d45, code: 0x121, from: 0xf9438, to: 0xfa4af}, + 276: {region: 0x4d46, code: 0x5e, from: 0xf9e21, to: 0x0}, + 277: {region: 0x4d46, code: 0x62, from: 0xf5021, to: 0xfa451}, + 278: {region: 0x4d47, code: 0xa3, from: 0xf7f61, to: 0x0}, + 279: {region: 0x4d47, code: 0xa4, from: 0xf56e1, to: 0xfa99f}, + 280: {region: 0x4d48, code: 0xfc, from: 0xf3021, to: 0x0}, + 281: {region: 0x4d4b, code: 0xa5, from: 0xf92b4, to: 0x0}, + 282: {region: 0x4d4b, code: 0xa6, from: 0xf909a, to: 0xf92b4}, + 283: {region: 0x4d4c, code: 0x115, from: 0xf80c1, to: 0x0}, + 284: {region: 0x4d4c, code: 0xa7, from: 0xf54e2, to: 0xf811f}, + 285: {region: 0x4d4c, code: 0x115, from: 0xf4d78, to: 0xf54e2}, + 286: {region: 0x4d4d, code: 0xa8, from: 0xf8ad2, to: 0x0}, + 287: {region: 0x4d4d, code: 0x34, from: 0xf40e1, to: 0xf8ad2}, + 288: {region: 0x4d4e, code: 0xa9, from: 0xef661, to: 0x0}, + 289: {region: 0x4d4f, code: 0xaa, from: 0xeda21, to: 0x0}, + 290: {region: 0x4d50, code: 0xfc, from: 0xf3021, to: 0x0}, + 291: {region: 0x4d51, code: 0x5e, from: 0xf9e21, to: 0x0}, + 292: {region: 0x4d51, code: 0x62, from: 0xf5021, to: 0xfa451}, + 293: {region: 0x4d52, code: 0xab, from: 0xf6add, to: 0x0}, + 294: {region: 0x4d52, code: 0x115, from: 0xf4d7c, to: 0xf6add}, + 295: {region: 0x4d53, code: 0x110, from: 0xf5e5b, to: 0x0}, + 296: {region: 0x4d54, code: 0x5e, from: 0xfb021, to: 0x0}, + 297: {region: 0x4d54, code: 0xac, from: 0xf60c7, to: 0xfb03f}, + 298: {region: 0x4d54, code: 0xad, from: 0xef50d, to: 0xf60c7}, + 299: {region: 0x4d55, code: 0xae, from: 0xf1c81, to: 0x0}, + 300: {region: 0x4d56, code: 0xb0, from: 0xf7ae1, to: 0x0}, + 301: {region: 0x4d57, code: 0xb1, from: 0xf664f, to: 0x0}, + 302: {region: 0x4d58, code: 0xb2, from: 0xf9221, to: 0x0}, + 303: {region: 0x4d58, code: 0xb3, from: 0xe3c21, to: 0xf919f}, + 304: {region: 0x4d58, code: 0x80b4, from: 0x0, to: 0x0}, + 305: {region: 0x4d59, code: 0xb5, from: 0xf5730, to: 0x0}, + 306: {region: 0x4d5a, code: 0xb8, from: 0xface1, to: 0x0}, + 307: {region: 0x4d5a, code: 0xb7, from: 0xf78d0, to: 0xfad9f}, + 308: {region: 0x4d5a, code: 0xb6, from: 0xf6ed9, to: 0xf78d0}, + 309: {region: 0x4e41, code: 0xb9, from: 0xf9221, to: 0x0}, + 310: {region: 0x4e41, code: 0x125, from: 0xf524e, to: 0x0}, + 311: {region: 0x4e43, code: 0x117, from: 0xf8221, to: 0x0}, + 312: {region: 0x4e45, code: 0x115, from: 0xf4d93, to: 0x0}, + 313: {region: 0x4e46, code: 0x13, from: 0xf5c4e, to: 0x0}, + 314: {region: 0x4e47, code: 0xba, from: 0xf6a21, to: 0x0}, + 315: {region: 0x4e49, code: 0xbc, from: 0xf8e9e, to: 0x0}, + 316: {region: 0x4e49, code: 0xbb, from: 0xf884f, to: 0xf8e9e}, + 317: {region: 0x4e4c, code: 0x5e, from: 0xf9e21, to: 0x0}, + 318: {region: 0x4e4c, code: 0xbd, from: 0xe2a21, to: 0xfa45c}, + 319: {region: 0x4e4f, code: 0xbe, from: 0xee2c7, to: 0x0}, + 320: {region: 0x4e4f, code: 0xdb, from: 0xea2bb, to: 0xee2c7}, + 321: {region: 0x4e50, code: 0xbf, from: 0xf1a21, to: 0x0}, + 322: {region: 0x4e50, code: 0x7d, from: 0xe9c21, to: 0xf5d51}, + 323: {region: 0x4e52, code: 0x13, from: 0xf5c4e, to: 0x0}, + 324: {region: 0x4e55, code: 0xc0, from: 0xf5eea, to: 0x0}, + 325: {region: 0x4e5a, code: 0xc0, from: 0xf5eea, to: 0x0}, + 326: {region: 0x4f4d, code: 0xc1, from: 0xf696b, to: 0x0}, + 327: {region: 0x5041, code: 0xc2, from: 0xedf64, to: 0x0}, + 328: {region: 0x5041, code: 0xfc, from: 0xedf72, to: 0x0}, + 329: {region: 0x5045, code: 0xc4, from: 0xf8ee1, to: 0x0}, + 330: {region: 0x5045, code: 0xc3, from: 0xf8241, to: 0xf8ee1}, + 331: {region: 0x5045, code: 0xc5, from: 0xe8e4e, to: 0xf8241}, + 332: {region: 0x5046, code: 0x117, from: 0xf339a, to: 0x0}, + 333: {region: 0x5047, code: 0xc6, from: 0xf6f30, to: 0x0}, + 334: {region: 0x5047, code: 0x13, from: 0xf5c4e, to: 0xf6f30}, + 335: {region: 0x5048, code: 0xc7, from: 0xf34e4, to: 0x0}, + 336: {region: 0x504b, code: 0xc8, from: 0xf3881, to: 0x0}, + 337: {region: 0x504b, code: 0x7d, from: 0xe5711, to: 0xf370f}, + 338: {region: 0x504c, code: 0xc9, from: 0xf9621, to: 0x0}, + 339: {region: 0x504c, code: 0xca, from: 0xf3d5c, to: 0xf959f}, + 340: {region: 0x504d, code: 0x5e, from: 0xf9e21, to: 0x0}, + 341: {region: 0x504d, code: 0x62, from: 0xf6995, to: 0xfa451}, + 342: {region: 0x504e, code: 0xc0, from: 0xf622d, to: 0x0}, + 343: {region: 0x5052, code: 0xfc, from: 0xed58a, to: 0x0}, + 344: {region: 0x5052, code: 0x5c, from: 0xe1021, to: 0xed58a}, + 345: {region: 0x5053, code: 0x7c, from: 0xf8324, to: 0x0}, + 346: {region: 0x5053, code: 0x84, from: 0xf984c, to: 0x0}, + 347: {region: 0x5053, code: 0x7a, from: 0xf5ec1, to: 0xf7856}, + 348: {region: 0x5053, code: 0x84, from: 0xf3ce1, to: 0xf5ec1}, + 349: {region: 0x5054, code: 0x5e, from: 0xf9e21, to: 0x0}, + 350: {region: 0x5054, code: 0xcb, from: 0xeeeb6, to: 0xfa45c}, + 351: {region: 0x5057, code: 0xfc, from: 0xf3021, to: 0x0}, + 352: {region: 0x5059, code: 0xcc, from: 0xf2f61, to: 0x0}, + 353: {region: 0x5141, code: 0xcd, from: 0xf6ab3, to: 0x0}, + 354: {region: 0x5245, code: 0x5e, from: 0xf9e21, to: 0x0}, + 355: {region: 0x5245, code: 0x62, from: 0xf6e21, to: 0xfa451}, + 356: {region: 0x524f, code: 0xd0, from: 0xfaae1, to: 0x0}, + 357: {region: 0x524f, code: 0xcf, from: 0xf403c, to: 0xfad9f}, + 358: {region: 0x5253, code: 0xd1, from: 0xfad59, to: 0x0}, + 359: {region: 0x5253, code: 0x48, from: 0xfa4af, to: 0xfad59}, + 360: {region: 0x5253, code: 0x121, from: 0xf9438, to: 0xfa4af}, + 361: {region: 0x5255, code: 0xd2, from: 0xf9e21, to: 0x0}, + 362: {region: 0x5255, code: 0xd3, from: 0xf8f99, to: 0xf9d9f}, + 363: {region: 0x5257, code: 0xd4, from: 0xf58b3, to: 0x0}, + 364: {region: 0x5341, code: 0xd5, from: 0xf4156, to: 0x0}, + 365: {region: 0x5342, code: 0xd6, from: 0xf7358, to: 0x0}, + 366: {region: 0x5342, code: 0x13, from: 0xf5c4e, to: 0xf74de}, + 367: {region: 0x5343, code: 0xd7, from: 0xedf61, to: 0x0}, + 368: {region: 0x5344, code: 0xd9, from: 0xfae2a, to: 0x0}, + 369: {region: 0x5344, code: 0xd8, from: 0xf90c8, to: 0xfaede}, + 370: {region: 0x5344, code: 0xda, from: 0xf4a88, to: 0xf9cc1}, + 371: {region: 0x5344, code: 0x58, from: 0xec233, to: 0xf4c21}, + 372: {region: 0x5344, code: 0x63, from: 0xec233, to: 0xf4c21}, + 373: {region: 0x5345, code: 0xdb, from: 0xea2bb, to: 0x0}, + 374: {region: 0x5347, code: 0xdc, from: 0xf5ecc, to: 0x0}, + 375: {region: 0x5347, code: 0xb5, from: 0xf5730, to: 0xf5ecc}, + 376: {region: 0x5348, code: 0xdd, from: 0xefa4f, to: 0x0}, + 377: {region: 0x5349, code: 0x5e, from: 0xfae21, to: 0x0}, + 378: {region: 0x5349, code: 0xde, from: 0xf9147, to: 0xfae2e}, + 379: {region: 0x534a, code: 0xbe, from: 0xee2c7, to: 0x0}, + 380: {region: 0x534b, code: 0x5e, from: 0xfb221, to: 0x0}, + 381: {region: 0x534b, code: 0xdf, from: 0xf919f, to: 0xfb221}, + 382: {region: 0x534b, code: 0x49, from: 0xf42c1, to: 0xf919f}, + 383: {region: 0x534c, code: 0xe0, from: 0xf5904, to: 0x0}, + 384: {region: 0x534c, code: 0x63, from: 0xe217e, to: 0xf5c44}, + 385: {region: 0x534d, code: 0x5e, from: 0xf9e21, to: 0x0}, + 386: {region: 0x534d, code: 0x82, from: 0xe9397, to: 0xfa25c}, + 387: {region: 0x534e, code: 0x115, from: 0xf4e84, to: 0x0}, + 388: {region: 0x534f, code: 0xe1, from: 0xf50e1, to: 0x0}, + 389: {region: 0x5352, code: 0xe2, from: 0xfa821, to: 0x0}, + 390: {region: 0x5352, code: 0xe3, from: 0xf28aa, to: 0xfa79f}, + 391: {region: 0x5352, code: 0xbd, from: 0xe2f74, to: 0xf28aa}, + 392: {region: 0x5353, code: 0xe4, from: 0xfb6f2, to: 0x0}, + 393: {region: 0x5353, code: 0xd9, from: 0xfae2a, to: 0xfb721}, + 394: {region: 0x5354, code: 0xe6, from: 0xfc421, to: 0x0}, + 395: {region: 0x5354, code: 0xe5, from: 0xf7328, to: 0xfc39f}, + 396: {region: 0x5355, code: 0xe7, from: 0xf5221, to: 0xf8f99}, + 397: {region: 0x5356, code: 0xfc, from: 0xfa221, to: 0x0}, + 398: {region: 0x5356, code: 0xe8, from: 0xeff6b, to: 0xfa221}, + 399: {region: 0x5358, code: 0x8, from: 0xfb54a, to: 0x0}, + 400: {region: 0x5359, code: 0xe9, from: 0xf3821, to: 0x0}, + 401: {region: 0x535a, code: 0xea, from: 0xf6d26, to: 0x0}, + 402: {region: 0x5441, code: 0x63, from: 0xf242c, to: 0x0}, + 403: {region: 0x5443, code: 0xfc, from: 0xf6328, to: 0x0}, + 404: {region: 0x5444, code: 0x109, from: 0xf9221, to: 0x0}, + 405: {region: 0x5446, code: 0x5e, from: 0xf9e21, to: 0x0}, + 406: {region: 0x5446, code: 0x62, from: 0xf4e21, to: 0xfa451}, + 407: {region: 0x5447, code: 0x115, from: 0xf4d7c, to: 0x0}, + 408: {region: 0x5448, code: 0xeb, from: 0xf108f, to: 0x0}, + 409: {region: 0x544a, code: 0xed, from: 0xfa15a, to: 0x0}, + 410: {region: 0x544a, code: 0xec, from: 0xf96aa, to: 0xfa159}, + 411: {region: 0x544a, code: 0xd3, from: 0xf8f99, to: 0xf96aa}, + 412: {region: 0x544b, code: 0xc0, from: 0xf5eea, to: 0x0}, + 413: {region: 0x544c, code: 0xfc, from: 0xf9f54, to: 0x0}, + 414: {region: 0x544c, code: 0xf2, from: 0xf4e22, to: 0xfa4b4}, + 415: {region: 0x544c, code: 0x78, from: 0xf6f87, to: 0xfa4b4}, + 416: {region: 0x544d, code: 0xef, from: 0xfb221, to: 0x0}, + 417: {region: 0x544d, code: 0xee, from: 0xf9361, to: 0xfb221}, + 418: {region: 0x544d, code: 0xd3, from: 0xf8f99, to: 0xf9361}, + 419: {region: 0x544d, code: 0xe7, from: 0xf5221, to: 0xf8f99}, + 420: {region: 0x544e, code: 0xf0, from: 0xf4d61, to: 0x0}, + 421: {region: 0x544f, code: 0xf1, from: 0xf5c4e, to: 0x0}, + 422: {region: 0x5450, code: 0xf2, from: 0xf4e22, to: 0xfa4b4}, + 423: {region: 0x5450, code: 0x78, from: 0xf6f87, to: 0xfa4b4}, + 424: {region: 0x5452, code: 0xf4, from: 0xfaa21, to: 0x0}, + 425: {region: 0x5452, code: 0xf3, from: 0xf0561, to: 0xfab9f}, + 426: {region: 0x5454, code: 0xf5, from: 0xf5821, to: 0x0}, + 427: {region: 0x5456, code: 0x13, from: 0xf5c4e, to: 0x0}, + 428: {region: 0x5457, code: 0xf6, from: 0xf3acf, to: 0x0}, + 429: {region: 0x545a, code: 0xf7, from: 0xf5cce, to: 0x0}, + 430: {region: 0x5541, code: 0xf8, from: 0xf9922, to: 0x0}, + 431: {region: 0x5541, code: 0xf9, from: 0xf916d, to: 0xf9351}, + 432: {region: 0x5541, code: 0xd3, from: 0xf8f99, to: 0xf916d}, + 433: {region: 0x5541, code: 0xe7, from: 0xf5221, to: 0xf8f99}, + 434: {region: 0x5547, code: 0xfb, from: 0xf86af, to: 0x0}, + 435: {region: 0x5547, code: 0xfa, from: 0xf5d0f, to: 0xf86af}, + 436: {region: 0x554d, code: 0xfc, from: 0xf3021, to: 0x0}, + 437: {region: 0x5553, code: 0xfc, from: 0xe0021, to: 0x0}, + 438: {region: 0x5553, code: 0x80fd, from: 0x0, to: 0x0}, + 439: {region: 0x5553, code: 0x80fe, from: 0x0, to: 0xfbc61}, + 440: {region: 0x5559, code: 0x101, from: 0xf9261, to: 0x0}, + 441: {region: 0x5559, code: 0x100, from: 0xf6ee1, to: 0xf9261}, + 442: {region: 0x5559, code: 0x80ff, from: 0x0, to: 0x0}, + 443: {region: 0x555a, code: 0x102, from: 0xf94e1, to: 0x0}, + 444: {region: 0x5641, code: 0x5e, from: 0xf9e21, to: 0x0}, + 445: {region: 0x5641, code: 0x82, from: 0xe9d53, to: 0xfa45c}, + 446: {region: 0x5643, code: 0x110, from: 0xf5b46, to: 0x0}, + 447: {region: 0x5645, code: 0x104, from: 0xfb021, to: 0x0}, + 448: {region: 0x5645, code: 0x103, from: 0xe9eab, to: 0xfb0de}, + 449: {region: 0x5647, code: 0xfc, from: 0xe5221, to: 0x0}, + 450: {region: 0x5647, code: 0x63, from: 0xe5221, to: 0xf4e21}, + 451: {region: 0x5649, code: 0xfc, from: 0xe5a21, to: 0x0}, + 452: {region: 0x564e, code: 0x105, from: 0xf832e, to: 0x0}, + 453: {region: 0x564e, code: 0x106, from: 0xf74a3, to: 0xf832e}, + 454: {region: 0x5655, code: 0x107, from: 0xf7a21, to: 0x0}, + 455: {region: 0x5746, code: 0x117, from: 0xf52fe, to: 0x0}, + 456: {region: 0x5753, code: 0x108, from: 0xf5eea, to: 0x0}, + 457: {region: 0x584b, code: 0x5e, from: 0xfa421, to: 0x0}, + 458: {region: 0x584b, code: 0x50, from: 0xf9f21, to: 0xfa469}, + 459: {region: 0x584b, code: 0x121, from: 0xf9438, to: 0xf9f3e}, + 460: {region: 0x5944, code: 0x11e, from: 0xf5a81, to: 0xf9821}, + 461: {region: 0x5945, code: 0x11f, from: 0xf8cb6, to: 0x0}, + 462: {region: 0x5954, code: 0x5e, from: 0xf9e21, to: 0x0}, + 463: {region: 0x5954, code: 0x62, from: 0xf7057, to: 0xfa451}, + 464: {region: 0x5954, code: 0x89, from: 0xf6e21, to: 0xf7057}, + 465: {region: 0x5955, code: 0x121, from: 0xf9438, to: 0xfa4af}, + 466: {region: 0x5955, code: 0x122, from: 0xf8c21, to: 0xf90f8}, + 467: {region: 0x5955, code: 0x120, from: 0xf5c21, to: 0xf8c21}, + 468: {region: 0x5a41, code: 0x125, from: 0xf524e, to: 0x0}, + 469: {region: 0x5a41, code: 0x8124, from: 0xf8321, to: 0xf966d}, + 470: {region: 0x5a4d, code: 0x127, from: 0xfba21, to: 0x0}, + 471: {region: 0x5a4d, code: 0x126, from: 0xf6030, to: 0xfba21}, + 472: {region: 0x5a52, code: 0x128, from: 0xf9361, to: 0xf9cff}, + 473: {region: 0x5a52, code: 0x129, from: 0xf675b, to: 0xf9361}, + 474: {region: 0x5a57, code: 0xfc, from: 0xfb28c, to: 0x0}, + 475: {region: 0x5a57, code: 0x12b, from: 0xfb242, to: 0xfb28c}, + 476: {region: 0x5a57, code: 0x12c, from: 0xfb101, to: 0xfb242}, + 477: {region: 0x5a57, code: 0x12a, from: 0xf7892, to: 0xfb101}, + 478: {region: 0x5a57, code: 0xce, from: 0xf6451, to: 0xf7892}, 479: {region: 0x5a5a, code: 0x810a, from: 0x0, to: 0x0}, 480: {region: 0x5a5a, code: 0x810b, from: 0x0, to: 0x0}, 481: {region: 0x5a5a, code: 0x810c, from: 0x0, to: 0x0}, 482: {region: 0x5a5a, code: 0x810d, from: 0x0, to: 0x0}, - 483: {region: 0x5a5a, code: 0x810f, from: 0x0, to: 0x0}, - 484: {region: 0x5a5a, code: 0x8111, from: 0xf1421, to: 0xfa681}, - 485: {region: 0x5a5a, code: 0x8112, from: 0x0, to: 0xfbb7e}, - 486: {region: 0x5a5a, code: 0x8114, from: 0x0, to: 0x0}, - 487: {region: 0x5a5a, code: 0x8116, from: 0x0, to: 0x0}, - 488: {region: 0x5a5a, code: 0x8117, from: 0x0, to: 0xf9f7e}, + 483: {region: 0x5a5a, code: 0x810e, from: 0x0, to: 0x0}, + 484: {region: 0x5a5a, code: 0x810f, from: 0x0, to: 0x0}, + 485: {region: 0x5a5a, code: 0x8111, from: 0x0, to: 0x0}, + 486: {region: 0x5a5a, code: 0x8113, from: 0xf1421, to: 0xfa681}, + 487: {region: 0x5a5a, code: 0x8114, from: 0x0, to: 0xfbb7e}, + 488: {region: 0x5a5a, code: 0x8116, from: 0x0, to: 0x0}, 489: {region: 0x5a5a, code: 0x8118, from: 0x0, to: 0x0}, - 490: {region: 0x5a5a, code: 0x8119, from: 0x0, to: 0x0}, + 490: {region: 0x5a5a, code: 0x8119, from: 0x0, to: 0xf9f7e}, 491: {region: 0x5a5a, code: 0x811a, from: 0x0, to: 0x0}, 492: {region: 0x5a5a, code: 0x811b, from: 0x0, to: 0x0}, -} // Size: 5940 bytes + 493: {region: 0x5a5a, code: 0x811c, from: 0x0, to: 0x0}, + 494: {region: 0x5a5a, code: 0x811d, from: 0x0, to: 0x0}, +} // Size: 5964 bytes // symbols holds symbol data of the form , where n is the length of // the symbol string str. -const symbols string = "" + // Size: 1396 bytes +const symbols string = "" + // Size: 1445 bytes "\x00\x02Kz\x01$\x02A$\x02KM\x03৳\x02Bs\x02R$\x01P\x03р.\x03CA$\x04CN¥" + "\x02¥\x03₡\x03Kč\x02kr\x03E£\x03₧\x03€\x02£\x03₾\x02FG\x01Q\x03HK$\x01L" + "\x02kn\x02Ft\x02Rp\x03₪\x03₹\x04JP¥\x03៛\x02CF\x03₩\x03₸\x03₭\x03L£\x02R" + "s\x02Lt\x02Ls\x02Ar\x01K\x03₮\x03MX$\x02RM\x03₦\x02C$\x03NZ$\x03₱\x03zł" + "\x03₲\x03lei\x03₽\x02RF\x02Db\x03฿\x02T$\x03₺\x03NT$\x03₴\x03US$\x03₫" + - "\x04FCFA\x03EC$\x03CFA\x04CFPF\x01R\x02ZK\x05GH₵\x03AU$\x06ብር\x03***\x09" + - "د.إ.\u200f\x03AR$\x03BB$\x09د.ب.\u200f\x03BM$\x03BN$\x03BS$\x03BZ$\x03C" + - "L$\x03CO$\x03CU$\x03DO$\x09د.ج.\u200f\x09ج.م.\u200f\x03FJ$\x04UK£\x03GY$" + - "\x09د.ع.\u200f\x06ر.إ.\x03JM$\x09د.أ.\u200f\x0cف.ج.ق.\u200f\x09د.ك." + + "\x04FCFA\x03EC$\x03CFA\x04CFPF\x01R\x02ZK\x03leu\x05GH₵\x03AU$\x16የቻይና ዩ" + + "ዋን\x06ብር\x03***\x09د.إ.\u200f\x03AR$\x03BB$\x09د.ب.\u200f\x03BM$\x03BN" + + "$\x03BS$\x03BZ$\x03CL$\x03CO$\x03CU$\x03DO$\x09د.ج.\u200f\x09ج.م.\u200f" + + "\x03FJ$\x04UK£\x03GY$\x09د.ع.\u200f\x06ر.إ.\x03JM$\x09د.أ.\u200f\x09د.ك." + "\u200f\x03KY$\x09ل.ل.\u200f\x09د.ل.\u200f\x09د.م.\u200f\x09أ.م.\u200f" + "\x09ر.ع.\u200f\x09ر.ق.\u200f\x09ر.س.\u200f\x03SB$\x09د.س.\u200f\x06ج.س." + "\x03SR$\x09ل.س.\u200f\x09د.ت.\u200f\x03TT$\x03UY$\x09ر.ي.\u200f\x03Fdj" + @@ -863,1235 +866,1273 @@ const symbols string = "" + // Size: 1396 bytes "\x04CUC$\x03$MN\x03RD$\x04FK£\x02G$\x04Íkr\x02J$\x03CI$\x02L$\x02N$\x07р" + "уб.\x03SI$\x02S$\x02$U\x05лв.\x06щ.д.\x02$A\x03$CA\x04£ E\x05£ RU\x04$ " + "HK\x03£L\x04$ ZN\x03$ T\x04$ SU\x04din.\x04КМ\x04Кч\x04зл\x07дин.\x04Тл" + - "\x01F\x03USh\x04Kčs\x03ECU\x02TK\x03kr.\x03Ksh\x03öS\x03BGK\x03BGJ\x04Cu" + - "b$\x02DM\x04Fl£\x04F.G.\x02FC\x04F.Rw\x03Nu.\x05KR₩\x05TH฿\x06Δρχ\x02Tk" + - "\x02$b\x02Kr\x02Gs\x03CFP\x03FBu\x01D\x04MOP$\x02MK\x02SR\x02Le\x04NAf." + - "\x01E\x02VT\x03WS$\x03BsF\x02Af\x03Naf\x02$a\x04Afl.\x02TL\x03B/.\x02S/" + - "\x03Gs.\x03Bs.\x02؋\x04¥CN\x03$HK\x08ریال\x03$MX\x03$NZ\x03$EC\x02UM\x02" + - "mk\x03$AR\x03$AU\x02FB\x03$BM\x03$BN\x03$BS\x03$BZ\x03$CL\x03$CO\x04£CY" + - "\x03£E\x03$FJ\x04£FK\x04£GB\x04£GI\x04£IE\x04£IL\x05₤IT\x04£LB\x04£MT" + - "\x03$NA\x02$C\x03$RH\x02FR\x03$SB\x03$SG\x03$SR\x03$TT\x03$US\x03$UY\x04" + - "FCFP\x02Kw\x05$\u00a0AU\x05$\u00a0HK\x05$\u00a0NZ\x05$\u00a0SG\x05$" + - "\u00a0US\x02DA\x01G\x02LS\x02DT\x02$R\x06руб\x07રૂ.\x0a\u200eCN¥\u200e" + - "\x06ל״י\x02֏\x03NKr\x03元\x03¥\x03\u200b\x02LE\x02Kn\x06сом\x02zl\x02rb" + - "\x03MTn\x06ден\x04кр\x03NAf\x03Afl\x0cनेरू\x06रू\x02ر\x04Esc.\x06\u200bP" + - "TE\x04XXXX\x03ლ\x06ТМТ\x03Dkr\x03Skr\x03Nkr\x07රු.\x0fසිෆ්එ\x03NIS\x05Le" + - "kë\x03den\x02r.\x03BR$\x03Ekr\x04EG£\x04IE£\x03Ikr\x03Rs.\x04AUD$\x04NZD" + - "$\x07крб.\x05soʻm\x06сўм\x03₩\x03ILS\x02P.\x03Zł" + "\x01F\x06лей\x03USh\x04Kčs\x03ECU\x02TK\x03kr.\x03Ksh\x03öS\x03BGK\x03BG" + + "J\x04Cub$\x02DM\x04Fl£\x04F.G.\x02FC\x04F.Rw\x03Nu.\x05KR₩\x05TH฿\x06Δρχ" + + "\x02Tk\x02$b\x02Kr\x02Gs\x03CFP\x03FBu\x01D\x04MOP$\x02MK\x02SR\x02Le" + + "\x04NAf.\x01E\x02VT\x03WS$\x04SD£\x03BsF\x02p.\x03B/.\x02S/\x03Gs.\x03Bs" + + ".\x02؋\x04¥CN\x03$HK\x08ریال\x03$MX\x03$NZ\x03$EC\x02UM\x02mk\x03$AR\x03" + + "$AU\x02FB\x03$BM\x03$BN\x03$BS\x03$BZ\x03$CL\x03$CO\x04£CY\x03£E\x03$FJ" + + "\x04£FK\x04£GB\x04£GI\x04£IE\x04£IL\x05₤IT\x04£LB\x04£MT\x03$NA\x02$C" + + "\x03$RH\x02FR\x03$SB\x03$SG\x03$SR\x03$TT\x03$US\x03$UY\x04FCFP\x02Kw" + + "\x05$\u00a0AU\x05$\u00a0HK\x05$\u00a0NZ\x05$\u00a0SG\x05$\u00a0US\x02DA" + + "\x01G\x02LS\x02DT\x06руб\x07રૂ.\x0a\u200eCN¥\u200e\x06ל״י\x09लेई\x02֏" + + "\x03NKr\x03元\x03¥\x06レイ\x03\u200b\x06ಲೀ\x02LE\x02Kn\x06сом\x02zl\x02rb" + + "\x03MTn\x06ден\x04кр\x03NAf\x03Afl\x0cनेरू\x06रू\x04Afl.\x02ر\x03lej\x04" + + "Esc.\x06\u200bPTE\x04XXXX\x03ლ\x06ТМТ\x03Dkr\x03Skr\x03Nkr\x07රු.\x0fසිෆ" + + "්එ\x03NIS\x05Lekë\x03den\x02r.\x03BR$\x03Ekr\x04EG£\x04IE£\x03Ikr\x03R" + + "s.\x07сом.\x04AUD$\x04NZD$\x07крб.\x05soʻm\x06сўм\x03₩\x03ILS\x02P.\x03Z" + + "ł" type curToIndex struct { cur uint16 idx uint16 } -var normalLangIndex = []uint16{ // 753 elements +var normalLangIndex = []uint16{ // 776 elements // Entry 0 - 3F - 0x0000, 0x0014, 0x0014, 0x0014, 0x0017, 0x0018, 0x0018, 0x0018, - 0x0018, 0x0019, 0x0019, 0x001c, 0x001c, 0x0034, 0x0034, 0x0034, - 0x0034, 0x0035, 0x0035, 0x0035, 0x0035, 0x0036, 0x0036, 0x0036, - 0x0036, 0x0036, 0x0036, 0x0037, 0x0037, 0x0037, 0x0037, 0x0037, - 0x0037, 0x0037, 0x0037, 0x0037, 0x0038, 0x003a, 0x003a, 0x003a, - 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003b, 0x003b, 0x003e, - 0x003e, 0x0040, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, - 0x0048, 0x0048, 0x0049, 0x0049, 0x004a, 0x004a, 0x005b, 0x005b, + 0x0000, 0x0014, 0x0017, 0x0018, 0x0018, 0x0018, 0x0018, 0x0019, + 0x0019, 0x001d, 0x001d, 0x0034, 0x0034, 0x0034, 0x0034, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0036, 0x0036, 0x0036, 0x0036, 0x0037, + 0x0037, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, + 0x0038, 0x0038, 0x0039, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, + 0x003b, 0x003b, 0x003b, 0x003c, 0x003c, 0x003f, 0x003f, 0x0041, + 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0049, 0x0049, + 0x004a, 0x004a, 0x004b, 0x004b, 0x005c, 0x005c, 0x005c, 0x005c, // Entry 40 - 7F - 0x005b, 0x005b, 0x005b, 0x005d, 0x005d, 0x005d, 0x005e, 0x005e, - 0x005f, 0x006d, 0x006d, 0x006d, 0x006d, 0x007e, 0x0084, 0x0084, - 0x0084, 0x0084, 0x008d, 0x008d, 0x008d, 0x008e, 0x008e, 0x008f, - 0x008f, 0x0090, 0x0090, 0x0091, 0x0091, 0x0091, 0x0091, 0x0091, - 0x0098, 0x0098, 0x0099, 0x0099, 0x009b, 0x009b, 0x009f, 0x009f, - 0x009f, 0x00a0, 0x00a0, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, - 0x00a8, 0x00a9, 0x00aa, 0x00aa, 0x00aa, 0x00af, 0x00af, 0x00af, - 0x00af, 0x00af, 0x00af, 0x00af, 0x00b5, 0x00b5, 0x00b6, 0x00b6, + 0x005c, 0x005e, 0x005e, 0x005e, 0x005f, 0x005f, 0x0060, 0x006e, + 0x006e, 0x006e, 0x006e, 0x007f, 0x0085, 0x0085, 0x0085, 0x0085, + 0x008e, 0x008e, 0x008e, 0x008f, 0x008f, 0x0091, 0x0091, 0x0091, + 0x0092, 0x0092, 0x0093, 0x0093, 0x0094, 0x0094, 0x0095, 0x0095, + 0x0095, 0x009c, 0x009c, 0x009d, 0x009d, 0x009f, 0x009f, 0x00a3, + 0x00a3, 0x00a3, 0x00a4, 0x00a4, 0x00ac, 0x00ac, 0x00ac, 0x00ad, + 0x00ad, 0x00ad, 0x00ae, 0x00af, 0x00af, 0x00af, 0x00b4, 0x00b4, + 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00ba, 0x00ba, 0x00bb, // Entry 80 - BF - 0x00b9, 0x00b9, 0x00b9, 0x00bc, 0x00bc, 0x00bc, 0x00be, 0x00c0, - 0x00c0, 0x00c1, 0x00c2, 0x00c2, 0x00c2, 0x00d7, 0x00d8, 0x00d8, - 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, 0x00df, - 0x00e0, 0x00e0, 0x00e1, 0x00e1, 0x00e1, 0x00e1, 0x00e2, 0x00e3, - 0x00e4, 0x00e4, 0x00e5, 0x00e7, 0x00e7, 0x00e7, 0x00e8, 0x00e8, - 0x00e9, 0x00eb, 0x00ec, 0x00ec, 0x00ed, 0x00ed, 0x00ed, 0x00ed, - 0x00ed, 0x00ed, 0x00ed, 0x00ed, 0x00ee, 0x00ef, 0x00f0, 0x00f1, - 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f6, 0x00f7, 0x00f7, + 0x00bb, 0x00be, 0x00be, 0x00be, 0x00c1, 0x00c1, 0x00c1, 0x00c3, + 0x00c5, 0x00c5, 0x00c6, 0x00c7, 0x00c7, 0x00c7, 0x00dc, 0x00dd, + 0x00dd, 0x00de, 0x00df, 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, + 0x00e4, 0x00e5, 0x00e5, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e7, + 0x00e8, 0x00e9, 0x00e9, 0x00ea, 0x00ec, 0x00ec, 0x00ec, 0x00ed, + 0x00ed, 0x00ee, 0x00f0, 0x00f1, 0x00f1, 0x00f2, 0x00f2, 0x00f2, + 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f3, 0x00f4, 0x00f5, + 0x00f6, 0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fb, 0x00fc, // Entry C0 - FF - 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff, - 0x00ff, 0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106, - 0x0106, 0x0106, 0x0107, 0x0108, 0x0109, 0x0109, 0x010a, 0x010b, - 0x010d, 0x010d, 0x010e, 0x0110, 0x0111, 0x0112, 0x0112, 0x0113, - 0x0114, 0x0115, 0x0116, 0x0117, 0x0118, 0x0118, 0x0118, 0x0119, - 0x0119, 0x0119, 0x011a, 0x011b, 0x011c, 0x011d, 0x011d, 0x011d, - 0x011d, 0x012f, 0x0134, 0x0136, 0x0137, 0x0138, 0x013a, 0x013c, - 0x013d, 0x013f, 0x0141, 0x0141, 0x0142, 0x0142, 0x0143, 0x0144, + 0x00fc, 0x00fd, 0x00fe, 0x00ff, 0x0100, 0x0101, 0x0102, 0x0103, + 0x0104, 0x0104, 0x0105, 0x0106, 0x0107, 0x0108, 0x0109, 0x010a, + 0x010b, 0x010b, 0x010b, 0x010c, 0x010d, 0x010e, 0x010e, 0x010f, + 0x0110, 0x0112, 0x0112, 0x0113, 0x0115, 0x0116, 0x0117, 0x0117, + 0x0118, 0x0119, 0x011a, 0x011b, 0x011c, 0x011d, 0x011d, 0x011d, + 0x011e, 0x011e, 0x011e, 0x011f, 0x0120, 0x0121, 0x0122, 0x0122, + 0x0122, 0x0122, 0x0133, 0x0138, 0x013a, 0x013b, 0x013c, 0x013d, + 0x013f, 0x0141, 0x0142, 0x0144, 0x0146, 0x0146, 0x0147, 0x0147, // Entry 100 - 13F - 0x0145, 0x0145, 0x014e, 0x014f, 0x0150, 0x0151, 0x0152, 0x0153, - 0x0154, 0x0155, 0x0157, 0x0159, 0x015a, 0x015f, 0x015f, 0x0161, - 0x0161, 0x0161, 0x0161, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, - 0x016d, 0x016e, 0x016e, 0x017f, 0x017f, 0x0183, 0x0183, 0x0184, - 0x0185, 0x0185, 0x01ab, 0x01ab, 0x01ab, 0x01ac, 0x01ac, 0x01ac, - 0x01cd, 0x01ce, 0x01ce, 0x01ce, 0x01ce, 0x01ce, 0x01ce, 0x01cf, - 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d1, 0x01d1, 0x01d1, 0x01d2, - 0x01d3, 0x01d5, 0x01d5, 0x01d5, 0x01d5, 0x01d6, 0x01d6, 0x01d6, + 0x0148, 0x0149, 0x014a, 0x014a, 0x014b, 0x014c, 0x014d, 0x014e, + 0x014f, 0x0150, 0x0151, 0x0152, 0x0154, 0x0156, 0x0157, 0x015c, + 0x015c, 0x015e, 0x015e, 0x015e, 0x015e, 0x0169, 0x0169, 0x0169, + 0x0169, 0x0169, 0x016a, 0x016b, 0x016b, 0x017c, 0x017c, 0x0180, + 0x0180, 0x0181, 0x0182, 0x0182, 0x01a8, 0x01a8, 0x01a8, 0x01a9, + 0x01a9, 0x01a9, 0x01ca, 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01cb, + 0x01cb, 0x01cc, 0x01cd, 0x01cd, 0x01cd, 0x01cd, 0x01ce, 0x01ce, + 0x01ce, 0x01cf, 0x01d0, 0x01d2, 0x01d2, 0x01d2, 0x01d2, 0x01d3, // Entry 140 - 17F - 0x01d7, 0x01d8, 0x01d8, 0x01d8, 0x01d8, 0x01d8, 0x01d8, 0x01d9, - 0x01da, 0x01da, 0x01db, 0x01db, 0x01db, 0x01dc, 0x01dd, 0x01dd, - 0x01dd, 0x01dd, 0x01dd, 0x01e3, 0x01e3, 0x01e6, 0x01e6, 0x01e8, - 0x01e8, 0x01ef, 0x01ef, 0x01f2, 0x01f2, 0x01f2, 0x01f2, 0x01f3, - 0x01f3, 0x01f3, 0x01f4, 0x01f4, 0x01f4, 0x01f4, 0x01f5, 0x01f6, - 0x01f6, 0x01f6, 0x01f7, 0x01f7, 0x01fc, 0x01fc, 0x01fe, 0x01fe, - 0x0210, 0x0211, 0x0211, 0x0216, 0x0216, 0x0228, 0x0228, 0x022b, - 0x022b, 0x022f, 0x022f, 0x0230, 0x0230, 0x0231, 0x0231, 0x023d, + 0x01d3, 0x01d3, 0x01d4, 0x01d5, 0x01d5, 0x01d5, 0x01d5, 0x01d5, + 0x01d5, 0x01d6, 0x01d7, 0x01d7, 0x01d8, 0x01d8, 0x01d8, 0x01d9, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01e0, 0x01e0, 0x01e3, + 0x01e3, 0x01e5, 0x01e5, 0x01e9, 0x01e9, 0x01ec, 0x01ec, 0x01ec, + 0x01ec, 0x01ed, 0x01ed, 0x01ed, 0x01ee, 0x01ee, 0x01ee, 0x01ee, + 0x01ef, 0x01f0, 0x01f0, 0x01f0, 0x01f1, 0x01f1, 0x01f6, 0x01f6, + 0x01f8, 0x01f8, 0x020a, 0x020b, 0x020b, 0x0210, 0x0210, 0x0222, + 0x0222, 0x0225, 0x0225, 0x0229, 0x0229, 0x022a, 0x022a, 0x022b, // Entry 180 - 1BF - 0x023d, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0247, 0x0247, - 0x0247, 0x0247, 0x0247, 0x0248, 0x0248, 0x0248, 0x0252, 0x0252, - 0x0253, 0x0253, 0x0253, 0x0254, 0x0254, 0x0254, 0x0255, 0x0255, - 0x0258, 0x0258, 0x0258, 0x0258, 0x0259, 0x0259, 0x025d, 0x025d, - 0x025d, 0x025d, 0x025e, 0x025e, 0x025f, 0x025f, 0x0262, 0x0262, - 0x0264, 0x0264, 0x0265, 0x0265, 0x0265, 0x0265, 0x0265, 0x0265, - 0x0265, 0x0266, 0x0266, 0x0266, 0x0266, 0x0266, 0x0266, 0x0266, - 0x0266, 0x0266, 0x0275, 0x0275, 0x0276, 0x0276, 0x027b, 0x027b, + 0x022b, 0x022b, 0x022b, 0x0237, 0x0237, 0x023f, 0x023f, 0x023f, + 0x023f, 0x023f, 0x023f, 0x023f, 0x0242, 0x0242, 0x0242, 0x0242, + 0x0242, 0x0242, 0x0243, 0x0243, 0x0243, 0x0243, 0x024d, 0x024d, + 0x024e, 0x024e, 0x024e, 0x024f, 0x024f, 0x024f, 0x0250, 0x0250, + 0x0253, 0x0253, 0x0253, 0x0253, 0x0254, 0x0254, 0x0258, 0x0258, + 0x0258, 0x0258, 0x0259, 0x0259, 0x025a, 0x025a, 0x025d, 0x025d, + 0x025f, 0x025f, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, + 0x0260, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, // Entry 1C0 - 1FF - 0x027c, 0x027c, 0x027d, 0x027d, 0x027e, 0x027f, 0x027f, 0x027f, - 0x027f, 0x0281, 0x0281, 0x0281, 0x0281, 0x0281, 0x0294, 0x0294, - 0x0295, 0x0295, 0x0296, 0x0296, 0x0297, 0x0297, 0x029c, 0x029c, - 0x029d, 0x029d, 0x029e, 0x029f, 0x029f, 0x02a0, 0x02a0, 0x02a1, - 0x02a1, 0x02a2, 0x02a2, 0x02a2, 0x02a2, 0x02ae, 0x02ae, 0x02b1, - 0x02b1, 0x02b4, 0x02b4, 0x02b6, 0x02b6, 0x02ba, 0x02bb, 0x02bb, - 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02c3, 0x02c3, 0x02c4, - 0x02c4, 0x02c4, 0x02c5, 0x02c5, 0x02d7, 0x02d7, 0x02d7, 0x02d7, + 0x0261, 0x0261, 0x0270, 0x0270, 0x0271, 0x0271, 0x0276, 0x0276, + 0x0277, 0x0277, 0x0278, 0x0278, 0x0279, 0x027a, 0x027a, 0x027a, + 0x027a, 0x027c, 0x027c, 0x027d, 0x027d, 0x027d, 0x0290, 0x0290, + 0x0291, 0x0291, 0x0292, 0x0292, 0x0293, 0x0293, 0x0298, 0x0298, + 0x0299, 0x0299, 0x029a, 0x029b, 0x029b, 0x029c, 0x029c, 0x029d, + 0x029d, 0x029e, 0x029e, 0x029e, 0x029e, 0x02aa, 0x02aa, 0x02ad, + 0x02ad, 0x02b0, 0x02b0, 0x02b0, 0x02b2, 0x02b2, 0x02b6, 0x02b7, + 0x02b7, 0x02b8, 0x02b8, 0x02b8, 0x02b8, 0x02b8, 0x02bf, 0x02bf, // Entry 200 - 23F - 0x02d7, 0x02d7, 0x02d7, 0x02d7, 0x02d9, 0x02d9, 0x02d9, 0x02df, - 0x02e0, 0x02e0, 0x02e1, 0x02e2, 0x02e2, 0x02e3, 0x02e4, 0x02e4, - 0x02e4, 0x02e5, 0x02e5, 0x02e5, 0x02e5, 0x02e5, 0x02e5, 0x02e5, - 0x02e5, 0x02e7, 0x02e7, 0x02e7, 0x02e8, 0x02e8, 0x02e9, 0x02e9, - 0x02ea, 0x02ea, 0x02ea, 0x02ec, 0x02ec, 0x02ee, 0x02ef, 0x02f0, - 0x02f0, 0x02f0, 0x02f0, 0x02f0, 0x02ff, 0x02ff, 0x02ff, 0x02ff, - 0x0300, 0x0300, 0x0303, 0x0304, 0x0304, 0x0304, 0x0306, 0x0306, - 0x0306, 0x0307, 0x0308, 0x0309, 0x030a, 0x030b, 0x030b, 0x030c, + 0x02c0, 0x02c0, 0x02c0, 0x02c1, 0x02c1, 0x02d3, 0x02d3, 0x02d3, + 0x02d3, 0x02d3, 0x02d3, 0x02d3, 0x02d3, 0x02d5, 0x02d5, 0x02d5, + 0x02db, 0x02dc, 0x02dc, 0x02dd, 0x02de, 0x02de, 0x02df, 0x02e0, + 0x02e0, 0x02e0, 0x02f3, 0x02f3, 0x02f3, 0x02f3, 0x02f3, 0x02f3, + 0x02f3, 0x02f3, 0x02f5, 0x02f5, 0x02f5, 0x02f6, 0x02f6, 0x02f7, + 0x02f7, 0x02f8, 0x02fa, 0x02fa, 0x02fc, 0x02fc, 0x02fe, 0x02ff, + 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x030f, 0x030f, 0x030f, + 0x030f, 0x0310, 0x0310, 0x0313, 0x0314, 0x0314, 0x0314, 0x0316, // Entry 240 - 27F - 0x030e, 0x0310, 0x0310, 0x0310, 0x0310, 0x0311, 0x0311, 0x0322, - 0x0323, 0x0323, 0x0324, 0x0324, 0x032c, 0x032e, 0x032f, 0x0330, - 0x0331, 0x0331, 0x0331, 0x0332, 0x0332, 0x0333, 0x0333, 0x0334, - 0x0334, 0x0335, 0x0335, 0x0336, 0x0336, 0x0336, 0x033a, 0x033a, - 0x033a, 0x033c, 0x033d, 0x033d, 0x033d, 0x033d, 0x033d, 0x033d, - 0x033d, 0x033d, 0x033d, 0x033d, 0x033d, 0x0340, 0x0340, 0x034e, - 0x034e, 0x0352, 0x0352, 0x0352, 0x0352, 0x0352, 0x0352, 0x0352, - 0x0352, 0x0352, 0x0352, 0x0353, 0x0354, 0x0355, 0x0356, 0x0356, + 0x0316, 0x0316, 0x0317, 0x0318, 0x0319, 0x031a, 0x031b, 0x031b, + 0x031c, 0x031e, 0x0320, 0x0320, 0x0320, 0x0320, 0x0321, 0x0321, + 0x0332, 0x0333, 0x0333, 0x0334, 0x0334, 0x033c, 0x033e, 0x033f, + 0x0340, 0x0341, 0x0341, 0x0341, 0x0342, 0x0342, 0x0343, 0x0343, + 0x0344, 0x0344, 0x0345, 0x0345, 0x0346, 0x0346, 0x0347, 0x0347, + 0x0347, 0x034b, 0x034b, 0x034b, 0x034d, 0x034e, 0x034e, 0x034e, + 0x034e, 0x034e, 0x034e, 0x034e, 0x034e, 0x034e, 0x034e, 0x034e, + 0x034e, 0x0351, 0x0351, 0x035f, 0x035f, 0x0369, 0x0369, 0x0369, // Entry 280 - 2BF - 0x0358, 0x0358, 0x0359, 0x0359, 0x035f, 0x035f, 0x035f, 0x035f, - 0x035f, 0x035f, 0x0365, 0x0365, 0x0365, 0x0365, 0x0365, 0x0365, - 0x0365, 0x0365, 0x037d, 0x037d, 0x037d, 0x037d, 0x0380, 0x0381, - 0x0381, 0x0381, 0x0382, 0x0382, 0x0385, 0x0385, 0x0386, 0x0388, - 0x038b, 0x038d, 0x038d, 0x038e, 0x038f, 0x038f, 0x0391, 0x0391, - 0x0392, 0x0393, 0x0393, 0x0393, 0x0395, 0x0395, 0x0395, 0x0398, - 0x0398, 0x039d, 0x039d, 0x039d, 0x039d, 0x039d, 0x039d, 0x039d, - 0x039d, 0x039f, 0x039f, 0x03b2, 0x03b2, 0x03b5, 0x03b6, 0x03b6, + 0x0369, 0x0369, 0x0369, 0x0369, 0x0369, 0x0369, 0x0369, 0x036a, + 0x036b, 0x036c, 0x036d, 0x036d, 0x036f, 0x036f, 0x0370, 0x0370, + 0x0376, 0x0376, 0x0376, 0x0376, 0x0376, 0x0376, 0x037c, 0x037c, + 0x037c, 0x037c, 0x037c, 0x037c, 0x037c, 0x037c, 0x0394, 0x0394, + 0x0394, 0x0394, 0x0397, 0x0398, 0x0398, 0x0398, 0x0399, 0x0399, + 0x039c, 0x039c, 0x039d, 0x039f, 0x03a2, 0x03a4, 0x03a4, 0x03a5, + 0x03a6, 0x03a6, 0x03a8, 0x03a8, 0x03aa, 0x03aa, 0x03ab, 0x03ac, + 0x03ac, 0x03ac, 0x03ae, 0x03ae, 0x03ae, 0x03ae, 0x03b1, 0x03b1, // Entry 2C0 - 2FF - 0x03b7, 0x03b8, 0x03b8, 0x03ba, 0x03ba, 0x03ba, 0x03ba, 0x03bb, - 0x03bc, 0x03bc, 0x03bc, 0x03bc, 0x03bc, 0x03be, 0x03be, 0x03be, - 0x03be, 0x03bf, 0x03bf, 0x03bf, 0x03c1, 0x03c1, 0x03c1, 0x03c1, - 0x03c2, 0x03c2, 0x03c2, 0x03c2, 0x03c2, 0x03c2, 0x03c3, 0x03c3, - 0x03c3, 0x03c6, 0x03c6, 0x03c6, 0x03c6, 0x03ca, 0x03ca, 0x03ca, - 0x03cb, 0x03cd, 0x03cf, 0x03d3, 0x03d5, 0x03d6, 0x03d6, 0x03d8, - 0x03d8, -} // Size: 1530 bytes + 0x03b6, 0x03b6, 0x03b6, 0x03b6, 0x03b8, 0x03b8, 0x03b8, 0x03b8, + 0x03b8, 0x03b8, 0x03ba, 0x03ba, 0x03cd, 0x03cd, 0x03d0, 0x03d1, + 0x03d1, 0x03d2, 0x03d3, 0x03d3, 0x03d5, 0x03d5, 0x03d5, 0x03d5, + 0x03d6, 0x03d7, 0x03d7, 0x03d7, 0x03d7, 0x03d7, 0x03d9, 0x03d9, + 0x03d9, 0x03d9, 0x03da, 0x03da, 0x03da, 0x03dc, 0x03dc, 0x03dd, + 0x03dd, 0x03dd, 0x03de, 0x03de, 0x03de, 0x03de, 0x03de, 0x03de, + 0x03df, 0x03df, 0x03df, 0x03e2, 0x03e5, 0x03e5, 0x03e5, 0x03e5, + 0x03e5, 0x03e5, 0x03e9, 0x03e9, 0x03e9, 0x03ea, 0x03ec, 0x03ee, + // Entry 300 - 33F + 0x03f2, 0x03f4, 0x03f5, 0x03f5, 0x03f7, 0x03f7, 0x03f7, 0x03f7, +} // Size: 1576 bytes -var normalSymIndex = []curToIndex{ // 984 elements - 0: {cur: 0x13, idx: 0x6}, - 1: {cur: 0x2e, idx: 0x13}, - 2: {cur: 0x3a, idx: 0x1c}, - 3: {cur: 0x43, idx: 0x20}, - 4: {cur: 0x5d, idx: 0x3b}, - 5: {cur: 0x62, idx: 0x3f}, - 6: {cur: 0x71, idx: 0x4b}, - 7: {cur: 0x7b, idx: 0x5a}, - 8: {cur: 0x7c, idx: 0x5e}, - 9: {cur: 0x84, idx: 0x62}, - 10: {cur: 0x8c, idx: 0x6e}, - 11: {cur: 0xb1, idx: 0x90}, - 12: {cur: 0xbf, idx: 0x9e}, - 13: {cur: 0xf4, idx: 0xc7}, - 14: {cur: 0xfa, idx: 0xcf}, - 15: {cur: 0x103, idx: 0xd3}, - 16: {cur: 0x107, idx: 0xd7}, - 17: {cur: 0x10e, idx: 0xdc}, - 18: {cur: 0x113, idx: 0xe0}, - 19: {cur: 0x115, idx: 0xe4}, - 20: {cur: 0xb1, idx: 0x0}, - 21: {cur: 0xe9, idx: 0xbc}, - 22: {cur: 0x123, idx: 0xe9}, - 23: {cur: 0xb8, idx: 0x4}, - 24: {cur: 0x66, idx: 0xee}, - 25: {cur: 0x13, idx: 0xf4}, - 26: {cur: 0x5c, idx: 0xf8}, - 27: {cur: 0xe9, idx: 0xbc}, - 28: {cur: 0x0, idx: 0xff}, - 29: {cur: 0x2, idx: 0x103}, - 30: {cur: 0x13, idx: 0xf4}, - 31: {cur: 0x23, idx: 0x115}, - 32: {cur: 0x53, idx: 0x13f}, - 33: {cur: 0x57, idx: 0x149}, - 34: {cur: 0x7d, idx: 0x160}, - 35: {cur: 0x7e, idx: 0x16a}, - 36: {cur: 0x83, idx: 0x175}, - 37: {cur: 0x88, idx: 0x17f}, - 38: {cur: 0x8d, idx: 0x18c}, - 39: {cur: 0x91, idx: 0x19a}, - 40: {cur: 0x9c, idx: 0x1a4}, - 41: {cur: 0x9d, idx: 0x1ae}, - 42: {cur: 0xaa, idx: 0x1b8}, - 43: {cur: 0xc0, idx: 0x1c2}, - 44: {cur: 0xcc, idx: 0x1cc}, - 45: {cur: 0xd4, idx: 0x1d6}, - 46: {cur: 0xd7, idx: 0x1e4}, - 47: {cur: 0xd8, idx: 0x1ee}, - 48: {cur: 0xe7, idx: 0x1f9}, - 49: {cur: 0xe9, idx: 0xbc}, - 50: {cur: 0xee, idx: 0x203}, - 51: {cur: 0x11d, idx: 0x215}, - 52: {cur: 0x50, idx: 0x21f}, - 53: {cur: 0x58, idx: 0x223}, - 54: {cur: 0xd8, idx: 0x0}, - 55: {cur: 0xe0, idx: 0x227}, - 56: {cur: 0x62, idx: 0x229}, - 57: {cur: 0xe3, idx: 0x3f}, - 58: {cur: 0xf5, idx: 0x22e}, - 59: {cur: 0x84, idx: 0x25}, - 60: {cur: 0xe9, idx: 0xbc}, - 61: {cur: 0xfa, idx: 0x4}, - 62: {cur: 0x16, idx: 0x232}, - 63: {cur: 0xe9, idx: 0xbc}, - 64: {cur: 0x16, idx: 0x232}, - 65: {cur: 0x2e, idx: 0x0}, - 66: {cur: 0x37, idx: 0x24a}, - 67: {cur: 0x3a, idx: 0x0}, - 68: {cur: 0x84, idx: 0x25}, - 69: {cur: 0xbf, idx: 0x0}, - 70: {cur: 0xd1, idx: 0xb2}, - 71: {cur: 0xfa, idx: 0x4}, - 72: {cur: 0x125, idx: 0x8a}, - 73: {cur: 0xf5, idx: 0x22e}, - 74: {cur: 0x13, idx: 0x0}, - 75: {cur: 0x21, idx: 0x286}, - 76: {cur: 0x2e, idx: 0x0}, - 77: {cur: 0x3a, idx: 0x0}, - 78: {cur: 0x43, idx: 0x0}, - 79: {cur: 0x62, idx: 0x0}, - 80: {cur: 0x71, idx: 0x0}, - 81: {cur: 0x7b, idx: 0x0}, - 82: {cur: 0x7c, idx: 0x0}, - 83: {cur: 0x84, idx: 0x0}, - 84: {cur: 0x8c, idx: 0x0}, - 85: {cur: 0xb1, idx: 0x0}, - 86: {cur: 0xbf, idx: 0x0}, - 87: {cur: 0xf4, idx: 0x0}, - 88: {cur: 0xfa, idx: 0x28c}, - 89: {cur: 0x103, idx: 0x0}, - 90: {cur: 0x10e, idx: 0x0}, - 91: {cur: 0x1b, idx: 0xc}, - 92: {cur: 0xe9, idx: 0xbc}, - 93: {cur: 0x43, idx: 0x25}, - 94: {cur: 0x43, idx: 0x20}, - 95: {cur: 0x13, idx: 0x293}, - 96: {cur: 0x2e, idx: 0x0}, - 97: {cur: 0x3a, idx: 0x296}, - 98: {cur: 0x43, idx: 0x0}, - 99: {cur: 0x62, idx: 0x29f}, - 100: {cur: 0x71, idx: 0x2a5}, - 101: {cur: 0x7b, idx: 0x0}, - 102: {cur: 0x84, idx: 0x0}, - 103: {cur: 0x8c, idx: 0x0}, - 104: {cur: 0xbf, idx: 0x2ae}, - 105: {cur: 0xf4, idx: 0x0}, - 106: {cur: 0xfa, idx: 0x2b7}, - 107: {cur: 0x103, idx: 0x0}, - 108: {cur: 0x10e, idx: 0x0}, - 109: {cur: 0x13, idx: 0x0}, - 110: {cur: 0x18, idx: 0x9}, - 111: {cur: 0x2e, idx: 0x0}, - 112: {cur: 0x3a, idx: 0x0}, - 113: {cur: 0x43, idx: 0x0}, - 114: {cur: 0x62, idx: 0x0}, - 115: {cur: 0x71, idx: 0x0}, - 116: {cur: 0x74, idx: 0x51}, - 117: {cur: 0x7b, idx: 0x0}, - 118: {cur: 0x84, idx: 0x25}, - 119: {cur: 0xb1, idx: 0x0}, - 120: {cur: 0xbf, idx: 0x0}, - 121: {cur: 0xd0, idx: 0x2bc}, - 122: {cur: 0xe9, idx: 0xbc}, - 123: {cur: 0xfa, idx: 0x0}, - 124: {cur: 0x10e, idx: 0x0}, - 125: {cur: 0x115, idx: 0x0}, - 126: {cur: 0x18, idx: 0x2c1}, - 127: {cur: 0x4d, idx: 0x2c6}, - 128: {cur: 0x84, idx: 0x25}, - 129: {cur: 0xc8, idx: 0x2cb}, - 130: {cur: 0xd0, idx: 0x2d0}, - 131: {cur: 0xf2, idx: 0x2d8}, - 132: {cur: 0x13, idx: 0xf4}, - 133: {cur: 0x2e, idx: 0x0}, - 134: {cur: 0x3a, idx: 0x0}, - 135: {cur: 0x43, idx: 0x25}, - 136: {cur: 0x5b, idx: 0x37}, - 137: {cur: 0xb1, idx: 0x0}, - 138: {cur: 0xe9, idx: 0xbc}, - 139: {cur: 0xfa, idx: 0x0}, - 140: {cur: 0x10e, idx: 0x0}, - 141: {cur: 0x61, idx: 0x2dd}, - 142: {cur: 0xd1, idx: 0xb2}, - 143: {cur: 0xf9, idx: 0x2df}, - 144: {cur: 0xfa, idx: 0x4}, - 145: {cur: 0x13, idx: 0xf4}, - 146: {cur: 0x48, idx: 0x2e3}, - 147: {cur: 0x4d, idx: 0x2c}, - 148: {cur: 0x7b, idx: 0x0}, - 149: {cur: 0x7c, idx: 0x0}, - 150: {cur: 0x103, idx: 0x0}, - 151: {cur: 0x110, idx: 0x2e8}, - 152: {cur: 0xd1, idx: 0xb2}, - 153: {cur: 0x8c, idx: 0x0}, - 154: {cur: 0xe9, idx: 0xbc}, - 155: {cur: 0x13, idx: 0xf4}, - 156: {cur: 0x51, idx: 0x2ef}, - 157: {cur: 0xe9, idx: 0xbc}, - 158: {cur: 0xfa, idx: 0x4}, - 159: {cur: 0x85, idx: 0x2f3}, - 160: {cur: 0x12, idx: 0x2f7}, - 161: {cur: 0x13, idx: 0xf4}, - 162: {cur: 0x20, idx: 0x2fb}, - 163: {cur: 0x22, idx: 0x2ff}, - 164: {cur: 0x4f, idx: 0x308}, - 165: {cur: 0x84, idx: 0x25}, - 166: {cur: 0xe9, idx: 0xbc}, - 167: {cur: 0xfa, idx: 0x4}, - 168: {cur: 0x5d, idx: 0x0}, - 169: {cur: 0x98, idx: 0x2dd}, - 170: {cur: 0x13, idx: 0x0}, - 171: {cur: 0x84, idx: 0x25}, - 172: {cur: 0xc8, idx: 0xa6}, - 173: {cur: 0xe9, idx: 0xbc}, - 174: {cur: 0xfa, idx: 0x4}, - 175: {cur: 0x13, idx: 0xf4}, - 176: {cur: 0x33, idx: 0x31d}, - 177: {cur: 0x7b, idx: 0x0}, - 178: {cur: 0x8c, idx: 0x321}, - 179: {cur: 0xe9, idx: 0x327}, - 180: {cur: 0x107, idx: 0x0}, - 181: {cur: 0x85, idx: 0x2f3}, - 182: {cur: 0x13, idx: 0xf4}, - 183: {cur: 0x66, idx: 0xee}, - 184: {cur: 0xe9, idx: 0xbc}, - 185: {cur: 0x6c, idx: 0x32d}, - 186: {cur: 0xe9, idx: 0xbc}, - 187: {cur: 0xfa, idx: 0x4}, - 188: {cur: 0x84, idx: 0x25}, - 189: {cur: 0xfa, idx: 0x4}, - 190: {cur: 0x84, idx: 0x62}, - 191: {cur: 0xfa, idx: 0xcf}, - 192: {cur: 0x10e, idx: 0x4}, - 193: {cur: 0x10e, idx: 0x4}, - 194: {cur: 0x13, idx: 0x4}, - 195: {cur: 0x2e, idx: 0x0}, - 196: {cur: 0x3a, idx: 0x0}, - 197: {cur: 0x43, idx: 0x0}, - 198: {cur: 0x5d, idx: 0x0}, - 199: {cur: 0x62, idx: 0x0}, - 200: {cur: 0x71, idx: 0x0}, - 201: {cur: 0x7b, idx: 0x0}, - 202: {cur: 0x7c, idx: 0x0}, - 203: {cur: 0x84, idx: 0x0}, - 204: {cur: 0x8c, idx: 0x0}, - 205: {cur: 0xb1, idx: 0x0}, - 206: {cur: 0xbf, idx: 0x0}, - 207: {cur: 0xd6, idx: 0x7e}, - 208: {cur: 0xf4, idx: 0x0}, - 209: {cur: 0xfa, idx: 0x0}, - 210: {cur: 0x103, idx: 0x0}, - 211: {cur: 0x107, idx: 0x0}, - 212: {cur: 0x10e, idx: 0x0}, - 213: {cur: 0x113, idx: 0x0}, - 214: {cur: 0x115, idx: 0x340}, - 215: {cur: 0x1a, idx: 0x4}, - 216: {cur: 0x24, idx: 0x344}, - 217: {cur: 0x25, idx: 0x4}, - 218: {cur: 0x32, idx: 0x4}, - 219: {cur: 0x35, idx: 0x16}, - 220: {cur: 0x39, idx: 0x4}, - 221: {cur: 0x3a, idx: 0x4}, - 222: {cur: 0x13, idx: 0x4}, - 223: {cur: 0xbf, idx: 0x4}, - 224: {cur: 0x13, idx: 0x4}, - 225: {cur: 0x51, idx: 0x2ef}, - 226: {cur: 0x10e, idx: 0x4}, - 227: {cur: 0x58, idx: 0x223}, - 228: {cur: 0x5f, idx: 0x4}, - 229: {cur: 0x60, idx: 0x3f}, - 230: {cur: 0x62, idx: 0x229}, - 231: {cur: 0x10e, idx: 0x4}, - 232: {cur: 0x66, idx: 0xee}, - 233: {cur: 0x62, idx: 0x229}, - 234: {cur: 0x67, idx: 0x3f}, - 235: {cur: 0x68, idx: 0x348}, - 236: {cur: 0x70, idx: 0x4}, - 237: {cur: 0x82, idx: 0x4}, - 238: {cur: 0x85, idx: 0x2f3}, - 239: {cur: 0x13, idx: 0x4}, - 240: {cur: 0x10e, idx: 0x4}, - 241: {cur: 0x8e, idx: 0x4}, - 242: {cur: 0x10e, idx: 0x4}, - 243: {cur: 0x93, idx: 0x4}, - 244: {cur: 0x123, idx: 0xe9}, - 245: {cur: 0xa2, idx: 0x87}, - 246: {cur: 0xa9, idx: 0x34a}, - 247: {cur: 0x10e, idx: 0x4}, - 248: {cur: 0x62, idx: 0x229}, - 249: {cur: 0xad, idx: 0x7e}, - 250: {cur: 0xb0, idx: 0x34f}, - 251: {cur: 0xb4, idx: 0x94}, - 252: {cur: 0xb8, idx: 0x4}, - 253: {cur: 0x13, idx: 0x4}, - 254: {cur: 0xb9, idx: 0x97}, - 255: {cur: 0x13, idx: 0x4}, - 256: {cur: 0xbf, idx: 0x4}, - 257: {cur: 0xbf, idx: 0x4}, - 258: {cur: 0xc5, idx: 0x8a}, - 259: {cur: 0xc6, idx: 0xa2}, - 260: {cur: 0xc7, idx: 0x7e}, - 261: {cur: 0xbf, idx: 0x4}, - 262: {cur: 0xd3, idx: 0xb6}, - 263: {cur: 0xd5, idx: 0x4}, - 264: {cur: 0xd6, idx: 0x352}, - 265: {cur: 0xda, idx: 0x30}, - 266: {cur: 0xdb, idx: 0x4}, - 267: {cur: 0x62, idx: 0x229}, - 268: {cur: 0xdc, idx: 0x3f}, - 269: {cur: 0xdf, idx: 0x355}, - 270: {cur: 0x62, idx: 0x229}, - 271: {cur: 0xe3, idx: 0x3f}, - 272: {cur: 0x8, idx: 0x358}, - 273: {cur: 0xe8, idx: 0x35d}, - 274: {cur: 0xbf, idx: 0x4}, - 275: {cur: 0xef, idx: 0xc0}, - 276: {cur: 0xf3, idx: 0x4}, - 277: {cur: 0x13, idx: 0x4}, - 278: {cur: 0xf5, idx: 0x22e}, - 279: {cur: 0xf9, idx: 0x2df}, - 280: {cur: 0x10e, idx: 0x4}, - 281: {cur: 0x105, idx: 0x35f}, - 282: {cur: 0x106, idx: 0x362}, - 283: {cur: 0x123, idx: 0xe9}, - 284: {cur: 0x125, idx: 0x8a}, - 285: {cur: 0x13, idx: 0x0}, - 286: {cur: 0x2e, idx: 0x0}, - 287: {cur: 0x43, idx: 0x0}, - 288: {cur: 0x5b, idx: 0x37}, - 289: {cur: 0x62, idx: 0x0}, - 290: {cur: 0x71, idx: 0x0}, - 291: {cur: 0x7b, idx: 0x0}, - 292: {cur: 0x7c, idx: 0x0}, - 293: {cur: 0x84, idx: 0x0}, - 294: {cur: 0x8c, idx: 0x0}, - 295: {cur: 0xb1, idx: 0x0}, - 296: {cur: 0xbf, idx: 0x0}, - 297: {cur: 0xe9, idx: 0xbc}, - 298: {cur: 0xf4, idx: 0x0}, - 299: {cur: 0xfa, idx: 0x4}, - 300: {cur: 0x107, idx: 0x0}, - 301: {cur: 0x10e, idx: 0x0}, - 302: {cur: 0x113, idx: 0x0}, - 303: {cur: 0x3a, idx: 0x0}, - 304: {cur: 0x5d, idx: 0x0}, - 305: {cur: 0xe9, idx: 0x0}, - 306: {cur: 0xfa, idx: 0x0}, - 307: {cur: 0x103, idx: 0x0}, - 308: {cur: 0x11, idx: 0x4}, - 309: {cur: 0xfa, idx: 0xcf}, - 310: {cur: 0x27, idx: 0x10}, - 311: {cur: 0x2e, idx: 0x13}, - 312: {cur: 0x41, idx: 0x4}, - 313: {cur: 0xfa, idx: 0xcf}, - 314: {cur: 0x44, idx: 0x4}, - 315: {cur: 0xfa, idx: 0xcf}, - 316: {cur: 0x46, idx: 0x28}, - 317: {cur: 0x4a, idx: 0x4}, - 318: {cur: 0xfa, idx: 0xcf}, - 319: {cur: 0x52, idx: 0x256}, - 320: {cur: 0xfa, idx: 0xcf}, - 321: {cur: 0xfa, idx: 0x4}, - 322: {cur: 0x107, idx: 0xd7}, - 323: {cur: 0x6d, idx: 0x49}, - 324: {cur: 0x72, idx: 0x4f}, - 325: {cur: 0x4, idx: 0x36a}, - 326: {cur: 0x8, idx: 0x36d}, - 327: {cur: 0x9, idx: 0x1}, - 328: {cur: 0x11, idx: 0x371}, - 329: {cur: 0x13, idx: 0xf4}, - 330: {cur: 0x14, idx: 0x374}, - 331: {cur: 0x43, idx: 0x20}, - 332: {cur: 0xb1, idx: 0x4}, - 333: {cur: 0x115, idx: 0x0}, - 334: {cur: 0xbb, idx: 0x9b}, - 335: {cur: 0xc1, idx: 0x37c}, - 336: {cur: 0xc3, idx: 0x380}, - 337: {cur: 0xc6, idx: 0xa2}, - 338: {cur: 0xfa, idx: 0x4}, - 339: {cur: 0xcb, idx: 0x383}, - 340: {cur: 0xfa, idx: 0x4}, - 341: {cur: 0x84, idx: 0x25}, - 342: {cur: 0xfa, idx: 0x4}, - 343: {cur: 0xfa, idx: 0xcf}, - 344: {cur: 0xff, idx: 0x4}, - 345: {cur: 0x102, idx: 0x387}, - 346: {cur: 0x13, idx: 0xf4}, - 347: {cur: 0x56, idx: 0x30}, - 348: {cur: 0x84, idx: 0x25}, - 349: {cur: 0xe9, idx: 0xbc}, - 350: {cur: 0xfa, idx: 0x4}, - 351: {cur: 0x5b, idx: 0x37}, - 352: {cur: 0xe9, idx: 0xbc}, - 353: {cur: 0x4, idx: 0x38b}, - 354: {cur: 0x3a, idx: 0x296}, - 355: {cur: 0x43, idx: 0x38e}, - 356: {cur: 0x71, idx: 0x393}, - 357: {cur: 0x7e, idx: 0x397}, - 358: {cur: 0x84, idx: 0x25}, - 359: {cur: 0xb1, idx: 0x3a0}, - 360: {cur: 0xbf, idx: 0x3a4}, - 361: {cur: 0xe9, idx: 0xbc}, - 362: {cur: 0xfa, idx: 0x4}, - 363: {cur: 0x10e, idx: 0x3a8}, - 364: {cur: 0x69, idx: 0x46}, - 365: {cur: 0xaa, idx: 0x3ac}, - 366: {cur: 0x13, idx: 0x0}, - 367: {cur: 0x2e, idx: 0x0}, - 368: {cur: 0x3a, idx: 0x0}, - 369: {cur: 0x43, idx: 0x0}, - 370: {cur: 0x5e, idx: 0x3af}, - 371: {cur: 0x71, idx: 0x0}, - 372: {cur: 0x7b, idx: 0x0}, - 373: {cur: 0x7c, idx: 0x0}, - 374: {cur: 0x84, idx: 0x25}, - 375: {cur: 0x8c, idx: 0x0}, - 376: {cur: 0xb1, idx: 0x0}, - 377: {cur: 0xbf, idx: 0x0}, - 378: {cur: 0xf4, idx: 0x0}, - 379: {cur: 0xfa, idx: 0x4}, - 380: {cur: 0x103, idx: 0x0}, - 381: {cur: 0x10e, idx: 0x0}, - 382: {cur: 0x115, idx: 0x0}, - 383: {cur: 0x84, idx: 0x25}, - 384: {cur: 0xc6, idx: 0xa2}, - 385: {cur: 0xe9, idx: 0xbc}, - 386: {cur: 0xfa, idx: 0x4}, - 387: {cur: 0x51, idx: 0x30}, - 388: {cur: 0x51, idx: 0x2ef}, - 389: {cur: 0x11, idx: 0x3b2}, - 390: {cur: 0x13, idx: 0x3b6}, - 391: {cur: 0x1d, idx: 0x3ba}, - 392: {cur: 0x25, idx: 0x3bd}, - 393: {cur: 0x26, idx: 0x3c1}, - 394: {cur: 0x32, idx: 0x3c5}, - 395: {cur: 0x39, idx: 0x3c9}, - 396: {cur: 0x3a, idx: 0x296}, - 397: {cur: 0x41, idx: 0x3cd}, - 398: {cur: 0x43, idx: 0x0}, - 399: {cur: 0x44, idx: 0x3d1}, - 400: {cur: 0x4c, idx: 0x3d5}, - 401: {cur: 0x5f, idx: 0x3de}, - 402: {cur: 0x60, idx: 0x3e2}, - 403: {cur: 0x61, idx: 0x2dd}, - 404: {cur: 0x62, idx: 0x3e7}, - 405: {cur: 0x67, idx: 0x3ec}, - 406: {cur: 0x71, idx: 0x0}, - 407: {cur: 0x78, idx: 0x3f1}, - 408: {cur: 0x79, idx: 0x3f6}, - 409: {cur: 0x81, idx: 0x3fb}, - 410: {cur: 0x84, idx: 0x0}, - 411: {cur: 0x91, idx: 0x401}, - 412: {cur: 0xac, idx: 0x406}, - 413: {cur: 0xb1, idx: 0x3a0}, - 414: {cur: 0xb8, idx: 0x40b}, - 415: {cur: 0xbf, idx: 0x3a4}, - 416: {cur: 0xcd, idx: 0x412}, - 417: {cur: 0xd5, idx: 0x419}, - 418: {cur: 0xdb, idx: 0x41d}, - 419: {cur: 0xe1, idx: 0x421}, - 420: {cur: 0xf3, idx: 0x425}, - 421: {cur: 0xf4, idx: 0x0}, - 422: {cur: 0xfa, idx: 0x429}, - 423: {cur: 0xff, idx: 0x42d}, - 424: {cur: 0x106, idx: 0x362}, - 425: {cur: 0x10e, idx: 0x0}, - 426: {cur: 0x115, idx: 0x431}, - 427: {cur: 0x24, idx: 0x344}, - 428: {cur: 0x11, idx: 0x0}, - 429: {cur: 0x13, idx: 0x439}, - 430: {cur: 0x25, idx: 0x0}, - 431: {cur: 0x26, idx: 0x0}, - 432: {cur: 0x32, idx: 0x0}, - 433: {cur: 0x39, idx: 0x0}, - 434: {cur: 0x3a, idx: 0x4}, - 435: {cur: 0x41, idx: 0x0}, - 436: {cur: 0x43, idx: 0x20}, - 437: {cur: 0x44, idx: 0x0}, - 438: {cur: 0x5f, idx: 0x0}, - 439: {cur: 0x60, idx: 0x0}, - 440: {cur: 0x62, idx: 0x3f}, - 441: {cur: 0x67, idx: 0x0}, - 442: {cur: 0x71, idx: 0x43f}, - 443: {cur: 0x7b, idx: 0x0}, - 444: {cur: 0x7c, idx: 0x0}, - 445: {cur: 0x84, idx: 0x25}, - 446: {cur: 0x8c, idx: 0x0}, - 447: {cur: 0x91, idx: 0x0}, - 448: {cur: 0xb1, idx: 0x0}, - 449: {cur: 0xb8, idx: 0x0}, - 450: {cur: 0xbf, idx: 0x445}, - 451: {cur: 0xd5, idx: 0x0}, - 452: {cur: 0xdb, idx: 0x44b}, - 453: {cur: 0xe1, idx: 0x0}, - 454: {cur: 0xf3, idx: 0x0}, - 455: {cur: 0xfa, idx: 0x451}, - 456: {cur: 0xff, idx: 0x0}, - 457: {cur: 0x103, idx: 0x0}, - 458: {cur: 0x107, idx: 0x0}, - 459: {cur: 0x113, idx: 0x0}, - 460: {cur: 0x115, idx: 0x0}, - 461: {cur: 0x3b, idx: 0x315}, - 462: {cur: 0x50, idx: 0x21f}, - 463: {cur: 0x53, idx: 0x457}, - 464: {cur: 0x69, idx: 0x46}, - 465: {cur: 0x75, idx: 0x45a}, - 466: {cur: 0x88, idx: 0x6b}, - 467: {cur: 0x61, idx: 0x0}, - 468: {cur: 0x98, idx: 0x2dd}, - 469: {cur: 0xa2, idx: 0x87}, - 470: {cur: 0xaa, idx: 0x3ac}, - 471: {cur: 0xad, idx: 0x7e}, - 472: {cur: 0xd3, idx: 0xb6}, - 473: {cur: 0xd6, idx: 0x352}, - 474: {cur: 0xe7, idx: 0x45c}, - 475: {cur: 0xee, idx: 0x45f}, - 476: {cur: 0x105, idx: 0x35f}, - 477: {cur: 0x13, idx: 0xf4}, - 478: {cur: 0x3a, idx: 0x9b}, - 479: {cur: 0x5f, idx: 0x153}, - 480: {cur: 0xd5, idx: 0x27c}, - 481: {cur: 0xe9, idx: 0xbc}, - 482: {cur: 0x115, idx: 0x0}, - 483: {cur: 0x84, idx: 0x25}, - 484: {cur: 0xe9, idx: 0xbc}, - 485: {cur: 0xfa, idx: 0x4}, - 486: {cur: 0xe9, idx: 0xbc}, - 487: {cur: 0xfa, idx: 0x4}, - 488: {cur: 0x13, idx: 0x293}, - 489: {cur: 0x2e, idx: 0x462}, - 490: {cur: 0x3a, idx: 0x296}, - 491: {cur: 0x5b, idx: 0x37}, - 492: {cur: 0xb1, idx: 0x3a0}, - 493: {cur: 0xe9, idx: 0xbc}, - 494: {cur: 0xfa, idx: 0x4}, - 495: {cur: 0x12, idx: 0x2f7}, - 496: {cur: 0x84, idx: 0x25}, - 497: {cur: 0xfa, idx: 0x4}, - 498: {cur: 0xe9, idx: 0xbc}, - 499: {cur: 0x85, idx: 0x2f3}, - 500: {cur: 0xb9, idx: 0x97}, - 501: {cur: 0x66, idx: 0xee}, - 502: {cur: 0xfa, idx: 0x4}, - 503: {cur: 0x43, idx: 0x474}, - 504: {cur: 0x79, idx: 0x47f}, - 505: {cur: 0x84, idx: 0x25}, - 506: {cur: 0xe9, idx: 0xbc}, - 507: {cur: 0xfa, idx: 0x4}, - 508: {cur: 0xe9, idx: 0xbc}, - 509: {cur: 0xfa, idx: 0x4}, - 510: {cur: 0x13, idx: 0x0}, - 511: {cur: 0x2e, idx: 0x0}, - 512: {cur: 0x3a, idx: 0x0}, - 513: {cur: 0x43, idx: 0x0}, - 514: {cur: 0x5d, idx: 0x0}, - 515: {cur: 0x62, idx: 0x0}, - 516: {cur: 0x71, idx: 0x0}, - 517: {cur: 0x7b, idx: 0x0}, - 518: {cur: 0x7c, idx: 0x0}, - 519: {cur: 0x84, idx: 0x0}, - 520: {cur: 0x8c, idx: 0x0}, - 521: {cur: 0xb1, idx: 0x0}, - 522: {cur: 0xbf, idx: 0x0}, - 523: {cur: 0xf4, idx: 0x0}, - 524: {cur: 0xfa, idx: 0x0}, - 525: {cur: 0x103, idx: 0x0}, - 526: {cur: 0x10e, idx: 0x0}, - 527: {cur: 0x115, idx: 0x0}, - 528: {cur: 0x18, idx: 0x9}, - 529: {cur: 0x13, idx: 0x0}, - 530: {cur: 0x84, idx: 0x25}, - 531: {cur: 0xc8, idx: 0xa6}, - 532: {cur: 0xe9, idx: 0xbc}, - 533: {cur: 0xfa, idx: 0x4}, - 534: {cur: 0x13, idx: 0x0}, - 535: {cur: 0x2e, idx: 0x0}, - 536: {cur: 0x3a, idx: 0x0}, - 537: {cur: 0x43, idx: 0x0}, - 538: {cur: 0x5d, idx: 0x0}, - 539: {cur: 0x62, idx: 0x0}, - 540: {cur: 0x71, idx: 0x0}, - 541: {cur: 0x76, idx: 0x54}, - 542: {cur: 0x7b, idx: 0x0}, - 543: {cur: 0x7c, idx: 0x0}, - 544: {cur: 0x84, idx: 0x25}, - 545: {cur: 0x8c, idx: 0x0}, - 546: {cur: 0xb1, idx: 0x0}, - 547: {cur: 0xbf, idx: 0x0}, - 548: {cur: 0xf4, idx: 0x0}, - 549: {cur: 0xfa, idx: 0x0}, - 550: {cur: 0x103, idx: 0x0}, - 551: {cur: 0x10e, idx: 0x0}, - 552: {cur: 0x7, idx: 0x486}, - 553: {cur: 0xe9, idx: 0xbc}, - 554: {cur: 0xfa, idx: 0x4}, - 555: {cur: 0x13, idx: 0xf4}, - 556: {cur: 0x77, idx: 0x57}, - 557: {cur: 0x7c, idx: 0x7e}, - 558: {cur: 0xe9, idx: 0xbc}, - 559: {cur: 0xb9, idx: 0x97}, - 560: {cur: 0x43, idx: 0x25}, - 561: {cur: 0x13, idx: 0x0}, - 562: {cur: 0x2e, idx: 0x0}, - 563: {cur: 0x3a, idx: 0x0}, - 564: {cur: 0x5d, idx: 0x0}, - 565: {cur: 0x62, idx: 0x0}, - 566: {cur: 0x7c, idx: 0x0}, - 567: {cur: 0x8c, idx: 0x0}, - 568: {cur: 0xb1, idx: 0x0}, - 569: {cur: 0xbf, idx: 0x0}, - 570: {cur: 0xf4, idx: 0x0}, - 571: {cur: 0xfa, idx: 0x0}, - 572: {cur: 0x103, idx: 0x0}, - 573: {cur: 0x2e, idx: 0x0}, - 574: {cur: 0x71, idx: 0x0}, - 575: {cur: 0x84, idx: 0x0}, - 576: {cur: 0x8c, idx: 0x0}, - 577: {cur: 0xb1, idx: 0x0}, - 578: {cur: 0xe9, idx: 0xbc}, - 579: {cur: 0xf4, idx: 0x0}, - 580: {cur: 0x43, idx: 0x48d}, - 581: {cur: 0x84, idx: 0x491}, - 582: {cur: 0xfa, idx: 0x4}, - 583: {cur: 0xf5, idx: 0x22e}, - 584: {cur: 0x13, idx: 0x0}, - 585: {cur: 0x43, idx: 0x0}, - 586: {cur: 0x64, idx: 0x42}, - 587: {cur: 0x71, idx: 0x0}, - 588: {cur: 0x7b, idx: 0x0}, - 589: {cur: 0x7c, idx: 0x0}, - 590: {cur: 0x84, idx: 0x0}, - 591: {cur: 0x8c, idx: 0x0}, - 592: {cur: 0xbf, idx: 0x0}, - 593: {cur: 0x103, idx: 0x0}, - 594: {cur: 0x53, idx: 0x457}, - 595: {cur: 0x85, idx: 0x2f3}, - 596: {cur: 0xf5, idx: 0x22e}, - 597: {cur: 0x13, idx: 0xf4}, - 598: {cur: 0x4b, idx: 0x495}, - 599: {cur: 0xe9, idx: 0xbc}, - 600: {cur: 0x85, idx: 0x2f3}, - 601: {cur: 0x8f, idx: 0x72}, - 602: {cur: 0xd1, idx: 0xb2}, - 603: {cur: 0xe9, idx: 0xbc}, - 604: {cur: 0xfa, idx: 0x4}, - 605: {cur: 0x51, idx: 0x2ef}, - 606: {cur: 0x85, idx: 0x2f3}, - 607: {cur: 0x87, idx: 0x67}, - 608: {cur: 0xe9, idx: 0xbc}, - 609: {cur: 0xfa, idx: 0x4}, - 610: {cur: 0xe9, idx: 0xbc}, - 611: {cur: 0xfa, idx: 0x4}, - 612: {cur: 0x13, idx: 0xf4}, - 613: {cur: 0xf5, idx: 0x22e}, - 614: {cur: 0x13, idx: 0x0}, - 615: {cur: 0x2e, idx: 0x0}, - 616: {cur: 0x3a, idx: 0x0}, - 617: {cur: 0x62, idx: 0x0}, - 618: {cur: 0x71, idx: 0x0}, - 619: {cur: 0x7b, idx: 0x0}, - 620: {cur: 0x7c, idx: 0x0}, - 621: {cur: 0x86, idx: 0x49f}, - 622: {cur: 0x8c, idx: 0x0}, - 623: {cur: 0xb1, idx: 0x0}, - 624: {cur: 0xbf, idx: 0x0}, - 625: {cur: 0xe9, idx: 0xbc}, - 626: {cur: 0xf4, idx: 0x0}, - 627: {cur: 0xfa, idx: 0x0}, - 628: {cur: 0x10e, idx: 0x0}, - 629: {cur: 0xf5, idx: 0x22e}, - 630: {cur: 0x12, idx: 0x2f7}, - 631: {cur: 0x13, idx: 0xf4}, - 632: {cur: 0x84, idx: 0x25}, - 633: {cur: 0xe9, idx: 0xbc}, - 634: {cur: 0xfa, idx: 0x4}, - 635: {cur: 0xf9, idx: 0x2df}, - 636: {cur: 0xfa, idx: 0x4}, - 637: {cur: 0x3b, idx: 0x315}, - 638: {cur: 0x9, idx: 0x1}, - 639: {cur: 0x90, idx: 0x76}, - 640: {cur: 0xe9, idx: 0xbc}, - 641: {cur: 0x13, idx: 0x0}, - 642: {cur: 0x2e, idx: 0x0}, - 643: {cur: 0x3a, idx: 0x0}, - 644: {cur: 0x43, idx: 0x0}, - 645: {cur: 0x62, idx: 0x0}, - 646: {cur: 0x71, idx: 0x0}, - 647: {cur: 0x7b, idx: 0x0}, - 648: {cur: 0x7c, idx: 0x0}, - 649: {cur: 0x84, idx: 0x0}, - 650: {cur: 0x8c, idx: 0x0}, - 651: {cur: 0xb1, idx: 0x0}, - 652: {cur: 0xbf, idx: 0x0}, - 653: {cur: 0xf4, idx: 0x0}, - 654: {cur: 0xfa, idx: 0x0}, - 655: {cur: 0x103, idx: 0x0}, - 656: {cur: 0x107, idx: 0x0}, - 657: {cur: 0x10e, idx: 0x0}, - 658: {cur: 0x113, idx: 0x0}, - 659: {cur: 0x115, idx: 0x0}, - 660: {cur: 0x3b, idx: 0x315}, - 661: {cur: 0x85, idx: 0x2f3}, - 662: {cur: 0x85, idx: 0x2f3}, - 663: {cur: 0x13, idx: 0xf4}, - 664: {cur: 0x84, idx: 0x25}, - 665: {cur: 0x9a, idx: 0x84}, - 666: {cur: 0xe9, idx: 0xbc}, - 667: {cur: 0xfa, idx: 0x4}, - 668: {cur: 0x85, idx: 0x2f3}, - 669: {cur: 0xf5, idx: 0x22e}, - 670: {cur: 0x85, idx: 0x2f3}, - 671: {cur: 0xad, idx: 0x7e}, - 672: {cur: 0xa2, idx: 0x87}, - 673: {cur: 0xb7, idx: 0x4ac}, - 674: {cur: 0x13, idx: 0x0}, - 675: {cur: 0x43, idx: 0x0}, - 676: {cur: 0x62, idx: 0x0}, - 677: {cur: 0x71, idx: 0x0}, - 678: {cur: 0x7b, idx: 0x0}, - 679: {cur: 0x7c, idx: 0x0}, - 680: {cur: 0x84, idx: 0x0}, - 681: {cur: 0x8c, idx: 0x0}, - 682: {cur: 0xa4, idx: 0x4b0}, - 683: {cur: 0xbf, idx: 0x0}, - 684: {cur: 0xf4, idx: 0x0}, - 685: {cur: 0x103, idx: 0x0}, - 686: {cur: 0x84, idx: 0x25}, - 687: {cur: 0xe9, idx: 0xbc}, - 688: {cur: 0xfa, idx: 0x4}, - 689: {cur: 0xa8, idx: 0x8c}, - 690: {cur: 0xe9, idx: 0xbc}, - 691: {cur: 0xfa, idx: 0x4}, - 692: {cur: 0xe9, idx: 0xbc}, - 693: {cur: 0xfa, idx: 0x4}, - 694: {cur: 0x3a, idx: 0x0}, - 695: {cur: 0xb1, idx: 0x0}, - 696: {cur: 0xb4, idx: 0x94}, - 697: {cur: 0xfa, idx: 0x0}, - 698: {cur: 0x26, idx: 0x4}, - 699: {cur: 0xdb, idx: 0x4}, - 700: {cur: 0x8, idx: 0x4bc}, - 701: {cur: 0x14, idx: 0x4c0}, - 702: {cur: 0x75, idx: 0x45a}, - 703: {cur: 0xa7, idx: 0x8a}, - 704: {cur: 0xc1, idx: 0x37c}, - 705: {cur: 0xe9, idx: 0xbc}, - 706: {cur: 0xf3, idx: 0x20d}, - 707: {cur: 0xfa, idx: 0x4}, - 708: {cur: 0xb8, idx: 0x4}, - 709: {cur: 0x13, idx: 0x0}, - 710: {cur: 0x2e, idx: 0x0}, - 711: {cur: 0x3a, idx: 0x0}, - 712: {cur: 0x43, idx: 0x0}, - 713: {cur: 0x71, idx: 0x0}, - 714: {cur: 0x7b, idx: 0x0}, - 715: {cur: 0x7c, idx: 0x0}, - 716: {cur: 0x84, idx: 0x0}, - 717: {cur: 0x8c, idx: 0x0}, - 718: {cur: 0xb1, idx: 0x0}, - 719: {cur: 0xbd, idx: 0x30}, - 720: {cur: 0xbf, idx: 0x0}, - 721: {cur: 0xf4, idx: 0x0}, - 722: {cur: 0xfa, idx: 0x0}, - 723: {cur: 0x103, idx: 0x0}, - 724: {cur: 0x107, idx: 0x0}, - 725: {cur: 0x10e, idx: 0x0}, - 726: {cur: 0x115, idx: 0x0}, - 727: {cur: 0xbe, idx: 0x4c4}, - 728: {cur: 0xe9, idx: 0xbc}, - 729: {cur: 0x13, idx: 0xf4}, - 730: {cur: 0x3a, idx: 0x9b}, - 731: {cur: 0x5f, idx: 0x153}, - 732: {cur: 0xd5, idx: 0x27c}, - 733: {cur: 0xe9, idx: 0xbc}, - 734: {cur: 0x115, idx: 0x0}, - 735: {cur: 0x14, idx: 0x374}, - 736: {cur: 0xfa, idx: 0x4}, - 737: {cur: 0x8, idx: 0x358}, - 738: {cur: 0xe1, idx: 0x4}, - 739: {cur: 0x8, idx: 0x358}, - 740: {cur: 0xbd, idx: 0x30}, - 741: {cur: 0x62, idx: 0x229}, - 742: {cur: 0xe3, idx: 0x3f}, - 743: {cur: 0xf9, idx: 0x2df}, - 744: {cur: 0x5c, idx: 0x24a}, - 745: {cur: 0x85, idx: 0x2f3}, - 746: {cur: 0x64, idx: 0x42}, - 747: {cur: 0xfa, idx: 0x4}, - 748: {cur: 0x64, idx: 0x0}, - 749: {cur: 0xd1, idx: 0xb2}, - 750: {cur: 0xe9, idx: 0xbc}, - 751: {cur: 0xc7, idx: 0x4d8}, - 752: {cur: 0x13, idx: 0x0}, - 753: {cur: 0x3a, idx: 0x0}, - 754: {cur: 0x43, idx: 0x0}, - 755: {cur: 0x62, idx: 0x0}, - 756: {cur: 0x71, idx: 0x0}, - 757: {cur: 0x7b, idx: 0x0}, - 758: {cur: 0x7c, idx: 0x0}, - 759: {cur: 0x84, idx: 0x0}, - 760: {cur: 0x8c, idx: 0x0}, - 761: {cur: 0xb1, idx: 0x0}, - 762: {cur: 0xbf, idx: 0x0}, - 763: {cur: 0xc8, idx: 0xa6}, - 764: {cur: 0xf4, idx: 0x0}, - 765: {cur: 0xfa, idx: 0x0}, - 766: {cur: 0x103, idx: 0x0}, - 767: {cur: 0x4, idx: 0x38b}, - 768: {cur: 0x13, idx: 0xf4}, - 769: {cur: 0xca, idx: 0x4db}, - 770: {cur: 0xe9, idx: 0xbc}, - 771: {cur: 0x9, idx: 0x1}, - 772: {cur: 0x4b, idx: 0x495}, - 773: {cur: 0xca, idx: 0x4e0}, - 774: {cur: 0x98, idx: 0x2dd}, - 775: {cur: 0xa9, idx: 0x34a}, - 776: {cur: 0xb7, idx: 0x4ac}, - 777: {cur: 0xca, idx: 0x495}, - 778: {cur: 0xe4, idx: 0xb9}, - 779: {cur: 0xc3, idx: 0x380}, - 780: {cur: 0x27, idx: 0x10}, - 781: {cur: 0xc3, idx: 0x0}, - 782: {cur: 0xc3, idx: 0x0}, - 783: {cur: 0xfa, idx: 0x4}, - 784: {cur: 0x24, idx: 0x344}, - 785: {cur: 0x13, idx: 0x0}, - 786: {cur: 0x2e, idx: 0x0}, - 787: {cur: 0x3a, idx: 0x0}, - 788: {cur: 0x43, idx: 0x0}, - 789: {cur: 0x5d, idx: 0x0}, - 790: {cur: 0x62, idx: 0x0}, - 791: {cur: 0x71, idx: 0x0}, - 792: {cur: 0x7b, idx: 0x0}, - 793: {cur: 0x7c, idx: 0x0}, - 794: {cur: 0x84, idx: 0x0}, - 795: {cur: 0x8c, idx: 0x0}, - 796: {cur: 0xb1, idx: 0x0}, - 797: {cur: 0xbf, idx: 0x0}, - 798: {cur: 0xf4, idx: 0x0}, - 799: {cur: 0xfa, idx: 0x0}, - 800: {cur: 0x103, idx: 0x0}, - 801: {cur: 0x10e, idx: 0x0}, - 802: {cur: 0xa1, idx: 0x4f}, - 803: {cur: 0xf5, idx: 0x22e}, - 804: {cur: 0x0, idx: 0x4e7}, - 805: {cur: 0x84, idx: 0x25}, - 806: {cur: 0xd1, idx: 0xb2}, - 807: {cur: 0xd2, idx: 0x18}, - 808: {cur: 0xe9, idx: 0xbc}, - 809: {cur: 0xed, idx: 0x4f0}, - 810: {cur: 0xf6, idx: 0xcb}, - 811: {cur: 0xfa, idx: 0x4}, - 812: {cur: 0x37, idx: 0x24a}, - 813: {cur: 0xd2, idx: 0x0}, - 814: {cur: 0x86, idx: 0x49f}, - 815: {cur: 0x8f, idx: 0x72}, - 816: {cur: 0xa1, idx: 0x4f}, - 817: {cur: 0xd3, idx: 0xb6}, - 818: {cur: 0xf5, idx: 0x22e}, - 819: {cur: 0xd1, idx: 0xb2}, - 820: {cur: 0x85, idx: 0x2f3}, - 821: {cur: 0xf5, idx: 0x22e}, - 822: {cur: 0x51, idx: 0x4f7}, - 823: {cur: 0xbd, idx: 0x30}, - 824: {cur: 0xda, idx: 0x4fb}, - 825: {cur: 0xe9, idx: 0xbc}, - 826: {cur: 0xbd, idx: 0x4ff}, - 827: {cur: 0xda, idx: 0x30}, - 828: {cur: 0xb7, idx: 0x4ac}, - 829: {cur: 0x92, idx: 0x503}, - 830: {cur: 0xe9, idx: 0xbc}, - 831: {cur: 0x113, idx: 0x50b}, - 832: {cur: 0x13, idx: 0x0}, - 833: {cur: 0x2e, idx: 0x0}, - 834: {cur: 0x3a, idx: 0x0}, - 835: {cur: 0x43, idx: 0x0}, - 836: {cur: 0x62, idx: 0x0}, - 837: {cur: 0x71, idx: 0x0}, - 838: {cur: 0x7b, idx: 0x51b}, - 839: {cur: 0x7c, idx: 0x0}, - 840: {cur: 0x84, idx: 0x0}, - 841: {cur: 0x8c, idx: 0x0}, - 842: {cur: 0xbf, idx: 0x0}, - 843: {cur: 0xf4, idx: 0x0}, - 844: {cur: 0xfa, idx: 0x0}, - 845: {cur: 0x103, idx: 0x0}, - 846: {cur: 0x3a, idx: 0x0}, - 847: {cur: 0x84, idx: 0x25}, - 848: {cur: 0xe9, idx: 0xbc}, - 849: {cur: 0xfa, idx: 0x4}, - 850: {cur: 0xe0, idx: 0x227}, - 851: {cur: 0x50, idx: 0x21f}, - 852: {cur: 0x5c, idx: 0x24a}, - 853: {cur: 0x85, idx: 0x2f3}, - 854: {cur: 0x6, idx: 0x51f}, - 855: {cur: 0xe9, idx: 0xbc}, - 856: {cur: 0xa4, idx: 0x525}, - 857: {cur: 0x13, idx: 0x0}, - 858: {cur: 0x18, idx: 0x2c1}, - 859: {cur: 0x84, idx: 0x25}, - 860: {cur: 0x8c, idx: 0x0}, - 861: {cur: 0xbf, idx: 0x0}, - 862: {cur: 0x103, idx: 0x0}, - 863: {cur: 0x13, idx: 0x0}, - 864: {cur: 0x18, idx: 0x9}, - 865: {cur: 0x84, idx: 0x25}, - 866: {cur: 0x8c, idx: 0x0}, - 867: {cur: 0xbf, idx: 0x0}, - 868: {cur: 0x103, idx: 0x0}, - 869: {cur: 0x13, idx: 0x0}, - 870: {cur: 0x1a, idx: 0x23e}, - 871: {cur: 0x25, idx: 0x11f}, - 872: {cur: 0x2e, idx: 0x52c}, - 873: {cur: 0x32, idx: 0x127}, - 874: {cur: 0x39, idx: 0x12b}, - 875: {cur: 0x43, idx: 0x0}, - 876: {cur: 0x51, idx: 0x4f7}, - 877: {cur: 0x52, idx: 0x256}, - 878: {cur: 0x56, idx: 0x530}, - 879: {cur: 0x57, idx: 0x534}, - 880: {cur: 0x62, idx: 0x0}, - 881: {cur: 0x71, idx: 0x0}, - 882: {cur: 0x78, idx: 0x539}, - 883: {cur: 0x7c, idx: 0x0}, - 884: {cur: 0x80, idx: 0x53e}, - 885: {cur: 0x82, idx: 0x171}, - 886: {cur: 0x84, idx: 0x0}, - 887: {cur: 0x8c, idx: 0x0}, - 888: {cur: 0xbd, idx: 0x4ff}, - 889: {cur: 0xbf, idx: 0x0}, - 890: {cur: 0xda, idx: 0x30}, - 891: {cur: 0xf4, idx: 0x0}, - 892: {cur: 0x103, idx: 0x0}, - 893: {cur: 0x85, idx: 0x2f3}, - 894: {cur: 0xe9, idx: 0xbc}, - 895: {cur: 0xf5, idx: 0x22e}, - 896: {cur: 0x3b, idx: 0x315}, - 897: {cur: 0xf9, idx: 0x2df}, - 898: {cur: 0x84, idx: 0x25}, - 899: {cur: 0xe9, idx: 0xbc}, - 900: {cur: 0xfa, idx: 0x4}, - 901: {cur: 0x92, idx: 0x542}, - 902: {cur: 0xb4, idx: 0x94}, - 903: {cur: 0xdb, idx: 0x280}, - 904: {cur: 0xb4, idx: 0x94}, - 905: {cur: 0xdb, idx: 0x4}, - 906: {cur: 0xfa, idx: 0xcf}, - 907: {cur: 0xe9, idx: 0xbc}, - 908: {cur: 0xfa, idx: 0x4}, - 909: {cur: 0xf9, idx: 0x2df}, - 910: {cur: 0x85, idx: 0x2f3}, - 911: {cur: 0x13, idx: 0xf4}, - 912: {cur: 0x84, idx: 0x25}, - 913: {cur: 0x5c, idx: 0x24a}, - 914: {cur: 0x58, idx: 0x223}, - 915: {cur: 0x5d, idx: 0x0}, - 916: {cur: 0x62, idx: 0x0}, - 917: {cur: 0x13, idx: 0x546}, - 918: {cur: 0xbf, idx: 0x54b}, - 919: {cur: 0xef, idx: 0xc0}, - 920: {cur: 0x13, idx: 0xf4}, - 921: {cur: 0x84, idx: 0x25}, - 922: {cur: 0xe9, idx: 0xbc}, - 923: {cur: 0xf2, idx: 0xc3}, - 924: {cur: 0xfa, idx: 0x4}, - 925: {cur: 0x43, idx: 0x491}, - 926: {cur: 0xfa, idx: 0x4}, - 927: {cur: 0x13, idx: 0x0}, - 928: {cur: 0x2e, idx: 0x0}, - 929: {cur: 0x3a, idx: 0x0}, - 930: {cur: 0x43, idx: 0x0}, - 931: {cur: 0x5d, idx: 0x0}, - 932: {cur: 0x62, idx: 0x0}, - 933: {cur: 0x71, idx: 0x0}, - 934: {cur: 0x7b, idx: 0x0}, - 935: {cur: 0x7c, idx: 0x0}, - 936: {cur: 0x84, idx: 0x25}, - 937: {cur: 0x8c, idx: 0x0}, - 938: {cur: 0xb1, idx: 0x0}, - 939: {cur: 0xbf, idx: 0x0}, - 940: {cur: 0xf4, idx: 0x0}, - 941: {cur: 0xf6, idx: 0xcb}, - 942: {cur: 0xf7, idx: 0x550}, - 943: {cur: 0xfa, idx: 0x0}, - 944: {cur: 0x103, idx: 0x0}, - 945: {cur: 0x10e, idx: 0x0}, - 946: {cur: 0xc7, idx: 0x7e}, - 947: {cur: 0xe9, idx: 0xbc}, - 948: {cur: 0xfa, idx: 0x4}, - 949: {cur: 0xc7, idx: 0x0}, - 950: {cur: 0x100, idx: 0x558}, - 951: {cur: 0x4, idx: 0x38b}, - 952: {cur: 0xe9, idx: 0xbc}, - 953: {cur: 0x100, idx: 0x55e}, - 954: {cur: 0x93, idx: 0x4}, - 955: {cur: 0x93, idx: 0x4}, - 956: {cur: 0x13, idx: 0xf4}, - 957: {cur: 0xe9, idx: 0xbc}, - 958: {cur: 0xf5, idx: 0x22e}, - 959: {cur: 0x84, idx: 0x25}, - 960: {cur: 0xfa, idx: 0x4}, - 961: {cur: 0xf9, idx: 0x2df}, - 962: {cur: 0xb9, idx: 0x97}, - 963: {cur: 0x13, idx: 0xf4}, - 964: {cur: 0x84, idx: 0x25}, - 965: {cur: 0x8c, idx: 0x565}, - 966: {cur: 0x13, idx: 0xf4}, - 967: {cur: 0x43, idx: 0x491}, - 968: {cur: 0x7a, idx: 0x569}, - 969: {cur: 0x8c, idx: 0x565}, - 970: {cur: 0x43, idx: 0x20}, - 971: {cur: 0x43, idx: 0x20}, - 972: {cur: 0xa9, idx: 0x34a}, - 973: {cur: 0x43, idx: 0x20}, - 974: {cur: 0xdb, idx: 0x4}, - 975: {cur: 0x13, idx: 0xf4}, - 976: {cur: 0x84, idx: 0x25}, - 977: {cur: 0x8c, idx: 0x565}, - 978: {cur: 0xf4, idx: 0x4}, - 979: {cur: 0x8c, idx: 0x6e}, - 980: {cur: 0xf4, idx: 0xc7}, - 981: {cur: 0xa9, idx: 0x34a}, - 982: {cur: 0xe9, idx: 0xbc}, - 983: {cur: 0x123, idx: 0xe9}, -} // Size: 3960 bytes +var normalSymIndex = []curToIndex{ // 1015 elements + 0: {cur: 0x13, idx: 0x6}, + 1: {cur: 0x2e, idx: 0x13}, + 2: {cur: 0x3a, idx: 0x1c}, + 3: {cur: 0x44, idx: 0x20}, + 4: {cur: 0x5e, idx: 0x3b}, + 5: {cur: 0x63, idx: 0x3f}, + 6: {cur: 0x72, idx: 0x4b}, + 7: {cur: 0x7c, idx: 0x5a}, + 8: {cur: 0x7d, idx: 0x5e}, + 9: {cur: 0x85, idx: 0x62}, + 10: {cur: 0x8d, idx: 0x6e}, + 11: {cur: 0xb2, idx: 0x90}, + 12: {cur: 0xc0, idx: 0x9e}, + 13: {cur: 0xf6, idx: 0xc7}, + 14: {cur: 0xfc, idx: 0xcf}, + 15: {cur: 0x105, idx: 0xd3}, + 16: {cur: 0x109, idx: 0xd7}, + 17: {cur: 0x110, idx: 0xdc}, + 18: {cur: 0x115, idx: 0xe0}, + 19: {cur: 0x117, idx: 0xe4}, + 20: {cur: 0xb2, idx: 0x0}, + 21: {cur: 0xeb, idx: 0xbc}, + 22: {cur: 0x125, idx: 0xe9}, + 23: {cur: 0xb9, idx: 0x4}, + 24: {cur: 0x67, idx: 0xf2}, + 25: {cur: 0x13, idx: 0xf8}, + 26: {cur: 0x42, idx: 0xfc}, + 27: {cur: 0x5d, idx: 0x113}, + 28: {cur: 0xeb, idx: 0xbc}, + 29: {cur: 0x0, idx: 0x11a}, + 30: {cur: 0x2, idx: 0x11e}, + 31: {cur: 0x13, idx: 0xf8}, + 32: {cur: 0x23, idx: 0x130}, + 33: {cur: 0x54, idx: 0x15a}, + 34: {cur: 0x58, idx: 0x164}, + 35: {cur: 0x7e, idx: 0x17b}, + 36: {cur: 0x7f, idx: 0x185}, + 37: {cur: 0x84, idx: 0x190}, + 38: {cur: 0x8e, idx: 0x19a}, + 39: {cur: 0x92, idx: 0x1a8}, + 40: {cur: 0x9d, idx: 0x1b2}, + 41: {cur: 0x9e, idx: 0x1bc}, + 42: {cur: 0xab, idx: 0x1c6}, + 43: {cur: 0xc1, idx: 0x1d0}, + 44: {cur: 0xcd, idx: 0x1da}, + 45: {cur: 0xd5, idx: 0x1e4}, + 46: {cur: 0xd8, idx: 0x1f2}, + 47: {cur: 0xd9, idx: 0x1fc}, + 48: {cur: 0xe9, idx: 0x207}, + 49: {cur: 0xeb, idx: 0xbc}, + 50: {cur: 0xf0, idx: 0x211}, + 51: {cur: 0x11f, idx: 0x223}, + 52: {cur: 0x51, idx: 0x22d}, + 53: {cur: 0x59, idx: 0x231}, + 54: {cur: 0x89, idx: 0x6b}, + 55: {cur: 0xd9, idx: 0x0}, + 56: {cur: 0xe1, idx: 0x235}, + 57: {cur: 0x63, idx: 0x237}, + 58: {cur: 0xe4, idx: 0x3f}, + 59: {cur: 0xf7, idx: 0x23c}, + 60: {cur: 0x85, idx: 0x25}, + 61: {cur: 0xeb, idx: 0xbc}, + 62: {cur: 0xfc, idx: 0x4}, + 63: {cur: 0x16, idx: 0x240}, + 64: {cur: 0xeb, idx: 0xbc}, + 65: {cur: 0x16, idx: 0x240}, + 66: {cur: 0x2e, idx: 0x0}, + 67: {cur: 0x37, idx: 0x258}, + 68: {cur: 0x3a, idx: 0x0}, + 69: {cur: 0x85, idx: 0x25}, + 70: {cur: 0xc0, idx: 0x0}, + 71: {cur: 0xd2, idx: 0xb2}, + 72: {cur: 0xfc, idx: 0x4}, + 73: {cur: 0x127, idx: 0x8a}, + 74: {cur: 0xf7, idx: 0x23c}, + 75: {cur: 0x13, idx: 0x0}, + 76: {cur: 0x21, idx: 0x294}, + 77: {cur: 0x2e, idx: 0x0}, + 78: {cur: 0x3a, idx: 0x0}, + 79: {cur: 0x44, idx: 0x0}, + 80: {cur: 0x63, idx: 0x0}, + 81: {cur: 0x72, idx: 0x0}, + 82: {cur: 0x7c, idx: 0x0}, + 83: {cur: 0x7d, idx: 0x0}, + 84: {cur: 0x85, idx: 0x0}, + 85: {cur: 0x8d, idx: 0x0}, + 86: {cur: 0xb2, idx: 0x0}, + 87: {cur: 0xc0, idx: 0x0}, + 88: {cur: 0xf6, idx: 0x0}, + 89: {cur: 0xfc, idx: 0x29a}, + 90: {cur: 0x105, idx: 0x0}, + 91: {cur: 0x110, idx: 0x0}, + 92: {cur: 0x1b, idx: 0xc}, + 93: {cur: 0xeb, idx: 0xbc}, + 94: {cur: 0x44, idx: 0x25}, + 95: {cur: 0x44, idx: 0x20}, + 96: {cur: 0x13, idx: 0x2a1}, + 97: {cur: 0x2e, idx: 0x0}, + 98: {cur: 0x3a, idx: 0x2a4}, + 99: {cur: 0x44, idx: 0x0}, + 100: {cur: 0x63, idx: 0x2ad}, + 101: {cur: 0x72, idx: 0x2b3}, + 102: {cur: 0x7c, idx: 0x0}, + 103: {cur: 0x85, idx: 0x0}, + 104: {cur: 0x8d, idx: 0x0}, + 105: {cur: 0xc0, idx: 0x2bc}, + 106: {cur: 0xf6, idx: 0x0}, + 107: {cur: 0xfc, idx: 0x2c5}, + 108: {cur: 0x105, idx: 0x0}, + 109: {cur: 0x110, idx: 0x0}, + 110: {cur: 0x13, idx: 0x0}, + 111: {cur: 0x18, idx: 0x9}, + 112: {cur: 0x2e, idx: 0x0}, + 113: {cur: 0x3a, idx: 0x0}, + 114: {cur: 0x44, idx: 0x0}, + 115: {cur: 0x63, idx: 0x0}, + 116: {cur: 0x72, idx: 0x0}, + 117: {cur: 0x75, idx: 0x51}, + 118: {cur: 0x7c, idx: 0x0}, + 119: {cur: 0x85, idx: 0x25}, + 120: {cur: 0xb2, idx: 0x0}, + 121: {cur: 0xc0, idx: 0x0}, + 122: {cur: 0xd1, idx: 0x2ca}, + 123: {cur: 0xeb, idx: 0xbc}, + 124: {cur: 0xfc, idx: 0x0}, + 125: {cur: 0x110, idx: 0x0}, + 126: {cur: 0x117, idx: 0x0}, + 127: {cur: 0x18, idx: 0x2cf}, + 128: {cur: 0x4e, idx: 0x2d4}, + 129: {cur: 0x85, idx: 0x25}, + 130: {cur: 0xc9, idx: 0x2d9}, + 131: {cur: 0xd1, idx: 0x2de}, + 132: {cur: 0xf4, idx: 0x2e6}, + 133: {cur: 0x13, idx: 0xf8}, + 134: {cur: 0x2e, idx: 0x0}, + 135: {cur: 0x3a, idx: 0x0}, + 136: {cur: 0x44, idx: 0x25}, + 137: {cur: 0x5c, idx: 0x37}, + 138: {cur: 0xb2, idx: 0x0}, + 139: {cur: 0xeb, idx: 0xbc}, + 140: {cur: 0xfc, idx: 0x0}, + 141: {cur: 0x110, idx: 0x0}, + 142: {cur: 0x62, idx: 0x2eb}, + 143: {cur: 0x1b, idx: 0xc}, + 144: {cur: 0xeb, idx: 0xbc}, + 145: {cur: 0xd2, idx: 0xb2}, + 146: {cur: 0xfb, idx: 0x2f4}, + 147: {cur: 0xfc, idx: 0x4}, + 148: {cur: 0x7e, idx: 0x17b}, + 149: {cur: 0x13, idx: 0xf8}, + 150: {cur: 0x49, idx: 0x2f8}, + 151: {cur: 0x4e, idx: 0x2c}, + 152: {cur: 0x7c, idx: 0x0}, + 153: {cur: 0x7d, idx: 0x0}, + 154: {cur: 0x105, idx: 0x0}, + 155: {cur: 0x112, idx: 0x2fd}, + 156: {cur: 0xd2, idx: 0xb2}, + 157: {cur: 0x8d, idx: 0x0}, + 158: {cur: 0xeb, idx: 0xbc}, + 159: {cur: 0x13, idx: 0xf8}, + 160: {cur: 0x52, idx: 0x304}, + 161: {cur: 0xeb, idx: 0xbc}, + 162: {cur: 0xfc, idx: 0x4}, + 163: {cur: 0x86, idx: 0x308}, + 164: {cur: 0x12, idx: 0x30c}, + 165: {cur: 0x13, idx: 0xf8}, + 166: {cur: 0x20, idx: 0x310}, + 167: {cur: 0x22, idx: 0x314}, + 168: {cur: 0x50, idx: 0x31d}, + 169: {cur: 0x85, idx: 0x25}, + 170: {cur: 0xeb, idx: 0xbc}, + 171: {cur: 0xfc, idx: 0x4}, + 172: {cur: 0x5e, idx: 0x0}, + 173: {cur: 0x5e, idx: 0x0}, + 174: {cur: 0x99, idx: 0x2eb}, + 175: {cur: 0x13, idx: 0x0}, + 176: {cur: 0x85, idx: 0x25}, + 177: {cur: 0xc9, idx: 0xa6}, + 178: {cur: 0xeb, idx: 0xbc}, + 179: {cur: 0xfc, idx: 0x4}, + 180: {cur: 0x13, idx: 0xf8}, + 181: {cur: 0x33, idx: 0x332}, + 182: {cur: 0x7c, idx: 0x0}, + 183: {cur: 0x8d, idx: 0x336}, + 184: {cur: 0xeb, idx: 0x33c}, + 185: {cur: 0x109, idx: 0x0}, + 186: {cur: 0x86, idx: 0x308}, + 187: {cur: 0x13, idx: 0xf8}, + 188: {cur: 0x67, idx: 0xf2}, + 189: {cur: 0xeb, idx: 0xbc}, + 190: {cur: 0x6d, idx: 0x342}, + 191: {cur: 0xeb, idx: 0xbc}, + 192: {cur: 0xfc, idx: 0x4}, + 193: {cur: 0x85, idx: 0x25}, + 194: {cur: 0xfc, idx: 0x4}, + 195: {cur: 0x85, idx: 0x62}, + 196: {cur: 0xfc, idx: 0xcf}, + 197: {cur: 0x110, idx: 0x4}, + 198: {cur: 0x110, idx: 0x4}, + 199: {cur: 0x13, idx: 0x4}, + 200: {cur: 0x2e, idx: 0x0}, + 201: {cur: 0x3a, idx: 0x0}, + 202: {cur: 0x44, idx: 0x0}, + 203: {cur: 0x5e, idx: 0x0}, + 204: {cur: 0x63, idx: 0x0}, + 205: {cur: 0x72, idx: 0x0}, + 206: {cur: 0x7c, idx: 0x0}, + 207: {cur: 0x7d, idx: 0x0}, + 208: {cur: 0x85, idx: 0x0}, + 209: {cur: 0x8d, idx: 0x0}, + 210: {cur: 0xb2, idx: 0x0}, + 211: {cur: 0xc0, idx: 0x0}, + 212: {cur: 0xd7, idx: 0x7e}, + 213: {cur: 0xf6, idx: 0x0}, + 214: {cur: 0xfc, idx: 0x0}, + 215: {cur: 0x105, idx: 0x0}, + 216: {cur: 0x109, idx: 0x0}, + 217: {cur: 0x110, idx: 0x0}, + 218: {cur: 0x115, idx: 0x0}, + 219: {cur: 0x117, idx: 0x355}, + 220: {cur: 0x1a, idx: 0x4}, + 221: {cur: 0x24, idx: 0x359}, + 222: {cur: 0x25, idx: 0x4}, + 223: {cur: 0x32, idx: 0x4}, + 224: {cur: 0x35, idx: 0x16}, + 225: {cur: 0x39, idx: 0x4}, + 226: {cur: 0x3a, idx: 0x4}, + 227: {cur: 0x13, idx: 0x4}, + 228: {cur: 0xc0, idx: 0x4}, + 229: {cur: 0x13, idx: 0x4}, + 230: {cur: 0x52, idx: 0x304}, + 231: {cur: 0x110, idx: 0x4}, + 232: {cur: 0x59, idx: 0x231}, + 233: {cur: 0x60, idx: 0x4}, + 234: {cur: 0x61, idx: 0x3f}, + 235: {cur: 0x63, idx: 0x237}, + 236: {cur: 0x110, idx: 0x4}, + 237: {cur: 0x67, idx: 0xf2}, + 238: {cur: 0x63, idx: 0x237}, + 239: {cur: 0x68, idx: 0x3f}, + 240: {cur: 0x69, idx: 0x35d}, + 241: {cur: 0x71, idx: 0x4}, + 242: {cur: 0x83, idx: 0x4}, + 243: {cur: 0x86, idx: 0x308}, + 244: {cur: 0x13, idx: 0x4}, + 245: {cur: 0x110, idx: 0x4}, + 246: {cur: 0x8f, idx: 0x4}, + 247: {cur: 0x110, idx: 0x4}, + 248: {cur: 0x94, idx: 0x4}, + 249: {cur: 0x125, idx: 0xe9}, + 250: {cur: 0xa3, idx: 0x87}, + 251: {cur: 0xaa, idx: 0x35f}, + 252: {cur: 0x110, idx: 0x4}, + 253: {cur: 0x63, idx: 0x237}, + 254: {cur: 0xae, idx: 0x7e}, + 255: {cur: 0xb1, idx: 0x364}, + 256: {cur: 0xb5, idx: 0x94}, + 257: {cur: 0xb9, idx: 0x4}, + 258: {cur: 0x13, idx: 0x4}, + 259: {cur: 0xba, idx: 0x97}, + 260: {cur: 0x13, idx: 0x4}, + 261: {cur: 0xc0, idx: 0x4}, + 262: {cur: 0xc0, idx: 0x4}, + 263: {cur: 0xc6, idx: 0x8a}, + 264: {cur: 0xc7, idx: 0xa2}, + 265: {cur: 0xc8, idx: 0x7e}, + 266: {cur: 0xc0, idx: 0x4}, + 267: {cur: 0xd4, idx: 0xb6}, + 268: {cur: 0xd6, idx: 0x4}, + 269: {cur: 0xd7, idx: 0x367}, + 270: {cur: 0xdb, idx: 0x30}, + 271: {cur: 0xdc, idx: 0x4}, + 272: {cur: 0x63, idx: 0x237}, + 273: {cur: 0xdd, idx: 0x3f}, + 274: {cur: 0xe0, idx: 0x36a}, + 275: {cur: 0x63, idx: 0x237}, + 276: {cur: 0xe4, idx: 0x3f}, + 277: {cur: 0x8, idx: 0x36d}, + 278: {cur: 0xea, idx: 0x372}, + 279: {cur: 0xc0, idx: 0x4}, + 280: {cur: 0xf1, idx: 0xc0}, + 281: {cur: 0xf5, idx: 0x4}, + 282: {cur: 0x13, idx: 0x4}, + 283: {cur: 0xf7, idx: 0x23c}, + 284: {cur: 0xfb, idx: 0x2f4}, + 285: {cur: 0x110, idx: 0x4}, + 286: {cur: 0x107, idx: 0x374}, + 287: {cur: 0x108, idx: 0x377}, + 288: {cur: 0x125, idx: 0xe9}, + 289: {cur: 0x127, idx: 0x8a}, + 290: {cur: 0x13, idx: 0x0}, + 291: {cur: 0x2e, idx: 0x0}, + 292: {cur: 0x44, idx: 0x0}, + 293: {cur: 0x5c, idx: 0x37}, + 294: {cur: 0x63, idx: 0x0}, + 295: {cur: 0x72, idx: 0x0}, + 296: {cur: 0x7c, idx: 0x0}, + 297: {cur: 0x7d, idx: 0x0}, + 298: {cur: 0x85, idx: 0x0}, + 299: {cur: 0x8d, idx: 0x0}, + 300: {cur: 0xb2, idx: 0x0}, + 301: {cur: 0xc0, idx: 0x0}, + 302: {cur: 0xeb, idx: 0xbc}, + 303: {cur: 0xf6, idx: 0x0}, + 304: {cur: 0x109, idx: 0x0}, + 305: {cur: 0x110, idx: 0x0}, + 306: {cur: 0x115, idx: 0x0}, + 307: {cur: 0x3a, idx: 0x0}, + 308: {cur: 0x5e, idx: 0x0}, + 309: {cur: 0xeb, idx: 0x0}, + 310: {cur: 0xfc, idx: 0x0}, + 311: {cur: 0x105, idx: 0x0}, + 312: {cur: 0x11, idx: 0x4}, + 313: {cur: 0xfc, idx: 0xcf}, + 314: {cur: 0x27, idx: 0x10}, + 315: {cur: 0x2e, idx: 0x13}, + 316: {cur: 0x39, idx: 0x4}, + 317: {cur: 0x41, idx: 0x4}, + 318: {cur: 0xfc, idx: 0xcf}, + 319: {cur: 0x45, idx: 0x4}, + 320: {cur: 0xfc, idx: 0xcf}, + 321: {cur: 0x47, idx: 0x28}, + 322: {cur: 0x4b, idx: 0x4}, + 323: {cur: 0xfc, idx: 0xcf}, + 324: {cur: 0x53, idx: 0x264}, + 325: {cur: 0xfc, idx: 0xcf}, + 326: {cur: 0xfc, idx: 0x4}, + 327: {cur: 0x109, idx: 0xd7}, + 328: {cur: 0x6e, idx: 0x49}, + 329: {cur: 0x73, idx: 0x4f}, + 330: {cur: 0xb2, idx: 0x4}, + 331: {cur: 0xbc, idx: 0x9b}, + 332: {cur: 0xc2, idx: 0x387}, + 333: {cur: 0xc4, idx: 0x38b}, + 334: {cur: 0xc7, idx: 0xa2}, + 335: {cur: 0xfc, idx: 0x4}, + 336: {cur: 0xcc, idx: 0x38e}, + 337: {cur: 0xfc, idx: 0x4}, + 338: {cur: 0x85, idx: 0x25}, + 339: {cur: 0xfc, idx: 0x4}, + 340: {cur: 0xfc, idx: 0xcf}, + 341: {cur: 0x101, idx: 0x4}, + 342: {cur: 0x104, idx: 0x392}, + 343: {cur: 0x13, idx: 0xf8}, + 344: {cur: 0x57, idx: 0x30}, + 345: {cur: 0x85, idx: 0x25}, + 346: {cur: 0xeb, idx: 0xbc}, + 347: {cur: 0xfc, idx: 0x4}, + 348: {cur: 0x5c, idx: 0x37}, + 349: {cur: 0xeb, idx: 0xbc}, + 350: {cur: 0x4, idx: 0x396}, + 351: {cur: 0x3a, idx: 0x2a4}, + 352: {cur: 0x44, idx: 0x399}, + 353: {cur: 0x72, idx: 0x39e}, + 354: {cur: 0x7f, idx: 0x3a2}, + 355: {cur: 0x85, idx: 0x25}, + 356: {cur: 0xb2, idx: 0x3ab}, + 357: {cur: 0xc0, idx: 0x3af}, + 358: {cur: 0xeb, idx: 0xbc}, + 359: {cur: 0xfc, idx: 0x4}, + 360: {cur: 0x110, idx: 0x3b3}, + 361: {cur: 0x6a, idx: 0x46}, + 362: {cur: 0xab, idx: 0x3b7}, + 363: {cur: 0x13, idx: 0x0}, + 364: {cur: 0x2e, idx: 0x0}, + 365: {cur: 0x3a, idx: 0x0}, + 366: {cur: 0x44, idx: 0x0}, + 367: {cur: 0x5f, idx: 0x3ba}, + 368: {cur: 0x72, idx: 0x0}, + 369: {cur: 0x7c, idx: 0x0}, + 370: {cur: 0x7d, idx: 0x0}, + 371: {cur: 0x85, idx: 0x25}, + 372: {cur: 0x8d, idx: 0x0}, + 373: {cur: 0xb2, idx: 0x0}, + 374: {cur: 0xc0, idx: 0x0}, + 375: {cur: 0xf6, idx: 0x0}, + 376: {cur: 0xfc, idx: 0x4}, + 377: {cur: 0x105, idx: 0x0}, + 378: {cur: 0x110, idx: 0x0}, + 379: {cur: 0x117, idx: 0x0}, + 380: {cur: 0x85, idx: 0x25}, + 381: {cur: 0xc7, idx: 0xa2}, + 382: {cur: 0xeb, idx: 0xbc}, + 383: {cur: 0xfc, idx: 0x4}, + 384: {cur: 0x52, idx: 0x30}, + 385: {cur: 0x52, idx: 0x304}, + 386: {cur: 0x11, idx: 0x3bd}, + 387: {cur: 0x13, idx: 0x3c1}, + 388: {cur: 0x1d, idx: 0x3c5}, + 389: {cur: 0x25, idx: 0x3c8}, + 390: {cur: 0x26, idx: 0x3cc}, + 391: {cur: 0x32, idx: 0x3d0}, + 392: {cur: 0x39, idx: 0x3d4}, + 393: {cur: 0x3a, idx: 0x2a4}, + 394: {cur: 0x41, idx: 0x3d8}, + 395: {cur: 0x44, idx: 0x0}, + 396: {cur: 0x45, idx: 0x3dc}, + 397: {cur: 0x4d, idx: 0x3e0}, + 398: {cur: 0x60, idx: 0x3e9}, + 399: {cur: 0x61, idx: 0x3ed}, + 400: {cur: 0x62, idx: 0x2eb}, + 401: {cur: 0x63, idx: 0x3f2}, + 402: {cur: 0x68, idx: 0x3f7}, + 403: {cur: 0x72, idx: 0x0}, + 404: {cur: 0x79, idx: 0x3fc}, + 405: {cur: 0x7a, idx: 0x401}, + 406: {cur: 0x82, idx: 0x406}, + 407: {cur: 0x85, idx: 0x0}, + 408: {cur: 0x92, idx: 0x40c}, + 409: {cur: 0xad, idx: 0x411}, + 410: {cur: 0xb2, idx: 0x3ab}, + 411: {cur: 0xb9, idx: 0x416}, + 412: {cur: 0xc0, idx: 0x3af}, + 413: {cur: 0xce, idx: 0x41d}, + 414: {cur: 0xd6, idx: 0x424}, + 415: {cur: 0xdc, idx: 0x428}, + 416: {cur: 0xe2, idx: 0x42c}, + 417: {cur: 0xf5, idx: 0x430}, + 418: {cur: 0xf6, idx: 0x0}, + 419: {cur: 0xfc, idx: 0x434}, + 420: {cur: 0x101, idx: 0x438}, + 421: {cur: 0x108, idx: 0x377}, + 422: {cur: 0x110, idx: 0x0}, + 423: {cur: 0x117, idx: 0x43c}, + 424: {cur: 0x24, idx: 0x359}, + 425: {cur: 0x11, idx: 0x0}, + 426: {cur: 0x13, idx: 0x444}, + 427: {cur: 0x25, idx: 0x0}, + 428: {cur: 0x26, idx: 0x0}, + 429: {cur: 0x32, idx: 0x0}, + 430: {cur: 0x39, idx: 0x0}, + 431: {cur: 0x3a, idx: 0x4}, + 432: {cur: 0x41, idx: 0x0}, + 433: {cur: 0x44, idx: 0x20}, + 434: {cur: 0x45, idx: 0x0}, + 435: {cur: 0x60, idx: 0x0}, + 436: {cur: 0x61, idx: 0x0}, + 437: {cur: 0x63, idx: 0x3f}, + 438: {cur: 0x68, idx: 0x0}, + 439: {cur: 0x72, idx: 0x44a}, + 440: {cur: 0x7c, idx: 0x0}, + 441: {cur: 0x7d, idx: 0x0}, + 442: {cur: 0x85, idx: 0x25}, + 443: {cur: 0x8d, idx: 0x0}, + 444: {cur: 0x92, idx: 0x0}, + 445: {cur: 0xb2, idx: 0x0}, + 446: {cur: 0xb9, idx: 0x0}, + 447: {cur: 0xc0, idx: 0x450}, + 448: {cur: 0xd6, idx: 0x0}, + 449: {cur: 0xdc, idx: 0x456}, + 450: {cur: 0xe2, idx: 0x0}, + 451: {cur: 0xf5, idx: 0x0}, + 452: {cur: 0xfc, idx: 0x45c}, + 453: {cur: 0x101, idx: 0x0}, + 454: {cur: 0x105, idx: 0x0}, + 455: {cur: 0x109, idx: 0x0}, + 456: {cur: 0x115, idx: 0x0}, + 457: {cur: 0x117, idx: 0x0}, + 458: {cur: 0x3b, idx: 0x32a}, + 459: {cur: 0x51, idx: 0x22d}, + 460: {cur: 0x54, idx: 0x462}, + 461: {cur: 0x6a, idx: 0x46}, + 462: {cur: 0x76, idx: 0x465}, + 463: {cur: 0x89, idx: 0x6b}, + 464: {cur: 0x62, idx: 0x0}, + 465: {cur: 0x99, idx: 0x2eb}, + 466: {cur: 0xa3, idx: 0x87}, + 467: {cur: 0xab, idx: 0x3b7}, + 468: {cur: 0xae, idx: 0x7e}, + 469: {cur: 0xd4, idx: 0xb6}, + 470: {cur: 0xd7, idx: 0x367}, + 471: {cur: 0xe9, idx: 0x467}, + 472: {cur: 0xf0, idx: 0x46a}, + 473: {cur: 0x107, idx: 0x374}, + 474: {cur: 0x13, idx: 0xf8}, + 475: {cur: 0x3a, idx: 0x9b}, + 476: {cur: 0x60, idx: 0x16e}, + 477: {cur: 0xd6, idx: 0x28a}, + 478: {cur: 0xeb, idx: 0xbc}, + 479: {cur: 0x117, idx: 0x0}, + 480: {cur: 0x85, idx: 0x25}, + 481: {cur: 0xeb, idx: 0xbc}, + 482: {cur: 0xfc, idx: 0x4}, + 483: {cur: 0xeb, idx: 0xbc}, + 484: {cur: 0xfc, idx: 0x4}, + 485: {cur: 0x5c, idx: 0x37}, + 486: {cur: 0xb2, idx: 0x3ab}, + 487: {cur: 0xeb, idx: 0xbc}, + 488: {cur: 0xfc, idx: 0x4}, + 489: {cur: 0x12, idx: 0x30c}, + 490: {cur: 0x85, idx: 0x25}, + 491: {cur: 0xfc, idx: 0x4}, + 492: {cur: 0xeb, idx: 0xbc}, + 493: {cur: 0x86, idx: 0x308}, + 494: {cur: 0xba, idx: 0x97}, + 495: {cur: 0x67, idx: 0xf2}, + 496: {cur: 0xfc, idx: 0x4}, + 497: {cur: 0x44, idx: 0x47c}, + 498: {cur: 0x7a, idx: 0x487}, + 499: {cur: 0x85, idx: 0x25}, + 500: {cur: 0xeb, idx: 0xbc}, + 501: {cur: 0xfc, idx: 0x4}, + 502: {cur: 0xeb, idx: 0xbc}, + 503: {cur: 0xfc, idx: 0x4}, + 504: {cur: 0x13, idx: 0x0}, + 505: {cur: 0x2e, idx: 0x0}, + 506: {cur: 0x3a, idx: 0x0}, + 507: {cur: 0x44, idx: 0x0}, + 508: {cur: 0x5e, idx: 0x0}, + 509: {cur: 0x63, idx: 0x0}, + 510: {cur: 0x72, idx: 0x0}, + 511: {cur: 0x7c, idx: 0x0}, + 512: {cur: 0x7d, idx: 0x0}, + 513: {cur: 0x85, idx: 0x0}, + 514: {cur: 0x8d, idx: 0x0}, + 515: {cur: 0xb2, idx: 0x0}, + 516: {cur: 0xc0, idx: 0x0}, + 517: {cur: 0xf6, idx: 0x0}, + 518: {cur: 0xfc, idx: 0x0}, + 519: {cur: 0x105, idx: 0x0}, + 520: {cur: 0x110, idx: 0x0}, + 521: {cur: 0x117, idx: 0x0}, + 522: {cur: 0x18, idx: 0x9}, + 523: {cur: 0x13, idx: 0x0}, + 524: {cur: 0x85, idx: 0x25}, + 525: {cur: 0xc9, idx: 0xa6}, + 526: {cur: 0xeb, idx: 0xbc}, + 527: {cur: 0xfc, idx: 0x4}, + 528: {cur: 0x13, idx: 0x0}, + 529: {cur: 0x2e, idx: 0x0}, + 530: {cur: 0x3a, idx: 0x0}, + 531: {cur: 0x44, idx: 0x0}, + 532: {cur: 0x5e, idx: 0x0}, + 533: {cur: 0x63, idx: 0x0}, + 534: {cur: 0x72, idx: 0x0}, + 535: {cur: 0x77, idx: 0x54}, + 536: {cur: 0x7c, idx: 0x0}, + 537: {cur: 0x7d, idx: 0x0}, + 538: {cur: 0x85, idx: 0x25}, + 539: {cur: 0x8d, idx: 0x0}, + 540: {cur: 0xb2, idx: 0x0}, + 541: {cur: 0xc0, idx: 0x0}, + 542: {cur: 0xf6, idx: 0x0}, + 543: {cur: 0xfc, idx: 0x0}, + 544: {cur: 0x105, idx: 0x0}, + 545: {cur: 0x110, idx: 0x0}, + 546: {cur: 0x7, idx: 0x498}, + 547: {cur: 0xeb, idx: 0xbc}, + 548: {cur: 0xfc, idx: 0x4}, + 549: {cur: 0x13, idx: 0xf8}, + 550: {cur: 0x78, idx: 0x57}, + 551: {cur: 0x7d, idx: 0x7e}, + 552: {cur: 0xeb, idx: 0xbc}, + 553: {cur: 0xba, idx: 0x97}, + 554: {cur: 0x44, idx: 0x25}, + 555: {cur: 0x13, idx: 0x0}, + 556: {cur: 0x2e, idx: 0x0}, + 557: {cur: 0x3a, idx: 0x0}, + 558: {cur: 0x5e, idx: 0x0}, + 559: {cur: 0x63, idx: 0x0}, + 560: {cur: 0x7d, idx: 0x0}, + 561: {cur: 0x8d, idx: 0x0}, + 562: {cur: 0xb2, idx: 0x0}, + 563: {cur: 0xc0, idx: 0x0}, + 564: {cur: 0xf6, idx: 0x0}, + 565: {cur: 0xfc, idx: 0x0}, + 566: {cur: 0x105, idx: 0x0}, + 567: {cur: 0x2e, idx: 0x0}, + 568: {cur: 0x72, idx: 0x0}, + 569: {cur: 0x85, idx: 0x0}, + 570: {cur: 0x8d, idx: 0x0}, + 571: {cur: 0xb2, idx: 0x0}, + 572: {cur: 0xeb, idx: 0xbc}, + 573: {cur: 0xf6, idx: 0x0}, + 574: {cur: 0xfc, idx: 0x0}, + 575: {cur: 0x44, idx: 0x49f}, + 576: {cur: 0x85, idx: 0x4a3}, + 577: {cur: 0xfc, idx: 0x4}, + 578: {cur: 0xf7, idx: 0x23c}, + 579: {cur: 0x13, idx: 0x0}, + 580: {cur: 0x44, idx: 0x0}, + 581: {cur: 0x65, idx: 0x42}, + 582: {cur: 0x72, idx: 0x0}, + 583: {cur: 0x7c, idx: 0x0}, + 584: {cur: 0x7d, idx: 0x0}, + 585: {cur: 0x85, idx: 0x0}, + 586: {cur: 0x8d, idx: 0x0}, + 587: {cur: 0xc0, idx: 0x0}, + 588: {cur: 0x105, idx: 0x0}, + 589: {cur: 0x54, idx: 0x462}, + 590: {cur: 0x86, idx: 0x308}, + 591: {cur: 0xf7, idx: 0x23c}, + 592: {cur: 0x13, idx: 0xf8}, + 593: {cur: 0x4c, idx: 0x4ae}, + 594: {cur: 0xeb, idx: 0xbc}, + 595: {cur: 0x86, idx: 0x308}, + 596: {cur: 0x90, idx: 0x72}, + 597: {cur: 0xd2, idx: 0xb2}, + 598: {cur: 0xeb, idx: 0xbc}, + 599: {cur: 0xfc, idx: 0x4}, + 600: {cur: 0x52, idx: 0x304}, + 601: {cur: 0x86, idx: 0x308}, + 602: {cur: 0x88, idx: 0x67}, + 603: {cur: 0xeb, idx: 0xbc}, + 604: {cur: 0xfc, idx: 0x4}, + 605: {cur: 0xeb, idx: 0xbc}, + 606: {cur: 0xfc, idx: 0x4}, + 607: {cur: 0x13, idx: 0xf8}, + 608: {cur: 0xf7, idx: 0x23c}, + 609: {cur: 0x13, idx: 0x0}, + 610: {cur: 0x2e, idx: 0x0}, + 611: {cur: 0x3a, idx: 0x0}, + 612: {cur: 0x63, idx: 0x0}, + 613: {cur: 0x72, idx: 0x0}, + 614: {cur: 0x7c, idx: 0x0}, + 615: {cur: 0x7d, idx: 0x0}, + 616: {cur: 0x87, idx: 0x4bf}, + 617: {cur: 0x8d, idx: 0x0}, + 618: {cur: 0xb2, idx: 0x0}, + 619: {cur: 0xc0, idx: 0x0}, + 620: {cur: 0xeb, idx: 0xbc}, + 621: {cur: 0xf6, idx: 0x0}, + 622: {cur: 0xfc, idx: 0x0}, + 623: {cur: 0x110, idx: 0x0}, + 624: {cur: 0xf7, idx: 0x23c}, + 625: {cur: 0x12, idx: 0x30c}, + 626: {cur: 0x13, idx: 0xf8}, + 627: {cur: 0x85, idx: 0x25}, + 628: {cur: 0xeb, idx: 0xbc}, + 629: {cur: 0xfc, idx: 0x4}, + 630: {cur: 0xfb, idx: 0x2f4}, + 631: {cur: 0xfc, idx: 0x4}, + 632: {cur: 0x3b, idx: 0x32a}, + 633: {cur: 0x9, idx: 0x1}, + 634: {cur: 0x91, idx: 0x76}, + 635: {cur: 0xeb, idx: 0xbc}, + 636: {cur: 0x7e, idx: 0x17b}, + 637: {cur: 0x13, idx: 0x0}, + 638: {cur: 0x2e, idx: 0x0}, + 639: {cur: 0x3a, idx: 0x0}, + 640: {cur: 0x44, idx: 0x0}, + 641: {cur: 0x63, idx: 0x0}, + 642: {cur: 0x72, idx: 0x0}, + 643: {cur: 0x7c, idx: 0x0}, + 644: {cur: 0x7d, idx: 0x0}, + 645: {cur: 0x85, idx: 0x0}, + 646: {cur: 0x8d, idx: 0x0}, + 647: {cur: 0xb2, idx: 0x0}, + 648: {cur: 0xc0, idx: 0x0}, + 649: {cur: 0xf6, idx: 0x0}, + 650: {cur: 0xfc, idx: 0x0}, + 651: {cur: 0x105, idx: 0x0}, + 652: {cur: 0x109, idx: 0x0}, + 653: {cur: 0x110, idx: 0x0}, + 654: {cur: 0x115, idx: 0x0}, + 655: {cur: 0x117, idx: 0x0}, + 656: {cur: 0x3b, idx: 0x32a}, + 657: {cur: 0x86, idx: 0x308}, + 658: {cur: 0x86, idx: 0x308}, + 659: {cur: 0x13, idx: 0xf8}, + 660: {cur: 0x85, idx: 0x25}, + 661: {cur: 0x9b, idx: 0x84}, + 662: {cur: 0xeb, idx: 0xbc}, + 663: {cur: 0xfc, idx: 0x4}, + 664: {cur: 0x86, idx: 0x308}, + 665: {cur: 0xf7, idx: 0x23c}, + 666: {cur: 0x86, idx: 0x308}, + 667: {cur: 0xae, idx: 0x7e}, + 668: {cur: 0xa3, idx: 0x87}, + 669: {cur: 0xb8, idx: 0x4cc}, + 670: {cur: 0x13, idx: 0x0}, + 671: {cur: 0x44, idx: 0x0}, + 672: {cur: 0x63, idx: 0x0}, + 673: {cur: 0x72, idx: 0x0}, + 674: {cur: 0x7c, idx: 0x0}, + 675: {cur: 0x7d, idx: 0x0}, + 676: {cur: 0x85, idx: 0x0}, + 677: {cur: 0x8d, idx: 0x0}, + 678: {cur: 0xa5, idx: 0x4d0}, + 679: {cur: 0xc0, idx: 0x0}, + 680: {cur: 0xf6, idx: 0x0}, + 681: {cur: 0x105, idx: 0x0}, + 682: {cur: 0x85, idx: 0x25}, + 683: {cur: 0xeb, idx: 0xbc}, + 684: {cur: 0xfc, idx: 0x4}, + 685: {cur: 0xa9, idx: 0x8c}, + 686: {cur: 0xeb, idx: 0xbc}, + 687: {cur: 0xfc, idx: 0x4}, + 688: {cur: 0xeb, idx: 0xbc}, + 689: {cur: 0xfc, idx: 0x4}, + 690: {cur: 0x3a, idx: 0x0}, + 691: {cur: 0xb2, idx: 0x0}, + 692: {cur: 0xb5, idx: 0x94}, + 693: {cur: 0xfc, idx: 0x0}, + 694: {cur: 0x26, idx: 0x4}, + 695: {cur: 0xdc, idx: 0x4}, + 696: {cur: 0x8, idx: 0x4dc}, + 697: {cur: 0x14, idx: 0x4e0}, + 698: {cur: 0x76, idx: 0x465}, + 699: {cur: 0xa8, idx: 0x8a}, + 700: {cur: 0xc2, idx: 0x387}, + 701: {cur: 0xeb, idx: 0xbc}, + 702: {cur: 0xf5, idx: 0x21b}, + 703: {cur: 0xfc, idx: 0x4}, + 704: {cur: 0xb9, idx: 0x4}, + 705: {cur: 0x13, idx: 0x0}, + 706: {cur: 0x2e, idx: 0x0}, + 707: {cur: 0x3a, idx: 0x0}, + 708: {cur: 0x44, idx: 0x0}, + 709: {cur: 0x72, idx: 0x0}, + 710: {cur: 0x7c, idx: 0x0}, + 711: {cur: 0x7d, idx: 0x0}, + 712: {cur: 0x85, idx: 0x0}, + 713: {cur: 0x8d, idx: 0x0}, + 714: {cur: 0xb2, idx: 0x0}, + 715: {cur: 0xbe, idx: 0x30}, + 716: {cur: 0xc0, idx: 0x0}, + 717: {cur: 0xf6, idx: 0x0}, + 718: {cur: 0xfc, idx: 0x0}, + 719: {cur: 0x105, idx: 0x0}, + 720: {cur: 0x109, idx: 0x0}, + 721: {cur: 0x110, idx: 0x0}, + 722: {cur: 0x117, idx: 0x0}, + 723: {cur: 0xbf, idx: 0x4e4}, + 724: {cur: 0xeb, idx: 0xbc}, + 725: {cur: 0x13, idx: 0xf8}, + 726: {cur: 0x3a, idx: 0x9b}, + 727: {cur: 0x60, idx: 0x16e}, + 728: {cur: 0xd6, idx: 0x28a}, + 729: {cur: 0xeb, idx: 0xbc}, + 730: {cur: 0x117, idx: 0x0}, + 731: {cur: 0x14, idx: 0x4f8}, + 732: {cur: 0xfc, idx: 0x4}, + 733: {cur: 0x8, idx: 0x36d}, + 734: {cur: 0xe2, idx: 0x4}, + 735: {cur: 0x8, idx: 0x36d}, + 736: {cur: 0x13, idx: 0x0}, + 737: {cur: 0x2e, idx: 0x0}, + 738: {cur: 0x3a, idx: 0x0}, + 739: {cur: 0x44, idx: 0x0}, + 740: {cur: 0x63, idx: 0x0}, + 741: {cur: 0x72, idx: 0x0}, + 742: {cur: 0x7c, idx: 0x0}, + 743: {cur: 0x7d, idx: 0x0}, + 744: {cur: 0x85, idx: 0x0}, + 745: {cur: 0x8d, idx: 0x0}, + 746: {cur: 0xb2, idx: 0x0}, + 747: {cur: 0xbe, idx: 0x30}, + 748: {cur: 0xc0, idx: 0x0}, + 749: {cur: 0xf6, idx: 0x0}, + 750: {cur: 0xfc, idx: 0x0}, + 751: {cur: 0x105, idx: 0x0}, + 752: {cur: 0x109, idx: 0x0}, + 753: {cur: 0x110, idx: 0x0}, + 754: {cur: 0x117, idx: 0x0}, + 755: {cur: 0x63, idx: 0x237}, + 756: {cur: 0xe4, idx: 0x3f}, + 757: {cur: 0xfb, idx: 0x2f4}, + 758: {cur: 0x5d, idx: 0x258}, + 759: {cur: 0x86, idx: 0x308}, + 760: {cur: 0x85, idx: 0x25}, + 761: {cur: 0xfc, idx: 0x4}, + 762: {cur: 0x65, idx: 0x42}, + 763: {cur: 0xfc, idx: 0x4}, + 764: {cur: 0x65, idx: 0x0}, + 765: {cur: 0xd2, idx: 0xb2}, + 766: {cur: 0xeb, idx: 0xbc}, + 767: {cur: 0xc8, idx: 0x4fd}, + 768: {cur: 0x13, idx: 0x0}, + 769: {cur: 0x3a, idx: 0x0}, + 770: {cur: 0x44, idx: 0x0}, + 771: {cur: 0x63, idx: 0x0}, + 772: {cur: 0x72, idx: 0x0}, + 773: {cur: 0x7c, idx: 0x0}, + 774: {cur: 0x7d, idx: 0x0}, + 775: {cur: 0x85, idx: 0x0}, + 776: {cur: 0x8d, idx: 0x0}, + 777: {cur: 0xb2, idx: 0x0}, + 778: {cur: 0xc0, idx: 0x0}, + 779: {cur: 0xc9, idx: 0xa6}, + 780: {cur: 0xf6, idx: 0x0}, + 781: {cur: 0xfc, idx: 0x0}, + 782: {cur: 0x105, idx: 0x0}, + 783: {cur: 0x4, idx: 0x396}, + 784: {cur: 0x13, idx: 0xf8}, + 785: {cur: 0xcb, idx: 0x504}, + 786: {cur: 0xeb, idx: 0xbc}, + 787: {cur: 0x9, idx: 0x1}, + 788: {cur: 0x4c, idx: 0x4ae}, + 789: {cur: 0xcb, idx: 0x509}, + 790: {cur: 0x99, idx: 0x2eb}, + 791: {cur: 0xaa, idx: 0x35f}, + 792: {cur: 0xb8, idx: 0x4cc}, + 793: {cur: 0xcb, idx: 0x4ae}, + 794: {cur: 0xe5, idx: 0xb9}, + 795: {cur: 0xc4, idx: 0x38b}, + 796: {cur: 0x27, idx: 0x10}, + 797: {cur: 0xc4, idx: 0x0}, + 798: {cur: 0xc4, idx: 0x0}, + 799: {cur: 0xfc, idx: 0x4}, + 800: {cur: 0x24, idx: 0x359}, + 801: {cur: 0x13, idx: 0x0}, + 802: {cur: 0x2e, idx: 0x0}, + 803: {cur: 0x3a, idx: 0x0}, + 804: {cur: 0x44, idx: 0x0}, + 805: {cur: 0x5e, idx: 0x0}, + 806: {cur: 0x63, idx: 0x0}, + 807: {cur: 0x72, idx: 0x0}, + 808: {cur: 0x7c, idx: 0x0}, + 809: {cur: 0x7d, idx: 0x0}, + 810: {cur: 0x85, idx: 0x0}, + 811: {cur: 0x8d, idx: 0x0}, + 812: {cur: 0xb2, idx: 0x0}, + 813: {cur: 0xc0, idx: 0x0}, + 814: {cur: 0xf6, idx: 0x0}, + 815: {cur: 0xfc, idx: 0x0}, + 816: {cur: 0x105, idx: 0x0}, + 817: {cur: 0x110, idx: 0x0}, + 818: {cur: 0xa2, idx: 0x4f}, + 819: {cur: 0xf7, idx: 0x23c}, + 820: {cur: 0x0, idx: 0x510}, + 821: {cur: 0x85, idx: 0x25}, + 822: {cur: 0xd2, idx: 0xb2}, + 823: {cur: 0xd3, idx: 0x18}, + 824: {cur: 0xeb, idx: 0xbc}, + 825: {cur: 0xef, idx: 0x519}, + 826: {cur: 0xf8, idx: 0xcb}, + 827: {cur: 0xfc, idx: 0x4}, + 828: {cur: 0x37, idx: 0x258}, + 829: {cur: 0xd3, idx: 0x0}, + 830: {cur: 0x87, idx: 0x4bf}, + 831: {cur: 0x90, idx: 0x72}, + 832: {cur: 0xa2, idx: 0x4f}, + 833: {cur: 0xd4, idx: 0xb6}, + 834: {cur: 0xf7, idx: 0x23c}, + 835: {cur: 0xd2, idx: 0xb2}, + 836: {cur: 0x86, idx: 0x308}, + 837: {cur: 0xf7, idx: 0x23c}, + 838: {cur: 0xc8, idx: 0x7e}, + 839: {cur: 0x52, idx: 0x520}, + 840: {cur: 0xbe, idx: 0x30}, + 841: {cur: 0xdb, idx: 0x524}, + 842: {cur: 0xeb, idx: 0xbc}, + 843: {cur: 0xbe, idx: 0x528}, + 844: {cur: 0xdb, idx: 0x30}, + 845: {cur: 0xb8, idx: 0x4cc}, + 846: {cur: 0x93, idx: 0x52c}, + 847: {cur: 0xeb, idx: 0xbc}, + 848: {cur: 0x115, idx: 0x534}, + 849: {cur: 0x13, idx: 0x0}, + 850: {cur: 0x2e, idx: 0x0}, + 851: {cur: 0x3a, idx: 0x0}, + 852: {cur: 0x44, idx: 0x0}, + 853: {cur: 0x63, idx: 0x0}, + 854: {cur: 0x72, idx: 0x0}, + 855: {cur: 0x7c, idx: 0x544}, + 856: {cur: 0x7d, idx: 0x0}, + 857: {cur: 0x85, idx: 0x0}, + 858: {cur: 0x8d, idx: 0x0}, + 859: {cur: 0xc0, idx: 0x0}, + 860: {cur: 0xf6, idx: 0x0}, + 861: {cur: 0xfc, idx: 0x0}, + 862: {cur: 0x105, idx: 0x0}, + 863: {cur: 0x13, idx: 0x0}, + 864: {cur: 0x2e, idx: 0x0}, + 865: {cur: 0x3a, idx: 0x0}, + 866: {cur: 0x63, idx: 0x0}, + 867: {cur: 0x85, idx: 0x25}, + 868: {cur: 0xb2, idx: 0x0}, + 869: {cur: 0xc0, idx: 0x0}, + 870: {cur: 0xf6, idx: 0x0}, + 871: {cur: 0xfc, idx: 0x4}, + 872: {cur: 0x110, idx: 0x0}, + 873: {cur: 0xe1, idx: 0x235}, + 874: {cur: 0x51, idx: 0x22d}, + 875: {cur: 0x5d, idx: 0x258}, + 876: {cur: 0x86, idx: 0x308}, + 877: {cur: 0x6, idx: 0x548}, + 878: {cur: 0xeb, idx: 0xbc}, + 879: {cur: 0xa5, idx: 0x54e}, + 880: {cur: 0x13, idx: 0x0}, + 881: {cur: 0x18, idx: 0x2cf}, + 882: {cur: 0x85, idx: 0x25}, + 883: {cur: 0x8d, idx: 0x0}, + 884: {cur: 0xc0, idx: 0x0}, + 885: {cur: 0x105, idx: 0x0}, + 886: {cur: 0x13, idx: 0x0}, + 887: {cur: 0x18, idx: 0x9}, + 888: {cur: 0x85, idx: 0x25}, + 889: {cur: 0x8d, idx: 0x0}, + 890: {cur: 0xc0, idx: 0x0}, + 891: {cur: 0x105, idx: 0x0}, + 892: {cur: 0x13, idx: 0x0}, + 893: {cur: 0x1a, idx: 0x24c}, + 894: {cur: 0x25, idx: 0x13a}, + 895: {cur: 0x2e, idx: 0x555}, + 896: {cur: 0x32, idx: 0x142}, + 897: {cur: 0x39, idx: 0x146}, + 898: {cur: 0x44, idx: 0x0}, + 899: {cur: 0x52, idx: 0x520}, + 900: {cur: 0x53, idx: 0x264}, + 901: {cur: 0x57, idx: 0x559}, + 902: {cur: 0x58, idx: 0x55d}, + 903: {cur: 0x63, idx: 0x0}, + 904: {cur: 0x72, idx: 0x0}, + 905: {cur: 0x79, idx: 0x562}, + 906: {cur: 0x7d, idx: 0x0}, + 907: {cur: 0x81, idx: 0x567}, + 908: {cur: 0x83, idx: 0x18c}, + 909: {cur: 0x85, idx: 0x0}, + 910: {cur: 0x8d, idx: 0x0}, + 911: {cur: 0xbe, idx: 0x528}, + 912: {cur: 0xc0, idx: 0x0}, + 913: {cur: 0xdb, idx: 0x30}, + 914: {cur: 0xf6, idx: 0x0}, + 915: {cur: 0x105, idx: 0x0}, + 916: {cur: 0x86, idx: 0x308}, + 917: {cur: 0xeb, idx: 0xbc}, + 918: {cur: 0xf7, idx: 0x23c}, + 919: {cur: 0x3b, idx: 0x32a}, + 920: {cur: 0xfb, idx: 0x2f4}, + 921: {cur: 0x85, idx: 0x25}, + 922: {cur: 0xeb, idx: 0xbc}, + 923: {cur: 0xfc, idx: 0x4}, + 924: {cur: 0x93, idx: 0x56b}, + 925: {cur: 0xb5, idx: 0x94}, + 926: {cur: 0xdc, idx: 0x28e}, + 927: {cur: 0xb5, idx: 0x94}, + 928: {cur: 0xdc, idx: 0x4}, + 929: {cur: 0xfc, idx: 0xcf}, + 930: {cur: 0xeb, idx: 0xbc}, + 931: {cur: 0xfc, idx: 0x4}, + 932: {cur: 0xfb, idx: 0x2f4}, + 933: {cur: 0x86, idx: 0x308}, + 934: {cur: 0xed, idx: 0x56f}, + 935: {cur: 0xfc, idx: 0x4}, + 936: {cur: 0x13, idx: 0xf8}, + 937: {cur: 0x85, idx: 0x25}, + 938: {cur: 0x5d, idx: 0x258}, + 939: {cur: 0x59, idx: 0x231}, + 940: {cur: 0x5e, idx: 0x0}, + 941: {cur: 0x63, idx: 0x0}, + 942: {cur: 0x13, idx: 0x577}, + 943: {cur: 0xc0, idx: 0x57c}, + 944: {cur: 0xf1, idx: 0xc0}, + 945: {cur: 0x13, idx: 0xf8}, + 946: {cur: 0x85, idx: 0x25}, + 947: {cur: 0xeb, idx: 0xbc}, + 948: {cur: 0xf4, idx: 0xc3}, + 949: {cur: 0xfc, idx: 0x4}, + 950: {cur: 0xd2, idx: 0xb2}, + 951: {cur: 0xfc, idx: 0x4}, + 952: {cur: 0x44, idx: 0x4a3}, + 953: {cur: 0xfc, idx: 0x4}, + 954: {cur: 0x13, idx: 0x0}, + 955: {cur: 0x2e, idx: 0x0}, + 956: {cur: 0x3a, idx: 0x0}, + 957: {cur: 0x44, idx: 0x0}, + 958: {cur: 0x5e, idx: 0x0}, + 959: {cur: 0x63, idx: 0x0}, + 960: {cur: 0x72, idx: 0x0}, + 961: {cur: 0x7c, idx: 0x0}, + 962: {cur: 0x7d, idx: 0x0}, + 963: {cur: 0x85, idx: 0x25}, + 964: {cur: 0x8d, idx: 0x0}, + 965: {cur: 0xb2, idx: 0x0}, + 966: {cur: 0xc0, idx: 0x0}, + 967: {cur: 0xf6, idx: 0x0}, + 968: {cur: 0xf8, idx: 0xcb}, + 969: {cur: 0xf9, idx: 0x581}, + 970: {cur: 0xfc, idx: 0x0}, + 971: {cur: 0x105, idx: 0x0}, + 972: {cur: 0x110, idx: 0x0}, + 973: {cur: 0xc8, idx: 0x7e}, + 974: {cur: 0xeb, idx: 0xbc}, + 975: {cur: 0xfc, idx: 0x4}, + 976: {cur: 0xc8, idx: 0x0}, + 977: {cur: 0x102, idx: 0x589}, + 978: {cur: 0x4, idx: 0x396}, + 979: {cur: 0xeb, idx: 0xbc}, + 980: {cur: 0x102, idx: 0x58f}, + 981: {cur: 0x94, idx: 0x4}, + 982: {cur: 0x94, idx: 0x4}, + 983: {cur: 0x13, idx: 0xf8}, + 984: {cur: 0xeb, idx: 0xbc}, + 985: {cur: 0xf7, idx: 0x23c}, + 986: {cur: 0x85, idx: 0x25}, + 987: {cur: 0xfc, idx: 0x4}, + 988: {cur: 0xfc, idx: 0x4}, + 989: {cur: 0xfb, idx: 0x2f4}, + 990: {cur: 0xba, idx: 0x97}, + 991: {cur: 0x13, idx: 0xf8}, + 992: {cur: 0x85, idx: 0x25}, + 993: {cur: 0x8d, idx: 0x596}, + 994: {cur: 0x13, idx: 0xf8}, + 995: {cur: 0x44, idx: 0x4a3}, + 996: {cur: 0x8d, idx: 0x596}, + 997: {cur: 0x13, idx: 0xf8}, + 998: {cur: 0x44, idx: 0x4a3}, + 999: {cur: 0x7b, idx: 0x59a}, + 1000: {cur: 0x8d, idx: 0x596}, + 1001: {cur: 0x44, idx: 0x20}, + 1002: {cur: 0x44, idx: 0x20}, + 1003: {cur: 0xaa, idx: 0x35f}, + 1004: {cur: 0x44, idx: 0x20}, + 1005: {cur: 0xdc, idx: 0x4}, + 1006: {cur: 0x13, idx: 0xf8}, + 1007: {cur: 0x85, idx: 0x25}, + 1008: {cur: 0x8d, idx: 0x596}, + 1009: {cur: 0xf6, idx: 0x4}, + 1010: {cur: 0x8d, idx: 0x6e}, + 1011: {cur: 0xf6, idx: 0xc7}, + 1012: {cur: 0xaa, idx: 0x35f}, + 1013: {cur: 0xeb, idx: 0xbc}, + 1014: {cur: 0x125, idx: 0xe9}, +} // Size: 4084 bytes -var narrowLangIndex = []uint16{ // 753 elements +var narrowLangIndex = []uint16{ // 776 elements // Entry 0 - 3F - 0x0000, 0x0062, 0x0062, 0x0062, 0x0063, 0x0063, 0x0063, 0x0063, - 0x0063, 0x0063, 0x0063, 0x0064, 0x0064, 0x0080, 0x0080, 0x0081, - 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, - 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, - 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, - 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x008a, - 0x008a, 0x008d, 0x008d, 0x008d, 0x008d, 0x008d, 0x008d, 0x008d, - 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00d6, 0x00d6, + 0x0000, 0x0062, 0x0064, 0x0064, 0x0064, 0x0064, 0x0064, 0x0064, + 0x0064, 0x0065, 0x0065, 0x0081, 0x0081, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x008b, 0x008b, 0x008e, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x00a8, 0x00a8, + 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, // Entry 40 - 7F - 0x00d6, 0x00d6, 0x00d6, 0x00d7, 0x00d7, 0x00d7, 0x00d7, 0x00d7, - 0x00d7, 0x00da, 0x00da, 0x00da, 0x00da, 0x00db, 0x00db, 0x00db, - 0x00db, 0x00db, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, - 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, - 0x00de, 0x00de, 0x00de, 0x00de, 0x00e4, 0x00e4, 0x00ea, 0x00ea, - 0x00ea, 0x00ea, 0x00ea, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, - 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, - 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, + 0x00d8, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00dc, + 0x00dc, 0x00dc, 0x00dc, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00df, 0x00df, 0x00df, + 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, + 0x00e0, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e8, 0x00e8, 0x00ee, + 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00f7, 0x00f7, 0x00f7, 0x00f8, + 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, + 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, // Entry 80 - BF - 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, - 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00fb, 0x00fb, 0x00fb, - 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, - 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, - 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, - 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, - 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, - 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, + 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, + 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, // Entry C0 - FF - 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, - 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, - 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, - 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, - 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, - 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, - 0x00fb, 0x00fe, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0103, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, + 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, // Entry 100 - 13F - 0x0100, 0x0100, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, - 0x0105, 0x0105, 0x0106, 0x0106, 0x0107, 0x0108, 0x0108, 0x0109, - 0x0109, 0x0109, 0x0109, 0x0109, 0x0109, 0x0109, 0x0109, 0x0109, - 0x0109, 0x0109, 0x0109, 0x0165, 0x0165, 0x0166, 0x0166, 0x0166, - 0x0166, 0x0166, 0x016e, 0x016e, 0x016e, 0x016e, 0x016e, 0x016e, - 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, - 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, - 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, + 0x0108, 0x0108, 0x0108, 0x0108, 0x010d, 0x010d, 0x010d, 0x010d, + 0x010d, 0x010d, 0x010d, 0x010d, 0x0111, 0x0111, 0x0112, 0x0113, + 0x0113, 0x0114, 0x0114, 0x0114, 0x0114, 0x0114, 0x0114, 0x0114, + 0x0114, 0x0114, 0x0114, 0x0114, 0x0114, 0x0171, 0x0171, 0x0172, + 0x0172, 0x0172, 0x0172, 0x0172, 0x017a, 0x017a, 0x017a, 0x017a, + 0x017a, 0x017a, 0x017f, 0x017f, 0x017f, 0x017f, 0x017f, 0x017f, + 0x017f, 0x017f, 0x017f, 0x017f, 0x017f, 0x017f, 0x017f, 0x017f, + 0x017f, 0x017f, 0x017f, 0x017f, 0x017f, 0x017f, 0x017f, 0x017f, // Entry 140 - 17F - 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, - 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, - 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0173, 0x0173, 0x0174, - 0x0174, 0x0178, 0x0178, 0x0178, 0x0178, 0x0178, 0x0178, 0x017a, - 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, - 0x017a, 0x017a, 0x017a, 0x017a, 0x017b, 0x017b, 0x017c, 0x017c, - 0x017d, 0x017d, 0x017d, 0x017d, 0x017d, 0x017e, 0x017e, 0x017f, - 0x017f, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0181, + 0x017f, 0x017f, 0x017f, 0x017f, 0x017f, 0x017f, 0x017f, 0x017f, + 0x017f, 0x017f, 0x017f, 0x017f, 0x017f, 0x017f, 0x017f, 0x017f, + 0x017f, 0x017f, 0x017f, 0x017f, 0x017f, 0x017f, 0x017f, 0x0180, + 0x0180, 0x0182, 0x0182, 0x0185, 0x0185, 0x0185, 0x0185, 0x0185, + 0x0185, 0x0187, 0x0187, 0x0187, 0x0187, 0x0187, 0x0187, 0x0187, + 0x0187, 0x0187, 0x0187, 0x0187, 0x0187, 0x0187, 0x0188, 0x0188, + 0x018a, 0x018a, 0x018b, 0x018b, 0x018b, 0x018b, 0x018b, 0x018c, + 0x018c, 0x018d, 0x018d, 0x018e, 0x018e, 0x018e, 0x018e, 0x018e, // Entry 180 - 1BF - 0x0181, 0x0186, 0x0186, 0x0186, 0x0186, 0x0186, 0x0188, 0x0188, - 0x0188, 0x0188, 0x0188, 0x0188, 0x0188, 0x0188, 0x0189, 0x0189, - 0x0189, 0x0189, 0x0189, 0x0189, 0x0189, 0x0189, 0x0189, 0x0189, - 0x0189, 0x0189, 0x0189, 0x0189, 0x0189, 0x0189, 0x018a, 0x018a, - 0x018a, 0x018a, 0x018a, 0x018a, 0x018a, 0x018a, 0x018b, 0x018b, - 0x018c, 0x018c, 0x018e, 0x018e, 0x018e, 0x018e, 0x018e, 0x018e, - 0x018e, 0x018e, 0x018e, 0x018e, 0x018e, 0x018e, 0x018e, 0x018e, - 0x018e, 0x018e, 0x0199, 0x0199, 0x0199, 0x0199, 0x019a, 0x019a, + 0x018e, 0x018e, 0x018e, 0x018f, 0x018f, 0x0193, 0x0193, 0x0193, + 0x0193, 0x0193, 0x0193, 0x0193, 0x0196, 0x0196, 0x0196, 0x0196, + 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, 0x0197, 0x0197, + 0x0197, 0x0197, 0x0197, 0x0197, 0x0197, 0x0197, 0x0197, 0x0197, + 0x0197, 0x0197, 0x0197, 0x0197, 0x0197, 0x0197, 0x0198, 0x0198, + 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0199, 0x0199, + 0x019b, 0x019b, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, + 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, // Entry 1C0 - 1FF - 0x019a, 0x019a, 0x019a, 0x019a, 0x019a, 0x019a, 0x019a, 0x019a, - 0x019a, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x01a6, 0x01a6, - 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a7, 0x01a7, - 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, - 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a8, 0x01a8, 0x01a9, - 0x01a9, 0x01ab, 0x01ab, 0x01ac, 0x01ac, 0x01ad, 0x01ad, 0x01ad, - 0x01ad, 0x01ad, 0x01ad, 0x01ad, 0x01ad, 0x01af, 0x01af, 0x01af, - 0x01af, 0x01af, 0x01af, 0x01af, 0x01b1, 0x01b1, 0x01b1, 0x01b1, + 0x019d, 0x019d, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a9, 0x01a9, + 0x01a9, 0x01a9, 0x01a9, 0x01a9, 0x01a9, 0x01a9, 0x01a9, 0x01a9, + 0x01a9, 0x01aa, 0x01aa, 0x01aa, 0x01aa, 0x01aa, 0x01b5, 0x01b5, + 0x01b5, 0x01b5, 0x01b5, 0x01b5, 0x01b5, 0x01b5, 0x01b6, 0x01b6, + 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, + 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b7, 0x01b7, 0x01b8, + 0x01b8, 0x01ba, 0x01ba, 0x01ba, 0x01bb, 0x01bb, 0x01bc, 0x01bc, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01be, 0x01be, // Entry 200 - 23F - 0x01b1, 0x01b1, 0x01b1, 0x01b1, 0x01b2, 0x01b2, 0x01b2, 0x01b3, - 0x01b3, 0x01b3, 0x01b3, 0x01b3, 0x01b3, 0x01b3, 0x01b3, 0x01b3, - 0x01b3, 0x01b3, 0x01b3, 0x01b3, 0x01b3, 0x01b3, 0x01b3, 0x01b3, - 0x01b3, 0x01b3, 0x01b3, 0x01b3, 0x01b3, 0x01b3, 0x01b3, 0x01b3, - 0x01b3, 0x01b3, 0x01b3, 0x01b3, 0x01b3, 0x01b3, 0x01b4, 0x01b4, - 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b5, 0x01b5, 0x01b5, 0x01b5, - 0x01b5, 0x01b5, 0x01b7, 0x01b7, 0x01b7, 0x01b7, 0x01b7, 0x01b7, - 0x01b7, 0x01b7, 0x01b7, 0x01b7, 0x01b7, 0x01b7, 0x01b7, 0x01b7, + 0x01be, 0x01be, 0x01be, 0x01be, 0x01be, 0x01c0, 0x01c0, 0x01c0, + 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c1, 0x01c1, 0x01c1, + 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01c2, + 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01c2, + 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01c2, + 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01c3, + 0x01c3, 0x01c3, 0x01c3, 0x01c3, 0x01c3, 0x01c5, 0x01c5, 0x01c5, + 0x01c5, 0x01c5, 0x01c5, 0x01c7, 0x01c7, 0x01c7, 0x01c7, 0x01c7, // Entry 240 - 27F - 0x01b7, 0x01b7, 0x01b7, 0x01b7, 0x01b7, 0x01b7, 0x01b7, 0x01b8, - 0x01b8, 0x01b8, 0x01b8, 0x01b8, 0x01bb, 0x01bc, 0x01bc, 0x01bc, - 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, - 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, - 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, - 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01be, 0x01be, 0x01bf, - 0x01bf, 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c0, - 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c0, - // Entry 280 - 2BF - 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c2, 0x01c2, 0x01c2, 0x01c2, - 0x01c2, 0x01c2, 0x01c5, 0x01c5, 0x01c5, 0x01c5, 0x01c5, 0x01c5, - 0x01c5, 0x01c5, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c9, 0x01c9, - 0x01c9, 0x01c9, 0x01c9, 0x01c9, 0x01ca, 0x01ca, 0x01ca, 0x01ca, - 0x01ca, 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01cc, 0x01cc, + 0x01c7, 0x01c7, 0x01c7, 0x01c7, 0x01c7, 0x01c7, 0x01c7, 0x01c7, + 0x01c7, 0x01c7, 0x01c7, 0x01c7, 0x01c7, 0x01c7, 0x01c7, 0x01c7, + 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01cb, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, - 0x01cc, 0x01ce, 0x01ce, 0x01ce, 0x01ce, 0x01ce, 0x01ce, 0x01ce, - 0x01ce, 0x01ce, 0x01ce, 0x01cf, 0x01cf, 0x01d0, 0x01d0, 0x01d0, - // Entry 2C0 - 2FF + 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, + 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, + 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, + 0x01cc, 0x01ce, 0x01ce, 0x01cf, 0x01cf, 0x01d0, 0x01d0, 0x01d0, + // Entry 280 - 2BF 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, - 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d1, 0x01d1, 0x01d1, - 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, - 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, - 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d3, 0x01d3, 0x01d3, - 0x01d3, 0x01d3, 0x01d3, 0x01d4, 0x01d4, 0x01d4, 0x01d4, 0x01dc, - 0x01dc, -} // Size: 1530 bytes + 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, + 0x01d2, 0x01d2, 0x01d2, 0x01d2, 0x01d2, 0x01d2, 0x01d5, 0x01d5, + 0x01d5, 0x01d5, 0x01d5, 0x01d5, 0x01d5, 0x01d5, 0x01d8, 0x01d8, + 0x01d8, 0x01d8, 0x01d9, 0x01d9, 0x01d9, 0x01d9, 0x01d9, 0x01d9, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01db, 0x01db, 0x01db, + 0x01db, 0x01db, 0x01db, 0x01db, 0x01dc, 0x01dc, 0x01dc, 0x01dc, + 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, + // Entry 2C0 - 2FF + 0x01de, 0x01de, 0x01de, 0x01de, 0x01de, 0x01de, 0x01de, 0x01de, + 0x01de, 0x01de, 0x01de, 0x01de, 0x01df, 0x01df, 0x01e0, 0x01e0, + 0x01e0, 0x01e0, 0x01e0, 0x01e0, 0x01e0, 0x01e0, 0x01e0, 0x01e0, + 0x01e0, 0x01e0, 0x01e0, 0x01e0, 0x01e0, 0x01e0, 0x01e1, 0x01e1, + 0x01e1, 0x01e1, 0x01e1, 0x01e1, 0x01e1, 0x01e1, 0x01e1, 0x01e1, + 0x01e1, 0x01e1, 0x01e1, 0x01e1, 0x01e1, 0x01e1, 0x01e1, 0x01e1, + 0x01e1, 0x01e1, 0x01e1, 0x01e1, 0x01e1, 0x01e1, 0x01e1, 0x01e1, + 0x01e1, 0x01e1, 0x01e2, 0x01e2, 0x01e2, 0x01e2, 0x01e2, 0x01e2, + // Entry 300 - 33F + 0x01e3, 0x01e3, 0x01e3, 0x01e3, 0x01eb, 0x01eb, 0x01eb, 0x01eb, +} // Size: 1576 bytes -var narrowSymIndex = []curToIndex{ // 476 elements +var narrowSymIndex = []curToIndex{ // 491 elements 0: {cur: 0x9, idx: 0x1}, 1: {cur: 0x11, idx: 0x4}, 2: {cur: 0x13, idx: 0x4}, @@ -2108,466 +2149,481 @@ var narrowSymIndex = []curToIndex{ // 476 elements 13: {cur: 0x39, idx: 0x4}, 14: {cur: 0x3a, idx: 0x4}, 15: {cur: 0x41, idx: 0x4}, - 16: {cur: 0x43, idx: 0x25}, - 17: {cur: 0x44, idx: 0x4}, - 18: {cur: 0x46, idx: 0x28}, - 19: {cur: 0x49, idx: 0x4}, - 20: {cur: 0x4a, idx: 0x4}, - 21: {cur: 0x4d, idx: 0x2c}, - 22: {cur: 0x51, idx: 0x30}, - 23: {cur: 0x52, idx: 0x4}, - 24: {cur: 0x57, idx: 0x33}, - 25: {cur: 0x5b, idx: 0x37}, - 26: {cur: 0x5d, idx: 0x3b}, - 27: {cur: 0x5f, idx: 0x4}, - 28: {cur: 0x60, idx: 0x3f}, - 29: {cur: 0x62, idx: 0x3f}, - 30: {cur: 0x64, idx: 0x42}, - 31: {cur: 0x67, idx: 0x3f}, - 32: {cur: 0x69, idx: 0x46}, - 33: {cur: 0x6d, idx: 0x49}, - 34: {cur: 0x70, idx: 0x4}, - 35: {cur: 0x71, idx: 0x4}, - 36: {cur: 0x72, idx: 0x4f}, - 37: {cur: 0x74, idx: 0x51}, - 38: {cur: 0x76, idx: 0x54}, - 39: {cur: 0x77, idx: 0x57}, - 40: {cur: 0x7b, idx: 0x5a}, - 41: {cur: 0x7c, idx: 0x5e}, - 42: {cur: 0x80, idx: 0x30}, - 43: {cur: 0x82, idx: 0x4}, - 44: {cur: 0x84, idx: 0x25}, - 45: {cur: 0x87, idx: 0x67}, - 46: {cur: 0x88, idx: 0x6b}, - 47: {cur: 0x89, idx: 0x6e}, - 48: {cur: 0x8c, idx: 0x6e}, - 49: {cur: 0x8e, idx: 0x4}, - 50: {cur: 0x8f, idx: 0x72}, - 51: {cur: 0x90, idx: 0x76}, - 52: {cur: 0x91, idx: 0x7a}, - 53: {cur: 0x92, idx: 0x7e}, - 54: {cur: 0x93, idx: 0x4}, - 55: {cur: 0x95, idx: 0x81}, - 56: {cur: 0x9a, idx: 0x84}, - 57: {cur: 0xa2, idx: 0x87}, - 58: {cur: 0xa7, idx: 0x8a}, - 59: {cur: 0xa8, idx: 0x8c}, - 60: {cur: 0xad, idx: 0x7e}, - 61: {cur: 0xb1, idx: 0x4}, - 62: {cur: 0xb4, idx: 0x94}, - 63: {cur: 0xb8, idx: 0x4}, - 64: {cur: 0xb9, idx: 0x97}, - 65: {cur: 0xbb, idx: 0x9b}, - 66: {cur: 0xbd, idx: 0x30}, - 67: {cur: 0xbe, idx: 0x7e}, - 68: {cur: 0xbf, idx: 0x4}, - 69: {cur: 0xc6, idx: 0xa2}, - 70: {cur: 0xc7, idx: 0x7e}, - 71: {cur: 0xc8, idx: 0xa6}, - 72: {cur: 0xcb, idx: 0xaa}, - 73: {cur: 0xcf, idx: 0xae}, - 74: {cur: 0xd1, idx: 0xb2}, - 75: {cur: 0xd2, idx: 0x18}, - 76: {cur: 0xd3, idx: 0xb6}, - 77: {cur: 0xd5, idx: 0x4}, - 78: {cur: 0xda, idx: 0x30}, - 79: {cur: 0xdb, idx: 0x4}, - 80: {cur: 0xdc, idx: 0x3f}, - 81: {cur: 0xe1, idx: 0x4}, - 82: {cur: 0xe3, idx: 0x3f}, - 83: {cur: 0xe4, idx: 0xb9}, - 84: {cur: 0xe7, idx: 0x3f}, - 85: {cur: 0xe9, idx: 0xbc}, - 86: {cur: 0xef, idx: 0xc0}, - 87: {cur: 0xf2, idx: 0xc3}, - 88: {cur: 0xf3, idx: 0x4}, - 89: {cur: 0xf4, idx: 0x4}, - 90: {cur: 0xf6, idx: 0xcb}, - 91: {cur: 0xfa, idx: 0x4}, - 92: {cur: 0xff, idx: 0x4}, - 93: {cur: 0x102, idx: 0x10}, - 94: {cur: 0x103, idx: 0xd3}, - 95: {cur: 0x10e, idx: 0x4}, - 96: {cur: 0x123, idx: 0xe9}, - 97: {cur: 0x125, idx: 0xeb}, - 98: {cur: 0xf4, idx: 0xc7}, - 99: {cur: 0xf4, idx: 0xc7}, - 100: {cur: 0x11, idx: 0x10d}, - 101: {cur: 0x13, idx: 0xf4}, - 102: {cur: 0x1a, idx: 0x111}, - 103: {cur: 0x25, idx: 0x11f}, - 104: {cur: 0x26, idx: 0x123}, - 105: {cur: 0x32, idx: 0x127}, - 106: {cur: 0x39, idx: 0x12b}, - 107: {cur: 0x3a, idx: 0x1c}, - 108: {cur: 0x41, idx: 0x12f}, - 109: {cur: 0x43, idx: 0x20}, - 110: {cur: 0x44, idx: 0x133}, - 111: {cur: 0x4a, idx: 0x137}, - 112: {cur: 0x52, idx: 0x13b}, - 113: {cur: 0x5f, idx: 0x153}, - 114: {cur: 0x62, idx: 0x157}, - 115: {cur: 0x70, idx: 0x15c}, - 116: {cur: 0x71, idx: 0x4b}, - 117: {cur: 0x82, idx: 0x171}, - 118: {cur: 0x84, idx: 0x62}, - 119: {cur: 0x8e, idx: 0x196}, - 120: {cur: 0xb1, idx: 0x90}, - 121: {cur: 0xbf, idx: 0x9e}, - 122: {cur: 0xd5, idx: 0x1e0}, - 123: {cur: 0xe1, idx: 0x1f5}, - 124: {cur: 0xf3, idx: 0x20d}, - 125: {cur: 0xf4, idx: 0xc7}, - 126: {cur: 0xfa, idx: 0xcf}, - 127: {cur: 0xff, idx: 0x211}, - 128: {cur: 0x26, idx: 0x4}, - 129: {cur: 0x37, idx: 0x0}, - 130: {cur: 0x51, idx: 0x0}, - 131: {cur: 0x74, idx: 0x0}, - 132: {cur: 0x80, idx: 0x0}, - 133: {cur: 0xbd, idx: 0x0}, - 134: {cur: 0xc8, idx: 0x0}, - 135: {cur: 0xd2, idx: 0x0}, - 136: {cur: 0xda, idx: 0x0}, - 137: {cur: 0xf4, idx: 0xc7}, - 138: {cur: 0xcf, idx: 0x236}, - 139: {cur: 0xe7, idx: 0x23a}, - 140: {cur: 0xf4, idx: 0xc7}, - 141: {cur: 0x13, idx: 0x6}, - 142: {cur: 0x1a, idx: 0x23e}, - 143: {cur: 0x25, idx: 0x243}, - 144: {cur: 0x32, idx: 0x247}, - 145: {cur: 0x37, idx: 0x24a}, - 146: {cur: 0x39, idx: 0x12b}, - 147: {cur: 0x3a, idx: 0x1c}, - 148: {cur: 0x49, idx: 0x24d}, - 149: {cur: 0x4a, idx: 0x252}, - 150: {cur: 0x52, idx: 0x256}, - 151: {cur: 0x5f, idx: 0x153}, - 152: {cur: 0x60, idx: 0x25a}, - 153: {cur: 0x70, idx: 0x25f}, - 154: {cur: 0x80, idx: 0x262}, - 155: {cur: 0x82, idx: 0x267}, - 156: {cur: 0x8e, idx: 0x26a}, - 157: {cur: 0x93, idx: 0x26e}, - 158: {cur: 0xb1, idx: 0x90}, - 159: {cur: 0xb8, idx: 0x271}, - 160: {cur: 0xbf, idx: 0x9e}, - 161: {cur: 0xd1, idx: 0x274}, - 162: {cur: 0xd5, idx: 0x27c}, - 163: {cur: 0xdb, idx: 0x280}, - 164: {cur: 0xf3, idx: 0x20d}, - 165: {cur: 0xff, idx: 0x283}, - 166: {cur: 0x10e, idx: 0xdc}, - 167: {cur: 0x11, idx: 0x0}, - 168: {cur: 0x13, idx: 0x0}, - 169: {cur: 0x1a, idx: 0x0}, - 170: {cur: 0x1b, idx: 0x0}, - 171: {cur: 0x25, idx: 0x0}, - 172: {cur: 0x26, idx: 0x0}, - 173: {cur: 0x2e, idx: 0x0}, - 174: {cur: 0x32, idx: 0x0}, - 175: {cur: 0x37, idx: 0x0}, - 176: {cur: 0x39, idx: 0x0}, - 177: {cur: 0x3a, idx: 0x0}, - 178: {cur: 0x41, idx: 0x0}, - 179: {cur: 0x43, idx: 0x0}, + 16: {cur: 0x44, idx: 0x25}, + 17: {cur: 0x45, idx: 0x4}, + 18: {cur: 0x47, idx: 0x28}, + 19: {cur: 0x4a, idx: 0x4}, + 20: {cur: 0x4b, idx: 0x4}, + 21: {cur: 0x4e, idx: 0x2c}, + 22: {cur: 0x52, idx: 0x30}, + 23: {cur: 0x53, idx: 0x4}, + 24: {cur: 0x58, idx: 0x33}, + 25: {cur: 0x5c, idx: 0x37}, + 26: {cur: 0x5e, idx: 0x3b}, + 27: {cur: 0x60, idx: 0x4}, + 28: {cur: 0x61, idx: 0x3f}, + 29: {cur: 0x63, idx: 0x3f}, + 30: {cur: 0x65, idx: 0x42}, + 31: {cur: 0x68, idx: 0x3f}, + 32: {cur: 0x6a, idx: 0x46}, + 33: {cur: 0x6e, idx: 0x49}, + 34: {cur: 0x71, idx: 0x4}, + 35: {cur: 0x72, idx: 0x4}, + 36: {cur: 0x73, idx: 0x4f}, + 37: {cur: 0x75, idx: 0x51}, + 38: {cur: 0x77, idx: 0x54}, + 39: {cur: 0x78, idx: 0x57}, + 40: {cur: 0x7c, idx: 0x5a}, + 41: {cur: 0x7d, idx: 0x5e}, + 42: {cur: 0x81, idx: 0x30}, + 43: {cur: 0x83, idx: 0x4}, + 44: {cur: 0x85, idx: 0x25}, + 45: {cur: 0x88, idx: 0x67}, + 46: {cur: 0x89, idx: 0x6b}, + 47: {cur: 0x8a, idx: 0x6e}, + 48: {cur: 0x8d, idx: 0x6e}, + 49: {cur: 0x8f, idx: 0x4}, + 50: {cur: 0x90, idx: 0x72}, + 51: {cur: 0x91, idx: 0x76}, + 52: {cur: 0x92, idx: 0x7a}, + 53: {cur: 0x93, idx: 0x7e}, + 54: {cur: 0x94, idx: 0x4}, + 55: {cur: 0x96, idx: 0x81}, + 56: {cur: 0x9b, idx: 0x84}, + 57: {cur: 0xa3, idx: 0x87}, + 58: {cur: 0xa8, idx: 0x8a}, + 59: {cur: 0xa9, idx: 0x8c}, + 60: {cur: 0xae, idx: 0x7e}, + 61: {cur: 0xb2, idx: 0x4}, + 62: {cur: 0xb5, idx: 0x94}, + 63: {cur: 0xb9, idx: 0x4}, + 64: {cur: 0xba, idx: 0x97}, + 65: {cur: 0xbc, idx: 0x9b}, + 66: {cur: 0xbe, idx: 0x30}, + 67: {cur: 0xbf, idx: 0x7e}, + 68: {cur: 0xc0, idx: 0x4}, + 69: {cur: 0xc7, idx: 0xa2}, + 70: {cur: 0xc8, idx: 0x7e}, + 71: {cur: 0xc9, idx: 0xa6}, + 72: {cur: 0xcc, idx: 0xaa}, + 73: {cur: 0xd0, idx: 0xae}, + 74: {cur: 0xd2, idx: 0xb2}, + 75: {cur: 0xd3, idx: 0x18}, + 76: {cur: 0xd4, idx: 0xb6}, + 77: {cur: 0xd6, idx: 0x4}, + 78: {cur: 0xdb, idx: 0x30}, + 79: {cur: 0xdc, idx: 0x4}, + 80: {cur: 0xdd, idx: 0x3f}, + 81: {cur: 0xe2, idx: 0x4}, + 82: {cur: 0xe4, idx: 0x3f}, + 83: {cur: 0xe5, idx: 0xb9}, + 84: {cur: 0xe9, idx: 0x3f}, + 85: {cur: 0xeb, idx: 0xbc}, + 86: {cur: 0xf1, idx: 0xc0}, + 87: {cur: 0xf4, idx: 0xc3}, + 88: {cur: 0xf5, idx: 0x4}, + 89: {cur: 0xf6, idx: 0x4}, + 90: {cur: 0xf8, idx: 0xcb}, + 91: {cur: 0xfc, idx: 0x4}, + 92: {cur: 0x101, idx: 0x4}, + 93: {cur: 0x104, idx: 0x10}, + 94: {cur: 0x105, idx: 0xd3}, + 95: {cur: 0x110, idx: 0x4}, + 96: {cur: 0x125, idx: 0xe9}, + 97: {cur: 0x127, idx: 0xeb}, + 98: {cur: 0xd0, idx: 0xee}, + 99: {cur: 0xf6, idx: 0xc7}, + 100: {cur: 0xf6, idx: 0xc7}, + 101: {cur: 0x11, idx: 0x128}, + 102: {cur: 0x13, idx: 0xf8}, + 103: {cur: 0x1a, idx: 0x12c}, + 104: {cur: 0x25, idx: 0x13a}, + 105: {cur: 0x26, idx: 0x13e}, + 106: {cur: 0x32, idx: 0x142}, + 107: {cur: 0x39, idx: 0x146}, + 108: {cur: 0x3a, idx: 0x1c}, + 109: {cur: 0x41, idx: 0x14a}, + 110: {cur: 0x44, idx: 0x20}, + 111: {cur: 0x45, idx: 0x14e}, + 112: {cur: 0x4b, idx: 0x152}, + 113: {cur: 0x53, idx: 0x156}, + 114: {cur: 0x60, idx: 0x16e}, + 115: {cur: 0x63, idx: 0x172}, + 116: {cur: 0x71, idx: 0x177}, + 117: {cur: 0x72, idx: 0x4b}, + 118: {cur: 0x83, idx: 0x18c}, + 119: {cur: 0x85, idx: 0x62}, + 120: {cur: 0x8f, idx: 0x1a4}, + 121: {cur: 0xb2, idx: 0x90}, + 122: {cur: 0xc0, idx: 0x9e}, + 123: {cur: 0xd6, idx: 0x1ee}, + 124: {cur: 0xe2, idx: 0x203}, + 125: {cur: 0xf5, idx: 0x21b}, + 126: {cur: 0xf6, idx: 0xc7}, + 127: {cur: 0xfc, idx: 0xcf}, + 128: {cur: 0x101, idx: 0x21f}, + 129: {cur: 0x26, idx: 0x4}, + 130: {cur: 0x37, idx: 0x0}, + 131: {cur: 0x52, idx: 0x0}, + 132: {cur: 0x75, idx: 0x0}, + 133: {cur: 0x81, idx: 0x0}, + 134: {cur: 0xbe, idx: 0x0}, + 135: {cur: 0xc9, idx: 0x0}, + 136: {cur: 0xd3, idx: 0x0}, + 137: {cur: 0xdb, idx: 0x0}, + 138: {cur: 0xf6, idx: 0xc7}, + 139: {cur: 0xd0, idx: 0x244}, + 140: {cur: 0xe9, idx: 0x248}, + 141: {cur: 0xf6, idx: 0xc7}, + 142: {cur: 0x13, idx: 0x6}, + 143: {cur: 0x1a, idx: 0x24c}, + 144: {cur: 0x25, idx: 0x251}, + 145: {cur: 0x32, idx: 0x255}, + 146: {cur: 0x37, idx: 0x258}, + 147: {cur: 0x39, idx: 0x146}, + 148: {cur: 0x3a, idx: 0x1c}, + 149: {cur: 0x4a, idx: 0x25b}, + 150: {cur: 0x4b, idx: 0x260}, + 151: {cur: 0x53, idx: 0x264}, + 152: {cur: 0x60, idx: 0x16e}, + 153: {cur: 0x61, idx: 0x268}, + 154: {cur: 0x71, idx: 0x26d}, + 155: {cur: 0x81, idx: 0x270}, + 156: {cur: 0x83, idx: 0x275}, + 157: {cur: 0x8f, idx: 0x278}, + 158: {cur: 0x94, idx: 0x27c}, + 159: {cur: 0xb2, idx: 0x90}, + 160: {cur: 0xb9, idx: 0x27f}, + 161: {cur: 0xc0, idx: 0x9e}, + 162: {cur: 0xd2, idx: 0x282}, + 163: {cur: 0xd6, idx: 0x28a}, + 164: {cur: 0xdc, idx: 0x28e}, + 165: {cur: 0xf5, idx: 0x21b}, + 166: {cur: 0x101, idx: 0x291}, + 167: {cur: 0x110, idx: 0xdc}, + 168: {cur: 0x11, idx: 0x0}, + 169: {cur: 0x13, idx: 0x0}, + 170: {cur: 0x1a, idx: 0x0}, + 171: {cur: 0x1b, idx: 0x0}, + 172: {cur: 0x25, idx: 0x0}, + 173: {cur: 0x26, idx: 0x0}, + 174: {cur: 0x2e, idx: 0x0}, + 175: {cur: 0x32, idx: 0x0}, + 176: {cur: 0x37, idx: 0x0}, + 177: {cur: 0x39, idx: 0x0}, + 178: {cur: 0x3a, idx: 0x0}, + 179: {cur: 0x41, idx: 0x0}, 180: {cur: 0x44, idx: 0x0}, - 181: {cur: 0x46, idx: 0x0}, - 182: {cur: 0x4a, idx: 0x0}, - 183: {cur: 0x52, idx: 0x0}, - 184: {cur: 0x5f, idx: 0x0}, - 185: {cur: 0x67, idx: 0x0}, - 186: {cur: 0x70, idx: 0x0}, + 181: {cur: 0x45, idx: 0x0}, + 182: {cur: 0x47, idx: 0x0}, + 183: {cur: 0x4b, idx: 0x0}, + 184: {cur: 0x53, idx: 0x0}, + 185: {cur: 0x60, idx: 0x0}, + 186: {cur: 0x68, idx: 0x0}, 187: {cur: 0x71, idx: 0x0}, - 188: {cur: 0x7b, idx: 0x0}, + 188: {cur: 0x72, idx: 0x0}, 189: {cur: 0x7c, idx: 0x0}, - 190: {cur: 0x82, idx: 0x0}, - 191: {cur: 0x87, idx: 0x0}, - 192: {cur: 0x8c, idx: 0x0}, - 193: {cur: 0x8e, idx: 0x0}, + 190: {cur: 0x7d, idx: 0x0}, + 191: {cur: 0x83, idx: 0x0}, + 192: {cur: 0x88, idx: 0x0}, + 193: {cur: 0x8d, idx: 0x0}, 194: {cur: 0x8f, idx: 0x0}, 195: {cur: 0x90, idx: 0x0}, - 196: {cur: 0x93, idx: 0x0}, - 197: {cur: 0xa8, idx: 0x0}, - 198: {cur: 0xb1, idx: 0x0}, - 199: {cur: 0xb8, idx: 0x0}, + 196: {cur: 0x91, idx: 0x0}, + 197: {cur: 0x94, idx: 0x0}, + 198: {cur: 0xa9, idx: 0x0}, + 199: {cur: 0xb2, idx: 0x0}, 200: {cur: 0xb9, idx: 0x0}, - 201: {cur: 0xbf, idx: 0x0}, - 202: {cur: 0xc6, idx: 0x0}, - 203: {cur: 0xcb, idx: 0x0}, - 204: {cur: 0xd5, idx: 0x0}, - 205: {cur: 0xdb, idx: 0x0}, - 206: {cur: 0xe1, idx: 0x0}, - 207: {cur: 0xe3, idx: 0x0}, - 208: {cur: 0xf2, idx: 0x0}, - 209: {cur: 0xf3, idx: 0x0}, + 201: {cur: 0xba, idx: 0x0}, + 202: {cur: 0xc0, idx: 0x0}, + 203: {cur: 0xc7, idx: 0x0}, + 204: {cur: 0xcc, idx: 0x0}, + 205: {cur: 0xd0, idx: 0x0}, + 206: {cur: 0xd6, idx: 0x0}, + 207: {cur: 0xdc, idx: 0x0}, + 208: {cur: 0xe2, idx: 0x0}, + 209: {cur: 0xe4, idx: 0x0}, 210: {cur: 0xf4, idx: 0x0}, - 211: {cur: 0xf6, idx: 0x0}, - 212: {cur: 0xff, idx: 0x0}, - 213: {cur: 0x103, idx: 0x0}, - 214: {cur: 0xf4, idx: 0xc7}, - 215: {cur: 0x57, idx: 0x29a}, - 216: {cur: 0x91, idx: 0x2aa}, - 217: {cur: 0xef, idx: 0x2b3}, - 218: {cur: 0xf4, idx: 0xc7}, - 219: {cur: 0x102, idx: 0x0}, - 220: {cur: 0xcf, idx: 0x4f}, - 221: {cur: 0xf4, idx: 0xc7}, - 222: {cur: 0x1b, idx: 0x2ec}, - 223: {cur: 0x35, idx: 0x0}, - 224: {cur: 0x71, idx: 0x4b}, - 225: {cur: 0xf4, idx: 0xc7}, - 226: {cur: 0x123, idx: 0x0}, - 227: {cur: 0x125, idx: 0x0}, - 228: {cur: 0x51, idx: 0x2ef}, - 229: {cur: 0x80, idx: 0x2ef}, - 230: {cur: 0xbd, idx: 0x2ef}, - 231: {cur: 0xcf, idx: 0x4f}, - 232: {cur: 0xda, idx: 0x2ef}, - 233: {cur: 0xf4, idx: 0xc7}, - 234: {cur: 0x49, idx: 0x303}, - 235: {cur: 0x60, idx: 0x30b}, - 236: {cur: 0x69, idx: 0x310}, - 237: {cur: 0x88, idx: 0x315}, - 238: {cur: 0xcf, idx: 0x4f}, - 239: {cur: 0xd3, idx: 0x318}, - 240: {cur: 0xe7, idx: 0x0}, - 241: {cur: 0xf4, idx: 0xc7}, - 242: {cur: 0x125, idx: 0x8a}, - 243: {cur: 0x1b, idx: 0x334}, - 244: {cur: 0x27, idx: 0x337}, - 245: {cur: 0x4a, idx: 0xa2}, - 246: {cur: 0x57, idx: 0x3f}, - 247: {cur: 0x80, idx: 0x33a}, - 248: {cur: 0xcb, idx: 0x33d}, - 249: {cur: 0xda, idx: 0x33a}, - 250: {cur: 0xff, idx: 0x283}, - 251: {cur: 0x57, idx: 0x0}, - 252: {cur: 0xcf, idx: 0x4f}, - 253: {cur: 0xf4, idx: 0xc7}, - 254: {cur: 0x57, idx: 0x33}, - 255: {cur: 0x102, idx: 0x366}, - 256: {cur: 0x11, idx: 0x371}, - 257: {cur: 0x37, idx: 0x24a}, - 258: {cur: 0x52, idx: 0x256}, - 259: {cur: 0xcf, idx: 0xae}, - 260: {cur: 0xf2, idx: 0x379}, - 261: {cur: 0xcf, idx: 0xae}, - 262: {cur: 0x102, idx: 0x387}, - 263: {cur: 0xf4, idx: 0xc7}, - 264: {cur: 0xf4, idx: 0xc7}, - 265: {cur: 0x9, idx: 0x0}, - 266: {cur: 0x11, idx: 0x0}, - 267: {cur: 0x13, idx: 0x0}, - 268: {cur: 0x1a, idx: 0x0}, - 269: {cur: 0x1b, idx: 0x0}, - 270: {cur: 0x25, idx: 0x0}, - 271: {cur: 0x26, idx: 0x0}, - 272: {cur: 0x27, idx: 0x0}, - 273: {cur: 0x2e, idx: 0x0}, - 274: {cur: 0x32, idx: 0x0}, - 275: {cur: 0x35, idx: 0x0}, - 276: {cur: 0x37, idx: 0x0}, - 277: {cur: 0x39, idx: 0x0}, - 278: {cur: 0x3a, idx: 0x0}, - 279: {cur: 0x41, idx: 0x0}, - 280: {cur: 0x43, idx: 0x0}, - 281: {cur: 0x44, idx: 0x0}, - 282: {cur: 0x46, idx: 0x0}, - 283: {cur: 0x49, idx: 0x0}, - 284: {cur: 0x4a, idx: 0x0}, - 285: {cur: 0x4d, idx: 0x0}, - 286: {cur: 0x51, idx: 0x0}, - 287: {cur: 0x52, idx: 0x0}, - 288: {cur: 0x57, idx: 0x0}, - 289: {cur: 0x5b, idx: 0x0}, - 290: {cur: 0x5f, idx: 0x0}, - 291: {cur: 0x60, idx: 0x0}, - 292: {cur: 0x64, idx: 0x0}, - 293: {cur: 0x67, idx: 0x0}, - 294: {cur: 0x69, idx: 0x0}, - 295: {cur: 0x6d, idx: 0x0}, - 296: {cur: 0x70, idx: 0x0}, - 297: {cur: 0x71, idx: 0x0}, - 298: {cur: 0x72, idx: 0x0}, - 299: {cur: 0x74, idx: 0x0}, - 300: {cur: 0x76, idx: 0x0}, - 301: {cur: 0x77, idx: 0x0}, - 302: {cur: 0x7b, idx: 0x0}, - 303: {cur: 0x7c, idx: 0x0}, - 304: {cur: 0x80, idx: 0x0}, - 305: {cur: 0x82, idx: 0x0}, - 306: {cur: 0x87, idx: 0x0}, - 307: {cur: 0x88, idx: 0x0}, - 308: {cur: 0x89, idx: 0x0}, - 309: {cur: 0x8c, idx: 0x0}, - 310: {cur: 0x8e, idx: 0x0}, - 311: {cur: 0x8f, idx: 0x0}, - 312: {cur: 0x90, idx: 0x0}, - 313: {cur: 0x91, idx: 0x0}, - 314: {cur: 0x92, idx: 0x0}, - 315: {cur: 0x93, idx: 0x0}, - 316: {cur: 0x95, idx: 0x0}, - 317: {cur: 0x9a, idx: 0x0}, - 318: {cur: 0xa2, idx: 0x0}, - 319: {cur: 0xa7, idx: 0x0}, - 320: {cur: 0xa8, idx: 0x0}, - 321: {cur: 0xad, idx: 0x0}, - 322: {cur: 0xb1, idx: 0x0}, - 323: {cur: 0xb4, idx: 0x0}, - 324: {cur: 0xb8, idx: 0x0}, - 325: {cur: 0xb9, idx: 0x0}, - 326: {cur: 0xbb, idx: 0x0}, - 327: {cur: 0xbd, idx: 0x0}, - 328: {cur: 0xbe, idx: 0x0}, - 329: {cur: 0xbf, idx: 0x0}, - 330: {cur: 0xc6, idx: 0x0}, - 331: {cur: 0xc7, idx: 0x0}, - 332: {cur: 0xc8, idx: 0x0}, - 333: {cur: 0xcb, idx: 0x0}, - 334: {cur: 0xcf, idx: 0x0}, - 335: {cur: 0xd2, idx: 0x0}, - 336: {cur: 0xd3, idx: 0x0}, - 337: {cur: 0xd5, idx: 0x0}, - 338: {cur: 0xda, idx: 0x0}, - 339: {cur: 0xdb, idx: 0x0}, - 340: {cur: 0xdc, idx: 0x0}, - 341: {cur: 0xe1, idx: 0x0}, - 342: {cur: 0xe3, idx: 0x0}, - 343: {cur: 0xe4, idx: 0x0}, - 344: {cur: 0xe7, idx: 0x0}, - 345: {cur: 0xe9, idx: 0x0}, - 346: {cur: 0xef, idx: 0x0}, - 347: {cur: 0xf2, idx: 0x0}, - 348: {cur: 0xf3, idx: 0x0}, - 349: {cur: 0xf4, idx: 0x0}, - 350: {cur: 0xf6, idx: 0x0}, - 351: {cur: 0xff, idx: 0x0}, - 352: {cur: 0x102, idx: 0x0}, - 353: {cur: 0x103, idx: 0x0}, - 354: {cur: 0x10e, idx: 0x0}, - 355: {cur: 0x123, idx: 0x0}, - 356: {cur: 0x125, idx: 0x0}, - 357: {cur: 0xf4, idx: 0xc7}, - 358: {cur: 0x57, idx: 0x3da}, - 359: {cur: 0x88, idx: 0x315}, - 360: {cur: 0x91, idx: 0x2aa}, - 361: {cur: 0xbb, idx: 0x40f}, - 362: {cur: 0xcf, idx: 0x4f}, - 363: {cur: 0xd3, idx: 0x416}, - 364: {cur: 0xf4, idx: 0xc7}, - 365: {cur: 0x125, idx: 0x436}, - 366: {cur: 0x64, idx: 0x0}, - 367: {cur: 0x88, idx: 0x6b}, - 368: {cur: 0xbb, idx: 0x9b}, - 369: {cur: 0x125, idx: 0xeb}, - 370: {cur: 0xf4, idx: 0xc7}, - 371: {cur: 0xf4, idx: 0xc7}, - 372: {cur: 0x2e, idx: 0x462}, - 373: {cur: 0x88, idx: 0x315}, - 374: {cur: 0xd1, idx: 0x465}, - 375: {cur: 0xf4, idx: 0xc7}, - 376: {cur: 0xad, idx: 0x46c}, - 377: {cur: 0xf4, idx: 0xc7}, - 378: {cur: 0xf4, idx: 0xc7}, - 379: {cur: 0xf4, idx: 0xc7}, - 380: {cur: 0xf4, idx: 0xc7}, - 381: {cur: 0xf4, idx: 0xc7}, - 382: {cur: 0xf4, idx: 0xc7}, - 383: {cur: 0xf4, idx: 0xc7}, - 384: {cur: 0xf4, idx: 0xc7}, - 385: {cur: 0x37, idx: 0x24a}, - 386: {cur: 0x57, idx: 0x3da}, - 387: {cur: 0xbd, idx: 0x489}, - 388: {cur: 0xcf, idx: 0x4f}, - 389: {cur: 0xf4, idx: 0xc7}, - 390: {cur: 0x43, idx: 0x491}, - 391: {cur: 0x84, idx: 0x491}, - 392: {cur: 0xf4, idx: 0xc7}, - 393: {cur: 0xf4, idx: 0xc7}, - 394: {cur: 0xf4, idx: 0xc7}, - 395: {cur: 0xf4, idx: 0xc7}, - 396: {cur: 0xcf, idx: 0x4f}, - 397: {cur: 0xf4, idx: 0xc7}, - 398: {cur: 0x25, idx: 0x243}, - 399: {cur: 0x32, idx: 0x247}, - 400: {cur: 0x39, idx: 0x12b}, - 401: {cur: 0x3a, idx: 0x9b}, - 402: {cur: 0x52, idx: 0x256}, - 403: {cur: 0x57, idx: 0x499}, - 404: {cur: 0x71, idx: 0x4b}, - 405: {cur: 0x74, idx: 0x49c}, - 406: {cur: 0x82, idx: 0x267}, - 407: {cur: 0xf3, idx: 0x20d}, - 408: {cur: 0xf4, idx: 0xc7}, - 409: {cur: 0xf4, idx: 0xc7}, - 410: {cur: 0xf4, idx: 0xc7}, - 411: {cur: 0x1b, idx: 0x0}, - 412: {cur: 0x37, idx: 0x24a}, - 413: {cur: 0x7b, idx: 0x0}, - 414: {cur: 0x7c, idx: 0x0}, - 415: {cur: 0x87, idx: 0x0}, - 416: {cur: 0x90, idx: 0x0}, - 417: {cur: 0xa8, idx: 0x0}, - 418: {cur: 0xc8, idx: 0x4a6}, - 419: {cur: 0xcb, idx: 0x33d}, - 420: {cur: 0xd1, idx: 0x4a9}, - 421: {cur: 0x103, idx: 0x0}, - 422: {cur: 0xf4, idx: 0xc7}, - 423: {cur: 0xf4, idx: 0xc7}, - 424: {cur: 0xf4, idx: 0xc7}, - 425: {cur: 0xda, idx: 0x4b7}, - 426: {cur: 0xf4, idx: 0xc7}, - 427: {cur: 0xf4, idx: 0xc7}, - 428: {cur: 0xf4, idx: 0xc7}, - 429: {cur: 0x1a, idx: 0x23e}, - 430: {cur: 0x32, idx: 0x247}, - 431: {cur: 0xcf, idx: 0x4f}, - 432: {cur: 0xf4, idx: 0xc7}, - 433: {cur: 0xbe, idx: 0x4d1}, - 434: {cur: 0xf4, idx: 0xc7}, - 435: {cur: 0xf4, idx: 0xc7}, - 436: {cur: 0xf4, idx: 0xc7}, - 437: {cur: 0xcf, idx: 0x4f}, - 438: {cur: 0xf4, idx: 0xc7}, - 439: {cur: 0xf4, idx: 0xc7}, - 440: {cur: 0x64, idx: 0x4ec}, - 441: {cur: 0xcf, idx: 0x4f}, - 442: {cur: 0xf4, idx: 0xc7}, - 443: {cur: 0x37, idx: 0x24a}, - 444: {cur: 0x92, idx: 0x503}, - 445: {cur: 0xf4, idx: 0xc7}, - 446: {cur: 0xf4, idx: 0xc7}, - 447: {cur: 0xf4, idx: 0xc7}, - 448: {cur: 0x64, idx: 0x4ec}, - 449: {cur: 0xf4, idx: 0xc7}, - 450: {cur: 0x37, idx: 0x529}, - 451: {cur: 0x64, idx: 0x4ec}, - 452: {cur: 0xf4, idx: 0xc7}, - 453: {cur: 0x5b, idx: 0x0}, - 454: {cur: 0xcf, idx: 0x4f}, - 455: {cur: 0xf4, idx: 0xc7}, - 456: {cur: 0xf4, idx: 0xc7}, - 457: {cur: 0xf4, idx: 0xc7}, - 458: {cur: 0xf4, idx: 0xc7}, - 459: {cur: 0xf4, idx: 0xc7}, - 460: {cur: 0xcf, idx: 0x4f}, - 461: {cur: 0xf4, idx: 0xc7}, - 462: {cur: 0xf4, idx: 0xc7}, - 463: {cur: 0xf4, idx: 0xc7}, - 464: {cur: 0xf4, idx: 0xc7}, - 465: {cur: 0xcf, idx: 0x4f}, - 466: {cur: 0xf4, idx: 0xc7}, - 467: {cur: 0xcf, idx: 0x4f}, - 468: {cur: 0x37, idx: 0x56d}, - 469: {cur: 0x51, idx: 0x33a}, - 470: {cur: 0x74, idx: 0x49c}, - 471: {cur: 0x80, idx: 0x33a}, - 472: {cur: 0xbd, idx: 0x33a}, - 473: {cur: 0xc8, idx: 0x570}, - 474: {cur: 0xda, idx: 0x33a}, - 475: {cur: 0xf4, idx: 0xc7}, -} // Size: 1928 bytes + 211: {cur: 0xf5, idx: 0x0}, + 212: {cur: 0xf6, idx: 0x0}, + 213: {cur: 0xf8, idx: 0x0}, + 214: {cur: 0x101, idx: 0x0}, + 215: {cur: 0x105, idx: 0x0}, + 216: {cur: 0xf6, idx: 0xc7}, + 217: {cur: 0x58, idx: 0x2a8}, + 218: {cur: 0x92, idx: 0x2b8}, + 219: {cur: 0xf1, idx: 0x2c1}, + 220: {cur: 0xf6, idx: 0xc7}, + 221: {cur: 0x104, idx: 0x0}, + 222: {cur: 0xf6, idx: 0xc7}, + 223: {cur: 0xd0, idx: 0x2ed}, + 224: {cur: 0xd0, idx: 0x4f}, + 225: {cur: 0xf6, idx: 0xc7}, + 226: {cur: 0x1b, idx: 0x301}, + 227: {cur: 0x35, idx: 0x0}, + 228: {cur: 0x72, idx: 0x4b}, + 229: {cur: 0xf6, idx: 0xc7}, + 230: {cur: 0x125, idx: 0x0}, + 231: {cur: 0x127, idx: 0x0}, + 232: {cur: 0x52, idx: 0x304}, + 233: {cur: 0x81, idx: 0x304}, + 234: {cur: 0xbe, idx: 0x304}, + 235: {cur: 0xd0, idx: 0x4f}, + 236: {cur: 0xdb, idx: 0x304}, + 237: {cur: 0xf6, idx: 0xc7}, + 238: {cur: 0x4a, idx: 0x318}, + 239: {cur: 0x61, idx: 0x320}, + 240: {cur: 0x6a, idx: 0x325}, + 241: {cur: 0x89, idx: 0x32a}, + 242: {cur: 0xd0, idx: 0x4f}, + 243: {cur: 0xd4, idx: 0x32d}, + 244: {cur: 0xe9, idx: 0x0}, + 245: {cur: 0xf6, idx: 0xc7}, + 246: {cur: 0x127, idx: 0x8a}, + 247: {cur: 0x5e, idx: 0x0}, + 248: {cur: 0x1b, idx: 0x349}, + 249: {cur: 0x27, idx: 0x34c}, + 250: {cur: 0x4b, idx: 0xa2}, + 251: {cur: 0x58, idx: 0x3f}, + 252: {cur: 0x81, idx: 0x34f}, + 253: {cur: 0xcc, idx: 0x352}, + 254: {cur: 0xdb, idx: 0x34f}, + 255: {cur: 0x101, idx: 0x291}, + 256: {cur: 0x58, idx: 0x0}, + 257: {cur: 0xd0, idx: 0x4f}, + 258: {cur: 0xf6, idx: 0xc7}, + 259: {cur: 0x58, idx: 0x33}, + 260: {cur: 0x61, idx: 0x268}, + 261: {cur: 0xe4, idx: 0x37b}, + 262: {cur: 0xe9, idx: 0x248}, + 263: {cur: 0x104, idx: 0x380}, + 264: {cur: 0x37, idx: 0x384}, + 265: {cur: 0x61, idx: 0x3f}, + 266: {cur: 0xd0, idx: 0xae}, + 267: {cur: 0xe4, idx: 0x3f}, + 268: {cur: 0xe9, idx: 0x3f}, + 269: {cur: 0x61, idx: 0x3f}, + 270: {cur: 0xd0, idx: 0xae}, + 271: {cur: 0xe4, idx: 0x3f}, + 272: {cur: 0xe9, idx: 0x3f}, + 273: {cur: 0x104, idx: 0x392}, + 274: {cur: 0xf6, idx: 0xc7}, + 275: {cur: 0xf6, idx: 0xc7}, + 276: {cur: 0x9, idx: 0x0}, + 277: {cur: 0x11, idx: 0x0}, + 278: {cur: 0x13, idx: 0x0}, + 279: {cur: 0x18, idx: 0x0}, + 280: {cur: 0x1a, idx: 0x0}, + 281: {cur: 0x1b, idx: 0x0}, + 282: {cur: 0x25, idx: 0x0}, + 283: {cur: 0x26, idx: 0x0}, + 284: {cur: 0x27, idx: 0x0}, + 285: {cur: 0x2e, idx: 0x0}, + 286: {cur: 0x32, idx: 0x0}, + 287: {cur: 0x35, idx: 0x0}, + 288: {cur: 0x37, idx: 0x0}, + 289: {cur: 0x39, idx: 0x0}, + 290: {cur: 0x3a, idx: 0x0}, + 291: {cur: 0x41, idx: 0x0}, + 292: {cur: 0x44, idx: 0x0}, + 293: {cur: 0x45, idx: 0x0}, + 294: {cur: 0x47, idx: 0x0}, + 295: {cur: 0x4a, idx: 0x0}, + 296: {cur: 0x4b, idx: 0x0}, + 297: {cur: 0x4e, idx: 0x0}, + 298: {cur: 0x52, idx: 0x0}, + 299: {cur: 0x53, idx: 0x0}, + 300: {cur: 0x58, idx: 0x0}, + 301: {cur: 0x5c, idx: 0x0}, + 302: {cur: 0x60, idx: 0x0}, + 303: {cur: 0x61, idx: 0x0}, + 304: {cur: 0x65, idx: 0x0}, + 305: {cur: 0x68, idx: 0x0}, + 306: {cur: 0x6a, idx: 0x0}, + 307: {cur: 0x6e, idx: 0x0}, + 308: {cur: 0x71, idx: 0x0}, + 309: {cur: 0x72, idx: 0x0}, + 310: {cur: 0x73, idx: 0x0}, + 311: {cur: 0x75, idx: 0x0}, + 312: {cur: 0x77, idx: 0x0}, + 313: {cur: 0x78, idx: 0x0}, + 314: {cur: 0x7c, idx: 0x0}, + 315: {cur: 0x7d, idx: 0x0}, + 316: {cur: 0x81, idx: 0x0}, + 317: {cur: 0x83, idx: 0x0}, + 318: {cur: 0x88, idx: 0x0}, + 319: {cur: 0x89, idx: 0x0}, + 320: {cur: 0x8a, idx: 0x0}, + 321: {cur: 0x8d, idx: 0x0}, + 322: {cur: 0x8f, idx: 0x0}, + 323: {cur: 0x90, idx: 0x0}, + 324: {cur: 0x91, idx: 0x0}, + 325: {cur: 0x92, idx: 0x0}, + 326: {cur: 0x93, idx: 0x0}, + 327: {cur: 0x94, idx: 0x0}, + 328: {cur: 0x96, idx: 0x0}, + 329: {cur: 0x9b, idx: 0x0}, + 330: {cur: 0xa3, idx: 0x0}, + 331: {cur: 0xa8, idx: 0x0}, + 332: {cur: 0xa9, idx: 0x0}, + 333: {cur: 0xae, idx: 0x0}, + 334: {cur: 0xb2, idx: 0x0}, + 335: {cur: 0xb5, idx: 0x0}, + 336: {cur: 0xb9, idx: 0x0}, + 337: {cur: 0xba, idx: 0x0}, + 338: {cur: 0xbc, idx: 0x0}, + 339: {cur: 0xbe, idx: 0x0}, + 340: {cur: 0xbf, idx: 0x0}, + 341: {cur: 0xc0, idx: 0x0}, + 342: {cur: 0xc7, idx: 0x0}, + 343: {cur: 0xc8, idx: 0x0}, + 344: {cur: 0xc9, idx: 0x0}, + 345: {cur: 0xcc, idx: 0x0}, + 346: {cur: 0xd0, idx: 0x0}, + 347: {cur: 0xd3, idx: 0x0}, + 348: {cur: 0xd4, idx: 0x0}, + 349: {cur: 0xd6, idx: 0x0}, + 350: {cur: 0xdb, idx: 0x0}, + 351: {cur: 0xdc, idx: 0x0}, + 352: {cur: 0xdd, idx: 0x0}, + 353: {cur: 0xe2, idx: 0x0}, + 354: {cur: 0xe4, idx: 0x0}, + 355: {cur: 0xe5, idx: 0x0}, + 356: {cur: 0xe9, idx: 0x0}, + 357: {cur: 0xeb, idx: 0x0}, + 358: {cur: 0xf1, idx: 0x0}, + 359: {cur: 0xf4, idx: 0x0}, + 360: {cur: 0xf5, idx: 0x0}, + 361: {cur: 0xf6, idx: 0x0}, + 362: {cur: 0xf8, idx: 0x0}, + 363: {cur: 0x101, idx: 0x0}, + 364: {cur: 0x104, idx: 0x0}, + 365: {cur: 0x105, idx: 0x0}, + 366: {cur: 0x110, idx: 0x0}, + 367: {cur: 0x125, idx: 0x0}, + 368: {cur: 0x127, idx: 0x0}, + 369: {cur: 0xf6, idx: 0xc7}, + 370: {cur: 0x58, idx: 0x3e5}, + 371: {cur: 0x89, idx: 0x32a}, + 372: {cur: 0x92, idx: 0x2b8}, + 373: {cur: 0xbc, idx: 0x41a}, + 374: {cur: 0xd0, idx: 0x4f}, + 375: {cur: 0xd4, idx: 0x421}, + 376: {cur: 0xf6, idx: 0xc7}, + 377: {cur: 0x127, idx: 0x441}, + 378: {cur: 0x37, idx: 0x258}, + 379: {cur: 0x65, idx: 0x0}, + 380: {cur: 0x89, idx: 0x6b}, + 381: {cur: 0xbc, idx: 0x9b}, + 382: {cur: 0x127, idx: 0xeb}, + 383: {cur: 0xf6, idx: 0xc7}, + 384: {cur: 0xd0, idx: 0xee}, + 385: {cur: 0xf6, idx: 0xc7}, + 386: {cur: 0x89, idx: 0x32a}, + 387: {cur: 0xd2, idx: 0x46d}, + 388: {cur: 0xf6, idx: 0xc7}, + 389: {cur: 0xae, idx: 0x474}, + 390: {cur: 0xf6, idx: 0xc7}, + 391: {cur: 0xf6, idx: 0xc7}, + 392: {cur: 0xd0, idx: 0x48e}, + 393: {cur: 0xf6, idx: 0xc7}, + 394: {cur: 0xf6, idx: 0xc7}, + 395: {cur: 0xf6, idx: 0xc7}, + 396: {cur: 0xf6, idx: 0xc7}, + 397: {cur: 0xf6, idx: 0xc7}, + 398: {cur: 0xf6, idx: 0xc7}, + 399: {cur: 0x37, idx: 0x258}, + 400: {cur: 0x58, idx: 0x3e5}, + 401: {cur: 0xbe, idx: 0x49b}, + 402: {cur: 0xf6, idx: 0xc7}, + 403: {cur: 0x44, idx: 0x4a3}, + 404: {cur: 0x85, idx: 0x4a3}, + 405: {cur: 0xd0, idx: 0x4a7}, + 406: {cur: 0xf6, idx: 0xc7}, + 407: {cur: 0xf6, idx: 0xc7}, + 408: {cur: 0xf6, idx: 0xc7}, + 409: {cur: 0xd0, idx: 0x4b2}, + 410: {cur: 0xf6, idx: 0xc7}, + 411: {cur: 0xd0, idx: 0x4f}, + 412: {cur: 0xf6, idx: 0xc7}, + 413: {cur: 0x25, idx: 0x251}, + 414: {cur: 0x32, idx: 0x255}, + 415: {cur: 0x39, idx: 0x146}, + 416: {cur: 0x3a, idx: 0x9b}, + 417: {cur: 0x53, idx: 0x264}, + 418: {cur: 0x58, idx: 0x4b9}, + 419: {cur: 0x72, idx: 0x4b}, + 420: {cur: 0x75, idx: 0x4bc}, + 421: {cur: 0x83, idx: 0x275}, + 422: {cur: 0xf5, idx: 0x21b}, + 423: {cur: 0xf6, idx: 0xc7}, + 424: {cur: 0xf6, idx: 0xc7}, + 425: {cur: 0xf6, idx: 0xc7}, + 426: {cur: 0x1b, idx: 0x0}, + 427: {cur: 0x37, idx: 0x258}, + 428: {cur: 0x7c, idx: 0x0}, + 429: {cur: 0x7d, idx: 0x0}, + 430: {cur: 0x88, idx: 0x0}, + 431: {cur: 0x91, idx: 0x0}, + 432: {cur: 0xa9, idx: 0x0}, + 433: {cur: 0xc9, idx: 0x4c6}, + 434: {cur: 0xcc, idx: 0x352}, + 435: {cur: 0xd2, idx: 0x4c9}, + 436: {cur: 0x105, idx: 0x0}, + 437: {cur: 0xf6, idx: 0xc7}, + 438: {cur: 0xf6, idx: 0xc7}, + 439: {cur: 0xf6, idx: 0xc7}, + 440: {cur: 0xdb, idx: 0x4d7}, + 441: {cur: 0xf6, idx: 0xc7}, + 442: {cur: 0xf6, idx: 0xc7}, + 443: {cur: 0xf6, idx: 0xc7}, + 444: {cur: 0x1a, idx: 0x24c}, + 445: {cur: 0x32, idx: 0x255}, + 446: {cur: 0xd0, idx: 0x4f}, + 447: {cur: 0xf6, idx: 0xc7}, + 448: {cur: 0xbf, idx: 0x4f1}, + 449: {cur: 0xf6, idx: 0xc7}, + 450: {cur: 0xf6, idx: 0xc7}, + 451: {cur: 0xd0, idx: 0x500}, + 452: {cur: 0xf6, idx: 0xc7}, + 453: {cur: 0xd0, idx: 0x4f}, + 454: {cur: 0xf6, idx: 0xc7}, + 455: {cur: 0xf6, idx: 0xc7}, + 456: {cur: 0x65, idx: 0x515}, + 457: {cur: 0xd0, idx: 0x4f}, + 458: {cur: 0xf6, idx: 0xc7}, + 459: {cur: 0x37, idx: 0x258}, + 460: {cur: 0x93, idx: 0x52c}, + 461: {cur: 0xf6, idx: 0xc7}, + 462: {cur: 0xf6, idx: 0xc7}, + 463: {cur: 0xf6, idx: 0xc7}, + 464: {cur: 0x65, idx: 0x515}, + 465: {cur: 0xf6, idx: 0xc7}, + 466: {cur: 0x37, idx: 0x552}, + 467: {cur: 0x65, idx: 0x515}, + 468: {cur: 0xf6, idx: 0xc7}, + 469: {cur: 0x5c, idx: 0x0}, + 470: {cur: 0xd0, idx: 0x4f}, + 471: {cur: 0xf6, idx: 0xc7}, + 472: {cur: 0xf6, idx: 0xc7}, + 473: {cur: 0xf6, idx: 0xc7}, + 474: {cur: 0xf6, idx: 0xc7}, + 475: {cur: 0xf6, idx: 0xc7}, + 476: {cur: 0xd0, idx: 0x4f}, + 477: {cur: 0xf6, idx: 0xc7}, + 478: {cur: 0xf6, idx: 0xc7}, + 479: {cur: 0xf6, idx: 0xc7}, + 480: {cur: 0xf6, idx: 0xc7}, + 481: {cur: 0xf6, idx: 0xc7}, + 482: {cur: 0xd0, idx: 0x4f}, + 483: {cur: 0x37, idx: 0x59e}, + 484: {cur: 0x52, idx: 0x34f}, + 485: {cur: 0x75, idx: 0x4bc}, + 486: {cur: 0x81, idx: 0x34f}, + 487: {cur: 0xbe, idx: 0x34f}, + 488: {cur: 0xc9, idx: 0x5a1}, + 489: {cur: 0xdb, idx: 0x34f}, + 490: {cur: 0xf6, idx: 0xc7}, +} // Size: 1988 bytes -// Total table size 18528 bytes (18KiB); checksum: 463A94A0 +// Total table size 18885 bytes (18KiB); checksum: 323F41F3 diff --git a/vendor/golang.org/x/text/date/data_test.go b/vendor/golang.org/x/text/date/data_test.go new file mode 100644 index 0000000..eb388cb --- /dev/null +++ b/vendor/golang.org/x/text/date/data_test.go @@ -0,0 +1,335 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package date + +var enumMap = map[string]uint16{ + "": 0, + "calendars": 0, + "fields": 1, + "timeZoneNames": 2, + "buddhist": 0, + "chinese": 1, + "coptic": 2, + "dangi": 3, + "ethiopic": 4, + "ethiopic-amete-alem": 5, + "generic": 6, + "gregorian": 7, + "hebrew": 8, + "indian": 9, + "islamic": 10, + "islamic-civil": 11, + "islamic-rgsa": 12, + "islamic-tbla": 13, + "islamic-umalqura": 14, + "japanese": 15, + "persian": 16, + "roc": 17, + "months": 0, + "days": 1, + "quarters": 2, + "dayPeriods": 3, + "eras": 4, + "dateFormats": 5, + "timeFormats": 6, + "dateTimeFormats": 7, + "monthPatterns": 8, + "cyclicNameSets": 9, + "format": 0, + "stand-alone": 1, + "numeric": 2, + "widthAbbreviated": 0, + "widthNarrow": 1, + "widthWide": 2, + "widthAll": 3, + "widthShort": 4, + "leap7": 0, + "sun": 0, + "mon": 1, + "tue": 2, + "wed": 3, + "thu": 4, + "fri": 5, + "sat": 6, + "am": 0, + "pm": 1, + "midnight": 2, + "morning1": 3, + "afternoon1": 4, + "evening1": 5, + "night1": 6, + "noon": 7, + "morning2": 8, + "afternoon2": 9, + "night2": 10, + "evening2": 11, + "variant": 1, + "short": 0, + "long": 1, + "full": 2, + "medium": 3, + "dayPartsCycleType": 0, + "daysCycleType": 1, + "monthsCycleType": 2, + "solarTermsCycleType": 3, + "yearsCycleType": 4, + "zodiacsCycleType": 5, + "eraField": 0, + "era-shortField": 1, + "era-narrowField": 2, + "yearField": 3, + "year-shortField": 4, + "year-narrowField": 5, + "quarterField": 6, + "quarter-shortField": 7, + "quarter-narrowField": 8, + "monthField": 9, + "month-shortField": 10, + "month-narrowField": 11, + "weekField": 12, + "week-shortField": 13, + "week-narrowField": 14, + "weekOfMonthField": 15, + "weekOfMonth-shortField": 16, + "weekOfMonth-narrowField": 17, + "dayField": 18, + "day-shortField": 19, + "day-narrowField": 20, + "dayOfYearField": 21, + "dayOfYear-shortField": 22, + "dayOfYear-narrowField": 23, + "weekdayField": 24, + "weekday-shortField": 25, + "weekday-narrowField": 26, + "weekdayOfMonthField": 27, + "weekdayOfMonth-shortField": 28, + "weekdayOfMonth-narrowField": 29, + "sunField": 30, + "sun-shortField": 31, + "sun-narrowField": 32, + "monField": 33, + "mon-shortField": 34, + "mon-narrowField": 35, + "tueField": 36, + "tue-shortField": 37, + "tue-narrowField": 38, + "wedField": 39, + "wed-shortField": 40, + "wed-narrowField": 41, + "thuField": 42, + "thu-shortField": 43, + "thu-narrowField": 44, + "friField": 45, + "fri-shortField": 46, + "fri-narrowField": 47, + "satField": 48, + "sat-shortField": 49, + "sat-narrowField": 50, + "dayperiod-shortField": 51, + "dayperiodField": 52, + "dayperiod-narrowField": 53, + "hourField": 54, + "hour-shortField": 55, + "hour-narrowField": 56, + "minuteField": 57, + "minute-shortField": 58, + "minute-narrowField": 59, + "secondField": 60, + "second-shortField": 61, + "second-narrowField": 62, + "zoneField": 63, + "zone-shortField": 64, + "zone-narrowField": 65, + "displayName": 0, + "relative": 1, + "relativeTime": 2, + "relativePeriod": 3, + "before1": 0, + "current": 1, + "after1": 2, + "before2": 3, + "after2": 4, + "after3": 5, + "future": 0, + "past": 1, + "other": 0, + "one": 1, + "zero": 2, + "two": 3, + "few": 4, + "many": 5, + "zoneFormat": 0, + "regionFormat": 1, + "zone": 2, + "metaZone": 3, + "hourFormat": 0, + "gmtFormat": 1, + "gmtZeroFormat": 2, + "genericTime": 0, + "daylightTime": 1, + "standardTime": 2, + "Etc/UTC": 0, + "Europe/London": 1, + "Europe/Dublin": 2, + "Pacific/Honolulu": 3, + "Afghanistan": 0, + "Africa_Central": 1, + "Africa_Eastern": 2, + "Africa_Southern": 3, + "Africa_Western": 4, + "Alaska": 5, + "Amazon": 6, + "America_Central": 7, + "America_Eastern": 8, + "America_Mountain": 9, + "America_Pacific": 10, + "Anadyr": 11, + "Apia": 12, + "Arabian": 13, + "Argentina": 14, + "Argentina_Western": 15, + "Armenia": 16, + "Atlantic": 17, + "Australia_Central": 18, + "Australia_CentralWestern": 19, + "Australia_Eastern": 20, + "Australia_Western": 21, + "Azerbaijan": 22, + "Azores": 23, + "Bangladesh": 24, + "Bhutan": 25, + "Bolivia": 26, + "Brasilia": 27, + "Brunei": 28, + "Cape_Verde": 29, + "Chamorro": 30, + "Chatham": 31, + "Chile": 32, + "China": 33, + "Choibalsan": 34, + "Christmas": 35, + "Cocos": 36, + "Colombia": 37, + "Cook": 38, + "Cuba": 39, + "Davis": 40, + "DumontDUrville": 41, + "East_Timor": 42, + "Easter": 43, + "Ecuador": 44, + "Europe_Central": 45, + "Europe_Eastern": 46, + "Europe_Further_Eastern": 47, + "Europe_Western": 48, + "Falkland": 49, + "Fiji": 50, + "French_Guiana": 51, + "French_Southern": 52, + "Galapagos": 53, + "Gambier": 54, + "Georgia": 55, + "Gilbert_Islands": 56, + "GMT": 57, + "Greenland_Eastern": 58, + "Greenland_Western": 59, + "Gulf": 60, + "Guyana": 61, + "Hawaii_Aleutian": 62, + "Hong_Kong": 63, + "Hovd": 64, + "India": 65, + "Indian_Ocean": 66, + "Indochina": 67, + "Indonesia_Central": 68, + "Indonesia_Eastern": 69, + "Indonesia_Western": 70, + "Iran": 71, + "Irkutsk": 72, + "Israel": 73, + "Japan": 74, + "Kamchatka": 75, + "Kazakhstan_Eastern": 76, + "Kazakhstan_Western": 77, + "Korea": 78, + "Kosrae": 79, + "Krasnoyarsk": 80, + "Kyrgystan": 81, + "Line_Islands": 82, + "Lord_Howe": 83, + "Macquarie": 84, + "Magadan": 85, + "Malaysia": 86, + "Maldives": 87, + "Marquesas": 88, + "Marshall_Islands": 89, + "Mauritius": 90, + "Mawson": 91, + "Mexico_Northwest": 92, + "Mexico_Pacific": 93, + "Mongolia": 94, + "Moscow": 95, + "Myanmar": 96, + "Nauru": 97, + "Nepal": 98, + "New_Caledonia": 99, + "New_Zealand": 100, + "Newfoundland": 101, + "Niue": 102, + "Norfolk": 103, + "Noronha": 104, + "Novosibirsk": 105, + "Omsk": 106, + "Pakistan": 107, + "Palau": 108, + "Papua_New_Guinea": 109, + "Paraguay": 110, + "Peru": 111, + "Philippines": 112, + "Phoenix_Islands": 113, + "Pierre_Miquelon": 114, + "Pitcairn": 115, + "Ponape": 116, + "Pyongyang": 117, + "Reunion": 118, + "Rothera": 119, + "Sakhalin": 120, + "Samara": 121, + "Samoa": 122, + "Seychelles": 123, + "Singapore": 124, + "Solomon": 125, + "South_Georgia": 126, + "Suriname": 127, + "Syowa": 128, + "Tahiti": 129, + "Taipei": 130, + "Tajikistan": 131, + "Tokelau": 132, + "Tonga": 133, + "Truk": 134, + "Turkmenistan": 135, + "Tuvalu": 136, + "Uruguay": 137, + "Uzbekistan": 138, + "Vanuatu": 139, + "Venezuela": 140, + "Vladivostok": 141, + "Volgograd": 142, + "Vostok": 143, + "Wake": 144, + "Wallis": 145, + "Yakutsk": 146, + "Yekaterinburg": 147, + "Guam": 148, + "North_Mariana": 149, + "Acre": 150, + "Almaty": 151, + "Aqtau": 152, + "Aqtobe": 153, + "Casey": 154, + "Lanka": 155, + "Macau": 156, + "Qyzylorda": 157, +} + +// Total table size 0 bytes (0KiB); checksum: 811C9DC5 diff --git a/vendor/golang.org/x/text/date/gen.go b/vendor/golang.org/x/text/date/gen.go new file mode 100644 index 0000000..6f4ae07 --- /dev/null +++ b/vendor/golang.org/x/text/date/gen.go @@ -0,0 +1,329 @@ +// Copyright 2017 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 ignore + +package main + +import ( + "flag" + "log" + "strconv" + "strings" + + "golang.org/x/text/internal/cldrtree" + "golang.org/x/text/internal/gen" + "golang.org/x/text/language" + "golang.org/x/text/unicode/cldr" +) + +var ( + draft = flag.String("draft", + "contributed", + `Minimal draft requirements (approved, contributed, provisional, unconfirmed).`) +) + +// TODO: +// - Compile format patterns. +// - Compress the large amount of redundancy in metazones. +// - Split trees (with shared buckets) with data that is enough for default +// formatting of Go Time values and and tables that are needed for larger +// variants. +// - zone to metaZone mappings (in supplemental) +// - Add more enum values and also some key maps for some of the elements. + +func main() { + gen.Init() + + r := gen.OpenCLDRCoreZip() + defer r.Close() + + d := &cldr.Decoder{} + d.SetDirFilter("supplemental", "main") + d.SetSectionFilter("dates") + data, err := d.DecodeZip(r) + if err != nil { + log.Fatalf("DecodeZip: %v", err) + } + + dates := cldrtree.New("dates") + buildCLDRTree(data, dates) + + w := gen.NewCodeWriter() + if err := dates.Gen(w); err != nil { + log.Fatal(err) + } + gen.WriteCLDRVersion(w) + w.WriteGoFile("tables.go", "date") + + w = gen.NewCodeWriter() + if err := dates.GenTestData(w); err != nil { + log.Fatal(err) + } + w.WriteGoFile("data_test.go", "date") +} + +func buildCLDRTree(data *cldr.CLDR, dates *cldrtree.Builder) { + context := cldrtree.Enum("context") + widthMap := func(s string) string { + // Align era with width values. + if r, ok := map[string]string{ + "eraAbbr": "abbreviated", + "eraNarrow": "narrow", + "eraNames": "wide", + }[s]; ok { + s = r + } + // Prefix width to disambiguate with some overlapping length values. + return "width" + strings.Title(s) + } + width := cldrtree.EnumFunc("width", widthMap, "abbreviated", "narrow", "wide") + length := cldrtree.Enum("length", "short", "long") + month := cldrtree.Enum("month", "leap7") + relTime := cldrtree.EnumFunc("relTime", func(s string) string { + x, err := strconv.ParseInt(s, 10, 8) + if err != nil { + log.Fatal("Invalid number:", err) + } + return []string{ + "before2", + "before1", + "current", + "after1", + "after2", + "after3", + }[x+2] + }) + // Disambiguate keys like 'months' and 'sun'. + cycleType := cldrtree.EnumFunc("cycleType", func(s string) string { + return s + "CycleType" + }) + field := cldrtree.EnumFunc("field", func(s string) string { + return s + "Field" + }) + timeType := cldrtree.EnumFunc("timeType", func(s string) string { + if s == "" { + return "genericTime" + } + return s + "Time" + }, "generic") + + zoneType := []cldrtree.Option{cldrtree.SharedType(), timeType} + metaZoneType := []cldrtree.Option{cldrtree.SharedType(), timeType} + + for _, lang := range data.Locales() { + tag := language.Make(lang) + ldml := data.RawLDML(lang) + if ldml.Dates == nil { + continue + } + x := dates.Locale(tag) + if x := x.Index(ldml.Dates.Calendars); x != nil { + for _, cal := range ldml.Dates.Calendars.Calendar { + x := x.IndexFromType(cal) + if x := x.Index(cal.Months); x != nil { + for _, mc := range cal.Months.MonthContext { + x := x.IndexFromType(mc, context) + for _, mw := range mc.MonthWidth { + x := x.IndexFromType(mw, width) + for _, m := range mw.Month { + x.SetValue(m.Yeartype+m.Type, m, month) + } + } + } + } + if x := x.Index(cal.MonthPatterns); x != nil { + for _, mc := range cal.MonthPatterns.MonthPatternContext { + x := x.IndexFromType(mc, context) + for _, mw := range mc.MonthPatternWidth { + // Value is always leap, so no need to create a + // subindex. + for _, m := range mw.MonthPattern { + x.SetValue(mw.Type, m, width) + } + } + } + } + if x := x.Index(cal.CyclicNameSets); x != nil { + for _, cns := range cal.CyclicNameSets.CyclicNameSet { + x := x.IndexFromType(cns, cycleType) + for _, cc := range cns.CyclicNameContext { + x := x.IndexFromType(cc, context) + for _, cw := range cc.CyclicNameWidth { + x := x.IndexFromType(cw, width) + for _, c := range cw.CyclicName { + x.SetValue(c.Type, c) + } + } + } + } + } + if x := x.Index(cal.Days); x != nil { + for _, dc := range cal.Days.DayContext { + x := x.IndexFromType(dc, context) + for _, dw := range dc.DayWidth { + x := x.IndexFromType(dw, width) + for _, d := range dw.Day { + x.SetValue(d.Type, d) + } + } + } + } + if x := x.Index(cal.Quarters); x != nil { + for _, qc := range cal.Quarters.QuarterContext { + x := x.IndexFromType(qc, context) + for _, qw := range qc.QuarterWidth { + x := x.IndexFromType(qw, width) + for _, q := range qw.Quarter { + x.SetValue(q.Type, q) + } + } + } + } + if x := x.Index(cal.DayPeriods); x != nil { + for _, dc := range cal.DayPeriods.DayPeriodContext { + x := x.IndexFromType(dc, context) + for _, dw := range dc.DayPeriodWidth { + x := x.IndexFromType(dw, width) + for _, d := range dw.DayPeriod { + x.IndexFromType(d).SetValue(d.Alt, d) + } + } + } + } + if x := x.Index(cal.Eras); x != nil { + opts := []cldrtree.Option{width, cldrtree.SharedType()} + if x := x.Index(cal.Eras.EraNames, opts...); x != nil { + for _, e := range cal.Eras.EraNames.Era { + x.IndexFromAlt(e).SetValue(e.Type, e) + } + } + if x := x.Index(cal.Eras.EraAbbr, opts...); x != nil { + for _, e := range cal.Eras.EraAbbr.Era { + x.IndexFromAlt(e).SetValue(e.Type, e) + } + } + if x := x.Index(cal.Eras.EraNarrow, opts...); x != nil { + for _, e := range cal.Eras.EraNarrow.Era { + x.IndexFromAlt(e).SetValue(e.Type, e) + } + } + } + if x := x.Index(cal.DateFormats); x != nil { + for _, dfl := range cal.DateFormats.DateFormatLength { + x := x.IndexFromType(dfl, length) + for _, df := range dfl.DateFormat { + for _, p := range df.Pattern { + x.SetValue(p.Alt, p) + } + } + } + } + if x := x.Index(cal.TimeFormats); x != nil { + for _, tfl := range cal.TimeFormats.TimeFormatLength { + x := x.IndexFromType(tfl, length) + for _, tf := range tfl.TimeFormat { + for _, p := range tf.Pattern { + x.SetValue(p.Alt, p) + } + } + } + } + if x := x.Index(cal.DateTimeFormats); x != nil { + for _, dtfl := range cal.DateTimeFormats.DateTimeFormatLength { + x := x.IndexFromType(dtfl, length) + for _, dtf := range dtfl.DateTimeFormat { + for _, p := range dtf.Pattern { + x.SetValue(p.Alt, p) + } + } + } + // TODO: + // - appendItems + // - intervalFormats + } + } + } + // TODO: this is a lot of data and is probably relatively little used. + // Store this somewhere else. + if x := x.Index(ldml.Dates.Fields); x != nil { + for _, f := range ldml.Dates.Fields.Field { + x := x.IndexFromType(f, field) + for _, d := range f.DisplayName { + x.Index(d).SetValue(d.Alt, d) + } + for _, r := range f.Relative { + x.Index(r).SetValue(r.Type, r, relTime) + } + for _, rt := range f.RelativeTime { + x := x.Index(rt).IndexFromType(rt) + for _, p := range rt.RelativeTimePattern { + x.SetValue(p.Count, p) + } + } + for _, rp := range f.RelativePeriod { + x.Index(rp).SetValue(rp.Alt, rp) + } + } + } + if x := x.Index(ldml.Dates.TimeZoneNames); x != nil { + format := x.IndexWithName("zoneFormat") + for _, h := range ldml.Dates.TimeZoneNames.HourFormat { + format.SetValue(h.Element(), h) + } + for _, g := range ldml.Dates.TimeZoneNames.GmtFormat { + format.SetValue(g.Element(), g) + } + for _, g := range ldml.Dates.TimeZoneNames.GmtZeroFormat { + format.SetValue(g.Element(), g) + } + for _, r := range ldml.Dates.TimeZoneNames.RegionFormat { + x.Index(r).SetValue(r.Type, r, timeType) + } + + set := func(x *cldrtree.Index, e []*cldr.Common, zone string) { + for _, n := range e { + x.Index(n, zoneType...).SetValue(zone, n) + } + } + zoneWidth := []cldrtree.Option{length, cldrtree.SharedType()} + zs := x.IndexWithName("zone") + for _, z := range ldml.Dates.TimeZoneNames.Zone { + for _, l := range z.Long { + x := zs.Index(l, zoneWidth...) + set(x, l.Generic, z.Type) + set(x, l.Standard, z.Type) + set(x, l.Daylight, z.Type) + } + for _, s := range z.Short { + x := zs.Index(s, zoneWidth...) + set(x, s.Generic, z.Type) + set(x, s.Standard, z.Type) + set(x, s.Daylight, z.Type) + } + } + set = func(x *cldrtree.Index, e []*cldr.Common, zone string) { + for _, n := range e { + x.Index(n, metaZoneType...).SetValue(zone, n) + } + } + zoneWidth = []cldrtree.Option{length, cldrtree.SharedType()} + zs = x.IndexWithName("metaZone") + for _, z := range ldml.Dates.TimeZoneNames.Metazone { + for _, l := range z.Long { + x := zs.Index(l, zoneWidth...) + set(x, l.Generic, z.Type) + set(x, l.Standard, z.Type) + set(x, l.Daylight, z.Type) + } + for _, s := range z.Short { + x := zs.Index(s, zoneWidth...) + set(x, s.Generic, z.Type) + set(x, s.Standard, z.Type) + set(x, s.Daylight, z.Type) + } + } + } + } +} diff --git a/vendor/golang.org/x/text/date/gen_test.go b/vendor/golang.org/x/text/date/gen_test.go new file mode 100644 index 0000000..b6b9159 --- /dev/null +++ b/vendor/golang.org/x/text/date/gen_test.go @@ -0,0 +1,242 @@ +// Copyright 2017 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. + +package date + +import ( + "strconv" + "strings" + "testing" + + "golang.org/x/text/internal/cldrtree" + "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/language/compact" + "golang.org/x/text/internal/testtext" + "golang.org/x/text/language" + "golang.org/x/text/unicode/cldr" +) + +func TestTables(t *testing.T) { + testtext.SkipIfNotLong(t) + + r := gen.OpenCLDRCoreZip() + defer r.Close() + + d := &cldr.Decoder{} + d.SetDirFilter("supplemental", "main") + d.SetSectionFilter("dates") + data, err := d.DecodeZip(r) + if err != nil { + t.Fatalf("DecodeZip: %v", err) + } + + count := 0 + for _, lang := range data.Locales() { + ldml := data.RawLDML(lang) + if ldml.Dates == nil { + continue + } + tag, _ := compact.RegionalID(compact.Tag(language.MustParse(lang))) + + test := func(want cldrtree.Element, path ...string) { + if count > 30 { + return + } + t.Run(lang+"/"+strings.Join(path, "/"), func(t *testing.T) { + p := make([]uint16, len(path)) + for i, s := range path { + if v, err := strconv.Atoi(s); err == nil { + p[i] = uint16(v) + } else if v, ok := enumMap[s]; ok { + p[i] = v + } else { + count++ + t.Fatalf("Unknown key %q", s) + } + } + wantStr := want.GetCommon().Data() + if got := tree.Lookup(tag, p...); got != wantStr { + count++ + t.Errorf("got %q; want %q", got, wantStr) + } + }) + } + + width := func(s string) string { return "width" + strings.Title(s) } + + if ldml.Dates.Calendars != nil { + for _, cal := range ldml.Dates.Calendars.Calendar { + if cal.Months != nil { + for _, mc := range cal.Months.MonthContext { + for _, mw := range mc.MonthWidth { + for _, m := range mw.Month { + test(m, "calendars", cal.Type, "months", mc.Type, width(mw.Type), m.Yeartype+m.Type) + } + } + } + } + if cal.MonthPatterns != nil { + for _, mc := range cal.MonthPatterns.MonthPatternContext { + for _, mw := range mc.MonthPatternWidth { + for _, m := range mw.MonthPattern { + test(m, "calendars", cal.Type, "monthPatterns", mc.Type, width(mw.Type)) + } + } + } + } + if cal.CyclicNameSets != nil { + for _, cns := range cal.CyclicNameSets.CyclicNameSet { + for _, cc := range cns.CyclicNameContext { + for _, cw := range cc.CyclicNameWidth { + for _, c := range cw.CyclicName { + test(c, "calendars", cal.Type, "cyclicNameSets", cns.Type+"CycleType", cc.Type, width(cw.Type), c.Type) + + } + } + } + } + } + if cal.Days != nil { + for _, dc := range cal.Days.DayContext { + for _, dw := range dc.DayWidth { + for _, d := range dw.Day { + test(d, "calendars", cal.Type, "days", dc.Type, width(dw.Type), d.Type) + } + } + } + } + if cal.Quarters != nil { + for _, qc := range cal.Quarters.QuarterContext { + for _, qw := range qc.QuarterWidth { + for _, q := range qw.Quarter { + test(q, "calendars", cal.Type, "quarters", qc.Type, width(qw.Type), q.Type) + } + } + } + } + if cal.DayPeriods != nil { + for _, dc := range cal.DayPeriods.DayPeriodContext { + for _, dw := range dc.DayPeriodWidth { + for _, d := range dw.DayPeriod { + test(d, "calendars", cal.Type, "dayPeriods", dc.Type, width(dw.Type), d.Type, d.Alt) + } + } + } + } + if cal.Eras != nil { + if cal.Eras.EraNames != nil { + for _, e := range cal.Eras.EraNames.Era { + test(e, "calendars", cal.Type, "eras", "widthWide", e.Alt, e.Type) + } + } + if cal.Eras.EraAbbr != nil { + for _, e := range cal.Eras.EraAbbr.Era { + test(e, "calendars", cal.Type, "eras", "widthAbbreviated", e.Alt, e.Type) + } + } + if cal.Eras.EraNarrow != nil { + for _, e := range cal.Eras.EraNarrow.Era { + test(e, "calendars", cal.Type, "eras", "widthNarrow", e.Alt, e.Type) + } + } + } + if cal.DateFormats != nil { + for _, dfl := range cal.DateFormats.DateFormatLength { + for _, df := range dfl.DateFormat { + for _, p := range df.Pattern { + test(p, "calendars", cal.Type, "dateFormats", dfl.Type, p.Alt) + } + } + } + } + if cal.TimeFormats != nil { + for _, tfl := range cal.TimeFormats.TimeFormatLength { + for _, tf := range tfl.TimeFormat { + for _, p := range tf.Pattern { + test(p, "calendars", cal.Type, "timeFormats", tfl.Type, p.Alt) + } + } + } + } + if cal.DateTimeFormats != nil { + for _, dtfl := range cal.DateTimeFormats.DateTimeFormatLength { + for _, dtf := range dtfl.DateTimeFormat { + for _, p := range dtf.Pattern { + test(p, "calendars", cal.Type, "dateTimeFormats", dtfl.Type, p.Alt) + } + } + } + // TODO: + // - appendItems + // - intervalFormats + } + } + } + // TODO: this is a lot of data and is probably relatively little used. + // Store this somewhere else. + if ldml.Dates.Fields != nil { + for _, f := range ldml.Dates.Fields.Field { + field := f.Type + "Field" + for _, d := range f.DisplayName { + test(d, "fields", field, "displayName", d.Alt) + } + for _, r := range f.Relative { + i, _ := strconv.Atoi(r.Type) + v := []string{"before2", "before1", "current", "after1", "after2", "after3"}[i+2] + test(r, "fields", field, "relative", v) + } + for _, rt := range f.RelativeTime { + for _, p := range rt.RelativeTimePattern { + test(p, "fields", field, "relativeTime", rt.Type, p.Count) + } + } + for _, rp := range f.RelativePeriod { + test(rp, "fields", field, "relativePeriod", rp.Alt) + } + } + } + if ldml.Dates.TimeZoneNames != nil { + for _, h := range ldml.Dates.TimeZoneNames.HourFormat { + test(h, "timeZoneNames", "zoneFormat", h.Element()) + } + for _, g := range ldml.Dates.TimeZoneNames.GmtFormat { + test(g, "timeZoneNames", "zoneFormat", g.Element()) + } + for _, g := range ldml.Dates.TimeZoneNames.GmtZeroFormat { + test(g, "timeZoneNames", "zoneFormat", g.Element()) + } + for _, r := range ldml.Dates.TimeZoneNames.RegionFormat { + s := r.Type + if s == "" { + s = "generic" + } + test(r, "timeZoneNames", "regionFormat", s+"Time") + } + + testZone := func(zoneType, zoneWidth, zone string, a ...[]*cldr.Common) { + for _, e := range a { + for _, n := range e { + test(n, "timeZoneNames", zoneType, zoneWidth, n.Element()+"Time", zone) + } + } + } + for _, z := range ldml.Dates.TimeZoneNames.Zone { + for _, l := range z.Long { + testZone("zone", l.Element(), z.Type, l.Generic, l.Standard, l.Daylight) + } + for _, l := range z.Short { + testZone("zone", l.Element(), z.Type, l.Generic, l.Standard, l.Daylight) + } + } + for _, z := range ldml.Dates.TimeZoneNames.Metazone { + for _, l := range z.Long { + testZone("metaZone", l.Element(), z.Type, l.Generic, l.Standard, l.Daylight) + } + for _, l := range z.Short { + testZone("metaZone", l.Element(), z.Type, l.Generic, l.Standard, l.Daylight) + } + } + } + } +} diff --git a/vendor/golang.org/x/text/date/tables.go b/vendor/golang.org/x/text/date/tables.go new file mode 100644 index 0000000..7432964 --- /dev/null +++ b/vendor/golang.org/x/text/date/tables.go @@ -0,0 +1,75291 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package date + +import "golang.org/x/text/internal/cldrtree" + +var tree = &cldrtree.Tree{locales, indices, buckets} + +// Path values: +// +// - widthAbbreviated +// - widthNarrow +// - widthWide +// - widthAll +// - widthShort +// +// - format +// - stand-alone +// - numeric +// +// - leap7 +// - 1..13 +// +// - dayPartsCycleType +// - daysCycleType +// - monthsCycleType +// - solarTermsCycleType +// - yearsCycleType +// - zodiacsCycleType +// +// - short +// - long +// - full +// - medium +// +// - eraField +// - era-shortField +// - era-narrowField +// - yearField +// - year-shortField +// - year-narrowField +// - quarterField +// - quarter-shortField +// - quarter-narrowField +// - monthField +// - month-shortField +// - month-narrowField +// - weekField +// - week-shortField +// - week-narrowField +// - weekOfMonthField +// - weekOfMonth-shortField +// - weekOfMonth-narrowField +// - dayField +// - day-shortField +// - day-narrowField +// - dayOfYearField +// - dayOfYear-shortField +// - dayOfYear-narrowField +// - weekdayField +// - weekday-shortField +// - weekday-narrowField +// - weekdayOfMonthField +// - weekdayOfMonth-shortField +// - weekdayOfMonth-narrowField +// - sunField +// - sun-shortField +// - sun-narrowField +// - monField +// - mon-shortField +// - mon-narrowField +// - tueField +// - tue-shortField +// - tue-narrowField +// - wedField +// - wed-shortField +// - wed-narrowField +// - thuField +// - thu-shortField +// - thu-narrowField +// - friField +// - fri-shortField +// - fri-narrowField +// - satField +// - sat-shortField +// - sat-narrowField +// - dayperiod-shortField +// - dayperiodField +// - dayperiod-narrowField +// - hourField +// - hour-shortField +// - hour-narrowField +// - minuteField +// - minute-shortField +// - minute-narrowField +// - secondField +// - second-shortField +// - second-narrowField +// - zoneField +// - zone-shortField +// - zone-narrowField +// +// - before1 +// - current +// - after1 +// - before2 +// - after2 +// - after3 +// +// - genericTime +// - daylightTime +// - standardTime +// +// - calendars +// - buddhist +// - chinese +// - coptic +// - dangi +// - ethiopic +// - ethiopic-amete-alem +// - generic +// - gregorian +// - hebrew +// - indian +// - islamic +// - islamic-civil +// - islamic-rgsa +// - islamic-tbla +// - islamic-umalqura +// - japanese +// - persian +// - roc +// - months +// - +// - +// - +// - days +// - +// - +// - sun +// - mon +// - tue +// - wed +// - thu +// - fri +// - sat +// - quarters +// - +// - +// - 0..4 +// - dayPeriods +// - +// - +// - am +// - pm +// - midnight +// - morning1 +// - afternoon1 +// - evening1 +// - night1 +// - noon +// - morning2 +// - afternoon2 +// - night2 +// - evening2 +// - "" +// - variant +// - eras +// - +// - "" +// - variant +// - 0..235 +// - dateFormats +// - +// - "" +// - variant +// - timeFormats +// - +// - "" +// - variant +// - dateTimeFormats +// - +// - "" +// - monthPatterns +// - +// - +// - cyclicNameSets +// - +// - +// - +// - 0..60 +// - fields +// - +// - displayName +// - "" +// - variant +// - relative +// - +// - relativeTime +// - future +// - past +// - other +// - one +// - zero +// - two +// - few +// - many +// - relativePeriod +// - "" +// - timeZoneNames +// - zoneFormat +// - hourFormat +// - gmtFormat +// - gmtZeroFormat +// - regionFormat +// - +// - zone +// - +// - +// - Etc/UTC +// - Europe/London +// - Europe/Dublin +// - Pacific/Honolulu +// - metaZone +// - +// - +// - Afghanistan +// - Africa_Central +// - Africa_Eastern +// - Africa_Southern +// - Africa_Western +// - Alaska +// - Amazon +// - America_Central +// - America_Eastern +// - America_Mountain +// - America_Pacific +// - Anadyr +// - Apia +// - Arabian +// - Argentina +// - Argentina_Western +// - Armenia +// - Atlantic +// - Australia_Central +// - Australia_CentralWestern +// - Australia_Eastern +// - Australia_Western +// - Azerbaijan +// - Azores +// - Bangladesh +// - Bhutan +// - Bolivia +// - Brasilia +// - Brunei +// - Cape_Verde +// - Chamorro +// - Chatham +// - Chile +// - China +// - Choibalsan +// - Christmas +// - Cocos +// - Colombia +// - Cook +// - Cuba +// - Davis +// - DumontDUrville +// - East_Timor +// - Easter +// - Ecuador +// - Europe_Central +// - Europe_Eastern +// - Europe_Further_Eastern +// - Europe_Western +// - Falkland +// - Fiji +// - French_Guiana +// - French_Southern +// - Galapagos +// - Gambier +// - Georgia +// - Gilbert_Islands +// - GMT +// - Greenland_Eastern +// - Greenland_Western +// - Gulf +// - Guyana +// - Hawaii_Aleutian +// - Hong_Kong +// - Hovd +// - India +// - Indian_Ocean +// - Indochina +// - Indonesia_Central +// - Indonesia_Eastern +// - Indonesia_Western +// - Iran +// - Irkutsk +// - Israel +// - Japan +// - Kamchatka +// - Kazakhstan_Eastern +// - Kazakhstan_Western +// - Korea +// - Kosrae +// - Krasnoyarsk +// - Kyrgystan +// - Line_Islands +// - Lord_Howe +// - Macquarie +// - Magadan +// - Malaysia +// - Maldives +// - Marquesas +// - Marshall_Islands +// - Mauritius +// - Mawson +// - Mexico_Northwest +// - Mexico_Pacific +// - Mongolia +// - Moscow +// - Myanmar +// - Nauru +// - Nepal +// - New_Caledonia +// - New_Zealand +// - Newfoundland +// - Niue +// - Norfolk +// - Noronha +// - Novosibirsk +// - Omsk +// - Pakistan +// - Palau +// - Papua_New_Guinea +// - Paraguay +// - Peru +// - Philippines +// - Phoenix_Islands +// - Pierre_Miquelon +// - Pitcairn +// - Ponape +// - Pyongyang +// - Reunion +// - Rothera +// - Sakhalin +// - Samara +// - Samoa +// - Seychelles +// - Singapore +// - Solomon +// - South_Georgia +// - Suriname +// - Syowa +// - Tahiti +// - Taipei +// - Tajikistan +// - Tokelau +// - Tonga +// - Truk +// - Turkmenistan +// - Tuvalu +// - Uruguay +// - Uzbekistan +// - Vanuatu +// - Venezuela +// - Vladivostok +// - Volgograd +// - Vostok +// - Wake +// - Wallis +// - Yakutsk +// - Yekaterinburg +// - Guam +// - North_Mariana +// - Acre +// - Almaty +// - Aqtau +// - Aqtobe +// - Casey +// - Lanka +// - Macau +// - Qyzylorda +// +// Nr elem: 69731 +// uniqued size: 1777797 +// total string size: 2716727 +// bucket waste: 33141 + +// width specifies a property of a CLDR field. +type width uint16 + +// context specifies a property of a CLDR field. +type context uint16 + +// month specifies a property of a CLDR field. +type month uint16 + +// cycleType specifies a property of a CLDR field. +type cycleType uint16 + +// length specifies a property of a CLDR field. +type length uint16 + +// field specifies a property of a CLDR field. +type field uint16 + +// relTime specifies a property of a CLDR field. +type relTime uint16 + +// timeType specifies a property of a CLDR field. +type timeType uint16 + +const ( + calendars = 0 // calendars + fields = 1 // fields + timeZoneNames = 2 // timeZoneNames + buddhist = 0 // buddhist + chinese = 1 // chinese + coptic = 2 // coptic + dangi = 3 // dangi + ethiopic = 4 // ethiopic + ethiopicAmeteAlem = 5 // ethiopic-amete-alem + generic = 6 // generic + gregorian = 7 // gregorian + hebrew = 8 // hebrew + indian = 9 // indian + islamic = 10 // islamic + islamicCivil = 11 // islamic-civil + islamicRgsa = 12 // islamic-rgsa + islamicTbla = 13 // islamic-tbla + islamicUmalqura = 14 // islamic-umalqura + japanese = 15 // japanese + persian = 16 // persian + roc = 17 // roc + months = 0 // months + days = 1 // days + quarters = 2 // quarters + dayPeriods = 3 // dayPeriods + eras = 4 // eras + dateFormats = 5 // dateFormats + timeFormats = 6 // timeFormats + dateTimeFormats = 7 // dateTimeFormats + monthPatterns = 8 // monthPatterns + cyclicNameSets = 9 // cyclicNameSets + format context = 0 // format + standAlone context = 1 // stand-alone + numeric context = 2 // numeric + widthAbbreviated width = 0 // widthAbbreviated + widthNarrow width = 1 // widthNarrow + widthWide width = 2 // widthWide + widthAll width = 3 // widthAll + widthShort width = 4 // widthShort + leap7 month = 0 // leap7 + sun = 0 // sun + mon = 1 // mon + tue = 2 // tue + wed = 3 // wed + thu = 4 // thu + fri = 5 // fri + sat = 6 // sat + am = 0 // am + pm = 1 // pm + midnight = 2 // midnight + morning1 = 3 // morning1 + afternoon1 = 4 // afternoon1 + evening1 = 5 // evening1 + night1 = 6 // night1 + noon = 7 // noon + morning2 = 8 // morning2 + afternoon2 = 9 // afternoon2 + night2 = 10 // night2 + evening2 = 11 // evening2 + variant = 1 // variant + short length = 0 // short + long length = 1 // long + full length = 2 // full + medium length = 3 // medium + dayPartsCycleType cycleType = 0 // dayPartsCycleType + daysCycleType cycleType = 1 // daysCycleType + monthsCycleType cycleType = 2 // monthsCycleType + solarTermsCycleType cycleType = 3 // solarTermsCycleType + yearsCycleType cycleType = 4 // yearsCycleType + zodiacsCycleType cycleType = 5 // zodiacsCycleType + eraField field = 0 // eraField + eraShortField field = 1 // era-shortField + eraNarrowField field = 2 // era-narrowField + yearField field = 3 // yearField + yearShortField field = 4 // year-shortField + yearNarrowField field = 5 // year-narrowField + quarterField field = 6 // quarterField + quarterShortField field = 7 // quarter-shortField + quarterNarrowField field = 8 // quarter-narrowField + monthField field = 9 // monthField + monthShortField field = 10 // month-shortField + monthNarrowField field = 11 // month-narrowField + weekField field = 12 // weekField + weekShortField field = 13 // week-shortField + weekNarrowField field = 14 // week-narrowField + weekOfMonthField field = 15 // weekOfMonthField + weekOfMonthShortField field = 16 // weekOfMonth-shortField + weekOfMonthNarrowField field = 17 // weekOfMonth-narrowField + dayField field = 18 // dayField + dayShortField field = 19 // day-shortField + dayNarrowField field = 20 // day-narrowField + dayOfYearField field = 21 // dayOfYearField + dayOfYearShortField field = 22 // dayOfYear-shortField + dayOfYearNarrowField field = 23 // dayOfYear-narrowField + weekdayField field = 24 // weekdayField + weekdayShortField field = 25 // weekday-shortField + weekdayNarrowField field = 26 // weekday-narrowField + weekdayOfMonthField field = 27 // weekdayOfMonthField + weekdayOfMonthShortField field = 28 // weekdayOfMonth-shortField + weekdayOfMonthNarrowField field = 29 // weekdayOfMonth-narrowField + sunField field = 30 // sunField + sunShortField field = 31 // sun-shortField + sunNarrowField field = 32 // sun-narrowField + monField field = 33 // monField + monShortField field = 34 // mon-shortField + monNarrowField field = 35 // mon-narrowField + tueField field = 36 // tueField + tueShortField field = 37 // tue-shortField + tueNarrowField field = 38 // tue-narrowField + wedField field = 39 // wedField + wedShortField field = 40 // wed-shortField + wedNarrowField field = 41 // wed-narrowField + thuField field = 42 // thuField + thuShortField field = 43 // thu-shortField + thuNarrowField field = 44 // thu-narrowField + friField field = 45 // friField + friShortField field = 46 // fri-shortField + friNarrowField field = 47 // fri-narrowField + satField field = 48 // satField + satShortField field = 49 // sat-shortField + satNarrowField field = 50 // sat-narrowField + dayperiodShortField field = 51 // dayperiod-shortField + dayperiodField field = 52 // dayperiodField + dayperiodNarrowField field = 53 // dayperiod-narrowField + hourField field = 54 // hourField + hourShortField field = 55 // hour-shortField + hourNarrowField field = 56 // hour-narrowField + minuteField field = 57 // minuteField + minuteShortField field = 58 // minute-shortField + minuteNarrowField field = 59 // minute-narrowField + secondField field = 60 // secondField + secondShortField field = 61 // second-shortField + secondNarrowField field = 62 // second-narrowField + zoneField field = 63 // zoneField + zoneShortField field = 64 // zone-shortField + zoneNarrowField field = 65 // zone-narrowField + displayName = 0 // displayName + relative = 1 // relative + relativeTime = 2 // relativeTime + relativePeriod = 3 // relativePeriod + before1 relTime = 0 // before1 + current relTime = 1 // current + after1 relTime = 2 // after1 + before2 relTime = 3 // before2 + after2 relTime = 4 // after2 + after3 relTime = 5 // after3 + future = 0 // future + past = 1 // past + other = 0 // other + one = 1 // one + zero = 2 // zero + two = 3 // two + few = 4 // few + many = 5 // many + zoneFormat = 0 // zoneFormat + regionFormat = 1 // regionFormat + zone = 2 // zone + metaZone = 3 // metaZone + hourFormat = 0 // hourFormat + gmtFormat = 1 // gmtFormat + gmtZeroFormat = 2 // gmtZeroFormat + genericTime timeType = 0 // genericTime + daylightTime timeType = 1 // daylightTime + standardTime timeType = 2 // standardTime + EtcUTC = 0 // Etc/UTC + EuropeLondon = 1 // Europe/London + EuropeDublin = 2 // Europe/Dublin + PacificHonolulu = 3 // Pacific/Honolulu + Afghanistan = 0 // Afghanistan + Africa_Central = 1 // Africa_Central + Africa_Eastern = 2 // Africa_Eastern + Africa_Southern = 3 // Africa_Southern + Africa_Western = 4 // Africa_Western + Alaska = 5 // Alaska + Amazon = 6 // Amazon + America_Central = 7 // America_Central + America_Eastern = 8 // America_Eastern + America_Mountain = 9 // America_Mountain + America_Pacific = 10 // America_Pacific + Anadyr = 11 // Anadyr + Apia = 12 // Apia + Arabian = 13 // Arabian + Argentina = 14 // Argentina + Argentina_Western = 15 // Argentina_Western + Armenia = 16 // Armenia + Atlantic = 17 // Atlantic + Australia_Central = 18 // Australia_Central + Australia_CentralWestern = 19 // Australia_CentralWestern + Australia_Eastern = 20 // Australia_Eastern + Australia_Western = 21 // Australia_Western + Azerbaijan = 22 // Azerbaijan + Azores = 23 // Azores + Bangladesh = 24 // Bangladesh + Bhutan = 25 // Bhutan + Bolivia = 26 // Bolivia + Brasilia = 27 // Brasilia + Brunei = 28 // Brunei + Cape_Verde = 29 // Cape_Verde + Chamorro = 30 // Chamorro + Chatham = 31 // Chatham + Chile = 32 // Chile + China = 33 // China + Choibalsan = 34 // Choibalsan + Christmas = 35 // Christmas + Cocos = 36 // Cocos + Colombia = 37 // Colombia + Cook = 38 // Cook + Cuba = 39 // Cuba + Davis = 40 // Davis + DumontDUrville = 41 // DumontDUrville + East_Timor = 42 // East_Timor + Easter = 43 // Easter + Ecuador = 44 // Ecuador + Europe_Central = 45 // Europe_Central + Europe_Eastern = 46 // Europe_Eastern + Europe_Further_Eastern = 47 // Europe_Further_Eastern + Europe_Western = 48 // Europe_Western + Falkland = 49 // Falkland + Fiji = 50 // Fiji + French_Guiana = 51 // French_Guiana + French_Southern = 52 // French_Southern + Galapagos = 53 // Galapagos + Gambier = 54 // Gambier + Georgia = 55 // Georgia + Gilbert_Islands = 56 // Gilbert_Islands + GMT = 57 // GMT + Greenland_Eastern = 58 // Greenland_Eastern + Greenland_Western = 59 // Greenland_Western + Gulf = 60 // Gulf + Guyana = 61 // Guyana + Hawaii_Aleutian = 62 // Hawaii_Aleutian + Hong_Kong = 63 // Hong_Kong + Hovd = 64 // Hovd + India = 65 // India + Indian_Ocean = 66 // Indian_Ocean + Indochina = 67 // Indochina + Indonesia_Central = 68 // Indonesia_Central + Indonesia_Eastern = 69 // Indonesia_Eastern + Indonesia_Western = 70 // Indonesia_Western + Iran = 71 // Iran + Irkutsk = 72 // Irkutsk + Israel = 73 // Israel + Japan = 74 // Japan + Kamchatka = 75 // Kamchatka + Kazakhstan_Eastern = 76 // Kazakhstan_Eastern + Kazakhstan_Western = 77 // Kazakhstan_Western + Korea = 78 // Korea + Kosrae = 79 // Kosrae + Krasnoyarsk = 80 // Krasnoyarsk + Kyrgystan = 81 // Kyrgystan + Line_Islands = 82 // Line_Islands + Lord_Howe = 83 // Lord_Howe + Macquarie = 84 // Macquarie + Magadan = 85 // Magadan + Malaysia = 86 // Malaysia + Maldives = 87 // Maldives + Marquesas = 88 // Marquesas + Marshall_Islands = 89 // Marshall_Islands + Mauritius = 90 // Mauritius + Mawson = 91 // Mawson + Mexico_Northwest = 92 // Mexico_Northwest + Mexico_Pacific = 93 // Mexico_Pacific + Mongolia = 94 // Mongolia + Moscow = 95 // Moscow + Myanmar = 96 // Myanmar + Nauru = 97 // Nauru + Nepal = 98 // Nepal + New_Caledonia = 99 // New_Caledonia + New_Zealand = 100 // New_Zealand + Newfoundland = 101 // Newfoundland + Niue = 102 // Niue + Norfolk = 103 // Norfolk + Noronha = 104 // Noronha + Novosibirsk = 105 // Novosibirsk + Omsk = 106 // Omsk + Pakistan = 107 // Pakistan + Palau = 108 // Palau + Papua_New_Guinea = 109 // Papua_New_Guinea + Paraguay = 110 // Paraguay + Peru = 111 // Peru + Philippines = 112 // Philippines + Phoenix_Islands = 113 // Phoenix_Islands + Pierre_Miquelon = 114 // Pierre_Miquelon + Pitcairn = 115 // Pitcairn + Ponape = 116 // Ponape + Pyongyang = 117 // Pyongyang + Reunion = 118 // Reunion + Rothera = 119 // Rothera + Sakhalin = 120 // Sakhalin + Samara = 121 // Samara + Samoa = 122 // Samoa + Seychelles = 123 // Seychelles + Singapore = 124 // Singapore + Solomon = 125 // Solomon + South_Georgia = 126 // South_Georgia + Suriname = 127 // Suriname + Syowa = 128 // Syowa + Tahiti = 129 // Tahiti + Taipei = 130 // Taipei + Tajikistan = 131 // Tajikistan + Tokelau = 132 // Tokelau + Tonga = 133 // Tonga + Truk = 134 // Truk + Turkmenistan = 135 // Turkmenistan + Tuvalu = 136 // Tuvalu + Uruguay = 137 // Uruguay + Uzbekistan = 138 // Uzbekistan + Vanuatu = 139 // Vanuatu + Venezuela = 140 // Venezuela + Vladivostok = 141 // Vladivostok + Volgograd = 142 // Volgograd + Vostok = 143 // Vostok + Wake = 144 // Wake + Wallis = 145 // Wallis + Yakutsk = 146 // Yakutsk + Yekaterinburg = 147 // Yekaterinburg + Guam = 148 // Guam + North_Mariana = 149 // North_Mariana + Acre = 150 // Acre + Almaty = 151 // Almaty + Aqtau = 152 // Aqtau + Aqtobe = 153 // Aqtobe + Casey = 154 // Casey + Lanka = 155 // Lanka + Macau = 156 // Macau + Qyzylorda = 157 // Qyzylorda +) + +var locales = []uint32{ // 775 elements + // Entry 0 - 1F + 0x00000000, 0x00000794, 0x00001018, 0x00000794, + 0x0000104d, 0x0000104d, 0x000011ad, 0x000011ad, + 0x000012ed, 0x000012ed, 0x00001cad, 0x00001cad, + 0x0000296f, 0x00001cad, 0x00001cad, 0x0000299e, + 0x00001cad, 0x00001cad, 0x00001cad, 0x00002a10, + 0x00002a34, 0x00002aa6, 0x00002b18, 0x00001cad, + 0x00002b3c, 0x00002bae, 0x00002be3, 0x00002c6c, + 0x00001cad, 0x00002cde, 0x00001cad, 0x00002d50, + // Entry 20 - 3F + 0x00001cad, 0x00001cad, 0x00001cad, 0x00002d85, + 0x00001cad, 0x00002df7, 0x00001cad, 0x00000000, + 0x00002e69, 0x00002e69, 0x00003686, 0x00003686, + 0x000037ed, 0x000037ed, 0x00004748, 0x00004fe6, + 0x00004fe6, 0x00004748, 0x00004748, 0x000051fd, + 0x000051fd, 0x00005364, 0x00005364, 0x00005cbb, + 0x00005cbb, 0x00005deb, 0x00005deb, 0x00005f52, + 0x00005f52, 0x00000000, 0x00006841, 0x00006841, + // Entry 40 - 5F + 0x0000698b, 0x0000698b, 0x0000698b, 0x000075e5, + 0x000075e5, 0x000075e5, 0x00007776, 0x00007776, + 0x00007ee7, 0x00007ee7, 0x00008289, 0x00008d61, + 0x00008d61, 0x00008289, 0x00008289, 0x00009398, + 0x00009398, 0x00009398, 0x00009398, 0x00009398, + 0x00009f85, 0x00009f85, 0x00009f85, 0x0000a88b, + 0x0000a88b, 0x0000ae53, 0x0000ae53, 0x0000af9a, + 0x0000af9a, 0x0000b8a9, 0x0000b8a9, 0x0000bb9e, + // Entry 60 - 7F + 0x0000bbc2, 0x0000bbc2, 0x0000d1ae, 0x0000d1ae, + 0x0000d615, 0x0000d615, 0x0000e034, 0x0000e034, + 0x0000e034, 0x0000eb24, 0x0000eb24, 0x0000ec86, + 0x0000f8fb, 0x0000ec86, 0x0000f961, 0x0000ec86, + 0x0000f9da, 0x0000fa2e, 0x0000fa4d, 0x0000fa6f, + 0x0000fa6f, 0x0000fbd1, 0x0000fbd1, 0x00010342, + 0x00010342, 0x00000000, 0x000104a1, 0x000104a1, + 0x000105b8, 0x000105b8, 0x00010a13, 0x00010a13, + // Entry 80 - 9F + 0x00010b75, 0x00010b75, 0x000113ed, 0x00011411, + 0x00011411, 0x00011411, 0x00011fed, 0x00012901, + 0x00012c4c, 0x00012901, 0x00012d16, 0x00011fed, + 0x00012c4c, 0x00012d3a, 0x00012901, 0x0001337a, + 0x00011fed, 0x00012901, 0x00012901, 0x000133bb, + 0x0001342a, 0x00013477, 0x000138fc, 0x00012c4c, + 0x00013920, 0x00013944, 0x0001398a, 0x00012901, + 0x00012c4c, 0x000139ae, 0x000139d2, 0x00012901, + // Entry A0 - BF + 0x00013a00, 0x00013a24, 0x00012901, 0x00013a52, + 0x00012901, 0x00013a76, 0x00012901, 0x00013e91, + 0x00013eb5, 0x00013ed9, 0x00013efd, 0x00013f21, + 0x00013f51, 0x00013fa0, 0x000140a6, 0x00014102, + 0x00014130, 0x00014154, 0x00014241, 0x00014265, + 0x00014289, 0x000142b0, 0x00012901, 0x00012901, + 0x00012901, 0x00012901, 0x000142f6, 0x0001431a, + 0x0001433e, 0x00014384, 0x0001446e, 0x0001465a, + // Entry C0 - DF + 0x00014744, 0x00014768, 0x000147ac, 0x000147f2, + 0x00014816, 0x0001487e, 0x000148a2, 0x000148c6, + 0x00012c4c, 0x000148ea, 0x0001490e, 0x00014932, + 0x00012901, 0x00012901, 0x00014aa7, 0x00014ad4, + 0x00011fed, 0x00012901, 0x00014af8, 0x00012901, + 0x00014b3e, 0x00014b62, 0x00014b86, 0x00014bad, + 0x00014caa, 0x00012c4c, 0x00014cce, 0x00014cf2, + 0x00014d16, 0x00014d3a, 0x00012901, 0x00014d5e, + // Entry E0 - FF + 0x00012901, 0x00012901, 0x00014d82, 0x00014da6, + 0x00014dec, 0x00011fed, 0x00011fed, 0x00012901, + 0x00012901, 0x00011fed, 0x00012901, 0x00012901, + 0x00014e32, 0x00014ea4, 0x00014ec8, 0x00014f3a, + 0x00014f3a, 0x000152eb, 0x00015fac, 0x00016504, + 0x0001667f, 0x00015fac, 0x00015fac, 0x00016736, + 0x00016885, 0x00016a2b, 0x00015fac, 0x00016ab9, + 0x000152eb, 0x00016be6, 0x000152eb, 0x000152eb, + // Entry 100 - 11F + 0x00016cb2, 0x00016d63, 0x000152eb, 0x00016deb, + 0x00017250, 0x000172b7, 0x00017397, 0x000175a0, + 0x000175c4, 0x00017640, 0x0001775f, 0x000177ed, + 0x00017bed, 0x00017e2d, 0x00017ffa, 0x00017ffa, + 0x00018930, 0x00018930, 0x0001928d, 0x0001928d, + 0x000193f4, 0x0001a00f, 0x000193f4, 0x0001a17a, + 0x0001a17a, 0x0001a17a, 0x0001a2e1, 0x0001a17a, + 0x0001a305, 0x0001a305, 0x0001aec7, 0x0001aec7, + // Entry 120 - 13F + 0x0001bbf2, 0x0001bbf2, 0x0001bbf2, 0x0001c3ef, + 0x0001d68e, 0x0001c3ef, 0x0001c3ef, 0x0001c3ef, + 0x0001c3ef, 0x0001d6bb, 0x0001dd47, 0x0001c3ef, + 0x0001c3ef, 0x0001dd86, 0x0001c3ef, 0x0001de0b, + 0x0001de60, 0x0001de84, 0x0001c3ef, 0x0001c3ef, + 0x0001dea8, 0x0001c3ef, 0x0001c3ef, 0x0001c3ef, + 0x0001deed, 0x0001c3ef, 0x0001c3ef, 0x0001dfba, + 0x0001c3ef, 0x0001c3ef, 0x0001c3ef, 0x0001dffe, + // Entry 140 - 15F + 0x0001c3ef, 0x0001e036, 0x0001c3ef, 0x0001c3ef, + 0x0001c3ef, 0x0001c3ef, 0x0001c3ef, 0x0001e05a, + 0x0001c3ef, 0x0001c3ef, 0x0001e09b, 0x0001e0f8, + 0x0001e11c, 0x0001c3ef, 0x0001e140, 0x0001e164, + 0x0001c3ef, 0x0001c3ef, 0x0001e188, 0x0001e188, + 0x0001e584, 0x0001e584, 0x0001f032, 0x0001f032, + 0x0001fad7, 0x0001fad7, 0x0002054d, 0x0002054d, + 0x00020e81, 0x00020e81, 0x00020e81, 0x00020e81, + // Entry 160 - 17F + 0x00021339, 0x00021339, 0x00000000, 0x00021f71, + 0x00021f71, 0x000220d8, 0x000220d8, 0x00022230, + 0x00022230, 0x00022230, 0x00022230, 0x00022438, + 0x00022438, 0x000226c1, 0x000226c1, 0x000234d0, + 0x000234d0, 0x00023f2d, 0x00024d0b, 0x00023f2d, + 0x00024d3c, 0x00024d3c, 0x000254ad, 0x000254ad, + 0x00026119, 0x00026119, 0x0002699b, 0x0002699b, + 0x0002784b, 0x0002784b, 0x00027a82, 0x00027a82, + // Entry 180 - 19F + 0x00000000, 0x00000000, 0x00027c4b, 0x00027c4b, + 0x00028966, 0x0002931d, 0x00028966, 0x00028966, + 0x00028966, 0x00000000, 0x00000000, 0x00029355, + 0x00029355, 0x00000000, 0x0002a483, 0x0002a483, + 0x00000000, 0x0002a66c, 0x0002a66c, 0x00000000, + 0x00000000, 0x0002a7ce, 0x0002a7ce, 0x0002b1a9, + 0x0002b1a9, 0x00000000, 0x0002b981, 0x0002b981, + 0x00000000, 0x0002bae8, 0x0002bae8, 0x0002bc4f, + // Entry 1A0 - 1BF + 0x0002bc4f, 0x0002c12f, 0x0002c12f, 0x0002c291, + 0x0002c291, 0x0002c3f3, 0x0002c3f3, 0x0002cd1d, + 0x0002cd1d, 0x0002ce26, 0x0002ce26, 0x0002d0e8, + 0x0002d0e8, 0x0002d24f, 0x0002d24f, 0x0002daa2, + 0x0002daa2, 0x0002e6db, 0x0002f3e9, 0x0002e6db, + 0x0002f4ec, 0x0002f4ec, 0x0002fb2a, 0x0002fb2a, + 0x0002fea1, 0x0002fea1, 0x00030008, 0x00030008, + 0x0003015c, 0x0003015c, 0x00000000, 0x000305d9, + // Entry 1C0 - 1DF + 0x000305d9, 0x0003078c, 0x0003078c, 0x0003102c, + 0x0003102c, 0x00031193, 0x00031193, 0x00031890, + 0x00031890, 0x000319df, 0x000319df, 0x00031b59, + 0x00031b59, 0x00031b59, 0x00031b59, 0x00031b59, + 0x00031d4e, 0x00031d4e, 0x00032a33, 0x00032c61, + 0x00032a33, 0x00032c85, 0x00032c85, 0x00033d7d, + 0x00033d7d, 0x00033ee4, 0x00033ee4, 0x0003404b, + 0x0003404b, 0x000341b2, 0x000341b2, 0x00034d87, + // Entry 1E0 - 1FF + 0x00034d87, 0x00034d87, 0x00034edb, 0x00034edb, + 0x0003503b, 0x0003503b, 0x0003518a, 0x0003518a, + 0x000353a0, 0x000353a0, 0x000354e6, 0x000354e6, + 0x00035703, 0x00035703, 0x0003643b, 0x0003643b, + 0x000370db, 0x000370db, 0x00000000, 0x0003794b, + 0x0003794b, 0x000385c8, 0x000392af, 0x000385c8, + 0x000385c8, 0x000392d6, 0x000392d6, 0x00039691, + 0x00039691, 0x000397f3, 0x000397f3, 0x0003a028, + // Entry 200 - 21F + 0x0003a028, 0x00000000, 0x0003a33c, 0x0003a33c, + 0x0003a4a3, 0x0003a4a3, 0x0003a4a3, 0x0003bd33, + 0x0003bd33, 0x0003be78, 0x0003be78, 0x0003be78, + 0x0003c225, 0x0003cac6, 0x0003c225, 0x0003cb3b, + 0x0003cb3b, 0x0003e22a, 0x0003cb3b, 0x0003cb3b, + 0x0003cb3b, 0x0003e251, 0x0003cb3b, 0x0003e2e2, + 0x0003e2e2, 0x0003e431, 0x0003e431, 0x0003ecc0, + 0x0003ecc0, 0x00000000, 0x00000000, 0x00000000, + // Entry 220 - 23F + 0x00000000, 0x0003ee1f, 0x0003ee1f, 0x00000000, + 0x0003ef79, 0x0003ef79, 0x0003f0c8, 0x0003f0c8, + 0x0003f268, 0x0003f2c7, 0x0003f2c7, 0x0003fae7, + 0x0003fae7, 0x0003fae7, 0x0003fe38, 0x00040a83, + 0x00040a83, 0x0003fe38, 0x0003fe38, 0x00000000, + 0x00040b7e, 0x00040b7e, 0x00041978, 0x00041978, + 0x00041c78, 0x00041c78, 0x000425eb, 0x0004344e, + 0x000425eb, 0x000437b8, 0x000434f6, 0x000437b8, + // Entry 240 - 25F + 0x0004359e, 0x000437b8, 0x00043646, 0x00043710, + 0x000437b8, 0x00044078, 0x00044120, 0x000441c8, + 0x00044683, 0x000447e8, 0x000441c8, 0x0004494d, + 0x0004494d, 0x00044b85, 0x00044b85, 0x00044ccc, + 0x00045aa4, 0x00044ccc, 0x00045b8d, 0x00045b8d, + 0x00045cf4, 0x00045cf4, 0x00045cf4, 0x00045cf4, + 0x00045cf4, 0x00045cf4, 0x00046bc6, 0x00046c05, + 0x00046c05, 0x00046db1, 0x00046db1, 0x00046f13, + // Entry 260 - 27F + 0x00046f13, 0x0004754d, 0x0004754d, 0x000476af, + 0x000476af, 0x00047803, 0x00047803, 0x00000000, + 0x00047fd6, 0x0004844e, 0x00047fd6, 0x00047fd6, + 0x00048bf8, 0x00048bf8, 0x00048d17, 0x00048d17, + 0x00048e79, 0x00048e79, 0x00000000, 0x00048fe0, + 0x00049129, 0x00049129, 0x00048fe0, 0x00048fe0, + 0x00049272, 0x00049272, 0x00049b42, 0x00049b42, + 0x0004a8a3, 0x0004a8a3, 0x00000000, 0x00000000, + // Entry 280 - 29F + 0x00000000, 0x0004b588, 0x0004b588, 0x00000000, + 0x0004b746, 0x0004b746, 0x0004b979, 0x0004b979, + 0x0004b979, 0x0004bd6b, 0x0004b979, 0x0004bd8f, + 0x0004bd8f, 0x0004c638, 0x0004c65c, 0x0004c680, + 0x0004c680, 0x0004d2e0, 0x0004d3ca, 0x0004c680, + 0x0004d4af, 0x0004d54e, 0x0004e1ae, 0x0004e298, + 0x0004d54e, 0x0004e37d, 0x00000000, 0x00000000, + 0x00000000, 0x0004e41c, 0x0004e41c, 0x0004f185, + // Entry 2A0 - 2BF + 0x0004e41c, 0x0004f1b1, 0x0004fa33, 0x0004faa1, + 0x0004f1b1, 0x0004f1b1, 0x00000000, 0x0004fae0, + 0x0004fae0, 0x00050742, 0x00050766, 0x000507f4, + 0x00050882, 0x00050882, 0x000514a7, 0x000514a7, + 0x000514a7, 0x00051609, 0x00051609, 0x00051935, + 0x00051935, 0x00052806, 0x00052df5, 0x00052806, + 0x00000000, 0x00052e33, 0x00052e33, 0x00000000, + 0x00000000, 0x000537e3, 0x000537e3, 0x00053fd7, + // Entry 2C0 - 2DF + 0x00054b0e, 0x00053fd7, 0x00000000, 0x00054b32, + 0x00054b32, 0x00054e7d, 0x00054e7d, 0x00054fdf, + 0x00054fdf, 0x00055135, 0x00055135, 0x000556fe, + 0x000556fe, 0x000564ed, 0x0005701b, 0x000564ed, + 0x00057324, 0x00057bb0, 0x00057bb0, 0x00057c55, + 0x00057c55, 0x00057324, 0x00057324, 0x000581c3, + 0x000582d6, 0x000582d6, 0x000581c3, 0x000581c3, + 0x00000000, 0x000583b7, 0x000583b7, 0x00058f05, + // Entry 2E0 - 2FF + 0x00058f05, 0x000590ad, 0x000590ad, 0x00000000, + 0x0005920f, 0x0005920f, 0x00059545, 0x00059545, + 0x00000000, 0x00059895, 0x00059895, 0x000599fc, + 0x000599fc, 0x00059b50, 0x00059b50, 0x00059e1e, + 0x0005a044, 0x00059e1e, 0x0005a1a4, 0x0005b058, + 0x0005b058, 0x0005a1a4, 0x0005a1a4, 0x0005bf0c, + 0x0005bf0c, 0x0005c138, 0x0005c138, 0x0005c138, + 0x0005d2a2, 0x0005d36a, 0x0005d416, 0x0005d567, + // Entry 300 - 31F + 0x0005eda5, 0x0005eda5, 0x0005d567, 0x0005f403, + 0x0005f403, 0x00009398, 0x00011fed, +} // Size: 3124 bytes + +var indices = []uint16{ // 392289 elements + // Entry 0 - 3F + 0x0003, 0x0004, 0x05ef, 0x077c, 0x0012, 0x0017, 0x0029, 0x011a, + 0x0158, 0x0163, 0x01a1, 0x01b3, 0x0211, 0x02ce, 0x030b, 0x0346, + 0x0390, 0x0399, 0x03a2, 0x03ab, 0x03b4, 0x05a1, 0x05dc, 0x0008, + 0x9007, 0x9007, 0x9007, 0x9007, 0x0020, 0x9006, 0x9007, 0x9006, + 0x0003, 0x0024, 0x8000, 0x8000, 0x0001, 0x0026, 0x0001, 0x0000, + 0x0000, 0x000a, 0x0034, 0x9007, 0x9007, 0x9007, 0x0000, 0x00f8, + 0x9007, 0x0109, 0x005d, 0x0070, 0x0002, 0x0037, 0x004a, 0x0003, + 0x8002, 0x9001, 0x003b, 0x000d, 0x0000, 0xffff, 0x0003, 0x0007, + // Entry 40 - 7F + 0x000b, 0x000f, 0x0013, 0x0017, 0x001b, 0x001f, 0x0023, 0x0027, + 0x002b, 0x002f, 0x0003, 0x9000, 0x004e, 0x9000, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x003b, 0x003d, 0x003f, + 0x0041, 0x0043, 0x0045, 0x0048, 0x004b, 0x0003, 0x0061, 0x006c, + 0x0066, 0x0003, 0x0000, 0xffff, 0xffff, 0x004e, 0x0004, 0x0000, + 0xffff, 0xffff, 0xffff, 0x004e, 0x0002, 0x0000, 0xffff, 0x0055, + 0x0006, 0x0077, 0x8004, 0x8004, 0x008c, 0x00ad, 0x00f2, 0x0001, + 0x0079, 0x0003, 0x007d, 0x8000, 0x8000, 0x000d, 0x0000, 0xffff, + // Entry 80 - BF + 0x005a, 0x005d, 0x0062, 0x0066, 0x006a, 0x006f, 0x0072, 0x0075, + 0x0079, 0x007e, 0x0082, 0x0085, 0x0001, 0x008e, 0x0003, 0x0092, + 0x8000, 0x8000, 0x0019, 0x0000, 0xffff, 0x0089, 0x0097, 0x00a2, + 0x00b1, 0x00c0, 0x00d1, 0x00dc, 0x00ea, 0x00f5, 0x0102, 0x0112, + 0x011d, 0x0128, 0x0136, 0x0142, 0x014c, 0x015b, 0x0164, 0x0173, + 0x0181, 0x018c, 0x0197, 0x01a7, 0x01b2, 0x0001, 0x00af, 0x0003, + 0x00b3, 0x8000, 0x8000, 0x003d, 0x0000, 0xffff, 0x01bd, 0x01c4, + 0x01cc, 0x01d5, 0x01de, 0x01e6, 0x01ec, 0x01f4, 0x01fc, 0x0205, + // Entry C0 - FF + 0x020d, 0x0214, 0x021b, 0x0223, 0x022d, 0x0234, 0x023b, 0x0245, + 0x024c, 0x0253, 0x025b, 0x0264, 0x026b, 0x0273, 0x027c, 0x0282, + 0x028a, 0x0293, 0x029b, 0x02a4, 0x02ab, 0x02b2, 0x02b9, 0x02c3, + 0x02cc, 0x02d2, 0x02d9, 0x02e1, 0x02ea, 0x02f2, 0x02fa, 0x0303, + 0x0309, 0x0311, 0x031a, 0x0322, 0x0329, 0x0331, 0x0339, 0x0340, + 0x0349, 0x0351, 0x0358, 0x0362, 0x036a, 0x0370, 0x0377, 0x0381, + 0x0389, 0x0390, 0x0001, 0x00f4, 0x0003, 0xa000, 0x8000, 0x8000, + 0x0004, 0x0106, 0x0100, 0x00fd, 0x0103, 0x0001, 0x0000, 0x0398, + // Entry 100 - 13F + 0x0001, 0x0000, 0x03aa, 0x0001, 0x0000, 0x03b6, 0x0001, 0x0000, + 0x03be, 0x0004, 0x0117, 0x0111, 0x010e, 0x0114, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0008, 0x0123, 0x9007, 0x9007, 0x9007, 0x014e, + 0x9006, 0x9007, 0x9006, 0x0002, 0x0126, 0x013a, 0x0003, 0x8002, + 0x9001, 0x012a, 0x000e, 0x0000, 0xffff, 0x03ce, 0x03d3, 0x03d8, + 0x03de, 0x03e4, 0x03e9, 0x03f0, 0x03f9, 0x0403, 0x040b, 0x0411, + 0x0416, 0x041c, 0x0003, 0x9000, 0x013e, 0x9000, 0x000e, 0x0000, + // Entry 140 - 17F + 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x003b, 0x003d, 0x003f, + 0x0041, 0x0043, 0x0045, 0x0048, 0x004b, 0x0422, 0x0003, 0x0152, + 0x8000, 0x8000, 0x0001, 0x0154, 0x0002, 0x0000, 0x0425, 0x042a, + 0x000a, 0x9001, 0x9001, 0x9001, 0x9001, 0x0000, 0x9001, 0x9001, + 0x9001, 0x9001, 0x9001, 0x0008, 0x016c, 0x9007, 0x9007, 0x9007, + 0x0197, 0x9006, 0x9007, 0x9006, 0x0002, 0x016f, 0x0183, 0x0003, + 0x8002, 0x9001, 0x0173, 0x000e, 0x0000, 0xffff, 0x042f, 0x0438, + 0x043f, 0x0445, 0x044c, 0x0450, 0x0458, 0x0460, 0x0467, 0x046e, + // Entry 180 - 1BF + 0x0473, 0x0479, 0x0481, 0x0003, 0x9000, 0x0187, 0x9000, 0x000e, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x003b, 0x003d, + 0x003f, 0x0041, 0x0043, 0x0045, 0x0048, 0x004b, 0x0422, 0x0003, + 0x019b, 0x8000, 0x8000, 0x0001, 0x019d, 0x0002, 0x0000, 0x0425, + 0x042a, 0x0008, 0x9004, 0x9004, 0x9004, 0x9004, 0x01aa, 0x9004, + 0x9004, 0x9004, 0x0003, 0x01ae, 0x8000, 0x8000, 0x0001, 0x01b0, + 0x0001, 0x0000, 0x0425, 0x0008, 0x01bc, 0x9007, 0x9007, 0x9007, + 0x01e5, 0x01ef, 0x9007, 0x0200, 0x0002, 0x01bf, 0x01d2, 0x0003, + // Entry 1C0 - 1FF + 0x8002, 0x9001, 0x01c3, 0x000d, 0x0000, 0xffff, 0x0003, 0x0007, + 0x000b, 0x000f, 0x0013, 0x0017, 0x001b, 0x001f, 0x0023, 0x0027, + 0x002b, 0x002f, 0x0003, 0x9000, 0x01d6, 0x9000, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x003b, 0x003d, 0x003f, + 0x0041, 0x0043, 0x0045, 0x0048, 0x004b, 0x0003, 0x01e9, 0x8000, + 0x8000, 0x0001, 0x01eb, 0x0002, 0x0000, 0x0425, 0x042a, 0x0004, + 0x01fd, 0x01f7, 0x01f4, 0x01fa, 0x0001, 0x0000, 0x0489, 0x0001, + 0x0000, 0x049a, 0x0001, 0x0000, 0x04a5, 0x0001, 0x0000, 0x04af, + // Entry 200 - 23F + 0x0004, 0x020e, 0x0208, 0x0205, 0x020b, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0008, 0x021a, 0x0243, 0x0264, 0x027d, 0x0291, 0x029b, + 0x02ac, 0x02bd, 0x0002, 0x021d, 0x0230, 0x0003, 0x8002, 0x9001, + 0x0221, 0x000d, 0x0000, 0xffff, 0x0003, 0x0007, 0x000b, 0x000f, + 0x0013, 0x0017, 0x001b, 0x001f, 0x0023, 0x0027, 0x002b, 0x002f, + 0x0003, 0x9000, 0x0234, 0x9000, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x0039, 0x003b, 0x003d, 0x003f, 0x0041, 0x0043, + // Entry 240 - 27F + 0x0045, 0x0048, 0x004b, 0x0002, 0x0246, 0x0255, 0x0005, 0x8002, + 0x9001, 0x024c, 0x0000, 0x8000, 0x0007, 0x0000, 0x04bd, 0x04c1, + 0x04c5, 0x04c9, 0x04cd, 0x04d1, 0x04d5, 0x0005, 0x9000, 0x025b, + 0x9000, 0x0000, 0x9000, 0x0007, 0x0000, 0x04d9, 0x04db, 0x04dd, + 0x04df, 0x04dd, 0x04e1, 0x04d9, 0x0002, 0x0267, 0x0272, 0x0003, + 0x8002, 0x9001, 0x026b, 0x0005, 0x0000, 0xffff, 0x04e3, 0x04e6, + 0x04e9, 0x04ec, 0x0003, 0x9000, 0x0276, 0x9000, 0x0005, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x0002, 0x0280, 0x028d, + // Entry 280 - 2BF + 0x0003, 0x0284, 0x8000, 0x8000, 0x0002, 0x0287, 0x028a, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0003, 0x9000, 0x8000, + 0x8000, 0x0003, 0x0295, 0x8000, 0x8000, 0x0001, 0x0297, 0x0002, + 0x0000, 0x04f5, 0x04f9, 0x0004, 0x02a9, 0x02a3, 0x02a0, 0x02a6, + 0x0001, 0x0000, 0x04fc, 0x0001, 0x0000, 0x050b, 0x0001, 0x0000, + 0x0514, 0x0001, 0x0000, 0x051c, 0x0004, 0x02ba, 0x02b4, 0x02b1, + 0x02b7, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, + 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, 0x02cb, 0x02c5, + // Entry 2C0 - 2FF + 0x02c2, 0x02c8, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x02d7, + 0x9007, 0x9007, 0x9007, 0x0302, 0x9006, 0x9007, 0x9006, 0x0002, + 0x02da, 0x02ee, 0x0003, 0x8002, 0x9001, 0x02de, 0x000e, 0x0000, + 0x057b, 0x054c, 0x0553, 0x055b, 0x0562, 0x0568, 0x056f, 0x0576, + 0x0583, 0x0589, 0x058e, 0x0594, 0x059a, 0x059d, 0x0003, 0x9000, + 0x02f2, 0x9000, 0x000e, 0x0000, 0x003f, 0x0033, 0x0035, 0x0037, + 0x0039, 0x003b, 0x003d, 0x003f, 0x0041, 0x0043, 0x0045, 0x0048, + // Entry 300 - 33F + 0x004b, 0x0422, 0x0003, 0x0306, 0x8000, 0x8000, 0x0001, 0x0308, + 0x0001, 0x0000, 0x04ef, 0x0008, 0x0314, 0x9007, 0x9007, 0x9007, + 0x033d, 0x9006, 0x9007, 0x9006, 0x0002, 0x0317, 0x032a, 0x0003, + 0x8002, 0x9001, 0x031b, 0x000d, 0x0000, 0xffff, 0x05a2, 0x05aa, + 0x05b3, 0x05bc, 0x05c3, 0x05cb, 0x05d2, 0x05d9, 0x05e1, 0x05ec, + 0x05f2, 0x05f8, 0x0003, 0x9000, 0x032e, 0x9000, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x003b, 0x003d, 0x003f, + 0x0041, 0x0043, 0x0045, 0x0048, 0x004b, 0x0003, 0x0341, 0x8000, + // Entry 340 - 37F + 0x8000, 0x0001, 0x0343, 0x0001, 0x0000, 0x0601, 0x0008, 0x034f, + 0x9007, 0x9007, 0x9007, 0x0387, 0x9006, 0x9007, 0x9006, 0x0002, + 0x0352, 0x0374, 0x0003, 0x0356, 0x9001, 0x0365, 0x000d, 0x0000, + 0xffff, 0x0606, 0x060b, 0x0610, 0x0617, 0x061f, 0x0626, 0x062e, + 0x0633, 0x0638, 0x063d, 0x0643, 0x064d, 0x000d, 0x0000, 0xffff, + 0x0657, 0x0660, 0x0666, 0x066f, 0x0679, 0x0682, 0x068c, 0x0692, + 0x069b, 0x06a3, 0x06ab, 0x06ba, 0x0003, 0x9000, 0x0378, 0x9000, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x003b, + // Entry 380 - 3BF + 0x003d, 0x003f, 0x0041, 0x0043, 0x0045, 0x0048, 0x004b, 0x0003, + 0x038b, 0x8000, 0x8000, 0x0001, 0x038d, 0x0001, 0x0000, 0x06c8, + 0x0008, 0x900a, 0x900a, 0x900a, 0x900a, 0x900a, 0x900a, 0x900a, + 0x900a, 0x0008, 0x900a, 0x900a, 0x900a, 0x900a, 0x900a, 0x900a, + 0x900a, 0x900a, 0x0008, 0x900a, 0x900a, 0x900a, 0x900a, 0x900a, + 0x900a, 0x900a, 0x900a, 0x0008, 0x900a, 0x900a, 0x900a, 0x900a, + 0x900a, 0x900a, 0x900a, 0x900a, 0x0008, 0x9007, 0x9007, 0x9007, + 0x9007, 0x03bd, 0x9006, 0x9007, 0x9006, 0x0003, 0x03c1, 0x04b1, + // Entry 3C0 - 3FF + 0x8000, 0x0001, 0x03c3, 0x00ec, 0x0000, 0x06cb, 0x06dd, 0x06f1, + 0x0705, 0x0719, 0x072c, 0x073e, 0x0750, 0x0762, 0x0775, 0x0787, + 0x079b, 0x07b6, 0x07d2, 0x07ec, 0x0806, 0x081e, 0x0830, 0x0843, + 0x0857, 0x086a, 0x087d, 0x0891, 0x08a3, 0x08b5, 0x08c7, 0x08da, + 0x08ed, 0x0900, 0x0914, 0x0926, 0x093a, 0x094e, 0x095f, 0x0972, + 0x0985, 0x0999, 0x09ae, 0x09c2, 0x09d3, 0x09e6, 0x09f7, 0x0a0b, + 0x0a20, 0x0a33, 0x0a46, 0x0a58, 0x0a6a, 0x0a7b, 0x0a8c, 0x0aa2, + 0x0ab7, 0x0acc, 0x0ae1, 0x0af6, 0x0b0b, 0x0b1e, 0x0b32, 0x0b48, + // Entry 400 - 43F + 0x0b60, 0x0b77, 0x0b8d, 0x0ba2, 0x0bb6, 0x0bcb, 0x0be1, 0x0bf6, + 0x0c0b, 0x0c23, 0x0c37, 0x0c4c, 0x0c60, 0x0c74, 0x0c89, 0x0c9f, + 0x0cb3, 0x0cc8, 0x0cdd, 0x0cf2, 0x0d07, 0x0d1c, 0x0d33, 0x0d47, + 0x0d5b, 0x0d6f, 0x0d85, 0x0d9c, 0x0db0, 0x0dc3, 0x0dd7, 0x0def, + 0x0e04, 0x0e19, 0x0e2e, 0x0e43, 0x0e57, 0x0e6d, 0x0e80, 0x0e96, + 0x0eaa, 0x0ec1, 0x0ed4, 0x0ee9, 0x0efd, 0x0f12, 0x0f26, 0x0f39, + 0x0f50, 0x0f64, 0x0f7a, 0x0f8f, 0x0fa4, 0x0fba, 0x0fd1, 0x0fe6, + 0x0ffd, 0x1012, 0x1028, 0x103c, 0x1051, 0x1066, 0x107a, 0x108e, + // Entry 440 - 47F + 0x10a2, 0x10b8, 0x10cf, 0x10e3, 0x10fa, 0x1110, 0x1124, 0x1139, + 0x114d, 0x1163, 0x1178, 0x118d, 0x11a3, 0x11ba, 0x11d0, 0x11e7, + 0x11fb, 0x120f, 0x1224, 0x1238, 0x124d, 0x1262, 0x1276, 0x128b, + 0x12a0, 0x12b5, 0x12ca, 0x12df, 0x12f3, 0x1308, 0x131f, 0x1335, + 0x134b, 0x1360, 0x1374, 0x1388, 0x139e, 0x13b4, 0x13ca, 0x13e0, + 0x13f4, 0x140b, 0x141f, 0x1435, 0x144b, 0x145f, 0x1473, 0x1489, + 0x149c, 0x14b3, 0x14c8, 0x14de, 0x14f5, 0x150b, 0x1522, 0x1538, + 0x154f, 0x1565, 0x157b, 0x158f, 0x15a4, 0x15bb, 0x15d0, 0x15e4, + // Entry 480 - 4BF + 0x15f8, 0x160d, 0x1621, 0x1638, 0x164d, 0x1661, 0x1676, 0x168a, + 0x16a0, 0x16b6, 0x16cc, 0x16e0, 0x16f7, 0x170c, 0x1720, 0x1734, + 0x174a, 0x175e, 0x1773, 0x1787, 0x179b, 0x17b1, 0x17c7, 0x17db, + 0x17f2, 0x1808, 0x181d, 0x1832, 0x1847, 0x185e, 0x1874, 0x1888, + 0x189e, 0x18b3, 0x18c8, 0x18dd, 0x18f1, 0x1906, 0x191b, 0x192f, + 0x1942, 0x1956, 0x196d, 0x1983, 0x1997, 0x19ab, 0x19b1, 0x19b9, + 0x19c0, 0x0001, 0x04b3, 0x00ec, 0x0000, 0x06cb, 0x06dd, 0x06f1, + 0x0705, 0x0719, 0x072c, 0x073e, 0x0750, 0x0762, 0x0775, 0x0787, + // Entry 4C0 - 4FF + 0x079b, 0x07b6, 0x07d2, 0x07ec, 0x0806, 0x081e, 0x0830, 0x0843, + 0x0857, 0x086a, 0x087d, 0x0891, 0x08a3, 0x08b5, 0x08c7, 0x08da, + 0x08ed, 0x0900, 0x0914, 0x0926, 0x093a, 0x094e, 0x095f, 0x0972, + 0x0985, 0x0999, 0x09ae, 0x09c2, 0x09d3, 0x09e6, 0x09f7, 0x0a0b, + 0x0a20, 0x0a33, 0x0a46, 0x0a58, 0x0a6a, 0x0a7b, 0x0a8c, 0x0aa2, + 0x0ab7, 0x0acc, 0x0ae1, 0x0af6, 0x0b0b, 0x0b1e, 0x0b32, 0x0b48, + 0x0b60, 0x0b77, 0x0b8d, 0x0ba2, 0x0bb6, 0x0bcb, 0x0be1, 0x0bf6, + 0x0c0b, 0x0c23, 0x0c37, 0x0c4c, 0x0c60, 0x0c74, 0x0c89, 0x0c9f, + // Entry 500 - 53F + 0x0cb3, 0x0cc8, 0x0cdd, 0x0cf2, 0x0d07, 0x0d1c, 0x0d33, 0x0d47, + 0x0d5b, 0x0d6f, 0x0d85, 0x0d9c, 0x0db0, 0x0dc3, 0x0dd7, 0x0def, + 0x0e04, 0x0e19, 0x0e2e, 0x0e43, 0x0e57, 0x0e6d, 0x0e80, 0x0e96, + 0x0eaa, 0x0ec1, 0x0ed4, 0x0ee9, 0x0efd, 0x0f12, 0x0f26, 0x0f39, + 0x0f50, 0x0f64, 0x0f7a, 0x0f8f, 0x0fa4, 0x0fba, 0x0fd1, 0x0fe6, + 0x0ffd, 0x1012, 0x1028, 0x103c, 0x1051, 0x1066, 0x107a, 0x108e, + 0x10a2, 0x10b8, 0x10cf, 0x10e3, 0x10fa, 0x1110, 0x1124, 0x1139, + 0x114d, 0x1163, 0x1178, 0x118d, 0x11a3, 0x11ba, 0x11d0, 0x11e7, + // Entry 540 - 57F + 0x11fb, 0x120f, 0x1224, 0x1238, 0x124d, 0x1262, 0x1276, 0x128b, + 0x12a0, 0x12b5, 0x12ca, 0x12df, 0x12f3, 0x1308, 0x131f, 0x1335, + 0x134b, 0x1360, 0x1374, 0x1388, 0x139e, 0x13b4, 0x13ca, 0x13e0, + 0x13f4, 0x140b, 0x141f, 0x1435, 0x144b, 0x145f, 0x1473, 0x1489, + 0x149c, 0x14b3, 0x14c8, 0x14de, 0x14f5, 0x150b, 0x1522, 0x1538, + 0x154f, 0x1565, 0x157b, 0x158f, 0x15a4, 0x15bb, 0x15d0, 0x15e4, + 0x15f8, 0x160d, 0x1621, 0x1638, 0x164d, 0x1661, 0x1676, 0x168a, + 0x16a0, 0x16b6, 0x16cc, 0x16e0, 0x16f7, 0x170c, 0x1720, 0x1734, + // Entry 580 - 5BF + 0x174a, 0x175e, 0x1773, 0x1787, 0x179b, 0x17b1, 0x17c7, 0x17db, + 0x17f2, 0x1808, 0x181d, 0x1832, 0x1847, 0x185e, 0x1874, 0x1888, + 0x189e, 0x18b3, 0x18c8, 0x18dd, 0x18f1, 0x1906, 0x191b, 0x192f, + 0x1942, 0x1956, 0x196d, 0x1983, 0x1997, 0x04db, 0x04dd, 0x04d9, + 0x19c7, 0x0008, 0x05aa, 0x9007, 0x9007, 0x9007, 0x05d3, 0x9006, + 0x9007, 0x9006, 0x0002, 0x05ad, 0x05c0, 0x0003, 0x8002, 0x9001, + 0x05b1, 0x000d, 0x0000, 0xffff, 0x19c9, 0x19d3, 0x19df, 0x19e7, + 0x19eb, 0x19f2, 0x19fc, 0x1a01, 0x1a06, 0x1a0b, 0x1a0f, 0x1a16, + // Entry 5C0 - 5FF + 0x0003, 0x9000, 0x05c4, 0x9000, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x0039, 0x003b, 0x003d, 0x003f, 0x0041, 0x0043, + 0x0045, 0x0048, 0x004b, 0x0003, 0x05d7, 0x8000, 0x8000, 0x0001, + 0x05d9, 0x0001, 0x0000, 0x1a1d, 0x0008, 0x9007, 0x9007, 0x9007, + 0x9007, 0x05e5, 0x9006, 0x9007, 0x9006, 0x0003, 0x05e9, 0x8000, + 0x8000, 0x0001, 0x05eb, 0x0002, 0x0000, 0x1a20, 0x1a2e, 0x0042, + 0x0632, 0x8000, 0x8001, 0x0637, 0x8003, 0x8004, 0x064c, 0x8006, + 0x8007, 0x0661, 0x8009, 0x800a, 0x0676, 0x800c, 0x800d, 0x068f, + // Entry 600 - 63F + 0x800f, 0x8010, 0x0694, 0x8012, 0x8013, 0x06a9, 0x8015, 0x8016, + 0x06ae, 0x8018, 0x8019, 0x06b3, 0x801b, 0x801c, 0x06b8, 0x801e, + 0x801f, 0x06ca, 0x8021, 0x8022, 0x06dc, 0x8024, 0x8025, 0x06ee, + 0x8027, 0x8028, 0x0700, 0x802a, 0x802b, 0x0712, 0x802d, 0x802e, + 0x0724, 0x8030, 0x8031, 0x8034, 0x0736, 0x8033, 0x073b, 0x8036, + 0x8037, 0x074f, 0x8039, 0x803a, 0x0763, 0x803c, 0x803d, 0x0777, + 0x803f, 0x8040, 0x0001, 0x0634, 0x0001, 0x0000, 0x1a35, 0x0003, + 0x063b, 0x063e, 0x0643, 0x0001, 0x0000, 0x1a39, 0x0003, 0x0000, + // Entry 640 - 67F + 0x1a3e, 0x1a48, 0x1a52, 0x0002, 0x0646, 0x0649, 0x0001, 0x0000, + 0x1a5c, 0x0001, 0x0000, 0x1a63, 0x0003, 0x0650, 0x0653, 0x0658, + 0x0001, 0x0000, 0x1a6a, 0x0003, 0x0000, 0x1a72, 0x1a7f, 0x1a8c, + 0x0002, 0x065b, 0x065e, 0x0001, 0x0000, 0x1a99, 0x0001, 0x0000, + 0x1aa0, 0x0003, 0x0665, 0x0668, 0x066d, 0x0001, 0x0000, 0x1aa7, + 0x0003, 0x0000, 0x1aad, 0x1ab8, 0x1ac3, 0x0002, 0x0670, 0x0673, + 0x0001, 0x0000, 0x1ace, 0x0001, 0x0000, 0x1ad5, 0x0004, 0x067b, + 0x067e, 0x0683, 0x068c, 0x0001, 0x0000, 0x1adc, 0x0003, 0x0000, + // Entry 680 - 6BF + 0x1ae1, 0x1aeb, 0x1af5, 0x0002, 0x0686, 0x0689, 0x0001, 0x0000, + 0x1aff, 0x0001, 0x0000, 0x1b06, 0x0001, 0x0000, 0x1b0d, 0x0001, + 0x0691, 0x0001, 0x0000, 0x1b1d, 0x0003, 0x0698, 0x069b, 0x06a0, + 0x0001, 0x0000, 0x1b2b, 0x0003, 0x0000, 0x1b2f, 0x1b39, 0x1b3f, + 0x0002, 0x06a3, 0x06a6, 0x0001, 0x0000, 0x1b48, 0x0001, 0x0000, + 0x1b4f, 0x0001, 0x06ab, 0x0001, 0x0000, 0x1b56, 0x0001, 0x06b0, + 0x0001, 0x0000, 0x1b62, 0x0001, 0x06b5, 0x0001, 0x0000, 0x1b72, + 0x0003, 0x0000, 0x06bc, 0x06c1, 0x0003, 0x0000, 0x1b83, 0x1b8f, + // Entry 6C0 - 6FF + 0x1b9b, 0x0002, 0x06c4, 0x06c7, 0x0001, 0x0000, 0x1ba7, 0x0001, + 0x0000, 0x1bb4, 0x0003, 0x0000, 0x06ce, 0x06d3, 0x0003, 0x0000, + 0x1bc1, 0x1bcd, 0x1bd9, 0x0002, 0x06d6, 0x06d9, 0x0001, 0x0000, + 0x1be5, 0x0001, 0x0000, 0x1bf2, 0x0003, 0x0000, 0x06e0, 0x06e5, + 0x0003, 0x0000, 0x1bff, 0x1c0c, 0x1c19, 0x0002, 0x06e8, 0x06eb, + 0x0001, 0x0000, 0x1c26, 0x0001, 0x0000, 0x1c34, 0x0003, 0x0000, + 0x06f2, 0x06f7, 0x0003, 0x0000, 0x1c42, 0x1c51, 0x1c60, 0x0002, + 0x06fa, 0x06fd, 0x0001, 0x0000, 0x1c6f, 0x0001, 0x0000, 0x1c7f, + // Entry 700 - 73F + 0x0003, 0x0000, 0x0704, 0x0709, 0x0003, 0x0000, 0x1c8f, 0x1c9d, + 0x1cab, 0x0002, 0x070c, 0x070f, 0x0001, 0x0000, 0x1cb9, 0x0001, + 0x0000, 0x1cc8, 0x0003, 0x0000, 0x0716, 0x071b, 0x0003, 0x0000, + 0x1cd7, 0x1ce3, 0x1cef, 0x0002, 0x071e, 0x0721, 0x0001, 0x0000, + 0x1cfb, 0x0001, 0x0000, 0x1d08, 0x0003, 0x0000, 0x0728, 0x072d, + 0x0003, 0x0000, 0x1d15, 0x1d23, 0x1d31, 0x0002, 0x0730, 0x0733, + 0x0001, 0x0000, 0x1d3f, 0x0001, 0x0000, 0x1d4e, 0x0001, 0x0738, + 0x0001, 0x0000, 0x1d5d, 0x0003, 0x073f, 0x0742, 0x0746, 0x0001, + // Entry 740 - 77F + 0x0000, 0x1d67, 0x0002, 0x0000, 0xffff, 0x1d6c, 0x0002, 0x0749, + 0x074c, 0x0001, 0x0000, 0x1d76, 0x0001, 0x0000, 0x1d7d, 0x0003, + 0x0753, 0x0756, 0x075a, 0x0001, 0x0000, 0x1d84, 0x0002, 0x0000, + 0xffff, 0x1d8b, 0x0002, 0x075d, 0x0760, 0x0001, 0x0000, 0x1d97, + 0x0001, 0x0000, 0x1da0, 0x0003, 0x0767, 0x076a, 0x076e, 0x0001, + 0x0000, 0x1da9, 0x0002, 0x0000, 0xffff, 0x1db0, 0x0002, 0x0771, + 0x0774, 0x0001, 0x0000, 0x1db4, 0x0001, 0x0000, 0x1dbb, 0x0001, + 0x0779, 0x0001, 0x0000, 0x1dc2, 0x0004, 0x0781, 0x0786, 0x078b, + // Entry 780 - 7BF + 0x0000, 0x0003, 0x0000, 0x1dc7, 0x1dd5, 0x1ddc, 0x0003, 0x0000, + 0x1de0, 0x1de4, 0x1ded, 0x0001, 0x078d, 0x0003, 0x0000, 0x0000, + 0x0791, 0x0001, 0x0000, 0x1df6, 0x0003, 0x0004, 0x0243, 0x0684, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, + 0x0038, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, + 0x0000, 0x0027, 0x0004, 0x0024, 0x001e, 0x001b, 0x0021, 0x0001, + 0x0000, 0x1dfa, 0x0001, 0x0000, 0x1e0b, 0x0001, 0x0000, 0x1e17, + 0x0001, 0x0000, 0x04af, 0x0004, 0x0035, 0x002f, 0x002c, 0x0032, + // Entry 7C0 - 7FF + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x0041, 0x00a6, 0x00fd, + 0x0132, 0x01eb, 0x0210, 0x0221, 0x0232, 0x0002, 0x0044, 0x0075, + 0x0003, 0x0048, 0x0057, 0x0066, 0x000d, 0x0000, 0xffff, 0x1e22, + 0x1e27, 0x1e2c, 0x1e31, 0x1e36, 0x1e3a, 0x1e3f, 0x1e44, 0x1e49, + 0x1e4e, 0x1e53, 0x1e58, 0x000d, 0x0000, 0xffff, 0x1e5d, 0x04e1, + 0x04db, 0x1e5f, 0x04db, 0x1e5d, 0x1e5d, 0x1e5f, 0x04d9, 0x1e61, + 0x1e63, 0x1e65, 0x000d, 0x0000, 0xffff, 0x1e67, 0x1e70, 0x1e7a, + // Entry 800 - 83F + 0x1e80, 0x1e36, 0x1e86, 0x1e8c, 0x1e92, 0x1e9b, 0x1ea5, 0x1ead, + 0x1eb6, 0x0003, 0x0079, 0x0088, 0x0097, 0x000d, 0x0000, 0xffff, + 0x1e22, 0x1e27, 0x1e2c, 0x1e31, 0x1e36, 0x1e3a, 0x1e3f, 0x1e44, + 0x1e49, 0x1e4e, 0x1e53, 0x1e58, 0x000d, 0x0000, 0xffff, 0x1e5d, + 0x04e1, 0x04db, 0x1e5f, 0x04db, 0x1e5d, 0x1e5d, 0x1e5f, 0x04d9, + 0x1e61, 0x1e63, 0x1e65, 0x000d, 0x0000, 0xffff, 0x1e67, 0x1e70, + 0x1e7a, 0x1e80, 0x1e36, 0x1e86, 0x1e8c, 0x1e92, 0x1e9b, 0x1ea5, + 0x1ead, 0x1eb6, 0x0002, 0x00a9, 0x00d3, 0x0005, 0x00af, 0x00b8, + // Entry 840 - 87F + 0x00ca, 0x0000, 0x00c1, 0x0007, 0x0000, 0x1ebf, 0x1ec3, 0x1ec7, + 0x1ecb, 0x1ecf, 0x1ed3, 0x1ed7, 0x0007, 0x0000, 0x04d9, 0x04db, + 0x1e65, 0x04df, 0x1e65, 0x1edb, 0x04d9, 0x0007, 0x0000, 0x1ebf, + 0x1ec3, 0x1ec7, 0x1ecb, 0x1ecf, 0x1ed3, 0x1ed7, 0x0007, 0x0000, + 0x1edd, 0x1ee4, 0x1eec, 0x1ef4, 0x1efd, 0x1f07, 0x1f0e, 0x0005, + 0x00d9, 0x00e2, 0x00f4, 0x0000, 0x00eb, 0x0007, 0x0000, 0x1ebf, + 0x1ec3, 0x1ec7, 0x1ecb, 0x1ecf, 0x1ed3, 0x1ed7, 0x0007, 0x0000, + 0x04d9, 0x04db, 0x1e65, 0x04df, 0x1e65, 0x1edb, 0x04d9, 0x0007, + // Entry 880 - 8BF + 0x0000, 0x1ebf, 0x1ec3, 0x1ec7, 0x1ecb, 0x1ecf, 0x1ed3, 0x1ed7, + 0x0007, 0x0000, 0x1edd, 0x1ee4, 0x1eec, 0x1ef4, 0x1efd, 0x1f07, + 0x1f0e, 0x0002, 0x0100, 0x0119, 0x0003, 0x0104, 0x010b, 0x0112, + 0x0005, 0x0000, 0xffff, 0x1f17, 0x1f1a, 0x1f1d, 0x1f20, 0x0005, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x0005, 0x0000, + 0xffff, 0x1f23, 0x1f31, 0x1f3e, 0x1f4b, 0x0003, 0x011d, 0x0124, + 0x012b, 0x0005, 0x0000, 0xffff, 0x1f17, 0x1f1a, 0x1f1d, 0x1f20, + 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x0005, + // Entry 8C0 - 8FF + 0x0000, 0xffff, 0x1f23, 0x1f31, 0x1f3e, 0x1f4b, 0x0002, 0x0135, + 0x0190, 0x0003, 0x0139, 0x0156, 0x0173, 0x0007, 0x0144, 0x0147, + 0x0141, 0x014a, 0x014d, 0x0150, 0x0153, 0x0001, 0x0000, 0x1f58, + 0x0001, 0x0000, 0x1f62, 0x0001, 0x0000, 0x1f66, 0x0001, 0x0000, + 0x1f6a, 0x0001, 0x0000, 0x1f75, 0x0001, 0x0000, 0x1f80, 0x0001, + 0x0000, 0x1f89, 0x0007, 0x0161, 0x0164, 0x015e, 0x0167, 0x016a, + 0x016d, 0x0170, 0x0001, 0x0000, 0x1f91, 0x0001, 0x0000, 0x1f94, + 0x0001, 0x0000, 0x1f96, 0x0001, 0x0000, 0x1f98, 0x0001, 0x0000, + // Entry 900 - 93F + 0x1f9a, 0x0001, 0x0000, 0x1f9c, 0x0001, 0x0000, 0x1f96, 0x0007, + 0x017e, 0x0181, 0x017b, 0x0184, 0x0187, 0x018a, 0x018d, 0x0001, + 0x0000, 0x1f58, 0x0001, 0x0000, 0x1f62, 0x0001, 0x0000, 0x1f66, + 0x0001, 0x0000, 0x1f6a, 0x0001, 0x0000, 0x1f75, 0x0001, 0x0000, + 0x1f80, 0x0001, 0x0000, 0x1f89, 0x0003, 0x0194, 0x01b1, 0x01ce, + 0x0007, 0x019f, 0x01a2, 0x019c, 0x01a5, 0x01a8, 0x01ab, 0x01ae, + 0x0001, 0x0000, 0x1f58, 0x0001, 0x0000, 0x1f62, 0x0001, 0x0000, + 0x1f66, 0x0001, 0x0000, 0x1f9e, 0x0001, 0x0000, 0x1fa5, 0x0001, + // Entry 940 - 97F + 0x0000, 0x1fac, 0x0001, 0x0000, 0x1fb1, 0x0007, 0x01bc, 0x01bf, + 0x01b9, 0x01c2, 0x01c5, 0x01c8, 0x01cb, 0x0001, 0x0000, 0x1f91, + 0x0001, 0x0000, 0x1f94, 0x0001, 0x0000, 0x1f96, 0x0001, 0x0000, + 0x1f98, 0x0001, 0x0000, 0x1f9a, 0x0001, 0x0000, 0x1f9c, 0x0001, + 0x0000, 0x1f96, 0x0007, 0x01d9, 0x01dc, 0x01d6, 0x01df, 0x01e2, + 0x01e5, 0x01e8, 0x0001, 0x0000, 0x1f58, 0x0001, 0x0000, 0x1f62, + 0x0001, 0x0000, 0x1f66, 0x0001, 0x0000, 0x1f9e, 0x0001, 0x0000, + 0x1fa5, 0x0001, 0x0000, 0x1fac, 0x0001, 0x0000, 0x1fb1, 0x0003, + // Entry 980 - 9BF + 0x01fa, 0x0205, 0x01ef, 0x0002, 0x01f2, 0x01f6, 0x0002, 0x0000, + 0x1fb5, 0x1fdf, 0x0002, 0x0000, 0x1fc3, 0x1feb, 0x0002, 0x01fd, + 0x0201, 0x0002, 0x0001, 0x0000, 0x000c, 0x0002, 0x0001, 0x0005, + 0x0011, 0x0002, 0x0208, 0x020c, 0x0002, 0x0001, 0x0000, 0x000c, + 0x0002, 0x0001, 0x0016, 0x001a, 0x0004, 0x021e, 0x0218, 0x0215, + 0x021b, 0x0001, 0x0001, 0x001d, 0x0001, 0x0001, 0x002d, 0x0001, + 0x0001, 0x0037, 0x0001, 0x0000, 0x051c, 0x0004, 0x022f, 0x0229, + 0x0226, 0x022c, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, + // Entry 9C0 - 9FF + 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, 0x0240, + 0x023a, 0x0237, 0x023d, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0042, + 0x0286, 0x028b, 0x0290, 0x0295, 0x02ac, 0x02be, 0x02d0, 0x02e7, + 0x02f9, 0x030b, 0x0322, 0x0334, 0x0346, 0x0361, 0x0377, 0x038d, + 0x0392, 0x0397, 0x039c, 0x03b5, 0x03ce, 0x03e7, 0x03ec, 0x03f1, + 0x03f6, 0x03fb, 0x0400, 0x0405, 0x040a, 0x040f, 0x0414, 0x0428, + 0x043c, 0x0450, 0x0464, 0x0478, 0x048c, 0x04a0, 0x04b4, 0x04c8, + // Entry A00 - A3F + 0x04dc, 0x04f0, 0x0504, 0x0518, 0x052c, 0x0540, 0x0554, 0x0568, + 0x057c, 0x0590, 0x05a4, 0x05b8, 0x05bd, 0x05c2, 0x05c7, 0x05dd, + 0x05ef, 0x0601, 0x0617, 0x0629, 0x063b, 0x0651, 0x0663, 0x0675, + 0x067a, 0x067f, 0x0001, 0x0288, 0x0001, 0x0001, 0x0040, 0x0001, + 0x028d, 0x0001, 0x0001, 0x0040, 0x0001, 0x0292, 0x0001, 0x0001, + 0x0040, 0x0003, 0x0299, 0x029c, 0x02a1, 0x0001, 0x0001, 0x0044, + 0x0003, 0x0001, 0x0049, 0x0056, 0x0063, 0x0002, 0x02a4, 0x02a8, + 0x0002, 0x0001, 0x0071, 0x0071, 0x0002, 0x0001, 0x007e, 0x007e, + // Entry A40 - A7F + 0x0003, 0x02b0, 0x0000, 0x02b3, 0x0001, 0x0001, 0x008e, 0x0002, + 0x02b6, 0x02ba, 0x0002, 0x0001, 0x0071, 0x0071, 0x0002, 0x0001, + 0x007e, 0x007e, 0x0003, 0x02c2, 0x0000, 0x02c5, 0x0001, 0x0001, + 0x008e, 0x0002, 0x02c8, 0x02cc, 0x0002, 0x0001, 0x0071, 0x0071, + 0x0002, 0x0001, 0x007e, 0x007e, 0x0003, 0x02d4, 0x02d7, 0x02dc, + 0x0001, 0x0001, 0x0091, 0x0003, 0x0001, 0x009a, 0x00aa, 0x00bb, + 0x0002, 0x02df, 0x02e3, 0x0002, 0x0001, 0x00de, 0x00cd, 0x0002, + 0x0001, 0x0103, 0x00ef, 0x0003, 0x02eb, 0x0000, 0x02ee, 0x0001, + // Entry A80 - ABF + 0x0001, 0x0117, 0x0002, 0x02f1, 0x02f5, 0x0002, 0x0001, 0x00de, + 0x00cd, 0x0002, 0x0001, 0x0103, 0x00ef, 0x0003, 0x02fd, 0x0000, + 0x0300, 0x0001, 0x0001, 0x0117, 0x0002, 0x0303, 0x0307, 0x0002, + 0x0001, 0x00de, 0x00de, 0x0002, 0x0001, 0x0103, 0x0103, 0x0003, + 0x030f, 0x0312, 0x0317, 0x0001, 0x0001, 0x011b, 0x0003, 0x0001, + 0x0121, 0x012f, 0x013c, 0x0002, 0x031a, 0x031e, 0x0002, 0x0001, + 0x014b, 0x014b, 0x0002, 0x0001, 0x016b, 0x015a, 0x0003, 0x0326, + 0x0000, 0x0329, 0x0001, 0x0001, 0x017d, 0x0002, 0x032c, 0x0330, + // Entry AC0 - AFF + 0x0002, 0x0001, 0x0181, 0x0181, 0x0002, 0x0001, 0x018d, 0x018d, + 0x0003, 0x0338, 0x0000, 0x033b, 0x0001, 0x0001, 0x017d, 0x0002, + 0x033e, 0x0342, 0x0002, 0x0001, 0x0181, 0x0181, 0x0002, 0x0001, + 0x018d, 0x018d, 0x0004, 0x034b, 0x034e, 0x0353, 0x035e, 0x0001, + 0x0001, 0x019c, 0x0003, 0x0001, 0x01a1, 0x01ae, 0x01ba, 0x0002, + 0x0356, 0x035a, 0x0002, 0x0001, 0x01d5, 0x01c8, 0x0002, 0x0001, + 0x01f2, 0x01e2, 0x0001, 0x0001, 0x0202, 0x0004, 0x0366, 0x0000, + 0x0369, 0x0374, 0x0001, 0x0001, 0x0213, 0x0002, 0x036c, 0x0370, + // Entry B00 - B3F + 0x0002, 0x0001, 0x0217, 0x0217, 0x0002, 0x0001, 0x0222, 0x0222, + 0x0001, 0x0001, 0x0202, 0x0004, 0x037c, 0x0000, 0x037f, 0x038a, + 0x0001, 0x0001, 0x0213, 0x0002, 0x0382, 0x0386, 0x0002, 0x0001, + 0x0217, 0x0217, 0x0002, 0x0001, 0x0222, 0x0222, 0x0001, 0x0001, + 0x0202, 0x0001, 0x038f, 0x0001, 0x0001, 0x0230, 0x0001, 0x0394, + 0x0001, 0x0001, 0x023f, 0x0001, 0x0399, 0x0001, 0x0001, 0x023f, + 0x0003, 0x03a0, 0x03a3, 0x03aa, 0x0001, 0x0001, 0x024a, 0x0005, + 0x0001, 0x0258, 0x025f, 0x0266, 0x024e, 0x026c, 0x0002, 0x03ad, + // Entry B40 - B7F + 0x03b1, 0x0002, 0x0001, 0x0281, 0x0275, 0x0002, 0x0001, 0x029c, + 0x028d, 0x0003, 0x03b9, 0x03bc, 0x03c3, 0x0001, 0x0001, 0x02ab, + 0x0005, 0x0001, 0x0258, 0x025f, 0x0266, 0x024e, 0x026c, 0x0002, + 0x03c6, 0x03ca, 0x0002, 0x0001, 0x0281, 0x0275, 0x0002, 0x0001, + 0x029c, 0x028d, 0x0003, 0x03d2, 0x03d5, 0x03dc, 0x0001, 0x0001, + 0x02ab, 0x0005, 0x0001, 0x0258, 0x025f, 0x0266, 0x024e, 0x026c, + 0x0002, 0x03df, 0x03e3, 0x0002, 0x0001, 0x0281, 0x0275, 0x0002, + 0x0001, 0x029c, 0x028d, 0x0001, 0x03e9, 0x0001, 0x0001, 0x02ae, + // Entry B80 - BBF + 0x0001, 0x03ee, 0x0001, 0x0001, 0x02bb, 0x0001, 0x03f3, 0x0001, + 0x0001, 0x02bb, 0x0001, 0x03f8, 0x0001, 0x0001, 0x02c6, 0x0001, + 0x03fd, 0x0001, 0x0001, 0x02d7, 0x0001, 0x0402, 0x0001, 0x0001, + 0x02d7, 0x0001, 0x0407, 0x0001, 0x0001, 0x02e3, 0x0001, 0x040c, + 0x0001, 0x0001, 0x02f8, 0x0001, 0x0411, 0x0001, 0x0001, 0x02f8, + 0x0003, 0x0000, 0x0418, 0x041d, 0x0003, 0x0001, 0x0308, 0x0317, + 0x0326, 0x0002, 0x0420, 0x0424, 0x0002, 0x0001, 0x0345, 0x0336, + 0x0002, 0x0001, 0x0366, 0x0354, 0x0003, 0x0000, 0x042c, 0x0431, + // Entry BC0 - BFF + 0x0003, 0x0001, 0x0378, 0x0385, 0x0392, 0x0002, 0x0434, 0x0438, + 0x0002, 0x0001, 0x0345, 0x0345, 0x0002, 0x0001, 0x0366, 0x0366, + 0x0003, 0x0000, 0x0440, 0x0445, 0x0003, 0x0001, 0x0378, 0x0385, + 0x0392, 0x0002, 0x0448, 0x044c, 0x0002, 0x0001, 0x0345, 0x0345, + 0x0002, 0x0001, 0x0366, 0x0366, 0x0003, 0x0000, 0x0454, 0x0459, + 0x0003, 0x0001, 0x03a0, 0x03b0, 0x03c0, 0x0002, 0x045c, 0x0460, + 0x0002, 0x0001, 0x03e1, 0x03d1, 0x0002, 0x0001, 0x0404, 0x03f1, + 0x0003, 0x0000, 0x0468, 0x046d, 0x0003, 0x0001, 0x0417, 0x0423, + // Entry C00 - C3F + 0x042f, 0x0002, 0x0470, 0x0474, 0x0002, 0x0001, 0x03e1, 0x03e1, + 0x0002, 0x0001, 0x0404, 0x0404, 0x0003, 0x0000, 0x047c, 0x0481, + 0x0003, 0x0001, 0x0417, 0x0423, 0x042f, 0x0002, 0x0484, 0x0488, + 0x0002, 0x0001, 0x03e1, 0x03e1, 0x0002, 0x0001, 0x0404, 0x0404, + 0x0003, 0x0000, 0x0490, 0x0495, 0x0003, 0x0001, 0x043c, 0x044c, + 0x045c, 0x0002, 0x0498, 0x049c, 0x0002, 0x0001, 0x047d, 0x046d, + 0x0002, 0x0001, 0x04a0, 0x048d, 0x0003, 0x0000, 0x04a4, 0x04a9, + 0x0003, 0x0001, 0x04b3, 0x04bf, 0x04cb, 0x0002, 0x04ac, 0x04b0, + // Entry C40 - C7F + 0x0002, 0x0001, 0x047d, 0x047d, 0x0002, 0x0001, 0x04a0, 0x04a0, + 0x0003, 0x0000, 0x04b8, 0x04bd, 0x0003, 0x0001, 0x04b3, 0x04bf, + 0x04cb, 0x0002, 0x04c0, 0x04c4, 0x0002, 0x0001, 0x047d, 0x047d, + 0x0002, 0x0001, 0x04a0, 0x04a0, 0x0003, 0x0000, 0x04cc, 0x04d1, + 0x0003, 0x0001, 0x04d8, 0x04e9, 0x04fa, 0x0002, 0x04d4, 0x04d8, + 0x0002, 0x0001, 0x051d, 0x050c, 0x0002, 0x0001, 0x0542, 0x052e, + 0x0003, 0x0000, 0x04e0, 0x04e5, 0x0003, 0x0001, 0x0556, 0x0562, + 0x056e, 0x0002, 0x04e8, 0x04ec, 0x0002, 0x0001, 0x051d, 0x051d, + // Entry C80 - CBF + 0x0002, 0x0001, 0x0542, 0x0542, 0x0003, 0x0000, 0x04f4, 0x04f9, + 0x0003, 0x0001, 0x0556, 0x0562, 0x056e, 0x0002, 0x04fc, 0x0500, + 0x0002, 0x0001, 0x051d, 0x051d, 0x0002, 0x0001, 0x0542, 0x0542, + 0x0003, 0x0000, 0x0508, 0x050d, 0x0003, 0x0001, 0x057b, 0x058d, + 0x059f, 0x0002, 0x0510, 0x0514, 0x0002, 0x0001, 0x05c4, 0x05b2, + 0x0002, 0x0001, 0x05eb, 0x05d6, 0x0003, 0x0000, 0x051c, 0x0521, + 0x0003, 0x0001, 0x0600, 0x060c, 0x0618, 0x0002, 0x0524, 0x0528, + 0x0002, 0x0001, 0x05c4, 0x05c4, 0x0002, 0x0001, 0x05eb, 0x05eb, + // Entry CC0 - CFF + 0x0003, 0x0000, 0x0530, 0x0535, 0x0003, 0x0001, 0x0600, 0x060c, + 0x0618, 0x0002, 0x0538, 0x053c, 0x0002, 0x0001, 0x05c4, 0x05c4, + 0x0002, 0x0001, 0x05eb, 0x05eb, 0x0003, 0x0000, 0x0544, 0x0549, + 0x0003, 0x0001, 0x0625, 0x0634, 0x0643, 0x0002, 0x054c, 0x0550, + 0x0002, 0x0001, 0x0662, 0x0653, 0x0002, 0x0001, 0x0683, 0x0671, + 0x0003, 0x0000, 0x0558, 0x055d, 0x0003, 0x0001, 0x0695, 0x06a1, + 0x06aa, 0x0002, 0x0560, 0x0564, 0x0002, 0x0001, 0x0662, 0x0662, + 0x0002, 0x0001, 0x0683, 0x0683, 0x0003, 0x0000, 0x056c, 0x0571, + // Entry D00 - D3F + 0x0003, 0x0001, 0x0695, 0x06a1, 0x06aa, 0x0002, 0x0574, 0x0578, + 0x0002, 0x0001, 0x0662, 0x0662, 0x0002, 0x0001, 0x0683, 0x0683, + 0x0003, 0x0000, 0x0580, 0x0585, 0x0003, 0x0001, 0x06b3, 0x06c4, + 0x06d5, 0x0002, 0x0588, 0x058c, 0x0002, 0x0001, 0x06f8, 0x06e7, + 0x0002, 0x0001, 0x071d, 0x0709, 0x0003, 0x0000, 0x0594, 0x0599, + 0x0003, 0x0001, 0x0731, 0x073d, 0x0746, 0x0002, 0x059c, 0x05a0, + 0x0002, 0x0001, 0x06f8, 0x06f8, 0x0002, 0x0001, 0x071d, 0x071d, + 0x0003, 0x0000, 0x05a8, 0x05ad, 0x0003, 0x0001, 0x0731, 0x073d, + // Entry D40 - D7F + 0x0746, 0x0002, 0x05b0, 0x05b4, 0x0002, 0x0001, 0x06f8, 0x06f8, + 0x0002, 0x0001, 0x071d, 0x071d, 0x0001, 0x05ba, 0x0001, 0x0001, + 0x074f, 0x0001, 0x05bf, 0x0001, 0x0001, 0x0757, 0x0001, 0x05c4, + 0x0001, 0x0001, 0x074f, 0x0003, 0x05cb, 0x05ce, 0x05d2, 0x0001, + 0x0001, 0x075d, 0x0002, 0x0001, 0xffff, 0x0761, 0x0002, 0x05d5, + 0x05d9, 0x0002, 0x0001, 0x076d, 0x076d, 0x0002, 0x0001, 0x0779, + 0x0779, 0x0003, 0x05e1, 0x0000, 0x05e4, 0x0001, 0x0001, 0x0788, + 0x0002, 0x05e7, 0x05eb, 0x0002, 0x0001, 0x076d, 0x076d, 0x0002, + // Entry D80 - DBF + 0x0001, 0x0779, 0x0779, 0x0003, 0x05f3, 0x0000, 0x05f6, 0x0001, + 0x0001, 0x0788, 0x0002, 0x05f9, 0x05fd, 0x0002, 0x0001, 0x076d, + 0x076d, 0x0002, 0x0001, 0x0779, 0x0779, 0x0003, 0x0605, 0x0608, + 0x060c, 0x0001, 0x0001, 0x078b, 0x0002, 0x0001, 0xffff, 0x0792, + 0x0002, 0x060f, 0x0613, 0x0002, 0x0001, 0x014b, 0x014b, 0x0002, + 0x0001, 0x07b3, 0x07a1, 0x0003, 0x061b, 0x0000, 0x061e, 0x0001, + 0x0001, 0x07c5, 0x0002, 0x0621, 0x0625, 0x0002, 0x0001, 0x07ca, + 0x07ca, 0x0002, 0x0001, 0x07d7, 0x07d7, 0x0003, 0x062d, 0x0000, + // Entry DC0 - DFF + 0x0630, 0x0001, 0x0001, 0x07e7, 0x0002, 0x0633, 0x0637, 0x0002, + 0x0001, 0x07ca, 0x07ca, 0x0002, 0x0001, 0x07d7, 0x07d7, 0x0003, + 0x063f, 0x0642, 0x0646, 0x0001, 0x0001, 0x07ea, 0x0002, 0x0001, + 0xffff, 0x07f2, 0x0002, 0x0649, 0x064d, 0x0002, 0x0001, 0x0806, + 0x07f6, 0x0002, 0x0001, 0x082a, 0x0817, 0x0003, 0x0655, 0x0000, + 0x0658, 0x0001, 0x0001, 0x083e, 0x0002, 0x065b, 0x065f, 0x0002, + 0x0001, 0x0843, 0x0843, 0x0002, 0x0001, 0x0850, 0x0850, 0x0003, + 0x0667, 0x0000, 0x066a, 0x0001, 0x0001, 0x0860, 0x0002, 0x066d, + // Entry E00 - E3F + 0x0671, 0x0002, 0x0001, 0x0843, 0x0843, 0x0002, 0x0001, 0x0850, + 0x0850, 0x0001, 0x0677, 0x0001, 0x0001, 0x0863, 0x0001, 0x067c, + 0x0001, 0x0001, 0x086b, 0x0001, 0x0681, 0x0001, 0x0001, 0x086b, + 0x0004, 0x0689, 0x068e, 0x0693, 0x06a2, 0x0003, 0x0000, 0x1dc7, + 0x1dd5, 0x1ddc, 0x0003, 0x0001, 0x0870, 0x0878, 0x0886, 0x0002, + 0x0000, 0x0696, 0x0003, 0x0000, 0x069d, 0x069a, 0x0001, 0x0001, + 0x0897, 0x0003, 0x0001, 0xffff, 0x08b6, 0x08c6, 0x0002, 0x086b, + 0x06a5, 0x0003, 0x073f, 0x07d5, 0x06a9, 0x0094, 0x0001, 0x08d9, + // Entry E40 - E7F + 0x08e8, 0x0900, 0x0913, 0x0940, 0x0980, 0x09b1, 0x09f6, 0x0a63, + 0x0acc, 0x0b1f, 0x0b55, 0x0b82, 0x0bb0, 0x0be9, 0x0c2b, 0x0c6e, + 0x0ca5, 0x0ceb, 0x0d4f, 0x0dbf, 0x0e1c, 0x0e6f, 0x0ea7, 0x0ed8, + 0x0f04, 0x0f10, 0x0f29, 0x0f51, 0x0f77, 0x0fa3, 0x0fc5, 0x0ff6, + 0x1022, 0x1054, 0x1080, 0x1094, 0x10b3, 0x10ed, 0x1128, 0x1149, + 0x1153, 0x116a, 0x1187, 0x11b3, 0x11d5, 0x1220, 0x1250, 0x1279, + 0x12bd, 0x12fd, 0x131f, 0x1330, 0x1352, 0x1360, 0x1379, 0x13a1, + 0x13b4, 0x13d4, 0x1418, 0x144a, 0x1465, 0x1483, 0x14c5, 0x14f6, + // Entry E80 - EBF + 0x1516, 0x152a, 0x153d, 0x154b, 0x1564, 0x1577, 0x1593, 0x15c0, + 0x15f1, 0x1620, 0x1660, 0x16a8, 0x16ba, 0x16da, 0x1705, 0x1720, + 0x174e, 0x175c, 0x177b, 0x17a6, 0x17c7, 0x17ed, 0x17fb, 0x1808, + 0x1816, 0x1838, 0x1862, 0x1882, 0x18d5, 0x1928, 0x1961, 0x1985, + 0x1991, 0x199b, 0x19b9, 0x1a00, 0x1a42, 0x1a73, 0x1a7c, 0x1aa6, + 0x1af4, 0x1b2b, 0x1b58, 0x1b80, 0x1b8a, 0x1bae, 0x1bdf, 0x1c0e, + 0x1c3a, 0x1c68, 0x1caf, 0x1cbc, 0x1cc7, 0x1cd5, 0x1ce2, 0x1cfb, + 0x1d2e, 0x1d5d, 0x1d80, 0x1d8e, 0x1da5, 0x1db9, 0x1dcb, 0x1dd8, + // Entry EC0 - EFF + 0x1de2, 0x1df8, 0x1e1d, 0x1e2d, 0x1e43, 0x1e65, 0x1e80, 0x1eb0, + 0x1ec7, 0x1efd, 0x1f37, 0x1f5d, 0x1f7b, 0x1fb7, 0x1fe1, 0x1fec, + 0x1ffc, 0x201e, 0x2058, 0x0094, 0x0001, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0931, 0x0975, 0x09a5, 0x09d7, 0x0a43, 0x0ab2, 0x0b11, + 0x0b4a, 0x0b79, 0x0ba3, 0x0bd9, 0x0c17, 0x0c61, 0x0c96, 0x0cd2, + 0x0d2c, 0x0da5, 0x0e02, 0x0e5f, 0x0e9d, 0x0ec9, 0xffff, 0xffff, + 0x0f1c, 0xffff, 0x0f68, 0xffff, 0x0fb9, 0x0fec, 0x1018, 0x1045, + 0xffff, 0xffff, 0x10a5, 0x10dd, 0x111f, 0xffff, 0xffff, 0xffff, + // Entry F00 - F3F + 0x1178, 0xffff, 0x11bf, 0x120f, 0xffff, 0x1268, 0x12a9, 0x12f3, + 0xffff, 0xffff, 0xffff, 0xffff, 0x136c, 0xffff, 0xffff, 0x13c2, + 0x1406, 0xffff, 0xffff, 0x1470, 0x14b8, 0x14ed, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x158a, 0x15b4, 0x15e6, 0x1616, + 0x1643, 0xffff, 0xffff, 0x16cc, 0xffff, 0x1710, 0xffff, 0xffff, + 0x176d, 0xffff, 0x17bb, 0xffff, 0xffff, 0xffff, 0xffff, 0x182a, + 0xffff, 0x186d, 0x18bb, 0x1918, 0x1956, 0xffff, 0xffff, 0xffff, + 0x19a5, 0x19ef, 0x1a31, 0xffff, 0xffff, 0x1a8e, 0x1ae4, 0x1b22, + // Entry F40 - F7F + 0x1b4b, 0xffff, 0xffff, 0x1ba1, 0x1bd6, 0x1bff, 0xffff, 0x1c4c, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1cee, 0x1d23, 0x1d53, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1ded, + 0xffff, 0xffff, 0x1e39, 0xffff, 0x1e6f, 0xffff, 0x1ebb, 0x1eed, + 0x1f2b, 0xffff, 0x1f6b, 0x1fa9, 0xffff, 0xffff, 0xffff, 0x2011, + 0x2046, 0x0094, 0x0001, 0xffff, 0xffff, 0xffff, 0xffff, 0x0958, + 0x0994, 0x09c6, 0x0a1e, 0x0a8c, 0x0af0, 0x0b36, 0x0b69, 0x0b94, + 0x0bc6, 0x0c02, 0x0c48, 0x0c84, 0x0cbd, 0x0d0d, 0x0d7c, 0x0de2, + // Entry F80 - FBF + 0x0e3f, 0x0e88, 0x0eba, 0x0ef0, 0xffff, 0xffff, 0x0f3f, 0xffff, + 0x0f8f, 0xffff, 0x0fda, 0x1009, 0x1035, 0x106c, 0xffff, 0xffff, + 0x10ca, 0x1106, 0x113a, 0xffff, 0xffff, 0xffff, 0x119f, 0xffff, + 0x11f4, 0x123a, 0xffff, 0x1293, 0x12da, 0x1310, 0xffff, 0xffff, + 0xffff, 0xffff, 0x138f, 0xffff, 0xffff, 0x13ef, 0x1433, 0xffff, + 0xffff, 0x149f, 0x14db, 0x1508, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x15a5, 0x15d5, 0x1605, 0x1633, 0x1686, 0xffff, + 0xffff, 0x16f1, 0xffff, 0x1739, 0xffff, 0xffff, 0x1792, 0xffff, + // Entry FC0 - FFF + 0x17dc, 0xffff, 0xffff, 0xffff, 0xffff, 0x184f, 0xffff, 0x18a0, + 0x18f8, 0x1941, 0x1975, 0xffff, 0xffff, 0xffff, 0x19d6, 0x1a1a, + 0x1a5c, 0xffff, 0xffff, 0x1ac7, 0x1b0d, 0x1b3d, 0x1b6e, 0xffff, + 0xffff, 0x1bc4, 0x1bf1, 0x1c26, 0xffff, 0x1c8d, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1d11, 0x1d42, 0x1d70, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1e0c, 0xffff, 0xffff, + 0x1e56, 0xffff, 0x1e9a, 0xffff, 0x1edc, 0x1f16, 0x1f4c, 0xffff, + 0x1f94, 0x1fce, 0xffff, 0xffff, 0xffff, 0x2034, 0x2073, 0x0003, + // Entry 1000 - 103F + 0x0876, 0x087d, 0x086f, 0x0005, 0x0001, 0xffff, 0x08fc, 0x090f, + 0x092c, 0x096c, 0x0005, 0x0001, 0xffff, 0xffff, 0xffff, 0xffff, + 0x096c, 0x0005, 0x0001, 0xffff, 0xffff, 0xffff, 0xffff, 0x0970, + 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000b, 0x0020, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0012, 0x0004, 0x0000, 0x001a, 0x0017, 0x001d, 0x0001, + 0x0002, 0x0000, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, + 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0027, 0x0004, + // Entry 1040 - 107F + 0x0000, 0x002f, 0x002c, 0x0032, 0x0001, 0x0002, 0x0025, 0x0001, + 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, 0x0002, 0x0003, 0x00e2, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, + 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, + 0x0000, 0x0000, 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, + 0x0002, 0x0000, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x0044, + 0x0001, 0x0002, 0x004f, 0x0008, 0x002f, 0x0066, 0x008b, 0x0098, + 0x00b0, 0x00c0, 0x00d1, 0x0000, 0x0002, 0x0032, 0x0054, 0x0003, + // Entry 1080 - 10BF + 0x0036, 0x0000, 0x0045, 0x000d, 0x0002, 0xffff, 0x005b, 0x0060, + 0x0065, 0x006a, 0x006e, 0x0072, 0x0076, 0x007a, 0x007f, 0x0083, + 0x0088, 0x008c, 0x000d, 0x0002, 0xffff, 0x0090, 0x00a2, 0x00ba, + 0x00d6, 0x00f1, 0x0101, 0x0117, 0x012b, 0x0143, 0x0166, 0x0181, + 0x019d, 0x0002, 0x0000, 0x0057, 0x000d, 0x0000, 0xffff, 0x1f96, + 0x1ffe, 0x2000, 0x2000, 0x2002, 0x2004, 0x1ffe, 0x2006, 0x2008, + 0x200a, 0x200c, 0x2006, 0x0002, 0x0069, 0x007f, 0x0003, 0x006d, + 0x0000, 0x0076, 0x0007, 0x0002, 0x01ae, 0x01b2, 0x01b6, 0x01bb, + // Entry 10C0 - 10FF + 0x01c0, 0x01c4, 0x01c9, 0x0007, 0x0002, 0x01cd, 0x01d8, 0x01e3, + 0x01ef, 0x01ff, 0x0209, 0x0217, 0x0002, 0x0000, 0x0082, 0x0007, + 0x0000, 0x1f96, 0x1ffe, 0x200e, 0x2000, 0x2010, 0x200e, 0x2008, + 0x0001, 0x008d, 0x0003, 0x0000, 0x0000, 0x0091, 0x0005, 0x0002, + 0xffff, 0x0229, 0x0236, 0x0240, 0x024a, 0x0001, 0x009a, 0x0003, + 0x009e, 0x0000, 0x00a7, 0x0002, 0x00a1, 0x00a4, 0x0001, 0x0002, + 0x0254, 0x0001, 0x0002, 0x0258, 0x0002, 0x00aa, 0x00ad, 0x0001, + 0x0002, 0x0254, 0x0001, 0x0002, 0x0258, 0x0003, 0x00ba, 0x0000, + // Entry 1100 - 113F + 0x00b4, 0x0001, 0x00b6, 0x0002, 0x0002, 0x025c, 0x026c, 0x0001, + 0x00bc, 0x0002, 0x0002, 0x027c, 0x027f, 0x0004, 0x00ce, 0x00c8, + 0x00c5, 0x00cb, 0x0001, 0x0002, 0x0025, 0x0001, 0x0002, 0x0033, + 0x0001, 0x0002, 0x0282, 0x0001, 0x0002, 0x028b, 0x0004, 0x00df, + 0x00d9, 0x00d6, 0x00dc, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, + 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0040, + 0x0123, 0x0000, 0x0000, 0x0128, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x012d, 0x0000, 0x0000, 0x0132, 0x0000, 0x0000, 0x0000, + // Entry 1140 - 117F + 0x0000, 0x0000, 0x0137, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0142, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0147, 0x0000, 0x014c, 0x0000, + 0x0000, 0x0151, 0x0000, 0x0000, 0x0156, 0x0000, 0x0000, 0x015b, + 0x0001, 0x0125, 0x0001, 0x0002, 0x0291, 0x0001, 0x012a, 0x0001, + 0x0002, 0x029a, 0x0001, 0x012f, 0x0001, 0x0002, 0x02a2, 0x0001, + // Entry 1180 - 11BF + 0x0134, 0x0001, 0x0002, 0x02aa, 0x0002, 0x013a, 0x013d, 0x0001, + 0x0002, 0x02b0, 0x0003, 0x0002, 0x02b7, 0x02c2, 0x02c6, 0x0001, + 0x0144, 0x0001, 0x0002, 0x02cf, 0x0001, 0x0149, 0x0001, 0x0002, + 0x02e5, 0x0001, 0x014e, 0x0001, 0x0002, 0x02ef, 0x0001, 0x0153, + 0x0001, 0x0002, 0x02f4, 0x0001, 0x0158, 0x0001, 0x0002, 0x02fa, + 0x0001, 0x015d, 0x0001, 0x0002, 0x0304, 0x0002, 0x0003, 0x00c2, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, + 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, + // Entry 11C0 - 11FF + 0x0000, 0x0000, 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, + 0x0002, 0x031a, 0x0001, 0x0000, 0x049a, 0x0001, 0x0000, 0x04a5, + 0x0001, 0x0002, 0x032c, 0x0008, 0x002f, 0x0053, 0x0000, 0x0078, + 0x0090, 0x00a0, 0x00b1, 0x0000, 0x0001, 0x0031, 0x0003, 0x0035, + 0x0000, 0x0044, 0x000d, 0x0002, 0xffff, 0x033b, 0x0340, 0x0345, + 0x034a, 0x034e, 0x0352, 0x0356, 0x035a, 0x035f, 0x0364, 0x0369, + 0x036e, 0x000d, 0x0002, 0xffff, 0x0373, 0x0383, 0x0394, 0x03a2, + 0x03b4, 0x03d1, 0x03e6, 0x03f9, 0x0408, 0x0415, 0x0426, 0x0439, + // Entry 1200 - 123F + 0x0002, 0x0056, 0x006c, 0x0003, 0x005a, 0x0000, 0x0063, 0x0007, + 0x0002, 0x0449, 0x044d, 0x0451, 0x0455, 0x0459, 0x045d, 0x0461, + 0x0007, 0x0002, 0x0465, 0x046d, 0x0474, 0x047b, 0x0482, 0x0488, + 0x048d, 0x0002, 0x0000, 0x006f, 0x0007, 0x0002, 0x0496, 0x0498, + 0x049a, 0x049c, 0x049e, 0x04a0, 0x04a2, 0x0001, 0x007a, 0x0003, + 0x007e, 0x0000, 0x0087, 0x0002, 0x0081, 0x0084, 0x0001, 0x0002, + 0x04a4, 0x0001, 0x0002, 0x04a7, 0x0002, 0x008a, 0x008d, 0x0001, + 0x0002, 0x04a4, 0x0001, 0x0002, 0x04a7, 0x0003, 0x009a, 0x0000, + // Entry 1240 - 127F + 0x0094, 0x0001, 0x0096, 0x0002, 0x0002, 0x04aa, 0x04b6, 0x0001, + 0x009c, 0x0002, 0x0002, 0x04c4, 0x04c7, 0x0004, 0x00ae, 0x00a8, + 0x00a5, 0x00ab, 0x0001, 0x0002, 0x04ca, 0x0001, 0x0000, 0x050b, + 0x0001, 0x0000, 0x0514, 0x0001, 0x0002, 0x04da, 0x0004, 0x00bf, + 0x00b9, 0x00b6, 0x00bc, 0x0001, 0x0002, 0x04e3, 0x0001, 0x0002, + 0x04f2, 0x0001, 0x0002, 0x04fe, 0x0001, 0x0002, 0x0508, 0x0040, + 0x0103, 0x0000, 0x0000, 0x0108, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x010d, 0x0000, 0x0000, 0x0112, 0x0000, 0x0000, 0x0000, + // Entry 1280 - 12BF + 0x0000, 0x0000, 0x0117, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0122, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0127, 0x0000, 0x012c, 0x0000, + 0x0000, 0x0131, 0x0000, 0x0000, 0x0136, 0x0000, 0x0000, 0x013b, + 0x0001, 0x0105, 0x0001, 0x0002, 0x050f, 0x0001, 0x010a, 0x0001, + 0x0002, 0x0514, 0x0001, 0x010f, 0x0001, 0x0002, 0x0518, 0x0001, + // Entry 12C0 - 12FF + 0x0114, 0x0001, 0x0002, 0x051f, 0x0002, 0x011a, 0x011d, 0x0001, + 0x0002, 0x0526, 0x0003, 0x0002, 0x0529, 0x052f, 0x0534, 0x0001, + 0x0124, 0x0001, 0x0002, 0x053c, 0x0001, 0x0129, 0x0001, 0x0002, + 0x0549, 0x0001, 0x012e, 0x0001, 0x0002, 0x0551, 0x0001, 0x0133, + 0x0001, 0x0002, 0x055a, 0x0001, 0x0138, 0x0001, 0x0002, 0x055f, + 0x0001, 0x013d, 0x0001, 0x0002, 0x0568, 0x0003, 0x0004, 0x0368, + 0x07d9, 0x000b, 0x0010, 0x0000, 0x004e, 0x0000, 0x005c, 0x0000, + 0x0108, 0x0133, 0x0000, 0x0000, 0x0351, 0x0008, 0x0000, 0x0000, + // Entry 1300 - 133F + 0x0000, 0x0000, 0x0019, 0x002c, 0x0000, 0x003d, 0x0003, 0x0022, + 0x0027, 0x001d, 0x0001, 0x001f, 0x0001, 0x0000, 0x0000, 0x0001, + 0x0024, 0x0001, 0x0000, 0x0000, 0x0001, 0x0029, 0x0001, 0x0000, + 0x0000, 0x0004, 0x003a, 0x0034, 0x0031, 0x0037, 0x0001, 0x0002, + 0x0574, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, + 0x0002, 0x0587, 0x0004, 0x004b, 0x0045, 0x0042, 0x0048, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 1340 - 137F + 0x0054, 0x0001, 0x0056, 0x0001, 0x0058, 0x0002, 0x0002, 0x0595, + 0x059d, 0x0008, 0x0065, 0x0000, 0x0000, 0x0000, 0x00d0, 0x00e6, + 0x0000, 0x00f7, 0x0002, 0x0068, 0x009c, 0x0003, 0x006c, 0x007c, + 0x008c, 0x000e, 0x0002, 0xffff, 0x05a5, 0x05b5, 0x05c2, 0x05cc, + 0x05d9, 0x05e0, 0x05ed, 0x05fa, 0x0607, 0x0614, 0x061b, 0x0625, + 0x062f, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, + 0x003b, 0x003d, 0x003f, 0x0041, 0x0043, 0x0045, 0x0048, 0x004b, + 0x0422, 0x000e, 0x0002, 0xffff, 0x05a5, 0x05b5, 0x05c2, 0x05cc, + // Entry 1380 - 13BF + 0x05d9, 0x05e0, 0x05ed, 0x05fa, 0x0607, 0x0614, 0x061b, 0x0625, + 0x062f, 0x0003, 0x00a0, 0x00b0, 0x00c0, 0x000e, 0x0002, 0xffff, + 0x05a5, 0x05b5, 0x05c2, 0x05cc, 0x05d9, 0x05e0, 0x05ed, 0x05fa, + 0x0607, 0x0614, 0x061b, 0x0625, 0x062f, 0x000e, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x0039, 0x003b, 0x003d, 0x003f, 0x0041, + 0x0043, 0x0045, 0x0048, 0x004b, 0x0422, 0x000e, 0x0002, 0xffff, + 0x05a5, 0x05b5, 0x05c2, 0x05cc, 0x05d9, 0x05e0, 0x05ed, 0x05fa, + 0x0607, 0x0614, 0x061b, 0x0625, 0x062f, 0x0003, 0x00da, 0x00e0, + // Entry 13C0 - 13FF + 0x00d4, 0x0001, 0x00d6, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, + 0x00dc, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x00e2, 0x0002, + 0x0000, 0x0425, 0x042a, 0x0004, 0x00f4, 0x00ee, 0x00eb, 0x00f1, + 0x0001, 0x0002, 0x0574, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, + 0x001b, 0x0001, 0x0002, 0x0587, 0x0004, 0x0105, 0x00ff, 0x00fc, + 0x0102, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0111, 0x0000, 0x0122, 0x0004, 0x011f, + // Entry 1400 - 143F + 0x0119, 0x0116, 0x011c, 0x0001, 0x0002, 0x0574, 0x0001, 0x0002, + 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0002, 0x0587, 0x0004, + 0x0130, 0x012a, 0x0127, 0x012d, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0008, 0x013c, 0x01a1, 0x01f8, 0x022d, 0x02fe, 0x031e, 0x032f, + 0x0340, 0x0002, 0x013f, 0x0170, 0x0003, 0x0143, 0x0152, 0x0161, + 0x000d, 0x0002, 0xffff, 0x063c, 0x0646, 0x0650, 0x065a, 0x0664, + 0x066b, 0x0672, 0x067c, 0x0686, 0x0690, 0x069a, 0x06a4, 0x000d, + // Entry 1440 - 147F + 0x0002, 0xffff, 0x06ae, 0x06b2, 0x06b6, 0x06ba, 0x06be, 0x06c2, + 0x06c2, 0x06c6, 0x06ca, 0x06c6, 0x06ce, 0x06d2, 0x000d, 0x0002, + 0xffff, 0x06d6, 0x06e6, 0x0650, 0x06f6, 0x0664, 0x066b, 0x0672, + 0x0703, 0x0710, 0x0723, 0x0733, 0x0743, 0x0003, 0x0174, 0x0183, + 0x0192, 0x000d, 0x0002, 0xffff, 0x063c, 0x0646, 0x0650, 0x065a, + 0x0664, 0x066b, 0x0672, 0x067c, 0x0686, 0x0690, 0x069a, 0x06a4, + 0x000d, 0x0002, 0xffff, 0x06ae, 0x06b2, 0x06b6, 0x06ba, 0x06be, + 0x06c2, 0x06c2, 0x06c6, 0x06ca, 0x06c6, 0x06ce, 0x06d2, 0x000d, + // Entry 1480 - 14BF + 0x0002, 0xffff, 0x06d6, 0x06e6, 0x0650, 0x06f6, 0x0664, 0x066b, + 0x0672, 0x0703, 0x0710, 0x0723, 0x0733, 0x0743, 0x0002, 0x01a4, + 0x01ce, 0x0005, 0x01aa, 0x01b3, 0x01c5, 0x0000, 0x01bc, 0x0007, + 0x0002, 0x0753, 0x075d, 0x0764, 0x076e, 0x0778, 0x0782, 0x078c, + 0x0007, 0x0002, 0x0796, 0x079a, 0x06b6, 0x079e, 0x07a2, 0x07a6, + 0x07aa, 0x0007, 0x0002, 0x0796, 0x079a, 0x06b6, 0x079e, 0x07a2, + 0x07a6, 0x07aa, 0x0007, 0x0002, 0x0753, 0x075d, 0x07ae, 0x076e, + 0x0778, 0x0782, 0x078c, 0x0005, 0x01d4, 0x01dd, 0x01ef, 0x0000, + // Entry 14C0 - 14FF + 0x01e6, 0x0007, 0x0002, 0x0753, 0x075d, 0x0764, 0x076e, 0x0778, + 0x0782, 0x078c, 0x0007, 0x0002, 0x0796, 0x079a, 0x06b6, 0x079e, + 0x07a2, 0x07a6, 0x07aa, 0x0007, 0x0002, 0x0796, 0x079a, 0x06b6, + 0x079e, 0x07a2, 0x07a6, 0x07aa, 0x0007, 0x0002, 0x0753, 0x075d, + 0x07ae, 0x076e, 0x0778, 0x0782, 0x078c, 0x0002, 0x01fb, 0x0214, + 0x0003, 0x01ff, 0x0206, 0x020d, 0x0005, 0x0002, 0xffff, 0x07bb, + 0x07c3, 0x07cb, 0x07d3, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x0039, 0x0005, 0x0002, 0xffff, 0x07db, 0x07ea, 0x07f9, + // Entry 1500 - 153F + 0x0808, 0x0003, 0x0218, 0x021f, 0x0226, 0x0005, 0x0002, 0xffff, + 0x07bb, 0x07c3, 0x07cb, 0x07d3, 0x0005, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x0039, 0x0005, 0x0002, 0xffff, 0x07db, 0x07ea, + 0x07f9, 0x0808, 0x0002, 0x0230, 0x0297, 0x0003, 0x0234, 0x0255, + 0x0276, 0x0008, 0x0240, 0x0246, 0x023d, 0x0249, 0x024c, 0x024f, + 0x0252, 0x0243, 0x0001, 0x0002, 0x0817, 0x0001, 0x0002, 0x082b, + 0x0001, 0x0002, 0x0835, 0x0001, 0x0002, 0x083f, 0x0001, 0x0002, + 0x084c, 0x0001, 0x0002, 0x0857, 0x0001, 0x0002, 0x0865, 0x0001, + // Entry 1540 - 157F + 0x0002, 0x086d, 0x0008, 0x0261, 0x0267, 0x025e, 0x026a, 0x026d, + 0x0270, 0x0273, 0x0264, 0x0001, 0x0002, 0x0817, 0x0001, 0x0002, + 0x0878, 0x0001, 0x0002, 0x087c, 0x0001, 0x0002, 0x0880, 0x0001, + 0x0002, 0x084c, 0x0001, 0x0002, 0x0857, 0x0001, 0x0002, 0x0865, + 0x0001, 0x0002, 0x086d, 0x0008, 0x0282, 0x0288, 0x027f, 0x028b, + 0x028e, 0x0291, 0x0294, 0x0285, 0x0001, 0x0002, 0x0817, 0x0001, + 0x0002, 0x082b, 0x0001, 0x0002, 0x0835, 0x0001, 0x0002, 0x083f, + 0x0001, 0x0002, 0x084c, 0x0001, 0x0002, 0x0857, 0x0001, 0x0002, + // Entry 1580 - 15BF + 0x0865, 0x0001, 0x0002, 0x086d, 0x0003, 0x029b, 0x02bc, 0x02dd, + 0x0008, 0x02a7, 0x02ad, 0x02a4, 0x02b0, 0x02b3, 0x02b6, 0x02b9, + 0x02aa, 0x0001, 0x0002, 0x0817, 0x0001, 0x0002, 0x082b, 0x0001, + 0x0002, 0x0835, 0x0001, 0x0002, 0x083f, 0x0001, 0x0002, 0x084c, + 0x0001, 0x0002, 0x0884, 0x0001, 0x0002, 0x089b, 0x0001, 0x0002, + 0x08a2, 0x0008, 0x02c8, 0x02ce, 0x02c5, 0x02d1, 0x02d4, 0x02d7, + 0x02da, 0x02cb, 0x0001, 0x0002, 0x0817, 0x0001, 0x0002, 0x0878, + 0x0001, 0x0002, 0x0835, 0x0001, 0x0002, 0x0880, 0x0001, 0x0002, + // Entry 15C0 - 15FF + 0x082b, 0x0001, 0x0002, 0x0884, 0x0001, 0x0002, 0x089b, 0x0001, + 0x0002, 0x08a2, 0x0008, 0x02e9, 0x02ef, 0x02e6, 0x02f2, 0x02f5, + 0x02f8, 0x02fb, 0x02ec, 0x0001, 0x0002, 0x0817, 0x0001, 0x0002, + 0x082b, 0x0001, 0x0002, 0x0835, 0x0001, 0x0002, 0x083f, 0x0001, + 0x0002, 0x084c, 0x0001, 0x0002, 0x0884, 0x0001, 0x0002, 0x089b, + 0x0001, 0x0002, 0x08a2, 0x0003, 0x030d, 0x0318, 0x0302, 0x0002, + 0x0305, 0x0309, 0x0002, 0x0002, 0x08ac, 0x08c0, 0x0002, 0x0002, + 0x0595, 0x059d, 0x0002, 0x0310, 0x0314, 0x0002, 0x0002, 0x0595, + // Entry 1600 - 163F + 0x059d, 0x0002, 0x0000, 0xffff, 0x04f9, 0x0001, 0x031a, 0x0002, + 0x0002, 0x0595, 0x059d, 0x0004, 0x032c, 0x0326, 0x0323, 0x0329, + 0x0001, 0x0002, 0x08d7, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, + 0x003c, 0x0001, 0x0002, 0x08e8, 0x0004, 0x033d, 0x0337, 0x0334, + 0x033a, 0x0001, 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, + 0x0002, 0x04fe, 0x0001, 0x0002, 0x0508, 0x0004, 0x034e, 0x0348, + 0x0345, 0x034b, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0353, + // Entry 1640 - 167F + 0x0001, 0x0355, 0x0003, 0x0000, 0x0000, 0x0359, 0x000d, 0x0002, + 0xffff, 0x08f0, 0x08fd, 0x0907, 0x091e, 0x0935, 0x094c, 0x0963, + 0x096d, 0x097a, 0x0987, 0x0991, 0x09a1, 0x0042, 0x03ab, 0x03b0, + 0x03b5, 0x03ba, 0x03d1, 0x03e8, 0x03ff, 0x0416, 0x042d, 0x0444, + 0x045b, 0x0472, 0x0489, 0x04a4, 0x04bf, 0x04da, 0x04df, 0x04e4, + 0x04e9, 0x0502, 0x051b, 0x0534, 0x0539, 0x053e, 0x0543, 0x0548, + 0x054d, 0x0552, 0x0557, 0x055c, 0x0561, 0x0575, 0x0589, 0x059d, + 0x05b1, 0x05c5, 0x05d9, 0x05ed, 0x0601, 0x0615, 0x0629, 0x063d, + // Entry 1680 - 16BF + 0x0651, 0x0665, 0x0679, 0x068d, 0x06a1, 0x06b5, 0x06c9, 0x06dd, + 0x06f1, 0x0705, 0x070a, 0x070f, 0x0714, 0x072a, 0x073c, 0x074e, + 0x0764, 0x0776, 0x0788, 0x079e, 0x07b4, 0x07ca, 0x07cf, 0x07d4, + 0x0001, 0x03ad, 0x0001, 0x0002, 0x09b1, 0x0001, 0x03b2, 0x0001, + 0x0002, 0x09b1, 0x0001, 0x03b7, 0x0001, 0x0002, 0x09b1, 0x0003, + 0x03be, 0x03c1, 0x03c6, 0x0001, 0x0002, 0x09bb, 0x0003, 0x0002, + 0x09c5, 0x09dc, 0x09f0, 0x0002, 0x03c9, 0x03cd, 0x0002, 0x0002, + 0x0a0d, 0x0a0d, 0x0002, 0x0002, 0x0a46, 0x0a2b, 0x0003, 0x03d5, + // Entry 16C0 - 16FF + 0x03d8, 0x03dd, 0x0001, 0x0002, 0x09bb, 0x0003, 0x0002, 0x09c5, + 0x09dc, 0x09f0, 0x0002, 0x03e0, 0x03e4, 0x0002, 0x0002, 0x0a0d, + 0x0a0d, 0x0002, 0x0002, 0x0a46, 0x0a46, 0x0003, 0x03ec, 0x03ef, + 0x03f4, 0x0001, 0x0002, 0x09bb, 0x0003, 0x0002, 0x09c5, 0x09dc, + 0x09f0, 0x0002, 0x03f7, 0x03fb, 0x0002, 0x0002, 0x0a0d, 0x0a0d, + 0x0002, 0x0002, 0x0a46, 0x0a46, 0x0003, 0x0403, 0x0406, 0x040b, + 0x0001, 0x0002, 0x0a64, 0x0003, 0x0002, 0x0a6b, 0x0a85, 0x0a93, + 0x0002, 0x040e, 0x0412, 0x0002, 0x0002, 0x0aad, 0x0aad, 0x0002, + // Entry 1700 - 173F + 0x0002, 0x0ab9, 0x0ab9, 0x0003, 0x041a, 0x041d, 0x0422, 0x0001, + 0x0002, 0x0a64, 0x0003, 0x0002, 0x0a6b, 0x0a85, 0x0a93, 0x0002, + 0x0425, 0x0429, 0x0002, 0x0002, 0x0aad, 0x0aad, 0x0002, 0x0002, + 0x0ab9, 0x0ab9, 0x0003, 0x0431, 0x0434, 0x0439, 0x0001, 0x0002, + 0x0a64, 0x0003, 0x0002, 0x0a6b, 0x0a85, 0x0a93, 0x0002, 0x043c, + 0x0440, 0x0002, 0x0002, 0x0aad, 0x0aad, 0x0002, 0x0002, 0x0ab9, + 0x0ab9, 0x0003, 0x0448, 0x044b, 0x0450, 0x0001, 0x0002, 0x0ace, + 0x0003, 0x0002, 0x0ad5, 0x0ae9, 0x0afa, 0x0002, 0x0453, 0x0457, + // Entry 1740 - 177F + 0x0002, 0x0002, 0x0b2c, 0x0b14, 0x0002, 0x0002, 0x0b5f, 0x0b47, + 0x0003, 0x045f, 0x0462, 0x0467, 0x0001, 0x0002, 0x0ace, 0x0003, + 0x0002, 0x0ad5, 0x0ae9, 0x0afa, 0x0002, 0x046a, 0x046e, 0x0002, + 0x0002, 0x0b2c, 0x0b2c, 0x0002, 0x0002, 0x0b5f, 0x0b5f, 0x0003, + 0x0476, 0x0479, 0x047e, 0x0001, 0x0002, 0x0ace, 0x0003, 0x0002, + 0x0ad5, 0x0ae9, 0x0afa, 0x0002, 0x0481, 0x0485, 0x0002, 0x0002, + 0x0b2c, 0x0b2c, 0x0002, 0x0002, 0x0b5f, 0x0b5f, 0x0004, 0x048e, + 0x0491, 0x0496, 0x04a1, 0x0001, 0x0002, 0x0b7a, 0x0003, 0x0002, + // Entry 1780 - 17BF + 0x0b87, 0x0ba1, 0x0bb8, 0x0002, 0x0499, 0x049d, 0x0002, 0x0002, + 0x0bf6, 0x0bd8, 0x0002, 0x0002, 0x0c35, 0x0c17, 0x0001, 0x0002, + 0x0c56, 0x0004, 0x04a9, 0x04ac, 0x04b1, 0x04bc, 0x0001, 0x0002, + 0x0b7a, 0x0003, 0x0002, 0x0c67, 0x0c81, 0x0bb8, 0x0002, 0x04b4, + 0x04b8, 0x0002, 0x0002, 0x0bf6, 0x0bf6, 0x0002, 0x0002, 0x0c35, + 0x0c35, 0x0001, 0x0002, 0x0c56, 0x0004, 0x04c4, 0x04c7, 0x04cc, + 0x04d7, 0x0001, 0x0002, 0x0b7a, 0x0003, 0x0002, 0x0c67, 0x0c81, + 0x0bb8, 0x0002, 0x04cf, 0x04d3, 0x0002, 0x0002, 0x0bf6, 0x0bf6, + // Entry 17C0 - 17FF + 0x0002, 0x0002, 0x0c35, 0x0c35, 0x0001, 0x0002, 0x0c56, 0x0001, + 0x04dc, 0x0001, 0x0002, 0x0c98, 0x0001, 0x04e1, 0x0001, 0x0002, + 0x0c98, 0x0001, 0x04e6, 0x0001, 0x0002, 0x0c98, 0x0003, 0x04ed, + 0x04f0, 0x04f7, 0x0001, 0x0002, 0x0caf, 0x0005, 0x0002, 0x0cd0, + 0x0cdd, 0x0ce4, 0x0cb6, 0x0ceb, 0x0002, 0x04fa, 0x04fe, 0x0002, + 0x0002, 0x0d17, 0x0cff, 0x0002, 0x0002, 0x0d4a, 0x0d32, 0x0003, + 0x0506, 0x0509, 0x0510, 0x0001, 0x0002, 0x0caf, 0x0005, 0x0002, + 0x0d65, 0x0cdd, 0x0ce4, 0x0cb6, 0x0ceb, 0x0002, 0x0513, 0x0517, + // Entry 1800 - 183F + 0x0002, 0x0002, 0x0d75, 0x0cff, 0x0002, 0x0002, 0x0da9, 0x0d90, + 0x0003, 0x051f, 0x0522, 0x0529, 0x0001, 0x0002, 0x0caf, 0x0005, + 0x0002, 0x0d65, 0x0cdd, 0x0ce4, 0x0cb6, 0x0ceb, 0x0002, 0x052c, + 0x0530, 0x0002, 0x0002, 0x0d75, 0x0cff, 0x0002, 0x0002, 0x0da9, + 0x0d90, 0x0001, 0x0536, 0x0001, 0x0002, 0x0dc4, 0x0001, 0x053b, + 0x0001, 0x0002, 0x0dc4, 0x0001, 0x0540, 0x0001, 0x0002, 0x0dc4, + 0x0001, 0x0545, 0x0001, 0x0002, 0x0dd8, 0x0001, 0x054a, 0x0001, + 0x0002, 0x0dd8, 0x0001, 0x054f, 0x0001, 0x0002, 0x0dd8, 0x0001, + // Entry 1840 - 187F + 0x0554, 0x0001, 0x0002, 0x0de5, 0x0001, 0x0559, 0x0001, 0x0002, + 0x0de5, 0x0001, 0x055e, 0x0001, 0x0002, 0x0de5, 0x0003, 0x0000, + 0x0565, 0x056a, 0x0003, 0x0002, 0x0e06, 0x0e1d, 0x0e34, 0x0002, + 0x056d, 0x0571, 0x0002, 0x0002, 0x0e6c, 0x0e51, 0x0002, 0x0002, + 0x0ea5, 0x0e8a, 0x0003, 0x0000, 0x0579, 0x057e, 0x0003, 0x0002, + 0x0e06, 0x0e1d, 0x0e34, 0x0002, 0x0581, 0x0585, 0x0002, 0x0002, + 0x0e6c, 0x0e6c, 0x0002, 0x0002, 0x0ea5, 0x0ea5, 0x0003, 0x0000, + 0x058d, 0x0592, 0x0003, 0x0002, 0x0e06, 0x0e1d, 0x0e34, 0x0002, + // Entry 1880 - 18BF + 0x0595, 0x0599, 0x0002, 0x0002, 0x0e6c, 0x0e6c, 0x0002, 0x0002, + 0x0ea5, 0x0ea5, 0x0003, 0x0000, 0x05a1, 0x05a6, 0x0003, 0x0002, + 0x0ec3, 0x0ed7, 0x0eeb, 0x0002, 0x05a9, 0x05ad, 0x0002, 0x0002, + 0x0f1d, 0x0f05, 0x0002, 0x0002, 0x0f53, 0x0f3b, 0x0003, 0x0000, + 0x05b5, 0x05ba, 0x0003, 0x0002, 0x0ec3, 0x0ed7, 0x0eeb, 0x0002, + 0x05bd, 0x05c1, 0x0002, 0x0002, 0x0f1d, 0x0f1d, 0x0002, 0x0002, + 0x0f53, 0x0f53, 0x0003, 0x0000, 0x05c9, 0x05ce, 0x0003, 0x0002, + 0x0ec3, 0x0ed7, 0x0eeb, 0x0002, 0x05d1, 0x05d5, 0x0002, 0x0002, + // Entry 18C0 - 18FF + 0x0f1d, 0x0f1d, 0x0002, 0x0002, 0x0f53, 0x0f53, 0x0003, 0x0000, + 0x05dd, 0x05e2, 0x0003, 0x0002, 0x0f71, 0x0f8b, 0x0fa5, 0x0002, + 0x05e5, 0x05e9, 0x0002, 0x0002, 0x0fe3, 0x0fc5, 0x0002, 0x0002, + 0x1025, 0x1007, 0x0003, 0x0000, 0x05f1, 0x05f6, 0x0003, 0x0002, + 0x0f71, 0x0f8b, 0x0fa5, 0x0002, 0x05f9, 0x05fd, 0x0002, 0x0002, + 0x0fe3, 0x0fe3, 0x0002, 0x0002, 0x1025, 0x1025, 0x0003, 0x0000, + 0x0605, 0x060a, 0x0003, 0x0002, 0x0f71, 0x0f8b, 0x0fa5, 0x0002, + 0x060d, 0x0611, 0x0002, 0x0002, 0x0fe3, 0x0fe3, 0x0002, 0x0002, + // Entry 1900 - 193F + 0x1025, 0x1025, 0x0003, 0x0000, 0x0619, 0x061e, 0x0003, 0x0002, + 0x1049, 0x1060, 0x1077, 0x0002, 0x0621, 0x0625, 0x0002, 0x0002, + 0x10af, 0x1094, 0x0002, 0x0002, 0x10eb, 0x10d0, 0x0003, 0x0000, + 0x062d, 0x0632, 0x0003, 0x0002, 0x1049, 0x1060, 0x1077, 0x0002, + 0x0635, 0x0639, 0x0002, 0x0002, 0x10af, 0x10af, 0x0002, 0x0002, + 0x10eb, 0x10eb, 0x0003, 0x0000, 0x0641, 0x0646, 0x0003, 0x0002, + 0x1049, 0x1060, 0x1077, 0x0002, 0x0649, 0x064d, 0x0002, 0x0002, + 0x10af, 0x10af, 0x0002, 0x0002, 0x10eb, 0x10eb, 0x0003, 0x0000, + // Entry 1940 - 197F + 0x0655, 0x065a, 0x0003, 0x0002, 0x110c, 0x1123, 0x113a, 0x0002, + 0x065d, 0x0661, 0x0002, 0x0002, 0x1172, 0x1157, 0x0002, 0x0002, + 0x11ab, 0x1190, 0x0003, 0x0000, 0x0669, 0x066e, 0x0003, 0x0002, + 0x110c, 0x1123, 0x113a, 0x0002, 0x0671, 0x0675, 0x0002, 0x0002, + 0x1172, 0x1172, 0x0002, 0x0002, 0x11ab, 0x11ab, 0x0003, 0x0000, + 0x067d, 0x0682, 0x0003, 0x0002, 0x110c, 0x1123, 0x113a, 0x0002, + 0x0685, 0x0689, 0x0002, 0x0002, 0x1172, 0x1172, 0x0002, 0x0002, + 0x11ab, 0x11ab, 0x0003, 0x0000, 0x0691, 0x0696, 0x0003, 0x0002, + // Entry 1980 - 19BF + 0x11c9, 0x11e0, 0x11f7, 0x0002, 0x0699, 0x069d, 0x0002, 0x0002, + 0x122f, 0x1214, 0x0002, 0x0002, 0x126b, 0x1250, 0x0003, 0x0000, + 0x06a5, 0x06aa, 0x0003, 0x0002, 0x11c9, 0x11e0, 0x11f7, 0x0002, + 0x06ad, 0x06b1, 0x0002, 0x0002, 0x122f, 0x122f, 0x0002, 0x0002, + 0x126b, 0x126b, 0x0003, 0x0000, 0x06b9, 0x06be, 0x0003, 0x0002, + 0x11c9, 0x11e0, 0x11f7, 0x0002, 0x06c1, 0x06c5, 0x0002, 0x0002, + 0x122f, 0x122f, 0x0002, 0x0002, 0x126b, 0x126b, 0x0003, 0x0000, + 0x06cd, 0x06d2, 0x0003, 0x0002, 0x128c, 0x12a3, 0x12ba, 0x0002, + // Entry 19C0 - 19FF + 0x06d5, 0x06d9, 0x0002, 0x0002, 0x12f2, 0x12d7, 0x0002, 0x0002, + 0x132e, 0x1313, 0x0003, 0x0000, 0x06e1, 0x06e6, 0x0003, 0x0002, + 0x128c, 0x12a3, 0x12ba, 0x0002, 0x06e9, 0x06ed, 0x0002, 0x0002, + 0x12f2, 0x12f2, 0x0002, 0x0002, 0x132e, 0x132e, 0x0003, 0x0000, + 0x06f5, 0x06fa, 0x0003, 0x0002, 0x128c, 0x12a3, 0x12ba, 0x0002, + 0x06fd, 0x0701, 0x0002, 0x0002, 0x12f2, 0x12f2, 0x0002, 0x0002, + 0x132e, 0x132e, 0x0001, 0x0707, 0x0001, 0x0002, 0x134f, 0x0001, + 0x070c, 0x0001, 0x0002, 0x134f, 0x0001, 0x0711, 0x0001, 0x0002, + // Entry 1A00 - 1A3F + 0x134f, 0x0003, 0x0718, 0x071b, 0x071f, 0x0001, 0x0002, 0x1366, + 0x0002, 0x0002, 0xffff, 0x1370, 0x0002, 0x0722, 0x0726, 0x0002, + 0x0002, 0x139c, 0x1381, 0x0002, 0x0002, 0x13d5, 0x13ba, 0x0003, + 0x072e, 0x0000, 0x0731, 0x0001, 0x0002, 0x1366, 0x0002, 0x0734, + 0x0738, 0x0002, 0x0002, 0x139c, 0x1381, 0x0002, 0x0002, 0x13d5, + 0x13ba, 0x0003, 0x0740, 0x0000, 0x0743, 0x0001, 0x0002, 0x1366, + 0x0002, 0x0746, 0x074a, 0x0002, 0x0002, 0x139c, 0x1381, 0x0002, + 0x0002, 0x13d5, 0x13ba, 0x0003, 0x0752, 0x0755, 0x0759, 0x0001, + // Entry 1A40 - 1A7F + 0x0002, 0x13f3, 0x0002, 0x0002, 0xffff, 0x13fd, 0x0002, 0x075c, + 0x0760, 0x0002, 0x0002, 0x1429, 0x140e, 0x0002, 0x0002, 0x1465, + 0x144a, 0x0003, 0x0768, 0x0000, 0x076b, 0x0001, 0x0002, 0x13f3, + 0x0002, 0x076e, 0x0772, 0x0002, 0x0002, 0x1429, 0x140e, 0x0002, + 0x0002, 0x1465, 0x144a, 0x0003, 0x077a, 0x0000, 0x077d, 0x0001, + 0x0002, 0x13f3, 0x0002, 0x0780, 0x0784, 0x0002, 0x0002, 0x1429, + 0x140e, 0x0002, 0x0002, 0x1465, 0x144a, 0x0003, 0x078c, 0x078f, + 0x0793, 0x0001, 0x0002, 0x1486, 0x0002, 0x0002, 0xffff, 0x1493, + // Entry 1A80 - 1ABF + 0x0002, 0x0796, 0x079a, 0x0002, 0x0002, 0x14bb, 0x149d, 0x0002, + 0x0002, 0x14fa, 0x14dc, 0x0003, 0x07a2, 0x07a5, 0x07a9, 0x0001, + 0x0002, 0x1486, 0x0002, 0x0002, 0xffff, 0x1493, 0x0002, 0x07ac, + 0x07b0, 0x0002, 0x0002, 0x14bb, 0x149d, 0x0002, 0x0002, 0x14fa, + 0x14dc, 0x0003, 0x07b8, 0x07bb, 0x07bf, 0x0001, 0x0002, 0x1486, + 0x0002, 0x0002, 0xffff, 0x1493, 0x0002, 0x07c2, 0x07c6, 0x0002, + 0x0002, 0x14bb, 0x149d, 0x0002, 0x0002, 0x14fa, 0x14dc, 0x0001, + 0x07cc, 0x0001, 0x0002, 0x151b, 0x0001, 0x07d1, 0x0001, 0x0002, + // Entry 1AC0 - 1AFF + 0x151b, 0x0001, 0x07d6, 0x0001, 0x0002, 0x151b, 0x0004, 0x07de, + 0x07e3, 0x07e8, 0x07f7, 0x0003, 0x0002, 0x152f, 0x153b, 0x154d, + 0x0003, 0x0002, 0x155c, 0x1567, 0x158c, 0x0002, 0x0000, 0x07eb, + 0x0003, 0x0000, 0x07f2, 0x07ef, 0x0001, 0x0002, 0x15a7, 0x0003, + 0x0002, 0xffff, 0x15d4, 0x1608, 0x0002, 0x0000, 0x07fa, 0x0003, + 0x0894, 0x092a, 0x07fe, 0x0094, 0x0002, 0x163f, 0x1662, 0x168f, + 0x16b6, 0x170e, 0x17a0, 0x1838, 0x18d0, 0x196e, 0x1a0c, 0x1a9d, + 0x1b35, 0x1bb3, 0x1c19, 0x1ca4, 0x1d5b, 0x1e0c, 0x1e93, 0x1f53, + // Entry 1B00 - 1B3F + 0x2046, 0x2149, 0x222c, 0x22e9, 0x235d, 0x23cb, 0x2425, 0x243c, + 0x2483, 0x24f1, 0x2539, 0x258f, 0x25ca, 0x2630, 0x2689, 0x2708, + 0x2785, 0x27a3, 0x27e4, 0x2859, 0x28d0, 0x291c, 0x2933, 0x295a, + 0x29a2, 0x2a04, 0x2a4b, 0x2ae9, 0x2b57, 0x2bb2, 0x2c4d, 0x2cd5, + 0x2d17, 0x2d3e, 0x2d85, 0x2da2, 0x2ddc, 0x2e30, 0x2e5a, 0x2eb1, + 0x2f52, 0x2fc6, 0x2ff3, 0x303e, 0x30de, 0x3161, 0x31c9, 0x31ed, + 0x3214, 0x3234, 0x3267, 0x3297, 0x32de, 0x3360, 0x33f7, 0x346c, + 0x34eb, 0x358b, 0x35b8, 0x35fc, 0x364e, 0x369e, 0x3724, 0x3744, + // Entry 1B40 - 1B7F + 0x3799, 0x380f, 0x385d, 0x38c5, 0x38e2, 0x38ff, 0x391c, 0x3963, + 0x39bd, 0x3a1b, 0x3af1, 0x3b94, 0x3c34, 0x3c99, 0x3cb6, 0x3ccd, + 0x3d08, 0x3d8b, 0x3e2d, 0x3ebc, 0x3ed3, 0x3f27, 0x3ff3, 0x40a0, + 0x4128, 0x417c, 0x4193, 0x41cf, 0x4231, 0x428d, 0x42db, 0x4337, + 0x43c5, 0x43e5, 0x43fc, 0x441f, 0x443c, 0x4480, 0x4518, 0x4594, + 0x45d9, 0x45f3, 0x461d, 0x4644, 0x466b, 0x4685, 0x469c, 0x46cd, + 0x4725, 0x4745, 0x4776, 0x47be, 0x47f8, 0x485e, 0x488f, 0x4900, + 0x4977, 0x49bf, 0x4a12, 0x4ac5, 0x4b36, 0x4b50, 0x4b6e, 0x4bc3, + // Entry 1B80 - 1BBF + 0x4c67, 0x0094, 0x0002, 0xffff, 0xffff, 0xffff, 0xffff, 0x16e7, + 0x1776, 0x180e, 0x18a3, 0x1941, 0x19e2, 0x1a73, 0x1b08, 0x1b9c, + 0x1bff, 0x1c71, 0x1d1b, 0x1def, 0x1e60, 0x1f0d, 0x1ff3, 0x2103, + 0x21e9, 0x22c9, 0x2343, 0x23ab, 0xffff, 0xffff, 0x2456, 0xffff, + 0x251b, 0xffff, 0x25b3, 0x261c, 0x2672, 0x26db, 0xffff, 0xffff, + 0x27c7, 0x2838, 0x28bf, 0xffff, 0xffff, 0xffff, 0x297e, 0xffff, + 0x2a1e, 0x2abf, 0xffff, 0x2b88, 0x2c20, 0x2cc1, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2dbf, 0xffff, 0xffff, 0x2e84, 0x2f25, 0xffff, + // Entry 1BC0 - 1BFF + 0xffff, 0x300a, 0x30bd, 0x313a, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x32c7, 0x3330, 0x33da, 0x3455, 0x34be, 0xffff, + 0xffff, 0x35e5, 0xffff, 0x3668, 0xffff, 0xffff, 0x3768, 0xffff, + 0x3830, 0xffff, 0xffff, 0xffff, 0xffff, 0x3943, 0xffff, 0x39d7, + 0x3aba, 0x3b76, 0x3c0d, 0xffff, 0xffff, 0xffff, 0x3ce4, 0x3d6a, + 0x3df1, 0xffff, 0xffff, 0x3efd, 0x3fbd, 0x4073, 0x410b, 0xffff, + 0xffff, 0x41b5, 0x421d, 0x4273, 0xffff, 0x4302, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x4453, 0x44f1, 0x457d, 0xffff, 0xffff, + // Entry 1C00 - 1C3F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x46b3, 0xffff, 0xffff, + 0x475f, 0xffff, 0x47d2, 0xffff, 0x4875, 0x48dd, 0x4960, 0xffff, + 0x49dc, 0x4a95, 0xffff, 0xffff, 0xffff, 0x4b96, 0x4c31, 0x0094, + 0x0002, 0xffff, 0xffff, 0xffff, 0xffff, 0x1742, 0x17da, 0x186f, + 0x190a, 0x19ab, 0x1a43, 0x1ad4, 0x1b62, 0x1bd7, 0x1c40, 0x1ce1, + 0x1da8, 0x1e36, 0x1ed3, 0x1fa6, 0x20a6, 0x219c, 0x227c, 0x2316, + 0x2384, 0x23f8, 0xffff, 0xffff, 0x24bd, 0xffff, 0x2564, 0xffff, + 0x25ee, 0x2651, 0x26ad, 0x2748, 0xffff, 0xffff, 0x280e, 0x2887, + // Entry 1C40 - 1C7F + 0x28f1, 0xffff, 0xffff, 0xffff, 0x29d3, 0xffff, 0x2a85, 0x2b20, + 0xffff, 0x2be9, 0x2c87, 0x2cf6, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2e06, 0xffff, 0xffff, 0x2eeb, 0x2f8c, 0xffff, 0xffff, 0x307f, + 0x310c, 0x3198, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x3302, 0x33a0, 0x3421, 0x3490, 0x3536, 0xffff, 0xffff, 0x3620, + 0xffff, 0x36e4, 0xffff, 0xffff, 0x37d7, 0xffff, 0x3894, 0xffff, + 0xffff, 0xffff, 0xffff, 0x3990, 0xffff, 0x3a6c, 0x3b35, 0x3bd2, + 0x3c68, 0xffff, 0xffff, 0xffff, 0x3d39, 0x3db9, 0x3e76, 0xffff, + // Entry 1C80 - 1CBF + 0xffff, 0x3f72, 0x4036, 0x40d7, 0x4152, 0xffff, 0xffff, 0x41f6, + 0x4252, 0x42b4, 0xffff, 0x4379, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x44ba, 0x454c, 0x45b8, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x46f4, 0xffff, 0xffff, 0x479a, 0xffff, + 0x482b, 0xffff, 0x48b6, 0x4930, 0x499b, 0xffff, 0x4a55, 0x4aff, + 0xffff, 0xffff, 0xffff, 0x4bfa, 0x4caa, 0x0003, 0x0004, 0x0534, + 0x0ad9, 0x0012, 0x0017, 0x0000, 0x0030, 0x0000, 0x009d, 0x0000, + 0x00b5, 0x00e0, 0x031c, 0x0000, 0x0386, 0x0000, 0x0000, 0x0000, + // Entry 1CC0 - 1CFF + 0x0000, 0x040c, 0x0504, 0x0526, 0x0005, 0x0000, 0x0000, 0x0000, + 0x0000, 0x001d, 0x0003, 0x0026, 0x002b, 0x0021, 0x0001, 0x0023, + 0x0001, 0x0003, 0x0000, 0x0001, 0x0028, 0x0001, 0x0000, 0x0000, + 0x0001, 0x002d, 0x0001, 0x0000, 0x0000, 0x0001, 0x0032, 0x0002, + 0x0035, 0x0069, 0x0003, 0x0039, 0x0049, 0x0059, 0x000e, 0x0003, + 0xffff, 0x001c, 0x0023, 0x002c, 0x0037, 0x0040, 0x0049, 0x0054, + 0x0061, 0x006e, 0x0077, 0x0082, 0x008b, 0x0094, 0x000e, 0x0003, + 0xffff, 0x009d, 0x00a0, 0x00a3, 0x00a6, 0x00a9, 0x00ac, 0x00af, + // Entry 1D00 - 1D3F + 0x00b2, 0x00b5, 0x00b8, 0x00bd, 0x00c2, 0x00c7, 0x000e, 0x0003, + 0xffff, 0x001c, 0x0023, 0x002c, 0x0037, 0x0040, 0x0049, 0x0054, + 0x0061, 0x006e, 0x0077, 0x0082, 0x008b, 0x0094, 0x0003, 0x006d, + 0x007d, 0x008d, 0x000e, 0x0003, 0xffff, 0x001c, 0x0023, 0x002c, + 0x0037, 0x0040, 0x0049, 0x0054, 0x0061, 0x006e, 0x0077, 0x0082, + 0x008b, 0x0094, 0x000e, 0x0003, 0xffff, 0x009d, 0x00a0, 0x00a3, + 0x00a6, 0x00a9, 0x00ac, 0x00af, 0x00b2, 0x00b5, 0x00b8, 0x00bd, + 0x00c2, 0x00c7, 0x000e, 0x0003, 0xffff, 0x001c, 0x0023, 0x002c, + // Entry 1D40 - 1D7F + 0x0037, 0x0040, 0x0049, 0x0054, 0x0061, 0x006e, 0x0077, 0x0082, + 0x008b, 0x0094, 0x0001, 0x009f, 0x0001, 0x00a1, 0x0003, 0x0000, + 0x0000, 0x00a5, 0x000e, 0x0003, 0xffff, 0x00cc, 0x00d9, 0x00e2, + 0x00eb, 0x00f6, 0x00fb, 0x0104, 0x0111, 0x011e, 0x0127, 0x012e, + 0x0137, 0x0140, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x00be, 0x0000, 0x00cf, 0x0004, 0x00cc, 0x00c6, 0x00c3, 0x00c9, + 0x0001, 0x0003, 0x014b, 0x0001, 0x0002, 0x0010, 0x0001, 0x0003, + 0x015d, 0x0001, 0x0003, 0x016d, 0x0004, 0x00dd, 0x00d7, 0x00d4, + // Entry 1D80 - 1DBF + 0x00da, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x00e9, 0x014e, + 0x01a5, 0x01da, 0x02cf, 0x02e9, 0x02fa, 0x030b, 0x0002, 0x00ec, + 0x011d, 0x0003, 0x00f0, 0x00ff, 0x010e, 0x000d, 0x0003, 0xffff, + 0x017f, 0x018a, 0x0197, 0x01a0, 0x01ab, 0x01b4, 0x01bf, 0x01ca, + 0x01d5, 0x01e2, 0x01ef, 0x01fc, 0x000d, 0x0003, 0xffff, 0x0209, + 0x020c, 0x020f, 0x0212, 0x0215, 0x0218, 0x021b, 0x021e, 0x0221, + 0x0224, 0x0227, 0x022a, 0x000d, 0x0003, 0xffff, 0x017f, 0x018a, + // Entry 1DC0 - 1DFF + 0x0197, 0x01a0, 0x01ab, 0x01b4, 0x01bf, 0x01ca, 0x01d5, 0x01e2, + 0x01ef, 0x01fc, 0x0003, 0x0121, 0x0130, 0x013f, 0x000d, 0x0003, + 0xffff, 0x017f, 0x018a, 0x0197, 0x01a0, 0x01ab, 0x01b4, 0x01bf, + 0x01ca, 0x01d5, 0x01e2, 0x01ef, 0x01fc, 0x000d, 0x0003, 0xffff, + 0x0209, 0x020c, 0x020f, 0x0212, 0x0215, 0x0218, 0x021b, 0x021e, + 0x0221, 0x0224, 0x0227, 0x022a, 0x000d, 0x0003, 0xffff, 0x017f, + 0x018a, 0x0197, 0x01a0, 0x01ab, 0x01b4, 0x01bf, 0x01ca, 0x01d5, + 0x01e2, 0x01ef, 0x01fc, 0x0002, 0x0151, 0x017b, 0x0005, 0x0157, + // Entry 1E00 - 1E3F + 0x0160, 0x0172, 0x0000, 0x0169, 0x0007, 0x0003, 0x022d, 0x0238, + 0x0247, 0x0258, 0x0269, 0x0276, 0x0283, 0x0007, 0x0003, 0x028e, + 0x0218, 0x0291, 0x0294, 0x0297, 0x029a, 0x0221, 0x0007, 0x0003, + 0x029d, 0x02a4, 0x02af, 0x02bc, 0x02c9, 0x02d2, 0x02db, 0x0007, + 0x0003, 0x022d, 0x0238, 0x0247, 0x0258, 0x0269, 0x0276, 0x0283, + 0x0005, 0x0181, 0x018a, 0x019c, 0x0000, 0x0193, 0x0007, 0x0003, + 0x022d, 0x0238, 0x0247, 0x0258, 0x0269, 0x0276, 0x0283, 0x0007, + 0x0003, 0x028e, 0x0218, 0x0291, 0x0294, 0x0297, 0x029a, 0x0221, + // Entry 1E40 - 1E7F + 0x0007, 0x0003, 0x029d, 0x02a4, 0x02af, 0x02bc, 0x02c9, 0x02d2, + 0x02db, 0x0007, 0x0003, 0x022d, 0x0238, 0x0247, 0x0258, 0x0269, + 0x0276, 0x0283, 0x0002, 0x01a8, 0x01c1, 0x0003, 0x01ac, 0x01b3, + 0x01ba, 0x0005, 0x0003, 0xffff, 0x02e2, 0x02f8, 0x0310, 0x0328, + 0x0005, 0x0003, 0xffff, 0x009d, 0x00a0, 0x00a3, 0x00a6, 0x0005, + 0x0003, 0xffff, 0x02e2, 0x02f8, 0x0310, 0x0328, 0x0003, 0x01c5, + 0x01cc, 0x01d3, 0x0005, 0x0003, 0xffff, 0x02e2, 0x02f8, 0x0310, + 0x0328, 0x0005, 0x0003, 0xffff, 0x009d, 0x00a0, 0x00a3, 0x00a6, + // Entry 1E80 - 1EBF + 0x0005, 0x0003, 0xffff, 0x02e2, 0x02f8, 0x0310, 0x0328, 0x0002, + 0x01dd, 0x0256, 0x0003, 0x01e1, 0x0208, 0x022f, 0x000b, 0x01ed, + 0x01f0, 0x0000, 0x01f3, 0x01f9, 0x01ff, 0x0202, 0x0000, 0x01f6, + 0x01fc, 0x0205, 0x0001, 0x0003, 0x0340, 0x0001, 0x0003, 0x020f, + 0x0001, 0x0003, 0x0343, 0x0001, 0x0003, 0x0340, 0x0001, 0x0003, + 0x034e, 0x0001, 0x0003, 0x0359, 0x0001, 0x0003, 0x036b, 0x0001, + 0x0003, 0x0376, 0x0001, 0x0003, 0x038c, 0x000b, 0x0214, 0x0217, + 0x0000, 0x021a, 0x0220, 0x0226, 0x0229, 0x0000, 0x021d, 0x0223, + // Entry 1EC0 - 1EFF + 0x022c, 0x0001, 0x0003, 0x0340, 0x0001, 0x0003, 0x020f, 0x0001, + 0x0003, 0x0343, 0x0001, 0x0003, 0x0397, 0x0001, 0x0003, 0x034e, + 0x0001, 0x0003, 0x0359, 0x0001, 0x0003, 0x036b, 0x0001, 0x0003, + 0x0376, 0x0001, 0x0003, 0x038c, 0x000b, 0x023b, 0x023e, 0x0000, + 0x0241, 0x0247, 0x024d, 0x0250, 0x0000, 0x0244, 0x024a, 0x0253, + 0x0001, 0x0003, 0x0340, 0x0001, 0x0003, 0x020f, 0x0001, 0x0003, + 0x0343, 0x0001, 0x0003, 0x0397, 0x0001, 0x0003, 0x034e, 0x0001, + 0x0003, 0x0359, 0x0001, 0x0003, 0x036b, 0x0001, 0x0003, 0x0376, + // Entry 1F00 - 1F3F + 0x0001, 0x0003, 0x038c, 0x0003, 0x025a, 0x0281, 0x02a8, 0x000b, + 0x0266, 0x0269, 0x0000, 0x026c, 0x0272, 0x0278, 0x027b, 0x0000, + 0x026f, 0x0275, 0x027e, 0x0001, 0x0003, 0x0340, 0x0001, 0x0003, + 0x020f, 0x0001, 0x0003, 0x0343, 0x0001, 0x0003, 0x0340, 0x0001, + 0x0003, 0x034e, 0x0001, 0x0003, 0x0359, 0x0001, 0x0003, 0x036b, + 0x0001, 0x0003, 0x0376, 0x0001, 0x0003, 0x038c, 0x000b, 0x028d, + 0x0290, 0x0000, 0x0293, 0x0299, 0x029f, 0x02a2, 0x0000, 0x0296, + 0x029c, 0x02a5, 0x0001, 0x0003, 0x0340, 0x0001, 0x0003, 0x020f, + // Entry 1F40 - 1F7F + 0x0001, 0x0003, 0x0343, 0x0001, 0x0003, 0x0397, 0x0001, 0x0003, + 0x034e, 0x0001, 0x0003, 0x0359, 0x0001, 0x0003, 0x036b, 0x0001, + 0x0003, 0x0376, 0x0001, 0x0003, 0x038c, 0x000b, 0x02b4, 0x02b7, + 0x0000, 0x02ba, 0x02c0, 0x02c6, 0x02c9, 0x0000, 0x02bd, 0x02c3, + 0x02cc, 0x0001, 0x0003, 0x0397, 0x0001, 0x0003, 0x036b, 0x0001, + 0x0003, 0x0343, 0x0001, 0x0003, 0x0397, 0x0001, 0x0003, 0x034e, + 0x0001, 0x0003, 0x0359, 0x0001, 0x0003, 0x036b, 0x0001, 0x0003, + 0x0376, 0x0001, 0x0003, 0x038c, 0x0003, 0x02de, 0x0000, 0x02d3, + // Entry 1F80 - 1FBF + 0x0002, 0x02d6, 0x02da, 0x0002, 0x0003, 0x03a4, 0x03dd, 0x0002, + 0x0003, 0x03ba, 0x03ea, 0x0002, 0x02e1, 0x02e5, 0x0002, 0x0003, + 0x0400, 0x020f, 0x0002, 0x0003, 0x0406, 0x040d, 0x0004, 0x02f7, + 0x02f1, 0x02ee, 0x02f4, 0x0001, 0x0003, 0x0413, 0x0001, 0x0002, + 0x0033, 0x0001, 0x0003, 0x0423, 0x0001, 0x0003, 0x0431, 0x0004, + 0x0308, 0x0302, 0x02ff, 0x0305, 0x0001, 0x0002, 0x04e3, 0x0001, + 0x0002, 0x04f2, 0x0001, 0x0002, 0x04fe, 0x0001, 0x0002, 0x0508, + 0x0004, 0x0319, 0x0313, 0x0310, 0x0316, 0x0001, 0x0000, 0x03c6, + // Entry 1FC0 - 1FFF + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0006, 0x0323, 0x0000, 0x0000, 0x0000, 0x036e, 0x0375, + 0x0002, 0x0326, 0x034a, 0x0003, 0x032a, 0x0000, 0x033a, 0x000e, + 0x0003, 0x048f, 0x043d, 0x0446, 0x0455, 0x0460, 0x0469, 0x0472, + 0x0486, 0x04a5, 0x04b0, 0x04b9, 0x04c4, 0x04cd, 0x04d2, 0x000e, + 0x0003, 0x048f, 0x043d, 0x0446, 0x0455, 0x0460, 0x0469, 0x0472, + 0x0486, 0x04a5, 0x04b0, 0x04b9, 0x04c4, 0x04cd, 0x04d2, 0x0003, + 0x034e, 0x0000, 0x035e, 0x000e, 0x0003, 0x048f, 0x043d, 0x0446, + // Entry 2000 - 203F + 0x0455, 0x0460, 0x0469, 0x0472, 0x0486, 0x04a5, 0x04b0, 0x04b9, + 0x04c4, 0x04cd, 0x04d2, 0x000e, 0x0003, 0x048f, 0x043d, 0x0446, + 0x0455, 0x0460, 0x0469, 0x0472, 0x0486, 0x04a5, 0x04b0, 0x04b9, + 0x04c4, 0x04cd, 0x04d2, 0x0001, 0x0370, 0x0001, 0x0372, 0x0001, + 0x0003, 0x0340, 0x0004, 0x0383, 0x037d, 0x037a, 0x0380, 0x0001, + 0x0003, 0x014b, 0x0001, 0x0002, 0x0010, 0x0001, 0x0003, 0x015d, + 0x0001, 0x0003, 0x016d, 0x0008, 0x038f, 0x0000, 0x0000, 0x0000, + 0x03f4, 0x03fb, 0x0000, 0x9006, 0x0002, 0x0392, 0x03c3, 0x0003, + // Entry 2040 - 207F + 0x0396, 0x03a5, 0x03b4, 0x000d, 0x0003, 0xffff, 0x04dd, 0x04e6, + 0x04ed, 0x0501, 0x0515, 0x052d, 0x0545, 0x054c, 0x0557, 0x0562, + 0x056b, 0x057d, 0x000d, 0x0003, 0xffff, 0x009d, 0x00a0, 0x00a3, + 0x00a6, 0x00a9, 0x00ac, 0x00af, 0x00b2, 0x00b5, 0x00b8, 0x00bd, + 0x00c2, 0x000d, 0x0003, 0xffff, 0x04dd, 0x04e6, 0x04ed, 0x0501, + 0x0515, 0x052d, 0x0545, 0x054c, 0x0557, 0x0562, 0x056b, 0x057d, + 0x0003, 0x03c7, 0x03d6, 0x03e5, 0x000d, 0x0003, 0xffff, 0x04dd, + 0x04e6, 0x04ed, 0x0501, 0x0515, 0x052d, 0x0545, 0x054c, 0x0557, + // Entry 2080 - 20BF + 0x0562, 0x056b, 0x057d, 0x000d, 0x0003, 0xffff, 0x009d, 0x00a0, + 0x00a3, 0x00a6, 0x00a9, 0x00ac, 0x00af, 0x00b2, 0x00b5, 0x00b8, + 0x00bd, 0x00c2, 0x000d, 0x0003, 0xffff, 0x04dd, 0x04e6, 0x04ed, + 0x0501, 0x0515, 0x052d, 0x0545, 0x054c, 0x0557, 0x0562, 0x056b, + 0x057d, 0x0001, 0x03f6, 0x0001, 0x03f8, 0x0001, 0x0003, 0x058d, + 0x0004, 0x0409, 0x0403, 0x0400, 0x0406, 0x0001, 0x0003, 0x014b, + 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0003, + 0x016d, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0412, 0x0001, + // Entry 20C0 - 20FF + 0x0414, 0x0001, 0x0416, 0x00ec, 0x0003, 0x0592, 0x059b, 0x05a8, + 0x05b3, 0x05bc, 0x05c5, 0x05ce, 0x05d7, 0x05e2, 0x05eb, 0x05f6, + 0x0601, 0x0617, 0x062b, 0x063f, 0x0653, 0x0667, 0x0670, 0x067a, + 0x0689, 0x0692, 0x069d, 0x06a8, 0x06c6, 0x06cf, 0x06da, 0x06e3, + 0x06ec, 0x06f7, 0x0704, 0x070d, 0x071a, 0x0725, 0x072e, 0x0739, + 0x0744, 0x074f, 0x075e, 0x076b, 0x0774, 0x077d, 0x0784, 0x0793, + 0x079d, 0x07a6, 0x07af, 0x07ba, 0x07c3, 0x07cd, 0x07d6, 0x07fa, + 0x0809, 0x0814, 0x081f, 0x082a, 0x0835, 0x083e, 0x0849, 0x0856, + // Entry 2100 - 213F + 0x0867, 0x088d, 0x089c, 0x08be, 0x08c9, 0x08d4, 0x08e3, 0x0907, + 0x0929, 0x0951, 0x095a, 0x0967, 0x0972, 0x097b, 0x0986, 0x0993, + 0x09b5, 0x09c0, 0x09c9, 0x09d2, 0x09dc, 0x0a00, 0x0a0a, 0x0a13, + 0x0a1c, 0x0a25, 0x0a47, 0x0a52, 0x0a5b, 0x0a64, 0x0a86, 0x0a8f, + 0x0a9a, 0x0aa7, 0x0ab2, 0x0abb, 0x0ac4, 0x0ad3, 0x0adc, 0x0ae9, + 0x0af4, 0x0b00, 0x0b07, 0x0b0e, 0x0b19, 0x0b22, 0x0b2b, 0x0b32, + 0x0b41, 0x0b4a, 0x0b55, 0x0b5e, 0x0b67, 0x0b8b, 0x0b95, 0x0bb7, + 0x0bc6, 0x0be8, 0x0bf3, 0x0bf8, 0x0c05, 0x0c10, 0x0c1b, 0x0c24, + // Entry 2140 - 217F + 0x0c2d, 0x0c38, 0x0c47, 0x0c52, 0x0c61, 0x0c6b, 0x0c76, 0x0c81, + 0x0c8a, 0x0c95, 0x0c9e, 0x0ca7, 0x0cc9, 0x0cd3, 0x0cde, 0x0ce8, + 0x0cf1, 0x0cfa, 0x0d1a, 0x0d25, 0x0d2e, 0x0d37, 0x0d3e, 0x0d49, + 0x0d52, 0x0d5d, 0x0d7f, 0x0d88, 0x0d8f, 0x0db3, 0x0dd7, 0x0de2, + 0x0ded, 0x0df6, 0x0dfd, 0x0e06, 0x0e11, 0x0e1a, 0x0e25, 0x0e30, + 0x0e39, 0x0e48, 0x0e6a, 0x0e75, 0x0e9b, 0x0ea4, 0x0ea9, 0x0ecf, + 0x0ed8, 0x0efc, 0x0f20, 0x0f2d, 0x0f37, 0x0f42, 0x0f4f, 0x0f58, + 0x0f65, 0x0f6e, 0x0f77, 0x0f82, 0x0f8b, 0x0fb1, 0x0fbc, 0x0fc3, + // Entry 2180 - 21BF + 0x0fcc, 0x0fee, 0x0ff7, 0x1004, 0x100d, 0x102f, 0x103a, 0x1043, + 0x1065, 0x1070, 0x107b, 0x1084, 0x1090, 0x10b2, 0x10bb, 0x10db, + 0x10ea, 0x10f3, 0x10fc, 0x1105, 0x110e, 0x1119, 0x1124, 0x112d, + 0x1138, 0x1143, 0x114c, 0x116e, 0x1192, 0x119e, 0x11ad, 0x11b8, + 0x11c2, 0x11cb, 0x11d4, 0x11df, 0x11e8, 0x11f1, 0x11fa, 0x1203, + 0x120a, 0x1213, 0x121d, 0x1228, 0x1231, 0x1238, 0x1241, 0x124a, + 0x1253, 0x0005, 0x050a, 0x0000, 0x0000, 0x0000, 0x051f, 0x0001, + 0x050c, 0x0003, 0x0000, 0x0000, 0x0510, 0x000d, 0x0003, 0xffff, + // Entry 21C0 - 21FF + 0x125c, 0x1269, 0x127a, 0x1285, 0x128c, 0x1297, 0x12a4, 0x12ab, + 0x12b4, 0x12bb, 0x12c0, 0x12c9, 0x0001, 0x0521, 0x0001, 0x0523, + 0x0001, 0x0003, 0x12d8, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, + 0x052c, 0x0001, 0x052e, 0x0001, 0x0530, 0x0002, 0x0000, 0x1a20, + 0x2012, 0x0042, 0x0577, 0x057c, 0x0581, 0x0586, 0x05a5, 0x05bf, + 0x05d9, 0x05f8, 0x0617, 0x0636, 0x0655, 0x066f, 0x0689, 0x06ac, + 0x06ca, 0x06e8, 0x06ed, 0x06f2, 0x06f7, 0x0718, 0x0732, 0x074c, + 0x0751, 0x0756, 0x075b, 0x0760, 0x0765, 0x076a, 0x076f, 0x0774, + // Entry 2200 - 223F + 0x0779, 0x0795, 0x07b1, 0x07cd, 0x07e9, 0x0805, 0x0821, 0x083d, + 0x0859, 0x0875, 0x0891, 0x08ad, 0x08c9, 0x08e5, 0x0901, 0x091d, + 0x0939, 0x0955, 0x0971, 0x098d, 0x09a9, 0x09c5, 0x09ca, 0x09cf, + 0x09d4, 0x09f2, 0x0a0c, 0x0a26, 0x0a44, 0x0a5e, 0x0a78, 0x0a96, + 0x0ab0, 0x0aca, 0x0acf, 0x0ad4, 0x0001, 0x0579, 0x0001, 0x0003, + 0x12e1, 0x0001, 0x057e, 0x0001, 0x0003, 0x12e1, 0x0001, 0x0583, + 0x0001, 0x0003, 0x12e1, 0x0003, 0x058a, 0x058d, 0x0592, 0x0001, + 0x0003, 0x12ec, 0x0003, 0x0003, 0x12f7, 0x1311, 0x132b, 0x0002, + // Entry 2240 - 227F + 0x0595, 0x059d, 0x0006, 0x0003, 0x1345, 0x1359, 0x1345, 0x1374, + 0x1388, 0x1345, 0x0006, 0x0003, 0x13a0, 0x13b2, 0x13a0, 0x13cb, + 0x13dd, 0x13a0, 0x0003, 0x05a9, 0x0000, 0x05ac, 0x0001, 0x0003, + 0x12ec, 0x0002, 0x05af, 0x05b7, 0x0006, 0x0003, 0x1345, 0x1359, + 0x1345, 0x1374, 0x1388, 0x1345, 0x0006, 0x0003, 0x13a0, 0x13b2, + 0x13a0, 0x13cb, 0x13dd, 0x13a0, 0x0003, 0x05c3, 0x0000, 0x05c6, + 0x0001, 0x0003, 0x12ec, 0x0002, 0x05c9, 0x05d1, 0x0006, 0x0003, + 0x1345, 0x1359, 0x1345, 0x1374, 0x1388, 0x1345, 0x0006, 0x0003, + // Entry 2280 - 22BF + 0x13a0, 0x13b2, 0x13a0, 0x13cb, 0x13dd, 0x13a0, 0x0003, 0x05dd, + 0x05e0, 0x05e5, 0x0001, 0x0003, 0x13f3, 0x0003, 0x0003, 0x1405, + 0x141d, 0x142f, 0x0002, 0x05e8, 0x05f0, 0x0006, 0x0003, 0x1447, + 0x1462, 0x1447, 0x1482, 0x149b, 0x1447, 0x0006, 0x0003, 0x14ba, + 0x14d3, 0x14ba, 0x14f1, 0x1508, 0x14ba, 0x0003, 0x05fc, 0x05ff, + 0x0604, 0x0001, 0x0003, 0x13f3, 0x0003, 0x0003, 0x1405, 0x141d, + 0x142f, 0x0002, 0x0607, 0x060f, 0x0006, 0x0003, 0x1447, 0x1462, + 0x1447, 0x1482, 0x149b, 0x1447, 0x0006, 0x0003, 0x14ba, 0x14d3, + // Entry 22C0 - 22FF + 0x14ba, 0x14f1, 0x1508, 0x14ba, 0x0003, 0x061b, 0x061e, 0x0623, + 0x0001, 0x0003, 0x13f3, 0x0003, 0x0003, 0x1405, 0x141d, 0x142f, + 0x0002, 0x0626, 0x062e, 0x0006, 0x0003, 0x1447, 0x1462, 0x1447, + 0x1482, 0x149b, 0x1447, 0x0006, 0x0003, 0x14ba, 0x14d3, 0x14ba, + 0x14f1, 0x1508, 0x14ba, 0x0003, 0x063a, 0x063d, 0x0642, 0x0001, + 0x0003, 0x1525, 0x0003, 0x0003, 0x1530, 0x1548, 0x155a, 0x0002, + 0x0645, 0x064d, 0x0006, 0x0003, 0x1572, 0x1586, 0x1572, 0x159f, + 0x15b3, 0x15c9, 0x0006, 0x0003, 0x15e1, 0x15f3, 0x15e1, 0x160a, + // Entry 2300 - 233F + 0x161c, 0x1630, 0x0003, 0x0659, 0x0000, 0x065c, 0x0001, 0x0003, + 0x1525, 0x0002, 0x065f, 0x0667, 0x0006, 0x0003, 0x1572, 0x1586, + 0x1572, 0x159f, 0x15b3, 0x15c9, 0x0006, 0x0003, 0x15e1, 0x15f3, + 0x15e1, 0x160a, 0x15b3, 0x1630, 0x0003, 0x0673, 0x0000, 0x0676, + 0x0001, 0x0003, 0x1525, 0x0002, 0x0679, 0x0681, 0x0006, 0x0003, + 0x1572, 0x1586, 0x1572, 0x159f, 0x15b3, 0x15c9, 0x0006, 0x0003, + 0x15e1, 0x15f3, 0x15e1, 0x160a, 0x161c, 0x1630, 0x0004, 0x068e, + 0x0691, 0x0696, 0x06a9, 0x0001, 0x0003, 0x1646, 0x0003, 0x0003, + // Entry 2340 - 237F + 0x1655, 0x1671, 0x1687, 0x0002, 0x0699, 0x06a1, 0x0006, 0x0003, + 0x16a3, 0x16bb, 0x16a3, 0x16d8, 0x16f0, 0x170a, 0x0006, 0x0003, + 0x1726, 0x173c, 0x1726, 0x1757, 0x176d, 0x1785, 0x0001, 0x0003, + 0x179f, 0x0004, 0x06b1, 0x0000, 0x06b4, 0x06c7, 0x0001, 0x0003, + 0x1646, 0x0002, 0x06b7, 0x06bf, 0x0006, 0x0003, 0x16a3, 0x16bb, + 0x16a3, 0x17ae, 0x16f0, 0x170a, 0x0006, 0x0003, 0x1726, 0x173c, + 0x1726, 0x1757, 0x176d, 0x1785, 0x0001, 0x0003, 0x179f, 0x0004, + 0x06cf, 0x0000, 0x06d2, 0x06e5, 0x0001, 0x0003, 0x1646, 0x0002, + // Entry 2380 - 23BF + 0x06d5, 0x06dd, 0x0006, 0x0003, 0x16a3, 0x16bb, 0x16a3, 0x16d8, + 0x16f0, 0x170a, 0x0006, 0x0003, 0x1726, 0x173c, 0x1726, 0x1757, + 0x176d, 0x1785, 0x0001, 0x0003, 0x179f, 0x0001, 0x06ea, 0x0001, + 0x0003, 0x17ca, 0x0001, 0x06ef, 0x0001, 0x0003, 0x17e9, 0x0001, + 0x06f4, 0x0001, 0x0003, 0x1800, 0x0003, 0x06fb, 0x06fe, 0x0705, + 0x0001, 0x0003, 0x1812, 0x0005, 0x0003, 0x1827, 0x182e, 0x1839, + 0x1819, 0x1842, 0x0002, 0x0708, 0x0710, 0x0006, 0x0003, 0x1852, + 0x1866, 0x1852, 0x187f, 0x1893, 0x18a9, 0x0006, 0x0003, 0x18c1, + // Entry 23C0 - 23FF + 0x18d3, 0x18c1, 0x18ea, 0x18fc, 0x1910, 0x0003, 0x071c, 0x0000, + 0x071f, 0x0001, 0x0003, 0x1812, 0x0002, 0x0722, 0x072a, 0x0006, + 0x0003, 0x1852, 0x1866, 0x1852, 0x187f, 0x1893, 0x18a9, 0x0006, + 0x0003, 0x18c1, 0x18d3, 0x18c1, 0x18ea, 0x18fc, 0x1910, 0x0003, + 0x0736, 0x0000, 0x0739, 0x0001, 0x0003, 0x1812, 0x0002, 0x073c, + 0x0744, 0x0006, 0x0003, 0x1852, 0x1866, 0x1852, 0x187f, 0x1893, + 0x18a9, 0x0006, 0x0003, 0x18c1, 0x18d3, 0x18c1, 0x18ea, 0x18fc, + 0x1910, 0x0001, 0x074e, 0x0001, 0x0003, 0x1926, 0x0001, 0x0753, + // Entry 2400 - 243F + 0x0001, 0x0003, 0x193d, 0x0001, 0x0758, 0x0001, 0x0003, 0x1950, + 0x0001, 0x075d, 0x0001, 0x0003, 0x182e, 0x0001, 0x0762, 0x0001, + 0x0003, 0x182e, 0x0001, 0x0767, 0x0001, 0x0003, 0x182e, 0x0001, + 0x076c, 0x0001, 0x0003, 0x195e, 0x0001, 0x0771, 0x0001, 0x0003, + 0x197c, 0x0001, 0x0776, 0x0001, 0x0003, 0x1996, 0x0003, 0x0000, + 0x077d, 0x0782, 0x0003, 0x0003, 0x19ab, 0x19c3, 0x19db, 0x0002, + 0x0785, 0x078d, 0x0006, 0x0003, 0x19f3, 0x19db, 0x19f3, 0x1a07, + 0x19f3, 0x19f3, 0x0006, 0x0003, 0x1a26, 0x19ab, 0x1a26, 0x1a38, + // Entry 2440 - 247F + 0x1a26, 0x1a26, 0x0003, 0x0000, 0x0799, 0x079e, 0x0003, 0x0003, + 0x19ab, 0x19c3, 0x19db, 0x0002, 0x07a1, 0x07a9, 0x0006, 0x0003, + 0x19f3, 0x1a57, 0x19f3, 0x1a67, 0x19f3, 0x19f3, 0x0006, 0x0003, + 0x1a26, 0x1a82, 0x1a26, 0x1a92, 0x1a26, 0x1a26, 0x0003, 0x0000, + 0x07b5, 0x07ba, 0x0003, 0x0003, 0x19ab, 0x19c3, 0x19db, 0x0002, + 0x07bd, 0x07c5, 0x0006, 0x0003, 0x19f3, 0x1a57, 0x19f3, 0x1a67, + 0x19f3, 0x19f3, 0x0006, 0x0003, 0x1a26, 0x1a82, 0x1a26, 0x1a92, + 0x1a26, 0x1a26, 0x0003, 0x0000, 0x07d1, 0x07d6, 0x0003, 0x0003, + // Entry 2480 - 24BF + 0x1aad, 0x1ac9, 0x1ae5, 0x0002, 0x07d9, 0x07e1, 0x0006, 0x0003, + 0x1b5d, 0x1ae5, 0x1b01, 0x1b19, 0x1b3c, 0x1b5d, 0x0006, 0x0003, + 0x1bd4, 0x1aad, 0x1b7c, 0x1b92, 0x1bb5, 0x1bd4, 0x0003, 0x0000, + 0x07ed, 0x07f2, 0x0003, 0x0003, 0x1aad, 0x1ac9, 0x1ae5, 0x0002, + 0x07f5, 0x07fd, 0x0006, 0x0003, 0x1b01, 0x1ae5, 0x1b01, 0x1b19, + 0x1b01, 0x1b01, 0x0006, 0x0003, 0x1b7c, 0x1aad, 0x1b7c, 0x1b92, + 0x1b7c, 0x1b7c, 0x0003, 0x0000, 0x0809, 0x080e, 0x0003, 0x0003, + 0x1aad, 0x1ac9, 0x1ae5, 0x0002, 0x0811, 0x0819, 0x0006, 0x0003, + // Entry 24C0 - 24FF + 0x1b01, 0x1bf1, 0x1b01, 0x1b19, 0x1b01, 0x1b01, 0x0006, 0x0003, + 0x1b7c, 0x1c05, 0x1b7c, 0x1c19, 0x1b7c, 0x1b7c, 0x0003, 0x0000, + 0x0825, 0x082a, 0x0003, 0x0003, 0x1c38, 0x1c56, 0x1c74, 0x0002, + 0x082d, 0x0835, 0x0006, 0x0003, 0x1c92, 0x1c74, 0x1c92, 0x1cb3, + 0x1cd8, 0x1c92, 0x0006, 0x0003, 0x1cfb, 0x1c38, 0x1cfb, 0x1d1a, + 0x1d3f, 0x1cfb, 0x0003, 0x0000, 0x0841, 0x0846, 0x0003, 0x0003, + 0x1c38, 0x1c56, 0x1c74, 0x0002, 0x0849, 0x0851, 0x0006, 0x0003, + 0x1d60, 0x1d7a, 0x1d60, 0x1d90, 0x1d60, 0x1d60, 0x0006, 0x0003, + // Entry 2500 - 253F + 0x1db1, 0x1dc9, 0x1db1, 0x1ddf, 0x1db1, 0x1db1, 0x0003, 0x0000, + 0x085d, 0x0862, 0x0003, 0x0003, 0x1c38, 0x1c56, 0x1c74, 0x0002, + 0x0865, 0x086d, 0x0006, 0x0003, 0x1d60, 0x1d7a, 0x1d60, 0x1d90, + 0x1d60, 0x1d60, 0x0006, 0x0003, 0x1db1, 0x1dc9, 0x1db1, 0x1ddf, + 0x1db1, 0x1db1, 0x0003, 0x0000, 0x0879, 0x087e, 0x0003, 0x0003, + 0x1e00, 0x1e1e, 0x1e3c, 0x0002, 0x0881, 0x0889, 0x0006, 0x0003, + 0x1e5a, 0x1e3c, 0x1e5a, 0x1e7b, 0x1ea0, 0x1e5a, 0x0006, 0x0003, + 0x1ec3, 0x1e00, 0x1ec3, 0x1ee2, 0x1f07, 0x1ec3, 0x0003, 0x0000, + // Entry 2540 - 257F + 0x0895, 0x089a, 0x0003, 0x0003, 0x1e00, 0x1e1e, 0x1e3c, 0x0002, + 0x089d, 0x08a5, 0x0006, 0x0003, 0x1f28, 0x1f28, 0x1f28, 0x1f28, + 0x1f28, 0x1f28, 0x0006, 0x0003, 0x1f42, 0x1f5a, 0x1f42, 0x1f70, + 0x1f42, 0x1f42, 0x0003, 0x0000, 0x08b1, 0x08b6, 0x0003, 0x0003, + 0x1e00, 0x1e1e, 0x1e3c, 0x0002, 0x08b9, 0x08c1, 0x0006, 0x0003, + 0x1f28, 0x1f91, 0x1f28, 0x1fa7, 0x1f28, 0x1f28, 0x0006, 0x0003, + 0x1f42, 0x1f5a, 0x1f42, 0x1f70, 0x1f42, 0x1f42, 0x0003, 0x0000, + 0x08cd, 0x08d2, 0x0003, 0x0003, 0x1fc8, 0x1fe2, 0x1ffc, 0x0002, + // Entry 2580 - 25BF + 0x08d5, 0x08dd, 0x0006, 0x0004, 0x0000, 0x001d, 0x0000, 0x0037, + 0x0058, 0x0000, 0x0006, 0x0004, 0x0077, 0x0092, 0x0077, 0x00ac, + 0x00cd, 0x0077, 0x0003, 0x0000, 0x08e9, 0x08ee, 0x0003, 0x0004, + 0x0092, 0x00ea, 0x001d, 0x0002, 0x08f1, 0x08f9, 0x0006, 0x0004, + 0x0104, 0x001d, 0x0104, 0x0037, 0x0104, 0x0104, 0x0006, 0x0004, + 0x011a, 0x012e, 0x011a, 0x0140, 0x011a, 0x011a, 0x0003, 0x0000, + 0x0905, 0x090a, 0x0003, 0x0004, 0x0092, 0x00ea, 0x001d, 0x0002, + 0x090d, 0x0915, 0x0006, 0x0004, 0x0104, 0x0000, 0x0104, 0x0037, + // Entry 25C0 - 25FF + 0x0104, 0x0104, 0x0006, 0x0004, 0x011a, 0x012e, 0x011a, 0x0140, + 0x011a, 0x011a, 0x0003, 0x0000, 0x0921, 0x0926, 0x0003, 0x0004, + 0x015d, 0x0177, 0x0191, 0x0002, 0x0929, 0x0931, 0x0006, 0x0004, + 0x01ab, 0x0191, 0x01ab, 0x01c8, 0x01e9, 0x01ab, 0x0006, 0x0004, + 0x0208, 0x015d, 0x0208, 0x0223, 0x0244, 0x0208, 0x0003, 0x0000, + 0x093d, 0x0942, 0x0003, 0x0004, 0x015d, 0x0177, 0x0191, 0x0002, + 0x0945, 0x094d, 0x0006, 0x0004, 0x0261, 0x0277, 0x0261, 0x0289, + 0x0261, 0x0261, 0x0006, 0x0004, 0x02a6, 0x02ba, 0x02a6, 0x02cc, + // Entry 2600 - 263F + 0x02a6, 0x02a6, 0x0003, 0x0000, 0x0959, 0x095e, 0x0003, 0x0004, + 0x015d, 0x0177, 0x0191, 0x0002, 0x0961, 0x0969, 0x0006, 0x0004, + 0x0261, 0x0277, 0x0261, 0x0289, 0x0261, 0x0261, 0x0006, 0x0004, + 0x02a6, 0x02ba, 0x02a6, 0x02cc, 0x02a6, 0x02a6, 0x0003, 0x0000, + 0x0975, 0x097a, 0x0003, 0x0004, 0x02e9, 0x0301, 0x0319, 0x0002, + 0x097d, 0x0985, 0x0006, 0x0004, 0x038e, 0x0319, 0x0319, 0x0331, + 0x0350, 0x0373, 0x0006, 0x0004, 0x03a7, 0x02e9, 0x03a7, 0x03c0, + 0x03a7, 0x03a7, 0x0003, 0x0000, 0x0991, 0x0996, 0x0003, 0x0004, + // Entry 2640 - 267F + 0x02e9, 0x0301, 0x0319, 0x0002, 0x0999, 0x09a1, 0x0006, 0x0004, + 0x03df, 0x03f3, 0x03df, 0x0403, 0x03df, 0x03df, 0x0006, 0x0004, + 0x041e, 0x0430, 0x041e, 0x0440, 0x041e, 0x041e, 0x0003, 0x0000, + 0x09ad, 0x09b2, 0x0003, 0x0004, 0x02e9, 0x0301, 0x0319, 0x0002, + 0x09b5, 0x09bd, 0x0006, 0x0004, 0x03df, 0x03f3, 0x03df, 0x0403, + 0x03df, 0x03df, 0x0006, 0x0004, 0x041e, 0x0430, 0x041e, 0x0440, + 0x041e, 0x041e, 0x0001, 0x09c7, 0x0001, 0x0004, 0x045b, 0x0001, + 0x09cc, 0x0001, 0x0004, 0x045b, 0x0001, 0x09d1, 0x0001, 0x0004, + // Entry 2680 - 26BF + 0x045b, 0x0003, 0x09d8, 0x09db, 0x09df, 0x0001, 0x0004, 0x0461, + 0x0002, 0x0004, 0xffff, 0x0470, 0x0002, 0x09e2, 0x09ea, 0x0006, + 0x0004, 0x048c, 0x04a2, 0x048c, 0x04bf, 0x04d5, 0x048c, 0x0006, + 0x0004, 0x04ed, 0x0501, 0x04ed, 0x051c, 0x0530, 0x04ed, 0x0003, + 0x09f6, 0x0000, 0x09f9, 0x0001, 0x0004, 0x0461, 0x0002, 0x09fc, + 0x0a04, 0x0006, 0x0004, 0x048c, 0x04a2, 0x048c, 0x04bf, 0x04d5, + 0x048c, 0x0006, 0x0004, 0x04ed, 0x0501, 0x04ed, 0x051c, 0x0530, + 0x04ed, 0x0003, 0x0a10, 0x0000, 0x0a13, 0x0001, 0x0004, 0x0461, + // Entry 26C0 - 26FF + 0x0002, 0x0a16, 0x0a1e, 0x0006, 0x0004, 0x048c, 0x04a2, 0x048c, + 0x04bf, 0x04d5, 0x048c, 0x0006, 0x0004, 0x04ed, 0x0501, 0x04ed, + 0x051c, 0x0530, 0x04ed, 0x0003, 0x0a2a, 0x0a2d, 0x0a31, 0x0001, + 0x0004, 0x0546, 0x0002, 0x0004, 0xffff, 0x0555, 0x0002, 0x0a34, + 0x0a3c, 0x0006, 0x0004, 0x056b, 0x0583, 0x056b, 0x05a2, 0x05ba, + 0x056b, 0x0006, 0x0004, 0x05d2, 0x05e8, 0x05d2, 0x0605, 0x061b, + 0x05d2, 0x0003, 0x0a48, 0x0000, 0x0a4b, 0x0001, 0x0004, 0x0546, + 0x0002, 0x0a4e, 0x0a56, 0x0006, 0x0004, 0x056b, 0x0583, 0x056b, + // Entry 2700 - 273F + 0x05a2, 0x05ba, 0x056b, 0x0006, 0x0004, 0x05d2, 0x05e8, 0x05d2, + 0x0605, 0x061b, 0x05d2, 0x0003, 0x0a62, 0x0000, 0x0a65, 0x0001, + 0x0004, 0x0546, 0x0002, 0x0a68, 0x0a70, 0x0006, 0x0004, 0x056b, + 0x0583, 0x056b, 0x05a2, 0x05ba, 0x056b, 0x0006, 0x0004, 0x05d2, + 0x05e8, 0x05d2, 0x0605, 0x061b, 0x05d2, 0x0003, 0x0a7c, 0x0a7f, + 0x0a83, 0x0001, 0x0004, 0x0631, 0x0002, 0x0004, 0xffff, 0x0640, + 0x0002, 0x0a86, 0x0a8e, 0x0006, 0x0004, 0x0649, 0x0661, 0x0649, + 0x0680, 0x0698, 0x0649, 0x0006, 0x0004, 0x06b0, 0x06c6, 0x06b0, + // Entry 2740 - 277F + 0x06e3, 0x06f9, 0x06b0, 0x0003, 0x0a9a, 0x0000, 0x0a9d, 0x0001, + 0x0004, 0x0631, 0x0002, 0x0aa0, 0x0aa8, 0x0006, 0x0004, 0x0649, + 0x0661, 0x0649, 0x0680, 0x0698, 0x0649, 0x0006, 0x0004, 0x06b0, + 0x06c6, 0x06b0, 0x06e3, 0x070f, 0x06b0, 0x0003, 0x0ab4, 0x0000, + 0x0ab7, 0x0001, 0x0004, 0x0631, 0x0002, 0x0aba, 0x0ac2, 0x0006, + 0x0004, 0x0649, 0x0661, 0x0649, 0x0680, 0x0698, 0x0649, 0x0006, + 0x0004, 0x06b0, 0x06c6, 0x06b0, 0x06e3, 0x070f, 0x06b0, 0x0001, + 0x0acc, 0x0001, 0x0004, 0x0725, 0x0001, 0x0ad1, 0x0001, 0x0004, + // Entry 2780 - 27BF + 0x0734, 0x0001, 0x0ad6, 0x0001, 0x0004, 0x0734, 0x0004, 0x0ade, + 0x0ae3, 0x0ae8, 0x0af7, 0x0003, 0x0000, 0x1dc7, 0x202a, 0x203a, + 0x0003, 0x0004, 0x073f, 0x074e, 0x076a, 0x0002, 0x0000, 0x0aeb, + 0x0003, 0x0000, 0x0af2, 0x0aef, 0x0001, 0x0004, 0x0786, 0x0003, + 0x0004, 0xffff, 0x07b1, 0x07da, 0x0002, 0x0000, 0x0afa, 0x0003, + 0x0b96, 0x0c2c, 0x0afe, 0x0096, 0x0004, 0x0801, 0x081f, 0x0840, + 0x0861, 0x08a5, 0x0919, 0x0985, 0x0a15, 0x0ae7, 0x0bb5, 0x0c6c, + 0x0ce8, 0x0d4c, 0x0db6, 0x0e26, 0x0ea1, 0x0f1f, 0x0f87, 0x1000, + // Entry 27C0 - 27FF + 0x108a, 0x111b, 0x119e, 0x121a, 0x1282, 0x12e4, 0x1336, 0x134c, + 0x1382, 0x13d4, 0x140f, 0x146f, 0x14a1, 0x14ff, 0x1557, 0x15bb, + 0x1617, 0x163c, 0x1675, 0x16e2, 0x1746, 0x1788, 0x179e, 0x17c7, + 0x180b, 0x1863, 0x18a0, 0x1917, 0x196f, 0x19c4, 0x1a3d, 0x1aad, + 0x1aef, 0x1b18, 0x1b73, 0x1b8f, 0x1bbf, 0x1c09, 0x1c28, 0x1c63, + 0x1ce6, 0x1d5a, 0x1d72, 0x1dad, 0x1e2e, 0x1e96, 0x1ed8, 0x1eee, + 0x1f13, 0x1f38, 0x1f5d, 0x1f82, 0x1fbd, 0x201d, 0x2085, 0x20ed, + 0x2157, 0x21da, 0x21ff, 0x223a, 0x2280, 0x22b8, 0x231c, 0x233c, + // Entry 2800 - 283F + 0x2372, 0x23c8, 0x23fc, 0x244a, 0x2464, 0x2482, 0x249e, 0x24d9, + 0x252b, 0x256d, 0x261b, 0x26be, 0x2730, 0x2776, 0x2790, 0x27a6, + 0x27e9, 0x287b, 0x28f5, 0x2957, 0x296b, 0x29c0, 0x2a8a, 0x2afe, + 0x2b5e, 0x2bac, 0x2bc2, 0x2c0e, 0x2c74, 0x2cd2, 0x2d24, 0x2d6f, + 0x2de5, 0x2dff, 0x2e17, 0x2e36, 0x2e50, 0x2e82, 0x2ee8, 0x2f37, + 0x2f7d, 0x2f91, 0x2fad, 0x2fcc, 0x2fed, 0x3007, 0x301f, 0x304f, + 0x3099, 0x30b5, 0x30e5, 0x312b, 0x315d, 0x31b7, 0x31eb, 0x325b, + 0x32cb, 0x3319, 0x3355, 0x33d1, 0x3427, 0x343f, 0x345c, 0x349c, + // Entry 2840 - 287F + 0x350c, 0x1d46, 0x2a36, 0x0094, 0x0004, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0884, 0x0901, 0x0969, 0x09d7, 0x0aab, 0x0b79, 0x0c47, + 0x0cd0, 0x0d38, 0x0d9a, 0x0e08, 0x0e7c, 0x0f05, 0x0f6d, 0x0fdd, + 0x1060, 0x10f8, 0x117b, 0x11fe, 0x126c, 0x12c8, 0xffff, 0xffff, + 0x1366, 0xffff, 0x13ec, 0xffff, 0x1489, 0x14eb, 0x1541, 0x159d, + 0xffff, 0xffff, 0x1659, 0x16c7, 0x1732, 0xffff, 0xffff, 0xffff, + 0x17ec, 0xffff, 0x1881, 0x18f8, 0xffff, 0x19a5, 0x1a1c, 0x1a99, + 0xffff, 0xffff, 0xffff, 0xffff, 0x1ba7, 0xffff, 0xffff, 0x1c40, + // Entry 2880 - 28BF + 0x1cc3, 0xffff, 0xffff, 0x1d88, 0x1e11, 0x1e82, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x1fa7, 0x2003, 0x206b, 0x20d3, + 0x213b, 0xffff, 0xffff, 0x2224, 0xffff, 0x2296, 0xffff, 0xffff, + 0x2357, 0xffff, 0x23e2, 0xffff, 0xffff, 0xffff, 0xffff, 0x24bd, + 0xffff, 0x2543, 0x25e7, 0x269d, 0x271a, 0xffff, 0xffff, 0xffff, + 0x27bc, 0x285d, 0x28d1, 0xffff, 0xffff, 0x2990, 0x2a68, 0x2ae8, + 0x2b44, 0xffff, 0xffff, 0x2bf2, 0x2c60, 0x2cb6, 0xffff, 0x2d41, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2e68, 0x2ed0, 0x2f21, + // Entry 28C0 - 28FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3037, + 0xffff, 0xffff, 0x30cf, 0xffff, 0x313d, 0xffff, 0x31cf, 0x323d, + 0x32b1, 0xffff, 0x3333, 0x33b3, 0xffff, 0xffff, 0xffff, 0x3482, + 0x34ea, 0x0094, 0x0004, 0xffff, 0xffff, 0xffff, 0xffff, 0x08d3, + 0x0944, 0x09ae, 0x0a60, 0x0b30, 0x0bfe, 0x0c9e, 0x0d0d, 0x0d73, + 0x0ddf, 0x0e51, 0x0ed3, 0x0f46, 0x0fb2, 0x1030, 0x10c1, 0x114b, + 0x11ce, 0x1243, 0x12a5, 0x130d, 0xffff, 0xffff, 0x13ab, 0xffff, + 0x143f, 0xffff, 0x14c6, 0x1520, 0x157a, 0x15e6, 0xffff, 0xffff, + // Entry 2900 - 293F + 0x169e, 0x170a, 0x1767, 0xffff, 0xffff, 0xffff, 0x1837, 0xffff, + 0x18cc, 0x1943, 0xffff, 0x19f0, 0x1a6b, 0x1ace, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1be4, 0xffff, 0xffff, 0x1c93, 0x1d16, 0xffff, + 0xffff, 0x1ddf, 0x1e58, 0x1eb7, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1fe0, 0x2044, 0x20ac, 0x2114, 0x2192, 0xffff, + 0xffff, 0x225d, 0xffff, 0x22e7, 0xffff, 0xffff, 0x239a, 0xffff, + 0x2423, 0xffff, 0xffff, 0xffff, 0xffff, 0x2502, 0xffff, 0x25aa, + 0x265c, 0x26ec, 0x2753, 0xffff, 0xffff, 0xffff, 0x2823, 0x28a6, + // Entry 2940 - 297F + 0x2926, 0xffff, 0xffff, 0x29fb, 0x2ab9, 0x2b21, 0x2b85, 0xffff, + 0xffff, 0x2c37, 0x2c95, 0x2cfb, 0xffff, 0x2daa, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2ea9, 0x2efe, 0x2f5a, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3074, 0xffff, 0xffff, + 0x3108, 0xffff, 0x318a, 0xffff, 0x3214, 0x3286, 0x32f2, 0xffff, + 0x3384, 0x33fc, 0xffff, 0xffff, 0xffff, 0x34c3, 0x353b, 0x0002, + 0x0003, 0x0022, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000c, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 2980 - 29BF + 0x0012, 0x0003, 0x001c, 0x0000, 0x0016, 0x0002, 0x0000, 0x0019, + 0x0001, 0x0003, 0x03a4, 0x0002, 0x0000, 0x001f, 0x0001, 0x0003, + 0x0400, 0x0004, 0x0000, 0x0000, 0x0000, 0x0027, 0x0002, 0x0000, + 0x002a, 0x0003, 0x0003, 0x12f7, 0x2016, 0x2028, 0x0001, 0x0002, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000b, 0x0001, 0x000d, 0x0002, 0x0010, 0x0041, 0x0003, 0x0014, + 0x0023, 0x0032, 0x000d, 0x0005, 0xffff, 0x0000, 0x000b, 0x0016, + 0x001f, 0x002a, 0x0031, 0x003a, 0x0047, 0x004e, 0x005b, 0x0068, + // Entry 29C0 - 29FF + 0x0075, 0x000d, 0x0003, 0xffff, 0x029a, 0x020c, 0x020f, 0x0212, + 0x020f, 0x029a, 0x029a, 0x0212, 0x0221, 0x0212, 0x0218, 0x022a, + 0x000d, 0x0005, 0xffff, 0x0000, 0x000b, 0x0016, 0x001f, 0x002a, + 0x0031, 0x003a, 0x0047, 0x004e, 0x005b, 0x0068, 0x0075, 0x0003, + 0x0045, 0x0054, 0x0063, 0x000d, 0x0005, 0xffff, 0x0000, 0x000b, + 0x0016, 0x001f, 0x002a, 0x0031, 0x003a, 0x0047, 0x004e, 0x005b, + 0x0068, 0x0075, 0x000d, 0x0003, 0xffff, 0x029a, 0x020c, 0x020f, + 0x0212, 0x020f, 0x029a, 0x029a, 0x0212, 0x0221, 0x0212, 0x0218, + // Entry 2A00 - 2A3F + 0x022a, 0x000d, 0x0005, 0xffff, 0x0000, 0x000b, 0x0016, 0x001f, + 0x002a, 0x0031, 0x003a, 0x0047, 0x004e, 0x005b, 0x0068, 0x0075, + 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000b, 0x0007, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0013, 0x0004, 0x0021, 0x001b, 0x0018, 0x001e, + 0x0001, 0x0005, 0x0082, 0x0001, 0x0005, 0x008f, 0x0001, 0x0005, + 0x0099, 0x0001, 0x0005, 0x00a1, 0x0001, 0x0002, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0001, + // Entry 2A40 - 2A7F + 0x000d, 0x0002, 0x0010, 0x0041, 0x0003, 0x0014, 0x0023, 0x0032, + 0x000d, 0x0005, 0xffff, 0x00a6, 0x00be, 0x00c7, 0x00d0, 0x00db, + 0x00e4, 0x00f1, 0x00fa, 0x00ff, 0x010a, 0x0121, 0x0139, 0x000d, + 0x0003, 0xffff, 0x0224, 0x2042, 0x2045, 0x0218, 0x0212, 0x028e, + 0x2048, 0x2045, 0x0212, 0x2048, 0x2048, 0x0224, 0x000d, 0x0005, + 0xffff, 0x00a6, 0x00be, 0x00c7, 0x00d0, 0x00db, 0x00e4, 0x00f1, + 0x00fa, 0x00ff, 0x014f, 0x0121, 0x0139, 0x0003, 0x0045, 0x0054, + 0x0063, 0x000d, 0x0005, 0xffff, 0x00a6, 0x00be, 0x00c7, 0x00d0, + // Entry 2A80 - 2ABF + 0x00db, 0x00e4, 0x00f1, 0x00fa, 0x00ff, 0x014f, 0x0121, 0x0139, + 0x000d, 0x0003, 0xffff, 0x0224, 0x2042, 0x2045, 0x0218, 0x0212, + 0x028e, 0x2048, 0x2045, 0x0212, 0x2048, 0x2048, 0x0224, 0x000d, + 0x0005, 0xffff, 0x00a6, 0x00be, 0x00c7, 0x00d0, 0x00db, 0x00e4, + 0x00f1, 0x00fa, 0x00ff, 0x014f, 0x0121, 0x0139, 0x0001, 0x0002, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000b, 0x0001, 0x000d, 0x0002, 0x0010, 0x0041, 0x0003, 0x0014, + 0x0023, 0x0032, 0x000d, 0x0005, 0xffff, 0x00a6, 0x00be, 0x00c7, + // Entry 2AC0 - 2AFF + 0x00d0, 0x00db, 0x00e4, 0x00f1, 0x00fa, 0x00ff, 0x014f, 0x0121, + 0x0139, 0x000d, 0x0003, 0xffff, 0x0224, 0x2042, 0x2045, 0x0218, + 0x0212, 0x028e, 0x2048, 0x2045, 0x0212, 0x2048, 0x2048, 0x0224, + 0x000d, 0x0005, 0xffff, 0x00a6, 0x00be, 0x00c7, 0x00d0, 0x00db, + 0x00e4, 0x00f1, 0x00fa, 0x00ff, 0x014f, 0x0121, 0x0139, 0x0003, + 0x0045, 0x0054, 0x0063, 0x000d, 0x0005, 0xffff, 0x00a6, 0x00be, + 0x00c7, 0x00d0, 0x00db, 0x00e4, 0x00f1, 0x00fa, 0x00ff, 0x014f, + 0x0121, 0x0139, 0x000d, 0x0003, 0xffff, 0x0224, 0x2042, 0x2045, + // Entry 2B00 - 2B3F + 0x0218, 0x0212, 0x028e, 0x2048, 0x2045, 0x0212, 0x2048, 0x2048, + 0x0224, 0x000d, 0x0005, 0xffff, 0x00a6, 0x00be, 0x00c7, 0x00d0, + 0x00db, 0x00e4, 0x00f1, 0x00fa, 0x00ff, 0x014f, 0x0121, 0x0139, + 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000b, 0x0007, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0013, 0x0004, 0x0021, 0x001b, 0x0018, 0x001e, + 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, + 0x053d, 0x0001, 0x0000, 0x0546, 0x0001, 0x0002, 0x0008, 0x0000, + // Entry 2B40 - 2B7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0001, + 0x000d, 0x0002, 0x0010, 0x0041, 0x0003, 0x0014, 0x0023, 0x0032, + 0x000d, 0x0005, 0xffff, 0x00a6, 0x00be, 0x00c7, 0x00d0, 0x00db, + 0x00e4, 0x00f1, 0x00fa, 0x00ff, 0x014f, 0x0121, 0x0139, 0x000d, + 0x0003, 0xffff, 0x0224, 0x2042, 0x2045, 0x0218, 0x0212, 0x028e, + 0x2048, 0x2045, 0x0212, 0x2048, 0x2048, 0x0224, 0x000d, 0x0005, + 0xffff, 0x00a6, 0x00be, 0x00c7, 0x00d0, 0x00db, 0x00e4, 0x00f1, + 0x00fa, 0x00ff, 0x014f, 0x0121, 0x0139, 0x0003, 0x0045, 0x0054, + // Entry 2B80 - 2BBF + 0x0063, 0x000d, 0x0005, 0xffff, 0x00a6, 0x00be, 0x00c7, 0x00d0, + 0x00db, 0x00e4, 0x00f1, 0x00fa, 0x00ff, 0x014f, 0x0121, 0x0139, + 0x000d, 0x0003, 0xffff, 0x0224, 0x2042, 0x2045, 0x0218, 0x0212, + 0x028e, 0x2048, 0x2045, 0x0212, 0x2048, 0x2048, 0x0224, 0x000d, + 0x0005, 0xffff, 0x00a6, 0x00be, 0x00c7, 0x00d0, 0x00db, 0x00e4, + 0x00f1, 0x00fa, 0x00ff, 0x014f, 0x0121, 0x0139, 0x0001, 0x0002, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000b, 0x0004, 0x0000, 0x0000, 0x0000, 0x0010, 0x0001, 0x0012, + // Entry 2BC0 - 2BFF + 0x0001, 0x0014, 0x000b, 0x0000, 0x0000, 0x0000, 0x0020, 0x0026, + 0x002c, 0x002f, 0x0000, 0x0023, 0x0029, 0x0032, 0x0001, 0x0003, + 0x0343, 0x0001, 0x0003, 0x0340, 0x0001, 0x0003, 0x034e, 0x0001, + 0x0003, 0x0359, 0x0001, 0x0003, 0x036b, 0x0001, 0x0003, 0x0376, + 0x0001, 0x0003, 0x021b, 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0007, 0x0013, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0078, 0x0002, 0x0016, + 0x0047, 0x0003, 0x001a, 0x0029, 0x0038, 0x000d, 0x0003, 0xffff, + // Entry 2C00 - 2C3F + 0x017f, 0x018a, 0x204b, 0x01a0, 0x2054, 0x01b4, 0x205b, 0x2068, + 0x206f, 0x207a, 0x2087, 0x2092, 0x000d, 0x0003, 0xffff, 0x0209, + 0x020c, 0x020f, 0x0212, 0x020f, 0x0218, 0x021b, 0x021e, 0x2042, + 0x0224, 0x0227, 0x022a, 0x000d, 0x0003, 0xffff, 0x017f, 0x018a, + 0x204b, 0x01a0, 0x2054, 0x01b4, 0x205b, 0x2068, 0x206f, 0x207a, + 0x2087, 0x2092, 0x0003, 0x004b, 0x005a, 0x0069, 0x000d, 0x0003, + 0xffff, 0x017f, 0x018a, 0x204b, 0x01a0, 0x2054, 0x01b4, 0x205b, + 0x2068, 0x206f, 0x207a, 0x2087, 0x2092, 0x000d, 0x0003, 0xffff, + // Entry 2C40 - 2C7F + 0x0209, 0x020c, 0x020f, 0x0212, 0x020f, 0x0218, 0x021b, 0x021e, + 0x2042, 0x0224, 0x0227, 0x022a, 0x000d, 0x0003, 0xffff, 0x017f, + 0x018a, 0x204b, 0x01a0, 0x2054, 0x01b4, 0x205b, 0x2068, 0x206f, + 0x207a, 0x2087, 0x2092, 0x0004, 0x0086, 0x0080, 0x007d, 0x0083, + 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, + 0x053d, 0x0001, 0x0000, 0x0546, 0x0001, 0x0002, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0001, + 0x000d, 0x0002, 0x0010, 0x0041, 0x0003, 0x0014, 0x0023, 0x0032, + // Entry 2C80 - 2CBF + 0x000d, 0x0003, 0xffff, 0x017f, 0x018a, 0x204b, 0x209d, 0x01ab, + 0x01b4, 0x01bf, 0x20a8, 0x20b1, 0x207a, 0x20bc, 0x20c9, 0x000d, + 0x0003, 0xffff, 0x0209, 0x020c, 0x020f, 0x20d4, 0x0215, 0x0218, + 0x021b, 0x021e, 0x2042, 0x0224, 0x0227, 0x022a, 0x000d, 0x0003, + 0xffff, 0x017f, 0x018a, 0x204b, 0x209d, 0x01ab, 0x01b4, 0x01bf, + 0x20a8, 0x20b1, 0x207a, 0x20bc, 0x20c9, 0x0003, 0x0045, 0x0054, + 0x0063, 0x000d, 0x0003, 0xffff, 0x017f, 0x018a, 0x204b, 0x209d, + 0x01ab, 0x01b4, 0x01bf, 0x20a8, 0x20b1, 0x207a, 0x20bc, 0x20c9, + // Entry 2CC0 - 2CFF + 0x000d, 0x0003, 0xffff, 0x0209, 0x020c, 0x020f, 0x20d4, 0x0215, + 0x0218, 0x021b, 0x021e, 0x2042, 0x0224, 0x0227, 0x022a, 0x000d, + 0x0003, 0xffff, 0x017f, 0x018a, 0x204b, 0x209d, 0x01ab, 0x01b4, + 0x01bf, 0x20a8, 0x20b1, 0x207a, 0x20bc, 0x20c9, 0x0001, 0x0002, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000b, 0x0001, 0x000d, 0x0002, 0x0010, 0x0041, 0x0003, 0x0014, + 0x0023, 0x0032, 0x000d, 0x0005, 0xffff, 0x00a6, 0x00be, 0x00c7, + 0x00d0, 0x00db, 0x00e4, 0x00f1, 0x00fa, 0x00ff, 0x014f, 0x0121, + // Entry 2D00 - 2D3F + 0x0139, 0x000d, 0x0003, 0xffff, 0x0224, 0x2042, 0x2045, 0x0218, + 0x0212, 0x028e, 0x2048, 0x2045, 0x0212, 0x2048, 0x2048, 0x0224, + 0x000d, 0x0005, 0xffff, 0x00a6, 0x00be, 0x00c7, 0x00d0, 0x00db, + 0x00e4, 0x00f1, 0x00fa, 0x00ff, 0x014f, 0x0121, 0x0139, 0x0003, + 0x0045, 0x0054, 0x0063, 0x000d, 0x0005, 0xffff, 0x00a6, 0x00be, + 0x00c7, 0x00d0, 0x00db, 0x00e4, 0x00f1, 0x00fa, 0x00ff, 0x014f, + 0x0121, 0x0139, 0x000d, 0x0003, 0xffff, 0x0224, 0x2042, 0x2045, + 0x0218, 0x0212, 0x028e, 0x2048, 0x2045, 0x0212, 0x2048, 0x2048, + // Entry 2D40 - 2D7F + 0x0224, 0x000d, 0x0005, 0xffff, 0x00a6, 0x00be, 0x00c7, 0x00d0, + 0x00db, 0x00e4, 0x00f1, 0x00fa, 0x00ff, 0x014f, 0x0121, 0x0139, + 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000b, 0x0004, 0x0000, 0x0000, 0x0000, 0x0010, + 0x0001, 0x0012, 0x0001, 0x0014, 0x000b, 0x0000, 0x0000, 0x0000, + 0x0020, 0x0026, 0x002c, 0x002f, 0x0000, 0x0023, 0x0029, 0x0032, + 0x0001, 0x0003, 0x0343, 0x0001, 0x0003, 0x0340, 0x0001, 0x0003, + 0x034e, 0x0001, 0x0003, 0x0359, 0x0001, 0x0003, 0x036b, 0x0001, + // Entry 2D80 - 2DBF + 0x0003, 0x0376, 0x0001, 0x0003, 0x021b, 0x0001, 0x0002, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, + 0x0001, 0x000d, 0x0002, 0x0010, 0x0041, 0x0003, 0x0014, 0x0023, + 0x0032, 0x000d, 0x0005, 0xffff, 0x00a6, 0x00be, 0x00c7, 0x00d0, + 0x00db, 0x00e4, 0x00f1, 0x00fa, 0x00ff, 0x014f, 0x0121, 0x0139, + 0x000d, 0x0003, 0xffff, 0x0224, 0x2042, 0x2045, 0x0218, 0x0212, + 0x028e, 0x2048, 0x2045, 0x0212, 0x2048, 0x2048, 0x0224, 0x000d, + 0x0005, 0xffff, 0x00a6, 0x00be, 0x00c7, 0x00d0, 0x00db, 0x00e4, + // Entry 2DC0 - 2DFF + 0x00f1, 0x00fa, 0x00ff, 0x014f, 0x0121, 0x0139, 0x0003, 0x0045, + 0x0054, 0x0063, 0x000d, 0x0005, 0xffff, 0x00a6, 0x00be, 0x00c7, + 0x00d0, 0x00db, 0x00e4, 0x00f1, 0x00fa, 0x00ff, 0x014f, 0x0121, + 0x0139, 0x000d, 0x0003, 0xffff, 0x0224, 0x2042, 0x2045, 0x0218, + 0x0212, 0x028e, 0x2048, 0x2045, 0x0212, 0x2048, 0x2048, 0x0224, + 0x000d, 0x0005, 0xffff, 0x00a6, 0x00be, 0x00c7, 0x00d0, 0x00db, + 0x00e4, 0x00f1, 0x00fa, 0x00ff, 0x014f, 0x0121, 0x0139, 0x0001, + 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 2E00 - 2E3F + 0x0000, 0x000b, 0x0001, 0x000d, 0x0002, 0x0010, 0x0041, 0x0003, + 0x0014, 0x0023, 0x0032, 0x000d, 0x0005, 0xffff, 0x0000, 0x000b, + 0x0165, 0x001f, 0x016e, 0x0031, 0x003a, 0x0047, 0x004e, 0x0175, + 0x0182, 0x0075, 0x000d, 0x0003, 0xffff, 0x029a, 0x020c, 0x020f, + 0x0212, 0x020f, 0x029a, 0x029a, 0x0212, 0x0221, 0x0212, 0x0218, + 0x022a, 0x000d, 0x0005, 0xffff, 0x0000, 0x000b, 0x0165, 0x001f, + 0x016e, 0x0031, 0x003a, 0x0047, 0x004e, 0x0175, 0x0182, 0x0075, + 0x0003, 0x0045, 0x0054, 0x0063, 0x000d, 0x0005, 0xffff, 0x0000, + // Entry 2E40 - 2E7F + 0x000b, 0x0165, 0x001f, 0x016e, 0x0031, 0x003a, 0x0047, 0x004e, + 0x0175, 0x0182, 0x0075, 0x000d, 0x0003, 0xffff, 0x029a, 0x020c, + 0x020f, 0x0212, 0x020f, 0x029a, 0x029a, 0x0212, 0x0221, 0x0212, + 0x0218, 0x022a, 0x000d, 0x0005, 0xffff, 0x0000, 0x000b, 0x0165, + 0x001f, 0x016e, 0x0031, 0x003a, 0x0047, 0x004e, 0x0175, 0x0182, + 0x0075, 0x0003, 0x0004, 0x01bb, 0x05ee, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0038, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, 0x0027, 0x0004, + // Entry 2E80 - 2EBF + 0x0024, 0x001e, 0x001b, 0x0021, 0x0001, 0x0000, 0x0489, 0x0001, + 0x0000, 0x049a, 0x0001, 0x0000, 0x04a5, 0x0001, 0x0000, 0x04af, + 0x0004, 0x0035, 0x002f, 0x002c, 0x0032, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0008, 0x0041, 0x00a6, 0x00fd, 0x0132, 0x0173, 0x0188, + 0x0199, 0x01aa, 0x0002, 0x0044, 0x0075, 0x0003, 0x0048, 0x0057, + 0x0066, 0x000d, 0x0005, 0xffff, 0x018f, 0x019c, 0x01af, 0x01bf, + 0x01d2, 0x01dc, 0x01e6, 0x01f6, 0x01fd, 0x0210, 0x0220, 0x022a, + // Entry 2EC0 - 2EFF + 0x000d, 0x0005, 0xffff, 0x0237, 0x023b, 0x023f, 0x0243, 0x023f, + 0x0237, 0x0237, 0x0247, 0x024b, 0x024f, 0x0253, 0x0257, 0x000d, + 0x0005, 0xffff, 0x025b, 0x0274, 0x01af, 0x01bf, 0x01d2, 0x01dc, + 0x01e6, 0x0293, 0x02a3, 0x02c2, 0x02d8, 0x02ee, 0x0003, 0x0079, + 0x0088, 0x0097, 0x000d, 0x0005, 0xffff, 0x018f, 0x019c, 0x01af, + 0x01bf, 0x01d2, 0x01dc, 0x01e6, 0x01f6, 0x01fd, 0x0210, 0x0220, + 0x022a, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, + 0x003b, 0x003d, 0x003f, 0x0041, 0x0043, 0x0045, 0x0048, 0x004b, + // Entry 2F00 - 2F3F + 0x000d, 0x0005, 0xffff, 0x025b, 0x0274, 0x01af, 0x01bf, 0x01d2, + 0x01dc, 0x01e6, 0x0293, 0x02a3, 0x02c2, 0x02d8, 0x02ee, 0x0002, + 0x00a9, 0x00d3, 0x0005, 0x00af, 0x00b8, 0x00ca, 0x0000, 0x00c1, + 0x0007, 0x0005, 0x0307, 0x0311, 0x031b, 0x032b, 0x0335, 0x033f, + 0x034f, 0x0007, 0x0005, 0x0359, 0x035d, 0x023f, 0x0361, 0x0361, + 0x0365, 0x0365, 0x0007, 0x0005, 0x0307, 0x0311, 0x031b, 0x032b, + 0x0335, 0x033f, 0x034f, 0x0007, 0x0005, 0x0369, 0x037c, 0x038f, + 0x03a8, 0x03bb, 0x03dd, 0x03f6, 0x0005, 0x00d9, 0x00e2, 0x00f4, + // Entry 2F40 - 2F7F + 0x0000, 0x00eb, 0x0007, 0x0005, 0x0307, 0x0311, 0x031b, 0x032b, + 0x0335, 0x033f, 0x034f, 0x0007, 0x0005, 0x0359, 0x035d, 0x023f, + 0x0361, 0x0361, 0x0365, 0x0365, 0x0007, 0x0005, 0x0307, 0x0311, + 0x031b, 0x032b, 0x0335, 0x033f, 0x034f, 0x0007, 0x0005, 0x0369, + 0x037c, 0x038f, 0x03a8, 0x03bb, 0x03dd, 0x03f6, 0x0002, 0x0100, + 0x0119, 0x0003, 0x0104, 0x010b, 0x0112, 0x0005, 0x0005, 0xffff, + 0x0409, 0x0411, 0x0419, 0x0421, 0x0005, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x0039, 0x0005, 0x0005, 0xffff, 0x0429, 0x0449, + // Entry 2F80 - 2FBF + 0x0472, 0x0495, 0x0003, 0x011d, 0x0124, 0x012b, 0x0005, 0x0005, + 0xffff, 0x0409, 0x0411, 0x0419, 0x0421, 0x0005, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x0039, 0x0005, 0x0005, 0xffff, 0x04b8, + 0x04de, 0x050d, 0x0536, 0x0002, 0x0135, 0x0154, 0x0003, 0x0139, + 0x0142, 0x014b, 0x0002, 0x013c, 0x013f, 0x0001, 0x0005, 0x055f, + 0x0001, 0x0005, 0x057b, 0x0002, 0x0145, 0x0148, 0x0001, 0x0005, + 0x055f, 0x0001, 0x0005, 0x057b, 0x0002, 0x014e, 0x0151, 0x0001, + 0x0005, 0x055f, 0x0001, 0x0005, 0x057b, 0x0003, 0x0158, 0x0161, + // Entry 2FC0 - 2FFF + 0x016a, 0x0002, 0x015b, 0x015e, 0x0001, 0x0005, 0x055f, 0x0001, + 0x0005, 0x057b, 0x0002, 0x0164, 0x0167, 0x0001, 0x0005, 0x055f, + 0x0001, 0x0005, 0x057b, 0x0002, 0x016d, 0x0170, 0x0001, 0x0005, + 0x055f, 0x0001, 0x0005, 0x057b, 0x0003, 0x017d, 0x0000, 0x0177, + 0x0001, 0x0179, 0x0002, 0x0005, 0x0591, 0x05b6, 0x0002, 0x0180, + 0x0184, 0x0002, 0x0005, 0x05d8, 0x05ed, 0x0002, 0x0005, 0xffff, + 0x05ff, 0x0004, 0x0196, 0x0190, 0x018d, 0x0193, 0x0001, 0x0005, + 0x0615, 0x0001, 0x0005, 0x0625, 0x0001, 0x0005, 0x062f, 0x0001, + // Entry 3000 - 303F + 0x0005, 0x0637, 0x0004, 0x01a7, 0x01a1, 0x019e, 0x01a4, 0x0001, + 0x0005, 0x063d, 0x0001, 0x0005, 0x064c, 0x0001, 0x0005, 0x0658, + 0x0001, 0x0005, 0x0662, 0x0004, 0x01b8, 0x01b2, 0x01af, 0x01b5, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0042, 0x01fe, 0x0203, 0x0208, + 0x020d, 0x0224, 0x0236, 0x0248, 0x025f, 0x0271, 0x0283, 0x029a, + 0x02ac, 0x02be, 0x02d9, 0x02ef, 0x0305, 0x030a, 0x030f, 0x0314, + 0x032d, 0x033f, 0x0351, 0x0356, 0x035b, 0x0360, 0x0365, 0x036a, + // Entry 3040 - 307F + 0x036f, 0x0374, 0x0379, 0x037e, 0x0392, 0x03a6, 0x03ba, 0x03ce, + 0x03e2, 0x03f6, 0x040a, 0x041e, 0x0432, 0x0446, 0x045a, 0x046e, + 0x0482, 0x0496, 0x04aa, 0x04be, 0x04d2, 0x04e6, 0x04fa, 0x050e, + 0x0522, 0x0527, 0x052c, 0x0531, 0x0547, 0x0559, 0x056b, 0x0581, + 0x0593, 0x05a5, 0x05bb, 0x05cd, 0x05df, 0x05e4, 0x05e9, 0x0001, + 0x0200, 0x0001, 0x0005, 0x066a, 0x0001, 0x0205, 0x0001, 0x0005, + 0x066a, 0x0001, 0x020a, 0x0001, 0x0005, 0x066a, 0x0003, 0x0211, + 0x0214, 0x0219, 0x0001, 0x0005, 0x0674, 0x0003, 0x0005, 0x067e, + // Entry 3080 - 30BF + 0x0695, 0x06a6, 0x0002, 0x021c, 0x0220, 0x0002, 0x0005, 0x06ba, + 0x06ba, 0x0002, 0x0005, 0x06cb, 0x06cb, 0x0003, 0x0228, 0x0000, + 0x022b, 0x0001, 0x0005, 0x0674, 0x0002, 0x022e, 0x0232, 0x0002, + 0x0005, 0x06ba, 0x06ba, 0x0002, 0x0005, 0x06cb, 0x06cb, 0x0003, + 0x023a, 0x0000, 0x023d, 0x0001, 0x0005, 0x0674, 0x0002, 0x0240, + 0x0244, 0x0002, 0x0005, 0x06ba, 0x06ba, 0x0002, 0x0005, 0x06cb, + 0x06cb, 0x0003, 0x024c, 0x024f, 0x0254, 0x0001, 0x0005, 0x06ef, + 0x0003, 0x0005, 0x0706, 0x072a, 0x0748, 0x0002, 0x0257, 0x025b, + // Entry 30C0 - 30FF + 0x0002, 0x0005, 0x0769, 0x0769, 0x0002, 0x0005, 0x0787, 0x0787, + 0x0003, 0x0263, 0x0000, 0x0266, 0x0001, 0x0005, 0x06ef, 0x0002, + 0x0269, 0x026d, 0x0002, 0x0005, 0x0769, 0x0769, 0x0002, 0x0005, + 0x0787, 0x0787, 0x0003, 0x0275, 0x0000, 0x0278, 0x0001, 0x0005, + 0x06ef, 0x0002, 0x027b, 0x027f, 0x0002, 0x0005, 0x0769, 0x0769, + 0x0002, 0x0005, 0x0787, 0x0787, 0x0003, 0x0287, 0x028a, 0x028f, + 0x0001, 0x0005, 0x07b5, 0x0003, 0x0005, 0x07bf, 0x07d6, 0x07e7, + 0x0002, 0x0292, 0x0296, 0x0002, 0x0005, 0x07fb, 0x07fb, 0x0002, + // Entry 3100 - 313F + 0x0005, 0x080c, 0x080c, 0x0003, 0x029e, 0x0000, 0x02a1, 0x0001, + 0x0005, 0x07b5, 0x0002, 0x02a4, 0x02a8, 0x0002, 0x0005, 0x07fb, + 0x07fb, 0x0002, 0x0005, 0x080c, 0x080c, 0x0003, 0x02b0, 0x0000, + 0x02b3, 0x0001, 0x0005, 0x07b5, 0x0002, 0x02b6, 0x02ba, 0x0002, + 0x0005, 0x07fb, 0x07fb, 0x0002, 0x0005, 0x080c, 0x080c, 0x0004, + 0x02c3, 0x02c6, 0x02cb, 0x02d6, 0x0001, 0x0005, 0x082d, 0x0003, + 0x0005, 0x0840, 0x0860, 0x087a, 0x0002, 0x02ce, 0x02d2, 0x0002, + 0x0005, 0x0897, 0x0897, 0x0002, 0x0005, 0x08b1, 0x08b1, 0x0001, + // Entry 3140 - 317F + 0x0005, 0x08db, 0x0004, 0x02de, 0x0000, 0x02e1, 0x02ec, 0x0001, + 0x0005, 0x082d, 0x0002, 0x02e4, 0x02e8, 0x0002, 0x0005, 0x0897, + 0x0897, 0x0002, 0x0005, 0x08b1, 0x08b1, 0x0001, 0x0005, 0x08db, + 0x0004, 0x02f4, 0x0000, 0x02f7, 0x0302, 0x0001, 0x0005, 0x082d, + 0x0002, 0x02fa, 0x02fe, 0x0002, 0x0005, 0x0897, 0x0897, 0x0002, + 0x0005, 0x08b1, 0x08b1, 0x0001, 0x0005, 0x08db, 0x0001, 0x0307, + 0x0001, 0x0005, 0x08f5, 0x0001, 0x030c, 0x0001, 0x0005, 0x08f5, + 0x0001, 0x0311, 0x0001, 0x0005, 0x08f5, 0x0003, 0x0318, 0x031b, + // Entry 3180 - 31BF + 0x0322, 0x0001, 0x0005, 0x0915, 0x0005, 0x0005, 0x092c, 0x0939, + 0x0943, 0x091f, 0x0953, 0x0002, 0x0325, 0x0329, 0x0002, 0x0005, + 0x0966, 0x0966, 0x0002, 0x0005, 0x0977, 0x0977, 0x0003, 0x0331, + 0x0000, 0x0334, 0x0001, 0x0005, 0x0915, 0x0002, 0x0337, 0x033b, + 0x0002, 0x0005, 0x0966, 0x0966, 0x0002, 0x0005, 0x0977, 0x0977, + 0x0003, 0x0343, 0x0000, 0x0346, 0x0001, 0x0005, 0x0915, 0x0002, + 0x0349, 0x034d, 0x0002, 0x0005, 0x0966, 0x0966, 0x0002, 0x0005, + 0x0977, 0x0977, 0x0001, 0x0353, 0x0001, 0x0005, 0x0998, 0x0001, + // Entry 31C0 - 31FF + 0x0358, 0x0001, 0x0005, 0x0998, 0x0001, 0x035d, 0x0001, 0x0005, + 0x0998, 0x0001, 0x0362, 0x0001, 0x0005, 0x09af, 0x0001, 0x0367, + 0x0001, 0x0005, 0x09af, 0x0001, 0x036c, 0x0001, 0x0005, 0x09af, + 0x0001, 0x0371, 0x0001, 0x0005, 0x09cf, 0x0001, 0x0376, 0x0001, + 0x0005, 0x09cf, 0x0001, 0x037b, 0x0001, 0x0005, 0x09cf, 0x0003, + 0x0000, 0x0382, 0x0387, 0x0003, 0x0005, 0x09fc, 0x0a1c, 0x0a36, + 0x0002, 0x038a, 0x038e, 0x0002, 0x0005, 0x0a53, 0x0a53, 0x0002, + 0x0005, 0x0a6d, 0x0a6d, 0x0003, 0x0000, 0x0396, 0x039b, 0x0003, + // Entry 3200 - 323F + 0x0005, 0x09fc, 0x0a1c, 0x0a36, 0x0002, 0x039e, 0x03a2, 0x0002, + 0x0005, 0x0a53, 0x0a53, 0x0002, 0x0005, 0x0a6d, 0x0a6d, 0x0003, + 0x0000, 0x03aa, 0x03af, 0x0003, 0x0005, 0x09fc, 0x0a1c, 0x0a36, + 0x0002, 0x03b2, 0x03b6, 0x0002, 0x0005, 0x0a53, 0x0a53, 0x0002, + 0x0005, 0x0a6d, 0x0a6d, 0x0003, 0x0000, 0x03be, 0x03c3, 0x0003, + 0x0005, 0x0a9a, 0x0aba, 0x0ad4, 0x0002, 0x03c6, 0x03ca, 0x0002, + 0x0005, 0x0af1, 0x0af1, 0x0002, 0x0005, 0x0b0b, 0x0b0b, 0x0003, + 0x0000, 0x03d2, 0x03d7, 0x0003, 0x0005, 0x0a9a, 0x0aba, 0x0ad4, + // Entry 3240 - 327F + 0x0002, 0x03da, 0x03de, 0x0002, 0x0005, 0x0af1, 0x0af1, 0x0002, + 0x0005, 0x0b0b, 0x0b0b, 0x0003, 0x0000, 0x03e6, 0x03eb, 0x0003, + 0x0005, 0x0b38, 0x0b4f, 0x0b60, 0x0002, 0x03ee, 0x03f2, 0x0002, + 0x0005, 0x0b74, 0x0b74, 0x0002, 0x0005, 0x0b85, 0x0b85, 0x0003, + 0x0000, 0x03fa, 0x03ff, 0x0003, 0x0005, 0x0ba9, 0x0bcf, 0x0bef, + 0x0002, 0x0402, 0x0406, 0x0002, 0x0005, 0x0c12, 0x0c12, 0x0002, + 0x0005, 0x0c32, 0x0c32, 0x0003, 0x0000, 0x040e, 0x0413, 0x0003, + 0x0005, 0x0c65, 0x0c82, 0x0c99, 0x0002, 0x0416, 0x041a, 0x0002, + // Entry 3280 - 32BF + 0x0005, 0x0cb3, 0x0cb3, 0x0002, 0x0005, 0x0cca, 0x0cca, 0x0003, + 0x0000, 0x0422, 0x0427, 0x0003, 0x0005, 0x0c65, 0x0c82, 0x0c99, + 0x0002, 0x042a, 0x042e, 0x0002, 0x0005, 0x0cb3, 0x0cb3, 0x0002, + 0x0005, 0x0cca, 0x0cca, 0x0003, 0x0000, 0x0436, 0x043b, 0x0003, + 0x0005, 0x0cf4, 0x0d14, 0x0d2e, 0x0002, 0x043e, 0x0442, 0x0002, + 0x0005, 0x0d4b, 0x0d4b, 0x0002, 0x0005, 0x0d65, 0x0d65, 0x0003, + 0x0000, 0x044a, 0x044f, 0x0003, 0x0005, 0x0d92, 0x0da9, 0x0dba, + 0x0002, 0x0452, 0x0456, 0x0002, 0x0005, 0x0dce, 0x0dce, 0x0002, + // Entry 32C0 - 32FF + 0x0005, 0x0ddf, 0x0ddf, 0x0003, 0x0000, 0x045e, 0x0463, 0x0003, + 0x0005, 0x0d92, 0x0da9, 0x0dba, 0x0002, 0x0466, 0x046a, 0x0002, + 0x0005, 0x0dce, 0x0dce, 0x0002, 0x0005, 0x0ddf, 0x0ddf, 0x0003, + 0x0000, 0x0472, 0x0477, 0x0003, 0x0005, 0x0e03, 0x0e32, 0x0e5b, + 0x0002, 0x047a, 0x047e, 0x0002, 0x0005, 0x0e87, 0x0e87, 0x0002, + 0x0005, 0x0eb0, 0x0eb0, 0x0003, 0x0000, 0x0486, 0x048b, 0x0003, + 0x0005, 0x0eec, 0x0f12, 0x0f32, 0x0002, 0x048e, 0x0492, 0x0002, + 0x0005, 0x0f55, 0x0f55, 0x0002, 0x0005, 0x0f7b, 0x0f7b, 0x0003, + // Entry 3300 - 333F + 0x0000, 0x049a, 0x049f, 0x0003, 0x0005, 0x0eec, 0x0f12, 0x0f32, + 0x0002, 0x04a2, 0x04a6, 0x0002, 0x0005, 0x0f55, 0x0f55, 0x0002, + 0x0005, 0x0f7b, 0x0f7b, 0x0003, 0x0000, 0x04ae, 0x04b3, 0x0003, + 0x0005, 0x0fae, 0x0fd4, 0x0ff4, 0x0002, 0x04b6, 0x04ba, 0x0002, + 0x0005, 0x1017, 0x1017, 0x0002, 0x0005, 0x1037, 0x1037, 0x0003, + 0x0000, 0x04c2, 0x04c7, 0x0003, 0x0005, 0x106a, 0x1087, 0x109e, + 0x0002, 0x04ca, 0x04ce, 0x0002, 0x0005, 0x10b8, 0x10b8, 0x0002, + 0x0005, 0x10cf, 0x10cf, 0x0003, 0x0000, 0x04d6, 0x04db, 0x0003, + // Entry 3340 - 337F + 0x0005, 0x106a, 0x1087, 0x109e, 0x0002, 0x04de, 0x04e2, 0x0002, + 0x0005, 0x10b8, 0x10b8, 0x0002, 0x0005, 0x10cf, 0x10cf, 0x0003, + 0x0000, 0x04ea, 0x04ef, 0x0003, 0x0005, 0x10f9, 0x1119, 0x1133, + 0x0002, 0x04f2, 0x04f6, 0x0002, 0x0005, 0x1150, 0x1150, 0x0002, + 0x0005, 0x116a, 0x116a, 0x0003, 0x0000, 0x04fe, 0x0503, 0x0003, + 0x0005, 0x1197, 0x11ae, 0x11bf, 0x0002, 0x0506, 0x050a, 0x0002, + 0x0005, 0x11d3, 0x11d3, 0x0002, 0x0005, 0x11ea, 0x11ea, 0x0003, + 0x0000, 0x0512, 0x0517, 0x0003, 0x0005, 0x1197, 0x11ae, 0x11bf, + // Entry 3380 - 33BF + 0x0002, 0x051a, 0x051e, 0x0002, 0x0005, 0x11d3, 0x11d3, 0x0002, + 0x0005, 0x11ea, 0x11ea, 0x0001, 0x0524, 0x0001, 0x0005, 0x120e, + 0x0001, 0x0529, 0x0001, 0x0005, 0x120e, 0x0001, 0x052e, 0x0001, + 0x0005, 0x120e, 0x0003, 0x0535, 0x0538, 0x053c, 0x0001, 0x0005, + 0x1240, 0x0002, 0x0005, 0xffff, 0x1250, 0x0002, 0x053f, 0x0543, + 0x0002, 0x0005, 0x1270, 0x1270, 0x0002, 0x0005, 0x1287, 0x1287, + 0x0003, 0x054b, 0x0000, 0x054e, 0x0001, 0x0005, 0x1240, 0x0002, + 0x0551, 0x0555, 0x0002, 0x0005, 0x1270, 0x1270, 0x0002, 0x0005, + // Entry 33C0 - 33FF + 0x1287, 0x1287, 0x0003, 0x055d, 0x0000, 0x0560, 0x0001, 0x0005, + 0x1240, 0x0002, 0x0563, 0x0567, 0x0002, 0x0005, 0x1270, 0x1270, + 0x0002, 0x0005, 0x1287, 0x1287, 0x0003, 0x056f, 0x0572, 0x0576, + 0x0001, 0x0005, 0x12ae, 0x0002, 0x0005, 0xffff, 0x12be, 0x0002, + 0x0579, 0x057d, 0x0002, 0x0005, 0x12de, 0x12de, 0x0002, 0x0005, + 0x12f5, 0x12f5, 0x0003, 0x0585, 0x0000, 0x0588, 0x0001, 0x0005, + 0x12ae, 0x0002, 0x058b, 0x058f, 0x0002, 0x0005, 0x12de, 0x12de, + 0x0002, 0x0005, 0x12f5, 0x12f5, 0x0003, 0x0597, 0x0000, 0x059a, + // Entry 3400 - 343F + 0x0001, 0x0005, 0x12ae, 0x0002, 0x059d, 0x05a1, 0x0002, 0x0005, + 0x12de, 0x12de, 0x0002, 0x0005, 0x12f5, 0x12f5, 0x0003, 0x05a9, + 0x05ac, 0x05b0, 0x0001, 0x0005, 0x131c, 0x0002, 0x0005, 0xffff, + 0x1332, 0x0002, 0x05b3, 0x05b7, 0x0002, 0x0005, 0x1345, 0x1345, + 0x0002, 0x0005, 0x1362, 0x1362, 0x0003, 0x05bf, 0x0000, 0x05c2, + 0x0001, 0x0005, 0x131c, 0x0002, 0x05c5, 0x05c9, 0x0002, 0x0005, + 0x1345, 0x1345, 0x0002, 0x0005, 0x1362, 0x1362, 0x0003, 0x05d1, + 0x0000, 0x05d4, 0x0001, 0x0005, 0x131c, 0x0002, 0x05d7, 0x05db, + // Entry 3440 - 347F + 0x0002, 0x0005, 0x1345, 0x1345, 0x0002, 0x0005, 0x1362, 0x1362, + 0x0001, 0x05e1, 0x0001, 0x0005, 0x138f, 0x0001, 0x05e6, 0x0001, + 0x0005, 0x138f, 0x0001, 0x05eb, 0x0001, 0x0005, 0x138f, 0x0004, + 0x05f3, 0x05f8, 0x05fd, 0x060c, 0x0003, 0x0000, 0x1dc7, 0x1dd5, + 0x1ddc, 0x0003, 0x0000, 0x1de0, 0x1de4, 0x1ded, 0x0002, 0x0000, + 0x0600, 0x0003, 0x0000, 0x0607, 0x0604, 0x0001, 0x0005, 0x13a5, + 0x0003, 0x0005, 0xffff, 0x13e4, 0x142c, 0x0002, 0x07d5, 0x060f, + 0x0003, 0x06a9, 0x073f, 0x0613, 0x0094, 0x0005, 0x1453, 0x1482, + // Entry 3480 - 34BF + 0x14b2, 0x14e5, 0x155b, 0xffff, 0x1619, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1699, 0x1734, 0x17ba, 0x1889, 0x1986, 0xffff, + 0x1a7c, 0x1bd5, 0x1d38, 0x1e5d, 0x1f72, 0x202b, 0x209f, 0x2138, + 0x2155, 0x21aa, 0x2228, 0x2294, 0x2338, 0x23a3, 0x2441, 0x24d9, + 0x256e, 0x2607, 0x2649, 0x26ae, 0x2756, 0xffff, 0x2819, 0x2836, + 0x287b, 0x28d8, 0x2958, 0x29c0, 0x2abb, 0x2b56, 0x2bcf, 0x2cb8, + 0x2da0, 0x2e21, 0x2e54, 0x2eb3, 0x2edc, 0x2f25, 0x2fbe, 0x3003, + 0xffff, 0xffff, 0x3023, 0x3074, 0xffff, 0x30b1, 0x3149, 0x31ca, + // Entry 34C0 - 34FF + 0x31ed, 0x321d, 0x3246, 0x3285, 0x32d0, 0x333e, 0x33dc, 0x34a4, + 0x3551, 0xffff, 0x35d3, 0x360f, 0x3671, 0x36f2, 0x3750, 0xffff, + 0x37f8, 0x3858, 0x38ea, 0x3958, 0x39d9, 0x3a08, 0x3a34, 0x3a5a, + 0x3ab2, 0x3b0f, 0xffff, 0xffff, 0x3b52, 0x3bf0, 0x3c77, 0x3ca0, + 0x3cbd, 0x3d19, 0x3e16, 0xffff, 0x3eb5, 0x3ed5, 0x3f41, 0x402b, + 0x40ee, 0x4170, 0x420f, 0x422c, 0x428c, 0x4312, 0x439b, 0x4434, + 0xffff, 0x4476, 0x449f, 0x44b9, 0x44e2, 0x450e, 0x4551, 0xffff, + 0x45e0, 0x4661, 0x4681, 0x46d2, 0x470e, 0x4747, 0x476a, 0x477d, + // Entry 3500 - 353F + 0x47ba, 0x483c, 0x486b, 0x48ae, 0x4938, 0x498a, 0x4a1a, 0x4a5d, + 0x4af2, 0x4b9f, 0x4c3e, 0x4c9c, 0x4d5e, 0x4de2, 0x4e05, 0x4e3e, + 0x4e8d, 0x4f1b, 0x0094, 0x0005, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1525, 0xffff, 0x15fc, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1679, 0x1714, 0x178b, 0x1838, 0x195a, 0xffff, 0x1a2b, 0x1b62, + 0x1cf6, 0x1e09, 0x1f46, 0x2017, 0x2079, 0xffff, 0xffff, 0x217b, + 0xffff, 0x226a, 0xffff, 0x2380, 0x2427, 0x24c2, 0x2545, 0xffff, + 0xffff, 0x2685, 0x2720, 0xffff, 0xffff, 0xffff, 0xffff, 0x28a8, + // Entry 3540 - 357F + 0xffff, 0x297b, 0x2a85, 0xffff, 0x2b96, 0x2c70, 0x2d86, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2eff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x3097, 0x3132, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x3324, 0x33b0, 0x347b, 0x3534, 0xffff, + 0xffff, 0xffff, 0x364b, 0xffff, 0x370f, 0xffff, 0xffff, 0x3831, + 0xffff, 0x392f, 0xffff, 0xffff, 0xffff, 0xffff, 0x3a9c, 0xffff, + 0xffff, 0xffff, 0x3b29, 0x3bd3, 0xffff, 0xffff, 0xffff, 0x3cda, + 0x3de4, 0xffff, 0xffff, 0xffff, 0x3f02, 0x3ff9, 0x40dc, 0x4147, + // Entry 3580 - 35BF + 0xffff, 0xffff, 0x4266, 0x42f8, 0x4375, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x452e, 0xffff, 0x45bd, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x479d, 0xffff, + 0xffff, 0x488e, 0xffff, 0x4952, 0xffff, 0x4a3a, 0x4ac3, 0x4b76, + 0xffff, 0x4c6d, 0x4d35, 0xffff, 0xffff, 0xffff, 0x4e78, 0x4edd, + 0x0094, 0x0005, 0xffff, 0xffff, 0xffff, 0xffff, 0x159e, 0xffff, + 0x1640, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x16e1, 0x175e, + 0x17f3, 0x18e4, 0x19da, 0xffff, 0x1af8, 0x1c70, 0x1dae, 0x1edc, + // Entry 35C0 - 35FF + 0x1fc6, 0x2049, 0x20ed, 0xffff, 0xffff, 0x21e3, 0xffff, 0x22e9, + 0xffff, 0x23ee, 0x2483, 0x2518, 0x25bc, 0xffff, 0xffff, 0x26e1, + 0x27b4, 0xffff, 0xffff, 0xffff, 0xffff, 0x2912, 0xffff, 0x2a2d, + 0x2afb, 0xffff, 0x2c12, 0x2d19, 0x2de2, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2f73, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x30f3, 0x318b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x3380, 0x342d, 0x34f5, 0x3596, 0xffff, 0xffff, 0xffff, + 0x36bf, 0xffff, 0x3795, 0xffff, 0xffff, 0x38a7, 0xffff, 0x398b, + // Entry 3600 - 363F + 0xffff, 0xffff, 0xffff, 0xffff, 0x3ad3, 0xffff, 0xffff, 0xffff, + 0x3b85, 0x3c35, 0xffff, 0xffff, 0xffff, 0x3d80, 0x3e70, 0xffff, + 0xffff, 0xffff, 0x3f97, 0x4085, 0x4110, 0x41c1, 0xffff, 0xffff, + 0x42bc, 0x4336, 0x43e9, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x457e, 0xffff, 0x462b, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x47ff, 0xffff, 0xffff, 0x48f6, + 0xffff, 0x49cc, 0xffff, 0x4a8a, 0x4b2b, 0x4bf0, 0xffff, 0x4cf6, + 0x4d94, 0xffff, 0xffff, 0xffff, 0x4eac, 0x4f81, 0x0003, 0x0000, + // Entry 3640 - 367F + 0x0000, 0x07d9, 0x0042, 0x0006, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 3680 - 36BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0002, 0x0003, + 0x00e9, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000c, 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0015, 0x0000, 0x0000, 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, + 0x0001, 0x0006, 0x000d, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, + 0x001b, 0x0001, 0x0002, 0x0587, 0x0008, 0x002f, 0x0066, 0x008b, + 0x009f, 0x00b7, 0x00c7, 0x00d8, 0x0000, 0x0002, 0x0032, 0x0054, + 0x0003, 0x0036, 0x0000, 0x0045, 0x000d, 0x0006, 0xffff, 0x001e, + // Entry 36C0 - 36FF + 0x0022, 0x0026, 0x002a, 0x002e, 0x0032, 0x0036, 0x003a, 0x003e, + 0x0042, 0x0046, 0x004a, 0x000d, 0x0006, 0xffff, 0x004e, 0x0056, + 0x005f, 0x0065, 0x002e, 0x006c, 0x0071, 0x0077, 0x007e, 0x0087, + 0x008e, 0x0096, 0x0002, 0x0000, 0x0057, 0x000d, 0x0000, 0xffff, + 0x1e5d, 0x2047, 0x2049, 0x1e5f, 0x2049, 0x1e5d, 0x1e5d, 0x1e5f, + 0x04d9, 0x1e61, 0x1e63, 0x204b, 0x0002, 0x0069, 0x007f, 0x0003, + 0x006d, 0x0000, 0x0076, 0x0007, 0x0006, 0x009e, 0x00a2, 0x00a6, + 0x00aa, 0x00ae, 0x00b2, 0x00b6, 0x0007, 0x0006, 0x00ba, 0x00c3, + // Entry 3700 - 373F + 0x00cc, 0x00d4, 0x00dd, 0x00e6, 0x00ed, 0x0002, 0x0000, 0x0082, + 0x0007, 0x0000, 0x1e5d, 0x1e5d, 0x1e5d, 0x1e5d, 0x1e5f, 0x204d, + 0x1e5d, 0x0001, 0x008d, 0x0003, 0x0091, 0x0000, 0x0098, 0x0005, + 0x0006, 0xffff, 0x00f6, 0x00f9, 0x00fc, 0x00ff, 0x0005, 0x0006, + 0xffff, 0x0102, 0x0109, 0x0110, 0x0117, 0x0001, 0x00a1, 0x0003, + 0x00a5, 0x0000, 0x00ae, 0x0002, 0x00a8, 0x00ab, 0x0001, 0x0006, + 0x011e, 0x0001, 0x0006, 0x0128, 0x0002, 0x00b1, 0x00b4, 0x0001, + 0x0006, 0x011e, 0x0001, 0x0006, 0x0128, 0x0003, 0x00c1, 0x0000, + // Entry 3740 - 377F + 0x00bb, 0x0001, 0x00bd, 0x0002, 0x0006, 0x0131, 0x0143, 0x0001, + 0x00c3, 0x0002, 0x0006, 0x0155, 0x0158, 0x0004, 0x00d5, 0x00cf, + 0x00cc, 0x00d2, 0x0001, 0x0006, 0x015b, 0x0001, 0x0002, 0x0033, + 0x0001, 0x0002, 0x003c, 0x0001, 0x0002, 0x08e8, 0x0004, 0x00e6, + 0x00e0, 0x00dd, 0x00e3, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, + 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0040, + 0x012a, 0x0000, 0x0000, 0x012f, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0134, 0x0000, 0x0000, 0x0139, 0x0000, 0x0000, 0x0000, + // Entry 3780 - 37BF + 0x0000, 0x0000, 0x013e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0149, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x014e, 0x0000, 0x0153, 0x0000, + 0x0000, 0x0158, 0x0000, 0x0000, 0x015d, 0x0000, 0x0000, 0x0162, + 0x0001, 0x012c, 0x0001, 0x0006, 0x016a, 0x0001, 0x0131, 0x0001, + 0x0006, 0x016f, 0x0001, 0x0136, 0x0001, 0x0006, 0x0175, 0x0001, + // Entry 37C0 - 37FF + 0x013b, 0x0001, 0x0006, 0x017b, 0x0002, 0x0141, 0x0144, 0x0001, + 0x0006, 0x0182, 0x0003, 0x0006, 0x0188, 0x018e, 0x0193, 0x0001, + 0x014b, 0x0001, 0x0006, 0x0198, 0x0001, 0x0150, 0x0001, 0x0006, + 0x01a8, 0x0001, 0x0155, 0x0001, 0x0006, 0x01b7, 0x0001, 0x015a, + 0x0001, 0x0006, 0x01bc, 0x0001, 0x015f, 0x0001, 0x0006, 0x01c3, + 0x0001, 0x0164, 0x0001, 0x0006, 0x01cc, 0x0003, 0x0004, 0x084f, + 0x0c79, 0x0012, 0x0017, 0x0055, 0x0000, 0x01e2, 0x0213, 0x0000, + 0x029d, 0x02c8, 0x0450, 0x047b, 0x051e, 0x0000, 0x0000, 0x0000, + // Entry 3800 - 383F + 0x0000, 0x05c1, 0x0805, 0x080e, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0020, 0x0033, 0x0000, 0x0044, 0x0003, 0x0029, 0x002e, + 0x0024, 0x0001, 0x0026, 0x0001, 0x0006, 0x01d9, 0x0001, 0x002b, + 0x0001, 0x0006, 0x01e5, 0x0001, 0x0030, 0x0001, 0x0006, 0x01e5, + 0x0004, 0x0041, 0x003b, 0x0038, 0x003e, 0x0001, 0x0006, 0x01e8, + 0x0001, 0x0006, 0x01ff, 0x0001, 0x0002, 0x001b, 0x0001, 0x0006, + 0x020f, 0x0004, 0x0052, 0x004c, 0x0049, 0x004f, 0x0001, 0x0006, + 0x021c, 0x0001, 0x0006, 0x021c, 0x0001, 0x0006, 0x022e, 0x0001, + // Entry 3840 - 387F + 0x0006, 0x022e, 0x000a, 0x0060, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x00b6, 0x00ca, 0x0002, 0x0063, 0x0094, + 0x0003, 0x0067, 0x0076, 0x0085, 0x000d, 0x0006, 0xffff, 0x0237, + 0x023d, 0x0243, 0x0249, 0x024f, 0x0255, 0x025b, 0x0261, 0x0267, + 0x026d, 0x0274, 0x027b, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x0039, 0x003b, 0x003d, 0x003f, 0x0041, 0x0043, 0x0045, + 0x0048, 0x004b, 0x000d, 0x0006, 0xffff, 0x0237, 0x023d, 0x0243, + 0x0249, 0x024f, 0x0255, 0x025b, 0x0261, 0x0267, 0x026d, 0x0274, + // Entry 3880 - 38BF + 0x027b, 0x0003, 0x0000, 0x0098, 0x00a7, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x0039, 0x003b, 0x003d, 0x003f, 0x0041, + 0x0043, 0x0045, 0x0048, 0x004b, 0x000d, 0x0006, 0xffff, 0x0282, + 0x0288, 0x028e, 0x0294, 0x029a, 0x02a0, 0x02a6, 0x02ac, 0x02b2, + 0x02b8, 0x02bf, 0x02c6, 0x0003, 0x00ba, 0x00c5, 0x00bf, 0x0003, + 0x0000, 0x004e, 0x0055, 0x204f, 0x0004, 0x0006, 0xffff, 0xffff, + 0xffff, 0x02cd, 0x0003, 0x0000, 0x004e, 0x0055, 0x204f, 0x0006, + 0x00d1, 0x0104, 0x0000, 0x0149, 0x016a, 0x01af, 0x0001, 0x00d3, + // Entry 38C0 - 38FF + 0x0003, 0x00d7, 0x00e6, 0x00f5, 0x000d, 0x0006, 0xffff, 0x02d5, + 0x02da, 0x02df, 0x02e5, 0x02ec, 0x02f4, 0x02fc, 0x0304, 0x030a, + 0x030f, 0x0315, 0x031b, 0x000d, 0x0006, 0xffff, 0x02d5, 0x02da, + 0x02df, 0x02e5, 0x02ec, 0x02f4, 0x02fc, 0x0304, 0x030a, 0x030f, + 0x0315, 0x031b, 0x000d, 0x0006, 0xffff, 0x02d5, 0x02da, 0x02df, + 0x02e5, 0x02ec, 0x02f4, 0x02fc, 0x0304, 0x030a, 0x030f, 0x0315, + 0x031b, 0x0001, 0x0106, 0x0003, 0x0000, 0x0000, 0x010a, 0x003d, + 0x0006, 0xffff, 0x0321, 0x0335, 0x0348, 0x035b, 0x036e, 0x0385, + // Entry 3900 - 393F + 0x039b, 0x03b1, 0x03c4, 0x03d7, 0x03ea, 0x03ff, 0x0413, 0x0425, + 0x0436, 0x044b, 0x0460, 0x0476, 0x048b, 0x04a1, 0x04b4, 0x04c8, + 0x04dc, 0x04ef, 0x0501, 0x0515, 0x0528, 0x053c, 0x0550, 0x0566, + 0x057b, 0x0592, 0x05a6, 0x05b8, 0x05ca, 0x05df, 0x05f3, 0x0606, + 0x0618, 0x062c, 0x0640, 0x0657, 0x066d, 0x0682, 0x0694, 0x06a8, + 0x06bc, 0x06d0, 0x06e3, 0x06f6, 0x0708, 0x071d, 0x0732, 0x0747, + 0x075b, 0x0772, 0x0786, 0x0799, 0x07ac, 0x07c0, 0x0001, 0x014b, + 0x0003, 0x0000, 0x0000, 0x014f, 0x0019, 0x0006, 0xffff, 0x07d3, + // Entry 3940 - 397F + 0x07ea, 0x07f9, 0x0812, 0x082a, 0x083c, 0x084d, 0x0861, 0x0870, + 0x0881, 0x0894, 0x08a3, 0x08ae, 0x08c3, 0x08d3, 0x08e1, 0x08f7, + 0x0904, 0x0916, 0x092c, 0x093b, 0x0946, 0x095c, 0x096b, 0x0001, + 0x016c, 0x0003, 0x0000, 0x0000, 0x0170, 0x003d, 0x0006, 0xffff, + 0x0321, 0x0335, 0x0348, 0x035b, 0x036e, 0x0385, 0x039b, 0x03b1, + 0x03c4, 0x03d7, 0x03ea, 0x03ff, 0x0413, 0x0425, 0x0436, 0x044b, + 0x0460, 0x0476, 0x048b, 0x04a1, 0x04b4, 0x04c8, 0x04dc, 0x04ef, + 0x0501, 0x0515, 0x0528, 0x053c, 0x0550, 0x0566, 0x057b, 0x0592, + // Entry 3980 - 39BF + 0x05a6, 0x05b8, 0x05ca, 0x05df, 0x05f3, 0x0606, 0x0618, 0x062c, + 0x0640, 0x0657, 0x066d, 0x0682, 0x0694, 0x06a8, 0x06bc, 0x06d0, + 0x06e3, 0x06f6, 0x0708, 0x071d, 0x0732, 0x0747, 0x075b, 0x0772, + 0x0786, 0x0799, 0x07ac, 0x07c0, 0x0001, 0x01b1, 0x0003, 0x01b5, + 0x01c4, 0x01d3, 0x000d, 0x0006, 0xffff, 0x02d5, 0x02da, 0x02df, + 0x02e5, 0x02ec, 0x02f4, 0x02fc, 0x0304, 0x030a, 0x030f, 0x0315, + 0x031b, 0x000d, 0x0006, 0xffff, 0x0976, 0x02da, 0x097a, 0x097e, + 0x0982, 0x0986, 0x098a, 0x098e, 0x0992, 0x0996, 0x099a, 0x099e, + // Entry 39C0 - 39FF + 0x000d, 0x0006, 0xffff, 0x09a2, 0x09a7, 0x09ac, 0x09b2, 0x09b9, + 0x09c1, 0x09c9, 0x09d1, 0x09d7, 0x09dc, 0x09e2, 0x09e8, 0x000a, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x01ed, 0x0001, 0x01ef, 0x0001, 0x01f1, 0x0003, 0x01f5, + 0x0000, 0x0204, 0x000d, 0x0006, 0xffff, 0x02d5, 0x02da, 0x02df, + 0x02e5, 0x02ec, 0x02f4, 0x02fc, 0x0304, 0x030a, 0x030f, 0x0315, + 0x031b, 0x000d, 0x0006, 0xffff, 0x02d5, 0x02da, 0x02df, 0x02e5, + 0x02ec, 0x02f4, 0x02fc, 0x0304, 0x030a, 0x030f, 0x0315, 0x031b, + // Entry 3A00 - 3A3F + 0x0008, 0x021c, 0x0000, 0x0000, 0x0000, 0x0287, 0x0000, 0x0000, + 0x9006, 0x0002, 0x021f, 0x0253, 0x0003, 0x0223, 0x0233, 0x0243, + 0x000e, 0x0006, 0xffff, 0x09ee, 0x09f2, 0x09f6, 0x09fa, 0x09fe, + 0x0a02, 0x0a06, 0x0a0a, 0x0a0e, 0x0a12, 0x0a16, 0x0a1a, 0x0a1e, + 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x003b, + 0x003d, 0x003f, 0x0041, 0x0043, 0x0045, 0x0048, 0x004b, 0x0422, + 0x000e, 0x0006, 0xffff, 0x0a22, 0x0a2e, 0x0a38, 0x0a42, 0x0a4c, + 0x0a53, 0x0a5e, 0x0a69, 0x0a73, 0x0a7d, 0x0a85, 0x0a8f, 0x0a9a, + // Entry 3A40 - 3A7F + 0x0003, 0x0257, 0x0267, 0x0277, 0x000e, 0x0006, 0xffff, 0x09ee, + 0x09f2, 0x09f6, 0x09fa, 0x09fe, 0x0a02, 0x0a06, 0x0a0a, 0x0a0e, + 0x0a12, 0x0a16, 0x0a1a, 0x0a1e, 0x000e, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x0039, 0x003b, 0x003d, 0x003f, 0x0041, 0x0043, + 0x0045, 0x0048, 0x004b, 0x0422, 0x000e, 0x0000, 0xffff, 0x042f, + 0x0438, 0x043f, 0x0445, 0x044c, 0x0450, 0x0458, 0x0460, 0x0467, + 0x046e, 0x0473, 0x0479, 0x0481, 0x0003, 0x0291, 0x0297, 0x028b, + 0x0001, 0x028d, 0x0002, 0x0006, 0x0aa5, 0x0abe, 0x0001, 0x0293, + // Entry 3A80 - 3ABF + 0x0002, 0x0006, 0x0ada, 0x0ae0, 0x0001, 0x0299, 0x0002, 0x0006, + 0x0ae6, 0x0ae9, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x02a6, 0x0000, 0x02b7, 0x0004, 0x02b4, 0x02ae, 0x02ab, 0x02b1, + 0x0001, 0x0006, 0x01e8, 0x0001, 0x0006, 0x01ff, 0x0001, 0x0002, + 0x001b, 0x0001, 0x0006, 0x020f, 0x0004, 0x02c5, 0x02bf, 0x02bc, + 0x02c2, 0x0001, 0x0006, 0x021c, 0x0001, 0x0006, 0x021c, 0x0001, + 0x0006, 0x022e, 0x0001, 0x0000, 0x03c6, 0x0008, 0x02d1, 0x0336, + 0x038d, 0x03c2, 0x0403, 0x041d, 0x042e, 0x043f, 0x0002, 0x02d4, + // Entry 3AC0 - 3AFF + 0x0305, 0x0003, 0x02d8, 0x02e7, 0x02f6, 0x000d, 0x0006, 0xffff, + 0x0aec, 0x0af0, 0x0af4, 0x0af8, 0x0afc, 0x0b00, 0x0b04, 0x0b08, + 0x0b0c, 0x0b10, 0x0b14, 0x0b18, 0x000d, 0x0006, 0xffff, 0x0b1c, + 0x0b1e, 0x0b20, 0x0b22, 0x0b20, 0x0b1c, 0x0b1c, 0x0b22, 0x0b24, + 0x0b26, 0x0b28, 0x0b22, 0x000d, 0x0006, 0xffff, 0x0b2a, 0x0b34, + 0x0b3f, 0x0b48, 0x0b52, 0x0b5a, 0x0b62, 0x0b6c, 0x0b77, 0x0b84, + 0x0b90, 0x0b9b, 0x0003, 0x0309, 0x0318, 0x0327, 0x000d, 0x0006, + 0xffff, 0x0ba7, 0x0022, 0x0bab, 0x0baf, 0x0bb3, 0x0bb7, 0x0bbb, + // Entry 3B00 - 3B3F + 0x003a, 0x0bbf, 0x0bc3, 0x0bc7, 0x0bcb, 0x000d, 0x0006, 0xffff, + 0x0b1c, 0x0b1e, 0x0b20, 0x0b22, 0x0b20, 0x0b1c, 0x0b1c, 0x0b22, + 0x0b24, 0x0b26, 0x0b28, 0x0b22, 0x000d, 0x0006, 0xffff, 0x0bcf, + 0x0bd6, 0x0bde, 0x0be4, 0x0bea, 0x0bef, 0x0bf4, 0x0bfb, 0x0c02, + 0x0c0c, 0x0c14, 0x0c1c, 0x0002, 0x0339, 0x0363, 0x0005, 0x033f, + 0x0348, 0x035a, 0x0000, 0x0351, 0x0007, 0x0006, 0x0c24, 0x0c28, + 0x0af4, 0x0c2c, 0x0c31, 0x0c35, 0x0c39, 0x0007, 0x0000, 0x204b, + 0x205c, 0x205e, 0x205e, 0x2060, 0x1edb, 0x2062, 0x0007, 0x0006, + // Entry 3B40 - 3B7F + 0x0c3e, 0x0c41, 0x0c44, 0x0c47, 0x0c4a, 0x0c4d, 0x0c50, 0x0007, + 0x0006, 0x0c54, 0x0c5c, 0x0c63, 0x0c6a, 0x0c75, 0x0c7c, 0x0c84, + 0x0005, 0x0369, 0x0372, 0x0384, 0x0000, 0x037b, 0x0007, 0x0006, + 0x0c24, 0x0c28, 0x0af4, 0x0c2c, 0x0c31, 0x0c35, 0x0c39, 0x0007, + 0x0000, 0x204b, 0x205c, 0x205e, 0x205e, 0x2060, 0x1edb, 0x2062, + 0x0007, 0x0006, 0x0c3e, 0x0c41, 0x0c44, 0x0c47, 0x0c4a, 0x0c4d, + 0x0c50, 0x0007, 0x0006, 0x0c54, 0x0c5c, 0x0c63, 0x0c6a, 0x0c75, + 0x0c7c, 0x0c84, 0x0002, 0x0390, 0x03a9, 0x0003, 0x0394, 0x039b, + // Entry 3B80 - 3BBF + 0x03a2, 0x0005, 0x0006, 0xffff, 0x0c8c, 0x0c8f, 0x0c92, 0x0c95, + 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x0005, + 0x0006, 0xffff, 0x0c98, 0x0ca6, 0x0cb3, 0x0cc1, 0x0003, 0x03ad, + 0x03b4, 0x03bb, 0x0005, 0x0006, 0xffff, 0x0c8c, 0x0c8f, 0x0c92, + 0x0c95, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, + 0x0005, 0x0006, 0xffff, 0x0c98, 0x0ca6, 0x0cb3, 0x0cc1, 0x0002, + 0x03c5, 0x03e4, 0x0003, 0x03c9, 0x03d2, 0x03db, 0x0002, 0x03cc, + 0x03cf, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0002, + // Entry 3BC0 - 3BFF + 0x03d5, 0x03d8, 0x0001, 0x0000, 0x1f9c, 0x0001, 0x0006, 0x0cce, + 0x0002, 0x03de, 0x03e1, 0x0001, 0x0006, 0x0cd0, 0x0001, 0x0006, + 0x0cde, 0x0003, 0x03e8, 0x03f1, 0x03fa, 0x0002, 0x03eb, 0x03ee, + 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0002, 0x03f4, + 0x03f7, 0x0001, 0x0000, 0x1f9c, 0x0001, 0x0006, 0x0cce, 0x0002, + 0x03fd, 0x0400, 0x0001, 0x0006, 0x0cea, 0x0001, 0x0006, 0x0cf2, + 0x0003, 0x0412, 0x0000, 0x0407, 0x0002, 0x040a, 0x040e, 0x0002, + 0x0006, 0x0cf8, 0x0d27, 0x0002, 0x0006, 0x0d0a, 0x0d3a, 0x0002, + // Entry 3C00 - 3C3F + 0x0415, 0x0419, 0x0002, 0x0006, 0x0d49, 0x0d52, 0x0002, 0x0006, + 0x0d4e, 0x0d57, 0x0004, 0x042b, 0x0425, 0x0422, 0x0428, 0x0001, + 0x0006, 0x0d5a, 0x0001, 0x0006, 0x0d6e, 0x0001, 0x0002, 0x003c, + 0x0001, 0x0006, 0x0d7c, 0x0004, 0x043c, 0x0436, 0x0433, 0x0439, + 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, + 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, 0x044d, 0x0447, 0x0444, + 0x044a, 0x0001, 0x0006, 0x021c, 0x0001, 0x0006, 0x021c, 0x0001, + 0x0006, 0x022e, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0452, 0x0002, + // Entry 3C40 - 3C7F + 0x0455, 0x0468, 0x0002, 0x0000, 0x0458, 0x000e, 0x0000, 0x2064, + 0x0033, 0x0035, 0x0037, 0x0039, 0x003b, 0x003d, 0x003f, 0x0041, + 0x0043, 0x0045, 0x0048, 0x004b, 0x0422, 0x0002, 0x0000, 0x046b, + 0x000e, 0x0000, 0x2067, 0x0033, 0x0035, 0x0037, 0x0039, 0x003b, + 0x003d, 0x003f, 0x0041, 0x0043, 0x0045, 0x0048, 0x004b, 0x0422, + 0x0008, 0x0484, 0x0000, 0x0000, 0x0000, 0x04e9, 0x04fc, 0x0000, + 0x050d, 0x0002, 0x0487, 0x04b8, 0x0003, 0x048b, 0x049a, 0x04a9, + 0x000d, 0x0000, 0xffff, 0x05a2, 0x05aa, 0x05b3, 0x05bc, 0x05c3, + // Entry 3C80 - 3CBF + 0x05cb, 0x05d2, 0x05d9, 0x05e1, 0x05ec, 0x05f2, 0x05f8, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x003b, 0x003d, + 0x003f, 0x0041, 0x0043, 0x0045, 0x0048, 0x004b, 0x000d, 0x0006, + 0xffff, 0x0d83, 0x0d8e, 0x0d9a, 0x0da6, 0x0db1, 0x0dbc, 0x0dc6, + 0x0dd1, 0x0ddc, 0x0deb, 0x0df4, 0x0dfd, 0x0003, 0x04bc, 0x04cb, + 0x04da, 0x000d, 0x0000, 0xffff, 0x05a2, 0x05aa, 0x05b3, 0x05bc, + 0x05c3, 0x05cb, 0x05d2, 0x05d9, 0x05e1, 0x05ec, 0x05f2, 0x05f8, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x003b, + // Entry 3CC0 - 3CFF + 0x003d, 0x003f, 0x0041, 0x0043, 0x0045, 0x0048, 0x004b, 0x000d, + 0x0000, 0xffff, 0x05a2, 0x05aa, 0x05b3, 0x05bc, 0x05c3, 0x05cb, + 0x05d2, 0x05d9, 0x05e1, 0x05ec, 0x05f2, 0x05f8, 0x0003, 0x04f2, + 0x04f7, 0x04ed, 0x0001, 0x04ef, 0x0001, 0x0000, 0x0601, 0x0001, + 0x04f4, 0x0001, 0x0000, 0x0601, 0x0001, 0x04f9, 0x0001, 0x0000, + 0x0601, 0x0004, 0x050a, 0x0504, 0x0501, 0x0507, 0x0001, 0x0006, + 0x01e8, 0x0001, 0x0006, 0x01ff, 0x0001, 0x0002, 0x001b, 0x0001, + 0x0006, 0x020f, 0x0004, 0x051b, 0x0515, 0x0512, 0x0518, 0x0001, + // Entry 3D00 - 3D3F + 0x0006, 0x021c, 0x0001, 0x0006, 0x021c, 0x0001, 0x0006, 0x022e, + 0x0001, 0x0000, 0x03c6, 0x0008, 0x0527, 0x0000, 0x0000, 0x0000, + 0x058c, 0x059f, 0x0000, 0x05b0, 0x0002, 0x052a, 0x055b, 0x0003, + 0x052e, 0x053d, 0x054c, 0x000d, 0x0000, 0xffff, 0x0606, 0x060b, + 0x0610, 0x0617, 0x061f, 0x0626, 0x062e, 0x0633, 0x0638, 0x063d, + 0x0643, 0x064d, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x0039, 0x003b, 0x003d, 0x003f, 0x0041, 0x0043, 0x0045, 0x0048, + 0x004b, 0x000d, 0x0006, 0xffff, 0x0e09, 0x0e15, 0x0e1e, 0x0e2a, + // Entry 3D40 - 3D7F + 0x0e37, 0x0e43, 0x0e50, 0x0e59, 0x0e65, 0x0e70, 0x0e7b, 0x0e8d, + 0x0003, 0x055f, 0x056e, 0x057d, 0x000d, 0x0000, 0xffff, 0x0606, + 0x060b, 0x0610, 0x0617, 0x061f, 0x0626, 0x062e, 0x0633, 0x0638, + 0x063d, 0x0643, 0x064d, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x0039, 0x003b, 0x003d, 0x003f, 0x0041, 0x0043, 0x0045, + 0x0048, 0x004b, 0x000d, 0x0000, 0xffff, 0x0657, 0x0660, 0x0666, + 0x066f, 0x0679, 0x0682, 0x068c, 0x0692, 0x069b, 0x06a3, 0x06ab, + 0x06ba, 0x0003, 0x0595, 0x059a, 0x0590, 0x0001, 0x0592, 0x0001, + // Entry 3D80 - 3DBF + 0x0000, 0x06c8, 0x0001, 0x0597, 0x0001, 0x0000, 0x06c8, 0x0001, + 0x059c, 0x0001, 0x0000, 0x06c8, 0x0004, 0x05ad, 0x05a7, 0x05a4, + 0x05aa, 0x0001, 0x0006, 0x01e8, 0x0001, 0x0006, 0x01ff, 0x0001, + 0x0002, 0x001b, 0x0001, 0x0006, 0x020f, 0x0004, 0x05be, 0x05b8, + 0x05b5, 0x05bb, 0x0001, 0x0006, 0x021c, 0x0001, 0x0006, 0x021c, + 0x0001, 0x0006, 0x022e, 0x0001, 0x0000, 0x03c6, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x05ca, 0x0000, 0x0000, 0x07f7, 0x0003, + 0x06be, 0x07ae, 0x05ce, 0x0001, 0x05d0, 0x00ec, 0x0000, 0x06cb, + // Entry 3DC0 - 3DFF + 0x06dd, 0x06f1, 0x0705, 0x0719, 0x072c, 0x073e, 0x0750, 0x0762, + 0x0775, 0x0787, 0x206c, 0x2085, 0x209f, 0x20b7, 0x20cf, 0x081e, + 0x20e5, 0x0843, 0x0857, 0x086a, 0x087d, 0x0891, 0x08a3, 0x08b5, + 0x08c7, 0x20f6, 0x08ed, 0x0900, 0x0914, 0x0926, 0x093a, 0x094e, + 0x095f, 0x0972, 0x0985, 0x0999, 0x09ae, 0x09c2, 0x09d3, 0x09e6, + 0x09f7, 0x0a0b, 0x0a20, 0x0a33, 0x0a46, 0x0a58, 0x0a6a, 0x0a7b, + 0x0a8c, 0x0aa2, 0x0ab7, 0x0acc, 0x0ae1, 0x0af6, 0x0b0b, 0x0b1e, + 0x0b32, 0x0b48, 0x0b60, 0x0b77, 0x0b8d, 0x0ba2, 0x0bb6, 0x0bcb, + // Entry 3E00 - 3E3F + 0x0be1, 0x0bf6, 0x0c0b, 0x0c23, 0x0c37, 0x0c4c, 0x0c60, 0x0c74, + 0x0c89, 0x0c9f, 0x0cb3, 0x0cc8, 0x0cdd, 0x2107, 0x0d07, 0x0d1c, + 0x0d33, 0x0d47, 0x0d5b, 0x0d6f, 0x0d85, 0x0d9c, 0x0db0, 0x0dc3, + 0x0dd7, 0x0def, 0x0e04, 0x0e19, 0x0e2e, 0x0e43, 0x0e57, 0x0e6d, + 0x0e80, 0x0e96, 0x0eaa, 0x0ec1, 0x0ed4, 0x0ee9, 0x0efd, 0x0f12, + 0x0f26, 0x0f39, 0x0f50, 0x0f64, 0x0f7a, 0x0f8f, 0x0fa4, 0x0fba, + 0x0fd1, 0x0fe6, 0x0ffd, 0x1012, 0x1028, 0x103c, 0x1051, 0x1066, + 0x107a, 0x108e, 0x10a2, 0x10b8, 0x10cf, 0x10e3, 0x211a, 0x1110, + // Entry 3E40 - 3E7F + 0x1124, 0x1139, 0x114d, 0x1163, 0x1178, 0x118d, 0x11a3, 0x11ba, + 0x11d0, 0x11e7, 0x11fb, 0x120f, 0x1224, 0x1238, 0x124d, 0x1262, + 0x1276, 0x128b, 0x12a0, 0x12b5, 0x12ca, 0x12df, 0x12f3, 0x1308, + 0x131f, 0x1335, 0x134b, 0x1360, 0x1374, 0x1388, 0x139e, 0x13b4, + 0x13ca, 0x13e0, 0x13f4, 0x140b, 0x141f, 0x1435, 0x144b, 0x145f, + 0x1473, 0x1489, 0x149c, 0x14b3, 0x14c8, 0x14de, 0x14f5, 0x150b, + 0x1522, 0x1538, 0x154f, 0x1565, 0x157b, 0x158f, 0x15a4, 0x15bb, + 0x15d0, 0x15e4, 0x15f8, 0x160d, 0x1621, 0x1638, 0x164d, 0x1661, + // Entry 3E80 - 3EBF + 0x1676, 0x168a, 0x16a0, 0x16b6, 0x16cc, 0x16e0, 0x16f7, 0x170c, + 0x1720, 0x1734, 0x174a, 0x175e, 0x1773, 0x1787, 0x179b, 0x17b1, + 0x17c7, 0x17db, 0x17f2, 0x1808, 0x181d, 0x1832, 0x1847, 0x185e, + 0x1874, 0x1888, 0x189e, 0x18b3, 0x18c8, 0x18dd, 0x18f1, 0x1906, + 0x191b, 0x192f, 0x1942, 0x1956, 0x196d, 0x1983, 0x1997, 0x19ab, + 0x19b1, 0x212c, 0x19c0, 0x0001, 0x06c0, 0x00ec, 0x0006, 0x0e9e, + 0x0ea4, 0x0eac, 0x0eb4, 0x0ebc, 0x0ec3, 0x0ec9, 0x0ecf, 0x0ed5, + 0x0edc, 0x0ee2, 0x0eea, 0x0ef4, 0x0eff, 0x0f08, 0x0f11, 0x0f1a, + // Entry 3EC0 - 3EFF + 0x0f20, 0x0f27, 0x0f2f, 0x0f36, 0x0f3d, 0x0f45, 0x0f4b, 0x0f51, + 0x0f57, 0x0f5e, 0x0f65, 0x0f6c, 0x0f74, 0x0f7a, 0x0f82, 0x0f8a, + 0x0f8f, 0x0f96, 0x0f9d, 0x0fa5, 0x0fae, 0x0fb6, 0x0fbb, 0x0fc2, + 0x0fc7, 0x0fcf, 0x0fd8, 0x0fdf, 0x0fe6, 0x0fec, 0x0ff2, 0x0ff7, + 0x0ffc, 0x1006, 0x100f, 0x1017, 0x101e, 0x1025, 0x102c, 0x1031, + 0x1037, 0x103f, 0x1049, 0x1052, 0x105a, 0x1061, 0x1067, 0x106e, + 0x1076, 0x107d, 0x1084, 0x1091, 0x1097, 0x109e, 0x10a4, 0x10aa, + 0x10b1, 0x10b9, 0x10bf, 0x10c6, 0x10cd, 0x10d4, 0x10db, 0x10e2, + // Entry 3F00 - 3F3F + 0x10eb, 0x10f1, 0x10f7, 0x10fd, 0x1105, 0x110e, 0x1114, 0x1119, + 0x111f, 0x1129, 0x1130, 0x1137, 0x113e, 0x1145, 0x114b, 0x1153, + 0x1158, 0x1160, 0x1166, 0x116f, 0x1174, 0x117b, 0x1181, 0x1188, + 0x118e, 0x1193, 0x119c, 0x11a2, 0x11aa, 0x11b1, 0x11b8, 0x11c0, + 0x11c9, 0x11d3, 0x11dc, 0x11e3, 0x11eb, 0x11f1, 0x11f8, 0x11ff, + 0x1205, 0x120b, 0x1211, 0x1219, 0x1222, 0x1228, 0x1231, 0x1239, + 0x123f, 0x1246, 0x124c, 0x1254, 0x125b, 0x1262, 0x126a, 0x1273, + 0x127b, 0x1284, 0x128a, 0x1290, 0x1297, 0x129d, 0x12a7, 0x12ae, + // Entry 3F40 - 3F7F + 0x12b4, 0x12bb, 0x12c2, 0x12c9, 0x12d0, 0x12d7, 0x12dd, 0x12e4, + 0x12ed, 0x12f5, 0x12fd, 0x1307, 0x130d, 0x1313, 0x131b, 0x1323, + 0x132b, 0x1333, 0x1339, 0x1342, 0x134b, 0x1353, 0x135b, 0x1361, + 0x1367, 0x1372, 0x1377, 0x1380, 0x1387, 0x138f, 0x1398, 0x13a0, + 0x13a9, 0x13b1, 0x13ba, 0x13c2, 0x13ca, 0x13d0, 0x13d7, 0x13e0, + 0x13e7, 0x13ed, 0x13f3, 0x13fd, 0x1403, 0x140c, 0x1413, 0x141c, + 0x1423, 0x1429, 0x1434, 0x143c, 0x1444, 0x144a, 0x1453, 0x145d, + 0x1463, 0x146c, 0x1474, 0x147a, 0x1481, 0x1487, 0x148d, 0x1495, + // Entry 3F80 - 3FBF + 0x149d, 0x14a3, 0x14ac, 0x14b4, 0x14bb, 0x14c2, 0x14cc, 0x14d5, + 0x14dd, 0x14e3, 0x14eb, 0x14f2, 0x14f9, 0x1500, 0x1506, 0x150d, + 0x1514, 0x151a, 0x151f, 0x1525, 0x152e, 0x1536, 0x153c, 0x1542, + 0x1548, 0x1550, 0x155a, 0x0001, 0x07b0, 0x0045, 0x0006, 0x0e9e, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0ee2, 0x1561, 0x156b, 0x1576, 0x157f, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0f57, 0x0f5e, 0x0f65, 0x0f6c, 0xffff, 0x0f7a, 0xffff, 0xffff, + // Entry 3FC0 - 3FFF + 0xffff, 0x0f96, 0xffff, 0x0fa5, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0ff2, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1091, 0x0004, 0x0000, 0x07ff, 0x07fc, + 0x0802, 0x0001, 0x0006, 0x021c, 0x0001, 0x0006, 0x021c, 0x0001, + 0x0006, 0x022e, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x9006, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 4000 - 403F + 0x0817, 0x082d, 0x0000, 0x083e, 0x0003, 0x0821, 0x0827, 0x081b, + 0x0001, 0x081d, 0x0002, 0x0006, 0x1588, 0x159b, 0x0001, 0x0823, + 0x0002, 0x0006, 0x15a2, 0x159b, 0x0001, 0x0829, 0x0002, 0x0006, + 0x15a2, 0x159b, 0x0004, 0x083b, 0x0835, 0x0832, 0x0838, 0x0001, + 0x0006, 0x01e8, 0x0001, 0x0006, 0x01ff, 0x0001, 0x0002, 0x001b, + 0x0001, 0x0006, 0x020f, 0x0004, 0x084c, 0x0846, 0x0843, 0x0849, + 0x0001, 0x0006, 0x021c, 0x0001, 0x0006, 0x021c, 0x0001, 0x0006, + 0x022e, 0x0001, 0x0000, 0x03c6, 0x0040, 0x0890, 0x0000, 0x0000, + // Entry 4040 - 407F + 0x0895, 0x08ac, 0x08c3, 0x08da, 0x08f1, 0x0908, 0x091f, 0x0936, + 0x094d, 0x0964, 0x097f, 0x099a, 0x0000, 0x0000, 0x0000, 0x09b5, + 0x09ce, 0x09e7, 0x0000, 0x0000, 0x0000, 0x0a00, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0a05, 0x0a19, 0x0a2d, 0x0a41, 0x0a55, + 0x0a69, 0x0a7d, 0x0a91, 0x0aa5, 0x0ab9, 0x0acd, 0x0ae1, 0x0af5, + 0x0b09, 0x0b1d, 0x0b31, 0x0b45, 0x0b59, 0x0b6d, 0x0b81, 0x0b95, + 0x0000, 0x0ba9, 0x0000, 0x0bae, 0x0bc4, 0x0bda, 0x0bf0, 0x0c06, + 0x0c1c, 0x0c32, 0x0c48, 0x0c5e, 0x0c74, 0x0001, 0x0892, 0x0001, + // Entry 4080 - 40BF + 0x0001, 0x0040, 0x0003, 0x0899, 0x089c, 0x08a1, 0x0001, 0x0006, + 0x15ab, 0x0003, 0x0006, 0x15b0, 0x15c0, 0x15ca, 0x0002, 0x08a4, + 0x08a8, 0x0002, 0x0006, 0x15e8, 0x15dc, 0x0002, 0x0006, 0x1602, + 0x15f5, 0x0003, 0x08b0, 0x08b3, 0x08b8, 0x0001, 0x0006, 0x15ab, + 0x0003, 0x0006, 0x1610, 0x15c0, 0x161e, 0x0002, 0x08bb, 0x08bf, + 0x0002, 0x0006, 0x15e8, 0x15dc, 0x0002, 0x0006, 0x1602, 0x15f5, + 0x0003, 0x08c7, 0x08ca, 0x08cf, 0x0001, 0x0006, 0x15ab, 0x0003, + 0x0006, 0x162c, 0x15c0, 0x1636, 0x0002, 0x08d2, 0x08d6, 0x0002, + // Entry 40C0 - 40FF + 0x0006, 0x1640, 0x1640, 0x0002, 0x0006, 0x164a, 0x164a, 0x0003, + 0x08de, 0x08e1, 0x08e6, 0x0001, 0x0006, 0x1655, 0x0003, 0x0006, + 0x165f, 0x1672, 0x1681, 0x0002, 0x08e9, 0x08ed, 0x0002, 0x0006, + 0x16a5, 0x1694, 0x0002, 0x0006, 0x16c9, 0x16b7, 0x0003, 0x08f5, + 0x08f8, 0x08fd, 0x0001, 0x0006, 0x16dc, 0x0003, 0x0006, 0x16e1, + 0x16ec, 0x16f7, 0x0002, 0x0900, 0x0904, 0x0002, 0x0006, 0x1702, + 0x1702, 0x0002, 0x0006, 0x170f, 0x170f, 0x0003, 0x090c, 0x090f, + 0x0914, 0x0001, 0x0006, 0x16dc, 0x0003, 0x0006, 0x16e1, 0x16ec, + // Entry 4100 - 413F + 0x16f7, 0x0002, 0x0917, 0x091b, 0x0002, 0x0006, 0x171d, 0x171d, + 0x0002, 0x0006, 0x1728, 0x1728, 0x0003, 0x0923, 0x0926, 0x092b, + 0x0001, 0x0006, 0x09ee, 0x0003, 0x0006, 0x1734, 0x1742, 0x174b, + 0x0002, 0x092e, 0x0932, 0x0002, 0x0006, 0x1766, 0x175b, 0x0002, + 0x0006, 0x177f, 0x1773, 0x0003, 0x093a, 0x093d, 0x0942, 0x0001, + 0x0006, 0x09ee, 0x0003, 0x0006, 0x178d, 0x1742, 0x1796, 0x0002, + 0x0945, 0x0949, 0x0002, 0x0006, 0x1766, 0x175b, 0x0002, 0x0006, + 0x177f, 0x1773, 0x0003, 0x0951, 0x0954, 0x0959, 0x0001, 0x0006, + // Entry 4140 - 417F + 0x09ee, 0x0003, 0x0006, 0x178d, 0x1742, 0x1796, 0x0002, 0x095c, + 0x0960, 0x0002, 0x0006, 0x179f, 0x179f, 0x0002, 0x0006, 0x17a9, + 0x17a9, 0x0004, 0x0969, 0x096c, 0x0971, 0x097c, 0x0001, 0x0006, + 0x17b4, 0x0003, 0x0006, 0x17bc, 0x17ce, 0x17db, 0x0002, 0x0974, + 0x0978, 0x0002, 0x0006, 0x17fe, 0x17ef, 0x0002, 0x0006, 0x181e, + 0x180e, 0x0001, 0x0006, 0x182f, 0x0004, 0x0984, 0x0987, 0x098c, + 0x0997, 0x0001, 0x0006, 0x1842, 0x0003, 0x0006, 0x1847, 0x1854, + 0x185f, 0x0002, 0x098f, 0x0993, 0x0002, 0x0006, 0x186e, 0x186e, + // Entry 4180 - 41BF + 0x0002, 0x0006, 0x187b, 0x187b, 0x0001, 0x0006, 0x182f, 0x0004, + 0x099f, 0x09a2, 0x09a7, 0x09b2, 0x0001, 0x0006, 0x1842, 0x0003, + 0x0006, 0x1889, 0x1854, 0x1894, 0x0002, 0x09aa, 0x09ae, 0x0002, + 0x0006, 0x189f, 0x189f, 0x0002, 0x0006, 0x18aa, 0x18aa, 0x0001, + 0x0006, 0x182f, 0x0003, 0x09b9, 0x09bc, 0x09c3, 0x0001, 0x0006, + 0x18b6, 0x0005, 0x0006, 0x18c4, 0x18ca, 0x0cea, 0x18bb, 0x18d0, + 0x0002, 0x09c6, 0x09ca, 0x0002, 0x0006, 0x18ea, 0x18de, 0x0002, + 0x0006, 0x1904, 0x18f7, 0x0003, 0x09d2, 0x09d5, 0x09dc, 0x0001, + // Entry 41C0 - 41FF + 0x0006, 0x18b6, 0x0005, 0x0006, 0x18c4, 0x18ca, 0x0cea, 0x18bb, + 0x18d0, 0x0002, 0x09df, 0x09e3, 0x0002, 0x0006, 0x18ea, 0x18de, + 0x0002, 0x0006, 0x1904, 0x18f7, 0x0003, 0x09eb, 0x09ee, 0x09f5, + 0x0001, 0x0006, 0x18b6, 0x0005, 0x0006, 0x18c4, 0x18ca, 0x1919, + 0x1912, 0x191f, 0x0002, 0x09f8, 0x09fc, 0x0002, 0x0006, 0x1928, + 0x1928, 0x0002, 0x0006, 0x1932, 0x1932, 0x0001, 0x0a02, 0x0001, + 0x0006, 0x193d, 0x0003, 0x0000, 0x0a09, 0x0a0e, 0x0003, 0x0006, + 0x1950, 0x1962, 0x196f, 0x0002, 0x0a11, 0x0a15, 0x0002, 0x0006, + // Entry 4200 - 423F + 0x199a, 0x1983, 0x0002, 0x0006, 0x19c2, 0x19b2, 0x0003, 0x0000, + 0x0a1d, 0x0a22, 0x0003, 0x0006, 0x19d3, 0x19df, 0x19e9, 0x0002, + 0x0a25, 0x0a29, 0x0002, 0x0006, 0x199a, 0x1983, 0x0002, 0x0006, + 0x19c2, 0x19b2, 0x0003, 0x0000, 0x0a31, 0x0a36, 0x0003, 0x0006, + 0x19f7, 0x19df, 0x1a01, 0x0002, 0x0a39, 0x0a3d, 0x0002, 0x0006, + 0x199a, 0x1983, 0x0002, 0x0006, 0x19c2, 0x19b2, 0x0003, 0x0000, + 0x0a45, 0x0a4a, 0x0003, 0x0006, 0x1a0b, 0x1a1c, 0x1a28, 0x0002, + 0x0a4d, 0x0a51, 0x0002, 0x0006, 0x1a3b, 0x1a3b, 0x0002, 0x0006, + // Entry 4240 - 427F + 0x1a51, 0x1a51, 0x0003, 0x0000, 0x0a59, 0x0a5e, 0x0003, 0x0006, + 0x1a60, 0x1a6d, 0x1a78, 0x0002, 0x0a61, 0x0a65, 0x0002, 0x0006, + 0x1a3b, 0x1a3b, 0x0002, 0x0006, 0x1a51, 0x1a51, 0x0003, 0x0000, + 0x0a6d, 0x0a72, 0x0003, 0x0006, 0x1a87, 0x1a91, 0x1a9b, 0x0002, + 0x0a75, 0x0a79, 0x0002, 0x0006, 0x1a3b, 0x1a3b, 0x0002, 0x0006, + 0x1a51, 0x1a51, 0x0003, 0x0000, 0x0a81, 0x0a86, 0x0003, 0x0006, + 0x1aa5, 0x1ab6, 0x1ac2, 0x0002, 0x0a89, 0x0a8d, 0x0002, 0x0006, + 0x1ad5, 0x1ad5, 0x0002, 0x0006, 0x1aeb, 0x1aeb, 0x0003, 0x0000, + // Entry 4280 - 42BF + 0x0a95, 0x0a9a, 0x0003, 0x0006, 0x1afa, 0x1b06, 0x1b10, 0x0002, + 0x0a9d, 0x0aa1, 0x0002, 0x0006, 0x1ad5, 0x1ad5, 0x0002, 0x0006, + 0x1aeb, 0x1aeb, 0x0003, 0x0000, 0x0aa9, 0x0aae, 0x0003, 0x0006, + 0x1b1e, 0x1b06, 0x1b28, 0x0002, 0x0ab1, 0x0ab5, 0x0002, 0x0006, + 0x1ad5, 0x1ad5, 0x0002, 0x0006, 0x1aeb, 0x1aeb, 0x0003, 0x0000, + 0x0abd, 0x0ac2, 0x0003, 0x0006, 0x1b32, 0x1b47, 0x1b57, 0x0002, + 0x0ac5, 0x0ac9, 0x0002, 0x0006, 0x1b6e, 0x1b6e, 0x0002, 0x0006, + 0x1b88, 0x1b88, 0x0003, 0x0000, 0x0ad1, 0x0ad6, 0x0003, 0x0006, + // Entry 42C0 - 42FF + 0x1b9b, 0x1ba8, 0x1bb3, 0x0002, 0x0ad9, 0x0add, 0x0002, 0x0006, + 0x1b6e, 0x1b6e, 0x0002, 0x0006, 0x1b88, 0x1b88, 0x0003, 0x0000, + 0x0ae5, 0x0aea, 0x0003, 0x0006, 0x1bc2, 0x1ba8, 0x1bcd, 0x0002, + 0x0aed, 0x0af1, 0x0002, 0x0006, 0x1b6e, 0x1b6e, 0x0002, 0x0006, + 0x1b88, 0x1b88, 0x0003, 0x0000, 0x0af9, 0x0afe, 0x0003, 0x0006, + 0x1bd8, 0x1be9, 0x1bf5, 0x0002, 0x0b01, 0x0b05, 0x0002, 0x0006, + 0x1c08, 0x1c08, 0x0002, 0x0006, 0x1c1e, 0x1c1e, 0x0003, 0x0000, + 0x0b0d, 0x0b12, 0x0003, 0x0006, 0x1c2d, 0x1c39, 0x1c43, 0x0002, + // Entry 4300 - 433F + 0x0b15, 0x0b19, 0x0002, 0x0006, 0x1c08, 0x1c08, 0x0002, 0x0006, + 0x1c1e, 0x1c1e, 0x0003, 0x0000, 0x0b21, 0x0b26, 0x0003, 0x0006, + 0x1c51, 0x1c39, 0x1c5b, 0x0002, 0x0b29, 0x0b2d, 0x0002, 0x0006, + 0x1c08, 0x1c08, 0x0002, 0x0006, 0x1c1e, 0x1c1e, 0x0003, 0x0000, + 0x0b35, 0x0b3a, 0x0003, 0x0006, 0x1c65, 0x1c77, 0x1c84, 0x0002, + 0x0b3d, 0x0b41, 0x0002, 0x0006, 0x1c98, 0x1c98, 0x0002, 0x0006, + 0x1caf, 0x1caf, 0x0003, 0x0000, 0x0b49, 0x0b4e, 0x0003, 0x0006, + 0x1cbf, 0x1ccb, 0x1cd5, 0x0002, 0x0b51, 0x0b55, 0x0002, 0x0006, + // Entry 4340 - 437F + 0x1c98, 0x1c98, 0x0002, 0x0006, 0x1caf, 0x1caf, 0x0003, 0x0000, + 0x0b5d, 0x0b62, 0x0003, 0x0006, 0x1ce3, 0x1ccb, 0x1ced, 0x0002, + 0x0b65, 0x0b69, 0x0002, 0x0006, 0x1c98, 0x1c98, 0x0002, 0x0006, + 0x1caf, 0x1caf, 0x0003, 0x0000, 0x0b71, 0x0b76, 0x0003, 0x0006, + 0x1cf7, 0x1d09, 0x1d16, 0x0002, 0x0b79, 0x0b7d, 0x0002, 0x0006, + 0x1d41, 0x1d2a, 0x0002, 0x0006, 0x1d69, 0x1d59, 0x0003, 0x0000, + 0x0b85, 0x0b8a, 0x0003, 0x0006, 0x1d7a, 0x1d87, 0x1d92, 0x0002, + 0x0b8d, 0x0b91, 0x0002, 0x0006, 0x1d41, 0x1d2a, 0x0002, 0x0006, + // Entry 4380 - 43BF + 0x1d69, 0x1d59, 0x0003, 0x0000, 0x0b99, 0x0b9e, 0x0003, 0x0006, + 0x1da1, 0x1d87, 0x1dac, 0x0002, 0x0ba1, 0x0ba5, 0x0002, 0x0006, + 0x1d41, 0x1d2a, 0x0002, 0x0006, 0x1d69, 0x1d59, 0x0001, 0x0bab, + 0x0001, 0x0006, 0x1db7, 0x0003, 0x0bb2, 0x0bb5, 0x0bb9, 0x0001, + 0x0006, 0x1dc8, 0x0002, 0x0006, 0xffff, 0x1dcd, 0x0002, 0x0bbc, + 0x0bc0, 0x0002, 0x0006, 0x1de3, 0x1dd7, 0x0002, 0x0006, 0x1dfd, + 0x1df0, 0x0003, 0x0bc8, 0x0bcb, 0x0bcf, 0x0001, 0x0006, 0x1e0b, + 0x0002, 0x0006, 0xffff, 0x1dcd, 0x0002, 0x0bd2, 0x0bd6, 0x0002, + // Entry 43C0 - 43FF + 0x0006, 0x1e0e, 0x1e0e, 0x0002, 0x0006, 0x1e18, 0x1e18, 0x0003, + 0x0bde, 0x0be1, 0x0be5, 0x0001, 0x0006, 0x1e0b, 0x0002, 0x0006, + 0xffff, 0x1e23, 0x0002, 0x0be8, 0x0bec, 0x0002, 0x0006, 0x1e0e, + 0x1e0e, 0x0002, 0x0006, 0x1e18, 0x1e18, 0x0003, 0x0bf4, 0x0bf7, + 0x0bfb, 0x0001, 0x0006, 0x1e2b, 0x0002, 0x0006, 0xffff, 0x1e32, + 0x0002, 0x0bfe, 0x0c02, 0x0002, 0x0006, 0x1e4c, 0x1e3e, 0x0002, + 0x0006, 0x1e6a, 0x1e5b, 0x0003, 0x0c0a, 0x0c0d, 0x0c11, 0x0001, + 0x0001, 0x07c5, 0x0002, 0x0006, 0xffff, 0x1e7a, 0x0002, 0x0c14, + // Entry 4400 - 443F + 0x0c18, 0x0002, 0x0006, 0x1e84, 0x1e84, 0x0002, 0x0006, 0x1e90, + 0x1e90, 0x0003, 0x0c20, 0x0c23, 0x0c27, 0x0001, 0x0001, 0x07e7, + 0x0002, 0x0006, 0xffff, 0x1e7a, 0x0002, 0x0c2a, 0x0c2e, 0x0002, + 0x0006, 0x1e84, 0x1e84, 0x0002, 0x0006, 0x1e90, 0x1e90, 0x0003, + 0x0c36, 0x0c39, 0x0c3d, 0x0001, 0x0006, 0x1e9d, 0x0002, 0x0006, + 0xffff, 0x1ea5, 0x0002, 0x0c40, 0x0c44, 0x0002, 0x0006, 0x1eba, + 0x1eab, 0x0002, 0x0006, 0x1eda, 0x1eca, 0x0003, 0x0c4c, 0x0c4f, + 0x0c53, 0x0001, 0x0001, 0x0860, 0x0002, 0x0006, 0xffff, 0x1ea5, + // Entry 4440 - 447F + 0x0002, 0x0c56, 0x0c5a, 0x0002, 0x0006, 0x1eeb, 0x1eeb, 0x0002, + 0x0006, 0x1ef7, 0x1ef7, 0x0003, 0x0c62, 0x0c65, 0x0c69, 0x0001, + 0x0001, 0x0860, 0x0002, 0x0006, 0xffff, 0x1ea5, 0x0002, 0x0c6c, + 0x0c70, 0x0002, 0x0006, 0x1f04, 0x1f04, 0x0002, 0x0006, 0x1f0e, + 0x1f0e, 0x0001, 0x0c76, 0x0001, 0x0006, 0x1f19, 0x0004, 0x0c7e, + 0x0c83, 0x0c88, 0x0cad, 0x0003, 0x0000, 0x1dc7, 0x1dd5, 0x1ddc, + 0x0003, 0x0006, 0x1f28, 0x1f34, 0x1f49, 0x0002, 0x0c8b, 0x0ca1, + 0x0003, 0x0c8f, 0x0c9b, 0x0c95, 0x0004, 0x0006, 0xffff, 0xffff, + // Entry 4480 - 44BF + 0xffff, 0x1f5f, 0x0004, 0x0006, 0xffff, 0xffff, 0xffff, 0x1f5f, + 0x0004, 0x0006, 0xffff, 0xffff, 0xffff, 0x1f63, 0x0003, 0x0000, + 0x0ca8, 0x0ca5, 0x0001, 0x0006, 0x1f67, 0x0003, 0x0006, 0xffff, + 0x1f81, 0x1f9a, 0x0002, 0x0e94, 0x0cb0, 0x0003, 0x0cb4, 0x0df4, + 0x0d54, 0x009e, 0x0006, 0xffff, 0xffff, 0xffff, 0xffff, 0x204b, + 0x20af, 0x2135, 0x217e, 0x21e5, 0x224f, 0x22d4, 0x234d, 0x2390, + 0x2450, 0x2493, 0x24df, 0x254c, 0x2592, 0x25e1, 0x2645, 0x26c7, + 0x272e, 0x2798, 0x27ea, 0x2836, 0xffff, 0xffff, 0x289e, 0xffff, + // Entry 44C0 - 44FF + 0x28ff, 0xffff, 0x2974, 0x29b7, 0x29f4, 0x2a31, 0xffff, 0xffff, + 0x2abb, 0x2b01, 0x2b62, 0xffff, 0xffff, 0xffff, 0x2bdc, 0xffff, + 0x2c51, 0x2cac, 0xffff, 0x2d2b, 0x2d8f, 0x2df6, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2e95, 0xffff, 0xffff, 0x2f08, 0x2f72, 0xffff, + 0xffff, 0x3024, 0x3085, 0x30d4, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x31a9, 0x31e9, 0x322f, 0x3272, 0x32b2, 0xffff, + 0xffff, 0x3363, 0xffff, 0x33af, 0xffff, 0xffff, 0x3439, 0xffff, + 0x34dd, 0xffff, 0xffff, 0xffff, 0xffff, 0x357a, 0xffff, 0x35cf, + // Entry 4500 - 453F + 0x3639, 0x36a6, 0x36fb, 0xffff, 0xffff, 0xffff, 0x3768, 0x37c3, + 0x3818, 0xffff, 0xffff, 0x3890, 0x391d, 0x396c, 0x39a9, 0xffff, + 0xffff, 0x3a22, 0x3a6e, 0x3aae, 0xffff, 0x3b12, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x3c21, 0x3c67, 0x3ca7, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3d75, 0xffff, 0xffff, + 0x3dde, 0xffff, 0x3e29, 0xffff, 0x3e90, 0x3ed9, 0x3f2e, 0xffff, + 0x3f83, 0x3fd2, 0xffff, 0xffff, 0xffff, 0x405b, 0x409e, 0xffff, + 0xffff, 0x1fb3, 0x20f2, 0x23cd, 0x240d, 0xffff, 0xffff, 0x3482, + // Entry 4540 - 457F + 0x3bb7, 0x009e, 0x0006, 0x1ff0, 0x2005, 0x201e, 0x2038, 0x2066, + 0x20bf, 0x2147, 0x219a, 0x2202, 0x2275, 0x22f6, 0x235d, 0x239e, + 0x2460, 0x24a6, 0x24fd, 0x255d, 0x25a6, 0x25fc, 0x266a, 0x26e3, + 0x274b, 0x27ad, 0x27fd, 0x2848, 0x287f, 0x288e, 0x28af, 0x28e4, + 0x2912, 0x2959, 0x2984, 0x29c5, 0x2a02, 0x2a44, 0x2a7d, 0x2aa2, + 0x2acc, 0x2b19, 0x2b6f, 0x2b9c, 0x2baa, 0x2bc5, 0x2bf7, 0x2c40, + 0x2c69, 0x2cc5, 0x2d0a, 0x2d46, 0x2dab, 0x2e03, 0x2e30, 0x2e4b, + 0x2e72, 0x2e85, 0x2ea4, 0x2ed5, 0x2ef0, 0x2f25, 0x2f91, 0x2ff9, + // Entry 4580 - 45BF + 0x3012, 0x303e, 0x3099, 0x30e1, 0x310e, 0x3129, 0x3142, 0x3155, + 0x3170, 0x318c, 0x31b8, 0x31fa, 0x323f, 0x3281, 0x32d3, 0x3327, + 0x3344, 0x3371, 0x33a0, 0x33c3, 0x33fe, 0x3421, 0x344b, 0x34c2, + 0x34ee, 0x3523, 0x3533, 0x3548, 0x355e, 0x358b, 0x35c0, 0x35ec, + 0x3657, 0x36bc, 0x370a, 0x373b, 0x374b, 0x3759, 0x3780, 0x37d9, + 0x382d, 0x386a, 0x3877, 0x38ac, 0x3931, 0x397a, 0x39bd, 0x39f8, + 0x3a06, 0x3a35, 0x3a7d, 0x3ac0, 0x3af7, 0x3b32, 0x3b85, 0x3b96, + 0x3ba5, 0x3c00, 0x3c11, 0x3c32, 0x3c76, 0x3cb5, 0x3ce4, 0x3cf9, + // Entry 45C0 - 45FF + 0x3d14, 0x3d30, 0x3d47, 0x3d58, 0x3d66, 0x3d85, 0x3db8, 0x3dce, + 0x3dec, 0x3e1b, 0x3e40, 0x3e81, 0x3ea2, 0x3eef, 0x3f3e, 0x3f71, + 0x3f97, 0x3fe5, 0x401e, 0x402d, 0x4043, 0x406b, 0x40b5, 0x2fe2, + 0x38f7, 0x1fc1, 0x2102, 0x23dc, 0x241d, 0x294b, 0x3413, 0x3491, + 0x3bc9, 0x009e, 0x0006, 0xffff, 0xffff, 0xffff, 0xffff, 0x208b, + 0x20d9, 0x2163, 0x21c0, 0x2229, 0x22a5, 0x2322, 0x2377, 0x23b6, + 0x247a, 0x24c3, 0x2525, 0x2578, 0x25c4, 0x2621, 0x2699, 0x2709, + 0x2772, 0x27cc, 0x281a, 0x2864, 0xffff, 0xffff, 0x28ca, 0xffff, + // Entry 4600 - 463F + 0x292f, 0xffff, 0x299e, 0x29dd, 0x2a1a, 0x2a61, 0xffff, 0xffff, + 0x2ae7, 0x2b3b, 0x2b86, 0xffff, 0xffff, 0xffff, 0x2c1c, 0xffff, + 0x2c8b, 0x2ce8, 0xffff, 0x2d6b, 0x2dd1, 0x2e1a, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2ebd, 0xffff, 0xffff, 0x2f4c, 0x2fba, 0xffff, + 0xffff, 0x3062, 0x30b7, 0x30f8, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x31d1, 0x3215, 0x3259, 0x329a, 0x32fd, 0xffff, + 0xffff, 0x3389, 0xffff, 0x33e1, 0xffff, 0xffff, 0x3467, 0xffff, + 0x3509, 0xffff, 0xffff, 0xffff, 0xffff, 0x35a6, 0xffff, 0x3613, + // Entry 4640 - 467F + 0x367f, 0x36dc, 0x3723, 0xffff, 0xffff, 0xffff, 0x37a2, 0x37f9, + 0x384c, 0xffff, 0xffff, 0x38d2, 0x394f, 0x3992, 0x39db, 0xffff, + 0xffff, 0x3a52, 0x3a96, 0x3adc, 0xffff, 0x3b5c, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x3c4d, 0x3c8f, 0x3ccd, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3d9f, 0xffff, 0xffff, + 0x3e04, 0xffff, 0x3e61, 0xffff, 0x3ebe, 0x3f0f, 0x3f58, 0xffff, + 0x3fb5, 0x4002, 0xffff, 0xffff, 0xffff, 0x4085, 0x40d6, 0xffff, + 0xffff, 0x1fd9, 0x211c, 0x23f5, 0x2437, 0xffff, 0xffff, 0x34aa, + // Entry 4680 - 46BF + 0x3be5, 0x0003, 0x0e98, 0x0f1a, 0x0ed9, 0x003f, 0x0007, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0x000e, 0x0019, + 0x0024, 0x002f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x003a, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0045, 0x004e, 0xffff, 0x0057, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 46C0 - 46FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0064, 0x003f, 0x0007, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0004, 0xffff, 0x0011, + 0x001c, 0x0027, 0x0032, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x003d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0045, 0x004e, 0xffff, + 0x0057, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 4700 - 473F + 0xffff, 0x0060, 0xffff, 0xffff, 0xffff, 0xffff, 0x0068, 0x003f, + 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0009, 0xffff, + 0x0015, 0x0020, 0x002b, 0x0036, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0041, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0049, 0x0052, + 0xffff, 0x005b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 4740 - 477F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x006d, + 0x0003, 0x0004, 0x0286, 0x06b7, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000d, 0x0038, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, 0x0027, 0x0004, 0x0024, + 0x001e, 0x001b, 0x0021, 0x0001, 0x0007, 0x0072, 0x0001, 0x0007, + 0x0083, 0x0001, 0x0007, 0x008f, 0x0001, 0x0007, 0x0099, 0x0004, + 0x0035, 0x002f, 0x002c, 0x0032, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + // Entry 4780 - 47BF + 0x0008, 0x0041, 0x00a6, 0x00fd, 0x0132, 0x0239, 0x0253, 0x0264, + 0x0275, 0x0002, 0x0044, 0x0075, 0x0003, 0x0048, 0x0057, 0x0066, + 0x000d, 0x0007, 0xffff, 0x00a7, 0x00ab, 0x00af, 0x00b3, 0x00b7, + 0x00bb, 0x00bf, 0x00c3, 0x00c7, 0x00cb, 0x00cf, 0x00d3, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x003b, 0x003d, + 0x003f, 0x0041, 0x0043, 0x0045, 0x0048, 0x004b, 0x000d, 0x0007, + 0xffff, 0x00d7, 0x00de, 0x00e5, 0x00ea, 0x00b7, 0x00f0, 0x00f5, + 0x00fa, 0x0101, 0x010a, 0x0112, 0x0119, 0x0003, 0x0079, 0x0088, + // Entry 47C0 - 47FF + 0x0097, 0x000d, 0x0007, 0xffff, 0x00a7, 0x00ab, 0x00af, 0x00b3, + 0x00b7, 0x00bb, 0x00bf, 0x00c3, 0x00c7, 0x00cb, 0x00cf, 0x00d3, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x003b, + 0x003d, 0x003f, 0x0041, 0x0043, 0x0045, 0x0048, 0x004b, 0x000d, + 0x0007, 0xffff, 0x0120, 0x0127, 0x012e, 0x0133, 0x0139, 0x013d, + 0x0143, 0x0149, 0x0150, 0x0159, 0x0161, 0x0168, 0x0002, 0x00a9, + 0x00d3, 0x0005, 0x00af, 0x00b8, 0x00ca, 0x0000, 0x00c1, 0x0007, + 0x0007, 0x016f, 0x0172, 0x0177, 0x017d, 0x0181, 0x0186, 0x0189, + // Entry 4800 - 483F + 0x0007, 0x0000, 0x003f, 0x0033, 0x0035, 0x0037, 0x0039, 0x003b, + 0x003d, 0x0007, 0x0007, 0x016f, 0x0172, 0x0177, 0x017d, 0x0181, + 0x0186, 0x0189, 0x0007, 0x0007, 0x018d, 0x0193, 0x01a1, 0x01b8, + 0x01c6, 0x01d6, 0x01dd, 0x0005, 0x00d9, 0x00e2, 0x00f4, 0x0000, + 0x00eb, 0x0007, 0x0007, 0x016f, 0x0172, 0x0177, 0x017d, 0x0181, + 0x0186, 0x0189, 0x0007, 0x0000, 0x003f, 0x0033, 0x0035, 0x0037, + 0x0039, 0x003b, 0x003d, 0x0007, 0x0007, 0x016f, 0x0172, 0x0177, + 0x017d, 0x0181, 0x0186, 0x0189, 0x0007, 0x0007, 0x018d, 0x0193, + // Entry 4840 - 487F + 0x01a1, 0x01b8, 0x01c6, 0x01d6, 0x01dd, 0x0002, 0x0100, 0x0119, + 0x0003, 0x0104, 0x010b, 0x0112, 0x0005, 0x0007, 0xffff, 0x01e6, + 0x01ef, 0x01f8, 0x0202, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x0039, 0x0005, 0x0007, 0xffff, 0x020c, 0x0219, 0x0226, + 0x0234, 0x0003, 0x011d, 0x0124, 0x012b, 0x0005, 0x0007, 0xffff, + 0x01e6, 0x01ef, 0x01f8, 0x0202, 0x0005, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x0039, 0x0005, 0x0007, 0xffff, 0x020c, 0x0219, + 0x0226, 0x0234, 0x0002, 0x0135, 0x01b7, 0x0003, 0x0139, 0x0163, + // Entry 4880 - 48BF + 0x018d, 0x000b, 0x0148, 0x014e, 0x0145, 0x0151, 0x0157, 0x015a, + 0x015d, 0x014b, 0x0154, 0x0000, 0x0160, 0x0001, 0x0007, 0x0242, + 0x0001, 0x0000, 0x04ef, 0x0001, 0x0007, 0x024d, 0x0001, 0x0000, + 0x04f2, 0x0001, 0x0007, 0x0256, 0x0001, 0x0007, 0x025c, 0x0001, + 0x0007, 0x0264, 0x0001, 0x0007, 0x026d, 0x0001, 0x0007, 0x027a, + 0x0001, 0x0007, 0x0281, 0x000b, 0x0172, 0x0178, 0x016f, 0x017b, + 0x0181, 0x0184, 0x0187, 0x0175, 0x017e, 0x0000, 0x018a, 0x0001, + 0x0007, 0x0242, 0x0001, 0x0000, 0x1f9c, 0x0001, 0x0000, 0x200e, + // Entry 48C0 - 48FF + 0x0001, 0x0006, 0x0cce, 0x0001, 0x0007, 0x0256, 0x0001, 0x0007, + 0x025c, 0x0001, 0x0007, 0x0264, 0x0001, 0x0007, 0x026d, 0x0001, + 0x0007, 0x027a, 0x0001, 0x0007, 0x0281, 0x000b, 0x019c, 0x01a2, + 0x0199, 0x01a5, 0x01ab, 0x01ae, 0x01b1, 0x019f, 0x01a8, 0x0000, + 0x01b4, 0x0001, 0x0007, 0x0242, 0x0001, 0x0000, 0x04ef, 0x0001, + 0x0007, 0x024d, 0x0001, 0x0000, 0x04f2, 0x0001, 0x0007, 0x0256, + 0x0001, 0x0007, 0x025c, 0x0001, 0x0007, 0x0264, 0x0001, 0x0007, + 0x026d, 0x0001, 0x0007, 0x027a, 0x0001, 0x0007, 0x0281, 0x0003, + // Entry 4900 - 493F + 0x01bb, 0x01e5, 0x020f, 0x000b, 0x01ca, 0x01d0, 0x01c7, 0x01d3, + 0x01d9, 0x01dc, 0x01df, 0x01cd, 0x01d6, 0x0000, 0x01e2, 0x0001, + 0x0007, 0x0242, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0007, 0x024d, + 0x0001, 0x0000, 0x04f2, 0x0001, 0x0007, 0x0256, 0x0001, 0x0007, + 0x025c, 0x0001, 0x0007, 0x0264, 0x0001, 0x0007, 0x026d, 0x0001, + 0x0007, 0x027a, 0x0001, 0x0007, 0x0281, 0x000b, 0x01f4, 0x01fa, + 0x01f1, 0x01fd, 0x0203, 0x0206, 0x0209, 0x01f7, 0x0200, 0x0000, + 0x020c, 0x0001, 0x0007, 0x0242, 0x0001, 0x0000, 0x04ef, 0x0001, + // Entry 4940 - 497F + 0x0007, 0x024d, 0x0001, 0x0000, 0x04f2, 0x0001, 0x0007, 0x0256, + 0x0001, 0x0007, 0x025c, 0x0001, 0x0007, 0x0264, 0x0001, 0x0007, + 0x026d, 0x0001, 0x0007, 0x027a, 0x0001, 0x0007, 0x0281, 0x000b, + 0x021e, 0x0224, 0x021b, 0x0227, 0x022d, 0x0230, 0x0233, 0x0221, + 0x022a, 0x0000, 0x0236, 0x0001, 0x0007, 0x0242, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x0007, 0x024d, 0x0001, 0x0000, 0x04f2, 0x0001, + 0x0007, 0x0256, 0x0001, 0x0007, 0x025c, 0x0001, 0x0007, 0x0264, + 0x0001, 0x0007, 0x026d, 0x0001, 0x0007, 0x027a, 0x0001, 0x0007, + // Entry 4980 - 49BF + 0x0281, 0x0003, 0x0248, 0x0000, 0x023d, 0x0002, 0x0240, 0x0244, + 0x0002, 0x0007, 0x0287, 0x02af, 0x0002, 0x0007, 0x029a, 0x02b8, + 0x0002, 0x024b, 0x024f, 0x0002, 0x0007, 0x02c2, 0x02d0, 0x0002, + 0x0007, 0x02c8, 0x02d5, 0x0004, 0x0261, 0x025b, 0x0258, 0x025e, + 0x0001, 0x0007, 0x02da, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, + 0x003c, 0x0001, 0x0007, 0x02e9, 0x0004, 0x0272, 0x026c, 0x0269, + 0x026f, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, + 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, 0x0283, 0x027d, + // Entry 49C0 - 49FF + 0x027a, 0x0280, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0042, 0x02c9, + 0x02ce, 0x02d3, 0x02d8, 0x02ef, 0x0301, 0x0313, 0x032a, 0x033c, + 0x034e, 0x0365, 0x0377, 0x0389, 0x03a4, 0x03ba, 0x03d0, 0x03d5, + 0x03da, 0x03df, 0x03f6, 0x0408, 0x041a, 0x041f, 0x0424, 0x0429, + 0x042e, 0x0433, 0x0438, 0x043d, 0x0442, 0x0447, 0x045b, 0x046f, + 0x0483, 0x0497, 0x04ab, 0x04bf, 0x04d3, 0x04e7, 0x04fb, 0x050f, + 0x0523, 0x0537, 0x054b, 0x055f, 0x0573, 0x0587, 0x059b, 0x05af, + // Entry 4A00 - 4A3F + 0x05c3, 0x05d7, 0x05eb, 0x05f0, 0x05f5, 0x05fa, 0x0610, 0x0622, + 0x0634, 0x064a, 0x065c, 0x066e, 0x0684, 0x0696, 0x06a8, 0x06ad, + 0x06b2, 0x0001, 0x02cb, 0x0001, 0x0000, 0x1a35, 0x0001, 0x02d0, + 0x0001, 0x0000, 0x1a35, 0x0001, 0x02d5, 0x0001, 0x0000, 0x1a35, + 0x0003, 0x02dc, 0x02df, 0x02e4, 0x0001, 0x0007, 0x02f2, 0x0003, + 0x0007, 0x02f6, 0x0301, 0x0307, 0x0002, 0x02e7, 0x02eb, 0x0002, + 0x0007, 0x0312, 0x0312, 0x0002, 0x0007, 0x0323, 0x0323, 0x0003, + 0x02f3, 0x0000, 0x02f6, 0x0001, 0x0007, 0x0331, 0x0002, 0x02f9, + // Entry 4A40 - 4A7F + 0x02fd, 0x0002, 0x0007, 0x0312, 0x0312, 0x0002, 0x0007, 0x0323, + 0x0323, 0x0003, 0x0305, 0x0000, 0x0308, 0x0001, 0x0007, 0x0331, + 0x0002, 0x030b, 0x030f, 0x0002, 0x0007, 0x0312, 0x0312, 0x0002, + 0x0007, 0x0323, 0x0323, 0x0003, 0x0317, 0x031a, 0x031f, 0x0001, + 0x0007, 0x0334, 0x0003, 0x0007, 0x0339, 0x0346, 0x034e, 0x0002, + 0x0322, 0x0326, 0x0002, 0x0007, 0x035b, 0x035b, 0x0002, 0x0007, + 0x036e, 0x036e, 0x0003, 0x032e, 0x0000, 0x0331, 0x0001, 0x0007, + 0x037e, 0x0002, 0x0334, 0x0338, 0x0002, 0x0007, 0x035b, 0x035b, + // Entry 4A80 - 4ABF + 0x0002, 0x0007, 0x036e, 0x036e, 0x0003, 0x0340, 0x0000, 0x0343, + 0x0001, 0x0007, 0x037e, 0x0002, 0x0346, 0x034a, 0x0002, 0x0007, + 0x035b, 0x035b, 0x0002, 0x0007, 0x036e, 0x036e, 0x0003, 0x0352, + 0x0355, 0x035a, 0x0001, 0x0007, 0x0383, 0x0003, 0x0007, 0x0386, + 0x0391, 0x0397, 0x0002, 0x035d, 0x0361, 0x0002, 0x0007, 0x03a2, + 0x03a2, 0x0002, 0x0007, 0x03b3, 0x03b3, 0x0003, 0x0369, 0x0000, + 0x036c, 0x0001, 0x0007, 0x03c1, 0x0002, 0x036f, 0x0373, 0x0002, + 0x0007, 0x03a2, 0x03a2, 0x0002, 0x0007, 0x03b3, 0x03b3, 0x0003, + // Entry 4AC0 - 4AFF + 0x037b, 0x0000, 0x037e, 0x0001, 0x0007, 0x03c1, 0x0002, 0x0381, + 0x0385, 0x0002, 0x0007, 0x03a2, 0x03a2, 0x0002, 0x0007, 0x03b3, + 0x03b3, 0x0004, 0x038e, 0x0391, 0x0396, 0x03a1, 0x0001, 0x0007, + 0x03c4, 0x0003, 0x0007, 0x03cc, 0x03dc, 0x03e7, 0x0002, 0x0399, + 0x039d, 0x0002, 0x0007, 0x03f7, 0x03f7, 0x0002, 0x0007, 0x040d, + 0x040d, 0x0001, 0x0007, 0x0420, 0x0004, 0x03a9, 0x0000, 0x03ac, + 0x03b7, 0x0001, 0x0007, 0x042e, 0x0002, 0x03af, 0x03b3, 0x0002, + 0x0007, 0x03f7, 0x03f7, 0x0002, 0x0007, 0x040d, 0x040d, 0x0001, + // Entry 4B00 - 4B3F + 0x0007, 0x0420, 0x0004, 0x03bf, 0x0000, 0x03c2, 0x03cd, 0x0001, + 0x0007, 0x042e, 0x0002, 0x03c5, 0x03c9, 0x0002, 0x0007, 0x03f7, + 0x03f7, 0x0002, 0x0007, 0x040d, 0x040d, 0x0001, 0x0007, 0x0420, + 0x0001, 0x03d2, 0x0001, 0x0007, 0x0436, 0x0001, 0x03d7, 0x0001, + 0x0007, 0x0446, 0x0001, 0x03dc, 0x0001, 0x0007, 0x0446, 0x0003, + 0x03e3, 0x03e6, 0x03eb, 0x0001, 0x0007, 0x044e, 0x0003, 0x0007, + 0x0453, 0x045b, 0x0463, 0x0002, 0x03ee, 0x03f2, 0x0002, 0x0007, + 0x0469, 0x0469, 0x0002, 0x0007, 0x047c, 0x047c, 0x0003, 0x03fa, + // Entry 4B40 - 4B7F + 0x0000, 0x03fd, 0x0001, 0x0007, 0x044e, 0x0002, 0x0400, 0x0404, + 0x0002, 0x0007, 0x0469, 0x0469, 0x0002, 0x0007, 0x047c, 0x047c, + 0x0003, 0x040c, 0x0000, 0x040f, 0x0001, 0x0007, 0x044e, 0x0002, + 0x0412, 0x0416, 0x0002, 0x0007, 0x0469, 0x0469, 0x0002, 0x0007, + 0x047c, 0x047c, 0x0001, 0x041c, 0x0001, 0x0007, 0x048c, 0x0001, + 0x0421, 0x0001, 0x0007, 0x048c, 0x0001, 0x0426, 0x0001, 0x0007, + 0x048c, 0x0001, 0x042b, 0x0001, 0x0007, 0x0498, 0x0001, 0x0430, + 0x0001, 0x0007, 0x04aa, 0x0001, 0x0435, 0x0001, 0x0007, 0x04aa, + // Entry 4B80 - 4BBF + 0x0001, 0x043a, 0x0001, 0x0007, 0x04b6, 0x0001, 0x043f, 0x0001, + 0x0007, 0x04cb, 0x0001, 0x0444, 0x0001, 0x0007, 0x04cb, 0x0003, + 0x0000, 0x044b, 0x0450, 0x0003, 0x0007, 0x04da, 0x04e8, 0x04f1, + 0x0002, 0x0453, 0x0457, 0x0002, 0x0007, 0x04ff, 0x04ff, 0x0002, + 0x0007, 0x0513, 0x0513, 0x0003, 0x0000, 0x045f, 0x0464, 0x0003, + 0x0007, 0x04da, 0x04e8, 0x04f1, 0x0002, 0x0467, 0x046b, 0x0002, + 0x0007, 0x04ff, 0x04ff, 0x0002, 0x0007, 0x0513, 0x0513, 0x0003, + 0x0000, 0x0473, 0x0478, 0x0003, 0x0007, 0x04da, 0x04e8, 0x04f1, + // Entry 4BC0 - 4BFF + 0x0002, 0x047b, 0x047f, 0x0002, 0x0007, 0x04ff, 0x04ff, 0x0002, + 0x0007, 0x0513, 0x0513, 0x0003, 0x0000, 0x0487, 0x048c, 0x0003, + 0x0007, 0x0524, 0x053a, 0x054b, 0x0002, 0x048f, 0x0493, 0x0002, + 0x0007, 0x057d, 0x0561, 0x0002, 0x0007, 0x0599, 0x0599, 0x0003, + 0x0000, 0x049b, 0x04a0, 0x0003, 0x0007, 0x0524, 0x053a, 0x054b, + 0x0002, 0x04a3, 0x04a7, 0x0002, 0x0007, 0x057d, 0x057d, 0x0002, + 0x0007, 0x0599, 0x0599, 0x0003, 0x0000, 0x04af, 0x04b4, 0x0003, + 0x0007, 0x05b2, 0x05bd, 0x05c3, 0x0002, 0x04b7, 0x04bb, 0x0002, + // Entry 4C00 - 4C3F + 0x0007, 0x057d, 0x057d, 0x0002, 0x0007, 0x0599, 0x0599, 0x0003, + 0x0000, 0x04c3, 0x04c8, 0x0003, 0x0007, 0x05ce, 0x05ed, 0x0607, + 0x0002, 0x04cb, 0x04cf, 0x0002, 0x0007, 0x0626, 0x0626, 0x0002, + 0x0007, 0x064b, 0x064b, 0x0003, 0x0000, 0x04d7, 0x04dc, 0x0003, + 0x0007, 0x066d, 0x067a, 0x0682, 0x0002, 0x04df, 0x04e3, 0x0002, + 0x0007, 0x0626, 0x0626, 0x0002, 0x0007, 0x064b, 0x064b, 0x0003, + 0x0000, 0x04eb, 0x04f0, 0x0003, 0x0007, 0x066d, 0x067a, 0x0682, + 0x0002, 0x04f3, 0x04f7, 0x0002, 0x0007, 0x0626, 0x0626, 0x0002, + // Entry 4C40 - 4C7F + 0x0007, 0x064b, 0x064b, 0x0003, 0x0000, 0x04ff, 0x0504, 0x0003, + 0x0007, 0x068f, 0x06a5, 0x06b6, 0x0002, 0x0507, 0x050b, 0x0002, + 0x0007, 0x06cc, 0x06cc, 0x0002, 0x0007, 0x06e8, 0x06e8, 0x0003, + 0x0000, 0x0513, 0x0518, 0x0003, 0x0007, 0x068f, 0x06a5, 0x06b6, + 0x0002, 0x051b, 0x051f, 0x0002, 0x0007, 0x06cc, 0x06cc, 0x0002, + 0x0007, 0x06e8, 0x06e8, 0x0003, 0x0000, 0x0527, 0x052c, 0x0003, + 0x0007, 0x0701, 0x070c, 0x0712, 0x0002, 0x052f, 0x0533, 0x0002, + 0x0007, 0x06cc, 0x06cc, 0x0002, 0x0007, 0x06e8, 0x06e8, 0x0003, + // Entry 4C80 - 4CBF + 0x0000, 0x053b, 0x0540, 0x0003, 0x0007, 0x071d, 0x0735, 0x0748, + 0x0002, 0x0543, 0x0547, 0x0002, 0x0007, 0x0760, 0x0760, 0x0002, + 0x0007, 0x077e, 0x077e, 0x0003, 0x0000, 0x054f, 0x0554, 0x0003, + 0x0007, 0x071d, 0x0735, 0x0748, 0x0002, 0x0557, 0x055b, 0x0002, + 0x0007, 0x0760, 0x0760, 0x0002, 0x0007, 0x077e, 0x077e, 0x0003, + 0x0000, 0x0563, 0x0568, 0x0003, 0x0007, 0x0799, 0x07a4, 0x07aa, + 0x0002, 0x056b, 0x056f, 0x0002, 0x0007, 0x0760, 0x0760, 0x0002, + 0x0007, 0x077e, 0x077e, 0x0003, 0x0000, 0x0577, 0x057c, 0x0003, + // Entry 4CC0 - 4CFF + 0x0007, 0x07b5, 0x07c4, 0x07ce, 0x0002, 0x057f, 0x0583, 0x0002, + 0x0007, 0x07dd, 0x07dd, 0x0002, 0x0007, 0x07f2, 0x07f2, 0x0003, + 0x0000, 0x058b, 0x0590, 0x0003, 0x0007, 0x07b5, 0x07c4, 0x07ce, + 0x0002, 0x0593, 0x0597, 0x0002, 0x0007, 0x07dd, 0x07dd, 0x0002, + 0x0007, 0x07f2, 0x07f2, 0x0003, 0x0000, 0x059f, 0x05a4, 0x0003, + 0x0007, 0x0804, 0x080e, 0x0813, 0x0002, 0x05a7, 0x05ab, 0x0002, + 0x0007, 0x07dd, 0x07dd, 0x0002, 0x0007, 0x07f2, 0x07f2, 0x0003, + 0x0000, 0x05b3, 0x05b8, 0x0003, 0x0007, 0x081d, 0x082e, 0x083a, + // Entry 4D00 - 4D3F + 0x0002, 0x05bb, 0x05bf, 0x0002, 0x0007, 0x084b, 0x084b, 0x0002, + 0x0007, 0x0862, 0x0862, 0x0003, 0x0000, 0x05c7, 0x05cc, 0x0003, + 0x0007, 0x081d, 0x082e, 0x083a, 0x0002, 0x05cf, 0x05d3, 0x0002, + 0x0007, 0x084b, 0x084b, 0x0002, 0x0007, 0x0862, 0x0862, 0x0003, + 0x0000, 0x05db, 0x05e0, 0x0003, 0x0007, 0x0876, 0x0881, 0x0887, + 0x0002, 0x05e3, 0x05e7, 0x0002, 0x0007, 0x084b, 0x084b, 0x0002, + 0x0007, 0x0862, 0x0862, 0x0001, 0x05ed, 0x0001, 0x0007, 0x0892, + 0x0001, 0x05f2, 0x0001, 0x0007, 0x0892, 0x0001, 0x05f7, 0x0001, + // Entry 4D40 - 4D7F + 0x0007, 0x0892, 0x0003, 0x05fe, 0x0601, 0x0605, 0x0001, 0x0007, + 0x0898, 0x0002, 0x0007, 0xffff, 0x089d, 0x0002, 0x0608, 0x060c, + 0x0002, 0x0007, 0x08a5, 0x08a5, 0x0002, 0x0007, 0x08b8, 0x08b8, + 0x0003, 0x0614, 0x0000, 0x0617, 0x0001, 0x0007, 0x08c8, 0x0002, + 0x061a, 0x061e, 0x0002, 0x0007, 0x08a5, 0x08a5, 0x0002, 0x0007, + 0x08b8, 0x08b8, 0x0003, 0x0626, 0x0000, 0x0629, 0x0001, 0x0007, + 0x08c8, 0x0002, 0x062c, 0x0630, 0x0002, 0x0007, 0x08a5, 0x08a5, + 0x0002, 0x0007, 0x08b8, 0x08b8, 0x0003, 0x0638, 0x063b, 0x063f, + // Entry 4D80 - 4DBF + 0x0001, 0x0007, 0x08cd, 0x0002, 0x0007, 0xffff, 0x08d6, 0x0002, + 0x0642, 0x0646, 0x0002, 0x0007, 0x08e2, 0x08e2, 0x0002, 0x0007, + 0x08f9, 0x08f9, 0x0003, 0x064e, 0x0000, 0x0651, 0x0001, 0x0007, + 0x090d, 0x0002, 0x0654, 0x0658, 0x0002, 0x0007, 0x08e2, 0x08e2, + 0x0002, 0x0007, 0x08f9, 0x08f9, 0x0003, 0x0660, 0x0000, 0x0663, + 0x0001, 0x0007, 0x090d, 0x0002, 0x0666, 0x066a, 0x0002, 0x0007, + 0x08e2, 0x08e2, 0x0002, 0x0007, 0x08f9, 0x08f9, 0x0003, 0x0672, + 0x0675, 0x0679, 0x0001, 0x0007, 0x0913, 0x0002, 0x0007, 0xffff, + // Entry 4DC0 - 4DFF + 0x091b, 0x0002, 0x067c, 0x0680, 0x0002, 0x0007, 0x0920, 0x0920, + 0x0002, 0x0007, 0x0936, 0x0936, 0x0003, 0x0688, 0x0000, 0x068b, + 0x0001, 0x0007, 0x0949, 0x0002, 0x068e, 0x0692, 0x0002, 0x0007, + 0x0920, 0x0920, 0x0002, 0x0007, 0x0936, 0x0936, 0x0003, 0x069a, + 0x0000, 0x069d, 0x0001, 0x0007, 0x0949, 0x0002, 0x06a0, 0x06a4, + 0x0002, 0x0007, 0x0920, 0x0920, 0x0002, 0x0007, 0x0936, 0x0936, + 0x0001, 0x06aa, 0x0001, 0x0007, 0x094e, 0x0001, 0x06af, 0x0001, + 0x0007, 0x095e, 0x0001, 0x06b4, 0x0001, 0x0007, 0x095e, 0x0004, + // Entry 4E00 - 4E3F + 0x06bc, 0x06c1, 0x06c6, 0x06d5, 0x0003, 0x0000, 0x1dc7, 0x1dd5, + 0x2137, 0x0003, 0x0007, 0x0966, 0x0971, 0x0980, 0x0002, 0x0000, + 0x06c9, 0x0003, 0x0000, 0x06d0, 0x06cd, 0x0001, 0x0007, 0x0994, + 0x0003, 0x0007, 0xffff, 0x09bd, 0x09d2, 0x0002, 0x0000, 0x06d8, + 0x0003, 0x0772, 0x0808, 0x06dc, 0x0094, 0x0007, 0x09e8, 0x09fc, + 0x0a14, 0x0a2a, 0x0a55, 0x0a9b, 0x0ad4, 0x0b1e, 0x0b8c, 0x0bf7, + 0x0c67, 0xffff, 0x0cc6, 0x0cfe, 0x0d42, 0x0d89, 0x0dd9, 0x0e1a, + 0x0e61, 0x0ec9, 0x0f36, 0x0f90, 0x0fe2, 0x1021, 0x1058, 0x1089, + // Entry 4E40 - 4E7F + 0x1096, 0x10b7, 0x10e6, 0x1111, 0x1142, 0x1161, 0x1199, 0x11cc, + 0x1203, 0x1234, 0x1248, 0x126f, 0x12b2, 0x12fa, 0x131f, 0x132c, + 0x1345, 0x136e, 0x13a3, 0x13ca, 0x141d, 0x1456, 0x1488, 0x14d8, + 0x1523, 0x1548, 0x1562, 0x1588, 0x1599, 0x15ba, 0x15eb, 0x1603, + 0x1633, 0x1690, 0x16d1, 0x16e1, 0x1702, 0x1746, 0x1781, 0x17a6, + 0x17b7, 0x17cb, 0x17db, 0x17f8, 0x1813, 0x183a, 0x1871, 0x18ad, + 0x18e8, 0xffff, 0x1915, 0x1930, 0x1958, 0x1981, 0x19a1, 0x19d4, + 0x19eb, 0x1a10, 0x1a3d, 0x1a61, 0x1a8c, 0x1a9d, 0x1aab, 0x1abb, + // Entry 4E80 - 4EBF + 0x1ae2, 0x1b0d, 0x1b38, 0x1b9a, 0x1bee, 0x1c2b, 0x1c54, 0x1c62, + 0x1c6f, 0x1c93, 0x1ce4, 0x1d31, 0x1d66, 0x1d72, 0x1da3, 0x1df9, + 0x1e38, 0x1e6d, 0x1e9a, 0x1ea7, 0x1ed1, 0x1f0a, 0x1f3f, 0x1f6c, + 0x1fa7, 0x1ffc, 0x200b, 0x2019, 0x2028, 0x2037, 0x2054, 0x208d, + 0x20c3, 0x20ea, 0x2102, 0x2112, 0x212a, 0x2141, 0x2150, 0x215d, + 0x2179, 0x21a2, 0x21b4, 0x21d0, 0x21f7, 0x221a, 0x2253, 0x2270, + 0x22af, 0x22f3, 0x231e, 0x2342, 0x2386, 0x23b5, 0x23c3, 0x23cf, + 0x23f7, 0x2437, 0x0094, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 4EC0 - 4EFF + 0x0a40, 0x0a8c, 0x0ac6, 0x0afd, 0x0b6d, 0x0bd7, 0x0c44, 0xffff, + 0x0cba, 0x0ceb, 0x0d31, 0x0d71, 0x0dc6, 0x0e0c, 0x0e45, 0x0ea6, + 0x0f1c, 0x0f77, 0x0fcf, 0x1015, 0x1046, 0xffff, 0xffff, 0x10a6, + 0xffff, 0x10ff, 0xffff, 0x1152, 0x118c, 0x11c0, 0x11f1, 0xffff, + 0xffff, 0x125e, 0x129e, 0x12ee, 0xffff, 0xffff, 0xffff, 0x135a, + 0xffff, 0x13b2, 0x1407, 0xffff, 0x1473, 0x14bf, 0x1517, 0xffff, + 0xffff, 0xffff, 0xffff, 0x15a8, 0xffff, 0xffff, 0x1618, 0x1676, + 0xffff, 0xffff, 0x16ef, 0x1735, 0x1775, 0xffff, 0xffff, 0xffff, + // Entry 4F00 - 4F3F + 0xffff, 0xffff, 0xffff, 0x182d, 0x1861, 0x189e, 0x18d8, 0xffff, + 0xffff, 0xffff, 0x194a, 0xffff, 0x198e, 0xffff, 0xffff, 0x1a00, + 0xffff, 0x1a52, 0xffff, 0xffff, 0xffff, 0xffff, 0x1ad3, 0xffff, + 0x1b1b, 0x1b7f, 0x1bdd, 0x1c1d, 0xffff, 0xffff, 0xffff, 0x1c7c, + 0x1cce, 0x1d1d, 0xffff, 0xffff, 0x1d88, 0x1de6, 0x1e2c, 0x1e5d, + 0xffff, 0xffff, 0x1ec1, 0x1efe, 0x1f2f, 0xffff, 0x1f83, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2045, 0x207f, 0x20b6, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x216b, 0xffff, + // Entry 4F40 - 4F7F + 0xffff, 0x21c3, 0xffff, 0x2204, 0xffff, 0x2261, 0x229b, 0x22e4, + 0xffff, 0x232f, 0x2375, 0xffff, 0xffff, 0xffff, 0x23e8, 0x2422, + 0x0094, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0x0a73, 0x0ab3, + 0x0aeb, 0x0b48, 0x0bb4, 0x0c20, 0x0c93, 0xffff, 0x0cdb, 0x0d1a, + 0x0d5c, 0x0daa, 0x0df5, 0x0e31, 0x0e86, 0x0ef5, 0x0f59, 0x0fb2, + 0x0ffe, 0x1036, 0x1073, 0xffff, 0xffff, 0x10d1, 0xffff, 0x112c, + 0xffff, 0x1179, 0x11af, 0x11e1, 0x121e, 0xffff, 0xffff, 0x1289, + 0x12cf, 0x130f, 0xffff, 0xffff, 0xffff, 0x138b, 0xffff, 0x13eb, + // Entry 4F80 - 4FBF + 0x143c, 0xffff, 0x14a6, 0x14fa, 0x1538, 0xffff, 0xffff, 0xffff, + 0xffff, 0x15d5, 0xffff, 0xffff, 0x1657, 0x16b3, 0xffff, 0xffff, + 0x171e, 0x1760, 0x1796, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1850, 0x188a, 0x18c5, 0x1901, 0xffff, 0xffff, 0xffff, + 0x196f, 0xffff, 0x19bd, 0xffff, 0xffff, 0x1a29, 0xffff, 0x1a79, + 0xffff, 0xffff, 0xffff, 0xffff, 0x1afa, 0xffff, 0x1b5e, 0x1bbe, + 0x1c08, 0x1c42, 0xffff, 0xffff, 0xffff, 0x1cb3, 0x1d03, 0x1d4e, + 0xffff, 0xffff, 0x1dc7, 0x1e15, 0x1e4d, 0x1e86, 0xffff, 0xffff, + // Entry 4FC0 - 4FFF + 0x1eea, 0x1f1f, 0x1f58, 0xffff, 0x1fd4, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x206c, 0x20a4, 0x20d9, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2190, 0xffff, 0xffff, 0x21e6, + 0xffff, 0x2239, 0xffff, 0x2288, 0x22cc, 0x230b, 0xffff, 0x235e, + 0x23a0, 0xffff, 0xffff, 0xffff, 0x240f, 0x2455, 0x0001, 0x0002, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, + 0x0025, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0014, + 0x0000, 0x0000, 0x0004, 0x0022, 0x001c, 0x0019, 0x001f, 0x0001, + // Entry 5000 - 503F + 0x0007, 0x0072, 0x0001, 0x0007, 0x0083, 0x0001, 0x0007, 0x008f, + 0x0001, 0x0007, 0x0099, 0x0008, 0x002e, 0x0075, 0x00cc, 0x00e0, + 0x01db, 0x01f5, 0x0206, 0x0000, 0x0002, 0x0031, 0x0053, 0x0003, + 0x0035, 0x0000, 0x0044, 0x000d, 0x0008, 0xffff, 0x0000, 0x0007, + 0x000e, 0x0015, 0x001c, 0x0023, 0x002a, 0x0031, 0x0038, 0x003f, + 0x0046, 0x004d, 0x000d, 0x0008, 0xffff, 0x0054, 0x0061, 0x006e, + 0x0077, 0x001c, 0x0082, 0x008b, 0x0094, 0x00a1, 0x00b2, 0x00c1, + 0x00ce, 0x0003, 0x0057, 0x0000, 0x0066, 0x000d, 0x0008, 0xffff, + // Entry 5040 - 507F + 0x0000, 0x0007, 0x000e, 0x0015, 0x001c, 0x0023, 0x002a, 0x0031, + 0x0038, 0x003f, 0x0046, 0x004d, 0x000d, 0x0008, 0xffff, 0x00db, + 0x00e8, 0x00f5, 0x00fe, 0x0109, 0x0110, 0x0119, 0x0122, 0x012f, + 0x0140, 0x014f, 0x015c, 0x0002, 0x0078, 0x00a2, 0x0005, 0x007e, + 0x0087, 0x0099, 0x0000, 0x0090, 0x0007, 0x0008, 0x0169, 0x016d, + 0x0174, 0x017b, 0x017f, 0x0186, 0x018a, 0x0007, 0x0000, 0x003f, + 0x0033, 0x0035, 0x0037, 0x0039, 0x003b, 0x003d, 0x0007, 0x0008, + 0x0169, 0x016d, 0x0174, 0x017b, 0x017f, 0x0186, 0x018a, 0x0007, + // Entry 5080 - 50BF + 0x0008, 0x018e, 0x0199, 0x01b1, 0x01cf, 0x01e0, 0x01f6, 0x01ff, + 0x0005, 0x00a8, 0x00b1, 0x00c3, 0x0000, 0x00ba, 0x0007, 0x0008, + 0x0169, 0x016d, 0x0174, 0x017b, 0x017f, 0x0186, 0x018a, 0x0007, + 0x0000, 0x003f, 0x0033, 0x0035, 0x0037, 0x0039, 0x003b, 0x003d, + 0x0007, 0x0008, 0x0169, 0x016d, 0x0174, 0x017b, 0x017f, 0x0186, + 0x018a, 0x0007, 0x0008, 0x018e, 0x0199, 0x01b1, 0x01cf, 0x01e0, + 0x01f6, 0x01ff, 0x0001, 0x00ce, 0x0003, 0x00d2, 0x0000, 0x00d9, + 0x0005, 0x0008, 0xffff, 0x020a, 0x0217, 0x0224, 0x0231, 0x0005, + // Entry 50C0 - 50FF + 0x0008, 0xffff, 0x023e, 0x0254, 0x026a, 0x0280, 0x0002, 0x00e3, + 0x0165, 0x0003, 0x00e7, 0x0111, 0x013b, 0x000b, 0x00f6, 0x00fc, + 0x00f3, 0x00ff, 0x0105, 0x0108, 0x010b, 0x00f9, 0x0102, 0x0000, + 0x010e, 0x0001, 0x0008, 0x0296, 0x0001, 0x0008, 0x02a7, 0x0001, + 0x0008, 0x02ac, 0x0001, 0x0008, 0x02bb, 0x0001, 0x0008, 0x02c0, + 0x0001, 0x0008, 0x02c9, 0x0001, 0x0008, 0x02d4, 0x0001, 0x0008, + 0x02e1, 0x0001, 0x0008, 0x02f4, 0x0001, 0x0008, 0x02ff, 0x000b, + 0x0120, 0x0126, 0x011d, 0x0129, 0x012f, 0x0132, 0x0135, 0x0123, + // Entry 5100 - 513F + 0x012c, 0x0000, 0x0138, 0x0001, 0x0008, 0x0296, 0x0001, 0x0008, + 0x0308, 0x0001, 0x0008, 0x030b, 0x0001, 0x0008, 0x030e, 0x0001, + 0x0008, 0x02c0, 0x0001, 0x0008, 0x02c9, 0x0001, 0x0008, 0x02d4, + 0x0001, 0x0008, 0x02e1, 0x0001, 0x0008, 0x02f4, 0x0001, 0x0008, + 0x02ff, 0x000b, 0x014a, 0x0150, 0x0147, 0x0153, 0x0159, 0x015c, + 0x015f, 0x014d, 0x0156, 0x0000, 0x0162, 0x0001, 0x0008, 0x0296, + 0x0001, 0x0008, 0x02a7, 0x0001, 0x0008, 0x02ac, 0x0001, 0x0008, + 0x02bb, 0x0001, 0x0008, 0x02c0, 0x0001, 0x0008, 0x02c9, 0x0001, + // Entry 5140 - 517F + 0x0008, 0x02d4, 0x0001, 0x0008, 0x02e1, 0x0001, 0x0008, 0x02f4, + 0x0001, 0x0008, 0x02ff, 0x0003, 0x0169, 0x018d, 0x01b1, 0x000b, + 0x0000, 0x0000, 0x0175, 0x017b, 0x0181, 0x0184, 0x0187, 0x0178, + 0x017e, 0x0000, 0x018a, 0x0001, 0x0008, 0x0296, 0x0001, 0x0008, + 0x02ac, 0x0001, 0x0008, 0x02c0, 0x0001, 0x0008, 0x02c9, 0x0001, + 0x0008, 0x02d4, 0x0001, 0x0008, 0x02e1, 0x0001, 0x0008, 0x02f4, + 0x0001, 0x0008, 0x02ff, 0x000b, 0x0000, 0x0000, 0x0199, 0x019f, + 0x01a5, 0x01a8, 0x01ab, 0x019c, 0x01a2, 0x0000, 0x01ae, 0x0001, + // Entry 5180 - 51BF + 0x0008, 0x0296, 0x0001, 0x0008, 0x02ac, 0x0001, 0x0008, 0x02c0, + 0x0001, 0x0008, 0x02c9, 0x0001, 0x0008, 0x02d4, 0x0001, 0x0008, + 0x02e1, 0x0001, 0x0008, 0x02f4, 0x0001, 0x0008, 0x02ff, 0x000b, + 0x01c0, 0x01c6, 0x01bd, 0x01c9, 0x01cf, 0x01d2, 0x01d5, 0x01c3, + 0x01cc, 0x0000, 0x01d8, 0x0001, 0x0008, 0x0296, 0x0001, 0x0008, + 0x02a7, 0x0001, 0x0008, 0x02ac, 0x0001, 0x0008, 0x02bb, 0x0001, + 0x0008, 0x02c0, 0x0001, 0x0008, 0x02c9, 0x0001, 0x0008, 0x02d4, + 0x0001, 0x0008, 0x02e1, 0x0001, 0x0008, 0x02f4, 0x0001, 0x0008, + // Entry 51C0 - 51FF + 0x02ff, 0x0003, 0x01ea, 0x0000, 0x01df, 0x0002, 0x01e2, 0x01e6, + 0x0002, 0x0008, 0x0311, 0x0352, 0x0002, 0x0008, 0x032f, 0x0362, + 0x0002, 0x01ed, 0x01f1, 0x0002, 0x0008, 0x0374, 0x0385, 0x0002, + 0x0008, 0x037b, 0x038c, 0x0004, 0x0203, 0x01fd, 0x01fa, 0x0200, + 0x0001, 0x0007, 0x02da, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, + 0x003c, 0x0001, 0x0007, 0x02e9, 0x0004, 0x0214, 0x020e, 0x020b, + 0x0211, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, + 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0002, 0x0003, 0x00e9, + // Entry 5200 - 523F + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, + 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, + 0x0000, 0x0000, 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, + 0x0002, 0x0000, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x0044, + 0x0001, 0x0002, 0x004f, 0x0008, 0x002f, 0x0066, 0x008b, 0x009f, + 0x00b7, 0x00c7, 0x00d8, 0x0000, 0x0002, 0x0032, 0x0054, 0x0003, + 0x0036, 0x0000, 0x0045, 0x000d, 0x0008, 0xffff, 0x0393, 0x0398, + 0x039c, 0x03a0, 0x03a4, 0x03a8, 0x03ac, 0x03b0, 0x03b4, 0x03b8, + // Entry 5240 - 527F + 0x03bc, 0x03c0, 0x000d, 0x0008, 0xffff, 0x03c5, 0x03cf, 0x03d9, + 0x03e2, 0x03e9, 0x03f2, 0x03ff, 0x0407, 0x040f, 0x0419, 0x0422, + 0x042d, 0x0002, 0x0000, 0x0057, 0x000d, 0x0000, 0xffff, 0x1ffe, + 0x1f9a, 0x1f9a, 0x1f9a, 0x1f9a, 0x213b, 0x1f96, 0x213b, 0x2008, + 0x213d, 0x1f9a, 0x200a, 0x0002, 0x0069, 0x007f, 0x0003, 0x006d, + 0x0000, 0x0076, 0x0007, 0x0008, 0x043e, 0x0443, 0x0447, 0x044b, + 0x0450, 0x0455, 0x045b, 0x0007, 0x0008, 0x045f, 0x046d, 0x047f, + 0x048a, 0x0497, 0x04a4, 0x04b1, 0x0002, 0x0000, 0x0082, 0x0007, + // Entry 5280 - 52BF + 0x0000, 0x1f96, 0x1f96, 0x2010, 0x213f, 0x1f9a, 0x1ffe, 0x2142, + 0x0001, 0x008d, 0x0003, 0x0091, 0x0000, 0x0098, 0x0005, 0x0008, + 0xffff, 0x04bd, 0x04c2, 0x04c7, 0x04cc, 0x0005, 0x0008, 0xffff, + 0x04d1, 0x04e7, 0x050a, 0x052b, 0x0001, 0x00a1, 0x0003, 0x00a5, + 0x0000, 0x00ae, 0x0002, 0x00a8, 0x00ab, 0x0001, 0x0008, 0x054c, + 0x0001, 0x0008, 0x055a, 0x0002, 0x00b1, 0x00b4, 0x0001, 0x0008, + 0x054c, 0x0001, 0x0008, 0x055a, 0x0003, 0x00c1, 0x0000, 0x00bb, + 0x0001, 0x00bd, 0x0002, 0x0008, 0x0566, 0x057e, 0x0001, 0x00c3, + // Entry 52C0 - 52FF + 0x0002, 0x0008, 0x0595, 0x059b, 0x0004, 0x00d5, 0x00cf, 0x00cc, + 0x00d2, 0x0001, 0x0002, 0x0025, 0x0001, 0x0002, 0x0033, 0x0001, + 0x0002, 0x0282, 0x0001, 0x0002, 0x028b, 0x0004, 0x00e6, 0x00e0, + 0x00dd, 0x00e3, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, + 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0040, 0x012a, + 0x0000, 0x0000, 0x012f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0134, 0x0000, 0x0000, 0x0139, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x013e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0149, + // Entry 5300 - 533F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x014e, 0x0000, 0x0153, 0x0000, 0x0000, + 0x0158, 0x0000, 0x0000, 0x015d, 0x0000, 0x0000, 0x0162, 0x0001, + 0x012c, 0x0001, 0x0008, 0x05a1, 0x0001, 0x0131, 0x0001, 0x0008, + 0x05a6, 0x0001, 0x0136, 0x0001, 0x0008, 0x05ad, 0x0001, 0x013b, + 0x0001, 0x0008, 0x05b2, 0x0002, 0x0141, 0x0144, 0x0001, 0x0008, + // Entry 5340 - 537F + 0x05bc, 0x0003, 0x0008, 0x05c1, 0x05c9, 0x05d0, 0x0001, 0x014b, + 0x0001, 0x0008, 0x05d6, 0x0001, 0x0150, 0x0001, 0x0008, 0x05ea, + 0x0001, 0x0155, 0x0001, 0x0008, 0x05f4, 0x0001, 0x015a, 0x0001, + 0x0008, 0x05fc, 0x0001, 0x015f, 0x0001, 0x0008, 0x0602, 0x0001, + 0x0164, 0x0001, 0x0008, 0x060f, 0x0003, 0x0004, 0x01d5, 0x0770, + 0x0008, 0x000d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0027, + 0x0052, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, + 0x0000, 0x9006, 0x0004, 0x0024, 0x001e, 0x001b, 0x0021, 0x0001, + // Entry 5380 - 53BF + 0x0006, 0x000d, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, + 0x0001, 0x0008, 0x0620, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0030, 0x0000, 0x0041, 0x0004, 0x003e, 0x0038, 0x0035, + 0x003b, 0x0001, 0x0006, 0x000d, 0x0001, 0x0002, 0x0010, 0x0001, + 0x0008, 0x0627, 0x0001, 0x0008, 0x062f, 0x0004, 0x004f, 0x0049, + 0x0046, 0x004c, 0x0001, 0x0008, 0x063b, 0x0001, 0x0008, 0x063b, + 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, 0x005b, + 0x00c0, 0x0117, 0x014c, 0x018d, 0x01a2, 0x01b3, 0x01c4, 0x0002, + // Entry 53C0 - 53FF + 0x005e, 0x008f, 0x0003, 0x0062, 0x0071, 0x0080, 0x000d, 0x0008, + 0xffff, 0x0648, 0x064f, 0x0656, 0x065d, 0x0664, 0x066b, 0x0672, + 0x0679, 0x0680, 0x0687, 0x068e, 0x0695, 0x000d, 0x0008, 0xffff, + 0x069c, 0x069f, 0x069c, 0x06a2, 0x06a5, 0x06a8, 0x069f, 0x06ab, + 0x06ae, 0x06a2, 0x069f, 0x069c, 0x000d, 0x0008, 0xffff, 0x06b1, + 0x06c2, 0x06cf, 0x06e0, 0x0664, 0x06f3, 0x0702, 0x070f, 0x071c, + 0x072b, 0x0742, 0x0755, 0x0003, 0x0093, 0x00a2, 0x00b1, 0x000d, + 0x0008, 0xffff, 0x0648, 0x064f, 0x0656, 0x065d, 0x001c, 0x066b, + // Entry 5400 - 543F + 0x0672, 0x0679, 0x0680, 0x0687, 0x068e, 0x0695, 0x000d, 0x0008, + 0xffff, 0x069c, 0x069f, 0x069c, 0x06a2, 0x06a5, 0x06a8, 0x069f, + 0x06ab, 0x06ae, 0x06a2, 0x069f, 0x069c, 0x000d, 0x0008, 0xffff, + 0x0762, 0x0773, 0x077c, 0x078b, 0x001c, 0x079c, 0x07ab, 0x07b8, + 0x07c7, 0x07d8, 0x07ed, 0x07fe, 0x0002, 0x00c3, 0x00ed, 0x0005, + 0x00c9, 0x00d2, 0x00e4, 0x0000, 0x00db, 0x0007, 0x0008, 0x080d, + 0x0812, 0x0817, 0x081c, 0x0821, 0x0826, 0x082b, 0x0007, 0x0008, + 0x0830, 0x030e, 0x0308, 0x069c, 0x06a8, 0x030e, 0x069c, 0x0007, + // Entry 5440 - 547F + 0x0008, 0x080d, 0x0812, 0x0817, 0x081c, 0x0821, 0x0826, 0x082b, + 0x0007, 0x0008, 0x0833, 0x0842, 0x0857, 0x0866, 0x0873, 0x0880, + 0x088f, 0x0005, 0x00f3, 0x00fc, 0x010e, 0x0000, 0x0105, 0x0007, + 0x0008, 0x080d, 0x0812, 0x0817, 0x081c, 0x0821, 0x0826, 0x082b, + 0x0007, 0x0008, 0x0830, 0x030e, 0x0308, 0x069c, 0x06a8, 0x030e, + 0x069c, 0x0007, 0x0008, 0x080d, 0x0812, 0x0817, 0x081c, 0x0821, + 0x0826, 0x082b, 0x0007, 0x0008, 0x0833, 0x0842, 0x0857, 0x0866, + 0x0873, 0x0880, 0x088f, 0x0002, 0x011a, 0x0133, 0x0003, 0x011e, + // Entry 5480 - 54BF + 0x0125, 0x012c, 0x0005, 0x0008, 0xffff, 0x089c, 0x08a9, 0x08b6, + 0x08c3, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, + 0x0005, 0x0008, 0xffff, 0x08d0, 0x08e6, 0x08fc, 0x0912, 0x0003, + 0x0137, 0x013e, 0x0145, 0x0005, 0x0008, 0xffff, 0x089c, 0x08a9, + 0x08b6, 0x08c3, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x0039, 0x0005, 0x0008, 0xffff, 0x08d0, 0x08e6, 0x08fc, 0x0912, + 0x0002, 0x014f, 0x016e, 0x0003, 0x0153, 0x015c, 0x0165, 0x0002, + 0x0156, 0x0159, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, + // Entry 54C0 - 54FF + 0x0002, 0x015f, 0x0162, 0x0001, 0x0008, 0x0928, 0x0001, 0x0008, + 0x092b, 0x0002, 0x0168, 0x016b, 0x0001, 0x0000, 0x04ef, 0x0001, + 0x0000, 0x04f2, 0x0003, 0x0172, 0x017b, 0x0184, 0x0002, 0x0175, + 0x0178, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0002, + 0x017e, 0x0181, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, + 0x0002, 0x0187, 0x018a, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, + 0x04f2, 0x0003, 0x019c, 0x0000, 0x0191, 0x0002, 0x0194, 0x0198, + 0x0002, 0x0008, 0x092e, 0x0970, 0x0002, 0x0008, 0x0959, 0x099b, + // Entry 5500 - 553F + 0x0001, 0x019e, 0x0002, 0x0008, 0x09ad, 0x09b9, 0x0004, 0x01b0, + 0x01aa, 0x01a7, 0x01ad, 0x0001, 0x0008, 0x09c0, 0x0001, 0x0008, + 0x09d5, 0x0001, 0x0008, 0x09e4, 0x0001, 0x0008, 0x09eb, 0x0004, + 0x01c1, 0x01bb, 0x01b8, 0x01be, 0x0001, 0x0008, 0x09f3, 0x0001, + 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, + 0x0004, 0x01d2, 0x01cc, 0x01c9, 0x01cf, 0x0001, 0x0008, 0x063b, + 0x0001, 0x0008, 0x063b, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, + 0x022e, 0x0042, 0x0218, 0x021d, 0x0222, 0x0227, 0x0246, 0x0260, + // Entry 5540 - 557F + 0x027a, 0x0299, 0x02b3, 0x02cd, 0x02ec, 0x0306, 0x0320, 0x0343, + 0x0361, 0x037f, 0x0384, 0x0389, 0x038e, 0x03af, 0x03c9, 0x03e3, + 0x03e8, 0x03ed, 0x03f2, 0x03f7, 0x03fc, 0x0401, 0x0406, 0x040b, + 0x0410, 0x042c, 0x0448, 0x0464, 0x0480, 0x049c, 0x04b8, 0x04d4, + 0x04f0, 0x050c, 0x0528, 0x0544, 0x0560, 0x057c, 0x0598, 0x05b4, + 0x05d0, 0x05ec, 0x0608, 0x0624, 0x0640, 0x065c, 0x0661, 0x0666, + 0x066b, 0x0689, 0x06a3, 0x06bd, 0x06db, 0x06f5, 0x070f, 0x072d, + 0x0747, 0x0761, 0x0766, 0x076b, 0x0001, 0x021a, 0x0001, 0x0008, + // Entry 5580 - 55BF + 0x0a02, 0x0001, 0x021f, 0x0001, 0x0008, 0x0a02, 0x0001, 0x0224, + 0x0001, 0x0008, 0x0a02, 0x0003, 0x022b, 0x022e, 0x0233, 0x0001, + 0x0008, 0x0a09, 0x0003, 0x0008, 0x0a10, 0x0a2d, 0x0a46, 0x0002, + 0x0236, 0x023e, 0x0006, 0x0008, 0x0aa9, 0x0a67, 0xffff, 0xffff, + 0x0a7b, 0x0a91, 0x0006, 0x0008, 0x0b01, 0x0abf, 0xffff, 0xffff, + 0x0ad3, 0x0ae9, 0x0003, 0x024a, 0x0000, 0x024d, 0x0001, 0x0008, + 0x0b17, 0x0002, 0x0250, 0x0258, 0x0006, 0x0008, 0x0b1b, 0x0b1b, + 0xffff, 0xffff, 0x0b1b, 0x0b1b, 0x0006, 0x0008, 0x0b2c, 0x0b2c, + // Entry 55C0 - 55FF + 0xffff, 0xffff, 0x0b2c, 0x0b2c, 0x0003, 0x0264, 0x0000, 0x0267, + 0x0001, 0x0008, 0x0b17, 0x0002, 0x026a, 0x0272, 0x0006, 0x0008, + 0x0b1b, 0x0b1b, 0xffff, 0xffff, 0x0b1b, 0x0b1b, 0x0006, 0x0008, + 0x0b2c, 0x0b2c, 0xffff, 0xffff, 0x0b2c, 0x0b2c, 0x0003, 0x027e, + 0x0281, 0x0286, 0x0001, 0x0008, 0x0b3d, 0x0003, 0x0008, 0x0b4c, + 0x0b6f, 0x0b8e, 0x0002, 0x0289, 0x0291, 0x0006, 0x0008, 0x0c0f, + 0x0bb5, 0xffff, 0xffff, 0x0bd1, 0x0bef, 0x0006, 0x0008, 0x0c87, + 0x0c2d, 0xffff, 0xffff, 0x0c49, 0x0c67, 0x0003, 0x029d, 0x0000, + // Entry 5600 - 563F + 0x02a0, 0x0001, 0x0008, 0x0ca5, 0x0002, 0x02a3, 0x02ab, 0x0006, + 0x0008, 0x0cab, 0x0cab, 0xffff, 0xffff, 0x0cab, 0x0cab, 0x0006, + 0x0008, 0x0cbe, 0x0cbe, 0xffff, 0xffff, 0x0cbe, 0x0cbe, 0x0003, + 0x02b7, 0x0000, 0x02ba, 0x0001, 0x0008, 0x0ca5, 0x0002, 0x02bd, + 0x02c5, 0x0006, 0x0008, 0x0cab, 0x0cab, 0xffff, 0xffff, 0x0cab, + 0x0cab, 0x0006, 0x0008, 0x0cbe, 0x0cbe, 0xffff, 0xffff, 0x0cbe, + 0x0cbe, 0x0003, 0x02d1, 0x02d4, 0x02d9, 0x0001, 0x0008, 0x0cd1, + 0x0003, 0x0008, 0x0cdc, 0x0cfb, 0x0d16, 0x0002, 0x02dc, 0x02e4, + // Entry 5640 - 567F + 0x0006, 0x0008, 0x0d87, 0x0d39, 0xffff, 0xffff, 0x0d51, 0x0d6b, + 0x0006, 0x0008, 0x0def, 0x0da1, 0xffff, 0xffff, 0x0db9, 0x0dd3, + 0x0003, 0x02f0, 0x0000, 0x02f3, 0x0001, 0x0008, 0x0e09, 0x0002, + 0x02f6, 0x02fe, 0x0006, 0x0008, 0x0e11, 0x0e11, 0xffff, 0xffff, + 0x0e11, 0x0e11, 0x0006, 0x0008, 0x0e26, 0x0e26, 0xffff, 0xffff, + 0x0e26, 0x0e26, 0x0003, 0x030a, 0x0000, 0x030d, 0x0001, 0x0008, + 0x0e09, 0x0002, 0x0310, 0x0318, 0x0006, 0x0008, 0x0e11, 0x0e11, + 0xffff, 0xffff, 0x0e11, 0x0e11, 0x0006, 0x0008, 0x0e26, 0x0e26, + // Entry 5680 - 56BF + 0xffff, 0xffff, 0x0e26, 0x0e26, 0x0004, 0x0325, 0x0328, 0x032d, + 0x0340, 0x0001, 0x0008, 0x0e3b, 0x0003, 0x0008, 0x0e42, 0x0e61, + 0x0e7c, 0x0002, 0x0330, 0x0338, 0x0006, 0x0008, 0x0eed, 0x0e9f, + 0xffff, 0xffff, 0x0ebb, 0x0ed3, 0x0006, 0x0008, 0x0f53, 0x0f05, + 0xffff, 0xffff, 0x0f21, 0x0f39, 0x0001, 0x0008, 0x0f6b, 0x0004, + 0x0348, 0x0000, 0x034b, 0x035e, 0x0001, 0x0008, 0x0e3b, 0x0002, + 0x034e, 0x0356, 0x0006, 0x0008, 0x0f7e, 0x0f7e, 0xffff, 0xffff, + 0x0f7e, 0x0f7e, 0x0006, 0x0008, 0x0f92, 0x0f92, 0xffff, 0xffff, + // Entry 56C0 - 56FF + 0x0f92, 0x0f92, 0x0001, 0x0008, 0x0f6b, 0x0004, 0x0366, 0x0000, + 0x0369, 0x037c, 0x0001, 0x0008, 0x0e3b, 0x0002, 0x036c, 0x0374, + 0x0006, 0x0008, 0x0f7e, 0x0f7e, 0xffff, 0xffff, 0x0f7e, 0x0f7e, + 0x0006, 0x0008, 0x0f92, 0x0f92, 0xffff, 0xffff, 0x0f92, 0x0f92, + 0x0001, 0x0008, 0x0f6b, 0x0001, 0x0381, 0x0001, 0x0008, 0x0fa6, + 0x0001, 0x0386, 0x0001, 0x0008, 0x0fa6, 0x0001, 0x038b, 0x0001, + 0x0008, 0x0fa6, 0x0003, 0x0392, 0x0395, 0x039c, 0x0001, 0x0008, + 0x0fc2, 0x0005, 0x0008, 0x0fe0, 0x0feb, 0x0ff6, 0x0fcd, 0x1003, + // Entry 5700 - 573F + 0x0002, 0x039f, 0x03a7, 0x0006, 0x0008, 0x105c, 0x101a, 0xffff, + 0xffff, 0x1032, 0x1046, 0x0006, 0x0008, 0x10b2, 0x1070, 0xffff, + 0xffff, 0x1088, 0x109c, 0x0003, 0x03b3, 0x0000, 0x03b6, 0x0001, + 0x0008, 0x0fc2, 0x0002, 0x03b9, 0x03c1, 0x0006, 0x0008, 0x105c, + 0x101a, 0xffff, 0xffff, 0x1032, 0x1046, 0x0006, 0x0008, 0x10b2, + 0x1070, 0xffff, 0xffff, 0x1088, 0x109c, 0x0003, 0x03cd, 0x0000, + 0x03d0, 0x0001, 0x0008, 0x10c6, 0x0002, 0x03d3, 0x03db, 0x0006, + 0x0008, 0x105c, 0x101a, 0xffff, 0xffff, 0x1032, 0x1046, 0x0006, + // Entry 5740 - 577F + 0x0008, 0x10b2, 0x1070, 0xffff, 0xffff, 0x1088, 0x109c, 0x0001, + 0x03e5, 0x0001, 0x0008, 0x10ca, 0x0001, 0x03ea, 0x0001, 0x0008, + 0x10ca, 0x0001, 0x03ef, 0x0001, 0x0008, 0x10ca, 0x0001, 0x03f4, + 0x0001, 0x0008, 0x10de, 0x0001, 0x03f9, 0x0001, 0x0008, 0x10de, + 0x0001, 0x03fe, 0x0001, 0x0008, 0x10de, 0x0001, 0x0403, 0x0001, + 0x0008, 0x10f4, 0x0001, 0x0408, 0x0001, 0x0008, 0x10f4, 0x0001, + 0x040d, 0x0001, 0x0008, 0x10f4, 0x0003, 0x0000, 0x0414, 0x0419, + 0x0003, 0x0008, 0x110c, 0x112d, 0x1148, 0x0002, 0x041c, 0x0424, + // Entry 5780 - 57BF + 0x0006, 0x0008, 0x1189, 0x116d, 0xffff, 0xffff, 0x1189, 0x11a5, + 0x0006, 0x0008, 0x11dd, 0x11c1, 0xffff, 0xffff, 0x11dd, 0x11f9, + 0x0003, 0x0000, 0x0430, 0x0435, 0x0003, 0x0008, 0x1215, 0x122c, + 0x123d, 0x0002, 0x0438, 0x0440, 0x0006, 0x0008, 0x1189, 0x116d, + 0xffff, 0xffff, 0x1189, 0x11a5, 0x0006, 0x0008, 0x11dd, 0x11c1, + 0xffff, 0xffff, 0x11dd, 0x11f9, 0x0003, 0x0000, 0x044c, 0x0451, + 0x0003, 0x0008, 0x1215, 0x122c, 0x123d, 0x0002, 0x0454, 0x045c, + 0x0006, 0x0008, 0x1189, 0x116d, 0xffff, 0xffff, 0x1189, 0x11a5, + // Entry 57C0 - 57FF + 0x0006, 0x0008, 0x11dd, 0x11c1, 0xffff, 0xffff, 0x11dd, 0x11f9, + 0x0003, 0x0000, 0x0468, 0x046d, 0x0003, 0x0008, 0x1258, 0x127d, + 0x129e, 0x0002, 0x0470, 0x0478, 0x0006, 0x0008, 0x132f, 0x12c7, + 0xffff, 0xffff, 0x12e9, 0x130b, 0x0006, 0x0008, 0x13b9, 0x1351, + 0xffff, 0xffff, 0x1373, 0x1395, 0x0003, 0x0000, 0x0484, 0x0489, + 0x0003, 0x0008, 0x13db, 0x13f0, 0x1401, 0x0002, 0x048c, 0x0494, + 0x0006, 0x0008, 0x132f, 0x12c7, 0xffff, 0xffff, 0x12e9, 0x130b, + 0x0006, 0x0008, 0x13b9, 0x1351, 0xffff, 0xffff, 0x1373, 0x1395, + // Entry 5800 - 583F + 0x0003, 0x0000, 0x04a0, 0x04a5, 0x0003, 0x0008, 0x13db, 0x13f0, + 0x1401, 0x0002, 0x04a8, 0x04b0, 0x0006, 0x0008, 0x132f, 0x12c7, + 0xffff, 0xffff, 0x12e9, 0x130b, 0x0006, 0x0008, 0x13b9, 0x1351, + 0xffff, 0xffff, 0x1373, 0x1395, 0x0003, 0x0000, 0x04bc, 0x04c1, + 0x0003, 0x0008, 0x141a, 0x1439, 0x1454, 0x0002, 0x04c4, 0x04cc, + 0x0006, 0x0008, 0x14cd, 0x1477, 0xffff, 0xffff, 0x1493, 0x14af, + 0x0006, 0x0008, 0x153f, 0x14e9, 0xffff, 0xffff, 0x1505, 0x1521, + 0x0003, 0x0000, 0x04d8, 0x04dd, 0x0003, 0x0008, 0x155b, 0x1570, + // Entry 5840 - 587F + 0x1581, 0x0002, 0x04e0, 0x04e8, 0x0006, 0x0008, 0x14cd, 0x1477, + 0xffff, 0xffff, 0x1493, 0x14af, 0x0006, 0x0008, 0x153f, 0x14e9, + 0xffff, 0xffff, 0x1505, 0x1521, 0x0003, 0x0000, 0x04f4, 0x04f9, + 0x0003, 0x0008, 0x155b, 0x1570, 0x1581, 0x0002, 0x04fc, 0x0504, + 0x0006, 0x0008, 0x14cd, 0x1477, 0xffff, 0xffff, 0x1493, 0x14af, + 0x0006, 0x0008, 0x153f, 0x14e9, 0xffff, 0xffff, 0x1505, 0x1521, + 0x0003, 0x0000, 0x0510, 0x0515, 0x0003, 0x0008, 0x159a, 0x15b9, + 0x15d2, 0x0002, 0x0518, 0x0520, 0x0006, 0x0008, 0x160f, 0x15f5, + // Entry 5880 - 58BF + 0xffff, 0xffff, 0x160f, 0x1629, 0x0006, 0x0008, 0x165b, 0x1641, + 0xffff, 0xffff, 0x165b, 0x1675, 0x0003, 0x0000, 0x052c, 0x0531, + 0x0003, 0x0008, 0x168d, 0x16a4, 0x16b5, 0x0002, 0x0534, 0x053c, + 0x0006, 0x0008, 0x160f, 0x15f5, 0xffff, 0xffff, 0x160f, 0x1629, + 0x0006, 0x0008, 0x165b, 0x1641, 0xffff, 0xffff, 0x165b, 0x1675, + 0x0003, 0x0000, 0x0548, 0x054d, 0x0003, 0x0008, 0x168d, 0x16a4, + 0x16b5, 0x0002, 0x0550, 0x0558, 0x0006, 0x0008, 0x160f, 0x15f5, + 0xffff, 0xffff, 0x160f, 0x1629, 0x0006, 0x0008, 0x165b, 0x1641, + // Entry 58C0 - 58FF + 0xffff, 0xffff, 0x165b, 0x1675, 0x0003, 0x0000, 0x0564, 0x0569, + 0x0003, 0x0008, 0x16d0, 0x16ed, 0x1706, 0x0002, 0x056c, 0x0574, + 0x0006, 0x0008, 0x177f, 0x1727, 0xffff, 0xffff, 0x1741, 0x175f, + 0x0006, 0x0008, 0x17f5, 0x179d, 0xffff, 0xffff, 0x17b7, 0x17d5, + 0x0003, 0x0000, 0x0580, 0x0585, 0x0003, 0x0008, 0x1813, 0x1828, + 0x1839, 0x0002, 0x0588, 0x0590, 0x0006, 0x0008, 0x177f, 0x1727, + 0xffff, 0xffff, 0x1741, 0x175f, 0x0006, 0x0008, 0x17f5, 0x179d, + 0xffff, 0xffff, 0x17b7, 0x17d5, 0x0003, 0x0000, 0x059c, 0x05a1, + // Entry 5900 - 593F + 0x0003, 0x0008, 0x1813, 0x1828, 0x1839, 0x0002, 0x05a4, 0x05ac, + 0x0006, 0x0008, 0x177f, 0x1727, 0xffff, 0xffff, 0x1741, 0x175f, + 0x0006, 0x0008, 0x17f5, 0x179d, 0xffff, 0xffff, 0x17b7, 0x17d5, + 0x0003, 0x0000, 0x05b8, 0x05bd, 0x0003, 0x0008, 0x1852, 0x1873, + 0x188e, 0x0002, 0x05c0, 0x05c8, 0x0006, 0x0008, 0x18cf, 0x18b3, + 0xffff, 0xffff, 0x18cf, 0x18eb, 0x0006, 0x0008, 0x1921, 0x1905, + 0xffff, 0xffff, 0x1921, 0x193d, 0x0003, 0x0000, 0x05d4, 0x05d9, + 0x0003, 0x0008, 0x1957, 0x196e, 0x197f, 0x0002, 0x05dc, 0x05e4, + // Entry 5940 - 597F + 0x0006, 0x0008, 0x18cf, 0x18b3, 0xffff, 0xffff, 0x18cf, 0x18eb, + 0x0006, 0x0008, 0x1921, 0x1905, 0xffff, 0xffff, 0x1921, 0x193d, + 0x0003, 0x0000, 0x05f0, 0x05f5, 0x0003, 0x0008, 0x1957, 0x196e, + 0x197f, 0x0002, 0x05f8, 0x0600, 0x0006, 0x0008, 0x18cf, 0x18b3, + 0xffff, 0xffff, 0x18cf, 0x18eb, 0x0006, 0x0008, 0x1921, 0x1905, + 0xffff, 0xffff, 0x1921, 0x193d, 0x0003, 0x0000, 0x060c, 0x0611, + 0x0003, 0x0008, 0x199a, 0x19b9, 0x19d2, 0x0002, 0x0614, 0x061c, + 0x0006, 0x0008, 0x1a0f, 0x19f5, 0xffff, 0xffff, 0x1a0f, 0x1a29, + // Entry 5980 - 59BF + 0x0006, 0x0008, 0x1a5b, 0x1a41, 0xffff, 0xffff, 0x1a5b, 0x1a75, + 0x0003, 0x0000, 0x0628, 0x062d, 0x0003, 0x0008, 0x1a8d, 0x1aa4, + 0x1ab5, 0x0002, 0x0630, 0x0638, 0x0006, 0x0008, 0x1a0f, 0x19f5, + 0xffff, 0xffff, 0x1a0f, 0x1a29, 0x0006, 0x0008, 0x1a5b, 0x1a41, + 0xffff, 0xffff, 0x1a5b, 0x1a75, 0x0003, 0x0000, 0x0644, 0x0649, + 0x0003, 0x0008, 0x1a8d, 0x1aa4, 0x1ab5, 0x0002, 0x064c, 0x0654, + 0x0006, 0x0008, 0x1a0f, 0x19f5, 0xffff, 0xffff, 0x1a0f, 0x1a29, + 0x0006, 0x0008, 0x1a5b, 0x1a41, 0xffff, 0xffff, 0x1a5b, 0x1a75, + // Entry 59C0 - 59FF + 0x0001, 0x065e, 0x0001, 0x0007, 0x0892, 0x0001, 0x0663, 0x0001, + 0x0007, 0x0892, 0x0001, 0x0668, 0x0001, 0x0007, 0x0892, 0x0003, + 0x066f, 0x0672, 0x0676, 0x0001, 0x0008, 0x1ad0, 0x0002, 0x0008, + 0xffff, 0x1adf, 0x0002, 0x0679, 0x0681, 0x0006, 0x0008, 0x1b16, + 0x1afa, 0xffff, 0xffff, 0x1b16, 0x1b32, 0x0006, 0x0008, 0x1b68, + 0x1b4c, 0xffff, 0xffff, 0x1b68, 0x1b84, 0x0003, 0x068d, 0x0000, + 0x0690, 0x0001, 0x0008, 0x1b9e, 0x0002, 0x0693, 0x069b, 0x0006, + 0x0008, 0x1ba7, 0x1ba7, 0xffff, 0xffff, 0x1ba7, 0x1ba7, 0x0006, + // Entry 5A00 - 5A3F + 0x0008, 0x1bbd, 0x1bbd, 0xffff, 0xffff, 0x1bbd, 0x1bbd, 0x0003, + 0x06a7, 0x0000, 0x06aa, 0x0001, 0x0008, 0x1b9e, 0x0002, 0x06ad, + 0x06b5, 0x0006, 0x0008, 0x1ba7, 0x1ba7, 0xffff, 0xffff, 0x1ba7, + 0x1ba7, 0x0006, 0x0008, 0x1bbd, 0x1bbd, 0xffff, 0xffff, 0x1bbd, + 0x1bbd, 0x0003, 0x06c1, 0x06c4, 0x06c8, 0x0001, 0x0008, 0x1bd3, + 0x0002, 0x0008, 0xffff, 0x1be2, 0x0002, 0x06cb, 0x06d3, 0x0006, + 0x0008, 0x1c19, 0x1bfd, 0xffff, 0xffff, 0x1c19, 0x1c35, 0x0006, + 0x0008, 0x1c6b, 0x1c4f, 0xffff, 0xffff, 0x1c6b, 0x1c87, 0x0003, + // Entry 5A40 - 5A7F + 0x06df, 0x0000, 0x06e2, 0x0001, 0x0008, 0x1ca1, 0x0002, 0x06e5, + 0x06ed, 0x0006, 0x0008, 0x1ca6, 0x1ca6, 0xffff, 0xffff, 0x1ca6, + 0x1ca6, 0x0006, 0x0008, 0x1cb8, 0x1cb8, 0xffff, 0xffff, 0x1cb8, + 0x1cb8, 0x0003, 0x06f9, 0x0000, 0x06fc, 0x0001, 0x0008, 0x1ca1, + 0x0002, 0x06ff, 0x0707, 0x0006, 0x0008, 0x1ca6, 0x1ca6, 0xffff, + 0xffff, 0x1ca6, 0x1ca6, 0x0006, 0x0008, 0x1cb8, 0x1cb8, 0xffff, + 0xffff, 0x1cb8, 0x1cb8, 0x0003, 0x0713, 0x0716, 0x071a, 0x0001, + 0x0008, 0x1cca, 0x0002, 0x0008, 0xffff, 0x1cd9, 0x0002, 0x071d, + // Entry 5A80 - 5ABF + 0x0725, 0x0006, 0x0008, 0x1d00, 0x1ce4, 0xffff, 0xffff, 0x1d00, + 0x1d1c, 0x0006, 0x0008, 0x1d52, 0x1d36, 0xffff, 0xffff, 0x1d52, + 0x1d6e, 0x0003, 0x0731, 0x0000, 0x0734, 0x0001, 0x0008, 0x069c, + 0x0002, 0x0737, 0x073f, 0x0006, 0x0008, 0x1d88, 0x1d88, 0xffff, + 0xffff, 0x1d88, 0x1d88, 0x0006, 0x0008, 0x1d98, 0x1d98, 0xffff, + 0xffff, 0x1d98, 0x1d98, 0x0003, 0x074b, 0x0000, 0x074e, 0x0001, + 0x0008, 0x069c, 0x0002, 0x0751, 0x0759, 0x0006, 0x0008, 0x1d88, + 0x1d88, 0xffff, 0xffff, 0x1d88, 0x1d88, 0x0006, 0x0008, 0x1d98, + // Entry 5AC0 - 5AFF + 0x1d98, 0xffff, 0xffff, 0x1d98, 0x1d98, 0x0001, 0x0763, 0x0001, + 0x0008, 0x1da8, 0x0001, 0x0768, 0x0001, 0x0008, 0x1da8, 0x0001, + 0x076d, 0x0001, 0x0008, 0x1da8, 0x0004, 0x0775, 0x077a, 0x077f, + 0x078e, 0x0003, 0x0008, 0x1dbe, 0x1dcc, 0x1dd3, 0x0003, 0x0008, + 0x1dd7, 0x1de3, 0x1dfa, 0x0002, 0x0000, 0x0782, 0x0003, 0x0000, + 0x0789, 0x0786, 0x0001, 0x0008, 0x1e1b, 0x0003, 0x0008, 0xffff, + 0x1e54, 0x1e79, 0x0002, 0x0000, 0x0791, 0x0003, 0x082b, 0x08c1, + 0x0795, 0x0094, 0x0008, 0x1ea8, 0x1eca, 0x1efa, 0x1f24, 0x1f7a, + // Entry 5B00 - 5B3F + 0x2002, 0x2064, 0x20fb, 0x21de, 0x22b1, 0x2363, 0xffff, 0x23d3, + 0x243c, 0x24cc, 0x2553, 0x25df, 0x2647, 0x26d0, 0x2792, 0x285d, + 0x28fe, 0x2994, 0x2a1d, 0x2aa9, 0x2afd, 0x2b11, 0x2b49, 0x2ba1, + 0x2bd0, 0x2c26, 0x2c4e, 0x2cae, 0x2d10, 0x2d70, 0x2dc8, 0x2deb, + 0x2e34, 0x2eb1, 0x2f29, 0x2f69, 0x2f8c, 0x2fc0, 0x300a, 0x3070, + 0x30bc, 0x3166, 0x31da, 0x323a, 0x32df, 0x3373, 0x33b7, 0x33e2, + 0x343d, 0x3483, 0x34c3, 0x3517, 0x3540, 0x358a, 0x3631, 0x36ab, + 0x36d6, 0x370f, 0x3795, 0x37f7, 0x383b, 0x384d, 0x3876, 0x3896, + // Entry 5B40 - 5B7F + 0x38ca, 0x38f8, 0x393c, 0x399e, 0x3a06, 0x3a72, 0xffff, 0x3aba, + 0x3ae8, 0x3b28, 0x3b6c, 0x3baf, 0x3c0b, 0x3c29, 0x3c61, 0x3caf, + 0x3cf2, 0x3d4a, 0x3d62, 0x3d78, 0x3da5, 0x3dea, 0x3e3a, 0x3e9b, + 0x3f6e, 0x4017, 0x408b, 0x40df, 0x40f4, 0x4106, 0x4145, 0x41d2, + 0x425e, 0x42ca, 0x42da, 0x432d, 0x43c5, 0x4437, 0x4499, 0x44f5, + 0x4507, 0x4549, 0x45b3, 0x4623, 0x467b, 0x46ca, 0x4753, 0x477a, + 0x479f, 0x47bb, 0x47d3, 0x4812, 0xffff, 0x487c, 0x48c0, 0x48ef, + 0x490d, 0x493c, 0x4967, 0x497f, 0x499e, 0x49c4, 0x4a0c, 0x4a2c, + // Entry 5B80 - 5BBF + 0x4a54, 0x4a98, 0x4aca, 0x4b2e, 0x4b5e, 0x4bd4, 0x4c46, 0x4c92, + 0x4cd6, 0x4d5e, 0x4dbe, 0x4de1, 0x4e02, 0x4e49, 0x4eb7, 0x0094, + 0x0008, 0xffff, 0xffff, 0xffff, 0xffff, 0x1f50, 0x1fee, 0x204a, + 0x20b8, 0x21a1, 0x2278, 0x2343, 0xffff, 0x23c3, 0x2413, 0x24ae, + 0x2528, 0x25c9, 0x262b, 0x269f, 0x2752, 0x2832, 0x28d3, 0x2974, + 0x29f4, 0x2a8f, 0xffff, 0xffff, 0x2b2d, 0xffff, 0x2bb5, 0xffff, + 0x2c3a, 0x2c96, 0x2cfe, 0x2d54, 0xffff, 0xffff, 0x2e16, 0x2e90, + 0x2f19, 0xffff, 0xffff, 0xffff, 0x2fe7, 0xffff, 0x308c, 0x313c, + // Entry 5BC0 - 5BFF + 0xffff, 0x3210, 0x32ae, 0x3361, 0xffff, 0xffff, 0xffff, 0xffff, + 0x34a9, 0xffff, 0xffff, 0x355d, 0x3604, 0xffff, 0xffff, 0x36e8, + 0x377d, 0x37e5, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x3926, 0x3988, 0x39ea, 0x3a5e, 0xffff, 0xffff, 0xffff, 0x3b16, + 0xffff, 0x3b91, 0xffff, 0xffff, 0x3c4a, 0xffff, 0x3cd6, 0xffff, + 0xffff, 0xffff, 0xffff, 0x3dd2, 0xffff, 0x3e5d, 0x3f37, 0x3ffa, + 0x4071, 0xffff, 0xffff, 0xffff, 0x4120, 0x41af, 0x4238, 0xffff, + 0xffff, 0x4301, 0x43a5, 0x4425, 0x447b, 0xffff, 0xffff, 0x4531, + // Entry 5C00 - 5C3F + 0x4599, 0x4607, 0xffff, 0x46a0, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x47f6, 0xffff, 0x486a, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x49b0, 0xffff, 0xffff, 0x4a42, 0xffff, + 0x4aa8, 0xffff, 0x4b42, 0x4bb6, 0x4c30, 0xffff, 0x4cb2, 0x4d3e, + 0xffff, 0xffff, 0xffff, 0x4e35, 0x4e91, 0x0094, 0x0008, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1fb9, 0x202b, 0x2093, 0x2153, 0x2230, + 0x22ff, 0x2398, 0xffff, 0x23f8, 0x247a, 0x24ff, 0x2593, 0x260a, + 0x2678, 0x2716, 0x27e7, 0x289d, 0x293e, 0x29c9, 0x2a5b, 0x2ad8, + // Entry 5C40 - 5C7F + 0xffff, 0xffff, 0x2b7a, 0xffff, 0x2c00, 0xffff, 0x2c77, 0x2cdb, + 0x2d37, 0x2da1, 0xffff, 0xffff, 0x2e67, 0x2ee7, 0x2f4e, 0xffff, + 0xffff, 0xffff, 0x3042, 0xffff, 0x3101, 0x31a5, 0xffff, 0x3279, + 0x3325, 0x339a, 0xffff, 0xffff, 0xffff, 0xffff, 0x34f2, 0xffff, + 0xffff, 0x35cc, 0x3673, 0xffff, 0xffff, 0x374b, 0x37c2, 0x381e, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3967, 0x39c9, + 0x3a37, 0x3a9b, 0xffff, 0xffff, 0xffff, 0x3b4f, 0xffff, 0x3be2, + 0xffff, 0xffff, 0x3c8d, 0xffff, 0x3d23, 0xffff, 0xffff, 0xffff, + // Entry 5C80 - 5CBF + 0xffff, 0x3e17, 0xffff, 0x3eee, 0x3fb8, 0x4049, 0x40ba, 0xffff, + 0xffff, 0xffff, 0x417f, 0x420a, 0x4299, 0xffff, 0xffff, 0x436e, + 0x43fa, 0x445e, 0x44cc, 0xffff, 0xffff, 0x4576, 0x45e2, 0x4654, + 0xffff, 0x4709, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x4843, + 0xffff, 0x48a3, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x49ed, 0xffff, 0xffff, 0x4a7b, 0xffff, 0x4b01, 0xffff, + 0x4b8f, 0x4c07, 0x4c71, 0xffff, 0x4d0f, 0x4d93, 0xffff, 0xffff, + 0xffff, 0x4e72, 0x4ef2, 0x0002, 0x0003, 0x00bf, 0x0008, 0x0000, + // Entry 5CC0 - 5CFF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, + 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, 0x0006, 0x000d, + 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0002, + 0x0587, 0x0008, 0x002f, 0x0066, 0x0000, 0x0075, 0x008d, 0x009d, + 0x00ae, 0x0000, 0x0002, 0x0032, 0x0054, 0x0003, 0x0036, 0x0000, + 0x0045, 0x000d, 0x0006, 0xffff, 0x001e, 0x0022, 0x0026, 0x40f6, + 0x002e, 0x0032, 0x0036, 0x40fa, 0x003e, 0x0042, 0x0046, 0x40fe, + // Entry 5D00 - 5D3F + 0x000d, 0x0006, 0xffff, 0x004e, 0x0056, 0x005f, 0x4102, 0x002e, + 0x006c, 0x0071, 0x4108, 0x007e, 0x0087, 0x008e, 0x410f, 0x0002, + 0x0000, 0x0057, 0x000d, 0x0000, 0xffff, 0x1e5d, 0x2144, 0x205e, + 0x2146, 0x205e, 0x1e5d, 0x1e5d, 0x2148, 0x2062, 0x2148, 0x1e63, + 0x204b, 0x0001, 0x0068, 0x0003, 0x0000, 0x0000, 0x006c, 0x0007, + 0x0009, 0x0000, 0x000b, 0x0015, 0x0021, 0x002d, 0x0037, 0x0043, + 0x0001, 0x0077, 0x0003, 0x007b, 0x0000, 0x0084, 0x0002, 0x007e, + 0x0081, 0x0001, 0x0009, 0x0050, 0x0001, 0x0009, 0x0059, 0x0002, + // Entry 5D40 - 5D7F + 0x0087, 0x008a, 0x0001, 0x0009, 0x0050, 0x0001, 0x0009, 0x0059, + 0x0003, 0x0097, 0x0000, 0x0091, 0x0001, 0x0093, 0x0002, 0x0009, + 0x0061, 0x006d, 0x0001, 0x0099, 0x0002, 0x0009, 0x0078, 0x007b, + 0x0004, 0x00ab, 0x00a5, 0x00a2, 0x00a8, 0x0001, 0x0006, 0x015b, + 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, 0x0002, + 0x08e8, 0x0004, 0x00bc, 0x00b6, 0x00b3, 0x00b9, 0x0001, 0x0002, + 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, 0x0002, 0x04fe, 0x0001, + 0x0002, 0x0508, 0x003d, 0x00fd, 0x0000, 0x0000, 0x0102, 0x0000, + // Entry 5D80 - 5DBF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0107, 0x0000, 0x0000, 0x010c, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0111, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x011c, + 0x0000, 0x0121, 0x0000, 0x0000, 0x0126, 0x0000, 0x0000, 0x012b, + 0x0001, 0x00ff, 0x0001, 0x0009, 0x007e, 0x0001, 0x0104, 0x0001, + // Entry 5DC0 - 5DFF + 0x0009, 0x0085, 0x0001, 0x0109, 0x0001, 0x0009, 0x008c, 0x0001, + 0x010e, 0x0001, 0x0009, 0x0094, 0x0002, 0x0114, 0x0117, 0x0001, + 0x0009, 0x009d, 0x0003, 0x0000, 0x1b2f, 0x214a, 0x1b3f, 0x0001, + 0x011e, 0x0001, 0x0009, 0x00a6, 0x0001, 0x0123, 0x0001, 0x0009, + 0x00ae, 0x0001, 0x0128, 0x0001, 0x0009, 0x00b3, 0x0001, 0x012d, + 0x0001, 0x0009, 0x00ba, 0x0002, 0x0003, 0x00e9, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, + // Entry 5E00 - 5E3F + 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, 0x0006, 0x000d, + 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0002, + 0x0587, 0x0008, 0x002f, 0x0066, 0x008b, 0x009f, 0x00b7, 0x00c7, + 0x00d8, 0x0000, 0x0002, 0x0032, 0x0054, 0x0003, 0x0036, 0x0000, + 0x0045, 0x000d, 0x0009, 0xffff, 0x00c2, 0x00c6, 0x00ca, 0x00ce, + 0x00d2, 0x00d6, 0x00da, 0x00de, 0x00e2, 0x00e6, 0x00ea, 0x00ee, + 0x000d, 0x0009, 0xffff, 0x00f2, 0x0107, 0x011c, 0x0131, 0x0145, + 0x015a, 0x016d, 0x0180, 0x0193, 0x01a6, 0x01b9, 0x01d4, 0x0002, + // Entry 5E40 - 5E7F + 0x0000, 0x0057, 0x000d, 0x0000, 0xffff, 0x19c7, 0x1edb, 0x204b, + 0x04dd, 0x19c7, 0x2062, 0x2062, 0x1e63, 0x04dd, 0x214f, 0x214f, + 0x214f, 0x0002, 0x0069, 0x007f, 0x0003, 0x006d, 0x0000, 0x0076, + 0x0007, 0x0009, 0x01f0, 0x00c6, 0x01f4, 0x01f8, 0x01fc, 0x0200, + 0x0204, 0x0007, 0x0009, 0x0208, 0x0213, 0x0222, 0x022c, 0x0236, + 0x0240, 0x024a, 0x0002, 0x0000, 0x0082, 0x0007, 0x0000, 0x205e, + 0x1e5d, 0x19c7, 0x19c7, 0x19c7, 0x2151, 0x1e5d, 0x0001, 0x008d, + 0x0003, 0x0091, 0x0000, 0x0098, 0x0005, 0x0009, 0xffff, 0x025a, + // Entry 5E80 - 5EBF + 0x025d, 0x0260, 0x0263, 0x0005, 0x0009, 0xffff, 0x0266, 0x026d, + 0x0274, 0x027b, 0x0001, 0x00a1, 0x0003, 0x00a5, 0x0000, 0x00ae, + 0x0002, 0x00a8, 0x00ab, 0x0001, 0x0009, 0x0282, 0x0001, 0x0009, + 0x028a, 0x0002, 0x00b1, 0x00b4, 0x0001, 0x0009, 0x0282, 0x0001, + 0x0009, 0x028a, 0x0003, 0x00c1, 0x0000, 0x00bb, 0x0001, 0x00bd, + 0x0002, 0x0009, 0x0292, 0x02a1, 0x0001, 0x00c3, 0x0002, 0x0006, + 0x0155, 0x0158, 0x0004, 0x00d5, 0x00cf, 0x00cc, 0x00d2, 0x0001, + 0x0006, 0x015b, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, + // Entry 5EC0 - 5EFF + 0x0001, 0x0002, 0x08e8, 0x0004, 0x00e6, 0x00e0, 0x00dd, 0x00e3, + 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, + 0x053d, 0x0001, 0x0000, 0x0546, 0x0040, 0x012a, 0x0000, 0x0000, + 0x012f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0134, 0x0000, + 0x0000, 0x0139, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x013e, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0149, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 5F00 - 5F3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x014e, 0x0000, 0x0153, 0x0000, 0x0000, 0x0158, 0x0000, + 0x0000, 0x015d, 0x0000, 0x0000, 0x0162, 0x0001, 0x012c, 0x0001, + 0x0009, 0x02b0, 0x0001, 0x0131, 0x0001, 0x0009, 0x02b8, 0x0001, + 0x0136, 0x0001, 0x0009, 0x02be, 0x0001, 0x013b, 0x0001, 0x0009, + 0x02c5, 0x0002, 0x0141, 0x0144, 0x0001, 0x0009, 0x02d4, 0x0003, + 0x0009, 0x02d9, 0x02df, 0x02eb, 0x0001, 0x014b, 0x0001, 0x0009, + 0x02f2, 0x0001, 0x0150, 0x0001, 0x0009, 0x02ff, 0x0001, 0x0155, + // Entry 5F40 - 5F7F + 0x0001, 0x0009, 0x0308, 0x0001, 0x015a, 0x0001, 0x0006, 0x01bc, + 0x0001, 0x015f, 0x0001, 0x0009, 0x030c, 0x0001, 0x0164, 0x0001, + 0x0009, 0x0314, 0x0003, 0x0004, 0x029f, 0x0708, 0x000b, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x003b, 0x0259, + 0x0271, 0x0288, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0019, 0x0000, 0x002a, 0x0004, 0x0027, 0x0021, 0x001e, 0x0024, + 0x0001, 0x0009, 0x0323, 0x0001, 0x0009, 0x033a, 0x0001, 0x0009, + 0x034b, 0x0001, 0x0009, 0x035a, 0x0004, 0x0038, 0x0032, 0x002f, + // Entry 5F80 - 5FBF + 0x0035, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0001, + 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, 0x0044, 0x00a9, + 0x0100, 0x0135, 0x020c, 0x0226, 0x0237, 0x0248, 0x0002, 0x0047, + 0x0078, 0x0003, 0x004b, 0x005a, 0x0069, 0x000d, 0x0009, 0xffff, + 0x0364, 0x036b, 0x0372, 0x037b, 0x0382, 0x0389, 0x0390, 0x0397, + 0x039e, 0x03a5, 0x03ac, 0x03b3, 0x000d, 0x0009, 0xffff, 0x03ba, + 0x03bd, 0x03c0, 0x03c3, 0x03c0, 0x03c6, 0x03c6, 0x03c3, 0x03c9, + 0x03cc, 0x03cf, 0x03d2, 0x000d, 0x0009, 0xffff, 0x03d5, 0x03e2, + // Entry 5FC0 - 5FFF + 0x0372, 0x03f3, 0x0382, 0x0389, 0x0390, 0x03fe, 0x040b, 0x041e, + 0x042f, 0x043e, 0x0003, 0x007c, 0x008b, 0x009a, 0x000d, 0x0009, + 0xffff, 0x0364, 0x036b, 0x0372, 0x037b, 0x0382, 0x0389, 0x0390, + 0x0397, 0x039e, 0x03a5, 0x03ac, 0x03b3, 0x000d, 0x0009, 0xffff, + 0x03ba, 0x03bd, 0x03c0, 0x03c3, 0x03c0, 0x03c6, 0x03c6, 0x03c3, + 0x03c9, 0x03cc, 0x03cf, 0x03d2, 0x000d, 0x0009, 0xffff, 0x03d5, + 0x03e2, 0x0372, 0x03f3, 0x0382, 0x0389, 0x0390, 0x03fe, 0x040b, + 0x041e, 0x042f, 0x043e, 0x0002, 0x00ac, 0x00d6, 0x0005, 0x00b2, + // Entry 6000 - 603F + 0x00bb, 0x00cd, 0x0000, 0x00c4, 0x0007, 0x0008, 0x080d, 0x0812, + 0x4f23, 0x081c, 0x4f28, 0x0826, 0x082b, 0x0007, 0x0009, 0x03cf, + 0x044f, 0x0452, 0x03c9, 0x0455, 0x044f, 0x03c9, 0x0007, 0x0008, + 0x080d, 0x0812, 0x4f23, 0x081c, 0x4f28, 0x0826, 0x082b, 0x0007, + 0x0009, 0x0458, 0x0465, 0x047a, 0x0489, 0x0494, 0x04a7, 0x04b2, + 0x0005, 0x00dc, 0x00e5, 0x00f7, 0x0000, 0x00ee, 0x0007, 0x0008, + 0x080d, 0x0812, 0x4f23, 0x081c, 0x4f28, 0x0826, 0x082b, 0x0007, + 0x0009, 0x03cf, 0x044f, 0x0452, 0x03c9, 0x0455, 0x044f, 0x03c9, + // Entry 6040 - 607F + 0x0007, 0x0008, 0x080d, 0x0812, 0x4f23, 0x081c, 0x4f28, 0x0826, + 0x082b, 0x0007, 0x0009, 0x0458, 0x0465, 0x047a, 0x0489, 0x0494, + 0x04a7, 0x04b2, 0x0002, 0x0103, 0x011c, 0x0003, 0x0107, 0x010e, + 0x0115, 0x0005, 0x0009, 0xffff, 0x04bf, 0x04cc, 0x04d9, 0x04e6, + 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x0005, + 0x0009, 0xffff, 0x04f3, 0x050b, 0x0523, 0x053b, 0x0003, 0x0120, + 0x0127, 0x012e, 0x0005, 0x0009, 0xffff, 0x04bf, 0x04cc, 0x04d9, + 0x04e6, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, + // Entry 6080 - 60BF + 0x0005, 0x0009, 0xffff, 0x04f3, 0x050b, 0x0523, 0x053b, 0x0002, + 0x0138, 0x01a2, 0x0003, 0x013c, 0x015e, 0x0180, 0x0009, 0x0149, + 0x014c, 0x0146, 0x014f, 0x0155, 0x0158, 0x015b, 0x0000, 0x0152, + 0x0001, 0x0009, 0x0553, 0x0001, 0x0008, 0x0928, 0x0001, 0x0008, + 0x092b, 0x0001, 0x0009, 0x0562, 0x0001, 0x0009, 0x0573, 0x0001, + 0x0009, 0x0581, 0x0001, 0x0009, 0x0592, 0x0001, 0x0009, 0x05a1, + 0x0009, 0x016b, 0x016e, 0x0168, 0x0171, 0x0177, 0x017a, 0x017d, + 0x0000, 0x0174, 0x0001, 0x0009, 0x0553, 0x0001, 0x0008, 0x0928, + // Entry 60C0 - 60FF + 0x0001, 0x0008, 0x092b, 0x0001, 0x0009, 0x0562, 0x0001, 0x0009, + 0x0573, 0x0001, 0x0009, 0x0581, 0x0001, 0x0009, 0x0592, 0x0001, + 0x0009, 0x05a1, 0x0009, 0x018d, 0x0190, 0x018a, 0x0193, 0x0199, + 0x019c, 0x019f, 0x0000, 0x0196, 0x0001, 0x0009, 0x0553, 0x0001, + 0x0009, 0x05b5, 0x0001, 0x0009, 0x05c0, 0x0001, 0x0009, 0x0562, + 0x0001, 0x0009, 0x05cb, 0x0001, 0x0009, 0x0581, 0x0001, 0x0009, + 0x0592, 0x0001, 0x0009, 0x05a1, 0x0003, 0x01a6, 0x01c8, 0x01ea, + 0x0009, 0x01b3, 0x01b6, 0x01b0, 0x01b9, 0x01bf, 0x01c2, 0x01c5, + // Entry 6100 - 613F + 0x0000, 0x01bc, 0x0001, 0x0009, 0x0553, 0x0001, 0x0008, 0x0928, + 0x0001, 0x0008, 0x092b, 0x0001, 0x0009, 0x0562, 0x0001, 0x0009, + 0x0573, 0x0001, 0x0009, 0x0581, 0x0001, 0x0009, 0x0592, 0x0001, + 0x0009, 0x05a1, 0x0009, 0x01d5, 0x01d8, 0x01d2, 0x01db, 0x01e1, + 0x01e4, 0x01e7, 0x0000, 0x01de, 0x0001, 0x0009, 0x0553, 0x0001, + 0x0008, 0x0928, 0x0001, 0x0008, 0x092b, 0x0001, 0x0009, 0x0562, + 0x0001, 0x0009, 0x05d9, 0x0001, 0x0009, 0x0581, 0x0001, 0x0009, + 0x0592, 0x0001, 0x0009, 0x05a1, 0x0009, 0x01f7, 0x01fa, 0x01f4, + // Entry 6140 - 617F + 0x01fd, 0x0203, 0x0206, 0x0209, 0x0000, 0x0200, 0x0001, 0x0009, + 0x0553, 0x0001, 0x0008, 0x0928, 0x0001, 0x0008, 0x092b, 0x0001, + 0x0009, 0x0562, 0x0001, 0x0009, 0x0573, 0x0001, 0x0009, 0x0581, + 0x0001, 0x0009, 0x0592, 0x0001, 0x0009, 0x05a1, 0x0003, 0x021b, + 0x0000, 0x0210, 0x0002, 0x0213, 0x0217, 0x0002, 0x0009, 0x05e6, + 0x061d, 0x0002, 0x0009, 0x05fe, 0x0633, 0x0002, 0x021e, 0x0222, + 0x0002, 0x0009, 0x0650, 0x0667, 0x0002, 0x0009, 0x065b, 0x0672, + 0x0004, 0x0234, 0x022e, 0x022b, 0x0231, 0x0001, 0x0008, 0x09c0, + // Entry 6180 - 61BF + 0x0001, 0x0008, 0x09d5, 0x0001, 0x0009, 0x067e, 0x0001, 0x0009, + 0x068b, 0x0004, 0x0245, 0x023f, 0x023c, 0x0242, 0x0001, 0x0009, + 0x0699, 0x0001, 0x0009, 0x06ac, 0x0001, 0x0009, 0x06bc, 0x0001, + 0x0009, 0x06ca, 0x0004, 0x0256, 0x0250, 0x024d, 0x0253, 0x0001, + 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, + 0x0001, 0x0006, 0x022e, 0x0001, 0x025b, 0x0001, 0x025d, 0x0003, + 0x0000, 0x0000, 0x0261, 0x000e, 0x0009, 0x0724, 0x06d5, 0x06e0, + 0x06ed, 0x06fa, 0x0705, 0x0710, 0x071b, 0x0730, 0x073b, 0x0742, + // Entry 61C0 - 61FF + 0x074d, 0x0758, 0x075d, 0x0001, 0x0273, 0x0001, 0x0275, 0x0003, + 0x0000, 0x0000, 0x0279, 0x000d, 0x0009, 0xffff, 0x0766, 0x0773, + 0x0784, 0x0795, 0x07a2, 0x07b1, 0x07bc, 0x07c9, 0x07d8, 0x07ed, + 0x07f8, 0x0803, 0x0001, 0x028a, 0x0001, 0x028c, 0x0003, 0x0000, + 0x0000, 0x0290, 0x000d, 0x0009, 0xffff, 0x0814, 0x0823, 0x082e, + 0x0839, 0x0844, 0x0855, 0x0866, 0x0873, 0x087e, 0x088d, 0x0898, + 0x08ac, 0x0042, 0x02e2, 0x02e7, 0x02ec, 0x02f1, 0x0308, 0x031f, + 0x0336, 0x034d, 0x0364, 0x037b, 0x0392, 0x03a9, 0x03c0, 0x03db, + // Entry 6200 - 623F + 0x03f6, 0x0411, 0x0416, 0x041b, 0x0420, 0x0439, 0x0452, 0x046b, + 0x0470, 0x0475, 0x047a, 0x047f, 0x0484, 0x0489, 0x048e, 0x0493, + 0x0498, 0x04ac, 0x04c0, 0x04d4, 0x04e8, 0x04fc, 0x0510, 0x0524, + 0x0538, 0x054c, 0x0560, 0x0574, 0x0588, 0x059c, 0x05b0, 0x05c4, + 0x05d8, 0x05ec, 0x0600, 0x0614, 0x0628, 0x063c, 0x0641, 0x0646, + 0x064b, 0x0661, 0x0673, 0x0685, 0x069b, 0x06ad, 0x06bf, 0x06d5, + 0x06e7, 0x06f9, 0x06fe, 0x0703, 0x0001, 0x02e4, 0x0001, 0x0009, + 0x08c0, 0x0001, 0x02e9, 0x0001, 0x0009, 0x08c0, 0x0001, 0x02ee, + // Entry 6240 - 627F + 0x0001, 0x0009, 0x08c0, 0x0003, 0x02f5, 0x02f8, 0x02fd, 0x0001, + 0x0009, 0x08c7, 0x0003, 0x0009, 0x08d4, 0x08f2, 0x0908, 0x0002, + 0x0300, 0x0304, 0x0002, 0x0009, 0x0944, 0x092a, 0x0002, 0x0009, + 0x097a, 0x095e, 0x0003, 0x030c, 0x030f, 0x0314, 0x0001, 0x0008, + 0x0b17, 0x0003, 0x0009, 0x0996, 0x09a2, 0x09aa, 0x0002, 0x0317, + 0x031b, 0x0002, 0x0009, 0x09ba, 0x09ba, 0x0002, 0x0009, 0x09cb, + 0x09cb, 0x0003, 0x0323, 0x0326, 0x032b, 0x0001, 0x0008, 0x0b17, + 0x0003, 0x0009, 0x0996, 0x09a2, 0x09de, 0x0002, 0x032e, 0x0332, + // Entry 6280 - 62BF + 0x0002, 0x0009, 0x09e8, 0x09e8, 0x0002, 0x0009, 0x09f6, 0x09f6, + 0x0003, 0x033a, 0x033d, 0x0342, 0x0001, 0x0009, 0x0a04, 0x0003, + 0x0009, 0x0a19, 0x0a41, 0x0a5f, 0x0002, 0x0345, 0x0349, 0x0002, + 0x0009, 0x0aa7, 0x0a85, 0x0002, 0x0009, 0x0aed, 0x0ac9, 0x0003, + 0x0351, 0x0354, 0x0359, 0x0001, 0x0009, 0x0b11, 0x0003, 0x0009, + 0x0b1b, 0x0b2d, 0x0b40, 0x0002, 0x035c, 0x0360, 0x0002, 0x0009, + 0x0b56, 0x0b56, 0x0002, 0x0009, 0x0b6d, 0x0b6d, 0x0003, 0x0368, + 0x036b, 0x0370, 0x0001, 0x0009, 0x0b11, 0x0003, 0x0009, 0x0b1b, + // Entry 62C0 - 62FF + 0x0b2d, 0x0b40, 0x0002, 0x0373, 0x0377, 0x0002, 0x0009, 0x0b86, + 0x0b86, 0x0002, 0x0009, 0x0b9a, 0x0b9a, 0x0003, 0x037f, 0x0382, + 0x0387, 0x0001, 0x0009, 0x0bae, 0x0003, 0x0009, 0x0bb9, 0x0bd7, + 0x0beb, 0x0002, 0x038a, 0x038e, 0x0002, 0x0009, 0x0c1d, 0x0c05, + 0x0002, 0x0009, 0x0c51, 0x0c37, 0x0003, 0x0396, 0x0399, 0x039e, + 0x0001, 0x0008, 0x0e09, 0x0003, 0x0009, 0x0c6d, 0x0c7d, 0x0c8e, + 0x0002, 0x03a1, 0x03a5, 0x0002, 0x0009, 0x0ca2, 0x0ca2, 0x0002, + 0x0009, 0x0cb3, 0x0cb3, 0x0003, 0x03ad, 0x03b0, 0x03b5, 0x0001, + // Entry 6300 - 633F + 0x0008, 0x0e09, 0x0003, 0x0009, 0x0cc6, 0x0cd2, 0x0cda, 0x0002, + 0x03b8, 0x03bc, 0x0002, 0x0009, 0x0ce4, 0x0ce4, 0x0002, 0x0009, + 0x0cf2, 0x0cf2, 0x0004, 0x03c5, 0x03c8, 0x03cd, 0x03d8, 0x0001, + 0x0009, 0x0d00, 0x0003, 0x0009, 0x0d0f, 0x0d35, 0x0d4d, 0x0002, + 0x03d0, 0x03d4, 0x0002, 0x0009, 0x0d8d, 0x0d71, 0x0002, 0x0009, + 0x0dc7, 0x0da9, 0x0001, 0x0009, 0x0de5, 0x0004, 0x03e0, 0x03e3, + 0x03e8, 0x03f3, 0x0001, 0x0009, 0x0e01, 0x0003, 0x0009, 0x0e0b, + 0x0e2b, 0x0e3e, 0x0002, 0x03eb, 0x03ef, 0x0002, 0x0009, 0x0e54, + // Entry 6340 - 637F + 0x0e54, 0x0002, 0x0009, 0x0e6b, 0x0e6b, 0x0001, 0x0009, 0x0de5, + 0x0004, 0x03fb, 0x03fe, 0x0403, 0x040e, 0x0001, 0x0009, 0x0e01, + 0x0003, 0x0009, 0x0e84, 0x0e2b, 0x0e96, 0x0002, 0x0406, 0x040a, + 0x0002, 0x0009, 0x0ea6, 0x0ea6, 0x0002, 0x0009, 0x0eba, 0x0eba, + 0x0001, 0x0009, 0x0de5, 0x0001, 0x0413, 0x0001, 0x0009, 0x0ece, + 0x0001, 0x0418, 0x0001, 0x0009, 0x0ece, 0x0001, 0x041d, 0x0001, + 0x0009, 0x0ece, 0x0003, 0x0424, 0x0427, 0x042e, 0x0001, 0x0009, + 0x0eef, 0x0005, 0x0009, 0x0f06, 0x0f11, 0x0f1a, 0x0ef6, 0x0f23, + // Entry 6380 - 63BF + 0x0002, 0x0431, 0x0435, 0x0002, 0x0009, 0x0f4a, 0x0f36, 0x0002, + 0x0009, 0x0f74, 0x0f5e, 0x0003, 0x043d, 0x0440, 0x0447, 0x0001, + 0x0009, 0x03d2, 0x0005, 0x0009, 0x0f06, 0x0f11, 0x0f1a, 0x0ef6, + 0x0f23, 0x0002, 0x044a, 0x044e, 0x0002, 0x0009, 0x0f4a, 0x0f36, + 0x0002, 0x0009, 0x0f74, 0x0f5e, 0x0003, 0x0456, 0x0459, 0x0460, + 0x0001, 0x0009, 0x03d2, 0x0005, 0x0009, 0x0f06, 0x0f11, 0x0f1a, + 0x0ef6, 0x0f23, 0x0002, 0x0463, 0x0467, 0x0002, 0x0009, 0x0f8a, + 0x0f8a, 0x0002, 0x0009, 0x0f97, 0x0f97, 0x0001, 0x046d, 0x0001, + // Entry 63C0 - 63FF + 0x0009, 0x0fa4, 0x0001, 0x0472, 0x0001, 0x0009, 0x0fc1, 0x0001, + 0x0477, 0x0001, 0x0009, 0x0fc1, 0x0001, 0x047c, 0x0001, 0x0009, + 0x0fd1, 0x0001, 0x0481, 0x0001, 0x0009, 0x0ff0, 0x0001, 0x0486, + 0x0001, 0x0009, 0x0ff0, 0x0001, 0x048b, 0x0001, 0x0009, 0x1006, + 0x0001, 0x0490, 0x0001, 0x0009, 0x102e, 0x0001, 0x0495, 0x0001, + 0x0009, 0x102e, 0x0003, 0x0000, 0x049c, 0x04a1, 0x0003, 0x0009, + 0x104a, 0x106e, 0x1084, 0x0002, 0x04a4, 0x04a8, 0x0002, 0x0009, + 0x10c0, 0x10a6, 0x0002, 0x0009, 0x10f6, 0x10da, 0x0003, 0x0000, + // Entry 6400 - 643F + 0x04b0, 0x04b5, 0x0003, 0x0009, 0x1112, 0x112e, 0x113c, 0x0002, + 0x04b8, 0x04bc, 0x0002, 0x0009, 0x1156, 0x1156, 0x0002, 0x0009, + 0x1168, 0x1168, 0x0003, 0x0000, 0x04c4, 0x04c9, 0x0003, 0x0009, + 0x117c, 0x112e, 0x118d, 0x0002, 0x04cc, 0x04d0, 0x0002, 0x0009, + 0x119e, 0x119e, 0x0002, 0x0009, 0x11ad, 0x11ad, 0x0003, 0x0000, + 0x04d8, 0x04dd, 0x0003, 0x0009, 0x11bc, 0x11e8, 0x1206, 0x0002, + 0x04e0, 0x04e4, 0x0002, 0x0009, 0x1252, 0x1230, 0x0002, 0x0009, + 0x129a, 0x1276, 0x0003, 0x0000, 0x04ec, 0x04f1, 0x0003, 0x0009, + // Entry 6440 - 647F + 0x12c0, 0x12dc, 0x12ea, 0x0002, 0x04f4, 0x04f8, 0x0002, 0x0009, + 0x1304, 0x1304, 0x0002, 0x0009, 0x1316, 0x1316, 0x0003, 0x0000, + 0x0500, 0x0505, 0x0003, 0x0009, 0x132a, 0x12dc, 0x133b, 0x0002, + 0x0508, 0x050c, 0x0002, 0x0009, 0x134c, 0x134c, 0x0002, 0x0009, + 0x135b, 0x135b, 0x0003, 0x0000, 0x0514, 0x0519, 0x0003, 0x0009, + 0x136a, 0x1390, 0x13a8, 0x0002, 0x051c, 0x0520, 0x0002, 0x0009, + 0x13e8, 0x13cc, 0x0002, 0x0009, 0x1424, 0x1406, 0x0003, 0x0000, + 0x0528, 0x052d, 0x0003, 0x0009, 0x1444, 0x1460, 0x146e, 0x0002, + // Entry 6480 - 64BF + 0x0530, 0x0534, 0x0002, 0x0009, 0x1488, 0x1488, 0x0002, 0x0009, + 0x149a, 0x149a, 0x0003, 0x0000, 0x053c, 0x0541, 0x0003, 0x0009, + 0x14ae, 0x1460, 0x14bf, 0x0002, 0x0544, 0x0548, 0x0002, 0x0009, + 0x14d0, 0x14d0, 0x0002, 0x0009, 0x14e0, 0x14e0, 0x0003, 0x0000, + 0x0550, 0x0555, 0x0003, 0x0009, 0x14f0, 0x1512, 0x1526, 0x0002, + 0x0558, 0x055c, 0x0002, 0x0009, 0x155e, 0x1546, 0x0002, 0x0009, + 0x1590, 0x1576, 0x0003, 0x0000, 0x0564, 0x0569, 0x0003, 0x0009, + 0x15aa, 0x15c6, 0x15d4, 0x0002, 0x056c, 0x0570, 0x0002, 0x0009, + // Entry 64C0 - 64FF + 0x15ee, 0x15ee, 0x0002, 0x0009, 0x1600, 0x1600, 0x0003, 0x0000, + 0x0578, 0x057d, 0x0003, 0x0009, 0x1614, 0x15c6, 0x1625, 0x0002, + 0x0580, 0x0584, 0x0002, 0x0009, 0x1636, 0x1636, 0x0002, 0x0009, + 0x1645, 0x1645, 0x0003, 0x0000, 0x058c, 0x0591, 0x0003, 0x0009, + 0x1654, 0x167e, 0x169a, 0x0002, 0x0594, 0x0598, 0x0002, 0x0009, + 0x16e2, 0x16c2, 0x0002, 0x0009, 0x1726, 0x1704, 0x0003, 0x0000, + 0x05a0, 0x05a5, 0x0003, 0x0009, 0x174a, 0x1766, 0x1774, 0x0002, + 0x05a8, 0x05ac, 0x0002, 0x0009, 0x178e, 0x178e, 0x0002, 0x0009, + // Entry 6500 - 653F + 0x17a0, 0x17a0, 0x0003, 0x0000, 0x05b4, 0x05b9, 0x0003, 0x0009, + 0x17b4, 0x1766, 0x17c5, 0x0002, 0x05bc, 0x05c0, 0x0002, 0x0009, + 0x16e2, 0x16c2, 0x0002, 0x0009, 0x17d6, 0x17d6, 0x0003, 0x0000, + 0x05c8, 0x05cd, 0x0003, 0x0009, 0x17e5, 0x1807, 0x181b, 0x0002, + 0x05d0, 0x05d4, 0x0002, 0x0009, 0x1853, 0x183b, 0x0002, 0x0009, + 0x1887, 0x186d, 0x0003, 0x0000, 0x05dc, 0x05e1, 0x0003, 0x0009, + 0x18a3, 0x18bf, 0x18cd, 0x0002, 0x05e4, 0x05e8, 0x0002, 0x0009, + 0x18e7, 0x18e7, 0x0002, 0x0009, 0x18f9, 0x18f9, 0x0003, 0x0000, + // Entry 6540 - 657F + 0x05f0, 0x05f5, 0x0003, 0x0009, 0x190d, 0x18bf, 0x191e, 0x0002, + 0x05f8, 0x05fc, 0x0002, 0x0009, 0x192f, 0x192f, 0x0002, 0x0009, + 0x193e, 0x193e, 0x0003, 0x0000, 0x0604, 0x0609, 0x0003, 0x0009, + 0x194d, 0x1971, 0x1987, 0x0002, 0x060c, 0x0610, 0x0002, 0x0009, + 0x19c3, 0x19a9, 0x0002, 0x0009, 0x19f9, 0x19dd, 0x0003, 0x0000, + 0x0618, 0x061d, 0x0003, 0x0009, 0x1a15, 0x1a31, 0x1a3f, 0x0002, + 0x0620, 0x0624, 0x0002, 0x0009, 0x1a59, 0x1a59, 0x0002, 0x0009, + 0x1a6b, 0x1a6b, 0x0003, 0x0000, 0x062c, 0x0631, 0x0003, 0x0009, + // Entry 6580 - 65BF + 0x1a7f, 0x1a31, 0x1a90, 0x0002, 0x0634, 0x0638, 0x0002, 0x0009, + 0x1aa1, 0x1aa1, 0x0002, 0x0009, 0x1ab0, 0x1ab0, 0x0001, 0x063e, + 0x0001, 0x0009, 0x1abf, 0x0001, 0x0643, 0x0001, 0x0009, 0x1abf, + 0x0001, 0x0648, 0x0001, 0x0009, 0x1abf, 0x0003, 0x064f, 0x0652, + 0x0656, 0x0001, 0x0009, 0x1ad5, 0x0002, 0x0009, 0xffff, 0x1adc, + 0x0002, 0x0659, 0x065d, 0x0002, 0x0009, 0x1b03, 0x1aef, 0x0002, + 0x0009, 0x1b2f, 0x1b19, 0x0003, 0x0665, 0x0000, 0x0668, 0x0001, + 0x0009, 0x0455, 0x0002, 0x066b, 0x066f, 0x0002, 0x0009, 0x1b47, + // Entry 65C0 - 65FF + 0x1b47, 0x0002, 0x0009, 0x1b57, 0x1b57, 0x0003, 0x0677, 0x0000, + 0x067a, 0x0001, 0x0009, 0x0455, 0x0002, 0x067d, 0x0681, 0x0002, + 0x0009, 0x1b69, 0x1b69, 0x0002, 0x0009, 0x1b76, 0x1b76, 0x0003, + 0x0689, 0x068c, 0x0690, 0x0001, 0x0009, 0x1b83, 0x0002, 0x0009, + 0xffff, 0x1b90, 0x0002, 0x0693, 0x0697, 0x0002, 0x0009, 0x1bc3, + 0x1ba9, 0x0002, 0x0009, 0x1bf9, 0x1bdd, 0x0003, 0x069f, 0x0000, + 0x06a2, 0x0001, 0x0009, 0x1c15, 0x0002, 0x06a5, 0x06a9, 0x0002, + 0x0009, 0x1c1c, 0x1c1c, 0x0002, 0x0009, 0x1c30, 0x1c30, 0x0003, + // Entry 6600 - 663F + 0x06b1, 0x0000, 0x06b4, 0x0001, 0x0009, 0x1c15, 0x0002, 0x06b7, + 0x06bb, 0x0002, 0x0009, 0x1c46, 0x1c46, 0x0002, 0x0009, 0x1c57, + 0x1c57, 0x0003, 0x06c3, 0x06c6, 0x06ca, 0x0001, 0x0008, 0x1cca, + 0x0002, 0x0009, 0xffff, 0x1c68, 0x0002, 0x06cd, 0x06d1, 0x0002, + 0x0009, 0x1c8d, 0x1c71, 0x0002, 0x0009, 0x1cc7, 0x1ca9, 0x0003, + 0x06d9, 0x0000, 0x06dc, 0x0001, 0x0009, 0x03c9, 0x0002, 0x06df, + 0x06e3, 0x0002, 0x0009, 0x1ce5, 0x1ce5, 0x0002, 0x0009, 0x1cf9, + 0x1cf9, 0x0003, 0x06eb, 0x0000, 0x06ee, 0x0001, 0x0009, 0x03c9, + // Entry 6640 - 667F + 0x0002, 0x06f1, 0x06f5, 0x0002, 0x0009, 0x1d0f, 0x1d0f, 0x0002, + 0x0009, 0x1d20, 0x1d20, 0x0001, 0x06fb, 0x0001, 0x0009, 0x1d31, + 0x0001, 0x0700, 0x0001, 0x0009, 0x1d47, 0x0001, 0x0705, 0x0001, + 0x0009, 0x1d47, 0x0004, 0x070d, 0x0712, 0x0717, 0x0726, 0x0003, + 0x0000, 0x1dc7, 0x2153, 0x2165, 0x0003, 0x0000, 0x1de0, 0x2174, + 0x219c, 0x0002, 0x0000, 0x071a, 0x0003, 0x0000, 0x0721, 0x071e, + 0x0001, 0x0009, 0x1d58, 0x0003, 0x0009, 0xffff, 0x1d93, 0x1dc9, + 0x0002, 0x0000, 0x0729, 0x0003, 0x07c3, 0x0859, 0x072d, 0x0094, + // Entry 6680 - 66BF + 0x0009, 0x1dfc, 0x1e22, 0x1e54, 0x1e82, 0x1ed8, 0x1f6e, 0x1ff1, + 0x209d, 0x218f, 0x227d, 0x2379, 0x2450, 0x24be, 0x2535, 0x25b8, + 0x2659, 0x2702, 0x27b0, 0x28a5, 0x2982, 0x2a69, 0x2b2c, 0x2be5, + 0x2c80, 0x2d29, 0x2d9a, 0x2db6, 0x2df4, 0x2e5d, 0x2e93, 0x2f06, + 0x2f3e, 0x2fbf, 0x3040, 0x30c9, 0x313e, 0x315e, 0x31a0, 0x3227, + 0x32ba, 0x331f, 0x332c, 0x3344, 0x3392, 0x3425, 0x3477, 0x3536, + 0x35bf, 0x362a, 0x36cc, 0x3781, 0x37ea, 0x3806, 0x384f, 0x3871, + 0x389c, 0x3905, 0x3923, 0x397e, 0x3a3b, 0x3ac8, 0x3ae6, 0x3b1e, + // Entry 66C0 - 66FF + 0x3bc5, 0x3c4c, 0x3cad, 0x3cc9, 0x3ce5, 0x3d09, 0x3d3f, 0x3d71, + 0x3dbd, 0x3e3a, 0x3ebd, 0x3f40, 0x3fda, 0x407d, 0x40af, 0x40fd, + 0x4162, 0x4191, 0x4202, 0x4228, 0x4260, 0x42cb, 0x42fc, 0x4369, + 0x438b, 0x43a9, 0x43c9, 0x43fc, 0x4469, 0x44b3, 0x4595, 0x465c, + 0x46ef, 0x4758, 0x4778, 0x4783, 0x47c7, 0x486a, 0x490b, 0x4988, + 0x4991, 0x49d4, 0x4a89, 0x4b14, 0x4b8f, 0x4c00, 0x4c0b, 0x4c4e, + 0x4cdd, 0x4d66, 0x4dd3, 0x4e11, 0x4ea0, 0x4eaf, 0x4ebc, 0x4eda, + 0x4ee9, 0x4f16, 0x4f9b, 0x501e, 0x5087, 0x5096, 0x50b8, 0x50dc, + // Entry 6700 - 673F + 0x50f6, 0x5116, 0x511f, 0x5148, 0x51a9, 0x51d1, 0x51eb, 0x524c, + 0x527f, 0x5300, 0x532d, 0x53c0, 0x5448, 0x54b1, 0x54fb, 0x559c, + 0x5611, 0x561e, 0x5634, 0x5669, 0x56fc, 0x0094, 0x0009, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1eaa, 0x1f61, 0x1fd3, 0x205a, 0x2150, + 0x223a, 0x2330, 0x2438, 0x24b5, 0x251b, 0x2596, 0x2629, 0x26e6, + 0x2767, 0x286f, 0x293e, 0x2a37, 0x2afa, 0x2bbd, 0x2c62, 0x2d07, + 0xffff, 0xffff, 0x2dd6, 0xffff, 0x2e7f, 0xffff, 0x2f22, 0x2fa3, + 0x3024, 0x30a5, 0xffff, 0xffff, 0x317e, 0x3211, 0x329e, 0xffff, + // Entry 6740 - 677F + 0xffff, 0xffff, 0x336e, 0xffff, 0x3445, 0x3508, 0xffff, 0x35fc, + 0x36a6, 0x3763, 0xffff, 0xffff, 0xffff, 0xffff, 0x387e, 0xffff, + 0xffff, 0x394e, 0x3a0b, 0xffff, 0xffff, 0x3af1, 0x3ba5, 0x3c32, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3da3, 0x3e1e, + 0x3e9f, 0x3f26, 0x3fa1, 0xffff, 0xffff, 0x40e1, 0xffff, 0x416f, + 0xffff, 0xffff, 0x4250, 0xffff, 0x42dc, 0xffff, 0xffff, 0xffff, + 0xffff, 0x43eb, 0xffff, 0x4476, 0x455a, 0x4638, 0x46d1, 0xffff, + 0xffff, 0xffff, 0x479f, 0x4844, 0x48e3, 0xffff, 0xffff, 0x49b1, + // Entry 6780 - 67BF + 0x4a65, 0x4afe, 0x4b6d, 0xffff, 0xffff, 0x4c2c, 0x4cbf, 0x4d46, + 0xffff, 0x4def, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x4ef6, + 0x4f83, 0x5000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x513d, 0xffff, 0xffff, 0x51e0, 0xffff, 0x5255, 0xffff, + 0x530d, 0x539a, 0x5439, 0xffff, 0x54d3, 0x5578, 0xffff, 0xffff, + 0xffff, 0x564f, 0x56d2, 0x0094, 0x0009, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1f1b, 0x1f9f, 0x2024, 0x20f5, 0x21e3, 0x22d5, 0x23d7, + 0x2481, 0x24eb, 0x2564, 0x25ef, 0x269e, 0x2733, 0x280e, 0x28f0, + // Entry 67C0 - 67FF + 0x29db, 0x2ab0, 0x2b73, 0x2c22, 0x2cc2, 0x2d60, 0xffff, 0xffff, + 0x2e27, 0xffff, 0x2ecb, 0xffff, 0x2f6f, 0x2ff0, 0x3071, 0x3102, + 0xffff, 0xffff, 0x31d7, 0x3261, 0x32eb, 0xffff, 0xffff, 0xffff, + 0x33da, 0xffff, 0x34be, 0x3579, 0xffff, 0x366d, 0x3716, 0x37b4, + 0xffff, 0xffff, 0xffff, 0xffff, 0x38cf, 0xffff, 0xffff, 0x39c3, + 0x3a80, 0xffff, 0xffff, 0x3b60, 0x3bfa, 0x3c7b, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x3dec, 0x3e6b, 0x3ef0, 0x3f6f, + 0x4028, 0xffff, 0xffff, 0x412e, 0xffff, 0x41c8, 0xffff, 0xffff, + // Entry 6800 - 683F + 0x4294, 0xffff, 0x4331, 0xffff, 0xffff, 0xffff, 0xffff, 0x4431, + 0xffff, 0x4505, 0x45e5, 0x4695, 0x4722, 0xffff, 0xffff, 0xffff, + 0x4804, 0x48a5, 0x4948, 0xffff, 0xffff, 0x4a1b, 0x4ac2, 0x4b3f, + 0x4bc6, 0xffff, 0xffff, 0x4c85, 0x4d10, 0x4d9b, 0xffff, 0x4e57, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x4f4b, 0x4fcc, 0x5051, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x5177, + 0xffff, 0xffff, 0x521a, 0xffff, 0x52be, 0xffff, 0x5362, 0x53fb, + 0x547b, 0xffff, 0x5538, 0x55d5, 0xffff, 0xffff, 0xffff, 0x569c, + // Entry 6840 - 687F + 0x573b, 0x0002, 0x0003, 0x00d1, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, 0x0023, + 0x001d, 0x001a, 0x0020, 0x0001, 0x0002, 0x0000, 0x0001, 0x0002, + 0x0010, 0x0001, 0x0002, 0x0044, 0x0001, 0x0002, 0x004f, 0x0008, + 0x002f, 0x0066, 0x008b, 0x0000, 0x009f, 0x00af, 0x00c0, 0x0000, + 0x0002, 0x0032, 0x0054, 0x0003, 0x0036, 0x0000, 0x0045, 0x000d, + 0x000a, 0xffff, 0x0000, 0x0004, 0x0008, 0x000c, 0x0010, 0x0014, + // Entry 6880 - 68BF + 0x0018, 0x001c, 0x0020, 0x0025, 0x002a, 0x002e, 0x000d, 0x000a, + 0xffff, 0x0032, 0x003a, 0x0043, 0x004a, 0x0010, 0x0052, 0x0059, + 0x001c, 0x0060, 0x006b, 0x0077, 0x0081, 0x0002, 0x0000, 0x0057, + 0x000d, 0x000a, 0xffff, 0x008b, 0x008d, 0x008f, 0x0091, 0x008f, + 0x008b, 0x008b, 0x0093, 0x0095, 0x0097, 0x009a, 0x009c, 0x0002, + 0x0069, 0x007f, 0x0003, 0x006d, 0x0000, 0x0076, 0x0007, 0x000a, + 0x009e, 0x00a2, 0x00a7, 0x00ab, 0x00af, 0x00b3, 0x00b7, 0x0007, + 0x000a, 0x00bb, 0x00c0, 0x00c8, 0x00cf, 0x00d5, 0x00dd, 0x00e2, + // Entry 68C0 - 68FF + 0x0002, 0x0000, 0x0082, 0x0007, 0x0000, 0x214f, 0x21c4, 0x04dd, + 0x21c6, 0x21c6, 0x1e5d, 0x21c8, 0x0001, 0x008d, 0x0003, 0x0091, + 0x0000, 0x0098, 0x0005, 0x000a, 0xffff, 0x00e9, 0x00ed, 0x00f1, + 0x00f5, 0x0005, 0x000a, 0xffff, 0x00f9, 0x010a, 0x011c, 0x012e, + 0x0003, 0x00a9, 0x0000, 0x00a3, 0x0001, 0x00a5, 0x0002, 0x000a, + 0x0141, 0x0153, 0x0001, 0x00ab, 0x0002, 0x000a, 0x0167, 0x0172, + 0x0004, 0x00bd, 0x00b7, 0x00b4, 0x00ba, 0x0001, 0x0002, 0x0025, + 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x0282, 0x0001, 0x0002, + // Entry 6900 - 693F + 0x028b, 0x0004, 0x00ce, 0x00c8, 0x00c5, 0x00cb, 0x0001, 0x0000, + 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, + 0x0000, 0x0546, 0x0040, 0x0112, 0x0000, 0x0000, 0x0117, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x011c, 0x0000, 0x0000, 0x0121, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0126, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 6940 - 697F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0131, + 0x0000, 0x0136, 0x0000, 0x0000, 0x013b, 0x0000, 0x0000, 0x0140, + 0x0000, 0x0000, 0x0145, 0x0001, 0x0114, 0x0001, 0x000a, 0x017b, + 0x0001, 0x0119, 0x0001, 0x000a, 0x0180, 0x0001, 0x011e, 0x0001, + 0x000a, 0x0184, 0x0001, 0x0123, 0x0001, 0x000a, 0x0189, 0x0002, + 0x0129, 0x012c, 0x0001, 0x000a, 0x0193, 0x0003, 0x000a, 0x0197, + 0x019c, 0x019f, 0x0001, 0x0133, 0x0001, 0x000a, 0x01a4, 0x0001, + 0x0138, 0x0001, 0x000a, 0x01ba, 0x0001, 0x013d, 0x0001, 0x000a, + // Entry 6980 - 69BF + 0x01c1, 0x0001, 0x0142, 0x0001, 0x000a, 0x01c8, 0x0001, 0x0147, + 0x0001, 0x000a, 0x01d0, 0x0003, 0x0004, 0x05ae, 0x0a0d, 0x0012, + 0x0017, 0x0000, 0x0030, 0x0000, 0x00b7, 0x0000, 0x013e, 0x0169, + 0x038d, 0x0436, 0x04b4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0514, 0x0592, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x001d, + 0x0003, 0x0026, 0x002b, 0x0021, 0x0001, 0x0023, 0x0001, 0x0000, + 0x0000, 0x0001, 0x0028, 0x0001, 0x0000, 0x0000, 0x0001, 0x002d, + 0x0001, 0x0000, 0x0000, 0x0005, 0x0036, 0x0000, 0x0000, 0x0000, + // Entry 69C0 - 69FF + 0x00a1, 0x0002, 0x0039, 0x006d, 0x0003, 0x003d, 0x004d, 0x005d, + 0x000e, 0x000a, 0xffff, 0x01df, 0x01ec, 0x01f9, 0x0206, 0x0219, + 0x0226, 0x0236, 0x024f, 0x0268, 0x0281, 0x0291, 0x029e, 0x02b1, + 0x000e, 0x000a, 0xffff, 0x02c4, 0x02c8, 0x02cc, 0x02d0, 0x02d4, + 0x02d8, 0x02dc, 0x02e0, 0x02e4, 0x02e8, 0x02ef, 0x02f6, 0x02fd, + 0x000e, 0x000a, 0xffff, 0x01df, 0x01ec, 0x01f9, 0x0206, 0x0219, + 0x0226, 0x0236, 0x024f, 0x0268, 0x0281, 0x0291, 0x029e, 0x02b1, + 0x0003, 0x0071, 0x0081, 0x0091, 0x000e, 0x000a, 0xffff, 0x01df, + // Entry 6A00 - 6A3F + 0x01ec, 0x01f9, 0x0206, 0x0219, 0x0226, 0x0236, 0x024f, 0x0268, + 0x0281, 0x0291, 0x029e, 0x02b1, 0x000e, 0x000a, 0xffff, 0x02c4, + 0x02c8, 0x02cc, 0x02d0, 0x02d4, 0x02d8, 0x02dc, 0x02e0, 0x02e4, + 0x02e8, 0x02ef, 0x02f6, 0x02fd, 0x000e, 0x000a, 0xffff, 0x01df, + 0x01ec, 0x01f9, 0x0206, 0x0304, 0x0226, 0x0236, 0x024f, 0x0268, + 0x0281, 0x0291, 0x029e, 0x02b1, 0x0003, 0x00ab, 0x00b1, 0x00a5, + 0x0001, 0x00a7, 0x0002, 0x000a, 0x0309, 0x0317, 0x0001, 0x00ad, + 0x0002, 0x000a, 0x0309, 0x0317, 0x0001, 0x00b3, 0x0002, 0x000a, + // Entry 6A40 - 6A7F + 0x0309, 0x0317, 0x0005, 0x00bd, 0x0000, 0x0000, 0x0000, 0x0128, + 0x0002, 0x00c0, 0x00f4, 0x0003, 0x00c4, 0x00d4, 0x00e4, 0x000e, + 0x000a, 0xffff, 0x0325, 0x0341, 0x0354, 0x0364, 0x0377, 0x0381, + 0x039d, 0x03b3, 0x03d2, 0x03e2, 0x03ef, 0x0405, 0x0418, 0x000e, + 0x000a, 0xffff, 0x02c4, 0x02c8, 0x02cc, 0x02d0, 0x02d4, 0x02d8, + 0x02dc, 0x02e0, 0x02e4, 0x02e8, 0x02ef, 0x02f6, 0x02fd, 0x000e, + 0x000a, 0xffff, 0x0325, 0x0341, 0x0354, 0x0364, 0x0377, 0x0381, + 0x039d, 0x03b3, 0x03d2, 0x03e2, 0x03ef, 0x0405, 0x0418, 0x0003, + // Entry 6A80 - 6ABF + 0x00f8, 0x0108, 0x0118, 0x000e, 0x000a, 0xffff, 0x0325, 0x0341, + 0x0354, 0x0364, 0x0377, 0x0381, 0x039d, 0x03b3, 0x03d2, 0x03e2, + 0x03ef, 0x0405, 0x0418, 0x000e, 0x000a, 0xffff, 0x02c4, 0x02c8, + 0x02cc, 0x02d0, 0x02d4, 0x02d8, 0x02dc, 0x02e0, 0x02e4, 0x02e8, + 0x02ef, 0x02f6, 0x02fd, 0x000e, 0x000a, 0xffff, 0x0325, 0x0341, + 0x0354, 0x0364, 0x0377, 0x0381, 0x039d, 0x03b3, 0x03d2, 0x03e2, + 0x03ef, 0x0405, 0x0418, 0x0003, 0x0132, 0x0138, 0x012c, 0x0001, + 0x012e, 0x0002, 0x000a, 0x0309, 0x0317, 0x0001, 0x0134, 0x0002, + // Entry 6AC0 - 6AFF + 0x000a, 0x0309, 0x0317, 0x0001, 0x013a, 0x0002, 0x000a, 0x0309, + 0x0317, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0147, + 0x0000, 0x0158, 0x0004, 0x0155, 0x014f, 0x014c, 0x0152, 0x0001, + 0x000a, 0x042e, 0x0001, 0x000a, 0x0440, 0x0001, 0x0002, 0x0044, + 0x0001, 0x0002, 0x004f, 0x0004, 0x0166, 0x0160, 0x015d, 0x0163, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x0172, 0x01d7, 0x022e, + 0x0263, 0x0340, 0x035a, 0x036b, 0x037c, 0x0002, 0x0175, 0x01a6, + // Entry 6B00 - 6B3F + 0x0003, 0x0179, 0x0188, 0x0197, 0x000d, 0x0005, 0xffff, 0x018f, + 0x4fe4, 0x4fee, 0x4ffe, 0x5011, 0x01dc, 0x01e6, 0x5018, 0x5028, + 0x5047, 0x505d, 0x5073, 0x000d, 0x000a, 0xffff, 0x044c, 0x0453, + 0x045a, 0x0461, 0x0465, 0x046c, 0x0476, 0x047d, 0x0481, 0x0488, + 0x048c, 0x0490, 0x000d, 0x000a, 0xffff, 0x0497, 0x04b3, 0x04d5, + 0x04e5, 0x0465, 0x046c, 0x04f8, 0x0508, 0x0518, 0x0537, 0x054d, + 0x0563, 0x0003, 0x01aa, 0x01b9, 0x01c8, 0x000d, 0x000a, 0xffff, + 0x0497, 0x04b3, 0x04d5, 0x04e5, 0x0465, 0x046c, 0x04f8, 0x0508, + // Entry 6B40 - 6B7F + 0x0518, 0x0537, 0x054d, 0x0563, 0x000d, 0x000a, 0xffff, 0x044c, + 0x0453, 0x045a, 0x0461, 0x0465, 0x046c, 0x0476, 0x047d, 0x0481, + 0x0488, 0x048c, 0x0490, 0x000d, 0x000a, 0xffff, 0x0497, 0x04b3, + 0x04d5, 0x04e5, 0x0465, 0x046c, 0x04f8, 0x0508, 0x0518, 0x0537, + 0x054d, 0x0563, 0x0002, 0x01da, 0x0204, 0x0005, 0x01e0, 0x01e9, + 0x01fb, 0x0000, 0x01f2, 0x0007, 0x000a, 0x057c, 0x0586, 0x0590, + 0x05a0, 0x05aa, 0x05c3, 0x05d3, 0x0007, 0x000a, 0x05dd, 0x05e1, + 0x05e8, 0x05ec, 0x05f3, 0x05fa, 0x0601, 0x0007, 0x000a, 0x0605, + // Entry 6B80 - 6BBF + 0x060c, 0x0616, 0x061d, 0x0627, 0x0631, 0x063b, 0x0007, 0x000a, + 0x0645, 0x0658, 0x066b, 0x0684, 0x0697, 0x06b9, 0x06d2, 0x0005, + 0x020a, 0x0213, 0x0225, 0x0000, 0x021c, 0x0007, 0x000a, 0x057c, + 0x0586, 0x0590, 0x05a0, 0x05aa, 0x05c3, 0x05d3, 0x0007, 0x000a, + 0x05dd, 0x05e1, 0x05e8, 0x05ec, 0x05f3, 0x05fa, 0x0601, 0x0007, + 0x000a, 0x0605, 0x060c, 0x0616, 0x061d, 0x0627, 0x0631, 0x05d3, + 0x0007, 0x000a, 0x0645, 0x0658, 0x066b, 0x0684, 0x06e5, 0x06b9, + 0x06d2, 0x0002, 0x0231, 0x024a, 0x0003, 0x0235, 0x023c, 0x0243, + // Entry 6BC0 - 6BFF + 0x0005, 0x0000, 0xffff, 0x04e3, 0x04e6, 0x04e9, 0x04ec, 0x0005, + 0x000a, 0xffff, 0x02c4, 0x02c8, 0x02cc, 0x02d0, 0x0005, 0x000a, + 0xffff, 0x0707, 0x0723, 0x0758, 0x0787, 0x0003, 0x024e, 0x0255, + 0x025c, 0x0005, 0x0000, 0xffff, 0x04e3, 0x04e6, 0x04e9, 0x04ec, + 0x0005, 0x000a, 0xffff, 0x02c4, 0x02c8, 0x02cc, 0x02d0, 0x0005, + 0x000a, 0xffff, 0x0707, 0x0723, 0x0758, 0x0787, 0x0002, 0x0266, + 0x02d3, 0x0003, 0x026a, 0x028d, 0x02b0, 0x000a, 0x0275, 0x0278, + 0x0000, 0x027b, 0x0281, 0x0287, 0x028a, 0x0000, 0x027e, 0x0284, + // Entry 6C00 - 6C3F + 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0001, 0x000a, + 0x07b6, 0x0001, 0x000a, 0x07c0, 0x0001, 0x000a, 0x07cd, 0x0001, + 0x000a, 0x07dd, 0x0001, 0x000a, 0x07ed, 0x0001, 0x000a, 0x0803, + 0x000a, 0x0298, 0x029b, 0x0000, 0x029e, 0x02a4, 0x02aa, 0x02ad, + 0x0000, 0x02a1, 0x02a7, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, + 0x04f2, 0x0001, 0x000a, 0x07b6, 0x0001, 0x000a, 0x07c0, 0x0001, + 0x000a, 0x07cd, 0x0001, 0x000a, 0x07dd, 0x0001, 0x000a, 0x07ed, + 0x0001, 0x000a, 0x0803, 0x000a, 0x02bb, 0x02be, 0x0000, 0x02c1, + // Entry 6C40 - 6C7F + 0x02c7, 0x02cd, 0x02d0, 0x0000, 0x02c4, 0x02ca, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0001, 0x000a, 0x07b6, 0x0001, + 0x000a, 0x07c0, 0x0001, 0x000a, 0x07cd, 0x0001, 0x000a, 0x07dd, + 0x0001, 0x000a, 0x07ed, 0x0001, 0x000a, 0x0816, 0x0003, 0x02d7, + 0x02fa, 0x031d, 0x000a, 0x02e2, 0x02e5, 0x0000, 0x02e8, 0x02ee, + 0x02f4, 0x02f7, 0x0000, 0x02eb, 0x02f1, 0x0001, 0x0000, 0x04ef, + 0x0001, 0x0000, 0x04f2, 0x0001, 0x000a, 0x07b6, 0x0001, 0x000a, + 0x07c0, 0x0001, 0x000a, 0x07cd, 0x0001, 0x000a, 0x07dd, 0x0001, + // Entry 6C80 - 6CBF + 0x000a, 0x07ed, 0x0001, 0x000a, 0x0803, 0x000a, 0x0305, 0x0308, + 0x0000, 0x030b, 0x0311, 0x0317, 0x031a, 0x0000, 0x030e, 0x0314, + 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0001, 0x000a, + 0x07b6, 0x0001, 0x000a, 0x07c0, 0x0001, 0x000a, 0x07cd, 0x0001, + 0x000a, 0x07dd, 0x0001, 0x000a, 0x07ed, 0x0001, 0x000a, 0x0803, + 0x000a, 0x0328, 0x032b, 0x0000, 0x032e, 0x0334, 0x033a, 0x033d, + 0x0000, 0x0331, 0x0337, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, + 0x04f2, 0x0001, 0x000a, 0x07b6, 0x0001, 0x000a, 0x07c0, 0x0001, + // Entry 6CC0 - 6CFF + 0x000a, 0x07cd, 0x0001, 0x000a, 0x07dd, 0x0001, 0x000a, 0x07ed, + 0x0001, 0x000a, 0x0803, 0x0003, 0x034f, 0x0000, 0x0344, 0x0002, + 0x0347, 0x034b, 0x0002, 0x000a, 0x082f, 0x0885, 0x0002, 0x000a, + 0x0854, 0x08a7, 0x0002, 0x0352, 0x0356, 0x0002, 0x000a, 0x082f, + 0x08c9, 0x0002, 0x000a, 0x0854, 0x08a7, 0x0004, 0x0368, 0x0362, + 0x035f, 0x0365, 0x0001, 0x0005, 0x0615, 0x0001, 0x0005, 0x0625, + 0x0001, 0x0002, 0x0282, 0x0001, 0x0006, 0x0d7c, 0x0004, 0x0379, + 0x0373, 0x0370, 0x0376, 0x0001, 0x0002, 0x04e3, 0x0001, 0x0002, + // Entry 6D00 - 6D3F + 0x04f2, 0x0001, 0x0002, 0x04fe, 0x0001, 0x0002, 0x0508, 0x0004, + 0x038a, 0x0384, 0x0381, 0x0387, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0008, 0x0396, 0x0000, 0x0000, 0x0000, 0x0401, 0x0414, 0x0000, + 0x0425, 0x0002, 0x0399, 0x03cd, 0x0003, 0x039d, 0x03ad, 0x03bd, + 0x000e, 0x000a, 0x0957, 0x08e5, 0x08f5, 0x0908, 0x091b, 0x092b, + 0x093b, 0x094a, 0x0967, 0x0977, 0x0987, 0x0997, 0x09a7, 0x09aa, + 0x000e, 0x000a, 0x02dc, 0x02c4, 0x02c8, 0x02cc, 0x02d0, 0x02d4, + // Entry 6D40 - 6D7F + 0x02d8, 0x02dc, 0x02e0, 0x02e4, 0x02e8, 0x02ef, 0x02f6, 0x02fd, + 0x000e, 0x000a, 0x0957, 0x08e5, 0x08f5, 0x0908, 0x091b, 0x092b, + 0x093b, 0x094a, 0x0967, 0x0977, 0x0987, 0x0997, 0x09a7, 0x09aa, + 0x0003, 0x03d1, 0x03e1, 0x03f1, 0x000e, 0x000a, 0x0957, 0x08e5, + 0x08f5, 0x0908, 0x091b, 0x092b, 0x093b, 0x094a, 0x0967, 0x0977, + 0x0987, 0x0997, 0x09a7, 0x09aa, 0x000e, 0x000a, 0x02dc, 0x02c4, + 0x02c8, 0x02cc, 0x02d0, 0x02d4, 0x02d8, 0x02dc, 0x02e0, 0x02e4, + 0x02e8, 0x02ef, 0x02f6, 0x02fd, 0x000e, 0x000a, 0x0957, 0x08e5, + // Entry 6D80 - 6DBF + 0x08f5, 0x0908, 0x091b, 0x092b, 0x093b, 0x094a, 0x0967, 0x0977, + 0x0987, 0x0997, 0x09a7, 0x09aa, 0x0003, 0x040a, 0x040f, 0x0405, + 0x0001, 0x0407, 0x0001, 0x0000, 0x04ef, 0x0001, 0x040c, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x0411, 0x0001, 0x0000, 0x04ef, 0x0004, + 0x0422, 0x041c, 0x0419, 0x041f, 0x0001, 0x000a, 0x042e, 0x0001, + 0x000a, 0x0440, 0x0001, 0x0002, 0x0044, 0x0001, 0x0002, 0x004f, + 0x0004, 0x0433, 0x042d, 0x042a, 0x0430, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + // Entry 6DC0 - 6DFF + 0x03c6, 0x0005, 0x043c, 0x0000, 0x0000, 0x0000, 0x04a1, 0x0002, + 0x043f, 0x0470, 0x0003, 0x0443, 0x0452, 0x0461, 0x000d, 0x000a, + 0xffff, 0x09b7, 0x09c7, 0x09d7, 0x09ed, 0x09fd, 0x0a10, 0x0a20, + 0x0a33, 0x0a49, 0x0a65, 0x0a6f, 0x0a79, 0x000d, 0x000a, 0xffff, + 0x02c4, 0x02c8, 0x02cc, 0x02d0, 0x02d4, 0x02d8, 0x02dc, 0x02e0, + 0x02e4, 0x02e8, 0x02ef, 0x02f6, 0x000d, 0x000a, 0xffff, 0x09b7, + 0x09c7, 0x09d7, 0x09ed, 0x09fd, 0x0a10, 0x0a20, 0x0a33, 0x0a49, + 0x0a65, 0x0a6f, 0x0a79, 0x0003, 0x0474, 0x0483, 0x0492, 0x000d, + // Entry 6E00 - 6E3F + 0x000a, 0xffff, 0x09b7, 0x09c7, 0x09d7, 0x09ed, 0x09fd, 0x0a10, + 0x0a20, 0x0a33, 0x0a49, 0x0a65, 0x0a6f, 0x0a79, 0x000d, 0x000a, + 0xffff, 0x02c4, 0x02c8, 0x02cc, 0x02d0, 0x02d4, 0x02d8, 0x02dc, + 0x02e0, 0x02e4, 0x02e8, 0x02ef, 0x02f6, 0x000d, 0x000a, 0xffff, + 0x09b7, 0x09c7, 0x09d7, 0x09ed, 0x09fd, 0x0a10, 0x0a20, 0x0a33, + 0x0a49, 0x0a65, 0x0a6f, 0x0a79, 0x0003, 0x04aa, 0x04af, 0x04a5, + 0x0001, 0x04a7, 0x0001, 0x000a, 0x0a8f, 0x0001, 0x04ac, 0x0001, + 0x000a, 0x0a8f, 0x0001, 0x04b1, 0x0001, 0x000a, 0x0a8f, 0x0005, + // Entry 6E40 - 6E7F + 0x04ba, 0x0000, 0x0000, 0x0000, 0x0501, 0x0002, 0x04bd, 0x04df, + 0x0003, 0x0000, 0x04c1, 0x04d0, 0x000d, 0x000a, 0xffff, 0x02c4, + 0x02c8, 0x02cc, 0x02d0, 0x02d4, 0x02d8, 0x02dc, 0x02e0, 0x02e4, + 0x02e8, 0x02ef, 0x02f6, 0x000d, 0x000a, 0xffff, 0x0a99, 0x0aa9, + 0x0ab3, 0x0ad6, 0x0af3, 0x0b1c, 0x0b3f, 0x0b49, 0x0b5c, 0x0b6c, + 0x0b82, 0x0b98, 0x0003, 0x0000, 0x04e3, 0x04f2, 0x000d, 0x000a, + 0xffff, 0x02c4, 0x02c8, 0x02cc, 0x02d0, 0x02d4, 0x02d8, 0x02dc, + 0x02e0, 0x02e4, 0x02e8, 0x02ef, 0x02f6, 0x000d, 0x000a, 0xffff, + // Entry 6E80 - 6EBF + 0x0a99, 0x0aa9, 0x0ab3, 0x0ad6, 0x0af3, 0x0b1c, 0x0b3f, 0x0b49, + 0x0b5c, 0x0b6c, 0x0b82, 0x0b98, 0x0003, 0x050a, 0x050f, 0x0505, + 0x0001, 0x0507, 0x0001, 0x0005, 0x066a, 0x0001, 0x050c, 0x0001, + 0x0005, 0x066a, 0x0001, 0x0511, 0x0001, 0x0005, 0x066a, 0x0005, + 0x051a, 0x0000, 0x0000, 0x0000, 0x057f, 0x0002, 0x051d, 0x054e, + 0x0003, 0x0521, 0x0530, 0x053f, 0x000d, 0x000a, 0xffff, 0x0bb4, + 0x0bd6, 0x0bf8, 0x0c0e, 0x0c18, 0x0c2b, 0x0c44, 0x0c54, 0x0c61, + 0x0c6e, 0x0c75, 0x0c88, 0x000d, 0x000a, 0xffff, 0x02c4, 0x02c8, + // Entry 6EC0 - 6EFF + 0x02cc, 0x02d0, 0x02d4, 0x02d8, 0x02dc, 0x02e0, 0x02e4, 0x02e8, + 0x02ef, 0x02f6, 0x000d, 0x000a, 0xffff, 0x0bb4, 0x0bd6, 0x0bf8, + 0x0c0e, 0x0c18, 0x0c2b, 0x0c44, 0x0c54, 0x0ca4, 0x0c6e, 0x0c75, + 0x0c88, 0x0003, 0x0552, 0x0561, 0x0570, 0x000d, 0x000a, 0xffff, + 0x0bb4, 0x0bd6, 0x0bf8, 0x0c0e, 0x0c18, 0x0c2b, 0x0c44, 0x0c54, + 0x0c61, 0x0c6e, 0x0c75, 0x0c88, 0x000d, 0x000a, 0xffff, 0x02c4, + 0x02c8, 0x02cc, 0x02d0, 0x02d4, 0x02d8, 0x02dc, 0x02e0, 0x02e4, + 0x02e8, 0x02ef, 0x02f6, 0x000d, 0x000a, 0xffff, 0x0bb4, 0x0bd6, + // Entry 6F00 - 6F3F + 0x0bf8, 0x0c0e, 0x0c18, 0x0c2b, 0x0c44, 0x0c54, 0x0ca4, 0x0c6e, + 0x0c75, 0x0c88, 0x0003, 0x0588, 0x058d, 0x0583, 0x0001, 0x0585, + 0x0001, 0x0000, 0x1a1d, 0x0001, 0x058a, 0x0001, 0x0000, 0x1a1d, + 0x0001, 0x058f, 0x0001, 0x0000, 0x1a1d, 0x0005, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0598, 0x0003, 0x05a2, 0x05a8, 0x059c, 0x0001, + 0x059e, 0x0002, 0x000a, 0x0cb4, 0x0cc5, 0x0001, 0x05a4, 0x0002, + 0x000a, 0x0cb4, 0x0cc5, 0x0001, 0x05aa, 0x0002, 0x000a, 0x0cb4, + 0x0cc5, 0x0042, 0x05f1, 0x05f6, 0x05fb, 0x0600, 0x0617, 0x062e, + // Entry 6F40 - 6F7F + 0x0645, 0x065c, 0x066e, 0x0680, 0x0697, 0x06ae, 0x06c5, 0x06e0, + 0x06fb, 0x0716, 0x071b, 0x0720, 0x0725, 0x073e, 0x0757, 0x0770, + 0x0775, 0x077a, 0x077f, 0x0784, 0x0789, 0x078e, 0x0793, 0x0798, + 0x079d, 0x07b1, 0x07c5, 0x07d9, 0x07ed, 0x0801, 0x0815, 0x0829, + 0x083d, 0x0851, 0x0865, 0x0879, 0x088d, 0x08a1, 0x08b5, 0x08c9, + 0x08dd, 0x08f1, 0x0905, 0x0919, 0x092d, 0x0941, 0x0946, 0x094b, + 0x0950, 0x0966, 0x0978, 0x098a, 0x09a0, 0x09b2, 0x09c4, 0x09da, + 0x09ec, 0x09fe, 0x0a03, 0x0a08, 0x0001, 0x05f3, 0x0001, 0x0005, + // Entry 6F80 - 6FBF + 0x066a, 0x0001, 0x05f8, 0x0001, 0x0005, 0x066a, 0x0001, 0x05fd, + 0x0001, 0x0005, 0x066a, 0x0003, 0x0604, 0x0607, 0x060c, 0x0001, + 0x000a, 0x0ce1, 0x0003, 0x000a, 0x0ceb, 0x0cfc, 0x0d0d, 0x0002, + 0x060f, 0x0613, 0x0002, 0x000a, 0x0d24, 0x0d24, 0x0002, 0x000a, + 0x0d35, 0x0d35, 0x0003, 0x061b, 0x061e, 0x0623, 0x0001, 0x000a, + 0x0ce1, 0x0003, 0x000a, 0x0ceb, 0x0cfc, 0x0d0d, 0x0002, 0x0626, + 0x062a, 0x0002, 0x000a, 0x0d24, 0x0d24, 0x0002, 0x000a, 0x0d35, + 0x0d35, 0x0003, 0x0632, 0x0635, 0x063a, 0x0001, 0x000a, 0x0ce1, + // Entry 6FC0 - 6FFF + 0x0003, 0x000a, 0x0ceb, 0x0cfc, 0x0d0d, 0x0002, 0x063d, 0x0641, + 0x0002, 0x000a, 0x0d24, 0x0d24, 0x0002, 0x000a, 0x0d35, 0x0d35, + 0x0003, 0x0649, 0x064c, 0x0651, 0x0001, 0x000a, 0x0707, 0x0003, + 0x000a, 0x0d56, 0x0d79, 0x0d9c, 0x0002, 0x0654, 0x0658, 0x0002, + 0x000a, 0x0dc5, 0x0dc5, 0x0002, 0x000a, 0x0de8, 0x0de8, 0x0003, + 0x0660, 0x0000, 0x0663, 0x0001, 0x000a, 0x0707, 0x0002, 0x0666, + 0x066a, 0x0002, 0x000a, 0x0dc5, 0x0dc5, 0x0002, 0x000a, 0x0de8, + 0x0de8, 0x0003, 0x0672, 0x0000, 0x0675, 0x0001, 0x000a, 0x0707, + // Entry 7000 - 703F + 0x0002, 0x0678, 0x067c, 0x0002, 0x000a, 0x0dc5, 0x0dc5, 0x0002, + 0x000a, 0x0de8, 0x0de8, 0x0003, 0x0684, 0x0687, 0x068c, 0x0001, + 0x000a, 0x0e12, 0x0003, 0x000a, 0x0e1c, 0x0e2d, 0x0e3e, 0x0002, + 0x068f, 0x0693, 0x0002, 0x000a, 0x0e55, 0x0e55, 0x0002, 0x000a, + 0x0e66, 0x0e66, 0x0003, 0x069b, 0x069e, 0x06a3, 0x0001, 0x000a, + 0x0e12, 0x0003, 0x000a, 0x0e1c, 0x0e2d, 0x0e3e, 0x0002, 0x06a6, + 0x06aa, 0x0002, 0x000a, 0x0e55, 0x0e55, 0x0002, 0x000a, 0x0e66, + 0x0e66, 0x0003, 0x06b2, 0x06b5, 0x06ba, 0x0001, 0x000a, 0x0e12, + // Entry 7040 - 707F + 0x0003, 0x000a, 0x0e1c, 0x0e2d, 0x0e3e, 0x0002, 0x06bd, 0x06c1, + 0x0002, 0x000a, 0x0e55, 0x0e55, 0x0002, 0x000a, 0x0e66, 0x0e66, + 0x0004, 0x06ca, 0x06cd, 0x06d2, 0x06dd, 0x0001, 0x0005, 0x082d, + 0x0003, 0x000a, 0x0e7e, 0x0e98, 0x0eb2, 0x0002, 0x06d5, 0x06d9, + 0x0002, 0x000a, 0x0ed2, 0x0ed2, 0x0002, 0x000a, 0x0eec, 0x0eec, + 0x0001, 0x000a, 0x0f0d, 0x0004, 0x06e5, 0x06e8, 0x06ed, 0x06f8, + 0x0001, 0x0005, 0x082d, 0x0003, 0x000a, 0x0e7e, 0x0e98, 0x0eb2, + 0x0002, 0x06f0, 0x06f4, 0x0002, 0x000a, 0x0ed2, 0x0ed2, 0x0002, + // Entry 7080 - 70BF + 0x000a, 0x0eec, 0x0eec, 0x0001, 0x000a, 0x0f0d, 0x0004, 0x0700, + 0x0703, 0x0708, 0x0713, 0x0001, 0x0005, 0x082d, 0x0003, 0x000a, + 0x0e7e, 0x0e98, 0x0eb2, 0x0002, 0x070b, 0x070f, 0x0002, 0x000a, + 0x0ed2, 0x0ed2, 0x0002, 0x000a, 0x0eec, 0x0eec, 0x0001, 0x000a, + 0x0f2e, 0x0001, 0x0718, 0x0001, 0x000a, 0x0f4f, 0x0001, 0x071d, + 0x0001, 0x000a, 0x0f4f, 0x0001, 0x0722, 0x0001, 0x000a, 0x0f4f, + 0x0003, 0x0729, 0x072c, 0x0733, 0x0001, 0x0005, 0x0915, 0x0005, + 0x000a, 0x0f86, 0x0f96, 0x0f9d, 0x0f72, 0x0fb6, 0x0002, 0x0736, + // Entry 70C0 - 70FF + 0x073a, 0x0002, 0x000a, 0x0fd3, 0x0fd3, 0x0002, 0x000a, 0x0ff7, + 0x0ff7, 0x0003, 0x0742, 0x0745, 0x074c, 0x0001, 0x0005, 0x0915, + 0x0005, 0x000a, 0x0f86, 0x0f96, 0x0f9d, 0x0f72, 0x0fb6, 0x0002, + 0x074f, 0x0753, 0x0002, 0x000a, 0x0fd3, 0x0fd3, 0x0002, 0x000a, + 0x0ff7, 0x0ff7, 0x0003, 0x075b, 0x075e, 0x0765, 0x0001, 0x0005, + 0x0915, 0x0005, 0x000a, 0x0f86, 0x0f96, 0x0f9d, 0x0f72, 0x0fb6, + 0x0002, 0x0768, 0x076c, 0x0002, 0x000a, 0x0fd3, 0x0fd3, 0x0002, + 0x000a, 0x0ff7, 0x0ff7, 0x0001, 0x0772, 0x0001, 0x000a, 0x100f, + // Entry 7100 - 713F + 0x0001, 0x0777, 0x0001, 0x000a, 0x100f, 0x0001, 0x077c, 0x0001, + 0x000a, 0x100f, 0x0001, 0x0781, 0x0001, 0x000a, 0x1029, 0x0001, + 0x0786, 0x0001, 0x000a, 0x1029, 0x0001, 0x078b, 0x0001, 0x000a, + 0x1029, 0x0001, 0x0790, 0x0001, 0x000a, 0x104c, 0x0001, 0x0795, + 0x0001, 0x000a, 0x104c, 0x0001, 0x079a, 0x0001, 0x000a, 0x104c, + 0x0003, 0x0000, 0x07a1, 0x07a6, 0x0003, 0x000a, 0x1079, 0x1093, + 0x10ad, 0x0002, 0x07a9, 0x07ad, 0x0002, 0x000a, 0x10cd, 0x10cd, + 0x0002, 0x000a, 0x10ed, 0x10ed, 0x0003, 0x0000, 0x07b5, 0x07ba, + // Entry 7140 - 717F + 0x0003, 0x000a, 0x1079, 0x1093, 0x10ad, 0x0002, 0x07bd, 0x07c1, + 0x0002, 0x000a, 0x10cd, 0x10cd, 0x0002, 0x000a, 0x10ed, 0x10ed, + 0x0003, 0x0000, 0x07c9, 0x07ce, 0x0003, 0x000a, 0x1079, 0x1093, + 0x10ad, 0x0002, 0x07d1, 0x07d5, 0x0002, 0x000a, 0x10cd, 0x10cd, + 0x0002, 0x000a, 0x10ed, 0x10ed, 0x0003, 0x0000, 0x07dd, 0x07e2, + 0x0003, 0x000a, 0x110e, 0x1128, 0x1142, 0x0002, 0x07e5, 0x07e9, + 0x0002, 0x000a, 0x1162, 0x1162, 0x0002, 0x000a, 0x1182, 0x1162, + 0x0003, 0x0000, 0x07f1, 0x07f6, 0x0003, 0x000a, 0x110e, 0x1128, + // Entry 7180 - 71BF + 0x1142, 0x0002, 0x07f9, 0x07fd, 0x0002, 0x000a, 0x1162, 0x1162, + 0x0002, 0x000a, 0x1182, 0x1182, 0x0003, 0x0000, 0x0805, 0x080a, + 0x0003, 0x000a, 0x110e, 0x1128, 0x1142, 0x0002, 0x080d, 0x0811, + 0x0002, 0x000a, 0x1162, 0x1162, 0x0002, 0x000a, 0x1182, 0x1182, + 0x0003, 0x0000, 0x0819, 0x081e, 0x0003, 0x000a, 0x11a3, 0x11c3, + 0x11e3, 0x0002, 0x0821, 0x0825, 0x0002, 0x000a, 0x1209, 0x1209, + 0x0002, 0x000a, 0x1229, 0x1229, 0x0003, 0x0000, 0x082d, 0x0832, + 0x0003, 0x000a, 0x11a3, 0x11c3, 0x11e3, 0x0002, 0x0835, 0x0839, + // Entry 71C0 - 71FF + 0x0002, 0x000a, 0x1209, 0x1209, 0x0002, 0x000a, 0x1229, 0x1229, + 0x0003, 0x0000, 0x0841, 0x0846, 0x0003, 0x000a, 0x11a3, 0x11c3, + 0x11e3, 0x0002, 0x0849, 0x084d, 0x0002, 0x000a, 0x1209, 0x1209, + 0x0002, 0x000a, 0x1229, 0x1229, 0x0003, 0x0000, 0x0855, 0x085a, + 0x0003, 0x000a, 0x1250, 0x126a, 0x1284, 0x0002, 0x085d, 0x0861, + 0x0002, 0x000a, 0x12a4, 0x12a4, 0x0002, 0x000a, 0x12be, 0x12be, + 0x0003, 0x0000, 0x0869, 0x086e, 0x0003, 0x000a, 0x1250, 0x126a, + 0x1284, 0x0002, 0x0871, 0x0875, 0x0002, 0x000a, 0x12a4, 0x12a4, + // Entry 7200 - 723F + 0x0002, 0x000a, 0x12be, 0x12be, 0x0003, 0x0000, 0x087d, 0x0882, + 0x0003, 0x000a, 0x1250, 0x126a, 0x1284, 0x0002, 0x0885, 0x0889, + 0x0002, 0x000a, 0x12a4, 0x12a4, 0x0002, 0x000a, 0x12be, 0x12be, + 0x0003, 0x0000, 0x0891, 0x0896, 0x0003, 0x000a, 0x12df, 0x1308, + 0x1331, 0x0002, 0x0899, 0x089d, 0x0002, 0x000a, 0x1360, 0x1360, + 0x0002, 0x000a, 0x1389, 0x1389, 0x0003, 0x0000, 0x08a5, 0x08aa, + 0x0003, 0x000a, 0x12df, 0x1308, 0x1331, 0x0002, 0x08ad, 0x08b1, + 0x0002, 0x000a, 0x1360, 0x1360, 0x0002, 0x000a, 0x1389, 0x1389, + // Entry 7240 - 727F + 0x0003, 0x0000, 0x08b9, 0x08be, 0x0003, 0x000a, 0x12df, 0x1308, + 0x1331, 0x0002, 0x08c1, 0x08c5, 0x0002, 0x000a, 0x1360, 0x1360, + 0x0002, 0x000a, 0x1389, 0x1389, 0x0003, 0x0000, 0x08cd, 0x08d2, + 0x0003, 0x000a, 0x13b9, 0x13d9, 0x13f9, 0x0002, 0x08d5, 0x08d9, + 0x0002, 0x000a, 0x141f, 0x141f, 0x0002, 0x000a, 0x143f, 0x143f, + 0x0003, 0x0000, 0x08e1, 0x08e6, 0x0003, 0x000a, 0x13b9, 0x13d9, + 0x13f9, 0x0002, 0x08e9, 0x08ed, 0x0002, 0x000a, 0x141f, 0x141f, + 0x0002, 0x000a, 0x143f, 0x143f, 0x0003, 0x0000, 0x08f5, 0x08fa, + // Entry 7280 - 72BF + 0x0003, 0x000a, 0x13b9, 0x13d9, 0x13f9, 0x0002, 0x08fd, 0x0901, + 0x0002, 0x000a, 0x141f, 0x141f, 0x0002, 0x000a, 0x143f, 0x143f, + 0x0003, 0x0000, 0x0909, 0x090e, 0x0003, 0x000a, 0x1466, 0x1480, + 0x149a, 0x0002, 0x0911, 0x0915, 0x0002, 0x000a, 0x14ba, 0x14ba, + 0x0002, 0x000a, 0x14d4, 0x14d4, 0x0003, 0x0000, 0x091d, 0x0922, + 0x0003, 0x000a, 0x1466, 0x1480, 0x149a, 0x0002, 0x0925, 0x0929, + 0x0002, 0x000a, 0x14ba, 0x14ba, 0x0002, 0x000a, 0x14d4, 0x14d4, + 0x0003, 0x0000, 0x0931, 0x0936, 0x0003, 0x000a, 0x1466, 0x1480, + // Entry 72C0 - 72FF + 0x149a, 0x0002, 0x0939, 0x093d, 0x0002, 0x000a, 0x14ba, 0x14ba, + 0x0002, 0x000a, 0x14d4, 0x14d4, 0x0001, 0x0943, 0x0001, 0x0007, + 0x0892, 0x0001, 0x0948, 0x0001, 0x0007, 0x0892, 0x0001, 0x094d, + 0x0001, 0x0007, 0x0892, 0x0003, 0x0954, 0x0957, 0x095b, 0x0001, + 0x0005, 0x1240, 0x0002, 0x000a, 0xffff, 0x14f5, 0x0002, 0x095e, + 0x0962, 0x0002, 0x000a, 0x1512, 0x1512, 0x0002, 0x000a, 0x152c, + 0x152c, 0x0003, 0x096a, 0x0000, 0x096d, 0x0001, 0x0005, 0x1240, + 0x0002, 0x0970, 0x0974, 0x0002, 0x000a, 0x1512, 0x1512, 0x0002, + // Entry 7300 - 733F + 0x000a, 0x152c, 0x152c, 0x0003, 0x097c, 0x0000, 0x097f, 0x0001, + 0x0005, 0x1240, 0x0002, 0x0982, 0x0986, 0x0002, 0x000a, 0x1512, + 0x1512, 0x0002, 0x000a, 0x152c, 0x152c, 0x0003, 0x098e, 0x0991, + 0x0995, 0x0001, 0x0005, 0x12ae, 0x0002, 0x000a, 0xffff, 0x154a, + 0x0002, 0x0998, 0x099c, 0x0002, 0x000a, 0x1561, 0x1561, 0x0002, + 0x000a, 0x1578, 0x1578, 0x0003, 0x09a4, 0x0000, 0x09a7, 0x0001, + 0x0005, 0x12ae, 0x0002, 0x09aa, 0x09ae, 0x0002, 0x000a, 0x1561, + 0x1561, 0x0002, 0x000a, 0x1578, 0x1578, 0x0003, 0x09b6, 0x0000, + // Entry 7340 - 737F + 0x09b9, 0x0001, 0x0005, 0x12ae, 0x0002, 0x09bc, 0x09c0, 0x0002, + 0x000a, 0x1561, 0x1561, 0x0002, 0x000a, 0x1578, 0x1578, 0x0003, + 0x09c8, 0x09cb, 0x09cf, 0x0001, 0x000a, 0x1596, 0x0002, 0x000a, + 0xffff, 0x15ac, 0x0002, 0x09d2, 0x09d6, 0x0002, 0x000a, 0x15b6, + 0x15b6, 0x0002, 0x000a, 0x15d3, 0x15d3, 0x0003, 0x09de, 0x0000, + 0x09e1, 0x0001, 0x000a, 0x1596, 0x0002, 0x09e4, 0x09e8, 0x0002, + 0x000a, 0x15b6, 0x15b6, 0x0002, 0x000a, 0x15d3, 0x15d3, 0x0003, + 0x09f0, 0x0000, 0x09f3, 0x0001, 0x000a, 0x1596, 0x0002, 0x09f6, + // Entry 7380 - 73BF + 0x09fa, 0x0002, 0x000a, 0x15b6, 0x15b6, 0x0002, 0x000a, 0x1600, + 0x1600, 0x0001, 0x0a00, 0x0001, 0x000a, 0x1624, 0x0001, 0x0a05, + 0x0001, 0x000a, 0x1641, 0x0001, 0x0a0a, 0x0001, 0x000a, 0x1641, + 0x0004, 0x0a12, 0x0a17, 0x0a1c, 0x0a2b, 0x0003, 0x0000, 0x1dc7, + 0x21ca, 0x21d2, 0x0003, 0x000a, 0x1651, 0x1662, 0x1689, 0x0002, + 0x0000, 0x0a1f, 0x0003, 0x0000, 0x0a26, 0x0a23, 0x0001, 0x000a, + 0x16a7, 0x0003, 0x000a, 0xffff, 0x16f5, 0x173d, 0x0002, 0x0c12, + 0x0a2e, 0x0003, 0x0a32, 0x0b72, 0x0ad2, 0x009e, 0x000a, 0xffff, + // Entry 73C0 - 73FF + 0xffff, 0xffff, 0xffff, 0x18ad, 0x1981, 0x1aa2, 0x1b3d, 0x1be4, + 0x1ca6, 0x1d7d, 0x1eab, 0x1f4f, 0x20d2, 0x2143, 0x2202, 0x2306, + 0x23bc, 0x2460, 0x256d, 0x26bc, 0x279c, 0x288e, 0x2944, 0x29d6, + 0xffff, 0xffff, 0x2ac0, 0xffff, 0x2bc1, 0xffff, 0x2c95, 0x2d21, + 0x2da1, 0x2e09, 0xffff, 0xffff, 0x2f1f, 0x2fde, 0x30c5, 0xffff, + 0xffff, 0xffff, 0x31c8, 0xffff, 0x32b0, 0x337b, 0xffff, 0x349e, + 0x357b, 0x3685, 0xffff, 0xffff, 0xffff, 0xffff, 0x37ef, 0xffff, + 0xffff, 0x3905, 0x39fd, 0xffff, 0xffff, 0x3b81, 0x3c55, 0x3cd8, + // Entry 7400 - 743F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3ec2, 0x3f33, + 0x3fd7, 0x406c, 0x40e6, 0xffff, 0xffff, 0x42c5, 0xffff, 0x437a, + 0xffff, 0xffff, 0x44e8, 0xffff, 0x464b, 0xffff, 0xffff, 0xffff, + 0xffff, 0x47b8, 0xffff, 0x4861, 0x495f, 0x4aa2, 0x4b52, 0xffff, + 0xffff, 0xffff, 0x4c3e, 0x4d2d, 0x4de6, 0xffff, 0xffff, 0x4f0a, + 0x5063, 0x5134, 0x51bd, 0xffff, 0xffff, 0x52c1, 0x5380, 0x5400, + 0xffff, 0x54e6, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x574c, + 0x57e7, 0x5870, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 7440 - 747F + 0xffff, 0x5a33, 0xffff, 0xffff, 0x5b08, 0xffff, 0x5bb1, 0xffff, + 0x5cab, 0x5d4f, 0x5e0e, 0xffff, 0x5eea, 0x5fa9, 0xffff, 0xffff, + 0xffff, 0x60dd, 0x619c, 0xffff, 0xffff, 0x1767, 0x1a0d, 0x1fcc, + 0x204f, 0xffff, 0xffff, 0x4592, 0x5659, 0x009e, 0x000a, 0x17d8, + 0x1807, 0x1837, 0x186a, 0x18e3, 0x19a4, 0x1ac8, 0x1b69, 0x1c19, + 0x1ce2, 0x1dd8, 0x1ed1, 0x1f6f, 0x20ec, 0x2172, 0x2247, 0x2332, + 0x23eb, 0x24ae, 0x25d1, 0x26fb, 0x27e1, 0x28ba, 0x2964, 0x29fc, + 0x2a7a, 0x2a97, 0x2aef, 0x2b7f, 0x2be8, 0x2c68, 0x2cb8, 0x2d3b, + // Entry 7480 - 74BF + 0x2db8, 0x2e2f, 0x2ead, 0x2ee3, 0x2f4e, 0x3014, 0x30e5, 0x3142, + 0x315f, 0x319e, 0x31f8, 0x328a, 0x32e3, 0x33b1, 0x344f, 0x34d7, + 0x35c3, 0x369f, 0x3705, 0x3738, 0x3794, 0x37bd, 0x3815, 0x3893, + 0x38d8, 0x3947, 0x3a42, 0x3b28, 0x3b5e, 0x3bcc, 0x3c70, 0x3cf2, + 0x3d58, 0x3d88, 0x3dc1, 0x3de7, 0x3e38, 0x3e7a, 0x3edc, 0x3f59, + 0x3ffd, 0x4089, 0x414d, 0x4244, 0x4283, 0x42eb, 0x435a, 0x43b8, + 0x4466, 0x44af, 0x4515, 0x4612, 0x4674, 0x46f8, 0x4727, 0x474d, + 0x4776, 0x47d8, 0x484a, 0x48ac, 0x49c0, 0x4acc, 0x4b6f, 0x4bdb, + // Entry 74C0 - 74FF + 0x4c04, 0x4c21, 0x4c7d, 0x4d5f, 0x4e24, 0x4ec3, 0x4edd, 0x4f53, + 0x5098, 0x5151, 0x51e6, 0x526a, 0x5287, 0x52f0, 0x539a, 0x5426, + 0x54a4, 0x552d, 0x55de, 0x560d, 0x562d, 0x5706, 0x572f, 0x576f, + 0x5807, 0x5893, 0x58fc, 0x591c, 0x5952, 0x598e, 0x59c7, 0x59ea, + 0x5a13, 0x5a53, 0x5ab6, 0x5ae5, 0x5b28, 0x5b9a, 0x5be9, 0x5c8b, + 0x5cd1, 0x5d7e, 0x5e37, 0x5ebb, 0x5f19, 0x5fd2, 0x6056, 0x6070, + 0x609d, 0x610c, 0x61da, 0x3afe, 0x5017, 0x177e, 0x1a30, 0x1fe9, + 0x206c, 0xffff, 0x4492, 0x45af, 0x5685, 0x009e, 0x000a, 0xffff, + // Entry 7500 - 753F + 0xffff, 0xffff, 0xffff, 0x1926, 0x19d4, 0x1af2, 0x1ba2, 0x1c5e, + 0x1d31, 0x1e40, 0x1f04, 0x1f9c, 0x2113, 0x21ae, 0x229f, 0x236b, + 0x2421, 0x2509, 0x2642, 0x2747, 0x2833, 0x28f3, 0x2991, 0x2a2f, + 0xffff, 0xffff, 0x2b2b, 0xffff, 0x2c1c, 0xffff, 0x2ce8, 0x2d62, + 0x2ddc, 0x2e62, 0xffff, 0xffff, 0x2f8a, 0x3057, 0x310f, 0xffff, + 0xffff, 0xffff, 0x3235, 0xffff, 0x3323, 0x33f4, 0xffff, 0x351d, + 0x3618, 0x36c6, 0xffff, 0xffff, 0xffff, 0xffff, 0x3848, 0xffff, + 0xffff, 0x3996, 0x3a94, 0xffff, 0xffff, 0x3c0c, 0x3c98, 0x3d19, + // Entry 7540 - 757F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3f03, 0x3f8c, + 0x4030, 0x40b3, 0x41be, 0xffff, 0xffff, 0x431e, 0xffff, 0x4403, + 0xffff, 0xffff, 0x454f, 0xffff, 0x46aa, 0xffff, 0xffff, 0xffff, + 0xffff, 0x4805, 0xffff, 0x4904, 0x4a2b, 0x4b03, 0x4b99, 0xffff, + 0xffff, 0xffff, 0x4cc9, 0x4d9e, 0x4e6f, 0xffff, 0xffff, 0x4fa9, + 0x50da, 0x517b, 0x521c, 0xffff, 0xffff, 0x532c, 0x53c1, 0x5459, + 0xffff, 0x5581, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x579f, + 0x5831, 0x58c3, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 7580 - 75BF + 0xffff, 0x5a80, 0xffff, 0xffff, 0x5b55, 0xffff, 0x5c2e, 0xffff, + 0x5d04, 0x5dba, 0x5e6d, 0xffff, 0x5f55, 0x6008, 0xffff, 0xffff, + 0xffff, 0x6148, 0x6225, 0xffff, 0xffff, 0x17a2, 0x1a60, 0x2013, + 0x2096, 0xffff, 0xffff, 0x45d6, 0x56bb, 0x0003, 0x0000, 0x0000, + 0x0c16, 0x0042, 0x000b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 75C0 - 75FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0003, 0x0004, 0x010c, + 0x018c, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000d, 0x0021, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0016, 0x0000, 0x0000, 0x0004, 0x0000, 0x001b, 0x0000, 0x001e, + // Entry 7600 - 763F + 0x0001, 0x000b, 0x0004, 0x0001, 0x000b, 0x003b, 0x0008, 0x002a, + 0x0062, 0x00a3, 0x00ca, 0x00e2, 0x00ea, 0x00fb, 0x0000, 0x0002, + 0x002d, 0x004f, 0x0003, 0x0031, 0x0000, 0x0040, 0x000d, 0x000b, + 0xffff, 0x005f, 0x006c, 0x0079, 0x0086, 0x0093, 0x00a0, 0x00ad, + 0x00ba, 0x00c7, 0x00d4, 0x00e4, 0x00f4, 0x000d, 0x000b, 0xffff, + 0x0104, 0x0123, 0x0145, 0x0167, 0x0186, 0x01a2, 0x01c4, 0x01e6, + 0x020b, 0x022a, 0x0249, 0x0277, 0x0003, 0x0000, 0x0000, 0x0053, + 0x000d, 0x000b, 0xffff, 0x02a5, 0x02c7, 0x02ec, 0x0311, 0x0333, + // Entry 7640 - 767F + 0x0352, 0x0377, 0x039c, 0x03c4, 0x03e6, 0x0408, 0x0439, 0x0002, + 0x0065, 0x0084, 0x0003, 0x0069, 0x0072, 0x007b, 0x0007, 0x000b, + 0x046a, 0x047a, 0x048a, 0x04a3, 0x04b6, 0x04cc, 0x04df, 0x0007, + 0x000b, 0x04f5, 0x04fc, 0x0503, 0x050d, 0x0517, 0x0521, 0x052b, + 0x0007, 0x000b, 0x0538, 0x0554, 0x0570, 0x0595, 0x05b4, 0x05d6, + 0x05f5, 0x0003, 0x0088, 0x0091, 0x009a, 0x0007, 0x000b, 0x046a, + 0x047a, 0x048a, 0x04a3, 0x04b6, 0x04cc, 0x04df, 0x0007, 0x000b, + 0x04f5, 0x04fc, 0x0503, 0x050d, 0x0517, 0x0521, 0x052b, 0x0007, + // Entry 7680 - 76BF + 0x000b, 0x0538, 0x0554, 0x0570, 0x0595, 0x05b4, 0x05d6, 0x05f5, + 0x0002, 0x00a6, 0x00b8, 0x0003, 0x00aa, 0x0000, 0x00b1, 0x0005, + 0x000b, 0xffff, 0x0617, 0x0645, 0x0676, 0x06a7, 0x0005, 0x000b, + 0xffff, 0x0617, 0x0645, 0x0676, 0x06a7, 0x0003, 0x00bc, 0x0000, + 0x00c3, 0x0005, 0x000b, 0xffff, 0x0617, 0x0645, 0x0676, 0x06a7, + 0x0005, 0x000b, 0xffff, 0x0617, 0x0645, 0x0676, 0x06a7, 0x0001, + 0x00cc, 0x0003, 0x00d0, 0x0000, 0x00d9, 0x0002, 0x00d3, 0x00d6, + 0x0001, 0x000b, 0x06d5, 0x0001, 0x000b, 0x06eb, 0x0002, 0x00dc, + // Entry 76C0 - 76FF + 0x00df, 0x0001, 0x000b, 0x06d5, 0x0001, 0x000b, 0x06eb, 0x0001, + 0x00e4, 0x0001, 0x00e6, 0x0002, 0x000b, 0x0704, 0x072c, 0x0004, + 0x00f8, 0x00f2, 0x00ef, 0x00f5, 0x0001, 0x000b, 0x0745, 0x0001, + 0x000b, 0x0768, 0x0001, 0x000b, 0x079d, 0x0001, 0x0000, 0x051c, + 0x0004, 0x0109, 0x0103, 0x0100, 0x0106, 0x0001, 0x0002, 0x04e3, + 0x0001, 0x0002, 0x04f2, 0x0001, 0x0002, 0x04fe, 0x0001, 0x0002, + 0x0508, 0x0040, 0x014d, 0x0000, 0x0000, 0x0152, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0157, 0x0000, 0x0000, 0x015c, 0x0000, + // Entry 7700 - 773F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0161, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x016e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0173, 0x0000, + 0x0178, 0x0000, 0x0000, 0x017d, 0x0000, 0x0000, 0x0182, 0x0000, + 0x0000, 0x0187, 0x0001, 0x014f, 0x0001, 0x000b, 0x07bf, 0x0001, + 0x0154, 0x0001, 0x000b, 0x07d5, 0x0001, 0x0159, 0x0001, 0x000b, + // Entry 7740 - 777F + 0x047a, 0x0001, 0x015e, 0x0001, 0x000b, 0x07df, 0x0002, 0x0164, + 0x0167, 0x0001, 0x000b, 0x07fb, 0x0005, 0x000b, 0x081e, 0x082e, + 0x0844, 0x0808, 0x085a, 0x0001, 0x0170, 0x0001, 0x000b, 0x0876, + 0x0001, 0x0175, 0x0001, 0x000b, 0x089e, 0x0001, 0x017a, 0x0001, + 0x000b, 0x08cd, 0x0001, 0x017f, 0x0001, 0x000b, 0x08e3, 0x0001, + 0x0184, 0x0001, 0x000b, 0x08f6, 0x0001, 0x0189, 0x0001, 0x000b, + 0x0909, 0x0004, 0x0000, 0x0000, 0x0000, 0x0000, 0x0003, 0x0004, + 0x01f9, 0x0573, 0x0012, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 7780 - 77BF + 0x0000, 0x0017, 0x0042, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x01d0, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0031, 0x0004, 0x002e, + 0x0028, 0x0025, 0x002b, 0x0001, 0x0000, 0x0489, 0x0001, 0x0000, + 0x049a, 0x0001, 0x0000, 0x04a5, 0x0001, 0x0000, 0x04af, 0x0004, + 0x003f, 0x0039, 0x0036, 0x003c, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0008, 0x004b, 0x00b0, 0x0107, 0x013c, 0x017d, 0x019d, 0x01ae, + // Entry 77C0 - 77FF + 0x01bf, 0x0002, 0x004e, 0x007f, 0x0003, 0x0052, 0x0061, 0x0070, + 0x000d, 0x000b, 0xffff, 0x0922, 0x0927, 0x092f, 0x0935, 0x093a, + 0x093e, 0x0944, 0x094a, 0x094f, 0x0955, 0x095a, 0x095d, 0x000d, + 0x000b, 0xffff, 0x0962, 0x0965, 0x0968, 0x096b, 0x096e, 0x0971, + 0x0974, 0x0977, 0x097a, 0x097d, 0x0980, 0x0983, 0x000d, 0x000b, + 0xffff, 0x0986, 0x098d, 0x0998, 0x099f, 0x093a, 0x09a5, 0x09ae, + 0x094a, 0x09b5, 0x0955, 0x095a, 0x09be, 0x0003, 0x0083, 0x0092, + 0x00a1, 0x000d, 0x000b, 0xffff, 0x0922, 0x0927, 0x092f, 0x0935, + // Entry 7800 - 783F + 0x093a, 0x093e, 0x0944, 0x094a, 0x094f, 0x0955, 0x095a, 0x09c4, + 0x000d, 0x000b, 0xffff, 0x0962, 0x0965, 0x0968, 0x096b, 0x096e, + 0x0971, 0x0974, 0x0977, 0x097a, 0x097d, 0x0980, 0x0983, 0x000d, + 0x000b, 0xffff, 0x0986, 0x098d, 0x0998, 0x099f, 0x093a, 0x09a5, + 0x09ae, 0x094a, 0x09b5, 0x0955, 0x095a, 0x09be, 0x0002, 0x00b3, + 0x00dd, 0x0005, 0x00b9, 0x00c2, 0x00d4, 0x0000, 0x00cb, 0x0007, + 0x000b, 0x09c9, 0x09cd, 0x09d1, 0x09d6, 0x09db, 0x09e0, 0x09e5, + 0x0007, 0x000b, 0x09ea, 0x09ed, 0x09ef, 0x09f2, 0x09f5, 0x09f7, + // Entry 7840 - 787F + 0x09f9, 0x0007, 0x000b, 0x09c9, 0x09cd, 0x09d1, 0x09d6, 0x09db, + 0x09e0, 0x09e5, 0x0007, 0x000b, 0x09c9, 0x09cd, 0x0998, 0x09fc, + 0x09db, 0x0a06, 0x0a0d, 0x0005, 0x00e3, 0x00ec, 0x00fe, 0x0000, + 0x00f5, 0x0007, 0x000b, 0x09c9, 0x09cd, 0x09d1, 0x09d6, 0x09db, + 0x09e0, 0x09e5, 0x0007, 0x000b, 0x09ea, 0x09ed, 0x09ef, 0x09f2, + 0x09f5, 0x09f7, 0x09f9, 0x0007, 0x000b, 0x09c9, 0x09cd, 0x09d1, + 0x09d6, 0x09db, 0x09e0, 0x09e5, 0x0007, 0x000b, 0x09c9, 0x09cd, + 0x0998, 0x09fc, 0x09db, 0x0a06, 0x0a0d, 0x0002, 0x010a, 0x0123, + // Entry 7880 - 78BF + 0x0003, 0x010e, 0x0115, 0x011c, 0x0005, 0x000b, 0xffff, 0x0a14, + 0x0a1f, 0x0a28, 0x0a31, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x0039, 0x0005, 0x000b, 0xffff, 0x0a3a, 0x0a49, 0x0a56, + 0x0a63, 0x0003, 0x0127, 0x012e, 0x0135, 0x0005, 0x000b, 0xffff, + 0x0a14, 0x0a1f, 0x0a28, 0x0a31, 0x0005, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x0039, 0x0005, 0x000b, 0xffff, 0x0a3a, 0x0a49, + 0x0a56, 0x0a63, 0x0002, 0x013f, 0x015e, 0x0003, 0x0143, 0x014c, + 0x0155, 0x0002, 0x0146, 0x0149, 0x0001, 0x000b, 0x0a70, 0x0001, + // Entry 78C0 - 78FF + 0x000b, 0x0a75, 0x0002, 0x014f, 0x0152, 0x0001, 0x0008, 0x0928, + 0x0001, 0x000b, 0x0a7a, 0x0002, 0x0158, 0x015b, 0x0001, 0x000b, + 0x0a70, 0x0001, 0x000b, 0x0a75, 0x0003, 0x0162, 0x016b, 0x0174, + 0x0002, 0x0165, 0x0168, 0x0001, 0x000b, 0x0a70, 0x0001, 0x000b, + 0x0a75, 0x0002, 0x016e, 0x0171, 0x0001, 0x000b, 0x0a70, 0x0001, + 0x000b, 0x0a75, 0x0002, 0x0177, 0x017a, 0x0001, 0x000b, 0x0a70, + 0x0001, 0x000b, 0x0a75, 0x0003, 0x018c, 0x0197, 0x0181, 0x0002, + 0x0184, 0x0188, 0x0002, 0x000b, 0x0a7d, 0x0a90, 0x0002, 0x0000, + // Entry 7900 - 793F + 0x04f5, 0x04f9, 0x0002, 0x018f, 0x0193, 0x0002, 0x000b, 0x0aa2, + 0x0aae, 0x0002, 0x0000, 0x04f5, 0x04f9, 0x0001, 0x0199, 0x0002, + 0x000b, 0x0aa2, 0x0aae, 0x0004, 0x01ab, 0x01a5, 0x01a2, 0x01a8, + 0x0001, 0x0000, 0x04fc, 0x0001, 0x0000, 0x050b, 0x0001, 0x0000, + 0x0514, 0x0001, 0x0000, 0x051c, 0x0004, 0x01bc, 0x01b6, 0x01b3, + 0x01b9, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, + 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, 0x01cd, 0x01c7, + 0x01c4, 0x01ca, 0x0001, 0x000b, 0x0ab9, 0x0001, 0x000b, 0x0ab9, + // Entry 7940 - 797F + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x01d9, 0x01ef, 0x0000, 0x9006, 0x0003, + 0x01e3, 0x01e9, 0x01dd, 0x0001, 0x01df, 0x0002, 0x000b, 0x0ac6, + 0x0adb, 0x0001, 0x01e5, 0x0002, 0x000b, 0x0ae9, 0x0af5, 0x0001, + 0x01eb, 0x0002, 0x000b, 0x0ae9, 0x0af5, 0x0003, 0x01f6, 0x0000, + 0x01f3, 0x0001, 0x0000, 0x0489, 0x0001, 0x0000, 0x04af, 0x0040, + 0x023a, 0x0000, 0x0000, 0x023f, 0x025e, 0x027d, 0x029c, 0x02b6, + 0x02d0, 0x02ea, 0x0309, 0x0328, 0x0347, 0x0000, 0x0000, 0x0000, + // Entry 7980 - 79BF + 0x0000, 0x0000, 0x0366, 0x0386, 0x03a6, 0x0000, 0x0000, 0x0000, + 0x03c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03cb, 0x03d3, + 0x03db, 0x03e3, 0x03eb, 0x03f3, 0x03fb, 0x0403, 0x040b, 0x0413, + 0x041b, 0x0423, 0x042b, 0x0433, 0x043b, 0x0443, 0x044b, 0x0453, + 0x045b, 0x0463, 0x046b, 0x0000, 0x0473, 0x0000, 0x0478, 0x0492, + 0x04ac, 0x04c6, 0x04e0, 0x04fa, 0x0514, 0x0532, 0x0550, 0x056e, + 0x0001, 0x023c, 0x0001, 0x000b, 0x0afa, 0x0003, 0x0243, 0x0246, + 0x024b, 0x0001, 0x000b, 0x0b04, 0x0003, 0x000b, 0x0b0a, 0x0b12, + // Entry 79C0 - 79FF + 0x0b1a, 0x0002, 0x024e, 0x0256, 0x0006, 0x000b, 0x0b3a, 0x0b29, + 0xffff, 0x0b3a, 0x0b29, 0x0b4b, 0x0006, 0x000b, 0x0b6f, 0x0b62, + 0xffff, 0x0b6f, 0x0b62, 0x0b7c, 0x0003, 0x0262, 0x0265, 0x026a, + 0x0001, 0x000b, 0x0b8f, 0x0003, 0x000b, 0x0b0a, 0x0b12, 0x0b93, + 0x0002, 0x026d, 0x0275, 0x0006, 0x000b, 0x0ba0, 0x0ba0, 0xffff, + 0x0ba0, 0x0ba0, 0x0ba0, 0x0006, 0x000b, 0x0baf, 0x0baf, 0xffff, + 0x0baf, 0x0baf, 0x0baf, 0x0003, 0x0281, 0x0284, 0x0289, 0x0001, + 0x000b, 0x0b8f, 0x0003, 0x000b, 0x0b0a, 0x0b12, 0x0b93, 0x0002, + // Entry 7A00 - 7A3F + 0x028c, 0x0294, 0x0006, 0x000b, 0x0bba, 0x0bba, 0xffff, 0x0bba, + 0x0bba, 0x0bba, 0x0006, 0x000b, 0x0bc3, 0x0bc3, 0xffff, 0x0bc3, + 0x0bc3, 0x0bc3, 0x0003, 0x02a0, 0x0000, 0x02a3, 0x0001, 0x000b, + 0x0bcc, 0x0002, 0x02a6, 0x02ae, 0x0006, 0x000b, 0x0bd6, 0x0bd6, + 0xffff, 0x0beb, 0x0c00, 0x0c15, 0x0006, 0x000b, 0x0c2f, 0x0c2f, + 0xffff, 0x0c40, 0x0c51, 0x0c62, 0x0003, 0x02ba, 0x0000, 0x02bd, + 0x0001, 0x000b, 0x0c78, 0x0002, 0x02c0, 0x02c8, 0x0006, 0x000b, + 0x0c7e, 0x0c7e, 0xffff, 0x0c7e, 0x0c7e, 0x0c7e, 0x0006, 0x000b, + // Entry 7A40 - 7A7F + 0x0c8f, 0x0c8f, 0xffff, 0x0c8f, 0x0c8f, 0x0c8f, 0x0003, 0x02d4, + 0x0000, 0x02d7, 0x0001, 0x000b, 0x0c78, 0x0002, 0x02da, 0x02e2, + 0x0006, 0x000b, 0x0c9c, 0x0c9c, 0xffff, 0x0c9c, 0x0c9c, 0x0c9c, + 0x0006, 0x000b, 0x0ca7, 0x0ca7, 0xffff, 0x0ca7, 0x0ca7, 0x0ca7, + 0x0003, 0x02ee, 0x02f1, 0x02f6, 0x0001, 0x000b, 0x0cb2, 0x0003, + 0x000b, 0x0cb6, 0x0cc5, 0x0cd1, 0x0002, 0x02f9, 0x0301, 0x0006, + 0x000b, 0x0cde, 0x0cde, 0xffff, 0x0ced, 0x0cde, 0x0cfc, 0x0006, + 0x000b, 0x0d11, 0x0d11, 0xffff, 0x0d1c, 0x0d11, 0x0d27, 0x0003, + // Entry 7A80 - 7ABF + 0x030d, 0x0310, 0x0315, 0x0001, 0x000b, 0x0cb2, 0x0003, 0x000b, + 0x0cb6, 0x0cc5, 0x0cd1, 0x0002, 0x0318, 0x0320, 0x0006, 0x000b, + 0x0cde, 0x0cde, 0xffff, 0x0ced, 0x0cde, 0x0cfc, 0x0006, 0x000b, + 0x0d11, 0x0d11, 0xffff, 0x0d1c, 0x0d11, 0x0d27, 0x0003, 0x032c, + 0x032f, 0x0334, 0x0001, 0x000b, 0x0cb2, 0x0003, 0x000b, 0x0cb6, + 0x0cc5, 0x0cd1, 0x0002, 0x0337, 0x033f, 0x0006, 0x000b, 0x0d38, + 0x0d38, 0xffff, 0x0d38, 0x0d38, 0x0d38, 0x0006, 0x000b, 0x0d41, + 0x0d41, 0xffff, 0x0d41, 0x0d41, 0x0d41, 0x0003, 0x034b, 0x034e, + // Entry 7AC0 - 7AFF + 0x0353, 0x0001, 0x000b, 0x0d4a, 0x0003, 0x000b, 0x0d51, 0x0d63, + 0x0d72, 0x0002, 0x0356, 0x035e, 0x0006, 0x000b, 0x0d82, 0x0d82, + 0xffff, 0x0d82, 0x0d82, 0x0d94, 0x0006, 0x000b, 0x0dac, 0x0dac, + 0xffff, 0x0dac, 0x0dac, 0x0dba, 0x0003, 0x036a, 0x036d, 0x0373, + 0x0001, 0x000b, 0x0dce, 0x0004, 0x000b, 0x0de5, 0x0dec, 0x0df2, + 0x0dd3, 0x0002, 0x0376, 0x037e, 0x0006, 0x000b, 0x0dfe, 0x0dfe, + 0xffff, 0x0e0e, 0x0dfe, 0x0e1e, 0x0006, 0x000b, 0x0e34, 0x0e34, + 0xffff, 0x0e40, 0x0e34, 0x0e4c, 0x0003, 0x038a, 0x038d, 0x0393, + // Entry 7B00 - 7B3F + 0x0001, 0x0000, 0x2008, 0x0004, 0x000b, 0x0de5, 0x0dec, 0x0df2, + 0x0dd3, 0x0002, 0x0396, 0x039e, 0x0006, 0x000b, 0x0e5e, 0x0e5e, + 0xffff, 0x0e5e, 0x0e5e, 0x0e5e, 0x0006, 0x000b, 0x0e6b, 0x0e6b, + 0xffff, 0x0e6b, 0x0e6b, 0x0e6b, 0x0003, 0x03aa, 0x03ad, 0x03b3, + 0x0001, 0x0000, 0x2008, 0x0004, 0x000b, 0x0de5, 0x0dec, 0x0df2, + 0x0dd3, 0x0002, 0x03b6, 0x03be, 0x0006, 0x0000, 0x1b48, 0x1b48, + 0xffff, 0x1b48, 0x1b48, 0x1b48, 0x0006, 0x0000, 0x1b4f, 0x1b4f, + 0xffff, 0x1b4f, 0x1b4f, 0x1b4f, 0x0001, 0x03c8, 0x0001, 0x000b, + // Entry 7B40 - 7B7F + 0x0e74, 0x0002, 0x0000, 0x03ce, 0x0003, 0x000b, 0x0e83, 0x0e93, + 0x0e9f, 0x0002, 0x0000, 0x03d6, 0x0003, 0x000b, 0x0eab, 0x0eb9, + 0x0ec2, 0x0002, 0x0000, 0x03de, 0x0003, 0x000b, 0x0ecc, 0x0ed9, + 0x0ee1, 0x0002, 0x0000, 0x03e6, 0x0003, 0x000b, 0x0eea, 0x0efa, + 0x0f06, 0x0002, 0x0000, 0x03ee, 0x0003, 0x000b, 0x0f12, 0x0f20, + 0x0f29, 0x0002, 0x0000, 0x03f6, 0x0003, 0x000b, 0x0f33, 0x0f3f, + 0x0f46, 0x0002, 0x0000, 0x03fe, 0x0003, 0x000b, 0x0f4e, 0x0f61, + 0x0f70, 0x0002, 0x0000, 0x0406, 0x0003, 0x000b, 0x0f7f, 0x0f8e, + // Entry 7B80 - 7BBF + 0x0f98, 0x0002, 0x0000, 0x040e, 0x0003, 0x000b, 0x0fa3, 0x0fb0, + 0x0fb8, 0x0002, 0x0000, 0x0416, 0x0003, 0x000b, 0x0fc1, 0x0fd7, + 0x0fe9, 0x0002, 0x0000, 0x041e, 0x0003, 0x000b, 0x0ffb, 0x100a, + 0x1014, 0x0002, 0x0000, 0x0426, 0x0003, 0x000b, 0x101f, 0x102c, + 0x1034, 0x0002, 0x0000, 0x042e, 0x0003, 0x000b, 0x103d, 0x104f, + 0x105c, 0x0002, 0x0000, 0x0436, 0x0003, 0x000b, 0x106a, 0x1079, + 0x1083, 0x0002, 0x0000, 0x043e, 0x0003, 0x000b, 0x108e, 0x109a, + 0x1083, 0x0002, 0x0000, 0x0446, 0x0003, 0x000b, 0x10a1, 0x10b4, + // Entry 7BC0 - 7BFF + 0x10c3, 0x0002, 0x0000, 0x044e, 0x0003, 0x000b, 0x10d2, 0x10e1, + 0x10eb, 0x0002, 0x0000, 0x0456, 0x0003, 0x000b, 0x10f6, 0x1102, + 0x1109, 0x0002, 0x0000, 0x045e, 0x0003, 0x000b, 0x1111, 0x1124, + 0x1133, 0x0002, 0x0000, 0x0466, 0x0003, 0x000b, 0x1142, 0x1151, + 0x115b, 0x0002, 0x0000, 0x046e, 0x0003, 0x000b, 0x1166, 0x1173, + 0x117b, 0x0001, 0x0475, 0x0001, 0x000b, 0x1184, 0x0003, 0x047c, + 0x0000, 0x047f, 0x0001, 0x000b, 0x118a, 0x0002, 0x0482, 0x048a, + 0x0006, 0x000b, 0x118e, 0x118e, 0xffff, 0x118e, 0x118e, 0x119d, + // Entry 7C00 - 7C3F + 0x0006, 0x000b, 0x11b2, 0x11b2, 0xffff, 0x11b2, 0x11b2, 0x11bd, + 0x0003, 0x0496, 0x0000, 0x0499, 0x0001, 0x000b, 0x11ce, 0x0002, + 0x049c, 0x04a4, 0x0006, 0x000b, 0x11d0, 0x11d0, 0xffff, 0x11d0, + 0x11d0, 0x11d0, 0x0006, 0x000b, 0x11dd, 0x11dd, 0xffff, 0x11dd, + 0x11dd, 0x11dd, 0x0003, 0x04b0, 0x0000, 0x04b3, 0x0001, 0x000b, + 0x11ce, 0x0002, 0x04b6, 0x04be, 0x0006, 0x0000, 0x1d76, 0x1d76, + 0xffff, 0x1d76, 0x1d76, 0x1d76, 0x0006, 0x0000, 0x1d7d, 0x1d7d, + 0xffff, 0x1d7d, 0x1d7d, 0x1d7d, 0x0003, 0x04ca, 0x0000, 0x04cd, + // Entry 7C40 - 7C7F + 0x0001, 0x000b, 0x11e6, 0x0002, 0x04d0, 0x04d8, 0x0006, 0x000b, + 0x11ec, 0x11ec, 0xffff, 0x11fd, 0x11ec, 0x120e, 0x0006, 0x000b, + 0x1224, 0x1224, 0xffff, 0x1231, 0x1224, 0x123e, 0x0003, 0x04e4, + 0x0000, 0x04e7, 0x0001, 0x000b, 0x1250, 0x0002, 0x04ea, 0x04f2, + 0x0006, 0x000b, 0x1254, 0x1254, 0xffff, 0x1254, 0x1254, 0x1254, + 0x0006, 0x000b, 0x1263, 0x1263, 0xffff, 0x1263, 0x1263, 0x1263, + 0x0003, 0x04fe, 0x0000, 0x0501, 0x0001, 0x000b, 0x1250, 0x0002, + 0x0504, 0x050c, 0x0006, 0x0000, 0x1d97, 0x1d97, 0xffff, 0x1d97, + // Entry 7C80 - 7CBF + 0x1d97, 0x1d97, 0x0006, 0x0000, 0x1da0, 0x1da0, 0xffff, 0x1da0, + 0x1da0, 0x1da0, 0x0003, 0x0518, 0x051b, 0x051f, 0x0001, 0x000b, + 0x126e, 0x0002, 0x000b, 0xffff, 0x1275, 0x0002, 0x0522, 0x052a, + 0x0006, 0x000b, 0x127d, 0x127d, 0xffff, 0x127d, 0x127d, 0x128f, + 0x0006, 0x000b, 0x12a6, 0x12a6, 0xffff, 0x12a6, 0x12a6, 0x12a6, + 0x0003, 0x0536, 0x0539, 0x053d, 0x0001, 0x0000, 0x2002, 0x0002, + 0x000b, 0xffff, 0x12b4, 0x0002, 0x0540, 0x0548, 0x0006, 0x000b, + 0x12ba, 0x12ba, 0xffff, 0x12ba, 0x12ba, 0x12ba, 0x0006, 0x000b, + // Entry 7CC0 - 7CFF + 0x12c7, 0x12c7, 0xffff, 0x12c7, 0x12c7, 0x12c7, 0x0003, 0x0554, + 0x0557, 0x055b, 0x0001, 0x0000, 0x2002, 0x0002, 0x000b, 0xffff, + 0x12b4, 0x0002, 0x055e, 0x0566, 0x0006, 0x0000, 0x1db4, 0x1db4, + 0xffff, 0x1db4, 0x1db4, 0x1db4, 0x0006, 0x0000, 0x1dbb, 0x1dbb, + 0xffff, 0x1dbb, 0x1dbb, 0x1dbb, 0x0001, 0x0570, 0x0001, 0x000b, + 0x12d0, 0x0004, 0x0578, 0x057d, 0x0582, 0x058d, 0x0003, 0x0000, + 0x1dc7, 0x21d6, 0x21d2, 0x0003, 0x000b, 0x12da, 0x12e2, 0x12f0, + 0x0002, 0x0000, 0x0585, 0x0002, 0x0000, 0x0588, 0x0003, 0x000b, + // Entry 7D00 - 7D3F + 0xffff, 0x1302, 0x1318, 0x0002, 0x0000, 0x0590, 0x0003, 0x0633, + 0x06d2, 0x0594, 0x009d, 0x000b, 0x132f, 0x133f, 0x134f, 0x1363, + 0x1393, 0x13e0, 0x1445, 0xffff, 0x147e, 0x14b9, 0xffff, 0x14f8, + 0x152b, 0x1558, 0x158f, 0x15e0, 0x163a, 0xffff, 0x1675, 0x16cc, + 0x1735, 0x178f, 0x17e7, 0x1825, 0x1860, 0x188e, 0x189a, 0x18b4, + 0x18e0, 0x1909, 0xffff, 0x194b, 0x197d, 0x19aa, 0xffff, 0x19cc, + 0x19df, 0x19fc, 0x1a35, 0x1a6c, 0xffff, 0xffff, 0x1a8e, 0x1aaf, + 0x1adb, 0x1af7, 0x1b3b, 0xffff, 0x1b8c, 0x1be1, 0x1c21, 0x1c45, + // Entry 7D40 - 7D7F + 0x1c58, 0x1c83, 0x1c98, 0x1caf, 0xffff, 0x1cd5, 0x1d09, 0x1d63, + 0x1dbe, 0x1de5, 0xffff, 0x1dfe, 0xffff, 0x1e2a, 0xffff, 0x1e3e, + 0xffff, 0x1e4d, 0x1e64, 0x1e89, 0x1eb7, 0x1eea, 0x1f1a, 0xffff, + 0x1f3e, 0x1f55, 0x1f7b, 0xffff, 0xffff, 0x1f9f, 0xffff, 0xffff, + 0x1fea, 0xffff, 0x1ffd, 0x200a, 0x201a, 0x202b, 0x2048, 0xffff, + 0x2082, 0xffff, 0x20ce, 0x2109, 0x212f, 0x213b, 0x2145, 0x2163, + 0x21ac, 0x21ef, 0x2221, 0x222a, 0xffff, 0x224b, 0xffff, 0x2288, + 0x22b2, 0xffff, 0x22c9, 0x22fd, 0x2332, 0xffff, 0x237d, 0x23bf, + // Entry 7D80 - 7DBF + 0xffff, 0xffff, 0x23cc, 0xffff, 0x23e9, 0xffff, 0x241d, 0x2441, + 0x244e, 0x2466, 0x2478, 0x248a, 0xffff, 0x2496, 0x24ac, 0x24d2, + 0x24e2, 0x24f8, 0xffff, 0x252d, 0x255f, 0x2576, 0x25ae, 0x25ea, + 0x2612, 0x2630, 0x266e, 0xffff, 0xffff, 0x269a, 0x26bb, 0x26f6, + 0x1dab, 0xffff, 0xffff, 0x1411, 0xffff, 0xffff, 0xffff, 0x1fae, + 0x1fc6, 0x009d, 0x000b, 0xffff, 0xffff, 0xffff, 0xffff, 0x137a, + 0x13d5, 0x1437, 0xffff, 0x1471, 0x14a8, 0xffff, 0x14eb, 0x1522, + 0x154d, 0x157e, 0x15c1, 0x162e, 0xffff, 0x1662, 0x16ab, 0x171e, + // Entry 7DC0 - 7DFF + 0x1773, 0x17d7, 0x1817, 0x1851, 0xffff, 0xffff, 0x18a6, 0xffff, + 0x18f6, 0xffff, 0x193f, 0x1973, 0x19a1, 0xffff, 0xffff, 0xffff, + 0x19ef, 0x1a26, 0x1a63, 0xffff, 0xffff, 0xffff, 0x1aa1, 0xffff, + 0x1ae7, 0x1b27, 0xffff, 0x1b73, 0x1bce, 0x1c17, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1ca4, 0xffff, 0xffff, 0x1cf2, 0x1d47, 0xffff, + 0xffff, 0xffff, 0x1df0, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1e80, 0x1eab, 0x1edf, 0x1f10, 0xffff, 0xffff, + 0xffff, 0x1f71, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 7E00 - 7E3F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x203e, 0xffff, 0x206c, + 0xffff, 0x20be, 0x20fe, 0xffff, 0xffff, 0xffff, 0x214f, 0x219b, + 0x21de, 0xffff, 0xffff, 0xffff, 0x223b, 0xffff, 0x227b, 0xffff, + 0xffff, 0x22bc, 0x22f3, 0x2321, 0xffff, 0x2364, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x23dc, 0xffff, 0x2413, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x24a1, 0xffff, 0xffff, + 0x24ee, 0xffff, 0x251c, 0xffff, 0x256a, 0x259e, 0x25de, 0xffff, + 0x2620, 0x2660, 0xffff, 0xffff, 0xffff, 0x26af, 0x26e3, 0xffff, + // Entry 7E40 - 7E7F + 0xffff, 0xffff, 0x1406, 0xffff, 0xffff, 0xffff, 0xffff, 0x1fbc, + 0x009d, 0x000b, 0xffff, 0xffff, 0xffff, 0xffff, 0x13b6, 0x13f5, + 0x145d, 0xffff, 0x1495, 0x14d4, 0xffff, 0x150f, 0x153e, 0x156d, + 0x15aa, 0x1609, 0x1650, 0xffff, 0x1692, 0x16f7, 0x1756, 0x17b5, + 0x1801, 0x183d, 0x1879, 0xffff, 0xffff, 0x18cc, 0xffff, 0x1926, + 0xffff, 0x1961, 0x1991, 0x19bd, 0xffff, 0xffff, 0xffff, 0x1a13, + 0x1a4e, 0x1a7f, 0xffff, 0xffff, 0xffff, 0x1ac7, 0xffff, 0x1b11, + 0x1b59, 0xffff, 0x1baf, 0x1bfe, 0x1c35, 0xffff, 0xffff, 0xffff, + // Entry 7E80 - 7EBF + 0xffff, 0x1cc4, 0xffff, 0xffff, 0x1d2a, 0x1d89, 0xffff, 0xffff, + 0xffff, 0x1e16, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1e9c, 0x1ecd, 0x1eff, 0x1f2e, 0xffff, 0xffff, 0xffff, + 0x1f8f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x205c, 0xffff, 0x20a2, 0xffff, + 0x20e8, 0x211e, 0xffff, 0xffff, 0xffff, 0x2181, 0x21c7, 0x220a, + 0xffff, 0xffff, 0xffff, 0x2265, 0xffff, 0x229f, 0xffff, 0xffff, + 0x22e0, 0x2311, 0x234d, 0xffff, 0x23a0, 0xffff, 0xffff, 0xffff, + // Entry 7EC0 - 7EFF + 0xffff, 0xffff, 0x2400, 0xffff, 0x2431, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x24c1, 0xffff, 0xffff, 0x250c, + 0xffff, 0x2548, 0xffff, 0x258c, 0x25c8, 0x2600, 0xffff, 0x264a, + 0x2686, 0xffff, 0xffff, 0xffff, 0x26d1, 0x2713, 0xffff, 0xffff, + 0xffff, 0x1426, 0xffff, 0xffff, 0xffff, 0xffff, 0x1fda, 0x0003, + 0x0004, 0x00e5, 0x0163, 0x000a, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000f, 0x0029, 0x0000, 0x00ce, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0018, 0x0000, 0x0000, 0x0004, + // Entry 7F00 - 7F3F + 0x0026, 0x0020, 0x001d, 0x0023, 0x0001, 0x000c, 0x0000, 0x0001, + 0x000c, 0x0012, 0x0001, 0x000c, 0x001e, 0x0001, 0x000c, 0x0029, + 0x0008, 0x0032, 0x005a, 0x007f, 0x008c, 0x00a4, 0x00ac, 0x00bd, + 0x0000, 0x0002, 0x0035, 0x0048, 0x0003, 0x0000, 0x0000, 0x0039, + 0x000d, 0x000c, 0xffff, 0x0036, 0x004f, 0x006e, 0x007e, 0x0091, + 0x0098, 0x00a2, 0x00b2, 0x00c2, 0x00e1, 0x00f1, 0x010a, 0x0002, + 0x0000, 0x004b, 0x000d, 0x000c, 0xffff, 0x0126, 0x012a, 0x0131, + 0x0138, 0x0091, 0x013c, 0x013c, 0x0143, 0x0147, 0x014e, 0x0152, + // Entry 7F40 - 7F7F + 0x0156, 0x0002, 0x005d, 0x0073, 0x0003, 0x0061, 0x0000, 0x006a, + 0x0007, 0x000c, 0x015d, 0x0167, 0x016e, 0x017b, 0x0185, 0x0195, + 0x01a5, 0x0007, 0x000c, 0x01b2, 0x01c5, 0x01d5, 0x01eb, 0x01fe, + 0x0217, 0x0230, 0x0002, 0x0000, 0x0076, 0x0007, 0x000c, 0x0246, + 0x024a, 0x024e, 0x0255, 0x025c, 0x0263, 0x0263, 0x0001, 0x0081, + 0x0003, 0x0000, 0x0000, 0x0085, 0x0005, 0x000c, 0xffff, 0x026a, + 0x02af, 0x02f1, 0x033c, 0x0001, 0x008e, 0x0003, 0x0092, 0x0000, + 0x009b, 0x0002, 0x0095, 0x0098, 0x0001, 0x000c, 0x038b, 0x0001, + // Entry 7F80 - 7FBF + 0x000c, 0x0395, 0x0002, 0x009e, 0x00a1, 0x0001, 0x000c, 0x038b, + 0x0001, 0x000c, 0x0395, 0x0001, 0x00a6, 0x0001, 0x00a8, 0x0002, + 0x000c, 0x03a8, 0x03c2, 0x0004, 0x00ba, 0x00b4, 0x00b1, 0x00b7, + 0x0001, 0x000c, 0x03c9, 0x0001, 0x000c, 0x03d9, 0x0001, 0x000c, + 0x03e3, 0x0001, 0x000c, 0x03ec, 0x0004, 0x00cb, 0x00c5, 0x00c2, + 0x00c8, 0x0001, 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, + 0x0002, 0x04fe, 0x0001, 0x0002, 0x0508, 0x0001, 0x00d0, 0x0001, + 0x00d2, 0x0003, 0x0000, 0x0000, 0x00d6, 0x000d, 0x000c, 0xffff, + // Entry 7FC0 - 7FFF + 0x03f3, 0x0416, 0x0423, 0x0430, 0x0440, 0x0450, 0x045d, 0x046a, + 0x047d, 0x0487, 0x0494, 0x04a4, 0x0040, 0x0126, 0x0000, 0x0000, + 0x012b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0130, 0x0000, + 0x0000, 0x0135, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x013a, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0145, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 8000 - 803F + 0x0000, 0x014a, 0x0000, 0x014f, 0x0000, 0x0000, 0x0154, 0x0000, + 0x0000, 0x0159, 0x0000, 0x0000, 0x015e, 0x0001, 0x0128, 0x0001, + 0x000c, 0x04b1, 0x0001, 0x012d, 0x0001, 0x000c, 0x04c1, 0x0001, + 0x0132, 0x0001, 0x000c, 0x04d1, 0x0001, 0x0137, 0x0001, 0x000c, + 0x04db, 0x0002, 0x013d, 0x0140, 0x0001, 0x000c, 0x04f5, 0x0003, + 0x000c, 0x04ff, 0x050c, 0x0519, 0x0001, 0x0147, 0x0001, 0x000c, + 0x0529, 0x0001, 0x014c, 0x0001, 0x000c, 0x054d, 0x0001, 0x0151, + 0x0001, 0x000c, 0x056a, 0x0001, 0x0156, 0x0001, 0x000c, 0x057a, + // Entry 8040 - 807F + 0x0001, 0x015b, 0x0001, 0x000c, 0x058a, 0x0001, 0x0160, 0x0001, + 0x000c, 0x05a0, 0x0004, 0x0000, 0x0000, 0x0168, 0x0173, 0x0002, + 0x0000, 0x016b, 0x0002, 0x0000, 0x016e, 0x0003, 0x000c, 0xffff, + 0x05b0, 0x05dd, 0x0002, 0x035a, 0x0176, 0x0003, 0x017a, 0x02ba, + 0x021a, 0x009e, 0x000c, 0xffff, 0xffff, 0xffff, 0xffff, 0x079e, + 0x0866, 0x0984, 0x0a13, 0x0ae4, 0x0bb5, 0x0c86, 0x0d1e, 0xffff, + 0x0ecb, 0x0f48, 0x0fec, 0x10cf, 0x1155, 0x11f6, 0x12cc, 0x13e8, + 0x14dd, 0x15d2, 0x1673, 0x16f0, 0xffff, 0xffff, 0x180c, 0xffff, + // Entry 8080 - 80BF + 0x1919, 0xffff, 0x19f6, 0x1a73, 0x1ae7, 0x1b6d, 0xffff, 0xffff, + 0x1c93, 0x1d2b, 0x1dd3, 0xffff, 0xffff, 0xffff, 0x1f39, 0xffff, + 0x2028, 0x20cc, 0xffff, 0x218b, 0x2253, 0x2306, 0xffff, 0xffff, + 0xffff, 0xffff, 0x24b4, 0xffff, 0xffff, 0x25da, 0x26c6, 0xffff, + 0xffff, 0x2866, 0x290a, 0x29a2, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2bf4, 0x2c71, 0x2d24, 0x2dbc, 0x2e39, 0xffff, + 0xffff, 0x2fc6, 0xffff, 0x308e, 0xffff, 0xffff, 0x3226, 0xffff, + 0x3350, 0xffff, 0xffff, 0xffff, 0xffff, 0x34c9, 0xffff, 0xffff, + // Entry 80C0 - 80FF + 0xffff, 0x3597, 0x362f, 0xffff, 0xffff, 0xffff, 0x3769, 0x383a, + 0x38ff, 0xffff, 0xffff, 0x3a48, 0x3b8f, 0x3c54, 0x3cda, 0xffff, + 0xffff, 0x3e04, 0x3e93, 0x3f07, 0xffff, 0x3ff7, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x42c5, 0x4354, 0x43d1, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x468f, 0xffff, 0x4745, 0xffff, 0x484f, 0x48d5, 0x499a, 0xffff, + 0x4a68, 0x4b36, 0xffff, 0xffff, 0xffff, 0x4cbe, 0x4d5f, 0xffff, + 0xffff, 0x0604, 0x08fe, 0x0da4, 0x0e33, 0xffff, 0xffff, 0x32d3, + // Entry 8100 - 813F + 0x418b, 0x009e, 0x000c, 0x066f, 0x06ae, 0x06fa, 0x074c, 0x07d4, + 0x0889, 0x09a7, 0x0a49, 0x0b1a, 0x0beb, 0x0ca9, 0x0d3e, 0xffff, + 0x0ee5, 0x0f71, 0x102b, 0x10ef, 0x117b, 0x1225, 0x131b, 0x142a, + 0x151f, 0x15fb, 0x1690, 0x1719, 0x1791, 0x17ca, 0x183b, 0x18bf, + 0x1943, 0x19bd, 0x1a10, 0x1a8d, 0x1b04, 0x1b96, 0x1c0e, 0x1c4d, + 0x1cb9, 0x1d52, 0x1df3, 0x1e62, 0x1e9b, 0x1ef3, 0x1f66, 0x1fe6, + 0x2052, 0x20ff, 0xffff, 0x21c1, 0x2282, 0x2320, 0x237a, 0x23d5, + 0x2430, 0x2475, 0x24da, 0x254c, 0x259b, 0x261c, 0x270b, 0x27f1, + // Entry 8140 - 817F + 0x282a, 0x288d, 0x2930, 0x29bf, 0x2a1f, 0x2a5b, 0x2aaa, 0x2aed, + 0x2b35, 0x2b93, 0x2c0e, 0x2ca0, 0x2d47, 0x2dd6, 0x2e87, 0x2f49, + 0x2f7b, 0x2fe6, 0x3055, 0x30c6, 0x315c, 0x31e0, 0x3250, 0xffff, + 0x336a, 0x33c4, 0x3403, 0x343f, 0x3487, 0x34ef, 0x3561, 0xffff, + 0xffff, 0x35bd, 0x364f, 0x36b5, 0x36f7, 0x3730, 0x37a2, 0x386c, + 0x3937, 0x39d6, 0x3a0c, 0x3a8e, 0x3bc4, 0x3c74, 0x3d03, 0x3d7b, + 0x3db1, 0x3e27, 0x3ead, 0x3f30, 0x3fa8, 0x403b, 0x40f2, 0x4134, + 0xffff, 0x4247, 0x4289, 0x42e8, 0x4371, 0x43eb, 0x4445, 0x4484, + // Entry 8180 - 81BF + 0x44c6, 0x4502, 0x4551, 0x4590, 0x45c9, 0xffff, 0x4605, 0x4653, + 0x46ac, 0x470c, 0x477d, 0x4813, 0x486f, 0x490a, 0x49ba, 0x4a20, + 0x4a9d, 0x4b62, 0x4be0, 0x4c1f, 0x4c65, 0x4ce7, 0x4d9a, 0x27bb, + 0x3b40, 0x061b, 0x091e, 0x0dc7, 0x0e59, 0xffff, 0x31aa, 0x32f0, + 0x41bd, 0x009e, 0x000c, 0xffff, 0xffff, 0xffff, 0xffff, 0x0826, + 0x08c8, 0x09e6, 0x0a9b, 0x0b6c, 0x0c3d, 0x0ce8, 0x0d7a, 0xffff, + 0x0f1b, 0x0fb6, 0x1086, 0x112b, 0x11bd, 0x127d, 0x1386, 0x1488, + 0x157d, 0x1640, 0x16c9, 0x175e, 0xffff, 0xffff, 0x1886, 0xffff, + // Entry 81C0 - 81FF + 0x1989, 0xffff, 0x1a46, 0x1ac3, 0x1b3d, 0x1bdb, 0xffff, 0xffff, + 0x1cfb, 0x1d95, 0x1e2f, 0xffff, 0xffff, 0xffff, 0x1faf, 0xffff, + 0x2098, 0x214e, 0xffff, 0x2213, 0x22cd, 0x2356, 0xffff, 0xffff, + 0xffff, 0xffff, 0x251c, 0xffff, 0xffff, 0x267a, 0x276c, 0xffff, + 0xffff, 0x28d0, 0x2972, 0x29f8, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2c44, 0x2ceb, 0x2d86, 0x2e0c, 0x2ef1, 0xffff, + 0xffff, 0x3022, 0xffff, 0x311a, 0xffff, 0xffff, 0x3296, 0xffff, + 0x33a0, 0xffff, 0xffff, 0xffff, 0xffff, 0x3531, 0xffff, 0xffff, + // Entry 8200 - 823F + 0xffff, 0x35ff, 0x368b, 0xffff, 0xffff, 0xffff, 0x37f7, 0x38ba, + 0x398b, 0xffff, 0xffff, 0x3af0, 0x3c15, 0x3cb0, 0x3d48, 0xffff, + 0xffff, 0x3e66, 0x3ee3, 0x3f75, 0xffff, 0x409b, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x4327, 0x43aa, 0x4421, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x46e5, 0xffff, 0x47d1, 0xffff, 0x48ab, 0x495b, 0x49f6, 0xffff, + 0x4aee, 0x4baa, 0xffff, 0xffff, 0xffff, 0x4d2c, 0x4df1, 0xffff, + 0xffff, 0x064e, 0x095a, 0x0e06, 0x0e9b, 0xffff, 0xffff, 0x3329, + // Entry 8240 - 827F + 0x420b, 0x0003, 0x0000, 0x0000, 0x035e, 0x0042, 0x000b, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 8280 - 82BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0003, 0x0004, 0x02ec, 0x082d, 0x0012, 0x0017, 0x0024, + 0x0000, 0x0000, 0x0000, 0x0000, 0x003c, 0x0067, 0x0280, 0x0000, + 0x028d, 0x0000, 0x0000, 0x0000, 0x0000, 0x02d2, 0x0000, 0x02db, + 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x001d, 0x0001, 0x001f, + 0x0001, 0x0021, 0x0001, 0x0000, 0x0000, 0x0006, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x002b, 0x0004, 0x0039, 0x0033, 0x0030, + 0x0036, 0x0001, 0x000d, 0x0000, 0x0001, 0x000d, 0x000a, 0x0001, + // Entry 82C0 - 82FF + 0x000d, 0x000a, 0x0001, 0x000d, 0x000a, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0045, 0x0000, 0x0056, 0x0004, 0x0053, + 0x004d, 0x004a, 0x0050, 0x0001, 0x000d, 0x0011, 0x0001, 0x000d, + 0x0025, 0x0001, 0x000d, 0x0033, 0x0001, 0x000d, 0x003e, 0x0004, + 0x0064, 0x005e, 0x005b, 0x0061, 0x0001, 0x000d, 0x004d, 0x0001, + 0x000d, 0x004d, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, + 0x0008, 0x0070, 0x00d5, 0x012c, 0x0161, 0x0232, 0x024d, 0x025e, + 0x026f, 0x0002, 0x0073, 0x00a4, 0x0003, 0x0077, 0x0086, 0x0095, + // Entry 8300 - 833F + 0x000d, 0x000d, 0xffff, 0x0059, 0x005d, 0x0061, 0x0065, 0x0069, + 0x006d, 0x0071, 0x0075, 0x0079, 0x007d, 0x0081, 0x0085, 0x000d, + 0x0000, 0xffff, 0x2142, 0x2006, 0x1f9a, 0x1f9c, 0x1f9a, 0x2142, + 0x2142, 0x1f9c, 0x2002, 0x1f98, 0x1f96, 0x2008, 0x000d, 0x000d, + 0xffff, 0x0089, 0x0090, 0x0098, 0x009d, 0x0069, 0x00a3, 0x00a8, + 0x00ad, 0x00b4, 0x00be, 0x00c6, 0x00cf, 0x0003, 0x00a8, 0x00b7, + 0x00c6, 0x000d, 0x000d, 0xffff, 0x0059, 0x005d, 0x0061, 0x0065, + 0x0069, 0x006d, 0x0071, 0x0075, 0x0079, 0x007d, 0x0081, 0x0085, + // Entry 8340 - 837F + 0x000d, 0x0000, 0xffff, 0x2142, 0x2006, 0x1f9a, 0x1f9c, 0x1f9a, + 0x2142, 0x2142, 0x1f9c, 0x2002, 0x1f98, 0x1f96, 0x2008, 0x000d, + 0x000d, 0xffff, 0x0089, 0x0090, 0x0098, 0x009d, 0x0069, 0x00a3, + 0x00a8, 0x00ad, 0x00b4, 0x00be, 0x00c6, 0x00cf, 0x0002, 0x00d8, + 0x0102, 0x0005, 0x00de, 0x00e7, 0x00f9, 0x0000, 0x00f0, 0x0007, + 0x000d, 0x00d8, 0x00dc, 0x00e0, 0x00e4, 0x00e8, 0x00ed, 0x00f1, + 0x0007, 0x0000, 0x21c4, 0x21dd, 0x21df, 0x21c8, 0x21e1, 0x21dd, + 0x21c8, 0x0007, 0x000d, 0x00d8, 0x00dc, 0x00e0, 0x00e4, 0x00e8, + // Entry 8380 - 83BF + 0x00ed, 0x00f1, 0x0007, 0x000d, 0x00f5, 0x00fe, 0x010a, 0x0111, + 0x0119, 0x0123, 0x0129, 0x0005, 0x0108, 0x0111, 0x0123, 0x0000, + 0x011a, 0x0007, 0x000d, 0x00d8, 0x00dc, 0x00e0, 0x00e4, 0x00e8, + 0x00ed, 0x00f1, 0x0007, 0x0000, 0x1f96, 0x21e4, 0x2010, 0x2002, + 0x21e6, 0x21e4, 0x2002, 0x0007, 0x000d, 0x00d8, 0x00dc, 0x00e0, + 0x00e4, 0x00e8, 0x00ed, 0x00f1, 0x0007, 0x000d, 0x00f5, 0x00fe, + 0x010a, 0x0111, 0x0119, 0x0123, 0x0129, 0x0002, 0x012f, 0x0148, + 0x0003, 0x0133, 0x013a, 0x0141, 0x0005, 0x000d, 0xffff, 0x0130, + // Entry 83C0 - 83FF + 0x0134, 0x0138, 0x013c, 0x0005, 0x000d, 0xffff, 0x0140, 0x0143, + 0x0146, 0x0149, 0x0005, 0x000d, 0xffff, 0x014c, 0x0159, 0x0167, + 0x0176, 0x0003, 0x014c, 0x0153, 0x015a, 0x0005, 0x000d, 0xffff, + 0x0130, 0x0134, 0x0138, 0x013c, 0x0005, 0x000d, 0xffff, 0x0140, + 0x0143, 0x0146, 0x0149, 0x0005, 0x000d, 0xffff, 0x014c, 0x0159, + 0x0167, 0x0176, 0x0002, 0x0164, 0x01cb, 0x0003, 0x0168, 0x0189, + 0x01aa, 0x0008, 0x0174, 0x017a, 0x0171, 0x017d, 0x0180, 0x0183, + 0x0186, 0x0177, 0x0001, 0x000d, 0x0187, 0x0001, 0x000d, 0x018e, + // Entry 8400 - 843F + 0x0001, 0x000d, 0x0199, 0x0001, 0x000d, 0x019f, 0x0001, 0x000d, + 0x01a7, 0x0001, 0x000d, 0x01ae, 0x0001, 0x000d, 0x01bb, 0x0001, + 0x000d, 0x01c4, 0x0008, 0x0195, 0x019b, 0x0192, 0x019e, 0x01a1, + 0x01a4, 0x01a7, 0x0198, 0x0001, 0x000d, 0x0187, 0x0001, 0x000d, + 0x018e, 0x0001, 0x000d, 0x0199, 0x0001, 0x000d, 0x019f, 0x0001, + 0x000d, 0x01a7, 0x0001, 0x000d, 0x01ae, 0x0001, 0x000d, 0x01bb, + 0x0001, 0x000d, 0x01c4, 0x0008, 0x01b6, 0x01bc, 0x01b3, 0x01bf, + 0x01c2, 0x01c5, 0x01c8, 0x01b9, 0x0001, 0x000d, 0x0187, 0x0001, + // Entry 8440 - 847F + 0x000d, 0x018e, 0x0001, 0x000d, 0x0199, 0x0001, 0x000d, 0x019f, + 0x0001, 0x000d, 0x01a7, 0x0001, 0x000d, 0x01ae, 0x0001, 0x000d, + 0x01bb, 0x0001, 0x000d, 0x01c4, 0x0003, 0x01cf, 0x01f0, 0x0211, + 0x0008, 0x01db, 0x01e1, 0x01d8, 0x01e4, 0x01e7, 0x01ea, 0x01ed, + 0x01de, 0x0001, 0x000d, 0x0187, 0x0001, 0x000d, 0x018e, 0x0001, + 0x000d, 0x0199, 0x0001, 0x000d, 0x019f, 0x0001, 0x000d, 0x01a7, + 0x0001, 0x000d, 0x01ae, 0x0001, 0x000d, 0x01bb, 0x0001, 0x000d, + 0x01c4, 0x0008, 0x01fc, 0x0202, 0x01f9, 0x0205, 0x0208, 0x020b, + // Entry 8480 - 84BF + 0x020e, 0x01ff, 0x0001, 0x000d, 0x0187, 0x0001, 0x000d, 0x018e, + 0x0001, 0x000d, 0x0199, 0x0001, 0x000d, 0x019f, 0x0001, 0x000d, + 0x01a7, 0x0001, 0x000d, 0x01ae, 0x0001, 0x000d, 0x01bb, 0x0001, + 0x000d, 0x01c4, 0x0008, 0x021d, 0x0223, 0x021a, 0x0226, 0x0229, + 0x022c, 0x022f, 0x0220, 0x0001, 0x000d, 0x0187, 0x0001, 0x000d, + 0x018e, 0x0001, 0x000d, 0x0199, 0x0001, 0x000d, 0x019f, 0x0001, + 0x000d, 0x01a7, 0x0001, 0x000d, 0x01ae, 0x0001, 0x000d, 0x01bb, + 0x0001, 0x000d, 0x01c4, 0x0003, 0x0241, 0x0247, 0x0236, 0x0002, + // Entry 84C0 - 84FF + 0x0239, 0x023d, 0x0002, 0x000d, 0x01cd, 0x01dc, 0x0002, 0x000d, + 0xffff, 0x01e5, 0x0001, 0x0243, 0x0002, 0x000d, 0x01eb, 0x01e5, + 0x0001, 0x0249, 0x0002, 0x000d, 0x01f4, 0x01fc, 0x0004, 0x025b, + 0x0255, 0x0252, 0x0258, 0x0001, 0x000d, 0x01ff, 0x0001, 0x000d, + 0x0210, 0x0001, 0x000d, 0x021b, 0x0001, 0x000d, 0x0225, 0x0004, + 0x026c, 0x0266, 0x0263, 0x0269, 0x0001, 0x0000, 0x0524, 0x0001, + 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, + 0x0004, 0x027d, 0x0277, 0x0274, 0x027a, 0x0001, 0x000d, 0x004d, + // Entry 8500 - 853F + 0x0001, 0x000d, 0x004d, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0286, 0x0001, + 0x0288, 0x0001, 0x028a, 0x0001, 0x0000, 0x04ef, 0x0008, 0x0296, + 0x0000, 0x0000, 0x0000, 0x02ba, 0x02c1, 0x0000, 0x9006, 0x0001, + 0x0298, 0x0003, 0x029c, 0x0000, 0x02ab, 0x000d, 0x000d, 0xffff, + 0x022d, 0x0232, 0x0237, 0x023e, 0x0246, 0x024f, 0x0259, 0x0260, + 0x0265, 0x026a, 0x026f, 0x0276, 0x000d, 0x000d, 0xffff, 0x027d, + 0x0285, 0x028b, 0x0294, 0x029e, 0x02a9, 0x02b5, 0x02bd, 0x02c6, + // Entry 8540 - 857F + 0x02ce, 0x02d5, 0x02de, 0x0001, 0x02bc, 0x0001, 0x02be, 0x0001, + 0x0000, 0x06c8, 0x0004, 0x02cf, 0x02c9, 0x02c6, 0x02cc, 0x0001, + 0x000d, 0x0011, 0x0001, 0x000d, 0x0025, 0x0001, 0x000d, 0x0033, + 0x0001, 0x000d, 0x0033, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x9006, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x02e4, 0x0000, 0x0000, 0x9006, 0x0001, 0x02e6, 0x0001, + 0x02e8, 0x0002, 0x000d, 0x02e9, 0x02f6, 0x0042, 0x032f, 0x0334, + 0x0339, 0x033e, 0x035b, 0x0373, 0x038b, 0x03a8, 0x03c0, 0x03d8, + // Entry 8580 - 85BF + 0x03f5, 0x040d, 0x0425, 0x0446, 0x0462, 0x047e, 0x0483, 0x0488, + 0x048d, 0x04ac, 0x04c4, 0x04dc, 0x04e1, 0x04e6, 0x04eb, 0x04f0, + 0x04f5, 0x04fa, 0x04ff, 0x0504, 0x0509, 0x0523, 0x053d, 0x0557, + 0x0571, 0x058b, 0x05a5, 0x05bf, 0x05d9, 0x05f3, 0x060d, 0x0627, + 0x0641, 0x065b, 0x0675, 0x068f, 0x06a9, 0x06c3, 0x06dd, 0x06f7, + 0x0711, 0x072b, 0x0730, 0x0735, 0x073a, 0x0756, 0x076e, 0x0786, + 0x07a2, 0x07ba, 0x07d2, 0x07ee, 0x0806, 0x081e, 0x0823, 0x0828, + 0x0001, 0x0331, 0x0001, 0x0001, 0x0040, 0x0001, 0x0336, 0x0001, + // Entry 85C0 - 85FF + 0x0001, 0x0040, 0x0001, 0x033b, 0x0001, 0x0001, 0x0040, 0x0003, + 0x0342, 0x0345, 0x034a, 0x0001, 0x000d, 0x02fd, 0x0003, 0x000d, + 0x0304, 0x0313, 0x031e, 0x0002, 0x034d, 0x0354, 0x0005, 0x000d, + 0x034b, 0x032f, 0xffff, 0xffff, 0x033d, 0x0005, 0x000d, 0x037b, + 0x0359, 0xffff, 0xffff, 0x036a, 0x0003, 0x035f, 0x0000, 0x0362, + 0x0001, 0x000d, 0x038c, 0x0002, 0x0365, 0x036c, 0x0005, 0x000d, + 0x0391, 0x0391, 0xffff, 0xffff, 0x0391, 0x0005, 0x000d, 0x039d, + 0x039d, 0xffff, 0xffff, 0x039d, 0x0003, 0x0377, 0x0000, 0x037a, + // Entry 8600 - 863F + 0x0001, 0x000d, 0x03ac, 0x0002, 0x037d, 0x0384, 0x0005, 0x000d, + 0x03af, 0x03af, 0xffff, 0xffff, 0x03af, 0x0005, 0x000d, 0x03b9, + 0x03b9, 0xffff, 0xffff, 0x03b9, 0x0003, 0x038f, 0x0392, 0x0397, + 0x0001, 0x000d, 0x03c6, 0x0003, 0x000d, 0x03ce, 0x03e1, 0x03ee, + 0x0002, 0x039a, 0x03a1, 0x0005, 0x000d, 0x040f, 0x0400, 0xffff, + 0xffff, 0x040f, 0x0005, 0x000d, 0x0431, 0x041f, 0xffff, 0xffff, + 0x0431, 0x0003, 0x03ac, 0x0000, 0x03af, 0x0001, 0x000d, 0x0444, + 0x0002, 0x03b2, 0x03b9, 0x0005, 0x000d, 0x0448, 0x0448, 0xffff, + // Entry 8640 - 867F + 0xffff, 0x0448, 0x0005, 0x000d, 0x0453, 0x0453, 0xffff, 0xffff, + 0x0453, 0x0003, 0x03c4, 0x0000, 0x03c7, 0x0001, 0x000d, 0x0444, + 0x0002, 0x03ca, 0x03d1, 0x0005, 0x000d, 0x0448, 0x0448, 0xffff, + 0xffff, 0x0448, 0x0005, 0x000d, 0x0453, 0x0453, 0xffff, 0xffff, + 0x0453, 0x0003, 0x03dc, 0x03df, 0x03e4, 0x0001, 0x000d, 0x0461, + 0x0003, 0x000d, 0x0468, 0x0477, 0x0483, 0x0002, 0x03e7, 0x03ee, + 0x0005, 0x000d, 0x04b1, 0x0494, 0xffff, 0xffff, 0x04a2, 0x0005, + 0x000d, 0x04e3, 0x04c0, 0xffff, 0xffff, 0x04d1, 0x0003, 0x03f9, + // Entry 8680 - 86BF + 0x0000, 0x03fc, 0x0001, 0x000d, 0x04f5, 0x0002, 0x03ff, 0x0406, + 0x0005, 0x000d, 0x04f9, 0x04f9, 0xffff, 0xffff, 0x04f9, 0x0005, + 0x000d, 0x0504, 0x0504, 0xffff, 0xffff, 0x0504, 0x0003, 0x0411, + 0x0000, 0x0414, 0x0001, 0x000d, 0x04f5, 0x0002, 0x0417, 0x041e, + 0x0005, 0x000d, 0x04f9, 0x04f9, 0xffff, 0xffff, 0x04f9, 0x0005, + 0x000d, 0x0504, 0x0504, 0xffff, 0xffff, 0x0504, 0x0004, 0x042a, + 0x042d, 0x0432, 0x0443, 0x0001, 0x000d, 0x0512, 0x0003, 0x000d, + 0x051a, 0x052a, 0x0536, 0x0002, 0x0435, 0x043c, 0x0005, 0x000d, + // Entry 86C0 - 86FF + 0x0566, 0x0548, 0xffff, 0xffff, 0x0557, 0x0005, 0x000d, 0x0599, + 0x0575, 0xffff, 0xffff, 0x0587, 0x0001, 0x000d, 0x05ab, 0x0004, + 0x044b, 0x0000, 0x044e, 0x045f, 0x0001, 0x000d, 0x05c2, 0x0002, + 0x0451, 0x0458, 0x0005, 0x000d, 0x05c7, 0x05c7, 0xffff, 0xffff, + 0x05c7, 0x0005, 0x000d, 0x05d3, 0x05d3, 0xffff, 0xffff, 0x05d3, + 0x0001, 0x000d, 0x05ab, 0x0004, 0x0467, 0x0000, 0x046a, 0x047b, + 0x0001, 0x000d, 0x05c2, 0x0002, 0x046d, 0x0474, 0x0005, 0x000d, + 0x05c7, 0x05c7, 0xffff, 0xffff, 0x05c7, 0x0005, 0x000d, 0x05d3, + // Entry 8700 - 873F + 0x05d3, 0xffff, 0xffff, 0x05d3, 0x0001, 0x000d, 0x05ab, 0x0001, + 0x0480, 0x0001, 0x000d, 0x05e2, 0x0001, 0x0485, 0x0001, 0x000d, + 0x05f4, 0x0001, 0x048a, 0x0001, 0x000d, 0x05ff, 0x0003, 0x0491, + 0x0494, 0x049b, 0x0001, 0x000d, 0x0608, 0x0005, 0x000d, 0x0617, + 0x061e, 0x0624, 0x060c, 0x062a, 0x0002, 0x049e, 0x04a5, 0x0005, + 0x000d, 0x0640, 0x0635, 0xffff, 0xffff, 0x0640, 0x0005, 0x000d, + 0x065a, 0x064c, 0xffff, 0xffff, 0x065a, 0x0003, 0x04b0, 0x0000, + 0x04b3, 0x0001, 0x000d, 0x0608, 0x0002, 0x04b6, 0x04bd, 0x0005, + // Entry 8740 - 877F + 0x000d, 0x0669, 0x0669, 0xffff, 0xffff, 0x0669, 0x0005, 0x000d, + 0x0673, 0x0673, 0xffff, 0xffff, 0x0673, 0x0003, 0x04c8, 0x0000, + 0x04cb, 0x0001, 0x000d, 0x0608, 0x0002, 0x04ce, 0x04d5, 0x0005, + 0x000d, 0x0669, 0x0669, 0xffff, 0xffff, 0x0669, 0x0005, 0x000d, + 0x0673, 0x0673, 0xffff, 0xffff, 0x0673, 0x0001, 0x04de, 0x0001, + 0x000d, 0x0680, 0x0001, 0x04e3, 0x0001, 0x000d, 0x068d, 0x0001, + 0x04e8, 0x0001, 0x000d, 0x0698, 0x0001, 0x04ed, 0x0001, 0x000d, + 0x06a1, 0x0001, 0x04f2, 0x0001, 0x000d, 0x06af, 0x0001, 0x04f7, + // Entry 8780 - 87BF + 0x0001, 0x000d, 0x06af, 0x0001, 0x04fc, 0x0001, 0x000d, 0x06ba, + 0x0001, 0x0501, 0x0001, 0x000d, 0x06c8, 0x0001, 0x0506, 0x0001, + 0x000d, 0x06d2, 0x0003, 0x0000, 0x050d, 0x0512, 0x0003, 0x000d, + 0x06db, 0x06ec, 0x06f9, 0x0002, 0x0515, 0x051c, 0x0005, 0x000d, + 0x072c, 0x070c, 0xffff, 0xffff, 0x071c, 0x0005, 0x000d, 0x0762, + 0x073c, 0xffff, 0xffff, 0x074f, 0x0003, 0x0000, 0x0527, 0x052c, + 0x0003, 0x000d, 0x0775, 0x0782, 0x078b, 0x0002, 0x052f, 0x0536, + 0x0005, 0x000d, 0x072c, 0x070c, 0xffff, 0xffff, 0x071c, 0x0005, + // Entry 87C0 - 87FF + 0x000d, 0x0762, 0x073c, 0xffff, 0xffff, 0x074f, 0x0003, 0x0000, + 0x0541, 0x0546, 0x0003, 0x000d, 0x0775, 0x0782, 0x078b, 0x0002, + 0x0549, 0x0550, 0x0005, 0x000d, 0x072c, 0x070c, 0xffff, 0xffff, + 0x071c, 0x0005, 0x000d, 0x0762, 0x073c, 0xffff, 0xffff, 0x074f, + 0x0003, 0x0000, 0x055b, 0x0560, 0x0003, 0x000d, 0x079a, 0x07ae, + 0x07bf, 0x0002, 0x0563, 0x056a, 0x0005, 0x000d, 0x07fb, 0x07d5, + 0xffff, 0xffff, 0x07e8, 0x0005, 0x000d, 0x083b, 0x080f, 0xffff, + 0xffff, 0x0825, 0x0003, 0x0000, 0x0575, 0x057a, 0x0003, 0x000d, + // Entry 8800 - 883F + 0x0852, 0x085f, 0x0869, 0x0002, 0x057d, 0x0584, 0x0005, 0x000d, + 0x07fb, 0x07d5, 0xffff, 0xffff, 0x07e8, 0x0005, 0x000d, 0x083b, + 0x080f, 0xffff, 0xffff, 0x0825, 0x0003, 0x0000, 0x058f, 0x0594, + 0x0003, 0x000d, 0x0852, 0x085f, 0x0877, 0x0002, 0x0597, 0x059e, + 0x0005, 0x000d, 0x07fb, 0x07d5, 0xffff, 0xffff, 0x07e8, 0x0005, + 0x000d, 0x083b, 0x080f, 0xffff, 0xffff, 0x0825, 0x0003, 0x0000, + 0x05a9, 0x05ae, 0x0003, 0x000d, 0x0886, 0x0895, 0x08a1, 0x0002, + 0x05b1, 0x05b8, 0x0005, 0x000d, 0x08ce, 0x08b2, 0xffff, 0xffff, + // Entry 8840 - 887F + 0x08c0, 0x0005, 0x000d, 0x08ff, 0x08dd, 0xffff, 0xffff, 0x08ee, + 0x0003, 0x0000, 0x05c3, 0x05c8, 0x0003, 0x000d, 0x0911, 0x091e, + 0x0928, 0x0002, 0x05cb, 0x05d2, 0x0005, 0x000d, 0x08ce, 0x08b2, + 0xffff, 0xffff, 0x08c0, 0x0005, 0x000d, 0x08ff, 0x08dd, 0xffff, + 0xffff, 0x08ee, 0x0003, 0x0000, 0x05dd, 0x05e2, 0x0003, 0x000d, + 0x0911, 0x091e, 0x0928, 0x0002, 0x05e5, 0x05ec, 0x0005, 0x000d, + 0x08ce, 0x08b2, 0xffff, 0xffff, 0x08c0, 0x0005, 0x000d, 0x08ff, + 0x08dd, 0xffff, 0xffff, 0x08ee, 0x0003, 0x0000, 0x05f7, 0x05fc, + // Entry 8880 - 88BF + 0x0003, 0x000d, 0x0937, 0x0947, 0x0953, 0x0002, 0x05ff, 0x0606, + 0x0005, 0x000d, 0x0983, 0x0965, 0xffff, 0xffff, 0x0974, 0x0005, + 0x000d, 0x09b6, 0x0992, 0xffff, 0xffff, 0x09a4, 0x0003, 0x0000, + 0x0611, 0x0616, 0x0003, 0x000d, 0x09c8, 0x09d5, 0x09de, 0x0002, + 0x0619, 0x0620, 0x0005, 0x000d, 0x0983, 0x0965, 0xffff, 0xffff, + 0x0974, 0x0005, 0x000d, 0x09b6, 0x0992, 0xffff, 0xffff, 0x09a4, + 0x0003, 0x0000, 0x062b, 0x0630, 0x0003, 0x000d, 0x09c8, 0x09d5, + 0x09de, 0x0002, 0x0633, 0x063a, 0x0005, 0x000d, 0x0983, 0x0965, + // Entry 88C0 - 88FF + 0xffff, 0xffff, 0x0974, 0x0005, 0x000d, 0x09b6, 0x0992, 0xffff, + 0xffff, 0x09a4, 0x0003, 0x0000, 0x0645, 0x064a, 0x0003, 0x000d, + 0x09ed, 0x09ff, 0x0a0e, 0x0002, 0x064d, 0x0654, 0x0005, 0x000d, + 0x0a44, 0x0a22, 0xffff, 0xffff, 0x0a33, 0x0005, 0x000d, 0x0a7e, + 0x0a56, 0xffff, 0xffff, 0x0a6a, 0x0003, 0x0000, 0x065f, 0x0664, + 0x0003, 0x000d, 0x0a93, 0x0aa1, 0x0aac, 0x0002, 0x0667, 0x066e, + 0x0005, 0x000d, 0x0a44, 0x0a22, 0xffff, 0xffff, 0x0a33, 0x0005, + 0x000d, 0x0a7e, 0x0a56, 0xffff, 0xffff, 0x0a6a, 0x0003, 0x0000, + // Entry 8900 - 893F + 0x0679, 0x067e, 0x0003, 0x000d, 0x0a93, 0x0aa1, 0x0aac, 0x0002, + 0x0681, 0x0688, 0x0005, 0x000d, 0x0a44, 0x0a22, 0xffff, 0xffff, + 0x0a33, 0x0005, 0x000d, 0x0a7e, 0x0a56, 0xffff, 0xffff, 0x0a6a, + 0x0003, 0x0000, 0x0693, 0x0698, 0x0003, 0x000d, 0x0abc, 0x0aca, + 0x0ad5, 0x0002, 0x069b, 0x06a2, 0x0005, 0x000d, 0x0aff, 0x0ae5, + 0xffff, 0xffff, 0x0af2, 0x0005, 0x000d, 0x0b2d, 0x0b0d, 0xffff, + 0xffff, 0x0b1d, 0x0003, 0x0000, 0x06ad, 0x06b2, 0x0003, 0x000d, + 0x0b3e, 0x0b4b, 0x0b55, 0x0002, 0x06b5, 0x06bc, 0x0005, 0x000d, + // Entry 8940 - 897F + 0x0aff, 0x0ae5, 0xffff, 0xffff, 0x0af2, 0x0005, 0x000d, 0x0b2d, + 0x0b0d, 0xffff, 0xffff, 0x0b1d, 0x0003, 0x0000, 0x06c7, 0x06cc, + 0x0003, 0x000d, 0x0b3e, 0x0b4b, 0x0b55, 0x0002, 0x06cf, 0x06d6, + 0x0005, 0x000d, 0x0aff, 0x0ae5, 0xffff, 0xffff, 0x0af2, 0x0005, + 0x000d, 0x0b2d, 0x0b0d, 0xffff, 0xffff, 0x0b1d, 0x0003, 0x0000, + 0x06e1, 0x06e6, 0x0003, 0x000d, 0x0b64, 0x0b73, 0x0b7e, 0x0002, + 0x06e9, 0x06f0, 0x0005, 0x000d, 0x0bab, 0x0b8f, 0xffff, 0xffff, + 0x0b9d, 0x0005, 0x000d, 0x0bdb, 0x0bb9, 0xffff, 0xffff, 0x0bca, + // Entry 8980 - 89BF + 0x0003, 0x0000, 0x06fb, 0x0700, 0x0003, 0x000d, 0x0bec, 0x0bf9, + 0x0c02, 0x0002, 0x0703, 0x070a, 0x0005, 0x000d, 0x0bab, 0x0b8f, + 0xffff, 0xffff, 0x0b9d, 0x0005, 0x000d, 0x0bdb, 0x0bb9, 0xffff, + 0xffff, 0x0bca, 0x0003, 0x0000, 0x0715, 0x071a, 0x0003, 0x000d, + 0x0bec, 0x0bf9, 0x0c02, 0x0002, 0x071d, 0x0724, 0x0005, 0x000d, + 0x0bab, 0x0b8f, 0xffff, 0xffff, 0x0b9d, 0x0005, 0x000d, 0x0bdb, + 0x0bb9, 0xffff, 0xffff, 0x0bca, 0x0001, 0x072d, 0x0001, 0x000d, + 0x0c11, 0x0001, 0x0732, 0x0001, 0x000d, 0x0c11, 0x0001, 0x0737, + // Entry 89C0 - 89FF + 0x0001, 0x000d, 0x0c11, 0x0003, 0x073e, 0x0741, 0x0745, 0x0001, + 0x000d, 0x0c29, 0x0002, 0x000d, 0xffff, 0x0c2d, 0x0002, 0x0748, + 0x074f, 0x0005, 0x000d, 0x0c4d, 0x0c36, 0xffff, 0xffff, 0x0c41, + 0x0005, 0x000d, 0x0c76, 0x0c59, 0xffff, 0xffff, 0x0c67, 0x0003, + 0x075a, 0x0000, 0x075d, 0x0001, 0x0000, 0x213b, 0x0002, 0x0760, + 0x0767, 0x0005, 0x000d, 0x0c4d, 0x0c36, 0xffff, 0xffff, 0x0c41, + 0x0005, 0x000d, 0x0c76, 0x0c59, 0xffff, 0xffff, 0x0c67, 0x0003, + 0x0772, 0x0000, 0x0775, 0x0001, 0x0000, 0x213b, 0x0002, 0x0778, + // Entry 8A00 - 8A3F + 0x077f, 0x0005, 0x000d, 0x0c4d, 0x0c36, 0xffff, 0xffff, 0x0c41, + 0x0005, 0x000d, 0x0c76, 0x0c59, 0xffff, 0xffff, 0x0c67, 0x0003, + 0x078a, 0x078d, 0x0791, 0x0001, 0x000d, 0x0c85, 0x0002, 0x000d, + 0xffff, 0x0c8c, 0x0002, 0x0794, 0x079b, 0x0005, 0x000d, 0x0cb3, + 0x0c97, 0xffff, 0xffff, 0x0ca5, 0x0005, 0x000d, 0x0ce3, 0x0cc1, + 0xffff, 0xffff, 0x0cd2, 0x0003, 0x07a6, 0x0000, 0x07a9, 0x0001, + 0x0001, 0x07c5, 0x0002, 0x07ac, 0x07b3, 0x0005, 0x000d, 0x0cf4, + 0x0cf4, 0xffff, 0xffff, 0x0cf4, 0x0005, 0x000d, 0x0d00, 0x0d00, + // Entry 8A40 - 8A7F + 0xffff, 0xffff, 0x0d00, 0x0003, 0x07be, 0x0000, 0x07c1, 0x0001, + 0x0001, 0x07c5, 0x0002, 0x07c4, 0x07cb, 0x0005, 0x000d, 0x0cf4, + 0x0cf4, 0xffff, 0xffff, 0x0cf4, 0x0005, 0x000d, 0x0d00, 0x0d00, + 0xffff, 0xffff, 0x0d00, 0x0003, 0x07d6, 0x07d9, 0x07dd, 0x0001, + 0x000d, 0x0d0f, 0x0002, 0x000d, 0xffff, 0x0d17, 0x0002, 0x07e0, + 0x07e7, 0x0005, 0x000d, 0x0d3a, 0x0d1c, 0xffff, 0xffff, 0x0d2b, + 0x0005, 0x000d, 0x0d6d, 0x0d49, 0xffff, 0xffff, 0x0d5b, 0x0003, + 0x07f2, 0x0000, 0x07f5, 0x0001, 0x0001, 0x083e, 0x0002, 0x07f8, + // Entry 8A80 - 8ABF + 0x07ff, 0x0005, 0x000d, 0x0d7f, 0x0d7f, 0xffff, 0xffff, 0x0d7f, + 0x0005, 0x000d, 0x0d8b, 0x0d8b, 0xffff, 0xffff, 0x0d8b, 0x0003, + 0x080a, 0x0000, 0x080d, 0x0001, 0x0000, 0x2002, 0x0002, 0x0810, + 0x0817, 0x0005, 0x000d, 0x0d7f, 0x0d7f, 0xffff, 0xffff, 0x0d7f, + 0x0005, 0x000d, 0x0d8b, 0x0d8b, 0xffff, 0xffff, 0x0d8b, 0x0001, + 0x0820, 0x0001, 0x000d, 0x0d9a, 0x0001, 0x0825, 0x0001, 0x000d, + 0x0da9, 0x0001, 0x082a, 0x0001, 0x000d, 0x0da9, 0x0004, 0x0832, + 0x0837, 0x083c, 0x084b, 0x0003, 0x000d, 0x0dae, 0x0dbd, 0x0dc5, + // Entry 8AC0 - 8AFF + 0x0003, 0x0000, 0x1de0, 0x21e9, 0x21fd, 0x0002, 0x0000, 0x083f, + 0x0003, 0x0000, 0x0846, 0x0843, 0x0001, 0x000d, 0x0dc9, 0x0003, + 0x000d, 0xffff, 0x0de7, 0x0e00, 0x0002, 0x0a32, 0x084e, 0x0003, + 0x0852, 0x0992, 0x08f2, 0x009e, 0x000d, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0ec4, 0x0f1e, 0x0fb2, 0x0ffa, 0x1078, 0x10f3, 0x1171, + 0x11f2, 0x1238, 0x1309, 0x1351, 0x139f, 0x1402, 0x1447, 0x14c5, + 0x1531, 0x15b6, 0x161f, 0x1685, 0x16df, 0x1721, 0xffff, 0xffff, + 0x1796, 0xffff, 0x17f6, 0xffff, 0x1861, 0x18a9, 0x18f4, 0x1936, + // Entry 8B00 - 8B3F + 0xffff, 0xffff, 0x19c1, 0x1a0f, 0x1a79, 0xffff, 0xffff, 0xffff, + 0x1b10, 0xffff, 0x1b83, 0x1be3, 0xffff, 0x1c5f, 0x1cb9, 0x1d07, + 0xffff, 0xffff, 0xffff, 0xffff, 0x1dcd, 0xffff, 0xffff, 0x1e47, + 0x1ead, 0xffff, 0xffff, 0x1f54, 0x1fbd, 0x200b, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x20f0, 0x2132, 0x2177, 0x21bf, + 0x2204, 0xffff, 0xffff, 0x22b9, 0xffff, 0x2317, 0xffff, 0xffff, + 0x23a2, 0xffff, 0x2462, 0xffff, 0xffff, 0xffff, 0xffff, 0x250d, + 0xffff, 0x2572, 0x25e7, 0x2650, 0x26a1, 0xffff, 0xffff, 0xffff, + // Entry 8B40 - 8B7F + 0x2726, 0x2783, 0x27d7, 0xffff, 0xffff, 0x285b, 0x28ff, 0x2950, + 0x298c, 0xffff, 0xffff, 0x2a11, 0x2a5f, 0x2aa7, 0xffff, 0x2b0d, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2c61, 0x2cac, 0x2cf2, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2de5, + 0xffff, 0xffff, 0x2e5f, 0xffff, 0x2eb7, 0xffff, 0x2f25, 0x2f70, + 0x2fc4, 0xffff, 0x302b, 0x3082, 0xffff, 0xffff, 0xffff, 0x3124, + 0x3169, 0xffff, 0xffff, 0x0e19, 0x0f6c, 0x127a, 0x12c0, 0xffff, + 0xffff, 0x2405, 0x2be7, 0x009e, 0x000d, 0x0e59, 0x0e6f, 0x0e89, + // Entry 8B80 - 8BBF + 0x0ea2, 0x0edc, 0x0f32, 0x0fc4, 0x101e, 0x109b, 0x1117, 0x1196, + 0x11ff, 0x1248, 0x131b, 0x1365, 0x13ba, 0x1413, 0x146b, 0x14e3, + 0x1558, 0x15d3, 0x163b, 0x169d, 0x16ef, 0x1736, 0x1772, 0x1783, + 0x17aa, 0x17e4, 0x180a, 0x1844, 0x1873, 0x18bc, 0x1904, 0x194c, + 0x198a, 0x19a7, 0x19d5, 0x1a2b, 0x1a8a, 0x1abe, 0x1ad4, 0x1af7, + 0x1b2a, 0x1b70, 0x1b9d, 0x1bfc, 0x1c40, 0x1c77, 0x1ccd, 0x1d1b, + 0x1d54, 0x1d6f, 0x1da5, 0x1db9, 0x1ddf, 0x1e15, 0x1e35, 0x1e63, + 0x1ec8, 0x1f26, 0x1f42, 0x1f71, 0x1fd1, 0x201b, 0x204d, 0x2069, + // Entry 8BC0 - 8BFF + 0x2085, 0x2099, 0x20b7, 0x20d4, 0x2100, 0x2143, 0x2189, 0x21d0, + 0x2223, 0x2280, 0x229d, 0x22ca, 0x22fe, 0x232c, 0x2368, 0x2389, + 0x23bd, 0x2448, 0x2475, 0x24ad, 0x24c0, 0x24d2, 0x24ed, 0x2521, + 0x255b, 0x2593, 0x2604, 0x2665, 0x26b3, 0x26e9, 0x26fd, 0x2715, + 0x273f, 0x2799, 0x27ef, 0x2831, 0x2848, 0x2881, 0x2914, 0x295e, + 0x29a0, 0x29da, 0x29f2, 0x2a25, 0x2a71, 0x2aba, 0x2af2, 0x2b37, + 0x2b9d, 0x2bb9, 0x2bd2, 0x2c36, 0x2c49, 0x2c74, 0x2cb9, 0x2d04, + 0x2d3a, 0x2d4d, 0x2d6c, 0x2d8c, 0x2da8, 0x2dbb, 0x2dd1, 0x2df7, + // Entry 8C00 - 8C3F + 0x2e2d, 0x2e45, 0x2e71, 0x2ea7, 0x2ecf, 0x2f11, 0x2f38, 0x2f86, + 0x2fd9, 0x3015, 0x3042, 0x3097, 0x30d3, 0x30ea, 0x3101, 0x3135, + 0x3182, 0x1f10, 0x28df, 0x0e24, 0x0f79, 0x1287, 0x12ce, 0xffff, + 0x237d, 0x2411, 0x2bf7, 0x009e, 0x000d, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0eff, 0x0f51, 0x0fe1, 0x104d, 0x10c9, 0x1146, 0x11c6, + 0x1217, 0x1263, 0x1338, 0x1384, 0x13e0, 0x142f, 0x149a, 0x150c, + 0x1589, 0x15fb, 0x1662, 0x16c0, 0x170a, 0x1756, 0xffff, 0xffff, + 0x17c9, 0xffff, 0x1829, 0xffff, 0x1890, 0x18da, 0x191f, 0x196d, + // Entry 8C40 - 8C7F + 0xffff, 0xffff, 0x19f4, 0x1a52, 0x1aa6, 0xffff, 0xffff, 0xffff, + 0x1b4f, 0xffff, 0x1bc2, 0x1c20, 0xffff, 0x1c9a, 0x1cec, 0x1d3a, + 0xffff, 0xffff, 0xffff, 0xffff, 0x1dfc, 0xffff, 0xffff, 0x1e8a, + 0x1eee, 0xffff, 0xffff, 0x1f99, 0x1ff0, 0x2036, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x211b, 0x215f, 0x21a6, 0x21ec, + 0x224d, 0xffff, 0xffff, 0x22e6, 0xffff, 0x234c, 0xffff, 0xffff, + 0x23e3, 0xffff, 0x2493, 0xffff, 0xffff, 0xffff, 0xffff, 0x2540, + 0xffff, 0x25bf, 0x262c, 0x2685, 0x26d0, 0xffff, 0xffff, 0xffff, + // Entry 8C80 - 8CBF + 0x2763, 0x27ba, 0x2812, 0xffff, 0xffff, 0x28b2, 0x2934, 0x2977, + 0x29bf, 0xffff, 0xffff, 0x2a44, 0x2a8e, 0x2ad8, 0xffff, 0x2b6c, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2c92, 0x2cd1, 0x2d21, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2e14, + 0xffff, 0xffff, 0x2e8e, 0xffff, 0x2ef2, 0xffff, 0x2f56, 0x2fa7, + 0x2ff9, 0xffff, 0x3064, 0x30b7, 0xffff, 0xffff, 0xffff, 0x3151, + 0x31a6, 0xffff, 0xffff, 0x0e3a, 0x0f91, 0x129f, 0x12e7, 0xffff, + 0xffff, 0x2428, 0x2c12, 0x0003, 0x0a36, 0x0aa5, 0x0a69, 0x0031, + // Entry 8CC0 - 8CFF + 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0045, 0x004e, + 0xffff, 0x0057, 0x003a, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 8D00 - 8D3F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0045, 0x004e, 0xffff, 0x0057, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x246e, 0x0031, 0x0007, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 8D40 - 8D7F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0049, 0x0052, 0xffff, + 0x005b, 0x0003, 0x0004, 0x0331, 0x0444, 0x0012, 0x0017, 0x0000, + 0x0024, 0x0000, 0x003c, 0x0000, 0x0054, 0x006e, 0x0164, 0x017c, + 0x019e, 0x0000, 0x0000, 0x0000, 0x0000, 0x01f7, 0x0301, 0x0323, + 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x001d, 0x0001, 0x001f, + // Entry 8D80 - 8DBF + 0x0001, 0x0021, 0x0001, 0x000e, 0x0000, 0x0001, 0x0026, 0x0001, + 0x0028, 0x0003, 0x0000, 0x0000, 0x002c, 0x000e, 0x000e, 0xffff, + 0x0005, 0x000e, 0x0017, 0x0022, 0x002d, 0x0036, 0x0041, 0x0052, + 0x0063, 0x0070, 0x007b, 0x0084, 0x008f, 0x0001, 0x003e, 0x0001, + 0x0040, 0x0003, 0x0000, 0x0000, 0x0044, 0x000e, 0x000e, 0xffff, + 0x0098, 0x00a9, 0x00b6, 0x00c1, 0x00ce, 0x00d5, 0x00e4, 0x00f3, + 0x0100, 0x010d, 0x0116, 0x0121, 0x012e, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x005d, 0x0000, 0x0000, 0x0004, 0x006b, + // Entry 8DC0 - 8DFF + 0x0065, 0x0062, 0x0068, 0x0001, 0x000d, 0x0011, 0x0001, 0x000d, + 0x0025, 0x0001, 0x000d, 0x0033, 0x0001, 0x000e, 0x013d, 0x0008, + 0x0077, 0x00c5, 0x00ee, 0x0114, 0x012c, 0x0142, 0x0153, 0x0000, + 0x0002, 0x007a, 0x009c, 0x0003, 0x007e, 0x0000, 0x008d, 0x000d, + 0x0008, 0xffff, 0x0000, 0x4f2d, 0x000e, 0x4f34, 0x4f3b, 0x4f42, + 0x4f49, 0x4f50, 0x4f57, 0x4f5e, 0x4f65, 0x4f6c, 0x000d, 0x000e, + 0xffff, 0x014a, 0x0157, 0x0166, 0x016f, 0x017a, 0x0181, 0x018a, + 0x0193, 0x01a0, 0x01b3, 0x01c2, 0x01d3, 0x0003, 0x00a0, 0x00ab, + // Entry 8E00 - 8E3F + 0x00ba, 0x0009, 0x0008, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x4f50, 0x000d, 0x000e, 0xffff, 0x01e4, + 0x01e7, 0x01ea, 0x01ed, 0x01ea, 0x01e4, 0x01e4, 0x01ed, 0x01f0, + 0x01f3, 0x01f6, 0x01f9, 0x0009, 0x000e, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0193, 0x0002, 0x00c8, + 0x00de, 0x0003, 0x00cc, 0x0000, 0x00d5, 0x0007, 0x000e, 0x01fc, + 0x0203, 0x020a, 0x0211, 0x0218, 0x021f, 0x0226, 0x0007, 0x000e, + 0x022d, 0x023c, 0x0251, 0x025e, 0x026d, 0x027e, 0x0289, 0x0003, + // Entry 8E40 - 8E7F + 0x0000, 0x00e2, 0x00eb, 0x0007, 0x000e, 0x01f6, 0x0296, 0x0299, + 0x01f0, 0x029c, 0x0296, 0x01f0, 0x0001, 0x000e, 0x022d, 0x0002, + 0x00f1, 0x010a, 0x0003, 0x00f5, 0x00fc, 0x0103, 0x0005, 0x000e, + 0xffff, 0x029f, 0x02a3, 0x02a7, 0x02ab, 0x0005, 0x000d, 0xffff, + 0x0140, 0x0143, 0x0146, 0x0149, 0x0005, 0x000e, 0xffff, 0x02af, + 0x02cd, 0x02ed, 0x030d, 0x0002, 0x0000, 0x010d, 0x0005, 0x000d, + 0xffff, 0x0140, 0x0143, 0x0146, 0x0149, 0x0001, 0x0116, 0x0003, + 0x011a, 0x0000, 0x0123, 0x0002, 0x011d, 0x0120, 0x0001, 0x000e, + // Entry 8E80 - 8EBF + 0x0331, 0x0001, 0x000e, 0x0343, 0x0002, 0x0126, 0x0129, 0x0001, + 0x000e, 0x0331, 0x0001, 0x000e, 0x0343, 0x0003, 0x0136, 0x013c, + 0x0130, 0x0001, 0x0132, 0x0002, 0x000e, 0x0352, 0x036d, 0x0001, + 0x0138, 0x0002, 0x000e, 0x037d, 0x0389, 0x0001, 0x013e, 0x0002, + 0x000e, 0x0391, 0x039b, 0x0004, 0x0150, 0x014a, 0x0147, 0x014d, + 0x0001, 0x000e, 0x03a2, 0x0001, 0x000e, 0x03b4, 0x0001, 0x000e, + 0x03c0, 0x0001, 0x000d, 0x0225, 0x0004, 0x0161, 0x015b, 0x0158, + 0x015e, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, + // Entry 8EC0 - 8EFF + 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0001, 0x0166, 0x0001, + 0x0168, 0x0003, 0x0000, 0x0000, 0x016c, 0x000e, 0x000e, 0x0418, + 0x03c9, 0x03d4, 0x03e1, 0x03ee, 0x03f9, 0x0404, 0x040f, 0x0424, + 0x042f, 0x0438, 0x0443, 0x044e, 0x0453, 0x0005, 0x0182, 0x0000, + 0x0000, 0x0000, 0x0197, 0x0001, 0x0184, 0x0003, 0x0000, 0x0000, + 0x0188, 0x000d, 0x000e, 0xffff, 0x045c, 0x0469, 0x0478, 0x0487, + 0x0492, 0x04a1, 0x04ac, 0x04b9, 0x04c8, 0x04d9, 0x04e4, 0x04ed, + 0x0001, 0x0199, 0x0001, 0x019b, 0x0001, 0x000e, 0x04fc, 0x0008, + // Entry 8F00 - 8F3F + 0x01a7, 0x0000, 0x0000, 0x0000, 0x01df, 0x01e6, 0x0000, 0x9006, + 0x0002, 0x01aa, 0x01cc, 0x0003, 0x01ae, 0x0000, 0x01bd, 0x000d, + 0x000e, 0xffff, 0x0505, 0x050d, 0x0515, 0x051f, 0x0529, 0x0533, + 0x053d, 0x0545, 0x054b, 0x0553, 0x0559, 0x0564, 0x000d, 0x000e, + 0xffff, 0x056f, 0x057e, 0x0589, 0x0596, 0x05a4, 0x05b3, 0x05c3, + 0x05ce, 0x05db, 0x05ea, 0x05f5, 0x0609, 0x0003, 0x0000, 0x0000, + 0x01d0, 0x000d, 0x000e, 0xffff, 0x061b, 0x062a, 0x0635, 0x0640, + 0x064b, 0x065a, 0x0669, 0x05ce, 0x0674, 0x0683, 0x068e, 0x069e, + // Entry 8F40 - 8F7F + 0x0001, 0x01e1, 0x0001, 0x01e3, 0x0001, 0x000e, 0x06ae, 0x0004, + 0x01f4, 0x01ee, 0x01eb, 0x01f1, 0x0001, 0x000d, 0x0011, 0x0001, + 0x000d, 0x0025, 0x0001, 0x000d, 0x0033, 0x0001, 0x000d, 0x0033, + 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x01fe, 0x02f0, 0x0001, + 0x0200, 0x0001, 0x0202, 0x00ec, 0x000e, 0x06b3, 0x06ca, 0x06e3, + 0x06fc, 0x0711, 0x0728, 0x073f, 0x0754, 0x076b, 0x0780, 0x0797, + 0x07b0, 0x07d2, 0x07f2, 0x0812, 0x0832, 0x0852, 0x0867, 0x087b, + 0x0896, 0x08ad, 0x08c4, 0x08db, 0x08f0, 0x0905, 0x091a, 0x0931, + // Entry 8F80 - 8FBF + 0x0948, 0x095f, 0x0978, 0x098d, 0x09a6, 0x09bd, 0x09d2, 0x09e7, + 0x09fe, 0x0a17, 0x0a34, 0x0a4f, 0x0a62, 0x0a77, 0x0a8a, 0x0aa5, + 0x0abb, 0x0ad2, 0x0aeb, 0x0b02, 0x0b17, 0x0b2b, 0x0b40, 0x0b5b, + 0x0b74, 0x0b8a, 0x0ba3, 0x0bba, 0x0bd3, 0x0bea, 0x0c01, 0x0c1a, + 0x0c37, 0x0c50, 0x0c6d, 0x0c84, 0x0c9d, 0x0cb6, 0x0cd3, 0x0cec, + 0x0d03, 0x0d20, 0x0d37, 0x0d50, 0x0d69, 0x0d80, 0x0d97, 0x0db2, + 0x0dc9, 0x0de0, 0x0df7, 0x0e10, 0x0e28, 0x0e41, 0x0e59, 0x0e70, + 0x0e89, 0x0ea2, 0x0ebb, 0x0ed4, 0x0eeb, 0x0f02, 0x0f19, 0x0f30, + // Entry 8FC0 - 8FFF + 0x0f49, 0x0f64, 0x0f7d, 0x0f96, 0x0faf, 0x0fcc, 0x0fe1, 0x0ffa, + 0x1013, 0x102b, 0x1040, 0x1057, 0x1070, 0x1087, 0x109e, 0x10b5, + 0x10d4, 0x10ed, 0x1108, 0x111f, 0x1138, 0x1153, 0x116b, 0x1184, + 0x11a3, 0x11bc, 0x11d5, 0x11e8, 0x1201, 0x121c, 0x1235, 0x124e, + 0x1265, 0x1282, 0x12a1, 0x12ba, 0x12d9, 0x12ed, 0x1304, 0x131f, + 0x1336, 0x134f, 0x1368, 0x137f, 0x1398, 0x13ae, 0x13c5, 0x13dd, + 0x13f6, 0x140d, 0x1420, 0x1439, 0x1450, 0x146b, 0x1484, 0x149f, + 0x14b8, 0x14cd, 0x14e4, 0x14fd, 0x1514, 0x152f, 0x1546, 0x1561, + // Entry 9000 - 903F + 0x157e, 0x1597, 0x15ae, 0x15c7, 0x15e2, 0x15fb, 0x1618, 0x162f, + 0x1646, 0x1663, 0x167a, 0x1693, 0x16b0, 0x16c9, 0x16dc, 0x16f9, + 0x170e, 0x1725, 0x173e, 0x175b, 0x1773, 0x178e, 0x17ab, 0x17c2, + 0x17dd, 0x17f6, 0x180f, 0x1826, 0x1841, 0x185a, 0x1875, 0x188c, + 0x18a5, 0x18bc, 0x18d5, 0x18f2, 0x190d, 0x1924, 0x193f, 0x1958, + 0x1971, 0x198e, 0x19a7, 0x19c0, 0x19d8, 0x19ef, 0x1a08, 0x1a1b, + 0x1a3a, 0x1a51, 0x1a6c, 0x1a83, 0x1a9c, 0x1ab5, 0x1ad2, 0x1ae9, + 0x1b04, 0x1b1d, 0x1b38, 0x1b51, 0x1b6a, 0x1b82, 0x1b9f, 0x1bb8, + // Entry 9040 - 907F + 0x1bce, 0x1be9, 0x1c04, 0x1c1d, 0x1c36, 0x1c51, 0x1c6a, 0x1c81, + 0x1c98, 0x1cb1, 0x1cc9, 0x1ce4, 0x1cfd, 0x1d16, 0x1d21, 0x1d2c, + 0x1d35, 0x0004, 0x02fe, 0x02f8, 0x02f5, 0x02fb, 0x0001, 0x000c, + 0x0000, 0x0001, 0x000c, 0x0012, 0x0001, 0x000c, 0x001e, 0x0001, + 0x000e, 0x1d42, 0x0005, 0x0307, 0x0000, 0x0000, 0x0000, 0x031c, + 0x0001, 0x0309, 0x0003, 0x0000, 0x0000, 0x030d, 0x000d, 0x000e, + 0xffff, 0x1d4b, 0x1d5e, 0x1d73, 0x1d80, 0x1d87, 0x1d94, 0x1da5, + 0x1dae, 0x1db7, 0x1dc0, 0x1dc7, 0x1dd4, 0x0001, 0x031e, 0x0001, + // Entry 9080 - 90BF + 0x0320, 0x0001, 0x000e, 0x1de1, 0x0005, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0329, 0x0001, 0x032b, 0x0001, 0x032d, 0x0002, 0x000e, + 0x1de6, 0x1df2, 0x0040, 0x0372, 0x0000, 0x0000, 0x0377, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0394, 0x0000, 0x0000, 0x03b1, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03ce, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x03ed, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 90C0 - 90FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03f2, + 0x0000, 0x03f7, 0x0000, 0x0000, 0x040f, 0x0000, 0x0000, 0x0427, + 0x0000, 0x0000, 0x043f, 0x0001, 0x0374, 0x0001, 0x0009, 0x08c0, + 0x0003, 0x037b, 0x037e, 0x0383, 0x0001, 0x0009, 0x08c7, 0x0003, + 0x000e, 0x1df7, 0x1e11, 0x1e25, 0x0002, 0x0386, 0x038d, 0x0005, + 0x000e, 0x1e6d, 0x1e41, 0xffff, 0xffff, 0x1e57, 0x0005, 0x000e, + 0x1eb3, 0x1e83, 0xffff, 0xffff, 0x1e9b, 0x0003, 0x0398, 0x039b, + 0x03a0, 0x0001, 0x0009, 0x0bae, 0x0003, 0x000e, 0x1ecb, 0x1ee7, + // Entry 9100 - 913F + 0x1efd, 0x0002, 0x03a3, 0x03aa, 0x0005, 0x000e, 0x1f45, 0x1f1b, + 0xffff, 0xffff, 0x1f2f, 0x0005, 0x000e, 0x1f89, 0x1f5b, 0xffff, + 0xffff, 0x1f71, 0x0003, 0x03b5, 0x03b8, 0x03bd, 0x0001, 0x000e, + 0x1fa1, 0x0003, 0x000e, 0x1fae, 0x1fc8, 0x1fdc, 0x0002, 0x03c0, + 0x03c7, 0x0005, 0x000f, 0x002c, 0x0000, 0xffff, 0xffff, 0x0016, + 0x0005, 0x000f, 0x0072, 0x0042, 0xffff, 0xffff, 0x005a, 0x0003, + 0x03d2, 0x03d5, 0x03dc, 0x0001, 0x000f, 0x008a, 0x0005, 0x000f, + 0x00a2, 0x00ab, 0x00b6, 0x0091, 0x00c1, 0x0002, 0x03df, 0x03e6, + // Entry 9140 - 917F + 0x0005, 0x000f, 0x00e6, 0x00d6, 0xffff, 0xffff, 0x00e6, 0x0005, + 0x000f, 0x010a, 0x00f8, 0xffff, 0xffff, 0x010a, 0x0001, 0x03ef, + 0x0001, 0x000f, 0x011e, 0x0001, 0x03f4, 0x0001, 0x000f, 0x0135, + 0x0003, 0x03fb, 0x0000, 0x03fe, 0x0001, 0x0009, 0x1ad5, 0x0002, + 0x0401, 0x0408, 0x0005, 0x000f, 0x0178, 0x0156, 0xffff, 0xffff, + 0x0166, 0x0005, 0x000f, 0x01b0, 0x018a, 0xffff, 0xffff, 0x019c, + 0x0003, 0x0413, 0x0000, 0x0416, 0x0001, 0x000f, 0x01c4, 0x0002, + 0x0419, 0x0420, 0x0005, 0x000f, 0x01e3, 0x01cf, 0xffff, 0xffff, + // Entry 9180 - 91BF + 0x01e3, 0x0005, 0x000f, 0x020f, 0x01f9, 0xffff, 0xffff, 0x020f, + 0x0003, 0x042b, 0x0000, 0x042e, 0x0001, 0x000f, 0x0227, 0x0002, + 0x0431, 0x0438, 0x0005, 0x000f, 0x0262, 0x0234, 0xffff, 0xffff, + 0x024a, 0x0005, 0x000f, 0x02ac, 0x027a, 0xffff, 0xffff, 0x0292, + 0x0001, 0x0441, 0x0001, 0x000f, 0x02c6, 0x0004, 0x0449, 0x044d, + 0x0000, 0x0450, 0x0002, 0x0002, 0x152f, 0x4cea, 0x0001, 0x000f, + 0x02cf, 0x0002, 0x0000, 0x0453, 0x0003, 0x0457, 0x0597, 0x04f7, + 0x009e, 0x000f, 0xffff, 0xffff, 0xffff, 0xffff, 0x03ff, 0x04af, + // Entry 91C0 - 91FF + 0x0594, 0x0611, 0x06a0, 0x0723, 0x07b2, 0x0841, 0xffff, 0x09c4, + 0x0a53, 0x0ae2, 0x0b9e, 0x0c27, 0x0cae, 0x0d88, 0x0e8f, 0x0f5d, + 0x102b, 0x10c0, 0x1137, 0xffff, 0xffff, 0x11f8, 0xffff, 0x12b2, + 0xffff, 0x1365, 0x13dc, 0x144d, 0x14c4, 0xffff, 0xffff, 0x15ac, + 0x163b, 0x16e8, 0xffff, 0xffff, 0xffff, 0x17bc, 0xffff, 0x1880, + 0x192d, 0xffff, 0x19e0, 0x1a93, 0x1b55, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1c70, 0xffff, 0xffff, 0x1d41, 0x1df7, 0xffff, 0xffff, + 0x1f06, 0x1fc2, 0x2051, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 9200 - 923F + 0xffff, 0x21d9, 0x224a, 0x22c7, 0x2356, 0x23df, 0xffff, 0xffff, + 0x2529, 0xffff, 0x25c4, 0xffff, 0xffff, 0x26bd, 0xffff, 0x27da, + 0xffff, 0xffff, 0xffff, 0xffff, 0x28d4, 0xffff, 0xffff, 0xffff, + 0x297f, 0x2a11, 0xffff, 0xffff, 0xffff, 0x2ad6, 0x2b86, 0x2c1e, + 0xffff, 0xffff, 0x2cf4, 0x2def, 0x2e8a, 0x2efb, 0xffff, 0xffff, + 0x2fc8, 0x3051, 0x30c2, 0xffff, 0x3170, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x331d, 0x33a0, 0x341d, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x3577, 0xffff, 0xffff, 0x362c, + // Entry 9240 - 927F + 0xffff, 0x36b7, 0xffff, 0x3770, 0x37f3, 0x3888, 0xffff, 0x3929, + 0x39c4, 0xffff, 0xffff, 0xffff, 0x3abf, 0x3b42, 0xffff, 0xffff, + 0x02ed, 0x0517, 0x08be, 0x0941, 0xffff, 0xffff, 0x2743, 0x325c, + 0x009e, 0x000f, 0x035e, 0x0384, 0x03b1, 0x03da, 0x0428, 0x04c7, + 0x05ac, 0x062f, 0x06ba, 0x0741, 0x07d0, 0x0859, 0xffff, 0x09e2, + 0x0a71, 0x0b0f, 0x0bba, 0x0c43, 0x0ce5, 0x0dce, 0x0ec2, 0x0f90, + 0x104b, 0x10d6, 0x1155, 0x11c6, 0x11dc, 0x1216, 0x1287, 0x12d4, + 0x134d, 0x137b, 0x13f0, 0x1461, 0x14e2, 0x1553, 0x157a, 0x15ca, + // Entry 9280 - 92BF + 0x1660, 0x16fc, 0x1759, 0x1771, 0x1797, 0x17e3, 0x1866, 0x18a8, + 0x1957, 0xffff, 0x1a0a, 0x1ac2, 0x1b69, 0x1bc6, 0x1bf3, 0x1c36, + 0x1c54, 0x1c8a, 0x1cf3, 0x1d1a, 0x1d6c, 0x1e22, 0x1ed6, 0x1eec, + 0x1f33, 0x1fdf, 0x2065, 0x20c2, 0x20f3, 0x2120, 0x213c, 0x2173, + 0x21a6, 0x21ed, 0x2262, 0x22e5, 0x2372, 0x241a, 0x24c3, 0x24f6, + 0x2541, 0x25ae, 0x25e6, 0x265f, 0x269c, 0x26d8, 0x27b8, 0x27f4, + 0x285b, 0x2877, 0x2891, 0x28a9, 0x28f4, 0x2969, 0xffff, 0xffff, + 0x299e, 0x2a29, 0x2a8e, 0x2aaa, 0x2ac0, 0x2aff, 0x2ba7, 0x2c40, + // Entry 92C0 - 92FF + 0x2cb9, 0x2ccd, 0x2d22, 0x2e11, 0x2e9e, 0x2f17, 0x2f84, 0x2f9a, + 0x2fe4, 0x3065, 0x30de, 0x314b, 0x319d, 0x322a, 0x3244, 0xffff, + 0x32eb, 0x3305, 0x3337, 0x33b8, 0x3433, 0x3494, 0x34ae, 0x34df, + 0x350c, 0x3531, 0x354b, 0x355f, 0x358f, 0x35f2, 0x3612, 0x3642, + 0x36a3, 0x36db, 0x3758, 0x378a, 0x3813, 0x38a2, 0x390b, 0x394b, + 0x39e2, 0x3a53, 0x3a6b, 0x3a8c, 0x3ad9, 0x3b68, 0x1ead, 0x2db3, + 0x0301, 0x052f, 0x08d8, 0x095b, 0xffff, 0x267f, 0x2759, 0x327a, + 0x009e, 0x000f, 0xffff, 0xffff, 0xffff, 0xffff, 0x0466, 0x04f4, + // Entry 9300 - 933F + 0x05d9, 0x0662, 0x06e9, 0x0774, 0x0803, 0x0886, 0xffff, 0x0a15, + 0x0aa4, 0x0b51, 0x0beb, 0x0c74, 0x0d31, 0x0e29, 0x0f0a, 0x0fd8, + 0x1080, 0x1101, 0x1188, 0xffff, 0xffff, 0x1249, 0xffff, 0x130b, + 0xffff, 0x13a6, 0x1419, 0x1490, 0x1515, 0xffff, 0xffff, 0x15fd, + 0x169a, 0x1725, 0xffff, 0xffff, 0xffff, 0x181f, 0xffff, 0x18e5, + 0x1996, 0xffff, 0x1a49, 0x1b06, 0x1b92, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1cb9, 0xffff, 0xffff, 0x1dac, 0x1e62, 0xffff, 0xffff, + 0x1f75, 0x2011, 0x208e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 9340 - 937F + 0xffff, 0x2216, 0x228f, 0x2318, 0x23a3, 0x246a, 0xffff, 0xffff, + 0x2572, 0xffff, 0x261d, 0xffff, 0xffff, 0x2708, 0xffff, 0x2823, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2929, 0xffff, 0xffff, 0xffff, + 0x29d2, 0x2a56, 0xffff, 0xffff, 0xffff, 0x2b3d, 0x2bdd, 0x2c77, + 0xffff, 0xffff, 0x2d65, 0x2e48, 0x2ec7, 0x2f48, 0xffff, 0xffff, + 0x3015, 0x308e, 0x310f, 0xffff, 0x31df, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x3366, 0x33e5, 0x345e, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x35ba, 0xffff, 0xffff, 0x366d, + // Entry 9380 - 93BF + 0xffff, 0x3714, 0xffff, 0x37b9, 0x3848, 0x38d1, 0xffff, 0x3982, + 0x3a15, 0xffff, 0xffff, 0xffff, 0x3b08, 0x3ba3, 0xffff, 0xffff, + 0x032a, 0x055c, 0x0907, 0x098a, 0xffff, 0xffff, 0x2784, 0x32ad, + 0x0003, 0x0004, 0x04c4, 0x0945, 0x0012, 0x0017, 0x0055, 0x0146, + 0x0000, 0x016b, 0x0000, 0x0191, 0x01bc, 0x03fd, 0x042c, 0x0450, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x047e, 0x04a2, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0033, 0x0000, 0x0044, + 0x0003, 0x0029, 0x002e, 0x0024, 0x0001, 0x0026, 0x0001, 0x0010, + // Entry 93C0 - 93FF + 0x0000, 0x0001, 0x002b, 0x0001, 0x0010, 0x0000, 0x0001, 0x0030, + 0x0001, 0x0010, 0x0000, 0x0004, 0x0041, 0x003b, 0x0038, 0x003e, + 0x0001, 0x0010, 0x0003, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, + 0x001b, 0x0001, 0x0002, 0x0587, 0x0004, 0x0052, 0x004c, 0x0049, + 0x004f, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0001, + 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x000a, 0x0060, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0135, 0x0000, 0x0000, 0x0000, 0x00c5, + 0x0002, 0x0063, 0x0094, 0x0003, 0x0067, 0x0076, 0x0085, 0x000d, + // Entry 9400 - 943F + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x003b, 0x003d, + 0x003f, 0x0041, 0x0043, 0x2215, 0x2218, 0x221b, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x003b, 0x003d, 0x003f, + 0x0041, 0x0043, 0x2215, 0x2218, 0x221b, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x0039, 0x003b, 0x003d, 0x003f, 0x0041, + 0x0043, 0x2215, 0x2218, 0x221b, 0x0003, 0x0098, 0x00a7, 0x00b6, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x003b, + 0x003d, 0x003f, 0x0041, 0x0043, 0x2215, 0x2218, 0x221b, 0x000d, + // Entry 9440 - 947F + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x003b, 0x003d, + 0x003f, 0x0041, 0x0043, 0x2215, 0x2218, 0x221b, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x003b, 0x003d, 0x003f, + 0x0041, 0x0043, 0x2215, 0x2218, 0x221b, 0x0006, 0x00cc, 0x0000, + 0x0000, 0x0000, 0x00df, 0x0122, 0x0001, 0x00ce, 0x0001, 0x00d0, + 0x000d, 0x0000, 0xffff, 0x005a, 0x005d, 0x0062, 0x0066, 0x006a, + 0x006f, 0x0072, 0x0075, 0x0079, 0x007e, 0x221e, 0x0085, 0x0001, + 0x00e1, 0x0001, 0x00e3, 0x003d, 0x0000, 0xffff, 0x01bd, 0x01c4, + // Entry 9480 - 94BF + 0x01cc, 0x01d5, 0x01de, 0x01e6, 0x01ec, 0x01f4, 0x01fc, 0x0205, + 0x020d, 0x0214, 0x021b, 0x0223, 0x022d, 0x0234, 0x023b, 0x0245, + 0x024c, 0x0253, 0x025b, 0x0264, 0x026b, 0x0273, 0x027c, 0x0282, + 0x028a, 0x0293, 0x029b, 0x02a4, 0x02ab, 0x02b2, 0x02b9, 0x02c3, + 0x02cc, 0x02d2, 0x02d9, 0x02e1, 0x02ea, 0x02f2, 0x02fa, 0x0303, + 0x0309, 0x0311, 0x031a, 0x0322, 0x0329, 0x0331, 0x0339, 0x0340, + 0x0349, 0x0351, 0x0358, 0x0362, 0x036a, 0x0370, 0x0377, 0x0381, + 0x0389, 0x0390, 0x0001, 0x0124, 0x0001, 0x0126, 0x000d, 0x0000, + // Entry 94C0 - 94FF + 0xffff, 0x005a, 0x005d, 0x0062, 0x0066, 0x006a, 0x006f, 0x0072, + 0x0075, 0x0079, 0x007e, 0x221e, 0x0085, 0x0004, 0x0143, 0x013d, + 0x013a, 0x0140, 0x0001, 0x0010, 0x0015, 0x0001, 0x0010, 0x0026, + 0x0001, 0x0010, 0x002f, 0x0001, 0x0002, 0x028b, 0x0005, 0x014c, + 0x0000, 0x0000, 0x0000, 0x0162, 0x0001, 0x014e, 0x0003, 0x0000, + 0x0000, 0x0152, 0x000e, 0x0000, 0xffff, 0x03ce, 0x03d3, 0x03d8, + 0x03de, 0x2221, 0x03e9, 0x03f0, 0x03f9, 0x0403, 0x040b, 0x0411, + 0x0416, 0x041c, 0x0003, 0x0000, 0x0000, 0x0166, 0x0001, 0x0168, + // Entry 9500 - 953F + 0x0001, 0x0000, 0x0425, 0x0005, 0x0171, 0x0000, 0x0000, 0x0000, + 0x0187, 0x0001, 0x0173, 0x0003, 0x0000, 0x0000, 0x0177, 0x000e, + 0x0000, 0xffff, 0x042f, 0x0438, 0x043f, 0x0445, 0x044c, 0x0450, + 0x0458, 0x0460, 0x0467, 0x046e, 0x0473, 0x0479, 0x0481, 0x0003, + 0x0000, 0x0000, 0x018b, 0x0001, 0x018d, 0x0002, 0x0000, 0x0425, + 0x042a, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x019a, + 0x0000, 0x01ab, 0x0004, 0x01a8, 0x01a2, 0x019f, 0x01a5, 0x0001, + 0x0010, 0x0037, 0x0001, 0x0006, 0x01ff, 0x0001, 0x0010, 0x004c, + // Entry 9540 - 957F + 0x0001, 0x0006, 0x020f, 0x0004, 0x01b9, 0x01b3, 0x01b0, 0x01b6, + 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, + 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, 0x01c5, 0x022a, 0x0281, + 0x02b6, 0x03a5, 0x03ca, 0x03db, 0x03ec, 0x0002, 0x01c8, 0x01f9, + 0x0003, 0x01cc, 0x01db, 0x01ea, 0x000d, 0x0010, 0xffff, 0x0054, + 0x005c, 0x0065, 0x006e, 0x0077, 0x007f, 0x0087, 0x008f, 0x0097, + 0x009f, 0x00a8, 0x00b0, 0x000d, 0x0010, 0xffff, 0x00b8, 0x00bb, + 0x00be, 0x00c2, 0x00c5, 0x00c8, 0x00cb, 0x00ce, 0x00d1, 0x00d4, + // Entry 9580 - 95BF + 0x00d7, 0x00da, 0x000d, 0x0010, 0xffff, 0x00dd, 0x00e6, 0x0065, + 0x00f0, 0x0077, 0x007f, 0x00fa, 0x0104, 0x010e, 0x011a, 0x0126, + 0x0132, 0x0003, 0x01fd, 0x020c, 0x021b, 0x000d, 0x0010, 0xffff, + 0x013e, 0x0143, 0x0149, 0x014f, 0x0154, 0x0159, 0x015e, 0x0163, + 0x0167, 0x016c, 0x0171, 0x0176, 0x000d, 0x0010, 0xffff, 0x00b8, + 0x00bb, 0x00be, 0x00c2, 0x00c5, 0x00c8, 0x00cb, 0x00ce, 0x00d1, + 0x00d4, 0x00d7, 0x00da, 0x000d, 0x0010, 0xffff, 0x017b, 0x0181, + 0x0149, 0x0188, 0x0154, 0x0159, 0x018e, 0x0195, 0x019b, 0x01a4, + // Entry 95C0 - 95FF + 0x01ac, 0x01b5, 0x0002, 0x022d, 0x0257, 0x0005, 0x0233, 0x023c, + 0x024e, 0x0000, 0x0245, 0x0007, 0x0010, 0x01be, 0x01c2, 0x01c6, + 0x01ca, 0x01ce, 0x01d2, 0x01d6, 0x0007, 0x0010, 0x01da, 0x01dd, + 0x01e0, 0x01e3, 0x01e6, 0x01e9, 0x01ec, 0x0007, 0x0010, 0x01be, + 0x01c2, 0x01c6, 0x01ca, 0x01ce, 0x01d2, 0x01d6, 0x0007, 0x0010, + 0x01ef, 0x01f8, 0x0200, 0x0208, 0x0211, 0x0218, 0x0222, 0x0005, + 0x025d, 0x0266, 0x0278, 0x0000, 0x026f, 0x0007, 0x0010, 0x01be, + 0x01c2, 0x01c6, 0x01ca, 0x01ce, 0x01d2, 0x01d6, 0x0007, 0x0010, + // Entry 9600 - 963F + 0x01da, 0x01dd, 0x01e0, 0x01e3, 0x01e6, 0x01e9, 0x01ec, 0x0007, + 0x0010, 0x01be, 0x01c2, 0x01c6, 0x01ca, 0x01ce, 0x01d2, 0x01d6, + 0x0007, 0x0010, 0x01ef, 0x01f8, 0x0200, 0x0208, 0x0211, 0x0218, + 0x0222, 0x0002, 0x0284, 0x029d, 0x0003, 0x0288, 0x028f, 0x0296, + 0x0005, 0x0006, 0xffff, 0x0c8c, 0x0c8f, 0x0c92, 0x0c95, 0x0005, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x0005, 0x0010, + 0xffff, 0x022b, 0x0238, 0x0245, 0x0252, 0x0003, 0x02a1, 0x02a8, + 0x02af, 0x0005, 0x0006, 0xffff, 0x0c8c, 0x0c8f, 0x0c92, 0x0c95, + // Entry 9640 - 967F + 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x0005, + 0x0010, 0xffff, 0x022b, 0x0238, 0x0245, 0x0252, 0x0002, 0x02b9, + 0x032f, 0x0003, 0x02bd, 0x02e3, 0x0309, 0x000a, 0x02cb, 0x02ce, + 0x02c8, 0x02d1, 0x02d7, 0x02dd, 0x02e0, 0x0000, 0x02d4, 0x02da, + 0x0001, 0x0010, 0x025f, 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, + 0x026e, 0x0001, 0x0010, 0x0274, 0x0001, 0x0010, 0x027d, 0x0001, + 0x0010, 0x0283, 0x0001, 0x0010, 0x028a, 0x0001, 0x0010, 0x0290, + 0x0001, 0x0010, 0x0297, 0x000a, 0x02f1, 0x02f4, 0x02ee, 0x02f7, + // Entry 9680 - 96BF + 0x02fd, 0x0303, 0x0306, 0x0000, 0x02fa, 0x0300, 0x0001, 0x0010, + 0x025f, 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, 0x0001, + 0x0010, 0x029b, 0x0001, 0x0010, 0x027d, 0x0001, 0x0010, 0x02a0, + 0x0001, 0x0010, 0x028a, 0x0001, 0x0010, 0x0290, 0x0001, 0x0010, + 0x0297, 0x000a, 0x0317, 0x031a, 0x0314, 0x031d, 0x0323, 0x0329, + 0x032c, 0x0000, 0x0320, 0x0326, 0x0001, 0x0010, 0x025f, 0x0001, + 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, 0x0001, 0x0010, 0x0274, + 0x0001, 0x0010, 0x027d, 0x0001, 0x0010, 0x0283, 0x0001, 0x0010, + // Entry 96C0 - 96FF + 0x028a, 0x0001, 0x0010, 0x0290, 0x0001, 0x0010, 0x0297, 0x0003, + 0x0333, 0x0359, 0x037f, 0x000a, 0x0341, 0x0344, 0x033e, 0x0347, + 0x034d, 0x0353, 0x0356, 0x0000, 0x034a, 0x0350, 0x0001, 0x0010, + 0x025f, 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, 0x0001, + 0x0010, 0x0274, 0x0001, 0x0010, 0x027d, 0x0001, 0x0010, 0x0283, + 0x0001, 0x0010, 0x028a, 0x0001, 0x0010, 0x0290, 0x0001, 0x0010, + 0x0297, 0x000a, 0x0367, 0x036a, 0x0364, 0x036d, 0x0373, 0x0379, + 0x037c, 0x0000, 0x0370, 0x0376, 0x0001, 0x0010, 0x025f, 0x0001, + // Entry 9700 - 973F + 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, 0x0001, 0x0010, 0x0274, + 0x0001, 0x0010, 0x027d, 0x0001, 0x0010, 0x0283, 0x0001, 0x0010, + 0x028a, 0x0001, 0x0010, 0x0290, 0x0001, 0x0010, 0x0297, 0x000a, + 0x038d, 0x0390, 0x038a, 0x0393, 0x0399, 0x039f, 0x03a2, 0x0000, + 0x0396, 0x039c, 0x0001, 0x0010, 0x025f, 0x0001, 0x0010, 0x0268, + 0x0001, 0x0010, 0x026e, 0x0001, 0x0010, 0x0274, 0x0001, 0x0010, + 0x027d, 0x0001, 0x0010, 0x0283, 0x0001, 0x0010, 0x028a, 0x0001, + 0x0010, 0x0290, 0x0001, 0x0010, 0x0297, 0x0003, 0x03b4, 0x03bf, + // Entry 9740 - 977F + 0x03a9, 0x0002, 0x03ac, 0x03b0, 0x0002, 0x0010, 0x02a3, 0x02ca, + 0x0002, 0x0010, 0x02b2, 0x02dc, 0x0002, 0x03b7, 0x03bb, 0x0002, + 0x0010, 0x02e7, 0x02ee, 0x0002, 0x0010, 0x02ea, 0x02f1, 0x0002, + 0x03c2, 0x03c6, 0x0002, 0x0010, 0x02e7, 0x02ee, 0x0002, 0x0010, + 0x02ea, 0x02f1, 0x0004, 0x03d8, 0x03d2, 0x03cf, 0x03d5, 0x0001, + 0x0006, 0x0d5a, 0x0001, 0x0006, 0x0d6e, 0x0001, 0x0002, 0x003c, + 0x0001, 0x0006, 0x0d7c, 0x0004, 0x03e9, 0x03e3, 0x03e0, 0x03e6, + 0x0001, 0x0005, 0x0082, 0x0001, 0x0005, 0x008f, 0x0001, 0x0005, + // Entry 9780 - 97BF + 0x0099, 0x0001, 0x0005, 0x00a1, 0x0004, 0x03fa, 0x03f4, 0x03f1, + 0x03f7, 0x0001, 0x0006, 0x021c, 0x0001, 0x0006, 0x021c, 0x0001, + 0x0006, 0x022e, 0x0001, 0x0000, 0x03c6, 0x0005, 0x0403, 0x0000, + 0x0000, 0x0000, 0x0419, 0x0001, 0x0405, 0x0003, 0x0000, 0x0000, + 0x0409, 0x000e, 0x0000, 0x057b, 0x054c, 0x0553, 0x055b, 0x0562, + 0x0568, 0x056f, 0x0576, 0x0583, 0x0589, 0x058e, 0x0594, 0x2226, + 0x059d, 0x0003, 0x0422, 0x0427, 0x041d, 0x0001, 0x041f, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x0424, 0x0001, 0x0000, 0x04ef, 0x0001, + // Entry 97C0 - 97FF + 0x0429, 0x0001, 0x0000, 0x04ef, 0x0005, 0x0432, 0x0000, 0x0000, + 0x0000, 0x0447, 0x0001, 0x0434, 0x0003, 0x0000, 0x0000, 0x0438, + 0x000d, 0x0000, 0xffff, 0x05a2, 0x05aa, 0x05b3, 0x05bc, 0x05c3, + 0x05cb, 0x05d2, 0x05d9, 0x05e1, 0x05ec, 0x05f2, 0x05f8, 0x0003, + 0x0000, 0x0000, 0x044b, 0x0001, 0x044d, 0x0001, 0x0000, 0x0601, + 0x0005, 0x0456, 0x0000, 0x0000, 0x0000, 0x046b, 0x0001, 0x0458, + 0x0003, 0x0000, 0x0000, 0x045c, 0x000d, 0x0000, 0xffff, 0x0657, + 0x0660, 0x0666, 0x066f, 0x0679, 0x0682, 0x068c, 0x0692, 0x069b, + // Entry 9800 - 983F + 0x06a3, 0x06ab, 0x06ba, 0x0003, 0x0474, 0x0479, 0x046f, 0x0001, + 0x0471, 0x0001, 0x0000, 0x06c8, 0x0001, 0x0476, 0x0001, 0x0000, + 0x06c8, 0x0001, 0x047b, 0x0001, 0x0000, 0x06c8, 0x0005, 0x0484, + 0x0000, 0x0000, 0x0000, 0x0499, 0x0001, 0x0486, 0x0003, 0x0000, + 0x0000, 0x048a, 0x000d, 0x0000, 0xffff, 0x19c9, 0x19d3, 0x19df, + 0x19e7, 0x19eb, 0x19f2, 0x19fc, 0x1a01, 0x1a06, 0x1a0b, 0x1a0f, + 0x1a16, 0x0003, 0x0000, 0x0000, 0x049d, 0x0001, 0x049f, 0x0001, + 0x0000, 0x1a1d, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x04a9, + // Entry 9840 - 987F + 0x04b3, 0x0003, 0x0000, 0x0000, 0x04ad, 0x0001, 0x04af, 0x0002, + 0x0010, 0x02f4, 0x0301, 0x0004, 0x04c1, 0x04bb, 0x04b8, 0x04be, + 0x0001, 0x0010, 0x0037, 0x0001, 0x0006, 0x01ff, 0x0001, 0x0010, + 0x0305, 0x0001, 0x0002, 0x0587, 0x0042, 0x0507, 0x050c, 0x0511, + 0x0516, 0x052d, 0x0544, 0x055b, 0x0572, 0x0589, 0x05a0, 0x05b7, + 0x05ce, 0x05e5, 0x0600, 0x061b, 0x0636, 0x063b, 0x0640, 0x0645, + 0x065e, 0x0677, 0x0690, 0x0695, 0x069a, 0x069f, 0x06a4, 0x06a9, + 0x06ae, 0x06b3, 0x06b8, 0x06bd, 0x06d1, 0x06e5, 0x06f9, 0x070d, + // Entry 9880 - 98BF + 0x0721, 0x0735, 0x0749, 0x075d, 0x0771, 0x0785, 0x0799, 0x07ad, + 0x07c1, 0x07d5, 0x07e9, 0x07fd, 0x0811, 0x0825, 0x0839, 0x084d, + 0x0861, 0x0866, 0x086b, 0x0870, 0x0886, 0x089c, 0x08b2, 0x08c8, + 0x08de, 0x08f4, 0x090a, 0x0920, 0x0936, 0x093b, 0x0940, 0x0001, + 0x0509, 0x0001, 0x0001, 0x0040, 0x0001, 0x050e, 0x0001, 0x0001, + 0x0040, 0x0001, 0x0513, 0x0001, 0x0001, 0x0040, 0x0003, 0x051a, + 0x051d, 0x0522, 0x0001, 0x0010, 0x030f, 0x0003, 0x0010, 0x0313, + 0x0322, 0x032a, 0x0002, 0x0525, 0x0529, 0x0002, 0x0010, 0x034d, + // Entry 98C0 - 98FF + 0x0339, 0x0002, 0x0010, 0x036d, 0x0362, 0x0003, 0x0531, 0x0534, + 0x0539, 0x0001, 0x0010, 0x030f, 0x0003, 0x0010, 0x0313, 0x0322, + 0x032a, 0x0002, 0x053c, 0x0540, 0x0002, 0x0010, 0x034d, 0x0339, + 0x0002, 0x0010, 0x036d, 0x0362, 0x0003, 0x0548, 0x054b, 0x0550, + 0x0001, 0x0010, 0x030f, 0x0003, 0x0010, 0x0313, 0x0322, 0x032a, + 0x0002, 0x0553, 0x0557, 0x0002, 0x0010, 0x034d, 0x0339, 0x0002, + 0x0010, 0x036d, 0x0362, 0x0003, 0x055f, 0x0562, 0x0567, 0x0001, + 0x0006, 0x1655, 0x0003, 0x0010, 0x0379, 0x038d, 0x039e, 0x0002, + // Entry 9900 - 993F + 0x056a, 0x056e, 0x0002, 0x0010, 0x03cc, 0x03b2, 0x0002, 0x0010, + 0x03f8, 0x03e7, 0x0003, 0x0576, 0x0579, 0x057e, 0x0001, 0x000b, + 0x0c78, 0x0003, 0x0010, 0x040a, 0x041a, 0x0427, 0x0002, 0x0581, + 0x0585, 0x0002, 0x0010, 0x0437, 0x0437, 0x0002, 0x0010, 0x044d, + 0x044d, 0x0003, 0x058d, 0x0590, 0x0595, 0x0001, 0x000b, 0x0c78, + 0x0003, 0x0010, 0x045a, 0x041a, 0x0467, 0x0002, 0x0598, 0x059c, + 0x0002, 0x0010, 0x0437, 0x0437, 0x0002, 0x0010, 0x044d, 0x044d, + 0x0003, 0x05a4, 0x05a7, 0x05ac, 0x0001, 0x0006, 0x09ee, 0x0003, + // Entry 9940 - 997F + 0x0010, 0x0474, 0x0482, 0x048d, 0x0002, 0x05af, 0x05b3, 0x0002, + 0x0010, 0x04af, 0x049b, 0x0002, 0x0010, 0x04d0, 0x04c5, 0x0003, + 0x05bb, 0x05be, 0x05c3, 0x0001, 0x0006, 0x09ee, 0x0003, 0x0010, + 0x0474, 0x0482, 0x048d, 0x0002, 0x05c6, 0x05ca, 0x0002, 0x0010, + 0x04af, 0x049b, 0x0002, 0x0010, 0x04d0, 0x04c5, 0x0003, 0x05d2, + 0x05d5, 0x05da, 0x0001, 0x0006, 0x09ee, 0x0003, 0x0010, 0x04dd, + 0x0482, 0x04e8, 0x0002, 0x05dd, 0x05e1, 0x0002, 0x0010, 0x04af, + 0x049b, 0x0002, 0x0010, 0x04d0, 0x04c5, 0x0004, 0x05ea, 0x05ed, + // Entry 9980 - 99BF + 0x05f2, 0x05fd, 0x0001, 0x0010, 0x04f3, 0x0003, 0x0010, 0x04fb, + 0x050e, 0x051e, 0x0002, 0x05f5, 0x05f9, 0x0002, 0x0010, 0x0548, + 0x0530, 0x0002, 0x0010, 0x0570, 0x0561, 0x0001, 0x0010, 0x0580, + 0x0004, 0x0605, 0x0608, 0x060d, 0x0618, 0x0001, 0x0010, 0x0593, + 0x0003, 0x0010, 0x0599, 0x05aa, 0x05b8, 0x0002, 0x0610, 0x0614, + 0x0002, 0x0010, 0x05c8, 0x05c8, 0x0002, 0x0010, 0x05de, 0x05de, + 0x0001, 0x0010, 0x0580, 0x0004, 0x0620, 0x0623, 0x0628, 0x0633, + 0x0001, 0x0010, 0x0593, 0x0003, 0x0010, 0x05eb, 0x05aa, 0x05f9, + // Entry 99C0 - 99FF + 0x0002, 0x062b, 0x062f, 0x0002, 0x0010, 0x05c8, 0x05c8, 0x0002, + 0x0010, 0x05de, 0x05de, 0x0001, 0x0010, 0x0580, 0x0001, 0x0638, + 0x0001, 0x0010, 0x0606, 0x0001, 0x063d, 0x0001, 0x0010, 0x0616, + 0x0001, 0x0642, 0x0001, 0x0010, 0x0616, 0x0003, 0x0649, 0x064c, + 0x0653, 0x0001, 0x0010, 0x0624, 0x0005, 0x0010, 0x0637, 0x063c, + 0x0641, 0x0628, 0x0647, 0x0002, 0x0656, 0x065a, 0x0002, 0x0010, + 0x0668, 0x0654, 0x0002, 0x0010, 0x0688, 0x067d, 0x0003, 0x0662, + 0x0665, 0x066c, 0x0001, 0x0010, 0x0624, 0x0005, 0x0010, 0x0637, + // Entry 9A00 - 9A3F + 0x063c, 0x0641, 0x0628, 0x0647, 0x0002, 0x066f, 0x0673, 0x0002, + 0x0010, 0x0668, 0x0654, 0x0002, 0x0010, 0x0688, 0x067d, 0x0003, + 0x067b, 0x067e, 0x0685, 0x0001, 0x0010, 0x0624, 0x0005, 0x0010, + 0x0637, 0x063c, 0x0641, 0x0628, 0x0647, 0x0002, 0x0688, 0x068c, + 0x0002, 0x0010, 0x0668, 0x0654, 0x0002, 0x0010, 0x0688, 0x067d, + 0x0001, 0x0692, 0x0001, 0x0010, 0x0694, 0x0001, 0x0697, 0x0001, + 0x0010, 0x0694, 0x0001, 0x069c, 0x0001, 0x0010, 0x0694, 0x0001, + 0x06a1, 0x0001, 0x0010, 0x06a3, 0x0001, 0x06a6, 0x0001, 0x0010, + // Entry 9A40 - 9A7F + 0x06b5, 0x0001, 0x06ab, 0x0001, 0x0010, 0x06b5, 0x0001, 0x06b0, + 0x0001, 0x0010, 0x06c5, 0x0001, 0x06b5, 0x0001, 0x0010, 0x06df, + 0x0001, 0x06ba, 0x0001, 0x0010, 0x06df, 0x0003, 0x0000, 0x06c1, + 0x06c6, 0x0003, 0x0010, 0x06f7, 0x0707, 0x0717, 0x0002, 0x06c9, + 0x06cd, 0x0002, 0x0010, 0x0740, 0x0727, 0x0002, 0x0010, 0x076a, + 0x075a, 0x0003, 0x0000, 0x06d5, 0x06da, 0x0003, 0x0010, 0x077b, + 0x0786, 0x0791, 0x0002, 0x06dd, 0x06e1, 0x0002, 0x0010, 0x079c, + 0x079c, 0x0002, 0x0010, 0x07b0, 0x07b0, 0x0003, 0x0000, 0x06e9, + // Entry 9A80 - 9ABF + 0x06ee, 0x0003, 0x0010, 0x077b, 0x0786, 0x0791, 0x0002, 0x06f1, + 0x06f5, 0x0002, 0x0010, 0x079c, 0x079c, 0x0002, 0x0010, 0x07b0, + 0x07b0, 0x0003, 0x0000, 0x06fd, 0x0702, 0x0003, 0x0010, 0x07bb, + 0x07ca, 0x07d9, 0x0002, 0x0705, 0x0709, 0x0002, 0x0010, 0x07e8, + 0x07e8, 0x0002, 0x0010, 0x0800, 0x0800, 0x0003, 0x0000, 0x0711, + 0x0716, 0x0003, 0x0010, 0x080f, 0x081a, 0x0825, 0x0002, 0x0719, + 0x071d, 0x0002, 0x0010, 0x0830, 0x0830, 0x0002, 0x0010, 0x0844, + 0x0844, 0x0003, 0x0000, 0x0725, 0x072a, 0x0003, 0x0010, 0x080f, + // Entry 9AC0 - 9AFF + 0x081a, 0x0825, 0x0002, 0x072d, 0x0731, 0x0002, 0x0010, 0x0830, + 0x0830, 0x0002, 0x0010, 0x0844, 0x0844, 0x0003, 0x0000, 0x0739, + 0x073e, 0x0003, 0x0010, 0x084f, 0x085e, 0x086d, 0x0002, 0x0741, + 0x0745, 0x0002, 0x0010, 0x087c, 0x087c, 0x0002, 0x0010, 0x0894, + 0x0894, 0x0003, 0x0000, 0x074d, 0x0752, 0x0003, 0x0010, 0x08a3, + 0x08ae, 0x08b9, 0x0002, 0x0755, 0x0759, 0x0002, 0x0010, 0x08c4, + 0x08c4, 0x0002, 0x0010, 0x08d8, 0x08d8, 0x0003, 0x0000, 0x0761, + 0x0766, 0x0003, 0x0010, 0x08a3, 0x08ae, 0x08b9, 0x0002, 0x0769, + // Entry 9B00 - 9B3F + 0x076d, 0x0002, 0x0010, 0x08c4, 0x08c4, 0x0002, 0x0010, 0x08d8, + 0x08d8, 0x0003, 0x0000, 0x0775, 0x077a, 0x0003, 0x0010, 0x08e3, + 0x08f3, 0x0903, 0x0002, 0x077d, 0x0781, 0x0002, 0x0010, 0x0913, + 0x0913, 0x0002, 0x0010, 0x092c, 0x092c, 0x0003, 0x0000, 0x0789, + 0x078e, 0x0003, 0x0010, 0x093c, 0x0947, 0x0952, 0x0002, 0x0791, + 0x0795, 0x0002, 0x0010, 0x095d, 0x095d, 0x0002, 0x0010, 0x0971, + 0x0971, 0x0003, 0x0000, 0x079d, 0x07a2, 0x0003, 0x0010, 0x093c, + 0x0947, 0x0952, 0x0002, 0x07a5, 0x07a9, 0x0002, 0x0010, 0x095d, + // Entry 9B40 - 9B7F + 0x095d, 0x0002, 0x0010, 0x0971, 0x0971, 0x0003, 0x0000, 0x07b1, + 0x07b6, 0x0003, 0x0010, 0x097c, 0x098a, 0x0998, 0x0002, 0x07b9, + 0x07bd, 0x0002, 0x0010, 0x09a6, 0x09a6, 0x0002, 0x0010, 0x09bd, + 0x09bd, 0x0003, 0x0000, 0x07c5, 0x07ca, 0x0003, 0x0010, 0x09cb, + 0x09d6, 0x09e1, 0x0002, 0x07cd, 0x07d1, 0x0002, 0x0010, 0x09ec, + 0x09ec, 0x0002, 0x0010, 0x0a00, 0x0a00, 0x0003, 0x0000, 0x07d9, + 0x07de, 0x0003, 0x0010, 0x09cb, 0x09d6, 0x09e1, 0x0002, 0x07e1, + 0x07e5, 0x0002, 0x0010, 0x09ec, 0x09ec, 0x0002, 0x0010, 0x0a00, + // Entry 9B80 - 9BBF + 0x0a00, 0x0003, 0x0000, 0x07ed, 0x07f2, 0x0003, 0x0010, 0x0a0b, + 0x0a1c, 0x0a2d, 0x0002, 0x07f5, 0x07f9, 0x0002, 0x0010, 0x0a3e, + 0x0a3e, 0x0002, 0x0010, 0x0a58, 0x0a58, 0x0003, 0x0000, 0x0801, + 0x0806, 0x0003, 0x0010, 0x0a69, 0x0a74, 0x0a7f, 0x0002, 0x0809, + 0x080d, 0x0002, 0x0010, 0x0a8a, 0x0a8a, 0x0002, 0x0010, 0x0a9e, + 0x0a9e, 0x0003, 0x0000, 0x0815, 0x081a, 0x0003, 0x0010, 0x0a69, + 0x0a74, 0x0a7f, 0x0002, 0x081d, 0x0821, 0x0002, 0x0010, 0x0a8a, + 0x0a8a, 0x0002, 0x0010, 0x0a9e, 0x0a9e, 0x0003, 0x0000, 0x0829, + // Entry 9BC0 - 9BFF + 0x082e, 0x0003, 0x0010, 0x0aa9, 0x0ab9, 0x0ac9, 0x0002, 0x0831, + 0x0835, 0x0002, 0x0010, 0x0af2, 0x0ad9, 0x0002, 0x0010, 0x0b1c, + 0x0b0c, 0x0003, 0x0000, 0x083d, 0x0842, 0x0003, 0x0010, 0x0b2d, + 0x0b38, 0x0b43, 0x0002, 0x0845, 0x0849, 0x0002, 0x0010, 0x0b4e, + 0x0b4e, 0x0002, 0x0010, 0x0b62, 0x0b62, 0x0003, 0x0000, 0x0851, + 0x0856, 0x0003, 0x0010, 0x0b2d, 0x0b38, 0x0b43, 0x0002, 0x0859, + 0x085d, 0x0002, 0x0010, 0x0b4e, 0x0b4e, 0x0002, 0x0010, 0x0b62, + 0x0b62, 0x0001, 0x0863, 0x0001, 0x0010, 0x0b6d, 0x0001, 0x0868, + // Entry 9C00 - 9C3F + 0x0001, 0x0010, 0x0b6d, 0x0001, 0x086d, 0x0001, 0x0010, 0x0b6d, + 0x0003, 0x0874, 0x0877, 0x087b, 0x0001, 0x0006, 0x1dc8, 0x0002, + 0x0010, 0xffff, 0x0b79, 0x0002, 0x087e, 0x0882, 0x0002, 0x0010, + 0x0b9b, 0x0b86, 0x0002, 0x0010, 0x0bbd, 0x0bb1, 0x0003, 0x088a, + 0x088d, 0x0891, 0x0001, 0x0000, 0x213b, 0x0002, 0x0010, 0xffff, + 0x0b79, 0x0002, 0x0894, 0x0898, 0x0002, 0x0010, 0x0bca, 0x0bca, + 0x0002, 0x0010, 0x0bdc, 0x0bdc, 0x0003, 0x08a0, 0x08a3, 0x08a7, + 0x0001, 0x0000, 0x213b, 0x0002, 0x0010, 0xffff, 0x0b79, 0x0002, + // Entry 9C40 - 9C7F + 0x08aa, 0x08ae, 0x0002, 0x0010, 0x0be5, 0x0be5, 0x0002, 0x0010, + 0x0bdc, 0x0bdc, 0x0003, 0x08b6, 0x08b9, 0x08bd, 0x0001, 0x0010, + 0x0bf7, 0x0002, 0x0010, 0xffff, 0x0bfd, 0x0002, 0x08c0, 0x08c4, + 0x0002, 0x0010, 0x0c20, 0x0c0a, 0x0002, 0x0010, 0x0c44, 0x0c37, + 0x0003, 0x08cc, 0x08cf, 0x08d3, 0x0001, 0x000b, 0x1250, 0x0002, + 0x0010, 0xffff, 0x0bfd, 0x0002, 0x08d6, 0x08da, 0x0002, 0x0010, + 0x0c52, 0x0c52, 0x0002, 0x0010, 0x0c66, 0x0c66, 0x0003, 0x08e2, + 0x08e5, 0x08e9, 0x0001, 0x000b, 0x1250, 0x0002, 0x0010, 0xffff, + // Entry 9C80 - 9CBF + 0x0bfd, 0x0002, 0x08ec, 0x08f0, 0x0002, 0x0010, 0x0c52, 0x0c52, + 0x0002, 0x0010, 0x0c66, 0x0c66, 0x0003, 0x08f8, 0x08fb, 0x08ff, + 0x0001, 0x0010, 0x0c71, 0x0002, 0x000a, 0xffff, 0x00ab, 0x0002, + 0x0902, 0x0906, 0x0002, 0x0010, 0x0c8d, 0x0c77, 0x0002, 0x0010, + 0x0cb1, 0x0ca4, 0x0003, 0x090e, 0x0911, 0x0915, 0x0001, 0x0000, + 0x2002, 0x0002, 0x000a, 0xffff, 0x00ab, 0x0002, 0x0918, 0x091c, + 0x0002, 0x0010, 0x0cbf, 0x0cbf, 0x0002, 0x0010, 0x0cd1, 0x0cd1, + 0x0003, 0x0924, 0x0927, 0x092b, 0x0001, 0x0000, 0x2002, 0x0002, + // Entry 9CC0 - 9CFF + 0x000a, 0xffff, 0x00ab, 0x0002, 0x092e, 0x0932, 0x0002, 0x0010, + 0x0cbf, 0x0cbf, 0x0002, 0x0010, 0x0cd1, 0x0cd1, 0x0001, 0x0938, + 0x0001, 0x0010, 0x0cda, 0x0001, 0x093d, 0x0001, 0x0010, 0x0cda, + 0x0001, 0x0942, 0x0001, 0x0010, 0x0cda, 0x0004, 0x094a, 0x094f, + 0x0954, 0x0963, 0x0003, 0x0000, 0x1dc7, 0x2229, 0x2230, 0x0003, + 0x0010, 0x0ce5, 0x0cf2, 0x0d08, 0x0002, 0x0000, 0x0957, 0x0003, + 0x0000, 0x095e, 0x095b, 0x0001, 0x0010, 0x0d1d, 0x0003, 0x0010, + 0xffff, 0x0d37, 0x0d51, 0x0002, 0x0b47, 0x0966, 0x0003, 0x0a09, + // Entry 9D00 - 9D3F + 0x0aa8, 0x096a, 0x009d, 0x0010, 0x0d6d, 0x0d84, 0x0da0, 0x0dbd, + 0x0e03, 0x0e66, 0x0eb0, 0x0f12, 0x0f91, 0x1015, 0x108a, 0x10d3, + 0x1118, 0x1154, 0x1195, 0x11f8, 0x1263, 0x12b2, 0x130f, 0x1382, + 0x1400, 0x146e, 0x14d6, 0x1529, 0x157a, 0x15b7, 0x15c6, 0x15e9, + 0x1622, 0x164d, 0x1684, 0x16a5, 0x16e7, 0x1726, 0x176e, 0x17a9, + 0x17bc, 0x17e6, 0x1836, 0x1889, 0x18b8, 0x18c6, 0x18e1, 0x1913, + 0x195e, 0x198d, 0x19f3, 0x1a3e, 0x1a7c, 0x1ae4, 0x1b3c, 0x1b6b, + 0x1b87, 0x1bad, 0x1bc0, 0x1be1, 0x1c18, 0x1c32, 0x1c70, 0x1ce3, + // Entry 9D40 - 9D7F + 0x1d38, 0x1d46, 0x1d6f, 0x1dca, 0x1e10, 0x1e3f, 0x1e5d, 0x1e76, + 0x1e88, 0x1ea4, 0x1ec3, 0x1ef1, 0x1f33, 0x1f7a, 0x1fbe, 0x2003, + 0x2060, 0x207f, 0x20ad, 0x20de, 0x2101, 0x213e, 0x2154, 0x217b, + 0x21f5, 0x2217, 0x224c, 0x225e, 0x2273, 0x2289, 0x22b4, 0x22e9, + 0x2315, 0x2380, 0x23e1, 0x242d, 0x2460, 0x2470, 0x247e, 0x24a5, + 0x24ff, 0x2550, 0x2589, 0x2596, 0x25cc, 0x262d, 0x2678, 0x26bb, + 0x26f4, 0x2702, 0x272e, 0x2776, 0x27bb, 0x27f4, 0x282e, 0x2883, + 0x2894, 0x28a3, 0x28b5, 0x28c5, 0x28e6, 0x292c, 0x296d, 0x299e, + // Entry 9D80 - 9DBF + 0x29b5, 0x29c6, 0x29d6, 0x29ef, 0x29ff, 0x2a0d, 0x2a2c, 0x2a5f, + 0x2a74, 0x2a92, 0x2ac3, 0x2ae7, 0x2b28, 0x2b4b, 0x2b9f, 0x2bf1, + 0x2c24, 0x2c4b, 0x2c9a, 0x2cd3, 0x2ce2, 0x2cef, 0x2d17, 0x2d62, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x21c4, 0x009d, 0x0010, 0xffff, 0xffff, 0xffff, 0xffff, 0x0de4, + 0x0e56, 0x0e9b, 0x0eef, 0x0f6d, 0x0fee, 0x1078, 0x10c3, 0x110a, + 0x1149, 0x117f, 0x11d6, 0x1251, 0x129c, 0x12f3, 0x135c, 0x13e3, + 0x144f, 0x14c1, 0x1515, 0x1566, 0xffff, 0xffff, 0x15d7, 0xffff, + // Entry 9DC0 - 9DFF + 0x163c, 0xffff, 0x1695, 0x16da, 0x1716, 0x175b, 0xffff, 0xffff, + 0x17d4, 0x181f, 0x187c, 0xffff, 0xffff, 0xffff, 0x18f8, 0xffff, + 0x1972, 0x19d8, 0xffff, 0x1a60, 0x1ac9, 0x1b2f, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1bd0, 0xffff, 0xffff, 0x1c51, 0x1cc3, 0xffff, + 0xffff, 0x1d55, 0x1db8, 0x1e03, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1ee3, 0x1f22, 0x1f6a, 0x1faf, 0x1ff1, 0xffff, + 0xffff, 0x209f, 0xffff, 0x20ed, 0xffff, 0xffff, 0x2169, 0xffff, + 0x2207, 0xffff, 0xffff, 0xffff, 0xffff, 0x22a4, 0xffff, 0x22f8, + // Entry 9E00 - 9E3F + 0x2364, 0x23cd, 0x241e, 0xffff, 0xffff, 0xffff, 0x248d, 0x24ea, + 0x253e, 0xffff, 0xffff, 0x25b0, 0x2619, 0x266a, 0x26a9, 0xffff, + 0xffff, 0x271c, 0x2767, 0x27a9, 0xffff, 0x280e, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x28d5, 0x291d, 0x295f, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2a1d, 0xffff, 0xffff, + 0x2a84, 0xffff, 0x2ad1, 0xffff, 0x2b37, 0x2b88, 0x2be2, 0xffff, + 0x2c37, 0x2c88, 0xffff, 0xffff, 0xffff, 0x2d07, 0x2d4c, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x21b6, + // Entry 9E40 - 9E7F + 0x009d, 0x0010, 0xffff, 0xffff, 0xffff, 0xffff, 0x0e2d, 0x0e81, + 0x0ed0, 0x0f40, 0x0fc0, 0x1047, 0x10a7, 0x10ee, 0x1131, 0x116a, + 0x11b6, 0x1225, 0x1280, 0x12d3, 0x1336, 0x13b3, 0x1428, 0x1498, + 0x14f6, 0x1548, 0x1599, 0xffff, 0xffff, 0x1606, 0xffff, 0x1669, + 0xffff, 0x16c0, 0x16ff, 0x1741, 0x178c, 0xffff, 0xffff, 0x1803, + 0x1858, 0x18a1, 0xffff, 0xffff, 0xffff, 0x1939, 0xffff, 0x19b3, + 0x1a19, 0xffff, 0x1aa3, 0x1b0a, 0x1b54, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1bfd, 0xffff, 0xffff, 0x1c9a, 0x1d0e, 0xffff, 0xffff, + // Entry 9E80 - 9EBF + 0x1d94, 0x1de7, 0x1e28, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1f0a, 0x1f4f, 0x1f95, 0x1fd8, 0x2031, 0xffff, 0xffff, + 0x20c6, 0xffff, 0x2120, 0xffff, 0xffff, 0x2198, 0xffff, 0x2232, + 0xffff, 0xffff, 0xffff, 0xffff, 0x22cf, 0xffff, 0x233d, 0x23a7, + 0x2400, 0x2447, 0xffff, 0xffff, 0xffff, 0x24c8, 0x251f, 0x256d, + 0xffff, 0xffff, 0x25f3, 0x264c, 0x2691, 0x26d8, 0xffff, 0xffff, + 0x274b, 0x2790, 0x27d8, 0xffff, 0x2859, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2902, 0x2946, 0x2986, 0xffff, 0xffff, 0xffff, + // Entry 9EC0 - 9EFF + 0xffff, 0xffff, 0xffff, 0xffff, 0x2a46, 0xffff, 0xffff, 0x2aab, + 0xffff, 0x2b08, 0xffff, 0x2b6a, 0x2bc1, 0x2c0b, 0xffff, 0x2c6a, + 0x2cb7, 0xffff, 0xffff, 0xffff, 0x2d32, 0x2d83, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x21dd, 0x0003, + 0x0b4b, 0x0bba, 0x0b7e, 0x0031, 0x0007, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 9F00 - 9F3F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0045, 0x004e, 0xffff, 0x0057, 0x003a, 0x0007, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 9F40 - 9F7F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0045, 0x004e, 0xffff, + 0x0057, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2472, 0x0031, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 9F80 - 9FBF + 0xffff, 0x0049, 0x0052, 0xffff, 0x005b, 0x0003, 0x0004, 0x02b1, + 0x06b9, 0x000b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0010, 0x003b, 0x0000, 0x0247, 0x027c, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0019, 0x0000, 0x002a, 0x0004, 0x0027, + 0x0021, 0x001e, 0x0024, 0x0001, 0x000a, 0x042e, 0x0001, 0x000a, + 0x0440, 0x0001, 0x0002, 0x0044, 0x0001, 0x0002, 0x004f, 0x0004, + 0x0038, 0x0032, 0x002f, 0x0035, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + // Entry 9FC0 - 9FFF + 0x0008, 0x0044, 0x00a9, 0x00ea, 0x011f, 0x01fc, 0x0214, 0x0225, + 0x0236, 0x0002, 0x0047, 0x0078, 0x0003, 0x004b, 0x005a, 0x0069, + 0x000d, 0x0011, 0xffff, 0x0000, 0x000d, 0x001e, 0x0033, 0x0054, + 0x005d, 0x006e, 0x007f, 0x009c, 0x00cd, 0x00f6, 0x011f, 0x000d, + 0x0011, 0xffff, 0x0144, 0x0149, 0x0152, 0x0157, 0x0054, 0x005d, + 0x0160, 0x0169, 0x016e, 0x0177, 0x0180, 0x0189, 0x000d, 0x0011, + 0xffff, 0x0192, 0x01ab, 0x001e, 0x0033, 0x0054, 0x005d, 0x006e, + 0x007f, 0x009c, 0x01d8, 0x00f6, 0x0201, 0x0003, 0x007c, 0x008b, + // Entry A000 - A03F + 0x009a, 0x000d, 0x0011, 0xffff, 0x0192, 0x01ab, 0x001e, 0x0033, + 0x0054, 0x005d, 0x006e, 0x007f, 0x009c, 0x00cd, 0x00f6, 0x0201, + 0x000d, 0x0011, 0xffff, 0x0144, 0x0149, 0x0152, 0x0157, 0x0054, + 0x005d, 0x0160, 0x0169, 0x016e, 0x0177, 0x0180, 0x0189, 0x000d, + 0x0011, 0xffff, 0x0192, 0x01ab, 0x001e, 0x0033, 0x0054, 0x005d, + 0x006e, 0x007f, 0x009c, 0x00cd, 0x00f6, 0x0201, 0x0002, 0x00ac, + 0x00cb, 0x0003, 0x00b0, 0x00b9, 0x00c2, 0x0007, 0x0011, 0x022a, + 0x023b, 0x024c, 0x0269, 0x027a, 0x029b, 0x02bc, 0x0007, 0x0011, + // Entry A040 - A07F + 0x02cd, 0x02d6, 0x02df, 0x02e8, 0x02f1, 0x0302, 0x02d6, 0x0007, + 0x0011, 0x030b, 0x0328, 0x0345, 0x036e, 0x038b, 0x03b8, 0x03e5, + 0x0003, 0x00cf, 0x00d8, 0x00e1, 0x0007, 0x0011, 0x022a, 0x023b, + 0x024c, 0x0269, 0x027a, 0x029b, 0x02bc, 0x0007, 0x0011, 0x02cd, + 0x02d6, 0x02df, 0x02e8, 0x02f1, 0x0302, 0x02d6, 0x0007, 0x0011, + 0x030b, 0x0328, 0x0345, 0x036e, 0x038b, 0x03b8, 0x03e5, 0x0002, + 0x00ed, 0x0106, 0x0003, 0x00f1, 0x00f8, 0x00ff, 0x0005, 0x0000, + 0xffff, 0x04e3, 0x04e6, 0x04e9, 0x04ec, 0x0005, 0x0011, 0xffff, + // Entry A080 - A0BF + 0x0402, 0x0407, 0x040c, 0x0411, 0x0005, 0x0011, 0xffff, 0x0416, + 0x043b, 0x0486, 0x04d9, 0x0003, 0x010a, 0x0111, 0x0118, 0x0005, + 0x0000, 0xffff, 0x04e3, 0x04e6, 0x04e9, 0x04ec, 0x0005, 0x0011, + 0xffff, 0x0402, 0x0407, 0x040c, 0x0411, 0x0005, 0x0011, 0xffff, + 0x0416, 0x043b, 0x0486, 0x04d9, 0x0002, 0x0122, 0x018f, 0x0003, + 0x0126, 0x0149, 0x016c, 0x000a, 0x0131, 0x0134, 0x0000, 0x0137, + 0x013d, 0x0143, 0x0146, 0x0000, 0x013a, 0x0140, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0001, 0x0011, 0x0534, 0x0001, + // Entry A0C0 - A0FF + 0x0011, 0x0565, 0x0001, 0x0011, 0x057e, 0x0001, 0x0011, 0x059b, + 0x0001, 0x0011, 0x05b4, 0x0001, 0x0011, 0x05cd, 0x000a, 0x0154, + 0x0157, 0x0000, 0x015a, 0x0160, 0x0166, 0x0169, 0x0000, 0x015d, + 0x0163, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0001, + 0x0011, 0x0534, 0x0001, 0x0011, 0x0565, 0x0001, 0x0011, 0x057e, + 0x0001, 0x0011, 0x059b, 0x0001, 0x0011, 0x05b4, 0x0001, 0x0011, + 0x05cd, 0x000a, 0x0177, 0x017a, 0x0000, 0x017d, 0x0183, 0x0189, + 0x018c, 0x0000, 0x0180, 0x0186, 0x0001, 0x0000, 0x04ef, 0x0001, + // Entry A100 - A13F + 0x0000, 0x04f2, 0x0001, 0x0011, 0x0534, 0x0001, 0x0011, 0x0565, + 0x0001, 0x0011, 0x057e, 0x0001, 0x0011, 0x059b, 0x0001, 0x0011, + 0x05b4, 0x0001, 0x0011, 0x05cd, 0x0003, 0x0193, 0x01b6, 0x01d9, + 0x000a, 0x019e, 0x01a1, 0x0000, 0x01a4, 0x01aa, 0x01b0, 0x01b3, + 0x0000, 0x01a7, 0x01ad, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, + 0x04f2, 0x0001, 0x0011, 0x0534, 0x0001, 0x0011, 0x0565, 0x0001, + 0x0011, 0x057e, 0x0001, 0x0011, 0x059b, 0x0001, 0x0011, 0x05b4, + 0x0001, 0x0011, 0x05cd, 0x000a, 0x01c1, 0x01c4, 0x0000, 0x01c7, + // Entry A140 - A17F + 0x01cd, 0x01d3, 0x01d6, 0x0000, 0x01ca, 0x01d0, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0001, 0x0011, 0x0534, 0x0001, + 0x0011, 0x0565, 0x0001, 0x0011, 0x057e, 0x0001, 0x0011, 0x059b, + 0x0001, 0x0011, 0x05b4, 0x0001, 0x0011, 0x05cd, 0x000a, 0x01e4, + 0x01e7, 0x0000, 0x01ea, 0x01f0, 0x01f6, 0x01f9, 0x0000, 0x01ed, + 0x01f3, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0001, + 0x0011, 0x0534, 0x0001, 0x0011, 0x0565, 0x0001, 0x0011, 0x057e, + 0x0001, 0x0011, 0x059b, 0x0001, 0x0011, 0x05b4, 0x0001, 0x0011, + // Entry A180 - A1BF + 0x05cd, 0x0003, 0x020a, 0x0000, 0x0200, 0x0002, 0x0203, 0x0207, + 0x0002, 0x0011, 0x05de, 0x065c, 0x0001, 0x0011, 0x0617, 0x0002, + 0x020d, 0x0211, 0x0002, 0x0011, 0x05de, 0x065c, 0x0001, 0x0011, + 0x0689, 0x0004, 0x0222, 0x021c, 0x0219, 0x021f, 0x0001, 0x0005, + 0x0615, 0x0001, 0x0005, 0x0625, 0x0001, 0x0002, 0x0282, 0x0001, + 0x0006, 0x0d7c, 0x0004, 0x0233, 0x022d, 0x022a, 0x0230, 0x0001, + 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, 0x0002, 0x04fe, + 0x0001, 0x0002, 0x0508, 0x0004, 0x0244, 0x023e, 0x023b, 0x0241, + // Entry A1C0 - A1FF + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0005, 0x024d, 0x0000, 0x0000, + 0x0000, 0x0275, 0x0002, 0x0250, 0x0263, 0x0003, 0x0000, 0x0000, + 0x0254, 0x000d, 0x0011, 0xffff, 0x06ce, 0x06df, 0x06f8, 0x0711, + 0x0722, 0x0737, 0x0744, 0x0759, 0x0766, 0x077b, 0x078c, 0x0799, + 0x0002, 0x0000, 0x0266, 0x000d, 0x0011, 0xffff, 0x0402, 0x0407, + 0x040c, 0x0411, 0x07ae, 0x07b3, 0x07b8, 0x07bd, 0x07c2, 0x07c7, + 0x07d0, 0x07d9, 0x0001, 0x0277, 0x0001, 0x0279, 0x0001, 0x0011, + // Entry A200 - A23F + 0x07e2, 0x0005, 0x0282, 0x0000, 0x0000, 0x0000, 0x02aa, 0x0002, + 0x0285, 0x0298, 0x0003, 0x0000, 0x0000, 0x0289, 0x000d, 0x0011, + 0xffff, 0x07ef, 0x0810, 0x0825, 0x085b, 0x0885, 0x08bf, 0x08ed, + 0x0906, 0x0923, 0x0940, 0x0951, 0x0972, 0x0002, 0x0000, 0x029b, + 0x000d, 0x0011, 0xffff, 0x0402, 0x0407, 0x040c, 0x0411, 0x07ae, + 0x07b3, 0x07b8, 0x07bd, 0x07c2, 0x07c7, 0x07d0, 0x07d9, 0x0001, + 0x02ac, 0x0001, 0x02ae, 0x0001, 0x0011, 0x099b, 0x0040, 0x02f2, + 0x0000, 0x0000, 0x02f7, 0x030e, 0x0325, 0x033c, 0x0353, 0x0365, + // Entry A240 - A27F + 0x0377, 0x038e, 0x03a5, 0x03bc, 0x03d7, 0x03f2, 0x0000, 0x0000, + 0x0000, 0x040d, 0x0426, 0x043f, 0x0000, 0x0000, 0x0000, 0x0458, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x045d, 0x0471, 0x0485, + 0x0499, 0x04ad, 0x04c1, 0x04d5, 0x04e9, 0x04fd, 0x0511, 0x0525, + 0x0539, 0x054d, 0x0561, 0x0575, 0x0589, 0x059d, 0x05b1, 0x05c5, + 0x05d9, 0x05ed, 0x0000, 0x0601, 0x0000, 0x0606, 0x061c, 0x062e, + 0x0640, 0x0656, 0x0668, 0x067a, 0x0690, 0x06a2, 0x06b4, 0x0001, + 0x02f4, 0x0001, 0x0011, 0x099b, 0x0003, 0x02fb, 0x02fe, 0x0303, + // Entry A280 - A2BF + 0x0001, 0x0011, 0x09ac, 0x0003, 0x0011, 0x09c5, 0x09f7, 0x0a19, + 0x0002, 0x0306, 0x030a, 0x0002, 0x0011, 0x0a43, 0x0a43, 0x0002, + 0x0011, 0x0a60, 0x0a60, 0x0003, 0x0312, 0x0315, 0x031a, 0x0001, + 0x0011, 0x09ac, 0x0003, 0x0011, 0x09c5, 0x0a8a, 0x0ab4, 0x0002, + 0x031d, 0x0321, 0x0002, 0x0011, 0x0a43, 0x0a43, 0x0002, 0x0011, + 0x0a60, 0x0a60, 0x0003, 0x0329, 0x032c, 0x0331, 0x0001, 0x0011, + 0x09ac, 0x0003, 0x0011, 0x09c5, 0x0a8a, 0x0ab4, 0x0002, 0x0334, + 0x0338, 0x0002, 0x0011, 0x0a43, 0x0a43, 0x0002, 0x0011, 0x0a60, + // Entry A2C0 - A2FF + 0x0a60, 0x0003, 0x0340, 0x0343, 0x0348, 0x0001, 0x0011, 0x0ade, + 0x0003, 0x0011, 0x0b03, 0x0b41, 0x0b77, 0x0002, 0x034b, 0x034f, + 0x0002, 0x0011, 0x0bce, 0x0bad, 0x0002, 0x0011, 0x0beb, 0x0beb, + 0x0003, 0x0357, 0x0000, 0x035a, 0x0001, 0x0011, 0x0ade, 0x0002, + 0x035d, 0x0361, 0x0002, 0x0011, 0x0bad, 0x0bad, 0x0002, 0x0011, + 0x0c21, 0x0beb, 0x0003, 0x0369, 0x0000, 0x036c, 0x0001, 0x0011, + 0x0ade, 0x0002, 0x036f, 0x0373, 0x0002, 0x0011, 0x0bad, 0x0bad, + 0x0002, 0x0011, 0x0c56, 0x0beb, 0x0003, 0x037b, 0x037e, 0x0383, + // Entry A300 - A33F + 0x0001, 0x0011, 0x0c8c, 0x0003, 0x0011, 0x0c99, 0x0cbf, 0x0cdd, + 0x0002, 0x0386, 0x038a, 0x0002, 0x0011, 0x0cfb, 0x0cfb, 0x0002, + 0x0011, 0x0d0c, 0x0d0c, 0x0003, 0x0392, 0x0395, 0x039a, 0x0001, + 0x0011, 0x0c8c, 0x0003, 0x0011, 0x0d2a, 0x0cbf, 0x0cdd, 0x0002, + 0x039d, 0x03a1, 0x0002, 0x0011, 0x0cfb, 0x0cfb, 0x0002, 0x0011, + 0x0d0c, 0x0d50, 0x0003, 0x03a9, 0x03ac, 0x03b1, 0x0001, 0x0011, + 0x0c8c, 0x0003, 0x0011, 0x0c99, 0x0cbf, 0x0cdd, 0x0002, 0x03b4, + 0x03b8, 0x0002, 0x0011, 0x0cfb, 0x0cfb, 0x0002, 0x0011, 0x0d0c, + // Entry A340 - A37F + 0x0d0c, 0x0004, 0x03c1, 0x03c4, 0x03c9, 0x03d4, 0x0001, 0x0011, + 0x0d6e, 0x0003, 0x0011, 0x0d7f, 0x0da9, 0x0dcb, 0x0002, 0x03cc, + 0x03d0, 0x0002, 0x0011, 0x0ded, 0x0ded, 0x0002, 0x0011, 0x0e0a, + 0x0e0a, 0x0001, 0x0011, 0x0e2c, 0x0004, 0x03dc, 0x03df, 0x03e4, + 0x03ef, 0x0001, 0x0011, 0x0d6e, 0x0003, 0x0011, 0x0d7f, 0x0da9, + 0x0dcb, 0x0002, 0x03e7, 0x03eb, 0x0002, 0x0011, 0x0ded, 0x0ded, + 0x0002, 0x0011, 0x0e0a, 0x0e0a, 0x0001, 0x0011, 0x0e41, 0x0004, + 0x03f7, 0x03fa, 0x03ff, 0x040a, 0x0001, 0x0011, 0x0d6e, 0x0003, + // Entry A380 - A3BF + 0x0011, 0x0d7f, 0x0da9, 0x0dcb, 0x0002, 0x0402, 0x0406, 0x0002, + 0x0011, 0x0ded, 0x0ded, 0x0002, 0x0011, 0x0e6f, 0x0e6f, 0x0001, + 0x0011, 0x0e41, 0x0003, 0x0411, 0x0414, 0x041b, 0x0001, 0x0011, + 0x0e99, 0x0005, 0x0011, 0x0edc, 0x0f11, 0x0f2e, 0x0eaa, 0x0f6b, + 0x0002, 0x041e, 0x0422, 0x0002, 0x0011, 0x0fad, 0x0fad, 0x0002, + 0x0011, 0x0fdf, 0x0fdf, 0x0003, 0x042a, 0x042d, 0x0434, 0x0001, + 0x0011, 0x0e99, 0x0005, 0x0011, 0x1001, 0x103e, 0x105f, 0x0eaa, + 0x10a4, 0x0002, 0x0437, 0x043b, 0x0002, 0x0011, 0x0fad, 0x0fad, + // Entry A3C0 - A3FF + 0x0002, 0x0011, 0x0fdf, 0x0fdf, 0x0003, 0x0443, 0x0446, 0x044d, + 0x0001, 0x0011, 0x0e99, 0x0005, 0x0011, 0x1001, 0x103e, 0x105f, + 0x0eaa, 0x10a4, 0x0002, 0x0450, 0x0454, 0x0002, 0x0011, 0x0fad, + 0x0fad, 0x0002, 0x0011, 0x0fdf, 0x0fdf, 0x0001, 0x045a, 0x0001, + 0x0011, 0x1102, 0x0003, 0x0000, 0x0461, 0x0466, 0x0003, 0x0011, + 0x112c, 0x1162, 0x1190, 0x0002, 0x0469, 0x046d, 0x0002, 0x0011, + 0x11be, 0x11be, 0x0002, 0x0011, 0x11e7, 0x11e7, 0x0003, 0x0000, + 0x0475, 0x047a, 0x0003, 0x0011, 0x112c, 0x1162, 0x1190, 0x0002, + // Entry A400 - A43F + 0x047d, 0x0481, 0x0002, 0x0011, 0x11be, 0x11be, 0x0002, 0x0011, + 0x11e7, 0x11e7, 0x0003, 0x0000, 0x0489, 0x048e, 0x0003, 0x0011, + 0x112c, 0x1162, 0x1190, 0x0002, 0x0491, 0x0495, 0x0002, 0x0011, + 0x11be, 0x11be, 0x0002, 0x0011, 0x11e7, 0x11e7, 0x0003, 0x0000, + 0x049d, 0x04a2, 0x0003, 0x0011, 0x1215, 0x124b, 0x1279, 0x0002, + 0x04a5, 0x04a9, 0x0002, 0x0011, 0x12a7, 0x12a7, 0x0002, 0x0011, + 0x12d0, 0x12a7, 0x0003, 0x0000, 0x04b1, 0x04b6, 0x0003, 0x0011, + 0x1215, 0x124b, 0x1279, 0x0002, 0x04b9, 0x04bd, 0x0002, 0x0011, + // Entry A440 - A47F + 0x12a7, 0x12a7, 0x0002, 0x0011, 0x12d0, 0x12d0, 0x0003, 0x0000, + 0x04c5, 0x04ca, 0x0003, 0x0011, 0x1215, 0x124b, 0x1279, 0x0002, + 0x04cd, 0x04d1, 0x0002, 0x0011, 0x12a7, 0x12a7, 0x0002, 0x0011, + 0x12d0, 0x12d0, 0x0003, 0x0000, 0x04d9, 0x04de, 0x0003, 0x0011, + 0x12fe, 0x1340, 0x137a, 0x0002, 0x04e1, 0x04e5, 0x0002, 0x0011, + 0x13b4, 0x13b4, 0x0002, 0x0011, 0x13e9, 0x13e9, 0x0003, 0x0000, + 0x04ed, 0x04f2, 0x0003, 0x0011, 0x12fe, 0x1340, 0x137a, 0x0002, + 0x04f5, 0x04f9, 0x0002, 0x0011, 0x13b4, 0x13b4, 0x0002, 0x0011, + // Entry A480 - A4BF + 0x13e9, 0x13e9, 0x0003, 0x0000, 0x0501, 0x0506, 0x0003, 0x0011, + 0x12fe, 0x1340, 0x137a, 0x0002, 0x0509, 0x050d, 0x0002, 0x0011, + 0x13b4, 0x13b4, 0x0002, 0x0011, 0x13e9, 0x13e9, 0x0003, 0x0000, + 0x0515, 0x051a, 0x0003, 0x0011, 0x1423, 0x1459, 0x1487, 0x0002, + 0x051d, 0x0521, 0x0002, 0x0011, 0x14b5, 0x14b5, 0x0002, 0x0011, + 0x14de, 0x14de, 0x0003, 0x0000, 0x0529, 0x052e, 0x0003, 0x0011, + 0x1423, 0x1459, 0x1487, 0x0002, 0x0531, 0x0535, 0x0002, 0x0011, + 0x14b5, 0x14b5, 0x0002, 0x0011, 0x14de, 0x14de, 0x0003, 0x0000, + // Entry A4C0 - A4FF + 0x053d, 0x0542, 0x0003, 0x0011, 0x1423, 0x1459, 0x1487, 0x0002, + 0x0545, 0x0549, 0x0002, 0x0011, 0x14b5, 0x14b5, 0x0002, 0x0011, + 0x14de, 0x14de, 0x0003, 0x0000, 0x0551, 0x0556, 0x0003, 0x0011, + 0x150c, 0x154a, 0x1580, 0x0002, 0x0559, 0x055d, 0x0002, 0x0011, + 0x15b6, 0x15b6, 0x0002, 0x0011, 0x15df, 0x15df, 0x0003, 0x0000, + 0x0565, 0x056a, 0x0003, 0x0011, 0x150c, 0x154a, 0x1580, 0x0002, + 0x056d, 0x0571, 0x0002, 0x0011, 0x15b6, 0x15b6, 0x0002, 0x0011, + 0x15df, 0x15df, 0x0003, 0x0000, 0x0579, 0x057e, 0x0003, 0x0011, + // Entry A500 - A53F + 0x150c, 0x154a, 0x1580, 0x0002, 0x0581, 0x0585, 0x0002, 0x0011, + 0x15b6, 0x15b6, 0x0002, 0x0011, 0x15df, 0x1615, 0x0003, 0x0000, + 0x058d, 0x0592, 0x0003, 0x0011, 0x164f, 0x1695, 0x16d3, 0x0002, + 0x0595, 0x0599, 0x0002, 0x0011, 0x1711, 0x1711, 0x0002, 0x0011, + 0x1742, 0x1742, 0x0003, 0x0000, 0x05a1, 0x05a6, 0x0003, 0x0011, + 0x164f, 0x1695, 0x16d3, 0x0002, 0x05a9, 0x05ad, 0x0002, 0x0011, + 0x1780, 0x1711, 0x0002, 0x0011, 0x1742, 0x1742, 0x0003, 0x0000, + 0x05b5, 0x05ba, 0x0003, 0x0011, 0x164f, 0x1695, 0x16d3, 0x0002, + // Entry A540 - A57F + 0x05bd, 0x05c1, 0x0002, 0x0011, 0x1780, 0x1780, 0x0002, 0x0011, + 0x1742, 0x1742, 0x0003, 0x0000, 0x05c9, 0x05ce, 0x0003, 0x0011, + 0x17b9, 0x17ef, 0x181d, 0x0002, 0x05d1, 0x05d5, 0x0002, 0x0011, + 0x184b, 0x184b, 0x0002, 0x0011, 0x186c, 0x186c, 0x0003, 0x0000, + 0x05dd, 0x05e2, 0x0003, 0x0011, 0x17b9, 0x17ef, 0x181d, 0x0002, + 0x05e5, 0x05e9, 0x0002, 0x0011, 0x189a, 0x189a, 0x0002, 0x0011, + 0x186c, 0x186c, 0x0003, 0x0000, 0x05f1, 0x05f6, 0x0003, 0x0011, + 0x17b9, 0x17ef, 0x181d, 0x0002, 0x05f9, 0x05fd, 0x0002, 0x0011, + // Entry A580 - A5BF + 0x189a, 0x189a, 0x0002, 0x0011, 0x186c, 0x186c, 0x0001, 0x0603, + 0x0001, 0x0007, 0x0892, 0x0003, 0x060a, 0x060d, 0x0611, 0x0001, + 0x0011, 0x18c3, 0x0002, 0x0011, 0xffff, 0x18d8, 0x0002, 0x0614, + 0x0618, 0x0002, 0x0011, 0x1906, 0x1906, 0x0002, 0x0011, 0x1927, + 0x1927, 0x0003, 0x0620, 0x0000, 0x0623, 0x0001, 0x0011, 0x18c3, + 0x0002, 0x0626, 0x062a, 0x0002, 0x0011, 0x1906, 0x1906, 0x0002, + 0x0011, 0x1927, 0x1927, 0x0003, 0x0632, 0x0000, 0x0635, 0x0001, + 0x0011, 0x18c3, 0x0002, 0x0638, 0x063c, 0x0002, 0x0011, 0x1906, + // Entry A5C0 - A5FF + 0x1906, 0x0002, 0x0011, 0x1927, 0x1927, 0x0003, 0x0644, 0x0647, + 0x064b, 0x0001, 0x0011, 0x194d, 0x0002, 0x0011, 0xffff, 0x1966, + 0x0002, 0x064e, 0x0652, 0x0002, 0x0011, 0x1990, 0x1990, 0x0002, + 0x0011, 0x19ad, 0x19ad, 0x0003, 0x065a, 0x0000, 0x065d, 0x0001, + 0x0011, 0x194d, 0x0002, 0x0660, 0x0664, 0x0002, 0x0011, 0x1990, + 0x1990, 0x0002, 0x0011, 0x19ad, 0x19ad, 0x0003, 0x066c, 0x0000, + 0x066f, 0x0001, 0x0011, 0x194d, 0x0002, 0x0672, 0x0676, 0x0002, + 0x0011, 0x1990, 0x1990, 0x0002, 0x0011, 0x19ad, 0x19ad, 0x0003, + // Entry A600 - A63F + 0x067e, 0x0681, 0x0685, 0x0001, 0x0011, 0x19d7, 0x0002, 0x0011, + 0xffff, 0x19f0, 0x0002, 0x0688, 0x068c, 0x0002, 0x0011, 0x1a0d, + 0x1a0d, 0x0002, 0x0011, 0x1a32, 0x1a32, 0x0003, 0x0694, 0x0000, + 0x0697, 0x0001, 0x0011, 0x19d7, 0x0002, 0x069a, 0x069e, 0x0002, + 0x0011, 0x1a0d, 0x1a0d, 0x0002, 0x0011, 0x1a32, 0x1a32, 0x0003, + 0x06a6, 0x0000, 0x06a9, 0x0001, 0x0011, 0x19d7, 0x0002, 0x06ac, + 0x06b0, 0x0002, 0x0011, 0x1a0d, 0x1a5c, 0x0002, 0x0011, 0x1a32, + 0x1a32, 0x0001, 0x06b6, 0x0001, 0x0011, 0x1a79, 0x0004, 0x06be, + // Entry A640 - A67F + 0x06c3, 0x06c8, 0x06d7, 0x0003, 0x0000, 0x1dc7, 0x2234, 0x223c, + 0x0003, 0x0011, 0x1aa3, 0x1ac0, 0x1b0a, 0x0002, 0x0000, 0x06cb, + 0x0003, 0x0000, 0x06d2, 0x06cf, 0x0001, 0x0011, 0x1b44, 0x0003, + 0x0011, 0xffff, 0x1b9f, 0x1bf2, 0x0002, 0x08be, 0x06da, 0x0003, + 0x06de, 0x081e, 0x077e, 0x009e, 0x0011, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1e51, 0x1f8c, 0x2118, 0x2200, 0x22f7, 0x2402, 0x2519, + 0x26c7, 0x27b7, 0x2a2b, 0x2aef, 0x2bf7, 0x2d6a, 0x2e5a, 0x2f72, + 0x3120, 0x3331, 0x3494, 0x360f, 0x370b, 0x37fb, 0xffff, 0xffff, + // Entry A680 - A6BF + 0x3943, 0xffff, 0x3a8e, 0xffff, 0x3bd0, 0x3ca0, 0x3d60, 0x3e18, + 0xffff, 0xffff, 0x3ffa, 0x40f6, 0x4288, 0xffff, 0xffff, 0xffff, + 0x443d, 0xffff, 0x45cc, 0x472b, 0xffff, 0x490a, 0x4a71, 0x4c36, + 0xffff, 0xffff, 0xffff, 0xffff, 0x4e2a, 0xffff, 0xffff, 0x4fba, + 0x5131, 0xffff, 0xffff, 0x5380, 0x54b7, 0x5592, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x5890, 0x5954, 0x5a74, 0x5b64, + 0x5c1c, 0xffff, 0xffff, 0x5f13, 0xffff, 0x6029, 0xffff, 0xffff, + 0x6236, 0xffff, 0x6442, 0xffff, 0xffff, 0xffff, 0xffff, 0x663d, + // Entry A6C0 - A6FF + 0xffff, 0x675b, 0x68fd, 0x6adb, 0x6be6, 0xffff, 0xffff, 0xffff, + 0x6d50, 0x6e8b, 0x6faf, 0xffff, 0xffff, 0x719e, 0x738b, 0x74c3, + 0x75b3, 0xffff, 0xffff, 0x7719, 0x7809, 0x78c9, 0xffff, 0x7a2e, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x7de2, 0x7eba, 0x7f66, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x81fd, + 0xffff, 0xffff, 0x833d, 0xffff, 0x8433, 0xffff, 0x85a5, 0x8695, + 0x87a9, 0xffff, 0x88bf, 0x89eb, 0xffff, 0xffff, 0xffff, 0x8bde, + 0x8cda, 0xffff, 0xffff, 0x1c39, 0x2048, 0x286f, 0x2947, 0xffff, + // Entry A700 - A73F + 0xffff, 0x632d, 0x7c7a, 0x009e, 0x0011, 0x1d11, 0x1d57, 0x1da6, + 0x1df1, 0x1ea4, 0x1fba, 0x2152, 0x223f, 0x233a, 0x244d, 0x2599, + 0x2701, 0x27e5, 0x2a59, 0x2b31, 0x2c5a, 0x2da4, 0x2ea4, 0x2fee, + 0x31bd, 0x3394, 0x34ff, 0x364d, 0x3745, 0x3831, 0x38df, 0x390d, + 0x397d, 0x3a33, 0x3acd, 0x3b8d, 0x3c02, 0x3cca, 0x3d8a, 0x3e5e, + 0x3f2c, 0x3f8d, 0x4038, 0x415b, 0x42be, 0x4354, 0x4386, 0x43f2, + 0x4496, 0x458a, 0x462b, 0x4786, 0x487e, 0x4969, 0x4af2, 0x4c60, + 0x4cf6, 0x4d31, 0x4db2, 0x4de8, 0x4e60, 0x4f0e, 0x4f77, 0x5021, + // Entry A740 - A77F + 0x51a0, 0x52fb, 0x5356, 0x53df, 0x54ea, 0x55c4, 0x566a, 0x56b9, + 0x571c, 0x575e, 0x57ca, 0x5829, 0x58be, 0x599e, 0x5aae, 0x5b8e, + 0x5cbb, 0x5e33, 0x5e9f, 0x5f49, 0x5fef, 0x607b, 0x6161, 0x61d1, + 0x6275, 0x63e5, 0x6478, 0x6526, 0x6560, 0x6596, 0x65d0, 0x6673, + 0x6721, 0x67d7, 0x6989, 0x6b1e, 0x6c18, 0x6cbe, 0x6cf4, 0x6d22, + 0x6da3, 0x6ed9, 0x7009, 0x70f7, 0x7129, 0x71fd, 0x73dd, 0x74fd, + 0x75ed, 0x76a3, 0x76cd, 0x7753, 0x7833, 0x7903, 0x79b9, 0x7aa3, + 0x7bc7, 0x7c0d, 0x7c3b, 0x7d6e, 0x7db4, 0x7e14, 0x7ee0, 0x7f90, + // Entry A780 - A7BF + 0x8026, 0x8060, 0x80ab, 0x8120, 0x816f, 0x81a5, 0x81cf, 0x822f, + 0x82cd, 0x8307, 0x836b, 0x8409, 0x8489, 0x8577, 0x85df, 0x86db, + 0x87db, 0x8881, 0x890d, 0x8a31, 0x8b03, 0x8b39, 0x8b8e, 0x8c1c, + 0x8d38, 0x52c0, 0x72fd, 0x1c6b, 0x207a, 0x28a1, 0x297d, 0xffff, + 0x61a7, 0x6357, 0x7cb8, 0x009e, 0x0011, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1f0c, 0x1ffd, 0x21a1, 0x2297, 0x239a, 0x24b5, 0x262e, + 0x2750, 0x2828, 0x2a9c, 0x2b88, 0x2cda, 0x2df3, 0x2f03, 0x307f, + 0x326f, 0x340c, 0x357f, 0x36a0, 0x3794, 0x387c, 0xffff, 0xffff, + // Entry A7C0 - A7FF + 0x39cc, 0xffff, 0x3b21, 0xffff, 0x3c49, 0x3d09, 0x3dc9, 0x3eb9, + 0xffff, 0xffff, 0x408b, 0x41d5, 0x4301, 0xffff, 0xffff, 0xffff, + 0x4504, 0xffff, 0x469f, 0x47f6, 0xffff, 0x49e1, 0x4b88, 0x4c9f, + 0xffff, 0xffff, 0xffff, 0xffff, 0x4eab, 0xffff, 0xffff, 0x509d, + 0x5224, 0xffff, 0xffff, 0x5443, 0x5532, 0x560b, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x5901, 0x59fd, 0x5b01, 0x5bcd, + 0x5d67, 0xffff, 0xffff, 0x5f94, 0xffff, 0x60e2, 0xffff, 0xffff, + 0x62c9, 0xffff, 0x64c3, 0xffff, 0xffff, 0xffff, 0xffff, 0x66be, + // Entry A800 - A83F + 0xffff, 0x6868, 0x6a2a, 0x6b76, 0x6c5f, 0xffff, 0xffff, 0xffff, + 0x6e0b, 0x6f3c, 0x7078, 0xffff, 0xffff, 0x7271, 0x7444, 0x754c, + 0x763c, 0xffff, 0xffff, 0x77a2, 0x7872, 0x7952, 0xffff, 0x7b2d, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x7e5b, 0x7f13, 0x7fcf, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x8276, + 0xffff, 0xffff, 0x83ae, 0xffff, 0x84f4, 0xffff, 0x862e, 0x8736, + 0x8822, 0xffff, 0x8970, 0x8a90, 0xffff, 0xffff, 0xffff, 0x8c6f, + 0x8dab, 0xffff, 0xffff, 0x1cb2, 0x20c1, 0x28e8, 0x29c8, 0xffff, + // Entry A840 - A87F + 0xffff, 0x638e, 0x7d03, 0x0003, 0x0000, 0x0000, 0x08c2, 0x0042, + 0x000b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry A880 - A8BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0000, 0x0003, 0x0004, 0x0124, 0x03e5, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0027, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0016, 0x0004, 0x0024, 0x001e, 0x001b, 0x0021, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0005, 0x002d, 0x0083, 0x00da, 0x0000, 0x010f, + 0x0002, 0x0030, 0x0061, 0x0003, 0x0034, 0x0043, 0x0052, 0x000d, + // Entry A8C0 - A8FF + 0x0012, 0xffff, 0x0000, 0x0007, 0x000e, 0x0015, 0x001c, 0x0023, + 0x002a, 0x0031, 0x0038, 0x003f, 0x0046, 0x004d, 0x000d, 0x0012, + 0xffff, 0x0054, 0x0057, 0x005a, 0x005d, 0x005a, 0x0060, 0x0060, + 0x005d, 0x0063, 0x0066, 0x0069, 0x006c, 0x000d, 0x0012, 0xffff, + 0x006f, 0x007c, 0x008b, 0x0094, 0x001c, 0x00a1, 0x00aa, 0x00b3, + 0x00c0, 0x00d1, 0x00e0, 0x00ed, 0x0003, 0x0000, 0x0065, 0x0074, + 0x000d, 0x0012, 0xffff, 0x0054, 0x0057, 0x005a, 0x005d, 0x005a, + 0x0060, 0x0060, 0x005d, 0x0063, 0x0066, 0x0069, 0x006c, 0x000d, + // Entry A900 - A93F + 0x0012, 0xffff, 0x006f, 0x007c, 0x008b, 0x0094, 0x001c, 0x00a1, + 0x00aa, 0x00b3, 0x00c0, 0x00d1, 0x00e0, 0x00ed, 0x0002, 0x0086, + 0x00b0, 0x0005, 0x008c, 0x0095, 0x00a7, 0x0000, 0x009e, 0x0007, + 0x0012, 0x00fc, 0x0103, 0x0108, 0x010d, 0x0114, 0x0119, 0x0120, + 0x0007, 0x0012, 0x00fc, 0x0103, 0x0108, 0x010d, 0x0114, 0x0119, + 0x0120, 0x0007, 0x0012, 0x00fc, 0x0103, 0x0108, 0x010d, 0x0114, + 0x0119, 0x0120, 0x0007, 0x0012, 0x0127, 0x0132, 0x013d, 0x014a, + 0x0157, 0x0160, 0x0171, 0x0005, 0x00b6, 0x00bf, 0x00d1, 0x0000, + // Entry A940 - A97F + 0x00c8, 0x0007, 0x0012, 0x00fc, 0x0103, 0x0108, 0x010d, 0x0114, + 0x0119, 0x0120, 0x0007, 0x0012, 0x017a, 0x017f, 0x0182, 0x0185, + 0x018a, 0x018d, 0x0182, 0x0007, 0x0012, 0x00fc, 0x0103, 0x0108, + 0x010d, 0x0114, 0x0119, 0x0120, 0x0007, 0x0012, 0x0127, 0x0132, + 0x013d, 0x014a, 0x0157, 0x0160, 0x0171, 0x0002, 0x00dd, 0x00f6, + 0x0003, 0x00e1, 0x00e8, 0x00ef, 0x0005, 0x0012, 0xffff, 0x0192, + 0x01a1, 0x01b0, 0x01bf, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x0039, 0x0005, 0x0012, 0xffff, 0x01ce, 0x01e6, 0x01fe, + // Entry A980 - A9BF + 0x0216, 0x0003, 0x00fa, 0x0101, 0x0108, 0x0005, 0x0012, 0xffff, + 0x0192, 0x01a1, 0x01b0, 0x01bf, 0x0005, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x0039, 0x0005, 0x0012, 0xffff, 0x01ce, 0x01e6, + 0x01fe, 0x0216, 0x0003, 0x011e, 0x0000, 0x0113, 0x0002, 0x0116, + 0x011a, 0x0002, 0x0012, 0x022e, 0x0284, 0x0002, 0x0012, 0x0267, + 0x02c5, 0x0001, 0x0120, 0x0002, 0x0012, 0x02d9, 0x02ea, 0x0040, + 0x0165, 0x0000, 0x0000, 0x016a, 0x0181, 0x0193, 0x01a5, 0x01b7, + 0x01c9, 0x01db, 0x01f2, 0x0204, 0x0216, 0x022d, 0x023f, 0x0000, + // Entry A9C0 - A9FF + 0x0000, 0x0000, 0x0251, 0x0268, 0x027a, 0x0000, 0x0000, 0x0000, + 0x028c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0291, 0x0299, + 0x02a1, 0x02a9, 0x02b1, 0x02b9, 0x02c1, 0x02c9, 0x02d1, 0x02d9, + 0x02e1, 0x02e9, 0x02f1, 0x02f9, 0x0301, 0x0309, 0x0311, 0x0319, + 0x0321, 0x0329, 0x0331, 0x0000, 0x0339, 0x0000, 0x033e, 0x0350, + 0x0362, 0x0374, 0x0386, 0x0398, 0x03aa, 0x03bc, 0x03ce, 0x03e0, + 0x0001, 0x0167, 0x0001, 0x0012, 0x02f1, 0x0003, 0x016e, 0x0171, + 0x0176, 0x0001, 0x0012, 0x02f8, 0x0003, 0x0012, 0x02fd, 0x0319, + // Entry AA00 - AA3F + 0x0335, 0x0002, 0x0179, 0x017d, 0x0002, 0x0012, 0x0353, 0x0353, + 0x0002, 0x0012, 0x0369, 0x0369, 0x0003, 0x0185, 0x0000, 0x0188, + 0x0001, 0x0012, 0x037f, 0x0002, 0x018b, 0x018f, 0x0002, 0x0012, + 0x0383, 0x0383, 0x0002, 0x0012, 0x0398, 0x0398, 0x0003, 0x0197, + 0x0000, 0x019a, 0x0001, 0x0012, 0x037f, 0x0002, 0x019d, 0x01a1, + 0x0002, 0x0012, 0x0383, 0x0383, 0x0002, 0x0012, 0x0398, 0x0398, + 0x0003, 0x01a9, 0x0000, 0x01ac, 0x0001, 0x0012, 0x03ad, 0x0002, + 0x01af, 0x01b3, 0x0002, 0x0012, 0x03bc, 0x03bc, 0x0002, 0x0012, + // Entry AA40 - AA7F + 0x03da, 0x03da, 0x0003, 0x01bb, 0x0000, 0x01be, 0x0001, 0x0008, + 0x0ca5, 0x0002, 0x01c1, 0x01c5, 0x0002, 0x0012, 0x03fa, 0x03fa, + 0x0002, 0x0012, 0x040f, 0x040f, 0x0003, 0x01cd, 0x0000, 0x01d0, + 0x0001, 0x0008, 0x0ca5, 0x0002, 0x01d3, 0x01d7, 0x0002, 0x0012, + 0x03fa, 0x03fa, 0x0002, 0x0012, 0x040f, 0x040f, 0x0003, 0x01df, + 0x01e2, 0x01e7, 0x0001, 0x0012, 0x0426, 0x0003, 0x0012, 0x042f, + 0x044d, 0x046b, 0x0002, 0x01ea, 0x01ee, 0x0002, 0x0012, 0x048b, + 0x048b, 0x0002, 0x0012, 0x04a5, 0x04a5, 0x0003, 0x01f6, 0x0000, + // Entry AA80 - AABF + 0x01f9, 0x0001, 0x0012, 0x04bf, 0x0002, 0x01fc, 0x0200, 0x0002, + 0x0012, 0x04c7, 0x04c7, 0x0002, 0x0012, 0x04dc, 0x04dc, 0x0003, + 0x0208, 0x0000, 0x020b, 0x0001, 0x0012, 0x04bf, 0x0002, 0x020e, + 0x0212, 0x0002, 0x0012, 0x04c7, 0x04c7, 0x0002, 0x0012, 0x04dc, + 0x04dc, 0x0003, 0x021a, 0x021d, 0x0222, 0x0001, 0x0012, 0x0127, + 0x0003, 0x0012, 0x04f1, 0x0511, 0x0531, 0x0002, 0x0225, 0x0229, + 0x0002, 0x0012, 0x0553, 0x0553, 0x0002, 0x0012, 0x056f, 0x056f, + 0x0003, 0x0231, 0x0000, 0x0234, 0x0001, 0x0012, 0x058b, 0x0002, + // Entry AAC0 - AAFF + 0x0237, 0x023b, 0x0002, 0x0012, 0x0595, 0x0595, 0x0002, 0x0012, + 0x05b0, 0x05b0, 0x0003, 0x0243, 0x0000, 0x0246, 0x0001, 0x0012, + 0x058b, 0x0002, 0x0249, 0x024d, 0x0002, 0x0012, 0x0595, 0x0595, + 0x0002, 0x0012, 0x05b0, 0x05b0, 0x0003, 0x0255, 0x0258, 0x025d, + 0x0001, 0x0012, 0x05cb, 0x0003, 0x0012, 0x05d0, 0x05df, 0x05ec, + 0x0002, 0x0260, 0x0264, 0x0002, 0x0012, 0x05f7, 0x05f7, 0x0002, + 0x0012, 0x060d, 0x060d, 0x0003, 0x026c, 0x0000, 0x026f, 0x0001, + 0x0012, 0x05cb, 0x0002, 0x0272, 0x0276, 0x0002, 0x0012, 0x0623, + // Entry AB00 - AB3F + 0x0623, 0x0002, 0x0012, 0x060d, 0x0638, 0x0003, 0x027e, 0x0000, + 0x0281, 0x0001, 0x0012, 0x05cb, 0x0002, 0x0284, 0x0288, 0x0002, + 0x0012, 0x0623, 0x0623, 0x0002, 0x0012, 0x060d, 0x064d, 0x0001, + 0x028e, 0x0001, 0x0012, 0x065f, 0x0002, 0x0000, 0x0294, 0x0003, + 0x0012, 0x0671, 0x06a0, 0x06cf, 0x0002, 0x0000, 0x029c, 0x0003, + 0x0012, 0x0700, 0x0724, 0x0748, 0x0002, 0x0000, 0x02a4, 0x0003, + 0x0012, 0x0700, 0x0724, 0x076e, 0x0002, 0x0000, 0x02ac, 0x0003, + 0x0012, 0x0793, 0x07c0, 0x07ed, 0x0002, 0x0000, 0x02b4, 0x0003, + // Entry AB40 - AB7F + 0x0012, 0x081c, 0x083e, 0x085e, 0x0002, 0x0000, 0x02bc, 0x0003, + 0x0012, 0x081c, 0x083e, 0x085e, 0x0002, 0x0000, 0x02c4, 0x0003, + 0x0012, 0x0882, 0x08af, 0x08dc, 0x0002, 0x0000, 0x02cc, 0x0003, + 0x0012, 0x090b, 0x092d, 0x094f, 0x0002, 0x0000, 0x02d4, 0x0003, + 0x0012, 0x090b, 0x092d, 0x094f, 0x0002, 0x0000, 0x02dc, 0x0003, + 0x0012, 0x0973, 0x09a0, 0x09cd, 0x0002, 0x0000, 0x02e4, 0x0003, + 0x0012, 0x09fc, 0x0a1e, 0x0a40, 0x0002, 0x0000, 0x02ec, 0x0003, + 0x0012, 0x09fc, 0x0a1e, 0x0a40, 0x0002, 0x0000, 0x02f4, 0x0003, + // Entry AB80 - ABBF + 0x0012, 0x0a64, 0x0a8d, 0x0ab6, 0x0002, 0x0000, 0x02fc, 0x0003, + 0x0012, 0x0ae1, 0x0aff, 0x0b1d, 0x0002, 0x0000, 0x0304, 0x0003, + 0x0012, 0x0ae1, 0x0aff, 0x0b1d, 0x0002, 0x0000, 0x030c, 0x0003, + 0x0012, 0x0b3d, 0x0b6e, 0x0b9f, 0x0002, 0x0000, 0x0314, 0x0003, + 0x0012, 0x0bd2, 0x0bf8, 0x0c1e, 0x0002, 0x0000, 0x031c, 0x0003, + 0x0012, 0x0bd2, 0x0bf8, 0x0c1e, 0x0002, 0x0000, 0x0324, 0x0003, + 0x0012, 0x0c46, 0x0c6a, 0x0c8e, 0x0002, 0x0000, 0x032c, 0x0003, + 0x0012, 0x0cb4, 0x0ccd, 0x0cf5, 0x0002, 0x0000, 0x0334, 0x0003, + // Entry ABC0 - ABFF + 0x0012, 0x0cb4, 0x0ccd, 0x0cf5, 0x0001, 0x033b, 0x0001, 0x0012, + 0x0d1f, 0x0003, 0x0342, 0x0000, 0x0345, 0x0001, 0x0012, 0x0d3b, + 0x0002, 0x0348, 0x034c, 0x0002, 0x0012, 0x0d46, 0x0d46, 0x0002, + 0x0012, 0x0d62, 0x0d62, 0x0003, 0x0354, 0x0000, 0x0357, 0x0001, + 0x0012, 0x0d7e, 0x0002, 0x035a, 0x035e, 0x0002, 0x0012, 0x0d88, + 0x0d88, 0x0002, 0x0012, 0x0da3, 0x0da3, 0x0003, 0x0366, 0x0000, + 0x0369, 0x0001, 0x0012, 0x0d7e, 0x0002, 0x036c, 0x0370, 0x0002, + 0x0012, 0x0d88, 0x0d88, 0x0002, 0x0012, 0x0da3, 0x0da3, 0x0003, + // Entry AC00 - AC3F + 0x0378, 0x0000, 0x037b, 0x0001, 0x0012, 0x0dbe, 0x0002, 0x037e, + 0x0382, 0x0002, 0x0012, 0x0dc9, 0x0dc9, 0x0002, 0x0012, 0x0de3, + 0x0de3, 0x0003, 0x038a, 0x0000, 0x038d, 0x0001, 0x0012, 0x0dff, + 0x0002, 0x0390, 0x0394, 0x0002, 0x0012, 0x0e07, 0x0e07, 0x0002, + 0x0012, 0x0e1e, 0x0e1e, 0x0003, 0x039c, 0x0000, 0x039f, 0x0001, + 0x0012, 0x0dff, 0x0002, 0x03a2, 0x03a6, 0x0002, 0x0012, 0x0e07, + 0x0e07, 0x0002, 0x0012, 0x0e1e, 0x0e1e, 0x0003, 0x03ae, 0x0000, + 0x03b1, 0x0001, 0x000f, 0x0227, 0x0002, 0x03b4, 0x03b8, 0x0002, + // Entry AC40 - AC7F + 0x0012, 0x0e37, 0x0e37, 0x0002, 0x0012, 0x0e53, 0x0e53, 0x0003, + 0x03c0, 0x0000, 0x03c3, 0x0001, 0x0012, 0x0e71, 0x0002, 0x03c6, + 0x03ca, 0x0002, 0x0012, 0x0e79, 0x0e79, 0x0002, 0x0012, 0x0e90, + 0x0e90, 0x0003, 0x03d2, 0x0000, 0x03d5, 0x0001, 0x0012, 0x0e71, + 0x0002, 0x03d8, 0x03dc, 0x0002, 0x0012, 0x0e79, 0x0e79, 0x0002, + 0x0012, 0x0e90, 0x0e90, 0x0001, 0x03e2, 0x0001, 0x0012, 0x0ea9, + 0x0004, 0x03ea, 0x03ef, 0x03f4, 0x03ff, 0x0003, 0x0000, 0x1dc7, + 0x2229, 0x223c, 0x0003, 0x0000, 0x1de0, 0x1de4, 0x1ded, 0x0002, + // Entry AC80 - ACBF + 0x0000, 0x03f7, 0x0002, 0x0000, 0x03fa, 0x0003, 0x0012, 0xffff, + 0x0ebf, 0x0ee9, 0x0002, 0x0000, 0x0402, 0x0003, 0x049c, 0x0532, + 0x0406, 0x0094, 0x0012, 0x0f11, 0x0f27, 0x0f43, 0x0f63, 0x0f9d, + 0x1020, 0x1081, 0x10f7, 0x118b, 0x1226, 0x12af, 0xffff, 0x1333, + 0x13b7, 0x1457, 0x14d9, 0x1570, 0x15ec, 0x166a, 0x171b, 0x17db, + 0x187d, 0x1912, 0x1996, 0x1a1f, 0x1a7b, 0x1a86, 0x1aa2, 0x1af6, + 0x1b2c, 0x1b8a, 0x1ba4, 0x1bf9, 0x1c4c, 0x1cab, 0x1d07, 0x1d42, + 0x1d6f, 0x1ddb, 0x1e4a, 0x1e92, 0x1e9f, 0x1ebc, 0x1ef4, 0x1f5e, + // Entry ACC0 - ACFF + 0x1f89, 0x2017, 0x208d, 0x20e9, 0x2187, 0x2218, 0x2264, 0x2286, + 0x22cd, 0x22f7, 0x2319, 0x2379, 0x2399, 0x23e8, 0x2490, 0x2512, + 0x252e, 0x2560, 0x25df, 0x263c, 0x2684, 0x268d, 0x26a3, 0x26b6, + 0x26d6, 0x26fa, 0x2735, 0x27a8, 0x280b, 0x286a, 0xffff, 0x28b6, + 0x28dc, 0x290d, 0x2959, 0x297b, 0x29db, 0x29ea, 0x2a10, 0x2a66, + 0x2a86, 0x2ada, 0x2ae9, 0x2afc, 0x2b1a, 0x2b48, 0x2b9c, 0x2be7, + 0x2cbb, 0x2d59, 0x2dc4, 0x2e14, 0x2e21, 0x2e2c, 0x2e53, 0x2edb, + 0x2f5e, 0x2fc6, 0x2fcf, 0x3003, 0x309a, 0x3107, 0x3160, 0x31b8, + // Entry AD00 - AD3F + 0x31c3, 0x31fb, 0x325c, 0x32b9, 0x3319, 0x3359, 0x33db, 0x33ea, + 0xffff, 0x3404, 0x3413, 0x342f, 0xffff, 0x348e, 0x34da, 0x34fe, + 0x350f, 0x352f, 0x3549, 0x3558, 0x3561, 0x3588, 0x35dc, 0x35f3, + 0x360d, 0x3659, 0x3673, 0x36cd, 0x36e9, 0x3752, 0x37c7, 0x381b, + 0x3845, 0x38bc, 0x3918, 0x3925, 0x3937, 0x3965, 0x39ce, 0x0094, + 0x0012, 0xffff, 0xffff, 0xffff, 0xffff, 0x0f7d, 0x1013, 0x1070, + 0x10d9, 0x1169, 0x1205, 0x128e, 0xffff, 0x1317, 0x1391, 0x1444, + 0x14b3, 0x155b, 0x15d0, 0x164a, 0x16e0, 0x17b7, 0x1859, 0x18fb, + // Entry AD40 - AD7F + 0x1976, 0x1a0c, 0xffff, 0xffff, 0x1a93, 0xffff, 0x1b18, 0xffff, + 0x1b99, 0x1bf0, 0x1c41, 0x1c98, 0xffff, 0xffff, 0x1d60, 0x1dc3, + 0x1e41, 0xffff, 0xffff, 0xffff, 0x1eda, 0xffff, 0x1f6d, 0x1ff7, + 0xffff, 0x20c9, 0x215f, 0x220d, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2304, 0xffff, 0xffff, 0x23c2, 0x246a, 0xffff, 0xffff, 0x253b, + 0x25d0, 0x2633, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x271e, 0x2799, 0x27fc, 0x285f, 0xffff, 0xffff, 0xffff, 0x2902, + 0xffff, 0x2966, 0xffff, 0xffff, 0x2a00, 0xffff, 0x2a77, 0xffff, + // Entry AD80 - ADBF + 0xffff, 0xffff, 0xffff, 0x2b39, 0xffff, 0x2ba9, 0x2c89, 0x2d45, + 0x2db7, 0xffff, 0xffff, 0xffff, 0x2e37, 0x2ec1, 0x2f45, 0xffff, + 0xffff, 0x2fde, 0x3083, 0x30fe, 0x314f, 0xffff, 0xffff, 0x31ea, + 0x3253, 0x32a4, 0xffff, 0x3333, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x3420, 0xffff, 0x3483, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x3579, 0xffff, 0xffff, 0x3602, 0xffff, + 0x3662, 0xffff, 0x36da, 0x373d, 0x37b8, 0xffff, 0x382e, 0x38a9, + 0xffff, 0xffff, 0xffff, 0x3958, 0x39b5, 0x0094, 0x0012, 0xffff, + // Entry ADC0 - ADFF + 0xffff, 0xffff, 0xffff, 0x0fda, 0x104a, 0x10af, 0x1132, 0x11ca, + 0x125c, 0x12e5, 0xffff, 0x1364, 0x13ff, 0x1487, 0x151c, 0x15a2, + 0x161d, 0x16a7, 0x176b, 0x181c, 0x18be, 0x1946, 0x19d3, 0x1a4f, + 0xffff, 0xffff, 0x1ace, 0xffff, 0x1b5d, 0xffff, 0x1bcc, 0x1c1f, + 0x1c74, 0x1cdb, 0xffff, 0xffff, 0x1d9b, 0x1e10, 0x1e70, 0xffff, + 0xffff, 0xffff, 0x1f2b, 0xffff, 0x1fc2, 0x2054, 0xffff, 0x2126, + 0x21cc, 0x2240, 0xffff, 0xffff, 0xffff, 0xffff, 0x234b, 0xffff, + 0xffff, 0x242b, 0x24d3, 0xffff, 0xffff, 0x259a, 0x260b, 0x2662, + // Entry AE00 - AE3F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2769, 0x27d4, + 0x2837, 0x2892, 0xffff, 0xffff, 0xffff, 0x2935, 0xffff, 0x29ad, + 0xffff, 0xffff, 0x2a3d, 0xffff, 0x2ab2, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2b74, 0xffff, 0x2c3a, 0x2d02, 0x2d8a, 0x2dee, 0xffff, + 0xffff, 0xffff, 0x2e8c, 0x2f12, 0x2f94, 0xffff, 0xffff, 0x3045, + 0x30ce, 0x312d, 0x318e, 0xffff, 0xffff, 0x3229, 0x3282, 0x32eb, + 0xffff, 0x339c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x345b, + 0xffff, 0x34b6, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry AE40 - AE7F + 0xffff, 0x35b4, 0xffff, 0xffff, 0x3635, 0xffff, 0x36a2, 0xffff, + 0x3715, 0x3787, 0x37f3, 0xffff, 0x3879, 0x38ec, 0xffff, 0xffff, + 0xffff, 0x398f, 0x3a04, 0x0002, 0x0003, 0x00d1, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, + 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, 0x0006, 0x000d, + 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0002, + 0x0587, 0x0008, 0x002f, 0x0066, 0x008b, 0x0000, 0x009f, 0x00af, + // Entry AE80 - AEBF + 0x00c0, 0x0000, 0x0002, 0x0032, 0x0054, 0x0003, 0x0036, 0x0000, + 0x0045, 0x000d, 0x0013, 0xffff, 0x0000, 0x0004, 0x0008, 0x000c, + 0x0010, 0x0014, 0x0018, 0x001c, 0x0020, 0x0024, 0x0028, 0x002c, + 0x000d, 0x0013, 0xffff, 0x0030, 0x003c, 0x0047, 0x0053, 0x005c, + 0x0068, 0x0074, 0x0081, 0x008d, 0x0098, 0x00a2, 0x00b5, 0x0002, + 0x0000, 0x0057, 0x000d, 0x0000, 0xffff, 0x1e5d, 0x2240, 0x2242, + 0x21c6, 0x2242, 0x1e5d, 0x1e5d, 0x21c6, 0x21c8, 0x2148, 0x21c4, + 0x2244, 0x0002, 0x0069, 0x007f, 0x0003, 0x006d, 0x0000, 0x0076, + // Entry AEC0 - AEFF + 0x0007, 0x0013, 0x00c8, 0x00cc, 0x00d0, 0x00d4, 0x00d8, 0x00dc, + 0x00e0, 0x0007, 0x0013, 0x00e4, 0x00ea, 0x00f6, 0x0101, 0x010d, + 0x0116, 0x0122, 0x0002, 0x0000, 0x0082, 0x0007, 0x0000, 0x21c8, + 0x214f, 0x2246, 0x21c8, 0x21c4, 0x04dd, 0x2242, 0x0001, 0x008d, + 0x0003, 0x0091, 0x0000, 0x0098, 0x0005, 0x0000, 0xffff, 0x1f17, + 0x1f1a, 0x1f1d, 0x1f20, 0x0005, 0x0013, 0xffff, 0x012e, 0x0136, + 0x013e, 0x0146, 0x0003, 0x00a9, 0x0000, 0x00a3, 0x0001, 0x00a5, + 0x0002, 0x0013, 0x014e, 0x0162, 0x0001, 0x00ab, 0x0002, 0x0009, + // Entry AF00 - AF3F + 0x0078, 0x577d, 0x0004, 0x00bd, 0x00b7, 0x00b4, 0x00ba, 0x0001, + 0x0006, 0x015b, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, + 0x0001, 0x0002, 0x08e8, 0x0004, 0x00ce, 0x00c8, 0x00c5, 0x00cb, + 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, + 0x053d, 0x0001, 0x0000, 0x0546, 0x003d, 0x010f, 0x0000, 0x0000, + 0x0114, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0119, 0x0000, + 0x0000, 0x011e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0123, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x012e, 0x0000, 0x0000, + // Entry AF40 - AF7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0133, 0x0000, 0x0138, 0x0000, 0x0000, 0x013d, 0x0000, + 0x0000, 0x0142, 0x0001, 0x0111, 0x0001, 0x0013, 0x0173, 0x0001, + 0x0116, 0x0001, 0x0013, 0x017b, 0x0001, 0x011b, 0x0001, 0x0013, + 0x0182, 0x0001, 0x0120, 0x0001, 0x0013, 0x0189, 0x0002, 0x0126, + 0x0129, 0x0001, 0x0013, 0x0190, 0x0003, 0x0013, 0x0198, 0x01a4, + // Entry AF80 - AFBF + 0x01ad, 0x0001, 0x0130, 0x0001, 0x0013, 0x01b9, 0x0001, 0x0135, + 0x0001, 0x0013, 0x01ce, 0x0001, 0x013a, 0x0001, 0x0013, 0x01e1, + 0x0001, 0x013f, 0x0001, 0x0013, 0x01e8, 0x0001, 0x0144, 0x0001, + 0x0013, 0x01f1, 0x0003, 0x0004, 0x021a, 0x064b, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0038, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, 0x0027, + 0x0004, 0x0024, 0x001e, 0x001b, 0x0021, 0x0001, 0x000c, 0x0000, + 0x0001, 0x000c, 0x0012, 0x0001, 0x000c, 0x001e, 0x0001, 0x0013, + // Entry AFC0 - AFFF + 0x0203, 0x0004, 0x0035, 0x002f, 0x002c, 0x0032, 0x0001, 0x0013, + 0x020f, 0x0001, 0x0013, 0x020f, 0x0001, 0x0006, 0x022e, 0x0001, + 0x0006, 0x022e, 0x0008, 0x0041, 0x00a6, 0x00fd, 0x0132, 0x01cd, + 0x01e7, 0x01f8, 0x0209, 0x0002, 0x0044, 0x0075, 0x0003, 0x0048, + 0x0057, 0x0066, 0x000d, 0x0013, 0xffff, 0x0221, 0x0228, 0x022f, + 0x0236, 0x023d, 0x0244, 0x024b, 0x0252, 0x0259, 0x0260, 0x0267, + 0x026e, 0x000d, 0x0013, 0xffff, 0x0275, 0x0279, 0x027d, 0x0279, + 0x027d, 0x0281, 0x0285, 0x0289, 0x028d, 0x028d, 0x0291, 0x0295, + // Entry B000 - B03F + 0x000d, 0x0013, 0xffff, 0x0299, 0x02a9, 0x02b3, 0x02bd, 0x02c7, + 0x02d7, 0x02e4, 0x02f1, 0x02fb, 0x0308, 0x0315, 0x0322, 0x0003, + 0x0079, 0x0088, 0x0097, 0x000d, 0x0013, 0xffff, 0x0221, 0x0228, + 0x022f, 0x0236, 0x023d, 0x0244, 0x024b, 0x0252, 0x0259, 0x0260, + 0x0267, 0x026e, 0x000d, 0x0013, 0xffff, 0x0275, 0x0279, 0x027d, + 0x0279, 0x027d, 0x0281, 0x0285, 0x0289, 0x028d, 0x028d, 0x0291, + 0x0295, 0x000d, 0x0013, 0xffff, 0x0299, 0x02a9, 0x02b3, 0x02bd, + 0x02c7, 0x02d7, 0x02e4, 0x02f1, 0x02fb, 0x0308, 0x0315, 0x0322, + // Entry B040 - B07F + 0x0002, 0x00a9, 0x00d3, 0x0005, 0x00af, 0x00b8, 0x00ca, 0x0000, + 0x00c1, 0x0007, 0x0013, 0x032f, 0x0339, 0x0343, 0x034d, 0x0357, + 0x0361, 0x036b, 0x0007, 0x0013, 0x0375, 0x0379, 0x037d, 0x0381, + 0x0291, 0x0385, 0x0275, 0x0007, 0x0013, 0x0389, 0x0390, 0x0397, + 0x039e, 0x03a5, 0x03ac, 0x03b3, 0x0007, 0x0013, 0x03ba, 0x03d0, + 0x03e6, 0x03f6, 0x0406, 0x0416, 0x0429, 0x0005, 0x00d9, 0x00e2, + 0x00f4, 0x0000, 0x00eb, 0x0007, 0x0013, 0x032f, 0x0339, 0x0343, + 0x034d, 0x0357, 0x0361, 0x036b, 0x0007, 0x0013, 0x0375, 0x0379, + // Entry B080 - B0BF + 0x037d, 0x0381, 0x0291, 0x0385, 0x0275, 0x0007, 0x0013, 0x0389, + 0x0390, 0x0397, 0x039e, 0x03a5, 0x03ac, 0x03b3, 0x0007, 0x0013, + 0x03ba, 0x03d0, 0x03e6, 0x03f6, 0x0406, 0x0416, 0x0429, 0x0002, + 0x0100, 0x0119, 0x0003, 0x0104, 0x010b, 0x0112, 0x0005, 0x0000, + 0xffff, 0x04e3, 0x04e6, 0x04e9, 0x04ec, 0x0005, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x0039, 0x0005, 0x0013, 0xffff, 0x043f, + 0x0450, 0x0461, 0x0472, 0x0003, 0x011d, 0x0124, 0x012b, 0x0005, + 0x0000, 0xffff, 0x04e3, 0x04e6, 0x04e9, 0x04ec, 0x0005, 0x0000, + // Entry B0C0 - B0FF + 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x0005, 0x0013, 0xffff, + 0x043f, 0x0450, 0x0461, 0x0472, 0x0002, 0x0135, 0x0181, 0x0003, + 0x0139, 0x0151, 0x0169, 0x0008, 0x0142, 0x0148, 0x0000, 0x014b, + 0x014e, 0x0000, 0x0000, 0x0145, 0x0001, 0x0013, 0x0483, 0x0001, + 0x0013, 0x048d, 0x0001, 0x0013, 0x0494, 0x0001, 0x0013, 0x0483, + 0x0001, 0x0013, 0x0494, 0x0008, 0x015a, 0x0160, 0x0000, 0x0163, + 0x0166, 0x0000, 0x0000, 0x015d, 0x0001, 0x0013, 0x04a7, 0x0001, + 0x0013, 0x04ab, 0x0001, 0x0013, 0x04af, 0x0001, 0x0013, 0x0483, + // Entry B100 - B13F + 0x0001, 0x0013, 0x0494, 0x0008, 0x0172, 0x0178, 0x0000, 0x017b, + 0x017e, 0x0000, 0x0000, 0x0175, 0x0001, 0x0013, 0x0483, 0x0001, + 0x0013, 0x048d, 0x0001, 0x0013, 0x0494, 0x0001, 0x0013, 0x0483, + 0x0001, 0x0013, 0x0494, 0x0003, 0x0185, 0x019d, 0x01b5, 0x0008, + 0x018e, 0x0194, 0x0000, 0x0197, 0x019a, 0x0000, 0x0000, 0x0191, + 0x0001, 0x0013, 0x0483, 0x0001, 0x0013, 0x048d, 0x0001, 0x0013, + 0x0494, 0x0001, 0x0013, 0x0483, 0x0001, 0x0013, 0x0494, 0x0008, + 0x01a6, 0x01ac, 0x0000, 0x01af, 0x01b2, 0x0000, 0x0000, 0x01a9, + // Entry B140 - B17F + 0x0001, 0x0013, 0x0483, 0x0001, 0x0013, 0x048d, 0x0001, 0x0013, + 0x0494, 0x0001, 0x0013, 0x0483, 0x0001, 0x0013, 0x0494, 0x0008, + 0x01be, 0x01c4, 0x0000, 0x01c7, 0x01ca, 0x0000, 0x0000, 0x01c1, + 0x0001, 0x0013, 0x0483, 0x0001, 0x0013, 0x048d, 0x0001, 0x0013, + 0x0494, 0x0001, 0x0013, 0x0483, 0x0001, 0x0013, 0x0494, 0x0003, + 0x01dc, 0x0000, 0x01d1, 0x0002, 0x01d4, 0x01d8, 0x0002, 0x0013, + 0x04b3, 0x0517, 0x0002, 0x0013, 0x04dd, 0x0528, 0x0002, 0x01df, + 0x01e3, 0x0002, 0x0009, 0x0078, 0x577d, 0x0002, 0x0000, 0x04f5, + // Entry B180 - B1BF + 0x04f9, 0x0004, 0x01f5, 0x01ef, 0x01ec, 0x01f2, 0x0001, 0x000c, + 0x03c9, 0x0001, 0x000c, 0x03d9, 0x0001, 0x000c, 0x03e3, 0x0001, + 0x000c, 0x03ec, 0x0004, 0x0206, 0x0200, 0x01fd, 0x0203, 0x0001, + 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, 0x0002, 0x04fe, + 0x0001, 0x0002, 0x0508, 0x0004, 0x0217, 0x0211, 0x020e, 0x0214, + 0x0001, 0x0013, 0x020f, 0x0001, 0x0013, 0x020f, 0x0001, 0x0006, + 0x022e, 0x0001, 0x0006, 0x022e, 0x0042, 0x025d, 0x0262, 0x0267, + 0x026c, 0x0283, 0x0295, 0x02a7, 0x02be, 0x02d0, 0x02e2, 0x02f9, + // Entry B1C0 - B1FF + 0x030b, 0x031d, 0x0338, 0x034e, 0x0364, 0x0369, 0x036e, 0x0373, + 0x038a, 0x039c, 0x03ae, 0x03b3, 0x03b8, 0x03bd, 0x03c2, 0x03c7, + 0x03cc, 0x03d1, 0x03d6, 0x03db, 0x03ef, 0x0403, 0x0417, 0x042b, + 0x043f, 0x0453, 0x0467, 0x047b, 0x048f, 0x04a3, 0x04b7, 0x04cb, + 0x04df, 0x04f3, 0x0507, 0x051b, 0x052f, 0x0543, 0x0557, 0x056b, + 0x057f, 0x0584, 0x0589, 0x058e, 0x05a4, 0x05b6, 0x05c8, 0x05de, + 0x05f0, 0x0602, 0x0618, 0x062a, 0x063c, 0x0641, 0x0646, 0x0001, + 0x025f, 0x0001, 0x0013, 0x0555, 0x0001, 0x0264, 0x0001, 0x0013, + // Entry B200 - B23F + 0x0555, 0x0001, 0x0269, 0x0001, 0x0013, 0x0555, 0x0003, 0x0270, + 0x0273, 0x0278, 0x0001, 0x0013, 0x0568, 0x0003, 0x0013, 0x0581, + 0x0592, 0x05ac, 0x0002, 0x027b, 0x027f, 0x0002, 0x0013, 0x05dd, + 0x05b9, 0x0002, 0x0013, 0x062b, 0x0604, 0x0003, 0x0287, 0x0000, + 0x028a, 0x0001, 0x0013, 0x0655, 0x0002, 0x028d, 0x0291, 0x0002, + 0x0013, 0x065d, 0x065d, 0x0002, 0x0013, 0x0670, 0x0670, 0x0003, + 0x0299, 0x0000, 0x029c, 0x0001, 0x0013, 0x0655, 0x0002, 0x029f, + 0x02a3, 0x0002, 0x0013, 0x065d, 0x065d, 0x0002, 0x0013, 0x0670, + // Entry B240 - B27F + 0x0670, 0x0003, 0x02ab, 0x02ae, 0x02b3, 0x0001, 0x0013, 0x068d, + 0x0003, 0x0013, 0x069a, 0x06b1, 0x06c5, 0x0002, 0x02b6, 0x02ba, + 0x0002, 0x0013, 0x06dc, 0x06dc, 0x0002, 0x0013, 0x06f4, 0x06f4, + 0x0003, 0x02c2, 0x0000, 0x02c5, 0x0001, 0x0013, 0x0716, 0x0002, + 0x02c8, 0x02cc, 0x0002, 0x0013, 0x0721, 0x0721, 0x0002, 0x0013, + 0x0737, 0x0737, 0x0003, 0x02d4, 0x0000, 0x02d7, 0x0001, 0x0013, + 0x0716, 0x0002, 0x02da, 0x02de, 0x0002, 0x0013, 0x0721, 0x0721, + 0x0002, 0x0013, 0x0737, 0x0737, 0x0003, 0x02e6, 0x02e9, 0x02ee, + // Entry B280 - B2BF + 0x0001, 0x0013, 0x0757, 0x0003, 0x0013, 0x0761, 0x0775, 0x0786, + 0x0002, 0x02f1, 0x02f5, 0x0002, 0x0013, 0x07af, 0x079a, 0x0002, + 0x0013, 0x07e6, 0x07c7, 0x0003, 0x02fd, 0x0000, 0x0300, 0x0001, + 0x0013, 0x0808, 0x0002, 0x0303, 0x0307, 0x0002, 0x0013, 0x0810, + 0x0810, 0x0002, 0x0013, 0x0823, 0x0823, 0x0003, 0x030f, 0x0000, + 0x0312, 0x0001, 0x0013, 0x0840, 0x0002, 0x0315, 0x0319, 0x0002, + 0x0013, 0x0810, 0x0810, 0x0002, 0x0013, 0x0823, 0x0823, 0x0004, + 0x0322, 0x0325, 0x032a, 0x0335, 0x0001, 0x0013, 0x0847, 0x0003, + // Entry B2C0 - B2FF + 0x0013, 0x085d, 0x0873, 0x0887, 0x0002, 0x032d, 0x0331, 0x0002, + 0x0013, 0x08b8, 0x0897, 0x0002, 0x0013, 0x0907, 0x08dc, 0x0001, + 0x0013, 0x0935, 0x0004, 0x033d, 0x0000, 0x0340, 0x034b, 0x0001, + 0x0013, 0x095d, 0x0002, 0x0343, 0x0347, 0x0002, 0x0013, 0x0965, + 0x0965, 0x0002, 0x0013, 0x0978, 0x0978, 0x0001, 0x0013, 0x0935, + 0x0004, 0x0353, 0x0000, 0x0356, 0x0361, 0x0001, 0x0013, 0x095d, + 0x0002, 0x0359, 0x035d, 0x0002, 0x0013, 0x0965, 0x0965, 0x0002, + 0x0013, 0x0978, 0x0978, 0x0001, 0x0013, 0x0935, 0x0001, 0x0366, + // Entry B300 - B33F + 0x0001, 0x0013, 0x0995, 0x0001, 0x036b, 0x0001, 0x0013, 0x09b5, + 0x0001, 0x0370, 0x0001, 0x0013, 0x09b5, 0x0003, 0x0377, 0x037a, + 0x037f, 0x0001, 0x0013, 0x048d, 0x0003, 0x0013, 0x09c5, 0x09cc, + 0x09da, 0x0002, 0x0382, 0x0386, 0x0002, 0x0013, 0x09f9, 0x09e7, + 0x0002, 0x0013, 0x0a33, 0x0a1e, 0x0003, 0x038e, 0x0000, 0x0391, + 0x0001, 0x0013, 0x048d, 0x0002, 0x0394, 0x0398, 0x0002, 0x0013, + 0x09f9, 0x09e7, 0x0002, 0x0013, 0x0a33, 0x0a1e, 0x0003, 0x03a0, + 0x0000, 0x03a3, 0x0001, 0x0013, 0x048d, 0x0002, 0x03a6, 0x03aa, + // Entry B340 - B37F + 0x0002, 0x0013, 0x09f9, 0x09f9, 0x0002, 0x0013, 0x0a33, 0x0a1e, + 0x0001, 0x03b0, 0x0001, 0x0013, 0x0a5b, 0x0001, 0x03b5, 0x0001, + 0x0013, 0x0a7b, 0x0001, 0x03ba, 0x0001, 0x0013, 0x0a7b, 0x0001, + 0x03bf, 0x0001, 0x0013, 0x0a8a, 0x0001, 0x03c4, 0x0001, 0x0013, + 0x0aa1, 0x0001, 0x03c9, 0x0001, 0x0013, 0x0aa1, 0x0001, 0x03ce, + 0x0001, 0x0013, 0x0ab0, 0x0001, 0x03d3, 0x0001, 0x0013, 0x0ad7, + 0x0001, 0x03d8, 0x0001, 0x0013, 0x0ad7, 0x0003, 0x0000, 0x03df, + 0x03e4, 0x0003, 0x0013, 0x0aee, 0x0b0e, 0x0b2b, 0x0002, 0x03e7, + // Entry B380 - B3BF + 0x03eb, 0x0002, 0x0013, 0x0b4b, 0x0b4b, 0x0002, 0x0013, 0x0b6c, + 0x0b6c, 0x0003, 0x0000, 0x03f3, 0x03f8, 0x0003, 0x0013, 0x0b90, + 0x0ba5, 0x0bb7, 0x0002, 0x03fb, 0x03ff, 0x0002, 0x0013, 0x0b4b, + 0x0b4b, 0x0002, 0x0013, 0x0b6c, 0x0b6c, 0x0003, 0x0000, 0x0407, + 0x040c, 0x0003, 0x0013, 0x0bcc, 0x0bdd, 0x0beb, 0x0002, 0x040f, + 0x0413, 0x0002, 0x0013, 0x0b4b, 0x0b4b, 0x0002, 0x0013, 0x0b6c, + 0x0b6c, 0x0003, 0x0000, 0x041b, 0x0420, 0x0003, 0x0013, 0x0bfc, + 0x0c19, 0x0c33, 0x0002, 0x0423, 0x0427, 0x0002, 0x0013, 0x0c50, + // Entry B3C0 - B3FF + 0x0c50, 0x0002, 0x0013, 0x0c6e, 0x0c6e, 0x0003, 0x0000, 0x042f, + 0x0434, 0x0003, 0x0013, 0x0c8f, 0x0ca4, 0x0cb6, 0x0002, 0x0437, + 0x043b, 0x0002, 0x0013, 0x0c50, 0x0c50, 0x0002, 0x0013, 0x0c6e, + 0x0c6e, 0x0003, 0x0000, 0x0443, 0x0448, 0x0003, 0x0013, 0x0ccb, + 0x0cd9, 0x0ce4, 0x0002, 0x044b, 0x044f, 0x0002, 0x0013, 0x0c50, + 0x0c50, 0x0002, 0x0013, 0x0c6e, 0x0c6e, 0x0003, 0x0000, 0x0457, + 0x045c, 0x0003, 0x0013, 0x0cf2, 0x0d0d, 0x0d25, 0x0002, 0x045f, + 0x0463, 0x0002, 0x0013, 0x0d40, 0x0d40, 0x0002, 0x0013, 0x0d5c, + // Entry B400 - B43F + 0x0d5c, 0x0003, 0x0000, 0x046b, 0x0470, 0x0003, 0x0013, 0x0d7b, + 0x0d90, 0x0da2, 0x0002, 0x0473, 0x0477, 0x0002, 0x0013, 0x0d40, + 0x0d40, 0x0002, 0x0013, 0x0d5c, 0x0d5c, 0x0003, 0x0000, 0x047f, + 0x0484, 0x0003, 0x0013, 0x0db7, 0x0dc8, 0x0dd6, 0x0002, 0x0487, + 0x048b, 0x0002, 0x0013, 0x0d40, 0x0d40, 0x0002, 0x0013, 0x0d5c, + 0x0d5c, 0x0003, 0x0000, 0x0493, 0x0498, 0x0003, 0x0013, 0x0de7, + 0x0e02, 0x0e1a, 0x0002, 0x049b, 0x049f, 0x0002, 0x0013, 0x0e35, + 0x0e35, 0x0002, 0x0013, 0x0e51, 0x0e51, 0x0003, 0x0000, 0x04a7, + // Entry B440 - B47F + 0x04ac, 0x0003, 0x0013, 0x0e70, 0x0e85, 0x0e97, 0x0002, 0x04af, + 0x04b3, 0x0002, 0x0013, 0x0e35, 0x0e35, 0x0002, 0x0013, 0x0e51, + 0x0e51, 0x0003, 0x0000, 0x04bb, 0x04c0, 0x0003, 0x0013, 0x0eac, + 0x0eba, 0x0ec5, 0x0002, 0x04c3, 0x04c7, 0x0002, 0x0013, 0x0e35, + 0x0e35, 0x0002, 0x0013, 0x0e51, 0x0e51, 0x0003, 0x0000, 0x04cf, + 0x04d4, 0x0003, 0x0013, 0x0ed3, 0x0ee7, 0x0eff, 0x0002, 0x04d7, + 0x04db, 0x0002, 0x0013, 0x0f1a, 0x0f1a, 0x0002, 0x0013, 0x0f36, + 0x0f36, 0x0003, 0x0000, 0x04e3, 0x04e8, 0x0003, 0x0013, 0x0f55, + // Entry B480 - B4BF + 0x0f6a, 0x0f7c, 0x0002, 0x04eb, 0x04ef, 0x0002, 0x0013, 0x0f1a, + 0x0f1a, 0x0002, 0x0013, 0x0f36, 0x0f36, 0x0003, 0x0000, 0x04f7, + 0x04fc, 0x0003, 0x0013, 0x0f91, 0x0fa2, 0x0fb0, 0x0002, 0x04ff, + 0x0503, 0x0002, 0x0013, 0x0f1a, 0x0f1a, 0x0002, 0x0013, 0x0f36, + 0x0f36, 0x0003, 0x0000, 0x050b, 0x0510, 0x0003, 0x0013, 0x0fc1, + 0x0fde, 0x0ff8, 0x0002, 0x0513, 0x0517, 0x0002, 0x0013, 0x1015, + 0x1015, 0x0002, 0x0013, 0x103a, 0x103a, 0x0003, 0x0000, 0x051f, + 0x0524, 0x0003, 0x0013, 0x105b, 0x1070, 0x1082, 0x0002, 0x0527, + // Entry B4C0 - B4FF + 0x052b, 0x0002, 0x0013, 0x1015, 0x1015, 0x0002, 0x0013, 0x103a, + 0x103a, 0x0003, 0x0000, 0x0533, 0x0538, 0x0003, 0x0013, 0x1097, + 0x10a5, 0x10b0, 0x0002, 0x053b, 0x053f, 0x0002, 0x0013, 0x1015, + 0x1015, 0x0002, 0x0013, 0x103a, 0x103a, 0x0003, 0x0000, 0x0547, + 0x054c, 0x0003, 0x0013, 0x10be, 0x10de, 0x10fb, 0x0002, 0x054f, + 0x0553, 0x0002, 0x0013, 0x111b, 0x111b, 0x0002, 0x0013, 0x1143, + 0x1143, 0x0003, 0x0000, 0x055b, 0x0560, 0x0003, 0x0013, 0x1167, + 0x117c, 0x118e, 0x0002, 0x0563, 0x0567, 0x0002, 0x0013, 0x111b, + // Entry B500 - B53F + 0x111b, 0x0002, 0x0013, 0x1143, 0x1143, 0x0003, 0x0000, 0x056f, + 0x0574, 0x0003, 0x0013, 0x11a3, 0x11b4, 0x11c2, 0x0002, 0x0577, + 0x057b, 0x0002, 0x0013, 0x111b, 0x111b, 0x0002, 0x0013, 0x1143, + 0x1143, 0x0001, 0x0581, 0x0001, 0x0013, 0x11d3, 0x0001, 0x0586, + 0x0001, 0x0013, 0x11d3, 0x0001, 0x058b, 0x0001, 0x0013, 0x11d3, + 0x0003, 0x0592, 0x0595, 0x0599, 0x0001, 0x0013, 0x11e7, 0x0002, + 0x0013, 0xffff, 0x11f4, 0x0002, 0x059c, 0x05a0, 0x0002, 0x0013, + 0x1220, 0x1208, 0x0002, 0x0013, 0x1256, 0x123b, 0x0003, 0x05a8, + // Entry B540 - B57F + 0x0000, 0x05ab, 0x0001, 0x0013, 0x1274, 0x0002, 0x05ae, 0x05b2, + 0x0002, 0x0013, 0x127c, 0x127c, 0x0002, 0x0013, 0x128f, 0x128f, + 0x0003, 0x05ba, 0x0000, 0x05bd, 0x0001, 0x0013, 0x1274, 0x0002, + 0x05c0, 0x05c4, 0x0002, 0x0013, 0x127c, 0x127c, 0x0002, 0x0013, + 0x128f, 0x128f, 0x0003, 0x05cc, 0x05cf, 0x05d3, 0x0001, 0x0013, + 0x12ac, 0x0002, 0x0013, 0xffff, 0x12c2, 0x0002, 0x05d6, 0x05da, + 0x0002, 0x0013, 0x12df, 0x12df, 0x0002, 0x0013, 0x1300, 0x1300, + 0x0003, 0x05e2, 0x0000, 0x05e5, 0x0001, 0x0013, 0x132b, 0x0002, + // Entry B580 - B5BF + 0x05e8, 0x05ec, 0x0002, 0x0013, 0x1336, 0x1336, 0x0002, 0x0013, + 0x134c, 0x134c, 0x0003, 0x05f4, 0x0000, 0x05f7, 0x0001, 0x0013, + 0x132b, 0x0002, 0x05fa, 0x05fe, 0x0002, 0x0013, 0x1336, 0x1336, + 0x0002, 0x0013, 0x134c, 0x134c, 0x0003, 0x0606, 0x0609, 0x060d, + 0x0001, 0x0013, 0x136c, 0x0002, 0x0013, 0xffff, 0x1376, 0x0002, + 0x0610, 0x0614, 0x0002, 0x0013, 0x1392, 0x137d, 0x0002, 0x0013, + 0x13d2, 0x13ba, 0x0003, 0x061c, 0x0000, 0x061f, 0x0001, 0x0013, + 0x13f3, 0x0002, 0x0622, 0x0626, 0x0002, 0x0013, 0x13fe, 0x13fe, + // Entry B5C0 - B5FF + 0x0002, 0x0013, 0x1414, 0x1414, 0x0003, 0x062e, 0x0000, 0x0631, + 0x0001, 0x0013, 0x13f3, 0x0002, 0x0634, 0x0638, 0x0002, 0x0013, + 0x13fe, 0x13fe, 0x0002, 0x0013, 0x1414, 0x1414, 0x0001, 0x063e, + 0x0001, 0x0013, 0x142d, 0x0001, 0x0643, 0x0001, 0x0013, 0x1460, + 0x0001, 0x0648, 0x0001, 0x0013, 0x1460, 0x0004, 0x0650, 0x0655, + 0x065a, 0x067f, 0x0003, 0x0000, 0x1dc7, 0x2229, 0x223c, 0x0003, + 0x0013, 0x147d, 0x1491, 0x14b9, 0x0002, 0x065d, 0x0673, 0x0003, + 0x0661, 0x066d, 0x0667, 0x0004, 0x0006, 0xffff, 0xffff, 0xffff, + // Entry B600 - B63F + 0x1f5f, 0x0004, 0x0006, 0xffff, 0xffff, 0xffff, 0x1f5f, 0x0004, + 0x0006, 0xffff, 0xffff, 0xffff, 0x1f63, 0x0003, 0x0000, 0x067a, + 0x0677, 0x0001, 0x0013, 0x14dd, 0x0003, 0x0013, 0xffff, 0x1504, + 0x1525, 0x0002, 0x0848, 0x0682, 0x0003, 0x071c, 0x07b2, 0x0686, + 0x0094, 0x0013, 0x154f, 0x1575, 0x159f, 0x15cc, 0x1636, 0x16c4, + 0x173f, 0x17aa, 0x1826, 0x18ac, 0x1921, 0xffff, 0x1999, 0x1a0b, + 0x1a89, 0x1b1d, 0x1bd2, 0x1c46, 0x1ccb, 0x1d75, 0x1e3d, 0x1ef1, + 0x1f97, 0x2011, 0x2085, 0x20e2, 0x20fc, 0x2136, 0x2187, 0x21e1, + // Entry B640 - B67F + 0x2258, 0x229c, 0x2308, 0x2370, 0x23fa, 0x2457, 0x248d, 0x24da, + 0x2570, 0x261a, 0x266c, 0x2686, 0x26b6, 0x2713, 0x2796, 0x27d7, + 0x2864, 0x28d7, 0x292c, 0x29c6, 0x2a42, 0x2a87, 0x2aae, 0x2af2, + 0x2b23, 0x2b5d, 0x2bae, 0x2bdb, 0x2c2c, 0x2cca, 0x2d3b, 0x2d6b, + 0x2db2, 0x2e54, 0x2ecd, 0x2f18, 0x2f48, 0x2f75, 0x2fa1, 0x2fce, + 0x3005, 0x3056, 0x30c8, 0x3136, 0x31ae, 0xffff, 0x3209, 0x3239, + 0x3286, 0x32e1, 0x331e, 0x337b, 0x339b, 0x33f2, 0x3461, 0x34a8, + 0x34f9, 0x3519, 0x3539, 0x3559, 0x35a3, 0x35fa, 0x364b, 0x370a, + // Entry B680 - B6BF + 0x37ac, 0x3828, 0x3879, 0x3896, 0x38ad, 0x38f1, 0x3983, 0x3a21, + 0x3aa3, 0x3aba, 0x3b18, 0x3bae, 0x3c28, 0x3c99, 0x3cf0, 0x3d07, + 0x3d49, 0x3dab, 0x3e13, 0x3e70, 0x3edb, 0x3f6c, 0x3f89, 0x3fa3, + 0x3fc9, 0x3fe9, 0x4020, 0xffff, 0x408b, 0x40e0, 0x40fd, 0x412d, + 0x415a, 0x4184, 0x41a1, 0x41bb, 0x41ef, 0x4244, 0x4267, 0x429e, + 0x42e9, 0x4329, 0x4392, 0x43c6, 0x4437, 0x44b7, 0x4508, 0x454e, + 0x45d1, 0x4628, 0x4645, 0x466f, 0x46b7, 0x472e, 0x0094, 0x0013, + 0xffff, 0xffff, 0xffff, 0xffff, 0x1609, 0x16a7, 0x1722, 0x1790, + // Entry B6C0 - B6FF + 0x1802, 0x1892, 0x1904, 0xffff, 0x197f, 0x19ee, 0x1a66, 0x1ae6, + 0x1bb2, 0x1c29, 0x1ca4, 0x1d3a, 0x1e0c, 0x1ec0, 0x1f74, 0x1ff4, + 0x2062, 0xffff, 0xffff, 0x2119, 0xffff, 0x21b1, 0xffff, 0x2282, + 0x22f1, 0x234d, 0x23d7, 0xffff, 0xffff, 0x24b7, 0x2537, 0x2603, + 0xffff, 0xffff, 0xffff, 0x26dd, 0xffff, 0x27b3, 0x2836, 0xffff, + 0x28fe, 0x299f, 0x2a2b, 0xffff, 0xffff, 0xffff, 0xffff, 0x2b40, + 0xffff, 0xffff, 0x2bff, 0x2c9d, 0xffff, 0xffff, 0x2d85, 0x2e30, + 0x2eb3, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x303c, + // Entry B700 - B73F + 0x30ab, 0x3119, 0x3191, 0xffff, 0xffff, 0xffff, 0x3269, 0xffff, + 0x32fb, 0xffff, 0xffff, 0x33cb, 0xffff, 0x348b, 0xffff, 0xffff, + 0xffff, 0xffff, 0x3583, 0xffff, 0x3614, 0x36dd, 0x3788, 0x380b, + 0xffff, 0xffff, 0xffff, 0x38c7, 0x395c, 0x39f2, 0xffff, 0xffff, + 0x3aea, 0x3b8b, 0x3c0b, 0x3c79, 0xffff, 0xffff, 0x3d2f, 0x3d94, + 0x3df0, 0xffff, 0x3ea3, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x4003, 0xffff, 0x4071, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x41d5, 0xffff, 0xffff, 0x4284, 0xffff, 0x4300, + // Entry B740 - B77F + 0xffff, 0x43ac, 0x4411, 0x449a, 0xffff, 0x4528, 0x45b1, 0xffff, + 0xffff, 0xffff, 0x469a, 0x4708, 0x0094, 0x0013, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1673, 0x16f1, 0x176c, 0x17d4, 0x185a, 0x18d6, + 0x194e, 0xffff, 0x19c3, 0x1a38, 0x1abc, 0x1b64, 0x1c02, 0x1c73, + 0x1d02, 0x1dc0, 0x1e7e, 0x1f32, 0x1fca, 0x203e, 0x20b8, 0xffff, + 0xffff, 0x2163, 0xffff, 0x2221, 0xffff, 0x22c6, 0x232f, 0x23a3, + 0x242d, 0xffff, 0xffff, 0x250d, 0x25b9, 0x2641, 0xffff, 0xffff, + 0xffff, 0x2759, 0xffff, 0x280b, 0x28a2, 0xffff, 0x296a, 0x29fd, + // Entry B780 - B7BF + 0x2a69, 0xffff, 0xffff, 0xffff, 0xffff, 0x2b8a, 0xffff, 0xffff, + 0x2c69, 0x2d07, 0xffff, 0xffff, 0x2def, 0x2e88, 0x2ef7, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3080, 0x30f5, 0x3163, + 0x31db, 0xffff, 0xffff, 0xffff, 0x32b3, 0xffff, 0x3351, 0xffff, + 0xffff, 0x3429, 0xffff, 0x34d5, 0xffff, 0xffff, 0xffff, 0xffff, + 0x35d3, 0xffff, 0x3692, 0x3747, 0x37e0, 0x3855, 0xffff, 0xffff, + 0xffff, 0x392b, 0x39ba, 0x3a60, 0xffff, 0xffff, 0x3b56, 0x3be1, + 0x3c55, 0x3cc9, 0xffff, 0xffff, 0x3d73, 0x3dd2, 0x3e46, 0xffff, + // Entry B7C0 - B7FF + 0x3f23, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x404d, 0xffff, + 0x40b5, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x4219, 0xffff, 0xffff, 0x42c8, 0xffff, 0x4362, 0xffff, 0x43f0, + 0x446d, 0x44e4, 0xffff, 0x4584, 0x4601, 0xffff, 0xffff, 0xffff, + 0x46e4, 0x4764, 0x0003, 0x084c, 0x08ce, 0x088d, 0x003f, 0x0007, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0x000e, + 0x0019, 0x0024, 0x002f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x003a, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry B800 - B83F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0064, 0x003f, + 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0004, 0xffff, + 0x0011, 0x001c, 0x0027, 0x0032, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x003d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry B840 - B87F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0068, + 0x003f, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0009, + 0xffff, 0x0015, 0x0020, 0x002b, 0x0036, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0041, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry B880 - B8BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x006d, 0x0002, 0x0003, 0x0289, 0x0011, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0015, 0x00b2, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0240, 0x0008, 0x0000, + // Entry B8C0 - B8FF + 0x001e, 0x005f, 0x0078, 0x0000, 0x0090, 0x0000, 0x00a1, 0x0002, + 0x0021, 0x0040, 0x0003, 0x0025, 0x002e, 0x0037, 0x0007, 0x0014, + 0x0000, 0x0011, 0x0022, 0x0031, 0x0044, 0x0057, 0x0062, 0x0007, + 0x0014, 0x006d, 0x0070, 0x0073, 0x0076, 0x0079, 0x007c, 0x007f, + 0x0007, 0x0014, 0x0000, 0x0011, 0x0022, 0x0031, 0x0044, 0x0057, + 0x0062, 0x0003, 0x0044, 0x004d, 0x0056, 0x0007, 0x0014, 0x0000, + 0x0011, 0x0022, 0x0031, 0x0044, 0x0057, 0x0062, 0x0007, 0x0014, + 0x006d, 0x0070, 0x0073, 0x0076, 0x0079, 0x007c, 0x007f, 0x0007, + // Entry B900 - B93F + 0x0014, 0x0000, 0x0011, 0x0022, 0x0031, 0x0044, 0x0057, 0x0062, + 0x0002, 0x0062, 0x006d, 0x0003, 0x0000, 0x0000, 0x0066, 0x0005, + 0x0014, 0xffff, 0x0082, 0x009a, 0x00b2, 0x00c8, 0x0003, 0x0000, + 0x0000, 0x0071, 0x0005, 0x0014, 0xffff, 0x0082, 0x009a, 0x00b2, + 0x00c8, 0x0001, 0x007a, 0x0003, 0x007e, 0x0000, 0x0087, 0x0002, + 0x0081, 0x0084, 0x0001, 0x0014, 0x00e2, 0x0001, 0x0014, 0x00e8, + 0x0002, 0x008a, 0x008d, 0x0001, 0x0014, 0x00e2, 0x0001, 0x0014, + 0x00e8, 0x0004, 0x009e, 0x0098, 0x0095, 0x009b, 0x0001, 0x0000, + // Entry B940 - B97F + 0x0489, 0x0001, 0x0014, 0x00ee, 0x0001, 0x0000, 0x04a5, 0x0001, + 0x0000, 0x04af, 0x0004, 0x00af, 0x00a9, 0x00a6, 0x00ac, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0008, 0x00bb, 0x0120, 0x0177, 0x01ac, + 0x01ed, 0x020d, 0x021e, 0x022f, 0x0002, 0x00be, 0x00ef, 0x0003, + 0x00c2, 0x00d1, 0x00e0, 0x000d, 0x0014, 0xffff, 0x00fd, 0x0117, + 0x0122, 0x012d, 0x0138, 0x0143, 0x0154, 0x0161, 0x0168, 0x0177, + 0x018f, 0x01a7, 0x000d, 0x0014, 0xffff, 0x01bf, 0x007f, 0x01c2, + // Entry B980 - B9BF + 0x01c5, 0x01c2, 0x01c8, 0x01cb, 0x01c2, 0x01c2, 0x01cb, 0x01cb, + 0x01bf, 0x000d, 0x0014, 0xffff, 0x00fd, 0x0117, 0x0122, 0x012d, + 0x0138, 0x0143, 0x0154, 0x0161, 0x0168, 0x0177, 0x018f, 0x01a7, + 0x0003, 0x00f3, 0x0102, 0x0111, 0x000d, 0x0014, 0xffff, 0x00fd, + 0x0117, 0x0122, 0x012d, 0x0138, 0x0143, 0x0154, 0x0161, 0x0168, + 0x0177, 0x018f, 0x01a7, 0x000d, 0x0014, 0xffff, 0x01bf, 0x007f, + 0x01c2, 0x01c5, 0x01c2, 0x01c8, 0x01cb, 0x01c2, 0x01c2, 0x01cb, + 0x01cb, 0x01bf, 0x000d, 0x0014, 0xffff, 0x00fd, 0x0117, 0x0122, + // Entry B9C0 - B9FF + 0x012d, 0x0138, 0x0143, 0x0154, 0x0161, 0x0168, 0x0177, 0x018f, + 0x01a7, 0x0002, 0x0123, 0x014d, 0x0005, 0x0129, 0x0132, 0x0144, + 0x0000, 0x013b, 0x0007, 0x0014, 0x0000, 0x0011, 0x0022, 0x0031, + 0x0044, 0x0057, 0x0062, 0x0007, 0x0014, 0x006d, 0x0070, 0x0073, + 0x0076, 0x0079, 0x007c, 0x007f, 0x0007, 0x0014, 0x01ce, 0x01d3, + 0x01d8, 0x01dd, 0x01e2, 0x007c, 0x007f, 0x0007, 0x0014, 0x0000, + 0x0011, 0x0022, 0x0031, 0x0044, 0x0057, 0x0062, 0x0005, 0x0153, + 0x015c, 0x016e, 0x0000, 0x0165, 0x0007, 0x0014, 0x0000, 0x0011, + // Entry BA00 - BA3F + 0x0022, 0x0031, 0x0044, 0x0057, 0x0062, 0x0007, 0x0014, 0x006d, + 0x0070, 0x0073, 0x0076, 0x0079, 0x007c, 0x007f, 0x0007, 0x0014, + 0x01ce, 0x01d3, 0x01d8, 0x01dd, 0x01e2, 0x007c, 0x007f, 0x0007, + 0x0014, 0x0000, 0x0011, 0x0022, 0x0031, 0x0044, 0x0057, 0x0062, + 0x0002, 0x017a, 0x0193, 0x0003, 0x017e, 0x0185, 0x018c, 0x0005, + 0x0014, 0xffff, 0x01e7, 0x01ec, 0x01f1, 0x01f6, 0x0005, 0x0003, + 0xffff, 0x009d, 0x00a0, 0x00a3, 0x00a6, 0x0005, 0x0014, 0xffff, + 0x0082, 0x009a, 0x00b2, 0x00c8, 0x0003, 0x0197, 0x019e, 0x01a5, + // Entry BA40 - BA7F + 0x0005, 0x0014, 0xffff, 0x01e7, 0x01ec, 0x01f1, 0x01f6, 0x0005, + 0x0003, 0xffff, 0x009d, 0x00a0, 0x00a3, 0x00a6, 0x0005, 0x0014, + 0xffff, 0x0082, 0x009a, 0x00b2, 0x00c8, 0x0002, 0x01af, 0x01ce, + 0x0003, 0x01b3, 0x01bc, 0x01c5, 0x0002, 0x01b6, 0x01b9, 0x0001, + 0x0014, 0x00e2, 0x0001, 0x0014, 0x00e8, 0x0002, 0x01bf, 0x01c2, + 0x0001, 0x0014, 0x00e2, 0x0001, 0x0014, 0x00e8, 0x0002, 0x01c8, + 0x01cb, 0x0001, 0x0014, 0x00e2, 0x0001, 0x0014, 0x00e8, 0x0003, + 0x01d2, 0x01db, 0x01e4, 0x0002, 0x01d5, 0x01d8, 0x0001, 0x0014, + // Entry BA80 - BABF + 0x00e2, 0x0001, 0x0014, 0x00e8, 0x0002, 0x01de, 0x01e1, 0x0001, + 0x0014, 0x00e2, 0x0001, 0x0014, 0x00e8, 0x0002, 0x01e7, 0x01ea, + 0x0001, 0x0014, 0x00e2, 0x0001, 0x0014, 0x00e8, 0x0003, 0x01fc, + 0x0207, 0x01f1, 0x0002, 0x01f4, 0x01f8, 0x0002, 0x0014, 0x01fb, + 0x020d, 0x0002, 0x0000, 0x04f5, 0x04f9, 0x0002, 0x01ff, 0x0203, + 0x0002, 0x0014, 0x01fb, 0x020d, 0x0002, 0x0000, 0x04f5, 0x04f9, + 0x0001, 0x0209, 0x0002, 0x0014, 0x021a, 0x0220, 0x0004, 0x021b, + 0x0215, 0x0212, 0x0218, 0x0001, 0x0000, 0x04fc, 0x0001, 0x0014, + // Entry BAC0 - BAFF + 0x0223, 0x0001, 0x0000, 0x0514, 0x0001, 0x0000, 0x051c, 0x0004, + 0x022c, 0x0226, 0x0223, 0x0229, 0x0001, 0x0002, 0x04e3, 0x0001, + 0x0002, 0x04f2, 0x0001, 0x0002, 0x04fe, 0x0001, 0x0002, 0x0508, + 0x0004, 0x023d, 0x0237, 0x0234, 0x023a, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0242, 0x0002, 0x0245, 0x0267, 0x0003, 0x0249, + 0x0000, 0x0258, 0x000d, 0x0014, 0xffff, 0x0230, 0x0241, 0x0250, + 0x0261, 0x0270, 0x027f, 0x0290, 0x029d, 0x02ae, 0x02bf, 0x02d2, + // Entry BB00 - BB3F + 0x02e3, 0x000d, 0x0014, 0xffff, 0x0230, 0x0241, 0x0250, 0x0261, + 0x0270, 0x027f, 0x0290, 0x029d, 0x02ae, 0x02bf, 0x02d2, 0x02e3, + 0x0003, 0x026b, 0x0000, 0x027a, 0x000d, 0x0014, 0xffff, 0x0230, + 0x0241, 0x0250, 0x0261, 0x0270, 0x027f, 0x0290, 0x029d, 0x02ae, + 0x02bf, 0x02d2, 0x02e3, 0x000d, 0x0014, 0xffff, 0x0230, 0x0241, + 0x0250, 0x0261, 0x0270, 0x027f, 0x0290, 0x029d, 0x02ae, 0x02bf, + 0x02d2, 0x02e3, 0x003d, 0x0000, 0x0000, 0x0000, 0x02c7, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x02cc, 0x0000, 0x0000, 0x02d1, + // Entry BB40 - BB7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02d6, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x02e1, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x02e6, 0x0000, 0x0000, 0x02eb, 0x0000, 0x0000, 0x02f0, + 0x0001, 0x02c9, 0x0001, 0x0014, 0x02f0, 0x0001, 0x02ce, 0x0001, + 0x0014, 0x02f7, 0x0001, 0x02d3, 0x0001, 0x0014, 0x0300, 0x0002, + // Entry BB80 - BBBF + 0x02d9, 0x02dc, 0x0001, 0x0014, 0x030b, 0x0003, 0x0000, 0x1b2f, + 0x2248, 0x2253, 0x0001, 0x02e3, 0x0001, 0x0014, 0x0312, 0x0001, + 0x02e8, 0x0001, 0x0014, 0x0326, 0x0001, 0x02ed, 0x0001, 0x0014, + 0x0335, 0x0001, 0x02f2, 0x0001, 0x0014, 0x0340, 0x0001, 0x0002, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000b, 0x0007, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0013, 0x0004, 0x0021, 0x001b, 0x0018, 0x001e, 0x0001, 0x0000, + 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, + // Entry BBC0 - BBFF + 0x0000, 0x0546, 0x0003, 0x0004, 0x0d54, 0x133d, 0x0012, 0x0017, + 0x0055, 0x0094, 0x0140, 0x047a, 0x0000, 0x0526, 0x0551, 0x0782, + 0x082b, 0x08ce, 0x0000, 0x0000, 0x0000, 0x0000, 0x0971, 0x0c70, + 0x0d13, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0033, + 0x0000, 0x0044, 0x0003, 0x0029, 0x002e, 0x0024, 0x0001, 0x0026, + 0x0001, 0x0000, 0x0000, 0x0001, 0x002b, 0x0001, 0x0000, 0x0000, + 0x0001, 0x0030, 0x0001, 0x0000, 0x0000, 0x0004, 0x0041, 0x003b, + 0x0038, 0x003e, 0x0001, 0x0014, 0x0349, 0x0001, 0x0014, 0x035a, + // Entry BC00 - BC3F + 0x0001, 0x0014, 0x0366, 0x0001, 0x0014, 0x0370, 0x0004, 0x0052, + 0x004c, 0x0049, 0x004f, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0006, + 0x005c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0083, 0x0002, 0x005f, + 0x0071, 0x0002, 0x0000, 0x0062, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x0039, 0x003b, 0x003d, 0x003f, 0x0041, 0x0043, + 0x2215, 0x2218, 0x221b, 0x0002, 0x0000, 0x0074, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x003b, 0x003d, 0x003f, + // Entry BC40 - BC7F + 0x0041, 0x0043, 0x2215, 0x2218, 0x221b, 0x0004, 0x0091, 0x008b, + 0x0088, 0x008e, 0x0001, 0x0014, 0x037f, 0x0001, 0x0014, 0x038d, + 0x0001, 0x0014, 0x038d, 0x0001, 0x0014, 0x038d, 0x0008, 0x009d, + 0x0000, 0x0000, 0x0000, 0x0108, 0x011e, 0x0000, 0x012f, 0x0002, + 0x00a0, 0x00d4, 0x0003, 0x00a4, 0x00b4, 0x00c4, 0x000e, 0x0014, + 0xffff, 0x0395, 0x039a, 0x039f, 0x03a6, 0x03ac, 0x03b2, 0x03b9, + 0x03c2, 0x03cc, 0x03d4, 0x03de, 0x03e3, 0x03e9, 0x000e, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x003b, 0x003d, 0x003f, + // Entry BC80 - BCBF + 0x0041, 0x0043, 0x2215, 0x2218, 0x221b, 0x0422, 0x000e, 0x0014, + 0xffff, 0x0395, 0x039a, 0x039f, 0x03a6, 0x03ac, 0x03b2, 0x03b9, + 0x03c2, 0x03cc, 0x03d4, 0x03de, 0x03e3, 0x03e9, 0x0003, 0x00d8, + 0x00e8, 0x00f8, 0x000e, 0x0014, 0xffff, 0x0395, 0x039a, 0x039f, + 0x03a6, 0x03ac, 0x03b2, 0x03b9, 0x03c2, 0x03cc, 0x03d4, 0x03de, + 0x03e3, 0x03e9, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x0039, 0x003b, 0x003d, 0x003f, 0x0041, 0x0043, 0x2215, 0x2218, + 0x221b, 0x0422, 0x000e, 0x0014, 0xffff, 0x0395, 0x039a, 0x039f, + // Entry BCC0 - BCFF + 0x03a6, 0x03ac, 0x03b2, 0x03b9, 0x03c2, 0x03cc, 0x03d4, 0x03de, + 0x03e3, 0x03e9, 0x0003, 0x0112, 0x0118, 0x010c, 0x0001, 0x010e, + 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x0114, 0x0002, 0x0000, + 0x0425, 0x042a, 0x0001, 0x011a, 0x0002, 0x0000, 0x0425, 0x042a, + 0x0004, 0x012c, 0x0126, 0x0123, 0x0129, 0x0001, 0x0014, 0x0349, + 0x0001, 0x0014, 0x035a, 0x0001, 0x0014, 0x0366, 0x0001, 0x0014, + 0x0370, 0x0004, 0x013d, 0x0137, 0x0134, 0x013a, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + // Entry BD00 - BD3F + 0x0000, 0x03c6, 0x000a, 0x014b, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x01b0, 0x01c4, 0x0002, 0x014e, 0x017f, + 0x0003, 0x0152, 0x0161, 0x0170, 0x000d, 0x0000, 0xffff, 0x0003, + 0x0007, 0x000b, 0x000f, 0x0013, 0x0017, 0x001b, 0x001f, 0x0023, + 0x0027, 0x002b, 0x002f, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x0039, 0x003b, 0x003d, 0x003f, 0x0041, 0x0043, 0x2215, + 0x2218, 0x221b, 0x000d, 0x0014, 0xffff, 0x03ef, 0x03fe, 0x040d, + 0x041d, 0x042e, 0x043d, 0x044d, 0x045c, 0x046a, 0x047b, 0x048c, + // Entry BD40 - BD7F + 0x04a0, 0x0003, 0x0183, 0x0192, 0x01a1, 0x000d, 0x0000, 0xffff, + 0x0003, 0x0007, 0x000b, 0x000f, 0x0013, 0x0017, 0x001b, 0x001f, + 0x0023, 0x0027, 0x002b, 0x002f, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x0039, 0x003b, 0x003d, 0x003f, 0x0041, 0x0043, + 0x2215, 0x2218, 0x221b, 0x000d, 0x0014, 0xffff, 0x03ef, 0x03fe, + 0x040d, 0x041d, 0x042e, 0x043d, 0x044d, 0x045c, 0x046a, 0x047b, + 0x048c, 0x04a0, 0x0003, 0x01b4, 0x01bf, 0x01b9, 0x0003, 0x0000, + 0x004e, 0x0055, 0x004e, 0x0004, 0x0000, 0xffff, 0xffff, 0xffff, + // Entry BD80 - BDBF + 0x004e, 0x0003, 0x0000, 0x004e, 0x0055, 0x004e, 0x0006, 0x01cb, + 0x01fe, 0x02c1, 0x0000, 0x0384, 0x0447, 0x0001, 0x01cd, 0x0003, + 0x01d1, 0x01e0, 0x01ef, 0x000d, 0x0000, 0xffff, 0x005a, 0x005d, + 0x0062, 0x0066, 0x006a, 0x006f, 0x0072, 0x0075, 0x0079, 0x007e, + 0x221e, 0x0085, 0x000d, 0x0000, 0xffff, 0x005a, 0x005d, 0x0062, + 0x0066, 0x006a, 0x006f, 0x0072, 0x0075, 0x0079, 0x007e, 0x221e, + 0x0085, 0x000d, 0x0000, 0xffff, 0x005a, 0x005d, 0x0062, 0x0066, + 0x006a, 0x006f, 0x0072, 0x0075, 0x0079, 0x007e, 0x221e, 0x0085, + // Entry BDC0 - BDFF + 0x0001, 0x0200, 0x0003, 0x0204, 0x0243, 0x0282, 0x003d, 0x0000, + 0xffff, 0x01bd, 0x01c4, 0x01cc, 0x01d5, 0x01de, 0x01e6, 0x01ec, + 0x01f4, 0x01fc, 0x0205, 0x020d, 0x0214, 0x021b, 0x0223, 0x022d, + 0x0234, 0x023b, 0x0245, 0x024c, 0x0253, 0x025b, 0x0264, 0x026b, + 0x0273, 0x027c, 0x0282, 0x028a, 0x0293, 0x029b, 0x02a4, 0x02ab, + 0x02b2, 0x02b9, 0x02c3, 0x02cc, 0x02d2, 0x02d9, 0x02e1, 0x02ea, + 0x02f2, 0x02fa, 0x0303, 0x0309, 0x0311, 0x031a, 0x0322, 0x0329, + 0x0331, 0x0339, 0x0340, 0x0349, 0x0351, 0x0358, 0x0362, 0x036a, + // Entry BE00 - BE3F + 0x0370, 0x0377, 0x0381, 0x0389, 0x0390, 0x003d, 0x0000, 0xffff, + 0x01bd, 0x01c4, 0x01cc, 0x01d5, 0x01de, 0x01e6, 0x01ec, 0x01f4, + 0x01fc, 0x0205, 0x020d, 0x0214, 0x021b, 0x0223, 0x022d, 0x0234, + 0x023b, 0x0245, 0x024c, 0x0253, 0x025b, 0x0264, 0x026b, 0x0273, + 0x027c, 0x0282, 0x028a, 0x0293, 0x029b, 0x02a4, 0x02ab, 0x02b2, + 0x02b9, 0x02c3, 0x02cc, 0x02d2, 0x02d9, 0x02e1, 0x02ea, 0x02f2, + 0x02fa, 0x0303, 0x0309, 0x0311, 0x031a, 0x0322, 0x0329, 0x0331, + 0x0339, 0x0340, 0x0349, 0x0351, 0x0358, 0x0362, 0x036a, 0x0370, + // Entry BE40 - BE7F + 0x0377, 0x0381, 0x0389, 0x0390, 0x003d, 0x0000, 0xffff, 0x01bd, + 0x01c4, 0x01cc, 0x01d5, 0x01de, 0x01e6, 0x01ec, 0x01f4, 0x01fc, + 0x0205, 0x020d, 0x0214, 0x021b, 0x0223, 0x022d, 0x0234, 0x023b, + 0x0245, 0x024c, 0x0253, 0x025b, 0x0264, 0x026b, 0x0273, 0x027c, + 0x0282, 0x028a, 0x0293, 0x029b, 0x02a4, 0x02ab, 0x02b2, 0x02b9, + 0x02c3, 0x02cc, 0x02d2, 0x02d9, 0x02e1, 0x02ea, 0x02f2, 0x02fa, + 0x0303, 0x0309, 0x0311, 0x031a, 0x0322, 0x0329, 0x0331, 0x0339, + 0x0340, 0x0349, 0x0351, 0x0358, 0x0362, 0x036a, 0x0370, 0x0377, + // Entry BE80 - BEBF + 0x0381, 0x0389, 0x0390, 0x0001, 0x02c3, 0x0003, 0x02c7, 0x0306, + 0x0345, 0x003d, 0x0000, 0xffff, 0x01bd, 0x01c4, 0x01cc, 0x01d5, + 0x01de, 0x01e6, 0x01ec, 0x01f4, 0x01fc, 0x0205, 0x020d, 0x0214, + 0x021b, 0x0223, 0x022d, 0x0234, 0x023b, 0x0245, 0x024c, 0x0253, + 0x025b, 0x0264, 0x026b, 0x0273, 0x027c, 0x0282, 0x028a, 0x0293, + 0x029b, 0x02a4, 0x02ab, 0x02b2, 0x02b9, 0x02c3, 0x02cc, 0x02d2, + 0x02d9, 0x02e1, 0x02ea, 0x02f2, 0x02fa, 0x0303, 0x0309, 0x0311, + 0x031a, 0x0322, 0x0329, 0x0331, 0x0339, 0x0340, 0x0349, 0x0351, + // Entry BEC0 - BEFF + 0x0358, 0x0362, 0x036a, 0x0370, 0x0377, 0x0381, 0x0389, 0x0390, + 0x003d, 0x0000, 0xffff, 0x01bd, 0x01c4, 0x01cc, 0x01d5, 0x01de, + 0x01e6, 0x01ec, 0x01f4, 0x01fc, 0x0205, 0x020d, 0x0214, 0x021b, + 0x0223, 0x022d, 0x0234, 0x023b, 0x0245, 0x024c, 0x0253, 0x025b, + 0x0264, 0x026b, 0x0273, 0x027c, 0x0282, 0x028a, 0x0293, 0x029b, + 0x02a4, 0x02ab, 0x02b2, 0x02b9, 0x02c3, 0x02cc, 0x02d2, 0x02d9, + 0x02e1, 0x02ea, 0x02f2, 0x02fa, 0x0303, 0x0309, 0x0311, 0x031a, + 0x0322, 0x0329, 0x0331, 0x0339, 0x0340, 0x0349, 0x0351, 0x0358, + // Entry BF00 - BF3F + 0x0362, 0x036a, 0x0370, 0x0377, 0x0381, 0x0389, 0x0390, 0x003d, + 0x0000, 0xffff, 0x01bd, 0x01c4, 0x01cc, 0x01d5, 0x01de, 0x01e6, + 0x01ec, 0x01f4, 0x01fc, 0x0205, 0x020d, 0x0214, 0x021b, 0x0223, + 0x022d, 0x0234, 0x023b, 0x0245, 0x024c, 0x0253, 0x025b, 0x0264, + 0x026b, 0x0273, 0x027c, 0x0282, 0x028a, 0x0293, 0x029b, 0x02a4, + 0x02ab, 0x02b2, 0x02b9, 0x02c3, 0x02cc, 0x02d2, 0x02d9, 0x02e1, + 0x02ea, 0x02f2, 0x02fa, 0x0303, 0x0309, 0x0311, 0x031a, 0x0322, + 0x0329, 0x0331, 0x0339, 0x0340, 0x0349, 0x0351, 0x0358, 0x0362, + // Entry BF40 - BF7F + 0x036a, 0x0370, 0x0377, 0x0381, 0x0389, 0x0390, 0x0001, 0x0386, + 0x0003, 0x038a, 0x03c9, 0x0408, 0x003d, 0x0000, 0xffff, 0x01bd, + 0x01c4, 0x01cc, 0x01d5, 0x01de, 0x01e6, 0x01ec, 0x01f4, 0x01fc, + 0x0205, 0x020d, 0x0214, 0x021b, 0x0223, 0x022d, 0x0234, 0x023b, + 0x0245, 0x024c, 0x0253, 0x025b, 0x0264, 0x026b, 0x0273, 0x027c, + 0x0282, 0x028a, 0x0293, 0x029b, 0x02a4, 0x02ab, 0x02b2, 0x02b9, + 0x02c3, 0x02cc, 0x02d2, 0x02d9, 0x02e1, 0x02ea, 0x02f2, 0x02fa, + 0x0303, 0x0309, 0x0311, 0x031a, 0x0322, 0x0329, 0x0331, 0x0339, + // Entry BF80 - BFBF + 0x0340, 0x0349, 0x0351, 0x0358, 0x0362, 0x036a, 0x0370, 0x0377, + 0x0381, 0x0389, 0x0390, 0x003d, 0x0000, 0xffff, 0x01bd, 0x01c4, + 0x01cc, 0x01d5, 0x01de, 0x01e6, 0x01ec, 0x01f4, 0x01fc, 0x0205, + 0x020d, 0x0214, 0x021b, 0x0223, 0x022d, 0x0234, 0x023b, 0x0245, + 0x024c, 0x0253, 0x025b, 0x0264, 0x026b, 0x0273, 0x027c, 0x0282, + 0x028a, 0x0293, 0x029b, 0x02a4, 0x02ab, 0x02b2, 0x02b9, 0x02c3, + 0x02cc, 0x02d2, 0x02d9, 0x02e1, 0x02ea, 0x02f2, 0x02fa, 0x0303, + 0x0309, 0x0311, 0x031a, 0x0322, 0x0329, 0x0331, 0x0339, 0x0340, + // Entry BFC0 - BFFF + 0x0349, 0x0351, 0x0358, 0x0362, 0x036a, 0x0370, 0x0377, 0x0381, + 0x0389, 0x0390, 0x003d, 0x0000, 0xffff, 0x01bd, 0x01c4, 0x01cc, + 0x01d5, 0x01de, 0x01e6, 0x01ec, 0x01f4, 0x01fc, 0x0205, 0x020d, + 0x0214, 0x021b, 0x0223, 0x022d, 0x0234, 0x023b, 0x0245, 0x024c, + 0x0253, 0x025b, 0x0264, 0x026b, 0x0273, 0x027c, 0x0282, 0x028a, + 0x0293, 0x029b, 0x02a4, 0x02ab, 0x02b2, 0x02b9, 0x02c3, 0x02cc, + 0x02d2, 0x02d9, 0x02e1, 0x02ea, 0x02f2, 0x02fa, 0x0303, 0x0309, + 0x0311, 0x031a, 0x0322, 0x0329, 0x0331, 0x0339, 0x0340, 0x0349, + // Entry C000 - C03F + 0x0351, 0x0358, 0x0362, 0x036a, 0x0370, 0x0377, 0x0381, 0x0389, + 0x0390, 0x0001, 0x0449, 0x0003, 0x044d, 0x045c, 0x046b, 0x000d, + 0x0014, 0xffff, 0x04b3, 0x04b9, 0x04bf, 0x04c4, 0x04cb, 0x04d0, + 0x04d4, 0x04da, 0x04df, 0x04e5, 0x04ec, 0x04f0, 0x000d, 0x0014, + 0xffff, 0x04b3, 0x04b9, 0x04bf, 0x04c4, 0x04cb, 0x04d0, 0x04d4, + 0x04da, 0x04df, 0x04e5, 0x04ec, 0x04f0, 0x000d, 0x0014, 0xffff, + 0x04b3, 0x04b9, 0x04bf, 0x04c4, 0x04cb, 0x04d0, 0x04d4, 0x04da, + 0x04df, 0x04e5, 0x04ec, 0x04f0, 0x0008, 0x0483, 0x0000, 0x0000, + // Entry C040 - C07F + 0x0000, 0x04ee, 0x0504, 0x0000, 0x0515, 0x0002, 0x0486, 0x04ba, + 0x0003, 0x048a, 0x049a, 0x04aa, 0x000e, 0x0014, 0xffff, 0x04f6, + 0x04ff, 0x0507, 0x050d, 0x0515, 0x0519, 0x0521, 0x0529, 0x0530, + 0x0537, 0x053c, 0x0542, 0x0549, 0x000e, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x0039, 0x003b, 0x003d, 0x003f, 0x0041, 0x0043, + 0x2215, 0x2218, 0x221b, 0x0422, 0x000e, 0x0014, 0xffff, 0x04f6, + 0x04ff, 0x0507, 0x050d, 0x0515, 0x0519, 0x0521, 0x0529, 0x0530, + 0x0537, 0x053c, 0x0542, 0x0549, 0x0003, 0x04be, 0x04ce, 0x04de, + // Entry C080 - C0BF + 0x000e, 0x0014, 0xffff, 0x04f6, 0x04ff, 0x0507, 0x050d, 0x0515, + 0x0519, 0x0521, 0x0529, 0x0530, 0x0537, 0x053c, 0x0542, 0x0549, + 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x003b, + 0x003d, 0x003f, 0x0041, 0x0043, 0x2215, 0x2218, 0x221b, 0x0422, + 0x000e, 0x0014, 0xffff, 0x04f6, 0x04ff, 0x0507, 0x050d, 0x0515, + 0x0519, 0x0521, 0x0529, 0x0530, 0x0537, 0x053c, 0x0542, 0x0549, + 0x0003, 0x04f8, 0x04fe, 0x04f2, 0x0001, 0x04f4, 0x0002, 0x0000, + 0x0425, 0x042a, 0x0001, 0x04fa, 0x0002, 0x0000, 0x0425, 0x042a, + // Entry C0C0 - C0FF + 0x0001, 0x0500, 0x0002, 0x0000, 0x0425, 0x042a, 0x0004, 0x0512, + 0x050c, 0x0509, 0x050f, 0x0001, 0x0014, 0x0349, 0x0001, 0x0014, + 0x035a, 0x0001, 0x0014, 0x0366, 0x0001, 0x0014, 0x0370, 0x0004, + 0x0523, 0x051d, 0x051a, 0x0520, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x052f, 0x0000, + 0x0540, 0x0004, 0x053d, 0x0537, 0x0534, 0x053a, 0x0001, 0x0014, + 0x0349, 0x0001, 0x0014, 0x035a, 0x0001, 0x0014, 0x0366, 0x0001, + // Entry C100 - C13F + 0x0014, 0x0370, 0x0004, 0x054e, 0x0548, 0x0545, 0x054b, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0008, 0x055a, 0x05bf, 0x0616, 0x064b, + 0x0734, 0x074f, 0x0760, 0x0771, 0x0002, 0x055d, 0x058e, 0x0003, + 0x0561, 0x0570, 0x057f, 0x000d, 0x0014, 0xffff, 0x0550, 0x0554, + 0x0559, 0x055e, 0x0562, 0x0567, 0x056c, 0x0571, 0x0575, 0x057b, + 0x0581, 0x0585, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x0039, 0x003b, 0x003d, 0x003f, 0x0041, 0x0043, 0x2215, 0x2218, + // Entry C140 - C17F + 0x221b, 0x000d, 0x0014, 0xffff, 0x0589, 0x058f, 0x0596, 0x059e, + 0x05a4, 0x05ac, 0x05b4, 0x05be, 0x05c4, 0x05cc, 0x05d4, 0x05de, + 0x0003, 0x0592, 0x05a1, 0x05b0, 0x000d, 0x0014, 0xffff, 0x0550, + 0x0554, 0x0559, 0x055e, 0x0562, 0x0567, 0x056c, 0x0571, 0x0575, + 0x057b, 0x0581, 0x0585, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x0039, 0x003b, 0x003d, 0x003f, 0x0041, 0x0043, 0x2215, + 0x2218, 0x221b, 0x000d, 0x0014, 0xffff, 0x05e7, 0x05ed, 0x05f3, + 0x05fb, 0x0601, 0x0609, 0x0611, 0x061b, 0x05c4, 0x0621, 0x0629, + // Entry C180 - C1BF + 0x0632, 0x0002, 0x05c2, 0x05ec, 0x0005, 0x05c8, 0x05d1, 0x05e3, + 0x0000, 0x05da, 0x0007, 0x0014, 0x063b, 0x063e, 0x0641, 0x0645, + 0x0648, 0x064c, 0x0650, 0x0007, 0x0000, 0x21c4, 0x21dd, 0x225c, + 0x21c8, 0x21e1, 0x21dd, 0x21c8, 0x0007, 0x0014, 0x063b, 0x063e, + 0x0641, 0x0645, 0x0648, 0x064c, 0x0650, 0x0007, 0x0014, 0x0653, + 0x065b, 0x0665, 0x066d, 0x0675, 0x067e, 0x0685, 0x0005, 0x05f2, + 0x05fb, 0x060d, 0x0000, 0x0604, 0x0007, 0x0014, 0x063b, 0x063e, + 0x0641, 0x0645, 0x0648, 0x064c, 0x0650, 0x0007, 0x0000, 0x21c4, + // Entry C1C0 - C1FF + 0x21dd, 0x225c, 0x21c8, 0x21e1, 0x21dd, 0x21c8, 0x0007, 0x0014, + 0x063b, 0x063e, 0x0641, 0x0645, 0x0648, 0x064c, 0x0650, 0x0007, + 0x0014, 0x0653, 0x065b, 0x0665, 0x066d, 0x0675, 0x067e, 0x0685, + 0x0002, 0x0619, 0x0632, 0x0003, 0x061d, 0x0624, 0x062b, 0x0005, + 0x0000, 0xffff, 0x04e3, 0x04e6, 0x04e9, 0x04ec, 0x0005, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x0005, 0x0014, 0xffff, + 0x068c, 0x069b, 0x06aa, 0x06b9, 0x0003, 0x0636, 0x063d, 0x0644, + 0x0005, 0x0000, 0xffff, 0x04e3, 0x04e6, 0x04e9, 0x04ec, 0x0005, + // Entry C200 - C23F + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x0005, 0x0014, + 0xffff, 0x068c, 0x069b, 0x06aa, 0x06b9, 0x0002, 0x064e, 0x06c1, + 0x0003, 0x0652, 0x0677, 0x069c, 0x0009, 0x065f, 0x0665, 0x065c, + 0x0668, 0x066e, 0x0671, 0x0674, 0x0662, 0x066b, 0x0001, 0x0014, + 0x06c8, 0x0001, 0x0014, 0x06cf, 0x0001, 0x0014, 0x06d4, 0x0001, + 0x0014, 0x06d9, 0x0001, 0x0014, 0x06de, 0x0001, 0x0014, 0x06cf, + 0x0001, 0x0014, 0x06d9, 0x0001, 0x0014, 0x06e1, 0x0001, 0x0014, + 0x06e7, 0x0009, 0x0684, 0x068a, 0x0681, 0x068d, 0x0693, 0x0696, + // Entry C240 - C27F + 0x0699, 0x0687, 0x0690, 0x0001, 0x0014, 0x06ec, 0x0001, 0x0014, + 0x06cf, 0x0001, 0x0014, 0x06d4, 0x0001, 0x0014, 0x06d9, 0x0001, + 0x0014, 0x06de, 0x0001, 0x0001, 0x02ab, 0x0001, 0x0014, 0x06f2, + 0x0001, 0x0014, 0x06f5, 0x0001, 0x0014, 0x06f8, 0x0009, 0x06a9, + 0x06af, 0x06a6, 0x06b2, 0x06b8, 0x06bb, 0x06be, 0x06ac, 0x06b5, + 0x0001, 0x0014, 0x06fb, 0x0001, 0x0014, 0x06cf, 0x0001, 0x0014, + 0x0703, 0x0001, 0x0014, 0x06d9, 0x0001, 0x0014, 0x070b, 0x0001, + 0x0014, 0x0711, 0x0001, 0x0014, 0x071b, 0x0001, 0x0014, 0x0725, + // Entry C280 - C2BF + 0x0001, 0x0014, 0x072c, 0x0003, 0x06c5, 0x06ea, 0x070f, 0x0009, + 0x06d2, 0x06d8, 0x06cf, 0x06db, 0x06e1, 0x06e4, 0x06e7, 0x06d5, + 0x06de, 0x0001, 0x0014, 0x06fb, 0x0001, 0x0014, 0x06cf, 0x0001, + 0x0014, 0x0703, 0x0001, 0x0014, 0x06d9, 0x0001, 0x0014, 0x070b, + 0x0001, 0x0014, 0x0711, 0x0001, 0x0014, 0x071b, 0x0001, 0x0014, + 0x0725, 0x0001, 0x0014, 0x0733, 0x0009, 0x06f7, 0x06fd, 0x06f4, + 0x0700, 0x0706, 0x0709, 0x070c, 0x06fa, 0x0703, 0x0001, 0x0014, + 0x06ec, 0x0001, 0x0014, 0x06cf, 0x0001, 0x0014, 0x06d4, 0x0001, + // Entry C2C0 - C2FF + 0x0014, 0x06d9, 0x0001, 0x0014, 0x070b, 0x0001, 0x0014, 0x06cf, + 0x0001, 0x0014, 0x06d9, 0x0001, 0x0014, 0x06e1, 0x0001, 0x0014, + 0x0733, 0x0009, 0x071c, 0x0722, 0x0719, 0x0725, 0x072b, 0x072e, + 0x0731, 0x071f, 0x0728, 0x0001, 0x0014, 0x06fb, 0x0001, 0x0014, + 0x06cf, 0x0001, 0x0014, 0x0703, 0x0001, 0x0014, 0x06d9, 0x0001, + 0x0014, 0x070b, 0x0001, 0x0014, 0x0711, 0x0001, 0x0014, 0x071b, + 0x0001, 0x0014, 0x0725, 0x0001, 0x0014, 0x0733, 0x0003, 0x0743, + 0x0749, 0x0738, 0x0002, 0x073b, 0x073f, 0x0002, 0x0014, 0x0737, + // Entry C300 - C33F + 0x075c, 0x0002, 0x0014, 0x0751, 0x076f, 0x0001, 0x0745, 0x0002, + 0x0014, 0x0751, 0x076f, 0x0001, 0x074b, 0x0002, 0x0014, 0x0775, + 0x077e, 0x0004, 0x075d, 0x0757, 0x0754, 0x075a, 0x0001, 0x0014, + 0x0783, 0x0001, 0x0014, 0x0792, 0x0001, 0x0014, 0x038d, 0x0001, + 0x0007, 0x02e9, 0x0004, 0x076e, 0x0768, 0x0765, 0x076b, 0x0001, + 0x0005, 0x0082, 0x0001, 0x0005, 0x008f, 0x0001, 0x0005, 0x0099, + 0x0001, 0x0005, 0x00a1, 0x0004, 0x077f, 0x0779, 0x0776, 0x077c, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + // Entry C340 - C37F + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x078b, 0x0000, 0x0000, + 0x0000, 0x07f6, 0x0809, 0x0000, 0x081a, 0x0002, 0x078e, 0x07c2, + 0x0003, 0x0792, 0x07a2, 0x07b2, 0x000e, 0x0014, 0x07cc, 0x079c, + 0x07a3, 0x07ac, 0x07b3, 0x07b9, 0x07c0, 0x07c7, 0x07d4, 0x07da, + 0x07df, 0x07e5, 0x07eb, 0x07ee, 0x000e, 0x0000, 0x003f, 0x0033, + 0x0035, 0x0037, 0x0039, 0x003b, 0x003d, 0x003f, 0x0041, 0x0043, + 0x2215, 0x2218, 0x221b, 0x0422, 0x000e, 0x0014, 0x07cc, 0x079c, + 0x07a3, 0x07ac, 0x07b3, 0x07b9, 0x07c0, 0x07c7, 0x07d4, 0x07da, + // Entry C380 - C3BF + 0x07df, 0x07e5, 0x07eb, 0x07ee, 0x0003, 0x07c6, 0x07d6, 0x07e6, + 0x000e, 0x0014, 0x07cc, 0x079c, 0x07a3, 0x07ac, 0x07b3, 0x07b9, + 0x07c0, 0x07c7, 0x07d4, 0x07da, 0x07df, 0x07e5, 0x07eb, 0x07ee, + 0x000e, 0x0000, 0x003f, 0x0033, 0x0035, 0x0037, 0x0039, 0x003b, + 0x003d, 0x003f, 0x0041, 0x0043, 0x2215, 0x2218, 0x221b, 0x0422, + 0x000e, 0x0014, 0x07cc, 0x079c, 0x07a3, 0x07ac, 0x07b3, 0x07b9, + 0x07c0, 0x07c7, 0x07d4, 0x07da, 0x07df, 0x07e5, 0x07eb, 0x07ee, + 0x0003, 0x07ff, 0x0804, 0x07fa, 0x0001, 0x07fc, 0x0001, 0x0000, + // Entry C3C0 - C3FF + 0x04ef, 0x0001, 0x0801, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0806, + 0x0001, 0x0000, 0x04ef, 0x0004, 0x0817, 0x0811, 0x080e, 0x0814, + 0x0001, 0x0014, 0x0349, 0x0001, 0x0014, 0x035a, 0x0001, 0x0014, + 0x0366, 0x0001, 0x0014, 0x0370, 0x0004, 0x0828, 0x0822, 0x081f, + 0x0825, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x0834, 0x0000, + 0x0000, 0x0000, 0x0899, 0x08ac, 0x0000, 0x08bd, 0x0002, 0x0837, + 0x0868, 0x0003, 0x083b, 0x084a, 0x0859, 0x000d, 0x0014, 0xffff, + // Entry C400 - C43F + 0x07f3, 0x07fb, 0x0805, 0x0810, 0x0819, 0x0823, 0x082e, 0x0836, + 0x083e, 0x0849, 0x084f, 0x0855, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x0039, 0x003b, 0x003d, 0x003f, 0x0041, 0x0043, + 0x2215, 0x2218, 0x221b, 0x000d, 0x0014, 0xffff, 0x07f3, 0x07fb, + 0x0805, 0x0810, 0x0819, 0x0823, 0x082e, 0x0836, 0x083e, 0x0849, + 0x084f, 0x0855, 0x0003, 0x086c, 0x087b, 0x088a, 0x000d, 0x0014, + 0xffff, 0x07f3, 0x07fb, 0x0805, 0x0810, 0x0819, 0x0823, 0x082e, + 0x0836, 0x083e, 0x0849, 0x084f, 0x0855, 0x000d, 0x0000, 0xffff, + // Entry C440 - C47F + 0x0033, 0x0035, 0x0037, 0x0039, 0x003b, 0x003d, 0x003f, 0x0041, + 0x0043, 0x2215, 0x2218, 0x221b, 0x000d, 0x0014, 0xffff, 0x07f3, + 0x07fb, 0x0805, 0x0810, 0x0819, 0x0823, 0x082e, 0x0836, 0x083e, + 0x0849, 0x084f, 0x0855, 0x0003, 0x08a2, 0x08a7, 0x089d, 0x0001, + 0x089f, 0x0001, 0x0014, 0x085e, 0x0001, 0x08a4, 0x0001, 0x0014, + 0x085e, 0x0001, 0x08a9, 0x0001, 0x0014, 0x085e, 0x0004, 0x08ba, + 0x08b4, 0x08b1, 0x08b7, 0x0001, 0x0014, 0x0349, 0x0001, 0x0014, + 0x035a, 0x0001, 0x0014, 0x0366, 0x0001, 0x0014, 0x0370, 0x0004, + // Entry C480 - C4BF + 0x08cb, 0x08c5, 0x08c2, 0x08c8, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0008, 0x08d7, 0x0000, 0x0000, 0x0000, 0x093c, 0x094f, 0x0000, + 0x0960, 0x0002, 0x08da, 0x090b, 0x0003, 0x08de, 0x08ed, 0x08fc, + 0x000d, 0x000d, 0xffff, 0x022d, 0x0232, 0x31c6, 0x31cd, 0x31d5, + 0x31de, 0x31e8, 0x0260, 0x0265, 0x31ed, 0x31f3, 0x31fc, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x003b, 0x003d, + 0x003f, 0x0041, 0x0043, 0x2215, 0x2218, 0x221b, 0x000d, 0x0014, + // Entry C4C0 - C4FF + 0xffff, 0x0864, 0x086d, 0x0873, 0x0885, 0x0898, 0x08ac, 0x08c2, + 0x08ca, 0x08d5, 0x08de, 0x08e6, 0x08f4, 0x0003, 0x090f, 0x091e, + 0x092d, 0x000d, 0x000d, 0xffff, 0x022d, 0x0232, 0x31c6, 0x31cd, + 0x31d5, 0x31de, 0x31e8, 0x0260, 0x0265, 0x31ed, 0x31f3, 0x31fc, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x003b, + 0x003d, 0x003f, 0x0041, 0x0043, 0x2215, 0x2218, 0x221b, 0x000d, + 0x0014, 0xffff, 0x0864, 0x086d, 0x0873, 0x0885, 0x0898, 0x08ac, + 0x08c2, 0x08ca, 0x08d5, 0x08de, 0x08e6, 0x08f4, 0x0003, 0x0945, + // Entry C500 - C53F + 0x094a, 0x0940, 0x0001, 0x0942, 0x0001, 0x0000, 0x06c8, 0x0001, + 0x0947, 0x0001, 0x0000, 0x06c8, 0x0001, 0x094c, 0x0001, 0x0000, + 0x06c8, 0x0004, 0x095d, 0x0957, 0x0954, 0x095a, 0x0001, 0x0014, + 0x0349, 0x0001, 0x0014, 0x035a, 0x0001, 0x0014, 0x0366, 0x0001, + 0x0014, 0x0370, 0x0004, 0x096e, 0x0968, 0x0965, 0x096b, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x097a, 0x0c4e, 0x0000, 0x0c5f, 0x0003, 0x0a6e, 0x0b5e, 0x097e, + // Entry C540 - C57F + 0x0001, 0x0980, 0x00ec, 0x0000, 0x06cb, 0x06dd, 0x06f1, 0x0705, + 0x0719, 0x072c, 0x073e, 0x0750, 0x0762, 0x0775, 0x0787, 0x206c, + 0x2085, 0x209f, 0x20b7, 0x20cf, 0x081e, 0x20e5, 0x0843, 0x0857, + 0x086a, 0x087d, 0x0891, 0x08a3, 0x08b5, 0x08c7, 0x20f6, 0x08ed, + 0x0900, 0x0914, 0x0926, 0x093a, 0x094e, 0x095f, 0x0972, 0x0985, + 0x0999, 0x09ae, 0x09c2, 0x09d3, 0x09e6, 0x09f7, 0x0a0b, 0x0a20, + 0x0a33, 0x0a46, 0x0a58, 0x0a6a, 0x0a7b, 0x0a8c, 0x0aa2, 0x0ab7, + 0x0acc, 0x0ae1, 0x0af6, 0x0b0b, 0x0b1e, 0x0b32, 0x0b48, 0x0b60, + // Entry C580 - C5BF + 0x0b77, 0x0b8d, 0x0ba2, 0x0bb6, 0x0bcb, 0x0be1, 0x0bf6, 0x0c0b, + 0x0c23, 0x0c37, 0x0c4c, 0x0c60, 0x0c74, 0x0c89, 0x0c9f, 0x0cb3, + 0x0cc8, 0x0cdd, 0x2107, 0x0d07, 0x0d1c, 0x0d33, 0x0d47, 0x0d5b, + 0x0d6f, 0x0d85, 0x0d9c, 0x0db0, 0x0dc3, 0x0dd7, 0x0def, 0x0e04, + 0x0e19, 0x0e2e, 0x0e43, 0x0e57, 0x0e6d, 0x0e80, 0x0e96, 0x0eaa, + 0x0ec1, 0x0ed4, 0x0ee9, 0x0efd, 0x0f12, 0x0f26, 0x0f39, 0x0f50, + 0x0f64, 0x0f7a, 0x0f8f, 0x0fa4, 0x0fba, 0x0fd1, 0x0fe6, 0x0ffd, + 0x1012, 0x1028, 0x103c, 0x1051, 0x1066, 0x107a, 0x108e, 0x10a2, + // Entry C5C0 - C5FF + 0x10b8, 0x10cf, 0x10e3, 0x10fa, 0x1110, 0x1124, 0x1139, 0x114d, + 0x1163, 0x1178, 0x118d, 0x11a3, 0x11ba, 0x11d0, 0x11e7, 0x11fb, + 0x120f, 0x1224, 0x1238, 0x124d, 0x1262, 0x1276, 0x128b, 0x12a0, + 0x12b5, 0x12ca, 0x12df, 0x12f3, 0x1308, 0x131f, 0x1335, 0x134b, + 0x1360, 0x1374, 0x1388, 0x139e, 0x13b4, 0x13ca, 0x13e0, 0x13f4, + 0x140b, 0x141f, 0x1435, 0x144b, 0x145f, 0x1473, 0x1489, 0x149c, + 0x14b3, 0x14c8, 0x14de, 0x14f5, 0x150b, 0x1522, 0x1538, 0x154f, + 0x1565, 0x157b, 0x158f, 0x15a4, 0x15bb, 0x15d0, 0x15e4, 0x15f8, + // Entry C600 - C63F + 0x160d, 0x1621, 0x1638, 0x164d, 0x1661, 0x1676, 0x168a, 0x16a0, + 0x16b6, 0x16cc, 0x16e0, 0x16f7, 0x170c, 0x1720, 0x1734, 0x174a, + 0x175e, 0x1773, 0x1787, 0x179b, 0x17b1, 0x17c7, 0x17db, 0x17f2, + 0x1808, 0x181d, 0x1832, 0x1847, 0x185e, 0x1874, 0x1888, 0x189e, + 0x18b3, 0x18c8, 0x18dd, 0x18f1, 0x1906, 0x191b, 0x192f, 0x1942, + 0x1956, 0x196d, 0x1983, 0x1997, 0x225f, 0x2265, 0x226d, 0x2274, + 0x0001, 0x0a70, 0x00ec, 0x0000, 0x06cb, 0x06dd, 0x06f1, 0x0705, + 0x0719, 0x072c, 0x073e, 0x0750, 0x0762, 0x0775, 0x0787, 0x206c, + // Entry C640 - C67F + 0x2085, 0x209f, 0x20b7, 0x20cf, 0x081e, 0x20e5, 0x0843, 0x0857, + 0x086a, 0x087d, 0x0891, 0x08a3, 0x08b5, 0x08c7, 0x20f6, 0x08ed, + 0x0900, 0x0914, 0x0926, 0x093a, 0x094e, 0x095f, 0x0972, 0x0985, + 0x0999, 0x09ae, 0x09c2, 0x09d3, 0x09e6, 0x09f7, 0x0a0b, 0x0a20, + 0x0a33, 0x0a46, 0x0a58, 0x0a6a, 0x0a7b, 0x0a8c, 0x0aa2, 0x0ab7, + 0x0acc, 0x0ae1, 0x0af6, 0x0b0b, 0x0b1e, 0x0b32, 0x0b48, 0x0b60, + 0x0b77, 0x0b8d, 0x0ba2, 0x0bb6, 0x0bcb, 0x0be1, 0x0bf6, 0x0c0b, + 0x0c23, 0x0c37, 0x0c4c, 0x0c60, 0x0c74, 0x0c89, 0x0c9f, 0x0cb3, + // Entry C680 - C6BF + 0x0cc8, 0x0cdd, 0x2107, 0x0d07, 0x0d1c, 0x0d33, 0x0d47, 0x0d5b, + 0x0d6f, 0x0d85, 0x0d9c, 0x0db0, 0x0dc3, 0x0dd7, 0x0def, 0x0e04, + 0x0e19, 0x0e2e, 0x0e43, 0x0e57, 0x0e6d, 0x0e80, 0x0e96, 0x0eaa, + 0x0ec1, 0x0ed4, 0x0ee9, 0x0efd, 0x0f12, 0x0f26, 0x0f39, 0x0f50, + 0x0f64, 0x0f7a, 0x0f8f, 0x0fa4, 0x0fba, 0x0fd1, 0x0fe6, 0x0ffd, + 0x1012, 0x1028, 0x103c, 0x1051, 0x1066, 0x107a, 0x108e, 0x10a2, + 0x10b8, 0x10cf, 0x10e3, 0x10fa, 0x1110, 0x1124, 0x1139, 0x114d, + 0x1163, 0x1178, 0x118d, 0x11a3, 0x11ba, 0x11d0, 0x11e7, 0x11fb, + // Entry C6C0 - C6FF + 0x120f, 0x1224, 0x1238, 0x124d, 0x1262, 0x1276, 0x128b, 0x12a0, + 0x12b5, 0x12ca, 0x12df, 0x12f3, 0x1308, 0x131f, 0x1335, 0x134b, + 0x1360, 0x1374, 0x1388, 0x139e, 0x13b4, 0x13ca, 0x13e0, 0x13f4, + 0x140b, 0x141f, 0x1435, 0x144b, 0x145f, 0x1473, 0x1489, 0x149c, + 0x14b3, 0x14c8, 0x14de, 0x14f5, 0x150b, 0x1522, 0x1538, 0x154f, + 0x1565, 0x157b, 0x158f, 0x15a4, 0x15bb, 0x15d0, 0x15e4, 0x15f8, + 0x160d, 0x1621, 0x1638, 0x164d, 0x1661, 0x1676, 0x168a, 0x16a0, + 0x16b6, 0x16cc, 0x16e0, 0x16f7, 0x170c, 0x1720, 0x1734, 0x174a, + // Entry C700 - C73F + 0x175e, 0x1773, 0x1787, 0x179b, 0x17b1, 0x17c7, 0x17db, 0x17f2, + 0x1808, 0x181d, 0x1832, 0x1847, 0x185e, 0x1874, 0x1888, 0x189e, + 0x18b3, 0x18c8, 0x18dd, 0x18f1, 0x1906, 0x191b, 0x192f, 0x1942, + 0x1956, 0x196d, 0x1983, 0x1997, 0x225f, 0x2265, 0x226d, 0x2274, + 0x0001, 0x0b60, 0x00ec, 0x0000, 0x06cb, 0x06dd, 0x06f1, 0x0705, + 0x0719, 0x072c, 0x073e, 0x0750, 0x0762, 0x0775, 0x0787, 0x206c, + 0x2085, 0x209f, 0x20b7, 0x20cf, 0x081e, 0x20e5, 0x0843, 0x0857, + 0x086a, 0x087d, 0x0891, 0x08a3, 0x08b5, 0x08c7, 0x20f6, 0x08ed, + // Entry C740 - C77F + 0x0900, 0x0914, 0x0926, 0x093a, 0x094e, 0x095f, 0x0972, 0x0985, + 0x0999, 0x09ae, 0x09c2, 0x09d3, 0x09e6, 0x09f7, 0x0a0b, 0x0a20, + 0x0a33, 0x0a46, 0x0a58, 0x0a6a, 0x0a7b, 0x0a8c, 0x0aa2, 0x0ab7, + 0x0acc, 0x0ae1, 0x0af6, 0x0b0b, 0x0b1e, 0x0b32, 0x0b48, 0x0b60, + 0x0b77, 0x0b8d, 0x0ba2, 0x0bb6, 0x0bcb, 0x0be1, 0x0bf6, 0x0c0b, + 0x0c23, 0x0c37, 0x0c4c, 0x0c60, 0x0c74, 0x0c89, 0x0c9f, 0x0cb3, + 0x0cc8, 0x0cdd, 0x2107, 0x0d07, 0x0d1c, 0x0d33, 0x0d47, 0x0d5b, + 0x0d6f, 0x0d85, 0x0d9c, 0x0db0, 0x0dc3, 0x0dd7, 0x0def, 0x0e04, + // Entry C780 - C7BF + 0x0e19, 0x0e2e, 0x0e43, 0x0e57, 0x0e6d, 0x0e80, 0x0e96, 0x0eaa, + 0x0ec1, 0x0ed4, 0x0ee9, 0x0efd, 0x0f12, 0x0f26, 0x0f39, 0x0f50, + 0x0f64, 0x0f7a, 0x0f8f, 0x0fa4, 0x0fba, 0x0fd1, 0x0fe6, 0x0ffd, + 0x1012, 0x1028, 0x103c, 0x1051, 0x1066, 0x107a, 0x108e, 0x10a2, + 0x10b8, 0x10cf, 0x10e3, 0x10fa, 0x1110, 0x1124, 0x1139, 0x114d, + 0x1163, 0x1178, 0x118d, 0x11a3, 0x11ba, 0x11d0, 0x11e7, 0x11fb, + 0x120f, 0x1224, 0x1238, 0x124d, 0x1262, 0x1276, 0x128b, 0x12a0, + 0x12b5, 0x12ca, 0x12df, 0x12f3, 0x1308, 0x131f, 0x1335, 0x134b, + // Entry C7C0 - C7FF + 0x1360, 0x1374, 0x1388, 0x139e, 0x13b4, 0x13ca, 0x13e0, 0x13f4, + 0x140b, 0x141f, 0x1435, 0x144b, 0x145f, 0x1473, 0x1489, 0x149c, + 0x14b3, 0x14c8, 0x14de, 0x14f5, 0x150b, 0x1522, 0x1538, 0x154f, + 0x1565, 0x157b, 0x158f, 0x15a4, 0x15bb, 0x15d0, 0x15e4, 0x15f8, + 0x160d, 0x1621, 0x1638, 0x164d, 0x1661, 0x1676, 0x168a, 0x16a0, + 0x16b6, 0x16cc, 0x16e0, 0x16f7, 0x170c, 0x1720, 0x1734, 0x174a, + 0x175e, 0x1773, 0x1787, 0x179b, 0x17b1, 0x17c7, 0x17db, 0x17f2, + 0x1808, 0x181d, 0x1832, 0x1847, 0x185e, 0x1874, 0x1888, 0x189e, + // Entry C800 - C83F + 0x18b3, 0x18c8, 0x18dd, 0x18f1, 0x1906, 0x191b, 0x192f, 0x1942, + 0x1956, 0x196d, 0x1983, 0x1997, 0x2242, 0x04dd, 0x21c8, 0x19c7, + 0x0004, 0x0c5c, 0x0c56, 0x0c53, 0x0c59, 0x0001, 0x0014, 0x0904, + 0x0001, 0x0014, 0x035a, 0x0001, 0x0014, 0x0366, 0x0001, 0x0014, + 0x0370, 0x0004, 0x0c6d, 0x0c67, 0x0c64, 0x0c6a, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0008, 0x0c79, 0x0000, 0x0000, 0x0000, 0x0cde, + 0x0cf1, 0x0000, 0x0d02, 0x0002, 0x0c7c, 0x0cad, 0x0003, 0x0c80, + // Entry C840 - C87F + 0x0c8f, 0x0c9e, 0x000d, 0x0014, 0xffff, 0x0916, 0x0920, 0x092c, + 0x0935, 0x093a, 0x0942, 0x094d, 0x0952, 0x0959, 0x095f, 0x0963, + 0x096a, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, + 0x003b, 0x003d, 0x003f, 0x0041, 0x0043, 0x2215, 0x2218, 0x221b, + 0x000d, 0x0014, 0xffff, 0x0916, 0x0920, 0x092c, 0x0935, 0x093a, + 0x0942, 0x094d, 0x0952, 0x0959, 0x095f, 0x0963, 0x096a, 0x0003, + 0x0cb1, 0x0cc0, 0x0ccf, 0x000d, 0x0014, 0xffff, 0x0916, 0x0920, + 0x092c, 0x0935, 0x093a, 0x0942, 0x094d, 0x0952, 0x0959, 0x095f, + // Entry C880 - C8BF + 0x0963, 0x096a, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x0039, 0x003b, 0x003d, 0x003f, 0x0041, 0x0043, 0x2215, 0x2218, + 0x221b, 0x000d, 0x0014, 0xffff, 0x0916, 0x0920, 0x092c, 0x0935, + 0x093a, 0x0942, 0x094d, 0x0952, 0x0959, 0x095f, 0x0963, 0x096a, + 0x0003, 0x0ce7, 0x0cec, 0x0ce2, 0x0001, 0x0ce4, 0x0001, 0x0000, + 0x1a1d, 0x0001, 0x0ce9, 0x0001, 0x0000, 0x1a1d, 0x0001, 0x0cee, + 0x0001, 0x0000, 0x1a1d, 0x0004, 0x0cff, 0x0cf9, 0x0cf6, 0x0cfc, + 0x0001, 0x0014, 0x0349, 0x0001, 0x0014, 0x035a, 0x0001, 0x0014, + // Entry C8C0 - C8FF + 0x0366, 0x0001, 0x0014, 0x0370, 0x0004, 0x0d10, 0x0d0a, 0x0d07, + 0x0d0d, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0d1c, 0x0d32, 0x0000, 0x0d43, 0x0003, 0x0d26, + 0x0d2c, 0x0d20, 0x0001, 0x0d22, 0x0002, 0x0014, 0x0971, 0x097b, + 0x0001, 0x0d28, 0x0002, 0x0014, 0x0971, 0x097b, 0x0001, 0x0d2e, + 0x0002, 0x0014, 0x0971, 0x097b, 0x0004, 0x0d40, 0x0d3a, 0x0d37, + 0x0d3d, 0x0001, 0x0014, 0x0349, 0x0001, 0x0014, 0x035a, 0x0001, + // Entry C900 - C93F + 0x0014, 0x0366, 0x0001, 0x0014, 0x0370, 0x0004, 0x0d51, 0x0d4b, + 0x0d48, 0x0d4e, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0042, 0x0d97, + 0x0d9c, 0x0da1, 0x0da6, 0x0dc5, 0x0de4, 0x0e03, 0x0e22, 0x0e41, + 0x0e60, 0x0e7f, 0x0e9e, 0x0ebd, 0x0ee0, 0x0f03, 0x0f26, 0x0f2b, + 0x0f30, 0x0f35, 0x0f56, 0x0f77, 0x0f98, 0x0f9d, 0x0fa2, 0x0fa7, + 0x0fac, 0x0fb1, 0x0fb6, 0x0fbb, 0x0fc0, 0x0fc5, 0x0fe1, 0x0ffd, + 0x1019, 0x1035, 0x1051, 0x106d, 0x1089, 0x10a5, 0x10c1, 0x10dd, + // Entry C940 - C97F + 0x10f9, 0x1115, 0x1131, 0x114d, 0x1169, 0x1185, 0x11a1, 0x11bd, + 0x11d9, 0x11f5, 0x1211, 0x1216, 0x121b, 0x1220, 0x123e, 0x125c, + 0x127a, 0x1298, 0x12b6, 0x12d4, 0x12f2, 0x1310, 0x132e, 0x1333, + 0x1338, 0x0001, 0x0d99, 0x0001, 0x0014, 0x097f, 0x0001, 0x0d9e, + 0x0001, 0x0014, 0x098a, 0x0001, 0x0da3, 0x0001, 0x0014, 0x0991, + 0x0003, 0x0daa, 0x0dad, 0x0db2, 0x0001, 0x0014, 0x0996, 0x0003, + 0x0014, 0x099a, 0x09a6, 0x09b0, 0x0002, 0x0db5, 0x0dbd, 0x0006, + 0x0014, 0x09e2, 0x09bf, 0xffff, 0xffff, 0x09ca, 0x09d6, 0x0006, + // Entry C980 - C9BF + 0x0014, 0x09fd, 0x09ed, 0xffff, 0xffff, 0x09fd, 0x0a0c, 0x0003, + 0x0dc9, 0x0dcc, 0x0dd1, 0x0001, 0x0014, 0x06de, 0x0003, 0x0014, + 0x099a, 0x09a6, 0x09b0, 0x0002, 0x0dd4, 0x0ddc, 0x0006, 0x0014, + 0x0a25, 0x0a1b, 0xffff, 0xffff, 0x0a1b, 0x0a1b, 0x0006, 0x0014, + 0x0a3c, 0x0a2f, 0xffff, 0xffff, 0x0a2f, 0x0a2f, 0x0003, 0x0de8, + 0x0deb, 0x0df0, 0x0001, 0x0014, 0x06de, 0x0003, 0x0014, 0x099a, + 0x09a6, 0x09b0, 0x0002, 0x0df3, 0x0dfb, 0x0006, 0x0014, 0x0a25, + 0x0a1b, 0xffff, 0xffff, 0x0a1b, 0x0a1b, 0x0006, 0x0014, 0x0a3c, + // Entry C9C0 - C9FF + 0x0a2f, 0xffff, 0xffff, 0x0a2f, 0x0a2f, 0x0003, 0x0e07, 0x0e0a, + 0x0e0f, 0x0001, 0x0014, 0x0a49, 0x0003, 0x0014, 0x0a55, 0x0a69, + 0x0a7a, 0x0002, 0x0e12, 0x0e1a, 0x0006, 0x0014, 0x0a91, 0x0a91, + 0xffff, 0xffff, 0x0a91, 0x0a91, 0x0006, 0x0014, 0x0abb, 0x0aa4, + 0xffff, 0xffff, 0x0abb, 0x0ad3, 0x0003, 0x0e26, 0x0e29, 0x0e2e, + 0x0001, 0x0014, 0x0ae9, 0x0003, 0x0014, 0x0a55, 0x0a69, 0x0a7a, + 0x0002, 0x0e31, 0x0e39, 0x0006, 0x0000, 0x1a99, 0x1a99, 0xffff, + 0xffff, 0x1a99, 0x1a99, 0x0006, 0x0000, 0x1aa0, 0x1aa0, 0xffff, + // Entry CA00 - CA3F + 0xffff, 0x1aa0, 0x1aa0, 0x0003, 0x0e45, 0x0e48, 0x0e4d, 0x0001, + 0x0014, 0x0ae9, 0x0003, 0x0014, 0x0a55, 0x0a69, 0x0a7a, 0x0002, + 0x0e50, 0x0e58, 0x0006, 0x0000, 0x1a99, 0x1a99, 0xffff, 0xffff, + 0x1a99, 0x1a99, 0x0006, 0x0000, 0x1aa0, 0x1aa0, 0xffff, 0xffff, + 0x1aa0, 0x1aa0, 0x0003, 0x0e64, 0x0e67, 0x0e6c, 0x0001, 0x0014, + 0x0aeb, 0x0003, 0x0014, 0x0af3, 0x0b03, 0x0b11, 0x0002, 0x0e6f, + 0x0e77, 0x0006, 0x0014, 0x0b43, 0x0b24, 0xffff, 0xffff, 0x0b33, + 0x0b33, 0x0006, 0x0014, 0x0b68, 0x0b54, 0xffff, 0xffff, 0x0b68, + // Entry CA40 - CA7F + 0x0b7b, 0x0003, 0x0e83, 0x0e86, 0x0e8b, 0x0001, 0x0014, 0x0b8e, + 0x0003, 0x0014, 0x0b94, 0x0ba2, 0x0bae, 0x0002, 0x0e8e, 0x0e96, + 0x0006, 0x0014, 0x0bbf, 0x0bbf, 0xffff, 0xffff, 0x0bbf, 0x0bbf, + 0x0006, 0x0014, 0x0bcc, 0x0bcc, 0xffff, 0xffff, 0x0bcc, 0x0bcc, + 0x0003, 0x0ea2, 0x0ea5, 0x0eaa, 0x0001, 0x0014, 0x0b8e, 0x0003, + 0x0014, 0x0bdc, 0x0ba2, 0x0bae, 0x0002, 0x0ead, 0x0eb5, 0x0006, + 0x0014, 0x0bbf, 0x0bbf, 0xffff, 0xffff, 0x0bbf, 0x0bbf, 0x0006, + 0x0014, 0x0bcc, 0x0bcc, 0xffff, 0xffff, 0x0bcc, 0x0bcc, 0x0004, + // Entry CA80 - CABF + 0x0ec2, 0x0ec5, 0x0eca, 0x0edd, 0x0001, 0x0014, 0x0be9, 0x0003, + 0x0014, 0x0bf0, 0x0bff, 0x0c0c, 0x0002, 0x0ecd, 0x0ed5, 0x0006, + 0x0014, 0x0c48, 0x0c1e, 0xffff, 0xffff, 0x0c2c, 0x0c3a, 0x0006, + 0x0014, 0x0c69, 0x0c57, 0xffff, 0xffff, 0x0c69, 0x0c7a, 0x0001, + 0x0014, 0x0c8b, 0x0004, 0x0ee5, 0x0ee8, 0x0eed, 0x0f00, 0x0001, + 0x0014, 0x0c98, 0x0003, 0x0014, 0x0c9e, 0x0cac, 0x0cb8, 0x0002, + 0x0ef0, 0x0ef8, 0x0006, 0x0014, 0x0cc9, 0x0cc9, 0xffff, 0xffff, + 0x0cc9, 0x0cc9, 0x0006, 0x0014, 0x0cd6, 0x0cd6, 0xffff, 0xffff, + // Entry CAC0 - CAFF + 0x0cd6, 0x0cd6, 0x0001, 0x0014, 0x0ce6, 0x0004, 0x0f08, 0x0f0b, + 0x0f10, 0x0f23, 0x0001, 0x0014, 0x0c98, 0x0003, 0x0014, 0x0c9e, + 0x0cac, 0x0cb8, 0x0002, 0x0f13, 0x0f1b, 0x0006, 0x0014, 0x0cc9, + 0x0cc9, 0xffff, 0xffff, 0x0cc9, 0x0cc9, 0x0006, 0x0014, 0x0cd6, + 0x0cd6, 0xffff, 0xffff, 0x0cd6, 0x0cd6, 0x0001, 0x0014, 0x0ce6, + 0x0001, 0x0f28, 0x0001, 0x0014, 0x0cf2, 0x0001, 0x0f2d, 0x0001, + 0x0014, 0x0d04, 0x0001, 0x0f32, 0x0001, 0x0014, 0x0d04, 0x0003, + 0x0f39, 0x0f3c, 0x0f43, 0x0001, 0x0014, 0x0d0f, 0x0005, 0x0014, + // Entry CB00 - CB3F + 0x0d22, 0x0d29, 0x0d2e, 0x0d13, 0x0d35, 0x0002, 0x0f46, 0x0f4e, + 0x0006, 0x0014, 0x0d61, 0x0d40, 0xffff, 0xffff, 0x0d4b, 0x0d56, + 0x0006, 0x0014, 0x0d7c, 0x0d6d, 0xffff, 0xffff, 0x0d7c, 0x0d8a, + 0x0003, 0x0f5a, 0x0f5d, 0x0f64, 0x0001, 0x0014, 0x0d0f, 0x0005, + 0x0014, 0x0d22, 0x0d29, 0x0d2e, 0x0d13, 0x0d35, 0x0002, 0x0f67, + 0x0f6f, 0x0006, 0x0014, 0x0d61, 0x0d40, 0xffff, 0xffff, 0x0d4b, + 0x0d56, 0x0006, 0x0014, 0x0d7c, 0x0d6d, 0xffff, 0xffff, 0x0d7c, + 0x0d8a, 0x0003, 0x0f7b, 0x0f7e, 0x0f85, 0x0001, 0x0014, 0x0d0f, + // Entry CB40 - CB7F + 0x0005, 0x0014, 0x0d22, 0x0d29, 0x0d2e, 0x0d13, 0x0d35, 0x0002, + 0x0f88, 0x0f90, 0x0006, 0x0014, 0x0d61, 0x0d40, 0xffff, 0xffff, + 0x0d4b, 0x0d56, 0x0006, 0x0014, 0x0d7c, 0x0d6d, 0xffff, 0xffff, + 0x0d7c, 0x0d8a, 0x0001, 0x0f9a, 0x0001, 0x0014, 0x0d98, 0x0001, + 0x0f9f, 0x0001, 0x0014, 0x0da3, 0x0001, 0x0fa4, 0x0001, 0x0014, + 0x0dac, 0x0001, 0x0fa9, 0x0001, 0x0014, 0x0db4, 0x0001, 0x0fae, + 0x0001, 0x0014, 0x0dc1, 0x0001, 0x0fb3, 0x0001, 0x0014, 0x0dcd, + 0x0001, 0x0fb8, 0x0001, 0x0014, 0x0dd8, 0x0001, 0x0fbd, 0x0001, + // Entry CB80 - CBBF + 0x0014, 0x0dee, 0x0001, 0x0fc2, 0x0001, 0x0014, 0x0e00, 0x0003, + 0x0000, 0x0fc9, 0x0fce, 0x0003, 0x0014, 0x0e11, 0x0e21, 0x0e2e, + 0x0002, 0x0fd1, 0x0fd9, 0x0006, 0x0014, 0x0e5f, 0x0e41, 0xffff, + 0xffff, 0x0e50, 0x0e50, 0x0006, 0x0014, 0x0e82, 0x0e6f, 0xffff, + 0xffff, 0x0e82, 0x0e96, 0x0003, 0x0000, 0x0fe5, 0x0fea, 0x0003, + 0x0014, 0x0e11, 0x0e21, 0x0e2e, 0x0002, 0x0fed, 0x0ff5, 0x0006, + 0x0014, 0x0e5f, 0x0e41, 0xffff, 0xffff, 0x0e50, 0x0e50, 0x0006, + 0x0014, 0x0e82, 0x0e6f, 0xffff, 0xffff, 0x0e82, 0x0e96, 0x0003, + // Entry CBC0 - CBFF + 0x0000, 0x1001, 0x1006, 0x0003, 0x0014, 0x0e11, 0x0e21, 0x0e2e, + 0x0002, 0x1009, 0x1011, 0x0006, 0x0014, 0x0e5f, 0x0e41, 0xffff, + 0xffff, 0x0e50, 0x0e50, 0x0006, 0x0014, 0x0e82, 0x0e6f, 0xffff, + 0xffff, 0x0e82, 0x0e96, 0x0003, 0x0000, 0x101d, 0x1022, 0x0003, + 0x0014, 0x0ea8, 0x0eba, 0x0ec9, 0x0002, 0x1025, 0x102d, 0x0006, + 0x0014, 0x0ede, 0x0ede, 0xffff, 0xffff, 0x0ede, 0x0ede, 0x0006, + 0x0014, 0x0f04, 0x0eef, 0xffff, 0xffff, 0x0f04, 0x0f1a, 0x0003, + 0x0000, 0x1039, 0x103e, 0x0003, 0x0014, 0x0ea8, 0x0eba, 0x0ec9, + // Entry CC00 - CC3F + 0x0002, 0x1041, 0x1049, 0x0006, 0x0014, 0x0ede, 0x0ede, 0xffff, + 0xffff, 0x0ede, 0x0ede, 0x0006, 0x0014, 0x0f04, 0x0eef, 0xffff, + 0xffff, 0x0f04, 0x0f1a, 0x0003, 0x0000, 0x1055, 0x105a, 0x0003, + 0x0014, 0x0ea8, 0x0eba, 0x0ec9, 0x0002, 0x105d, 0x1065, 0x0006, + 0x0014, 0x0ede, 0x0ede, 0xffff, 0xffff, 0x0ede, 0x0ede, 0x0006, + 0x0014, 0x0f04, 0x0eef, 0xffff, 0xffff, 0x0f04, 0x0f1a, 0x0003, + 0x0000, 0x1071, 0x1076, 0x0003, 0x0014, 0x0f2e, 0x0f3e, 0x0f4b, + 0x0002, 0x1079, 0x1081, 0x0006, 0x0014, 0x0f5e, 0x0f5e, 0xffff, + // Entry CC40 - CC7F + 0xffff, 0x0f5e, 0x0f5e, 0x0006, 0x0014, 0x0f80, 0x0f6d, 0xffff, + 0xffff, 0x0f80, 0x0f94, 0x0003, 0x0000, 0x108d, 0x1092, 0x0003, + 0x0014, 0x0f2e, 0x0f3e, 0x0f4b, 0x0002, 0x1095, 0x109d, 0x0006, + 0x0014, 0x0f5e, 0x0f5e, 0xffff, 0xffff, 0x0f5e, 0x0f5e, 0x0006, + 0x0014, 0x0f80, 0x0f6d, 0xffff, 0xffff, 0x0f80, 0x0f94, 0x0003, + 0x0000, 0x10a9, 0x10ae, 0x0003, 0x0014, 0x0f2e, 0x0f3e, 0x0f4b, + 0x0002, 0x10b1, 0x10b9, 0x0006, 0x0014, 0x0f5e, 0x0f5e, 0xffff, + 0xffff, 0x0f5e, 0x0f5e, 0x0006, 0x0014, 0x0f80, 0x0f6d, 0xffff, + // Entry CC80 - CCBF + 0xffff, 0x0f80, 0x0f94, 0x0003, 0x0000, 0x10c5, 0x10ca, 0x0003, + 0x0014, 0x0fa6, 0x0fb6, 0x0fc3, 0x0002, 0x10cd, 0x10d5, 0x0006, + 0x0014, 0x0ff4, 0x0fd6, 0xffff, 0xffff, 0x0fe5, 0x0fe5, 0x0006, + 0x0014, 0x1015, 0x1002, 0xffff, 0xffff, 0x1015, 0x1029, 0x0003, + 0x0000, 0x10e1, 0x10e6, 0x0003, 0x0014, 0x0fa6, 0x0fb6, 0x0fc3, + 0x0002, 0x10e9, 0x10f1, 0x0006, 0x0014, 0x0ff4, 0x0fd6, 0xffff, + 0xffff, 0x0fe5, 0x0fe5, 0x0006, 0x0014, 0x1015, 0x1002, 0xffff, + 0xffff, 0x1015, 0x1029, 0x0003, 0x0000, 0x10fd, 0x1102, 0x0003, + // Entry CCC0 - CCFF + 0x0014, 0x0fa6, 0x0fb6, 0x0fc3, 0x0002, 0x1105, 0x110d, 0x0006, + 0x0014, 0x0ff4, 0x0fd6, 0xffff, 0xffff, 0x0fe5, 0x0fe5, 0x0006, + 0x0014, 0x1015, 0x1002, 0xffff, 0xffff, 0x1015, 0x1029, 0x0003, + 0x0000, 0x1119, 0x111e, 0x0003, 0x0014, 0x103b, 0x104c, 0x105b, + 0x0002, 0x1121, 0x1129, 0x0006, 0x0014, 0x109f, 0x106f, 0xffff, + 0xffff, 0x107f, 0x108f, 0x0006, 0x0014, 0x10c4, 0x10b0, 0xffff, + 0xffff, 0x10c4, 0x10d7, 0x0003, 0x0000, 0x1135, 0x113a, 0x0003, + 0x0014, 0x103b, 0x104c, 0x105b, 0x0002, 0x113d, 0x1145, 0x0006, + // Entry CD00 - CD3F + 0x0014, 0x109f, 0x106f, 0xffff, 0xffff, 0x107f, 0x108f, 0x0006, + 0x0014, 0x10c4, 0x10b0, 0xffff, 0xffff, 0x10c4, 0x10d7, 0x0003, + 0x0000, 0x1151, 0x1156, 0x0003, 0x0014, 0x103b, 0x104c, 0x105b, + 0x0002, 0x1159, 0x1161, 0x0006, 0x0014, 0x109f, 0x106f, 0xffff, + 0xffff, 0x107f, 0x108f, 0x0006, 0x0014, 0x10c4, 0x10b0, 0xffff, + 0xffff, 0x10c4, 0x10d7, 0x0003, 0x0000, 0x116d, 0x1172, 0x0003, + 0x0014, 0x10ea, 0x10f9, 0x1106, 0x0002, 0x1175, 0x117d, 0x0006, + 0x0014, 0x1142, 0x1118, 0xffff, 0xffff, 0x1126, 0x1134, 0x0006, + // Entry CD40 - CD7F + 0x0014, 0x1163, 0x1151, 0xffff, 0xffff, 0x1163, 0x1174, 0x0003, + 0x0000, 0x1189, 0x118e, 0x0003, 0x0014, 0x10ea, 0x10f9, 0x1106, + 0x0002, 0x1191, 0x1199, 0x0006, 0x0014, 0x1142, 0x1118, 0xffff, + 0xffff, 0x1126, 0x1134, 0x0006, 0x0014, 0x1163, 0x1151, 0xffff, + 0xffff, 0x1163, 0x1174, 0x0003, 0x0000, 0x11a5, 0x11aa, 0x0003, + 0x0014, 0x10ea, 0x10f9, 0x1106, 0x0002, 0x11ad, 0x11b5, 0x0006, + 0x0014, 0x1142, 0x1118, 0xffff, 0xffff, 0x1126, 0x1134, 0x0006, + 0x0014, 0x1163, 0x1151, 0xffff, 0xffff, 0x1163, 0x1174, 0x0003, + // Entry CD80 - CDBF + 0x0000, 0x11c1, 0x11c6, 0x0003, 0x0014, 0x1185, 0x1194, 0x11a0, + 0x0002, 0x11c9, 0x11d1, 0x0006, 0x0014, 0x11ce, 0x11b2, 0xffff, + 0xffff, 0x11c0, 0x11c0, 0x0006, 0x0014, 0x11ed, 0x11db, 0xffff, + 0xffff, 0x11ed, 0x1200, 0x0003, 0x0000, 0x11dd, 0x11e2, 0x0003, + 0x0014, 0x1185, 0x1194, 0x11a0, 0x0002, 0x11e5, 0x11ed, 0x0006, + 0x0014, 0x11ce, 0x11b2, 0xffff, 0xffff, 0x11c0, 0x11c0, 0x0006, + 0x0014, 0x11ed, 0x11db, 0xffff, 0xffff, 0x11ed, 0x1200, 0x0003, + 0x0000, 0x11f9, 0x11fe, 0x0003, 0x0014, 0x1185, 0x1194, 0x11a0, + // Entry CDC0 - CDFF + 0x0002, 0x1201, 0x1209, 0x0006, 0x0014, 0x11ce, 0x11b2, 0xffff, + 0xffff, 0x11c0, 0x11c0, 0x0006, 0x0014, 0x11ed, 0x11db, 0xffff, + 0xffff, 0x11ed, 0x1200, 0x0001, 0x1213, 0x0001, 0x0014, 0x1211, + 0x0001, 0x1218, 0x0001, 0x0014, 0x1211, 0x0001, 0x121d, 0x0001, + 0x0014, 0x121c, 0x0003, 0x1224, 0x1227, 0x122b, 0x0001, 0x0014, + 0x1226, 0x0002, 0x0014, 0xffff, 0x122d, 0x0002, 0x122e, 0x1236, + 0x0006, 0x0014, 0x1255, 0x1239, 0xffff, 0xffff, 0x1247, 0x1247, + 0x0006, 0x0014, 0x1274, 0x1262, 0xffff, 0xffff, 0x1274, 0x1287, + // Entry CE00 - CE3F + 0x0003, 0x1242, 0x1245, 0x1249, 0x0001, 0x0000, 0x213b, 0x0002, + 0x0014, 0xffff, 0x122d, 0x0002, 0x124c, 0x1254, 0x0006, 0x0014, + 0x1298, 0x1298, 0xffff, 0xffff, 0x1298, 0x1298, 0x0006, 0x0014, + 0x12a1, 0x12a1, 0xffff, 0xffff, 0x12a1, 0x12a1, 0x0003, 0x1260, + 0x1263, 0x1267, 0x0001, 0x0000, 0x213b, 0x0002, 0x0014, 0xffff, + 0x122d, 0x0002, 0x126a, 0x1272, 0x0006, 0x0014, 0x1298, 0x1298, + 0xffff, 0xffff, 0x1298, 0x1298, 0x0006, 0x0014, 0x12a1, 0x12a1, + 0xffff, 0xffff, 0x12a1, 0x12a1, 0x0003, 0x127e, 0x1281, 0x1285, + // Entry CE40 - CE7F + 0x0001, 0x000d, 0x0c85, 0x0002, 0x0014, 0xffff, 0x12ad, 0x0002, + 0x1288, 0x1290, 0x0006, 0x000d, 0x3213, 0x0c97, 0xffff, 0xffff, + 0x3205, 0x3205, 0x0006, 0x0014, 0x12cb, 0x12b9, 0xffff, 0xffff, + 0x12cb, 0x12de, 0x0003, 0x129c, 0x129f, 0x12a3, 0x0001, 0x000b, + 0x1250, 0x0002, 0x0014, 0xffff, 0x12ad, 0x0002, 0x12a6, 0x12ae, + 0x0006, 0x0014, 0x12ef, 0x12ef, 0xffff, 0xffff, 0x12ef, 0x12ef, + 0x0006, 0x0014, 0x12fa, 0x12fa, 0xffff, 0xffff, 0x12fa, 0x12fa, + 0x0003, 0x12ba, 0x12bd, 0x12c1, 0x0001, 0x000b, 0x1250, 0x0002, + // Entry CE80 - CEBF + 0x0014, 0xffff, 0x12ad, 0x0002, 0x12c4, 0x12cc, 0x0006, 0x0014, + 0x12ef, 0x12ef, 0xffff, 0xffff, 0x12ef, 0x12ef, 0x0006, 0x0014, + 0x12fa, 0x12fa, 0xffff, 0xffff, 0x12fa, 0x12fa, 0x0003, 0x12d8, + 0x12db, 0x12df, 0x0001, 0x000d, 0x0d0f, 0x0002, 0x0014, 0xffff, + 0x1308, 0x0002, 0x12e2, 0x12ea, 0x0006, 0x000d, 0x322f, 0x0d1c, + 0xffff, 0xffff, 0x3220, 0x3220, 0x0006, 0x0014, 0x1321, 0x130e, + 0xffff, 0xffff, 0x1321, 0x1335, 0x0003, 0x12f6, 0x12f9, 0x12fd, + 0x0001, 0x0000, 0x2002, 0x0002, 0x0014, 0xffff, 0x1308, 0x0002, + // Entry CEC0 - CEFF + 0x1300, 0x1308, 0x0006, 0x0014, 0x1347, 0x1347, 0xffff, 0xffff, + 0x1347, 0x1347, 0x0006, 0x0014, 0x1350, 0x1350, 0xffff, 0xffff, + 0x1350, 0x1350, 0x0003, 0x1314, 0x1317, 0x131b, 0x0001, 0x0000, + 0x2002, 0x0002, 0x0014, 0xffff, 0x1308, 0x0002, 0x131e, 0x1326, + 0x0006, 0x0014, 0x1347, 0x1347, 0xffff, 0xffff, 0x1347, 0x1347, + 0x0006, 0x0014, 0x1350, 0x1350, 0xffff, 0xffff, 0x1350, 0x1350, + 0x0001, 0x1330, 0x0001, 0x0014, 0x135c, 0x0001, 0x1335, 0x0001, + 0x0014, 0x136c, 0x0001, 0x133a, 0x0001, 0x0014, 0x1379, 0x0004, + // Entry CF00 - CF3F + 0x1342, 0x1347, 0x134c, 0x1371, 0x0003, 0x0014, 0x1380, 0x138c, + 0x1393, 0x0003, 0x0014, 0x1397, 0x13ab, 0x13b4, 0x0002, 0x134f, + 0x1365, 0x0003, 0x1353, 0x135f, 0x1359, 0x0004, 0x0006, 0xffff, + 0xffff, 0xffff, 0x1f5f, 0x0004, 0x0006, 0x4117, 0xffff, 0xffff, + 0x1f5f, 0x0004, 0x0006, 0xffff, 0xffff, 0xffff, 0x1f63, 0x0003, + 0x0000, 0x136c, 0x1369, 0x0001, 0x0014, 0x13bd, 0x0003, 0x0014, + 0xffff, 0x13da, 0x13ef, 0x0002, 0x1558, 0x1374, 0x0003, 0x1378, + 0x14b8, 0x1418, 0x009e, 0x0014, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry CF40 - CF7F + 0x1490, 0x14e2, 0x1565, 0x15a8, 0x161e, 0x1691, 0x16fb, 0x176e, + 0x17b1, 0x186e, 0x18ab, 0x18f4, 0x1952, 0x1995, 0x19db, 0x1a36, + 0x1aaf, 0x1b0d, 0x1b68, 0x1bc6, 0x1c03, 0xffff, 0xffff, 0x1c78, + 0xffff, 0x1cd1, 0xffff, 0x1d3d, 0x1d83, 0x1dc0, 0x1e00, 0xffff, + 0xffff, 0x1e83, 0x1ecc, 0x1f2a, 0xffff, 0xffff, 0xffff, 0x1fbb, + 0xffff, 0x2037, 0x208c, 0xffff, 0x2102, 0x2157, 0x21a0, 0xffff, + 0xffff, 0xffff, 0xffff, 0x225b, 0xffff, 0xffff, 0x22da, 0x2332, + 0xffff, 0xffff, 0x23c7, 0x2422, 0x246b, 0xffff, 0xffff, 0xffff, + // Entry CF80 - CFBF + 0xffff, 0xffff, 0xffff, 0x2529, 0x256c, 0x25ac, 0x25ef, 0x262f, + 0xffff, 0xffff, 0x26db, 0xffff, 0x272b, 0xffff, 0xffff, 0x27b4, + 0xffff, 0x2866, 0xffff, 0xffff, 0xffff, 0xffff, 0x28fa, 0xffff, + 0x295a, 0x29c7, 0x2a25, 0x2a77, 0xffff, 0xffff, 0xffff, 0x2ae9, + 0x2b3b, 0x2b8d, 0xffff, 0xffff, 0x2c01, 0x2c9a, 0x2ce6, 0x2d1d, + 0xffff, 0xffff, 0x2d93, 0x2ddc, 0x2e22, 0xffff, 0x2e86, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2f93, 0x2fdc, 0x301c, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x30e6, 0xffff, + // Entry CFC0 - CFFF + 0xffff, 0x3151, 0xffff, 0x31a0, 0xffff, 0x31f5, 0x323b, 0x3278, + 0xffff, 0x32cd, 0x331c, 0xffff, 0xffff, 0xffff, 0x33ac, 0x33ec, + 0xffff, 0xffff, 0x1402, 0x1525, 0x17ee, 0x182e, 0xffff, 0xffff, + 0x280f, 0x2f21, 0x009e, 0x0014, 0x1442, 0x1453, 0x1468, 0x147e, + 0x14a5, 0x14f2, 0x1575, 0x15c9, 0x163e, 0x16ae, 0x171b, 0x177e, + 0x17bf, 0x187c, 0x18bd, 0x190d, 0x1962, 0x19a6, 0x19f3, 0x1a58, + 0x1ac8, 0x1b25, 0x1b81, 0x1bd4, 0x1c18, 0x1c55, 0x1c67, 0x1c8a, + 0x1cc1, 0x1ce2, 0x1d2c, 0x1d4e, 0x1d91, 0x1dcf, 0x1e14, 0x1e4f, + // Entry D000 - D03F + 0x1e69, 0x1e95, 0x1ee5, 0x1f3a, 0x1f6d, 0x1f83, 0x1fa4, 0x1fd8, + 0x2025, 0x204d, 0x20a3, 0x20e4, 0x2118, 0x2169, 0x21b1, 0x21e6, + 0x2200, 0x2237, 0x224a, 0x226c, 0x22a1, 0x22bd, 0x22f1, 0x2348, + 0x2395, 0x23b8, 0x23df, 0x2434, 0x2479, 0x24a8, 0x24b6, 0x24cd, + 0x24e0, 0x24f8, 0x2511, 0x2539, 0x257b, 0x25bc, 0x25fe, 0x264f, + 0x26a2, 0x26bf, 0x26ea, 0x271b, 0x273e, 0x2777, 0x2798, 0x27cc, + 0x284f, 0x2877, 0x28ac, 0x28bb, 0x28cc, 0x28dd, 0x290c, 0x2943, + 0x2978, 0x29e0, 0x2a3a, 0x2a87, 0x2aba, 0x2acb, 0x2ad9, 0x2afe, + // Entry D040 - D07F + 0x2b50, 0x2ba3, 0x2be2, 0x2bf1, 0x2c26, 0x2cad, 0x2cf2, 0x2d31, + 0x2d6c, 0x2d7b, 0x2da5, 0x2ded, 0x2e34, 0x2e6b, 0x2e9f, 0x2ee4, + 0x2efd, 0x2f0c, 0x2f6a, 0x2f7c, 0x2fa5, 0x2feb, 0x302b, 0x305c, + 0x306d, 0x307f, 0x309d, 0x30b2, 0x30c3, 0x30d7, 0x30f8, 0x312f, + 0x3140, 0x3160, 0x3191, 0x31b1, 0x31e6, 0x3206, 0x3249, 0x3288, + 0x32bb, 0x32e1, 0x332f, 0x3368, 0x337c, 0x338e, 0x33bb, 0x3403, + 0x2387, 0x2c83, 0x1411, 0x1534, 0x17fd, 0x183d, 0x1d17, 0x2787, + 0x281e, 0x2f33, 0x009e, 0x0014, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry D080 - D0BF + 0x14c6, 0x150e, 0x1591, 0x15f6, 0x166a, 0x16d7, 0x1747, 0x179a, + 0x17d9, 0x1896, 0x18db, 0x1932, 0x197e, 0x19c3, 0x1a17, 0x1a86, + 0x1aed, 0x1b49, 0x1ba6, 0x1bee, 0x1c39, 0xffff, 0xffff, 0x1ca8, + 0xffff, 0x1cff, 0xffff, 0x1d6b, 0x1dab, 0x1dea, 0x1e34, 0xffff, + 0xffff, 0x1eb3, 0x1f0a, 0x1f56, 0xffff, 0xffff, 0xffff, 0x2001, + 0xffff, 0x206f, 0x20c6, 0xffff, 0x213a, 0x2187, 0x21ce, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2289, 0xffff, 0xffff, 0x2314, 0x236a, + 0xffff, 0xffff, 0x2403, 0x2452, 0x2493, 0xffff, 0xffff, 0xffff, + // Entry D0C0 - D0FF + 0xffff, 0xffff, 0xffff, 0x2555, 0x2596, 0x25d8, 0x2619, 0x267b, + 0xffff, 0xffff, 0x2705, 0xffff, 0x275d, 0xffff, 0xffff, 0x27f0, + 0xffff, 0x2894, 0xffff, 0xffff, 0xffff, 0xffff, 0x292a, 0xffff, + 0x29a2, 0x2a05, 0x2a5b, 0x2aa3, 0xffff, 0xffff, 0xffff, 0x2b1f, + 0x2b71, 0x2bc5, 0xffff, 0xffff, 0x2c57, 0x2ccc, 0x2d0a, 0x2d51, + 0xffff, 0xffff, 0x2dc3, 0x2e0a, 0x2e52, 0xffff, 0x2ec4, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2fc3, 0x3006, 0x3046, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3116, 0xffff, + // Entry D100 - D13F + 0xffff, 0x317b, 0xffff, 0x31ce, 0xffff, 0x3223, 0x3263, 0x32a4, + 0xffff, 0x3301, 0x334e, 0xffff, 0xffff, 0xffff, 0x33d6, 0x3426, + 0xffff, 0xffff, 0x142c, 0x154f, 0x1818, 0x1858, 0xffff, 0xffff, + 0x2839, 0x2f51, 0x0003, 0x155c, 0x15bc, 0x158c, 0x002e, 0x0007, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0x000e, + 0x0019, 0x0024, 0x002f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x003a, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry D140 - D17F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2476, 0x002e, 0x0007, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0004, 0xffff, 0x0011, + 0x001c, 0x0027, 0x0032, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x003d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2476, 0x002e, 0x0007, + // Entry D180 - D1BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0009, 0xffff, 0x0015, + 0x0020, 0x002b, 0x0036, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0041, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x247b, 0x0003, 0x0004, + 0x01b2, 0x0285, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000d, 0x0038, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry D1C0 - D1FF + 0x0000, 0x0016, 0x0000, 0x0027, 0x0004, 0x0024, 0x001e, 0x001b, + 0x0021, 0x0001, 0x0000, 0x0489, 0x0001, 0x0000, 0x049a, 0x0001, + 0x0000, 0x04a5, 0x0001, 0x0000, 0x04af, 0x0004, 0x0035, 0x002f, + 0x002c, 0x0032, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x0041, + 0x00a6, 0x00fd, 0x0132, 0x016a, 0x017f, 0x0190, 0x01a1, 0x0002, + 0x0044, 0x0075, 0x0003, 0x0048, 0x0057, 0x0066, 0x000d, 0x0015, + 0xffff, 0x0000, 0x000c, 0x0016, 0x0020, 0x002c, 0x0034, 0x0041, + // Entry D200 - D23F + 0x004e, 0x005c, 0x0066, 0x0070, 0x007a, 0x000d, 0x0015, 0xffff, + 0x0084, 0x0089, 0x008c, 0x008f, 0x008c, 0x0084, 0x0084, 0x008f, + 0x0094, 0x0097, 0x009c, 0x009f, 0x000d, 0x0015, 0xffff, 0x00a2, + 0x00ba, 0x00d0, 0x00dd, 0x00f2, 0x00fd, 0x010d, 0x011d, 0x0131, + 0x0148, 0x015d, 0x0170, 0x0003, 0x0079, 0x0088, 0x0097, 0x000d, + 0x0015, 0xffff, 0x0000, 0x000c, 0x0016, 0x0020, 0x002c, 0x0034, + 0x0041, 0x004e, 0x005c, 0x0066, 0x0070, 0x007a, 0x000d, 0x0015, + 0xffff, 0x0084, 0x0089, 0x008c, 0x008f, 0x008c, 0x0084, 0x0084, + // Entry D240 - D27F + 0x008f, 0x0094, 0x0097, 0x009c, 0x009f, 0x000d, 0x0015, 0xffff, + 0x0185, 0x019d, 0x01b3, 0x01c0, 0x01d5, 0x01e0, 0x01f0, 0x0200, + 0x0214, 0x022b, 0x0240, 0x0253, 0x0002, 0x00a9, 0x00d3, 0x0005, + 0x00af, 0x00b8, 0x00ca, 0x0000, 0x00c1, 0x0007, 0x0015, 0x0268, + 0x0274, 0x027e, 0x028a, 0x0294, 0x029e, 0x02a8, 0x0007, 0x0015, + 0x009c, 0x02b3, 0x02b6, 0x0094, 0x02b9, 0x02b3, 0x0094, 0x0007, + 0x0015, 0x0268, 0x0274, 0x027e, 0x028a, 0x0294, 0x029e, 0x02a8, + 0x0007, 0x0015, 0x02bc, 0x02cb, 0x02e6, 0x02f9, 0x0306, 0x031d, + // Entry D280 - D2BF + 0x032c, 0x0005, 0x00d9, 0x00e2, 0x00f4, 0x0000, 0x00eb, 0x0007, + 0x0015, 0x0268, 0x0274, 0x027e, 0x028a, 0x0294, 0x029e, 0x02a8, + 0x0007, 0x0015, 0x009c, 0x02b3, 0x02b6, 0x0094, 0x02b9, 0x02b3, + 0x0094, 0x0007, 0x0015, 0x0268, 0x0274, 0x027e, 0x028a, 0x0294, + 0x029e, 0x02a8, 0x0007, 0x0015, 0x02bc, 0x02cb, 0x02e6, 0x02f9, + 0x0306, 0x031d, 0x032c, 0x0002, 0x0100, 0x0119, 0x0003, 0x0104, + 0x010b, 0x0112, 0x0005, 0x0015, 0xffff, 0x033e, 0x0359, 0x0374, + 0x038f, 0x0005, 0x0015, 0xffff, 0x03aa, 0x03af, 0x03b4, 0x03b9, + // Entry D2C0 - D2FF + 0x0005, 0x0015, 0xffff, 0x033e, 0x0359, 0x0374, 0x038f, 0x0003, + 0x011d, 0x0124, 0x012b, 0x0005, 0x0015, 0xffff, 0x03aa, 0x03af, + 0x03b4, 0x03b9, 0x0005, 0x0015, 0xffff, 0x03aa, 0x03af, 0x03b4, + 0x03b9, 0x0005, 0x0015, 0xffff, 0x033e, 0x0359, 0x0374, 0x038f, + 0x0002, 0x0135, 0x014b, 0x0003, 0x0139, 0x0000, 0x0142, 0x0002, + 0x013c, 0x013f, 0x0001, 0x0015, 0x03be, 0x0001, 0x0015, 0x03c3, + 0x0002, 0x0145, 0x0148, 0x0001, 0x0015, 0x03be, 0x0001, 0x0015, + 0x03c3, 0x0003, 0x014f, 0x0158, 0x0161, 0x0002, 0x0152, 0x0155, + // Entry D300 - D33F + 0x0001, 0x0015, 0x03be, 0x0001, 0x0015, 0x03c3, 0x0002, 0x015b, + 0x015e, 0x0001, 0x0015, 0x03be, 0x0001, 0x0015, 0x03c3, 0x0002, + 0x0164, 0x0167, 0x0001, 0x0015, 0x03be, 0x0001, 0x0015, 0x03c3, + 0x0003, 0x0174, 0x0000, 0x016e, 0x0001, 0x0170, 0x0002, 0x0015, + 0x03c8, 0x03de, 0x0002, 0x0177, 0x017b, 0x0002, 0x0015, 0x03c8, + 0x0401, 0x0002, 0x0015, 0x03ec, 0x040c, 0x0004, 0x018d, 0x0187, + 0x0184, 0x018a, 0x0001, 0x0015, 0x0418, 0x0001, 0x0000, 0x050b, + 0x0001, 0x0000, 0x0514, 0x0001, 0x0015, 0x042e, 0x0004, 0x019e, + // Entry D340 - D37F + 0x0198, 0x0195, 0x019b, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, + 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, + 0x01af, 0x01a9, 0x01a6, 0x01ac, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0040, 0x01f3, 0x0000, 0x0000, 0x01f8, 0x01fd, 0x0202, 0x0207, + 0x020c, 0x0211, 0x0216, 0x021b, 0x0220, 0x0225, 0x022a, 0x022f, + 0x0000, 0x0000, 0x0000, 0x0234, 0x023f, 0x0244, 0x0000, 0x0000, + 0x0000, 0x0249, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry D380 - D3BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x024e, 0x0000, 0x0253, + 0x0258, 0x025d, 0x0262, 0x0267, 0x026c, 0x0271, 0x0276, 0x027b, + 0x0280, 0x0001, 0x01f5, 0x0001, 0x0015, 0x0436, 0x0001, 0x01fa, + 0x0001, 0x0015, 0x0441, 0x0001, 0x01ff, 0x0001, 0x0015, 0x044c, + 0x0001, 0x0204, 0x0001, 0x0015, 0x044c, 0x0001, 0x0209, 0x0001, + 0x0015, 0x0450, 0x0001, 0x020e, 0x0001, 0x0015, 0x0463, 0x0001, + // Entry D3C0 - D3FF + 0x0213, 0x0001, 0x0015, 0x0463, 0x0001, 0x0218, 0x0001, 0x0015, + 0x046d, 0x0001, 0x021d, 0x0001, 0x0015, 0x047c, 0x0001, 0x0222, + 0x0001, 0x0015, 0x047c, 0x0001, 0x0227, 0x0001, 0x0015, 0x0488, + 0x0001, 0x022c, 0x0001, 0x0015, 0x0499, 0x0001, 0x0231, 0x0001, + 0x0015, 0x0499, 0x0002, 0x0237, 0x023a, 0x0001, 0x0015, 0x04a1, + 0x0003, 0x0015, 0x04ac, 0x04b9, 0x04c6, 0x0001, 0x0241, 0x0001, + 0x0015, 0x04d8, 0x0001, 0x0246, 0x0001, 0x0015, 0x04d8, 0x0001, + 0x024b, 0x0001, 0x0015, 0x04e2, 0x0001, 0x0250, 0x0001, 0x0015, + // Entry D400 - D43F + 0x04fe, 0x0001, 0x0255, 0x0001, 0x0015, 0x0508, 0x0001, 0x025a, + 0x0001, 0x0015, 0x0513, 0x0001, 0x025f, 0x0001, 0x0015, 0x0513, + 0x0001, 0x0264, 0x0001, 0x0015, 0x051d, 0x0001, 0x0269, 0x0001, + 0x0015, 0x052d, 0x0001, 0x026e, 0x0001, 0x0015, 0x052d, 0x0001, + 0x0273, 0x0001, 0x0015, 0x0537, 0x0001, 0x0278, 0x0001, 0x0015, + 0x0549, 0x0001, 0x027d, 0x0001, 0x0015, 0x0549, 0x0001, 0x0282, + 0x0001, 0x0015, 0x0553, 0x0004, 0x028a, 0x028f, 0x0294, 0x029e, + 0x0003, 0x0000, 0x1dc7, 0x227b, 0x2282, 0x0003, 0x0015, 0x0573, + // Entry D440 - D47F + 0x0586, 0x05a8, 0x0002, 0x0000, 0x0297, 0x0003, 0x0000, 0x0000, + 0x029b, 0x0001, 0x0015, 0x05ca, 0x0002, 0x0000, 0x02a1, 0x0003, + 0x02a5, 0x03d1, 0x033b, 0x0094, 0x0015, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0613, 0x06cd, 0x0793, 0x0868, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0904, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry D480 - D4BF + 0xffff, 0xffff, 0x09a6, 0x0a5a, 0xffff, 0x0b5b, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0c4d, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0d30, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0dd9, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0e69, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0ef3, 0x0f8f, + // Entry D4C0 - D4FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1007, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1094, 0x1136, 0xffff, 0xffff, 0xffff, 0x11d2, + 0x125c, 0x0094, 0x0015, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0647, 0x0705, 0x07d0, 0x0892, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0930, 0xffff, 0xffff, 0xffff, + // Entry D500 - D53F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x09d8, 0x0a90, 0x0b1a, 0x0b8f, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0c15, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0c72, 0xffff, 0xffff, 0xffff, 0x0cda, + 0x0d06, 0xffff, 0xffff, 0x0d58, 0x0dc6, 0xffff, 0xffff, 0xffff, + // Entry D540 - D57F + 0x0dff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0e8d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0f1d, 0x0fad, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x102c, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x10c0, 0x1160, 0xffff, 0xffff, 0xffff, 0x11f6, 0x128f, 0x0094, + // Entry D580 - D5BF + 0x0015, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x068a, 0x074c, 0x081c, 0x08cb, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x096b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0a19, 0x0ad5, + 0xffff, 0x0bd2, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry D5C0 - D5FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0ca6, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0d8f, 0xffff, 0xffff, 0xffff, 0xffff, 0x0e34, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0ec0, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0f56, 0x0fda, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1060, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry D600 - D63F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x10fb, 0x1199, + 0xffff, 0xffff, 0xffff, 0x1229, 0x12d1, 0x0003, 0x0004, 0x01f0, + 0x0792, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000d, 0x0038, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0016, 0x0000, 0x0027, 0x0004, 0x0024, 0x001e, 0x001b, 0x0021, + 0x0001, 0x0006, 0x000d, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, + 0x001b, 0x0001, 0x0002, 0x0587, 0x0004, 0x0035, 0x002f, 0x002c, + // Entry D640 - D67F + 0x0032, 0x0001, 0x0015, 0x1313, 0x0001, 0x0015, 0x1313, 0x0001, + 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, 0x0041, 0x00a6, + 0x00fd, 0x0132, 0x019d, 0x01bd, 0x01ce, 0x01df, 0x0002, 0x0044, + 0x0075, 0x0003, 0x0048, 0x0057, 0x0066, 0x000d, 0x0015, 0xffff, + 0x1320, 0x1324, 0x132a, 0x132e, 0x1335, 0x1339, 0x133d, 0x1343, + 0x1348, 0x134d, 0x1351, 0x1356, 0x000d, 0x0000, 0xffff, 0x204d, + 0x2286, 0x2242, 0x2146, 0x2242, 0x2242, 0x2289, 0x21c6, 0x2242, + 0x19c7, 0x04dd, 0x228b, 0x000d, 0x0015, 0xffff, 0x135b, 0x1362, + // Entry D680 - D6BF + 0x136b, 0x132e, 0x1335, 0x1372, 0x137a, 0x1343, 0x1348, 0x1385, + 0x138c, 0x1395, 0x0003, 0x0079, 0x0088, 0x0097, 0x000d, 0x0015, + 0xffff, 0x1320, 0x139d, 0x132a, 0x13a1, 0x1335, 0x1339, 0x13a5, + 0x1343, 0x1348, 0x134d, 0x1351, 0x1356, 0x000d, 0x0000, 0xffff, + 0x204d, 0x2286, 0x2242, 0x2146, 0x2242, 0x2242, 0x2289, 0x21c6, + 0x2242, 0x19c7, 0x04dd, 0x228b, 0x000d, 0x0015, 0xffff, 0x135b, + 0x1362, 0x136b, 0x132e, 0x1335, 0x1372, 0x137a, 0x1343, 0x1348, + 0x1385, 0x138c, 0x1395, 0x0002, 0x00a9, 0x00d3, 0x0005, 0x00af, + // Entry D6C0 - D6FF + 0x00b8, 0x00ca, 0x0000, 0x00c1, 0x0007, 0x000b, 0x09c9, 0x272c, + 0x2731, 0x2735, 0x2739, 0x273d, 0x2742, 0x0007, 0x0000, 0x21c8, + 0x228e, 0x2242, 0x2242, 0x204d, 0x2289, 0x21c8, 0x0007, 0x000b, + 0x09ea, 0x2746, 0x2749, 0x274c, 0x274f, 0x2752, 0x09f9, 0x0007, + 0x0015, 0x13a9, 0x13b2, 0x13bc, 0x13c8, 0x13d5, 0x13de, 0x13ea, + 0x0005, 0x00d9, 0x00e2, 0x00f4, 0x0000, 0x00eb, 0x0007, 0x000b, + 0x09c9, 0x272c, 0x2731, 0x2735, 0x2739, 0x2755, 0x2742, 0x0007, + 0x0000, 0x21c8, 0x2291, 0x2242, 0x2242, 0x204d, 0x2289, 0x21c8, + // Entry D700 - D73F + 0x0007, 0x000b, 0x09ea, 0x2759, 0x2749, 0x274c, 0x274f, 0x2752, + 0x09f9, 0x0007, 0x0015, 0x13a9, 0x13b2, 0x13bc, 0x13c8, 0x13d5, + 0x13de, 0x13ea, 0x0002, 0x0100, 0x0119, 0x0003, 0x0104, 0x010b, + 0x0112, 0x0005, 0x0015, 0xffff, 0x13f6, 0x13fa, 0x13fe, 0x1402, + 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x0005, + 0x0015, 0xffff, 0x1406, 0x1413, 0x1420, 0x142e, 0x0003, 0x011d, + 0x0124, 0x012b, 0x0005, 0x0015, 0xffff, 0x13f6, 0x13fa, 0x13fe, + 0x1402, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, + // Entry D740 - D77F + 0x0005, 0x0015, 0xffff, 0x1406, 0x1413, 0x1420, 0x142e, 0x0002, + 0x0135, 0x0169, 0x0003, 0x0139, 0x0142, 0x014b, 0x0002, 0x013c, + 0x013f, 0x0001, 0x0015, 0x143c, 0x0001, 0x0015, 0x143f, 0x0002, + 0x0145, 0x0148, 0x0001, 0x0000, 0x213d, 0x0001, 0x0000, 0x213b, + 0x0008, 0x0157, 0x015d, 0x0154, 0x0160, 0x0163, 0x0166, 0x0000, + 0x015a, 0x0001, 0x0015, 0x1442, 0x0001, 0x0015, 0x143c, 0x0001, + 0x0015, 0x144c, 0x0001, 0x0015, 0x143f, 0x0001, 0x0015, 0x1457, + 0x0001, 0x0015, 0x145e, 0x0001, 0x0015, 0x1469, 0x0003, 0x016d, + // Entry D780 - D7BF + 0x0176, 0x017f, 0x0002, 0x0170, 0x0173, 0x0001, 0x0015, 0x143c, + 0x0001, 0x0015, 0x143f, 0x0002, 0x0179, 0x017c, 0x0001, 0x0015, + 0x143c, 0x0001, 0x0015, 0x143f, 0x0008, 0x018b, 0x0191, 0x0188, + 0x0194, 0x0197, 0x019a, 0x0000, 0x018e, 0x0001, 0x0015, 0x1442, + 0x0001, 0x0015, 0x143c, 0x0001, 0x0015, 0x144c, 0x0001, 0x0015, + 0x143f, 0x0001, 0x0015, 0x1457, 0x0001, 0x0015, 0x145e, 0x0001, + 0x0015, 0x1469, 0x0003, 0x01ac, 0x01b7, 0x01a1, 0x0002, 0x01a4, + 0x01a8, 0x0002, 0x0015, 0x1471, 0x1490, 0x0002, 0x0015, 0x147b, + // Entry D7C0 - D7FF + 0x149a, 0x0002, 0x01af, 0x01b3, 0x0002, 0x0015, 0x14ab, 0x14b2, + 0x0002, 0x0015, 0x14ae, 0x14b5, 0x0001, 0x01b9, 0x0002, 0x0015, + 0x14ba, 0x14bc, 0x0004, 0x01cb, 0x01c5, 0x01c2, 0x01c8, 0x0001, + 0x0006, 0x015b, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, + 0x0001, 0x0015, 0x14be, 0x0004, 0x01dc, 0x01d6, 0x01d3, 0x01d9, + 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, + 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, 0x01ed, 0x01e7, 0x01e4, + 0x01ea, 0x0001, 0x0015, 0x1313, 0x0001, 0x0015, 0x1313, 0x0001, + // Entry D800 - D83F + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0042, 0x0233, 0x0238, + 0x023d, 0x0242, 0x0261, 0x027b, 0x0295, 0x02b4, 0x02ce, 0x02e8, + 0x0307, 0x0321, 0x033b, 0x035e, 0x037c, 0x039a, 0x039f, 0x03a4, + 0x03a9, 0x03ca, 0x03eb, 0x0405, 0x040a, 0x040f, 0x0414, 0x0419, + 0x041e, 0x0423, 0x0428, 0x042d, 0x0432, 0x044e, 0x046a, 0x0486, + 0x04a2, 0x04be, 0x04da, 0x04f6, 0x0512, 0x052e, 0x054a, 0x0566, + 0x0582, 0x059e, 0x05ba, 0x05d6, 0x05f2, 0x060e, 0x062a, 0x0646, + 0x0662, 0x067e, 0x0683, 0x0688, 0x068d, 0x06ab, 0x06c5, 0x06df, + // Entry D840 - D87F + 0x06fd, 0x0717, 0x0731, 0x074f, 0x0769, 0x0783, 0x0788, 0x078d, + 0x0001, 0x0235, 0x0001, 0x0015, 0x14c7, 0x0001, 0x023a, 0x0001, + 0x0015, 0x14c7, 0x0001, 0x023f, 0x0001, 0x0015, 0x14c7, 0x0003, + 0x0246, 0x0249, 0x024e, 0x0001, 0x0015, 0x14cb, 0x0003, 0x0015, + 0x14d4, 0x14dc, 0x14e2, 0x0002, 0x0251, 0x0259, 0x0006, 0x0015, + 0x14f1, 0x1503, 0x14f1, 0x1512, 0x1524, 0x1524, 0x0006, 0x0015, + 0x1536, 0x154f, 0x1536, 0x155f, 0x1572, 0x1572, 0x0003, 0x0265, + 0x0000, 0x0268, 0x0001, 0x000b, 0x0b8f, 0x0002, 0x026b, 0x0273, + // Entry D880 - D8BF + 0x0006, 0x0015, 0x14f1, 0x1503, 0x14f1, 0x1512, 0x1524, 0x1524, + 0x0006, 0x0015, 0x1536, 0x154f, 0x1536, 0x155f, 0x1572, 0x1572, + 0x0003, 0x027f, 0x0000, 0x0282, 0x0001, 0x000b, 0x0b8f, 0x0002, + 0x0285, 0x028d, 0x0006, 0x0015, 0x14f1, 0x1503, 0x14f1, 0x1512, + 0x1524, 0x1524, 0x0006, 0x0015, 0x1536, 0x154f, 0x1536, 0x155f, + 0x1572, 0x1572, 0x0003, 0x0299, 0x029c, 0x02a1, 0x0001, 0x0015, + 0x1585, 0x0003, 0x0015, 0x158e, 0x159c, 0x15a9, 0x0002, 0x02a4, + 0x02ac, 0x0006, 0x0015, 0x15b8, 0x15b8, 0x15b8, 0x15b8, 0x15b8, + // Entry D8C0 - D8FF + 0x15b8, 0x0006, 0x0015, 0x15cb, 0x15e2, 0x15cb, 0x15e2, 0x15e2, + 0x15e2, 0x0003, 0x02b8, 0x0000, 0x02bb, 0x0001, 0x0015, 0x1585, + 0x0002, 0x02be, 0x02c6, 0x0006, 0x0015, 0x15b8, 0x15b8, 0x15b8, + 0x15b8, 0x15b8, 0x15b8, 0x0006, 0x0015, 0x15cb, 0x15e2, 0x15cb, + 0x15e2, 0x15e2, 0x15e2, 0x0003, 0x02d2, 0x0000, 0x02d5, 0x0001, + 0x0015, 0x15f6, 0x0002, 0x02d8, 0x02e0, 0x0006, 0x0015, 0x15b8, + 0x15b8, 0x15b8, 0x15b8, 0x15b8, 0x15b8, 0x0006, 0x0015, 0x15cb, + 0x15e2, 0x15cb, 0x15e2, 0x15e2, 0x15e2, 0x0003, 0x02ec, 0x02ef, + // Entry D900 - D93F + 0x02f4, 0x0001, 0x0015, 0x15fb, 0x0003, 0x0015, 0x15ff, 0x160c, + 0x1616, 0x0002, 0x02f7, 0x02ff, 0x0006, 0x0015, 0x1620, 0x162e, + 0x1620, 0x1638, 0x1620, 0x1620, 0x0006, 0x0015, 0x1645, 0x1645, + 0x1645, 0x1654, 0x1645, 0x1645, 0x0003, 0x030b, 0x0000, 0x030e, + 0x0001, 0x0015, 0x15fb, 0x0002, 0x0311, 0x0319, 0x0006, 0x0015, + 0x1620, 0x162e, 0x1620, 0x1638, 0x1620, 0x1620, 0x0006, 0x0015, + 0x1645, 0x1645, 0x1645, 0x1663, 0x1645, 0x1645, 0x0003, 0x0325, + 0x0000, 0x0328, 0x0001, 0x0015, 0x15fb, 0x0002, 0x032b, 0x0333, + // Entry D940 - D97F + 0x0006, 0x0015, 0x1620, 0x162e, 0x1620, 0x1638, 0x1620, 0x1620, + 0x0006, 0x0015, 0x1645, 0x1645, 0x1645, 0x1654, 0x1645, 0x1645, + 0x0004, 0x0340, 0x0343, 0x0348, 0x035b, 0x0001, 0x0015, 0x1671, + 0x0003, 0x0015, 0x1679, 0x168b, 0x169a, 0x0002, 0x034b, 0x0353, + 0x0006, 0x0015, 0x16a8, 0x16ba, 0x16a8, 0x16c8, 0x16a8, 0x16a8, + 0x0006, 0x0015, 0x16d8, 0x16d8, 0x16d8, 0x16d8, 0x16d8, 0x16d8, + 0x0001, 0x0015, 0x16eb, 0x0004, 0x0363, 0x0000, 0x0366, 0x0379, + 0x0001, 0x0015, 0x1671, 0x0002, 0x0369, 0x0371, 0x0006, 0x0015, + // Entry D980 - D9BF + 0x16a8, 0x16ba, 0x16a8, 0x16c8, 0x16a8, 0x16a8, 0x0006, 0x0015, + 0x16d8, 0x16d8, 0x16d8, 0x16f7, 0x16d8, 0x16d8, 0x0001, 0x0015, + 0x16eb, 0x0004, 0x0381, 0x0000, 0x0384, 0x0397, 0x0001, 0x0015, + 0x1671, 0x0002, 0x0387, 0x038f, 0x0006, 0x0015, 0x16a8, 0x16a8, + 0x16a8, 0x16a8, 0x16a8, 0x16a8, 0x0006, 0x0015, 0x16d8, 0x16d8, + 0x16d8, 0x16f7, 0x16d8, 0x16d8, 0x0001, 0x0015, 0x16eb, 0x0001, + 0x039c, 0x0001, 0x0015, 0x1708, 0x0001, 0x03a1, 0x0001, 0x0015, + 0x171e, 0x0001, 0x03a6, 0x0001, 0x0015, 0x171e, 0x0003, 0x03ad, + // Entry D9C0 - D9FF + 0x03b0, 0x03b7, 0x0001, 0x0015, 0x172c, 0x0005, 0x0015, 0x173b, + 0x1740, 0x1747, 0x1734, 0x174d, 0x0002, 0x03ba, 0x03c2, 0x0006, + 0x0015, 0x1756, 0x1768, 0x1756, 0x1776, 0x1756, 0x1756, 0x0006, + 0x0015, 0x1785, 0x1785, 0x1785, 0x1798, 0x1785, 0x1785, 0x0003, + 0x03ce, 0x03d1, 0x03d8, 0x0001, 0x0015, 0x172c, 0x0005, 0x0015, + 0x173b, 0x1740, 0x1747, 0x1734, 0x174d, 0x0002, 0x03db, 0x03e3, + 0x0006, 0x0015, 0x1756, 0x1768, 0x1756, 0x1776, 0x1756, 0x1756, + 0x0006, 0x0015, 0x1785, 0x1785, 0x1785, 0x1798, 0x1785, 0x1785, + // Entry DA00 - DA3F + 0x0003, 0x03ef, 0x0000, 0x03f2, 0x0001, 0x0015, 0x172c, 0x0002, + 0x03f5, 0x03fd, 0x0006, 0x0015, 0x1756, 0x1756, 0x1756, 0x1756, + 0x1756, 0x1756, 0x0006, 0x0015, 0x1785, 0x1785, 0x1785, 0x1798, + 0x1785, 0x1785, 0x0001, 0x0407, 0x0001, 0x0015, 0x17ac, 0x0001, + 0x040c, 0x0001, 0x0015, 0x17c6, 0x0001, 0x0411, 0x0001, 0x0015, + 0x17db, 0x0001, 0x0416, 0x0001, 0x0015, 0x17e6, 0x0001, 0x041b, + 0x0001, 0x0015, 0x17e6, 0x0001, 0x0420, 0x0001, 0x0015, 0x17e6, + 0x0001, 0x0425, 0x0001, 0x0015, 0x17fc, 0x0001, 0x042a, 0x0001, + // Entry DA40 - DA7F + 0x0015, 0x17fc, 0x0001, 0x042f, 0x0001, 0x0015, 0x17fc, 0x0003, + 0x0000, 0x0436, 0x043b, 0x0003, 0x0015, 0x180d, 0x181f, 0x182c, + 0x0002, 0x043e, 0x0446, 0x0006, 0x0015, 0x183b, 0x183b, 0x183b, + 0x183b, 0x183b, 0x183b, 0x0006, 0x0015, 0x184e, 0x184e, 0x184e, + 0x184e, 0x184e, 0x184e, 0x0003, 0x0000, 0x0452, 0x0457, 0x0003, + 0x0015, 0x1862, 0x186f, 0x1877, 0x0002, 0x045a, 0x0462, 0x0006, + 0x0015, 0x183b, 0x183b, 0x183b, 0x183b, 0x183b, 0x183b, 0x0006, + 0x0015, 0x184e, 0x184e, 0x184e, 0x184e, 0x184e, 0x184e, 0x0003, + // Entry DA80 - DABF + 0x0000, 0x046e, 0x0473, 0x0003, 0x0015, 0x1862, 0x186f, 0x1877, + 0x0002, 0x0476, 0x047e, 0x0006, 0x0015, 0x183b, 0x183b, 0x183b, + 0x183b, 0x183b, 0x183b, 0x0006, 0x0015, 0x184e, 0x184e, 0x184e, + 0x184e, 0x184e, 0x184e, 0x0003, 0x0000, 0x048a, 0x048f, 0x0003, + 0x0015, 0x1881, 0x1894, 0x18a2, 0x0002, 0x0492, 0x049a, 0x0006, + 0x0015, 0x18b2, 0x18b2, 0x18b2, 0x18b2, 0x18b2, 0x18b2, 0x0006, + 0x0015, 0x18c6, 0x18c6, 0x18c6, 0x18c6, 0x18c6, 0x18c6, 0x0003, + 0x0000, 0x04a6, 0x04ab, 0x0003, 0x0015, 0x18db, 0x18e9, 0x18f2, + // Entry DAC0 - DAFF + 0x0002, 0x04ae, 0x04b6, 0x0006, 0x0015, 0x18b2, 0x18b2, 0x18b2, + 0x18b2, 0x18b2, 0x18b2, 0x0006, 0x0015, 0x18c6, 0x18c6, 0x18c6, + 0x18c6, 0x18c6, 0x18c6, 0x0003, 0x0000, 0x04c2, 0x04c7, 0x0003, + 0x0015, 0x18db, 0x18e9, 0x18f2, 0x0002, 0x04ca, 0x04d2, 0x0006, + 0x0015, 0x18b2, 0x18b2, 0x18b2, 0x18b2, 0x18b2, 0x18b2, 0x0006, + 0x0015, 0x18c6, 0x18c6, 0x18c6, 0x18c6, 0x18c6, 0x18c6, 0x0003, + 0x0000, 0x04de, 0x04e3, 0x0003, 0x0015, 0x18fd, 0x1912, 0x1922, + 0x0002, 0x04e6, 0x04ee, 0x0006, 0x0015, 0x1934, 0x1934, 0x1934, + // Entry DB00 - DB3F + 0x1934, 0x1934, 0x1934, 0x0006, 0x0015, 0x194a, 0x194a, 0x194a, + 0x194a, 0x194a, 0x194a, 0x0003, 0x0000, 0x04fa, 0x04ff, 0x0003, + 0x0015, 0x1961, 0x1971, 0x197c, 0x0002, 0x0502, 0x050a, 0x0006, + 0x0015, 0x1934, 0x1934, 0x1934, 0x1934, 0x1934, 0x1934, 0x0006, + 0x0015, 0x194a, 0x194a, 0x194a, 0x194a, 0x194a, 0x194a, 0x0003, + 0x0000, 0x0516, 0x051b, 0x0003, 0x0015, 0x1961, 0x1971, 0x197c, + 0x0002, 0x051e, 0x0526, 0x0006, 0x0015, 0x1934, 0x1934, 0x1934, + 0x1934, 0x1934, 0x1934, 0x0006, 0x0015, 0x194a, 0x194a, 0x194a, + // Entry DB40 - DB7F + 0x194a, 0x194a, 0x194a, 0x0003, 0x0000, 0x0532, 0x0537, 0x0003, + 0x0015, 0x1989, 0x199f, 0x19b0, 0x0002, 0x053a, 0x0542, 0x0006, + 0x0015, 0x19c3, 0x19c3, 0x19c3, 0x19c3, 0x19c3, 0x19c3, 0x0006, + 0x0015, 0x19da, 0x19da, 0x19da, 0x19da, 0x19da, 0x19da, 0x0003, + 0x0000, 0x054e, 0x0553, 0x0003, 0x0015, 0x19f2, 0x1a03, 0x1a0f, + 0x0002, 0x0556, 0x055e, 0x0006, 0x0015, 0x19c3, 0x19c3, 0x19c3, + 0x19c3, 0x19c3, 0x19c3, 0x0006, 0x0015, 0x19da, 0x19da, 0x19da, + 0x19da, 0x19da, 0x19da, 0x0003, 0x0000, 0x056a, 0x056f, 0x0003, + // Entry DB80 - DBBF + 0x0015, 0x19f2, 0x1a03, 0x1a0f, 0x0002, 0x0572, 0x057a, 0x0006, + 0x0015, 0x19c3, 0x19c3, 0x19c3, 0x19c3, 0x19c3, 0x19c3, 0x0006, + 0x0015, 0x19da, 0x19da, 0x19da, 0x19da, 0x19da, 0x19da, 0x0003, + 0x0000, 0x0586, 0x058b, 0x0003, 0x0015, 0x1a1d, 0x1a2f, 0x1a3c, + 0x0002, 0x058e, 0x0596, 0x0006, 0x0015, 0x1a4b, 0x1a4b, 0x1a4b, + 0x1a4b, 0x1a4b, 0x1a4b, 0x0006, 0x0015, 0x1a5e, 0x1a5e, 0x1a5e, + 0x1a5e, 0x1a5e, 0x1a5e, 0x0003, 0x0000, 0x05a2, 0x05a7, 0x0003, + 0x0015, 0x1a72, 0x1a7f, 0x1a87, 0x0002, 0x05aa, 0x05b2, 0x0006, + // Entry DBC0 - DBFF + 0x0015, 0x1a4b, 0x1a4b, 0x1a4b, 0x1a4b, 0x1a4b, 0x1a4b, 0x0006, + 0x0015, 0x1a5e, 0x1a5e, 0x1a5e, 0x1a5e, 0x1a5e, 0x1a5e, 0x0003, + 0x0000, 0x05be, 0x05c3, 0x0003, 0x0015, 0x1a72, 0x1a7f, 0x1a87, + 0x0002, 0x05c6, 0x05ce, 0x0006, 0x0015, 0x1a4b, 0x1a4b, 0x1a4b, + 0x1a4b, 0x1a4b, 0x1a4b, 0x0006, 0x0015, 0x1a5e, 0x1a5e, 0x1a5e, + 0x1a5e, 0x1a5e, 0x1a5e, 0x0003, 0x0000, 0x05da, 0x05df, 0x0003, + 0x0015, 0x1a91, 0x1aa6, 0x1ab6, 0x0002, 0x05e2, 0x05ea, 0x0006, + 0x0015, 0x1ac8, 0x1ac8, 0x1ac8, 0x1ac8, 0x1ac8, 0x1ac8, 0x0006, + // Entry DC00 - DC3F + 0x0015, 0x1ade, 0x1ade, 0x1ade, 0x1ade, 0x1ade, 0x1ade, 0x0003, + 0x0000, 0x05f6, 0x05fb, 0x0003, 0x0015, 0x1af5, 0x1b05, 0x1b10, + 0x0002, 0x05fe, 0x0606, 0x0006, 0x0015, 0x1ac8, 0x1ac8, 0x1ac8, + 0x1ac8, 0x1ac8, 0x1ac8, 0x0006, 0x0015, 0x1ade, 0x1ade, 0x1ade, + 0x1ade, 0x1ade, 0x1ade, 0x0003, 0x0000, 0x0612, 0x0617, 0x0003, + 0x0015, 0x1af5, 0x1b05, 0x1b10, 0x0002, 0x061a, 0x0622, 0x0006, + 0x0015, 0x1ac8, 0x1ac8, 0x1ac8, 0x1ac8, 0x1ac8, 0x1ac8, 0x0006, + 0x0015, 0x1ade, 0x1ade, 0x1ade, 0x1ade, 0x1ade, 0x1ade, 0x0003, + // Entry DC40 - DC7F + 0x0000, 0x062e, 0x0633, 0x0003, 0x0015, 0x1b1d, 0x1b32, 0x1b42, + 0x0002, 0x0636, 0x063e, 0x0006, 0x0015, 0x1b54, 0x1b54, 0x1b54, + 0x1b54, 0x1b54, 0x1b54, 0x0006, 0x0015, 0x1b6a, 0x1b6a, 0x1b6a, + 0x1b6a, 0x1b6a, 0x1b6a, 0x0003, 0x0000, 0x064a, 0x064f, 0x0003, + 0x0015, 0x1b81, 0x1b91, 0x1b9c, 0x0002, 0x0652, 0x065a, 0x0006, + 0x0015, 0x1b54, 0x1b54, 0x1b54, 0x1b54, 0x1b54, 0x1b54, 0x0006, + 0x0015, 0x1b6a, 0x1b6a, 0x1b6a, 0x1b6a, 0x1b6a, 0x1b6a, 0x0003, + 0x0000, 0x0666, 0x066b, 0x0003, 0x0015, 0x1b81, 0x1b91, 0x1b9c, + // Entry DC80 - DCBF + 0x0002, 0x066e, 0x0676, 0x0006, 0x0015, 0x1b54, 0x1b54, 0x1b54, + 0x1b54, 0x1b54, 0x1b54, 0x0006, 0x0015, 0x1b6a, 0x1b6a, 0x1b6a, + 0x1b6a, 0x1b6a, 0x1b6a, 0x0001, 0x0680, 0x0001, 0x0007, 0x0892, + 0x0001, 0x0685, 0x0001, 0x0007, 0x0892, 0x0001, 0x068a, 0x0001, + 0x0007, 0x0892, 0x0003, 0x0691, 0x0694, 0x0698, 0x0001, 0x0015, + 0x1ba9, 0x0002, 0x0015, 0xffff, 0x1bad, 0x0002, 0x069b, 0x06a3, + 0x0006, 0x0015, 0x1bb8, 0x1bc6, 0x1bb8, 0x1bb8, 0x1bb8, 0x1bb8, + 0x0006, 0x0015, 0x1bd0, 0x1bd0, 0x1bd0, 0x1bd0, 0x1bd0, 0x1bd0, + // Entry DCC0 - DCFF + 0x0003, 0x06af, 0x0000, 0x06b2, 0x0001, 0x0015, 0x1ba9, 0x0002, + 0x06b5, 0x06bd, 0x0006, 0x0015, 0x1bb8, 0x1bc6, 0x1bb8, 0x1bb8, + 0x1bb8, 0x1bb8, 0x0006, 0x0015, 0x1bd0, 0x1bdf, 0x1bd0, 0x1bd0, + 0x1bd0, 0x1bd0, 0x0003, 0x06c9, 0x0000, 0x06cc, 0x0001, 0x0015, + 0x1ba9, 0x0002, 0x06cf, 0x06d7, 0x0006, 0x0015, 0x1bb8, 0x1bb8, + 0x1bb8, 0x1bb8, 0x1bb8, 0x1bb8, 0x0006, 0x0015, 0x1bd0, 0x1bd0, + 0x1bd0, 0x1bd0, 0x1bd0, 0x1bd0, 0x0003, 0x06e3, 0x06e6, 0x06ea, + 0x0001, 0x0015, 0x1bea, 0x0002, 0x0015, 0xffff, 0x1bf0, 0x0002, + // Entry DD00 - DD3F + 0x06ed, 0x06f5, 0x0006, 0x0015, 0x1bfc, 0x1bfc, 0x1bfc, 0x1bfc, + 0x1bfc, 0x1bfc, 0x0006, 0x0015, 0x1c0c, 0x1c0c, 0x1c0c, 0x1c0c, + 0x1c0c, 0x1c0c, 0x0003, 0x0701, 0x0000, 0x0704, 0x0001, 0x0015, + 0x1c1d, 0x0002, 0x0707, 0x070f, 0x0006, 0x0015, 0x1bfc, 0x1c22, + 0x1bfc, 0x1c31, 0x1bfc, 0x1bfc, 0x0006, 0x0015, 0x1c0c, 0x1c0c, + 0x1c0c, 0x1c40, 0x1c0c, 0x1c0c, 0x0003, 0x071b, 0x0000, 0x071e, + 0x0001, 0x0015, 0x1c1d, 0x0002, 0x0721, 0x0729, 0x0006, 0x0015, + 0x1c22, 0x1c22, 0x1c22, 0x1c22, 0x1c22, 0x1c22, 0x0006, 0x0015, + // Entry DD40 - DD7F + 0x1c50, 0x1c50, 0x1c50, 0x1c50, 0x1c50, 0x1c50, 0x0003, 0x0735, + 0x0738, 0x073c, 0x0001, 0x0015, 0x1c60, 0x0002, 0x0015, 0xffff, + 0x1c67, 0x0002, 0x073f, 0x0747, 0x0006, 0x0015, 0x1c6c, 0x1c6c, + 0x1c6c, 0x1c6c, 0x1c6c, 0x1c6c, 0x0006, 0x0015, 0x1c7d, 0x1c7d, + 0x1c7d, 0x1c7d, 0x1c7d, 0x1c7d, 0x0003, 0x0753, 0x0000, 0x0756, + 0x0001, 0x0015, 0x1c60, 0x0002, 0x0759, 0x0761, 0x0006, 0x0015, + 0x1c6c, 0x1c6c, 0x1c6c, 0x1c6c, 0x1c6c, 0x1c6c, 0x0006, 0x0015, + 0x1c7d, 0x1c7d, 0x1c7d, 0x1c7d, 0x1c7d, 0x1c7d, 0x0003, 0x076d, + // Entry DD80 - DDBF + 0x0000, 0x0770, 0x0001, 0x0015, 0x1c60, 0x0002, 0x0773, 0x077b, + 0x0006, 0x0015, 0x1c6c, 0x1c6c, 0x1c6c, 0x1c6c, 0x1c6c, 0x1c6c, + 0x0006, 0x0015, 0x1c7d, 0x1c7d, 0x1c7d, 0x1c7d, 0x1c7d, 0x1c7d, + 0x0001, 0x0785, 0x0001, 0x0015, 0x1c8f, 0x0001, 0x078a, 0x0001, + 0x0015, 0x1c8f, 0x0001, 0x078f, 0x0001, 0x0015, 0x1c9d, 0x0004, + 0x0797, 0x079c, 0x07a1, 0x07b0, 0x0003, 0x0000, 0x1dc7, 0x227b, + 0x2282, 0x0003, 0x0015, 0x1ca5, 0x1caf, 0x1cbd, 0x0002, 0x0000, + 0x07a4, 0x0003, 0x0000, 0x07ab, 0x07a8, 0x0001, 0x0015, 0x1ccf, + // Entry DDC0 - DDFF + 0x0003, 0x0015, 0xffff, 0x1cea, 0x1cfc, 0x0002, 0x0979, 0x07b3, + 0x0003, 0x084d, 0x08e3, 0x07b7, 0x0094, 0x0015, 0x1d13, 0x1d25, + 0x1d3e, 0x1d54, 0x1d85, 0x1dce, 0x1e03, 0x1e4e, 0x1eba, 0x1f23, + 0x1f95, 0xffff, 0x1ff4, 0x2025, 0x2061, 0x20a4, 0x20f0, 0x2131, + 0x218a, 0x21f1, 0x225f, 0x22b5, 0x2306, 0x2344, 0x2381, 0x23af, + 0x23bc, 0x23da, 0x2406, 0x242f, 0x245d, 0x247a, 0x24ae, 0x24e0, + 0x2519, 0x2547, 0x255c, 0x2580, 0x25be, 0x2604, 0x2626, 0x2632, + 0x264b, 0x2671, 0x26a1, 0x26c6, 0x2714, 0x2748, 0x2777, 0x27d1, + // Entry DE00 - DE3F + 0x282c, 0x284e, 0x2864, 0x2892, 0x28a2, 0x28be, 0x28e6, 0x28fd, + 0x292f, 0x298b, 0x29cf, 0x29e5, 0x2a08, 0x2a50, 0x2a87, 0x2aa9, + 0x2ab5, 0x2ac9, 0x2adc, 0x2af7, 0x2b0f, 0x2b34, 0x2b64, 0x2b99, + 0x2bcc, 0xffff, 0x2bf2, 0x2c0b, 0x2c32, 0x2c56, 0x2c75, 0x2ca5, + 0x2cb6, 0x2ce1, 0x2d1b, 0x2d3e, 0x2d66, 0x2d75, 0x2d86, 0x2d96, + 0x2dbe, 0x2dea, 0x2e16, 0x2e77, 0x2ec2, 0x2efd, 0x2f23, 0x2f31, + 0x2f3d, 0x2f60, 0x2fae, 0x2ff5, 0x3027, 0x3032, 0x305f, 0x30b1, + 0x30ec, 0x311d, 0x3147, 0x3153, 0x317c, 0x31b2, 0x31e6, 0x3212, + // Entry DE40 - DE7F + 0x3248, 0x3292, 0x32a1, 0x32af, 0x32bf, 0x32ce, 0x32eb, 0x3322, + 0x3354, 0x3378, 0x3389, 0x3399, 0x33b0, 0x33c1, 0x33d0, 0x33dc, + 0x33f6, 0x341c, 0x342d, 0x3447, 0x346b, 0x348a, 0x34bc, 0x34d7, + 0x3510, 0x354c, 0x3574, 0x3596, 0x35d6, 0x3602, 0x360f, 0x361f, + 0x3643, 0x367f, 0x0094, 0x0015, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1d6d, 0x1dc1, 0x1df4, 0x1e2d, 0x1e9c, 0x1f02, 0x1f71, 0xffff, + 0x1fe9, 0x2016, 0x204f, 0x208b, 0x20e2, 0x2118, 0x216f, 0x21cc, + 0x2247, 0x229b, 0x22f5, 0x2334, 0x2370, 0xffff, 0xffff, 0x23ca, + // Entry DE80 - DEBF + 0xffff, 0x241e, 0xffff, 0x246c, 0x24a2, 0x24d2, 0x2508, 0xffff, + 0xffff, 0x2571, 0x25aa, 0x25f9, 0xffff, 0xffff, 0xffff, 0x265f, + 0xffff, 0x26af, 0x2700, 0xffff, 0x2761, 0x27af, 0x2821, 0xffff, + 0xffff, 0xffff, 0xffff, 0x28b0, 0xffff, 0xffff, 0x2915, 0x296f, + 0xffff, 0xffff, 0x29f2, 0x2a40, 0x2a7c, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2b29, 0x2b56, 0x2b8c, 0x2bbf, 0xffff, + 0xffff, 0xffff, 0x2c26, 0xffff, 0x2c63, 0xffff, 0xffff, 0x2cca, + 0xffff, 0x2d30, 0xffff, 0xffff, 0xffff, 0xffff, 0x2dae, 0xffff, + // Entry DEC0 - DEFF + 0x2df7, 0x2e60, 0x2eb1, 0x2ef0, 0xffff, 0xffff, 0xffff, 0x2f49, + 0x2f9a, 0x2fe2, 0xffff, 0xffff, 0x3045, 0x309f, 0x30e1, 0x310e, + 0xffff, 0xffff, 0x316d, 0x31a6, 0x31d6, 0xffff, 0x3229, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x32dc, 0x3315, 0x3348, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x33e9, 0xffff, + 0xffff, 0x343b, 0xffff, 0x3477, 0xffff, 0x34c9, 0x34ff, 0x353e, + 0xffff, 0x3584, 0x35c6, 0xffff, 0xffff, 0xffff, 0x3635, 0x366b, + 0x0094, 0x0015, 0xffff, 0xffff, 0xffff, 0xffff, 0x1da5, 0x1de3, + // Entry DF00 - DF3F + 0x1e1a, 0x1e77, 0x1ee0, 0x1f4c, 0x1fc1, 0xffff, 0x2007, 0x203c, + 0x2078, 0x20c5, 0x2106, 0x2152, 0x21ad, 0x221e, 0x227f, 0x22d7, + 0x231f, 0x235c, 0x239a, 0xffff, 0xffff, 0x23f2, 0xffff, 0x2448, + 0xffff, 0x2490, 0x24c2, 0x24f6, 0x2532, 0xffff, 0xffff, 0x2597, + 0x25da, 0x2617, 0xffff, 0xffff, 0xffff, 0x268b, 0xffff, 0x26e5, + 0x2730, 0xffff, 0x2795, 0x27fb, 0x283f, 0xffff, 0xffff, 0xffff, + 0xffff, 0x28d4, 0xffff, 0xffff, 0x2951, 0x29af, 0xffff, 0xffff, + 0x2a26, 0x2a68, 0x2a9a, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry DF40 - DF7F + 0xffff, 0x2b47, 0x2b7a, 0x2bae, 0x2be1, 0xffff, 0xffff, 0xffff, + 0x2c46, 0xffff, 0x2c8f, 0xffff, 0xffff, 0x2d00, 0xffff, 0x2d54, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2dd6, 0xffff, 0x2e3d, 0x2e96, + 0x2edb, 0x2f12, 0xffff, 0xffff, 0xffff, 0x2f7f, 0x2fca, 0x3010, + 0xffff, 0xffff, 0x3081, 0x30cb, 0x30ff, 0x3134, 0xffff, 0xffff, + 0x3193, 0x31c6, 0x31fe, 0xffff, 0x326f, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x3302, 0x3337, 0x3368, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x340b, 0xffff, 0xffff, 0x345b, + // Entry DF80 - DFBF + 0xffff, 0x34a5, 0xffff, 0x34ed, 0x3529, 0x3562, 0xffff, 0x35b0, + 0x35ee, 0xffff, 0xffff, 0xffff, 0x3659, 0x369b, 0x0003, 0x097d, + 0x09ec, 0x09b0, 0x0031, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry DFC0 - DFFF + 0xffff, 0x0045, 0x004e, 0xffff, 0x0057, 0x003a, 0x0007, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0045, 0x004e, 0xffff, 0x0057, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry E000 - E03F + 0x2481, 0x0031, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0049, 0x0052, 0xffff, 0x005b, 0x0003, 0x0004, 0x03d5, 0x084e, + 0x0012, 0x0017, 0x0000, 0x0030, 0x0000, 0x0062, 0x0000, 0x0094, + // Entry E040 - E07F + 0x00bf, 0x02e8, 0x0317, 0x0345, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0373, 0x038b, 0x03b9, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, + 0x001d, 0x0003, 0x0026, 0x002b, 0x0021, 0x0001, 0x0023, 0x0001, + 0x0000, 0x0000, 0x0001, 0x0028, 0x0001, 0x0000, 0x0000, 0x0001, + 0x002d, 0x0001, 0x0000, 0x0000, 0x0005, 0x0036, 0x0000, 0x0000, + 0x0000, 0x004c, 0x0001, 0x0038, 0x0003, 0x0000, 0x0000, 0x003c, + 0x000e, 0x0016, 0xffff, 0x0000, 0x0004, 0x000a, 0x0010, 0x0017, + 0x001d, 0x0024, 0x002d, 0x0038, 0x0040, 0x004a, 0x004f, 0x0055, + // Entry E080 - E0BF + 0x0003, 0x0056, 0x005c, 0x0050, 0x0001, 0x0052, 0x0002, 0x0016, + 0x005a, 0x0069, 0x0001, 0x0058, 0x0002, 0x0016, 0x0078, 0x0082, + 0x0001, 0x005e, 0x0002, 0x0016, 0x008c, 0x0092, 0x0005, 0x0068, + 0x0000, 0x0000, 0x0000, 0x007e, 0x0001, 0x006a, 0x0003, 0x0000, + 0x0000, 0x006e, 0x000e, 0x0014, 0xffff, 0x04f6, 0x3444, 0x344b, + 0x3451, 0x3458, 0x0519, 0x0521, 0x345c, 0x3463, 0x0537, 0x053c, + 0x346a, 0x3472, 0x0003, 0x0088, 0x008e, 0x0082, 0x0001, 0x0084, + 0x0002, 0x0016, 0x005a, 0x0069, 0x0001, 0x008a, 0x0002, 0x0016, + // Entry E0C0 - E0FF + 0x0078, 0x0082, 0x0001, 0x0090, 0x0002, 0x0016, 0x008c, 0x0092, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x009d, 0x0000, + 0x00ae, 0x0004, 0x00ab, 0x00a5, 0x00a2, 0x00a8, 0x0001, 0x0014, + 0x0349, 0x0001, 0x0014, 0x035a, 0x0001, 0x0016, 0x0098, 0x0001, + 0x0002, 0x028b, 0x0004, 0x00bc, 0x00b6, 0x00b3, 0x00b9, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0008, 0x00c8, 0x012d, 0x0184, 0x01b9, + 0x0290, 0x02b5, 0x02c6, 0x02d7, 0x0002, 0x00cb, 0x00fc, 0x0003, + // Entry E100 - E13F + 0x00cf, 0x00de, 0x00ed, 0x000d, 0x0016, 0xffff, 0x00a3, 0x00a8, + 0x00ad, 0x00b2, 0x00b7, 0x00bb, 0x00c0, 0x00c5, 0x00ca, 0x00cf, + 0x00d4, 0x00d9, 0x000d, 0x0000, 0xffff, 0x1e5d, 0x2240, 0x2242, + 0x21c6, 0x2242, 0x1e5d, 0x1e5d, 0x21c6, 0x21c8, 0x2294, 0x21c4, + 0x2244, 0x000d, 0x000d, 0xffff, 0x0089, 0x0090, 0x323d, 0x009d, + 0x3243, 0x00a3, 0x00a8, 0x3247, 0x324e, 0x3258, 0x3260, 0x3269, + 0x0003, 0x0100, 0x010f, 0x011e, 0x000d, 0x0016, 0xffff, 0x00a3, + 0x00a8, 0x00ad, 0x00b2, 0x00de, 0x00bb, 0x00c0, 0x00c5, 0x00ca, + // Entry E140 - E17F + 0x00cf, 0x00d4, 0x00d9, 0x000d, 0x0000, 0xffff, 0x1e5d, 0x2240, + 0x2242, 0x21c6, 0x2242, 0x1e5d, 0x1e5d, 0x21c6, 0x21c8, 0x2294, + 0x21c4, 0x2244, 0x000d, 0x000d, 0xffff, 0x0089, 0x0090, 0x323d, + 0x009d, 0x3272, 0x00a3, 0x00a8, 0x3247, 0x324e, 0x3258, 0x3260, + 0x3269, 0x0002, 0x0130, 0x015a, 0x0005, 0x0136, 0x013f, 0x0151, + 0x0000, 0x0148, 0x0007, 0x0016, 0x00e2, 0x00e8, 0x00ed, 0x00f2, + 0x00f7, 0x00fc, 0x0101, 0x0007, 0x0000, 0x21c8, 0x2242, 0x04dd, + 0x2294, 0x04dd, 0x2240, 0x2296, 0x0007, 0x0016, 0x0107, 0x010b, + // Entry E180 - E1BF + 0x010e, 0x0111, 0x0114, 0x0117, 0x011a, 0x0007, 0x0016, 0x011e, + 0x0126, 0x012d, 0x0135, 0x013c, 0x0144, 0x014b, 0x0005, 0x0160, + 0x0169, 0x017b, 0x0000, 0x0172, 0x0007, 0x0016, 0x0153, 0x0158, + 0x015c, 0x0160, 0x0164, 0x0168, 0x016c, 0x0007, 0x0000, 0x21c8, + 0x2242, 0x04dd, 0x2294, 0x04dd, 0x2240, 0x2296, 0x0007, 0x0016, + 0x0107, 0x010b, 0x010e, 0x0111, 0x0114, 0x0117, 0x011a, 0x0007, + 0x0016, 0x011e, 0x0126, 0x012d, 0x0135, 0x013c, 0x0144, 0x014b, + 0x0002, 0x0187, 0x01a0, 0x0003, 0x018b, 0x0192, 0x0199, 0x0005, + // Entry E1C0 - E1FF + 0x0016, 0xffff, 0x0171, 0x0179, 0x0181, 0x0189, 0x0005, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x0005, 0x0016, 0xffff, + 0x0191, 0x019c, 0x01a7, 0x01b2, 0x0003, 0x01a4, 0x01ab, 0x01b2, + 0x0005, 0x0016, 0xffff, 0x0171, 0x0179, 0x0181, 0x0189, 0x0005, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x0005, 0x0016, + 0xffff, 0x0191, 0x019c, 0x01a7, 0x01b2, 0x0002, 0x01bc, 0x0226, + 0x0003, 0x01c0, 0x01e2, 0x0204, 0x0009, 0x01cd, 0x01d0, 0x01ca, + 0x01d3, 0x01d9, 0x01dc, 0x01df, 0x0000, 0x01d6, 0x0001, 0x0016, + // Entry E200 - E23F + 0x01bd, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0001, + 0x0016, 0x01c4, 0x0001, 0x0016, 0x01d0, 0x0001, 0x0016, 0x01df, + 0x0001, 0x0016, 0x01f0, 0x0001, 0x0016, 0x01fb, 0x0009, 0x01ef, + 0x01f2, 0x01ec, 0x01f5, 0x01fb, 0x01fe, 0x0201, 0x0000, 0x01f8, + 0x0001, 0x0016, 0x01bd, 0x0001, 0x0000, 0x1f9c, 0x0001, 0x0000, + 0x21e4, 0x0001, 0x0016, 0x01c4, 0x0001, 0x0016, 0x01d0, 0x0001, + 0x0016, 0x01df, 0x0001, 0x0016, 0x01f0, 0x0001, 0x0016, 0x01fb, + 0x0009, 0x0211, 0x0214, 0x020e, 0x0217, 0x021d, 0x0220, 0x0223, + // Entry E240 - E27F + 0x0000, 0x021a, 0x0001, 0x0016, 0x01bd, 0x0001, 0x0000, 0x04ef, + 0x0001, 0x0000, 0x04f2, 0x0001, 0x0016, 0x01c4, 0x0001, 0x0016, + 0x01d0, 0x0001, 0x0016, 0x01df, 0x0001, 0x0016, 0x01f0, 0x0001, + 0x0016, 0x01fb, 0x0003, 0x022a, 0x024c, 0x026e, 0x0009, 0x0237, + 0x023a, 0x0234, 0x023d, 0x0243, 0x0246, 0x0249, 0x0000, 0x0240, + 0x0001, 0x0016, 0x01bd, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, + 0x04f2, 0x0001, 0x0016, 0x0205, 0x0001, 0x0016, 0x020c, 0x0001, + 0x0016, 0x0216, 0x0001, 0x0016, 0x0222, 0x0001, 0x0016, 0x0228, + // Entry E280 - E2BF + 0x0009, 0x0259, 0x025c, 0x0256, 0x025f, 0x0265, 0x0268, 0x026b, + 0x0000, 0x0262, 0x0001, 0x0016, 0x01bd, 0x0001, 0x0000, 0x04ef, + 0x0001, 0x0000, 0x04f2, 0x0001, 0x0016, 0x0205, 0x0001, 0x0016, + 0x020c, 0x0001, 0x0016, 0x0216, 0x0001, 0x0016, 0x0222, 0x0001, + 0x0016, 0x0228, 0x0009, 0x027b, 0x027e, 0x0278, 0x0281, 0x0287, + 0x028a, 0x028d, 0x0000, 0x0284, 0x0001, 0x0016, 0x01bd, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0001, 0x0016, 0x0205, + 0x0001, 0x0016, 0x020c, 0x0001, 0x0016, 0x0216, 0x0001, 0x0016, + // Entry E2C0 - E2FF + 0x0222, 0x0001, 0x0016, 0x0228, 0x0003, 0x029f, 0x02aa, 0x0294, + 0x0002, 0x0297, 0x029b, 0x0002, 0x0016, 0x022c, 0x0250, 0x0002, + 0x0016, 0x0232, 0x0256, 0x0002, 0x02a2, 0x02a6, 0x0002, 0x0016, + 0x022c, 0x0250, 0x0002, 0x0016, 0x026f, 0x0276, 0x0002, 0x02ad, + 0x02b1, 0x0002, 0x0016, 0x027b, 0x0283, 0x0002, 0x0016, 0x027f, + 0x0287, 0x0004, 0x02c3, 0x02bd, 0x02ba, 0x02c0, 0x0001, 0x0016, + 0x028a, 0x0001, 0x0014, 0x0792, 0x0001, 0x0016, 0x029f, 0x0001, + 0x0002, 0x08e8, 0x0004, 0x02d4, 0x02ce, 0x02cb, 0x02d1, 0x0001, + // Entry E300 - E33F + 0x0016, 0x02a8, 0x0001, 0x0016, 0x02b6, 0x0001, 0x0016, 0x02c1, + 0x0001, 0x0016, 0x02ca, 0x0004, 0x02e5, 0x02df, 0x02dc, 0x02e2, + 0x0001, 0x0016, 0x02d0, 0x0001, 0x0016, 0x02d0, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0005, 0x02ee, 0x0000, 0x0000, + 0x0000, 0x0304, 0x0001, 0x02f0, 0x0003, 0x0000, 0x0000, 0x02f4, + 0x000e, 0x0016, 0x030d, 0x02de, 0x02e5, 0x02ed, 0x02f4, 0x02fa, + 0x0301, 0x0308, 0x0315, 0x031b, 0x0320, 0x0326, 0x032c, 0x032f, + 0x0003, 0x030d, 0x0312, 0x0308, 0x0001, 0x030a, 0x0001, 0x0000, + // Entry E340 - E37F + 0x04ef, 0x0001, 0x030f, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0314, + 0x0001, 0x0000, 0x04ef, 0x0005, 0x031d, 0x0000, 0x0000, 0x0000, + 0x0332, 0x0001, 0x031f, 0x0003, 0x0000, 0x0000, 0x0323, 0x000d, + 0x0016, 0xffff, 0x0334, 0x033c, 0x0345, 0x034e, 0x0355, 0x035d, + 0x0364, 0x036b, 0x0373, 0x037e, 0x0384, 0x038a, 0x0003, 0x033b, + 0x0340, 0x0336, 0x0001, 0x0338, 0x0001, 0x0000, 0x0601, 0x0001, + 0x033d, 0x0001, 0x0000, 0x0601, 0x0001, 0x0342, 0x0001, 0x0000, + 0x0601, 0x0005, 0x034b, 0x0000, 0x0000, 0x0000, 0x0360, 0x0001, + // Entry E380 - E3BF + 0x034d, 0x0003, 0x0000, 0x0000, 0x0351, 0x000d, 0x0016, 0xffff, + 0x0393, 0x039c, 0x03a2, 0x03ab, 0x03b5, 0x03be, 0x03c8, 0x03ce, + 0x03d7, 0x03df, 0x03e7, 0x03f6, 0x0003, 0x0369, 0x036e, 0x0364, + 0x0001, 0x0366, 0x0001, 0x0000, 0x06c8, 0x0001, 0x036b, 0x0001, + 0x0000, 0x06c8, 0x0001, 0x0370, 0x0001, 0x0000, 0x06c8, 0x0006, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x037a, 0x0004, 0x0388, + 0x0382, 0x037f, 0x0385, 0x0001, 0x0014, 0x0349, 0x0001, 0x0014, + 0x035a, 0x0001, 0x0016, 0x0098, 0x0001, 0x0002, 0x028b, 0x0005, + // Entry E3C0 - E3FF + 0x0391, 0x0000, 0x0000, 0x0000, 0x03a6, 0x0001, 0x0393, 0x0003, + 0x0000, 0x0000, 0x0397, 0x000d, 0x0014, 0xffff, 0x0916, 0x347a, + 0x3486, 0x348e, 0x3492, 0x3499, 0x094d, 0x34a3, 0x34a8, 0x34ad, + 0x0963, 0x096a, 0x0003, 0x03af, 0x03b4, 0x03aa, 0x0001, 0x03ac, + 0x0001, 0x0000, 0x1a1d, 0x0001, 0x03b1, 0x0001, 0x0000, 0x1a1d, + 0x0001, 0x03b6, 0x0001, 0x0000, 0x1a1d, 0x0005, 0x0000, 0x0000, + 0x0000, 0x0000, 0x03bf, 0x0003, 0x03c9, 0x03cf, 0x03c3, 0x0001, + 0x03c5, 0x0002, 0x0016, 0x0404, 0x0410, 0x0001, 0x03cb, 0x0002, + // Entry E400 - E43F + 0x0016, 0x0404, 0x0410, 0x0001, 0x03d1, 0x0002, 0x0016, 0x0404, + 0x0410, 0x0042, 0x0418, 0x041d, 0x0422, 0x0427, 0x043e, 0x0455, + 0x046c, 0x0483, 0x049a, 0x04b1, 0x04c8, 0x04df, 0x04f6, 0x0511, + 0x052c, 0x0547, 0x054c, 0x0551, 0x0556, 0x056f, 0x0588, 0x05a1, + 0x05a6, 0x05ab, 0x05b0, 0x05b5, 0x05ba, 0x05bf, 0x05c4, 0x05c9, + 0x05ce, 0x05e2, 0x05f6, 0x060a, 0x061e, 0x0632, 0x0646, 0x065a, + 0x066e, 0x0682, 0x0696, 0x06aa, 0x06be, 0x06d2, 0x06e6, 0x06fa, + 0x070e, 0x0722, 0x0736, 0x074a, 0x075e, 0x0772, 0x0777, 0x077c, + // Entry E440 - E47F + 0x0781, 0x0797, 0x07ad, 0x07c3, 0x07d9, 0x07ef, 0x0805, 0x081b, + 0x082d, 0x083f, 0x0844, 0x0849, 0x0001, 0x041a, 0x0001, 0x0016, + 0x0417, 0x0001, 0x041f, 0x0001, 0x0016, 0x0417, 0x0001, 0x0424, + 0x0001, 0x0016, 0x0417, 0x0003, 0x042b, 0x042e, 0x0433, 0x0001, + 0x0016, 0x041c, 0x0003, 0x0016, 0x0420, 0x042b, 0x0431, 0x0002, + 0x0436, 0x043a, 0x0002, 0x0016, 0x043c, 0x043c, 0x0002, 0x0016, + 0x0447, 0x0447, 0x0003, 0x0442, 0x0445, 0x044a, 0x0001, 0x0016, + 0x041c, 0x0003, 0x0016, 0x0420, 0x042b, 0x0431, 0x0002, 0x044d, + // Entry E480 - E4BF + 0x0451, 0x0002, 0x0016, 0x043c, 0x043c, 0x0002, 0x0016, 0x0447, + 0x0447, 0x0003, 0x0459, 0x045c, 0x0461, 0x0001, 0x0016, 0x041c, + 0x0003, 0x0016, 0x0420, 0x042b, 0x0431, 0x0002, 0x0464, 0x0468, + 0x0002, 0x0016, 0x043c, 0x043c, 0x0002, 0x0016, 0x0447, 0x0447, + 0x0003, 0x0470, 0x0473, 0x0478, 0x0001, 0x000d, 0x03c6, 0x0003, + 0x0016, 0x0459, 0x0468, 0x0476, 0x0002, 0x047b, 0x047f, 0x0002, + 0x0016, 0x0494, 0x0485, 0x0002, 0x0016, 0x04bb, 0x04a5, 0x0003, + 0x0487, 0x048a, 0x048f, 0x0001, 0x0016, 0x04d3, 0x0003, 0x0016, + // Entry E4C0 - E4FF + 0x04d8, 0x04e4, 0x04ef, 0x0002, 0x0492, 0x0496, 0x0002, 0x0016, + 0x04fb, 0x04fb, 0x0002, 0x0016, 0x0507, 0x0507, 0x0003, 0x049e, + 0x04a1, 0x04a6, 0x0001, 0x0016, 0x04d3, 0x0003, 0x0016, 0x04d8, + 0x04e4, 0x04ef, 0x0002, 0x04a9, 0x04ad, 0x0002, 0x0016, 0x04fb, + 0x04fb, 0x0002, 0x0016, 0x0507, 0x0507, 0x0003, 0x04b5, 0x04b8, + 0x04bd, 0x0001, 0x0016, 0x051a, 0x0003, 0x0016, 0x0521, 0x052f, + 0x053c, 0x0002, 0x04c0, 0x04c4, 0x0002, 0x0016, 0x0558, 0x054a, + 0x0002, 0x0016, 0x057d, 0x0568, 0x0003, 0x04cc, 0x04cf, 0x04d4, + // Entry E500 - E53F + 0x0001, 0x0001, 0x017d, 0x0003, 0x0016, 0x0594, 0x059f, 0x05a9, + 0x0002, 0x04d7, 0x04db, 0x0002, 0x0016, 0x05bf, 0x05b4, 0x0002, + 0x0016, 0x05dd, 0x05cb, 0x0003, 0x04e3, 0x04e6, 0x04eb, 0x0001, + 0x0001, 0x017d, 0x0003, 0x0016, 0x0594, 0x059f, 0x05a9, 0x0002, + 0x04ee, 0x04f2, 0x0002, 0x0016, 0x05bf, 0x05b4, 0x0002, 0x0016, + 0x05dd, 0x05cb, 0x0004, 0x04fb, 0x04fe, 0x0503, 0x050e, 0x0001, + 0x0016, 0x05f0, 0x0003, 0x0016, 0x05f4, 0x05ff, 0x0609, 0x0002, + 0x0506, 0x050a, 0x0002, 0x0016, 0x061f, 0x0614, 0x0002, 0x0016, + // Entry E540 - E57F + 0x063d, 0x062b, 0x0001, 0x0016, 0x0650, 0x0004, 0x0516, 0x0519, + 0x051e, 0x0529, 0x0001, 0x0016, 0x05f0, 0x0003, 0x0016, 0x05f4, + 0x05ff, 0x0609, 0x0002, 0x0521, 0x0525, 0x0002, 0x0016, 0x061f, + 0x0614, 0x0002, 0x0016, 0x063d, 0x062b, 0x0001, 0x0016, 0x0650, + 0x0004, 0x0531, 0x0534, 0x0539, 0x0544, 0x0001, 0x0016, 0x05f0, + 0x0003, 0x0016, 0x05f4, 0x05ff, 0x0609, 0x0002, 0x053c, 0x0540, + 0x0002, 0x0016, 0x061f, 0x0614, 0x0002, 0x0016, 0x063d, 0x062b, + 0x0001, 0x0016, 0x0650, 0x0001, 0x0549, 0x0001, 0x0016, 0x065f, + // Entry E580 - E5BF + 0x0001, 0x054e, 0x0001, 0x0016, 0x066e, 0x0001, 0x0553, 0x0001, + 0x0016, 0x066e, 0x0003, 0x055a, 0x055d, 0x0564, 0x0001, 0x0001, + 0x024a, 0x0005, 0x0016, 0x0683, 0x068a, 0x0690, 0x0678, 0x0699, + 0x0002, 0x0567, 0x056b, 0x0002, 0x0016, 0x06b1, 0x06a6, 0x0002, + 0x0016, 0x06cf, 0x06bd, 0x0003, 0x0573, 0x0576, 0x057d, 0x0001, + 0x0001, 0x024a, 0x0005, 0x0016, 0x0683, 0x068a, 0x0690, 0x0678, + 0x0699, 0x0002, 0x0580, 0x0584, 0x0002, 0x0016, 0x06b1, 0x06a6, + 0x0002, 0x0016, 0x06cf, 0x06bd, 0x0003, 0x058c, 0x058f, 0x0596, + // Entry E5C0 - E5FF + 0x0001, 0x0001, 0x024a, 0x0005, 0x0016, 0x0683, 0x068a, 0x0690, + 0x0678, 0x0699, 0x0002, 0x0599, 0x059d, 0x0002, 0x0016, 0x06b1, + 0x06a6, 0x0002, 0x0016, 0x06cf, 0x06bd, 0x0001, 0x05a3, 0x0001, + 0x0016, 0x06e2, 0x0001, 0x05a8, 0x0001, 0x0016, 0x06e2, 0x0001, + 0x05ad, 0x0001, 0x0016, 0x06e2, 0x0001, 0x05b2, 0x0001, 0x0016, + 0x06ee, 0x0001, 0x05b7, 0x0001, 0x0016, 0x06ee, 0x0001, 0x05bc, + 0x0001, 0x0016, 0x06ee, 0x0001, 0x05c1, 0x0001, 0x0016, 0x06f5, + 0x0001, 0x05c6, 0x0001, 0x0016, 0x0707, 0x0001, 0x05cb, 0x0001, + // Entry E600 - E63F + 0x0016, 0x0707, 0x0003, 0x0000, 0x05d2, 0x05d7, 0x0003, 0x0016, + 0x0714, 0x0723, 0x072f, 0x0002, 0x05da, 0x05de, 0x0002, 0x0016, + 0x074d, 0x073e, 0x0002, 0x0016, 0x0773, 0x075d, 0x0003, 0x0000, + 0x05e6, 0x05eb, 0x0003, 0x0016, 0x078a, 0x0797, 0x07a1, 0x0002, + 0x05ee, 0x05f2, 0x0002, 0x0016, 0x074d, 0x073e, 0x0002, 0x0016, + 0x0773, 0x075d, 0x0003, 0x0000, 0x05fa, 0x05ff, 0x0003, 0x0016, + 0x07ae, 0x07ba, 0x07c3, 0x0002, 0x0602, 0x0606, 0x0002, 0x0016, + 0x074d, 0x073e, 0x0002, 0x0016, 0x0773, 0x075d, 0x0003, 0x0000, + // Entry E640 - E67F + 0x060e, 0x0613, 0x0003, 0x0016, 0x07cf, 0x07dd, 0x07e8, 0x0002, + 0x0616, 0x061a, 0x0002, 0x0016, 0x0804, 0x07f6, 0x0002, 0x0016, + 0x0828, 0x0813, 0x0003, 0x0000, 0x0622, 0x0627, 0x0003, 0x0016, + 0x083e, 0x084a, 0x0853, 0x0002, 0x062a, 0x062e, 0x0002, 0x0016, + 0x0804, 0x07f6, 0x0002, 0x0016, 0x0828, 0x0813, 0x0003, 0x0000, + 0x0636, 0x063b, 0x0003, 0x0016, 0x085f, 0x086a, 0x0872, 0x0002, + 0x063e, 0x0642, 0x0002, 0x0016, 0x0804, 0x07f6, 0x0002, 0x0016, + 0x0828, 0x0813, 0x0003, 0x0000, 0x064a, 0x064f, 0x0003, 0x0016, + // Entry E680 - E6BF + 0x087d, 0x088c, 0x0898, 0x0002, 0x0652, 0x0656, 0x0002, 0x0016, + 0x08b6, 0x08a7, 0x0002, 0x0016, 0x08dc, 0x08c6, 0x0003, 0x0000, + 0x065e, 0x0663, 0x0003, 0x0016, 0x08f3, 0x08ff, 0x0908, 0x0002, + 0x0666, 0x066a, 0x0002, 0x0016, 0x08b6, 0x08a7, 0x0002, 0x0016, + 0x08dc, 0x08c6, 0x0003, 0x0000, 0x0672, 0x0677, 0x0003, 0x0016, + 0x0914, 0x091f, 0x0927, 0x0002, 0x067a, 0x067e, 0x0002, 0x0016, + 0x08b6, 0x08a7, 0x0002, 0x0016, 0x08dc, 0x08c6, 0x0003, 0x0000, + 0x0686, 0x068b, 0x0003, 0x0016, 0x0932, 0x0940, 0x094b, 0x0002, + // Entry E6C0 - E6FF + 0x068e, 0x0692, 0x0002, 0x0016, 0x0967, 0x0959, 0x0002, 0x0016, + 0x098b, 0x0976, 0x0003, 0x0000, 0x069a, 0x069f, 0x0003, 0x0016, + 0x09a1, 0x09ad, 0x09b6, 0x0002, 0x06a2, 0x06a6, 0x0002, 0x0016, + 0x0967, 0x0959, 0x0002, 0x0016, 0x098b, 0x0976, 0x0003, 0x0000, + 0x06ae, 0x06b3, 0x0003, 0x0016, 0x09c2, 0x09cd, 0x09d5, 0x0002, + 0x06b6, 0x06ba, 0x0002, 0x0016, 0x0967, 0x0959, 0x0002, 0x0016, + 0x098b, 0x0976, 0x0003, 0x0000, 0x06c2, 0x06c7, 0x0003, 0x0016, + 0x09e0, 0x09ef, 0x09fb, 0x0002, 0x06ca, 0x06ce, 0x0002, 0x0016, + // Entry E700 - E73F + 0x0a19, 0x0a0a, 0x0002, 0x0016, 0x0a3f, 0x0a29, 0x0003, 0x0000, + 0x06d6, 0x06db, 0x0003, 0x0016, 0x0a56, 0x0a62, 0x0a6b, 0x0002, + 0x06de, 0x06e2, 0x0002, 0x0016, 0x0a19, 0x0a0a, 0x0002, 0x0016, + 0x0a3f, 0x0a29, 0x0003, 0x0000, 0x06ea, 0x06ef, 0x0003, 0x0016, + 0x0a77, 0x0a82, 0x0a8a, 0x0002, 0x06f2, 0x06f6, 0x0002, 0x0016, + 0x0a19, 0x0a0a, 0x0002, 0x0016, 0x0a3f, 0x0a29, 0x0003, 0x0000, + 0x06fe, 0x0703, 0x0003, 0x0016, 0x0a95, 0x0aa3, 0x0aae, 0x0002, + 0x0706, 0x070a, 0x0002, 0x0016, 0x0aca, 0x0abc, 0x0002, 0x0016, + // Entry E740 - E77F + 0x0aee, 0x0ad9, 0x0003, 0x0000, 0x0712, 0x0717, 0x0003, 0x0016, + 0x0b04, 0x0b10, 0x0b19, 0x0002, 0x071a, 0x071e, 0x0002, 0x0016, + 0x0aca, 0x0abc, 0x0002, 0x0016, 0x0aee, 0x0ad9, 0x0003, 0x0000, + 0x0726, 0x072b, 0x0003, 0x0016, 0x0b25, 0x0b30, 0x0b38, 0x0002, + 0x072e, 0x0732, 0x0002, 0x0016, 0x0aca, 0x0abc, 0x0002, 0x0016, + 0x0aee, 0x0ad9, 0x0003, 0x0000, 0x073a, 0x073f, 0x0003, 0x0016, + 0x0b43, 0x0b52, 0x0b5e, 0x0002, 0x0742, 0x0746, 0x0002, 0x0016, + 0x0b7c, 0x0b6d, 0x0002, 0x0016, 0x0ba2, 0x0b8c, 0x0003, 0x0000, + // Entry E780 - E7BF + 0x074e, 0x0753, 0x0003, 0x0016, 0x0bb9, 0x0bc6, 0x0bd0, 0x0002, + 0x0756, 0x075a, 0x0002, 0x0016, 0x0b7c, 0x0b6d, 0x0002, 0x0016, + 0x0ba2, 0x0b8c, 0x0003, 0x0000, 0x0762, 0x0767, 0x0003, 0x0016, + 0x0bdd, 0x0be9, 0x0bf2, 0x0002, 0x076a, 0x076e, 0x0002, 0x0016, + 0x0b7c, 0x0b6d, 0x0002, 0x0016, 0x0ba2, 0x0b8c, 0x0001, 0x0774, + 0x0001, 0x0007, 0x0892, 0x0001, 0x0779, 0x0001, 0x0007, 0x0892, + 0x0001, 0x077e, 0x0001, 0x0007, 0x0892, 0x0003, 0x0785, 0x0788, + 0x078c, 0x0001, 0x0016, 0x0bfe, 0x0002, 0x0016, 0xffff, 0x0c03, + // Entry E7C0 - E7FF + 0x0002, 0x078f, 0x0793, 0x0002, 0x0016, 0x0c23, 0x0c17, 0x0002, + 0x0016, 0x0c43, 0x0c30, 0x0003, 0x079b, 0x079e, 0x07a2, 0x0001, + 0x0016, 0x0c57, 0x0002, 0x0016, 0xffff, 0x0c5a, 0x0002, 0x07a5, + 0x07a9, 0x0002, 0x0016, 0x0c23, 0x0c17, 0x0002, 0x0016, 0x0c43, + 0x0c30, 0x0003, 0x07b1, 0x07b4, 0x07b8, 0x0001, 0x0016, 0x0c57, + 0x0002, 0x0016, 0xffff, 0x0c5a, 0x0002, 0x07bb, 0x07bf, 0x0002, + 0x0016, 0x0c23, 0x0c17, 0x0002, 0x0016, 0x0c43, 0x0c30, 0x0003, + 0x07c7, 0x07ca, 0x07ce, 0x0001, 0x0010, 0x0bf7, 0x0002, 0x0016, + // Entry E800 - E83F + 0xffff, 0x0c65, 0x0002, 0x07d1, 0x07d5, 0x0002, 0x0016, 0x0c87, + 0x0c7a, 0x0002, 0x0016, 0x0cab, 0x0c97, 0x0003, 0x07dd, 0x07e0, + 0x07e4, 0x0001, 0x0001, 0x07c5, 0x0002, 0x0016, 0xffff, 0x0cc2, + 0x0002, 0x07e7, 0x07eb, 0x0002, 0x0016, 0x0ccd, 0x0ccd, 0x0002, + 0x0016, 0x0cd9, 0x0cd9, 0x0003, 0x07f3, 0x07f6, 0x07fa, 0x0001, + 0x0001, 0x07c5, 0x0002, 0x0016, 0xffff, 0x0cc2, 0x0002, 0x07fd, + 0x0801, 0x0002, 0x0016, 0x0ccd, 0x0ccd, 0x0002, 0x0016, 0x0cd9, + 0x0cd9, 0x0003, 0x0809, 0x080c, 0x0810, 0x0001, 0x0016, 0x0cec, + // Entry E840 - E87F + 0x0002, 0x0016, 0xffff, 0x0cf3, 0x0002, 0x0813, 0x0817, 0x0002, + 0x0016, 0x0d04, 0x0cf6, 0x0002, 0x0016, 0x0d29, 0x0d14, 0x0003, + 0x081f, 0x0000, 0x0822, 0x0001, 0x0001, 0x083e, 0x0002, 0x0825, + 0x0829, 0x0002, 0x0016, 0x0d40, 0x0d40, 0x0002, 0x0016, 0x0d4c, + 0x0d4c, 0x0003, 0x0831, 0x0000, 0x0834, 0x0001, 0x0000, 0x2002, + 0x0002, 0x0837, 0x083b, 0x0002, 0x0016, 0x0d40, 0x0d40, 0x0002, + 0x0016, 0x0d4c, 0x0d4c, 0x0001, 0x0841, 0x0001, 0x0016, 0x0d5f, + 0x0001, 0x0846, 0x0001, 0x0016, 0x0d68, 0x0001, 0x084b, 0x0001, + // Entry E880 - E8BF + 0x0016, 0x0d68, 0x0004, 0x0853, 0x0858, 0x085d, 0x086c, 0x0003, + 0x0008, 0x1dbe, 0x4f73, 0x4f7a, 0x0003, 0x0000, 0x1de0, 0x2298, + 0x22a1, 0x0002, 0x0000, 0x0860, 0x0003, 0x0000, 0x0867, 0x0864, + 0x0001, 0x0016, 0x0d6d, 0x0003, 0x0016, 0xffff, 0x0d86, 0x0d98, + 0x0002, 0x0a53, 0x086f, 0x0003, 0x0873, 0x09b3, 0x0913, 0x009e, + 0x0016, 0xffff, 0xffff, 0xffff, 0xffff, 0x0e13, 0x0e55, 0x0eaf, + 0x0ee2, 0x0f12, 0x0f42, 0x0f75, 0x0fa5, 0x0fd2, 0x1050, 0x1080, + 0x10b8, 0x10fd, 0x1130, 0x1163, 0x11ae, 0x1211, 0x1253, 0x1295, + // Entry E8C0 - E8FF + 0x12d4, 0x1307, 0xffff, 0xffff, 0x135a, 0xffff, 0x13ac, 0xffff, + 0x13f2, 0x1422, 0x1455, 0x1488, 0xffff, 0xffff, 0x14ed, 0x1529, + 0x1562, 0xffff, 0xffff, 0xffff, 0x15c1, 0xffff, 0x160b, 0x1659, + 0xffff, 0x16b6, 0x16fb, 0x1743, 0xffff, 0xffff, 0xffff, 0xffff, + 0x17c5, 0xffff, 0xffff, 0x180e, 0x1856, 0xffff, 0xffff, 0x18ce, + 0x1916, 0x1949, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x19e2, 0x1a09, 0x1a39, 0x1a6c, 0x1a9c, 0xffff, 0xffff, 0x1b29, + 0xffff, 0x1b67, 0xffff, 0xffff, 0x1bcb, 0xffff, 0x1c39, 0xffff, + // Entry E900 - E93F + 0xffff, 0xffff, 0xffff, 0x1ca6, 0xffff, 0x1ce7, 0x1d35, 0x1d83, + 0x1dbc, 0xffff, 0xffff, 0xffff, 0x1e09, 0x1e4b, 0x1e87, 0xffff, + 0xffff, 0x1ee8, 0x1f4f, 0x1f8b, 0x1fb2, 0xffff, 0xffff, 0x2009, + 0x2048, 0x2081, 0xffff, 0x20ce, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x21a8, 0x21db, 0x2208, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2295, 0xffff, 0xffff, 0x22dd, 0xffff, + 0x2311, 0xffff, 0x2352, 0x238e, 0x23c1, 0xffff, 0x2402, 0x243e, + 0xffff, 0xffff, 0xffff, 0x24a4, 0x24d4, 0xffff, 0xffff, 0x0da7, + // Entry E940 - E97F + 0x0e82, 0x0ff9, 0x1023, 0xffff, 0xffff, 0x1c01, 0x215a, 0x009e, + 0x0016, 0x0dce, 0x0ddb, 0x0df0, 0x0e02, 0x0e25, 0x0e60, 0x0ebc, + 0x0eee, 0x0f1e, 0x0f4f, 0x0f81, 0x0fb0, 0x0fdb, 0x105c, 0x108e, + 0x10cb, 0x110a, 0x113d, 0x1178, 0x11cb, 0x1223, 0x1265, 0x12a6, + 0x12e1, 0x1316, 0x1340, 0x134b, 0x136a, 0x1396, 0x13bb, 0x13e5, + 0x13fe, 0x142f, 0x1462, 0x1498, 0x14c4, 0x14d7, 0x14fd, 0x1538, + 0x156e, 0x1592, 0x159c, 0x15b3, 0x15d0, 0x15fa, 0x1621, 0x166c, + 0x169e, 0x16c9, 0x170f, 0x174c, 0x176a, 0x177c, 0x17ab, 0x17b9, + // Entry E980 - E9BF + 0x17d2, 0x17f8, 0x180a, 0x1822, 0x186a, 0x18ad, 0x18c3, 0x18e2, + 0x1923, 0x1952, 0x1970, 0x1981, 0x1999, 0x19a6, 0x19bc, 0x19cf, + 0x19eb, 0x1a15, 0x1a46, 0x1a78, 0x1ab9, 0x1aff, 0x1b14, 0x1b36, + 0x1b5c, 0x1b77, 0x1ba3, 0x1bbb, 0x1bd9, 0x1c2b, 0x1c45, 0x1c69, + 0x1c76, 0x1c85, 0x1c93, 0x1cb4, 0x1cdc, 0x1cfd, 0x1d4b, 0x1d92, + 0x1dc7, 0x1de9, 0x1df5, 0x1dff, 0x1e1b, 0x1e5b, 0x1e9a, 0x1ecc, + 0x1ed5, 0x1f00, 0x1f5f, 0x1f94, 0x1fbf, 0x1fe5, 0x1ff5, 0x201a, + 0x2057, 0x2090, 0x20be, 0x20ec, 0x2134, 0x2141, 0x214c, 0x2190, + // Entry E9C0 - E9FF + 0x219c, 0x21b5, 0x21e6, 0x2212, 0x2232, 0x2242, 0x2250, 0x2262, + 0x2274, 0x2280, 0x228a, 0x22a0, 0x22c2, 0x22d1, 0x22e7, 0x2307, + 0x231f, 0x2347, 0x2362, 0x239b, 0x23cd, 0x23f1, 0x2412, 0x244c, + 0x2474, 0x247f, 0x248f, 0x24b0, 0x24e6, 0x189e, 0x1f3c, 0x0db0, + 0x0e8d, 0x1003, 0x102e, 0xffff, 0x1bb1, 0x1c0b, 0x2168, 0x009e, + 0x0016, 0xffff, 0xffff, 0xffff, 0xffff, 0x0e3d, 0x0e71, 0x0ecf, + 0x0f00, 0x0f30, 0x0f62, 0x0f93, 0x0fc1, 0x0fea, 0x106e, 0x10a3, + 0x10e4, 0x111d, 0x1150, 0x1193, 0x11ee, 0x123b, 0x127d, 0x12bd, + // Entry EA00 - EA3F + 0x12f4, 0x132b, 0xffff, 0xffff, 0x1380, 0xffff, 0x13d0, 0xffff, + 0x1410, 0x1442, 0x1475, 0x14ae, 0xffff, 0xffff, 0x1513, 0x154d, + 0x1580, 0xffff, 0xffff, 0xffff, 0x15e5, 0xffff, 0x163d, 0x1685, + 0xffff, 0x16e2, 0x1729, 0x175b, 0xffff, 0xffff, 0xffff, 0xffff, + 0x17e5, 0xffff, 0xffff, 0x183c, 0x1884, 0xffff, 0xffff, 0x18fc, + 0x1936, 0x1961, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x19fa, 0x1a27, 0x1a59, 0x1a8a, 0x1adc, 0xffff, 0xffff, 0x1b49, + 0xffff, 0x1b8d, 0xffff, 0xffff, 0x1bed, 0xffff, 0x1c57, 0xffff, + // Entry EA40 - EA7F + 0xffff, 0xffff, 0xffff, 0x1cc8, 0xffff, 0x1d19, 0x1d67, 0x1da7, + 0x1dd8, 0xffff, 0xffff, 0xffff, 0x1e33, 0x1e71, 0x1eb3, 0xffff, + 0xffff, 0x1f1e, 0x1f75, 0x1fa3, 0x1fd2, 0xffff, 0xffff, 0x2031, + 0x206c, 0x20a7, 0xffff, 0x2110, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x21c8, 0x21f7, 0x2222, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x22b1, 0xffff, 0xffff, 0x22f7, 0xffff, + 0x2333, 0xffff, 0x2378, 0x23ae, 0x23df, 0xffff, 0x2428, 0x2460, + 0xffff, 0xffff, 0xffff, 0x24c2, 0x24fe, 0xffff, 0xffff, 0x0dbf, + // Entry EA80 - EABF + 0x0e9e, 0x1013, 0x103f, 0xffff, 0xffff, 0x1c1b, 0x217c, 0x0003, + 0x0a57, 0x0abd, 0x0a8a, 0x0031, 0x0007, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0045, 0x004e, 0xffff, 0x0057, 0x0031, 0x0007, + // Entry EAC0 - EAFF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0045, 0x004e, 0xffff, + 0x0057, 0x0031, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry EB00 - EB3F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0049, 0x0052, 0xffff, 0x005b, 0x0002, 0x0003, 0x00e9, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, + 0x0000, 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, 0x0006, + // Entry EB40 - EB7F + 0x000d, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, + 0x0002, 0x0587, 0x0008, 0x002f, 0x0066, 0x008b, 0x009f, 0x00b7, + 0x00c7, 0x00d8, 0x0000, 0x0002, 0x0032, 0x0054, 0x0003, 0x0036, + 0x0000, 0x0045, 0x000d, 0x0017, 0xffff, 0x0000, 0x0004, 0x0008, + 0x000c, 0x0010, 0x0014, 0x0018, 0x001c, 0x0020, 0x0024, 0x0028, + 0x002c, 0x000d, 0x0017, 0xffff, 0x0030, 0x0041, 0x0050, 0x0061, + 0x0070, 0x0081, 0x0095, 0x00a8, 0x00bb, 0x00cc, 0x00dc, 0x00f6, + 0x0002, 0x0000, 0x0057, 0x000d, 0x0000, 0xffff, 0x204d, 0x214f, + // Entry EB80 - EBBF + 0x214f, 0x214f, 0x214f, 0x214f, 0x2242, 0x2151, 0x204d, 0x204d, + 0x204d, 0x204d, 0x0002, 0x0069, 0x007f, 0x0003, 0x006d, 0x0000, + 0x0076, 0x0007, 0x0017, 0x010d, 0x0111, 0x0004, 0x0008, 0x000c, + 0x0010, 0x0115, 0x0007, 0x0017, 0x0119, 0x0128, 0x0139, 0x0147, + 0x0157, 0x0165, 0x0175, 0x0002, 0x0000, 0x0082, 0x0007, 0x0000, + 0x1e5d, 0x1e5d, 0x214f, 0x214f, 0x214f, 0x214f, 0x21c4, 0x0001, + 0x008d, 0x0003, 0x0091, 0x0000, 0x0098, 0x0005, 0x0000, 0xffff, + 0x1f17, 0x1f1a, 0x1f1d, 0x1f20, 0x0005, 0x0017, 0xffff, 0x0182, + // Entry EBC0 - EBFF + 0x0192, 0x01a0, 0x01b0, 0x0001, 0x00a1, 0x0003, 0x00a5, 0x0000, + 0x00ae, 0x0002, 0x00a8, 0x00ab, 0x0001, 0x0017, 0x01be, 0x0001, + 0x0017, 0x01c9, 0x0002, 0x00b1, 0x00b4, 0x0001, 0x0017, 0x01be, + 0x0001, 0x0017, 0x01c9, 0x0003, 0x00c1, 0x0000, 0x00bb, 0x0001, + 0x00bd, 0x0002, 0x0017, 0x01d4, 0x01e4, 0x0001, 0x00c3, 0x0002, + 0x0017, 0x01f4, 0x01f7, 0x0004, 0x00d5, 0x00cf, 0x00cc, 0x00d2, + 0x0001, 0x0006, 0x015b, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, + 0x003c, 0x0001, 0x0002, 0x08e8, 0x0004, 0x00e6, 0x00e0, 0x00dd, + // Entry EC00 - EC3F + 0x00e3, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, + 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0040, 0x012a, 0x0000, + 0x0000, 0x012f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0134, + 0x0000, 0x0000, 0x0139, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x013e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry EC40 - EC7F + 0x0000, 0x0000, 0x0149, 0x0000, 0x014e, 0x0000, 0x0000, 0x0153, + 0x0000, 0x0000, 0x0158, 0x0000, 0x0000, 0x015d, 0x0001, 0x012c, + 0x0001, 0x0017, 0x01fa, 0x0001, 0x0131, 0x0001, 0x0006, 0x016f, + 0x0001, 0x0136, 0x0001, 0x0017, 0x0200, 0x0001, 0x013b, 0x0001, + 0x0017, 0x0205, 0x0002, 0x0141, 0x0144, 0x0001, 0x0017, 0x020a, + 0x0003, 0x0017, 0x0210, 0x0215, 0x021b, 0x0001, 0x014b, 0x0001, + 0x0017, 0x0221, 0x0001, 0x0150, 0x0001, 0x0009, 0x0308, 0x0001, + 0x0155, 0x0001, 0x0006, 0x01bc, 0x0001, 0x015a, 0x0001, 0x0009, + // Entry EC80 - ECBF + 0x030c, 0x0001, 0x015f, 0x0001, 0x0017, 0x0227, 0x0003, 0x0004, + 0x055f, 0x09d3, 0x0012, 0x0017, 0x0030, 0x0066, 0x0000, 0x00cd, + 0x0000, 0x0134, 0x015f, 0x03a0, 0x0404, 0x0464, 0x0000, 0x0000, + 0x0000, 0x0000, 0x04c4, 0x04e3, 0x0543, 0x0005, 0x0000, 0x0000, + 0x0000, 0x0000, 0x001d, 0x0003, 0x0026, 0x002b, 0x0021, 0x0001, + 0x0023, 0x0001, 0x0007, 0x0172, 0x0001, 0x0028, 0x0001, 0x0000, + 0x0000, 0x0001, 0x002d, 0x0001, 0x0000, 0x0000, 0x000a, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0055, 0x0000, 0x0000, 0x0000, + // Entry ECC0 - ECFF + 0x003b, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0042, + 0x0001, 0x0044, 0x0001, 0x0046, 0x000d, 0x0017, 0xffff, 0x0235, + 0x023b, 0x0243, 0x0249, 0x024e, 0x0255, 0x025e, 0x0264, 0x026a, + 0x026f, 0x0274, 0x0279, 0x0004, 0x0063, 0x005d, 0x005a, 0x0060, + 0x0001, 0x0017, 0x0281, 0x0001, 0x0017, 0x0291, 0x0001, 0x0017, + 0x029b, 0x0001, 0x0007, 0x02e9, 0x0005, 0x006c, 0x0000, 0x0000, + 0x0000, 0x00b7, 0x0002, 0x006f, 0x0093, 0x0003, 0x0073, 0x0000, + 0x0083, 0x000e, 0x0017, 0xffff, 0x02a3, 0x02a9, 0x02af, 0x02b6, + // Entry ED00 - ED3F + 0x02bc, 0x02c1, 0x02c9, 0x02d2, 0x02dc, 0x02e5, 0x02eb, 0x02f0, + 0x02f7, 0x000e, 0x0017, 0xffff, 0x02a3, 0x02a9, 0x02af, 0x02b6, + 0x02bc, 0x02c1, 0x02c9, 0x02d2, 0x02dc, 0x02e5, 0x02eb, 0x02f0, + 0x02f7, 0x0003, 0x0097, 0x0000, 0x00a7, 0x000e, 0x0017, 0xffff, + 0x02a3, 0x02a9, 0x02af, 0x02b6, 0x02bc, 0x02c1, 0x02c9, 0x02d2, + 0x02dc, 0x02e5, 0x02eb, 0x02f0, 0x02f7, 0x000e, 0x0017, 0xffff, + 0x02a3, 0x02a9, 0x02af, 0x02b6, 0x02bc, 0x02c1, 0x02c9, 0x02d2, + 0x02dc, 0x02e5, 0x02eb, 0x02f0, 0x02f7, 0x0003, 0x00c1, 0x00c7, + // Entry ED40 - ED7F + 0x00bb, 0x0001, 0x00bd, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, + 0x00c3, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x00c9, 0x0002, + 0x0000, 0x0425, 0x042a, 0x0005, 0x00d3, 0x0000, 0x0000, 0x0000, + 0x011e, 0x0002, 0x00d6, 0x00fa, 0x0003, 0x00da, 0x0000, 0x00ea, + 0x000e, 0x0017, 0xffff, 0x02fd, 0x0309, 0x0314, 0x031d, 0x0328, + 0x0330, 0x0339, 0x0342, 0x034a, 0x0352, 0x0358, 0x0360, 0x0368, + 0x000e, 0x0017, 0xffff, 0x02fd, 0x0309, 0x0314, 0x031d, 0x0328, + 0x0330, 0x0339, 0x0342, 0x034a, 0x0352, 0x0358, 0x0360, 0x0368, + // Entry ED80 - EDBF + 0x0003, 0x00fe, 0x0000, 0x010e, 0x000e, 0x0017, 0xffff, 0x02fd, + 0x0309, 0x0314, 0x031d, 0x0328, 0x0330, 0x0339, 0x0342, 0x034a, + 0x0352, 0x0358, 0x0360, 0x0368, 0x000e, 0x0017, 0xffff, 0x02fd, + 0x0309, 0x0314, 0x031d, 0x0328, 0x0330, 0x0339, 0x0342, 0x034a, + 0x0352, 0x0358, 0x0360, 0x0368, 0x0003, 0x0128, 0x012e, 0x0122, + 0x0001, 0x0124, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x012a, + 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x0130, 0x0002, 0x0000, + 0x0425, 0x042a, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry EDC0 - EDFF + 0x013d, 0x0000, 0x014e, 0x0004, 0x014b, 0x0145, 0x0142, 0x0148, + 0x0001, 0x0014, 0x0904, 0x0001, 0x0014, 0x035a, 0x0001, 0x0017, + 0x0372, 0x0001, 0x0014, 0x0370, 0x0004, 0x015c, 0x0156, 0x0153, + 0x0159, 0x0001, 0x0017, 0x037c, 0x0001, 0x0017, 0x037c, 0x0001, + 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, 0x0168, 0x01cd, + 0x0224, 0x0259, 0x0348, 0x036d, 0x037e, 0x038f, 0x0002, 0x016b, + 0x019c, 0x0003, 0x016f, 0x017e, 0x018d, 0x000d, 0x0000, 0xffff, + 0x1e22, 0x1e27, 0x22aa, 0x1e31, 0x22b0, 0x22b4, 0x22b9, 0x1e44, + // Entry EE00 - EE3F + 0x1e49, 0x1e4e, 0x1e53, 0x22be, 0x000d, 0x0000, 0xffff, 0x1e5d, + 0x2240, 0x2242, 0x21c6, 0x2242, 0x1e5d, 0x1e5d, 0x21c6, 0x21c8, + 0x2294, 0x21c4, 0x2244, 0x000d, 0x0017, 0xffff, 0x0389, 0x0390, + 0x0398, 0x039e, 0x03a4, 0x03a8, 0x03ad, 0x03b2, 0x03b9, 0x03c3, + 0x03cb, 0x03d4, 0x0003, 0x01a0, 0x01af, 0x01be, 0x000d, 0x0006, + 0xffff, 0x001e, 0x0022, 0x411b, 0x002a, 0x4120, 0x0032, 0x0036, + 0x4124, 0x003e, 0x0042, 0x0046, 0x4128, 0x000d, 0x0000, 0xffff, + 0x1e5d, 0x2240, 0x2242, 0x21c6, 0x2242, 0x1e5d, 0x1e5d, 0x21c6, + // Entry EE40 - EE7F + 0x21c8, 0x2294, 0x21c4, 0x2244, 0x000d, 0x0017, 0xffff, 0x0389, + 0x0390, 0x0398, 0x039e, 0x03dd, 0x03a8, 0x03ad, 0x03b2, 0x03b9, + 0x03c3, 0x03cb, 0x03d4, 0x0002, 0x01d0, 0x01fa, 0x0005, 0x01d6, + 0x01df, 0x01f1, 0x0000, 0x01e8, 0x0007, 0x0000, 0x1ebf, 0x22c3, + 0x1ec7, 0x22c7, 0x1ecf, 0x22cb, 0x1ed7, 0x0007, 0x0000, 0x21c8, + 0x2242, 0x2244, 0x2242, 0x2244, 0x2240, 0x21c8, 0x0007, 0x0000, + 0x1ebf, 0x22c3, 0x1ec7, 0x22c7, 0x1ecf, 0x22cb, 0x1ed7, 0x0007, + 0x0017, 0x03e1, 0x03e9, 0x03f0, 0x03f9, 0x0402, 0x040d, 0x0415, + // Entry EE80 - EEBF + 0x0005, 0x0200, 0x0209, 0x021b, 0x0000, 0x0212, 0x0007, 0x0017, + 0x041d, 0x0420, 0x0423, 0x0426, 0x0429, 0x042c, 0x042f, 0x0007, + 0x0000, 0x21c8, 0x2242, 0x2244, 0x2242, 0x2244, 0x2240, 0x21c8, + 0x0007, 0x0000, 0x1ebf, 0x22c3, 0x1ec7, 0x22c7, 0x1ecf, 0x22cb, + 0x1ed7, 0x0007, 0x0017, 0x03e1, 0x03e9, 0x03f0, 0x03f9, 0x0402, + 0x040d, 0x0415, 0x0002, 0x0227, 0x0240, 0x0003, 0x022b, 0x0232, + 0x0239, 0x0005, 0x0000, 0xffff, 0x04e3, 0x04e6, 0x04e9, 0x04ec, + 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, 0x0005, + // Entry EEC0 - EEFF + 0x0017, 0xffff, 0x0432, 0x043d, 0x0448, 0x0453, 0x0003, 0x0244, + 0x024b, 0x0252, 0x0005, 0x0000, 0xffff, 0x04e3, 0x04e6, 0x04e9, + 0x04ec, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x0039, + 0x0005, 0x0017, 0xffff, 0x0432, 0x043d, 0x0448, 0x0453, 0x0002, + 0x025c, 0x02d2, 0x0003, 0x0260, 0x0286, 0x02ac, 0x000a, 0x026e, + 0x0271, 0x026b, 0x0274, 0x027a, 0x0280, 0x0283, 0x0000, 0x0277, + 0x027d, 0x0001, 0x0017, 0x045e, 0x0001, 0x0000, 0x04ef, 0x0001, + 0x0000, 0x04f2, 0x0001, 0x0017, 0x046a, 0x0001, 0x0017, 0x0472, + // Entry EF00 - EF3F + 0x0001, 0x0017, 0x047d, 0x0001, 0x0017, 0x0485, 0x0001, 0x0017, + 0x0491, 0x0001, 0x0017, 0x0498, 0x000a, 0x0294, 0x0297, 0x0291, + 0x029a, 0x02a0, 0x02a6, 0x02a9, 0x0000, 0x029d, 0x02a3, 0x0001, + 0x0017, 0x045e, 0x0001, 0x0000, 0x1f62, 0x0001, 0x0000, 0x1f66, + 0x0001, 0x0017, 0x046a, 0x0001, 0x0017, 0x0472, 0x0001, 0x0017, + 0x047d, 0x0001, 0x0017, 0x0485, 0x0001, 0x0017, 0x0491, 0x0001, + 0x0017, 0x0498, 0x000a, 0x02ba, 0x02bd, 0x02b7, 0x02c0, 0x02c6, + 0x02cc, 0x02cf, 0x0000, 0x02c3, 0x02c9, 0x0001, 0x0017, 0x045e, + // Entry EF40 - EF7F + 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0001, 0x0017, + 0x046a, 0x0001, 0x0017, 0x0472, 0x0001, 0x0017, 0x047d, 0x0001, + 0x0017, 0x0485, 0x0001, 0x0017, 0x0491, 0x0001, 0x0017, 0x0498, + 0x0003, 0x02d6, 0x02fc, 0x0322, 0x000a, 0x02e4, 0x02e7, 0x02e1, + 0x02ea, 0x02f0, 0x02f6, 0x02f9, 0x0000, 0x02ed, 0x02f3, 0x0001, + 0x0017, 0x045e, 0x0001, 0x0017, 0x049f, 0x0001, 0x0017, 0x04a5, + 0x0001, 0x0017, 0x04ac, 0x0001, 0x0017, 0x04b3, 0x0001, 0x0017, + 0x04bd, 0x0001, 0x0017, 0x04c4, 0x0001, 0x0017, 0x04cf, 0x0001, + // Entry EF80 - EFBF + 0x0017, 0x04d5, 0x000a, 0x030a, 0x030d, 0x0307, 0x0310, 0x0316, + 0x031c, 0x031f, 0x0000, 0x0313, 0x0319, 0x0001, 0x0017, 0x045e, + 0x0001, 0x0017, 0x049f, 0x0001, 0x0017, 0x04a5, 0x0001, 0x0017, + 0x04ac, 0x0001, 0x0017, 0x04b3, 0x0001, 0x0017, 0x04bd, 0x0001, + 0x0017, 0x04c4, 0x0001, 0x0017, 0x04cf, 0x0001, 0x0017, 0x04d5, + 0x000a, 0x0330, 0x0333, 0x032d, 0x0336, 0x033c, 0x0342, 0x0345, + 0x0000, 0x0339, 0x033f, 0x0001, 0x0017, 0x045e, 0x0001, 0x0017, + 0x049f, 0x0001, 0x0017, 0x04a5, 0x0001, 0x0017, 0x04ac, 0x0001, + // Entry EFC0 - EFFF + 0x0017, 0x04b3, 0x0001, 0x0017, 0x04bd, 0x0001, 0x0017, 0x04c4, + 0x0001, 0x0017, 0x04cf, 0x0001, 0x0017, 0x04d5, 0x0003, 0x0357, + 0x0362, 0x034c, 0x0002, 0x034f, 0x0353, 0x0002, 0x0017, 0x04db, + 0x04fc, 0x0002, 0x0017, 0x04e3, 0x0504, 0x0002, 0x035a, 0x035e, + 0x0002, 0x0017, 0x04db, 0x04fc, 0x0002, 0x0017, 0x0519, 0x0522, + 0x0002, 0x0365, 0x0369, 0x0002, 0x0017, 0x04db, 0x04fc, 0x0002, + 0x0017, 0x0519, 0x0522, 0x0004, 0x037b, 0x0375, 0x0372, 0x0378, + 0x0001, 0x0017, 0x0528, 0x0001, 0x0014, 0x0792, 0x0001, 0x0017, + // Entry F000 - F03F + 0x0538, 0x0001, 0x0007, 0x02e9, 0x0004, 0x038c, 0x0386, 0x0383, + 0x0389, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, + 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, 0x039d, 0x0397, + 0x0394, 0x039a, 0x0001, 0x0017, 0x037c, 0x0001, 0x0017, 0x037c, + 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0005, 0x03a6, + 0x0000, 0x0000, 0x0000, 0x03f1, 0x0002, 0x03a9, 0x03cd, 0x0003, + 0x03ad, 0x0000, 0x03bd, 0x000e, 0x0017, 0x0573, 0x0540, 0x0548, + 0x0552, 0x0559, 0x055f, 0x0567, 0x056e, 0x057b, 0x0581, 0x0587, + // Entry F040 - F07F + 0x058d, 0x0594, 0x0597, 0x000e, 0x0017, 0x0573, 0x0540, 0x0548, + 0x0552, 0x0559, 0x055f, 0x0567, 0x056e, 0x057b, 0x0581, 0x0587, + 0x058d, 0x0594, 0x0597, 0x0003, 0x03d1, 0x0000, 0x03e1, 0x000e, + 0x0017, 0x0573, 0x0540, 0x0548, 0x0552, 0x0559, 0x055f, 0x0567, + 0x056e, 0x057b, 0x0581, 0x0587, 0x058d, 0x0594, 0x0597, 0x000e, + 0x0017, 0x0573, 0x0540, 0x0548, 0x0552, 0x0559, 0x055f, 0x0567, + 0x056e, 0x057b, 0x0581, 0x0587, 0x058d, 0x0594, 0x0597, 0x0003, + 0x03fa, 0x03ff, 0x03f5, 0x0001, 0x03f7, 0x0001, 0x0000, 0x04ef, + // Entry F080 - F0BF + 0x0001, 0x03fc, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0401, 0x0001, + 0x0000, 0x04ef, 0x0005, 0x040a, 0x0000, 0x0000, 0x0000, 0x0451, + 0x0002, 0x040d, 0x042f, 0x0003, 0x0411, 0x0000, 0x0420, 0x000d, + 0x0000, 0xffff, 0x05a2, 0x05aa, 0x22cf, 0x22d9, 0x05c3, 0x22e1, + 0x22ec, 0x05d9, 0x22f4, 0x2300, 0x05f2, 0x05f8, 0x000d, 0x0000, + 0xffff, 0x05a2, 0x05aa, 0x22cf, 0x22d9, 0x05c3, 0x22e1, 0x22ec, + 0x05d9, 0x22f4, 0x2300, 0x05f2, 0x05f8, 0x0003, 0x0433, 0x0000, + 0x0442, 0x000d, 0x0000, 0xffff, 0x05a2, 0x05aa, 0x22cf, 0x22d9, + // Entry F0C0 - F0FF + 0x05c3, 0x22e1, 0x22ec, 0x05d9, 0x22f4, 0x2300, 0x05f2, 0x05f8, + 0x000d, 0x0000, 0xffff, 0x05a2, 0x05aa, 0x22cf, 0x22d9, 0x05c3, + 0x22e1, 0x22ec, 0x05d9, 0x22f4, 0x2300, 0x05f2, 0x05f8, 0x0003, + 0x045a, 0x045f, 0x0455, 0x0001, 0x0457, 0x0001, 0x0000, 0x0601, + 0x0001, 0x045c, 0x0001, 0x0000, 0x0601, 0x0001, 0x0461, 0x0001, + 0x0000, 0x0601, 0x0005, 0x046a, 0x0000, 0x0000, 0x0000, 0x04b1, + 0x0002, 0x046d, 0x048f, 0x0003, 0x0471, 0x0000, 0x0480, 0x000d, + 0x0000, 0xffff, 0x0606, 0x060b, 0x0610, 0x0617, 0x061f, 0x0626, + // Entry F100 - F13F + 0x062e, 0x0633, 0x0638, 0x063d, 0x0643, 0x064d, 0x000d, 0x0000, + 0xffff, 0x0657, 0x0660, 0x0666, 0x066f, 0x2307, 0x2313, 0x2320, + 0x0692, 0x069b, 0x06a3, 0x2329, 0x2336, 0x0003, 0x0493, 0x0000, + 0x04a2, 0x000d, 0x0000, 0xffff, 0x0606, 0x060b, 0x0610, 0x0617, + 0x061f, 0x0626, 0x062e, 0x0633, 0x0638, 0x063d, 0x0643, 0x064d, + 0x000d, 0x0000, 0xffff, 0x0657, 0x0660, 0x0666, 0x066f, 0x2307, + 0x2313, 0x2320, 0x0692, 0x069b, 0x06a3, 0x2329, 0x2336, 0x0003, + 0x04ba, 0x04bf, 0x04b5, 0x0001, 0x04b7, 0x0001, 0x0000, 0x06c8, + // Entry F140 - F17F + 0x0001, 0x04bc, 0x0001, 0x0000, 0x06c8, 0x0001, 0x04c1, 0x0001, + 0x0000, 0x06c8, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x04cb, + 0x04d2, 0x0001, 0x04cd, 0x0001, 0x04cf, 0x0001, 0x0000, 0x06cb, + 0x0004, 0x04e0, 0x04da, 0x04d7, 0x04dd, 0x0001, 0x0014, 0x0904, + 0x0001, 0x0014, 0x035a, 0x0001, 0x0017, 0x0372, 0x0001, 0x0014, + 0x0370, 0x0005, 0x04e9, 0x0000, 0x0000, 0x0000, 0x0530, 0x0002, + 0x04ec, 0x050e, 0x0003, 0x04f0, 0x0000, 0x04ff, 0x000d, 0x0017, + 0xffff, 0x059c, 0x05a6, 0x05b3, 0x05bc, 0x05c0, 0x05c8, 0x05d3, + // Entry F180 - F1BF + 0x05d8, 0x05df, 0x05e5, 0x05ea, 0x05f1, 0x000d, 0x0017, 0xffff, + 0x059c, 0x05a6, 0x05b3, 0x05bc, 0x05c0, 0x05c8, 0x05d3, 0x05d8, + 0x05df, 0x05e5, 0x05ea, 0x05f1, 0x0003, 0x0512, 0x0000, 0x0521, + 0x000d, 0x0017, 0xffff, 0x059c, 0x05a6, 0x05b3, 0x05bc, 0x05c0, + 0x05c8, 0x05d3, 0x05d8, 0x05df, 0x05e5, 0x05ea, 0x05f1, 0x000d, + 0x0017, 0xffff, 0x059c, 0x05a6, 0x05b3, 0x05bc, 0x05c0, 0x05c8, + 0x05d3, 0x05d8, 0x05df, 0x05e5, 0x05ea, 0x05f1, 0x0003, 0x0539, + 0x053e, 0x0534, 0x0001, 0x0536, 0x0001, 0x0000, 0x1a1d, 0x0001, + // Entry F1C0 - F1FF + 0x053b, 0x0001, 0x0000, 0x1a1d, 0x0001, 0x0540, 0x0001, 0x0000, + 0x1a1d, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0549, 0x0003, + 0x0553, 0x0559, 0x054d, 0x0001, 0x054f, 0x0002, 0x0017, 0x05f9, + 0x0611, 0x0001, 0x0555, 0x0002, 0x0000, 0x1a20, 0x2345, 0x0001, + 0x055b, 0x0002, 0x0017, 0x0618, 0x0624, 0x0042, 0x05a2, 0x05a7, + 0x05ac, 0x05b1, 0x05c8, 0x05df, 0x05f6, 0x060d, 0x061f, 0x0636, + 0x064d, 0x0664, 0x067b, 0x0696, 0x06b1, 0x06cc, 0x06d1, 0x06d6, + 0x06db, 0x06f4, 0x070d, 0x0726, 0x072b, 0x0730, 0x0735, 0x073a, + // Entry F200 - F23F + 0x073f, 0x0744, 0x0749, 0x074e, 0x0753, 0x0767, 0x077b, 0x078f, + 0x07a3, 0x07b7, 0x07cb, 0x07df, 0x07f3, 0x0807, 0x081b, 0x082f, + 0x0843, 0x0857, 0x086b, 0x087f, 0x0893, 0x08a7, 0x08bb, 0x08cf, + 0x08e3, 0x08f7, 0x08fc, 0x0901, 0x0906, 0x091c, 0x0932, 0x0948, + 0x095e, 0x0974, 0x098a, 0x09a0, 0x09b2, 0x09c4, 0x09c9, 0x09ce, + 0x0001, 0x05a4, 0x0001, 0x0017, 0x062b, 0x0001, 0x05a9, 0x0001, + 0x0017, 0x062b, 0x0001, 0x05ae, 0x0001, 0x0000, 0x2146, 0x0003, + 0x05b5, 0x05b8, 0x05bd, 0x0001, 0x0017, 0x0632, 0x0003, 0x0017, + // Entry F240 - F27F + 0x0637, 0x0644, 0x0650, 0x0002, 0x05c0, 0x05c4, 0x0002, 0x0017, + 0x066b, 0x065f, 0x0002, 0x0017, 0x0686, 0x0679, 0x0003, 0x05cc, + 0x05cf, 0x05d4, 0x0001, 0x0017, 0x0632, 0x0003, 0x0017, 0x0637, + 0x0644, 0x0650, 0x0002, 0x05d7, 0x05db, 0x0002, 0x0017, 0x066b, + 0x065f, 0x0002, 0x0017, 0x0686, 0x0679, 0x0003, 0x05e3, 0x05e6, + 0x05eb, 0x0001, 0x0000, 0x1e5d, 0x0003, 0x0017, 0x0637, 0x0644, + 0x0650, 0x0002, 0x05ee, 0x05f2, 0x0002, 0x0017, 0x066b, 0x065f, + 0x0002, 0x0017, 0x0686, 0x0679, 0x0003, 0x05fa, 0x05fd, 0x0602, + // Entry F280 - F2BF + 0x0001, 0x0017, 0x0695, 0x0003, 0x0017, 0x069d, 0x06ad, 0x06bc, + 0x0002, 0x0605, 0x0609, 0x0002, 0x0017, 0x06dd, 0x06ce, 0x0002, + 0x0017, 0x06fe, 0x06ee, 0x0003, 0x0611, 0x0000, 0x0614, 0x0001, + 0x0017, 0x0710, 0x0002, 0x0617, 0x061b, 0x0002, 0x0017, 0x0717, + 0x0717, 0x0002, 0x0017, 0x0725, 0x0725, 0x0003, 0x0623, 0x0626, + 0x062b, 0x0001, 0x0014, 0x0ae9, 0x0003, 0x0017, 0x069d, 0x06ad, + 0x06bc, 0x0002, 0x062e, 0x0632, 0x0002, 0x0017, 0x0734, 0x0734, + 0x0002, 0x0017, 0x073d, 0x073d, 0x0003, 0x063a, 0x063d, 0x0642, + // Entry F2C0 - F2FF + 0x0001, 0x0017, 0x0747, 0x0003, 0x0017, 0x074d, 0x075b, 0x0768, + 0x0002, 0x0645, 0x0649, 0x0002, 0x0017, 0x0785, 0x0778, 0x0002, + 0x0017, 0x07a2, 0x0794, 0x0003, 0x0651, 0x0654, 0x0659, 0x0001, + 0x0017, 0x0747, 0x0003, 0x0017, 0x074d, 0x075b, 0x0768, 0x0002, + 0x065c, 0x0660, 0x0002, 0x0017, 0x0785, 0x0778, 0x0002, 0x0017, + 0x07b2, 0x0794, 0x0003, 0x0668, 0x066b, 0x0670, 0x0001, 0x0000, + 0x2242, 0x0003, 0x0017, 0x074d, 0x075b, 0x0768, 0x0002, 0x0673, + 0x0677, 0x0002, 0x0017, 0x0785, 0x0778, 0x0002, 0x0017, 0x07a2, + // Entry F300 - F33F + 0x07c3, 0x0004, 0x0680, 0x0683, 0x0688, 0x0693, 0x0001, 0x0017, + 0x07d2, 0x0003, 0x0017, 0x07d8, 0x07e5, 0x07f1, 0x0002, 0x068b, + 0x068f, 0x0002, 0x0017, 0x080d, 0x0800, 0x0002, 0x0017, 0x0829, + 0x081b, 0x0001, 0x0017, 0x0838, 0x0004, 0x069b, 0x069e, 0x06a3, + 0x06ae, 0x0001, 0x0017, 0x07d2, 0x0003, 0x0017, 0x07d8, 0x07e5, + 0x07f1, 0x0002, 0x06a6, 0x06aa, 0x0002, 0x0017, 0x080d, 0x0800, + 0x0002, 0x0017, 0x0829, 0x081b, 0x0001, 0x0017, 0x0838, 0x0004, + 0x06b6, 0x06b9, 0x06be, 0x06c9, 0x0001, 0x0000, 0x2151, 0x0003, + // Entry F340 - F37F + 0x0017, 0x07d8, 0x07e5, 0x07f1, 0x0002, 0x06c1, 0x06c5, 0x0002, + 0x0017, 0x084a, 0x084a, 0x0002, 0x0017, 0x0855, 0x0855, 0x0001, + 0x0017, 0x0838, 0x0001, 0x06ce, 0x0001, 0x0017, 0x0861, 0x0001, + 0x06d3, 0x0001, 0x0017, 0x0872, 0x0001, 0x06d8, 0x0001, 0x0017, + 0x0876, 0x0003, 0x06df, 0x06e2, 0x06e9, 0x0001, 0x0017, 0x0885, + 0x0005, 0x0017, 0x0894, 0x089c, 0x08a2, 0x0889, 0x08a9, 0x0002, + 0x06ec, 0x06f0, 0x0002, 0x0017, 0x08c0, 0x08b5, 0x0002, 0x0017, + 0x08d9, 0x08cd, 0x0003, 0x06f8, 0x06fb, 0x0702, 0x0001, 0x0017, + // Entry F380 - F3BF + 0x0885, 0x0005, 0x0017, 0x0894, 0x089c, 0x08a2, 0x0889, 0x08a9, + 0x0002, 0x0705, 0x0709, 0x0002, 0x0017, 0x08c0, 0x08b5, 0x0002, + 0x0017, 0x08d9, 0x08cd, 0x0003, 0x0711, 0x0714, 0x071b, 0x0001, + 0x0017, 0x0885, 0x0005, 0x0017, 0x0894, 0x089c, 0x08a2, 0x0889, + 0x08a9, 0x0002, 0x071e, 0x0722, 0x0002, 0x0017, 0x08c0, 0x08b5, + 0x0002, 0x0017, 0x08d9, 0x08cd, 0x0001, 0x0728, 0x0001, 0x0017, + 0x08e7, 0x0001, 0x072d, 0x0001, 0x0017, 0x08e7, 0x0001, 0x0732, + 0x0001, 0x0017, 0x08f6, 0x0001, 0x0737, 0x0001, 0x0017, 0x08fa, + // Entry F3C0 - F3FF + 0x0001, 0x073c, 0x0001, 0x0017, 0x08fa, 0x0001, 0x0741, 0x0001, + 0x0017, 0x0904, 0x0001, 0x0746, 0x0001, 0x0017, 0x08fa, 0x0001, + 0x074b, 0x0001, 0x0017, 0x08fa, 0x0001, 0x0750, 0x0001, 0x0017, + 0x090d, 0x0003, 0x0000, 0x0757, 0x075c, 0x0003, 0x0017, 0x0910, + 0x0920, 0x092f, 0x0002, 0x075f, 0x0763, 0x0002, 0x0017, 0x0956, + 0x0941, 0x0002, 0x0017, 0x0982, 0x096c, 0x0003, 0x0000, 0x076b, + 0x0770, 0x0003, 0x0017, 0x0999, 0x09a5, 0x09b0, 0x0002, 0x0773, + 0x0777, 0x0002, 0x0017, 0x09cf, 0x09be, 0x0002, 0x0017, 0x09f3, + // Entry F400 - F43F + 0x09e1, 0x0003, 0x0000, 0x077f, 0x0784, 0x0003, 0x0017, 0x0999, + 0x09a5, 0x09b0, 0x0002, 0x0787, 0x078b, 0x0002, 0x0017, 0x0a06, + 0x0a06, 0x0002, 0x0017, 0x0a14, 0x0a14, 0x0003, 0x0000, 0x0793, + 0x0798, 0x0003, 0x0017, 0x0a23, 0x0a32, 0x0a40, 0x0002, 0x079b, + 0x079f, 0x0002, 0x0017, 0x0a65, 0x0a51, 0x0002, 0x0017, 0x0a8f, + 0x0a7a, 0x0003, 0x0000, 0x07a7, 0x07ac, 0x0003, 0x0017, 0x0aa5, + 0x0ab1, 0x0abc, 0x0002, 0x07af, 0x07b3, 0x0002, 0x0017, 0x0adb, + 0x0aca, 0x0002, 0x0017, 0x0aff, 0x0aed, 0x0003, 0x0000, 0x07bb, + // Entry F440 - F47F + 0x07c0, 0x0003, 0x0017, 0x0aa5, 0x0ab1, 0x0abc, 0x0002, 0x07c3, + 0x07c7, 0x0002, 0x0017, 0x0b12, 0x0b12, 0x0002, 0x0017, 0x0b20, + 0x0b20, 0x0003, 0x0000, 0x07cf, 0x07d4, 0x0003, 0x0017, 0x0b2f, + 0x0b40, 0x0b50, 0x0002, 0x07d7, 0x07db, 0x0002, 0x0017, 0x0b79, + 0x0b63, 0x0002, 0x0017, 0x0ba7, 0x0b90, 0x0003, 0x0000, 0x07e3, + 0x07e8, 0x0003, 0x0017, 0x0bbf, 0x0bcb, 0x0bd6, 0x0002, 0x07eb, + 0x07ef, 0x0002, 0x0017, 0x0bf5, 0x0be4, 0x0002, 0x0017, 0x0c19, + 0x0c07, 0x0003, 0x0000, 0x07f7, 0x07fc, 0x0003, 0x0017, 0x0bbf, + // Entry F480 - F4BF + 0x0bcb, 0x0bd6, 0x0002, 0x07ff, 0x0803, 0x0002, 0x0017, 0x0c2c, + 0x0c2c, 0x0002, 0x0017, 0x0c3a, 0x0c3a, 0x0003, 0x0000, 0x080b, + 0x0810, 0x0003, 0x0017, 0x0c49, 0x0c5a, 0x0c6a, 0x0002, 0x0813, + 0x0817, 0x0002, 0x0017, 0x0c93, 0x0c7d, 0x0002, 0x0017, 0x0cc1, + 0x0caa, 0x0003, 0x0000, 0x081f, 0x0824, 0x0003, 0x0017, 0x0cd9, + 0x0ce5, 0x0cf0, 0x0002, 0x0827, 0x082b, 0x0002, 0x0017, 0x0d0f, + 0x0cfe, 0x0002, 0x0017, 0x0d33, 0x0d21, 0x0003, 0x0000, 0x0833, + 0x0838, 0x0003, 0x0017, 0x0cd9, 0x0ce5, 0x0cf0, 0x0002, 0x083b, + // Entry F4C0 - F4FF + 0x083f, 0x0002, 0x0017, 0x0d46, 0x0d46, 0x0002, 0x0017, 0x0d54, + 0x0d54, 0x0003, 0x0000, 0x0847, 0x084c, 0x0003, 0x0017, 0x0d63, + 0x0d76, 0x0d88, 0x0002, 0x084f, 0x0853, 0x0002, 0x0017, 0x0db5, + 0x0d9d, 0x0002, 0x0017, 0x0de7, 0x0dce, 0x0003, 0x0000, 0x085b, + 0x0860, 0x0003, 0x0017, 0x0e01, 0x0e0d, 0x0e18, 0x0002, 0x0863, + 0x0867, 0x0002, 0x0017, 0x0e37, 0x0e26, 0x0002, 0x0017, 0x0e5b, + 0x0e49, 0x0003, 0x0000, 0x086f, 0x0874, 0x0003, 0x0017, 0x0e01, + 0x0e0d, 0x0e18, 0x0002, 0x0877, 0x087b, 0x0002, 0x0017, 0x0e6e, + // Entry F500 - F53F + 0x0e6e, 0x0002, 0x0017, 0x0e7c, 0x0e7c, 0x0003, 0x0000, 0x0883, + 0x0888, 0x0003, 0x0017, 0x0e8b, 0x0e9b, 0x0eaa, 0x0002, 0x088b, + 0x088f, 0x0002, 0x0017, 0x0ed1, 0x0ebc, 0x0002, 0x0017, 0x0efd, + 0x0ee7, 0x0003, 0x0000, 0x0897, 0x089c, 0x0003, 0x0017, 0x0f14, + 0x0f20, 0x0f2b, 0x0002, 0x089f, 0x08a3, 0x0002, 0x0017, 0x0f4a, + 0x0f39, 0x0002, 0x0017, 0x0f6e, 0x0f5c, 0x0003, 0x0000, 0x08ab, + 0x08b0, 0x0003, 0x0017, 0x0f14, 0x0f20, 0x0f2b, 0x0002, 0x08b3, + 0x08b7, 0x0002, 0x0017, 0x0f81, 0x0f81, 0x0002, 0x0017, 0x0f8f, + // Entry F540 - F57F + 0x0f8f, 0x0003, 0x0000, 0x08bf, 0x08c4, 0x0003, 0x0017, 0x0f9e, + 0x0fae, 0x0fbd, 0x0002, 0x08c7, 0x08cb, 0x0002, 0x0017, 0x0fe4, + 0x0fcf, 0x0002, 0x0017, 0x1010, 0x0ffa, 0x0003, 0x0000, 0x08d3, + 0x08d8, 0x0003, 0x0017, 0x1027, 0x1033, 0x103e, 0x0002, 0x08db, + 0x08df, 0x0002, 0x0017, 0x105d, 0x104c, 0x0002, 0x0017, 0x1081, + 0x106f, 0x0003, 0x0000, 0x08e7, 0x08ec, 0x0003, 0x0017, 0x1027, + 0x1033, 0x103e, 0x0002, 0x08ef, 0x08f3, 0x0002, 0x0017, 0x1094, + 0x1094, 0x0002, 0x0017, 0x10a2, 0x10a2, 0x0001, 0x08f9, 0x0001, + // Entry F580 - F5BF + 0x0017, 0x10b1, 0x0001, 0x08fe, 0x0001, 0x0017, 0x10b1, 0x0001, + 0x0903, 0x0001, 0x0017, 0x10be, 0x0003, 0x090a, 0x090d, 0x0911, + 0x0001, 0x0017, 0x10c6, 0x0002, 0x0017, 0xffff, 0x10cd, 0x0002, + 0x0914, 0x0918, 0x0002, 0x0017, 0x10ec, 0x10de, 0x0002, 0x0017, + 0x110a, 0x10fb, 0x0003, 0x0920, 0x0923, 0x0927, 0x0001, 0x0017, + 0x111a, 0x0002, 0x0017, 0xffff, 0x10cd, 0x0002, 0x092a, 0x092e, + 0x0002, 0x0017, 0x111f, 0x111f, 0x0002, 0x0017, 0x112b, 0x112b, + 0x0003, 0x0936, 0x0939, 0x093d, 0x0001, 0x0017, 0x111a, 0x0002, + // Entry F5C0 - F5FF + 0x0017, 0xffff, 0x10cd, 0x0002, 0x0940, 0x0944, 0x0002, 0x0017, + 0x111f, 0x111f, 0x0002, 0x0017, 0x112b, 0x112b, 0x0003, 0x094c, + 0x094f, 0x0953, 0x0001, 0x0000, 0x1d84, 0x0002, 0x0017, 0xffff, + 0x1138, 0x0002, 0x0956, 0x095a, 0x0002, 0x0017, 0x1157, 0x1149, + 0x0002, 0x0017, 0x1175, 0x1166, 0x0003, 0x0962, 0x0965, 0x0969, + 0x0001, 0x0017, 0x1185, 0x0002, 0x0017, 0xffff, 0x1138, 0x0002, + 0x096c, 0x0970, 0x0002, 0x0017, 0x118a, 0x118a, 0x0002, 0x0017, + 0x1196, 0x1196, 0x0003, 0x0978, 0x097b, 0x097f, 0x0001, 0x0017, + // Entry F600 - F63F + 0x1185, 0x0002, 0x0017, 0xffff, 0x1138, 0x0002, 0x0982, 0x0986, + 0x0002, 0x0017, 0x11a3, 0x11a3, 0x0002, 0x0017, 0x11ac, 0x11ac, + 0x0003, 0x098e, 0x0991, 0x0995, 0x0001, 0x0009, 0x030c, 0x0002, + 0x0017, 0xffff, 0x11b6, 0x0002, 0x0998, 0x099c, 0x0002, 0x0017, + 0x11cb, 0x11bc, 0x0002, 0x0017, 0x11eb, 0x11db, 0x0003, 0x09a4, + 0x0000, 0x09a7, 0x0001, 0x0017, 0x11fc, 0x0002, 0x09aa, 0x09ae, + 0x0002, 0x0017, 0x1201, 0x1201, 0x0002, 0x0017, 0x120d, 0x120d, + 0x0003, 0x09b6, 0x0000, 0x09b9, 0x0001, 0x0017, 0x11fc, 0x0002, + // Entry F640 - F67F + 0x09bc, 0x09c0, 0x0002, 0x0017, 0x121a, 0x121a, 0x0002, 0x0017, + 0x1223, 0x1223, 0x0001, 0x09c6, 0x0001, 0x0017, 0x122d, 0x0001, + 0x09cb, 0x0001, 0x0017, 0x122d, 0x0001, 0x09d0, 0x0001, 0x0017, + 0x1236, 0x0004, 0x09d8, 0x09dd, 0x09e2, 0x09f1, 0x0003, 0x0000, + 0x1dc7, 0x234c, 0x2353, 0x0003, 0x0017, 0x123d, 0x1246, 0x1255, + 0x0002, 0x0000, 0x09e5, 0x0003, 0x0000, 0x09ec, 0x09e9, 0x0001, + 0x0017, 0x1264, 0x0003, 0x0017, 0xffff, 0x127a, 0x128f, 0x0002, + 0x0bd8, 0x09f4, 0x0003, 0x09f8, 0x0b38, 0x0a98, 0x009e, 0x0017, + // Entry F680 - F6BF + 0xffff, 0xffff, 0xffff, 0xffff, 0x1321, 0x136f, 0x13cf, 0x1405, + 0x146a, 0x14db, 0x1523, 0x1597, 0x15c7, 0x1651, 0x168a, 0x16cf, + 0x1720, 0x175c, 0x1792, 0x17e9, 0x1852, 0x189d, 0x18eb, 0x193f, + 0x196f, 0xffff, 0xffff, 0x19cd, 0xffff, 0x1a12, 0xffff, 0x1a67, + 0x1a9a, 0x1ad9, 0x1b18, 0xffff, 0xffff, 0x1b80, 0x1bc8, 0x1c04, + 0xffff, 0xffff, 0xffff, 0x1c71, 0xffff, 0x1cc2, 0x1d1f, 0xffff, + 0x1d86, 0x1ddd, 0x1e25, 0xffff, 0xffff, 0xffff, 0xffff, 0x1ebc, + 0xffff, 0xffff, 0x1f24, 0x1f66, 0xffff, 0xffff, 0x1fcb, 0x2013, + // Entry F6C0 - F6FF + 0x2049, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x20ec, + 0x2125, 0x2158, 0x2197, 0x21d3, 0xffff, 0xffff, 0x223b, 0xffff, + 0x2286, 0xffff, 0xffff, 0x22f7, 0xffff, 0x2371, 0xffff, 0xffff, + 0xffff, 0xffff, 0x23e7, 0xffff, 0x242c, 0x2495, 0x24e9, 0x2528, + 0xffff, 0xffff, 0xffff, 0x2588, 0x25d3, 0x260f, 0xffff, 0xffff, + 0x266a, 0x26da, 0x2719, 0x2743, 0xffff, 0xffff, 0x27a8, 0x27f3, + 0x2832, 0xffff, 0x288d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x297c, 0x29b2, 0x29e2, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry F700 - F73F + 0xffff, 0xffff, 0x2a79, 0xffff, 0xffff, 0x2ac9, 0xffff, 0x2b13, + 0xffff, 0x2b61, 0x2ba8, 0x2be4, 0xffff, 0x2c26, 0x2c65, 0xffff, + 0xffff, 0xffff, 0x2cd1, 0x2d04, 0xffff, 0xffff, 0x12a2, 0x139f, + 0x15f1, 0x161e, 0xffff, 0xffff, 0x2330, 0x2926, 0x009e, 0x0017, + 0x12cc, 0x12dd, 0x12f6, 0x130b, 0x1337, 0x137b, 0x13dd, 0x1422, + 0x148b, 0x14ef, 0x1545, 0x15a3, 0x15d1, 0x1660, 0x169d, 0x16e6, + 0x1730, 0x176a, 0x17ab, 0x1808, 0x1867, 0x18b3, 0x1903, 0x194b, + 0x1980, 0x19ae, 0x19ba, 0x19dc, 0x1a06, 0x1a22, 0x1a59, 0x1a74, + // Entry F740 - F77F + 0x1aab, 0x1aea, 0x1b2a, 0x1b5a, 0x1b6f, 0x1b94, 0x1bd8, 0x1c14, + 0x1c40, 0x1c4b, 0x1c63, 0x1c81, 0x1cad, 0x1cda, 0x1d34, 0x1d73, + 0x1d9c, 0x1df1, 0x1e32, 0x1e58, 0x1e72, 0x1ea0, 0x1eaf, 0x1ecc, + 0x1ef8, 0x1f0c, 0x1f36, 0x1f79, 0x1fb5, 0x1fbf, 0x1fdf, 0x2021, + 0x2054, 0x2076, 0x2084, 0x2099, 0x20a8, 0x20c1, 0x20d6, 0x20fb, + 0x2132, 0x2169, 0x21a7, 0x21e4, 0x2212, 0x2226, 0x224c, 0x227a, + 0x2297, 0x22c5, 0x22e5, 0x2306, 0x235d, 0x237e, 0x23a4, 0x23b5, + 0x23c4, 0x23d3, 0x23f6, 0x2420, 0x244b, 0x24ad, 0x24fa, 0x2536, + // Entry F780 - F7BF + 0x255e, 0x256b, 0x2576, 0x259d, 0x25e3, 0x2620, 0x264e, 0x2658, + 0x2683, 0x26eb, 0x2723, 0x2756, 0x2788, 0x2793, 0x27bd, 0x2804, + 0x2846, 0x287a, 0x28ac, 0x28f6, 0x290a, 0x2916, 0x2961, 0x296f, + 0x298a, 0x29be, 0x29ed, 0x2a0f, 0x2a1f, 0x2a2d, 0x2a40, 0x2a54, + 0x2a62, 0x2a6d, 0x2a85, 0x2aa9, 0x2abc, 0x2ada, 0x2b08, 0x2b25, + 0x2b55, 0x2b75, 0x2bb8, 0x2bf1, 0x2c17, 0x2c37, 0x2c74, 0x2c9e, + 0x2caa, 0x2cba, 0x2cde, 0x2d17, 0x1fab, 0x26c1, 0x12ac, 0x13ab, + 0x15fc, 0x162b, 0x1a4e, 0x22d6, 0x233b, 0x2936, 0x009e, 0x0017, + // Entry F7C0 - F7FF + 0xffff, 0xffff, 0xffff, 0xffff, 0x1353, 0x138d, 0x13f1, 0x1446, + 0x14b3, 0x1509, 0x156e, 0x15b5, 0x15e1, 0x1675, 0x16b6, 0x1703, + 0x1746, 0x177e, 0x17ca, 0x182d, 0x1882, 0x18cf, 0x1921, 0x195d, + 0x1997, 0xffff, 0xffff, 0x19f1, 0xffff, 0x1a38, 0xffff, 0x1a87, + 0x1ac2, 0x1b01, 0x1b42, 0xffff, 0xffff, 0x1bae, 0x1bee, 0x1c2a, + 0xffff, 0xffff, 0xffff, 0x1c97, 0xffff, 0x1cf8, 0x1d4f, 0xffff, + 0x1db8, 0x1e0b, 0x1e45, 0xffff, 0xffff, 0xffff, 0xffff, 0x1ee2, + 0xffff, 0xffff, 0x1f4e, 0x1f92, 0xffff, 0xffff, 0x1ff9, 0x2035, + // Entry F800 - F83F + 0x2065, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2110, + 0x2145, 0x2180, 0x21bd, 0x21fb, 0xffff, 0xffff, 0x2263, 0xffff, + 0x22ae, 0xffff, 0xffff, 0x231b, 0xffff, 0x2391, 0xffff, 0xffff, + 0xffff, 0xffff, 0x240b, 0xffff, 0x2470, 0x24cb, 0x2511, 0x254a, + 0xffff, 0xffff, 0xffff, 0x25b8, 0x25f9, 0x2637, 0xffff, 0xffff, + 0x26a2, 0x2702, 0x2733, 0x276f, 0xffff, 0xffff, 0x27d8, 0x281b, + 0x2860, 0xffff, 0x28d1, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x299e, 0x29d0, 0x29fe, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry F840 - F87F + 0xffff, 0xffff, 0x2a97, 0xffff, 0xffff, 0x2af1, 0xffff, 0x2b3d, + 0xffff, 0x2b8e, 0x2bce, 0x2c04, 0xffff, 0x2c4e, 0x2c89, 0xffff, + 0xffff, 0xffff, 0x2cf1, 0x2d30, 0xffff, 0xffff, 0x12bc, 0x13bd, + 0x160d, 0x163e, 0xffff, 0xffff, 0x234c, 0x294c, 0x0003, 0x0bdc, + 0x0c42, 0x0c0f, 0x0031, 0x0017, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry F880 - F8BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1d16, 0x1d6a, 0xffff, 0x1dd4, 0x0031, 0x0017, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry F8C0 - F8FF + 0xffff, 0xffff, 0xffff, 0xffff, 0x1d16, 0x1d6a, 0xffff, 0x1dd4, + 0x0031, 0x0017, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1d1a, + 0x1d6e, 0xffff, 0x1dd8, 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, + // Entry F900 - F93F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0004, 0x0010, + 0x0000, 0x0000, 0x0057, 0x0002, 0x0013, 0x0035, 0x0003, 0x0017, + 0x0000, 0x0026, 0x000d, 0x0018, 0xffff, 0x0000, 0x0006, 0x000b, + 0x0011, 0x0016, 0x001a, 0x001f, 0x0024, 0x0029, 0x002e, 0x0033, + 0x0038, 0x000d, 0x0018, 0xffff, 0x003d, 0x0045, 0x000b, 0x004d, + 0x0016, 0x001a, 0x001f, 0x0053, 0x005a, 0x0064, 0x006c, 0x0075, + 0x0003, 0x0039, 0x0000, 0x0048, 0x000d, 0x0018, 0xffff, 0x007e, + 0x0083, 0x0087, 0x008c, 0x0016, 0x0090, 0x0094, 0x0098, 0x009c, + // Entry F940 - F97F + 0x00a0, 0x00a4, 0x00a8, 0x000d, 0x0018, 0xffff, 0x003d, 0x0045, + 0x000b, 0x004d, 0x0016, 0x001a, 0x001f, 0x0053, 0x005a, 0x0064, + 0x006c, 0x0075, 0x0002, 0x0000, 0x005a, 0x0002, 0x0000, 0x005d, + 0x0002, 0x0060, 0x0063, 0x0001, 0x0000, 0x1f62, 0x0001, 0x0000, + 0x1f66, 0x0003, 0x0004, 0x0021, 0x0074, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0002, 0x0000, + 0x0010, 0x0001, 0x0012, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0018, 0x0007, 0x0017, 0x041d, 0x0420, 0x0423, 0x0426, 0x0429, + // Entry F980 - F9BF + 0x042c, 0x042f, 0x001e, 0x0000, 0x0000, 0x0040, 0x0000, 0x0000, + 0x0000, 0x0045, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x004c, 0x0051, 0x0056, 0x0000, 0x0000, 0x0000, + 0x0000, 0x005b, 0x0000, 0x0000, 0x0000, 0x0060, 0x0065, 0x006a, + 0x006f, 0x0001, 0x0042, 0x0001, 0x0017, 0x062b, 0x0002, 0x0000, + 0x0048, 0x0002, 0x0017, 0x069d, 0x06ad, 0x0001, 0x004e, 0x0001, + 0x0018, 0x00ac, 0x0001, 0x0053, 0x0001, 0x0018, 0x00bb, 0x0001, + 0x0058, 0x0001, 0x0018, 0x00c5, 0x0001, 0x005d, 0x0001, 0x0018, + // Entry F9C0 - F9FF + 0x00d0, 0x0001, 0x0062, 0x0001, 0x0017, 0x08fa, 0x0001, 0x0067, + 0x0001, 0x0018, 0x00da, 0x0001, 0x006c, 0x0001, 0x0018, 0x00ed, + 0x0001, 0x0071, 0x0001, 0x0018, 0x00fd, 0x0004, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0001, 0x000d, 0x0002, + 0x0010, 0x0032, 0x0003, 0x0014, 0x0000, 0x0023, 0x000d, 0x0018, + 0xffff, 0x0000, 0x0006, 0x000b, 0x0011, 0x0016, 0x001a, 0x001f, + 0x0024, 0x0029, 0x002e, 0x0033, 0x0038, 0x000d, 0x0018, 0xffff, + // Entry FA00 - FA3F + 0x003d, 0x0045, 0x000b, 0x004d, 0x0016, 0x001a, 0x001f, 0x0053, + 0x005a, 0x0064, 0x006c, 0x0075, 0x0003, 0x0036, 0x0000, 0x0045, + 0x000d, 0x0018, 0xffff, 0x007e, 0x0083, 0x0087, 0x008c, 0x0016, + 0x0090, 0x0094, 0x0098, 0x009c, 0x00a0, 0x00a4, 0x00a8, 0x000d, + 0x0018, 0xffff, 0x003d, 0x0045, 0x000b, 0x004d, 0x0016, 0x001a, + 0x001f, 0x0053, 0x005a, 0x0064, 0x006c, 0x0075, 0x0001, 0x0002, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000b, 0x0004, 0x0000, 0x0000, 0x0000, 0x0010, 0x0002, 0x0000, + // Entry FA40 - FA7F + 0x0013, 0x0002, 0x0000, 0x0016, 0x0002, 0x0019, 0x001c, 0x0001, + 0x0000, 0x1f62, 0x0001, 0x0000, 0x1f66, 0x0001, 0x0002, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0014, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0001, 0x0016, 0x0002, 0x0000, 0x0019, 0x0002, 0x001c, + 0x001f, 0x0001, 0x0017, 0x049f, 0x0001, 0x0017, 0x04a5, 0x0002, + 0x0003, 0x00e9, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000c, 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry FA80 - FABF + 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, 0x0023, 0x001d, 0x001a, + 0x0020, 0x0001, 0x0002, 0x0000, 0x0001, 0x0002, 0x0010, 0x0001, + 0x0002, 0x0044, 0x0001, 0x0002, 0x004f, 0x0008, 0x002f, 0x0066, + 0x008b, 0x009f, 0x00b7, 0x00c7, 0x00d8, 0x0000, 0x0002, 0x0032, + 0x0054, 0x0003, 0x0036, 0x0000, 0x0045, 0x000d, 0x0018, 0xffff, + 0x010e, 0x0113, 0x0117, 0x011b, 0x011f, 0x0122, 0x0127, 0x012c, + 0x012f, 0x00a0, 0x0133, 0x0137, 0x000d, 0x0018, 0xffff, 0x013b, + 0x0144, 0x014e, 0x0154, 0x011f, 0x015b, 0x0163, 0x012c, 0x016a, + // Entry FAC0 - FAFF + 0x0174, 0x017d, 0x0187, 0x0002, 0x0000, 0x0057, 0x000d, 0x0018, + 0xffff, 0x0191, 0x0194, 0x0196, 0x0198, 0x0196, 0x0191, 0x0191, + 0x019a, 0x019c, 0x019e, 0x01a0, 0x01a2, 0x0002, 0x0069, 0x007f, + 0x0003, 0x006d, 0x0000, 0x0076, 0x0007, 0x0006, 0x00ae, 0x412c, + 0x4130, 0x4134, 0x4138, 0x413c, 0x4140, 0x0007, 0x0018, 0x01a4, + 0x01ab, 0x01b2, 0x01bb, 0x01c2, 0x01cb, 0x01d2, 0x0002, 0x0000, + 0x0082, 0x0007, 0x0000, 0x19c7, 0x04dd, 0x04dd, 0x2296, 0x2357, + 0x2359, 0x235b, 0x0001, 0x008d, 0x0003, 0x0091, 0x0000, 0x0098, + // Entry FB00 - FB3F + 0x0005, 0x0018, 0xffff, 0x01d9, 0x01dc, 0x01df, 0x01e2, 0x0005, + 0x0018, 0xffff, 0x01e5, 0x01ee, 0x01f7, 0x0200, 0x0001, 0x00a1, + 0x0003, 0x00a5, 0x0000, 0x00ae, 0x0002, 0x00a8, 0x00ab, 0x0001, + 0x0018, 0x0209, 0x0001, 0x0018, 0x0212, 0x0002, 0x00b1, 0x00b4, + 0x0001, 0x0018, 0x0209, 0x0001, 0x0018, 0x0212, 0x0003, 0x00c1, + 0x0000, 0x00bb, 0x0001, 0x00bd, 0x0002, 0x0018, 0x021d, 0x0227, + 0x0001, 0x00c3, 0x0002, 0x0018, 0x0234, 0x0237, 0x0004, 0x00d5, + 0x00cf, 0x00cc, 0x00d2, 0x0001, 0x0002, 0x0025, 0x0001, 0x0002, + // Entry FB40 - FB7F + 0x0033, 0x0001, 0x0002, 0x0282, 0x0001, 0x0002, 0x028b, 0x0004, + 0x00e6, 0x00e0, 0x00dd, 0x00e3, 0x0001, 0x0000, 0x0524, 0x0001, + 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, + 0x0040, 0x012a, 0x0000, 0x0000, 0x012f, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0134, 0x0000, 0x0000, 0x0139, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x013e, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry FB80 - FBBF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0149, 0x0000, 0x014e, + 0x0000, 0x0000, 0x0153, 0x0000, 0x0000, 0x0158, 0x0000, 0x0000, + 0x015d, 0x0001, 0x012c, 0x0001, 0x0018, 0x023a, 0x0001, 0x0131, + 0x0001, 0x0018, 0x0240, 0x0001, 0x0136, 0x0001, 0x0018, 0x0246, + 0x0001, 0x013b, 0x0001, 0x0018, 0x024c, 0x0002, 0x0141, 0x0144, + 0x0001, 0x0018, 0x0251, 0x0003, 0x0018, 0x0257, 0x025a, 0x025f, + 0x0001, 0x014b, 0x0001, 0x0018, 0x0264, 0x0001, 0x0150, 0x0001, + // Entry FBC0 - FBFF + 0x0018, 0x027c, 0x0001, 0x0155, 0x0001, 0x0018, 0x0282, 0x0001, + 0x015a, 0x0001, 0x0018, 0x0289, 0x0001, 0x015f, 0x0001, 0x0018, + 0x028e, 0x0003, 0x0004, 0x01a0, 0x04f1, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0038, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, 0x0027, 0x0004, + 0x0024, 0x001e, 0x001b, 0x0021, 0x0001, 0x0014, 0x0904, 0x0001, + 0x0014, 0x035a, 0x0001, 0x0008, 0x0627, 0x0001, 0x0018, 0x0297, + 0x0004, 0x0035, 0x002f, 0x002c, 0x0032, 0x0001, 0x0000, 0x03c6, + // Entry FC00 - FC3F + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0008, 0x0041, 0x00a6, 0x00fd, 0x0132, 0x0153, 0x016d, + 0x017e, 0x018f, 0x0002, 0x0044, 0x0075, 0x0003, 0x0048, 0x0057, + 0x0066, 0x000d, 0x0016, 0xffff, 0x00a3, 0x00a8, 0x2516, 0x00b2, + 0x251c, 0x00bb, 0x00c0, 0x2521, 0x00ca, 0x00cf, 0x2526, 0x00d9, + 0x000d, 0x0000, 0xffff, 0x2142, 0x2006, 0x1f9a, 0x1f9c, 0x1f9a, + 0x2142, 0x2142, 0x1f9c, 0x2002, 0x1f98, 0x1f96, 0x2008, 0x000d, + 0x0018, 0xffff, 0x02a4, 0x02ac, 0x02b5, 0x02bc, 0x02c3, 0x02c8, + // Entry FC40 - FC7F + 0x02cf, 0x02d6, 0x02de, 0x02e8, 0x02f0, 0x02f9, 0x0003, 0x0079, + 0x0088, 0x0097, 0x000d, 0x000d, 0xffff, 0x0059, 0x005d, 0x3276, + 0x0065, 0x3272, 0x006d, 0x0071, 0x327b, 0x0079, 0x007d, 0x327f, + 0x0085, 0x000d, 0x0000, 0xffff, 0x2142, 0x2006, 0x1f9a, 0x1f9c, + 0x1f9a, 0x2142, 0x2142, 0x1f9c, 0x2002, 0x1f98, 0x1f96, 0x2008, + 0x000d, 0x000d, 0xffff, 0x0089, 0x0090, 0x3283, 0x3289, 0x3272, + 0x328f, 0x3295, 0x329b, 0x324e, 0x3258, 0x32a2, 0x3269, 0x0002, + 0x00a9, 0x00d3, 0x0005, 0x00af, 0x00b8, 0x00ca, 0x0000, 0x00c1, + // Entry FC80 - FCBF + 0x0007, 0x0008, 0x03ac, 0x4f7e, 0x4f83, 0x4f88, 0x4f8c, 0x4f90, + 0x4f95, 0x0007, 0x0000, 0x1f96, 0x21e4, 0x235d, 0x2002, 0x2002, + 0x21e4, 0x2002, 0x0007, 0x0018, 0x0302, 0x0305, 0x0309, 0x030c, + 0x030f, 0x0312, 0x0316, 0x0007, 0x0018, 0x0319, 0x0322, 0x032e, + 0x0337, 0x033e, 0x0347, 0x034d, 0x0005, 0x00d9, 0x00e2, 0x00f4, + 0x0000, 0x00eb, 0x0007, 0x0008, 0x03ac, 0x4f7e, 0x4f83, 0x4f88, + 0x4f8c, 0x4f90, 0x4f95, 0x0007, 0x0000, 0x1f96, 0x21e4, 0x235d, + 0x2002, 0x2002, 0x21e4, 0x2002, 0x0007, 0x0018, 0x0302, 0x0305, + // Entry FCC0 - FCFF + 0x0309, 0x030c, 0x030f, 0x0312, 0x0316, 0x0007, 0x0018, 0x0319, + 0x0322, 0x032e, 0x0337, 0x033e, 0x0347, 0x034d, 0x0002, 0x0100, + 0x0119, 0x0003, 0x0104, 0x010b, 0x0112, 0x0005, 0x0000, 0xffff, + 0x04e3, 0x04e6, 0x04e9, 0x04ec, 0x0005, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x0039, 0x0005, 0x0018, 0xffff, 0x0354, 0x035f, + 0x036a, 0x0375, 0x0003, 0x011d, 0x0124, 0x012b, 0x0005, 0x0000, + 0xffff, 0x04e3, 0x04e6, 0x04e9, 0x04ec, 0x0005, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x0039, 0x0005, 0x0018, 0xffff, 0x0354, + // Entry FD00 - FD3F + 0x035f, 0x036a, 0x0375, 0x0001, 0x0134, 0x0003, 0x0138, 0x0141, + 0x014a, 0x0002, 0x013b, 0x013e, 0x0001, 0x0018, 0x0380, 0x0001, + 0x0018, 0x038b, 0x0002, 0x0144, 0x0147, 0x0001, 0x0014, 0x06cf, + 0x0001, 0x0018, 0x0398, 0x0002, 0x014d, 0x0150, 0x0001, 0x0018, + 0x0380, 0x0001, 0x0018, 0x038b, 0x0003, 0x0162, 0x0000, 0x0157, + 0x0002, 0x015a, 0x015e, 0x0002, 0x0018, 0x039f, 0x03d6, 0x0002, + 0x0018, 0x03bc, 0x03f1, 0x0002, 0x0165, 0x0169, 0x0002, 0x0018, + 0x0406, 0x041c, 0x0002, 0x0018, 0x0411, 0x0427, 0x0004, 0x017b, + // Entry FD40 - FD7F + 0x0175, 0x0172, 0x0178, 0x0001, 0x0017, 0x0528, 0x0001, 0x0014, + 0x0792, 0x0001, 0x0018, 0x042e, 0x0001, 0x0008, 0x0620, 0x0004, + 0x018c, 0x0186, 0x0183, 0x0189, 0x0001, 0x0005, 0x0082, 0x0001, + 0x0005, 0x008f, 0x0001, 0x0005, 0x0099, 0x0001, 0x0005, 0x00a1, + 0x0004, 0x019d, 0x0197, 0x0194, 0x019a, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0040, 0x01e1, 0x0000, 0x0000, 0x01e6, 0x0203, 0x021b, + 0x0233, 0x024b, 0x0263, 0x027b, 0x0298, 0x02b0, 0x02c8, 0x02e5, + // Entry FD80 - FDBF + 0x02fd, 0x0000, 0x0000, 0x0000, 0x0315, 0x0332, 0x034a, 0x0000, + 0x0000, 0x0000, 0x0362, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0367, 0x036f, 0x0377, 0x037f, 0x0387, 0x038f, 0x0397, 0x039f, + 0x03a7, 0x03af, 0x03b7, 0x03bf, 0x03c7, 0x03cf, 0x03d7, 0x03df, + 0x03e7, 0x03ef, 0x03f7, 0x03ff, 0x0407, 0x0000, 0x040f, 0x0000, + 0x0414, 0x042c, 0x0444, 0x045c, 0x0474, 0x048c, 0x04a4, 0x04bc, + 0x04d4, 0x04ec, 0x0001, 0x01e3, 0x0001, 0x0018, 0x0434, 0x0003, + 0x01ea, 0x01ed, 0x01f2, 0x0001, 0x0018, 0x043b, 0x0003, 0x0018, + // Entry FDC0 - FDFF + 0x0441, 0x0447, 0x044f, 0x0002, 0x01f5, 0x01fc, 0x0005, 0x0018, + 0x047d, 0x0455, 0xffff, 0x0462, 0x0470, 0x0005, 0x0018, 0x04ac, + 0x0489, 0xffff, 0x049a, 0x04ac, 0x0003, 0x0207, 0x0000, 0x020a, + 0x0001, 0x0018, 0x04be, 0x0002, 0x020d, 0x0214, 0x0005, 0x0014, + 0x0a25, 0x0a25, 0xffff, 0x0a25, 0x0a25, 0x0005, 0x0018, 0x04c1, + 0x04c1, 0xffff, 0x04c1, 0x04c1, 0x0003, 0x021f, 0x0000, 0x0222, + 0x0001, 0x0018, 0x04be, 0x0002, 0x0225, 0x022c, 0x0005, 0x0014, + 0x0a25, 0x0a25, 0xffff, 0x0a25, 0x0a25, 0x0005, 0x0018, 0x04c1, + // Entry FE00 - FE3F + 0x04c1, 0xffff, 0x04c1, 0x04c1, 0x0003, 0x0237, 0x0000, 0x023a, + 0x0001, 0x0018, 0x04ce, 0x0002, 0x023d, 0x0244, 0x0005, 0x0018, + 0x0505, 0x04d6, 0xffff, 0x04e5, 0x04f5, 0x0005, 0x0018, 0x053f, + 0x0516, 0xffff, 0x052a, 0x053f, 0x0003, 0x024f, 0x0000, 0x0252, + 0x0001, 0x0018, 0x0554, 0x0002, 0x0255, 0x025c, 0x0005, 0x0018, + 0x055b, 0x055b, 0xffff, 0x055b, 0x055b, 0x0005, 0x0018, 0x0569, + 0x0569, 0xffff, 0x0569, 0x0569, 0x0003, 0x0267, 0x0000, 0x026a, + 0x0001, 0x0001, 0x0117, 0x0002, 0x026d, 0x0274, 0x0005, 0x0018, + // Entry FE40 - FE7F + 0x057a, 0x057a, 0xffff, 0x057a, 0x057a, 0x0005, 0x0018, 0x0585, + 0x0585, 0xffff, 0x0585, 0x0585, 0x0003, 0x027f, 0x0282, 0x0287, + 0x0001, 0x0018, 0x0593, 0x0003, 0x0018, 0x059a, 0x05a9, 0x05b4, + 0x0002, 0x028a, 0x0291, 0x0005, 0x0018, 0x05f0, 0x05c4, 0xffff, + 0x05d2, 0x05e1, 0x0005, 0x0018, 0x0627, 0x0600, 0xffff, 0x0613, + 0x0627, 0x0003, 0x029c, 0x0000, 0x029f, 0x0001, 0x0018, 0x063b, + 0x0002, 0x02a2, 0x02a9, 0x0005, 0x0018, 0x0641, 0x0641, 0xffff, + 0x0641, 0x0641, 0x0005, 0x0018, 0x064e, 0x064e, 0xffff, 0x064e, + // Entry FE80 - FEBF + 0x064e, 0x0003, 0x02b4, 0x0000, 0x02b7, 0x0001, 0x0018, 0x063b, + 0x0002, 0x02ba, 0x02c1, 0x0005, 0x0018, 0x0641, 0x0641, 0xffff, + 0x0641, 0x0641, 0x0005, 0x0018, 0x064e, 0x064e, 0xffff, 0x064e, + 0x064e, 0x0003, 0x02cc, 0x02cf, 0x02d4, 0x0001, 0x0018, 0x065e, + 0x0003, 0x0018, 0x0666, 0x0676, 0x0682, 0x0002, 0x02d7, 0x02de, + 0x0005, 0x0018, 0x06c2, 0x0693, 0xffff, 0x06a2, 0x06b2, 0x0005, + 0x0018, 0x06fc, 0x06d3, 0xffff, 0x06e7, 0x06fc, 0x0003, 0x02e9, + 0x0000, 0x02ec, 0x0001, 0x0018, 0x0711, 0x0002, 0x02ef, 0x02f6, + // Entry FEC0 - FEFF + 0x0005, 0x0018, 0x0717, 0x0717, 0xffff, 0x0717, 0x0717, 0x0005, + 0x0018, 0x0724, 0x0724, 0xffff, 0x0724, 0x0724, 0x0003, 0x0301, + 0x0000, 0x0304, 0x0001, 0x0018, 0x0711, 0x0002, 0x0307, 0x030e, + 0x0005, 0x0018, 0x0717, 0x0717, 0xffff, 0x0717, 0x0717, 0x0005, + 0x0018, 0x0724, 0x0724, 0xffff, 0x0724, 0x0724, 0x0003, 0x0319, + 0x031c, 0x0321, 0x0001, 0x0018, 0x0734, 0x0003, 0x0018, 0x073a, + 0x073f, 0x0746, 0x0002, 0x0324, 0x032b, 0x0005, 0x0018, 0x0771, + 0x074d, 0xffff, 0x075a, 0x0766, 0x0005, 0x0018, 0x079f, 0x077e, + // Entry FF00 - FF3F + 0xffff, 0x078e, 0x079f, 0x0003, 0x0336, 0x0000, 0x0339, 0x0001, + 0x0018, 0x0734, 0x0002, 0x033c, 0x0343, 0x0005, 0x0018, 0x07b0, + 0x074d, 0xffff, 0x07b0, 0x0766, 0x0005, 0x0018, 0x07bc, 0x07bc, + 0xffff, 0x07bc, 0x07bc, 0x0003, 0x034e, 0x0000, 0x0351, 0x0001, + 0x0018, 0x07cb, 0x0002, 0x0354, 0x035b, 0x0005, 0x0018, 0x07ce, + 0x07ce, 0xffff, 0x07ce, 0x07ce, 0x0005, 0x0018, 0x07d8, 0x07d8, + 0xffff, 0x07d8, 0x07d8, 0x0001, 0x0364, 0x0001, 0x0018, 0x07e4, + 0x0002, 0x0000, 0x036a, 0x0003, 0x0018, 0x07f3, 0x0804, 0x0810, + // Entry FF40 - FF7F + 0x0002, 0x0000, 0x0372, 0x0003, 0x0018, 0x0822, 0x082f, 0x0837, + 0x0002, 0x0000, 0x037a, 0x0003, 0x0018, 0x0845, 0x0851, 0x0858, + 0x0002, 0x0000, 0x0382, 0x0003, 0x0018, 0x0865, 0x0879, 0x0888, + 0x0002, 0x0000, 0x038a, 0x0003, 0x0018, 0x089d, 0x08ac, 0x08b6, + 0x0002, 0x0000, 0x0392, 0x0003, 0x0018, 0x08c6, 0x08d3, 0x08db, + 0x0002, 0x0000, 0x039a, 0x0003, 0x0018, 0x08e9, 0x08fa, 0x0906, + 0x0002, 0x0000, 0x03a2, 0x0003, 0x0018, 0x0918, 0x0927, 0x0931, + 0x0002, 0x0000, 0x03aa, 0x0003, 0x0018, 0x0941, 0x094d, 0x0954, + // Entry FF80 - FFBF + 0x0002, 0x0000, 0x03b2, 0x0003, 0x0018, 0x0961, 0x0970, 0x097a, + 0x0002, 0x0000, 0x03ba, 0x0003, 0x0018, 0x098a, 0x0997, 0x099f, + 0x0002, 0x0000, 0x03c2, 0x0003, 0x0018, 0x09ad, 0x09b9, 0x09c0, + 0x0002, 0x0000, 0x03ca, 0x0003, 0x0018, 0x09cd, 0x09de, 0x09eb, + 0x0002, 0x0000, 0x03d2, 0x0003, 0x0018, 0x09fd, 0x0a0a, 0x0a13, + 0x0002, 0x0000, 0x03da, 0x0003, 0x0018, 0x0a21, 0x0a2d, 0x0a35, + 0x0002, 0x0000, 0x03e2, 0x0003, 0x0018, 0x0a42, 0x0a50, 0x0a5a, + 0x0002, 0x0000, 0x03ea, 0x0003, 0x0018, 0x0a69, 0x0a77, 0x0a81, + // Entry FFC0 - FFFF + 0x0002, 0x0000, 0x03f2, 0x0003, 0x0018, 0x0a90, 0x0a9d, 0x0aa6, + 0x0002, 0x0000, 0x03fa, 0x0003, 0x0018, 0x0ab4, 0x0ac3, 0x0acd, + 0x0002, 0x0000, 0x0402, 0x0003, 0x0018, 0x0add, 0x0aea, 0x0af2, + 0x0002, 0x0000, 0x040a, 0x0003, 0x0018, 0x0b00, 0x0b0c, 0x0b13, + 0x0001, 0x0411, 0x0001, 0x0018, 0x0b20, 0x0003, 0x0418, 0x0000, + 0x041b, 0x0001, 0x0018, 0x0b2e, 0x0002, 0x041e, 0x0425, 0x0005, + 0x0018, 0x0b68, 0x0b37, 0xffff, 0x0b47, 0x0b58, 0x0005, 0x0018, + 0x0b9f, 0x0b77, 0xffff, 0x0b8a, 0x0b9f, 0x0003, 0x0430, 0x0000, + // Entry 10000 - 1003F + 0x0433, 0x0001, 0x0018, 0x0bb4, 0x0002, 0x0436, 0x043d, 0x0005, + 0x0018, 0x0bbb, 0x0bbb, 0xffff, 0x0bbb, 0x0bbb, 0x0005, 0x0018, + 0x0bc9, 0x0bc9, 0xffff, 0x0bc9, 0x0bc9, 0x0003, 0x0448, 0x0000, + 0x044b, 0x0001, 0x0000, 0x200e, 0x0002, 0x044e, 0x0455, 0x0005, + 0x0018, 0x0bda, 0x0bda, 0xffff, 0x0bda, 0x0bda, 0x0005, 0x0018, + 0x0be3, 0x0be3, 0xffff, 0x0be3, 0x0be3, 0x0003, 0x0460, 0x0000, + 0x0463, 0x0001, 0x000d, 0x0c85, 0x0002, 0x0466, 0x046d, 0x0005, + 0x000d, 0x32ba, 0x0c97, 0xffff, 0x32ab, 0x3205, 0x0005, 0x0018, + // Entry 10040 - 1007F + 0x0c13, 0x0bef, 0xffff, 0x0c00, 0x0c13, 0x0003, 0x0478, 0x0000, + 0x047b, 0x0001, 0x0001, 0x07c5, 0x0002, 0x047e, 0x0485, 0x0005, + 0x000d, 0x0cf4, 0x0cf4, 0xffff, 0x0cf4, 0x0cf4, 0x0005, 0x0018, + 0x0c26, 0x0c26, 0xffff, 0x0c26, 0x0c26, 0x0003, 0x0490, 0x0000, + 0x0493, 0x0001, 0x0000, 0x1f9a, 0x0002, 0x0496, 0x049d, 0x0005, + 0x0018, 0x0c35, 0x0c35, 0xffff, 0x0c35, 0x0c35, 0x0005, 0x0018, + 0x0c3e, 0x0c3e, 0xffff, 0x0c3e, 0x0c3e, 0x0003, 0x04a8, 0x0000, + 0x04ab, 0x0001, 0x000d, 0x0d0f, 0x0002, 0x04ae, 0x04b5, 0x0005, + // Entry 10080 - 100BF + 0x000d, 0x32d9, 0x0d1c, 0xffff, 0x32c9, 0x3220, 0x0005, 0x0018, + 0x0c70, 0x0c4a, 0xffff, 0x0c5c, 0x0c70, 0x0003, 0x04c0, 0x0000, + 0x04c3, 0x0001, 0x0001, 0x083e, 0x0002, 0x04c6, 0x04cd, 0x0005, + 0x000d, 0x0d7f, 0x0d7f, 0xffff, 0x0d7f, 0x0d7f, 0x0005, 0x0018, + 0x0c84, 0x0c84, 0xffff, 0x0c84, 0x0c84, 0x0003, 0x04d8, 0x0000, + 0x04db, 0x0001, 0x0000, 0x2002, 0x0002, 0x04de, 0x04e5, 0x0005, + 0x0014, 0x1347, 0x1347, 0xffff, 0x1347, 0x1347, 0x0005, 0x0018, + 0x0c93, 0x0c93, 0xffff, 0x0c93, 0x0c93, 0x0001, 0x04ee, 0x0001, + // Entry 100C0 - 100FF + 0x0018, 0x0c9f, 0x0004, 0x04f6, 0x04fb, 0x0500, 0x050b, 0x0003, + 0x0000, 0x1dc7, 0x234c, 0x2353, 0x0003, 0x0018, 0x0cac, 0x0cbd, + 0x0cd0, 0x0002, 0x0000, 0x0503, 0x0002, 0x0000, 0x0506, 0x0003, + 0x0018, 0xffff, 0x0cdf, 0x0cf7, 0x0002, 0x06d4, 0x050e, 0x0003, + 0x05a8, 0x063e, 0x0512, 0x0094, 0x0018, 0x0d0d, 0x0d1c, 0x0d30, + 0x0d48, 0x0d7a, 0x0dcf, 0x0e12, 0x0e6a, 0x0eef, 0x0f75, 0x0ff3, + 0xffff, 0x105d, 0x1098, 0x10d8, 0x112a, 0x1186, 0x11c7, 0x1212, + 0x127a, 0x12f3, 0x135a, 0x13bb, 0x1407, 0x1447, 0x1481, 0x1490, + // Entry 10100 - 1013F + 0x14ac, 0x14de, 0x14fb, 0x152f, 0x154d, 0x158d, 0x15c7, 0x1608, + 0x1644, 0x1659, 0x167d, 0x16c5, 0x1711, 0x1743, 0x174d, 0x1760, + 0x178e, 0x17ce, 0x17f2, 0x184b, 0x1893, 0x18bf, 0x1917, 0x195b, + 0x198d, 0x19a5, 0x19e3, 0x19f3, 0x1a10, 0x1a42, 0x1a59, 0x1a87, + 0x1af4, 0x1b44, 0x1b59, 0x1b7e, 0x1bd2, 0x1c15, 0x1c45, 0x1c51, + 0x1c66, 0x1c76, 0x1c8c, 0x1ca2, 0x1cc9, 0x1d06, 0x1d44, 0x1d84, + 0xffff, 0x1db6, 0x1dd0, 0x1df7, 0x1e27, 0x1e46, 0x1e7e, 0x1e8b, + 0x1eb3, 0x1eef, 0x1f12, 0x1f48, 0x1f57, 0x1f66, 0x1f74, 0x1f9b, + // Entry 10140 - 1017F + 0x1fcf, 0x1ff6, 0x205a, 0x20ae, 0x20f6, 0x2128, 0x2137, 0x2144, + 0x2165, 0x21b6, 0x2206, 0x2244, 0x2250, 0x2279, 0x22d0, 0x2312, + 0x234d, 0x2385, 0x2392, 0x23b9, 0x23fb, 0x2438, 0x246c, 0x24a1, + 0x24f3, 0x250b, 0xffff, 0x2518, 0x2527, 0x2543, 0xffff, 0x2586, + 0x25b6, 0x25c5, 0x25d5, 0x25e5, 0x2601, 0x2610, 0x261a, 0x2638, + 0x266e, 0x267e, 0x269a, 0x26ca, 0x26e7, 0x271d, 0x2739, 0x277b, + 0x27bb, 0x27ed, 0x2810, 0x285d, 0x2895, 0x28a0, 0x28ae, 0x28d5, + 0x291a, 0x0094, 0x0018, 0xffff, 0xffff, 0xffff, 0xffff, 0x0d62, + // Entry 10180 - 101BF + 0x0dc0, 0x0e03, 0x0e46, 0x0ec8, 0x0f53, 0x0fcf, 0xffff, 0x1051, + 0x108b, 0x10c8, 0x110e, 0x1178, 0x11b8, 0x11fb, 0x1256, 0x12d8, + 0x133f, 0x13a6, 0x13fb, 0x1435, 0xffff, 0xffff, 0x149e, 0xffff, + 0x14ec, 0xffff, 0x153e, 0x1581, 0x15bb, 0x15f5, 0xffff, 0xffff, + 0x166e, 0x16b1, 0x1703, 0xffff, 0xffff, 0xffff, 0x1779, 0xffff, + 0x17dd, 0x1832, 0xffff, 0x18a6, 0x1907, 0x194d, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1a02, 0xffff, 0xffff, 0x1a6a, 0x1ad7, 0xffff, + 0xffff, 0x1b67, 0x1bc2, 0x1c08, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 101C0 - 101FF + 0xffff, 0xffff, 0x1cbc, 0x1cf9, 0x1d36, 0x1d76, 0xffff, 0xffff, + 0xffff, 0x1dea, 0xffff, 0x1e35, 0xffff, 0xffff, 0x1ea0, 0xffff, + 0x1f02, 0xffff, 0xffff, 0xffff, 0xffff, 0x1f8c, 0xffff, 0x1fda, + 0x2044, 0x209c, 0x20e8, 0xffff, 0xffff, 0xffff, 0x2151, 0x21a3, + 0x21f2, 0xffff, 0xffff, 0x2261, 0x22bf, 0x2308, 0x233c, 0xffff, + 0xffff, 0x23a9, 0x23ef, 0x2429, 0xffff, 0x2483, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2533, 0xffff, 0x2579, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2628, 0xffff, 0xffff, + // Entry 10200 - 1023F + 0x268d, 0xffff, 0x26d7, 0xffff, 0x272a, 0x276d, 0x27ad, 0xffff, + 0x27fd, 0x284c, 0xffff, 0xffff, 0xffff, 0x28c8, 0x2905, 0x0094, + 0x0018, 0xffff, 0xffff, 0xffff, 0xffff, 0x0d9d, 0x0de9, 0x0e2c, + 0x0e99, 0x0f21, 0x0fa2, 0x1022, 0xffff, 0x1074, 0x10b0, 0x10f3, + 0x1151, 0x119f, 0x11e1, 0x1234, 0x12a9, 0x1319, 0x1380, 0x13db, + 0x141e, 0x1464, 0xffff, 0xffff, 0x14c5, 0xffff, 0x1515, 0xffff, + 0x1567, 0x15a4, 0x15de, 0x1626, 0xffff, 0xffff, 0x1697, 0x16e4, + 0x172a, 0xffff, 0xffff, 0xffff, 0x17ae, 0xffff, 0x1812, 0x186f, + // Entry 10240 - 1027F + 0xffff, 0x18e3, 0x1932, 0x1974, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1a29, 0xffff, 0xffff, 0x1aaf, 0x1b1c, 0xffff, 0xffff, 0x1ba0, + 0x1bed, 0x1c2d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1ce1, 0x1d1e, 0x1d5d, 0x1d9d, 0xffff, 0xffff, 0xffff, 0x1e0f, + 0xffff, 0x1e62, 0xffff, 0xffff, 0x1ed1, 0xffff, 0x1f2d, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1fb5, 0xffff, 0x201d, 0x207b, 0x20cb, + 0x210f, 0xffff, 0xffff, 0xffff, 0x2184, 0x21d4, 0x2225, 0xffff, + 0xffff, 0x229c, 0x22ec, 0x2327, 0x2369, 0xffff, 0xffff, 0x23d4, + // Entry 10280 - 102BF + 0x2412, 0x2452, 0xffff, 0x24ca, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x255e, 0xffff, 0x259e, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2653, 0xffff, 0xffff, 0x26b2, 0xffff, + 0x2702, 0xffff, 0x2753, 0x2794, 0x27d4, 0xffff, 0x282e, 0x2879, + 0xffff, 0xffff, 0xffff, 0x28ed, 0x293a, 0x0003, 0x06d8, 0x073e, + 0x070b, 0x0031, 0x0017, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 102C0 - 102FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1d16, 0x1d6a, 0xffff, 0x1dd4, 0x0031, 0x0017, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 10300 - 1033F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1d16, 0x1d6a, 0xffff, 0x1dd4, 0x0031, + 0x0017, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1d1a, 0x1d6e, + // Entry 10340 - 1037F + 0xffff, 0x1dd8, 0x0002, 0x0003, 0x00e9, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, + 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, 0x0002, 0x0000, 0x0001, + 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0002, 0x004f, + 0x0008, 0x002f, 0x0066, 0x008b, 0x009f, 0x00b7, 0x00c7, 0x00d8, + 0x0000, 0x0002, 0x0032, 0x0054, 0x0003, 0x0036, 0x0000, 0x0045, + 0x000d, 0x0019, 0xffff, 0x0000, 0x0003, 0x000a, 0x0010, 0x0015, + // Entry 10380 - 103BF + 0x0019, 0x001e, 0x0022, 0x0027, 0x002d, 0x0031, 0x0035, 0x000d, + 0x0019, 0xffff, 0x003a, 0x0044, 0x004e, 0x0056, 0x0061, 0x006a, + 0x0078, 0x008c, 0x0096, 0x00a0, 0x00ab, 0x00b4, 0x0002, 0x0000, + 0x0057, 0x000d, 0x0000, 0xffff, 0x2008, 0x213f, 0x2002, 0x2008, + 0x235f, 0x235f, 0x1f9a, 0x2008, 0x1f96, 0x1f9a, 0x2000, 0x235f, + 0x0002, 0x0069, 0x007f, 0x0003, 0x006d, 0x0000, 0x0076, 0x0007, + 0x0019, 0x00c0, 0x00c4, 0x00cb, 0x00cf, 0x00d3, 0x00d8, 0x00de, + 0x0007, 0x0019, 0x00e2, 0x00e7, 0x00f0, 0x00f7, 0x0102, 0x010a, + // Entry 103C0 - 103FF + 0x0115, 0x0002, 0x0000, 0x0082, 0x0007, 0x0000, 0x235f, 0x1f9a, + 0x1ffe, 0x1f9a, 0x213f, 0x2361, 0x235f, 0x0001, 0x008d, 0x0003, + 0x0091, 0x0000, 0x0098, 0x0005, 0x0019, 0xffff, 0x011f, 0x0124, + 0x0129, 0x012e, 0x0005, 0x0019, 0xffff, 0x0133, 0x0148, 0x0167, + 0x0186, 0x0001, 0x00a1, 0x0003, 0x00a5, 0x0000, 0x00ae, 0x0002, + 0x00a8, 0x00ab, 0x0001, 0x0019, 0x01a6, 0x0001, 0x0019, 0x01ad, + 0x0002, 0x00b1, 0x00b4, 0x0001, 0x0019, 0x01a6, 0x0001, 0x0019, + 0x01ad, 0x0003, 0x00c1, 0x0000, 0x00bb, 0x0001, 0x00bd, 0x0002, + // Entry 10400 - 1043F + 0x0019, 0x01b5, 0x01cc, 0x0001, 0x00c3, 0x0002, 0x0019, 0x01e1, + 0x01e7, 0x0004, 0x00d5, 0x00cf, 0x00cc, 0x00d2, 0x0001, 0x0002, + 0x0025, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, + 0x0002, 0x028b, 0x0004, 0x00e6, 0x00e0, 0x00dd, 0x00e3, 0x0001, + 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, + 0x0001, 0x0000, 0x0546, 0x003d, 0x0127, 0x0000, 0x0000, 0x012c, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0131, 0x0000, 0x0000, + 0x0136, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x013b, 0x0000, + // Entry 10440 - 1047F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0146, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x014b, 0x0000, 0x0150, 0x0000, 0x0000, 0x0155, 0x0000, 0x0000, + 0x015a, 0x0001, 0x0129, 0x0001, 0x0019, 0x01ed, 0x0001, 0x012e, + 0x0001, 0x0019, 0x01f5, 0x0001, 0x0133, 0x0001, 0x0019, 0x01fa, + 0x0001, 0x0138, 0x0001, 0x0019, 0x0202, 0x0002, 0x013e, 0x0141, + // Entry 10480 - 104BF + 0x0001, 0x0019, 0x0209, 0x0003, 0x0019, 0x0211, 0x0227, 0x0234, + 0x0001, 0x0148, 0x0001, 0x0019, 0x023d, 0x0001, 0x014d, 0x0001, + 0x0019, 0x0250, 0x0001, 0x0152, 0x0001, 0x0019, 0x0260, 0x0001, + 0x0157, 0x0001, 0x0019, 0x0269, 0x0001, 0x015c, 0x0001, 0x0019, + 0x0271, 0x0002, 0x0003, 0x00bd, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, 0x0023, + 0x001d, 0x001a, 0x0020, 0x0001, 0x0002, 0x0000, 0x0001, 0x0002, + // Entry 104C0 - 104FF + 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0002, 0x004f, 0x0008, + 0x002f, 0x0066, 0x0000, 0x0000, 0x008b, 0x009b, 0x00ac, 0x0000, + 0x0002, 0x0032, 0x0054, 0x0003, 0x0036, 0x0000, 0x0045, 0x000d, + 0x0017, 0xffff, 0x042f, 0x2d49, 0x2d4c, 0x2d4f, 0x2d52, 0x2d55, + 0x2d58, 0x2d5c, 0x2d5f, 0x2d62, 0x2d65, 0x2d68, 0x000d, 0x0019, + 0xffff, 0x0279, 0x0280, 0x0289, 0x028e, 0x0295, 0x0299, 0x029f, + 0x02a7, 0x02aa, 0x02b4, 0x02bc, 0x02c5, 0x0002, 0x0000, 0x0057, + 0x000d, 0x0000, 0xffff, 0x235b, 0x2364, 0x2357, 0x2366, 0x2357, + // Entry 10500 - 1053F + 0x235b, 0x235b, 0x2368, 0x235b, 0x236a, 0x236c, 0x236e, 0x0002, + 0x0069, 0x007f, 0x0003, 0x006d, 0x0000, 0x0076, 0x0007, 0x0019, + 0x02ce, 0x02d2, 0x02d6, 0x02da, 0x02de, 0x02e2, 0x02e6, 0x0007, + 0x0019, 0x02ea, 0x02f0, 0x02f7, 0x02fe, 0x0306, 0x030f, 0x0316, + 0x0002, 0x0000, 0x0082, 0x0007, 0x0000, 0x236e, 0x04dd, 0x04dd, + 0x2366, 0x2366, 0x2366, 0x235b, 0x0003, 0x0095, 0x0000, 0x008f, + 0x0001, 0x0091, 0x0002, 0x0019, 0x031d, 0x032b, 0x0001, 0x0097, + 0x0002, 0x0019, 0x0339, 0x033d, 0x0004, 0x00a9, 0x00a3, 0x00a0, + // Entry 10540 - 1057F + 0x00a6, 0x0001, 0x0002, 0x0025, 0x0001, 0x0002, 0x0033, 0x0001, + 0x0002, 0x003c, 0x0001, 0x0002, 0x028b, 0x0004, 0x00ba, 0x00b4, + 0x00b1, 0x00b7, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, + 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0035, 0x00f3, + 0x0000, 0x0000, 0x00f8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x00fd, 0x0000, 0x0000, 0x0102, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0107, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 10580 - 105BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0112, 0x0001, 0x00f5, 0x0001, 0x0019, + 0x0341, 0x0001, 0x00fa, 0x0001, 0x0019, 0x0349, 0x0001, 0x00ff, + 0x0001, 0x0019, 0x034e, 0x0001, 0x0104, 0x0001, 0x0019, 0x0356, + 0x0002, 0x010a, 0x010d, 0x0001, 0x0019, 0x035f, 0x0003, 0x0019, + 0x0365, 0x036b, 0x0370, 0x0001, 0x0114, 0x0001, 0x0019, 0x0376, + 0x0003, 0x0004, 0x018e, 0x025a, 0x0008, 0x0000, 0x0000, 0x0000, + // Entry 105C0 - 105FF + 0x0000, 0x0000, 0x0000, 0x000d, 0x0038, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, 0x0027, 0x0004, 0x0024, + 0x001e, 0x001b, 0x0021, 0x0001, 0x0019, 0x0386, 0x0001, 0x0019, + 0x03bc, 0x0001, 0x0019, 0x03ed, 0x0001, 0x0000, 0x04af, 0x0004, + 0x0035, 0x002f, 0x002c, 0x0032, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0008, 0x0041, 0x00a6, 0x00fd, 0x0132, 0x0153, 0x015b, 0x016c, + 0x017d, 0x0002, 0x0044, 0x0075, 0x0003, 0x0048, 0x0057, 0x0066, + // Entry 10600 - 1063F + 0x000d, 0x0019, 0xffff, 0x0425, 0x0429, 0x042d, 0x0431, 0x0435, + 0x0439, 0x043d, 0x0441, 0x0445, 0x0449, 0x0450, 0x0457, 0x000d, + 0x0019, 0xffff, 0x0425, 0x0429, 0x042d, 0x045a, 0x0435, 0x0439, + 0x043d, 0x0441, 0x045c, 0x0449, 0x0450, 0x045e, 0x000d, 0x0019, + 0xffff, 0x0465, 0x047b, 0x049a, 0x04b9, 0x04d5, 0x04ee, 0x050a, + 0x0529, 0x054b, 0x0567, 0x0583, 0x05ae, 0x0003, 0x0079, 0x0088, + 0x0097, 0x000d, 0x000b, 0xffff, 0x005f, 0x006c, 0x0079, 0x0086, + 0x0093, 0x00a0, 0x00ad, 0x00ba, 0x00c7, 0x00d4, 0x00e4, 0x00f4, + // Entry 10640 - 1067F + 0x000d, 0x0019, 0xffff, 0x0425, 0x0429, 0x042d, 0x0431, 0x0435, + 0x0439, 0x043d, 0x0441, 0x0445, 0x0449, 0x0450, 0x045e, 0x000d, + 0x0019, 0xffff, 0x05d9, 0x05fe, 0x062c, 0x065a, 0x0682, 0x06aa, + 0x06d5, 0x0703, 0x0734, 0x075f, 0x078a, 0x07c4, 0x0002, 0x00a9, + 0x00d3, 0x0005, 0x00af, 0x00b8, 0x00ca, 0x0000, 0x00c1, 0x0007, + 0x0019, 0x07fe, 0x0808, 0x0815, 0x0822, 0x082f, 0x083c, 0x084c, + 0x0007, 0x000b, 0x04fc, 0x275c, 0x050d, 0x0517, 0x2766, 0x052b, + 0x04f5, 0x0007, 0x0019, 0x07fe, 0x0808, 0x0815, 0x0822, 0x082f, + // Entry 10680 - 106BF + 0x083c, 0x084c, 0x0007, 0x000b, 0x0554, 0x0570, 0x0595, 0x05b4, + 0x05d6, 0x05f5, 0x0538, 0x0005, 0x00d9, 0x00e2, 0x00f4, 0x0000, + 0x00eb, 0x0007, 0x0019, 0x07fe, 0x0808, 0x0815, 0x0822, 0x082f, + 0x083c, 0x084c, 0x0007, 0x000b, 0x04fc, 0x275c, 0x050d, 0x0517, + 0x2766, 0x052b, 0x04f5, 0x0007, 0x0019, 0x07fe, 0x0808, 0x0815, + 0x0822, 0x082f, 0x083c, 0x084c, 0x0007, 0x000b, 0x0554, 0x0570, + 0x0595, 0x05b4, 0x05d6, 0x05f5, 0x0538, 0x0002, 0x0100, 0x0119, + 0x0003, 0x0104, 0x010b, 0x0112, 0x0005, 0x0019, 0xffff, 0x0856, + // Entry 106C0 - 106FF + 0x0872, 0x088e, 0x08aa, 0x0005, 0x0019, 0xffff, 0x0425, 0x0429, + 0x042d, 0x0431, 0x0005, 0x0019, 0xffff, 0x08c6, 0x08ee, 0x091c, + 0x094a, 0x0003, 0x011d, 0x0124, 0x012b, 0x0005, 0x0019, 0xffff, + 0x0856, 0x0872, 0x088e, 0x08aa, 0x0005, 0x0019, 0xffff, 0x0425, + 0x0429, 0x042d, 0x0431, 0x0005, 0x0019, 0xffff, 0x08c6, 0x08ee, + 0x091c, 0x094a, 0x0001, 0x0134, 0x0003, 0x0138, 0x0141, 0x014a, + 0x0002, 0x013b, 0x013e, 0x0001, 0x0019, 0x0975, 0x0001, 0x0019, + 0x0985, 0x0002, 0x0144, 0x0147, 0x0001, 0x0019, 0x0975, 0x0001, + // Entry 10700 - 1073F + 0x0019, 0x0985, 0x0002, 0x014d, 0x0150, 0x0001, 0x0019, 0x0975, + 0x0001, 0x0019, 0x0985, 0x0001, 0x0155, 0x0001, 0x0157, 0x0002, + 0x0000, 0x04f5, 0x04f9, 0x0004, 0x0169, 0x0163, 0x0160, 0x0166, + 0x0001, 0x0019, 0x0998, 0x0001, 0x0019, 0x09cc, 0x0001, 0x0019, + 0x09fb, 0x0001, 0x0000, 0x051c, 0x0004, 0x017a, 0x0174, 0x0171, + 0x0177, 0x0001, 0x0019, 0x0a31, 0x0001, 0x0019, 0x0a69, 0x0001, + 0x0019, 0x0a9e, 0x0001, 0x0019, 0x0abd, 0x0004, 0x018b, 0x0185, + 0x0182, 0x0188, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + // Entry 10740 - 1077F + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0040, 0x01cf, + 0x0000, 0x0000, 0x01d4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x01e4, 0x0000, 0x0000, 0x01f4, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0204, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x021b, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0220, 0x0000, 0x0225, 0x0000, 0x0000, + // Entry 10780 - 107BF + 0x0235, 0x0000, 0x0000, 0x0245, 0x0000, 0x0000, 0x0255, 0x0001, + 0x01d1, 0x0001, 0x0019, 0x0aed, 0x0003, 0x01d8, 0x0000, 0x01db, + 0x0001, 0x0019, 0x0b06, 0x0002, 0x01de, 0x01e1, 0x0001, 0x0019, + 0x0b0d, 0x0001, 0x0019, 0x0b34, 0x0003, 0x01e8, 0x0000, 0x01eb, + 0x0001, 0x0019, 0x0b61, 0x0002, 0x01ee, 0x01f1, 0x0001, 0x0019, + 0x0b71, 0x0001, 0x0019, 0x0b8c, 0x0003, 0x01f8, 0x0000, 0x01fb, + 0x0001, 0x0019, 0x0bad, 0x0002, 0x01fe, 0x0201, 0x0001, 0x0019, + 0x0bc6, 0x0001, 0x0019, 0x0bf0, 0x0003, 0x0208, 0x020b, 0x0212, + // Entry 107C0 - 107FF + 0x0001, 0x0019, 0x0c20, 0x0005, 0x0019, 0x0c3d, 0x0c4a, 0x0c5d, + 0x0c2d, 0x0c70, 0x0002, 0x0215, 0x0218, 0x0001, 0x0019, 0x0c86, + 0x0001, 0x0019, 0x0ca4, 0x0001, 0x021d, 0x0001, 0x0019, 0x0cc8, + 0x0001, 0x0222, 0x0001, 0x0019, 0x0cf6, 0x0003, 0x0229, 0x0000, + 0x022c, 0x0001, 0x0019, 0x0d16, 0x0002, 0x022f, 0x0232, 0x0001, + 0x0019, 0x0d29, 0x0001, 0x0019, 0x0d4d, 0x0003, 0x0239, 0x0000, + 0x023c, 0x0001, 0x0019, 0x0d77, 0x0002, 0x023f, 0x0242, 0x0001, + 0x0019, 0x0d87, 0x0001, 0x0019, 0x0da8, 0x0003, 0x0249, 0x0000, + // Entry 10800 - 1083F + 0x024c, 0x0001, 0x0019, 0x0dcf, 0x0002, 0x024f, 0x0252, 0x0001, + 0x0019, 0x0de5, 0x0001, 0x0019, 0x0e06, 0x0001, 0x0257, 0x0001, + 0x0019, 0x0e2d, 0x0004, 0x025f, 0x0264, 0x0267, 0x0272, 0x0003, + 0x0000, 0x1dc7, 0x2370, 0x2392, 0x0001, 0x0019, 0x0e43, 0x0002, + 0x0000, 0x026a, 0x0002, 0x0000, 0x026d, 0x0003, 0x0019, 0xffff, + 0x0e5f, 0x0ea8, 0x0002, 0x043b, 0x0275, 0x0003, 0x030f, 0x03a5, + 0x0279, 0x0094, 0x0019, 0x0eee, 0x0f28, 0x0f77, 0x0fc0, 0x1058, + 0x114b, 0x1202, 0x12f2, 0x1436, 0x156b, 0x16a0, 0xffff, 0xffff, + // Entry 10840 - 1087F + 0x17bd, 0x1886, 0x1979, 0x1a87, 0x1b56, 0x1c55, 0x1db1, 0x1f28, + 0x2090, 0x21b9, 0x228e, 0x2345, 0x23d7, 0x2408, 0x2473, 0xffff, + 0x2536, 0xffff, 0xffff, 0x25e1, 0x2683, 0xffff, 0x2703, 0xffff, + 0x278f, 0xffff, 0x285e, 0xffff, 0xffff, 0xffff, 0x292d, 0x29ef, + 0x2a6f, 0x2b8f, 0xffff, 0x2ca6, 0x2dc3, 0xffff, 0x2e91, 0xffff, + 0x2ece, 0xffff, 0x2f27, 0xffff, 0x2fa1, 0x3042, 0x3162, 0x3236, + 0x325b, 0x32cd, 0xffff, 0xffff, 0x3391, 0x33b9, 0x3405, 0x3442, + 0x34a3, 0x34fe, 0x3584, 0x362f, 0x36e0, 0x378b, 0xffff, 0xffff, + // Entry 10880 - 108BF + 0xffff, 0x3830, 0xffff, 0x38f3, 0xffff, 0xffff, 0xffff, 0xffff, + 0x39cb, 0xffff, 0x3a57, 0xffff, 0xffff, 0x3ab6, 0xffff, 0xffff, + 0xffff, 0xffff, 0x3b70, 0xffff, 0xffff, 0x3bf0, 0xffff, 0x3c52, + 0x3d39, 0xffff, 0xffff, 0x3e49, 0x3f70, 0x404e, 0x4102, 0xffff, + 0xffff, 0x41ce, 0x4288, 0xffff, 0xffff, 0x434e, 0xffff, 0xffff, + 0xffff, 0x4422, 0xffff, 0x4487, 0xffff, 0xffff, 0x450d, 0xffff, + 0xffff, 0xffff, 0x4538, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x45a6, 0xffff, 0xffff, 0x4650, + // Entry 108C0 - 108FF + 0x46d0, 0x47c3, 0xffff, 0xffff, 0xffff, 0x489b, 0x496a, 0x0094, + 0x0019, 0xffff, 0xffff, 0xffff, 0xffff, 0x100c, 0x1120, 0x11d1, + 0x1294, 0x13de, 0x1516, 0x1645, 0xffff, 0xffff, 0x1786, 0x184f, + 0x1924, 0x1a53, 0x1b1f, 0x1bf4, 0x1d47, 0x1ebb, 0x2032, 0x217c, + 0x2263, 0x2314, 0xffff, 0xffff, 0x243f, 0xffff, 0x250b, 0xffff, + 0xffff, 0x25bc, 0x265b, 0xffff, 0xffff, 0xffff, 0x2755, 0xffff, + 0x2833, 0xffff, 0xffff, 0xffff, 0x28e4, 0xffff, 0x2a1d, 0x2b43, + 0xffff, 0x2c57, 0x2d74, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 10900 - 1093F + 0x2f02, 0xffff, 0xffff, 0x2ff3, 0x3110, 0xffff, 0xffff, 0x3283, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x355c, 0x3604, 0x36b5, 0x3766, 0xffff, 0xffff, 0xffff, 0x3805, + 0xffff, 0x38b6, 0xffff, 0xffff, 0xffff, 0xffff, 0x399d, 0xffff, + 0xffff, 0xffff, 0xffff, 0x3a85, 0xffff, 0xffff, 0xffff, 0xffff, + 0x3b48, 0xffff, 0xffff, 0xffff, 0xffff, 0x3c18, 0x3cf6, 0xffff, + 0xffff, 0x3def, 0x3f2d, 0x4026, 0x40ce, 0xffff, 0xffff, 0x419a, + 0x4266, 0xffff, 0xffff, 0x42fc, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 10940 - 1097F + 0xffff, 0x445c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x4569, 0xffff, 0xffff, 0xffff, 0x468d, 0x4786, + 0xffff, 0xffff, 0xffff, 0x486d, 0x4927, 0x0094, 0x0019, 0xffff, + 0xffff, 0xffff, 0xffff, 0x10b9, 0x118b, 0x1248, 0x1365, 0x14a3, + 0x15d5, 0x1710, 0xffff, 0xffff, 0x1809, 0x18d2, 0x19e3, 0x1ad0, + 0x1ba2, 0x1ccb, 0x1e33, 0x1faa, 0x2103, 0x220b, 0x22ce, 0x238b, + 0xffff, 0xffff, 0x24bc, 0xffff, 0x2576, 0xffff, 0xffff, 0x261b, + // Entry 10980 - 109BF + 0x26c0, 0xffff, 0xffff, 0xffff, 0x27de, 0xffff, 0x289e, 0xffff, + 0xffff, 0xffff, 0x298b, 0xffff, 0x2ad6, 0x2bf0, 0xffff, 0x2d0a, + 0x2e27, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2f61, 0xffff, + 0xffff, 0x30a6, 0x31c9, 0xffff, 0xffff, 0x332c, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x35c1, 0x366f, + 0x3720, 0x37c5, 0xffff, 0xffff, 0xffff, 0x3870, 0xffff, 0x3945, + 0xffff, 0xffff, 0xffff, 0xffff, 0x3a0e, 0xffff, 0xffff, 0xffff, + 0xffff, 0x3afc, 0xffff, 0xffff, 0xffff, 0xffff, 0x3bad, 0xffff, + // Entry 109C0 - 109FF + 0xffff, 0xffff, 0xffff, 0x3ca1, 0x3d91, 0xffff, 0xffff, 0x3eb8, + 0x3fc8, 0x408b, 0x414b, 0xffff, 0xffff, 0x4217, 0x42bf, 0xffff, + 0xffff, 0x43b5, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x44c7, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x45f8, 0xffff, 0xffff, 0xffff, 0x4728, 0x4815, 0xffff, 0xffff, + 0xffff, 0x48de, 0x49c2, 0x0003, 0x0000, 0x0000, 0x043f, 0x001a, + 0x001a, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 10A00 - 10A3F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0000, 0x0002, 0x0003, 0x00e9, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, + 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, 0x0006, 0x000d, + 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0002, + 0x0587, 0x0008, 0x002f, 0x0066, 0x008b, 0x009f, 0x00b7, 0x00c7, + // Entry 10A40 - 10A7F + 0x00d8, 0x0000, 0x0002, 0x0032, 0x0054, 0x0003, 0x0036, 0x0000, + 0x0045, 0x000d, 0x001a, 0xffff, 0x0003, 0x0007, 0x000b, 0x000f, + 0x0013, 0x0017, 0x001b, 0x001f, 0x0023, 0x0027, 0x002b, 0x002f, + 0x000d, 0x001a, 0xffff, 0x0033, 0x0042, 0x0052, 0x0064, 0x0072, + 0x0082, 0x0096, 0x00a9, 0x00b9, 0x00c8, 0x00d8, 0x00f1, 0x0002, + 0x0000, 0x0057, 0x000d, 0x0000, 0xffff, 0x2357, 0x214f, 0x214f, + 0x214f, 0x2289, 0x2289, 0x2357, 0x214f, 0x214f, 0x204d, 0x204d, + 0x204d, 0x0002, 0x0069, 0x007f, 0x0003, 0x006d, 0x0000, 0x0076, + // Entry 10A80 - 10ABF + 0x0007, 0x001a, 0x010c, 0x0110, 0x0114, 0x0118, 0x011c, 0x0120, + 0x0124, 0x0007, 0x001a, 0x0128, 0x012f, 0x0139, 0x0142, 0x014c, + 0x0155, 0x015c, 0x0002, 0x0000, 0x0082, 0x0007, 0x0000, 0x214f, + 0x236c, 0x236c, 0x236c, 0x2366, 0x2357, 0x236c, 0x0001, 0x008d, + 0x0003, 0x0091, 0x0000, 0x0098, 0x0005, 0x0000, 0xffff, 0x1f17, + 0x1f1a, 0x1f1d, 0x1f20, 0x0005, 0x001a, 0xffff, 0x0168, 0x0177, + 0x0188, 0x0199, 0x0001, 0x00a1, 0x0003, 0x00a5, 0x0000, 0x00ae, + 0x0002, 0x00a8, 0x00ab, 0x0001, 0x001a, 0x01a7, 0x0001, 0x001a, + // Entry 10AC0 - 10AFF + 0x01aa, 0x0002, 0x00b1, 0x00b4, 0x0001, 0x001a, 0x01a7, 0x0001, + 0x001a, 0x01aa, 0x0003, 0x00c1, 0x0000, 0x00bb, 0x0001, 0x00bd, + 0x0002, 0x001a, 0x01ad, 0x01bd, 0x0001, 0x00c3, 0x0002, 0x001a, + 0x01ce, 0x01d1, 0x0004, 0x00d5, 0x00cf, 0x00cc, 0x00d2, 0x0001, + 0x0006, 0x015b, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, + 0x0001, 0x0002, 0x08e8, 0x0004, 0x00e6, 0x00e0, 0x00dd, 0x00e3, + 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, + 0x053d, 0x0001, 0x0000, 0x0546, 0x0040, 0x012a, 0x0000, 0x0000, + // Entry 10B00 - 10B3F + 0x012f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0134, 0x0000, + 0x0000, 0x0139, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x013e, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0149, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x014e, 0x0000, 0x0000, 0x0153, 0x0000, + 0x0000, 0x0158, 0x0000, 0x0000, 0x015d, 0x0001, 0x012c, 0x0001, + // Entry 10B40 - 10B7F + 0x001a, 0x01d4, 0x0001, 0x0131, 0x0001, 0x0006, 0x016f, 0x0001, + 0x0136, 0x0001, 0x001a, 0x01db, 0x0001, 0x013b, 0x0001, 0x001a, + 0x0128, 0x0002, 0x0141, 0x0144, 0x0001, 0x001a, 0x01e1, 0x0003, + 0x001a, 0x01eb, 0x01f2, 0x01fd, 0x0001, 0x014b, 0x0001, 0x001a, + 0x0205, 0x0001, 0x0150, 0x0001, 0x001a, 0x021b, 0x0001, 0x0155, + 0x0001, 0x001a, 0x0221, 0x0001, 0x015a, 0x0001, 0x0009, 0x00ba, + 0x0001, 0x015f, 0x0001, 0x001a, 0x022a, 0x0003, 0x0004, 0x04d1, + 0x065a, 0x0012, 0x0017, 0x0020, 0x007c, 0x0000, 0x00c9, 0x0000, + // Entry 10B80 - 10BBF + 0x0116, 0x0141, 0x0363, 0x03bb, 0x0404, 0x0000, 0x0000, 0x0000, + 0x0000, 0x044d, 0x0467, 0x04b0, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x9006, 0x0006, 0x0027, 0x0000, + 0x0000, 0x0000, 0x0000, 0x006e, 0x0002, 0x002a, 0x004c, 0x0003, + 0x002e, 0x0000, 0x003d, 0x000d, 0x001a, 0xffff, 0x0232, 0x0236, + 0x023a, 0x023e, 0x0243, 0x0247, 0x024b, 0x024f, 0x0253, 0x0257, + 0x025b, 0x025f, 0x000d, 0x001a, 0xffff, 0x0263, 0x0269, 0x0270, + 0x0277, 0x0281, 0x0287, 0x028c, 0x0295, 0x02a0, 0x02aa, 0x02af, + // Entry 10BC0 - 10BFF + 0x02bd, 0x0003, 0x0050, 0x0000, 0x005f, 0x000d, 0x001a, 0xffff, + 0x0232, 0x0236, 0x023a, 0x023e, 0x0243, 0x0247, 0x024b, 0x024f, + 0x0253, 0x02aa, 0x025b, 0x025f, 0x000d, 0x001a, 0xffff, 0x0263, + 0x0269, 0x0270, 0x0277, 0x0281, 0x0287, 0x028c, 0x0295, 0x02a0, + 0x02aa, 0x02af, 0x02bd, 0x0004, 0x0000, 0x0076, 0x0073, 0x0079, + 0x0001, 0x001a, 0x02c3, 0x0001, 0x001a, 0x02d9, 0x0001, 0x001a, + 0x02e8, 0x0001, 0x007e, 0x0002, 0x0081, 0x00a5, 0x0003, 0x0085, + 0x0000, 0x0095, 0x000e, 0x001a, 0xffff, 0x0232, 0x0236, 0x023a, + // Entry 10C00 - 10C3F + 0x023e, 0x0243, 0x0247, 0x024b, 0x024f, 0x0253, 0x0257, 0x025b, + 0x025f, 0x02f6, 0x000e, 0x001a, 0xffff, 0x0263, 0x0269, 0x0270, + 0x0277, 0x0281, 0x0287, 0x028c, 0x0295, 0x02a0, 0x02aa, 0x02af, + 0x02bd, 0x02fa, 0x0003, 0x00a9, 0x0000, 0x00b9, 0x000e, 0x001a, + 0xffff, 0x0232, 0x0236, 0x023a, 0x023e, 0x0243, 0x0247, 0x024b, + 0x024f, 0x0253, 0x0257, 0x025b, 0x025f, 0x02f6, 0x000e, 0x001a, + 0xffff, 0x0263, 0x0269, 0x0270, 0x0277, 0x0281, 0x0287, 0x028c, + 0x0295, 0x02a0, 0x02aa, 0x02af, 0x02bd, 0x02fa, 0x0001, 0x00cb, + // Entry 10C40 - 10C7F + 0x0002, 0x00ce, 0x00f2, 0x0003, 0x00d2, 0x0000, 0x00e2, 0x000e, + 0x001a, 0xffff, 0x0263, 0x0269, 0x0270, 0x0277, 0x0281, 0x0287, + 0x028c, 0x0295, 0x02a0, 0x02aa, 0x02af, 0x02bd, 0x02fa, 0x000e, + 0x001a, 0xffff, 0x0263, 0x0269, 0x0270, 0x0277, 0x0281, 0x0287, + 0x028c, 0x0295, 0x02a0, 0x02aa, 0x02af, 0x02bd, 0x02fa, 0x0003, + 0x00f6, 0x0000, 0x0106, 0x000e, 0x001a, 0xffff, 0x0232, 0x0236, + 0x023a, 0x023e, 0x0243, 0x0247, 0x024b, 0x024f, 0x0253, 0x0257, + 0x025b, 0x025f, 0x0301, 0x000e, 0x001a, 0xffff, 0x0263, 0x0269, + // Entry 10C80 - 10CBF + 0x0270, 0x0306, 0x0281, 0x0287, 0x028c, 0x0295, 0x02a0, 0x02aa, + 0x02af, 0x02bd, 0x02fa, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x011f, 0x0000, 0x0130, 0x0004, 0x012d, 0x0127, 0x0124, + 0x012a, 0x0001, 0x001a, 0x030e, 0x0001, 0x001a, 0x0325, 0x0001, + 0x001a, 0x0336, 0x0001, 0x0013, 0x0203, 0x0004, 0x013e, 0x0138, + 0x0135, 0x013b, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x014a, + 0x01af, 0x0206, 0x0234, 0x0311, 0x0330, 0x0341, 0x0352, 0x0002, + // Entry 10CC0 - 10CFF + 0x014d, 0x017e, 0x0003, 0x0151, 0x0160, 0x016f, 0x000d, 0x001a, + 0xffff, 0x0232, 0x0236, 0x023a, 0x023e, 0x0243, 0x0247, 0x024b, + 0x024f, 0x0253, 0x0257, 0x025b, 0x025f, 0x000d, 0x0000, 0xffff, + 0x2008, 0x2008, 0x2000, 0x1f9c, 0x2008, 0x1f9a, 0x2002, 0x2008, + 0x1f9c, 0x1ffe, 0x1f9c, 0x2008, 0x000d, 0x001a, 0xffff, 0x0263, + 0x0269, 0x0270, 0x0347, 0x0350, 0x0287, 0x028c, 0x0295, 0x02a0, + 0x02aa, 0x02af, 0x02bd, 0x0003, 0x0182, 0x0191, 0x01a0, 0x000d, + 0x001a, 0xffff, 0x0232, 0x0236, 0x023a, 0x023e, 0x0243, 0x0247, + // Entry 10D00 - 10D3F + 0x024b, 0x024f, 0x0253, 0x0257, 0x025b, 0x025f, 0x000d, 0x0000, + 0xffff, 0x2008, 0x2008, 0x2000, 0x1f9c, 0x2008, 0x1f9a, 0x2002, + 0x2008, 0x1f9c, 0x1ffe, 0x1f9c, 0x2008, 0x000d, 0x001a, 0xffff, + 0x0263, 0x0269, 0x0270, 0x0347, 0x0350, 0x0287, 0x028c, 0x0295, + 0x02a0, 0x02aa, 0x02af, 0x02bd, 0x0002, 0x01b2, 0x01dc, 0x0005, + 0x01b8, 0x01c1, 0x01d3, 0x0000, 0x01ca, 0x0007, 0x001a, 0x0355, + 0x035a, 0x035e, 0x0362, 0x0367, 0x036b, 0x0370, 0x0007, 0x0000, + 0x1ffe, 0x2008, 0x213d, 0x1ffe, 0x23b1, 0x2006, 0x1f9a, 0x0007, + // Entry 10D40 - 10D7F + 0x001a, 0x0355, 0x035a, 0x035e, 0x0362, 0x0367, 0x036b, 0x0370, + 0x0007, 0x001a, 0x0374, 0x037d, 0x0384, 0x038b, 0x0391, 0x0399, + 0x039f, 0x0005, 0x01e2, 0x01eb, 0x01fd, 0x0000, 0x01f4, 0x0007, + 0x001a, 0x0355, 0x035a, 0x035e, 0x0362, 0x0367, 0x036b, 0x0370, + 0x0007, 0x0000, 0x1ffe, 0x2008, 0x213d, 0x1ffe, 0x23b1, 0x2006, + 0x1f9a, 0x0007, 0x001a, 0x0355, 0x035a, 0x035e, 0x0362, 0x0367, + 0x036b, 0x0370, 0x0007, 0x001a, 0x0374, 0x037d, 0x0384, 0x038b, + 0x0391, 0x0399, 0x039f, 0x0002, 0x0209, 0x0222, 0x0003, 0x020d, + // Entry 10D80 - 10DBF + 0x0214, 0x021b, 0x0005, 0x001a, 0xffff, 0x03a8, 0x03ab, 0x03ae, + 0x03b1, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x0005, 0x001a, 0xffff, 0x03b4, 0x03c2, 0x03cf, 0x03df, 0x0003, + 0x0226, 0x0000, 0x022d, 0x0005, 0x001a, 0xffff, 0x03a8, 0x03ab, + 0x03ae, 0x03b1, 0x0005, 0x001a, 0xffff, 0x03b4, 0x03c2, 0x03cf, + 0x03df, 0x0002, 0x0237, 0x02a4, 0x0003, 0x023b, 0x025e, 0x0281, + 0x000a, 0x0246, 0x0249, 0x0000, 0x024c, 0x0252, 0x0258, 0x025b, + 0x0000, 0x024f, 0x0255, 0x0001, 0x001a, 0x03ec, 0x0001, 0x001a, + // Entry 10DC0 - 10DFF + 0x03f1, 0x0001, 0x001a, 0x03f9, 0x0001, 0x001a, 0x03ec, 0x0001, + 0x001a, 0x0401, 0x0001, 0x001a, 0x03f1, 0x0001, 0x001a, 0x0407, + 0x0001, 0x001a, 0x040d, 0x000a, 0x0269, 0x026c, 0x0000, 0x026f, + 0x0275, 0x027b, 0x027e, 0x0000, 0x0272, 0x0278, 0x0001, 0x0000, + 0x213f, 0x0001, 0x001a, 0x0411, 0x0001, 0x001a, 0x03f9, 0x0001, + 0x001a, 0x03ec, 0x0001, 0x001a, 0x0401, 0x0001, 0x001a, 0x03f1, + 0x0001, 0x001a, 0x0407, 0x0001, 0x001a, 0x040d, 0x000a, 0x028c, + 0x028f, 0x0000, 0x0292, 0x0298, 0x029e, 0x02a1, 0x0000, 0x0295, + // Entry 10E00 - 10E3F + 0x029b, 0x0001, 0x001a, 0x03ec, 0x0001, 0x001a, 0x03f1, 0x0001, + 0x001a, 0x03f9, 0x0001, 0x001a, 0x03ec, 0x0001, 0x001a, 0x0401, + 0x0001, 0x001a, 0x03f1, 0x0001, 0x001a, 0x0407, 0x0001, 0x001a, + 0x040d, 0x0003, 0x02a8, 0x02cb, 0x02ee, 0x000a, 0x02b3, 0x02b6, + 0x0000, 0x02b9, 0x02bf, 0x02c5, 0x02c8, 0x0000, 0x02bc, 0x02c2, + 0x0001, 0x001a, 0x03ec, 0x0001, 0x001a, 0x03f1, 0x0001, 0x001a, + 0x03f9, 0x0001, 0x001a, 0x03ec, 0x0001, 0x001a, 0x0401, 0x0001, + 0x001a, 0x03f1, 0x0001, 0x001a, 0x0407, 0x0001, 0x001a, 0x040d, + // Entry 10E40 - 10E7F + 0x000a, 0x02d6, 0x02d9, 0x0000, 0x02dc, 0x02e2, 0x02e8, 0x02eb, + 0x0000, 0x02df, 0x02e5, 0x0001, 0x0000, 0x213f, 0x0001, 0x001a, + 0x0411, 0x0001, 0x001a, 0x03f9, 0x0001, 0x001a, 0x03ec, 0x0001, + 0x001a, 0x0401, 0x0001, 0x001a, 0x03f1, 0x0001, 0x001a, 0x0407, + 0x0001, 0x001a, 0x040d, 0x000a, 0x02f9, 0x02fc, 0x0000, 0x02ff, + 0x0305, 0x030b, 0x030e, 0x0000, 0x0302, 0x0308, 0x0001, 0x001a, + 0x03ec, 0x0001, 0x001a, 0x03f1, 0x0001, 0x001a, 0x03f9, 0x0001, + 0x001a, 0x03ec, 0x0001, 0x001a, 0x0401, 0x0001, 0x001a, 0x03f1, + // Entry 10E80 - 10EBF + 0x0001, 0x001a, 0x0407, 0x0001, 0x001a, 0x040d, 0x0003, 0x031f, + 0x032a, 0x0315, 0x0002, 0x0318, 0x031c, 0x0002, 0x001a, 0x0414, + 0x0425, 0x0001, 0x001a, 0x0421, 0x0002, 0x0322, 0x0326, 0x0002, + 0x001a, 0x0431, 0x0435, 0x0002, 0x001a, 0x0421, 0x0439, 0x0001, + 0x032c, 0x0002, 0x001a, 0x043d, 0x0435, 0x0004, 0x033e, 0x0338, + 0x0335, 0x033b, 0x0001, 0x001a, 0x0440, 0x0001, 0x001a, 0x0455, + 0x0001, 0x001a, 0x0464, 0x0001, 0x000c, 0x03ec, 0x0004, 0x034f, + 0x0349, 0x0346, 0x034c, 0x0001, 0x001a, 0x0473, 0x0001, 0x001a, + // Entry 10EC0 - 10EFF + 0x0487, 0x0001, 0x001a, 0x0498, 0x0001, 0x001a, 0x04a7, 0x0004, + 0x0360, 0x035a, 0x0357, 0x035d, 0x0001, 0x001a, 0x04b3, 0x0001, + 0x001a, 0x04b3, 0x0001, 0x001a, 0x04b3, 0x0001, 0x001a, 0x04b3, + 0x0005, 0x0369, 0x0000, 0x0000, 0x0000, 0x03b4, 0x0002, 0x036c, + 0x0390, 0x0003, 0x0370, 0x0000, 0x0380, 0x000e, 0x001a, 0x028c, + 0x0263, 0x0269, 0x0270, 0x0277, 0x0281, 0x0287, 0x028c, 0x0295, + 0x02a0, 0x02aa, 0x02af, 0x02bd, 0x02fa, 0x000e, 0x001a, 0x028c, + 0x0263, 0x0269, 0x0270, 0x0277, 0x0281, 0x0287, 0x028c, 0x0295, + // Entry 10F00 - 10F3F + 0x02a0, 0x02aa, 0x02af, 0x02bd, 0x02fa, 0x0003, 0x0394, 0x0000, + 0x03a4, 0x000e, 0x001a, 0x024b, 0x0232, 0x0236, 0x023a, 0x023e, + 0x0243, 0x0247, 0x024b, 0x024f, 0x0253, 0x0257, 0x025b, 0x025f, + 0x02f6, 0x000e, 0x001a, 0x028c, 0x0263, 0x0269, 0x0270, 0x0277, + 0x0281, 0x0287, 0x028c, 0x04bb, 0x02a0, 0x02aa, 0x02af, 0x02bd, + 0x02fa, 0x0001, 0x03b6, 0x0001, 0x03b8, 0x0001, 0x001a, 0x03ec, + 0x0001, 0x03bd, 0x0002, 0x03c0, 0x03e2, 0x0003, 0x03c4, 0x0000, + 0x03d3, 0x000d, 0x001a, 0xffff, 0x0232, 0x0236, 0x023a, 0x023e, + // Entry 10F40 - 10F7F + 0x0243, 0x0247, 0x024b, 0x024f, 0x0253, 0x0257, 0x025b, 0x025f, + 0x000d, 0x001a, 0xffff, 0x0263, 0x0269, 0x0270, 0x023e, 0x0281, + 0x0287, 0x028c, 0x0295, 0x02a0, 0x02aa, 0x02af, 0x02bd, 0x0003, + 0x03e6, 0x0000, 0x03f5, 0x000d, 0x001a, 0xffff, 0x0232, 0x0236, + 0x023a, 0x023e, 0x0243, 0x0247, 0x024b, 0x024f, 0x0253, 0x0257, + 0x025b, 0x025f, 0x000d, 0x001a, 0xffff, 0x0263, 0x0269, 0x0270, + 0x0277, 0x0281, 0x0287, 0x028c, 0x0295, 0x02a0, 0x02aa, 0x02af, + 0x02bd, 0x0001, 0x0406, 0x0002, 0x0409, 0x042b, 0x0003, 0x040d, + // Entry 10F80 - 10FBF + 0x0000, 0x041c, 0x000d, 0x001a, 0xffff, 0x0232, 0x0236, 0x023a, + 0x023e, 0x0243, 0x0247, 0x024b, 0x024f, 0x0253, 0x0257, 0x025b, + 0x025f, 0x000d, 0x001a, 0xffff, 0x0263, 0x0269, 0x0270, 0x0277, + 0x0281, 0x0287, 0x028c, 0x0295, 0x02a0, 0x02aa, 0x02af, 0x02bd, + 0x0003, 0x042f, 0x0000, 0x043e, 0x000d, 0x001a, 0xffff, 0x0232, + 0x0236, 0x023a, 0x023e, 0x0243, 0x0247, 0x024b, 0x024f, 0x0253, + 0x0257, 0x025b, 0x025f, 0x000d, 0x001a, 0xffff, 0x0263, 0x0269, + 0x0270, 0x0277, 0x0281, 0x0287, 0x028c, 0x0295, 0x02a0, 0x02aa, + // Entry 10FC0 - 10FFF + 0x02af, 0x02bd, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0456, 0x0000, 0x9006, 0x0004, 0x0464, 0x045e, 0x045b, 0x0461, + 0x0001, 0x001a, 0x04c5, 0x0001, 0x001a, 0x04de, 0x0001, 0x001a, + 0x04f0, 0x0001, 0x001a, 0x0501, 0x0001, 0x0469, 0x0002, 0x046c, + 0x048e, 0x0003, 0x0470, 0x0000, 0x047f, 0x000d, 0x001a, 0xffff, + 0x0232, 0x0236, 0x023a, 0x023e, 0x0243, 0x0247, 0x024b, 0x024f, + 0x0253, 0x0257, 0x025b, 0x025f, 0x000d, 0x001a, 0xffff, 0x0263, + 0x0269, 0x0270, 0x0277, 0x0281, 0x0287, 0x028c, 0x0295, 0x02a0, + // Entry 11000 - 1103F + 0x02aa, 0x02af, 0x02bd, 0x0003, 0x0492, 0x0000, 0x04a1, 0x000d, + 0x001a, 0xffff, 0x0232, 0x0236, 0x023a, 0x023e, 0x0243, 0x0247, + 0x024b, 0x024f, 0x0253, 0x0257, 0x025b, 0x025f, 0x000d, 0x001a, + 0xffff, 0x0263, 0x0269, 0x0270, 0x0277, 0x0281, 0x0287, 0x028c, + 0x0295, 0x02a0, 0x02aa, 0x02af, 0x02bd, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x04b9, 0x04c0, 0x0000, 0x9006, 0x0001, 0x04bb, + 0x0001, 0x04bd, 0x0001, 0x001a, 0x0510, 0x0004, 0x04ce, 0x04c8, + 0x04c5, 0x04cb, 0x0001, 0x001a, 0x04c5, 0x0001, 0x001a, 0x04de, + // Entry 11040 - 1107F + 0x0001, 0x001a, 0x04f0, 0x0001, 0x001a, 0x051c, 0x0040, 0x0512, + 0x0000, 0x0000, 0x0517, 0x052e, 0x0540, 0x0552, 0x0564, 0x0576, + 0x0588, 0x059f, 0x05a4, 0x05a9, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x05c0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x05d9, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x05de, 0x0000, 0x0000, + 0x05e6, 0x0000, 0x0000, 0x05ee, 0x0000, 0x0000, 0x05f6, 0x0000, + 0x0000, 0x05fe, 0x0000, 0x0000, 0x0606, 0x0000, 0x0000, 0x060e, + 0x0000, 0x0000, 0x0000, 0x0616, 0x0000, 0x061b, 0x0000, 0x0000, + // Entry 11080 - 110BF + 0x062d, 0x0000, 0x0000, 0x063f, 0x0000, 0x0000, 0x0655, 0x0001, + 0x0514, 0x0001, 0x001a, 0x052a, 0x0003, 0x051b, 0x051e, 0x0523, + 0x0001, 0x001a, 0x0531, 0x0003, 0x001a, 0x0535, 0x0542, 0x054a, + 0x0002, 0x0526, 0x052a, 0x0002, 0x001a, 0x0559, 0x0559, 0x0002, + 0x001a, 0x0578, 0x0567, 0x0003, 0x0532, 0x0000, 0x0535, 0x0001, + 0x001a, 0x0531, 0x0002, 0x0538, 0x053c, 0x0002, 0x001a, 0x0559, + 0x0559, 0x0002, 0x001a, 0x058c, 0x058c, 0x0003, 0x0544, 0x0000, + 0x0547, 0x0001, 0x001a, 0x0531, 0x0002, 0x054a, 0x054e, 0x0002, + // Entry 110C0 - 110FF + 0x001a, 0x05a3, 0x05a3, 0x0002, 0x001a, 0x05bb, 0x05bb, 0x0003, + 0x0556, 0x0000, 0x0559, 0x0001, 0x001a, 0x05cf, 0x0002, 0x055c, + 0x0560, 0x0002, 0x001a, 0x05d5, 0x05d5, 0x0002, 0x001a, 0x05f0, + 0x05f0, 0x0003, 0x0568, 0x0000, 0x056b, 0x0001, 0x001a, 0x05cf, + 0x0002, 0x056e, 0x0572, 0x0002, 0x001a, 0x05d5, 0x05d5, 0x0002, + 0x001a, 0x05f0, 0x05f0, 0x0003, 0x057a, 0x0000, 0x057d, 0x0001, + 0x001a, 0x05cf, 0x0002, 0x0580, 0x0584, 0x0002, 0x001a, 0x05d5, + 0x0606, 0x0002, 0x001a, 0x05f0, 0x05f0, 0x0003, 0x058c, 0x058f, + // Entry 11100 - 1113F + 0x0594, 0x0001, 0x001a, 0x0620, 0x0003, 0x001a, 0x0627, 0x0637, + 0x0642, 0x0002, 0x0597, 0x059b, 0x0002, 0x001a, 0x0665, 0x0654, + 0x0002, 0x001a, 0x068d, 0x0679, 0x0001, 0x05a1, 0x0001, 0x001a, + 0x0620, 0x0001, 0x05a6, 0x0001, 0x001a, 0x0620, 0x0003, 0x05ad, + 0x05b0, 0x05b5, 0x0001, 0x001a, 0x06a4, 0x0003, 0x001a, 0x06b3, + 0x06c5, 0x06d2, 0x0002, 0x05b8, 0x05bc, 0x0002, 0x001a, 0x06f9, + 0x06e6, 0x0002, 0x001a, 0x0725, 0x070f, 0x0003, 0x05c4, 0x05c7, + 0x05ce, 0x0001, 0x001a, 0x073e, 0x0005, 0x001a, 0x0756, 0x0765, + // Entry 11140 - 1117F + 0x076a, 0x0745, 0x077a, 0x0002, 0x05d1, 0x05d5, 0x0002, 0x001a, + 0x079d, 0x078c, 0x0002, 0x001a, 0x07c5, 0x07b1, 0x0001, 0x05db, + 0x0001, 0x001a, 0x07dc, 0x0002, 0x0000, 0x05e1, 0x0003, 0x001a, + 0x07ef, 0x0804, 0x0815, 0x0002, 0x0000, 0x05e9, 0x0003, 0x001a, + 0x082c, 0x083c, 0x0847, 0x0002, 0x0000, 0x05f1, 0x0003, 0x001a, + 0x0859, 0x0869, 0x0874, 0x0002, 0x0000, 0x05f9, 0x0003, 0x001a, + 0x0886, 0x0895, 0x089f, 0x0002, 0x0000, 0x0601, 0x0003, 0x001a, + 0x08b0, 0x08c1, 0x08cd, 0x0002, 0x0000, 0x0609, 0x0003, 0x001a, + // Entry 11180 - 111BF + 0x08e0, 0x08ef, 0x08f9, 0x0002, 0x0000, 0x0611, 0x0003, 0x001a, + 0x090a, 0x091c, 0x0929, 0x0001, 0x0618, 0x0001, 0x001a, 0x093d, + 0x0003, 0x061f, 0x0000, 0x0622, 0x0001, 0x001a, 0x0948, 0x0002, + 0x0625, 0x0629, 0x0002, 0x001a, 0x0964, 0x0951, 0x0002, 0x001a, + 0x0990, 0x097a, 0x0003, 0x0631, 0x0000, 0x0634, 0x0001, 0x001a, + 0x09a9, 0x0002, 0x0637, 0x063b, 0x0002, 0x001a, 0x09cd, 0x09b6, + 0x0002, 0x001a, 0x0a01, 0x09e7, 0x0003, 0x0643, 0x0646, 0x064a, + 0x0001, 0x001a, 0x0a1e, 0x0002, 0x001a, 0xffff, 0x0a25, 0x0002, + // Entry 111C0 - 111FF + 0x064d, 0x0651, 0x0002, 0x001a, 0x0a3b, 0x0a2a, 0x0002, 0x001a, + 0x0a63, 0x0a4f, 0x0001, 0x0657, 0x0001, 0x001a, 0x0a7a, 0x0004, + 0x065f, 0x0664, 0x0669, 0x0678, 0x0003, 0x0000, 0x1dc7, 0x23b5, + 0x2353, 0x0003, 0x001a, 0x0a89, 0x0a99, 0x0aae, 0x0002, 0x0000, + 0x066c, 0x0003, 0x0000, 0x0673, 0x0670, 0x0001, 0x001a, 0x0ac5, + 0x0003, 0x001a, 0xffff, 0x0adf, 0x0aff, 0x0002, 0x085f, 0x067b, + 0x0003, 0x067f, 0x07bf, 0x071f, 0x009e, 0x001a, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0bc8, 0x0c23, 0x0cb0, 0x0cfb, 0x0d57, 0x0db7, + // Entry 11200 - 1123F + 0x0e02, 0x0e49, 0x0e8f, 0x0f52, 0x0f9e, 0x0ff3, 0x106c, 0x10bb, + 0x1103, 0x116e, 0x11fc, 0x1264, 0x12cc, 0x1324, 0x1370, 0xffff, + 0xffff, 0x13ef, 0xffff, 0x145f, 0xffff, 0x14cc, 0x1514, 0x155d, + 0x159f, 0xffff, 0xffff, 0x162e, 0x1680, 0x16de, 0xffff, 0xffff, + 0xffff, 0x1762, 0xffff, 0x17d7, 0x183b, 0xffff, 0x189f, 0x1903, + 0x196d, 0xffff, 0xffff, 0xffff, 0xffff, 0x1a1f, 0xffff, 0xffff, + 0x1aa0, 0x1b03, 0xffff, 0xffff, 0x1b8b, 0x1be8, 0x1c3d, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1d1e, 0x1d5d, 0x1dac, + // Entry 11240 - 1127F + 0x1df1, 0x1e3a, 0xffff, 0xffff, 0x1eee, 0xffff, 0x1f4a, 0xffff, + 0xffff, 0x1fd4, 0xffff, 0x2082, 0xffff, 0xffff, 0xffff, 0xffff, + 0x212e, 0xffff, 0x2196, 0x21f9, 0x2258, 0x22b0, 0xffff, 0xffff, + 0xffff, 0x2334, 0x2395, 0x23e9, 0xffff, 0xffff, 0x2469, 0x24dc, + 0x2537, 0x257d, 0xffff, 0xffff, 0x25fe, 0x2650, 0x2695, 0xffff, + 0x2709, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2833, 0x2885, + 0x28cb, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x29b0, 0xffff, 0xffff, 0x2a20, 0xffff, 0x2a7b, 0xffff, 0x2aec, + // Entry 11280 - 112BF + 0x2b3b, 0x2b93, 0xffff, 0x2bf8, 0x2c53, 0xffff, 0xffff, 0xffff, + 0x2cee, 0x2d3d, 0xffff, 0xffff, 0x0b1a, 0x0c67, 0x0ece, 0x0f14, + 0xffff, 0xffff, 0x2022, 0x27b6, 0x009e, 0x001a, 0x0b5d, 0x0b75, + 0x0b90, 0x0ba8, 0x0be0, 0x0c35, 0x0cc2, 0x0d15, 0x0d73, 0x0dcc, + 0x0e15, 0x0e5b, 0x0ea0, 0x0f65, 0x0fb4, 0x1015, 0x1080, 0x10cf, + 0x1121, 0x11a2, 0x121a, 0x1282, 0x12e3, 0x1337, 0x1387, 0x13c8, + 0x13db, 0x1404, 0x1441, 0x1476, 0x14b7, 0x14e0, 0x1526, 0x156f, + 0x15b6, 0x15f7, 0x1614, 0x1643, 0x1699, 0x16ee, 0x171a, 0x172c, + // Entry 112C0 - 112FF + 0x174b, 0x177c, 0x17c3, 0x17f2, 0x1857, 0xffff, 0x18ba, 0x1920, + 0x197e, 0x19b3, 0x19cd, 0x19f5, 0x1a0b, 0x1a33, 0x1a6e, 0x1a8a, + 0x1aba, 0x1b1e, 0x1b60, 0x1b78, 0x1ba6, 0x1bfe, 0x1c4e, 0x1c83, + 0x1c95, 0x1cae, 0x1cc4, 0x1ce2, 0x1d00, 0x1d2f, 0x1d71, 0x1dbf, + 0x1e03, 0x1e5e, 0x1eb6, 0x1ed2, 0x1f00, 0x1f37, 0x1f62, 0x1fa5, + 0x1fbb, 0x1fea, 0x2065, 0x2096, 0x20d1, 0x20e6, 0x20fb, 0x2111, + 0x2144, 0x2183, 0x21b3, 0x2215, 0x226f, 0x22c3, 0x22fc, 0x2310, + 0x2322, 0x234e, 0x23ad, 0x2401, 0x243d, 0x244e, 0x2489, 0x24f4, + // Entry 11300 - 1133F + 0x2548, 0x2592, 0x25cf, 0x25e1, 0x2613, 0x2661, 0x26ac, 0x26ed, + 0x272a, 0x2778, 0x278d, 0x27a0, 0x280b, 0x281f, 0x2848, 0x2897, + 0x28dd, 0x290d, 0x2924, 0x2941, 0x295d, 0x2977, 0x298b, 0x299d, + 0x29c3, 0x29f5, 0x2a0c, 0x2a32, 0x2a69, 0x2a94, 0x2ad9, 0x2b00, + 0x2b52, 0x2ba7, 0x2be2, 0x2c10, 0x2c69, 0x2ca7, 0x2cba, 0x2cd2, + 0x2d02, 0x2d57, 0xffff, 0xffff, 0x0b2a, 0x0c79, 0x0edf, 0x0f26, + 0xffff, 0xffff, 0x2033, 0x27cc, 0x009e, 0x001a, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0bff, 0x0c4f, 0x0cdc, 0x0d37, 0x0d96, 0x0de8, + // Entry 11340 - 1137F + 0x0e30, 0x0e74, 0x0eb8, 0x0f7f, 0x0fd1, 0x103e, 0x109b, 0x10ea, + 0x1147, 0x11d0, 0x1240, 0x12a8, 0x1301, 0x1351, 0x13a5, 0xffff, + 0xffff, 0x1420, 0xffff, 0x1494, 0xffff, 0x14fb, 0x153f, 0x1588, + 0x15d4, 0xffff, 0xffff, 0x165f, 0x16b9, 0x1705, 0xffff, 0xffff, + 0xffff, 0x179d, 0xffff, 0x1814, 0x187a, 0xffff, 0x18dc, 0x1944, + 0x1996, 0xffff, 0xffff, 0xffff, 0xffff, 0x1a4e, 0xffff, 0xffff, + 0x1adc, 0x1b40, 0xffff, 0xffff, 0x1bc8, 0x1c1b, 0x1c66, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1d47, 0x1d8c, 0x1dd9, + // Entry 11380 - 113BF + 0x1e1c, 0x1e89, 0xffff, 0xffff, 0x1f19, 0xffff, 0x1f81, 0xffff, + 0xffff, 0x2007, 0xffff, 0x20b1, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2161, 0xffff, 0x21d7, 0x2238, 0x228d, 0x22dd, 0xffff, 0xffff, + 0xffff, 0x236f, 0x23cc, 0x2420, 0xffff, 0xffff, 0x24b0, 0x2513, + 0x2560, 0x25ae, 0xffff, 0xffff, 0x262f, 0x2679, 0x26ca, 0xffff, + 0x2752, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2864, 0x28b0, + 0x28f6, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x29dd, 0xffff, 0xffff, 0x2a4b, 0xffff, 0x2ab4, 0xffff, 0x2b1b, + // Entry 113C0 - 113FF + 0x2b70, 0x2bc2, 0xffff, 0x2c2f, 0x2c86, 0xffff, 0xffff, 0xffff, + 0x2d1d, 0x2d78, 0xffff, 0xffff, 0x0b41, 0x0c92, 0x0ef7, 0x0f3f, + 0xffff, 0xffff, 0x204b, 0x27e9, 0x0003, 0x086a, 0x0871, 0x0863, + 0x0005, 0x0001, 0xffff, 0x08fc, 0x090f, 0x092c, 0x096c, 0x0005, + 0x0001, 0xffff, 0xffff, 0xffff, 0xffff, 0x096c, 0x0005, 0x0001, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0970, 0x0001, 0x0002, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, + 0x0007, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0013, + // Entry 11400 - 1143F + 0x0004, 0x0021, 0x001b, 0x0018, 0x001e, 0x0001, 0x0000, 0x0524, + 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, + 0x0546, 0x0003, 0x0004, 0x04f6, 0x093d, 0x0012, 0x0017, 0x0000, + 0x0055, 0x0000, 0x00bc, 0x0000, 0x0123, 0x014e, 0x033c, 0x03a0, + 0x0400, 0x0000, 0x0000, 0x0000, 0x0000, 0x0460, 0x047a, 0x04da, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0033, 0x0000, + 0x0044, 0x0003, 0x0029, 0x002e, 0x0024, 0x0001, 0x0026, 0x0001, + 0x001b, 0x0000, 0x0001, 0x002b, 0x0001, 0x0000, 0x0000, 0x0001, + // Entry 11440 - 1147F + 0x0030, 0x0001, 0x0000, 0x0000, 0x0004, 0x0041, 0x003b, 0x0038, + 0x003e, 0x0001, 0x0006, 0x000d, 0x0001, 0x0002, 0x0010, 0x0001, + 0x0002, 0x001b, 0x0001, 0x0002, 0x004f, 0x0004, 0x0052, 0x004c, + 0x0049, 0x004f, 0x0001, 0x001b, 0x0007, 0x0001, 0x001b, 0x0007, + 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0005, 0x005b, + 0x0000, 0x0000, 0x0000, 0x00a6, 0x0002, 0x005e, 0x0082, 0x0003, + 0x0062, 0x0000, 0x0072, 0x000e, 0x001b, 0xffff, 0x0011, 0x001a, + 0x0025, 0x0032, 0x0041, 0x004e, 0x0059, 0x006c, 0x0081, 0x0090, + // Entry 11480 - 114BF + 0x009f, 0x00aa, 0x00b5, 0x000e, 0x001b, 0xffff, 0x0011, 0x001a, + 0x0025, 0x0032, 0x0041, 0x004e, 0x0059, 0x006c, 0x0081, 0x0090, + 0x009f, 0x00aa, 0x00b5, 0x0003, 0x0086, 0x0000, 0x0096, 0x000e, + 0x001b, 0xffff, 0x0011, 0x001a, 0x0025, 0x0032, 0x0041, 0x004e, + 0x0059, 0x006c, 0x0081, 0x0090, 0x009f, 0x00aa, 0x00b5, 0x000e, + 0x001b, 0xffff, 0x0011, 0x001a, 0x0025, 0x0032, 0x0041, 0x004e, + 0x0059, 0x006c, 0x0081, 0x0090, 0x009f, 0x00aa, 0x00b5, 0x0003, + 0x00b0, 0x00b6, 0x00aa, 0x0001, 0x00ac, 0x0002, 0x0000, 0x0425, + // Entry 114C0 - 114FF + 0x042a, 0x0001, 0x00b2, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, + 0x00b8, 0x0002, 0x0000, 0x0425, 0x042a, 0x0005, 0x00c2, 0x0000, + 0x0000, 0x0000, 0x010d, 0x0002, 0x00c5, 0x00e9, 0x0003, 0x00c9, + 0x0000, 0x00d9, 0x000e, 0x0000, 0xffff, 0x042f, 0x0438, 0x043f, + 0x0445, 0x044c, 0x0450, 0x0458, 0x0460, 0x0467, 0x046e, 0x0473, + 0x0479, 0x0481, 0x000e, 0x0000, 0xffff, 0x042f, 0x0438, 0x043f, + 0x0445, 0x044c, 0x0450, 0x0458, 0x0460, 0x0467, 0x046e, 0x0473, + 0x0479, 0x0481, 0x0003, 0x00ed, 0x0000, 0x00fd, 0x000e, 0x0000, + // Entry 11500 - 1153F + 0xffff, 0x042f, 0x0438, 0x043f, 0x0445, 0x044c, 0x0450, 0x0458, + 0x0460, 0x0467, 0x046e, 0x0473, 0x0479, 0x0481, 0x000e, 0x0000, + 0xffff, 0x042f, 0x0438, 0x043f, 0x0445, 0x044c, 0x0450, 0x0458, + 0x0460, 0x0467, 0x046e, 0x0473, 0x0479, 0x0481, 0x0003, 0x0117, + 0x011d, 0x0111, 0x0001, 0x0113, 0x0002, 0x0000, 0x0425, 0x042a, + 0x0001, 0x0119, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x011f, + 0x0002, 0x0000, 0x0425, 0x042a, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x012c, 0x0000, 0x013d, 0x0004, 0x013a, 0x0134, + // Entry 11540 - 1157F + 0x0131, 0x0137, 0x0001, 0x0006, 0x000d, 0x0001, 0x0002, 0x0010, + 0x0001, 0x0002, 0x001b, 0x0001, 0x0002, 0x004f, 0x0004, 0x014b, + 0x0145, 0x0142, 0x0148, 0x0001, 0x001b, 0x0007, 0x0001, 0x001b, + 0x0007, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, + 0x0157, 0x01bc, 0x0213, 0x0248, 0x02ef, 0x0309, 0x031a, 0x032b, + 0x0002, 0x015a, 0x018b, 0x0003, 0x015e, 0x016d, 0x017c, 0x000d, + 0x001b, 0xffff, 0x00be, 0x00c5, 0x00cc, 0x00d3, 0x00da, 0x00e1, + 0x00ea, 0x00f3, 0x00fa, 0x0101, 0x0108, 0x010f, 0x000d, 0x001b, + // Entry 11580 - 115BF + 0xffff, 0x0116, 0x0119, 0x011c, 0x011f, 0x011c, 0x0116, 0x0116, + 0x011f, 0x0122, 0x0125, 0x0128, 0x012b, 0x000d, 0x001b, 0xffff, + 0x012e, 0x0143, 0x015a, 0x0169, 0x017a, 0x0185, 0x0194, 0x01a3, + 0x01b6, 0x01cd, 0x01e0, 0x01f3, 0x0003, 0x018f, 0x019e, 0x01ad, + 0x000d, 0x001b, 0xffff, 0x00be, 0x00c5, 0x0208, 0x00d3, 0x020f, + 0x0216, 0x021f, 0x0228, 0x00fa, 0x0101, 0x022f, 0x010f, 0x000d, + 0x001b, 0xffff, 0x0116, 0x0119, 0x011c, 0x011f, 0x011c, 0x0116, + 0x0116, 0x011f, 0x0122, 0x0125, 0x0128, 0x012b, 0x000d, 0x001b, + // Entry 115C0 - 115FF + 0xffff, 0x0236, 0x024b, 0x0262, 0x0271, 0x0282, 0x028d, 0x029c, + 0x02ab, 0x02be, 0x02d5, 0x02e8, 0x02fb, 0x0002, 0x01bf, 0x01e9, + 0x0005, 0x01c5, 0x01ce, 0x01e0, 0x0000, 0x01d7, 0x0007, 0x001b, + 0x0310, 0x0317, 0x031e, 0x0325, 0x032c, 0x0333, 0x033a, 0x0007, + 0x001b, 0x0341, 0x012b, 0x0344, 0x0344, 0x0347, 0x0347, 0x0122, + 0x0007, 0x001b, 0x034a, 0x034f, 0x0354, 0x0359, 0x035e, 0x0363, + 0x0368, 0x0007, 0x001b, 0x036d, 0x037c, 0x038b, 0x0396, 0x03a5, + 0x03b2, 0x03c5, 0x0005, 0x01ef, 0x01f8, 0x020a, 0x0000, 0x0201, + // Entry 11600 - 1163F + 0x0007, 0x001b, 0x0310, 0x0317, 0x031e, 0x0325, 0x032c, 0x0333, + 0x033a, 0x0007, 0x001b, 0x0341, 0x012b, 0x0344, 0x0344, 0x0347, + 0x0347, 0x0122, 0x0007, 0x001b, 0x034a, 0x034f, 0x0354, 0x0359, + 0x035e, 0x0363, 0x0368, 0x0007, 0x001b, 0x036d, 0x037c, 0x038b, + 0x0396, 0x03a5, 0x03b2, 0x03c5, 0x0002, 0x0216, 0x022f, 0x0003, + 0x021a, 0x0221, 0x0228, 0x0005, 0x001b, 0xffff, 0x03d4, 0x03d8, + 0x03dc, 0x03e0, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x0005, 0x001b, 0xffff, 0x03e4, 0x03f7, 0x040a, 0x041d, + // Entry 11640 - 1167F + 0x0003, 0x0233, 0x023a, 0x0241, 0x0005, 0x001b, 0xffff, 0x03d4, + 0x03d8, 0x03dc, 0x03e0, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x0005, 0x001b, 0xffff, 0x03e4, 0x03f7, 0x040a, + 0x041d, 0x0002, 0x024b, 0x029d, 0x0003, 0x024f, 0x0269, 0x0283, + 0x0007, 0x0257, 0x025a, 0x0000, 0x025d, 0x0260, 0x0263, 0x0266, + 0x0001, 0x001b, 0x0430, 0x0001, 0x001b, 0x0437, 0x0001, 0x001b, + 0x043e, 0x0001, 0x001b, 0x0447, 0x0001, 0x001b, 0x0453, 0x0001, + 0x001b, 0x045d, 0x0007, 0x0271, 0x0274, 0x0000, 0x0277, 0x027a, + // Entry 11680 - 116BF + 0x027d, 0x0280, 0x0001, 0x001b, 0x0468, 0x0001, 0x001b, 0x046d, + 0x0001, 0x001b, 0x043e, 0x0001, 0x001b, 0x0447, 0x0001, 0x001b, + 0x0453, 0x0001, 0x001b, 0x045d, 0x0007, 0x028b, 0x028e, 0x0000, + 0x0291, 0x0294, 0x0297, 0x029a, 0x0001, 0x001b, 0x0430, 0x0001, + 0x001b, 0x0437, 0x0001, 0x001b, 0x043e, 0x0001, 0x001b, 0x0472, + 0x0001, 0x001b, 0x0483, 0x0001, 0x001b, 0x045d, 0x0003, 0x02a1, + 0x02bb, 0x02d5, 0x0007, 0x02a9, 0x02ac, 0x0000, 0x02af, 0x02b2, + 0x02b5, 0x02b8, 0x0001, 0x001b, 0x0430, 0x0001, 0x001b, 0x0437, + // Entry 116C0 - 116FF + 0x0001, 0x001b, 0x043e, 0x0001, 0x001b, 0x0447, 0x0001, 0x001b, + 0x0453, 0x0001, 0x001b, 0x045d, 0x0007, 0x02c3, 0x02c6, 0x0000, + 0x02c9, 0x02cc, 0x02cf, 0x02d2, 0x0001, 0x001b, 0x0468, 0x0001, + 0x001b, 0x046d, 0x0001, 0x001b, 0x043e, 0x0001, 0x001b, 0x0447, + 0x0001, 0x001b, 0x0453, 0x0001, 0x001b, 0x045d, 0x0007, 0x02dd, + 0x02e0, 0x0000, 0x02e3, 0x02e6, 0x02e9, 0x02ec, 0x0001, 0x001b, + 0x0430, 0x0001, 0x001b, 0x0437, 0x0001, 0x001b, 0x043e, 0x0001, + 0x001b, 0x0472, 0x0001, 0x001b, 0x0483, 0x0001, 0x001b, 0x045d, + // Entry 11700 - 1173F + 0x0003, 0x02fe, 0x0000, 0x02f3, 0x0002, 0x02f6, 0x02fa, 0x0002, + 0x001b, 0x0494, 0x04e1, 0x0002, 0x001b, 0x04aa, 0x04f9, 0x0002, + 0x0301, 0x0305, 0x0002, 0x001b, 0x0519, 0x052a, 0x0002, 0x001b, + 0x0520, 0x0531, 0x0004, 0x0317, 0x0311, 0x030e, 0x0314, 0x0001, + 0x0006, 0x015b, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, + 0x0001, 0x0006, 0x0d7c, 0x0004, 0x0328, 0x0322, 0x031f, 0x0325, + 0x0001, 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, 0x0002, + 0x04fe, 0x0001, 0x0002, 0x0508, 0x0004, 0x0339, 0x0333, 0x0330, + // Entry 11740 - 1177F + 0x0336, 0x0001, 0x001b, 0x0007, 0x0001, 0x001b, 0x0007, 0x0001, + 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0005, 0x0342, 0x0000, + 0x0000, 0x0000, 0x038d, 0x0002, 0x0345, 0x0369, 0x0003, 0x0349, + 0x0000, 0x0359, 0x000e, 0x001b, 0x0589, 0x0536, 0x0541, 0x054e, + 0x055b, 0x0566, 0x0571, 0x057e, 0x0597, 0x05a2, 0x05ad, 0x05b8, + 0x05c5, 0x05ca, 0x000e, 0x001b, 0x0589, 0x0536, 0x0541, 0x054e, + 0x055b, 0x0566, 0x0571, 0x057e, 0x0597, 0x05a2, 0x05ad, 0x05b8, + 0x05c5, 0x05ca, 0x0003, 0x036d, 0x0000, 0x037d, 0x000e, 0x001b, + // Entry 11780 - 117BF + 0x0589, 0x0536, 0x0541, 0x054e, 0x055b, 0x0566, 0x0571, 0x057e, + 0x0597, 0x05a2, 0x05ad, 0x05b8, 0x05c5, 0x05ca, 0x000e, 0x001b, + 0x0589, 0x0536, 0x0541, 0x054e, 0x055b, 0x0566, 0x0571, 0x057e, + 0x0597, 0x05a2, 0x05ad, 0x05b8, 0x05c5, 0x05ca, 0x0003, 0x0396, + 0x039b, 0x0391, 0x0001, 0x0393, 0x0001, 0x0000, 0x04ef, 0x0001, + 0x0398, 0x0001, 0x0000, 0x04ef, 0x0001, 0x039d, 0x0001, 0x0000, + 0x04ef, 0x0005, 0x03a6, 0x0000, 0x0000, 0x0000, 0x03ed, 0x0002, + 0x03a9, 0x03cb, 0x0003, 0x03ad, 0x0000, 0x03bc, 0x000d, 0x0000, + // Entry 117C0 - 117FF + 0xffff, 0x05a2, 0x05aa, 0x05b3, 0x05bc, 0x05c3, 0x05cb, 0x05d2, + 0x05d9, 0x05e1, 0x05ec, 0x05f2, 0x05f8, 0x000d, 0x0000, 0xffff, + 0x05a2, 0x05aa, 0x05b3, 0x05bc, 0x05c3, 0x05cb, 0x05d2, 0x05d9, + 0x05e1, 0x05ec, 0x05f2, 0x05f8, 0x0003, 0x03cf, 0x0000, 0x03de, + 0x000d, 0x0000, 0xffff, 0x05a2, 0x05aa, 0x05b3, 0x05bc, 0x05c3, + 0x05cb, 0x05d2, 0x05d9, 0x05e1, 0x05ec, 0x05f2, 0x05f8, 0x000d, + 0x0000, 0xffff, 0x05a2, 0x05aa, 0x05b3, 0x05bc, 0x05c3, 0x05cb, + 0x05d2, 0x05d9, 0x05e1, 0x05ec, 0x05f2, 0x05f8, 0x0003, 0x03f6, + // Entry 11800 - 1183F + 0x03fb, 0x03f1, 0x0001, 0x03f3, 0x0001, 0x001b, 0x05d5, 0x0001, + 0x03f8, 0x0001, 0x001b, 0x05d5, 0x0001, 0x03fd, 0x0001, 0x001b, + 0x05d5, 0x0005, 0x0406, 0x0000, 0x0000, 0x0000, 0x044d, 0x0002, + 0x0409, 0x042b, 0x0003, 0x040d, 0x0000, 0x041c, 0x000d, 0x0000, + 0xffff, 0x0606, 0x060b, 0x0610, 0x0617, 0x061f, 0x0626, 0x062e, + 0x0633, 0x0638, 0x063d, 0x0643, 0x064d, 0x000d, 0x0000, 0xffff, + 0x0657, 0x0660, 0x0666, 0x066f, 0x0679, 0x0682, 0x068c, 0x0692, + 0x069b, 0x06a3, 0x06ab, 0x06ba, 0x0003, 0x042f, 0x0000, 0x043e, + // Entry 11840 - 1187F + 0x000d, 0x0000, 0xffff, 0x0606, 0x060b, 0x0610, 0x0617, 0x061f, + 0x0626, 0x062e, 0x0633, 0x0638, 0x063d, 0x0643, 0x064d, 0x000d, + 0x0000, 0xffff, 0x0657, 0x0660, 0x0666, 0x066f, 0x0679, 0x0682, + 0x068c, 0x0692, 0x069b, 0x06a3, 0x06ab, 0x06ba, 0x0003, 0x0456, + 0x045b, 0x0451, 0x0001, 0x0453, 0x0001, 0x001b, 0x05de, 0x0001, + 0x0458, 0x0001, 0x001b, 0x05de, 0x0001, 0x045d, 0x0001, 0x001b, + 0x05de, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0469, + 0x0000, 0x9006, 0x0004, 0x0477, 0x0471, 0x046e, 0x0474, 0x0001, + // Entry 11880 - 118BF + 0x000a, 0x042e, 0x0001, 0x000a, 0x0440, 0x0001, 0x0002, 0x0044, + 0x0001, 0x0006, 0x0d7c, 0x0005, 0x0480, 0x0000, 0x0000, 0x0000, + 0x04c7, 0x0002, 0x0483, 0x04a5, 0x0003, 0x0487, 0x0000, 0x0496, + 0x000d, 0x0000, 0xffff, 0x19c9, 0x19d3, 0x19df, 0x23bd, 0x19eb, + 0x19f2, 0x23c1, 0x1a01, 0x1a06, 0x1a0b, 0x23c6, 0x1a16, 0x000d, + 0x0000, 0xffff, 0x19c9, 0x19d3, 0x19df, 0x23bd, 0x19eb, 0x19f2, + 0x23c1, 0x1a01, 0x1a06, 0x1a0b, 0x23c6, 0x1a16, 0x0003, 0x04a9, + 0x0000, 0x04b8, 0x000d, 0x0000, 0xffff, 0x19c9, 0x19d3, 0x19df, + // Entry 118C0 - 118FF + 0x23bd, 0x19eb, 0x19f2, 0x23c1, 0x1a01, 0x1a06, 0x1a0b, 0x23c6, + 0x1a16, 0x000d, 0x0000, 0xffff, 0x19c9, 0x19d3, 0x19df, 0x23bd, + 0x19eb, 0x19f2, 0x23c1, 0x1a01, 0x1a06, 0x1a0b, 0x23c6, 0x1a16, + 0x0003, 0x04d0, 0x04d5, 0x04cb, 0x0001, 0x04cd, 0x0001, 0x0000, + 0x1a1d, 0x0001, 0x04d2, 0x0001, 0x0000, 0x1a1d, 0x0001, 0x04d7, + 0x0001, 0x0000, 0x1a1d, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, + 0x04e0, 0x0003, 0x04ea, 0x04f0, 0x04e4, 0x0001, 0x04e6, 0x0002, + 0x001b, 0x05e5, 0x05f3, 0x0001, 0x04ec, 0x0002, 0x001b, 0x05e5, + // Entry 11900 - 1193F + 0x05f3, 0x0001, 0x04f2, 0x0002, 0x001b, 0x05e5, 0x05f3, 0x0042, + 0x0539, 0x053e, 0x0543, 0x0548, 0x055f, 0x0576, 0x058d, 0x05a4, + 0x05bb, 0x05d2, 0x05e9, 0x05fb, 0x060d, 0x0628, 0x063e, 0x0654, + 0x0659, 0x065e, 0x0663, 0x067c, 0x068e, 0x06a0, 0x06a5, 0x06aa, + 0x06af, 0x06b4, 0x06b9, 0x06be, 0x06c3, 0x06c8, 0x06cd, 0x06e1, + 0x06f5, 0x0709, 0x071d, 0x0731, 0x0745, 0x0759, 0x076d, 0x0781, + 0x0795, 0x07a9, 0x07bd, 0x07d1, 0x07e5, 0x07f9, 0x080d, 0x0821, + 0x0835, 0x0849, 0x085d, 0x0871, 0x0876, 0x087b, 0x0880, 0x0896, + // Entry 11940 - 1197F + 0x08a8, 0x08ba, 0x08d0, 0x08e2, 0x08f4, 0x090a, 0x091c, 0x092e, + 0x0933, 0x0938, 0x0001, 0x053b, 0x0001, 0x001b, 0x05fa, 0x0001, + 0x0540, 0x0001, 0x001b, 0x060b, 0x0001, 0x0545, 0x0001, 0x001b, + 0x060b, 0x0003, 0x054c, 0x054f, 0x0554, 0x0001, 0x001b, 0x0613, + 0x0003, 0x001b, 0x061c, 0x0627, 0x0632, 0x0002, 0x0557, 0x055b, + 0x0002, 0x001b, 0x065c, 0x064a, 0x0002, 0x001b, 0x0689, 0x066c, + 0x0003, 0x0563, 0x0566, 0x056b, 0x0001, 0x001b, 0x06a4, 0x0003, + 0x001b, 0x061c, 0x0627, 0x0632, 0x0002, 0x056e, 0x0572, 0x0002, + // Entry 11980 - 119BF + 0x001b, 0x065c, 0x064a, 0x0002, 0x001b, 0x0689, 0x066c, 0x0003, + 0x057a, 0x057d, 0x0582, 0x0001, 0x001b, 0x06a4, 0x0003, 0x001b, + 0x061c, 0x0627, 0x0632, 0x0002, 0x0585, 0x0589, 0x0002, 0x001b, + 0x065c, 0x064a, 0x0002, 0x001b, 0x06c0, 0x06aa, 0x0003, 0x0591, + 0x0594, 0x0599, 0x0001, 0x001b, 0x06d4, 0x0003, 0x001b, 0x06e3, + 0x0709, 0x0725, 0x0002, 0x059c, 0x05a0, 0x0002, 0x001b, 0x075b, + 0x0743, 0x0002, 0x001b, 0x0796, 0x0773, 0x0003, 0x05a8, 0x05ab, + 0x05b0, 0x0001, 0x001b, 0x07b9, 0x0003, 0x001b, 0x07c3, 0x07d9, + // Entry 119C0 - 119FF + 0x07f0, 0x0002, 0x05b3, 0x05b7, 0x0002, 0x001b, 0x0804, 0x0804, + 0x0002, 0x001b, 0x0817, 0x0817, 0x0003, 0x05bf, 0x05c2, 0x05c7, + 0x0001, 0x001b, 0x07b9, 0x0003, 0x001b, 0x07c3, 0x07d9, 0x07f0, + 0x0002, 0x05ca, 0x05ce, 0x0002, 0x001b, 0x0804, 0x0804, 0x0002, + 0x001b, 0x0835, 0x0835, 0x0003, 0x05d6, 0x05d9, 0x05de, 0x0001, + 0x001b, 0x084c, 0x0003, 0x001b, 0x0857, 0x087b, 0x0893, 0x0002, + 0x05e1, 0x05e5, 0x0002, 0x001b, 0x08c1, 0x08af, 0x0002, 0x001b, + 0x08f2, 0x08d5, 0x0003, 0x05ed, 0x0000, 0x05f0, 0x0001, 0x001b, + // Entry 11A00 - 11A3F + 0x0911, 0x0002, 0x05f3, 0x05f7, 0x0002, 0x001b, 0x08c1, 0x08af, + 0x0002, 0x001b, 0x08f2, 0x08d5, 0x0003, 0x05ff, 0x0000, 0x0602, + 0x0001, 0x001b, 0x0911, 0x0002, 0x0605, 0x0609, 0x0002, 0x001b, + 0x0919, 0x0919, 0x0002, 0x001b, 0x0926, 0x0926, 0x0004, 0x0612, + 0x0615, 0x061a, 0x0625, 0x0001, 0x001b, 0x0937, 0x0003, 0x001b, + 0x0948, 0x0970, 0x0992, 0x0002, 0x061d, 0x0621, 0x0002, 0x001b, + 0x09cc, 0x09b2, 0x0002, 0x001b, 0x0a0d, 0x09e8, 0x0001, 0x001b, + 0x0a34, 0x0004, 0x062d, 0x0000, 0x0630, 0x063b, 0x0001, 0x001b, + // Entry 11A40 - 11A7F + 0x0a50, 0x0002, 0x0633, 0x0637, 0x0002, 0x001b, 0x0a58, 0x0a58, + 0x0002, 0x001b, 0x0a69, 0x0a69, 0x0001, 0x001b, 0x0a85, 0x0004, + 0x0643, 0x0000, 0x0646, 0x0651, 0x0001, 0x001b, 0x0a50, 0x0002, + 0x0649, 0x064d, 0x0002, 0x001b, 0x0a58, 0x0a58, 0x0002, 0x001b, + 0x0a98, 0x0a98, 0x0001, 0x001b, 0x0a85, 0x0001, 0x0656, 0x0001, + 0x001b, 0x0aad, 0x0001, 0x065b, 0x0001, 0x001b, 0x0ac7, 0x0001, + 0x0660, 0x0001, 0x001b, 0x0ac7, 0x0003, 0x0667, 0x066a, 0x0671, + 0x0001, 0x001b, 0x0ad8, 0x0005, 0x001b, 0x0af2, 0x0afb, 0x0b08, + // Entry 11A80 - 11ABF + 0x0ae3, 0x0b13, 0x0002, 0x0674, 0x0678, 0x0002, 0x001b, 0x0b38, + 0x0b24, 0x0002, 0x001b, 0x0b6d, 0x0b4e, 0x0003, 0x0680, 0x0000, + 0x0683, 0x0001, 0x001b, 0x0b8e, 0x0002, 0x0686, 0x068a, 0x0002, + 0x001b, 0x0b94, 0x0b94, 0x0002, 0x001b, 0x0ba3, 0x0ba3, 0x0003, + 0x0692, 0x0000, 0x0695, 0x0001, 0x001b, 0x0b8e, 0x0002, 0x0698, + 0x069c, 0x0002, 0x001b, 0x0b94, 0x0b94, 0x0002, 0x001b, 0x0bbd, + 0x0bbd, 0x0001, 0x06a2, 0x0001, 0x001b, 0x0bd0, 0x0001, 0x06a7, + 0x0001, 0x001b, 0x0be6, 0x0001, 0x06ac, 0x0001, 0x001b, 0x0be6, + // Entry 11AC0 - 11AFF + 0x0001, 0x06b1, 0x0001, 0x001b, 0x0bf7, 0x0001, 0x06b6, 0x0001, + 0x001b, 0x0c0c, 0x0001, 0x06bb, 0x0001, 0x001b, 0x0c0c, 0x0001, + 0x06c0, 0x0001, 0x001b, 0x0c1c, 0x0001, 0x06c5, 0x0001, 0x001b, + 0x0c3a, 0x0001, 0x06ca, 0x0001, 0x001b, 0x0c3a, 0x0003, 0x0000, + 0x06d1, 0x06d6, 0x0003, 0x001b, 0x0c53, 0x0c79, 0x0c9a, 0x0002, + 0x06d9, 0x06dd, 0x0002, 0x001b, 0x0cd0, 0x0cb8, 0x0002, 0x001b, + 0x0d0d, 0x0cea, 0x0003, 0x0000, 0x06e5, 0x06ea, 0x0003, 0x001b, + 0x0d32, 0x0d46, 0x0d60, 0x0002, 0x06ed, 0x06f1, 0x0002, 0x001b, + // Entry 11B00 - 11B3F + 0x0d72, 0x0d72, 0x0002, 0x001b, 0x0d83, 0x0d83, 0x0003, 0x0000, + 0x06f9, 0x06fe, 0x0003, 0x001b, 0x0d9f, 0x0db0, 0x0dc7, 0x0002, + 0x0701, 0x0705, 0x0002, 0x001b, 0x0dd6, 0x0dd6, 0x0002, 0x001b, + 0x0de4, 0x0de4, 0x0003, 0x0000, 0x070d, 0x0712, 0x0003, 0x001b, + 0x0df6, 0x0e1c, 0x0e3b, 0x0002, 0x0715, 0x0719, 0x0002, 0x001b, + 0x0e71, 0x0e59, 0x0002, 0x001b, 0x0eae, 0x0e8b, 0x0003, 0x0000, + 0x0721, 0x0726, 0x0003, 0x001b, 0x0ed3, 0x0ee9, 0x0f03, 0x0002, + 0x0729, 0x072d, 0x0002, 0x001b, 0x0f17, 0x0f17, 0x0002, 0x001b, + // Entry 11B40 - 11B7F + 0x0f2a, 0x0f2a, 0x0003, 0x0000, 0x0735, 0x073a, 0x0003, 0x001b, + 0x0f48, 0x0f59, 0x0f6e, 0x0002, 0x073d, 0x0741, 0x0002, 0x001b, + 0x0f7d, 0x0f7d, 0x0002, 0x001b, 0x0f8b, 0x0f8b, 0x0003, 0x0000, + 0x0749, 0x074e, 0x0003, 0x001b, 0x0f9d, 0x0fbf, 0x0fdc, 0x0002, + 0x0751, 0x0755, 0x0002, 0x001b, 0x100a, 0x0ff6, 0x0002, 0x001b, + 0x103f, 0x1020, 0x0003, 0x0000, 0x075d, 0x0762, 0x0003, 0x001b, + 0x1060, 0x1072, 0x108a, 0x0002, 0x0765, 0x0769, 0x0002, 0x001b, + 0x109a, 0x109a, 0x0002, 0x001b, 0x10a9, 0x10a9, 0x0003, 0x0000, + // Entry 11B80 - 11BBF + 0x0771, 0x0776, 0x0003, 0x001b, 0x10c3, 0x10d4, 0x10eb, 0x0002, + 0x0779, 0x077d, 0x0002, 0x001b, 0x10fa, 0x10fa, 0x0002, 0x001b, + 0x1108, 0x1108, 0x0003, 0x0000, 0x0785, 0x078a, 0x0003, 0x001b, + 0x111a, 0x1140, 0x1161, 0x0002, 0x078d, 0x0791, 0x0002, 0x001b, + 0x1197, 0x117f, 0x0002, 0x001b, 0x11d4, 0x11b1, 0x0003, 0x0000, + 0x0799, 0x079e, 0x0003, 0x001b, 0x11f9, 0x120d, 0x1227, 0x0002, + 0x07a1, 0x07a5, 0x0002, 0x001b, 0x1239, 0x1239, 0x0002, 0x001b, + 0x124a, 0x124a, 0x0003, 0x0000, 0x07ad, 0x07b2, 0x0003, 0x001b, + // Entry 11BC0 - 11BFF + 0x1266, 0x1277, 0x128e, 0x0002, 0x07b5, 0x07b9, 0x0002, 0x001b, + 0x129d, 0x129d, 0x0002, 0x001b, 0x12ab, 0x12ab, 0x0003, 0x0000, + 0x07c1, 0x07c6, 0x0003, 0x001b, 0x12bd, 0x12e1, 0x1300, 0x0002, + 0x07c9, 0x07cd, 0x0002, 0x001b, 0x1332, 0x131c, 0x0002, 0x001b, + 0x136b, 0x134a, 0x0003, 0x0000, 0x07d5, 0x07da, 0x0003, 0x001b, + 0x138e, 0x13a2, 0x13bc, 0x0002, 0x07dd, 0x07e1, 0x0002, 0x001b, + 0x13ce, 0x13ce, 0x0002, 0x001b, 0x13df, 0x13df, 0x0003, 0x0000, + 0x07e9, 0x07ee, 0x0003, 0x001b, 0x13fb, 0x140c, 0x1423, 0x0002, + // Entry 11C00 - 11C3F + 0x07f1, 0x07f5, 0x0002, 0x001b, 0x1432, 0x1432, 0x0002, 0x001b, + 0x1440, 0x1440, 0x0003, 0x0000, 0x07fd, 0x0802, 0x0003, 0x001b, + 0x1452, 0x147c, 0x14a1, 0x0002, 0x0805, 0x0809, 0x0002, 0x001b, + 0x14df, 0x14c3, 0x0002, 0x001b, 0x1524, 0x14fd, 0x0003, 0x0000, + 0x0811, 0x0816, 0x0003, 0x001b, 0x154d, 0x1561, 0x157b, 0x0002, + 0x0819, 0x081d, 0x0002, 0x001b, 0x158d, 0x158d, 0x0002, 0x001b, + 0x159e, 0x159e, 0x0003, 0x0000, 0x0825, 0x082a, 0x0003, 0x001b, + 0x15ba, 0x15cb, 0x15e2, 0x0002, 0x082d, 0x0831, 0x0002, 0x001b, + // Entry 11C40 - 11C7F + 0x15f1, 0x15f1, 0x0002, 0x001b, 0x15ff, 0x15ff, 0x0003, 0x0000, + 0x0839, 0x083e, 0x0003, 0x001b, 0x1611, 0x1637, 0x1654, 0x0002, + 0x0841, 0x0845, 0x0002, 0x001b, 0x168a, 0x1672, 0x0002, 0x001b, + 0x16c5, 0x16a2, 0x0003, 0x0000, 0x084d, 0x0852, 0x0003, 0x001b, + 0x16e8, 0x16fc, 0x1712, 0x0002, 0x0855, 0x0859, 0x0002, 0x001b, + 0x1724, 0x1724, 0x0002, 0x001b, 0x1735, 0x1735, 0x0003, 0x0000, + 0x0861, 0x0866, 0x0003, 0x001b, 0x1751, 0x1762, 0x1775, 0x0002, + 0x0869, 0x086d, 0x0002, 0x001b, 0x1784, 0x1784, 0x0002, 0x001b, + // Entry 11C80 - 11CBF + 0x1792, 0x1792, 0x0001, 0x0873, 0x0001, 0x001b, 0x17a4, 0x0001, + 0x0878, 0x0001, 0x001b, 0x17ae, 0x0001, 0x087d, 0x0001, 0x001b, + 0x17a4, 0x0003, 0x0884, 0x0887, 0x088b, 0x0001, 0x001b, 0x17bc, + 0x0002, 0x001b, 0xffff, 0x17c3, 0x0002, 0x088e, 0x0892, 0x0002, + 0x001b, 0x17eb, 0x17db, 0x0002, 0x001b, 0x1818, 0x17fd, 0x0003, + 0x089a, 0x0000, 0x089d, 0x0001, 0x001b, 0x1835, 0x0002, 0x08a0, + 0x08a4, 0x0002, 0x001b, 0x1839, 0x1839, 0x0002, 0x001b, 0x1846, + 0x1846, 0x0003, 0x08ac, 0x0000, 0x08af, 0x0001, 0x001b, 0x1835, + // Entry 11CC0 - 11CFF + 0x0002, 0x08b2, 0x08b6, 0x0002, 0x001b, 0x1839, 0x1839, 0x0002, + 0x001b, 0x185e, 0x185e, 0x0003, 0x08be, 0x08c1, 0x08c5, 0x0001, + 0x001b, 0x186f, 0x0002, 0x001b, 0xffff, 0x187a, 0x0002, 0x08c8, + 0x08cc, 0x0002, 0x001b, 0x18a6, 0x1892, 0x0002, 0x001b, 0x18d9, + 0x18ba, 0x0003, 0x08d4, 0x0000, 0x08d7, 0x0001, 0x001b, 0x18f8, + 0x0002, 0x08da, 0x08de, 0x0002, 0x001b, 0x1900, 0x1900, 0x0002, + 0x001b, 0x1911, 0x1911, 0x0003, 0x08e6, 0x0000, 0x08e9, 0x0001, + 0x001b, 0x192d, 0x0002, 0x08ec, 0x08f0, 0x0002, 0x001b, 0x1931, + // Entry 11D00 - 11D3F + 0x1931, 0x0002, 0x001b, 0x193e, 0x193e, 0x0003, 0x08f8, 0x08fb, + 0x08ff, 0x0001, 0x001b, 0x194f, 0x0002, 0x001b, 0xffff, 0x1968, + 0x0002, 0x0902, 0x0906, 0x0002, 0x001b, 0x1993, 0x1971, 0x0002, + 0x001b, 0x19e2, 0x19b5, 0x0003, 0x090e, 0x0000, 0x0911, 0x0001, + 0x001b, 0x1a0f, 0x0002, 0x0914, 0x0918, 0x0002, 0x001b, 0x1a19, + 0x1a19, 0x0002, 0x001b, 0x1a2c, 0x1a2c, 0x0003, 0x0920, 0x0000, + 0x0923, 0x0001, 0x001b, 0x1a4a, 0x0002, 0x0926, 0x092a, 0x0002, + 0x001b, 0x1a4e, 0x1a4e, 0x0002, 0x001b, 0x1a5b, 0x1a5b, 0x0001, + // Entry 11D40 - 11D7F + 0x0930, 0x0001, 0x001b, 0x1a6c, 0x0001, 0x0935, 0x0001, 0x001b, + 0x1a7e, 0x0001, 0x093a, 0x0001, 0x001b, 0x1a7e, 0x0004, 0x0942, + 0x0947, 0x094c, 0x095b, 0x0003, 0x0000, 0x1dc7, 0x234c, 0x2353, + 0x0003, 0x001b, 0x1a87, 0x1a94, 0x1aae, 0x0002, 0x0000, 0x094f, + 0x0003, 0x0000, 0x0956, 0x0953, 0x0001, 0x001b, 0x1ace, 0x0003, + 0x001b, 0xffff, 0x1b01, 0x1b28, 0x0002, 0x0b3f, 0x095e, 0x0003, + 0x0a01, 0x0aa0, 0x0962, 0x009d, 0x001b, 0x1b55, 0x1b71, 0x1b9a, + 0x1bc5, 0x1c20, 0x1ca0, 0x1d06, 0x1d92, 0x1e5c, 0x1f24, 0x1fc6, + // Entry 11D80 - 11DBF + 0x2030, 0x208c, 0x20e2, 0x214a, 0x21cd, 0x225b, 0x22c7, 0x234e, + 0x2403, 0x24c2, 0x256f, 0x2605, 0x2679, 0x26e1, 0x2741, 0x2757, + 0x278b, 0x27e3, 0x283f, 0x28b9, 0x28e3, 0x293d, 0x2993, 0x29f5, + 0x2a51, 0x2a7e, 0x2ab5, 0x2b24, 0x2b8e, 0x2bd6, 0x2bec, 0x2c15, + 0x2c59, 0x2cb3, 0x2cf8, 0x2d95, 0x2e0b, 0x2e6e, 0x2ef9, 0x2f6d, + 0x2fb1, 0x2fda, 0x301b, 0x3039, 0x3069, 0x30b9, 0x30de, 0x3136, + 0x31e9, 0x3277, 0x328b, 0x32d5, 0x3376, 0x33e2, 0x3426, 0x343a, + 0x345f, 0x3479, 0x34a8, 0x34d9, 0x3514, 0x356c, 0x35d0, 0x3630, + // Entry 11DC0 - 11DFF + 0x369a, 0x3728, 0x3757, 0x3794, 0x37dc, 0x3810, 0x3870, 0x388a, + 0x38c0, 0x396c, 0x39ab, 0x39ff, 0x3a19, 0x3a31, 0x3a49, 0x3a82, + 0x3ad6, 0x3b19, 0x3bc4, 0x3c55, 0x3cc7, 0x3d0f, 0x3d25, 0x3d3b, + 0x3d72, 0x3dff, 0x3e7c, 0x3eca, 0x3edc, 0x3f2d, 0x4001, 0x4071, + 0x40c9, 0x4119, 0x412d, 0x4179, 0x41e3, 0x4243, 0x429b, 0x42e6, + 0x4360, 0x4376, 0x438a, 0x43a6, 0x43bc, 0x43ea, 0x4454, 0x44b2, + 0x44f6, 0x4510, 0x452e, 0x4555, 0x457a, 0x4592, 0x45a4, 0x45cc, + 0x4614, 0x4632, 0x465e, 0x46a6, 0x46da, 0x473e, 0x4774, 0x47f0, + // Entry 11E00 - 11E3F + 0x486a, 0x48be, 0x48fa, 0x4976, 0x49d6, 0x49ea, 0x4a09, 0x4a4f, + 0x4acb, 0x3263, 0x3fad, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x3928, 0x009d, 0x001b, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1bfb, 0x1c8a, 0x1cec, 0x1d5a, 0x1e22, 0x1ef0, 0x1fac, 0x201a, + 0x207c, 0x20cc, 0x212e, 0x21a2, 0x2243, 0x22ab, 0x231f, 0x23cc, + 0x2491, 0x2544, 0x25e5, 0x2665, 0x26c1, 0xffff, 0xffff, 0x276f, + 0xffff, 0x2812, 0xffff, 0x28cf, 0x292b, 0x2981, 0x29d7, 0xffff, + 0xffff, 0x2a9b, 0x2b09, 0x2b7a, 0xffff, 0xffff, 0xffff, 0x2c3c, + // Entry 11E40 - 11E7F + 0xffff, 0x2ccf, 0x2d6a, 0xffff, 0x2e49, 0x2ed8, 0x2f5b, 0xffff, + 0xffff, 0xffff, 0xffff, 0x3051, 0xffff, 0xffff, 0x3103, 0x31bc, + 0xffff, 0xffff, 0x32a3, 0x3359, 0x33d0, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x3504, 0x3554, 0x35bc, 0x3618, 0x3680, + 0xffff, 0xffff, 0x3780, 0xffff, 0x37f0, 0xffff, 0xffff, 0x38a5, + 0xffff, 0x3991, 0xffff, 0xffff, 0xffff, 0xffff, 0x3a68, 0xffff, + 0x3ae8, 0x3b9b, 0x3c36, 0x3cb3, 0xffff, 0xffff, 0xffff, 0x3d4d, + 0x3ddc, 0x3e65, 0xffff, 0xffff, 0x3efd, 0x3fe1, 0x4061, 0x40b1, + // Entry 11E80 - 11EBF + 0xffff, 0xffff, 0x415d, 0x41d1, 0x4227, 0xffff, 0x42b9, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x43d0, 0x443e, 0x44a0, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x45b8, 0xffff, + 0xffff, 0x464a, 0xffff, 0x46b8, 0xffff, 0x4756, 0x47d0, 0x4850, + 0xffff, 0x48dc, 0x4956, 0xffff, 0xffff, 0xffff, 0x4a35, 0x4aa3, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x3916, 0x009d, 0x001b, 0xffff, 0xffff, 0xffff, 0xffff, 0x1c58, + 0x1cc9, 0x1d33, 0x1ddd, 0x1ea9, 0x1f6b, 0x1ff3, 0x2059, 0x20af, + // Entry 11EC0 - 11EFF + 0x210b, 0x2179, 0x220b, 0x2286, 0x22f6, 0x2390, 0x244d, 0x2506, + 0x25ad, 0x2638, 0x26a0, 0x2714, 0xffff, 0xffff, 0x27ba, 0xffff, + 0x287f, 0xffff, 0x290a, 0x2962, 0x29b8, 0x2a26, 0xffff, 0xffff, + 0x2ae2, 0x2b52, 0x2bb5, 0xffff, 0xffff, 0xffff, 0x2c89, 0xffff, + 0x2d34, 0x2dd3, 0xffff, 0x2ea6, 0x2f2d, 0x2f92, 0xffff, 0xffff, + 0xffff, 0xffff, 0x3094, 0xffff, 0xffff, 0x317c, 0x3229, 0xffff, + 0xffff, 0x331a, 0x33a6, 0x3407, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x3537, 0x3597, 0x35f7, 0x365b, 0x36e4, 0xffff, + // Entry 11F00 - 11F3F + 0xffff, 0x37bb, 0xffff, 0x3843, 0xffff, 0xffff, 0x38ee, 0xffff, + 0x39d8, 0xffff, 0xffff, 0xffff, 0xffff, 0x3aaf, 0xffff, 0x3b5d, + 0x3c00, 0x3c87, 0x3cee, 0xffff, 0xffff, 0xffff, 0x3daa, 0x3e35, + 0x3ea6, 0xffff, 0xffff, 0x3f70, 0x4034, 0x4094, 0x40f4, 0xffff, + 0xffff, 0x41a8, 0x4208, 0x4272, 0xffff, 0x4326, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x4417, 0x447d, 0x44d7, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x45f3, 0xffff, 0xffff, + 0x4685, 0xffff, 0x470f, 0xffff, 0x47a5, 0x4823, 0x4897, 0xffff, + // Entry 11F40 - 11F7F + 0x492b, 0x49a9, 0xffff, 0xffff, 0xffff, 0x4a7c, 0x4b06, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x394d, + 0x0003, 0x0b43, 0x0ba9, 0x0b76, 0x0031, 0x0007, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 11F80 - 11FBF + 0xffff, 0xffff, 0xffff, 0x0045, 0x004e, 0xffff, 0x0057, 0x0031, + 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0045, 0x004e, + 0xffff, 0x0057, 0x0031, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 11FC0 - 11FFF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0049, 0x0052, 0xffff, 0x005b, 0x0003, 0x0004, 0x02a4, + 0x0633, 0x0012, 0x0017, 0x0024, 0x0000, 0x0000, 0x0000, 0x0000, + 0x008f, 0x00ba, 0x0250, 0x0000, 0x0271, 0x0000, 0x0000, 0x0000, + // Entry 12000 - 1203F + 0x0000, 0x027e, 0x0000, 0x0296, 0x0005, 0x0000, 0x0000, 0x0000, + 0x0000, 0x001d, 0x0001, 0x001f, 0x0001, 0x0021, 0x0001, 0x0000, + 0x0000, 0x000a, 0x002f, 0x0000, 0x0000, 0x0000, 0x0000, 0x006d, + 0x0000, 0x007e, 0x0000, 0x0053, 0x0001, 0x0031, 0x0003, 0x0035, + 0x0000, 0x0044, 0x000d, 0x001c, 0xffff, 0x0000, 0x0004, 0x0008, + 0x000c, 0x0010, 0x0014, 0x0018, 0x001c, 0x0020, 0x0024, 0x0029, + 0x002e, 0x000d, 0x001c, 0xffff, 0x0033, 0x003f, 0x004c, 0x0058, + 0x0065, 0x0071, 0x007d, 0x008b, 0x0098, 0x00a4, 0x00b0, 0x00bf, + // Entry 12040 - 1207F + 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x005a, 0x0001, + 0x005c, 0x0001, 0x005e, 0x000d, 0x001c, 0xffff, 0x00cd, 0x00d1, + 0x00d4, 0x00da, 0x00e1, 0x00e8, 0x00ee, 0x00f4, 0x00f9, 0x0100, + 0x0108, 0x010c, 0x0004, 0x007b, 0x0075, 0x0072, 0x0078, 0x0001, + 0x001c, 0x0110, 0x0001, 0x001c, 0x0123, 0x0001, 0x001c, 0x0130, + 0x0001, 0x001c, 0x0139, 0x0004, 0x008c, 0x0086, 0x0083, 0x0089, + 0x0001, 0x001c, 0x013f, 0x0001, 0x001c, 0x013f, 0x0001, 0x0006, + 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, 0x0000, 0x0000, 0x0000, + // Entry 12080 - 120BF + 0x0000, 0x0000, 0x0098, 0x0000, 0x00a9, 0x0004, 0x00a6, 0x00a0, + 0x009d, 0x00a3, 0x0001, 0x000c, 0x0000, 0x0001, 0x000c, 0x0012, + 0x0001, 0x000c, 0x001e, 0x0001, 0x0013, 0x0203, 0x0004, 0x00b7, + 0x00b1, 0x00ae, 0x00b4, 0x0001, 0x001c, 0x013f, 0x0001, 0x001c, + 0x013f, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, + 0x00c3, 0x00fa, 0x012a, 0x0149, 0x01fd, 0x021d, 0x022e, 0x023f, + 0x0002, 0x00c6, 0x00e8, 0x0003, 0x00ca, 0x0000, 0x00d9, 0x000d, + 0x0006, 0xffff, 0x001e, 0x4144, 0x4148, 0x414c, 0x4150, 0x4154, + // Entry 120C0 - 120FF + 0x4158, 0x415c, 0x4160, 0x4164, 0x4168, 0x004a, 0x000d, 0x001c, + 0xffff, 0x014c, 0x0154, 0x015d, 0x0163, 0x0169, 0x016d, 0x0172, + 0x0177, 0x017e, 0x0188, 0x0190, 0x0199, 0x0002, 0x0000, 0x00eb, + 0x000d, 0x0000, 0xffff, 0x1e5d, 0x2364, 0x2357, 0x2366, 0x2357, + 0x1e5d, 0x1e5d, 0x2366, 0x235b, 0x236a, 0x236c, 0x236e, 0x0002, + 0x00fd, 0x011e, 0x0005, 0x0103, 0x0000, 0x0115, 0x0000, 0x010c, + 0x0007, 0x0000, 0x04bd, 0x04c1, 0x04c5, 0x04c9, 0x04cd, 0x04d1, + 0x04d5, 0x0007, 0x0017, 0x2d55, 0x0420, 0x2d6b, 0x2d6e, 0x2d71, + // Entry 12100 - 1213F + 0x042c, 0x042f, 0x0007, 0x001c, 0x01a2, 0x01a9, 0x01b0, 0x01b8, + 0x01c2, 0x01cb, 0x01d2, 0x0002, 0x0000, 0x0121, 0x0007, 0x0000, + 0x235b, 0x2357, 0x04dd, 0x2151, 0x04dd, 0x2364, 0x235b, 0x0002, + 0x012d, 0x013f, 0x0003, 0x0131, 0x0000, 0x0138, 0x0005, 0x0000, + 0xffff, 0x04e3, 0x04e6, 0x04e9, 0x04ec, 0x0005, 0x001c, 0xffff, + 0x01db, 0x01e7, 0x01f3, 0x01ff, 0x0002, 0x0000, 0x0142, 0x0005, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0002, 0x014c, + 0x01b7, 0x0003, 0x0150, 0x0173, 0x0194, 0x0008, 0x015c, 0x0163, + // Entry 12140 - 1217F + 0x0159, 0x0167, 0x016a, 0x016d, 0x0170, 0x0160, 0x0001, 0x001c, + 0x020b, 0x0002, 0x0000, 0x04ef, 0x23cd, 0x0001, 0x001c, 0x0214, + 0x0002, 0x0000, 0x04f2, 0x23d0, 0x0001, 0x001c, 0x0219, 0x0001, + 0x001c, 0x0228, 0x0001, 0x001c, 0x0239, 0x0001, 0x001c, 0x0248, + 0x0008, 0x017f, 0x0185, 0x017c, 0x0188, 0x018b, 0x018e, 0x0191, + 0x0182, 0x0001, 0x0006, 0x0c47, 0x0001, 0x0000, 0x1f9c, 0x0001, + 0x0000, 0x1f96, 0x0001, 0x0000, 0x21e4, 0x0001, 0x001c, 0x0219, + 0x0001, 0x001c, 0x0228, 0x0001, 0x001c, 0x0239, 0x0001, 0x001c, + // Entry 12180 - 121BF + 0x0248, 0x0008, 0x01a0, 0x01a7, 0x019d, 0x01ab, 0x01ae, 0x01b1, + 0x01b4, 0x01a4, 0x0001, 0x001c, 0x020b, 0x0002, 0x0000, 0x04ef, + 0x23cd, 0x0001, 0x001c, 0x0214, 0x0002, 0x0000, 0x04f2, 0x23d0, + 0x0001, 0x001c, 0x0219, 0x0001, 0x001c, 0x0228, 0x0001, 0x001c, + 0x0239, 0x0001, 0x001c, 0x0248, 0x0003, 0x01bb, 0x0000, 0x01dc, + 0x0008, 0x01c7, 0x01cd, 0x01c4, 0x01d0, 0x01d3, 0x01d6, 0x01d9, + 0x01ca, 0x0001, 0x001c, 0x020b, 0x0001, 0x0000, 0x04ef, 0x0001, + 0x001c, 0x0214, 0x0001, 0x0000, 0x04f2, 0x0001, 0x001c, 0x0251, + // Entry 121C0 - 121FF + 0x0001, 0x001c, 0x0259, 0x0001, 0x001c, 0x0263, 0x0001, 0x001c, + 0x026b, 0x0008, 0x01e8, 0x01ee, 0x01e5, 0x01f1, 0x01f4, 0x01f7, + 0x01fa, 0x01eb, 0x0001, 0x001c, 0x020b, 0x0001, 0x0000, 0x04ef, + 0x0001, 0x001c, 0x0214, 0x0001, 0x0000, 0x04f2, 0x0001, 0x001c, + 0x0251, 0x0001, 0x001c, 0x0259, 0x0001, 0x001c, 0x0263, 0x0001, + 0x001c, 0x026b, 0x0003, 0x020c, 0x0217, 0x0201, 0x0002, 0x0204, + 0x0208, 0x0002, 0x001c, 0x0271, 0x0291, 0x0002, 0x001c, 0x027f, + 0x029d, 0x0002, 0x020f, 0x0213, 0x0002, 0x0009, 0x0078, 0x577d, + // Entry 12200 - 1223F + 0x0002, 0x0000, 0x04f5, 0x04f9, 0x0001, 0x0219, 0x0002, 0x0002, + 0x049a, 0x4cf1, 0x0004, 0x022b, 0x0225, 0x0222, 0x0228, 0x0001, + 0x000c, 0x03c9, 0x0001, 0x000c, 0x03d9, 0x0001, 0x000c, 0x03e3, + 0x0001, 0x000c, 0x03ec, 0x0004, 0x023c, 0x0236, 0x0233, 0x0239, + 0x0001, 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, 0x0002, + 0x04fe, 0x0001, 0x0002, 0x0508, 0x0004, 0x024d, 0x0247, 0x0244, + 0x024a, 0x0001, 0x001c, 0x013f, 0x0001, 0x001c, 0x013f, 0x0001, + 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, 0x0000, 0x0000, + // Entry 12240 - 1227F + 0x0000, 0x0000, 0x0259, 0x0260, 0x0000, 0x9006, 0x0001, 0x025b, + 0x0001, 0x025d, 0x0001, 0x0000, 0x04ef, 0x0004, 0x026e, 0x0268, + 0x0265, 0x026b, 0x0001, 0x0006, 0x015b, 0x0001, 0x0002, 0x0033, + 0x0001, 0x0002, 0x003c, 0x0001, 0x0002, 0x003c, 0x0005, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0277, 0x0001, 0x0279, 0x0001, 0x027b, + 0x0001, 0x0000, 0x06c8, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0285, 0x0004, 0x0293, 0x028d, 0x028a, 0x0290, 0x0001, + 0x000c, 0x0000, 0x0001, 0x000c, 0x0012, 0x0001, 0x000c, 0x001e, + // Entry 12280 - 122BF + 0x0001, 0x0013, 0x0203, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, + 0x029c, 0x0001, 0x029e, 0x0001, 0x02a0, 0x0002, 0x0000, 0x1a20, + 0x23d3, 0x0041, 0x02e6, 0x02eb, 0x0000, 0x02f0, 0x0307, 0x0000, + 0x031e, 0x0335, 0x0000, 0x034c, 0x0363, 0x0000, 0x037a, 0x0395, + 0x0000, 0x03ac, 0x03b1, 0x0000, 0x03b6, 0x03cd, 0x0000, 0x03df, + 0x03e4, 0x0000, 0x03e9, 0x03ee, 0x0000, 0x03f3, 0x03f8, 0x0000, + 0x03fd, 0x0411, 0x0425, 0x0439, 0x044d, 0x0461, 0x0475, 0x0489, + 0x049d, 0x04b1, 0x04c5, 0x04d9, 0x04ed, 0x0501, 0x0515, 0x0529, + // Entry 122C0 - 122FF + 0x053d, 0x0551, 0x0565, 0x0579, 0x058d, 0x05a1, 0x05a7, 0x0000, + 0x05ad, 0x05c3, 0x0000, 0x05d5, 0x05eb, 0x0000, 0x05fd, 0x0613, + 0x0000, 0x0629, 0x062e, 0x0001, 0x02e8, 0x0001, 0x0001, 0x0040, + 0x0001, 0x02ed, 0x0001, 0x0001, 0x0040, 0x0003, 0x02f4, 0x02f7, + 0x02fc, 0x0001, 0x001c, 0x02a8, 0x0003, 0x0000, 0x1a3e, 0x1a48, + 0x1a52, 0x0002, 0x02ff, 0x0303, 0x0002, 0x001c, 0x02b9, 0x02ad, + 0x0002, 0x001c, 0x02d3, 0x02c6, 0x0003, 0x030b, 0x030e, 0x0313, + 0x0001, 0x001c, 0x02e1, 0x0003, 0x001c, 0x02e5, 0x02ee, 0x02f7, + // Entry 12300 - 1233F + 0x0002, 0x0316, 0x031a, 0x0002, 0x001c, 0x0300, 0x0300, 0x0002, + 0x001c, 0x030b, 0x030b, 0x0003, 0x0322, 0x0325, 0x032a, 0x0001, + 0x001c, 0x0317, 0x0003, 0x0000, 0x1a72, 0x1a7f, 0x1a8c, 0x0002, + 0x032d, 0x0331, 0x0002, 0x001c, 0x032e, 0x031f, 0x0002, 0x001c, + 0x034e, 0x033e, 0x0003, 0x0339, 0x033c, 0x0341, 0x0001, 0x001c, + 0x035f, 0x0003, 0x001c, 0x0364, 0x036e, 0x0378, 0x0002, 0x0344, + 0x0348, 0x0002, 0x001c, 0x038e, 0x0382, 0x0002, 0x001c, 0x03a8, + 0x039b, 0x0003, 0x0350, 0x0353, 0x0358, 0x0001, 0x001c, 0x03b6, + // Entry 12340 - 1237F + 0x0003, 0x0000, 0x1aad, 0x1ab8, 0x1ac3, 0x0002, 0x035b, 0x035f, + 0x0002, 0x001c, 0x03c9, 0x03bc, 0x0002, 0x001c, 0x03e5, 0x03d7, + 0x0003, 0x0367, 0x036a, 0x036f, 0x0001, 0x001c, 0x03f4, 0x0003, + 0x001c, 0x03f8, 0x0401, 0x040a, 0x0002, 0x0372, 0x0376, 0x0002, + 0x001c, 0x0413, 0x0413, 0x0002, 0x001c, 0x041e, 0x041e, 0x0004, + 0x037f, 0x0382, 0x0387, 0x0392, 0x0001, 0x0001, 0x019c, 0x0003, + 0x0000, 0x1ae1, 0x1aeb, 0x1af5, 0x0002, 0x038a, 0x038e, 0x0002, + 0x001c, 0x0436, 0x042a, 0x0002, 0x001c, 0x0450, 0x0443, 0x0001, + // Entry 12380 - 123BF + 0x0000, 0x1b0d, 0x0003, 0x0399, 0x039c, 0x03a1, 0x0001, 0x0001, + 0x0213, 0x0003, 0x001c, 0x045e, 0x0467, 0x0470, 0x0002, 0x03a4, + 0x03a8, 0x0002, 0x001c, 0x0479, 0x0479, 0x0002, 0x001c, 0x0484, + 0x0484, 0x0001, 0x03ae, 0x0001, 0x001c, 0x0490, 0x0001, 0x03b3, + 0x0001, 0x001c, 0x049e, 0x0003, 0x03ba, 0x03bd, 0x03c2, 0x0001, + 0x001c, 0x04a9, 0x0003, 0x0000, 0x1b2f, 0x1b39, 0x1b3f, 0x0002, + 0x03c5, 0x03c9, 0x0002, 0x001c, 0x04b8, 0x04ad, 0x0002, 0x001c, + 0x04d0, 0x04c4, 0x0003, 0x03d1, 0x0000, 0x03d4, 0x0001, 0x001c, + // Entry 123C0 - 123FF + 0x04a9, 0x0002, 0x03d7, 0x03db, 0x0002, 0x001c, 0x04b8, 0x04ad, + 0x0002, 0x001c, 0x04d0, 0x04c4, 0x0001, 0x03e1, 0x0001, 0x001c, + 0x04dd, 0x0001, 0x03e6, 0x0001, 0x001c, 0x04e9, 0x0001, 0x03eb, + 0x0001, 0x001c, 0x04f4, 0x0001, 0x03f0, 0x0001, 0x001c, 0x0504, + 0x0001, 0x03f5, 0x0001, 0x001c, 0x050f, 0x0001, 0x03fa, 0x0001, + 0x001c, 0x0524, 0x0003, 0x0000, 0x0401, 0x0406, 0x0003, 0x0000, + 0x1b83, 0x1b8f, 0x1b9b, 0x0002, 0x0409, 0x040d, 0x0002, 0x001c, + 0x0540, 0x0532, 0x0002, 0x001c, 0x055e, 0x054f, 0x0003, 0x0000, + // Entry 12400 - 1243F + 0x0415, 0x041a, 0x0003, 0x001c, 0x056e, 0x0578, 0x0582, 0x0002, + 0x041d, 0x0421, 0x0002, 0x001c, 0x058c, 0x058c, 0x0002, 0x001c, + 0x0598, 0x0598, 0x0003, 0x0000, 0x0429, 0x042e, 0x0003, 0x001c, + 0x05a5, 0x05ad, 0x05b5, 0x0002, 0x0431, 0x0435, 0x0002, 0x001c, + 0x05bd, 0x05bd, 0x0002, 0x001c, 0x05c7, 0x05c7, 0x0003, 0x0000, + 0x043d, 0x0442, 0x0003, 0x0000, 0x1bc1, 0x1bcd, 0x1bd9, 0x0002, + 0x0445, 0x0449, 0x0002, 0x001c, 0x05e0, 0x05d2, 0x0002, 0x001c, + 0x05fe, 0x05ef, 0x0003, 0x0000, 0x0451, 0x0456, 0x0003, 0x001c, + // Entry 12440 - 1247F + 0x060e, 0x0618, 0x0622, 0x0002, 0x0459, 0x045d, 0x0002, 0x001c, + 0x062c, 0x062c, 0x0002, 0x001c, 0x0638, 0x0638, 0x0003, 0x0000, + 0x0465, 0x046a, 0x0003, 0x001c, 0x0645, 0x064c, 0x0653, 0x0002, + 0x046d, 0x0471, 0x0002, 0x001c, 0x065a, 0x065a, 0x0002, 0x001c, + 0x0663, 0x0663, 0x0003, 0x0000, 0x0479, 0x047e, 0x0003, 0x0000, + 0x1bff, 0x1c0c, 0x1c19, 0x0002, 0x0481, 0x0485, 0x0002, 0x001c, + 0x067c, 0x066d, 0x0002, 0x001c, 0x069c, 0x068c, 0x0003, 0x0000, + 0x048d, 0x0492, 0x0003, 0x001c, 0x06ad, 0x06b7, 0x06c1, 0x0002, + // Entry 12480 - 124BF + 0x0495, 0x0499, 0x0002, 0x001c, 0x06cb, 0x06cb, 0x0002, 0x001c, + 0x06d7, 0x06d7, 0x0003, 0x0000, 0x04a1, 0x04a6, 0x0003, 0x001c, + 0x06e4, 0x06ec, 0x06f4, 0x0002, 0x04a9, 0x04ad, 0x0002, 0x001c, + 0x06fc, 0x06fc, 0x0002, 0x001c, 0x0706, 0x0706, 0x0003, 0x0000, + 0x04b5, 0x04ba, 0x0003, 0x0000, 0x1c42, 0x1c51, 0x1c60, 0x0002, + 0x04bd, 0x04c1, 0x0002, 0x001c, 0x0722, 0x0711, 0x0002, 0x001c, + 0x0746, 0x0734, 0x0003, 0x0000, 0x04c9, 0x04ce, 0x0003, 0x001c, + 0x0759, 0x0763, 0x076d, 0x0002, 0x04d1, 0x04d5, 0x0002, 0x001c, + // Entry 124C0 - 124FF + 0x0777, 0x0777, 0x0002, 0x001c, 0x0783, 0x0783, 0x0003, 0x0000, + 0x04dd, 0x04e2, 0x0003, 0x001c, 0x0790, 0x0797, 0x079e, 0x0002, + 0x04e5, 0x04e9, 0x0002, 0x001c, 0x07a5, 0x07a5, 0x0002, 0x001c, + 0x07ae, 0x07ae, 0x0003, 0x0000, 0x04f1, 0x04f6, 0x0003, 0x0000, + 0x1c8f, 0x1c9d, 0x1cab, 0x0002, 0x04f9, 0x04fd, 0x0002, 0x001c, + 0x07c8, 0x07b8, 0x0002, 0x001c, 0x07ea, 0x07d9, 0x0003, 0x0000, + 0x0505, 0x050a, 0x0003, 0x001c, 0x07fc, 0x0806, 0x0810, 0x0002, + 0x050d, 0x0511, 0x0002, 0x001c, 0x081a, 0x081a, 0x0002, 0x001c, + // Entry 12500 - 1253F + 0x0826, 0x0826, 0x0003, 0x0000, 0x0519, 0x051e, 0x0003, 0x001c, + 0x0833, 0x083b, 0x0843, 0x0002, 0x0521, 0x0525, 0x0002, 0x001c, + 0x084b, 0x084b, 0x0002, 0x001c, 0x0855, 0x0855, 0x0003, 0x0000, + 0x052d, 0x0532, 0x0003, 0x0000, 0x1cd7, 0x1ce3, 0x1cef, 0x0002, + 0x0535, 0x0539, 0x0002, 0x001c, 0x086e, 0x0860, 0x0002, 0x001c, + 0x088c, 0x087d, 0x0003, 0x0000, 0x0541, 0x0546, 0x0003, 0x001c, + 0x089c, 0x08a6, 0x08b0, 0x0002, 0x0549, 0x054d, 0x0002, 0x001c, + 0x08ba, 0x08ba, 0x0002, 0x001c, 0x08c6, 0x08c6, 0x0003, 0x0000, + // Entry 12540 - 1257F + 0x0555, 0x055a, 0x0003, 0x001c, 0x08d3, 0x08da, 0x08e1, 0x0002, + 0x055d, 0x0561, 0x0002, 0x001c, 0x08e8, 0x08e8, 0x0002, 0x001c, + 0x08f1, 0x08f1, 0x0003, 0x0000, 0x0569, 0x056e, 0x0003, 0x0000, + 0x1d15, 0x1d23, 0x1d31, 0x0002, 0x0571, 0x0575, 0x0002, 0x001c, + 0x090b, 0x08fb, 0x0002, 0x001c, 0x092d, 0x091c, 0x0003, 0x0000, + 0x057d, 0x0582, 0x0003, 0x001c, 0x093f, 0x0949, 0x0953, 0x0002, + 0x0585, 0x0589, 0x0002, 0x001c, 0x095d, 0x095d, 0x0002, 0x001c, + 0x0969, 0x0969, 0x0003, 0x0000, 0x0591, 0x0596, 0x0003, 0x001c, + // Entry 12580 - 125BF + 0x0976, 0x097e, 0x0986, 0x0002, 0x0599, 0x059d, 0x0002, 0x001c, + 0x098e, 0x098e, 0x0002, 0x001c, 0x0998, 0x0998, 0x0001, 0x05a3, + 0x0002, 0x0007, 0x0892, 0x2485, 0x0001, 0x05a9, 0x0002, 0x0007, + 0x0892, 0x2485, 0x0003, 0x05b1, 0x05b4, 0x05b8, 0x0001, 0x001c, + 0x09a3, 0x0002, 0x0000, 0xffff, 0x1d6c, 0x0002, 0x05bb, 0x05bf, + 0x0002, 0x001c, 0x09b4, 0x09a8, 0x0002, 0x001c, 0x09ce, 0x09c1, + 0x0003, 0x05c7, 0x0000, 0x05ca, 0x0001, 0x001c, 0x09dc, 0x0002, + 0x05cd, 0x05d1, 0x0002, 0x001c, 0x09e0, 0x09e0, 0x0002, 0x001c, + // Entry 125C0 - 125FF + 0x09eb, 0x09eb, 0x0003, 0x05d9, 0x05dc, 0x05e0, 0x0001, 0x001c, + 0x09f7, 0x0002, 0x0000, 0xffff, 0x1d8b, 0x0002, 0x05e3, 0x05e7, + 0x0002, 0x001c, 0x0a0c, 0x09fe, 0x0002, 0x001c, 0x0a2a, 0x0a1b, + 0x0003, 0x05ef, 0x0000, 0x05f2, 0x0001, 0x0001, 0x07c5, 0x0002, + 0x05f5, 0x05f9, 0x0002, 0x001c, 0x0a3a, 0x0a3a, 0x0002, 0x001c, + 0x0a46, 0x0a46, 0x0003, 0x0601, 0x0604, 0x0608, 0x0001, 0x001c, + 0x0a53, 0x0002, 0x000d, 0xffff, 0x327f, 0x0002, 0x060b, 0x060f, + 0x0002, 0x001c, 0x0a68, 0x0a5a, 0x0002, 0x001c, 0x0a86, 0x0a77, + // Entry 12600 - 1263F + 0x0003, 0x0617, 0x061a, 0x061e, 0x0001, 0x001c, 0x0a96, 0x0002, + 0x000d, 0xffff, 0x327f, 0x0002, 0x0621, 0x0625, 0x0002, 0x001c, + 0x0a9b, 0x0a9b, 0x0002, 0x001c, 0x0aa7, 0x0aa7, 0x0001, 0x062b, + 0x0001, 0x001c, 0x0ab4, 0x0001, 0x0630, 0x0001, 0x0016, 0x0d68, + 0x0004, 0x0638, 0x063c, 0x0641, 0x0666, 0x0002, 0x0000, 0x1dc7, + 0x234c, 0x0003, 0x001c, 0x0abe, 0x0ac7, 0x0ad9, 0x0002, 0x0644, + 0x065a, 0x0003, 0x0648, 0x0654, 0x064e, 0x0004, 0x0006, 0xffff, + 0xffff, 0xffff, 0x1f5f, 0x0004, 0x0006, 0xffff, 0xffff, 0xffff, + // Entry 12640 - 1267F + 0x1f5f, 0x0004, 0x0006, 0xffff, 0xffff, 0xffff, 0x1f63, 0x0003, + 0x0000, 0x0661, 0x065e, 0x0001, 0x001c, 0x0aeb, 0x0003, 0x001c, + 0xffff, 0x0b06, 0x0b1a, 0x0002, 0x084d, 0x0669, 0x0003, 0x066d, + 0x07ad, 0x070d, 0x009e, 0x001c, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0bad, 0x0bf0, 0x0c5a, 0x0c8e, 0x0cc7, 0x0d00, 0x0d3c, 0x0d75, + 0x0da9, 0x0e3e, 0x0e77, 0x0eb4, 0x0f09, 0x0f40, 0x0f7c, 0x0fd5, + 0x1047, 0x10a0, 0x10f9, 0x1139, 0x116d, 0xffff, 0xffff, 0x11c6, + 0xffff, 0x1217, 0xffff, 0x1279, 0x12b2, 0x12e3, 0x1316, 0xffff, + // Entry 12680 - 126BF + 0xffff, 0x137f, 0x13b9, 0x1404, 0xffff, 0xffff, 0xffff, 0x1467, + 0xffff, 0x14bd, 0x150f, 0xffff, 0x157f, 0x15d1, 0x1623, 0xffff, + 0xffff, 0xffff, 0xffff, 0x16a1, 0xffff, 0xffff, 0x1701, 0x174d, + 0xffff, 0xffff, 0x17cb, 0x181c, 0x1859, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1901, 0x1931, 0x1968, 0x199e, 0x19d1, + 0xffff, 0xffff, 0x1a65, 0xffff, 0x1aa7, 0xffff, 0xffff, 0x1b17, + 0xffff, 0x1b9d, 0xffff, 0xffff, 0xffff, 0xffff, 0x1c15, 0xffff, + 0x1c5e, 0x1cb2, 0x1d03, 0x1d46, 0xffff, 0xffff, 0xffff, 0x1d9d, + // Entry 126C0 - 126FF + 0x1de6, 0x1e2b, 0xffff, 0xffff, 0x1e91, 0x1f07, 0x1f4a, 0x1f78, + 0xffff, 0xffff, 0x1fd3, 0x200d, 0x203b, 0xffff, 0x2090, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2173, 0x21ad, 0x21e1, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2289, 0xffff, + 0xffff, 0x22dc, 0xffff, 0x2318, 0xffff, 0x236a, 0x23a1, 0x23e1, + 0xffff, 0x2427, 0x246a, 0xffff, 0xffff, 0xffff, 0x24d9, 0x2510, + 0xffff, 0xffff, 0x0b2e, 0x0c26, 0x0dd9, 0x0e0a, 0xffff, 0xffff, + 0x1b56, 0x211c, 0x009e, 0x001c, 0x0b5c, 0x0b6d, 0x0b81, 0x0b92, + // Entry 12700 - 1273F + 0x0bbe, 0x0bfc, 0x0c66, 0x0c9b, 0x0cd4, 0x0d0e, 0x0d49, 0x0d81, + 0x0db3, 0x0e4b, 0x0e86, 0x0ecb, 0x0f16, 0x0f4e, 0x0f93, 0x0ff5, + 0x105e, 0x10b7, 0x1109, 0x1145, 0x117d, 0x11ad, 0x11b9, 0x11d4, + 0x1200, 0x1227, 0x1262, 0x1286, 0x12bd, 0x12ee, 0x1326, 0x1356, + 0x136c, 0x138d, 0x13cb, 0x140e, 0x1434, 0x143f, 0x1457, 0x147a, + 0x14b0, 0x14d3, 0x1525, 0x1561, 0x1595, 0x15e7, 0x162d, 0x1651, + 0x1664, 0x1685, 0x1694, 0x16ae, 0x16d8, 0x16ed, 0x1715, 0x1761, + 0x17ac, 0x17bf, 0x17e0, 0x182b, 0x1863, 0x1887, 0x189b, 0x18ad, + // Entry 12740 - 1277F + 0x18bc, 0x18d3, 0x18ea, 0x190b, 0x193e, 0x1974, 0x19a9, 0x19ef, + 0x1a3b, 0x1a50, 0x1a71, 0x1a9b, 0x1ab8, 0x1aea, 0x1b05, 0x1b26, + 0x1b87, 0x1baa, 0x1bd4, 0x1be2, 0x1bf0, 0x1bff, 0x1c24, 0x1c52, + 0x1c74, 0x1cc7, 0x1d14, 0x1d52, 0x1d7a, 0x1d87, 0x1d92, 0x1db0, + 0x1df7, 0x1e3d, 0x1e73, 0x1e7d, 0x1eaa, 0x1f18, 0x1f54, 0x1f86, + 0x1fb2, 0x1fbd, 0x1fe1, 0x2017, 0x204b, 0x207b, 0x20ab, 0x20f3, + 0x2101, 0x210d, 0x2159, 0x2166, 0x2181, 0x21b9, 0x21ec, 0x2214, + 0x2224, 0x223c, 0x2251, 0x2264, 0x2272, 0x227d, 0x2295, 0x22bf, + // Entry 12780 - 127BF + 0x22cf, 0x22e7, 0x230d, 0x232a, 0x235e, 0x2377, 0x23b1, 0x23ee, + 0x2418, 0x2438, 0x2479, 0x24a7, 0x24b3, 0x24c4, 0x24e6, 0x2523, + 0x1799, 0x1eec, 0x0b38, 0x0c32, 0x0de4, 0x0e16, 0x1257, 0x1afa, + 0x1b61, 0x212b, 0x009e, 0x001c, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0bd8, 0x0c11, 0x0c7b, 0x0cb1, 0x0cea, 0x0d25, 0x0d5f, 0x0d96, + 0x0dc6, 0x0e61, 0x0e9e, 0x0eeb, 0x0f2c, 0x0f65, 0x0fb4, 0x101e, + 0x107f, 0x10d8, 0x1122, 0x115a, 0x1196, 0xffff, 0xffff, 0x11eb, + 0xffff, 0x1240, 0xffff, 0x129c, 0x12d1, 0x1302, 0x133f, 0xffff, + // Entry 127C0 - 127FF + 0xffff, 0x13a4, 0x13e6, 0x1421, 0xffff, 0xffff, 0xffff, 0x1496, + 0xffff, 0x14f2, 0x1544, 0xffff, 0x15b4, 0x1606, 0x1640, 0xffff, + 0xffff, 0xffff, 0xffff, 0x16c4, 0xffff, 0xffff, 0x1732, 0x177e, + 0xffff, 0xffff, 0x17fe, 0x1843, 0x1876, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x191e, 0x1954, 0x1989, 0x19bd, 0x1a16, + 0xffff, 0xffff, 0x1a86, 0xffff, 0x1ad2, 0xffff, 0xffff, 0x1b3e, + 0xffff, 0x1bc0, 0xffff, 0xffff, 0xffff, 0xffff, 0x1c3c, 0xffff, + 0x1c93, 0x1ce5, 0x1d2e, 0x1d67, 0xffff, 0xffff, 0xffff, 0x1dcc, + // Entry 12800 - 1283F + 0x1e11, 0x1e58, 0xffff, 0xffff, 0x1ecc, 0x1f32, 0x1f67, 0x1f9d, + 0xffff, 0xffff, 0x1ff8, 0x202a, 0x2064, 0xffff, 0x20cf, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2198, 0x21ce, 0x2200, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x22aa, 0xffff, + 0xffff, 0x22fb, 0xffff, 0x2345, 0xffff, 0x238d, 0x23ca, 0x2404, + 0xffff, 0x2452, 0x2491, 0xffff, 0xffff, 0xffff, 0x24fc, 0x253f, + 0xffff, 0xffff, 0x0b4b, 0x0c47, 0x0df8, 0x0e2b, 0xffff, 0xffff, + 0x1b75, 0x2143, 0x0003, 0x0851, 0x08d3, 0x0892, 0x003f, 0x0007, + // Entry 12840 - 1287F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0x000e, + 0x0019, 0x0024, 0x002f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x003a, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0064, 0x003f, + // Entry 12880 - 128BF + 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0004, 0xffff, + 0x0011, 0x001c, 0x0027, 0x0032, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x003d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x248b, 0xffff, 0xffff, 0xffff, 0xffff, 0x0068, + // Entry 128C0 - 128FF + 0x003f, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0009, + 0xffff, 0x0015, 0x0020, 0x002b, 0x0036, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0041, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 12900 - 1293F + 0x006d, 0x0003, 0x0004, 0x005b, 0x0265, 0x0008, 0x0000, 0x000d, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0027, 0x0041, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, 0x0000, 0x0004, + 0x0024, 0x001e, 0x001b, 0x0021, 0x0001, 0x001d, 0x0000, 0x0001, + 0x001d, 0x0012, 0x0001, 0x001d, 0x001e, 0x0001, 0x001d, 0x0026, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0030, 0x0000, + 0x0000, 0x0004, 0x003e, 0x0038, 0x0035, 0x003b, 0x0001, 0x0006, + 0x000d, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, + // Entry 12940 - 1297F + 0x0002, 0x0587, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x004a, 0x0000, 0x0000, 0x0004, 0x0058, 0x0052, 0x004f, 0x0055, + 0x0001, 0x0006, 0x015b, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, + 0x003c, 0x0001, 0x0002, 0x08e8, 0x003f, 0x0000, 0x0000, 0x0000, + 0x0000, 0x009b, 0x00ad, 0x0000, 0x00bc, 0x00ce, 0x0000, 0x00e0, + 0x00f2, 0x0000, 0x0104, 0x0116, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0128, 0x0137, 0x0000, 0x0146, + // Entry 12980 - 129BF + 0x0155, 0x0000, 0x0164, 0x0173, 0x0000, 0x0182, 0x0191, 0x0000, + 0x01a0, 0x01af, 0x0000, 0x01be, 0x01cd, 0x0000, 0x01dc, 0x01eb, + 0x0000, 0x01fa, 0x0000, 0x0000, 0x01ff, 0x0211, 0x0000, 0x0220, + 0x0232, 0x0000, 0x0244, 0x0256, 0x0003, 0x009f, 0x0000, 0x00a2, + 0x0001, 0x001d, 0x002e, 0x0002, 0x00a5, 0x00a9, 0x0002, 0x001d, + 0x0031, 0x0031, 0x0002, 0x001d, 0x003b, 0x003b, 0x0003, 0x0000, + 0x0000, 0x00b1, 0x0002, 0x00b4, 0x00b8, 0x0002, 0x001d, 0x0031, + 0x0031, 0x0002, 0x001d, 0x003b, 0x003b, 0x0003, 0x00c0, 0x0000, + // Entry 129C0 - 129FF + 0x00c3, 0x0001, 0x001d, 0x0046, 0x0002, 0x00c6, 0x00ca, 0x0002, + 0x001d, 0x004a, 0x004a, 0x0002, 0x001d, 0x0055, 0x0055, 0x0003, + 0x00d2, 0x0000, 0x00d5, 0x0001, 0x001d, 0x0046, 0x0002, 0x00d8, + 0x00dc, 0x0002, 0x001d, 0x004a, 0x004a, 0x0002, 0x001d, 0x0055, + 0x0055, 0x0003, 0x00e4, 0x0000, 0x00e7, 0x0001, 0x001d, 0x0061, + 0x0002, 0x00ea, 0x00ee, 0x0002, 0x001d, 0x0064, 0x0064, 0x0002, + 0x001d, 0x006e, 0x006e, 0x0003, 0x00f6, 0x0000, 0x00f9, 0x0001, + 0x001d, 0x0061, 0x0002, 0x00fc, 0x0100, 0x0002, 0x001d, 0x0064, + // Entry 12A00 - 12A3F + 0x0064, 0x0002, 0x001d, 0x006e, 0x006e, 0x0003, 0x0108, 0x0000, + 0x010b, 0x0001, 0x001d, 0x0079, 0x0002, 0x010e, 0x0112, 0x0002, + 0x001d, 0x007c, 0x007c, 0x0002, 0x001d, 0x0086, 0x0086, 0x0003, + 0x011a, 0x0000, 0x011d, 0x0001, 0x001d, 0x0079, 0x0002, 0x0120, + 0x0124, 0x0002, 0x001d, 0x007c, 0x007c, 0x0002, 0x001d, 0x0086, + 0x0086, 0x0003, 0x0000, 0x0000, 0x012c, 0x0002, 0x012f, 0x0133, + 0x0002, 0x001c, 0x0540, 0x0532, 0x0002, 0x001c, 0x055e, 0x054f, + 0x0003, 0x0000, 0x0000, 0x013b, 0x0002, 0x013e, 0x0142, 0x0002, + // Entry 12A40 - 12A7F + 0x001c, 0x0540, 0x0532, 0x0002, 0x001c, 0x055e, 0x054f, 0x0003, + 0x0000, 0x0000, 0x014a, 0x0002, 0x014d, 0x0151, 0x0002, 0x001c, + 0x05e0, 0x05d2, 0x0002, 0x001c, 0x05fe, 0x05ef, 0x0003, 0x0000, + 0x0000, 0x0159, 0x0002, 0x015c, 0x0160, 0x0002, 0x001c, 0x05e0, + 0x05d2, 0x0002, 0x001c, 0x05fe, 0x05ef, 0x0003, 0x0000, 0x0000, + 0x0168, 0x0002, 0x016b, 0x016f, 0x0002, 0x001c, 0x067c, 0x066d, + 0x0002, 0x001c, 0x069c, 0x068c, 0x0003, 0x0000, 0x0000, 0x0177, + 0x0002, 0x017a, 0x017e, 0x0002, 0x001c, 0x067c, 0x066d, 0x0002, + // Entry 12A80 - 12ABF + 0x001c, 0x069c, 0x068c, 0x0003, 0x0000, 0x0000, 0x0186, 0x0002, + 0x0189, 0x018d, 0x0002, 0x001c, 0x0722, 0x0711, 0x0002, 0x001c, + 0x0746, 0x0734, 0x0003, 0x0000, 0x0000, 0x0195, 0x0002, 0x0198, + 0x019c, 0x0002, 0x001c, 0x0722, 0x0711, 0x0002, 0x001c, 0x0746, + 0x0734, 0x0003, 0x0000, 0x0000, 0x01a4, 0x0002, 0x01a7, 0x01ab, + 0x0002, 0x001c, 0x07c8, 0x07b8, 0x0002, 0x001c, 0x07ea, 0x07d9, + 0x0003, 0x0000, 0x0000, 0x01b3, 0x0002, 0x01b6, 0x01ba, 0x0002, + 0x001c, 0x07c8, 0x07b8, 0x0002, 0x001c, 0x07ea, 0x07d9, 0x0003, + // Entry 12AC0 - 12AFF + 0x0000, 0x0000, 0x01c2, 0x0002, 0x01c5, 0x01c9, 0x0002, 0x001c, + 0x086e, 0x0860, 0x0002, 0x001c, 0x088c, 0x087d, 0x0003, 0x0000, + 0x0000, 0x01d1, 0x0002, 0x01d4, 0x01d8, 0x0002, 0x001c, 0x086e, + 0x0860, 0x0002, 0x001c, 0x088c, 0x087d, 0x0003, 0x0000, 0x0000, + 0x01e0, 0x0002, 0x01e3, 0x01e7, 0x0002, 0x001c, 0x090b, 0x08fb, + 0x0002, 0x001c, 0x092d, 0x091c, 0x0003, 0x0000, 0x0000, 0x01ef, + 0x0002, 0x01f2, 0x01f6, 0x0002, 0x001c, 0x090b, 0x08fb, 0x0002, + 0x001c, 0x092d, 0x091c, 0x0001, 0x01fc, 0x0001, 0x0007, 0x2485, + // Entry 12B00 - 12B3F + 0x0003, 0x0203, 0x0000, 0x0206, 0x0001, 0x001d, 0x0091, 0x0002, + 0x0209, 0x020d, 0x0002, 0x001d, 0x0094, 0x0094, 0x0002, 0x001d, + 0x009e, 0x009e, 0x0003, 0x0000, 0x0000, 0x0215, 0x0002, 0x0218, + 0x021c, 0x0002, 0x001d, 0x0094, 0x0094, 0x0002, 0x001d, 0x009e, + 0x009e, 0x0003, 0x0224, 0x0000, 0x0227, 0x0001, 0x000b, 0x1250, + 0x0002, 0x022a, 0x022e, 0x0002, 0x001d, 0x00a9, 0x00a9, 0x0002, + 0x001d, 0x00b4, 0x00b4, 0x0003, 0x0236, 0x0000, 0x0239, 0x0001, + 0x000b, 0x1250, 0x0002, 0x023c, 0x0240, 0x0002, 0x001d, 0x00a9, + // Entry 12B40 - 12B7F + 0x00a9, 0x0002, 0x001d, 0x00b4, 0x00b4, 0x0003, 0x0248, 0x0000, + 0x024b, 0x0001, 0x001d, 0x00c0, 0x0002, 0x024e, 0x0252, 0x0002, + 0x001d, 0x00c4, 0x00c4, 0x0002, 0x001d, 0x00cf, 0x00cf, 0x0003, + 0x0000, 0x0000, 0x025a, 0x0002, 0x025d, 0x0261, 0x0002, 0x001d, + 0x00c4, 0x00c4, 0x0002, 0x001d, 0x00cf, 0x00cf, 0x0004, 0x0000, + 0x0000, 0x026a, 0x0282, 0x0001, 0x026c, 0x0003, 0x0270, 0x027c, + 0x0276, 0x0004, 0x001d, 0xffff, 0xffff, 0xffff, 0x00db, 0x0004, + 0x001d, 0xffff, 0xffff, 0xffff, 0x00db, 0x0004, 0x001d, 0xffff, + // Entry 12B80 - 12BBF + 0xffff, 0xffff, 0x00db, 0x0001, 0x0284, 0x0003, 0x0288, 0x030a, + 0x02c9, 0x003f, 0x001d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x00db, 0xffff, 0x00db, 0x00db, 0x00db, 0x00db, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x00db, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 12BC0 - 12BFF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x00db, 0x003f, 0x001d, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x00db, 0xffff, 0x00db, 0x00db, 0x00db, 0x00db, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x00db, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 12C00 - 12C3F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x00db, 0x003f, 0x001d, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x00db, 0xffff, 0x00db, 0x00db, 0x00db, 0x00db, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x00db, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 12C40 - 12C7F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x00db, 0x0003, 0x0004, 0x0000, 0x0026, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000d, 0x0007, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0015, 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, 0x0000, + 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, + 0x0000, 0x0546, 0x0004, 0x0000, 0x0000, 0x0000, 0x002b, 0x0001, + 0x002d, 0x0003, 0x0031, 0x0097, 0x0064, 0x0031, 0x0007, 0xffff, + // Entry 12C80 - 12CBF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0045, 0x004e, 0xffff, 0x0057, + 0x0031, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 12CC0 - 12CFF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0045, + 0x004e, 0xffff, 0x0057, 0x0031, 0x0007, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 12D00 - 12D3F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0049, 0x0052, 0xffff, 0x005b, 0x0001, 0x0002, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000b, 0x0007, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0013, 0x0004, 0x0021, 0x001b, 0x0018, 0x001e, 0x0001, 0x0000, + 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, + 0x0000, 0x0546, 0x0003, 0x0004, 0x013e, 0x036c, 0x000b, 0x0000, + // Entry 12D40 - 12D7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x0019, 0x0000, + 0x0000, 0x0135, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0008, 0x0022, 0x0047, 0x0000, 0x008c, + 0x0000, 0x0130, 0x0000, 0x0000, 0x0002, 0x0025, 0x0036, 0x0001, + 0x0027, 0x000d, 0x0000, 0xffff, 0x1e22, 0x23da, 0x23df, 0x23e4, + 0x23e9, 0x1e3a, 0x1e3f, 0x23ed, 0x23f2, 0x23f7, 0x23fc, 0x2401, + 0x0001, 0x0038, 0x000d, 0x0000, 0xffff, 0x1e22, 0x23da, 0x23df, + 0x23e4, 0x23e9, 0x1e3a, 0x1e3f, 0x23ed, 0x23f2, 0x23f7, 0x23fc, + // Entry 12D80 - 12DBF + 0x2401, 0x0002, 0x004a, 0x006b, 0x0005, 0x0050, 0x0059, 0x0000, + 0x0000, 0x0062, 0x0007, 0x001d, 0x00e5, 0x00ea, 0x00ef, 0x00f4, + 0x00f9, 0x00fe, 0x0103, 0x0007, 0x001d, 0x0108, 0x010c, 0x010f, + 0x0113, 0x0116, 0x011a, 0x011d, 0x0007, 0x001d, 0x0108, 0x00ea, + 0x010f, 0x00f4, 0x0116, 0x00fe, 0x0103, 0x0005, 0x0071, 0x007a, + 0x0000, 0x0000, 0x0083, 0x0007, 0x001d, 0x00e5, 0x00ea, 0x00ef, + 0x00f4, 0x00f9, 0x00fe, 0x0103, 0x0007, 0x001d, 0x0108, 0x010c, + 0x010f, 0x0113, 0x0116, 0x011a, 0x011d, 0x0007, 0x001d, 0x0108, + // Entry 12DC0 - 12DFF + 0x00ea, 0x010f, 0x00f4, 0x0116, 0x00fe, 0x0103, 0x0002, 0x008f, + 0x00f6, 0x0003, 0x0093, 0x00b4, 0x00d5, 0x0008, 0x009f, 0x00a5, + 0x009c, 0x00a8, 0x00ab, 0x00ae, 0x00b1, 0x00a2, 0x0001, 0x001c, + 0x020b, 0x0001, 0x0000, 0x23cd, 0x0001, 0x001d, 0x0121, 0x0001, + 0x0000, 0x23d0, 0x0001, 0x001c, 0x0251, 0x0001, 0x001c, 0x0259, + 0x0001, 0x001c, 0x0263, 0x0001, 0x001c, 0x026b, 0x0008, 0x00c0, + 0x00c6, 0x00bd, 0x00c9, 0x00cc, 0x00cf, 0x00d2, 0x00c3, 0x0001, + 0x001c, 0x020b, 0x0001, 0x0000, 0x23cd, 0x0001, 0x001d, 0x0121, + // Entry 12E00 - 12E3F + 0x0001, 0x0000, 0x23d0, 0x0001, 0x001c, 0x0251, 0x0001, 0x001c, + 0x0259, 0x0001, 0x001c, 0x0263, 0x0001, 0x001c, 0x026b, 0x0008, + 0x00e1, 0x00e7, 0x00de, 0x00ea, 0x00ed, 0x00f0, 0x00f3, 0x00e4, + 0x0001, 0x001c, 0x020b, 0x0001, 0x0000, 0x23cd, 0x0001, 0x001d, + 0x0121, 0x0001, 0x0000, 0x23d0, 0x0001, 0x001c, 0x0219, 0x0001, + 0x001c, 0x0228, 0x0001, 0x001c, 0x0239, 0x0001, 0x001c, 0x0248, + 0x0003, 0x00fa, 0x010c, 0x011e, 0x0008, 0x0103, 0x0109, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0106, 0x0001, 0x0000, 0x23cd, + // Entry 12E40 - 12E7F + 0x0001, 0x001d, 0x0121, 0x0001, 0x0000, 0x23d0, 0x0008, 0x0115, + 0x011b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0118, 0x0001, + 0x0000, 0x23cd, 0x0001, 0x001d, 0x0121, 0x0001, 0x0000, 0x23d0, + 0x0008, 0x0127, 0x012d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x012a, 0x0001, 0x0000, 0x23cd, 0x0001, 0x001d, 0x0121, 0x0001, + 0x0000, 0x23d0, 0x0001, 0x0132, 0x0001, 0x0006, 0x0d7c, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9006, + 0x003f, 0x0000, 0x0000, 0x0000, 0x0000, 0x017e, 0x018d, 0x0000, + // Entry 12E80 - 12EBF + 0x019c, 0x01ab, 0x0000, 0x01ba, 0x01cc, 0x0000, 0x01de, 0x01ed, + 0x0000, 0x01fc, 0x0201, 0x0000, 0x0000, 0x0000, 0x0000, 0x0206, + 0x020b, 0x0000, 0x0210, 0x0215, 0x0000, 0x021a, 0x021f, 0x0000, + 0x0224, 0x0233, 0x0000, 0x0242, 0x0251, 0x0000, 0x0260, 0x026f, + 0x0000, 0x027e, 0x028d, 0x0000, 0x029c, 0x02ab, 0x0000, 0x02ba, + 0x02c9, 0x0000, 0x02d8, 0x02e7, 0x02f6, 0x0000, 0x02fb, 0x0000, + 0x0300, 0x0312, 0x0000, 0x0324, 0x0336, 0x0000, 0x0348, 0x035a, + 0x0003, 0x0000, 0x0000, 0x0182, 0x0002, 0x0185, 0x0189, 0x0002, + // Entry 12EC0 - 12EFF + 0x001d, 0x0128, 0x0031, 0x0002, 0x001d, 0x0133, 0x003b, 0x0003, + 0x0000, 0x0000, 0x0191, 0x0002, 0x0194, 0x0198, 0x0002, 0x001d, + 0x0128, 0x0031, 0x0002, 0x001d, 0x0133, 0x003b, 0x0003, 0x0000, + 0x0000, 0x01a0, 0x0002, 0x01a3, 0x01a7, 0x0002, 0x001d, 0x013f, + 0x004a, 0x0002, 0x001d, 0x014b, 0x0055, 0x0003, 0x0000, 0x0000, + 0x01af, 0x0002, 0x01b2, 0x01b6, 0x0002, 0x001d, 0x013f, 0x004a, + 0x0002, 0x001d, 0x014b, 0x0158, 0x0003, 0x01be, 0x0000, 0x01c1, + 0x0001, 0x001c, 0x03f4, 0x0002, 0x01c4, 0x01c8, 0x0002, 0x001c, + // Entry 12F00 - 12F3F + 0x0413, 0x0413, 0x0002, 0x001c, 0x041e, 0x041e, 0x0003, 0x01d0, + 0x0000, 0x01d3, 0x0001, 0x001c, 0x03f4, 0x0002, 0x01d6, 0x01da, + 0x0002, 0x001c, 0x0413, 0x0413, 0x0002, 0x001c, 0x041e, 0x041e, + 0x0003, 0x0000, 0x0000, 0x01e2, 0x0002, 0x01e5, 0x01e9, 0x0002, + 0x001d, 0x0167, 0x007c, 0x0002, 0x001d, 0x0172, 0x0086, 0x0003, + 0x0000, 0x0000, 0x01f1, 0x0002, 0x01f4, 0x01f8, 0x0002, 0x001d, + 0x0167, 0x007c, 0x0002, 0x001d, 0x0172, 0x0086, 0x0001, 0x01fe, + 0x0001, 0x001d, 0x017e, 0x0001, 0x0203, 0x0001, 0x001d, 0x0188, + // Entry 12F40 - 12F7F + 0x0001, 0x0208, 0x0001, 0x001d, 0x0191, 0x0001, 0x020d, 0x0001, + 0x001d, 0x0191, 0x0001, 0x0212, 0x0001, 0x001d, 0x019b, 0x0001, + 0x0217, 0x0001, 0x001d, 0x019b, 0x0001, 0x021c, 0x0001, 0x001d, + 0x01a5, 0x0001, 0x0221, 0x0001, 0x001d, 0x01b2, 0x0003, 0x0000, + 0x0000, 0x0228, 0x0002, 0x022b, 0x022f, 0x0002, 0x001c, 0x058c, + 0x058c, 0x0002, 0x001c, 0x0598, 0x0598, 0x0003, 0x0000, 0x0000, + 0x0237, 0x0002, 0x023a, 0x023e, 0x0002, 0x001c, 0x05bd, 0x05bd, + 0x0002, 0x001c, 0x05c7, 0x05c7, 0x0003, 0x0000, 0x0000, 0x0246, + // Entry 12F80 - 12FBF + 0x0002, 0x0249, 0x024d, 0x0002, 0x001c, 0x062c, 0x062c, 0x0002, + 0x001c, 0x0638, 0x0638, 0x0003, 0x0000, 0x0000, 0x0255, 0x0002, + 0x0258, 0x025c, 0x0002, 0x001c, 0x065a, 0x065a, 0x0002, 0x001c, + 0x0663, 0x0663, 0x0003, 0x0000, 0x0000, 0x0264, 0x0002, 0x0267, + 0x026b, 0x0002, 0x001c, 0x06cb, 0x06cb, 0x0002, 0x001c, 0x06d7, + 0x06d7, 0x0003, 0x0000, 0x0000, 0x0273, 0x0002, 0x0276, 0x027a, + 0x0002, 0x001c, 0x06fc, 0x06fc, 0x0002, 0x001c, 0x0706, 0x0706, + 0x0003, 0x0000, 0x0000, 0x0282, 0x0002, 0x0285, 0x0289, 0x0002, + // Entry 12FC0 - 12FFF + 0x001c, 0x0777, 0x0777, 0x0002, 0x001c, 0x0783, 0x0783, 0x0003, + 0x0000, 0x0000, 0x0291, 0x0002, 0x0294, 0x0298, 0x0002, 0x001c, + 0x07a5, 0x07a5, 0x0002, 0x001c, 0x07ae, 0x07ae, 0x0003, 0x0000, + 0x0000, 0x02a0, 0x0002, 0x02a3, 0x02a7, 0x0002, 0x001c, 0x081a, + 0x081a, 0x0002, 0x001c, 0x0826, 0x0826, 0x0003, 0x0000, 0x0000, + 0x02af, 0x0002, 0x02b2, 0x02b6, 0x0002, 0x001c, 0x084b, 0x084b, + 0x0002, 0x001c, 0x0855, 0x0855, 0x0003, 0x0000, 0x0000, 0x02be, + 0x0002, 0x02c1, 0x02c5, 0x0002, 0x001c, 0x08ba, 0x08ba, 0x0002, + // Entry 13000 - 1303F + 0x001c, 0x08c6, 0x08c6, 0x0003, 0x0000, 0x0000, 0x02cd, 0x0002, + 0x02d0, 0x02d4, 0x0002, 0x001c, 0x08e8, 0x08e8, 0x0002, 0x001c, + 0x08f1, 0x08f1, 0x0003, 0x0000, 0x0000, 0x02dc, 0x0002, 0x02df, + 0x02e3, 0x0002, 0x001c, 0x095d, 0x095d, 0x0002, 0x001c, 0x0969, + 0x0969, 0x0003, 0x0000, 0x0000, 0x02eb, 0x0002, 0x02ee, 0x02f2, + 0x0002, 0x001c, 0x098e, 0x098e, 0x0002, 0x001c, 0x0998, 0x0998, + 0x0001, 0x02f8, 0x0001, 0x0007, 0x2485, 0x0001, 0x02fd, 0x0001, + 0x0007, 0x2485, 0x0003, 0x0304, 0x0000, 0x0307, 0x0001, 0x0000, + // Entry 13040 - 1307F + 0x213b, 0x0002, 0x030a, 0x030e, 0x0002, 0x001d, 0x01be, 0x0094, + 0x0002, 0x001d, 0x01c9, 0x009e, 0x0003, 0x0316, 0x0000, 0x0319, + 0x0001, 0x0000, 0x213b, 0x0002, 0x031c, 0x0320, 0x0002, 0x001d, + 0x01be, 0x0094, 0x0002, 0x001d, 0x01c9, 0x009e, 0x0003, 0x0328, + 0x0000, 0x032b, 0x0001, 0x0001, 0x07c5, 0x0002, 0x032e, 0x0332, + 0x0002, 0x001c, 0x2559, 0x0a3a, 0x0002, 0x001c, 0x2565, 0x0a46, + 0x0003, 0x033a, 0x0000, 0x033d, 0x0001, 0x0001, 0x07c5, 0x0002, + 0x0340, 0x0344, 0x0002, 0x001c, 0x2559, 0x0a3a, 0x0002, 0x001c, + // Entry 13080 - 130BF + 0x2565, 0x0a46, 0x0003, 0x034c, 0x0000, 0x034f, 0x0001, 0x001c, + 0x0a96, 0x0002, 0x0352, 0x0356, 0x0002, 0x001c, 0x2572, 0x0a9b, + 0x0002, 0x001c, 0x257e, 0x0aa7, 0x0003, 0x035e, 0x0000, 0x0361, + 0x0001, 0x001c, 0x0a96, 0x0002, 0x0364, 0x0368, 0x0002, 0x001c, + 0x2572, 0x0a9b, 0x0002, 0x001c, 0x257e, 0x0aa7, 0x0004, 0x0000, + 0x0000, 0x0000, 0x0371, 0x0002, 0x0507, 0x0374, 0x0003, 0x03fd, + 0x0482, 0x0378, 0x0083, 0x001d, 0xffff, 0xffff, 0x01d5, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 130C0 - 130FF + 0xffff, 0x01f5, 0xffff, 0xffff, 0xffff, 0xffff, 0x0237, 0xffff, + 0x02b0, 0x0318, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0373, 0xffff, 0xffff, + 0xffff, 0xffff, 0x03aa, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x03e7, 0xffff, + // Entry 13100 - 1313F + 0xffff, 0xffff, 0x0418, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x045a, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x049d, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x04cf, 0x0083, + 0x001d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 13140 - 1317F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x01e9, 0xffff, + 0xffff, 0xffff, 0xffff, 0x021f, 0xffff, 0x0298, 0x0300, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0368, 0xffff, 0xffff, 0xffff, 0xffff, 0x0399, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 13180 - 131BF + 0xffff, 0xffff, 0xffff, 0x03dc, 0xffff, 0xffff, 0xffff, 0x040d, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x044e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0492, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x04c3, 0x0083, 0x001d, 0xffff, 0xffff, + // Entry 131C0 - 131FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x020a, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0258, 0xffff, 0x02d1, 0x0339, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0387, + 0xffff, 0xffff, 0xffff, 0xffff, 0x03c4, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 13200 - 1323F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x03fb, 0xffff, 0xffff, 0xffff, 0x042d, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x046f, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x04b1, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 13240 - 1327F + 0x04e4, 0x0003, 0x050b, 0x05d9, 0x0572, 0x0065, 0x001d, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0279, 0x0287, 0x02f2, 0x035a, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 13280 - 132BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0440, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0484, 0x0065, 0x001d, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 132C0 - 132FF + 0x027d, 0x028c, 0x02f6, 0x035e, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 13300 - 1333F + 0xffff, 0x0444, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0488, 0x0065, 0x001d, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0282, + 0x0292, 0x02fb, 0x0363, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 13340 - 1337F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0449, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x048d, 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, + // Entry 13380 - 133BF + 0x0000, 0x0000, 0x0000, 0x000b, 0x001c, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0014, 0x0000, 0x0000, 0x0004, 0x0000, + 0x0000, 0x0000, 0x0019, 0x0001, 0x0000, 0x1e17, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0025, 0x0030, 0x0000, 0x0004, + 0x002d, 0x0000, 0x0000, 0x002a, 0x0001, 0x0001, 0x0037, 0x0001, + 0x0015, 0x14be, 0x0004, 0x003e, 0x0038, 0x0035, 0x003b, 0x0001, + 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, + 0x0001, 0x0000, 0x0546, 0x0003, 0x0004, 0x0000, 0x004f, 0x0008, + // Entry 133C0 - 133FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0024, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, + 0x0000, 0x0004, 0x0000, 0x001e, 0x001b, 0x0021, 0x0001, 0x0010, + 0x0003, 0x0001, 0x0000, 0x1e0b, 0x0001, 0x0000, 0x1e17, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x002d, 0x003e, 0x0000, + 0x0004, 0x003b, 0x0035, 0x0032, 0x0038, 0x0001, 0x0001, 0x001d, + 0x0001, 0x0001, 0x002d, 0x0001, 0x0001, 0x0037, 0x0001, 0x0015, + 0x14be, 0x0004, 0x004c, 0x0046, 0x0043, 0x0049, 0x0001, 0x0000, + // Entry 13400 - 1343F + 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, + 0x0000, 0x0546, 0x0004, 0x0000, 0x0000, 0x0000, 0x0054, 0x0001, + 0x0056, 0x0003, 0x0061, 0x0068, 0x005a, 0x0005, 0x0001, 0xffff, + 0x08fc, 0x090f, 0x092c, 0x096c, 0x0005, 0x0001, 0xffff, 0xffff, + 0xffff, 0xffff, 0x096c, 0x0005, 0x0001, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0970, 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000b, 0x0022, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0014, 0x0000, 0x0000, 0x0004, 0x0000, + // Entry 13440 - 1347F + 0x001c, 0x0019, 0x001f, 0x0001, 0x0010, 0x0003, 0x0001, 0x0000, + 0x1e0b, 0x0001, 0x001d, 0x04f7, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x002b, 0x003c, 0x0000, 0x0004, 0x0039, 0x0033, + 0x0030, 0x0036, 0x0001, 0x0001, 0x001d, 0x0001, 0x0001, 0x002d, + 0x0001, 0x001d, 0x0502, 0x0001, 0x0015, 0x14be, 0x0004, 0x004a, + 0x0044, 0x0041, 0x0047, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, + 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0003, + 0x0004, 0x00df, 0x02ff, 0x000b, 0x0000, 0x0010, 0x0000, 0x0000, + // Entry 13480 - 134BF + 0x0000, 0x0000, 0x002b, 0x0046, 0x0000, 0x0000, 0x00cb, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0019, 0x0000, 0x0000, + 0x0004, 0x0027, 0x0021, 0x001e, 0x0024, 0x0001, 0x001c, 0x0110, + 0x0001, 0x001c, 0x0123, 0x0001, 0x001c, 0x0130, 0x0002, 0x0000, + 0x03be, 0x2406, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0034, 0x0000, 0x0000, 0x0004, 0x0042, 0x003c, 0x0039, 0x003f, + 0x0001, 0x000c, 0x0000, 0x0001, 0x000c, 0x0012, 0x0001, 0x000c, + 0x001e, 0x0002, 0x0000, 0x04af, 0x240c, 0x0008, 0x004f, 0x0074, + // Entry 134C0 - 134FF + 0x0000, 0x0081, 0x0000, 0x00b9, 0x0000, 0x0000, 0x0002, 0x0052, + 0x0063, 0x0001, 0x0054, 0x000d, 0x0000, 0xffff, 0x1e22, 0x23da, + 0x23df, 0x23e4, 0x23e9, 0x1e3a, 0x1e3f, 0x23ed, 0x23f2, 0x23f7, + 0x23fc, 0x2401, 0x0001, 0x0065, 0x000d, 0x0006, 0xffff, 0x001e, + 0x4144, 0x4148, 0x414c, 0xffff, 0x4154, 0x4158, 0x415c, 0x4160, + 0x4164, 0x4168, 0x004a, 0x0001, 0x0076, 0x0001, 0x0078, 0x0007, + 0x001d, 0x00e5, 0x00ea, 0x00ef, 0x00f4, 0x00f9, 0x00fe, 0x0103, + 0x0002, 0x0084, 0x009a, 0x0003, 0x0088, 0x0000, 0x0091, 0x0002, + // Entry 13500 - 1353F + 0x008b, 0x008e, 0x0001, 0x001d, 0x050b, 0x0001, 0x001d, 0x0510, + 0x0002, 0x0094, 0x0097, 0x0001, 0x001d, 0x050b, 0x0001, 0x001d, + 0x0510, 0x0003, 0x009e, 0x00a7, 0x00b0, 0x0002, 0x00a1, 0x00a4, + 0x0001, 0x001d, 0x050b, 0x0001, 0x001d, 0x0510, 0x0002, 0x00aa, + 0x00ad, 0x0001, 0x001d, 0x050b, 0x0001, 0x001d, 0x0510, 0x0002, + 0x00b3, 0x00b6, 0x0001, 0x001d, 0x050b, 0x0001, 0x001d, 0x0510, + 0x0004, 0x00c7, 0x00c1, 0x00be, 0x00c4, 0x0001, 0x000c, 0x03c9, + 0x0001, 0x000c, 0x03d9, 0x0001, 0x000c, 0x03e3, 0x0002, 0x0000, + // Entry 13540 - 1357F + 0x051c, 0x2418, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x00d4, 0x0000, 0x9006, 0x0004, 0x0000, 0x00d9, 0x0000, 0x00dc, + 0x0001, 0x000c, 0x0012, 0x0001, 0x000c, 0x001e, 0x003f, 0x0000, + 0x0000, 0x0000, 0x0000, 0x011f, 0x0131, 0x0000, 0x0143, 0x0155, + 0x0000, 0x0167, 0x0179, 0x0000, 0x018b, 0x01a1, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01b7, 0x01c1, + 0x0000, 0x01d0, 0x01df, 0x0000, 0x01ee, 0x01fd, 0x0000, 0x020c, + // Entry 13580 - 135BF + 0x021b, 0x0000, 0x022a, 0x0239, 0x0000, 0x0248, 0x0257, 0x0000, + 0x0266, 0x0275, 0x0284, 0x0289, 0x028e, 0x0000, 0x0293, 0x02a5, + 0x0000, 0x02b7, 0x02c9, 0x0000, 0x02db, 0x02ed, 0x0003, 0x0123, + 0x0000, 0x0126, 0x0001, 0x001c, 0x02e1, 0x0002, 0x0129, 0x012d, + 0x0002, 0x001c, 0x258b, 0x0300, 0x0002, 0x001c, 0x2597, 0x030b, + 0x0003, 0x0135, 0x0000, 0x0138, 0x0001, 0x001c, 0x02e1, 0x0002, + 0x013b, 0x013f, 0x0002, 0x001c, 0x258b, 0x0300, 0x0002, 0x001c, + 0x2597, 0x030b, 0x0003, 0x0147, 0x0000, 0x014a, 0x0001, 0x001c, + // Entry 135C0 - 135FF + 0x035f, 0x0002, 0x014d, 0x0151, 0x0002, 0x001c, 0x038e, 0x0382, + 0x0002, 0x001c, 0x03a8, 0x039b, 0x0003, 0x0159, 0x0000, 0x015c, + 0x0001, 0x001c, 0x035f, 0x0002, 0x015f, 0x0163, 0x0002, 0x001c, + 0x038e, 0x0382, 0x0002, 0x001c, 0x03a8, 0x039b, 0x0003, 0x016b, + 0x0000, 0x016e, 0x0001, 0x001c, 0x03f4, 0x0002, 0x0171, 0x0175, + 0x0002, 0x001c, 0x25a4, 0x0413, 0x0002, 0x001c, 0x25b0, 0x041e, + 0x0003, 0x017d, 0x0000, 0x0180, 0x0001, 0x001c, 0x03f4, 0x0002, + 0x0183, 0x0187, 0x0002, 0x001c, 0x25a4, 0x0413, 0x0002, 0x001c, + // Entry 13600 - 1363F + 0x25b0, 0x041e, 0x0004, 0x0190, 0x0000, 0x0193, 0x019e, 0x0001, + 0x0001, 0x0213, 0x0002, 0x0196, 0x019a, 0x0002, 0x001c, 0x25bd, + 0x0479, 0x0002, 0x001c, 0x25c9, 0x0484, 0x0001, 0x001d, 0x0515, + 0x0004, 0x01a6, 0x0000, 0x01a9, 0x01b4, 0x0001, 0x0001, 0x0213, + 0x0002, 0x01ac, 0x01b0, 0x0002, 0x001c, 0x25bd, 0x0479, 0x0002, + 0x001c, 0x25c9, 0x0484, 0x0001, 0x001d, 0x0515, 0x0003, 0x0000, + 0x0000, 0x01bb, 0x0001, 0x01bd, 0x0002, 0x001c, 0x25d6, 0x058c, + 0x0003, 0x0000, 0x0000, 0x01c5, 0x0002, 0x01c8, 0x01cc, 0x0002, + // Entry 13640 - 1367F + 0x001c, 0x25e6, 0x05bd, 0x0002, 0x001c, 0x25f4, 0x05c7, 0x0003, + 0x0000, 0x0000, 0x01d4, 0x0002, 0x01d7, 0x01db, 0x0002, 0x001c, + 0x2603, 0x062c, 0x0002, 0x001c, 0x2613, 0x0638, 0x0003, 0x0000, + 0x0000, 0x01e3, 0x0002, 0x01e6, 0x01ea, 0x0002, 0x001c, 0x2624, + 0x065a, 0x0002, 0x001c, 0x2631, 0x0663, 0x0003, 0x0000, 0x0000, + 0x01f2, 0x0002, 0x01f5, 0x01f9, 0x0002, 0x001c, 0x263f, 0x06cb, + 0x0002, 0x001c, 0x264f, 0x06d7, 0x0003, 0x0000, 0x0000, 0x0201, + 0x0002, 0x0204, 0x0208, 0x0002, 0x001c, 0x2660, 0x06fc, 0x0002, + // Entry 13680 - 136BF + 0x001c, 0x266e, 0x0706, 0x0003, 0x0000, 0x0000, 0x0210, 0x0002, + 0x0213, 0x0217, 0x0002, 0x001c, 0x267d, 0x0777, 0x0002, 0x001c, + 0x268d, 0x0783, 0x0003, 0x0000, 0x0000, 0x021f, 0x0002, 0x0222, + 0x0226, 0x0002, 0x001c, 0x269e, 0x07a5, 0x0002, 0x001c, 0x26ab, + 0x07ae, 0x0003, 0x0000, 0x0000, 0x022e, 0x0002, 0x0231, 0x0235, + 0x0002, 0x001c, 0x26b9, 0x081a, 0x0002, 0x001c, 0x26c9, 0x0826, + 0x0003, 0x0000, 0x0000, 0x023d, 0x0002, 0x0240, 0x0244, 0x0002, + 0x001c, 0x26d9, 0x084b, 0x0002, 0x001c, 0x26e7, 0x0855, 0x0003, + // Entry 136C0 - 136FF + 0x0000, 0x0000, 0x024c, 0x0002, 0x024f, 0x0253, 0x0002, 0x001c, + 0x26f6, 0x08ba, 0x0002, 0x001c, 0x2706, 0x08c6, 0x0003, 0x0000, + 0x0000, 0x025b, 0x0002, 0x025e, 0x0262, 0x0002, 0x001c, 0x2717, + 0x08e8, 0x0002, 0x001c, 0x2724, 0x08f1, 0x0003, 0x0000, 0x0000, + 0x026a, 0x0002, 0x026d, 0x0271, 0x0002, 0x001c, 0x2732, 0x095d, + 0x0002, 0x001c, 0x2742, 0x0969, 0x0003, 0x0000, 0x0000, 0x0279, + 0x0002, 0x027c, 0x0280, 0x0002, 0x001c, 0x2753, 0x098e, 0x0002, + 0x001c, 0x2761, 0x0998, 0x0001, 0x0286, 0x0001, 0x001d, 0x0524, + // Entry 13700 - 1373F + 0x0001, 0x028b, 0x0001, 0x001d, 0x0524, 0x0001, 0x0290, 0x0001, + 0x001d, 0x0524, 0x0003, 0x0297, 0x0000, 0x029a, 0x0001, 0x001c, + 0x09dc, 0x0002, 0x029d, 0x02a1, 0x0002, 0x001c, 0x2770, 0x09e0, + 0x0002, 0x001c, 0x277c, 0x09eb, 0x0003, 0x02a9, 0x0000, 0x02ac, + 0x0001, 0x001c, 0x09dc, 0x0002, 0x02af, 0x02b3, 0x0002, 0x001c, + 0x2770, 0x09e0, 0x0002, 0x001c, 0x277c, 0x09eb, 0x0003, 0x02bb, + 0x0000, 0x02be, 0x0001, 0x0001, 0x07c5, 0x0002, 0x02c1, 0x02c5, + 0x0002, 0x001c, 0x2789, 0x0a3a, 0x0002, 0x001c, 0x2796, 0x0a46, + // Entry 13740 - 1377F + 0x0003, 0x02cd, 0x0000, 0x02d0, 0x0001, 0x0001, 0x07c5, 0x0002, + 0x02d3, 0x02d7, 0x0002, 0x001c, 0x2789, 0x0a3a, 0x0002, 0x001c, + 0x2796, 0x0a46, 0x0003, 0x02df, 0x0000, 0x02e2, 0x0001, 0x001c, + 0x0a96, 0x0002, 0x02e5, 0x02e9, 0x0002, 0x001c, 0x27a4, 0x0a9b, + 0x0002, 0x001c, 0x27b1, 0x0aa7, 0x0003, 0x02f1, 0x0000, 0x02f4, + 0x0001, 0x001c, 0x0a96, 0x0002, 0x02f7, 0x02fb, 0x0002, 0x001c, + 0x27a4, 0x0a9b, 0x0002, 0x001c, 0x27b1, 0x0aa7, 0x0004, 0x0000, + 0x0304, 0x0308, 0x0320, 0x0002, 0x001d, 0xffff, 0x052e, 0x0001, + // Entry 13780 - 137BF + 0x030a, 0x0003, 0x030e, 0x031a, 0x0314, 0x0004, 0x0006, 0xffff, + 0xffff, 0xffff, 0x1f5f, 0x0004, 0x0006, 0xffff, 0xffff, 0xffff, + 0x1f5f, 0x0004, 0x0006, 0xffff, 0xffff, 0xffff, 0x1f63, 0x0002, + 0x0323, 0x045f, 0x0003, 0x0327, 0x03f7, 0x038f, 0x0066, 0x0007, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0x000e, + 0x0019, 0x0024, 0x002f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x003a, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 137C0 - 137FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0064, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 13800 - 1383F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x248f, 0x0066, 0x0007, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0004, 0xffff, 0x0011, + 0x001c, 0x0027, 0x0032, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x003d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 13840 - 1387F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0068, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2492, 0x0066, 0x0007, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0009, 0xffff, 0x0015, + 0x0020, 0x002b, 0x0036, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 13880 - 138BF + 0xffff, 0x0041, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x006d, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 138C0 - 138FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2496, 0x0003, 0x0463, + 0x0000, 0x0474, 0x000f, 0x001c, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0e77, 0x000f, 0x001c, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0e86, 0x0001, 0x0002, 0x0008, 0x0000, + // Entry 13900 - 1393F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0007, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0013, 0x0004, + 0x0021, 0x001b, 0x0018, 0x001e, 0x0001, 0x0000, 0x0524, 0x0001, + 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, + 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000b, 0x0007, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0013, 0x0004, 0x0021, 0x001b, 0x0018, 0x001e, + 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, + // Entry 13940 - 1397F + 0x053d, 0x0001, 0x0000, 0x0546, 0x0003, 0x0004, 0x0000, 0x0026, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000d, 0x0007, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0015, 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, 0x0000, + 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, + 0x0000, 0x0546, 0x0004, 0x0000, 0x0000, 0x0000, 0x002b, 0x0001, + 0x002d, 0x0003, 0x0038, 0x003f, 0x0031, 0x0005, 0x0001, 0xffff, + 0x08fc, 0x090f, 0x092c, 0x096c, 0x0005, 0x0001, 0xffff, 0xffff, + // Entry 13980 - 139BF + 0xffff, 0xffff, 0x096c, 0x0005, 0x0001, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0970, 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0007, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0013, 0x0004, 0x0021, 0x001b, + 0x0018, 0x001e, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, + 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0001, 0x0002, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000b, 0x0007, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 139C0 - 139FF + 0x0013, 0x0004, 0x0021, 0x001b, 0x0018, 0x001e, 0x0001, 0x0000, + 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, + 0x0000, 0x0546, 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000b, 0x0014, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x001d, 0x0000, 0x0004, + 0x002b, 0x0025, 0x0022, 0x0028, 0x0001, 0x0016, 0x02a8, 0x0001, + 0x0016, 0x02b6, 0x0001, 0x0016, 0x02c1, 0x0001, 0x0016, 0x02ca, + // Entry 13A00 - 13A3F + 0x0003, 0x0000, 0x0000, 0x0004, 0x0004, 0x0000, 0x0000, 0x0000, + 0x0009, 0x0001, 0x000b, 0x0003, 0x0016, 0x001d, 0x000f, 0x0005, + 0x0001, 0xffff, 0x08fc, 0x090f, 0x092c, 0x096c, 0x0005, 0x0001, + 0xffff, 0xffff, 0xffff, 0xffff, 0x096c, 0x0005, 0x0001, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0970, 0x0001, 0x0002, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0014, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x001d, + // Entry 13A40 - 13A7F + 0x0000, 0x0004, 0x002b, 0x0025, 0x0022, 0x0028, 0x0001, 0x001d, + 0x0547, 0x0001, 0x001d, 0x0554, 0x0001, 0x001d, 0x055e, 0x0001, + 0x001d, 0x0566, 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0007, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0013, 0x0004, 0x0021, 0x001b, + 0x0018, 0x001e, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, + 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0003, 0x0004, + 0x008f, 0x020a, 0x000b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 13A80 - 13ABF + 0x0000, 0x0010, 0x0019, 0x0000, 0x0000, 0x0086, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0022, 0x0000, 0x0000, 0x0075, 0x0000, + 0x0002, 0x0025, 0x0059, 0x0003, 0x0029, 0x003b, 0x0047, 0x0008, + 0x0032, 0x0038, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0035, + 0x0001, 0x0000, 0x23cd, 0x0001, 0x001c, 0x0214, 0x0001, 0x0000, + 0x23d0, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0044, 0x0001, 0x0000, 0x1f96, 0x0008, 0x0050, 0x0056, + // Entry 13AC0 - 13AFF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0053, 0x0001, 0x0000, + 0x23cd, 0x0001, 0x001c, 0x0214, 0x0001, 0x0000, 0x23d0, 0x0003, + 0x005d, 0x0066, 0x006c, 0x0002, 0x0060, 0x0063, 0x0001, 0x0000, + 0x23cd, 0x0001, 0x0000, 0x23d0, 0x0002, 0x0000, 0x0069, 0x0001, + 0x0000, 0x23d0, 0x0002, 0x006f, 0x0072, 0x0001, 0x0000, 0x23cd, + 0x0001, 0x0000, 0x23d0, 0x0004, 0x0083, 0x007d, 0x007a, 0x0080, + 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, + 0x053d, 0x0001, 0x0000, 0x0546, 0x0008, 0x0000, 0x0000, 0x0000, + // Entry 13B00 - 13B3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x9006, 0x0036, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00c6, 0x00cb, + 0x00d0, 0x00d8, 0x00e5, 0x0000, 0x00ed, 0x00f2, 0x0000, 0x00f7, + 0x00fc, 0x0000, 0x0101, 0x0106, 0x0000, 0x010b, 0x011f, 0x0000, + 0x012e, 0x0142, 0x0000, 0x0151, 0x0165, 0x0000, 0x0174, 0x0188, + 0x0000, 0x0197, 0x01ab, 0x0000, 0x01ba, 0x01ce, 0x0000, 0x01dd, + 0x01f1, 0x0200, 0x0000, 0x0205, 0x0001, 0x00c8, 0x0001, 0x001d, + // Entry 13B40 - 13B7F + 0x0188, 0x0001, 0x00cd, 0x0001, 0x001d, 0x0188, 0x0002, 0x0000, + 0x00d3, 0x0003, 0x0000, 0x1b2f, 0x1b39, 0x1b3f, 0x0003, 0x0000, + 0x0000, 0x00dc, 0x0002, 0x00df, 0x00e2, 0x0001, 0x001c, 0x04b8, + 0x0001, 0x001c, 0x04d0, 0x0002, 0x0000, 0x00e8, 0x0003, 0x0000, + 0x1b2f, 0x1b39, 0x1b3f, 0x0001, 0x00ef, 0x0001, 0x001d, 0x0191, + 0x0001, 0x00f4, 0x0001, 0x001d, 0x0191, 0x0001, 0x00f9, 0x0001, + 0x001d, 0x019b, 0x0001, 0x00fe, 0x0001, 0x001d, 0x019b, 0x0001, + 0x0103, 0x0001, 0x001d, 0x01b2, 0x0001, 0x0108, 0x0001, 0x001d, + // Entry 13B80 - 13BBF + 0x01b2, 0x0003, 0x0000, 0x010f, 0x0114, 0x0003, 0x001d, 0x056b, + 0x0574, 0x057d, 0x0002, 0x0117, 0x011b, 0x0002, 0x001d, 0x0586, + 0x0586, 0x0002, 0x001d, 0x0591, 0x0591, 0x0003, 0x0000, 0x0000, + 0x0123, 0x0002, 0x0126, 0x012a, 0x0002, 0x001c, 0x05bd, 0x05bd, + 0x0002, 0x001c, 0x05c7, 0x05c7, 0x0003, 0x0000, 0x0132, 0x0137, + 0x0003, 0x001d, 0x059d, 0x05a6, 0x05af, 0x0002, 0x013a, 0x013e, + 0x0002, 0x001d, 0x05b8, 0x05b8, 0x0002, 0x001d, 0x05c3, 0x05c3, + 0x0003, 0x0000, 0x0000, 0x0146, 0x0002, 0x0149, 0x014d, 0x0002, + // Entry 13BC0 - 13BFF + 0x001c, 0x065a, 0x065a, 0x0002, 0x001c, 0x0663, 0x0663, 0x0003, + 0x0000, 0x0155, 0x015a, 0x0003, 0x001d, 0x05cf, 0x05d8, 0x05e1, + 0x0002, 0x015d, 0x0161, 0x0002, 0x001d, 0x05ea, 0x05ea, 0x0002, + 0x001d, 0x05f5, 0x05f5, 0x0003, 0x0000, 0x0000, 0x0169, 0x0002, + 0x016c, 0x0170, 0x0002, 0x001c, 0x06fc, 0x06fc, 0x0002, 0x001c, + 0x0706, 0x0706, 0x0003, 0x0000, 0x0178, 0x017d, 0x0003, 0x001d, + 0x0601, 0x060a, 0x0613, 0x0002, 0x0180, 0x0184, 0x0002, 0x001d, + 0x061c, 0x061c, 0x0002, 0x001d, 0x0627, 0x0627, 0x0003, 0x0000, + // Entry 13C00 - 13C3F + 0x0000, 0x018c, 0x0002, 0x018f, 0x0193, 0x0002, 0x001c, 0x07a5, + 0x07a5, 0x0002, 0x001c, 0x07ae, 0x07ae, 0x0003, 0x0000, 0x019b, + 0x01a0, 0x0003, 0x001d, 0x0633, 0x063c, 0x0645, 0x0002, 0x01a3, + 0x01a7, 0x0002, 0x001d, 0x064e, 0x064e, 0x0002, 0x001d, 0x0659, + 0x0659, 0x0003, 0x0000, 0x0000, 0x01af, 0x0002, 0x01b2, 0x01b6, + 0x0002, 0x001c, 0x084b, 0x084b, 0x0002, 0x001c, 0x0855, 0x0855, + 0x0003, 0x0000, 0x01be, 0x01c3, 0x0003, 0x001d, 0x0665, 0x066e, + 0x0677, 0x0002, 0x01c6, 0x01ca, 0x0002, 0x001d, 0x0680, 0x0680, + // Entry 13C40 - 13C7F + 0x0002, 0x001d, 0x068b, 0x068b, 0x0003, 0x0000, 0x0000, 0x01d2, + 0x0002, 0x01d5, 0x01d9, 0x0002, 0x001c, 0x08e8, 0x08e8, 0x0002, + 0x001c, 0x08f1, 0x08f1, 0x0003, 0x0000, 0x01e1, 0x01e6, 0x0003, + 0x001d, 0x0697, 0x06a0, 0x06a9, 0x0002, 0x01e9, 0x01ed, 0x0002, + 0x001d, 0x06b2, 0x06b2, 0x0002, 0x001d, 0x06bd, 0x06bd, 0x0003, + 0x0000, 0x0000, 0x01f5, 0x0002, 0x01f8, 0x01fc, 0x0002, 0x001c, + 0x098e, 0x098e, 0x0002, 0x001c, 0x0998, 0x0998, 0x0001, 0x0202, + 0x0001, 0x0007, 0x2485, 0x0001, 0x0207, 0x0001, 0x0007, 0x2485, + // Entry 13C80 - 13CBF + 0x0004, 0x0000, 0x0000, 0x020f, 0x0218, 0x0001, 0x0211, 0x0002, + 0x0000, 0x0214, 0x0002, 0x001d, 0xffff, 0x06c9, 0x0002, 0x037e, + 0x021b, 0x0003, 0x021f, 0x0309, 0x0294, 0x0073, 0x001c, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0f7c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 13CC0 - 13CFF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x27bf, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 13D00 - 13D3F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x27cf, 0x0073, 0x001d, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0237, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 13D40 - 13D7F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x06cd, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x06dc, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x070c, 0x0073, + // Entry 13D80 - 13DBF + 0x001d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 13DC0 - 13DFF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x06f5, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x072f, 0x0003, 0x0382, 0x03e8, 0x03b5, + 0x0031, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 13E00 - 13E3F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0045, + 0x004e, 0xffff, 0x0057, 0x0031, 0x0007, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 13E40 - 13E7F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0045, 0x004e, 0xffff, 0x0057, 0x0031, 0x0007, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 13E80 - 13EBF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0049, 0x0052, 0xffff, + 0x005b, 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000b, 0x0007, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0013, 0x0004, 0x0021, 0x001b, 0x0018, + 0x001e, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, + 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0003, 0x0000, 0x0000, + 0x0004, 0x0004, 0x0000, 0x0000, 0x0000, 0x0009, 0x0001, 0x000b, + // Entry 13EC0 - 13EFF + 0x0003, 0x0016, 0x001d, 0x000f, 0x0005, 0x0001, 0xffff, 0x08fc, + 0x090f, 0x092c, 0x096c, 0x0005, 0x0001, 0xffff, 0xffff, 0xffff, + 0xffff, 0x096c, 0x0005, 0x0001, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0970, 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000b, 0x0007, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0013, 0x0004, 0x0021, 0x001b, 0x0018, + 0x001e, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, + 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0003, 0x0000, 0x0000, + // Entry 13F00 - 13F3F + 0x0004, 0x0004, 0x0000, 0x0000, 0x0000, 0x0009, 0x0001, 0x000b, + 0x0003, 0x0016, 0x001d, 0x000f, 0x0005, 0x0001, 0xffff, 0x08fc, + 0x090f, 0x092c, 0x096c, 0x0005, 0x0001, 0xffff, 0xffff, 0xffff, + 0xffff, 0x096c, 0x0005, 0x0001, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0970, 0x0003, 0x0000, 0x0000, 0x0004, 0x0004, 0x0000, 0x0000, + 0x0000, 0x0009, 0x0001, 0x000b, 0x0003, 0x0000, 0x0000, 0x000f, + 0x001f, 0x001d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 13F40 - 13F7F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0752, 0x0003, 0x0000, 0x0000, 0x0004, 0x0004, 0x0000, 0x0000, + 0x0000, 0x0009, 0x0001, 0x000b, 0x0003, 0x0000, 0x0000, 0x000f, + 0x003e, 0x001d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 13F80 - 13FBF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0757, + 0x0003, 0x0004, 0x0000, 0x0035, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000d, 0x0027, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, 0x0000, 0x0004, 0x0024, + 0x001e, 0x001b, 0x0021, 0x0001, 0x000a, 0x042e, 0x0001, 0x000a, + // Entry 13FC0 - 13FFF + 0x0440, 0x0001, 0x0002, 0x0044, 0x0001, 0x0006, 0x020f, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0030, 0x0000, 0x0000, + 0x0001, 0x0032, 0x0001, 0x0002, 0x028b, 0x0004, 0x0000, 0x0000, + 0x0000, 0x003a, 0x0001, 0x003c, 0x0003, 0x0040, 0x00c4, 0x0082, + 0x0040, 0x001d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 14000 - 1403F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x075b, 0x0040, 0x001d, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 14040 - 1407F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x075b, 0x0040, 0x001d, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 14080 - 140BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x075f, 0x0003, 0x0004, + 0x0000, 0x004d, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000d, 0x001d, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0016, 0x0000, 0x0000, 0x0003, 0x0000, 0x0000, 0x001a, + // Entry 140C0 - 140FF + 0x0001, 0x0002, 0x0000, 0x0008, 0x0000, 0x0000, 0x0000, 0x0026, + 0x0000, 0x0035, 0x003c, 0x0000, 0x0001, 0x0028, 0x0003, 0x0000, + 0x0000, 0x002c, 0x0002, 0x002f, 0x0032, 0x0001, 0x001d, 0x050b, + 0x0001, 0x001d, 0x0510, 0x0003, 0x0000, 0x0000, 0x0039, 0x0001, + 0x0002, 0x0025, 0x0004, 0x004a, 0x0044, 0x0041, 0x0047, 0x0001, + 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, + 0x0001, 0x0000, 0x0546, 0x0004, 0x0000, 0x0000, 0x0052, 0x0000, + 0x0001, 0x0054, 0x0002, 0x0000, 0x0057, 0x0003, 0x000b, 0xffff, + // Entry 14100 - 1413F + 0xffff, 0x0000, 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000b, 0x0014, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x001d, 0x0000, 0x0004, + 0x002b, 0x0025, 0x0022, 0x0028, 0x0001, 0x0005, 0x0082, 0x0001, + 0x0005, 0x008f, 0x0001, 0x0005, 0x0099, 0x0001, 0x0005, 0x00a1, + 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000b, 0x0007, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 14140 - 1417F + 0x0000, 0x0000, 0x0013, 0x0004, 0x0021, 0x001b, 0x0018, 0x001e, + 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, + 0x053d, 0x0001, 0x0000, 0x0546, 0x0003, 0x0004, 0x0055, 0x009e, + 0x000b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, + 0x002a, 0x0000, 0x0000, 0x0041, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0019, 0x0000, 0x0000, 0x0004, 0x0027, 0x0021, + 0x001e, 0x0024, 0x0001, 0x000a, 0x042e, 0x0001, 0x000a, 0x0440, + 0x0001, 0x0002, 0x0044, 0x0001, 0x001d, 0x0764, 0x0008, 0x0000, + // Entry 14180 - 141BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0033, 0x0000, 0x0000, 0x0004, + 0x003e, 0x0000, 0x0038, 0x003b, 0x0001, 0x0005, 0x0615, 0x0001, + 0x001d, 0x0502, 0x0001, 0x0015, 0x14be, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x004a, 0x0000, 0x9006, 0x0004, 0x0000, + 0x0000, 0x004f, 0x0052, 0x0001, 0x0002, 0x0000, 0x0001, 0x001d, + 0x04f7, 0x0035, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 141C0 - 141FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x008b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0099, 0x0003, + 0x0000, 0x0000, 0x008f, 0x0002, 0x0092, 0x0095, 0x0001, 0x001c, + 0x0777, 0x0002, 0x001c, 0x0783, 0x0783, 0x0001, 0x009b, 0x0001, + 0x0007, 0x0892, 0x0004, 0x0000, 0x0000, 0x0000, 0x00a3, 0x0001, + 0x00a5, 0x0003, 0x0000, 0x0000, 0x00a9, 0x0042, 0x000b, 0xffff, + // Entry 14200 - 1423F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 14240 - 1427F + 0x0000, 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000b, 0x0007, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0013, 0x0004, 0x0021, 0x001b, 0x0018, + 0x001e, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, + 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0001, 0x0002, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, + 0x0007, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0013, + 0x0004, 0x0021, 0x001b, 0x0018, 0x001e, 0x0001, 0x0000, 0x0524, + // Entry 14280 - 142BF + 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, + 0x0546, 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000b, 0x0019, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0014, 0x0000, 0x0000, 0x0001, 0x0016, 0x0001, + 0x0000, 0x240c, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0022, 0x0000, 0x0000, 0x0001, 0x0024, 0x0001, 0x0000, 0x2418, + 0x0003, 0x0004, 0x0000, 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0007, 0x0000, 0x0000, + // Entry 142C0 - 142FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x0004, 0x0023, 0x001d, + 0x001a, 0x0020, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, + 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, 0x0000, + 0x0000, 0x0000, 0x002b, 0x0001, 0x002d, 0x0003, 0x0038, 0x003f, + 0x0031, 0x0005, 0x0001, 0xffff, 0x08fc, 0x090f, 0x092c, 0x096c, + 0x0005, 0x0001, 0xffff, 0xffff, 0xffff, 0xffff, 0x096c, 0x0005, + 0x0001, 0xffff, 0xffff, 0xffff, 0xffff, 0x0970, 0x0003, 0x0000, + 0x0000, 0x0004, 0x0004, 0x0000, 0x0000, 0x0000, 0x0009, 0x0001, + // Entry 14300 - 1433F + 0x000b, 0x0003, 0x0016, 0x001d, 0x000f, 0x0005, 0x0001, 0xffff, + 0x08fc, 0x090f, 0x092c, 0x096c, 0x0005, 0x0001, 0xffff, 0xffff, + 0xffff, 0xffff, 0x096c, 0x0005, 0x0001, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0970, 0x0003, 0x0000, 0x0000, 0x0004, 0x0004, 0x0000, + 0x0000, 0x0000, 0x0009, 0x0001, 0x000b, 0x0003, 0x0016, 0x001d, + 0x000f, 0x0005, 0x0001, 0xffff, 0x08fc, 0x090f, 0x092c, 0x096c, + 0x0005, 0x0001, 0xffff, 0xffff, 0xffff, 0xffff, 0x096c, 0x0005, + 0x0001, 0xffff, 0xffff, 0xffff, 0xffff, 0x0970, 0x0003, 0x0004, + // Entry 14340 - 1437F + 0x0000, 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000d, 0x0007, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0015, 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, + 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, + 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, 0x0000, 0x0000, 0x0000, + 0x002b, 0x0001, 0x002d, 0x0003, 0x0038, 0x003f, 0x0031, 0x0005, + 0x0001, 0xffff, 0x08fc, 0x090f, 0x092c, 0x096c, 0x0005, 0x0001, + 0xffff, 0xffff, 0xffff, 0xffff, 0x096c, 0x0005, 0x0001, 0xffff, + // Entry 14380 - 143BF + 0xffff, 0xffff, 0xffff, 0x0970, 0x0003, 0x0000, 0x0000, 0x0004, + 0x0004, 0x0000, 0x0000, 0x0009, 0x0021, 0x0001, 0x000b, 0x0003, + 0x000f, 0x001b, 0x0015, 0x0004, 0x001d, 0xffff, 0xffff, 0xffff, + 0x00db, 0x0004, 0x001d, 0xffff, 0xffff, 0xffff, 0x00db, 0x0004, + 0x001d, 0xffff, 0xffff, 0xffff, 0x00db, 0x0001, 0x0023, 0x0003, + 0x0027, 0x00a9, 0x0068, 0x003f, 0x001d, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x00db, 0xffff, 0x00db, 0x00db, 0x00db, 0x00db, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x00db, 0xffff, + // Entry 143C0 - 143FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x00db, 0x003f, 0x001d, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x00db, 0xffff, 0x00db, 0x00db, 0x00db, + 0x00db, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x00db, + // Entry 14400 - 1443F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x00db, 0x003f, 0x001d, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x00db, 0xffff, 0x00db, 0x00db, + 0x00db, 0x00db, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 14440 - 1447F + 0x00db, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x00db, 0x0003, 0x0000, + 0x0000, 0x0004, 0x0004, 0x0000, 0x0000, 0x0000, 0x0009, 0x0001, + 0x000b, 0x0003, 0x000f, 0x014d, 0x00ae, 0x009d, 0x001d, 0xffff, + // Entry 14480 - 144BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x075b, 0xffff, + // Entry 144C0 - 144FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 14500 - 1453F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0771, 0x009d, 0x001d, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 14540 - 1457F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x075b, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 14580 - 145BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0771, 0x009d, 0x001d, 0xffff, 0xffff, 0xffff, + // Entry 145C0 - 145FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x075f, 0xffff, 0xffff, 0xffff, + // Entry 14600 - 1463F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 14640 - 1467F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0775, 0x0003, 0x0000, 0x0000, 0x0004, 0x0004, 0x0000, + 0x0000, 0x0009, 0x0021, 0x0001, 0x000b, 0x0003, 0x000f, 0x001b, + 0x0015, 0x0004, 0x001d, 0xffff, 0xffff, 0xffff, 0x00db, 0x0004, + 0x001d, 0xffff, 0xffff, 0xffff, 0x00db, 0x0004, 0x001d, 0xffff, + 0xffff, 0xffff, 0x00db, 0x0001, 0x0023, 0x0003, 0x0027, 0x00a9, + // Entry 14680 - 146BF + 0x0068, 0x003f, 0x001d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x00db, 0xffff, 0x00db, 0x00db, 0x00db, 0x00db, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x00db, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 146C0 - 146FF + 0xffff, 0x00db, 0x003f, 0x001d, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x00db, 0xffff, 0x00db, 0x00db, 0x00db, 0x00db, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x00db, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 14700 - 1473F + 0xffff, 0xffff, 0x00db, 0x003f, 0x001d, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x00db, 0xffff, 0x00db, 0x00db, 0x00db, 0x00db, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x00db, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 14740 - 1477F + 0xffff, 0xffff, 0xffff, 0x00db, 0x0001, 0x0002, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0007, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0013, 0x0004, + 0x0021, 0x001b, 0x0018, 0x001e, 0x0001, 0x0000, 0x0524, 0x0001, + 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, + 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000b, 0x001f, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0014, 0x0000, 0x0000, 0x0004, 0x0000, 0x0019, 0x0000, + // Entry 14780 - 147BF + 0x001c, 0x0001, 0x0000, 0x1e0b, 0x0001, 0x0000, 0x1e17, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0028, 0x0033, 0x0000, + 0x0004, 0x0000, 0x002d, 0x0000, 0x0030, 0x0001, 0x0001, 0x002d, + 0x0001, 0x0001, 0x0037, 0x0004, 0x0041, 0x003b, 0x0038, 0x003e, + 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, + 0x053d, 0x0001, 0x0000, 0x0546, 0x0003, 0x0004, 0x0000, 0x0026, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000d, 0x0007, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 147C0 - 147FF + 0x0015, 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, 0x0000, + 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, + 0x0000, 0x0546, 0x0004, 0x0000, 0x0000, 0x0000, 0x002b, 0x0001, + 0x002d, 0x0003, 0x0038, 0x003f, 0x0031, 0x0005, 0x0001, 0xffff, + 0x08fc, 0x090f, 0x092c, 0x096c, 0x0005, 0x0001, 0xffff, 0xffff, + 0xffff, 0xffff, 0x096c, 0x0005, 0x0001, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0970, 0x0003, 0x0000, 0x0000, 0x0004, 0x0004, 0x0000, + 0x0000, 0x0000, 0x0009, 0x0001, 0x000b, 0x0003, 0x0016, 0x001d, + // Entry 14800 - 1483F + 0x000f, 0x0005, 0x0001, 0xffff, 0x08fc, 0x090f, 0x092c, 0x096c, + 0x0005, 0x0001, 0xffff, 0xffff, 0xffff, 0xffff, 0x096c, 0x0005, + 0x0001, 0xffff, 0xffff, 0xffff, 0xffff, 0x0970, 0x0003, 0x0000, + 0x0000, 0x0004, 0x0004, 0x0000, 0x0000, 0x0000, 0x0009, 0x0001, + 0x000b, 0x0003, 0x0000, 0x0000, 0x000f, 0x0057, 0x001d, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 14840 - 1487F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0779, 0x0003, 0x0000, + // Entry 14880 - 148BF + 0x0000, 0x0004, 0x0004, 0x0000, 0x0000, 0x0000, 0x0009, 0x0001, + 0x000b, 0x0003, 0x0016, 0x001d, 0x000f, 0x0005, 0x0001, 0xffff, + 0x08fc, 0x090f, 0x092c, 0x096c, 0x0005, 0x0001, 0xffff, 0xffff, + 0xffff, 0xffff, 0x096c, 0x0005, 0x0001, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0970, 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0007, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0013, 0x0004, 0x0021, 0x001b, + 0x0018, 0x001e, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, + // Entry 148C0 - 148FF + 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0003, 0x0000, + 0x0000, 0x0004, 0x0004, 0x0000, 0x0000, 0x0000, 0x0009, 0x0001, + 0x000b, 0x0003, 0x0016, 0x001d, 0x000f, 0x0005, 0x0001, 0xffff, + 0x08fc, 0x090f, 0x092c, 0x096c, 0x0005, 0x0001, 0xffff, 0xffff, + 0xffff, 0xffff, 0x096c, 0x0005, 0x0001, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0970, 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0007, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0013, 0x0004, 0x0021, 0x001b, + // Entry 14900 - 1493F + 0x0018, 0x001e, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, + 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0001, 0x0002, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000b, 0x0007, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0013, 0x0004, 0x0021, 0x001b, 0x0018, 0x001e, 0x0001, 0x0000, + 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, + 0x0000, 0x0546, 0x0003, 0x0004, 0x0000, 0x0035, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0021, 0x0008, + // Entry 14940 - 1497F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, 0x0000, + 0x0004, 0x001e, 0x0000, 0x0000, 0x001b, 0x0001, 0x001d, 0x077d, + 0x0001, 0x001d, 0x0786, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x002a, 0x0000, 0x0000, 0x0004, 0x0032, 0x0000, 0x0000, + 0x002f, 0x0001, 0x001d, 0x0793, 0x0001, 0x001d, 0x079a, 0x0004, + 0x0000, 0x0000, 0x0000, 0x003a, 0x0001, 0x003c, 0x0003, 0x0040, + 0x010e, 0x00a7, 0x0065, 0x001d, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 14980 - 149BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0279, 0x0287, + 0x02f2, 0x035a, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x07a2, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 149C0 - 149FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0440, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0484, 0x0065, 0x001d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x027d, 0x028c, 0x02f6, + 0x035e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x07a7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 14A00 - 14A3F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0444, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0488, + // Entry 14A40 - 14A7F + 0x0065, 0x001d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0282, 0x0292, 0x02fb, 0x0363, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x07ad, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 14A80 - 14ABF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0449, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x048d, 0x0001, + 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000b, 0x001c, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0014, 0x0000, 0x0000, 0x0004, 0x0000, 0x0000, 0x0000, 0x0019, + // Entry 14AC0 - 14AFF + 0x0001, 0x001d, 0x04f7, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0025, 0x0000, 0x0000, 0x0004, 0x0000, 0x0000, 0x0000, + 0x002a, 0x0001, 0x001d, 0x0502, 0x0001, 0x0002, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0007, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0013, 0x0004, + 0x0021, 0x001b, 0x0018, 0x001e, 0x0001, 0x0000, 0x0524, 0x0001, + 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, + 0x0003, 0x0004, 0x0000, 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, + // Entry 14B00 - 14B3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0007, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x0004, 0x0023, 0x001d, + 0x001a, 0x0020, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, + 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, 0x0000, + 0x0000, 0x0000, 0x002b, 0x0001, 0x002d, 0x0003, 0x0038, 0x003f, + 0x0031, 0x0005, 0x0001, 0xffff, 0x08fc, 0x090f, 0x092c, 0x096c, + 0x0005, 0x0001, 0xffff, 0xffff, 0xffff, 0xffff, 0x096c, 0x0005, + 0x0001, 0xffff, 0xffff, 0xffff, 0xffff, 0x0970, 0x0001, 0x0002, + // Entry 14B40 - 14B7F + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000b, 0x0007, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0013, 0x0004, 0x0021, 0x001b, 0x0018, 0x001e, 0x0001, 0x0000, + 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, + 0x0000, 0x0546, 0x0003, 0x0000, 0x0000, 0x0004, 0x0004, 0x0000, + 0x0000, 0x0000, 0x0009, 0x0001, 0x000b, 0x0003, 0x0016, 0x001d, + 0x000f, 0x0005, 0x0001, 0xffff, 0x08fc, 0x090f, 0x092c, 0x096c, + 0x0005, 0x0001, 0xffff, 0xffff, 0xffff, 0xffff, 0x096c, 0x0005, + // Entry 14B80 - 14BBF + 0x0001, 0xffff, 0xffff, 0xffff, 0xffff, 0x0970, 0x0001, 0x0002, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, + 0x0019, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0014, + 0x0000, 0x0000, 0x0001, 0x0016, 0x0001, 0x001d, 0x07b3, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0022, 0x0000, 0x0000, + 0x0001, 0x0024, 0x0001, 0x0000, 0x051c, 0x0003, 0x0004, 0x0029, + 0x0073, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000d, 0x001b, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 14BC0 - 14BFF + 0x0016, 0x0000, 0x0000, 0x0001, 0x0018, 0x0001, 0x0006, 0x020f, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0024, 0x0000, + 0x0000, 0x0001, 0x0026, 0x0001, 0x0000, 0x2418, 0x000e, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0038, 0x0000, 0x0000, 0x0040, 0x0000, + 0x0000, 0x0054, 0x0000, 0x0000, 0x006b, 0x0002, 0x0000, 0x003b, + 0x0003, 0x001d, 0x07bd, 0x07c5, 0x07cd, 0x0003, 0x0000, 0x0044, + 0x0049, 0x0003, 0x001d, 0x07d5, 0x07de, 0x07e7, 0x0002, 0x004c, + 0x0050, 0x0002, 0x001d, 0x013f, 0x004a, 0x0002, 0x001d, 0x014b, + // Entry 14C00 - 14C3F + 0x0055, 0x0003, 0x0058, 0x005b, 0x0060, 0x0001, 0x001d, 0x07f0, + 0x0003, 0x001d, 0x07f4, 0x07fd, 0x0806, 0x0002, 0x0063, 0x0067, + 0x0002, 0x001d, 0x080f, 0x080f, 0x0002, 0x001d, 0x081a, 0x081a, + 0x0002, 0x0000, 0x006e, 0x0003, 0x001d, 0x0826, 0x082e, 0x0836, + 0x0004, 0x0000, 0x0000, 0x0000, 0x0078, 0x0001, 0x007a, 0x0003, + 0x0000, 0x0000, 0x007e, 0x007d, 0x001d, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 14C40 - 14C7F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 14C80 - 14CBF + 0xffff, 0xffff, 0xffff, 0x0779, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x083e, 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0007, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0013, 0x0004, 0x0021, 0x001b, + // Entry 14CC0 - 14CFF + 0x0018, 0x001e, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, + 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0003, 0x0000, + 0x0000, 0x0004, 0x0004, 0x0000, 0x0000, 0x0000, 0x0009, 0x0001, + 0x000b, 0x0003, 0x0016, 0x001d, 0x000f, 0x0005, 0x0001, 0xffff, + 0x08fc, 0x090f, 0x092c, 0x096c, 0x0005, 0x0001, 0xffff, 0xffff, + 0xffff, 0xffff, 0x096c, 0x0005, 0x0001, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0970, 0x0003, 0x0000, 0x0000, 0x0004, 0x0004, 0x0000, + 0x0000, 0x0000, 0x0009, 0x0001, 0x000b, 0x0003, 0x0016, 0x001d, + // Entry 14D00 - 14D3F + 0x000f, 0x0005, 0x0001, 0xffff, 0x08fc, 0x090f, 0x092c, 0x096c, + 0x0005, 0x0001, 0xffff, 0xffff, 0xffff, 0xffff, 0x096c, 0x0005, + 0x0001, 0xffff, 0xffff, 0xffff, 0xffff, 0x0970, 0x0001, 0x0002, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000b, 0x0007, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0013, 0x0004, 0x0021, 0x001b, 0x0018, 0x001e, 0x0001, 0x0000, + 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, + 0x0000, 0x0546, 0x0003, 0x0000, 0x0000, 0x0004, 0x0004, 0x0000, + // Entry 14D40 - 14D7F + 0x0000, 0x0000, 0x0009, 0x0001, 0x000b, 0x0003, 0x0016, 0x001d, + 0x000f, 0x0005, 0x0001, 0xffff, 0x08fc, 0x090f, 0x092c, 0x096c, + 0x0005, 0x0001, 0xffff, 0xffff, 0xffff, 0xffff, 0x096c, 0x0005, + 0x0001, 0xffff, 0xffff, 0xffff, 0xffff, 0x0970, 0x0001, 0x0002, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000b, 0x0007, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0013, 0x0004, 0x0021, 0x001b, 0x0018, 0x001e, 0x0001, 0x0000, + 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, + // Entry 14D80 - 14DBF + 0x0000, 0x0546, 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0007, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0013, 0x0004, 0x0021, 0x001b, + 0x0018, 0x001e, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, + 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0003, 0x0004, + 0x0000, 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000d, 0x0007, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0015, 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, + // Entry 14DC0 - 14DFF + 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, + 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, 0x0000, 0x0000, 0x0000, + 0x002b, 0x0001, 0x002d, 0x0003, 0x0038, 0x003f, 0x0031, 0x0005, + 0x0001, 0xffff, 0x08fc, 0x090f, 0x092c, 0x096c, 0x0005, 0x0001, + 0xffff, 0xffff, 0xffff, 0xffff, 0x096c, 0x0005, 0x0001, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0970, 0x0003, 0x0004, 0x0000, 0x0026, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000d, 0x0007, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 14E00 - 14E3F + 0x0015, 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, 0x0000, + 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, + 0x0000, 0x0546, 0x0004, 0x0000, 0x0000, 0x0000, 0x002b, 0x0001, + 0x002d, 0x0003, 0x0038, 0x003f, 0x0031, 0x0005, 0x0001, 0xffff, + 0x08fc, 0x090f, 0x092c, 0x096c, 0x0005, 0x0001, 0xffff, 0xffff, + 0xffff, 0xffff, 0x096c, 0x0005, 0x0001, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0970, 0x0003, 0x0004, 0x0000, 0x0052, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0027, 0x0008, + // Entry 14E40 - 14E7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, 0x0000, + 0x0004, 0x0024, 0x001e, 0x001b, 0x0021, 0x0001, 0x0010, 0x0003, + 0x0001, 0x0000, 0x1e0b, 0x0001, 0x0000, 0x1e17, 0x0001, 0x001d, + 0x0842, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0030, + 0x0041, 0x0000, 0x0004, 0x003e, 0x0038, 0x0035, 0x003b, 0x0001, + 0x0001, 0x001d, 0x0001, 0x0001, 0x002d, 0x0001, 0x0001, 0x0037, + 0x0001, 0x001d, 0x0850, 0x0004, 0x004f, 0x0049, 0x0046, 0x004c, + 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, + // Entry 14E80 - 14EBF + 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, 0x0000, 0x0000, 0x0000, + 0x0057, 0x0001, 0x0059, 0x0003, 0x0064, 0x006b, 0x005d, 0x0005, + 0x0001, 0xffff, 0x08fc, 0x090f, 0x092c, 0x096c, 0x0005, 0x0001, + 0xffff, 0xffff, 0xffff, 0xffff, 0x096c, 0x0005, 0x0001, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0970, 0x0003, 0x0000, 0x0000, 0x0004, + 0x0004, 0x0000, 0x0000, 0x0000, 0x0009, 0x0001, 0x000b, 0x0003, + 0x0016, 0x001d, 0x000f, 0x0005, 0x0001, 0xffff, 0x08fc, 0x090f, + 0x092c, 0x096c, 0x0005, 0x0001, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 14EC0 - 14EFF + 0x096c, 0x0005, 0x0001, 0xffff, 0xffff, 0xffff, 0xffff, 0x0970, + 0x0003, 0x0004, 0x0000, 0x0052, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000d, 0x0027, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, 0x0000, 0x0004, 0x0024, + 0x001e, 0x001b, 0x0021, 0x0001, 0x0010, 0x0003, 0x0001, 0x0000, + 0x1e0b, 0x0001, 0x001d, 0x0858, 0x0001, 0x0000, 0x240c, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0030, 0x0041, 0x0000, + 0x0004, 0x003e, 0x0038, 0x0035, 0x003b, 0x0001, 0x0001, 0x001d, + // Entry 14F00 - 14F3F + 0x0001, 0x0001, 0x002d, 0x0001, 0x001d, 0x0863, 0x0001, 0x0002, + 0x028b, 0x0004, 0x004f, 0x0049, 0x0046, 0x004c, 0x0001, 0x0000, + 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, + 0x0000, 0x0546, 0x0004, 0x0000, 0x0000, 0x0000, 0x0057, 0x0001, + 0x0059, 0x0003, 0x0064, 0x006b, 0x005d, 0x0005, 0x0001, 0xffff, + 0x08fc, 0x090f, 0x092c, 0x096c, 0x0005, 0x0001, 0xffff, 0xffff, + 0xffff, 0xffff, 0x096c, 0x0005, 0x0001, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0970, 0x0003, 0x0004, 0x0135, 0x0275, 0x0008, 0x0000, + // Entry 14F40 - 14F7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0027, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, 0x0000, + 0x0004, 0x0024, 0x001e, 0x001b, 0x0021, 0x0001, 0x001d, 0x086c, + 0x0001, 0x001d, 0x0886, 0x0001, 0x001d, 0x0892, 0x0001, 0x0000, + 0x04af, 0x0008, 0x0030, 0x0077, 0x00a6, 0x00cd, 0x00ee, 0x0113, + 0x0124, 0x0000, 0x0002, 0x0033, 0x0055, 0x0003, 0x0037, 0x0000, + 0x0046, 0x000d, 0x000d, 0xffff, 0x0059, 0x005d, 0x0061, 0x0065, + 0x3272, 0x006d, 0x0071, 0x32e9, 0x0079, 0x007d, 0x0081, 0x0085, + // Entry 14F80 - 14FBF + 0x000d, 0x001d, 0xffff, 0x089d, 0x08a5, 0x08ae, 0x08b4, 0x08bb, + 0x08c0, 0x08c6, 0x08cc, 0x08d5, 0x08df, 0x08e7, 0x08f0, 0x0003, + 0x0000, 0x0059, 0x0068, 0x000d, 0x0000, 0xffff, 0x1e5d, 0x2364, + 0x2357, 0x241f, 0x2357, 0x1e5d, 0x1e5d, 0x241f, 0x235b, 0x236a, + 0x236c, 0x236e, 0x000d, 0x001d, 0xffff, 0x089d, 0x08a5, 0x08ae, + 0x08b4, 0x08bb, 0x08c0, 0x08c6, 0x08cc, 0x08d5, 0x08df, 0x08e7, + 0x08f0, 0x0002, 0x007a, 0x0090, 0x0003, 0x007e, 0x0000, 0x0087, + 0x0007, 0x0019, 0x0000, 0x4a20, 0x4a23, 0x4a26, 0x4a29, 0x4a2d, + // Entry 14FC0 - 14FFF + 0x4a30, 0x0007, 0x001d, 0x08f9, 0x0902, 0x0908, 0x090e, 0x0917, + 0x091f, 0x0928, 0x0003, 0x0000, 0x0094, 0x009d, 0x0007, 0x0000, + 0x236e, 0x2296, 0x2357, 0x2357, 0x2421, 0x1edb, 0x235b, 0x0007, + 0x001d, 0x08f9, 0x0902, 0x0908, 0x090e, 0x0917, 0x091f, 0x0928, + 0x0002, 0x00a9, 0x00bb, 0x0003, 0x00ad, 0x0000, 0x00b4, 0x0005, + 0x0000, 0xffff, 0x1f17, 0x1f1a, 0x1f1d, 0x1f20, 0x0005, 0x001d, + 0xffff, 0x092f, 0x093e, 0x094d, 0x095c, 0x0003, 0x0000, 0x00bf, + 0x00c6, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + // Entry 15000 - 1503F + 0x0005, 0x001d, 0xffff, 0x092f, 0x093e, 0x094d, 0x095c, 0x0001, + 0x00cf, 0x0003, 0x00d3, 0x00dc, 0x00e5, 0x0002, 0x00d6, 0x00d9, + 0x0001, 0x001d, 0x096b, 0x0001, 0x001d, 0x096f, 0x0002, 0x00df, + 0x00e2, 0x0001, 0x0000, 0x1f9c, 0x0001, 0x0000, 0x21e4, 0x0002, + 0x00e8, 0x00eb, 0x0001, 0x001d, 0x096b, 0x0001, 0x001d, 0x096f, + 0x0003, 0x00fd, 0x0108, 0x00f2, 0x0002, 0x00f5, 0x00f9, 0x0002, + 0x001d, 0x0973, 0x0989, 0x0002, 0x001d, 0x0976, 0x098c, 0x0002, + 0x0100, 0x0104, 0x0002, 0x001d, 0x0973, 0x0989, 0x0002, 0x001d, + // Entry 15040 - 1507F + 0x0998, 0x099f, 0x0002, 0x010b, 0x010f, 0x0002, 0x001d, 0x0973, + 0x0989, 0x0002, 0x001d, 0x09a4, 0x09a8, 0x0004, 0x0121, 0x011b, + 0x0118, 0x011e, 0x0001, 0x001d, 0x09ab, 0x0001, 0x001d, 0x09c3, + 0x0001, 0x001d, 0x09cd, 0x0001, 0x001d, 0x09d6, 0x0004, 0x0132, + 0x012c, 0x0129, 0x012f, 0x0001, 0x001d, 0x09df, 0x0001, 0x0000, + 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0040, + 0x0176, 0x0000, 0x0000, 0x017b, 0x0000, 0x0000, 0x0192, 0x0000, + 0x0000, 0x01a4, 0x0000, 0x0000, 0x01bb, 0x0000, 0x0000, 0x0000, + // Entry 15080 - 150BF + 0x0000, 0x0000, 0x01d2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x01e9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01ee, 0x0000, + 0x0000, 0x01f6, 0x0000, 0x0000, 0x01fe, 0x0000, 0x0000, 0x0206, + 0x0000, 0x0000, 0x020e, 0x0000, 0x0000, 0x0216, 0x0000, 0x0000, + 0x021e, 0x0000, 0x0000, 0x0000, 0x0226, 0x0000, 0x022b, 0x0000, + 0x023d, 0x0242, 0x0000, 0x0254, 0x0259, 0x0000, 0x026b, 0x0270, + 0x0001, 0x0178, 0x0001, 0x001d, 0x09fc, 0x0003, 0x017f, 0x0182, + 0x0187, 0x0001, 0x001d, 0x0a01, 0x0003, 0x001d, 0x0a06, 0x0a13, + // Entry 150C0 - 150FF + 0x0a1d, 0x0002, 0x018a, 0x018e, 0x0002, 0x001d, 0x0a38, 0x0a2a, + 0x0002, 0x001d, 0x0a57, 0x0a47, 0x0003, 0x0196, 0x0000, 0x0199, + 0x0001, 0x001d, 0x0a68, 0x0002, 0x019c, 0x01a0, 0x0002, 0x001d, + 0x0a87, 0x0a73, 0x0002, 0x001d, 0x0ab2, 0x0a9c, 0x0003, 0x01a8, + 0x01ab, 0x01b0, 0x0001, 0x001d, 0x0ac9, 0x0003, 0x001d, 0x0ad0, + 0x0adf, 0x0aeb, 0x0002, 0x01b3, 0x01b7, 0x0002, 0x001d, 0x0b0a, + 0x0afa, 0x0002, 0x001d, 0x0b2d, 0x0b1b, 0x0003, 0x01bf, 0x01c2, + 0x01c7, 0x0001, 0x001d, 0x0b40, 0x0003, 0x001d, 0x0b48, 0x0b58, + // Entry 15100 - 1513F + 0x0b65, 0x0002, 0x01ca, 0x01ce, 0x0002, 0x001d, 0x0b86, 0x0b75, + 0x0002, 0x001d, 0x0bab, 0x0b98, 0x0003, 0x01d6, 0x01d9, 0x01de, + 0x0001, 0x001d, 0x0bbf, 0x0003, 0x001d, 0x0bc4, 0x0bcc, 0x0bd4, + 0x0002, 0x01e1, 0x01e5, 0x0002, 0x001d, 0x0bea, 0x0bdc, 0x0002, + 0x001d, 0x0c09, 0x0bf9, 0x0001, 0x01eb, 0x0001, 0x001d, 0x0c1a, + 0x0002, 0x0000, 0x01f1, 0x0003, 0x001d, 0x0c2d, 0x0c3e, 0x0c4f, + 0x0002, 0x0000, 0x01f9, 0x0003, 0x001d, 0x0c60, 0x0c6e, 0x0c7c, + 0x0002, 0x0000, 0x0201, 0x0003, 0x001d, 0x0c8a, 0x0c98, 0x0ca6, + // Entry 15140 - 1517F + 0x0002, 0x0000, 0x0209, 0x0003, 0x001d, 0x0cb4, 0x0cc5, 0x0cd6, + 0x0002, 0x0000, 0x0211, 0x0003, 0x001d, 0x0ce7, 0x0cf7, 0x0d07, + 0x0002, 0x0000, 0x0219, 0x0003, 0x001d, 0x0d17, 0x0d28, 0x0d39, + 0x0002, 0x0000, 0x0221, 0x0003, 0x001d, 0x0d4a, 0x0d59, 0x0d68, + 0x0001, 0x0228, 0x0001, 0x001d, 0x0d77, 0x0003, 0x022f, 0x0000, + 0x0232, 0x0001, 0x001d, 0x0d7f, 0x0002, 0x0235, 0x0239, 0x0002, + 0x001d, 0x0d92, 0x0d84, 0x0002, 0x001d, 0x0db1, 0x0da1, 0x0001, + 0x023f, 0x0001, 0x0000, 0x213b, 0x0003, 0x0246, 0x0000, 0x0249, + // Entry 15180 - 151BF + 0x0001, 0x001d, 0x0dc2, 0x0002, 0x024c, 0x0250, 0x0002, 0x001d, + 0x0dd9, 0x0dc9, 0x0002, 0x001d, 0x0dfc, 0x0dea, 0x0001, 0x0256, + 0x0001, 0x0000, 0x1f9a, 0x0003, 0x025d, 0x0000, 0x0260, 0x0001, + 0x001d, 0x0e0f, 0x0002, 0x0263, 0x0267, 0x0002, 0x001d, 0x0e28, + 0x0e17, 0x0002, 0x001d, 0x0e4d, 0x0e3a, 0x0001, 0x026d, 0x0001, + 0x0000, 0x2002, 0x0001, 0x0272, 0x0001, 0x001d, 0x0e61, 0x0004, + 0x027a, 0x027f, 0x0000, 0x0284, 0x0003, 0x001d, 0x0e69, 0x0e79, + 0x0e80, 0x0003, 0x001d, 0x0e84, 0x0e91, 0x0ea5, 0x0002, 0x0000, + // Entry 151C0 - 151FF + 0x0287, 0x0003, 0x02ed, 0x034f, 0x028b, 0x0060, 0x001d, 0xffff, + 0x0eb8, 0x0ecc, 0x0ee1, 0x0f0a, 0xffff, 0xffff, 0x0f5f, 0x0fbb, + 0x1017, 0x1072, 0xffff, 0xffff, 0x10c3, 0xffff, 0xffff, 0xffff, + 0x1105, 0x1164, 0x11c1, 0x1227, 0x1281, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x12d0, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x130a, 0x1357, 0xffff, 0x13a8, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 15200 - 1523F + 0x13e5, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1402, 0xffff, 0x140f, 0x1420, 0x1437, 0x144f, 0xffff, 0xffff, + 0x1477, 0x14ad, 0xffff, 0xffff, 0xffff, 0x14e0, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1512, 0x0060, + 0x001d, 0xffff, 0xffff, 0xffff, 0xffff, 0x0ef3, 0xffff, 0xffff, + 0x0f45, 0x0fa0, 0x0ffe, 0x1056, 0xffff, 0xffff, 0x10b7, 0xffff, + 0xffff, 0xffff, 0x10e8, 0x114c, 0x11a1, 0x120e, 0x1266, 0xffff, + // Entry 15240 - 1527F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x12c4, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x12f5, 0x1341, + 0xffff, 0x1390, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1469, 0x14a0, 0xffff, 0xffff, 0xffff, 0x14d4, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 15280 - 152BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1505, 0x0060, 0x001d, 0xffff, 0xffff, 0xffff, 0xffff, 0x0f27, + 0xffff, 0xffff, 0x0f7f, 0x0fdc, 0x1036, 0x1094, 0xffff, 0xffff, + 0x10d5, 0xffff, 0xffff, 0xffff, 0x1128, 0x1182, 0x11e7, 0x1246, + 0x12a2, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x12e2, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1325, 0x1373, 0xffff, 0x13c6, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 152C0 - 152FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x148b, 0x14c0, 0xffff, 0xffff, + 0xffff, 0x14f2, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1525, 0x0003, 0x0004, 0x05c1, 0x0a16, 0x0012, + 0x0017, 0x0030, 0x004a, 0x0000, 0x00d1, 0x0000, 0x0158, 0x0183, + 0x038f, 0x0413, 0x0491, 0x0000, 0x0000, 0x0000, 0x0000, 0x050f, + // Entry 15300 - 1533F + 0x0527, 0x05a5, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x001d, + 0x0003, 0x0026, 0x002b, 0x0021, 0x0001, 0x0023, 0x0001, 0x0000, + 0x0000, 0x0001, 0x0028, 0x0001, 0x0000, 0x0000, 0x0001, 0x002d, + 0x0001, 0x0000, 0x0000, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0039, 0x0000, 0x0000, 0x0004, 0x0047, 0x0041, 0x003e, + 0x0044, 0x0001, 0x001d, 0x1539, 0x0001, 0x0005, 0x0637, 0x0001, + 0x0005, 0x0637, 0x0001, 0x0005, 0x0637, 0x0005, 0x0050, 0x0000, + 0x0000, 0x0000, 0x00bb, 0x0002, 0x0053, 0x0087, 0x0003, 0x0057, + // Entry 15340 - 1537F + 0x0067, 0x0077, 0x000e, 0x0014, 0xffff, 0x0395, 0x039a, 0x34b1, + 0x03a6, 0x34b7, 0x34bc, 0x34c3, 0x03c2, 0x34cc, 0x34d4, 0x34da, + 0x03e3, 0x03e9, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, + 0x2426, 0x0422, 0x000e, 0x0014, 0xffff, 0x0395, 0x039a, 0x34b1, + 0x03a6, 0x34b7, 0x34bc, 0x34c3, 0x03c2, 0x34cc, 0x34d4, 0x34da, + 0x03e3, 0x03e9, 0x0003, 0x008b, 0x009b, 0x00ab, 0x000e, 0x0014, + 0xffff, 0x0395, 0x039a, 0x34b1, 0x03a6, 0x34b7, 0x34bc, 0x34c3, + // Entry 15380 - 153BF + 0x03c2, 0x34cc, 0x34d4, 0x34da, 0x03e3, 0x03e9, 0x000e, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x0422, 0x000e, 0x0014, + 0xffff, 0x0395, 0x039a, 0x34b1, 0x03a6, 0x34b7, 0x34bc, 0x34c3, + 0x03c2, 0x34cc, 0x34d4, 0x34da, 0x03e3, 0x03e9, 0x0003, 0x00c5, + 0x00cb, 0x00bf, 0x0001, 0x00c1, 0x0002, 0x0000, 0x0425, 0x042a, + 0x0001, 0x00c7, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x00cd, + 0x0002, 0x0000, 0x0425, 0x042a, 0x0005, 0x00d7, 0x0000, 0x0000, + // Entry 153C0 - 153FF + 0x0000, 0x0142, 0x0002, 0x00da, 0x010e, 0x0003, 0x00de, 0x00ee, + 0x00fe, 0x000e, 0x0014, 0xffff, 0x04f6, 0x3444, 0x344b, 0x3451, + 0x3458, 0x0519, 0x0521, 0x345c, 0x3463, 0x0537, 0x053c, 0x346a, + 0x3472, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, + 0x0422, 0x000e, 0x0014, 0xffff, 0x04f6, 0x3444, 0x344b, 0x3451, + 0x3458, 0x0519, 0x0521, 0x345c, 0x3463, 0x0537, 0x053c, 0x346a, + 0x3472, 0x0003, 0x0112, 0x0122, 0x0132, 0x000e, 0x0014, 0xffff, + // Entry 15400 - 1543F + 0x04f6, 0x3444, 0x344b, 0x3451, 0x3458, 0x0519, 0x0521, 0x345c, + 0x3463, 0x0537, 0x053c, 0x346a, 0x3472, 0x000e, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x2215, 0x2218, 0x2426, 0x0422, 0x000e, 0x0014, 0xffff, + 0x04f6, 0x3444, 0x344b, 0x3451, 0x3458, 0x0519, 0x0521, 0x345c, + 0x3463, 0x0537, 0x053c, 0x346a, 0x3472, 0x0003, 0x014c, 0x0152, + 0x0146, 0x0001, 0x0148, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, + 0x014e, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x0154, 0x0002, + // Entry 15440 - 1547F + 0x0000, 0x0425, 0x042a, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0161, 0x0000, 0x0172, 0x0004, 0x016f, 0x0169, 0x0166, + 0x016c, 0x0001, 0x001d, 0x1545, 0x0001, 0x001d, 0x1560, 0x0001, + 0x0010, 0x004c, 0x0001, 0x001d, 0x1575, 0x0004, 0x0180, 0x017a, + 0x0177, 0x017d, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x018c, + 0x01f1, 0x0248, 0x027d, 0x0342, 0x035c, 0x036d, 0x037e, 0x0002, + 0x018f, 0x01c0, 0x0003, 0x0193, 0x01a2, 0x01b1, 0x000d, 0x001d, + // Entry 15480 - 154BF + 0xffff, 0x157e, 0x1583, 0x1588, 0x158d, 0x1592, 0x1597, 0x159c, + 0x15a1, 0x15a6, 0x15ac, 0x15b1, 0x15b6, 0x000d, 0x0000, 0xffff, + 0x2146, 0x2364, 0x2357, 0x241f, 0x2357, 0x1e5d, 0x1e5d, 0x241f, + 0x235b, 0x236a, 0x236c, 0x236e, 0x000d, 0x001d, 0xffff, 0x15bb, + 0x15c1, 0x15c9, 0x15cf, 0x15d5, 0x08c0, 0x08c6, 0x15da, 0x15e1, + 0x15ec, 0x15f4, 0x15fe, 0x0003, 0x01c4, 0x01d3, 0x01e2, 0x000d, + 0x001d, 0xffff, 0x157e, 0x1583, 0x1588, 0x158d, 0x1592, 0x1597, + 0x159c, 0x15a1, 0x15a6, 0x15ac, 0x15b1, 0x15b6, 0x000d, 0x0000, + // Entry 154C0 - 154FF + 0xffff, 0x2146, 0x2364, 0x2357, 0x241f, 0x2357, 0x1e5d, 0x1e5d, + 0x241f, 0x235b, 0x236a, 0x236c, 0x236e, 0x000d, 0x001d, 0xffff, + 0x15bb, 0x15c1, 0x15c9, 0x15cf, 0x15d5, 0x08c0, 0x08c6, 0x15da, + 0x15e1, 0x15ec, 0x15f4, 0x15fe, 0x0002, 0x01f4, 0x021e, 0x0005, + 0x01fa, 0x0203, 0x0215, 0x0000, 0x020c, 0x0007, 0x001d, 0x1608, + 0x160d, 0x1588, 0x1612, 0x1618, 0x161d, 0x1622, 0x0007, 0x0000, + 0x236e, 0x2296, 0x2357, 0x2060, 0x1e5d, 0x1edb, 0x235b, 0x0007, + 0x001d, 0x1628, 0x162b, 0x162e, 0x1631, 0x1634, 0x1637, 0x163a, + // Entry 15500 - 1553F + 0x0007, 0x001d, 0x163d, 0x1645, 0x164b, 0x1652, 0x165d, 0x1664, + 0x166c, 0x0005, 0x0224, 0x022d, 0x023f, 0x0000, 0x0236, 0x0007, + 0x001d, 0x1608, 0x160d, 0x1588, 0x1612, 0x1618, 0x161d, 0x1622, + 0x0007, 0x0000, 0x236e, 0x2296, 0x2357, 0x2060, 0x1e5d, 0x1edb, + 0x235b, 0x0007, 0x001d, 0x1628, 0x162b, 0x162e, 0x1631, 0x1634, + 0x1637, 0x163a, 0x0007, 0x001d, 0x163d, 0x1645, 0x164b, 0x1652, + 0x165d, 0x1664, 0x166c, 0x0002, 0x024b, 0x0264, 0x0003, 0x024f, + 0x0256, 0x025d, 0x0005, 0x001d, 0xffff, 0x1674, 0x1677, 0x167a, + // Entry 15540 - 1557F + 0x167d, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x0005, 0x001d, 0xffff, 0x1680, 0x168f, 0x169e, 0x16ad, 0x0003, + 0x0268, 0x026f, 0x0276, 0x0005, 0x001d, 0xffff, 0x1674, 0x1677, + 0x167a, 0x167d, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x0005, 0x001d, 0xffff, 0x1680, 0x168f, 0x169e, 0x16ad, + 0x0002, 0x0280, 0x02e1, 0x0003, 0x0284, 0x02a3, 0x02c2, 0x0009, + 0x028e, 0x0294, 0x0000, 0x0297, 0x0000, 0x029d, 0x02a0, 0x0291, + 0x029a, 0x0001, 0x0010, 0x0268, 0x0001, 0x001d, 0x16bc, 0x0001, + // Entry 15580 - 155BF + 0x0010, 0x026e, 0x0001, 0x001d, 0x16ca, 0x0001, 0x0006, 0x0cd0, + 0x0001, 0x0006, 0x0cde, 0x0001, 0x001d, 0x16da, 0x0009, 0x02ad, + 0x02b3, 0x0000, 0x02b6, 0x0000, 0x02bc, 0x02bf, 0x02b0, 0x02b9, + 0x0001, 0x0010, 0x0268, 0x0001, 0x001d, 0x16bc, 0x0001, 0x0010, + 0x026e, 0x0001, 0x001d, 0x16ca, 0x0001, 0x0006, 0x0cd0, 0x0001, + 0x0006, 0x0cde, 0x0001, 0x001d, 0x16da, 0x0009, 0x02cc, 0x02d2, + 0x0000, 0x02d5, 0x0000, 0x02db, 0x02de, 0x02cf, 0x02d8, 0x0001, + 0x0010, 0x0268, 0x0001, 0x001d, 0x16bc, 0x0001, 0x0010, 0x026e, + // Entry 155C0 - 155FF + 0x0001, 0x001d, 0x16ca, 0x0001, 0x0006, 0x0cd0, 0x0001, 0x0006, + 0x0cde, 0x0001, 0x001d, 0x16da, 0x0003, 0x02e5, 0x0304, 0x0323, + 0x0009, 0x02ef, 0x02f5, 0x0000, 0x02f8, 0x0000, 0x02fe, 0x0301, + 0x02f2, 0x02fb, 0x0001, 0x0010, 0x0268, 0x0001, 0x001d, 0x16e6, + 0x0001, 0x0010, 0x026e, 0x0001, 0x001d, 0x16f0, 0x0001, 0x0006, + 0x0cea, 0x0001, 0x0006, 0x0cf2, 0x0001, 0x001d, 0x16fa, 0x0009, + 0x030e, 0x0314, 0x0000, 0x0317, 0x0000, 0x031d, 0x0320, 0x0311, + 0x031a, 0x0001, 0x0010, 0x0268, 0x0001, 0x001d, 0x16e6, 0x0001, + // Entry 15600 - 1563F + 0x0010, 0x026e, 0x0001, 0x001d, 0x16f0, 0x0001, 0x0006, 0x0cea, + 0x0001, 0x0006, 0x0cf2, 0x0001, 0x001d, 0x16fa, 0x0009, 0x032d, + 0x0333, 0x0000, 0x0336, 0x0000, 0x033c, 0x033f, 0x0330, 0x0339, + 0x0001, 0x0010, 0x0268, 0x0001, 0x001d, 0x16e6, 0x0001, 0x0010, + 0x026e, 0x0001, 0x001d, 0x16f0, 0x0001, 0x0006, 0x0cea, 0x0001, + 0x0006, 0x0cf2, 0x0001, 0x001d, 0x16fa, 0x0003, 0x0351, 0x0000, + 0x0346, 0x0002, 0x0349, 0x034d, 0x0002, 0x001d, 0x1700, 0x1727, + 0x0002, 0x001d, 0x1710, 0x173a, 0x0002, 0x0354, 0x0358, 0x0002, + // Entry 15640 - 1567F + 0x001d, 0x1745, 0x1754, 0x0002, 0x001d, 0x174b, 0x175a, 0x0004, + 0x036a, 0x0364, 0x0361, 0x0367, 0x0001, 0x001d, 0x1760, 0x0001, + 0x001d, 0x1779, 0x0001, 0x0002, 0x003c, 0x0001, 0x0000, 0x2418, + 0x0004, 0x037b, 0x0375, 0x0372, 0x0378, 0x0001, 0x001d, 0x178c, + 0x0001, 0x0005, 0x008f, 0x0001, 0x0005, 0x0099, 0x0001, 0x0005, + 0x00a1, 0x0004, 0x038c, 0x0386, 0x0383, 0x0389, 0x0001, 0x0006, + 0x022e, 0x0001, 0x0006, 0x022e, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0005, 0x0395, 0x0000, 0x0000, 0x0000, 0x0400, + // Entry 15680 - 156BF + 0x0002, 0x0398, 0x03cc, 0x0003, 0x039c, 0x03ac, 0x03bc, 0x000e, + 0x0016, 0x030d, 0x02de, 0x02e5, 0x02ed, 0x02f4, 0x02fa, 0x0301, + 0x0308, 0x0315, 0x031b, 0x0320, 0x0326, 0x032c, 0x252b, 0x000e, + 0x0000, 0x003f, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x0422, 0x000e, + 0x0016, 0x030d, 0x02de, 0x02e5, 0x02ed, 0x02f4, 0x02fa, 0x0301, + 0x0308, 0x0315, 0x031b, 0x0320, 0x0326, 0x032c, 0x252b, 0x0003, + 0x03d0, 0x03e0, 0x03f0, 0x000e, 0x0016, 0x030d, 0x02de, 0x02e5, + // Entry 156C0 - 156FF + 0x02ed, 0x02f4, 0x02fa, 0x0301, 0x0308, 0x0315, 0x031b, 0x0320, + 0x0326, 0x2530, 0x2533, 0x000e, 0x0000, 0x003f, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, + 0x2218, 0x2426, 0x0422, 0x000e, 0x0016, 0x030d, 0x02de, 0x02e5, + 0x02ed, 0x02f4, 0x02fa, 0x0301, 0x0308, 0x0315, 0x031b, 0x0320, + 0x0326, 0x032c, 0x252b, 0x0003, 0x0409, 0x040e, 0x0404, 0x0001, + 0x0406, 0x0001, 0x0000, 0x04ef, 0x0001, 0x040b, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x0410, 0x0001, 0x0000, 0x04ef, 0x0005, 0x0419, + // Entry 15700 - 1573F + 0x0000, 0x0000, 0x0000, 0x047e, 0x0002, 0x041c, 0x044d, 0x0003, + 0x0420, 0x042f, 0x043e, 0x000d, 0x0016, 0xffff, 0x0334, 0x033c, + 0x0345, 0x034e, 0x0355, 0x035d, 0x0364, 0x036b, 0x0373, 0x037e, + 0x0384, 0x038a, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, + 0x2426, 0x000d, 0x0016, 0xffff, 0x0334, 0x033c, 0x0345, 0x034e, + 0x0355, 0x035d, 0x0364, 0x036b, 0x0373, 0x037e, 0x0384, 0x038a, + 0x0003, 0x0451, 0x0460, 0x046f, 0x000d, 0x0016, 0xffff, 0x0334, + // Entry 15740 - 1577F + 0x033c, 0x0345, 0x034e, 0x0355, 0x035d, 0x0364, 0x036b, 0x0373, + 0x037e, 0x0384, 0x038a, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, + 0x2218, 0x2426, 0x000d, 0x0016, 0xffff, 0x0334, 0x033c, 0x0345, + 0x034e, 0x0355, 0x035d, 0x0364, 0x036b, 0x0373, 0x037e, 0x0384, + 0x038a, 0x0003, 0x0487, 0x048c, 0x0482, 0x0001, 0x0484, 0x0001, + 0x001d, 0x179b, 0x0001, 0x0489, 0x0001, 0x001d, 0x179b, 0x0001, + 0x048e, 0x0001, 0x001d, 0x179b, 0x0005, 0x0497, 0x0000, 0x0000, + // Entry 15780 - 157BF + 0x0000, 0x04fc, 0x0002, 0x049a, 0x04cb, 0x0003, 0x049e, 0x04ad, + 0x04bc, 0x000d, 0x000d, 0xffff, 0x022d, 0x0232, 0x32ee, 0x32f5, + 0x32fd, 0x3304, 0x330c, 0x3311, 0x0265, 0x3316, 0x331c, 0x3326, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, + 0x0016, 0xffff, 0x0393, 0x039c, 0x03a2, 0x03ab, 0x03b5, 0x03be, + 0x03c8, 0x03ce, 0x2538, 0x03df, 0x2541, 0x2550, 0x0003, 0x04cf, + 0x04de, 0x04ed, 0x000d, 0x000d, 0xffff, 0x022d, 0x0232, 0x32ee, + // Entry 157C0 - 157FF + 0x32f5, 0x32fd, 0x3304, 0x330c, 0x3311, 0x0265, 0x3316, 0x331c, + 0x3326, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, + 0x000d, 0x0016, 0xffff, 0x0393, 0x039c, 0x03a2, 0x03ab, 0x03b5, + 0x03be, 0x03c8, 0x03ce, 0x2538, 0x03df, 0x2541, 0x2550, 0x0003, + 0x0505, 0x050a, 0x0500, 0x0001, 0x0502, 0x0001, 0x0000, 0x06c8, + 0x0001, 0x0507, 0x0001, 0x0000, 0x06c8, 0x0001, 0x050c, 0x0001, + 0x0000, 0x06c8, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 15800 - 1583F + 0x0516, 0x0004, 0x0524, 0x051e, 0x051b, 0x0521, 0x0001, 0x001d, + 0x1545, 0x0001, 0x001d, 0x1560, 0x0001, 0x0010, 0x0305, 0x0001, + 0x001d, 0x17a0, 0x0005, 0x052d, 0x0000, 0x0000, 0x0000, 0x0592, + 0x0002, 0x0530, 0x0561, 0x0003, 0x0534, 0x0543, 0x0552, 0x000d, + 0x0014, 0xffff, 0x0916, 0x347a, 0x3486, 0x348e, 0x3492, 0x3499, + 0x094d, 0x34a3, 0x34a8, 0x34ad, 0x0963, 0x096a, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, 0x0014, 0xffff, + // Entry 15840 - 1587F + 0x0916, 0x347a, 0x3486, 0x348e, 0x3492, 0x3499, 0x094d, 0x34a3, + 0x34a8, 0x34ad, 0x0963, 0x096a, 0x0003, 0x0565, 0x0574, 0x0583, + 0x000d, 0x0014, 0xffff, 0x0916, 0x347a, 0x3486, 0x348e, 0x3492, + 0x3499, 0x094d, 0x34a3, 0x34a8, 0x34ad, 0x0963, 0x096a, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, 0x0014, + 0xffff, 0x0916, 0x347a, 0x3486, 0x348e, 0x3492, 0x3499, 0x094d, + 0x34a3, 0x34a8, 0x34ad, 0x0963, 0x096a, 0x0003, 0x059b, 0x05a0, + // Entry 15880 - 158BF + 0x0596, 0x0001, 0x0598, 0x0001, 0x0000, 0x1a1d, 0x0001, 0x059d, + 0x0001, 0x0000, 0x1a1d, 0x0001, 0x05a2, 0x0001, 0x0000, 0x1a1d, + 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x05ab, 0x0003, 0x05b5, + 0x05bb, 0x05af, 0x0001, 0x05b1, 0x0002, 0x001d, 0x17af, 0x17bc, + 0x0001, 0x05b7, 0x0002, 0x001d, 0x17af, 0x17bc, 0x0001, 0x05bd, + 0x0002, 0x001d, 0x17af, 0x17bc, 0x0042, 0x0604, 0x0609, 0x060e, + 0x0613, 0x062a, 0x0641, 0x0658, 0x066f, 0x0681, 0x0693, 0x06aa, + 0x06c1, 0x06d8, 0x06f3, 0x0709, 0x071f, 0x0724, 0x0729, 0x072e, + // Entry 158C0 - 158FF + 0x0747, 0x0760, 0x0779, 0x077e, 0x0783, 0x0788, 0x078d, 0x0792, + 0x0797, 0x079c, 0x07a1, 0x07a6, 0x07ba, 0x07ce, 0x07e2, 0x07f6, + 0x080a, 0x081e, 0x0832, 0x0846, 0x085a, 0x086e, 0x0882, 0x0896, + 0x08aa, 0x08be, 0x08d2, 0x08e6, 0x08fa, 0x090e, 0x0922, 0x0936, + 0x094a, 0x094f, 0x0954, 0x0959, 0x096f, 0x0981, 0x0993, 0x09a9, + 0x09bb, 0x09cd, 0x09e3, 0x09f5, 0x0a07, 0x0a0c, 0x0a11, 0x0001, + 0x0606, 0x0001, 0x0001, 0x0040, 0x0001, 0x060b, 0x0001, 0x0001, + 0x0040, 0x0001, 0x0610, 0x0001, 0x0001, 0x0040, 0x0003, 0x0617, + // Entry 15900 - 1593F + 0x061a, 0x061f, 0x0001, 0x001d, 0x17c3, 0x0003, 0x001d, 0x17c8, + 0x17d7, 0x17e1, 0x0002, 0x0622, 0x0626, 0x0002, 0x001d, 0x1805, + 0x17f2, 0x0002, 0x001d, 0x1827, 0x1819, 0x0003, 0x062e, 0x0631, + 0x0636, 0x0001, 0x0000, 0x1f9c, 0x0003, 0x001d, 0x17c8, 0x17d7, + 0x17e1, 0x0002, 0x0639, 0x063d, 0x0002, 0x001d, 0x1836, 0x1836, + 0x0002, 0x001d, 0x1846, 0x1846, 0x0003, 0x0645, 0x0648, 0x064d, + 0x0001, 0x0000, 0x1f9c, 0x0003, 0x001d, 0x17c8, 0x17d7, 0x17e1, + 0x0002, 0x0650, 0x0654, 0x0002, 0x001d, 0x1836, 0x1836, 0x0002, + // Entry 15940 - 1597F + 0x001d, 0x1846, 0x1846, 0x0003, 0x065c, 0x065f, 0x0664, 0x0001, + 0x0006, 0x1655, 0x0003, 0x001d, 0x1851, 0x1865, 0x1874, 0x0002, + 0x0667, 0x066b, 0x0002, 0x001d, 0x18a2, 0x188a, 0x0002, 0x001d, + 0x18ce, 0x18bb, 0x0003, 0x0673, 0x0000, 0x0676, 0x0001, 0x000b, + 0x0c78, 0x0002, 0x0679, 0x067d, 0x0002, 0x001d, 0x18e2, 0x18e2, + 0x0002, 0x001d, 0x18f6, 0x18f6, 0x0003, 0x0685, 0x0000, 0x0688, + 0x0001, 0x000b, 0x0c78, 0x0002, 0x068b, 0x068f, 0x0002, 0x001d, + 0x18e2, 0x18e2, 0x0002, 0x001d, 0x18f6, 0x18f6, 0x0003, 0x0697, + // Entry 15980 - 159BF + 0x069a, 0x069f, 0x0001, 0x0006, 0x09ee, 0x0003, 0x001d, 0x1905, + 0x1913, 0x191c, 0x0002, 0x06a2, 0x06a6, 0x0002, 0x001d, 0x193e, + 0x192c, 0x0002, 0x001d, 0x195f, 0x1952, 0x0003, 0x06ae, 0x06b1, + 0x06b6, 0x0001, 0x0000, 0x1f9a, 0x0003, 0x001d, 0x1905, 0x1913, + 0x191c, 0x0002, 0x06b9, 0x06bd, 0x0002, 0x001d, 0x196e, 0x196e, + 0x0002, 0x001d, 0x197e, 0x197e, 0x0003, 0x06c5, 0x06c8, 0x06cd, + 0x0001, 0x0000, 0x1f9a, 0x0003, 0x001d, 0x1905, 0x1913, 0x191c, + 0x0002, 0x06d0, 0x06d4, 0x0002, 0x001d, 0x196e, 0x196e, 0x0002, + // Entry 159C0 - 159FF + 0x001d, 0x197e, 0x197e, 0x0004, 0x06dd, 0x06e0, 0x06e5, 0x06f0, + 0x0001, 0x001d, 0x1989, 0x0003, 0x001d, 0x1990, 0x19a1, 0x19ad, + 0x0002, 0x06e8, 0x06ec, 0x0002, 0x001d, 0x19d5, 0x19c0, 0x0002, + 0x001d, 0x19fb, 0x19eb, 0x0001, 0x001d, 0x1a0c, 0x0004, 0x06f8, + 0x0000, 0x06fb, 0x0706, 0x0001, 0x001d, 0x1a1e, 0x0002, 0x06fe, + 0x0702, 0x0002, 0x001d, 0x1a23, 0x1a23, 0x0002, 0x001d, 0x1a36, + 0x1a36, 0x0001, 0x001d, 0x1a44, 0x0004, 0x070e, 0x0000, 0x0711, + 0x071c, 0x0001, 0x001d, 0x1a1e, 0x0002, 0x0714, 0x0718, 0x0002, + // Entry 15A00 - 15A3F + 0x001d, 0x1a23, 0x1a23, 0x0002, 0x001d, 0x1a36, 0x1a36, 0x0001, + 0x001d, 0x1a44, 0x0001, 0x0721, 0x0001, 0x001d, 0x1a54, 0x0001, + 0x0726, 0x0001, 0x001d, 0x1a63, 0x0001, 0x072b, 0x0001, 0x001d, + 0x1a63, 0x0003, 0x0732, 0x0735, 0x073c, 0x0001, 0x0006, 0x18b6, + 0x0005, 0x001d, 0x1a78, 0x1a7d, 0x1a81, 0x1a6f, 0x1a89, 0x0002, + 0x073f, 0x0743, 0x0002, 0x001d, 0x1aab, 0x1a98, 0x0002, 0x001d, + 0x1acd, 0x1abf, 0x0003, 0x074b, 0x074e, 0x0755, 0x0001, 0x0000, + 0x2008, 0x0005, 0x001d, 0x1a78, 0x1a7d, 0x1a81, 0x1a6f, 0x1a89, + // Entry 15A40 - 15A7F + 0x0002, 0x0758, 0x075c, 0x0002, 0x001d, 0x1aab, 0x1a98, 0x0002, + 0x001d, 0x1acd, 0x1abf, 0x0003, 0x0764, 0x0767, 0x076e, 0x0001, + 0x0000, 0x2008, 0x0005, 0x001d, 0x1a78, 0x1a7d, 0x1a81, 0x1a6f, + 0x1a89, 0x0002, 0x0771, 0x0775, 0x0002, 0x001d, 0x1aab, 0x1a98, + 0x0002, 0x001d, 0x1acd, 0x1abf, 0x0001, 0x077b, 0x0001, 0x001d, + 0x1adc, 0x0001, 0x0780, 0x0001, 0x001d, 0x1aea, 0x0001, 0x0785, + 0x0001, 0x001d, 0x1aea, 0x0001, 0x078a, 0x0001, 0x001d, 0x1af5, + 0x0001, 0x078f, 0x0001, 0x001d, 0x1b07, 0x0001, 0x0794, 0x0001, + // Entry 15A80 - 15ABF + 0x001d, 0x1b07, 0x0001, 0x0799, 0x0001, 0x001d, 0x1b14, 0x0001, + 0x079e, 0x0001, 0x001d, 0x1b2e, 0x0001, 0x07a3, 0x0001, 0x001d, + 0x1b2e, 0x0003, 0x0000, 0x07aa, 0x07af, 0x0003, 0x001d, 0x1b42, + 0x1b54, 0x1b61, 0x0002, 0x07b2, 0x07b6, 0x0002, 0x001d, 0x1b8b, + 0x1b75, 0x0002, 0x001d, 0x1bb3, 0x1ba2, 0x0003, 0x0000, 0x07be, + 0x07c3, 0x0003, 0x001d, 0x1bc5, 0x1bd4, 0x1bde, 0x0002, 0x07c6, + 0x07ca, 0x0002, 0x001d, 0x1bef, 0x1bef, 0x0002, 0x001d, 0x1c02, + 0x1c02, 0x0003, 0x0000, 0x07d2, 0x07d7, 0x0003, 0x001d, 0x1c10, + // Entry 15AC0 - 15AFF + 0x1c1d, 0x1c25, 0x0002, 0x07da, 0x07de, 0x0002, 0x001d, 0x1c34, + 0x1c34, 0x0002, 0x001d, 0x1c45, 0x1c45, 0x0003, 0x0000, 0x07e6, + 0x07eb, 0x0003, 0x001d, 0x1c51, 0x1c61, 0x1c6c, 0x0002, 0x07ee, + 0x07f2, 0x0002, 0x001d, 0x1c7e, 0x1c7e, 0x0002, 0x001d, 0x1c92, + 0x1c92, 0x0003, 0x0000, 0x07fa, 0x07ff, 0x0003, 0x001d, 0x1ca1, + 0x1cb0, 0x1cba, 0x0002, 0x0802, 0x0806, 0x0002, 0x001d, 0x1ccb, + 0x1ccb, 0x0002, 0x001d, 0x1cde, 0x1cde, 0x0003, 0x0000, 0x080e, + 0x0813, 0x0003, 0x001d, 0x1cec, 0x1cf9, 0x1d01, 0x0002, 0x0816, + // Entry 15B00 - 15B3F + 0x081a, 0x0002, 0x001d, 0x1d10, 0x1d10, 0x0002, 0x001d, 0x1d21, + 0x1d21, 0x0003, 0x0000, 0x0822, 0x0827, 0x0003, 0x001d, 0x1d2d, + 0x1d3e, 0x1d4a, 0x0002, 0x082a, 0x082e, 0x0002, 0x001d, 0x1d5d, + 0x1d5d, 0x0002, 0x001d, 0x1d72, 0x1d72, 0x0003, 0x0000, 0x0836, + 0x083b, 0x0003, 0x001d, 0x1d82, 0x1d91, 0x1d9b, 0x0002, 0x083e, + 0x0842, 0x0002, 0x001d, 0x1dac, 0x1dac, 0x0002, 0x001d, 0x1dbf, + 0x1dbf, 0x0003, 0x0000, 0x084a, 0x084f, 0x0003, 0x001d, 0x1dcd, + 0x1dda, 0x1de2, 0x0002, 0x0852, 0x0856, 0x0002, 0x001d, 0x1df1, + // Entry 15B40 - 15B7F + 0x1df1, 0x0002, 0x001d, 0x1e02, 0x1e02, 0x0003, 0x0000, 0x085e, + 0x0863, 0x0003, 0x001d, 0x1e0e, 0x1e23, 0x1e33, 0x0002, 0x0866, + 0x086a, 0x0002, 0x001d, 0x1e4a, 0x1e4a, 0x0002, 0x001d, 0x1e63, + 0x1e63, 0x0003, 0x0000, 0x0872, 0x0877, 0x0003, 0x001d, 0x1e77, + 0x1e87, 0x1e92, 0x0002, 0x087a, 0x087e, 0x0002, 0x001d, 0x1ea4, + 0x1ea4, 0x0002, 0x001d, 0x1eb8, 0x1eb8, 0x0003, 0x0000, 0x0886, + 0x088b, 0x0003, 0x001d, 0x1ec7, 0x1ed4, 0x1edc, 0x0002, 0x088e, + 0x0892, 0x0002, 0x001d, 0x1eeb, 0x1eeb, 0x0002, 0x001d, 0x1efc, + // Entry 15B80 - 15BBF + 0x1efc, 0x0003, 0x0000, 0x089a, 0x089f, 0x0003, 0x001d, 0x1f08, + 0x1f19, 0x1f25, 0x0002, 0x08a2, 0x08a6, 0x0002, 0x001d, 0x1f38, + 0x1f38, 0x0002, 0x001d, 0x1f4d, 0x1f4d, 0x0003, 0x0000, 0x08ae, + 0x08b3, 0x0003, 0x001d, 0x1f5d, 0x1f6c, 0x1f76, 0x0002, 0x08b6, + 0x08ba, 0x0002, 0x001d, 0x1f87, 0x1f87, 0x0002, 0x001d, 0x1f9a, + 0x1f9a, 0x0003, 0x0000, 0x08c2, 0x08c7, 0x0003, 0x001d, 0x1fa8, + 0x1fb5, 0x1fbd, 0x0002, 0x08ca, 0x08ce, 0x0002, 0x001d, 0x1fcc, + 0x1fcc, 0x0002, 0x001d, 0x1fdd, 0x1fdd, 0x0003, 0x0000, 0x08d6, + // Entry 15BC0 - 15BFF + 0x08db, 0x0003, 0x001d, 0x1fe9, 0x1ffb, 0x2008, 0x0002, 0x08de, + 0x08e2, 0x0002, 0x001e, 0x0000, 0x0000, 0x0002, 0x001e, 0x0016, + 0x0016, 0x0003, 0x0000, 0x08ea, 0x08ef, 0x0003, 0x001e, 0x0027, + 0x0036, 0x0040, 0x0002, 0x08f2, 0x08f6, 0x0002, 0x001e, 0x0051, + 0x0051, 0x0002, 0x001e, 0x0064, 0x0064, 0x0003, 0x0000, 0x08fe, + 0x0903, 0x0003, 0x001e, 0x0072, 0x007f, 0x0087, 0x0002, 0x0906, + 0x090a, 0x0002, 0x001e, 0x0096, 0x0096, 0x0002, 0x001e, 0x00a7, + 0x00a7, 0x0003, 0x0000, 0x0912, 0x0917, 0x0003, 0x001e, 0x00b3, + // Entry 15C00 - 15C3F + 0x00c5, 0x00d2, 0x0002, 0x091a, 0x091e, 0x0002, 0x001e, 0x00fc, + 0x00e6, 0x0002, 0x001e, 0x0124, 0x0113, 0x0003, 0x0000, 0x0926, + 0x092b, 0x0003, 0x001e, 0x0136, 0x0146, 0x0151, 0x0002, 0x092e, + 0x0932, 0x0002, 0x001e, 0x0163, 0x0163, 0x0002, 0x001e, 0x0177, + 0x0177, 0x0003, 0x0000, 0x093a, 0x093f, 0x0003, 0x001e, 0x0186, + 0x0193, 0x019b, 0x0002, 0x0942, 0x0946, 0x0002, 0x001e, 0x01aa, + 0x01aa, 0x0002, 0x001e, 0x01bb, 0x01bb, 0x0001, 0x094c, 0x0001, + 0x0010, 0x0b6d, 0x0001, 0x0951, 0x0001, 0x0010, 0x0b6d, 0x0001, + // Entry 15C40 - 15C7F + 0x0956, 0x0001, 0x0010, 0x0b6d, 0x0003, 0x095d, 0x0960, 0x0964, + 0x0001, 0x0006, 0x1dc8, 0x0002, 0x0006, 0xffff, 0x1dcd, 0x0002, + 0x0967, 0x096b, 0x0002, 0x001e, 0x01da, 0x01c7, 0x0002, 0x001e, + 0x01fc, 0x01ee, 0x0003, 0x0973, 0x0000, 0x0976, 0x0001, 0x0000, + 0x213b, 0x0002, 0x0979, 0x097d, 0x0002, 0x001e, 0x020b, 0x020b, + 0x0002, 0x001e, 0x021b, 0x021b, 0x0003, 0x0985, 0x0000, 0x0988, + 0x0001, 0x0000, 0x213b, 0x0002, 0x098b, 0x098f, 0x0002, 0x001e, + 0x020b, 0x020b, 0x0002, 0x001e, 0x021b, 0x021b, 0x0003, 0x0997, + // Entry 15C80 - 15CBF + 0x099a, 0x099e, 0x0001, 0x001d, 0x0dc2, 0x0002, 0x001e, 0xffff, + 0x0226, 0x0002, 0x09a1, 0x09a5, 0x0002, 0x001e, 0x0247, 0x0232, + 0x0002, 0x001e, 0x026d, 0x025d, 0x0003, 0x09ad, 0x0000, 0x09b0, + 0x0001, 0x000b, 0x1250, 0x0002, 0x09b3, 0x09b7, 0x0002, 0x001e, + 0x027e, 0x027e, 0x0002, 0x001e, 0x0290, 0x0290, 0x0003, 0x09bf, + 0x0000, 0x09c2, 0x0001, 0x000b, 0x1250, 0x0002, 0x09c5, 0x09c9, + 0x0002, 0x001e, 0x027e, 0x027e, 0x0002, 0x001e, 0x0290, 0x0290, + 0x0003, 0x09d1, 0x09d4, 0x09d8, 0x0001, 0x001e, 0x029d, 0x0002, + // Entry 15CC0 - 15CFF + 0x001e, 0xffff, 0x02a5, 0x0002, 0x09db, 0x09df, 0x0002, 0x001e, + 0x02c1, 0x02ab, 0x0002, 0x001e, 0x02e9, 0x02d8, 0x0003, 0x09e7, + 0x0000, 0x09ea, 0x0001, 0x0000, 0x2002, 0x0002, 0x09ed, 0x09f1, + 0x0002, 0x001e, 0x02fb, 0x02fb, 0x0002, 0x001e, 0x030b, 0x030b, + 0x0003, 0x09f9, 0x0000, 0x09fc, 0x0001, 0x0000, 0x2002, 0x0002, + 0x09ff, 0x0a03, 0x0002, 0x001e, 0x02fb, 0x02fb, 0x0002, 0x001e, + 0x030b, 0x030b, 0x0001, 0x0a09, 0x0001, 0x001e, 0x0316, 0x0001, + 0x0a0e, 0x0001, 0x000d, 0x0da9, 0x0001, 0x0a13, 0x0001, 0x000d, + // Entry 15D00 - 15D3F + 0x0da9, 0x0004, 0x0a1b, 0x0a20, 0x0a25, 0x0a34, 0x0003, 0x0000, + 0x1dc7, 0x234c, 0x2429, 0x0003, 0x001e, 0x0323, 0x032f, 0x0348, + 0x0002, 0x0000, 0x0a28, 0x0003, 0x0000, 0x0a2f, 0x0a2c, 0x0001, + 0x001e, 0x0361, 0x0003, 0x001e, 0xffff, 0x037d, 0x0397, 0x0002, + 0x0c1b, 0x0a37, 0x0003, 0x0a3b, 0x0b7b, 0x0adb, 0x009e, 0x001e, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0444, 0x04a9, 0x04ea, 0x0534, + 0x056f, 0x05ad, 0x061b, 0x0668, 0x06a9, 0x0766, 0x07a7, 0x07f1, + 0x085c, 0x08a0, 0x08f0, 0x0952, 0x09cc, 0x0a31, 0x0a9c, 0x0aec, + // Entry 15D40 - 15D7F + 0x0b39, 0xffff, 0xffff, 0x0ba5, 0xffff, 0x0bfc, 0xffff, 0x0c64, + 0x0ca8, 0x0ce6, 0x0d24, 0xffff, 0xffff, 0x0da4, 0x0deb, 0x0e4a, + 0xffff, 0xffff, 0xffff, 0x0ec5, 0xffff, 0x0f37, 0x0f90, 0xffff, + 0x1010, 0x1072, 0x10d7, 0xffff, 0xffff, 0xffff, 0xffff, 0x1187, + 0xffff, 0xffff, 0x1205, 0x1270, 0xffff, 0xffff, 0x1320, 0x1382, + 0x13cc, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x149f, + 0x14dd, 0x1521, 0x1562, 0x15a3, 0xffff, 0xffff, 0x1629, 0xffff, + 0x1676, 0xffff, 0xffff, 0x1710, 0xffff, 0x17b2, 0xffff, 0xffff, + // Entry 15D80 - 15DBF + 0xffff, 0xffff, 0x1847, 0xffff, 0x189d, 0x1908, 0x1976, 0x19c6, + 0xffff, 0xffff, 0xffff, 0x1a3e, 0x1a9a, 0x1af0, 0xffff, 0xffff, + 0x1b5f, 0x1bec, 0x1c3c, 0x1c77, 0xffff, 0xffff, 0x1cec, 0x1d33, + 0x1d71, 0xffff, 0x1dd4, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1ee0, 0x1f27, 0x1f68, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x202b, 0xffff, 0xffff, 0x2093, 0xffff, 0x20df, + 0xffff, 0x2144, 0x2188, 0x21d8, 0xffff, 0x222e, 0x227e, 0xffff, + 0xffff, 0xffff, 0x2307, 0x234b, 0xffff, 0xffff, 0x03b1, 0xffff, + // Entry 15DC0 - 15DFF + 0x06e7, 0x0725, 0xffff, 0xffff, 0x175a, 0x1e75, 0x009e, 0x001e, + 0x03ec, 0x0400, 0x0418, 0x0431, 0x045f, 0x04b8, 0x04fc, 0x0541, + 0x057d, 0x05cb, 0x062e, 0x0677, 0x06b6, 0x0775, 0x07b9, 0x080e, + 0x086c, 0x08b4, 0x090a, 0x0974, 0x09e7, 0x0a4e, 0x0ab0, 0x0aff, + 0x0b4c, 0x0b86, 0x0b95, 0x0bb6, 0x0bec, 0x0c0f, 0x0c49, 0x0c74, + 0x0cb6, 0x0cf4, 0x0d37, 0x0d71, 0x0d8c, 0x0db5, 0x0e02, 0x0e57, + 0x0e85, 0x0e93, 0x0eae, 0x0edf, 0x0f27, 0x0f4e, 0x0fa8, 0x0fec, + 0x102a, 0x108d, 0x10e4, 0x1112, 0x112e, 0x1164, 0x1177, 0x1197, + // Entry 15E00 - 15E3F + 0x11cb, 0x11e5, 0x1222, 0x128f, 0x12f8, 0x1311, 0x133a, 0x1394, + 0x13d9, 0x1407, 0x1422, 0x143b, 0x144d, 0x1467, 0x1482, 0x14ad, + 0x14ed, 0x1530, 0x1571, 0x15b5, 0x15ed, 0x160a, 0x1637, 0x1667, + 0x168a, 0x16c6, 0x16ec, 0x1722, 0x1798, 0x17c3, 0x17f9, 0x1809, + 0x181a, 0x182c, 0x1858, 0x188e, 0x18ba, 0x1926, 0x198a, 0x19d5, + 0x1a07, 0x1a22, 0x1a30, 0x1a56, 0x1ab0, 0x1b02, 0x1b3a, 0x1b47, + 0x1b7b, 0x1c00, 0x1c49, 0x1c89, 0x1cc1, 0x1cd0, 0x1cfd, 0x1d41, + 0x1d83, 0x1dbb, 0x1df2, 0x1e42, 0x1e53, 0x1e63, 0x1ebf, 0x1ed0, + // Entry 15E40 - 15E7F + 0x1ef1, 0x1f36, 0x1f76, 0x1fa6, 0x1fb9, 0x1fca, 0x1fe5, 0x1ffd, + 0x200d, 0x201b, 0x203b, 0x206f, 0x2083, 0x20a1, 0x20d1, 0x20f5, + 0x2135, 0x2154, 0x219c, 0x21e8, 0x221c, 0x2242, 0x2291, 0x22cb, + 0x22da, 0x22ef, 0x2317, 0x2361, 0x12e1, 0x1bc7, 0x03be, 0xffff, + 0x06f5, 0x0734, 0xffff, 0x16da, 0x1768, 0x1e87, 0x009e, 0x001e, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0484, 0x04d1, 0x0518, 0x0558, + 0x0595, 0x05f3, 0x064b, 0x0690, 0x06cd, 0x078e, 0x07d5, 0x0835, + 0x0886, 0x08d2, 0x092e, 0x09a0, 0x0a0c, 0x0a75, 0x0ace, 0x0b1c, + // Entry 15E80 - 15EBF + 0x0b69, 0xffff, 0xffff, 0x0bd1, 0xffff, 0x0c2c, 0xffff, 0x0c8e, + 0x0cce, 0x0d0c, 0x0d54, 0xffff, 0xffff, 0x0dd0, 0x0e23, 0x0e6e, + 0xffff, 0xffff, 0xffff, 0x0f03, 0xffff, 0x0f6f, 0x0fca, 0xffff, + 0x104e, 0x10b2, 0x10fb, 0xffff, 0xffff, 0xffff, 0xffff, 0x11b1, + 0xffff, 0xffff, 0x1249, 0x12b8, 0xffff, 0xffff, 0x135e, 0x13b0, + 0x13f0, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x14c5, + 0x1507, 0x1549, 0x158a, 0x15d1, 0xffff, 0xffff, 0x164f, 0xffff, + 0x16a8, 0xffff, 0xffff, 0x173e, 0xffff, 0x17de, 0xffff, 0xffff, + // Entry 15EC0 - 15EFF + 0xffff, 0xffff, 0x1873, 0xffff, 0x18e1, 0x194e, 0x19a8, 0x19ee, + 0xffff, 0xffff, 0xffff, 0x1a78, 0x1ad0, 0x1b1e, 0xffff, 0xffff, + 0x1ba1, 0x1c1e, 0x1c60, 0x1ca5, 0xffff, 0xffff, 0x1d18, 0x1d59, + 0x1d9f, 0xffff, 0x1e1a, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1f0c, 0x1f4f, 0x1f8e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2055, 0xffff, 0xffff, 0x20b9, 0xffff, 0x2115, + 0xffff, 0x216e, 0x21ba, 0x2202, 0xffff, 0x2260, 0x22ae, 0xffff, + 0xffff, 0xffff, 0x2331, 0x2381, 0xffff, 0xffff, 0x03d5, 0xffff, + // Entry 15F00 - 15F3F + 0x070d, 0x074d, 0xffff, 0xffff, 0x1780, 0x1ea3, 0x0003, 0x0c1f, + 0x0c8e, 0x0c52, 0x0031, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0045, 0x004e, 0xffff, 0x0057, 0x003a, 0x0007, 0xffff, + // Entry 15F40 - 15F7F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0045, 0x004e, 0xffff, 0x0057, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x249a, 0x0031, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 15F80 - 15FBF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0049, 0x0052, 0xffff, 0x005b, 0x0003, 0x0004, 0x0233, 0x039c, + 0x0012, 0x0000, 0x0000, 0x0017, 0x0000, 0x0000, 0x0000, 0x0064, + 0x0078, 0x0123, 0x016e, 0x01ce, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 15FC0 - 15FFF + 0x0000, 0x0000, 0x0217, 0x0001, 0x0019, 0x0002, 0x001c, 0x0040, + 0x0003, 0x0020, 0x0000, 0x0030, 0x000e, 0x0000, 0xffff, 0x03ce, + 0x03d3, 0x03d8, 0x03de, 0x2221, 0x03e9, 0x03f0, 0x03f9, 0x0403, + 0x040b, 0x0411, 0x0416, 0x242d, 0x000e, 0x0000, 0xffff, 0x03ce, + 0x03d3, 0x03d8, 0x03de, 0x2221, 0x03e9, 0x03f0, 0x03f9, 0x0403, + 0x040b, 0x0411, 0x0416, 0x242d, 0x0003, 0x0044, 0x0000, 0x0054, + 0x000e, 0x0000, 0xffff, 0x03ce, 0x03d3, 0x03d8, 0x03de, 0x2221, + 0x03e9, 0x03f0, 0x03f9, 0x0403, 0x040b, 0x0411, 0x0416, 0x242d, + // Entry 16000 - 1603F + 0x000e, 0x0000, 0xffff, 0x03ce, 0x03d3, 0x03d8, 0x03de, 0x2221, + 0x03e9, 0x03f0, 0x03f9, 0x0403, 0x040b, 0x0411, 0x0416, 0x242d, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x006d, 0x0000, + 0x0000, 0x0004, 0x0075, 0x0000, 0x0000, 0x0072, 0x0001, 0x001f, + 0x0000, 0x0001, 0x001d, 0x17a0, 0x0008, 0x0081, 0x00a6, 0x00c1, + 0x00da, 0x0000, 0x0000, 0x0112, 0x0000, 0x0002, 0x0084, 0x0095, + 0x0001, 0x0086, 0x000d, 0x001d, 0xffff, 0x157e, 0x1583, 0x1588, + 0x158d, 0x1592, 0x1597, 0x159c, 0x15a1, 0x201c, 0x15ac, 0x15b1, + // Entry 16040 - 1607F + 0x15b6, 0x0001, 0x0097, 0x000d, 0x001d, 0xffff, 0x157e, 0x1583, + 0x1588, 0x158d, 0x1592, 0x1597, 0x159c, 0x15a1, 0x201c, 0x15ac, + 0x15b1, 0x15b6, 0x0002, 0x00a9, 0x00b5, 0x0002, 0x0000, 0x00ac, + 0x0007, 0x0000, 0x2008, 0x200a, 0x1f9a, 0x1f9a, 0x2142, 0x1f94, + 0x2002, 0x0002, 0x0000, 0x00b8, 0x0007, 0x0000, 0x236e, 0x2296, + 0x2357, 0x2357, 0x1e5d, 0x1edb, 0x235b, 0x0002, 0x00c4, 0x00cf, + 0x0003, 0x0000, 0x0000, 0x00c8, 0x0005, 0x001f, 0xffff, 0x0014, + 0x0023, 0x0032, 0x0041, 0x0003, 0x0000, 0x0000, 0x00d3, 0x0005, + // Entry 16080 - 160BF + 0x001f, 0xffff, 0x0014, 0x0023, 0x0032, 0x0041, 0x0002, 0x00dd, + 0x00f3, 0x0003, 0x00e1, 0x0000, 0x00ea, 0x0002, 0x00e4, 0x00e7, + 0x0001, 0x001d, 0x050b, 0x0001, 0x001d, 0x0510, 0x0002, 0x00ed, + 0x00f0, 0x0001, 0x001d, 0x050b, 0x0001, 0x001d, 0x0510, 0x0003, + 0x00f7, 0x0100, 0x0109, 0x0002, 0x00fa, 0x00fd, 0x0001, 0x001d, + 0x050b, 0x0001, 0x001d, 0x0510, 0x0002, 0x0103, 0x0106, 0x0001, + 0x001d, 0x050b, 0x0001, 0x001d, 0x0510, 0x0002, 0x010c, 0x010f, + 0x0001, 0x001d, 0x050b, 0x0001, 0x001d, 0x0510, 0x0004, 0x0120, + // Entry 160C0 - 160FF + 0x011a, 0x0117, 0x011d, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, + 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0001, + 0x0125, 0x0002, 0x0128, 0x014c, 0x0003, 0x012c, 0x0000, 0x013c, + 0x000e, 0x0000, 0x2445, 0x054c, 0x0553, 0x055b, 0x2433, 0x0568, + 0x2439, 0x2440, 0x244d, 0x0589, 0x058e, 0x0594, 0x2453, 0x2456, + 0x000e, 0x0000, 0x2445, 0x054c, 0x0553, 0x055b, 0x2433, 0x0568, + 0x2439, 0x2440, 0x244d, 0x0589, 0x058e, 0x0594, 0x2453, 0x2456, + 0x0003, 0x0150, 0x0000, 0x015e, 0x000c, 0x0000, 0x2445, 0x054c, + // Entry 16100 - 1613F + 0x0553, 0x055b, 0x2433, 0x0568, 0x2439, 0x2440, 0x244d, 0x0589, + 0x058e, 0x0594, 0x000e, 0x0000, 0x2445, 0x054c, 0x0553, 0x055b, + 0x2433, 0x0568, 0x2439, 0x2440, 0x244d, 0x0589, 0x058e, 0x0594, + 0x2453, 0x2456, 0x0005, 0x0174, 0x0000, 0x0000, 0x0000, 0x01bb, + 0x0002, 0x0177, 0x0199, 0x0003, 0x017b, 0x0000, 0x018a, 0x000d, + 0x0000, 0xffff, 0x05a2, 0x05aa, 0x05b3, 0x05bc, 0x05c3, 0x05cb, + 0x05d2, 0x05d9, 0x05e1, 0x05ec, 0x05f2, 0x05f8, 0x000d, 0x0000, + 0xffff, 0x05a2, 0x05aa, 0x05b3, 0x05bc, 0x05c3, 0x05cb, 0x05d2, + // Entry 16140 - 1617F + 0x05d9, 0x05e1, 0x05ec, 0x05f2, 0x05f8, 0x0003, 0x019d, 0x0000, + 0x01ac, 0x000d, 0x0000, 0xffff, 0x05a2, 0x05aa, 0x05b3, 0x05bc, + 0x05c3, 0x05cb, 0x05d2, 0x05d9, 0x05e1, 0x05ec, 0x05f2, 0x05f8, + 0x000d, 0x0000, 0xffff, 0x05a2, 0x05aa, 0x05b3, 0x05bc, 0x05c3, + 0x05cb, 0x05d2, 0x05d9, 0x05e1, 0x05ec, 0x05f2, 0x05f8, 0x0003, + 0x01c4, 0x01c9, 0x01bf, 0x0001, 0x01c1, 0x0001, 0x0000, 0x0601, + 0x0001, 0x01c6, 0x0001, 0x0000, 0x0601, 0x0001, 0x01cb, 0x0001, + 0x0000, 0x0601, 0x0001, 0x01d0, 0x0002, 0x01d3, 0x01f5, 0x0003, + // Entry 16180 - 161BF + 0x01d7, 0x0000, 0x01e6, 0x000d, 0x0000, 0xffff, 0x0606, 0x060b, + 0x0610, 0x0617, 0x061f, 0x0626, 0x062e, 0x0633, 0x0638, 0x063d, + 0x0643, 0x064d, 0x000d, 0x0000, 0xffff, 0x0657, 0x0660, 0x0666, + 0x066f, 0x0679, 0x0682, 0x068c, 0x0692, 0x069b, 0x06a3, 0x06ab, + 0x06ba, 0x0003, 0x01f9, 0x0000, 0x0208, 0x000d, 0x0000, 0xffff, + 0x0606, 0x060b, 0x0610, 0x0617, 0x061f, 0x0626, 0x062e, 0x0633, + 0x0638, 0x063d, 0x0643, 0x064d, 0x000d, 0x0000, 0xffff, 0x0657, + 0x0660, 0x0666, 0x066f, 0x0679, 0x0682, 0x068c, 0x0692, 0x069b, + // Entry 161C0 - 161FF + 0x06a3, 0x06ab, 0x06ba, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, + 0x021d, 0x0003, 0x0227, 0x022d, 0x0221, 0x0001, 0x0223, 0x0002, + 0x001f, 0x0050, 0x0060, 0x0001, 0x0229, 0x0002, 0x001f, 0x0050, + 0x0060, 0x0001, 0x022f, 0x0002, 0x001f, 0x0050, 0x0060, 0x0036, + 0x0000, 0x0000, 0x0000, 0x0000, 0x026a, 0x0271, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0278, 0x0280, 0x0000, + 0x0288, 0x028d, 0x0292, 0x029c, 0x02a6, 0x0000, 0x02b0, 0x02b5, + 0x0000, 0x0000, 0x0000, 0x02ba, 0x02bf, 0x02c4, 0x02c9, 0x0000, + // Entry 16200 - 1623F + 0x02d3, 0x02e2, 0x02ec, 0x02fb, 0x030a, 0x0000, 0x0000, 0x0314, + 0x031e, 0x032d, 0x033c, 0x0000, 0x0346, 0x0350, 0x035a, 0x0369, + 0x0374, 0x0000, 0x037e, 0x038d, 0x0392, 0x0397, 0x0002, 0x0000, + 0x026d, 0x0002, 0x001d, 0x17c8, 0x17d7, 0x0002, 0x0000, 0x0274, + 0x0002, 0x001d, 0x17c8, 0x17d7, 0x0004, 0x0000, 0x0000, 0x0000, + 0x027d, 0x0001, 0x001d, 0x1a0c, 0x0004, 0x0000, 0x0000, 0x0000, + 0x0285, 0x0001, 0x001d, 0x1a0c, 0x0001, 0x028a, 0x0001, 0x001f, + 0x0067, 0x0001, 0x028f, 0x0001, 0x001f, 0x0067, 0x0002, 0x0000, + // Entry 16240 - 1627F + 0x0295, 0x0005, 0x001d, 0x1a78, 0x1a7d, 0x1a81, 0x1a6f, 0x1a89, + 0x0002, 0x0000, 0x029f, 0x0005, 0x001d, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1a89, 0x0002, 0x0000, 0x02a9, 0x0005, 0x001d, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1a89, 0x0001, 0x02b2, 0x0001, 0x001d, + 0x1adc, 0x0001, 0x02b7, 0x0001, 0x001d, 0x1adc, 0x0001, 0x02bc, + 0x0001, 0x001f, 0x0074, 0x0001, 0x02c1, 0x0001, 0x001f, 0x0074, + 0x0001, 0x02c6, 0x0001, 0x001f, 0x0074, 0x0003, 0x0000, 0x0000, + 0x02cd, 0x0001, 0x02cf, 0x0002, 0x001f, 0x0097, 0x0088, 0x0003, + // Entry 16280 - 162BF + 0x0000, 0x0000, 0x02d7, 0x0002, 0x02da, 0x02de, 0x0002, 0x001d, + 0x2021, 0x1c34, 0x0002, 0x001d, 0x1bb3, 0x1ba2, 0x0003, 0x0000, + 0x0000, 0x02e6, 0x0001, 0x02e8, 0x0002, 0x001f, 0x00a7, 0x00a7, + 0x0003, 0x0000, 0x0000, 0x02f0, 0x0002, 0x02f3, 0x02f7, 0x0002, + 0x001f, 0x00c0, 0x00b4, 0x0002, 0x001d, 0x1c92, 0x1c92, 0x0003, + 0x0000, 0x0000, 0x02ff, 0x0002, 0x0302, 0x0306, 0x0002, 0x001f, + 0x00a7, 0x00a7, 0x0002, 0x001d, 0x1c92, 0x1c92, 0x0003, 0x0000, + 0x0000, 0x030e, 0x0001, 0x0310, 0x0002, 0x001d, 0x202b, 0x1d5d, + // Entry 162C0 - 162FF + 0x0003, 0x0000, 0x0000, 0x0318, 0x0001, 0x031a, 0x0002, 0x001f, + 0x00e5, 0x00d3, 0x0003, 0x0000, 0x0000, 0x0322, 0x0002, 0x0325, + 0x0329, 0x0002, 0x001f, 0x00fe, 0x00fe, 0x0002, 0x001d, 0x1e63, + 0x1e63, 0x0003, 0x0000, 0x0000, 0x0331, 0x0002, 0x0334, 0x0338, + 0x0002, 0x001f, 0x010b, 0x010b, 0x0002, 0x001d, 0x1e63, 0x1e63, + 0x0003, 0x0000, 0x0000, 0x0340, 0x0001, 0x0342, 0x0002, 0x001f, + 0x0123, 0x0115, 0x0003, 0x0000, 0x0000, 0x034a, 0x0001, 0x034c, + 0x0002, 0x001d, 0x2039, 0x1fcc, 0x0003, 0x0000, 0x0000, 0x0354, + // Entry 16300 - 1633F + 0x0001, 0x0356, 0x0002, 0x001e, 0x23a1, 0x0000, 0x0003, 0x0000, + 0x0000, 0x035e, 0x0002, 0x0361, 0x0365, 0x0002, 0x001e, 0x23b0, + 0x0051, 0x0002, 0x001e, 0x0016, 0x0016, 0x0003, 0x0000, 0x0000, + 0x036d, 0x0002, 0x0000, 0x0370, 0x0002, 0x001e, 0x0016, 0x0016, + 0x0003, 0x0000, 0x0000, 0x0378, 0x0001, 0x037a, 0x0002, 0x001f, + 0x0147, 0x0138, 0x0003, 0x0000, 0x0000, 0x0382, 0x0002, 0x0385, + 0x0389, 0x0002, 0x001f, 0x0161, 0x0157, 0x0002, 0x001e, 0x0124, + 0x0124, 0x0001, 0x038f, 0x0001, 0x001d, 0x0524, 0x0001, 0x0394, + // Entry 16340 - 1637F + 0x0001, 0x001d, 0x0524, 0x0001, 0x0399, 0x0001, 0x001d, 0x0524, + 0x0004, 0x0000, 0x03a1, 0x03a6, 0x03b0, 0x0003, 0x001f, 0xffff, + 0x0172, 0x0188, 0x0002, 0x0000, 0x03a9, 0x0003, 0x0000, 0x0000, + 0x03ad, 0x0001, 0x001f, 0x019e, 0x0002, 0x04b2, 0x03b3, 0x0003, + 0x03b7, 0x047e, 0x03eb, 0x0032, 0x001f, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x01b8, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 16380 - 163BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0222, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0281, 0xffff, 0xffff, 0x02e0, 0xffff, 0x035e, 0x03bd, 0x0091, + 0x001f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x01ce, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x020e, 0xffff, 0x0239, + // Entry 163C0 - 163FF + 0xffff, 0xffff, 0xffff, 0xffff, 0x029b, 0xffff, 0xffff, 0x02f8, + 0x033c, 0x0377, 0x03d8, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0422, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0438, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0446, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0460, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0477, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 16400 - 1643F + 0x0488, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x04a0, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x04b1, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x04c8, 0x0032, 0x001f, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x01ee, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 16440 - 1647F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x025a, 0xffff, 0xffff, 0xffff, 0xffff, 0x02bc, + 0xffff, 0xffff, 0x031a, 0xffff, 0x039a, 0x03fd, 0x0003, 0x04b6, + 0x0525, 0x04e9, 0x0031, 0x001d, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 16480 - 164BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x00db, 0x00db, 0xffff, 0x00db, 0x003a, 0x001d, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 164C0 - 164FF + 0xffff, 0xffff, 0xffff, 0xffff, 0x00db, 0x00db, 0xffff, 0x00db, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x00db, 0x0031, 0x001d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 16500 - 1653F + 0x00db, 0x00db, 0xffff, 0x00db, 0x0003, 0x0004, 0x00b3, 0x013a, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, + 0x0016, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0008, 0x0000, 0x001f, 0x002d, 0x0046, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0001, 0x0021, 0x0002, 0x0000, 0x0024, + 0x0007, 0x0000, 0x236e, 0x2296, 0x2357, 0x2357, 0x1e5d, 0x1edb, + 0x235b, 0x0002, 0x0030, 0x003b, 0x0003, 0x0000, 0x0000, 0x0034, + 0x0005, 0x001d, 0xffff, 0x1680, 0x2043, 0x169e, 0x2052, 0x0003, + // Entry 16540 - 1657F + 0x0000, 0x0000, 0x003f, 0x0005, 0x001d, 0xffff, 0x1680, 0x2043, + 0x169e, 0x2052, 0x0002, 0x0049, 0x008b, 0x0003, 0x004d, 0x0000, + 0x006c, 0x0009, 0x0057, 0x005d, 0x0000, 0x0060, 0x0000, 0x0066, + 0x0069, 0x005a, 0x0063, 0x0001, 0x0010, 0x0268, 0x0001, 0x001d, + 0x16e6, 0x0001, 0x0010, 0x026e, 0x0001, 0x001d, 0x16f0, 0x0001, + 0x001d, 0x1a81, 0x0001, 0x0006, 0x0cf2, 0x0001, 0x001d, 0x16fa, + 0x0009, 0x0076, 0x007c, 0x0000, 0x007f, 0x0000, 0x0085, 0x0088, + 0x0079, 0x0082, 0x0001, 0x0010, 0x0268, 0x0001, 0x001d, 0x16e6, + // Entry 16580 - 165BF + 0x0001, 0x0010, 0x026e, 0x0001, 0x001d, 0x16f0, 0x0001, 0x001d, + 0x1a81, 0x0001, 0x0006, 0x0cf2, 0x0001, 0x001d, 0x16fa, 0x0003, + 0x008f, 0x0098, 0x00aa, 0x0002, 0x0092, 0x0095, 0x0001, 0x0010, + 0x0268, 0x0001, 0x0010, 0x026e, 0x0008, 0x00a1, 0x00a7, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x00a4, 0x0001, 0x0010, 0x0268, + 0x0001, 0x0001, 0x07e7, 0x0001, 0x0010, 0x026e, 0x0002, 0x00ad, + 0x00b0, 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, 0x003f, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 165C0 - 165FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x00f3, 0x0102, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0111, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0116, 0x0128, 0x0003, + 0x0000, 0x0000, 0x00f7, 0x0002, 0x00fa, 0x00fe, 0x0002, 0x001d, + // Entry 16600 - 1663F + 0x1aab, 0x1aab, 0x0002, 0x001d, 0x1acd, 0x1acd, 0x0003, 0x0000, + 0x0000, 0x0106, 0x0002, 0x0109, 0x010d, 0x0002, 0x001d, 0x1aab, + 0x1aab, 0x0002, 0x001d, 0x1acd, 0x1acd, 0x0001, 0x0113, 0x0001, + 0x0010, 0x0b6d, 0x0003, 0x011a, 0x0000, 0x011d, 0x0001, 0x001f, + 0x04da, 0x0002, 0x0120, 0x0124, 0x0002, 0x001f, 0x04df, 0x04df, + 0x0002, 0x001f, 0x04f2, 0x04f2, 0x0003, 0x012c, 0x0000, 0x012f, + 0x0001, 0x001f, 0x04da, 0x0002, 0x0132, 0x0136, 0x0002, 0x001f, + 0x04df, 0x04df, 0x0002, 0x001f, 0x04f2, 0x04f2, 0x0004, 0x0000, + // Entry 16640 - 1667F + 0x0000, 0x0000, 0x013f, 0x0001, 0x0141, 0x0003, 0x0145, 0x0169, + 0x0157, 0x0010, 0x001f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0500, 0x0509, 0x0010, 0x001f, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0500, 0x0509, 0x0010, 0x001f, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0504, 0x050e, 0x0003, + // Entry 16680 - 166BF + 0x0004, 0x0054, 0x008f, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000d, 0x0006, 0x0000, 0x0000, 0x0000, + 0x0014, 0x0000, 0x004c, 0x0002, 0x0017, 0x002d, 0x0003, 0x001b, + 0x0000, 0x0024, 0x0002, 0x001e, 0x0021, 0x0001, 0x0010, 0x0268, + 0x0001, 0x0010, 0x026e, 0x0002, 0x0027, 0x002a, 0x0001, 0x0010, + 0x0268, 0x0001, 0x0010, 0x026e, 0x0003, 0x0031, 0x003a, 0x0043, + 0x0002, 0x0034, 0x0037, 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, + 0x026e, 0x0002, 0x003d, 0x0040, 0x0001, 0x0010, 0x0268, 0x0001, + // Entry 166C0 - 166FF + 0x0010, 0x026e, 0x0002, 0x0046, 0x0049, 0x0001, 0x0010, 0x0268, + 0x0001, 0x0010, 0x026e, 0x0004, 0x0000, 0x0000, 0x0000, 0x0051, + 0x0001, 0x001f, 0x0514, 0x0035, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 16700 - 1673F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x008a, 0x0001, 0x008c, 0x0001, 0x0010, 0x0b6d, 0x0004, 0x0000, + 0x0000, 0x0000, 0x0094, 0x0001, 0x0096, 0x0003, 0x0000, 0x0000, + 0x009a, 0x001b, 0x001f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0521, 0x0003, 0x0004, + 0x00a0, 0x00db, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 16740 - 1677F + 0x0000, 0x000d, 0x0021, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0016, 0x0000, 0x0000, 0x0004, 0x001e, 0x0000, 0x0000, + 0x001b, 0x0001, 0x001f, 0x0525, 0x0001, 0x001f, 0x052f, 0x0008, + 0x002a, 0x003e, 0x004f, 0x005d, 0x0000, 0x0095, 0x0000, 0x0000, + 0x0002, 0x0000, 0x002d, 0x0001, 0x002f, 0x000d, 0x001d, 0xffff, + 0x157e, 0x1583, 0x1588, 0x158d, 0x1592, 0x1597, 0x159c, 0x15a1, + 0x15a6, 0x15ac, 0x15b1, 0x15b6, 0x0001, 0x0040, 0x0005, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0046, 0x0007, 0x0006, 0x0c3e, 0x416c, + // Entry 16780 - 167BF + 0x416f, 0x0c47, 0x4172, 0x0c4d, 0x0c50, 0x0002, 0x0000, 0x0052, + 0x0003, 0x0000, 0x0000, 0x0056, 0x0005, 0x001f, 0xffff, 0x053d, + 0x054c, 0x055b, 0x056a, 0x0002, 0x0060, 0x0076, 0x0003, 0x0064, + 0x0000, 0x006d, 0x0002, 0x0067, 0x006a, 0x0001, 0x0010, 0x0268, + 0x0001, 0x0010, 0x026e, 0x0002, 0x0070, 0x0073, 0x0001, 0x0010, + 0x0268, 0x0001, 0x0010, 0x026e, 0x0003, 0x007a, 0x0083, 0x008c, + 0x0002, 0x007d, 0x0080, 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, + 0x026e, 0x0002, 0x0086, 0x0089, 0x0001, 0x0010, 0x0268, 0x0001, + // Entry 167C0 - 167FF + 0x0010, 0x026e, 0x0002, 0x008f, 0x0092, 0x0001, 0x0010, 0x0268, + 0x0001, 0x0010, 0x026e, 0x0004, 0x009d, 0x0000, 0x0000, 0x009a, + 0x0001, 0x0005, 0x062f, 0x0001, 0x001f, 0x0579, 0x0035, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 16800 - 1683F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x00d6, 0x0001, 0x00d8, 0x0001, 0x0010, + 0x0b6d, 0x0004, 0x0000, 0x0000, 0x0000, 0x00e0, 0x0001, 0x00e2, + 0x0003, 0x00e6, 0x012c, 0x0109, 0x0021, 0x001f, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0582, 0x0021, + // Entry 16840 - 1687F + 0x001f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0582, 0x0021, 0x001f, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 16880 - 168BF + 0xffff, 0xffff, 0xffff, 0xffff, 0x0586, 0x0003, 0x0004, 0x00e8, + 0x0123, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000d, 0x002c, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0016, 0x0000, 0x0021, 0x0004, 0x001e, 0x0000, 0x0000, 0x001b, + 0x0001, 0x001d, 0x077d, 0x0001, 0x001f, 0x058b, 0x0004, 0x0029, + 0x0000, 0x0000, 0x0026, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, + 0x022e, 0x0008, 0x0035, 0x0049, 0x0000, 0x0064, 0x0000, 0x00c1, + 0x00cc, 0x00dd, 0x0002, 0x0000, 0x0038, 0x0001, 0x003a, 0x000d, + // Entry 168C0 - 168FF + 0x001d, 0xffff, 0x157e, 0x1583, 0x1588, 0x158d, 0x1592, 0x1597, + 0x159c, 0x15a1, 0x15a6, 0x15ac, 0x15b1, 0x15b6, 0x0002, 0x004c, + 0x0058, 0x0002, 0x0000, 0x004f, 0x0007, 0x0000, 0x236e, 0x2296, + 0x2357, 0x2357, 0x1e5d, 0x1edb, 0x235b, 0x0002, 0x0000, 0x005b, + 0x0007, 0x0000, 0x2008, 0x200a, 0x1f9a, 0x1f9a, 0x2142, 0x1f94, + 0x2002, 0x0002, 0x0067, 0x0090, 0x0003, 0x006b, 0x0000, 0x0087, + 0x0009, 0x0075, 0x007b, 0x0000, 0x0000, 0x0000, 0x0081, 0x0084, + 0x0078, 0x007e, 0x0001, 0x0010, 0x0268, 0x0001, 0x0001, 0x07e7, + // Entry 16900 - 1693F + 0x0001, 0x0010, 0x026e, 0x0001, 0x0006, 0x0cd0, 0x0001, 0x0006, + 0x0cde, 0x0001, 0x001d, 0x16da, 0x0002, 0x008a, 0x008d, 0x0001, + 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, 0x0003, 0x0094, 0x00a6, + 0x00b8, 0x0008, 0x009d, 0x00a3, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x00a0, 0x0001, 0x0010, 0x0268, 0x0001, 0x0001, 0x07e7, + 0x0001, 0x0010, 0x026e, 0x0008, 0x00af, 0x00b5, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x00b2, 0x0001, 0x0010, 0x0268, 0x0001, + 0x0001, 0x07e7, 0x0001, 0x0010, 0x026e, 0x0002, 0x00bb, 0x00be, + // Entry 16940 - 1697F + 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, 0x0004, 0x00c9, + 0x0000, 0x0000, 0x00c6, 0x0001, 0x001d, 0x0793, 0x0001, 0x001d, + 0x079a, 0x0004, 0x00da, 0x00d4, 0x00d1, 0x00d7, 0x0001, 0x0002, + 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, 0x0002, 0x04fe, 0x0001, + 0x0002, 0x0508, 0x0004, 0x00e5, 0x0000, 0x0000, 0x00e2, 0x0001, + 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0035, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 16980 - 169BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x011e, 0x0001, 0x0120, 0x0001, 0x0010, 0x0b6d, + 0x0004, 0x0000, 0x0000, 0x0000, 0x0128, 0x0001, 0x012a, 0x0003, + 0x012e, 0x017e, 0x0156, 0x0026, 0x001f, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 169C0 - 169FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0599, 0x0026, 0x001f, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 16A00 - 16A3F + 0xffff, 0xffff, 0x0599, 0x0026, 0x001f, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x059d, 0x0002, 0x0003, 0x0049, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0004, + 0x0000, 0x0000, 0x0000, 0x0011, 0x0002, 0x0014, 0x002a, 0x0003, + // Entry 16A40 - 16A7F + 0x0018, 0x0000, 0x0021, 0x0002, 0x001b, 0x001e, 0x0001, 0x0010, + 0x0268, 0x0001, 0x0010, 0x026e, 0x0002, 0x0024, 0x0027, 0x0001, + 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, 0x0003, 0x002e, 0x0037, + 0x0040, 0x0002, 0x0031, 0x0034, 0x0001, 0x0010, 0x0268, 0x0001, + 0x0010, 0x026e, 0x0002, 0x003a, 0x003d, 0x0001, 0x0010, 0x0268, + 0x0001, 0x0010, 0x026e, 0x0002, 0x0043, 0x0046, 0x0001, 0x0010, + 0x0268, 0x0001, 0x0010, 0x026e, 0x0035, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 16A80 - 16ABF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x007f, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0089, 0x0002, 0x0000, 0x0082, 0x0005, 0x001d, 0x1a78, + 0x1a7d, 0x1a81, 0x1a6f, 0x1a89, 0x0001, 0x008b, 0x0001, 0x0010, + 0x0b6d, 0x0002, 0x0003, 0x00bd, 0x0008, 0x0000, 0x0000, 0x0000, + // Entry 16AC0 - 16AFF + 0x0000, 0x0000, 0x0000, 0x000c, 0x001b, 0x0006, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0013, 0x0004, 0x0000, 0x0000, 0x0000, + 0x0018, 0x0001, 0x0010, 0x0305, 0x0008, 0x0000, 0x0024, 0x0032, + 0x0047, 0x00a1, 0x0000, 0x00ac, 0x0000, 0x0001, 0x0026, 0x0002, + 0x0000, 0x0029, 0x0007, 0x0000, 0x236e, 0x2296, 0x2357, 0x2357, + 0x1e5d, 0x1edb, 0x235b, 0x0002, 0x0035, 0x003e, 0x0001, 0x0037, + 0x0005, 0x0000, 0xffff, 0x04e3, 0x04e6, 0x04e9, 0x04ec, 0x0001, + 0x0040, 0x0005, 0x0000, 0xffff, 0x04e3, 0x04e6, 0x04e9, 0x04ec, + // Entry 16B00 - 16B3F + 0x0002, 0x004a, 0x0079, 0x0003, 0x004e, 0x0057, 0x0070, 0x0002, + 0x0051, 0x0054, 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, + 0x0009, 0x0000, 0x0000, 0x0000, 0x0064, 0x0000, 0x006a, 0x006d, + 0x0061, 0x0067, 0x0001, 0x001d, 0x16e6, 0x0001, 0x0006, 0x18b6, + 0x0001, 0x001d, 0x1a81, 0x0001, 0x0006, 0x0cf2, 0x0001, 0x001d, + 0x16fa, 0x0002, 0x0073, 0x0076, 0x0001, 0x0010, 0x0268, 0x0001, + 0x0010, 0x026e, 0x0003, 0x007d, 0x0086, 0x0098, 0x0002, 0x0080, + 0x0083, 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, 0x0008, + // Entry 16B40 - 16B7F + 0x008f, 0x0095, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0092, + 0x0001, 0x0010, 0x0268, 0x0001, 0x0001, 0x07e7, 0x0001, 0x0010, + 0x026e, 0x0002, 0x009b, 0x009e, 0x0001, 0x0010, 0x0268, 0x0001, + 0x0010, 0x026e, 0x0003, 0x0000, 0x0000, 0x00a5, 0x0002, 0x0000, + 0x00a8, 0x0002, 0x001f, 0x05a2, 0x05b9, 0x0004, 0x00ba, 0x00b4, + 0x00b1, 0x00b7, 0x0001, 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, + 0x0001, 0x0002, 0x04fe, 0x0001, 0x0002, 0x0508, 0x003d, 0x00fb, + 0x0000, 0x0000, 0x0100, 0x0000, 0x0000, 0x0105, 0x0000, 0x0000, + // Entry 16B80 - 16BBF + 0x010a, 0x0000, 0x0000, 0x010f, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0114, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0119, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x011e, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0123, 0x0000, 0x0000, 0x0128, 0x0001, 0x00fd, 0x0001, 0x0000, + 0x1a35, 0x0001, 0x0102, 0x0001, 0x001f, 0x05c4, 0x0001, 0x0107, + // Entry 16BC0 - 16BFF + 0x0001, 0x001f, 0x05c9, 0x0001, 0x010c, 0x0001, 0x001f, 0x05d3, + 0x0001, 0x0111, 0x0001, 0x001f, 0x05d7, 0x0001, 0x0116, 0x0001, + 0x001f, 0x05de, 0x0001, 0x011b, 0x0001, 0x001f, 0x05e3, 0x0001, + 0x0120, 0x0001, 0x0010, 0x0b6d, 0x0001, 0x0125, 0x0001, 0x001f, + 0x05f5, 0x0001, 0x012a, 0x0001, 0x001f, 0x05fc, 0x0003, 0x0004, + 0x0057, 0x0092, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000d, 0x0016, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0000, 0x0000, 0x0000, + // Entry 16C00 - 16C3F + 0x001f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0002, 0x0022, 0x0038, + 0x0003, 0x0026, 0x0000, 0x002f, 0x0002, 0x0029, 0x002c, 0x0001, + 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, 0x0002, 0x0032, 0x0035, + 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, 0x0003, 0x003c, + 0x0045, 0x004e, 0x0002, 0x003f, 0x0042, 0x0001, 0x0010, 0x0268, + 0x0001, 0x0010, 0x026e, 0x0002, 0x0048, 0x004b, 0x0001, 0x0010, + 0x0268, 0x0001, 0x0010, 0x026e, 0x0002, 0x0051, 0x0054, 0x0001, + 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, 0x0035, 0x0000, 0x0000, + // Entry 16C40 - 16C7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x008d, 0x0001, 0x008f, 0x0001, 0x0010, 0x0b6d, + 0x0004, 0x0000, 0x0000, 0x0000, 0x0097, 0x0001, 0x0099, 0x0003, + // Entry 16C80 - 16CBF + 0x0000, 0x0000, 0x009d, 0x002d, 0x001f, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0604, 0x0002, 0x0003, 0x006c, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0020, 0x0008, 0x0000, + // Entry 16CC0 - 16CFF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, + 0x001d, 0x0000, 0x0000, 0x001a, 0x0001, 0x001d, 0x077d, 0x0001, + 0x001f, 0x058b, 0x0008, 0x0000, 0x0000, 0x0000, 0x0029, 0x0000, + 0x0061, 0x0000, 0x0000, 0x0002, 0x002c, 0x0042, 0x0003, 0x0030, + 0x0000, 0x0039, 0x0002, 0x0033, 0x0036, 0x0001, 0x0010, 0x0268, + 0x0001, 0x0010, 0x026e, 0x0002, 0x003c, 0x003f, 0x0001, 0x0010, + 0x0268, 0x0001, 0x0010, 0x026e, 0x0003, 0x0046, 0x004f, 0x0058, + 0x0002, 0x0049, 0x004c, 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, + // Entry 16D00 - 16D3F + 0x026e, 0x0002, 0x0052, 0x0055, 0x0001, 0x0010, 0x0268, 0x0001, + 0x0010, 0x026e, 0x0002, 0x005b, 0x005e, 0x0001, 0x0010, 0x0268, + 0x0001, 0x0010, 0x026e, 0x0004, 0x0069, 0x0000, 0x0000, 0x0066, + 0x0001, 0x001d, 0x0793, 0x0001, 0x001d, 0x079a, 0x0035, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x00a2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 16D40 - 16D7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x00ac, 0x0002, 0x0000, 0x00a5, 0x0005, + 0x001d, 0x1a78, 0x1a7d, 0x1a81, 0x1a6f, 0x1a89, 0x0001, 0x00ae, + 0x0001, 0x0010, 0x0b6d, 0x0002, 0x0003, 0x006a, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x001f, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, + 0x0003, 0x0000, 0x001c, 0x0019, 0x0001, 0x001f, 0x0608, 0x0001, + // Entry 16D80 - 16DBF + 0x001f, 0x0623, 0x0008, 0x0000, 0x0000, 0x0000, 0x0028, 0x0000, + 0x0060, 0x0000, 0x0000, 0x0002, 0x002b, 0x0041, 0x0003, 0x002f, + 0x0000, 0x0038, 0x0002, 0x0032, 0x0035, 0x0001, 0x0010, 0x0268, + 0x0001, 0x0010, 0x026e, 0x0002, 0x003b, 0x003e, 0x0001, 0x0010, + 0x0268, 0x0001, 0x0010, 0x026e, 0x0003, 0x0045, 0x004e, 0x0057, + 0x0002, 0x0048, 0x004b, 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, + 0x026e, 0x0002, 0x0051, 0x0054, 0x0001, 0x0010, 0x0268, 0x0001, + 0x0010, 0x026e, 0x0002, 0x005a, 0x005d, 0x0001, 0x0010, 0x0268, + // Entry 16DC0 - 16DFF + 0x0001, 0x0010, 0x026e, 0x0003, 0x0000, 0x0067, 0x0064, 0x0001, + 0x001f, 0x0639, 0x0001, 0x001f, 0x0652, 0x0013, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x007e, 0x0002, 0x0000, 0x0081, 0x0005, 0x001d, 0x1a78, 0x1a7d, + 0x1a81, 0x1a6f, 0x1a89, 0x0003, 0x0004, 0x00f0, 0x0326, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x001e, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, + // Entry 16E00 - 16E3F + 0x0000, 0x0004, 0x0000, 0x0000, 0x0000, 0x001b, 0x0001, 0x0002, + 0x0044, 0x0008, 0x0027, 0x003a, 0x0054, 0x0089, 0x0000, 0x00da, + 0x00df, 0x0000, 0x0001, 0x0029, 0x0001, 0x002b, 0x000d, 0x001f, + 0xffff, 0x0666, 0x066a, 0x066e, 0x0672, 0x0676, 0x067a, 0x067e, + 0x0682, 0x0686, 0x068a, 0x068e, 0x0692, 0x0001, 0x003c, 0x0005, + 0x0000, 0x0042, 0x0000, 0x0000, 0x004b, 0x0007, 0x0000, 0x236e, + 0x2296, 0x2357, 0x2357, 0x1e5d, 0x1edb, 0x235b, 0x0007, 0x0006, + 0x0c3e, 0x416c, 0x416f, 0x0c47, 0x4172, 0x0c4d, 0x0c50, 0x0002, + // Entry 16E40 - 16E7F + 0x0057, 0x0070, 0x0003, 0x005b, 0x0062, 0x0069, 0x0005, 0x001f, + 0xffff, 0x0696, 0x06a1, 0x06ac, 0x06b7, 0x0005, 0x0006, 0xffff, + 0x0c8c, 0x0c8f, 0x0c92, 0x0c95, 0x0005, 0x001d, 0xffff, 0x1680, + 0x2061, 0x169e, 0x2070, 0x0003, 0x0074, 0x007b, 0x0082, 0x0005, + 0x001f, 0xffff, 0x0696, 0x06a1, 0x06ac, 0x06b7, 0x0005, 0x0006, + 0xffff, 0x0c8c, 0x0c8f, 0x0c92, 0x0c95, 0x0005, 0x001d, 0xffff, + 0x1680, 0x2061, 0x169e, 0x207e, 0x0002, 0x008c, 0x00bb, 0x0003, + 0x0090, 0x0099, 0x00b2, 0x0002, 0x0093, 0x0096, 0x0001, 0x0010, + // Entry 16E80 - 16EBF + 0x0268, 0x0001, 0x0010, 0x026e, 0x0009, 0x0000, 0x0000, 0x0000, + 0x00a6, 0x0000, 0x00ac, 0x00af, 0x00a3, 0x00a9, 0x0001, 0x001d, + 0x16bc, 0x0001, 0x001d, 0x16ca, 0x0001, 0x001d, 0x1a81, 0x0001, + 0x0006, 0x0cde, 0x0001, 0x001d, 0x16da, 0x0002, 0x00b5, 0x00b8, + 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, 0x0003, 0x00bf, + 0x00c8, 0x00d1, 0x0002, 0x00c2, 0x00c5, 0x0001, 0x0010, 0x0268, + 0x0001, 0x0010, 0x026e, 0x0002, 0x00cb, 0x00ce, 0x0001, 0x0010, + 0x0268, 0x0001, 0x0010, 0x026e, 0x0002, 0x00d4, 0x00d7, 0x0001, + // Entry 16EC0 - 16EFF + 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, 0x0001, 0x00dc, 0x0001, + 0x0015, 0x14be, 0x0004, 0x00ed, 0x00e7, 0x00e4, 0x00ea, 0x0001, + 0x0005, 0x0082, 0x0001, 0x0005, 0x008f, 0x0001, 0x0005, 0x0099, + 0x0001, 0x0005, 0x00a1, 0x003f, 0x0000, 0x0000, 0x0000, 0x0130, + 0x0138, 0x0142, 0x0151, 0x015b, 0x0165, 0x0174, 0x0183, 0x018d, + 0x019c, 0x01a4, 0x0000, 0x0000, 0x01ae, 0x01b3, 0x01b8, 0x01c2, + 0x01cc, 0x0000, 0x01d6, 0x01db, 0x0000, 0x0000, 0x0000, 0x01e0, + 0x01e5, 0x01ea, 0x01ef, 0x0000, 0x01fe, 0x020c, 0x0220, 0x022f, + // Entry 16F00 - 16F3F + 0x023e, 0x0000, 0x0000, 0x024c, 0x025b, 0x026f, 0x027e, 0x0000, + 0x028d, 0x0296, 0x02a4, 0x02b7, 0x02c2, 0x0000, 0x02d1, 0x02e0, + 0x02e5, 0x02ea, 0x0000, 0x02ef, 0x0000, 0x0000, 0x02f9, 0x0303, + 0x0000, 0x0312, 0x031c, 0x0002, 0x0000, 0x0133, 0x0003, 0x001d, + 0x17c8, 0x17d7, 0x208c, 0x0003, 0x0000, 0x0000, 0x013c, 0x0001, + 0x013e, 0x0002, 0x001f, 0x06c1, 0x06c1, 0x0003, 0x0000, 0x0000, + 0x0146, 0x0002, 0x0149, 0x014d, 0x0002, 0x001f, 0x06c1, 0x06c1, + 0x0002, 0x001f, 0x06ca, 0x06ca, 0x0003, 0x0000, 0x0000, 0x0155, + // Entry 16F40 - 16F7F + 0x0001, 0x0157, 0x0002, 0x001f, 0x06e8, 0x06d1, 0x0003, 0x0000, + 0x0000, 0x015f, 0x0001, 0x0161, 0x0002, 0x0006, 0x4175, 0x1702, + 0x0003, 0x0000, 0x0000, 0x0169, 0x0002, 0x016c, 0x0170, 0x0002, + 0x001f, 0x0700, 0x0700, 0x0002, 0x001f, 0x0707, 0x0707, 0x0003, + 0x0000, 0x0178, 0x017d, 0x0003, 0x001d, 0x1905, 0x1913, 0x209d, + 0x0001, 0x017f, 0x0002, 0x0006, 0x1766, 0x175b, 0x0003, 0x0000, + 0x0000, 0x0187, 0x0001, 0x0189, 0x0002, 0x001f, 0x070e, 0x070e, + 0x0003, 0x0000, 0x0000, 0x0191, 0x0002, 0x0194, 0x0198, 0x0002, + // Entry 16F80 - 16FBF + 0x0000, 0x1ace, 0x1ace, 0x0002, 0x0000, 0x1ad5, 0x1ad5, 0x0002, + 0x0000, 0x019f, 0x0003, 0x001d, 0x1990, 0x19a1, 0x20ad, 0x0003, + 0x0000, 0x0000, 0x01a8, 0x0001, 0x01aa, 0x0002, 0x001f, 0x0717, + 0x0717, 0x0001, 0x01b0, 0x0001, 0x001f, 0x0723, 0x0001, 0x01b5, + 0x0001, 0x001f, 0x0723, 0x0002, 0x0000, 0x01bb, 0x0005, 0x001d, + 0x1a78, 0x1a7d, 0x1a81, 0x1a6f, 0x1a89, 0x0003, 0x0000, 0x0000, + 0x01c6, 0x0001, 0x01c8, 0x0002, 0x0006, 0x4181, 0x18de, 0x0003, + 0x0000, 0x0000, 0x01d0, 0x0001, 0x01d2, 0x0002, 0x001f, 0x0737, + // Entry 16FC0 - 16FFF + 0x072d, 0x0001, 0x01d8, 0x0001, 0x001d, 0x1aea, 0x0001, 0x01dd, + 0x0001, 0x001d, 0x1aea, 0x0001, 0x01e2, 0x0001, 0x001d, 0x1b14, + 0x0001, 0x01e7, 0x0001, 0x001d, 0x1b2e, 0x0001, 0x01ec, 0x0001, + 0x001d, 0x1b2e, 0x0003, 0x0000, 0x01f3, 0x01f8, 0x0003, 0x001d, + 0x1b42, 0x1b54, 0x20c0, 0x0001, 0x01fa, 0x0002, 0x001d, 0x1b8b, + 0x1b75, 0x0003, 0x0000, 0x0000, 0x0202, 0x0002, 0x0205, 0x0208, + 0x0001, 0x001d, 0x1c34, 0x0002, 0x001d, 0x1c45, 0x1c45, 0x0003, + 0x0000, 0x0210, 0x0215, 0x0003, 0x001d, 0x1c51, 0x1c61, 0x20d4, + // Entry 17000 - 1703F + 0x0002, 0x0218, 0x021c, 0x0002, 0x001d, 0x1c7e, 0x1c7e, 0x0002, + 0x001d, 0xffff, 0x1c92, 0x0003, 0x0000, 0x0000, 0x0224, 0x0002, + 0x0227, 0x022b, 0x0002, 0x001f, 0xffff, 0x00c0, 0x0002, 0x001d, + 0x1cde, 0x1cde, 0x0003, 0x0000, 0x0000, 0x0233, 0x0002, 0x0236, + 0x023a, 0x0002, 0x001d, 0x1d10, 0x1d10, 0x0002, 0x001d, 0x1d21, + 0x1d21, 0x0003, 0x0000, 0x0242, 0x0247, 0x0003, 0x001d, 0x1d2d, + 0x1d3e, 0x20e6, 0x0001, 0x0249, 0x0001, 0x001d, 0x1d5d, 0x0003, + 0x0000, 0x0250, 0x0255, 0x0003, 0x001d, 0x1e0e, 0x1e23, 0x20f9, + // Entry 17040 - 1707F + 0x0001, 0x0257, 0x0002, 0x001f, 0xffff, 0x00e5, 0x0003, 0x0000, + 0x025f, 0x0264, 0x0003, 0x001f, 0x0742, 0x0753, 0x075f, 0x0002, + 0x0267, 0x026b, 0x0002, 0x001d, 0x1ea4, 0x1ea4, 0x0002, 0x001d, + 0x1eb8, 0x1eb8, 0x0003, 0x0000, 0x0000, 0x0273, 0x0002, 0x0276, + 0x027a, 0x0002, 0x001d, 0x1eeb, 0x1eeb, 0x0002, 0x001d, 0x1efc, + 0x1efc, 0x0003, 0x0000, 0x0282, 0x0287, 0x0003, 0x001d, 0x1f08, + 0x1f19, 0x2110, 0x0001, 0x0289, 0x0002, 0x001f, 0xffff, 0x0123, + 0x0003, 0x0000, 0x0000, 0x0291, 0x0001, 0x0293, 0x0001, 0x001d, + // Entry 17080 - 170BF + 0x1fcc, 0x0003, 0x0000, 0x029a, 0x029f, 0x0003, 0x001d, 0x1fe9, + 0x1ffb, 0x2123, 0x0001, 0x02a1, 0x0001, 0x001e, 0x0000, 0x0003, + 0x0000, 0x02a8, 0x02ad, 0x0003, 0x001f, 0x0772, 0x0782, 0x078d, + 0x0002, 0x02b0, 0x02b3, 0x0001, 0x001e, 0x0051, 0x0002, 0x001e, + 0x0064, 0x0064, 0x0003, 0x0000, 0x0000, 0x02bb, 0x0002, 0x0000, + 0x02be, 0x0002, 0x001e, 0x00a7, 0x00a7, 0x0003, 0x0000, 0x02c6, + 0x02cb, 0x0003, 0x001e, 0x00b3, 0x00c5, 0x23bc, 0x0001, 0x02cd, + 0x0002, 0x001e, 0x00fc, 0x00e6, 0x0003, 0x0000, 0x0000, 0x02d5, + // Entry 170C0 - 170FF + 0x0002, 0x02d8, 0x02dc, 0x0002, 0x001f, 0xffff, 0x0161, 0x0002, + 0x001e, 0x01bb, 0x01bb, 0x0001, 0x02e2, 0x0001, 0x0010, 0x0b6d, + 0x0001, 0x02e7, 0x0001, 0x0010, 0x0b6d, 0x0001, 0x02ec, 0x0001, + 0x0010, 0x0b6d, 0x0003, 0x0000, 0x0000, 0x02f3, 0x0001, 0x02f5, + 0x0002, 0x001f, 0x07a8, 0x079f, 0x0003, 0x0000, 0x0000, 0x02fd, + 0x0001, 0x02ff, 0x0002, 0x001f, 0x07b1, 0x07b1, 0x0003, 0x0000, + 0x0000, 0x0307, 0x0002, 0x030a, 0x030e, 0x0002, 0x0000, 0x1d97, + 0x1d97, 0x0002, 0x0000, 0x1da0, 0x1da0, 0x0003, 0x0000, 0x0000, + // Entry 17100 - 1713F + 0x0316, 0x0001, 0x0318, 0x0002, 0x001f, 0x07bc, 0x07bc, 0x0003, + 0x0000, 0x0000, 0x0320, 0x0001, 0x0322, 0x0002, 0x0000, 0x1db4, + 0x1db4, 0x0004, 0x0000, 0x0000, 0x032b, 0x0335, 0x0002, 0x0000, + 0x032e, 0x0003, 0x0000, 0x0000, 0x0332, 0x0001, 0x001f, 0x07c5, + 0x0002, 0x0000, 0x0338, 0x0003, 0x033c, 0x041a, 0x0387, 0x0049, + 0x001e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x05ad, 0xffff, 0xffff, 0x06a9, 0xffff, 0xffff, + 0x07f1, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 17140 - 1717F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0deb, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0ec5, 0xffff, 0xffff, 0x0f90, + 0xffff, 0x1010, 0x1072, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x14dd, 0x0091, 0x001e, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x05cb, 0xffff, 0xffff, + // Entry 17180 - 171BF + 0x06b6, 0xffff, 0xffff, 0x080e, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x23e7, + 0x0d8c, 0xffff, 0x0e02, 0xffff, 0xffff, 0xffff, 0xffff, 0x0edf, + 0xffff, 0xffff, 0x0fa8, 0x0fec, 0x102a, 0x108d, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x11cb, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2402, 0xffff, 0xffff, 0xffff, + // Entry 171C0 - 171FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1798, 0xffff, 0xffff, 0xffff, 0xffff, 0x182c, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x1a07, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1b47, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1e63, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1fca, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 17200 - 1723F + 0xffff, 0xffff, 0xffff, 0xffff, 0x22da, 0x0049, 0x001e, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x05f3, 0xffff, 0xffff, 0x23d0, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0e23, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0f03, 0xffff, 0xffff, 0x0fca, 0xffff, 0x104e, + 0x10b2, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 17240 - 1727F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x241c, + 0x0002, 0x0003, 0x0049, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000c, 0x0004, 0x0000, 0x0000, 0x0000, + 0x0011, 0x0002, 0x0014, 0x002a, 0x0003, 0x0018, 0x0000, 0x0021, + 0x0002, 0x001b, 0x001e, 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, + 0x026e, 0x0002, 0x0024, 0x0027, 0x0001, 0x0010, 0x0268, 0x0001, + 0x0010, 0x026e, 0x0003, 0x002e, 0x0037, 0x0040, 0x0002, 0x0031, + // Entry 17280 - 172BF + 0x0034, 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, 0x0002, + 0x003a, 0x003d, 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, + 0x0002, 0x0043, 0x0046, 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, + 0x026e, 0x0013, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x005d, 0x0002, 0x0000, 0x0060, + 0x0005, 0x001d, 0x1a78, 0x1a7d, 0x1a81, 0x1a6f, 0x1a89, 0x0002, + 0x0003, 0x00c2, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 172C0 - 172FF + 0x0000, 0x000c, 0x0020, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, 0x001d, 0x0000, 0x0000, + 0x001a, 0x0001, 0x001f, 0x07e1, 0x0001, 0x001f, 0x07eb, 0x0008, + 0x0000, 0x0000, 0x0029, 0x0042, 0x0000, 0x00a6, 0x00b1, 0x0000, + 0x0002, 0x002c, 0x0037, 0x0003, 0x0000, 0x0000, 0x0030, 0x0005, + 0x001f, 0xffff, 0x07fa, 0x0809, 0x0818, 0x056a, 0x0003, 0x0000, + 0x0000, 0x003b, 0x0005, 0x001f, 0xffff, 0x07fa, 0x0809, 0x0818, + 0x056a, 0x0002, 0x0045, 0x0087, 0x0003, 0x0049, 0x0000, 0x0068, + // Entry 17300 - 1733F + 0x0009, 0x0053, 0x0059, 0x0000, 0x005c, 0x0000, 0x0062, 0x0065, + 0x0056, 0x005f, 0x0001, 0x0010, 0x0268, 0x0001, 0x001d, 0x16e6, + 0x0001, 0x0010, 0x026e, 0x0001, 0x001d, 0x16ca, 0x0001, 0x0006, + 0x0cd0, 0x0001, 0x0006, 0x0cde, 0x0001, 0x001d, 0x16da, 0x0009, + 0x0072, 0x0078, 0x0000, 0x007b, 0x0000, 0x0081, 0x0084, 0x0075, + 0x007e, 0x0001, 0x0010, 0x0268, 0x0001, 0x001d, 0x16e6, 0x0001, + 0x0010, 0x026e, 0x0001, 0x001d, 0x16ca, 0x0001, 0x0006, 0x0cd0, + 0x0001, 0x0006, 0x0cde, 0x0001, 0x001d, 0x16da, 0x0003, 0x008b, + // Entry 17340 - 1737F + 0x0094, 0x009d, 0x0002, 0x008e, 0x0091, 0x0001, 0x0010, 0x0268, + 0x0001, 0x0010, 0x026e, 0x0002, 0x0097, 0x009a, 0x0001, 0x0010, + 0x0268, 0x0001, 0x0010, 0x026e, 0x0002, 0x00a0, 0x00a3, 0x0001, + 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, 0x0004, 0x00ae, 0x0000, + 0x0000, 0x00ab, 0x0001, 0x001f, 0x0827, 0x0001, 0x001f, 0x082f, + 0x0004, 0x00bf, 0x00b9, 0x00b6, 0x00bc, 0x0001, 0x0002, 0x04e3, + 0x0001, 0x0002, 0x04f2, 0x0001, 0x0002, 0x04fe, 0x0001, 0x0002, + 0x0508, 0x0013, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 17380 - 173BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x00d6, 0x0002, 0x0000, 0x00d9, + 0x0005, 0x001d, 0x1a78, 0x1a7d, 0x1a81, 0x1a6f, 0x1a89, 0x0003, + 0x0004, 0x0000, 0x00a8, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000d, 0x001b, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0016, 0x0000, 0x0000, 0x0001, 0x0018, 0x0001, + 0x001f, 0x058b, 0x0008, 0x0024, 0x0000, 0x0000, 0x006b, 0x0000, + 0x00a3, 0x0000, 0x0000, 0x0002, 0x0027, 0x0049, 0x0003, 0x002b, + // Entry 173C0 - 173FF + 0x0000, 0x003a, 0x000d, 0x001d, 0xffff, 0x157e, 0x1583, 0x1588, + 0x158d, 0x1592, 0x1597, 0x159c, 0x15a1, 0x2137, 0x15ac, 0x15b1, + 0x15b6, 0x000d, 0x001d, 0xffff, 0x15bb, 0x15c1, 0x15c9, 0x15cf, + 0x15d5, 0x08c0, 0x08c6, 0x15da, 0x213c, 0x15ec, 0x15f4, 0x15fe, + 0x0003, 0x004d, 0x0000, 0x005c, 0x000d, 0x001f, 0xffff, 0x0838, + 0x083d, 0x0842, 0x0847, 0x084c, 0x0851, 0x0856, 0x085b, 0x0860, + 0x0865, 0x086a, 0x086f, 0x000d, 0x001f, 0xffff, 0x0874, 0x087a, + 0x0882, 0x0888, 0x088e, 0x0893, 0x0899, 0x089f, 0x08a6, 0x08b0, + // Entry 17400 - 1743F + 0x08b8, 0x08c2, 0x0002, 0x006e, 0x0084, 0x0003, 0x0072, 0x0000, + 0x007b, 0x0002, 0x0075, 0x0078, 0x0001, 0x0010, 0x0268, 0x0001, + 0x0010, 0x026e, 0x0002, 0x007e, 0x0081, 0x0001, 0x0010, 0x0268, + 0x0001, 0x0010, 0x026e, 0x0003, 0x0088, 0x0091, 0x009a, 0x0002, + 0x008b, 0x008e, 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, + 0x0002, 0x0094, 0x0097, 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, + 0x026e, 0x0002, 0x009d, 0x00a0, 0x0001, 0x0010, 0x0268, 0x0001, + 0x0010, 0x026e, 0x0001, 0x00a5, 0x0001, 0x001d, 0x079a, 0x0004, + // Entry 17440 - 1747F + 0x0000, 0x0000, 0x0000, 0x00ad, 0x0001, 0x00af, 0x0003, 0x00b3, + 0x0197, 0x0125, 0x0070, 0x001f, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 17480 - 174BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x08cc, 0x0070, 0x001f, 0xffff, 0xffff, + // Entry 174C0 - 174FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 17500 - 1753F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x08cc, 0x0070, 0x001f, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 17540 - 1757F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 17580 - 175BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x08d0, + 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000b, 0x0007, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0013, 0x0004, 0x0021, 0x001b, 0x0018, 0x001e, + 0x0001, 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, 0x0002, + // Entry 175C0 - 175FF + 0x04fe, 0x0001, 0x0002, 0x0508, 0x0001, 0x0002, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x001f, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0014, 0x0000, 0x0000, + 0x0004, 0x001c, 0x0000, 0x0000, 0x0019, 0x0001, 0x001f, 0x07e1, + 0x0001, 0x001f, 0x07eb, 0x0008, 0x0000, 0x0000, 0x0000, 0x0028, + 0x0000, 0x0060, 0x006b, 0x0000, 0x0002, 0x002b, 0x0041, 0x0003, + 0x002f, 0x0000, 0x0038, 0x0002, 0x0032, 0x0035, 0x0001, 0x0010, + 0x0268, 0x0001, 0x0010, 0x026e, 0x0002, 0x003b, 0x003e, 0x0001, + // Entry 17600 - 1763F + 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, 0x0003, 0x0045, 0x004e, + 0x0057, 0x0002, 0x0048, 0x004b, 0x0001, 0x0010, 0x0268, 0x0001, + 0x0010, 0x026e, 0x0002, 0x0051, 0x0054, 0x0001, 0x0010, 0x0268, + 0x0001, 0x0010, 0x026e, 0x0002, 0x005a, 0x005d, 0x0001, 0x0010, + 0x0268, 0x0001, 0x0010, 0x026e, 0x0004, 0x0068, 0x0000, 0x0000, + 0x0065, 0x0001, 0x001f, 0x0827, 0x0001, 0x001f, 0x082f, 0x0004, + 0x0079, 0x0073, 0x0070, 0x0076, 0x0001, 0x0002, 0x04e3, 0x0001, + 0x0002, 0x04f2, 0x0001, 0x0002, 0x04fe, 0x0001, 0x0002, 0x0508, + // Entry 17640 - 1767F + 0x0002, 0x0003, 0x009c, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000c, 0x0008, 0x0015, 0x003a, 0x0000, + 0x005b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0002, 0x0018, 0x0029, + 0x0001, 0x001a, 0x000d, 0x001d, 0xffff, 0x157e, 0x1583, 0x1588, + 0x158d, 0x1592, 0x1597, 0x159c, 0x15a1, 0x15a6, 0x15ac, 0x15b1, + 0x15b6, 0x0001, 0x002b, 0x000d, 0x001d, 0xffff, 0x157e, 0x1583, + 0x1588, 0x158d, 0x1592, 0x1597, 0x159c, 0x15a1, 0x15a6, 0x15ac, + 0x15b1, 0x15b6, 0x0002, 0x003d, 0x004c, 0x0005, 0x0000, 0x0000, + // Entry 17680 - 176BF + 0x0000, 0x0000, 0x0043, 0x0007, 0x0006, 0x0c3e, 0x416c, 0x416f, + 0x0c47, 0x4172, 0x0c4d, 0x418e, 0x0005, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0052, 0x0007, 0x0017, 0x0429, 0x2d74, 0x2d4c, 0x0426, + 0x2d77, 0x2d7a, 0x042f, 0x0002, 0x005e, 0x0074, 0x0003, 0x0062, + 0x0000, 0x006b, 0x0002, 0x0065, 0x0068, 0x0001, 0x0010, 0x0268, + 0x0001, 0x0010, 0x026e, 0x0002, 0x006e, 0x0071, 0x0001, 0x0010, + 0x0268, 0x0001, 0x0010, 0x026e, 0x0003, 0x0078, 0x0081, 0x0093, + 0x0002, 0x007b, 0x007e, 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, + // Entry 176C0 - 176FF + 0x026e, 0x0008, 0x008a, 0x0090, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x008d, 0x0001, 0x0010, 0x0268, 0x0001, 0x0001, 0x07e7, + 0x0001, 0x0010, 0x026e, 0x0002, 0x0096, 0x0099, 0x0001, 0x0010, + 0x0268, 0x0001, 0x0010, 0x026e, 0x003f, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00dc, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00e6, 0x0000, 0x0000, + // Entry 17700 - 1773F + 0x00ee, 0x0000, 0x0000, 0x00f6, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x00fe, 0x0110, 0x0002, 0x0000, 0x00df, 0x0005, + 0x001d, 0x1a78, 0x1a7d, 0x1a81, 0x1a6f, 0x1a89, 0x0002, 0x0000, + 0x00e9, 0x0003, 0x001d, 0x1bc5, 0x1bd4, 0x1bde, 0x0002, 0x0000, + 0x00f1, 0x0003, 0x001d, 0x1ca1, 0x1cb0, 0x1cba, 0x0002, 0x0000, + 0x00f9, 0x0003, 0x001d, 0x1d82, 0x1d91, 0x1d9b, 0x0003, 0x0102, + // Entry 17740 - 1777F + 0x0000, 0x0105, 0x0001, 0x001f, 0x04da, 0x0002, 0x0108, 0x010c, + 0x0002, 0x001f, 0x04df, 0x04df, 0x0002, 0x001f, 0x04f2, 0x04f2, + 0x0003, 0x0000, 0x0000, 0x0114, 0x0002, 0x0117, 0x011b, 0x0002, + 0x001f, 0x04df, 0x04df, 0x0002, 0x001f, 0x04f2, 0x04f2, 0x0002, + 0x0003, 0x0049, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000c, 0x0004, 0x0000, 0x0000, 0x0000, 0x0011, + 0x0002, 0x0014, 0x002a, 0x0003, 0x0018, 0x0000, 0x0021, 0x0002, + 0x001b, 0x001e, 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, + // Entry 17780 - 177BF + 0x0002, 0x0024, 0x0027, 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, + 0x026e, 0x0003, 0x002e, 0x0037, 0x0040, 0x0002, 0x0031, 0x0034, + 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, 0x0002, 0x003a, + 0x003d, 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, 0x0002, + 0x0043, 0x0046, 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, + 0x0035, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x007f, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 177C0 - 177FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0089, 0x0002, 0x0000, + 0x0082, 0x0005, 0x001f, 0x08dc, 0x08e1, 0x08e5, 0x08d5, 0x08ed, + 0x0001, 0x008b, 0x0001, 0x0010, 0x0b6d, 0x0003, 0x0004, 0x00c8, + 0x0212, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000d, 0x001e, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 17800 - 1783F + 0x0016, 0x0000, 0x0000, 0x0004, 0x0000, 0x0000, 0x0000, 0x001b, + 0x0001, 0x0002, 0x0044, 0x0008, 0x0027, 0x003a, 0x0048, 0x0061, + 0x0000, 0x00b2, 0x00b7, 0x0000, 0x0001, 0x0029, 0x0001, 0x002b, + 0x000d, 0x001d, 0xffff, 0x157e, 0x1583, 0x1588, 0x158d, 0x1592, + 0x1597, 0x159c, 0x15a1, 0x201c, 0x15ac, 0x15b1, 0x15b6, 0x0001, + 0x003c, 0x0002, 0x0000, 0x003f, 0x0007, 0x0000, 0x236e, 0x2296, + 0x2357, 0x2357, 0x1e5d, 0x1edb, 0x235b, 0x0002, 0x004b, 0x0056, + 0x0003, 0x0000, 0x0000, 0x004f, 0x0005, 0x001d, 0xffff, 0x1680, + // Entry 17840 - 1787F + 0x2043, 0x169e, 0x2146, 0x0003, 0x0000, 0x0000, 0x005a, 0x0005, + 0x001d, 0xffff, 0x1680, 0x2043, 0x169e, 0x2146, 0x0002, 0x0064, + 0x0093, 0x0003, 0x0068, 0x0071, 0x008a, 0x0002, 0x006b, 0x006e, + 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, 0x0009, 0x0000, + 0x0000, 0x0000, 0x007e, 0x0000, 0x0084, 0x0087, 0x007b, 0x0081, + 0x0001, 0x001d, 0x16bc, 0x0001, 0x001d, 0x16ca, 0x0001, 0x001f, + 0x08e5, 0x0001, 0x0006, 0x0cde, 0x0001, 0x001d, 0x16da, 0x0002, + 0x008d, 0x0090, 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, + // Entry 17880 - 178BF + 0x0003, 0x0097, 0x00a0, 0x00a9, 0x0002, 0x009a, 0x009d, 0x0001, + 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, 0x0002, 0x00a3, 0x00a6, + 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, 0x0002, 0x00ac, + 0x00af, 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, 0x0001, + 0x00b4, 0x0001, 0x0002, 0x028b, 0x0004, 0x00c5, 0x00bf, 0x00bc, + 0x00c2, 0x0001, 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, + 0x0002, 0x04fe, 0x0001, 0x0002, 0x0508, 0x0036, 0x0000, 0x0000, + 0x0000, 0x00ff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0107, + // Entry 178C0 - 178FF + 0x0000, 0x0000, 0x010f, 0x0000, 0x0000, 0x0000, 0x0117, 0x011c, + 0x0121, 0x0000, 0x0000, 0x0000, 0x012b, 0x0130, 0x0000, 0x0000, + 0x0000, 0x0135, 0x013a, 0x013f, 0x0144, 0x0000, 0x014e, 0x015c, + 0x0166, 0x0175, 0x0184, 0x0000, 0x0000, 0x018d, 0x0197, 0x01ab, + 0x01ba, 0x0000, 0x01c4, 0x01cd, 0x01d6, 0x01df, 0x01ea, 0x0000, + 0x01f4, 0x0203, 0x0208, 0x020d, 0x0002, 0x0000, 0x0102, 0x0003, + 0x001d, 0x17c8, 0x17d7, 0x208c, 0x0002, 0x0000, 0x010a, 0x0003, + 0x001d, 0x1905, 0x1913, 0x209d, 0x0002, 0x0000, 0x0112, 0x0003, + // Entry 17900 - 1793F + 0x001d, 0x1990, 0x19a1, 0x20ad, 0x0001, 0x0119, 0x0001, 0x001f, + 0x0723, 0x0001, 0x011e, 0x0001, 0x001f, 0x0723, 0x0002, 0x0000, + 0x0124, 0x0005, 0x001d, 0x2155, 0x215a, 0x215e, 0x1a6f, 0x2166, + 0x0001, 0x012d, 0x0001, 0x001d, 0x1aea, 0x0001, 0x0132, 0x0001, + 0x001d, 0x1aea, 0x0001, 0x0137, 0x0001, 0x001d, 0x1b14, 0x0001, + 0x013c, 0x0001, 0x001d, 0x1b2e, 0x0001, 0x0141, 0x0001, 0x001d, + 0x1b2e, 0x0003, 0x0000, 0x0000, 0x0148, 0x0001, 0x014a, 0x0002, + 0x001d, 0x1b8b, 0x1b75, 0x0003, 0x0000, 0x0000, 0x0152, 0x0002, + // Entry 17940 - 1797F + 0x0155, 0x0158, 0x0001, 0x001d, 0x1c34, 0x0002, 0x001d, 0x1c45, + 0x1c45, 0x0003, 0x0000, 0x0000, 0x0160, 0x0001, 0x0162, 0x0002, + 0x001d, 0x1c7e, 0x1c7e, 0x0003, 0x0000, 0x0000, 0x016a, 0x0002, + 0x016d, 0x0171, 0x0002, 0x001f, 0xffff, 0x00c0, 0x0002, 0x001d, + 0x1cde, 0x1cde, 0x0003, 0x0000, 0x0000, 0x0179, 0x0002, 0x017c, + 0x0180, 0x0002, 0x001d, 0x1d10, 0x1d10, 0x0002, 0x001d, 0x1d21, + 0x1d21, 0x0003, 0x0000, 0x0000, 0x0188, 0x0001, 0x018a, 0x0001, + 0x001d, 0x1d5d, 0x0003, 0x0000, 0x0000, 0x0191, 0x0001, 0x0193, + // Entry 17980 - 179BF + 0x0002, 0x001f, 0xffff, 0x00e5, 0x0003, 0x0000, 0x019b, 0x01a0, + 0x0003, 0x001f, 0x08fc, 0x090b, 0x0916, 0x0002, 0x01a3, 0x01a7, + 0x0002, 0x001d, 0x1ea4, 0x1ea4, 0x0002, 0x001d, 0x1eb8, 0x1eb8, + 0x0003, 0x0000, 0x0000, 0x01af, 0x0002, 0x01b2, 0x01b6, 0x0002, + 0x001d, 0x1eeb, 0x1eeb, 0x0002, 0x001d, 0x1efc, 0x1efc, 0x0003, + 0x0000, 0x0000, 0x01be, 0x0001, 0x01c0, 0x0002, 0x001f, 0xffff, + 0x0123, 0x0003, 0x0000, 0x0000, 0x01c8, 0x0001, 0x01ca, 0x0001, + 0x001d, 0x1fcc, 0x0003, 0x0000, 0x0000, 0x01d1, 0x0001, 0x01d3, + // Entry 179C0 - 179FF + 0x0001, 0x001e, 0x0000, 0x0003, 0x0000, 0x0000, 0x01da, 0x0001, + 0x01dc, 0x0001, 0x001e, 0x0051, 0x0003, 0x0000, 0x0000, 0x01e3, + 0x0002, 0x0000, 0x01e6, 0x0002, 0x001e, 0x00a7, 0x00a7, 0x0003, + 0x0000, 0x0000, 0x01ee, 0x0001, 0x01f0, 0x0002, 0x001e, 0x00fc, + 0x00e6, 0x0003, 0x0000, 0x0000, 0x01f8, 0x0002, 0x01fb, 0x01ff, + 0x0002, 0x001f, 0xffff, 0x0161, 0x0002, 0x001e, 0x01bb, 0x01bb, + 0x0001, 0x0205, 0x0001, 0x0010, 0x0b6d, 0x0001, 0x020a, 0x0001, + 0x0010, 0x0b6d, 0x0001, 0x020f, 0x0001, 0x0010, 0x0b6d, 0x0004, + // Entry 17A00 - 17A3F + 0x0000, 0x0000, 0x0217, 0x0237, 0x0002, 0x021a, 0x0230, 0x0003, + 0x021e, 0x022a, 0x0224, 0x0004, 0x0006, 0xffff, 0xffff, 0xffff, + 0x1f5f, 0x0004, 0x0006, 0xffff, 0xffff, 0xffff, 0x1f5f, 0x0004, + 0x0006, 0xffff, 0xffff, 0xffff, 0x1f63, 0x0003, 0x0000, 0x0000, + 0x0234, 0x0001, 0x001f, 0x0928, 0x0002, 0x023a, 0x0301, 0x0003, + 0x023e, 0x02c0, 0x027f, 0x003f, 0x0007, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0000, 0xffff, 0x000e, 0x0019, 0x0024, 0x002f, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x003a, 0xffff, + // Entry 17A40 - 17A7F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0064, 0x003f, 0x0007, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0004, 0xffff, 0x0011, 0x001c, 0x249e, + 0x0032, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x003d, + // Entry 17A80 - 17ABF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0068, 0x003f, 0x0007, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0009, 0xffff, 0x0015, 0x0020, + 0x24a2, 0x0036, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 17AC0 - 17AFF + 0x0041, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x006d, 0x0003, 0x0305, + 0x03cc, 0x0339, 0x0032, 0x001e, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x05ad, 0xffff, 0xffff, + // Entry 17B00 - 17B3F + 0x06a9, 0xffff, 0xffff, 0x07f1, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0ec5, + 0xffff, 0xffff, 0x0f90, 0xffff, 0x1010, 0x1072, 0x0091, 0x001e, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x05cb, 0xffff, 0xffff, 0x06b6, 0xffff, 0xffff, 0x080e, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 17B40 - 17B7F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2436, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0d8c, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0edf, 0xffff, 0xffff, 0x0fa8, 0x0fec, + 0x102a, 0x108d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x11cb, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2447, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x1798, 0xffff, 0xffff, 0xffff, + // Entry 17B80 - 17BBF + 0x2460, 0x182c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1a07, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1b47, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x247c, 0xffff, 0xffff, 0xffff, 0x1e63, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1fca, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x22da, 0x0032, 0x001e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 17BC0 - 17BFF + 0xffff, 0xffff, 0xffff, 0xffff, 0x05f3, 0xffff, 0xffff, 0x23d0, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0f03, 0xffff, + 0xffff, 0x0fca, 0xffff, 0x104e, 0x10b2, 0x0003, 0x0004, 0x0000, + 0x0091, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000d, 0x0004, 0x0012, 0x0000, 0x0000, 0x0059, 0x0002, + // Entry 17C00 - 17C3F + 0x0015, 0x0037, 0x0003, 0x0019, 0x0000, 0x0028, 0x000d, 0x001d, + 0xffff, 0x157e, 0x1583, 0x1588, 0x158d, 0x1592, 0x1597, 0x159c, + 0x15a1, 0x2137, 0x15ac, 0x15b1, 0x15b6, 0x000d, 0x001d, 0xffff, + 0x15bb, 0x15c1, 0x15c9, 0x15cf, 0x15d5, 0x08c0, 0x08c6, 0x15da, + 0x213c, 0x15ec, 0x15f4, 0x15fe, 0x0003, 0x003b, 0x0000, 0x004a, + 0x000d, 0x001f, 0xffff, 0x0838, 0x083d, 0x0842, 0x0847, 0x084c, + 0x0851, 0x0856, 0x085b, 0x0860, 0x0865, 0x086a, 0x086f, 0x000d, + 0x001f, 0xffff, 0x0874, 0x087a, 0x0882, 0x0888, 0x088e, 0x0893, + // Entry 17C40 - 17C7F + 0x0899, 0x089f, 0x08a6, 0x08b0, 0x08b8, 0x08c2, 0x0002, 0x005c, + 0x0072, 0x0003, 0x0060, 0x0000, 0x0069, 0x0002, 0x0063, 0x0066, + 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, 0x0002, 0x006c, + 0x006f, 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, 0x0003, + 0x0076, 0x007f, 0x0088, 0x0002, 0x0079, 0x007c, 0x0001, 0x0010, + 0x0268, 0x0001, 0x0010, 0x026e, 0x0002, 0x0082, 0x0085, 0x0001, + 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, 0x0002, 0x008b, 0x008e, + 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, 0x0004, 0x0000, + // Entry 17C80 - 17CBF + 0x0000, 0x0000, 0x0096, 0x0001, 0x0098, 0x0003, 0x009c, 0x01b4, + 0x0128, 0x008a, 0x001f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 17CC0 - 17CFF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 17D00 - 17D3F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0942, 0x008a, 0x001f, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 17D40 - 17D7F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 17D80 - 17DBF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0942, 0x008a, 0x001f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 17DC0 - 17DFF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 17E00 - 17E3F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0946, 0x0003, 0x0004, 0x00c7, + 0x0133, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000d, 0x0008, 0x0016, 0x003b, 0x005c, 0x0075, 0x0000, + // Entry 17E40 - 17E7F + 0x0000, 0x00b6, 0x0000, 0x0002, 0x0019, 0x002a, 0x0001, 0x001b, + 0x000d, 0x001d, 0xffff, 0x157e, 0x1583, 0x1588, 0x158d, 0x1592, + 0x1597, 0x159c, 0x15a1, 0x15a6, 0x15ac, 0x15b1, 0x15b6, 0x0001, + 0x002c, 0x000d, 0x001d, 0xffff, 0x157e, 0x1583, 0x1588, 0x158d, + 0x1592, 0x1597, 0x159c, 0x15a1, 0x15a6, 0x15ac, 0x15b1, 0x15b6, + 0x0002, 0x003e, 0x004d, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0044, 0x0007, 0x0017, 0x0429, 0x2d74, 0x2d4c, 0x0426, 0x2d77, + 0x2d7a, 0x042f, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0053, + // Entry 17E80 - 17EBF + 0x0007, 0x0017, 0x0429, 0x2d74, 0x2d4c, 0x0426, 0x2d77, 0x2d7a, + 0x042f, 0x0002, 0x005f, 0x006a, 0x0003, 0x0000, 0x0000, 0x0063, + 0x0005, 0x0006, 0xffff, 0x0c98, 0x4191, 0x0cb3, 0x419f, 0x0003, + 0x0000, 0x0000, 0x006e, 0x0005, 0x0006, 0xffff, 0x0c98, 0x4191, + 0x0cb3, 0x419f, 0x0002, 0x0078, 0x008e, 0x0003, 0x007c, 0x0000, + 0x0085, 0x0002, 0x007f, 0x0082, 0x0001, 0x0010, 0x0268, 0x0001, + 0x0010, 0x026e, 0x0002, 0x0088, 0x008b, 0x0001, 0x0010, 0x0268, + 0x0001, 0x0010, 0x026e, 0x0003, 0x0092, 0x009b, 0x00ad, 0x0002, + // Entry 17EC0 - 17EFF + 0x0095, 0x0098, 0x0001, 0x0010, 0x0268, 0x0001, 0x0010, 0x026e, + 0x0008, 0x00a4, 0x00aa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x00a7, 0x0001, 0x0010, 0x0268, 0x0001, 0x0001, 0x07e7, 0x0001, + 0x0010, 0x026e, 0x0002, 0x00b0, 0x00b3, 0x0001, 0x0010, 0x0268, + 0x0001, 0x0010, 0x026e, 0x0004, 0x00c4, 0x00be, 0x00bb, 0x00c1, + 0x0001, 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, 0x0002, + 0x04fe, 0x0001, 0x0002, 0x0508, 0x0033, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 17F00 - 17F3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00fb, 0x0000, 0x0000, + 0x0103, 0x0000, 0x0000, 0x010b, 0x0000, 0x0000, 0x0113, 0x0000, + 0x0000, 0x011b, 0x0000, 0x0000, 0x0123, 0x0000, 0x0000, 0x012b, + 0x0002, 0x0000, 0x00fe, 0x0003, 0x001f, 0x094b, 0x0958, 0x0960, + 0x0002, 0x0000, 0x0106, 0x0003, 0x001f, 0x096f, 0x097c, 0x0984, + 0x0002, 0x0000, 0x010e, 0x0003, 0x001f, 0x0993, 0x09a0, 0x09a8, + // Entry 17F40 - 17F7F + 0x0002, 0x0000, 0x0116, 0x0003, 0x001f, 0x09b7, 0x09c4, 0x09cc, + 0x0002, 0x0000, 0x011e, 0x0003, 0x001f, 0x09db, 0x09e8, 0x09f0, + 0x0002, 0x0000, 0x0126, 0x0003, 0x001f, 0x09ff, 0x0a0c, 0x0a14, + 0x0002, 0x0000, 0x012e, 0x0003, 0x001f, 0x0a23, 0x0a30, 0x0a38, + 0x0004, 0x0000, 0x0000, 0x0000, 0x0138, 0x0001, 0x013a, 0x0003, + 0x0000, 0x0000, 0x013e, 0x008d, 0x001f, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 17F80 - 17FBF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 17FC0 - 17FFF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0a47, 0x0003, 0x0004, 0x02f4, 0x0731, 0x000b, 0x0010, + // Entry 18000 - 1803F + 0x0029, 0x0000, 0x0000, 0x0000, 0x0000, 0x0074, 0x009f, 0x02c2, + 0x0000, 0x02db, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, + 0x0003, 0x001f, 0x0024, 0x001a, 0x0001, 0x001c, 0x0001, 0x0017, + 0x01f7, 0x0001, 0x0021, 0x0001, 0x0017, 0x01f7, 0x0001, 0x0026, + 0x0001, 0x0017, 0x01f7, 0x000a, 0x0034, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0049, 0x0001, 0x0036, + 0x0003, 0x0000, 0x0000, 0x003a, 0x000d, 0x001f, 0xffff, 0x0a4b, + 0x0a57, 0x0a61, 0x0a6c, 0x0a77, 0x0a81, 0x0a8b, 0x0a98, 0x0aa5, + // Entry 18040 - 1807F + 0x0ab2, 0x0abe, 0x0ad3, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0050, 0x0001, 0x0052, 0x0003, 0x0056, 0x0000, 0x0065, + 0x000d, 0x001f, 0xffff, 0x0ae8, 0x0aed, 0x0af3, 0x0afa, 0x0b03, + 0x0b0b, 0x0b10, 0x0b17, 0x0b1e, 0x0b22, 0x0b27, 0x0b2c, 0x000d, + 0x001f, 0xffff, 0x0ae8, 0x0aed, 0x0af3, 0x0afa, 0x0b03, 0x0b0b, + 0x0b10, 0x0b17, 0x0b1e, 0x0b22, 0x0b27, 0x0b2c, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x007d, 0x0000, 0x008e, 0x0004, + 0x008b, 0x0085, 0x0082, 0x0088, 0x0001, 0x0014, 0x0904, 0x0001, + // Entry 18080 - 180BF + 0x0014, 0x035a, 0x0001, 0x0017, 0x0372, 0x0001, 0x001f, 0x0b31, + 0x0004, 0x009c, 0x0096, 0x0093, 0x0099, 0x0001, 0x001f, 0x0b3f, + 0x0001, 0x001f, 0x0b3f, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0008, 0x00a8, 0x010d, 0x0164, 0x0199, 0x026a, 0x028f, + 0x02a0, 0x02b1, 0x0002, 0x00ab, 0x00dc, 0x0003, 0x00af, 0x00be, + 0x00cd, 0x000d, 0x001f, 0xffff, 0x0b4f, 0x0b54, 0x0b5a, 0x0b61, + 0x0b65, 0x0b69, 0x0b6f, 0x0b75, 0x0b79, 0x0b7e, 0x068e, 0x0b82, + 0x000d, 0x0000, 0xffff, 0x1e5d, 0x1edb, 0x2357, 0x241f, 0x2357, + // Entry 180C0 - 180FF + 0x1e5d, 0x1e5d, 0x241f, 0x235b, 0x236a, 0x236c, 0x236e, 0x000d, + 0x001f, 0xffff, 0x0b87, 0x0b8f, 0x0b5a, 0x0b98, 0x0b65, 0x0b69, + 0x0b6f, 0x0b9f, 0x0ba6, 0x0bb0, 0x0bb9, 0x0bc2, 0x0003, 0x00e0, + 0x00ef, 0x00fe, 0x000d, 0x001f, 0xffff, 0x0b4f, 0x0b54, 0x0b5a, + 0x0b61, 0x0b65, 0x0b69, 0x0b6f, 0x0b75, 0x0b79, 0x0b7e, 0x068e, + 0x0b82, 0x000d, 0x0000, 0xffff, 0x1e5d, 0x1edb, 0x2357, 0x241f, + 0x2357, 0x1e5d, 0x1e5d, 0x241f, 0x235b, 0x236a, 0x236c, 0x236e, + 0x000d, 0x001f, 0xffff, 0x0b87, 0x0b8f, 0x0b5a, 0x0b98, 0x0b65, + // Entry 18100 - 1813F + 0x0b69, 0x0b6f, 0x0b9f, 0x0ba6, 0x0bb0, 0x0bb9, 0x0bc2, 0x0002, + 0x0110, 0x013a, 0x0005, 0x0116, 0x011f, 0x0131, 0x0000, 0x0128, + 0x0007, 0x0000, 0x21dd, 0x2146, 0x04dd, 0x214f, 0x236c, 0x2246, + 0x2296, 0x0007, 0x0000, 0x21dd, 0x2146, 0x04dd, 0x214f, 0x236c, + 0x2246, 0x2296, 0x0007, 0x0000, 0x21dd, 0x2146, 0x04dd, 0x214f, + 0x236c, 0x2246, 0x2296, 0x0007, 0x001f, 0x0bcc, 0x0bd7, 0x0be2, + 0x0bed, 0x0bf8, 0x0c03, 0x0c09, 0x0005, 0x0140, 0x0149, 0x015b, + 0x0000, 0x0152, 0x0007, 0x0000, 0x21dd, 0x2146, 0x04dd, 0x214f, + // Entry 18140 - 1817F + 0x236c, 0x2246, 0x2296, 0x0007, 0x0000, 0x21dd, 0x2146, 0x04dd, + 0x214f, 0x236c, 0x2246, 0x2296, 0x0007, 0x0000, 0x21dd, 0x2146, + 0x04dd, 0x214f, 0x236c, 0x2246, 0x2296, 0x0007, 0x001f, 0x0bcc, + 0x0bd7, 0x0be2, 0x0bed, 0x0bf8, 0x0c03, 0x0c09, 0x0002, 0x0167, + 0x0180, 0x0003, 0x016b, 0x0172, 0x0179, 0x0005, 0x0000, 0xffff, + 0x1f17, 0x1f1a, 0x1f1d, 0x1f20, 0x0005, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x0005, 0x0016, 0xffff, 0x0191, 0x019c, + 0x01a7, 0x01b2, 0x0003, 0x0184, 0x018b, 0x0192, 0x0005, 0x0000, + // Entry 18180 - 181BF + 0xffff, 0x1f17, 0x1f1a, 0x1f1d, 0x1f20, 0x0005, 0x000d, 0xffff, + 0x0140, 0x0143, 0x0146, 0x0149, 0x0005, 0x0016, 0xffff, 0x0191, + 0x019c, 0x01a7, 0x01b2, 0x0002, 0x019c, 0x0203, 0x0003, 0x01a0, + 0x01c1, 0x01e2, 0x0008, 0x01ac, 0x01b2, 0x01a9, 0x01b5, 0x01b8, + 0x01bb, 0x01be, 0x01af, 0x0001, 0x001f, 0x0c12, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x001f, 0x0c1c, 0x0001, 0x0000, 0x04f2, 0x0001, + 0x001f, 0x0c28, 0x0001, 0x001f, 0x0c31, 0x0001, 0x001f, 0x0c40, + 0x0001, 0x001f, 0x0c47, 0x0008, 0x01cd, 0x01d3, 0x01ca, 0x01d6, + // Entry 181C0 - 181FF + 0x01d9, 0x01dc, 0x01df, 0x01d0, 0x0001, 0x001f, 0x0c12, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x001f, 0x0c1c, 0x0001, 0x0000, 0x04f2, + 0x0001, 0x001f, 0x0c28, 0x0001, 0x001f, 0x0c31, 0x0001, 0x001f, + 0x0c40, 0x0001, 0x001f, 0x0c47, 0x0008, 0x01ee, 0x01f4, 0x01eb, + 0x01f7, 0x01fa, 0x01fd, 0x0200, 0x01f1, 0x0001, 0x001f, 0x0c12, + 0x0001, 0x0000, 0x04ef, 0x0001, 0x001f, 0x0c1c, 0x0001, 0x0000, + 0x04f2, 0x0001, 0x001f, 0x0c28, 0x0001, 0x001f, 0x0c31, 0x0001, + 0x001f, 0x0c40, 0x0001, 0x001f, 0x0c47, 0x0003, 0x0207, 0x0228, + // Entry 18200 - 1823F + 0x0249, 0x0008, 0x0213, 0x0219, 0x0210, 0x021c, 0x021f, 0x0222, + 0x0225, 0x0216, 0x0001, 0x001f, 0x0c4f, 0x0001, 0x0000, 0x04ef, + 0x0001, 0x001f, 0x0c58, 0x0001, 0x0000, 0x04f2, 0x0001, 0x001f, + 0x0c62, 0x0001, 0x001f, 0x0c69, 0x0001, 0x001f, 0x0c77, 0x0001, + 0x001f, 0x0c7d, 0x0008, 0x0234, 0x023a, 0x0231, 0x023d, 0x0240, + 0x0243, 0x0246, 0x0237, 0x0001, 0x001f, 0x0c4f, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x001f, 0x0c58, 0x0001, 0x0000, 0x04f2, 0x0001, + 0x001f, 0x0c62, 0x0001, 0x001f, 0x0c69, 0x0001, 0x001f, 0x0c77, + // Entry 18240 - 1827F + 0x0001, 0x001f, 0x0c7d, 0x0008, 0x0255, 0x025b, 0x0252, 0x025e, + 0x0261, 0x0264, 0x0267, 0x0258, 0x0001, 0x001f, 0x0c4f, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x001f, 0x0c58, 0x0001, 0x0000, 0x04f2, + 0x0001, 0x001f, 0x0c62, 0x0001, 0x001f, 0x0c69, 0x0001, 0x001f, + 0x0c77, 0x0001, 0x001f, 0x0c7d, 0x0003, 0x0279, 0x0284, 0x026e, + 0x0002, 0x0271, 0x0275, 0x0002, 0x001f, 0x0c82, 0x0ca6, 0x0002, + 0x001f, 0x0c90, 0x0cb7, 0x0002, 0x027c, 0x0280, 0x0002, 0x0016, + 0x0283, 0x255e, 0x0002, 0x001f, 0x0ccf, 0x0cd5, 0x0002, 0x0287, + // Entry 18280 - 182BF + 0x028b, 0x0002, 0x0016, 0x0283, 0x255e, 0x0002, 0x001f, 0x0ccf, + 0x0cd5, 0x0004, 0x029d, 0x0297, 0x0294, 0x029a, 0x0001, 0x0017, + 0x0528, 0x0001, 0x0014, 0x0792, 0x0001, 0x0016, 0x029f, 0x0001, + 0x0007, 0x02e9, 0x0004, 0x02ae, 0x02a8, 0x02a5, 0x02ab, 0x0001, + 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, + 0x0001, 0x0000, 0x0546, 0x0004, 0x02bf, 0x02b9, 0x02b6, 0x02bc, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0005, 0x0000, 0x0000, 0x0000, + // Entry 182C0 - 182FF + 0x0000, 0x02c8, 0x0003, 0x02d1, 0x02d6, 0x02cc, 0x0001, 0x02ce, + 0x0001, 0x0000, 0x04ef, 0x0001, 0x02d3, 0x0001, 0x0000, 0x04ef, + 0x0001, 0x02d8, 0x0001, 0x0000, 0x04ef, 0x0005, 0x0000, 0x0000, + 0x0000, 0x0000, 0x02e1, 0x0003, 0x02ea, 0x02ef, 0x02e5, 0x0001, + 0x02e7, 0x0001, 0x0000, 0x06c8, 0x0001, 0x02ec, 0x0001, 0x0000, + 0x06c8, 0x0001, 0x02f1, 0x0001, 0x0000, 0x06c8, 0x0042, 0x0337, + 0x033c, 0x0341, 0x0346, 0x035d, 0x036f, 0x0381, 0x0398, 0x03af, + 0x03c6, 0x03dd, 0x03ef, 0x0401, 0x041c, 0x0432, 0x0448, 0x044d, + // Entry 18300 - 1833F + 0x0452, 0x0457, 0x0470, 0x0482, 0x0494, 0x0499, 0x049e, 0x04a3, + 0x04a8, 0x04ad, 0x04b2, 0x04b7, 0x04bc, 0x04c1, 0x04d5, 0x04e9, + 0x04fd, 0x0511, 0x0525, 0x0539, 0x054d, 0x0561, 0x0575, 0x0589, + 0x059d, 0x05b1, 0x05c5, 0x05d9, 0x05ed, 0x0601, 0x0615, 0x0629, + 0x063d, 0x0651, 0x0665, 0x066a, 0x066f, 0x0674, 0x068a, 0x069c, + 0x06ae, 0x06c4, 0x06d6, 0x06e8, 0x06fe, 0x0710, 0x0722, 0x0727, + 0x072c, 0x0001, 0x0339, 0x0001, 0x001f, 0x0cdb, 0x0001, 0x033e, + 0x0001, 0x001f, 0x0cdb, 0x0001, 0x0343, 0x0001, 0x001f, 0x0cdb, + // Entry 18340 - 1837F + 0x0003, 0x034a, 0x034d, 0x0352, 0x0001, 0x001f, 0x0ce2, 0x0003, + 0x001f, 0x0ce8, 0x0cf6, 0x0d06, 0x0002, 0x0355, 0x0359, 0x0002, + 0x001f, 0x0d16, 0x0d16, 0x0002, 0x001f, 0x0d28, 0x0d28, 0x0003, + 0x0361, 0x0000, 0x0364, 0x0001, 0x0000, 0x1f9c, 0x0002, 0x0367, + 0x036b, 0x0002, 0x001f, 0x0d37, 0x0d37, 0x0002, 0x001f, 0x0d45, + 0x0d45, 0x0003, 0x0373, 0x0000, 0x0376, 0x0001, 0x0000, 0x1f9c, + 0x0002, 0x0379, 0x037d, 0x0002, 0x001f, 0x0d37, 0x0d37, 0x0002, + 0x001f, 0x0d45, 0x0d45, 0x0003, 0x0385, 0x0388, 0x038d, 0x0001, + // Entry 18380 - 183BF + 0x000d, 0x03c6, 0x0003, 0x001f, 0x0d50, 0x0d60, 0x0d72, 0x0002, + 0x0390, 0x0394, 0x0002, 0x001f, 0x0d84, 0x0d84, 0x0002, 0x001f, + 0x0d99, 0x0d99, 0x0003, 0x039c, 0x039f, 0x03a4, 0x0001, 0x001f, + 0x0dab, 0x0003, 0x001f, 0x0dae, 0x0db9, 0x0dc6, 0x0002, 0x03a7, + 0x03ab, 0x0002, 0x001f, 0x0dd3, 0x0dd3, 0x0002, 0x001f, 0x0de2, + 0x0de2, 0x0003, 0x03b3, 0x03b6, 0x03bb, 0x0001, 0x001f, 0x0dab, + 0x0003, 0x001f, 0x0dae, 0x0db9, 0x0dc6, 0x0002, 0x03be, 0x03c2, + 0x0002, 0x001f, 0x0dd3, 0x0dd3, 0x0002, 0x001f, 0x0de2, 0x0de2, + // Entry 183C0 - 183FF + 0x0003, 0x03ca, 0x03cd, 0x03d2, 0x0001, 0x001f, 0x0dee, 0x0003, + 0x001f, 0x0df2, 0x0dfe, 0x0e0c, 0x0002, 0x03d5, 0x03d9, 0x0002, + 0x001f, 0x0e1a, 0x0e1a, 0x0002, 0x001f, 0x0e2a, 0x0e2a, 0x0003, + 0x03e1, 0x0000, 0x03e4, 0x0001, 0x0000, 0x1ffe, 0x0002, 0x03e7, + 0x03eb, 0x0002, 0x001f, 0x0e1a, 0x0e1a, 0x0002, 0x001f, 0x0e2a, + 0x0e2a, 0x0003, 0x03f3, 0x0000, 0x03f6, 0x0001, 0x0000, 0x1ffe, + 0x0002, 0x03f9, 0x03fd, 0x0002, 0x001f, 0x0e37, 0x0e37, 0x0002, + 0x001f, 0x0e45, 0x0e45, 0x0004, 0x0406, 0x0409, 0x040e, 0x0419, + // Entry 18400 - 1843F + 0x0001, 0x001f, 0x0e50, 0x0003, 0x001f, 0x0e57, 0x0e66, 0x0e77, + 0x0002, 0x0411, 0x0415, 0x0002, 0x001f, 0x0e88, 0x0e88, 0x0002, + 0x001f, 0x0e9c, 0x0e9c, 0x0001, 0x001f, 0x0ead, 0x0004, 0x0421, + 0x0000, 0x0424, 0x042f, 0x0001, 0x001f, 0x0eb8, 0x0002, 0x0427, + 0x042b, 0x0002, 0x001f, 0x0ebd, 0x0ebd, 0x0002, 0x001f, 0x0ece, + 0x0ece, 0x0001, 0x001f, 0x0edc, 0x0004, 0x0437, 0x0000, 0x043a, + 0x0445, 0x0001, 0x001f, 0x0eb8, 0x0002, 0x043d, 0x0441, 0x0002, + 0x001f, 0x0ebd, 0x0ebd, 0x0002, 0x001f, 0x0ece, 0x0ece, 0x0001, + // Entry 18440 - 1847F + 0x001f, 0x0ead, 0x0001, 0x044a, 0x0001, 0x001f, 0x0ee5, 0x0001, + 0x044f, 0x0001, 0x001f, 0x0ef0, 0x0001, 0x0454, 0x0001, 0x001f, + 0x0ef0, 0x0003, 0x045b, 0x045e, 0x0465, 0x0001, 0x001f, 0x0ef9, + 0x0005, 0x001f, 0x0f08, 0x0f0d, 0x0f13, 0x0eff, 0x0f19, 0x0002, + 0x0468, 0x046c, 0x0002, 0x001f, 0x0f23, 0x0f23, 0x0002, 0x001f, + 0x0f36, 0x0f36, 0x0003, 0x0474, 0x0000, 0x0477, 0x0001, 0x0000, + 0x21e4, 0x0002, 0x047a, 0x047e, 0x0002, 0x001f, 0x0f46, 0x0f46, + 0x0002, 0x001f, 0x0f54, 0x0f54, 0x0003, 0x0486, 0x0000, 0x0489, + // Entry 18480 - 184BF + 0x0001, 0x0000, 0x21e4, 0x0002, 0x048c, 0x0490, 0x0002, 0x001f, + 0x0f46, 0x0f46, 0x0002, 0x001f, 0x0f54, 0x0f54, 0x0001, 0x0496, + 0x0001, 0x001f, 0x0f5f, 0x0001, 0x049b, 0x0001, 0x001f, 0x0f6b, + 0x0001, 0x04a0, 0x0001, 0x001f, 0x0f6b, 0x0001, 0x04a5, 0x0001, + 0x001f, 0x0f73, 0x0001, 0x04aa, 0x0001, 0x001f, 0x0f80, 0x0001, + 0x04af, 0x0001, 0x001f, 0x0f80, 0x0001, 0x04b4, 0x0001, 0x001f, + 0x0f8a, 0x0001, 0x04b9, 0x0001, 0x001f, 0x0f9b, 0x0001, 0x04be, + 0x0001, 0x001f, 0x0f9b, 0x0003, 0x0000, 0x04c5, 0x04ca, 0x0003, + // Entry 184C0 - 184FF + 0x001f, 0x0fa9, 0x0fbc, 0x0fd1, 0x0002, 0x04cd, 0x04d1, 0x0002, + 0x001f, 0x0fe6, 0x0fe6, 0x0002, 0x001f, 0x0ffe, 0x0ffe, 0x0003, + 0x0000, 0x04d9, 0x04de, 0x0003, 0x001f, 0x1013, 0x1022, 0x1033, + 0x0002, 0x04e1, 0x04e5, 0x0002, 0x001f, 0x1044, 0x1044, 0x0002, + 0x001f, 0x1044, 0x1057, 0x0003, 0x0000, 0x04ed, 0x04f2, 0x0003, + 0x001f, 0x1067, 0x1071, 0x107d, 0x0002, 0x04f5, 0x04f9, 0x0002, + 0x001f, 0x1089, 0x1089, 0x0002, 0x001f, 0x1097, 0x1097, 0x0003, + 0x0000, 0x0501, 0x0506, 0x0003, 0x001f, 0x10a2, 0x10b5, 0x10ca, + // Entry 18500 - 1853F + 0x0002, 0x0509, 0x050d, 0x0002, 0x001f, 0x10df, 0x10df, 0x0002, + 0x001f, 0x10f7, 0x10f7, 0x0003, 0x0000, 0x0515, 0x051a, 0x0003, + 0x001f, 0x110c, 0x111b, 0x112c, 0x0002, 0x051d, 0x0521, 0x0002, + 0x001f, 0x113d, 0x113d, 0x0002, 0x001f, 0x1150, 0x1150, 0x0003, + 0x0000, 0x0529, 0x052e, 0x0003, 0x001f, 0x1160, 0x116a, 0x1176, + 0x0002, 0x0531, 0x0535, 0x0002, 0x001f, 0x1182, 0x1182, 0x0002, + 0x001f, 0x1190, 0x1190, 0x0003, 0x0000, 0x053d, 0x0542, 0x0003, + 0x001f, 0x119b, 0x11ae, 0x11c3, 0x0002, 0x0545, 0x0549, 0x0002, + // Entry 18540 - 1857F + 0x001f, 0x11d8, 0x11d8, 0x0002, 0x001f, 0x11f0, 0x11f0, 0x0003, + 0x0000, 0x0551, 0x0556, 0x0003, 0x001f, 0x1205, 0x1214, 0x1225, + 0x0002, 0x0559, 0x055d, 0x0002, 0x001f, 0x1236, 0x1236, 0x0002, + 0x001f, 0x1249, 0x1249, 0x0003, 0x0000, 0x0565, 0x056a, 0x0003, + 0x001f, 0x1259, 0x1263, 0x126f, 0x0002, 0x056d, 0x0571, 0x0002, + 0x001f, 0x127b, 0x127b, 0x0002, 0x001f, 0x1289, 0x1289, 0x0003, + 0x0000, 0x0579, 0x057e, 0x0003, 0x001f, 0x1294, 0x12a7, 0x12bc, + 0x0002, 0x0581, 0x0585, 0x0002, 0x001f, 0x12d1, 0x12d1, 0x0002, + // Entry 18580 - 185BF + 0x001f, 0x12e9, 0x12e9, 0x0003, 0x0000, 0x058d, 0x0592, 0x0003, + 0x001f, 0x12fe, 0x130d, 0x131e, 0x0002, 0x0595, 0x0599, 0x0002, + 0x001f, 0x132f, 0x132f, 0x0002, 0x001f, 0x1342, 0x1342, 0x0003, + 0x0000, 0x05a1, 0x05a6, 0x0003, 0x001f, 0x1352, 0x135c, 0x1368, + 0x0002, 0x05a9, 0x05ad, 0x0002, 0x001f, 0x1374, 0x1374, 0x0002, + 0x001f, 0x1382, 0x1382, 0x0003, 0x0000, 0x05b5, 0x05ba, 0x0003, + 0x001f, 0x138d, 0x13a0, 0x13b5, 0x0002, 0x05bd, 0x05c1, 0x0002, + 0x001f, 0x13ca, 0x13ca, 0x0002, 0x001f, 0x13e2, 0x13e2, 0x0003, + // Entry 185C0 - 185FF + 0x0000, 0x05c9, 0x05ce, 0x0003, 0x001f, 0x13f7, 0x1406, 0x1417, + 0x0002, 0x05d1, 0x05d5, 0x0002, 0x001f, 0x1428, 0x1428, 0x0002, + 0x001f, 0x143b, 0x143b, 0x0003, 0x0000, 0x05dd, 0x05e2, 0x0003, + 0x001f, 0x144b, 0x1455, 0x1461, 0x0002, 0x05e5, 0x05e9, 0x0002, + 0x001f, 0x146d, 0x146d, 0x0002, 0x001f, 0x147b, 0x147b, 0x0003, + 0x0000, 0x05f1, 0x05f6, 0x0003, 0x001f, 0x1486, 0x1494, 0x14a4, + 0x0002, 0x05f9, 0x05fd, 0x0002, 0x001f, 0x14b4, 0x14b4, 0x0002, + 0x001f, 0x14c6, 0x14c6, 0x0003, 0x0000, 0x0605, 0x060a, 0x0003, + // Entry 18600 - 1863F + 0x001f, 0x1486, 0x1494, 0x14a4, 0x0002, 0x060d, 0x0611, 0x0002, + 0x001f, 0x14b4, 0x14b4, 0x0002, 0x001f, 0x14c6, 0x14c6, 0x0003, + 0x0000, 0x0619, 0x061e, 0x0003, 0x001f, 0x14d5, 0x14df, 0x14eb, + 0x0002, 0x0621, 0x0625, 0x0002, 0x001f, 0x14f7, 0x14f7, 0x0002, + 0x001f, 0x1505, 0x1505, 0x0003, 0x0000, 0x062d, 0x0632, 0x0003, + 0x001f, 0x1510, 0x1521, 0x1534, 0x0002, 0x0635, 0x0639, 0x0002, + 0x001f, 0x1547, 0x1547, 0x0002, 0x001f, 0x155d, 0x155d, 0x0003, + 0x0000, 0x0641, 0x0646, 0x0003, 0x001f, 0x1570, 0x157d, 0x158c, + // Entry 18640 - 1867F + 0x0002, 0x0649, 0x064d, 0x0002, 0x001f, 0x159b, 0x159b, 0x0002, + 0x001f, 0x15ac, 0x15ac, 0x0003, 0x0000, 0x0655, 0x065a, 0x0003, + 0x001f, 0x15ba, 0x15c4, 0x15d0, 0x0002, 0x065d, 0x0661, 0x0002, + 0x001f, 0x15dc, 0x15dc, 0x0002, 0x001f, 0x15ea, 0x15ea, 0x0001, + 0x0667, 0x0001, 0x001f, 0x15f5, 0x0001, 0x066c, 0x0001, 0x001f, + 0x15f5, 0x0001, 0x0671, 0x0001, 0x001f, 0x15f5, 0x0003, 0x0678, + 0x067b, 0x067f, 0x0001, 0x001f, 0x160a, 0x0002, 0x001f, 0xffff, + 0x160f, 0x0002, 0x0682, 0x0686, 0x0002, 0x001f, 0x1620, 0x1620, + // Entry 18680 - 186BF + 0x0002, 0x001f, 0x1632, 0x1632, 0x0003, 0x068e, 0x0000, 0x0691, + 0x0001, 0x0000, 0x2000, 0x0002, 0x0694, 0x0698, 0x0002, 0x001f, + 0x1641, 0x1641, 0x0002, 0x001f, 0x164f, 0x164f, 0x0003, 0x06a0, + 0x0000, 0x06a3, 0x0001, 0x0000, 0x2000, 0x0002, 0x06a6, 0x06aa, + 0x0002, 0x001f, 0x1641, 0x1641, 0x0002, 0x001f, 0x164f, 0x164f, + 0x0003, 0x06b2, 0x06b5, 0x06b9, 0x0001, 0x0010, 0x0bf7, 0x0002, + 0x001f, 0xffff, 0x165a, 0x0002, 0x06bc, 0x06c0, 0x0002, 0x001f, + 0x166c, 0x166c, 0x0002, 0x001f, 0x167f, 0x167f, 0x0003, 0x06c8, + // Entry 186C0 - 186FF + 0x0000, 0x06cb, 0x0001, 0x000b, 0x1250, 0x0002, 0x06ce, 0x06d2, + 0x0002, 0x001f, 0x168f, 0x168f, 0x0002, 0x001f, 0x169f, 0x169f, + 0x0003, 0x06da, 0x0000, 0x06dd, 0x0001, 0x000b, 0x1250, 0x0002, + 0x06e0, 0x06e4, 0x0002, 0x001f, 0x168f, 0x168f, 0x0002, 0x001f, + 0x169f, 0x169f, 0x0003, 0x06ec, 0x06ef, 0x06f3, 0x0001, 0x0016, + 0x0cec, 0x0002, 0x001f, 0xffff, 0x16ac, 0x0002, 0x06f6, 0x06fa, + 0x0002, 0x001f, 0x16b3, 0x16b3, 0x0002, 0x001f, 0x16c7, 0x16c7, + 0x0003, 0x0702, 0x0000, 0x0705, 0x0001, 0x001f, 0x16d8, 0x0002, + // Entry 18700 - 1873F + 0x0708, 0x070c, 0x0002, 0x001f, 0x16dc, 0x16dc, 0x0002, 0x001f, + 0x16ec, 0x16ec, 0x0003, 0x0714, 0x0000, 0x0717, 0x0001, 0x0000, + 0x2002, 0x0002, 0x071a, 0x071e, 0x0002, 0x001f, 0x16f9, 0x16f9, + 0x0002, 0x001f, 0x1707, 0x1707, 0x0001, 0x0724, 0x0001, 0x001f, + 0x1712, 0x0001, 0x0729, 0x0001, 0x001f, 0x171d, 0x0001, 0x072e, + 0x0001, 0x001f, 0x171d, 0x0004, 0x0736, 0x073b, 0x0740, 0x074f, + 0x0003, 0x001d, 0x0e69, 0x2175, 0x217d, 0x0003, 0x001f, 0x1725, + 0x172b, 0x1734, 0x0002, 0x0000, 0x0743, 0x0003, 0x0000, 0x074a, + // Entry 18740 - 1877F + 0x0747, 0x0001, 0x001f, 0x173d, 0x0003, 0x001f, 0xffff, 0x1757, + 0x1765, 0x0002, 0x0000, 0x0752, 0x0003, 0x0756, 0x0896, 0x07f6, + 0x009e, 0x001f, 0xffff, 0xffff, 0xffff, 0xffff, 0x17e5, 0x182d, + 0x188a, 0x18c0, 0x1902, 0x193b, 0x1989, 0x19ce, 0x1a01, 0x1a82, + 0x1ab2, 0x1ae8, 0x1b36, 0x1b69, 0x1b99, 0x1be1, 0x1c41, 0x1c86, + 0x1cd7, 0x1d1c, 0x1d52, 0xffff, 0xffff, 0x1da7, 0xffff, 0x1de8, + 0xffff, 0x1e50, 0x1e83, 0x1eb3, 0x1edd, 0xffff, 0xffff, 0x1f3d, + 0x1f70, 0x1fb7, 0xffff, 0xffff, 0xffff, 0x2016, 0xffff, 0x206b, + // Entry 18780 - 187BF + 0x20aa, 0xffff, 0x2104, 0x214c, 0x2197, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2224, 0xffff, 0xffff, 0x2277, 0x22bf, 0xffff, 0xffff, + 0x2349, 0x238e, 0x23c4, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2456, 0x2483, 0x24b6, 0x24e9, 0x2519, 0xffff, 0xffff, + 0x258b, 0xffff, 0x25c0, 0xffff, 0xffff, 0x2633, 0xffff, 0x26b3, + 0xffff, 0xffff, 0xffff, 0xffff, 0x272c, 0xffff, 0x2771, 0x27b3, + 0x2810, 0x284f, 0xffff, 0xffff, 0xffff, 0x289b, 0x28e0, 0x291c, + 0xffff, 0xffff, 0x297b, 0x29e3, 0x2a22, 0x2a4c, 0xffff, 0xffff, + // Entry 187C0 - 187FF + 0x2aa2, 0x2ad5, 0x2aff, 0xffff, 0x2b4a, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2c3b, 0x2c71, 0x2c9e, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2d36, 0xffff, 0xffff, 0x2d81, + 0xffff, 0x2db6, 0xffff, 0x2e06, 0x2e36, 0x2e72, 0xffff, 0x2eb0, + 0x2eef, 0xffff, 0xffff, 0xffff, 0x2f57, 0x2f8a, 0xffff, 0xffff, + 0x1772, 0x185a, 0x1a28, 0x1a52, 0xffff, 0xffff, 0x2675, 0x2be5, + 0x009e, 0x001f, 0x1799, 0x17a9, 0x17ba, 0x17ca, 0x17f9, 0x1838, + 0x1898, 0x18d2, 0x1911, 0x1951, 0x199c, 0x19db, 0x1a0a, 0x1a8e, + // Entry 18800 - 1883F + 0x1ac0, 0x1afe, 0x1b43, 0x1b75, 0x1bad, 0x1bfd, 0x1c54, 0x1c9d, + 0x1cea, 0x1d2a, 0x1d62, 0x1d8e, 0x1d9a, 0x1db5, 0x1ddd, 0x1dfc, + 0x1e3a, 0x1e5d, 0x1e8f, 0x1ebd, 0x1eee, 0x1f1c, 0x1f2c, 0x1f4a, + 0x1f81, 0x1fc1, 0x1fe1, 0x1fec, 0x2007, 0x202a, 0x205e, 0x207c, + 0x20ba, 0x20e6, 0x2118, 0x2161, 0x21a2, 0x21c4, 0x21db, 0x2206, + 0x2215, 0x2230, 0x2254, 0x2268, 0x228b, 0x22d7, 0x2325, 0x233e, + 0x235c, 0x239c, 0x23ce, 0x23ee, 0x23f8, 0x240a, 0x2418, 0x242c, + 0x243f, 0x2461, 0x2490, 0x24c3, 0x24f5, 0x2537, 0x2561, 0x2574, + // Entry 18840 - 1887F + 0x2595, 0x25b5, 0x25d1, 0x25ff, 0x261f, 0x2645, 0x269f, 0x26c0, + 0x26e6, 0x26f9, 0x2706, 0x2717, 0x273b, 0x2765, 0x2783, 0x27ce, + 0x2821, 0x285a, 0x287c, 0x2886, 0x2890, 0x28ae, 0x28f0, 0x292e, + 0x295e, 0x2967, 0x2993, 0x29f4, 0x2a2c, 0x2a5a, 0x2a82, 0x2a8c, + 0x2aaf, 0x2adf, 0x2b0d, 0x2b35, 0x2b6c, 0x2bbc, 0x2bca, 0x2bd6, + 0x2c21, 0x2c2f, 0x2c49, 0x2c7c, 0x2ca8, 0x2cc8, 0x2cd6, 0x2cec, + 0x2d01, 0x2d14, 0x2d21, 0x2d2b, 0x2d41, 0x2d63, 0x2d75, 0x2d8b, + 0x2dab, 0x2dc9, 0x2dfb, 0x2e12, 0x2e46, 0x2e7e, 0x2ea2, 0x2ec1, + // Entry 18880 - 188BF + 0x2efe, 0x2f28, 0x2f34, 0x2f41, 0x2f64, 0x2f9d, 0x2313, 0x29cf, + 0x177b, 0x1866, 0x1a32, 0x1a5e, 0x1e30, 0x2611, 0x267f, 0x2bf5, + 0x009e, 0x001f, 0xffff, 0xffff, 0xffff, 0xffff, 0x1815, 0x184b, + 0x18ae, 0x18ec, 0x1928, 0x196f, 0x19b7, 0x19f0, 0x1a1b, 0x1aa2, + 0x1ad6, 0x1b1c, 0x1b58, 0x1b89, 0x1bc9, 0x1c21, 0x1c6f, 0x1cbc, + 0x1d05, 0x1d40, 0x1d7a, 0xffff, 0xffff, 0x1dcb, 0xffff, 0x1e18, + 0xffff, 0x1e72, 0x1ea3, 0x1ecf, 0x1f07, 0xffff, 0xffff, 0x1f5f, + 0x1f9a, 0x1fd3, 0xffff, 0xffff, 0xffff, 0x2046, 0xffff, 0x2095, + // Entry 188C0 - 188FF + 0x20d2, 0xffff, 0x2134, 0x217e, 0x21b5, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2244, 0xffff, 0xffff, 0x22a7, 0x22f7, 0xffff, 0xffff, + 0x2377, 0x23b2, 0x23e0, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2474, 0x24a5, 0x24d8, 0x2509, 0x254e, 0xffff, 0xffff, + 0x25a7, 0xffff, 0x25ea, 0xffff, 0xffff, 0x265f, 0xffff, 0x26d5, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2752, 0xffff, 0x279d, 0x27f1, + 0x283a, 0x286d, 0xffff, 0xffff, 0xffff, 0x28c9, 0x2908, 0x2948, + 0xffff, 0xffff, 0x29b3, 0x2a0d, 0x2a3e, 0x2a70, 0xffff, 0xffff, + // Entry 18900 - 1893F + 0x2ac4, 0x2af1, 0x2b23, 0xffff, 0x2b96, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2c5f, 0x2c8f, 0x2cba, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2d54, 0xffff, 0xffff, 0x2d9d, + 0xffff, 0x2de4, 0xffff, 0x2e26, 0x2e5e, 0x2e92, 0xffff, 0x2eda, + 0x2f15, 0xffff, 0xffff, 0xffff, 0x2f79, 0x2fb8, 0xffff, 0xffff, + 0x178c, 0x187a, 0x1a44, 0x1a72, 0xffff, 0xffff, 0x2691, 0x2c0d, + 0x0003, 0x0004, 0x0293, 0x06d0, 0x0012, 0x0017, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0024, 0x004f, 0x0000, 0x0000, 0x0000, + // Entry 18940 - 1897F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0285, 0x0005, + 0x0000, 0x0000, 0x0000, 0x0000, 0x001d, 0x0001, 0x001f, 0x0001, + 0x0021, 0x0001, 0x0020, 0x0000, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x002d, 0x0000, 0x003e, 0x0004, 0x003b, 0x0035, + 0x0032, 0x0038, 0x0001, 0x0020, 0x0003, 0x0001, 0x0020, 0x0027, + 0x0001, 0x0020, 0x0045, 0x0001, 0x0000, 0x04af, 0x0004, 0x004c, + 0x0046, 0x0043, 0x0049, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, + // Entry 18980 - 189BF + 0x0058, 0x00bd, 0x0114, 0x0149, 0x0238, 0x0252, 0x0263, 0x0274, + 0x0002, 0x005b, 0x008c, 0x0003, 0x005f, 0x006e, 0x007d, 0x000d, + 0x0020, 0xffff, 0x0061, 0x0066, 0x006b, 0x0070, 0x0075, 0x007a, + 0x007f, 0x0084, 0x0089, 0x008e, 0x0093, 0x0098, 0x000d, 0x0000, + 0xffff, 0x2368, 0x236a, 0x2357, 0x241f, 0x2357, 0x2146, 0x2368, + 0x241f, 0x204d, 0x2368, 0x241f, 0x241f, 0x000d, 0x0020, 0xffff, + 0x009d, 0x00a7, 0x00af, 0x00b7, 0x00bf, 0x00c7, 0x00ce, 0x00d6, + 0x00de, 0x00e5, 0x00eb, 0x00f2, 0x0003, 0x0090, 0x009f, 0x00ae, + // Entry 189C0 - 189FF + 0x000d, 0x0020, 0xffff, 0x0061, 0x0066, 0x006b, 0x0070, 0x0075, + 0x007a, 0x007f, 0x0084, 0x0089, 0x008e, 0x0093, 0x0098, 0x000d, + 0x0000, 0xffff, 0x2368, 0x236a, 0x2357, 0x241f, 0x2357, 0x2146, + 0x2368, 0x241f, 0x204d, 0x2368, 0x241f, 0x241f, 0x000d, 0x0020, + 0xffff, 0x009d, 0x00fa, 0x0102, 0x010a, 0x0112, 0x011a, 0x0121, + 0x0129, 0x0131, 0x0138, 0x013e, 0x0145, 0x0002, 0x00c0, 0x00ea, + 0x0005, 0x00c6, 0x00cf, 0x00e1, 0x0000, 0x00d8, 0x0007, 0x0020, + 0x014d, 0x0151, 0x0155, 0x0159, 0x015d, 0x0161, 0x0165, 0x0007, + // Entry 18A00 - 18A3F + 0x0000, 0x204d, 0x241f, 0x241f, 0x241f, 0x236a, 0x236a, 0x2296, + 0x0007, 0x0020, 0x014d, 0x0151, 0x0155, 0x0159, 0x015d, 0x0161, + 0x0165, 0x0007, 0x0020, 0x0169, 0x0171, 0x017c, 0x0186, 0x0191, + 0x019a, 0x01a3, 0x0005, 0x00f0, 0x00f9, 0x010b, 0x0000, 0x0102, + 0x0007, 0x0020, 0x014d, 0x0151, 0x0155, 0x0159, 0x015d, 0x0161, + 0x0165, 0x0007, 0x0000, 0x204d, 0x241f, 0x241f, 0x241f, 0x236a, + 0x236a, 0x2296, 0x0007, 0x0020, 0x014d, 0x0151, 0x0155, 0x0159, + 0x015d, 0x0161, 0x0165, 0x0007, 0x0020, 0x01ad, 0x01b5, 0x01c0, + // Entry 18A40 - 18A7F + 0x01ca, 0x01d5, 0x01de, 0x01e7, 0x0002, 0x0117, 0x0130, 0x0003, + 0x011b, 0x0122, 0x0129, 0x0005, 0x0020, 0xffff, 0x01f1, 0x01f5, + 0x01f9, 0x01fd, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x0005, 0x0020, 0xffff, 0x0201, 0x0210, 0x021f, 0x022e, + 0x0003, 0x0134, 0x013b, 0x0142, 0x0005, 0x0020, 0xffff, 0x01f1, + 0x01f5, 0x01f9, 0x01fd, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x0005, 0x0020, 0xffff, 0x0201, 0x0210, 0x021f, + 0x022e, 0x0002, 0x014c, 0x01c2, 0x0003, 0x0150, 0x0176, 0x019c, + // Entry 18A80 - 18ABF + 0x000a, 0x015e, 0x0161, 0x015b, 0x0164, 0x016a, 0x0170, 0x0173, + 0x0000, 0x0167, 0x016d, 0x0001, 0x0020, 0x023d, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0001, 0x0020, 0x0246, 0x0001, + 0x0020, 0x024f, 0x0001, 0x0020, 0x0257, 0x0001, 0x0020, 0x025f, + 0x0001, 0x0020, 0x0267, 0x0001, 0x0020, 0x026f, 0x000a, 0x0184, + 0x0187, 0x0181, 0x018a, 0x0190, 0x0196, 0x0199, 0x0000, 0x018d, + 0x0193, 0x0001, 0x0020, 0x023d, 0x0001, 0x0000, 0x200e, 0x0001, + 0x0000, 0x1f9c, 0x0001, 0x0020, 0x0246, 0x0001, 0x0020, 0x024f, + // Entry 18AC0 - 18AFF + 0x0001, 0x0020, 0x0257, 0x0001, 0x0020, 0x025f, 0x0001, 0x0020, + 0x0267, 0x0001, 0x0020, 0x026f, 0x000a, 0x01aa, 0x01ad, 0x01a7, + 0x01b0, 0x01b6, 0x01bc, 0x01bf, 0x0000, 0x01b3, 0x01b9, 0x0001, + 0x0020, 0x023d, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, + 0x0001, 0x0020, 0x0276, 0x0001, 0x0020, 0x024f, 0x0001, 0x0020, + 0x0281, 0x0001, 0x0020, 0x028b, 0x0001, 0x0020, 0x0298, 0x0001, + 0x0020, 0x026f, 0x0003, 0x01c6, 0x01ec, 0x0212, 0x000a, 0x01d4, + 0x01d7, 0x01d1, 0x01da, 0x01e0, 0x01e6, 0x01e9, 0x0000, 0x01dd, + // Entry 18B00 - 18B3F + 0x01e3, 0x0001, 0x0020, 0x023d, 0x0001, 0x0000, 0x04ef, 0x0001, + 0x0000, 0x04f2, 0x0001, 0x0020, 0x02a2, 0x0001, 0x0020, 0x02a8, + 0x0001, 0x0020, 0x0257, 0x0001, 0x0020, 0x025f, 0x0001, 0x0020, + 0x0267, 0x0001, 0x0020, 0x02ae, 0x000a, 0x01fa, 0x01fd, 0x01f7, + 0x0200, 0x0206, 0x020c, 0x020f, 0x0000, 0x0203, 0x0209, 0x0001, + 0x0020, 0x023d, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, + 0x0001, 0x0020, 0x0246, 0x0001, 0x0020, 0x02a8, 0x0001, 0x0020, + 0x0257, 0x0001, 0x0020, 0x025f, 0x0001, 0x0020, 0x0267, 0x0001, + // Entry 18B40 - 18B7F + 0x0020, 0x02ae, 0x000a, 0x0220, 0x0223, 0x021d, 0x0226, 0x022c, + 0x0232, 0x0235, 0x0000, 0x0229, 0x022f, 0x0001, 0x0020, 0x023d, + 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0001, 0x0020, + 0x02b3, 0x0001, 0x0020, 0x02a8, 0x0001, 0x0020, 0x02bd, 0x0001, + 0x0020, 0x02c6, 0x0001, 0x0020, 0x02d2, 0x0001, 0x0020, 0x02ae, + 0x0003, 0x0247, 0x0000, 0x023c, 0x0002, 0x023f, 0x0243, 0x0002, + 0x0020, 0x02db, 0x02f6, 0x0002, 0x0020, 0x02e0, 0x0305, 0x0002, + 0x024a, 0x024e, 0x0002, 0x0020, 0x02db, 0x0316, 0x0002, 0x0020, + // Entry 18B80 - 18BBF + 0x030f, 0x031b, 0x0004, 0x0260, 0x025a, 0x0257, 0x025d, 0x0001, + 0x0020, 0x0320, 0x0001, 0x0020, 0x0342, 0x0001, 0x0000, 0x0514, + 0x0001, 0x0020, 0x035e, 0x0004, 0x0271, 0x026b, 0x0268, 0x026e, + 0x0001, 0x0020, 0x0365, 0x0001, 0x0020, 0x0375, 0x0001, 0x0000, + 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, 0x0282, 0x027c, 0x0279, + 0x027f, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0005, 0x0000, 0x0000, + 0x0000, 0x0000, 0x028b, 0x0001, 0x028d, 0x0001, 0x028f, 0x0002, + // Entry 18BC0 - 18BFF + 0x0020, 0x0382, 0x0392, 0x0042, 0x02d6, 0x02db, 0x02e0, 0x02e5, + 0x02fc, 0x0313, 0x032a, 0x0341, 0x0353, 0x0365, 0x037c, 0x038e, + 0x03a0, 0x03bb, 0x03d1, 0x03e7, 0x03ec, 0x03f1, 0x03f6, 0x040f, + 0x0421, 0x0433, 0x0438, 0x043d, 0x0442, 0x0447, 0x044c, 0x0451, + 0x0456, 0x045b, 0x0460, 0x0474, 0x0488, 0x049c, 0x04b0, 0x04c4, + 0x04d8, 0x04ec, 0x0500, 0x0514, 0x0528, 0x053c, 0x0550, 0x0564, + 0x0578, 0x058c, 0x05a0, 0x05b4, 0x05c8, 0x05dc, 0x05f0, 0x0604, + 0x0609, 0x060e, 0x0613, 0x0629, 0x063b, 0x064d, 0x0663, 0x0675, + // Entry 18C00 - 18C3F + 0x0687, 0x069d, 0x06af, 0x06c1, 0x06c6, 0x06cb, 0x0001, 0x02d8, + 0x0001, 0x0020, 0x0399, 0x0001, 0x02dd, 0x0001, 0x0020, 0x0399, + 0x0001, 0x02e2, 0x0001, 0x0020, 0x0399, 0x0003, 0x02e9, 0x02ec, + 0x02f1, 0x0001, 0x0020, 0x039e, 0x0003, 0x0020, 0x03a4, 0x03a8, + 0x03af, 0x0002, 0x02f4, 0x02f8, 0x0002, 0x0020, 0x03bf, 0x03bf, + 0x0002, 0x0020, 0x03ce, 0x03ce, 0x0003, 0x0300, 0x0303, 0x0308, + 0x0001, 0x0020, 0x039e, 0x0003, 0x0020, 0x03dd, 0x03a8, 0x03eb, + 0x0002, 0x030b, 0x030f, 0x0002, 0x0020, 0x03bf, 0x03bf, 0x0002, + // Entry 18C40 - 18C7F + 0x0020, 0x03ce, 0x03ce, 0x0003, 0x0317, 0x031a, 0x031f, 0x0001, + 0x0020, 0x039e, 0x0003, 0x0020, 0x03dd, 0x03a8, 0x03eb, 0x0002, + 0x0322, 0x0326, 0x0002, 0x0020, 0x03bf, 0x03bf, 0x0002, 0x0020, + 0x03ce, 0x03ce, 0x0003, 0x032e, 0x0331, 0x0336, 0x0001, 0x0020, + 0x03fa, 0x0003, 0x0020, 0x0406, 0x041a, 0x0429, 0x0002, 0x0339, + 0x033d, 0x0002, 0x0020, 0x043e, 0x043e, 0x0002, 0x0020, 0x0453, + 0x0453, 0x0003, 0x0345, 0x0000, 0x0348, 0x0001, 0x0020, 0x0468, + 0x0002, 0x034b, 0x034f, 0x0002, 0x0020, 0x043e, 0x043e, 0x0002, + // Entry 18C80 - 18CBF + 0x0020, 0x0453, 0x0453, 0x0003, 0x0357, 0x0000, 0x035a, 0x0001, + 0x0020, 0x0468, 0x0002, 0x035d, 0x0361, 0x0002, 0x0020, 0x043e, + 0x043e, 0x0002, 0x0020, 0x0453, 0x0453, 0x0003, 0x0369, 0x036c, + 0x0371, 0x0001, 0x0020, 0x0471, 0x0003, 0x0020, 0x047b, 0x048e, + 0x049f, 0x0002, 0x0374, 0x0378, 0x0002, 0x0020, 0x04b3, 0x04b3, + 0x0002, 0x0020, 0x04c6, 0x04c6, 0x0003, 0x0380, 0x0000, 0x0383, + 0x0001, 0x0020, 0x04d9, 0x0002, 0x0386, 0x038a, 0x0002, 0x0020, + 0x04b3, 0x04b3, 0x0002, 0x0020, 0x04c6, 0x04c6, 0x0003, 0x0392, + // Entry 18CC0 - 18CFF + 0x0000, 0x0395, 0x0001, 0x0020, 0x04d9, 0x0002, 0x0398, 0x039c, + 0x0002, 0x0020, 0x04b3, 0x04b3, 0x0002, 0x0020, 0x04c6, 0x04c6, + 0x0004, 0x03a5, 0x03a8, 0x03ad, 0x03b8, 0x0001, 0x0020, 0x04de, + 0x0003, 0x0020, 0x04e4, 0x04f3, 0x0500, 0x0002, 0x03b0, 0x03b4, + 0x0002, 0x0020, 0x0510, 0x0510, 0x0002, 0x0020, 0x051f, 0x051f, + 0x0001, 0x0020, 0x052e, 0x0004, 0x03c0, 0x0000, 0x03c3, 0x03ce, + 0x0001, 0x0020, 0x0538, 0x0002, 0x03c6, 0x03ca, 0x0002, 0x0020, + 0x0510, 0x0510, 0x0002, 0x0020, 0x051f, 0x051f, 0x0001, 0x0020, + // Entry 18D00 - 18D3F + 0x052e, 0x0004, 0x03d6, 0x0000, 0x03d9, 0x03e4, 0x0001, 0x0020, + 0x0538, 0x0002, 0x03dc, 0x03e0, 0x0002, 0x0020, 0x0510, 0x0510, + 0x0002, 0x0020, 0x051f, 0x051f, 0x0001, 0x0020, 0x052e, 0x0001, + 0x03e9, 0x0001, 0x0020, 0x053d, 0x0001, 0x03ee, 0x0001, 0x0020, + 0x053d, 0x0001, 0x03f3, 0x0001, 0x0020, 0x053d, 0x0003, 0x03fa, + 0x03fd, 0x0404, 0x0001, 0x0020, 0x054d, 0x0005, 0x0020, 0x055d, + 0x0562, 0x0567, 0x0553, 0x056d, 0x0002, 0x0407, 0x040b, 0x0002, + 0x0020, 0x0572, 0x0572, 0x0002, 0x0020, 0x0581, 0x0581, 0x0003, + // Entry 18D40 - 18D7F + 0x0413, 0x0000, 0x0416, 0x0001, 0x0020, 0x0590, 0x0002, 0x0419, + 0x041d, 0x0002, 0x0020, 0x0572, 0x0572, 0x0002, 0x0020, 0x0581, + 0x0581, 0x0003, 0x0425, 0x0000, 0x0428, 0x0001, 0x0020, 0x0590, + 0x0002, 0x042b, 0x042f, 0x0002, 0x0020, 0x0572, 0x0572, 0x0002, + 0x0020, 0x0581, 0x0581, 0x0001, 0x0435, 0x0001, 0x0020, 0x0594, + 0x0001, 0x043a, 0x0001, 0x0020, 0x0594, 0x0001, 0x043f, 0x0001, + 0x0020, 0x0594, 0x0001, 0x0444, 0x0001, 0x0020, 0x05a4, 0x0001, + 0x0449, 0x0001, 0x0020, 0x05a4, 0x0001, 0x044e, 0x0001, 0x0020, + // Entry 18D80 - 18DBF + 0x05a4, 0x0001, 0x0453, 0x0001, 0x0020, 0x05ad, 0x0001, 0x0458, + 0x0001, 0x0020, 0x05ad, 0x0001, 0x045d, 0x0001, 0x0020, 0x05ad, + 0x0003, 0x0000, 0x0464, 0x0469, 0x0003, 0x0020, 0x05c0, 0x05d1, + 0x05e0, 0x0002, 0x046c, 0x0470, 0x0002, 0x0020, 0x05f2, 0x05f2, + 0x0002, 0x0020, 0x0603, 0x0603, 0x0003, 0x0000, 0x0478, 0x047d, + 0x0003, 0x0020, 0x0614, 0x0620, 0x062c, 0x0002, 0x0480, 0x0484, + 0x0002, 0x0020, 0x05f2, 0x05f2, 0x0002, 0x0020, 0x0603, 0x0603, + 0x0003, 0x0000, 0x048c, 0x0491, 0x0003, 0x0020, 0x0614, 0x0620, + // Entry 18DC0 - 18DFF + 0x062c, 0x0002, 0x0494, 0x0498, 0x0002, 0x0020, 0x05f2, 0x05f2, + 0x0002, 0x0020, 0x0603, 0x0603, 0x0003, 0x0000, 0x04a0, 0x04a5, + 0x0003, 0x0020, 0x0639, 0x064e, 0x0660, 0x0002, 0x04a8, 0x04ac, + 0x0002, 0x0020, 0x0676, 0x0676, 0x0002, 0x0020, 0x068a, 0x068a, + 0x0003, 0x0000, 0x04b4, 0x04b9, 0x0003, 0x0020, 0x069e, 0x06aa, + 0x06b6, 0x0002, 0x04bc, 0x04c0, 0x0002, 0x0020, 0x0676, 0x0676, + 0x0002, 0x0020, 0x068a, 0x068a, 0x0003, 0x0000, 0x04c8, 0x04cd, + 0x0003, 0x0020, 0x069e, 0x06aa, 0x06b6, 0x0002, 0x04d0, 0x04d4, + // Entry 18E00 - 18E3F + 0x0002, 0x0020, 0x06c3, 0x06c3, 0x0002, 0x0020, 0x06d1, 0x06d1, + 0x0003, 0x0000, 0x04dc, 0x04e1, 0x0003, 0x0020, 0x06df, 0x06f2, + 0x0703, 0x0002, 0x04e4, 0x04e8, 0x0002, 0x0020, 0x0717, 0x0717, + 0x0002, 0x0020, 0x072a, 0x072a, 0x0003, 0x0000, 0x04f0, 0x04f5, + 0x0003, 0x0020, 0x073d, 0x0749, 0x0755, 0x0002, 0x04f8, 0x04fc, + 0x0002, 0x0020, 0x0717, 0x0717, 0x0002, 0x0020, 0x072a, 0x072a, + 0x0003, 0x0000, 0x0504, 0x0509, 0x0003, 0x0020, 0x073d, 0x0749, + 0x0755, 0x0002, 0x050c, 0x0510, 0x0002, 0x0020, 0x0762, 0x0762, + // Entry 18E40 - 18E7F + 0x0002, 0x0020, 0x0770, 0x0770, 0x0003, 0x0000, 0x0518, 0x051d, + 0x0003, 0x0020, 0x077e, 0x0793, 0x07a5, 0x0002, 0x0520, 0x0524, + 0x0002, 0x0020, 0x07bb, 0x07bb, 0x0002, 0x0020, 0x07cf, 0x07cf, + 0x0003, 0x0000, 0x052c, 0x0531, 0x0003, 0x0020, 0x07e3, 0x07ef, + 0x07fb, 0x0002, 0x0534, 0x0538, 0x0002, 0x0020, 0x07bb, 0x07bb, + 0x0002, 0x0020, 0x07cf, 0x07cf, 0x0003, 0x0000, 0x0540, 0x0545, + 0x0003, 0x0020, 0x07e3, 0x07ef, 0x07fb, 0x0002, 0x0548, 0x054c, + 0x0002, 0x0020, 0x07bb, 0x07bb, 0x0002, 0x0020, 0x07cf, 0x07cf, + // Entry 18E80 - 18EBF + 0x0003, 0x0000, 0x0554, 0x0559, 0x0003, 0x0020, 0x0808, 0x081b, + 0x082b, 0x0002, 0x055c, 0x0560, 0x0002, 0x0020, 0x083f, 0x083f, + 0x0002, 0x0020, 0x0851, 0x0851, 0x0003, 0x0000, 0x0568, 0x056d, + 0x0003, 0x0020, 0x0863, 0x086f, 0x087b, 0x0002, 0x0570, 0x0574, + 0x0002, 0x0020, 0x083f, 0x083f, 0x0002, 0x0020, 0x0851, 0x0851, + 0x0003, 0x0000, 0x057c, 0x0581, 0x0003, 0x0020, 0x0863, 0x086f, + 0x087b, 0x0002, 0x0584, 0x0588, 0x0002, 0x0020, 0x083f, 0x083f, + 0x0002, 0x0020, 0x0851, 0x0851, 0x0003, 0x0000, 0x0590, 0x0595, + // Entry 18EC0 - 18EFF + 0x0003, 0x0020, 0x0888, 0x089b, 0x08ab, 0x0002, 0x0598, 0x059c, + 0x0002, 0x0020, 0x08bf, 0x08bf, 0x0002, 0x0020, 0x08d1, 0x08d1, + 0x0003, 0x0000, 0x05a4, 0x05a9, 0x0003, 0x0020, 0x08e3, 0x08ef, + 0x08fb, 0x0002, 0x05ac, 0x05b0, 0x0002, 0x0020, 0x08bf, 0x08bf, + 0x0002, 0x0020, 0x08d1, 0x08d1, 0x0003, 0x0000, 0x05b8, 0x05bd, + 0x0003, 0x0020, 0x08e3, 0x08ef, 0x08fb, 0x0002, 0x05c0, 0x05c4, + 0x0002, 0x0020, 0x08bf, 0x08bf, 0x0002, 0x0020, 0x08d1, 0x08d1, + 0x0003, 0x0000, 0x05cc, 0x05d1, 0x0003, 0x0020, 0x0908, 0x091c, + // Entry 18F00 - 18F3F + 0x092d, 0x0002, 0x05d4, 0x05d8, 0x0002, 0x0020, 0x0942, 0x0942, + 0x0002, 0x0020, 0x0955, 0x0955, 0x0003, 0x0000, 0x05e0, 0x05e5, + 0x0003, 0x0020, 0x0968, 0x0974, 0x0980, 0x0002, 0x05e8, 0x05ec, + 0x0002, 0x0020, 0x0942, 0x0942, 0x0002, 0x0020, 0x0955, 0x0955, + 0x0003, 0x0000, 0x05f4, 0x05f9, 0x0003, 0x0020, 0x0968, 0x0974, + 0x0980, 0x0002, 0x05fc, 0x0600, 0x0002, 0x0020, 0x0942, 0x0942, + 0x0002, 0x0020, 0x0955, 0x0955, 0x0001, 0x0606, 0x0001, 0x0007, + 0x0892, 0x0001, 0x060b, 0x0001, 0x0007, 0x0892, 0x0001, 0x0610, + // Entry 18F40 - 18F7F + 0x0001, 0x0007, 0x0892, 0x0003, 0x0617, 0x061a, 0x061e, 0x0001, + 0x0020, 0x098d, 0x0002, 0x0020, 0xffff, 0x0993, 0x0002, 0x0621, + 0x0625, 0x0002, 0x0020, 0x09a0, 0x09a0, 0x0002, 0x0020, 0x09af, + 0x09af, 0x0003, 0x062d, 0x0000, 0x0630, 0x0001, 0x0000, 0x213b, + 0x0002, 0x0633, 0x0637, 0x0002, 0x0020, 0x09a0, 0x09a0, 0x0002, + 0x0020, 0x09af, 0x09af, 0x0003, 0x063f, 0x0000, 0x0642, 0x0001, + 0x0000, 0x213b, 0x0002, 0x0645, 0x0649, 0x0002, 0x0020, 0x09a0, + 0x09a0, 0x0002, 0x0020, 0x09af, 0x09af, 0x0003, 0x0651, 0x0654, + // Entry 18F80 - 18FBF + 0x0658, 0x0001, 0x0020, 0x09be, 0x0002, 0x0020, 0xffff, 0x09c6, + 0x0002, 0x065b, 0x065f, 0x0002, 0x0020, 0x09d5, 0x09d5, 0x0002, + 0x0020, 0x09e6, 0x09e6, 0x0003, 0x0667, 0x0000, 0x066a, 0x0001, + 0x000b, 0x1250, 0x0002, 0x066d, 0x0671, 0x0002, 0x0020, 0x09d5, + 0x09d5, 0x0002, 0x0020, 0x09e6, 0x09e6, 0x0003, 0x0679, 0x0000, + 0x067c, 0x0001, 0x000b, 0x1250, 0x0002, 0x067f, 0x0683, 0x0002, + 0x0020, 0x09d5, 0x09d5, 0x0002, 0x0020, 0x09e6, 0x09e6, 0x0003, + 0x068b, 0x068e, 0x0692, 0x0001, 0x0020, 0x09f7, 0x0002, 0x0020, + // Entry 18FC0 - 18FFF + 0xffff, 0x0a00, 0x0002, 0x0695, 0x0699, 0x0002, 0x0020, 0x0a06, + 0x0a06, 0x0002, 0x0020, 0x0a18, 0x0a18, 0x0003, 0x06a1, 0x0000, + 0x06a4, 0x0001, 0x0000, 0x2002, 0x0002, 0x06a7, 0x06ab, 0x0002, + 0x0020, 0x0a06, 0x0a06, 0x0002, 0x0020, 0x0a18, 0x0a18, 0x0003, + 0x06b3, 0x0000, 0x06b6, 0x0001, 0x0000, 0x2002, 0x0002, 0x06b9, + 0x06bd, 0x0002, 0x0020, 0x0a06, 0x0a06, 0x0002, 0x0020, 0x0a18, + 0x0a18, 0x0001, 0x06c3, 0x0001, 0x0020, 0x0a2a, 0x0001, 0x06c8, + 0x0001, 0x0020, 0x0a2a, 0x0001, 0x06cd, 0x0001, 0x0020, 0x0a2a, + // Entry 19000 - 1903F + 0x0004, 0x06d5, 0x06da, 0x06df, 0x06ee, 0x0003, 0x0000, 0x1dc7, + 0x234c, 0x245b, 0x0003, 0x0020, 0x0a34, 0x0a45, 0x0a57, 0x0002, + 0x0000, 0x06e2, 0x0003, 0x0000, 0x06e9, 0x06e6, 0x0001, 0x0020, + 0x0a70, 0x0003, 0x0020, 0xffff, 0x0a8c, 0x0aa2, 0x0002, 0x08b7, + 0x06f1, 0x0003, 0x078b, 0x0821, 0x06f5, 0x0094, 0x0020, 0x0abc, + 0x0acf, 0x0ae9, 0x0b02, 0x0b38, 0x0b8f, 0x0bce, 0x0c20, 0x0c8f, + 0x0cfe, 0x0d70, 0x0dd1, 0x0e10, 0x0e49, 0x0e89, 0x0eda, 0x0f34, + 0x0f85, 0x0ff4, 0x1062, 0x10d6, 0x113d, 0x119e, 0x11e5, 0x122b, + // Entry 19040 - 1907F + 0x1263, 0x1272, 0x1293, 0x12c5, 0x12f2, 0x1328, 0x1353, 0x1391, + 0x13cb, 0x140a, 0x1440, 0x1459, 0x1482, 0x14cb, 0x151f, 0x1549, + 0x1558, 0x1573, 0x15a2, 0x15dc, 0x1608, 0x1665, 0x16a7, 0x16e3, + 0x1746, 0x1799, 0x17c3, 0x17dc, 0x1816, 0x182a, 0x184e, 0x187e, + 0x1898, 0x18d6, 0x1943, 0x1995, 0x19ad, 0x19de, 0x1a43, 0x1a84, + 0x1ab2, 0x1ac0, 0x1ad7, 0x1ae9, 0x1b06, 0x1b22, 0x1b4e, 0x1b89, + 0x1bca, 0x1c08, 0x1c59, 0x1cab, 0x1cc8, 0x1cf6, 0x1d22, 0x1d46, + 0x1d80, 0x1d94, 0x1dbd, 0x1df1, 0x1e1a, 0x1e4a, 0x1e5b, 0x1e6d, + // Entry 19080 - 190BF + 0x1e7f, 0x1eab, 0x1edd, 0x1f0b, 0x1f71, 0x1fca, 0x2012, 0x203e, + 0x2050, 0x205e, 0x2084, 0x20db, 0x2128, 0x2156, 0x2163, 0x2199, + 0x21f6, 0x223e, 0x227b, 0x22ad, 0x22bb, 0x22e6, 0x2325, 0x2362, + 0x2398, 0x23d4, 0x2428, 0x243a, 0x2449, 0x245c, 0x246d, 0x248e, + 0x24cf, 0x250b, 0x2537, 0x2553, 0x2570, 0x258a, 0x25a7, 0x25b7, + 0x25c5, 0x25e3, 0x2611, 0x2625, 0x2643, 0x266f, 0x2693, 0x26cd, + 0x26ec, 0x272f, 0x2775, 0x27a5, 0x27cc, 0x2819, 0x284f, 0x285f, + 0x2873, 0x28a2, 0x28eb, 0x0094, 0x0020, 0xffff, 0xffff, 0xffff, + // Entry 190C0 - 190FF + 0xffff, 0x0b1c, 0x0b80, 0x0bbd, 0x0c00, 0x0c70, 0x0cdd, 0x0d50, + 0x0dc0, 0x0e03, 0x0e3a, 0x0e77, 0x0ebd, 0x0f24, 0x0f64, 0x0fd7, + 0x103e, 0x10ba, 0x111e, 0x118b, 0x11d4, 0x1217, 0xffff, 0xffff, + 0x1282, 0xffff, 0x12df, 0xffff, 0x1343, 0x1383, 0x13bd, 0x13f7, + 0xffff, 0xffff, 0x1471, 0x14b4, 0x1512, 0xffff, 0xffff, 0xffff, + 0x158d, 0xffff, 0x15ee, 0x164c, 0xffff, 0x16c7, 0x172b, 0x178c, + 0xffff, 0xffff, 0xffff, 0xffff, 0x183e, 0xffff, 0xffff, 0x18b8, + 0x1922, 0xffff, 0xffff, 0x19bc, 0x1a32, 0x1a75, 0xffff, 0xffff, + // Entry 19100 - 1913F + 0xffff, 0xffff, 0xffff, 0xffff, 0x1b41, 0x1b78, 0x1bbb, 0x1bf8, + 0x1c38, 0xffff, 0xffff, 0x1ce8, 0xffff, 0x1d31, 0xffff, 0xffff, + 0x1dab, 0xffff, 0x1e0a, 0xffff, 0xffff, 0xffff, 0xffff, 0x1e9a, + 0xffff, 0x1eed, 0x1f57, 0x1fb5, 0x2004, 0xffff, 0xffff, 0xffff, + 0x206c, 0x20c4, 0x2119, 0xffff, 0xffff, 0x217d, 0x21e1, 0x2230, + 0x226a, 0xffff, 0xffff, 0x22d5, 0x2318, 0x234f, 0xffff, 0x23b2, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x247d, 0x24c0, 0x24fd, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x25d4, + // Entry 19140 - 1917F + 0xffff, 0xffff, 0x2635, 0xffff, 0x267e, 0xffff, 0x26dc, 0x271c, + 0x2765, 0xffff, 0x27b7, 0x2806, 0xffff, 0xffff, 0xffff, 0x2891, + 0x28d4, 0x0094, 0x0020, 0xffff, 0xffff, 0xffff, 0xffff, 0x0b5e, + 0x0ba8, 0x0be9, 0x0c4a, 0x0cb8, 0x0d29, 0x0d9a, 0x0dec, 0x0e27, + 0x0e62, 0x0ea5, 0x0f01, 0x0f4e, 0x0fb0, 0x101b, 0x1090, 0x10fc, + 0x1166, 0x11bb, 0x1200, 0x1249, 0xffff, 0xffff, 0x12ae, 0xffff, + 0x130f, 0xffff, 0x136d, 0x13a9, 0x13e3, 0x1427, 0xffff, 0xffff, + 0x149d, 0x14ec, 0x1536, 0xffff, 0xffff, 0xffff, 0x15c1, 0xffff, + // Entry 19180 - 191BF + 0x162c, 0x1688, 0xffff, 0x1709, 0x176b, 0x17b0, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1868, 0xffff, 0xffff, 0x18fe, 0x196e, 0xffff, + 0xffff, 0x1a0a, 0x1a5e, 0x1a9d, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1b65, 0x1ba4, 0x1be3, 0x1c22, 0x1c84, 0xffff, + 0xffff, 0x1d0e, 0xffff, 0x1d65, 0xffff, 0xffff, 0x1dd9, 0xffff, + 0x1e34, 0xffff, 0xffff, 0xffff, 0xffff, 0x1ec6, 0xffff, 0x1f33, + 0x1f95, 0x1fe9, 0x202a, 0xffff, 0xffff, 0xffff, 0x20a6, 0x20fc, + 0x2141, 0xffff, 0xffff, 0x21bf, 0x2215, 0x2256, 0x2296, 0xffff, + // Entry 191C0 - 191FF + 0xffff, 0x2301, 0x233c, 0x237f, 0xffff, 0x2400, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x24a9, 0x24e8, 0x2523, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x25fc, 0xffff, 0xffff, + 0x265b, 0xffff, 0x26b2, 0xffff, 0x2706, 0x274c, 0x278f, 0xffff, + 0x27eb, 0x2836, 0xffff, 0xffff, 0xffff, 0x28bd, 0x290c, 0x0003, + 0x08bb, 0x092a, 0x08ee, 0x0031, 0x0007, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 19200 - 1923F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0045, 0x004e, 0xffff, 0x0057, 0x003a, 0x0007, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 19240 - 1927F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0045, 0x004e, 0xffff, + 0x0057, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x24a6, 0x0031, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 19280 - 192BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0049, 0x0052, 0xffff, 0x005b, 0x0002, 0x0003, 0x00e9, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, + 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, + 0x0000, 0x0000, 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, + 0x0002, 0x0000, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, + 0x0001, 0x0000, 0x240c, 0x0008, 0x002f, 0x0066, 0x008b, 0x009f, + 0x00b7, 0x00c7, 0x00d8, 0x0000, 0x0002, 0x0032, 0x0054, 0x0003, + // Entry 192C0 - 192FF + 0x0036, 0x0000, 0x0045, 0x000d, 0x0021, 0xffff, 0x0000, 0x0004, + 0x0008, 0x000c, 0x0010, 0x0014, 0x0018, 0x001c, 0x0020, 0x0024, + 0x0028, 0x002d, 0x000d, 0x0021, 0xffff, 0x0032, 0x003d, 0x0049, + 0x0055, 0x0061, 0x006d, 0x007b, 0x008b, 0x0096, 0x00a3, 0x00af, + 0x00c4, 0x0002, 0x0000, 0x0057, 0x000d, 0x0000, 0xffff, 0x1f98, + 0x213d, 0x200a, 0x1f96, 0x2000, 0x2002, 0x2004, 0x1f9a, 0x235f, + 0x1f9c, 0x2008, 0x213d, 0x0002, 0x0069, 0x007f, 0x0003, 0x006d, + 0x0000, 0x0076, 0x0007, 0x0021, 0x00d9, 0x00e0, 0x00e7, 0x00eb, + // Entry 19300 - 1933F + 0x00ef, 0x00f3, 0x00f8, 0x0007, 0x0021, 0x00fd, 0x0107, 0x0110, + 0x012c, 0x0148, 0x0162, 0x016b, 0x0002, 0x0000, 0x0082, 0x0007, + 0x0000, 0x2002, 0x1f9a, 0x2002, 0x2002, 0x2002, 0x2006, 0x2002, + 0x0001, 0x008d, 0x0003, 0x0091, 0x0000, 0x0098, 0x0005, 0x0021, + 0xffff, 0x0174, 0x0178, 0x017c, 0x0180, 0x0005, 0x0021, 0xffff, + 0x0185, 0x0199, 0x01ae, 0x01c3, 0x0001, 0x00a1, 0x0003, 0x00a5, + 0x0000, 0x00ae, 0x0002, 0x00a8, 0x00ab, 0x0001, 0x0021, 0x01d8, + 0x0001, 0x0021, 0x01e3, 0x0002, 0x00b1, 0x00b4, 0x0001, 0x0021, + // Entry 19340 - 1937F + 0x01d8, 0x0001, 0x0021, 0x01e3, 0x0003, 0x00c1, 0x0000, 0x00bb, + 0x0001, 0x00bd, 0x0002, 0x0021, 0x01f0, 0x0205, 0x0001, 0x00c3, + 0x0002, 0x0021, 0x021a, 0x021e, 0x0004, 0x00d5, 0x00cf, 0x00cc, + 0x00d2, 0x0001, 0x0002, 0x0025, 0x0001, 0x0002, 0x0033, 0x0001, + 0x0002, 0x003c, 0x0001, 0x0002, 0x028b, 0x0004, 0x00e6, 0x00e0, + 0x00dd, 0x00e3, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, + 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0040, 0x012a, + 0x0000, 0x0000, 0x012f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 19380 - 193BF + 0x0134, 0x0000, 0x0000, 0x0139, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x013e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0149, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x014e, 0x0000, 0x0153, 0x0000, 0x0000, + 0x0158, 0x0000, 0x0000, 0x015d, 0x0000, 0x0000, 0x0162, 0x0001, + 0x012c, 0x0001, 0x0021, 0x0222, 0x0001, 0x0131, 0x0001, 0x0021, + // Entry 193C0 - 193FF + 0x0228, 0x0001, 0x0136, 0x0001, 0x0021, 0x022f, 0x0001, 0x013b, + 0x0001, 0x0021, 0x0235, 0x0002, 0x0141, 0x0144, 0x0001, 0x0021, + 0x023f, 0x0003, 0x0021, 0x0245, 0x024d, 0x0252, 0x0001, 0x014b, + 0x0001, 0x0021, 0x025a, 0x0001, 0x0150, 0x0001, 0x0021, 0x026e, + 0x0001, 0x0155, 0x0001, 0x0021, 0x0284, 0x0001, 0x015a, 0x0001, + 0x0021, 0x028a, 0x0001, 0x015f, 0x0001, 0x0021, 0x0293, 0x0001, + 0x0164, 0x0001, 0x0021, 0x029d, 0x0003, 0x0004, 0x0595, 0x0a16, + 0x0012, 0x0017, 0x0030, 0x0055, 0x0000, 0x00bc, 0x0000, 0x0123, + // Entry 19400 - 1943F + 0x014e, 0x0371, 0x03f5, 0x0455, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x04e7, 0x0579, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, + 0x001d, 0x0003, 0x0026, 0x002b, 0x0021, 0x0001, 0x0023, 0x0001, + 0x0021, 0x02aa, 0x0001, 0x0028, 0x0001, 0x0021, 0x02aa, 0x0001, + 0x002d, 0x0001, 0x0021, 0x02aa, 0x000a, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x003b, 0x0006, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0042, 0x0001, 0x0044, + 0x0001, 0x0046, 0x000d, 0x0021, 0xffff, 0x02c2, 0x02c9, 0x02d0, + // Entry 19440 - 1947F + 0x02d7, 0x02e2, 0x02ed, 0x02f4, 0x02fb, 0x0300, 0x030b, 0x0314, + 0x0319, 0x0005, 0x005b, 0x0000, 0x0000, 0x0000, 0x00a6, 0x0002, + 0x005e, 0x0082, 0x0003, 0x0062, 0x0000, 0x0072, 0x000e, 0x0003, + 0xffff, 0x001c, 0x20d7, 0x20e0, 0x20e9, 0x20f2, 0x20fb, 0x2106, + 0x2115, 0x2122, 0x212d, 0x2138, 0x2143, 0x2150, 0x000e, 0x0003, + 0xffff, 0x001c, 0x20d7, 0x20e0, 0x20e9, 0x20f2, 0x20fb, 0x2106, + 0x2115, 0x2122, 0x212d, 0x2138, 0x2143, 0x2150, 0x0003, 0x0086, + 0x0000, 0x0096, 0x000e, 0x0003, 0xffff, 0x001c, 0x20d7, 0x20e0, + // Entry 19480 - 194BF + 0x20e9, 0x20f2, 0x20fb, 0x2106, 0x2115, 0x2122, 0x212d, 0x2138, + 0x2143, 0x2150, 0x000e, 0x0003, 0xffff, 0x001c, 0x20d7, 0x20e0, + 0x20e9, 0x20f2, 0x20fb, 0x2106, 0x2115, 0x2122, 0x212d, 0x2138, + 0x2143, 0x2150, 0x0003, 0x00b0, 0x00b6, 0x00aa, 0x0001, 0x00ac, + 0x0002, 0x0021, 0x0320, 0x033e, 0x0001, 0x00b2, 0x0002, 0x0021, + 0x035c, 0x0371, 0x0001, 0x00b8, 0x0002, 0x0021, 0x0384, 0x038b, + 0x0005, 0x00c2, 0x0000, 0x0000, 0x0000, 0x010d, 0x0002, 0x00c5, + 0x00e9, 0x0003, 0x00c9, 0x0000, 0x00d9, 0x000e, 0x0021, 0xffff, + // Entry 194C0 - 194FF + 0x0392, 0x039d, 0x03a8, 0x03b3, 0x03c1, 0x03c6, 0x03d3, 0x03e0, + 0x03ed, 0x03fd, 0x0404, 0x040d, 0x0416, 0x000e, 0x0021, 0xffff, + 0x0392, 0x039d, 0x03a8, 0x03b3, 0x03c1, 0x03c6, 0x03d3, 0x03e0, + 0x03ed, 0x03fd, 0x0404, 0x040d, 0x0416, 0x0003, 0x00ed, 0x0000, + 0x00fd, 0x000e, 0x0021, 0xffff, 0x0392, 0x039d, 0x03a8, 0x03b3, + 0x03c1, 0x03c6, 0x03d3, 0x03e0, 0x03ed, 0x03fd, 0x0404, 0x040d, + 0x0416, 0x000e, 0x0021, 0xffff, 0x0392, 0x039d, 0x03a8, 0x03b3, + 0x03c1, 0x03c6, 0x03d3, 0x03e0, 0x03ed, 0x03fd, 0x0404, 0x040d, + // Entry 19500 - 1953F + 0x0416, 0x0003, 0x0117, 0x011d, 0x0111, 0x0001, 0x0113, 0x0002, + 0x0000, 0x0425, 0x042a, 0x0001, 0x0119, 0x0002, 0x0000, 0x0425, + 0x042a, 0x0001, 0x011f, 0x0002, 0x0000, 0x0425, 0x042a, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x012c, 0x0000, 0x013d, + 0x0004, 0x013a, 0x0134, 0x0131, 0x0137, 0x0001, 0x0021, 0x0423, + 0x0001, 0x0021, 0x0433, 0x0001, 0x0007, 0x008f, 0x0001, 0x0021, + 0x043e, 0x0004, 0x014b, 0x0145, 0x0142, 0x0148, 0x0001, 0x0021, + 0x0446, 0x0001, 0x0021, 0x0446, 0x0001, 0x0021, 0x0459, 0x0001, + // Entry 19540 - 1957F + 0x0021, 0x0459, 0x0008, 0x0157, 0x01bc, 0x0213, 0x0248, 0x0319, + 0x033e, 0x034f, 0x0360, 0x0002, 0x015a, 0x018b, 0x0003, 0x015e, + 0x016d, 0x017c, 0x000d, 0x0021, 0xffff, 0x0466, 0x0475, 0x0482, + 0x048b, 0x0496, 0x049d, 0x04a6, 0x04b3, 0x04ba, 0x04c9, 0x04d4, + 0x04e1, 0x000d, 0x0021, 0xffff, 0x04ee, 0x04f1, 0x04f4, 0x04f7, + 0x04f4, 0x04ee, 0x04ee, 0x04fa, 0x04fd, 0x04fa, 0x0500, 0x0503, + 0x000d, 0x0021, 0xffff, 0x0466, 0x0475, 0x0482, 0x048b, 0x0496, + 0x049d, 0x04a6, 0x04b3, 0x04ba, 0x04c9, 0x04d4, 0x04e1, 0x0003, + // Entry 19580 - 195BF + 0x018f, 0x019e, 0x01ad, 0x000d, 0x0021, 0xffff, 0x0506, 0x0513, + 0x0482, 0x048b, 0x051e, 0x049d, 0x0523, 0x04b3, 0x04ba, 0x04c9, + 0x04d4, 0x04e1, 0x000d, 0x0021, 0xffff, 0x04ee, 0x04f1, 0x04f4, + 0x04f7, 0x04f4, 0x04ee, 0x04ee, 0x04fa, 0x04fd, 0x04fa, 0x0500, + 0x0503, 0x000d, 0x0021, 0xffff, 0x0506, 0x0513, 0x0482, 0x048b, + 0x051e, 0x049d, 0x0523, 0x04b3, 0x04ba, 0x04c9, 0x04d4, 0x04e1, + 0x0002, 0x01bf, 0x01e9, 0x0005, 0x01c5, 0x01ce, 0x01e0, 0x0000, + 0x01d7, 0x0007, 0x0021, 0x052e, 0x053b, 0x0548, 0x0558, 0x0569, + // Entry 195C0 - 195FF + 0x0578, 0x0581, 0x0007, 0x0014, 0x006d, 0x34df, 0x34e2, 0x0076, + 0x0079, 0x34e5, 0x007f, 0x0007, 0x0021, 0x058a, 0x058f, 0x0594, + 0x0599, 0x059e, 0x05a3, 0x05a6, 0x0007, 0x0021, 0x052e, 0x053b, + 0x0548, 0x0558, 0x0569, 0x0578, 0x0581, 0x0005, 0x01ef, 0x01f8, + 0x020a, 0x0000, 0x0201, 0x0007, 0x0021, 0x052e, 0x053b, 0x0548, + 0x0558, 0x0569, 0x0578, 0x0581, 0x0007, 0x0014, 0x006d, 0x34df, + 0x34e2, 0x0076, 0x0079, 0x34e8, 0x34eb, 0x0007, 0x0021, 0x058a, + 0x058f, 0x0594, 0x0599, 0x059e, 0x05a9, 0x05ac, 0x0007, 0x0021, + // Entry 19600 - 1963F + 0x052e, 0x053b, 0x0548, 0x0558, 0x0569, 0x0578, 0x0581, 0x0002, + 0x0216, 0x022f, 0x0003, 0x021a, 0x0221, 0x0228, 0x0005, 0x0021, + 0xffff, 0x05af, 0x05b9, 0x05c3, 0x05cd, 0x0005, 0x0021, 0xffff, + 0x05d7, 0x05da, 0x05dd, 0x05e0, 0x0005, 0x0021, 0xffff, 0x05e3, + 0x05fc, 0x0615, 0x062e, 0x0003, 0x0233, 0x023a, 0x0241, 0x0005, + 0x0021, 0xffff, 0x05af, 0x05b9, 0x05c3, 0x05cd, 0x0005, 0x0021, + 0xffff, 0x05d7, 0x05da, 0x05dd, 0x05e0, 0x0005, 0x0021, 0xffff, + 0x05e3, 0x05fc, 0x0615, 0x062e, 0x0002, 0x024b, 0x02b2, 0x0003, + // Entry 19640 - 1967F + 0x024f, 0x0270, 0x0291, 0x0008, 0x025b, 0x0261, 0x0258, 0x0264, + 0x0267, 0x026a, 0x026d, 0x025e, 0x0001, 0x0021, 0x064b, 0x0001, + 0x0021, 0x065b, 0x0001, 0x0021, 0x0662, 0x0001, 0x0021, 0x0669, + 0x0001, 0x0021, 0x0670, 0x0001, 0x0021, 0x0669, 0x0001, 0x0021, + 0x0677, 0x0001, 0x0021, 0x067e, 0x0008, 0x027c, 0x0282, 0x0279, + 0x0285, 0x0288, 0x028b, 0x028e, 0x027f, 0x0001, 0x0021, 0x0500, + 0x0001, 0x0021, 0x0683, 0x0001, 0x0021, 0x0686, 0x0001, 0x0003, + 0x0227, 0x0001, 0x0003, 0x0340, 0x0001, 0x0021, 0x0669, 0x0001, + // Entry 19680 - 196BF + 0x0021, 0x0689, 0x0001, 0x0021, 0x05ac, 0x0008, 0x029d, 0x02a3, + 0x029a, 0x02a6, 0x02a9, 0x02ac, 0x02af, 0x02a0, 0x0001, 0x0021, + 0x064b, 0x0001, 0x0021, 0x068c, 0x0001, 0x0021, 0x0662, 0x0001, + 0x0021, 0x06a0, 0x0001, 0x0021, 0x0670, 0x0001, 0x0021, 0x06a0, + 0x0001, 0x0021, 0x0677, 0x0001, 0x0021, 0x067e, 0x0003, 0x02b6, + 0x02d7, 0x02f8, 0x0008, 0x02c2, 0x02c8, 0x02bf, 0x02cb, 0x02ce, + 0x02d1, 0x02d4, 0x02c5, 0x0001, 0x0021, 0x064b, 0x0001, 0x0021, + 0x065b, 0x0001, 0x0021, 0x0662, 0x0001, 0x0021, 0x0669, 0x0001, + // Entry 196C0 - 196FF + 0x0021, 0x0670, 0x0001, 0x0021, 0x06a0, 0x0001, 0x0021, 0x0677, + 0x0001, 0x0021, 0x067e, 0x0008, 0x02e3, 0x02e9, 0x02e0, 0x02ec, + 0x02ef, 0x02f2, 0x02f5, 0x02e6, 0x0001, 0x0021, 0x0500, 0x0001, + 0x0021, 0x065b, 0x0001, 0x0021, 0x0686, 0x0001, 0x0021, 0x0669, + 0x0001, 0x0003, 0x0340, 0x0001, 0x0021, 0x0669, 0x0001, 0x0021, + 0x0689, 0x0001, 0x0021, 0x05ac, 0x0008, 0x0304, 0x030a, 0x0301, + 0x030d, 0x0310, 0x0313, 0x0316, 0x0307, 0x0001, 0x0021, 0x064b, + 0x0001, 0x0021, 0x068c, 0x0001, 0x0021, 0x0662, 0x0001, 0x0021, + // Entry 19700 - 1973F + 0x06a0, 0x0001, 0x0021, 0x0670, 0x0001, 0x0021, 0x06a0, 0x0001, + 0x0021, 0x0677, 0x0001, 0x0021, 0x067e, 0x0003, 0x0328, 0x0333, + 0x031d, 0x0002, 0x0320, 0x0324, 0x0002, 0x0021, 0x06b1, 0x06ea, + 0x0002, 0x0021, 0x06c8, 0x06f7, 0x0002, 0x032b, 0x032f, 0x0002, + 0x0021, 0x0384, 0x0716, 0x0002, 0x0021, 0x070d, 0x071a, 0x0002, + 0x0336, 0x033a, 0x0002, 0x0021, 0x0683, 0x04f4, 0x0002, 0x0021, + 0x070d, 0x071a, 0x0004, 0x034c, 0x0346, 0x0343, 0x0349, 0x0001, + 0x0002, 0x0025, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, + // Entry 19740 - 1977F + 0x0001, 0x0021, 0x0721, 0x0004, 0x035d, 0x0357, 0x0354, 0x035a, + 0x0001, 0x001d, 0x178c, 0x0001, 0x0021, 0x0727, 0x0001, 0x0005, + 0x0099, 0x0001, 0x0005, 0x00a1, 0x0004, 0x036e, 0x0368, 0x0365, + 0x036b, 0x0001, 0x0021, 0x0446, 0x0001, 0x0021, 0x0446, 0x0001, + 0x0021, 0x0459, 0x0001, 0x0021, 0x0459, 0x0005, 0x0377, 0x0000, + 0x0000, 0x0000, 0x03e2, 0x0002, 0x037a, 0x03ae, 0x0003, 0x037e, + 0x038e, 0x039e, 0x000e, 0x0021, 0x0774, 0x0733, 0x073c, 0x0747, + 0x0750, 0x0757, 0x0760, 0x0769, 0x078c, 0x0797, 0x07a0, 0x07ab, + // Entry 19780 - 197BF + 0x07b4, 0x07b9, 0x000e, 0x0014, 0x34f7, 0x01cb, 0x01c8, 0x01bf, + 0x34ee, 0x34f1, 0x34f4, 0x34f7, 0x34fa, 0x34fd, 0x34e2, 0x01cb, + 0x34f4, 0x34fd, 0x000e, 0x0021, 0x0774, 0x0733, 0x073c, 0x0747, + 0x0750, 0x0757, 0x0760, 0x0769, 0x078c, 0x0797, 0x07a0, 0x07ab, + 0x07b4, 0x07b9, 0x0003, 0x03b2, 0x03c2, 0x03d2, 0x000e, 0x0021, + 0x0774, 0x0733, 0x073c, 0x0747, 0x0750, 0x0757, 0x0760, 0x0769, + 0x078c, 0x0797, 0x07a0, 0x07ab, 0x07b4, 0x07b9, 0x000e, 0x0014, + 0x34f7, 0x01cb, 0x01c8, 0x01bf, 0x34ee, 0x34f1, 0x34f4, 0x34f7, + // Entry 197C0 - 197FF + 0x34fa, 0x34fd, 0x34e2, 0x01cb, 0x34f4, 0x34fd, 0x000e, 0x0021, + 0x0774, 0x0733, 0x073c, 0x0747, 0x0750, 0x0757, 0x0760, 0x0769, + 0x078c, 0x0797, 0x07a0, 0x07ab, 0x07b4, 0x07b9, 0x0003, 0x03eb, + 0x03f0, 0x03e6, 0x0001, 0x03e8, 0x0001, 0x0021, 0x07c4, 0x0001, + 0x03ed, 0x0001, 0x0021, 0x07c4, 0x0001, 0x03f2, 0x0001, 0x0021, + 0x07c4, 0x0005, 0x03fb, 0x0000, 0x0000, 0x0000, 0x0442, 0x0002, + 0x03fe, 0x0420, 0x0003, 0x0402, 0x0000, 0x0411, 0x000d, 0x0021, + 0xffff, 0x07d8, 0x07e3, 0x07f2, 0x07ff, 0x080c, 0x0819, 0x0826, + // Entry 19800 - 1983F + 0x0831, 0x0840, 0x084f, 0x085a, 0x0865, 0x000d, 0x0021, 0xffff, + 0x07d8, 0x07e3, 0x07f2, 0x07ff, 0x080c, 0x0819, 0x0826, 0x0831, + 0x0840, 0x084f, 0x085a, 0x0865, 0x0003, 0x0424, 0x0000, 0x0433, + 0x000d, 0x0021, 0xffff, 0x07d8, 0x07e3, 0x07f2, 0x07ff, 0x080c, + 0x0819, 0x0826, 0x0831, 0x0840, 0x084f, 0x085a, 0x0865, 0x000d, + 0x0021, 0xffff, 0x07d8, 0x07e3, 0x07f2, 0x07ff, 0x080c, 0x0819, + 0x0826, 0x0831, 0x0840, 0x084f, 0x085a, 0x0865, 0x0003, 0x044b, + 0x0450, 0x0446, 0x0001, 0x0448, 0x0001, 0x0021, 0x0876, 0x0001, + // Entry 19840 - 1987F + 0x044d, 0x0001, 0x0021, 0x0876, 0x0001, 0x0452, 0x0001, 0x0021, + 0x0876, 0x0008, 0x045e, 0x0000, 0x0000, 0x0000, 0x04c3, 0x04d6, + 0x0000, 0x9006, 0x0002, 0x0461, 0x0492, 0x0003, 0x0465, 0x0474, + 0x0483, 0x000d, 0x0003, 0xffff, 0x04dd, 0x04e6, 0x2160, 0x2176, + 0x218e, 0x21a6, 0x0545, 0x054c, 0x0557, 0x0562, 0x21c0, 0x21cf, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, + 0x0003, 0xffff, 0x04dd, 0x04e6, 0x2160, 0x2176, 0x218e, 0x21a6, + // Entry 19880 - 198BF + 0x0545, 0x054c, 0x0557, 0x0562, 0x21c0, 0x21cf, 0x0003, 0x0496, + 0x04a5, 0x04b4, 0x000d, 0x0003, 0xffff, 0x04dd, 0x04e6, 0x2160, + 0x2176, 0x218e, 0x21a6, 0x0545, 0x054c, 0x0557, 0x0562, 0x21dc, + 0x21e9, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, + 0x000d, 0x0003, 0xffff, 0x04dd, 0x04e6, 0x2160, 0x21f4, 0x220a, + 0x2220, 0x0545, 0x054c, 0x0557, 0x0562, 0x21dc, 0x21e9, 0x0003, + 0x04cc, 0x04d1, 0x04c7, 0x0001, 0x04c9, 0x0001, 0x0021, 0x088a, + // Entry 198C0 - 198FF + 0x0001, 0x04ce, 0x0001, 0x0021, 0x089c, 0x0001, 0x04d3, 0x0001, + 0x0021, 0x089c, 0x0004, 0x04e4, 0x04de, 0x04db, 0x04e1, 0x0001, + 0x0002, 0x0000, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, + 0x0001, 0x0021, 0x08a6, 0x0008, 0x04f0, 0x0000, 0x0000, 0x0000, + 0x0555, 0x0568, 0x0000, 0x9006, 0x0002, 0x04f3, 0x0524, 0x0003, + 0x04f7, 0x0506, 0x0515, 0x000d, 0x0021, 0xffff, 0x08ae, 0x08bd, + 0x08ce, 0x08d9, 0x08e0, 0x08eb, 0x08f8, 0x08ff, 0x0908, 0x090f, + 0x0914, 0x091d, 0x000d, 0x0021, 0xffff, 0x04f1, 0x0928, 0x092b, + // Entry 19900 - 1993F + 0x092e, 0x04f4, 0x0931, 0x04f4, 0x0934, 0x0934, 0x0937, 0x093a, + 0x0928, 0x000d, 0x0021, 0xffff, 0x08ae, 0x08bd, 0x08ce, 0x08d9, + 0x08e0, 0x08eb, 0x08f8, 0x08ff, 0x0908, 0x090f, 0x0914, 0x091d, + 0x0003, 0x0528, 0x0537, 0x0546, 0x000d, 0x0021, 0xffff, 0x08ae, + 0x08bd, 0x08ce, 0x08d9, 0x08e0, 0x08eb, 0x08f8, 0x08ff, 0x0908, + 0x090f, 0x0914, 0x091d, 0x000d, 0x0021, 0xffff, 0x04f1, 0x0928, + 0x092b, 0x092e, 0x04f4, 0x0931, 0x04f4, 0x0934, 0x0934, 0x0937, + 0x093a, 0x0928, 0x000d, 0x0021, 0xffff, 0x08ae, 0x08bd, 0x08ce, + // Entry 19940 - 1997F + 0x08d9, 0x08e0, 0x08eb, 0x08f8, 0x08ff, 0x0908, 0x090f, 0x0914, + 0x091d, 0x0003, 0x055e, 0x0563, 0x0559, 0x0001, 0x055b, 0x0001, + 0x0021, 0x093d, 0x0001, 0x0560, 0x0001, 0x0021, 0x094f, 0x0001, + 0x0565, 0x0001, 0x0021, 0x094f, 0x0004, 0x0576, 0x0570, 0x056d, + 0x0573, 0x0001, 0x0000, 0x04fc, 0x0001, 0x0002, 0x0033, 0x0001, + 0x0002, 0x003c, 0x0001, 0x0021, 0x0721, 0x0005, 0x0000, 0x0000, + 0x0000, 0x0000, 0x057f, 0x0003, 0x0589, 0x058f, 0x0583, 0x0001, + 0x0585, 0x0002, 0x0021, 0x0959, 0x096c, 0x0001, 0x058b, 0x0002, + // Entry 19980 - 199BF + 0x0021, 0x0959, 0x096c, 0x0001, 0x0591, 0x0002, 0x0021, 0x0959, + 0x096c, 0x0042, 0x05d8, 0x05dd, 0x05e2, 0x05e7, 0x05fe, 0x0615, + 0x062c, 0x0643, 0x065a, 0x0671, 0x0688, 0x069f, 0x06b6, 0x06d1, + 0x06ec, 0x0707, 0x070c, 0x0711, 0x0716, 0x072f, 0x0748, 0x0761, + 0x0766, 0x076b, 0x0770, 0x0775, 0x077a, 0x077f, 0x0784, 0x0789, + 0x078e, 0x07a2, 0x07b6, 0x07ca, 0x07de, 0x07f2, 0x0806, 0x081a, + 0x082e, 0x0842, 0x0856, 0x086a, 0x087e, 0x0892, 0x08a6, 0x08ba, + 0x08ce, 0x08e2, 0x08f6, 0x090a, 0x091e, 0x0932, 0x0937, 0x093c, + // Entry 199C0 - 199FF + 0x0941, 0x0957, 0x096d, 0x0983, 0x0999, 0x09af, 0x09c5, 0x09db, + 0x09f1, 0x0a07, 0x0a0c, 0x0a11, 0x0001, 0x05da, 0x0001, 0x0021, + 0x0982, 0x0001, 0x05df, 0x0001, 0x0021, 0x0982, 0x0001, 0x05e4, + 0x0001, 0x0021, 0x0982, 0x0003, 0x05eb, 0x05ee, 0x05f3, 0x0001, + 0x0021, 0x098b, 0x0003, 0x0021, 0x0992, 0x09a4, 0x09af, 0x0002, + 0x05f6, 0x05fa, 0x0002, 0x0021, 0x09c1, 0x09c1, 0x0002, 0x0021, + 0x09d3, 0x09d3, 0x0003, 0x0602, 0x0605, 0x060a, 0x0001, 0x0021, + 0x098b, 0x0003, 0x0021, 0x0992, 0x09a4, 0x09af, 0x0002, 0x060d, + // Entry 19A00 - 19A3F + 0x0611, 0x0002, 0x0021, 0x09c1, 0x09c1, 0x0002, 0x0021, 0x09d3, + 0x09d3, 0x0003, 0x0619, 0x061c, 0x0621, 0x0001, 0x0021, 0x098b, + 0x0003, 0x0021, 0x0992, 0x09a4, 0x09af, 0x0002, 0x0624, 0x0628, + 0x0002, 0x0021, 0x09c1, 0x09c1, 0x0002, 0x0021, 0x09d3, 0x09d3, + 0x0003, 0x0630, 0x0633, 0x0638, 0x0001, 0x0021, 0x09e5, 0x0003, + 0x0021, 0x09f5, 0x0a12, 0x0a2f, 0x0002, 0x063b, 0x063f, 0x0002, + 0x0021, 0x0a4c, 0x0a4c, 0x0002, 0x0021, 0x0a69, 0x0a69, 0x0003, + 0x0647, 0x064a, 0x064f, 0x0001, 0x0021, 0x09e5, 0x0003, 0x0021, + // Entry 19A40 - 19A7F + 0x09f5, 0x0a12, 0x0a2f, 0x0002, 0x0652, 0x0656, 0x0002, 0x0021, + 0x0a4c, 0x0a4c, 0x0002, 0x0021, 0x0a69, 0x0a69, 0x0003, 0x065e, + 0x0661, 0x0666, 0x0001, 0x0021, 0x09e5, 0x0003, 0x0021, 0x09f5, + 0x0a12, 0x0a2f, 0x0002, 0x0669, 0x066d, 0x0002, 0x0021, 0x0a4c, + 0x0a4c, 0x0002, 0x0021, 0x0a69, 0x0a69, 0x0003, 0x0675, 0x0678, + 0x067d, 0x0001, 0x0021, 0x0a86, 0x0003, 0x0021, 0x0a8d, 0x0a9f, + 0x0aad, 0x0002, 0x0680, 0x0684, 0x0002, 0x0021, 0x0abf, 0x0abf, + 0x0002, 0x0021, 0x0ad1, 0x0ad1, 0x0003, 0x068c, 0x068f, 0x0694, + // Entry 19A80 - 19ABF + 0x0001, 0x0021, 0x0a86, 0x0003, 0x0021, 0x0ae3, 0x0a9f, 0x0aad, + 0x0002, 0x0697, 0x069b, 0x0002, 0x0021, 0x0abf, 0x0abf, 0x0002, + 0x0021, 0x0ad1, 0x0ad1, 0x0003, 0x06a3, 0x06a6, 0x06ab, 0x0001, + 0x0021, 0x0a86, 0x0003, 0x0021, 0x0ae3, 0x0a9f, 0x0aad, 0x0002, + 0x06ae, 0x06b2, 0x0002, 0x0021, 0x0abf, 0x0abf, 0x0002, 0x0021, + 0x0ad1, 0x0ad1, 0x0004, 0x06bb, 0x06be, 0x06c3, 0x06ce, 0x0001, + 0x0021, 0x0af1, 0x0003, 0x0021, 0x0afa, 0x0b10, 0x0b20, 0x0002, + 0x06c6, 0x06ca, 0x0002, 0x0021, 0x0b36, 0x0b36, 0x0002, 0x0021, + // Entry 19AC0 - 19AFF + 0x0b4a, 0x0b4a, 0x0001, 0x0021, 0x0b5e, 0x0004, 0x06d6, 0x06d9, + 0x06de, 0x06e9, 0x0001, 0x0021, 0x0af1, 0x0003, 0x0021, 0x0afa, + 0x0b10, 0x0b20, 0x0002, 0x06e1, 0x06e5, 0x0002, 0x0021, 0x0b36, + 0x0b36, 0x0002, 0x0021, 0x0b4a, 0x0b4a, 0x0001, 0x0021, 0x0b5e, + 0x0004, 0x06f1, 0x06f4, 0x06f9, 0x0704, 0x0001, 0x0021, 0x0af1, + 0x0003, 0x0021, 0x0afa, 0x0b10, 0x0b20, 0x0002, 0x06fc, 0x0700, + 0x0002, 0x0021, 0x0b36, 0x0b36, 0x0002, 0x0021, 0x0b4a, 0x0b4a, + 0x0001, 0x0021, 0x0b5e, 0x0001, 0x0709, 0x0001, 0x0021, 0x0b6d, + // Entry 19B00 - 19B3F + 0x0001, 0x070e, 0x0001, 0x0021, 0x0b6d, 0x0001, 0x0713, 0x0001, + 0x0021, 0x0b6d, 0x0003, 0x071a, 0x071d, 0x0724, 0x0001, 0x0021, + 0x0b7f, 0x0005, 0x0021, 0x0b93, 0x0b9e, 0x0ba9, 0x0b86, 0x0bb2, + 0x0002, 0x0727, 0x072b, 0x0002, 0x0021, 0x0bc2, 0x0bc2, 0x0002, + 0x0021, 0x0bd4, 0x0bd4, 0x0003, 0x0733, 0x0736, 0x073d, 0x0001, + 0x0021, 0x0b7f, 0x0005, 0x0021, 0x0b93, 0x0b9e, 0x0ba9, 0x0b86, + 0x0bb2, 0x0002, 0x0740, 0x0744, 0x0002, 0x0021, 0x0bc2, 0x0bc2, + 0x0002, 0x0021, 0x0bd4, 0x0bd4, 0x0003, 0x074c, 0x074f, 0x0756, + // Entry 19B40 - 19B7F + 0x0001, 0x0021, 0x0b7f, 0x0005, 0x0021, 0x0b93, 0x0b9e, 0x0ba9, + 0x0b86, 0x0bb2, 0x0002, 0x0759, 0x075d, 0x0002, 0x0021, 0x0bc2, + 0x0bc2, 0x0002, 0x0021, 0x0bd4, 0x0bd4, 0x0001, 0x0763, 0x0001, + 0x0021, 0x0be6, 0x0001, 0x0768, 0x0001, 0x0021, 0x0be6, 0x0001, + 0x076d, 0x0001, 0x0021, 0x0be6, 0x0001, 0x0772, 0x0001, 0x0021, + 0x0bf4, 0x0001, 0x0777, 0x0001, 0x0021, 0x0bf4, 0x0001, 0x077c, + 0x0001, 0x0021, 0x0bf4, 0x0001, 0x0781, 0x0001, 0x0021, 0x0c04, + 0x0001, 0x0786, 0x0001, 0x0021, 0x0c04, 0x0001, 0x078b, 0x0001, + // Entry 19B80 - 19BBF + 0x0021, 0x0c04, 0x0003, 0x0000, 0x0792, 0x0797, 0x0003, 0x0021, + 0x0c1b, 0x0c35, 0x0c49, 0x0002, 0x079a, 0x079e, 0x0002, 0x0021, + 0x0c63, 0x0c63, 0x0002, 0x0021, 0x0c7d, 0x0c7d, 0x0003, 0x0000, + 0x07a6, 0x07ab, 0x0003, 0x0021, 0x0c1b, 0x0c35, 0x0c49, 0x0002, + 0x07ae, 0x07b2, 0x0002, 0x0021, 0x0c63, 0x0c63, 0x0002, 0x0021, + 0x0c7d, 0x0c7d, 0x0003, 0x0000, 0x07ba, 0x07bf, 0x0003, 0x0021, + 0x0c1b, 0x0c35, 0x0c49, 0x0002, 0x07c2, 0x07c6, 0x0002, 0x0021, + 0x0c63, 0x0c63, 0x0002, 0x0021, 0x0c7d, 0x0c7d, 0x0003, 0x0000, + // Entry 19BC0 - 19BFF + 0x07ce, 0x07d3, 0x0003, 0x0021, 0x0c97, 0x0cb1, 0x0cc5, 0x0002, + 0x07d6, 0x07da, 0x0002, 0x0021, 0x0cdf, 0x0cdf, 0x0002, 0x0021, + 0x0cf9, 0x0cf9, 0x0003, 0x0000, 0x07e2, 0x07e7, 0x0003, 0x0021, + 0x0c97, 0x0cb1, 0x0cc5, 0x0002, 0x07ea, 0x07ee, 0x0002, 0x0021, + 0x0cdf, 0x0cdf, 0x0002, 0x0021, 0x0cf9, 0x0cf9, 0x0003, 0x0000, + 0x07f6, 0x07fb, 0x0003, 0x0021, 0x0c97, 0x0cb1, 0x0cc5, 0x0002, + 0x07fe, 0x0802, 0x0002, 0x0021, 0x0cdf, 0x0cdf, 0x0002, 0x0021, + 0x0cf9, 0x0cf9, 0x0003, 0x0000, 0x080a, 0x080f, 0x0003, 0x0021, + // Entry 19C00 - 19C3F + 0x0d13, 0x0d30, 0x0d47, 0x0002, 0x0812, 0x0816, 0x0002, 0x0021, + 0x0d64, 0x0d64, 0x0002, 0x0021, 0x0d81, 0x0d81, 0x0003, 0x0000, + 0x081e, 0x0823, 0x0003, 0x0021, 0x0d13, 0x0d30, 0x0d47, 0x0002, + 0x0826, 0x082a, 0x0002, 0x0021, 0x0d64, 0x0d64, 0x0002, 0x0021, + 0x0d81, 0x0d81, 0x0003, 0x0000, 0x0832, 0x0837, 0x0003, 0x0021, + 0x0d13, 0x0d30, 0x0d47, 0x0002, 0x083a, 0x083e, 0x0002, 0x0021, + 0x0d64, 0x0d64, 0x0002, 0x0021, 0x0d81, 0x0d81, 0x0003, 0x0000, + 0x0846, 0x084b, 0x0003, 0x0021, 0x0d9e, 0x0dbc, 0x0dd4, 0x0002, + // Entry 19C40 - 19C7F + 0x084e, 0x0852, 0x0002, 0x0021, 0x0df2, 0x0df2, 0x0002, 0x0021, + 0x0e10, 0x0e10, 0x0003, 0x0000, 0x085a, 0x085f, 0x0003, 0x0021, + 0x0d9e, 0x0dbc, 0x0dd4, 0x0002, 0x0862, 0x0866, 0x0002, 0x0021, + 0x0df2, 0x0df2, 0x0002, 0x0021, 0x0e10, 0x0e10, 0x0003, 0x0000, + 0x086e, 0x0873, 0x0003, 0x0021, 0x0d9e, 0x0dbc, 0x0dd4, 0x0002, + 0x0876, 0x087a, 0x0002, 0x0021, 0x0df2, 0x0df2, 0x0002, 0x0021, + 0x0e10, 0x0e10, 0x0003, 0x0000, 0x0882, 0x0887, 0x0003, 0x0021, + 0x0e2e, 0x0e4a, 0x0e60, 0x0002, 0x088a, 0x088e, 0x0002, 0x0021, + // Entry 19C80 - 19CBF + 0x0e7c, 0x0e7c, 0x0002, 0x0021, 0x0e98, 0x0e98, 0x0003, 0x0000, + 0x0896, 0x089b, 0x0003, 0x0021, 0x0e2e, 0x0e4a, 0x0e60, 0x0002, + 0x089e, 0x08a2, 0x0002, 0x0021, 0x0e7c, 0x0e7c, 0x0002, 0x0021, + 0x0e98, 0x0e98, 0x0003, 0x0000, 0x08aa, 0x08af, 0x0003, 0x0021, + 0x0e2e, 0x0e4a, 0x0e60, 0x0002, 0x08b2, 0x08b6, 0x0002, 0x0021, + 0x0e7c, 0x0e7c, 0x0002, 0x0021, 0x0e98, 0x0e98, 0x0003, 0x0000, + 0x08be, 0x08c3, 0x0003, 0x0021, 0x0eb4, 0x0eca, 0x0eda, 0x0002, + 0x08c6, 0x08ca, 0x0002, 0x0021, 0x0ef0, 0x0ef0, 0x0002, 0x0021, + // Entry 19CC0 - 19CFF + 0x0f06, 0x0f06, 0x0003, 0x0000, 0x08d2, 0x08d7, 0x0003, 0x0021, + 0x0eb4, 0x0eca, 0x0eda, 0x0002, 0x08da, 0x08de, 0x0002, 0x0021, + 0x0ef0, 0x0ef0, 0x0002, 0x0021, 0x0f06, 0x0f06, 0x0003, 0x0000, + 0x08e6, 0x08eb, 0x0003, 0x0021, 0x0eb4, 0x0eca, 0x0eda, 0x0002, + 0x08ee, 0x08f2, 0x0002, 0x0021, 0x0ef0, 0x0ef0, 0x0002, 0x0021, + 0x0f06, 0x0f06, 0x0003, 0x0000, 0x08fa, 0x08ff, 0x0003, 0x0021, + 0x0f1c, 0x0f32, 0x0f42, 0x0002, 0x0902, 0x0906, 0x0002, 0x0021, + 0x0f58, 0x0f58, 0x0002, 0x0021, 0x0f6e, 0x0f6e, 0x0003, 0x0000, + // Entry 19D00 - 19D3F + 0x090e, 0x0913, 0x0003, 0x0021, 0x0f1c, 0x0f32, 0x0f42, 0x0002, + 0x0916, 0x091a, 0x0002, 0x0021, 0x0f58, 0x0f58, 0x0002, 0x0021, + 0x0f6e, 0x0f6e, 0x0003, 0x0000, 0x0922, 0x0927, 0x0003, 0x0021, + 0x0f1c, 0x0f32, 0x0f42, 0x0002, 0x092a, 0x092e, 0x0002, 0x0021, + 0x0f58, 0x0f58, 0x0002, 0x0021, 0x0f6e, 0x0f6e, 0x0001, 0x0934, + 0x0001, 0x0021, 0x0f84, 0x0001, 0x0939, 0x0001, 0x0021, 0x0f84, + 0x0001, 0x093e, 0x0001, 0x0021, 0x0f84, 0x0003, 0x0945, 0x0948, + 0x094c, 0x0001, 0x0021, 0x0f9c, 0x0002, 0x0021, 0xffff, 0x0fa5, + // Entry 19D40 - 19D7F + 0x0002, 0x094f, 0x0953, 0x0002, 0x0021, 0x0fb7, 0x0fb7, 0x0002, + 0x0021, 0x0fcb, 0x0fcb, 0x0003, 0x095b, 0x095e, 0x0962, 0x0001, + 0x0021, 0x0f9c, 0x0002, 0x0021, 0xffff, 0x0fa5, 0x0002, 0x0965, + 0x0969, 0x0002, 0x0021, 0x0fb7, 0x0fb7, 0x0002, 0x0021, 0x0fcb, + 0x0fcb, 0x0003, 0x0971, 0x0974, 0x0978, 0x0001, 0x0021, 0x0f9c, + 0x0002, 0x0021, 0xffff, 0x0fa5, 0x0002, 0x097b, 0x097f, 0x0002, + 0x0021, 0x0fb7, 0x0fb7, 0x0002, 0x0021, 0x0fcb, 0x0fcb, 0x0003, + 0x0987, 0x098a, 0x098e, 0x0001, 0x0021, 0x0fdf, 0x0002, 0x0021, + // Entry 19D80 - 19DBF + 0xffff, 0x0fea, 0x0002, 0x0991, 0x0995, 0x0002, 0x0021, 0x0ffe, + 0x0ffe, 0x0002, 0x0021, 0x1014, 0x1014, 0x0003, 0x099d, 0x09a0, + 0x09a4, 0x0001, 0x0021, 0x0fdf, 0x0002, 0x0021, 0xffff, 0x0fea, + 0x0002, 0x09a7, 0x09ab, 0x0002, 0x0021, 0x0ffe, 0x0ffe, 0x0002, + 0x0021, 0x1014, 0x1014, 0x0003, 0x09b3, 0x09b6, 0x09ba, 0x0001, + 0x0021, 0x0fdf, 0x0002, 0x0021, 0xffff, 0x0fea, 0x0002, 0x09bd, + 0x09c1, 0x0002, 0x0021, 0x0ffe, 0x0ffe, 0x0002, 0x0021, 0x1014, + 0x1014, 0x0003, 0x09c9, 0x09cc, 0x09d0, 0x0001, 0x0021, 0x102a, + // Entry 19DC0 - 19DFF + 0x0002, 0x0021, 0xffff, 0x1035, 0x0002, 0x09d3, 0x09d7, 0x0002, + 0x0021, 0x1040, 0x1040, 0x0002, 0x0021, 0x1056, 0x1056, 0x0003, + 0x09df, 0x09e2, 0x09e6, 0x0001, 0x0021, 0x102a, 0x0002, 0x0021, + 0xffff, 0x1035, 0x0002, 0x09e9, 0x09ed, 0x0002, 0x0021, 0x1040, + 0x1040, 0x0002, 0x0021, 0x1056, 0x1056, 0x0003, 0x09f5, 0x09f8, + 0x09fc, 0x0001, 0x0021, 0x102a, 0x0002, 0x0021, 0xffff, 0x1035, + 0x0002, 0x09ff, 0x0a03, 0x0002, 0x0021, 0x1040, 0x1040, 0x0002, + 0x0021, 0x1056, 0x1056, 0x0001, 0x0a09, 0x0001, 0x0021, 0x106c, + // Entry 19E00 - 19E3F + 0x0001, 0x0a0e, 0x0001, 0x0021, 0x106c, 0x0001, 0x0a13, 0x0001, + 0x0021, 0x106c, 0x0004, 0x0a1b, 0x0a20, 0x0a25, 0x0a34, 0x0003, + 0x0021, 0x1084, 0x109a, 0x10ad, 0x0003, 0x0021, 0x10bc, 0x10c7, + 0x10e3, 0x0002, 0x0000, 0x0a28, 0x0003, 0x0000, 0x0a2f, 0x0a2c, + 0x0001, 0x0021, 0x10f7, 0x0003, 0x0021, 0xffff, 0x1118, 0x1141, + 0x0002, 0x0000, 0x0a37, 0x0003, 0x0adb, 0x0b7b, 0x0a3b, 0x009e, + 0x0021, 0x115e, 0x1178, 0x1195, 0x11b0, 0x11f1, 0x1255, 0x1307, + 0x1366, 0x13d5, 0x144a, 0x14c9, 0x152d, 0x157f, 0x15cf, 0x162d, + // Entry 19E40 - 19E7F + 0x1696, 0x1706, 0x1768, 0x17d3, 0x1857, 0x18e0, 0x1957, 0x19d6, + 0x1a4e, 0x1a9e, 0x1ae4, 0x1af6, 0x1b22, 0x1b6c, 0x1baa, 0x1bf2, + 0x1c24, 0x1c78, 0x1cc0, 0x1d10, 0x1d5e, 0x1d7f, 0x1db0, 0x1e0b, + 0x1e67, 0x1ea1, 0x1eb3, 0x1ed2, 0x1f0c, 0x1f64, 0x1f95, 0x1ffe, + 0x204a, 0x20a8, 0x2115, 0x2181, 0x21bb, 0x21da, 0x2221, 0x223b, + 0x2265, 0x22ab, 0x22ca, 0x22fd, 0x236e, 0x23db, 0x23fd, 0x2430, + 0x24a3, 0x24fb, 0x2535, 0x2543, 0x2560, 0x2576, 0x2595, 0x25b2, + 0x25e1, 0x2637, 0x2697, 0x26ed, 0x275a, 0x27da, 0x27f9, 0x2826, + // Entry 19E80 - 19EBF + 0x285c, 0x288e, 0x28e4, 0x2910, 0x293d, 0x29d1, 0x2a08, 0x2a4e, + 0x2a60, 0x2a74, 0x2a8a, 0x2abb, 0x2af9, 0x2b2f, 0x2ba6, 0x2c11, + 0x2c79, 0x2cb3, 0x2cc9, 0x2cdd, 0x2d10, 0x2d87, 0x2deb, 0x2e3d, + 0x2e4f, 0x2e9a, 0x2f52, 0x2fb6, 0x300a, 0x3050, 0x3064, 0x309e, + 0x30f6, 0x3142, 0x3188, 0x31ce, 0x3236, 0x324e, 0x3262, 0x32f6, + 0x330c, 0x3334, 0x338e, 0x33e2, 0x3420, 0x3430, 0x3446, 0x3465, + 0x3486, 0x349c, 0x34ac, 0x34d2, 0x3510, 0x352a, 0x3552, 0x3590, + 0x35bc, 0x360a, 0x3634, 0x3692, 0x36f0, 0x3732, 0x3767, 0x37d7, + // Entry 19EC0 - 19EFF + 0x3821, 0x3833, 0x384e, 0x3886, 0x38ea, 0x23c2, 0x2f08, 0xffff, + 0x12ad, 0xffff, 0xffff, 0xffff, 0x28fe, 0x298f, 0x329e, 0x009e, + 0x0021, 0xffff, 0xffff, 0xffff, 0xffff, 0x11d6, 0x1241, 0x12f3, + 0x1349, 0x13ba, 0x1425, 0x14ae, 0x1519, 0x156f, 0x15b9, 0x1615, + 0x1677, 0x16ee, 0x1750, 0x17b2, 0x182f, 0x18c1, 0x1938, 0x19af, + 0x1a3e, 0x1a88, 0xffff, 0xffff, 0x1b0a, 0xffff, 0x1b93, 0xffff, + 0x1c0f, 0x1c68, 0x1cb2, 0x1cf6, 0xffff, 0xffff, 0x1d9c, 0x1df2, + 0x1e57, 0xffff, 0xffff, 0xffff, 0x1eed, 0xffff, 0x1f7a, 0x1fe5, + // Entry 19F00 - 19F3F + 0xffff, 0x208f, 0x20f4, 0x2171, 0xffff, 0xffff, 0xffff, 0xffff, + 0x224f, 0xffff, 0xffff, 0x22e0, 0x2351, 0xffff, 0xffff, 0x240f, + 0x248c, 0x24eb, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x25cf, 0x261f, 0x2681, 0x26dd, 0x2727, 0xffff, 0xffff, 0x2818, + 0xffff, 0x2870, 0xffff, 0xffff, 0x292b, 0xffff, 0x29f2, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2aa9, 0xffff, 0x2b0d, 0x2b8d, 0x2bf2, + 0x2c69, 0xffff, 0xffff, 0xffff, 0x2ced, 0x2d70, 0x2dcf, 0xffff, + 0xffff, 0x2e70, 0x2f36, 0x2fa4, 0x2ff4, 0xffff, 0xffff, 0x3086, + // Entry 19F40 - 19F7F + 0x30e8, 0x312c, 0xffff, 0x31a7, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x331e, 0x337a, 0x33d0, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x34c0, 0xffff, 0xffff, 0x3540, 0xffff, + 0x35a2, 0xffff, 0x361e, 0x367a, 0x36dc, 0xffff, 0x3748, 0x37bf, + 0xffff, 0xffff, 0xffff, 0x3870, 0x38cc, 0xffff, 0xffff, 0xffff, + 0x1297, 0xffff, 0xffff, 0xffff, 0xffff, 0x297b, 0x327f, 0x009e, + 0x0021, 0xffff, 0xffff, 0xffff, 0xffff, 0x1215, 0x1272, 0x1324, + 0x138c, 0x13f9, 0x1478, 0x14ed, 0x154a, 0x1598, 0x15ee, 0x164e, + // Entry 19F80 - 19FBF + 0x16be, 0x1727, 0x1789, 0x17fd, 0x1888, 0x1908, 0x197f, 0x1a06, + 0x1a67, 0x1abd, 0xffff, 0xffff, 0x1b43, 0xffff, 0x1bca, 0xffff, + 0x1c42, 0x1c91, 0x1cd7, 0x1d33, 0xffff, 0xffff, 0x1dcd, 0x1e2d, + 0x1e80, 0xffff, 0xffff, 0xffff, 0x1f34, 0xffff, 0x1fb9, 0x2020, + 0xffff, 0x20ca, 0x213f, 0x219a, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2284, 0xffff, 0xffff, 0x2323, 0x2394, 0xffff, 0xffff, 0x245a, + 0x24c3, 0x2514, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x25fc, 0x2658, 0x26b6, 0x2706, 0x2796, 0xffff, 0xffff, 0x283d, + // Entry 19FC0 - 19FFF + 0xffff, 0x28b5, 0xffff, 0xffff, 0x2958, 0xffff, 0x2a27, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2ad6, 0xffff, 0x2b5a, 0x2bc8, 0x2c39, + 0x2c92, 0xffff, 0xffff, 0xffff, 0x2d3c, 0x2da7, 0x2e10, 0xffff, + 0xffff, 0x2ecd, 0x2f77, 0x2fd1, 0x3029, 0xffff, 0xffff, 0x30bf, + 0x310d, 0x3161, 0xffff, 0x31fe, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x3353, 0x33ab, 0x33fd, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x34ed, 0xffff, 0xffff, 0x356d, 0xffff, + 0x35df, 0xffff, 0x3653, 0x36b3, 0x370d, 0xffff, 0x378f, 0x37f8, + // Entry 1A000 - 1A03F + 0xffff, 0xffff, 0xffff, 0x38a5, 0x3911, 0xffff, 0xffff, 0xffff, + 0x12cc, 0xffff, 0xffff, 0xffff, 0xffff, 0x29ac, 0x32c6, 0x0001, + 0x0002, 0x0011, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0014, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0141, 0x0008, 0x001d, 0x0000, 0x0082, 0x00a9, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0002, 0x0020, 0x0051, 0x0003, + 0x0024, 0x0033, 0x0042, 0x000d, 0x0003, 0xffff, 0x0d88, 0x2238, + 0x2245, 0x224e, 0x2259, 0x225e, 0x2265, 0x226c, 0x2275, 0x2282, + // Entry 1A040 - 1A07F + 0x228f, 0x229a, 0x000d, 0x0021, 0xffff, 0x05a9, 0x04f1, 0x04f4, + 0x0928, 0x04f4, 0x05a9, 0x05a9, 0x0928, 0x3940, 0x0928, 0x3943, + 0x0937, 0x000d, 0x0022, 0xffff, 0x0000, 0x000b, 0x0018, 0x0021, + 0x002c, 0x0031, 0x0038, 0x0043, 0x004c, 0x0059, 0x0066, 0x0071, + 0x0003, 0x0055, 0x0064, 0x0073, 0x000d, 0x0022, 0xffff, 0x0000, + 0x000b, 0x0018, 0x0021, 0x002c, 0x0031, 0x0038, 0x0043, 0x004c, + 0x0059, 0x0066, 0x0071, 0x000d, 0x0021, 0xffff, 0x05a9, 0x04f1, + 0x04f4, 0x0928, 0x04f4, 0x05a9, 0x05a9, 0x0928, 0x3940, 0x0928, + // Entry 1A080 - 1A0BF + 0x3943, 0x0937, 0x000d, 0x0022, 0xffff, 0x0000, 0x000b, 0x0018, + 0x0021, 0x002c, 0x0031, 0x0038, 0x0043, 0x004c, 0x0059, 0x0066, + 0x0071, 0x0002, 0x0085, 0x0097, 0x0003, 0x0089, 0x0000, 0x0090, + 0x0005, 0x0022, 0xffff, 0x007c, 0x0081, 0x0086, 0x008b, 0x0005, + 0x0022, 0xffff, 0x0090, 0x009e, 0x00ac, 0x00ba, 0x0003, 0x009b, + 0x0000, 0x00a2, 0x0005, 0x0022, 0xffff, 0x007c, 0x0081, 0x0086, + 0x008b, 0x0005, 0x0022, 0xffff, 0x0090, 0x009e, 0x00ac, 0x00ba, + 0x0002, 0x00ac, 0x0101, 0x0003, 0x00b0, 0x00cb, 0x00e6, 0x0008, + // Entry 1A0C0 - 1A0FF + 0x0000, 0x0000, 0x00b9, 0x00bf, 0x00c2, 0x00c5, 0x00c8, 0x00bc, + 0x0001, 0x0021, 0x064b, 0x0001, 0x0021, 0x0662, 0x0001, 0x0021, + 0x0670, 0x0001, 0x0022, 0x00cc, 0x0001, 0x0022, 0x00e1, 0x0001, + 0x0021, 0x067e, 0x0008, 0x0000, 0x0000, 0x00d4, 0x00da, 0x00dd, + 0x00e0, 0x00e3, 0x00d7, 0x0001, 0x0021, 0x3943, 0x0001, 0x0021, + 0x0686, 0x0001, 0x0003, 0x0340, 0x0001, 0x0021, 0x0669, 0x0001, + 0x0021, 0x0931, 0x0001, 0x0021, 0x0931, 0x0008, 0x0000, 0x0000, + 0x00ef, 0x00f5, 0x00f8, 0x00fb, 0x00fe, 0x00f2, 0x0001, 0x0021, + // Entry 1A100 - 1A13F + 0x064b, 0x0001, 0x0021, 0x0662, 0x0001, 0x0021, 0x0670, 0x0001, + 0x0022, 0x00cc, 0x0001, 0x0022, 0x00e1, 0x0001, 0x0021, 0x067e, + 0x0003, 0x0105, 0x0119, 0x012d, 0x0007, 0x0000, 0x0000, 0x0000, + 0x010d, 0x0110, 0x0113, 0x0116, 0x0001, 0x0021, 0x0670, 0x0001, + 0x0022, 0x00cc, 0x0001, 0x0022, 0x00e1, 0x0001, 0x0021, 0x067e, + 0x0007, 0x0000, 0x0000, 0x0000, 0x0121, 0x0124, 0x0127, 0x012a, + 0x0001, 0x0003, 0x0340, 0x0001, 0x0022, 0x00cc, 0x0001, 0x0022, + 0x00e1, 0x0001, 0x0021, 0x0931, 0x0007, 0x0000, 0x0000, 0x0000, + // Entry 1A140 - 1A17F + 0x0135, 0x0138, 0x013b, 0x013e, 0x0001, 0x0021, 0x0670, 0x0001, + 0x0022, 0x00cc, 0x0001, 0x0022, 0x00e1, 0x0001, 0x0021, 0x067e, + 0x0001, 0x0143, 0x0002, 0x0146, 0x0159, 0x0003, 0x0000, 0x0000, + 0x014a, 0x000d, 0x0022, 0xffff, 0x00e8, 0x00ef, 0x00f6, 0x00ff, + 0x010a, 0x0111, 0x011e, 0x0129, 0x0132, 0x0139, 0x0140, 0x0147, + 0x0002, 0x0000, 0x015c, 0x000d, 0x0014, 0xffff, 0x01c8, 0x3500, + 0x3503, 0x3506, 0x3509, 0x3506, 0x350c, 0x350f, 0x3512, 0x3503, + 0x3515, 0x01c8, 0x0002, 0x0003, 0x00e9, 0x0008, 0x0000, 0x0000, + // Entry 1A180 - 1A1BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, + 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, 0x0002, 0x0000, 0x0001, + 0x0002, 0x0010, 0x0001, 0x0002, 0x0044, 0x0001, 0x0000, 0x240c, + 0x0008, 0x002f, 0x0066, 0x008b, 0x009f, 0x00b7, 0x00c7, 0x00d8, + 0x0000, 0x0002, 0x0032, 0x0054, 0x0003, 0x0036, 0x0000, 0x0045, + 0x000d, 0x0022, 0xffff, 0x014e, 0x0152, 0x0156, 0x015a, 0x015e, + 0x0162, 0x0166, 0x016a, 0x016e, 0x0172, 0x0176, 0x017a, 0x000d, + // Entry 1A1C0 - 1A1FF + 0x0022, 0xffff, 0x017e, 0x0184, 0x018a, 0x0190, 0x0198, 0x019f, + 0x01a5, 0x01ab, 0x01b0, 0x01b7, 0x01c0, 0x01c6, 0x0002, 0x0000, + 0x0057, 0x000d, 0x0000, 0xffff, 0x2002, 0x200c, 0x1f9a, 0x2002, + 0x2008, 0x1ffe, 0x1f9a, 0x2142, 0x2002, 0x23b1, 0x2142, 0x213d, + 0x0002, 0x0069, 0x007f, 0x0003, 0x006d, 0x0000, 0x0076, 0x0007, + 0x0022, 0x01cc, 0x01d0, 0x01d5, 0x01d9, 0x01dd, 0x01e1, 0x01e5, + 0x0007, 0x0022, 0x01e9, 0x01ee, 0x01f6, 0x01ff, 0x0209, 0x0213, + 0x021a, 0x0002, 0x0000, 0x0082, 0x0007, 0x0000, 0x2008, 0x1f9c, + // Entry 1A200 - 1A23F + 0x1f9a, 0x1f96, 0x1f96, 0x1f9a, 0x213b, 0x0001, 0x008d, 0x0003, + 0x0091, 0x0000, 0x0098, 0x0005, 0x001d, 0xffff, 0x1674, 0x1677, + 0x167a, 0x167d, 0x0005, 0x0022, 0xffff, 0x0225, 0x022e, 0x0237, + 0x0240, 0x0001, 0x00a1, 0x0003, 0x00a5, 0x0000, 0x00ae, 0x0002, + 0x00a8, 0x00ab, 0x0001, 0x0022, 0x0249, 0x0001, 0x0022, 0x0250, + 0x0002, 0x00b1, 0x00b4, 0x0001, 0x0022, 0x0249, 0x0001, 0x0022, + 0x0250, 0x0003, 0x00c1, 0x0000, 0x00bb, 0x0001, 0x00bd, 0x0002, + 0x0022, 0x0259, 0x0263, 0x0001, 0x00c3, 0x0002, 0x0022, 0x026f, + // Entry 1A240 - 1A27F + 0x0273, 0x0004, 0x00d5, 0x00cf, 0x00cc, 0x00d2, 0x0001, 0x0002, + 0x0025, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x0282, 0x0001, + 0x0002, 0x028b, 0x0004, 0x00e6, 0x00e0, 0x00dd, 0x00e3, 0x0001, + 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, + 0x0001, 0x0000, 0x0546, 0x0040, 0x012a, 0x0000, 0x0000, 0x012f, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0134, 0x0000, 0x0000, + 0x0139, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x013e, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0149, 0x0000, 0x0000, 0x0000, + // Entry 1A280 - 1A2BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x014e, 0x0000, 0x0153, 0x0000, 0x0000, 0x0158, 0x0000, 0x0000, + 0x015d, 0x0000, 0x0000, 0x0162, 0x0001, 0x012c, 0x0001, 0x0022, + 0x0277, 0x0001, 0x0131, 0x0001, 0x0022, 0x027f, 0x0001, 0x0136, + 0x0001, 0x0022, 0x0288, 0x0001, 0x013b, 0x0001, 0x0022, 0x028e, + 0x0002, 0x0141, 0x0144, 0x0001, 0x0022, 0x0296, 0x0003, 0x0022, + // Entry 1A2C0 - 1A2FF + 0x029e, 0x02a5, 0x02ac, 0x0001, 0x014b, 0x0001, 0x0022, 0x02b4, + 0x0001, 0x0150, 0x0001, 0x0022, 0x02c4, 0x0001, 0x0155, 0x0001, + 0x0022, 0x02cb, 0x0001, 0x015a, 0x0001, 0x0022, 0x02d1, 0x0001, + 0x015f, 0x0001, 0x0022, 0x02d8, 0x0001, 0x0164, 0x0001, 0x0022, + 0x02e1, 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000b, 0x0007, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0013, 0x0004, 0x0021, 0x001b, 0x0018, + 0x001e, 0x0001, 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, + // Entry 1A300 - 1A33F + 0x0002, 0x04fe, 0x0001, 0x0002, 0x0508, 0x0003, 0x0004, 0x053c, + 0x09bd, 0x0012, 0x0017, 0x0044, 0x005e, 0x0000, 0x00c5, 0x0000, + 0x012c, 0x0157, 0x0392, 0x0406, 0x0466, 0x0000, 0x0000, 0x0000, + 0x0000, 0x04a8, 0x04c0, 0x0520, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0020, 0x0033, 0x0000, 0x9006, 0x0003, 0x0029, 0x002e, + 0x0024, 0x0001, 0x0026, 0x0001, 0x0022, 0x02ef, 0x0001, 0x002b, + 0x0001, 0x0000, 0x0000, 0x0001, 0x0030, 0x0001, 0x0000, 0x0000, + 0x0004, 0x0041, 0x003b, 0x0038, 0x003e, 0x0001, 0x0022, 0x0301, + // Entry 1A340 - 1A37F + 0x0001, 0x0014, 0x035a, 0x0001, 0x0008, 0x0627, 0x0001, 0x0008, + 0x062f, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x004d, + 0x0000, 0x0000, 0x0004, 0x005b, 0x0055, 0x0052, 0x0058, 0x0001, + 0x0022, 0x0312, 0x0001, 0x0018, 0x042e, 0x0001, 0x0018, 0x042e, + 0x0001, 0x0018, 0x042e, 0x0005, 0x0064, 0x0000, 0x0000, 0x0000, + 0x00af, 0x0002, 0x0067, 0x008b, 0x0003, 0x006b, 0x0000, 0x007b, + 0x000e, 0x0022, 0xffff, 0x031d, 0x0328, 0x0333, 0x033f, 0x034a, + 0x0354, 0x0360, 0x036e, 0x037d, 0x038a, 0x0395, 0x039f, 0x03ab, + // Entry 1A380 - 1A3BF + 0x000e, 0x0022, 0xffff, 0x031d, 0x0328, 0x0333, 0x033f, 0x034a, + 0x0354, 0x0360, 0x036e, 0x037d, 0x038a, 0x0395, 0x039f, 0x03ab, + 0x0003, 0x008f, 0x0000, 0x009f, 0x000e, 0x0022, 0xffff, 0x03bf, + 0x03c5, 0x03cb, 0x03d2, 0x03d8, 0x03dd, 0x03e4, 0x03ed, 0x03f7, + 0x03ff, 0x0405, 0x040a, 0x0411, 0x000e, 0x0022, 0xffff, 0x0420, + 0x0429, 0x0432, 0x043c, 0x0445, 0x044d, 0x0457, 0x0463, 0x0470, + 0x047b, 0x0484, 0x048c, 0x0496, 0x0003, 0x00b9, 0x00bf, 0x00b3, + 0x0001, 0x00b5, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x00bb, + // Entry 1A3C0 - 1A3FF + 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x00c1, 0x0002, 0x0000, + 0x0425, 0x042a, 0x0005, 0x00cb, 0x0000, 0x0000, 0x0000, 0x0116, + 0x0002, 0x00ce, 0x00f2, 0x0003, 0x00d2, 0x0000, 0x00e2, 0x000e, + 0x0022, 0xffff, 0x04a8, 0x04b9, 0x04c9, 0x04d7, 0x04e7, 0x04f4, + 0x0502, 0x0510, 0x051d, 0x052a, 0x0535, 0x0542, 0x054f, 0x000e, + 0x0022, 0xffff, 0x04a8, 0x04b9, 0x04c9, 0x04d7, 0x04e7, 0x04f4, + 0x0502, 0x0510, 0x051d, 0x052a, 0x0535, 0x0542, 0x054f, 0x0003, + 0x00f6, 0x0000, 0x0106, 0x000e, 0x0022, 0xffff, 0x055e, 0x056d, + // Entry 1A400 - 1A43F + 0x057b, 0x0587, 0x0595, 0x05a0, 0x05ac, 0x05b8, 0x05c3, 0x05ce, + 0x05d7, 0x05e2, 0x05ed, 0x000e, 0x0022, 0xffff, 0x055e, 0x056d, + 0x057b, 0x0587, 0x0595, 0x05a0, 0x05ac, 0x05b8, 0x05c3, 0x05ce, + 0x05d7, 0x05e2, 0x05ed, 0x0003, 0x0120, 0x0126, 0x011a, 0x0001, + 0x011c, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x0122, 0x0002, + 0x0000, 0x0425, 0x042a, 0x0001, 0x0128, 0x0002, 0x0000, 0x0425, + 0x042a, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0135, + 0x0000, 0x0146, 0x0004, 0x0143, 0x013d, 0x013a, 0x0140, 0x0001, + // Entry 1A440 - 1A47F + 0x0022, 0x0301, 0x0001, 0x0014, 0x035a, 0x0001, 0x0008, 0x0627, + 0x0001, 0x0008, 0x062f, 0x0004, 0x0154, 0x014e, 0x014b, 0x0151, + 0x0001, 0x0022, 0x05fa, 0x0001, 0x0022, 0x05fa, 0x0001, 0x0022, + 0x05fa, 0x0001, 0x0000, 0x03c6, 0x0008, 0x0160, 0x01c5, 0x021c, + 0x0251, 0x033a, 0x035f, 0x0370, 0x0381, 0x0002, 0x0163, 0x0194, + 0x0003, 0x0167, 0x0176, 0x0185, 0x000d, 0x0022, 0xffff, 0x0608, + 0x0610, 0x0618, 0x0621, 0x0629, 0x0631, 0x0639, 0x0642, 0x0648, + 0x064f, 0x0656, 0x065f, 0x000d, 0x0000, 0xffff, 0x04dd, 0x19c7, + // Entry 1A480 - 1A4BF + 0x2357, 0x19c7, 0x04dd, 0x214f, 0x19c7, 0x2146, 0x235b, 0x2296, + 0x2357, 0x1e5d, 0x000d, 0x0022, 0xffff, 0x0667, 0x0672, 0x067d, + 0x0689, 0x0694, 0x069f, 0x06aa, 0x06b6, 0x06bf, 0x06c9, 0x06d3, + 0x06df, 0x0003, 0x0198, 0x01a7, 0x01b6, 0x000d, 0x0022, 0xffff, + 0x06ea, 0x06f0, 0x06f6, 0x06fd, 0x0703, 0x0709, 0x070f, 0x0716, + 0x071a, 0x071f, 0x0724, 0x072b, 0x000d, 0x0000, 0xffff, 0x04dd, + 0x19c7, 0x2357, 0x19c7, 0x04dd, 0x214f, 0x19c7, 0x2146, 0x235b, + 0x2296, 0x2357, 0x1e5d, 0x000d, 0x0022, 0xffff, 0x0731, 0x073a, + // Entry 1A4C0 - 1A4FF + 0x0743, 0x074d, 0x0756, 0x075f, 0x0768, 0x0772, 0x0779, 0x0781, + 0x0789, 0x0793, 0x0002, 0x01c8, 0x01f2, 0x0005, 0x01ce, 0x01d7, + 0x01e9, 0x0000, 0x01e0, 0x0007, 0x0022, 0x079c, 0x079f, 0x07a2, + 0x07a5, 0x07a8, 0x07ab, 0x07ae, 0x0007, 0x0000, 0x235b, 0x2357, + 0x04dd, 0x214f, 0x04dd, 0x21dd, 0x2296, 0x0007, 0x0022, 0x079c, + 0x079f, 0x07a2, 0x07a5, 0x07a8, 0x07ab, 0x07ae, 0x0007, 0x0022, + 0x07b1, 0x07bd, 0x07c9, 0x07d3, 0x07e1, 0x07eb, 0x07f7, 0x0005, + 0x01f8, 0x0201, 0x0213, 0x0000, 0x020a, 0x0007, 0x0022, 0x079c, + // Entry 1A500 - 1A53F + 0x079f, 0x07a2, 0x07a5, 0x07a8, 0x07ab, 0x07ae, 0x0007, 0x0000, + 0x235b, 0x2357, 0x04dd, 0x214f, 0x04dd, 0x21dd, 0x2296, 0x0007, + 0x0022, 0x079c, 0x079f, 0x07a2, 0x07a5, 0x07a8, 0x07ab, 0x07ae, + 0x0007, 0x0022, 0x0802, 0x080c, 0x0816, 0x081e, 0x082a, 0x0832, + 0x083c, 0x0002, 0x021f, 0x0238, 0x0003, 0x0223, 0x022a, 0x0231, + 0x0005, 0x0022, 0xffff, 0x0845, 0x084e, 0x0857, 0x0860, 0x0005, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0022, + 0xffff, 0x0869, 0x0877, 0x0885, 0x0893, 0x0003, 0x023c, 0x0243, + // Entry 1A540 - 1A57F + 0x024a, 0x0005, 0x0022, 0xffff, 0x0845, 0x084e, 0x0857, 0x0860, + 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, + 0x0022, 0xffff, 0x0869, 0x0877, 0x0885, 0x0893, 0x0002, 0x0254, + 0x02c7, 0x0003, 0x0258, 0x027d, 0x02a2, 0x0009, 0x0265, 0x026b, + 0x0262, 0x026e, 0x0274, 0x0277, 0x027a, 0x0268, 0x0271, 0x0001, + 0x0022, 0x08a1, 0x0001, 0x0022, 0x08ae, 0x0001, 0x0022, 0x08b2, + 0x0001, 0x0022, 0x08ba, 0x0001, 0x0022, 0x08be, 0x0001, 0x0022, + 0x08c6, 0x0001, 0x0022, 0x08cd, 0x0001, 0x0022, 0x08d4, 0x0001, + // Entry 1A580 - 1A5BF + 0x0022, 0x08dc, 0x0009, 0x028a, 0x0290, 0x0287, 0x0293, 0x0299, + 0x029c, 0x029f, 0x028d, 0x0296, 0x0001, 0x0022, 0x08e4, 0x0001, + 0x0022, 0x08ae, 0x0001, 0x0022, 0x08e8, 0x0001, 0x0022, 0x08ba, + 0x0001, 0x0022, 0x08be, 0x0001, 0x0022, 0x08ae, 0x0001, 0x0022, + 0x08ba, 0x0001, 0x0022, 0x08d4, 0x0001, 0x0022, 0x08dc, 0x0009, + 0x02af, 0x02b5, 0x02ac, 0x02b8, 0x02be, 0x02c1, 0x02c4, 0x02b2, + 0x02bb, 0x0001, 0x0022, 0x08a1, 0x0001, 0x0022, 0x08ae, 0x0001, + 0x0022, 0x08ec, 0x0001, 0x0022, 0x08ba, 0x0001, 0x0022, 0x08be, + // Entry 1A5C0 - 1A5FF + 0x0001, 0x0022, 0x08fd, 0x0001, 0x0022, 0x090d, 0x0001, 0x0022, + 0x08d4, 0x0001, 0x0022, 0x08dc, 0x0003, 0x02cb, 0x02f0, 0x0315, + 0x0009, 0x02d8, 0x02de, 0x02d5, 0x02e1, 0x02e7, 0x02ea, 0x02ed, + 0x02db, 0x02e4, 0x0001, 0x0022, 0x091d, 0x0001, 0x0022, 0x08ae, + 0x0001, 0x0022, 0x08b2, 0x0001, 0x0022, 0x08ba, 0x0001, 0x0022, + 0x0926, 0x0001, 0x0022, 0x08c6, 0x0001, 0x0022, 0x08cd, 0x0001, + 0x0022, 0x092b, 0x0001, 0x0022, 0x0930, 0x0009, 0x02fd, 0x0303, + 0x02fa, 0x0306, 0x030c, 0x030f, 0x0312, 0x0300, 0x0309, 0x0001, + // Entry 1A600 - 1A63F + 0x0022, 0x08e4, 0x0001, 0x0022, 0x08ae, 0x0001, 0x0022, 0x08e8, + 0x0001, 0x0022, 0x08ba, 0x0001, 0x0022, 0x0926, 0x0001, 0x0022, + 0x08ae, 0x0001, 0x0022, 0x08ba, 0x0001, 0x0022, 0x092b, 0x0001, + 0x0022, 0x0930, 0x0009, 0x0322, 0x0328, 0x031f, 0x032b, 0x0331, + 0x0334, 0x0337, 0x0325, 0x032e, 0x0001, 0x0022, 0x091d, 0x0001, + 0x0022, 0x08ae, 0x0001, 0x0022, 0x0934, 0x0001, 0x0022, 0x08ba, + 0x0001, 0x0022, 0x0926, 0x0001, 0x0022, 0x0941, 0x0001, 0x0022, + 0x094d, 0x0001, 0x0022, 0x092b, 0x0001, 0x0022, 0x0930, 0x0003, + // Entry 1A640 - 1A67F + 0x0349, 0x0354, 0x033e, 0x0002, 0x0341, 0x0345, 0x0002, 0x0022, + 0x0959, 0x098c, 0x0002, 0x0022, 0x0975, 0x09aa, 0x0002, 0x034c, + 0x0350, 0x0002, 0x0022, 0x09c3, 0x09cd, 0x0002, 0x0022, 0x09c8, + 0x09d2, 0x0002, 0x0357, 0x035b, 0x0002, 0x0016, 0x0283, 0x2562, + 0x0002, 0x0022, 0x09d7, 0x09db, 0x0004, 0x036d, 0x0367, 0x0364, + 0x036a, 0x0001, 0x0022, 0x09df, 0x0001, 0x0014, 0x0792, 0x0001, + 0x0018, 0x042e, 0x0001, 0x0018, 0x042e, 0x0004, 0x037e, 0x0378, + 0x0375, 0x037b, 0x0001, 0x001d, 0x0547, 0x0001, 0x001d, 0x0554, + // Entry 1A680 - 1A6BF + 0x0001, 0x001d, 0x055e, 0x0001, 0x001d, 0x0566, 0x0004, 0x038f, + 0x0389, 0x0386, 0x038c, 0x0001, 0x0022, 0x05fa, 0x0001, 0x0022, + 0x05fa, 0x0001, 0x0022, 0x05fa, 0x0001, 0x0000, 0x03c6, 0x0005, + 0x0398, 0x0000, 0x0000, 0x0000, 0x03f3, 0x0002, 0x039b, 0x03bf, + 0x0003, 0x039f, 0x0000, 0x03af, 0x000e, 0x0022, 0x0a24, 0x09ee, + 0x09f6, 0x09ff, 0x0a07, 0x0a0e, 0x0a16, 0x0a1e, 0x0a2d, 0x0a34, + 0x0a3b, 0x0a42, 0x0a4a, 0x0a4d, 0x000e, 0x0022, 0x0aac, 0x0a53, + 0x0a60, 0x0a6e, 0x0a7b, 0x0a87, 0x0a94, 0x0aa1, 0x0aba, 0x0ac6, + // Entry 1A6C0 - 1A6FF + 0x0ad2, 0x0ade, 0x0aeb, 0x0af3, 0x0003, 0x03c3, 0x03d3, 0x03e3, + 0x000e, 0x0022, 0x0a24, 0x09ee, 0x09f6, 0x09ff, 0x0a07, 0x0a0e, + 0x0a16, 0x0a1e, 0x0a2d, 0x0a34, 0x0a3b, 0x0a42, 0x0a4a, 0x0a4d, + 0x000e, 0x0000, 0x241f, 0x04dd, 0x19c7, 0x214f, 0x04dd, 0x235b, + 0x241f, 0x241f, 0x236c, 0x204d, 0x235b, 0x04dd, 0x241f, 0x2146, + 0x000e, 0x0022, 0x0b49, 0x0afe, 0x0b09, 0x0b15, 0x0b20, 0x0b2a, + 0x0b35, 0x0b40, 0x0b55, 0x0b5f, 0x0b69, 0x0b73, 0x0b7e, 0x0b84, + 0x0003, 0x03fc, 0x0401, 0x03f7, 0x0001, 0x03f9, 0x0001, 0x0022, + // Entry 1A700 - 1A73F + 0x0b8d, 0x0001, 0x03fe, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0403, + 0x0001, 0x0000, 0x04ef, 0x0005, 0x040c, 0x0000, 0x0000, 0x0000, + 0x0453, 0x0002, 0x040f, 0x0431, 0x0003, 0x0413, 0x0000, 0x0422, + 0x000d, 0x0022, 0xffff, 0x0b98, 0x0ba5, 0x0bb3, 0x0bc1, 0x0bcd, + 0x0bda, 0x0be6, 0x0bf2, 0x0bff, 0x0c0f, 0x0c1a, 0x0c25, 0x000d, + 0x0022, 0xffff, 0x0b98, 0x0ba5, 0x0bb3, 0x0bc1, 0x0bcd, 0x0bda, + 0x0be6, 0x0bf2, 0x0bff, 0x0c0f, 0x0c1a, 0x0c25, 0x0003, 0x0435, + 0x0000, 0x0444, 0x000d, 0x0016, 0xffff, 0x0334, 0x033c, 0x0345, + // Entry 1A740 - 1A77F + 0x034e, 0x0355, 0x035d, 0x0364, 0x036b, 0x0373, 0x037e, 0x0384, + 0x038a, 0x000d, 0x0022, 0xffff, 0x0c33, 0x0c3e, 0x0c4a, 0x0c56, + 0x0c60, 0x0c6b, 0x0c75, 0x0c7f, 0x0c8a, 0x0c98, 0x0ca1, 0x0caa, + 0x0003, 0x045c, 0x0461, 0x0457, 0x0001, 0x0459, 0x0001, 0x0022, + 0x0cb6, 0x0001, 0x045e, 0x0001, 0x0000, 0x0601, 0x0001, 0x0463, + 0x0001, 0x0000, 0x0601, 0x0005, 0x046c, 0x0000, 0x0000, 0x0000, + 0x0495, 0x0002, 0x046f, 0x0482, 0x0003, 0x0000, 0x0000, 0x0473, + 0x000d, 0x0016, 0xffff, 0x0393, 0x039c, 0x2566, 0x2577, 0x2588, + // Entry 1A780 - 1A7BF + 0x2597, 0x25a9, 0x25b1, 0x03d7, 0x25bb, 0x25c3, 0x25d1, 0x0003, + 0x0000, 0x0000, 0x0486, 0x000d, 0x0016, 0xffff, 0x0393, 0x039c, + 0x2566, 0x2577, 0x2588, 0x2597, 0x25a9, 0x25b1, 0x03d7, 0x25bb, + 0x25c3, 0x25d1, 0x0003, 0x049e, 0x04a3, 0x0499, 0x0001, 0x049b, + 0x0001, 0x0022, 0x0cc6, 0x0001, 0x04a0, 0x0001, 0x0000, 0x06c8, + 0x0001, 0x04a5, 0x0001, 0x0000, 0x06c8, 0x0006, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x04af, 0x0004, 0x04bd, 0x04b7, 0x04b4, + 0x04ba, 0x0001, 0x0022, 0x0301, 0x0001, 0x0014, 0x035a, 0x0001, + // Entry 1A7C0 - 1A7FF + 0x0008, 0x0627, 0x0001, 0x0008, 0x062f, 0x0005, 0x04c6, 0x0000, + 0x0000, 0x0000, 0x050d, 0x0002, 0x04c9, 0x04eb, 0x0003, 0x04cd, + 0x0000, 0x04dc, 0x000d, 0x0022, 0xffff, 0x0cd8, 0x0ce7, 0x0cf8, + 0x0d05, 0x0d0e, 0x0d1a, 0x0d29, 0x0d33, 0x0d3d, 0x0d47, 0x0d50, + 0x0d5c, 0x000d, 0x0022, 0xffff, 0x0cd8, 0x0ce7, 0x0cf8, 0x0d05, + 0x0d0e, 0x0d1a, 0x0d29, 0x0d33, 0x0d3d, 0x0d47, 0x0d50, 0x0d5c, + 0x0003, 0x04ef, 0x0000, 0x04fe, 0x000d, 0x0014, 0xffff, 0x0916, + 0x0920, 0x3486, 0x348e, 0x3492, 0x3518, 0x094d, 0x34a3, 0x34a8, + // Entry 1A800 - 1A83F + 0x34ad, 0x0963, 0x096a, 0x000d, 0x0022, 0xffff, 0x0d68, 0x0d75, + 0x0d84, 0x0d8f, 0x0d96, 0x0da0, 0x0dad, 0x0db5, 0x0dbd, 0x0dc5, + 0x0dcc, 0x0dd6, 0x0003, 0x0516, 0x051b, 0x0511, 0x0001, 0x0513, + 0x0001, 0x0022, 0x0de0, 0x0001, 0x0518, 0x0001, 0x0000, 0x1a1d, + 0x0001, 0x051d, 0x0001, 0x0000, 0x1a1d, 0x0005, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0526, 0x0003, 0x0530, 0x0536, 0x052a, 0x0001, + 0x052c, 0x0002, 0x0022, 0x0ded, 0x0e05, 0x0001, 0x0532, 0x0002, + 0x0022, 0x0e0c, 0x0e05, 0x0001, 0x0538, 0x0002, 0x0022, 0x0e0c, + // Entry 1A840 - 1A87F + 0x0e05, 0x0042, 0x057f, 0x0584, 0x0589, 0x058e, 0x05a5, 0x05bc, + 0x05d3, 0x05ea, 0x0601, 0x0618, 0x062f, 0x0646, 0x065d, 0x0678, + 0x0693, 0x06ae, 0x06b3, 0x06b8, 0x06bd, 0x06d6, 0x06ef, 0x0708, + 0x070d, 0x0712, 0x0717, 0x071c, 0x0721, 0x0726, 0x072b, 0x0730, + 0x0735, 0x0749, 0x075d, 0x0771, 0x0785, 0x0799, 0x07ad, 0x07c1, + 0x07d5, 0x07e9, 0x07fd, 0x0811, 0x0825, 0x0839, 0x084d, 0x0861, + 0x0875, 0x0889, 0x089d, 0x08b1, 0x08c5, 0x08d9, 0x08de, 0x08e3, + 0x08e8, 0x08fe, 0x0914, 0x092a, 0x0940, 0x0956, 0x096c, 0x0982, + // Entry 1A880 - 1A8BF + 0x0998, 0x09ae, 0x09b3, 0x09b8, 0x0001, 0x0581, 0x0001, 0x0022, + 0x0e1d, 0x0001, 0x0586, 0x0001, 0x0022, 0x0e1d, 0x0001, 0x058b, + 0x0001, 0x0022, 0x0e1d, 0x0003, 0x0592, 0x0595, 0x059a, 0x0001, + 0x0022, 0x0e27, 0x0003, 0x0022, 0x0e2d, 0x0e3a, 0x0e48, 0x0002, + 0x059d, 0x05a1, 0x0002, 0x0022, 0x0e54, 0x0e54, 0x0002, 0x0022, + 0x0e7a, 0x0e69, 0x0003, 0x05a9, 0x05ac, 0x05b1, 0x0001, 0x0000, + 0x1f94, 0x0003, 0x0022, 0x0e8c, 0x0e94, 0x0e9d, 0x0002, 0x05b4, + 0x05b8, 0x0002, 0x0022, 0x0ea4, 0x0ea4, 0x0002, 0x0022, 0x0eb4, + // Entry 1A8C0 - 1A8FF + 0x0eb4, 0x0003, 0x05c0, 0x05c3, 0x05c8, 0x0001, 0x0000, 0x1f94, + 0x0003, 0x0022, 0x0e8c, 0x0e94, 0x0e9d, 0x0002, 0x05cb, 0x05cf, + 0x0002, 0x0022, 0x0ea4, 0x0ea4, 0x0002, 0x0022, 0x0eb4, 0x0eb4, + 0x0003, 0x05d7, 0x05da, 0x05df, 0x0001, 0x0022, 0x0ec1, 0x0003, + 0x0022, 0x0ed1, 0x0ee8, 0x0f00, 0x0002, 0x05e2, 0x05e6, 0x0002, + 0x0022, 0x0f16, 0x0f16, 0x0002, 0x0022, 0x0f50, 0x0f35, 0x0003, + 0x05ee, 0x05f1, 0x05f6, 0x0001, 0x0022, 0x0f6c, 0x0003, 0x0022, + 0x0f77, 0x0f8d, 0x0fa4, 0x0002, 0x05f9, 0x05fd, 0x0002, 0x0022, + // Entry 1A900 - 1A93F + 0x0fb9, 0x0fb9, 0x0002, 0x0022, 0x0feb, 0x0fd5, 0x0003, 0x0605, + 0x0608, 0x060d, 0x0001, 0x0022, 0x1004, 0x0003, 0x0022, 0x100a, + 0x1016, 0x1023, 0x0002, 0x0610, 0x0614, 0x0002, 0x0022, 0x102e, + 0x102e, 0x0002, 0x0022, 0x1042, 0x1042, 0x0003, 0x061c, 0x061f, + 0x0624, 0x0001, 0x0022, 0x1053, 0x0003, 0x0022, 0x105c, 0x1069, + 0x1078, 0x0002, 0x0627, 0x062b, 0x0002, 0x0022, 0x1084, 0x1084, + 0x0002, 0x0022, 0x10b0, 0x109c, 0x0003, 0x0633, 0x0636, 0x063b, + 0x0001, 0x0022, 0x10c5, 0x0003, 0x0022, 0x10c8, 0x10d1, 0x10dc, + // Entry 1A940 - 1A97F + 0x0002, 0x063e, 0x0642, 0x0002, 0x0022, 0x10e4, 0x10e4, 0x0002, + 0x0022, 0x10f5, 0x10f5, 0x0003, 0x064a, 0x064d, 0x0652, 0x0001, + 0x0022, 0x10c5, 0x0003, 0x0022, 0x10c8, 0x10d1, 0x10dc, 0x0002, + 0x0655, 0x0659, 0x0002, 0x0022, 0x10e4, 0x10e4, 0x0002, 0x0022, + 0x10f5, 0x10f5, 0x0004, 0x0662, 0x0665, 0x066a, 0x0675, 0x0001, + 0x0022, 0x1103, 0x0003, 0x0022, 0x110a, 0x1119, 0x112a, 0x0002, + 0x066d, 0x0671, 0x0002, 0x0022, 0x1138, 0x1138, 0x0002, 0x0022, + 0x115f, 0x114d, 0x0001, 0x0022, 0x1172, 0x0004, 0x067d, 0x0680, + // Entry 1A980 - 1A9BF + 0x0685, 0x0690, 0x0001, 0x0022, 0x1188, 0x0003, 0x0022, 0x118b, + 0x1194, 0x119f, 0x0002, 0x0688, 0x068c, 0x0002, 0x0022, 0x11a7, + 0x11a7, 0x0002, 0x0022, 0x11b8, 0x11b8, 0x0001, 0x0022, 0x1172, + 0x0004, 0x0698, 0x069b, 0x06a0, 0x06ab, 0x0001, 0x0022, 0x1188, + 0x0003, 0x0022, 0x118b, 0x1194, 0x119f, 0x0002, 0x06a3, 0x06a7, + 0x0002, 0x0022, 0x11a7, 0x11a7, 0x0002, 0x0022, 0x11b8, 0x11b8, + 0x0001, 0x0022, 0x1172, 0x0001, 0x06b0, 0x0001, 0x0022, 0x11c6, + 0x0001, 0x06b5, 0x0001, 0x0022, 0x11d7, 0x0001, 0x06ba, 0x0001, + // Entry 1A9C0 - 1A9FF + 0x0022, 0x11d7, 0x0003, 0x06c1, 0x06c4, 0x06cb, 0x0001, 0x0022, + 0x11e4, 0x0005, 0x0022, 0x11fe, 0x1204, 0x120e, 0x11ec, 0x1217, + 0x0002, 0x06ce, 0x06d2, 0x0002, 0x0022, 0x1223, 0x1223, 0x0002, + 0x0022, 0x124d, 0x123a, 0x0003, 0x06da, 0x06dd, 0x06e4, 0x0001, + 0x0022, 0x1262, 0x0005, 0x0022, 0x11fe, 0x1204, 0x126e, 0x1265, + 0x1274, 0x0002, 0x06e7, 0x06eb, 0x0002, 0x0022, 0x127d, 0x127d, + 0x0002, 0x0022, 0x128e, 0x128e, 0x0003, 0x06f3, 0x06f6, 0x06fd, + 0x0001, 0x0022, 0x1262, 0x0005, 0x0022, 0x11fe, 0x1204, 0x126e, + // Entry 1AA00 - 1AA3F + 0x1265, 0x1274, 0x0002, 0x0700, 0x0704, 0x0002, 0x0022, 0x127d, + 0x127d, 0x0002, 0x0022, 0x128e, 0x128e, 0x0001, 0x070a, 0x0001, + 0x0022, 0x129c, 0x0001, 0x070f, 0x0001, 0x0022, 0x12aa, 0x0001, + 0x0714, 0x0001, 0x0022, 0x12aa, 0x0001, 0x0719, 0x0001, 0x0022, + 0x12b3, 0x0001, 0x071e, 0x0001, 0x0022, 0x12b3, 0x0001, 0x0723, + 0x0001, 0x0022, 0x12b3, 0x0001, 0x0728, 0x0001, 0x0022, 0x12c1, + 0x0001, 0x072d, 0x0001, 0x0022, 0x12d9, 0x0001, 0x0732, 0x0001, + 0x0022, 0x12d9, 0x0003, 0x0000, 0x0739, 0x073e, 0x0003, 0x0022, + // Entry 1AA40 - 1AA7F + 0x12ee, 0x1300, 0x1313, 0x0002, 0x0741, 0x0745, 0x0002, 0x0022, + 0x1324, 0x1324, 0x0002, 0x0022, 0x1352, 0x133d, 0x0003, 0x0000, + 0x074d, 0x0752, 0x0003, 0x0022, 0x1369, 0x1372, 0x137c, 0x0002, + 0x0755, 0x0759, 0x0002, 0x0022, 0x1384, 0x1384, 0x0002, 0x0022, + 0x1395, 0x1395, 0x0003, 0x0000, 0x0761, 0x0766, 0x0003, 0x0022, + 0x1369, 0x1372, 0x137c, 0x0002, 0x0769, 0x076d, 0x0002, 0x0022, + 0x1384, 0x1384, 0x0002, 0x0022, 0x1395, 0x1395, 0x0003, 0x0000, + 0x0775, 0x077a, 0x0003, 0x0022, 0x13a3, 0x13b5, 0x13c8, 0x0002, + // Entry 1AA80 - 1AABF + 0x077d, 0x0781, 0x0002, 0x0022, 0x13d9, 0x13d9, 0x0002, 0x0022, + 0x1407, 0x13f2, 0x0003, 0x0000, 0x0789, 0x078e, 0x0003, 0x0022, + 0x141e, 0x1427, 0x1431, 0x0002, 0x0791, 0x0795, 0x0002, 0x0022, + 0x1439, 0x1439, 0x0002, 0x0022, 0x144a, 0x144a, 0x0003, 0x0000, + 0x079d, 0x07a2, 0x0003, 0x0022, 0x141e, 0x1427, 0x1431, 0x0002, + 0x07a5, 0x07a9, 0x0002, 0x0022, 0x1439, 0x1439, 0x0002, 0x0022, + 0x144a, 0x144a, 0x0003, 0x0000, 0x07b1, 0x07b6, 0x0003, 0x0022, + 0x1458, 0x1468, 0x1479, 0x0002, 0x07b9, 0x07bd, 0x0002, 0x0022, + // Entry 1AAC0 - 1AAFF + 0x1488, 0x1488, 0x0002, 0x0022, 0x14b2, 0x149f, 0x0003, 0x0000, + 0x07c5, 0x07ca, 0x0003, 0x0022, 0x14c7, 0x14d0, 0x14da, 0x0002, + 0x07cd, 0x07d1, 0x0002, 0x0022, 0x14e2, 0x14e2, 0x0002, 0x0022, + 0x14f3, 0x14f3, 0x0003, 0x0000, 0x07d9, 0x07de, 0x0003, 0x0022, + 0x14c7, 0x14d0, 0x14da, 0x0002, 0x07e1, 0x07e5, 0x0002, 0x0022, + 0x14e2, 0x14e2, 0x0002, 0x0022, 0x14f3, 0x14f3, 0x0003, 0x0000, + 0x07ed, 0x07f2, 0x0003, 0x0022, 0x1501, 0x1515, 0x152a, 0x0002, + 0x07f5, 0x07f9, 0x0002, 0x0022, 0x153d, 0x153d, 0x0002, 0x0022, + // Entry 1AB00 - 1AB3F + 0x156e, 0x1557, 0x0003, 0x0000, 0x0801, 0x0806, 0x0003, 0x0022, + 0x1586, 0x158f, 0x1599, 0x0002, 0x0809, 0x080d, 0x0002, 0x0022, + 0x15a1, 0x15a1, 0x0002, 0x0022, 0x15b2, 0x15b2, 0x0003, 0x0000, + 0x0815, 0x081a, 0x0003, 0x0022, 0x1586, 0x158f, 0x1599, 0x0002, + 0x081d, 0x0821, 0x0002, 0x0022, 0x15a1, 0x15a1, 0x0002, 0x0022, + 0x15b2, 0x15b2, 0x0003, 0x0000, 0x0829, 0x082e, 0x0003, 0x0022, + 0x15c0, 0x15d0, 0x15e1, 0x0002, 0x0831, 0x0835, 0x0002, 0x0022, + 0x15f0, 0x15f0, 0x0002, 0x0022, 0x161a, 0x1607, 0x0003, 0x0000, + // Entry 1AB40 - 1AB7F + 0x083d, 0x0842, 0x0003, 0x0022, 0x162f, 0x1638, 0x1642, 0x0002, + 0x0845, 0x0849, 0x0002, 0x0022, 0x164a, 0x164a, 0x0002, 0x0022, + 0x165b, 0x165b, 0x0003, 0x0000, 0x0851, 0x0856, 0x0003, 0x0022, + 0x162f, 0x1638, 0x1642, 0x0002, 0x0859, 0x085d, 0x0002, 0x0022, + 0x164a, 0x164a, 0x0002, 0x0022, 0x165b, 0x165b, 0x0003, 0x0000, + 0x0865, 0x086a, 0x0003, 0x0022, 0x1669, 0x167b, 0x168e, 0x0002, + 0x086d, 0x0871, 0x0002, 0x0022, 0x169f, 0x169f, 0x0002, 0x0022, + 0x16cd, 0x16b8, 0x0003, 0x0000, 0x0879, 0x087e, 0x0003, 0x0022, + // Entry 1AB80 - 1ABBF + 0x16e4, 0x16ed, 0x16f7, 0x0002, 0x0881, 0x0885, 0x0002, 0x0022, + 0x16ff, 0x16ff, 0x0002, 0x0022, 0x1710, 0x1710, 0x0003, 0x0000, + 0x088d, 0x0892, 0x0003, 0x0022, 0x16e4, 0x16ed, 0x16f7, 0x0002, + 0x0895, 0x0899, 0x0002, 0x0022, 0x16ff, 0x16ff, 0x0002, 0x0022, + 0x1710, 0x1710, 0x0003, 0x0000, 0x08a1, 0x08a6, 0x0003, 0x0022, + 0x171e, 0x172f, 0x1741, 0x0002, 0x08a9, 0x08ad, 0x0002, 0x0022, + 0x1751, 0x1751, 0x0002, 0x0022, 0x177d, 0x1769, 0x0003, 0x0000, + 0x08b5, 0x08ba, 0x0003, 0x0022, 0x1793, 0x179c, 0x17a6, 0x0002, + // Entry 1ABC0 - 1ABFF + 0x08bd, 0x08c1, 0x0002, 0x0022, 0x17ae, 0x17ae, 0x0002, 0x0022, + 0x17bf, 0x17bf, 0x0003, 0x0000, 0x08c9, 0x08ce, 0x0003, 0x0022, + 0x1793, 0x179c, 0x17a6, 0x0002, 0x08d1, 0x08d5, 0x0002, 0x0022, + 0x17ae, 0x17ae, 0x0002, 0x0022, 0x17bf, 0x17bf, 0x0001, 0x08db, + 0x0001, 0x0022, 0x17cd, 0x0001, 0x08e0, 0x0001, 0x0022, 0x17cd, + 0x0001, 0x08e5, 0x0001, 0x0022, 0x17cd, 0x0003, 0x08ec, 0x08ef, + 0x08f3, 0x0001, 0x0022, 0x17dd, 0x0002, 0x0022, 0xffff, 0x17e3, + 0x0002, 0x08f6, 0x08fa, 0x0002, 0x0022, 0x17f9, 0x17f9, 0x0002, + // Entry 1AC00 - 1AC3F + 0x0022, 0x181f, 0x180e, 0x0003, 0x0902, 0x0905, 0x0909, 0x0001, + 0x0000, 0x2000, 0x0002, 0x0022, 0xffff, 0x1831, 0x0002, 0x090c, + 0x0910, 0x0002, 0x0022, 0x1842, 0x1842, 0x0002, 0x0022, 0x1852, + 0x1852, 0x0003, 0x0918, 0x091b, 0x091f, 0x0001, 0x0000, 0x2000, + 0x0002, 0x0022, 0xffff, 0x1831, 0x0002, 0x0922, 0x0926, 0x0002, + 0x0022, 0x1842, 0x1842, 0x0002, 0x0022, 0x1852, 0x1852, 0x0003, + 0x092e, 0x0931, 0x0935, 0x0001, 0x0022, 0x185f, 0x0002, 0x0022, + 0xffff, 0x1868, 0x0002, 0x0938, 0x093c, 0x0002, 0x0022, 0x1880, + // Entry 1AC40 - 1AC7F + 0x1880, 0x0002, 0x0022, 0x18ab, 0x1897, 0x0003, 0x0944, 0x0947, + 0x094b, 0x0001, 0x000b, 0x1250, 0x0002, 0x0022, 0xffff, 0x18c0, + 0x0002, 0x094e, 0x0952, 0x0002, 0x0022, 0x18d3, 0x18d3, 0x0002, + 0x0022, 0x18e5, 0x18e5, 0x0003, 0x095a, 0x095d, 0x0961, 0x0001, + 0x000b, 0x1250, 0x0002, 0x0022, 0xffff, 0x18c0, 0x0002, 0x0964, + 0x0968, 0x0002, 0x0022, 0x18d3, 0x18d3, 0x0002, 0x0022, 0x18e5, + 0x18e5, 0x0003, 0x0970, 0x0973, 0x0977, 0x0001, 0x0022, 0x18f4, + 0x0002, 0x0022, 0xffff, 0x18fc, 0x0002, 0x097a, 0x097e, 0x0002, + // Entry 1AC80 - 1ACBF + 0x0022, 0x1900, 0x1900, 0x0002, 0x0022, 0x192a, 0x1917, 0x0003, + 0x0986, 0x0989, 0x098d, 0x0001, 0x0000, 0x2002, 0x0002, 0x0022, + 0xffff, 0x18fc, 0x0002, 0x0990, 0x0994, 0x0002, 0x0022, 0x193e, + 0x193e, 0x0002, 0x0022, 0x194e, 0x194e, 0x0003, 0x099c, 0x099f, + 0x09a3, 0x0001, 0x0000, 0x2002, 0x0002, 0x0022, 0xffff, 0x18fc, + 0x0002, 0x09a6, 0x09aa, 0x0002, 0x0022, 0x193e, 0x193e, 0x0002, + 0x0022, 0x194e, 0x194e, 0x0001, 0x09b0, 0x0001, 0x0022, 0x195b, + 0x0001, 0x09b5, 0x0001, 0x0022, 0x195b, 0x0001, 0x09ba, 0x0001, + // Entry 1ACC0 - 1ACFF + 0x0022, 0x195b, 0x0004, 0x09c2, 0x09c7, 0x09cc, 0x09db, 0x0003, + 0x0022, 0x1968, 0x1974, 0x197b, 0x0003, 0x0022, 0x197f, 0x1991, + 0x19a1, 0x0002, 0x0000, 0x09cf, 0x0003, 0x0000, 0x09d6, 0x09d3, + 0x0001, 0x0022, 0x19b4, 0x0003, 0x0022, 0xffff, 0x19c2, 0x19d7, + 0x0002, 0x0000, 0x09de, 0x0003, 0x09e2, 0x0b22, 0x0a82, 0x009e, + 0x0022, 0xffff, 0xffff, 0xffff, 0xffff, 0x1a63, 0x1aac, 0x1b14, + 0x1b4b, 0x1ba9, 0x1c07, 0x1c4d, 0x1cb4, 0x1ceb, 0x1d8a, 0x1dd0, + 0x1e10, 0x1e65, 0x1e9c, 0x1eeb, 0x1f3a, 0x1fa7, 0x1ff3, 0x2045, + // Entry 1AD00 - 1AD3F + 0x208e, 0x20c2, 0xffff, 0xffff, 0x2121, 0xffff, 0x2168, 0xffff, + 0x21c1, 0x21fb, 0x222c, 0x225d, 0xffff, 0xffff, 0x22c1, 0x22fb, + 0x2341, 0xffff, 0xffff, 0xffff, 0x23aa, 0xffff, 0x240b, 0x2454, + 0xffff, 0x24b5, 0x2501, 0x2553, 0xffff, 0xffff, 0xffff, 0xffff, + 0x25fa, 0xffff, 0xffff, 0x265e, 0x26ad, 0xffff, 0xffff, 0x273b, + 0x2790, 0x27cd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2873, 0x28a4, 0x28de, 0x2915, 0x2949, 0xffff, 0xffff, 0x29b7, + 0xffff, 0x29f5, 0xffff, 0xffff, 0x2a6b, 0xffff, 0x2aef, 0xffff, + // Entry 1AD40 - 1AD7F + 0xffff, 0xffff, 0xffff, 0x2b75, 0xffff, 0x2bc6, 0x2c15, 0x2c70, + 0x2cb3, 0xffff, 0xffff, 0xffff, 0x2d12, 0x2d61, 0x2dad, 0xffff, + 0xffff, 0x2e16, 0x2e89, 0x2ecf, 0x2f00, 0xffff, 0xffff, 0x2f62, + 0x2f9c, 0x2fca, 0xffff, 0x3021, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x3121, 0x315b, 0x318f, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x3232, 0xffff, 0xffff, 0x3288, 0xffff, + 0x32c6, 0xffff, 0x331c, 0x3353, 0x3396, 0xffff, 0x33dd, 0x3423, + 0xffff, 0xffff, 0xffff, 0x3495, 0x34cf, 0xffff, 0xffff, 0x19ea, + // Entry 1AD80 - 1ADBF + 0x1ae0, 0x1d19, 0x1d53, 0xffff, 0xffff, 0x2aa8, 0x30c0, 0x009e, + 0x0022, 0x1a18, 0x1a2a, 0x1a3d, 0x1a4f, 0x1a77, 0x1ab9, 0x1b22, + 0x1b66, 0x1bc4, 0x1c1a, 0x1c6b, 0x1cc2, 0x1cf6, 0x1d9d, 0x1de1, + 0x1e28, 0x1e73, 0x1eb2, 0x1f01, 0x1f5a, 0x1fbc, 0x200a, 0x2059, + 0x209b, 0x20d4, 0x2105, 0x2113, 0x2130, 0x215b, 0x2178, 0x21b1, + 0x21d0, 0x2207, 0x2238, 0x226e, 0x229d, 0x22ae, 0x22d0, 0x230e, + 0x234d, 0x2372, 0x237f, 0x2398, 0x23c1, 0x23fc, 0x241f, 0x2467, + 0x249a, 0x24ca, 0x2518, 0x2560, 0x2587, 0x259d, 0x25cf, 0x25e6, + // Entry 1ADC0 - 1ADFF + 0x2608, 0x2631, 0x2645, 0x2674, 0x26c5, 0x270e, 0x272e, 0x2753, + 0x27a0, 0x27d9, 0x27fe, 0x280a, 0x2821, 0x2831, 0x2847, 0x285c, + 0x287f, 0x28b3, 0x28ec, 0x2922, 0x295a, 0x2989, 0x299f, 0x29c3, + 0x29e8, 0x2a08, 0x2a3b, 0x2a5a, 0x2a7b, 0x2ad9, 0x2afe, 0x2b29, + 0x2b37, 0x2b48, 0x2b5e, 0x2b87, 0x2bb8, 0x2bdc, 0x2c2f, 0x2c82, + 0x2cc1, 0x2cea, 0x2cf9, 0x2d05, 0x2d28, 0x2d76, 0x2dc1, 0x2df6, + 0x2e01, 0x2e30, 0x2e9c, 0x2edb, 0x2f10, 0x2f3d, 0x2f49, 0x2f71, + 0x2fa7, 0x2fdc, 0x300d, 0x3042, 0x3091, 0x30a1, 0x30af, 0x3103, + // Entry 1AE00 - 1AE3F + 0x3113, 0x3130, 0x3168, 0x319b, 0x31c0, 0x31d1, 0x31e1, 0x31f5, + 0x320a, 0x3219, 0x3225, 0x323f, 0x3266, 0x327a, 0x3294, 0x32b9, + 0x32da, 0x330f, 0x332a, 0x3365, 0x33a4, 0x33cd, 0x33f0, 0x3434, + 0x3463, 0x3471, 0x347c, 0x34a4, 0x34e4, 0x2702, 0x2e71, 0x19f5, + 0x1aed, 0x1d28, 0x1d61, 0x21a5, 0x2a4a, 0x2ab4, 0x30d2, 0x009e, + 0x0022, 0xffff, 0xffff, 0xffff, 0xffff, 0x1a93, 0x1ace, 0x1b38, + 0x1b89, 0x1be7, 0x1c35, 0x1c91, 0x1cd8, 0x1d09, 0x1db8, 0x1dfa, + 0x1e48, 0x1e89, 0x1ed0, 0x1f1f, 0x1f82, 0x1fd9, 0x2029, 0x2075, + // Entry 1AE40 - 1AE7F + 0x20b0, 0x20ee, 0xffff, 0xffff, 0x2147, 0xffff, 0x2190, 0xffff, + 0x21e7, 0x221b, 0x224c, 0x2287, 0xffff, 0xffff, 0x22e7, 0x2329, + 0x2361, 0xffff, 0xffff, 0xffff, 0x23e0, 0xffff, 0x243b, 0x2482, + 0xffff, 0x24e7, 0x2537, 0x2575, 0xffff, 0xffff, 0xffff, 0xffff, + 0x261e, 0xffff, 0xffff, 0x2692, 0x26e5, 0xffff, 0xffff, 0x2773, + 0x27b8, 0x27ed, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2893, 0x28ca, 0x2902, 0x2937, 0x2973, 0xffff, 0xffff, 0x29d7, + 0xffff, 0x2a23, 0xffff, 0xffff, 0x2a93, 0xffff, 0x2b15, 0xffff, + // Entry 1AE80 - 1AEBF + 0xffff, 0xffff, 0xffff, 0x2ba1, 0xffff, 0x2bfa, 0x2c51, 0x2c9c, + 0x2cd7, 0xffff, 0xffff, 0xffff, 0x2d46, 0x2d93, 0x2ddd, 0xffff, + 0xffff, 0x2e52, 0x2eb7, 0x2eef, 0x2f28, 0xffff, 0xffff, 0x2f88, + 0x2fba, 0x2ff6, 0xffff, 0x306b, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x3147, 0x317d, 0x31af, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x3254, 0xffff, 0xffff, 0x32a8, 0xffff, + 0x32f6, 0xffff, 0x3340, 0x337f, 0x33ba, 0xffff, 0x340b, 0x344d, + 0xffff, 0xffff, 0xffff, 0x34bb, 0x3501, 0xffff, 0xffff, 0x1a08, + // Entry 1AEC0 - 1AEFF + 0x1b02, 0x1d3f, 0x1d77, 0xffff, 0xffff, 0x2ac8, 0x30ec, 0x0003, + 0x0004, 0x06db, 0x0b44, 0x0012, 0x0017, 0x0000, 0x0055, 0x0000, + 0x0101, 0x0000, 0x01ad, 0x01d8, 0x0408, 0x04b1, 0x0554, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x05f7, 0x069a, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0020, 0x0033, 0x0000, 0x0044, 0x0003, + 0x0029, 0x002e, 0x0024, 0x0001, 0x0026, 0x0001, 0x0000, 0x0000, + 0x0001, 0x002b, 0x0001, 0x0000, 0x0000, 0x0001, 0x0030, 0x0001, + 0x0000, 0x0000, 0x0004, 0x0041, 0x003b, 0x0038, 0x003e, 0x0001, + // Entry 1AF00 - 1AF3F + 0x000c, 0x0000, 0x0001, 0x000c, 0x0012, 0x0001, 0x000c, 0x001e, + 0x0001, 0x0013, 0x0203, 0x0004, 0x0052, 0x004c, 0x0049, 0x004f, + 0x0001, 0x0023, 0x0000, 0x0001, 0x0023, 0x0000, 0x0001, 0x0006, + 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, 0x005e, 0x0000, 0x0000, + 0x0000, 0x00c9, 0x00df, 0x0000, 0x00f0, 0x0002, 0x0061, 0x0095, + 0x0003, 0x0065, 0x0075, 0x0085, 0x000e, 0x0000, 0xffff, 0x03ce, + 0x03d3, 0x03d8, 0x03de, 0x2221, 0x03e9, 0x03f0, 0x03f9, 0x0403, + 0x040b, 0x0411, 0x0416, 0x242d, 0x000e, 0x0000, 0xffff, 0x0033, + // Entry 1AF40 - 1AF7F + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x2215, 0x2218, 0x2426, 0x0422, 0x000e, 0x0000, 0xffff, 0x03ce, + 0x03d3, 0x03d8, 0x03de, 0x2221, 0x03e9, 0x03f0, 0x03f9, 0x0403, + 0x040b, 0x0411, 0x0416, 0x242d, 0x0003, 0x0099, 0x00a9, 0x00b9, + 0x000e, 0x0000, 0xffff, 0x03ce, 0x03d3, 0x03d8, 0x03de, 0x2221, + 0x03e9, 0x03f0, 0x03f9, 0x0403, 0x040b, 0x0411, 0x0416, 0x242d, + 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x0422, + // Entry 1AF80 - 1AFBF + 0x000e, 0x0000, 0xffff, 0x03ce, 0x03d3, 0x03d8, 0x03de, 0x2221, + 0x03e9, 0x03f0, 0x03f9, 0x0403, 0x040b, 0x0411, 0x0416, 0x242d, + 0x0003, 0x00d3, 0x00d9, 0x00cd, 0x0001, 0x00cf, 0x0002, 0x0000, + 0x0425, 0x042a, 0x0001, 0x00d5, 0x0002, 0x0000, 0x0425, 0x042a, + 0x0001, 0x00db, 0x0002, 0x0000, 0x0425, 0x042a, 0x0004, 0x00ed, + 0x00e7, 0x00e4, 0x00ea, 0x0001, 0x000c, 0x0000, 0x0001, 0x000c, + 0x0012, 0x0001, 0x000c, 0x001e, 0x0001, 0x0013, 0x0203, 0x0004, + 0x00fe, 0x00f8, 0x00f5, 0x00fb, 0x0001, 0x0023, 0x0000, 0x0001, + // Entry 1AFC0 - 1AFFF + 0x0023, 0x0000, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, + 0x0008, 0x010a, 0x0000, 0x0000, 0x0000, 0x0175, 0x018b, 0x0000, + 0x019c, 0x0002, 0x010d, 0x0141, 0x0003, 0x0111, 0x0121, 0x0131, + 0x000e, 0x0000, 0xffff, 0x042f, 0x0438, 0x043f, 0x0445, 0x044c, + 0x0450, 0x0458, 0x0460, 0x0467, 0x046e, 0x0473, 0x0479, 0x0481, + 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x0422, + 0x000e, 0x0000, 0xffff, 0x042f, 0x0438, 0x043f, 0x0445, 0x044c, + // Entry 1B000 - 1B03F + 0x0450, 0x0458, 0x0460, 0x0467, 0x046e, 0x0473, 0x0479, 0x0481, + 0x0003, 0x0145, 0x0155, 0x0165, 0x000e, 0x0000, 0xffff, 0x042f, + 0x0438, 0x043f, 0x0445, 0x044c, 0x0450, 0x0458, 0x0460, 0x0467, + 0x046e, 0x0473, 0x0479, 0x0481, 0x000e, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x2215, 0x2218, 0x2426, 0x0422, 0x000e, 0x0000, 0xffff, 0x042f, + 0x0438, 0x043f, 0x0445, 0x044c, 0x0450, 0x0458, 0x0460, 0x0467, + 0x046e, 0x0473, 0x0479, 0x0481, 0x0003, 0x017f, 0x0185, 0x0179, + // Entry 1B040 - 1B07F + 0x0001, 0x017b, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x0181, + 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x0187, 0x0002, 0x0000, + 0x0425, 0x042a, 0x0004, 0x0199, 0x0193, 0x0190, 0x0196, 0x0001, + 0x000c, 0x0000, 0x0001, 0x000c, 0x0012, 0x0001, 0x000c, 0x001e, + 0x0001, 0x0013, 0x0203, 0x0004, 0x01aa, 0x01a4, 0x01a1, 0x01a7, + 0x0001, 0x0023, 0x0000, 0x0001, 0x0023, 0x0000, 0x0001, 0x0006, + 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x01b6, 0x0000, 0x01c7, 0x0004, 0x01c4, 0x01be, + // Entry 1B080 - 1B0BF + 0x01bb, 0x01c1, 0x0001, 0x000c, 0x0000, 0x0001, 0x000c, 0x0012, + 0x0001, 0x000c, 0x001e, 0x0001, 0x0013, 0x0203, 0x0004, 0x01d5, + 0x01cf, 0x01cc, 0x01d2, 0x0001, 0x0023, 0x0000, 0x0001, 0x0023, + 0x0000, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, + 0x01e1, 0x0246, 0x029d, 0x02d2, 0x03bb, 0x03d5, 0x03e6, 0x03f7, + 0x0002, 0x01e4, 0x0215, 0x0003, 0x01e8, 0x01f7, 0x0206, 0x000d, + 0x0023, 0xffff, 0x000f, 0x0013, 0x0017, 0x001b, 0x001f, 0x0023, + 0x0027, 0x002b, 0x002f, 0x0033, 0x0037, 0x003b, 0x000d, 0x0023, + // Entry 1B0C0 - 1B0FF + 0xffff, 0x000f, 0x0013, 0x0017, 0x001b, 0x001f, 0x0023, 0x0027, + 0x002b, 0x002f, 0x0033, 0x0037, 0x003b, 0x000d, 0x001f, 0xffff, + 0x0874, 0x2fcf, 0x2fd7, 0x0888, 0x088e, 0x2fdd, 0x2fe3, 0x089f, + 0x2fe9, 0x2ff3, 0x2ffb, 0x3005, 0x0003, 0x0219, 0x0228, 0x0237, + 0x000d, 0x0023, 0xffff, 0x000f, 0x0013, 0x0017, 0x001b, 0x001f, + 0x0023, 0x0027, 0x002b, 0x002f, 0x0033, 0x0037, 0x003b, 0x000d, + 0x0000, 0xffff, 0x2146, 0x21dd, 0x2357, 0x241f, 0x2357, 0x245f, + 0x2463, 0x2467, 0x246b, 0x246f, 0x2473, 0x2477, 0x000d, 0x001f, + // Entry 1B100 - 1B13F + 0xffff, 0x0874, 0x2fcf, 0x2fd7, 0x0888, 0x088e, 0x2fdd, 0x2fe3, + 0x089f, 0x2fe9, 0x2ff3, 0x2ffb, 0x3005, 0x0002, 0x0249, 0x0273, + 0x0005, 0x024f, 0x0258, 0x026a, 0x0000, 0x0261, 0x0007, 0x0023, + 0x003f, 0x0043, 0x0017, 0x0047, 0x004b, 0x004f, 0x0053, 0x0007, + 0x0023, 0x003f, 0x0043, 0x0017, 0x0047, 0x004b, 0x004f, 0x0053, + 0x0007, 0x0023, 0x0057, 0x005a, 0x005d, 0x0060, 0x0063, 0x0066, + 0x0069, 0x0007, 0x0023, 0x006c, 0x0073, 0x0079, 0x0080, 0x008b, + 0x0093, 0x009c, 0x0005, 0x0279, 0x0282, 0x0294, 0x0000, 0x028b, + // Entry 1B140 - 1B17F + 0x0007, 0x0023, 0x003f, 0x0043, 0x0017, 0x0047, 0x004b, 0x004f, + 0x0053, 0x0007, 0x0023, 0x003f, 0x0043, 0x0017, 0x0047, 0x004b, + 0x004f, 0x0053, 0x0007, 0x0023, 0x0057, 0x005a, 0x005d, 0x0060, + 0x0063, 0x0066, 0x0069, 0x0007, 0x0023, 0x006c, 0x0073, 0x0079, + 0x0080, 0x008b, 0x0093, 0x009c, 0x0002, 0x02a0, 0x02b9, 0x0003, + 0x02a4, 0x02ab, 0x02b2, 0x0005, 0x0000, 0xffff, 0x04e3, 0x04e6, + 0x04e9, 0x04ec, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x0005, 0x0023, 0xffff, 0x00a3, 0x00b1, 0x00bf, 0x00cd, + // Entry 1B180 - 1B1BF + 0x0003, 0x02bd, 0x02c4, 0x02cb, 0x0005, 0x0000, 0xffff, 0x04e3, + 0x04e6, 0x04e9, 0x04ec, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x0005, 0x0023, 0xffff, 0x00a3, 0x00b1, 0x00bf, + 0x00cd, 0x0002, 0x02d5, 0x0348, 0x0003, 0x02d9, 0x02fe, 0x0323, + 0x0009, 0x02e6, 0x02ec, 0x02e3, 0x02ef, 0x02f5, 0x02f8, 0x02fb, + 0x02e9, 0x02f2, 0x0001, 0x0023, 0x00de, 0x0001, 0x0000, 0x04ef, + 0x0001, 0x0023, 0x00e9, 0x0001, 0x0000, 0x04f2, 0x0001, 0x0023, + 0x00fa, 0x0001, 0x0023, 0x0105, 0x0001, 0x0023, 0x0113, 0x0001, + // Entry 1B1C0 - 1B1FF + 0x0023, 0x011c, 0x0001, 0x0023, 0x0125, 0x0009, 0x030b, 0x0311, + 0x0308, 0x0314, 0x031a, 0x031d, 0x0320, 0x030e, 0x0317, 0x0001, + 0x0023, 0x00de, 0x0001, 0x0000, 0x23cd, 0x0001, 0x0023, 0x00e9, + 0x0001, 0x0000, 0x23d0, 0x0001, 0x0023, 0x012a, 0x0001, 0x0023, + 0x0105, 0x0001, 0x0023, 0x0130, 0x0001, 0x0023, 0x0139, 0x0001, + 0x0023, 0x0125, 0x0009, 0x0330, 0x0336, 0x032d, 0x0339, 0x033f, + 0x0342, 0x0345, 0x0333, 0x033c, 0x0001, 0x0023, 0x00de, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x0023, 0x00e9, 0x0001, 0x0000, 0x04f2, + // Entry 1B200 - 1B23F + 0x0001, 0x0023, 0x00fa, 0x0001, 0x0023, 0x0105, 0x0001, 0x0023, + 0x0113, 0x0001, 0x0023, 0x011c, 0x0001, 0x0023, 0x0141, 0x0003, + 0x034c, 0x0371, 0x0396, 0x0009, 0x0359, 0x035f, 0x0356, 0x0362, + 0x0368, 0x036b, 0x036e, 0x035c, 0x0365, 0x0001, 0x0023, 0x00de, + 0x0001, 0x0000, 0x04ef, 0x0001, 0x0023, 0x00e9, 0x0001, 0x0000, + 0x04f2, 0x0001, 0x0023, 0x012a, 0x0001, 0x0023, 0x0105, 0x0001, + 0x0023, 0x0113, 0x0001, 0x0023, 0x0149, 0x0001, 0x0023, 0x0125, + 0x0009, 0x037e, 0x0384, 0x037b, 0x0387, 0x038d, 0x0390, 0x0393, + // Entry 1B240 - 1B27F + 0x0381, 0x038a, 0x0001, 0x0023, 0x00de, 0x0001, 0x0000, 0x04ef, + 0x0001, 0x0023, 0x00e9, 0x0001, 0x0000, 0x04f2, 0x0001, 0x0023, + 0x012a, 0x0001, 0x0023, 0x0105, 0x0001, 0x0023, 0x0113, 0x0001, + 0x0023, 0x0125, 0x0001, 0x0023, 0x0125, 0x0009, 0x03a3, 0x03a9, + 0x03a0, 0x03ac, 0x03b2, 0x03b5, 0x03b8, 0x03a6, 0x03af, 0x0001, + 0x0023, 0x00de, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0023, 0x00e9, + 0x0001, 0x0000, 0x04f2, 0x0001, 0x0023, 0x012a, 0x0001, 0x0023, + 0x0105, 0x0001, 0x0023, 0x0113, 0x0001, 0x0023, 0x0149, 0x0001, + // Entry 1B280 - 1B2BF + 0x0023, 0x0125, 0x0003, 0x03ca, 0x0000, 0x03bf, 0x0002, 0x03c2, + 0x03c6, 0x0002, 0x001c, 0x0271, 0x0291, 0x0002, 0x001c, 0x027f, + 0x029d, 0x0002, 0x03cd, 0x03d1, 0x0002, 0x0009, 0x0078, 0x577d, + 0x0002, 0x0000, 0x04f5, 0x04f9, 0x0004, 0x03e3, 0x03dd, 0x03da, + 0x03e0, 0x0001, 0x000c, 0x03c9, 0x0001, 0x000c, 0x03d9, 0x0001, + 0x000c, 0x03e3, 0x0001, 0x000c, 0x03ec, 0x0004, 0x03f4, 0x03ee, + 0x03eb, 0x03f1, 0x0001, 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, + 0x0001, 0x0002, 0x04fe, 0x0001, 0x0002, 0x0508, 0x0004, 0x0405, + // Entry 1B2C0 - 1B2FF + 0x03ff, 0x03fc, 0x0402, 0x0001, 0x0023, 0x0000, 0x0001, 0x0023, + 0x0000, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, + 0x0411, 0x0000, 0x0000, 0x0000, 0x047c, 0x048f, 0x0000, 0x04a0, + 0x0002, 0x0414, 0x0448, 0x0003, 0x0418, 0x0428, 0x0438, 0x000e, + 0x0000, 0x2445, 0x054c, 0x0553, 0x055b, 0x2433, 0x0568, 0x2439, + 0x2440, 0x244d, 0x0589, 0x058e, 0x0594, 0x2453, 0x2456, 0x000e, + 0x0000, 0x003f, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x0422, 0x000e, + // Entry 1B300 - 1B33F + 0x0000, 0x2445, 0x054c, 0x0553, 0x055b, 0x2433, 0x0568, 0x2439, + 0x2440, 0x244d, 0x0589, 0x058e, 0x0594, 0x2453, 0x2456, 0x0003, + 0x044c, 0x045c, 0x046c, 0x000e, 0x0000, 0x2445, 0x054c, 0x0553, + 0x055b, 0x2433, 0x0568, 0x2439, 0x2440, 0x244d, 0x0589, 0x058e, + 0x0594, 0x2453, 0x2456, 0x000e, 0x0000, 0x003f, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, + 0x2218, 0x2426, 0x0422, 0x000e, 0x0000, 0x2445, 0x054c, 0x0553, + 0x055b, 0x2433, 0x0568, 0x2439, 0x2440, 0x244d, 0x0589, 0x058e, + // Entry 1B340 - 1B37F + 0x0594, 0x2453, 0x2456, 0x0003, 0x0485, 0x048a, 0x0480, 0x0001, + 0x0482, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0487, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x048c, 0x0001, 0x0000, 0x04ef, 0x0004, 0x049d, + 0x0497, 0x0494, 0x049a, 0x0001, 0x0023, 0x014f, 0x0001, 0x0023, + 0x015e, 0x0001, 0x0023, 0x0167, 0x0001, 0x0023, 0x0167, 0x0004, + 0x04ae, 0x04a8, 0x04a5, 0x04ab, 0x0001, 0x0023, 0x0000, 0x0001, + 0x0023, 0x0000, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, + 0x0008, 0x04ba, 0x0000, 0x0000, 0x0000, 0x051f, 0x0532, 0x0000, + // Entry 1B380 - 1B3BF + 0x0543, 0x0002, 0x04bd, 0x04ee, 0x0003, 0x04c1, 0x04d0, 0x04df, + 0x000d, 0x0000, 0xffff, 0x05a2, 0x05aa, 0x05b3, 0x05bc, 0x05c3, + 0x05cb, 0x05d2, 0x05d9, 0x05e1, 0x05ec, 0x05f2, 0x05f8, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, 0x0000, + 0xffff, 0x05a2, 0x05aa, 0x05b3, 0x05bc, 0x05c3, 0x05cb, 0x05d2, + 0x05d9, 0x05e1, 0x05ec, 0x05f2, 0x05f8, 0x0003, 0x04f2, 0x0501, + 0x0510, 0x000d, 0x0000, 0xffff, 0x05a2, 0x05aa, 0x05b3, 0x05bc, + // Entry 1B3C0 - 1B3FF + 0x05c3, 0x05cb, 0x05d2, 0x05d9, 0x05e1, 0x05ec, 0x05f2, 0x05f8, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, + 0x0000, 0xffff, 0x05a2, 0x05aa, 0x05b3, 0x05bc, 0x05c3, 0x05cb, + 0x05d2, 0x05d9, 0x05e1, 0x05ec, 0x05f2, 0x05f8, 0x0003, 0x0528, + 0x052d, 0x0523, 0x0001, 0x0525, 0x0001, 0x0000, 0x0601, 0x0001, + 0x052a, 0x0001, 0x0000, 0x0601, 0x0001, 0x052f, 0x0001, 0x0000, + 0x0601, 0x0004, 0x0540, 0x053a, 0x0537, 0x053d, 0x0001, 0x000c, + // Entry 1B400 - 1B43F + 0x0000, 0x0001, 0x000c, 0x0012, 0x0001, 0x000c, 0x001e, 0x0001, + 0x0013, 0x0203, 0x0004, 0x0551, 0x054b, 0x0548, 0x054e, 0x0001, + 0x0023, 0x0000, 0x0001, 0x0023, 0x0000, 0x0001, 0x0006, 0x022e, + 0x0001, 0x0006, 0x022e, 0x0008, 0x055d, 0x0000, 0x0000, 0x0000, + 0x05c2, 0x05d5, 0x0000, 0x05e6, 0x0002, 0x0560, 0x0591, 0x0003, + 0x0564, 0x0573, 0x0582, 0x000d, 0x0000, 0xffff, 0x0606, 0x060b, + 0x0610, 0x0617, 0x061f, 0x0626, 0x062e, 0x0633, 0x0638, 0x063d, + 0x0643, 0x064d, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + // Entry 1B440 - 1B47F + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, + 0x2426, 0x000d, 0x0000, 0xffff, 0x0657, 0x0660, 0x0666, 0x066f, + 0x0679, 0x0682, 0x068c, 0x0692, 0x069b, 0x06a3, 0x06ab, 0x06ba, + 0x0003, 0x0595, 0x05a4, 0x05b3, 0x000d, 0x0000, 0xffff, 0x0606, + 0x060b, 0x0610, 0x0617, 0x061f, 0x0626, 0x062e, 0x0633, 0x0638, + 0x063d, 0x0643, 0x064d, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, + 0x2218, 0x2426, 0x000d, 0x0000, 0xffff, 0x0657, 0x0660, 0x0666, + // Entry 1B480 - 1B4BF + 0x066f, 0x0679, 0x0682, 0x068c, 0x0692, 0x069b, 0x06a3, 0x06ab, + 0x06ba, 0x0003, 0x05cb, 0x05d0, 0x05c6, 0x0001, 0x05c8, 0x0001, + 0x0000, 0x06c8, 0x0001, 0x05cd, 0x0001, 0x0000, 0x06c8, 0x0001, + 0x05d2, 0x0001, 0x0000, 0x06c8, 0x0004, 0x05e3, 0x05dd, 0x05da, + 0x05e0, 0x0001, 0x000c, 0x0000, 0x0001, 0x000c, 0x0012, 0x0001, + 0x000c, 0x001e, 0x0001, 0x0013, 0x0203, 0x0004, 0x05f4, 0x05ee, + 0x05eb, 0x05f1, 0x0001, 0x0023, 0x0000, 0x0001, 0x0023, 0x0000, + 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, 0x0600, + // Entry 1B4C0 - 1B4FF + 0x0000, 0x0000, 0x0000, 0x0665, 0x0678, 0x0000, 0x0689, 0x0002, + 0x0603, 0x0634, 0x0003, 0x0607, 0x0616, 0x0625, 0x000d, 0x0000, + 0xffff, 0x19c9, 0x19d3, 0x19df, 0x23bd, 0x19eb, 0x19f2, 0x23c1, + 0x1a01, 0x1a06, 0x1a0b, 0x23c6, 0x1a16, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, 0x0000, 0xffff, 0x19c9, + 0x19d3, 0x19df, 0x23bd, 0x19eb, 0x19f2, 0x23c1, 0x1a01, 0x1a06, + 0x1a0b, 0x23c6, 0x1a16, 0x0003, 0x0638, 0x0647, 0x0656, 0x000d, + // Entry 1B500 - 1B53F + 0x0000, 0xffff, 0x19c9, 0x19d3, 0x19df, 0x23bd, 0x19eb, 0x19f2, + 0x23c1, 0x1a01, 0x1a06, 0x1a0b, 0x23c6, 0x1a16, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, 0x0000, 0xffff, + 0x19c9, 0x19d3, 0x19df, 0x23bd, 0x19eb, 0x19f2, 0x23c1, 0x1a01, + 0x1a06, 0x1a0b, 0x23c6, 0x1a16, 0x0003, 0x066e, 0x0673, 0x0669, + 0x0001, 0x066b, 0x0001, 0x0000, 0x1a1d, 0x0001, 0x0670, 0x0001, + 0x0000, 0x1a1d, 0x0001, 0x0675, 0x0001, 0x0000, 0x1a1d, 0x0004, + // Entry 1B540 - 1B57F + 0x0686, 0x0680, 0x067d, 0x0683, 0x0001, 0x000c, 0x0000, 0x0001, + 0x000c, 0x0012, 0x0001, 0x000c, 0x001e, 0x0001, 0x0013, 0x0203, + 0x0004, 0x0697, 0x0691, 0x068e, 0x0694, 0x0001, 0x0023, 0x0000, + 0x0001, 0x0023, 0x0000, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, + 0x022e, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x06a3, 0x06b9, + 0x0000, 0x06ca, 0x0003, 0x06ad, 0x06b3, 0x06a7, 0x0001, 0x06a9, + 0x0002, 0x0023, 0x016f, 0x017f, 0x0001, 0x06af, 0x0002, 0x0023, + 0x016f, 0x017f, 0x0001, 0x06b5, 0x0002, 0x0023, 0x016f, 0x017f, + // Entry 1B580 - 1B5BF + 0x0004, 0x06c7, 0x06c1, 0x06be, 0x06c4, 0x0001, 0x000c, 0x0000, + 0x0001, 0x000c, 0x0012, 0x0001, 0x000c, 0x001e, 0x0001, 0x0013, + 0x0203, 0x0004, 0x06d8, 0x06d2, 0x06cf, 0x06d5, 0x0001, 0x0023, + 0x0000, 0x0001, 0x0023, 0x0000, 0x0001, 0x0006, 0x022e, 0x0001, + 0x0006, 0x022e, 0x0042, 0x071e, 0x0723, 0x0728, 0x072d, 0x0744, + 0x075b, 0x0772, 0x0789, 0x07a0, 0x07b7, 0x07ce, 0x07e5, 0x07fc, + 0x0817, 0x0832, 0x084d, 0x0852, 0x0857, 0x085c, 0x0875, 0x088e, + 0x08a7, 0x08ac, 0x08b1, 0x08b6, 0x08bb, 0x08c0, 0x08c5, 0x08ca, + // Entry 1B5C0 - 1B5FF + 0x08cf, 0x08d4, 0x08e8, 0x08fc, 0x0910, 0x0924, 0x0938, 0x094c, + 0x0960, 0x0974, 0x0988, 0x099c, 0x09b0, 0x09c4, 0x09d8, 0x09ec, + 0x0a00, 0x0a14, 0x0a28, 0x0a3c, 0x0a50, 0x0a64, 0x0a78, 0x0a7d, + 0x0a82, 0x0a87, 0x0a9d, 0x0aaf, 0x0ac1, 0x0ad7, 0x0ae9, 0x0afb, + 0x0b11, 0x0b23, 0x0b35, 0x0b3a, 0x0b3f, 0x0001, 0x0720, 0x0001, + 0x0023, 0x0186, 0x0001, 0x0725, 0x0001, 0x0023, 0x0186, 0x0001, + 0x072a, 0x0001, 0x0023, 0x0186, 0x0003, 0x0731, 0x0734, 0x0739, + 0x0001, 0x0023, 0x018e, 0x0003, 0x0023, 0x0193, 0x01a2, 0x01af, + // Entry 1B600 - 1B63F + 0x0002, 0x073c, 0x0740, 0x0002, 0x0023, 0x01cb, 0x01bf, 0x0002, + 0x0023, 0x01f3, 0x01dc, 0x0003, 0x0748, 0x074b, 0x0750, 0x0001, + 0x0023, 0x018e, 0x0003, 0x0023, 0x0193, 0x01a2, 0x01af, 0x0002, + 0x0753, 0x0757, 0x0002, 0x0023, 0x01cb, 0x01bf, 0x0002, 0x0023, + 0x01f3, 0x01dc, 0x0003, 0x075f, 0x0762, 0x0767, 0x0001, 0x0023, + 0x018e, 0x0003, 0x0023, 0x0193, 0x01a2, 0x01af, 0x0002, 0x076a, + 0x076e, 0x0002, 0x0023, 0x01cb, 0x01bf, 0x0002, 0x0023, 0x01f3, + 0x01dc, 0x0003, 0x0776, 0x0779, 0x077e, 0x0001, 0x0000, 0x1a6a, + // Entry 1B640 - 1B67F + 0x0003, 0x0023, 0x020f, 0x0221, 0x0231, 0x0002, 0x0781, 0x0785, + 0x0002, 0x0023, 0x0253, 0x0244, 0x0002, 0x0023, 0x0281, 0x0267, + 0x0003, 0x078d, 0x0790, 0x0795, 0x0001, 0x001c, 0x035f, 0x0003, + 0x0023, 0x020f, 0x0221, 0x0231, 0x0002, 0x0798, 0x079c, 0x0002, + 0x0023, 0x0253, 0x0253, 0x0002, 0x0023, 0x0281, 0x0267, 0x0003, + 0x07a4, 0x07a7, 0x07ac, 0x0001, 0x001c, 0x035f, 0x0003, 0x0023, + 0x020f, 0x0221, 0x0231, 0x0002, 0x07af, 0x07b3, 0x0002, 0x0023, + 0x0253, 0x0244, 0x0002, 0x0023, 0x0281, 0x0267, 0x0003, 0x07bb, + // Entry 1B680 - 1B6BF + 0x07be, 0x07c3, 0x0001, 0x0023, 0x02a0, 0x0003, 0x0023, 0x02a6, + 0x02b6, 0x02c4, 0x0002, 0x07c6, 0x07ca, 0x0002, 0x0023, 0x02e2, + 0x02d5, 0x0002, 0x0023, 0x030c, 0x02f4, 0x0003, 0x07d2, 0x07d5, + 0x07da, 0x0001, 0x0023, 0x02a0, 0x0003, 0x0023, 0x02a6, 0x02b6, + 0x02c4, 0x0002, 0x07dd, 0x07e1, 0x0002, 0x0023, 0x02e2, 0x02d5, + 0x0002, 0x0023, 0x030c, 0x02f4, 0x0003, 0x07e9, 0x07ec, 0x07f1, + 0x0001, 0x0023, 0x02a0, 0x0003, 0x0023, 0x02a6, 0x02b6, 0x02c4, + 0x0002, 0x07f4, 0x07f8, 0x0002, 0x0023, 0x02e2, 0x02d5, 0x0002, + // Entry 1B6C0 - 1B6FF + 0x0023, 0x030c, 0x02f4, 0x0004, 0x0801, 0x0804, 0x0809, 0x0814, + 0x0001, 0x0023, 0x0329, 0x0003, 0x0023, 0x0330, 0x0344, 0x0354, + 0x0002, 0x080c, 0x0810, 0x0002, 0x0023, 0x0374, 0x0366, 0x0002, + 0x0023, 0x03a0, 0x0387, 0x0001, 0x0023, 0x03be, 0x0004, 0x081c, + 0x081f, 0x0824, 0x082f, 0x0001, 0x0023, 0x0329, 0x0003, 0x0023, + 0x03cc, 0x03dd, 0x0354, 0x0002, 0x0827, 0x082b, 0x0002, 0x0023, + 0x0374, 0x0366, 0x0002, 0x0023, 0x03a0, 0x0387, 0x0001, 0x0023, + 0x03be, 0x0004, 0x0837, 0x083a, 0x083f, 0x084a, 0x0001, 0x0023, + // Entry 1B700 - 1B73F + 0x0329, 0x0003, 0x0023, 0x03cc, 0x03dd, 0x0354, 0x0002, 0x0842, + 0x0846, 0x0002, 0x0023, 0x0374, 0x0366, 0x0002, 0x0023, 0x03a0, + 0x0387, 0x0001, 0x0023, 0x03be, 0x0001, 0x084f, 0x0001, 0x0023, + 0x03ec, 0x0001, 0x0854, 0x0001, 0x0023, 0x03ec, 0x0001, 0x0859, + 0x0001, 0x0023, 0x03ec, 0x0003, 0x0860, 0x0863, 0x086a, 0x0001, + 0x0023, 0x03fc, 0x0005, 0x0023, 0x0417, 0x041f, 0x042c, 0x0401, + 0x0432, 0x0002, 0x086d, 0x0871, 0x0002, 0x0023, 0x0449, 0x043d, + 0x0002, 0x0023, 0x0471, 0x045a, 0x0003, 0x0879, 0x087c, 0x0883, + // Entry 1B740 - 1B77F + 0x0001, 0x0023, 0x03fc, 0x0005, 0x0023, 0x0417, 0x041f, 0x042c, + 0x0401, 0x0432, 0x0002, 0x0886, 0x088a, 0x0002, 0x0023, 0x0449, + 0x0449, 0x0002, 0x0023, 0x0471, 0x0471, 0x0003, 0x0892, 0x0895, + 0x089c, 0x0001, 0x0023, 0x03fc, 0x0005, 0x0023, 0x0417, 0x041f, + 0x042c, 0x0401, 0x0432, 0x0002, 0x089f, 0x08a3, 0x0002, 0x0023, + 0x0449, 0x043d, 0x0002, 0x0023, 0x0471, 0x045a, 0x0001, 0x08a9, + 0x0001, 0x0023, 0x048d, 0x0001, 0x08ae, 0x0001, 0x0023, 0x048d, + 0x0001, 0x08b3, 0x0001, 0x0023, 0x048d, 0x0001, 0x08b8, 0x0001, + // Entry 1B780 - 1B7BF + 0x0023, 0x049a, 0x0001, 0x08bd, 0x0001, 0x0023, 0x049a, 0x0001, + 0x08c2, 0x0001, 0x0023, 0x049a, 0x0001, 0x08c7, 0x0001, 0x0023, + 0x04a9, 0x0001, 0x08cc, 0x0001, 0x0023, 0x04a9, 0x0001, 0x08d1, + 0x0001, 0x0023, 0x04a9, 0x0003, 0x0000, 0x08d8, 0x08dd, 0x0003, + 0x0023, 0x03cc, 0x04c2, 0x04cc, 0x0002, 0x08e0, 0x08e4, 0x0002, + 0x0023, 0x04ec, 0x04de, 0x0002, 0x0023, 0x0518, 0x04ff, 0x0003, + 0x0000, 0x08ec, 0x08f1, 0x0003, 0x0023, 0x0536, 0x0545, 0x0552, + 0x0002, 0x08f4, 0x08f8, 0x0002, 0x0023, 0x04ec, 0x04de, 0x0002, + // Entry 1B7C0 - 1B7FF + 0x0023, 0x0518, 0x04ff, 0x0003, 0x0000, 0x0900, 0x0905, 0x0003, + 0x0023, 0x0536, 0x0545, 0x0552, 0x0002, 0x0908, 0x090c, 0x0002, + 0x0023, 0x04ec, 0x0366, 0x0002, 0x0023, 0x0518, 0x04ff, 0x0003, + 0x0000, 0x0914, 0x0919, 0x0003, 0x0023, 0x0562, 0x0572, 0x0580, + 0x0002, 0x091c, 0x0920, 0x0002, 0x0023, 0x059e, 0x0591, 0x0002, + 0x0023, 0x05c8, 0x05b0, 0x0003, 0x0000, 0x0928, 0x092d, 0x0003, + 0x0023, 0x05e5, 0x05f4, 0x0601, 0x0002, 0x0930, 0x0934, 0x0002, + 0x0023, 0x059e, 0x0591, 0x0002, 0x0023, 0x05c8, 0x05b0, 0x0003, + // Entry 1B800 - 1B83F + 0x0000, 0x093c, 0x0941, 0x0003, 0x0023, 0x05e5, 0x05f4, 0x0601, + 0x0002, 0x0944, 0x0948, 0x0002, 0x0023, 0x0591, 0x0591, 0x0002, + 0x0023, 0x05c8, 0x05b0, 0x0003, 0x0000, 0x0950, 0x0955, 0x0003, + 0x0023, 0x0611, 0x0622, 0x0631, 0x0002, 0x0958, 0x095c, 0x0002, + 0x0023, 0x0651, 0x0643, 0x0002, 0x0023, 0x067d, 0x0664, 0x0003, + 0x0000, 0x0964, 0x0969, 0x0003, 0x0023, 0x069b, 0x06aa, 0x06b7, + 0x0002, 0x096c, 0x0970, 0x0002, 0x0023, 0x0651, 0x0643, 0x0002, + 0x0023, 0x067d, 0x0664, 0x0003, 0x0000, 0x0978, 0x097d, 0x0003, + // Entry 1B840 - 1B87F + 0x0023, 0x069b, 0x06aa, 0x06b7, 0x0002, 0x0980, 0x0984, 0x0002, + 0x0023, 0x06c7, 0x0643, 0x0002, 0x0023, 0x067d, 0x0664, 0x0003, + 0x0000, 0x098c, 0x0991, 0x0003, 0x0023, 0x06e8, 0x06fd, 0x0710, + 0x0002, 0x0994, 0x0998, 0x0002, 0x0023, 0x0738, 0x0726, 0x0002, + 0x0023, 0x076c, 0x074f, 0x0003, 0x0000, 0x09a0, 0x09a5, 0x0003, + 0x0023, 0x078e, 0x079d, 0x07aa, 0x0002, 0x09a8, 0x09ac, 0x0002, + 0x0023, 0x0738, 0x0726, 0x0002, 0x0023, 0x076c, 0x074f, 0x0003, + 0x0000, 0x09b4, 0x09b9, 0x0003, 0x0023, 0x078e, 0x079d, 0x07aa, + // Entry 1B880 - 1B8BF + 0x0002, 0x09bc, 0x09c0, 0x0002, 0x0023, 0x0738, 0x0726, 0x0002, + 0x0023, 0x076c, 0x074f, 0x0003, 0x0000, 0x09c8, 0x09cd, 0x0003, + 0x0023, 0x07ba, 0x07cc, 0x07dc, 0x0002, 0x09d0, 0x09d4, 0x0002, + 0x0023, 0x07fe, 0x07ef, 0x0002, 0x0023, 0x082c, 0x0812, 0x0003, + 0x0000, 0x09dc, 0x09e1, 0x0003, 0x0023, 0x084b, 0x085a, 0x0867, + 0x0002, 0x09e4, 0x09e8, 0x0002, 0x0023, 0x07fe, 0x07ef, 0x0002, + 0x0023, 0x082c, 0x0812, 0x0003, 0x0000, 0x09f0, 0x09f5, 0x0003, + 0x0023, 0x084b, 0x085a, 0x0867, 0x0002, 0x09f8, 0x09fc, 0x0002, + // Entry 1B8C0 - 1B8FF + 0x0023, 0x07fe, 0x07ef, 0x0002, 0x0023, 0x082c, 0x0812, 0x0003, + 0x0000, 0x0a04, 0x0a09, 0x0003, 0x0023, 0x0877, 0x088a, 0x089b, + 0x0002, 0x0a0c, 0x0a10, 0x0002, 0x0023, 0x08bf, 0x08af, 0x0002, + 0x0023, 0x08ef, 0x08d4, 0x0003, 0x0000, 0x0a18, 0x0a1d, 0x0003, + 0x0023, 0x090f, 0x091e, 0x092b, 0x0002, 0x0a20, 0x0a24, 0x0002, + 0x0023, 0x08bf, 0x08af, 0x0002, 0x0023, 0x08ef, 0x08d4, 0x0003, + 0x0000, 0x0a2c, 0x0a31, 0x0003, 0x0023, 0x090f, 0x091e, 0x092b, + 0x0002, 0x0a34, 0x0a38, 0x0002, 0x0023, 0x08bf, 0x08af, 0x0002, + // Entry 1B900 - 1B93F + 0x0023, 0x08ef, 0x08d4, 0x0003, 0x0000, 0x0a40, 0x0a45, 0x0003, + 0x0023, 0x093b, 0x094c, 0x095b, 0x0002, 0x0a48, 0x0a4c, 0x0002, + 0x0023, 0x097b, 0x096d, 0x0002, 0x0023, 0x09a7, 0x098e, 0x0003, + 0x0000, 0x0a54, 0x0a59, 0x0003, 0x0023, 0x09c5, 0x09d4, 0x09e1, + 0x0002, 0x0a5c, 0x0a60, 0x0002, 0x0023, 0x097b, 0x096d, 0x0002, + 0x0023, 0x09a7, 0x098e, 0x0003, 0x0000, 0x0a68, 0x0a6d, 0x0003, + 0x0023, 0x09c5, 0x09d4, 0x09e1, 0x0002, 0x0a70, 0x0a74, 0x0002, + 0x0023, 0x09f1, 0x096d, 0x0002, 0x0023, 0x09a7, 0x098e, 0x0001, + // Entry 1B940 - 1B97F + 0x0a7a, 0x0001, 0x0007, 0x0892, 0x0001, 0x0a7f, 0x0001, 0x0007, + 0x0892, 0x0001, 0x0a84, 0x0001, 0x0007, 0x0892, 0x0003, 0x0a8b, + 0x0a8e, 0x0a92, 0x0001, 0x0023, 0x0a12, 0x0002, 0x0023, 0xffff, + 0x0a17, 0x0002, 0x0a95, 0x0a99, 0x0002, 0x0023, 0x0a30, 0x0a24, + 0x0002, 0x0023, 0x0a58, 0x0a41, 0x0003, 0x0aa1, 0x0000, 0x0aa4, + 0x0001, 0x0023, 0x0a12, 0x0002, 0x0aa7, 0x0aab, 0x0002, 0x0023, + 0x0a30, 0x0a24, 0x0002, 0x0023, 0x0a58, 0x0a41, 0x0003, 0x0ab3, + 0x0000, 0x0ab6, 0x0001, 0x0023, 0x0a12, 0x0002, 0x0ab9, 0x0abd, + // Entry 1B980 - 1B9BF + 0x0002, 0x0023, 0x0a30, 0x0a24, 0x0002, 0x0023, 0x0a87, 0x0a74, + 0x0003, 0x0ac5, 0x0ac8, 0x0acc, 0x0001, 0x001d, 0x0dc2, 0x0002, + 0x0023, 0xffff, 0x0a9f, 0x0002, 0x0acf, 0x0ad3, 0x0002, 0x0023, + 0x0abd, 0x0aaf, 0x0002, 0x0023, 0x0ae9, 0x0ad0, 0x0003, 0x0adb, + 0x0000, 0x0ade, 0x0001, 0x0001, 0x07c5, 0x0002, 0x0ae1, 0x0ae5, + 0x0002, 0x0023, 0x0b13, 0x0b07, 0x0002, 0x0023, 0x0b3b, 0x0b24, + 0x0003, 0x0aed, 0x0000, 0x0af0, 0x0001, 0x0001, 0x07c5, 0x0002, + 0x0af3, 0x0af7, 0x0002, 0x0023, 0x0b13, 0x0b07, 0x0002, 0x0023, + // Entry 1B9C0 - 1B9FF + 0x0b3b, 0x0b24, 0x0003, 0x0aff, 0x0b02, 0x0b06, 0x0001, 0x001e, + 0x029d, 0x0002, 0x0023, 0xffff, 0x0b57, 0x0002, 0x0b09, 0x0b0d, + 0x0002, 0x0023, 0x0b6d, 0x0b5e, 0x0002, 0x0023, 0x0b9b, 0x0b81, + 0x0003, 0x0b15, 0x0000, 0x0b18, 0x0001, 0x001f, 0x04da, 0x0002, + 0x0b1b, 0x0b1f, 0x0002, 0x0023, 0x0bc6, 0x0bba, 0x0002, 0x0023, + 0x0bee, 0x0bd7, 0x0003, 0x0b27, 0x0000, 0x0b2a, 0x0001, 0x001f, + 0x04da, 0x0002, 0x0b2d, 0x0b31, 0x0002, 0x0023, 0x0bc6, 0x0bba, + 0x0002, 0x0023, 0x0bee, 0x0c06, 0x0001, 0x0b37, 0x0001, 0x001c, + // Entry 1BA00 - 1BA3F + 0x0ab4, 0x0001, 0x0b3c, 0x0001, 0x001c, 0x0ab4, 0x0001, 0x0b41, + 0x0001, 0x001c, 0x0ab4, 0x0004, 0x0b49, 0x0b4e, 0x0b53, 0x0b62, + 0x0003, 0x0000, 0x1dc7, 0x234c, 0x247b, 0x0003, 0x0023, 0x0c19, + 0x0c25, 0x0c3a, 0x0002, 0x0000, 0x0b56, 0x0003, 0x0000, 0x0b5d, + 0x0b5a, 0x0001, 0x001c, 0x0aeb, 0x0003, 0x0023, 0xffff, 0x0c52, + 0x0c6e, 0x0002, 0x0000, 0x0b65, 0x0003, 0x0bff, 0x0c95, 0x0b69, + 0x0094, 0x0023, 0x0c8a, 0x0c9e, 0x0cb5, 0x0cce, 0x0cfc, 0x0d55, + 0x0d97, 0x0ddd, 0x0e1e, 0x0e5f, 0x0ea3, 0x0ee9, 0x0f24, 0x0f62, + // Entry 1BA40 - 1BA7F + 0x0fa7, 0x0fff, 0x105f, 0x10a9, 0x10fc, 0x116b, 0x11e3, 0x124c, + 0x12ac, 0x12f9, 0x1342, 0x1380, 0x138f, 0x13b0, 0x13ea, 0x1417, + 0x1455, 0x1482, 0x14c5, 0x1507, 0x154b, 0x1589, 0x15a2, 0x15c9, + 0x1618, 0x1673, 0x16a2, 0x16b0, 0x16cb, 0x16f4, 0x1738, 0x175f, + 0x17be, 0x1808, 0x1841, 0x18a4, 0x18fb, 0x192d, 0x1943, 0x196a, + 0x197c, 0x199c, 0x19d4, 0x19ec, 0x1a1c, 0x1a88, 0x1ad8, 0x1ae5, + 0x1b0c, 0x1b66, 0x1baf, 0x1be1, 0x1bfc, 0x1c11, 0x1c23, 0x1c3d, + 0x1c59, 0x1c82, 0x1cc1, 0x1d08, 0x1d49, 0x1d9b, 0x1ded, 0x1e0a, + // Entry 1BA80 - 1BABF + 0x1e35, 0x1e66, 0x1e89, 0x1ec9, 0x1edb, 0x1f02, 0x1f3c, 0x1f65, + 0x1f9d, 0x1fae, 0x1fbf, 0x1fd1, 0x1ffc, 0x2038, 0x2069, 0x20dd, + 0x213b, 0x2188, 0x21be, 0x21ce, 0x21dc, 0x2200, 0x2258, 0x22aa, + 0x22e9, 0x22f6, 0x2329, 0x238d, 0x23da, 0x241d, 0x2457, 0x2465, + 0x248f, 0x24d6, 0x251a, 0x2556, 0x258e, 0x25e3, 0x25f4, 0x2603, + 0x2615, 0x2625, 0x2646, 0x268f, 0x26c5, 0x26f6, 0x2709, 0x2727, + 0x273f, 0x2755, 0x2766, 0x2774, 0x2792, 0x27c5, 0x27d8, 0x27f6, + 0x282a, 0x284d, 0x288f, 0x28ae, 0x28f9, 0x2947, 0x297f, 0x29a5, + // Entry 1BAC0 - 1BAFF + 0x29f7, 0x2a33, 0x2a42, 0x2a56, 0x2a7e, 0x2acc, 0x0094, 0x0023, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0ce3, 0x0d46, 0x0d88, 0x0dcd, + 0x0e11, 0x0e50, 0x0e92, 0x0eda, 0x0f17, 0x0f53, 0x0f95, 0x0fe3, + 0x104f, 0x1097, 0x10e2, 0x1145, 0x11c7, 0x1230, 0x1299, 0x12ea, + 0x132f, 0xffff, 0xffff, 0x139f, 0xffff, 0x1404, 0xffff, 0x1472, + 0x14b7, 0x14f9, 0x1538, 0xffff, 0xffff, 0x15b8, 0x1603, 0x1666, + 0xffff, 0xffff, 0xffff, 0x16de, 0xffff, 0x1748, 0x17a5, 0xffff, + 0x1828, 0x188b, 0x18ee, 0xffff, 0xffff, 0xffff, 0xffff, 0x198c, + // Entry 1BB00 - 1BB3F + 0xffff, 0xffff, 0x1a00, 0x1a6c, 0xffff, 0xffff, 0x1af4, 0x1b54, + 0x1ba2, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1c75, + 0x1cb1, 0x1cf9, 0x1d3b, 0x1d7a, 0xffff, 0xffff, 0x1e27, 0xffff, + 0x1e75, 0xffff, 0xffff, 0x1ef0, 0xffff, 0x1f55, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1fea, 0xffff, 0x2047, 0x20c2, 0x2128, 0x2179, + 0xffff, 0xffff, 0xffff, 0x21ea, 0x2244, 0x2295, 0xffff, 0xffff, + 0x230d, 0x2379, 0x23cd, 0x240c, 0xffff, 0xffff, 0x247e, 0x24c9, + 0x2508, 0xffff, 0x256e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 1BB40 - 1BB7F + 0x2635, 0x2680, 0x26b7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2783, 0xffff, 0xffff, 0x27e8, 0xffff, 0x2838, + 0xffff, 0x289e, 0x28e6, 0x2937, 0xffff, 0x2991, 0x29e5, 0xffff, + 0xffff, 0xffff, 0x2a6e, 0x2ab6, 0x0094, 0x0023, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0d21, 0x0d70, 0x0db2, 0x0df8, 0x0e3a, 0x0e7a, + 0x0ec0, 0x0f01, 0x0f3d, 0x0f7d, 0x0fc5, 0x1027, 0x107b, 0x10c7, + 0x1122, 0x119a, 0x120b, 0x1274, 0x12cb, 0x1314, 0x1361, 0xffff, + 0xffff, 0x13cd, 0xffff, 0x1436, 0xffff, 0x149e, 0x14df, 0x1521, + // Entry 1BB80 - 1BBBF + 0x156a, 0xffff, 0xffff, 0x15e6, 0x1639, 0x168c, 0xffff, 0xffff, + 0xffff, 0x1716, 0xffff, 0x1782, 0x17e3, 0xffff, 0x1866, 0x18c9, + 0x1914, 0xffff, 0xffff, 0xffff, 0xffff, 0x19b8, 0xffff, 0xffff, + 0x1a44, 0x1ab0, 0xffff, 0xffff, 0x1b30, 0x1b84, 0x1bc8, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1c9b, 0x1cdd, 0x1d23, + 0x1d63, 0x1dc5, 0xffff, 0xffff, 0x1e4f, 0xffff, 0x1ea9, 0xffff, + 0xffff, 0x1f20, 0xffff, 0x1f81, 0xffff, 0xffff, 0xffff, 0xffff, + 0x201a, 0xffff, 0x2097, 0x2104, 0x215a, 0x21a3, 0xffff, 0xffff, + // Entry 1BBC0 - 1BBFF + 0xffff, 0x2222, 0x2278, 0x22cb, 0xffff, 0xffff, 0x2351, 0x23ad, + 0x23f3, 0x243a, 0xffff, 0xffff, 0x24ac, 0x24ef, 0x2538, 0xffff, + 0x25ba, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2663, 0x26a7, + 0x26df, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x27ad, 0xffff, 0xffff, 0x2810, 0xffff, 0x286e, 0xffff, 0x28ca, + 0x2918, 0x2963, 0xffff, 0x29c5, 0x2a15, 0xffff, 0xffff, 0xffff, + 0x2a9a, 0x2aee, 0x0003, 0x0004, 0x01cb, 0x0616, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0038, 0x0008, + // Entry 1BC00 - 1BC3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, 0x0027, + 0x0004, 0x0024, 0x001e, 0x001b, 0x0021, 0x0001, 0x0024, 0x0000, + 0x0001, 0x0014, 0x035a, 0x0001, 0x0016, 0x0098, 0x0001, 0x001f, + 0x0b31, 0x0004, 0x0035, 0x002f, 0x002c, 0x0032, 0x0001, 0x0016, + 0x02d0, 0x0001, 0x0016, 0x02d0, 0x0001, 0x0006, 0x022e, 0x0001, + 0x0006, 0x022e, 0x0008, 0x0041, 0x00a6, 0x00fd, 0x0132, 0x0173, + 0x0198, 0x01a9, 0x01ba, 0x0002, 0x0044, 0x0075, 0x0003, 0x0048, + 0x0057, 0x0066, 0x000d, 0x0016, 0xffff, 0x00a3, 0x25df, 0x25e4, + // Entry 1BC40 - 1BC7F + 0x00b2, 0x25e9, 0x25ed, 0x25f2, 0x00c5, 0x25f7, 0x00cf, 0x25fc, + 0x2601, 0x000d, 0x0000, 0xffff, 0x1e5d, 0x2364, 0x2357, 0x241f, + 0x2357, 0x1e5d, 0x1e5d, 0x241f, 0x235b, 0x236a, 0x236c, 0x236e, + 0x000d, 0x000d, 0xffff, 0x0089, 0x0090, 0x3330, 0x3335, 0x333c, + 0x00a3, 0x00a8, 0x3340, 0x3347, 0x3258, 0x3351, 0x335a, 0x0003, + 0x0079, 0x0088, 0x0097, 0x000d, 0x000d, 0xffff, 0x0059, 0x3363, + 0x3367, 0x336b, 0x333c, 0x336f, 0x3373, 0x3377, 0x337b, 0x337f, + 0x3383, 0x3387, 0x000d, 0x0000, 0xffff, 0x1e5d, 0x2364, 0x2357, + // Entry 1BC80 - 1BCBF + 0x241f, 0x2357, 0x1e5d, 0x1e5d, 0x241f, 0x235b, 0x236a, 0x236c, + 0x236e, 0x000d, 0x000d, 0xffff, 0x0089, 0x0090, 0x3330, 0x3335, + 0x333c, 0x00a3, 0x00a8, 0x3340, 0x3347, 0x3258, 0x3351, 0x335a, + 0x0002, 0x00a9, 0x00d3, 0x0005, 0x00af, 0x00b8, 0x00ca, 0x0000, + 0x00c1, 0x0007, 0x0024, 0x0013, 0x0018, 0x001e, 0x0024, 0x0029, + 0x002f, 0x0035, 0x0007, 0x0000, 0x235b, 0x2357, 0x04dd, 0x2357, + 0x19c7, 0x2364, 0x2296, 0x0007, 0x0024, 0x003a, 0x003e, 0x0043, + 0x0048, 0x004c, 0x0051, 0x0055, 0x0007, 0x0024, 0x0059, 0x0064, + // Entry 1BCC0 - 1BCFF + 0x006f, 0x0079, 0x0083, 0x008d, 0x009b, 0x0005, 0x00d9, 0x00e2, + 0x00f4, 0x0000, 0x00eb, 0x0007, 0x0024, 0x00a7, 0x00ab, 0x00b0, + 0x00b5, 0x00b9, 0x00be, 0x00c3, 0x0007, 0x0000, 0x235b, 0x2357, + 0x04dd, 0x2357, 0x19c7, 0x2364, 0x2296, 0x0007, 0x0022, 0x079c, + 0x351b, 0x351f, 0x3523, 0x3526, 0x352a, 0x352d, 0x0007, 0x0024, + 0x0059, 0x0064, 0x006f, 0x0079, 0x0083, 0x008d, 0x009b, 0x0002, + 0x0100, 0x0119, 0x0003, 0x0104, 0x010b, 0x0112, 0x0005, 0x0024, + 0xffff, 0x00c7, 0x00d2, 0x00dd, 0x00e8, 0x0005, 0x0000, 0xffff, + // Entry 1BD00 - 1BD3F + 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0024, 0xffff, 0x00f3, + 0x0107, 0x011b, 0x012f, 0x0003, 0x011d, 0x0124, 0x012b, 0x0005, + 0x0024, 0xffff, 0x00c7, 0x00d2, 0x00dd, 0x00e8, 0x0005, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0024, 0xffff, + 0x00f3, 0x0107, 0x011b, 0x012f, 0x0002, 0x0135, 0x0154, 0x0003, + 0x0139, 0x0142, 0x014b, 0x0002, 0x013c, 0x013f, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0002, 0x0145, 0x0148, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0002, 0x014e, 0x0151, + // Entry 1BD40 - 1BD7F + 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0003, 0x0158, + 0x0161, 0x016a, 0x0002, 0x015b, 0x015e, 0x0001, 0x0000, 0x04ef, + 0x0001, 0x0000, 0x04f2, 0x0002, 0x0164, 0x0167, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0002, 0x016d, 0x0170, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0003, 0x0182, 0x018d, + 0x0177, 0x0002, 0x017a, 0x017e, 0x0002, 0x0024, 0x0143, 0x0169, + 0x0002, 0x0024, 0x014e, 0x0175, 0x0002, 0x0185, 0x0189, 0x0002, + 0x0016, 0x022c, 0x0250, 0x0002, 0x0024, 0x018b, 0x0197, 0x0002, + // Entry 1BD80 - 1BDBF + 0x0190, 0x0194, 0x0002, 0x0016, 0x027b, 0x0283, 0x0002, 0x0024, + 0x01a1, 0x01a5, 0x0004, 0x01a6, 0x01a0, 0x019d, 0x01a3, 0x0001, + 0x0017, 0x0528, 0x0001, 0x0014, 0x0792, 0x0001, 0x0017, 0x0538, + 0x0001, 0x0007, 0x02e9, 0x0004, 0x01b7, 0x01b1, 0x01ae, 0x01b4, + 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, + 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, 0x01c8, 0x01c2, 0x01bf, + 0x01c5, 0x0001, 0x0016, 0x02d0, 0x0001, 0x0016, 0x02d0, 0x0001, + 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0042, 0x020e, 0x0213, + // Entry 1BDC0 - 1BDFF + 0x0218, 0x021d, 0x0234, 0x0246, 0x0258, 0x026f, 0x0281, 0x0293, + 0x02aa, 0x02bc, 0x02ce, 0x02e9, 0x02ff, 0x0315, 0x031a, 0x031f, + 0x0324, 0x033d, 0x034f, 0x0361, 0x0366, 0x036b, 0x0370, 0x0375, + 0x037a, 0x037f, 0x0384, 0x0389, 0x038e, 0x03a2, 0x03b6, 0x03ca, + 0x03de, 0x03f2, 0x0406, 0x041a, 0x042e, 0x0442, 0x0456, 0x046a, + 0x047e, 0x0492, 0x04a6, 0x04ba, 0x04ce, 0x04e2, 0x04f6, 0x050a, + 0x051e, 0x0532, 0x0537, 0x053c, 0x0541, 0x0557, 0x056d, 0x0583, + 0x0599, 0x05af, 0x05c5, 0x05db, 0x05f1, 0x0607, 0x060c, 0x0611, + // Entry 1BE00 - 1BE3F + 0x0001, 0x0210, 0x0001, 0x0024, 0x01a8, 0x0001, 0x0215, 0x0001, + 0x0024, 0x01a8, 0x0001, 0x021a, 0x0001, 0x0024, 0x01a8, 0x0003, + 0x0221, 0x0224, 0x0229, 0x0001, 0x0024, 0x01b7, 0x0003, 0x0024, + 0x01bb, 0x01c4, 0x01cb, 0x0002, 0x022c, 0x0230, 0x0002, 0x0024, + 0x01d6, 0x01d6, 0x0002, 0x0024, 0x01e1, 0x01e1, 0x0003, 0x0238, + 0x0000, 0x023b, 0x0001, 0x0024, 0x01b7, 0x0002, 0x023e, 0x0242, + 0x0002, 0x0024, 0x01d6, 0x01d6, 0x0002, 0x0024, 0x01e1, 0x01e1, + 0x0003, 0x024a, 0x0000, 0x024d, 0x0001, 0x0024, 0x01b7, 0x0002, + // Entry 1BE40 - 1BE7F + 0x0250, 0x0254, 0x0002, 0x0024, 0x01d6, 0x01d6, 0x0002, 0x0024, + 0x01e1, 0x01e1, 0x0003, 0x025c, 0x025f, 0x0264, 0x0001, 0x0024, + 0x01f1, 0x0003, 0x0024, 0x0202, 0x021a, 0x0232, 0x0002, 0x0267, + 0x026b, 0x0002, 0x0024, 0x025e, 0x0248, 0x0002, 0x0024, 0x0291, + 0x0276, 0x0003, 0x0273, 0x0000, 0x0276, 0x0001, 0x0024, 0x02ae, + 0x0002, 0x0279, 0x027d, 0x0002, 0x0024, 0x02b6, 0x02b6, 0x0002, + 0x0024, 0x02c5, 0x02c5, 0x0003, 0x0285, 0x0000, 0x0288, 0x0001, + 0x0024, 0x02ae, 0x0002, 0x028b, 0x028f, 0x0002, 0x0024, 0x02b6, + // Entry 1BE80 - 1BEBF + 0x02b6, 0x0002, 0x0024, 0x02c5, 0x02c5, 0x0003, 0x0297, 0x029a, + 0x029f, 0x0001, 0x0024, 0x02d9, 0x0003, 0x0024, 0x02e3, 0x02f4, + 0x0304, 0x0002, 0x02a2, 0x02a6, 0x0002, 0x0024, 0x0322, 0x0313, + 0x0002, 0x0024, 0x0347, 0x0333, 0x0003, 0x02ae, 0x0000, 0x02b1, + 0x0001, 0x0024, 0x035d, 0x0002, 0x02b4, 0x02b8, 0x0002, 0x0024, + 0x0363, 0x0363, 0x0002, 0x0024, 0x0370, 0x0370, 0x0003, 0x02c0, + 0x0000, 0x02c3, 0x0001, 0x0024, 0x035d, 0x0002, 0x02c6, 0x02ca, + 0x0002, 0x0024, 0x0363, 0x0363, 0x0002, 0x0024, 0x0370, 0x0370, + // Entry 1BEC0 - 1BEFF + 0x0004, 0x02d3, 0x02d6, 0x02db, 0x02e6, 0x0001, 0x0024, 0x0382, + 0x0003, 0x0024, 0x0387, 0x0395, 0x039f, 0x0002, 0x02de, 0x02e2, + 0x0002, 0x0024, 0x03b7, 0x03ab, 0x0002, 0x0024, 0x03d5, 0x03c4, + 0x0001, 0x0024, 0x03e7, 0x0004, 0x02ee, 0x0000, 0x02f1, 0x02fc, + 0x0001, 0x0024, 0x03f7, 0x0002, 0x02f4, 0x02f8, 0x0002, 0x0024, + 0x03fb, 0x03fb, 0x0002, 0x0024, 0x0406, 0x0406, 0x0001, 0x0024, + 0x03e7, 0x0004, 0x0304, 0x0000, 0x0307, 0x0312, 0x0001, 0x0014, + 0x06f5, 0x0002, 0x030a, 0x030e, 0x0002, 0x0024, 0x0416, 0x0416, + // Entry 1BF00 - 1BF3F + 0x0002, 0x0024, 0x0420, 0x0420, 0x0001, 0x0024, 0x03e7, 0x0001, + 0x0317, 0x0001, 0x0024, 0x042f, 0x0001, 0x031c, 0x0001, 0x0024, + 0x0443, 0x0001, 0x0321, 0x0001, 0x0024, 0x0443, 0x0003, 0x0328, + 0x032b, 0x0332, 0x0001, 0x0024, 0x0450, 0x0005, 0x0024, 0x0461, + 0x046a, 0x0471, 0x0456, 0x047b, 0x0002, 0x0335, 0x0339, 0x0002, + 0x0024, 0x0494, 0x0489, 0x0002, 0x0024, 0x04b3, 0x04a1, 0x0003, + 0x0341, 0x0000, 0x0344, 0x0001, 0x0024, 0x04c5, 0x0002, 0x0347, + 0x034b, 0x0002, 0x0024, 0x04c9, 0x04c9, 0x0002, 0x0024, 0x04d4, + // Entry 1BF40 - 1BF7F + 0x04d4, 0x0003, 0x0353, 0x0000, 0x0356, 0x0001, 0x0001, 0x02ab, + 0x0002, 0x0359, 0x035d, 0x0002, 0x0024, 0x04e4, 0x04e4, 0x0002, + 0x0024, 0x04ee, 0x04ee, 0x0001, 0x0363, 0x0001, 0x0024, 0x04fd, + 0x0001, 0x0368, 0x0001, 0x0024, 0x050e, 0x0001, 0x036d, 0x0001, + 0x0024, 0x050e, 0x0001, 0x0372, 0x0001, 0x0024, 0x051c, 0x0001, + 0x0377, 0x0001, 0x0024, 0x051c, 0x0001, 0x037c, 0x0001, 0x0024, + 0x051c, 0x0001, 0x0381, 0x0001, 0x0024, 0x0526, 0x0001, 0x0386, + 0x0001, 0x0024, 0x053f, 0x0001, 0x038b, 0x0001, 0x0024, 0x053f, + // Entry 1BF80 - 1BFBF + 0x0003, 0x0000, 0x0392, 0x0397, 0x0003, 0x0024, 0x0552, 0x0564, + 0x0574, 0x0002, 0x039a, 0x039e, 0x0002, 0x0024, 0x059e, 0x058e, + 0x0002, 0x0024, 0x05c6, 0x05b0, 0x0003, 0x0000, 0x03a6, 0x03ab, + 0x0003, 0x0024, 0x05de, 0x05ec, 0x05f8, 0x0002, 0x03ae, 0x03b2, + 0x0002, 0x0024, 0x060c, 0x060c, 0x0002, 0x0024, 0x0618, 0x0618, + 0x0003, 0x0000, 0x03ba, 0x03bf, 0x0003, 0x0024, 0x062a, 0x0637, + 0x0642, 0x0002, 0x03c2, 0x03c6, 0x0002, 0x0024, 0x0655, 0x0655, + 0x0002, 0x0024, 0x0660, 0x0660, 0x0003, 0x0000, 0x03ce, 0x03d3, + // Entry 1BFC0 - 1BFFF + 0x0003, 0x0024, 0x0671, 0x0683, 0x0693, 0x0002, 0x03d6, 0x03da, + 0x0002, 0x0024, 0x06bd, 0x06ad, 0x0002, 0x0024, 0x06e5, 0x06cf, + 0x0003, 0x0000, 0x03e2, 0x03e7, 0x0003, 0x0024, 0x06fd, 0x070c, + 0x0719, 0x0002, 0x03ea, 0x03ee, 0x0002, 0x0024, 0x072e, 0x072e, + 0x0002, 0x0024, 0x073b, 0x073b, 0x0003, 0x0000, 0x03f6, 0x03fb, + 0x0003, 0x0024, 0x074e, 0x075c, 0x0768, 0x0002, 0x03fe, 0x0402, + 0x0002, 0x0024, 0x077c, 0x077c, 0x0002, 0x0024, 0x0788, 0x0788, + 0x0003, 0x0000, 0x040a, 0x040f, 0x0003, 0x0024, 0x079a, 0x07ab, + // Entry 1C000 - 1C03F + 0x07ba, 0x0002, 0x0412, 0x0416, 0x0002, 0x0024, 0x07e2, 0x07d3, + 0x0002, 0x0024, 0x0808, 0x07f3, 0x0003, 0x0000, 0x041e, 0x0423, + 0x0003, 0x0024, 0x081f, 0x082e, 0x083b, 0x0002, 0x0426, 0x042a, + 0x0002, 0x0024, 0x0850, 0x0850, 0x0002, 0x0024, 0x085d, 0x085d, + 0x0003, 0x0000, 0x0432, 0x0437, 0x0003, 0x0024, 0x0870, 0x087e, + 0x088a, 0x0002, 0x043a, 0x043e, 0x0002, 0x0024, 0x089e, 0x089e, + 0x0002, 0x0024, 0x08aa, 0x08aa, 0x0003, 0x0000, 0x0446, 0x044b, + 0x0003, 0x0024, 0x08bc, 0x08cd, 0x08dc, 0x0002, 0x044e, 0x0452, + // Entry 1C040 - 1C07F + 0x0002, 0x0024, 0x0904, 0x08f5, 0x0002, 0x0024, 0x092a, 0x0915, + 0x0003, 0x0000, 0x045a, 0x045f, 0x0003, 0x0024, 0x0941, 0x094f, + 0x095b, 0x0002, 0x0462, 0x0466, 0x0002, 0x0024, 0x096f, 0x096f, + 0x0002, 0x0024, 0x097b, 0x097b, 0x0003, 0x0000, 0x046e, 0x0473, + 0x0003, 0x0024, 0x098d, 0x099a, 0x09a5, 0x0002, 0x0476, 0x047a, + 0x0002, 0x0024, 0x09b8, 0x09b8, 0x0002, 0x0024, 0x09c3, 0x09c3, + 0x0003, 0x0000, 0x0482, 0x0487, 0x0003, 0x0024, 0x09d4, 0x09e5, + 0x09f4, 0x0002, 0x048a, 0x048e, 0x0002, 0x0024, 0x0a1c, 0x0a0d, + // Entry 1C080 - 1C0BF + 0x0002, 0x0024, 0x0a42, 0x0a2d, 0x0003, 0x0000, 0x0496, 0x049b, + 0x0003, 0x0024, 0x0a59, 0x0a68, 0x0a75, 0x0002, 0x049e, 0x04a2, + 0x0002, 0x0024, 0x0a8a, 0x0a8a, 0x0002, 0x0024, 0x0a97, 0x0a97, + 0x0003, 0x0000, 0x04aa, 0x04af, 0x0003, 0x0024, 0x0aaa, 0x0ab8, + 0x0ac4, 0x0002, 0x04b2, 0x04b6, 0x0002, 0x0024, 0x0ad8, 0x0ad8, + 0x0002, 0x0024, 0x0ae4, 0x0ae4, 0x0003, 0x0000, 0x04be, 0x04c3, + 0x0003, 0x0024, 0x0af6, 0x0b0b, 0x0b1e, 0x0002, 0x04c6, 0x04ca, + 0x0002, 0x0024, 0x0b4e, 0x0b3b, 0x0002, 0x0024, 0x0b7c, 0x0b63, + // Entry 1C0C0 - 1C0FF + 0x0003, 0x0000, 0x04d2, 0x04d7, 0x0003, 0x0024, 0x0b97, 0x0ba6, + 0x0bb3, 0x0002, 0x04da, 0x04de, 0x0002, 0x0024, 0x0bc8, 0x0bc8, + 0x0002, 0x0024, 0x0bd5, 0x0bd5, 0x0003, 0x0000, 0x04e6, 0x04eb, + 0x0003, 0x0024, 0x0be8, 0x0bf5, 0x0c00, 0x0002, 0x04ee, 0x04f2, + 0x0002, 0x0024, 0x0c13, 0x0c13, 0x0002, 0x0024, 0x0c1e, 0x0c1e, + 0x0003, 0x0000, 0x04fa, 0x04ff, 0x0003, 0x0024, 0x0c2f, 0x0c42, + 0x0c53, 0x0002, 0x0502, 0x0506, 0x0002, 0x0024, 0x0c7f, 0x0c6e, + 0x0002, 0x0024, 0x0ca9, 0x0c92, 0x0003, 0x0000, 0x050e, 0x0513, + // Entry 1C100 - 1C13F + 0x0003, 0x0024, 0x0cc2, 0x0cd0, 0x0cdc, 0x0002, 0x0516, 0x051a, + 0x0002, 0x0024, 0x0cf0, 0x0cf0, 0x0002, 0x0024, 0x0cfc, 0x0cfc, + 0x0003, 0x0000, 0x0522, 0x0527, 0x0003, 0x0024, 0x0d0e, 0x0d1b, + 0x0d26, 0x0002, 0x052a, 0x052e, 0x0002, 0x0024, 0x0d39, 0x0d39, + 0x0002, 0x0024, 0x0d44, 0x0d44, 0x0001, 0x0534, 0x0001, 0x0007, + 0x0892, 0x0001, 0x0539, 0x0001, 0x0007, 0x0892, 0x0001, 0x053e, + 0x0001, 0x0007, 0x0892, 0x0003, 0x0545, 0x0548, 0x054c, 0x0001, + 0x0024, 0x0d55, 0x0002, 0x0024, 0xffff, 0x0d5b, 0x0002, 0x054f, + // Entry 1C140 - 1C17F + 0x0553, 0x0002, 0x0024, 0x0d76, 0x0d69, 0x0002, 0x0024, 0x0d96, + 0x0d84, 0x0003, 0x055b, 0x055e, 0x0562, 0x0001, 0x0016, 0x0c57, + 0x0002, 0x0024, 0xffff, 0x0d5b, 0x0002, 0x0565, 0x0569, 0x0002, + 0x0024, 0x0da9, 0x0da9, 0x0002, 0x0024, 0x0db3, 0x0db3, 0x0003, + 0x0571, 0x0574, 0x0578, 0x0001, 0x0016, 0x0c57, 0x0002, 0x0024, + 0xffff, 0x0d5b, 0x0002, 0x057b, 0x057f, 0x0002, 0x0024, 0x0da9, + 0x0da9, 0x0002, 0x0024, 0x0db3, 0x0db3, 0x0003, 0x0587, 0x058a, + 0x058e, 0x0001, 0x0024, 0x0dc2, 0x0002, 0x0024, 0xffff, 0x0dcb, + // Entry 1C180 - 1C1BF + 0x0002, 0x0591, 0x0595, 0x0002, 0x0024, 0x0de9, 0x0ddb, 0x0002, + 0x0024, 0x0e0c, 0x0df9, 0x0003, 0x059d, 0x05a0, 0x05a4, 0x0001, + 0x0001, 0x07c5, 0x0002, 0x0024, 0xffff, 0x0dcb, 0x0002, 0x05a7, + 0x05ab, 0x0002, 0x0024, 0x0e21, 0x0e21, 0x0002, 0x0024, 0x0e2d, + 0x0e2d, 0x0003, 0x05b3, 0x05b6, 0x05ba, 0x0001, 0x0001, 0x07e7, + 0x0002, 0x0024, 0xffff, 0x0dcb, 0x0002, 0x05bd, 0x05c1, 0x0002, + 0x0024, 0x0e3e, 0x0e3e, 0x0002, 0x0024, 0x0e48, 0x0e48, 0x0003, + 0x05c9, 0x05cc, 0x05d0, 0x0001, 0x0016, 0x0cec, 0x0002, 0x0024, + // Entry 1C1C0 - 1C1FF + 0xffff, 0x0e57, 0x0002, 0x05d3, 0x05d7, 0x0002, 0x0024, 0x0e5b, + 0x0e5b, 0x0002, 0x0024, 0x0e69, 0x0e69, 0x0003, 0x05df, 0x05e2, + 0x05e6, 0x0001, 0x0001, 0x083e, 0x0002, 0x0024, 0xffff, 0x0e57, + 0x0002, 0x05e9, 0x05ed, 0x0002, 0x0024, 0x0e7c, 0x0e7c, 0x0002, + 0x0024, 0x0e88, 0x0e88, 0x0003, 0x05f5, 0x05f8, 0x05fc, 0x0001, + 0x0001, 0x0860, 0x0002, 0x0024, 0xffff, 0x0e57, 0x0002, 0x05ff, + 0x0603, 0x0002, 0x0024, 0x0e99, 0x0e99, 0x0002, 0x0024, 0x0ea3, + 0x0ea3, 0x0001, 0x0609, 0x0001, 0x0024, 0x0eb2, 0x0001, 0x060e, + // Entry 1C200 - 1C23F + 0x0001, 0x0024, 0x0eb2, 0x0001, 0x0613, 0x0001, 0x0024, 0x0eb2, + 0x0004, 0x061b, 0x0620, 0x0625, 0x0634, 0x0003, 0x0000, 0x1dc7, + 0x234c, 0x247b, 0x0003, 0x0024, 0x0ebe, 0x0ec8, 0x0ed8, 0x0002, + 0x0000, 0x0628, 0x0003, 0x0000, 0x062f, 0x062c, 0x0001, 0x0024, + 0x0ee9, 0x0003, 0x0024, 0xffff, 0x0eff, 0x0f1b, 0x0002, 0x0000, + 0x0637, 0x0003, 0x06d1, 0x0767, 0x063b, 0x0094, 0x0024, 0x0f2e, + 0x0f3f, 0x0f50, 0x0f63, 0x0f90, 0x0fd0, 0x1005, 0x103c, 0x1073, + 0x10ab, 0x10e4, 0xffff, 0x1118, 0x1149, 0x1182, 0x11c6, 0x120f, + // Entry 1C240 - 1C27F + 0x1247, 0x1287, 0x12d9, 0x1333, 0x1385, 0x13d1, 0x1410, 0x144e, + 0x147d, 0x1489, 0x14a6, 0x14d1, 0x1502, 0x1541, 0x1565, 0x1599, + 0x15c7, 0x15fb, 0x162a, 0x163b, 0x165d, 0x169b, 0x16d9, 0x16fc, + 0x1708, 0x1721, 0x1746, 0x1779, 0x1798, 0x17da, 0x180d, 0x183a, + 0x1884, 0x18ca, 0x18ed, 0x1902, 0x192f, 0x193f, 0x195b, 0x1984, + 0x1999, 0x19c7, 0x1a1f, 0x1a5e, 0x1a70, 0x1a93, 0x1adc, 0x1b14, + 0x1b37, 0x1b43, 0x1b52, 0x1b61, 0x1b76, 0x1b8d, 0x1baf, 0x1be0, + 0x1c17, 0x1c4c, 0xffff, 0x1c71, 0x1c88, 0x1cab, 0x1cd0, 0x1cef, + // Entry 1C280 - 1C2BF + 0x1d20, 0x1d2f, 0x1d51, 0x1d7e, 0x1da2, 0x1dcb, 0x1dda, 0x1dee, + 0x1dfe, 0x1e24, 0x1e51, 0x1e75, 0x1ec6, 0x1f10, 0x1f4c, 0x1f73, + 0x1f89, 0x1f95, 0x1fb5, 0x1ffb, 0x203d, 0x2070, 0x207b, 0x20a9, + 0x20fc, 0x2138, 0x216a, 0x2195, 0x21a1, 0x21c6, 0x21fc, 0x2233, + 0x2268, 0x2299, 0x22de, 0x22f4, 0x2301, 0x2311, 0x2320, 0x233d, + 0xffff, 0x2374, 0x2399, 0x23af, 0x23be, 0x23d3, 0x23ee, 0x23fc, + 0x2408, 0x2422, 0x2449, 0x245c, 0x2476, 0x249b, 0x24ba, 0x24ed, + 0x2508, 0x2542, 0x257f, 0x25a8, 0x25ca, 0x260b, 0x2638, 0x2645, + // Entry 1C2C0 - 1C2FF + 0x2655, 0x2682, 0x26bf, 0x0094, 0x0024, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0f7d, 0x0fc3, 0x0ff7, 0x102e, 0x1065, 0x109c, 0x10d6, + 0xffff, 0x110d, 0x113b, 0x1172, 0x11af, 0x1201, 0x1238, 0x1272, + 0x12be, 0x131c, 0x136e, 0x13c0, 0x1400, 0x143d, 0xffff, 0xffff, + 0x1497, 0xffff, 0x14e9, 0xffff, 0x1557, 0x158e, 0x15bc, 0x15ea, + 0xffff, 0xffff, 0x164e, 0x1688, 0x16ce, 0xffff, 0xffff, 0xffff, + 0x1733, 0xffff, 0x1787, 0x17c7, 0xffff, 0x1827, 0x186d, 0x18bf, + 0xffff, 0xffff, 0xffff, 0xffff, 0x194d, 0xffff, 0xffff, 0x19ae, + // Entry 1C300 - 1C33F + 0x1a06, 0xffff, 0xffff, 0x1a7d, 0x1acc, 0x1b09, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x1ba4, 0x1bd2, 0x1c09, 0x1c40, + 0xffff, 0xffff, 0xffff, 0x1c9f, 0xffff, 0x1cdd, 0xffff, 0xffff, + 0x1d41, 0xffff, 0x1d94, 0xffff, 0xffff, 0xffff, 0xffff, 0x1e14, + 0xffff, 0x1e5e, 0x1eb0, 0x1eff, 0x1f3f, 0xffff, 0xffff, 0xffff, + 0x1fa1, 0x1fea, 0x202a, 0xffff, 0xffff, 0x208f, 0x20ea, 0x212d, + 0x215b, 0xffff, 0xffff, 0x21b7, 0x21f1, 0x221f, 0xffff, 0x227d, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x232e, 0xffff, 0x2368, + // Entry 1C340 - 1C37F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2415, + 0xffff, 0xffff, 0x246a, 0xffff, 0x24a7, 0xffff, 0x24fa, 0x2531, + 0x2571, 0xffff, 0x25b8, 0x25fb, 0xffff, 0xffff, 0xffff, 0x2674, + 0x26ab, 0x0094, 0x0024, 0xffff, 0xffff, 0xffff, 0xffff, 0x0faa, + 0x0fe4, 0x101a, 0x1051, 0x1088, 0x10c1, 0x10f9, 0xffff, 0x112a, + 0x115e, 0x1199, 0x11e4, 0x1224, 0x125d, 0x12a3, 0x12fb, 0x1351, + 0x13a3, 0x13e9, 0x1427, 0x1466, 0xffff, 0xffff, 0x14bc, 0xffff, + 0x1522, 0xffff, 0x157a, 0x15ab, 0x15d9, 0x1613, 0xffff, 0xffff, + // Entry 1C380 - 1C3BF + 0x1673, 0x16b5, 0x16eb, 0xffff, 0xffff, 0xffff, 0x1760, 0xffff, + 0x17b0, 0x17f4, 0xffff, 0x1854, 0x18a2, 0x18dc, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1970, 0xffff, 0xffff, 0x19e7, 0x1a3f, 0xffff, + 0xffff, 0x1ab0, 0x1af3, 0x1b26, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1bc1, 0x1bf5, 0x1c2c, 0x1c5f, 0xffff, 0xffff, + 0xffff, 0x1cbe, 0xffff, 0x1d08, 0xffff, 0xffff, 0x1d68, 0xffff, + 0x1db7, 0xffff, 0xffff, 0xffff, 0xffff, 0x1e3b, 0xffff, 0x1e93, + 0x1ee3, 0x1f28, 0x1f60, 0xffff, 0xffff, 0xffff, 0x1fd0, 0x2013, + // Entry 1C3C0 - 1C3FF + 0x2057, 0xffff, 0xffff, 0x20ca, 0x2115, 0x214a, 0x2180, 0xffff, + 0xffff, 0x21dc, 0x220e, 0x224e, 0xffff, 0x22bc, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2353, 0xffff, 0x2387, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2436, 0xffff, 0xffff, + 0x2489, 0xffff, 0x24d4, 0xffff, 0x251d, 0x255a, 0x2594, 0xffff, + 0x25e3, 0x2622, 0xffff, 0xffff, 0xffff, 0x2697, 0x26da, 0x0003, + 0x0004, 0x0ac1, 0x0f3a, 0x0012, 0x0017, 0x0044, 0x0135, 0x01bc, + 0x02ad, 0x0000, 0x0334, 0x035f, 0x0582, 0x0618, 0x0696, 0x0000, + // Entry 1C400 - 1C43F + 0x0000, 0x0000, 0x0000, 0x0728, 0x0a27, 0x0aa5, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0020, 0x0033, 0x0000, 0x9006, 0x0003, + 0x0029, 0x002e, 0x0024, 0x0001, 0x0026, 0x0001, 0x0025, 0x0000, + 0x0001, 0x002b, 0x0001, 0x0025, 0x0010, 0x0001, 0x0030, 0x0001, + 0x0006, 0x01e5, 0x0004, 0x0041, 0x003b, 0x0038, 0x003e, 0x0001, + 0x0002, 0x0000, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, + 0x0001, 0x0002, 0x0587, 0x000a, 0x004f, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0124, 0x0000, 0x0000, 0x0000, 0x00b4, 0x0002, 0x0052, + // Entry 1C440 - 1C47F + 0x0083, 0x0003, 0x0056, 0x0065, 0x0074, 0x000d, 0x0025, 0xffff, + 0x0016, 0x001c, 0x0022, 0x0028, 0x002e, 0x0034, 0x003a, 0x0040, + 0x0046, 0x004c, 0x0053, 0x005a, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x2215, 0x2218, 0x2426, 0x000d, 0x0025, 0xffff, 0x0061, 0x006c, + 0x0074, 0x007d, 0x0085, 0x008d, 0x0096, 0x009e, 0x00a6, 0x00af, + 0x00b8, 0x00c4, 0x0003, 0x0087, 0x0096, 0x00a5, 0x000d, 0x0025, + 0xffff, 0x0016, 0x001c, 0x0022, 0x0028, 0x002e, 0x0034, 0x003a, + // Entry 1C480 - 1C4BF + 0x0040, 0x0046, 0x004c, 0x0053, 0x005a, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, 0x0025, 0xffff, 0x0061, + 0x006c, 0x0074, 0x007d, 0x0085, 0x008d, 0x0096, 0x009e, 0x00a6, + 0x00af, 0x00b8, 0x00c4, 0x0006, 0x00bb, 0x0000, 0x0000, 0x0000, + 0x00ce, 0x0111, 0x0001, 0x00bd, 0x0001, 0x00bf, 0x000d, 0x0000, + 0xffff, 0x005a, 0x005d, 0x0062, 0x0066, 0x006a, 0x006f, 0x0072, + 0x0075, 0x0079, 0x007e, 0x221e, 0x0085, 0x0001, 0x00d0, 0x0001, + // Entry 1C4C0 - 1C4FF + 0x00d2, 0x003d, 0x0000, 0xffff, 0x01bd, 0x01c4, 0x01cc, 0x01d5, + 0x01de, 0x01e6, 0x01ec, 0x01f4, 0x01fc, 0x0205, 0x020d, 0x0214, + 0x021b, 0x0223, 0x022d, 0x0234, 0x023b, 0x0245, 0x024c, 0x0253, + 0x025b, 0x0264, 0x026b, 0x0273, 0x027c, 0x0282, 0x028a, 0x0293, + 0x029b, 0x02a4, 0x02ab, 0x02b2, 0x02b9, 0x02c3, 0x02cc, 0x02d2, + 0x02d9, 0x02e1, 0x02ea, 0x02f2, 0x02fa, 0x0303, 0x0309, 0x0311, + 0x031a, 0x0322, 0x0329, 0x0331, 0x0339, 0x0340, 0x0349, 0x0351, + 0x0358, 0x0362, 0x036a, 0x0370, 0x0377, 0x0381, 0x0389, 0x0390, + // Entry 1C500 - 1C53F + 0x0001, 0x0113, 0x0001, 0x0115, 0x000d, 0x0000, 0xffff, 0x005a, + 0x005d, 0x0062, 0x0066, 0x006a, 0x006f, 0x0072, 0x0075, 0x0079, + 0x007e, 0x221e, 0x0085, 0x0004, 0x0132, 0x012c, 0x0129, 0x012f, + 0x0001, 0x0025, 0x00d3, 0x0001, 0x0010, 0x0026, 0x0001, 0x0010, + 0x002f, 0x0001, 0x0002, 0x028b, 0x0005, 0x013b, 0x0000, 0x0000, + 0x0000, 0x01a6, 0x0002, 0x013e, 0x0172, 0x0003, 0x0142, 0x0152, + 0x0162, 0x000e, 0x0014, 0xffff, 0x0395, 0x3522, 0x3528, 0x352e, + 0x3533, 0x3539, 0x353f, 0x3546, 0x354d, 0x3553, 0x355b, 0x3561, + // Entry 1C540 - 1C57F + 0x3566, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, + 0x0422, 0x000e, 0x0014, 0xffff, 0x0395, 0x356c, 0x3573, 0x357b, + 0x3581, 0x3588, 0x3590, 0x359a, 0x34cc, 0x35a4, 0x35af, 0x35b5, + 0x35bb, 0x0003, 0x0176, 0x0186, 0x0196, 0x000e, 0x0014, 0xffff, + 0x0395, 0x3522, 0x3528, 0x352e, 0x3533, 0x3539, 0x353f, 0x3546, + 0x354d, 0x3553, 0x355b, 0x3561, 0x3566, 0x000e, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + // Entry 1C580 - 1C5BF + 0x2424, 0x2215, 0x2218, 0x2426, 0x0422, 0x000e, 0x0014, 0xffff, + 0x0395, 0x356c, 0x3573, 0x357b, 0x3581, 0x3588, 0x3590, 0x359a, + 0x34cc, 0x35a4, 0x35af, 0x35b5, 0x35bb, 0x0003, 0x01b0, 0x01b6, + 0x01aa, 0x0001, 0x01ac, 0x0002, 0x0025, 0x00e1, 0x00f3, 0x0001, + 0x01b2, 0x0002, 0x0025, 0x0106, 0x010d, 0x0001, 0x01b8, 0x0002, + 0x0025, 0x0106, 0x010d, 0x000a, 0x01c7, 0x0000, 0x0000, 0x0000, + 0x0000, 0x029c, 0x0000, 0x0000, 0x0000, 0x022c, 0x0002, 0x01ca, + 0x01fb, 0x0003, 0x01ce, 0x01dd, 0x01ec, 0x000d, 0x0025, 0xffff, + // Entry 1C5C0 - 1C5FF + 0x0016, 0x001c, 0x0022, 0x0028, 0x002e, 0x0034, 0x003a, 0x0040, + 0x0046, 0x004c, 0x0053, 0x005a, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x2215, 0x2218, 0x2426, 0x000d, 0x0025, 0xffff, 0x0061, 0x006c, + 0x0074, 0x007d, 0x0085, 0x008d, 0x0096, 0x009e, 0x00a6, 0x00af, + 0x00b8, 0x00c4, 0x0003, 0x01ff, 0x020e, 0x021d, 0x000d, 0x0025, + 0xffff, 0x0016, 0x001c, 0x0022, 0x0028, 0x002e, 0x0034, 0x003a, + 0x0040, 0x0046, 0x004c, 0x0053, 0x005a, 0x000d, 0x0000, 0xffff, + // Entry 1C600 - 1C63F + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, 0x0025, 0xffff, 0x0061, + 0x006c, 0x0074, 0x007d, 0x0085, 0x008d, 0x0096, 0x009e, 0x00a6, + 0x00af, 0x00b8, 0x00c4, 0x0006, 0x0233, 0x0000, 0x0000, 0x0000, + 0x0246, 0x0289, 0x0001, 0x0235, 0x0001, 0x0237, 0x000d, 0x0000, + 0xffff, 0x005a, 0x005d, 0x0062, 0x0066, 0x006a, 0x006f, 0x0072, + 0x0075, 0x0079, 0x007e, 0x221e, 0x0085, 0x0001, 0x0248, 0x0001, + 0x024a, 0x003d, 0x0000, 0xffff, 0x01bd, 0x01c4, 0x01cc, 0x01d5, + // Entry 1C640 - 1C67F + 0x01de, 0x01e6, 0x01ec, 0x01f4, 0x01fc, 0x0205, 0x020d, 0x0214, + 0x021b, 0x0223, 0x022d, 0x0234, 0x023b, 0x0245, 0x024c, 0x0253, + 0x025b, 0x0264, 0x026b, 0x0273, 0x027c, 0x0282, 0x028a, 0x0293, + 0x029b, 0x02a4, 0x02ab, 0x02b2, 0x02b9, 0x02c3, 0x02cc, 0x02d2, + 0x02d9, 0x02e1, 0x02ea, 0x02f2, 0x02fa, 0x0303, 0x0309, 0x0311, + 0x031a, 0x0322, 0x0329, 0x0331, 0x0339, 0x0340, 0x0349, 0x0351, + 0x0358, 0x0362, 0x036a, 0x0370, 0x0377, 0x0381, 0x0389, 0x0390, + 0x0001, 0x028b, 0x0001, 0x028d, 0x000d, 0x0000, 0xffff, 0x005a, + // Entry 1C680 - 1C6BF + 0x005d, 0x0062, 0x0066, 0x006a, 0x006f, 0x0072, 0x0075, 0x0079, + 0x007e, 0x221e, 0x0085, 0x0004, 0x02aa, 0x02a4, 0x02a1, 0x02a7, + 0x0001, 0x0025, 0x00d3, 0x0001, 0x0010, 0x0026, 0x0001, 0x0010, + 0x002f, 0x0001, 0x0002, 0x028b, 0x0005, 0x02b3, 0x0000, 0x0000, + 0x0000, 0x031e, 0x0002, 0x02b6, 0x02ea, 0x0003, 0x02ba, 0x02ca, + 0x02da, 0x000e, 0x0025, 0xffff, 0x0114, 0x011a, 0x011f, 0x0124, + 0x0129, 0x012d, 0x0133, 0x0139, 0x013e, 0x0143, 0x0149, 0x014e, + 0x0154, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + // Entry 1C6C0 - 1C6FF + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, + 0x0422, 0x000e, 0x0025, 0xffff, 0x0159, 0x0165, 0x016c, 0x0172, + 0x0129, 0x017a, 0x0183, 0x018c, 0x0194, 0x019c, 0x01a3, 0x01aa, + 0x01b3, 0x0003, 0x02ee, 0x02fe, 0x030e, 0x000e, 0x0025, 0xffff, + 0x0114, 0x011a, 0x011f, 0x0124, 0x0129, 0x012d, 0x0133, 0x0139, + 0x013e, 0x0143, 0x0149, 0x014e, 0x0154, 0x000e, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x2215, 0x2218, 0x2426, 0x0422, 0x000e, 0x0025, 0xffff, + // Entry 1C700 - 1C73F + 0x0159, 0x0165, 0x016c, 0x0172, 0x0129, 0x017a, 0x0183, 0x018c, + 0x0194, 0x019c, 0x01a3, 0x01aa, 0x01b3, 0x0003, 0x0328, 0x032e, + 0x0322, 0x0001, 0x0324, 0x0002, 0x0025, 0x01bc, 0x01d2, 0x0001, + 0x032a, 0x0002, 0x0025, 0x01e9, 0x01f2, 0x0001, 0x0330, 0x0002, + 0x0025, 0x01e9, 0x01f2, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x033d, 0x0000, 0x034e, 0x0004, 0x034b, 0x0345, 0x0342, + 0x0348, 0x0001, 0x0002, 0x0000, 0x0001, 0x0002, 0x0010, 0x0001, + 0x0002, 0x001b, 0x0001, 0x0002, 0x0587, 0x0004, 0x035c, 0x0356, + // Entry 1C740 - 1C77F + 0x0353, 0x0359, 0x0001, 0x0025, 0x01fb, 0x0001, 0x0025, 0x01fb, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x0368, + 0x03cd, 0x0424, 0x0459, 0x052a, 0x054f, 0x0560, 0x0571, 0x0002, + 0x036b, 0x039c, 0x0003, 0x036f, 0x037e, 0x038d, 0x000d, 0x0025, + 0xffff, 0x0208, 0x020e, 0x0215, 0x021a, 0x021f, 0x0223, 0x0228, + 0x022e, 0x0234, 0x023a, 0x023f, 0x0244, 0x000d, 0x0000, 0xffff, + 0x1e5d, 0x2364, 0x2357, 0x241f, 0x2357, 0x1e5d, 0x1e5d, 0x241f, + 0x235b, 0x236a, 0x236c, 0x236e, 0x000d, 0x0025, 0xffff, 0x024a, + // Entry 1C780 - 1C7BF + 0x0252, 0x0215, 0x025b, 0x021f, 0x0223, 0x0261, 0x022e, 0x0269, + 0x0273, 0x027b, 0x0284, 0x0003, 0x03a0, 0x03af, 0x03be, 0x000d, + 0x0025, 0xffff, 0x0208, 0x020e, 0x0215, 0x021a, 0x021f, 0x0223, + 0x0228, 0x022e, 0x0234, 0x023a, 0x023f, 0x0244, 0x000d, 0x0000, + 0xffff, 0x1e5d, 0x2364, 0x2357, 0x241f, 0x2357, 0x1e5d, 0x1e5d, + 0x241f, 0x235b, 0x236a, 0x236c, 0x236e, 0x000d, 0x0025, 0xffff, + 0x024a, 0x0252, 0x0215, 0x025b, 0x021f, 0x0223, 0x0261, 0x022e, + 0x0269, 0x0273, 0x027b, 0x0284, 0x0002, 0x03d0, 0x03fa, 0x0005, + // Entry 1C7C0 - 1C7FF + 0x03d6, 0x03df, 0x03f1, 0x0000, 0x03e8, 0x0007, 0x0025, 0x028e, + 0x0293, 0x0298, 0x029d, 0x02a2, 0x02a7, 0x02ac, 0x0007, 0x0000, + 0x236e, 0x2296, 0x2357, 0x2357, 0x1e5d, 0x1edb, 0x235b, 0x0007, + 0x0019, 0x0000, 0x4a33, 0x4a36, 0x4a26, 0x4a39, 0x4a2d, 0x4a3c, + 0x0007, 0x0025, 0x02b1, 0x02ba, 0x02c0, 0x02c6, 0x02cf, 0x02d5, + 0x02de, 0x0005, 0x0400, 0x0409, 0x041b, 0x0000, 0x0412, 0x0007, + 0x0025, 0x028e, 0x0293, 0x0298, 0x029d, 0x02a2, 0x02a7, 0x02ac, + 0x0007, 0x0000, 0x236e, 0x2296, 0x2357, 0x2357, 0x1e5d, 0x1edb, + // Entry 1C800 - 1C83F + 0x235b, 0x0007, 0x0019, 0x0000, 0x4a33, 0x4a36, 0x4a26, 0x4a39, + 0x4a2d, 0x4a3c, 0x0007, 0x0025, 0x02b1, 0x02ba, 0x02c0, 0x02c6, + 0x02cf, 0x02d5, 0x02de, 0x0002, 0x0427, 0x0440, 0x0003, 0x042b, + 0x0432, 0x0439, 0x0005, 0x001d, 0xffff, 0x1674, 0x1677, 0x167a, + 0x167d, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x0005, 0x0006, 0xffff, 0x0c98, 0x41ad, 0x41ba, 0x41c7, 0x0003, + 0x0444, 0x044b, 0x0452, 0x0005, 0x001d, 0xffff, 0x1674, 0x1677, + 0x167a, 0x167d, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + // Entry 1C840 - 1C87F + 0x23b3, 0x0005, 0x0006, 0xffff, 0x0c98, 0x41ad, 0x41ba, 0x41c7, + 0x0002, 0x045c, 0x04c3, 0x0003, 0x0460, 0x0481, 0x04a2, 0x0008, + 0x046c, 0x0472, 0x0469, 0x0475, 0x0478, 0x047b, 0x047e, 0x046f, + 0x0001, 0x0025, 0x02e5, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0025, + 0x02ec, 0x0001, 0x0000, 0x04f2, 0x0001, 0x0010, 0x029b, 0x0001, + 0x0025, 0x02f1, 0x0001, 0x0025, 0x02f7, 0x0001, 0x0025, 0x02fc, + 0x0008, 0x048d, 0x0493, 0x048a, 0x0496, 0x0499, 0x049c, 0x049f, + 0x0490, 0x0001, 0x0025, 0x02e5, 0x0001, 0x0000, 0x04ef, 0x0001, + // Entry 1C880 - 1C8BF + 0x0025, 0x02ec, 0x0001, 0x0000, 0x04f2, 0x0001, 0x0010, 0x029b, + 0x0001, 0x0025, 0x02f1, 0x0001, 0x0025, 0x02f7, 0x0001, 0x0025, + 0x02fc, 0x0008, 0x04ae, 0x04b4, 0x04ab, 0x04b7, 0x04ba, 0x04bd, + 0x04c0, 0x04b1, 0x0001, 0x0025, 0x02e5, 0x0001, 0x0000, 0x04ef, + 0x0001, 0x0025, 0x02ec, 0x0001, 0x0000, 0x04f2, 0x0001, 0x0025, + 0x0301, 0x0001, 0x0025, 0x030a, 0x0001, 0x0025, 0x031d, 0x0001, + 0x0025, 0x0301, 0x0003, 0x04c7, 0x04e8, 0x0509, 0x0008, 0x04d3, + 0x04d9, 0x04d0, 0x04dc, 0x04df, 0x04e2, 0x04e5, 0x04d6, 0x0001, + // Entry 1C8C0 - 1C8FF + 0x0025, 0x02e5, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0025, 0x02ec, + 0x0001, 0x0000, 0x04f2, 0x0001, 0x0010, 0x029b, 0x0001, 0x0025, + 0x02f1, 0x0001, 0x0025, 0x02f7, 0x0001, 0x0025, 0x02fc, 0x0008, + 0x04f4, 0x04fa, 0x04f1, 0x04fd, 0x0500, 0x0503, 0x0506, 0x04f7, + 0x0001, 0x0025, 0x02e5, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0025, + 0x02ec, 0x0001, 0x0000, 0x04f2, 0x0001, 0x0010, 0x029b, 0x0001, + 0x0025, 0x02f1, 0x0001, 0x0025, 0x02f7, 0x0001, 0x0025, 0x02fc, + 0x0008, 0x0515, 0x051b, 0x0512, 0x051e, 0x0521, 0x0524, 0x0527, + // Entry 1C900 - 1C93F + 0x0518, 0x0001, 0x0025, 0x02e5, 0x0001, 0x0000, 0x04ef, 0x0001, + 0x0025, 0x02ec, 0x0001, 0x0000, 0x04f2, 0x0001, 0x0025, 0x0325, + 0x0001, 0x0025, 0x032b, 0x0001, 0x0025, 0x02f7, 0x0001, 0x0025, + 0x02fc, 0x0003, 0x0539, 0x0544, 0x052e, 0x0002, 0x0531, 0x0535, + 0x0002, 0x0025, 0x0337, 0x0362, 0x0002, 0x0025, 0x034b, 0x0377, + 0x0002, 0x053c, 0x0540, 0x0002, 0x0025, 0x038b, 0x0395, 0x0002, + 0x0010, 0x02ea, 0x02f1, 0x0002, 0x0547, 0x054b, 0x0002, 0x0025, + 0x038b, 0x0395, 0x0002, 0x0010, 0x02ea, 0x02f1, 0x0004, 0x055d, + // Entry 1C940 - 1C97F + 0x0557, 0x0554, 0x055a, 0x0001, 0x0002, 0x0025, 0x0001, 0x0002, + 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, 0x0002, 0x08e8, 0x0004, + 0x056e, 0x0568, 0x0565, 0x056b, 0x0001, 0x0000, 0x0524, 0x0001, + 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, + 0x0004, 0x057f, 0x0579, 0x0576, 0x057c, 0x0001, 0x0025, 0x01fb, + 0x0001, 0x0025, 0x01fb, 0x0001, 0x0025, 0x01fb, 0x0001, 0x0000, + 0x03c6, 0x0006, 0x0589, 0x0000, 0x0000, 0x0000, 0x05f4, 0x0607, + 0x0002, 0x058c, 0x05c0, 0x0003, 0x0590, 0x05a0, 0x05b0, 0x000e, + // Entry 1C980 - 1C9BF + 0x0025, 0x03c7, 0x039f, 0x03a5, 0x03ac, 0x03b1, 0x03b7, 0x03bd, + 0x03c2, 0x03cd, 0x03d2, 0x03d7, 0x03dc, 0x03e1, 0x03e4, 0x000e, + 0x0000, 0x003f, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x0422, 0x000e, + 0x0025, 0x0416, 0x03e9, 0x03f0, 0x03f9, 0x0400, 0x0408, 0x040f, + 0x03c2, 0x041e, 0x03d2, 0x0425, 0x042b, 0x03e1, 0x0432, 0x0003, + 0x05c4, 0x05d4, 0x05e4, 0x000e, 0x0025, 0x03c7, 0x039f, 0x03a5, + 0x03ac, 0x03b1, 0x03b7, 0x03bd, 0x03c2, 0x03cd, 0x03d2, 0x03d7, + // Entry 1C9C0 - 1C9FF + 0x03dc, 0x03e1, 0x03e4, 0x000e, 0x0000, 0x003f, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, + 0x2218, 0x2426, 0x0422, 0x000e, 0x0025, 0x0416, 0x03e9, 0x03f0, + 0x03f9, 0x0400, 0x0408, 0x040f, 0x03c2, 0x041e, 0x03d2, 0x0425, + 0x042b, 0x03e1, 0x0432, 0x0003, 0x05fd, 0x0602, 0x05f8, 0x0001, + 0x05fa, 0x0001, 0x0022, 0x0b8d, 0x0001, 0x05ff, 0x0001, 0x0025, + 0x0439, 0x0001, 0x0604, 0x0001, 0x0000, 0x04ef, 0x0004, 0x0615, + 0x060f, 0x060c, 0x0612, 0x0001, 0x0002, 0x0000, 0x0001, 0x0002, + // Entry 1CA00 - 1CA3F + 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0002, 0x0587, 0x0005, + 0x061e, 0x0000, 0x0000, 0x0000, 0x0683, 0x0002, 0x0621, 0x0652, + 0x0003, 0x0625, 0x0634, 0x0643, 0x000d, 0x0025, 0xffff, 0x043f, + 0x0445, 0x044a, 0x0450, 0x0457, 0x045e, 0x0464, 0x046b, 0x0471, + 0x0477, 0x047c, 0x0482, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, + 0x2218, 0x2426, 0x000d, 0x0016, 0xffff, 0x0334, 0x2606, 0x2610, + 0x261a, 0x2624, 0x262e, 0x2639, 0x2641, 0x2649, 0x2658, 0x265e, + // Entry 1CA40 - 1CA7F + 0x2664, 0x0003, 0x0656, 0x0665, 0x0674, 0x000d, 0x0025, 0xffff, + 0x043f, 0x0445, 0x044a, 0x0450, 0x0457, 0x045e, 0x0464, 0x046b, + 0x0471, 0x0477, 0x0489, 0x0482, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x2215, 0x2218, 0x2426, 0x000d, 0x0016, 0xffff, 0x0334, 0x2606, + 0x2610, 0x261a, 0x2624, 0x262e, 0x2639, 0x2641, 0x2649, 0x2658, + 0x266d, 0x2664, 0x0003, 0x068c, 0x0691, 0x0687, 0x0001, 0x0689, + 0x0001, 0x0025, 0x048f, 0x0001, 0x068e, 0x0001, 0x0000, 0x0601, + // Entry 1CA80 - 1CABF + 0x0001, 0x0693, 0x0001, 0x0000, 0x0601, 0x0008, 0x069f, 0x0000, + 0x0000, 0x0000, 0x0704, 0x0717, 0x0000, 0x9006, 0x0002, 0x06a2, + 0x06d3, 0x0003, 0x06a6, 0x06b5, 0x06c4, 0x000d, 0x0025, 0xffff, + 0x0499, 0x049f, 0x04a4, 0x04ad, 0x04b6, 0x04c1, 0x04cc, 0x04d1, + 0x04d7, 0x04dc, 0x04e2, 0x04eb, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x2215, 0x2218, 0x2426, 0x000d, 0x0025, 0xffff, 0x04f4, 0x04fe, + 0x0504, 0x0512, 0x0522, 0x0532, 0x0545, 0x054b, 0x0554, 0x055c, + // Entry 1CAC0 - 1CAFF + 0x0564, 0x0572, 0x0003, 0x06d7, 0x06e6, 0x06f5, 0x000d, 0x0025, + 0xffff, 0x0499, 0x049f, 0x04a4, 0x04ad, 0x0580, 0x058a, 0x04cc, + 0x04d1, 0x04d7, 0x04dc, 0x0594, 0x059e, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, 0x0025, 0xffff, 0x04f4, + 0x04fe, 0x0504, 0x0512, 0x0522, 0x0532, 0x0545, 0x054b, 0x0554, + 0x055c, 0x0564, 0x0572, 0x0003, 0x070d, 0x0712, 0x0708, 0x0001, + 0x070a, 0x0001, 0x0025, 0x05a8, 0x0001, 0x070f, 0x0001, 0x0000, + // Entry 1CB00 - 1CB3F + 0x06c8, 0x0001, 0x0714, 0x0001, 0x0000, 0x19c7, 0x0004, 0x0725, + 0x071f, 0x071c, 0x0722, 0x0001, 0x0002, 0x0000, 0x0001, 0x0002, + 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0002, 0x0587, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0731, 0x0a05, 0x0000, 0x0a16, + 0x0003, 0x0825, 0x0915, 0x0735, 0x0001, 0x0737, 0x00ec, 0x0000, + 0x06cb, 0x06dd, 0x06f1, 0x0705, 0x0719, 0x072c, 0x073e, 0x0750, + 0x0762, 0x0775, 0x247f, 0x2493, 0x24ac, 0x24c6, 0x24de, 0x20cf, + 0x081e, 0x20e5, 0x0843, 0x0857, 0x086a, 0x087d, 0x0891, 0x08a3, + // Entry 1CB40 - 1CB7F + 0x08b5, 0x08c7, 0x20f6, 0x08ed, 0x0900, 0x0914, 0x0926, 0x093a, + 0x094e, 0x095f, 0x0972, 0x0985, 0x0999, 0x09ae, 0x09c2, 0x09d3, + 0x09e6, 0x09f7, 0x0a0b, 0x0a20, 0x0a33, 0x0a46, 0x0a58, 0x0a6a, + 0x0a7b, 0x0a8c, 0x0aa2, 0x0ab7, 0x0acc, 0x0ae1, 0x0af6, 0x0b0b, + 0x0b1e, 0x0b32, 0x0b48, 0x0b60, 0x0b77, 0x0b8d, 0x0ba2, 0x0bb6, + 0x0bcb, 0x0be1, 0x0bf6, 0x0c0b, 0x0c23, 0x0c37, 0x0c4c, 0x0c60, + 0x0c74, 0x0c89, 0x0c9f, 0x0cb3, 0x0cc8, 0x0cdd, 0x2107, 0x0d07, + 0x0d1c, 0x0d33, 0x0d47, 0x0d5b, 0x0d6f, 0x0d85, 0x0d9c, 0x0db0, + // Entry 1CB80 - 1CBBF + 0x0dc3, 0x0dd7, 0x0def, 0x0e04, 0x0e19, 0x0e2e, 0x0e43, 0x0e57, + 0x0e6d, 0x0e80, 0x0e96, 0x0eaa, 0x0ec1, 0x0ed4, 0x0ee9, 0x0efd, + 0x0f12, 0x0f26, 0x0f39, 0x0f50, 0x0f64, 0x0f7a, 0x0f8f, 0x0fa4, + 0x0fba, 0x0fd1, 0x0fe6, 0x0ffd, 0x1012, 0x1028, 0x103c, 0x1051, + 0x1066, 0x107a, 0x108e, 0x10a2, 0x10b8, 0x10cf, 0x10e3, 0x10fa, + 0x1110, 0x1124, 0x1139, 0x114d, 0x1163, 0x1178, 0x118d, 0x11a3, + 0x11ba, 0x11d0, 0x11e7, 0x11fb, 0x120f, 0x1224, 0x1238, 0x124d, + 0x1262, 0x1276, 0x128b, 0x12a0, 0x12b5, 0x12ca, 0x12df, 0x12f3, + // Entry 1CBC0 - 1CBFF + 0x1308, 0x131f, 0x1335, 0x134b, 0x24f6, 0x1374, 0x1388, 0x139e, + 0x13b4, 0x13ca, 0x13e0, 0x13f4, 0x140b, 0x141f, 0x1435, 0x144b, + 0x145f, 0x1473, 0x1489, 0x149c, 0x14b3, 0x14c8, 0x14de, 0x14f5, + 0x150b, 0x1522, 0x1538, 0x154f, 0x1565, 0x157b, 0x158f, 0x15a4, + 0x15bb, 0x15d0, 0x15e4, 0x15f8, 0x160d, 0x1621, 0x1638, 0x164d, + 0x1661, 0x1676, 0x168a, 0x16a0, 0x16b6, 0x16cc, 0x16e0, 0x16f7, + 0x170c, 0x1720, 0x1734, 0x174a, 0x175e, 0x1773, 0x1787, 0x179b, + 0x17b1, 0x17c7, 0x17db, 0x17f2, 0x1808, 0x181d, 0x1832, 0x1847, + // Entry 1CC00 - 1CC3F + 0x250a, 0x1874, 0x1888, 0x189e, 0x18b3, 0x18c8, 0x18dd, 0x18f1, + 0x1906, 0x191b, 0x192f, 0x1942, 0x1956, 0x196d, 0x1983, 0x1997, + 0x225f, 0x2265, 0x226d, 0x2274, 0x0001, 0x0827, 0x00ec, 0x0000, + 0x06cb, 0x06dd, 0x06f1, 0x0705, 0x0719, 0x072c, 0x073e, 0x0750, + 0x0762, 0x0775, 0x0787, 0x206c, 0x2085, 0x209f, 0x20b7, 0x20cf, + 0x081e, 0x20e5, 0x0843, 0x0857, 0x086a, 0x087d, 0x0891, 0x08a3, + 0x08b5, 0x08c7, 0x20f6, 0x08ed, 0x0900, 0x0914, 0x0926, 0x093a, + 0x094e, 0x095f, 0x0972, 0x0985, 0x0999, 0x09ae, 0x09c2, 0x09d3, + // Entry 1CC40 - 1CC7F + 0x09e6, 0x09f7, 0x0a0b, 0x0a20, 0x0a33, 0x0a46, 0x0a58, 0x0a6a, + 0x0a7b, 0x0a8c, 0x0aa2, 0x0ab7, 0x0acc, 0x0ae1, 0x0af6, 0x0b0b, + 0x0b1e, 0x0b32, 0x0b48, 0x0b60, 0x0b77, 0x0b8d, 0x0ba2, 0x0bb6, + 0x0bcb, 0x0be1, 0x0bf6, 0x0c0b, 0x0c23, 0x0c37, 0x0c4c, 0x0c60, + 0x0c74, 0x0c89, 0x0c9f, 0x0cb3, 0x0cc8, 0x0cdd, 0x2107, 0x0d07, + 0x0d1c, 0x0d33, 0x0d47, 0x0d5b, 0x0d6f, 0x0d85, 0x0d9c, 0x0db0, + 0x0dc3, 0x0dd7, 0x0def, 0x0e04, 0x0e19, 0x0e2e, 0x0e43, 0x0e57, + 0x0e6d, 0x0e80, 0x0e96, 0x0eaa, 0x0ec1, 0x0ed4, 0x0ee9, 0x0efd, + // Entry 1CC80 - 1CCBF + 0x0f12, 0x0f26, 0x0f39, 0x0f50, 0x0f64, 0x0f7a, 0x0f8f, 0x0fa4, + 0x0fba, 0x0fd1, 0x0fe6, 0x0ffd, 0x1012, 0x1028, 0x103c, 0x1051, + 0x1066, 0x107a, 0x108e, 0x10a2, 0x10b8, 0x10cf, 0x10e3, 0x10fa, + 0x1110, 0x1124, 0x1139, 0x114d, 0x1163, 0x1178, 0x118d, 0x11a3, + 0x11ba, 0x11d0, 0x11e7, 0x11fb, 0x120f, 0x1224, 0x1238, 0x124d, + 0x1262, 0x1276, 0x128b, 0x12a0, 0x12b5, 0x12ca, 0x12df, 0x12f3, + 0x1308, 0x131f, 0x1335, 0x134b, 0x1360, 0x1374, 0x1388, 0x139e, + 0x13b4, 0x13ca, 0x13e0, 0x13f4, 0x140b, 0x141f, 0x1435, 0x144b, + // Entry 1CCC0 - 1CCFF + 0x145f, 0x1473, 0x1489, 0x149c, 0x14b3, 0x14c8, 0x14de, 0x14f5, + 0x150b, 0x1522, 0x1538, 0x154f, 0x1565, 0x157b, 0x158f, 0x15a4, + 0x15bb, 0x15d0, 0x15e4, 0x15f8, 0x160d, 0x1621, 0x1638, 0x164d, + 0x1661, 0x1676, 0x168a, 0x16a0, 0x16b6, 0x16cc, 0x16e0, 0x16f7, + 0x170c, 0x1720, 0x1734, 0x174a, 0x175e, 0x1773, 0x1787, 0x179b, + 0x17b1, 0x17c7, 0x17db, 0x17f2, 0x1808, 0x181d, 0x1832, 0x1847, + 0x185e, 0x1874, 0x1888, 0x189e, 0x18b3, 0x18c8, 0x18dd, 0x18f1, + 0x1906, 0x191b, 0x192f, 0x1942, 0x1956, 0x196d, 0x1983, 0x1997, + // Entry 1CD00 - 1CD3F + 0x225f, 0x2265, 0x226d, 0x2274, 0x0001, 0x0917, 0x00ec, 0x0000, + 0x06cb, 0x06dd, 0x06f1, 0x0705, 0x0719, 0x072c, 0x073e, 0x0750, + 0x0762, 0x0775, 0x0787, 0x206c, 0x2085, 0x209f, 0x20b7, 0x20cf, + 0x081e, 0x20e5, 0x0843, 0x0857, 0x086a, 0x087d, 0x0891, 0x08a3, + 0x08b5, 0x08c7, 0x20f6, 0x08ed, 0x0900, 0x0914, 0x0926, 0x093a, + 0x094e, 0x095f, 0x0972, 0x0985, 0x0999, 0x09ae, 0x09c2, 0x09d3, + 0x09e6, 0x09f7, 0x0a0b, 0x0a20, 0x0a33, 0x0a46, 0x0a58, 0x0a6a, + 0x0a7b, 0x0a8c, 0x0aa2, 0x0ab7, 0x0acc, 0x0ae1, 0x0af6, 0x0b0b, + // Entry 1CD40 - 1CD7F + 0x0b1e, 0x0b32, 0x0b48, 0x0b60, 0x0b77, 0x0b8d, 0x0ba2, 0x0bb6, + 0x0bcb, 0x0be1, 0x0bf6, 0x0c0b, 0x0c23, 0x0c37, 0x0c4c, 0x0c60, + 0x0c74, 0x0c89, 0x0c9f, 0x0cb3, 0x0cc8, 0x0cdd, 0x2107, 0x0d07, + 0x0d1c, 0x0d33, 0x0d47, 0x0d5b, 0x0d6f, 0x0d85, 0x0d9c, 0x0db0, + 0x0dc3, 0x0dd7, 0x0def, 0x0e04, 0x0e19, 0x0e2e, 0x0e43, 0x0e57, + 0x0e6d, 0x0e80, 0x0e96, 0x0eaa, 0x0ec1, 0x0ed4, 0x0ee9, 0x0efd, + 0x0f12, 0x0f26, 0x0f39, 0x0f50, 0x0f64, 0x0f7a, 0x0f8f, 0x0fa4, + 0x0fba, 0x0fd1, 0x0fe6, 0x0ffd, 0x1012, 0x1028, 0x103c, 0x1051, + // Entry 1CD80 - 1CDBF + 0x1066, 0x107a, 0x108e, 0x10a2, 0x10b8, 0x10cf, 0x10e3, 0x10fa, + 0x1110, 0x1124, 0x1139, 0x114d, 0x1163, 0x1178, 0x118d, 0x11a3, + 0x11ba, 0x11d0, 0x11e7, 0x11fb, 0x120f, 0x1224, 0x1238, 0x124d, + 0x1262, 0x1276, 0x128b, 0x12a0, 0x12b5, 0x12ca, 0x12df, 0x12f3, + 0x1308, 0x131f, 0x1335, 0x134b, 0x1360, 0x1374, 0x1388, 0x139e, + 0x13b4, 0x13ca, 0x13e0, 0x13f4, 0x140b, 0x141f, 0x1435, 0x144b, + 0x145f, 0x1473, 0x1489, 0x149c, 0x14b3, 0x14c8, 0x14de, 0x14f5, + 0x150b, 0x1522, 0x1538, 0x154f, 0x1565, 0x157b, 0x158f, 0x15a4, + // Entry 1CDC0 - 1CDFF + 0x15bb, 0x15d0, 0x15e4, 0x15f8, 0x160d, 0x1621, 0x1638, 0x164d, + 0x1661, 0x1676, 0x168a, 0x16a0, 0x16b6, 0x16cc, 0x16e0, 0x16f7, + 0x170c, 0x1720, 0x1734, 0x174a, 0x175e, 0x1773, 0x1787, 0x179b, + 0x17b1, 0x17c7, 0x17db, 0x17f2, 0x1808, 0x181d, 0x1832, 0x1847, + 0x185e, 0x1874, 0x1888, 0x189e, 0x18b3, 0x18c8, 0x18dd, 0x18f1, + 0x1906, 0x191b, 0x192f, 0x1942, 0x1956, 0x196d, 0x1983, 0x1997, + 0x2357, 0x04dd, 0x235b, 0x19c7, 0x0004, 0x0a13, 0x0a0d, 0x0a0a, + 0x0a10, 0x0001, 0x0002, 0x0000, 0x0001, 0x0002, 0x0010, 0x0001, + // Entry 1CE00 - 1CE3F + 0x0002, 0x001b, 0x0001, 0x0002, 0x0587, 0x0004, 0x0a24, 0x0a1e, + 0x0a1b, 0x0a21, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0005, 0x0a2d, + 0x0000, 0x0000, 0x0000, 0x0a92, 0x0002, 0x0a30, 0x0a61, 0x0003, + 0x0a34, 0x0a43, 0x0a52, 0x000d, 0x0025, 0xffff, 0x05bc, 0x05c1, + 0x05c6, 0x05cb, 0x05cf, 0x05d4, 0x05da, 0x05df, 0x05e6, 0x05ec, + 0x05f0, 0x05f5, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, + // Entry 1CE40 - 1CE7F + 0x2426, 0x000d, 0x0014, 0xffff, 0x0916, 0x0920, 0x35c3, 0x35cc, + 0x35d0, 0x3518, 0x35d8, 0x35dd, 0x35e4, 0x35ea, 0x0963, 0x096a, + 0x0003, 0x0a65, 0x0a74, 0x0a83, 0x000d, 0x0025, 0xffff, 0x05bc, + 0x05c1, 0x05c6, 0x05fa, 0x05cf, 0x05d4, 0x05fe, 0x0603, 0x060a, + 0x0610, 0x05f0, 0x05f5, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, + 0x2218, 0x2426, 0x000d, 0x0014, 0xffff, 0x0916, 0x0920, 0x35c3, + 0x35ee, 0x35d0, 0x3518, 0x35f2, 0x35f7, 0x35fe, 0x3604, 0x0963, + // Entry 1CE80 - 1CEBF + 0x096a, 0x0003, 0x0a9b, 0x0aa0, 0x0a96, 0x0001, 0x0a98, 0x0001, + 0x0022, 0x0de0, 0x0001, 0x0a9d, 0x0001, 0x0025, 0x0614, 0x0001, + 0x0aa2, 0x0001, 0x0000, 0x1a1d, 0x0005, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0aab, 0x0003, 0x0ab5, 0x0abb, 0x0aaf, 0x0001, 0x0ab1, + 0x0002, 0x0025, 0x061a, 0x0624, 0x0001, 0x0ab7, 0x0002, 0x0025, + 0x0628, 0x0624, 0x0001, 0x0abd, 0x0002, 0x0025, 0x0628, 0x0624, + 0x0042, 0x0b04, 0x0b09, 0x0b0e, 0x0b13, 0x0b2a, 0x0b41, 0x0b58, + 0x0b6f, 0x0b86, 0x0b9d, 0x0bb4, 0x0bcb, 0x0be2, 0x0bfd, 0x0c18, + // Entry 1CEC0 - 1CEFF + 0x0c33, 0x0c38, 0x0c3d, 0x0c42, 0x0c5b, 0x0c74, 0x0c8d, 0x0c92, + 0x0c97, 0x0c9c, 0x0ca1, 0x0ca6, 0x0cab, 0x0cb0, 0x0cb5, 0x0cba, + 0x0cce, 0x0ce2, 0x0cf6, 0x0d0a, 0x0d1e, 0x0d32, 0x0d46, 0x0d5a, + 0x0d6e, 0x0d82, 0x0d96, 0x0daa, 0x0dbe, 0x0dd2, 0x0de6, 0x0dfa, + 0x0e0e, 0x0e22, 0x0e36, 0x0e4a, 0x0e5e, 0x0e63, 0x0e68, 0x0e6d, + 0x0e83, 0x0e99, 0x0eaf, 0x0ec5, 0x0edb, 0x0ef1, 0x0f07, 0x0f19, + 0x0f2b, 0x0f30, 0x0f35, 0x0001, 0x0b06, 0x0001, 0x0025, 0x0630, + 0x0001, 0x0b0b, 0x0001, 0x0025, 0x0630, 0x0001, 0x0b10, 0x0001, + // Entry 1CF00 - 1CF3F + 0x0025, 0x0630, 0x0003, 0x0b17, 0x0b1a, 0x0b1f, 0x0001, 0x0025, + 0x0635, 0x0003, 0x0025, 0x063c, 0x0651, 0x065e, 0x0002, 0x0b22, + 0x0b26, 0x0002, 0x0025, 0x067f, 0x0673, 0x0002, 0x0025, 0x069a, + 0x068c, 0x0003, 0x0b2e, 0x0b31, 0x0b36, 0x0001, 0x0025, 0x06a9, + 0x0003, 0x0025, 0x063c, 0x0651, 0x065e, 0x0002, 0x0b39, 0x0b3d, + 0x0002, 0x0025, 0x06ac, 0x06ac, 0x0002, 0x0025, 0x06b7, 0x06b7, + 0x0003, 0x0b45, 0x0b48, 0x0b4d, 0x0001, 0x0000, 0x1f9c, 0x0003, + 0x0025, 0x063c, 0x0651, 0x065e, 0x0002, 0x0b50, 0x0b54, 0x0002, + // Entry 1CF40 - 1CF7F + 0x0025, 0x06c4, 0x06c4, 0x0002, 0x001f, 0x06ca, 0x06ca, 0x0003, + 0x0b5c, 0x0b5f, 0x0b64, 0x0001, 0x0006, 0x1655, 0x0003, 0x0025, + 0x06cb, 0x06e0, 0x06ed, 0x0002, 0x0b67, 0x0b6b, 0x0002, 0x0025, + 0x0716, 0x0703, 0x0002, 0x0025, 0x073f, 0x072a, 0x0003, 0x0b73, + 0x0b76, 0x0b7b, 0x0001, 0x000b, 0x0c78, 0x0003, 0x0025, 0x0755, + 0x0764, 0x076d, 0x0002, 0x0b7e, 0x0b82, 0x0002, 0x0025, 0x077d, + 0x077d, 0x0002, 0x0025, 0x078c, 0x078c, 0x0003, 0x0b8a, 0x0b8d, + 0x0b92, 0x0001, 0x000b, 0x0c78, 0x0003, 0x0025, 0x079d, 0x07a7, + // Entry 1CF80 - 1CFBF + 0x07af, 0x0002, 0x0b95, 0x0b99, 0x0002, 0x000b, 0x0c9c, 0x0c9c, + 0x0002, 0x000b, 0x0ca7, 0x0ca7, 0x0003, 0x0ba1, 0x0ba4, 0x0ba9, + 0x0001, 0x0025, 0x07ba, 0x0003, 0x0025, 0x07bf, 0x07cf, 0x07da, + 0x0002, 0x0bac, 0x0bb0, 0x0002, 0x0025, 0x07eb, 0x07eb, 0x0002, + 0x0025, 0x07f9, 0x07f9, 0x0003, 0x0bb8, 0x0bbb, 0x0bc0, 0x0001, + 0x0001, 0x07e7, 0x0003, 0x0025, 0x07bf, 0x07cf, 0x07da, 0x0002, + 0x0bc3, 0x0bc7, 0x0002, 0x0025, 0x0809, 0x0809, 0x0002, 0x0025, + 0x0815, 0x0815, 0x0003, 0x0bcf, 0x0bd2, 0x0bd7, 0x0001, 0x0001, + // Entry 1CFC0 - 1CFFF + 0x07e7, 0x0003, 0x0025, 0x07bf, 0x07cf, 0x07da, 0x0002, 0x0bda, + 0x0bde, 0x0002, 0x0025, 0x0823, 0x0823, 0x0002, 0x0025, 0x082b, + 0x082b, 0x0004, 0x0be7, 0x0bea, 0x0bef, 0x0bfa, 0x0001, 0x0025, + 0x0833, 0x0003, 0x0025, 0x083b, 0x0850, 0x085e, 0x0002, 0x0bf2, + 0x0bf6, 0x0002, 0x0025, 0x0884, 0x0873, 0x0002, 0x0025, 0x08a9, + 0x0896, 0x0001, 0x0025, 0x08bd, 0x0004, 0x0c02, 0x0c05, 0x0c0a, + 0x0c15, 0x0001, 0x001d, 0x1a1e, 0x0003, 0x0025, 0x083b, 0x0850, + 0x085e, 0x0002, 0x0c0d, 0x0c11, 0x0002, 0x0025, 0x08cf, 0x08cf, + // Entry 1D000 - 1D03F + 0x0002, 0x0025, 0x08dd, 0x08dd, 0x0001, 0x0025, 0x08ed, 0x0004, + 0x0c1d, 0x0c20, 0x0c25, 0x0c30, 0x0001, 0x001d, 0x1a1e, 0x0003, + 0x0025, 0x083b, 0x0850, 0x085e, 0x0002, 0x0c28, 0x0c2c, 0x0002, + 0x0025, 0x08f9, 0x08f9, 0x0002, 0x0025, 0x0903, 0x0903, 0x0001, + 0x0025, 0x08ed, 0x0001, 0x0c35, 0x0001, 0x0025, 0x090d, 0x0001, + 0x0c3a, 0x0001, 0x0025, 0x091c, 0x0001, 0x0c3f, 0x0001, 0x0025, + 0x091c, 0x0003, 0x0c46, 0x0c49, 0x0c50, 0x0001, 0x0025, 0x0926, + 0x0005, 0x0025, 0x0936, 0x093b, 0x0949, 0x092b, 0x0950, 0x0002, + // Entry 1D040 - 1D07F + 0x0c53, 0x0c57, 0x0002, 0x0025, 0x096c, 0x095e, 0x0002, 0x0025, + 0x098b, 0x097b, 0x0003, 0x0c5f, 0x0c62, 0x0c69, 0x0001, 0x0000, + 0x2142, 0x0005, 0x0025, 0xffff, 0xffff, 0xffff, 0x092b, 0x0950, + 0x0002, 0x0c6c, 0x0c70, 0x0002, 0x0025, 0x099c, 0x099c, 0x0002, + 0x0025, 0x09a8, 0x09a8, 0x0003, 0x0c78, 0x0c7b, 0x0c82, 0x0001, + 0x0000, 0x2142, 0x0005, 0x0025, 0xffff, 0xffff, 0xffff, 0x092b, + 0x0950, 0x0002, 0x0c85, 0x0c89, 0x0002, 0x0025, 0x09b6, 0x09b6, + 0x0002, 0x0025, 0x09bd, 0x09bd, 0x0001, 0x0c8f, 0x0001, 0x0025, + // Entry 1D080 - 1D0BF + 0x09c4, 0x0001, 0x0c94, 0x0001, 0x0025, 0x09d2, 0x0001, 0x0c99, + 0x0001, 0x0025, 0x09d2, 0x0001, 0x0c9e, 0x0001, 0x0025, 0x09d9, + 0x0001, 0x0ca3, 0x0001, 0x0025, 0x09ec, 0x0001, 0x0ca8, 0x0001, + 0x0025, 0x09ec, 0x0001, 0x0cad, 0x0001, 0x0025, 0x09f5, 0x0001, + 0x0cb2, 0x0001, 0x0025, 0x09f5, 0x0001, 0x0cb7, 0x0001, 0x0025, + 0x09f5, 0x0003, 0x0000, 0x0cbe, 0x0cc3, 0x0003, 0x0025, 0x0a01, + 0x0a12, 0x0a1e, 0x0002, 0x0cc6, 0x0cca, 0x0002, 0x0025, 0x0a42, + 0x0a30, 0x0002, 0x0025, 0x0a69, 0x0a55, 0x0003, 0x0000, 0x0cd2, + // Entry 1D0C0 - 1D0FF + 0x0cd7, 0x0003, 0x0025, 0x0a7e, 0x0a8b, 0x0a93, 0x0002, 0x0cda, + 0x0cde, 0x0002, 0x0025, 0x0aa1, 0x0aa1, 0x0002, 0x0025, 0x0aaf, + 0x0aaf, 0x0003, 0x0000, 0x0ce6, 0x0ceb, 0x0003, 0x0025, 0x0a7e, + 0x0a8b, 0x0a93, 0x0002, 0x0cee, 0x0cf2, 0x0002, 0x0025, 0x0aa1, + 0x0aa1, 0x0002, 0x0025, 0x0aaf, 0x0aaf, 0x0003, 0x0000, 0x0cfa, + 0x0cff, 0x0003, 0x0025, 0x0abf, 0x0acd, 0x0ad6, 0x0002, 0x0d02, + 0x0d06, 0x0002, 0x0025, 0x0af4, 0x0ae5, 0x0002, 0x0025, 0x0b15, + 0x0b04, 0x0003, 0x0000, 0x0d0e, 0x0d13, 0x0003, 0x0025, 0x0b27, + // Entry 1D100 - 1D13F + 0x0b34, 0x0b3c, 0x0002, 0x0d16, 0x0d1a, 0x0002, 0x0025, 0x0b4a, + 0x0b4a, 0x0002, 0x0025, 0x0b58, 0x0b58, 0x0003, 0x0000, 0x0d22, + 0x0d27, 0x0003, 0x0025, 0x0b27, 0x0b34, 0x0b3c, 0x0002, 0x0d2a, + 0x0d2e, 0x0002, 0x0025, 0x0b4a, 0x0b4a, 0x0002, 0x0025, 0x0b58, + 0x0b58, 0x0003, 0x0000, 0x0d36, 0x0d3b, 0x0003, 0x0025, 0x0b68, + 0x0b76, 0x0b7f, 0x0002, 0x0d3e, 0x0d42, 0x0002, 0x0025, 0x0b9d, + 0x0b8e, 0x0002, 0x0025, 0x0bbe, 0x0bad, 0x0003, 0x0000, 0x0d4a, + 0x0d4f, 0x0003, 0x0025, 0x0bd0, 0x0bdd, 0x0be5, 0x0002, 0x0d52, + // Entry 1D140 - 1D17F + 0x0d56, 0x0002, 0x0025, 0x0bf3, 0x0bf3, 0x0002, 0x0025, 0x0c01, + 0x0c01, 0x0003, 0x0000, 0x0d5e, 0x0d63, 0x0003, 0x0025, 0x0bd0, + 0x0bdd, 0x0be5, 0x0002, 0x0d66, 0x0d6a, 0x0002, 0x0025, 0x0bf3, + 0x0bf3, 0x0002, 0x0025, 0x0c01, 0x0c01, 0x0003, 0x0000, 0x0d72, + 0x0d77, 0x0003, 0x0025, 0x0c11, 0x0c22, 0x0c2e, 0x0002, 0x0d7a, + 0x0d7e, 0x0002, 0x0025, 0x0c52, 0x0c40, 0x0002, 0x0025, 0x0c79, + 0x0c65, 0x0003, 0x0000, 0x0d86, 0x0d8b, 0x0003, 0x0025, 0x0c8e, + 0x0c9b, 0x0ca3, 0x0002, 0x0d8e, 0x0d92, 0x0002, 0x0025, 0x0cb1, + // Entry 1D180 - 1D1BF + 0x0cb1, 0x0002, 0x0025, 0x0cbf, 0x0cbf, 0x0003, 0x0000, 0x0d9a, + 0x0d9f, 0x0003, 0x0025, 0x0c8e, 0x0c9b, 0x0ca3, 0x0002, 0x0da2, + 0x0da6, 0x0002, 0x0025, 0x0cb1, 0x0cb1, 0x0002, 0x0025, 0x0cbf, + 0x0cbf, 0x0003, 0x0000, 0x0dae, 0x0db3, 0x0003, 0x0025, 0x0ccf, + 0x0cdd, 0x0ce6, 0x0002, 0x0db6, 0x0dba, 0x0002, 0x0025, 0x0d04, + 0x0cf5, 0x0002, 0x0025, 0x0d25, 0x0d14, 0x0003, 0x0000, 0x0dc2, + 0x0dc7, 0x0003, 0x0025, 0x0d37, 0x0d44, 0x0d4c, 0x0002, 0x0dca, + 0x0dce, 0x0002, 0x0025, 0x0d5a, 0x0d5a, 0x0002, 0x0025, 0x0d68, + // Entry 1D1C0 - 1D1FF + 0x0d68, 0x0003, 0x0000, 0x0dd6, 0x0ddb, 0x0003, 0x0025, 0x0d37, + 0x0d44, 0x0d4c, 0x0002, 0x0dde, 0x0de2, 0x0002, 0x0025, 0x0d5a, + 0x0d5a, 0x0002, 0x0025, 0x0d68, 0x0d68, 0x0003, 0x0000, 0x0dea, + 0x0def, 0x0003, 0x0025, 0x0d78, 0x0d89, 0x0d95, 0x0002, 0x0df2, + 0x0df6, 0x0002, 0x0025, 0x0db9, 0x0da7, 0x0002, 0x0025, 0x0de0, + 0x0dcc, 0x0003, 0x0000, 0x0dfe, 0x0e03, 0x0003, 0x0025, 0x0df5, + 0x0e02, 0x0e0a, 0x0002, 0x0e06, 0x0e0a, 0x0002, 0x0025, 0x0e18, + 0x0e18, 0x0002, 0x0025, 0x0e26, 0x0e26, 0x0003, 0x0000, 0x0e12, + // Entry 1D200 - 1D23F + 0x0e17, 0x0003, 0x0025, 0x0df5, 0x0e02, 0x0e0a, 0x0002, 0x0e1a, + 0x0e1e, 0x0002, 0x0025, 0x0e18, 0x0e18, 0x0002, 0x0025, 0x0e26, + 0x0e26, 0x0003, 0x0000, 0x0e26, 0x0e2b, 0x0003, 0x0025, 0x0e36, + 0x0e45, 0x0e4f, 0x0002, 0x0e2e, 0x0e32, 0x0002, 0x0025, 0x0e6f, + 0x0e5f, 0x0002, 0x0025, 0x0e92, 0x0e80, 0x0003, 0x0000, 0x0e3a, + 0x0e3f, 0x0003, 0x0025, 0x0ea5, 0x0eb2, 0x0eba, 0x0002, 0x0e42, + 0x0e46, 0x0002, 0x0025, 0x0ec8, 0x0ec8, 0x0002, 0x0025, 0x0ec8, + 0x0ec8, 0x0003, 0x0000, 0x0e4e, 0x0e53, 0x0003, 0x0025, 0x0ea5, + // Entry 1D240 - 1D27F + 0x0eb2, 0x0eba, 0x0002, 0x0e56, 0x0e5a, 0x0002, 0x0025, 0x0ec8, + 0x0ec8, 0x0002, 0x0025, 0x0ed6, 0x0ed6, 0x0001, 0x0e60, 0x0001, + 0x0025, 0x0ee6, 0x0001, 0x0e65, 0x0001, 0x0025, 0x0ee6, 0x0001, + 0x0e6a, 0x0001, 0x0025, 0x0ee6, 0x0003, 0x0e71, 0x0e74, 0x0e78, + 0x0001, 0x0025, 0x0eed, 0x0002, 0x0025, 0xffff, 0x0ef3, 0x0002, + 0x0e7b, 0x0e7f, 0x0002, 0x0025, 0x0f11, 0x0f02, 0x0002, 0x0025, + 0x0f32, 0x0f21, 0x0003, 0x0e87, 0x0e8a, 0x0e8e, 0x0001, 0x0000, + 0x213b, 0x0002, 0x0025, 0xffff, 0x0f44, 0x0002, 0x0e91, 0x0e95, + // Entry 1D280 - 1D2BF + 0x0002, 0x0025, 0x0f4c, 0x0f4c, 0x0002, 0x0025, 0x0f58, 0x0f58, + 0x0003, 0x0e9d, 0x0ea0, 0x0ea4, 0x0001, 0x0000, 0x213b, 0x0002, + 0x0025, 0xffff, 0x0f44, 0x0002, 0x0ea7, 0x0eab, 0x0002, 0x0000, + 0x1d76, 0x1d76, 0x0002, 0x0000, 0x1d7d, 0x1d7d, 0x0003, 0x0eb3, + 0x0eb6, 0x0eba, 0x0001, 0x001c, 0x09f7, 0x0002, 0x0025, 0xffff, + 0x0f66, 0x0002, 0x0ebd, 0x0ec1, 0x0002, 0x0025, 0x0f86, 0x0f76, + 0x0002, 0x0025, 0x0fa9, 0x0f97, 0x0003, 0x0ec9, 0x0ecc, 0x0ed0, + 0x0001, 0x000b, 0x1250, 0x0002, 0x0025, 0xffff, 0x0fbc, 0x0002, + // Entry 1D2C0 - 1D2FF + 0x0ed3, 0x0ed7, 0x0002, 0x0025, 0x0fc6, 0x0fc6, 0x0002, 0x0025, + 0x0fd4, 0x0fd4, 0x0003, 0x0edf, 0x0ee2, 0x0ee6, 0x0001, 0x000b, + 0x1250, 0x0002, 0x0025, 0xffff, 0x0fbc, 0x0002, 0x0ee9, 0x0eed, + 0x0002, 0x0000, 0x1d97, 0x1d97, 0x0002, 0x0000, 0x1da0, 0x1da0, + 0x0003, 0x0ef5, 0x0ef8, 0x0efc, 0x0001, 0x0025, 0x0fe4, 0x0002, + 0x0025, 0xffff, 0x0fec, 0x0002, 0x0eff, 0x0f03, 0x0002, 0x0025, + 0x1008, 0x0ff7, 0x0002, 0x0025, 0x102d, 0x101a, 0x0003, 0x0f0b, + 0x0000, 0x0f0e, 0x0001, 0x0000, 0x2002, 0x0002, 0x0f11, 0x0f15, + // Entry 1D300 - 1D33F + 0x0002, 0x0025, 0x1041, 0x1041, 0x0002, 0x0025, 0x104d, 0x104d, + 0x0003, 0x0f1d, 0x0000, 0x0f20, 0x0001, 0x0000, 0x2002, 0x0002, + 0x0f23, 0x0f27, 0x0002, 0x0000, 0x1db4, 0x1db4, 0x0002, 0x0000, + 0x1dbb, 0x1dbb, 0x0001, 0x0f2d, 0x0001, 0x0025, 0x105b, 0x0001, + 0x0f32, 0x0001, 0x0025, 0x105b, 0x0001, 0x0f37, 0x0001, 0x0025, + 0x105b, 0x0004, 0x0f3f, 0x0f44, 0x0f49, 0x0f58, 0x0003, 0x001d, + 0x0e69, 0x2181, 0x2188, 0x0003, 0x0025, 0x106a, 0x1076, 0x108c, + 0x0002, 0x0000, 0x0f4c, 0x0003, 0x0000, 0x0f53, 0x0f50, 0x0001, + // Entry 1D340 - 1D37F + 0x0025, 0x10a1, 0x0003, 0x0025, 0xffff, 0x10bc, 0x10d8, 0x0002, + 0x113c, 0x0f5b, 0x0003, 0x0f5f, 0x109d, 0x0ffe, 0x009d, 0x0025, + 0xffff, 0xffff, 0xffff, 0xffff, 0x11c3, 0x1232, 0x12d9, 0x132d, + 0x139a, 0x140a, 0x1463, 0x14d9, 0x151e, 0x15ea, 0x1638, 0x168c, + 0x16f2, 0x1743, 0x17a8, 0x181d, 0x18a4, 0x191c, 0x199a, 0x19f7, + 0x1a3f, 0xffff, 0xffff, 0x1aaf, 0xffff, 0x1b08, 0xffff, 0x1b63, + 0x1bbd, 0x1bfc, 0x1c41, 0xffff, 0xffff, 0x1cc1, 0x1d09, 0x1d5a, + 0xffff, 0xffff, 0xffff, 0x1de7, 0xffff, 0x1e67, 0x1ec7, 0xffff, + // Entry 1D380 - 1D3BF + 0x1f42, 0x1fae, 0x200e, 0xffff, 0xffff, 0xffff, 0xffff, 0x20ea, + 0xffff, 0xffff, 0x216b, 0x21e5, 0xffff, 0xffff, 0x2292, 0x2315, + 0x2360, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2435, + 0x2477, 0x24c2, 0x250a, 0x2549, 0xffff, 0xffff, 0x2601, 0xffff, + 0x2659, 0xffff, 0xffff, 0x26ee, 0xffff, 0x2794, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2834, 0xffff, 0x2889, 0x290c, 0x2983, 0x29d7, + 0xffff, 0xffff, 0xffff, 0x2a49, 0x2ab8, 0x2b24, 0xffff, 0xffff, + 0x2bad, 0x2c38, 0x2c8c, 0x2cc8, 0xffff, 0xffff, 0x2d48, 0x2d90, + // Entry 1D3C0 - 1D3FF + 0x2dd2, 0xffff, 0x2e3e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2f33, 0x2f7e, 0x2fc0, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x308c, 0xffff, 0xffff, 0x30f4, 0xffff, 0x3144, + 0xffff, 0x31ac, 0x31fd, 0x325d, 0xffff, 0x32b5, 0x3306, 0xffff, + 0xffff, 0xffff, 0x3392, 0x33da, 0xffff, 0xffff, 0x10f3, 0x128e, + 0x155d, 0x15a2, 0xffff, 0xffff, 0x2739, 0x009d, 0x0025, 0x113b, + 0x1154, 0x1177, 0x119c, 0x11e2, 0x1246, 0x12ef, 0x134d, 0x13bb, + 0x141e, 0x1486, 0x14ea, 0x152d, 0x15fe, 0x164f, 0x16a8, 0x1708, + // Entry 1D400 - 1D43F + 0x175b, 0x17c9, 0x1844, 0x18c6, 0x1940, 0x19b4, 0x1a09, 0x1a53, + 0x1a8d, 0x1a9e, 0x1ac1, 0x1af7, 0x1b1a, 0x1b50, 0x1b7b, 0x1bcc, + 0x1c0e, 0x1c55, 0x1c8f, 0x1cab, 0x1cd3, 0x1d1e, 0x1d68, 0x1da4, + 0x1db3, 0x1dcf, 0x1e04, 0x1e50, 0x1e81, 0x1ee3, 0x1f2d, 0x1f60, + 0x1fc8, 0x2024, 0x2062, 0x2080, 0x20b7, 0x20d2, 0x20ff, 0x2138, + 0x2150, 0x2189, 0x2205, 0x2273, 0x2282, 0x22b3, 0x2328, 0x236e, + 0x239c, 0x23ae, 0x23c9, 0x23dd, 0x23f9, 0x2416, 0x2447, 0x248a, + 0x24d4, 0x2519, 0x256b, 0x25c1, 0x25e0, 0x2614, 0x2649, 0x266f, + // Entry 1D440 - 1D47F + 0x26ad, 0x26d2, 0x2701, 0x2778, 0x27a5, 0x27d9, 0x27ee, 0x2801, + 0x281b, 0x2845, 0x2879, 0x28a8, 0x2928, 0x2999, 0x29e7, 0x2a19, + 0x2a2a, 0x2a39, 0x2a69, 0x2ad6, 0x2b39, 0x2b83, 0x2b93, 0x2bca, + 0x2c4e, 0x2c9a, 0x2cda, 0x2d10, 0x2d21, 0x2d5a, 0x2da0, 0x2de8, + 0x2e26, 0x2e60, 0x2ec4, 0x2edd, 0x2efa, 0x2f0d, 0x2f22, 0x2f46, + 0x2f8e, 0x2fd0, 0x3002, 0x3017, 0x302a, 0x3042, 0x305b, 0x306d, + 0x307c, 0x309c, 0x30ce, 0x30e3, 0x3104, 0x3135, 0x315b, 0x319b, + 0x31c1, 0x3217, 0x326e, 0x32a2, 0x32ca, 0x3319, 0x3351, 0x3361, + // Entry 1D480 - 1D4BF + 0x3378, 0x33a4, 0x33f2, 0x2265, 0x2c16, 0x1105, 0x12a1, 0x156e, + 0x15b4, 0xffff, 0x26c3, 0x2748, 0x009d, 0x0025, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1209, 0x1262, 0x130d, 0x1375, 0x13e4, 0x143a, + 0x14b1, 0x1503, 0x1544, 0x161a, 0x166b, 0x16cc, 0x1726, 0x177b, + 0x17f2, 0x1873, 0x18f0, 0x196c, 0x19d6, 0x1a23, 0x1a6f, 0xffff, + 0xffff, 0x1adb, 0xffff, 0x1b34, 0xffff, 0x1b9b, 0x1be3, 0x1c28, + 0x1c71, 0xffff, 0xffff, 0x1ced, 0x1d3b, 0x1d7e, 0xffff, 0xffff, + 0xffff, 0x1e29, 0xffff, 0x1ea3, 0x1f07, 0xffff, 0x1f86, 0x1fea, + // Entry 1D4C0 - 1D4FF + 0x2042, 0xffff, 0xffff, 0xffff, 0xffff, 0x211c, 0xffff, 0xffff, + 0x21af, 0x222d, 0xffff, 0xffff, 0x22dc, 0x2343, 0x2384, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x245e, 0x24a5, 0x24ee, + 0x2530, 0x2595, 0xffff, 0xffff, 0x262f, 0xffff, 0x268d, 0xffff, + 0xffff, 0x271c, 0xffff, 0x27be, 0xffff, 0xffff, 0xffff, 0xffff, + 0x285e, 0xffff, 0x28cf, 0x294c, 0x29b7, 0x29ff, 0xffff, 0xffff, + 0xffff, 0x2a91, 0x2afc, 0x2b56, 0xffff, 0xffff, 0x2bef, 0x2c6c, + 0x2cb0, 0x2cf4, 0xffff, 0xffff, 0x2d74, 0x2db8, 0x2e06, 0xffff, + // Entry 1D500 - 1D53F + 0x2e8a, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2f61, 0x2fa6, + 0x2fe8, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x30b4, 0xffff, 0xffff, 0x311c, 0xffff, 0x317a, 0xffff, 0x31de, + 0x3239, 0x3287, 0xffff, 0x32e7, 0x3334, 0xffff, 0xffff, 0xffff, + 0x33be, 0x3412, 0xffff, 0xffff, 0x111f, 0x12bc, 0x1587, 0x15ce, + 0xffff, 0xffff, 0x275f, 0x0003, 0x1140, 0x122a, 0x11b5, 0x0073, + 0x0025, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1280, 0xffff, + 0x138f, 0x13ff, 0x1458, 0x14ce, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 1D540 - 1D57F + 0xffff, 0xffff, 0x179d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1d96, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x21d7, 0x2257, 0xffff, 0xffff, 0x2307, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 1D580 - 1D5BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x28f8, 0x2972, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2b75, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2eb6, 0x0073, 0x0025, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1284, 0xffff, 0x1392, 0x1402, 0x145b, + 0x14d1, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x17a0, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 1D5C0 - 1D5FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1d9a, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x21db, 0x225b, 0xffff, 0xffff, 0x230b, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 1D600 - 1D63F + 0xffff, 0xffff, 0x28fe, 0x2977, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2b79, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2eba, 0x0073, 0x0025, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1289, 0xffff, 0x1396, 0x1406, 0x145f, 0x14d5, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x17a4, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 1D640 - 1D67F + 0xffff, 0xffff, 0x1d9f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x21e0, 0x2260, 0xffff, + 0xffff, 0x2310, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2905, + 0x297d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 1D680 - 1D6BF + 0x2b7e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2ebf, 0x0001, 0x0002, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, + 0x0019, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0014, + 0x0000, 0x0000, 0x0001, 0x0016, 0x0001, 0x001f, 0x058b, 0x0007, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0021, 0x0026, 0x0001, + 0x0023, 0x0001, 0x001d, 0x079a, 0x0003, 0x0000, 0x0000, 0x002a, + 0x0001, 0x0026, 0x0000, 0x0003, 0x0004, 0x0229, 0x0353, 0x0011, + // Entry 1D6C0 - 1D6FF + 0x0000, 0x0000, 0x0016, 0x0000, 0x0051, 0x0000, 0x007c, 0x008a, + 0x0000, 0x017c, 0x01b2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x01ce, 0x0001, 0x0018, 0x0002, 0x001b, 0x0036, 0x0003, 0x0000, + 0x001f, 0x002f, 0x000e, 0x0000, 0xffff, 0x04dd, 0x2521, 0x19c7, + 0x214f, 0x04dd, 0x241f, 0x2521, 0x2521, 0x2521, 0x2521, 0x241f, + 0x2357, 0x236c, 0x0005, 0x0026, 0xffff, 0xffff, 0xffff, 0xffff, + 0x001b, 0x0003, 0x0000, 0x003a, 0x004a, 0x000e, 0x0000, 0xffff, + 0x04dd, 0x2521, 0x19c7, 0x214f, 0x04dd, 0x241f, 0x2521, 0x2521, + // Entry 1D700 - 1D73F + 0x2521, 0x2521, 0x241f, 0x2357, 0x236c, 0x0005, 0x0026, 0xffff, + 0xffff, 0xffff, 0xffff, 0x001b, 0x0001, 0x0053, 0x0002, 0x0056, + 0x0069, 0x0002, 0x0000, 0x0059, 0x000e, 0x0000, 0xffff, 0x2357, + 0x04dd, 0x19c7, 0x04dd, 0x04dd, 0x2523, 0x2357, 0x2357, 0x2289, + 0x235b, 0x19c7, 0x236c, 0x21dd, 0x0002, 0x0000, 0x006c, 0x000e, + 0x0000, 0xffff, 0x2357, 0x04dd, 0x19c7, 0x04dd, 0x04dd, 0x2523, + 0x2357, 0x2357, 0x2289, 0x235b, 0x19c7, 0x236c, 0x21dd, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0085, 0x0000, 0x0000, + // Entry 1D740 - 1D77F + 0x0001, 0x0087, 0x0001, 0x0026, 0x0021, 0x0008, 0x0093, 0x0000, + 0x0000, 0x00b8, 0x0153, 0x015e, 0x0163, 0x0174, 0x0002, 0x0096, + 0x00a7, 0x0001, 0x0098, 0x000d, 0x0025, 0xffff, 0x0208, 0x020e, + 0x0215, 0x021a, 0x021f, 0x0223, 0x3434, 0x022e, 0x0234, 0x023a, + 0x023f, 0x0244, 0x0001, 0x00a9, 0x000d, 0x0025, 0xffff, 0x0208, + 0x020e, 0x0215, 0x021a, 0x021f, 0x0223, 0x3434, 0x022e, 0x0234, + 0x023a, 0x023f, 0x0244, 0x0002, 0x00bb, 0x010a, 0x0003, 0x00bf, + 0x00e0, 0x0101, 0x0008, 0x00cb, 0x00d1, 0x00c8, 0x00d4, 0x00d7, + // Entry 1D780 - 1D7BF + 0x00da, 0x00dd, 0x00ce, 0x0001, 0x0025, 0x02e5, 0x0001, 0x001d, + 0x050b, 0x0001, 0x0025, 0x02ec, 0x0001, 0x001d, 0x0510, 0x0001, + 0x0026, 0x0030, 0x0001, 0x0025, 0x032b, 0x0001, 0x0025, 0x031d, + 0x0001, 0x0026, 0x0030, 0x0008, 0x00ec, 0x00f2, 0x00e9, 0x00f5, + 0x00f8, 0x00fb, 0x00fe, 0x00ef, 0x0001, 0x0025, 0x02e5, 0x0001, + 0x0000, 0x1f9c, 0x0001, 0x0025, 0x02ec, 0x0001, 0x0000, 0x21e4, + 0x0001, 0x0010, 0x029b, 0x0001, 0x0025, 0x032b, 0x0001, 0x0025, + 0x02f7, 0x0001, 0x0010, 0x029b, 0x0002, 0x0104, 0x0107, 0x0001, + // Entry 1D7C0 - 1D7FF + 0x001d, 0x050b, 0x0001, 0x001d, 0x0510, 0x0003, 0x010e, 0x0128, + 0x0142, 0x0007, 0x0116, 0x0119, 0x0000, 0x011c, 0x011f, 0x0122, + 0x0125, 0x0001, 0x001d, 0x050b, 0x0001, 0x001d, 0x0510, 0x0001, + 0x0010, 0x029b, 0x0001, 0x0025, 0x032b, 0x0001, 0x0025, 0x02f7, + 0x0001, 0x0025, 0x02fc, 0x0007, 0x0130, 0x0133, 0x0000, 0x0136, + 0x0139, 0x013c, 0x013f, 0x0001, 0x001d, 0x050b, 0x0001, 0x001d, + 0x0510, 0x0001, 0x0010, 0x029b, 0x0001, 0x0025, 0x032b, 0x0001, + 0x0025, 0x02f7, 0x0001, 0x0010, 0x029b, 0x0007, 0x014a, 0x014d, + // Entry 1D800 - 1D83F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0150, 0x0001, 0x001d, 0x050b, + 0x0001, 0x001d, 0x0510, 0x0001, 0x0025, 0x02fc, 0x0003, 0x0000, + 0x0000, 0x0157, 0x0002, 0x0000, 0x015a, 0x0002, 0x0026, 0x0038, + 0x0053, 0x0001, 0x0160, 0x0001, 0x001d, 0x09d6, 0x0004, 0x0171, + 0x016b, 0x0168, 0x016e, 0x0001, 0x0026, 0x006b, 0x0001, 0x0026, + 0x0087, 0x0001, 0x0026, 0x00a0, 0x0001, 0x0026, 0x00b7, 0x0004, + 0x0000, 0x0000, 0x0000, 0x0179, 0x0001, 0x0000, 0x03c6, 0x0005, + 0x0182, 0x0000, 0x0000, 0x0000, 0x01a9, 0x0002, 0x0185, 0x0197, + // Entry 1D840 - 1D87F + 0x0002, 0x0000, 0x0188, 0x000d, 0x0015, 0xffff, 0x14ba, 0x36b3, + 0x36b5, 0x36b7, 0x36ba, 0x36bc, 0x36b7, 0x36be, 0x36c0, 0x36c2, + 0x36c0, 0x36c2, 0x0002, 0x0000, 0x019a, 0x000d, 0x0015, 0xffff, + 0x14ba, 0x36b3, 0x36b5, 0x36b7, 0x36ba, 0x36bc, 0x36b7, 0x36be, + 0x36c0, 0x36c2, 0x36c0, 0x36c2, 0x0003, 0x0000, 0x0000, 0x01ad, + 0x0001, 0x01af, 0x0001, 0x0000, 0x0601, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x01bb, 0x01c9, 0x0000, 0x9006, 0x0003, 0x0000, + 0x01c4, 0x01bf, 0x0001, 0x01c1, 0x0001, 0x0026, 0x00c1, 0x0001, + // Entry 1D880 - 1D8BF + 0x01c6, 0x0001, 0x0000, 0x06c8, 0x0001, 0x01cb, 0x0001, 0x0026, + 0x00ce, 0x0005, 0x01d4, 0x0000, 0x0000, 0x0000, 0x021b, 0x0002, + 0x01d7, 0x01f9, 0x0003, 0x01db, 0x0000, 0x01ea, 0x000d, 0x0026, + 0xffff, 0x00dc, 0x00e1, 0x00e6, 0x00eb, 0x00ef, 0x00f4, 0x00fa, + 0x00ff, 0x0106, 0x010c, 0x0110, 0x0115, 0x000d, 0x0000, 0xffff, + 0x19c9, 0x2525, 0x2531, 0x253a, 0x253e, 0x2546, 0x2550, 0x2555, + 0x255c, 0x2562, 0x23c6, 0x1a16, 0x0003, 0x01fd, 0x0000, 0x020c, + 0x000d, 0x0026, 0xffff, 0x00dc, 0x00e1, 0x00e6, 0x011a, 0x00ef, + // Entry 1D8C0 - 1D8FF + 0x00f4, 0x011e, 0x00ff, 0x0123, 0x0129, 0x0110, 0x0115, 0x000d, + 0x0000, 0xffff, 0x19c9, 0x2525, 0x2531, 0x2566, 0x253e, 0x2546, + 0x256a, 0x2555, 0x256f, 0x2575, 0x23c6, 0x1a16, 0x0003, 0x0224, + 0x0000, 0x021f, 0x0001, 0x0221, 0x0001, 0x0000, 0x1a1d, 0x0001, + 0x0226, 0x0001, 0x0000, 0x1a1d, 0x003f, 0x0000, 0x0000, 0x0000, + 0x0269, 0x0278, 0x0282, 0x0289, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0291, 0x0000, 0x0000, 0x0000, 0x029a, 0x029f, 0x02a4, 0x0000, + 0x02a9, 0x02b3, 0x02bd, 0x02c2, 0x0000, 0x0000, 0x02c7, 0x0000, + // Entry 1D900 - 1D93F + 0x02cc, 0x02d1, 0x02d6, 0x0000, 0x0000, 0x02db, 0x0000, 0x0000, + 0x02ea, 0x0000, 0x0000, 0x02f9, 0x0000, 0x0000, 0x0308, 0x0000, + 0x0000, 0x0317, 0x0000, 0x0000, 0x0326, 0x0000, 0x0000, 0x0335, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0349, 0x0003, 0x0000, 0x0000, 0x026d, + 0x0002, 0x0270, 0x0274, 0x0002, 0x0026, 0x013a, 0x012d, 0x0002, + 0x0026, 0x0157, 0x0148, 0x0002, 0x027b, 0x027e, 0x0001, 0x0000, + 0x1f9c, 0x0002, 0x0025, 0xffff, 0x0651, 0x0002, 0x0000, 0x0285, + // Entry 1D940 - 1D97F + 0x0002, 0x0025, 0xffff, 0x0651, 0x0002, 0x0000, 0x028c, 0x0003, + 0x0025, 0x06cb, 0x343b, 0x06ed, 0x0003, 0x0000, 0x0000, 0x0295, + 0x0001, 0x0297, 0x0001, 0x0025, 0x0823, 0x0001, 0x029c, 0x0001, + 0x0026, 0x0167, 0x0001, 0x02a1, 0x0001, 0x0026, 0x0177, 0x0001, + 0x02a6, 0x0001, 0x0026, 0x0177, 0x0002, 0x0000, 0x02ac, 0x0005, + 0x0025, 0xffff, 0xffff, 0xffff, 0x092b, 0x0950, 0x0002, 0x0000, + 0x02b6, 0x0005, 0x0025, 0xffff, 0xffff, 0xffff, 0x092b, 0x0950, + 0x0001, 0x02bf, 0x0001, 0x0026, 0x0183, 0x0001, 0x02c4, 0x0001, + // Entry 1D980 - 1D9BF + 0x0026, 0x0196, 0x0001, 0x02c9, 0x0001, 0x0026, 0x01a6, 0x0001, + 0x02ce, 0x0001, 0x0026, 0x01b6, 0x0001, 0x02d3, 0x0001, 0x0026, + 0x01c3, 0x0001, 0x02d8, 0x0001, 0x0026, 0x01cd, 0x0003, 0x0000, + 0x0000, 0x02df, 0x0002, 0x02e2, 0x02e6, 0x0002, 0x0026, 0x01d6, + 0x01d6, 0x0002, 0x0026, 0x01e4, 0x01e4, 0x0003, 0x0000, 0x0000, + 0x02ee, 0x0002, 0x02f1, 0x02f5, 0x0002, 0x0026, 0x01f4, 0x01f4, + 0x0002, 0x0026, 0x0202, 0x0202, 0x0003, 0x0000, 0x0000, 0x02fd, + 0x0002, 0x0300, 0x0304, 0x0002, 0x0026, 0x0212, 0x0212, 0x0002, + // Entry 1D9C0 - 1D9FF + 0x0026, 0x0220, 0x0220, 0x0003, 0x0000, 0x0000, 0x030c, 0x0002, + 0x030f, 0x0313, 0x0002, 0x0026, 0x0230, 0x0230, 0x0002, 0x0026, + 0x023e, 0x023e, 0x0003, 0x0000, 0x0000, 0x031b, 0x0002, 0x031e, + 0x0322, 0x0002, 0x0026, 0x024e, 0x024e, 0x0002, 0x0026, 0x025c, + 0x025c, 0x0003, 0x0000, 0x0000, 0x032a, 0x0002, 0x032d, 0x0331, + 0x0002, 0x0026, 0x026c, 0x026c, 0x0002, 0x0026, 0x027a, 0x027a, + 0x0003, 0x0000, 0x0339, 0x033e, 0x0003, 0x0026, 0xffff, 0x028a, + 0x0291, 0x0002, 0x0341, 0x0345, 0x0002, 0x0026, 0x02a9, 0x029b, + // Entry 1DA00 - 1DA3F + 0x0002, 0x0026, 0x02b6, 0x02b6, 0x0003, 0x0000, 0x0000, 0x034d, + 0x0001, 0x034f, 0x0002, 0x0026, 0x02ce, 0x02c6, 0x0004, 0x0000, + 0x0358, 0x035d, 0x036c, 0x0003, 0x0026, 0xffff, 0x02d5, 0x02ea, + 0x0002, 0x0000, 0x0360, 0x0003, 0x0000, 0x0367, 0x0364, 0x0001, + 0x0026, 0x02fe, 0x0003, 0x0026, 0xffff, 0x0319, 0x0334, 0x0002, + 0x0550, 0x036f, 0x0003, 0x0373, 0x04b1, 0x0412, 0x009d, 0x0025, + 0xffff, 0xffff, 0xffff, 0xffff, 0x11c3, 0x1232, 0x12d9, 0x34a3, + 0x34cb, 0x140a, 0x34f5, 0x14d9, 0x151e, 0x15ea, 0x1638, 0x168c, + // Entry 1DA40 - 1DA7F + 0x16f2, 0x1743, 0x17a8, 0x181d, 0x18a4, 0x191c, 0x199a, 0x19f7, + 0x1a3f, 0xffff, 0xffff, 0x1aaf, 0xffff, 0x1b08, 0xffff, 0x1b63, + 0x1bbd, 0x3543, 0x1c41, 0xffff, 0xffff, 0x1cc1, 0x1d09, 0x1d5a, + 0xffff, 0xffff, 0xffff, 0x1de7, 0xffff, 0x1e67, 0x1ec7, 0xffff, + 0x1f42, 0x1fae, 0x200e, 0xffff, 0xffff, 0xffff, 0xffff, 0x20ea, + 0xffff, 0xffff, 0x216b, 0x21e5, 0xffff, 0xffff, 0x3584, 0x2315, + 0x2360, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2435, + 0x2477, 0x24c2, 0x250a, 0x2549, 0xffff, 0xffff, 0x2601, 0xffff, + // Entry 1DA80 - 1DABF + 0x2659, 0xffff, 0xffff, 0x26ee, 0xffff, 0x2794, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2834, 0xffff, 0x2889, 0x290c, 0x2983, 0x29d7, + 0xffff, 0xffff, 0xffff, 0x2a49, 0x2ab8, 0x2b24, 0xffff, 0xffff, + 0x2bad, 0x2c38, 0x35d1, 0x2cc8, 0xffff, 0xffff, 0x2d48, 0x2d90, + 0x2dd2, 0xffff, 0x2e3e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2f33, 0xffff, 0x2fc0, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x308c, 0xffff, 0xffff, 0x30f4, 0xffff, 0x3144, + 0xffff, 0x31ac, 0x31fd, 0x325d, 0xffff, 0x32b5, 0x3306, 0xffff, + // Entry 1DAC0 - 1DAFF + 0xffff, 0xffff, 0x3392, 0x33da, 0xffff, 0xffff, 0x10f3, 0x128e, + 0x155d, 0x15a2, 0xffff, 0xffff, 0x2739, 0x009d, 0x0025, 0xffff, + 0x344b, 0x3466, 0x3482, 0x11e2, 0x1246, 0x12ef, 0x34b3, 0x34dc, + 0x141e, 0x3508, 0x14ea, 0x152d, 0x15fe, 0x164f, 0x16a8, 0x1708, + 0x175b, 0x17c9, 0x1844, 0x18c6, 0x1940, 0x19b4, 0x1a09, 0x1a53, + 0xffff, 0xffff, 0x1ac1, 0xffff, 0x1b1a, 0xffff, 0x3523, 0x1bcc, + 0x3552, 0x1c55, 0xffff, 0xffff, 0x1cd3, 0x1d1e, 0x1d68, 0xffff, + 0xffff, 0xffff, 0x1e04, 0xffff, 0x1e81, 0x1ee3, 0xffff, 0x1f60, + // Entry 1DB00 - 1DB3F + 0x1fc8, 0x2024, 0x3569, 0xffff, 0xffff, 0xffff, 0x20ff, 0xffff, + 0xffff, 0x2189, 0x2205, 0xffff, 0xffff, 0x35a3, 0x2328, 0x236e, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2447, 0x248a, + 0x24d4, 0x2519, 0x256b, 0xffff, 0xffff, 0x2614, 0xffff, 0x266f, + 0xffff, 0xffff, 0x2701, 0xffff, 0x27a5, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2845, 0xffff, 0x28a8, 0x2928, 0x2999, 0x29e7, 0xffff, + 0xffff, 0xffff, 0x2a69, 0x2ad6, 0x2b39, 0xffff, 0xffff, 0x2bca, + 0x2c4e, 0x35e0, 0x2cda, 0xffff, 0xffff, 0x2d5a, 0x2da0, 0x2de8, + // Entry 1DB40 - 1DB7F + 0xffff, 0x2e60, 0xffff, 0xffff, 0xffff, 0x35f7, 0xffff, 0x2f46, + 0xffff, 0x2fd0, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x309c, 0xffff, 0xffff, 0x3104, 0xffff, 0x315b, 0xffff, + 0x31c1, 0x3217, 0x326e, 0xffff, 0x32ca, 0x3319, 0xffff, 0xffff, + 0xffff, 0x33a4, 0x33f2, 0xffff, 0xffff, 0x1105, 0x12a1, 0x156e, + 0x15b4, 0xffff, 0xffff, 0x2748, 0x009d, 0x0026, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0369, 0x0391, 0x03ca, 0x03e9, 0x0406, 0x0424, + 0x0445, 0x0465, 0x047f, 0x04cc, 0x04e9, 0x0509, 0x052e, 0x054a, + // Entry 1DB80 - 1DBBF + 0x056b, 0x0595, 0x05c5, 0x05f0, 0x061d, 0x063d, 0x0658, 0xffff, + 0xffff, 0x0675, 0xffff, 0x0690, 0xffff, 0x06ab, 0x06cc, 0x06e4, + 0x06fc, 0xffff, 0xffff, 0x0719, 0x0734, 0x0752, 0xffff, 0xffff, + 0xffff, 0x0769, 0xffff, 0x078f, 0x07b2, 0xffff, 0x07d7, 0x07fe, + 0x0821, 0xffff, 0xffff, 0xffff, 0xffff, 0x0840, 0xffff, 0xffff, + 0x085b, 0x0882, 0xffff, 0xffff, 0x08ab, 0x08d3, 0x08ef, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0906, 0x091e, 0x093a, + 0x0955, 0x096d, 0xffff, 0xffff, 0x0998, 0xffff, 0x09b1, 0xffff, + // Entry 1DBC0 - 1DBFF + 0xffff, 0x09d0, 0xffff, 0x0a04, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0a1e, 0xffff, 0x0a38, 0x0a60, 0x0a85, 0x0aa4, 0xffff, 0xffff, + 0xffff, 0x0abd, 0x0ae3, 0x0b0a, 0xffff, 0xffff, 0x0b2c, 0x0b52, + 0x0b71, 0x0b89, 0xffff, 0xffff, 0x0ba4, 0x0bbf, 0x0bd8, 0xffff, + 0x0bf7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0c22, 0xffff, + 0x0c3e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0c57, 0xffff, 0xffff, 0x0c70, 0xffff, 0x0c88, 0xffff, 0x0ca8, + 0x0cc6, 0x0ce9, 0xffff, 0x0d03, 0x0d21, 0xffff, 0xffff, 0xffff, + // Entry 1DC00 - 1DC3F + 0x0d3d, 0x0d58, 0xffff, 0xffff, 0x034e, 0x03ae, 0x0497, 0x04b1, + 0xffff, 0xffff, 0x09ec, 0x0003, 0x0554, 0x0624, 0x05bc, 0x0066, + 0x0025, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x138f, 0x13ff, 0x1458, 0x14ce, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 1DC40 - 1DC7F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x35ca, 0x0066, + 0x0025, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 1DC80 - 1DCBF + 0x1392, 0x1402, 0x145b, 0x14d1, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 1DCC0 - 1DCFF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x35cd, 0x0066, + 0x0026, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0402, 0x0420, 0x0441, 0x0461, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 1DD00 - 1DD3F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 1DD40 - 1DD7F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0b28, 0x0001, + 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000b, 0x0008, 0x0000, 0x0000, 0x0000, 0x0014, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0002, 0x0017, 0x0035, 0x0002, 0x0000, + 0x001a, 0x0008, 0x0000, 0x0000, 0x0023, 0x0029, 0x002c, 0x002f, + 0x0032, 0x0026, 0x0001, 0x0001, 0x07c5, 0x0001, 0x0025, 0x02ec, + 0x0001, 0x0010, 0x029b, 0x0001, 0x0025, 0x02f1, 0x0001, 0x0025, + 0x02f7, 0x0001, 0x0025, 0x02fc, 0x0002, 0x0000, 0x0038, 0x0003, + // Entry 1DD80 - 1DDBF + 0x0000, 0x0000, 0x003c, 0x0001, 0x0001, 0x07c5, 0x0001, 0x0002, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, + 0x001e, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0014, + 0x0000, 0x0000, 0x0003, 0x001b, 0x0000, 0x0018, 0x0001, 0x0006, + 0x000d, 0x0001, 0x001f, 0x0b31, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0027, 0x0000, 0x0074, 0x007e, 0x0000, 0x0002, 0x002a, 0x0063, + 0x0002, 0x002d, 0x0048, 0x0008, 0x0000, 0x0000, 0x0036, 0x003c, + 0x003f, 0x0042, 0x0045, 0x0039, 0x0001, 0x0001, 0x07c5, 0x0001, + // Entry 1DDC0 - 1DDFF + 0x0025, 0x02ec, 0x0001, 0x0026, 0x0030, 0x0001, 0x0026, 0x0d79, + 0x0001, 0x0025, 0x031d, 0x0001, 0x0026, 0x0030, 0x0008, 0x0000, + 0x0000, 0x0051, 0x0057, 0x005a, 0x005d, 0x0060, 0x0054, 0x0001, + 0x0001, 0x07c5, 0x0001, 0x0025, 0x02ec, 0x0001, 0x0026, 0x0030, + 0x0001, 0x0026, 0x0d79, 0x0001, 0x0025, 0x031d, 0x0001, 0x0026, + 0x0030, 0x0002, 0x0066, 0x006d, 0x0003, 0x0000, 0x0000, 0x006a, + 0x0001, 0x0001, 0x07c5, 0x0003, 0x0000, 0x0000, 0x0071, 0x0001, + 0x0001, 0x07c5, 0x0003, 0x007b, 0x0000, 0x0078, 0x0001, 0x0006, + // Entry 1DE00 - 1DE3F + 0x015b, 0x0001, 0x0007, 0x02e9, 0x0003, 0x0000, 0x0000, 0x0082, + 0x0001, 0x0026, 0x0d86, 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0014, 0x0000, 0x0000, 0x0000, 0x0000, 0x0002, + 0x0017, 0x0036, 0x0003, 0x001b, 0x0024, 0x002d, 0x0002, 0x001e, + 0x0021, 0x0001, 0x0010, 0x029b, 0x0001, 0x0025, 0x02f7, 0x0002, + 0x0027, 0x002a, 0x0001, 0x0010, 0x029b, 0x0001, 0x0025, 0x02f7, + 0x0002, 0x0030, 0x0033, 0x0001, 0x0025, 0x0325, 0x0001, 0x0025, + // Entry 1DE40 - 1DE7F + 0x02f7, 0x0003, 0x003a, 0x0043, 0x004c, 0x0002, 0x003d, 0x0040, + 0x0001, 0x0010, 0x029b, 0x0001, 0x0025, 0x02f7, 0x0002, 0x0046, + 0x0049, 0x0001, 0x0010, 0x029b, 0x0001, 0x0025, 0x02f7, 0x0002, + 0x004f, 0x0052, 0x0001, 0x0025, 0x0325, 0x0001, 0x0025, 0x02f7, + 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000b, 0x0007, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0013, 0x0004, 0x0021, 0x001b, 0x0018, 0x001e, + 0x0001, 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, 0x0002, + // Entry 1DE80 - 1DEBF + 0x04fe, 0x0001, 0x0002, 0x0508, 0x0001, 0x0002, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0007, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0013, 0x0004, + 0x0021, 0x001b, 0x0018, 0x001e, 0x0001, 0x0002, 0x04e3, 0x0001, + 0x0002, 0x04f2, 0x0001, 0x0002, 0x04fe, 0x0001, 0x0002, 0x0508, + 0x0003, 0x0000, 0x0000, 0x0004, 0x0004, 0x0000, 0x0000, 0x0000, + 0x0009, 0x0001, 0x000b, 0x0003, 0x0000, 0x0000, 0x000f, 0x0034, + 0x0026, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 1DEC0 - 1DEFF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0d98, 0x0002, 0x0003, 0x0032, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000c, 0x0004, 0x0000, 0x0000, 0x0000, 0x0011, 0x0001, 0x0013, + // Entry 1DF00 - 1DF3F + 0x0003, 0x0000, 0x0000, 0x0017, 0x0008, 0x0000, 0x0000, 0x0020, + 0x0026, 0x0029, 0x002c, 0x002f, 0x0023, 0x0001, 0x0025, 0x02e5, + 0x0001, 0x0025, 0x02ec, 0x0001, 0x0025, 0x0301, 0x0001, 0x0025, + 0x030a, 0x0001, 0x0025, 0x031d, 0x0001, 0x0026, 0x0d9c, 0x003f, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0072, 0x0077, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 1DF40 - 1DF7F + 0x007c, 0x0000, 0x0000, 0x0084, 0x0000, 0x0000, 0x008c, 0x0000, + 0x0000, 0x0094, 0x0000, 0x0000, 0x009c, 0x0000, 0x0000, 0x00a4, + 0x0000, 0x0000, 0x00ac, 0x0000, 0x0000, 0x0000, 0x0000, 0x00b4, + 0x00b9, 0x0000, 0x00be, 0x00c3, 0x0000, 0x0000, 0x00c8, 0x0001, + 0x0074, 0x0001, 0x0026, 0x0da7, 0x0001, 0x0079, 0x0001, 0x0026, + 0x0da7, 0x0002, 0x0000, 0x007f, 0x0003, 0x0026, 0x0dab, 0x0db7, + 0x0dbe, 0x0002, 0x0000, 0x0087, 0x0003, 0x0026, 0x0dcb, 0x0dd7, + 0x0dde, 0x0002, 0x0000, 0x008f, 0x0003, 0x0026, 0x0deb, 0x0df7, + // Entry 1DF80 - 1DFBF + 0x0dfe, 0x0002, 0x0000, 0x0097, 0x0003, 0x0026, 0x0e0b, 0x0e17, + 0x0e1e, 0x0002, 0x0000, 0x009f, 0x0003, 0x0026, 0x0e2b, 0x0e37, + 0x0e3e, 0x0002, 0x0000, 0x00a7, 0x0003, 0x0026, 0x0e4b, 0x0e57, + 0x0e5e, 0x0002, 0x0000, 0x00af, 0x0003, 0x0026, 0x0e6b, 0x028a, + 0x0e77, 0x0001, 0x00b6, 0x0001, 0x001d, 0x0091, 0x0001, 0x00bb, + 0x0001, 0x001d, 0x0091, 0x0001, 0x00c0, 0x0001, 0x0001, 0x07c5, + 0x0001, 0x00c5, 0x0001, 0x0001, 0x07c5, 0x0001, 0x00ca, 0x0001, + 0x001c, 0x0a96, 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, + // Entry 1DFC0 - 1DFFF + 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0004, 0x0010, 0x0000, + 0x0000, 0x0035, 0x0002, 0x0013, 0x0024, 0x0001, 0x0015, 0x000d, + 0x0016, 0xffff, 0x00a3, 0x2673, 0x2679, 0x267e, 0x2683, 0x2687, + 0x268c, 0x2692, 0x2698, 0x269e, 0x26a3, 0x26a8, 0x0001, 0x0026, + 0x000d, 0x0016, 0xffff, 0x00a3, 0x2673, 0x2679, 0x267e, 0x2683, + 0x2687, 0x268c, 0x2692, 0x2698, 0x269e, 0x26a3, 0x26a8, 0x0001, + 0x0037, 0x0003, 0x0000, 0x0000, 0x003b, 0x0002, 0x003e, 0x0041, + 0x0001, 0x001d, 0x050b, 0x0001, 0x001d, 0x0510, 0x0001, 0x0002, + // Entry 1E000 - 1E03F + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000b, 0x0008, 0x0000, 0x0000, 0x0014, 0x0000, 0x0000, 0x0000, + 0x0000, 0x002d, 0x0002, 0x0017, 0x0022, 0x0003, 0x0000, 0x0000, + 0x001b, 0x0005, 0x0026, 0xffff, 0x0e84, 0x0e95, 0x0ea8, 0x0ebb, + 0x0003, 0x0000, 0x0000, 0x0026, 0x0005, 0x0006, 0xffff, 0x0c98, + 0x41d4, 0x41e4, 0x41f4, 0x0004, 0x0035, 0x0000, 0x0000, 0x0032, + 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0001, 0x0002, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 1E040 - 1E07F + 0x000b, 0x0007, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0013, 0x0004, 0x0021, 0x001b, 0x0018, 0x001e, 0x0001, 0x0002, + 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, 0x0002, 0x04fe, 0x0001, + 0x0002, 0x0508, 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0004, 0x0000, 0x0000, + 0x0000, 0x0010, 0x0002, 0x0013, 0x0030, 0x0001, 0x0015, 0x0008, + 0x0000, 0x0000, 0x001e, 0x0024, 0x0027, 0x002a, 0x002d, 0x0021, + 0x0001, 0x0001, 0x07c5, 0x0001, 0x0025, 0x02ec, 0x0001, 0x0010, + // Entry 1E080 - 1E0BF + 0x029b, 0x0001, 0x0025, 0x02f1, 0x0001, 0x0025, 0x02f7, 0x0001, + 0x0025, 0x02fc, 0x0002, 0x0033, 0x003a, 0x0003, 0x0000, 0x0000, + 0x0037, 0x0001, 0x0001, 0x07c5, 0x0003, 0x0000, 0x0000, 0x003e, + 0x0001, 0x0001, 0x07c5, 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0004, 0x0000, + 0x0000, 0x0000, 0x0010, 0x0002, 0x0013, 0x004c, 0x0002, 0x0016, + 0x0031, 0x0008, 0x0000, 0x0000, 0x001f, 0x0025, 0x0028, 0x002b, + 0x002e, 0x0022, 0x0001, 0x0001, 0x07c5, 0x0001, 0x0025, 0x02ec, + // Entry 1E0C0 - 1E0FF + 0x0001, 0x0010, 0x029b, 0x0001, 0x0025, 0x02f1, 0x0001, 0x0025, + 0x02f7, 0x0001, 0x0025, 0x02fc, 0x0008, 0x0000, 0x0000, 0x003a, + 0x0040, 0x0043, 0x0046, 0x0049, 0x003d, 0x0001, 0x0001, 0x07c5, + 0x0001, 0x0025, 0x02ec, 0x0001, 0x0010, 0x029b, 0x0001, 0x0025, + 0x02f1, 0x0001, 0x0025, 0x02f7, 0x0001, 0x0025, 0x02fc, 0x0002, + 0x004f, 0x0056, 0x0003, 0x0000, 0x0000, 0x0053, 0x0001, 0x0001, + 0x07c5, 0x0003, 0x0000, 0x0000, 0x005a, 0x0001, 0x0001, 0x07c5, + 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 1E100 - 1E13F + 0x0000, 0x0000, 0x000b, 0x0007, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0013, 0x0004, 0x0021, 0x001b, 0x0018, 0x001e, + 0x0001, 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, 0x0002, + 0x04fe, 0x0001, 0x0002, 0x0508, 0x0001, 0x0002, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0007, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0013, 0x0004, + 0x0021, 0x001b, 0x0018, 0x001e, 0x0001, 0x0002, 0x04e3, 0x0001, + 0x0002, 0x04f2, 0x0001, 0x0002, 0x04fe, 0x0001, 0x0002, 0x0508, + // Entry 1E140 - 1E17F + 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000b, 0x0007, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0013, 0x0004, 0x0021, 0x001b, 0x0018, 0x001e, + 0x0001, 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, 0x0002, + 0x04fe, 0x0001, 0x0002, 0x0508, 0x0001, 0x0002, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0007, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0013, 0x0004, + 0x0021, 0x001b, 0x0018, 0x001e, 0x0001, 0x0002, 0x04e3, 0x0001, + // Entry 1E180 - 1E1BF + 0x0002, 0x04f2, 0x0001, 0x0002, 0x04fe, 0x0001, 0x0002, 0x0508, + 0x0003, 0x0004, 0x0146, 0x0220, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000d, 0x0027, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, 0x0000, 0x0004, 0x0024, + 0x001e, 0x001b, 0x0021, 0x0001, 0x0026, 0x0ece, 0x0001, 0x0026, + 0x0ee9, 0x0001, 0x0010, 0x0305, 0x0001, 0x001d, 0x17a0, 0x0008, + 0x0030, 0x0095, 0x00d6, 0x0104, 0x011c, 0x0124, 0x0135, 0x0000, + 0x0002, 0x0033, 0x0064, 0x0003, 0x0037, 0x0046, 0x0055, 0x000d, + // Entry 1E1C0 - 1E1FF + 0x0026, 0xffff, 0x0eff, 0x0f03, 0x0f07, 0x0f0b, 0x0f0f, 0x0f13, + 0x0f17, 0x0f1b, 0x0f1f, 0x0f23, 0x0f27, 0x0f2b, 0x000d, 0x0000, + 0xffff, 0x2359, 0x2364, 0x2579, 0x241f, 0x2579, 0x257b, 0x2296, + 0x241f, 0x257d, 0x236a, 0x236c, 0x236e, 0x000d, 0x0026, 0xffff, + 0x0f2f, 0x0f36, 0x0f3e, 0x0f44, 0x0f0f, 0x0f4b, 0x0f17, 0x0f50, + 0x0f56, 0x0f5f, 0x0f66, 0x0f6f, 0x0003, 0x0068, 0x0077, 0x0086, + 0x000d, 0x0026, 0xffff, 0x0eff, 0x0f03, 0x0f07, 0x0f0b, 0x0f0f, + 0x0f13, 0x0f17, 0x0f1b, 0x0f1f, 0x0f23, 0x0f27, 0x0f2b, 0x000d, + // Entry 1E200 - 1E23F + 0x0000, 0xffff, 0x2359, 0x2364, 0x2579, 0x241f, 0x2579, 0x257b, + 0x2296, 0x241f, 0x257d, 0x236a, 0x236c, 0x236e, 0x000d, 0x0026, + 0xffff, 0x0f2f, 0x0f36, 0x0f3e, 0x0f44, 0x0f0f, 0x0f4b, 0x0f17, + 0x0f50, 0x0f56, 0x0f5f, 0x0f66, 0x0f6f, 0x0002, 0x0098, 0x00b7, + 0x0003, 0x009c, 0x00a5, 0x00ae, 0x0007, 0x0006, 0x0c24, 0x4204, + 0x4208, 0x420c, 0x4210, 0x4214, 0x4218, 0x0007, 0x0000, 0x236e, + 0x2296, 0x2579, 0x2579, 0x257b, 0x257f, 0x257d, 0x0007, 0x0026, + 0x0f78, 0x0f80, 0x0f86, 0x0f8e, 0x0f96, 0x0f9c, 0x0fa3, 0x0003, + // Entry 1E240 - 1E27F + 0x00bb, 0x00c4, 0x00cd, 0x0007, 0x0006, 0x0c24, 0x4204, 0x4208, + 0x420c, 0x4210, 0x4214, 0x4218, 0x0007, 0x0000, 0x236e, 0x2296, + 0x2579, 0x2579, 0x257b, 0x257f, 0x257d, 0x0007, 0x0026, 0x0f78, + 0x0f80, 0x0f86, 0x0f8e, 0x0f96, 0x0f9c, 0x0fa3, 0x0002, 0x00d9, + 0x00f2, 0x0003, 0x00dd, 0x00e4, 0x00eb, 0x0005, 0x001d, 0xffff, + 0x1674, 0x1677, 0x167a, 0x167d, 0x0005, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x0005, 0x0026, 0xffff, 0x0faa, 0x0fb9, + 0x0fca, 0x0fdb, 0x0003, 0x00f6, 0x0000, 0x00fd, 0x0005, 0x001d, + // Entry 1E280 - 1E2BF + 0xffff, 0x1674, 0x1677, 0x167a, 0x167d, 0x0005, 0x0026, 0xffff, + 0x0faa, 0x0fb9, 0x0fca, 0x0fdb, 0x0001, 0x0106, 0x0003, 0x010a, + 0x0000, 0x0113, 0x0002, 0x010d, 0x0110, 0x0001, 0x0026, 0x0feb, + 0x0001, 0x0026, 0x0fee, 0x0002, 0x0116, 0x0119, 0x0001, 0x0026, + 0x0feb, 0x0001, 0x0026, 0x0fee, 0x0001, 0x011e, 0x0001, 0x0120, + 0x0002, 0x0026, 0x0ff1, 0x0ff5, 0x0004, 0x0132, 0x012c, 0x0129, + 0x012f, 0x0001, 0x0026, 0x0ff9, 0x0001, 0x0026, 0x1012, 0x0001, + 0x0002, 0x08e8, 0x0001, 0x0015, 0x14be, 0x0004, 0x0143, 0x013d, + // Entry 1E2C0 - 1E2FF + 0x013a, 0x0140, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, + 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0040, 0x0187, + 0x0000, 0x0000, 0x018c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x019e, 0x0000, 0x0000, 0x01b0, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x01c2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01db, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 1E300 - 1E33F + 0x0000, 0x0000, 0x0000, 0x01e0, 0x0000, 0x01e5, 0x0000, 0x0000, + 0x01f7, 0x0000, 0x0000, 0x0209, 0x0000, 0x0000, 0x021b, 0x0001, + 0x0189, 0x0001, 0x0026, 0x1026, 0x0003, 0x0190, 0x0000, 0x0193, + 0x0001, 0x0025, 0x06a9, 0x0002, 0x0196, 0x019a, 0x0002, 0x0026, + 0x1037, 0x102a, 0x0002, 0x0026, 0x1055, 0x1046, 0x0003, 0x01a2, + 0x0000, 0x01a5, 0x0001, 0x0026, 0x1066, 0x0002, 0x01a8, 0x01ac, + 0x0002, 0x0026, 0x106b, 0x106b, 0x0002, 0x0026, 0x107a, 0x107a, + 0x0003, 0x01b4, 0x0000, 0x01b7, 0x0001, 0x0026, 0x108b, 0x0002, + // Entry 1E340 - 1E37F + 0x01ba, 0x01be, 0x0002, 0x0026, 0x10a7, 0x1094, 0x0002, 0x0026, + 0x10d0, 0x10bb, 0x0003, 0x01c6, 0x01c9, 0x01d0, 0x0001, 0x0026, + 0x10e6, 0x0005, 0x0026, 0x10f8, 0x10fc, 0x1101, 0x10ea, 0x1107, + 0x0002, 0x01d3, 0x01d7, 0x0002, 0x0026, 0x1126, 0x1114, 0x0002, + 0x0026, 0x114d, 0x1139, 0x0001, 0x01dd, 0x0001, 0x0026, 0x1162, + 0x0001, 0x01e2, 0x0001, 0x0026, 0x1172, 0x0003, 0x01e9, 0x0000, + 0x01ec, 0x0001, 0x0026, 0x117e, 0x0002, 0x01ef, 0x01f3, 0x0002, + 0x0026, 0x1190, 0x1182, 0x0002, 0x0026, 0x11af, 0x119f, 0x0003, + // Entry 1E380 - 1E3BF + 0x01fb, 0x0000, 0x01fe, 0x0001, 0x0026, 0x11c0, 0x0002, 0x0201, + 0x0205, 0x0002, 0x0026, 0x11d8, 0x11c7, 0x0002, 0x0026, 0x11fd, + 0x11ea, 0x0003, 0x020d, 0x0000, 0x0210, 0x0001, 0x0026, 0x1211, + 0x0002, 0x0213, 0x0217, 0x0002, 0x0026, 0x1229, 0x1218, 0x0002, + 0x0026, 0x124e, 0x123b, 0x0001, 0x021d, 0x0001, 0x0016, 0x0d68, + 0x0004, 0x0225, 0x0000, 0x0000, 0x0229, 0x0002, 0x0000, 0x1dc7, + 0x234c, 0x0002, 0x0356, 0x022c, 0x0003, 0x0230, 0x02f4, 0x0292, + 0x0060, 0x0026, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 1E3C0 - 1E3FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1262, + 0x12b7, 0xffff, 0x130f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 1E400 - 1E43F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x136a, 0x0060, 0x0026, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 1E440 - 1E47F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1279, 0x12cf, 0xffff, 0x1328, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1378, 0x0060, 0x0026, 0xffff, 0xffff, + // Entry 1E480 - 1E4BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1299, 0x12f0, 0xffff, 0x134a, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 1E4C0 - 1E4FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x138f, 0x0003, 0x035a, + 0x03c9, 0x038d, 0x0031, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 1E500 - 1E53F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0045, 0x004e, 0xffff, 0x0057, 0x003a, 0x0007, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 1E540 - 1E57F + 0xffff, 0xffff, 0xffff, 0xffff, 0x0045, 0x004e, 0xffff, 0x0057, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x24aa, 0x0031, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 1E580 - 1E5BF + 0x0049, 0x0052, 0xffff, 0x005b, 0x0003, 0x0004, 0x06a6, 0x0810, + 0x0012, 0x0017, 0x0038, 0x010a, 0x0177, 0x022a, 0x0000, 0x0297, + 0x02f2, 0x0485, 0x04ef, 0x0561, 0x0000, 0x0000, 0x0000, 0x0000, + 0x05e7, 0x0612, 0x0684, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0020, 0x0027, 0x0000, 0x9006, 0x0001, 0x0022, 0x0001, 0x0024, + 0x0001, 0x0000, 0x0000, 0x0004, 0x0035, 0x002f, 0x002c, 0x0032, + 0x0001, 0x0002, 0x0000, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, + 0x001b, 0x0001, 0x0026, 0x13a4, 0x000a, 0x0043, 0x0000, 0x0000, + // Entry 1E5C0 - 1E5FF + 0x0000, 0x0000, 0x00f9, 0x0000, 0x0000, 0x0000, 0x006a, 0x0002, + 0x0046, 0x0058, 0x0002, 0x0000, 0x0049, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x2215, 0x2218, 0x2426, 0x0002, 0x0000, 0x005b, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x0006, 0x0071, + 0x0000, 0x0000, 0x0084, 0x00a3, 0x00e6, 0x0001, 0x0073, 0x0001, + 0x0075, 0x000d, 0x0000, 0xffff, 0x005a, 0x005d, 0x0062, 0x0066, + // Entry 1E600 - 1E63F + 0x006a, 0x006f, 0x0072, 0x0075, 0x0079, 0x007e, 0x221e, 0x0085, + 0x0001, 0x0086, 0x0003, 0x0000, 0x0000, 0x008a, 0x0017, 0x0026, + 0xffff, 0x13b3, 0x13c9, 0x13d4, 0x13e9, 0x13f5, 0xffff, 0x1406, + 0xffff, 0xffff, 0x141c, 0x1427, 0x142d, 0x1432, 0x1447, 0x145b, + 0x1466, 0x1471, 0x147e, 0x148c, 0x14a1, 0x14ad, 0x14b9, 0x0001, + 0x00a5, 0x0001, 0x00a7, 0x003d, 0x0000, 0xffff, 0x01bd, 0x01c4, + 0x01cc, 0x01d5, 0x01de, 0x01e6, 0x01ec, 0x01f4, 0x01fc, 0x0205, + 0x020d, 0x0214, 0x021b, 0x0223, 0x022d, 0x0234, 0x023b, 0x0245, + // Entry 1E640 - 1E67F + 0x024c, 0x0253, 0x025b, 0x0264, 0x026b, 0x0273, 0x027c, 0x0282, + 0x028a, 0x0293, 0x029b, 0x02a4, 0x02ab, 0x02b2, 0x02b9, 0x02c3, + 0x02cc, 0x02d2, 0x02d9, 0x02e1, 0x02ea, 0x02f2, 0x02fa, 0x0303, + 0x0309, 0x0311, 0x031a, 0x0322, 0x0329, 0x0331, 0x0339, 0x0340, + 0x0349, 0x0351, 0x0358, 0x0362, 0x036a, 0x0370, 0x0377, 0x0381, + 0x0389, 0x0390, 0x0001, 0x00e8, 0x0001, 0x00ea, 0x000d, 0x0026, + 0xffff, 0x14c4, 0x14c9, 0x14ce, 0x14d4, 0x14d9, 0x14df, 0x14e5, + 0x14ec, 0x14f1, 0x14f5, 0x14fc, 0x1501, 0x0004, 0x0107, 0x0101, + // Entry 1E680 - 1E6BF + 0x00fe, 0x0104, 0x0001, 0x0025, 0x00d3, 0x0001, 0x0010, 0x0026, + 0x0001, 0x0010, 0x002f, 0x0001, 0x001f, 0x0579, 0x0001, 0x010c, + 0x0002, 0x010f, 0x0143, 0x0003, 0x0113, 0x0123, 0x0133, 0x000e, + 0x0026, 0xffff, 0x1508, 0x150c, 0x1512, 0x1518, 0x151f, 0x1525, + 0x152c, 0x1535, 0x1540, 0x1548, 0x1552, 0x1557, 0x155d, 0x000e, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x0422, 0x000e, + 0x0026, 0xffff, 0x1508, 0x150c, 0x1512, 0x1518, 0x151f, 0x1525, + // Entry 1E6C0 - 1E6FF + 0x152c, 0x1535, 0x1540, 0x1548, 0x1552, 0x1557, 0x155d, 0x0003, + 0x0147, 0x0157, 0x0167, 0x000e, 0x0026, 0xffff, 0x1508, 0x150c, + 0x1512, 0x1518, 0x151f, 0x1525, 0x152c, 0x1535, 0x1540, 0x1548, + 0x1552, 0x1557, 0x155d, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, + 0x2218, 0x2426, 0x0422, 0x000e, 0x0026, 0xffff, 0x1508, 0x150c, + 0x1512, 0x1518, 0x151f, 0x1525, 0x152c, 0x1535, 0x1540, 0x1548, + 0x1552, 0x1557, 0x155d, 0x000a, 0x0182, 0x0000, 0x0000, 0x0000, + // Entry 1E700 - 1E73F + 0x0000, 0x0219, 0x0000, 0x0000, 0x0000, 0x01a9, 0x0002, 0x0185, + 0x0197, 0x0002, 0x0000, 0x0188, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x2215, 0x2218, 0x2426, 0x0002, 0x0000, 0x019a, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x0006, 0x01b0, 0x0000, + 0x0000, 0x0000, 0x01c3, 0x0206, 0x0001, 0x01b2, 0x0001, 0x01b4, + 0x000d, 0x0000, 0xffff, 0x005a, 0x005d, 0x0062, 0x0066, 0x006a, + // Entry 1E740 - 1E77F + 0x006f, 0x0072, 0x0075, 0x0079, 0x007e, 0x221e, 0x0085, 0x0001, + 0x01c5, 0x0001, 0x01c7, 0x003d, 0x0000, 0xffff, 0x01bd, 0x01c4, + 0x01cc, 0x01d5, 0x01de, 0x01e6, 0x01ec, 0x01f4, 0x01fc, 0x0205, + 0x020d, 0x0214, 0x021b, 0x0223, 0x022d, 0x0234, 0x023b, 0x0245, + 0x024c, 0x0253, 0x025b, 0x0264, 0x026b, 0x0273, 0x027c, 0x0282, + 0x028a, 0x0293, 0x029b, 0x02a4, 0x02ab, 0x02b2, 0x02b9, 0x02c3, + 0x02cc, 0x02d2, 0x02d9, 0x02e1, 0x02ea, 0x02f2, 0x02fa, 0x0303, + 0x0309, 0x0311, 0x031a, 0x0322, 0x0329, 0x0331, 0x0339, 0x0340, + // Entry 1E780 - 1E7BF + 0x0349, 0x0351, 0x0358, 0x0362, 0x036a, 0x0370, 0x0377, 0x0381, + 0x0389, 0x0390, 0x0001, 0x0208, 0x0001, 0x020a, 0x000d, 0x0026, + 0xffff, 0x14c4, 0x14c9, 0x14ce, 0x14d4, 0x14d9, 0x14df, 0x14e5, + 0x14ec, 0x14f1, 0x14f5, 0x14fc, 0x1501, 0x0004, 0x0227, 0x0221, + 0x021e, 0x0224, 0x0001, 0x0025, 0x00d3, 0x0001, 0x0010, 0x0026, + 0x0001, 0x0010, 0x002f, 0x0001, 0x001f, 0x0579, 0x0001, 0x022c, + 0x0002, 0x022f, 0x0263, 0x0003, 0x0233, 0x0243, 0x0253, 0x000e, + 0x0017, 0xffff, 0x02fd, 0x2d7d, 0x2d84, 0x2d8a, 0x2d91, 0x0330, + // Entry 1E7C0 - 1E7FF + 0x0339, 0x0342, 0x2d98, 0x0352, 0x2d9f, 0x0360, 0x2da5, 0x000e, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x0422, 0x000e, + 0x0017, 0xffff, 0x02fd, 0x2d7d, 0x2d84, 0x2d8a, 0x2d91, 0x0330, + 0x0339, 0x0342, 0x2d98, 0x0352, 0x2d9f, 0x0360, 0x2da5, 0x0003, + 0x0267, 0x0277, 0x0287, 0x000e, 0x0017, 0xffff, 0x02fd, 0x2d7d, + 0x2d84, 0x2d8a, 0x2d91, 0x0330, 0x0339, 0x0342, 0x2d98, 0x0352, + 0x2d9f, 0x0360, 0x2da5, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, + // Entry 1E800 - 1E83F + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, + 0x2218, 0x2426, 0x0422, 0x000e, 0x0017, 0xffff, 0x02fd, 0x2d7d, + 0x2d84, 0x2d8a, 0x2d91, 0x0330, 0x0339, 0x0342, 0x2d98, 0x0352, + 0x2d9f, 0x0360, 0x2da5, 0x0008, 0x02a0, 0x0000, 0x0000, 0x0000, + 0x02c8, 0x02d0, 0x0000, 0x02e1, 0x0002, 0x02a3, 0x02b6, 0x0003, + 0x0000, 0x0000, 0x02a7, 0x000d, 0x0000, 0xffff, 0x0003, 0x0007, + 0x000b, 0x000f, 0x0013, 0x0017, 0x001b, 0x001f, 0x0023, 0x0027, + 0x002b, 0x002f, 0x0002, 0x0000, 0x02b9, 0x000d, 0x0000, 0xffff, + // Entry 1E840 - 1E87F + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x2215, 0x2218, 0x2426, 0x0001, 0x02ca, 0x0001, 0x02cc, + 0x0002, 0x0000, 0x0425, 0x042a, 0x0004, 0x02de, 0x02d8, 0x02d5, + 0x02db, 0x0001, 0x0002, 0x0000, 0x0001, 0x0002, 0x0010, 0x0001, + 0x0002, 0x001b, 0x0001, 0x0026, 0x13a4, 0x0004, 0x02ef, 0x02e9, + 0x02e6, 0x02ec, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x02fb, + 0x0360, 0x03b7, 0x03ec, 0x042d, 0x0452, 0x0463, 0x0474, 0x0002, + // Entry 1E880 - 1E8BF + 0x02fe, 0x032f, 0x0003, 0x0302, 0x0311, 0x0320, 0x000d, 0x0006, + 0xffff, 0x001e, 0x4144, 0x421c, 0x414c, 0x4220, 0x4154, 0x4158, + 0x415c, 0x4160, 0x4224, 0x4228, 0x422c, 0x000d, 0x0000, 0xffff, + 0x257b, 0x2364, 0x2579, 0x241f, 0x2579, 0x257b, 0x257b, 0x241f, + 0x257d, 0x236a, 0x236c, 0x236e, 0x000d, 0x0026, 0xffff, 0x1562, + 0x156d, 0x1578, 0x157e, 0x1584, 0x158a, 0x158f, 0x1594, 0x159d, + 0x15a7, 0x15af, 0x15b8, 0x0003, 0x0333, 0x0342, 0x0351, 0x000d, + 0x0006, 0xffff, 0x001e, 0x4144, 0x421c, 0x414c, 0x4220, 0x4154, + // Entry 1E8C0 - 1E8FF + 0x4158, 0x415c, 0x4160, 0x4224, 0x4228, 0x422c, 0x000d, 0x0000, + 0xffff, 0x257b, 0x2364, 0x2579, 0x241f, 0x2579, 0x257b, 0x257b, + 0x241f, 0x257d, 0x236a, 0x236c, 0x236e, 0x000d, 0x0026, 0xffff, + 0x1562, 0x156d, 0x1578, 0x157e, 0x1584, 0x158a, 0x158f, 0x1594, + 0x159d, 0x15a7, 0x15af, 0x15b8, 0x0002, 0x0363, 0x038d, 0x0005, + 0x0369, 0x0372, 0x0384, 0x0000, 0x037b, 0x0007, 0x0000, 0x006f, + 0x2581, 0x2584, 0x2587, 0x258a, 0x258d, 0x2590, 0x0007, 0x0000, + 0x257d, 0x2579, 0x04dd, 0x2151, 0x04dd, 0x2364, 0x257d, 0x0007, + // Entry 1E900 - 1E93F + 0x0000, 0x006f, 0x2581, 0x2584, 0x2587, 0x258a, 0x258d, 0x2590, + 0x0007, 0x0026, 0x15c1, 0x15c7, 0x15cf, 0x15d7, 0x15e0, 0x15eb, + 0x15f1, 0x0005, 0x0393, 0x039c, 0x03ae, 0x0000, 0x03a5, 0x0007, + 0x0000, 0x006f, 0x2581, 0x2584, 0x2587, 0x258a, 0x258d, 0x2590, + 0x0007, 0x0000, 0x257d, 0x2579, 0x04dd, 0x2151, 0x04dd, 0x2364, + 0x257d, 0x0007, 0x0000, 0x006f, 0x2581, 0x2584, 0x2587, 0x258a, + 0x258d, 0x2590, 0x0007, 0x0026, 0x15c1, 0x15c7, 0x15cf, 0x15d7, + 0x15e0, 0x15eb, 0x15f1, 0x0002, 0x03ba, 0x03d3, 0x0003, 0x03be, + // Entry 1E940 - 1E97F + 0x03c5, 0x03cc, 0x0005, 0x0000, 0xffff, 0x1f17, 0x1f1a, 0x1f1d, + 0x1f20, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x0005, 0x0026, 0xffff, 0x15f7, 0x1605, 0x1613, 0x1621, 0x0003, + 0x03d7, 0x03de, 0x03e5, 0x0005, 0x0000, 0xffff, 0x1f17, 0x1f1a, + 0x1f1d, 0x1f20, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x0005, 0x0026, 0xffff, 0x15f7, 0x1605, 0x1613, 0x1621, + 0x0002, 0x03ef, 0x040e, 0x0003, 0x03f3, 0x03fc, 0x0405, 0x0002, + 0x03f6, 0x03f9, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, + // Entry 1E980 - 1E9BF + 0x0002, 0x03ff, 0x0402, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, + 0x04f2, 0x0002, 0x0408, 0x040b, 0x0001, 0x0000, 0x04ef, 0x0001, + 0x0000, 0x04f2, 0x0003, 0x0412, 0x041b, 0x0424, 0x0002, 0x0415, + 0x0418, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0002, + 0x041e, 0x0421, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, + 0x0002, 0x0427, 0x042a, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, + 0x04f2, 0x0003, 0x043c, 0x0447, 0x0431, 0x0002, 0x0434, 0x0438, + 0x0002, 0x0026, 0x162f, 0x1655, 0x0002, 0x0026, 0x163c, 0x1661, + // Entry 1E9C0 - 1E9FF + 0x0002, 0x043f, 0x0443, 0x0002, 0x0016, 0x022c, 0x26ae, 0x0002, + 0x0026, 0x1675, 0x167c, 0x0002, 0x044a, 0x044e, 0x0002, 0x0026, + 0x1681, 0x168a, 0x0002, 0x0026, 0x1686, 0x168f, 0x0004, 0x0460, + 0x045a, 0x0457, 0x045d, 0x0001, 0x0002, 0x0025, 0x0001, 0x0002, + 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, 0x001f, 0x0579, 0x0004, + 0x0471, 0x046b, 0x0468, 0x046e, 0x0001, 0x0000, 0x0524, 0x0001, + 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, + 0x0004, 0x0482, 0x047c, 0x0479, 0x047f, 0x0001, 0x0026, 0x1692, + // Entry 1EA00 - 1EA3F + 0x0001, 0x0026, 0x1692, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0006, 0x048c, 0x0000, 0x0000, 0x0000, 0x04d7, 0x04de, + 0x0002, 0x048f, 0x04b3, 0x0003, 0x0493, 0x0000, 0x04a3, 0x000e, + 0x0026, 0x16d0, 0x169f, 0x16a7, 0x16b0, 0x16b7, 0x16bd, 0x16c4, + 0x16cb, 0x16d7, 0x16dd, 0x16e2, 0x16e8, 0x16f0, 0x16f3, 0x000e, + 0x0026, 0x16d0, 0x169f, 0x16a7, 0x16b0, 0x16b7, 0x16bd, 0x16c4, + 0x16cb, 0x16d7, 0x16dd, 0x16e2, 0x16e8, 0x16f0, 0x16f3, 0x0003, + 0x04b7, 0x0000, 0x04c7, 0x000e, 0x0026, 0x16d0, 0x169f, 0x16a7, + // Entry 1EA40 - 1EA7F + 0x16b0, 0x16b7, 0x16bd, 0x16c4, 0x16cb, 0x16d7, 0x16dd, 0x16e2, + 0x16e8, 0x16f0, 0x16f3, 0x000e, 0x0026, 0x16d0, 0x169f, 0x16a7, + 0x16b0, 0x16b7, 0x16bd, 0x16c4, 0x16cb, 0x16d7, 0x16dd, 0x16e2, + 0x16e8, 0x16f0, 0x16f3, 0x0001, 0x04d9, 0x0001, 0x04db, 0x0001, + 0x0000, 0x04ef, 0x0004, 0x04ec, 0x04e6, 0x04e3, 0x04e9, 0x0001, + 0x0002, 0x0000, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, + 0x0001, 0x0026, 0x13a4, 0x0005, 0x04f5, 0x0000, 0x0000, 0x0000, + 0x055a, 0x0002, 0x04f8, 0x0529, 0x0003, 0x04fc, 0x050b, 0x051a, + // Entry 1EA80 - 1EABF + 0x000d, 0x0000, 0xffff, 0x05a2, 0x2593, 0x259d, 0x25a6, 0x25b0, + 0x25ba, 0x22ec, 0x25c6, 0x05e1, 0x2300, 0x25cf, 0x25d6, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, 0x0000, + 0xffff, 0x05a2, 0x2593, 0x259d, 0x25a6, 0x25b0, 0x25ba, 0x22ec, + 0x25c6, 0x05e1, 0x2300, 0x25cf, 0x25d6, 0x0003, 0x052d, 0x053c, + 0x054b, 0x000d, 0x0000, 0xffff, 0x05a2, 0x2593, 0x259d, 0x25a6, + 0x25b0, 0x25ba, 0x22ec, 0x25c6, 0x05e1, 0x2300, 0x25cf, 0x25d6, + // Entry 1EAC0 - 1EAFF + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, + 0x0000, 0xffff, 0x05a2, 0x2593, 0x259d, 0x25a6, 0x25b0, 0x25ba, + 0x22ec, 0x25c6, 0x05e1, 0x2300, 0x25cf, 0x25d6, 0x0001, 0x055c, + 0x0001, 0x055e, 0x0001, 0x0026, 0x16fa, 0x0008, 0x056a, 0x0000, + 0x0000, 0x0000, 0x05cf, 0x05d6, 0x0000, 0x9006, 0x0002, 0x056d, + 0x059e, 0x0003, 0x0571, 0x0580, 0x058f, 0x000d, 0x0026, 0xffff, + 0x16ff, 0x1705, 0x170a, 0x1711, 0x1719, 0x1721, 0x172a, 0x172f, + // Entry 1EB00 - 1EB3F + 0x1734, 0x1739, 0x173f, 0x1749, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x2215, 0x2218, 0x2426, 0x000d, 0x0026, 0xffff, 0x1753, 0x175d, + 0x1763, 0x1773, 0x1784, 0x1794, 0x17a5, 0x17ab, 0x17b5, 0x17bd, + 0x17c4, 0x17d3, 0x0003, 0x05a2, 0x05b1, 0x05c0, 0x000d, 0x0026, + 0xffff, 0x16ff, 0x1705, 0x170a, 0x1711, 0x1719, 0x1721, 0x172a, + 0x172f, 0x1734, 0x1739, 0x173f, 0x1749, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + // Entry 1EB40 - 1EB7F + 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, 0x0026, 0xffff, 0x1753, + 0x175d, 0x1763, 0x1773, 0x1784, 0x1794, 0x17a5, 0x17ab, 0x17b5, + 0x17bd, 0x17c4, 0x17d3, 0x0001, 0x05d1, 0x0001, 0x05d3, 0x0001, + 0x0026, 0x17e0, 0x0004, 0x05e4, 0x05de, 0x05db, 0x05e1, 0x0001, + 0x0002, 0x0000, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, + 0x0001, 0x0026, 0x13a4, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x05f0, 0x0000, 0x0601, 0x0004, 0x05fe, 0x05f8, 0x05f5, + 0x05fb, 0x0001, 0x0002, 0x0000, 0x0001, 0x0002, 0x0010, 0x0001, + // Entry 1EB80 - 1EBBF + 0x0002, 0x001b, 0x0001, 0x0026, 0x13a4, 0x0004, 0x060f, 0x0609, + 0x0606, 0x060c, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0005, 0x0618, + 0x0000, 0x0000, 0x0000, 0x067d, 0x0002, 0x061b, 0x064c, 0x0003, + 0x061f, 0x062e, 0x063d, 0x000d, 0x0000, 0xffff, 0x19c9, 0x19d3, + 0x19df, 0x2566, 0x19eb, 0x19f2, 0x256a, 0x1a01, 0x1a06, 0x2575, + 0x23c6, 0x1a16, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, + // Entry 1EBC0 - 1EBFF + 0x2426, 0x000d, 0x0000, 0xffff, 0x19c9, 0x19d3, 0x19df, 0x2566, + 0x19eb, 0x19f2, 0x256a, 0x1a01, 0x1a06, 0x2575, 0x23c6, 0x1a16, + 0x0003, 0x0650, 0x065f, 0x066e, 0x000d, 0x0000, 0xffff, 0x19c9, + 0x19d3, 0x19df, 0x2566, 0x19eb, 0x19f2, 0x256a, 0x1a01, 0x1a06, + 0x2575, 0x23c6, 0x1a16, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, + 0x2218, 0x2426, 0x000d, 0x0000, 0xffff, 0x19c9, 0x19d3, 0x19df, + 0x2566, 0x19eb, 0x19f2, 0x256a, 0x1a01, 0x1a06, 0x2575, 0x23c6, + // Entry 1EC00 - 1EC3F + 0x1a16, 0x0001, 0x067f, 0x0001, 0x0681, 0x0001, 0x0000, 0x1a1d, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x068d, 0x0695, 0x0000, + 0x9006, 0x0001, 0x068f, 0x0001, 0x0691, 0x0002, 0x0000, 0x1a20, + 0x25e0, 0x0004, 0x06a3, 0x069d, 0x069a, 0x06a0, 0x0001, 0x0002, + 0x0000, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, + 0x0026, 0x13a4, 0x0040, 0x06e7, 0x0000, 0x0000, 0x06ec, 0x0000, + 0x0000, 0x0703, 0x071a, 0x0731, 0x0748, 0x0000, 0x0000, 0x075f, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0776, 0x0000, 0x0000, + // Entry 1EC40 - 1EC7F + 0x0000, 0x0000, 0x0000, 0x078f, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0794, 0x0000, 0x0000, 0x079c, 0x0000, 0x0000, 0x07a4, + 0x0000, 0x0000, 0x07ac, 0x0000, 0x0000, 0x07b4, 0x0000, 0x0000, + 0x07bc, 0x0000, 0x0000, 0x07c4, 0x0000, 0x0000, 0x0000, 0x07cc, + 0x0000, 0x07d1, 0x0000, 0x0000, 0x07e3, 0x0000, 0x0000, 0x07f5, + 0x0000, 0x0000, 0x080b, 0x0001, 0x06e9, 0x0001, 0x0026, 0x17ef, + 0x0003, 0x06f0, 0x06f3, 0x06f8, 0x0001, 0x0026, 0x17f8, 0x0003, + 0x0026, 0x17fd, 0x180a, 0x1813, 0x0002, 0x06fb, 0x06ff, 0x0002, + // Entry 1EC80 - 1ECBF + 0x0026, 0x1821, 0x1821, 0x0002, 0x0026, 0x182e, 0x182e, 0x0003, + 0x0707, 0x070a, 0x070f, 0x0001, 0x0026, 0x183b, 0x0003, 0x0026, + 0x1846, 0x1859, 0x1868, 0x0002, 0x0712, 0x0716, 0x0002, 0x0026, + 0x187c, 0x187c, 0x0002, 0x0026, 0x188f, 0x188f, 0x0003, 0x071e, + 0x0721, 0x0726, 0x0001, 0x0026, 0x18a2, 0x0003, 0x0026, 0x1846, + 0x1859, 0x1868, 0x0002, 0x0729, 0x072d, 0x0002, 0x0026, 0x187c, + 0x187c, 0x0002, 0x0026, 0x188f, 0x188f, 0x0003, 0x0735, 0x0738, + 0x073d, 0x0001, 0x0026, 0x18a2, 0x0003, 0x0026, 0x1846, 0x1859, + // Entry 1ECC0 - 1ECFF + 0x1868, 0x0002, 0x0740, 0x0744, 0x0002, 0x0026, 0x187c, 0x187c, + 0x0002, 0x0026, 0x188f, 0x188f, 0x0003, 0x074c, 0x074f, 0x0754, + 0x0001, 0x0026, 0x18ad, 0x0003, 0x0026, 0x18b4, 0x18c3, 0x18d0, + 0x0002, 0x0757, 0x075b, 0x0002, 0x0026, 0x18f0, 0x18e1, 0x0002, + 0x0026, 0x190f, 0x1900, 0x0003, 0x0763, 0x0766, 0x076b, 0x0001, + 0x0026, 0x191f, 0x0003, 0x0026, 0x1924, 0x1931, 0x193c, 0x0002, + 0x076e, 0x0772, 0x0002, 0x0026, 0x1958, 0x194b, 0x0002, 0x0026, + 0x1973, 0x1966, 0x0003, 0x077a, 0x077d, 0x0784, 0x0001, 0x0014, + // Entry 1ED00 - 1ED3F + 0x095f, 0x0005, 0x0026, 0x198d, 0x1996, 0x199e, 0x1981, 0x19a5, + 0x0002, 0x0787, 0x078b, 0x0002, 0x0026, 0x19bb, 0x19af, 0x0002, + 0x0026, 0x19d5, 0x19c9, 0x0001, 0x0791, 0x0001, 0x0026, 0x19e3, + 0x0002, 0x0000, 0x0797, 0x0003, 0x0026, 0x19f3, 0x1a02, 0x1a0e, + 0x0002, 0x0000, 0x079f, 0x0003, 0x0026, 0x1a23, 0x1a34, 0x1a42, + 0x0002, 0x0000, 0x07a7, 0x0003, 0x0026, 0x1a59, 0x1a6a, 0x1a78, + 0x0002, 0x0000, 0x07af, 0x0003, 0x0026, 0x1a8f, 0x1aa1, 0x1ab0, + 0x0002, 0x0000, 0x07b7, 0x0003, 0x0026, 0x1ac8, 0x1adc, 0x1aed, + // Entry 1ED40 - 1ED7F + 0x0002, 0x0000, 0x07bf, 0x0003, 0x0026, 0x1b07, 0x1b16, 0x1b22, + 0x0002, 0x0000, 0x07c7, 0x0003, 0x0026, 0x1b37, 0x1b46, 0x1b52, + 0x0001, 0x07ce, 0x0001, 0x0007, 0x0892, 0x0003, 0x07d5, 0x0000, + 0x07d8, 0x0001, 0x0026, 0x1b67, 0x0002, 0x07db, 0x07df, 0x0002, + 0x0026, 0x1b6c, 0x1b6c, 0x0002, 0x0026, 0x1b79, 0x1b79, 0x0003, + 0x07e7, 0x0000, 0x07ea, 0x0001, 0x0026, 0x1b86, 0x0002, 0x07ed, + 0x07f1, 0x0002, 0x0026, 0x1b9c, 0x1b8d, 0x0002, 0x0026, 0x1bbb, + 0x1bac, 0x0003, 0x07f9, 0x07fc, 0x0800, 0x0001, 0x0026, 0x1bcb, + // Entry 1ED80 - 1EDBF + 0x0002, 0x0016, 0xffff, 0x0cf3, 0x0002, 0x0803, 0x0807, 0x0002, + 0x0026, 0x1be3, 0x1bd3, 0x0002, 0x0026, 0x1c04, 0x1bf4, 0x0001, + 0x080d, 0x0001, 0x0000, 0x1dc2, 0x0004, 0x0815, 0x081a, 0x081f, + 0x082a, 0x0003, 0x0000, 0x1dc7, 0x234c, 0x25e7, 0x0003, 0x0026, + 0x1c15, 0x1c1e, 0x1c2c, 0x0002, 0x0000, 0x0822, 0x0002, 0x0000, + 0x0825, 0x0003, 0x0026, 0xffff, 0x1c3e, 0x1c50, 0x0002, 0x0a11, + 0x082d, 0x0003, 0x0831, 0x0971, 0x08d1, 0x009e, 0x0026, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1ce3, 0x1d33, 0x1d9d, 0x1dd2, 0x1e07, + // Entry 1EDC0 - 1EDFF + 0x1e3c, 0x1e74, 0x1ea9, 0xffff, 0x1f3f, 0x1f77, 0x1fb8, 0x2008, + 0x2040, 0x2078, 0x20ce, 0x2145, 0x2195, 0x21e5, 0x2235, 0x2267, + 0xffff, 0xffff, 0x22c4, 0xffff, 0x2319, 0xffff, 0x236b, 0x23a0, + 0x23db, 0x2413, 0xffff, 0xffff, 0x247c, 0x24c3, 0x250d, 0xffff, + 0xffff, 0xffff, 0x257e, 0xffff, 0x25de, 0x2631, 0xffff, 0x267e, + 0x26cb, 0x271e, 0xffff, 0xffff, 0xffff, 0xffff, 0x27bd, 0xffff, + 0xffff, 0x2822, 0x2875, 0xffff, 0xffff, 0x28fe, 0x2951, 0x298f, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2a35, 0x2a6d, + // Entry 1EE00 - 1EE3F + 0x2aa5, 0x2ae6, 0x2b1e, 0xffff, 0xffff, 0x2baf, 0xffff, 0x2bfb, + 0xffff, 0xffff, 0x2c6b, 0xffff, 0x2d12, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2d96, 0xffff, 0xffff, 0xffff, 0x2de9, 0x2e2a, 0xffff, + 0xffff, 0xffff, 0x2e8b, 0x2ed8, 0x2f22, 0xffff, 0xffff, 0x2f91, + 0x3004, 0x3045, 0x3071, 0xffff, 0xffff, 0x30dc, 0x3126, 0x3164, + 0xffff, 0x31b8, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x329d, + 0x32d5, 0x3307, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x33c6, 0xffff, 0xffff, 0x341f, 0xffff, 0x346a, 0xffff, + // Entry 1EE40 - 1EE7F + 0x34ba, 0x3501, 0x353c, 0xffff, 0x3596, 0x35d7, 0xffff, 0xffff, + 0xffff, 0x364a, 0x3682, 0xffff, 0xffff, 0x1c61, 0x1d65, 0x1edb, + 0x1f0a, 0xffff, 0xffff, 0x2cc4, 0x3245, 0x009e, 0x0026, 0x1c8d, + 0x1c9d, 0x1cb7, 0x1ccd, 0x1cf9, 0x1d3f, 0x1daa, 0x1ddf, 0x1e14, + 0x1e4a, 0x1e81, 0x1eb5, 0xffff, 0x1f4d, 0x1f88, 0x1fce, 0x2016, + 0x204e, 0x2090, 0x20f1, 0x215b, 0x21ab, 0x21fb, 0x2241, 0x2276, + 0x22a2, 0x22b2, 0x22d7, 0x230b, 0x232b, 0x235d, 0x2378, 0x23af, + 0x23e9, 0x2424, 0x2454, 0x2468, 0x248f, 0x24d5, 0x251c, 0x2548, + // Entry 1EE80 - 1EEBF + 0x2553, 0x256b, 0x2593, 0x25cb, 0x25f5, 0x2646, 0xffff, 0x2693, + 0x26e2, 0x272b, 0x2753, 0x2769, 0x278f, 0x27a7, 0x27cc, 0x27f8, + 0x280e, 0x2839, 0x288c, 0x28dd, 0x28ef, 0x2915, 0x2961, 0x2999, + 0x29bb, 0x29ca, 0x29de, 0x29ef, 0x2a09, 0x2a1f, 0x2a43, 0x2a7b, + 0x2ab6, 0x2af4, 0x2b3d, 0x2b89, 0x2b9c, 0x2bbf, 0x2bed, 0x2c0c, + 0x2c3c, 0x2c57, 0x2c84, 0x2cf9, 0x2d1f, 0x2d47, 0x2d57, 0x2d67, + 0x2d7f, 0x2da9, 0x2ddd, 0xffff, 0xffff, 0x2dfa, 0x2e36, 0x2e5c, + 0x2e6c, 0x2e7d, 0x2ea0, 0x2eec, 0x2f37, 0x2f6f, 0x2f7b, 0x2faa, + // Entry 1EEC0 - 1EEFF + 0x3015, 0x304f, 0x3083, 0x30b5, 0x30c2, 0x30f0, 0x3136, 0x3174, + 0x31a2, 0x31d6, 0x3220, 0x3238, 0xffff, 0x3280, 0x3290, 0x32ab, + 0x32e1, 0x3317, 0x3345, 0x3354, 0x336d, 0x3384, 0x3398, 0x33a9, + 0x33b4, 0x33d2, 0x33f8, 0x3408, 0x342f, 0x345d, 0x347a, 0x34a8, + 0x34cd, 0x3510, 0x354f, 0x3583, 0x35a7, 0x35e6, 0x3612, 0x361e, + 0x3632, 0x3658, 0x3697, 0x28c8, 0x2fea, 0x1c6b, 0x1d73, 0x1ee6, + 0x1f17, 0xffff, 0x2c4c, 0x2cd1, 0x3254, 0x009e, 0x0026, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1d17, 0x1d53, 0x1dbf, 0x1df4, 0x1e29, + // Entry 1EF00 - 1EF3F + 0x1e60, 0x1e96, 0x1ec9, 0xffff, 0x1f63, 0x1fa1, 0x1fec, 0x202c, + 0x2064, 0x20b0, 0x211c, 0x2179, 0x21c9, 0x2219, 0x2255, 0x228d, + 0xffff, 0xffff, 0x22f2, 0xffff, 0x2345, 0xffff, 0x238d, 0x23c6, + 0x23ff, 0x243d, 0xffff, 0xffff, 0x24aa, 0x24ef, 0x2533, 0xffff, + 0xffff, 0xffff, 0x25b0, 0xffff, 0x2614, 0x2663, 0xffff, 0x26b0, + 0x2701, 0x2740, 0xffff, 0xffff, 0xffff, 0xffff, 0x27e3, 0xffff, + 0xffff, 0x2858, 0x28ab, 0xffff, 0xffff, 0x2934, 0x2979, 0x29ab, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2a59, 0x2a91, + // Entry 1EF40 - 1EF7F + 0x2acf, 0x2b0a, 0x2b64, 0xffff, 0xffff, 0x2bd7, 0xffff, 0x2c25, + 0xffff, 0xffff, 0x2ca5, 0xffff, 0x2d34, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2dc4, 0xffff, 0xffff, 0xffff, 0x2e13, 0x2e4a, 0xffff, + 0xffff, 0xffff, 0x2ebd, 0x2f08, 0x2f54, 0xffff, 0xffff, 0x2fcb, + 0x302e, 0x3061, 0x309d, 0xffff, 0xffff, 0x310c, 0x314e, 0x318c, + 0xffff, 0x31fc, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x32c1, + 0x32f5, 0x332f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x33e6, 0xffff, 0xffff, 0x3447, 0xffff, 0x3492, 0xffff, + // Entry 1EF80 - 1EFBF + 0x34e8, 0x3527, 0x356a, 0xffff, 0x35c0, 0x35fd, 0xffff, 0xffff, + 0xffff, 0x366e, 0x36b4, 0xffff, 0xffff, 0x1c7d, 0x1d89, 0x1ef9, + 0x1f2c, 0xffff, 0xffff, 0x2ce6, 0x326b, 0x0003, 0x0a15, 0x0a7b, + 0x0a48, 0x0031, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 1EFC0 - 1EFFF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0045, 0x004e, 0xffff, 0x0057, 0x0031, 0x0007, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0045, 0x004e, 0xffff, 0x0057, 0x0031, + // Entry 1F000 - 1F03F + 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0049, 0x0052, + 0xffff, 0x005b, 0x0003, 0x0004, 0x0209, 0x07f2, 0x0008, 0x000d, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x004b, 0x0076, 0x0008, + // Entry 1F040 - 1F07F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0029, 0x0000, 0x003a, + 0x0003, 0x001f, 0x0024, 0x001a, 0x0001, 0x001c, 0x0001, 0x0027, + 0x0000, 0x0001, 0x0021, 0x0001, 0x0027, 0x0000, 0x0001, 0x0026, + 0x0001, 0x0027, 0x0000, 0x0004, 0x0037, 0x0031, 0x002e, 0x0034, + 0x0001, 0x0002, 0x0000, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, + 0x001b, 0x0001, 0x0002, 0x0587, 0x0004, 0x0048, 0x0042, 0x003f, + 0x0045, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x0000, 0x0000, + // Entry 1F080 - 1F0BF + 0x0000, 0x0000, 0x0000, 0x0054, 0x0000, 0x0065, 0x0004, 0x0062, + 0x005c, 0x0059, 0x005f, 0x0001, 0x0002, 0x0000, 0x0001, 0x0002, + 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0002, 0x0587, 0x0004, + 0x0073, 0x006d, 0x006a, 0x0070, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0008, 0x007f, 0x00e4, 0x013b, 0x0170, 0x01b1, 0x01d6, 0x01e7, + 0x01f8, 0x0002, 0x0082, 0x00b3, 0x0003, 0x0086, 0x0095, 0x00a4, + 0x000d, 0x0027, 0xffff, 0x0003, 0x0007, 0x000d, 0x0014, 0x0018, + // Entry 1F0C0 - 1F0FF + 0x001d, 0x0023, 0x0029, 0x002e, 0x0035, 0x003c, 0x0041, 0x000d, + 0x0000, 0xffff, 0x2146, 0x2364, 0x2579, 0x241f, 0x25eb, 0x2579, + 0x204d, 0x2296, 0x2579, 0x236e, 0x257d, 0x236c, 0x000d, 0x0027, + 0xffff, 0x0046, 0x004e, 0x000d, 0x0056, 0x005f, 0x0069, 0x0023, + 0x0073, 0x007b, 0x008a, 0x009c, 0x00a4, 0x0003, 0x00b7, 0x00c6, + 0x00d5, 0x000d, 0x0027, 0xffff, 0x0003, 0x0007, 0x000d, 0x0014, + 0x0018, 0x001d, 0x0023, 0x0029, 0x002e, 0x0035, 0x003c, 0x0041, + 0x000d, 0x0000, 0xffff, 0x2146, 0x2364, 0x2579, 0x241f, 0x25eb, + // Entry 1F100 - 1F13F + 0x2579, 0x204d, 0x2296, 0x2579, 0x236e, 0x257d, 0x236c, 0x000d, + 0x0027, 0xffff, 0x0046, 0x004e, 0x000d, 0x0056, 0x005f, 0x0069, + 0x0023, 0x0073, 0x007b, 0x008a, 0x009c, 0x00a4, 0x0002, 0x00e7, + 0x0111, 0x0005, 0x00ed, 0x00f6, 0x0108, 0x0000, 0x00ff, 0x0007, + 0x0027, 0x00ac, 0x00b1, 0x00b6, 0x00bd, 0x00c3, 0x00c9, 0x00cf, + 0x0007, 0x0000, 0x236e, 0x2296, 0x2579, 0x25ed, 0x236e, 0x241f, + 0x257d, 0x0007, 0x0017, 0x0429, 0x2dae, 0x2db1, 0x2db5, 0x2db9, + 0x2dbd, 0x2dc0, 0x0007, 0x0027, 0x00d4, 0x00e2, 0x00ec, 0x00f7, + // Entry 1F140 - 1F17F + 0x0105, 0x0110, 0x011b, 0x0005, 0x0117, 0x0120, 0x0132, 0x0000, + 0x0129, 0x0007, 0x0027, 0x00ac, 0x00b1, 0x00b6, 0x00bd, 0x00c3, + 0x00c9, 0x00cf, 0x0007, 0x0000, 0x236e, 0x2296, 0x2579, 0x25ed, + 0x236e, 0x241f, 0x257d, 0x0007, 0x0017, 0x0429, 0x2dae, 0x2db1, + 0x2db5, 0x2db9, 0x2dbd, 0x2dc0, 0x0007, 0x0027, 0x00d4, 0x00e2, + 0x00ec, 0x00f7, 0x0105, 0x0110, 0x011b, 0x0002, 0x013e, 0x0157, + 0x0003, 0x0142, 0x0149, 0x0150, 0x0005, 0x0006, 0xffff, 0x00f6, + 0x00f9, 0x00fc, 0x00ff, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, + // Entry 1F180 - 1F1BF + 0x0037, 0x23b3, 0x0005, 0x0027, 0xffff, 0x0128, 0x0134, 0x0140, + 0x014c, 0x0003, 0x015b, 0x0162, 0x0169, 0x0005, 0x0006, 0xffff, + 0x00f6, 0x00f9, 0x00fc, 0x00ff, 0x0005, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x0005, 0x0027, 0xffff, 0x0128, 0x0134, + 0x0140, 0x014c, 0x0002, 0x0173, 0x0192, 0x0003, 0x0177, 0x0180, + 0x0189, 0x0002, 0x017a, 0x017d, 0x0001, 0x0027, 0x0158, 0x0001, + 0x0027, 0x015d, 0x0002, 0x0183, 0x0186, 0x0001, 0x0000, 0x1f9c, + 0x0001, 0x0000, 0x21e4, 0x0002, 0x018c, 0x018f, 0x0001, 0x0027, + // Entry 1F1C0 - 1F1FF + 0x0158, 0x0001, 0x0027, 0x015d, 0x0003, 0x0196, 0x019f, 0x01a8, + 0x0002, 0x0199, 0x019c, 0x0001, 0x001d, 0x050b, 0x0001, 0x001d, + 0x0510, 0x0002, 0x01a2, 0x01a5, 0x0001, 0x0000, 0x1f9c, 0x0001, + 0x0000, 0x21e4, 0x0002, 0x01ab, 0x01ae, 0x0001, 0x001d, 0x050b, + 0x0001, 0x001d, 0x0510, 0x0003, 0x01c0, 0x01cb, 0x01b5, 0x0002, + 0x01b8, 0x01bc, 0x0002, 0x0027, 0x0162, 0x0181, 0x0002, 0x0027, + 0x0171, 0x018d, 0x0002, 0x01c3, 0x01c7, 0x0002, 0x0027, 0x0196, + 0x019d, 0x0002, 0x0027, 0x0199, 0x01a0, 0x0002, 0x01ce, 0x01d2, + // Entry 1F200 - 1F23F + 0x0002, 0x0027, 0x0196, 0x019d, 0x0002, 0x0027, 0x0199, 0x01a0, + 0x0004, 0x01e4, 0x01de, 0x01db, 0x01e1, 0x0001, 0x0002, 0x0025, + 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, 0x0002, + 0x08e8, 0x0004, 0x01f5, 0x01ef, 0x01ec, 0x01f2, 0x0001, 0x0000, + 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, + 0x0000, 0x0546, 0x0004, 0x0206, 0x0200, 0x01fd, 0x0203, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0042, 0x024c, 0x0251, 0x0256, 0x025b, + // Entry 1F240 - 1F27F + 0x027a, 0x0299, 0x02b8, 0x02d7, 0x02f6, 0x0315, 0x0334, 0x0353, + 0x0372, 0x0395, 0x03b8, 0x03db, 0x03e0, 0x03e5, 0x03ea, 0x040b, + 0x042c, 0x044d, 0x0452, 0x0457, 0x045c, 0x0461, 0x0466, 0x046b, + 0x0470, 0x0475, 0x047a, 0x0496, 0x04b2, 0x04ce, 0x04ea, 0x0506, + 0x0522, 0x053e, 0x055a, 0x0576, 0x0592, 0x05ae, 0x05ca, 0x05e6, + 0x0602, 0x061e, 0x063a, 0x0656, 0x0672, 0x068e, 0x06aa, 0x06c6, + 0x06cb, 0x06d0, 0x06d5, 0x06f3, 0x0711, 0x072f, 0x074d, 0x076b, + 0x0789, 0x07a7, 0x07c5, 0x07e3, 0x07e8, 0x07ed, 0x0001, 0x024e, + // Entry 1F280 - 1F2BF + 0x0001, 0x0027, 0x01a3, 0x0001, 0x0253, 0x0001, 0x0027, 0x01a7, + 0x0001, 0x0258, 0x0001, 0x0027, 0x01a7, 0x0003, 0x025f, 0x0262, + 0x0267, 0x0001, 0x0027, 0x01ab, 0x0003, 0x0027, 0x01b2, 0x01bb, + 0x01ca, 0x0002, 0x026a, 0x0272, 0x0006, 0x0027, 0x0220, 0x01e2, + 0xffff, 0x01e2, 0x01f7, 0x020b, 0x0006, 0x0027, 0x026f, 0x0234, + 0xffff, 0x0234, 0x0248, 0x025b, 0x0003, 0x027e, 0x0281, 0x0286, + 0x0001, 0x000b, 0x0b8f, 0x0003, 0x0027, 0x01b2, 0x0282, 0x028e, + 0x0002, 0x0289, 0x0291, 0x0006, 0x0027, 0x02a3, 0x02a3, 0xffff, + // Entry 1F2C0 - 1F2FF + 0x02b4, 0x02a3, 0x02c6, 0x0006, 0x0027, 0x02e9, 0x02d8, 0xffff, + 0x02d8, 0x02e9, 0x02f9, 0x0003, 0x029d, 0x02a0, 0x02a5, 0x0001, + 0x000b, 0x0b8f, 0x0003, 0x0027, 0x01b2, 0x0282, 0x028e, 0x0002, + 0x02a8, 0x02b0, 0x0006, 0x0027, 0x0314, 0x030a, 0xffff, 0x030a, + 0x0314, 0x031d, 0x0006, 0x0027, 0x0331, 0x0327, 0xffff, 0x0327, + 0x0331, 0x033a, 0x0003, 0x02bc, 0x02bf, 0x02c4, 0x0001, 0x0027, + 0x0344, 0x0003, 0x0027, 0x034c, 0x0361, 0x0370, 0x0002, 0x02c7, + 0x02cf, 0x0006, 0x0027, 0x0388, 0x0388, 0xffff, 0x0388, 0x0388, + // Entry 1F300 - 1F33F + 0x0388, 0x0006, 0x0027, 0x039d, 0x039d, 0xffff, 0x039d, 0x039d, + 0x039d, 0x0003, 0x02db, 0x02de, 0x02e3, 0x0001, 0x0027, 0x03b1, + 0x0003, 0x0027, 0x034c, 0x0361, 0x0370, 0x0002, 0x02e6, 0x02ee, + 0x0006, 0x0027, 0x0388, 0x0388, 0xffff, 0x0388, 0x0388, 0x0388, + 0x0006, 0x0027, 0x039d, 0x039d, 0xffff, 0x039d, 0x039d, 0x039d, + 0x0003, 0x02fa, 0x02fd, 0x0302, 0x0001, 0x0027, 0x03b1, 0x0003, + 0x0027, 0x034c, 0x0361, 0x0370, 0x0002, 0x0305, 0x030d, 0x0006, + 0x0027, 0x03b9, 0x03b9, 0xffff, 0x03b9, 0x03b9, 0x03b9, 0x0006, + // Entry 1F340 - 1F37F + 0x0027, 0x03c0, 0x03c0, 0xffff, 0x03c0, 0x03c0, 0x03c0, 0x0003, + 0x0319, 0x031c, 0x0321, 0x0001, 0x0027, 0x03c7, 0x0003, 0x0027, + 0x03cb, 0x03dd, 0x03e9, 0x0002, 0x0324, 0x032c, 0x0006, 0x0027, + 0x0410, 0x03fe, 0xffff, 0x03fe, 0x03fe, 0x0410, 0x0006, 0x0027, + 0x0432, 0x0421, 0xffff, 0x0421, 0x0421, 0x0432, 0x0003, 0x0338, + 0x033b, 0x0340, 0x0001, 0x0027, 0x0442, 0x0003, 0x0027, 0x03cb, + 0x03dd, 0x03e9, 0x0002, 0x0343, 0x034b, 0x0006, 0x0027, 0x0410, + 0x03fe, 0xffff, 0x03fe, 0x03fe, 0x0410, 0x0006, 0x0027, 0x0432, + // Entry 1F380 - 1F3BF + 0x0421, 0xffff, 0x0421, 0x0421, 0x0432, 0x0003, 0x0357, 0x035a, + 0x035f, 0x0001, 0x0027, 0x0442, 0x0003, 0x0027, 0x03cb, 0x03dd, + 0x03e9, 0x0002, 0x0362, 0x036a, 0x0006, 0x0027, 0x0450, 0x0446, + 0xffff, 0x0446, 0x0446, 0x0450, 0x0006, 0x0027, 0x0463, 0x0459, + 0xffff, 0x0459, 0x0459, 0x0463, 0x0004, 0x0377, 0x037a, 0x037f, + 0x0392, 0x0001, 0x0027, 0x046c, 0x0003, 0x0027, 0x0476, 0x048e, + 0x04a0, 0x0002, 0x0382, 0x038a, 0x0006, 0x0027, 0x04bb, 0x04bb, + 0xffff, 0x04d2, 0x04ea, 0x04ea, 0x0006, 0x0027, 0x0502, 0x0502, + // Entry 1F3C0 - 1F3FF + 0xffff, 0x0518, 0x052f, 0x052f, 0x0001, 0x0027, 0x0546, 0x0004, + 0x039a, 0x039d, 0x03a2, 0x03b5, 0x0001, 0x0027, 0x0554, 0x0003, + 0x0027, 0x055a, 0x056e, 0x057c, 0x0002, 0x03a5, 0x03ad, 0x0006, + 0x0027, 0x0593, 0x0593, 0xffff, 0x05a6, 0x0593, 0x0593, 0x0006, + 0x0027, 0x05ba, 0x05ba, 0xffff, 0x05ba, 0x05ba, 0x05ba, 0x0001, + 0x0027, 0x0546, 0x0004, 0x03bd, 0x03c0, 0x03c5, 0x03d8, 0x0001, + 0x0027, 0x0554, 0x0003, 0x0027, 0x055a, 0x056e, 0x057c, 0x0002, + 0x03c8, 0x03d0, 0x0006, 0x0027, 0x05cc, 0x05cc, 0xffff, 0x05cc, + // Entry 1F400 - 1F43F + 0x05cc, 0x05cc, 0x0006, 0x0027, 0x05d7, 0x05d7, 0xffff, 0x05d7, + 0x05d7, 0x05d7, 0x0001, 0x0027, 0x0546, 0x0001, 0x03dd, 0x0001, + 0x0027, 0x05e2, 0x0001, 0x03e2, 0x0001, 0x0027, 0x05f5, 0x0001, + 0x03e7, 0x0001, 0x0027, 0x05f5, 0x0003, 0x03ee, 0x03f1, 0x03f8, + 0x0001, 0x0027, 0x0601, 0x0005, 0x0027, 0x0610, 0x0616, 0x061c, + 0x0605, 0x0625, 0x0002, 0x03fb, 0x0403, 0x0006, 0x0027, 0x0633, + 0x0633, 0xffff, 0x0633, 0x0633, 0x0633, 0x0006, 0x0027, 0x0644, + 0x0644, 0xffff, 0x0644, 0x0644, 0x0644, 0x0003, 0x040f, 0x0412, + // Entry 1F440 - 1F47F + 0x0419, 0x0001, 0x0027, 0x0601, 0x0005, 0x0027, 0x0610, 0x0616, + 0x061c, 0x0605, 0x0625, 0x0002, 0x041c, 0x0424, 0x0006, 0x0027, + 0x0633, 0x0633, 0xffff, 0x0633, 0x0633, 0x0633, 0x0006, 0x0027, + 0x0644, 0x0644, 0xffff, 0x0644, 0x0644, 0x0644, 0x0003, 0x0430, + 0x0433, 0x043a, 0x0001, 0x0027, 0x0601, 0x0005, 0x0027, 0x0610, + 0x0616, 0x061c, 0x0605, 0x0625, 0x0002, 0x043d, 0x0445, 0x0006, + 0x0027, 0x0654, 0x0654, 0xffff, 0x0654, 0x0654, 0x0654, 0x0006, + 0x0027, 0x065d, 0x065d, 0xffff, 0x065d, 0x065d, 0x065d, 0x0001, + // Entry 1F480 - 1F4BF + 0x044f, 0x0001, 0x0027, 0x0666, 0x0001, 0x0454, 0x0001, 0x0027, + 0x0676, 0x0001, 0x0459, 0x0001, 0x0027, 0x0676, 0x0001, 0x045e, + 0x0001, 0x0027, 0x0683, 0x0001, 0x0463, 0x0001, 0x0027, 0x0695, + 0x0001, 0x0468, 0x0001, 0x0027, 0x0695, 0x0001, 0x046d, 0x0001, + 0x0027, 0x06a1, 0x0001, 0x0472, 0x0001, 0x0027, 0x06b4, 0x0001, + 0x0477, 0x0001, 0x0027, 0x06b4, 0x0003, 0x0000, 0x047e, 0x0483, + 0x0003, 0x0027, 0x06c6, 0x06dc, 0x06ec, 0x0002, 0x0486, 0x048e, + 0x0006, 0x0027, 0x0705, 0x0705, 0xffff, 0x0720, 0x073c, 0x073c, + // Entry 1F4C0 - 1F4FF + 0x0006, 0x0027, 0x0758, 0x0758, 0xffff, 0x077c, 0x07a1, 0x07a1, + 0x0003, 0x0000, 0x049a, 0x049f, 0x0003, 0x0027, 0x07c6, 0x07d9, + 0x07e6, 0x0002, 0x04a2, 0x04aa, 0x0006, 0x0027, 0x07fc, 0x07fc, + 0xffff, 0x0814, 0x082d, 0x082d, 0x0006, 0x0027, 0x0846, 0x0846, + 0xffff, 0x0866, 0x0887, 0x0887, 0x0003, 0x0000, 0x04b6, 0x04bb, + 0x0003, 0x0027, 0x08a8, 0x08ba, 0x08c6, 0x0002, 0x04be, 0x04c6, + 0x0006, 0x0027, 0x08d8, 0x08d8, 0xffff, 0x08e3, 0x08e3, 0x08ef, + 0x0006, 0x0027, 0x08fb, 0x08fb, 0xffff, 0x090d, 0x090d, 0x0920, + // Entry 1F500 - 1F53F + 0x0003, 0x0000, 0x04d2, 0x04d7, 0x0003, 0x0027, 0x0933, 0x0945, + 0x0951, 0x0002, 0x04da, 0x04e2, 0x0006, 0x0027, 0x0966, 0x0966, + 0xffff, 0x097d, 0x0995, 0x0995, 0x0006, 0x0027, 0x09ad, 0x09ad, + 0xffff, 0x09cd, 0x09ee, 0x09ee, 0x0003, 0x0000, 0x04ee, 0x04f3, + 0x0003, 0x0027, 0x0933, 0x0945, 0x0951, 0x0002, 0x04f6, 0x04fe, + 0x0006, 0x0027, 0x0966, 0x0966, 0xffff, 0x097d, 0x0995, 0x0995, + 0x0006, 0x0027, 0x09ad, 0x09ad, 0xffff, 0x09cd, 0x09ee, 0x09ee, + 0x0003, 0x0000, 0x050a, 0x050f, 0x0003, 0x0027, 0x0933, 0x0945, + // Entry 1F540 - 1F57F + 0x0a0f, 0x0002, 0x0512, 0x051a, 0x0006, 0x0027, 0x0a21, 0x0a21, + 0xffff, 0x0a21, 0x0a21, 0x0a21, 0x0006, 0x0027, 0x0a2b, 0x0a2b, + 0xffff, 0x0a2b, 0x0a2b, 0x0a2b, 0x0003, 0x0000, 0x0526, 0x052b, + 0x0003, 0x0027, 0x0a3c, 0x0a51, 0x0a60, 0x0002, 0x052e, 0x0536, + 0x0006, 0x0027, 0x0a78, 0x0a78, 0xffff, 0x0a91, 0x0aab, 0x0aab, + 0x0006, 0x0027, 0x0ac5, 0x0ac5, 0xffff, 0x0ae6, 0x0b08, 0x0b08, + 0x0003, 0x0000, 0x0542, 0x0547, 0x0003, 0x0027, 0x0a3c, 0x0a51, + 0x0a60, 0x0002, 0x054a, 0x0552, 0x0006, 0x0027, 0x0a78, 0x0a78, + // Entry 1F580 - 1F5BF + 0xffff, 0x0a91, 0x0aab, 0x0aab, 0x0006, 0x0027, 0x0ac5, 0x0ac5, + 0xffff, 0x0ae6, 0x0b08, 0x0b08, 0x0003, 0x0000, 0x055e, 0x0563, + 0x0003, 0x0027, 0x0a3c, 0x0a51, 0x0b2a, 0x0002, 0x0566, 0x056e, + 0x0006, 0x0027, 0x0b4c, 0x0b3f, 0xffff, 0x0b3f, 0x0b3f, 0x0b4c, + 0x0006, 0x0027, 0x0b6c, 0x0b58, 0xffff, 0x0b58, 0x0b58, 0x0b6c, + 0x0003, 0x0000, 0x057a, 0x057f, 0x0003, 0x0027, 0x0b7f, 0x0b97, + 0x0ba9, 0x0002, 0x0582, 0x058a, 0x0006, 0x0027, 0x0bc4, 0x0bc4, + 0xffff, 0x0be1, 0x0bff, 0x0bff, 0x0006, 0x0027, 0x0c1d, 0x0c1d, + // Entry 1F5C0 - 1F5FF + 0xffff, 0x0c41, 0x0c66, 0x0c66, 0x0003, 0x0000, 0x0596, 0x059b, + 0x0003, 0x0027, 0x0c8b, 0x0ca0, 0x0caf, 0x0002, 0x059e, 0x05a6, + 0x0006, 0x0027, 0x0bc4, 0x0bc4, 0xffff, 0x0be1, 0x0bff, 0x0bff, + 0x0006, 0x0027, 0x0c1d, 0x0c1d, 0xffff, 0x0c41, 0x0c66, 0x0c66, + 0x0003, 0x0000, 0x05b2, 0x05b7, 0x0003, 0x0027, 0x0c8b, 0x0ca0, + 0x0cc7, 0x0002, 0x05ba, 0x05c2, 0x0006, 0x0027, 0x0cfb, 0x0cdb, + 0xffff, 0x0cdb, 0x0cdb, 0x0ceb, 0x0006, 0x0027, 0x0d38, 0x0d0a, + 0xffff, 0x0d0a, 0x0d0a, 0x0d21, 0x0003, 0x0000, 0x05ce, 0x05d3, + // Entry 1F600 - 1F63F + 0x0003, 0x0027, 0x0d4e, 0x0d66, 0x0d78, 0x0002, 0x05d6, 0x05de, + 0x0006, 0x0027, 0x0d93, 0x0d93, 0xffff, 0x0db0, 0x0dce, 0x0dce, + 0x0006, 0x0027, 0x0dec, 0x0dec, 0xffff, 0x0e0d, 0x0e2f, 0x0e2f, + 0x0003, 0x0000, 0x05ea, 0x05ef, 0x0003, 0x0027, 0x0e51, 0x0e65, + 0x0e73, 0x0002, 0x05f2, 0x05fa, 0x0006, 0x0027, 0x0d93, 0x0d93, + 0xffff, 0x0db0, 0x0dce, 0x0dce, 0x0006, 0x0027, 0x0dec, 0x0dec, + 0xffff, 0x0e0d, 0x0e2f, 0x0e2f, 0x0003, 0x0000, 0x0606, 0x060b, + 0x0003, 0x0027, 0x0e51, 0x0e65, 0x0e8a, 0x0002, 0x060e, 0x0616, + // Entry 1F640 - 1F67F + 0x0006, 0x0027, 0x0e9e, 0x0e9e, 0xffff, 0x0eae, 0x0eae, 0x0ebf, + 0x0006, 0x0027, 0x0ed0, 0x0ed0, 0xffff, 0x0ee7, 0x0ee7, 0x0eff, + 0x0003, 0x0000, 0x0622, 0x0627, 0x0003, 0x0027, 0x0f17, 0x0f2a, + 0x0f37, 0x0002, 0x062a, 0x0632, 0x0006, 0x0027, 0x0f4d, 0x0f4d, + 0xffff, 0x0f65, 0x0f7e, 0x0f7e, 0x0006, 0x0027, 0x0f97, 0x0f97, + 0xffff, 0x0fb8, 0x0fda, 0x0fda, 0x0003, 0x0000, 0x063e, 0x0643, + 0x0003, 0x0027, 0x0f17, 0x0f2a, 0x0f37, 0x0002, 0x0646, 0x064e, + 0x0006, 0x0027, 0x0f4d, 0x0f4d, 0xffff, 0x0f65, 0x0f7e, 0x0f7e, + // Entry 1F680 - 1F6BF + 0x0006, 0x0027, 0x0f97, 0x0f97, 0xffff, 0x0fb8, 0x0fda, 0x0fda, + 0x0003, 0x0000, 0x065a, 0x065f, 0x0003, 0x0027, 0x0f17, 0x0f2a, + 0x0ffc, 0x0002, 0x0662, 0x066a, 0x0006, 0x0027, 0x100f, 0x100f, + 0xffff, 0x100f, 0x100f, 0x100f, 0x0006, 0x0027, 0x101a, 0x101a, + 0xffff, 0x101a, 0x101a, 0x101a, 0x0003, 0x0000, 0x0676, 0x067b, + 0x0003, 0x0027, 0x102c, 0x1041, 0x1050, 0x0002, 0x067e, 0x0686, + 0x0006, 0x0027, 0x1068, 0x1068, 0xffff, 0x1082, 0x109d, 0x109d, + 0x0006, 0x0027, 0x10b8, 0x10b8, 0xffff, 0x10db, 0x10ff, 0x10ff, + // Entry 1F6C0 - 1F6FF + 0x0003, 0x0000, 0x0692, 0x0697, 0x0003, 0x0027, 0x1123, 0x1136, + 0x1143, 0x0002, 0x069a, 0x06a2, 0x0006, 0x0027, 0x1068, 0x1068, + 0xffff, 0x1082, 0x109d, 0x109d, 0x0006, 0x0027, 0x10b8, 0x10b8, + 0xffff, 0x10db, 0x10ff, 0x10ff, 0x0003, 0x0000, 0x06ae, 0x06b3, + 0x0003, 0x0027, 0x1159, 0x116b, 0x1177, 0x0002, 0x06b6, 0x06be, + 0x0006, 0x0027, 0x1189, 0x1189, 0xffff, 0x1196, 0x1196, 0x1189, + 0x0006, 0x0027, 0x11a4, 0x11a4, 0xffff, 0x11b8, 0x11b8, 0x11a4, + 0x0001, 0x06c8, 0x0001, 0x001d, 0x0524, 0x0001, 0x06cd, 0x0001, + // Entry 1F700 - 1F73F + 0x001d, 0x0524, 0x0001, 0x06d2, 0x0001, 0x001d, 0x0524, 0x0003, + 0x06d9, 0x06dc, 0x06e0, 0x0001, 0x0027, 0x11cd, 0x0002, 0x0027, + 0xffff, 0x11d2, 0x0002, 0x06e3, 0x06eb, 0x0006, 0x0027, 0x11de, + 0x11de, 0xffff, 0x11de, 0x11fa, 0x1218, 0x0006, 0x0027, 0x1237, + 0x1237, 0xffff, 0x1237, 0x1252, 0x126f, 0x0003, 0x06f7, 0x06fa, + 0x06fe, 0x0001, 0x0027, 0x128d, 0x0002, 0x0027, 0xffff, 0x11d2, + 0x0002, 0x0701, 0x0709, 0x0006, 0x0027, 0x1292, 0x1292, 0xffff, + 0x1292, 0x12a4, 0x12b8, 0x0006, 0x0027, 0x12cd, 0x12cd, 0xffff, + // Entry 1F740 - 1F77F + 0x12cd, 0x12de, 0x12f1, 0x0003, 0x0715, 0x0718, 0x071c, 0x0001, + 0x0000, 0x2010, 0x0002, 0x0027, 0xffff, 0x11d2, 0x0002, 0x071f, + 0x0727, 0x0006, 0x0027, 0x1305, 0x1305, 0xffff, 0x1305, 0x1305, + 0x1305, 0x0006, 0x0027, 0x130c, 0x130c, 0xffff, 0x130c, 0x130c, + 0x130c, 0x0003, 0x0733, 0x0736, 0x073a, 0x0001, 0x0027, 0x1313, + 0x0002, 0x0027, 0xffff, 0x131d, 0x0002, 0x073d, 0x0745, 0x0006, + 0x0027, 0x132e, 0x132e, 0xffff, 0x132e, 0x132e, 0x132e, 0x0006, + 0x0027, 0x1345, 0x1345, 0xffff, 0x1345, 0x1345, 0x1345, 0x0003, + // Entry 1F780 - 1F7BF + 0x0751, 0x0754, 0x0758, 0x0001, 0x0027, 0x135b, 0x0002, 0x0027, + 0xffff, 0x131d, 0x0002, 0x075b, 0x0763, 0x0006, 0x0027, 0x1362, + 0x1362, 0xffff, 0x1362, 0x1362, 0x1362, 0x0006, 0x0027, 0x1376, + 0x1376, 0xffff, 0x1376, 0x1376, 0x1376, 0x0003, 0x076f, 0x0772, + 0x0776, 0x0001, 0x0000, 0x1f96, 0x0002, 0x0027, 0xffff, 0x131d, + 0x0002, 0x0779, 0x0781, 0x0006, 0x0027, 0x1389, 0x1389, 0xffff, + 0x1389, 0x1389, 0x1389, 0x0006, 0x0027, 0x1390, 0x1390, 0xffff, + 0x1390, 0x1390, 0x1390, 0x0003, 0x078d, 0x0790, 0x0794, 0x0001, + // Entry 1F7C0 - 1F7FF + 0x0027, 0x1397, 0x0002, 0x0027, 0xffff, 0x139f, 0x0002, 0x0797, + 0x079f, 0x0006, 0x0027, 0x13a5, 0x13a5, 0xffff, 0x13ba, 0x13ba, + 0x13a5, 0x0006, 0x0027, 0x13d0, 0x13d0, 0xffff, 0x13e4, 0x13e4, + 0x13d0, 0x0003, 0x07ab, 0x07ae, 0x07b2, 0x0001, 0x0027, 0x13f9, + 0x0002, 0x0027, 0xffff, 0x139f, 0x0002, 0x07b5, 0x07bd, 0x0006, + 0x0027, 0x13ff, 0x13ff, 0xffff, 0x1412, 0x1412, 0x13ff, 0x0006, + 0x0027, 0x1426, 0x1426, 0xffff, 0x1438, 0x1438, 0x1426, 0x0003, + 0x07c9, 0x07cc, 0x07d0, 0x0001, 0x0000, 0x2002, 0x0002, 0x0027, + // Entry 1F800 - 1F83F + 0xffff, 0x139f, 0x0002, 0x07d3, 0x07db, 0x0006, 0x0026, 0x02ce, + 0x02ce, 0xffff, 0x02ce, 0x02ce, 0x02ce, 0x0006, 0x0000, 0x1dbb, + 0x1dbb, 0xffff, 0x1dbb, 0x1dbb, 0x1dbb, 0x0001, 0x07e5, 0x0001, + 0x0027, 0x144b, 0x0001, 0x07ea, 0x0001, 0x0027, 0x1455, 0x0001, + 0x07ef, 0x0001, 0x0027, 0x1455, 0x0004, 0x07f7, 0x07fc, 0x0801, + 0x0818, 0x0003, 0x0000, 0x1dc7, 0x25ef, 0x25f6, 0x0003, 0x0000, + 0x1de0, 0x25fa, 0x2603, 0x0002, 0x0810, 0x0804, 0x0003, 0x0000, + 0x080b, 0x0808, 0x0001, 0x0027, 0x145b, 0x0003, 0x0027, 0xffff, + // Entry 1F840 - 1F87F + 0x1470, 0x148e, 0x0002, 0x0000, 0x0813, 0x0003, 0x0027, 0xffff, + 0x148a, 0x14ac, 0x0002, 0x09ff, 0x081b, 0x0003, 0x081f, 0x095f, + 0x08bf, 0x009e, 0x0027, 0xffff, 0xffff, 0xffff, 0xffff, 0x1545, + 0x15a2, 0x160e, 0x1659, 0x1695, 0x16d7, 0x171f, 0x1787, 0x17bd, + 0x1856, 0x1898, 0x18e9, 0x1952, 0x199d, 0x19e8, 0x1a42, 0x1ab7, + 0x1b1d, 0x1b80, 0x1bda, 0x1c19, 0xffff, 0xffff, 0x1c8b, 0xffff, + 0x1ce4, 0xffff, 0x1d56, 0x1d8f, 0x1dc8, 0x1e04, 0xffff, 0xffff, + 0x1e6d, 0x1eb2, 0x1f03, 0xffff, 0xffff, 0xffff, 0x1f81, 0xffff, + // Entry 1F880 - 1F8BF + 0x1fe5, 0x203c, 0xffff, 0x20ba, 0x211a, 0x217a, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2218, 0xffff, 0xffff, 0x2284, 0x22ed, 0xffff, + 0xffff, 0x2398, 0x23ec, 0x242b, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x24ea, 0x2532, 0x256b, 0x25a4, 0x25ec, 0xffff, + 0xffff, 0x2692, 0xffff, 0x26de, 0xffff, 0xffff, 0x275b, 0xffff, + 0x27e7, 0xffff, 0xffff, 0xffff, 0xffff, 0x2878, 0xffff, 0x28e1, + 0x2950, 0x29ce, 0x2a13, 0xffff, 0xffff, 0xffff, 0x2a6d, 0x2ac7, + 0x2b21, 0xffff, 0xffff, 0x2b90, 0x2c13, 0x2c58, 0x2c88, 0xffff, + // Entry 1F8C0 - 1F8FF + 0xffff, 0x2cfd, 0x2d39, 0x2d75, 0xffff, 0x2dfa, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2ef4, 0x2f33, 0x2f6c, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3028, 0xffff, 0xffff, + 0x308f, 0xffff, 0x30ce, 0xffff, 0x313c, 0x3172, 0x31d8, 0xffff, + 0x3223, 0x3268, 0xffff, 0xffff, 0xffff, 0x32e4, 0x3320, 0xffff, + 0xffff, 0x14b1, 0x15d8, 0x17ed, 0x1820, 0xffff, 0xffff, 0x279a, + 0x2e93, 0x009e, 0x0027, 0x14e1, 0x14f6, 0x150a, 0x1522, 0x155c, + 0x15ac, 0x161f, 0x1665, 0x16a3, 0x16e7, 0x1735, 0x1791, 0x17c5, + // Entry 1F900 - 1F93F + 0x1864, 0x18ab, 0x1904, 0x1963, 0x19ae, 0x19fe, 0x1a61, 0x1ad1, + 0x1b36, 0x1b96, 0x1be7, 0x1c2d, 0x1c6d, 0x1c7d, 0x1c99, 0x1ccd, + 0x1cf2, 0x1d3a, 0x1d61, 0x1d9a, 0x1dd4, 0x1e12, 0x1e46, 0x1e5b, + 0x1e7c, 0x1ec3, 0x1f0d, 0x1f39, 0x1f4d, 0x1f6e, 0x1f96, 0x1fd8, + 0x1ff7, 0x2052, 0x209f, 0x20cf, 0x2132, 0x2185, 0x21b3, 0x21c9, + 0x21f5, 0x220c, 0x2227, 0x225d, 0x226d, 0x229f, 0x2307, 0x236a, + 0x238a, 0x23ac, 0x23f9, 0x2433, 0x245b, 0x2476, 0x248d, 0x249e, + 0x24b5, 0x24d0, 0x24fa, 0x253d, 0x2576, 0x25b4, 0x2609, 0x265b, + // Entry 1F940 - 1F97F + 0x2677, 0x26a0, 0x26d4, 0x26ed, 0x2723, 0x2746, 0x2768, 0x27d0, + 0x27f3, 0x2823, 0x2833, 0x284a, 0x2863, 0x288c, 0x28cc, 0x28fe, + 0x2972, 0x29dd, 0x2a1e, 0x2a4c, 0x2a58, 0x2a62, 0x2a83, 0x2add, + 0x2b35, 0x2b75, 0x2b7d, 0x2ba8, 0x2c22, 0x2c60, 0x2c9a, 0x2cd6, + 0x2ce8, 0x2d09, 0x2d45, 0x2d91, 0x2de1, 0x2e16, 0x2e66, 0x2e7a, + 0x2e86, 0x2ed2, 0x2ede, 0x2f01, 0x2f3e, 0x2f76, 0x2fa2, 0x2fb2, + 0x2fcf, 0x2fe5, 0x2ffa, 0x3006, 0x301a, 0x3033, 0x3061, 0x307a, + 0x3099, 0x30c5, 0x30e7, 0x3131, 0x3146, 0x318c, 0x31e4, 0x3214, + // Entry 1F980 - 1F9BF + 0x3232, 0x3275, 0x32a7, 0x32bc, 0x32cc, 0x32f0, 0x3331, 0x2353, + 0x2bf0, 0x14b9, 0x15e2, 0x17f6, 0x182a, 0x1d26, 0x2737, 0x27a4, + 0x2ea0, 0x009e, 0x0027, 0xffff, 0xffff, 0xffff, 0xffff, 0x1581, + 0x15c4, 0x163e, 0x167f, 0x16bf, 0x1705, 0x1759, 0x17a9, 0x17db, + 0x1880, 0x18cc, 0x192d, 0x1982, 0x19cd, 0x1a22, 0x1a8e, 0x1af9, + 0x1b5d, 0x1bba, 0x1c02, 0x1c4f, 0xffff, 0xffff, 0x1cb5, 0xffff, + 0x1d0e, 0xffff, 0x1d7a, 0x1db3, 0x1dee, 0x1e2e, 0xffff, 0xffff, + 0x1e99, 0x1ee2, 0x1f25, 0xffff, 0xffff, 0xffff, 0x1fb9, 0xffff, + // Entry 1F9C0 - 1F9FF + 0x2017, 0x2076, 0xffff, 0x20f2, 0x2158, 0x219e, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2244, 0xffff, 0xffff, 0x22c8, 0x232f, 0xffff, + 0xffff, 0x23ce, 0x2414, 0x2449, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2518, 0x2556, 0x258f, 0x25d2, 0x2634, 0xffff, + 0xffff, 0x26bc, 0xffff, 0x270a, 0xffff, 0xffff, 0x2783, 0xffff, + 0x280d, 0xffff, 0xffff, 0xffff, 0xffff, 0x28ae, 0xffff, 0x2929, + 0x29a2, 0x29fa, 0x2a37, 0xffff, 0xffff, 0xffff, 0x2aa7, 0x2b01, + 0x2b57, 0xffff, 0xffff, 0x2bce, 0x2c3f, 0x2c76, 0x2cba, 0xffff, + // Entry 1FA00 - 1FA3F + 0xffff, 0x2d23, 0x2d5f, 0x2dbb, 0xffff, 0x2e40, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2f1c, 0x2f57, 0x2f8e, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x304c, 0xffff, 0xffff, + 0x30b1, 0xffff, 0x310e, 0xffff, 0x315e, 0x31b4, 0x31fe, 0xffff, + 0x324f, 0x3290, 0xffff, 0xffff, 0xffff, 0x330a, 0x3350, 0xffff, + 0xffff, 0x14cf, 0x15fa, 0x180d, 0x1842, 0xffff, 0xffff, 0x27bc, + 0x2ebb, 0x0003, 0x0a03, 0x0a72, 0x0a36, 0x0031, 0x0027, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 1FA40 - 1FA7F + 0xffff, 0x1779, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2033, 0x2096, 0xffff, 0x2111, + 0x003a, 0x0027, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x177d, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 1FA80 - 1FABF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2033, + 0x2096, 0xffff, 0x2111, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2280, 0x0031, 0x0027, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1782, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 1FAC0 - 1FAFF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2037, 0x209a, 0xffff, 0x2115, 0x0003, + 0x0004, 0x01ff, 0x0794, 0x0012, 0x0017, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0020, 0x004b, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01cf, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9006, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0029, 0x0000, 0x003a, + // Entry 1FB00 - 1FB3F + 0x0004, 0x0037, 0x0031, 0x002e, 0x0034, 0x0001, 0x0006, 0x000d, + 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0000, + 0x240c, 0x0004, 0x0048, 0x0042, 0x003f, 0x0045, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0008, 0x0054, 0x00b9, 0x0110, 0x0145, 0x0186, + 0x019c, 0x01ad, 0x01be, 0x0002, 0x0057, 0x0088, 0x0003, 0x005b, + 0x006a, 0x0079, 0x000d, 0x0028, 0xffff, 0x0000, 0x0005, 0x000b, + 0x0011, 0x0016, 0x001c, 0x0022, 0x0027, 0x002d, 0x0032, 0x0038, + // Entry 1FB40 - 1FB7F + 0x003d, 0x000d, 0x0000, 0xffff, 0x2364, 0x2289, 0x2579, 0x2289, + 0x25ed, 0x260c, 0x204d, 0x2296, 0x257d, 0x236e, 0x257d, 0x236e, + 0x000d, 0x0028, 0xffff, 0x0043, 0x0054, 0x0062, 0x006e, 0x007c, + 0x008b, 0x0099, 0x00a5, 0x00b4, 0x00c3, 0x00d1, 0x00e0, 0x0003, + 0x008c, 0x009b, 0x00aa, 0x000d, 0x0028, 0xffff, 0x0000, 0x0005, + 0x000b, 0x0011, 0x0016, 0x001c, 0x0022, 0x0027, 0x002d, 0x0032, + 0x0038, 0x003d, 0x000d, 0x0000, 0xffff, 0x2364, 0x2289, 0x2579, + 0x2289, 0x25ed, 0x260c, 0x204d, 0x2296, 0x257d, 0x236e, 0x257d, + // Entry 1FB80 - 1FBBF + 0x236e, 0x000d, 0x0028, 0xffff, 0x00f0, 0x00fe, 0x0109, 0x0112, + 0x011d, 0x0129, 0x0137, 0x0143, 0x0150, 0x015d, 0x0169, 0x0176, + 0x0002, 0x00bc, 0x00e6, 0x0005, 0x00c2, 0x00cb, 0x00dd, 0x0000, + 0x00d4, 0x0007, 0x0028, 0x0184, 0x0188, 0x018c, 0x0190, 0x0194, + 0x0198, 0x019c, 0x0007, 0x0000, 0x236e, 0x2296, 0x2579, 0x25ed, + 0x241f, 0x19c7, 0x257d, 0x0007, 0x0028, 0x01a0, 0x01a4, 0x01a7, + 0x01ab, 0x01ae, 0x01b1, 0x01b4, 0x0007, 0x0028, 0x01b7, 0x01c4, + 0x01cc, 0x01d5, 0x01df, 0x01e9, 0x01f2, 0x0005, 0x00ec, 0x00f5, + // Entry 1FBC0 - 1FBFF + 0x0107, 0x0000, 0x00fe, 0x0007, 0x0028, 0x0184, 0x0188, 0x018c, + 0x0190, 0x0194, 0x0198, 0x019c, 0x0007, 0x0000, 0x236e, 0x2296, + 0x2579, 0x25ed, 0x241f, 0x19c7, 0x257d, 0x0007, 0x0028, 0x01a0, + 0x01a4, 0x01a7, 0x01ab, 0x01ae, 0x01b1, 0x01b4, 0x0007, 0x0028, + 0x01b7, 0x01c4, 0x01cc, 0x01d5, 0x01df, 0x01e9, 0x01f2, 0x0002, + 0x0113, 0x012c, 0x0003, 0x0117, 0x011e, 0x0125, 0x0005, 0x0028, + 0xffff, 0x01fe, 0x0201, 0x0204, 0x0207, 0x0005, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0028, 0xffff, 0x020a, + // Entry 1FC00 - 1FC3F + 0x0217, 0x0224, 0x0230, 0x0003, 0x0130, 0x0137, 0x013e, 0x0005, + 0x0028, 0xffff, 0x01fe, 0x0201, 0x0204, 0x0207, 0x0005, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0028, 0xffff, + 0x020a, 0x0217, 0x0224, 0x0230, 0x0002, 0x0148, 0x0167, 0x0003, + 0x014c, 0x0155, 0x015e, 0x0002, 0x014f, 0x0152, 0x0001, 0x0000, + 0x1f9a, 0x0001, 0x0000, 0x2006, 0x0002, 0x0158, 0x015b, 0x0001, + 0x0000, 0x1f9a, 0x0001, 0x0000, 0x2006, 0x0002, 0x0161, 0x0164, + 0x0001, 0x0000, 0x1f9a, 0x0001, 0x0000, 0x2006, 0x0003, 0x016b, + // Entry 1FC40 - 1FC7F + 0x0174, 0x017d, 0x0002, 0x016e, 0x0171, 0x0001, 0x0000, 0x1f9a, + 0x0001, 0x0000, 0x2006, 0x0002, 0x0177, 0x017a, 0x0001, 0x0000, + 0x1f9a, 0x0001, 0x0000, 0x2006, 0x0002, 0x0180, 0x0183, 0x0001, + 0x0000, 0x1f9a, 0x0001, 0x0000, 0x2006, 0x0003, 0x0190, 0x0196, + 0x018a, 0x0001, 0x018c, 0x0002, 0x0028, 0x023d, 0x024a, 0x0001, + 0x0192, 0x0002, 0x0027, 0x0196, 0x019d, 0x0001, 0x0198, 0x0002, + 0x0000, 0x2246, 0x241f, 0x0004, 0x01aa, 0x01a4, 0x01a1, 0x01a7, + 0x0001, 0x0028, 0x025e, 0x0001, 0x0028, 0x0271, 0x0001, 0x0002, + // Entry 1FC80 - 1FCBF + 0x003c, 0x0001, 0x0002, 0x08e8, 0x0004, 0x01bb, 0x01b5, 0x01b2, + 0x01b8, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, + 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, 0x01cc, 0x01c6, + 0x01c3, 0x01c9, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x01d8, 0x0000, 0x0000, 0x01ee, 0x0003, + 0x01e2, 0x01e8, 0x01dc, 0x0001, 0x01de, 0x0002, 0x0028, 0x027e, + 0x028e, 0x0001, 0x01e4, 0x0002, 0x0028, 0x0297, 0x028e, 0x0001, + // Entry 1FCC0 - 1FCFF + 0x01ea, 0x0002, 0x0028, 0x0297, 0x028e, 0x0004, 0x01fc, 0x01f6, + 0x01f3, 0x01f9, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0042, 0x0242, + 0x0247, 0x024c, 0x0251, 0x026f, 0x028d, 0x02ab, 0x02c8, 0x02e5, + 0x0302, 0x031f, 0x033c, 0x0359, 0x037a, 0x039b, 0x03bc, 0x03c1, + 0x03c6, 0x03cb, 0x03eb, 0x040b, 0x042b, 0x0430, 0x0435, 0x043a, + 0x043f, 0x0444, 0x0449, 0x044e, 0x0453, 0x0458, 0x0472, 0x048c, + 0x04a6, 0x04c0, 0x04da, 0x04f4, 0x050e, 0x0528, 0x0542, 0x055c, + // Entry 1FD00 - 1FD3F + 0x0576, 0x0590, 0x05aa, 0x05c4, 0x05de, 0x05f8, 0x0612, 0x062c, + 0x0646, 0x0660, 0x067a, 0x067f, 0x0684, 0x0689, 0x06a5, 0x06c1, + 0x06dd, 0x06f9, 0x0715, 0x0731, 0x074d, 0x0769, 0x0785, 0x078a, + 0x078f, 0x0001, 0x0244, 0x0001, 0x0028, 0x029e, 0x0001, 0x0249, + 0x0001, 0x0028, 0x029e, 0x0001, 0x024e, 0x0001, 0x0028, 0x02a3, + 0x0003, 0x0255, 0x0258, 0x025e, 0x0001, 0x0028, 0x02a7, 0x0004, + 0x0028, 0x02bf, 0x02c9, 0x02d5, 0x02b0, 0x0002, 0x0261, 0x0268, + 0x0005, 0x0028, 0x0319, 0x02e6, 0xffff, 0x02e6, 0x02fd, 0x0005, + // Entry 1FD40 - 1FD7F + 0x0028, 0x0361, 0x032f, 0xffff, 0x032f, 0x0345, 0x0003, 0x0273, + 0x0276, 0x027c, 0x0001, 0x0028, 0x0376, 0x0004, 0x0028, 0x02bf, + 0x02c9, 0x02d5, 0x02b0, 0x0002, 0x027f, 0x0286, 0x0005, 0x0028, + 0x038a, 0x037c, 0xffff, 0x037c, 0x038a, 0x0005, 0x0028, 0x03a4, + 0x0397, 0xffff, 0x0397, 0x03a4, 0x0003, 0x0291, 0x0294, 0x029a, + 0x0001, 0x000b, 0x0b8f, 0x0004, 0x0028, 0x03ba, 0x03c2, 0x03c9, + 0x03b0, 0x0002, 0x029d, 0x02a4, 0x0005, 0x0027, 0x0314, 0x030a, + 0xffff, 0x030a, 0x0314, 0x0005, 0x0027, 0x0331, 0x0327, 0xffff, + // Entry 1FD80 - 1FDBF + 0x0327, 0x0331, 0x0003, 0x02af, 0x02b2, 0x02b7, 0x0001, 0x0028, + 0x03d5, 0x0003, 0x0028, 0x03de, 0x03f5, 0x0405, 0x0002, 0x02ba, + 0x02c1, 0x0005, 0x0028, 0x0445, 0x0416, 0xffff, 0x0416, 0x042d, + 0x0005, 0x0028, 0x048a, 0x045b, 0xffff, 0x045b, 0x0472, 0x0003, + 0x02cc, 0x02cf, 0x02d4, 0x0001, 0x0028, 0x04a0, 0x0003, 0x0028, + 0x04a7, 0x04bb, 0x04c9, 0x0002, 0x02d7, 0x02de, 0x0005, 0x0028, + 0x04e7, 0x04d8, 0xffff, 0x04d8, 0x04e7, 0x0005, 0x0028, 0x0503, + 0x04f5, 0xffff, 0x04f5, 0x0503, 0x0003, 0x02e9, 0x02ec, 0x02f1, + // Entry 1FDC0 - 1FDFF + 0x0001, 0x0028, 0x0510, 0x0003, 0x0028, 0x0513, 0x051a, 0x0524, + 0x0002, 0x02f4, 0x02fb, 0x0005, 0x0028, 0x052c, 0x052c, 0xffff, + 0x052c, 0x052c, 0x0005, 0x0028, 0x0534, 0x0534, 0xffff, 0x0534, + 0x0534, 0x0003, 0x0306, 0x0309, 0x030e, 0x0001, 0x0028, 0x053c, + 0x0003, 0x0028, 0x0542, 0x0556, 0x0563, 0x0002, 0x0311, 0x0318, + 0x0005, 0x0028, 0x059b, 0x0571, 0xffff, 0x0571, 0x0586, 0x0005, + 0x0028, 0x05d6, 0x05af, 0xffff, 0x05af, 0x05c2, 0x0003, 0x0323, + 0x0326, 0x032b, 0x0001, 0x0028, 0x053c, 0x0003, 0x0028, 0x05e8, + // Entry 1FE00 - 1FE3F + 0x0556, 0x0563, 0x0002, 0x032e, 0x0335, 0x0005, 0x0028, 0x060a, + 0x05fb, 0xffff, 0x05fb, 0x060a, 0x0005, 0x0028, 0x0626, 0x0618, + 0xffff, 0x0618, 0x0626, 0x0003, 0x0340, 0x0343, 0x0348, 0x0001, + 0x0028, 0x0633, 0x0003, 0x0028, 0x0638, 0x0641, 0x064d, 0x0002, + 0x034b, 0x0352, 0x0005, 0x0028, 0x0662, 0x0657, 0xffff, 0x0657, + 0x0662, 0x0005, 0x0028, 0x0677, 0x066c, 0xffff, 0x066c, 0x0677, + 0x0004, 0x035e, 0x0361, 0x0366, 0x0377, 0x0001, 0x0028, 0x0681, + 0x0003, 0x0028, 0x068b, 0x06a5, 0x06b8, 0x0002, 0x0369, 0x0370, + // Entry 1FE40 - 1FE7F + 0x0005, 0x0028, 0x06ca, 0x06ca, 0xffff, 0x06e1, 0x06f9, 0x0005, + 0x0028, 0x0713, 0x0713, 0xffff, 0x0729, 0x0740, 0x0001, 0x0028, + 0x0759, 0x0004, 0x037f, 0x0382, 0x0387, 0x0398, 0x0001, 0x0028, + 0x0770, 0x0003, 0x0028, 0x0778, 0x078a, 0x079b, 0x0002, 0x038a, + 0x0391, 0x0005, 0x0028, 0x07bb, 0x07ab, 0xffff, 0x07ab, 0x07bb, + 0x0005, 0x0028, 0x07d9, 0x07ca, 0xffff, 0x07ca, 0x07d9, 0x0001, + 0x0028, 0x0759, 0x0004, 0x03a0, 0x03a3, 0x03a8, 0x03b9, 0x0001, + 0x0028, 0x07e7, 0x0003, 0x0028, 0x07eb, 0x07f3, 0x0800, 0x0002, + // Entry 1FE80 - 1FEBF + 0x03ab, 0x03b2, 0x0005, 0x0028, 0x0809, 0x0809, 0xffff, 0x0809, + 0x0809, 0x0005, 0x0028, 0x0812, 0x0812, 0xffff, 0x0812, 0x0812, + 0x0001, 0x0028, 0x0759, 0x0001, 0x03be, 0x0001, 0x0028, 0x081b, + 0x0001, 0x03c3, 0x0001, 0x0028, 0x0831, 0x0001, 0x03c8, 0x0001, + 0x0028, 0x0831, 0x0003, 0x03cf, 0x03d2, 0x03da, 0x0001, 0x0028, + 0x083f, 0x0006, 0x0028, 0x0852, 0x0859, 0x0862, 0x0845, 0x086e, + 0x0877, 0x0002, 0x03dd, 0x03e4, 0x0005, 0x0028, 0x0883, 0x0883, + 0xffff, 0x0883, 0x0896, 0x0005, 0x0028, 0x08ad, 0x08ad, 0xffff, + // Entry 1FEC0 - 1FEFF + 0x08ad, 0x08bf, 0x0003, 0x03ef, 0x03f2, 0x03fa, 0x0001, 0x0028, + 0x08d5, 0x0006, 0x0028, 0x0852, 0x0859, 0x0862, 0x0845, 0x086e, + 0x0877, 0x0002, 0x03fd, 0x0404, 0x0005, 0x0028, 0x08d9, 0x08d9, + 0xffff, 0x08d9, 0x08e4, 0x0005, 0x0028, 0x08f0, 0x08f0, 0xffff, + 0x08f0, 0x08fa, 0x0003, 0x040f, 0x0412, 0x041a, 0x0001, 0x0028, + 0x08d5, 0x0006, 0x0028, 0x0852, 0x0859, 0x0862, 0x0845, 0x086e, + 0x0877, 0x0002, 0x041d, 0x0424, 0x0005, 0x0028, 0x0905, 0x0905, + 0xffff, 0x0905, 0x0905, 0x0005, 0x0028, 0x090e, 0x090e, 0xffff, + // Entry 1FF00 - 1FF3F + 0x090e, 0x090e, 0x0001, 0x042d, 0x0001, 0x0028, 0x0917, 0x0001, + 0x0432, 0x0001, 0x0028, 0x092a, 0x0001, 0x0437, 0x0001, 0x0028, + 0x0934, 0x0001, 0x043c, 0x0001, 0x0028, 0x093c, 0x0001, 0x0441, + 0x0001, 0x0028, 0x0950, 0x0001, 0x0446, 0x0001, 0x0028, 0x095c, + 0x0001, 0x044b, 0x0001, 0x0028, 0x0964, 0x0001, 0x0450, 0x0001, + 0x0028, 0x0982, 0x0001, 0x0455, 0x0001, 0x0028, 0x0994, 0x0003, + 0x0000, 0x045c, 0x0461, 0x0003, 0x0028, 0x09a2, 0x01b7, 0x09ba, + 0x0002, 0x0464, 0x046b, 0x0005, 0x0028, 0x09d3, 0x09d3, 0xffff, + // Entry 1FF40 - 1FF7F + 0x09ed, 0x09d3, 0x0005, 0x0028, 0x0a08, 0x0a08, 0xffff, 0x0a22, + 0x0a08, 0x0003, 0x0000, 0x0476, 0x047b, 0x0003, 0x0028, 0x0a3d, + 0x0a4c, 0x0a51, 0x0002, 0x047e, 0x0485, 0x0005, 0x0028, 0x0a61, + 0x0a61, 0xffff, 0x0a73, 0x0a61, 0x0005, 0x0028, 0x0a08, 0x0a86, + 0xffff, 0x0a98, 0x0a08, 0x0003, 0x0000, 0x0490, 0x0495, 0x0003, + 0x0028, 0x0aab, 0x0ab4, 0x0ab9, 0x0002, 0x0498, 0x049f, 0x0005, + 0x0028, 0x0ac2, 0x0ac2, 0xffff, 0x0ace, 0x0ac2, 0x0005, 0x0028, + 0x0adb, 0x0adb, 0xffff, 0x0ae6, 0x0adb, 0x0003, 0x0000, 0x04aa, + // Entry 1FF80 - 1FFBF + 0x04af, 0x0003, 0x0028, 0x0af2, 0x01c4, 0x0b05, 0x0002, 0x04b2, + 0x04b9, 0x0005, 0x0028, 0x0b19, 0x0b19, 0xffff, 0x0b2e, 0x0b19, + 0x0005, 0x0028, 0x0b44, 0x0b44, 0xffff, 0x0b59, 0x0b44, 0x0003, + 0x0000, 0x04c4, 0x04c9, 0x0003, 0x0028, 0x0b6f, 0x0b7e, 0x0b83, + 0x0002, 0x04cc, 0x04d3, 0x0005, 0x0028, 0x0b93, 0x0b93, 0xffff, + 0x0ba5, 0x0b93, 0x0005, 0x0028, 0x0bb8, 0x0bb8, 0xffff, 0x0bca, + 0x0bb8, 0x0003, 0x0000, 0x04de, 0x04e3, 0x0003, 0x0028, 0x0bdd, + 0x0be5, 0x0be9, 0x0002, 0x04e6, 0x04ed, 0x0005, 0x0028, 0x0bf1, + // Entry 1FFC0 - 1FFFF + 0x0bf1, 0xffff, 0x0bfd, 0x0bf1, 0x0005, 0x0028, 0x0c0a, 0x0c0a, + 0xffff, 0x0c15, 0x0c0a, 0x0003, 0x0000, 0x04f8, 0x04fd, 0x0003, + 0x0028, 0x0c21, 0x01cc, 0x0c35, 0x0002, 0x0500, 0x0507, 0x0005, + 0x0028, 0x0c4a, 0x0c4a, 0xffff, 0x0c60, 0x0c4a, 0x0005, 0x0028, + 0x0c77, 0x0c77, 0xffff, 0x0c8d, 0x0c77, 0x0003, 0x0000, 0x0512, + 0x0517, 0x0003, 0x0028, 0x0ca4, 0x0cb3, 0x0cb8, 0x0002, 0x051a, + 0x0521, 0x0005, 0x0028, 0x0cc8, 0x0cc8, 0xffff, 0x0cda, 0x0cc8, + 0x0005, 0x0028, 0x0ced, 0x0ced, 0xffff, 0x0cff, 0x0ced, 0x0003, + // Entry 20000 - 2003F + 0x0000, 0x052c, 0x0531, 0x0003, 0x0028, 0x0d12, 0x0d1b, 0x0d20, + 0x0002, 0x0534, 0x053b, 0x0005, 0x0028, 0x0d29, 0x0d29, 0xffff, + 0x0d35, 0x0d29, 0x0005, 0x0028, 0x0d42, 0x0d42, 0xffff, 0x0d4d, + 0x0d42, 0x0003, 0x0000, 0x0546, 0x054b, 0x0003, 0x0028, 0x0d59, + 0x01d5, 0x0d6e, 0x0002, 0x054e, 0x0555, 0x0005, 0x0028, 0x0d84, + 0x0d84, 0xffff, 0x0d9b, 0x0d84, 0x0005, 0x0028, 0x0db3, 0x0db3, + 0xffff, 0x0dca, 0x0db3, 0x0003, 0x0000, 0x0560, 0x0565, 0x0003, + 0x0028, 0x0de2, 0x0df1, 0x0df6, 0x0002, 0x0568, 0x056f, 0x0005, + // Entry 20040 - 2007F + 0x0028, 0x0e06, 0x0e06, 0xffff, 0x0e18, 0x0e06, 0x0005, 0x0028, + 0x0e2b, 0x0e2b, 0xffff, 0x0e3d, 0x0e2b, 0x0003, 0x0000, 0x057a, + 0x057f, 0x0003, 0x0028, 0x0e50, 0x0e58, 0x0e5c, 0x0002, 0x0582, + 0x0589, 0x0005, 0x0028, 0x0e64, 0x0e64, 0xffff, 0x0e70, 0x0e64, + 0x0005, 0x0028, 0x0e7d, 0x0e7d, 0xffff, 0x0e88, 0x0e7d, 0x0003, + 0x0000, 0x0594, 0x0599, 0x0003, 0x0028, 0x0e94, 0x01df, 0x0ea9, + 0x0002, 0x059c, 0x05a3, 0x0005, 0x0028, 0x0ebf, 0x0ebf, 0xffff, + 0x0ed6, 0x0ebf, 0x0005, 0x0028, 0x0eee, 0x0eee, 0xffff, 0x0f05, + // Entry 20080 - 200BF + 0x0eee, 0x0003, 0x0000, 0x05ae, 0x05b3, 0x0003, 0x0028, 0x0f1d, + 0x0f2c, 0x0f31, 0x0002, 0x05b6, 0x05bd, 0x0005, 0x0028, 0x0f41, + 0x0f41, 0xffff, 0x0f53, 0x0f41, 0x0005, 0x0028, 0x0f66, 0x0f66, + 0xffff, 0x0f78, 0x0f66, 0x0003, 0x0000, 0x05c8, 0x05cd, 0x0003, + 0x0028, 0x0f8b, 0x0f93, 0x0f97, 0x0002, 0x05d0, 0x05d7, 0x0005, + 0x0028, 0x0f9f, 0x0f9f, 0xffff, 0x0fab, 0x0f9f, 0x0005, 0x0028, + 0x0fb8, 0x0fb8, 0xffff, 0x0fc3, 0x0fb8, 0x0003, 0x0000, 0x05e2, + 0x05e7, 0x0003, 0x0028, 0x0fcf, 0x01e9, 0x0fe3, 0x0002, 0x05ea, + // Entry 200C0 - 200FF + 0x05f1, 0x0005, 0x0028, 0x0ff8, 0x0ff8, 0xffff, 0x100e, 0x0ff8, + 0x0005, 0x0028, 0x1025, 0x1025, 0xffff, 0x103b, 0x1025, 0x0003, + 0x0000, 0x05fc, 0x0601, 0x0003, 0x0028, 0x1052, 0x1061, 0x1066, + 0x0002, 0x0604, 0x060b, 0x0005, 0x0028, 0x1076, 0x1076, 0xffff, + 0x1088, 0x1076, 0x0005, 0x0028, 0x109b, 0x109b, 0xffff, 0x10ad, + 0x109b, 0x0003, 0x0000, 0x0616, 0x061b, 0x0003, 0x0028, 0x10c0, + 0x10c8, 0x10cc, 0x0002, 0x061e, 0x0625, 0x0005, 0x0028, 0x10d4, + 0x10d4, 0xffff, 0x10e0, 0x10d4, 0x0005, 0x0028, 0x10ed, 0x10ed, + // Entry 20100 - 2013F + 0xffff, 0x10f8, 0x10ed, 0x0003, 0x0000, 0x0630, 0x0635, 0x0003, + 0x0028, 0x1104, 0x01f2, 0x111b, 0x0002, 0x0638, 0x063f, 0x0005, + 0x0028, 0x1133, 0x1133, 0xffff, 0x114c, 0x1133, 0x0005, 0x0028, + 0x1166, 0x1166, 0xffff, 0x117f, 0x1166, 0x0003, 0x0000, 0x064a, + 0x064f, 0x0003, 0x0028, 0x1199, 0x11a8, 0x11ad, 0x0002, 0x0652, + 0x0659, 0x0005, 0x0028, 0x11bd, 0x11bd, 0xffff, 0x11cf, 0x11bd, + 0x0005, 0x0028, 0x11e2, 0x11e2, 0xffff, 0x11f4, 0x11e2, 0x0003, + 0x0000, 0x0664, 0x0669, 0x0003, 0x0028, 0x1207, 0x120f, 0x1213, + // Entry 20140 - 2017F + 0x0002, 0x066c, 0x0673, 0x0005, 0x0028, 0x121b, 0x121b, 0xffff, + 0x1227, 0x121b, 0x0005, 0x0028, 0x1234, 0x1234, 0xffff, 0x123f, + 0x1234, 0x0001, 0x067c, 0x0001, 0x0028, 0x124b, 0x0001, 0x0681, + 0x0001, 0x0028, 0x124b, 0x0001, 0x0686, 0x0001, 0x0028, 0x124b, + 0x0003, 0x068d, 0x0690, 0x0694, 0x0001, 0x0028, 0x124f, 0x0002, + 0x0028, 0xffff, 0x125d, 0x0002, 0x0697, 0x069e, 0x0005, 0x0028, + 0x1275, 0x1275, 0xffff, 0x1275, 0x1290, 0x0005, 0x0028, 0x12ae, + 0x12ae, 0xffff, 0x12ae, 0x12c8, 0x0003, 0x06a9, 0x06ac, 0x06b0, + // Entry 20180 - 201BF + 0x0001, 0x0027, 0x128d, 0x0002, 0x0028, 0xffff, 0x12e5, 0x0002, + 0x06b3, 0x06ba, 0x0005, 0x0028, 0x12f4, 0x12f4, 0xffff, 0x12f4, + 0x1300, 0x0005, 0x0028, 0x130d, 0x130d, 0xffff, 0x130d, 0x1318, + 0x0003, 0x06c5, 0x06c8, 0x06cc, 0x0001, 0x0000, 0x2010, 0x0002, + 0x0028, 0xffff, 0x1324, 0x0002, 0x06cf, 0x06d6, 0x0005, 0x0028, + 0x132d, 0x132d, 0xffff, 0x132d, 0x132d, 0x0005, 0x0028, 0x1335, + 0x1335, 0xffff, 0x1335, 0x1335, 0x0003, 0x06e1, 0x06e4, 0x06e8, + 0x0001, 0x0028, 0x133d, 0x0002, 0x0028, 0xffff, 0x1345, 0x0002, + // Entry 201C0 - 201FF + 0x06eb, 0x06f2, 0x0005, 0x0028, 0x1385, 0x1357, 0xffff, 0x1357, + 0x136d, 0x0005, 0x0028, 0x13c6, 0x139a, 0xffff, 0x139a, 0x13af, + 0x0003, 0x06fd, 0x0700, 0x0704, 0x0001, 0x0028, 0x13da, 0x0002, + 0x0028, 0xffff, 0x13e0, 0x0002, 0x0707, 0x070e, 0x0005, 0x0028, + 0x13fe, 0x13f0, 0xffff, 0x13f0, 0x13fe, 0x0005, 0x0028, 0x1418, + 0x140b, 0xffff, 0x140b, 0x1418, 0x0003, 0x0719, 0x071c, 0x0720, + 0x0001, 0x0000, 0x1f9a, 0x0002, 0x0028, 0xffff, 0x1424, 0x0002, + 0x0723, 0x072a, 0x0005, 0x0000, 0x1ace, 0x1ace, 0xffff, 0x1ace, + // Entry 20200 - 2023F + 0x1ace, 0x0005, 0x0000, 0x1ad5, 0x1ad5, 0xffff, 0x1ad5, 0x1ad5, + 0x0003, 0x0735, 0x0738, 0x073c, 0x0001, 0x0028, 0x142e, 0x0002, + 0x0028, 0xffff, 0x1433, 0x0002, 0x073f, 0x0746, 0x0005, 0x0028, + 0x143e, 0x143e, 0xffff, 0x1450, 0x1463, 0x0005, 0x0028, 0x1477, + 0x1477, 0xffff, 0x1488, 0x149a, 0x0003, 0x0751, 0x0754, 0x0758, + 0x0001, 0x0028, 0x142e, 0x0002, 0x0028, 0xffff, 0x1433, 0x0002, + 0x075b, 0x0762, 0x0005, 0x0028, 0x14ad, 0x14ad, 0xffff, 0x14b9, + 0x14c6, 0x0005, 0x0028, 0x14d3, 0x14d3, 0xffff, 0x14de, 0x14ea, + // Entry 20240 - 2027F + 0x0003, 0x076d, 0x0770, 0x0774, 0x0001, 0x0000, 0x2008, 0x0002, + 0x0028, 0xffff, 0x1433, 0x0002, 0x0777, 0x077e, 0x0005, 0x0000, + 0x1b48, 0x1b48, 0xffff, 0x1b48, 0x1b48, 0x0005, 0x0000, 0x1b4f, + 0x1b4f, 0xffff, 0x1b4f, 0x1b4f, 0x0001, 0x0787, 0x0001, 0x0028, + 0x14f6, 0x0001, 0x078c, 0x0001, 0x0028, 0x1502, 0x0001, 0x0791, + 0x0001, 0x0028, 0x1502, 0x0004, 0x0799, 0x079e, 0x07a3, 0x07c8, + 0x0003, 0x0000, 0x1dc7, 0x234c, 0x25e7, 0x0003, 0x0000, 0x1de0, + 0x260f, 0x2624, 0x0002, 0x07a6, 0x07bc, 0x0003, 0x07aa, 0x07b6, + // Entry 20280 - 202BF + 0x07b0, 0x0004, 0x0006, 0xffff, 0xffff, 0xffff, 0x1f5f, 0x0004, + 0x0006, 0xffff, 0xffff, 0xffff, 0x1f5f, 0x0004, 0x0006, 0xffff, + 0x4230, 0x4234, 0x1f63, 0x0003, 0x0000, 0x07c3, 0x07c0, 0x0001, + 0x0028, 0x1508, 0x0003, 0x0028, 0xffff, 0x152d, 0x1548, 0x0002, + 0x09af, 0x07cb, 0x0003, 0x07cf, 0x090f, 0x086f, 0x009e, 0x0028, + 0xffff, 0xffff, 0xffff, 0xffff, 0x15d2, 0x1618, 0x167a, 0x16ae, + 0x171b, 0x1785, 0x17ef, 0x1844, 0x1875, 0x18ff, 0x1933, 0x197f, + 0x19e6, 0x1a20, 0x1a6f, 0x1ac4, 0x1b2e, 0x1b80, 0x1bd2, 0x1c18, + // Entry 202C0 - 202FF + 0x1c73, 0xffff, 0xffff, 0x1cca, 0xffff, 0x1d22, 0xffff, 0x1d86, + 0x1dba, 0x1dee, 0x1e25, 0xffff, 0xffff, 0x1e8c, 0x1ec6, 0x1f12, + 0xffff, 0xffff, 0xffff, 0x1f76, 0xffff, 0x1fd6, 0x203a, 0xffff, + 0x20be, 0x211f, 0x2186, 0xffff, 0xffff, 0xffff, 0xffff, 0x2214, + 0xffff, 0xffff, 0x228a, 0x22e5, 0xffff, 0xffff, 0x2369, 0x23f4, + 0x242e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x24e7, + 0x251b, 0x254f, 0x2583, 0x25c3, 0xffff, 0xffff, 0x265a, 0xffff, + 0x269c, 0xffff, 0xffff, 0x270c, 0xffff, 0x2793, 0xffff, 0xffff, + // Entry 20300 - 2033F + 0xffff, 0xffff, 0x2825, 0xffff, 0x2895, 0x28f9, 0x296c, 0x29a9, + 0xffff, 0xffff, 0xffff, 0x29fe, 0x2a50, 0x2a9f, 0xffff, 0xffff, + 0x2b07, 0x2b83, 0x2bc3, 0x2bee, 0xffff, 0xffff, 0x2c52, 0x2c8f, + 0x2cc0, 0xffff, 0x2d36, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2e2c, 0x2e63, 0x2e94, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2f3f, 0xffff, 0xffff, 0x2f8f, 0xffff, 0x2fc7, + 0xffff, 0x301c, 0x3056, 0x3096, 0xffff, 0x30dd, 0x311d, 0xffff, + 0xffff, 0xffff, 0x3189, 0x31bd, 0xffff, 0xffff, 0x155e, 0x1649, + // Entry 20340 - 2037F + 0x18a0, 0x18ce, 0xffff, 0xffff, 0x2746, 0x2dd4, 0x009e, 0x0028, + 0x1589, 0x159b, 0x15ae, 0x15c0, 0x15e4, 0x1623, 0x1686, 0x16cd, + 0x1739, 0x17a3, 0x1806, 0x184f, 0x187e, 0x190b, 0x1947, 0x199c, + 0x19f4, 0x1a35, 0x1a86, 0x1ae2, 0x1b44, 0x1b96, 0x1be4, 0x1c31, + 0x1c82, 0x1cb0, 0x1cbc, 0x1cd8, 0x1d04, 0x1d36, 0x1d79, 0x1d92, + 0x1dc6, 0x1dfb, 0x1e34, 0x1e62, 0x1e78, 0x1e9a, 0x1ed8, 0x1f1c, + 0x1f40, 0x1f4b, 0x1f62, 0x1f8c, 0x1fc8, 0x1ff2, 0x2055, 0x209b, + 0x20d9, 0x213c, 0x2190, 0x21b4, 0x21ce, 0x21f8, 0x2207, 0x2227, + // Entry 20380 - 203BF + 0x225d, 0x2276, 0x22a3, 0x22fe, 0x2349, 0x235a, 0x2392, 0x2402, + 0x2437, 0x2459, 0x246c, 0x2484, 0x2498, 0x24b3, 0x24cd, 0x24f3, + 0x2527, 0x255b, 0x2593, 0x25e0, 0x262a, 0x2642, 0x2667, 0x2691, + 0x26ac, 0x26dc, 0x26f7, 0x271a, 0x277d, 0x279f, 0x27c7, 0x27d7, + 0x27f3, 0x280e, 0x2841, 0x2889, 0x28b1, 0x291a, 0x297b, 0x29b4, + 0x29da, 0x29e7, 0x29f2, 0x2a14, 0x2a65, 0x2ab3, 0x2aeb, 0x2af4, + 0x2b1f, 0x2b93, 0x2bcc, 0x2bfd, 0x2c2b, 0x2c36, 0x2c61, 0x2c9a, + 0x2cdb, 0x2d21, 0x2d55, 0x2da3, 0x2db9, 0x2dc5, 0x2e14, 0x2e20, + // Entry 203C0 - 203FF + 0x2e39, 0x2e6e, 0x2ea0, 0x2ec8, 0x2ee3, 0x2ef2, 0x2f08, 0x2f1c, + 0x2f29, 0x2f34, 0x2f4a, 0x2f70, 0x2f83, 0x2f99, 0x2fbd, 0x2fda, + 0x3010, 0x302a, 0x3066, 0x30a2, 0x30ca, 0x30ed, 0x312b, 0x3157, + 0x3162, 0x3172, 0x3195, 0x31cf, 0x2340, 0x2b5f, 0x1567, 0x1654, + 0x18aa, 0x18d9, 0x1d6e, 0x26ed, 0x2753, 0x2de4, 0x009e, 0x0028, + 0xffff, 0xffff, 0xffff, 0xffff, 0x15fa, 0x1632, 0x1696, 0x16f0, + 0x175b, 0x17c5, 0x1821, 0x185e, 0x188b, 0x191b, 0x195f, 0x19bd, + 0x1a06, 0x1a4e, 0x1aa1, 0x1b04, 0x1b5e, 0x1bb0, 0x1bfa, 0x1c4e, + // Entry 20400 - 2043F + 0x1c95, 0xffff, 0xffff, 0x1cea, 0xffff, 0x1d4e, 0xffff, 0x1da2, + 0x1dd6, 0x1e0c, 0x1e47, 0xffff, 0xffff, 0x1eac, 0x1eee, 0x1f2a, + 0xffff, 0xffff, 0xffff, 0x1fa6, 0xffff, 0x2012, 0x2074, 0xffff, + 0x20f8, 0x215d, 0x219e, 0xffff, 0xffff, 0xffff, 0xffff, 0x223e, + 0xffff, 0xffff, 0x22c0, 0x231b, 0xffff, 0xffff, 0x23bf, 0x2414, + 0x2444, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2503, + 0x2537, 0x256b, 0x25a7, 0x2601, 0xffff, 0xffff, 0x2678, 0xffff, + 0x26c0, 0xffff, 0xffff, 0x272c, 0xffff, 0x27af, 0xffff, 0xffff, + // Entry 20440 - 2047F + 0xffff, 0xffff, 0x2861, 0xffff, 0x28d1, 0x293f, 0x298e, 0x29c3, + 0xffff, 0xffff, 0xffff, 0x2a2e, 0x2a7e, 0x2acb, 0xffff, 0xffff, + 0x2b3b, 0x2ba7, 0x2bd9, 0x2c10, 0xffff, 0xffff, 0x2c74, 0x2ca9, + 0x2cfa, 0xffff, 0x2d78, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2e4a, 0x2e7d, 0x2eb0, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2f59, 0xffff, 0xffff, 0x2fa7, 0xffff, 0x2ff1, + 0xffff, 0x303c, 0x307a, 0x30b2, 0xffff, 0x3101, 0x313d, 0xffff, + 0xffff, 0xffff, 0x31a5, 0x31e5, 0xffff, 0xffff, 0x1574, 0x1663, + // Entry 20480 - 204BF + 0x18b8, 0x18e8, 0xffff, 0xffff, 0x2764, 0x2df8, 0x0003, 0x09b3, + 0x0a35, 0x09f4, 0x003f, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0000, 0xffff, 0x000e, 0x0019, 0x0024, 0x002f, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x003a, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x24ae, 0x24b7, 0xffff, 0x24c0, 0xffff, 0xffff, 0xffff, + // Entry 204C0 - 204FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x24cd, 0x003f, 0x0007, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0004, 0xffff, 0x0011, 0x001c, 0x249e, 0x0032, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x003d, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x24ae, 0x24b7, 0xffff, 0x24c0, 0xffff, 0xffff, + // Entry 20500 - 2053F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x24c9, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0068, 0x003f, 0x0007, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0009, 0xffff, 0x0015, 0x0020, 0x24a2, + 0x0036, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0041, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x24b2, 0x24bb, 0xffff, 0x24c4, 0xffff, + // Entry 20540 - 2057F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x006d, 0x0003, 0x0004, 0x0256, + 0x06a7, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000d, 0x0038, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0016, 0x0000, 0x0027, 0x0004, 0x0024, 0x001e, 0x001b, 0x0021, + 0x0001, 0x0029, 0x0000, 0x0001, 0x001d, 0x1560, 0x0001, 0x001f, + 0x0000, 0x0001, 0x0002, 0x0587, 0x0004, 0x0035, 0x002f, 0x002c, + 0x0032, 0x0001, 0x0029, 0x001b, 0x0001, 0x0029, 0x001b, 0x0001, + // Entry 20580 - 205BF + 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, 0x0041, 0x00a6, + 0x00fd, 0x0132, 0x0209, 0x0223, 0x0234, 0x0245, 0x0002, 0x0044, + 0x0075, 0x0003, 0x0048, 0x0057, 0x0066, 0x000d, 0x0029, 0xffff, + 0x0029, 0x002e, 0x0033, 0x0038, 0x003d, 0x0042, 0x0048, 0x004d, + 0x0052, 0x0057, 0x005c, 0x0061, 0x000d, 0x0029, 0xffff, 0x0066, + 0x0069, 0x006c, 0x006f, 0x006c, 0x0066, 0x0066, 0x006f, 0x0072, + 0x0075, 0x0078, 0x007b, 0x000d, 0x0029, 0xffff, 0x007e, 0x0086, + 0x008f, 0x0095, 0x003d, 0x0042, 0x009b, 0x00a1, 0x00a8, 0x00b1, + // Entry 205C0 - 205FF + 0x00b9, 0x00c2, 0x0003, 0x0079, 0x0088, 0x0097, 0x000d, 0x0029, + 0xffff, 0x00cb, 0x00d0, 0x00d5, 0x00da, 0x00df, 0x00e4, 0x00ea, + 0x00ef, 0x00f4, 0x00f9, 0x00fe, 0x0103, 0x000d, 0x0000, 0xffff, + 0x2060, 0x2364, 0x2579, 0x241f, 0x2579, 0x2060, 0x2060, 0x241f, + 0x257d, 0x236a, 0x236c, 0x236e, 0x000d, 0x0029, 0xffff, 0x0108, + 0x0110, 0x0119, 0x011f, 0x00df, 0x00e4, 0x0125, 0x012b, 0x0132, + 0x013b, 0x0143, 0x014c, 0x0002, 0x00a9, 0x00d3, 0x0005, 0x00af, + 0x00b8, 0x00ca, 0x0000, 0x00c1, 0x0007, 0x001d, 0x1608, 0x218c, + // Entry 20600 - 2063F + 0x2191, 0x2196, 0x219c, 0x21a1, 0x1622, 0x0007, 0x0029, 0x007b, + 0x0155, 0x006c, 0x006c, 0x0066, 0x0158, 0x0072, 0x0007, 0x0029, + 0x015b, 0x015f, 0x0163, 0x0167, 0x016c, 0x0170, 0x0174, 0x0007, + 0x001d, 0x163d, 0x218c, 0x164b, 0x21a6, 0x21b0, 0x21b6, 0x166c, + 0x0005, 0x00d9, 0x00e2, 0x00f4, 0x0000, 0x00eb, 0x0007, 0x0029, + 0x0179, 0x017e, 0x00d5, 0x0183, 0x0189, 0x018e, 0x0193, 0x0007, + 0x0000, 0x236e, 0x2296, 0x2579, 0x2579, 0x2060, 0x257f, 0x257d, + 0x0007, 0x0017, 0x0429, 0x2dc3, 0x2dc6, 0x2dc9, 0x2dcd, 0x2dd0, + // Entry 20640 - 2067F + 0x2dd3, 0x0007, 0x0029, 0x0199, 0x017e, 0x01a1, 0x01a8, 0x01b2, + 0x01b8, 0x01bf, 0x0002, 0x0100, 0x0119, 0x0003, 0x0104, 0x010b, + 0x0112, 0x0005, 0x001d, 0xffff, 0x1674, 0x1677, 0x167a, 0x167d, + 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, + 0x001f, 0xffff, 0x0014, 0x300f, 0x0032, 0x301e, 0x0003, 0x011d, + 0x0124, 0x012b, 0x0005, 0x001d, 0xffff, 0x1674, 0x1677, 0x167a, + 0x167d, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x0005, 0x001f, 0xffff, 0x0014, 0x300f, 0x0032, 0x301e, 0x0002, + // Entry 20680 - 206BF + 0x0135, 0x019f, 0x0003, 0x0139, 0x015b, 0x017d, 0x0009, 0x0146, + 0x0149, 0x0143, 0x014c, 0x0152, 0x0155, 0x0158, 0x0000, 0x014f, + 0x0001, 0x0029, 0x01c7, 0x0001, 0x001d, 0x050b, 0x0001, 0x001d, + 0x0510, 0x0001, 0x0029, 0x01d0, 0x0001, 0x0029, 0x01dd, 0x0001, + 0x0029, 0x01e7, 0x0001, 0x0029, 0x01f4, 0x0001, 0x0029, 0x01c7, + 0x0009, 0x0168, 0x016b, 0x0165, 0x016e, 0x0174, 0x0177, 0x017a, + 0x0000, 0x0171, 0x0001, 0x0029, 0x01c7, 0x0001, 0x001d, 0x050b, + 0x0001, 0x001d, 0x0510, 0x0001, 0x0029, 0x01d0, 0x0001, 0x0029, + // Entry 206C0 - 206FF + 0x01dd, 0x0001, 0x0029, 0x01e7, 0x0001, 0x0029, 0x01f4, 0x0001, + 0x0029, 0x01c7, 0x0009, 0x018a, 0x018d, 0x0187, 0x0190, 0x0196, + 0x0199, 0x019c, 0x0000, 0x0193, 0x0001, 0x0029, 0x01c7, 0x0001, + 0x001d, 0x050b, 0x0001, 0x001d, 0x0510, 0x0001, 0x0029, 0x01d0, + 0x0001, 0x0029, 0x01dd, 0x0001, 0x0029, 0x01e7, 0x0001, 0x0029, + 0x01f4, 0x0001, 0x0029, 0x01c7, 0x0003, 0x01a3, 0x01c5, 0x01e7, + 0x0009, 0x01b0, 0x01b3, 0x01ad, 0x01b6, 0x01bc, 0x01bf, 0x01c2, + 0x0000, 0x01b9, 0x0001, 0x0029, 0x01fd, 0x0001, 0x001d, 0x050b, + // Entry 20700 - 2073F + 0x0001, 0x001d, 0x0510, 0x0001, 0x001d, 0x16f0, 0x0001, 0x0029, + 0x0208, 0x0001, 0x001d, 0x16e6, 0x0001, 0x0006, 0x0cf2, 0x0001, + 0x0029, 0x020f, 0x0009, 0x01d2, 0x01d5, 0x01cf, 0x01d8, 0x01de, + 0x01e1, 0x01e4, 0x0000, 0x01db, 0x0001, 0x0029, 0x01fd, 0x0001, + 0x001d, 0x050b, 0x0001, 0x001d, 0x0510, 0x0001, 0x001d, 0x16f0, + 0x0001, 0x0029, 0x0208, 0x0001, 0x001d, 0x16e6, 0x0001, 0x0006, + 0x0cf2, 0x0001, 0x0029, 0x020f, 0x0009, 0x01f4, 0x01f7, 0x01f1, + 0x01fa, 0x0200, 0x0203, 0x0206, 0x0000, 0x01fd, 0x0001, 0x0029, + // Entry 20740 - 2077F + 0x01fd, 0x0001, 0x001d, 0x050b, 0x0001, 0x001d, 0x0510, 0x0001, + 0x001d, 0x16f0, 0x0001, 0x0029, 0x0208, 0x0001, 0x001d, 0x16e6, + 0x0001, 0x0006, 0x0cf2, 0x0001, 0x0029, 0x020f, 0x0003, 0x0218, + 0x0000, 0x020d, 0x0002, 0x0210, 0x0214, 0x0002, 0x001d, 0x1700, + 0x21bd, 0x0002, 0x0029, 0x0215, 0x0229, 0x0002, 0x021b, 0x021f, + 0x0002, 0x0029, 0x0237, 0x0243, 0x0002, 0x0029, 0x023c, 0x0248, + 0x0004, 0x0231, 0x022b, 0x0228, 0x022e, 0x0001, 0x001d, 0x1760, + 0x0001, 0x001d, 0x1779, 0x0001, 0x0002, 0x08e8, 0x0001, 0x0015, + // Entry 20780 - 207BF + 0x14be, 0x0004, 0x0242, 0x023c, 0x0239, 0x023f, 0x0001, 0x0000, + 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, + 0x0000, 0x0546, 0x0004, 0x0253, 0x024d, 0x024a, 0x0250, 0x0001, + 0x0029, 0x024d, 0x0001, 0x0029, 0x024d, 0x0001, 0x0029, 0x025a, + 0x0001, 0x0029, 0x025a, 0x0042, 0x0299, 0x029e, 0x02a3, 0x02a8, + 0x02bf, 0x02d6, 0x02ed, 0x0304, 0x031b, 0x0332, 0x0349, 0x0360, + 0x0372, 0x038d, 0x03a8, 0x03be, 0x03c3, 0x03c8, 0x03cd, 0x03e6, + 0x03f8, 0x040a, 0x040f, 0x0414, 0x0419, 0x041e, 0x0423, 0x0428, + // Entry 207C0 - 207FF + 0x042d, 0x0432, 0x0437, 0x044b, 0x045f, 0x0473, 0x0487, 0x049b, + 0x04af, 0x04c3, 0x04d7, 0x04eb, 0x04ff, 0x0513, 0x0527, 0x053b, + 0x054f, 0x0563, 0x0577, 0x058b, 0x059f, 0x05b3, 0x05c7, 0x05db, + 0x05e0, 0x05e5, 0x05ea, 0x0600, 0x0612, 0x0624, 0x063a, 0x064c, + 0x065e, 0x0674, 0x0686, 0x0698, 0x069d, 0x06a2, 0x0001, 0x029b, + 0x0001, 0x0001, 0x0040, 0x0001, 0x02a0, 0x0001, 0x0001, 0x0040, + 0x0001, 0x02a5, 0x0001, 0x0029, 0x0263, 0x0003, 0x02ac, 0x02af, + 0x02b4, 0x0001, 0x0029, 0x0266, 0x0003, 0x0029, 0x026a, 0x0277, + // Entry 20800 - 2083F + 0x0280, 0x0002, 0x02b7, 0x02bb, 0x0002, 0x0029, 0x02a1, 0x028f, + 0x0002, 0x0029, 0x02c0, 0x02b4, 0x0003, 0x02c3, 0x02c6, 0x02cb, + 0x0001, 0x0029, 0x0266, 0x0003, 0x0029, 0x02cd, 0x0277, 0x02d8, + 0x0002, 0x02ce, 0x02d2, 0x0002, 0x0029, 0x02a1, 0x028f, 0x0002, + 0x0029, 0x02c0, 0x02b4, 0x0003, 0x02da, 0x02dd, 0x02e2, 0x0001, + 0x0029, 0x006f, 0x0003, 0x0029, 0x02cd, 0x0277, 0x02d8, 0x0002, + 0x02e5, 0x02e9, 0x0002, 0x0006, 0x1640, 0x1640, 0x0002, 0x0006, + 0x164a, 0x164a, 0x0003, 0x02f1, 0x02f4, 0x02f9, 0x0001, 0x0006, + // Entry 20840 - 2087F + 0x1655, 0x0003, 0x0029, 0x02e5, 0x02f8, 0x0307, 0x0002, 0x02fc, + 0x0300, 0x0002, 0x001d, 0x18a2, 0x188a, 0x0002, 0x0006, 0x16c9, + 0x16b7, 0x0003, 0x0308, 0x030b, 0x0310, 0x0001, 0x000b, 0x0c78, + 0x0003, 0x0029, 0x031c, 0x0329, 0x0334, 0x0002, 0x0313, 0x0317, + 0x0002, 0x001d, 0x18e2, 0x18e2, 0x0002, 0x0006, 0x170f, 0x170f, + 0x0003, 0x031f, 0x0322, 0x0327, 0x0001, 0x000b, 0x0c78, 0x0003, + 0x0029, 0x031c, 0x0329, 0x0334, 0x0002, 0x032a, 0x032e, 0x0002, + 0x0006, 0x1702, 0x1702, 0x0002, 0x0006, 0x170f, 0x170f, 0x0003, + // Entry 20880 - 208BF + 0x0336, 0x0339, 0x033e, 0x0001, 0x0006, 0x09ee, 0x0003, 0x0029, + 0x0343, 0x0350, 0x0359, 0x0002, 0x0341, 0x0345, 0x0002, 0x001d, + 0x193e, 0x192c, 0x0002, 0x0006, 0x177f, 0x1773, 0x0003, 0x034d, + 0x0350, 0x0355, 0x0001, 0x0006, 0x09ee, 0x0003, 0x0029, 0x0368, + 0x0372, 0x037a, 0x0002, 0x0358, 0x035c, 0x0002, 0x001d, 0x21cf, + 0x192c, 0x0002, 0x0006, 0x4243, 0x1773, 0x0003, 0x0364, 0x0000, + 0x0367, 0x0001, 0x0029, 0x006c, 0x0002, 0x036a, 0x036e, 0x0002, + 0x0006, 0x179f, 0x179f, 0x0002, 0x0006, 0x17a9, 0x17a9, 0x0004, + // Entry 208C0 - 208FF + 0x0377, 0x037a, 0x037f, 0x038a, 0x0001, 0x001d, 0x1989, 0x0003, + 0x0029, 0x0386, 0x0396, 0x03a2, 0x0002, 0x0382, 0x0386, 0x0002, + 0x001d, 0x19d5, 0x19c0, 0x0002, 0x0029, 0x03c3, 0x03b4, 0x0001, + 0x0029, 0x03d3, 0x0004, 0x0392, 0x0395, 0x039a, 0x03a5, 0x0001, + 0x001d, 0x1a1e, 0x0003, 0x0029, 0x03e3, 0x03ef, 0x03f9, 0x0002, + 0x039d, 0x03a1, 0x0002, 0x001d, 0x1a23, 0x1a23, 0x0002, 0x0029, + 0x0407, 0x0407, 0x0001, 0x0029, 0x03d3, 0x0004, 0x03ad, 0x0000, + 0x03b0, 0x03bb, 0x0001, 0x001d, 0x1a1e, 0x0002, 0x03b3, 0x03b7, + // Entry 20900 - 2093F + 0x0002, 0x001f, 0x0717, 0x0717, 0x0002, 0x0029, 0x0407, 0x0407, + 0x0001, 0x0029, 0x03d3, 0x0001, 0x03c0, 0x0001, 0x0029, 0x0414, + 0x0001, 0x03c5, 0x0001, 0x0029, 0x0422, 0x0001, 0x03ca, 0x0001, + 0x0029, 0x042e, 0x0003, 0x03d1, 0x03d4, 0x03db, 0x0001, 0x0006, + 0x18b6, 0x0005, 0x0029, 0x0441, 0x0446, 0x0208, 0x0439, 0x044b, + 0x0002, 0x03de, 0x03e2, 0x0002, 0x001d, 0x1aab, 0x1a98, 0x0002, + 0x0006, 0x4250, 0x18f7, 0x0003, 0x03ea, 0x0000, 0x03ed, 0x0001, + 0x0006, 0x18b6, 0x0002, 0x03f0, 0x03f4, 0x0002, 0x001d, 0x1aab, + // Entry 20940 - 2097F + 0x1a98, 0x0002, 0x0006, 0x4250, 0x18f7, 0x0003, 0x03fc, 0x0000, + 0x03ff, 0x0001, 0x0029, 0x007b, 0x0002, 0x0402, 0x0406, 0x0002, + 0x0006, 0x1928, 0x1928, 0x0002, 0x0006, 0x1932, 0x1932, 0x0001, + 0x040c, 0x0001, 0x0029, 0x0458, 0x0001, 0x0411, 0x0001, 0x0029, + 0x0458, 0x0001, 0x0416, 0x0001, 0x0029, 0x0464, 0x0001, 0x041b, + 0x0001, 0x0029, 0x046d, 0x0001, 0x0420, 0x0001, 0x0029, 0x047c, + 0x0001, 0x0425, 0x0001, 0x0029, 0x0489, 0x0001, 0x042a, 0x0001, + 0x0029, 0x0414, 0x0001, 0x042f, 0x0001, 0x0029, 0x0422, 0x0001, + // Entry 20980 - 209BF + 0x0434, 0x0001, 0x0029, 0x042e, 0x0003, 0x0000, 0x043b, 0x0440, + 0x0003, 0x0029, 0x0494, 0x04a5, 0x04b2, 0x0002, 0x0443, 0x0447, + 0x0002, 0x001d, 0x1b8b, 0x1b75, 0x0002, 0x0029, 0x04d5, 0x04c5, + 0x0003, 0x0000, 0x044f, 0x0454, 0x0003, 0x0029, 0x04e6, 0x04f4, + 0x04fe, 0x0002, 0x0457, 0x045b, 0x0002, 0x001d, 0x1bef, 0x1bef, + 0x0002, 0x0029, 0x050e, 0x050e, 0x0003, 0x0000, 0x0463, 0x0468, + 0x0003, 0x0029, 0x051b, 0x04f4, 0x0527, 0x0002, 0x046b, 0x046f, + 0x0002, 0x0029, 0x0535, 0x0535, 0x0002, 0x0029, 0x050e, 0x050e, + // Entry 209C0 - 209FF + 0x0003, 0x0000, 0x0477, 0x047c, 0x0003, 0x0029, 0x0541, 0x054f, + 0x0559, 0x0002, 0x047f, 0x0483, 0x0002, 0x0029, 0x0569, 0x0569, + 0x0002, 0x0029, 0x057c, 0x057c, 0x0003, 0x0000, 0x048b, 0x0490, + 0x0003, 0x0029, 0x0589, 0x054f, 0x0595, 0x0002, 0x0493, 0x0497, + 0x0002, 0x0029, 0x0569, 0x0569, 0x0002, 0x0029, 0x057c, 0x057c, + 0x0003, 0x0000, 0x049f, 0x04a4, 0x0003, 0x0029, 0x0589, 0x054f, + 0x0595, 0x0002, 0x04a7, 0x04ab, 0x0002, 0x0029, 0x05a3, 0x05a3, + 0x0002, 0x0029, 0x057c, 0x057c, 0x0003, 0x0000, 0x04b3, 0x04b8, + // Entry 20A00 - 20A3F + 0x0003, 0x0029, 0x05af, 0x05bf, 0x05cb, 0x0002, 0x04bb, 0x04bf, + 0x0002, 0x001d, 0x1d5d, 0x1d5d, 0x0002, 0x0006, 0x1aeb, 0x1aeb, + 0x0003, 0x0000, 0x04c7, 0x04cc, 0x0003, 0x0029, 0x05dd, 0x05eb, + 0x05f5, 0x0002, 0x04cf, 0x04d3, 0x0002, 0x001d, 0x1dac, 0x1dac, + 0x0002, 0x0029, 0x0605, 0x0605, 0x0003, 0x0000, 0x04db, 0x04e0, + 0x0003, 0x0029, 0x0612, 0x05eb, 0x061e, 0x0002, 0x04e3, 0x04e7, + 0x0002, 0x0029, 0x062c, 0x062c, 0x0002, 0x0029, 0x0605, 0x0605, + 0x0003, 0x0000, 0x04ef, 0x04f4, 0x0003, 0x0029, 0x0638, 0x064b, + // Entry 20A40 - 20A7F + 0x065a, 0x0002, 0x04f7, 0x04fb, 0x0002, 0x0029, 0x066f, 0x066f, + 0x0002, 0x0029, 0x0687, 0x0687, 0x0003, 0x0000, 0x0503, 0x0508, + 0x0003, 0x0029, 0x0699, 0x06a8, 0x06b3, 0x0002, 0x050b, 0x050f, + 0x0002, 0x0029, 0x06c4, 0x06c4, 0x0002, 0x0029, 0x06d8, 0x06d8, + 0x0003, 0x0000, 0x0517, 0x051c, 0x0003, 0x0029, 0x06e6, 0x06a8, + 0x06f3, 0x0002, 0x051f, 0x0523, 0x0002, 0x0029, 0x0702, 0x0702, + 0x0002, 0x0029, 0x06d8, 0x06d8, 0x0003, 0x0000, 0x052b, 0x0530, + 0x0003, 0x0029, 0x070f, 0x071e, 0x0729, 0x0002, 0x0533, 0x0537, + // Entry 20A80 - 20ABF + 0x0002, 0x0029, 0x073a, 0x073a, 0x0002, 0x0029, 0x074e, 0x074e, + 0x0003, 0x0000, 0x053f, 0x0544, 0x0003, 0x0029, 0x075c, 0x076a, + 0x0774, 0x0002, 0x0547, 0x054b, 0x0002, 0x0029, 0x0784, 0x0784, + 0x0002, 0x0029, 0x0797, 0x0797, 0x0003, 0x0000, 0x0553, 0x0558, + 0x0003, 0x0029, 0x07a4, 0x076a, 0x07b0, 0x0002, 0x055b, 0x055f, + 0x0002, 0x0029, 0x07be, 0x07be, 0x0002, 0x0029, 0x0797, 0x0797, + 0x0003, 0x0000, 0x0567, 0x056c, 0x0003, 0x0029, 0x07ca, 0x07da, + 0x07e6, 0x0002, 0x056f, 0x0573, 0x0002, 0x0029, 0x07f8, 0x07f8, + // Entry 20AC0 - 20AFF + 0x0002, 0x0029, 0x080d, 0x080d, 0x0003, 0x0000, 0x057b, 0x0580, + 0x0003, 0x0029, 0x081c, 0x082a, 0x0834, 0x0002, 0x0583, 0x0587, + 0x0002, 0x0029, 0x0844, 0x0844, 0x0002, 0x0029, 0x0857, 0x0857, + 0x0003, 0x0000, 0x058f, 0x0594, 0x0003, 0x0029, 0x0864, 0x082a, + 0x0870, 0x0002, 0x0597, 0x059b, 0x0002, 0x0029, 0x087e, 0x087e, + 0x0002, 0x0029, 0x0857, 0x0857, 0x0003, 0x0000, 0x05a3, 0x05a8, + 0x0003, 0x0029, 0x088a, 0x089b, 0x08a8, 0x0002, 0x05ab, 0x05af, + 0x0002, 0x001e, 0x00fc, 0x00e6, 0x0002, 0x0029, 0x08cb, 0x08bb, + // Entry 20B00 - 20B3F + 0x0003, 0x0000, 0x05b7, 0x05bc, 0x0003, 0x0029, 0x08dc, 0x08eb, + 0x08f6, 0x0002, 0x05bf, 0x05c3, 0x0002, 0x001e, 0x0163, 0x0163, + 0x0002, 0x0029, 0x0907, 0x0907, 0x0003, 0x0000, 0x05cb, 0x05d0, + 0x0003, 0x0029, 0x0915, 0x08eb, 0x0922, 0x0002, 0x05d3, 0x05d7, + 0x0002, 0x0029, 0x0931, 0x0931, 0x0002, 0x0029, 0x0907, 0x0907, + 0x0001, 0x05dd, 0x0001, 0x001d, 0x0524, 0x0001, 0x05e2, 0x0001, + 0x001d, 0x0524, 0x0001, 0x05e7, 0x0001, 0x001d, 0x0524, 0x0003, + 0x05ee, 0x05f1, 0x05f5, 0x0001, 0x0006, 0x1dc8, 0x0002, 0x0006, + // Entry 20B40 - 20B7F + 0xffff, 0x1dcd, 0x0002, 0x05f8, 0x05fc, 0x0002, 0x001e, 0x01da, + 0x01c7, 0x0002, 0x0006, 0x425e, 0x1df0, 0x0003, 0x0604, 0x0000, + 0x0607, 0x0001, 0x0000, 0x213b, 0x0002, 0x060a, 0x060e, 0x0002, + 0x001e, 0x020b, 0x020b, 0x0002, 0x0029, 0x093e, 0x093e, 0x0003, + 0x0616, 0x0000, 0x0619, 0x0001, 0x0000, 0x213b, 0x0002, 0x061c, + 0x0620, 0x0002, 0x001f, 0x079f, 0x079f, 0x0002, 0x0029, 0x093e, + 0x093e, 0x0003, 0x0628, 0x062b, 0x062f, 0x0001, 0x001d, 0x0dc2, + 0x0002, 0x001e, 0xffff, 0x0226, 0x0002, 0x0632, 0x0636, 0x0002, + // Entry 20B80 - 20BBF + 0x001e, 0x0247, 0x0232, 0x0002, 0x0029, 0x0957, 0x0948, 0x0003, + 0x063e, 0x0000, 0x0641, 0x0001, 0x000b, 0x1250, 0x0002, 0x0644, + 0x0648, 0x0002, 0x001e, 0x027e, 0x027e, 0x0002, 0x0029, 0x0967, + 0x0967, 0x0003, 0x0650, 0x0000, 0x0653, 0x0001, 0x000b, 0x1250, + 0x0002, 0x0656, 0x065a, 0x0002, 0x001f, 0x07b1, 0x07b1, 0x0002, + 0x0029, 0x0967, 0x0967, 0x0003, 0x0662, 0x0665, 0x0669, 0x0001, + 0x001e, 0x029d, 0x0002, 0x0006, 0xffff, 0x1ea5, 0x0002, 0x066c, + 0x0670, 0x0002, 0x001e, 0x02c1, 0x02ab, 0x0002, 0x0029, 0x0983, + // Entry 20BC0 - 20BFF + 0x0973, 0x0003, 0x0678, 0x0000, 0x067b, 0x0001, 0x0000, 0x2002, + 0x0002, 0x067e, 0x0682, 0x0002, 0x001e, 0x02fb, 0x02fb, 0x0002, + 0x0029, 0x0994, 0x0994, 0x0003, 0x068a, 0x0000, 0x068d, 0x0001, + 0x0000, 0x2002, 0x0002, 0x0690, 0x0694, 0x0002, 0x001f, 0x07bc, + 0x07bc, 0x0002, 0x0029, 0x0994, 0x0994, 0x0001, 0x069a, 0x0001, + 0x0029, 0x099e, 0x0001, 0x069f, 0x0001, 0x0029, 0x09ab, 0x0001, + 0x06a4, 0x0001, 0x0029, 0x09ab, 0x0004, 0x06ac, 0x06b1, 0x06b6, + 0x06c5, 0x0003, 0x0000, 0x1dc7, 0x234c, 0x2631, 0x0003, 0x0029, + // Entry 20C00 - 20C3F + 0x09b0, 0x09c0, 0x09da, 0x0002, 0x0000, 0x06b9, 0x0003, 0x0000, + 0x06c0, 0x06bd, 0x0001, 0x0029, 0x09f4, 0x0003, 0x0029, 0xffff, + 0x0a11, 0x0a2e, 0x0002, 0x088e, 0x06c8, 0x0003, 0x0762, 0x07f8, + 0x06cc, 0x0094, 0x0029, 0x0a4a, 0x0a61, 0x0a7c, 0x0a98, 0x0ada, + 0x0b3c, 0x0b88, 0x0be3, 0x0c55, 0x0ccc, 0x0d4a, 0x0db8, 0x0e00, + 0x0e43, 0x0e8a, 0x0ee8, 0x0f4f, 0x0f9f, 0x0ffc, 0x1072, 0x10f4, + 0x1164, 0x11cf, 0x1224, 0x1274, 0x12b4, 0x12c6, 0x12ed, 0x1329, + 0x135c, 0x139c, 0x13ca, 0x1415, 0x145c, 0x14a8, 0x14e8, 0x1501, + // Entry 20C40 - 20C7F + 0x152d, 0x1580, 0x15d8, 0x160c, 0x161d, 0x163b, 0x166c, 0x16b4, + 0x16e1, 0x1744, 0x178e, 0x17cc, 0x1835, 0x1890, 0x18c6, 0x18e2, + 0x1916, 0x192d, 0x1953, 0x198d, 0x19a7, 0x19e9, 0x1a5f, 0x1ab7, + 0x1ad2, 0x1b00, 0x1b5f, 0x1bad, 0x1be1, 0x1bfc, 0x1c17, 0x1c2c, + 0x1c49, 0x1c67, 0x1c98, 0x1ce1, 0x1d2d, 0x1d77, 0x1dd4, 0x1e32, + 0x1e53, 0x1e87, 0x1ebd, 0x1ee6, 0x1f28, 0x1f41, 0x1f71, 0x1faf, + 0x1fdc, 0x2016, 0x202a, 0x203f, 0x2055, 0x2084, 0x20c0, 0x20f1, + 0x2161, 0x21c8, 0x221d, 0x2257, 0x226b, 0x227c, 0x22a7, 0x2308, + // Entry 20C80 - 20CBF + 0x2363, 0x23a1, 0x23b1, 0x23ea, 0x2453, 0x24a5, 0x24ef, 0x252f, + 0x2540, 0x2572, 0x25bf, 0x260a, 0x2648, 0x2685, 0x26e1, 0x26f5, + 0x2708, 0x271d, 0x2731, 0x2758, 0x27a7, 0x27f0, 0x2826, 0x283d, + 0x285b, 0x2876, 0x2890, 0x28a4, 0x28b5, 0x28da, 0x2912, 0x292a, + 0x294e, 0x2984, 0x29af, 0x29f7, 0x2a1c, 0x2a6e, 0x2ac5, 0x2aff, + 0x2b2b, 0x2b83, 0x2bc3, 0x2bd5, 0x2bea, 0x2c18, 0x2c6b, 0x0094, + 0x0029, 0xffff, 0xffff, 0xffff, 0xffff, 0x0abc, 0x0b2a, 0x0b74, + 0x0bc4, 0x0c35, 0x0ca9, 0x0d26, 0x0da6, 0x0df0, 0x0e34, 0x0e75, + // Entry 20CC0 - 20CFF + 0x0ec8, 0x0f3c, 0x0f89, 0x0fdf, 0x104a, 0x10d6, 0x1144, 0x11b8, + 0x1211, 0x125e, 0xffff, 0xffff, 0x12d9, 0xffff, 0x1346, 0xffff, + 0x13b7, 0x1404, 0x144b, 0x1492, 0xffff, 0xffff, 0x1519, 0x1569, + 0x15c8, 0xffff, 0xffff, 0xffff, 0x1652, 0xffff, 0x16c7, 0x1729, + 0xffff, 0x17af, 0x181a, 0x187f, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1940, 0xffff, 0xffff, 0x19c9, 0x1a3d, 0xffff, 0xffff, 0x1ae5, + 0x1b4a, 0x1b9d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1c87, 0x1cce, 0x1d1b, 0x1d65, 0x1daf, 0xffff, 0xffff, 0x1e76, + // Entry 20D00 - 20D3F + 0xffff, 0x1ecf, 0xffff, 0xffff, 0x1f5c, 0xffff, 0x1fc9, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2070, 0xffff, 0x20d2, 0x2143, 0x21b1, + 0x220a, 0xffff, 0xffff, 0xffff, 0x228d, 0x22ef, 0x234e, 0xffff, + 0xffff, 0x23cb, 0x243c, 0x2495, 0x24d9, 0xffff, 0xffff, 0x255e, + 0x25ae, 0x25f5, 0xffff, 0x2661, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2744, 0x2795, 0x27df, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x28c8, 0xffff, 0xffff, 0x293d, 0xffff, + 0x2995, 0xffff, 0x2a09, 0x2a56, 0x2ab2, 0xffff, 0x2b14, 0x2b6d, + // Entry 20D40 - 20D7F + 0xffff, 0xffff, 0xffff, 0x2c05, 0x2c52, 0x0094, 0x0029, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0b02, 0x0b58, 0x0ba6, 0x0c0c, 0x0c7f, + 0x0cf9, 0x0d78, 0x0dd4, 0x0e1a, 0x0e5c, 0x0ea9, 0x0f12, 0x0f6c, + 0x0fbf, 0x1023, 0x10a4, 0x111c, 0x118e, 0x11f0, 0x1241, 0x1294, + 0xffff, 0xffff, 0x130b, 0xffff, 0x137c, 0xffff, 0x13e7, 0x1430, + 0x1477, 0x14c8, 0xffff, 0xffff, 0x154b, 0x15a1, 0x15f2, 0xffff, + 0xffff, 0xffff, 0x1690, 0xffff, 0x1705, 0x1769, 0xffff, 0x17f3, + 0x185a, 0x18ab, 0xffff, 0xffff, 0xffff, 0xffff, 0x1970, 0xffff, + // Entry 20D80 - 20DBF + 0xffff, 0x1a13, 0x1a8b, 0xffff, 0xffff, 0x1b25, 0x1b7e, 0x1bc7, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1cb3, 0x1cfe, + 0x1d49, 0x1d93, 0x1e03, 0xffff, 0xffff, 0x1ea2, 0xffff, 0x1f07, + 0xffff, 0xffff, 0x1f90, 0xffff, 0x1ff9, 0xffff, 0xffff, 0xffff, + 0xffff, 0x20a2, 0xffff, 0x211a, 0x2189, 0x21e9, 0x223a, 0xffff, + 0xffff, 0xffff, 0x22cb, 0x232b, 0x2382, 0xffff, 0xffff, 0x2413, + 0x2474, 0x24bf, 0x250f, 0xffff, 0xffff, 0x2590, 0x25da, 0x2629, + 0xffff, 0x26b3, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2777, + // Entry 20DC0 - 20DFF + 0x27c3, 0x280b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x28f6, 0xffff, 0xffff, 0x2969, 0xffff, 0x29d3, 0xffff, + 0x2a39, 0x2a90, 0x2ae2, 0xffff, 0x2b4c, 0x2ba3, 0xffff, 0xffff, + 0xffff, 0x2c35, 0x2c8e, 0x0003, 0x0892, 0x0901, 0x08c5, 0x0031, + 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 20E00 - 20E3F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x24ae, 0x24b7, + 0xffff, 0x24c0, 0x003a, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 20E40 - 20E7F + 0xffff, 0x24ae, 0x24b7, 0xffff, 0x24c0, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x24d1, 0x0031, 0x0007, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x24b2, 0x24bb, 0xffff, + // Entry 20E80 - 20EBF + 0x24c4, 0x0003, 0x0004, 0x0173, 0x023d, 0x0008, 0x000d, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0025, 0x003f, 0x0006, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0014, 0x0004, 0x0022, 0x001c, + 0x0019, 0x001f, 0x0001, 0x0014, 0x0349, 0x0001, 0x0014, 0x035a, + 0x0001, 0x0016, 0x0098, 0x0001, 0x0018, 0x042e, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x002e, 0x0000, 0x0000, 0x0004, + 0x003c, 0x0036, 0x0033, 0x0039, 0x0001, 0x0014, 0x0904, 0x0001, + 0x0014, 0x035a, 0x0001, 0x0017, 0x0372, 0x0001, 0x0014, 0x0370, + // Entry 20EC0 - 20EFF + 0x0008, 0x0048, 0x007f, 0x00a4, 0x00b8, 0x012c, 0x0151, 0x0162, + 0x0000, 0x0002, 0x004b, 0x006d, 0x0003, 0x004f, 0x0000, 0x005e, + 0x000d, 0x0006, 0xffff, 0x001e, 0x4144, 0x426c, 0x414c, 0x4220, + 0x4154, 0x4158, 0x415c, 0x4160, 0x4224, 0x4228, 0x4271, 0x000d, + 0x0017, 0xffff, 0x0389, 0x2dd7, 0x2ddf, 0x2de5, 0x2deb, 0x2def, + 0x2df4, 0x2df9, 0x2e02, 0x2e0d, 0x2e16, 0x2e20, 0x0002, 0x0000, + 0x0070, 0x000d, 0x0000, 0xffff, 0x257b, 0x2364, 0x2579, 0x241f, + 0x2579, 0x257b, 0x257b, 0x241f, 0x257d, 0x236a, 0x236c, 0x236e, + // Entry 20F00 - 20F3F + 0x0002, 0x0082, 0x0098, 0x0003, 0x0086, 0x0000, 0x008f, 0x0007, + 0x001d, 0x0108, 0x21e2, 0x21e7, 0x21eb, 0x21ef, 0x21f3, 0x21f7, + 0x0007, 0x002a, 0x0000, 0x0008, 0x0012, 0x001c, 0x0025, 0x002f, + 0x0037, 0x0002, 0x0000, 0x009b, 0x0007, 0x0000, 0x257d, 0x2579, + 0x236e, 0x2579, 0x236e, 0x2364, 0x257d, 0x0001, 0x00a6, 0x0003, + 0x00aa, 0x0000, 0x00b1, 0x0005, 0x0000, 0xffff, 0x04e3, 0x04e6, + 0x04e9, 0x04ec, 0x0005, 0x0017, 0xffff, 0x0432, 0x043d, 0x0448, + 0x0453, 0x0002, 0x00bb, 0x0105, 0x0003, 0x00bf, 0x0000, 0x00e2, + // Entry 20F40 - 20F7F + 0x000a, 0x00cd, 0x00d0, 0x00ca, 0x00d3, 0x00d6, 0x00dc, 0x00df, + 0x0000, 0x0000, 0x00d9, 0x0001, 0x0017, 0x045e, 0x0001, 0x0017, + 0x049f, 0x0001, 0x002a, 0x0041, 0x0001, 0x002a, 0x0046, 0x0001, + 0x002a, 0x004f, 0x0001, 0x002a, 0x0057, 0x0001, 0x002a, 0x0063, + 0x0001, 0x002a, 0x006a, 0x000a, 0x00f0, 0x00f3, 0x00ed, 0x00f6, + 0x00f9, 0x00ff, 0x0102, 0x0000, 0x0000, 0x00fc, 0x0001, 0x0017, + 0x045e, 0x0001, 0x002a, 0x0071, 0x0001, 0x002a, 0x0057, 0x0001, + 0x002a, 0x0046, 0x0001, 0x002a, 0x004f, 0x0001, 0x002a, 0x0057, + // Entry 20F80 - 20FBF + 0x0001, 0x002a, 0x0063, 0x0001, 0x002a, 0x006a, 0x0003, 0x0000, + 0x0000, 0x0109, 0x000a, 0x0117, 0x011a, 0x0114, 0x011d, 0x0120, + 0x0126, 0x0129, 0x0000, 0x0000, 0x0123, 0x0001, 0x0017, 0x045e, + 0x0001, 0x0017, 0x04b3, 0x0001, 0x002a, 0x007e, 0x0001, 0x002a, + 0x0087, 0x0001, 0x0017, 0x04bd, 0x0001, 0x002a, 0x007e, 0x0001, + 0x002a, 0x008d, 0x0001, 0x0017, 0x04d5, 0x0003, 0x013b, 0x0146, + 0x0130, 0x0002, 0x0133, 0x0137, 0x0002, 0x0017, 0x04db, 0x04fc, + 0x0002, 0x002a, 0x0093, 0x00b6, 0x0002, 0x013e, 0x0142, 0x0002, + // Entry 20FC0 - 20FFF + 0x0017, 0x04db, 0x04fc, 0x0002, 0x002a, 0x00d5, 0x00de, 0x0002, + 0x0149, 0x014d, 0x0002, 0x0017, 0x04db, 0x04fc, 0x0002, 0x002a, + 0x00e4, 0x00e8, 0x0004, 0x015f, 0x0159, 0x0156, 0x015c, 0x0001, + 0x0017, 0x0528, 0x0001, 0x0014, 0x0792, 0x0001, 0x0017, 0x0538, + 0x0001, 0x0007, 0x02e9, 0x0004, 0x0170, 0x016a, 0x0167, 0x016d, + 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, + 0x053d, 0x0001, 0x0000, 0x0546, 0x0040, 0x01b4, 0x0000, 0x0000, + 0x01b9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01c4, 0x0000, + // Entry 21000 - 2103F + 0x0000, 0x01cf, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01da, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01e7, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x01ec, 0x0000, 0x0000, 0x01f4, 0x0000, + 0x0000, 0x01fc, 0x0000, 0x0000, 0x0204, 0x0000, 0x0000, 0x020c, + 0x0000, 0x0000, 0x0214, 0x0000, 0x0000, 0x021c, 0x0000, 0x0000, + 0x0000, 0x0224, 0x0000, 0x0229, 0x0000, 0x0000, 0x022e, 0x0000, + 0x0000, 0x0233, 0x0000, 0x0000, 0x0238, 0x0001, 0x01b6, 0x0001, + 0x0017, 0x062b, 0x0002, 0x01bc, 0x01bf, 0x0001, 0x002a, 0x00eb, + // Entry 21040 - 2107F + 0x0003, 0x002a, 0x00f0, 0x00fc, 0x0107, 0x0002, 0x01c7, 0x01ca, + 0x0001, 0x002a, 0x0115, 0x0003, 0x002a, 0x011b, 0x0128, 0x0134, + 0x0002, 0x01d2, 0x01d5, 0x0001, 0x002a, 0x0143, 0x0003, 0x002a, + 0x0149, 0x0156, 0x0162, 0x0002, 0x01dd, 0x01e0, 0x0001, 0x0017, + 0x0885, 0x0005, 0x002a, 0x017d, 0x0186, 0x018b, 0x0171, 0x0191, + 0x0001, 0x01e9, 0x0001, 0x002a, 0x019c, 0x0002, 0x0000, 0x01ef, + 0x0003, 0x002a, 0x01a5, 0x01ba, 0x01ce, 0x0002, 0x0000, 0x01f7, + 0x0003, 0x002a, 0x01e5, 0x01fc, 0x0212, 0x0002, 0x0000, 0x01ff, + // Entry 21080 - 210BF + 0x0003, 0x002a, 0x022b, 0x0242, 0x0258, 0x0002, 0x0000, 0x0207, + 0x0003, 0x002a, 0x0271, 0x0287, 0x029c, 0x0002, 0x0000, 0x020f, + 0x0003, 0x002a, 0x02b4, 0x02cb, 0x02e1, 0x0002, 0x0000, 0x0217, + 0x0003, 0x002a, 0x02fa, 0x030f, 0x0323, 0x0002, 0x0000, 0x021f, + 0x0003, 0x002a, 0x033a, 0x0351, 0x0367, 0x0001, 0x0226, 0x0001, + 0x002a, 0x0380, 0x0001, 0x022b, 0x0001, 0x002a, 0x038d, 0x0001, + 0x0230, 0x0001, 0x002a, 0x0395, 0x0001, 0x0235, 0x0001, 0x0009, + 0x030c, 0x0001, 0x023a, 0x0001, 0x0000, 0x1dc2, 0x0004, 0x0242, + // Entry 210C0 - 210FF + 0x0000, 0x0000, 0x0246, 0x0002, 0x0000, 0x1dc7, 0x234c, 0x0002, + 0x041b, 0x0249, 0x0003, 0x024d, 0x0381, 0x02e7, 0x0098, 0x002a, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0426, 0x047e, 0x04e6, 0x0520, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0572, 0x05ca, 0xffff, + // Entry 21100 - 2113F + 0x061f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0677, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 21140 - 2117F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x039d, 0x04b2, + 0x0098, 0x002a, 0x03cb, 0x03de, 0x03f7, 0x040e, 0x043e, 0x048a, + 0x04f4, 0x0536, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 21180 - 211BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x058a, + 0x05e1, 0xffff, 0x0637, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 211C0 - 211FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0685, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 21200 - 2123F + 0x03a7, 0x04be, 0x0098, 0x002a, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0460, 0x04a0, 0x050c, 0x0556, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x05ac, 0x0602, 0xffff, 0x0659, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 21240 - 2127F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x069d, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 21280 - 212BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x03bb, 0x04d4, 0x0003, 0x041f, 0x0485, 0x0452, + 0x0031, 0x0017, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 212C0 - 212FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1d16, + 0x1d6a, 0xffff, 0x1dd4, 0x0031, 0x0017, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 21300 - 2133F + 0xffff, 0xffff, 0x1d16, 0x1d6a, 0xffff, 0x1dd4, 0x0031, 0x0017, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1d1a, 0x1d6e, 0xffff, + 0x1dd8, 0x0003, 0x0004, 0x058c, 0x09eb, 0x0012, 0x0017, 0x0000, + // Entry 21340 - 2137F + 0x0030, 0x0000, 0x00b7, 0x0000, 0x013e, 0x0169, 0x036f, 0x03f3, + 0x0474, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x04f2, 0x0570, + 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x001d, 0x0003, 0x0026, + 0x002b, 0x0021, 0x0001, 0x0023, 0x0001, 0x0000, 0x0000, 0x0001, + 0x0028, 0x0001, 0x0000, 0x0000, 0x0001, 0x002d, 0x0001, 0x0000, + 0x0000, 0x0005, 0x0036, 0x0000, 0x0000, 0x0000, 0x00a1, 0x0002, + 0x0039, 0x006d, 0x0003, 0x003d, 0x004d, 0x005d, 0x000e, 0x002a, + 0xffff, 0x06b1, 0x06bb, 0x06c8, 0x06d8, 0x06e8, 0x06f5, 0x0705, + // Entry 21380 - 213BF + 0x071e, 0x0737, 0x074d, 0x075d, 0x076a, 0x077d, 0x000e, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x0422, 0x000e, 0x002a, + 0xffff, 0x06b1, 0x06bb, 0x06c8, 0x06d8, 0x06e8, 0x06f5, 0x0705, + 0x071e, 0x0737, 0x074d, 0x075d, 0x076a, 0x077d, 0x0003, 0x0071, + 0x0081, 0x0091, 0x000e, 0x002a, 0xffff, 0x06b1, 0x06bb, 0x06c8, + 0x06d8, 0x06e8, 0x06f5, 0x0705, 0x071e, 0x0737, 0x074d, 0x075d, + 0x076a, 0x077d, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + // Entry 213C0 - 213FF + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, + 0x2426, 0x0422, 0x000e, 0x002a, 0xffff, 0x06b1, 0x06bb, 0x06c8, + 0x06d8, 0x06e8, 0x06f5, 0x0705, 0x071e, 0x0737, 0x074d, 0x075d, + 0x076a, 0x077d, 0x0003, 0x00ab, 0x00b1, 0x00a5, 0x0001, 0x00a7, + 0x0002, 0x002a, 0x078d, 0x0798, 0x0001, 0x00ad, 0x0002, 0x002a, + 0x078d, 0x0798, 0x0001, 0x00b3, 0x0002, 0x002a, 0x078d, 0x0798, + 0x0005, 0x00bd, 0x0000, 0x0000, 0x0000, 0x0128, 0x0002, 0x00c0, + 0x00f4, 0x0003, 0x00c4, 0x00d4, 0x00e4, 0x000e, 0x002a, 0xffff, + // Entry 21400 - 2143F + 0x07a3, 0x07bf, 0x07d5, 0x07e5, 0x07f8, 0x0802, 0x0818, 0x082e, + 0x0847, 0x085a, 0x0867, 0x0877, 0x0890, 0x000e, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x2215, 0x2218, 0x2426, 0x0422, 0x000e, 0x002a, 0xffff, + 0x07a3, 0x07bf, 0x07d5, 0x07e5, 0x07f8, 0x0802, 0x0818, 0x082e, + 0x0847, 0x085a, 0x0867, 0x0877, 0x0890, 0x0003, 0x00f8, 0x0108, + 0x0118, 0x000e, 0x002a, 0xffff, 0x07a3, 0x07bf, 0x07d5, 0x07e5, + 0x07f8, 0x0802, 0x0818, 0x082e, 0x0847, 0x085a, 0x0867, 0x0877, + // Entry 21440 - 2147F + 0x0890, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, + 0x0422, 0x000e, 0x002a, 0xffff, 0x07a3, 0x07bf, 0x07d5, 0x07e5, + 0x07f8, 0x0802, 0x0818, 0x082e, 0x0847, 0x085a, 0x0867, 0x0877, + 0x0890, 0x0003, 0x0132, 0x0138, 0x012c, 0x0001, 0x012e, 0x0002, + 0x002a, 0x078d, 0x0798, 0x0001, 0x0134, 0x0002, 0x002a, 0x078d, + 0x0798, 0x0001, 0x013a, 0x0002, 0x002a, 0x078d, 0x0798, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0147, 0x0000, 0x0158, + // Entry 21480 - 214BF + 0x0004, 0x0155, 0x014f, 0x014c, 0x0152, 0x0001, 0x002a, 0x08a6, + 0x0001, 0x002a, 0x08b8, 0x0001, 0x002a, 0x08c4, 0x0001, 0x002a, + 0x08cf, 0x0004, 0x0166, 0x0160, 0x015d, 0x0163, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0008, 0x0172, 0x01d7, 0x022e, 0x0263, 0x031c, + 0x033c, 0x034d, 0x035e, 0x0002, 0x0175, 0x01a6, 0x0003, 0x0179, + 0x0188, 0x0197, 0x000d, 0x002a, 0xffff, 0x08dd, 0x08f0, 0x0903, + 0x0913, 0x0926, 0x092d, 0x0937, 0x0947, 0x0957, 0x0967, 0x0977, + // Entry 214C0 - 214FF + 0x0981, 0x000d, 0x002a, 0xffff, 0x098e, 0x0995, 0x099c, 0x09a3, + 0x0926, 0x09a7, 0x09ae, 0x09b5, 0x09b9, 0x09b5, 0x09bd, 0x09c1, + 0x000d, 0x002a, 0xffff, 0x09c8, 0x09e4, 0x0903, 0x0913, 0x0926, + 0x092d, 0x0937, 0x0947, 0x0a00, 0x0a1c, 0x0a32, 0x0a48, 0x0003, + 0x01aa, 0x01b9, 0x01c8, 0x000d, 0x002a, 0xffff, 0x08dd, 0x08f0, + 0x0903, 0x0913, 0x0926, 0x092d, 0x0937, 0x0947, 0x0957, 0x0967, + 0x0977, 0x0981, 0x000d, 0x002a, 0xffff, 0x098e, 0x0995, 0x099c, + 0x09a3, 0x0926, 0x09a7, 0x09ae, 0x09b5, 0x09b9, 0x09b5, 0x09bd, + // Entry 21500 - 2153F + 0x09c1, 0x000d, 0x002a, 0xffff, 0x09c8, 0x09e4, 0x0903, 0x0913, + 0x0926, 0x092d, 0x0937, 0x0947, 0x0a00, 0x0a1c, 0x0a32, 0x0a48, + 0x0002, 0x01da, 0x0204, 0x0005, 0x01e0, 0x01e9, 0x01fb, 0x0000, + 0x01f2, 0x0007, 0x002a, 0x0a61, 0x0a6b, 0x0a75, 0x0a82, 0x0a8c, + 0x0a99, 0x0aa9, 0x0007, 0x002a, 0x0ab3, 0x0ab7, 0x0abe, 0x0ac5, + 0x0acc, 0x0ad3, 0x0ada, 0x0007, 0x002a, 0x0ab3, 0x0ab7, 0x0abe, + 0x0ac5, 0x0acc, 0x0ad3, 0x0ada, 0x0007, 0x002a, 0x0ade, 0x0af1, + 0x0b04, 0x0b1a, 0x0b2d, 0x0b43, 0x0b5c, 0x0005, 0x020a, 0x0213, + // Entry 21540 - 2157F + 0x0225, 0x0000, 0x021c, 0x0007, 0x002a, 0x0a61, 0x0a6b, 0x0a75, + 0x0a82, 0x0a8c, 0x0a99, 0x0aa9, 0x0007, 0x002a, 0x0ab3, 0x0ab7, + 0x0abe, 0x0ac5, 0x0acc, 0x0ad3, 0x0ada, 0x0007, 0x002a, 0x0ab3, + 0x0ab7, 0x0abe, 0x0ac5, 0x0acc, 0x0ad3, 0x0ada, 0x0007, 0x002a, + 0x0ade, 0x0af1, 0x0b04, 0x0b1a, 0x0b2d, 0x0b43, 0x0b5c, 0x0002, + 0x0231, 0x024a, 0x0003, 0x0235, 0x023c, 0x0243, 0x0005, 0x0000, + 0xffff, 0x04e3, 0x04e6, 0x04e9, 0x04ec, 0x0005, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x002a, 0xffff, 0x0b6f, + // Entry 21580 - 215BF + 0x0b8d, 0x0bab, 0x0bc9, 0x0003, 0x024e, 0x0255, 0x025c, 0x0005, + 0x0000, 0xffff, 0x04e3, 0x04e6, 0x04e9, 0x04ec, 0x0005, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x002a, 0xffff, + 0x0b6f, 0x0b8d, 0x0bab, 0x0bc9, 0x0002, 0x0266, 0x02c1, 0x0003, + 0x026a, 0x0287, 0x02a4, 0x0007, 0x0275, 0x0278, 0x0272, 0x027b, + 0x027e, 0x0281, 0x0284, 0x0001, 0x002a, 0x0be7, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0001, 0x002a, 0x0c06, 0x0001, + 0x002a, 0x0c16, 0x0001, 0x002a, 0x0c26, 0x0001, 0x002a, 0x0c36, + // Entry 215C0 - 215FF + 0x0007, 0x0292, 0x0295, 0x028f, 0x0298, 0x029b, 0x029e, 0x02a1, + 0x0001, 0x002a, 0x0c49, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, + 0x04f2, 0x0001, 0x002a, 0x0c06, 0x0001, 0x002a, 0x0c16, 0x0001, + 0x002a, 0x0c26, 0x0001, 0x002a, 0x0c36, 0x0007, 0x02af, 0x02b2, + 0x02ac, 0x02b5, 0x02b8, 0x02bb, 0x02be, 0x0001, 0x002a, 0x0be7, + 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0001, 0x002a, + 0x0c06, 0x0001, 0x002a, 0x0c16, 0x0001, 0x002a, 0x0c26, 0x0001, + 0x002a, 0x0c36, 0x0003, 0x02c5, 0x02e2, 0x02ff, 0x0007, 0x02d0, + // Entry 21600 - 2163F + 0x02d3, 0x02cd, 0x02d6, 0x02d9, 0x02dc, 0x02df, 0x0001, 0x002a, + 0x0be7, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0001, + 0x002a, 0x0c06, 0x0001, 0x002a, 0x0c16, 0x0001, 0x002a, 0x0c26, + 0x0001, 0x002a, 0x0c36, 0x0007, 0x02ed, 0x02f0, 0x02ea, 0x02f3, + 0x02f6, 0x02f9, 0x02fc, 0x0001, 0x002a, 0x0be7, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0001, 0x002a, 0x0c06, 0x0001, + 0x002a, 0x0c16, 0x0001, 0x002a, 0x0c26, 0x0001, 0x002a, 0x0c36, + 0x0007, 0x030a, 0x030d, 0x0307, 0x0310, 0x0313, 0x0316, 0x0319, + // Entry 21640 - 2167F + 0x0001, 0x002a, 0x0be7, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, + 0x04f2, 0x0001, 0x002a, 0x0c60, 0x0001, 0x002a, 0x0c6d, 0x0001, + 0x002a, 0x0c7a, 0x0001, 0x002a, 0x0c87, 0x0003, 0x032b, 0x0336, + 0x0320, 0x0002, 0x0323, 0x0327, 0x0002, 0x002a, 0x0c9a, 0x0cf0, + 0x0002, 0x002a, 0x0cc0, 0x0d03, 0x0002, 0x032e, 0x0332, 0x0002, + 0x002a, 0x0d23, 0x0d51, 0x0002, 0x002a, 0x0d3e, 0x0d5a, 0x0001, + 0x0338, 0x0002, 0x002a, 0x0d69, 0x0d78, 0x0004, 0x034a, 0x0344, + 0x0341, 0x0347, 0x0001, 0x0005, 0x0615, 0x0001, 0x0005, 0x0625, + // Entry 21680 - 216BF + 0x0001, 0x0002, 0x0282, 0x0001, 0x0000, 0x2418, 0x0004, 0x035b, + 0x0355, 0x0352, 0x0358, 0x0001, 0x002a, 0x0d7f, 0x0001, 0x002a, + 0x0d8f, 0x0001, 0x002a, 0x0d9c, 0x0001, 0x002a, 0x0da7, 0x0004, + 0x036c, 0x0366, 0x0363, 0x0369, 0x0001, 0x002a, 0x0daf, 0x0001, + 0x002a, 0x0daf, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0005, 0x0375, 0x0000, 0x0000, 0x0000, 0x03e0, 0x0002, 0x0378, + 0x03ac, 0x0003, 0x037c, 0x038c, 0x039c, 0x000e, 0x002a, 0x0e46, + 0x0dce, 0x0de1, 0x0df4, 0x0e0a, 0x0e1a, 0x0e2a, 0x0e39, 0x0e56, + // Entry 216C0 - 216FF + 0x0e66, 0x0e73, 0x0e83, 0x0e93, 0x0e9a, 0x000e, 0x0000, 0x003f, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x2215, 0x2218, 0x2426, 0x0422, 0x000e, 0x002a, 0x0e46, + 0x0dce, 0x0de1, 0x0df4, 0x0e0a, 0x0e1a, 0x0e2a, 0x0e39, 0x0e56, + 0x0e66, 0x0e73, 0x0e83, 0x0e93, 0x0e9a, 0x0003, 0x03b0, 0x03c0, + 0x03d0, 0x000e, 0x002a, 0x0e46, 0x0dce, 0x0de1, 0x0df4, 0x0e0a, + 0x0e1a, 0x0e2a, 0x0e39, 0x0e56, 0x0e66, 0x0e73, 0x0e83, 0x0e93, + 0x0e9a, 0x000e, 0x0000, 0x003f, 0x0033, 0x0035, 0x0037, 0x23b3, + // Entry 21700 - 2173F + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, + 0x0422, 0x000e, 0x002a, 0x0e46, 0x0dce, 0x0de1, 0x0df4, 0x0e0a, + 0x0e1a, 0x0e2a, 0x0e39, 0x0e56, 0x0e66, 0x0e73, 0x0e83, 0x0e93, + 0x0e9a, 0x0003, 0x03e9, 0x03ee, 0x03e4, 0x0001, 0x03e6, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x03eb, 0x0001, 0x0000, 0x04ef, 0x0001, + 0x03f0, 0x0001, 0x0000, 0x04ef, 0x0008, 0x03fc, 0x0000, 0x0000, + 0x0000, 0x0461, 0x0000, 0x0000, 0x9006, 0x0002, 0x03ff, 0x0430, + 0x0003, 0x0403, 0x0412, 0x0421, 0x000d, 0x002a, 0xffff, 0x0ea7, + // Entry 21740 - 2177F + 0x0eb7, 0x0ec7, 0x0edd, 0x0eea, 0x0efd, 0x0f0a, 0x0f20, 0x0f36, + 0x0f52, 0x0f5c, 0x0f66, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, + 0x2218, 0x2426, 0x000d, 0x002a, 0xffff, 0x0ea7, 0x0eb7, 0x0ec7, + 0x0edd, 0x0eea, 0x0efd, 0x0f0a, 0x0f20, 0x0f36, 0x0f52, 0x0f5c, + 0x0f66, 0x0003, 0x0434, 0x0443, 0x0452, 0x000d, 0x002a, 0xffff, + 0x0ea7, 0x0eb7, 0x0ec7, 0x0edd, 0x0eea, 0x0efd, 0x0f0a, 0x0f20, + 0x0f36, 0x0f52, 0x0f5c, 0x0f66, 0x000d, 0x0000, 0xffff, 0x0033, + // Entry 21780 - 217BF + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x2215, 0x2218, 0x2426, 0x000d, 0x002a, 0xffff, 0x0ea7, 0x0eb7, + 0x0ec7, 0x0edd, 0x0eea, 0x0efd, 0x0f0a, 0x0f20, 0x0f36, 0x0f52, + 0x0f5c, 0x0f66, 0x0003, 0x046a, 0x046f, 0x0465, 0x0001, 0x0467, + 0x0001, 0x002a, 0x0f7c, 0x0001, 0x046c, 0x0001, 0x002a, 0x0f7c, + 0x0001, 0x0471, 0x0001, 0x002a, 0x0f7c, 0x0005, 0x047a, 0x0000, + 0x0000, 0x0000, 0x04df, 0x0002, 0x047d, 0x04ae, 0x0003, 0x0481, + 0x0490, 0x049f, 0x000d, 0x002a, 0xffff, 0x0f89, 0x0f94, 0x0f9c, + // Entry 217C0 - 217FF + 0x0fa5, 0x0fb0, 0x0fbd, 0x0fcb, 0x0fd6, 0x0fde, 0x0fe9, 0x0ff4, + 0x100e, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, + 0x000d, 0x002a, 0xffff, 0x1022, 0x1038, 0x1042, 0x1053, 0x1065, + 0x107a, 0x1090, 0x109a, 0x10ac, 0x10bc, 0x10cf, 0x10f3, 0x0003, + 0x04b2, 0x04c1, 0x04d0, 0x000d, 0x002a, 0xffff, 0x0f89, 0x0f94, + 0x0f9c, 0x0fa5, 0x0fb0, 0x0fbd, 0x0fcb, 0x0fd6, 0x0fde, 0x0fe9, + 0x0ff4, 0x100e, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + // Entry 21800 - 2183F + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, + 0x2426, 0x000d, 0x002a, 0xffff, 0x1022, 0x1038, 0x1042, 0x1053, + 0x1065, 0x107a, 0x1090, 0x109a, 0x10ac, 0x10bc, 0x10cf, 0x10f3, + 0x0003, 0x04e8, 0x04ed, 0x04e3, 0x0001, 0x04e5, 0x0001, 0x0000, + 0x06c8, 0x0001, 0x04ea, 0x0001, 0x0000, 0x06c8, 0x0001, 0x04ef, + 0x0001, 0x0000, 0x06c8, 0x0005, 0x04f8, 0x0000, 0x0000, 0x0000, + 0x055d, 0x0002, 0x04fb, 0x052c, 0x0003, 0x04ff, 0x050e, 0x051d, + 0x000d, 0x002a, 0xffff, 0x1115, 0x1137, 0x1159, 0x116c, 0x1176, + // Entry 21840 - 2187F + 0x118c, 0x11a2, 0x11af, 0x11bc, 0x11c9, 0x11d3, 0x11e6, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, 0x002a, + 0xffff, 0x1115, 0x1137, 0x1159, 0x116c, 0x1176, 0x118c, 0x11a2, + 0x11af, 0x11bc, 0x11c9, 0x11d3, 0x11e6, 0x0003, 0x0530, 0x053f, + 0x054e, 0x000d, 0x002a, 0xffff, 0x1115, 0x1137, 0x1159, 0x116c, + 0x1176, 0x118c, 0x11a2, 0x11af, 0x11bc, 0x11c9, 0x11d3, 0x11e6, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + // Entry 21880 - 218BF + 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, + 0x0000, 0xffff, 0x19c9, 0x2635, 0x2657, 0x266a, 0x2674, 0x268a, + 0x26a0, 0x26ad, 0x26ba, 0x26c7, 0x26d1, 0x26e4, 0x0003, 0x0566, + 0x056b, 0x0561, 0x0001, 0x0563, 0x0001, 0x0000, 0x1a1d, 0x0001, + 0x0568, 0x0001, 0x0000, 0x1a1d, 0x0001, 0x056d, 0x0001, 0x0000, + 0x1a1d, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0576, 0x0003, + 0x0580, 0x0586, 0x057a, 0x0001, 0x057c, 0x0002, 0x002a, 0x11ff, + 0x1225, 0x0001, 0x0582, 0x0002, 0x002a, 0x11ff, 0x1225, 0x0001, + // Entry 218C0 - 218FF + 0x0588, 0x0002, 0x002a, 0x11ff, 0x1225, 0x0042, 0x05cf, 0x05d4, + 0x05d9, 0x05de, 0x05f5, 0x060c, 0x0623, 0x063a, 0x064c, 0x065e, + 0x0675, 0x068c, 0x06a3, 0x06be, 0x06d9, 0x06f4, 0x06f9, 0x06fe, + 0x0703, 0x071c, 0x0735, 0x074e, 0x0753, 0x0758, 0x075d, 0x0762, + 0x0767, 0x076c, 0x0771, 0x0776, 0x077b, 0x078f, 0x07a3, 0x07b7, + 0x07cb, 0x07df, 0x07f3, 0x0807, 0x081b, 0x082f, 0x0843, 0x0857, + 0x086b, 0x087f, 0x0893, 0x08a7, 0x08bb, 0x08cf, 0x08e3, 0x08f7, + 0x090b, 0x091f, 0x0924, 0x0929, 0x092e, 0x0944, 0x0956, 0x0968, + // Entry 21900 - 2193F + 0x097e, 0x0990, 0x09a2, 0x09b8, 0x09ca, 0x09dc, 0x09e1, 0x09e6, + 0x0001, 0x05d1, 0x0001, 0x002a, 0x1238, 0x0001, 0x05d6, 0x0001, + 0x002a, 0x1238, 0x0001, 0x05db, 0x0001, 0x002a, 0x1238, 0x0003, + 0x05e2, 0x05e5, 0x05ea, 0x0001, 0x002a, 0x1242, 0x0003, 0x002a, + 0x124f, 0x1269, 0x127d, 0x0002, 0x05ed, 0x05f1, 0x0002, 0x002a, + 0x129a, 0x129a, 0x0002, 0x002a, 0x12b4, 0x12b4, 0x0003, 0x05f9, + 0x05fc, 0x0601, 0x0001, 0x002a, 0x12d8, 0x0003, 0x002a, 0x124f, + 0x1269, 0x127d, 0x0002, 0x0604, 0x0608, 0x0002, 0x002a, 0x129a, + // Entry 21940 - 2197F + 0x129a, 0x0002, 0x002a, 0x12b4, 0x12b4, 0x0003, 0x0610, 0x0613, + 0x0618, 0x0001, 0x002a, 0x12d8, 0x0003, 0x002a, 0x124f, 0x1269, + 0x127d, 0x0002, 0x061b, 0x061f, 0x0002, 0x002a, 0x129a, 0x129a, + 0x0002, 0x002a, 0x12b4, 0x12b4, 0x0003, 0x0627, 0x062a, 0x062f, + 0x0001, 0x002a, 0x12dd, 0x0003, 0x002a, 0x12f9, 0x132b, 0x134b, + 0x0002, 0x0632, 0x0636, 0x0002, 0x002a, 0x137a, 0x137a, 0x0002, + 0x002a, 0x13a3, 0x13a3, 0x0003, 0x063e, 0x0000, 0x0641, 0x0001, + 0x002a, 0x13d6, 0x0002, 0x0644, 0x0648, 0x0002, 0x002a, 0x137a, + // Entry 21980 - 219BF + 0x137a, 0x0002, 0x002a, 0x13a3, 0x13a3, 0x0003, 0x0650, 0x0000, + 0x0653, 0x0001, 0x002a, 0x13d6, 0x0002, 0x0656, 0x065a, 0x0002, + 0x002a, 0x137a, 0x137a, 0x0002, 0x002a, 0x13a3, 0x13a3, 0x0003, + 0x0662, 0x0665, 0x066a, 0x0001, 0x002a, 0x13ed, 0x0003, 0x002a, + 0x13fd, 0x1417, 0x142b, 0x0002, 0x066d, 0x0671, 0x0002, 0x002a, + 0x1448, 0x1448, 0x0002, 0x002a, 0x1465, 0x1465, 0x0003, 0x0679, + 0x067c, 0x0681, 0x0001, 0x002a, 0x148c, 0x0003, 0x002a, 0x13fd, + 0x1417, 0x142b, 0x0002, 0x0684, 0x0688, 0x0002, 0x002a, 0x1448, + // Entry 219C0 - 219FF + 0x1448, 0x0002, 0x002a, 0x1465, 0x1465, 0x0003, 0x0690, 0x0693, + 0x0698, 0x0001, 0x002a, 0x148c, 0x0003, 0x002a, 0x13fd, 0x1417, + 0x142b, 0x0002, 0x069b, 0x069f, 0x0002, 0x002a, 0x1448, 0x1448, + 0x0002, 0x002a, 0x1465, 0x1465, 0x0004, 0x06a8, 0x06ab, 0x06b0, + 0x06bb, 0x0001, 0x002a, 0x1491, 0x0003, 0x002a, 0x14ad, 0x14d0, + 0x14ed, 0x0002, 0x06b3, 0x06b7, 0x0002, 0x002a, 0x1513, 0x1513, + 0x0002, 0x002a, 0x1539, 0x1539, 0x0001, 0x002a, 0x1569, 0x0004, + 0x06c3, 0x06c6, 0x06cb, 0x06d6, 0x0001, 0x002a, 0x1593, 0x0003, + // Entry 21A00 - 21A3F + 0x002a, 0x14ad, 0x14d0, 0x14ed, 0x0002, 0x06ce, 0x06d2, 0x0002, + 0x002a, 0x159b, 0x159b, 0x0002, 0x002a, 0x15b1, 0x15b1, 0x0001, + 0x002a, 0x1569, 0x0004, 0x06de, 0x06e1, 0x06e6, 0x06f1, 0x0001, + 0x002a, 0x1593, 0x0003, 0x002a, 0x14ad, 0x14d0, 0x14ed, 0x0002, + 0x06e9, 0x06ed, 0x0002, 0x002a, 0x159b, 0x159b, 0x0002, 0x002a, + 0x15b1, 0x15b1, 0x0001, 0x002a, 0x1569, 0x0001, 0x06f6, 0x0001, + 0x002a, 0x15d0, 0x0001, 0x06fb, 0x0001, 0x002a, 0x15d0, 0x0001, + 0x0700, 0x0001, 0x002a, 0x15d0, 0x0003, 0x0707, 0x070a, 0x0711, + // Entry 21A40 - 21A7F + 0x0001, 0x002a, 0x1605, 0x0005, 0x002a, 0x1635, 0x1648, 0x1652, + 0x1612, 0x166b, 0x0002, 0x0714, 0x0718, 0x0002, 0x002a, 0x1684, + 0x1684, 0x0002, 0x002a, 0x169e, 0x169e, 0x0003, 0x0720, 0x0723, + 0x072a, 0x0001, 0x002a, 0x1605, 0x0005, 0x002a, 0x1635, 0x1648, + 0x1652, 0x1612, 0x166b, 0x0002, 0x072d, 0x0731, 0x0002, 0x002a, + 0x1684, 0x1684, 0x0002, 0x002a, 0x169e, 0x169e, 0x0003, 0x0739, + 0x073c, 0x0743, 0x0001, 0x002a, 0x1605, 0x0005, 0x002a, 0x1635, + 0x1648, 0x1652, 0x1612, 0x166b, 0x0002, 0x0746, 0x074a, 0x0002, + // Entry 21A80 - 21ABF + 0x002a, 0x1684, 0x1684, 0x0002, 0x002a, 0x169e, 0x169e, 0x0001, + 0x0750, 0x0001, 0x002a, 0x16c2, 0x0001, 0x0755, 0x0001, 0x002a, + 0x16c2, 0x0001, 0x075a, 0x0001, 0x002a, 0x16c2, 0x0001, 0x075f, + 0x0001, 0x002a, 0x16e2, 0x0001, 0x0764, 0x0001, 0x002a, 0x16e2, + 0x0001, 0x0769, 0x0001, 0x002a, 0x16e2, 0x0001, 0x076e, 0x0001, + 0x002a, 0x170e, 0x0001, 0x0773, 0x0001, 0x002a, 0x170e, 0x0001, + 0x0778, 0x0001, 0x002a, 0x170e, 0x0003, 0x0000, 0x077f, 0x0784, + 0x0003, 0x002a, 0x1750, 0x1770, 0x178a, 0x0002, 0x0787, 0x078b, + // Entry 21AC0 - 21AFF + 0x0002, 0x002a, 0x17ad, 0x17ad, 0x0002, 0x002a, 0x17cd, 0x17cd, + 0x0003, 0x0000, 0x0793, 0x0798, 0x0003, 0x002a, 0x1750, 0x1770, + 0x178a, 0x0002, 0x079b, 0x079f, 0x0002, 0x002a, 0x17ad, 0x17ad, + 0x0002, 0x002a, 0x17f7, 0x17f7, 0x0003, 0x0000, 0x07a7, 0x07ac, + 0x0003, 0x002a, 0x1819, 0x182e, 0x183c, 0x0002, 0x07af, 0x07b3, + 0x0002, 0x002a, 0x17ad, 0x1853, 0x0002, 0x002a, 0x17f7, 0x17f7, + 0x0003, 0x0000, 0x07bb, 0x07c0, 0x0003, 0x002a, 0x186b, 0x188b, + 0x18a5, 0x0002, 0x07c3, 0x07c7, 0x0002, 0x002a, 0x18c8, 0x18c8, + // Entry 21B00 - 21B3F + 0x0002, 0x002a, 0x18e8, 0x18e8, 0x0003, 0x0000, 0x07cf, 0x07d4, + 0x0003, 0x002a, 0x186b, 0x188b, 0x18a5, 0x0002, 0x07d7, 0x07db, + 0x0002, 0x002a, 0x18c8, 0x18c8, 0x0002, 0x002a, 0x1912, 0x1912, + 0x0003, 0x0000, 0x07e3, 0x07e8, 0x0003, 0x002a, 0x186b, 0x188b, + 0x18a5, 0x0002, 0x07eb, 0x07ef, 0x0002, 0x002a, 0x18c8, 0x18c8, + 0x0002, 0x002a, 0x1912, 0x1912, 0x0003, 0x0000, 0x07f7, 0x07fc, + 0x0003, 0x002a, 0x1934, 0x1957, 0x1974, 0x0002, 0x07ff, 0x0803, + 0x0002, 0x002a, 0x199a, 0x199a, 0x0002, 0x002a, 0x19bd, 0x19bd, + // Entry 21B40 - 21B7F + 0x0003, 0x0000, 0x080b, 0x0810, 0x0003, 0x002a, 0x1934, 0x1957, + 0x1974, 0x0002, 0x0813, 0x0817, 0x0002, 0x002a, 0x199a, 0x199a, + 0x0002, 0x002a, 0x19ea, 0x19ea, 0x0003, 0x0000, 0x081f, 0x0824, + 0x0003, 0x002a, 0x1934, 0x1957, 0x1974, 0x0002, 0x0827, 0x082b, + 0x0002, 0x002a, 0x199a, 0x199a, 0x0002, 0x002a, 0x19ea, 0x19ea, + 0x0003, 0x0000, 0x0833, 0x0838, 0x0003, 0x002a, 0x1a0f, 0x1a2f, + 0x1a49, 0x0002, 0x083b, 0x083f, 0x0002, 0x002a, 0x1a6c, 0x1a6c, + 0x0002, 0x002a, 0x1a8c, 0x1a8c, 0x0003, 0x0000, 0x0847, 0x084c, + // Entry 21B80 - 21BBF + 0x0003, 0x002a, 0x1a0f, 0x1a2f, 0x1a49, 0x0002, 0x084f, 0x0853, + 0x0002, 0x002a, 0x1a6c, 0x1a6c, 0x0002, 0x002a, 0x1ab6, 0x1ab6, + 0x0003, 0x0000, 0x085b, 0x0860, 0x0003, 0x002a, 0x1a0f, 0x1a2f, + 0x1a49, 0x0002, 0x0863, 0x0867, 0x0002, 0x002a, 0x1a6c, 0x1a6c, + 0x0002, 0x002a, 0x1ab6, 0x1ab6, 0x0003, 0x0000, 0x086f, 0x0874, + 0x0003, 0x002a, 0x1ad8, 0x1afb, 0x1b18, 0x0002, 0x0877, 0x087b, + 0x0002, 0x002a, 0x1b3e, 0x1b3e, 0x0002, 0x002a, 0x1b61, 0x1b61, + 0x0003, 0x0000, 0x0883, 0x0888, 0x0003, 0x002a, 0x1ad8, 0x1afb, + // Entry 21BC0 - 21BFF + 0x1b18, 0x0002, 0x088b, 0x088f, 0x0002, 0x002a, 0x1b3e, 0x1b3e, + 0x0002, 0x002a, 0x1b8e, 0x1b8e, 0x0003, 0x0000, 0x0897, 0x089c, + 0x0003, 0x002a, 0x1ad8, 0x1afb, 0x1b18, 0x0002, 0x089f, 0x08a3, + 0x0002, 0x002a, 0x1b3e, 0x1b3e, 0x0002, 0x002a, 0x1ba9, 0x1ba9, + 0x0003, 0x0000, 0x08ab, 0x08b0, 0x0003, 0x002a, 0x1bce, 0x1bf4, + 0x1c14, 0x0002, 0x08b3, 0x08b7, 0x0002, 0x002a, 0x1c3d, 0x1c3d, + 0x0002, 0x002a, 0x1c63, 0x1c63, 0x0003, 0x0000, 0x08bf, 0x08c4, + 0x0003, 0x002a, 0x1bce, 0x1bf4, 0x1c14, 0x0002, 0x08c7, 0x08cb, + // Entry 21C00 - 21C3F + 0x0002, 0x002a, 0x1c3d, 0x1c3d, 0x0002, 0x002a, 0x1c93, 0x1c93, + 0x0003, 0x0000, 0x08d3, 0x08d8, 0x0003, 0x002a, 0x1bce, 0x1bf4, + 0x1c14, 0x0002, 0x08db, 0x08df, 0x0002, 0x002a, 0x1c3d, 0x1c3d, + 0x0002, 0x002a, 0x1c93, 0x1c93, 0x0003, 0x0000, 0x08e7, 0x08ec, + 0x0003, 0x002a, 0x1cbb, 0x1cdb, 0x1cf5, 0x0002, 0x08ef, 0x08f3, + 0x0002, 0x002a, 0x1d18, 0x1d18, 0x0002, 0x002a, 0x1d38, 0x1d38, + 0x0003, 0x0000, 0x08fb, 0x0900, 0x0003, 0x002a, 0x1cbb, 0x1cdb, + 0x1cf5, 0x0002, 0x0903, 0x0907, 0x0002, 0x002a, 0x1d18, 0x1d18, + // Entry 21C40 - 21C7F + 0x0002, 0x002a, 0x1d62, 0x1d62, 0x0003, 0x0000, 0x090f, 0x0914, + 0x0003, 0x002a, 0x1cbb, 0x1cdb, 0x1cf5, 0x0002, 0x0917, 0x091b, + 0x0002, 0x002a, 0x1d18, 0x1d18, 0x0002, 0x002a, 0x1d62, 0x1d62, + 0x0001, 0x0921, 0x0001, 0x0007, 0x0892, 0x0001, 0x0926, 0x0001, + 0x0007, 0x0892, 0x0001, 0x092b, 0x0001, 0x0007, 0x0892, 0x0003, + 0x0932, 0x0935, 0x0939, 0x0001, 0x002a, 0x1d84, 0x0002, 0x002a, + 0xffff, 0x1d91, 0x0002, 0x093c, 0x0940, 0x0002, 0x002a, 0x1da2, + 0x1da2, 0x0002, 0x002a, 0x1dbc, 0x1dbc, 0x0003, 0x0948, 0x0000, + // Entry 21C80 - 21CBF + 0x094b, 0x0001, 0x002a, 0x1de0, 0x0002, 0x094e, 0x0952, 0x0002, + 0x002a, 0x1da2, 0x1da2, 0x0002, 0x002a, 0x1dbc, 0x1dbc, 0x0003, + 0x095a, 0x0000, 0x095d, 0x0001, 0x002a, 0x1de0, 0x0002, 0x0960, + 0x0964, 0x0002, 0x002a, 0x1da2, 0x1da2, 0x0002, 0x002a, 0x1dbc, + 0x1dbc, 0x0003, 0x096c, 0x096f, 0x0973, 0x0001, 0x002a, 0x1de5, + 0x0002, 0x002a, 0xffff, 0x1df5, 0x0002, 0x0976, 0x097a, 0x0002, + 0x002a, 0x1e09, 0x1e09, 0x0002, 0x002a, 0x1e26, 0x1e26, 0x0003, + 0x0982, 0x0000, 0x0985, 0x0001, 0x002a, 0x1e4d, 0x0002, 0x0988, + // Entry 21CC0 - 21CFF + 0x098c, 0x0002, 0x002a, 0x1e09, 0x1e09, 0x0002, 0x002a, 0x1e26, + 0x1e26, 0x0003, 0x0994, 0x0000, 0x0997, 0x0001, 0x002a, 0x1e4d, + 0x0002, 0x099a, 0x099e, 0x0002, 0x002a, 0x1e09, 0x1e09, 0x0002, + 0x002a, 0x1e26, 0x1e26, 0x0003, 0x09a6, 0x09a9, 0x09ad, 0x0001, + 0x002a, 0x1e55, 0x0002, 0x002a, 0xffff, 0x1e68, 0x0002, 0x09b0, + 0x09b4, 0x0002, 0x002a, 0x1e78, 0x1e78, 0x0002, 0x002a, 0x1e95, + 0x1e95, 0x0003, 0x09bc, 0x0000, 0x09bf, 0x0001, 0x002a, 0x1ebc, + 0x0002, 0x09c2, 0x09c6, 0x0002, 0x002a, 0x1e78, 0x1e78, 0x0002, + // Entry 21D00 - 21D3F + 0x002a, 0x1e95, 0x1e95, 0x0003, 0x09ce, 0x0000, 0x09d1, 0x0001, + 0x002a, 0x1ebc, 0x0002, 0x09d4, 0x09d8, 0x0002, 0x002a, 0x1e78, + 0x1e78, 0x0002, 0x002a, 0x1e95, 0x1e95, 0x0001, 0x09de, 0x0001, + 0x002a, 0x1ec4, 0x0001, 0x09e3, 0x0001, 0x002a, 0x1ec4, 0x0001, + 0x09e8, 0x0001, 0x002a, 0x1ec4, 0x0004, 0x09f0, 0x09f5, 0x09fa, + 0x0a09, 0x0003, 0x0000, 0x1dc7, 0x234c, 0x26fd, 0x0003, 0x002a, + 0x1ed8, 0x1ee6, 0x1f01, 0x0002, 0x0000, 0x09fd, 0x0003, 0x0000, + 0x0a04, 0x0a01, 0x0001, 0x002a, 0x1f1c, 0x0003, 0x002a, 0xffff, + // Entry 21D40 - 21D7F + 0x1f55, 0x1f8b, 0x0002, 0x0bf0, 0x0a0c, 0x0003, 0x0a10, 0x0b50, + 0x0ab0, 0x009e, 0x002a, 0xffff, 0xffff, 0xffff, 0xffff, 0x20bf, + 0x2132, 0x21db, 0x2222, 0x22c7, 0x235a, 0x23f3, 0x248c, 0x24e2, + 0x25cf, 0x261c, 0x2681, 0x2712, 0x276b, 0x27c4, 0x2861, 0x292a, + 0x29bb, 0x2a4c, 0x2a9f, 0x2ae6, 0xffff, 0xffff, 0x2b82, 0xffff, + 0x2c1a, 0xffff, 0x2c99, 0x2ce0, 0x2d1b, 0x2d50, 0xffff, 0xffff, + 0x2e15, 0x2e68, 0x2ed5, 0xffff, 0xffff, 0xffff, 0x2fa2, 0xffff, + 0x3032, 0x309f, 0xffff, 0x315e, 0x31dd, 0x3262, 0xffff, 0xffff, + // Entry 21D80 - 21DBF + 0xffff, 0xffff, 0x336c, 0xffff, 0xffff, 0x343a, 0x34b9, 0xffff, + 0xffff, 0x35b2, 0x3625, 0x367a, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x37fe, 0x3839, 0x3898, 0x38df, 0x3920, 0xffff, + 0xffff, 0x3a5f, 0xffff, 0x3ac0, 0xffff, 0xffff, 0x3bb0, 0xffff, + 0x3c88, 0xffff, 0xffff, 0xffff, 0xffff, 0x3d68, 0xffff, 0x3dd2, + 0x3e69, 0x3ee8, 0x3f43, 0xffff, 0xffff, 0xffff, 0x3fde, 0x4057, + 0x40bc, 0xffff, 0xffff, 0x4183, 0x4261, 0x42cc, 0x4313, 0xffff, + 0xffff, 0x43b7, 0x440a, 0x4445, 0xffff, 0x44d4, 0xffff, 0xffff, + // Entry 21DC0 - 21DFF + 0xffff, 0xffff, 0xffff, 0x4692, 0x46d9, 0x4729, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x487a, 0xffff, 0xffff, + 0x490a, 0xffff, 0x4962, 0xffff, 0x49f3, 0x4a40, 0x4aab, 0xffff, + 0x4b12, 0x4b83, 0xffff, 0xffff, 0xffff, 0x4c6f, 0x4cc8, 0xffff, + 0xffff, 0x1fb2, 0x217f, 0x2523, 0x2579, 0xffff, 0xffff, 0x3c05, + 0x45e4, 0x009e, 0x002a, 0x1ff6, 0x2022, 0x204f, 0x207f, 0x20f2, + 0x2152, 0x21f8, 0x226e, 0x230a, 0x23a0, 0x2439, 0x24a9, 0x24fc, + 0x25ef, 0x2648, 0x26c3, 0x2738, 0x2791, 0x280c, 0x28bf, 0x296c, + // Entry 21E00 - 21E3F + 0x29fd, 0x2a6f, 0x2abc, 0x2b0f, 0x2b45, 0x2b5f, 0x2bab, 0x2be1, + 0x2c3e, 0x2c6f, 0x2cb6, 0x2cf7, 0x2d2f, 0x2d76, 0x2da9, 0x2ddf, + 0x2e38, 0x2e98, 0x2ef2, 0x2f1c, 0x2f36, 0x2f78, 0x2fd2, 0x300f, + 0x3062, 0x30d5, 0x3118, 0x3197, 0x3219, 0x3279, 0x329d, 0x32ca, + 0x3323, 0x3349, 0x3395, 0x33cb, 0x3407, 0x3473, 0x34f5, 0x3574, + 0x3598, 0x35e5, 0x3649, 0x3694, 0x36bb, 0x36e5, 0x3718, 0x3741, + 0x377a, 0x37bc, 0x3815, 0x3862, 0x38b5, 0x38f9, 0x3977, 0x39ea, + 0x3a23, 0x3a7c, 0x3aa6, 0x3af8, 0x3b3d, 0x3b7d, 0x3bd4, 0x3c4f, + // Entry 21E40 - 21E7F + 0x3ca2, 0x3cc9, 0x3ce9, 0x3d06, 0x3d2f, 0x3d8b, 0x3dbb, 0x3e17, + 0x3ea2, 0x3f0f, 0x3f60, 0x3f8a, 0x3fad, 0x3fc4, 0x4014, 0x4083, + 0x40f4, 0x4139, 0x4150, 0x41c9, 0x4290, 0x42e9, 0x4339, 0x436c, + 0x4383, 0x43da, 0x4421, 0x4468, 0x4498, 0x4521, 0x457b, 0x45a1, + 0x45bb, 0x4652, 0x4675, 0x46af, 0x46f3, 0x4740, 0x4764, 0x4781, + 0x47b1, 0x47ea, 0x4820, 0x4840, 0x485d, 0x4897, 0x48c1, 0x48ed, + 0x4924, 0x494b, 0x4997, 0x49d9, 0x4a13, 0x4a6f, 0x4ac5, 0x4aec, + 0x4b44, 0x4baf, 0x4be8, 0x4c08, 0x4c32, 0x4c95, 0x4cfa, 0x353e, + // Entry 21E80 - 21EBF + 0x421c, 0x1fc6, 0x219f, 0x2540, 0x2596, 0xffff, 0x3b66, 0x3c1c, + 0x460d, 0x009e, 0x002b, 0xffff, 0xffff, 0xffff, 0xffff, 0x002a, + 0x0073, 0x00d6, 0x0109, 0x0162, 0x01b2, 0x0205, 0x0258, 0x028b, + 0x0318, 0x0345, 0x0387, 0x03df, 0x041b, 0x044e, 0x04a3, 0x050e, + 0x055d, 0x05ac, 0x05e5, 0x0618, 0xffff, 0xffff, 0x0657, 0xffff, + 0x0696, 0xffff, 0x06d0, 0x06fa, 0x0727, 0x0748, 0xffff, 0xffff, + 0x0784, 0x07bd, 0x0810, 0xffff, 0xffff, 0xffff, 0x083a, 0xffff, + 0x0880, 0x08c6, 0xffff, 0x0912, 0x0961, 0x09b3, 0xffff, 0xffff, + // Entry 21EC0 - 21EFF + 0xffff, 0xffff, 0x09e0, 0xffff, 0xffff, 0x0a1f, 0x0a6e, 0xffff, + 0xffff, 0x0ac0, 0x0b00, 0x0b3a, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0b6a, 0x0b8e, 0x0bcd, 0x0bf7, 0x0c1e, 0xffff, + 0xffff, 0x0c8b, 0xffff, 0x0cb5, 0xffff, 0xffff, 0x0d03, 0xffff, + 0x0d61, 0xffff, 0xffff, 0xffff, 0xffff, 0x0d91, 0xffff, 0x0dca, + 0x0e1c, 0x0e62, 0x0e9c, 0xffff, 0xffff, 0xffff, 0x0ecf, 0x0f1b, + 0x0f54, 0xffff, 0xffff, 0x0f99, 0x0fef, 0x1034, 0x1067, 0xffff, + 0xffff, 0x10a3, 0x10dc, 0x1109, 0xffff, 0x1142, 0xffff, 0xffff, + // Entry 21F00 - 21F3F + 0xffff, 0xffff, 0xffff, 0x11db, 0x120e, 0x123e, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x126b, 0xffff, 0xffff, + 0x1295, 0xffff, 0x12c5, 0xffff, 0x1310, 0x1346, 0x138b, 0xffff, + 0x13bb, 0x1403, 0xffff, 0xffff, 0xffff, 0x1445, 0x1481, 0xffff, + 0xffff, 0x0000, 0x00a0, 0x02b2, 0x02e5, 0xffff, 0xffff, 0x0d34, + 0x119c, 0x0003, 0x0000, 0x0000, 0x0bf4, 0x0042, 0x000b, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 21F40 - 21F7F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0002, 0x0003, 0x00e9, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, 0x0000, 0x0000, + // Entry 21F80 - 21FBF + 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, 0x0023, + 0x001d, 0x001a, 0x0020, 0x0001, 0x0006, 0x000d, 0x0001, 0x0002, + 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0002, 0x0587, 0x0008, + 0x002f, 0x0066, 0x008b, 0x009f, 0x00b7, 0x00c7, 0x00d8, 0x0000, + 0x0002, 0x0032, 0x0054, 0x0003, 0x0036, 0x0000, 0x0045, 0x000d, + 0x002b, 0xffff, 0x14c9, 0x14cd, 0x14d1, 0x14d5, 0x14d9, 0x14dd, + 0x14e1, 0x14e5, 0x14e9, 0x14ed, 0x14f1, 0x14f5, 0x000d, 0x002b, + 0xffff, 0x14f9, 0x1502, 0x150b, 0x1511, 0x14d9, 0x1519, 0x151e, + // Entry 21FC0 - 21FFF + 0x1525, 0x152c, 0x1535, 0x153d, 0x1545, 0x0002, 0x0000, 0x0057, + 0x000d, 0x0000, 0xffff, 0x25ed, 0x2364, 0x2579, 0x241f, 0x2579, + 0x257b, 0x25ed, 0x241f, 0x257d, 0x236a, 0x236c, 0x236e, 0x0002, + 0x0069, 0x007f, 0x0003, 0x006d, 0x0000, 0x0076, 0x0007, 0x002b, + 0x154d, 0x1551, 0x1555, 0x1559, 0x155d, 0x1561, 0x1565, 0x0007, + 0x002b, 0x1569, 0x1573, 0x157d, 0x1586, 0x1590, 0x1598, 0x159f, + 0x0002, 0x0000, 0x0082, 0x0007, 0x0000, 0x25ed, 0x25ed, 0x25ed, + 0x25ed, 0x241f, 0x204d, 0x2146, 0x0001, 0x008d, 0x0003, 0x0091, + // Entry 22000 - 2203F + 0x0000, 0x0098, 0x0005, 0x002b, 0xffff, 0x15a7, 0x15aa, 0x15ad, + 0x15b0, 0x0005, 0x002b, 0xffff, 0x15b3, 0x15c6, 0x15d5, 0x15e4, + 0x0001, 0x00a1, 0x0003, 0x00a5, 0x0000, 0x00ae, 0x0002, 0x00a8, + 0x00ab, 0x0001, 0x0017, 0x2dc6, 0x0001, 0x0017, 0x0420, 0x0002, + 0x00b1, 0x00b4, 0x0001, 0x002b, 0x15f1, 0x0001, 0x002b, 0x15f8, + 0x0003, 0x00c1, 0x0000, 0x00bb, 0x0001, 0x00bd, 0x0002, 0x002b, + 0x15fc, 0x160b, 0x0001, 0x00c3, 0x0002, 0x002b, 0x161a, 0x161d, + 0x0004, 0x00d5, 0x00cf, 0x00cc, 0x00d2, 0x0001, 0x0006, 0x015b, + // Entry 22040 - 2207F + 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, 0x0002, + 0x08e8, 0x0004, 0x00e6, 0x00e0, 0x00dd, 0x00e3, 0x0001, 0x0000, + 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, + 0x0000, 0x0546, 0x0040, 0x012a, 0x0000, 0x0000, 0x012f, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0134, 0x0000, 0x0000, 0x0139, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x013e, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0149, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 22080 - 220BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x014e, + 0x0000, 0x0153, 0x0000, 0x0000, 0x0158, 0x0000, 0x0000, 0x015d, + 0x0000, 0x0000, 0x0162, 0x0001, 0x012c, 0x0001, 0x002b, 0x1620, + 0x0001, 0x0131, 0x0001, 0x0013, 0x017b, 0x0001, 0x0136, 0x0001, + 0x002b, 0x1626, 0x0001, 0x013b, 0x0001, 0x002b, 0x1630, 0x0002, + 0x0141, 0x0144, 0x0001, 0x002b, 0x1639, 0x0003, 0x002b, 0x1640, + 0x1646, 0x15f1, 0x0001, 0x014b, 0x0001, 0x002b, 0x164b, 0x0001, + // Entry 220C0 - 220FF + 0x0150, 0x0001, 0x002b, 0x165c, 0x0001, 0x0155, 0x0001, 0x002b, + 0x1671, 0x0001, 0x015a, 0x0001, 0x002b, 0x1676, 0x0001, 0x015f, + 0x0001, 0x002b, 0x167e, 0x0001, 0x0164, 0x0001, 0x002b, 0x1687, + 0x0003, 0x0004, 0x0000, 0x00ab, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000d, 0x0025, 0x0006, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0014, 0x0004, 0x0022, 0x001c, 0x0019, + 0x001f, 0x0001, 0x0000, 0x1dfa, 0x0001, 0x0000, 0x1e0b, 0x0001, + 0x002b, 0x1697, 0x0001, 0x001d, 0x17a0, 0x0007, 0x002d, 0x0051, + // Entry 22100 - 2213F + 0x0000, 0x0069, 0x0081, 0x0089, 0x009a, 0x0001, 0x002f, 0x0003, + 0x0033, 0x0000, 0x0042, 0x000d, 0x002b, 0xffff, 0x16a3, 0x16aa, + 0x16b2, 0x16b9, 0x16c0, 0x16c8, 0x16d1, 0x16da, 0x16e4, 0x16ed, + 0x16f6, 0x16ff, 0x000d, 0x002b, 0xffff, 0x1709, 0x1717, 0x16b2, + 0x1727, 0x16c0, 0x172e, 0x173a, 0x16da, 0x1748, 0x1754, 0x1762, + 0x176d, 0x0001, 0x0053, 0x0003, 0x0057, 0x0000, 0x0060, 0x0007, + 0x002b, 0x177c, 0x1780, 0x1784, 0x1788, 0x178d, 0x1792, 0x1796, + 0x0007, 0x002b, 0x179a, 0x17a3, 0x17ab, 0x17b3, 0x17bb, 0x17c3, + // Entry 22140 - 2217F + 0x17cc, 0x0001, 0x006b, 0x0003, 0x006f, 0x0000, 0x0078, 0x0002, + 0x0072, 0x0075, 0x0001, 0x001d, 0x050b, 0x0001, 0x001d, 0x0510, + 0x0002, 0x007b, 0x007e, 0x0001, 0x001d, 0x050b, 0x0001, 0x001d, + 0x0510, 0x0001, 0x0083, 0x0001, 0x0085, 0x0002, 0x0027, 0x0196, + 0x019d, 0x0004, 0x0097, 0x0091, 0x008e, 0x0094, 0x0001, 0x002b, + 0x17d3, 0x0001, 0x0001, 0x002d, 0x0001, 0x002b, 0x17e2, 0x0001, + 0x0015, 0x14be, 0x0004, 0x00a8, 0x00a2, 0x009f, 0x00a5, 0x0001, + 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, + // Entry 22180 - 221BF + 0x0001, 0x0000, 0x0546, 0x0004, 0x0000, 0x0000, 0x0000, 0x00b0, + 0x0001, 0x00b2, 0x0003, 0x00b6, 0x0125, 0x00e9, 0x0031, 0x0007, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x24ae, 0x24b7, 0xffff, + // Entry 221C0 - 221FF + 0x24c0, 0x003a, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x24ae, 0x24b7, 0xffff, 0x24c0, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x24d5, 0x0031, 0x0007, 0xffff, + // Entry 22200 - 2223F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x24b2, 0x24bb, 0xffff, 0x24c4, + 0x0002, 0x0003, 0x018a, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, + // Entry 22240 - 2227F + 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, 0x0023, 0x001d, + 0x001a, 0x0020, 0x0001, 0x000a, 0x042e, 0x0001, 0x000a, 0x0440, + 0x0001, 0x0002, 0x0044, 0x0001, 0x0006, 0x020f, 0x0008, 0x002f, + 0x0094, 0x00eb, 0x0120, 0x0158, 0x0168, 0x0179, 0x0000, 0x0002, + 0x0032, 0x0063, 0x0003, 0x0036, 0x0045, 0x0054, 0x000d, 0x0006, + 0xffff, 0x001e, 0x4275, 0x4279, 0x427d, 0x4281, 0x4285, 0x4289, + 0x428d, 0x4291, 0x4295, 0x4299, 0x429d, 0x000d, 0x0000, 0xffff, + 0x257b, 0x2364, 0x2579, 0x241f, 0x2579, 0x2523, 0x2523, 0x241f, + // Entry 22280 - 222BF + 0x257d, 0x236a, 0x236c, 0x236e, 0x000d, 0x002b, 0xffff, 0x17ec, + 0x17f4, 0x17fe, 0x1804, 0x180c, 0x1811, 0x1816, 0x181b, 0x1822, + 0x182a, 0x1831, 0x1839, 0x0003, 0x0067, 0x0076, 0x0085, 0x000d, + 0x0006, 0xffff, 0x001e, 0x4275, 0x4279, 0x427d, 0x4281, 0x4285, + 0x4289, 0x428d, 0x4291, 0x4295, 0x4299, 0x429d, 0x000d, 0x0000, + 0xffff, 0x257b, 0x2364, 0x2579, 0x241f, 0x2579, 0x2523, 0x2523, + 0x241f, 0x257d, 0x236a, 0x236c, 0x236e, 0x000d, 0x002b, 0xffff, + 0x17ec, 0x17f4, 0x17fe, 0x1804, 0x180c, 0x1811, 0x1816, 0x181b, + // Entry 222C0 - 222FF + 0x1822, 0x182a, 0x1831, 0x1839, 0x0002, 0x0097, 0x00c1, 0x0005, + 0x009d, 0x00a6, 0x00b8, 0x0000, 0x00af, 0x0007, 0x002b, 0x1841, + 0x1845, 0x1849, 0x184d, 0x1851, 0x1855, 0x1859, 0x0007, 0x0000, + 0x2296, 0x2296, 0x04dd, 0x2296, 0x241f, 0x257b, 0x241f, 0x0007, + 0x002b, 0x185d, 0x1860, 0x1863, 0x1866, 0x1869, 0x186c, 0x186f, + 0x0007, 0x002b, 0x1872, 0x1879, 0x1881, 0x1888, 0x188f, 0x1897, + 0x18a0, 0x0005, 0x00c7, 0x00d0, 0x00e2, 0x0000, 0x00d9, 0x0007, + 0x002b, 0x1841, 0x1845, 0x1849, 0x184d, 0x1851, 0x1855, 0x1859, + // Entry 22300 - 2233F + 0x0007, 0x0000, 0x2296, 0x2296, 0x04dd, 0x2296, 0x241f, 0x257b, + 0x241f, 0x0007, 0x002b, 0x185d, 0x1860, 0x1863, 0x1866, 0x1869, + 0x186c, 0x186f, 0x0007, 0x002b, 0x1872, 0x1879, 0x1881, 0x1888, + 0x188f, 0x1897, 0x18a0, 0x0002, 0x00ee, 0x0107, 0x0003, 0x00f2, + 0x00f9, 0x0100, 0x0005, 0x0000, 0xffff, 0x1f17, 0x1f1a, 0x1f1d, + 0x1f20, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x0005, 0x002b, 0xffff, 0x18a7, 0x18b6, 0x18c4, 0x18d1, 0x0003, + 0x010b, 0x0112, 0x0119, 0x0005, 0x0000, 0xffff, 0x1f17, 0x1f1a, + // Entry 22340 - 2237F + 0x1f1d, 0x1f20, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x0005, 0x002b, 0xffff, 0x18a7, 0x18b6, 0x18c4, 0x18d1, + 0x0002, 0x0123, 0x0139, 0x0003, 0x0127, 0x0000, 0x0130, 0x0002, + 0x012a, 0x012d, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, + 0x0002, 0x0133, 0x0136, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, + 0x04f2, 0x0003, 0x013d, 0x0146, 0x014f, 0x0002, 0x0140, 0x0143, + 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0002, 0x0149, + 0x014c, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0002, + // Entry 22380 - 223BF + 0x0152, 0x0155, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, + 0x0003, 0x0162, 0x0000, 0x015c, 0x0001, 0x015e, 0x0002, 0x002b, + 0x18e0, 0x18f5, 0x0001, 0x0164, 0x0002, 0x002b, 0x190a, 0x190f, + 0x0004, 0x0176, 0x0170, 0x016d, 0x0173, 0x0001, 0x0005, 0x0615, + 0x0001, 0x0005, 0x0625, 0x0001, 0x0002, 0x0282, 0x0001, 0x0000, + 0x2418, 0x0004, 0x0187, 0x0181, 0x017e, 0x0184, 0x0001, 0x0000, + 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, + 0x0000, 0x0546, 0x0040, 0x01cb, 0x0000, 0x0000, 0x01d0, 0x0000, + // Entry 223C0 - 223FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x01d5, 0x0000, 0x0000, 0x01da, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01df, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x01ea, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01ef, + 0x0000, 0x01f4, 0x0000, 0x0000, 0x01f9, 0x0000, 0x0000, 0x01fe, + 0x0000, 0x0000, 0x0203, 0x0001, 0x01cd, 0x0001, 0x002b, 0x1914, + // Entry 22400 - 2243F + 0x0001, 0x01d2, 0x0001, 0x002b, 0x191b, 0x0001, 0x01d7, 0x0001, + 0x002b, 0x1923, 0x0001, 0x01dc, 0x0001, 0x002b, 0x1928, 0x0002, + 0x01e2, 0x01e5, 0x0001, 0x002b, 0x192d, 0x0003, 0x002b, 0x1933, + 0x1938, 0x193c, 0x0001, 0x01ec, 0x0001, 0x002b, 0x1941, 0x0001, + 0x01f1, 0x0001, 0x002b, 0x1946, 0x0001, 0x01f6, 0x0001, 0x002b, + 0x194b, 0x0001, 0x01fb, 0x0001, 0x002b, 0x194f, 0x0001, 0x0200, + 0x0001, 0x002b, 0x1955, 0x0001, 0x0205, 0x0001, 0x002b, 0x195e, + 0x0003, 0x0004, 0x0000, 0x01a3, 0x0008, 0x0000, 0x0000, 0x0000, + // Entry 22440 - 2247F + 0x0000, 0x0000, 0x0000, 0x000d, 0x0025, 0x0006, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0014, 0x0004, 0x0022, 0x001c, 0x0019, + 0x001f, 0x0001, 0x0006, 0x000d, 0x0001, 0x0002, 0x0010, 0x0001, + 0x0002, 0x001b, 0x0001, 0x0006, 0x020f, 0x0008, 0x002e, 0x0093, + 0x00ea, 0x011f, 0x0160, 0x0170, 0x0181, 0x0192, 0x0002, 0x0031, + 0x0062, 0x0003, 0x0035, 0x0044, 0x0053, 0x000d, 0x002b, 0xffff, + 0x1964, 0x1969, 0x196e, 0x1973, 0x14d9, 0x1979, 0x197e, 0x1983, + 0x1989, 0x198e, 0x1994, 0x1999, 0x000d, 0x0000, 0xffff, 0x0033, + // Entry 22480 - 224BF + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x2215, 0x2218, 0x2426, 0x000d, 0x002b, 0xffff, 0x199e, 0x19a6, + 0x19b0, 0x19b7, 0x14d9, 0x19c1, 0x19c6, 0x19cc, 0x19d5, 0x19e0, + 0x19ea, 0x19f3, 0x0003, 0x0066, 0x0075, 0x0084, 0x000d, 0x002b, + 0xffff, 0x1964, 0x1969, 0x196e, 0x1973, 0x14d9, 0x1979, 0x197e, + 0x1983, 0x1989, 0x198e, 0x1994, 0x1999, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, 0x002b, 0xffff, 0x199e, + // Entry 224C0 - 224FF + 0x19a6, 0x19b0, 0x19b7, 0x14d9, 0x19c1, 0x19c6, 0x19cc, 0x19d5, + 0x19e0, 0x19ea, 0x19f3, 0x0002, 0x0096, 0x00c0, 0x0005, 0x009c, + 0x00a5, 0x00b7, 0x0000, 0x00ae, 0x0007, 0x002b, 0x19fc, 0x19ff, + 0x1a02, 0x1a05, 0x1a08, 0x1a0b, 0x1a0e, 0x0007, 0x0000, 0x257d, + 0x2579, 0x04dd, 0x2151, 0x04dd, 0x2364, 0x257d, 0x0007, 0x002b, + 0x19fc, 0x19ff, 0x1a02, 0x1a05, 0x1a08, 0x1a0b, 0x1a0e, 0x0007, + 0x002b, 0x1a11, 0x1a19, 0x1a23, 0x1a2c, 0x1a36, 0x1a3f, 0x1a49, + 0x0005, 0x00c6, 0x00cf, 0x00e1, 0x0000, 0x00d8, 0x0007, 0x002b, + // Entry 22500 - 2253F + 0x19fc, 0x19ff, 0x1a02, 0x1a05, 0x1a08, 0x1a0b, 0x1a0e, 0x0007, + 0x0000, 0x257d, 0x2579, 0x04dd, 0x2151, 0x04dd, 0x2364, 0x257d, + 0x0007, 0x002b, 0x19fc, 0x19ff, 0x1a02, 0x1a05, 0x1a08, 0x1a0b, + 0x1a0e, 0x0007, 0x002b, 0x1a11, 0x1a19, 0x1a23, 0x1a2c, 0x1a36, + 0x1a3f, 0x1a49, 0x0002, 0x00ed, 0x0106, 0x0003, 0x00f1, 0x00f8, + 0x00ff, 0x0005, 0x0000, 0xffff, 0x04e3, 0x04e6, 0x04e9, 0x04ec, + 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, + 0x0000, 0xffff, 0x04e3, 0x04e6, 0x04e9, 0x04ec, 0x0003, 0x010a, + // Entry 22540 - 2257F + 0x0111, 0x0118, 0x0005, 0x0000, 0xffff, 0x04e3, 0x04e6, 0x04e9, + 0x04ec, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x0005, 0x0000, 0xffff, 0x04e3, 0x04e6, 0x04e9, 0x04ec, 0x0002, + 0x0122, 0x0141, 0x0003, 0x0126, 0x012f, 0x0138, 0x0002, 0x0129, + 0x012c, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0002, + 0x0132, 0x0135, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, + 0x0002, 0x013b, 0x013e, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, + 0x04f2, 0x0003, 0x0145, 0x014e, 0x0157, 0x0002, 0x0148, 0x014b, + // Entry 22580 - 225BF + 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0002, 0x0151, + 0x0154, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0002, + 0x015a, 0x015d, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, + 0x0003, 0x016a, 0x0000, 0x0164, 0x0001, 0x0166, 0x0002, 0x0000, + 0x04f5, 0x04f9, 0x0001, 0x016c, 0x0002, 0x0000, 0x04f5, 0x04f9, + 0x0004, 0x017e, 0x0178, 0x0175, 0x017b, 0x0001, 0x0006, 0x015b, + 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, 0x0000, + 0x2418, 0x0004, 0x018f, 0x0189, 0x0186, 0x018c, 0x0001, 0x0002, + // Entry 225C0 - 225FF + 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, 0x0002, 0x04fe, 0x0001, + 0x0002, 0x0508, 0x0004, 0x01a0, 0x019a, 0x0197, 0x019d, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0004, 0x0000, 0x0000, 0x01a8, 0x01c0, + 0x0001, 0x01aa, 0x0003, 0x01ae, 0x01ba, 0x01b4, 0x0004, 0x0006, + 0xffff, 0xffff, 0xffff, 0x1f5f, 0x0004, 0x0006, 0xffff, 0xffff, + 0xffff, 0x1f5f, 0x0004, 0x0006, 0xffff, 0xffff, 0xffff, 0x1f63, + 0x0001, 0x01c2, 0x0003, 0x01c6, 0x0248, 0x0207, 0x003f, 0x0007, + // Entry 22600 - 2263F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x24cd, 0x003f, + // Entry 22640 - 2267F + 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0004, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0068, + // Entry 22680 - 226BF + 0x003f, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0009, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 226C0 - 226FF + 0x006d, 0x0003, 0x0004, 0x063d, 0x0c0d, 0x0012, 0x0017, 0x0000, + 0x0030, 0x0000, 0x00b7, 0x0000, 0x013e, 0x0169, 0x03a5, 0x043d, + 0x04bb, 0x0000, 0x0000, 0x0000, 0x0000, 0x054d, 0x05a3, 0x0621, + 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x001d, 0x0003, 0x0026, + 0x002b, 0x0021, 0x0001, 0x0023, 0x0001, 0x002b, 0x1a52, 0x0001, + 0x0028, 0x0001, 0x0000, 0x0000, 0x0001, 0x002d, 0x0001, 0x0000, + 0x0000, 0x0005, 0x0036, 0x0000, 0x0000, 0x0000, 0x00a1, 0x0002, + 0x0039, 0x006d, 0x0003, 0x003d, 0x004d, 0x005d, 0x000e, 0x002b, + // Entry 22700 - 2273F + 0xffff, 0x1a74, 0x1a7d, 0x1a84, 0x1a8d, 0x1a96, 0x1a9f, 0x1aaa, + 0x1ab5, 0x1ac2, 0x1acd, 0x1ad8, 0x1ae1, 0x1aea, 0x000e, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x0422, 0x000e, 0x002b, + 0xffff, 0x1a74, 0x1a7d, 0x1a84, 0x1a8d, 0x1a96, 0x1a9f, 0x1aaa, + 0x1ab5, 0x1ac2, 0x1acd, 0x1ad8, 0x1ae1, 0x1aea, 0x0003, 0x0071, + 0x0081, 0x0091, 0x000e, 0x002b, 0xffff, 0x1a74, 0x1a7d, 0x1a84, + 0x1a8d, 0x1a96, 0x1a9f, 0x1aaa, 0x1ab5, 0x1ac2, 0x1acd, 0x1ad8, + // Entry 22740 - 2277F + 0x1ae1, 0x1aea, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, + 0x2426, 0x0422, 0x000e, 0x002b, 0xffff, 0x1a74, 0x1a7d, 0x1a84, + 0x1a8d, 0x1a96, 0x1a9f, 0x1aaa, 0x1ab5, 0x1ac2, 0x1acd, 0x1ad8, + 0x1ae1, 0x1aea, 0x0003, 0x00ab, 0x00b1, 0x00a5, 0x0001, 0x00a7, + 0x0002, 0x002b, 0x1af3, 0x1afe, 0x0001, 0x00ad, 0x0002, 0x0000, + 0x0425, 0x042a, 0x0001, 0x00b3, 0x0002, 0x0000, 0x0425, 0x042a, + 0x0005, 0x00bd, 0x0000, 0x0000, 0x0000, 0x0128, 0x0002, 0x00c0, + // Entry 22780 - 227BF + 0x00f4, 0x0003, 0x00c4, 0x00d4, 0x00e4, 0x000e, 0x002b, 0xffff, + 0x1b09, 0x1b14, 0x1b1d, 0x1b24, 0x1b2d, 0x1b32, 0x1b3d, 0x1b48, + 0x1b55, 0x1b60, 0x1b69, 0x1b72, 0x1b7b, 0x000e, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x2215, 0x2218, 0x2426, 0x0422, 0x000e, 0x002b, 0xffff, + 0x1b09, 0x1b14, 0x1b1d, 0x1b24, 0x1b2d, 0x1b32, 0x1b3d, 0x1b48, + 0x1b55, 0x1b60, 0x1b69, 0x1b72, 0x1b7b, 0x0003, 0x00f8, 0x0108, + 0x0118, 0x000e, 0x002b, 0xffff, 0x1b09, 0x1b14, 0x1b1d, 0x1b24, + // Entry 227C0 - 227FF + 0x1b2d, 0x1b32, 0x1b3d, 0x1b48, 0x1b55, 0x1b60, 0x1b69, 0x1b72, + 0x1b7b, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, + 0x0422, 0x000e, 0x002b, 0xffff, 0x1b09, 0x1b14, 0x1b1d, 0x1b24, + 0x1b2d, 0x1b32, 0x1b3d, 0x1b48, 0x1b55, 0x1b60, 0x1b69, 0x1b72, + 0x1b7b, 0x0003, 0x0132, 0x0138, 0x012c, 0x0001, 0x012e, 0x0002, + 0x002b, 0x1af3, 0x1afe, 0x0001, 0x0134, 0x0002, 0x0000, 0x0425, + 0x042a, 0x0001, 0x013a, 0x0002, 0x0000, 0x0425, 0x042a, 0x0008, + // Entry 22800 - 2283F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0147, 0x0000, 0x0158, + 0x0004, 0x0155, 0x014f, 0x014c, 0x0152, 0x0001, 0x002b, 0x1b86, + 0x0001, 0x002b, 0x1b99, 0x0001, 0x002b, 0x1ba6, 0x0001, 0x0008, + 0x062f, 0x0004, 0x0166, 0x0160, 0x015d, 0x0163, 0x0001, 0x002b, + 0x1bb2, 0x0001, 0x002b, 0x1bb2, 0x0001, 0x0006, 0x022e, 0x0001, + 0x0006, 0x022e, 0x0008, 0x0172, 0x01d7, 0x022e, 0x0263, 0x0358, + 0x0372, 0x0383, 0x0394, 0x0002, 0x0175, 0x01a6, 0x0003, 0x0179, + 0x0188, 0x0197, 0x000d, 0x002b, 0xffff, 0x1bc3, 0x1bcc, 0x1bd5, + // Entry 22840 - 2287F + 0x1bdc, 0x1be5, 0x1bec, 0x1bf5, 0x1bfe, 0x1c07, 0x1c10, 0x1c19, + 0x1c22, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, + 0x000d, 0x002b, 0xffff, 0x1c2b, 0x1c36, 0x1bd5, 0x1c43, 0x1be5, + 0x1bec, 0x1bf5, 0x1c4e, 0x1c5b, 0x1c68, 0x1c77, 0x1c84, 0x0003, + 0x01aa, 0x01b9, 0x01c8, 0x000d, 0x002b, 0xffff, 0x1bc3, 0x1bcc, + 0x1bd5, 0x1bdc, 0x1be5, 0x1bec, 0x1bf5, 0x1bfe, 0x1c07, 0x1c10, + 0x1c19, 0x1c22, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + // Entry 22880 - 228BF + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, + 0x2426, 0x000d, 0x002b, 0xffff, 0x1c2b, 0x1c36, 0x1bd5, 0x1c43, + 0x1be5, 0x1bec, 0x1bf5, 0x1c4e, 0x1c5b, 0x1c68, 0x1c77, 0x1c84, + 0x0002, 0x01da, 0x0204, 0x0005, 0x01e0, 0x01e9, 0x01fb, 0x0000, + 0x01f2, 0x0007, 0x002b, 0x1c8f, 0x1c9b, 0x1ca7, 0x1cb3, 0x1cbf, + 0x1ccb, 0x1cd7, 0x0007, 0x002b, 0x1cde, 0x1ce3, 0x1ce8, 0x1ced, + 0x1cf2, 0x1cf7, 0x1cfc, 0x0007, 0x002b, 0x1cde, 0x1ce3, 0x1ce8, + 0x1ced, 0x1cf2, 0x1cf7, 0x1cfc, 0x0007, 0x002b, 0x1d01, 0x1d13, + // Entry 228C0 - 228FF + 0x1d21, 0x1d33, 0x1d45, 0x1d57, 0x1d67, 0x0005, 0x020a, 0x0213, + 0x0225, 0x0000, 0x021c, 0x0007, 0x002b, 0x1c8f, 0x1c9b, 0x1ca7, + 0x1cb3, 0x1cbf, 0x1ccb, 0x1cd7, 0x0007, 0x002b, 0x1cde, 0x1ce3, + 0x1ce8, 0x1ced, 0x1cf2, 0x1cf7, 0x1cfc, 0x0007, 0x002b, 0x1cde, + 0x1ce3, 0x1ce8, 0x1ced, 0x1cf2, 0x1cf7, 0x1cfc, 0x0007, 0x002b, + 0x1d01, 0x1d13, 0x1d21, 0x1d33, 0x1d45, 0x1d57, 0x1d67, 0x0002, + 0x0231, 0x024a, 0x0003, 0x0235, 0x023c, 0x0243, 0x0005, 0x0000, + 0xffff, 0x04e3, 0x04e6, 0x04e9, 0x04ec, 0x0005, 0x0000, 0xffff, + // Entry 22900 - 2293F + 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x002b, 0xffff, 0x1d75, + 0x1d82, 0x1d8f, 0x1d9c, 0x0003, 0x024e, 0x0255, 0x025c, 0x0005, + 0x0000, 0xffff, 0x04e3, 0x04e6, 0x04e9, 0x04ec, 0x0005, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x002b, 0xffff, + 0x1d75, 0x1d82, 0x1d8f, 0x1d9c, 0x0002, 0x0266, 0x02df, 0x0003, + 0x026a, 0x0291, 0x02b8, 0x000b, 0x0279, 0x027c, 0x0276, 0x027f, + 0x0282, 0x0288, 0x028b, 0x0000, 0x0000, 0x0285, 0x028e, 0x0001, + 0x002b, 0x1da9, 0x0001, 0x002b, 0x1db2, 0x0001, 0x002b, 0x1dbf, + // Entry 22940 - 2297F + 0x0001, 0x002b, 0x1dca, 0x0001, 0x002b, 0x1dd3, 0x0001, 0x002b, + 0x1de0, 0x0001, 0x002b, 0x1df6, 0x0001, 0x002b, 0x1dfd, 0x0001, + 0x002b, 0x1e06, 0x000b, 0x02a0, 0x02a3, 0x029d, 0x02a6, 0x02a9, + 0x02af, 0x02b2, 0x0000, 0x0000, 0x02ac, 0x02b5, 0x0001, 0x002b, + 0x1da9, 0x0001, 0x002b, 0x1db2, 0x0001, 0x002b, 0x1dbf, 0x0001, + 0x002b, 0x1e1a, 0x0001, 0x002b, 0x1e25, 0x0001, 0x002b, 0x1dbf, + 0x0001, 0x002b, 0x1e34, 0x0001, 0x002b, 0x1e3d, 0x0001, 0x002b, + 0x1e06, 0x000b, 0x02c7, 0x02ca, 0x02c4, 0x02cd, 0x02d0, 0x02d6, + // Entry 22980 - 229BF + 0x02d9, 0x0000, 0x0000, 0x02d3, 0x02dc, 0x0001, 0x002b, 0x1da9, + 0x0001, 0x002b, 0x1db2, 0x0001, 0x002b, 0x1dbf, 0x0001, 0x002b, + 0x1e1a, 0x0001, 0x002b, 0x1e25, 0x0001, 0x002b, 0x1de0, 0x0001, + 0x002b, 0x1e34, 0x0001, 0x002b, 0x1e3d, 0x0001, 0x002b, 0x1e06, + 0x0003, 0x02e3, 0x030a, 0x0331, 0x000b, 0x02f2, 0x02f5, 0x02ef, + 0x02f8, 0x02fb, 0x0301, 0x0304, 0x0000, 0x0000, 0x02fe, 0x0307, + 0x0001, 0x002b, 0x1da9, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, + 0x04f2, 0x0001, 0x002b, 0x1dca, 0x0001, 0x002b, 0x1dd3, 0x0001, + // Entry 229C0 - 229FF + 0x002b, 0x1dbf, 0x0001, 0x002b, 0x1df6, 0x0001, 0x002b, 0x1dfd, + 0x0001, 0x002b, 0x1e06, 0x000b, 0x0319, 0x031c, 0x0316, 0x031f, + 0x0322, 0x0328, 0x032b, 0x0000, 0x0000, 0x0325, 0x032e, 0x0001, + 0x002b, 0x1da9, 0x0001, 0x002b, 0x1db2, 0x0001, 0x002b, 0x1dbf, + 0x0001, 0x002b, 0x1dca, 0x0001, 0x002b, 0x1dd3, 0x0001, 0x002b, + 0x1dbf, 0x0001, 0x002b, 0x1df6, 0x0001, 0x002b, 0x1dfd, 0x0001, + 0x002b, 0x1e06, 0x000b, 0x0340, 0x0343, 0x033d, 0x0346, 0x0349, + 0x034f, 0x0352, 0x0000, 0x0000, 0x034c, 0x0355, 0x0001, 0x002b, + // Entry 22A00 - 22A3F + 0x1da9, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0001, + 0x002b, 0x1dca, 0x0001, 0x002b, 0x1dd3, 0x0001, 0x002b, 0x1de0, + 0x0001, 0x002b, 0x1df6, 0x0001, 0x002b, 0x1dfd, 0x0001, 0x002b, + 0x1e06, 0x0003, 0x0367, 0x0000, 0x035c, 0x0002, 0x035f, 0x0363, + 0x0002, 0x002b, 0x1e48, 0x1e6b, 0x0002, 0x002b, 0x1e5e, 0x1e78, + 0x0002, 0x036a, 0x036e, 0x0002, 0x002b, 0x1e5e, 0x1e6b, 0x0002, + 0x0000, 0x04f5, 0x2701, 0x0004, 0x0380, 0x037a, 0x0377, 0x037d, + 0x0001, 0x002b, 0x1e7b, 0x0001, 0x002b, 0x1e8c, 0x0001, 0x002b, + // Entry 22A40 - 22A7F + 0x1e97, 0x0001, 0x0018, 0x042e, 0x0004, 0x0391, 0x038b, 0x0388, + 0x038e, 0x0001, 0x0005, 0x0082, 0x0001, 0x0005, 0x008f, 0x0001, + 0x0005, 0x0099, 0x0001, 0x0005, 0x00a1, 0x0004, 0x03a2, 0x039c, + 0x0399, 0x039f, 0x0001, 0x002b, 0x1bb2, 0x0001, 0x002b, 0x1bb2, + 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, 0x03ae, + 0x0000, 0x0000, 0x0000, 0x0419, 0x042c, 0x0000, 0x9006, 0x0002, + 0x03b1, 0x03e5, 0x0003, 0x03b5, 0x03c5, 0x03d5, 0x000e, 0x002b, + 0x1edd, 0x1ea1, 0x1eaa, 0x1eb3, 0x1ebc, 0x1ec3, 0x1eca, 0x1ed6, + // Entry 22A80 - 22ABF + 0x1ee9, 0x1ef2, 0x1efb, 0x1f04, 0x1f0d, 0x1f12, 0x000e, 0x002b, + 0x1f4c, 0x1f1b, 0x1f22, 0x1f29, 0x1f30, 0x1f37, 0x1f3e, 0x1f45, + 0x1f53, 0x1f5a, 0x1f61, 0x1f68, 0x1f0d, 0x1f6f, 0x000e, 0x002b, + 0x1edd, 0x1ea1, 0x1f76, 0x1eb3, 0x1ebc, 0x1ec3, 0x1eca, 0x1ed6, + 0x1ee9, 0x1ef2, 0x1f81, 0x1f04, 0x1f0d, 0x1f12, 0x0003, 0x03e9, + 0x03f9, 0x0409, 0x000e, 0x002b, 0x1edd, 0x1ea1, 0x1eaa, 0x1eb3, + 0x1ebc, 0x1ec3, 0x1eca, 0x1ed6, 0x1ee9, 0x1ef2, 0x1efb, 0x1f04, + 0x1f0d, 0x1f12, 0x000e, 0x002b, 0x1f4c, 0x1f1b, 0x1f22, 0x1f29, + // Entry 22AC0 - 22AFF + 0x1f30, 0x1f37, 0x1f3e, 0x1f45, 0x1f53, 0x1f5a, 0x1f61, 0x1f68, + 0x1f0d, 0x1f6f, 0x000e, 0x002b, 0x1edd, 0x1ea1, 0x1f76, 0x1eb3, + 0x1ebc, 0x1ec3, 0x1eca, 0x1ed6, 0x1ee9, 0x1ef2, 0x1f81, 0x1f04, + 0x1f0d, 0x1f12, 0x0003, 0x0422, 0x0427, 0x041d, 0x0001, 0x041f, + 0x0001, 0x002b, 0x1f8c, 0x0001, 0x0424, 0x0001, 0x0000, 0x04ef, + 0x0001, 0x0429, 0x0001, 0x0000, 0x04ef, 0x0004, 0x043a, 0x0434, + 0x0431, 0x0437, 0x0001, 0x002b, 0x1e7b, 0x0001, 0x002b, 0x1e8c, + 0x0001, 0x002b, 0x1e8c, 0x0001, 0x002b, 0x1e8c, 0x0005, 0x0443, + // Entry 22B00 - 22B3F + 0x0000, 0x0000, 0x0000, 0x04a8, 0x0002, 0x0446, 0x0477, 0x0003, + 0x044a, 0x0459, 0x0468, 0x000d, 0x002b, 0xffff, 0x1fa4, 0x1fb3, + 0x1fc2, 0x1fd3, 0x1fde, 0x1fef, 0x1ffa, 0x2009, 0x2016, 0x2027, + 0x2032, 0x203d, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, + 0x2426, 0x000d, 0x002b, 0xffff, 0x1fa4, 0x1fb3, 0x1fc2, 0x1fd3, + 0x1fde, 0x1fef, 0x1ffa, 0x2009, 0x2016, 0x2027, 0x2032, 0x204a, + 0x0003, 0x047b, 0x048a, 0x0499, 0x000d, 0x002b, 0xffff, 0x1fa4, + // Entry 22B40 - 22B7F + 0x1fb3, 0x1fc2, 0x1fd3, 0x1fde, 0x1fef, 0x1ffa, 0x2009, 0x2016, + 0x2027, 0x2032, 0x203d, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, + 0x2218, 0x2426, 0x000d, 0x002b, 0xffff, 0x1fa4, 0x1fb3, 0x1fc2, + 0x1fd3, 0x1fde, 0x1fef, 0x1ffa, 0x2009, 0x2016, 0x2027, 0x2032, + 0x2059, 0x0003, 0x04b1, 0x04b6, 0x04ac, 0x0001, 0x04ae, 0x0001, + 0x002c, 0x0000, 0x0001, 0x04b3, 0x0001, 0x002c, 0x0000, 0x0001, + 0x04b8, 0x0001, 0x002c, 0x0000, 0x0008, 0x04c4, 0x0000, 0x0000, + // Entry 22B80 - 22BBF + 0x0000, 0x0529, 0x053c, 0x0000, 0x9006, 0x0002, 0x04c7, 0x04f8, + 0x0003, 0x04cb, 0x04da, 0x04e9, 0x000d, 0x002c, 0xffff, 0x0009, + 0x0014, 0x001b, 0x0029, 0x0037, 0x004b, 0x005f, 0x0068, 0x0073, + 0x007e, 0x0089, 0x009f, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, + 0x2218, 0x2426, 0x000d, 0x002c, 0xffff, 0x0009, 0x0014, 0x00b7, + 0x00ce, 0x00e5, 0x0102, 0x005f, 0x0068, 0x0073, 0x007e, 0x0089, + 0x009f, 0x0003, 0x04fc, 0x050b, 0x051a, 0x000d, 0x002c, 0xffff, + // Entry 22BC0 - 22BFF + 0x0009, 0x0014, 0x001b, 0x0029, 0x0037, 0x004b, 0x005f, 0x0068, + 0x0073, 0x007e, 0x0089, 0x009f, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x2215, 0x2218, 0x2426, 0x000d, 0x002c, 0xffff, 0x0009, 0x0014, + 0x0121, 0x0139, 0x0151, 0x016f, 0x005f, 0x0068, 0x0073, 0x007e, + 0x0089, 0x009f, 0x0003, 0x0532, 0x0537, 0x052d, 0x0001, 0x052f, + 0x0001, 0x002c, 0x018f, 0x0001, 0x0534, 0x0001, 0x002c, 0x018f, + 0x0001, 0x0539, 0x0001, 0x0000, 0x06c8, 0x0004, 0x054a, 0x0544, + // Entry 22C00 - 22C3F + 0x0541, 0x0547, 0x0001, 0x002b, 0x1b86, 0x0001, 0x002b, 0x1b99, + 0x0001, 0x002b, 0x1ba6, 0x0001, 0x001d, 0x17a0, 0x0005, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0553, 0x0001, 0x0555, 0x0001, 0x0557, + 0x004a, 0x002c, 0x01a3, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x01ae, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 22C40 - 22C7F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x01bb, 0x0005, 0x05a9, 0x0000, 0x0000, + 0x0000, 0x060e, 0x0002, 0x05ac, 0x05dd, 0x0003, 0x05b0, 0x05bf, + 0x05ce, 0x000d, 0x002c, 0xffff, 0x01c8, 0x01d7, 0x01e8, 0x01f5, + 0x01fc, 0x0207, 0x0214, 0x021b, 0x0224, 0x022d, 0x0232, 0x023b, + // Entry 22C80 - 22CBF + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, + 0x002c, 0xffff, 0x01c8, 0x01d7, 0x01e8, 0x01f5, 0x01fc, 0x0207, + 0x0214, 0x021b, 0x0224, 0x022d, 0x0232, 0x023b, 0x0003, 0x05e1, + 0x05f0, 0x05ff, 0x000d, 0x002c, 0xffff, 0x01c8, 0x01d7, 0x01e8, + 0x01f5, 0x01fc, 0x0207, 0x0214, 0x021b, 0x0224, 0x022d, 0x0232, + 0x023b, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, + // Entry 22CC0 - 22CFF + 0x000d, 0x002c, 0xffff, 0x01c8, 0x01d7, 0x01e8, 0x01f5, 0x01fc, + 0x0207, 0x0214, 0x021b, 0x0224, 0x022d, 0x0232, 0x023b, 0x0003, + 0x0617, 0x061c, 0x0612, 0x0001, 0x0614, 0x0001, 0x002c, 0x0246, + 0x0001, 0x0619, 0x0001, 0x0000, 0x1a1d, 0x0001, 0x061e, 0x0001, + 0x0000, 0x1a1d, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0627, + 0x0003, 0x0631, 0x0637, 0x062b, 0x0001, 0x062d, 0x0002, 0x002c, + 0x0260, 0x0288, 0x0001, 0x0633, 0x0002, 0x002c, 0x02b4, 0x02c3, + 0x0001, 0x0639, 0x0002, 0x002c, 0x02b4, 0x02c3, 0x0042, 0x0680, + // Entry 22D00 - 22D3F + 0x0685, 0x068a, 0x068f, 0x06ae, 0x06cd, 0x06ec, 0x070b, 0x072a, + 0x0749, 0x0768, 0x0787, 0x07a6, 0x07c9, 0x07ec, 0x080f, 0x0814, + 0x0819, 0x081e, 0x083f, 0x0860, 0x0880, 0x0885, 0x088a, 0x088f, + 0x0894, 0x0899, 0x089e, 0x08a3, 0x08a8, 0x08ad, 0x08c9, 0x08e5, + 0x0901, 0x091d, 0x0939, 0x0955, 0x0971, 0x098d, 0x09a9, 0x09c5, + 0x09e1, 0x09fd, 0x0a19, 0x0a35, 0x0a51, 0x0a6d, 0x0a89, 0x0aa5, + 0x0ac1, 0x0add, 0x0af9, 0x0afe, 0x0b03, 0x0b08, 0x0b26, 0x0b40, + 0x0b5a, 0x0b78, 0x0b92, 0x0bac, 0x0bca, 0x0be4, 0x0bfe, 0x0c03, + // Entry 22D40 - 22D7F + 0x0c08, 0x0001, 0x0682, 0x0001, 0x002c, 0x02ca, 0x0001, 0x0687, + 0x0001, 0x002c, 0x02ca, 0x0001, 0x068c, 0x0001, 0x002c, 0x02ca, + 0x0003, 0x0693, 0x0696, 0x069b, 0x0001, 0x002c, 0x02d5, 0x0003, + 0x002c, 0x02dc, 0x02f0, 0x02f9, 0x0002, 0x069e, 0x06a6, 0x0006, + 0x002c, 0x0345, 0x030b, 0xffff, 0x031b, 0xffff, 0x0331, 0x0006, + 0x002c, 0x0395, 0x035b, 0xffff, 0x036b, 0xffff, 0x0381, 0x0003, + 0x06b2, 0x06b5, 0x06ba, 0x0001, 0x002c, 0x03ab, 0x0003, 0x002c, + 0x02dc, 0x02f0, 0x02f9, 0x0002, 0x06bd, 0x06c5, 0x0006, 0x002c, + // Entry 22D80 - 22DBF + 0x0345, 0x030b, 0xffff, 0x031b, 0xffff, 0x0331, 0x0006, 0x002c, + 0x0395, 0x035b, 0xffff, 0x036b, 0xffff, 0x0381, 0x0003, 0x06d1, + 0x06d4, 0x06d9, 0x0001, 0x002c, 0x03ab, 0x0003, 0x002c, 0x02dc, + 0x02f0, 0x02f9, 0x0002, 0x06dc, 0x06e4, 0x0006, 0x002c, 0x0345, + 0x030b, 0xffff, 0x031b, 0xffff, 0x0331, 0x0006, 0x002c, 0x0395, + 0x035b, 0xffff, 0x036b, 0xffff, 0x0381, 0x0003, 0x06f0, 0x06f3, + 0x06f8, 0x0001, 0x002c, 0x03b2, 0x0003, 0x002c, 0x03bd, 0x03d5, + 0x03e5, 0x0002, 0x06fb, 0x0703, 0x0006, 0x002c, 0x042c, 0x03f9, + // Entry 22DC0 - 22DFF + 0xffff, 0x040d, 0xffff, 0x042c, 0x0006, 0x002c, 0x047f, 0x0448, + 0xffff, 0x0460, 0xffff, 0x047f, 0x0003, 0x070f, 0x0712, 0x0717, + 0x0001, 0x002c, 0x049b, 0x0003, 0x002c, 0x03bd, 0x03d5, 0x03e5, + 0x0002, 0x071a, 0x0722, 0x0006, 0x002c, 0x04cf, 0x04a4, 0xffff, + 0x04b6, 0xffff, 0x04cf, 0x0006, 0x002c, 0x0514, 0x04e5, 0xffff, + 0x04fb, 0xffff, 0x0514, 0x0003, 0x072e, 0x0731, 0x0736, 0x0001, + 0x002c, 0x049b, 0x0003, 0x002c, 0x03bd, 0x03d5, 0x03e5, 0x0002, + 0x0739, 0x0741, 0x0006, 0x002c, 0x04cf, 0x04a4, 0xffff, 0x04b6, + // Entry 22E00 - 22E3F + 0xffff, 0x04cf, 0x0006, 0x002c, 0x0514, 0x04e5, 0xffff, 0x04fb, + 0xffff, 0x0514, 0x0003, 0x074d, 0x0750, 0x0755, 0x0001, 0x002c, + 0x052a, 0x0003, 0x002c, 0x0533, 0x0547, 0x0552, 0x0002, 0x0758, + 0x0760, 0x0006, 0x002c, 0x058e, 0x0564, 0xffff, 0x0576, 0xffff, + 0x058e, 0x0006, 0x002c, 0x05d2, 0x05a8, 0xffff, 0x05ba, 0xffff, + 0x05d2, 0x0003, 0x076c, 0x076f, 0x0774, 0x0001, 0x002c, 0x05ec, + 0x0003, 0x002c, 0x0533, 0x0547, 0x0552, 0x0002, 0x0777, 0x077f, + 0x0006, 0x002c, 0x058e, 0x0564, 0xffff, 0x0576, 0xffff, 0x058e, + // Entry 22E40 - 22E7F + 0x0006, 0x002c, 0x05d2, 0x05a8, 0xffff, 0x05ba, 0xffff, 0x05d2, + 0x0003, 0x078b, 0x078e, 0x0793, 0x0001, 0x002c, 0x05ec, 0x0003, + 0x002c, 0x0533, 0x0547, 0x0552, 0x0002, 0x0796, 0x079e, 0x0006, + 0x002c, 0x0603, 0x05f3, 0xffff, 0x0576, 0xffff, 0x0603, 0x0006, + 0x002c, 0x0627, 0x0617, 0xffff, 0x05ba, 0xffff, 0x0627, 0x0004, + 0x07ab, 0x07ae, 0x07b3, 0x07c6, 0x0001, 0x002c, 0x063b, 0x0003, + 0x002c, 0x0644, 0x0658, 0x0663, 0x0002, 0x07b6, 0x07be, 0x0006, + 0x002c, 0x069f, 0x0675, 0xffff, 0x0687, 0xffff, 0x069f, 0x0006, + // Entry 22E80 - 22EBF + 0x002c, 0x06e3, 0x06b9, 0xffff, 0x06cb, 0xffff, 0x06e3, 0x0001, + 0x002c, 0x06fd, 0x0004, 0x07ce, 0x07d1, 0x07d6, 0x07e9, 0x0001, + 0x002b, 0x1f37, 0x0003, 0x002c, 0x0644, 0x0658, 0x0663, 0x0002, + 0x07d9, 0x07e1, 0x0006, 0x002c, 0x071d, 0x070d, 0xffff, 0x0687, + 0xffff, 0x071d, 0x0006, 0x002c, 0x0741, 0x0731, 0xffff, 0x06cb, + 0xffff, 0x0741, 0x0001, 0x002c, 0x0755, 0x0004, 0x07f1, 0x07f4, + 0x07f9, 0x080c, 0x0001, 0x002b, 0x1f37, 0x0003, 0x002c, 0x0644, + 0x0658, 0x0663, 0x0002, 0x07fc, 0x0804, 0x0006, 0x002c, 0x071d, + // Entry 22EC0 - 22EFF + 0x070d, 0xffff, 0x0687, 0xffff, 0x071d, 0x0006, 0x002c, 0x0741, + 0x06b9, 0xffff, 0x06cb, 0xffff, 0x0741, 0x0001, 0x002c, 0x0755, + 0x0001, 0x0811, 0x0001, 0x002c, 0x0769, 0x0001, 0x0816, 0x0001, + 0x002c, 0x0769, 0x0001, 0x081b, 0x0001, 0x002c, 0x0769, 0x0003, + 0x0822, 0x0825, 0x082c, 0x0001, 0x002c, 0x077f, 0x0005, 0x002c, + 0x0791, 0x079c, 0x07a5, 0x0786, 0x07ac, 0x0002, 0x082f, 0x0837, + 0x0006, 0x002c, 0x07e5, 0x07bb, 0xffff, 0x07cf, 0xffff, 0x07e5, + 0x0006, 0x002c, 0x0825, 0x07fb, 0xffff, 0x080f, 0xffff, 0x0825, + // Entry 22F00 - 22F3F + 0x0003, 0x0843, 0x0846, 0x084d, 0x0001, 0x002c, 0x077f, 0x0005, + 0x002c, 0x0791, 0x079c, 0x07a5, 0x0786, 0x07ac, 0x0002, 0x0850, + 0x0858, 0x0006, 0x002c, 0x07e5, 0x07a5, 0xffff, 0x07cf, 0xffff, + 0x07e5, 0x0006, 0x002c, 0x0825, 0x0791, 0xffff, 0x080f, 0xffff, + 0x0825, 0x0003, 0x0864, 0x0867, 0x086d, 0x0001, 0x002c, 0x077f, + 0x0004, 0x002c, 0x0791, 0x079c, 0x07a5, 0x0786, 0x0002, 0x0870, + 0x0878, 0x0006, 0x002c, 0x07e5, 0x07a5, 0xffff, 0x07cf, 0xffff, + 0x07e5, 0x0006, 0x002c, 0x0825, 0x0791, 0xffff, 0x080f, 0xffff, + // Entry 22F40 - 22F7F + 0x0825, 0x0001, 0x0882, 0x0001, 0x002c, 0x083b, 0x0001, 0x0887, + 0x0001, 0x002c, 0x083b, 0x0001, 0x088c, 0x0001, 0x002c, 0x083b, + 0x0001, 0x0891, 0x0001, 0x002c, 0x084b, 0x0001, 0x0896, 0x0001, + 0x002c, 0x084b, 0x0001, 0x089b, 0x0001, 0x002c, 0x084b, 0x0001, + 0x08a0, 0x0001, 0x002c, 0x085d, 0x0001, 0x08a5, 0x0001, 0x002c, + 0x0876, 0x0001, 0x08aa, 0x0001, 0x002c, 0x0876, 0x0003, 0x0000, + 0x08b1, 0x08b6, 0x0003, 0x002c, 0x0888, 0x08a5, 0x08c0, 0x0002, + 0x08b9, 0x08c1, 0x0006, 0x002c, 0x08fa, 0x08db, 0xffff, 0x08fa, + // Entry 22F80 - 22FBF + 0xffff, 0x08fa, 0x0006, 0x002c, 0x0938, 0x0919, 0xffff, 0x0938, + 0xffff, 0x0938, 0x0003, 0x0000, 0x08cd, 0x08d2, 0x0003, 0x002c, + 0x0957, 0x096c, 0x0978, 0x0002, 0x08d5, 0x08dd, 0x0006, 0x002c, + 0x08fa, 0x08db, 0xffff, 0x08fa, 0xffff, 0x08fa, 0x0006, 0x002c, + 0x0938, 0x0919, 0xffff, 0x0938, 0xffff, 0x0938, 0x0003, 0x0000, + 0x08e9, 0x08ee, 0x0003, 0x002c, 0x0957, 0x096c, 0x0978, 0x0002, + 0x08f1, 0x08f9, 0x0006, 0x002c, 0x08fa, 0x08db, 0xffff, 0x08fa, + 0xffff, 0x08fa, 0x0006, 0x002c, 0x0938, 0x0919, 0xffff, 0x0938, + // Entry 22FC0 - 22FFF + 0xffff, 0x0938, 0x0003, 0x0000, 0x0905, 0x090a, 0x0003, 0x002c, + 0x098b, 0x09a2, 0x09b0, 0x0002, 0x090d, 0x0915, 0x0006, 0x002c, + 0x09e0, 0x09c5, 0xffff, 0x09e0, 0xffff, 0x09e0, 0x0006, 0x002c, + 0x0a16, 0x09fb, 0xffff, 0x0a16, 0xffff, 0x0a16, 0x0003, 0x0000, + 0x0921, 0x0926, 0x0003, 0x002c, 0x0a31, 0x0a46, 0x0a52, 0x0002, + 0x0929, 0x0931, 0x0006, 0x002c, 0x09e0, 0x09c5, 0xffff, 0x09e0, + 0xffff, 0x09e0, 0x0006, 0x002c, 0x0a16, 0x09fb, 0xffff, 0x0a16, + 0xffff, 0x0a16, 0x0003, 0x0000, 0x093d, 0x0942, 0x0003, 0x002c, + // Entry 23000 - 2303F + 0x0a31, 0x0a46, 0x0a52, 0x0002, 0x0945, 0x094d, 0x0006, 0x002c, + 0x09e0, 0x09c5, 0xffff, 0x09e0, 0xffff, 0x09e0, 0x0006, 0x002c, + 0x0a16, 0x09fb, 0xffff, 0x0a16, 0xffff, 0x0a16, 0x0003, 0x0000, + 0x0959, 0x095e, 0x0003, 0x002c, 0x0a65, 0x0a80, 0x0a92, 0x0002, + 0x0961, 0x0969, 0x0006, 0x002c, 0x0aca, 0x0aab, 0xffff, 0x0aca, + 0xffff, 0x0aca, 0x0006, 0x002c, 0x0b08, 0x0ae9, 0xffff, 0x0b08, + 0xffff, 0x0b08, 0x0003, 0x0000, 0x0975, 0x097a, 0x0003, 0x002c, + 0x0b27, 0x0b3c, 0x0b48, 0x0002, 0x097d, 0x0985, 0x0006, 0x002c, + // Entry 23040 - 2307F + 0x0aca, 0x0aab, 0xffff, 0x0aca, 0xffff, 0x0aca, 0x0006, 0x002c, + 0x0b08, 0x0ae9, 0xffff, 0x0b08, 0xffff, 0x0b08, 0x0003, 0x0000, + 0x0991, 0x0996, 0x0003, 0x002c, 0x0b27, 0x0b3c, 0x0b48, 0x0002, + 0x0999, 0x09a1, 0x0006, 0x002c, 0x0aca, 0x0aab, 0xffff, 0x0aca, + 0xffff, 0x0aca, 0x0006, 0x002c, 0x0b08, 0x0ae9, 0xffff, 0x0b08, + 0xffff, 0x0b08, 0x0003, 0x0000, 0x09ad, 0x09b2, 0x0003, 0x002c, + 0x0b5b, 0x0b76, 0x0b88, 0x0002, 0x09b5, 0x09bd, 0x0006, 0x002c, + 0x0bc0, 0x0ba1, 0xffff, 0x0bc0, 0xffff, 0x0bc0, 0x0006, 0x002c, + // Entry 23080 - 230BF + 0x0bfe, 0x0bdf, 0xffff, 0x0bfe, 0xffff, 0x0bfe, 0x0003, 0x0000, + 0x09c9, 0x09ce, 0x0003, 0x002c, 0x0c1d, 0x0c32, 0x0c3e, 0x0002, + 0x09d1, 0x09d9, 0x0006, 0x002c, 0x0bc0, 0x0ba1, 0xffff, 0x0bc0, + 0xffff, 0x0bc0, 0x0006, 0x002c, 0x0bfe, 0x0bdf, 0xffff, 0x0bfe, + 0xffff, 0x0bfe, 0x0003, 0x0000, 0x09e5, 0x09ea, 0x0003, 0x002c, + 0x0c1d, 0x0c32, 0x0c3e, 0x0002, 0x09ed, 0x09f5, 0x0006, 0x002c, + 0x0bc0, 0x0ba1, 0xffff, 0x0bc0, 0xffff, 0x0bc0, 0x0006, 0x002c, + 0x0bfe, 0x0bdf, 0xffff, 0x0bfe, 0xffff, 0x0bfe, 0x0003, 0x0000, + // Entry 230C0 - 230FF + 0x0a01, 0x0a06, 0x0003, 0x002c, 0x0c51, 0x0c6c, 0x0c7e, 0x0002, + 0x0a09, 0x0a11, 0x0006, 0x002c, 0x0cb6, 0x0c97, 0xffff, 0x0cb6, + 0xffff, 0x0cb6, 0x0006, 0x002c, 0x0cf4, 0x0cd5, 0xffff, 0x0cf4, + 0xffff, 0x0cf4, 0x0003, 0x0000, 0x0a1d, 0x0a22, 0x0003, 0x002c, + 0x0d13, 0x0d28, 0x0d34, 0x0002, 0x0a25, 0x0a2d, 0x0006, 0x002c, + 0x0cb6, 0x0c97, 0xffff, 0x0cb6, 0xffff, 0x0cb6, 0x0006, 0x002c, + 0x0cf4, 0x0cd5, 0xffff, 0x0cf4, 0xffff, 0x0cf4, 0x0003, 0x0000, + 0x0a39, 0x0a3e, 0x0003, 0x002c, 0x0d13, 0x0d28, 0x0d34, 0x0002, + // Entry 23100 - 2313F + 0x0a41, 0x0a49, 0x0006, 0x002c, 0x0cb6, 0x0c97, 0xffff, 0x0cb6, + 0xffff, 0x0cb6, 0x0006, 0x002c, 0x0cf4, 0x0cd5, 0xffff, 0x0cf4, + 0xffff, 0x0cf4, 0x0003, 0x0000, 0x0a55, 0x0a5a, 0x0003, 0x002c, + 0x0d47, 0x0d60, 0x0d70, 0x0002, 0x0a5d, 0x0a65, 0x0006, 0x002c, + 0x0da4, 0x0d87, 0xffff, 0x0da4, 0xffff, 0x0da4, 0x0006, 0x002c, + 0x0dde, 0x0dc1, 0xffff, 0x0dde, 0xffff, 0x0dde, 0x0003, 0x0000, + 0x0a71, 0x0a76, 0x0003, 0x002c, 0x0dfb, 0x0e10, 0x0e1c, 0x0002, + 0x0a79, 0x0a81, 0x0006, 0x002c, 0x0da4, 0x0d87, 0xffff, 0x0da4, + // Entry 23140 - 2317F + 0xffff, 0x0da4, 0x0006, 0x002c, 0x0dde, 0x0dc1, 0xffff, 0x0dde, + 0xffff, 0x0dde, 0x0003, 0x0000, 0x0a8d, 0x0a92, 0x0003, 0x002c, + 0x0dfb, 0x0e10, 0x0e31, 0x0002, 0x0a95, 0x0a9d, 0x0006, 0x002c, + 0x0da4, 0x0d87, 0xffff, 0x0da4, 0xffff, 0x0da4, 0x0006, 0x002c, + 0x0dde, 0x0dc1, 0xffff, 0x0dde, 0xffff, 0x0dde, 0x0003, 0x0000, + 0x0aa9, 0x0aae, 0x0003, 0x002c, 0x0e44, 0x0e5b, 0x0e69, 0x0002, + 0x0ab1, 0x0ab9, 0x0006, 0x002c, 0x0e92, 0x0e7e, 0xffff, 0x0e92, + 0xffff, 0x0e92, 0x0006, 0x002c, 0x0ebe, 0x0eaa, 0xffff, 0x0ebe, + // Entry 23180 - 231BF + 0xffff, 0x0ebe, 0x0003, 0x0000, 0x0ac5, 0x0aca, 0x0003, 0x002c, + 0x0ed6, 0x0ee8, 0x0eef, 0x0002, 0x0acd, 0x0ad5, 0x0006, 0x002c, + 0x0e92, 0x0e7e, 0xffff, 0x0e92, 0xffff, 0x0e92, 0x0006, 0x002c, + 0x0ebe, 0x0eaa, 0xffff, 0x0ebe, 0xffff, 0x0ebe, 0x0003, 0x0000, + 0x0ae1, 0x0ae6, 0x0003, 0x002c, 0x0ed6, 0x0ee8, 0x0eef, 0x0002, + 0x0ae9, 0x0af1, 0x0006, 0x002c, 0x0e92, 0x0e7e, 0xffff, 0x0e92, + 0xffff, 0x0e92, 0x0006, 0x002c, 0x0ebe, 0x0eaa, 0xffff, 0x0ebe, + 0xffff, 0x0ebe, 0x0001, 0x0afb, 0x0001, 0x0007, 0x0892, 0x0001, + // Entry 231C0 - 231FF + 0x0b00, 0x0001, 0x002c, 0x0eff, 0x0001, 0x0b05, 0x0001, 0x002c, + 0x0eff, 0x0003, 0x0b0c, 0x0b0f, 0x0b13, 0x0001, 0x002c, 0x0f17, + 0x0002, 0x002c, 0xffff, 0x0f1e, 0x0002, 0x0b16, 0x0b1e, 0x0006, + 0x002c, 0x0f52, 0x0f2c, 0xffff, 0x0f3c, 0xffff, 0x0f52, 0x0006, + 0x002c, 0x0f8e, 0x0f68, 0xffff, 0x0f78, 0xffff, 0x0f8e, 0x0003, + 0x0b2a, 0x0000, 0x0b2d, 0x0001, 0x002c, 0x0f17, 0x0002, 0x0b30, + 0x0b38, 0x0006, 0x002c, 0x0fa4, 0x0f2c, 0xffff, 0x0f3c, 0xffff, + 0x0fa4, 0x0006, 0x002c, 0x0fb8, 0x0f68, 0xffff, 0x0f78, 0xffff, + // Entry 23200 - 2323F + 0x0fb8, 0x0003, 0x0b44, 0x0000, 0x0b47, 0x0001, 0x002c, 0x0fcc, + 0x0002, 0x0b4a, 0x0b52, 0x0006, 0x002c, 0x0fa4, 0x0f2c, 0xffff, + 0x0f3c, 0xffff, 0x0fa4, 0x0006, 0x002c, 0x0fb8, 0x0f68, 0xffff, + 0x0f78, 0xffff, 0x0fb8, 0x0003, 0x0b5e, 0x0b61, 0x0b65, 0x0001, + 0x002c, 0x0fd3, 0x0002, 0x002c, 0xffff, 0x0fda, 0x0002, 0x0b68, + 0x0b70, 0x0006, 0x002c, 0x1011, 0x0fe8, 0xffff, 0x0ff8, 0xffff, + 0x1011, 0x0006, 0x002c, 0x1050, 0x1027, 0xffff, 0x1037, 0xffff, + 0x1050, 0x0003, 0x0b7c, 0x0000, 0x0b7f, 0x0001, 0x002c, 0x1066, + // Entry 23240 - 2327F + 0x0002, 0x0b82, 0x0b8a, 0x0006, 0x002c, 0x1084, 0x0fe8, 0xffff, + 0x106d, 0xffff, 0x1084, 0x0006, 0x002c, 0x1098, 0x1027, 0xffff, + 0x1098, 0xffff, 0x1098, 0x0003, 0x0b96, 0x0000, 0x0b99, 0x0001, + 0x002c, 0x1066, 0x0002, 0x0b9c, 0x0ba4, 0x0006, 0x002c, 0x1084, + 0x0fe8, 0xffff, 0x106d, 0xffff, 0x1084, 0x0006, 0x002c, 0x1098, + 0x1027, 0xffff, 0x10ac, 0xffff, 0x1098, 0x0003, 0x0bb0, 0x0bb3, + 0x0bb7, 0x0001, 0x002c, 0x10c3, 0x0002, 0x002c, 0xffff, 0x10ce, + 0x0002, 0x0bba, 0x0bc2, 0x0006, 0x002c, 0x1108, 0x10d9, 0xffff, + // Entry 23280 - 232BF + 0x10ed, 0xffff, 0x1108, 0x0006, 0x002c, 0x114f, 0x1120, 0xffff, + 0x1134, 0xffff, 0x114f, 0x0003, 0x0bce, 0x0000, 0x0bd1, 0x0001, + 0x002c, 0x03ab, 0x0002, 0x0bd4, 0x0bdc, 0x0006, 0x002c, 0x118e, + 0x1167, 0xffff, 0x1177, 0xffff, 0x118e, 0x0006, 0x002c, 0x11c9, + 0x11a2, 0xffff, 0x11b2, 0xffff, 0x11c9, 0x0003, 0x0be8, 0x0000, + 0x0beb, 0x0001, 0x002c, 0x03ab, 0x0002, 0x0bee, 0x0bf6, 0x0006, + 0x002c, 0x118e, 0x1167, 0xffff, 0x1177, 0xffff, 0x118e, 0x0006, + 0x002c, 0x11c9, 0x11a2, 0xffff, 0x11b2, 0xffff, 0x11c9, 0x0001, + // Entry 232C0 - 232FF + 0x0c00, 0x0001, 0x002c, 0x11dd, 0x0001, 0x0c05, 0x0001, 0x002c, + 0x11dd, 0x0001, 0x0c0a, 0x0001, 0x002c, 0x11dd, 0x0004, 0x0c12, + 0x0c17, 0x0c1c, 0x0c2b, 0x0003, 0x002c, 0x11e6, 0x11fa, 0x1204, + 0x0003, 0x002c, 0x1208, 0x1215, 0x122b, 0x0002, 0x0000, 0x0c1f, + 0x0003, 0x0000, 0x0c26, 0x0c23, 0x0001, 0x002c, 0x1243, 0x0003, + 0x002c, 0xffff, 0x1268, 0x1287, 0x0002, 0x0000, 0x0c2e, 0x0003, + 0x0cd1, 0x0d70, 0x0c32, 0x009d, 0x002c, 0x12a4, 0x12be, 0x12dd, + 0x12fc, 0x133a, 0x13a0, 0x13f2, 0x144f, 0x14bc, 0x1538, 0x15bd, + // Entry 23300 - 2333F + 0x161f, 0x1669, 0x16bf, 0x1729, 0x1794, 0x1804, 0x186f, 0x18fc, + 0x1982, 0x1a11, 0x1a8e, 0x1b06, 0x1b7b, 0x1bef, 0x1c2f, 0x1c43, + 0x1c73, 0x1cb7, 0x1cf5, 0x1d37, 0x1d65, 0x1db9, 0x1e05, 0x1e53, + 0x1e9b, 0x1eba, 0x1eef, 0x1f4e, 0x1faf, 0x1fe7, 0x1ffd, 0x2024, + 0x205a, 0x20a0, 0x20d7, 0x2148, 0x219a, 0x21cd, 0x223c, 0x229e, + 0x22da, 0x22fd, 0x234b, 0x236a, 0x239f, 0x23e3, 0x2400, 0x243c, + 0x24b3, 0x2509, 0x252a, 0x2570, 0x2603, 0x265f, 0x2697, 0x26a9, + 0x26d0, 0x26e9, 0x270e, 0x2733, 0x276c, 0x27c2, 0x281e, 0x286a, + // Entry 23340 - 2337F + 0x28cf, 0x2941, 0x2960, 0x2995, 0x29d5, 0x2a09, 0x2a59, 0x2a75, + 0x2aae, 0x2b48, 0x2b72, 0x2baa, 0x2bbe, 0x2be5, 0x2c00, 0x2c35, + 0x2c81, 0x2cbf, 0x2d42, 0x2daf, 0x2e0f, 0x2e4f, 0x2e65, 0x2e79, + 0x2eae, 0x2f23, 0x2f8d, 0x2fe1, 0x2ff5, 0x303c, 0x30c4, 0x312c, + 0x317e, 0x31be, 0x31d0, 0x3214, 0x3268, 0x32ba, 0x330a, 0x334f, + 0x33b3, 0x33c9, 0x33df, 0x33fb, 0x3413, 0x343d, 0x348b, 0x34d3, + 0x350f, 0x352a, 0x3542, 0x355b, 0x357e, 0x3596, 0x35ac, 0x35d6, + 0x3616, 0x3632, 0x365c, 0x3698, 0x36c8, 0x3718, 0x374a, 0x37b2, + // Entry 23380 - 233BF + 0x3814, 0x3854, 0x388a, 0x38f4, 0x393c, 0x3952, 0x396b, 0x39a6, + 0x3a04, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2b14, 0x009d, 0x002c, 0xffff, 0xffff, 0xffff, 0xffff, + 0x131b, 0x138c, 0x13dc, 0x1432, 0x149d, 0x150e, 0x15a0, 0x160b, + 0x1657, 0x16a1, 0x170f, 0x1771, 0x17ee, 0x1844, 0x18d9, 0x1956, + 0x19ee, 0x1a6b, 0x1ae8, 0x1b56, 0x1bd9, 0xffff, 0xffff, 0x1c5b, + 0xffff, 0x1cde, 0xffff, 0x1d4f, 0x1da5, 0x1df5, 0x1e39, 0xffff, + 0xffff, 0x1ed5, 0x1f37, 0x1f9d, 0xffff, 0xffff, 0xffff, 0x2041, + // Entry 233C0 - 233FF + 0xffff, 0x20b8, 0x2129, 0xffff, 0x21ae, 0x221f, 0x228a, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2387, 0xffff, 0xffff, 0x241b, 0x2492, + 0xffff, 0xffff, 0x253e, 0x25e8, 0x264d, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2758, 0x27a8, 0x280a, 0x285a, 0x289e, + 0xffff, 0xffff, 0x297f, 0xffff, 0x29eb, 0xffff, 0xffff, 0x2a8e, + 0xffff, 0x2b60, 0xffff, 0xffff, 0xffff, 0xffff, 0x2c19, 0xffff, + 0x2c97, 0x2d23, 0x2d94, 0x2df9, 0xffff, 0xffff, 0xffff, 0x2e8b, + 0x2f08, 0x2f6d, 0xffff, 0xffff, 0x3012, 0x30a4, 0x3118, 0x3168, + // Entry 23400 - 2343F + 0xffff, 0xffff, 0x31fc, 0x3258, 0x329c, 0xffff, 0x3327, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x3429, 0x3479, 0x34bf, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x35c0, 0xffff, + 0xffff, 0x3648, 0xffff, 0x36aa, 0xffff, 0x372e, 0x3796, 0x37fe, + 0xffff, 0x386c, 0x38da, 0xffff, 0xffff, 0xffff, 0x3990, 0x39e6, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2b02, 0x009d, 0x002c, 0xffff, 0xffff, 0xffff, 0xffff, 0x1364, + 0x13bf, 0x1413, 0x1477, 0x14e6, 0x156d, 0x15e5, 0x163c, 0x1686, + // Entry 23440 - 2347F + 0x16e8, 0x174e, 0x17c2, 0x1825, 0x18a5, 0x192a, 0x19b9, 0x1a3f, + 0x1abc, 0x1b2f, 0x1bab, 0x1c10, 0xffff, 0xffff, 0x1c96, 0xffff, + 0x1d17, 0xffff, 0x1d86, 0x1dd8, 0x1e20, 0x1e78, 0xffff, 0xffff, + 0x1f14, 0x1f70, 0x1fcc, 0xffff, 0xffff, 0xffff, 0x207e, 0xffff, + 0x2101, 0x2172, 0xffff, 0x21f7, 0x2264, 0x22bd, 0xffff, 0xffff, + 0xffff, 0xffff, 0x23c2, 0xffff, 0xffff, 0x2468, 0x24df, 0xffff, + 0xffff, 0x25ad, 0x2629, 0x267c, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x278b, 0x27e7, 0x283d, 0x2885, 0x2909, 0xffff, + // Entry 23480 - 234BF + 0xffff, 0x29b6, 0xffff, 0x2a32, 0xffff, 0xffff, 0x2ad9, 0xffff, + 0x2b8f, 0xffff, 0xffff, 0xffff, 0xffff, 0x2c5c, 0xffff, 0x2cf2, + 0x2d6c, 0x2dd5, 0x2e30, 0xffff, 0xffff, 0xffff, 0x2edc, 0x2f49, + 0x2fb8, 0xffff, 0xffff, 0x3071, 0x30ef, 0x314b, 0x319f, 0xffff, + 0xffff, 0x3237, 0x3283, 0x32e3, 0xffff, 0x3382, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x345c, 0x34a6, 0x34f2, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x35f7, 0xffff, 0xffff, + 0x367b, 0xffff, 0x36f1, 0xffff, 0x3771, 0x37d9, 0x3835, 0xffff, + // Entry 234C0 - 234FF + 0x38b3, 0x3919, 0xffff, 0xffff, 0xffff, 0x39c7, 0x3a2d, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2b2f, + 0x0003, 0x0004, 0x03f1, 0x082e, 0x0011, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0016, 0x0000, 0x002e, 0x0059, 0x0000, 0x0259, 0x02cb, + 0x0000, 0x0000, 0x0000, 0x0000, 0x02e2, 0x03da, 0x0001, 0x0018, + 0x0001, 0x001a, 0x0003, 0x0000, 0x0000, 0x001e, 0x000e, 0x002d, + 0xffff, 0x0000, 0x0019, 0x002f, 0x003c, 0x004c, 0x0053, 0x0069, + 0x007f, 0x009b, 0x00ab, 0x00b5, 0x00c5, 0x00d8, 0x0008, 0x0000, + // Entry 23500 - 2353F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0037, 0x0000, 0x0048, 0x0004, + 0x0045, 0x003f, 0x003c, 0x0042, 0x0001, 0x002d, 0x00eb, 0x0001, + 0x0021, 0x0433, 0x0001, 0x0007, 0x008f, 0x0001, 0x0021, 0x043e, + 0x0004, 0x0056, 0x0050, 0x004d, 0x0053, 0x0001, 0x002d, 0x00fc, + 0x0001, 0x002d, 0x00fc, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, + 0x022e, 0x0008, 0x0062, 0x00c7, 0x011e, 0x0153, 0x020c, 0x0226, + 0x0237, 0x0248, 0x0002, 0x0065, 0x0096, 0x0003, 0x0069, 0x0078, + 0x0087, 0x000d, 0x002d, 0xffff, 0x010b, 0x0115, 0x0122, 0x0132, + // Entry 23540 - 2357F + 0x0145, 0x014c, 0x0156, 0x0163, 0x016d, 0x017a, 0x018d, 0x0197, + 0x000d, 0x000c, 0xffff, 0x0126, 0x4e36, 0x0131, 0x014e, 0x4e3d, + 0x4e41, 0x013c, 0x014e, 0x4e48, 0x014e, 0x0152, 0x0156, 0x000d, + 0x002d, 0xffff, 0x01a4, 0x01b4, 0x0122, 0x0132, 0x0145, 0x014c, + 0x01c7, 0x01d7, 0x01e7, 0x01fa, 0x0210, 0x0220, 0x0003, 0x009a, + 0x00a9, 0x00b8, 0x000d, 0x002d, 0xffff, 0x010b, 0x0115, 0x0122, + 0x0132, 0x0145, 0x014c, 0x0156, 0x0163, 0x016d, 0x017a, 0x018d, + 0x0197, 0x000d, 0x000c, 0xffff, 0x0126, 0x4e36, 0x0131, 0x014e, + // Entry 23580 - 235BF + 0x4e3d, 0x4e41, 0x013c, 0x014e, 0x4e48, 0x014e, 0x0152, 0x0156, + 0x000d, 0x002d, 0xffff, 0x01a4, 0x01b4, 0x0122, 0x0132, 0x0145, + 0x014c, 0x01c7, 0x01d7, 0x01e7, 0x01fa, 0x0210, 0x0220, 0x0002, + 0x00ca, 0x00f4, 0x0005, 0x00d0, 0x00d9, 0x00eb, 0x0000, 0x00e2, + 0x0007, 0x002d, 0x0233, 0x023d, 0x0247, 0x0254, 0x025e, 0x026b, + 0x027b, 0x0007, 0x000c, 0x0246, 0x4e4f, 0x024e, 0x0255, 0x4e56, + 0x4e5d, 0x4e64, 0x0007, 0x000c, 0x0246, 0x4e4f, 0x024e, 0x0255, + 0x4e56, 0x4e5d, 0x4e64, 0x0007, 0x002d, 0x0285, 0x0298, 0x02ab, + // Entry 235C0 - 235FF + 0x02c1, 0x02d4, 0x02ea, 0x0303, 0x0005, 0x00fa, 0x0103, 0x0115, + 0x0000, 0x010c, 0x0007, 0x002d, 0x0233, 0x023d, 0x0247, 0x0254, + 0x025e, 0x026b, 0x027b, 0x0007, 0x000c, 0x0246, 0x4e4f, 0x024e, + 0x0255, 0x4e56, 0x4e5d, 0x4e64, 0x0007, 0x000c, 0x0246, 0x4e4f, + 0x024e, 0x0255, 0x4e56, 0x4e5d, 0x4e64, 0x0007, 0x002d, 0x0285, + 0x0298, 0x02ab, 0x02c1, 0x02d4, 0x02ea, 0x0303, 0x0002, 0x0121, + 0x013a, 0x0003, 0x0125, 0x012c, 0x0133, 0x0005, 0x002d, 0xffff, + 0x0316, 0x031e, 0x0326, 0x032e, 0x0005, 0x0000, 0xffff, 0x0033, + // Entry 23600 - 2363F + 0x0035, 0x0037, 0x23b3, 0x0005, 0x002d, 0xffff, 0x0336, 0x0356, + 0x0379, 0x039c, 0x0003, 0x013e, 0x0145, 0x014c, 0x0005, 0x002d, + 0xffff, 0x0316, 0x031e, 0x0326, 0x032e, 0x0005, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x002d, 0xffff, 0x0336, + 0x0356, 0x0379, 0x039c, 0x0002, 0x0156, 0x01b1, 0x0003, 0x015a, + 0x0177, 0x0194, 0x0007, 0x0165, 0x0168, 0x0162, 0x016b, 0x016e, + 0x0171, 0x0174, 0x0001, 0x002d, 0x03bc, 0x0001, 0x002d, 0x03db, + 0x0001, 0x002d, 0x03f7, 0x0001, 0x002d, 0x040d, 0x0001, 0x002d, + // Entry 23640 - 2367F + 0x03f7, 0x0001, 0x002d, 0x041a, 0x0001, 0x002d, 0x0424, 0x0007, + 0x0182, 0x0185, 0x017f, 0x0188, 0x018b, 0x018e, 0x0191, 0x0001, + 0x002d, 0x03bc, 0x0001, 0x002d, 0x042e, 0x0001, 0x000c, 0x014e, + 0x0001, 0x002d, 0x040d, 0x0001, 0x002d, 0x03f7, 0x0001, 0x002d, + 0x041a, 0x0001, 0x002d, 0x0424, 0x0007, 0x019f, 0x01a2, 0x019c, + 0x01a5, 0x01a8, 0x01ab, 0x01ae, 0x0001, 0x002d, 0x03bc, 0x0001, + 0x002d, 0x03db, 0x0001, 0x002d, 0x03f7, 0x0001, 0x002d, 0x040d, + 0x0001, 0x002d, 0x03f7, 0x0001, 0x002d, 0x041a, 0x0001, 0x002d, + // Entry 23680 - 236BF + 0x0424, 0x0003, 0x01b5, 0x01d2, 0x01ef, 0x0007, 0x01c0, 0x01c3, + 0x01bd, 0x01c6, 0x01c9, 0x01cc, 0x01cf, 0x0001, 0x002d, 0x03bc, + 0x0001, 0x002d, 0x03db, 0x0001, 0x002d, 0x03f7, 0x0001, 0x002d, + 0x040d, 0x0001, 0x002d, 0x0435, 0x0001, 0x002d, 0x041a, 0x0001, + 0x002d, 0x0424, 0x0007, 0x01dd, 0x01e0, 0x01da, 0x01e3, 0x01e6, + 0x01e9, 0x01ec, 0x0001, 0x002d, 0x0445, 0x0001, 0x002d, 0x042e, + 0x0001, 0x000c, 0x014e, 0x0001, 0x002d, 0x040d, 0x0001, 0x002d, + 0x03f7, 0x0001, 0x002d, 0x041a, 0x0001, 0x002d, 0x0424, 0x0007, + // Entry 236C0 - 236FF + 0x01fa, 0x01fd, 0x01f7, 0x0200, 0x0203, 0x0206, 0x0209, 0x0001, + 0x002d, 0x03bc, 0x0001, 0x002d, 0x03db, 0x0001, 0x002d, 0x03f7, + 0x0001, 0x002d, 0x040d, 0x0001, 0x002d, 0x0435, 0x0001, 0x002d, + 0x041a, 0x0001, 0x002d, 0x0424, 0x0003, 0x021b, 0x0000, 0x0210, + 0x0002, 0x0213, 0x0217, 0x0002, 0x002d, 0x0459, 0x0490, 0x0002, + 0x002d, 0x0473, 0x04a4, 0x0002, 0x021e, 0x0222, 0x0002, 0x002d, + 0x0459, 0x04b1, 0x0002, 0x002d, 0x0473, 0x04a4, 0x0004, 0x0234, + 0x022e, 0x022b, 0x0231, 0x0001, 0x0006, 0x015b, 0x0001, 0x0002, + // Entry 23700 - 2373F + 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, 0x0000, 0x2418, 0x0004, + 0x0245, 0x023f, 0x023c, 0x0242, 0x0001, 0x0002, 0x04e3, 0x0001, + 0x0002, 0x04f2, 0x0001, 0x0002, 0x04fe, 0x0001, 0x0002, 0x0508, + 0x0004, 0x0256, 0x0250, 0x024d, 0x0253, 0x0001, 0x002d, 0x00fc, + 0x0001, 0x002d, 0x00fc, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, + 0x022e, 0x0005, 0x025f, 0x0000, 0x0000, 0x0000, 0x02c4, 0x0002, + 0x0262, 0x0293, 0x0003, 0x0266, 0x0275, 0x0284, 0x000d, 0x002d, + 0xffff, 0x04c1, 0x04d1, 0x04e1, 0x04f7, 0x0507, 0x051a, 0x0530, + // Entry 23740 - 2377F + 0x0543, 0x0559, 0x0572, 0x057c, 0x0586, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, 0x002d, 0xffff, 0x04c1, + 0x04d1, 0x04e1, 0x04f7, 0x0507, 0x051a, 0x0530, 0x0543, 0x0559, + 0x0572, 0x057c, 0x0586, 0x0003, 0x0297, 0x02a6, 0x02b5, 0x000d, + 0x002d, 0xffff, 0x04c1, 0x04d1, 0x04e1, 0x04f7, 0x0507, 0x051a, + 0x0530, 0x0543, 0x0559, 0x0572, 0x057c, 0x0586, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + // Entry 23780 - 237BF + 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, 0x002d, 0xffff, + 0x04c1, 0x04d1, 0x04e1, 0x04f7, 0x0507, 0x051a, 0x0530, 0x0543, + 0x0559, 0x0572, 0x057c, 0x0586, 0x0001, 0x02c6, 0x0001, 0x02c8, + 0x0001, 0x002d, 0x059c, 0x0001, 0x02cd, 0x0001, 0x02cf, 0x0003, + 0x0000, 0x0000, 0x02d3, 0x000d, 0x002d, 0xffff, 0x05a3, 0x05b9, + 0x05c3, 0x05e0, 0x0603, 0x0626, 0x064f, 0x0659, 0x0666, 0x0676, + 0x0689, 0x06a3, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x02e8, + 0x0001, 0x02ea, 0x0001, 0x02ec, 0x00ec, 0x002d, 0x06c6, 0x06e2, + // Entry 237C0 - 237FF + 0x0701, 0x0720, 0x0739, 0x0755, 0x076e, 0x0787, 0x07a0, 0x07b9, + 0x07d5, 0x07fa, 0x0832, 0x0864, 0x0896, 0x08cb, 0x08fd, 0x0916, + 0x092f, 0x0954, 0x0970, 0x098f, 0x09ab, 0x09c4, 0x09e3, 0x09ff, + 0x0a1b, 0x0a34, 0x0a50, 0x0a6f, 0x0a8e, 0x0ab3, 0x0acf, 0x0ae8, + 0x0b01, 0x0b1d, 0x0b3f, 0x0b67, 0x0b89, 0x0b9f, 0x0bb8, 0x0bd4, + 0x0bf6, 0x0c13, 0x0c2f, 0x0c4e, 0x0c67, 0x0c83, 0x0c9a, 0x0cb3, + 0x0cd8, 0x0cf7, 0x0d11, 0x0d2c, 0x0d4d, 0x0d6e, 0x0d8f, 0x0daa, + 0x0dc5, 0x0dec, 0x0e0d, 0x0e31, 0x0e49, 0x0e67, 0x0e85, 0x0eac, + // Entry 23800 - 2383F + 0x0ecd, 0x0ee8, 0x0f0f, 0x0f27, 0x0f45, 0x0f63, 0x0f7e, 0x0f96, + 0x0fb7, 0x0fd2, 0x0fed, 0x1008, 0x102c, 0x1048, 0x1066, 0x1082, + 0x109d, 0x10bb, 0x10d9, 0x10f7, 0x1112, 0x112d, 0x1145, 0x1160, + 0x1181, 0x11a2, 0x11c3, 0x11e4, 0x1202, 0x121d, 0x1241, 0x1259, + 0x1277, 0x1292, 0x12b1, 0x12c9, 0x12e4, 0x12ff, 0x131a, 0x1335, + 0x1350, 0x137a, 0x1398, 0x13bc, 0x13d7, 0x13fb, 0x141f, 0x143b, + 0x1459, 0x1483, 0x14a1, 0x14c2, 0x14d7, 0x14fb, 0x151c, 0x153a, + 0x1558, 0x1573, 0x159a, 0x15c4, 0x15e2, 0x160c, 0x1625, 0x1643, + // Entry 23840 - 2387F + 0x1664, 0x167f, 0x169d, 0x16bb, 0x16d6, 0x16f4, 0x1710, 0x172b, + 0x1747, 0x1765, 0x1780, 0x1795, 0x17b0, 0x17cb, 0x17ec, 0x180a, + 0x182b, 0x1849, 0x1861, 0x187c, 0x189a, 0x18b5, 0x18d9, 0x18f4, + 0x1915, 0x1939, 0x1957, 0x1978, 0x1996, 0x19b7, 0x19d5, 0x19f9, + 0x1a17, 0x1a35, 0x1a5c, 0x1a77, 0x1a95, 0x1ab6, 0x1ad4, 0x1ae9, + 0x1b0a, 0x1b1f, 0x1b3a, 0x1b58, 0x1b7f, 0x1b9e, 0x1bbf, 0x1be6, + 0x1c01, 0x1c22, 0x1c40, 0x1c5e, 0x1c79, 0x1c9d, 0x1cbe, 0x1cdf, + 0x1cfa, 0x1d18, 0x1d30, 0x1d4e, 0x1d75, 0x1d96, 0x1db1, 0x1dcf, + // Entry 23880 - 238BF + 0x1ded, 0x1e0b, 0x1e2f, 0x1e4d, 0x1e6b, 0x1e8a, 0x1ea5, 0x1ec3, + 0x1ed8, 0x1f02, 0x1f20, 0x1f3e, 0x1f59, 0x1f77, 0x1f98, 0x1fbc, + 0x1fd7, 0x1ff8, 0x2019, 0x203a, 0x2058, 0x2079, 0x2098, 0x20bf, + 0x20dd, 0x20f9, 0x211a, 0x213b, 0x215c, 0x217a, 0x219b, 0x21b9, + 0x21d4, 0x21ef, 0x220d, 0x222c, 0x2250, 0x226e, 0x2289, 0x2296, + 0x22a6, 0x22b3, 0x0001, 0x03dc, 0x0001, 0x03de, 0x0003, 0x0000, + 0x0000, 0x03e2, 0x000d, 0x002e, 0xffff, 0x0000, 0x0019, 0x003e, + 0x0057, 0x0061, 0x0074, 0x008d, 0x009a, 0x00a4, 0x00b1, 0x00b8, + // Entry 238C0 - 238FF + 0x00c5, 0x0042, 0x0434, 0x0439, 0x043e, 0x0443, 0x045a, 0x046c, + 0x047e, 0x0495, 0x04ac, 0x04c3, 0x04da, 0x04ec, 0x04fe, 0x0519, + 0x052f, 0x0545, 0x054a, 0x054f, 0x0554, 0x056d, 0x057f, 0x0591, + 0x0596, 0x059b, 0x05a0, 0x05a5, 0x05aa, 0x05af, 0x05b4, 0x05b9, + 0x05be, 0x05d2, 0x05e6, 0x05fa, 0x060e, 0x0622, 0x0636, 0x064a, + 0x065e, 0x0672, 0x0686, 0x069a, 0x06ae, 0x06c2, 0x06d6, 0x06ea, + 0x06fe, 0x0712, 0x0726, 0x073a, 0x074e, 0x0762, 0x0767, 0x076c, + 0x0771, 0x0787, 0x0799, 0x07ab, 0x07c1, 0x07d3, 0x07e5, 0x07fb, + // Entry 23900 - 2393F + 0x080d, 0x081f, 0x0824, 0x0829, 0x0001, 0x0436, 0x0001, 0x002e, + 0x00de, 0x0001, 0x043b, 0x0001, 0x002e, 0x00de, 0x0001, 0x0440, + 0x0001, 0x002e, 0x00de, 0x0003, 0x0447, 0x044a, 0x044f, 0x0001, + 0x002e, 0x00e8, 0x0003, 0x002e, 0x00f5, 0x0112, 0x0126, 0x0002, + 0x0452, 0x0456, 0x0002, 0x002e, 0x0140, 0x0140, 0x0002, 0x002e, + 0x015b, 0x015b, 0x0003, 0x045e, 0x0000, 0x0461, 0x0001, 0x002e, + 0x00e8, 0x0002, 0x0464, 0x0468, 0x0002, 0x002e, 0x0140, 0x0140, + 0x0002, 0x002e, 0x015b, 0x015b, 0x0003, 0x0470, 0x0000, 0x0473, + // Entry 23940 - 2397F + 0x0001, 0x002e, 0x00e8, 0x0002, 0x0476, 0x047a, 0x0002, 0x002e, + 0x0140, 0x0140, 0x0002, 0x002e, 0x015b, 0x015b, 0x0003, 0x0482, + 0x0485, 0x048a, 0x0001, 0x002e, 0x0179, 0x0003, 0x002e, 0x018c, + 0x01af, 0x01c9, 0x0002, 0x048d, 0x0491, 0x0002, 0x002e, 0x020a, + 0x01e9, 0x0002, 0x002e, 0x0234, 0x0234, 0x0003, 0x0499, 0x049c, + 0x04a1, 0x0001, 0x002e, 0x0179, 0x0003, 0x002e, 0x018c, 0x01af, + 0x01c9, 0x0002, 0x04a4, 0x04a8, 0x0002, 0x002e, 0x020a, 0x01e9, + 0x0002, 0x002e, 0x0258, 0x0234, 0x0003, 0x04b0, 0x04b3, 0x04b8, + // Entry 23980 - 239BF + 0x0001, 0x002e, 0x0179, 0x0003, 0x002e, 0x018c, 0x01af, 0x01c9, + 0x0002, 0x04bb, 0x04bf, 0x0002, 0x002e, 0x0285, 0x0285, 0x0002, + 0x002e, 0x029d, 0x029d, 0x0003, 0x04c7, 0x04ca, 0x04cf, 0x0001, + 0x002e, 0x02b8, 0x0003, 0x002e, 0x02c2, 0x02dc, 0x02ed, 0x0002, + 0x04d2, 0x04d6, 0x0002, 0x002e, 0x0304, 0x0304, 0x0002, 0x002e, + 0x031c, 0x031c, 0x0003, 0x04de, 0x0000, 0x04e1, 0x0001, 0x002e, + 0x02b8, 0x0002, 0x04e4, 0x04e8, 0x0002, 0x002e, 0x0304, 0x0304, + 0x0002, 0x002e, 0x031c, 0x031c, 0x0003, 0x04f0, 0x0000, 0x04f3, + // Entry 239C0 - 239FF + 0x0001, 0x002e, 0x02b8, 0x0002, 0x04f6, 0x04fa, 0x0002, 0x002e, + 0x0304, 0x0304, 0x0002, 0x002e, 0x031c, 0x031c, 0x0004, 0x0503, + 0x0506, 0x050b, 0x0516, 0x0001, 0x002e, 0x0337, 0x0003, 0x002e, + 0x034a, 0x036d, 0x0387, 0x0002, 0x050e, 0x0512, 0x0002, 0x002e, + 0x03a7, 0x03a7, 0x0002, 0x002e, 0x03c8, 0x03c8, 0x0001, 0x002e, + 0x03ec, 0x0004, 0x051e, 0x0000, 0x0521, 0x052c, 0x0001, 0x002e, + 0x0337, 0x0002, 0x0524, 0x0528, 0x0002, 0x002e, 0x03a7, 0x03a7, + 0x0002, 0x002e, 0x03c8, 0x03c8, 0x0001, 0x002e, 0x03ec, 0x0004, + // Entry 23A00 - 23A3F + 0x0534, 0x0000, 0x0537, 0x0542, 0x0001, 0x002e, 0x0337, 0x0002, + 0x053a, 0x053e, 0x0002, 0x002e, 0x03a7, 0x03a7, 0x0002, 0x002e, + 0x03c8, 0x03c8, 0x0001, 0x002e, 0x03ec, 0x0001, 0x0547, 0x0001, + 0x002e, 0x040a, 0x0001, 0x054c, 0x0001, 0x002e, 0x040a, 0x0001, + 0x0551, 0x0001, 0x002e, 0x040a, 0x0003, 0x0558, 0x055b, 0x0562, + 0x0001, 0x002e, 0x042e, 0x0005, 0x002e, 0x0448, 0x044f, 0x0448, + 0x0438, 0x0438, 0x0002, 0x0565, 0x0569, 0x0002, 0x002e, 0x0456, + 0x0456, 0x0002, 0x002e, 0x046e, 0x046e, 0x0003, 0x0571, 0x0000, + // Entry 23A40 - 23A7F + 0x0574, 0x0001, 0x002e, 0x042e, 0x0002, 0x0577, 0x057b, 0x0002, + 0x002e, 0x0456, 0x0456, 0x0002, 0x002e, 0x046e, 0x046e, 0x0003, + 0x0583, 0x0000, 0x0586, 0x0001, 0x002e, 0x042e, 0x0002, 0x0589, + 0x058d, 0x0002, 0x002e, 0x0456, 0x0456, 0x0002, 0x002e, 0x046e, + 0x046e, 0x0001, 0x0593, 0x0001, 0x002e, 0x0489, 0x0001, 0x0598, + 0x0001, 0x002e, 0x0489, 0x0001, 0x059d, 0x0001, 0x002e, 0x0489, + 0x0001, 0x05a2, 0x0001, 0x002e, 0x04a7, 0x0001, 0x05a7, 0x0001, + 0x002e, 0x04a7, 0x0001, 0x05ac, 0x0001, 0x002e, 0x04a7, 0x0001, + // Entry 23A80 - 23ABF + 0x05b1, 0x0001, 0x002e, 0x04cb, 0x0001, 0x05b6, 0x0001, 0x002e, + 0x04cb, 0x0001, 0x05bb, 0x0001, 0x002e, 0x04cb, 0x0003, 0x0000, + 0x05c2, 0x05c7, 0x0003, 0x002e, 0x04f8, 0x051b, 0x0535, 0x0002, + 0x05ca, 0x05ce, 0x0002, 0x002e, 0x0555, 0x0555, 0x0002, 0x002e, + 0x0576, 0x0576, 0x0003, 0x0000, 0x05d6, 0x05db, 0x0003, 0x002e, + 0x059d, 0x05ba, 0x05ce, 0x0002, 0x05de, 0x05e2, 0x0002, 0x002e, + 0x05e8, 0x05e8, 0x0002, 0x002e, 0x0603, 0x0603, 0x0003, 0x0000, + 0x05ea, 0x05ef, 0x0003, 0x002e, 0x059d, 0x05ba, 0x05ce, 0x0002, + // Entry 23AC0 - 23AFF + 0x05f2, 0x05f6, 0x0002, 0x002e, 0x05e8, 0x05e8, 0x0002, 0x002e, + 0x0603, 0x0603, 0x0003, 0x0000, 0x05fe, 0x0603, 0x0003, 0x002e, + 0x0624, 0x0647, 0x0661, 0x0002, 0x0606, 0x060a, 0x0002, 0x002e, + 0x0681, 0x0681, 0x0002, 0x002e, 0x06a2, 0x06a2, 0x0003, 0x0000, + 0x0612, 0x0617, 0x0003, 0x002e, 0x06c9, 0x06e6, 0x06fa, 0x0002, + 0x061a, 0x061e, 0x0002, 0x002e, 0x0714, 0x0714, 0x0002, 0x002e, + 0x072f, 0x072f, 0x0003, 0x0000, 0x0626, 0x062b, 0x0003, 0x002e, + 0x06c9, 0x06e6, 0x06fa, 0x0002, 0x062e, 0x0632, 0x0002, 0x002e, + // Entry 23B00 - 23B3F + 0x0714, 0x0714, 0x0002, 0x002e, 0x072f, 0x072f, 0x0003, 0x0000, + 0x063a, 0x063f, 0x0003, 0x002e, 0x0750, 0x0776, 0x0793, 0x0002, + 0x0642, 0x0646, 0x0002, 0x002e, 0x07b6, 0x07b6, 0x0002, 0x002e, + 0x07da, 0x07da, 0x0003, 0x0000, 0x064e, 0x0653, 0x0003, 0x002e, + 0x0804, 0x0824, 0x083b, 0x0002, 0x0656, 0x065a, 0x0002, 0x002e, + 0x0858, 0x0858, 0x0002, 0x002e, 0x0876, 0x0876, 0x0003, 0x0000, + 0x0662, 0x0667, 0x0003, 0x002e, 0x0804, 0x0824, 0x083b, 0x0002, + 0x066a, 0x066e, 0x0002, 0x002e, 0x0858, 0x0858, 0x0002, 0x002e, + // Entry 23B40 - 23B7F + 0x0876, 0x0876, 0x0003, 0x0000, 0x0676, 0x067b, 0x0003, 0x002e, + 0x089a, 0x08bd, 0x08d7, 0x0002, 0x067e, 0x0682, 0x0002, 0x002e, + 0x08f7, 0x08f7, 0x0002, 0x002e, 0x0918, 0x0918, 0x0003, 0x0000, + 0x068a, 0x068f, 0x0003, 0x002e, 0x093f, 0x095c, 0x0970, 0x0002, + 0x0692, 0x0696, 0x0002, 0x002e, 0x098a, 0x098a, 0x0002, 0x002e, + 0x09a5, 0x09a5, 0x0003, 0x0000, 0x069e, 0x06a3, 0x0003, 0x002e, + 0x093f, 0x095c, 0x0970, 0x0002, 0x06a6, 0x06aa, 0x0002, 0x002e, + 0x098a, 0x098a, 0x0002, 0x002e, 0x09a5, 0x09a5, 0x0003, 0x0000, + // Entry 23B80 - 23BBF + 0x06b2, 0x06b7, 0x0003, 0x002e, 0x09c6, 0x09ec, 0x0a09, 0x0002, + 0x06ba, 0x06be, 0x0002, 0x002e, 0x0a2c, 0x0a2c, 0x0002, 0x002e, + 0x0a50, 0x0a50, 0x0003, 0x0000, 0x06c6, 0x06cb, 0x0003, 0x002e, + 0x0a7a, 0x0a9a, 0x0ab1, 0x0002, 0x06ce, 0x06d2, 0x0002, 0x002e, + 0x0ace, 0x0ace, 0x0002, 0x002e, 0x0aec, 0x0aec, 0x0003, 0x0000, + 0x06da, 0x06df, 0x0003, 0x002e, 0x0a7a, 0x0a9a, 0x0ab1, 0x0002, + 0x06e2, 0x06e6, 0x0002, 0x002e, 0x0ace, 0x0ace, 0x0002, 0x002e, + 0x0aec, 0x0aec, 0x0003, 0x0000, 0x06ee, 0x06f3, 0x0003, 0x002e, + // Entry 23BC0 - 23BFF + 0x0b10, 0x0b39, 0x0b59, 0x0002, 0x06f6, 0x06fa, 0x0002, 0x002e, + 0x0b7f, 0x0b7f, 0x0002, 0x002e, 0x0ba6, 0x0ba6, 0x0003, 0x0000, + 0x0702, 0x0707, 0x0003, 0x002e, 0x0bd3, 0x0bf6, 0x0c10, 0x0002, + 0x070a, 0x070e, 0x0002, 0x002e, 0x0c30, 0x0c30, 0x0002, 0x002e, + 0x0c51, 0x0c51, 0x0003, 0x0000, 0x0716, 0x071b, 0x0003, 0x002e, + 0x0bd3, 0x0bf6, 0x0c10, 0x0002, 0x071e, 0x0722, 0x0002, 0x002e, + 0x0c30, 0x0c30, 0x0002, 0x002e, 0x0c51, 0x0c51, 0x0003, 0x0000, + 0x072a, 0x072f, 0x0003, 0x002e, 0x0c78, 0x0c9b, 0x0cb5, 0x0002, + // Entry 23C00 - 23C3F + 0x0732, 0x0736, 0x0002, 0x002e, 0x0cd5, 0x0cd5, 0x0002, 0x002e, + 0x0cf6, 0x0cf6, 0x0003, 0x0000, 0x073e, 0x0743, 0x0003, 0x002e, + 0x0d1d, 0x0d3a, 0x0d4e, 0x0002, 0x0746, 0x074a, 0x0002, 0x002e, + 0x0d68, 0x0d68, 0x0002, 0x002e, 0x0d83, 0x0d83, 0x0003, 0x0000, + 0x0752, 0x0757, 0x0003, 0x002e, 0x0d1d, 0x0d3a, 0x0d4e, 0x0002, + 0x075a, 0x075e, 0x0002, 0x002e, 0x0d68, 0x0d68, 0x0002, 0x002e, + 0x0d83, 0x0d83, 0x0001, 0x0764, 0x0001, 0x002e, 0x0da4, 0x0001, + 0x0769, 0x0001, 0x002e, 0x0daf, 0x0001, 0x076e, 0x0001, 0x002e, + // Entry 23C40 - 23C7F + 0x0da4, 0x0003, 0x0775, 0x0778, 0x077c, 0x0001, 0x002e, 0x0de1, + 0x0002, 0x002e, 0xffff, 0x0dee, 0x0002, 0x077f, 0x0783, 0x0002, + 0x002e, 0x0e02, 0x0e02, 0x0002, 0x002e, 0x0e1d, 0x0e1d, 0x0003, + 0x078b, 0x0000, 0x078e, 0x0001, 0x002e, 0x0e3b, 0x0002, 0x0791, + 0x0795, 0x0002, 0x002e, 0x0e45, 0x0e45, 0x0002, 0x002e, 0x0e5d, + 0x0e5d, 0x0003, 0x079d, 0x0000, 0x07a0, 0x0001, 0x002e, 0x0e3b, + 0x0002, 0x07a3, 0x07a7, 0x0002, 0x002e, 0x0e45, 0x0e45, 0x0002, + 0x002e, 0x0e5d, 0x0e5d, 0x0003, 0x07af, 0x07b2, 0x07b6, 0x0001, + // Entry 23C80 - 23CBF + 0x002e, 0x0e78, 0x0002, 0x002e, 0xffff, 0x0e85, 0x0002, 0x07b9, + 0x07bd, 0x0002, 0x002e, 0x0e99, 0x0e99, 0x0002, 0x002e, 0x0eb4, + 0x0eb4, 0x0003, 0x07c5, 0x0000, 0x07c8, 0x0001, 0x002e, 0x0ed2, + 0x0002, 0x07cb, 0x07cf, 0x0002, 0x002e, 0x0edc, 0x0edc, 0x0002, + 0x002e, 0x0ef4, 0x0ef4, 0x0003, 0x07d7, 0x0000, 0x07da, 0x0001, + 0x002e, 0x0ed2, 0x0002, 0x07dd, 0x07e1, 0x0002, 0x002e, 0x0edc, + 0x0edc, 0x0002, 0x002e, 0x0ef4, 0x0ef4, 0x0003, 0x07e9, 0x07ec, + 0x07f0, 0x0001, 0x002e, 0x0f0f, 0x0002, 0x002e, 0xffff, 0x0f1f, + // Entry 23CC0 - 23CFF + 0x0002, 0x07f3, 0x07f7, 0x0002, 0x002e, 0x0f26, 0x0f26, 0x0002, + 0x002e, 0x0f44, 0x0f44, 0x0003, 0x07ff, 0x0000, 0x0802, 0x0001, + 0x002e, 0x0f65, 0x0002, 0x0805, 0x0809, 0x0002, 0x002e, 0x0f6f, + 0x0f6f, 0x0002, 0x002e, 0x0f87, 0x0f87, 0x0003, 0x0811, 0x0000, + 0x0814, 0x0001, 0x002e, 0x0f65, 0x0002, 0x0817, 0x081b, 0x0002, + 0x002e, 0x0f6f, 0x0f6f, 0x0002, 0x002e, 0x0f87, 0x0f87, 0x0001, + 0x0821, 0x0001, 0x002e, 0x0fa2, 0x0001, 0x0826, 0x0001, 0x002e, + 0x0fc2, 0x0001, 0x082b, 0x0001, 0x002e, 0x0fc2, 0x0004, 0x0833, + // Entry 23D00 - 23D3F + 0x0838, 0x083d, 0x084c, 0x0003, 0x0000, 0x1dc7, 0x234c, 0x2704, + 0x0003, 0x002e, 0x0fd8, 0x0fe6, 0x1007, 0x0002, 0x0000, 0x0840, + 0x0003, 0x0000, 0x0847, 0x0844, 0x0001, 0x002e, 0x1022, 0x0003, + 0x002e, 0xffff, 0x1058, 0x109d, 0x0002, 0x0a15, 0x084f, 0x0003, + 0x08e9, 0x097f, 0x0853, 0x0094, 0x002e, 0x10c4, 0x10f3, 0x1123, + 0x1159, 0x11d2, 0x1290, 0x1313, 0x13cb, 0x14c9, 0x15be, 0x16b9, + 0x178b, 0x1814, 0x1876, 0x18e7, 0x19aa, 0x1a80, 0x1b21, 0x1bc3, + 0x1cda, 0x1dfb, 0x1ee7, 0x1fb7, 0x2055, 0x20f0, 0x2174, 0x218e, + // Entry 23D40 - 23D7F + 0x21dd, 0x2267, 0x22c4, 0x2338, 0x2379, 0x23de, 0x2452, 0x24c0, + 0x253e, 0x256e, 0x25c7, 0x266f, 0x2731, 0x278b, 0x27a5, 0x27e5, + 0x283c, 0x28c2, 0x2912, 0x29d7, 0x2a6f, 0x2ae5, 0x2bc5, 0x2c8f, + 0x2cf5, 0x2d28, 0x2d84, 0x2db1, 0x2df4, 0x2e6c, 0x2eab, 0x2f14, + 0x2ff4, 0x309e, 0x30c5, 0x3111, 0x31b3, 0x3247, 0x32ad, 0x32d7, + 0x3304, 0x332a, 0x3360, 0x339c, 0x33f2, 0x3469, 0x350d, 0x3587, + 0x362f, 0x3709, 0x3742, 0x379e, 0x37fe, 0x3853, 0x38f5, 0x3924, + 0x397e, 0x39ec, 0x3a3c, 0x3aae, 0x3ace, 0x3aeb, 0x3b0e, 0x3b64, + // Entry 23D80 - 23DBF + 0x3bd0, 0x3c36, 0x3d21, 0x3dd7, 0x3e6e, 0x3eda, 0x3efd, 0x3f14, + 0x3f64, 0x402e, 0x40db, 0x4165, 0x417c, 0x41f8, 0x42f4, 0x43a7, + 0x4439, 0x44b7, 0x44ce, 0x4525, 0x45b4, 0x4637, 0x46af, 0x4738, + 0x47ec, 0x480f, 0x482c, 0x4855, 0x4878, 0x48b2, 0x4938, 0x49b5, + 0x4a03, 0x4a23, 0x4a46, 0x4a7f, 0x4ab8, 0x4ad8, 0x4af5, 0x4b2c, + 0x4b80, 0x4bac, 0x4be6, 0x4c4c, 0x4c95, 0x4d31, 0x4d6e, 0x4e12, + 0x4ec5, 0x4f31, 0x4f8c, 0x504e, 0x50d8, 0x50f8, 0x511c, 0x517f, + 0x522f, 0x0094, 0x002e, 0xffff, 0xffff, 0xffff, 0xffff, 0x119c, + // Entry 23DC0 - 23DFF + 0x1270, 0x12f6, 0x137f, 0x1483, 0x1575, 0x1670, 0x176b, 0x17fd, + 0x1862, 0x18be, 0x196b, 0x1a5a, 0x1afe, 0x1b87, 0x1c79, 0x1dbc, + 0x1ea5, 0x1f91, 0x2035, 0x20c7, 0xffff, 0xffff, 0x21b1, 0xffff, + 0x22a3, 0xffff, 0x2362, 0x23c7, 0x243e, 0x249a, 0xffff, 0xffff, + 0x25a4, 0x263f, 0x2714, 0xffff, 0xffff, 0xffff, 0x2812, 0xffff, + 0x28e5, 0x29a4, 0xffff, 0x2aaf, 0x2b86, 0x2c75, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2dd1, 0xffff, 0xffff, 0x2edb, 0x2fb8, 0xffff, + 0xffff, 0x30e2, 0x318f, 0x322d, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 23E00 - 23E3F + 0xffff, 0xffff, 0x33db, 0x3440, 0x34ed, 0x356d, 0x35db, 0xffff, + 0xffff, 0x377e, 0xffff, 0x381b, 0xffff, 0xffff, 0x3957, 0xffff, + 0x3a1c, 0xffff, 0xffff, 0xffff, 0xffff, 0x3b47, 0xffff, 0x3bed, + 0x3ce8, 0x3db3, 0x3e51, 0xffff, 0xffff, 0xffff, 0x3f2e, 0x4002, + 0x40a6, 0xffff, 0xffff, 0x41ac, 0x42c2, 0x438a, 0x4413, 0xffff, + 0xffff, 0x4502, 0x459d, 0x4614, 0xffff, 0x46ee, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x4895, 0x491e, 0x499e, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x4b12, 0xffff, 0xffff, + // Entry 23E40 - 23E7F + 0x4bcc, 0xffff, 0x4c60, 0xffff, 0x4d4e, 0x4de0, 0x4ea8, 0xffff, + 0x4f5a, 0x5022, 0xffff, 0xffff, 0xffff, 0x5159, 0x51fd, 0x0094, + 0x002e, 0xffff, 0xffff, 0xffff, 0xffff, 0x1215, 0x12c0, 0x133d, + 0x1424, 0x151c, 0x1614, 0x170f, 0x17b8, 0x1838, 0x1897, 0x191d, + 0x19f6, 0x1ab3, 0x1b51, 0x1c1b, 0x1d48, 0x1e4d, 0x1f39, 0x1fea, + 0x2082, 0x2126, 0xffff, 0xffff, 0x2216, 0xffff, 0x22f2, 0xffff, + 0x239d, 0x2402, 0x2473, 0x24f3, 0xffff, 0xffff, 0x25f7, 0x26ac, + 0x275b, 0xffff, 0xffff, 0xffff, 0x2873, 0xffff, 0x294c, 0x2a17, + // Entry 23E80 - 23EBF + 0xffff, 0x2b28, 0x2c11, 0x2cb6, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2e24, 0xffff, 0xffff, 0x2f5a, 0x303d, 0xffff, 0xffff, 0x314d, + 0x31e4, 0x326e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x3416, 0x349f, 0x353a, 0x35ae, 0x3690, 0xffff, 0xffff, 0x37cb, + 0xffff, 0x3898, 0xffff, 0xffff, 0x39b2, 0xffff, 0x3a69, 0xffff, + 0xffff, 0xffff, 0xffff, 0x3b8e, 0xffff, 0x3c8c, 0x3d67, 0x3e08, + 0x3e98, 0xffff, 0xffff, 0xffff, 0x3fa7, 0x4067, 0x411d, 0xffff, + 0xffff, 0x4251, 0x4333, 0x43d1, 0x446c, 0xffff, 0xffff, 0x4555, + // Entry 23EC0 - 23EFF + 0x45d8, 0x4667, 0xffff, 0x478f, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x48dc, 0x495f, 0x49d9, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x4b53, 0xffff, 0xffff, 0x4c0d, 0xffff, + 0x4cd7, 0xffff, 0x4d9b, 0x4e51, 0x4eef, 0xffff, 0x4fcb, 0x5087, + 0xffff, 0xffff, 0xffff, 0x51b2, 0x526e, 0x0003, 0x0000, 0x0000, + 0x0a19, 0x0042, 0x000b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 23F00 - 23F3F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0003, 0x0004, 0x05bc, + 0x0b33, 0x0012, 0x0017, 0x0024, 0x0000, 0x0000, 0x0061, 0x0000, + 0x00ce, 0x00f9, 0x0317, 0x0324, 0x0396, 0x0000, 0x0000, 0x0000, + // Entry 23F40 - 23F7F + 0x0000, 0x041c, 0x0539, 0x05ab, 0x0005, 0x0000, 0x0000, 0x0000, + 0x0000, 0x001d, 0x0001, 0x001f, 0x0001, 0x0021, 0x0001, 0x0000, + 0x0000, 0x000a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0050, + 0x0000, 0x0000, 0x0000, 0x002f, 0x0004, 0x0034, 0x0000, 0x0000, + 0x0047, 0x0001, 0x0036, 0x0001, 0x0038, 0x000d, 0x0000, 0xffff, + 0x005a, 0x005d, 0x0062, 0x0066, 0x006a, 0x006f, 0x0072, 0x0075, + 0x0079, 0x007e, 0x221e, 0x0085, 0x0001, 0x0049, 0x0001, 0x004b, + 0x0003, 0x0000, 0xffff, 0x0089, 0x0097, 0x0004, 0x005e, 0x0058, + // Entry 23F80 - 23FBF + 0x0055, 0x005b, 0x0001, 0x002f, 0x0000, 0x0001, 0x002f, 0x000c, + 0x0001, 0x002f, 0x000c, 0x0001, 0x002f, 0x000c, 0x0001, 0x0063, + 0x0002, 0x0066, 0x009a, 0x0003, 0x006a, 0x007a, 0x008a, 0x000e, + 0x0000, 0xffff, 0x042f, 0x0438, 0x2708, 0x270e, 0x044c, 0x0450, + 0x0458, 0x0460, 0x2715, 0x046e, 0x271c, 0x0479, 0x0481, 0x000e, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x0422, 0x000e, + 0x0000, 0xffff, 0x042f, 0x0438, 0x2708, 0x270e, 0x044c, 0x0450, + // Entry 23FC0 - 23FFF + 0x0458, 0x0460, 0x2715, 0x046e, 0x271c, 0x0479, 0x0481, 0x0003, + 0x009e, 0x00ae, 0x00be, 0x000e, 0x0000, 0xffff, 0x042f, 0x0438, + 0x2708, 0x270e, 0x044c, 0x0450, 0x0458, 0x0460, 0x2715, 0x046e, + 0x271c, 0x0479, 0x0481, 0x000e, 0x000d, 0xffff, 0x0140, 0x0143, + 0x0146, 0x0149, 0x338b, 0x338e, 0x3391, 0x3394, 0x3397, 0x339a, + 0x339e, 0x33a2, 0x33a6, 0x000e, 0x0000, 0xffff, 0x042f, 0x0438, + 0x2708, 0x270e, 0x044c, 0x0450, 0x0458, 0x0460, 0x2715, 0x046e, + 0x271c, 0x0479, 0x0481, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 24000 - 2403F + 0x0000, 0x00d7, 0x0000, 0x00e8, 0x0004, 0x00e5, 0x00df, 0x00dc, + 0x00e2, 0x0001, 0x002f, 0x0015, 0x0001, 0x002f, 0x0028, 0x0001, + 0x002f, 0x0035, 0x0001, 0x002f, 0x0041, 0x0004, 0x00f6, 0x00f0, + 0x00ed, 0x00f3, 0x0001, 0x000d, 0x004d, 0x0001, 0x000d, 0x004d, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x0102, + 0x0167, 0x01be, 0x01f3, 0x02c4, 0x02e4, 0x02f5, 0x0306, 0x0002, + 0x0105, 0x0136, 0x0003, 0x0109, 0x0118, 0x0127, 0x000d, 0x002f, + 0xffff, 0x0052, 0x0056, 0x005b, 0x0060, 0x0064, 0x0068, 0x006c, + // Entry 24040 - 2407F + 0x0070, 0x0074, 0x0078, 0x007c, 0x0080, 0x000d, 0x000d, 0xffff, + 0x0140, 0x0143, 0x0146, 0x0149, 0x338b, 0x338e, 0x3391, 0x3394, + 0x3397, 0x339a, 0x339e, 0x33a2, 0x000d, 0x002f, 0xffff, 0x0084, + 0x008e, 0x0097, 0x009f, 0x00a7, 0x00af, 0x00b6, 0x00bd, 0x00c6, + 0x00cc, 0x00d6, 0x00e0, 0x0003, 0x013a, 0x0149, 0x0158, 0x000d, + 0x002f, 0xffff, 0x0052, 0x0056, 0x005b, 0x0060, 0x0064, 0x0068, + 0x006c, 0x0070, 0x0074, 0x0078, 0x007c, 0x0080, 0x000d, 0x000d, + 0xffff, 0x0140, 0x0143, 0x0146, 0x0149, 0x338b, 0x338e, 0x3391, + // Entry 24080 - 240BF + 0x3394, 0x3397, 0x339a, 0x339e, 0x33a2, 0x000d, 0x002f, 0xffff, + 0x00e9, 0x00f3, 0x00fc, 0x0104, 0x010c, 0x0114, 0x011b, 0x0122, + 0x012a, 0x0130, 0x0139, 0x0141, 0x0002, 0x016a, 0x0194, 0x0005, + 0x0170, 0x0179, 0x018b, 0x0000, 0x0182, 0x0007, 0x000d, 0x00d8, + 0x00dc, 0x00e0, 0x00e4, 0x00e8, 0x00ed, 0x00f1, 0x0007, 0x0000, + 0x236c, 0x2722, 0x2368, 0x257d, 0x21e1, 0x2722, 0x257d, 0x0007, + 0x000d, 0x00d8, 0x00dc, 0x00e0, 0x00e4, 0x00e8, 0x00ed, 0x00f1, + 0x0007, 0x000d, 0x00f5, 0x00fe, 0x010a, 0x0111, 0x0119, 0x0123, + // Entry 240C0 - 240FF + 0x0129, 0x0005, 0x019a, 0x01a3, 0x01b5, 0x0000, 0x01ac, 0x0007, + 0x000d, 0x00d8, 0x00dc, 0x00e0, 0x00e4, 0x00e8, 0x00ed, 0x00f1, + 0x0007, 0x0000, 0x1f96, 0x21e4, 0x2010, 0x2002, 0x21e6, 0x21e4, + 0x2002, 0x0007, 0x000d, 0x00d8, 0x00dc, 0x00e0, 0x00e4, 0x00e8, + 0x00ed, 0x00f1, 0x0007, 0x000d, 0x00f5, 0x00fe, 0x010a, 0x0111, + 0x0119, 0x0123, 0x0129, 0x0002, 0x01c1, 0x01da, 0x0003, 0x01c5, + 0x01cc, 0x01d3, 0x0005, 0x002f, 0xffff, 0x014a, 0x014e, 0x0152, + 0x0156, 0x0005, 0x000d, 0xffff, 0x0140, 0x0143, 0x0146, 0x0149, + // Entry 24100 - 2413F + 0x0005, 0x0016, 0xffff, 0x0191, 0x019c, 0x01a7, 0x01b2, 0x0003, + 0x01de, 0x01e5, 0x01ec, 0x0005, 0x002f, 0xffff, 0x015a, 0x0161, + 0x0168, 0x016f, 0x0005, 0x000d, 0xffff, 0x0140, 0x0143, 0x0146, + 0x0149, 0x0005, 0x0016, 0xffff, 0x0191, 0x019c, 0x01a7, 0x01b2, + 0x0002, 0x01f6, 0x025d, 0x0003, 0x01fa, 0x021b, 0x023c, 0x0008, + 0x0206, 0x020c, 0x0203, 0x020f, 0x0212, 0x0215, 0x0218, 0x0209, + 0x0001, 0x000d, 0x0187, 0x0001, 0x0000, 0x04ef, 0x0001, 0x000d, + 0x0199, 0x0001, 0x0000, 0x04f2, 0x0001, 0x000d, 0x01a7, 0x0001, + // Entry 24140 - 2417F + 0x000d, 0x019f, 0x0001, 0x000d, 0x01bb, 0x0001, 0x002f, 0x0176, + 0x0008, 0x0227, 0x022d, 0x0224, 0x0230, 0x0233, 0x0236, 0x0239, + 0x022a, 0x0001, 0x000d, 0x0187, 0x0001, 0x0000, 0x04ef, 0x0001, + 0x000d, 0x0199, 0x0001, 0x0000, 0x04f2, 0x0001, 0x000d, 0x01a7, + 0x0001, 0x000d, 0x019f, 0x0001, 0x000d, 0x01bb, 0x0001, 0x002f, + 0x0176, 0x0008, 0x0248, 0x024e, 0x0245, 0x0251, 0x0254, 0x0257, + 0x025a, 0x024b, 0x0001, 0x000d, 0x0187, 0x0001, 0x0000, 0x04ef, + 0x0001, 0x000d, 0x0199, 0x0001, 0x0000, 0x04f2, 0x0001, 0x000d, + // Entry 24180 - 241BF + 0x01a7, 0x0001, 0x002f, 0x017c, 0x0001, 0x000d, 0x01bb, 0x0001, + 0x002f, 0x0176, 0x0003, 0x0261, 0x0282, 0x02a3, 0x0008, 0x026d, + 0x0273, 0x026a, 0x0276, 0x0279, 0x027c, 0x027f, 0x0270, 0x0001, + 0x000d, 0x0187, 0x0001, 0x0000, 0x04ef, 0x0001, 0x000d, 0x0199, + 0x0001, 0x0000, 0x04f2, 0x0001, 0x000d, 0x01a7, 0x0001, 0x000d, + 0x019f, 0x0001, 0x000d, 0x01bb, 0x0001, 0x002f, 0x0176, 0x0008, + 0x028e, 0x0294, 0x028b, 0x0297, 0x029a, 0x029d, 0x02a0, 0x0291, + 0x0001, 0x000d, 0x0187, 0x0001, 0x0000, 0x04ef, 0x0001, 0x000d, + // Entry 241C0 - 241FF + 0x0199, 0x0001, 0x0000, 0x04f2, 0x0001, 0x000d, 0x01a7, 0x0001, + 0x000d, 0x019f, 0x0001, 0x000d, 0x01bb, 0x0001, 0x002f, 0x0176, + 0x0008, 0x02af, 0x02b5, 0x02ac, 0x02b8, 0x02bb, 0x02be, 0x02c1, + 0x02b2, 0x0001, 0x000d, 0x0187, 0x0001, 0x0000, 0x04ef, 0x0001, + 0x000d, 0x0199, 0x0001, 0x0000, 0x04f2, 0x0001, 0x000d, 0x01a7, + 0x0001, 0x000d, 0x019f, 0x0001, 0x000d, 0x01bb, 0x0001, 0x002f, + 0x0176, 0x0003, 0x02d3, 0x02de, 0x02c8, 0x0002, 0x02cb, 0x02cf, + 0x0002, 0x002f, 0x018a, 0x0197, 0x0002, 0x000d, 0x01cd, 0x01dc, + // Entry 24200 - 2423F + 0x0002, 0x02d6, 0x02da, 0x0002, 0x002f, 0x01a6, 0x01b8, 0x0002, + 0x002f, 0x01ae, 0x01c0, 0x0001, 0x02e0, 0x0002, 0x000d, 0x01f4, + 0x33aa, 0x0004, 0x02f2, 0x02ec, 0x02e9, 0x02ef, 0x0001, 0x000d, + 0x01ff, 0x0001, 0x000d, 0x0210, 0x0001, 0x000d, 0x021b, 0x0001, + 0x002f, 0x01c6, 0x0004, 0x0303, 0x02fd, 0x02fa, 0x0300, 0x0001, + 0x0020, 0x0365, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, + 0x0001, 0x0000, 0x0546, 0x0004, 0x0314, 0x030e, 0x030b, 0x0311, + 0x0001, 0x000d, 0x004d, 0x0001, 0x000d, 0x004d, 0x0001, 0x0000, + // Entry 24240 - 2427F + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0005, 0x0000, 0x0000, 0x0000, + 0x0000, 0x031d, 0x0001, 0x031f, 0x0001, 0x0321, 0x0001, 0x0000, + 0x04ef, 0x0005, 0x032a, 0x0000, 0x0000, 0x0000, 0x038f, 0x0002, + 0x032d, 0x035e, 0x0003, 0x0331, 0x0340, 0x034f, 0x000d, 0x0000, + 0xffff, 0x05a2, 0x05aa, 0x05b3, 0x05bc, 0x05c3, 0x05cb, 0x05d2, + 0x05d9, 0x05e1, 0x05ec, 0x05f2, 0x2724, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, 0x0000, 0xffff, 0x05a2, + // Entry 24280 - 242BF + 0x05aa, 0x05b3, 0x05bc, 0x05c3, 0x05cb, 0x05d2, 0x05d9, 0x05e1, + 0x05ec, 0x05f2, 0x2724, 0x0003, 0x0362, 0x0371, 0x0380, 0x000d, + 0x0000, 0xffff, 0x05a2, 0x05aa, 0x05b3, 0x05bc, 0x05c3, 0x05cb, + 0x05d2, 0x05d9, 0x05e1, 0x05ec, 0x05f2, 0x2724, 0x000d, 0x000d, + 0xffff, 0x0140, 0x0143, 0x0146, 0x0149, 0x338b, 0x338e, 0x3391, + 0x3394, 0x3397, 0x339a, 0x339e, 0x33a2, 0x000d, 0x0000, 0xffff, + 0x05a2, 0x05aa, 0x05b3, 0x05bc, 0x05c3, 0x05cb, 0x05d2, 0x05d9, + 0x05e1, 0x05ec, 0x05f2, 0x2724, 0x0001, 0x0391, 0x0001, 0x0393, + // Entry 242C0 - 242FF + 0x0001, 0x0000, 0x0601, 0x0008, 0x039f, 0x0000, 0x0000, 0x0000, + 0x0404, 0x040b, 0x0000, 0x9006, 0x0002, 0x03a2, 0x03d3, 0x0003, + 0x03a6, 0x03b5, 0x03c4, 0x000d, 0x0000, 0xffff, 0x0606, 0x272d, + 0x2732, 0x2739, 0x061f, 0x0626, 0x2741, 0x0633, 0x2746, 0x063d, + 0x0643, 0x064d, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, + 0x2426, 0x000d, 0x0000, 0xffff, 0x0657, 0x274b, 0x0666, 0x066f, + 0x0679, 0x0682, 0x2751, 0x0692, 0x2757, 0x06a3, 0x06ab, 0x06ba, + // Entry 24300 - 2433F + 0x0003, 0x03d7, 0x03e6, 0x03f5, 0x000d, 0x0000, 0xffff, 0x0606, + 0x272d, 0x2732, 0x2739, 0x061f, 0x0626, 0x2741, 0x0633, 0x2746, + 0x063d, 0x0643, 0x064d, 0x000d, 0x000d, 0xffff, 0x0140, 0x0143, + 0x0146, 0x0149, 0x338b, 0x338e, 0x3391, 0x3394, 0x3397, 0x339a, + 0x339e, 0x33a2, 0x000d, 0x0000, 0xffff, 0x0657, 0x274b, 0x0666, + 0x066f, 0x0679, 0x0682, 0x2751, 0x0692, 0x2757, 0x06a3, 0x06ab, + 0x06ba, 0x0001, 0x0406, 0x0001, 0x0408, 0x0001, 0x0000, 0x06c8, + 0x0004, 0x0419, 0x0413, 0x0410, 0x0416, 0x0001, 0x002f, 0x0015, + // Entry 24340 - 2437F + 0x0001, 0x002f, 0x0028, 0x0001, 0x002f, 0x01d1, 0x0001, 0x002f, + 0x01dc, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0425, 0x0517, + 0x0000, 0x0528, 0x0001, 0x0427, 0x0001, 0x0429, 0x00ec, 0x002f, + 0x01eb, 0x01fd, 0x0211, 0x0225, 0x0239, 0x024c, 0x025e, 0x0270, + 0x0282, 0x0295, 0x02a7, 0x02bb, 0x02d6, 0x02f2, 0x030c, 0x0326, + 0x033e, 0x0350, 0x0363, 0x0377, 0x038a, 0x039d, 0x03b1, 0x03c3, + 0x03d5, 0x03e7, 0x03f9, 0x040c, 0x041f, 0x0432, 0x0444, 0x0458, + 0x046c, 0x047d, 0x0490, 0x04a4, 0x04b8, 0x04cd, 0x04e1, 0x04f2, + // Entry 24380 - 243BF + 0x0505, 0x0516, 0x052a, 0x053d, 0x0550, 0x0563, 0x0575, 0x0587, + 0x0599, 0x05aa, 0x05c0, 0x05d5, 0x05ea, 0x05ff, 0x0614, 0x0629, + 0x063c, 0x0650, 0x0666, 0x067e, 0x0695, 0x06ab, 0x06c0, 0x06d4, + 0x06e9, 0x06ff, 0x0714, 0x0729, 0x0741, 0x0754, 0x0769, 0x077d, + 0x0790, 0x07a5, 0x07bc, 0x07d0, 0x07e5, 0x07fa, 0x080f, 0x0824, + 0x0839, 0x084e, 0x0861, 0x0875, 0x0889, 0x089f, 0x08b6, 0x08c9, + 0x08dc, 0x08f0, 0x0905, 0x091a, 0x092f, 0x0944, 0x0958, 0x096c, + 0x0982, 0x0995, 0x09ab, 0x09bf, 0x09d4, 0x09e7, 0x09fc, 0x0a10, + // Entry 243C0 - 243FF + 0x0a25, 0x0a39, 0x0a4c, 0x0a63, 0x0a77, 0x0a8d, 0x0aa2, 0x0ab7, + 0x0acd, 0x0ae2, 0x0af8, 0x0b0f, 0x0b24, 0x0b3b, 0x0b4f, 0x0b64, + 0x0b79, 0x0b8d, 0x0ba1, 0x0bb5, 0x0bcb, 0x0be2, 0x0bf6, 0x0c0d, + 0x0c21, 0x0c35, 0x0c4a, 0x0c5e, 0x0c74, 0x0c89, 0x0c9e, 0x0cb4, + 0x0cc9, 0x0cdf, 0x0cf4, 0x0d08, 0x0d1c, 0x0d31, 0x0d45, 0x0d5a, + 0x0d6f, 0x0d83, 0x0d98, 0x0dac, 0x0dc1, 0x0dd6, 0x0deb, 0x0dff, + 0x0e15, 0x0e2c, 0x0e41, 0x0e57, 0x0e6c, 0x0e80, 0x0e94, 0x0eaa, + 0x0ec0, 0x0ed6, 0x0eec, 0x0f00, 0x0f17, 0x0f2b, 0x0f41, 0x0f57, + // Entry 24400 - 2443F + 0x0f6b, 0x0f7f, 0x0f95, 0x0fa8, 0x0fbf, 0x0fd4, 0x0fea, 0x0fff, + 0x1015, 0x102c, 0x1042, 0x1059, 0x106f, 0x1085, 0x1099, 0x10ae, + 0x10c5, 0x10da, 0x10ee, 0x1102, 0x1117, 0x112b, 0x1142, 0x1157, + 0x116b, 0x1180, 0x1194, 0x11aa, 0x11c0, 0x11d6, 0x11ea, 0x11ff, + 0x1214, 0x1228, 0x123d, 0x1254, 0x1268, 0x127d, 0x1291, 0x12a5, + 0x12bb, 0x12d1, 0x12e5, 0x12fc, 0x1312, 0x1327, 0x133c, 0x1351, + 0x1366, 0x137d, 0x1391, 0x13a5, 0x13ba, 0x13cf, 0x13e4, 0x13f8, + 0x140d, 0x1422, 0x1436, 0x1449, 0x145d, 0x1472, 0x1488, 0x149c, + // Entry 24440 - 2447F + 0x14b0, 0x14b6, 0x14be, 0x14c5, 0x0004, 0x0525, 0x051f, 0x051c, + 0x0522, 0x0001, 0x002f, 0x0015, 0x0001, 0x002f, 0x0028, 0x0001, + 0x002f, 0x01d1, 0x0001, 0x002f, 0x01dc, 0x0004, 0x0536, 0x0530, + 0x052d, 0x0533, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0005, 0x053f, + 0x0000, 0x0000, 0x0000, 0x05a4, 0x0002, 0x0542, 0x0573, 0x0003, + 0x0546, 0x0555, 0x0564, 0x000d, 0x0000, 0xffff, 0x19c9, 0x19d3, + 0x19df, 0x2566, 0x19eb, 0x19f2, 0x256a, 0x1a01, 0x1a06, 0x2575, + // Entry 24480 - 244BF + 0x23c6, 0x1a16, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, + 0x2426, 0x000d, 0x0000, 0xffff, 0x19c9, 0x19d3, 0x19df, 0x2566, + 0x19eb, 0x19f2, 0x256a, 0x1a01, 0x1a06, 0x2575, 0x23c6, 0x1a16, + 0x0003, 0x0577, 0x0586, 0x0595, 0x000d, 0x0000, 0xffff, 0x19c9, + 0x19d3, 0x19df, 0x2566, 0x19eb, 0x19f2, 0x256a, 0x1a01, 0x1a06, + 0x2575, 0x23c6, 0x1a16, 0x000d, 0x000d, 0xffff, 0x0140, 0x0143, + 0x0146, 0x0149, 0x338b, 0x338e, 0x3391, 0x3394, 0x3397, 0x339a, + // Entry 244C0 - 244FF + 0x339e, 0x33a2, 0x000d, 0x0000, 0xffff, 0x19c9, 0x19d3, 0x19df, + 0x2566, 0x19eb, 0x19f2, 0x256a, 0x1a01, 0x1a06, 0x2575, 0x23c6, + 0x1a16, 0x0001, 0x05a6, 0x0001, 0x05a8, 0x0001, 0x0000, 0x1a1d, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x05b4, 0x0000, 0x0000, + 0x9006, 0x0001, 0x05b6, 0x0001, 0x05b8, 0x0002, 0x000d, 0x02e9, + 0x33ad, 0x0042, 0x05ff, 0x0604, 0x0609, 0x060e, 0x062b, 0x0648, + 0x0665, 0x0682, 0x069f, 0x06bc, 0x06d9, 0x06f6, 0x0713, 0x0734, + 0x0755, 0x0776, 0x077b, 0x0780, 0x0785, 0x07a4, 0x07c3, 0x07e2, + // Entry 24500 - 2453F + 0x07e7, 0x07ec, 0x07f1, 0x07f6, 0x07fb, 0x0800, 0x0805, 0x080a, + 0x080f, 0x0829, 0x0843, 0x085d, 0x0877, 0x0891, 0x08ab, 0x08c5, + 0x08df, 0x08f9, 0x0913, 0x092d, 0x0947, 0x0961, 0x097b, 0x0995, + 0x09af, 0x09c9, 0x09e3, 0x09fd, 0x0a17, 0x0a31, 0x0a36, 0x0a3b, + 0x0a40, 0x0a5c, 0x0a74, 0x0a8c, 0x0aa8, 0x0ac0, 0x0ad8, 0x0af4, + 0x0b0c, 0x0b24, 0x0b29, 0x0b2e, 0x0001, 0x0601, 0x0001, 0x0001, + 0x0040, 0x0001, 0x0606, 0x0001, 0x0001, 0x0040, 0x0001, 0x060b, + 0x0001, 0x0001, 0x0040, 0x0003, 0x0612, 0x0615, 0x061a, 0x0001, + // Entry 24540 - 2457F + 0x000d, 0x02fd, 0x0003, 0x000d, 0x0304, 0x0313, 0x031e, 0x0002, + 0x061d, 0x0624, 0x0005, 0x000d, 0x034b, 0x032f, 0xffff, 0xffff, + 0x033d, 0x0005, 0x000d, 0x037b, 0x0359, 0xffff, 0xffff, 0x036a, + 0x0003, 0x062f, 0x0632, 0x0637, 0x0001, 0x000d, 0x03ac, 0x0003, + 0x002f, 0x14cc, 0x14d9, 0x14e2, 0x0002, 0x063a, 0x0641, 0x0005, + 0x000d, 0x03af, 0x03af, 0xffff, 0xffff, 0x03af, 0x0005, 0x000d, + 0x03b9, 0x03b9, 0xffff, 0xffff, 0x03b9, 0x0003, 0x064c, 0x064f, + 0x0654, 0x0001, 0x000d, 0x03ac, 0x0003, 0x002f, 0x14f1, 0x14fc, + // Entry 24580 - 245BF + 0x1503, 0x0002, 0x0657, 0x065e, 0x0005, 0x000d, 0x03af, 0x03af, + 0xffff, 0xffff, 0x03af, 0x0005, 0x000d, 0x03b9, 0x03b9, 0xffff, + 0xffff, 0x03b9, 0x0003, 0x0669, 0x066c, 0x0671, 0x0001, 0x000d, + 0x03c6, 0x0003, 0x002f, 0x1510, 0x1520, 0x152d, 0x0002, 0x0674, + 0x067b, 0x0005, 0x000d, 0x040f, 0x0400, 0xffff, 0xffff, 0x040f, + 0x0005, 0x000d, 0x0431, 0x041f, 0xffff, 0xffff, 0x0431, 0x0003, + 0x0686, 0x0689, 0x068e, 0x0001, 0x000d, 0x0444, 0x0003, 0x002f, + 0x153f, 0x154b, 0x1554, 0x0002, 0x0691, 0x0698, 0x0005, 0x000d, + // Entry 245C0 - 245FF + 0x0448, 0x0448, 0xffff, 0xffff, 0x0448, 0x0005, 0x000d, 0x0453, + 0x0453, 0xffff, 0xffff, 0x0453, 0x0003, 0x06a3, 0x06a6, 0x06ab, + 0x0001, 0x000d, 0x0444, 0x0003, 0x002f, 0x153f, 0x154b, 0x1554, + 0x0002, 0x06ae, 0x06b5, 0x0005, 0x000d, 0x0448, 0x0448, 0xffff, + 0xffff, 0x0448, 0x0005, 0x000d, 0x0453, 0x0453, 0xffff, 0xffff, + 0x0453, 0x0003, 0x06c0, 0x06c3, 0x06c8, 0x0001, 0x000d, 0x0461, + 0x0003, 0x000d, 0x0468, 0x0477, 0x0483, 0x0002, 0x06cb, 0x06d2, + 0x0005, 0x000d, 0x04b1, 0x0494, 0xffff, 0xffff, 0x04a2, 0x0005, + // Entry 24600 - 2463F + 0x000d, 0x04e3, 0x04c0, 0xffff, 0xffff, 0x04d1, 0x0003, 0x06dd, + 0x06e0, 0x06e5, 0x0001, 0x000d, 0x04f5, 0x0003, 0x002f, 0x1562, + 0x156e, 0x1577, 0x0002, 0x06e8, 0x06ef, 0x0005, 0x000d, 0x04f9, + 0x04f9, 0xffff, 0xffff, 0x04f9, 0x0005, 0x000d, 0x0504, 0x0504, + 0xffff, 0xffff, 0x0504, 0x0003, 0x06fa, 0x06fd, 0x0702, 0x0001, + 0x0029, 0x006c, 0x0003, 0x002f, 0x1562, 0x156e, 0x1577, 0x0002, + 0x0705, 0x070c, 0x0005, 0x000d, 0x04f9, 0x04f9, 0xffff, 0xffff, + 0x04f9, 0x0005, 0x000d, 0x0504, 0x0504, 0xffff, 0xffff, 0x0504, + // Entry 24640 - 2467F + 0x0004, 0x0718, 0x071b, 0x0720, 0x0731, 0x0001, 0x002f, 0x1585, + 0x0003, 0x002f, 0x158c, 0x159b, 0x15a7, 0x0002, 0x0723, 0x072a, + 0x0005, 0x002f, 0x15d4, 0x15b8, 0xffff, 0xffff, 0x15c6, 0x0005, + 0x002f, 0x1605, 0x15e3, 0xffff, 0xffff, 0x15f4, 0x0001, 0x002f, + 0x1617, 0x0004, 0x0739, 0x073c, 0x0741, 0x0752, 0x0001, 0x002f, + 0x1625, 0x0003, 0x002f, 0x1629, 0x1635, 0x163e, 0x0002, 0x0744, + 0x074b, 0x0005, 0x002f, 0x164c, 0x164c, 0xffff, 0xffff, 0x164c, + 0x0005, 0x002f, 0x1657, 0x1657, 0xffff, 0xffff, 0x1657, 0x0001, + // Entry 24680 - 246BF + 0x002f, 0x1617, 0x0004, 0x075a, 0x075d, 0x0762, 0x0773, 0x0001, + 0x002f, 0x1625, 0x0003, 0x002f, 0x1629, 0x1635, 0x163e, 0x0002, + 0x0765, 0x076c, 0x0005, 0x002f, 0x164c, 0x164c, 0xffff, 0xffff, + 0x164c, 0x0005, 0x002f, 0x1657, 0x1657, 0xffff, 0xffff, 0x1657, + 0x0001, 0x002f, 0x1617, 0x0001, 0x0778, 0x0001, 0x002f, 0x1665, + 0x0001, 0x077d, 0x0001, 0x002f, 0x1676, 0x0001, 0x0782, 0x0001, + 0x002f, 0x1680, 0x0003, 0x0789, 0x078c, 0x0793, 0x0001, 0x000d, + 0x0608, 0x0005, 0x000d, 0x0617, 0x061e, 0x0624, 0x060c, 0x062a, + // Entry 246C0 - 246FF + 0x0002, 0x0796, 0x079d, 0x0005, 0x000d, 0x0640, 0x0635, 0xffff, + 0xffff, 0x0640, 0x0005, 0x000d, 0x065a, 0x064c, 0xffff, 0xffff, + 0x065a, 0x0003, 0x07a8, 0x07ab, 0x07b2, 0x0001, 0x0029, 0x007b, + 0x0005, 0x000d, 0x0617, 0x061e, 0x0624, 0x060c, 0x062a, 0x0002, + 0x07b5, 0x07bc, 0x0005, 0x000d, 0x0640, 0x0635, 0xffff, 0xffff, + 0x0640, 0x0005, 0x000d, 0x065a, 0x064c, 0xffff, 0xffff, 0x065a, + 0x0003, 0x07c7, 0x07ca, 0x07d1, 0x0001, 0x0029, 0x007b, 0x0005, + 0x000d, 0x0617, 0x061e, 0x0624, 0x060c, 0x062a, 0x0002, 0x07d4, + // Entry 24700 - 2473F + 0x07db, 0x0005, 0x002f, 0x168e, 0x168e, 0xffff, 0xffff, 0x168e, + 0x0005, 0x002f, 0x1697, 0x1697, 0xffff, 0xffff, 0x1697, 0x0001, + 0x07e4, 0x0001, 0x000d, 0x0680, 0x0001, 0x07e9, 0x0001, 0x000d, + 0x068d, 0x0001, 0x07ee, 0x0001, 0x000d, 0x0698, 0x0001, 0x07f3, + 0x0001, 0x002f, 0x16a3, 0x0001, 0x07f8, 0x0001, 0x002f, 0x16b0, + 0x0001, 0x07fd, 0x0001, 0x002f, 0x16bc, 0x0001, 0x0802, 0x0001, + 0x002f, 0x16c6, 0x0001, 0x0807, 0x0001, 0x002f, 0x16da, 0x0001, + 0x080c, 0x0001, 0x002f, 0x16ea, 0x0003, 0x0000, 0x0813, 0x0818, + // Entry 24740 - 2477F + 0x0003, 0x000d, 0x06db, 0x06ec, 0x06f9, 0x0002, 0x081b, 0x0822, + 0x0005, 0x000d, 0x072c, 0x070c, 0xffff, 0xffff, 0x071c, 0x0005, + 0x000d, 0x0762, 0x073c, 0xffff, 0xffff, 0x074f, 0x0003, 0x0000, + 0x082d, 0x0832, 0x0003, 0x000d, 0x0775, 0x0782, 0x078b, 0x0002, + 0x0835, 0x083c, 0x0005, 0x000d, 0x072c, 0x070c, 0xffff, 0xffff, + 0x071c, 0x0005, 0x000d, 0x0762, 0x073c, 0xffff, 0xffff, 0x074f, + 0x0003, 0x0000, 0x0847, 0x084c, 0x0003, 0x000d, 0x0775, 0x0782, + 0x078b, 0x0002, 0x084f, 0x0856, 0x0005, 0x000d, 0x072c, 0x070c, + // Entry 24780 - 247BF + 0xffff, 0xffff, 0x071c, 0x0005, 0x000d, 0x0762, 0x073c, 0xffff, + 0xffff, 0x074f, 0x0003, 0x0000, 0x0861, 0x0866, 0x0003, 0x000d, + 0x079a, 0x07ae, 0x07bf, 0x0002, 0x0869, 0x0870, 0x0005, 0x000d, + 0x07fb, 0x07d5, 0xffff, 0xffff, 0x07e8, 0x0005, 0x000d, 0x083b, + 0x080f, 0xffff, 0xffff, 0x0825, 0x0003, 0x0000, 0x087b, 0x0880, + 0x0003, 0x000d, 0x0852, 0x085f, 0x0877, 0x0002, 0x0883, 0x088a, + 0x0005, 0x000d, 0x07fb, 0x07d5, 0xffff, 0xffff, 0x07e8, 0x0005, + 0x000d, 0x083b, 0x080f, 0xffff, 0xffff, 0x0825, 0x0003, 0x0000, + // Entry 247C0 - 247FF + 0x0895, 0x089a, 0x0003, 0x000d, 0x0852, 0x085f, 0x0877, 0x0002, + 0x089d, 0x08a4, 0x0005, 0x000d, 0x07fb, 0x07d5, 0xffff, 0xffff, + 0x07e8, 0x0005, 0x000d, 0x083b, 0x080f, 0xffff, 0xffff, 0x0825, + 0x0003, 0x0000, 0x08af, 0x08b4, 0x0003, 0x000d, 0x0886, 0x0895, + 0x08a1, 0x0002, 0x08b7, 0x08be, 0x0005, 0x000d, 0x08ce, 0x08b2, + 0xffff, 0xffff, 0x08c0, 0x0005, 0x000d, 0x08ff, 0x08dd, 0xffff, + 0xffff, 0x08ee, 0x0003, 0x0000, 0x08c9, 0x08ce, 0x0003, 0x000d, + 0x0911, 0x091e, 0x0928, 0x0002, 0x08d1, 0x08d8, 0x0005, 0x000d, + // Entry 24800 - 2483F + 0x08ce, 0x08b2, 0xffff, 0xffff, 0x08c0, 0x0005, 0x000d, 0x08ff, + 0x08dd, 0xffff, 0xffff, 0x08ee, 0x0003, 0x0000, 0x08e3, 0x08e8, + 0x0003, 0x000d, 0x0911, 0x091e, 0x0928, 0x0002, 0x08eb, 0x08f2, + 0x0005, 0x000d, 0x08ce, 0x08b2, 0xffff, 0xffff, 0x08c0, 0x0005, + 0x000d, 0x08ff, 0x08dd, 0xffff, 0xffff, 0x08ee, 0x0003, 0x0000, + 0x08fd, 0x0902, 0x0003, 0x000d, 0x0937, 0x0947, 0x0953, 0x0002, + 0x0905, 0x090c, 0x0005, 0x000d, 0x0983, 0x0965, 0xffff, 0xffff, + 0x0974, 0x0005, 0x000d, 0x09b6, 0x0992, 0xffff, 0xffff, 0x09a4, + // Entry 24840 - 2487F + 0x0003, 0x0000, 0x0917, 0x091c, 0x0003, 0x000d, 0x09c8, 0x09d5, + 0x09de, 0x0002, 0x091f, 0x0926, 0x0005, 0x000d, 0x0983, 0x0965, + 0xffff, 0xffff, 0x0974, 0x0005, 0x000d, 0x09b6, 0x0992, 0xffff, + 0xffff, 0x09a4, 0x0003, 0x0000, 0x0931, 0x0936, 0x0003, 0x000d, + 0x09c8, 0x09d5, 0x09de, 0x0002, 0x0939, 0x0940, 0x0005, 0x000d, + 0x0983, 0x0965, 0xffff, 0xffff, 0x0974, 0x0005, 0x000d, 0x09b6, + 0x0992, 0xffff, 0xffff, 0x09a4, 0x0003, 0x0000, 0x094b, 0x0950, + 0x0003, 0x000d, 0x09ed, 0x09ff, 0x0a0e, 0x0002, 0x0953, 0x095a, + // Entry 24880 - 248BF + 0x0005, 0x000d, 0x0a44, 0x0a22, 0xffff, 0xffff, 0x0a33, 0x0005, + 0x000d, 0x0a7e, 0x0a56, 0xffff, 0xffff, 0x0a6a, 0x0003, 0x0000, + 0x0965, 0x096a, 0x0003, 0x000d, 0x0a93, 0x0aa1, 0x0aac, 0x0002, + 0x096d, 0x0974, 0x0005, 0x000d, 0x0a44, 0x0a22, 0xffff, 0xffff, + 0x0a33, 0x0005, 0x000d, 0x0a7e, 0x0a56, 0xffff, 0xffff, 0x0a6a, + 0x0003, 0x0000, 0x097f, 0x0984, 0x0003, 0x000d, 0x0a93, 0x0aa1, + 0x0aac, 0x0002, 0x0987, 0x098e, 0x0005, 0x000d, 0x0a44, 0x0a22, + 0xffff, 0xffff, 0x0a33, 0x0005, 0x000d, 0x0a7e, 0x0a56, 0xffff, + // Entry 248C0 - 248FF + 0xffff, 0x0a6a, 0x0003, 0x0000, 0x0999, 0x099e, 0x0003, 0x000d, + 0x0abc, 0x0aca, 0x0ad5, 0x0002, 0x09a1, 0x09a8, 0x0005, 0x000d, + 0x0aff, 0x0ae5, 0xffff, 0xffff, 0x0af2, 0x0005, 0x000d, 0x0b2d, + 0x0b0d, 0xffff, 0xffff, 0x0b1d, 0x0003, 0x0000, 0x09b3, 0x09b8, + 0x0003, 0x000d, 0x0b3e, 0x0b4b, 0x0b55, 0x0002, 0x09bb, 0x09c2, + 0x0005, 0x000d, 0x0aff, 0x0ae5, 0xffff, 0xffff, 0x0af2, 0x0005, + 0x000d, 0x0b2d, 0x0b0d, 0xffff, 0xffff, 0x0b1d, 0x0003, 0x0000, + 0x09cd, 0x09d2, 0x0003, 0x000d, 0x0b3e, 0x0b4b, 0x0b55, 0x0002, + // Entry 24900 - 2493F + 0x09d5, 0x09dc, 0x0005, 0x000d, 0x0aff, 0x0ae5, 0xffff, 0xffff, + 0x0af2, 0x0005, 0x000d, 0x0b2d, 0x0b0d, 0xffff, 0xffff, 0x0b1d, + 0x0003, 0x0000, 0x09e7, 0x09ec, 0x0003, 0x000d, 0x0b64, 0x0b73, + 0x0b7e, 0x0002, 0x09ef, 0x09f6, 0x0005, 0x000d, 0x0bab, 0x0b8f, + 0xffff, 0xffff, 0x0b9d, 0x0005, 0x000d, 0x0bdb, 0x0bb9, 0xffff, + 0xffff, 0x0bca, 0x0003, 0x0000, 0x0a01, 0x0a06, 0x0003, 0x000d, + 0x0bec, 0x0bf9, 0x0c02, 0x0002, 0x0a09, 0x0a10, 0x0005, 0x000d, + 0x0bab, 0x0b8f, 0xffff, 0xffff, 0x0b9d, 0x0005, 0x000d, 0x0bdb, + // Entry 24940 - 2497F + 0x0bb9, 0xffff, 0xffff, 0x0bca, 0x0003, 0x0000, 0x0a1b, 0x0a20, + 0x0003, 0x000d, 0x0bec, 0x0bf9, 0x0c02, 0x0002, 0x0a23, 0x0a2a, + 0x0005, 0x000d, 0x0bab, 0x0b8f, 0xffff, 0xffff, 0x0b9d, 0x0005, + 0x000d, 0x0bdb, 0x0bb9, 0xffff, 0xffff, 0x0bca, 0x0001, 0x0a33, + 0x0001, 0x0007, 0x0892, 0x0001, 0x0a38, 0x0001, 0x0007, 0x0892, + 0x0001, 0x0a3d, 0x0001, 0x0007, 0x0892, 0x0003, 0x0a44, 0x0a47, + 0x0a4b, 0x0001, 0x000d, 0x0c29, 0x0002, 0x000d, 0xffff, 0x0c2d, + 0x0002, 0x0a4e, 0x0a55, 0x0005, 0x000d, 0x0c4d, 0x0c36, 0xffff, + // Entry 24980 - 249BF + 0xffff, 0x0c41, 0x0005, 0x000d, 0x0c76, 0x0c59, 0xffff, 0xffff, + 0x0c67, 0x0003, 0x0a60, 0x0000, 0x0a63, 0x0001, 0x0000, 0x213b, + 0x0002, 0x0a66, 0x0a6d, 0x0005, 0x0014, 0x1298, 0x1298, 0xffff, + 0xffff, 0x1298, 0x0005, 0x002f, 0x16f7, 0x16f7, 0xffff, 0xffff, + 0x16f7, 0x0003, 0x0a78, 0x0000, 0x0a7b, 0x0001, 0x0000, 0x213b, + 0x0002, 0x0a7e, 0x0a85, 0x0005, 0x0014, 0x1298, 0x1298, 0xffff, + 0xffff, 0x1298, 0x0005, 0x002f, 0x16f7, 0x16f7, 0xffff, 0xffff, + 0x16f7, 0x0003, 0x0a90, 0x0a93, 0x0a97, 0x0001, 0x000d, 0x0c85, + // Entry 249C0 - 249FF + 0x0002, 0x000d, 0xffff, 0x0c8c, 0x0002, 0x0a9a, 0x0aa1, 0x0005, + 0x000d, 0x0cb3, 0x0c97, 0xffff, 0xffff, 0x0ca5, 0x0005, 0x000d, + 0x0ce3, 0x0cc1, 0xffff, 0xffff, 0x0cd2, 0x0003, 0x0aac, 0x0000, + 0x0aaf, 0x0001, 0x000b, 0x1250, 0x0002, 0x0ab2, 0x0ab9, 0x0005, + 0x0014, 0x12ef, 0x12ef, 0xffff, 0xffff, 0x12ef, 0x0005, 0x002f, + 0x1703, 0x1703, 0xffff, 0xffff, 0x1703, 0x0003, 0x0ac4, 0x0000, + 0x0ac7, 0x0001, 0x000b, 0x1250, 0x0002, 0x0aca, 0x0ad1, 0x0005, + 0x0014, 0x12ef, 0x12ef, 0xffff, 0xffff, 0x12ef, 0x0005, 0x002f, + // Entry 24A00 - 24A3F + 0x1703, 0x1703, 0xffff, 0xffff, 0x1703, 0x0003, 0x0adc, 0x0adf, + 0x0ae3, 0x0001, 0x000d, 0x0d0f, 0x0002, 0x002f, 0xffff, 0x1711, + 0x0002, 0x0ae6, 0x0aed, 0x0005, 0x000d, 0x0d3a, 0x0d1c, 0xffff, + 0xffff, 0x0d2b, 0x0005, 0x000d, 0x0d6d, 0x0d49, 0xffff, 0xffff, + 0x0d5b, 0x0003, 0x0af8, 0x0000, 0x0afb, 0x0001, 0x0000, 0x2002, + 0x0002, 0x0afe, 0x0b05, 0x0005, 0x0014, 0x1347, 0x1347, 0xffff, + 0xffff, 0x1347, 0x0005, 0x002f, 0x1715, 0x1715, 0xffff, 0xffff, + 0x1715, 0x0003, 0x0b10, 0x0000, 0x0b13, 0x0001, 0x0000, 0x2002, + // Entry 24A40 - 24A7F + 0x0002, 0x0b16, 0x0b1d, 0x0005, 0x0014, 0x1347, 0x1347, 0xffff, + 0xffff, 0x1347, 0x0005, 0x002f, 0x1715, 0x1715, 0xffff, 0xffff, + 0x1715, 0x0001, 0x0b26, 0x0001, 0x000d, 0x0d9a, 0x0001, 0x0b2b, + 0x0001, 0x000d, 0x0da9, 0x0001, 0x0b30, 0x0001, 0x000d, 0x0da9, + 0x0004, 0x0b38, 0x0b3d, 0x0b42, 0x0b51, 0x0003, 0x000d, 0x0dae, + 0x33b4, 0x33bb, 0x0003, 0x0000, 0x1de0, 0x21e9, 0x21fd, 0x0002, + 0x0000, 0x0b45, 0x0003, 0x0000, 0x0b4c, 0x0b49, 0x0001, 0x002f, + 0x1721, 0x0003, 0x002f, 0xffff, 0x173f, 0x1758, 0x0002, 0x0d38, + // Entry 24A80 - 24ABF + 0x0b54, 0x0003, 0x0b58, 0x0c98, 0x0bf8, 0x009e, 0x002f, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1808, 0x1862, 0x18ef, 0x1937, 0x1982, + 0x19c7, 0x1a0f, 0x1a5a, 0x1aa2, 0x1b7d, 0x1bbf, 0x1c0d, 0x1c70, + 0x1cb5, 0x1cfd, 0x1d5d, 0x1de1, 0x1e44, 0x1ea4, 0x1efe, 0x1f40, + 0xffff, 0xffff, 0x1fb5, 0xffff, 0x2020, 0xffff, 0x20b5, 0x20fa, + 0x2145, 0x2187, 0xffff, 0xffff, 0x220c, 0x225a, 0x22c2, 0xffff, + 0xffff, 0xffff, 0x234b, 0xffff, 0x23bb, 0x2415, 0xffff, 0x2492, + 0x24ec, 0x253a, 0xffff, 0xffff, 0xffff, 0xffff, 0x25e4, 0xffff, + // Entry 24AC0 - 24AFF + 0xffff, 0x265a, 0x26c0, 0xffff, 0xffff, 0x276d, 0x27cd, 0x281b, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x28f0, 0x2932, + 0x2977, 0x29bf, 0x2a04, 0xffff, 0xffff, 0x2ab2, 0xffff, 0x2b06, + 0xffff, 0xffff, 0x2b91, 0xffff, 0x2c48, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2ce7, 0xffff, 0x2d47, 0x2dbc, 0x2e25, 0x2e76, 0xffff, + 0xffff, 0xffff, 0x2ef1, 0x2f4b, 0x2f9f, 0xffff, 0xffff, 0x301d, + 0x30b7, 0x3108, 0x3144, 0xffff, 0xffff, 0x31bc, 0x320a, 0x3252, + 0xffff, 0x32b3, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x33da, + // Entry 24B00 - 24B3F + 0x3425, 0x346a, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x353d, 0xffff, 0xffff, 0x35ae, 0xffff, 0x35f9, 0xffff, + 0x3663, 0x36ae, 0x3702, 0xffff, 0x375b, 0x37b2, 0xffff, 0xffff, + 0xffff, 0x3846, 0x388b, 0xffff, 0xffff, 0x1771, 0x18a7, 0x1ade, + 0x1b2c, 0xffff, 0xffff, 0x2beb, 0x335f, 0x009e, 0x002f, 0x17aa, + 0x17c0, 0x17d8, 0x17f1, 0x1820, 0x1873, 0x1901, 0x194a, 0x1993, + 0x19d9, 0x1a22, 0x1a6c, 0x1ab0, 0x1b8d, 0x1bd3, 0x1c28, 0x1c81, + 0x1cc7, 0x1d17, 0x1d83, 0x1dfc, 0x1e5e, 0x1ebc, 0x1f0e, 0x1f55, + // Entry 24B40 - 24B7F + 0x1f91, 0x1fa2, 0x1fc9, 0x2003, 0x203d, 0x2099, 0x20c6, 0x210d, + 0x2155, 0x219d, 0x21db, 0x21f4, 0x2220, 0x2271, 0x22d3, 0x2307, + 0x2316, 0x2332, 0x2364, 0x23a8, 0x23d3, 0x242e, 0x2472, 0x24aa, + 0x2500, 0x254b, 0x257f, 0x2599, 0x25c0, 0x25d3, 0x25f6, 0x262c, + 0x2646, 0x2676, 0x26db, 0x273e, 0x275b, 0x2787, 0x27e1, 0x282b, + 0x285d, 0x286e, 0x2887, 0x289b, 0x28b7, 0x28d4, 0x2900, 0x2943, + 0x2989, 0x29d0, 0x2a25, 0x2a79, 0x2a96, 0x2ac3, 0x2af7, 0x2b1b, + 0x2b57, 0x2b7e, 0x2ba9, 0x2c30, 0x2c5b, 0x2c93, 0x2ca6, 0x2cb8, + // Entry 24B80 - 24BBF + 0x2ccd, 0x2cfb, 0x2d35, 0x2d68, 0x2dd9, 0x2e3a, 0x2e88, 0x2ebe, + 0x2ed1, 0x2ee0, 0x2f09, 0x2f61, 0x2fb7, 0x2ff9, 0x3007, 0x303f, + 0x30cc, 0x3116, 0x3158, 0x3192, 0x31a1, 0x31d0, 0x321c, 0x3265, + 0x329d, 0x32d4, 0x3328, 0x333a, 0x334a, 0x33b9, 0x33ca, 0x33ed, + 0x3436, 0x347c, 0x34b2, 0x34c5, 0x34d9, 0x34f3, 0x350b, 0x351e, + 0x352c, 0x354f, 0x3585, 0x359d, 0x35bc, 0x35ea, 0x3611, 0x3653, + 0x3676, 0x36c4, 0x3713, 0x3747, 0x3772, 0x37c7, 0x3803, 0x3815, + 0x3828, 0x3857, 0x38a3, 0x2723, 0x3095, 0x177e, 0x18b9, 0x1af2, + // Entry 24BC0 - 24BFF + 0x1b41, 0x2089, 0x2b6c, 0x2bfc, 0x3377, 0x009e, 0x002f, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1843, 0x188f, 0x191e, 0x1968, 0x19af, + 0x19f6, 0x1a40, 0x1a89, 0x1ac9, 0x1ba8, 0x1bf2, 0x1c4e, 0x1c9d, + 0x1ce4, 0x1d3c, 0x1db4, 0x1e22, 0x1e83, 0x1edf, 0x1f29, 0x1f75, + 0xffff, 0xffff, 0x1fe8, 0xffff, 0x2065, 0xffff, 0x20e2, 0x212b, + 0x2170, 0x21be, 0xffff, 0xffff, 0x223f, 0x2293, 0x22ef, 0xffff, + 0xffff, 0xffff, 0x2388, 0xffff, 0x23f6, 0x2452, 0xffff, 0x24cd, + 0x251f, 0x2567, 0xffff, 0xffff, 0xffff, 0xffff, 0x2613, 0xffff, + // Entry 24C00 - 24C3F + 0xffff, 0x269d, 0x2701, 0xffff, 0xffff, 0x27ac, 0x2800, 0x2846, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x291b, 0x295f, + 0x29a6, 0x29ec, 0x2a51, 0xffff, 0xffff, 0x2adf, 0xffff, 0x2b3b, + 0xffff, 0xffff, 0x2bcc, 0xffff, 0x2c79, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2d1a, 0xffff, 0x2d94, 0x2e01, 0x2e5a, 0x2ea5, 0xffff, + 0xffff, 0xffff, 0x2f2c, 0x2f82, 0x2fda, 0xffff, 0xffff, 0x306c, + 0x30ec, 0x312f, 0x3177, 0xffff, 0xffff, 0x31ef, 0x3239, 0x3283, + 0xffff, 0x3300, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x340b, + // Entry 24C40 - 24C7F + 0x3452, 0x3499, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x356c, 0xffff, 0xffff, 0x35d5, 0xffff, 0x3634, 0xffff, + 0x3694, 0x36e5, 0x372f, 0xffff, 0x3794, 0x37e7, 0xffff, 0xffff, + 0xffff, 0x3873, 0x38c6, 0xffff, 0xffff, 0x1796, 0x18d6, 0x1b11, + 0x1b61, 0xffff, 0xffff, 0x2c18, 0x339a, 0x0003, 0x0d3c, 0x0dab, + 0x0d6f, 0x0031, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 24C80 - 24CBF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x24ae, 0x24b7, 0xffff, 0x24c0, 0x003a, 0x0007, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 24CC0 - 24CFF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x24ae, 0x24b7, 0xffff, 0x24c0, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x24d9, + 0x0031, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 24D00 - 24D3F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x24b2, + 0x24bb, 0xffff, 0x24c4, 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0006, 0x0000, + 0x0012, 0x0021, 0x0000, 0x0000, 0x002c, 0x0002, 0x0000, 0x0015, + 0x0002, 0x0000, 0x0018, 0x0007, 0x0000, 0x236c, 0x2722, 0x2368, + 0x257d, 0x21e1, 0x2722, 0x257d, 0x0001, 0x0023, 0x0001, 0x0025, + 0x0005, 0x002f, 0xffff, 0x015a, 0x0161, 0x0168, 0x016f, 0x0001, + 0x002e, 0x0001, 0x0030, 0x0000, 0x0003, 0x0004, 0x01a0, 0x04f1, + // Entry 24D40 - 24D7F + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, + 0x0038, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, + 0x0000, 0x0027, 0x0004, 0x0024, 0x001e, 0x001b, 0x0021, 0x0001, + 0x0014, 0x0904, 0x0001, 0x0014, 0x035a, 0x0001, 0x0008, 0x0627, + 0x0001, 0x0018, 0x0297, 0x0004, 0x0035, 0x002f, 0x002c, 0x0032, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x0041, 0x00a6, 0x00fd, + 0x0132, 0x0153, 0x016d, 0x017e, 0x018f, 0x0002, 0x0044, 0x0075, + // Entry 24D80 - 24DBF + 0x0003, 0x0048, 0x0057, 0x0066, 0x000d, 0x0016, 0xffff, 0x00a3, + 0x26b4, 0x2516, 0x00b2, 0x26b9, 0x25ed, 0x25f2, 0x2521, 0x25f7, + 0x00cf, 0x2526, 0x26be, 0x000d, 0x0000, 0xffff, 0x2142, 0x2006, + 0x1f9a, 0x1f9c, 0x1f9a, 0x2142, 0x2142, 0x1f9c, 0x2002, 0x1f98, + 0x1f96, 0x2008, 0x000d, 0x0018, 0xffff, 0x02a4, 0x02ac, 0x02b5, + 0x02bc, 0x295a, 0x02c8, 0x02cf, 0x02d6, 0x02de, 0x02e8, 0x02f0, + 0x02f9, 0x0003, 0x0079, 0x0088, 0x0097, 0x000d, 0x000d, 0xffff, + 0x0059, 0x3363, 0x3276, 0x336b, 0x33bf, 0x336f, 0x3373, 0x327b, + // Entry 24DC0 - 24DFF + 0x337b, 0x337f, 0x327f, 0x0085, 0x000d, 0x0000, 0xffff, 0x2142, + 0x2006, 0x1f9a, 0x1f9c, 0x1f9a, 0x2142, 0x2142, 0x1f9c, 0x2002, + 0x1f98, 0x1f96, 0x2008, 0x000d, 0x000d, 0xffff, 0x0089, 0x0090, + 0x3283, 0x3289, 0x33c3, 0x328f, 0x3295, 0x329b, 0x3347, 0x3258, + 0x32a2, 0x3269, 0x0002, 0x00a9, 0x00d3, 0x0005, 0x00af, 0x00b8, + 0x00ca, 0x0000, 0x00c1, 0x0007, 0x0022, 0x01d9, 0x3530, 0x3535, + 0x3539, 0x353d, 0x3542, 0x3546, 0x0007, 0x0000, 0x1f96, 0x21e4, + 0x235d, 0x2002, 0x275f, 0x21e4, 0x2002, 0x0007, 0x0018, 0x0302, + // Entry 24E00 - 24E3F + 0x0305, 0x295f, 0x030c, 0x2962, 0x2966, 0x2969, 0x0007, 0x0030, + 0x000a, 0x0014, 0x001f, 0x0026, 0x002d, 0x0037, 0x003d, 0x0005, + 0x00d9, 0x00e2, 0x00f4, 0x0000, 0x00eb, 0x0007, 0x0022, 0x01d9, + 0x3530, 0x3535, 0x3539, 0x353d, 0x3542, 0x3546, 0x0007, 0x0000, + 0x1f96, 0x21e4, 0x235d, 0x2002, 0x275f, 0x21e4, 0x2002, 0x0007, + 0x0018, 0x0302, 0x0305, 0x295f, 0x030c, 0x2962, 0x2966, 0x2969, + 0x0007, 0x0030, 0x000a, 0x0014, 0x001f, 0x0026, 0x002d, 0x0037, + 0x003d, 0x0002, 0x0100, 0x0119, 0x0003, 0x0104, 0x010b, 0x0112, + // Entry 24E40 - 24E7F + 0x0005, 0x0000, 0xffff, 0x04e3, 0x04e6, 0x04e9, 0x04ec, 0x0005, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0018, + 0xffff, 0x0354, 0x035f, 0x036a, 0x0375, 0x0003, 0x011d, 0x0124, + 0x012b, 0x0005, 0x0000, 0xffff, 0x04e3, 0x04e6, 0x04e9, 0x04ec, + 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, + 0x0018, 0xffff, 0x0354, 0x035f, 0x036a, 0x0375, 0x0001, 0x0134, + 0x0003, 0x0138, 0x0141, 0x014a, 0x0002, 0x013b, 0x013e, 0x0001, + 0x0018, 0x0380, 0x0001, 0x0030, 0x0044, 0x0002, 0x0144, 0x0147, + // Entry 24E80 - 24EBF + 0x0001, 0x0014, 0x06cf, 0x0001, 0x0030, 0x004f, 0x0002, 0x014d, + 0x0150, 0x0001, 0x0018, 0x0380, 0x0001, 0x0030, 0x0044, 0x0003, + 0x0162, 0x0000, 0x0157, 0x0002, 0x015a, 0x015e, 0x0002, 0x0030, + 0x0054, 0x008f, 0x0002, 0x0030, 0x0072, 0x00a9, 0x0002, 0x0165, + 0x0169, 0x0002, 0x0030, 0x00c0, 0x00d7, 0x0002, 0x0030, 0x00cb, + 0x00e1, 0x0004, 0x017b, 0x0175, 0x0172, 0x0178, 0x0001, 0x0017, + 0x0528, 0x0001, 0x0014, 0x0792, 0x0001, 0x0018, 0x042e, 0x0001, + 0x0008, 0x0620, 0x0004, 0x018c, 0x0186, 0x0183, 0x0189, 0x0001, + // Entry 24EC0 - 24EFF + 0x0005, 0x0082, 0x0001, 0x0005, 0x008f, 0x0001, 0x0005, 0x0099, + 0x0001, 0x0030, 0x00e9, 0x0004, 0x019d, 0x0197, 0x0194, 0x019a, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0040, 0x01e1, 0x0000, 0x0000, + 0x01e6, 0x0203, 0x021b, 0x0233, 0x024b, 0x0263, 0x027b, 0x0298, + 0x02b0, 0x02c8, 0x02e5, 0x02fd, 0x0000, 0x0000, 0x0000, 0x0315, + 0x0332, 0x034a, 0x0000, 0x0000, 0x0000, 0x0362, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0367, 0x036f, 0x0377, 0x037f, 0x0387, + // Entry 24F00 - 24F3F + 0x038f, 0x0397, 0x039f, 0x03a7, 0x03af, 0x03b7, 0x03bf, 0x03c7, + 0x03cf, 0x03d7, 0x03df, 0x03e7, 0x03ef, 0x03f7, 0x03ff, 0x0407, + 0x0000, 0x040f, 0x0000, 0x0414, 0x042c, 0x0444, 0x045c, 0x0474, + 0x048c, 0x04a4, 0x04bc, 0x04d4, 0x04ec, 0x0001, 0x01e3, 0x0001, + 0x0030, 0x00f7, 0x0003, 0x01ea, 0x01ed, 0x01f2, 0x0001, 0x0018, + 0x043b, 0x0003, 0x0030, 0x00fc, 0x0101, 0x0108, 0x0002, 0x01f5, + 0x01fc, 0x0005, 0x0018, 0x047d, 0x0455, 0xffff, 0x296c, 0x0470, + 0x0005, 0x0030, 0x0133, 0x010f, 0xffff, 0x0120, 0x0133, 0x0003, + // Entry 24F40 - 24F7F + 0x0207, 0x0000, 0x020a, 0x0001, 0x0029, 0x0155, 0x0002, 0x020d, + 0x0214, 0x0005, 0x0014, 0x0a25, 0x0a25, 0xffff, 0x0a25, 0x0a25, + 0x0005, 0x0014, 0x0a3c, 0x0a3c, 0xffff, 0x0a3c, 0x0a3c, 0x0003, + 0x021f, 0x0000, 0x0222, 0x0001, 0x0029, 0x0155, 0x0002, 0x0225, + 0x022c, 0x0005, 0x0014, 0x0a25, 0x0a25, 0xffff, 0x0a25, 0x0a25, + 0x0005, 0x0014, 0x0a3c, 0x0a3c, 0xffff, 0x0a3c, 0x0a3c, 0x0003, + 0x0237, 0x0000, 0x023a, 0x0001, 0x0018, 0x04ce, 0x0002, 0x023d, + 0x0244, 0x0005, 0x0018, 0x0505, 0x04d6, 0xffff, 0x297a, 0x04f5, + // Entry 24F80 - 24FBF + 0x0005, 0x0030, 0x016f, 0x0145, 0xffff, 0x0159, 0x016f, 0x0003, + 0x024f, 0x0000, 0x0252, 0x0001, 0x0018, 0x0554, 0x0002, 0x0255, + 0x025c, 0x0005, 0x0018, 0x055b, 0x055b, 0xffff, 0x055b, 0x055b, + 0x0005, 0x0030, 0x0184, 0x0184, 0xffff, 0x0184, 0x0184, 0x0003, + 0x0267, 0x0000, 0x026a, 0x0001, 0x0001, 0x0117, 0x0002, 0x026d, + 0x0274, 0x0005, 0x0018, 0x057a, 0x057a, 0xffff, 0x057a, 0x057a, + 0x0005, 0x0030, 0x0195, 0x0195, 0xffff, 0x0195, 0x0195, 0x0003, + 0x027f, 0x0282, 0x0287, 0x0001, 0x0030, 0x01a3, 0x0003, 0x0030, + // Entry 24FC0 - 24FFF + 0x01aa, 0x01b9, 0x01c7, 0x0002, 0x028a, 0x0291, 0x0005, 0x0030, + 0x0206, 0x01d9, 0xffff, 0x01e7, 0x01f7, 0x0005, 0x0030, 0x023e, + 0x0216, 0xffff, 0x0229, 0x023e, 0x0003, 0x029c, 0x0000, 0x029f, + 0x0001, 0x0014, 0x0b8e, 0x0002, 0x02a2, 0x02a9, 0x0005, 0x0014, + 0x0bbf, 0x0bbf, 0xffff, 0x0bbf, 0x0bbf, 0x0005, 0x0014, 0x0bcc, + 0x0bcc, 0xffff, 0x0bcc, 0x0bcc, 0x0003, 0x02b4, 0x0000, 0x02b7, + 0x0001, 0x0014, 0x0b8e, 0x0002, 0x02ba, 0x02c1, 0x0005, 0x0014, + 0x0bbf, 0x0bbf, 0xffff, 0x0bbf, 0x0bbf, 0x0005, 0x0014, 0x0bcc, + // Entry 25000 - 2503F + 0x0bcc, 0xffff, 0x0bcc, 0x0bcc, 0x0003, 0x02cc, 0x02cf, 0x02d4, + 0x0001, 0x0030, 0x0252, 0x0003, 0x0030, 0x025b, 0x026c, 0x027c, + 0x0002, 0x02d7, 0x02de, 0x0005, 0x0030, 0x02c3, 0x0290, 0xffff, + 0x02a0, 0x02b2, 0x0005, 0x0030, 0x0301, 0x02d5, 0xffff, 0x02ea, + 0x0301, 0x0003, 0x02e9, 0x0000, 0x02ec, 0x0001, 0x0030, 0x0317, + 0x0002, 0x02ef, 0x02f6, 0x0005, 0x0030, 0x031e, 0x031e, 0xffff, + 0x031e, 0x031e, 0x0005, 0x0030, 0x032c, 0x032c, 0xffff, 0x032c, + 0x032c, 0x0003, 0x0301, 0x0000, 0x0304, 0x0001, 0x0030, 0x0317, + // Entry 25040 - 2507F + 0x0002, 0x0307, 0x030e, 0x0005, 0x0030, 0x031e, 0x031e, 0xffff, + 0x031e, 0x031e, 0x0005, 0x0030, 0x032c, 0x032c, 0xffff, 0x032c, + 0x032c, 0x0003, 0x0319, 0x031c, 0x0321, 0x0001, 0x0030, 0x033d, + 0x0003, 0x0030, 0x0344, 0x034b, 0x0353, 0x0002, 0x0324, 0x032b, + 0x0005, 0x0030, 0x0380, 0x035a, 0xffff, 0x0368, 0x0375, 0x0005, + 0x0030, 0x03af, 0x038d, 0xffff, 0x039d, 0x03af, 0x0003, 0x0336, + 0x0000, 0x0339, 0x0001, 0x0030, 0x033d, 0x0002, 0x033c, 0x0343, + 0x0005, 0x0030, 0x03c0, 0x035a, 0xffff, 0x03c0, 0x0375, 0x0005, + // Entry 25080 - 250BF + 0x0030, 0x03cc, 0x03cc, 0xffff, 0x03cc, 0x03cc, 0x0003, 0x034e, + 0x0000, 0x0351, 0x0001, 0x0000, 0x2008, 0x0002, 0x0354, 0x035b, + 0x0005, 0x002f, 0x168e, 0x168e, 0xffff, 0x168e, 0x168e, 0x0005, + 0x0030, 0x03db, 0x03db, 0xffff, 0x03db, 0x03db, 0x0001, 0x0364, + 0x0001, 0x0030, 0x03e7, 0x0002, 0x0000, 0x036a, 0x0003, 0x0030, + 0x03f8, 0x040a, 0x0419, 0x0002, 0x0000, 0x0372, 0x0003, 0x0030, + 0x042e, 0x043b, 0x0445, 0x0002, 0x0000, 0x037a, 0x0003, 0x0030, + 0x0455, 0x0461, 0x046a, 0x0002, 0x0000, 0x0382, 0x0003, 0x0030, + // Entry 250C0 - 250FF + 0x0479, 0x048c, 0x049c, 0x0002, 0x0000, 0x038a, 0x0003, 0x0030, + 0x04b2, 0x04c0, 0x04cb, 0x0002, 0x0000, 0x0392, 0x0003, 0x0030, + 0x04dc, 0x04e9, 0x04f3, 0x0002, 0x0000, 0x039a, 0x0003, 0x0030, + 0x0503, 0x0512, 0x051e, 0x0002, 0x0000, 0x03a2, 0x0003, 0x0030, + 0x0530, 0x053d, 0x0547, 0x0002, 0x0000, 0x03aa, 0x0003, 0x0030, + 0x0557, 0x0563, 0x056c, 0x0002, 0x0000, 0x03b2, 0x0003, 0x0030, + 0x057b, 0x058a, 0x0596, 0x0002, 0x0000, 0x03ba, 0x0003, 0x0030, + 0x05a8, 0x05b5, 0x05bf, 0x0002, 0x0000, 0x03c2, 0x0003, 0x0030, + // Entry 25100 - 2513F + 0x05cf, 0x05db, 0x05e4, 0x0002, 0x0000, 0x03ca, 0x0003, 0x0030, + 0x05f3, 0x0605, 0x0616, 0x0002, 0x0000, 0x03d2, 0x0003, 0x0030, + 0x062b, 0x0639, 0x0646, 0x0002, 0x0000, 0x03da, 0x0003, 0x0030, + 0x0657, 0x0664, 0x0670, 0x0002, 0x0000, 0x03e2, 0x0003, 0x0030, + 0x0680, 0x068e, 0x069b, 0x0002, 0x0000, 0x03ea, 0x0003, 0x0030, + 0x06ac, 0x06b9, 0x06c5, 0x0002, 0x0000, 0x03f2, 0x0003, 0x0030, + 0x06d5, 0x06e1, 0x06ec, 0x0002, 0x0000, 0x03fa, 0x0003, 0x0030, + 0x06fb, 0x070a, 0x0716, 0x0002, 0x0000, 0x0402, 0x0003, 0x0030, + // Entry 25140 - 2517F + 0x0728, 0x0735, 0x073f, 0x0002, 0x0000, 0x040a, 0x0003, 0x0030, + 0x074f, 0x075b, 0x0764, 0x0001, 0x0411, 0x0001, 0x0018, 0x0b20, + 0x0003, 0x0418, 0x0000, 0x041b, 0x0001, 0x0030, 0x0773, 0x0002, + 0x041e, 0x0425, 0x0005, 0x0030, 0x07ad, 0x077c, 0xffff, 0x078c, + 0x079d, 0x0005, 0x0030, 0x07e5, 0x07bc, 0xffff, 0x07cf, 0x07e5, + 0x0003, 0x0430, 0x0000, 0x0433, 0x0001, 0x0030, 0x07fa, 0x0002, + 0x0436, 0x043d, 0x0005, 0x0030, 0x0801, 0x0801, 0xffff, 0x0801, + 0x0801, 0x0005, 0x0030, 0x080f, 0x080f, 0xffff, 0x080f, 0x080f, + // Entry 25180 - 251BF + 0x0003, 0x0448, 0x0000, 0x044b, 0x0001, 0x0000, 0x213b, 0x0002, + 0x044e, 0x0455, 0x0005, 0x0014, 0x1298, 0x1298, 0xffff, 0x1298, + 0x1298, 0x0005, 0x0014, 0x12a1, 0x12a1, 0xffff, 0x12a1, 0x12a1, + 0x0003, 0x0460, 0x0000, 0x0463, 0x0001, 0x000d, 0x0c85, 0x0002, + 0x0466, 0x046d, 0x0005, 0x000d, 0x32ba, 0x0c97, 0xffff, 0x33c8, + 0x3205, 0x0005, 0x0030, 0x0845, 0x0820, 0xffff, 0x0831, 0x0845, + 0x0003, 0x0478, 0x0000, 0x047b, 0x0001, 0x0001, 0x07c5, 0x0002, + 0x047e, 0x0485, 0x0005, 0x000d, 0x0cf4, 0x0cf4, 0xffff, 0x0cf4, + // Entry 251C0 - 251FF + 0x0cf4, 0x0005, 0x0030, 0x0858, 0x0858, 0xffff, 0x0858, 0x0858, + 0x0003, 0x0490, 0x0000, 0x0493, 0x0001, 0x0000, 0x1f9a, 0x0002, + 0x0496, 0x049d, 0x0005, 0x0018, 0x0c35, 0x0c35, 0xffff, 0x0c35, + 0x0c35, 0x0005, 0x0030, 0x0867, 0x0867, 0xffff, 0x0867, 0x0867, + 0x0003, 0x04a8, 0x0000, 0x04ab, 0x0001, 0x000d, 0x0d0f, 0x0002, + 0x04ae, 0x04b5, 0x0005, 0x000d, 0x32d9, 0x0d1c, 0xffff, 0x33d7, + 0x3220, 0x0005, 0x0030, 0x089a, 0x0873, 0xffff, 0x0885, 0x089a, + 0x0003, 0x04c0, 0x0000, 0x04c3, 0x0001, 0x0001, 0x083e, 0x0002, + // Entry 25200 - 2523F + 0x04c6, 0x04cd, 0x0005, 0x000d, 0x0d7f, 0x0d7f, 0xffff, 0x0d7f, + 0x0d7f, 0x0005, 0x0030, 0x08ae, 0x08ae, 0xffff, 0x08ae, 0x08ae, + 0x0003, 0x04d8, 0x0000, 0x04db, 0x0001, 0x0000, 0x2002, 0x0002, + 0x04de, 0x04e5, 0x0005, 0x0014, 0x1347, 0x1347, 0xffff, 0x1347, + 0x1347, 0x0005, 0x0014, 0x1350, 0x1350, 0xffff, 0x1350, 0x1350, + 0x0001, 0x04ee, 0x0001, 0x0030, 0x08bd, 0x0004, 0x04f6, 0x04fb, + 0x0500, 0x050b, 0x0003, 0x0000, 0x1dc7, 0x2762, 0x2769, 0x0003, + 0x0030, 0x08cb, 0x08dd, 0x08ed, 0x0002, 0x0000, 0x0503, 0x0002, + // Entry 25240 - 2527F + 0x0000, 0x0506, 0x0003, 0x0030, 0xffff, 0x08fd, 0x0912, 0x0002, + 0x06d4, 0x050e, 0x0003, 0x05a8, 0x063e, 0x0512, 0x0094, 0x0030, + 0x0924, 0x0933, 0x0949, 0x095d, 0x0983, 0x09ca, 0x0a0a, 0x0a5b, + 0x0ac9, 0x0b34, 0x0b9f, 0xffff, 0x0bfc, 0x0c35, 0x0c72, 0x0cbd, + 0x0d0b, 0x0d49, 0x0d93, 0x0df5, 0x0e5d, 0x0eb3, 0x0f06, 0x0f4f, + 0x0f8e, 0x0fc6, 0x0fd5, 0x0ff4, 0x1026, 0x1045, 0x1077, 0x1098, + 0x10d7, 0x1110, 0x114f, 0x1187, 0x119b, 0x11c1, 0x1208, 0x1251, + 0x127d, 0x128a, 0x12a5, 0x12d0, 0x130c, 0x1332, 0x1385, 0x13c1, + // Entry 25280 - 252BF + 0x13e9, 0x1434, 0x1477, 0x14a7, 0x14be, 0x14f3, 0x1504, 0x1523, + 0x1553, 0x156b, 0x1596, 0x15f2, 0x1634, 0x164a, 0x1670, 0x16c3, + 0x1705, 0x1733, 0x1740, 0x1755, 0x1766, 0x177d, 0x178e, 0x17b0, + 0x17ea, 0x1827, 0x1865, 0xffff, 0x1893, 0x18aa, 0x18ce, 0x18fc, + 0x191d, 0x1953, 0x1961, 0x198b, 0x19c5, 0x19e9, 0x1a1b, 0x1a2b, + 0x1a3b, 0x1a4c, 0x1a76, 0x1aaa, 0x1ad5, 0x1b36, 0x1b89, 0x1bd0, + 0x1c00, 0x1c10, 0x1c1e, 0x1c40, 0x1c8e, 0x1cdd, 0x1d19, 0x1d26, + 0x1d57, 0x1db9, 0x1dfa, 0x1e33, 0x1e67, 0x1e75, 0x1e9e, 0x1edf, + // Entry 252C0 - 252FF + 0x1f1b, 0x1f4d, 0x1f86, 0x1fda, 0x1ff3, 0xffff, 0x2002, 0x2012, + 0x2033, 0xffff, 0x2075, 0x20a3, 0x20b4, 0x20c5, 0x20dd, 0x20f2, + 0x2102, 0x2110, 0x212e, 0x215e, 0x216e, 0x218c, 0x21ba, 0x21d8, + 0x220a, 0x2229, 0x2269, 0x22a7, 0x22d9, 0x22fe, 0x234a, 0x2380, + 0x238f, 0x239e, 0x23c7, 0x240b, 0x0094, 0x0030, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0970, 0x09bb, 0x09fa, 0x0a3c, 0x0aab, 0x0b17, + 0x0b80, 0xffff, 0x0bef, 0x0c28, 0x0c61, 0x0ca6, 0x0cfd, 0x0d39, + 0x0d7b, 0x0dd5, 0x0e46, 0x0e9d, 0x0ef1, 0x0f42, 0x0f7b, 0xffff, + // Entry 25300 - 2533F + 0xffff, 0x0fe4, 0xffff, 0x1035, 0xffff, 0x1088, 0x10ca, 0x1103, + 0x113c, 0xffff, 0xffff, 0x11b1, 0x11f3, 0x1244, 0xffff, 0xffff, + 0xffff, 0x12bb, 0xffff, 0x131c, 0x1370, 0xffff, 0x13d5, 0x1423, + 0x1468, 0xffff, 0xffff, 0xffff, 0xffff, 0x1514, 0xffff, 0xffff, + 0x157d, 0x15da, 0xffff, 0xffff, 0x1658, 0x16b2, 0x16f7, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x17a3, 0x17dc, 0x1818, + 0x1857, 0xffff, 0xffff, 0xffff, 0x18c0, 0xffff, 0x190b, 0xffff, + 0xffff, 0x1977, 0xffff, 0x19d9, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 25340 - 2537F + 0x1a65, 0xffff, 0x1ab9, 0x1b1f, 0x1b76, 0x1bc1, 0xffff, 0xffff, + 0xffff, 0x1c2c, 0x1c7a, 0x1cc8, 0xffff, 0xffff, 0x1d38, 0x1da7, + 0x1def, 0x1e22, 0xffff, 0xffff, 0x1e8d, 0x1ed2, 0x1f0b, 0xffff, + 0x1f65, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2022, 0xffff, + 0x2067, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x211f, 0xffff, 0xffff, 0x217e, 0xffff, 0x21c8, 0xffff, 0x2219, + 0x225b, 0x2297, 0xffff, 0x22ea, 0x2338, 0xffff, 0xffff, 0xffff, + 0x23b9, 0x23f5, 0x0094, 0x0030, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 25380 - 253BF + 0x09a1, 0x09e4, 0x0a25, 0x0a85, 0x0af2, 0x0b5c, 0x0bc9, 0xffff, + 0x0c14, 0x0c4d, 0x0c8e, 0x0cdf, 0x0d24, 0x0d64, 0x0db6, 0x0e20, + 0x0e7f, 0x0ed4, 0x0f26, 0x0f67, 0x0fac, 0xffff, 0xffff, 0x100f, + 0xffff, 0x1060, 0xffff, 0x10b3, 0x10ef, 0x1128, 0x116d, 0xffff, + 0xffff, 0x11dc, 0x1228, 0x1269, 0xffff, 0xffff, 0xffff, 0x12f0, + 0xffff, 0x1353, 0x13a5, 0xffff, 0x1408, 0x1450, 0x1491, 0xffff, + 0xffff, 0xffff, 0xffff, 0x153d, 0xffff, 0xffff, 0x15ba, 0x1615, + 0xffff, 0xffff, 0x1693, 0x16df, 0x171e, 0xffff, 0xffff, 0xffff, + // Entry 253C0 - 253FF + 0xffff, 0xffff, 0xffff, 0x17c8, 0x1803, 0x1841, 0x187e, 0xffff, + 0xffff, 0xffff, 0x18e7, 0xffff, 0x193a, 0xffff, 0xffff, 0x19aa, + 0xffff, 0x1a04, 0xffff, 0xffff, 0xffff, 0xffff, 0x1a92, 0xffff, + 0x1afc, 0x1b58, 0x1ba7, 0x1bea, 0xffff, 0xffff, 0xffff, 0x1c5f, + 0x1cad, 0x1cfd, 0xffff, 0xffff, 0x1d81, 0x1dd6, 0x1e10, 0x1e4f, + 0xffff, 0xffff, 0x1eba, 0x1ef7, 0x1f36, 0xffff, 0x1fb2, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x204f, 0xffff, 0x208e, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2148, 0xffff, + // Entry 25400 - 2543F + 0xffff, 0x21a5, 0xffff, 0x21f3, 0xffff, 0x2244, 0x2282, 0x22c2, + 0xffff, 0x231d, 0x2367, 0xffff, 0xffff, 0xffff, 0x23e0, 0x242c, + 0x0003, 0x06d8, 0x073e, 0x070b, 0x0031, 0x0017, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 25440 - 2547F + 0xffff, 0xffff, 0xffff, 0x1d16, 0x1d6a, 0xffff, 0x1dd4, 0x0031, + 0x0017, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1d16, 0x1d6a, + 0xffff, 0x1dd4, 0x0031, 0x0017, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 25480 - 254BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1d1a, 0x1d6e, 0xffff, 0x1dd8, 0x0003, 0x0004, 0x0558, + 0x09c1, 0x0012, 0x0017, 0x0030, 0x0078, 0x0000, 0x00ef, 0x0000, + 0x0155, 0x0180, 0x03cf, 0x0433, 0x047b, 0x0000, 0x0000, 0x0000, + // Entry 254C0 - 254FF + 0x0000, 0x04db, 0x04f3, 0x053c, 0x0005, 0x0000, 0x0000, 0x0000, + 0x0000, 0x001d, 0x0003, 0x0026, 0x002b, 0x0021, 0x0001, 0x0023, + 0x0001, 0x0017, 0x01f7, 0x0001, 0x0028, 0x0001, 0x0017, 0x01f7, + 0x0001, 0x002d, 0x0001, 0x0017, 0x01f7, 0x0001, 0x0032, 0x0002, + 0x0035, 0x0056, 0x0002, 0x0038, 0x0047, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + // Entry 25500 - 2553F + 0x2215, 0x2218, 0x2426, 0x0003, 0x005a, 0x0000, 0x0069, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x0005, 0x007e, 0x0000, + 0x0000, 0x0000, 0x00d9, 0x0002, 0x0081, 0x00b5, 0x0003, 0x0085, + 0x0095, 0x00a5, 0x000e, 0x0031, 0xffff, 0x0000, 0x0005, 0x000c, + 0x0013, 0x0019, 0x001f, 0x0025, 0x0030, 0x003a, 0x0044, 0x004a, + // Entry 25540 - 2557F + 0x004f, 0x0058, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, + 0x2426, 0x0422, 0x000e, 0x0031, 0xffff, 0x0000, 0x0005, 0x000c, + 0x0013, 0x0019, 0x001f, 0x0025, 0x0030, 0x003a, 0x0044, 0x004a, + 0x004f, 0x0058, 0x0003, 0x00b9, 0x0000, 0x00c9, 0x000e, 0x0031, + 0xffff, 0x0000, 0x0005, 0x000c, 0x0013, 0x0019, 0x001f, 0x0025, + 0x0030, 0x003a, 0x0044, 0x004a, 0x004f, 0x0058, 0x000e, 0x0031, + 0xffff, 0x0000, 0x0005, 0x000c, 0x0013, 0x0019, 0x001f, 0x0025, + // Entry 25580 - 255BF + 0x0030, 0x003a, 0x0044, 0x004a, 0x004f, 0x0058, 0x0003, 0x00e3, + 0x00e9, 0x00dd, 0x0001, 0x00df, 0x0002, 0x0000, 0x0425, 0x042a, + 0x0001, 0x00e5, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x00eb, + 0x0002, 0x0000, 0x0425, 0x042a, 0x0005, 0x00f5, 0x0000, 0x0000, + 0x0000, 0x013f, 0x0002, 0x00f8, 0x011b, 0x0002, 0x00fb, 0x010b, + 0x000e, 0x0000, 0xffff, 0x042f, 0x0438, 0x2708, 0x270e, 0x044c, + 0x0450, 0x0458, 0x0460, 0x2715, 0x046e, 0x271c, 0x0479, 0x0481, + 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + // Entry 255C0 - 255FF + 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x0422, + 0x0003, 0x011f, 0x0000, 0x012f, 0x000e, 0x0000, 0xffff, 0x042f, + 0x0438, 0x2708, 0x270e, 0x044c, 0x0450, 0x0458, 0x0460, 0x2715, + 0x046e, 0x271c, 0x0479, 0x0481, 0x000e, 0x0000, 0xffff, 0x042f, + 0x0438, 0x2708, 0x270e, 0x044c, 0x0450, 0x0458, 0x0460, 0x2715, + 0x046e, 0x271c, 0x0479, 0x0481, 0x0003, 0x0149, 0x014f, 0x0143, + 0x0001, 0x0145, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x014b, + 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x0151, 0x0002, 0x0000, + // Entry 25600 - 2563F + 0x0425, 0x042a, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x015e, 0x0000, 0x016f, 0x0004, 0x016c, 0x0166, 0x0163, 0x0169, + 0x0001, 0x0031, 0x0067, 0x0001, 0x0031, 0x007a, 0x0001, 0x0031, + 0x0087, 0x0001, 0x0031, 0x0093, 0x0004, 0x017d, 0x0177, 0x0174, + 0x017a, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x0189, 0x01ee, + 0x0245, 0x027a, 0x0381, 0x039c, 0x03ad, 0x03be, 0x0002, 0x018c, + 0x01bd, 0x0003, 0x0190, 0x019f, 0x01ae, 0x000d, 0x0016, 0xffff, + // Entry 25640 - 2567F + 0x00a3, 0x26c3, 0x26c9, 0x26d0, 0x26d6, 0x26dc, 0x26e2, 0x00c5, + 0x26e8, 0x00cf, 0x26ef, 0x26be, 0x000d, 0x0000, 0xffff, 0x257b, + 0x2364, 0x2579, 0x276d, 0x2579, 0x257b, 0x257b, 0x241f, 0x2770, + 0x236a, 0x236c, 0x236e, 0x000d, 0x0031, 0xffff, 0x00a2, 0x00aa, + 0x00b3, 0x00bc, 0x00c5, 0x00cc, 0x00d4, 0x00dc, 0x00e6, 0x00f1, + 0x00fa, 0x0103, 0x0003, 0x01c1, 0x01d0, 0x01df, 0x000d, 0x0016, + 0xffff, 0x00a3, 0x26c3, 0x26c9, 0x26d0, 0x26d6, 0x26dc, 0x26e2, + 0x00c5, 0x26e8, 0x00cf, 0x26ef, 0x26be, 0x000d, 0x0000, 0xffff, + // Entry 25680 - 256BF + 0x257b, 0x2364, 0x2579, 0x276d, 0x2579, 0x257b, 0x257b, 0x241f, + 0x2770, 0x236a, 0x236c, 0x236e, 0x000d, 0x0031, 0xffff, 0x00a2, + 0x00aa, 0x00b3, 0x00bc, 0x00c5, 0x00cc, 0x00d4, 0x00dc, 0x00e6, + 0x00f1, 0x00fa, 0x0103, 0x0002, 0x01f1, 0x021b, 0x0005, 0x01f7, + 0x0200, 0x0212, 0x0000, 0x0209, 0x0007, 0x0000, 0x257f, 0x19c7, + 0x2773, 0x2775, 0x2779, 0x2722, 0x277c, 0x0007, 0x0000, 0x257f, + 0x19c7, 0x2773, 0x2770, 0x2779, 0x2722, 0x2770, 0x0007, 0x0000, + 0x257f, 0x19c7, 0x2773, 0x2775, 0x2779, 0x2722, 0x277c, 0x0007, + // Entry 256C0 - 256FF + 0x0031, 0x010c, 0x0116, 0x011e, 0x0123, 0x012a, 0x0137, 0x013f, + 0x0005, 0x0221, 0x022a, 0x023c, 0x0000, 0x0233, 0x0007, 0x0000, + 0x257f, 0x19c7, 0x2773, 0x2775, 0x2779, 0x2722, 0x277c, 0x0007, + 0x0000, 0x257f, 0x19c7, 0x2773, 0x2770, 0x2779, 0x2722, 0x2770, + 0x0007, 0x0000, 0x257f, 0x19c7, 0x2773, 0x2775, 0x2779, 0x2722, + 0x277c, 0x0007, 0x0031, 0x010c, 0x0116, 0x011e, 0x0123, 0x012a, + 0x0137, 0x013f, 0x0002, 0x0248, 0x0261, 0x0003, 0x024c, 0x0253, + 0x025a, 0x0005, 0x0031, 0xffff, 0x0147, 0x0150, 0x015a, 0x0165, + // Entry 25700 - 2573F + 0x0005, 0x0031, 0xffff, 0x016f, 0x0172, 0x0176, 0x017b, 0x0005, + 0x0031, 0xffff, 0x017f, 0x018c, 0x019a, 0x01a9, 0x0003, 0x0265, + 0x026c, 0x0273, 0x0005, 0x0031, 0xffff, 0x01b7, 0x01c0, 0x01c9, + 0x01d2, 0x0005, 0x000d, 0xffff, 0x0140, 0x0143, 0x0146, 0x0149, + 0x0005, 0x0031, 0xffff, 0x01db, 0x01e8, 0x01f5, 0x0202, 0x0002, + 0x027d, 0x02ff, 0x0003, 0x0281, 0x02ab, 0x02d5, 0x000b, 0x0290, + 0x0296, 0x028d, 0x0299, 0x029f, 0x02a2, 0x02a5, 0x0293, 0x029c, + 0x0000, 0x02a8, 0x0001, 0x0031, 0x020f, 0x0001, 0x0031, 0x0217, + // Entry 25740 - 2577F + 0x0001, 0x0031, 0x021b, 0x0001, 0x0031, 0x0220, 0x0001, 0x0031, + 0x0224, 0x0001, 0x0031, 0x0217, 0x0001, 0x0031, 0x0220, 0x0001, + 0x0031, 0x022b, 0x0001, 0x0031, 0x0230, 0x0001, 0x0031, 0x0237, + 0x000b, 0x02ba, 0x02c0, 0x02b7, 0x02c3, 0x02c9, 0x02cc, 0x02cf, + 0x02bd, 0x02c6, 0x0000, 0x02d2, 0x0001, 0x0031, 0x020f, 0x0001, + 0x0031, 0x0217, 0x0001, 0x0031, 0x021b, 0x0001, 0x0031, 0x0220, + 0x0001, 0x0031, 0x0224, 0x0001, 0x0031, 0x0217, 0x0001, 0x0031, + 0x0220, 0x0001, 0x0031, 0x022b, 0x0001, 0x0031, 0x0230, 0x0001, + // Entry 25780 - 257BF + 0x0031, 0x0237, 0x000b, 0x02e4, 0x02ea, 0x02e1, 0x02ed, 0x02f3, + 0x02f6, 0x02f9, 0x02e7, 0x02f0, 0x0000, 0x02fc, 0x0001, 0x0031, + 0x020f, 0x0001, 0x0031, 0x0217, 0x0001, 0x0031, 0x021b, 0x0001, + 0x0031, 0x0220, 0x0001, 0x0031, 0x0224, 0x0001, 0x0031, 0x023e, + 0x0001, 0x0031, 0x0249, 0x0001, 0x0031, 0x022b, 0x0001, 0x0031, + 0x0230, 0x0001, 0x0031, 0x0237, 0x0003, 0x0303, 0x032d, 0x0357, + 0x000b, 0x0312, 0x0318, 0x030f, 0x031b, 0x0321, 0x0324, 0x0327, + 0x0315, 0x031e, 0x0000, 0x032a, 0x0001, 0x0031, 0x020f, 0x0001, + // Entry 257C0 - 257FF + 0x0031, 0x0217, 0x0001, 0x0031, 0x021b, 0x0001, 0x0031, 0x0220, + 0x0001, 0x0031, 0x0224, 0x0001, 0x0031, 0x0217, 0x0001, 0x0031, + 0x0220, 0x0001, 0x0031, 0x022b, 0x0001, 0x0031, 0x0230, 0x0001, + 0x0031, 0x0237, 0x000b, 0x033c, 0x0342, 0x0339, 0x0345, 0x034b, + 0x034e, 0x0351, 0x033f, 0x0348, 0x0000, 0x0354, 0x0001, 0x0031, + 0x020f, 0x0001, 0x0031, 0x0217, 0x0001, 0x0031, 0x021b, 0x0001, + 0x0031, 0x0220, 0x0001, 0x0031, 0x0224, 0x0001, 0x0031, 0x0217, + 0x0001, 0x0031, 0x0220, 0x0001, 0x0031, 0x022b, 0x0001, 0x0031, + // Entry 25800 - 2583F + 0x0230, 0x0001, 0x0031, 0x0237, 0x000b, 0x0366, 0x036c, 0x0363, + 0x036f, 0x0375, 0x0378, 0x037b, 0x0369, 0x0372, 0x0000, 0x037e, + 0x0001, 0x0031, 0x020f, 0x0001, 0x0031, 0x0217, 0x0001, 0x0031, + 0x021b, 0x0001, 0x0031, 0x0220, 0x0001, 0x0031, 0x0224, 0x0001, + 0x0031, 0x023e, 0x0001, 0x0031, 0x0249, 0x0001, 0x0031, 0x022b, + 0x0001, 0x0031, 0x0230, 0x0001, 0x0031, 0x0237, 0x0003, 0x0390, + 0x0396, 0x0385, 0x0002, 0x0388, 0x038c, 0x0002, 0x0031, 0x0253, + 0x027d, 0x0002, 0x0031, 0x0263, 0x0298, 0x0001, 0x0392, 0x0002, + // Entry 25840 - 2587F + 0x0031, 0x029f, 0x0298, 0x0001, 0x0398, 0x0002, 0x0031, 0x02a5, + 0x02a9, 0x0004, 0x03aa, 0x03a4, 0x03a1, 0x03a7, 0x0001, 0x0031, + 0x02ae, 0x0001, 0x0031, 0x02bf, 0x0001, 0x0031, 0x02ca, 0x0001, + 0x0031, 0x02d4, 0x0004, 0x03bb, 0x03b5, 0x03b2, 0x03b8, 0x0001, + 0x0005, 0x0082, 0x0001, 0x0005, 0x008f, 0x0001, 0x0005, 0x0099, + 0x0001, 0x0005, 0x00a1, 0x0004, 0x03cc, 0x03c6, 0x03c3, 0x03c9, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0005, 0x03d5, 0x0000, 0x0000, + // Entry 25880 - 258BF + 0x0000, 0x0420, 0x0002, 0x03d8, 0x03fc, 0x0003, 0x03dc, 0x0000, + 0x03ec, 0x000e, 0x0031, 0x0315, 0x02df, 0x02e5, 0x02ed, 0x02f6, + 0x02ff, 0x0305, 0x030e, 0x031f, 0x0327, 0x032d, 0x0335, 0x033b, + 0x033f, 0x000e, 0x0031, 0x0315, 0x02df, 0x02e5, 0x02ed, 0x02f6, + 0x02ff, 0x0305, 0x030e, 0x031f, 0x0327, 0x032d, 0x0335, 0x033b, + 0x033f, 0x0003, 0x0400, 0x0000, 0x0410, 0x000e, 0x0031, 0x0315, + 0x02df, 0x02e5, 0x02ed, 0x02f6, 0x02ff, 0x0305, 0x030e, 0x031f, + 0x0327, 0x032d, 0x0335, 0x033b, 0x033f, 0x000e, 0x0031, 0x0315, + // Entry 258C0 - 258FF + 0x02df, 0x02e5, 0x02ed, 0x02f6, 0x02ff, 0x0305, 0x030e, 0x031f, + 0x0327, 0x032d, 0x0335, 0x033b, 0x033f, 0x0003, 0x0429, 0x042e, + 0x0424, 0x0001, 0x0426, 0x0001, 0x0031, 0x0344, 0x0001, 0x042b, + 0x0001, 0x0031, 0x0344, 0x0001, 0x0430, 0x0001, 0x0031, 0x0344, + 0x0001, 0x0435, 0x0002, 0x0438, 0x0459, 0x0002, 0x043b, 0x044a, + 0x000d, 0x0000, 0xffff, 0x05a2, 0x05aa, 0x05b3, 0x05bc, 0x05c3, + 0x05cb, 0x05d2, 0x05d9, 0x05e1, 0x05ec, 0x05f2, 0x2724, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + // Entry 25900 - 2593F + 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x0003, 0x045d, + 0x0000, 0x046c, 0x000d, 0x0000, 0xffff, 0x05a2, 0x05aa, 0x05b3, + 0x05bc, 0x05c3, 0x05cb, 0x05d2, 0x05d9, 0x05e1, 0x05ec, 0x05f2, + 0x2724, 0x000d, 0x0000, 0xffff, 0x05a2, 0x05aa, 0x05b3, 0x05bc, + 0x05c3, 0x05cb, 0x05d2, 0x05d9, 0x05e1, 0x05ec, 0x05f2, 0x2724, + 0x0005, 0x0481, 0x0000, 0x0000, 0x0000, 0x04c8, 0x0002, 0x0484, + 0x04a6, 0x0003, 0x0488, 0x0000, 0x0497, 0x000d, 0x0031, 0xffff, + 0x0348, 0x034d, 0x0352, 0x035a, 0x0362, 0x036a, 0x0373, 0x0378, + // Entry 25940 - 2597F + 0x037d, 0x0382, 0x0387, 0x0390, 0x000d, 0x0031, 0xffff, 0x0399, + 0x03a2, 0x03a8, 0x03b7, 0x03c7, 0x03d9, 0x03ec, 0x03f3, 0x03fa, + 0x0403, 0x040b, 0x0416, 0x0003, 0x0000, 0x04aa, 0x04b9, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, 0x0031, + 0xffff, 0x0399, 0x03a2, 0x0422, 0x042a, 0x0433, 0x043e, 0x03ec, + 0x03f3, 0x03fa, 0x0403, 0x040b, 0x0416, 0x0003, 0x04d1, 0x04d6, + 0x04cc, 0x0001, 0x04ce, 0x0001, 0x0031, 0x044a, 0x0001, 0x04d3, + // Entry 25980 - 259BF + 0x0001, 0x0031, 0x044a, 0x0001, 0x04d8, 0x0001, 0x0031, 0x044a, + 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x04e2, 0x0004, + 0x04f0, 0x04ea, 0x04e7, 0x04ed, 0x0001, 0x0031, 0x0067, 0x0001, + 0x0031, 0x007a, 0x0001, 0x0031, 0x044d, 0x0001, 0x0031, 0x0458, + 0x0001, 0x04f5, 0x0002, 0x04f8, 0x051a, 0x0003, 0x0000, 0x04fc, + 0x050b, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, + 0x000d, 0x0014, 0xffff, 0x0916, 0x347a, 0x3486, 0x35ee, 0x3492, + // Entry 259C0 - 259FF + 0x3499, 0x35f2, 0x34a3, 0x34a8, 0x3604, 0x0963, 0x096a, 0x0003, + 0x051e, 0x0000, 0x052d, 0x000d, 0x0014, 0xffff, 0x0916, 0x347a, + 0x3486, 0x35ee, 0x3492, 0x3499, 0x35f2, 0x34a3, 0x34a8, 0x3604, + 0x0963, 0x096a, 0x000d, 0x0014, 0xffff, 0x0916, 0x347a, 0x3486, + 0x35ee, 0x3492, 0x3499, 0x35f2, 0x34a3, 0x34a8, 0x3604, 0x0963, + 0x096a, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0542, 0x0003, + 0x054c, 0x0552, 0x0546, 0x0001, 0x0548, 0x0002, 0x0031, 0x0467, + 0x0475, 0x0001, 0x054e, 0x0002, 0x0031, 0x0467, 0x0475, 0x0001, + // Entry 25A00 - 25A3F + 0x0554, 0x0002, 0x0031, 0x0467, 0x0475, 0x0042, 0x059b, 0x05a0, + 0x05a5, 0x05aa, 0x05c1, 0x05d8, 0x05ef, 0x0606, 0x061d, 0x0634, + 0x064b, 0x0662, 0x0679, 0x0694, 0x06af, 0x06ca, 0x06cf, 0x06d4, + 0x06d9, 0x06f2, 0x070b, 0x0724, 0x0729, 0x072e, 0x0733, 0x0738, + 0x073d, 0x0742, 0x0747, 0x074c, 0x0751, 0x0765, 0x0779, 0x078d, + 0x07a1, 0x07b5, 0x07c9, 0x07dd, 0x07f1, 0x0805, 0x0819, 0x082d, + 0x0841, 0x0855, 0x0869, 0x087d, 0x0891, 0x08a5, 0x08b9, 0x08cd, + 0x08e1, 0x08f5, 0x08fa, 0x08ff, 0x0904, 0x091a, 0x092c, 0x093e, + // Entry 25A40 - 25A7F + 0x0954, 0x0966, 0x0978, 0x098e, 0x09a0, 0x09b2, 0x09b7, 0x09bc, + 0x0001, 0x059d, 0x0001, 0x0031, 0x047c, 0x0001, 0x05a2, 0x0001, + 0x0031, 0x047c, 0x0001, 0x05a7, 0x0001, 0x0031, 0x047c, 0x0003, + 0x05ae, 0x05b1, 0x05b6, 0x0001, 0x0031, 0x0481, 0x0003, 0x0031, + 0x0485, 0x0491, 0x049b, 0x0002, 0x05b9, 0x05bd, 0x0002, 0x0031, + 0x04ab, 0x04ab, 0x0002, 0x0031, 0x04ba, 0x04ba, 0x0003, 0x05c5, + 0x05c8, 0x05cd, 0x0001, 0x0031, 0x0481, 0x0003, 0x0031, 0x0485, + 0x0491, 0x049b, 0x0002, 0x05d0, 0x05d4, 0x0002, 0x0031, 0x04ab, + // Entry 25A80 - 25ABF + 0x04ab, 0x0002, 0x0031, 0x04ba, 0x04ba, 0x0003, 0x05dc, 0x05df, + 0x05e4, 0x0001, 0x0031, 0x0481, 0x0003, 0x0031, 0x0485, 0x0491, + 0x049b, 0x0002, 0x05e7, 0x05eb, 0x0002, 0x0031, 0x04ab, 0x04ab, + 0x0002, 0x0031, 0x04ba, 0x04ba, 0x0003, 0x05f3, 0x05f6, 0x05fb, + 0x0001, 0x0031, 0x04ce, 0x0003, 0x0031, 0x04d8, 0x04ea, 0x04f9, + 0x0002, 0x05fe, 0x0602, 0x0002, 0x0031, 0x050f, 0x050f, 0x0002, + 0x0031, 0x0524, 0x0524, 0x0003, 0x060a, 0x060d, 0x0612, 0x0001, + 0x0031, 0x053e, 0x0003, 0x0031, 0x04d8, 0x04ea, 0x04f9, 0x0002, + // Entry 25AC0 - 25AFF + 0x0615, 0x0619, 0x0002, 0x0031, 0x050f, 0x050f, 0x0002, 0x0031, + 0x0524, 0x0524, 0x0003, 0x0621, 0x0624, 0x0629, 0x0001, 0x0031, + 0x053e, 0x0003, 0x0031, 0x04d8, 0x04ea, 0x04f9, 0x0002, 0x062c, + 0x0630, 0x0002, 0x0031, 0x0544, 0x0544, 0x0002, 0x0031, 0x0524, + 0x0524, 0x0003, 0x0638, 0x063b, 0x0640, 0x0001, 0x0031, 0x0555, + 0x0003, 0x0031, 0x055c, 0x056b, 0x0577, 0x0002, 0x0643, 0x0647, + 0x0002, 0x0031, 0x058a, 0x058a, 0x0002, 0x0031, 0x059c, 0x059c, + 0x0003, 0x064f, 0x0652, 0x0657, 0x0001, 0x0031, 0x0555, 0x0003, + // Entry 25B00 - 25B3F + 0x0031, 0x055c, 0x056b, 0x0577, 0x0002, 0x065a, 0x065e, 0x0002, + 0x0031, 0x058a, 0x058a, 0x0002, 0x0031, 0x059c, 0x059c, 0x0003, + 0x0666, 0x0669, 0x066e, 0x0001, 0x0031, 0x0555, 0x0003, 0x0031, + 0x055c, 0x056b, 0x0577, 0x0002, 0x0671, 0x0675, 0x0002, 0x0031, + 0x058a, 0x058a, 0x0002, 0x0031, 0x059c, 0x059c, 0x0004, 0x067e, + 0x0681, 0x0686, 0x0691, 0x0001, 0x0031, 0x05b3, 0x0003, 0x0031, + 0x05b8, 0x05c5, 0x05cf, 0x0002, 0x0689, 0x068d, 0x0002, 0x0031, + 0x05e0, 0x05e0, 0x0002, 0x0031, 0x05f0, 0x05f0, 0x0001, 0x0031, + // Entry 25B40 - 25B7F + 0x0605, 0x0004, 0x0699, 0x069c, 0x06a1, 0x06ac, 0x0001, 0x0031, + 0x05b3, 0x0003, 0x0031, 0x05b8, 0x05c5, 0x05cf, 0x0002, 0x06a4, + 0x06a8, 0x0002, 0x0031, 0x05e0, 0x05e0, 0x0002, 0x0031, 0x05f0, + 0x05f0, 0x0001, 0x0031, 0x0605, 0x0004, 0x06b4, 0x06b7, 0x06bc, + 0x06c7, 0x0001, 0x0031, 0x05b3, 0x0003, 0x0031, 0x05b8, 0x05c5, + 0x05cf, 0x0002, 0x06bf, 0x06c3, 0x0002, 0x0031, 0x05e0, 0x05e0, + 0x0002, 0x0031, 0x05f0, 0x05f0, 0x0001, 0x0031, 0x0605, 0x0001, + 0x06cc, 0x0001, 0x0031, 0x060e, 0x0001, 0x06d1, 0x0001, 0x0031, + // Entry 25B80 - 25BBF + 0x060e, 0x0001, 0x06d6, 0x0001, 0x0031, 0x060e, 0x0003, 0x06dd, + 0x06e0, 0x06e7, 0x0001, 0x0031, 0x061a, 0x0005, 0x0031, 0x062b, + 0x0632, 0x0635, 0x061e, 0x063c, 0x0002, 0x06ea, 0x06ee, 0x0002, + 0x0031, 0x0648, 0x0648, 0x0002, 0x0031, 0x0657, 0x0657, 0x0003, + 0x06f6, 0x06f9, 0x0700, 0x0001, 0x0031, 0x061a, 0x0005, 0x0031, + 0x062b, 0x0632, 0x0635, 0x061e, 0x063c, 0x0002, 0x0703, 0x0707, + 0x0002, 0x0031, 0x0648, 0x0648, 0x0002, 0x0031, 0x066b, 0x066b, + 0x0003, 0x070f, 0x0712, 0x0719, 0x0001, 0x0031, 0x061a, 0x0005, + // Entry 25BC0 - 25BFF + 0x0031, 0x062b, 0x0632, 0x0635, 0x061e, 0x063c, 0x0002, 0x071c, + 0x0720, 0x0002, 0x0031, 0x0648, 0x0648, 0x0002, 0x0031, 0x066b, + 0x066b, 0x0001, 0x0726, 0x0001, 0x0031, 0x0675, 0x0001, 0x072b, + 0x0001, 0x0031, 0x0675, 0x0001, 0x0730, 0x0001, 0x0031, 0x0675, + 0x0001, 0x0735, 0x0001, 0x0031, 0x067f, 0x0001, 0x073a, 0x0001, + 0x0031, 0x067f, 0x0001, 0x073f, 0x0001, 0x0031, 0x067f, 0x0001, + 0x0744, 0x0001, 0x0031, 0x068a, 0x0001, 0x0749, 0x0001, 0x0031, + 0x068a, 0x0001, 0x074e, 0x0001, 0x0031, 0x068a, 0x0003, 0x0000, + // Entry 25C00 - 25C3F + 0x0755, 0x075a, 0x0003, 0x0031, 0x069f, 0x06b1, 0x06c0, 0x0002, + 0x075d, 0x0761, 0x0002, 0x0031, 0x06d6, 0x06d6, 0x0002, 0x0031, + 0x06eb, 0x06eb, 0x0003, 0x0000, 0x0769, 0x076e, 0x0003, 0x0031, + 0x069f, 0x06b1, 0x06c0, 0x0002, 0x0771, 0x0775, 0x0002, 0x0031, + 0x06d6, 0x06d6, 0x0002, 0x0031, 0x06eb, 0x06eb, 0x0003, 0x0000, + 0x077d, 0x0782, 0x0003, 0x0031, 0x069f, 0x06b1, 0x06c0, 0x0002, + 0x0785, 0x0789, 0x0002, 0x0031, 0x06d6, 0x06d6, 0x0002, 0x0031, + 0x06eb, 0x06eb, 0x0003, 0x0000, 0x0791, 0x0796, 0x0003, 0x0031, + // Entry 25C40 - 25C7F + 0x0705, 0x0715, 0x0722, 0x0002, 0x0799, 0x079d, 0x0002, 0x0031, + 0x0736, 0x0736, 0x0002, 0x0031, 0x0749, 0x0749, 0x0003, 0x0000, + 0x07a5, 0x07aa, 0x0003, 0x0031, 0x0705, 0x0715, 0x0722, 0x0002, + 0x07ad, 0x07b1, 0x0002, 0x0031, 0x0736, 0x0736, 0x0002, 0x0031, + 0x0749, 0x0749, 0x0003, 0x0000, 0x07b9, 0x07be, 0x0003, 0x0031, + 0x0705, 0x0715, 0x0722, 0x0002, 0x07c1, 0x07c5, 0x0002, 0x0031, + 0x0736, 0x0736, 0x0002, 0x0031, 0x0749, 0x0749, 0x0003, 0x0000, + 0x07cd, 0x07d2, 0x0003, 0x0031, 0x0761, 0x076e, 0x0778, 0x0002, + // Entry 25C80 - 25CBF + 0x07d5, 0x07d9, 0x0002, 0x0031, 0x0789, 0x0789, 0x0002, 0x0031, + 0x0799, 0x0799, 0x0003, 0x0000, 0x07e1, 0x07e6, 0x0003, 0x0031, + 0x0761, 0x076e, 0x0778, 0x0002, 0x07e9, 0x07ed, 0x0002, 0x0031, + 0x0789, 0x0789, 0x0002, 0x0031, 0x0799, 0x0799, 0x0003, 0x0000, + 0x07f5, 0x07fa, 0x0003, 0x0031, 0x0761, 0x076e, 0x0778, 0x0002, + 0x07fd, 0x0801, 0x0002, 0x0031, 0x0789, 0x0789, 0x0002, 0x0031, + 0x0799, 0x0799, 0x0003, 0x0000, 0x0809, 0x080e, 0x0003, 0x0031, + 0x07ad, 0x07bc, 0x07c8, 0x0002, 0x0811, 0x0815, 0x0002, 0x0031, + // Entry 25CC0 - 25CFF + 0x07db, 0x07db, 0x0002, 0x0031, 0x07ed, 0x07ed, 0x0003, 0x0000, + 0x081d, 0x0822, 0x0003, 0x0031, 0x07ad, 0x07bc, 0x07c8, 0x0002, + 0x0825, 0x0829, 0x0002, 0x0031, 0x07db, 0x07db, 0x0002, 0x0031, + 0x07ed, 0x07ed, 0x0003, 0x0000, 0x0831, 0x0836, 0x0003, 0x0031, + 0x07ad, 0x07bc, 0x07c8, 0x0002, 0x0839, 0x083d, 0x0002, 0x0031, + 0x07db, 0x07db, 0x0002, 0x0031, 0x07ed, 0x07ed, 0x0003, 0x0000, + 0x0845, 0x084a, 0x0003, 0x0031, 0x0805, 0x081a, 0x082c, 0x0002, + 0x084d, 0x0851, 0x0002, 0x0031, 0x0845, 0x0845, 0x0002, 0x0031, + // Entry 25D00 - 25D3F + 0x085d, 0x085d, 0x0003, 0x0000, 0x0859, 0x085e, 0x0003, 0x0031, + 0x0805, 0x081a, 0x082c, 0x0002, 0x0861, 0x0865, 0x0002, 0x0031, + 0x0845, 0x0845, 0x0002, 0x0031, 0x085d, 0x085d, 0x0003, 0x0000, + 0x086d, 0x0872, 0x0003, 0x0031, 0x0805, 0x081a, 0x082c, 0x0002, + 0x0875, 0x0879, 0x0002, 0x0031, 0x0845, 0x0845, 0x0002, 0x0031, + 0x085d, 0x085d, 0x0003, 0x0000, 0x0881, 0x0886, 0x0003, 0x0031, + 0x087a, 0x088a, 0x0897, 0x0002, 0x0889, 0x088d, 0x0002, 0x0031, + 0x08ab, 0x08ab, 0x0002, 0x0031, 0x08be, 0x08be, 0x0003, 0x0000, + // Entry 25D40 - 25D7F + 0x0895, 0x089a, 0x0003, 0x0031, 0x087a, 0x088a, 0x0897, 0x0002, + 0x089d, 0x08a1, 0x0002, 0x0031, 0x08ab, 0x08ab, 0x0002, 0x0031, + 0x08be, 0x08be, 0x0003, 0x0000, 0x08a9, 0x08ae, 0x0003, 0x0031, + 0x087a, 0x088a, 0x0897, 0x0002, 0x08b1, 0x08b5, 0x0002, 0x0031, + 0x08ab, 0x08ab, 0x0002, 0x0031, 0x08be, 0x08be, 0x0003, 0x0000, + 0x08bd, 0x08c2, 0x0003, 0x0031, 0x08d6, 0x08e6, 0x08f3, 0x0002, + 0x08c5, 0x08c9, 0x0002, 0x0031, 0x0907, 0x0907, 0x0002, 0x0031, + 0x091a, 0x091a, 0x0003, 0x0000, 0x08d1, 0x08d6, 0x0003, 0x0031, + // Entry 25D80 - 25DBF + 0x08d6, 0x08e6, 0x08f3, 0x0002, 0x08d9, 0x08dd, 0x0002, 0x0031, + 0x0907, 0x0907, 0x0002, 0x0031, 0x091a, 0x091a, 0x0003, 0x0000, + 0x08e5, 0x08ea, 0x0003, 0x0031, 0x08d6, 0x08e6, 0x08f3, 0x0002, + 0x08ed, 0x08f1, 0x0002, 0x0031, 0x0907, 0x0907, 0x0002, 0x0031, + 0x091a, 0x091a, 0x0001, 0x08f7, 0x0001, 0x0031, 0x0932, 0x0001, + 0x08fc, 0x0001, 0x0031, 0x0932, 0x0001, 0x0901, 0x0001, 0x0031, + 0x0932, 0x0003, 0x0908, 0x090b, 0x090f, 0x0001, 0x0031, 0x093a, + 0x0002, 0x0031, 0xffff, 0x093f, 0x0002, 0x0912, 0x0916, 0x0002, + // Entry 25DC0 - 25DFF + 0x0031, 0x0951, 0x0951, 0x0002, 0x0031, 0x0961, 0x0961, 0x0003, + 0x091e, 0x0000, 0x0921, 0x0001, 0x0031, 0x093a, 0x0002, 0x0924, + 0x0928, 0x0002, 0x0031, 0x0951, 0x0951, 0x0002, 0x0031, 0x0961, + 0x0961, 0x0003, 0x0930, 0x0000, 0x0933, 0x0001, 0x0031, 0x093a, + 0x0002, 0x0936, 0x093a, 0x0002, 0x0031, 0x0951, 0x0951, 0x0002, + 0x0031, 0x0961, 0x0961, 0x0003, 0x0942, 0x0945, 0x0949, 0x0001, + 0x0031, 0x0977, 0x0002, 0x0031, 0xffff, 0x097c, 0x0002, 0x094c, + 0x0950, 0x0002, 0x0031, 0x098c, 0x098c, 0x0002, 0x0031, 0x099c, + // Entry 25E00 - 25E3F + 0x099c, 0x0003, 0x0958, 0x0000, 0x095b, 0x0001, 0x0031, 0x0977, + 0x0002, 0x095e, 0x0962, 0x0002, 0x0031, 0x098c, 0x098c, 0x0002, + 0x0031, 0x099c, 0x099c, 0x0003, 0x096a, 0x0000, 0x096d, 0x0001, + 0x0031, 0x0977, 0x0002, 0x0970, 0x0974, 0x0002, 0x0031, 0x098c, + 0x098c, 0x0002, 0x0031, 0x099c, 0x099c, 0x0003, 0x097c, 0x097f, + 0x0983, 0x0001, 0x0031, 0x09b1, 0x0002, 0x0031, 0xffff, 0x09bc, + 0x0002, 0x0986, 0x098a, 0x0002, 0x0031, 0x09c1, 0x09c1, 0x0002, + 0x0031, 0x09d7, 0x09d7, 0x0003, 0x0992, 0x0000, 0x0995, 0x0001, + // Entry 25E40 - 25E7F + 0x0031, 0x09b1, 0x0002, 0x0998, 0x099c, 0x0002, 0x0031, 0x09c1, + 0x09c1, 0x0002, 0x0031, 0x09d7, 0x09d7, 0x0003, 0x09a4, 0x0000, + 0x09a7, 0x0001, 0x0031, 0x09b1, 0x0002, 0x09aa, 0x09ae, 0x0002, + 0x0031, 0x09c1, 0x09c1, 0x0002, 0x0031, 0x09d7, 0x09d7, 0x0001, + 0x09b4, 0x0001, 0x0031, 0x09f2, 0x0001, 0x09b9, 0x0001, 0x0031, + 0x09f2, 0x0001, 0x09be, 0x0001, 0x0031, 0x09f2, 0x0004, 0x09c6, + 0x09cb, 0x09d0, 0x09df, 0x0003, 0x0000, 0x1dc7, 0x2762, 0x2769, + 0x0003, 0x0031, 0x09fc, 0x0a05, 0x0a15, 0x0002, 0x0000, 0x09d3, + // Entry 25E80 - 25EBF + 0x0003, 0x0000, 0x09da, 0x09d7, 0x0001, 0x0031, 0x0a23, 0x0003, + 0x0031, 0xffff, 0x0a47, 0x0a58, 0x0002, 0x0bc6, 0x09e2, 0x0003, + 0x09e6, 0x0b26, 0x0a86, 0x009e, 0x0031, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0af1, 0x0b3f, 0x0ba5, 0x0be2, 0x0c45, 0x0c9c, 0x0cdb, + 0x0d29, 0x0d5e, 0x0def, 0x0e1a, 0x0e5a, 0x0eb4, 0x0f03, 0x0f51, + 0x0fac, 0x101c, 0x1071, 0x10c9, 0x1112, 0x1145, 0xffff, 0xffff, + 0x11a4, 0xffff, 0x11fa, 0xffff, 0x1270, 0x12a7, 0x12dd, 0x130e, + 0xffff, 0xffff, 0x138c, 0x13c6, 0x1414, 0xffff, 0xffff, 0xffff, + // Entry 25EC0 - 25EFF + 0x1485, 0xffff, 0x14ed, 0x1541, 0xffff, 0x159c, 0x15ed, 0x1642, + 0xffff, 0xffff, 0xffff, 0xffff, 0x16d0, 0xffff, 0xffff, 0x1741, + 0x1795, 0xffff, 0xffff, 0x1825, 0x1870, 0x18af, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x1962, 0x1993, 0x19cd, 0x1a01, + 0x1a32, 0xffff, 0xffff, 0x1acc, 0xffff, 0x1b0a, 0xffff, 0xffff, + 0x1b86, 0xffff, 0x1c25, 0xffff, 0xffff, 0xffff, 0xffff, 0x1cb5, + 0xffff, 0x1d04, 0x1d61, 0x1dca, 0x1e0d, 0xffff, 0xffff, 0xffff, + 0x1e6b, 0x1eb7, 0x1efa, 0xffff, 0xffff, 0x1f61, 0x1fdd, 0x2026, + // Entry 25F00 - 25F3F + 0x2057, 0xffff, 0xffff, 0x20bb, 0x20f5, 0x2123, 0xffff, 0x2192, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2294, 0x22ce, 0x2304, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x23bb, + 0xffff, 0xffff, 0x2410, 0xffff, 0x244c, 0xffff, 0x24a8, 0x24df, + 0x2528, 0xffff, 0x256f, 0x25b8, 0xffff, 0xffff, 0xffff, 0x2631, + 0x266b, 0xffff, 0xffff, 0x0a68, 0x0b75, 0x0d8c, 0x0dbc, 0xffff, + 0xffff, 0x1bd8, 0x223b, 0x009e, 0x0031, 0x0a92, 0x0aa5, 0x0ac0, + 0x0ad9, 0x0b0a, 0x0b4d, 0x0bb5, 0x0bff, 0x0c5e, 0x0cad, 0x0cf1, + // Entry 25F40 - 25F7F + 0x0d36, 0x0d69, 0x0df9, 0x0e2b, 0x0e77, 0x0eca, 0x0f19, 0x0f6b, + 0x0fcd, 0x1034, 0x108a, 0x10dd, 0x1122, 0x1155, 0x1182, 0x118f, + 0x11b4, 0x11e1, 0x1219, 0x125a, 0x127e, 0x12b8, 0x12e9, 0x1320, + 0x1351, 0x136f, 0x139b, 0x13da, 0x1424, 0x1447, 0x1453, 0x146d, + 0x14a0, 0x14d9, 0x1508, 0x155a, 0x158f, 0x15b6, 0x1605, 0x164e, + 0x1673, 0x1688, 0x16ab, 0x16c2, 0x16de, 0x1707, 0x171e, 0x175c, + 0x17b1, 0x17fc, 0x1812, 0x183d, 0x1884, 0x18ba, 0x18dd, 0x18ef, + 0x1904, 0x1914, 0x192d, 0x1944, 0x196e, 0x19a2, 0x19da, 0x1a0d, + // Entry 25F80 - 25FBF + 0x1a51, 0x1a9b, 0x1ab3, 0x1ad8, 0x1afd, 0x1b1e, 0x1b53, 0x1b73, + 0x1b9d, 0x1c08, 0x1c34, 0x1c5e, 0x1c6d, 0x1c84, 0x1c9d, 0x1cca, + 0x1cf7, 0x1d1f, 0x1d80, 0x1ddc, 0x1e1b, 0x1e44, 0x1e52, 0x1e5e, + 0x1e80, 0x1ec9, 0x1f0d, 0x1f3f, 0x1f4a, 0x1f7c, 0x1ff1, 0x2032, + 0x2068, 0x2097, 0x20a3, 0x20ca, 0x2100, 0x213a, 0x2175, 0x21b3, + 0x2201, 0x2219, 0x222d, 0x2277, 0x2286, 0x22a3, 0x22dc, 0x2311, + 0x2338, 0x2351, 0x2368, 0x237f, 0x2393, 0x23a3, 0x23af, 0x23c7, + 0x23ec, 0x2402, 0x241c, 0x2441, 0x2462, 0x249b, 0x24b6, 0x24f3, + // Entry 25FC0 - 25FFF + 0x2536, 0x255f, 0x2583, 0x25c9, 0x25f8, 0x2606, 0x2618, 0x2640, + 0x2680, 0x17ec, 0x1fbf, 0x0a72, 0x0b81, 0x0d98, 0x0dc9, 0xffff, + 0x1b67, 0x1be4, 0x224b, 0x009e, 0x0031, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0b24, 0x0b60, 0x0bcb, 0x0c21, 0x0c7c, 0x0cc3, 0x0d0c, + 0x0d49, 0x0d7a, 0x0e09, 0x0e42, 0x0e95, 0x0ee6, 0x0f34, 0x0f8b, + 0x0ff4, 0x1052, 0x10a9, 0x10f7, 0x1133, 0x116b, 0xffff, 0xffff, + 0x11ca, 0xffff, 0x1239, 0xffff, 0x1292, 0x12ca, 0x12fb, 0x1338, + 0xffff, 0xffff, 0x13b0, 0x13f4, 0x1435, 0xffff, 0xffff, 0xffff, + // Entry 26000 - 2603F + 0x14bc, 0xffff, 0x1524, 0x1574, 0xffff, 0x15d1, 0x1623, 0x1660, + 0xffff, 0xffff, 0xffff, 0xffff, 0x16f2, 0xffff, 0xffff, 0x1778, + 0x17ce, 0xffff, 0xffff, 0x1856, 0x1899, 0x18cb, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x1980, 0x19b7, 0x19ed, 0x1a1f, + 0x1a75, 0xffff, 0xffff, 0x1aea, 0xffff, 0x1b38, 0xffff, 0xffff, + 0x1bba, 0xffff, 0x1c48, 0xffff, 0xffff, 0xffff, 0xffff, 0x1ce0, + 0xffff, 0x1d3f, 0x1da4, 0x1df4, 0x1e2f, 0xffff, 0xffff, 0xffff, + 0x1e9b, 0x1ee1, 0x1f25, 0xffff, 0xffff, 0x1f9d, 0x200b, 0x2044, + // Entry 26040 - 2607F + 0x207f, 0xffff, 0xffff, 0x20df, 0x2111, 0x2157, 0xffff, 0x21d9, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x22b8, 0x22ef, 0x2324, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x23d9, + 0xffff, 0xffff, 0x242e, 0xffff, 0x247e, 0xffff, 0x24ca, 0x250d, + 0x254a, 0xffff, 0x259d, 0x25e0, 0xffff, 0xffff, 0xffff, 0x2655, + 0x269b, 0xffff, 0xffff, 0x0a81, 0x0b92, 0x0da9, 0x0ddb, 0xffff, + 0xffff, 0x1bf5, 0x2260, 0x0003, 0x0bca, 0x0c39, 0x0bfd, 0x0031, + 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 26080 - 260BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x24ae, 0x24b7, + 0xffff, 0x24c0, 0x003a, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 260C0 - 260FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x24ae, 0x24b7, 0xffff, 0x24c0, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x24dd, 0x0031, 0x0007, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 26100 - 2613F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x24b2, 0x24bb, 0xffff, + 0x24c4, 0x0003, 0x0004, 0x0250, 0x069b, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0038, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, 0x0027, 0x0004, + 0x0024, 0x001e, 0x001b, 0x0021, 0x0001, 0x0032, 0x0000, 0x0001, + 0x0032, 0x0016, 0x0001, 0x0032, 0x0027, 0x0001, 0x001f, 0x0b31, + // Entry 26140 - 2617F + 0x0004, 0x0035, 0x002f, 0x002c, 0x0032, 0x0001, 0x0006, 0x022e, + 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, + 0x022e, 0x0008, 0x0041, 0x00a6, 0x00fd, 0x0132, 0x0203, 0x021d, + 0x022e, 0x023f, 0x0002, 0x0044, 0x0075, 0x0003, 0x0048, 0x0057, + 0x0066, 0x000d, 0x0032, 0xffff, 0x0037, 0x003e, 0x0045, 0x004c, + 0x0053, 0x005a, 0x0061, 0x0068, 0x006f, 0x0076, 0x007d, 0x0084, + 0x000d, 0x0032, 0xffff, 0x008b, 0x008e, 0x0091, 0x0094, 0x0091, + 0x008b, 0x008b, 0x0097, 0x009a, 0x008b, 0x009d, 0x00a0, 0x000d, + // Entry 26180 - 261BF + 0x0032, 0xffff, 0x00a3, 0x00b4, 0x00c5, 0x00d0, 0x00dd, 0x00ea, + 0x00f9, 0x0108, 0x0119, 0x012e, 0x0143, 0x0156, 0x0003, 0x0079, + 0x0088, 0x0097, 0x000d, 0x0032, 0xffff, 0x0037, 0x003e, 0x0045, + 0x004c, 0x0053, 0x005a, 0x0061, 0x0068, 0x006f, 0x0076, 0x007d, + 0x0084, 0x000d, 0x0032, 0xffff, 0x008b, 0x008e, 0x0091, 0x0094, + 0x0091, 0x008b, 0x008b, 0x0097, 0x009a, 0x008b, 0x009d, 0x00a0, + 0x000d, 0x0032, 0xffff, 0x016b, 0x017a, 0x0189, 0x0192, 0x019d, + 0x01a8, 0x01b5, 0x01c2, 0x01d1, 0x01e4, 0x01f7, 0x0208, 0x0002, + // Entry 261C0 - 261FF + 0x00a9, 0x00d3, 0x0005, 0x00af, 0x00b8, 0x00ca, 0x0000, 0x00c1, + 0x0007, 0x0032, 0x021b, 0x0222, 0x0229, 0x0230, 0x0237, 0x023e, + 0x0245, 0x0007, 0x0032, 0x024c, 0x024f, 0x024f, 0x0252, 0x008b, + 0x0255, 0x0258, 0x0007, 0x0032, 0x025b, 0x0260, 0x0265, 0x026a, + 0x026f, 0x0274, 0x0279, 0x0007, 0x0032, 0x027e, 0x028b, 0x02a0, + 0x02b3, 0x02c8, 0x02db, 0x02e8, 0x0005, 0x00d9, 0x00e2, 0x00f4, + 0x0000, 0x00eb, 0x0007, 0x0032, 0x021b, 0x0222, 0x0229, 0x0230, + 0x0237, 0x023e, 0x0245, 0x0007, 0x0032, 0x024c, 0x024f, 0x024f, + // Entry 26200 - 2623F + 0x0252, 0x008b, 0x0255, 0x0258, 0x0007, 0x0032, 0x025b, 0x0260, + 0x0265, 0x026a, 0x026f, 0x0274, 0x0279, 0x0007, 0x0032, 0x027e, + 0x028b, 0x02a0, 0x02b3, 0x02c8, 0x02db, 0x02e8, 0x0002, 0x0100, + 0x0119, 0x0003, 0x0104, 0x010b, 0x0112, 0x0005, 0x0032, 0xffff, + 0x02f3, 0x0304, 0x0315, 0x0326, 0x0005, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x0005, 0x0032, 0xffff, 0x0337, 0x034f, + 0x0367, 0x037f, 0x0003, 0x011d, 0x0124, 0x012b, 0x0005, 0x0032, + 0xffff, 0x02f3, 0x0304, 0x0315, 0x0326, 0x0005, 0x0000, 0xffff, + // Entry 26240 - 2627F + 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0032, 0xffff, 0x0337, + 0x034f, 0x0367, 0x037f, 0x0002, 0x0135, 0x019c, 0x0003, 0x0139, + 0x015a, 0x017b, 0x0008, 0x0145, 0x014b, 0x0142, 0x014e, 0x0151, + 0x0154, 0x0157, 0x0148, 0x0001, 0x0032, 0x0397, 0x0001, 0x0032, + 0x03a8, 0x0001, 0x0032, 0x03ad, 0x0001, 0x0032, 0x03b8, 0x0001, + 0x0032, 0x03bd, 0x0001, 0x0032, 0x03d0, 0x0001, 0x0032, 0x03dd, + 0x0001, 0x0032, 0x03ee, 0x0008, 0x0166, 0x016c, 0x0163, 0x016f, + 0x0172, 0x0175, 0x0178, 0x0169, 0x0001, 0x0032, 0x03fb, 0x0001, + // Entry 26280 - 262BF + 0x0032, 0x0403, 0x0001, 0x0032, 0x0406, 0x0001, 0x0032, 0x040e, + 0x0001, 0x0032, 0x0411, 0x0001, 0x0032, 0x0418, 0x0001, 0x0032, + 0x0222, 0x0001, 0x0032, 0x041f, 0x0008, 0x0187, 0x018d, 0x0184, + 0x0190, 0x0193, 0x0196, 0x0199, 0x018a, 0x0001, 0x0032, 0x0426, + 0x0001, 0x0032, 0x03a8, 0x0001, 0x0032, 0x043b, 0x0001, 0x0032, + 0x03b8, 0x0001, 0x0032, 0x03bd, 0x0001, 0x0032, 0x03d0, 0x0001, + 0x0032, 0x03dd, 0x0001, 0x0032, 0x03ee, 0x0003, 0x01a0, 0x01c1, + 0x01e2, 0x0008, 0x01ac, 0x01b2, 0x01a9, 0x01b5, 0x01b8, 0x01bb, + // Entry 262C0 - 262FF + 0x01be, 0x01af, 0x0001, 0x0032, 0x0397, 0x0001, 0x0032, 0x03a8, + 0x0001, 0x0032, 0x03ad, 0x0001, 0x0032, 0x03b8, 0x0001, 0x0032, + 0x044a, 0x0001, 0x0032, 0x0457, 0x0001, 0x0032, 0x0462, 0x0001, + 0x0032, 0x046d, 0x0008, 0x01cd, 0x01d3, 0x01ca, 0x01d6, 0x01d9, + 0x01dc, 0x01df, 0x01d0, 0x0001, 0x0032, 0x0397, 0x0001, 0x0032, + 0x03a8, 0x0001, 0x0032, 0x03ad, 0x0001, 0x0032, 0x03b8, 0x0001, + 0x0032, 0x044a, 0x0001, 0x0032, 0x0457, 0x0001, 0x0032, 0x0462, + 0x0001, 0x0032, 0x046d, 0x0008, 0x01ee, 0x01f4, 0x01eb, 0x01f7, + // Entry 26300 - 2633F + 0x01fa, 0x01fd, 0x0200, 0x01f1, 0x0001, 0x0032, 0x0397, 0x0001, + 0x0032, 0x03a8, 0x0001, 0x0032, 0x03ad, 0x0001, 0x0032, 0x03b8, + 0x0001, 0x0032, 0x044a, 0x0001, 0x0032, 0x0457, 0x0001, 0x0032, + 0x0462, 0x0001, 0x0032, 0x046d, 0x0003, 0x0212, 0x0000, 0x0207, + 0x0002, 0x020a, 0x020e, 0x0002, 0x0032, 0x0478, 0x04c1, 0x0002, + 0x0032, 0x0494, 0x04dd, 0x0002, 0x0215, 0x0219, 0x0002, 0x0032, + 0x04fb, 0x0515, 0x0002, 0x0032, 0x0505, 0x051c, 0x0004, 0x022b, + 0x0225, 0x0222, 0x0228, 0x0001, 0x0032, 0x0527, 0x0001, 0x0032, + // Entry 26340 - 2637F + 0x053a, 0x0001, 0x0032, 0x0549, 0x0001, 0x0007, 0x02e9, 0x0004, + 0x023c, 0x0236, 0x0233, 0x0239, 0x0001, 0x0000, 0x0524, 0x0001, + 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, + 0x0004, 0x024d, 0x0247, 0x0244, 0x024a, 0x0001, 0x0006, 0x022e, + 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, + 0x022e, 0x0042, 0x0293, 0x0298, 0x029d, 0x02a2, 0x02b9, 0x02cb, + 0x02dd, 0x02f4, 0x0306, 0x0318, 0x032f, 0x0346, 0x035d, 0x0378, + 0x038e, 0x03a4, 0x03a9, 0x03ae, 0x03b3, 0x03cc, 0x03e5, 0x03fe, + // Entry 26380 - 263BF + 0x0403, 0x0408, 0x040d, 0x0412, 0x0417, 0x041c, 0x0421, 0x0426, + 0x042b, 0x043f, 0x0453, 0x0467, 0x047b, 0x048f, 0x04a3, 0x04b7, + 0x04cb, 0x04df, 0x04f3, 0x0507, 0x051b, 0x052f, 0x0543, 0x0557, + 0x056b, 0x057f, 0x0593, 0x05a7, 0x05bb, 0x05cf, 0x05d4, 0x05d9, + 0x05de, 0x05f4, 0x0606, 0x0618, 0x062e, 0x0640, 0x0652, 0x0668, + 0x067a, 0x068c, 0x0691, 0x0696, 0x0001, 0x0295, 0x0001, 0x0032, + 0x0557, 0x0001, 0x029a, 0x0001, 0x0032, 0x0570, 0x0001, 0x029f, + 0x0001, 0x0032, 0x0570, 0x0003, 0x02a6, 0x02a9, 0x02ae, 0x0001, + // Entry 263C0 - 263FF + 0x0032, 0x0576, 0x0003, 0x0032, 0x057f, 0x0595, 0x05a5, 0x0002, + 0x02b1, 0x02b5, 0x0002, 0x0032, 0x05bb, 0x05bb, 0x0002, 0x0032, + 0x05cc, 0x05cc, 0x0003, 0x02bd, 0x0000, 0x02c0, 0x0001, 0x0032, + 0x05e2, 0x0002, 0x02c3, 0x02c7, 0x0002, 0x0032, 0x05bb, 0x05bb, + 0x0002, 0x0032, 0x05e5, 0x05e5, 0x0003, 0x02cf, 0x0000, 0x02d2, + 0x0001, 0x0032, 0x05e2, 0x0002, 0x02d5, 0x02d9, 0x0002, 0x0032, + 0x05bb, 0x05bb, 0x0002, 0x0032, 0x05e5, 0x05e5, 0x0003, 0x02e1, + 0x02e4, 0x02e9, 0x0001, 0x0032, 0x05f5, 0x0003, 0x0032, 0x0606, + // Entry 26400 - 2643F + 0x0624, 0x063c, 0x0002, 0x02ec, 0x02f0, 0x0002, 0x0032, 0x065a, + 0x065a, 0x0002, 0x0032, 0x0673, 0x0673, 0x0003, 0x02f8, 0x0000, + 0x02fb, 0x0001, 0x0032, 0x0691, 0x0002, 0x02fe, 0x0302, 0x0002, + 0x0032, 0x069a, 0x069a, 0x0002, 0x0032, 0x06ac, 0x06ac, 0x0003, + 0x030a, 0x0000, 0x030d, 0x0001, 0x0032, 0x0691, 0x0002, 0x0310, + 0x0314, 0x0002, 0x0032, 0x069a, 0x069a, 0x0002, 0x0032, 0x06ac, + 0x06ac, 0x0003, 0x031c, 0x031f, 0x0324, 0x0001, 0x0032, 0x06c2, + 0x0003, 0x0032, 0x06cb, 0x06e1, 0x06f1, 0x0002, 0x0327, 0x032b, + // Entry 26440 - 2647F + 0x0002, 0x0032, 0x0707, 0x0707, 0x0002, 0x0032, 0x0716, 0x0716, + 0x0003, 0x0333, 0x0336, 0x033b, 0x0001, 0x0032, 0x072c, 0x0003, + 0x0032, 0x0733, 0x06e1, 0x06f1, 0x0002, 0x033e, 0x0342, 0x0002, + 0x0032, 0x0707, 0x0707, 0x0002, 0x0032, 0x0716, 0x0716, 0x0003, + 0x034a, 0x034d, 0x0352, 0x0001, 0x0032, 0x072c, 0x0003, 0x0032, + 0x0733, 0x06e1, 0x06f1, 0x0002, 0x0355, 0x0359, 0x0002, 0x0032, + 0x0707, 0x0707, 0x0002, 0x0032, 0x0716, 0x0716, 0x0004, 0x0362, + 0x0365, 0x036a, 0x0375, 0x0001, 0x0032, 0x02e8, 0x0003, 0x0032, + // Entry 26480 - 264BF + 0x0749, 0x0761, 0x0773, 0x0002, 0x036d, 0x0371, 0x0002, 0x0032, + 0x078b, 0x078b, 0x0002, 0x0032, 0x079e, 0x079e, 0x0001, 0x0032, + 0x07b6, 0x0004, 0x037d, 0x0000, 0x0380, 0x038b, 0x0001, 0x0032, + 0x07cb, 0x0002, 0x0383, 0x0387, 0x0002, 0x0032, 0x07d2, 0x07d2, + 0x0002, 0x0032, 0x07e2, 0x07e2, 0x0001, 0x0032, 0x07f6, 0x0004, + 0x0393, 0x0000, 0x0396, 0x03a1, 0x0001, 0x0032, 0x07cb, 0x0002, + 0x0399, 0x039d, 0x0002, 0x0032, 0x0808, 0x0808, 0x0002, 0x0032, + 0x07e2, 0x07e2, 0x0001, 0x0032, 0x07f6, 0x0001, 0x03a6, 0x0001, + // Entry 264C0 - 264FF + 0x0032, 0x081a, 0x0001, 0x03ab, 0x0001, 0x0032, 0x0830, 0x0001, + 0x03b0, 0x0001, 0x0032, 0x0842, 0x0003, 0x03b7, 0x03ba, 0x03c1, + 0x0001, 0x0032, 0x0850, 0x0005, 0x0032, 0x0875, 0x087e, 0x0889, + 0x0855, 0x0892, 0x0002, 0x03c4, 0x03c8, 0x0002, 0x0032, 0x08b2, + 0x08b2, 0x0002, 0x0032, 0x08bf, 0x08bf, 0x0003, 0x03d0, 0x03d3, + 0x03da, 0x0001, 0x0032, 0x0850, 0x0005, 0x0032, 0x0875, 0x087e, + 0x0889, 0x0855, 0x0892, 0x0002, 0x03dd, 0x03e1, 0x0002, 0x0032, + 0x08b2, 0x08b2, 0x0002, 0x0032, 0x08bf, 0x08bf, 0x0003, 0x03e9, + // Entry 26500 - 2653F + 0x03ec, 0x03f3, 0x0001, 0x0032, 0x0850, 0x0005, 0x0032, 0x0875, + 0x087e, 0x0889, 0x0855, 0x0892, 0x0002, 0x03f6, 0x03fa, 0x0002, + 0x0032, 0x08b2, 0x08b2, 0x0002, 0x0032, 0x08bf, 0x08bf, 0x0001, + 0x0400, 0x0001, 0x0032, 0x08d1, 0x0001, 0x0405, 0x0001, 0x0032, + 0x08d1, 0x0001, 0x040a, 0x0001, 0x0032, 0x08d1, 0x0001, 0x040f, + 0x0001, 0x0032, 0x08e1, 0x0001, 0x0414, 0x0001, 0x0032, 0x08e1, + 0x0001, 0x0419, 0x0001, 0x0032, 0x08e1, 0x0001, 0x041e, 0x0001, + 0x0032, 0x08f5, 0x0001, 0x0423, 0x0001, 0x0032, 0x08f5, 0x0001, + // Entry 26540 - 2657F + 0x0428, 0x0001, 0x0032, 0x0905, 0x0003, 0x0000, 0x042f, 0x0434, + 0x0003, 0x0032, 0x0911, 0x092b, 0x093f, 0x0002, 0x0437, 0x043b, + 0x0002, 0x0032, 0x0959, 0x0959, 0x0002, 0x0032, 0x0973, 0x0973, + 0x0003, 0x0000, 0x0443, 0x0448, 0x0003, 0x0032, 0x098d, 0x099d, + 0x09ab, 0x0002, 0x044b, 0x044f, 0x0002, 0x0032, 0x09bb, 0x09bb, + 0x0002, 0x0032, 0x09cf, 0x09cf, 0x0003, 0x0000, 0x0457, 0x045c, + 0x0003, 0x0032, 0x098d, 0x099d, 0x09ab, 0x0002, 0x045f, 0x0463, + 0x0002, 0x0032, 0x09bb, 0x09bb, 0x0002, 0x0032, 0x09cf, 0x09cf, + // Entry 26580 - 265BF + 0x0003, 0x0000, 0x046b, 0x0470, 0x0003, 0x0032, 0x09e3, 0x0a05, + 0x0a21, 0x0002, 0x0473, 0x0477, 0x0002, 0x0032, 0x0a43, 0x0a43, + 0x0002, 0x0032, 0x0a65, 0x0a65, 0x0003, 0x0000, 0x047f, 0x0484, + 0x0003, 0x0032, 0x0a87, 0x0a97, 0x0aa5, 0x0002, 0x0487, 0x048b, + 0x0002, 0x0032, 0x0ab5, 0x0ab5, 0x0002, 0x0032, 0x0ac9, 0x0ac9, + 0x0003, 0x0000, 0x0493, 0x0498, 0x0003, 0x0032, 0x0a87, 0x0a97, + 0x0aa5, 0x0002, 0x049b, 0x049f, 0x0002, 0x0032, 0x0ab5, 0x0ab5, + 0x0002, 0x0032, 0x0ac9, 0x0ac9, 0x0003, 0x0000, 0x04a7, 0x04ac, + // Entry 265C0 - 265FF + 0x0003, 0x0032, 0x0add, 0x0afd, 0x0b17, 0x0002, 0x04af, 0x04b3, + 0x0002, 0x0032, 0x0b37, 0x0b37, 0x0002, 0x0032, 0x0b57, 0x0b57, + 0x0003, 0x0000, 0x04bb, 0x04c0, 0x0003, 0x0032, 0x0b77, 0x0b87, + 0x0b95, 0x0002, 0x04c3, 0x04c7, 0x0002, 0x0032, 0x0ba5, 0x0ba5, + 0x0002, 0x0032, 0x0bb9, 0x0bb9, 0x0003, 0x0000, 0x04cf, 0x04d4, + 0x0003, 0x0032, 0x0b77, 0x0b87, 0x0b95, 0x0002, 0x04d7, 0x04db, + 0x0002, 0x0032, 0x0ba5, 0x0ba5, 0x0002, 0x0032, 0x0bb9, 0x0bb9, + 0x0003, 0x0000, 0x04e3, 0x04e8, 0x0003, 0x0032, 0x0bcd, 0x0bef, + // Entry 26600 - 2663F + 0x0c0b, 0x0002, 0x04eb, 0x04ef, 0x0002, 0x0032, 0x0c2d, 0x0c2d, + 0x0002, 0x0032, 0x0c4f, 0x0c4f, 0x0003, 0x0000, 0x04f7, 0x04fc, + 0x0003, 0x0032, 0x0c71, 0x0c81, 0x0c8f, 0x0002, 0x04ff, 0x0503, + 0x0002, 0x0032, 0x0c9f, 0x0c9f, 0x0002, 0x0032, 0x0cb3, 0x0cb3, + 0x0003, 0x0000, 0x050b, 0x0510, 0x0003, 0x0032, 0x0c71, 0x0c81, + 0x0c8f, 0x0002, 0x0513, 0x0517, 0x0002, 0x0032, 0x0c9f, 0x0c9f, + 0x0002, 0x0032, 0x0cb3, 0x0cb3, 0x0003, 0x0000, 0x051f, 0x0524, + 0x0003, 0x0032, 0x0cc7, 0x0ce7, 0x0d01, 0x0002, 0x0527, 0x052b, + // Entry 26640 - 2667F + 0x0002, 0x0032, 0x0d21, 0x0d21, 0x0002, 0x0032, 0x0d41, 0x0d41, + 0x0003, 0x0000, 0x0533, 0x0538, 0x0003, 0x0032, 0x0d61, 0x0d71, + 0x0d7f, 0x0002, 0x053b, 0x053f, 0x0002, 0x0032, 0x0d8f, 0x0d8f, + 0x0002, 0x0032, 0x0da3, 0x0da3, 0x0003, 0x0000, 0x0547, 0x054c, + 0x0003, 0x0032, 0x0d61, 0x0d71, 0x0d7f, 0x0002, 0x054f, 0x0553, + 0x0002, 0x0032, 0x0d8f, 0x0d8f, 0x0002, 0x0032, 0x0da3, 0x0da3, + 0x0003, 0x0000, 0x055b, 0x0560, 0x0003, 0x0032, 0x0db7, 0x0dd1, + 0x0de5, 0x0002, 0x0563, 0x0567, 0x0002, 0x0032, 0x0dff, 0x0dff, + // Entry 26680 - 266BF + 0x0002, 0x0032, 0x0e19, 0x0e19, 0x0003, 0x0000, 0x056f, 0x0574, + 0x0003, 0x0032, 0x0e33, 0x0e45, 0x0e55, 0x0002, 0x0577, 0x057b, + 0x0002, 0x0032, 0x0e67, 0x0e67, 0x0002, 0x0032, 0x0e7d, 0x0e7d, + 0x0003, 0x0000, 0x0583, 0x0588, 0x0003, 0x0032, 0x0e33, 0x0e45, + 0x0e55, 0x0002, 0x058b, 0x058f, 0x0002, 0x0032, 0x0e67, 0x0e67, + 0x0002, 0x0032, 0x0e7d, 0x0e7d, 0x0003, 0x0000, 0x0597, 0x059c, + 0x0003, 0x0032, 0x0e93, 0x0eb2, 0x0ecb, 0x0002, 0x059f, 0x05a3, + 0x0002, 0x0032, 0x0eea, 0x0eea, 0x0002, 0x0032, 0x0f07, 0x0f07, + // Entry 266C0 - 266FF + 0x0003, 0x0000, 0x05ab, 0x05b0, 0x0003, 0x0032, 0x0f24, 0x0f34, + 0x0f42, 0x0002, 0x05b3, 0x05b7, 0x0002, 0x0032, 0x0f52, 0x0f52, + 0x0002, 0x0032, 0x0f66, 0x0f66, 0x0003, 0x0000, 0x05bf, 0x05c4, + 0x0003, 0x0032, 0x0f24, 0x0f34, 0x0f42, 0x0002, 0x05c7, 0x05cb, + 0x0002, 0x0032, 0x0f52, 0x0f52, 0x0002, 0x0032, 0x0f66, 0x0f66, + 0x0001, 0x05d1, 0x0001, 0x0032, 0x0f7a, 0x0001, 0x05d6, 0x0001, + 0x0032, 0x0f7a, 0x0001, 0x05db, 0x0001, 0x0032, 0x0f7a, 0x0003, + 0x05e2, 0x05e5, 0x05e9, 0x0001, 0x0032, 0x0f84, 0x0002, 0x0032, + // Entry 26700 - 2673F + 0xffff, 0x0f8b, 0x0002, 0x05ec, 0x05f0, 0x0002, 0x0032, 0x0f9d, + 0x0f9d, 0x0002, 0x0032, 0x0fac, 0x0fac, 0x0003, 0x05f8, 0x0000, + 0x05fb, 0x0001, 0x0032, 0x0fc0, 0x0002, 0x05fe, 0x0602, 0x0002, + 0x0032, 0x0fc3, 0x0fc3, 0x0002, 0x0032, 0x0fcf, 0x0fcf, 0x0003, + 0x060a, 0x0000, 0x060d, 0x0001, 0x0032, 0x0fc0, 0x0002, 0x0610, + 0x0614, 0x0002, 0x0032, 0x0fc3, 0x0fc3, 0x0002, 0x0032, 0x0fcf, + 0x0fcf, 0x0003, 0x061c, 0x061f, 0x0623, 0x0001, 0x0032, 0x0fdf, + 0x0002, 0x0032, 0xffff, 0x0fe8, 0x0002, 0x0626, 0x062a, 0x0002, + // Entry 26740 - 2677F + 0x0032, 0x0ffc, 0x0ffc, 0x0002, 0x0032, 0x100d, 0x100d, 0x0003, + 0x0632, 0x0000, 0x0635, 0x0001, 0x0032, 0x1023, 0x0002, 0x0638, + 0x063c, 0x0002, 0x0032, 0x1026, 0x1026, 0x0002, 0x0032, 0x1032, + 0x1032, 0x0003, 0x0644, 0x0000, 0x0647, 0x0001, 0x0032, 0x1023, + 0x0002, 0x064a, 0x064e, 0x0002, 0x0032, 0x1026, 0x1026, 0x0002, + 0x0032, 0x1032, 0x1032, 0x0003, 0x0656, 0x0659, 0x065d, 0x0001, + 0x0032, 0x1042, 0x0002, 0x0032, 0xffff, 0x1053, 0x0002, 0x0660, + 0x0664, 0x0002, 0x0032, 0x105c, 0x105c, 0x0002, 0x0032, 0x1075, + // Entry 26780 - 267BF + 0x1075, 0x0003, 0x066c, 0x0000, 0x066f, 0x0001, 0x0032, 0x1093, + 0x0002, 0x0672, 0x0676, 0x0002, 0x0032, 0x1096, 0x1096, 0x0002, + 0x0032, 0x10a6, 0x10a6, 0x0003, 0x067e, 0x0000, 0x0681, 0x0001, + 0x0032, 0x1093, 0x0002, 0x0684, 0x0688, 0x0002, 0x0032, 0x10ba, + 0x10ba, 0x0002, 0x0032, 0x10c6, 0x10c6, 0x0001, 0x068e, 0x0001, + 0x0032, 0x10d6, 0x0001, 0x0693, 0x0001, 0x0032, 0x10d6, 0x0001, + 0x0698, 0x0001, 0x0032, 0x10d6, 0x0004, 0x06a0, 0x06a5, 0x06aa, + 0x06b9, 0x0003, 0x0000, 0x1dc7, 0x2762, 0x2780, 0x0003, 0x0000, + // Entry 267C0 - 267FF + 0x1de0, 0x25fa, 0x2603, 0x0002, 0x0000, 0x06ad, 0x0003, 0x0000, + 0x06b4, 0x06b1, 0x0001, 0x0032, 0x10ee, 0x0003, 0x0032, 0xffff, + 0x1131, 0x1166, 0x0002, 0x0000, 0x06bc, 0x0003, 0x0756, 0x07ec, + 0x06c0, 0x0094, 0x0032, 0x119b, 0x11bf, 0x11f6, 0x1227, 0x128b, + 0x1331, 0x13b9, 0x1458, 0x151f, 0x15d0, 0x1674, 0xffff, 0x1712, + 0x179d, 0x1847, 0x18ec, 0x199e, 0x1a26, 0x1ac9, 0x1bb3, 0x1ca8, + 0x1d6f, 0x1e21, 0x1eb6, 0x1f5a, 0x1fc4, 0x1fe2, 0x2028, 0x2092, + 0x20d7, 0x2143, 0x2188, 0x220e, 0x2286, 0x2310, 0x237a, 0x23ae, + // Entry 26800 - 2683F + 0x2405, 0x249e, 0x253c, 0x259a, 0x25b8, 0x25ec, 0x263e, 0x26aa, + 0x2701, 0x27c2, 0x2846, 0x2893, 0x294e, 0x29f8, 0x2a4e, 0x2a83, + 0x2ad6, 0x2b0f, 0x2b5c, 0x2bbe, 0x2bef, 0x2c48, 0x2d15, 0x2da9, + 0x2ddf, 0x2e30, 0x2ed4, 0x2f50, 0x2fa6, 0x2fdb, 0x300e, 0x3036, + 0x3073, 0x30aa, 0x30fb, 0x3173, 0x31f9, 0x327d, 0xffff, 0x32e3, + 0x3318, 0x336b, 0x33c9, 0x3411, 0x3483, 0x34a5, 0x34f1, 0x3559, + 0x35a6, 0x3608, 0x362c, 0x3650, 0x3683, 0x36da, 0x3744, 0x37a5, + 0x388c, 0x395b, 0x39eb, 0x3a4d, 0x3a6d, 0x3a8d, 0x3ad6, 0x3b7d, + // Entry 26840 - 2687F + 0x3c23, 0x3ca1, 0x3cbf, 0x3d22, 0x3de0, 0x3e6c, 0x3ee4, 0x3f4a, + 0x3f6a, 0x3fc0, 0x4042, 0x40c2, 0x4130, 0x4190, 0x4218, 0x4238, + 0x425f, 0x427f, 0x42a3, 0x42e3, 0xffff, 0x4363, 0x43c1, 0x43f4, + 0x4418, 0x4449, 0x447c, 0x449e, 0x44bc, 0x44f6, 0x4554, 0x4578, + 0x45ba, 0x4618, 0x465e, 0x46d4, 0x471c, 0x47ac, 0x4840, 0x48ae, + 0x48fe, 0x4994, 0x49fe, 0x4a1c, 0x4a41, 0x4a97, 0x4b29, 0x0094, + 0x0032, 0xffff, 0xffff, 0xffff, 0xffff, 0x125a, 0x130f, 0x1397, + 0x141f, 0x14ec, 0x15a7, 0x1644, 0xffff, 0x16f6, 0x176c, 0x1821, + // Entry 26880 - 268BF + 0x18b5, 0x197c, 0x1a04, 0x1a8c, 0x1b65, 0x1c71, 0x1d38, 0x1dff, + 0x1e87, 0x1f36, 0xffff, 0xffff, 0x2004, 0xffff, 0x20b2, 0xffff, + 0x2163, 0x21f4, 0x2264, 0x22ec, 0xffff, 0xffff, 0x23df, 0x2473, + 0x251e, 0xffff, 0xffff, 0xffff, 0x2619, 0xffff, 0x26ca, 0x2791, + 0xffff, 0x2862, 0x2917, 0x29de, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2b3c, 0xffff, 0xffff, 0x2c0f, 0x2cdc, 0xffff, 0xffff, 0x2dff, + 0x2eb4, 0x2f36, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x30e1, 0x3151, 0x31d9, 0x325b, 0xffff, 0xffff, 0xffff, 0x334d, + // Entry 268C0 - 268FF + 0xffff, 0x33e9, 0xffff, 0xffff, 0x34ce, 0xffff, 0x3586, 0xffff, + 0xffff, 0xffff, 0xffff, 0x36b6, 0xffff, 0x3764, 0x3849, 0x3934, + 0x39cb, 0xffff, 0xffff, 0xffff, 0x3aa9, 0x3b52, 0x3bf5, 0xffff, + 0xffff, 0x3ce8, 0x3db8, 0x3e52, 0x3ec2, 0xffff, 0xffff, 0x3f9e, + 0x4026, 0x409c, 0xffff, 0x415d, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x42c3, 0xffff, 0x4345, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x44d8, 0xffff, 0xffff, 0x459c, 0xffff, + 0x4634, 0xffff, 0x46f8, 0x4786, 0x481a, 0xffff, 0x48d6, 0x4970, + // Entry 26900 - 2693F + 0xffff, 0xffff, 0xffff, 0x4a75, 0x4afd, 0x0094, 0x0032, 0xffff, + 0xffff, 0xffff, 0xffff, 0x12cd, 0x1364, 0x13ec, 0x14a2, 0x1563, + 0x160a, 0x16b5, 0xffff, 0x173f, 0x17df, 0x187e, 0x1934, 0x19d1, + 0x1a59, 0x1b17, 0x1c12, 0x1cf0, 0x1db7, 0x1e54, 0x1ef6, 0x1f8f, + 0xffff, 0xffff, 0x205d, 0xffff, 0x210d, 0xffff, 0x21be, 0x2239, + 0x22b9, 0x2345, 0xffff, 0xffff, 0x243c, 0x24da, 0x256b, 0xffff, + 0xffff, 0xffff, 0x2674, 0xffff, 0x2749, 0x2804, 0xffff, 0x28d5, + 0x2996, 0x2a23, 0xffff, 0xffff, 0xffff, 0xffff, 0x2b8d, 0xffff, + // Entry 26940 - 2697F + 0xffff, 0x2c92, 0x2d5f, 0xffff, 0xffff, 0x2e72, 0x2f05, 0x2f7b, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3126, 0x31a6, + 0x322a, 0x32b0, 0xffff, 0xffff, 0xffff, 0x339a, 0xffff, 0x344a, + 0xffff, 0xffff, 0x3525, 0xffff, 0x35d7, 0xffff, 0xffff, 0xffff, + 0xffff, 0x370f, 0xffff, 0x37f7, 0x38e0, 0x3993, 0x3a1c, 0xffff, + 0xffff, 0xffff, 0x3b14, 0x3bb9, 0x3c62, 0xffff, 0xffff, 0x3d6d, + 0x3e19, 0x3e97, 0x3f17, 0xffff, 0xffff, 0x3ff3, 0x406f, 0x40f9, + 0xffff, 0x41d4, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x4314, + // Entry 26980 - 269BF + 0xffff, 0x4392, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x4525, 0xffff, 0xffff, 0x45e9, 0xffff, 0x4699, 0xffff, + 0x4751, 0x47e3, 0x4877, 0xffff, 0x4937, 0x49c9, 0xffff, 0xffff, + 0xffff, 0x4aca, 0x4b66, 0x0003, 0x0004, 0x0885, 0x0c5e, 0x0012, + 0x0017, 0x0055, 0x0161, 0x01e8, 0x022c, 0x02b3, 0x02cc, 0x02f7, + 0x0515, 0x0599, 0x0617, 0x0000, 0x0000, 0x0000, 0x0000, 0x06ba, + 0x07d7, 0x0855, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, + 0x0033, 0x0000, 0x0044, 0x0003, 0x0029, 0x002e, 0x0024, 0x0001, + // Entry 269C0 - 269FF + 0x0026, 0x0001, 0x0000, 0x0000, 0x0001, 0x002b, 0x0001, 0x0000, + 0x0000, 0x0001, 0x0030, 0x0001, 0x0000, 0x0000, 0x0004, 0x0041, + 0x003b, 0x0038, 0x003e, 0x0001, 0x0010, 0x0003, 0x0001, 0x0002, + 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0000, 0x240c, 0x0004, + 0x0052, 0x004c, 0x0049, 0x004f, 0x0001, 0x0033, 0x0000, 0x0001, + 0x0033, 0x0000, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, + 0x000a, 0x0060, 0x0000, 0x0000, 0x0000, 0x0000, 0x0150, 0x0000, + 0x0000, 0x0000, 0x00c5, 0x0002, 0x0063, 0x0094, 0x0003, 0x0067, + // Entry 26A00 - 26A3F + 0x0076, 0x0085, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, + 0x2426, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x0003, + 0x0098, 0x00a7, 0x00b6, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, + // Entry 26A40 - 26A7F + 0x2218, 0x2426, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, + 0x2426, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, + 0x0006, 0x00cc, 0x0000, 0x0000, 0x00df, 0x00fa, 0x013d, 0x0001, + 0x00ce, 0x0001, 0x00d0, 0x000d, 0x0000, 0xffff, 0x005a, 0x005d, + 0x0062, 0x0066, 0x006a, 0x006f, 0x2784, 0x0075, 0x0079, 0x007e, + 0x221e, 0x0085, 0x0001, 0x00e1, 0x0001, 0x00e3, 0x0015, 0x0033, + // Entry 26A80 - 26ABF + 0xffff, 0x0010, 0x0021, 0x002b, 0x003b, 0xffff, 0x004f, 0x005d, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x006f, 0x0081, 0x008d, + 0x0097, 0x00ac, 0x00b9, 0x00ca, 0x00dd, 0x0001, 0x00fc, 0x0001, + 0x00fe, 0x003d, 0x0000, 0xffff, 0x01bd, 0x01c4, 0x01cc, 0x01d5, + 0x01de, 0x01e6, 0x01ec, 0x01f4, 0x01fc, 0x0205, 0x020d, 0x0214, + 0x021b, 0x0223, 0x022d, 0x0234, 0x023b, 0x0245, 0x024c, 0x0253, + 0x025b, 0x0264, 0x026b, 0x0273, 0x027c, 0x0282, 0x028a, 0x0293, + 0x029b, 0x02a4, 0x02ab, 0x02b2, 0x02b9, 0x02c3, 0x02cc, 0x02d2, + // Entry 26AC0 - 26AFF + 0x02d9, 0x02e1, 0x02ea, 0x02f2, 0x02fa, 0x0303, 0x0309, 0x0311, + 0x031a, 0x0322, 0x0329, 0x0331, 0x0339, 0x0340, 0x0349, 0x0351, + 0x0358, 0x0362, 0x036a, 0x0370, 0x0377, 0x0381, 0x0389, 0x0390, + 0x0001, 0x013f, 0x0001, 0x0141, 0x000d, 0x0000, 0xffff, 0x005a, + 0x005d, 0x0062, 0x0066, 0x006a, 0x006f, 0x2784, 0x0075, 0x0079, + 0x007e, 0x221e, 0x0085, 0x0004, 0x015e, 0x0158, 0x0155, 0x015b, + 0x0001, 0x0033, 0x00ef, 0x0001, 0x0033, 0x00ff, 0x0001, 0x0033, + 0x0108, 0x0001, 0x0033, 0x0110, 0x0005, 0x0167, 0x0000, 0x0000, + // Entry 26B00 - 26B3F + 0x0000, 0x01d2, 0x0002, 0x016a, 0x019e, 0x0003, 0x016e, 0x017e, + 0x018e, 0x000e, 0x0000, 0xffff, 0x03ce, 0x03d3, 0x03d8, 0x03de, + 0x2221, 0x2787, 0x278e, 0x03f9, 0x2797, 0x040b, 0x0411, 0x0416, + 0x242d, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, + 0x0422, 0x000e, 0x0000, 0xffff, 0x03ce, 0x03d3, 0x03d8, 0x03de, + 0x2221, 0x2787, 0x278e, 0x03f9, 0x2797, 0x040b, 0x0411, 0x0416, + 0x242d, 0x0003, 0x01a2, 0x01b2, 0x01c2, 0x000e, 0x0000, 0xffff, + // Entry 26B40 - 26B7F + 0x03ce, 0x03d3, 0x03d8, 0x03de, 0x2221, 0x2787, 0x278e, 0x03f9, + 0x2797, 0x040b, 0x0411, 0x0416, 0x242d, 0x000e, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x2215, 0x2218, 0x2426, 0x0422, 0x000e, 0x0000, 0xffff, + 0x03ce, 0x03d3, 0x03d8, 0x03de, 0x2221, 0x2787, 0x278e, 0x03f9, + 0x2797, 0x040b, 0x0411, 0x0416, 0x242d, 0x0003, 0x01dc, 0x01e2, + 0x01d6, 0x0001, 0x01d8, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, + 0x01de, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x01e4, 0x0002, + // Entry 26B80 - 26BBF + 0x0000, 0x0425, 0x042a, 0x000a, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01f3, 0x0004, 0x0000, + 0x0000, 0x0000, 0x01f8, 0x0001, 0x01fa, 0x0003, 0x01fe, 0x0000, + 0x0215, 0x0015, 0x0033, 0xffff, 0x0010, 0x0021, 0x002b, 0x003b, + 0xffff, 0x004f, 0x005d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x006f, 0x0081, 0x0116, 0x0097, 0x00ac, 0x00b9, 0xffff, 0x00dd, + 0x0015, 0x0033, 0xffff, 0x0010, 0x0021, 0x002b, 0x003b, 0xffff, + 0x004f, 0x005d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x006f, + // Entry 26BC0 - 26BFF + 0x0081, 0x0116, 0x0097, 0x00ac, 0x00b9, 0xffff, 0x00dd, 0x0005, + 0x0232, 0x0000, 0x0000, 0x0000, 0x029d, 0x0002, 0x0235, 0x0269, + 0x0003, 0x0239, 0x0249, 0x0259, 0x000e, 0x0000, 0xffff, 0x042f, + 0x0438, 0x2708, 0x270e, 0x044c, 0x0450, 0x0458, 0x0460, 0x2715, + 0x046e, 0x271c, 0x0479, 0x0481, 0x000e, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x2215, 0x2218, 0x2426, 0x0422, 0x000e, 0x0000, 0xffff, 0x042f, + 0x0438, 0x2708, 0x270e, 0x044c, 0x0450, 0x0458, 0x0460, 0x2715, + // Entry 26C00 - 26C3F + 0x046e, 0x271c, 0x0479, 0x0481, 0x0003, 0x026d, 0x027d, 0x028d, + 0x000e, 0x0000, 0xffff, 0x042f, 0x0438, 0x2708, 0x270e, 0x044c, + 0x0450, 0x0458, 0x0460, 0x2715, 0x046e, 0x271c, 0x0479, 0x0481, + 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x0422, + 0x000e, 0x0000, 0xffff, 0x042f, 0x0438, 0x2708, 0x270e, 0x044c, + 0x0450, 0x0458, 0x0460, 0x2715, 0x046e, 0x271c, 0x0479, 0x0481, + 0x0003, 0x02a7, 0x02ad, 0x02a1, 0x0001, 0x02a3, 0x0002, 0x0000, + // Entry 26C40 - 26C7F + 0x0425, 0x042a, 0x0001, 0x02a9, 0x0002, 0x0000, 0x0425, 0x042a, + 0x0001, 0x02af, 0x0002, 0x0000, 0x0425, 0x042a, 0x0005, 0x0000, + 0x0000, 0x0000, 0x0000, 0x02b9, 0x0003, 0x02c2, 0x02c7, 0x02bd, + 0x0001, 0x02bf, 0x0001, 0x0000, 0x0425, 0x0001, 0x02c4, 0x0001, + 0x0000, 0x0425, 0x0001, 0x02c9, 0x0001, 0x0000, 0x0425, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02d5, 0x0000, 0x02e6, + 0x0004, 0x02e3, 0x02dd, 0x02da, 0x02e0, 0x0001, 0x0010, 0x0003, + 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x001d, + // Entry 26C80 - 26CBF + 0x17a0, 0x0004, 0x02f4, 0x02ee, 0x02eb, 0x02f1, 0x0001, 0x0033, + 0x0000, 0x0001, 0x0033, 0x0000, 0x0001, 0x0006, 0x022e, 0x0001, + 0x0006, 0x022e, 0x0008, 0x0300, 0x0365, 0x03bc, 0x03f1, 0x04c2, + 0x04e2, 0x04f3, 0x0504, 0x0002, 0x0303, 0x0334, 0x0003, 0x0307, + 0x0316, 0x0325, 0x000d, 0x0006, 0xffff, 0x001e, 0x42a1, 0x4279, + 0x42a5, 0x42a9, 0x42ad, 0x4158, 0x42b1, 0x42b5, 0x4295, 0x4228, + 0x422c, 0x000d, 0x0000, 0xffff, 0x257b, 0x2364, 0x2579, 0x241f, + 0x2579, 0x257b, 0x257b, 0x241f, 0x257d, 0x236a, 0x236c, 0x236e, + // Entry 26CC0 - 26CFF + 0x000d, 0x0006, 0xffff, 0x004e, 0x0056, 0x42b9, 0x42bf, 0x42a9, + 0x42c5, 0x42ca, 0x42cf, 0x42d7, 0x42e1, 0x42e9, 0x42f2, 0x0003, + 0x0338, 0x0347, 0x0356, 0x000d, 0x0006, 0xffff, 0x001e, 0x42a1, + 0x4279, 0x42a5, 0x42a9, 0x42ad, 0x4158, 0x42b1, 0x42b5, 0x4295, + 0x4228, 0x422c, 0x000d, 0x0000, 0xffff, 0x257b, 0x2364, 0x2579, + 0x241f, 0x2579, 0x257b, 0x257b, 0x241f, 0x257d, 0x236a, 0x236c, + 0x236e, 0x000d, 0x0006, 0xffff, 0x004e, 0x0056, 0x42b9, 0x42bf, + 0x42a9, 0x42c5, 0x42ca, 0x42cf, 0x42d7, 0x42e1, 0x42e9, 0x42f2, + // Entry 26D00 - 26D3F + 0x0002, 0x0368, 0x0392, 0x0005, 0x036e, 0x0377, 0x0389, 0x0000, + 0x0380, 0x0007, 0x0033, 0x0122, 0x0126, 0x012a, 0x012e, 0x0132, + 0x0136, 0x013a, 0x0007, 0x0000, 0x2579, 0x257d, 0x257d, 0x2246, + 0x2773, 0x257b, 0x257d, 0x0007, 0x0033, 0x0122, 0x0126, 0x012a, + 0x012e, 0x0132, 0x0136, 0x013a, 0x0007, 0x0033, 0x013e, 0x0145, + 0x014b, 0x0152, 0x0157, 0x015d, 0x0163, 0x0005, 0x0398, 0x03a1, + 0x03b3, 0x0000, 0x03aa, 0x0007, 0x0033, 0x0122, 0x0126, 0x012a, + 0x012e, 0x0132, 0x0136, 0x013a, 0x0007, 0x0000, 0x2579, 0x257d, + // Entry 26D40 - 26D7F + 0x257d, 0x2246, 0x2773, 0x257b, 0x257d, 0x0007, 0x0033, 0x0122, + 0x0126, 0x012a, 0x012e, 0x0132, 0x0136, 0x013a, 0x0007, 0x0033, + 0x013e, 0x0145, 0x014b, 0x0152, 0x0157, 0x015d, 0x0163, 0x0002, + 0x03bf, 0x03d8, 0x0003, 0x03c3, 0x03ca, 0x03d1, 0x0005, 0x0000, + 0xffff, 0x1f17, 0x1f1a, 0x1f1d, 0x1f20, 0x0005, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0033, 0xffff, 0x0169, + 0x0176, 0x0183, 0x0190, 0x0003, 0x03dc, 0x03e3, 0x03ea, 0x0005, + 0x0000, 0xffff, 0x1f17, 0x1f1a, 0x1f1d, 0x1f20, 0x0005, 0x0000, + // Entry 26D80 - 26DBF + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0033, 0xffff, + 0x0169, 0x0176, 0x0183, 0x0190, 0x0002, 0x03f4, 0x045b, 0x0003, + 0x03f8, 0x0419, 0x043a, 0x0008, 0x0404, 0x040a, 0x0401, 0x040d, + 0x0410, 0x0413, 0x0416, 0x0407, 0x0001, 0x0033, 0x019d, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x0033, 0x01aa, 0x0001, 0x0000, 0x04f2, + 0x0001, 0x0033, 0x01b6, 0x0001, 0x0033, 0x01bb, 0x0001, 0x0033, + 0x01c1, 0x0001, 0x0033, 0x01c6, 0x0008, 0x0425, 0x042b, 0x0422, + 0x042e, 0x0431, 0x0434, 0x0437, 0x0428, 0x0001, 0x0033, 0x019d, + // Entry 26DC0 - 26DFF + 0x0001, 0x0000, 0x04ef, 0x0001, 0x0033, 0x01aa, 0x0001, 0x0000, + 0x04f2, 0x0001, 0x0033, 0x01b6, 0x0001, 0x0033, 0x01bb, 0x0001, + 0x0033, 0x01c1, 0x0001, 0x0033, 0x01c6, 0x0008, 0x0446, 0x044c, + 0x0443, 0x044f, 0x0452, 0x0455, 0x0458, 0x0449, 0x0001, 0x0033, + 0x019d, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0033, 0x01aa, 0x0001, + 0x0000, 0x04f2, 0x0001, 0x0033, 0x01b6, 0x0001, 0x0033, 0x01bb, + 0x0001, 0x0033, 0x01c1, 0x0001, 0x0033, 0x01c6, 0x0003, 0x045f, + 0x0480, 0x04a1, 0x0008, 0x046b, 0x0471, 0x0468, 0x0474, 0x0477, + // Entry 26E00 - 26E3F + 0x047a, 0x047d, 0x046e, 0x0001, 0x0033, 0x019d, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x0033, 0x01aa, 0x0001, 0x0000, 0x04f2, 0x0001, + 0x0033, 0x01b6, 0x0001, 0x0033, 0x01bb, 0x0001, 0x0033, 0x01c1, + 0x0001, 0x0033, 0x01c6, 0x0008, 0x048c, 0x0492, 0x0489, 0x0495, + 0x0498, 0x049b, 0x049e, 0x048f, 0x0001, 0x0033, 0x019d, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x0033, 0x01aa, 0x0001, 0x0000, 0x04f2, + 0x0001, 0x0033, 0x01b6, 0x0001, 0x0033, 0x01bb, 0x0001, 0x0033, + 0x01c1, 0x0001, 0x0033, 0x01c6, 0x0008, 0x04ad, 0x04b3, 0x04aa, + // Entry 26E40 - 26E7F + 0x04b6, 0x04b9, 0x04bc, 0x04bf, 0x04b0, 0x0001, 0x0033, 0x019d, + 0x0001, 0x0000, 0x04ef, 0x0001, 0x0033, 0x01aa, 0x0001, 0x0000, + 0x04f2, 0x0001, 0x0033, 0x01b6, 0x0001, 0x0033, 0x01bb, 0x0001, + 0x0033, 0x01c1, 0x0001, 0x0033, 0x01c6, 0x0003, 0x04d1, 0x04dc, + 0x04c6, 0x0002, 0x04c9, 0x04cd, 0x0002, 0x0033, 0x01cc, 0x01ec, + 0x0002, 0x0033, 0x01db, 0x01f3, 0x0002, 0x04d4, 0x04d8, 0x0002, + 0x0033, 0x01fc, 0x0203, 0x0002, 0x0033, 0x01ff, 0x0205, 0x0001, + 0x04de, 0x0002, 0x0033, 0x01fc, 0x0203, 0x0004, 0x04f0, 0x04ea, + // Entry 26E80 - 26EBF + 0x04e7, 0x04ed, 0x0001, 0x0001, 0x001d, 0x0001, 0x0002, 0x0033, + 0x0001, 0x0002, 0x003c, 0x0001, 0x0015, 0x14be, 0x0004, 0x0501, + 0x04fb, 0x04f8, 0x04fe, 0x0001, 0x0016, 0x02a8, 0x0001, 0x0016, + 0x02b6, 0x0001, 0x0016, 0x02c1, 0x0001, 0x0016, 0x02ca, 0x0004, + 0x0512, 0x050c, 0x0509, 0x050f, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0005, 0x051b, 0x0000, 0x0000, 0x0000, 0x0586, 0x0002, 0x051e, + 0x0552, 0x0003, 0x0522, 0x0532, 0x0542, 0x000e, 0x0000, 0x2445, + // Entry 26EC0 - 26EFF + 0x054c, 0x0553, 0x279f, 0x27a6, 0x0568, 0x2439, 0x27ac, 0x27b1, + 0x0589, 0x27b7, 0x27bd, 0x27c3, 0x27c6, 0x000e, 0x0000, 0x003f, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x2215, 0x2218, 0x2426, 0x0422, 0x000e, 0x0000, 0x2445, + 0x054c, 0x0553, 0x279f, 0x27a6, 0x0568, 0x2439, 0x27ac, 0x27b1, + 0x0589, 0x27b7, 0x27bd, 0x27c3, 0x27c6, 0x0003, 0x0556, 0x0566, + 0x0576, 0x000e, 0x0000, 0x2445, 0x054c, 0x0553, 0x279f, 0x27a6, + 0x0568, 0x2439, 0x27ac, 0x27b1, 0x0589, 0x27b7, 0x27bd, 0x27c3, + // Entry 26F00 - 26F3F + 0x27c6, 0x000e, 0x0000, 0x003f, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, + 0x0422, 0x000e, 0x0000, 0x2445, 0x054c, 0x0553, 0x279f, 0x27a6, + 0x0568, 0x2439, 0x27ac, 0x27b1, 0x0589, 0x27b7, 0x27bd, 0x27c3, + 0x27c6, 0x0003, 0x058f, 0x0594, 0x058a, 0x0001, 0x058c, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x0591, 0x0001, 0x0000, 0x04ef, 0x0001, + 0x0596, 0x0001, 0x0000, 0x04ef, 0x0005, 0x059f, 0x0000, 0x0000, + 0x0000, 0x0604, 0x0002, 0x05a2, 0x05d3, 0x0003, 0x05a6, 0x05b5, + // Entry 26F40 - 26F7F + 0x05c4, 0x000d, 0x0000, 0xffff, 0x05a2, 0x05aa, 0x05b3, 0x05bc, + 0x05c3, 0x05cb, 0x05d2, 0x05d9, 0x05e1, 0x05ec, 0x05f2, 0x2724, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, + 0x0000, 0xffff, 0x05a2, 0x05aa, 0x05b3, 0x05bc, 0x05c3, 0x05cb, + 0x05d2, 0x05d9, 0x05e1, 0x05ec, 0x05f2, 0x2724, 0x0003, 0x05d7, + 0x05e6, 0x05f5, 0x000d, 0x0000, 0xffff, 0x05a2, 0x05aa, 0x05b3, + 0x05bc, 0x05c3, 0x05cb, 0x05d2, 0x05d9, 0x05e1, 0x05ec, 0x05f2, + // Entry 26F80 - 26FBF + 0x2724, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, + 0x000d, 0x0000, 0xffff, 0x05a2, 0x05aa, 0x05b3, 0x05bc, 0x05c3, + 0x05cb, 0x05d2, 0x05d9, 0x05e1, 0x05ec, 0x05f2, 0x2724, 0x0003, + 0x060d, 0x0612, 0x0608, 0x0001, 0x060a, 0x0001, 0x0026, 0x16fa, + 0x0001, 0x060f, 0x0001, 0x0026, 0x16fa, 0x0001, 0x0614, 0x0001, + 0x0026, 0x16fa, 0x0008, 0x0620, 0x0000, 0x0000, 0x0000, 0x0685, + 0x0698, 0x0000, 0x06a9, 0x0002, 0x0623, 0x0654, 0x0003, 0x0627, + // Entry 26FC0 - 26FFF + 0x0636, 0x0645, 0x000d, 0x0000, 0xffff, 0x0606, 0x27cb, 0x2732, + 0x2739, 0x061f, 0x0626, 0x2741, 0x0633, 0x27d0, 0x27d5, 0x0643, + 0x064d, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, + 0x000d, 0x0000, 0xffff, 0x0657, 0x27db, 0x0666, 0x066f, 0x0679, + 0x0682, 0x2751, 0x27e1, 0x27eb, 0x27f4, 0x06ab, 0x06ba, 0x0003, + 0x0658, 0x0667, 0x0676, 0x000d, 0x0000, 0xffff, 0x0606, 0x27cb, + 0x2732, 0x2739, 0x061f, 0x0626, 0x2741, 0x0633, 0x27d0, 0x27d5, + // Entry 27000 - 2703F + 0x0643, 0x064d, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, + 0x2426, 0x000d, 0x0000, 0xffff, 0x0657, 0x27db, 0x0666, 0x066f, + 0x0679, 0x0682, 0x2751, 0x27e1, 0x27eb, 0x27f4, 0x06ab, 0x06ba, + 0x0003, 0x068e, 0x0693, 0x0689, 0x0001, 0x068b, 0x0001, 0x0000, + 0x19c7, 0x0001, 0x0690, 0x0001, 0x0000, 0x19c7, 0x0001, 0x0695, + 0x0001, 0x0000, 0x19c7, 0x0004, 0x06a6, 0x06a0, 0x069d, 0x06a3, + 0x0001, 0x0010, 0x0003, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, + // Entry 27040 - 2707F + 0x001b, 0x0001, 0x0000, 0x240c, 0x0004, 0x06b7, 0x06b1, 0x06ae, + 0x06b4, 0x0001, 0x0033, 0x0000, 0x0001, 0x0033, 0x0000, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x06c3, 0x07b5, 0x0000, 0x07c6, 0x0001, 0x06c5, + 0x0001, 0x06c7, 0x00ec, 0x0000, 0x06cb, 0x06dd, 0x06f1, 0x0705, + 0x0719, 0x072c, 0x073e, 0x0750, 0x0762, 0x0775, 0x247f, 0x2493, + 0x24ac, 0x24c6, 0x24de, 0x20cf, 0x081e, 0x20e5, 0x0843, 0x0857, + 0x086a, 0x087d, 0x0891, 0x08a3, 0x08b5, 0x27fb, 0x280d, 0x08ed, + // Entry 27080 - 270BF + 0x2820, 0x0914, 0x2833, 0x093a, 0x094e, 0x095f, 0x2847, 0x0985, + 0x0999, 0x09ae, 0x09c2, 0x09d3, 0x09e6, 0x09f7, 0x285b, 0x0a20, + 0x0a33, 0x0a46, 0x0a58, 0x286c, 0x0a7b, 0x0a8c, 0x0aa2, 0x0ab7, + 0x0acc, 0x0ae1, 0x0af6, 0x0b0b, 0x0b1e, 0x0b32, 0x0b48, 0x0b60, + 0x0b77, 0x0b8d, 0x0ba2, 0x0bb6, 0x0bcb, 0x0be1, 0x0bf6, 0x0c0b, + 0x287c, 0x0c37, 0x0c4c, 0x288f, 0x0c74, 0x28a2, 0x0c9f, 0x0cb3, + 0x0cc8, 0x0cdd, 0x2107, 0x0d07, 0x28b9, 0x28cc, 0x0d47, 0x0d5b, + 0x0d6f, 0x0d85, 0x28df, 0x0db0, 0x0dc3, 0x28f2, 0x0def, 0x0e04, + // Entry 270C0 - 270FF + 0x0e19, 0x2907, 0x0e43, 0x0e57, 0x0e6d, 0x0e80, 0x0e96, 0x291b, + 0x0ec1, 0x0ed4, 0x0ee9, 0x0efd, 0x0f12, 0x0f26, 0x292e, 0x0f50, + 0x0f64, 0x0f7a, 0x0f8f, 0x0fa4, 0x2945, 0x2958, 0x0fe6, 0x0ffd, + 0x296e, 0x1028, 0x103c, 0x1051, 0x1066, 0x107a, 0x108e, 0x2985, + 0x10b8, 0x10cf, 0x10e3, 0x211a, 0x1110, 0x1124, 0x1139, 0x114d, + 0x1163, 0x1178, 0x118d, 0x299b, 0x11ba, 0x29ae, 0x11e7, 0x11fb, + 0x120f, 0x1224, 0x1238, 0x124d, 0x1262, 0x1276, 0x29c1, 0x12a0, + 0x12b5, 0x12ca, 0x12df, 0x29d5, 0x1308, 0x29eb, 0x1335, 0x134b, + // Entry 27100 - 2713F + 0x24f6, 0x1374, 0x1388, 0x139e, 0x13b4, 0xffff, 0x13e0, 0x13f4, + 0x140b, 0xffff, 0x1435, 0x144b, 0x145f, 0x1473, 0x1489, 0x149c, + 0x14b3, 0x14c8, 0x2a00, 0xffff, 0x150b, 0x1522, 0x1538, 0x154f, + 0x1565, 0x157b, 0x158f, 0x15a4, 0x15bb, 0x15d0, 0x15e4, 0x15f8, + 0x160d, 0x1621, 0x2a13, 0x164d, 0x1661, 0x1676, 0x168a, 0x16a0, + 0x16b6, 0x2a28, 0x2a3c, 0x16f7, 0x170c, 0x2a4f, 0x2a64, 0x174a, + 0x175e, 0x1773, 0x2a7b, 0x179b, 0x17b1, 0x17c7, 0x17db, 0x17f2, + 0x1808, 0x181d, 0x1832, 0x2a8f, 0x250a, 0x1874, 0x2aa2, 0x189e, + // Entry 27140 - 2717F + 0x18b3, 0x18c8, 0x18dd, 0x18f1, 0x1906, 0x191b, 0x192f, 0x1942, + 0x2ab4, 0x196d, 0x1983, 0x1997, 0x2ac7, 0x2acd, 0x2ad5, 0x2adc, + 0x0004, 0x07c3, 0x07bd, 0x07ba, 0x07c0, 0x0001, 0x0010, 0x0003, + 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0000, + 0x240c, 0x0004, 0x07d4, 0x07ce, 0x07cb, 0x07d1, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0005, 0x07dd, 0x0000, 0x0000, 0x0000, 0x0842, + 0x0002, 0x07e0, 0x0811, 0x0003, 0x07e4, 0x07f3, 0x0802, 0x000d, + // Entry 27180 - 271BF + 0x0000, 0xffff, 0x19c9, 0x19d3, 0x19df, 0x2566, 0x19eb, 0x19f2, + 0x256a, 0x1a01, 0x1a06, 0x2575, 0x23c6, 0x1a16, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, 0x0000, 0xffff, + 0x19c9, 0x19d3, 0x19df, 0x2566, 0x19eb, 0x19f2, 0x256a, 0x1a01, + 0x1a06, 0x2575, 0x23c6, 0x1a16, 0x0003, 0x0815, 0x0824, 0x0833, + 0x000d, 0x0000, 0xffff, 0x19c9, 0x19d3, 0x19df, 0x2566, 0x19eb, + 0x19f2, 0x256a, 0x1a01, 0x1a06, 0x2575, 0x23c6, 0x1a16, 0x000d, + // Entry 271C0 - 271FF + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, 0x0000, + 0xffff, 0x19c9, 0x19d3, 0x19df, 0x2566, 0x19eb, 0x19f2, 0x256a, + 0x1a01, 0x1a06, 0x2575, 0x23c6, 0x1a16, 0x0003, 0x084b, 0x0850, + 0x0846, 0x0001, 0x0848, 0x0001, 0x0000, 0x1a1d, 0x0001, 0x084d, + 0x0001, 0x0000, 0x1a1d, 0x0001, 0x0852, 0x0001, 0x0000, 0x1a1d, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x085e, 0x0874, 0x0000, + 0x9006, 0x0003, 0x0868, 0x086e, 0x0862, 0x0001, 0x0864, 0x0002, + // Entry 27200 - 2723F + 0x0033, 0x0208, 0x0217, 0x0001, 0x086a, 0x0002, 0x0033, 0x0208, + 0x0217, 0x0001, 0x0870, 0x0002, 0x0033, 0x0208, 0x0217, 0x0004, + 0x0882, 0x087c, 0x0879, 0x087f, 0x0001, 0x0010, 0x0003, 0x0001, + 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0000, 0x240c, + 0x0042, 0x08c8, 0x08cd, 0x08d2, 0x08d7, 0x08ec, 0x08fc, 0x090c, + 0x0921, 0x0931, 0x0941, 0x0956, 0x0966, 0x0976, 0x098f, 0x09a3, + 0x09b7, 0x09bc, 0x09c1, 0x09c6, 0x09dd, 0x09ed, 0x09fd, 0x0a02, + 0x0a07, 0x0a0c, 0x0a11, 0x0a16, 0x0a1b, 0x0a20, 0x0a25, 0x0a2a, + // Entry 27240 - 2727F + 0x0a3c, 0x0a4e, 0x0a60, 0x0a72, 0x0a84, 0x0a96, 0x0aa8, 0x0aba, + 0x0acc, 0x0ade, 0x0af0, 0x0b02, 0x0b14, 0x0b26, 0x0b38, 0x0b4a, + 0x0b5c, 0x0b6e, 0x0b80, 0x0b92, 0x0ba4, 0x0ba9, 0x0bae, 0x0bb3, + 0x0bc7, 0x0bd7, 0x0be7, 0x0bfb, 0x0c0b, 0x0c1b, 0x0c2f, 0x0c3f, + 0x0c4f, 0x0c54, 0x0c59, 0x0001, 0x08ca, 0x0001, 0x0001, 0x0040, + 0x0001, 0x08cf, 0x0001, 0x0001, 0x0040, 0x0001, 0x08d4, 0x0001, + 0x0001, 0x0040, 0x0003, 0x08db, 0x08de, 0x08e3, 0x0001, 0x0033, + 0x021e, 0x0003, 0x0033, 0x0224, 0x022f, 0x0239, 0x0002, 0x08e6, + // Entry 27280 - 272BF + 0x08e9, 0x0001, 0x0033, 0x0245, 0x0001, 0x0033, 0x0255, 0x0003, + 0x08f0, 0x0000, 0x08f3, 0x0001, 0x0033, 0x0269, 0x0002, 0x08f6, + 0x08f9, 0x0001, 0x0033, 0x026e, 0x0001, 0x0033, 0x027a, 0x0003, + 0x0900, 0x0000, 0x0903, 0x0001, 0x0033, 0x0269, 0x0002, 0x0906, + 0x0909, 0x0001, 0x0033, 0x026e, 0x0001, 0x0033, 0x027a, 0x0003, + 0x0910, 0x0913, 0x0918, 0x0001, 0x0033, 0x0287, 0x0003, 0x0033, + 0x028f, 0x029c, 0x02a8, 0x0002, 0x091b, 0x091e, 0x0001, 0x0033, + 0x02bb, 0x0001, 0x0033, 0x02cd, 0x0003, 0x0925, 0x0000, 0x0928, + // Entry 272C0 - 272FF + 0x0001, 0x0033, 0x02e3, 0x0002, 0x092b, 0x092e, 0x0001, 0x0033, + 0x02e9, 0x0001, 0x0033, 0x02f7, 0x0003, 0x0935, 0x0000, 0x0938, + 0x0001, 0x0033, 0x02e3, 0x0002, 0x093b, 0x093e, 0x0001, 0x0033, + 0x02e9, 0x0001, 0x0033, 0x02f7, 0x0003, 0x0945, 0x0948, 0x094d, + 0x0001, 0x0033, 0x0306, 0x0003, 0x0033, 0x030c, 0x0317, 0x0321, + 0x0002, 0x0950, 0x0953, 0x0001, 0x0033, 0x0332, 0x0001, 0x0033, + 0x0342, 0x0003, 0x095a, 0x0000, 0x095d, 0x0001, 0x0033, 0x0356, + 0x0002, 0x0960, 0x0963, 0x0001, 0x0033, 0x035b, 0x0001, 0x0033, + // Entry 27300 - 2733F + 0x0367, 0x0003, 0x096a, 0x0000, 0x096d, 0x0001, 0x0033, 0x0356, + 0x0002, 0x0970, 0x0973, 0x0001, 0x0033, 0x035b, 0x0001, 0x0033, + 0x0367, 0x0004, 0x097b, 0x097e, 0x0983, 0x098c, 0x0001, 0x0033, + 0x0374, 0x0003, 0x0033, 0x037b, 0x0387, 0x0392, 0x0002, 0x0986, + 0x0989, 0x0001, 0x0033, 0x039f, 0x0001, 0x0033, 0x03b0, 0x0001, + 0x0033, 0x03c5, 0x0004, 0x0994, 0x0000, 0x0997, 0x09a0, 0x0001, + 0x0033, 0x03d3, 0x0002, 0x099a, 0x099d, 0x0001, 0x0033, 0x03d8, + 0x0001, 0x0033, 0x03e4, 0x0001, 0x0033, 0x03f1, 0x0004, 0x09a8, + // Entry 27340 - 2737F + 0x0000, 0x09ab, 0x09b4, 0x0001, 0x0033, 0x03d3, 0x0002, 0x09ae, + 0x09b1, 0x0001, 0x0033, 0x03d8, 0x0001, 0x0033, 0x03e4, 0x0001, + 0x0033, 0x03f1, 0x0001, 0x09b9, 0x0001, 0x0033, 0x0374, 0x0001, + 0x09be, 0x0001, 0x0033, 0x03d3, 0x0001, 0x09c3, 0x0001, 0x0033, + 0x03d3, 0x0003, 0x09ca, 0x09cd, 0x09d4, 0x0001, 0x0033, 0x03fc, + 0x0005, 0x0033, 0x040e, 0x0416, 0x041f, 0x0401, 0x0425, 0x0002, + 0x09d7, 0x09da, 0x0001, 0x0033, 0x042a, 0x0001, 0x0033, 0x0439, + 0x0003, 0x09e1, 0x0000, 0x09e4, 0x0001, 0x0000, 0x213b, 0x0002, + // Entry 27380 - 273BF + 0x09e7, 0x09ea, 0x0001, 0x0033, 0x044c, 0x0001, 0x0033, 0x0458, + 0x0003, 0x09f1, 0x0000, 0x09f4, 0x0001, 0x0000, 0x213b, 0x0002, + 0x09f7, 0x09fa, 0x0001, 0x0033, 0x044c, 0x0001, 0x0033, 0x0458, + 0x0001, 0x09ff, 0x0001, 0x0033, 0x0463, 0x0001, 0x0a04, 0x0001, + 0x0033, 0x0463, 0x0001, 0x0a09, 0x0001, 0x0033, 0x0463, 0x0001, + 0x0a0e, 0x0001, 0x0033, 0x0476, 0x0001, 0x0a13, 0x0001, 0x0033, + 0x048a, 0x0001, 0x0a18, 0x0001, 0x0033, 0x048a, 0x0001, 0x0a1d, + 0x0001, 0x0033, 0x049c, 0x0001, 0x0a22, 0x0001, 0x0033, 0x04a7, + // Entry 273C0 - 273FF + 0x0001, 0x0a27, 0x0001, 0x0033, 0x04a7, 0x0003, 0x0000, 0x0a2e, + 0x0a33, 0x0003, 0x0033, 0x04b0, 0x04c1, 0x04d1, 0x0002, 0x0a36, + 0x0a39, 0x0001, 0x0033, 0x04e8, 0x0001, 0x0033, 0x04fe, 0x0003, + 0x0000, 0x0a40, 0x0a45, 0x0003, 0x0033, 0x0518, 0x0522, 0x052b, + 0x0002, 0x0a48, 0x0a4b, 0x0001, 0x0033, 0x053b, 0x0001, 0x0033, + 0x0548, 0x0003, 0x0000, 0x0a52, 0x0a57, 0x0003, 0x0033, 0x0518, + 0x0522, 0x052b, 0x0002, 0x0a5a, 0x0a5d, 0x0001, 0x0033, 0x053b, + 0x0001, 0x0033, 0x0548, 0x0003, 0x0000, 0x0a64, 0x0a69, 0x0003, + // Entry 27400 - 2743F + 0x0033, 0x0556, 0x0561, 0x056b, 0x0002, 0x0a6c, 0x0a6f, 0x0001, + 0x0033, 0x057c, 0x0001, 0x0033, 0x058c, 0x0003, 0x0000, 0x0a76, + 0x0a7b, 0x0003, 0x0033, 0x059b, 0x05a5, 0x05ae, 0x0002, 0x0a7e, + 0x0a81, 0x0001, 0x0033, 0x05be, 0x0001, 0x0033, 0x05cb, 0x0003, + 0x0000, 0x0a88, 0x0a8d, 0x0003, 0x0033, 0x059b, 0x05a5, 0x05ae, + 0x0002, 0x0a90, 0x0a93, 0x0001, 0x0033, 0x05be, 0x0001, 0x0033, + 0x05cb, 0x0003, 0x0000, 0x0a9a, 0x0a9f, 0x0003, 0x0033, 0x05d9, + 0x05e5, 0x05f0, 0x0002, 0x0aa2, 0x0aa5, 0x0001, 0x0033, 0x0602, + // Entry 27440 - 2747F + 0x0001, 0x0033, 0x0613, 0x0003, 0x0000, 0x0aac, 0x0ab1, 0x0003, + 0x0033, 0x0623, 0x062d, 0x0636, 0x0002, 0x0ab4, 0x0ab7, 0x0001, + 0x0033, 0x0646, 0x0001, 0x0033, 0x0653, 0x0003, 0x0000, 0x0abe, + 0x0ac3, 0x0003, 0x0033, 0x0623, 0x062d, 0x0636, 0x0002, 0x0ac6, + 0x0ac9, 0x0001, 0x0033, 0x0646, 0x0001, 0x0033, 0x0653, 0x0003, + 0x0000, 0x0ad0, 0x0ad5, 0x0003, 0x0033, 0x0661, 0x066b, 0x0674, + 0x0002, 0x0ad8, 0x0adb, 0x0001, 0x0033, 0x0684, 0x0001, 0x0033, + 0x0693, 0x0003, 0x0000, 0x0ae2, 0x0ae7, 0x0003, 0x0033, 0x06a1, + // Entry 27480 - 274BF + 0x06ab, 0x06b4, 0x0002, 0x0aea, 0x0aed, 0x0001, 0x0033, 0x06c4, + 0x0001, 0x0033, 0x06d1, 0x0003, 0x0000, 0x0af4, 0x0af9, 0x0003, + 0x0033, 0x06a1, 0x06ab, 0x06b4, 0x0002, 0x0afc, 0x0aff, 0x0001, + 0x0033, 0x06c4, 0x0001, 0x0033, 0x06d1, 0x0003, 0x0000, 0x0b06, + 0x0b0b, 0x0003, 0x0033, 0x06df, 0x06ea, 0x06f4, 0x0002, 0x0b0e, + 0x0b11, 0x0001, 0x0033, 0x0705, 0x0001, 0x0033, 0x0715, 0x0003, + 0x0000, 0x0b18, 0x0b1d, 0x0003, 0x0033, 0x0724, 0x072e, 0x0737, + 0x0002, 0x0b20, 0x0b23, 0x0001, 0x0033, 0x0747, 0x0001, 0x0033, + // Entry 274C0 - 274FF + 0x0754, 0x0003, 0x0000, 0x0b2a, 0x0b2f, 0x0003, 0x0033, 0x0724, + 0x072e, 0x0737, 0x0002, 0x0b32, 0x0b35, 0x0001, 0x0033, 0x0747, + 0x0001, 0x0033, 0x0754, 0x0003, 0x0000, 0x0b3c, 0x0b41, 0x0003, + 0x0033, 0x0762, 0x076d, 0x0777, 0x0002, 0x0b44, 0x0b47, 0x0001, + 0x0033, 0x0788, 0x0001, 0x0033, 0x0798, 0x0003, 0x0000, 0x0b4e, + 0x0b53, 0x0003, 0x0033, 0x07a7, 0x07b1, 0x07ba, 0x0002, 0x0b56, + 0x0b59, 0x0001, 0x0033, 0x07ca, 0x0001, 0x0033, 0x07d7, 0x0003, + 0x0000, 0x0b60, 0x0b65, 0x0003, 0x0033, 0x07a7, 0x07b1, 0x07ba, + // Entry 27500 - 2753F + 0x0002, 0x0b68, 0x0b6b, 0x0001, 0x0033, 0x07ca, 0x0001, 0x0033, + 0x07d7, 0x0003, 0x0000, 0x0b72, 0x0b77, 0x0003, 0x0033, 0x07e5, + 0x07f0, 0x07fa, 0x0002, 0x0b7a, 0x0b7d, 0x0001, 0x0033, 0x080b, + 0x0001, 0x0033, 0x081b, 0x0003, 0x0000, 0x0b84, 0x0b89, 0x0003, + 0x0033, 0x082a, 0x0834, 0x083d, 0x0002, 0x0b8c, 0x0b8f, 0x0001, + 0x0033, 0x084d, 0x0001, 0x0033, 0x085a, 0x0003, 0x0000, 0x0b96, + 0x0b9b, 0x0003, 0x0033, 0x082a, 0x0834, 0x083d, 0x0002, 0x0b9e, + 0x0ba1, 0x0001, 0x0033, 0x084d, 0x0001, 0x0033, 0x085a, 0x0001, + // Entry 27540 - 2757F + 0x0ba6, 0x0001, 0x0007, 0x0892, 0x0001, 0x0bab, 0x0001, 0x0007, + 0x0892, 0x0001, 0x0bb0, 0x0001, 0x0007, 0x0892, 0x0003, 0x0bb7, + 0x0bba, 0x0bbe, 0x0001, 0x0033, 0x0868, 0x0002, 0x0033, 0xffff, + 0x086c, 0x0002, 0x0bc1, 0x0bc4, 0x0001, 0x0033, 0x0874, 0x0001, + 0x0033, 0x0882, 0x0003, 0x0bcb, 0x0000, 0x0bce, 0x0001, 0x0033, + 0x0894, 0x0002, 0x0bd1, 0x0bd4, 0x0001, 0x0033, 0x0874, 0x0001, + 0x0033, 0x0898, 0x0003, 0x0bdb, 0x0000, 0x0bde, 0x0001, 0x0000, + 0x2142, 0x0002, 0x0be1, 0x0be4, 0x0001, 0x0033, 0x0874, 0x0001, + // Entry 27580 - 275BF + 0x0033, 0x0898, 0x0003, 0x0beb, 0x0bee, 0x0bf2, 0x0001, 0x0033, + 0x08a5, 0x0002, 0x0033, 0xffff, 0x08ab, 0x0002, 0x0bf5, 0x0bf8, + 0x0001, 0x0033, 0x08b5, 0x0001, 0x0033, 0x08c5, 0x0003, 0x0bff, + 0x0000, 0x0c02, 0x0001, 0x0033, 0x08d9, 0x0002, 0x0c05, 0x0c08, + 0x0001, 0x0033, 0x08de, 0x0001, 0x0033, 0x08ea, 0x0003, 0x0c0f, + 0x0000, 0x0c12, 0x0001, 0x0000, 0x1f9a, 0x0002, 0x0c15, 0x0c18, + 0x0001, 0x0033, 0x08de, 0x0001, 0x0033, 0x08ea, 0x0003, 0x0c1f, + 0x0c22, 0x0c26, 0x0001, 0x0033, 0x08f7, 0x0002, 0x0033, 0xffff, + // Entry 275C0 - 275FF + 0x08fd, 0x0002, 0x0c29, 0x0c2c, 0x0001, 0x0033, 0x0906, 0x0001, + 0x0033, 0x0916, 0x0003, 0x0c33, 0x0000, 0x0c36, 0x0001, 0x0033, + 0x092a, 0x0002, 0x0c39, 0x0c3c, 0x0001, 0x0033, 0x092f, 0x0001, + 0x0033, 0x093b, 0x0003, 0x0c43, 0x0000, 0x0c46, 0x0001, 0x0000, + 0x2008, 0x0002, 0x0c49, 0x0c4c, 0x0001, 0x0033, 0x092f, 0x0001, + 0x0033, 0x093b, 0x0001, 0x0c51, 0x0001, 0x0033, 0x0948, 0x0001, + 0x0c56, 0x0001, 0x0033, 0x0953, 0x0001, 0x0c5b, 0x0001, 0x0033, + 0x0953, 0x0004, 0x0c63, 0x0c68, 0x0c6d, 0x0c7c, 0x0003, 0x0008, + // Entry 27600 - 2763F + 0x1dbe, 0x4f99, 0x4fa0, 0x0003, 0x0033, 0x095c, 0x0966, 0x097c, + 0x0002, 0x0000, 0x0c70, 0x0003, 0x0000, 0x0c77, 0x0c74, 0x0001, + 0x0033, 0x098e, 0x0003, 0x0033, 0xffff, 0x09ac, 0x09c6, 0x0002, + 0x0e63, 0x0c7f, 0x0003, 0x0c83, 0x0dc3, 0x0d23, 0x009e, 0x0033, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0a67, 0x0ab4, 0x0b2a, 0x0b65, + 0x0ba0, 0x0bd8, 0x0c1f, 0x0c5d, 0x0c98, 0x0d40, 0x0d75, 0x0db9, + 0x0e24, 0x0e62, 0x0ea3, 0x0efc, 0x0f67, 0x0fbd, 0x1013, 0x105a, + 0x1095, 0xffff, 0xffff, 0x10f7, 0xffff, 0x114a, 0xffff, 0x11bd, + // Entry 27640 - 2767F + 0x11fb, 0x1230, 0x1271, 0xffff, 0xffff, 0x12e0, 0x1321, 0x136c, + 0xffff, 0xffff, 0xffff, 0x13d8, 0xffff, 0x1433, 0x1480, 0xffff, + 0x14e1, 0x152b, 0x158a, 0xffff, 0xffff, 0xffff, 0xffff, 0x161f, + 0xffff, 0xffff, 0x1684, 0x16da, 0xffff, 0xffff, 0x175c, 0x17b2, + 0x17f6, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x18ad, + 0x18e2, 0x1920, 0x195b, 0x1996, 0xffff, 0xffff, 0x1a35, 0xffff, + 0x1a7a, 0xffff, 0xffff, 0x1af0, 0xffff, 0x1b86, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1c06, 0xffff, 0x1c57, 0x1cb6, 0x1d0c, 0x1d53, + // Entry 27680 - 276BF + 0xffff, 0xffff, 0xffff, 0x1db4, 0x1e07, 0x1e57, 0xffff, 0xffff, + 0x1ec7, 0x1f42, 0x1f8c, 0x1fc1, 0xffff, 0xffff, 0x2021, 0x2062, + 0x2097, 0xffff, 0x20f0, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x21f0, 0x2231, 0x226c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2323, 0xffff, 0xffff, 0x237d, 0xffff, 0x23c1, + 0xffff, 0x241b, 0x2459, 0x24a0, 0xffff, 0x24ee, 0x2538, 0xffff, + 0xffff, 0xffff, 0x25b6, 0x25f4, 0xffff, 0xffff, 0x09dd, 0x0aef, + 0x0ccd, 0x0d05, 0xffff, 0xffff, 0x1b34, 0x2190, 0x009e, 0x0033, + // Entry 276C0 - 276FF + 0x0a12, 0x0a23, 0x0a37, 0x0a4a, 0x0a7a, 0x0ac1, 0x0b37, 0x0b72, + 0x0bac, 0x0be9, 0x0c2d, 0x0c6a, 0x0ca3, 0x0d4b, 0x0d85, 0x0dd6, + 0x0e32, 0x0e71, 0x0eba, 0x0f19, 0x0f7d, 0x0fd3, 0x1024, 0x1067, + 0x10a6, 0x10dc, 0x10e9, 0x1104, 0x1132, 0x115e, 0x11a6, 0x11cb, + 0x1206, 0x123f, 0x1282, 0x12b8, 0x12ca, 0x12ef, 0x1331, 0x1377, + 0x13a1, 0x13ad, 0x13c6, 0x13eb, 0x1425, 0x1446, 0x1492, 0x14ca, + 0x14f3, 0x1544, 0x1595, 0x15bf, 0x15d4, 0x1601, 0x1611, 0x162d, + 0x165d, 0x1670, 0x169a, 0x16f0, 0x173b, 0x174f, 0x1772, 0x17c2, + // Entry 27700 - 2773F + 0x1801, 0x182b, 0x1837, 0x184d, 0x185d, 0x1879, 0x1893, 0x18b8, + 0x18f0, 0x192d, 0x1968, 0x19b5, 0x1a07, 0x1a1e, 0x1a41, 0x1a6d, + 0x1a8c, 0x1ac4, 0x1ae0, 0x1b00, 0x1b6c, 0x1b94, 0x1bc4, 0x1bd3, + 0x1be2, 0x1bf2, 0x1c16, 0x1c4a, 0x1c70, 0x1ccc, 0x1d1d, 0x1d60, + 0x1d8e, 0x1d9c, 0x1da8, 0x1dc9, 0x1e1b, 0x1e6a, 0x1ea4, 0x1eaf, + 0x1ee1, 0x1f54, 0x1f97, 0x1fd0, 0x2002, 0x200e, 0x2030, 0x206d, + 0x20a6, 0x20d8, 0x2110, 0x2164, 0x2173, 0x2180, 0x21d4, 0x21e2, + 0x21ff, 0x223e, 0x2278, 0x22a4, 0x22b5, 0x22cd, 0x22e5, 0x22fb, + // Entry 27740 - 2777F + 0x230a, 0x2316, 0x2330, 0x235e, 0x236f, 0x2389, 0x23b5, 0x23d4, + 0x240e, 0x2429, 0x246a, 0x24ae, 0x24de, 0x2500, 0x2548, 0x257c, + 0x2589, 0x259e, 0x25c4, 0x2608, 0x1730, 0x1f29, 0x09e8, 0x0afc, + 0x0cd9, 0x0d12, 0x119a, 0x1ad4, 0x1b40, 0x21a0, 0x009e, 0x0033, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0a95, 0x0ad6, 0x0b4c, 0x0b87, + 0x0bc0, 0x0c02, 0x0c43, 0x0c7f, 0x0cb6, 0x0d5e, 0x0d9d, 0x0dfb, + 0x0e48, 0x0e88, 0x0ed9, 0x0f3e, 0x0f9b, 0x0ff1, 0x103d, 0x107c, + 0x10bf, 0xffff, 0xffff, 0x1119, 0xffff, 0x117a, 0xffff, 0x11e1, + // Entry 27780 - 277BF + 0x1219, 0x1256, 0x129b, 0xffff, 0xffff, 0x1306, 0x1349, 0x138a, + 0xffff, 0xffff, 0xffff, 0x1406, 0xffff, 0x1461, 0x14ac, 0xffff, + 0x150d, 0x1565, 0x15a8, 0xffff, 0xffff, 0xffff, 0xffff, 0x1643, + 0xffff, 0xffff, 0x16b8, 0x170e, 0xffff, 0xffff, 0x1790, 0x17da, + 0x1814, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x18cb, + 0x1906, 0x1942, 0x197d, 0x19dc, 0xffff, 0xffff, 0x1a55, 0xffff, + 0x1aa6, 0xffff, 0xffff, 0x1b18, 0xffff, 0x1baa, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1c2e, 0xffff, 0x1c91, 0x1cea, 0x1d36, 0x1d75, + // Entry 277C0 - 277FF + 0xffff, 0xffff, 0xffff, 0x1de6, 0x1e37, 0x1e85, 0xffff, 0xffff, + 0x1f03, 0x1f6e, 0x1faa, 0x1fe7, 0xffff, 0xffff, 0x2047, 0x2080, + 0x20bd, 0xffff, 0x2138, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2216, 0x2253, 0x228c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2345, 0xffff, 0xffff, 0x239d, 0xffff, 0x23ef, + 0xffff, 0x243f, 0x2483, 0x24c4, 0xffff, 0x251a, 0x2560, 0xffff, + 0xffff, 0xffff, 0x25da, 0x2624, 0xffff, 0xffff, 0x09fb, 0x0b11, + 0x0ced, 0x0d27, 0xffff, 0xffff, 0x1b54, 0x21b8, 0x0003, 0x0000, + // Entry 27800 - 2783F + 0x0000, 0x0e67, 0x0047, 0x0033, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 27840 - 2787F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1874, 0x188f, 0x18a9, 0x0002, 0x0003, 0x01b9, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, + 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, 0x0006, 0x000d, + 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0002, + 0x0587, 0x0008, 0x002f, 0x0094, 0x00eb, 0x0120, 0x0161, 0x0186, + 0x0197, 0x01a8, 0x0002, 0x0032, 0x0063, 0x0003, 0x0036, 0x0045, + // Entry 27880 - 278BF + 0x0054, 0x000d, 0x0034, 0xffff, 0x0000, 0x0004, 0x0008, 0x000c, + 0x0010, 0x0014, 0x0018, 0x001c, 0x0024, 0x0028, 0x002e, 0x0032, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, + 0x0034, 0xffff, 0x0036, 0x0043, 0x0051, 0x005a, 0x0010, 0x0060, + 0x0065, 0x006d, 0x007a, 0x0083, 0x008c, 0x0094, 0x0003, 0x0067, + 0x0076, 0x0085, 0x000d, 0x0034, 0xffff, 0x0000, 0x0004, 0x0008, + 0x000c, 0x0010, 0x0014, 0x0018, 0x001c, 0x0024, 0x0028, 0x002e, + // Entry 278C0 - 278FF + 0x0032, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, + 0x000d, 0x0034, 0xffff, 0x0036, 0x0043, 0x0051, 0x005a, 0x0010, + 0x0060, 0x0065, 0x006d, 0x007a, 0x0083, 0x008c, 0x0094, 0x0002, + 0x0097, 0x00c1, 0x0005, 0x009d, 0x00a6, 0x00b8, 0x0000, 0x00af, + 0x0007, 0x0034, 0x009c, 0x00a2, 0x00a8, 0x00ac, 0x00b0, 0x00b8, + 0x00bf, 0x0007, 0x0000, 0x257d, 0x2ae3, 0x04dd, 0x2151, 0x04dd, + 0x2364, 0x257d, 0x0007, 0x0034, 0x009c, 0x00a2, 0x00a8, 0x00ac, + // Entry 27900 - 2793F + 0x00b0, 0x00b8, 0x00bf, 0x0007, 0x0034, 0x00c3, 0x00d3, 0x00db, + 0x00e3, 0x00ec, 0x00f8, 0x0102, 0x0005, 0x00c7, 0x00d0, 0x00e2, + 0x0000, 0x00d9, 0x0007, 0x0034, 0x009c, 0x00a2, 0x00a8, 0x00ac, + 0x00b0, 0x00b8, 0x00bf, 0x0007, 0x0000, 0x257d, 0x2ae3, 0x04dd, + 0x2151, 0x04dd, 0x2364, 0x257d, 0x0007, 0x0034, 0x009c, 0x00a2, + 0x00a8, 0x00ac, 0x00b0, 0x00b8, 0x00bf, 0x0007, 0x0034, 0x00c3, + 0x00d3, 0x00db, 0x00e3, 0x00ec, 0x00f8, 0x0102, 0x0002, 0x00ee, + 0x0107, 0x0003, 0x00f2, 0x00f9, 0x0100, 0x0005, 0x0034, 0xffff, + // Entry 27940 - 2797F + 0x010c, 0x0111, 0x0116, 0x011b, 0x0005, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x0005, 0x0034, 0xffff, 0x0120, 0x012a, + 0x0134, 0x013e, 0x0003, 0x010b, 0x0112, 0x0119, 0x0005, 0x0034, + 0xffff, 0x010c, 0x0111, 0x0116, 0x011b, 0x0005, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0034, 0xffff, 0x0120, + 0x012a, 0x0134, 0x013e, 0x0002, 0x0123, 0x0142, 0x0003, 0x0127, + 0x0130, 0x0139, 0x0002, 0x012a, 0x012d, 0x0001, 0x000b, 0x0a70, + 0x0001, 0x0034, 0x0148, 0x0002, 0x0133, 0x0136, 0x0001, 0x000b, + // Entry 27980 - 279BF + 0x0a70, 0x0001, 0x0034, 0x0148, 0x0002, 0x013c, 0x013f, 0x0001, + 0x000b, 0x0a70, 0x0001, 0x0034, 0x0148, 0x0003, 0x0146, 0x014f, + 0x0158, 0x0002, 0x0149, 0x014c, 0x0001, 0x000b, 0x0a70, 0x0001, + 0x0034, 0x0148, 0x0002, 0x0152, 0x0155, 0x0001, 0x000b, 0x0a70, + 0x0001, 0x0034, 0x0148, 0x0002, 0x015b, 0x015e, 0x0001, 0x000b, + 0x0a70, 0x0001, 0x0034, 0x0148, 0x0003, 0x0170, 0x017b, 0x0165, + 0x0002, 0x0168, 0x016c, 0x0002, 0x0034, 0x014d, 0x0159, 0x0002, + 0x0000, 0x04f5, 0x2701, 0x0002, 0x0173, 0x0177, 0x0002, 0x0034, + // Entry 279C0 - 279FF + 0x0166, 0x016b, 0x0002, 0x0000, 0x04f5, 0x2701, 0x0002, 0x017e, + 0x0182, 0x0002, 0x0034, 0x0166, 0x016b, 0x0002, 0x0000, 0x04f5, + 0x2701, 0x0004, 0x0194, 0x018e, 0x018b, 0x0191, 0x0001, 0x0006, + 0x015b, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, + 0x0002, 0x08e8, 0x0004, 0x01a5, 0x019f, 0x019c, 0x01a2, 0x0001, + 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, + 0x0001, 0x0000, 0x0546, 0x0004, 0x01b6, 0x01b0, 0x01ad, 0x01b3, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + // Entry 27A00 - 27A3F + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0040, 0x01fa, 0x0000, 0x0000, + 0x01ff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0204, 0x0000, + 0x0000, 0x0209, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x020e, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0219, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x021e, 0x0000, 0x0223, 0x0000, 0x0000, 0x0228, 0x0000, + // Entry 27A40 - 27A7F + 0x0000, 0x022d, 0x0000, 0x0000, 0x0232, 0x0001, 0x01fc, 0x0001, + 0x0034, 0x0170, 0x0001, 0x0201, 0x0001, 0x0034, 0x0175, 0x0001, + 0x0206, 0x0001, 0x0034, 0x017b, 0x0001, 0x020b, 0x0001, 0x0034, + 0x0182, 0x0002, 0x0211, 0x0214, 0x0001, 0x0034, 0x0186, 0x0003, + 0x0034, 0x0193, 0x019d, 0x01a3, 0x0001, 0x021b, 0x0001, 0x0034, + 0x01a8, 0x0001, 0x0220, 0x0001, 0x0034, 0x01b9, 0x0001, 0x0225, + 0x0001, 0x0034, 0x01d6, 0x0001, 0x022a, 0x0001, 0x0034, 0x01de, + 0x0001, 0x022f, 0x0001, 0x0034, 0x01e4, 0x0001, 0x0234, 0x0001, + // Entry 27A80 - 27ABF + 0x0034, 0x01ed, 0x0003, 0x0004, 0x0144, 0x01c4, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0008, + 0x0016, 0x007b, 0x00bc, 0x00f1, 0x0109, 0x0111, 0x0122, 0x0133, + 0x0002, 0x0019, 0x004a, 0x0003, 0x001d, 0x002c, 0x003b, 0x000d, + 0x0034, 0xffff, 0x01fa, 0x0201, 0x0208, 0x020f, 0x0216, 0x021d, + 0x0224, 0x022b, 0x0232, 0x0239, 0x0240, 0x024a, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, 0x0034, 0xffff, + // Entry 27AC0 - 27AFF + 0x01fa, 0x0201, 0x0208, 0x020f, 0x0216, 0x021d, 0x0224, 0x022b, + 0x0232, 0x0239, 0x0240, 0x024a, 0x0003, 0x004e, 0x005d, 0x006c, + 0x000d, 0x0034, 0xffff, 0x01fa, 0x0201, 0x0208, 0x020f, 0x0216, + 0x021d, 0x0224, 0x022b, 0x0232, 0x0239, 0x0240, 0x024a, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, 0x0034, + 0xffff, 0x01fa, 0x0201, 0x0208, 0x020f, 0x0216, 0x021d, 0x0224, + 0x022b, 0x0232, 0x0239, 0x0240, 0x024a, 0x0002, 0x007e, 0x009d, + // Entry 27B00 - 27B3F + 0x0003, 0x0082, 0x008b, 0x0094, 0x0007, 0x0034, 0x0254, 0x025b, + 0x0262, 0x0269, 0x0270, 0x0277, 0x027e, 0x0007, 0x0034, 0x0285, + 0x0289, 0x028d, 0x0291, 0x0295, 0x0299, 0x029d, 0x0007, 0x0034, + 0x02a1, 0x02ab, 0x02b5, 0x02bf, 0x02c9, 0x02d3, 0x02dd, 0x0003, + 0x00a1, 0x00aa, 0x00b3, 0x0007, 0x0034, 0x0254, 0x025b, 0x0262, + 0x0269, 0x0270, 0x0277, 0x027e, 0x0007, 0x0034, 0x0285, 0x0289, + 0x028d, 0x0291, 0x0295, 0x0299, 0x029d, 0x0007, 0x0034, 0x02a1, + 0x02ab, 0x02b5, 0x02bf, 0x02c9, 0x02d3, 0x02dd, 0x0002, 0x00bf, + // Entry 27B40 - 27B7F + 0x00d8, 0x0003, 0x00c3, 0x00ca, 0x00d1, 0x0005, 0x0034, 0xffff, + 0x02e7, 0x02ee, 0x02f5, 0x02fc, 0x0005, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x0005, 0x0034, 0xffff, 0x02e7, 0x02ee, + 0x02f5, 0x02fc, 0x0003, 0x00dc, 0x00e3, 0x00ea, 0x0005, 0x0034, + 0xffff, 0x02e7, 0x02ee, 0x02f5, 0x02fc, 0x0005, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0034, 0xffff, 0x02e7, + 0x02ee, 0x02f5, 0x02fc, 0x0001, 0x00f3, 0x0003, 0x00f7, 0x0000, + 0x0100, 0x0002, 0x00fa, 0x00fd, 0x0001, 0x0034, 0x0303, 0x0001, + // Entry 27B80 - 27BBF + 0x0034, 0x030a, 0x0002, 0x0103, 0x0106, 0x0001, 0x0034, 0x0303, + 0x0001, 0x0034, 0x030a, 0x0001, 0x010b, 0x0001, 0x010d, 0x0002, + 0x0034, 0x0311, 0x031b, 0x0004, 0x011f, 0x0119, 0x0116, 0x011c, + 0x0001, 0x0000, 0x04fc, 0x0001, 0x0000, 0x050b, 0x0001, 0x0000, + 0x0514, 0x0001, 0x0000, 0x051c, 0x0004, 0x0130, 0x012a, 0x0127, + 0x012d, 0x0001, 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, + 0x0002, 0x04fe, 0x0001, 0x0002, 0x0508, 0x0004, 0x0141, 0x013b, + 0x0138, 0x013e, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + // Entry 27BC0 - 27BFF + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0040, 0x0185, + 0x0000, 0x0000, 0x018a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x018f, 0x0000, 0x0000, 0x0194, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0199, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01a6, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x01ab, 0x0000, 0x01b0, 0x0000, 0x0000, + // Entry 27C00 - 27C3F + 0x01b5, 0x0000, 0x0000, 0x01ba, 0x0000, 0x0000, 0x01bf, 0x0001, + 0x0187, 0x0001, 0x0034, 0x0325, 0x0001, 0x018c, 0x0001, 0x0034, + 0x032c, 0x0001, 0x0191, 0x0001, 0x0034, 0x0330, 0x0001, 0x0196, + 0x0001, 0x0034, 0x0254, 0x0002, 0x019c, 0x019f, 0x0001, 0x0034, + 0x028d, 0x0005, 0x0034, 0x0341, 0x034b, 0x0352, 0x0334, 0x035c, + 0x0001, 0x01a8, 0x0001, 0x0034, 0x0262, 0x0001, 0x01ad, 0x0001, + 0x0034, 0x0366, 0x0001, 0x01b2, 0x0001, 0x0034, 0x0374, 0x0001, + 0x01b7, 0x0001, 0x0034, 0x037b, 0x0001, 0x01bc, 0x0001, 0x0034, + // Entry 27C40 - 27C7F + 0x037f, 0x0001, 0x01c1, 0x0001, 0x0034, 0x0383, 0x0004, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0003, 0x0004, 0x06cb, 0x0b34, 0x0012, + 0x0017, 0x0000, 0x0055, 0x0000, 0x0101, 0x0000, 0x01ad, 0x01d8, + 0x03fb, 0x04a1, 0x0544, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x05e7, 0x068a, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, + 0x0033, 0x0000, 0x0044, 0x0003, 0x0029, 0x002e, 0x0024, 0x0001, + 0x0026, 0x0001, 0x0034, 0x0390, 0x0001, 0x002b, 0x0001, 0x0034, + 0x039f, 0x0001, 0x0030, 0x0001, 0x0034, 0x039f, 0x0004, 0x0041, + // Entry 27C80 - 27CBF + 0x003b, 0x0038, 0x003e, 0x0001, 0x0014, 0x0904, 0x0001, 0x0014, + 0x035a, 0x0001, 0x0008, 0x0627, 0x0001, 0x0008, 0x062f, 0x0004, + 0x0052, 0x004c, 0x0049, 0x004f, 0x0001, 0x0016, 0x02d0, 0x0001, + 0x0016, 0x02d0, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, + 0x0008, 0x005e, 0x0000, 0x0000, 0x0000, 0x00c9, 0x00df, 0x0000, + 0x00f0, 0x0002, 0x0061, 0x0095, 0x0003, 0x0065, 0x0075, 0x0085, + 0x000e, 0x0014, 0xffff, 0x0395, 0x039a, 0x34b1, 0x03a6, 0x3608, + 0x34bc, 0x34c3, 0x03c2, 0x34cc, 0x34d4, 0x34da, 0x03e3, 0x03e9, + // Entry 27CC0 - 27CFF + 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x0422, + 0x000e, 0x0014, 0xffff, 0x0395, 0x039a, 0x34b1, 0x03a6, 0x3608, + 0x34bc, 0x34c3, 0x03c2, 0x34cc, 0x34d4, 0x34da, 0x03e3, 0x03e9, + 0x0003, 0x0099, 0x00a9, 0x00b9, 0x000e, 0x0014, 0xffff, 0x0395, + 0x039a, 0x34b1, 0x03a6, 0x3608, 0x34bc, 0x34c3, 0x03c2, 0x34cc, + 0x34d4, 0x34da, 0x03e3, 0x03e9, 0x000e, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + // Entry 27D00 - 27D3F + 0x2215, 0x2218, 0x2426, 0x0422, 0x000e, 0x0014, 0xffff, 0x0395, + 0x039a, 0x34b1, 0x03a6, 0x3608, 0x34bc, 0x34c3, 0x03c2, 0x34cc, + 0x34d4, 0x34da, 0x03e3, 0x03e9, 0x0003, 0x00d3, 0x00d9, 0x00cd, + 0x0001, 0x00cf, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x00d5, + 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x00db, 0x0002, 0x0000, + 0x0425, 0x042a, 0x0004, 0x00ed, 0x00e7, 0x00e4, 0x00ea, 0x0001, + 0x0014, 0x0904, 0x0001, 0x0014, 0x035a, 0x0001, 0x0008, 0x0627, + 0x0001, 0x0008, 0x062f, 0x0004, 0x00fe, 0x00f8, 0x00f5, 0x00fb, + // Entry 27D40 - 27D7F + 0x0001, 0x0016, 0x02d0, 0x0001, 0x0016, 0x02d0, 0x0001, 0x0006, + 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, 0x010a, 0x0000, 0x0000, + 0x0000, 0x0175, 0x018b, 0x0000, 0x019c, 0x0002, 0x010d, 0x0141, + 0x0003, 0x0111, 0x0121, 0x0131, 0x000e, 0x0014, 0xffff, 0x04f6, + 0x3444, 0x360d, 0x3451, 0x3613, 0x0519, 0x0521, 0x345c, 0x3463, + 0x0537, 0x053c, 0x346a, 0x3472, 0x000e, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x2215, 0x2218, 0x2426, 0x0422, 0x000e, 0x0014, 0xffff, 0x04f6, + // Entry 27D80 - 27DBF + 0x3444, 0x360d, 0x3451, 0x3613, 0x0519, 0x0521, 0x345c, 0x3463, + 0x0537, 0x053c, 0x346a, 0x3472, 0x0003, 0x0145, 0x0155, 0x0165, + 0x000e, 0x0014, 0xffff, 0x04f6, 0x3444, 0x360d, 0x3451, 0x3613, + 0x0519, 0x0521, 0x345c, 0x3463, 0x0537, 0x053c, 0x346a, 0x3472, + 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x0422, + 0x000e, 0x0014, 0xffff, 0x04f6, 0x3444, 0x360d, 0x3451, 0x3613, + 0x0519, 0x0521, 0x345c, 0x3463, 0x0537, 0x053c, 0x346a, 0x3472, + // Entry 27DC0 - 27DFF + 0x0003, 0x017f, 0x0185, 0x0179, 0x0001, 0x017b, 0x0002, 0x0034, + 0x03a2, 0x03ac, 0x0001, 0x0181, 0x0002, 0x0034, 0x03a2, 0x03ac, + 0x0001, 0x0187, 0x0002, 0x0034, 0x03a2, 0x03ac, 0x0004, 0x0199, + 0x0193, 0x0190, 0x0196, 0x0001, 0x0014, 0x0904, 0x0001, 0x0014, + 0x035a, 0x0001, 0x0008, 0x0627, 0x0001, 0x0008, 0x062f, 0x0004, + 0x01aa, 0x01a4, 0x01a1, 0x01a7, 0x0001, 0x0016, 0x02d0, 0x0001, + 0x0016, 0x02d0, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01b6, 0x0000, + // Entry 27E00 - 27E3F + 0x01c7, 0x0004, 0x01c4, 0x01be, 0x01bb, 0x01c1, 0x0001, 0x0014, + 0x0904, 0x0001, 0x0014, 0x035a, 0x0001, 0x0008, 0x0627, 0x0001, + 0x0008, 0x062f, 0x0004, 0x01d5, 0x01cf, 0x01cc, 0x01d2, 0x0001, + 0x0016, 0x02d0, 0x0001, 0x0016, 0x02d0, 0x0001, 0x0006, 0x022e, + 0x0001, 0x0006, 0x022e, 0x0008, 0x01e1, 0x0246, 0x029d, 0x02d2, + 0x03a3, 0x03c8, 0x03d9, 0x03ea, 0x0002, 0x01e4, 0x0215, 0x0003, + 0x01e8, 0x01f7, 0x0206, 0x000d, 0x0016, 0xffff, 0x00a3, 0x26b4, + 0x26f4, 0x00b2, 0x26f9, 0x26dc, 0x26e2, 0x26fe, 0x25f7, 0x00cf, + // Entry 27E40 - 27E7F + 0x2705, 0x2601, 0x000d, 0x0000, 0xffff, 0x257b, 0x2364, 0x2ae3, + 0x241f, 0x2ae3, 0x257b, 0x257b, 0x276d, 0x257d, 0x236a, 0x236c, + 0x236e, 0x000d, 0x0034, 0xffff, 0x03b6, 0x03be, 0x03c7, 0x03cc, + 0x03d3, 0x03d8, 0x03df, 0x03e6, 0x03ee, 0x03f8, 0x0401, 0x040b, + 0x0003, 0x0219, 0x0228, 0x0237, 0x000d, 0x0016, 0xffff, 0x00a3, + 0x26b4, 0x26f4, 0x00b2, 0x270b, 0x26dc, 0x26e2, 0x26fe, 0x25f7, + 0x00cf, 0x2705, 0x2601, 0x000d, 0x0000, 0xffff, 0x257b, 0x2364, + 0x2ae3, 0x241f, 0x2ae3, 0x257b, 0x257b, 0x276d, 0x257d, 0x236a, + // Entry 27E80 - 27EBF + 0x236c, 0x236e, 0x000d, 0x0034, 0xffff, 0x03b6, 0x03be, 0x03c7, + 0x03cc, 0x0414, 0x03d8, 0x03df, 0x03e6, 0x03ee, 0x03f8, 0x0401, + 0x040b, 0x0002, 0x0249, 0x0273, 0x0005, 0x024f, 0x0258, 0x026a, + 0x0000, 0x0261, 0x0007, 0x0024, 0x0013, 0x0018, 0x26f4, 0x26fa, + 0x2700, 0x2705, 0x270b, 0x0007, 0x0000, 0x257d, 0x2ae3, 0x2ae5, + 0x2ae3, 0x2364, 0x2364, 0x2296, 0x0007, 0x0024, 0x003a, 0x003e, + 0x2710, 0x0048, 0x2715, 0x2719, 0x271e, 0x0007, 0x0024, 0x0059, + 0x2722, 0x272d, 0x273b, 0x2749, 0x2755, 0x2761, 0x0005, 0x0279, + // Entry 27EC0 - 27EFF + 0x0282, 0x0294, 0x0000, 0x028b, 0x0007, 0x0024, 0x0013, 0x0018, + 0x26f4, 0x26fa, 0x2700, 0x2705, 0x270b, 0x0007, 0x0000, 0x257d, + 0x2ae3, 0x2ae5, 0x2ae3, 0x2364, 0x2364, 0x2296, 0x0007, 0x0024, + 0x003a, 0x003e, 0x2710, 0x0048, 0x2715, 0x2719, 0x271e, 0x0007, + 0x0024, 0x0059, 0x2722, 0x272d, 0x273b, 0x2749, 0x2755, 0x2761, + 0x0002, 0x02a0, 0x02b9, 0x0003, 0x02a4, 0x02ab, 0x02b2, 0x0005, + 0x0034, 0xffff, 0x0419, 0x041c, 0x041f, 0x0422, 0x0005, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0034, 0xffff, + // Entry 27F00 - 27F3F + 0x0425, 0x0435, 0x0445, 0x0455, 0x0003, 0x02bd, 0x02c4, 0x02cb, + 0x0005, 0x0034, 0xffff, 0x0419, 0x041c, 0x041f, 0x0422, 0x0005, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0034, + 0xffff, 0x0425, 0x0435, 0x0445, 0x0455, 0x0002, 0x02d5, 0x033c, + 0x0003, 0x02d9, 0x02fa, 0x031b, 0x0008, 0x02e5, 0x02eb, 0x02e2, + 0x02ee, 0x02f1, 0x02f4, 0x02f7, 0x02e8, 0x0001, 0x0034, 0x0465, + 0x0001, 0x0034, 0x0470, 0x0001, 0x0034, 0x0475, 0x0001, 0x0034, + 0x047d, 0x0001, 0x0034, 0x0482, 0x0001, 0x0034, 0x048d, 0x0001, + // Entry 27F40 - 27F7F + 0x0034, 0x0498, 0x0001, 0x0034, 0x04a4, 0x0008, 0x0306, 0x030c, + 0x0303, 0x030f, 0x0312, 0x0315, 0x0318, 0x0309, 0x0001, 0x0034, + 0x04af, 0x0001, 0x0029, 0x0069, 0x0001, 0x0006, 0x1e0b, 0x0001, + 0x0029, 0x0263, 0x0001, 0x0034, 0x04b3, 0x0001, 0x0034, 0x04b8, + 0x0001, 0x000d, 0x0444, 0x0001, 0x0029, 0x0078, 0x0008, 0x0327, + 0x032d, 0x0324, 0x0330, 0x0333, 0x0336, 0x0339, 0x032a, 0x0001, + 0x0034, 0x0465, 0x0001, 0x0034, 0x0470, 0x0001, 0x0034, 0x0475, + 0x0001, 0x0034, 0x047d, 0x0001, 0x0034, 0x0482, 0x0001, 0x0034, + // Entry 27F80 - 27FBF + 0x048d, 0x0001, 0x0034, 0x0498, 0x0001, 0x0034, 0x04a4, 0x0003, + 0x0340, 0x0361, 0x0382, 0x0008, 0x034c, 0x0352, 0x0349, 0x0355, + 0x0358, 0x035b, 0x035e, 0x034f, 0x0001, 0x0034, 0x0465, 0x0001, + 0x0034, 0x0470, 0x0001, 0x0034, 0x0475, 0x0001, 0x0034, 0x047d, + 0x0001, 0x0034, 0x04bc, 0x0001, 0x0034, 0x048d, 0x0001, 0x0034, + 0x04c4, 0x0001, 0x0034, 0x04cb, 0x0008, 0x036d, 0x0373, 0x036a, + 0x0376, 0x0379, 0x037c, 0x037f, 0x0370, 0x0001, 0x0034, 0x04af, + 0x0001, 0x0034, 0x0470, 0x0001, 0x0034, 0x04d1, 0x0001, 0x0034, + // Entry 27FC0 - 27FFF + 0x047d, 0x0001, 0x0034, 0x04b3, 0x0001, 0x0034, 0x04b8, 0x0001, + 0x000d, 0x0444, 0x0001, 0x0029, 0x0078, 0x0008, 0x038e, 0x0394, + 0x038b, 0x0397, 0x039a, 0x039d, 0x03a0, 0x0391, 0x0001, 0x0034, + 0x0465, 0x0001, 0x0034, 0x0470, 0x0001, 0x0034, 0x0475, 0x0001, + 0x0034, 0x047d, 0x0001, 0x0034, 0x04bc, 0x0001, 0x0034, 0x04d5, + 0x0001, 0x0034, 0x04c4, 0x0001, 0x0034, 0x04cb, 0x0003, 0x03b2, + 0x03bd, 0x03a7, 0x0002, 0x03aa, 0x03ae, 0x0002, 0x0034, 0x04e3, + 0x0507, 0x0002, 0x0034, 0x04ef, 0x0513, 0x0002, 0x03b5, 0x03b9, + // Entry 28000 - 2803F + 0x0002, 0x0016, 0x022c, 0x0250, 0x0002, 0x0034, 0x0525, 0x052c, + 0x0002, 0x03c0, 0x03c4, 0x0002, 0x0034, 0x0531, 0x0536, 0x0002, + 0x0016, 0x026f, 0x0276, 0x0004, 0x03d6, 0x03d0, 0x03cd, 0x03d3, + 0x0001, 0x0017, 0x0528, 0x0001, 0x0014, 0x0792, 0x0001, 0x0016, + 0x029f, 0x0001, 0x0018, 0x042e, 0x0004, 0x03e7, 0x03e1, 0x03de, + 0x03e4, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, + 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, 0x03f8, 0x03f2, + 0x03ef, 0x03f5, 0x0001, 0x0016, 0x02d0, 0x0001, 0x0016, 0x02d0, + // Entry 28040 - 2807F + 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, 0x0404, + 0x0000, 0x0000, 0x0000, 0x046f, 0x0482, 0x0000, 0x0493, 0x0002, + 0x0407, 0x043b, 0x0003, 0x040b, 0x041b, 0x042b, 0x000e, 0x0016, + 0x2723, 0x02de, 0x02e5, 0x2710, 0x02f4, 0x02fa, 0x2717, 0x271e, + 0x0315, 0x272b, 0x2730, 0x0326, 0x2736, 0x252b, 0x000e, 0x0000, + 0x003f, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x0422, 0x000e, 0x0016, + 0x2723, 0x02de, 0x02e5, 0x2710, 0x02f4, 0x02fa, 0x2717, 0x271e, + // Entry 28080 - 280BF + 0x0315, 0x272b, 0x2730, 0x0326, 0x2736, 0x252b, 0x0003, 0x043f, + 0x044f, 0x045f, 0x000e, 0x0016, 0x2723, 0x02de, 0x02e5, 0x2710, + 0x02f4, 0x02fa, 0x2717, 0x271e, 0x0315, 0x272b, 0x2730, 0x0326, + 0x2736, 0x252b, 0x000e, 0x0000, 0x003f, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, + 0x2426, 0x0422, 0x000e, 0x0016, 0x2723, 0x02de, 0x02e5, 0x2710, + 0x02f4, 0x02fa, 0x2717, 0x271e, 0x2739, 0x272b, 0x2730, 0x0326, + 0x2736, 0x252b, 0x0003, 0x0478, 0x047d, 0x0473, 0x0001, 0x0475, + // Entry 280C0 - 280FF + 0x0001, 0x0022, 0x0b8d, 0x0001, 0x047a, 0x0001, 0x0000, 0x04ef, + 0x0001, 0x047f, 0x0001, 0x0000, 0x04ef, 0x0004, 0x0490, 0x048a, + 0x0487, 0x048d, 0x0001, 0x0014, 0x0904, 0x0001, 0x0014, 0x035a, + 0x0001, 0x0008, 0x0627, 0x0001, 0x0008, 0x062f, 0x0004, 0x0000, + 0x049b, 0x0498, 0x049e, 0x0001, 0x0016, 0x02d0, 0x0001, 0x0016, + 0x02d0, 0x0001, 0x0006, 0x022e, 0x0008, 0x04aa, 0x0000, 0x0000, + 0x0000, 0x050f, 0x0522, 0x0000, 0x0533, 0x0002, 0x04ad, 0x04de, + 0x0003, 0x04b1, 0x04c0, 0x04cf, 0x000d, 0x0016, 0xffff, 0x0334, + // Entry 28100 - 2813F + 0x033c, 0x0345, 0x034e, 0x0355, 0x035d, 0x0364, 0x036b, 0x0373, + 0x037e, 0x0384, 0x038a, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, + 0x2218, 0x2426, 0x000d, 0x0016, 0xffff, 0x0334, 0x033c, 0x0345, + 0x034e, 0x0355, 0x035d, 0x0364, 0x036b, 0x0373, 0x037e, 0x0384, + 0x038a, 0x0003, 0x04e2, 0x04f1, 0x0500, 0x000d, 0x0016, 0xffff, + 0x0334, 0x033c, 0x0345, 0x034e, 0x0355, 0x035d, 0x0364, 0x036b, + 0x0373, 0x037e, 0x0384, 0x038a, 0x000d, 0x0000, 0xffff, 0x0033, + // Entry 28140 - 2817F + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x2215, 0x2218, 0x2426, 0x000d, 0x0016, 0xffff, 0x0334, 0x033c, + 0x0345, 0x034e, 0x0355, 0x035d, 0x0364, 0x036b, 0x0373, 0x037e, + 0x0384, 0x038a, 0x0003, 0x0518, 0x051d, 0x0513, 0x0001, 0x0515, + 0x0001, 0x0000, 0x0601, 0x0001, 0x051a, 0x0001, 0x0000, 0x0601, + 0x0001, 0x051f, 0x0001, 0x0000, 0x0601, 0x0004, 0x0530, 0x052a, + 0x0527, 0x052d, 0x0001, 0x0014, 0x0904, 0x0001, 0x0014, 0x035a, + 0x0001, 0x0008, 0x0627, 0x0001, 0x0008, 0x062f, 0x0004, 0x0541, + // Entry 28180 - 281BF + 0x053b, 0x0538, 0x053e, 0x0001, 0x0016, 0x02d0, 0x0001, 0x0016, + 0x02d0, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, + 0x054d, 0x0000, 0x0000, 0x0000, 0x05b2, 0x05c5, 0x0000, 0x05d6, + 0x0002, 0x0550, 0x0581, 0x0003, 0x0554, 0x0563, 0x0572, 0x000d, + 0x000d, 0xffff, 0x022d, 0x33e8, 0x32ee, 0x32f5, 0x32fd, 0x3304, + 0x33ed, 0x3311, 0x33f2, 0x3316, 0x33f7, 0x3401, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, 0x0016, 0xffff, + // Entry 281C0 - 281FF + 0x0393, 0x273f, 0x03a2, 0x03ab, 0x03b5, 0x03be, 0x2745, 0x03ce, + 0x274b, 0x03df, 0x03e7, 0x03f6, 0x0003, 0x0585, 0x0594, 0x05a3, + 0x000d, 0x000d, 0xffff, 0x022d, 0x33e8, 0x32ee, 0x32f5, 0x32fd, + 0x3304, 0x33ed, 0x3311, 0x33f2, 0x3316, 0x33f7, 0x3401, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, 0x0016, + 0xffff, 0x0393, 0x273f, 0x03a2, 0x03ab, 0x03b5, 0x03be, 0x2745, + 0x03ce, 0x274b, 0x03df, 0x03e7, 0x03f6, 0x0003, 0x05bb, 0x05c0, + // Entry 28200 - 2823F + 0x05b6, 0x0001, 0x05b8, 0x0001, 0x0034, 0x053b, 0x0001, 0x05bd, + 0x0001, 0x0034, 0x0547, 0x0001, 0x05c2, 0x0001, 0x0034, 0x0547, + 0x0004, 0x05d3, 0x05cd, 0x05ca, 0x05d0, 0x0001, 0x0014, 0x0904, + 0x0001, 0x0014, 0x035a, 0x0001, 0x0008, 0x0627, 0x0001, 0x0008, + 0x062f, 0x0004, 0x05e4, 0x05de, 0x05db, 0x05e1, 0x0001, 0x0016, + 0x02d0, 0x0001, 0x0016, 0x02d0, 0x0001, 0x0006, 0x022e, 0x0001, + 0x0006, 0x022e, 0x0008, 0x05f0, 0x0000, 0x0000, 0x0000, 0x0655, + 0x0668, 0x0000, 0x0679, 0x0002, 0x05f3, 0x0624, 0x0003, 0x05f7, + // Entry 28240 - 2827F + 0x0606, 0x0615, 0x000d, 0x0014, 0xffff, 0x0916, 0x347a, 0x3486, + 0x35ee, 0x3492, 0x3499, 0x35f2, 0x34a3, 0x34a8, 0x3604, 0x0963, + 0x096a, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, + 0x000d, 0x0014, 0xffff, 0x0916, 0x347a, 0x3486, 0x35ee, 0x3492, + 0x3499, 0x35f2, 0x34a3, 0x34a8, 0x3604, 0x0963, 0x096a, 0x0003, + 0x0628, 0x0637, 0x0646, 0x000d, 0x0014, 0xffff, 0x0916, 0x347a, + 0x3486, 0x35ee, 0x3492, 0x3499, 0x35f2, 0x34a3, 0x34a8, 0x3604, + // Entry 28280 - 282BF + 0x0963, 0x096a, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, + 0x2426, 0x000d, 0x0014, 0xffff, 0x0916, 0x347a, 0x3486, 0x35ee, + 0x3492, 0x3499, 0x35f2, 0x34a3, 0x34a8, 0x3604, 0x0963, 0x096a, + 0x0003, 0x065e, 0x0663, 0x0659, 0x0001, 0x065b, 0x0001, 0x0000, + 0x1a1d, 0x0001, 0x0660, 0x0001, 0x0000, 0x1a1d, 0x0001, 0x0665, + 0x0001, 0x0000, 0x1a1d, 0x0004, 0x0676, 0x0670, 0x066d, 0x0673, + 0x0001, 0x0014, 0x0904, 0x0001, 0x0014, 0x035a, 0x0001, 0x0008, + // Entry 282C0 - 282FF + 0x0627, 0x0001, 0x0008, 0x062f, 0x0004, 0x0687, 0x0681, 0x067e, + 0x0684, 0x0001, 0x0016, 0x02d0, 0x0001, 0x0016, 0x02d0, 0x0001, + 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0693, 0x06a9, 0x0000, 0x06ba, 0x0003, 0x069d, + 0x06a3, 0x0697, 0x0001, 0x0699, 0x0002, 0x0034, 0x054a, 0x0561, + 0x0001, 0x069f, 0x0002, 0x0034, 0x0568, 0x0561, 0x0001, 0x06a5, + 0x0002, 0x0034, 0x057c, 0x0561, 0x0004, 0x06b7, 0x06b1, 0x06ae, + 0x06b4, 0x0001, 0x0014, 0x0904, 0x0001, 0x0014, 0x035a, 0x0001, + // Entry 28300 - 2833F + 0x0008, 0x0627, 0x0001, 0x0008, 0x062f, 0x0004, 0x06c8, 0x06c2, + 0x06bf, 0x06c5, 0x0001, 0x0016, 0x02d0, 0x0001, 0x0016, 0x02d0, + 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0042, 0x070e, + 0x0713, 0x0718, 0x071d, 0x0734, 0x074b, 0x0762, 0x0779, 0x0790, + 0x07a7, 0x07be, 0x07d5, 0x07ec, 0x0807, 0x0822, 0x083d, 0x0842, + 0x0847, 0x084c, 0x0865, 0x087e, 0x0897, 0x089c, 0x08a1, 0x08a6, + 0x08ab, 0x08b0, 0x08b5, 0x08ba, 0x08bf, 0x08c4, 0x08d8, 0x08ec, + 0x0900, 0x0914, 0x0928, 0x093c, 0x0950, 0x0964, 0x0978, 0x098c, + // Entry 28340 - 2837F + 0x09a0, 0x09b4, 0x09c8, 0x09dc, 0x09f0, 0x0a04, 0x0a18, 0x0a2c, + 0x0a40, 0x0a54, 0x0a68, 0x0a6d, 0x0a72, 0x0a77, 0x0a8d, 0x0a9f, + 0x0ab1, 0x0ac7, 0x0ad9, 0x0aeb, 0x0b01, 0x0b13, 0x0b25, 0x0b2a, + 0x0b2f, 0x0001, 0x0710, 0x0001, 0x0034, 0x0588, 0x0001, 0x0715, + 0x0001, 0x0034, 0x0588, 0x0001, 0x071a, 0x0001, 0x0034, 0x0588, + 0x0003, 0x0721, 0x0724, 0x0729, 0x0001, 0x0024, 0x01b7, 0x0003, + 0x0034, 0x0591, 0x05a3, 0x05b2, 0x0002, 0x072c, 0x0730, 0x0002, + 0x0034, 0x05c1, 0x05c1, 0x0002, 0x0034, 0x05de, 0x05cf, 0x0003, + // Entry 28380 - 283BF + 0x0738, 0x073b, 0x0740, 0x0001, 0x0024, 0x01b7, 0x0003, 0x0034, + 0x0591, 0x05a3, 0x05b2, 0x0002, 0x0743, 0x0747, 0x0002, 0x0034, + 0x05c1, 0x05c1, 0x0002, 0x0034, 0x05de, 0x05cf, 0x0003, 0x074f, + 0x0752, 0x0757, 0x0001, 0x0024, 0x01b7, 0x0003, 0x0034, 0x0591, + 0x05a3, 0x05b2, 0x0002, 0x075a, 0x075e, 0x0002, 0x0034, 0x05c1, + 0x05c1, 0x0002, 0x0034, 0x05de, 0x05de, 0x0003, 0x0766, 0x0769, + 0x076e, 0x0001, 0x0034, 0x05ee, 0x0003, 0x0034, 0x05ff, 0x061a, + 0x0632, 0x0002, 0x0771, 0x0775, 0x0002, 0x0034, 0x0663, 0x064a, + // Entry 283C0 - 283FF + 0x0002, 0x0034, 0x0697, 0x067d, 0x0003, 0x077d, 0x0780, 0x0785, + 0x0001, 0x0034, 0x06b2, 0x0003, 0x0034, 0x06bf, 0x06d1, 0x06e0, + 0x0002, 0x0788, 0x078c, 0x0002, 0x0034, 0x06ef, 0x06ef, 0x0002, + 0x0034, 0x0701, 0x0701, 0x0003, 0x0794, 0x0797, 0x079c, 0x0001, + 0x0024, 0x02ae, 0x0003, 0x0034, 0x06bf, 0x06d1, 0x06e0, 0x0002, + 0x079f, 0x07a3, 0x0002, 0x0034, 0x06ef, 0x06ef, 0x0002, 0x0034, + 0x0701, 0x0701, 0x0003, 0x07ab, 0x07ae, 0x07b3, 0x0001, 0x0034, + 0x0713, 0x0003, 0x0034, 0x071d, 0x0733, 0x0747, 0x0002, 0x07b6, + // Entry 28400 - 2843F + 0x07ba, 0x0002, 0x0034, 0x076c, 0x075a, 0x0002, 0x0034, 0x0792, + 0x077f, 0x0003, 0x07c2, 0x07c5, 0x07ca, 0x0001, 0x0024, 0x0018, + 0x0003, 0x0034, 0x07a6, 0x07b9, 0x07ca, 0x0002, 0x07cd, 0x07d1, + 0x0002, 0x0034, 0x07da, 0x07da, 0x0002, 0x0034, 0x07ea, 0x07ea, + 0x0003, 0x07d9, 0x07dc, 0x07e1, 0x0001, 0x0024, 0x0018, 0x0003, + 0x0034, 0x07a6, 0x07b9, 0x07ca, 0x0002, 0x07e4, 0x07e8, 0x0002, + 0x0034, 0x07da, 0x07da, 0x0002, 0x0034, 0x07ea, 0x07ea, 0x0004, + 0x07f1, 0x07f4, 0x07f9, 0x0804, 0x0001, 0x0024, 0x0382, 0x0003, + // Entry 28440 - 2847F + 0x0034, 0x07fa, 0x080c, 0x081d, 0x0002, 0x07fc, 0x0800, 0x0002, + 0x0034, 0x083b, 0x082c, 0x0002, 0x0034, 0x085a, 0x084b, 0x0001, + 0x0034, 0x086a, 0x0004, 0x080c, 0x080f, 0x0814, 0x081f, 0x0001, + 0x0024, 0x0382, 0x0003, 0x0034, 0x07fa, 0x080c, 0x081d, 0x0002, + 0x0817, 0x081b, 0x0002, 0x0034, 0x083b, 0x083b, 0x0002, 0x0034, + 0x085a, 0x084b, 0x0001, 0x0034, 0x086a, 0x0004, 0x0827, 0x082a, + 0x082f, 0x083a, 0x0001, 0x0029, 0x0158, 0x0003, 0x0034, 0x07fa, + 0x080c, 0x081d, 0x0002, 0x0832, 0x0836, 0x0002, 0x0034, 0x087d, + // Entry 28480 - 284BF + 0x0873, 0x0002, 0x0034, 0x0892, 0x0888, 0x0001, 0x0034, 0x086a, + 0x0001, 0x083f, 0x0001, 0x0034, 0x089d, 0x0001, 0x0844, 0x0001, + 0x0034, 0x089d, 0x0001, 0x0849, 0x0001, 0x0034, 0x089d, 0x0003, + 0x0850, 0x0853, 0x085a, 0x0001, 0x0024, 0x0450, 0x0005, 0x0034, + 0x08ba, 0x08c2, 0x08c9, 0x08ae, 0x08d3, 0x0002, 0x085d, 0x0861, + 0x0002, 0x0034, 0x08f0, 0x08e2, 0x0002, 0x0034, 0x090e, 0x08ff, + 0x0003, 0x0869, 0x086c, 0x0873, 0x0001, 0x0024, 0x0450, 0x0005, + 0x0034, 0x08ba, 0x08c2, 0x08c9, 0x08ae, 0x08d3, 0x0002, 0x0876, + // Entry 284C0 - 284FF + 0x087a, 0x0002, 0x0034, 0x08f0, 0x08e2, 0x0002, 0x0034, 0x090e, + 0x08ff, 0x0003, 0x0882, 0x0885, 0x088c, 0x0001, 0x0024, 0x0450, + 0x0005, 0x0034, 0x08ba, 0x08c2, 0x08c9, 0x08ae, 0x08d3, 0x0002, + 0x088f, 0x0893, 0x0002, 0x0034, 0x0928, 0x091f, 0x0002, 0x0034, + 0x093c, 0x0932, 0x0001, 0x0899, 0x0001, 0x0034, 0x0948, 0x0001, + 0x089e, 0x0001, 0x0034, 0x0948, 0x0001, 0x08a3, 0x0001, 0x0034, + 0x0948, 0x0001, 0x08a8, 0x0001, 0x0024, 0x051c, 0x0001, 0x08ad, + 0x0001, 0x0034, 0x0956, 0x0001, 0x08b2, 0x0001, 0x0034, 0x0956, + // Entry 28500 - 2853F + 0x0001, 0x08b7, 0x0001, 0x0034, 0x095d, 0x0001, 0x08bc, 0x0001, + 0x0034, 0x0973, 0x0001, 0x08c1, 0x0001, 0x0034, 0x0973, 0x0003, + 0x0000, 0x08c8, 0x08cd, 0x0003, 0x0034, 0x0983, 0x0996, 0x09a8, + 0x0002, 0x08d0, 0x08d4, 0x0002, 0x0034, 0x09cb, 0x09b8, 0x0002, + 0x0034, 0x09f3, 0x09df, 0x0003, 0x0000, 0x08dc, 0x08e1, 0x0003, + 0x0034, 0x0a09, 0x0a18, 0x0a24, 0x0002, 0x08e4, 0x08e8, 0x0002, + 0x0034, 0x0a30, 0x0a30, 0x0002, 0x0034, 0x0a3f, 0x0a3f, 0x0003, + 0x0000, 0x08f0, 0x08f5, 0x0003, 0x0034, 0x0a4e, 0x0a18, 0x0a5d, + // Entry 28540 - 2857F + 0x0002, 0x08f8, 0x08fc, 0x0002, 0x0034, 0x0a30, 0x0a30, 0x0002, + 0x0034, 0x0a3f, 0x0a3f, 0x0003, 0x0000, 0x0904, 0x0909, 0x0003, + 0x0034, 0x0a66, 0x0a79, 0x0a8b, 0x0002, 0x090c, 0x0910, 0x0002, + 0x0034, 0x0aae, 0x0a9b, 0x0002, 0x0034, 0x0ad6, 0x0ac2, 0x0003, + 0x0000, 0x0918, 0x091d, 0x0003, 0x0034, 0x0aec, 0x0afc, 0x0b0b, + 0x0002, 0x0920, 0x0924, 0x0002, 0x0034, 0x07da, 0x07da, 0x0002, + 0x0034, 0x07ea, 0x07ea, 0x0003, 0x0000, 0x092c, 0x0931, 0x0003, + 0x0034, 0x0b18, 0x0b28, 0x0b35, 0x0002, 0x0934, 0x0938, 0x0002, + // Entry 28580 - 285BF + 0x0034, 0x07da, 0x07da, 0x0002, 0x0034, 0x07ea, 0x07ea, 0x0003, + 0x0000, 0x0940, 0x0945, 0x0003, 0x0034, 0x0b3f, 0x0b55, 0x0b6d, + 0x0002, 0x0948, 0x094c, 0x0002, 0x0034, 0x0b96, 0x0b80, 0x0002, + 0x0034, 0x0bc4, 0x0bad, 0x0003, 0x0000, 0x0954, 0x0959, 0x0003, + 0x0034, 0x0bdd, 0x0bed, 0x0bfa, 0x0002, 0x095c, 0x0960, 0x0002, + 0x0034, 0x0c0d, 0x0c0d, 0x0002, 0x0034, 0x0c1d, 0x0c1d, 0x0003, + 0x0000, 0x0968, 0x096d, 0x0003, 0x0034, 0x0bdd, 0x0bed, 0x0c2d, + 0x0002, 0x0970, 0x0974, 0x0002, 0x0034, 0x0c0d, 0x0c0d, 0x0002, + // Entry 285C0 - 285FF + 0x0034, 0x0c1d, 0x0c1d, 0x0003, 0x0000, 0x097c, 0x0981, 0x0003, + 0x0034, 0x0c37, 0x0c4d, 0x0c65, 0x0002, 0x0984, 0x0988, 0x0002, + 0x0034, 0x0c8e, 0x0c78, 0x0002, 0x0034, 0x0cbc, 0x0ca5, 0x0003, + 0x0000, 0x0990, 0x0995, 0x0003, 0x0034, 0x0cd5, 0x0ce5, 0x0cf2, + 0x0002, 0x0998, 0x099c, 0x0002, 0x0034, 0x0d05, 0x0d05, 0x0002, + 0x0034, 0x0d15, 0x0d15, 0x0003, 0x0000, 0x09a4, 0x09a9, 0x0003, + 0x0034, 0x0cd5, 0x0ce5, 0x0d25, 0x0002, 0x09ac, 0x09b0, 0x0002, + 0x0034, 0x0d05, 0x0d05, 0x0002, 0x0034, 0x0d15, 0x0d15, 0x0003, + // Entry 28600 - 2863F + 0x0000, 0x09b8, 0x09bd, 0x0003, 0x0034, 0x0d2f, 0x0d43, 0x0d59, + 0x0002, 0x09c0, 0x09c4, 0x0002, 0x0034, 0x0d7e, 0x0d6a, 0x0002, + 0x0034, 0x0da8, 0x0d93, 0x0003, 0x0000, 0x09cc, 0x09d1, 0x0003, + 0x0034, 0x0dbf, 0x0dce, 0x0dda, 0x0002, 0x09d4, 0x09d8, 0x0002, + 0x0034, 0x0dec, 0x0dec, 0x0002, 0x0034, 0x0dfb, 0x0dfb, 0x0003, + 0x0000, 0x09e0, 0x09e5, 0x0003, 0x0034, 0x0dbf, 0x0dce, 0x0e0a, + 0x0002, 0x09e8, 0x09ec, 0x0002, 0x0034, 0x0dec, 0x0dec, 0x0002, + 0x0034, 0x0dfb, 0x0dfb, 0x0003, 0x0000, 0x09f4, 0x09f9, 0x0003, + // Entry 28640 - 2867F + 0x0034, 0x0e13, 0x0e27, 0x0e3d, 0x0002, 0x09fc, 0x0a00, 0x0002, + 0x0034, 0x0e62, 0x0e4e, 0x0002, 0x0034, 0x0e8c, 0x0e77, 0x0003, + 0x0000, 0x0a08, 0x0a0d, 0x0003, 0x0034, 0x0ea3, 0x0eb3, 0x0ebc, + 0x0002, 0x0a10, 0x0a14, 0x0002, 0x0034, 0x0ec9, 0x0ec9, 0x0002, + 0x0034, 0x0ed9, 0x0ed9, 0x0003, 0x0000, 0x0a1c, 0x0a21, 0x0003, + 0x0034, 0x0ea3, 0x0eb3, 0x0ebc, 0x0002, 0x0a24, 0x0a28, 0x0002, + 0x0034, 0x0ec9, 0x0ec9, 0x0002, 0x0034, 0x0ed9, 0x0ed9, 0x0003, + 0x0000, 0x0a30, 0x0a35, 0x0003, 0x0034, 0x0ee9, 0x0efd, 0x0f13, + // Entry 28680 - 286BF + 0x0002, 0x0a38, 0x0a3c, 0x0002, 0x0034, 0x0f38, 0x0f24, 0x0002, + 0x0034, 0x0f62, 0x0f4d, 0x0003, 0x0000, 0x0a44, 0x0a49, 0x0003, + 0x0034, 0x0f79, 0x0f88, 0x0f90, 0x0002, 0x0a4c, 0x0a50, 0x0002, + 0x0034, 0x0f9c, 0x0f9c, 0x0002, 0x0034, 0x0fab, 0x0fab, 0x0003, + 0x0000, 0x0a58, 0x0a5d, 0x0003, 0x0034, 0x0f79, 0x0f88, 0x0f90, + 0x0002, 0x0a60, 0x0a64, 0x0002, 0x0034, 0x0f9c, 0x0f9c, 0x0002, + 0x0034, 0x0fab, 0x0fab, 0x0001, 0x0a6a, 0x0001, 0x0034, 0x0fba, + 0x0001, 0x0a6f, 0x0001, 0x0034, 0x0fba, 0x0001, 0x0a74, 0x0001, + // Entry 286C0 - 286FF + 0x0034, 0x0fba, 0x0003, 0x0a7b, 0x0a7e, 0x0a82, 0x0001, 0x0034, + 0x0fc4, 0x0002, 0x0034, 0xffff, 0x0fd0, 0x0002, 0x0a85, 0x0a89, + 0x0002, 0x0034, 0x0ff6, 0x0fe0, 0x0002, 0x0034, 0x1024, 0x100e, + 0x0003, 0x0a91, 0x0000, 0x0a94, 0x0001, 0x0034, 0x103c, 0x0002, + 0x0a97, 0x0a9b, 0x0002, 0x0034, 0x1042, 0x1042, 0x0002, 0x0034, + 0x1052, 0x1052, 0x0003, 0x0aa3, 0x0000, 0x0aa6, 0x0001, 0x0034, + 0x103c, 0x0002, 0x0aa9, 0x0aad, 0x0002, 0x0034, 0x1062, 0x1062, + 0x0002, 0x0034, 0x106d, 0x106d, 0x0003, 0x0ab5, 0x0ab8, 0x0abc, + // Entry 28700 - 2873F + 0x0001, 0x0034, 0x1078, 0x0002, 0x0034, 0xffff, 0x1081, 0x0002, + 0x0abf, 0x0ac3, 0x0002, 0x0034, 0x10a9, 0x1096, 0x0002, 0x0034, + 0x10d0, 0x10bd, 0x0003, 0x0acb, 0x0000, 0x0ace, 0x0001, 0x0034, + 0x10e4, 0x0002, 0x0ad1, 0x0ad5, 0x0002, 0x0034, 0x10ea, 0x10ea, + 0x0002, 0x0034, 0x10fa, 0x10fa, 0x0003, 0x0add, 0x0000, 0x0ae0, + 0x0001, 0x0034, 0x10e4, 0x0002, 0x0ae3, 0x0ae7, 0x0002, 0x0034, + 0x110a, 0x110a, 0x0002, 0x0034, 0x1115, 0x1115, 0x0003, 0x0aef, + 0x0af2, 0x0af6, 0x0001, 0x0034, 0x1120, 0x0002, 0x0034, 0xffff, + // Entry 28740 - 2877F + 0x1129, 0x0002, 0x0af9, 0x0afd, 0x0002, 0x0034, 0x1142, 0x112f, + 0x0002, 0x0034, 0x1169, 0x1156, 0x0003, 0x0b05, 0x0000, 0x0b08, + 0x0001, 0x0001, 0x083e, 0x0002, 0x0b0b, 0x0b0f, 0x0002, 0x0034, + 0x117d, 0x117d, 0x0002, 0x0034, 0x118c, 0x118c, 0x0003, 0x0b17, + 0x0000, 0x0b1a, 0x0001, 0x0001, 0x083e, 0x0002, 0x0b1d, 0x0b21, + 0x0002, 0x0034, 0x119b, 0x119b, 0x0002, 0x0034, 0x11a5, 0x11a5, + 0x0001, 0x0b27, 0x0001, 0x0034, 0x11af, 0x0001, 0x0b2c, 0x0001, + 0x0034, 0x11ba, 0x0001, 0x0b31, 0x0001, 0x0034, 0x11ba, 0x0004, + // Entry 28780 - 287BF + 0x0b39, 0x0b3e, 0x0b43, 0x0b52, 0x0003, 0x0000, 0x1dc7, 0x2ae8, + 0x2aef, 0x0003, 0x0000, 0x1de0, 0x2af3, 0x2b04, 0x0002, 0x0000, + 0x0b46, 0x0003, 0x0000, 0x0b4d, 0x0b4a, 0x0001, 0x0034, 0x11c2, + 0x0003, 0x0034, 0xffff, 0x11e2, 0x11fa, 0x0002, 0x0000, 0x0b55, + 0x0003, 0x0bef, 0x0c85, 0x0b59, 0x0094, 0x0034, 0x1211, 0x1221, + 0x1233, 0x1247, 0x126f, 0x12bb, 0x12f4, 0x1360, 0x13f2, 0x1472, + 0x14ca, 0x151e, 0x1559, 0x1590, 0x15ce, 0x1619, 0x1669, 0x16b7, + 0x1718, 0x177a, 0x17e9, 0x1846, 0x189b, 0x18e4, 0x1929, 0x195d, + // Entry 287C0 - 287FF + 0x1969, 0x1987, 0x19b9, 0x19dc, 0x1a1e, 0x1a42, 0x1a7b, 0x1ab0, + 0x1aee, 0x1b22, 0x1b32, 0x1b52, 0x1b96, 0x1bdc, 0x1c06, 0x1c12, + 0x1c2e, 0x1c56, 0x1c8a, 0x1ca9, 0x1cf5, 0x1d31, 0x1d60, 0x1daf, + 0x1dfc, 0x1e34, 0x1e4f, 0x1e90, 0x1ea0, 0x1ebc, 0x1eec, 0x1f03, + 0x1f31, 0x1f8a, 0x1fcc, 0x1fe9, 0x2012, 0x2064, 0x20a1, 0x20c9, + 0x20d7, 0x20e9, 0x20f9, 0x210f, 0x2127, 0x214b, 0x2186, 0x21c2, + 0x21fc, 0x2248, 0x2298, 0x22b2, 0x22d8, 0x2304, 0x2326, 0x235c, + 0x236c, 0x2394, 0x23d0, 0x23f6, 0x2424, 0x2432, 0x2444, 0x2462, + // Entry 28800 - 2883F + 0x248a, 0x24be, 0x24e9, 0x254c, 0x25bd, 0x25ff, 0x262b, 0x2639, + 0x2646, 0x266c, 0x26c7, 0x271d, 0x2759, 0x2764, 0x2797, 0x27f2, + 0x2838, 0x286e, 0x289e, 0x28a9, 0x28d4, 0x290f, 0x294a, 0x2982, + 0x29b5, 0x2a07, 0x2a16, 0x2a23, 0x2a36, 0x2a45, 0x2a65, 0x2aa5, + 0x2ade, 0x2b0a, 0x2b1f, 0x2b2e, 0x2b41, 0x2b56, 0x2b64, 0x2b70, + 0x2b8c, 0x2bb8, 0x2bcc, 0x2be6, 0x2c10, 0x2c30, 0x2c6a, 0x2c87, + 0x2ccb, 0x2d11, 0x2d43, 0x2d68, 0x2db1, 0x2de3, 0x2df0, 0x2e03, + 0x2e38, 0x2e7d, 0x0094, 0x0034, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 28840 - 2887F + 0x125b, 0x12ab, 0x12e7, 0x1334, 0x13c4, 0x145a, 0x14ae, 0x150e, + 0x154a, 0x1583, 0x15be, 0x1602, 0x165b, 0x1699, 0x16ff, 0x1756, + 0x17ce, 0x182b, 0x1888, 0x18d5, 0x1918, 0xffff, 0xffff, 0x1978, + 0xffff, 0x19c6, 0xffff, 0x1a34, 0x1a70, 0x1aa5, 0x1ada, 0xffff, + 0xffff, 0x1b42, 0x1b86, 0x1bd1, 0xffff, 0xffff, 0xffff, 0x1c46, + 0xffff, 0x1c97, 0x1ce1, 0xffff, 0x1d4c, 0x1d9c, 0x1deb, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1eae, 0xffff, 0xffff, 0x1f1a, 0x1f73, + 0xffff, 0xffff, 0x1ff7, 0x2054, 0x2096, 0xffff, 0xffff, 0xffff, + // Entry 28880 - 288BF + 0xffff, 0xffff, 0xffff, 0x213f, 0x2175, 0x21b4, 0x21f0, 0x2226, + 0xffff, 0xffff, 0x22cc, 0xffff, 0x2311, 0xffff, 0xffff, 0x237c, + 0xffff, 0x23e5, 0xffff, 0xffff, 0xffff, 0xffff, 0x247a, 0xffff, + 0x24cb, 0x2531, 0x25a8, 0x25f3, 0xffff, 0xffff, 0xffff, 0x2651, + 0x26ae, 0x2705, 0xffff, 0xffff, 0x277a, 0x27dd, 0x2828, 0x2860, + 0xffff, 0xffff, 0x28c6, 0x2904, 0x2939, 0xffff, 0x2992, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2a53, 0x2a95, 0x2ad1, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2b7f, 0xffff, + // Entry 288C0 - 288FF + 0xffff, 0x2bdb, 0xffff, 0x2c1c, 0xffff, 0x2c78, 0x2cb9, 0x2d01, + 0xffff, 0x2d53, 0x2d9e, 0xffff, 0xffff, 0xffff, 0x2e25, 0x2e66, + 0x0094, 0x0034, 0xffff, 0xffff, 0xffff, 0xffff, 0x128e, 0x12d2, + 0x1315, 0x1393, 0x1427, 0x1491, 0x14ed, 0x1535, 0x156f, 0x15a8, + 0x15e9, 0x163b, 0x1682, 0x16dc, 0x1738, 0x17a5, 0x180b, 0x1868, + 0x18b9, 0x18ff, 0x1944, 0xffff, 0xffff, 0x19a1, 0xffff, 0x19fe, + 0xffff, 0x1a5a, 0x1a91, 0x1ac6, 0x1b09, 0xffff, 0xffff, 0x1b6d, + 0x1bb2, 0x1bf2, 0xffff, 0xffff, 0xffff, 0x1c71, 0xffff, 0x1cc6, + // Entry 28900 - 2893F + 0x1d14, 0xffff, 0x1d7f, 0x1dce, 0x1e19, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1ed5, 0xffff, 0xffff, 0x1f53, 0x1fac, 0xffff, 0xffff, + 0x2034, 0x207e, 0x20b6, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2161, 0x219e, 0x21da, 0x2212, 0x2271, 0xffff, 0xffff, + 0x22ef, 0xffff, 0x2342, 0xffff, 0xffff, 0x23b3, 0xffff, 0x240e, + 0xffff, 0xffff, 0xffff, 0xffff, 0x24a5, 0xffff, 0x250e, 0x257b, + 0x25d9, 0x2616, 0xffff, 0xffff, 0xffff, 0x268e, 0x26e7, 0x273c, + 0xffff, 0xffff, 0x27bb, 0x280e, 0x284d, 0x2887, 0xffff, 0xffff, + // Entry 28940 - 2897F + 0x28ed, 0x2925, 0x2967, 0xffff, 0x29df, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2a7e, 0x2abc, 0x2af5, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2ba3, 0xffff, 0xffff, 0x2bfc, + 0xffff, 0x2c4e, 0xffff, 0x2ca1, 0x2ce7, 0x2d2b, 0xffff, 0x2d84, + 0x2dcb, 0xffff, 0xffff, 0xffff, 0x2e50, 0x2e9b, 0x0003, 0x0004, + 0x02ca, 0x0733, 0x0012, 0x0017, 0x0024, 0x0000, 0x0000, 0x0000, + 0x0000, 0x003c, 0x0067, 0x028a, 0x0000, 0x0297, 0x0000, 0x0000, + 0x0000, 0x0000, 0x02a4, 0x0000, 0x02bc, 0x0005, 0x0000, 0x0000, + // Entry 28980 - 289BF + 0x0000, 0x0000, 0x001d, 0x0001, 0x001f, 0x0001, 0x0021, 0x0001, + 0x0006, 0x01e5, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x002b, 0x0004, 0x0039, 0x0033, 0x0030, 0x0036, 0x0001, 0x0025, + 0x00d3, 0x0001, 0x0035, 0x0000, 0x0001, 0x0035, 0x000a, 0x0001, + 0x0015, 0x14be, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0045, 0x0000, 0x0056, 0x0004, 0x0053, 0x004d, 0x004a, 0x0050, + 0x0001, 0x0002, 0x0000, 0x0001, 0x0000, 0x1e0b, 0x0001, 0x0000, + 0x1e17, 0x0001, 0x001d, 0x17a0, 0x0004, 0x0064, 0x005e, 0x005b, + // Entry 289C0 - 289FF + 0x0061, 0x0001, 0x0035, 0x0013, 0x0001, 0x0035, 0x0013, 0x0001, + 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, 0x0070, 0x00d5, + 0x012c, 0x0161, 0x0232, 0x0257, 0x0268, 0x0279, 0x0002, 0x0073, + 0x00a4, 0x0003, 0x0077, 0x0086, 0x0095, 0x000d, 0x0006, 0xffff, + 0x0a0e, 0x42fb, 0x4208, 0x42ff, 0x4303, 0x4307, 0x430b, 0x430f, + 0x0b0c, 0x4313, 0x4317, 0x431b, 0x000d, 0x0000, 0xffff, 0x2289, + 0x2364, 0x2ae3, 0x241f, 0x2ae3, 0x2289, 0x2296, 0x241f, 0x257d, + 0x236a, 0x236c, 0x236e, 0x000d, 0x0035, 0xffff, 0x0022, 0x002a, + // Entry 28A00 - 28A3F + 0x0033, 0x0039, 0x0040, 0x0047, 0x004e, 0x0055, 0x005c, 0x0066, + 0x006e, 0x0077, 0x0003, 0x00a8, 0x00b7, 0x00c6, 0x000d, 0x0006, + 0xffff, 0x0a0e, 0x42fb, 0x4208, 0x42ff, 0x4303, 0x4307, 0x430b, + 0x430f, 0x0b0c, 0x4313, 0x4317, 0x431b, 0x000d, 0x0000, 0xffff, + 0x2289, 0x2364, 0x2ae3, 0x241f, 0x2ae3, 0x2289, 0x2296, 0x241f, + 0x257d, 0x236a, 0x236c, 0x236e, 0x000d, 0x0035, 0xffff, 0x0022, + 0x002a, 0x0033, 0x0039, 0x0040, 0x0047, 0x004e, 0x0055, 0x005c, + 0x0066, 0x006e, 0x0077, 0x0002, 0x00d8, 0x0102, 0x0005, 0x00de, + // Entry 28A40 - 28A7F + 0x00e7, 0x00f9, 0x0000, 0x00f0, 0x0007, 0x0006, 0x0c24, 0x4204, + 0x4208, 0x431f, 0x4323, 0x4327, 0x4218, 0x0007, 0x0000, 0x236e, + 0x2296, 0x2ae3, 0x2ae3, 0x2289, 0x257f, 0x257d, 0x0007, 0x0006, + 0x0c24, 0x4204, 0x4208, 0x431f, 0x4323, 0x4327, 0x4218, 0x0007, + 0x0035, 0x0080, 0x0089, 0x0091, 0x009a, 0x00a5, 0x00ae, 0x00b7, + 0x0005, 0x0108, 0x0111, 0x0123, 0x0000, 0x011a, 0x0007, 0x0006, + 0x0c24, 0x4204, 0x4208, 0x431f, 0x4323, 0x4327, 0x4218, 0x0007, + 0x0000, 0x236e, 0x2296, 0x2ae3, 0x2ae3, 0x2289, 0x257f, 0x257d, + // Entry 28A80 - 28ABF + 0x0007, 0x0006, 0x0c24, 0x4204, 0x4208, 0x431f, 0x4323, 0x4327, + 0x4218, 0x0007, 0x0035, 0x0080, 0x0089, 0x0091, 0x009a, 0x00a5, + 0x00ae, 0x00b7, 0x0002, 0x012f, 0x0148, 0x0003, 0x0133, 0x013a, + 0x0141, 0x0005, 0x001d, 0xffff, 0x1674, 0x1677, 0x167a, 0x167d, + 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, + 0x0035, 0xffff, 0x00be, 0x00cc, 0x00da, 0x00e8, 0x0003, 0x014c, + 0x0153, 0x015a, 0x0005, 0x001d, 0xffff, 0x1674, 0x1677, 0x167a, + 0x167d, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + // Entry 28AC0 - 28AFF + 0x0005, 0x0035, 0xffff, 0x00be, 0x00cc, 0x00da, 0x00e8, 0x0002, + 0x0164, 0x01cb, 0x0003, 0x0168, 0x0189, 0x01aa, 0x0008, 0x0174, + 0x017a, 0x0171, 0x017d, 0x0180, 0x0183, 0x0186, 0x0177, 0x0001, + 0x0035, 0x00f6, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0035, 0x0101, + 0x0001, 0x0000, 0x04f2, 0x0001, 0x0035, 0x010d, 0x0001, 0x0035, + 0x0118, 0x0001, 0x0035, 0x0127, 0x0001, 0x0035, 0x012f, 0x0008, + 0x0195, 0x019b, 0x0192, 0x019e, 0x01a1, 0x01a4, 0x01a7, 0x0198, + 0x0001, 0x0035, 0x00f6, 0x0001, 0x0029, 0x006c, 0x0001, 0x0035, + // Entry 28B00 - 28B3F + 0x0101, 0x0001, 0x0026, 0x0fee, 0x0001, 0x0035, 0x010d, 0x0001, + 0x0035, 0x0118, 0x0001, 0x0035, 0x0127, 0x0001, 0x0035, 0x012f, + 0x0008, 0x01b6, 0x01bc, 0x01b3, 0x01bf, 0x01c2, 0x01c5, 0x01c8, + 0x01b9, 0x0001, 0x0035, 0x00f6, 0x0001, 0x0000, 0x04ef, 0x0001, + 0x0035, 0x0101, 0x0001, 0x0000, 0x04f2, 0x0001, 0x0035, 0x010d, + 0x0001, 0x0035, 0x0118, 0x0001, 0x0035, 0x0127, 0x0001, 0x0035, + 0x012f, 0x0003, 0x01cf, 0x01f0, 0x0211, 0x0008, 0x01db, 0x01e1, + 0x01d8, 0x01e4, 0x01e7, 0x01ea, 0x01ed, 0x01de, 0x0001, 0x0035, + // Entry 28B40 - 28B7F + 0x00f6, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0035, 0x0101, 0x0001, + 0x0000, 0x04f2, 0x0001, 0x0035, 0x0138, 0x0001, 0x0035, 0x0140, + 0x0001, 0x0035, 0x014b, 0x0001, 0x0035, 0x0150, 0x0008, 0x01fc, + 0x0202, 0x01f9, 0x0205, 0x0208, 0x020b, 0x020e, 0x01ff, 0x0001, + 0x0035, 0x00f6, 0x0001, 0x0029, 0x006c, 0x0001, 0x0035, 0x0101, + 0x0001, 0x0026, 0x0fee, 0x0001, 0x0035, 0x0138, 0x0001, 0x0035, + 0x0140, 0x0001, 0x0035, 0x014b, 0x0001, 0x0035, 0x0150, 0x0008, + 0x021d, 0x0223, 0x021a, 0x0226, 0x0229, 0x022c, 0x022f, 0x0220, + // Entry 28B80 - 28BBF + 0x0001, 0x0035, 0x00f6, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0035, + 0x0101, 0x0001, 0x0000, 0x04f2, 0x0001, 0x0035, 0x0138, 0x0001, + 0x0035, 0x0140, 0x0001, 0x0035, 0x014b, 0x0001, 0x0035, 0x0150, + 0x0003, 0x0241, 0x024c, 0x0236, 0x0002, 0x0239, 0x023d, 0x0002, + 0x0035, 0x0156, 0x0177, 0x0002, 0x0035, 0x0164, 0x0183, 0x0002, + 0x0244, 0x0248, 0x0002, 0x0029, 0x0237, 0x0243, 0x0002, 0x0035, + 0x018f, 0x0196, 0x0002, 0x024f, 0x0253, 0x0002, 0x0010, 0x02e7, + 0x02ee, 0x0002, 0x0000, 0x04f5, 0x2701, 0x0004, 0x0265, 0x025f, + // Entry 28BC0 - 28BFF + 0x025c, 0x0262, 0x0001, 0x0002, 0x0025, 0x0001, 0x0002, 0x0033, + 0x0001, 0x0002, 0x003c, 0x0001, 0x0015, 0x14be, 0x0004, 0x0276, + 0x0270, 0x026d, 0x0273, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, + 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, + 0x0287, 0x0281, 0x027e, 0x0284, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, + 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0290, 0x0001, 0x0292, + 0x0001, 0x0294, 0x0001, 0x0000, 0x04ef, 0x0005, 0x0000, 0x0000, + // Entry 28C00 - 28C3F + 0x0000, 0x0000, 0x029d, 0x0001, 0x029f, 0x0001, 0x02a1, 0x0001, + 0x0000, 0x06c8, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x02ab, 0x0004, 0x02b9, 0x02b3, 0x02b0, 0x02b6, 0x0001, 0x0002, + 0x0000, 0x0001, 0x0000, 0x1e0b, 0x0001, 0x0000, 0x1e17, 0x0001, + 0x001d, 0x17a0, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x02c2, + 0x0001, 0x02c4, 0x0001, 0x02c6, 0x0002, 0x0035, 0x019b, 0x01ab, + 0x0042, 0x030d, 0x0312, 0x0317, 0x031c, 0x0333, 0x034a, 0x0361, + 0x0378, 0x038f, 0x03a6, 0x03bd, 0x03d4, 0x03eb, 0x0406, 0x0421, + // Entry 28C40 - 28C7F + 0x043c, 0x0441, 0x0446, 0x044b, 0x0464, 0x047d, 0x0496, 0x049b, + 0x04a0, 0x04a5, 0x04aa, 0x04af, 0x04b4, 0x04b9, 0x04be, 0x04c3, + 0x04d7, 0x04eb, 0x04ff, 0x0513, 0x0527, 0x053b, 0x054f, 0x0563, + 0x0577, 0x058b, 0x059f, 0x05b3, 0x05c7, 0x05db, 0x05ef, 0x0603, + 0x0617, 0x062b, 0x063f, 0x0653, 0x0667, 0x066c, 0x0671, 0x0676, + 0x068c, 0x069e, 0x06b0, 0x06c6, 0x06d8, 0x06ea, 0x0700, 0x0712, + 0x0724, 0x0729, 0x072e, 0x0001, 0x030f, 0x0001, 0x0001, 0x0040, + 0x0001, 0x0314, 0x0001, 0x0001, 0x0040, 0x0001, 0x0319, 0x0001, + // Entry 28C80 - 28CBF + 0x0001, 0x0040, 0x0003, 0x0320, 0x0323, 0x0328, 0x0001, 0x0035, + 0x01b2, 0x0003, 0x0035, 0x01b7, 0x01c3, 0x01d0, 0x0002, 0x032b, + 0x032f, 0x0002, 0x0035, 0x01eb, 0x01de, 0x0002, 0x0035, 0x0204, + 0x01f8, 0x0003, 0x0337, 0x033a, 0x033f, 0x0001, 0x0035, 0x01b2, + 0x0003, 0x0035, 0x01b7, 0x01c3, 0x01d0, 0x0002, 0x0342, 0x0346, + 0x0002, 0x0035, 0x01eb, 0x01de, 0x0002, 0x0035, 0x0204, 0x01f8, + 0x0003, 0x034e, 0x0351, 0x0356, 0x0001, 0x0035, 0x01b2, 0x0003, + 0x0035, 0x01b7, 0x01c3, 0x01d0, 0x0002, 0x0359, 0x035d, 0x0002, + // Entry 28CC0 - 28CFF + 0x0035, 0x01eb, 0x01de, 0x0002, 0x0035, 0x0204, 0x01f8, 0x0003, + 0x0365, 0x0368, 0x036d, 0x0001, 0x0006, 0x1655, 0x0003, 0x0035, + 0x0210, 0x0221, 0x0232, 0x0002, 0x0370, 0x0374, 0x0002, 0x0035, + 0x0257, 0x0245, 0x0002, 0x0035, 0x027a, 0x0269, 0x0003, 0x037c, + 0x037f, 0x0384, 0x0001, 0x000b, 0x0c78, 0x0003, 0x0035, 0x028b, + 0x0298, 0x02a5, 0x0002, 0x0387, 0x038b, 0x0002, 0x0035, 0x02b4, + 0x02b4, 0x0002, 0x0035, 0x02c2, 0x02c2, 0x0003, 0x0393, 0x0396, + 0x039b, 0x0001, 0x000b, 0x0c78, 0x0003, 0x0035, 0x028b, 0x0298, + // Entry 28D00 - 28D3F + 0x02a5, 0x0002, 0x039e, 0x03a2, 0x0002, 0x0035, 0x02b4, 0x02b4, + 0x0002, 0x0035, 0x02c2, 0x02c2, 0x0003, 0x03aa, 0x03ad, 0x03b2, + 0x0001, 0x0035, 0x02cf, 0x0003, 0x0035, 0x02d4, 0x02e0, 0x02ec, + 0x0002, 0x03b5, 0x03b9, 0x0002, 0x0035, 0x0307, 0x02fa, 0x0002, + 0x0035, 0x0320, 0x0314, 0x0003, 0x03c1, 0x03c4, 0x03c9, 0x0001, + 0x0035, 0x02cf, 0x0003, 0x0035, 0x02d4, 0x02e0, 0x02ec, 0x0002, + 0x03cc, 0x03d0, 0x0002, 0x0035, 0x0307, 0x02fa, 0x0002, 0x0035, + 0x0320, 0x0314, 0x0003, 0x03d8, 0x03db, 0x03e0, 0x0001, 0x0035, + // Entry 28D40 - 28D7F + 0x02cf, 0x0003, 0x0035, 0x02d4, 0x02e0, 0x02ec, 0x0002, 0x03e3, + 0x03e7, 0x0002, 0x0035, 0x0307, 0x02fa, 0x0002, 0x0035, 0x0320, + 0x0314, 0x0004, 0x03f0, 0x03f3, 0x03f8, 0x0403, 0x0001, 0x0035, + 0x032c, 0x0003, 0x0035, 0x0336, 0x0347, 0x0358, 0x0002, 0x03fb, + 0x03ff, 0x0002, 0x0035, 0x037d, 0x036b, 0x0002, 0x0035, 0x03a0, + 0x038f, 0x0001, 0x0035, 0x03b1, 0x0004, 0x040b, 0x040e, 0x0413, + 0x041e, 0x0001, 0x0035, 0x03c6, 0x0003, 0x0035, 0x0336, 0x0347, + 0x0358, 0x0002, 0x0416, 0x041a, 0x0002, 0x0035, 0x03cc, 0x03cc, + // Entry 28D80 - 28DBF + 0x0002, 0x0035, 0x03da, 0x03da, 0x0001, 0x0035, 0x03b1, 0x0004, + 0x0426, 0x0429, 0x042e, 0x0439, 0x0001, 0x0035, 0x03c6, 0x0003, + 0x0035, 0x0336, 0x0347, 0x0358, 0x0002, 0x0431, 0x0435, 0x0002, + 0x0035, 0x03cc, 0x03cc, 0x0002, 0x0035, 0x03da, 0x03da, 0x0001, + 0x0035, 0x03b1, 0x0001, 0x043e, 0x0001, 0x0035, 0x03e7, 0x0001, + 0x0443, 0x0001, 0x0035, 0x03fa, 0x0001, 0x0448, 0x0001, 0x0035, + 0x03fa, 0x0003, 0x044f, 0x0452, 0x0459, 0x0001, 0x0035, 0x0405, + 0x0005, 0x0035, 0x041b, 0x0420, 0x0425, 0x040c, 0x042c, 0x0002, + // Entry 28DC0 - 28DFF + 0x045c, 0x0460, 0x0002, 0x0035, 0x0446, 0x0437, 0x0002, 0x0035, + 0x0463, 0x0455, 0x0003, 0x0468, 0x046b, 0x0472, 0x0001, 0x0000, + 0x200e, 0x0005, 0x0035, 0xffff, 0xffff, 0xffff, 0xffff, 0x042c, + 0x0002, 0x0475, 0x0479, 0x0002, 0x0035, 0x047b, 0x0471, 0x0002, + 0x0035, 0x048f, 0x0486, 0x0003, 0x0481, 0x0484, 0x048b, 0x0001, + 0x0000, 0x200e, 0x0005, 0x0035, 0xffff, 0xffff, 0xffff, 0xffff, + 0x042c, 0x0002, 0x048e, 0x0492, 0x0002, 0x0035, 0x047b, 0x0471, + 0x0002, 0x0035, 0x048f, 0x0486, 0x0001, 0x0498, 0x0001, 0x0035, + // Entry 28E00 - 28E3F + 0x0499, 0x0001, 0x049d, 0x0001, 0x0035, 0x04ac, 0x0001, 0x04a2, + 0x0001, 0x0035, 0x04ac, 0x0001, 0x04a7, 0x0001, 0x0035, 0x04b8, + 0x0001, 0x04ac, 0x0001, 0x0035, 0x04cf, 0x0001, 0x04b1, 0x0001, + 0x0035, 0x04e0, 0x0001, 0x04b6, 0x0001, 0x0035, 0x04ed, 0x0001, + 0x04bb, 0x0001, 0x0035, 0x04fd, 0x0001, 0x04c0, 0x0001, 0x0035, + 0x04fd, 0x0003, 0x0000, 0x04c7, 0x04cc, 0x0003, 0x0035, 0x0509, + 0x0519, 0x0529, 0x0002, 0x04cf, 0x04d3, 0x0002, 0x0035, 0x054c, + 0x053b, 0x0002, 0x0035, 0x056e, 0x055e, 0x0003, 0x0000, 0x04db, + // Entry 28E40 - 28E7F + 0x04e0, 0x0003, 0x0035, 0x057f, 0x058b, 0x0597, 0x0002, 0x04e3, + 0x04e7, 0x0002, 0x0035, 0x05a5, 0x05a5, 0x0002, 0x0035, 0x05b2, + 0x05b2, 0x0003, 0x0000, 0x04ef, 0x04f4, 0x0003, 0x0035, 0x057f, + 0x058b, 0x0597, 0x0002, 0x04f7, 0x04fb, 0x0002, 0x0035, 0x05a5, + 0x05a5, 0x0002, 0x0035, 0x05b2, 0x05b2, 0x0003, 0x0000, 0x0503, + 0x0508, 0x0003, 0x0035, 0x05be, 0x05cd, 0x05dc, 0x0002, 0x050b, + 0x050f, 0x0002, 0x0035, 0x05ed, 0x05ed, 0x0002, 0x0035, 0x05fd, + 0x05fd, 0x0003, 0x0000, 0x0517, 0x051c, 0x0003, 0x0035, 0x060c, + // Entry 28E80 - 28EBF + 0x0618, 0x0624, 0x0002, 0x051f, 0x0523, 0x0002, 0x0035, 0x0632, + 0x0632, 0x0002, 0x0035, 0x063f, 0x063f, 0x0003, 0x0000, 0x052b, + 0x0530, 0x0003, 0x0035, 0x060c, 0x0618, 0x0624, 0x0002, 0x0533, + 0x0537, 0x0002, 0x0035, 0x0632, 0x0632, 0x0002, 0x0035, 0x063f, + 0x063f, 0x0003, 0x0000, 0x053f, 0x0544, 0x0003, 0x0035, 0x064b, + 0x065b, 0x066b, 0x0002, 0x0547, 0x054b, 0x0002, 0x0035, 0x067d, + 0x067d, 0x0002, 0x0035, 0x068e, 0x068e, 0x0003, 0x0000, 0x0553, + 0x0558, 0x0003, 0x0035, 0x069e, 0x06aa, 0x06b6, 0x0002, 0x055b, + // Entry 28EC0 - 28EFF + 0x055f, 0x0002, 0x0035, 0x06c4, 0x06c4, 0x0002, 0x0035, 0x06d1, + 0x06d1, 0x0003, 0x0000, 0x0567, 0x056c, 0x0003, 0x0035, 0x069e, + 0x06aa, 0x06b6, 0x0002, 0x056f, 0x0573, 0x0002, 0x0035, 0x06c4, + 0x06c4, 0x0002, 0x0035, 0x06d1, 0x06d1, 0x0003, 0x0000, 0x057b, + 0x0580, 0x0003, 0x0035, 0x06dd, 0x06ef, 0x0701, 0x0002, 0x0583, + 0x0587, 0x0002, 0x0035, 0x0715, 0x0715, 0x0002, 0x0035, 0x0728, + 0x0728, 0x0003, 0x0000, 0x058f, 0x0594, 0x0003, 0x0035, 0x073a, + 0x0746, 0x0752, 0x0002, 0x0597, 0x059b, 0x0002, 0x0035, 0x0760, + // Entry 28F00 - 28F3F + 0x0760, 0x0002, 0x0035, 0x076d, 0x076d, 0x0003, 0x0000, 0x05a3, + 0x05a8, 0x0003, 0x0035, 0x073a, 0x0746, 0x0752, 0x0002, 0x05ab, + 0x05af, 0x0002, 0x0035, 0x0760, 0x0760, 0x0002, 0x0035, 0x076d, + 0x076d, 0x0003, 0x0000, 0x05b7, 0x05bc, 0x0003, 0x0035, 0x0779, + 0x0789, 0x0799, 0x0002, 0x05bf, 0x05c3, 0x0002, 0x0035, 0x07ab, + 0x07ab, 0x0002, 0x0035, 0x07bc, 0x07bc, 0x0003, 0x0000, 0x05cb, + 0x05d0, 0x0003, 0x0035, 0x07cc, 0x07d8, 0x07e4, 0x0002, 0x05d3, + 0x05d7, 0x0002, 0x0035, 0x07f2, 0x07f2, 0x0002, 0x0035, 0x07ff, + // Entry 28F40 - 28F7F + 0x07ff, 0x0003, 0x0000, 0x05df, 0x05e4, 0x0003, 0x0035, 0x07cc, + 0x07d8, 0x07e4, 0x0002, 0x05e7, 0x05eb, 0x0002, 0x0035, 0x07f2, + 0x07f2, 0x0002, 0x0035, 0x07ff, 0x07ff, 0x0003, 0x0000, 0x05f3, + 0x05f8, 0x0003, 0x0035, 0x080b, 0x081b, 0x082b, 0x0002, 0x05fb, + 0x05ff, 0x0002, 0x0035, 0x083d, 0x083d, 0x0002, 0x0035, 0x084e, + 0x084e, 0x0003, 0x0000, 0x0607, 0x060c, 0x0003, 0x0035, 0x085e, + 0x086a, 0x0876, 0x0002, 0x060f, 0x0613, 0x0002, 0x0035, 0x0884, + 0x0884, 0x0002, 0x0035, 0x0891, 0x0891, 0x0003, 0x0000, 0x061b, + // Entry 28F80 - 28FBF + 0x0620, 0x0003, 0x0035, 0x085e, 0x086a, 0x0876, 0x0002, 0x0623, + 0x0627, 0x0002, 0x0035, 0x0884, 0x0884, 0x0002, 0x0035, 0x0891, + 0x0891, 0x0003, 0x0000, 0x062f, 0x0634, 0x0003, 0x0035, 0x089d, + 0x08ab, 0x08b9, 0x0002, 0x0637, 0x063b, 0x0002, 0x0035, 0x08d8, + 0x08c9, 0x0002, 0x0035, 0x08f5, 0x08e7, 0x0003, 0x0000, 0x0643, + 0x0648, 0x0003, 0x0035, 0x0903, 0x090f, 0x091b, 0x0002, 0x064b, + 0x064f, 0x0002, 0x0035, 0x0929, 0x0929, 0x0002, 0x0035, 0x0936, + 0x0936, 0x0003, 0x0000, 0x0657, 0x065c, 0x0003, 0x0035, 0x0903, + // Entry 28FC0 - 28FFF + 0x090f, 0x091b, 0x0002, 0x065f, 0x0663, 0x0002, 0x0035, 0x0929, + 0x0929, 0x0002, 0x0035, 0x0936, 0x0936, 0x0001, 0x0669, 0x0001, + 0x0007, 0x0892, 0x0001, 0x066e, 0x0001, 0x0007, 0x0892, 0x0001, + 0x0673, 0x0001, 0x0007, 0x0892, 0x0003, 0x067a, 0x067d, 0x0681, + 0x0001, 0x0035, 0x0942, 0x0002, 0x0035, 0xffff, 0x0946, 0x0002, + 0x0684, 0x0688, 0x0002, 0x0035, 0x095e, 0x0952, 0x0002, 0x0035, + 0x0975, 0x096a, 0x0003, 0x0690, 0x0000, 0x0693, 0x0001, 0x0006, + 0x1e0b, 0x0002, 0x0696, 0x069a, 0x0002, 0x0035, 0x0980, 0x0980, + // Entry 29000 - 2903F + 0x0002, 0x0035, 0x098a, 0x098a, 0x0003, 0x06a2, 0x0000, 0x06a5, + 0x0001, 0x0000, 0x213b, 0x0002, 0x06a8, 0x06ac, 0x0002, 0x0035, + 0x0980, 0x0980, 0x0002, 0x0035, 0x098a, 0x098a, 0x0003, 0x06b4, + 0x06b7, 0x06bb, 0x0001, 0x001d, 0x0dc2, 0x0002, 0x0035, 0xffff, + 0x0993, 0x0002, 0x06be, 0x06c2, 0x0002, 0x0035, 0x09b0, 0x09a1, + 0x0002, 0x0035, 0x09cd, 0x09bf, 0x0003, 0x06ca, 0x0000, 0x06cd, + 0x0001, 0x000b, 0x1250, 0x0002, 0x06d0, 0x06d4, 0x0002, 0x0035, + 0x09db, 0x09db, 0x0002, 0x0035, 0x09e7, 0x09e7, 0x0003, 0x06dc, + // Entry 29040 - 2907F + 0x0000, 0x06df, 0x0001, 0x000b, 0x1250, 0x0002, 0x06e2, 0x06e6, + 0x0002, 0x0035, 0x09db, 0x09db, 0x0002, 0x0035, 0x09e7, 0x09e7, + 0x0003, 0x06ee, 0x06f1, 0x06f5, 0x0001, 0x0035, 0x09f2, 0x0002, + 0x0035, 0xffff, 0x0942, 0x0002, 0x06f8, 0x06fc, 0x0002, 0x0035, + 0x0a0a, 0x09fa, 0x0002, 0x0035, 0x0a29, 0x0a1a, 0x0003, 0x0704, + 0x0000, 0x0707, 0x0001, 0x0000, 0x2002, 0x0002, 0x070a, 0x070e, + 0x0002, 0x0035, 0x0a42, 0x0a38, 0x0002, 0x0035, 0x0a58, 0x0a4f, + 0x0003, 0x0716, 0x0000, 0x0719, 0x0001, 0x0000, 0x2002, 0x0002, + // Entry 29080 - 290BF + 0x071c, 0x0720, 0x0002, 0x0035, 0x0a38, 0x0a38, 0x0002, 0x0035, + 0x0a4f, 0x0a4f, 0x0001, 0x0726, 0x0001, 0x0035, 0x0a64, 0x0001, + 0x072b, 0x0001, 0x0029, 0x09ab, 0x0001, 0x0730, 0x0001, 0x0029, + 0x09ab, 0x0004, 0x0738, 0x073d, 0x0742, 0x0751, 0x0003, 0x0000, + 0x1dc7, 0x2ae8, 0x2aef, 0x0003, 0x0035, 0x0a70, 0x0a78, 0x0a88, + 0x0002, 0x0000, 0x0745, 0x0003, 0x0000, 0x074c, 0x0749, 0x0001, + 0x0035, 0x0a9a, 0x0003, 0x0035, 0xffff, 0x0ab6, 0x0ad1, 0x0002, + 0x091a, 0x0754, 0x0003, 0x07ee, 0x0884, 0x0758, 0x0094, 0x0035, + // Entry 290C0 - 290FF + 0x0aeb, 0x0b02, 0x0b1d, 0x0b39, 0x0b75, 0x0bd3, 0x0c1c, 0x0c67, + 0x0cab, 0x0cf9, 0x0d52, 0x0d9a, 0x0dd2, 0x0e04, 0x0e3d, 0x0e98, + 0x0efd, 0x0f48, 0x0fa0, 0x1012, 0x108d, 0x10fc, 0x1165, 0x11b5, + 0x11fc, 0x1232, 0x1241, 0x1263, 0x1293, 0x12bf, 0x12f3, 0x1315, + 0x1356, 0x138f, 0x13cf, 0x1403, 0x141e, 0x1447, 0x1492, 0x14de, + 0x1506, 0x1513, 0x152d, 0x1559, 0x159f, 0x15cd, 0x162f, 0x1677, + 0x16bf, 0x1724, 0x1775, 0x17a3, 0x17bd, 0x17ec, 0x1800, 0x1821, + 0x1855, 0x186d, 0x18ac, 0x191e, 0x1972, 0x1980, 0x19b1, 0x1a12, + // Entry 29100 - 2913F + 0x1a50, 0x1a78, 0x1a92, 0x1aac, 0x1ac0, 0x1ade, 0x1afd, 0x1b2e, + 0x1b6d, 0x1baa, 0x1be9, 0x1c3b, 0x1c8b, 0x1ca8, 0x1cd3, 0x1cfb, + 0x1d1d, 0x1d53, 0x1d68, 0x1d97, 0x1dc9, 0x1df3, 0x1e21, 0x1e33, + 0x1e45, 0x1e58, 0x1e85, 0x1ebd, 0x1eec, 0x1f59, 0x1fb1, 0x1ff2, + 0x201c, 0x202f, 0x203c, 0x2064, 0x20c0, 0x2111, 0x2143, 0x214f, + 0x2182, 0x21db, 0x221d, 0x2256, 0x2288, 0x2295, 0x22c3, 0x2303, + 0x2343, 0x237b, 0x23b7, 0x2405, 0x2418, 0x2427, 0x2438, 0x2448, + 0x2467, 0x24a5, 0x24de, 0x2508, 0x251d, 0x252e, 0x2547, 0x2561, + // Entry 29140 - 2917F + 0x2572, 0x257f, 0x259b, 0x25c7, 0x25da, 0x25f6, 0x2620, 0x2643, + 0x267d, 0x269e, 0x26ea, 0x2736, 0x2766, 0x278b, 0x27d2, 0x2804, + 0x2812, 0x282b, 0x2851, 0x2893, 0x0094, 0x0035, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0b57, 0x0bc1, 0x0c07, 0x0c56, 0x0c99, 0x0cdf, + 0x0d3d, 0x0d8c, 0x0dc6, 0x0dfa, 0x0e28, 0x0e77, 0x0eea, 0x0f33, + 0x0f82, 0x0fec, 0x106e, 0x10db, 0x114e, 0x11a3, 0x11e9, 0xffff, + 0xffff, 0x1253, 0xffff, 0x12ad, 0xffff, 0x1303, 0x1349, 0x1380, + 0x13bd, 0xffff, 0xffff, 0x1434, 0x147d, 0x14d2, 0xffff, 0xffff, + // Entry 29180 - 291BF + 0xffff, 0x153e, 0xffff, 0x15b2, 0x1613, 0xffff, 0x16a1, 0x170b, + 0x1766, 0xffff, 0xffff, 0xffff, 0xffff, 0x180f, 0xffff, 0xffff, + 0x188c, 0x18fc, 0xffff, 0xffff, 0x1991, 0x1a01, 0x1a44, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1b1e, 0x1b5e, 0x1b9b, + 0x1bd8, 0x1c1b, 0xffff, 0xffff, 0x1cc7, 0xffff, 0x1d0a, 0xffff, + 0xffff, 0x1d86, 0xffff, 0x1de4, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1e71, 0xffff, 0x1ecb, 0x1f3e, 0x1f9f, 0x1fe5, 0xffff, 0xffff, + 0xffff, 0x204a, 0x20a8, 0x2100, 0xffff, 0xffff, 0x2167, 0x21c8, + // Entry 291C0 - 291FF + 0x2211, 0x2245, 0xffff, 0xffff, 0x22b2, 0x22f5, 0x232f, 0xffff, + 0x2398, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2457, 0x2497, + 0x24d1, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x258d, 0xffff, 0xffff, 0x25e9, 0xffff, 0x262e, 0xffff, 0x268b, + 0x26d4, 0x2726, 0xffff, 0x2778, 0x27c1, 0xffff, 0xffff, 0xffff, + 0x2842, 0x287f, 0x0094, 0x0035, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0b9c, 0x0bee, 0x0c3a, 0x0c81, 0x0cc6, 0x0d1c, 0x0d70, 0x0db1, + 0x0de7, 0x0e17, 0x0e5b, 0x0ec2, 0x0f19, 0x0f66, 0x0fc7, 0x1041, + // Entry 29200 - 2923F + 0x10b5, 0x1126, 0x1185, 0x11d0, 0x1218, 0xffff, 0xffff, 0x127c, + 0xffff, 0x12da, 0xffff, 0x1330, 0x136c, 0x13a7, 0x13ea, 0xffff, + 0xffff, 0x1463, 0x14b0, 0x14f3, 0xffff, 0xffff, 0xffff, 0x157d, + 0xffff, 0x15f1, 0x1654, 0xffff, 0x16e6, 0x1746, 0x178d, 0xffff, + 0xffff, 0xffff, 0xffff, 0x183c, 0xffff, 0xffff, 0x18d5, 0x1949, + 0xffff, 0xffff, 0x19da, 0x1a2c, 0x1a65, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1b47, 0x1b85, 0x1bc2, 0x1c03, 0x1c64, + 0xffff, 0xffff, 0x1ce8, 0xffff, 0x1d39, 0xffff, 0xffff, 0x1db1, + // Entry 29240 - 2927F + 0xffff, 0x1e0b, 0xffff, 0xffff, 0xffff, 0xffff, 0x1ea2, 0xffff, + 0x1f16, 0x1f7d, 0x1fcc, 0x2008, 0xffff, 0xffff, 0xffff, 0x2087, + 0x20e1, 0x212b, 0xffff, 0xffff, 0x21a6, 0x21f7, 0x2232, 0x2270, + 0xffff, 0xffff, 0x22dd, 0x231a, 0x2360, 0xffff, 0x23df, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2480, 0x24bc, 0x24f4, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x25b2, 0xffff, + 0xffff, 0x260c, 0xffff, 0x2661, 0xffff, 0x26ba, 0x2709, 0x274f, + 0xffff, 0x27a7, 0x27ec, 0xffff, 0xffff, 0xffff, 0x2869, 0x28b0, + // Entry 29280 - 292BF + 0x0003, 0x091e, 0x0984, 0x0951, 0x0031, 0x0007, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x24ae, 0x24b7, 0xffff, 0x24c0, 0x0031, + 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 292C0 - 292FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x24ae, 0x24b7, + 0xffff, 0x24c0, 0x0031, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 29300 - 2933F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x24b2, 0x24bb, 0xffff, 0x24c4, 0x0001, 0x0002, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0025, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0014, 0x0000, + 0x0000, 0x0004, 0x0022, 0x001c, 0x0019, 0x001f, 0x0001, 0x0006, + 0x000d, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, + // Entry 29340 - 2937F + 0x0014, 0x0370, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x002e, 0x0000, 0x0000, 0x0003, 0x0035, 0x0000, 0x0032, 0x0001, + 0x0006, 0x015b, 0x0001, 0x0007, 0x02e9, 0x0003, 0x0004, 0x0a39, + 0x0e3e, 0x0012, 0x0017, 0x0044, 0x0167, 0x01ee, 0x02df, 0x0000, + 0x0366, 0x0391, 0x05d8, 0x066e, 0x06ec, 0x0000, 0x0000, 0x0000, + 0x0000, 0x077e, 0x098c, 0x0a0a, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0020, 0x0033, 0x0000, 0x9006, 0x0003, 0x0029, 0x002e, + 0x0024, 0x0001, 0x0026, 0x0001, 0x0036, 0x0000, 0x0001, 0x002b, + // Entry 29380 - 293BF + 0x0001, 0x0000, 0x0000, 0x0001, 0x0030, 0x0001, 0x0000, 0x0000, + 0x0004, 0x0041, 0x003b, 0x0038, 0x003e, 0x0001, 0x0036, 0x0007, + 0x0001, 0x0036, 0x001c, 0x0001, 0x0036, 0x002d, 0x0001, 0x0036, + 0x002d, 0x000a, 0x004f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0156, + 0x0000, 0x0000, 0x00b4, 0x00c7, 0x0002, 0x0052, 0x0083, 0x0003, + 0x0056, 0x0065, 0x0074, 0x000d, 0x0036, 0xffff, 0x0036, 0x003d, + 0x0044, 0x004b, 0x0052, 0x0059, 0x0060, 0x0067, 0x006e, 0x0075, + 0x007c, 0x0086, 0x000d, 0x0036, 0xffff, 0x0090, 0x0094, 0x0098, + // Entry 293C0 - 293FF + 0x009c, 0x00a0, 0x00a4, 0x00a8, 0x00ac, 0x00b0, 0x00b4, 0x00b8, + 0x00bf, 0x000d, 0x0036, 0xffff, 0x0036, 0x003d, 0x0044, 0x004b, + 0x0052, 0x0059, 0x0060, 0x0067, 0x006e, 0x0075, 0x007c, 0x0086, + 0x0003, 0x0087, 0x0096, 0x00a5, 0x000d, 0x0036, 0xffff, 0x0036, + 0x003d, 0x0044, 0x004b, 0x0052, 0x0059, 0x0060, 0x0067, 0x006e, + 0x0075, 0x007c, 0x0086, 0x000d, 0x0036, 0xffff, 0x0090, 0x0094, + 0x0098, 0x009c, 0x00a0, 0x00a4, 0x00a8, 0x00ac, 0x00b0, 0x00b4, + 0x00b8, 0x00bf, 0x000d, 0x0036, 0xffff, 0x0036, 0x003d, 0x0044, + // Entry 29400 - 2943F + 0x004b, 0x0052, 0x0059, 0x0060, 0x0067, 0x006e, 0x0075, 0x007c, + 0x0086, 0x0003, 0x00b8, 0x00c3, 0x00bd, 0x0003, 0x0036, 0xffff, + 0xffff, 0x00c6, 0x0004, 0x0036, 0xffff, 0xffff, 0xffff, 0x00c6, + 0x0002, 0x0036, 0xffff, 0x00c6, 0x0006, 0x00ce, 0x0000, 0x0000, + 0x00e1, 0x0100, 0x0143, 0x0001, 0x00d0, 0x0001, 0x00d2, 0x000d, + 0x0036, 0xffff, 0x00cd, 0x00d1, 0x00d5, 0x00d9, 0x00dd, 0x00e1, + 0x00e5, 0x00e9, 0x00ed, 0x00f1, 0x00f5, 0x00f9, 0x0001, 0x00e3, + 0x0001, 0x00e5, 0x0019, 0x0036, 0xffff, 0x00fd, 0x0104, 0x010b, + // Entry 29440 - 2947F + 0x0112, 0x0119, 0x0120, 0x0127, 0x012e, 0x0135, 0x013c, 0x0143, + 0x014a, 0x0151, 0x0158, 0x015f, 0x0166, 0x016d, 0x0174, 0x017b, + 0x0182, 0x0189, 0x0190, 0x0197, 0x019e, 0x0001, 0x0102, 0x0001, + 0x0104, 0x003d, 0x0036, 0xffff, 0x01a5, 0x01ac, 0x01b3, 0x01ba, + 0x01c1, 0x01c8, 0x01cf, 0x01d6, 0x01dd, 0x01e4, 0x01eb, 0x01f2, + 0x01f9, 0x0200, 0x0207, 0x020e, 0x0215, 0x021c, 0x0223, 0x022a, + 0x0231, 0x0238, 0x023f, 0x0246, 0x024d, 0x0254, 0x025b, 0x0262, + 0x0269, 0x0270, 0x0277, 0x027e, 0x0285, 0x028c, 0x0293, 0x029a, + // Entry 29480 - 294BF + 0x02a1, 0x02a8, 0x02af, 0x02b6, 0x02bd, 0x02c4, 0x02cb, 0x02d2, + 0x02d9, 0x02e0, 0x02e7, 0x02ee, 0x02f5, 0x02fc, 0x0303, 0x030a, + 0x0311, 0x0318, 0x031f, 0x0326, 0x032d, 0x0334, 0x033b, 0x0342, + 0x0001, 0x0145, 0x0001, 0x0147, 0x000d, 0x0036, 0xffff, 0x0349, + 0x034d, 0x0351, 0x0355, 0x0359, 0x035d, 0x0361, 0x0365, 0x0369, + 0x036d, 0x0371, 0x0375, 0x0004, 0x0164, 0x015e, 0x015b, 0x0161, + 0x0001, 0x0036, 0x0379, 0x0001, 0x0036, 0x0389, 0x0001, 0x0036, + 0x0389, 0x0001, 0x0036, 0x0395, 0x0005, 0x016d, 0x0000, 0x0000, + // Entry 294C0 - 294FF + 0x0000, 0x01d8, 0x0002, 0x0170, 0x01a4, 0x0003, 0x0174, 0x0184, + 0x0194, 0x000e, 0x0036, 0xffff, 0x039b, 0x03a5, 0x03ac, 0x03b9, + 0x03c6, 0x03d0, 0x03e0, 0x03f3, 0x0403, 0x0413, 0x0420, 0x042d, + 0x0437, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, + 0x0422, 0x000e, 0x0036, 0xffff, 0x039b, 0x03a5, 0x03ac, 0x03b9, + 0x03c6, 0x03d0, 0x03e0, 0x03f3, 0x0403, 0x0413, 0x0420, 0x042d, + 0x0437, 0x0003, 0x01a8, 0x01b8, 0x01c8, 0x000e, 0x0036, 0xffff, + // Entry 29500 - 2953F + 0x039b, 0x03a5, 0x03ac, 0x03b9, 0x03c6, 0x03d0, 0x03e0, 0x03f3, + 0x0403, 0x0413, 0x0420, 0x042d, 0x0437, 0x000e, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x2215, 0x2218, 0x2426, 0x0422, 0x000e, 0x0036, 0xffff, + 0x039b, 0x03a5, 0x03ac, 0x03b9, 0x03c6, 0x03d0, 0x03e0, 0x03f3, + 0x0403, 0x0413, 0x0420, 0x042d, 0x0437, 0x0003, 0x01e2, 0x01e8, + 0x01dc, 0x0001, 0x01de, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, + 0x01e4, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x01ea, 0x0002, + // Entry 29540 - 2957F + 0x0000, 0x0425, 0x042a, 0x000a, 0x01f9, 0x0000, 0x0000, 0x0000, + 0x0000, 0x02ce, 0x0000, 0x0000, 0x0000, 0x025e, 0x0002, 0x01fc, + 0x022d, 0x0003, 0x0200, 0x020f, 0x021e, 0x000d, 0x0036, 0xffff, + 0x0036, 0x003d, 0x0044, 0x004b, 0x0052, 0x0059, 0x0060, 0x0067, + 0x006e, 0x0075, 0x007c, 0x0086, 0x000d, 0x0036, 0xffff, 0x0090, + 0x0094, 0x0098, 0x009c, 0x00a0, 0x00a4, 0x00a8, 0x00ac, 0x00b0, + 0x00b4, 0x00b8, 0x00bf, 0x000d, 0x0036, 0xffff, 0x0036, 0x003d, + 0x0044, 0x004b, 0x0052, 0x0059, 0x0060, 0x0067, 0x006e, 0x0075, + // Entry 29580 - 295BF + 0x007c, 0x0086, 0x0003, 0x0231, 0x0240, 0x024f, 0x000d, 0x0036, + 0xffff, 0x0036, 0x003d, 0x0044, 0x004b, 0x0052, 0x0059, 0x0060, + 0x0067, 0x006e, 0x0075, 0x007c, 0x0086, 0x000d, 0x0036, 0xffff, + 0x0090, 0x0094, 0x0098, 0x009c, 0x00a0, 0x00a4, 0x00a8, 0x00ac, + 0x00b0, 0x00b4, 0x00b8, 0x00bf, 0x000d, 0x0036, 0xffff, 0x0036, + 0x003d, 0x0044, 0x004b, 0x0052, 0x0059, 0x0060, 0x0067, 0x006e, + 0x0075, 0x007c, 0x0086, 0x0006, 0x0265, 0x0000, 0x0000, 0x0000, + 0x0278, 0x02bb, 0x0001, 0x0267, 0x0001, 0x0269, 0x000d, 0x0036, + // Entry 295C0 - 295FF + 0xffff, 0x00cd, 0x00d1, 0x00d5, 0x00d9, 0x00dd, 0x00e1, 0x00e5, + 0x00e9, 0x00ed, 0x00f1, 0x00f5, 0x00f9, 0x0001, 0x027a, 0x0001, + 0x027c, 0x003d, 0x0036, 0xffff, 0x01a5, 0x01ac, 0x01b3, 0x01ba, + 0x01c1, 0x01c8, 0x01cf, 0x01d6, 0x01dd, 0x01e4, 0x01eb, 0x01f2, + 0x01f9, 0x0200, 0x0207, 0x020e, 0x0215, 0x021c, 0x0223, 0x022a, + 0x0231, 0x0238, 0x023f, 0x0246, 0x024d, 0x0254, 0x025b, 0x0262, + 0x0269, 0x0270, 0x0277, 0x027e, 0x0285, 0x028c, 0x0293, 0x029a, + 0x02a1, 0x02a8, 0x02af, 0x02b6, 0x02bd, 0x02c4, 0x02cb, 0x02d2, + // Entry 29600 - 2963F + 0x02d9, 0x02e0, 0x02e7, 0x02ee, 0x02f5, 0x02fc, 0x0303, 0x030a, + 0x0311, 0x0318, 0x031f, 0x0326, 0x032d, 0x0334, 0x033b, 0x0342, + 0x0001, 0x02bd, 0x0001, 0x02bf, 0x000d, 0x0036, 0xffff, 0x0349, + 0x034d, 0x0351, 0x0355, 0x0359, 0x035d, 0x0361, 0x0365, 0x0369, + 0x036d, 0x0371, 0x0375, 0x0004, 0x02dc, 0x02d6, 0x02d3, 0x02d9, + 0x0001, 0x0036, 0x0379, 0x0001, 0x0036, 0x0389, 0x0001, 0x0036, + 0x0389, 0x0001, 0x0036, 0x0395, 0x0005, 0x02e5, 0x0000, 0x0000, + 0x0000, 0x0350, 0x0002, 0x02e8, 0x031c, 0x0003, 0x02ec, 0x02fc, + // Entry 29640 - 2967F + 0x030c, 0x000e, 0x0036, 0xffff, 0x0441, 0x0451, 0x045e, 0x0468, + 0x0475, 0x047c, 0x048f, 0x049c, 0x04a9, 0x04b6, 0x04bd, 0x04c7, + 0x04d4, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, + 0x0422, 0x000e, 0x0036, 0xffff, 0x0441, 0x0451, 0x045e, 0x0468, + 0x0475, 0x047c, 0x048f, 0x049c, 0x04a9, 0x04b6, 0x04bd, 0x04c7, + 0x04d4, 0x0003, 0x0320, 0x0330, 0x0340, 0x000e, 0x0036, 0xffff, + 0x0441, 0x0451, 0x045e, 0x0468, 0x0475, 0x047c, 0x048f, 0x049c, + // Entry 29680 - 296BF + 0x04a9, 0x04b6, 0x04bd, 0x04c7, 0x04d4, 0x000e, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x2215, 0x2218, 0x2426, 0x0422, 0x000e, 0x0036, 0xffff, + 0x0441, 0x0451, 0x045e, 0x0468, 0x0475, 0x047c, 0x048f, 0x049c, + 0x04a9, 0x04b6, 0x04bd, 0x04c7, 0x04d4, 0x0003, 0x035a, 0x0360, + 0x0354, 0x0001, 0x0356, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, + 0x035c, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x0362, 0x0002, + 0x0000, 0x0425, 0x042a, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 296C0 - 296FF + 0x0000, 0x036f, 0x0000, 0x0380, 0x0004, 0x037d, 0x0377, 0x0374, + 0x037a, 0x0001, 0x0036, 0x04e1, 0x0001, 0x0036, 0x04f5, 0x0001, + 0x0036, 0x002d, 0x0001, 0x0036, 0x0503, 0x0004, 0x038e, 0x0388, + 0x0385, 0x038b, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x039a, + 0x03ff, 0x0456, 0x048b, 0x0580, 0x05a5, 0x05b6, 0x05c7, 0x0002, + 0x039d, 0x03ce, 0x0003, 0x03a1, 0x03b0, 0x03bf, 0x000d, 0x0036, + 0xffff, 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, + // Entry 29700 - 2973F + 0x052d, 0x0532, 0x0537, 0x053d, 0x0543, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, 0x0036, 0xffff, 0x050a, + 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, + 0x0537, 0x053d, 0x0543, 0x0003, 0x03d2, 0x03e1, 0x03f0, 0x000d, + 0x0036, 0xffff, 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, + 0x0528, 0x052d, 0x0532, 0x0537, 0x053d, 0x0543, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + // Entry 29740 - 2977F + 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, 0x0036, 0xffff, + 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, + 0x0532, 0x0537, 0x053d, 0x0543, 0x0002, 0x0402, 0x042c, 0x0005, + 0x0408, 0x0411, 0x0423, 0x0000, 0x041a, 0x0007, 0x0036, 0x0549, + 0x054d, 0x0551, 0x0555, 0x0559, 0x055d, 0x0561, 0x0007, 0x0036, + 0x0549, 0x054d, 0x0551, 0x0555, 0x0559, 0x055d, 0x0561, 0x0007, + 0x0036, 0x0549, 0x054d, 0x0551, 0x0555, 0x0559, 0x055d, 0x0561, + 0x0007, 0x0036, 0x0565, 0x056f, 0x0579, 0x0583, 0x058d, 0x0597, + // Entry 29780 - 297BF + 0x05a1, 0x0005, 0x0432, 0x043b, 0x044d, 0x0000, 0x0444, 0x0007, + 0x0036, 0x0549, 0x054d, 0x0551, 0x0555, 0x0559, 0x055d, 0x0561, + 0x0007, 0x0036, 0x0549, 0x054d, 0x0551, 0x0555, 0x0559, 0x055d, + 0x0561, 0x0007, 0x0036, 0x0549, 0x054d, 0x0551, 0x0555, 0x0559, + 0x055d, 0x0561, 0x0007, 0x0036, 0x0565, 0x056f, 0x0579, 0x0583, + 0x058d, 0x0597, 0x05a1, 0x0002, 0x0459, 0x0472, 0x0003, 0x045d, + 0x0464, 0x046b, 0x0005, 0x0000, 0xffff, 0x04e3, 0x04e6, 0x04e9, + 0x04ec, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + // Entry 297C0 - 297FF + 0x0005, 0x0036, 0xffff, 0x05ab, 0x05b9, 0x05c7, 0x05d5, 0x0003, + 0x0476, 0x047d, 0x0484, 0x0005, 0x0000, 0xffff, 0x04e3, 0x04e6, + 0x04e9, 0x04ec, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x0005, 0x0036, 0xffff, 0x05ab, 0x05b9, 0x05c7, 0x05d5, + 0x0002, 0x048e, 0x0507, 0x0003, 0x0492, 0x04b9, 0x04e0, 0x000b, + 0x04a1, 0x04a7, 0x049e, 0x04aa, 0x04ad, 0x04b0, 0x04b3, 0x04a4, + 0x0000, 0x0000, 0x04b6, 0x0001, 0x0036, 0x05e3, 0x0001, 0x0036, + 0x05ed, 0x0001, 0x0036, 0x05f4, 0x0001, 0x0036, 0x05fb, 0x0001, + // Entry 29800 - 2983F + 0x0036, 0x0602, 0x0001, 0x0036, 0x0606, 0x0001, 0x0036, 0x060a, + 0x0001, 0x0036, 0x0611, 0x0001, 0x0036, 0x0615, 0x000b, 0x04c8, + 0x04ce, 0x04c5, 0x04d1, 0x04d4, 0x04d7, 0x04da, 0x04cb, 0x0000, + 0x0000, 0x04dd, 0x0001, 0x0036, 0x05e3, 0x0001, 0x0036, 0x05ed, + 0x0001, 0x0036, 0x05f4, 0x0001, 0x0036, 0x05fb, 0x0001, 0x0036, + 0x0602, 0x0001, 0x0036, 0x0606, 0x0001, 0x0036, 0x060a, 0x0001, + 0x0036, 0x0611, 0x0001, 0x0036, 0x0615, 0x000b, 0x04ef, 0x04f5, + 0x04ec, 0x04f8, 0x04fb, 0x04fe, 0x0501, 0x04f2, 0x0000, 0x0000, + // Entry 29840 - 2987F + 0x0504, 0x0001, 0x0036, 0x05e3, 0x0001, 0x0036, 0x05ed, 0x0001, + 0x0036, 0x05f4, 0x0001, 0x0036, 0x05fb, 0x0001, 0x0036, 0x0602, + 0x0001, 0x0036, 0x0606, 0x0001, 0x0036, 0x060a, 0x0001, 0x0036, + 0x0611, 0x0001, 0x0036, 0x0615, 0x0003, 0x050b, 0x0532, 0x0559, + 0x000b, 0x051a, 0x0520, 0x0517, 0x0523, 0x0526, 0x0529, 0x052c, + 0x051d, 0x0000, 0x0000, 0x052f, 0x0001, 0x0036, 0x05e3, 0x0001, + 0x0036, 0x05ed, 0x0001, 0x0036, 0x05f4, 0x0001, 0x0036, 0x05fb, + 0x0001, 0x0036, 0x0602, 0x0001, 0x0036, 0x0606, 0x0001, 0x0036, + // Entry 29880 - 298BF + 0x060a, 0x0001, 0x0036, 0x0611, 0x0001, 0x0036, 0x0615, 0x000b, + 0x0541, 0x0547, 0x053e, 0x054a, 0x054d, 0x0550, 0x0553, 0x0544, + 0x0000, 0x0000, 0x0556, 0x0001, 0x0036, 0x05e3, 0x0001, 0x0036, + 0x05ed, 0x0001, 0x0036, 0x05f4, 0x0001, 0x0036, 0x05fb, 0x0001, + 0x0036, 0x0602, 0x0001, 0x0036, 0x0606, 0x0001, 0x0036, 0x060a, + 0x0001, 0x0036, 0x0611, 0x0001, 0x0036, 0x0615, 0x000b, 0x0568, + 0x056e, 0x0565, 0x0571, 0x0574, 0x0577, 0x057a, 0x056b, 0x0000, + 0x0000, 0x057d, 0x0001, 0x0036, 0x05e3, 0x0001, 0x0036, 0x05ed, + // Entry 298C0 - 298FF + 0x0001, 0x0036, 0x05f4, 0x0001, 0x0036, 0x05fb, 0x0001, 0x0036, + 0x0602, 0x0001, 0x0036, 0x0606, 0x0001, 0x0036, 0x060a, 0x0001, + 0x0036, 0x0611, 0x0001, 0x0036, 0x0615, 0x0003, 0x058f, 0x059a, + 0x0584, 0x0002, 0x0587, 0x058b, 0x0002, 0x0036, 0x061c, 0x0636, + 0x0002, 0x0036, 0x0626, 0x063d, 0x0002, 0x0592, 0x0596, 0x0002, + 0x0036, 0x061c, 0x0636, 0x0002, 0x0036, 0x0626, 0x063d, 0x0002, + 0x059d, 0x05a1, 0x0002, 0x0009, 0x0078, 0x5780, 0x0002, 0x0000, + 0x04f5, 0x2701, 0x0004, 0x05b3, 0x05ad, 0x05aa, 0x05b0, 0x0001, + // Entry 29900 - 2993F + 0x0036, 0x064a, 0x0001, 0x0036, 0x065b, 0x0001, 0x001d, 0x0850, + 0x0001, 0x001d, 0x0850, 0x0004, 0x05c4, 0x05be, 0x05bb, 0x05c1, + 0x0001, 0x0036, 0x0668, 0x0001, 0x0005, 0x008f, 0x0001, 0x0005, + 0x0099, 0x0001, 0x0005, 0x00a1, 0x0004, 0x05d5, 0x05cf, 0x05cc, + 0x05d2, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0006, 0x05df, 0x0000, + 0x0000, 0x0000, 0x064a, 0x065d, 0x0002, 0x05e2, 0x0616, 0x0003, + 0x05e6, 0x05f6, 0x0606, 0x000e, 0x0036, 0x06d3, 0x067c, 0x0689, + // Entry 29940 - 2997F + 0x0696, 0x06a3, 0x06b0, 0x06bd, 0x06c9, 0x06e0, 0x06ea, 0x06f4, + 0x06fe, 0x0708, 0x070f, 0x000e, 0x0000, 0x003f, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, + 0x2218, 0x2426, 0x0422, 0x000e, 0x0036, 0x06d3, 0x067c, 0x0689, + 0x0696, 0x06a3, 0x06b0, 0x06bd, 0x06c9, 0x06e0, 0x06ea, 0x06f4, + 0x06fe, 0x0708, 0x070f, 0x0003, 0x061a, 0x062a, 0x063a, 0x000e, + 0x0036, 0x06d3, 0x067c, 0x0689, 0x0696, 0x06a3, 0x06b0, 0x06bd, + 0x06c9, 0x06e0, 0x06ea, 0x06f4, 0x06fe, 0x0708, 0x070f, 0x000e, + // Entry 29980 - 299BF + 0x0000, 0x003f, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x0422, 0x000e, + 0x0036, 0x06d3, 0x067c, 0x0689, 0x0696, 0x06a3, 0x06b0, 0x06bd, + 0x06c9, 0x06e0, 0x06ea, 0x06f4, 0x06fe, 0x0708, 0x070f, 0x0003, + 0x0653, 0x0658, 0x064e, 0x0001, 0x0650, 0x0001, 0x0000, 0x04ef, + 0x0001, 0x0655, 0x0001, 0x0000, 0x04ef, 0x0001, 0x065a, 0x0001, + 0x0000, 0x04ef, 0x0004, 0x066b, 0x0665, 0x0662, 0x0668, 0x0001, + 0x0036, 0x0719, 0x0001, 0x0036, 0x04f5, 0x0001, 0x0036, 0x002d, + // Entry 299C0 - 299FF + 0x0001, 0x0036, 0x002d, 0x0005, 0x0674, 0x0000, 0x0000, 0x0000, + 0x06d9, 0x0002, 0x0677, 0x06a8, 0x0003, 0x067b, 0x068a, 0x0699, + 0x000d, 0x0036, 0xffff, 0x072b, 0x0738, 0x0748, 0x0758, 0x0765, + 0x0772, 0x077f, 0x078c, 0x079c, 0x07af, 0x07b9, 0x07c3, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, 0x0036, + 0xffff, 0x072b, 0x0738, 0x0748, 0x0758, 0x0765, 0x0772, 0x077f, + 0x078c, 0x079c, 0x07af, 0x07b9, 0x07c3, 0x0003, 0x06ac, 0x06bb, + // Entry 29A00 - 29A3F + 0x06ca, 0x000d, 0x0036, 0xffff, 0x072b, 0x0738, 0x0748, 0x0758, + 0x0765, 0x0772, 0x077f, 0x078c, 0x079c, 0x07af, 0x07b9, 0x07c3, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, + 0x0036, 0xffff, 0x072b, 0x0738, 0x0748, 0x0758, 0x0765, 0x0772, + 0x077f, 0x078c, 0x079c, 0x07af, 0x07b9, 0x07c3, 0x0003, 0x06e2, + 0x06e7, 0x06dd, 0x0001, 0x06df, 0x0001, 0x0036, 0x07d0, 0x0001, + 0x06e4, 0x0001, 0x0036, 0x07d0, 0x0001, 0x06e9, 0x0001, 0x0036, + // Entry 29A40 - 29A7F + 0x07d0, 0x0008, 0x06f5, 0x0000, 0x0000, 0x0000, 0x075a, 0x076d, + 0x0000, 0x9006, 0x0002, 0x06f8, 0x0729, 0x0003, 0x06fc, 0x070b, + 0x071a, 0x000d, 0x0036, 0xffff, 0x07d7, 0x07e7, 0x07f4, 0x0816, + 0x0838, 0x085a, 0x0879, 0x0886, 0x0899, 0x08a9, 0x08bc, 0x08cf, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, + 0x0036, 0xffff, 0x07d7, 0x07e7, 0x07f4, 0x0816, 0x0838, 0x085a, + 0x0879, 0x0886, 0x0899, 0x08a9, 0x08bc, 0x08cf, 0x0003, 0x072d, + // Entry 29A80 - 29ABF + 0x073c, 0x074b, 0x000d, 0x0036, 0xffff, 0x07d7, 0x07e7, 0x07f4, + 0x0816, 0x0838, 0x085a, 0x0879, 0x0886, 0x0899, 0x08a9, 0x08bc, + 0x08cf, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, + 0x000d, 0x0036, 0xffff, 0x07d7, 0x07e7, 0x07f4, 0x0816, 0x0838, + 0x085a, 0x0879, 0x0886, 0x0899, 0x08a9, 0x08bc, 0x08cf, 0x0003, + 0x0763, 0x0768, 0x075e, 0x0001, 0x0760, 0x0001, 0x0000, 0x06c8, + 0x0001, 0x0765, 0x0001, 0x0000, 0x06c8, 0x0001, 0x076a, 0x0001, + // Entry 29AC0 - 29AFF + 0x0000, 0x06c8, 0x0004, 0x077b, 0x0775, 0x0772, 0x0778, 0x0001, + 0x0036, 0x0719, 0x0001, 0x0036, 0x04f5, 0x0001, 0x0036, 0x002d, + 0x0001, 0x0036, 0x002d, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0787, 0x096a, 0x0000, 0x097b, 0x0002, 0x078a, 0x087a, 0x0001, + 0x078c, 0x00ec, 0x0036, 0x08e5, 0x08ec, 0x08f3, 0x08fa, 0x0901, + 0x0908, 0x090f, 0x0916, 0x091d, 0x0924, 0x092b, 0x0932, 0x093f, + 0x094c, 0x0959, 0x0966, 0x0973, 0x097a, 0x0981, 0x0988, 0x098f, + 0x0996, 0x099d, 0x09a4, 0x09ab, 0x09b2, 0x09b9, 0x09c0, 0x09c7, + // Entry 29B00 - 29B3F + 0x09ce, 0x09d5, 0x09dc, 0x09e3, 0x09ea, 0x09f1, 0x09f8, 0x09ff, + 0x0a06, 0x0a0d, 0x0a14, 0x0a1b, 0x0a22, 0x0a29, 0x0a30, 0x0a37, + 0x0a3e, 0x0a45, 0x0a4c, 0x0a53, 0x0a5a, 0x0a61, 0x0a68, 0x0a6f, + 0x0a76, 0x0a7d, 0x0a84, 0x0a8b, 0x0a92, 0x0a99, 0x0aa0, 0x0aa7, + 0x0aae, 0x0ab5, 0x0abc, 0x0ac3, 0x0aca, 0x0ad1, 0x0ad8, 0x0adf, + 0x0ae6, 0x0aed, 0x0af4, 0x0afb, 0x0b02, 0x0b09, 0x0b10, 0x0b17, + 0x0b1e, 0x0b25, 0x0b2c, 0x0b33, 0x0b3a, 0x0b41, 0x0b48, 0x0b4f, + 0x0b56, 0x0b5d, 0x0b64, 0x0b6b, 0x0b72, 0x0b79, 0x0b80, 0x0b87, + // Entry 29B40 - 29B7F + 0x0b8e, 0x0b95, 0x0b9c, 0x0ba3, 0x0baa, 0x0bb1, 0x0bb8, 0x0bbf, + 0x0bc6, 0x0bcd, 0x0bd4, 0x0bdb, 0x0be2, 0x0be9, 0x0bf0, 0x0bf7, + 0x0bfe, 0x0c05, 0x0c0c, 0x0c13, 0x0c1a, 0x0c21, 0x0c28, 0x0c2f, + 0x0c36, 0x0c3d, 0x0c44, 0x0c4b, 0x0c52, 0x0c59, 0x0c60, 0x0c67, + 0x0c6e, 0x0c75, 0x0c7c, 0x0c83, 0x0c8a, 0x0c91, 0x0c98, 0x0c9f, + 0x0ca6, 0x0cad, 0x0cb4, 0x0cbb, 0x0cc2, 0x0cc9, 0x0cd0, 0x0cd7, + 0x0cde, 0x0ce5, 0x0cec, 0x0cf3, 0x0cfa, 0x0d01, 0x0d08, 0x0d0f, + 0x0d16, 0x0d1d, 0x0d24, 0x0d2b, 0x0d32, 0x0d39, 0x0d40, 0x0d47, + // Entry 29B80 - 29BBF + 0x0d4e, 0x0d55, 0x0d5c, 0x0d63, 0x0d6a, 0x0d71, 0x0d78, 0x0d7f, + 0x0d86, 0x0d8d, 0x0d94, 0x0d9b, 0x0da2, 0x0da9, 0x0db0, 0x0db7, + 0x0dbe, 0x0dc5, 0x0dcc, 0x0dd3, 0x0dda, 0x0de1, 0x0de8, 0x0def, + 0x0df6, 0x0dfd, 0x0e04, 0x0e0b, 0x0e12, 0x0e19, 0x0e20, 0x0e27, + 0x0e2e, 0x0e35, 0x0e3c, 0x0e43, 0x0e4a, 0x0e51, 0x0e58, 0x0e5f, + 0x0e66, 0x0e6d, 0x0e74, 0x0e7b, 0x0e82, 0x0e89, 0x0e90, 0x0e97, + 0x0e9e, 0x0ea5, 0x0eac, 0x0eb3, 0x0eba, 0x0ec1, 0x0ec8, 0x0ecf, + 0x0ed6, 0x0edd, 0x0ee4, 0x0eeb, 0x0ef2, 0x0ef9, 0x0f00, 0x0f07, + // Entry 29BC0 - 29BFF + 0x0f0e, 0x0f15, 0x0f1c, 0x0f23, 0x0f2a, 0x0f31, 0x0f38, 0x0f3f, + 0x0f46, 0x0f4d, 0x0f54, 0x0f5b, 0x0f62, 0x0f69, 0x0f70, 0x0001, + 0x087c, 0x00ec, 0x0036, 0x08e5, 0x08ec, 0x08f3, 0x08fa, 0x0901, + 0x0908, 0x090f, 0x0916, 0x091d, 0x0924, 0x092b, 0x0932, 0x093f, + 0x094c, 0x0959, 0x0966, 0x0973, 0x097a, 0x0981, 0x0988, 0x098f, + 0x0996, 0x099d, 0x09a4, 0x09ab, 0x09b2, 0x09b9, 0x09c0, 0x09c7, + 0x09ce, 0x09d5, 0x09dc, 0x09e3, 0x09ea, 0x09f1, 0x09f8, 0x09ff, + 0x0a06, 0x0a0d, 0x0a14, 0x0a1b, 0x0a22, 0x0a29, 0x0a30, 0x0a37, + // Entry 29C00 - 29C3F + 0x0a3e, 0x0a45, 0x0a4c, 0x0a53, 0x0a5a, 0x0a61, 0x0a68, 0x0a6f, + 0x0a76, 0x0a7d, 0x0a84, 0x0a8b, 0x0a92, 0x0a99, 0x0aa0, 0x0aa7, + 0x0aae, 0x0ab5, 0x0abc, 0x0ac3, 0x0aca, 0x0ad1, 0x0ad8, 0x0adf, + 0x0ae6, 0x0aed, 0x0af4, 0x0afb, 0x0b02, 0x0b09, 0x0b10, 0x0b17, + 0x0b1e, 0x0b25, 0x0b2c, 0x0b33, 0x0b3a, 0x0b41, 0x0b48, 0x0b4f, + 0x0b56, 0x0b5d, 0x0b64, 0x0b6b, 0x0b72, 0x0b79, 0x0b80, 0x0b87, + 0x0b8e, 0x0b95, 0x0b9c, 0x0ba3, 0x0baa, 0x0bb1, 0x0bb8, 0x0bbf, + 0x0bc6, 0x0bcd, 0x0bd4, 0x0bdb, 0x0be2, 0x0be9, 0x0bf0, 0x0bf7, + // Entry 29C40 - 29C7F + 0x0bfe, 0x0c05, 0x0c0c, 0x0c13, 0x0c1a, 0x0c21, 0x0c28, 0x0c2f, + 0x0c36, 0x0c3d, 0x0c44, 0x0c4b, 0x0c52, 0x0c59, 0x0c60, 0x0c67, + 0x0c6e, 0x0c75, 0x0c7c, 0x0c83, 0x0c8a, 0x0c91, 0x0c98, 0x0c9f, + 0x0ca6, 0x0cad, 0x0cb4, 0x0cbb, 0x0cc2, 0x0cc9, 0x0cd0, 0x0cd7, + 0x0cde, 0x0ce5, 0x0cec, 0x0cf3, 0x0cfa, 0x0d01, 0x0d08, 0x0d0f, + 0x0d16, 0x0d1d, 0x0d24, 0x0d2b, 0x0d32, 0x0d39, 0x0d40, 0x0d47, + 0x0d4e, 0x0d55, 0x0d5c, 0x0d63, 0x0d6a, 0x0d71, 0x0d78, 0x0d7f, + 0x0d86, 0x0d8d, 0x0d94, 0x0d9b, 0x0da2, 0x0da9, 0x0db0, 0x0db7, + // Entry 29C80 - 29CBF + 0x0dbe, 0x0dc5, 0x0dcc, 0x0dd3, 0x0dda, 0x0de1, 0x0de8, 0x0def, + 0x0df6, 0x0dfd, 0x0e04, 0x0e0b, 0x0e12, 0x0e19, 0x0e20, 0x0e27, + 0x0e2e, 0x0e35, 0x0e3c, 0x0e43, 0x0e4a, 0x0e51, 0x0e58, 0x0e5f, + 0x0e66, 0x0e6d, 0x0e74, 0x0e7b, 0x0e82, 0x0e89, 0x0e90, 0x0e97, + 0x0e9e, 0x0ea5, 0x0eac, 0x0eb3, 0x0eba, 0x0ec1, 0x0ec8, 0x0ecf, + 0x0ed6, 0x0edd, 0x0ee4, 0x0eeb, 0x0ef2, 0x0ef9, 0x0f00, 0x0f07, + 0x0f0e, 0x0f15, 0x0f1c, 0x0f23, 0x0f2a, 0x0f31, 0x0f38, 0x0f3f, + 0x0f46, 0x0f4d, 0x0f54, 0x0f77, 0x0f79, 0x0f7b, 0x0f7d, 0x0004, + // Entry 29CC0 - 29CFF + 0x0978, 0x0972, 0x096f, 0x0975, 0x0001, 0x0036, 0x0719, 0x0001, + 0x0036, 0x04f5, 0x0001, 0x0036, 0x04f5, 0x0001, 0x0036, 0x0f7f, + 0x0004, 0x0989, 0x0983, 0x0980, 0x0986, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0005, 0x0992, 0x0000, 0x0000, 0x0000, 0x09f7, 0x0002, + 0x0995, 0x09c6, 0x0003, 0x0999, 0x09a8, 0x09b7, 0x000d, 0x0036, + 0xffff, 0x0f8a, 0x0fa9, 0x0fc8, 0x0fd8, 0x0fe5, 0x0ff5, 0x100e, + 0x1018, 0x1028, 0x1035, 0x103c, 0x1049, 0x000d, 0x0000, 0xffff, + // Entry 29D00 - 29D3F + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, 0x0036, 0xffff, 0x0f8a, + 0x0fa9, 0x0fc8, 0x0fd8, 0x0fe5, 0x0ff5, 0x100e, 0x1018, 0x1028, + 0x1035, 0x103c, 0x1049, 0x0003, 0x09ca, 0x09d9, 0x09e8, 0x000d, + 0x0036, 0xffff, 0x0f8a, 0x0fa9, 0x0fc8, 0x0fd8, 0x0fe5, 0x0ff5, + 0x100e, 0x1018, 0x1028, 0x1035, 0x103c, 0x1049, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, 0x0036, 0xffff, + // Entry 29D40 - 29D7F + 0x0f8a, 0x0fa9, 0x0fc8, 0x0fd8, 0x0fe5, 0x0ff5, 0x100e, 0x1018, + 0x1028, 0x1035, 0x103c, 0x1049, 0x0003, 0x0a00, 0x0a05, 0x09fb, + 0x0001, 0x09fd, 0x0001, 0x0000, 0x1a1d, 0x0001, 0x0a02, 0x0001, + 0x0000, 0x1a1d, 0x0001, 0x0a07, 0x0001, 0x0000, 0x1a1d, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0a13, 0x0a28, 0x0000, 0x9006, + 0x0003, 0x0a1c, 0x0a22, 0x0a17, 0x0001, 0x0a19, 0x0001, 0x0036, + 0x105c, 0x0001, 0x0a1e, 0x0002, 0x0036, 0x105c, 0x1066, 0x0001, + 0x0a24, 0x0002, 0x0036, 0x105c, 0x1066, 0x0004, 0x0a36, 0x0a30, + // Entry 29D80 - 29DBF + 0x0a2d, 0x0a33, 0x0001, 0x0036, 0x0719, 0x0001, 0x0036, 0x04f5, + 0x0001, 0x0036, 0x002d, 0x0001, 0x0036, 0x002d, 0x0042, 0x0a7c, + 0x0a81, 0x0a86, 0x0a8b, 0x0aa0, 0x0ab5, 0x0aca, 0x0adf, 0x0aef, + 0x0aff, 0x0b14, 0x0b29, 0x0b3e, 0x0b57, 0x0b70, 0x0b89, 0x0b8e, + 0x0b93, 0x0b98, 0x0baf, 0x0bc6, 0x0bdd, 0x0be2, 0x0be7, 0x0bec, + 0x0bf1, 0x0bf6, 0x0bfb, 0x0c00, 0x0c05, 0x0c0a, 0x0c1c, 0x0c2e, + 0x0c40, 0x0c52, 0x0c64, 0x0c76, 0x0c88, 0x0c9a, 0x0cac, 0x0cbe, + 0x0cd0, 0x0ce2, 0x0cf4, 0x0d06, 0x0d18, 0x0d2a, 0x0d3c, 0x0d4e, + // Entry 29DC0 - 29DFF + 0x0d60, 0x0d72, 0x0d84, 0x0d89, 0x0d8e, 0x0d93, 0x0da7, 0x0db7, + 0x0dc7, 0x0ddb, 0x0deb, 0x0dfb, 0x0e0f, 0x0e1f, 0x0e2f, 0x0e34, + 0x0e39, 0x0001, 0x0a7e, 0x0001, 0x0036, 0x106d, 0x0001, 0x0a83, + 0x0001, 0x0036, 0x106d, 0x0001, 0x0a88, 0x0001, 0x0036, 0x106d, + 0x0003, 0x0a8f, 0x0a92, 0x0a97, 0x0001, 0x0036, 0x1074, 0x0003, + 0x0036, 0x1078, 0x107f, 0x1086, 0x0002, 0x0a9a, 0x0a9d, 0x0001, + 0x0036, 0x108d, 0x0001, 0x0036, 0x1098, 0x0003, 0x0aa4, 0x0aa7, + 0x0aac, 0x0001, 0x0036, 0x1074, 0x0003, 0x0036, 0x1078, 0x107f, + // Entry 29E00 - 29E3F + 0x1086, 0x0002, 0x0aaf, 0x0ab2, 0x0001, 0x0036, 0x108d, 0x0001, + 0x0036, 0x1098, 0x0003, 0x0ab9, 0x0abc, 0x0ac1, 0x0001, 0x0036, + 0x1074, 0x0003, 0x0036, 0x1078, 0x107f, 0x1086, 0x0002, 0x0ac4, + 0x0ac7, 0x0001, 0x0036, 0x10a3, 0x0001, 0x0036, 0x10ad, 0x0003, + 0x0ace, 0x0ad1, 0x0ad6, 0x0001, 0x0036, 0x10b7, 0x0003, 0x0036, + 0x10c1, 0x10ce, 0x10db, 0x0002, 0x0ad9, 0x0adc, 0x0001, 0x0036, + 0x10e8, 0x0001, 0x0036, 0x10f9, 0x0003, 0x0ae3, 0x0000, 0x0ae6, + 0x0001, 0x0036, 0x10b7, 0x0002, 0x0ae9, 0x0aec, 0x0001, 0x0036, + // Entry 29E40 - 29E7F + 0x10e8, 0x0001, 0x0036, 0x10f9, 0x0003, 0x0af3, 0x0000, 0x0af6, + 0x0001, 0x0036, 0x10b7, 0x0002, 0x0af9, 0x0afc, 0x0001, 0x0036, + 0x110a, 0x0001, 0x0036, 0x111a, 0x0003, 0x0b03, 0x0b06, 0x0b0b, + 0x0001, 0x0036, 0x054d, 0x0003, 0x0036, 0x112a, 0x1131, 0x1138, + 0x0002, 0x0b0e, 0x0b11, 0x0001, 0x0036, 0x113f, 0x0001, 0x0036, + 0x114d, 0x0003, 0x0b18, 0x0b1b, 0x0b20, 0x0001, 0x0036, 0x054d, + 0x0003, 0x0036, 0x112a, 0x1131, 0x1138, 0x0002, 0x0b23, 0x0b26, + 0x0001, 0x0036, 0x113f, 0x0001, 0x0036, 0x114d, 0x0003, 0x0b2d, + // Entry 29E80 - 29EBF + 0x0b30, 0x0b35, 0x0001, 0x0036, 0x054d, 0x0003, 0x0036, 0x112a, + 0x1131, 0x1138, 0x0002, 0x0b38, 0x0b3b, 0x0001, 0x0036, 0x115b, + 0x0001, 0x0036, 0x1168, 0x0004, 0x0b43, 0x0b46, 0x0b4b, 0x0b54, + 0x0001, 0x0036, 0x1175, 0x0003, 0x0036, 0x1179, 0x1180, 0x1187, + 0x0002, 0x0b4e, 0x0b51, 0x0001, 0x0036, 0x118e, 0x0001, 0x0036, + 0x119c, 0x0001, 0x0036, 0x11aa, 0x0004, 0x0b5c, 0x0b5f, 0x0b64, + 0x0b6d, 0x0001, 0x0036, 0x1175, 0x0003, 0x0036, 0x1179, 0x1180, + 0x1187, 0x0002, 0x0b67, 0x0b6a, 0x0001, 0x0036, 0x118e, 0x0001, + // Entry 29EC0 - 29EFF + 0x0036, 0x119c, 0x0001, 0x0036, 0x11aa, 0x0004, 0x0b75, 0x0b78, + 0x0b7d, 0x0b86, 0x0001, 0x0036, 0x1175, 0x0003, 0x0036, 0x1179, + 0x1180, 0x1187, 0x0002, 0x0b80, 0x0b83, 0x0001, 0x0036, 0x11b8, + 0x0001, 0x0036, 0x11c5, 0x0001, 0x0036, 0x11d2, 0x0001, 0x0b8b, + 0x0001, 0x0036, 0x11df, 0x0001, 0x0b90, 0x0001, 0x0036, 0x11df, + 0x0001, 0x0b95, 0x0001, 0x0036, 0x11df, 0x0003, 0x0b9c, 0x0b9f, + 0x0ba6, 0x0001, 0x0036, 0x0549, 0x0005, 0x0036, 0x11f9, 0x1200, + 0x1207, 0x11ef, 0x120e, 0x0002, 0x0ba9, 0x0bac, 0x0001, 0x0036, + // Entry 29F00 - 29F3F + 0x1218, 0x0001, 0x0036, 0x1223, 0x0003, 0x0bb3, 0x0bb6, 0x0bbd, + 0x0001, 0x0036, 0x0549, 0x0005, 0x0036, 0x11f9, 0x1200, 0x1207, + 0x11ef, 0x120e, 0x0002, 0x0bc0, 0x0bc3, 0x0001, 0x0036, 0x1218, + 0x0001, 0x0036, 0x1223, 0x0003, 0x0bca, 0x0bcd, 0x0bd4, 0x0001, + 0x0036, 0x0549, 0x0005, 0x0036, 0x11f9, 0x1200, 0x1207, 0x11ef, + 0x120e, 0x0002, 0x0bd7, 0x0bda, 0x0001, 0x0036, 0x122e, 0x0001, + 0x0036, 0x1238, 0x0001, 0x0bdf, 0x0001, 0x0036, 0x1242, 0x0001, + 0x0be4, 0x0001, 0x0036, 0x1242, 0x0001, 0x0be9, 0x0001, 0x0036, + // Entry 29F40 - 29F7F + 0x124f, 0x0001, 0x0bee, 0x0001, 0x0036, 0x1256, 0x0001, 0x0bf3, + 0x0001, 0x0036, 0x1256, 0x0001, 0x0bf8, 0x0001, 0x0036, 0x1256, + 0x0001, 0x0bfd, 0x0001, 0x0036, 0x125d, 0x0001, 0x0c02, 0x0001, + 0x0036, 0x125d, 0x0001, 0x0c07, 0x0001, 0x0036, 0x125d, 0x0003, + 0x0000, 0x0c0e, 0x0c13, 0x0003, 0x0036, 0x1270, 0x1283, 0x1296, + 0x0002, 0x0c16, 0x0c19, 0x0001, 0x0036, 0x12a9, 0x0001, 0x0036, + 0x12c0, 0x0003, 0x0000, 0x0c20, 0x0c25, 0x0003, 0x0036, 0x12d7, + 0x12e7, 0x12f7, 0x0002, 0x0c28, 0x0c2b, 0x0001, 0x0036, 0x1307, + // Entry 29F80 - 29FBF + 0x0001, 0x0036, 0x131b, 0x0003, 0x0000, 0x0c32, 0x0c37, 0x0003, + 0x0036, 0x12d7, 0x12e7, 0x12f7, 0x0002, 0x0c3a, 0x0c3d, 0x0001, + 0x0036, 0x132f, 0x0001, 0x0036, 0x1342, 0x0003, 0x0000, 0x0c44, + 0x0c49, 0x0003, 0x0036, 0x1355, 0x1368, 0x137b, 0x0002, 0x0c4c, + 0x0c4f, 0x0001, 0x0036, 0x138e, 0x0001, 0x0036, 0x13a5, 0x0003, + 0x0000, 0x0c56, 0x0c5b, 0x0003, 0x0036, 0x13bc, 0x13cc, 0x13dc, + 0x0002, 0x0c5e, 0x0c61, 0x0001, 0x0036, 0x13ec, 0x0001, 0x0036, + 0x1400, 0x0003, 0x0000, 0x0c68, 0x0c6d, 0x0003, 0x0036, 0x13bc, + // Entry 29FC0 - 29FFF + 0x13cc, 0x13dc, 0x0002, 0x0c70, 0x0c73, 0x0001, 0x0036, 0x1414, + 0x0001, 0x0036, 0x1427, 0x0003, 0x0000, 0x0c7a, 0x0c7f, 0x0003, + 0x0036, 0x143a, 0x144d, 0x1460, 0x0002, 0x0c82, 0x0c85, 0x0001, + 0x0036, 0x1473, 0x0001, 0x0036, 0x148a, 0x0003, 0x0000, 0x0c8c, + 0x0c91, 0x0003, 0x0036, 0x14a1, 0x14b1, 0x14c1, 0x0002, 0x0c94, + 0x0c97, 0x0001, 0x0036, 0x14d1, 0x0001, 0x0036, 0x14e5, 0x0003, + 0x0000, 0x0c9e, 0x0ca3, 0x0003, 0x0036, 0x14a1, 0x14b1, 0x14c1, + 0x0002, 0x0ca6, 0x0ca9, 0x0001, 0x0036, 0x14f9, 0x0001, 0x0036, + // Entry 2A000 - 2A03F + 0x150c, 0x0003, 0x0000, 0x0cb0, 0x0cb5, 0x0003, 0x0036, 0x151f, + 0x1532, 0x1545, 0x0002, 0x0cb8, 0x0cbb, 0x0001, 0x0036, 0x1558, + 0x0001, 0x0036, 0x156f, 0x0003, 0x0000, 0x0cc2, 0x0cc7, 0x0003, + 0x0036, 0x1586, 0x1596, 0x15a6, 0x0002, 0x0cca, 0x0ccd, 0x0001, + 0x0036, 0x15b6, 0x0001, 0x0036, 0x15ca, 0x0003, 0x0000, 0x0cd4, + 0x0cd9, 0x0003, 0x0036, 0x1586, 0x1596, 0x15a6, 0x0002, 0x0cdc, + 0x0cdf, 0x0001, 0x0036, 0x15de, 0x0001, 0x0036, 0x15f1, 0x0003, + 0x0000, 0x0ce6, 0x0ceb, 0x0003, 0x0036, 0x1604, 0x1617, 0x162a, + // Entry 2A040 - 2A07F + 0x0002, 0x0cee, 0x0cf1, 0x0001, 0x0036, 0x163d, 0x0001, 0x0036, + 0x1654, 0x0003, 0x0000, 0x0cf8, 0x0cfd, 0x0003, 0x0036, 0x166b, + 0x167b, 0x168b, 0x0002, 0x0d00, 0x0d03, 0x0001, 0x0036, 0x169b, + 0x0001, 0x0036, 0x16af, 0x0003, 0x0000, 0x0d0a, 0x0d0f, 0x0003, + 0x0036, 0x166b, 0x167b, 0x168b, 0x0002, 0x0d12, 0x0d15, 0x0001, + 0x0036, 0x16c3, 0x0001, 0x0036, 0x16d6, 0x0003, 0x0000, 0x0d1c, + 0x0d21, 0x0003, 0x0036, 0x16e9, 0x16fc, 0x170f, 0x0002, 0x0d24, + 0x0d27, 0x0001, 0x0036, 0x1722, 0x0001, 0x0036, 0x1739, 0x0003, + // Entry 2A080 - 2A0BF + 0x0000, 0x0d2e, 0x0d33, 0x0003, 0x0036, 0x1750, 0x1760, 0x1770, + 0x0002, 0x0d36, 0x0d39, 0x0001, 0x0036, 0x1780, 0x0001, 0x0036, + 0x1794, 0x0003, 0x0000, 0x0d40, 0x0d45, 0x0003, 0x0036, 0x1750, + 0x1760, 0x1770, 0x0002, 0x0d48, 0x0d4b, 0x0001, 0x0036, 0x17a8, + 0x0001, 0x0036, 0x17bb, 0x0003, 0x0000, 0x0d52, 0x0d57, 0x0003, + 0x0036, 0x17ce, 0x17e1, 0x17f4, 0x0002, 0x0d5a, 0x0d5d, 0x0001, + 0x0036, 0x1807, 0x0001, 0x0036, 0x181e, 0x0003, 0x0000, 0x0d64, + 0x0d69, 0x0003, 0x0036, 0x1835, 0x1845, 0x1855, 0x0002, 0x0d6c, + // Entry 2A0C0 - 2A0FF + 0x0d6f, 0x0001, 0x0036, 0x1865, 0x0001, 0x0036, 0x1879, 0x0003, + 0x0000, 0x0d76, 0x0d7b, 0x0003, 0x0036, 0x1835, 0x1845, 0x1855, + 0x0002, 0x0d7e, 0x0d81, 0x0001, 0x0036, 0x188d, 0x0001, 0x0036, + 0x18a0, 0x0001, 0x0d86, 0x0001, 0x0036, 0x18b3, 0x0001, 0x0d8b, + 0x0001, 0x0036, 0x18b3, 0x0001, 0x0d90, 0x0001, 0x0036, 0x18b3, + 0x0003, 0x0d97, 0x0d9a, 0x0d9e, 0x0001, 0x0036, 0x18c1, 0x0002, + 0x0036, 0xffff, 0x18c5, 0x0002, 0x0da1, 0x0da4, 0x0001, 0x0036, + 0x18d4, 0x0001, 0x0036, 0x18e2, 0x0003, 0x0dab, 0x0000, 0x0dae, + // Entry 2A100 - 2A13F + 0x0001, 0x0036, 0x18c1, 0x0002, 0x0db1, 0x0db4, 0x0001, 0x0036, + 0x18d4, 0x0001, 0x0036, 0x18e2, 0x0003, 0x0dbb, 0x0000, 0x0dbe, + 0x0001, 0x0036, 0x18c1, 0x0002, 0x0dc1, 0x0dc4, 0x0001, 0x0036, + 0x18f0, 0x0001, 0x0036, 0x18fd, 0x0003, 0x0dcb, 0x0dce, 0x0dd2, + 0x0001, 0x0036, 0x190a, 0x0002, 0x0036, 0xffff, 0x190e, 0x0002, + 0x0dd5, 0x0dd8, 0x0001, 0x0036, 0x191a, 0x0001, 0x0036, 0x1925, + 0x0003, 0x0ddf, 0x0000, 0x0de2, 0x0001, 0x0036, 0x190a, 0x0002, + 0x0de5, 0x0de8, 0x0001, 0x0036, 0x191a, 0x0001, 0x0036, 0x1925, + // Entry 2A140 - 2A17F + 0x0003, 0x0def, 0x0000, 0x0df2, 0x0001, 0x0036, 0x190a, 0x0002, + 0x0df5, 0x0df8, 0x0001, 0x0036, 0x1930, 0x0001, 0x0036, 0x193a, + 0x0003, 0x0dff, 0x0e02, 0x0e06, 0x0001, 0x0036, 0x1944, 0x0002, + 0x0036, 0xffff, 0x1948, 0x0002, 0x0e09, 0x0e0c, 0x0001, 0x0036, + 0x194c, 0x0001, 0x0036, 0x1957, 0x0003, 0x0e13, 0x0000, 0x0e16, + 0x0001, 0x0036, 0x1944, 0x0002, 0x0e19, 0x0e1c, 0x0001, 0x0036, + 0x194c, 0x0001, 0x0036, 0x1957, 0x0003, 0x0e23, 0x0000, 0x0e26, + 0x0001, 0x0036, 0x1944, 0x0002, 0x0e29, 0x0e2c, 0x0001, 0x0036, + // Entry 2A180 - 2A1BF + 0x1962, 0x0001, 0x0036, 0x196c, 0x0001, 0x0e31, 0x0001, 0x0036, + 0x1976, 0x0001, 0x0e36, 0x0001, 0x0036, 0x1976, 0x0001, 0x0e3b, + 0x0001, 0x0036, 0x1976, 0x0004, 0x0e43, 0x0e48, 0x0e4d, 0x0e5c, + 0x0003, 0x0000, 0x1dc7, 0x2ae8, 0x2aef, 0x0003, 0x0036, 0x1989, + 0x1993, 0x19a0, 0x0002, 0x0000, 0x0e50, 0x0003, 0x0000, 0x0e57, + 0x0e54, 0x0001, 0x0036, 0x19ad, 0x0003, 0x0036, 0xffff, 0x19bd, + 0x19cd, 0x0002, 0x1043, 0x0e5f, 0x0003, 0x0e63, 0x0fa3, 0x0f03, + 0x009e, 0x0036, 0xffff, 0xffff, 0xffff, 0xffff, 0x1a83, 0x1acb, + // Entry 2A1C0 - 2A1FF + 0x1b52, 0x1b91, 0x1be2, 0x1c33, 0x1c84, 0x1cde, 0x1d26, 0x1dda, + 0x1e19, 0x1e6a, 0x1ecd, 0x1f15, 0x1f4b, 0x1fb7, 0x202c, 0x2098, + 0x2104, 0x2167, 0x21a6, 0xffff, 0xffff, 0x2226, 0xffff, 0x2296, + 0xffff, 0x2313, 0x2352, 0x237f, 0x23ac, 0xffff, 0xffff, 0x2435, + 0x247d, 0x24c5, 0xffff, 0xffff, 0xffff, 0x2564, 0xffff, 0x25cb, + 0x2625, 0xffff, 0x2692, 0x26e3, 0x274f, 0xffff, 0xffff, 0xffff, + 0xffff, 0x27ec, 0xffff, 0xffff, 0x2869, 0x28d5, 0xffff, 0xffff, + 0x2974, 0x29f2, 0x2a1f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 2A200 - 2A23F + 0xffff, 0x2aee, 0x2b24, 0x2b75, 0x2bbd, 0x2bea, 0xffff, 0xffff, + 0x2cd6, 0xffff, 0x2d16, 0xffff, 0xffff, 0x2db2, 0xffff, 0x2e4c, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2ee9, 0xffff, 0x2f53, 0x2fad, + 0x3007, 0x3061, 0xffff, 0xffff, 0xffff, 0x30d9, 0x313c, 0x319f, + 0xffff, 0xffff, 0x3240, 0x32f5, 0x3358, 0x3397, 0xffff, 0xffff, + 0x3411, 0x3459, 0x348f, 0xffff, 0x34f6, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x361b, 0x365a, 0x3690, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x3766, 0xffff, 0xffff, 0x37bf, + // Entry 2A240 - 2A27F + 0xffff, 0x3808, 0xffff, 0x387b, 0x38c3, 0x391d, 0xffff, 0x3972, + 0x39cc, 0xffff, 0xffff, 0xffff, 0x3a77, 0x3abf, 0xffff, 0xffff, + 0x19e9, 0x1b0a, 0x1d5c, 0x1d9b, 0xffff, 0xffff, 0x2dfa, 0x35a7, + 0x009e, 0x0036, 0x1a1f, 0x1a3b, 0x1a54, 0x1a6a, 0x1a99, 0x1ade, + 0x1b65, 0x1baa, 0x1bfb, 0x1c4c, 0x1ca0, 0x1cf4, 0x1d36, 0x1ded, + 0x1e32, 0x1e89, 0x1ee3, 0x1f25, 0x1f6d, 0x1fdc, 0x204e, 0x20ba, + 0x2123, 0x217a, 0x21c2, 0x2200, 0x2213, 0x223c, 0x226e, 0x22af, + 0x2300, 0x2326, 0x235f, 0x238c, 0x23c8, 0x2406, 0x241f, 0x244b, + // Entry 2A280 - 2A2BF + 0x2493, 0x24d8, 0x2504, 0x251d, 0x254b, 0x257d, 0x25b5, 0x25e7, + 0x263e, 0x2676, 0x26ab, 0x2705, 0x2762, 0x278e, 0x27a4, 0x27bd, + 0x27d3, 0x2802, 0x2834, 0x2850, 0x288b, 0x28f7, 0x2951, 0x2961, + 0x299c, 0x29ff, 0x2a2f, 0x2a55, 0x2a68, 0x2a7b, 0x2a91, 0x2ab0, + 0x2acf, 0x2afe, 0x2b3d, 0x2b8b, 0x2bca, 0x2c24, 0x2c9e, 0x2cba, + 0x2ce3, 0x2d03, 0x2d35, 0x2d79, 0x2d9c, 0x2dc8, 0x2e30, 0x2e5f, + 0x2e8b, 0x2ea1, 0x2eb7, 0x2ecd, 0x2f02, 0x2f3a, 0x2f6f, 0x2fc9, + 0x3023, 0x3074, 0x30a0, 0x30b6, 0x30c6, 0x30f8, 0x315b, 0x31c4, + // Entry 2A2C0 - 2A2FF + 0x3214, 0x3224, 0x3271, 0x3314, 0x336b, 0x33ad, 0x33df, 0x33ef, + 0x3427, 0x3469, 0x34a5, 0x34d7, 0x351e, 0x3574, 0x358a, 0x359a, + 0x35ef, 0x3605, 0x362e, 0x366a, 0x36a0, 0x36c6, 0x36dc, 0x36f8, + 0x3711, 0x3730, 0x3743, 0x3756, 0x3773, 0x3793, 0x37ac, 0x37cf, + 0x37f5, 0x3827, 0x386b, 0x3891, 0x38df, 0x3930, 0x395c, 0x398e, + 0x39e8, 0x3a26, 0x3a42, 0x3a58, 0x3a8d, 0x3ade, 0x2941, 0x32d9, + 0x19f9, 0x1b20, 0x1d6f, 0x1dae, 0x22e7, 0x2d8c, 0x2e0a, 0x35bd, + 0x009e, 0x0036, 0xffff, 0xffff, 0xffff, 0xffff, 0x1ab2, 0x1af4, + // Entry 2A300 - 2A33F + 0x1b7b, 0x1bc6, 0x1c17, 0x1c68, 0x1cbf, 0x1d0d, 0x1d49, 0x1e03, + 0x1e4e, 0x1eab, 0x1efc, 0x1f38, 0x1f92, 0x2004, 0x2073, 0x20df, + 0x2145, 0x2190, 0x21e1, 0xffff, 0xffff, 0x2255, 0xffff, 0x22cb, + 0xffff, 0x233c, 0x236f, 0x239c, 0x23e7, 0xffff, 0xffff, 0x2464, + 0x24ac, 0x24ee, 0xffff, 0xffff, 0xffff, 0x2599, 0xffff, 0x2606, + 0x265a, 0xffff, 0x26c7, 0x272a, 0x2778, 0xffff, 0xffff, 0xffff, + 0xffff, 0x281b, 0xffff, 0xffff, 0x28b0, 0x291c, 0xffff, 0xffff, + 0x29c7, 0x2a0f, 0x2a42, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 2A340 - 2A37F + 0xffff, 0x2b11, 0x2b59, 0x2ba4, 0x2bda, 0x2c61, 0xffff, 0xffff, + 0x2cf3, 0xffff, 0x2d57, 0xffff, 0xffff, 0x2de1, 0xffff, 0x2e75, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2f1e, 0xffff, 0x2f8e, 0x2fe8, + 0x3042, 0x308a, 0xffff, 0xffff, 0xffff, 0x311a, 0x317d, 0x31ec, + 0xffff, 0xffff, 0x32a5, 0x3336, 0x3381, 0x33c6, 0xffff, 0xffff, + 0x3440, 0x347c, 0x34be, 0xffff, 0x3549, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x3644, 0x367d, 0x36b3, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x3783, 0xffff, 0xffff, 0x37e2, + // Entry 2A380 - 2A3BF + 0xffff, 0x3849, 0xffff, 0x38aa, 0x38fe, 0x3946, 0xffff, 0x39ad, + 0x3a07, 0xffff, 0xffff, 0xffff, 0x3aa6, 0x3b00, 0xffff, 0xffff, + 0x1a0c, 0x1b39, 0x1d85, 0x1dc4, 0xffff, 0xffff, 0x2e1d, 0x35d6, + 0x0003, 0x1047, 0x10e1, 0x1094, 0x004b, 0x001d, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 2A3C0 - 2A3FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x00db, 0x004b, 0x0037, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 2A400 - 2A43F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x004b, 0x0037, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 2A440 - 2A47F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 2A480 - 2A4BF + 0xffff, 0xffff, 0x0004, 0x0003, 0x0004, 0x0142, 0x01dc, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0038, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, + 0x0027, 0x0004, 0x0024, 0x001e, 0x001b, 0x0021, 0x0001, 0x0002, + 0x031a, 0x0001, 0x0000, 0x049a, 0x0001, 0x0000, 0x04a5, 0x0001, + 0x0000, 0x04af, 0x0004, 0x0035, 0x002f, 0x002c, 0x0032, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0008, 0x0041, 0x00a6, 0x0000, 0x00e7, + // Entry 2A4C0 - 2A4FF + 0x00ff, 0x010f, 0x0120, 0x0131, 0x0002, 0x0044, 0x0075, 0x0003, + 0x0048, 0x0057, 0x0066, 0x000d, 0x0037, 0xffff, 0x0008, 0x0016, + 0x0027, 0x0039, 0x004f, 0x005d, 0x0077, 0x0087, 0x009e, 0x00ba, + 0x00cc, 0x00e2, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, + 0x2426, 0x000d, 0x0037, 0xffff, 0x0008, 0x0016, 0x0027, 0x0039, + 0x004f, 0x005d, 0x0077, 0x0087, 0x009e, 0x00ba, 0x00cc, 0x00e2, + 0x0003, 0x0079, 0x0088, 0x0097, 0x000d, 0x0037, 0xffff, 0x0008, + // Entry 2A500 - 2A53F + 0x0016, 0x0027, 0x0039, 0x004f, 0x005d, 0x0077, 0x0087, 0x009e, + 0x00ba, 0x00cc, 0x00e2, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, + 0x2218, 0x2426, 0x000d, 0x0037, 0xffff, 0x0008, 0x0016, 0x0027, + 0x0039, 0x004f, 0x005d, 0x0077, 0x0087, 0x009e, 0x00ba, 0x00cc, + 0x00e2, 0x0002, 0x00a9, 0x00c8, 0x0003, 0x00ad, 0x00b6, 0x00bf, + 0x0007, 0x0037, 0x00f6, 0x00ff, 0x0108, 0x0117, 0x0126, 0x0132, + 0x013f, 0x0007, 0x0037, 0x0148, 0x014e, 0x0154, 0x0158, 0x015e, + // Entry 2A540 - 2A57F + 0x0164, 0x0168, 0x0007, 0x0037, 0x00f6, 0x00ff, 0x0108, 0x0117, + 0x0126, 0x0132, 0x013f, 0x0003, 0x00cc, 0x00d5, 0x00de, 0x0007, + 0x0037, 0x00f6, 0x00ff, 0x0108, 0x0117, 0x0126, 0x0132, 0x013f, + 0x0007, 0x0037, 0x0148, 0x014e, 0x0154, 0x0158, 0x015e, 0x0164, + 0x0168, 0x0007, 0x0037, 0x00f6, 0x00ff, 0x0108, 0x0117, 0x0126, + 0x0132, 0x013f, 0x0001, 0x00e9, 0x0003, 0x00ed, 0x0000, 0x00f6, + 0x0002, 0x00f0, 0x00f3, 0x0001, 0x0037, 0x016c, 0x0001, 0x0037, + 0x0179, 0x0002, 0x00f9, 0x00fc, 0x0001, 0x0037, 0x016c, 0x0001, + // Entry 2A580 - 2A5BF + 0x0037, 0x0179, 0x0003, 0x0109, 0x0000, 0x0103, 0x0001, 0x0105, + 0x0002, 0x0037, 0x018a, 0x01c9, 0x0001, 0x010b, 0x0002, 0x0000, + 0x04f5, 0x2701, 0x0004, 0x011d, 0x0117, 0x0114, 0x011a, 0x0001, + 0x0002, 0x04ca, 0x0001, 0x0000, 0x050b, 0x0001, 0x0000, 0x0514, + 0x0001, 0x0000, 0x051c, 0x0004, 0x012e, 0x0128, 0x0125, 0x012b, + 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, + 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, 0x013f, 0x0139, 0x0136, + 0x013c, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + // Entry 2A5C0 - 2A5FF + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x003a, 0x0000, 0x0000, + 0x0000, 0x017d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x018c, + 0x0000, 0x0000, 0x019b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x01aa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x01be, 0x0000, 0x0000, 0x01cd, + // Entry 2A600 - 2A63F + 0x0003, 0x0000, 0x0000, 0x0181, 0x0002, 0x0184, 0x0188, 0x0002, + 0x0037, 0x0207, 0x0207, 0x0002, 0x0037, 0x0218, 0x0218, 0x0003, + 0x0000, 0x0000, 0x0190, 0x0002, 0x0193, 0x0197, 0x0002, 0x0037, + 0x0234, 0x0234, 0x0002, 0x0037, 0x0242, 0x0242, 0x0003, 0x0000, + 0x0000, 0x019f, 0x0002, 0x01a2, 0x01a6, 0x0002, 0x0037, 0x025f, + 0x025f, 0x0002, 0x0037, 0x0272, 0x0272, 0x0003, 0x0000, 0x01ae, + 0x01b3, 0x0003, 0x0000, 0x1b2f, 0x2b17, 0x1b3f, 0x0002, 0x01b6, + 0x01ba, 0x0002, 0x0037, 0x028f, 0x028f, 0x0002, 0x0037, 0x02a1, + // Entry 2A640 - 2A67F + 0x02a1, 0x0003, 0x0000, 0x0000, 0x01c2, 0x0002, 0x01c5, 0x01c9, + 0x0002, 0x0037, 0x02bf, 0x02bf, 0x0002, 0x0037, 0x02ce, 0x02ce, + 0x0003, 0x0000, 0x0000, 0x01d1, 0x0002, 0x01d4, 0x01d8, 0x0002, + 0x0037, 0x02e7, 0x02e7, 0x0002, 0x0037, 0x02f7, 0x02f7, 0x0004, + 0x01e1, 0x01e6, 0x0000, 0x0000, 0x0003, 0x0000, 0x1dc7, 0x2ae8, + 0x2aef, 0x0001, 0x0000, 0x1de0, 0x0002, 0x0003, 0x00e9, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, + // Entry 2A680 - 2A6BF + 0x0000, 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, 0x0006, + 0x000d, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, + 0x0002, 0x0587, 0x0008, 0x002f, 0x0066, 0x008b, 0x009f, 0x00b7, + 0x00c7, 0x00d8, 0x0000, 0x0002, 0x0032, 0x0054, 0x0003, 0x0036, + 0x0000, 0x0045, 0x000d, 0x0006, 0xffff, 0x001e, 0x432b, 0x432f, + 0x42a5, 0x42a9, 0x42ad, 0x4333, 0x4337, 0x433b, 0x4295, 0x433f, + 0x422c, 0x000d, 0x0006, 0xffff, 0x004e, 0x0056, 0x4343, 0x4349, + 0x42a9, 0x4351, 0x4357, 0x435e, 0x4365, 0x436e, 0x4375, 0x0096, + // Entry 2A6C0 - 2A6FF + 0x0002, 0x0000, 0x0057, 0x000d, 0x0000, 0xffff, 0x257b, 0x2364, + 0x2b20, 0x241f, 0x2b20, 0x257b, 0x257b, 0x241f, 0x2b22, 0x236a, + 0x236c, 0x236e, 0x0002, 0x0069, 0x007f, 0x0003, 0x006d, 0x0000, + 0x0076, 0x0007, 0x0006, 0x009e, 0x00a2, 0x00a6, 0x00aa, 0x437d, + 0x4381, 0x00b6, 0x0007, 0x0037, 0x0313, 0x031d, 0x0327, 0x032f, + 0x0338, 0x0341, 0x0348, 0x0002, 0x0000, 0x0082, 0x0007, 0x0000, + 0x257b, 0x257b, 0x257b, 0x257b, 0x241f, 0x204d, 0x257b, 0x0001, + 0x008d, 0x0003, 0x0091, 0x0000, 0x0098, 0x0005, 0x0006, 0xffff, + // Entry 2A700 - 2A73F + 0x00f6, 0x00f9, 0x00fc, 0x00ff, 0x0005, 0x0006, 0xffff, 0x0102, + 0x0109, 0x0110, 0x0117, 0x0001, 0x00a1, 0x0003, 0x00a5, 0x0000, + 0x00ae, 0x0002, 0x00a8, 0x00ab, 0x0001, 0x0037, 0x0351, 0x0001, + 0x0037, 0x0357, 0x0002, 0x00b1, 0x00b4, 0x0001, 0x0037, 0x0351, + 0x0001, 0x0037, 0x0357, 0x0003, 0x00c1, 0x0000, 0x00bb, 0x0001, + 0x00bd, 0x0002, 0x0037, 0x0361, 0x0371, 0x0001, 0x00c3, 0x0002, + 0x0017, 0x01f4, 0x01f7, 0x0004, 0x00d5, 0x00cf, 0x00cc, 0x00d2, + 0x0001, 0x0006, 0x015b, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, + // Entry 2A740 - 2A77F + 0x003c, 0x0001, 0x0002, 0x08e8, 0x0004, 0x00e6, 0x00e0, 0x00dd, + 0x00e3, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, + 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0040, 0x012a, 0x0000, + 0x0000, 0x012f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0134, + 0x0000, 0x0000, 0x0139, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x013e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 2A780 - 2A7BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0149, 0x0000, 0x014e, 0x0000, 0x0000, 0x0153, + 0x0000, 0x0000, 0x0158, 0x0000, 0x0000, 0x015d, 0x0001, 0x012c, + 0x0001, 0x0037, 0x0381, 0x0001, 0x0131, 0x0001, 0x0037, 0x0387, + 0x0001, 0x0136, 0x0001, 0x0017, 0x0200, 0x0001, 0x013b, 0x0001, + 0x0037, 0x038c, 0x0002, 0x0141, 0x0144, 0x0001, 0x0037, 0x0393, + 0x0003, 0x0037, 0x0399, 0x039e, 0x03a2, 0x0001, 0x014b, 0x0001, + 0x0037, 0x03a8, 0x0001, 0x0150, 0x0001, 0x0009, 0x0308, 0x0001, + // Entry 2A7C0 - 2A7FF + 0x0155, 0x0001, 0x0037, 0x03b5, 0x0001, 0x015a, 0x0001, 0x0009, + 0x030c, 0x0001, 0x015f, 0x0001, 0x0037, 0x03bd, 0x0003, 0x0004, + 0x0395, 0x07f4, 0x0011, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0016, 0x0041, 0x0259, 0x0000, 0x02b1, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0323, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x001f, 0x0000, 0x0030, 0x0004, 0x002d, 0x0027, + 0x0024, 0x002a, 0x0001, 0x0037, 0x03c9, 0x0001, 0x000a, 0x0440, + 0x0001, 0x0002, 0x0044, 0x0001, 0x001f, 0x0b31, 0x0004, 0x003e, + // Entry 2A800 - 2A83F + 0x0038, 0x0035, 0x003b, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0006, + 0x022e, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, + 0x004a, 0x00af, 0x0106, 0x013b, 0x020c, 0x0226, 0x0237, 0x0248, + 0x0002, 0x004d, 0x007e, 0x0003, 0x0051, 0x0060, 0x006f, 0x000d, + 0x0037, 0xffff, 0x03dc, 0x03e6, 0x03f0, 0x03fa, 0x0404, 0x040e, + 0x0418, 0x0422, 0x042c, 0x0436, 0x0440, 0x044a, 0x000d, 0x0037, + 0xffff, 0x0454, 0x0458, 0x045c, 0x0460, 0x045c, 0x0454, 0x0454, + 0x0460, 0x0464, 0x0468, 0x046c, 0x0470, 0x000d, 0x0037, 0xffff, + // Entry 2A840 - 2A87F + 0x0474, 0x048a, 0x04a6, 0x04b6, 0x04c9, 0x04d9, 0x04ec, 0x04ff, + 0x0515, 0x0534, 0x0550, 0x0569, 0x0003, 0x0082, 0x0091, 0x00a0, + 0x000d, 0x0037, 0xffff, 0x03dc, 0x03e6, 0x03f0, 0x03fa, 0x0404, + 0x040e, 0x0418, 0x0422, 0x042c, 0x0436, 0x0440, 0x044a, 0x000d, + 0x0037, 0xffff, 0x0454, 0x0458, 0x045c, 0x0460, 0x045c, 0x0454, + 0x0454, 0x0460, 0x0464, 0x0468, 0x046c, 0x0470, 0x000d, 0x0037, + 0xffff, 0x0474, 0x048a, 0x04a6, 0x04b6, 0x04c9, 0x04d9, 0x04ec, + 0x04ff, 0x0515, 0x0534, 0x0550, 0x0569, 0x0002, 0x00b2, 0x00dc, + // Entry 2A880 - 2A8BF + 0x0005, 0x00b8, 0x00c1, 0x00d3, 0x0000, 0x00ca, 0x0007, 0x0037, + 0x0585, 0x058f, 0x0599, 0x05a3, 0x05ad, 0x05b7, 0x05c1, 0x0007, + 0x0037, 0x05cb, 0x0468, 0x0464, 0x0468, 0x05cf, 0x05d3, 0x05d7, + 0x0007, 0x0037, 0x05db, 0x05e2, 0x05e9, 0x05f0, 0x05f7, 0x05fe, + 0x0605, 0x0007, 0x0037, 0x060c, 0x061c, 0x0635, 0x0651, 0x066d, + 0x0689, 0x06a5, 0x0005, 0x00e2, 0x00eb, 0x00fd, 0x0000, 0x00f4, + 0x0007, 0x0037, 0x0585, 0x058f, 0x0599, 0x05a3, 0x05ad, 0x05b7, + 0x05c1, 0x0007, 0x0037, 0x05cb, 0x0468, 0x0464, 0x0468, 0x05cf, + // Entry 2A8C0 - 2A8FF + 0x05d3, 0x05d7, 0x0007, 0x0037, 0x05db, 0x05e2, 0x05e9, 0x05f0, + 0x05f7, 0x05fe, 0x0605, 0x0007, 0x0037, 0x060c, 0x061c, 0x0635, + 0x0651, 0x066d, 0x0689, 0x06a5, 0x0002, 0x0109, 0x0122, 0x0003, + 0x010d, 0x0114, 0x011b, 0x0005, 0x0037, 0xffff, 0x06b8, 0x06c2, + 0x06cd, 0x06d9, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x0005, 0x0037, 0xffff, 0x06e4, 0x06ff, 0x071b, 0x0738, + 0x0003, 0x0126, 0x012d, 0x0134, 0x0005, 0x0037, 0xffff, 0x06b8, + 0x06c2, 0x06cd, 0x06d9, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, + // Entry 2A900 - 2A93F + 0x0037, 0x23b3, 0x0005, 0x0037, 0xffff, 0x06e4, 0x06ff, 0x071b, + 0x0738, 0x0002, 0x013e, 0x01a5, 0x0003, 0x0142, 0x0163, 0x0184, + 0x0008, 0x014e, 0x0154, 0x014b, 0x0157, 0x015a, 0x015d, 0x0160, + 0x0151, 0x0001, 0x0037, 0x0754, 0x0001, 0x0000, 0x04ef, 0x0001, + 0x0037, 0x076d, 0x0001, 0x0000, 0x04f2, 0x0001, 0x0037, 0x077e, + 0x0001, 0x0037, 0x0789, 0x0001, 0x0037, 0x07a0, 0x0001, 0x0037, + 0x07ab, 0x0008, 0x016f, 0x0175, 0x016c, 0x0178, 0x017b, 0x017e, + 0x0181, 0x0172, 0x0001, 0x0037, 0x0754, 0x0001, 0x0000, 0x1f9c, + // Entry 2A940 - 2A97F + 0x0001, 0x0037, 0x076d, 0x0001, 0x0000, 0x21e4, 0x0001, 0x0037, + 0x077e, 0x0001, 0x0037, 0x0789, 0x0001, 0x0037, 0x07a0, 0x0001, + 0x0037, 0x07ab, 0x0008, 0x0190, 0x0196, 0x018d, 0x0199, 0x019c, + 0x019f, 0x01a2, 0x0193, 0x0001, 0x0037, 0x0754, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x0037, 0x07b6, 0x0001, 0x0000, 0x04f2, 0x0001, + 0x0037, 0x07cc, 0x0001, 0x0037, 0x07dc, 0x0001, 0x0037, 0x07fb, + 0x0001, 0x0037, 0x0811, 0x0003, 0x01a9, 0x01ca, 0x01eb, 0x0008, + 0x01b5, 0x01bb, 0x01b2, 0x01be, 0x01c1, 0x01c4, 0x01c7, 0x01b8, + // Entry 2A980 - 2A9BF + 0x0001, 0x0037, 0x0821, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0037, + 0x0837, 0x0001, 0x0000, 0x04f2, 0x0001, 0x0037, 0x084a, 0x0001, + 0x0037, 0x0857, 0x0001, 0x0037, 0x0876, 0x0001, 0x0037, 0x0889, + 0x0008, 0x01d6, 0x01dc, 0x01d3, 0x01df, 0x01e2, 0x01e5, 0x01e8, + 0x01d9, 0x0001, 0x0037, 0x0821, 0x0001, 0x0000, 0x04ef, 0x0001, + 0x0037, 0x0837, 0x0001, 0x0000, 0x04f2, 0x0001, 0x0037, 0x084a, + 0x0001, 0x0037, 0x0857, 0x0001, 0x0037, 0x0876, 0x0001, 0x0037, + 0x0889, 0x0008, 0x01f7, 0x01fd, 0x01f4, 0x0200, 0x0203, 0x0206, + // Entry 2A9C0 - 2A9FF + 0x0209, 0x01fa, 0x0001, 0x0037, 0x0821, 0x0001, 0x0000, 0x04ef, + 0x0001, 0x0037, 0x0837, 0x0001, 0x0037, 0x0896, 0x0001, 0x0037, + 0x084a, 0x0001, 0x0037, 0x0857, 0x0001, 0x0037, 0x0876, 0x0001, + 0x0037, 0x0889, 0x0003, 0x021b, 0x0000, 0x0210, 0x0002, 0x0213, + 0x0217, 0x0002, 0x0037, 0x08ba, 0x0915, 0x0002, 0x0037, 0x08f2, + 0x094d, 0x0002, 0x021e, 0x0222, 0x0002, 0x0037, 0x0967, 0x098f, + 0x0002, 0x0037, 0x0974, 0x099c, 0x0004, 0x0234, 0x022e, 0x022b, + 0x0231, 0x0001, 0x0037, 0x09ae, 0x0001, 0x0005, 0x0625, 0x0001, + // Entry 2AA00 - 2AA3F + 0x0037, 0x09bf, 0x0001, 0x0007, 0x02e9, 0x0004, 0x0245, 0x023f, + 0x023c, 0x0242, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, + 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, 0x0256, + 0x0250, 0x024d, 0x0253, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, + 0x022e, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0005, + 0x025f, 0x0000, 0x0000, 0x0000, 0x02aa, 0x0002, 0x0262, 0x0286, + 0x0003, 0x0266, 0x0000, 0x0276, 0x000e, 0x0037, 0x0a4c, 0x09c8, + 0x09db, 0x09f1, 0x0a07, 0x0a1a, 0x0a2a, 0x0a3c, 0x0a5f, 0x0a72, + // Entry 2AA40 - 2AA7F + 0x0a7f, 0x0a92, 0x0aa5, 0x0aaf, 0x000e, 0x0037, 0x0a4c, 0x09c8, + 0x09db, 0x09f1, 0x0a07, 0x0a1a, 0x0a2a, 0x0a3c, 0x0a5f, 0x0a72, + 0x0a7f, 0x0a92, 0x0aa5, 0x0aaf, 0x0003, 0x028a, 0x0000, 0x029a, + 0x000e, 0x0037, 0x0a4c, 0x09c8, 0x09db, 0x09f1, 0x0a07, 0x0a1a, + 0x0a2a, 0x0a3c, 0x0a5f, 0x0a72, 0x0a7f, 0x0a92, 0x0aa5, 0x0aaf, + 0x000e, 0x0037, 0x0a4c, 0x09c8, 0x09db, 0x09f1, 0x0a07, 0x0a1a, + 0x0a2a, 0x0a3c, 0x0a5f, 0x0a72, 0x0a7f, 0x0a92, 0x0aa5, 0x0aaf, + 0x0001, 0x02ac, 0x0001, 0x02ae, 0x0001, 0x0000, 0x04ef, 0x0005, + // Entry 2AA80 - 2AABF + 0x02b7, 0x0000, 0x0000, 0x0000, 0x031c, 0x0002, 0x02ba, 0x02eb, + 0x0003, 0x02be, 0x02cd, 0x02dc, 0x000d, 0x0037, 0xffff, 0x0abf, + 0x0aca, 0x0ad5, 0x0ae2, 0x0af0, 0x0afd, 0x0b0b, 0x0b16, 0x0b21, + 0x0b2c, 0x0b37, 0x0b46, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, + 0x2218, 0x2426, 0x000d, 0x0037, 0xffff, 0x0b55, 0x0b6e, 0x0b81, + 0x0ba5, 0x0bc9, 0x0bf3, 0x0c1d, 0x0c30, 0x0c43, 0x0c5c, 0x0c6f, + 0x0c89, 0x0003, 0x02ef, 0x02fe, 0x030d, 0x000d, 0x0037, 0xffff, + // Entry 2AAC0 - 2AAFF + 0x0abf, 0x0aca, 0x0ad5, 0x0ae2, 0x0af0, 0x0afd, 0x0b0b, 0x0b16, + 0x0b21, 0x0b2c, 0x0b37, 0x0b46, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x2215, 0x2218, 0x2426, 0x000d, 0x0037, 0xffff, 0x0b55, 0x0b6e, + 0x0b81, 0x0ba5, 0x0bc9, 0x0bf3, 0x0c1d, 0x0c30, 0x0c43, 0x0c5c, + 0x0c6f, 0x0c89, 0x0001, 0x031e, 0x0001, 0x0320, 0x0001, 0x0000, + 0x06c8, 0x0005, 0x0329, 0x0000, 0x0000, 0x0000, 0x038e, 0x0002, + 0x032c, 0x035d, 0x0003, 0x0330, 0x033f, 0x034e, 0x000d, 0x0037, + // Entry 2AB00 - 2AB3F + 0xffff, 0x0ca0, 0x0cbf, 0x0ce1, 0x0cf7, 0x0d04, 0x0d1a, 0x0d36, + 0x0d46, 0x0d56, 0x0d66, 0x0d70, 0x0d86, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, 0x0037, 0xffff, 0x0ca0, + 0x0cbf, 0x0ce1, 0x0cf7, 0x0d04, 0x0d1a, 0x0d36, 0x0d46, 0x0d56, + 0x0d66, 0x0d70, 0x0d86, 0x0003, 0x0361, 0x0370, 0x037f, 0x000d, + 0x0037, 0xffff, 0x0ca0, 0x0cbf, 0x0ce1, 0x0cf7, 0x0d04, 0x0d1a, + 0x0d36, 0x0d46, 0x0d56, 0x0d66, 0x0d70, 0x0d86, 0x000d, 0x0000, + // Entry 2AB40 - 2AB7F + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x000d, 0x0037, 0xffff, + 0x0ca0, 0x0cbf, 0x0ce1, 0x0cf7, 0x0d04, 0x0d1a, 0x0d36, 0x0d46, + 0x0d56, 0x0d66, 0x0d70, 0x0d86, 0x0001, 0x0390, 0x0001, 0x0392, + 0x0001, 0x0000, 0x1a1d, 0x0042, 0x03d8, 0x03dd, 0x03e2, 0x03e7, + 0x03fe, 0x0415, 0x042c, 0x0443, 0x0455, 0x0467, 0x047e, 0x0495, + 0x04ac, 0x04c7, 0x04e2, 0x04fd, 0x0502, 0x0507, 0x050c, 0x0525, + 0x053e, 0x0557, 0x055c, 0x0561, 0x0566, 0x056b, 0x0570, 0x0575, + // Entry 2AB80 - 2ABBF + 0x057a, 0x057f, 0x0584, 0x0598, 0x05ac, 0x05c0, 0x05d4, 0x05e8, + 0x05fc, 0x0610, 0x0624, 0x0638, 0x064c, 0x0660, 0x0674, 0x0688, + 0x069c, 0x06b0, 0x06c4, 0x06d8, 0x06ec, 0x0700, 0x0714, 0x0728, + 0x072d, 0x0732, 0x0737, 0x074d, 0x075f, 0x0771, 0x0787, 0x0799, + 0x07ab, 0x07c1, 0x07d3, 0x07e5, 0x07ea, 0x07ef, 0x0001, 0x03da, + 0x0001, 0x0037, 0x0d9c, 0x0001, 0x03df, 0x0001, 0x0037, 0x0d9c, + 0x0001, 0x03e4, 0x0001, 0x0037, 0x0d9c, 0x0003, 0x03eb, 0x03ee, + 0x03f3, 0x0001, 0x0037, 0x0dac, 0x0003, 0x0037, 0x0db9, 0x0dd6, + // Entry 2ABC0 - 2ABFF + 0x0dea, 0x0002, 0x03f6, 0x03fa, 0x0002, 0x0037, 0x0e0d, 0x0e0d, + 0x0002, 0x0037, 0x0e2d, 0x0e2d, 0x0003, 0x0402, 0x0405, 0x040a, + 0x0001, 0x0037, 0x0e48, 0x0003, 0x0037, 0x0db9, 0x0dd6, 0x0dea, + 0x0002, 0x040d, 0x0411, 0x0002, 0x0037, 0x0e4d, 0x0e4d, 0x0002, + 0x0037, 0x0e2d, 0x0e2d, 0x0003, 0x0419, 0x041c, 0x0421, 0x0001, + 0x0037, 0x0e48, 0x0003, 0x0037, 0x0db9, 0x0dd6, 0x0dea, 0x0002, + 0x0424, 0x0428, 0x0002, 0x0037, 0x0e4d, 0x0e4d, 0x0002, 0x0037, + 0x0e2d, 0x0e2d, 0x0003, 0x0430, 0x0433, 0x0438, 0x0001, 0x0037, + // Entry 2AC00 - 2AC3F + 0x0e61, 0x0003, 0x0037, 0x0e7a, 0x0ea6, 0x0ec9, 0x0002, 0x043b, + 0x043f, 0x0002, 0x0037, 0x0ef8, 0x0ef8, 0x0002, 0x0037, 0x0f18, + 0x0f18, 0x0003, 0x0447, 0x0000, 0x044a, 0x0001, 0x0037, 0x0f42, + 0x0002, 0x044d, 0x0451, 0x0002, 0x0037, 0x0ef8, 0x0ef8, 0x0002, + 0x0037, 0x0f53, 0x0f53, 0x0003, 0x0459, 0x0000, 0x045c, 0x0001, + 0x0037, 0x0f42, 0x0002, 0x045f, 0x0463, 0x0002, 0x0037, 0x0ef8, + 0x0ef8, 0x0002, 0x0037, 0x0f53, 0x0f53, 0x0003, 0x046b, 0x046e, + 0x0473, 0x0001, 0x0037, 0x0f72, 0x0003, 0x0037, 0x0f7c, 0x0f99, + // Entry 2AC40 - 2AC7F + 0x0fb0, 0x0002, 0x0476, 0x047a, 0x0002, 0x0037, 0x0fd3, 0x0fd3, + 0x0002, 0x0037, 0x0fe7, 0x0fe7, 0x0003, 0x0482, 0x0485, 0x048a, + 0x0001, 0x0037, 0x0f72, 0x0003, 0x0037, 0x0f7c, 0x0f99, 0x0fb0, + 0x0002, 0x048d, 0x0491, 0x0002, 0x0037, 0x0fd3, 0x0fd3, 0x0002, + 0x0037, 0x0fe7, 0x0fe7, 0x0003, 0x0499, 0x049c, 0x04a1, 0x0001, + 0x0037, 0x0f72, 0x0003, 0x0037, 0x0f7c, 0x0f99, 0x0fb0, 0x0002, + 0x04a4, 0x04a8, 0x0002, 0x0037, 0x0fd3, 0x0fd3, 0x0002, 0x0037, + 0x0fe7, 0x0fe7, 0x0004, 0x04b1, 0x04b4, 0x04b9, 0x04c4, 0x0001, + // Entry 2AC80 - 2ACBF + 0x0037, 0x060c, 0x0003, 0x0037, 0x1002, 0x1028, 0x1045, 0x0002, + 0x04bc, 0x04c0, 0x0002, 0x0037, 0x1071, 0x1071, 0x0002, 0x0037, + 0x108b, 0x108b, 0x0001, 0x0037, 0x10ac, 0x0004, 0x04cc, 0x04cf, + 0x04d4, 0x04df, 0x0001, 0x0037, 0x10cd, 0x0003, 0x0037, 0x1002, + 0x1028, 0x1045, 0x0002, 0x04d7, 0x04db, 0x0002, 0x0037, 0x1071, + 0x1071, 0x0002, 0x0037, 0x10d5, 0x10d5, 0x0001, 0x0037, 0x10ac, + 0x0004, 0x04e7, 0x04ea, 0x04ef, 0x04fa, 0x0001, 0x0037, 0x10cd, + 0x0003, 0x0037, 0x1002, 0x1028, 0x1045, 0x0002, 0x04f2, 0x04f6, + // Entry 2ACC0 - 2ACFF + 0x0002, 0x0037, 0x1071, 0x1071, 0x0002, 0x0037, 0x108b, 0x108b, + 0x0001, 0x0037, 0x10ac, 0x0001, 0x04ff, 0x0001, 0x0037, 0x10eb, + 0x0001, 0x0504, 0x0001, 0x0037, 0x1108, 0x0001, 0x0509, 0x0001, + 0x0037, 0x1108, 0x0003, 0x0510, 0x0513, 0x051a, 0x0001, 0x0037, + 0x1120, 0x0005, 0x0037, 0x1143, 0x1153, 0x1160, 0x112a, 0x116d, + 0x0002, 0x051d, 0x0521, 0x0002, 0x0037, 0x1177, 0x1177, 0x0002, + 0x0037, 0x118b, 0x118b, 0x0003, 0x0529, 0x052c, 0x0533, 0x0001, + 0x0037, 0x1120, 0x0005, 0x0037, 0x1143, 0x1153, 0x1160, 0x112a, + // Entry 2AD00 - 2AD3F + 0x116d, 0x0002, 0x0536, 0x053a, 0x0002, 0x0037, 0x1177, 0x1177, + 0x0002, 0x0037, 0x118b, 0x118b, 0x0003, 0x0542, 0x0545, 0x054c, + 0x0001, 0x0037, 0x1120, 0x0005, 0x0037, 0x1143, 0x1153, 0x1160, + 0x112a, 0x116d, 0x0002, 0x054f, 0x0553, 0x0002, 0x0037, 0x1177, + 0x1177, 0x0002, 0x0037, 0x118b, 0x118b, 0x0001, 0x0559, 0x0001, + 0x0037, 0x11a6, 0x0001, 0x055e, 0x0001, 0x0037, 0x11bd, 0x0001, + 0x0563, 0x0001, 0x0037, 0x11bd, 0x0001, 0x0568, 0x0001, 0x0037, + 0x11cf, 0x0001, 0x056d, 0x0001, 0x0037, 0x11ec, 0x0001, 0x0572, + // Entry 2AD40 - 2AD7F + 0x0001, 0x0037, 0x11ec, 0x0001, 0x0577, 0x0001, 0x0037, 0x11fe, + 0x0001, 0x057c, 0x0001, 0x0037, 0x122b, 0x0001, 0x0581, 0x0001, + 0x0037, 0x122b, 0x0003, 0x0000, 0x0588, 0x058d, 0x0003, 0x0037, + 0x124d, 0x1270, 0x128a, 0x0002, 0x0590, 0x0594, 0x0002, 0x0037, + 0x1071, 0x1071, 0x0002, 0x0037, 0x12b3, 0x108b, 0x0003, 0x0000, + 0x059c, 0x05a1, 0x0003, 0x0037, 0x124d, 0x1270, 0x128a, 0x0002, + 0x05a4, 0x05a8, 0x0002, 0x0037, 0x1071, 0x1071, 0x0002, 0x0037, + 0x108b, 0x108b, 0x0003, 0x0000, 0x05b0, 0x05b5, 0x0003, 0x0037, + // Entry 2AD80 - 2ADBF + 0x124d, 0x1270, 0x128a, 0x0002, 0x05b8, 0x05bc, 0x0002, 0x0037, + 0x1071, 0x1071, 0x0002, 0x0037, 0x12b3, 0x108b, 0x0003, 0x0000, + 0x05c4, 0x05c9, 0x0003, 0x0037, 0x12d1, 0x12fa, 0x131a, 0x0002, + 0x05cc, 0x05d0, 0x0002, 0x0037, 0x1349, 0x1349, 0x0002, 0x0037, + 0x1369, 0x1369, 0x0003, 0x0000, 0x05d8, 0x05dd, 0x0003, 0x0037, + 0x1393, 0x13ab, 0x13bd, 0x0002, 0x05e0, 0x05e4, 0x0002, 0x0037, + 0x1349, 0x1349, 0x0002, 0x0037, 0x1369, 0x1369, 0x0003, 0x0000, + 0x05ec, 0x05f1, 0x0003, 0x0037, 0x13d3, 0x13e6, 0x13f5, 0x0002, + // Entry 2ADC0 - 2ADFF + 0x05f4, 0x05f8, 0x0002, 0x0037, 0x1349, 0x1349, 0x0002, 0x0037, + 0x1369, 0x1369, 0x0003, 0x0000, 0x0600, 0x0605, 0x0003, 0x0037, + 0x1408, 0x1434, 0x1457, 0x0002, 0x0608, 0x060c, 0x0002, 0x0037, + 0x1489, 0x1489, 0x0002, 0x0037, 0x14ac, 0x14ac, 0x0003, 0x0000, + 0x0614, 0x0619, 0x0003, 0x0037, 0x14d9, 0x14f1, 0x1503, 0x0002, + 0x061c, 0x0620, 0x0002, 0x0037, 0x1489, 0x1489, 0x0002, 0x0037, + 0x14ac, 0x14ac, 0x0003, 0x0000, 0x0628, 0x062d, 0x0003, 0x0037, + 0x1519, 0x152b, 0x153a, 0x0002, 0x0630, 0x0634, 0x0002, 0x0037, + // Entry 2AE00 - 2AE3F + 0x1489, 0x1489, 0x0002, 0x0037, 0x14ac, 0x14ac, 0x0003, 0x0000, + 0x063c, 0x0641, 0x0003, 0x0037, 0x154f, 0x157b, 0x159e, 0x0002, + 0x0644, 0x0648, 0x0002, 0x0037, 0x15d0, 0x15d0, 0x0002, 0x0037, + 0x15f3, 0x15f3, 0x0003, 0x0000, 0x0650, 0x0655, 0x0003, 0x0037, + 0x1620, 0x1638, 0x164a, 0x0002, 0x0658, 0x065c, 0x0002, 0x0037, + 0x15d0, 0x15d0, 0x0002, 0x0037, 0x15f3, 0x15f3, 0x0003, 0x0000, + 0x0664, 0x0669, 0x0003, 0x0037, 0x1660, 0x1675, 0x1684, 0x0002, + 0x066c, 0x0670, 0x0002, 0x0037, 0x15d0, 0x15d0, 0x0002, 0x0037, + // Entry 2AE40 - 2AE7F + 0x15f3, 0x15f3, 0x0003, 0x0000, 0x0678, 0x067d, 0x0003, 0x0037, + 0x1697, 0x16c3, 0x16e6, 0x0002, 0x0680, 0x0684, 0x0002, 0x0037, + 0x1718, 0x1718, 0x0002, 0x0037, 0x173b, 0x173b, 0x0003, 0x0000, + 0x068c, 0x0691, 0x0003, 0x0037, 0x1768, 0x1780, 0x1792, 0x0002, + 0x0694, 0x0698, 0x0002, 0x0037, 0x1718, 0x1718, 0x0002, 0x0037, + 0x173b, 0x173b, 0x0003, 0x0000, 0x06a0, 0x06a5, 0x0003, 0x0037, + 0x17a8, 0x17bd, 0x17cc, 0x0002, 0x06a8, 0x06ac, 0x0002, 0x0037, + 0x1718, 0x1718, 0x0002, 0x0037, 0x173b, 0x173b, 0x0003, 0x0000, + // Entry 2AE80 - 2AEBF + 0x06b4, 0x06b9, 0x0003, 0x0037, 0x17df, 0x180b, 0x182e, 0x0002, + 0x06bc, 0x06c0, 0x0002, 0x0037, 0x1860, 0x1860, 0x0002, 0x0037, + 0x1883, 0x1883, 0x0003, 0x0000, 0x06c8, 0x06cd, 0x0003, 0x0037, + 0x18b0, 0x18c8, 0x18da, 0x0002, 0x06d0, 0x06d4, 0x0002, 0x0037, + 0x1860, 0x1860, 0x0002, 0x0037, 0x1883, 0x1883, 0x0003, 0x0000, + 0x06dc, 0x06e1, 0x0003, 0x0037, 0x18f0, 0x1905, 0x1914, 0x0002, + 0x06e4, 0x06e8, 0x0002, 0x0037, 0x1860, 0x1860, 0x0002, 0x0037, + 0x1883, 0x1883, 0x0003, 0x0000, 0x06f0, 0x06f5, 0x0003, 0x0037, + // Entry 2AEC0 - 2AEFF + 0x1927, 0x194a, 0x1964, 0x0002, 0x06f8, 0x06fc, 0x0002, 0x0037, + 0x198d, 0x198d, 0x0002, 0x0037, 0x19a7, 0x19a7, 0x0003, 0x0000, + 0x0704, 0x0709, 0x0003, 0x0037, 0x19cb, 0x19e3, 0x19f5, 0x0002, + 0x070c, 0x0710, 0x0002, 0x0037, 0x198d, 0x198d, 0x0002, 0x0037, + 0x19a7, 0x19a7, 0x0003, 0x0000, 0x0718, 0x071d, 0x0003, 0x0037, + 0x1a0b, 0x1a20, 0x1a2f, 0x0002, 0x0720, 0x0724, 0x0002, 0x0037, + 0x198d, 0x198d, 0x0002, 0x0037, 0x19a7, 0x19a7, 0x0001, 0x072a, + 0x0001, 0x0037, 0x1a42, 0x0001, 0x072f, 0x0001, 0x0037, 0x1a63, + // Entry 2AF00 - 2AF3F + 0x0001, 0x0734, 0x0001, 0x0037, 0x1a42, 0x0003, 0x073b, 0x073e, + 0x0742, 0x0001, 0x0037, 0x1a89, 0x0002, 0x0037, 0xffff, 0x1a99, + 0x0002, 0x0745, 0x0749, 0x0002, 0x0037, 0x1ab3, 0x1ab3, 0x0002, + 0x0037, 0x1aca, 0x1aca, 0x0003, 0x0751, 0x0000, 0x0754, 0x0001, + 0x0037, 0x1aeb, 0x0002, 0x0757, 0x075b, 0x0002, 0x0037, 0x1ab3, + 0x1ab3, 0x0002, 0x0037, 0x1af3, 0x1af3, 0x0003, 0x0763, 0x0000, + 0x0766, 0x0001, 0x0037, 0x1aeb, 0x0002, 0x0769, 0x076d, 0x0002, + 0x0037, 0x1ab3, 0x1ab3, 0x0002, 0x0037, 0x1af3, 0x1af3, 0x0003, + // Entry 2AF40 - 2AF7F + 0x0775, 0x0778, 0x077c, 0x0001, 0x0037, 0x1b08, 0x0002, 0x0037, + 0xffff, 0x1b15, 0x0002, 0x077f, 0x0783, 0x0002, 0x0037, 0x1b2c, + 0x1b2c, 0x0002, 0x0037, 0x1b40, 0x1b40, 0x0003, 0x078b, 0x0000, + 0x078e, 0x0001, 0x0037, 0x1b5e, 0x0002, 0x0791, 0x0795, 0x0002, + 0x0037, 0x1b2c, 0x1b2c, 0x0002, 0x0037, 0x1b66, 0x1b66, 0x0003, + 0x079d, 0x0000, 0x07a0, 0x0001, 0x0037, 0x1b5e, 0x0002, 0x07a3, + 0x07a7, 0x0002, 0x0037, 0x1b2c, 0x1b2c, 0x0002, 0x0037, 0x1b66, + 0x1b66, 0x0003, 0x07af, 0x07b2, 0x07b6, 0x0001, 0x0037, 0x1b7b, + // Entry 2AF80 - 2AFBF + 0x0002, 0x0037, 0xffff, 0x1b88, 0x0002, 0x07b9, 0x07bd, 0x0002, + 0x0037, 0x1b95, 0x1b95, 0x0002, 0x0037, 0x1ba9, 0x1ba9, 0x0003, + 0x07c5, 0x0000, 0x07c8, 0x0001, 0x0037, 0x1bc7, 0x0002, 0x07cb, + 0x07cf, 0x0002, 0x0037, 0x1b95, 0x1b95, 0x0002, 0x0037, 0x1bcf, + 0x1bcf, 0x0003, 0x07d7, 0x0000, 0x07da, 0x0001, 0x0037, 0x1bc7, + 0x0002, 0x07dd, 0x07e1, 0x0002, 0x0037, 0x1b95, 0x1b95, 0x0002, + 0x0037, 0x1bcf, 0x1bcf, 0x0001, 0x07e7, 0x0001, 0x0037, 0x1be4, + 0x0001, 0x07ec, 0x0001, 0x0037, 0x1c0d, 0x0001, 0x07f1, 0x0001, + // Entry 2AFC0 - 2AFFF + 0x0037, 0x1c0d, 0x0004, 0x07f9, 0x07fe, 0x0803, 0x0812, 0x0003, + 0x0000, 0x1dc7, 0x2ae8, 0x2aef, 0x0003, 0x0037, 0x1c2e, 0x1c3d, + 0x1c64, 0x0002, 0x0000, 0x0806, 0x0003, 0x0000, 0x080d, 0x080a, + 0x0001, 0x0037, 0x1c94, 0x0003, 0x0037, 0xffff, 0x1cdf, 0x1d21, + 0x0002, 0x0000, 0x0815, 0x0003, 0x08af, 0x0945, 0x0819, 0x0094, + 0x0037, 0x1d69, 0x1d8f, 0x1dce, 0x1e0d, 0x1e7c, 0x1f49, 0x1fea, + 0x20cc, 0x221e, 0x2373, 0x24c3, 0xffff, 0x25e2, 0x2674, 0x271e, + 0x27ed, 0x28cf, 0x298f, 0x2a90, 0x2bc3, 0x2d16, 0x2e23, 0x2f11, + // Entry 2B000 - 2B03F + 0x2fe6, 0x30c5, 0x3158, 0x3178, 0x31c1, 0x3248, 0x32b1, 0x3340, + 0x3380, 0x3415, 0x34a4, 0x3551, 0x35e4, 0x3617, 0x367c, 0x373c, + 0x381c, 0x388b, 0x38ab, 0x38de, 0x3959, 0x3a0c, 0x3a71, 0x3b69, + 0x3c22, 0x3cb0, 0x3da5, 0x3e8a, 0x3ef9, 0x3f3b, 0x3fa3, 0x3fcf, + 0x4021, 0x40b4, 0x40f9, 0x4180, 0x4296, 0x435b, 0x43b3, 0x4410, + 0x44eb, 0x458f, 0x4604, 0x4627, 0x467f, 0x46ab, 0x46f3, 0x473b, + 0x479a, 0x483b, 0x48e5, 0x4989, 0xffff, 0x4a0a, 0x4a4f, 0x4aab, + 0x4b20, 0x4b6f, 0x4c0e, 0x4c37, 0x4c97, 0x4d1a, 0x4d7f, 0x4e06, + // Entry 2B040 - 2B07F + 0x4e2c, 0x4e55, 0x4e97, 0x4efc, 0x4f7d, 0x4ff5, 0x50f8, 0x51f8, + 0x52b0, 0x5331, 0x5357, 0x5374, 0x53cd, 0x54b0, 0x558c, 0x5631, + 0x564b, 0x56cd, 0x57c0, 0x587c, 0x591a, 0x59a7, 0x59c4, 0x5a2a, + 0x5acb, 0x5b66, 0x5bf9, 0x5c85, 0x5d54, 0x5d7a, 0x5d9a, 0x5dc0, + 0x5de9, 0x5e2f, 0xffff, 0x5ed3, 0x5f48, 0x5f8a, 0x5fb3, 0x5ff8, + 0x6031, 0x6057, 0x6074, 0x60b1, 0x612c, 0x6152, 0x6192, 0x6207, + 0x6250, 0x62e3, 0x6326, 0x63cd, 0x6477, 0x64f8, 0x6553, 0x661e, + 0x66b1, 0x66d4, 0x670a, 0x676a, 0x6826, 0x0094, 0x0037, 0xffff, + // Entry 2B080 - 2B0BF + 0xffff, 0xffff, 0xffff, 0x1e43, 0x1f29, 0x1fc4, 0x2071, 0x21bd, + 0x231b, 0x245e, 0xffff, 0x25c8, 0x2651, 0x26f5, 0x27ab, 0x28ac, + 0x2950, 0x2a48, 0x2b5b, 0x2cce, 0x2de1, 0x2ee2, 0x2faa, 0x3099, + 0xffff, 0xffff, 0x319b, 0xffff, 0x3287, 0xffff, 0x3360, 0x33fb, + 0x3484, 0x3525, 0xffff, 0xffff, 0x3656, 0x3703, 0x3802, 0xffff, + 0xffff, 0xffff, 0x391d, 0xffff, 0x3a32, 0x3b2a, 0xffff, 0x3c77, + 0x3d5d, 0x3e70, 0xffff, 0xffff, 0xffff, 0xffff, 0x3ff5, 0xffff, + 0xffff, 0x4135, 0x4251, 0xffff, 0xffff, 0x43d3, 0x44c5, 0x4572, + // Entry 2B0C0 - 2B0FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x477d, 0x4815, + 0x48c2, 0x4966, 0xffff, 0xffff, 0xffff, 0x4a8e, 0xffff, 0x4b3d, + 0xffff, 0xffff, 0x4c73, 0xffff, 0x4d59, 0xffff, 0xffff, 0xffff, + 0xffff, 0x4ed9, 0xffff, 0x4fa0, 0x50ac, 0x51cb, 0x528d, 0xffff, + 0xffff, 0xffff, 0x5394, 0x547a, 0x5557, 0xffff, 0xffff, 0x568a, + 0x578e, 0x585f, 0x58f1, 0xffff, 0xffff, 0x5a04, 0x5ab1, 0x5b3a, + 0xffff, 0x5c3b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x5e09, + 0xffff, 0x5eb6, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 2B100 - 2B13F + 0xffff, 0x6091, 0xffff, 0xffff, 0x6175, 0xffff, 0x6224, 0xffff, + 0x6303, 0x63a7, 0x6454, 0xffff, 0x6521, 0x65f2, 0xffff, 0xffff, + 0xffff, 0x6744, 0x67f1, 0x0094, 0x0037, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1ed7, 0x1f8b, 0x2032, 0x2149, 0x22a1, 0x23ed, 0x254a, + 0xffff, 0x261e, 0x26b9, 0x2769, 0x2851, 0x2914, 0x29f0, 0x2afa, + 0x2c4d, 0x2d80, 0x2e87, 0x2f62, 0x3044, 0x3113, 0xffff, 0xffff, + 0x3209, 0xffff, 0x32fd, 0xffff, 0x33c2, 0x3451, 0x34e6, 0x359f, + 0xffff, 0xffff, 0x36c4, 0x3797, 0x3858, 0xffff, 0xffff, 0xffff, + // Entry 2B140 - 2B17F + 0x39b7, 0xffff, 0x3ad2, 0x3bca, 0xffff, 0x3d0b, 0x3e0f, 0x3ec6, + 0xffff, 0xffff, 0xffff, 0xffff, 0x406f, 0xffff, 0xffff, 0x41ed, + 0x42fd, 0xffff, 0xffff, 0x446f, 0x4533, 0x45ce, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x47d9, 0x4883, 0x492a, 0x49ce, + 0xffff, 0xffff, 0xffff, 0x4aea, 0xffff, 0x4bc3, 0xffff, 0xffff, + 0x4cdd, 0xffff, 0x4dc7, 0xffff, 0xffff, 0xffff, 0xffff, 0x4f41, + 0xffff, 0x5044, 0x5166, 0x5247, 0x52f5, 0xffff, 0xffff, 0xffff, + 0x5428, 0x5508, 0x55e3, 0xffff, 0xffff, 0x5732, 0x5814, 0x58bb, + // Entry 2B180 - 2B1BF + 0x5965, 0xffff, 0xffff, 0x5a72, 0x5b07, 0x5bb4, 0xffff, 0x5cf1, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x5e77, 0xffff, 0x5f12, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x60f3, + 0xffff, 0xffff, 0x61d1, 0xffff, 0x629e, 0xffff, 0x636b, 0x6415, + 0x64bc, 0xffff, 0x65a7, 0x666c, 0xffff, 0xffff, 0xffff, 0x67b2, + 0x687d, 0x0003, 0x0004, 0x01c0, 0x05f1, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0038, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, 0x0027, 0x0004, + // Entry 2B1C0 - 2B1FF + 0x0024, 0x001e, 0x001b, 0x0021, 0x0001, 0x0002, 0x0000, 0x0001, + 0x0002, 0x0010, 0x0001, 0x0002, 0x0044, 0x0001, 0x0000, 0x240c, + 0x0004, 0x0035, 0x002f, 0x002c, 0x0032, 0x0001, 0x0038, 0x0000, + 0x0001, 0x0038, 0x0000, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0008, 0x0041, 0x00a6, 0x00fd, 0x0132, 0x0173, 0x018d, + 0x019e, 0x01af, 0x0002, 0x0044, 0x0075, 0x0003, 0x0048, 0x0057, + 0x0066, 0x000d, 0x0038, 0xffff, 0x000d, 0x0011, 0x0015, 0x001a, + 0x001e, 0x0022, 0x0026, 0x002a, 0x002f, 0x0033, 0x0037, 0x003b, + // Entry 2B200 - 2B23F + 0x000d, 0x0000, 0xffff, 0x2523, 0x2364, 0x2b24, 0x25eb, 0x2b20, + 0x236c, 0x2296, 0x25ed, 0x2b27, 0x2246, 0x2151, 0x236e, 0x000d, + 0x0038, 0xffff, 0x0040, 0x0049, 0x0051, 0x0059, 0x0060, 0x0066, + 0x006c, 0x0072, 0x0078, 0x0082, 0x008a, 0x0095, 0x0003, 0x0079, + 0x0088, 0x0097, 0x000d, 0x0038, 0xffff, 0x000d, 0x0011, 0x0015, + 0x001a, 0x001e, 0x0022, 0x0026, 0x002a, 0x002f, 0x0033, 0x00a1, + 0x00a5, 0x000d, 0x0000, 0xffff, 0x2523, 0x2364, 0x2b20, 0x2523, + 0x2b20, 0x2523, 0x2523, 0x2b24, 0x25ed, 0x2b27, 0x236c, 0x236e, + // Entry 2B240 - 2B27F + 0x000d, 0x0038, 0xffff, 0x0040, 0x0049, 0x0051, 0x0059, 0x0060, + 0x0066, 0x006c, 0x0072, 0x0078, 0x0082, 0x00a9, 0x00b2, 0x0002, + 0x00a9, 0x00d3, 0x0005, 0x00af, 0x00b8, 0x00ca, 0x0000, 0x00c1, + 0x0007, 0x0038, 0x00bd, 0x00c1, 0x00c5, 0x00cc, 0x00d2, 0x00d6, + 0x00dd, 0x0007, 0x0000, 0x25ed, 0x2246, 0x241f, 0x2b29, 0x2b20, + 0x2b22, 0x236e, 0x0007, 0x0038, 0x00e1, 0x00e4, 0x00e7, 0x00ea, + 0x00ed, 0x00f0, 0x00f3, 0x0007, 0x0038, 0x00f6, 0x00fd, 0x0104, + 0x010e, 0x0117, 0x011e, 0x0128, 0x0005, 0x00d9, 0x00e2, 0x00f4, + // Entry 2B280 - 2B2BF + 0x0000, 0x00eb, 0x0007, 0x0038, 0x012f, 0x0133, 0x0137, 0x013b, + 0x013f, 0x0143, 0x0147, 0x0007, 0x0000, 0x2523, 0x2b22, 0x2773, + 0x2773, 0x2b22, 0x2b22, 0x2b22, 0x0007, 0x0038, 0x00e1, 0x00e4, + 0x00e7, 0x00ea, 0x014b, 0x00f0, 0x00f3, 0x0007, 0x0038, 0x014e, + 0x0153, 0x0158, 0x015d, 0x0162, 0x0143, 0x0147, 0x0002, 0x0100, + 0x0119, 0x0003, 0x0104, 0x010b, 0x0112, 0x0005, 0x0038, 0xffff, + 0x0168, 0x016f, 0x0176, 0x017d, 0x0005, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x0005, 0x0038, 0xffff, 0x0184, 0x0198, + // Entry 2B2C0 - 2B2FF + 0x01ad, 0x01c5, 0x0003, 0x011d, 0x0124, 0x012b, 0x0005, 0x0038, + 0xffff, 0x01dc, 0x01e1, 0x01e6, 0x01eb, 0x0005, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0038, 0xffff, 0x01f0, + 0x0205, 0x01ad, 0x0218, 0x0002, 0x0135, 0x0154, 0x0003, 0x0139, + 0x0142, 0x014b, 0x0002, 0x013c, 0x013f, 0x0001, 0x0038, 0x022d, + 0x0001, 0x0038, 0x0235, 0x0002, 0x0145, 0x0148, 0x0001, 0x0000, + 0x2006, 0x0001, 0x0000, 0x1f9a, 0x0002, 0x014e, 0x0151, 0x0001, + 0x0038, 0x022d, 0x0001, 0x0038, 0x0235, 0x0003, 0x0158, 0x0161, + // Entry 2B300 - 2B33F + 0x016a, 0x0002, 0x015b, 0x015e, 0x0001, 0x0038, 0x023f, 0x0001, + 0x0038, 0x0242, 0x0002, 0x0164, 0x0167, 0x0001, 0x0038, 0x023f, + 0x0001, 0x0038, 0x0242, 0x0002, 0x016d, 0x0170, 0x0001, 0x0038, + 0x023f, 0x0001, 0x0038, 0x0242, 0x0003, 0x0182, 0x0000, 0x0177, + 0x0002, 0x017a, 0x017e, 0x0002, 0x0038, 0x0245, 0x026f, 0x0002, + 0x0038, 0x025a, 0x0284, 0x0002, 0x0185, 0x0189, 0x0002, 0x0038, + 0x0294, 0x02a3, 0x0002, 0x0038, 0x029e, 0x02ad, 0x0004, 0x019b, + 0x0195, 0x0192, 0x0198, 0x0001, 0x0002, 0x0025, 0x0001, 0x0002, + // Entry 2B340 - 2B37F + 0x0033, 0x0001, 0x0002, 0x0282, 0x0001, 0x0002, 0x028b, 0x0004, + 0x01ac, 0x01a6, 0x01a3, 0x01a9, 0x0001, 0x0002, 0x04e3, 0x0001, + 0x0002, 0x04f2, 0x0001, 0x0002, 0x04fe, 0x0001, 0x0002, 0x0508, + 0x0004, 0x01bd, 0x01b7, 0x01b4, 0x01ba, 0x0001, 0x0038, 0x0000, + 0x0001, 0x0038, 0x0000, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, + 0x022e, 0x0042, 0x0203, 0x0208, 0x020d, 0x0212, 0x0229, 0x023b, + 0x024d, 0x0264, 0x0276, 0x0288, 0x029f, 0x02b1, 0x02c3, 0x02de, + 0x02f4, 0x030a, 0x030f, 0x0314, 0x0319, 0x0330, 0x0342, 0x0354, + // Entry 2B380 - 2B3BF + 0x0359, 0x035e, 0x0363, 0x0368, 0x036d, 0x0372, 0x0377, 0x037c, + 0x0381, 0x0395, 0x03a9, 0x03bd, 0x03d1, 0x03e5, 0x03f9, 0x040d, + 0x0421, 0x0435, 0x0449, 0x045d, 0x0471, 0x0485, 0x0499, 0x04ad, + 0x04c1, 0x04d5, 0x04e9, 0x04fd, 0x0511, 0x0525, 0x052a, 0x052f, + 0x0534, 0x054a, 0x055c, 0x056e, 0x0584, 0x0596, 0x05a8, 0x05be, + 0x05d0, 0x05e2, 0x05e7, 0x05ec, 0x0001, 0x0205, 0x0001, 0x0038, + 0x02b2, 0x0001, 0x020a, 0x0001, 0x0038, 0x02b2, 0x0001, 0x020f, + 0x0001, 0x0038, 0x02b2, 0x0003, 0x0216, 0x0219, 0x021e, 0x0001, + // Entry 2B3C0 - 2B3FF + 0x0038, 0x02b9, 0x0003, 0x0038, 0x02c1, 0x02cf, 0x02db, 0x0002, + 0x0221, 0x0225, 0x0002, 0x0038, 0x02ff, 0x02ed, 0x0002, 0x0038, + 0x0325, 0x0313, 0x0003, 0x022d, 0x0000, 0x0230, 0x0001, 0x0038, + 0x0339, 0x0002, 0x0233, 0x0237, 0x0002, 0x0038, 0x033e, 0x033e, + 0x0002, 0x0038, 0x034a, 0x034a, 0x0003, 0x023f, 0x0000, 0x0242, + 0x0001, 0x0038, 0x0339, 0x0002, 0x0245, 0x0249, 0x0002, 0x0038, + 0x033e, 0x033e, 0x0002, 0x0038, 0x034a, 0x034a, 0x0003, 0x0251, + 0x0254, 0x0259, 0x0001, 0x0038, 0x0356, 0x0003, 0x0038, 0x0361, + // Entry 2B400 - 2B43F + 0x0372, 0x0381, 0x0002, 0x025c, 0x0260, 0x0002, 0x0038, 0x03ab, + 0x0396, 0x0002, 0x0038, 0x03d7, 0x03c2, 0x0003, 0x0268, 0x0000, + 0x026b, 0x0001, 0x0038, 0x03ec, 0x0002, 0x026e, 0x0272, 0x0002, + 0x0038, 0x03fe, 0x03f1, 0x0002, 0x0038, 0x0419, 0x040c, 0x0003, + 0x027a, 0x0000, 0x027d, 0x0001, 0x0038, 0x03ec, 0x0002, 0x0280, + 0x0284, 0x0002, 0x0038, 0x03fe, 0x03f1, 0x0002, 0x0038, 0x0419, + 0x040c, 0x0003, 0x028c, 0x028f, 0x0294, 0x0001, 0x0038, 0x0427, + 0x0003, 0x0038, 0x042d, 0x0439, 0x0443, 0x0002, 0x0297, 0x029b, + // Entry 2B440 - 2B47F + 0x0002, 0x0038, 0x0464, 0x0453, 0x0002, 0x0038, 0x0488, 0x0477, + 0x0003, 0x02a3, 0x0000, 0x02a6, 0x0001, 0x001c, 0x02e1, 0x0002, + 0x02a9, 0x02ad, 0x0002, 0x0038, 0x049b, 0x049b, 0x0002, 0x0038, + 0x04a7, 0x04a7, 0x0003, 0x02b5, 0x0000, 0x02b8, 0x0001, 0x001c, + 0x02e1, 0x0002, 0x02bb, 0x02bf, 0x0002, 0x0038, 0x049b, 0x049b, + 0x0002, 0x0038, 0x04a7, 0x04a7, 0x0004, 0x02c8, 0x02cb, 0x02d0, + 0x02db, 0x0001, 0x0038, 0x04b3, 0x0003, 0x0038, 0x04b9, 0x04c6, + 0x04c6, 0x0002, 0x02d3, 0x02d7, 0x0002, 0x0038, 0x04e2, 0x04d1, + // Entry 2B480 - 2B4BF + 0x0002, 0x0038, 0x0506, 0x04f5, 0x0001, 0x0038, 0x0519, 0x0004, + 0x02e3, 0x0000, 0x02e6, 0x02f1, 0x0001, 0x0038, 0x0526, 0x0002, + 0x02e9, 0x02ed, 0x0002, 0x0038, 0x052b, 0x052b, 0x0002, 0x0038, + 0x0538, 0x0538, 0x0001, 0x0038, 0x0519, 0x0004, 0x02f9, 0x0000, + 0x02fc, 0x0307, 0x0001, 0x0038, 0x0526, 0x0002, 0x02ff, 0x0303, + 0x0002, 0x0038, 0x052b, 0x052b, 0x0002, 0x0038, 0x0538, 0x0538, + 0x0001, 0x0038, 0x0519, 0x0001, 0x030c, 0x0001, 0x0038, 0x0545, + 0x0001, 0x0311, 0x0001, 0x0038, 0x0555, 0x0001, 0x0316, 0x0001, + // Entry 2B4C0 - 2B4FF + 0x0038, 0x0555, 0x0003, 0x031d, 0x0320, 0x0325, 0x0001, 0x0038, + 0x0561, 0x0003, 0x0038, 0x0565, 0x056e, 0x0574, 0x0002, 0x0328, + 0x032c, 0x0002, 0x0038, 0x058a, 0x057b, 0x0002, 0x0038, 0x05aa, + 0x059b, 0x0003, 0x0334, 0x0000, 0x0337, 0x0001, 0x0038, 0x0561, + 0x0002, 0x033a, 0x033e, 0x0002, 0x0038, 0x058a, 0x057b, 0x0002, + 0x0038, 0x05aa, 0x059b, 0x0003, 0x0346, 0x0000, 0x0349, 0x0001, + 0x0038, 0x0561, 0x0002, 0x034c, 0x0350, 0x0002, 0x0038, 0x058a, + 0x057b, 0x0002, 0x0038, 0x05aa, 0x059b, 0x0001, 0x0356, 0x0001, + // Entry 2B500 - 2B53F + 0x0038, 0x05bb, 0x0001, 0x035b, 0x0001, 0x0038, 0x05c9, 0x0001, + 0x0360, 0x0001, 0x0038, 0x05c9, 0x0001, 0x0365, 0x0001, 0x0038, + 0x05d4, 0x0001, 0x036a, 0x0001, 0x0038, 0x05e2, 0x0001, 0x036f, + 0x0001, 0x0038, 0x05e2, 0x0001, 0x0374, 0x0001, 0x0038, 0x05ed, + 0x0001, 0x0379, 0x0001, 0x0038, 0x0603, 0x0001, 0x037e, 0x0001, + 0x0038, 0x0603, 0x0003, 0x0000, 0x0385, 0x038a, 0x0003, 0x0038, + 0x0613, 0x061e, 0x0627, 0x0002, 0x038d, 0x0391, 0x0002, 0x0038, + 0x0636, 0x0636, 0x0002, 0x0038, 0x0645, 0x0645, 0x0003, 0x0000, + // Entry 2B540 - 2B57F + 0x0399, 0x039e, 0x0003, 0x0038, 0x0654, 0x065f, 0x0668, 0x0002, + 0x03a1, 0x03a5, 0x0002, 0x0038, 0x0677, 0x0677, 0x0002, 0x0038, + 0x0686, 0x0686, 0x0003, 0x0000, 0x03ad, 0x03b2, 0x0003, 0x0038, + 0x0695, 0x069f, 0x06a7, 0x0002, 0x03b5, 0x03b9, 0x0002, 0x0038, + 0x06b5, 0x06b5, 0x0002, 0x0038, 0x06c1, 0x06c1, 0x0003, 0x0000, + 0x03c1, 0x03c6, 0x0003, 0x0038, 0x06cd, 0x06d9, 0x06e2, 0x0002, + 0x03c9, 0x03cd, 0x0002, 0x0038, 0x06f1, 0x06f1, 0x0002, 0x0038, + 0x0700, 0x0700, 0x0003, 0x0000, 0x03d5, 0x03da, 0x0003, 0x0038, + // Entry 2B580 - 2B5BF + 0x06cd, 0x06d9, 0x06e2, 0x0002, 0x03dd, 0x03e1, 0x0002, 0x0038, + 0x06f1, 0x06f1, 0x0002, 0x0038, 0x0700, 0x0700, 0x0003, 0x0000, + 0x03e9, 0x03ee, 0x0003, 0x0038, 0x070f, 0x071a, 0x0722, 0x0002, + 0x03f1, 0x03f5, 0x0002, 0x0038, 0x072f, 0x072f, 0x0002, 0x0038, + 0x073d, 0x073d, 0x0003, 0x0000, 0x03fd, 0x0402, 0x0003, 0x0038, + 0x074b, 0x0756, 0x075f, 0x0002, 0x0405, 0x0409, 0x0002, 0x0038, + 0x076e, 0x076e, 0x0002, 0x0038, 0x077b, 0x077b, 0x0003, 0x0000, + 0x0411, 0x0416, 0x0003, 0x0038, 0x074b, 0x0756, 0x075f, 0x0002, + // Entry 2B5C0 - 2B5FF + 0x0419, 0x041d, 0x0002, 0x0038, 0x076e, 0x076e, 0x0002, 0x0038, + 0x077b, 0x077b, 0x0003, 0x0000, 0x0425, 0x042a, 0x0003, 0x0038, + 0x074b, 0x0756, 0x075f, 0x0002, 0x042d, 0x0431, 0x0002, 0x0038, + 0x076e, 0x076e, 0x0002, 0x0038, 0x077b, 0x077b, 0x0003, 0x0000, + 0x0439, 0x043e, 0x0003, 0x0038, 0x078a, 0x0795, 0x079e, 0x0002, + 0x0441, 0x0445, 0x0002, 0x0038, 0x07bc, 0x07ad, 0x0002, 0x0038, + 0x07cb, 0x07cb, 0x0003, 0x0000, 0x044d, 0x0452, 0x0003, 0x0038, + 0x078a, 0x0795, 0x079e, 0x0002, 0x0455, 0x0459, 0x0002, 0x0038, + // Entry 2B600 - 2B63F + 0x07bc, 0x07ad, 0x0002, 0x0038, 0x07da, 0x07cb, 0x0003, 0x0000, + 0x0461, 0x0466, 0x0003, 0x0038, 0x078a, 0x0795, 0x079e, 0x0002, + 0x0469, 0x046d, 0x0002, 0x0038, 0x07bc, 0x07ad, 0x0002, 0x0038, + 0x07da, 0x07cb, 0x0003, 0x0000, 0x0475, 0x047a, 0x0003, 0x0038, + 0x07e9, 0x07f5, 0x07ff, 0x0002, 0x047d, 0x0481, 0x0002, 0x0038, + 0x080f, 0x080f, 0x0002, 0x0038, 0x081f, 0x081f, 0x0003, 0x0000, + 0x0489, 0x048e, 0x0003, 0x0038, 0x07e9, 0x07f5, 0x07ff, 0x0002, + 0x0491, 0x0495, 0x0002, 0x0038, 0x080f, 0x080f, 0x0002, 0x0038, + // Entry 2B640 - 2B67F + 0x081f, 0x081f, 0x0003, 0x0000, 0x049d, 0x04a2, 0x0003, 0x0038, + 0x07e9, 0x07f5, 0x07ff, 0x0002, 0x04a5, 0x04a9, 0x0002, 0x0038, + 0x080f, 0x080f, 0x0002, 0x0038, 0x081f, 0x081f, 0x0003, 0x0000, + 0x04b1, 0x04b6, 0x0003, 0x0038, 0x082f, 0x0839, 0x0841, 0x0002, + 0x04b9, 0x04bd, 0x0002, 0x0038, 0x084f, 0x084f, 0x0002, 0x0038, + 0x085b, 0x085b, 0x0003, 0x0000, 0x04c5, 0x04ca, 0x0003, 0x0038, + 0x082f, 0x0839, 0x0841, 0x0002, 0x04cd, 0x04d1, 0x0002, 0x0038, + 0x084f, 0x084f, 0x0002, 0x0038, 0x085b, 0x085b, 0x0003, 0x0000, + // Entry 2B680 - 2B6BF + 0x04d9, 0x04de, 0x0003, 0x0038, 0x0869, 0x0873, 0x087b, 0x0002, + 0x04e1, 0x04e5, 0x0002, 0x0038, 0x0889, 0x0889, 0x0002, 0x0038, + 0x0895, 0x0895, 0x0003, 0x0000, 0x04ed, 0x04f2, 0x0003, 0x0038, + 0x08a3, 0x08ad, 0x08b5, 0x0002, 0x04f5, 0x04f9, 0x0002, 0x0038, + 0x08c3, 0x08c3, 0x0002, 0x0038, 0x08d0, 0x08d0, 0x0003, 0x0000, + 0x0501, 0x0506, 0x0003, 0x0038, 0x08a3, 0x08ad, 0x08de, 0x0002, + 0x0509, 0x050d, 0x0002, 0x0038, 0x08c3, 0x08c3, 0x0002, 0x0038, + 0x08d0, 0x08d0, 0x0003, 0x0000, 0x0515, 0x051a, 0x0003, 0x0038, + // Entry 2B6C0 - 2B6FF + 0x08ec, 0x08f5, 0x08fc, 0x0002, 0x051d, 0x0521, 0x0002, 0x0038, + 0x0909, 0x0909, 0x0002, 0x0038, 0x0924, 0x0916, 0x0001, 0x0527, + 0x0001, 0x0038, 0x0931, 0x0001, 0x052c, 0x0001, 0x0038, 0x0937, + 0x0001, 0x0531, 0x0001, 0x0038, 0x0931, 0x0003, 0x0538, 0x053b, + 0x053f, 0x0001, 0x0038, 0x094b, 0x0002, 0x0038, 0xffff, 0x0952, + 0x0002, 0x0542, 0x0546, 0x0002, 0x0038, 0x096c, 0x095c, 0x0002, + 0x0038, 0x098e, 0x097e, 0x0003, 0x054e, 0x0000, 0x0551, 0x0001, + 0x0038, 0x09a0, 0x0002, 0x0554, 0x0558, 0x0002, 0x0038, 0x09a4, + // Entry 2B700 - 2B73F + 0x09a4, 0x0002, 0x0038, 0x09b0, 0x09b0, 0x0003, 0x0560, 0x0000, + 0x0563, 0x0001, 0x0038, 0x09a0, 0x0002, 0x0566, 0x056a, 0x0002, + 0x0038, 0x09a4, 0x09a4, 0x0002, 0x0038, 0x09b0, 0x09b0, 0x0003, + 0x0572, 0x0575, 0x0579, 0x0001, 0x0038, 0x09bc, 0x0002, 0x0038, + 0xffff, 0x09c4, 0x0002, 0x057c, 0x0580, 0x0002, 0x0038, 0x09e0, + 0x09cf, 0x0002, 0x0038, 0x0a04, 0x09f3, 0x0003, 0x0588, 0x0000, + 0x058b, 0x0001, 0x0038, 0x0a17, 0x0002, 0x058e, 0x0592, 0x0002, + 0x0038, 0x0a1c, 0x0a1c, 0x0002, 0x0038, 0x0a29, 0x0a29, 0x0003, + // Entry 2B740 - 2B77F + 0x059a, 0x0000, 0x059d, 0x0001, 0x0038, 0x0a17, 0x0002, 0x05a0, + 0x05a4, 0x0002, 0x0038, 0x0a1c, 0x0a1c, 0x0002, 0x0038, 0x0a29, + 0x0a29, 0x0003, 0x05ac, 0x05af, 0x05b3, 0x0001, 0x0038, 0x0a36, + 0x0002, 0x0038, 0xffff, 0x0a3d, 0x0002, 0x05b6, 0x05ba, 0x0002, + 0x0038, 0x0a53, 0x0a42, 0x0002, 0x0038, 0x0a76, 0x0a65, 0x0003, + 0x05c2, 0x0000, 0x05c5, 0x0001, 0x0038, 0x0a88, 0x0002, 0x05c8, + 0x05cc, 0x0002, 0x0038, 0x0a8d, 0x0a8d, 0x0002, 0x0038, 0x0a9a, + 0x0a9a, 0x0003, 0x05d4, 0x0000, 0x05d7, 0x0001, 0x0038, 0x0a88, + // Entry 2B780 - 2B7BF + 0x0002, 0x05da, 0x05de, 0x0002, 0x0038, 0x0a8d, 0x0a8d, 0x0002, + 0x0038, 0x0a9a, 0x0a9a, 0x0001, 0x05e4, 0x0001, 0x0038, 0x0aa7, + 0x0001, 0x05e9, 0x0001, 0x0038, 0x0ab7, 0x0001, 0x05ee, 0x0001, + 0x0038, 0x0abe, 0x0004, 0x05f6, 0x05fb, 0x0600, 0x060f, 0x0003, + 0x0000, 0x1dc7, 0x2b2b, 0x2b33, 0x0003, 0x0038, 0x0ac5, 0x0acf, + 0x0ae3, 0x0002, 0x0000, 0x0603, 0x0003, 0x0000, 0x060a, 0x0607, + 0x0001, 0x0038, 0x0af5, 0x0003, 0x0038, 0xffff, 0x0b0e, 0x0b27, + 0x0002, 0x0000, 0x0612, 0x0003, 0x06ac, 0x0742, 0x0616, 0x0094, + // Entry 2B7C0 - 2B7FF + 0x0038, 0x0b3c, 0x0b4f, 0x0b68, 0x0b81, 0x0bb8, 0x0c04, 0x0c40, + 0x0c8a, 0x0ced, 0x0d53, 0x0db1, 0xffff, 0x0e09, 0x0e3d, 0x0e75, + 0x0ebf, 0x0f14, 0x0f55, 0x0f9d, 0x1006, 0x107c, 0x10de, 0x1134, + 0x117c, 0x11bd, 0x11ef, 0x11fc, 0x121c, 0x1250, 0x1279, 0x12ab, + 0x12d3, 0x1309, 0x133c, 0x1373, 0x13a5, 0x13c0, 0x13e7, 0x142d, + 0x1475, 0x149d, 0x14aa, 0x14c4, 0x14f5, 0x1535, 0x155e, 0x15b6, + 0x15f6, 0x162d, 0x1682, 0x16d2, 0x16fa, 0x1715, 0x1745, 0x1758, + 0x1781, 0x17b3, 0x17cc, 0x17ff, 0x185b, 0x189b, 0x18ae, 0x18d2, + // Entry 2B800 - 2B83F + 0x191e, 0x195c, 0x1984, 0x1997, 0x19ac, 0x19bb, 0x19d7, 0x19f2, + 0x1a17, 0x1a4c, 0x1a89, 0x1ac4, 0xffff, 0x1aee, 0x1b0a, 0x1b31, + 0x1b5b, 0x1b7c, 0x1bb2, 0x1bc4, 0x1bea, 0x1c1c, 0x1c3a, 0x1c68, + 0x1c77, 0x1c85, 0x1c9c, 0x1cc2, 0x1cec, 0x1d16, 0x1d73, 0x1dbf, + 0x1e01, 0x1e2d, 0x1e3c, 0x1e48, 0x1e6f, 0x1eca, 0x1f1b, 0x1f55, + 0x1f61, 0x1f96, 0x1fed, 0x202f, 0x2067, 0x2097, 0x20a4, 0x20d7, + 0x2117, 0x214e, 0x217c, 0x21ae, 0x21f0, 0x2201, 0x220f, 0x2220, + 0x2230, 0x224f, 0xffff, 0x228e, 0x22bc, 0x22ca, 0x22e1, 0x22f9, + // Entry 2B840 - 2B87F + 0x2314, 0x2323, 0x2330, 0x234d, 0x237d, 0x2391, 0x23b1, 0x23df, + 0x2402, 0x243e, 0x245b, 0x249b, 0x24df, 0x250f, 0x2533, 0x257a, + 0x25ac, 0x25ba, 0x25d1, 0x25fb, 0x263e, 0x0094, 0x0038, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0ba1, 0x0bf6, 0x0c30, 0x0c70, 0x0cce, + 0x0d3b, 0x0d93, 0xffff, 0x0dfd, 0x0e31, 0x0e65, 0x0ea5, 0x0f03, + 0x0f46, 0x0f83, 0x0fe1, 0x1060, 0x10c4, 0x1120, 0x116c, 0x11ac, + 0xffff, 0xffff, 0x120a, 0xffff, 0x1268, 0xffff, 0x12c5, 0x12fd, + 0x1331, 0x1362, 0xffff, 0xffff, 0x13d7, 0x1417, 0x1469, 0xffff, + // Entry 2B880 - 2B8BF + 0xffff, 0xffff, 0x14dd, 0xffff, 0x1546, 0x159e, 0xffff, 0x1617, + 0x1667, 0x16c6, 0xffff, 0xffff, 0xffff, 0xffff, 0x1770, 0xffff, + 0xffff, 0x17e5, 0x1843, 0xffff, 0xffff, 0x18bc, 0x190d, 0x1950, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1a0b, 0x1a3d, + 0x1a7a, 0x1ab7, 0xffff, 0xffff, 0xffff, 0x1b24, 0xffff, 0x1b69, + 0xffff, 0xffff, 0x1bd9, 0xffff, 0x1c2b, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1cb5, 0xffff, 0x1cfa, 0x1d5e, 0x1dad, 0x1df3, 0xffff, + 0xffff, 0xffff, 0x1e55, 0x1eb3, 0x1f06, 0xffff, 0xffff, 0x1f7c, + // Entry 2B8C0 - 2B8FF + 0x1fda, 0x2023, 0x2057, 0xffff, 0xffff, 0x20c5, 0x210b, 0x213f, + 0xffff, 0x2195, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x223f, + 0xffff, 0x227f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x233d, 0xffff, 0xffff, 0x23a2, 0xffff, 0x23ec, 0xffff, + 0x244c, 0x2489, 0x24cf, 0xffff, 0x2520, 0x2569, 0xffff, 0xffff, + 0xffff, 0x25ec, 0x2629, 0x0094, 0x0038, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0bd6, 0x0c19, 0x0c57, 0x0cab, 0x0d13, 0x0d72, 0x0dd6, + 0xffff, 0x0e1c, 0x0e50, 0x0e8c, 0x0ee0, 0x0f2c, 0x0f6b, 0x0fbe, + // Entry 2B900 - 2B93F + 0x1032, 0x109f, 0x10ff, 0x114f, 0x1193, 0x11d5, 0xffff, 0xffff, + 0x1235, 0xffff, 0x1291, 0xffff, 0x12e8, 0x131c, 0x134e, 0x138b, + 0xffff, 0xffff, 0x13fe, 0x144a, 0x1488, 0xffff, 0xffff, 0xffff, + 0x1514, 0xffff, 0x157d, 0x15d5, 0xffff, 0x164a, 0x16a4, 0x16e5, + 0xffff, 0xffff, 0xffff, 0xffff, 0x1799, 0xffff, 0xffff, 0x1820, + 0x187a, 0xffff, 0xffff, 0x18ef, 0x1936, 0x196f, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x1a2a, 0x1a62, 0x1a9f, 0x1ad8, + 0xffff, 0xffff, 0xffff, 0x1b45, 0xffff, 0x1b96, 0xffff, 0xffff, + // Entry 2B940 - 2B97F + 0x1c02, 0xffff, 0x1c50, 0xffff, 0xffff, 0xffff, 0xffff, 0x1cd6, + 0xffff, 0x1d39, 0x1d8f, 0x1dd8, 0x1e16, 0xffff, 0xffff, 0xffff, + 0x1e90, 0x1ee8, 0x1f37, 0xffff, 0xffff, 0x1fb7, 0x2007, 0x2042, + 0x207e, 0xffff, 0xffff, 0x20f0, 0x212a, 0x2164, 0xffff, 0x21ce, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2266, 0xffff, 0x22a4, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2364, + 0xffff, 0xffff, 0x23c7, 0xffff, 0x241f, 0xffff, 0x2471, 0x24b4, + 0x24f6, 0xffff, 0x254d, 0x2592, 0xffff, 0xffff, 0xffff, 0x2611, + // Entry 2B980 - 2B9BF + 0x265a, 0x0002, 0x0003, 0x00e9, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, 0x0023, + 0x001d, 0x001a, 0x0020, 0x0001, 0x0006, 0x000d, 0x0001, 0x0002, + 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0002, 0x0587, 0x0008, + 0x002f, 0x0066, 0x008b, 0x009f, 0x00b7, 0x00c7, 0x00d8, 0x0000, + 0x0002, 0x0032, 0x0054, 0x0003, 0x0036, 0x0000, 0x0045, 0x000d, + 0x001a, 0xffff, 0x0003, 0x2d9e, 0x2da2, 0x000f, 0x2da7, 0x2dab, + // Entry 2B9C0 - 2B9FF + 0x2daf, 0x2db3, 0x2db7, 0x2dbb, 0x2dc0, 0x2dc5, 0x000d, 0x0039, + 0xffff, 0x0000, 0x000d, 0x001b, 0x002b, 0x0038, 0x0047, 0x005a, + 0x0069, 0x0079, 0x0087, 0x0096, 0x00ae, 0x0002, 0x0000, 0x0057, + 0x000d, 0x0000, 0xffff, 0x2b20, 0x2773, 0x2773, 0x2773, 0x2773, + 0x2b27, 0x2b20, 0x236c, 0x2773, 0x2b37, 0x2b37, 0x2b37, 0x0002, + 0x0069, 0x007f, 0x0003, 0x006d, 0x0000, 0x0076, 0x0007, 0x0039, + 0x00c5, 0x00c9, 0x00cd, 0x00d1, 0x00d6, 0x00da, 0x00de, 0x0007, + 0x0039, 0x00e2, 0x00ec, 0x00fd, 0x0106, 0x0111, 0x0119, 0x0123, + // Entry 2BA00 - 2BA3F + 0x0002, 0x0000, 0x0082, 0x0007, 0x0000, 0x2523, 0x2151, 0x2146, + 0x241f, 0x241f, 0x241f, 0x241f, 0x0001, 0x008d, 0x0003, 0x0091, + 0x0000, 0x0098, 0x0005, 0x0009, 0xffff, 0x025a, 0x025d, 0x0260, + 0x0263, 0x0005, 0x0039, 0xffff, 0x0131, 0x013e, 0x014c, 0x015c, + 0x0001, 0x00a1, 0x0003, 0x00a5, 0x0000, 0x00ae, 0x0002, 0x00a8, + 0x00ab, 0x0001, 0x0039, 0x0169, 0x0001, 0x0039, 0x0174, 0x0002, + 0x00b1, 0x00b4, 0x0001, 0x0039, 0x0169, 0x0001, 0x0039, 0x0174, + 0x0003, 0x00c1, 0x0000, 0x00bb, 0x0001, 0x00bd, 0x0002, 0x0039, + // Entry 2BA40 - 2BA7F + 0x017e, 0x018c, 0x0001, 0x00c3, 0x0002, 0x0039, 0x019c, 0x019f, + 0x0004, 0x00d5, 0x00cf, 0x00cc, 0x00d2, 0x0001, 0x0006, 0x015b, + 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, 0x0002, + 0x08e8, 0x0004, 0x00e6, 0x00e0, 0x00dd, 0x00e3, 0x0001, 0x0000, + 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, + 0x0000, 0x0546, 0x0040, 0x012a, 0x0000, 0x0000, 0x012f, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0134, 0x0000, 0x0000, 0x0139, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x013e, 0x0000, 0x0000, + // Entry 2BA80 - 2BABF + 0x0000, 0x0000, 0x0000, 0x0149, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x014e, + 0x0000, 0x0153, 0x0000, 0x0000, 0x0158, 0x0000, 0x0000, 0x015d, + 0x0000, 0x0000, 0x0162, 0x0001, 0x012c, 0x0001, 0x0039, 0x01a2, + 0x0001, 0x0131, 0x0001, 0x0006, 0x016f, 0x0001, 0x0136, 0x0001, + 0x0039, 0x01aa, 0x0001, 0x013b, 0x0001, 0x0039, 0x01af, 0x0002, + // Entry 2BAC0 - 2BAFF + 0x0141, 0x0144, 0x0001, 0x001a, 0x01e1, 0x0003, 0x0039, 0x01b6, + 0x01bc, 0x01c7, 0x0001, 0x014b, 0x0001, 0x0039, 0x01cd, 0x0001, + 0x0150, 0x0001, 0x0039, 0x01d7, 0x0001, 0x0155, 0x0001, 0x0009, + 0x0308, 0x0001, 0x015a, 0x0001, 0x0039, 0x01ec, 0x0001, 0x015f, + 0x0001, 0x000a, 0x01c8, 0x0001, 0x0164, 0x0001, 0x0039, 0x01f5, + 0x0002, 0x0003, 0x00e9, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, 0x0023, 0x001d, + // Entry 2BB00 - 2BB3F + 0x001a, 0x0020, 0x0001, 0x0006, 0x000d, 0x0001, 0x0002, 0x0010, + 0x0001, 0x0002, 0x001b, 0x0001, 0x0002, 0x0587, 0x0008, 0x002f, + 0x0066, 0x008b, 0x009f, 0x00b7, 0x00c7, 0x00d8, 0x0000, 0x0002, + 0x0032, 0x0054, 0x0003, 0x0036, 0x0000, 0x0045, 0x000d, 0x0006, + 0xffff, 0x001e, 0x432b, 0x432f, 0x42a5, 0x42a9, 0x42ad, 0x4333, + 0x4337, 0x433b, 0x4295, 0x433f, 0x422c, 0x000d, 0x0039, 0xffff, + 0x0206, 0x0213, 0x0221, 0x022f, 0x0240, 0x0250, 0x0267, 0x0281, + 0x029b, 0x02b6, 0x02d0, 0x02ef, 0x0002, 0x0000, 0x0057, 0x000d, + // Entry 2BB40 - 2BB7F + 0x0000, 0xffff, 0x257b, 0x2364, 0x2b20, 0x241f, 0x2b20, 0x257b, + 0x257b, 0x241f, 0x2b22, 0x236a, 0x236c, 0x236e, 0x0002, 0x0069, + 0x007f, 0x0003, 0x006d, 0x0000, 0x0076, 0x0007, 0x0039, 0x030e, + 0x0312, 0x0316, 0x031a, 0x031e, 0x0322, 0x0326, 0x0007, 0x0039, + 0x032a, 0x0339, 0x0348, 0x035a, 0x036b, 0x0385, 0x03a0, 0x0002, + 0x0000, 0x0082, 0x0007, 0x0000, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0033, 0x0001, 0x008d, 0x0003, 0x0091, 0x0000, + 0x0098, 0x0005, 0x0009, 0xffff, 0x025a, 0x025d, 0x0260, 0x0263, + // Entry 2BB80 - 2BBBF + 0x0005, 0x0009, 0xffff, 0x0266, 0x026d, 0x0274, 0x027b, 0x0001, + 0x00a1, 0x0003, 0x00a5, 0x0000, 0x00ae, 0x0002, 0x00a8, 0x00ab, + 0x0001, 0x0039, 0x03af, 0x0001, 0x0039, 0x03b4, 0x0002, 0x00b1, + 0x00b4, 0x0001, 0x0039, 0x03af, 0x0001, 0x0039, 0x03b4, 0x0003, + 0x00c1, 0x0000, 0x00bb, 0x0001, 0x00bd, 0x0002, 0x0039, 0x03ba, + 0x03c9, 0x0001, 0x00c3, 0x0002, 0x0039, 0x03d7, 0x03da, 0x0004, + 0x00d5, 0x00cf, 0x00cc, 0x00d2, 0x0001, 0x0006, 0x015b, 0x0001, + 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, 0x0002, 0x08e8, + // Entry 2BBC0 - 2BBFF + 0x0004, 0x00e6, 0x00e0, 0x00dd, 0x00e3, 0x0001, 0x0000, 0x0524, + 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, + 0x0546, 0x0040, 0x012a, 0x0000, 0x0000, 0x012f, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0134, 0x0000, 0x0000, 0x0139, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x013e, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0149, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 2BC00 - 2BC3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x014e, 0x0000, + 0x0153, 0x0000, 0x0000, 0x0158, 0x0000, 0x0000, 0x015d, 0x0000, + 0x0000, 0x0162, 0x0001, 0x012c, 0x0001, 0x0039, 0x03dd, 0x0001, + 0x0131, 0x0001, 0x0006, 0x016f, 0x0001, 0x0136, 0x0001, 0x0039, + 0x03e4, 0x0001, 0x013b, 0x0001, 0x0039, 0x03ea, 0x0002, 0x0141, + 0x0144, 0x0001, 0x0039, 0x03f1, 0x0003, 0x0039, 0x03f8, 0x03fd, + 0x0402, 0x0001, 0x014b, 0x0001, 0x0039, 0x0408, 0x0001, 0x0150, + 0x0001, 0x0039, 0x041a, 0x0001, 0x0155, 0x0001, 0x0009, 0x0308, + // Entry 2BC40 - 2BC7F + 0x0001, 0x015a, 0x0001, 0x0006, 0x01bc, 0x0001, 0x015f, 0x0001, + 0x0009, 0x030c, 0x0001, 0x0164, 0x0001, 0x0039, 0x0425, 0x0003, + 0x0004, 0x01a0, 0x0431, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000d, 0x0038, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0016, 0x0000, 0x0027, 0x0004, 0x0024, 0x001e, + 0x001b, 0x0021, 0x0001, 0x0039, 0x0434, 0x0001, 0x0039, 0x044f, + 0x0001, 0x0002, 0x001b, 0x0001, 0x0000, 0x240c, 0x0004, 0x0035, + 0x002f, 0x002c, 0x0032, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, + // Entry 2BC80 - 2BCBF + 0x022e, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, + 0x0041, 0x00a6, 0x00fd, 0x0132, 0x0153, 0x016d, 0x017e, 0x018f, + 0x0002, 0x0044, 0x0075, 0x0003, 0x0048, 0x0057, 0x0066, 0x000d, + 0x0006, 0xffff, 0x001e, 0x432b, 0x4279, 0x4385, 0x4389, 0x42ad, + 0x4333, 0x4337, 0x438d, 0x4391, 0x4395, 0x4399, 0x000d, 0x0000, + 0xffff, 0x257b, 0x2364, 0x2b20, 0x241f, 0x2b20, 0x257b, 0x257b, + 0x241f, 0x2b22, 0x236a, 0x236c, 0x236e, 0x000d, 0x0039, 0xffff, + 0x0464, 0x046b, 0x0473, 0x0479, 0x047f, 0x0484, 0x048a, 0x0490, + // Entry 2BCC0 - 2BCFF + 0x0497, 0x04a0, 0x04a7, 0x04b0, 0x0003, 0x0079, 0x0088, 0x0097, + 0x000d, 0x0006, 0xffff, 0x001e, 0x432b, 0x4279, 0x4385, 0x4389, + 0x42ad, 0x4333, 0x4337, 0x438d, 0x4391, 0x4395, 0x4399, 0x000d, + 0x0000, 0xffff, 0x257b, 0x2364, 0x2b20, 0x241f, 0x2b20, 0x257b, + 0x257b, 0x241f, 0x2b22, 0x236a, 0x236c, 0x236e, 0x000d, 0x0039, + 0xffff, 0x0464, 0x046b, 0x0473, 0x0479, 0x047f, 0x0484, 0x048a, + 0x0490, 0x0497, 0x04a0, 0x04a7, 0x04b0, 0x0002, 0x00a9, 0x00d3, + 0x0005, 0x00af, 0x00b8, 0x00ca, 0x0000, 0x00c1, 0x0007, 0x0002, + // Entry 2BD00 - 2BD3F + 0x0076, 0x4cf3, 0x4cf7, 0x4cfb, 0x4cff, 0x4d03, 0x4d07, 0x0007, + 0x0000, 0x236e, 0x2b22, 0x2b27, 0x2773, 0x2773, 0x2b22, 0x2b22, + 0x0007, 0x0039, 0x04b9, 0x04bc, 0x04bf, 0x04c2, 0x04c5, 0x04c8, + 0x04cb, 0x0007, 0x0039, 0x04ce, 0x04d6, 0x04e3, 0x04ee, 0x04fa, + 0x0505, 0x0510, 0x0005, 0x00d9, 0x00e2, 0x00f4, 0x0000, 0x00eb, + 0x0007, 0x0002, 0x0076, 0x4cf3, 0x4cf7, 0x4cfb, 0x4cff, 0x4d03, + 0x4d07, 0x0007, 0x0000, 0x236e, 0x2b22, 0x2b27, 0x2773, 0x2773, + 0x2b22, 0x2b22, 0x0007, 0x0039, 0x04b9, 0x04bc, 0x04bf, 0x04c2, + // Entry 2BD40 - 2BD7F + 0x04c5, 0x04c8, 0x04cb, 0x0007, 0x0039, 0x04ce, 0x04d6, 0x04e3, + 0x04ee, 0x04fa, 0x0505, 0x0517, 0x0002, 0x0100, 0x0119, 0x0003, + 0x0104, 0x010b, 0x0112, 0x0005, 0x001d, 0xffff, 0x1674, 0x1677, + 0x167a, 0x167d, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x0005, 0x0039, 0xffff, 0x051f, 0x052d, 0x053b, 0x0549, + 0x0003, 0x011d, 0x0124, 0x012b, 0x0005, 0x001d, 0xffff, 0x1674, + 0x1677, 0x167a, 0x167d, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x0005, 0x0039, 0xffff, 0x051f, 0x052d, 0x053b, + // Entry 2BD80 - 2BDBF + 0x0549, 0x0001, 0x0134, 0x0003, 0x0138, 0x0141, 0x014a, 0x0002, + 0x013b, 0x013e, 0x0001, 0x0000, 0x23cd, 0x0001, 0x0000, 0x23d0, + 0x0002, 0x0144, 0x0147, 0x0001, 0x0000, 0x1f9c, 0x0001, 0x0000, + 0x21e4, 0x0002, 0x014d, 0x0150, 0x0001, 0x0000, 0x23cd, 0x0001, + 0x0000, 0x23d0, 0x0003, 0x0162, 0x0000, 0x0157, 0x0002, 0x015a, + 0x015e, 0x0002, 0x0039, 0x0557, 0x057a, 0x0002, 0x0039, 0x0567, + 0x058b, 0x0002, 0x0165, 0x0169, 0x0002, 0x0002, 0x04c4, 0x4d0b, + 0x0002, 0x0039, 0x0595, 0x0599, 0x0004, 0x017b, 0x0175, 0x0172, + // Entry 2BDC0 - 2BDFF + 0x0178, 0x0001, 0x0039, 0x059c, 0x0001, 0x0039, 0x05b5, 0x0001, + 0x0002, 0x003c, 0x0001, 0x0002, 0x028b, 0x0004, 0x018c, 0x0186, + 0x0183, 0x0189, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, + 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, 0x019d, + 0x0197, 0x0194, 0x019a, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0040, + 0x01e1, 0x0000, 0x0000, 0x01e6, 0x01fb, 0x020b, 0x021b, 0x022b, + 0x023b, 0x024b, 0x0260, 0x0270, 0x0280, 0x0295, 0x02a5, 0x0000, + // Entry 2BE00 - 2BE3F + 0x0000, 0x0000, 0x02b5, 0x02ca, 0x02da, 0x0000, 0x0000, 0x0000, + 0x02ea, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02ef, 0x02f7, + 0x02ff, 0x0307, 0x030f, 0x0317, 0x031f, 0x0327, 0x032f, 0x0337, + 0x033f, 0x0347, 0x034f, 0x0357, 0x035f, 0x0367, 0x036f, 0x0377, + 0x037f, 0x0387, 0x038f, 0x0000, 0x0397, 0x0000, 0x039c, 0x03ac, + 0x03bc, 0x03cc, 0x03dc, 0x03ec, 0x03fc, 0x040c, 0x041c, 0x042c, + 0x0001, 0x01e3, 0x0001, 0x0000, 0x1a35, 0x0003, 0x01ea, 0x01ed, + 0x01f2, 0x0001, 0x0039, 0x05c8, 0x0003, 0x0039, 0x05cc, 0x05d7, + // Entry 2BE40 - 2BE7F + 0x05e1, 0x0002, 0x01f5, 0x01f8, 0x0001, 0x0039, 0x05ee, 0x0001, + 0x0039, 0x05fc, 0x0003, 0x01ff, 0x0000, 0x0202, 0x0001, 0x0039, + 0x060a, 0x0002, 0x0205, 0x0208, 0x0001, 0x0039, 0x05ee, 0x0001, + 0x0039, 0x05fc, 0x0003, 0x020f, 0x0000, 0x0212, 0x0001, 0x0039, + 0x060a, 0x0002, 0x0215, 0x0218, 0x0001, 0x0039, 0x05ee, 0x0001, + 0x0039, 0x05fc, 0x0003, 0x021f, 0x0000, 0x0222, 0x0001, 0x0039, + 0x060e, 0x0002, 0x0225, 0x0228, 0x0001, 0x0039, 0x0618, 0x0001, + 0x0039, 0x062c, 0x0003, 0x022f, 0x0000, 0x0232, 0x0001, 0x000b, + // Entry 2BE80 - 2BEBF + 0x0c78, 0x0002, 0x0235, 0x0238, 0x0001, 0x0039, 0x0640, 0x0001, + 0x0039, 0x0650, 0x0003, 0x023f, 0x0000, 0x0242, 0x0001, 0x000b, + 0x0c78, 0x0002, 0x0245, 0x0248, 0x0001, 0x0039, 0x0640, 0x0001, + 0x0039, 0x0650, 0x0003, 0x024f, 0x0252, 0x0257, 0x0001, 0x001f, + 0x05d3, 0x0003, 0x0039, 0x0660, 0x066b, 0x0675, 0x0002, 0x025a, + 0x025d, 0x0001, 0x0039, 0x0682, 0x0001, 0x0039, 0x0690, 0x0003, + 0x0264, 0x0000, 0x0267, 0x0001, 0x0006, 0x09ee, 0x0002, 0x026a, + 0x026d, 0x0001, 0x0039, 0x0682, 0x0001, 0x0039, 0x0690, 0x0003, + // Entry 2BEC0 - 2BEFF + 0x0274, 0x0000, 0x0277, 0x0001, 0x0006, 0x09ee, 0x0002, 0x027a, + 0x027d, 0x0001, 0x0039, 0x0682, 0x0001, 0x0039, 0x0690, 0x0003, + 0x0284, 0x0287, 0x028c, 0x0001, 0x0039, 0x069e, 0x0003, 0x0039, + 0x06a5, 0x06b3, 0x06c0, 0x0002, 0x028f, 0x0292, 0x0001, 0x0039, + 0x06d0, 0x0001, 0x0039, 0x06e1, 0x0003, 0x0299, 0x0000, 0x029c, + 0x0001, 0x0039, 0x06f2, 0x0002, 0x029f, 0x02a2, 0x0001, 0x0039, + 0x06f7, 0x0001, 0x0039, 0x0706, 0x0003, 0x02a9, 0x0000, 0x02ac, + 0x0001, 0x0039, 0x06f2, 0x0002, 0x02af, 0x02b2, 0x0001, 0x0039, + // Entry 2BF00 - 2BF3F + 0x06f7, 0x0001, 0x0039, 0x0706, 0x0003, 0x02b9, 0x02bc, 0x02c1, + 0x0001, 0x0028, 0x0194, 0x0003, 0x0039, 0x0715, 0x071a, 0x071e, + 0x0002, 0x02c4, 0x02c7, 0x0001, 0x0039, 0x0724, 0x0001, 0x0039, + 0x0732, 0x0003, 0x02ce, 0x0000, 0x02d1, 0x0001, 0x0010, 0x0624, + 0x0002, 0x02d4, 0x02d7, 0x0001, 0x0039, 0x0724, 0x0001, 0x0039, + 0x0732, 0x0003, 0x02de, 0x0000, 0x02e1, 0x0001, 0x0010, 0x0624, + 0x0002, 0x02e4, 0x02e7, 0x0001, 0x0039, 0x0724, 0x0001, 0x0039, + 0x0732, 0x0001, 0x02ec, 0x0001, 0x0039, 0x0740, 0x0002, 0x0000, + // Entry 2BF40 - 2BF7F + 0x02f2, 0x0003, 0x0039, 0x074e, 0x075d, 0x076b, 0x0002, 0x0000, + 0x02fa, 0x0003, 0x0039, 0x077c, 0x0788, 0x0793, 0x0002, 0x0000, + 0x0302, 0x0003, 0x0039, 0x077c, 0x0788, 0x0793, 0x0002, 0x0000, + 0x030a, 0x0003, 0x0039, 0x07a1, 0x07b5, 0x07c8, 0x0002, 0x0000, + 0x0312, 0x0003, 0x0039, 0x07de, 0x07ea, 0x07f5, 0x0002, 0x0000, + 0x031a, 0x0003, 0x0039, 0x07de, 0x07ea, 0x07f5, 0x0002, 0x0000, + 0x0322, 0x0003, 0x0039, 0x0803, 0x0815, 0x0826, 0x0002, 0x0000, + 0x032a, 0x0003, 0x0039, 0x083a, 0x0846, 0x0851, 0x0002, 0x0000, + // Entry 2BF80 - 2BFBF + 0x0332, 0x0003, 0x0039, 0x083a, 0x0846, 0x0851, 0x0002, 0x0000, + 0x033a, 0x0003, 0x0039, 0x085f, 0x0872, 0x0884, 0x0002, 0x0000, + 0x0342, 0x0003, 0x0039, 0x0899, 0x08a5, 0x08b0, 0x0002, 0x0000, + 0x034a, 0x0003, 0x0039, 0x0899, 0x08a5, 0x08b0, 0x0002, 0x0000, + 0x0352, 0x0003, 0x0039, 0x08be, 0x08d0, 0x08e1, 0x0002, 0x0000, + 0x035a, 0x0003, 0x0039, 0x08f5, 0x0901, 0x090c, 0x0002, 0x0000, + 0x0362, 0x0003, 0x0039, 0x08f5, 0x0901, 0x090c, 0x0002, 0x0000, + 0x036a, 0x0003, 0x0039, 0x091a, 0x092c, 0x093d, 0x0002, 0x0000, + // Entry 2BFC0 - 2BFFF + 0x0372, 0x0003, 0x0039, 0x0951, 0x095d, 0x0968, 0x0002, 0x0000, + 0x037a, 0x0003, 0x0039, 0x0951, 0x095d, 0x0968, 0x0002, 0x0000, + 0x0382, 0x0003, 0x0039, 0x0976, 0x0984, 0x0991, 0x0002, 0x0000, + 0x038a, 0x0003, 0x0039, 0x09a1, 0x09ad, 0x09b8, 0x0002, 0x0000, + 0x0392, 0x0003, 0x0039, 0x09a1, 0x09ad, 0x09b8, 0x0001, 0x0399, + 0x0001, 0x0007, 0x2485, 0x0003, 0x03a0, 0x0000, 0x03a3, 0x0001, + 0x0039, 0x09c6, 0x0002, 0x03a6, 0x03a9, 0x0001, 0x0039, 0x09ca, + 0x0001, 0x0039, 0x09d8, 0x0003, 0x03b0, 0x0000, 0x03b3, 0x0001, + // Entry 2C000 - 2C03F + 0x0035, 0x0942, 0x0002, 0x03b6, 0x03b9, 0x0001, 0x0039, 0x09ca, + 0x0001, 0x0039, 0x09d8, 0x0003, 0x03c0, 0x0000, 0x03c3, 0x0001, + 0x0000, 0x213b, 0x0002, 0x03c6, 0x03c9, 0x0001, 0x0039, 0x09ca, + 0x0001, 0x0039, 0x09d8, 0x0003, 0x03d0, 0x0000, 0x03d3, 0x0001, + 0x0039, 0x09e6, 0x0002, 0x03d6, 0x03d9, 0x0001, 0x0039, 0x09ed, + 0x0001, 0x0039, 0x09fe, 0x0003, 0x03e0, 0x0000, 0x03e3, 0x0001, + 0x000b, 0x1250, 0x0002, 0x03e6, 0x03e9, 0x0001, 0x0039, 0x0a0f, + 0x0001, 0x0039, 0x0a1d, 0x0003, 0x03f0, 0x0000, 0x03f3, 0x0001, + // Entry 2C040 - 2C07F + 0x0000, 0x1f9a, 0x0002, 0x03f6, 0x03f9, 0x0001, 0x0039, 0x0a2b, + 0x0001, 0x0039, 0x0a37, 0x0003, 0x0400, 0x0000, 0x0403, 0x0001, + 0x0039, 0x0a43, 0x0002, 0x0406, 0x0409, 0x0001, 0x0039, 0x0a4b, + 0x0001, 0x0039, 0x0a5d, 0x0003, 0x0410, 0x0000, 0x0413, 0x0001, + 0x0002, 0x4cf3, 0x0002, 0x0416, 0x0419, 0x0001, 0x0039, 0x0a6f, + 0x0001, 0x0039, 0x0a7d, 0x0003, 0x0420, 0x0000, 0x0423, 0x0001, + 0x0000, 0x2002, 0x0002, 0x0426, 0x0429, 0x0001, 0x0039, 0x0a8b, + 0x0001, 0x0039, 0x0a97, 0x0001, 0x042e, 0x0001, 0x0039, 0x0aa3, + // Entry 2C080 - 2C0BF + 0x0004, 0x0436, 0x043b, 0x0000, 0x0440, 0x0003, 0x0000, 0x1dc7, + 0x2ae8, 0x2aef, 0x0003, 0x0039, 0x0aad, 0x0ab8, 0x0acc, 0x0002, + 0x0000, 0x0443, 0x0003, 0x047a, 0x04ad, 0x0447, 0x0031, 0x0039, + 0xffff, 0x0ae0, 0x0af6, 0x0b0d, 0x0b3a, 0xffff, 0xffff, 0x0b88, + 0x0bbf, 0x0bfb, 0x0c3d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0c80, 0x0ccd, 0x0d32, 0x0da2, 0x0e03, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 2C0C0 - 2C0FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0e61, 0x0eb6, 0xffff, + 0x0f0e, 0x0031, 0x0039, 0xffff, 0xffff, 0xffff, 0xffff, 0x0b22, + 0xffff, 0xffff, 0x0b7c, 0x0bb2, 0x0beb, 0x0c2d, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0c6f, 0x0cb4, 0x0d11, 0x0d88, + 0x0de8, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0e4b, 0x0e9f, 0xffff, 0x0ef6, 0x0031, 0x0039, 0xffff, 0xffff, + // Entry 2C100 - 2C13F + 0xffff, 0xffff, 0x0b5a, 0xffff, 0xffff, 0x0b9c, 0x0bd4, 0x0c13, + 0x0c55, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0c99, + 0x0cee, 0x0d5c, 0x0dc4, 0x0e26, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0e7f, 0x0ed5, 0xffff, 0x0f2e, 0x0002, + 0x0003, 0x00e9, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000c, 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 2C140 - 2C17F + 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, 0x0023, 0x001d, 0x001a, + 0x0020, 0x0001, 0x0002, 0x0000, 0x0001, 0x0002, 0x0010, 0x0001, + 0x0002, 0x0044, 0x0001, 0x0000, 0x240c, 0x0008, 0x002f, 0x0066, + 0x008b, 0x009f, 0x00b7, 0x00c7, 0x00d8, 0x0000, 0x0002, 0x0032, + 0x0054, 0x0003, 0x0036, 0x0000, 0x0045, 0x000d, 0x0018, 0xffff, + 0x010e, 0x0113, 0x298b, 0x011b, 0x298f, 0x0122, 0x0127, 0x2992, + 0x012f, 0x2995, 0x0133, 0x0137, 0x000d, 0x0018, 0xffff, 0x013b, + 0x0144, 0x014e, 0x0154, 0x298f, 0x015b, 0x0163, 0x2992, 0x016a, + // Entry 2C180 - 2C1BF + 0x0174, 0x017d, 0x0187, 0x0002, 0x0000, 0x0057, 0x000d, 0x0018, + 0xffff, 0x0191, 0x2999, 0x299b, 0x299d, 0x299b, 0x0191, 0x0191, + 0x299f, 0x29a1, 0x29a3, 0x29a5, 0x29a7, 0x0002, 0x0069, 0x007f, + 0x0003, 0x006d, 0x0000, 0x0076, 0x0007, 0x0006, 0x437d, 0x412c, + 0x4130, 0x439d, 0x4138, 0x43a1, 0x43a5, 0x0007, 0x0018, 0x01a4, + 0x29a9, 0x29af, 0x01bb, 0x29b7, 0x29c1, 0x29c8, 0x0002, 0x0000, + 0x0082, 0x0007, 0x0000, 0x2b29, 0x2b27, 0x2b27, 0x2296, 0x2296, + 0x2296, 0x2b3a, 0x0001, 0x008d, 0x0003, 0x0091, 0x0000, 0x0098, + // Entry 2C1C0 - 2C1FF + 0x0005, 0x0018, 0xffff, 0x01d9, 0x01dc, 0x01df, 0x01e2, 0x0005, + 0x0018, 0xffff, 0x01e5, 0x01ee, 0x01f7, 0x0200, 0x0001, 0x00a1, + 0x0003, 0x00a5, 0x0000, 0x00ae, 0x0002, 0x00a8, 0x00ab, 0x0001, + 0x0039, 0x0f50, 0x0001, 0x0039, 0x0f57, 0x0002, 0x00b1, 0x00b4, + 0x0001, 0x0039, 0x0f50, 0x0001, 0x0039, 0x0f57, 0x0003, 0x00c1, + 0x0000, 0x00bb, 0x0001, 0x00bd, 0x0002, 0x0018, 0x021d, 0x29d0, + 0x0001, 0x00c3, 0x0002, 0x0018, 0x0234, 0x0237, 0x0004, 0x00d5, + 0x00cf, 0x00cc, 0x00d2, 0x0001, 0x0002, 0x0025, 0x0001, 0x0002, + // Entry 2C200 - 2C23F + 0x0033, 0x0001, 0x0002, 0x0282, 0x0001, 0x0002, 0x028b, 0x0004, + 0x00e6, 0x00e0, 0x00dd, 0x00e3, 0x0001, 0x0000, 0x0524, 0x0001, + 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, + 0x0040, 0x012a, 0x0000, 0x0000, 0x012f, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0134, 0x0000, 0x0000, 0x0139, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x013e, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 2C240 - 2C27F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0149, 0x0000, 0x014e, + 0x0000, 0x0000, 0x0153, 0x0000, 0x0000, 0x0158, 0x0000, 0x0000, + 0x015d, 0x0001, 0x012c, 0x0001, 0x0018, 0x023a, 0x0001, 0x0131, + 0x0001, 0x0018, 0x0240, 0x0001, 0x0136, 0x0001, 0x0018, 0x0246, + 0x0001, 0x013b, 0x0001, 0x0018, 0x024c, 0x0002, 0x0141, 0x0144, + 0x0001, 0x0039, 0x0f5e, 0x0003, 0x0023, 0x0066, 0x2b10, 0x2b15, + 0x0001, 0x014b, 0x0001, 0x0039, 0x0f64, 0x0001, 0x0150, 0x0001, + // Entry 2C280 - 2C2BF + 0x0018, 0x027c, 0x0001, 0x0155, 0x0001, 0x0018, 0x0282, 0x0001, + 0x015a, 0x0001, 0x0018, 0x0289, 0x0001, 0x015f, 0x0001, 0x0018, + 0x028e, 0x0002, 0x0003, 0x00e9, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, 0x0023, + 0x001d, 0x001a, 0x0020, 0x0001, 0x0006, 0x000d, 0x0001, 0x0002, + 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0002, 0x0587, 0x0008, + 0x002f, 0x0066, 0x008b, 0x009f, 0x00b7, 0x00c7, 0x00d8, 0x0000, + // Entry 2C2C0 - 2C2FF + 0x0002, 0x0032, 0x0054, 0x0003, 0x0036, 0x0000, 0x0045, 0x000d, + 0x0039, 0xffff, 0x0f77, 0x0f7b, 0x0f7f, 0x0f83, 0x0f87, 0x0f8b, + 0x0f8f, 0x0f93, 0x0f97, 0x0f9b, 0x0f9f, 0x0fa3, 0x000d, 0x0039, + 0xffff, 0x0fa7, 0x0fb1, 0x0fc0, 0x0fd1, 0x0fdf, 0x0fef, 0x1003, + 0x1016, 0x1026, 0x1035, 0x1045, 0x105e, 0x0002, 0x0000, 0x0057, + 0x000d, 0x0000, 0xffff, 0x257b, 0x2773, 0x2289, 0x2773, 0x2289, + 0x2289, 0x2b3c, 0x2773, 0x2773, 0x204d, 0x204d, 0x2b3e, 0x0002, + 0x0069, 0x007f, 0x0003, 0x006d, 0x0000, 0x0076, 0x0007, 0x0039, + // Entry 2C300 - 2C33F + 0x1068, 0x106c, 0x1070, 0x1074, 0x1078, 0x107c, 0x1080, 0x0007, + 0x001a, 0x0128, 0x2dca, 0x0139, 0x2dd5, 0x014c, 0x0155, 0x2ddf, + 0x0002, 0x0000, 0x0082, 0x0007, 0x0000, 0x2773, 0x2b40, 0x2b40, + 0x2b40, 0x2b42, 0x2b40, 0x2b40, 0x0001, 0x008d, 0x0003, 0x0091, + 0x0000, 0x0098, 0x0005, 0x0006, 0xffff, 0x00f6, 0x00f9, 0x00fc, + 0x00ff, 0x0005, 0x0039, 0xffff, 0x1084, 0x1092, 0x10a0, 0x10b0, + 0x0001, 0x00a1, 0x0003, 0x00a5, 0x0000, 0x00ae, 0x0002, 0x00a8, + 0x00ab, 0x0001, 0x0039, 0x10bd, 0x0001, 0x0039, 0x10c4, 0x0002, + // Entry 2C340 - 2C37F + 0x00b1, 0x00b4, 0x0001, 0x0039, 0x10bd, 0x0001, 0x0039, 0x10c4, + 0x0003, 0x00c1, 0x0000, 0x00bb, 0x0001, 0x00bd, 0x0002, 0x001a, + 0x01ad, 0x01bd, 0x0001, 0x00c3, 0x0002, 0x001a, 0x01ce, 0x01d1, + 0x0004, 0x00d5, 0x00cf, 0x00cc, 0x00d2, 0x0001, 0x0006, 0x015b, + 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, 0x0002, + 0x08e8, 0x0004, 0x00e6, 0x00e0, 0x00dd, 0x00e3, 0x0001, 0x0000, + 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, + 0x0000, 0x0546, 0x0040, 0x012a, 0x0000, 0x0000, 0x012f, 0x0000, + // Entry 2C380 - 2C3BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0134, 0x0000, 0x0000, 0x0139, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x013e, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0149, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x014e, 0x0000, 0x0000, 0x0153, 0x0000, 0x0000, 0x0158, + 0x0000, 0x0000, 0x015d, 0x0001, 0x012c, 0x0001, 0x0039, 0x10cf, + // Entry 2C3C0 - 2C3FF + 0x0001, 0x0131, 0x0001, 0x0006, 0x016f, 0x0001, 0x0136, 0x0001, + 0x001a, 0x01db, 0x0001, 0x013b, 0x0001, 0x001a, 0x0128, 0x0002, + 0x0141, 0x0144, 0x0001, 0x001a, 0x01e1, 0x0003, 0x0039, 0x10d8, + 0x10dc, 0x10e6, 0x0001, 0x014b, 0x0001, 0x001a, 0x0205, 0x0001, + 0x0150, 0x0001, 0x001a, 0x021b, 0x0001, 0x0155, 0x0001, 0x001a, + 0x0221, 0x0001, 0x015a, 0x0001, 0x0009, 0x030c, 0x0001, 0x015f, + 0x0001, 0x0039, 0x10ee, 0x0003, 0x0004, 0x0261, 0x06ac, 0x0008, + 0x0000, 0x0000, 0x000d, 0x0000, 0x0000, 0x0000, 0x0024, 0x004f, + // Entry 2C400 - 2C43F + 0x0001, 0x000f, 0x0001, 0x0011, 0x0002, 0x0000, 0x0014, 0x000e, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x2215, 0x2218, 0x2426, 0x0422, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x002d, 0x0000, 0x003e, + 0x0004, 0x003b, 0x0035, 0x0032, 0x0038, 0x0001, 0x0039, 0x1101, + 0x0001, 0x0039, 0x1118, 0x0001, 0x0039, 0x1129, 0x0001, 0x0007, + 0x0099, 0x0004, 0x004c, 0x0046, 0x0043, 0x0049, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + // Entry 2C440 - 2C47F + 0x0000, 0x03c6, 0x0008, 0x0058, 0x00bd, 0x0114, 0x0149, 0x021a, + 0x022e, 0x023f, 0x0250, 0x0002, 0x005b, 0x008c, 0x0003, 0x005f, + 0x006e, 0x007d, 0x000d, 0x0039, 0xffff, 0x1133, 0x113b, 0x1143, + 0x114b, 0x1153, 0x115b, 0x1163, 0x116b, 0x1173, 0x117b, 0x1183, + 0x118b, 0x000d, 0x0039, 0xffff, 0x1193, 0x1196, 0x1199, 0x119c, + 0x119f, 0x119f, 0x11a2, 0x11a5, 0x1193, 0x1193, 0x1193, 0x11a8, + 0x000d, 0x0039, 0xffff, 0x11ab, 0x11b8, 0x11c3, 0x11d0, 0x11db, + 0x11e6, 0x11f3, 0x11fe, 0x1209, 0x121a, 0x1225, 0x1232, 0x0003, + // Entry 2C480 - 2C4BF + 0x0090, 0x009f, 0x00ae, 0x000d, 0x0039, 0xffff, 0x1245, 0x124d, + 0x1255, 0x125d, 0x1265, 0x126d, 0x1275, 0x127d, 0x1285, 0x128d, + 0x1295, 0x129d, 0x000d, 0x0039, 0xffff, 0x1193, 0x1196, 0x1199, + 0x119c, 0x119f, 0x119f, 0x11a2, 0x11a5, 0x1193, 0x1193, 0x1193, + 0x11a8, 0x000d, 0x0039, 0xffff, 0x12a5, 0x12b2, 0x12bd, 0x12ca, + 0x12d5, 0x12e0, 0x12ed, 0x12f8, 0x1303, 0x1314, 0x131f, 0x132c, + 0x0002, 0x00c0, 0x00ea, 0x0005, 0x00c6, 0x00cf, 0x00e1, 0x0000, + 0x00d8, 0x0007, 0x0039, 0x133f, 0x1344, 0x1349, 0x134e, 0x1353, + // Entry 2C4C0 - 2C4FF + 0x1358, 0x135d, 0x0007, 0x0039, 0x11a8, 0x1362, 0x119c, 0x119c, + 0x1365, 0x11a8, 0x119c, 0x0007, 0x0039, 0x133f, 0x1344, 0x1349, + 0x134e, 0x1353, 0x1358, 0x135d, 0x0007, 0x0039, 0x1368, 0x1379, + 0x138a, 0x139b, 0x13ac, 0x13bd, 0x13c6, 0x0005, 0x00f0, 0x00f9, + 0x010b, 0x0000, 0x0102, 0x0007, 0x0039, 0x133f, 0x1344, 0x1349, + 0x134e, 0x1353, 0x1358, 0x135d, 0x0007, 0x0039, 0x11a8, 0x1362, + 0x119c, 0x119c, 0x1365, 0x11a8, 0x119c, 0x0007, 0x0039, 0x133f, + 0x1344, 0x1349, 0x134e, 0x1353, 0x1358, 0x135d, 0x0007, 0x0039, + // Entry 2C500 - 2C53F + 0x13d1, 0x13e2, 0x13f3, 0x1404, 0x1415, 0x1426, 0x142f, 0x0002, + 0x0117, 0x0130, 0x0003, 0x011b, 0x0122, 0x0129, 0x0005, 0x0039, + 0xffff, 0x143a, 0x1445, 0x1452, 0x1461, 0x0005, 0x0000, 0xffff, + 0x204d, 0x2b44, 0x2b47, 0x2b4b, 0x0005, 0x0039, 0xffff, 0x146c, + 0x147c, 0x148e, 0x14a2, 0x0003, 0x0134, 0x013b, 0x0142, 0x0005, + 0x0039, 0xffff, 0x143a, 0x1445, 0x1452, 0x1461, 0x0005, 0x0000, + 0xffff, 0x204d, 0x2b44, 0x2b47, 0x2b4b, 0x0005, 0x0039, 0xffff, + 0x146c, 0x147c, 0x148e, 0x14a2, 0x0002, 0x014c, 0x01b3, 0x0003, + // Entry 2C540 - 2C57F + 0x0150, 0x0171, 0x0192, 0x0008, 0x015c, 0x0162, 0x0159, 0x0165, + 0x0168, 0x016b, 0x016e, 0x015f, 0x0001, 0x0039, 0x14b2, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x0039, 0x14c6, 0x0001, 0x0000, 0x04f2, + 0x0001, 0x0039, 0x14d1, 0x0001, 0x0039, 0x14dc, 0x0001, 0x0039, + 0x14f8, 0x0001, 0x0039, 0x1503, 0x0008, 0x017d, 0x0183, 0x017a, + 0x0186, 0x0189, 0x018c, 0x018f, 0x0180, 0x0001, 0x0039, 0x1503, + 0x0001, 0x0000, 0x04ef, 0x0001, 0x0039, 0x14c6, 0x0001, 0x0000, + 0x04f2, 0x0001, 0x0039, 0x14d1, 0x0001, 0x0039, 0x14dc, 0x0001, + // Entry 2C580 - 2C5BF + 0x0039, 0x14f8, 0x0001, 0x0039, 0x1503, 0x0008, 0x019e, 0x01a4, + 0x019b, 0x01a7, 0x01aa, 0x01ad, 0x01b0, 0x01a1, 0x0001, 0x0039, + 0x14b2, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0039, 0x14c6, 0x0001, + 0x0000, 0x04f2, 0x0001, 0x0039, 0x14d1, 0x0001, 0x0039, 0x14dc, + 0x0001, 0x0039, 0x14f8, 0x0001, 0x0039, 0x1503, 0x0003, 0x01b7, + 0x01d8, 0x01f9, 0x0008, 0x01c3, 0x01c9, 0x01c0, 0x01cc, 0x01cf, + 0x01d2, 0x01d5, 0x01c6, 0x0001, 0x0039, 0x14b2, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x0039, 0x150e, 0x0001, 0x0000, 0x04f2, 0x0001, + // Entry 2C5C0 - 2C5FF + 0x0039, 0x151b, 0x0001, 0x0039, 0x1522, 0x0001, 0x0039, 0x153a, + 0x0001, 0x0039, 0x1541, 0x0008, 0x01e4, 0x01ea, 0x01e1, 0x01ed, + 0x01f0, 0x01f3, 0x01f6, 0x01e7, 0x0001, 0x0039, 0x14b2, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x0039, 0x150e, 0x0001, 0x0000, 0x04f2, + 0x0001, 0x0039, 0x151b, 0x0001, 0x0039, 0x1522, 0x0001, 0x0039, + 0x153a, 0x0001, 0x0039, 0x1541, 0x0008, 0x0205, 0x020b, 0x0202, + 0x020e, 0x0211, 0x0214, 0x0217, 0x0208, 0x0001, 0x0039, 0x14b2, + 0x0001, 0x0000, 0x04ef, 0x0001, 0x0039, 0x150e, 0x0001, 0x0000, + // Entry 2C600 - 2C63F + 0x04f2, 0x0001, 0x0039, 0x151b, 0x0001, 0x0039, 0x1522, 0x0001, + 0x0039, 0x153a, 0x0001, 0x0039, 0x1541, 0x0003, 0x0228, 0x0000, + 0x021e, 0x0002, 0x0221, 0x0225, 0x0002, 0x0039, 0x1548, 0x15a6, + 0x0001, 0x0039, 0x1577, 0x0001, 0x022a, 0x0002, 0x0039, 0x15c6, + 0x15d0, 0x0004, 0x023c, 0x0236, 0x0233, 0x0239, 0x0001, 0x0039, + 0x15d7, 0x0001, 0x0039, 0x15ec, 0x0001, 0x0039, 0x15fb, 0x0001, + 0x0007, 0x02e9, 0x0004, 0x024d, 0x0247, 0x0244, 0x024a, 0x0001, + 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, + // Entry 2C640 - 2C67F + 0x0001, 0x0000, 0x0546, 0x0004, 0x025e, 0x0258, 0x0255, 0x025b, + 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, + 0x022e, 0x0001, 0x0006, 0x022e, 0x0042, 0x02a4, 0x02a9, 0x02ae, + 0x02b3, 0x02ca, 0x02dc, 0x02ee, 0x0305, 0x0317, 0x0329, 0x0340, + 0x0357, 0x036e, 0x0389, 0x039f, 0x03b5, 0x03ba, 0x03bf, 0x03c4, + 0x03dd, 0x03f6, 0x040f, 0x0414, 0x0419, 0x041e, 0x0423, 0x0428, + 0x042d, 0x0432, 0x0437, 0x043c, 0x0450, 0x0464, 0x0478, 0x048c, + 0x04a0, 0x04b4, 0x04c8, 0x04dc, 0x04f0, 0x0504, 0x0518, 0x052c, + // Entry 2C680 - 2C6BF + 0x0540, 0x0554, 0x0568, 0x057c, 0x0590, 0x05a4, 0x05b8, 0x05cc, + 0x05e0, 0x05e5, 0x05ea, 0x05ef, 0x0605, 0x0617, 0x0629, 0x063f, + 0x0651, 0x0663, 0x0679, 0x068b, 0x069d, 0x06a2, 0x06a7, 0x0001, + 0x02a6, 0x0001, 0x0039, 0x160a, 0x0001, 0x02ab, 0x0001, 0x0039, + 0x160a, 0x0001, 0x02b0, 0x0001, 0x0039, 0x160a, 0x0003, 0x02b7, + 0x02ba, 0x02bf, 0x0001, 0x0039, 0x1615, 0x0003, 0x0039, 0x161c, + 0x1634, 0x1648, 0x0002, 0x02c2, 0x02c6, 0x0002, 0x0039, 0x165c, + 0x165c, 0x0002, 0x0039, 0x1678, 0x1678, 0x0003, 0x02ce, 0x0000, + // Entry 2C6C0 - 2C6FF + 0x02d1, 0x0001, 0x0039, 0x168e, 0x0002, 0x02d4, 0x02d8, 0x0002, + 0x0039, 0x1692, 0x1692, 0x0002, 0x0039, 0x16a5, 0x16a5, 0x0003, + 0x02e0, 0x0000, 0x02e3, 0x0001, 0x0039, 0x168e, 0x0002, 0x02e6, + 0x02ea, 0x0002, 0x0039, 0x1692, 0x1692, 0x0002, 0x0039, 0x16a5, + 0x16a5, 0x0003, 0x02f2, 0x02f5, 0x02fa, 0x0001, 0x0039, 0x16b8, + 0x0003, 0x0039, 0x16c3, 0x16db, 0x16ef, 0x0002, 0x02fd, 0x0301, + 0x0002, 0x0039, 0x1709, 0x1709, 0x0002, 0x0039, 0x172b, 0x172b, + 0x0003, 0x0309, 0x0000, 0x030c, 0x0001, 0x0012, 0x037f, 0x0002, + // Entry 2C700 - 2C73F + 0x030f, 0x0313, 0x0002, 0x0039, 0x1747, 0x1747, 0x0002, 0x0039, + 0x175e, 0x175e, 0x0003, 0x031b, 0x0000, 0x031e, 0x0001, 0x0012, + 0x037f, 0x0002, 0x0321, 0x0325, 0x0002, 0x0039, 0x1747, 0x1747, + 0x0002, 0x0039, 0x175e, 0x175e, 0x0003, 0x032d, 0x0330, 0x0335, + 0x0001, 0x0039, 0x1775, 0x0003, 0x0039, 0x177a, 0x178a, 0x1796, + 0x0002, 0x0338, 0x033c, 0x0002, 0x0039, 0x17a8, 0x17a8, 0x0002, + 0x0039, 0x17c2, 0x17c2, 0x0003, 0x0344, 0x0347, 0x034c, 0x0001, + 0x0039, 0x1775, 0x0003, 0x0039, 0x177a, 0x178a, 0x1796, 0x0002, + // Entry 2C740 - 2C77F + 0x034f, 0x0353, 0x0002, 0x0039, 0x17a8, 0x17a8, 0x0002, 0x0039, + 0x17c2, 0x17c2, 0x0003, 0x035b, 0x035e, 0x0363, 0x0001, 0x0039, + 0x1775, 0x0003, 0x0039, 0x177a, 0x178a, 0x1796, 0x0002, 0x0366, + 0x036a, 0x0002, 0x0039, 0x17a8, 0x17a8, 0x0002, 0x0039, 0x17c2, + 0x17c2, 0x0004, 0x0373, 0x0376, 0x037b, 0x0386, 0x0001, 0x0039, + 0x17d6, 0x0003, 0x0039, 0x17df, 0x17f3, 0x1803, 0x0002, 0x037e, + 0x0382, 0x0002, 0x0039, 0x1819, 0x1819, 0x0002, 0x0039, 0x1837, + 0x1837, 0x0001, 0x0039, 0x184f, 0x0004, 0x038e, 0x0000, 0x0391, + // Entry 2C780 - 2C7BF + 0x039c, 0x0001, 0x0039, 0x1860, 0x0002, 0x0394, 0x0398, 0x0002, + 0x0039, 0x1866, 0x1866, 0x0002, 0x0039, 0x187b, 0x187b, 0x0001, + 0x0039, 0x184f, 0x0004, 0x03a4, 0x0000, 0x03a7, 0x03b2, 0x0001, + 0x0039, 0x1860, 0x0002, 0x03aa, 0x03ae, 0x0002, 0x0039, 0x1866, + 0x1866, 0x0002, 0x0039, 0x187b, 0x187b, 0x0001, 0x0039, 0x184f, + 0x0001, 0x03b7, 0x0001, 0x0039, 0x1890, 0x0001, 0x03bc, 0x0001, + 0x0039, 0x1890, 0x0001, 0x03c1, 0x0001, 0x0039, 0x1890, 0x0003, + 0x03c8, 0x03cb, 0x03d2, 0x0001, 0x0039, 0x18a6, 0x0005, 0x0039, + // Entry 2C7C0 - 2C7FF + 0x18c0, 0x18c9, 0x18d4, 0x18ad, 0x18df, 0x0002, 0x03d5, 0x03d9, + 0x0002, 0x0039, 0x18f2, 0x18f2, 0x0002, 0x0039, 0x190e, 0x190e, + 0x0003, 0x03e1, 0x03e4, 0x03eb, 0x0001, 0x0039, 0x18a6, 0x0005, + 0x0039, 0x18c0, 0x18c9, 0x18d4, 0x1924, 0x18df, 0x0002, 0x03ee, + 0x03f2, 0x0002, 0x0039, 0x18f2, 0x18f2, 0x0002, 0x0039, 0x190e, + 0x190e, 0x0003, 0x03fa, 0x03fd, 0x0404, 0x0001, 0x0039, 0x18a6, + 0x0005, 0x0039, 0x18c0, 0x18c9, 0x18d4, 0x1924, 0x18df, 0x0002, + 0x0407, 0x040b, 0x0002, 0x0039, 0x18f2, 0x18f2, 0x0002, 0x0039, + // Entry 2C800 - 2C83F + 0x190e, 0x190e, 0x0001, 0x0411, 0x0001, 0x0039, 0x193c, 0x0001, + 0x0416, 0x0001, 0x0039, 0x193c, 0x0001, 0x041b, 0x0001, 0x0039, + 0x193c, 0x0001, 0x0420, 0x0001, 0x0039, 0x1952, 0x0001, 0x0425, + 0x0001, 0x0039, 0x1952, 0x0001, 0x042a, 0x0001, 0x0039, 0x1952, + 0x0001, 0x042f, 0x0001, 0x0039, 0x1964, 0x0001, 0x0434, 0x0001, + 0x0039, 0x1983, 0x0001, 0x0439, 0x0001, 0x0039, 0x1983, 0x0003, + 0x0000, 0x0440, 0x0445, 0x0003, 0x0039, 0x199f, 0x19bb, 0x19d3, + 0x0002, 0x0448, 0x044c, 0x0002, 0x0039, 0x19f1, 0x19f1, 0x0002, + // Entry 2C840 - 2C87F + 0x0039, 0x1a17, 0x1a17, 0x0003, 0x0000, 0x0454, 0x0459, 0x0003, + 0x0039, 0x1a37, 0x1a4a, 0x1a59, 0x0002, 0x045c, 0x0460, 0x0002, + 0x0039, 0x1a6e, 0x1a6e, 0x0002, 0x0039, 0x1a85, 0x1a85, 0x0003, + 0x0000, 0x0468, 0x046d, 0x0003, 0x0039, 0x1a9c, 0x1aac, 0x1ab8, + 0x0002, 0x0470, 0x0474, 0x0002, 0x0039, 0x1aca, 0x1aca, 0x0002, + 0x0039, 0x1ade, 0x1ade, 0x0003, 0x0000, 0x047c, 0x0481, 0x0003, + 0x0039, 0x1af2, 0x1b0e, 0x1b26, 0x0002, 0x0484, 0x0488, 0x0002, + 0x0039, 0x1b44, 0x1b44, 0x0002, 0x0039, 0x1b6a, 0x1b6a, 0x0003, + // Entry 2C880 - 2C8BF + 0x0000, 0x0490, 0x0495, 0x0003, 0x0039, 0x1b8a, 0x1b9d, 0x1bac, + 0x0002, 0x0498, 0x049c, 0x0002, 0x0039, 0x1bc1, 0x1bc1, 0x0002, + 0x0039, 0x1bd8, 0x1bd8, 0x0003, 0x0000, 0x04a4, 0x04a9, 0x0003, + 0x0039, 0x1bef, 0x1bff, 0x1c0b, 0x0002, 0x04ac, 0x04b0, 0x0002, + 0x0039, 0x1c1d, 0x1c1d, 0x0002, 0x0039, 0x1c31, 0x1c31, 0x0003, + 0x0000, 0x04b8, 0x04bd, 0x0003, 0x0039, 0x1c45, 0x1c61, 0x1c79, + 0x0002, 0x04c0, 0x04c4, 0x0002, 0x0039, 0x1c97, 0x1c97, 0x0002, + 0x0039, 0x1cbd, 0x1cbd, 0x0003, 0x0000, 0x04cc, 0x04d1, 0x0003, + // Entry 2C8C0 - 2C8FF + 0x0039, 0x1cdd, 0x1cf0, 0x1cff, 0x0002, 0x04d4, 0x04d8, 0x0002, + 0x0039, 0x1d14, 0x1d14, 0x0002, 0x0039, 0x1d2b, 0x1d2b, 0x0003, + 0x0000, 0x04e0, 0x04e5, 0x0003, 0x0039, 0x1d42, 0x1d52, 0x1d5e, + 0x0002, 0x04e8, 0x04ec, 0x0002, 0x0039, 0x1d70, 0x1d70, 0x0002, + 0x0039, 0x1d84, 0x1d84, 0x0003, 0x0000, 0x04f4, 0x04f9, 0x0003, + 0x0039, 0x1d98, 0x1db4, 0x1dcc, 0x0002, 0x04fc, 0x0500, 0x0002, + 0x0039, 0x1dea, 0x1dea, 0x0002, 0x0039, 0x1e10, 0x1e10, 0x0003, + 0x0000, 0x0508, 0x050d, 0x0003, 0x0039, 0x1e30, 0x1e43, 0x1e52, + // Entry 2C900 - 2C93F + 0x0002, 0x0510, 0x0514, 0x0002, 0x0039, 0x1e67, 0x1e67, 0x0002, + 0x0039, 0x1e7e, 0x1e7e, 0x0003, 0x0000, 0x051c, 0x0521, 0x0003, + 0x0039, 0x1e95, 0x1ea5, 0x1eb1, 0x0002, 0x0524, 0x0528, 0x0002, + 0x0039, 0x1ec3, 0x1ec3, 0x0002, 0x0039, 0x1ed7, 0x1ed7, 0x0003, + 0x0000, 0x0530, 0x0535, 0x0003, 0x0039, 0x1eeb, 0x1f07, 0x1f1f, + 0x0002, 0x0538, 0x053c, 0x0002, 0x0039, 0x1f3d, 0x1f3d, 0x0002, + 0x0039, 0x1f63, 0x1f63, 0x0003, 0x0000, 0x0544, 0x0549, 0x0003, + 0x0039, 0x1f83, 0x1f96, 0x1fa5, 0x0002, 0x054c, 0x0550, 0x0002, + // Entry 2C940 - 2C97F + 0x0039, 0x1fba, 0x1fba, 0x0002, 0x0039, 0x1fd1, 0x1fd1, 0x0003, + 0x0000, 0x0558, 0x055d, 0x0003, 0x0039, 0x1fe8, 0x1ff8, 0x2004, + 0x0002, 0x0560, 0x0564, 0x0002, 0x003a, 0x0000, 0x0000, 0x0002, + 0x003a, 0x0014, 0x0014, 0x0003, 0x0000, 0x056c, 0x0571, 0x0003, + 0x003a, 0x0028, 0x003c, 0x004c, 0x0002, 0x0574, 0x0578, 0x0002, + 0x003a, 0x0062, 0x0062, 0x0002, 0x003a, 0x0080, 0x0080, 0x0003, + 0x0000, 0x0580, 0x0585, 0x0003, 0x003a, 0x0098, 0x00ab, 0x00ba, + 0x0002, 0x0588, 0x058c, 0x0002, 0x003a, 0x00cf, 0x00cf, 0x0002, + // Entry 2C980 - 2C9BF + 0x003a, 0x00e6, 0x00e6, 0x0003, 0x0000, 0x0594, 0x0599, 0x0003, + 0x003a, 0x00fd, 0x010d, 0x0119, 0x0002, 0x059c, 0x05a0, 0x0002, + 0x003a, 0x012b, 0x012b, 0x0002, 0x003a, 0x013f, 0x013f, 0x0003, + 0x0000, 0x05a8, 0x05ad, 0x0003, 0x003a, 0x0153, 0x0169, 0x017b, + 0x0002, 0x05b0, 0x05b4, 0x0002, 0x003a, 0x0193, 0x0193, 0x0002, + 0x003a, 0x01b3, 0x01b3, 0x0003, 0x0000, 0x05bc, 0x05c1, 0x0003, + 0x003a, 0x01cd, 0x01e0, 0x01ef, 0x0002, 0x05c4, 0x05c8, 0x0002, + 0x003a, 0x0204, 0x0204, 0x0002, 0x003a, 0x021b, 0x021b, 0x0003, + // Entry 2C9C0 - 2C9FF + 0x0000, 0x05d0, 0x05d5, 0x0003, 0x003a, 0x0232, 0x0242, 0x024e, + 0x0002, 0x05d8, 0x05dc, 0x0002, 0x003a, 0x0260, 0x0260, 0x0002, + 0x003a, 0x0274, 0x0274, 0x0001, 0x05e2, 0x0001, 0x003a, 0x0288, + 0x0001, 0x05e7, 0x0001, 0x003a, 0x0288, 0x0001, 0x05ec, 0x0001, + 0x003a, 0x0288, 0x0003, 0x05f3, 0x05f6, 0x05fa, 0x0001, 0x003a, + 0x0292, 0x0002, 0x003a, 0xffff, 0x029d, 0x0002, 0x05fd, 0x0601, + 0x0002, 0x003a, 0x02af, 0x02af, 0x0002, 0x003a, 0x02cf, 0x02cf, + 0x0003, 0x0609, 0x0000, 0x060c, 0x0001, 0x003a, 0x02e9, 0x0002, + // Entry 2CA00 - 2CA3F + 0x060f, 0x0613, 0x0002, 0x003a, 0x02f0, 0x02f0, 0x0002, 0x003a, + 0x0307, 0x0307, 0x0003, 0x061b, 0x0000, 0x061e, 0x0001, 0x003a, + 0x02e9, 0x0002, 0x0621, 0x0625, 0x0002, 0x003a, 0x02f0, 0x02f0, + 0x0002, 0x003a, 0x0307, 0x0307, 0x0003, 0x062d, 0x0630, 0x0634, + 0x0001, 0x000f, 0x01c4, 0x0002, 0x003a, 0xffff, 0x031e, 0x0002, + 0x0637, 0x063b, 0x0002, 0x003a, 0x0330, 0x0330, 0x0002, 0x003a, + 0x0350, 0x0350, 0x0003, 0x0643, 0x0000, 0x0646, 0x0001, 0x0009, + 0x1c15, 0x0002, 0x0649, 0x064d, 0x0002, 0x003a, 0x036a, 0x036a, + // Entry 2CA40 - 2CA7F + 0x0002, 0x003a, 0x0381, 0x0381, 0x0003, 0x0655, 0x0000, 0x0658, + 0x0001, 0x0009, 0x1c15, 0x0002, 0x065b, 0x065f, 0x0002, 0x003a, + 0x036a, 0x036a, 0x0002, 0x003a, 0x0381, 0x0381, 0x0003, 0x0667, + 0x066a, 0x066e, 0x0001, 0x000f, 0x0227, 0x0002, 0x003a, 0xffff, + 0x0398, 0x0002, 0x0671, 0x0675, 0x0002, 0x003a, 0x03a3, 0x03a3, + 0x0002, 0x003a, 0x03c5, 0x03c5, 0x0003, 0x067d, 0x0000, 0x0680, + 0x0001, 0x000e, 0x01f0, 0x0002, 0x0683, 0x0687, 0x0002, 0x003a, + 0x03e1, 0x03e1, 0x0002, 0x003a, 0x03f8, 0x03f8, 0x0003, 0x068f, + // Entry 2CA80 - 2CABF + 0x0000, 0x0692, 0x0001, 0x000e, 0x01f0, 0x0002, 0x0695, 0x0699, + 0x0002, 0x003a, 0x03e1, 0x03e1, 0x0002, 0x003a, 0x03f8, 0x03f8, + 0x0001, 0x069f, 0x0001, 0x003a, 0x040f, 0x0001, 0x06a4, 0x0001, + 0x003a, 0x0429, 0x0001, 0x06a9, 0x0001, 0x003a, 0x0429, 0x0004, + 0x06b1, 0x06b6, 0x06bb, 0x06ca, 0x0003, 0x0000, 0x1dc7, 0x2ae8, + 0x2aef, 0x0003, 0x003a, 0x0440, 0x0451, 0x046d, 0x0002, 0x0000, + 0x06be, 0x0003, 0x0000, 0x06c5, 0x06c2, 0x0001, 0x003a, 0x0493, + 0x0003, 0x003a, 0xffff, 0x04d2, 0x0501, 0x0002, 0x0893, 0x06cd, + // Entry 2CAC0 - 2CAFF + 0x0003, 0x0767, 0x07fd, 0x06d1, 0x0094, 0x003a, 0x052a, 0x054a, + 0x0573, 0x0598, 0x05e8, 0x066c, 0x06de, 0x0778, 0x084e, 0x0918, + 0x09eb, 0xffff, 0x0aaf, 0x0b22, 0x0bb0, 0x0c3b, 0x0ccd, 0x0d45, + 0x0dd4, 0x0e8c, 0x0f4b, 0x0fec, 0x1084, 0x110f, 0x119d, 0x11fd, + 0x1215, 0x124f, 0x12ab, 0x12fb, 0x135d, 0x13a6, 0x140c, 0x1470, + 0x14e0, 0x1540, 0x1571, 0x15be, 0x1645, 0x16e2, 0x172e, 0x1748, + 0x1772, 0x17b8, 0x181e, 0x1863, 0x18fa, 0x1964, 0x19b7, 0x1a50, + 0x1ae6, 0x1b36, 0x1b63, 0x1bc1, 0x1be1, 0x1c15, 0x1c69, 0x1c9c, + // Entry 2CB00 - 2CB3F + 0x1ce5, 0x1d8c, 0x1e06, 0x1e2f, 0x1e86, 0x1f3c, 0x1faa, 0x1ff6, + 0x2029, 0x204c, 0x206c, 0x209b, 0x20c6, 0x2107, 0x216f, 0x21e3, + 0x2257, 0xffff, 0x22af, 0x22da, 0x231d, 0x236d, 0x23a9, 0x240d, + 0x242f, 0x2473, 0x24cd, 0x2512, 0x256a, 0x2588, 0x25b5, 0x25e0, + 0x262b, 0x2687, 0x26db, 0x27a1, 0x2845, 0x28bf, 0x2913, 0x292d, + 0x2945, 0x2986, 0x2a1f, 0x2ab3, 0x2b1f, 0x2b35, 0x2b8e, 0x2c32, + 0x2ca8, 0x2d12, 0x2d6e, 0x2d86, 0x2dd6, 0x2e48, 0x2ec3, 0x2f41, + 0x2fa1, 0x302b, 0x3047, 0x3061, 0x307d, 0x3099, 0x30cf, 0xffff, + // Entry 2CB40 - 2CB7F + 0x313f, 0x318f, 0x31bc, 0x31ef, 0x321c, 0x3249, 0x3265, 0x327b, + 0x32ad, 0x3301, 0x3321, 0x3355, 0x33a5, 0x33e1, 0x344d, 0x3483, + 0x34fb, 0x3577, 0x35cf, 0x3613, 0x369b, 0x36fb, 0x3715, 0x3736, + 0x3780, 0x37fa, 0x0094, 0x003a, 0xffff, 0xffff, 0xffff, 0xffff, + 0x05c3, 0x0652, 0x06c0, 0x073a, 0x0814, 0x08e2, 0x09a4, 0xffff, + 0x0a99, 0x0afb, 0x0b90, 0x0c10, 0x0cb1, 0x0d25, 0x0da5, 0x0e52, + 0x0f20, 0x0fc1, 0x1062, 0x10e8, 0x117d, 0xffff, 0xffff, 0x1231, + 0xffff, 0x12da, 0xffff, 0x138e, 0x13f6, 0x1458, 0x14c0, 0xffff, + // Entry 2CB80 - 2CBBF + 0xffff, 0x15a0, 0x161a, 0x16cc, 0xffff, 0xffff, 0xffff, 0x1795, + 0xffff, 0x183a, 0x18d5, 0xffff, 0x1992, 0x1a21, 0x1ace, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1bfb, 0xffff, 0xffff, 0x1cb8, 0x1d5f, + 0xffff, 0xffff, 0x1e49, 0x1f20, 0x1f94, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x20f1, 0x2153, 0x21c7, 0x223b, 0xffff, + 0xffff, 0xffff, 0x2305, 0xffff, 0x2387, 0xffff, 0xffff, 0x2456, + 0xffff, 0x24f6, 0xffff, 0xffff, 0xffff, 0xffff, 0x260d, 0xffff, + 0x26a1, 0x276f, 0x2825, 0x28a5, 0xffff, 0xffff, 0xffff, 0x295d, + // Entry 2CBC0 - 2CBFF + 0x29f8, 0x2a8d, 0xffff, 0xffff, 0x2b5c, 0x2c12, 0x2c92, 0x2cf4, + 0xffff, 0xffff, 0x2db8, 0x2e32, 0x2e94, 0xffff, 0x2f6c, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x30b3, 0xffff, 0x3127, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3293, 0xffff, + 0xffff, 0x333d, 0xffff, 0x33bb, 0xffff, 0x3467, 0x34db, 0x355b, + 0xffff, 0x35ef, 0x367b, 0xffff, 0xffff, 0xffff, 0x3766, 0x37d4, + 0x0094, 0x003a, 0xffff, 0xffff, 0xffff, 0xffff, 0x0622, 0x069b, + 0x0711, 0x07cb, 0x089d, 0x0963, 0x0a47, 0xffff, 0x0ada, 0x0b5e, + // Entry 2CC00 - 2CC3F + 0x0be5, 0x0c7b, 0x0cfe, 0x0d7a, 0x0e18, 0x0edb, 0x0f8b, 0x102c, + 0x10bb, 0x114b, 0x11d2, 0xffff, 0xffff, 0x1282, 0xffff, 0x1331, + 0xffff, 0x13d3, 0x1437, 0x149d, 0x1515, 0xffff, 0xffff, 0x15f1, + 0x1685, 0x170d, 0xffff, 0xffff, 0xffff, 0x17f0, 0xffff, 0x18a1, + 0x1934, 0xffff, 0x19f1, 0x1a94, 0x1b13, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1c44, 0xffff, 0xffff, 0x1d27, 0x1dce, 0xffff, 0xffff, + 0x1ed8, 0x1f6d, 0x1fd5, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2132, 0x21a0, 0x2214, 0x2288, 0xffff, 0xffff, 0xffff, + // Entry 2CC40 - 2CC7F + 0x234a, 0xffff, 0x23e0, 0xffff, 0xffff, 0x24a5, 0xffff, 0x2543, + 0xffff, 0xffff, 0xffff, 0xffff, 0x265e, 0xffff, 0x272a, 0x27e8, + 0x287a, 0x28ee, 0xffff, 0xffff, 0xffff, 0x29c4, 0x2a5b, 0x2aee, + 0xffff, 0xffff, 0x2bd5, 0x2c67, 0x2cd3, 0x2d45, 0xffff, 0xffff, + 0x2e09, 0x2e73, 0x2f07, 0xffff, 0x2feb, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x3100, 0xffff, 0x316c, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x32dc, 0xffff, 0xffff, 0x3382, + 0xffff, 0x341c, 0xffff, 0x34b4, 0x3530, 0x35a8, 0xffff, 0x364c, + // Entry 2CC80 - 2CCBF + 0x36d0, 0xffff, 0xffff, 0xffff, 0x37af, 0x3835, 0x0003, 0x0897, + 0x08f9, 0x08c8, 0x002f, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x24b7, 0x002f, 0x0007, 0xffff, 0xffff, 0xffff, + // Entry 2CCC0 - 2CCFF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x24b7, 0x002f, 0x0007, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 2CD00 - 2CD3F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x24bb, 0x0002, 0x0003, 0x00ed, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, + 0x0037, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, + 0x0000, 0x0026, 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, + 0x0000, 0x1dfa, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, + // Entry 2CD40 - 2CD7F + 0x0001, 0x003b, 0x0000, 0x0004, 0x0034, 0x002e, 0x002b, 0x0031, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x0040, 0x0069, 0x0000, + 0x0000, 0x0000, 0x00c0, 0x00d1, 0x00dc, 0x0002, 0x0043, 0x0056, + 0x0003, 0x0000, 0x0000, 0x0047, 0x000d, 0x003b, 0xffff, 0x000e, + 0x0014, 0x001a, 0x002d, 0x003e, 0x004e, 0x0061, 0x006a, 0x006e, + 0x0074, 0x007b, 0x007e, 0x0003, 0x0000, 0x0000, 0x005a, 0x000d, + 0x003b, 0xffff, 0x000e, 0x0014, 0x001a, 0x002d, 0x003e, 0x004e, + // Entry 2CD80 - 2CDBF + 0x0061, 0x006a, 0x006e, 0x0074, 0x007b, 0x007e, 0x0002, 0x006c, + 0x0096, 0x0005, 0x0072, 0x007b, 0x008d, 0x0000, 0x0084, 0x0007, + 0x003b, 0x0089, 0x0090, 0x0096, 0x009c, 0x00a9, 0x00ae, 0x00bb, + 0x0007, 0x0018, 0x2969, 0x29dd, 0x29e0, 0x29e3, 0x29e7, 0x29ea, + 0x29ed, 0x0007, 0x003b, 0x0089, 0x0090, 0x0096, 0x009c, 0x00a9, + 0x00ae, 0x00bb, 0x0007, 0x003b, 0x0089, 0x0090, 0x0096, 0x009c, + 0x00a9, 0x00ae, 0x00bb, 0x0005, 0x009c, 0x00a5, 0x00b7, 0x0000, + 0x00ae, 0x0007, 0x003b, 0x0089, 0x0090, 0x0096, 0x009c, 0x00a9, + // Entry 2CDC0 - 2CDFF + 0x00ae, 0x00bb, 0x0007, 0x0018, 0x2969, 0x29dd, 0x29e0, 0x29e3, + 0x29e7, 0x29ea, 0x29ed, 0x0007, 0x0018, 0x2969, 0x29dd, 0x29e0, + 0x29e3, 0x29e7, 0x29ea, 0x29ed, 0x0007, 0x003b, 0x0089, 0x0090, + 0x0096, 0x009c, 0x00a9, 0x00ae, 0x00bb, 0x0004, 0x00ce, 0x00c8, + 0x00c5, 0x00cb, 0x0001, 0x002b, 0x17d3, 0x0001, 0x0002, 0x0033, + 0x0001, 0x0002, 0x003c, 0x0001, 0x003b, 0x00c9, 0x0004, 0x00d9, + 0x0000, 0x0000, 0x00d6, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, + 0x0546, 0x0004, 0x00ea, 0x00e4, 0x00e1, 0x00e7, 0x0001, 0x0000, + // Entry 2CE00 - 2CE3F + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0013, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0101, 0x0002, 0x0000, + 0x0104, 0x0003, 0x003b, 0x00d1, 0x00d6, 0x00db, 0x0003, 0x0004, + 0x0190, 0x02b5, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000d, 0x0038, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0016, 0x0000, 0x0027, 0x0004, 0x0024, 0x001e, 0x001b, + // Entry 2CE40 - 2CE7F + 0x0021, 0x0001, 0x0000, 0x1dfa, 0x0001, 0x0000, 0x1e0b, 0x0001, + 0x002b, 0x1697, 0x0001, 0x0000, 0x04af, 0x0004, 0x0035, 0x002f, + 0x002c, 0x0032, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x0041, + 0x00a6, 0x00eb, 0x0120, 0x0138, 0x015d, 0x016e, 0x017f, 0x0002, + 0x0044, 0x0075, 0x0003, 0x0048, 0x0057, 0x0066, 0x000d, 0x000d, + 0xffff, 0x0059, 0x340b, 0x340f, 0x3413, 0x3272, 0x336f, 0x3373, + 0x3377, 0x337b, 0x337f, 0x3417, 0x0085, 0x000d, 0x0000, 0xffff, + // Entry 2CE80 - 2CEBF + 0x257b, 0x2b4e, 0x2b3c, 0x2b42, 0x2b3c, 0x257b, 0x257b, 0x2b42, + 0x2b3a, 0x2b50, 0x2b40, 0x2b3e, 0x000d, 0x003b, 0xffff, 0x00e5, + 0x00ed, 0x00f6, 0x00fd, 0x0104, 0x0109, 0x010e, 0x0113, 0x011d, + 0x0128, 0x0131, 0x013b, 0x0003, 0x0079, 0x0088, 0x0097, 0x000d, + 0x000d, 0xffff, 0x0059, 0x340b, 0x340f, 0x3413, 0x3272, 0x336f, + 0x3373, 0x3377, 0x337b, 0x337f, 0x3417, 0x0085, 0x000d, 0x0000, + 0xffff, 0x257b, 0x2b4e, 0x2b3c, 0x2b42, 0x2b3c, 0x257b, 0x257b, + 0x2b42, 0x2b3a, 0x2b50, 0x2b40, 0x2b3e, 0x000d, 0x003b, 0xffff, + // Entry 2CEC0 - 2CEFF + 0x00e5, 0x00ed, 0x00f6, 0x00fd, 0x0104, 0x0109, 0x010e, 0x0113, + 0x011d, 0x0128, 0x0131, 0x013b, 0x0002, 0x00a9, 0x00ca, 0x0005, + 0x00af, 0x0000, 0x00c1, 0x0000, 0x00b8, 0x0007, 0x0002, 0x4d07, + 0x4d0e, 0x4d12, 0x4d16, 0x4d1a, 0x4d1e, 0x4d22, 0x0007, 0x0002, + 0x4d07, 0x4d0e, 0x4d12, 0x4d16, 0x4d1a, 0x4d1e, 0x4d22, 0x0007, + 0x003b, 0x0145, 0x014c, 0x015b, 0x0169, 0x0179, 0x0188, 0x0198, + 0x0005, 0x0000, 0x00d0, 0x00e2, 0x0000, 0x00d9, 0x0007, 0x0000, + 0x2b3a, 0x2b42, 0x2b3c, 0x2722, 0x2b3a, 0x2b27, 0x2b42, 0x0007, + // Entry 2CF00 - 2CF3F + 0x0002, 0x4d07, 0x4d0e, 0x4d12, 0x4d16, 0x4d1a, 0x4d1e, 0x4d22, + 0x0007, 0x003b, 0x0145, 0x014c, 0x015b, 0x0169, 0x0179, 0x0188, + 0x0198, 0x0002, 0x00ee, 0x0107, 0x0003, 0x00f2, 0x00f9, 0x0100, + 0x0005, 0x003b, 0xffff, 0x01a7, 0x01aa, 0x01ad, 0x01b0, 0x0005, + 0x003b, 0xffff, 0x01a7, 0x01aa, 0x01ad, 0x01b0, 0x0005, 0x003b, + 0xffff, 0x01b3, 0x01cc, 0x01e5, 0x01fe, 0x0003, 0x010b, 0x0112, + 0x0119, 0x0005, 0x003b, 0xffff, 0x01a7, 0x01aa, 0x01ad, 0x01b0, + 0x0005, 0x003b, 0xffff, 0x01a7, 0x01aa, 0x01ad, 0x01b0, 0x0005, + // Entry 2CF40 - 2CF7F + 0x003b, 0xffff, 0x01b3, 0x01cc, 0x01e5, 0x01fe, 0x0001, 0x0122, + 0x0003, 0x0126, 0x0000, 0x012f, 0x0002, 0x0129, 0x012c, 0x0001, + 0x003b, 0x0217, 0x0001, 0x003b, 0x021c, 0x0002, 0x0132, 0x0135, + 0x0001, 0x003b, 0x0221, 0x0001, 0x003b, 0x0234, 0x0003, 0x0147, + 0x0152, 0x013c, 0x0002, 0x013f, 0x0143, 0x0002, 0x003b, 0x0249, + 0x026c, 0x0002, 0x0016, 0x0232, 0x0256, 0x0002, 0x014a, 0x014e, + 0x0002, 0x003b, 0x0291, 0x029b, 0x0002, 0x0016, 0x026f, 0x0276, + 0x0002, 0x0155, 0x0159, 0x0002, 0x003b, 0x02a7, 0x02ad, 0x0002, + // Entry 2CF80 - 2CFBF + 0x0016, 0x026f, 0x0276, 0x0004, 0x016b, 0x0165, 0x0162, 0x0168, + 0x0001, 0x002b, 0x17d3, 0x0001, 0x0001, 0x002d, 0x0001, 0x002b, + 0x17e2, 0x0001, 0x0000, 0x051c, 0x0004, 0x017c, 0x0176, 0x0173, + 0x0179, 0x0001, 0x0016, 0x02a8, 0x0001, 0x0016, 0x02b6, 0x0001, + 0x0016, 0x02c1, 0x0001, 0x0016, 0x02ca, 0x0004, 0x018d, 0x0187, + 0x0184, 0x018a, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0040, 0x01d1, + 0x0000, 0x0000, 0x01d6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 2CFC0 - 2CFFF + 0x01ed, 0x0000, 0x0000, 0x0204, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x021b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0234, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0239, 0x0000, 0x0000, + 0x0241, 0x0000, 0x0000, 0x0249, 0x0000, 0x0000, 0x0251, 0x0000, + 0x0000, 0x0259, 0x0000, 0x0000, 0x0261, 0x0000, 0x0000, 0x0269, + 0x0000, 0x0000, 0x0000, 0x0271, 0x0000, 0x0276, 0x0000, 0x0000, + 0x0288, 0x0000, 0x0000, 0x029a, 0x0000, 0x0000, 0x02b0, 0x0001, + 0x01d3, 0x0001, 0x0016, 0x0417, 0x0003, 0x01da, 0x01dd, 0x01e2, + // Entry 2D000 - 2D03F + 0x0001, 0x003b, 0x02b3, 0x0003, 0x003b, 0x02b9, 0x02c9, 0x02d5, + 0x0002, 0x01e5, 0x01e9, 0x0002, 0x003b, 0x02e2, 0x02e2, 0x0002, + 0x003b, 0x02ef, 0x02ef, 0x0003, 0x01f1, 0x01f4, 0x01f9, 0x0001, + 0x003b, 0x0303, 0x0003, 0x003b, 0x030b, 0x031d, 0x032b, 0x0002, + 0x01fc, 0x0200, 0x0002, 0x003b, 0x033a, 0x033a, 0x0002, 0x003b, + 0x0349, 0x0349, 0x0003, 0x0208, 0x020b, 0x0210, 0x0001, 0x003b, + 0x035f, 0x0003, 0x003b, 0x0371, 0x038d, 0x03a5, 0x0002, 0x0213, + 0x0217, 0x0002, 0x003b, 0x03be, 0x03be, 0x0002, 0x003b, 0x03d7, + // Entry 2D040 - 2D07F + 0x03d7, 0x0003, 0x021f, 0x0222, 0x0229, 0x0001, 0x003b, 0x03f7, + 0x0005, 0x003b, 0x0408, 0x0411, 0x0418, 0x03fd, 0x041e, 0x0002, + 0x022c, 0x0230, 0x0002, 0x003b, 0x0427, 0x0427, 0x0002, 0x003b, + 0x043d, 0x043d, 0x0001, 0x0236, 0x0001, 0x003b, 0x045a, 0x0002, + 0x0000, 0x023c, 0x0003, 0x003b, 0x0474, 0x0497, 0x04b6, 0x0002, + 0x0000, 0x0244, 0x0003, 0x003b, 0x04d6, 0x0501, 0x0528, 0x0002, + 0x0000, 0x024c, 0x0003, 0x003b, 0x0550, 0x057a, 0x05a0, 0x0002, + 0x0000, 0x0254, 0x0003, 0x003b, 0x05c7, 0x05f3, 0x061b, 0x0002, + // Entry 2D080 - 2D0BF + 0x0000, 0x025c, 0x0003, 0x003b, 0x0644, 0x066f, 0x0696, 0x0002, + 0x0000, 0x0264, 0x0003, 0x003b, 0x06be, 0x06ea, 0x0712, 0x0002, + 0x0000, 0x026c, 0x0003, 0x003b, 0x073b, 0x0766, 0x078d, 0x0001, + 0x0273, 0x0001, 0x003b, 0x07b5, 0x0003, 0x027a, 0x0000, 0x027d, + 0x0001, 0x003b, 0x07c5, 0x0002, 0x0280, 0x0284, 0x0002, 0x003b, + 0x07dc, 0x07dc, 0x0002, 0x003b, 0x07fa, 0x07fa, 0x0003, 0x028c, + 0x0000, 0x028f, 0x0001, 0x003b, 0x081f, 0x0002, 0x0292, 0x0296, + 0x0002, 0x003b, 0x0827, 0x0827, 0x0002, 0x003b, 0x0836, 0x0836, + // Entry 2D0C0 - 2D0FF + 0x0003, 0x029e, 0x02a1, 0x02a5, 0x0001, 0x003b, 0x084c, 0x0002, + 0x003b, 0xffff, 0x0854, 0x0002, 0x02a8, 0x02ac, 0x0002, 0x003b, + 0x0860, 0x0860, 0x0002, 0x003b, 0x086f, 0x086f, 0x0001, 0x02b2, + 0x0001, 0x003b, 0x0885, 0x0004, 0x02ba, 0x02bf, 0x0000, 0x0000, + 0x0003, 0x001d, 0x0e69, 0x21fb, 0x2202, 0x0001, 0x0000, 0x1de0, + 0x0002, 0x0003, 0x00e9, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, 0x0023, 0x001d, + // Entry 2D100 - 2D13F + 0x001a, 0x0020, 0x0001, 0x0006, 0x000d, 0x0001, 0x0002, 0x0010, + 0x0001, 0x0002, 0x001b, 0x0001, 0x0002, 0x0587, 0x0008, 0x002f, + 0x0066, 0x008b, 0x009f, 0x00b7, 0x00c7, 0x00d8, 0x0000, 0x0002, + 0x0032, 0x0054, 0x0003, 0x0036, 0x0000, 0x0045, 0x000d, 0x0009, + 0xffff, 0x01f0, 0x5783, 0x5788, 0x578c, 0x5790, 0x5794, 0x5798, + 0x579c, 0x57a0, 0x57a4, 0x57a8, 0x57ac, 0x000d, 0x003b, 0xffff, + 0x089e, 0x08a5, 0x08b2, 0x08bb, 0x08c5, 0x08cc, 0x08d2, 0x08de, + 0x08e6, 0x08ed, 0x08f4, 0x0906, 0x0002, 0x0000, 0x0057, 0x000d, + // Entry 2D140 - 2D17F + 0x0000, 0xffff, 0x2b3c, 0x2b40, 0x2b27, 0x204d, 0x2b3c, 0x2722, + 0x2b40, 0x2246, 0x25eb, 0x2146, 0x2773, 0x2773, 0x0002, 0x0069, + 0x007f, 0x0003, 0x006d, 0x0000, 0x0076, 0x0007, 0x003b, 0x091d, + 0x0921, 0x0925, 0x0929, 0x092d, 0x0931, 0x0935, 0x0007, 0x003b, + 0x0939, 0x0941, 0x0948, 0x0952, 0x095a, 0x0966, 0x096d, 0x0002, + 0x0000, 0x0082, 0x0007, 0x0000, 0x2b27, 0x2b27, 0x2b50, 0x2b3a, + 0x2b42, 0x2b3c, 0x2296, 0x0001, 0x008d, 0x0003, 0x0091, 0x0000, + 0x0098, 0x0005, 0x0006, 0xffff, 0x00f6, 0x00f9, 0x00fc, 0x00ff, + // Entry 2D180 - 2D1BF + 0x0005, 0x003b, 0xffff, 0x0972, 0x097d, 0x098f, 0x099f, 0x0001, + 0x00a1, 0x0003, 0x00a5, 0x0000, 0x00ae, 0x0002, 0x00a8, 0x00ab, + 0x0001, 0x003b, 0x09b3, 0x0001, 0x003b, 0x09b7, 0x0002, 0x00b1, + 0x00b4, 0x0001, 0x003b, 0x09bd, 0x0001, 0x003b, 0x09c4, 0x0003, + 0x00c1, 0x0000, 0x00bb, 0x0001, 0x00bd, 0x0002, 0x003b, 0x09cf, + 0x09e1, 0x0001, 0x00c3, 0x0002, 0x0000, 0x04ef, 0x2b52, 0x0004, + 0x00d5, 0x00cf, 0x00cc, 0x00d2, 0x0001, 0x0006, 0x015b, 0x0001, + 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, 0x0002, 0x08e8, + // Entry 2D1C0 - 2D1FF + 0x0004, 0x00e6, 0x00e0, 0x00dd, 0x00e3, 0x0001, 0x0000, 0x0524, + 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, + 0x0546, 0x0040, 0x012a, 0x0000, 0x0000, 0x012f, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0134, 0x0000, 0x0000, 0x0139, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x013e, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0149, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 2D200 - 2D23F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x014e, 0x0000, + 0x0153, 0x0000, 0x0000, 0x0158, 0x0000, 0x0000, 0x015d, 0x0000, + 0x0000, 0x0162, 0x0001, 0x012c, 0x0001, 0x003b, 0x09f1, 0x0001, + 0x0131, 0x0001, 0x003b, 0x09f8, 0x0001, 0x0136, 0x0001, 0x003b, + 0x09ff, 0x0001, 0x013b, 0x0001, 0x003b, 0x0a06, 0x0002, 0x0141, + 0x0144, 0x0001, 0x003b, 0x0a0c, 0x0003, 0x003b, 0x0a12, 0x0a17, + 0x0a1d, 0x0001, 0x014b, 0x0001, 0x003b, 0x0a23, 0x0001, 0x0150, + 0x0001, 0x003b, 0x0a31, 0x0001, 0x0155, 0x0001, 0x003b, 0x0a37, + // Entry 2D240 - 2D27F + 0x0001, 0x015a, 0x0001, 0x003b, 0x0a3c, 0x0001, 0x015f, 0x0001, + 0x003b, 0x0a44, 0x0001, 0x0164, 0x0001, 0x003b, 0x0a4d, 0x0003, + 0x0004, 0x025d, 0x066c, 0x0008, 0x000d, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x001a, 0x0045, 0x0005, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0013, 0x0001, 0x0015, 0x0001, 0x0017, 0x0001, 0x003b, + 0x0a5a, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0023, + 0x0000, 0x0034, 0x0004, 0x0031, 0x002b, 0x0028, 0x002e, 0x0001, + 0x0002, 0x0000, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, + // Entry 2D280 - 2D2BF + 0x0001, 0x0000, 0x240c, 0x0004, 0x0042, 0x003c, 0x0039, 0x003f, + 0x0001, 0x003b, 0x0a63, 0x0001, 0x003b, 0x0a63, 0x0001, 0x0006, + 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, 0x004e, 0x00b3, 0x010a, + 0x013f, 0x0210, 0x022a, 0x023b, 0x024c, 0x0002, 0x0051, 0x0082, + 0x0003, 0x0055, 0x0064, 0x0073, 0x000d, 0x003b, 0xffff, 0x0a81, + 0x0a8e, 0x0aa1, 0x0aae, 0x0abb, 0x0ac8, 0x0adb, 0x0aee, 0x0afb, + 0x0b0b, 0x0b18, 0x0b31, 0x000d, 0x003b, 0xffff, 0x0b3e, 0x0b42, + 0x0b3e, 0x0b3e, 0x0b46, 0x0b3e, 0x0b42, 0x0b4a, 0x0b42, 0x0b4e, + // Entry 2D2C0 - 2D2FF + 0x0b52, 0x0b56, 0x000d, 0x003b, 0xffff, 0x0a81, 0x0a8e, 0x0aa1, + 0x0aae, 0x0abb, 0x0ac8, 0x0adb, 0x0aee, 0x0afb, 0x0b0b, 0x0b18, + 0x0b31, 0x0003, 0x0086, 0x0095, 0x00a4, 0x000d, 0x003b, 0xffff, + 0x0a81, 0x0a8e, 0x0aa1, 0x0aae, 0x0abb, 0x0ac8, 0x0adb, 0x0aee, + 0x0afb, 0x0b0b, 0x0b18, 0x0b31, 0x000d, 0x003b, 0xffff, 0x0b3e, + 0x0b42, 0x0b3e, 0x0b3e, 0x0b46, 0x0b3e, 0x0b42, 0x0b4a, 0x0b42, + 0x0b4e, 0x0b52, 0x0b56, 0x000d, 0x003b, 0xffff, 0x0a81, 0x0a8e, + 0x0aa1, 0x0aae, 0x0abb, 0x0ac8, 0x0adb, 0x0aee, 0x0afb, 0x0b0b, + // Entry 2D300 - 2D33F + 0x0b18, 0x0b31, 0x0002, 0x00b6, 0x00e0, 0x0005, 0x00bc, 0x00c5, + 0x00d7, 0x0000, 0x00ce, 0x0007, 0x003b, 0x0b5a, 0x0b70, 0x0b80, + 0x0b93, 0x0b9d, 0x0bbc, 0x0bcc, 0x0007, 0x003b, 0x0bd9, 0x0bdd, + 0x0bd9, 0x0be1, 0x0be1, 0x0b4a, 0x0b4a, 0x0007, 0x003b, 0x0be5, + 0x0bdd, 0x0bd9, 0x0bec, 0x0bf3, 0x0bfd, 0x0b4a, 0x0007, 0x003b, + 0x0b5a, 0x0b70, 0x0b80, 0x0b93, 0x0b9d, 0x0bbc, 0x0bcc, 0x0005, + 0x00e6, 0x00ef, 0x0101, 0x0000, 0x00f8, 0x0007, 0x003b, 0x0b5a, + 0x0b70, 0x0b80, 0x0b93, 0x0b9d, 0x0bbc, 0x0bcc, 0x0007, 0x003b, + // Entry 2D340 - 2D37F + 0x0bd9, 0x0bdd, 0x0bd9, 0x0be1, 0x0be1, 0x0b4a, 0x0b4a, 0x0007, + 0x003b, 0x0be5, 0x0bdd, 0x0bd9, 0x0bec, 0x0bf3, 0x0bfd, 0x0b4a, + 0x0007, 0x003b, 0x0b5a, 0x0b70, 0x0b80, 0x0b93, 0x0b9d, 0x0bbc, + 0x0bcc, 0x0002, 0x010d, 0x0126, 0x0003, 0x0111, 0x0118, 0x011f, + 0x0005, 0x003b, 0xffff, 0x0c04, 0x0c22, 0x0c40, 0x0c5e, 0x0005, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x003b, + 0xffff, 0x0c04, 0x0c22, 0x0c40, 0x0c5e, 0x0003, 0x012a, 0x0131, + 0x0138, 0x0005, 0x003b, 0xffff, 0x0c04, 0x0c22, 0x0c40, 0x0c5e, + // Entry 2D380 - 2D3BF + 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, + 0x003b, 0xffff, 0x0c04, 0x0c22, 0x0c40, 0x0c5e, 0x0002, 0x0142, + 0x01a9, 0x0003, 0x0146, 0x0167, 0x0188, 0x0008, 0x0152, 0x0158, + 0x014f, 0x015b, 0x015e, 0x0161, 0x0164, 0x0155, 0x0001, 0x003b, + 0x0c7c, 0x0001, 0x0000, 0x04ef, 0x0001, 0x003b, 0x0c95, 0x0001, + 0x0000, 0x04f2, 0x0001, 0x003b, 0x0cb1, 0x0001, 0x003b, 0x0cc1, + 0x0001, 0x003b, 0x0cce, 0x0001, 0x003b, 0x0cde, 0x0008, 0x0173, + 0x0179, 0x0170, 0x017c, 0x017f, 0x0182, 0x0185, 0x0176, 0x0001, + // Entry 2D3C0 - 2D3FF + 0x003b, 0x0c7c, 0x0001, 0x0000, 0x1f9c, 0x0001, 0x003b, 0x0c95, + 0x0001, 0x0000, 0x21e4, 0x0001, 0x003b, 0x0cb1, 0x0001, 0x003b, + 0x0cc1, 0x0001, 0x003b, 0x0cce, 0x0001, 0x003b, 0x0cde, 0x0008, + 0x0194, 0x019a, 0x0191, 0x019d, 0x01a0, 0x01a3, 0x01a6, 0x0197, + 0x0001, 0x003b, 0x0c7c, 0x0001, 0x0000, 0x04ef, 0x0001, 0x003b, + 0x0c95, 0x0001, 0x0000, 0x04f2, 0x0001, 0x003b, 0x0cb1, 0x0001, + 0x003b, 0x0cc1, 0x0001, 0x003b, 0x0cce, 0x0001, 0x003b, 0x0cde, + 0x0003, 0x01ad, 0x01ce, 0x01ef, 0x0008, 0x01b9, 0x01bf, 0x01b6, + // Entry 2D400 - 2D43F + 0x01c2, 0x01c5, 0x01c8, 0x01cb, 0x01bc, 0x0001, 0x003b, 0x0c7c, + 0x0001, 0x0000, 0x04ef, 0x0001, 0x003b, 0x0ce8, 0x0001, 0x0000, + 0x04f2, 0x0001, 0x003b, 0x0cb1, 0x0001, 0x003b, 0x0cc1, 0x0001, + 0x003b, 0x0cce, 0x0001, 0x003b, 0x0cde, 0x0008, 0x01da, 0x01e0, + 0x01d7, 0x01e3, 0x01e6, 0x01e9, 0x01ec, 0x01dd, 0x0001, 0x003b, + 0x0c7c, 0x0001, 0x0000, 0x04ef, 0x0001, 0x003b, 0x0ce8, 0x0001, + 0x0000, 0x04f2, 0x0001, 0x003b, 0x0cb1, 0x0001, 0x003b, 0x0cc1, + 0x0001, 0x003b, 0x0cce, 0x0001, 0x003b, 0x0cde, 0x0008, 0x01fb, + // Entry 2D440 - 2D47F + 0x0201, 0x01f8, 0x0204, 0x0207, 0x020a, 0x020d, 0x01fe, 0x0001, + 0x003b, 0x0c7c, 0x0001, 0x0000, 0x04ef, 0x0001, 0x003b, 0x0ce8, + 0x0001, 0x0000, 0x04f2, 0x0001, 0x003b, 0x0cb1, 0x0001, 0x003b, + 0x0cc1, 0x0001, 0x003b, 0x0cce, 0x0001, 0x003b, 0x0cde, 0x0003, + 0x021f, 0x0000, 0x0214, 0x0002, 0x0217, 0x021b, 0x0002, 0x003b, + 0x0d07, 0x0d38, 0x0002, 0x0000, 0x04f5, 0x2701, 0x0002, 0x0222, + 0x0226, 0x0002, 0x003b, 0x0d5d, 0x0d70, 0x0002, 0x0000, 0x04f5, + 0x2701, 0x0004, 0x0238, 0x0232, 0x022f, 0x0235, 0x0001, 0x0002, + // Entry 2D480 - 2D4BF + 0x0025, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, + 0x0000, 0x2418, 0x0004, 0x0249, 0x0243, 0x0240, 0x0246, 0x0001, + 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, 0x0002, 0x04fe, + 0x0001, 0x0002, 0x0508, 0x0004, 0x025a, 0x0254, 0x0251, 0x0257, + 0x0001, 0x003b, 0x0a63, 0x0001, 0x003b, 0x0a63, 0x0001, 0x0006, + 0x022e, 0x0001, 0x0006, 0x022e, 0x0042, 0x02a0, 0x02a5, 0x02aa, + 0x02af, 0x02c4, 0x02d9, 0x02ee, 0x0303, 0x0318, 0x032d, 0x0342, + 0x0357, 0x036c, 0x0385, 0x039e, 0x03b7, 0x03bc, 0x03c1, 0x03c6, + // Entry 2D4C0 - 2D4FF + 0x03dd, 0x03f4, 0x040b, 0x0410, 0x0415, 0x041a, 0x041f, 0x0424, + 0x0429, 0x042e, 0x0433, 0x0438, 0x044a, 0x045c, 0x046e, 0x0480, + 0x0492, 0x04a4, 0x04b6, 0x04c8, 0x04da, 0x04ec, 0x04fe, 0x0510, + 0x0522, 0x0534, 0x0546, 0x0558, 0x056a, 0x057c, 0x058e, 0x05a0, + 0x05b2, 0x05b7, 0x05bc, 0x05c1, 0x05d5, 0x05e5, 0x05f5, 0x0609, + 0x0619, 0x0629, 0x063d, 0x064d, 0x065d, 0x0662, 0x0667, 0x0001, + 0x02a2, 0x0001, 0x003b, 0x0d79, 0x0001, 0x02a7, 0x0001, 0x003b, + 0x0d79, 0x0001, 0x02ac, 0x0001, 0x003b, 0x0d79, 0x0003, 0x02b3, + // Entry 2D500 - 2D53F + 0x02b6, 0x02bb, 0x0001, 0x003b, 0x0d89, 0x0003, 0x003b, 0x0d99, + 0x0db5, 0x0dd1, 0x0002, 0x02be, 0x02c1, 0x0001, 0x003b, 0x0df3, + 0x0001, 0x003b, 0x0e10, 0x0003, 0x02c8, 0x02cb, 0x02d0, 0x0001, + 0x003b, 0x0d89, 0x0003, 0x003b, 0x0d99, 0x0db5, 0x0dd1, 0x0002, + 0x02d3, 0x02d6, 0x0001, 0x003b, 0x0df3, 0x0001, 0x003b, 0x0e10, + 0x0003, 0x02dd, 0x02e0, 0x02e5, 0x0001, 0x003b, 0x0d89, 0x0003, + 0x003b, 0x0d99, 0x0db5, 0x0dd1, 0x0002, 0x02e8, 0x02eb, 0x0001, + 0x003b, 0x0df3, 0x0001, 0x003b, 0x0e10, 0x0003, 0x02f2, 0x02f5, + // Entry 2D540 - 2D57F + 0x02fa, 0x0001, 0x003b, 0x0e30, 0x0003, 0x003b, 0x0e46, 0x0e68, + 0x0e8a, 0x0002, 0x02fd, 0x0300, 0x0001, 0x003b, 0x0eb2, 0x0001, + 0x003b, 0x0ed5, 0x0003, 0x0307, 0x030a, 0x030f, 0x0001, 0x003b, + 0x0e30, 0x0003, 0x003b, 0x0e46, 0x0e68, 0x0e8a, 0x0002, 0x0312, + 0x0315, 0x0001, 0x003b, 0x0eb2, 0x0001, 0x003b, 0x0ed5, 0x0003, + 0x031c, 0x031f, 0x0324, 0x0001, 0x003b, 0x0e30, 0x0003, 0x003b, + 0x0e46, 0x0e68, 0x0e8a, 0x0002, 0x0327, 0x032a, 0x0001, 0x003b, + 0x0eb2, 0x0001, 0x003b, 0x0ed5, 0x0003, 0x0331, 0x0334, 0x0339, + // Entry 2D580 - 2D5BF + 0x0001, 0x003b, 0x0efb, 0x0003, 0x003b, 0x0f02, 0x0f15, 0x0f28, + 0x0002, 0x033c, 0x033f, 0x0001, 0x003b, 0x0f41, 0x0001, 0x003b, + 0x0f55, 0x0003, 0x0346, 0x0349, 0x034e, 0x0001, 0x003b, 0x0efb, + 0x0003, 0x003b, 0x0f02, 0x0f15, 0x0f28, 0x0002, 0x0351, 0x0354, + 0x0001, 0x003b, 0x0f41, 0x0001, 0x003b, 0x0f55, 0x0003, 0x035b, + 0x035e, 0x0363, 0x0001, 0x003b, 0x0efb, 0x0003, 0x003b, 0x0f02, + 0x0f15, 0x0f28, 0x0002, 0x0366, 0x0369, 0x0001, 0x003b, 0x0f41, + 0x0001, 0x003b, 0x0f55, 0x0004, 0x0371, 0x0374, 0x0379, 0x0382, + // Entry 2D5C0 - 2D5FF + 0x0001, 0x003b, 0x0f69, 0x0003, 0x003b, 0x0f7f, 0x0fa1, 0x0fc3, + 0x0002, 0x037c, 0x037f, 0x0001, 0x003b, 0x0feb, 0x0001, 0x003b, + 0x100e, 0x0001, 0x003b, 0x1034, 0x0004, 0x038a, 0x038d, 0x0392, + 0x039b, 0x0001, 0x003b, 0x0f69, 0x0003, 0x003b, 0x0f7f, 0x0fa1, + 0x0fc3, 0x0002, 0x0395, 0x0398, 0x0001, 0x003b, 0x0feb, 0x0001, + 0x003b, 0x100e, 0x0001, 0x003b, 0x1034, 0x0004, 0x03a3, 0x03a6, + 0x03ab, 0x03b4, 0x0001, 0x003b, 0x0f69, 0x0003, 0x003b, 0x0f7f, + 0x0fa1, 0x0fc3, 0x0002, 0x03ae, 0x03b1, 0x0001, 0x003b, 0x0feb, + // Entry 2D600 - 2D63F + 0x0001, 0x003b, 0x100e, 0x0001, 0x003b, 0x1034, 0x0001, 0x03b9, + 0x0001, 0x003b, 0x1054, 0x0001, 0x03be, 0x0001, 0x003b, 0x1054, + 0x0001, 0x03c3, 0x0001, 0x003b, 0x1054, 0x0003, 0x03ca, 0x03cd, + 0x03d4, 0x0001, 0x003b, 0x1076, 0x0005, 0x003b, 0x10a5, 0x10be, + 0x10d7, 0x1083, 0x10f6, 0x0002, 0x03d7, 0x03da, 0x0001, 0x003b, + 0x1115, 0x0001, 0x003b, 0x112f, 0x0003, 0x03e1, 0x03e4, 0x03eb, + 0x0001, 0x003b, 0x1076, 0x0005, 0x003b, 0x10a5, 0x10be, 0x114c, + 0x1083, 0x10f6, 0x0002, 0x03ee, 0x03f1, 0x0001, 0x003b, 0x1115, + // Entry 2D640 - 2D67F + 0x0001, 0x003b, 0x1168, 0x0003, 0x03f8, 0x03fb, 0x0402, 0x0001, + 0x003b, 0x1076, 0x0005, 0x003b, 0x10a5, 0x10be, 0x114c, 0x1083, + 0x10f6, 0x0002, 0x0405, 0x0408, 0x0001, 0x003b, 0x1115, 0x0001, + 0x003b, 0x1168, 0x0001, 0x040d, 0x0001, 0x003b, 0x1188, 0x0001, + 0x0412, 0x0001, 0x003b, 0x1188, 0x0001, 0x0417, 0x0001, 0x003b, + 0x1188, 0x0001, 0x041c, 0x0001, 0x003b, 0x11aa, 0x0001, 0x0421, + 0x0001, 0x003b, 0x11aa, 0x0001, 0x0426, 0x0001, 0x003b, 0x11aa, + 0x0001, 0x042b, 0x0001, 0x003b, 0x11d8, 0x0001, 0x0430, 0x0001, + // Entry 2D680 - 2D6BF + 0x003b, 0x11d8, 0x0001, 0x0435, 0x0001, 0x003b, 0x11d8, 0x0003, + 0x0000, 0x043c, 0x0441, 0x0003, 0x003b, 0x1206, 0x1237, 0x1268, + 0x0002, 0x0444, 0x0447, 0x0001, 0x003b, 0x129f, 0x0001, 0x003b, + 0x12e4, 0x0003, 0x0000, 0x044e, 0x0453, 0x0003, 0x003b, 0x1206, + 0x1237, 0x1268, 0x0002, 0x0456, 0x0459, 0x0001, 0x003b, 0x129f, + 0x0001, 0x003b, 0x12e4, 0x0003, 0x0000, 0x0460, 0x0465, 0x0003, + 0x003b, 0x1206, 0x1237, 0x1268, 0x0002, 0x0468, 0x046b, 0x0001, + 0x003b, 0x1329, 0x0001, 0x003b, 0x1371, 0x0003, 0x0000, 0x0472, + // Entry 2D6C0 - 2D6FF + 0x0477, 0x0003, 0x003b, 0x13b0, 0x13d2, 0x13f4, 0x0002, 0x047a, + 0x047d, 0x0001, 0x003b, 0x141c, 0x0001, 0x003b, 0x145b, 0x0003, + 0x0000, 0x0484, 0x0489, 0x0003, 0x003b, 0x13b0, 0x13d2, 0x13f4, + 0x0002, 0x048c, 0x048f, 0x0001, 0x003b, 0x141c, 0x0001, 0x003b, + 0x145b, 0x0003, 0x0000, 0x0496, 0x049b, 0x0003, 0x003b, 0x13b0, + 0x13d2, 0x13f4, 0x0002, 0x049e, 0x04a1, 0x0001, 0x003b, 0x141c, + 0x0001, 0x003b, 0x145b, 0x0003, 0x0000, 0x04a8, 0x04ad, 0x0003, + 0x003b, 0x1491, 0x14bf, 0x14ed, 0x0002, 0x04b0, 0x04b3, 0x0001, + // Entry 2D700 - 2D73F + 0x003b, 0x1521, 0x0001, 0x003b, 0x1566, 0x0003, 0x0000, 0x04ba, + 0x04bf, 0x0003, 0x003b, 0x1491, 0x14bf, 0x14ed, 0x0002, 0x04c2, + 0x04c5, 0x0001, 0x003b, 0x1521, 0x0001, 0x003b, 0x1566, 0x0003, + 0x0000, 0x04cc, 0x04d1, 0x0003, 0x003b, 0x1491, 0x14bf, 0x14ed, + 0x0002, 0x04d4, 0x04d7, 0x0001, 0x003b, 0x1521, 0x0001, 0x003b, + 0x1566, 0x0003, 0x0000, 0x04de, 0x04e3, 0x0003, 0x003b, 0x15a2, + 0x15c7, 0x15ec, 0x0002, 0x04e6, 0x04e9, 0x0001, 0x003b, 0x1617, + 0x0001, 0x003b, 0x1653, 0x0003, 0x0000, 0x04f0, 0x04f5, 0x0003, + // Entry 2D740 - 2D77F + 0x003b, 0x15a2, 0x15c7, 0x15ec, 0x0002, 0x04f8, 0x04fb, 0x0001, + 0x003b, 0x1617, 0x0001, 0x003b, 0x1653, 0x0003, 0x0000, 0x0502, + 0x0507, 0x0003, 0x003b, 0x15a2, 0x15c7, 0x15ec, 0x0002, 0x050a, + 0x050d, 0x0001, 0x003b, 0x1617, 0x0001, 0x003b, 0x1653, 0x0003, + 0x0000, 0x0514, 0x0519, 0x0003, 0x003b, 0x1686, 0x16c0, 0x16fa, + 0x0002, 0x051c, 0x051f, 0x0001, 0x003b, 0x173a, 0x0001, 0x003b, + 0x178b, 0x0003, 0x0000, 0x0526, 0x052b, 0x0003, 0x003b, 0x1686, + 0x16c0, 0x16fa, 0x0002, 0x052e, 0x0531, 0x0001, 0x003b, 0x173a, + // Entry 2D780 - 2D7BF + 0x0001, 0x003b, 0x178b, 0x0003, 0x0000, 0x0538, 0x053d, 0x0003, + 0x003b, 0x1686, 0x16c0, 0x16fa, 0x0002, 0x0540, 0x0543, 0x0001, + 0x003b, 0x173a, 0x0001, 0x003b, 0x178b, 0x0003, 0x0000, 0x054a, + 0x054f, 0x0003, 0x003b, 0x17d3, 0x17fe, 0x1829, 0x0002, 0x0552, + 0x0555, 0x0001, 0x003b, 0x185a, 0x0001, 0x003b, 0x189c, 0x0003, + 0x0000, 0x055c, 0x0561, 0x0003, 0x003b, 0x17d3, 0x17fe, 0x1829, + 0x0002, 0x0564, 0x0567, 0x0001, 0x003b, 0x185a, 0x0001, 0x003b, + 0x189c, 0x0003, 0x0000, 0x056e, 0x0573, 0x0003, 0x003b, 0x17d3, + // Entry 2D7C0 - 2D7FF + 0x17fe, 0x1829, 0x0002, 0x0576, 0x0579, 0x0001, 0x003b, 0x185a, + 0x0001, 0x003b, 0x189c, 0x0003, 0x0000, 0x0580, 0x0585, 0x0003, + 0x003b, 0x18d5, 0x18fd, 0x1925, 0x0002, 0x0588, 0x058b, 0x0001, + 0x003b, 0x1953, 0x0001, 0x003b, 0x1993, 0x0003, 0x0000, 0x0592, + 0x0597, 0x0003, 0x003b, 0x18d5, 0x18fd, 0x1925, 0x0002, 0x059a, + 0x059d, 0x0001, 0x003b, 0x1953, 0x0001, 0x003b, 0x1993, 0x0003, + 0x0000, 0x05a4, 0x05a9, 0x0003, 0x003b, 0x18d5, 0x18fd, 0x1925, + 0x0002, 0x05ac, 0x05af, 0x0001, 0x003b, 0x1953, 0x0001, 0x003b, + // Entry 2D800 - 2D83F + 0x1993, 0x0001, 0x05b4, 0x0001, 0x003b, 0x19ca, 0x0001, 0x05b9, + 0x0001, 0x003b, 0x19ca, 0x0001, 0x05be, 0x0001, 0x003b, 0x19ca, + 0x0003, 0x05c5, 0x05c8, 0x05cc, 0x0001, 0x003b, 0x19ea, 0x0002, + 0x003b, 0xffff, 0x19f7, 0x0002, 0x05cf, 0x05d2, 0x0001, 0x003b, + 0x1a0d, 0x0001, 0x003b, 0x1a46, 0x0003, 0x05d9, 0x0000, 0x05dc, + 0x0001, 0x003b, 0x19ea, 0x0002, 0x05df, 0x05e2, 0x0001, 0x003b, + 0x1a63, 0x0001, 0x003b, 0x1a46, 0x0003, 0x05e9, 0x0000, 0x05ec, + 0x0001, 0x003b, 0x19ea, 0x0002, 0x05ef, 0x05f2, 0x0001, 0x003b, + // Entry 2D840 - 2D87F + 0x1a63, 0x0001, 0x003b, 0x1a46, 0x0003, 0x05f9, 0x05fc, 0x0600, + 0x0001, 0x003b, 0x1a7d, 0x0002, 0x003b, 0xffff, 0x1a8a, 0x0002, + 0x0603, 0x0606, 0x0001, 0x003b, 0x1aa0, 0x0001, 0x003b, 0x1aba, + 0x0003, 0x060d, 0x0000, 0x0610, 0x0001, 0x003b, 0x1a7d, 0x0002, + 0x0613, 0x0616, 0x0001, 0x003b, 0x1aa0, 0x0001, 0x003b, 0x1ad7, + 0x0003, 0x061d, 0x0000, 0x0620, 0x0001, 0x003b, 0x1a7d, 0x0002, + 0x0623, 0x0626, 0x0001, 0x003b, 0x1aa0, 0x0001, 0x003b, 0x1ad7, + 0x0003, 0x062d, 0x0630, 0x0634, 0x0001, 0x003b, 0x1af7, 0x0002, + // Entry 2D880 - 2D8BF + 0x003b, 0xffff, 0x1b0a, 0x0002, 0x0637, 0x063a, 0x0001, 0x003b, + 0x1b17, 0x0001, 0x003b, 0x1b37, 0x0003, 0x0641, 0x0000, 0x0644, + 0x0001, 0x003b, 0x1af7, 0x0002, 0x0647, 0x064a, 0x0001, 0x003b, + 0x1b17, 0x0001, 0x003b, 0x1b37, 0x0003, 0x0651, 0x0000, 0x0654, + 0x0001, 0x003b, 0x1af7, 0x0002, 0x0657, 0x065a, 0x0001, 0x003b, + 0x1b17, 0x0001, 0x003b, 0x1b37, 0x0001, 0x065f, 0x0001, 0x003b, + 0x1b5a, 0x0001, 0x0664, 0x0001, 0x003b, 0x1b5a, 0x0001, 0x0669, + 0x0001, 0x003b, 0x1b5a, 0x0004, 0x0671, 0x0676, 0x067b, 0x068a, + // Entry 2D8C0 - 2D8FF + 0x0003, 0x0000, 0x1dc7, 0x2b55, 0x2b72, 0x0003, 0x003b, 0x1b76, + 0x1b93, 0x1bcb, 0x0002, 0x0000, 0x067e, 0x0003, 0x0000, 0x0685, + 0x0682, 0x0001, 0x003b, 0x1c03, 0x0003, 0x003b, 0xffff, 0x1c46, + 0x1cad, 0x0002, 0x0000, 0x068d, 0x0003, 0x0727, 0x07bd, 0x0691, + 0x0094, 0x003b, 0x1cf9, 0x1d42, 0x1d8b, 0x1dd7, 0x1e75, 0x1f83, + 0x2055, 0x216c, 0x22e0, 0x2451, 0x25e6, 0xffff, 0x2721, 0x27d8, + 0x28a1, 0x2997, 0x2a9c, 0x2b68, 0x2c55, 0x2da8, 0x2f22, 0x304b, + 0x315f, 0x3243, 0x330f, 0x33bc, 0x33e1, 0x3449, 0x3505, 0x3576, + // Entry 2D900 - 2D93F + 0x3611, 0x3685, 0x372d, 0x37c9, 0x3877, 0x391e, 0x395e, 0x39d5, + 0x3ab6, 0x3bc1, 0x3c47, 0x3c6f, 0x3cb8, 0x3d2f, 0x3dcd, 0x3e41, + 0x3f49, 0x401d, 0x40be, 0x41d2, 0x42da, 0x4375, 0x43bb, 0x4426, + 0x445d, 0x44b9, 0x4563, 0x459a, 0x4617, 0x473d, 0x47f9, 0x4836, + 0x48b1, 0x49a3, 0x4a5a, 0x4ada, 0x4b1a, 0x4b60, 0x4b91, 0x4be3, + 0x4c35, 0x4cb5, 0x4d7b, 0x4e50, 0x4f1c, 0xffff, 0x4f9f, 0x4ff1, + 0x5077, 0x50fd, 0x515f, 0x520c, 0x524c, 0x529f, 0x5322, 0x5396, + 0x5443, 0x5474, 0x54a5, 0x54e5, 0x553b, 0x55ca, 0x5647, 0x5767, + // Entry 2D940 - 2D97F + 0x587e, 0x595c, 0x59f1, 0x5a28, 0x5a4d, 0x5ab5, 0x5ba2, 0x5c80, + 0x5d2d, 0x5d52, 0x5de7, 0x5f0a, 0x5fe5, 0x609f, 0x614c, 0x6171, + 0x6201, 0x62d9, 0x639c, 0x6446, 0x64d6, 0x65b8, 0x65e0, 0x660e, + 0x663c, 0x666a, 0x66cf, 0xffff, 0x679e, 0x6824, 0x6852, 0x6886, + 0x68c3, 0x6903, 0x6931, 0x6962, 0x69b5, 0x6a3b, 0x6a6f, 0x6ac8, + 0x6b66, 0x6bce, 0x6c87, 0x6cf2, 0x6de8, 0x6ed5, 0x6f73, 0x6ff9, + 0x7101, 0x71ba, 0x71eb, 0x7216, 0x72a0, 0x7396, 0x0094, 0x003b, + 0xffff, 0xffff, 0xffff, 0xffff, 0x1e29, 0x1f52, 0x201e, 0x20f9, + // Entry 2D980 - 2D9BF + 0x227f, 0x23d5, 0x2576, 0xffff, 0x26f6, 0x27aa, 0x286a, 0x2945, + 0x2a71, 0x2b31, 0x2c0c, 0x2d29, 0x2ed3, 0x2ff6, 0x3122, 0x3218, + 0x32d8, 0xffff, 0xffff, 0x340c, 0xffff, 0x3548, 0xffff, 0x365d, + 0x370b, 0x37a7, 0x3843, 0xffff, 0xffff, 0x39a4, 0x3a76, 0x3b99, + 0xffff, 0xffff, 0xffff, 0x3cfb, 0xffff, 0x3e01, 0x3f00, 0xffff, + 0x407b, 0x4183, 0x42af, 0xffff, 0xffff, 0xffff, 0xffff, 0x4485, + 0xffff, 0xffff, 0x45c5, 0x46fa, 0xffff, 0xffff, 0x4867, 0x4978, + 0x4a38, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x4c87, + // Entry 2D9C0 - 2D9FF + 0x4d47, 0x4e19, 0x4ef4, 0xffff, 0xffff, 0xffff, 0x504f, 0xffff, + 0x5128, 0xffff, 0xffff, 0x527a, 0xffff, 0x535f, 0xffff, 0xffff, + 0xffff, 0xffff, 0x5510, 0xffff, 0x55fb, 0x5712, 0x5844, 0x5931, + 0xffff, 0xffff, 0xffff, 0x5a75, 0x5b6b, 0x5c46, 0xffff, 0xffff, + 0x5d8f, 0x5ecd, 0x5fc3, 0x6068, 0xffff, 0xffff, 0x61c7, 0x62b1, + 0x6368, 0xffff, 0x647a, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x669b, 0xffff, 0x6776, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x698d, 0xffff, 0xffff, 0x6a9a, 0xffff, 0x6b8e, + // Entry 2DA00 - 2DA3F + 0xffff, 0x6cb8, 0x6da8, 0x6ea7, 0xffff, 0x6fb3, 0x70c4, 0xffff, + 0xffff, 0xffff, 0x7266, 0x7353, 0x0094, 0x003b, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1edc, 0x1fcf, 0x20a4, 0x21f7, 0x235c, 0x24e5, + 0x2671, 0xffff, 0x2764, 0x2821, 0x28f0, 0x2a01, 0x2ae2, 0x2bba, + 0x2cbc, 0x2e3c, 0x2f8c, 0x30b8, 0x31b7, 0x3289, 0x3361, 0xffff, + 0xffff, 0x34a1, 0xffff, 0x35bf, 0xffff, 0x36c8, 0x3767, 0x3806, + 0x38c6, 0xffff, 0xffff, 0x3a21, 0x3b11, 0x3c04, 0xffff, 0xffff, + 0xffff, 0x3d7b, 0xffff, 0x3e9c, 0x3fb0, 0xffff, 0x411c, 0x423c, + // Entry 2DA40 - 2DA7F + 0x4320, 0xffff, 0xffff, 0xffff, 0xffff, 0x4508, 0xffff, 0xffff, + 0x468a, 0x4798, 0xffff, 0xffff, 0x4916, 0x49e9, 0x4a94, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x4cfe, 0x4dc7, 0x4ea2, + 0x4f5f, 0xffff, 0xffff, 0xffff, 0x50ba, 0xffff, 0x51b1, 0xffff, + 0xffff, 0x52e2, 0xffff, 0x53e8, 0xffff, 0xffff, 0xffff, 0xffff, + 0x5581, 0xffff, 0x56ab, 0x57d4, 0x58d3, 0x59a2, 0xffff, 0xffff, + 0xffff, 0x5b0d, 0x5bf4, 0x5cdb, 0xffff, 0xffff, 0x5e57, 0x5f62, + 0x6022, 0x60f1, 0xffff, 0xffff, 0x6256, 0x631c, 0x63eb, 0xffff, + // Entry 2DA80 - 2DABF + 0x6547, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x671e, 0xffff, + 0x67de, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x69f8, 0xffff, 0xffff, 0x6b14, 0xffff, 0x6c26, 0xffff, 0x6d47, + 0x6e43, 0x6f21, 0xffff, 0x705a, 0x7159, 0xffff, 0xffff, 0xffff, + 0x72f5, 0x73f4, 0x0003, 0x0004, 0x0583, 0x09ec, 0x0012, 0x0017, + 0x0000, 0x0030, 0x0000, 0x00b7, 0x0000, 0x013e, 0x0169, 0x0369, + 0x03ed, 0x046b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x04e9, + 0x0567, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x001d, 0x0003, + // Entry 2DAC0 - 2DAFF + 0x0026, 0x002b, 0x0021, 0x0001, 0x0023, 0x0001, 0x0000, 0x0000, + 0x0001, 0x0028, 0x0001, 0x0000, 0x0000, 0x0001, 0x002d, 0x0001, + 0x0000, 0x0000, 0x0005, 0x0036, 0x0000, 0x0000, 0x0000, 0x00a1, + 0x0002, 0x0039, 0x006d, 0x0003, 0x003d, 0x004d, 0x005d, 0x000e, + 0x003c, 0xffff, 0x0000, 0x000d, 0x001a, 0x0030, 0x0049, 0x0053, + 0x006c, 0x0085, 0x0098, 0x00b4, 0x00c1, 0x00d1, 0x00e4, 0x000e, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x2215, 0x2b8b, 0x2426, 0x0422, 0x000e, + // Entry 2DB00 - 2DB3F + 0x003c, 0xffff, 0x0000, 0x000d, 0x001a, 0x0030, 0x0049, 0x0053, + 0x006c, 0x0085, 0x0098, 0x00b4, 0x00c1, 0x00d1, 0x00e4, 0x0003, + 0x0071, 0x0081, 0x0091, 0x000e, 0x003c, 0xffff, 0x0000, 0x000d, + 0x001a, 0x0030, 0x0049, 0x0053, 0x006c, 0x0085, 0x0098, 0x00b4, + 0x00c1, 0x00d1, 0x00e4, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, + 0x2b8b, 0x2426, 0x0422, 0x000e, 0x003c, 0xffff, 0x0000, 0x000d, + 0x001a, 0x0030, 0x0049, 0x0053, 0x006c, 0x0085, 0x0098, 0x00b4, + // Entry 2DB40 - 2DB7F + 0x00c1, 0x00d1, 0x00e4, 0x0003, 0x00ab, 0x00b1, 0x00a5, 0x0001, + 0x00a7, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x00ad, 0x0002, + 0x0000, 0x0425, 0x042a, 0x0001, 0x00b3, 0x0002, 0x0000, 0x0425, + 0x042a, 0x0005, 0x00bd, 0x0000, 0x0000, 0x0000, 0x0128, 0x0002, + 0x00c0, 0x00f4, 0x0003, 0x00c4, 0x00d4, 0x00e4, 0x000e, 0x003c, + 0xffff, 0x00f1, 0x010d, 0x0126, 0x0136, 0x0152, 0x015f, 0x0175, + 0x018e, 0x01a1, 0x01bd, 0x01ca, 0x01e3, 0x01fc, 0x000e, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + // Entry 2DB80 - 2DBBF + 0x0041, 0x2424, 0x2215, 0x2b8b, 0x2426, 0x0422, 0x000e, 0x003c, + 0xffff, 0x00f1, 0x010d, 0x0126, 0x0136, 0x0152, 0x015f, 0x0175, + 0x018e, 0x01a1, 0x01bd, 0x01ca, 0x01e3, 0x01fc, 0x0003, 0x00f8, + 0x0108, 0x0118, 0x000e, 0x003c, 0xffff, 0x00f1, 0x010d, 0x0126, + 0x0136, 0x0152, 0x015f, 0x0175, 0x018e, 0x01a1, 0x01bd, 0x01ca, + 0x01e3, 0x01fc, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2b8b, + 0x2426, 0x0422, 0x000e, 0x003c, 0xffff, 0x00f1, 0x010d, 0x0126, + // Entry 2DBC0 - 2DBFF + 0x0136, 0x0152, 0x015f, 0x0175, 0x018e, 0x01a1, 0x01bd, 0x01ca, + 0x01e3, 0x01fc, 0x0003, 0x0132, 0x0138, 0x012c, 0x0001, 0x012e, + 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x0134, 0x0002, 0x0000, + 0x0425, 0x042a, 0x0001, 0x013a, 0x0002, 0x0000, 0x0425, 0x042a, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0147, 0x0000, + 0x0158, 0x0004, 0x0155, 0x014f, 0x014c, 0x0152, 0x0001, 0x0000, + 0x0489, 0x0001, 0x0000, 0x049a, 0x0001, 0x0000, 0x04a5, 0x0001, + 0x0000, 0x04af, 0x0004, 0x0166, 0x0160, 0x015d, 0x0163, 0x0001, + // Entry 2DC00 - 2DC3F + 0x003c, 0x021b, 0x0001, 0x003c, 0x021b, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0008, 0x0172, 0x01d7, 0x022e, 0x0263, + 0x031c, 0x0336, 0x0347, 0x0358, 0x0002, 0x0175, 0x01a6, 0x0003, + 0x0179, 0x0188, 0x0197, 0x000d, 0x003c, 0xffff, 0x0232, 0x0242, + 0x025b, 0x026e, 0x027e, 0x0285, 0x0292, 0x029f, 0x02a6, 0x02bc, + 0x02cc, 0x02d9, 0x000d, 0x003c, 0xffff, 0x02e9, 0x02ed, 0x02f4, + 0x02fb, 0x027e, 0x02ff, 0x0306, 0x030d, 0x0311, 0x0318, 0x031c, + 0x0320, 0x000d, 0x003c, 0xffff, 0x0232, 0x0242, 0x025b, 0x0327, + // Entry 2DC40 - 2DC7F + 0x027e, 0x0285, 0x0292, 0x033d, 0x0350, 0x036f, 0x0388, 0x039e, + 0x0003, 0x01aa, 0x01b9, 0x01c8, 0x000d, 0x003c, 0xffff, 0x03b7, + 0x03be, 0x025b, 0x026e, 0x027e, 0x0285, 0x0292, 0x029f, 0x02a6, + 0x02bc, 0x02cc, 0x02d9, 0x000d, 0x003c, 0xffff, 0x02e9, 0x02ed, + 0x02f4, 0x02fb, 0x027e, 0x02ff, 0x0306, 0x030d, 0x0311, 0x0318, + 0x031c, 0x0320, 0x000d, 0x003c, 0xffff, 0x0232, 0x0242, 0x025b, + 0x0327, 0x027e, 0x0285, 0x0292, 0x033d, 0x0350, 0x036f, 0x0388, + 0x039e, 0x0002, 0x01da, 0x0204, 0x0005, 0x01e0, 0x01e9, 0x01fb, + // Entry 2DC80 - 2DCBF + 0x0000, 0x01f2, 0x0007, 0x003c, 0x03ce, 0x03db, 0x03e5, 0x03f2, + 0x03fc, 0x0409, 0x0419, 0x0007, 0x003c, 0x0423, 0x042a, 0x0431, + 0x0438, 0x043f, 0x0446, 0x044d, 0x0007, 0x003c, 0x03ce, 0x03db, + 0x03e5, 0x03f2, 0x03fc, 0x0409, 0x0419, 0x0007, 0x003c, 0x0451, + 0x0467, 0x047a, 0x0490, 0x04a3, 0x04b9, 0x04d2, 0x0005, 0x020a, + 0x0213, 0x0225, 0x0000, 0x021c, 0x0007, 0x003c, 0x03ce, 0x03db, + 0x03e5, 0x03f2, 0x03fc, 0x0409, 0x0419, 0x0007, 0x003c, 0x0423, + 0x042a, 0x0431, 0x0438, 0x043f, 0x0446, 0x044d, 0x0007, 0x003c, + // Entry 2DCC0 - 2DCFF + 0x03ce, 0x03db, 0x03e5, 0x03f2, 0x03fc, 0x0409, 0x0419, 0x0007, + 0x003c, 0x0451, 0x0467, 0x047a, 0x0490, 0x04a3, 0x04b9, 0x04d2, + 0x0002, 0x0231, 0x024a, 0x0003, 0x0235, 0x023c, 0x0243, 0x0005, + 0x003c, 0xffff, 0x04e5, 0x04f4, 0x0503, 0x0512, 0x0005, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x003c, 0xffff, + 0x0521, 0x0545, 0x0569, 0x058d, 0x0003, 0x024e, 0x0255, 0x025c, + 0x0005, 0x003c, 0xffff, 0x04e5, 0x04f4, 0x0503, 0x0512, 0x0005, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x003c, + // Entry 2DD00 - 2DD3F + 0xffff, 0x0521, 0x0545, 0x0569, 0x058d, 0x0002, 0x0266, 0x02c1, + 0x0003, 0x026a, 0x0287, 0x02a4, 0x0007, 0x0275, 0x0278, 0x0272, + 0x027b, 0x027e, 0x0281, 0x0284, 0x0001, 0x003c, 0x05b1, 0x0001, + 0x003c, 0x05d1, 0x0001, 0x003c, 0x05ed, 0x0001, 0x003c, 0x0603, + 0x0001, 0x003c, 0x0619, 0x0001, 0x003c, 0x0632, 0x0001, 0x003c, + 0x063f, 0x0007, 0x0292, 0x0295, 0x028f, 0x0298, 0x029b, 0x029e, + 0x02a1, 0x0001, 0x003c, 0x0652, 0x0001, 0x003c, 0x0671, 0x0001, + 0x003c, 0x0318, 0x0001, 0x003c, 0x0603, 0x0001, 0x003c, 0x0619, + // Entry 2DD40 - 2DD7F + 0x0001, 0x003c, 0x0632, 0x0001, 0x003c, 0x063f, 0x0007, 0x02af, + 0x02b2, 0x02ac, 0x02b5, 0x02b8, 0x02bb, 0x02be, 0x0001, 0x003c, + 0x05b1, 0x0001, 0x003c, 0x05d1, 0x0001, 0x003c, 0x05ed, 0x0001, + 0x003c, 0x0603, 0x0001, 0x003c, 0x0619, 0x0001, 0x003c, 0x0632, + 0x0001, 0x003c, 0x063f, 0x0003, 0x02c5, 0x02e2, 0x02ff, 0x0007, + 0x02d0, 0x02d3, 0x02cd, 0x02d6, 0x02d9, 0x02dc, 0x02df, 0x0001, + 0x003c, 0x0652, 0x0001, 0x003c, 0x05d1, 0x0001, 0x003c, 0x05ed, + 0x0001, 0x003c, 0x0603, 0x0001, 0x003c, 0x0619, 0x0001, 0x003c, + // Entry 2DD80 - 2DDBF + 0x0632, 0x0001, 0x003c, 0x063f, 0x0007, 0x02ed, 0x02f0, 0x02ea, + 0x02f3, 0x02f6, 0x02f9, 0x02fc, 0x0001, 0x003c, 0x0652, 0x0001, + 0x003c, 0x05d1, 0x0001, 0x003c, 0x05ed, 0x0001, 0x003c, 0x0603, + 0x0001, 0x003c, 0x0619, 0x0001, 0x003c, 0x0632, 0x0001, 0x003c, + 0x063f, 0x0007, 0x030a, 0x030d, 0x0307, 0x0310, 0x0313, 0x0316, + 0x0319, 0x0001, 0x003c, 0x0652, 0x0001, 0x003c, 0x05d1, 0x0001, + 0x003c, 0x05ed, 0x0001, 0x003c, 0x0603, 0x0001, 0x003c, 0x0619, + 0x0001, 0x003c, 0x0632, 0x0001, 0x003c, 0x063f, 0x0003, 0x032b, + // Entry 2DDC0 - 2DDFF + 0x0000, 0x0320, 0x0002, 0x0323, 0x0327, 0x0002, 0x003c, 0x0678, + 0x06bc, 0x0002, 0x003c, 0x069e, 0x06d9, 0x0002, 0x032e, 0x0332, + 0x0002, 0x003c, 0x06f6, 0x070a, 0x0002, 0x003c, 0x069e, 0x06d9, + 0x0004, 0x0344, 0x033e, 0x033b, 0x0341, 0x0001, 0x000c, 0x03c9, + 0x0001, 0x000c, 0x03d9, 0x0001, 0x000c, 0x03e3, 0x0001, 0x0000, + 0x2418, 0x0004, 0x0355, 0x034f, 0x034c, 0x0352, 0x0001, 0x002a, + 0x0d7f, 0x0001, 0x002a, 0x0d8f, 0x0001, 0x002a, 0x0d9c, 0x0001, + 0x002a, 0x0da7, 0x0004, 0x0366, 0x0360, 0x035d, 0x0363, 0x0001, + // Entry 2DE00 - 2DE3F + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0005, 0x036f, 0x0000, 0x0000, 0x0000, + 0x03da, 0x0002, 0x0372, 0x03a6, 0x0003, 0x0376, 0x0386, 0x0396, + 0x000e, 0x003c, 0x07a8, 0x071b, 0x072e, 0x074a, 0x0763, 0x0776, + 0x0786, 0x0798, 0x07bb, 0x07ce, 0x07db, 0x07eb, 0x07fb, 0x0805, + 0x000e, 0x0000, 0x003f, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2b8b, 0x2426, 0x0422, + 0x000e, 0x003c, 0x07a8, 0x071b, 0x072e, 0x074a, 0x0763, 0x0776, + // Entry 2DE40 - 2DE7F + 0x0786, 0x0798, 0x07bb, 0x07ce, 0x07db, 0x07eb, 0x07fb, 0x0805, + 0x0003, 0x03aa, 0x03ba, 0x03ca, 0x000e, 0x003c, 0x07a8, 0x071b, + 0x072e, 0x074a, 0x0763, 0x0776, 0x0786, 0x0798, 0x07bb, 0x07ce, + 0x07db, 0x07eb, 0x07fb, 0x0805, 0x000e, 0x0000, 0x003f, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x2215, 0x2b8b, 0x2426, 0x0422, 0x000e, 0x003c, 0x07a8, 0x071b, + 0x072e, 0x074a, 0x0763, 0x0776, 0x0786, 0x0798, 0x07bb, 0x07ce, + 0x07db, 0x07eb, 0x07fb, 0x0805, 0x0003, 0x03e3, 0x03e8, 0x03de, + // Entry 2DE80 - 2DEBF + 0x0001, 0x03e0, 0x0001, 0x0000, 0x04ef, 0x0001, 0x03e5, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x03ea, 0x0001, 0x0000, 0x04ef, 0x0005, + 0x03f3, 0x0000, 0x0000, 0x0000, 0x0458, 0x0002, 0x03f6, 0x0427, + 0x0003, 0x03fa, 0x0409, 0x0418, 0x000d, 0x003c, 0xffff, 0x0815, + 0x0825, 0x0835, 0x084b, 0x0858, 0x086b, 0x087b, 0x088e, 0x08a4, + 0x08bd, 0x08cd, 0x08d7, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, + 0x2b8b, 0x2426, 0x000d, 0x003c, 0xffff, 0x0815, 0x0825, 0x0835, + // Entry 2DEC0 - 2DEFF + 0x084b, 0x0858, 0x086b, 0x087b, 0x088e, 0x08a4, 0x08bd, 0x08cd, + 0x08d7, 0x0003, 0x042b, 0x043a, 0x0449, 0x000d, 0x003c, 0xffff, + 0x0815, 0x0825, 0x0835, 0x084b, 0x0858, 0x086b, 0x087b, 0x088e, + 0x08a4, 0x08bd, 0x08cd, 0x08d7, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x2215, 0x2b8b, 0x2426, 0x000d, 0x003c, 0xffff, 0x0815, 0x0825, + 0x0835, 0x084b, 0x0858, 0x086b, 0x087b, 0x088e, 0x08a4, 0x08bd, + 0x08cd, 0x08d7, 0x0003, 0x0461, 0x0466, 0x045c, 0x0001, 0x045e, + // Entry 2DF00 - 2DF3F + 0x0001, 0x003c, 0x08ed, 0x0001, 0x0463, 0x0001, 0x003c, 0x08ed, + 0x0001, 0x0468, 0x0001, 0x003c, 0x08ed, 0x0005, 0x0471, 0x0000, + 0x0000, 0x0000, 0x04d6, 0x0002, 0x0474, 0x04a5, 0x0003, 0x0478, + 0x0487, 0x0496, 0x000d, 0x003c, 0xffff, 0x08f4, 0x0902, 0x090d, + 0x091c, 0x092c, 0x093c, 0x094d, 0x0958, 0x095d, 0x0968, 0x0973, + 0x098b, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2b8b, 0x2426, + 0x000d, 0x003c, 0xffff, 0x09a0, 0x09b3, 0x090d, 0x091c, 0x09c3, + // Entry 2DF40 - 2DF7F + 0x09d8, 0x09ee, 0x09fb, 0x0a0e, 0x0a21, 0x0a37, 0x0a5d, 0x0003, + 0x04a9, 0x04b8, 0x04c7, 0x000d, 0x003c, 0xffff, 0x08f4, 0x0902, + 0x090d, 0x091c, 0x092c, 0x093c, 0x094d, 0x0958, 0x095d, 0x0968, + 0x0973, 0x098b, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2b8b, + 0x2426, 0x000d, 0x003c, 0xffff, 0x09a0, 0x09b3, 0x090d, 0x091c, + 0x09c3, 0x09d8, 0x09ee, 0x09fb, 0x0a0e, 0x0a21, 0x0a37, 0x0a5d, + 0x0003, 0x04df, 0x04e4, 0x04da, 0x0001, 0x04dc, 0x0001, 0x0000, + // Entry 2DF80 - 2DFBF + 0x06c8, 0x0001, 0x04e1, 0x0001, 0x0000, 0x06c8, 0x0001, 0x04e6, + 0x0001, 0x0000, 0x06c8, 0x0005, 0x04ef, 0x0000, 0x0000, 0x0000, + 0x0554, 0x0002, 0x04f2, 0x0523, 0x0003, 0x04f6, 0x0505, 0x0514, + 0x000d, 0x003c, 0xffff, 0x0a80, 0x0a9f, 0x0ac7, 0x0ae0, 0x0aed, + 0x0b06, 0x0b1f, 0x0b32, 0x0b3f, 0x0b4c, 0x0b53, 0x0b66, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x2215, 0x2b8b, 0x2426, 0x000d, 0x003c, + 0xffff, 0x0a80, 0x0a9f, 0x0ac7, 0x0ae0, 0x0aed, 0x0b06, 0x0b1f, + // Entry 2DFC0 - 2DFFF + 0x0b32, 0x0b3f, 0x0b4c, 0x0b53, 0x0b66, 0x0003, 0x0527, 0x0536, + 0x0545, 0x000d, 0x003c, 0xffff, 0x0a80, 0x0a9f, 0x0ac7, 0x0ae0, + 0x0aed, 0x0b06, 0x0b1f, 0x0b32, 0x0b3f, 0x0b4c, 0x0b53, 0x0b66, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2b8b, 0x2426, 0x000d, + 0x003c, 0xffff, 0x0a80, 0x0a9f, 0x0ac7, 0x0ae0, 0x0aed, 0x0b06, + 0x0b1f, 0x0b32, 0x0b3f, 0x0b4c, 0x0b53, 0x0b66, 0x0003, 0x055d, + 0x0562, 0x0558, 0x0001, 0x055a, 0x0001, 0x0000, 0x1a1d, 0x0001, + // Entry 2E000 - 2E03F + 0x055f, 0x0001, 0x0000, 0x1a1d, 0x0001, 0x0564, 0x0001, 0x0000, + 0x1a1d, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x056d, 0x0003, + 0x0577, 0x057d, 0x0571, 0x0001, 0x0573, 0x0002, 0x003c, 0x0b7f, + 0x0bab, 0x0001, 0x0579, 0x0002, 0x003c, 0x0b7f, 0x0bab, 0x0001, + 0x057f, 0x0002, 0x003c, 0x0b7f, 0x0bab, 0x0042, 0x05c6, 0x05cb, + 0x05d0, 0x05d5, 0x05ec, 0x0603, 0x061a, 0x0631, 0x0648, 0x065f, + 0x0676, 0x068d, 0x06a4, 0x06bf, 0x06da, 0x06f5, 0x06fa, 0x06ff, + 0x0704, 0x071d, 0x0736, 0x074f, 0x0754, 0x0759, 0x075e, 0x0763, + // Entry 2E040 - 2E07F + 0x0768, 0x076d, 0x0772, 0x0777, 0x077c, 0x0790, 0x07a4, 0x07b8, + 0x07cc, 0x07e0, 0x07f4, 0x0808, 0x081c, 0x0830, 0x0844, 0x0858, + 0x086c, 0x0880, 0x0894, 0x08a8, 0x08bc, 0x08d0, 0x08e4, 0x08f8, + 0x090c, 0x0920, 0x0925, 0x092a, 0x092f, 0x0945, 0x0957, 0x0969, + 0x097f, 0x0991, 0x09a3, 0x09b9, 0x09cb, 0x09dd, 0x09e2, 0x09e7, + 0x0001, 0x05c8, 0x0001, 0x003c, 0x0bbb, 0x0001, 0x05cd, 0x0001, + 0x003c, 0x0bbb, 0x0001, 0x05d2, 0x0001, 0x003c, 0x0bbb, 0x0003, + 0x05d9, 0x05dc, 0x05e1, 0x0001, 0x003c, 0x0bc5, 0x0003, 0x003c, + // Entry 2E080 - 2E0BF + 0x0bd2, 0x0bf2, 0x0c03, 0x0002, 0x05e4, 0x05e8, 0x0002, 0x003c, + 0x0c43, 0x0c23, 0x0002, 0x003c, 0x0c8a, 0x0c66, 0x0003, 0x05f0, + 0x05f3, 0x05f8, 0x0001, 0x003c, 0x0bc5, 0x0003, 0x003c, 0x0cb1, + 0x0bf2, 0x0c03, 0x0002, 0x05fb, 0x05ff, 0x0002, 0x003c, 0x0c43, + 0x0c23, 0x0002, 0x003c, 0x0c8a, 0x0c66, 0x0003, 0x0607, 0x060a, + 0x060f, 0x0001, 0x003c, 0x0bc5, 0x0003, 0x003c, 0x0cb1, 0x0bf2, + 0x0c03, 0x0002, 0x0612, 0x0616, 0x0002, 0x003c, 0x0c43, 0x0c23, + 0x0002, 0x003c, 0x0c8a, 0x0c66, 0x0003, 0x061e, 0x0621, 0x0626, + // Entry 2E0C0 - 2E0FF + 0x0001, 0x003c, 0x0ccb, 0x0003, 0x003c, 0x0ce7, 0x0d16, 0x0d36, + 0x0002, 0x0629, 0x062d, 0x0002, 0x003c, 0x0d94, 0x0d65, 0x0002, + 0x003c, 0x0df9, 0x0dc6, 0x0003, 0x0635, 0x0638, 0x063d, 0x0001, + 0x003c, 0x0ccb, 0x0003, 0x003c, 0x0e2f, 0x0d16, 0x0d36, 0x0002, + 0x0640, 0x0644, 0x0002, 0x003c, 0x0d94, 0x0e58, 0x0002, 0x003c, + 0x0df9, 0x0e80, 0x0003, 0x064c, 0x064f, 0x0654, 0x0001, 0x003c, + 0x0ccb, 0x0003, 0x003c, 0x0e2f, 0x0d16, 0x0d36, 0x0002, 0x0657, + 0x065b, 0x0002, 0x003c, 0x0d94, 0x0d94, 0x0002, 0x003c, 0x0df9, + // Entry 2E100 - 2E13F + 0x0e80, 0x0003, 0x0663, 0x0666, 0x066b, 0x0001, 0x003c, 0x0ea9, + 0x0003, 0x003c, 0x0ebc, 0x0edc, 0x0ef3, 0x0002, 0x066e, 0x0672, + 0x0002, 0x003c, 0x0f39, 0x0f19, 0x0002, 0x003c, 0x0f86, 0x0f62, + 0x0003, 0x067a, 0x067d, 0x0682, 0x0001, 0x003c, 0x0ea9, 0x0003, + 0x003c, 0x0ebc, 0x0edc, 0x0ef3, 0x0002, 0x0685, 0x0689, 0x0002, + 0x003c, 0x0f39, 0x0f19, 0x0002, 0x003c, 0x0f86, 0x0fb3, 0x0003, + 0x0691, 0x0694, 0x0699, 0x0001, 0x003c, 0x0ea9, 0x0003, 0x003c, + 0x0ebc, 0x0edc, 0x0ef3, 0x0002, 0x069c, 0x06a0, 0x0002, 0x003c, + // Entry 2E140 - 2E17F + 0x0f39, 0x0f19, 0x0002, 0x003c, 0x0f86, 0x0f62, 0x0004, 0x06a9, + 0x06ac, 0x06b1, 0x06bc, 0x0001, 0x003c, 0x0fda, 0x0003, 0x003c, + 0x0fe4, 0x0ffb, 0x1009, 0x0002, 0x06b4, 0x06b8, 0x0002, 0x003c, + 0x1043, 0x1026, 0x0002, 0x003c, 0x1084, 0x1063, 0x0001, 0x003c, + 0x10a8, 0x0004, 0x06c4, 0x06c7, 0x06cc, 0x06d7, 0x0001, 0x003c, + 0x0fda, 0x0003, 0x003c, 0x0fe4, 0x0ffb, 0x1009, 0x0002, 0x06cf, + 0x06d3, 0x0002, 0x003c, 0x1043, 0x1026, 0x0002, 0x003c, 0x1084, + 0x1063, 0x0001, 0x003c, 0x10a8, 0x0004, 0x06df, 0x06e2, 0x06e7, + // Entry 2E180 - 2E1BF + 0x06f2, 0x0001, 0x003c, 0x0fda, 0x0003, 0x003c, 0x0fe4, 0x0ffb, + 0x1009, 0x0002, 0x06ea, 0x06ee, 0x0002, 0x003c, 0x1043, 0x1026, + 0x0002, 0x003c, 0x1084, 0x1063, 0x0001, 0x003c, 0x10a8, 0x0001, + 0x06f7, 0x0001, 0x003c, 0x10b6, 0x0001, 0x06fc, 0x0001, 0x003c, + 0x10b6, 0x0001, 0x0701, 0x0001, 0x003c, 0x10b6, 0x0003, 0x0708, + 0x070b, 0x0712, 0x0001, 0x003c, 0x10d0, 0x0005, 0x003c, 0x10ed, + 0x1100, 0x110d, 0x10da, 0x111a, 0x0002, 0x0715, 0x0719, 0x0002, + 0x003c, 0x1150, 0x1133, 0x0002, 0x003c, 0x1191, 0x1170, 0x0003, + // Entry 2E1C0 - 2E1FF + 0x0721, 0x0724, 0x072b, 0x0001, 0x003c, 0x10d0, 0x0005, 0x003c, + 0x10ed, 0x1100, 0x110d, 0x10da, 0x111a, 0x0002, 0x072e, 0x0732, + 0x0002, 0x003c, 0x1150, 0x1133, 0x0002, 0x003c, 0x1191, 0x1170, + 0x0003, 0x073a, 0x073d, 0x0744, 0x0001, 0x003c, 0x10d0, 0x0005, + 0x003c, 0x10ed, 0x1100, 0x110d, 0x10da, 0x111a, 0x0002, 0x0747, + 0x074b, 0x0002, 0x003c, 0x1150, 0x1133, 0x0002, 0x003c, 0x1191, + 0x1170, 0x0001, 0x0751, 0x0001, 0x003c, 0x11b5, 0x0001, 0x0756, + 0x0001, 0x003c, 0x11b5, 0x0001, 0x075b, 0x0001, 0x003c, 0x11b5, + // Entry 2E200 - 2E23F + 0x0001, 0x0760, 0x0001, 0x003c, 0x11cf, 0x0001, 0x0765, 0x0001, + 0x003c, 0x11cf, 0x0001, 0x076a, 0x0001, 0x003c, 0x11cf, 0x0001, + 0x076f, 0x0001, 0x003c, 0x11e6, 0x0001, 0x0774, 0x0001, 0x003c, + 0x11e6, 0x0001, 0x0779, 0x0001, 0x003c, 0x11e6, 0x0003, 0x0000, + 0x0780, 0x0785, 0x0003, 0x003c, 0x120d, 0x1230, 0x124a, 0x0002, + 0x0788, 0x078c, 0x0002, 0x003c, 0x1299, 0x1273, 0x0002, 0x003c, + 0x12ef, 0x12c2, 0x0003, 0x0000, 0x0794, 0x0799, 0x0003, 0x003c, + 0x120d, 0x1230, 0x124a, 0x0002, 0x079c, 0x07a0, 0x0002, 0x003c, + // Entry 2E240 - 2E27F + 0x1299, 0x1273, 0x0002, 0x003c, 0x12ef, 0x12c2, 0x0003, 0x0000, + 0x07a8, 0x07ad, 0x0003, 0x003c, 0x120d, 0x1230, 0x124a, 0x0002, + 0x07b0, 0x07b4, 0x0002, 0x003c, 0x1299, 0x1273, 0x0002, 0x003c, + 0x12ef, 0x12c2, 0x0003, 0x0000, 0x07bc, 0x07c1, 0x0003, 0x003c, + 0x131f, 0x133f, 0x1356, 0x0002, 0x07c4, 0x07c8, 0x0002, 0x003c, + 0x139f, 0x137c, 0x0002, 0x003c, 0x13ef, 0x13c5, 0x0003, 0x0000, + 0x07d0, 0x07d5, 0x0003, 0x003c, 0x131f, 0x133f, 0x1356, 0x0002, + 0x07d8, 0x07dc, 0x0002, 0x003c, 0x139f, 0x137c, 0x0002, 0x003c, + // Entry 2E280 - 2E2BF + 0x13ef, 0x13c5, 0x0003, 0x0000, 0x07e4, 0x07e9, 0x0003, 0x003c, + 0x131f, 0x133f, 0x1356, 0x0002, 0x07ec, 0x07f0, 0x0002, 0x003c, + 0x139f, 0x137c, 0x0002, 0x003c, 0x13ef, 0x13c5, 0x0003, 0x0000, + 0x07f8, 0x07fd, 0x0003, 0x003c, 0x141c, 0x143f, 0x1459, 0x0002, + 0x0800, 0x0804, 0x0002, 0x003c, 0x14a8, 0x1482, 0x0002, 0x003c, + 0x14fe, 0x14d1, 0x0003, 0x0000, 0x080c, 0x0811, 0x0003, 0x003c, + 0x141c, 0x143f, 0x1459, 0x0002, 0x0814, 0x0818, 0x0002, 0x003c, + 0x14a8, 0x1482, 0x0002, 0x003c, 0x14fe, 0x14d1, 0x0003, 0x0000, + // Entry 2E2C0 - 2E2FF + 0x0820, 0x0825, 0x0003, 0x003c, 0x141c, 0x143f, 0x1459, 0x0002, + 0x0828, 0x082c, 0x0002, 0x003c, 0x14a8, 0x1482, 0x0002, 0x003c, + 0x14fe, 0x14d1, 0x0003, 0x0000, 0x0834, 0x0839, 0x0003, 0x003c, + 0x152e, 0x154e, 0x1565, 0x0002, 0x083c, 0x0840, 0x0002, 0x003c, + 0x15ae, 0x158b, 0x0002, 0x003c, 0x15fe, 0x15d4, 0x0003, 0x0000, + 0x0848, 0x084d, 0x0003, 0x003c, 0x152e, 0x154e, 0x1565, 0x0002, + 0x0850, 0x0854, 0x0002, 0x003c, 0x15ae, 0x158b, 0x0002, 0x003c, + 0x15fe, 0x15d4, 0x0003, 0x0000, 0x085c, 0x0861, 0x0003, 0x003c, + // Entry 2E300 - 2E33F + 0x152e, 0x154e, 0x1565, 0x0002, 0x0864, 0x0868, 0x0002, 0x003c, + 0x15ae, 0x158b, 0x0002, 0x003c, 0x15fe, 0x15d4, 0x0003, 0x0000, + 0x0870, 0x0875, 0x0003, 0x003c, 0x162b, 0x164e, 0x1668, 0x0002, + 0x0878, 0x087c, 0x0002, 0x003c, 0x16b7, 0x1691, 0x0002, 0x003c, + 0x170d, 0x16e0, 0x0003, 0x0000, 0x0884, 0x0889, 0x0003, 0x003c, + 0x162b, 0x164e, 0x1668, 0x0002, 0x088c, 0x0890, 0x0002, 0x003c, + 0x16b7, 0x1691, 0x0002, 0x003c, 0x170d, 0x16e0, 0x0003, 0x0000, + 0x0898, 0x089d, 0x0003, 0x003c, 0x162b, 0x164e, 0x1668, 0x0002, + // Entry 2E340 - 2E37F + 0x08a0, 0x08a4, 0x0002, 0x003c, 0x16b7, 0x1691, 0x0002, 0x003c, + 0x170d, 0x16e0, 0x0003, 0x0000, 0x08ac, 0x08b1, 0x0003, 0x003c, + 0x173d, 0x1763, 0x1780, 0x0002, 0x08b4, 0x08b8, 0x0002, 0x003c, + 0x17d5, 0x17ac, 0x0002, 0x003c, 0x1834, 0x1804, 0x0003, 0x0000, + 0x08c0, 0x08c5, 0x0003, 0x003c, 0x173d, 0x1763, 0x1780, 0x0002, + 0x08c8, 0x08cc, 0x0002, 0x003c, 0x17d5, 0x17ac, 0x0002, 0x003c, + 0x1834, 0x1834, 0x0003, 0x0000, 0x08d4, 0x08d9, 0x0003, 0x003c, + 0x173d, 0x1763, 0x1780, 0x0002, 0x08dc, 0x08e0, 0x0002, 0x003c, + // Entry 2E380 - 2E3BF + 0x17d5, 0x17ac, 0x0002, 0x003c, 0x1834, 0x1804, 0x0003, 0x0000, + 0x08e8, 0x08ed, 0x0003, 0x003c, 0x1867, 0x1887, 0x189e, 0x0002, + 0x08f0, 0x08f4, 0x0002, 0x003c, 0x18e7, 0x18c4, 0x0002, 0x003c, + 0x1937, 0x190d, 0x0003, 0x0000, 0x08fc, 0x0901, 0x0003, 0x003c, + 0x1867, 0x1887, 0x189e, 0x0002, 0x0904, 0x0908, 0x0002, 0x003c, + 0x18e7, 0x18c4, 0x0002, 0x003c, 0x1937, 0x190d, 0x0003, 0x0000, + 0x0910, 0x0915, 0x0003, 0x003c, 0x1867, 0x1887, 0x189e, 0x0002, + 0x0918, 0x091c, 0x0002, 0x003c, 0x18e7, 0x18c4, 0x0002, 0x003c, + // Entry 2E3C0 - 2E3FF + 0x1937, 0x190d, 0x0001, 0x0922, 0x0001, 0x003c, 0x1964, 0x0001, + 0x0927, 0x0001, 0x0007, 0x0892, 0x0001, 0x092c, 0x0001, 0x0007, + 0x0892, 0x0003, 0x0933, 0x0936, 0x093a, 0x0001, 0x003c, 0x1996, + 0x0002, 0x003c, 0xffff, 0x19a3, 0x0002, 0x093d, 0x0941, 0x0002, + 0x003c, 0x19d4, 0x19b4, 0x0002, 0x003c, 0x1a18, 0x19f7, 0x0003, + 0x0949, 0x0000, 0x094c, 0x0001, 0x003c, 0x1996, 0x0002, 0x094f, + 0x0953, 0x0002, 0x003c, 0x19d4, 0x19b4, 0x0002, 0x003c, 0x1a18, + 0x19f7, 0x0003, 0x095b, 0x0000, 0x095e, 0x0001, 0x003c, 0x1996, + // Entry 2E400 - 2E43F + 0x0002, 0x0961, 0x0965, 0x0002, 0x003c, 0x19d4, 0x19b4, 0x0002, + 0x003c, 0x1a18, 0x19f7, 0x0003, 0x096d, 0x0970, 0x0974, 0x0001, + 0x003c, 0x1a3f, 0x0002, 0x003c, 0xffff, 0x1a4f, 0x0002, 0x0977, + 0x097b, 0x0002, 0x003c, 0x1a86, 0x1a63, 0x0002, 0x003c, 0x1ad3, + 0x1aac, 0x0003, 0x0983, 0x0000, 0x0986, 0x0001, 0x003c, 0x1a3f, + 0x0002, 0x0989, 0x098d, 0x0002, 0x003c, 0x1a86, 0x1a63, 0x0002, + 0x003c, 0x1ad3, 0x1aac, 0x0003, 0x0995, 0x0000, 0x0998, 0x0001, + 0x003c, 0x1a3f, 0x0002, 0x099b, 0x099f, 0x0002, 0x003c, 0x1a86, + // Entry 2E440 - 2E47F + 0x1a63, 0x0002, 0x003c, 0x1ad3, 0x1aac, 0x0003, 0x09a7, 0x09aa, + 0x09ae, 0x0001, 0x003c, 0x1afd, 0x0002, 0x003c, 0xffff, 0x1b13, + 0x0002, 0x09b1, 0x09b5, 0x0002, 0x003c, 0x1b46, 0x1b1a, 0x0002, + 0x003c, 0x1b9f, 0x1b75, 0x0003, 0x09bd, 0x0000, 0x09c0, 0x0001, + 0x003c, 0x1afd, 0x0002, 0x09c3, 0x09c7, 0x0002, 0x003c, 0x1b46, + 0x1b1a, 0x0002, 0x003c, 0x1b9f, 0x1b75, 0x0003, 0x09cf, 0x0000, + 0x09d2, 0x0001, 0x003c, 0x1afd, 0x0002, 0x09d5, 0x09d9, 0x0002, + 0x003c, 0x1b46, 0x1b1a, 0x0002, 0x003c, 0x1b9f, 0x1b75, 0x0001, + // Entry 2E480 - 2E4BF + 0x09df, 0x0001, 0x003c, 0x1bcf, 0x0001, 0x09e4, 0x0001, 0x003c, + 0x1be3, 0x0001, 0x09e9, 0x0001, 0x003c, 0x1be3, 0x0004, 0x09f1, + 0x09f6, 0x09fb, 0x0a0a, 0x0003, 0x0000, 0x1dc7, 0x2b8e, 0x2b95, + 0x0003, 0x003c, 0x1bed, 0x1bfb, 0x1c16, 0x0002, 0x0000, 0x09fe, + 0x0003, 0x0000, 0x0a05, 0x0a02, 0x0001, 0x003c, 0x1c3d, 0x0003, + 0x003c, 0xffff, 0x1c79, 0x1caf, 0x0002, 0x0bf1, 0x0a0d, 0x0003, + 0x0a11, 0x0b51, 0x0ab1, 0x009e, 0x003c, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1e28, 0x1eed, 0x1fff, 0x208b, 0x2180, 0x226f, 0x2355, + // Entry 2E4C0 - 2E4FF + 0x2456, 0x24dc, 0x2656, 0x26e5, 0x278c, 0x286c, 0x2901, 0x29a2, + 0x2a8b, 0x2bb0, 0x2c90, 0x2d79, 0x2e20, 0x2ea3, 0xffff, 0xffff, + 0x2f8a, 0xffff, 0x306d, 0xffff, 0x3141, 0x31b5, 0x3226, 0x3291, + 0xffff, 0xffff, 0x33b9, 0x344e, 0x351d, 0xffff, 0xffff, 0xffff, + 0x361e, 0xffff, 0x36f7, 0x37bc, 0xffff, 0x38d9, 0x39b0, 0x3abd, + 0xffff, 0xffff, 0xffff, 0xffff, 0x3c12, 0xffff, 0xffff, 0x3d2b, + 0x3e26, 0xffff, 0xffff, 0x3fad, 0x407e, 0x4128, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x42d3, 0x4347, 0x43f7, 0x447d, + // Entry 2E500 - 2E53F + 0x44f1, 0xffff, 0xffff, 0x46bb, 0xffff, 0x475b, 0xffff, 0xffff, + 0x48b4, 0xffff, 0x4a1a, 0xffff, 0xffff, 0xffff, 0xffff, 0x4b48, + 0xffff, 0x4bf7, 0x4cbf, 0x4da2, 0x4e55, 0xffff, 0xffff, 0xffff, + 0x4f32, 0x500c, 0x50c8, 0xffff, 0xffff, 0x51f2, 0x5333, 0x5407, + 0x5493, 0xffff, 0xffff, 0x5588, 0x5614, 0x5685, 0xffff, 0x5753, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x59dd, 0x5a96, 0x5afe, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x5ca0, + 0xffff, 0xffff, 0x5d57, 0xffff, 0x5de8, 0xffff, 0x5eeb, 0x5f77, + // Entry 2E540 - 2E57F + 0x6039, 0xffff, 0x60dc, 0x61a7, 0xffff, 0xffff, 0xffff, 0x62f6, + 0x6394, 0xffff, 0xffff, 0x1ce2, 0x1f73, 0x2550, 0x25ca, 0xffff, + 0xffff, 0x495e, 0x58f3, 0x009e, 0x003c, 0x1d53, 0x1d7f, 0x1dac, + 0x1ddc, 0x1e5b, 0x1f0d, 0x201f, 0x20ce, 0x21c3, 0x22af, 0x239e, + 0x2476, 0x24f6, 0x2679, 0x270e, 0x27c8, 0x288f, 0x292a, 0x29e1, + 0x2ae0, 0x2bec, 0x2ccf, 0x2da2, 0x2e3d, 0x2ecc, 0x2f4a, 0x2f67, + 0x2fb6, 0x3034, 0x3094, 0x310e, 0x315b, 0x31cc, 0x323d, 0x32c0, + 0x3350, 0x3386, 0x33dc, 0x347b, 0x353a, 0x359a, 0x35b7, 0x35f1, + // Entry 2E580 - 2E5BF + 0x364b, 0x36d1, 0x372a, 0x37f2, 0x388a, 0x3912, 0x39fb, 0x3ad4, + 0x3b2e, 0x3b5e, 0x3bc0, 0x3be9, 0x3c35, 0x3ca7, 0x3ce3, 0x3d70, + 0x3e6e, 0x3f60, 0x3f93, 0x3fe6, 0x40a8, 0x4142, 0x41a2, 0x41d8, + 0x4208, 0x422b, 0x4261, 0x429a, 0x42ed, 0x4373, 0x4417, 0x4497, + 0x4554, 0x4646, 0x467f, 0x46db, 0x4741, 0x4799, 0x4841, 0x4887, + 0x48de, 0x49d8, 0x4a37, 0x4a9d, 0x4abd, 0x4ae6, 0x4b12, 0x4b68, + 0x4bd4, 0x4c2d, 0x4cfe, 0x4dcf, 0x4e72, 0x4ed8, 0x4f01, 0x4f18, + 0x4f6b, 0x503e, 0x5106, 0x51a8, 0x51bf, 0x5238, 0x536b, 0x5427, + // Entry 2E5C0 - 2E5FF + 0x54b9, 0x5531, 0x554e, 0x55a8, 0x562b, 0x56a8, 0x571a, 0x57a9, + 0x587b, 0x58a7, 0x58c4, 0x599a, 0x59c0, 0x5a0c, 0x5aaa, 0x5b18, + 0x5b78, 0x5b9b, 0x5bda, 0x5c0d, 0x5c43, 0x5c66, 0x5c83, 0x5cb7, + 0x5d0b, 0x5d34, 0x5d71, 0x5dd1, 0x5e26, 0x5ece, 0x5f0b, 0x5fa9, + 0x6053, 0x60b3, 0x6111, 0x61d6, 0x6260, 0x6283, 0x62aa, 0x631c, + 0x63c9, 0x3f2a, 0x52ed, 0x1cf9, 0x1f93, 0x256a, 0x25ea, 0xffff, + 0x4870, 0x4978, 0x591c, 0x009e, 0x003c, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1ea7, 0x1f43, 0x2058, 0x212a, 0x221f, 0x2308, 0x2400, + // Entry 2E600 - 2E63F + 0x24af, 0x2529, 0x26b5, 0x2750, 0x281d, 0x28cb, 0x296c, 0x2a3c, + 0x2b4e, 0x2c44, 0x2d2a, 0x2de4, 0x2e73, 0x2f0e, 0xffff, 0xffff, + 0x2ff8, 0xffff, 0x30d4, 0xffff, 0x318e, 0x31fc, 0x326d, 0x330e, + 0xffff, 0xffff, 0x3418, 0x34c1, 0x3570, 0xffff, 0xffff, 0xffff, + 0x3691, 0xffff, 0x3776, 0x3841, 0xffff, 0x3964, 0x3a5f, 0x3b04, + 0xffff, 0xffff, 0xffff, 0xffff, 0x3c71, 0xffff, 0xffff, 0x3dce, + 0x3ecf, 0xffff, 0xffff, 0x4038, 0x40eb, 0x4175, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x4320, 0x43b8, 0x4450, 0x44ca, + // Entry 2E640 - 2E67F + 0x45d0, 0xffff, 0xffff, 0x4714, 0xffff, 0x47f0, 0xffff, 0xffff, + 0x4921, 0xffff, 0x4a6d, 0xffff, 0xffff, 0xffff, 0xffff, 0x4ba1, + 0xffff, 0x4c7c, 0x4d56, 0x4e15, 0x4ea8, 0xffff, 0xffff, 0xffff, + 0x4fbd, 0x5089, 0x515d, 0xffff, 0xffff, 0x5297, 0x53bc, 0x5460, + 0x54f8, 0xffff, 0xffff, 0x55e1, 0x565b, 0x56e4, 0xffff, 0x5818, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x5a54, 0x5ad7, 0x5b4b, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x5ce7, + 0xffff, 0xffff, 0x5da4, 0xffff, 0x5e7d, 0xffff, 0x5f44, 0x5ff4, + // Entry 2E680 - 2E6BF + 0x6086, 0xffff, 0x615f, 0x621e, 0xffff, 0xffff, 0xffff, 0x635b, + 0x6417, 0xffff, 0xffff, 0x1d29, 0x1fcc, 0x259d, 0x2623, 0xffff, + 0xffff, 0x49ab, 0x595e, 0x0003, 0x0000, 0x0000, 0x0bf5, 0x0042, + 0x000b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 2E6C0 - 2E6FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0000, 0x0003, 0x0004, 0x0730, 0x0b09, 0x0012, + 0x0017, 0x0030, 0x00fe, 0x014b, 0x0290, 0x0000, 0x02dd, 0x0308, + 0x0538, 0x0000, 0x059c, 0x0000, 0x0000, 0x0000, 0x0000, 0x05e1, + 0x06d9, 0x0722, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x001d, + 0x0003, 0x0026, 0x002b, 0x0021, 0x0001, 0x0023, 0x0001, 0x003d, + // Entry 2E700 - 2E73F + 0x0000, 0x0001, 0x0028, 0x0001, 0x003d, 0x0000, 0x0001, 0x002d, + 0x0001, 0x0000, 0x0000, 0x000a, 0x003b, 0x0000, 0x0000, 0x0000, + 0x0000, 0x00ed, 0x0000, 0x0000, 0x0072, 0x0085, 0x0002, 0x003e, + 0x0060, 0x0003, 0x0042, 0x0000, 0x0051, 0x000d, 0x003d, 0xffff, + 0x0007, 0x000c, 0x0011, 0x0016, 0x001b, 0x0020, 0x0025, 0x002a, + 0x002f, 0x0034, 0x003a, 0x0040, 0x000d, 0x003d, 0xffff, 0x0007, + 0x000c, 0x0011, 0x0016, 0x001b, 0x0020, 0x0025, 0x002a, 0x002f, + 0x0034, 0x003a, 0x0040, 0x0002, 0x0000, 0x0063, 0x000d, 0x0000, + // Entry 2E740 - 2E77F + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x2215, 0x2b8b, 0x2426, 0x0003, 0x0076, 0x0081, + 0x007b, 0x0003, 0x003d, 0xffff, 0xffff, 0x0046, 0x0004, 0x003d, + 0xffff, 0xffff, 0xffff, 0x0046, 0x0002, 0x003d, 0xffff, 0x0046, + 0x0005, 0x0000, 0x0000, 0x0000, 0x008b, 0x00aa, 0x0001, 0x008d, + 0x0001, 0x008f, 0x0019, 0x003d, 0xffff, 0x004d, 0x0054, 0x005b, + 0x0062, 0x0069, 0x0070, 0x0077, 0x007e, 0x0085, 0x008c, 0x0093, + 0x009a, 0x00a1, 0x00a8, 0x00af, 0x00b6, 0x00bd, 0x00c4, 0x00cb, + // Entry 2E780 - 2E7BF + 0x00d2, 0x00d9, 0x00e0, 0x00e7, 0x00ee, 0x0001, 0x00ac, 0x0001, + 0x00ae, 0x003d, 0x003d, 0xffff, 0x00f5, 0x00fc, 0x0103, 0x010a, + 0x0111, 0x0118, 0x011f, 0x0126, 0x012d, 0x0134, 0x013b, 0x0142, + 0x0149, 0x0150, 0x0157, 0x015e, 0x0165, 0x016c, 0x0173, 0x017a, + 0x0181, 0x0188, 0x018f, 0x0196, 0x019d, 0x01a4, 0x01ab, 0x01b2, + 0x01b9, 0x01c0, 0x01c7, 0x01ce, 0x01d5, 0x01dc, 0x01e3, 0x01ea, + 0x01f1, 0x01f8, 0x01ff, 0x0206, 0x020d, 0x0214, 0x021b, 0x0222, + 0x0229, 0x0230, 0x0237, 0x023e, 0x0245, 0x024c, 0x0253, 0x025a, + // Entry 2E7C0 - 2E7FF + 0x0261, 0x0268, 0x026f, 0x0276, 0x027d, 0x0284, 0x028b, 0x0292, + 0x0004, 0x00fb, 0x00f5, 0x00f2, 0x00f8, 0x0001, 0x003d, 0x0299, + 0x0001, 0x003d, 0x02ac, 0x0001, 0x003d, 0x02ba, 0x0001, 0x003d, + 0x02ba, 0x0001, 0x0100, 0x0002, 0x0103, 0x0127, 0x0003, 0x0107, + 0x0000, 0x0117, 0x000e, 0x003d, 0xffff, 0x02c3, 0x02ca, 0x02d4, + 0x02de, 0x02eb, 0x02f5, 0x02ff, 0x030c, 0x031c, 0x0326, 0x0333, + 0x033d, 0x0347, 0x000e, 0x003d, 0xffff, 0x02c3, 0x02ca, 0x02d4, + 0x02de, 0x02eb, 0x02f5, 0x02ff, 0x030c, 0x031c, 0x0326, 0x0333, + // Entry 2E800 - 2E83F + 0x033d, 0x0347, 0x0003, 0x012b, 0x0000, 0x013b, 0x000e, 0x003d, + 0xffff, 0x02c3, 0x02ca, 0x02d4, 0x02de, 0x02eb, 0x02f5, 0x02ff, + 0x030c, 0x031c, 0x0326, 0x0333, 0x033d, 0x0347, 0x000e, 0x003d, + 0xffff, 0x02c3, 0x02ca, 0x02d4, 0x02de, 0x02eb, 0x02f5, 0x02ff, + 0x030c, 0x031c, 0x0326, 0x0333, 0x033d, 0x0347, 0x000a, 0x0156, + 0x0000, 0x0000, 0x0000, 0x0000, 0x027f, 0x0000, 0x0000, 0x01bb, + 0x01ce, 0x0002, 0x0159, 0x018a, 0x0003, 0x015d, 0x016c, 0x017b, + 0x000d, 0x003d, 0xffff, 0x0007, 0x000c, 0x0011, 0x0016, 0x001b, + // Entry 2E840 - 2E87F + 0x0020, 0x0025, 0x002a, 0x002f, 0x0034, 0x003a, 0x0040, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x2215, 0x2b8b, 0x2426, 0x000d, 0x003d, + 0xffff, 0x0007, 0x000c, 0x0011, 0x0016, 0x001b, 0x0020, 0x0025, + 0x002a, 0x002f, 0x0034, 0x003a, 0x0040, 0x0003, 0x018e, 0x019d, + 0x01ac, 0x000d, 0x003d, 0xffff, 0x0007, 0x000c, 0x0011, 0x0016, + 0x001b, 0x0020, 0x0025, 0x002a, 0x002f, 0x0034, 0x003a, 0x0040, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + // Entry 2E880 - 2E8BF + 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2b8b, 0x2426, 0x000d, + 0x003d, 0xffff, 0x0007, 0x000c, 0x0011, 0x0016, 0x001b, 0x0020, + 0x0025, 0x002a, 0x002f, 0x0034, 0x003a, 0x0040, 0x0003, 0x01bf, + 0x01ca, 0x01c4, 0x0003, 0x003d, 0xffff, 0xffff, 0x0046, 0x0004, + 0x003d, 0xffff, 0xffff, 0xffff, 0x0046, 0x0002, 0x003d, 0xffff, + 0x0046, 0x0006, 0x01d5, 0x0000, 0x0000, 0x01f9, 0x0218, 0x025b, + 0x0001, 0x01d7, 0x0003, 0x01db, 0x0000, 0x01ea, 0x000d, 0x003d, + 0xffff, 0x034e, 0x0352, 0x0356, 0x035a, 0x035e, 0x0362, 0x0366, + // Entry 2E8C0 - 2E8FF + 0x036a, 0x036e, 0x0372, 0x0376, 0x037a, 0x000d, 0x003d, 0xffff, + 0x034e, 0x0352, 0x0356, 0x035a, 0x035e, 0x0362, 0x0366, 0x036a, + 0x036e, 0x0372, 0x0376, 0x037a, 0x0001, 0x01fb, 0x0001, 0x01fd, + 0x0019, 0x003d, 0xffff, 0x004d, 0x0054, 0x005b, 0x0062, 0x0069, + 0x0070, 0x0077, 0x007e, 0x0085, 0x008c, 0x0093, 0x009a, 0x00a1, + 0x00a8, 0x00af, 0x00b6, 0x00bd, 0x00c4, 0x00cb, 0x00d2, 0x00d9, + 0x00e0, 0x00e7, 0x00ee, 0x0001, 0x021a, 0x0001, 0x021c, 0x003d, + 0x003d, 0xffff, 0x00f5, 0x00fc, 0x0103, 0x010a, 0x0111, 0x0118, + // Entry 2E900 - 2E93F + 0x011f, 0x0126, 0x012d, 0x0134, 0x013b, 0x0142, 0x0149, 0x0150, + 0x0157, 0x015e, 0x0165, 0x016c, 0x0173, 0x017a, 0x0181, 0x0188, + 0x018f, 0x0196, 0x019d, 0x01a4, 0x01ab, 0x01b2, 0x01b9, 0x01c0, + 0x01c7, 0x01ce, 0x01d5, 0x01dc, 0x01e3, 0x01ea, 0x01f1, 0x01f8, + 0x01ff, 0x0206, 0x020d, 0x0214, 0x021b, 0x0222, 0x0229, 0x0230, + 0x0237, 0x023e, 0x0245, 0x024c, 0x0253, 0x025a, 0x0261, 0x0268, + 0x026f, 0x0276, 0x027d, 0x0284, 0x028b, 0x0292, 0x0001, 0x025d, + 0x0003, 0x0261, 0x0000, 0x0270, 0x000d, 0x003d, 0xffff, 0x034e, + // Entry 2E940 - 2E97F + 0x0352, 0x0356, 0x035a, 0x035e, 0x0362, 0x0366, 0x036a, 0x036e, + 0x0372, 0x0376, 0x037a, 0x000d, 0x003d, 0xffff, 0x034e, 0x0352, + 0x0356, 0x035a, 0x035e, 0x0362, 0x0366, 0x036a, 0x036e, 0x0372, + 0x0376, 0x037a, 0x0004, 0x028d, 0x0287, 0x0284, 0x028a, 0x0001, + 0x003d, 0x0299, 0x0001, 0x003d, 0x02ac, 0x0001, 0x003d, 0x02ba, + 0x0001, 0x003d, 0x02ba, 0x0001, 0x0292, 0x0002, 0x0295, 0x02b9, + 0x0003, 0x0299, 0x0000, 0x02a9, 0x000e, 0x003d, 0xffff, 0x037e, + 0x038b, 0x0395, 0x039f, 0x03ac, 0x03b3, 0x03c0, 0x03cd, 0x03da, + // Entry 2E980 - 2E9BF + 0x03e4, 0x03eb, 0x03f2, 0x03fc, 0x000e, 0x003d, 0xffff, 0x037e, + 0x038b, 0x0395, 0x039f, 0x03ac, 0x03b3, 0x03c0, 0x03cd, 0x03da, + 0x03e4, 0x03eb, 0x03f2, 0x03fc, 0x0003, 0x02bd, 0x0000, 0x02cd, + 0x000e, 0x003d, 0xffff, 0x037e, 0x038b, 0x0395, 0x039f, 0x03ac, + 0x03b3, 0x03c0, 0x03cd, 0x03da, 0x03e4, 0x03eb, 0x03f2, 0x03fc, + 0x000e, 0x003d, 0xffff, 0x037e, 0x038b, 0x0395, 0x039f, 0x03ac, + 0x03b3, 0x03c0, 0x03cd, 0x03da, 0x03e4, 0x03eb, 0x03f2, 0x03fc, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02e6, 0x0000, + // Entry 2E9C0 - 2E9FF + 0x02f7, 0x0004, 0x02f4, 0x02ee, 0x02eb, 0x02f1, 0x0001, 0x003d, + 0x0406, 0x0001, 0x003d, 0x041c, 0x0001, 0x003d, 0x042d, 0x0001, + 0x003d, 0x042d, 0x0004, 0x0305, 0x02ff, 0x02fc, 0x0302, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0008, 0x0311, 0x0376, 0x03cd, 0x0402, + 0x04eb, 0x0505, 0x0516, 0x0527, 0x0002, 0x0314, 0x0345, 0x0003, + 0x0318, 0x0327, 0x0336, 0x000d, 0x003d, 0xffff, 0x0007, 0x000c, + 0x0011, 0x0016, 0x001b, 0x0020, 0x0025, 0x002a, 0x002f, 0x0034, + // Entry 2EA00 - 2EA3F + 0x003a, 0x0040, 0x000d, 0x003d, 0xffff, 0x0007, 0x000c, 0x0011, + 0x0016, 0x001b, 0x0020, 0x0025, 0x002a, 0x002f, 0x0034, 0x003a, + 0x0040, 0x000d, 0x003d, 0xffff, 0x0007, 0x000c, 0x0011, 0x0016, + 0x001b, 0x0020, 0x0025, 0x002a, 0x002f, 0x0034, 0x003a, 0x0040, + 0x0003, 0x0349, 0x0358, 0x0367, 0x000d, 0x003d, 0xffff, 0x0007, + 0x000c, 0x0011, 0x0016, 0x001b, 0x0020, 0x0025, 0x002a, 0x002f, + 0x0034, 0x003a, 0x0040, 0x000d, 0x003d, 0xffff, 0x0007, 0x000c, + 0x0011, 0x0016, 0x001b, 0x0020, 0x0025, 0x002a, 0x002f, 0x0034, + // Entry 2EA40 - 2EA7F + 0x003a, 0x0040, 0x000d, 0x003d, 0xffff, 0x0007, 0x000c, 0x0011, + 0x0016, 0x001b, 0x0020, 0x0025, 0x002a, 0x002f, 0x0034, 0x003a, + 0x0040, 0x0002, 0x0379, 0x03a3, 0x0005, 0x037f, 0x0388, 0x039a, + 0x0000, 0x0391, 0x0007, 0x003d, 0x0438, 0x043c, 0x0440, 0x0444, + 0x0448, 0x044c, 0x0450, 0x0007, 0x003d, 0x0438, 0x043c, 0x0440, + 0x0444, 0x0448, 0x044c, 0x0450, 0x0007, 0x003d, 0x0438, 0x043c, + 0x0440, 0x0444, 0x0448, 0x044c, 0x0450, 0x0007, 0x003d, 0x0454, + 0x045e, 0x0468, 0x0472, 0x047c, 0x0486, 0x0490, 0x0005, 0x03a9, + // Entry 2EA80 - 2EABF + 0x03b2, 0x03c4, 0x0000, 0x03bb, 0x0007, 0x003d, 0x0438, 0x043c, + 0x0440, 0x0444, 0x0448, 0x044c, 0x0450, 0x0007, 0x003d, 0x0438, + 0x043c, 0x0440, 0x0444, 0x0448, 0x044c, 0x0450, 0x0007, 0x003d, + 0x0438, 0x043c, 0x0440, 0x0444, 0x0448, 0x044c, 0x0450, 0x0007, + 0x003d, 0x0454, 0x045e, 0x0468, 0x0472, 0x047c, 0x0486, 0x0490, + 0x0002, 0x03d0, 0x03e9, 0x0003, 0x03d4, 0x03db, 0x03e2, 0x0005, + 0x003d, 0xffff, 0x049a, 0x04a2, 0x04aa, 0x04b2, 0x0005, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x003d, 0xffff, + // Entry 2EAC0 - 2EAFF + 0x04ba, 0x04c8, 0x04d6, 0x04e4, 0x0003, 0x03ed, 0x03f4, 0x03fb, + 0x0005, 0x003d, 0xffff, 0x049a, 0x04a2, 0x04aa, 0x04b2, 0x0005, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x003d, + 0xffff, 0x04ba, 0x04c8, 0x04d6, 0x04e4, 0x0002, 0x0405, 0x0478, + 0x0003, 0x0409, 0x042e, 0x0453, 0x0009, 0x0416, 0x041c, 0x0413, + 0x041f, 0x0425, 0x0428, 0x042b, 0x0419, 0x0422, 0x0001, 0x003d, + 0x04f2, 0x0001, 0x0000, 0x04ef, 0x0001, 0x003d, 0x04f9, 0x0001, + 0x0000, 0x04f2, 0x0001, 0x003d, 0x0500, 0x0001, 0x003d, 0x0507, + // Entry 2EB00 - 2EB3F + 0x0001, 0x003d, 0x050e, 0x0001, 0x003d, 0x0515, 0x0001, 0x003d, + 0x051c, 0x0009, 0x043b, 0x0441, 0x0438, 0x0444, 0x044a, 0x044d, + 0x0450, 0x043e, 0x0447, 0x0001, 0x003d, 0x04f2, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x003d, 0x04f9, 0x0001, 0x0000, 0x04f2, 0x0001, + 0x003d, 0x0500, 0x0001, 0x003d, 0x0507, 0x0001, 0x003d, 0x050e, + 0x0001, 0x003d, 0x0515, 0x0001, 0x003d, 0x051c, 0x0009, 0x0460, + 0x0466, 0x045d, 0x0469, 0x046f, 0x0472, 0x0475, 0x0463, 0x046c, + 0x0001, 0x003d, 0x04f2, 0x0001, 0x003d, 0x0507, 0x0001, 0x003d, + // Entry 2EB40 - 2EB7F + 0x04f9, 0x0001, 0x003d, 0x050e, 0x0001, 0x003d, 0x0500, 0x0001, + 0x003d, 0x0507, 0x0001, 0x003d, 0x050e, 0x0001, 0x003d, 0x0515, + 0x0001, 0x003d, 0x051c, 0x0003, 0x047c, 0x04a1, 0x04c6, 0x0009, + 0x0489, 0x048f, 0x0486, 0x0492, 0x0498, 0x049b, 0x049e, 0x048c, + 0x0495, 0x0001, 0x003d, 0x04f2, 0x0001, 0x0000, 0x04ef, 0x0001, + 0x003d, 0x04f9, 0x0001, 0x0000, 0x04f2, 0x0001, 0x003d, 0x0500, + 0x0001, 0x003d, 0x0507, 0x0001, 0x003d, 0x050e, 0x0001, 0x003d, + 0x0515, 0x0001, 0x003d, 0x051c, 0x0009, 0x04ae, 0x04b4, 0x04ab, + // Entry 2EB80 - 2EBBF + 0x04b7, 0x04bd, 0x04c0, 0x04c3, 0x04b1, 0x04ba, 0x0001, 0x003d, + 0x04f2, 0x0001, 0x0000, 0x04ef, 0x0001, 0x003d, 0x04f9, 0x0001, + 0x0000, 0x04f2, 0x0001, 0x003d, 0x0500, 0x0001, 0x003d, 0x0507, + 0x0001, 0x003d, 0x050e, 0x0001, 0x003d, 0x0515, 0x0001, 0x003d, + 0x051c, 0x0009, 0x04d3, 0x04d9, 0x04d0, 0x04dc, 0x04e2, 0x04e5, + 0x04e8, 0x04d6, 0x04df, 0x0001, 0x003d, 0x04f2, 0x0001, 0x003d, + 0x0507, 0x0001, 0x003d, 0x04f9, 0x0001, 0x003d, 0x050e, 0x0001, + 0x003d, 0x0500, 0x0001, 0x003d, 0x0507, 0x0001, 0x003d, 0x050e, + // Entry 2EBC0 - 2EBFF + 0x0001, 0x003d, 0x0515, 0x0001, 0x003d, 0x051c, 0x0003, 0x04fa, + 0x0000, 0x04ef, 0x0002, 0x04f2, 0x04f6, 0x0002, 0x003d, 0x0520, + 0x052a, 0x0002, 0x0000, 0x04f5, 0x2701, 0x0002, 0x04fd, 0x0501, + 0x0002, 0x0009, 0x0078, 0x5780, 0x0002, 0x0000, 0x04f5, 0x2701, + 0x0004, 0x0513, 0x050d, 0x050a, 0x0510, 0x0001, 0x003d, 0x0531, + 0x0001, 0x003d, 0x0545, 0x0001, 0x003d, 0x02ba, 0x0001, 0x003d, + 0x0554, 0x0004, 0x0524, 0x051e, 0x051b, 0x0521, 0x0001, 0x003d, + 0x055e, 0x0001, 0x003d, 0x0574, 0x0001, 0x003d, 0x0587, 0x0001, + // Entry 2EC00 - 2EC3F + 0x003d, 0x0591, 0x0004, 0x0535, 0x052f, 0x052c, 0x0532, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0005, 0x053e, 0x0000, 0x0000, 0x0000, + 0x0589, 0x0002, 0x0541, 0x0565, 0x0003, 0x0545, 0x0000, 0x0555, + 0x000e, 0x003d, 0x05d4, 0x0598, 0x05a2, 0x05ac, 0x05b6, 0x05bd, + 0x05c4, 0x05cd, 0x05dd, 0x05e4, 0x05ee, 0x05f5, 0x05ff, 0x0603, + 0x000e, 0x003d, 0x05d4, 0x0598, 0x05a2, 0x05ac, 0x05b6, 0x05bd, + 0x05c4, 0x05cd, 0x05dd, 0x05e4, 0x05ee, 0x05f5, 0x05ff, 0x0603, + // Entry 2EC40 - 2EC7F + 0x0003, 0x0569, 0x0000, 0x0579, 0x000e, 0x003d, 0x065b, 0x060a, + 0x0617, 0x0624, 0x0631, 0x063b, 0x0645, 0x0651, 0x0667, 0x0671, + 0x067e, 0x0688, 0x0695, 0x069c, 0x000e, 0x003d, 0x065b, 0x060a, + 0x0617, 0x0624, 0x0631, 0x063b, 0x0645, 0x0651, 0x0667, 0x0671, + 0x067e, 0x0688, 0x0695, 0x069c, 0x0003, 0x0592, 0x0597, 0x058d, + 0x0001, 0x058f, 0x0001, 0x003d, 0x06a6, 0x0001, 0x0594, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x0599, 0x0001, 0x0000, 0x04ef, 0x0008, + 0x05a5, 0x0000, 0x0000, 0x0000, 0x05ce, 0x0000, 0x0000, 0x9006, + // Entry 2EC80 - 2ECBF + 0x0002, 0x05a8, 0x05bb, 0x0003, 0x0000, 0x0000, 0x05ac, 0x000d, + 0x003d, 0xffff, 0x06b0, 0x06ba, 0x06c4, 0x06d6, 0x06e8, 0x06fd, + 0x0712, 0x0719, 0x0723, 0x072d, 0x0734, 0x0743, 0x0003, 0x0000, + 0x0000, 0x05bf, 0x000d, 0x003d, 0xffff, 0x06b0, 0x06ba, 0x06c4, + 0x06d6, 0x06e8, 0x06fd, 0x0712, 0x0719, 0x0723, 0x072d, 0x0734, + 0x0743, 0x0003, 0x05d7, 0x05dc, 0x05d2, 0x0001, 0x05d4, 0x0001, + 0x003d, 0x0752, 0x0001, 0x05d9, 0x0001, 0x0000, 0x06c8, 0x0001, + 0x05de, 0x0001, 0x0000, 0x06c8, 0x0005, 0x0000, 0x0000, 0x0000, + // Entry 2ECC0 - 2ECFF + 0x0000, 0x05e7, 0x0001, 0x05e9, 0x0001, 0x05eb, 0x00ec, 0x003d, + 0x075f, 0x0775, 0x078b, 0x07a1, 0x07b4, 0x07ca, 0x07e0, 0x07f3, + 0x0809, 0x081c, 0x082f, 0x0842, 0x085b, 0x0874, 0x088d, 0x08a6, + 0x08c2, 0x08d5, 0x08e8, 0x08fe, 0x0914, 0x0927, 0x093a, 0x094d, + 0x0960, 0x0973, 0x0989, 0x099c, 0x09af, 0x09c2, 0x09d5, 0x09e8, + 0x09fe, 0x0a11, 0x0a24, 0x0a3a, 0x0a4d, 0x0a63, 0x0a79, 0x0a8c, + 0x0a9f, 0x0ab2, 0x0ac8, 0x0adb, 0x0aee, 0x0b01, 0x0b17, 0x0b2a, + 0x0b40, 0x0b56, 0x0b6c, 0x0b82, 0x0b96, 0x0bab, 0x0bc0, 0x0bd5, + // Entry 2ED00 - 2ED3F + 0x0bea, 0x0bff, 0x0c14, 0x0c2c, 0x0c41, 0x0c59, 0x0c71, 0x0c86, + 0x0c9e, 0x0cb6, 0x0ccb, 0x0ce0, 0x0cf8, 0x0d10, 0x0d28, 0x0d3d, + 0x0d52, 0x0d6a, 0x0d82, 0x0d97, 0x0dac, 0x0dc1, 0x0dd6, 0x0dee, + 0x0e06, 0x0e1e, 0x0e33, 0x0e48, 0x0e60, 0x0e75, 0x0e8a, 0x0e9f, + 0x0eb7, 0x0ecc, 0x0ee1, 0x0ef6, 0x0f0e, 0x0f23, 0x0f38, 0x0f50, + 0x0f6b, 0x0f80, 0x0f95, 0x0fad, 0x0fc2, 0x0fd7, 0x0fec, 0x1001, + 0x1016, 0x102b, 0x1043, 0x105b, 0x1070, 0x1085, 0x109a, 0x10af, + 0x10c4, 0x10dc, 0x10f1, 0x1109, 0x111e, 0x1133, 0x1148, 0x115d, + // Entry 2ED40 - 2ED7F + 0x1175, 0x118d, 0x11a2, 0x11ba, 0x11d2, 0x11ea, 0x1202, 0x121a, + 0x122f, 0x1244, 0x1259, 0x126e, 0x1283, 0x1298, 0x12ad, 0x12c2, + 0x12d7, 0x12ec, 0x1304, 0x1319, 0x132e, 0x1343, 0x135b, 0x1370, + 0x1385, 0x139a, 0x13b2, 0x13c7, 0x13dc, 0x13f1, 0x1406, 0x141b, + 0x1430, 0x1445, 0x145d, 0x1475, 0x148a, 0x149f, 0x14b4, 0x14cc, + 0x14e4, 0x14fc, 0x1511, 0x1526, 0x153e, 0x1553, 0x1568, 0x1583, + 0x1598, 0x15ad, 0x15c8, 0x15e0, 0x15f5, 0x160d, 0x1625, 0x163a, + 0x1652, 0x166a, 0x167f, 0x1697, 0x16ac, 0x16c1, 0x16d6, 0x16ee, + // Entry 2ED80 - 2EDBF + 0x1704, 0x171c, 0x1734, 0x1749, 0x1761, 0x177c, 0x1794, 0x17a9, + 0x17be, 0x17d9, 0x17ee, 0x1803, 0x181b, 0x1833, 0x1848, 0x1860, + 0x1875, 0x188d, 0x18a2, 0x18bd, 0x18d2, 0x18e7, 0x18fc, 0x1911, + 0x1926, 0x193e, 0x1956, 0x196e, 0x1983, 0x1998, 0x19ad, 0x19c2, + 0x19d7, 0x19ef, 0x1a07, 0x1a1f, 0x1a37, 0x1a4f, 0x1a64, 0x1a79, + 0x1a91, 0x1aa6, 0x1abb, 0x1ad3, 0x1aeb, 0x1b00, 0x1b15, 0x1b2a, + 0x1b42, 0x1b4c, 0x1b56, 0x1b5d, 0x0001, 0x06db, 0x0002, 0x06de, + 0x0700, 0x0003, 0x06e2, 0x0000, 0x06f1, 0x000d, 0x003d, 0xffff, + // Entry 2EDC0 - 2EDFF + 0x1b6a, 0x1b77, 0x1b8d, 0x1b9a, 0x1ba1, 0x1bae, 0x1bbe, 0x1bc8, + 0x1bcf, 0x1bd9, 0x1be0, 0x1bea, 0x000d, 0x003d, 0xffff, 0x1b6a, + 0x1b77, 0x1b8d, 0x1b9a, 0x1ba1, 0x1bae, 0x1bbe, 0x1bc8, 0x1bcf, + 0x1bd9, 0x1be0, 0x1bea, 0x0003, 0x0704, 0x0000, 0x0713, 0x000d, + 0x003d, 0xffff, 0x1b6a, 0x1b77, 0x1b8d, 0x1b9a, 0x1ba1, 0x1bae, + 0x1bbe, 0x1bc8, 0x1bcf, 0x1bd9, 0x1be0, 0x1bea, 0x000d, 0x003d, + 0xffff, 0x1b6a, 0x1b77, 0x1b8d, 0x1b9a, 0x1ba1, 0x1bae, 0x1bbe, + 0x1bc8, 0x1bcf, 0x1bd9, 0x1be0, 0x1bea, 0x0005, 0x0000, 0x0000, + // Entry 2EE00 - 2EE3F + 0x0000, 0x0000, 0x0728, 0x0001, 0x072a, 0x0001, 0x072c, 0x0002, + 0x003d, 0x1bf7, 0x1c07, 0x0042, 0x0773, 0x0778, 0x077d, 0x0782, + 0x0797, 0x07a7, 0x07b7, 0x07cc, 0x07dc, 0x07ec, 0x0801, 0x0811, + 0x0821, 0x083a, 0x084e, 0x0862, 0x0867, 0x086c, 0x0871, 0x0888, + 0x0898, 0x08a8, 0x08ad, 0x08b2, 0x08b7, 0x08bc, 0x08c1, 0x08c6, + 0x08cb, 0x08d0, 0x08d5, 0x08e7, 0x08f9, 0x090b, 0x091d, 0x092f, + 0x0941, 0x0953, 0x0965, 0x0977, 0x0989, 0x099b, 0x09ad, 0x09bf, + 0x09d1, 0x09e3, 0x09f5, 0x0a07, 0x0a19, 0x0a2b, 0x0a3d, 0x0a4f, + // Entry 2EE40 - 2EE7F + 0x0a54, 0x0a59, 0x0a5e, 0x0a72, 0x0a82, 0x0a92, 0x0aa6, 0x0ab6, + 0x0ac6, 0x0ada, 0x0aea, 0x0afa, 0x0aff, 0x0b04, 0x0001, 0x0775, + 0x0001, 0x003d, 0x1c14, 0x0001, 0x077a, 0x0001, 0x003d, 0x1c14, + 0x0001, 0x077f, 0x0001, 0x003d, 0x1c14, 0x0003, 0x0786, 0x0789, + 0x078e, 0x0001, 0x003d, 0x1c1b, 0x0003, 0x003d, 0x1c1f, 0x1c26, + 0x1c2d, 0x0002, 0x0791, 0x0794, 0x0001, 0x003d, 0x1c34, 0x0001, + 0x003d, 0x1c3f, 0x0003, 0x079b, 0x0000, 0x079e, 0x0001, 0x003d, + 0x1c1b, 0x0002, 0x07a1, 0x07a4, 0x0001, 0x003d, 0x1c34, 0x0001, + // Entry 2EE80 - 2EEBF + 0x003d, 0x1c3f, 0x0003, 0x07ab, 0x0000, 0x07ae, 0x0001, 0x003d, + 0x1c1b, 0x0002, 0x07b1, 0x07b4, 0x0001, 0x003d, 0x1c34, 0x0001, + 0x003d, 0x1c3f, 0x0003, 0x07bb, 0x07be, 0x07c3, 0x0001, 0x003d, + 0x1c4a, 0x0003, 0x003d, 0x1c51, 0x1c5f, 0x1c6d, 0x0002, 0x07c6, + 0x07c9, 0x0001, 0x003d, 0x1c7b, 0x0001, 0x003d, 0x1c89, 0x0003, + 0x07d0, 0x0000, 0x07d3, 0x0001, 0x003d, 0x1c4a, 0x0002, 0x07d6, + 0x07d9, 0x0001, 0x003d, 0x1c7b, 0x0001, 0x003d, 0x1c89, 0x0003, + 0x07e0, 0x0000, 0x07e3, 0x0001, 0x003d, 0x1c4a, 0x0002, 0x07e6, + // Entry 2EEC0 - 2EEFF + 0x07e9, 0x0001, 0x003d, 0x1c7b, 0x0001, 0x003d, 0x1c89, 0x0003, + 0x07f0, 0x07f3, 0x07f8, 0x0001, 0x003d, 0x043c, 0x0003, 0x003d, + 0x1c97, 0x1ca1, 0x1cac, 0x0002, 0x07fb, 0x07fe, 0x0001, 0x003d, + 0x1cb7, 0x0001, 0x003d, 0x1cc5, 0x0003, 0x0805, 0x0000, 0x0808, + 0x0001, 0x003d, 0x043c, 0x0002, 0x080b, 0x080e, 0x0001, 0x003d, + 0x1cb7, 0x0001, 0x003d, 0x1cc5, 0x0003, 0x0815, 0x0000, 0x0818, + 0x0001, 0x003d, 0x043c, 0x0002, 0x081b, 0x081e, 0x0001, 0x003d, + 0x1cb7, 0x0001, 0x003d, 0x1cc5, 0x0004, 0x0826, 0x0829, 0x082e, + // Entry 2EF00 - 2EF3F + 0x0837, 0x0001, 0x003d, 0x1cd3, 0x0003, 0x003d, 0x1cd7, 0x1ce1, + 0x1cec, 0x0002, 0x0831, 0x0834, 0x0001, 0x003d, 0x1cf7, 0x0001, + 0x003d, 0x1d02, 0x0001, 0x003d, 0x1d0d, 0x0004, 0x083f, 0x0000, + 0x0842, 0x084b, 0x0001, 0x003d, 0x1cd3, 0x0002, 0x0845, 0x0848, + 0x0001, 0x003d, 0x1cf7, 0x0001, 0x003d, 0x1d02, 0x0001, 0x003d, + 0x1d0d, 0x0004, 0x0853, 0x0000, 0x0856, 0x085f, 0x0001, 0x003d, + 0x1cd3, 0x0002, 0x0859, 0x085c, 0x0001, 0x003d, 0x1cf7, 0x0001, + 0x003d, 0x1d02, 0x0001, 0x003d, 0x1d0d, 0x0001, 0x0864, 0x0001, + // Entry 2EF40 - 2EF7F + 0x003d, 0x1d1b, 0x0001, 0x0869, 0x0001, 0x003d, 0x1d1b, 0x0001, + 0x086e, 0x0001, 0x003d, 0x1d1b, 0x0003, 0x0875, 0x0878, 0x087f, + 0x0001, 0x003d, 0x0438, 0x0005, 0x003d, 0x1d30, 0x1d37, 0x1d3e, + 0x1d26, 0x1d45, 0x0002, 0x0882, 0x0885, 0x0001, 0x003d, 0x1d4c, + 0x0001, 0x003d, 0x1d57, 0x0003, 0x088c, 0x0000, 0x088f, 0x0001, + 0x003d, 0x0438, 0x0002, 0x0892, 0x0895, 0x0001, 0x003d, 0x1d4c, + 0x0001, 0x003d, 0x1d57, 0x0003, 0x089c, 0x0000, 0x089f, 0x0001, + 0x003d, 0x0438, 0x0002, 0x08a2, 0x08a5, 0x0001, 0x003d, 0x1d4c, + // Entry 2EF80 - 2EFBF + 0x0001, 0x003d, 0x1d57, 0x0001, 0x08aa, 0x0001, 0x003d, 0x1d62, + 0x0001, 0x08af, 0x0001, 0x003d, 0x1d62, 0x0001, 0x08b4, 0x0001, + 0x003d, 0x1d62, 0x0001, 0x08b9, 0x0001, 0x003d, 0x1d6d, 0x0001, + 0x08be, 0x0001, 0x003d, 0x1d6d, 0x0001, 0x08c3, 0x0001, 0x003d, + 0x1d6d, 0x0001, 0x08c8, 0x0001, 0x003d, 0x1d74, 0x0001, 0x08cd, + 0x0001, 0x003d, 0x1d74, 0x0001, 0x08d2, 0x0001, 0x003d, 0x1d74, + 0x0003, 0x0000, 0x08d9, 0x08de, 0x0003, 0x003d, 0x1d82, 0x1d93, + 0x1da4, 0x0002, 0x08e1, 0x08e4, 0x0001, 0x003d, 0x1db5, 0x0001, + // Entry 2EFC0 - 2EFFF + 0x003d, 0x1dca, 0x0003, 0x0000, 0x08eb, 0x08f0, 0x0003, 0x003d, + 0x1d82, 0x1d93, 0x1da4, 0x0002, 0x08f3, 0x08f6, 0x0001, 0x003d, + 0x1db5, 0x0001, 0x003d, 0x1dca, 0x0003, 0x0000, 0x08fd, 0x0902, + 0x0003, 0x003d, 0x1d82, 0x1d93, 0x1da4, 0x0002, 0x0905, 0x0908, + 0x0001, 0x003d, 0x1db5, 0x0001, 0x003d, 0x1dca, 0x0003, 0x0000, + 0x090f, 0x0914, 0x0003, 0x003d, 0x1ddf, 0x1df0, 0x1e01, 0x0002, + 0x0917, 0x091a, 0x0001, 0x003d, 0x1e12, 0x0001, 0x003d, 0x1e27, + 0x0003, 0x0000, 0x0921, 0x0926, 0x0003, 0x003d, 0x1ddf, 0x1df0, + // Entry 2F000 - 2F03F + 0x1e01, 0x0002, 0x0929, 0x092c, 0x0001, 0x003d, 0x1e12, 0x0001, + 0x003d, 0x1e27, 0x0003, 0x0000, 0x0933, 0x0938, 0x0003, 0x003d, + 0x1ddf, 0x1df0, 0x1e01, 0x0002, 0x093b, 0x093e, 0x0001, 0x003d, + 0x1e12, 0x0001, 0x003d, 0x1e27, 0x0003, 0x0000, 0x0945, 0x094a, + 0x0003, 0x003d, 0x1e3c, 0x1e4d, 0x1e5e, 0x0002, 0x094d, 0x0950, + 0x0001, 0x003d, 0x1e6f, 0x0001, 0x003d, 0x1e84, 0x0003, 0x0000, + 0x0957, 0x095c, 0x0003, 0x003d, 0x1e3c, 0x1e4d, 0x1e5e, 0x0002, + 0x095f, 0x0962, 0x0001, 0x003d, 0x1e6f, 0x0001, 0x003d, 0x1e84, + // Entry 2F040 - 2F07F + 0x0003, 0x0000, 0x0969, 0x096e, 0x0003, 0x003d, 0x1e3c, 0x1e4d, + 0x1e5e, 0x0002, 0x0971, 0x0974, 0x0001, 0x003d, 0x1e6f, 0x0001, + 0x003d, 0x1e84, 0x0003, 0x0000, 0x097b, 0x0980, 0x0003, 0x003d, + 0x1e99, 0x1eaa, 0x1ebb, 0x0002, 0x0983, 0x0986, 0x0001, 0x003d, + 0x1ecc, 0x0001, 0x003d, 0x1ee1, 0x0003, 0x0000, 0x098d, 0x0992, + 0x0003, 0x003d, 0x1e99, 0x1eaa, 0x1ebb, 0x0002, 0x0995, 0x0998, + 0x0001, 0x003d, 0x1ecc, 0x0001, 0x003d, 0x1ee1, 0x0003, 0x0000, + 0x099f, 0x09a4, 0x0003, 0x003d, 0x1e99, 0x1eaa, 0x1ebb, 0x0002, + // Entry 2F080 - 2F0BF + 0x09a7, 0x09aa, 0x0001, 0x003d, 0x1ecc, 0x0001, 0x003d, 0x1ee1, + 0x0003, 0x0000, 0x09b1, 0x09b6, 0x0003, 0x003d, 0x1ef6, 0x1f07, + 0x1f18, 0x0002, 0x09b9, 0x09bc, 0x0001, 0x003d, 0x1f29, 0x0001, + 0x003d, 0x1f3e, 0x0003, 0x0000, 0x09c3, 0x09c8, 0x0003, 0x003d, + 0x1ef6, 0x1f07, 0x1f18, 0x0002, 0x09cb, 0x09ce, 0x0001, 0x003d, + 0x1f29, 0x0001, 0x003d, 0x1f3e, 0x0003, 0x0000, 0x09d5, 0x09da, + 0x0003, 0x003d, 0x1ef6, 0x1f07, 0x1f18, 0x0002, 0x09dd, 0x09e0, + 0x0001, 0x003d, 0x1f29, 0x0001, 0x003d, 0x1f3e, 0x0003, 0x0000, + // Entry 2F0C0 - 2F0FF + 0x09e7, 0x09ec, 0x0003, 0x003d, 0x1f53, 0x1f64, 0x1f75, 0x0002, + 0x09ef, 0x09f2, 0x0001, 0x003d, 0x1f86, 0x0001, 0x003d, 0x1f9b, + 0x0003, 0x0000, 0x09f9, 0x09fe, 0x0003, 0x003d, 0x1f53, 0x1f64, + 0x1f75, 0x0002, 0x0a01, 0x0a04, 0x0001, 0x003d, 0x1f86, 0x0001, + 0x003d, 0x1f9b, 0x0003, 0x0000, 0x0a0b, 0x0a10, 0x0003, 0x003d, + 0x1f53, 0x1f64, 0x1f75, 0x0002, 0x0a13, 0x0a16, 0x0001, 0x003d, + 0x1f86, 0x0001, 0x003d, 0x1f9b, 0x0003, 0x0000, 0x0a1d, 0x0a22, + 0x0003, 0x003d, 0x1fb0, 0x1fc1, 0x1fd2, 0x0002, 0x0a25, 0x0a28, + // Entry 2F100 - 2F13F + 0x0001, 0x003d, 0x1fe3, 0x0001, 0x003e, 0x0000, 0x0003, 0x0000, + 0x0a2f, 0x0a34, 0x0003, 0x003d, 0x1fb0, 0x1fc1, 0x1fd2, 0x0002, + 0x0a37, 0x0a3a, 0x0001, 0x003d, 0x1fe3, 0x0001, 0x003e, 0x0000, + 0x0003, 0x0000, 0x0a41, 0x0a46, 0x0003, 0x003d, 0x1fb0, 0x1fc1, + 0x1fd2, 0x0002, 0x0a49, 0x0a4c, 0x0001, 0x003d, 0x1fe3, 0x0001, + 0x003e, 0x0000, 0x0001, 0x0a51, 0x0001, 0x003e, 0x0015, 0x0001, + 0x0a56, 0x0001, 0x003e, 0x0015, 0x0001, 0x0a5b, 0x0001, 0x003e, + 0x0015, 0x0003, 0x0a62, 0x0a65, 0x0a69, 0x0001, 0x003e, 0x0023, + // Entry 2F140 - 2F17F + 0x0002, 0x003e, 0xffff, 0x0027, 0x0002, 0x0a6c, 0x0a6f, 0x0001, + 0x003e, 0x0035, 0x0001, 0x003e, 0x0043, 0x0003, 0x0a76, 0x0000, + 0x0a79, 0x0001, 0x003e, 0x0023, 0x0002, 0x0a7c, 0x0a7f, 0x0001, + 0x003e, 0x0035, 0x0001, 0x003e, 0x0043, 0x0003, 0x0a86, 0x0000, + 0x0a89, 0x0001, 0x003e, 0x0023, 0x0002, 0x0a8c, 0x0a8f, 0x0001, + 0x003e, 0x0035, 0x0001, 0x003e, 0x0043, 0x0003, 0x0a96, 0x0a99, + 0x0a9d, 0x0001, 0x003e, 0x0051, 0x0002, 0x003e, 0xffff, 0x0055, + 0x0002, 0x0aa0, 0x0aa3, 0x0001, 0x003e, 0x0060, 0x0001, 0x003e, + // Entry 2F180 - 2F1BF + 0x006b, 0x0003, 0x0aaa, 0x0000, 0x0aad, 0x0001, 0x003e, 0x0051, + 0x0002, 0x0ab0, 0x0ab3, 0x0001, 0x003e, 0x0060, 0x0001, 0x003e, + 0x006b, 0x0003, 0x0aba, 0x0000, 0x0abd, 0x0001, 0x003e, 0x0051, + 0x0002, 0x0ac0, 0x0ac3, 0x0001, 0x003e, 0x0060, 0x0001, 0x003e, + 0x006b, 0x0003, 0x0aca, 0x0acd, 0x0ad1, 0x0001, 0x003e, 0x0076, + 0x0002, 0x003e, 0xffff, 0x007a, 0x0002, 0x0ad4, 0x0ad7, 0x0001, + 0x003e, 0x0081, 0x0001, 0x003e, 0x008c, 0x0003, 0x0ade, 0x0000, + 0x0ae1, 0x0001, 0x003e, 0x0076, 0x0002, 0x0ae4, 0x0ae7, 0x0001, + // Entry 2F1C0 - 2F1FF + 0x003e, 0x0081, 0x0001, 0x003e, 0x008c, 0x0003, 0x0aee, 0x0000, + 0x0af1, 0x0001, 0x003e, 0x0076, 0x0002, 0x0af4, 0x0af7, 0x0001, + 0x003e, 0x0081, 0x0001, 0x003e, 0x008c, 0x0001, 0x0afc, 0x0001, + 0x003e, 0x0097, 0x0001, 0x0b01, 0x0001, 0x003e, 0x0097, 0x0001, + 0x0b06, 0x0001, 0x003e, 0x0097, 0x0004, 0x0b0e, 0x0b13, 0x0b18, + 0x0b27, 0x0003, 0x0000, 0x1dc7, 0x2b8e, 0x2b95, 0x0003, 0x003e, + 0x00a1, 0x00ac, 0x00c1, 0x0002, 0x0000, 0x0b1b, 0x0003, 0x0000, + 0x0b22, 0x0b1f, 0x0001, 0x003e, 0x00cf, 0x0003, 0x003e, 0xffff, + // Entry 2F200 - 2F23F + 0x00e0, 0x00f8, 0x0002, 0x0000, 0x0b2a, 0x0003, 0x0b2e, 0x0c6e, + 0x0bce, 0x009e, 0x003e, 0xffff, 0xffff, 0xffff, 0xffff, 0x01b1, + 0x0203, 0x029a, 0x02da, 0x031d, 0x0360, 0x03a3, 0x03ef, 0x0438, + 0x0514, 0x055d, 0x05af, 0x0616, 0x0668, 0x06ac, 0x0725, 0x07a7, + 0x0820, 0x0899, 0x08f4, 0x093d, 0xffff, 0xffff, 0x09b1, 0xffff, + 0x0a17, 0xffff, 0x0a8e, 0x0ac5, 0x0afc, 0x0b33, 0xffff, 0xffff, + 0x0bae, 0x0bf7, 0x0c41, 0xffff, 0xffff, 0xffff, 0x0cb7, 0xffff, + 0x0d14, 0x0d60, 0xffff, 0x0db8, 0x0df8, 0x0e56, 0xffff, 0xffff, + // Entry 2F240 - 2F27F + 0xffff, 0xffff, 0x0f06, 0xffff, 0xffff, 0x0f75, 0x0fd3, 0xffff, + 0xffff, 0x106b, 0x10c9, 0x1100, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x11d3, 0x120a, 0x125c, 0x12a5, 0x12dc, 0xffff, + 0xffff, 0x13ac, 0xffff, 0x140c, 0xffff, 0xffff, 0x14bd, 0xffff, + 0x1561, 0xffff, 0xffff, 0xffff, 0xffff, 0x15f9, 0xffff, 0x1650, + 0x16ae, 0x170c, 0x175e, 0xffff, 0xffff, 0xffff, 0x17d7, 0x1832, + 0x187b, 0xffff, 0xffff, 0x18ef, 0x1987, 0x19eb, 0x1a2b, 0xffff, + 0xffff, 0x1a9f, 0x1ae8, 0x1b1f, 0xffff, 0x1b77, 0xffff, 0xffff, + // Entry 2F280 - 2F2BF + 0xffff, 0xffff, 0xffff, 0x1c9b, 0x1cdb, 0x1d1b, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1de6, 0xffff, 0xffff, + 0x1e48, 0xffff, 0x1e8d, 0xffff, 0x1f02, 0x1f4b, 0x1fa6, 0xffff, + 0x2006, 0x206a, 0xffff, 0xffff, 0xffff, 0x2102, 0x214b, 0xffff, + 0xffff, 0x010f, 0x024c, 0x0478, 0x04c6, 0xffff, 0xffff, 0x1509, + 0x1c20, 0x009e, 0x003e, 0x014f, 0x0169, 0x0183, 0x019a, 0x01c8, + 0x0217, 0x02ab, 0x02ec, 0x032f, 0x0372, 0x03b8, 0x0403, 0x0449, + 0x0528, 0x0574, 0x05cd, 0x062d, 0x0679, 0x06d0, 0x074c, 0x07cb, + // Entry 2F2C0 - 2F2FF + 0x0844, 0x08b3, 0x0908, 0x0954, 0x098f, 0x099d, 0x09c8, 0x0a03, + 0x0a2f, 0x0a7d, 0x0a9c, 0x0ad3, 0x0b0a, 0x0b47, 0x0b7c, 0x0b96, + 0x0bc2, 0x0c09, 0x0c4f, 0x0c78, 0x0c8c, 0x0ca3, 0x0ccb, 0x0d00, + 0x0d29, 0x0d71, 0x0da0, 0x0dc9, 0x0e13, 0x0e64, 0x0e8d, 0x0eae, + 0x0ede, 0x0ef5, 0x0f17, 0x0f46, 0x0f5e, 0x0f90, 0x0fee, 0x1043, + 0x1057, 0x1086, 0x10d7, 0x1111, 0x1140, 0x1151, 0x1162, 0x1179, + 0x1197, 0x11b5, 0x11e1, 0x1221, 0x1270, 0x12b3, 0x1309, 0x1370, + 0x138e, 0x13c0, 0x13f5, 0x142c, 0x1479, 0x14a8, 0x14d2, 0x154d, + // Entry 2F300 - 2F33F + 0x1572, 0x15a1, 0x15b8, 0x15c9, 0x15e4, 0x160d, 0x1642, 0x166b, + 0x16c9, 0x1723, 0x1772, 0x17a7, 0x17b8, 0x17c9, 0x17f1, 0x1846, + 0x1892, 0x18cd, 0x18de, 0x1911, 0x19a4, 0x19fc, 0x1a3f, 0x1a74, + 0x1a85, 0x1ab3, 0x1af6, 0x1b30, 0x1b5f, 0x1b9b, 0x1bf0, 0x1c01, + 0x1c12, 0x1c76, 0x1c8a, 0x1cac, 0x1cec, 0x1d2c, 0x1d5b, 0x1d6c, + 0x1d83, 0x1d9b, 0x1db6, 0x1dc7, 0x1dd5, 0x1df4, 0x1e1d, 0x1e34, + 0x1e56, 0x1e7f, 0x1eaa, 0x1ef1, 0x1f16, 0x1f65, 0x1fba, 0x1fef, + 0x2023, 0x2081, 0x20bc, 0x20cd, 0x20e1, 0x2116, 0x2168, 0x1031, + // Entry 2F340 - 2F37F + 0x1962, 0x0120, 0x0264, 0x0490, 0x04de, 0x0a6c, 0x1493, 0x151a, + 0x1c37, 0x009e, 0x003e, 0xffff, 0xffff, 0xffff, 0xffff, 0x01e2, + 0x022e, 0x02bf, 0x0301, 0x0344, 0x0387, 0x03d0, 0x041a, 0x045d, + 0x053f, 0x058e, 0x05ee, 0x0647, 0x068d, 0x06f7, 0x0776, 0x07f2, + 0x086b, 0x08d0, 0x091f, 0x096e, 0xffff, 0xffff, 0x09e2, 0xffff, + 0x0a4a, 0xffff, 0x0aad, 0x0ae4, 0x0b1b, 0x0b5e, 0xffff, 0xffff, + 0x0bd9, 0x0c1e, 0x0c60, 0xffff, 0xffff, 0xffff, 0x0ce2, 0xffff, + 0x0d41, 0x0d85, 0xffff, 0x0ddd, 0x0e31, 0x0e75, 0xffff, 0xffff, + // Entry 2F380 - 2F3BF + 0xffff, 0xffff, 0x0f2b, 0xffff, 0xffff, 0x0fae, 0x100c, 0xffff, + 0xffff, 0x10a4, 0x10e8, 0x1125, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x11f2, 0x123b, 0x1287, 0x12c4, 0x1339, 0xffff, + 0xffff, 0x13d7, 0xffff, 0x144f, 0xffff, 0xffff, 0x14ea, 0xffff, + 0x1586, 0xffff, 0xffff, 0xffff, 0xffff, 0x1624, 0xffff, 0x1689, + 0x16e7, 0x173d, 0x1789, 0xffff, 0xffff, 0xffff, 0x180e, 0x185d, + 0x18ac, 0xffff, 0xffff, 0x1936, 0x19c4, 0x1a10, 0x1a56, 0xffff, + 0xffff, 0x1aca, 0x1b07, 0x1b44, 0xffff, 0x1bc2, 0xffff, 0xffff, + // Entry 2F3C0 - 2F3FF + 0xffff, 0xffff, 0xffff, 0x1cc0, 0x1d00, 0x1d40, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1e05, 0xffff, 0xffff, + 0x1e67, 0xffff, 0x1eca, 0xffff, 0x1f2d, 0x1f82, 0x1fd1, 0xffff, + 0x2043, 0x209b, 0xffff, 0xffff, 0xffff, 0x212d, 0x2188, 0xffff, + 0xffff, 0x0134, 0x027f, 0x04ab, 0x04f9, 0xffff, 0xffff, 0x1532, + 0x1c55, 0x0003, 0x0000, 0x0000, 0x0004, 0x0004, 0x0000, 0x0000, + 0x0000, 0x0009, 0x0002, 0x0000, 0x000c, 0x0003, 0x0010, 0x00b2, + 0x0061, 0x004f, 0x003f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 2F400 - 2F43F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 2F440 - 2F47F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0000, 0x004f, 0x003f, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 2F480 - 2F4BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x000e, 0x004f, 0x003f, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 2F4C0 - 2F4FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x001f, 0x0003, 0x0004, 0x01c0, 0x0597, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, + 0x0038, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, + // Entry 2F500 - 2F53F + 0x0000, 0x0027, 0x0004, 0x0024, 0x001e, 0x001b, 0x0021, 0x0001, + 0x0002, 0x0000, 0x0001, 0x0002, 0x0010, 0x0001, 0x001f, 0x0525, + 0x0001, 0x003f, 0x0037, 0x0004, 0x0035, 0x002f, 0x002c, 0x0032, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x0041, 0x00a6, 0x00fd, + 0x0132, 0x0173, 0x018d, 0x019e, 0x01af, 0x0002, 0x0044, 0x0075, + 0x0003, 0x0048, 0x0057, 0x0066, 0x000d, 0x003f, 0xffff, 0x0043, + 0x005c, 0x007b, 0x008b, 0x009e, 0x00a5, 0x00af, 0x00bf, 0x00d2, + // Entry 2F540 - 2F57F + 0x00eb, 0x0101, 0x011d, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, + 0x2b8b, 0x2426, 0x000d, 0x003f, 0xffff, 0x0043, 0x005c, 0x007b, + 0x008b, 0x009e, 0x00a5, 0x00af, 0x00bf, 0x00d2, 0x00eb, 0x0101, + 0x011d, 0x0003, 0x0079, 0x0088, 0x0097, 0x000d, 0x003f, 0xffff, + 0x0043, 0x005c, 0x007b, 0x008b, 0x009e, 0x00a5, 0x00af, 0x00bf, + 0x00d2, 0x00eb, 0x0101, 0x011d, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + // Entry 2F580 - 2F5BF + 0x2215, 0x2b8b, 0x2426, 0x000d, 0x003f, 0xffff, 0x0043, 0x005c, + 0x007b, 0x008b, 0x009e, 0x00a5, 0x00af, 0x00bf, 0x00d2, 0x00eb, + 0x0101, 0x011d, 0x0002, 0x00a9, 0x00d3, 0x0005, 0x00af, 0x00b8, + 0x00ca, 0x0000, 0x00c1, 0x0007, 0x003f, 0x0133, 0x0143, 0x0153, + 0x0166, 0x0179, 0x018f, 0x01a5, 0x0007, 0x000c, 0x0143, 0x4e4f, + 0x024e, 0x0255, 0x4e56, 0x4e5d, 0x4e68, 0x0007, 0x003f, 0x01b8, + 0x01bf, 0x01c9, 0x01d6, 0x01e0, 0x01ed, 0x01fd, 0x0007, 0x003f, + 0x0133, 0x0143, 0x0153, 0x0166, 0x0179, 0x018f, 0x01a5, 0x0005, + // Entry 2F5C0 - 2F5FF + 0x00d9, 0x00e2, 0x00f4, 0x0000, 0x00eb, 0x0007, 0x003f, 0x0133, + 0x0143, 0x0153, 0x0166, 0x0179, 0x018f, 0x01a5, 0x0007, 0x000c, + 0x0143, 0x4e4f, 0x024e, 0x0255, 0x4e56, 0x4e5d, 0x4e68, 0x0007, + 0x003f, 0x01b8, 0x01bf, 0x01c9, 0x01d6, 0x01e0, 0x01ed, 0x01fd, + 0x0007, 0x003f, 0x0133, 0x0143, 0x0153, 0x0166, 0x0179, 0x018f, + 0x01a5, 0x0002, 0x0100, 0x0119, 0x0003, 0x0104, 0x010b, 0x0112, + 0x0005, 0x0000, 0xffff, 0x04e3, 0x04e6, 0x04e9, 0x04ec, 0x0005, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0000, + // Entry 2F600 - 2F63F + 0xffff, 0x04e3, 0x04e6, 0x04e9, 0x04ec, 0x0003, 0x011d, 0x0124, + 0x012b, 0x0005, 0x0000, 0xffff, 0x04e3, 0x04e6, 0x04e9, 0x04ec, + 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, + 0x0000, 0xffff, 0x04e3, 0x04e6, 0x04e9, 0x04ec, 0x0002, 0x0135, + 0x0154, 0x0003, 0x0139, 0x0142, 0x014b, 0x0002, 0x013c, 0x013f, + 0x0001, 0x003f, 0x0207, 0x0001, 0x003f, 0x0213, 0x0002, 0x0145, + 0x0148, 0x0001, 0x003f, 0x0207, 0x0001, 0x003f, 0x0213, 0x0002, + 0x014e, 0x0151, 0x0001, 0x003f, 0x0207, 0x0001, 0x003f, 0x0213, + // Entry 2F640 - 2F67F + 0x0003, 0x0158, 0x0161, 0x016a, 0x0002, 0x015b, 0x015e, 0x0001, + 0x003f, 0x0207, 0x0001, 0x003f, 0x0213, 0x0002, 0x0164, 0x0167, + 0x0001, 0x003f, 0x0207, 0x0001, 0x003f, 0x0213, 0x0002, 0x016d, + 0x0170, 0x0001, 0x003f, 0x0207, 0x0001, 0x003f, 0x0213, 0x0003, + 0x0182, 0x0000, 0x0177, 0x0002, 0x017a, 0x017e, 0x0002, 0x003f, + 0x021f, 0x0244, 0x0002, 0x0000, 0x04f5, 0x2701, 0x0002, 0x0185, + 0x0189, 0x0002, 0x003f, 0x021f, 0x0244, 0x0002, 0x0000, 0x04f5, + 0x2701, 0x0004, 0x019b, 0x0195, 0x0192, 0x0198, 0x0001, 0x0002, + // Entry 2F680 - 2F6BF + 0x0025, 0x0001, 0x0002, 0x0033, 0x0001, 0x0005, 0x062f, 0x0001, + 0x003f, 0x0263, 0x0004, 0x01ac, 0x01a6, 0x01a3, 0x01a9, 0x0001, + 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, 0x0002, 0x04fe, + 0x0001, 0x0002, 0x0508, 0x0004, 0x01bd, 0x01b7, 0x01b4, 0x01ba, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0042, 0x0203, 0x0208, 0x020d, + 0x0212, 0x0227, 0x0237, 0x0247, 0x025c, 0x026c, 0x027c, 0x0291, + 0x02a1, 0x02b1, 0x02ca, 0x02de, 0x02f2, 0x02f7, 0x02fc, 0x0301, + // Entry 2F6C0 - 2F6FF + 0x0316, 0x0326, 0x0336, 0x033b, 0x0340, 0x0345, 0x034a, 0x034f, + 0x0354, 0x0359, 0x035e, 0x0363, 0x0375, 0x0387, 0x0399, 0x03ab, + 0x03bd, 0x03cf, 0x03e1, 0x03f3, 0x0405, 0x0417, 0x0429, 0x043b, + 0x044d, 0x045f, 0x0471, 0x0483, 0x0495, 0x04a7, 0x04b9, 0x04cb, + 0x04dd, 0x04e2, 0x04e7, 0x04ec, 0x0500, 0x0510, 0x0520, 0x0534, + 0x0544, 0x0554, 0x0568, 0x0578, 0x0588, 0x058d, 0x0592, 0x0001, + 0x0205, 0x0001, 0x002d, 0x059c, 0x0001, 0x020a, 0x0001, 0x002d, + 0x059c, 0x0001, 0x020f, 0x0001, 0x002d, 0x059c, 0x0003, 0x0216, + // Entry 2F700 - 2F73F + 0x0219, 0x021e, 0x0001, 0x003f, 0x026a, 0x0003, 0x003f, 0x0277, + 0x0297, 0x02ae, 0x0002, 0x0221, 0x0224, 0x0001, 0x003f, 0x02ce, + 0x0001, 0x003f, 0x02ee, 0x0003, 0x022b, 0x0000, 0x022e, 0x0001, + 0x003f, 0x026a, 0x0002, 0x0231, 0x0234, 0x0001, 0x003f, 0x02ce, + 0x0001, 0x003f, 0x0312, 0x0003, 0x023b, 0x0000, 0x023e, 0x0001, + 0x003f, 0x026a, 0x0002, 0x0241, 0x0244, 0x0001, 0x003f, 0x02ce, + 0x0001, 0x003f, 0x0312, 0x0003, 0x024b, 0x024e, 0x0253, 0x0001, + 0x003f, 0x0330, 0x0003, 0x003f, 0x034c, 0x0378, 0x039b, 0x0002, + // Entry 2F740 - 2F77F + 0x0256, 0x0259, 0x0001, 0x003f, 0x03c7, 0x0001, 0x003f, 0x03f0, + 0x0003, 0x0260, 0x0000, 0x0263, 0x0001, 0x003f, 0x0330, 0x0002, + 0x0266, 0x0269, 0x0001, 0x003f, 0x03c7, 0x0001, 0x003f, 0x03f0, + 0x0003, 0x0270, 0x0000, 0x0273, 0x0001, 0x003f, 0x0330, 0x0002, + 0x0276, 0x0279, 0x0001, 0x003f, 0x03c7, 0x0001, 0x003f, 0x03f0, + 0x0003, 0x0280, 0x0283, 0x0288, 0x0001, 0x003f, 0x0423, 0x0003, + 0x003f, 0x0436, 0x0459, 0x0473, 0x0002, 0x028b, 0x028e, 0x0001, + 0x003f, 0x0496, 0x0001, 0x003f, 0x04bc, 0x0003, 0x0295, 0x0000, + // Entry 2F780 - 2F7BF + 0x0298, 0x0001, 0x003f, 0x0423, 0x0002, 0x029b, 0x029e, 0x0001, + 0x003f, 0x0496, 0x0001, 0x003f, 0x04bc, 0x0003, 0x02a5, 0x0000, + 0x02a8, 0x0001, 0x003f, 0x0423, 0x0002, 0x02ab, 0x02ae, 0x0001, + 0x003f, 0x0496, 0x0001, 0x003f, 0x04bc, 0x0004, 0x02b6, 0x02b9, + 0x02be, 0x02c7, 0x0001, 0x003f, 0x04e9, 0x0003, 0x003f, 0x04f9, + 0x051c, 0x0533, 0x0002, 0x02c1, 0x02c4, 0x0001, 0x003f, 0x0553, + 0x0001, 0x003f, 0x0576, 0x0001, 0x003f, 0x059d, 0x0004, 0x02cf, + 0x0000, 0x02d2, 0x02db, 0x0001, 0x003f, 0x04e9, 0x0002, 0x02d5, + // Entry 2F7C0 - 2F7FF + 0x02d8, 0x0001, 0x003f, 0x05b8, 0x0001, 0x003f, 0x0576, 0x0001, + 0x003f, 0x059d, 0x0004, 0x02e3, 0x0000, 0x02e6, 0x02ef, 0x0001, + 0x003f, 0x04e9, 0x0002, 0x02e9, 0x02ec, 0x0001, 0x003f, 0x0553, + 0x0001, 0x003f, 0x05ca, 0x0001, 0x003f, 0x059d, 0x0001, 0x02f4, + 0x0001, 0x003f, 0x05e9, 0x0001, 0x02f9, 0x0001, 0x003f, 0x05e9, + 0x0001, 0x02fe, 0x0001, 0x003f, 0x05e9, 0x0003, 0x0305, 0x0308, + 0x030d, 0x0001, 0x003f, 0x061b, 0x0003, 0x003f, 0x0625, 0x062f, + 0x0639, 0x0002, 0x0310, 0x0313, 0x0001, 0x003f, 0x064f, 0x0001, + // Entry 2F800 - 2F83F + 0x003f, 0x0669, 0x0003, 0x031a, 0x0000, 0x031d, 0x0001, 0x003f, + 0x061b, 0x0002, 0x0320, 0x0323, 0x0001, 0x003f, 0x064f, 0x0001, + 0x003f, 0x0669, 0x0003, 0x032a, 0x0000, 0x032d, 0x0001, 0x003f, + 0x061b, 0x0002, 0x0330, 0x0333, 0x0001, 0x003f, 0x064f, 0x0001, + 0x003f, 0x0669, 0x0001, 0x0338, 0x0001, 0x003f, 0x0684, 0x0001, + 0x033d, 0x0001, 0x003f, 0x0684, 0x0001, 0x0342, 0x0001, 0x003f, + 0x0684, 0x0001, 0x0347, 0x0001, 0x003f, 0x06a4, 0x0001, 0x034c, + 0x0001, 0x003f, 0x06a4, 0x0001, 0x0351, 0x0001, 0x003f, 0x06a4, + // Entry 2F840 - 2F87F + 0x0001, 0x0356, 0x0001, 0x003f, 0x06c7, 0x0001, 0x035b, 0x0001, + 0x003f, 0x06c7, 0x0001, 0x0360, 0x0001, 0x003f, 0x06c7, 0x0003, + 0x0000, 0x0367, 0x036c, 0x0003, 0x003f, 0x0709, 0x072c, 0x0743, + 0x0002, 0x036f, 0x0372, 0x0001, 0x003f, 0x0763, 0x0001, 0x003f, + 0x0783, 0x0003, 0x0000, 0x0379, 0x037e, 0x0003, 0x003f, 0x0709, + 0x072c, 0x0743, 0x0002, 0x0381, 0x0384, 0x0001, 0x003f, 0x0763, + 0x0001, 0x003f, 0x0783, 0x0003, 0x0000, 0x038b, 0x0390, 0x0003, + 0x003f, 0x0709, 0x072c, 0x0743, 0x0002, 0x0393, 0x0396, 0x0001, + // Entry 2F880 - 2F8BF + 0x003f, 0x0763, 0x0001, 0x003f, 0x0783, 0x0003, 0x0000, 0x039d, + 0x03a2, 0x0003, 0x003f, 0x07aa, 0x07cd, 0x07e4, 0x0002, 0x03a5, + 0x03a8, 0x0001, 0x003f, 0x0804, 0x0001, 0x003f, 0x0824, 0x0003, + 0x0000, 0x03af, 0x03b4, 0x0003, 0x003f, 0x084b, 0x0869, 0x087b, + 0x0002, 0x03b7, 0x03ba, 0x0001, 0x003f, 0x0804, 0x0001, 0x003f, + 0x0824, 0x0003, 0x0000, 0x03c1, 0x03c6, 0x0003, 0x003f, 0x0896, + 0x08b1, 0x08c0, 0x0002, 0x03c9, 0x03cc, 0x0001, 0x003f, 0x0804, + 0x0001, 0x003f, 0x0824, 0x0003, 0x0000, 0x03d3, 0x03d8, 0x0003, + // Entry 2F8C0 - 2F8FF + 0x003f, 0x08d8, 0x08fe, 0x0918, 0x0002, 0x03db, 0x03de, 0x0001, + 0x003f, 0x093b, 0x0001, 0x003f, 0x095e, 0x0003, 0x0000, 0x03e5, + 0x03ea, 0x0003, 0x003f, 0x0988, 0x09a9, 0x09be, 0x0002, 0x03ed, + 0x03f0, 0x0001, 0x003f, 0x093b, 0x0001, 0x003f, 0x095e, 0x0003, + 0x0000, 0x03f7, 0x03fc, 0x0003, 0x003f, 0x09dc, 0x09f7, 0x0a06, + 0x0002, 0x03ff, 0x0402, 0x0001, 0x003f, 0x093b, 0x0001, 0x003f, + 0x095e, 0x0003, 0x0000, 0x0409, 0x040e, 0x0003, 0x003f, 0x0a1e, + 0x0a44, 0x0a5e, 0x0002, 0x0411, 0x0414, 0x0001, 0x003f, 0x0a81, + // Entry 2F900 - 2F93F + 0x0001, 0x003f, 0x0aa4, 0x0003, 0x0000, 0x041b, 0x0420, 0x0003, + 0x003f, 0x0ace, 0x0aec, 0x0afe, 0x0002, 0x0423, 0x0426, 0x0001, + 0x003f, 0x0a81, 0x0001, 0x003f, 0x0aa4, 0x0003, 0x0000, 0x042d, + 0x0432, 0x0003, 0x003f, 0x0b19, 0x0b34, 0x0b43, 0x0002, 0x0435, + 0x0438, 0x0001, 0x003f, 0x0a81, 0x0001, 0x003f, 0x0aa4, 0x0003, + 0x0000, 0x043f, 0x0444, 0x0003, 0x003f, 0x0b5b, 0x0b84, 0x0ba1, + 0x0002, 0x0447, 0x044a, 0x0001, 0x003f, 0x0bc7, 0x0001, 0x003f, + 0x0bed, 0x0003, 0x0000, 0x0451, 0x0456, 0x0003, 0x003f, 0x0c1a, + // Entry 2F940 - 2F97F + 0x0c3b, 0x0c50, 0x0002, 0x0459, 0x045c, 0x0001, 0x003f, 0x0bc7, + 0x0001, 0x003f, 0x0bed, 0x0003, 0x0000, 0x0463, 0x0468, 0x0003, + 0x003f, 0x0c6e, 0x0c89, 0x0c98, 0x0002, 0x046b, 0x046e, 0x0001, + 0x003f, 0x0bc7, 0x0001, 0x003f, 0x0bed, 0x0003, 0x0000, 0x0475, + 0x047a, 0x0003, 0x003f, 0x0cb0, 0x0cd9, 0x0cf6, 0x0002, 0x047d, + 0x0480, 0x0001, 0x003f, 0x0d1c, 0x0001, 0x003f, 0x0d42, 0x0003, + 0x0000, 0x0487, 0x048c, 0x0003, 0x003f, 0x0d6f, 0x0d93, 0x0dab, + 0x0002, 0x048f, 0x0492, 0x0001, 0x003f, 0x0d1c, 0x0001, 0x003f, + // Entry 2F980 - 2F9BF + 0x0d42, 0x0003, 0x0000, 0x0499, 0x049e, 0x0003, 0x003f, 0x0dcc, + 0x0de7, 0x0df6, 0x0002, 0x04a1, 0x04a4, 0x0001, 0x003f, 0x0d1c, + 0x0001, 0x003f, 0x0d42, 0x0003, 0x0000, 0x04ab, 0x04b0, 0x0003, + 0x003f, 0x0e0e, 0x0e34, 0x0e4e, 0x0002, 0x04b3, 0x04b6, 0x0001, + 0x003f, 0x0e71, 0x0001, 0x003f, 0x0e94, 0x0003, 0x0000, 0x04bd, + 0x04c2, 0x0003, 0x003f, 0x0ebe, 0x0edc, 0x0eee, 0x0002, 0x04c5, + 0x04c8, 0x0001, 0x003f, 0x0e71, 0x0001, 0x003f, 0x0e94, 0x0003, + 0x0000, 0x04cf, 0x04d4, 0x0003, 0x003f, 0x0f09, 0x0f24, 0x0f33, + // Entry 2F9C0 - 2F9FF + 0x0002, 0x04d7, 0x04da, 0x0001, 0x003f, 0x0e71, 0x0001, 0x003f, + 0x0e94, 0x0001, 0x04df, 0x0001, 0x003f, 0x0f4b, 0x0001, 0x04e4, + 0x0001, 0x003f, 0x0f4b, 0x0001, 0x04e9, 0x0001, 0x003f, 0x0f4b, + 0x0003, 0x04f0, 0x04f3, 0x04f7, 0x0001, 0x003f, 0x0f73, 0x0002, + 0x003f, 0xffff, 0x0f7a, 0x0002, 0x04fa, 0x04fd, 0x0001, 0x003f, + 0x0f8b, 0x0001, 0x003f, 0x0fa5, 0x0003, 0x0504, 0x0000, 0x0507, + 0x0001, 0x003f, 0x0f73, 0x0002, 0x050a, 0x050d, 0x0001, 0x003f, + 0x0f8b, 0x0001, 0x003f, 0x0fa5, 0x0003, 0x0514, 0x0000, 0x0517, + // Entry 2FA00 - 2FA3F + 0x0001, 0x003f, 0x0f73, 0x0002, 0x051a, 0x051d, 0x0001, 0x003f, + 0x0f8b, 0x0001, 0x003f, 0x0fa5, 0x0003, 0x0524, 0x0527, 0x052b, + 0x0001, 0x003f, 0x0fc0, 0x0002, 0x003f, 0xffff, 0x0fd0, 0x0002, + 0x052e, 0x0531, 0x0001, 0x003f, 0x0fea, 0x0001, 0x003f, 0x1004, + 0x0003, 0x0538, 0x0000, 0x053b, 0x0001, 0x003f, 0x0fc0, 0x0002, + 0x053e, 0x0541, 0x0001, 0x003f, 0x0fea, 0x0001, 0x003f, 0x1004, + 0x0003, 0x0548, 0x0000, 0x054b, 0x0001, 0x003f, 0x0fc0, 0x0002, + 0x054e, 0x0551, 0x0001, 0x003f, 0x0fea, 0x0001, 0x003f, 0x1004, + // Entry 2FA40 - 2FA7F + 0x0003, 0x0558, 0x055b, 0x055f, 0x0001, 0x003f, 0x102b, 0x0002, + 0x003f, 0xffff, 0x103b, 0x0002, 0x0562, 0x0565, 0x0001, 0x003f, + 0x1048, 0x0001, 0x003f, 0x1068, 0x0003, 0x056c, 0x0000, 0x056f, + 0x0001, 0x003f, 0x102b, 0x0002, 0x0572, 0x0575, 0x0001, 0x003f, + 0x1048, 0x0001, 0x003f, 0x1089, 0x0003, 0x057c, 0x0000, 0x057f, + 0x0001, 0x003f, 0x102b, 0x0002, 0x0582, 0x0585, 0x0001, 0x003f, + 0x1048, 0x0001, 0x003f, 0x1089, 0x0001, 0x058a, 0x0001, 0x003f, + 0x10a2, 0x0001, 0x058f, 0x0001, 0x003f, 0x10a2, 0x0001, 0x0594, + // Entry 2FA80 - 2FABF + 0x0001, 0x003f, 0x10a2, 0x0004, 0x0000, 0x0000, 0x059c, 0x05ab, + 0x0002, 0x0000, 0x059f, 0x0003, 0x0000, 0x05a6, 0x05a3, 0x0001, + 0x003f, 0x10ac, 0x0003, 0x003f, 0xffff, 0x10e2, 0x1118, 0x0002, + 0x05f6, 0x05ae, 0x0003, 0x0000, 0x0000, 0x05b2, 0x0042, 0x003f, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 2FAC0 - 2FAFF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x114b, 0x0003, 0x0000, 0x0000, 0x05fa, 0x0042, 0x000b, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 2FB00 - 2FB3F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0000, 0x0003, 0x0004, 0x00fe, 0x017c, 0x000a, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000f, 0x003a, 0x0000, + 0x00e7, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0018, + // Entry 2FB40 - 2FB7F + 0x0000, 0x0029, 0x0004, 0x0026, 0x0020, 0x001d, 0x0023, 0x0001, + 0x003f, 0x1168, 0x0001, 0x003f, 0x1179, 0x0001, 0x003f, 0x1184, + 0x0001, 0x003f, 0x118e, 0x0004, 0x0037, 0x0031, 0x002e, 0x0034, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x0043, 0x006b, 0x0090, + 0x0000, 0x00a4, 0x00b4, 0x00c5, 0x00d6, 0x0002, 0x0046, 0x0059, + 0x0003, 0x0000, 0x0000, 0x004a, 0x000d, 0x003f, 0xffff, 0x1195, + 0x11a0, 0x11ab, 0x11b6, 0x11c1, 0x11c8, 0x11d1, 0x11e0, 0x11e9, + // Entry 2FB80 - 2FBBF + 0x11f4, 0x1203, 0x120e, 0x0002, 0x0000, 0x005c, 0x000d, 0x0014, + 0xffff, 0x3503, 0x3617, 0x350c, 0x3509, 0x350c, 0x3503, 0x3503, + 0x3509, 0x3506, 0x3506, 0x3509, 0x361a, 0x0002, 0x006e, 0x0084, + 0x0003, 0x0072, 0x0000, 0x007b, 0x0007, 0x003f, 0x1219, 0x1226, + 0x123b, 0x124a, 0x1257, 0x126a, 0x1273, 0x0007, 0x003f, 0x127e, + 0x128d, 0x123b, 0x124a, 0x1257, 0x126a, 0x1273, 0x0002, 0x0000, + 0x0087, 0x0007, 0x0014, 0x3509, 0x361d, 0x3620, 0x3620, 0x3620, + 0x3503, 0x3620, 0x0001, 0x0092, 0x0003, 0x0096, 0x0000, 0x009d, + // Entry 2FBC0 - 2FBFF + 0x0005, 0x003f, 0xffff, 0x12a4, 0x12af, 0x12c7, 0x12df, 0x0005, + 0x003f, 0xffff, 0x12f7, 0x12af, 0x12c7, 0x12df, 0x0003, 0x00ae, + 0x0000, 0x00a8, 0x0001, 0x00aa, 0x0002, 0x003f, 0x1311, 0x1325, + 0x0001, 0x00b0, 0x0002, 0x003f, 0x133b, 0x1345, 0x0004, 0x00c2, + 0x00bc, 0x00b9, 0x00bf, 0x0001, 0x000c, 0x03c9, 0x0001, 0x000c, + 0x03d9, 0x0001, 0x000c, 0x03e3, 0x0001, 0x000c, 0x03ec, 0x0004, + 0x00d3, 0x00cd, 0x00ca, 0x00d0, 0x0001, 0x0002, 0x04e3, 0x0001, + 0x0002, 0x04f2, 0x0001, 0x0002, 0x04fe, 0x0001, 0x0002, 0x0508, + // Entry 2FC00 - 2FC3F + 0x0004, 0x00e4, 0x00de, 0x00db, 0x00e1, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x00e9, 0x0001, 0x00eb, 0x0003, 0x0000, 0x0000, + 0x00ef, 0x000d, 0x0003, 0xffff, 0x04dd, 0x04e6, 0x22a1, 0x22b7, + 0x220a, 0x2220, 0x0545, 0x054c, 0x0557, 0x0562, 0x22cf, 0x22df, + 0x0040, 0x013f, 0x0000, 0x0000, 0x0144, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0149, 0x0000, 0x0000, 0x014e, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0153, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 2FC40 - 2FC7F + 0x0000, 0x015e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0163, 0x0000, 0x0168, + 0x0000, 0x0000, 0x016d, 0x0000, 0x0000, 0x0172, 0x0000, 0x0000, + 0x0177, 0x0001, 0x0141, 0x0001, 0x003f, 0x134f, 0x0001, 0x0146, + 0x0001, 0x003f, 0x1356, 0x0001, 0x014b, 0x0001, 0x003f, 0x135d, + 0x0001, 0x0150, 0x0001, 0x003f, 0x1368, 0x0002, 0x0156, 0x0159, + // Entry 2FC80 - 2FCBF + 0x0001, 0x003f, 0x1373, 0x0003, 0x003f, 0x137a, 0x1383, 0x138a, + 0x0001, 0x0160, 0x0001, 0x003f, 0x1393, 0x0001, 0x0165, 0x0001, + 0x003f, 0x13a5, 0x0001, 0x016a, 0x0001, 0x003f, 0x13b3, 0x0001, + 0x016f, 0x0001, 0x003f, 0x13c2, 0x0001, 0x0174, 0x0001, 0x003f, + 0x13cd, 0x0001, 0x0179, 0x0001, 0x003f, 0x13dc, 0x0004, 0x0181, + 0x0000, 0x0185, 0x0190, 0x0002, 0x0000, 0x1dc7, 0x2b8e, 0x0002, + 0x0000, 0x0188, 0x0002, 0x0000, 0x018b, 0x0003, 0x003f, 0xffff, + 0x13e3, 0x1408, 0x0002, 0x0000, 0x0193, 0x0003, 0x0197, 0x02d7, + // Entry 2FCC0 - 2FCFF + 0x0237, 0x009e, 0x003f, 0xffff, 0xffff, 0xffff, 0xffff, 0x151c, + 0x15a5, 0x168d, 0x16fb, 0x175d, 0x17bf, 0x182d, 0x189b, 0xffff, + 0x19dd, 0x1a57, 0x1ad7, 0x1b78, 0x1bec, 0x1c6c, 0x1d0d, 0x1dcf, + 0x1e70, 0x1f15, 0x1f8f, 0x1ff5, 0xffff, 0xffff, 0x20a3, 0xffff, + 0x214e, 0xffff, 0x21d9, 0x2241, 0x2297, 0x22f9, 0xffff, 0xffff, + 0x23b4, 0x2428, 0x24b2, 0xffff, 0xffff, 0xffff, 0x257d, 0xffff, + 0x2601, 0x2684, 0xffff, 0x2707, 0x2792, 0x27fa, 0xffff, 0xffff, + 0xffff, 0xffff, 0x28ec, 0xffff, 0xffff, 0x29b5, 0x2a5f, 0xffff, + // Entry 2FD00 - 2FD3F + 0xffff, 0x2b5c, 0x2c03, 0x2c7c, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2dbd, 0x2e2b, 0x2e99, 0x2f13, 0x2f7b, 0xffff, + 0xffff, 0x3047, 0xffff, 0x30c7, 0xffff, 0xffff, 0x31b0, 0xffff, + 0x3284, 0xffff, 0xffff, 0xffff, 0xffff, 0x336d, 0xffff, 0xffff, + 0xffff, 0x33eb, 0x345f, 0xffff, 0xffff, 0xffff, 0x350f, 0x35a4, + 0x361c, 0xffff, 0xffff, 0x36e2, 0x3773, 0x37f3, 0x384f, 0xffff, + 0xffff, 0x38ff, 0x396d, 0x39c9, 0xffff, 0x3a6c, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x3bfe, 0x3c72, 0x3cd4, 0xffff, 0xffff, + // Entry 2FD40 - 2FD7F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x3e4f, 0xffff, 0x3ecb, 0xffff, 0x3f73, 0x3fed, 0x4071, 0xffff, + 0x410f, 0x418f, 0xffff, 0xffff, 0xffff, 0x426e, 0x42d8, 0xffff, + 0xffff, 0x142b, 0x1619, 0x190d, 0x1975, 0xffff, 0xffff, 0x321c, + 0x3b5a, 0x009e, 0x003f, 0x148d, 0x14ad, 0x14d2, 0x14f7, 0x1541, + 0x15c1, 0x16a9, 0x1711, 0x1773, 0x17d9, 0x1847, 0x18b9, 0xffff, + 0x19fb, 0x1a79, 0x1b04, 0x1b96, 0x1c0c, 0x1c97, 0x1d43, 0x1dfa, + 0x1e9b, 0x1f35, 0x1fab, 0x2015, 0x206f, 0x2087, 0x20c3, 0x211d, + // Entry 2FD80 - 2FDBF + 0x2169, 0x21b0, 0x21f3, 0x2255, 0x22ad, 0x2319, 0x2373, 0x238d, + 0x23d2, 0x244b, 0x24ca, 0x251a, 0x2530, 0x255a, 0x2597, 0x25e5, + 0x2624, 0x26a7, 0xffff, 0x272c, 0x27ac, 0x2810, 0x2856, 0x2883, + 0x28aa, 0x28ce, 0x290c, 0x2966, 0x298d, 0x29e5, 0x2a8f, 0x2b21, + 0x2b44, 0x2b8b, 0x2c22, 0x2c90, 0x2cd2, 0x2ce7, 0x2d12, 0x2d32, + 0x2d5f, 0x2d8e, 0x2dd9, 0x2e47, 0x2eb7, 0x2f2b, 0x2f97, 0x2fe9, + 0x3018, 0x305f, 0x30af, 0x30ed, 0x3153, 0x3189, 0x31cd, 0xffff, + 0x329e, 0x32ec, 0x3308, 0x3326, 0x3346, 0x3387, 0x33d5, 0xffff, + // Entry 2FDC0 - 2FDFF + 0xffff, 0x3409, 0x3477, 0x34bd, 0x34d9, 0x34f5, 0x3538, 0x35c2, + 0x3643, 0x36b2, 0x36c8, 0x36fc, 0x3795, 0x3809, 0x386b, 0x38bd, + 0x38d3, 0x391b, 0x3983, 0x39e9, 0x3a43, 0x3aa0, 0x3b28, 0x3b44, + 0xffff, 0x3bc2, 0x3be2, 0x3c1c, 0x3c8a, 0x3cec, 0x3d36, 0x3d52, + 0x3d72, 0x3da6, 0x3dcd, 0x3de7, 0x3dfd, 0xffff, 0x3e15, 0x3e35, + 0x3e69, 0x3eb7, 0x3ef1, 0x3f57, 0x3f93, 0x400f, 0x4091, 0x40eb, + 0x4131, 0x41ad, 0x4203, 0x421b, 0x423c, 0x4288, 0x4300, 0x2b09, + 0x374a, 0x1443, 0x1637, 0x1927, 0x198f, 0xffff, 0x3171, 0x3236, + // Entry 2FE00 - 2FE3F + 0x3b74, 0x009e, 0x003f, 0xffff, 0xffff, 0xffff, 0xffff, 0x1575, + 0x15ec, 0x16d4, 0x1736, 0x1798, 0x1802, 0x1870, 0x18e6, 0xffff, + 0x1a28, 0x1aaa, 0x1b40, 0x1bc3, 0x1c3b, 0x1cd1, 0x1d88, 0x1e34, + 0x1ed7, 0x1f64, 0x1fd6, 0x2044, 0xffff, 0xffff, 0x20f2, 0xffff, + 0x2193, 0xffff, 0x221c, 0x2278, 0x22d2, 0x2348, 0xffff, 0xffff, + 0x23ff, 0x247d, 0x24f1, 0xffff, 0xffff, 0xffff, 0x25c0, 0xffff, + 0x2656, 0x26d9, 0xffff, 0x2760, 0x27d5, 0x2835, 0xffff, 0xffff, + 0xffff, 0xffff, 0x293b, 0xffff, 0xffff, 0x2a24, 0x2ace, 0xffff, + // Entry 2FE40 - 2FE7F + 0xffff, 0x2bc9, 0x2c50, 0x2cb3, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2e04, 0x2e72, 0x2ee4, 0x2f52, 0x2fc2, 0xffff, + 0xffff, 0x3086, 0xffff, 0x3122, 0xffff, 0xffff, 0x31f9, 0xffff, + 0x32c7, 0xffff, 0xffff, 0xffff, 0xffff, 0x33b0, 0xffff, 0xffff, + 0xffff, 0x3436, 0x349c, 0xffff, 0xffff, 0xffff, 0x3570, 0x35ef, + 0x3679, 0xffff, 0xffff, 0x3725, 0x37c6, 0x382e, 0x3896, 0xffff, + 0xffff, 0x3946, 0x39a8, 0x3a18, 0xffff, 0x3ae3, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x3c49, 0x3cb1, 0x3d13, 0xffff, 0xffff, + // Entry 2FE80 - 2FEBF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x3e92, 0xffff, 0x3f26, 0xffff, 0x3fc2, 0x4040, 0x40c0, 0xffff, + 0x4162, 0x41da, 0xffff, 0xffff, 0xffff, 0x42b1, 0x4337, 0xffff, + 0xffff, 0x146a, 0x1664, 0x1950, 0x19b8, 0xffff, 0xffff, 0x325f, + 0x3b9d, 0x0002, 0x0003, 0x00e9, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, 0x0023, + 0x001d, 0x001a, 0x0020, 0x0001, 0x0006, 0x000d, 0x0001, 0x0002, + // Entry 2FEC0 - 2FEFF + 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0002, 0x0587, 0x0008, + 0x002f, 0x0066, 0x008b, 0x009f, 0x00b7, 0x00c7, 0x00d8, 0x0000, + 0x0002, 0x0032, 0x0054, 0x0003, 0x0036, 0x0000, 0x0045, 0x000d, + 0x0006, 0xffff, 0x001e, 0x432b, 0x432f, 0x42a5, 0x42a9, 0x42ad, + 0x4333, 0x4337, 0x433b, 0x43a9, 0x433f, 0x422c, 0x000d, 0x0040, + 0xffff, 0x0000, 0x0008, 0x0011, 0x0017, 0x001e, 0x0022, 0x0027, + 0x002d, 0x0034, 0x003d, 0x0044, 0x004c, 0x0002, 0x0000, 0x0057, + 0x000d, 0x0000, 0xffff, 0x257b, 0x2b4e, 0x2b3c, 0x2b42, 0x2b3c, + // Entry 2FF00 - 2FF3F + 0x257b, 0x257b, 0x2b42, 0x2b3a, 0x2b50, 0x2b40, 0x2b3e, 0x0002, + 0x0069, 0x007f, 0x0003, 0x006d, 0x0000, 0x0076, 0x0007, 0x0006, + 0x009e, 0x00a2, 0x43ad, 0x00aa, 0x437d, 0x4381, 0x00b6, 0x0007, + 0x0040, 0x0054, 0x005d, 0x0067, 0x006f, 0x0079, 0x0082, 0x0089, + 0x0002, 0x0000, 0x0082, 0x0007, 0x0000, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x2b42, 0x204d, 0x0033, 0x0001, 0x008d, 0x0003, 0x0091, + 0x0000, 0x0098, 0x0005, 0x0009, 0xffff, 0x025a, 0x025d, 0x0260, + 0x0263, 0x0005, 0x0040, 0xffff, 0x0093, 0x00a0, 0x00ad, 0x00bf, + // Entry 2FF40 - 2FF7F + 0x0001, 0x00a1, 0x0003, 0x00a5, 0x0000, 0x00ae, 0x0002, 0x00a8, + 0x00ab, 0x0001, 0x0040, 0x00cb, 0x0001, 0x0040, 0x00d1, 0x0002, + 0x00b1, 0x00b4, 0x0001, 0x0040, 0x00cb, 0x0001, 0x0040, 0x00d1, + 0x0003, 0x00c1, 0x0000, 0x00bb, 0x0001, 0x00bd, 0x0002, 0x0040, + 0x00da, 0x00ea, 0x0001, 0x00c3, 0x0002, 0x0017, 0x01f4, 0x01f7, + 0x0004, 0x00d5, 0x00cf, 0x00cc, 0x00d2, 0x0001, 0x0006, 0x015b, + 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, 0x0002, + 0x08e8, 0x0004, 0x00e6, 0x00e0, 0x00dd, 0x00e3, 0x0001, 0x0000, + // Entry 2FF80 - 2FFBF + 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, + 0x0000, 0x0546, 0x0040, 0x012a, 0x0000, 0x0000, 0x012f, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0134, 0x0000, 0x0000, 0x0139, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x013e, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0149, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x014e, + // Entry 2FFC0 - 2FFFF + 0x0000, 0x0153, 0x0000, 0x0000, 0x0158, 0x0000, 0x0000, 0x015d, + 0x0000, 0x0000, 0x0162, 0x0001, 0x012c, 0x0001, 0x0040, 0x00fa, + 0x0001, 0x0131, 0x0001, 0x0040, 0x0100, 0x0001, 0x0136, 0x0001, + 0x0040, 0x010a, 0x0001, 0x013b, 0x0001, 0x0040, 0x0113, 0x0002, + 0x0141, 0x0144, 0x0001, 0x0040, 0x0118, 0x0003, 0x0040, 0x011d, + 0x0122, 0x0129, 0x0001, 0x014b, 0x0001, 0x0040, 0x012f, 0x0001, + 0x0150, 0x0001, 0x0040, 0x013f, 0x0001, 0x0155, 0x0001, 0x0009, + 0x0308, 0x0001, 0x015a, 0x0001, 0x0006, 0x01bc, 0x0001, 0x015f, + // Entry 30000 - 3003F + 0x0001, 0x0009, 0x030c, 0x0001, 0x0164, 0x0001, 0x0040, 0x0147, + 0x0002, 0x0003, 0x00d6, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, 0x0023, 0x001d, + 0x001a, 0x0020, 0x0001, 0x0002, 0x0000, 0x0001, 0x0002, 0x0010, + 0x0001, 0x0002, 0x001b, 0x0001, 0x0000, 0x240c, 0x0008, 0x002f, + 0x0053, 0x0078, 0x008c, 0x00a4, 0x00b4, 0x00c5, 0x0000, 0x0001, + 0x0031, 0x0003, 0x0035, 0x0000, 0x0044, 0x000d, 0x0040, 0xffff, + // Entry 30040 - 3007F + 0x014e, 0x0152, 0x0156, 0x015a, 0x015e, 0x0162, 0x0166, 0x016a, + 0x016e, 0x0172, 0x0177, 0x017c, 0x000d, 0x0040, 0xffff, 0x0181, + 0x0196, 0x01ab, 0x01be, 0x01cf, 0x01e2, 0x01f8, 0x020f, 0x0224, + 0x0239, 0x024c, 0x0269, 0x0002, 0x0056, 0x006c, 0x0003, 0x005a, + 0x0000, 0x0063, 0x0007, 0x0021, 0x00d9, 0x3946, 0x394b, 0x394f, + 0x3954, 0x395a, 0x395f, 0x0007, 0x0040, 0x0287, 0x0291, 0x0299, + 0x02a0, 0x02ab, 0x02b4, 0x02bc, 0x0002, 0x0000, 0x006f, 0x0007, + 0x0000, 0x2002, 0x200a, 0x1f9a, 0x1f9a, 0x2142, 0x2142, 0x2002, + // Entry 30080 - 300BF + 0x0001, 0x007a, 0x0003, 0x007e, 0x0000, 0x0085, 0x0005, 0x0040, + 0xffff, 0x02c3, 0x02c6, 0x02c9, 0x02cc, 0x0005, 0x0040, 0xffff, + 0x02cf, 0x02f2, 0x0311, 0x032e, 0x0001, 0x008e, 0x0003, 0x0092, + 0x0000, 0x009b, 0x0002, 0x0095, 0x0098, 0x0001, 0x0040, 0x0349, + 0x0001, 0x0040, 0x0353, 0x0002, 0x009e, 0x00a1, 0x0001, 0x0040, + 0x0349, 0x0001, 0x0040, 0x0353, 0x0003, 0x00ae, 0x0000, 0x00a8, + 0x0001, 0x00aa, 0x0002, 0x0040, 0x035e, 0x0376, 0x0001, 0x00b0, + 0x0002, 0x0040, 0x0390, 0x0395, 0x0004, 0x00c2, 0x00bc, 0x00b9, + // Entry 300C0 - 300FF + 0x00bf, 0x0001, 0x0002, 0x0025, 0x0001, 0x0002, 0x0033, 0x0001, + 0x0002, 0x003c, 0x0001, 0x0002, 0x028b, 0x0004, 0x00d3, 0x00cd, + 0x00ca, 0x00d0, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, + 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0040, 0x0117, + 0x0000, 0x0000, 0x011c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0121, 0x0000, 0x0000, 0x0126, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x012b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0136, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 30100 - 3013F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x013b, 0x0000, 0x0140, 0x0000, 0x0000, + 0x0145, 0x0000, 0x0000, 0x014a, 0x0000, 0x0000, 0x014f, 0x0001, + 0x0119, 0x0001, 0x0040, 0x039a, 0x0001, 0x011e, 0x0001, 0x0040, + 0x03a5, 0x0001, 0x0123, 0x0001, 0x0040, 0x03aa, 0x0001, 0x0128, + 0x0001, 0x0040, 0x03b2, 0x0002, 0x012e, 0x0131, 0x0001, 0x0040, + 0x03bc, 0x0003, 0x0040, 0x03c3, 0x03ce, 0x03d9, 0x0001, 0x0138, + // Entry 30140 - 3017F + 0x0001, 0x0040, 0x03e4, 0x0001, 0x013d, 0x0001, 0x0040, 0x03f9, + 0x0001, 0x0142, 0x0001, 0x0040, 0x0410, 0x0001, 0x0147, 0x0001, + 0x0040, 0x041a, 0x0001, 0x014c, 0x0001, 0x0040, 0x0422, 0x0001, + 0x0151, 0x0001, 0x0040, 0x0427, 0x0003, 0x0004, 0x015b, 0x0288, + 0x0008, 0x000d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x001b, + 0x0035, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0014, + 0x0003, 0x0000, 0x0000, 0x0018, 0x0001, 0x0014, 0x0904, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0024, 0x0000, 0x0000, + // Entry 30180 - 301BF + 0x0004, 0x0032, 0x002c, 0x0029, 0x002f, 0x0001, 0x0040, 0x042d, + 0x0001, 0x0014, 0x035a, 0x0001, 0x0040, 0x0445, 0x0001, 0x0040, + 0x0451, 0x0008, 0x003e, 0x0084, 0x00c0, 0x00ee, 0x0114, 0x0139, + 0x014a, 0x0000, 0x0002, 0x0041, 0x0063, 0x0003, 0x0045, 0x0000, + 0x0054, 0x000d, 0x0006, 0xffff, 0x001e, 0x43b1, 0x43b6, 0x42a5, + 0x4389, 0x42ad, 0x4333, 0x43bb, 0x43bf, 0x43a9, 0x433f, 0x4271, + 0x000d, 0x0040, 0xffff, 0x045f, 0x0467, 0x0470, 0x0477, 0x047e, + 0x0482, 0x0488, 0x048e, 0x0495, 0x04a0, 0x04a9, 0x04b3, 0x0002, + // Entry 301C0 - 301FF + 0x0066, 0x0075, 0x000d, 0x0000, 0xffff, 0x1e22, 0x2b99, 0x2b9f, + 0x23e4, 0x2ba5, 0x2ba9, 0x2bae, 0x2bb3, 0x2bb8, 0x2bbe, 0x2bc3, + 0x2bc8, 0x000d, 0x0000, 0xffff, 0x257b, 0x2b4e, 0x2b3c, 0x2b42, + 0x2b3c, 0x257b, 0x257b, 0x2b50, 0x2b3a, 0x2b50, 0x2b40, 0x2b3e, + 0x0002, 0x0087, 0x00a8, 0x0005, 0x008d, 0x0000, 0x009f, 0x0000, + 0x0096, 0x0007, 0x001d, 0x0108, 0x2206, 0x220a, 0x220e, 0x21ef, + 0x21f3, 0x21f7, 0x0007, 0x0017, 0x2d55, 0x0420, 0x0423, 0x2e2a, + 0x2e2d, 0x042c, 0x2e30, 0x0007, 0x0040, 0x04bd, 0x04c7, 0x04d1, + // Entry 30200 - 3023F + 0x04dc, 0x04e4, 0x04f1, 0x04fb, 0x0005, 0x0000, 0x00ae, 0x0000, + 0x0000, 0x00b7, 0x0007, 0x0000, 0x2b3a, 0x2b3c, 0x2b3e, 0x2b3c, + 0x2b3e, 0x2b4e, 0x2b3a, 0x0007, 0x0017, 0x2d55, 0x0420, 0x0423, + 0x2e2a, 0x2e2d, 0x042c, 0x2e30, 0x0002, 0x00c3, 0x00dc, 0x0003, + 0x00c7, 0x00ce, 0x00d5, 0x0005, 0x0040, 0xffff, 0x0505, 0x050a, + 0x050f, 0x0514, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x0005, 0x0040, 0xffff, 0x0519, 0x0525, 0x0531, 0x053d, + 0x0003, 0x0000, 0x00e0, 0x00e7, 0x0005, 0x0040, 0xffff, 0x0549, + // Entry 30240 - 3027F + 0x054c, 0x054f, 0x0552, 0x0005, 0x0040, 0xffff, 0x0519, 0x0525, + 0x0531, 0x053d, 0x0002, 0x00f1, 0x0107, 0x0003, 0x00f5, 0x0000, + 0x00fe, 0x0002, 0x00f8, 0x00fb, 0x0001, 0x0040, 0x0555, 0x0001, + 0x0040, 0x055a, 0x0002, 0x0101, 0x0104, 0x0001, 0x0040, 0x055f, + 0x0001, 0x0040, 0x0571, 0x0003, 0x0000, 0x0000, 0x010b, 0x0002, + 0x010e, 0x0111, 0x0001, 0x0040, 0x0582, 0x0001, 0x0040, 0x058f, + 0x0003, 0x0123, 0x012e, 0x0118, 0x0002, 0x011b, 0x011f, 0x0002, + 0x0040, 0x059b, 0x05ce, 0x0002, 0x0040, 0x05a8, 0x05da, 0x0002, + // Entry 30280 - 302BF + 0x0126, 0x012a, 0x0002, 0x0017, 0x04db, 0x04fc, 0x0002, 0x0040, + 0x05fe, 0x0605, 0x0002, 0x0131, 0x0135, 0x0002, 0x0040, 0x060b, + 0x060e, 0x0002, 0x002a, 0x00e4, 0x00e8, 0x0004, 0x0147, 0x0141, + 0x013e, 0x0144, 0x0001, 0x0040, 0x0611, 0x0001, 0x0014, 0x0792, + 0x0001, 0x0040, 0x0627, 0x0001, 0x0014, 0x038d, 0x0004, 0x0158, + 0x0152, 0x014f, 0x0155, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, + 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0040, + 0x019c, 0x0000, 0x0000, 0x01a1, 0x01ba, 0x01bf, 0x01c4, 0x01c9, + // Entry 302C0 - 302FF + 0x01ce, 0x01d3, 0x01de, 0x01e3, 0x01e8, 0x01f3, 0x01f8, 0x0000, + 0x0000, 0x0000, 0x01fd, 0x020a, 0x020f, 0x0000, 0x0000, 0x0000, + 0x0214, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0219, 0x0000, + 0x0000, 0x0221, 0x0000, 0x0000, 0x0229, 0x0000, 0x0000, 0x0231, + 0x0000, 0x0000, 0x0239, 0x0000, 0x0000, 0x0241, 0x0000, 0x0000, + 0x0249, 0x0000, 0x0000, 0x0000, 0x0251, 0x0000, 0x0256, 0x025b, + 0x0260, 0x0265, 0x026a, 0x026f, 0x0274, 0x0279, 0x027e, 0x0283, + 0x0001, 0x019e, 0x0001, 0x0040, 0x0631, 0x0003, 0x01a5, 0x01a8, + // Entry 30300 - 3033F + 0x01ad, 0x0001, 0x0040, 0x0637, 0x0003, 0x0040, 0x063c, 0x0646, + 0x0650, 0x0002, 0x01b0, 0x01b5, 0x0003, 0x0040, 0x0675, 0x0669, + 0x065a, 0x0003, 0x0040, 0x06a2, 0x0694, 0x0682, 0x0001, 0x01bc, + 0x0001, 0x0040, 0x06b1, 0x0001, 0x01c1, 0x0001, 0x0040, 0x06b1, + 0x0001, 0x01c6, 0x0001, 0x0040, 0x06b4, 0x0001, 0x01cb, 0x0001, + 0x0040, 0x06bd, 0x0001, 0x01d0, 0x0001, 0x0040, 0x06bd, 0x0002, + 0x01d6, 0x01d9, 0x0001, 0x0040, 0x06c0, 0x0003, 0x0040, 0x06c6, + 0x06d4, 0x06e0, 0x0001, 0x01e0, 0x0001, 0x0040, 0x06c0, 0x0001, + // Entry 30340 - 3037F + 0x01e5, 0x0001, 0x001d, 0x010c, 0x0002, 0x01eb, 0x01ee, 0x0001, + 0x0040, 0x06ef, 0x0003, 0x0040, 0x06f4, 0x06fe, 0x0706, 0x0001, + 0x01f5, 0x0001, 0x001d, 0x0113, 0x0001, 0x01fa, 0x0001, 0x001d, + 0x0113, 0x0002, 0x0200, 0x0203, 0x0001, 0x0040, 0x0715, 0x0005, + 0x0040, 0x0727, 0x072f, 0x0735, 0x071b, 0x073b, 0x0001, 0x020c, + 0x0001, 0x0040, 0x0747, 0x0001, 0x0211, 0x0001, 0x0040, 0x0747, + 0x0001, 0x0216, 0x0001, 0x0040, 0x074a, 0x0002, 0x0000, 0x021c, + 0x0003, 0x0040, 0x0755, 0x076c, 0x0782, 0x0002, 0x0000, 0x0224, + // Entry 30380 - 303BF + 0x0003, 0x0040, 0x079b, 0x07b2, 0x07c8, 0x0002, 0x0000, 0x022c, + 0x0003, 0x0040, 0x07e1, 0x07f9, 0x0810, 0x0002, 0x0000, 0x0234, + 0x0003, 0x0040, 0x082a, 0x083f, 0x0853, 0x0002, 0x0000, 0x023c, + 0x0003, 0x0040, 0x086a, 0x0884, 0x089d, 0x0002, 0x0000, 0x0244, + 0x0003, 0x0040, 0x08b9, 0x08d0, 0x08e6, 0x0002, 0x0000, 0x024c, + 0x0003, 0x0040, 0x08ff, 0x0916, 0x092c, 0x0001, 0x0253, 0x0001, + 0x0040, 0x0945, 0x0001, 0x0258, 0x0001, 0x002a, 0x038d, 0x0001, + 0x025d, 0x0001, 0x0017, 0x111a, 0x0001, 0x0262, 0x0001, 0x0040, + // Entry 303C0 - 303FF + 0x094f, 0x0001, 0x0267, 0x0001, 0x0040, 0x0952, 0x0001, 0x026c, + 0x0001, 0x0001, 0x07c5, 0x0001, 0x0271, 0x0001, 0x0029, 0x006c, + 0x0001, 0x0276, 0x0001, 0x0040, 0x0959, 0x0001, 0x027b, 0x0001, + 0x0001, 0x083e, 0x0001, 0x0280, 0x0001, 0x0029, 0x0072, 0x0001, + 0x0285, 0x0001, 0x0040, 0x0960, 0x0004, 0x028d, 0x0291, 0x0296, + 0x02a1, 0x0002, 0x0000, 0x1dc7, 0x2b8e, 0x0003, 0x0040, 0x0969, + 0x0976, 0x0989, 0x0002, 0x0000, 0x0299, 0x0002, 0x0000, 0x029c, + 0x0003, 0x0040, 0xffff, 0x09a0, 0x09c0, 0x0002, 0x03e0, 0x02a4, + // Entry 30400 - 3043F + 0x0003, 0x0326, 0x0383, 0x02a8, 0x007c, 0x0040, 0xffff, 0x09d7, + 0x09f4, 0x0a0c, 0x0a3f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0a98, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0ae6, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0b40, 0x0b9b, 0xffff, 0x0bf1, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0c32, + // Entry 30440 - 3047F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0c4e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0c7f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0cb8, 0xffff, 0xffff, 0xffff, + // Entry 30480 - 304BF + 0xffff, 0x0cc9, 0x005b, 0x0040, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0a25, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0a86, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0acf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0b27, 0x0b85, 0xffff, 0x0bda, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 304C0 - 304FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0c6c, 0x005b, + 0x0040, 0xffff, 0xffff, 0xffff, 0xffff, 0x0a66, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0ab7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0b0a, 0xffff, + // Entry 30500 - 3053F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0b66, 0x0bbe, + 0xffff, 0x0c15, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0c9f, 0x0003, 0x03e4, 0x044a, 0x0417, + // Entry 30540 - 3057F + 0x0031, 0x0017, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1d16, + 0x1d6a, 0xffff, 0x1dd4, 0x0031, 0x0017, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 30580 - 305BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1d16, 0x1d6a, 0xffff, 0x1dd4, 0x0031, 0x0017, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 305C0 - 305FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1d1a, 0x1d6e, 0xffff, + 0x1dd8, 0x0003, 0x0004, 0x00ab, 0x0106, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0025, 0x0006, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0014, 0x0004, 0x0022, 0x001c, + 0x0019, 0x001f, 0x0001, 0x0002, 0x0000, 0x0001, 0x0002, 0x0010, + 0x0001, 0x0002, 0x001b, 0x0001, 0x0002, 0x0587, 0x0007, 0x002d, + // Entry 30600 - 3063F + 0x0051, 0x0000, 0x0069, 0x0081, 0x0089, 0x009a, 0x0001, 0x002f, + 0x0003, 0x0033, 0x0000, 0x0042, 0x000d, 0x0040, 0xffff, 0x0ce1, + 0x0ce5, 0x0ce9, 0x0ced, 0x0cf1, 0x0cf4, 0x0cf8, 0x0cfc, 0x0d00, + 0x0d04, 0x0d08, 0x0d0b, 0x000d, 0x0040, 0xffff, 0x0d0f, 0x0d1a, + 0x0d26, 0x0d31, 0x0d3b, 0x0d42, 0x0d4f, 0x0d5d, 0x0d65, 0x0d73, + 0x0d7d, 0x0d84, 0x0001, 0x0053, 0x0003, 0x0057, 0x0000, 0x0060, + 0x0007, 0x000b, 0x09c9, 0x2770, 0x2774, 0x2778, 0x277c, 0x2755, + 0x2742, 0x0007, 0x0040, 0x0d91, 0x0d98, 0x0d9f, 0x0da9, 0x0db3, + // Entry 30640 - 3067F + 0x0dba, 0x0dc4, 0x0001, 0x006b, 0x0003, 0x006f, 0x0000, 0x0078, + 0x0002, 0x0072, 0x0075, 0x0001, 0x001d, 0x050b, 0x0001, 0x001d, + 0x0510, 0x0002, 0x007b, 0x007e, 0x0001, 0x001d, 0x050b, 0x0001, + 0x001d, 0x0510, 0x0001, 0x0083, 0x0001, 0x0085, 0x0002, 0x0027, + 0x0196, 0x336b, 0x0004, 0x0097, 0x0091, 0x008e, 0x0094, 0x0001, + 0x0002, 0x0025, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, + 0x0001, 0x0002, 0x08e8, 0x0004, 0x00a8, 0x00a2, 0x009f, 0x00a5, + 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, + // Entry 30680 - 306BF + 0x053d, 0x0001, 0x0000, 0x0546, 0x0037, 0x0000, 0x0000, 0x0000, + 0x00e3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00e8, 0x0000, + 0x0000, 0x00ed, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00f2, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00f7, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x00fc, 0x0000, 0x0101, 0x0001, 0x00e5, 0x0001, 0x0040, + // Entry 306C0 - 306FF + 0x0dce, 0x0001, 0x00ea, 0x0001, 0x0040, 0x0dd6, 0x0001, 0x00ef, + 0x0001, 0x0040, 0x0dda, 0x0001, 0x00f4, 0x0001, 0x0040, 0x0de2, + 0x0001, 0x00f9, 0x0001, 0x0040, 0x0de7, 0x0001, 0x00fe, 0x0001, + 0x0007, 0x0892, 0x0001, 0x0103, 0x0001, 0x0040, 0x0df7, 0x0004, + 0x0000, 0x0000, 0x0000, 0x010b, 0x0001, 0x010d, 0x0003, 0x0111, + 0x0180, 0x0144, 0x0031, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 30700 - 3073F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x24ae, 0x24b7, 0xffff, 0x24c0, 0x003a, 0x0007, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 30740 - 3077F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x24ae, 0x24b7, 0xffff, 0x24c0, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x24e1, 0x0031, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 30780 - 307BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x24b2, 0x24bb, 0xffff, 0x24c4, 0x0003, 0x0004, 0x0250, 0x06b9, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, + 0x0038, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, + 0x0000, 0x0027, 0x0004, 0x0024, 0x001e, 0x001b, 0x0021, 0x0001, + 0x0040, 0x0dfb, 0x0001, 0x0040, 0x0e12, 0x0001, 0x0017, 0x0372, + 0x0001, 0x001f, 0x0b31, 0x0004, 0x0035, 0x002f, 0x002c, 0x0032, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + // Entry 307C0 - 307FF + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x0041, 0x00a6, 0x00fd, + 0x0132, 0x0203, 0x021d, 0x022e, 0x023f, 0x0002, 0x0044, 0x0075, + 0x0003, 0x0048, 0x0057, 0x0066, 0x000d, 0x0040, 0xffff, 0x0e23, + 0x0e2b, 0x0e33, 0x0e3b, 0x0e43, 0x0e4a, 0x0e52, 0x0e5a, 0x0e62, + 0x0e6a, 0x0e72, 0x0e7a, 0x000d, 0x0012, 0xffff, 0x0054, 0x3a36, + 0x3a39, 0x3a3c, 0x3a39, 0x0060, 0x0060, 0x3a3c, 0x3a3f, 0x0066, + 0x3a42, 0x3a45, 0x000d, 0x0012, 0xffff, 0x006f, 0x007c, 0x008b, + 0x0094, 0x3a48, 0x00a1, 0x00aa, 0x00b3, 0x00c0, 0x00d1, 0x00e0, + // Entry 30800 - 3083F + 0x00ed, 0x0003, 0x0079, 0x0088, 0x0097, 0x000d, 0x0040, 0xffff, + 0x0e82, 0x0e89, 0x0e90, 0x0e97, 0x0e9e, 0x0ea5, 0x0eac, 0x0eb3, + 0x0eba, 0x0ec1, 0x0ec8, 0x0ecf, 0x000d, 0x0012, 0xffff, 0x0054, + 0x3a36, 0x3a39, 0x3a3c, 0x3a39, 0x0060, 0x0060, 0x3a3c, 0x3a3f, + 0x0066, 0x3a42, 0x3a45, 0x000d, 0x0040, 0xffff, 0x0ed6, 0x0ee3, + 0x0ef2, 0x0efb, 0x0e9e, 0x0f08, 0x0f11, 0x0f1a, 0x0f27, 0x0f38, + 0x0f47, 0x0f54, 0x0002, 0x00a9, 0x00d3, 0x0005, 0x00af, 0x00b8, + 0x00ca, 0x0000, 0x00c1, 0x0007, 0x0040, 0x0f63, 0x0f6b, 0x0f73, + // Entry 30840 - 3087F + 0x0f7d, 0x0f87, 0x0f91, 0x0f9a, 0x0007, 0x0039, 0x11a8, 0x2016, + 0x11a2, 0x11a2, 0x1365, 0x11a8, 0x2019, 0x0007, 0x0040, 0x0f63, + 0x0f6b, 0x0f73, 0x0f7d, 0x0f87, 0x0f91, 0x0f9a, 0x0007, 0x0040, + 0x0fa2, 0x0fb3, 0x0fc4, 0x0fd5, 0x0fe6, 0x0f91, 0x0ff7, 0x0005, + 0x00d9, 0x00e2, 0x00f4, 0x0000, 0x00eb, 0x0007, 0x0040, 0x0f63, + 0x0f6b, 0x0f73, 0x0f7d, 0x0f87, 0x0f91, 0x0f9a, 0x0007, 0x0039, + 0x11a8, 0x2016, 0x11a2, 0x11a2, 0x1365, 0x11a8, 0x2019, 0x0007, + 0x0040, 0x1004, 0x1009, 0x100f, 0x1015, 0x101b, 0x1021, 0x1027, + // Entry 30880 - 308BF + 0x0007, 0x0040, 0x0fa2, 0x0fb3, 0x0fc4, 0x0fd5, 0x0fe6, 0x0f91, + 0x0ff7, 0x0002, 0x0100, 0x0119, 0x0003, 0x0104, 0x010b, 0x0112, + 0x0005, 0x0040, 0xffff, 0x102d, 0x1037, 0x1041, 0x104b, 0x0005, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0040, + 0xffff, 0x1055, 0x1064, 0x1073, 0x1082, 0x0003, 0x011d, 0x0124, + 0x012b, 0x0005, 0x0040, 0xffff, 0x1091, 0x1097, 0x109d, 0x10a3, + 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, + 0x0040, 0xffff, 0x1055, 0x1064, 0x1073, 0x1082, 0x0002, 0x0135, + // Entry 308C0 - 308FF + 0x019c, 0x0003, 0x0139, 0x015a, 0x017b, 0x0008, 0x0145, 0x014b, + 0x0142, 0x014e, 0x0151, 0x0154, 0x0157, 0x0148, 0x0001, 0x0040, + 0x10a9, 0x0001, 0x0040, 0x10bd, 0x0001, 0x0040, 0x10c2, 0x0001, + 0x0040, 0x10d0, 0x0001, 0x0040, 0x10d5, 0x0001, 0x0040, 0x10eb, + 0x0001, 0x0040, 0x1103, 0x0001, 0x0040, 0x1112, 0x0008, 0x0166, + 0x016c, 0x0163, 0x016f, 0x0172, 0x0175, 0x0178, 0x0169, 0x0001, + 0x0040, 0x1126, 0x0001, 0x0040, 0x10bd, 0x0001, 0x0008, 0x4f28, + 0x0001, 0x0040, 0x10d0, 0x0001, 0x0040, 0x1134, 0x0001, 0x0040, + // Entry 30900 - 3093F + 0x1142, 0x0001, 0x0040, 0x1152, 0x0001, 0x0039, 0x1541, 0x0008, + 0x0187, 0x018d, 0x0184, 0x0190, 0x0193, 0x0196, 0x0199, 0x018a, + 0x0001, 0x0040, 0x10a9, 0x0001, 0x0040, 0x115b, 0x0001, 0x0040, + 0x10c2, 0x0001, 0x0040, 0x1166, 0x0001, 0x0040, 0x10d5, 0x0001, + 0x0040, 0x10eb, 0x0001, 0x0040, 0x1103, 0x0001, 0x0040, 0x1112, + 0x0003, 0x01a0, 0x01c1, 0x01e2, 0x0008, 0x01ac, 0x01b2, 0x01a9, + 0x01b5, 0x01b8, 0x01bb, 0x01be, 0x01af, 0x0001, 0x0040, 0x10a9, + 0x0001, 0x0040, 0x10bd, 0x0001, 0x0040, 0x10c2, 0x0001, 0x0040, + // Entry 30940 - 3097F + 0x10d0, 0x0001, 0x0040, 0x10d5, 0x0001, 0x0040, 0x10eb, 0x0001, + 0x0040, 0x1182, 0x0001, 0x0039, 0x1541, 0x0008, 0x01cd, 0x01d3, + 0x01ca, 0x01d6, 0x01d9, 0x01dc, 0x01df, 0x01d0, 0x0001, 0x0040, + 0x10a9, 0x0001, 0x0040, 0x10bd, 0x0001, 0x0040, 0x10c2, 0x0001, + 0x0040, 0x10d0, 0x0001, 0x0040, 0x10d5, 0x0001, 0x0040, 0x10eb, + 0x0001, 0x0040, 0x1182, 0x0001, 0x0039, 0x1541, 0x0008, 0x01ee, + 0x01f4, 0x01eb, 0x01f7, 0x01fa, 0x01fd, 0x0200, 0x01f1, 0x0001, + 0x0040, 0x10a9, 0x0001, 0x0040, 0x115b, 0x0001, 0x0040, 0x10c2, + // Entry 30980 - 309BF + 0x0001, 0x0040, 0x1166, 0x0001, 0x0040, 0x10d5, 0x0001, 0x0040, + 0x10eb, 0x0001, 0x0040, 0x1182, 0x0001, 0x0039, 0x1541, 0x0003, + 0x0211, 0x0217, 0x0207, 0x0002, 0x020a, 0x020e, 0x0002, 0x0040, + 0x1193, 0x11c4, 0x0001, 0x0040, 0x11ba, 0x0001, 0x0213, 0x0002, + 0x0040, 0x11ba, 0x11dc, 0x0001, 0x0219, 0x0002, 0x0040, 0x11ba, + 0x11dc, 0x0004, 0x022b, 0x0225, 0x0222, 0x0228, 0x0001, 0x0040, + 0x11e3, 0x0001, 0x0040, 0x11f9, 0x0001, 0x0040, 0x1209, 0x0001, + 0x0000, 0x2418, 0x0004, 0x023c, 0x0236, 0x0233, 0x0239, 0x0001, + // Entry 309C0 - 309FF + 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, + 0x0001, 0x0000, 0x0546, 0x0004, 0x024d, 0x0247, 0x0244, 0x024a, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0042, 0x0293, 0x0298, 0x029d, + 0x02a2, 0x02b9, 0x02d0, 0x02e7, 0x02fe, 0x0315, 0x032c, 0x0343, + 0x035a, 0x0371, 0x038c, 0x03a7, 0x03c2, 0x03c7, 0x03cc, 0x03d1, + 0x03ea, 0x0403, 0x041c, 0x0421, 0x0426, 0x042b, 0x0430, 0x0435, + 0x043a, 0x043f, 0x0444, 0x0449, 0x045d, 0x0471, 0x0485, 0x0499, + // Entry 30A00 - 30A3F + 0x04ad, 0x04c1, 0x04d5, 0x04e9, 0x04fd, 0x0511, 0x0525, 0x0539, + 0x054d, 0x0561, 0x0575, 0x0589, 0x059d, 0x05b1, 0x05c5, 0x05d9, + 0x05ed, 0x05f2, 0x05f7, 0x05fc, 0x0612, 0x0624, 0x0636, 0x064c, + 0x065e, 0x0670, 0x0686, 0x0698, 0x06aa, 0x06af, 0x06b4, 0x0001, + 0x0295, 0x0001, 0x0040, 0x1218, 0x0001, 0x029a, 0x0001, 0x0040, + 0x1218, 0x0001, 0x029f, 0x0001, 0x0040, 0x1218, 0x0003, 0x02a6, + 0x02a9, 0x02ae, 0x0001, 0x0039, 0x1615, 0x0003, 0x0040, 0x1223, + 0x1230, 0x123b, 0x0002, 0x02b1, 0x02b5, 0x0002, 0x0040, 0x1251, + // Entry 30A40 - 30A7F + 0x1251, 0x0002, 0x0040, 0x126d, 0x126d, 0x0003, 0x02bd, 0x02c0, + 0x02c5, 0x0001, 0x0039, 0x168e, 0x0003, 0x0040, 0x1223, 0x1230, + 0x123b, 0x0002, 0x02c8, 0x02cc, 0x0002, 0x0040, 0x1283, 0x1283, + 0x0002, 0x0040, 0x126d, 0x126d, 0x0003, 0x02d4, 0x02d7, 0x02dc, + 0x0001, 0x0039, 0x168e, 0x0003, 0x0040, 0x1223, 0x1230, 0x123b, + 0x0002, 0x02df, 0x02e3, 0x0002, 0x0040, 0x1283, 0x1283, 0x0002, + 0x0040, 0x126d, 0x126d, 0x0003, 0x02eb, 0x02ee, 0x02f3, 0x0001, + 0x0040, 0x129a, 0x0003, 0x0040, 0x12a7, 0x12c1, 0x12d5, 0x0002, + // Entry 30A80 - 30ABF + 0x02f6, 0x02fa, 0x0002, 0x0040, 0x12f1, 0x12f1, 0x0002, 0x0040, + 0x1313, 0x1313, 0x0003, 0x0302, 0x0305, 0x030a, 0x0001, 0x0040, + 0x132f, 0x0003, 0x0040, 0x1339, 0x1350, 0x1361, 0x0002, 0x030d, + 0x0311, 0x0002, 0x0040, 0x12f1, 0x12f1, 0x0002, 0x0040, 0x137a, + 0x137a, 0x0003, 0x0319, 0x031c, 0x0321, 0x0001, 0x0040, 0x132f, + 0x0003, 0x0040, 0x1339, 0x1350, 0x1361, 0x0002, 0x0324, 0x0328, + 0x0002, 0x0040, 0x1393, 0x1393, 0x0002, 0x0040, 0x137a, 0x137a, + 0x0003, 0x0330, 0x0333, 0x0338, 0x0001, 0x0039, 0x1775, 0x0003, + // Entry 30AC0 - 30AFF + 0x0040, 0x13ac, 0x13c0, 0x13d0, 0x0002, 0x033b, 0x033f, 0x0002, + 0x0040, 0x13e6, 0x13e6, 0x0002, 0x0040, 0x1400, 0x1400, 0x0003, + 0x0347, 0x034a, 0x034f, 0x0001, 0x0039, 0x1775, 0x0003, 0x0040, + 0x13ac, 0x13c0, 0x13d0, 0x0002, 0x0352, 0x0356, 0x0002, 0x0040, + 0x1414, 0x1414, 0x0002, 0x0040, 0x1400, 0x1400, 0x0003, 0x035e, + 0x0361, 0x0366, 0x0001, 0x0039, 0x1775, 0x0003, 0x0040, 0x13ac, + 0x13c0, 0x13d0, 0x0002, 0x0369, 0x036d, 0x0002, 0x0040, 0x142b, + 0x142b, 0x0002, 0x0040, 0x1440, 0x1440, 0x0004, 0x0376, 0x0379, + // Entry 30B00 - 30B3F + 0x037e, 0x0389, 0x0001, 0x0039, 0x17d6, 0x0003, 0x0040, 0x1452, + 0x146a, 0x1480, 0x0002, 0x0381, 0x0385, 0x0002, 0x0040, 0x149c, + 0x149c, 0x0002, 0x0040, 0x14ba, 0x14ba, 0x0001, 0x0040, 0x14d2, + 0x0004, 0x0391, 0x0394, 0x0399, 0x03a4, 0x0001, 0x0040, 0x14ec, + 0x0003, 0x0040, 0x14f3, 0x1506, 0x1517, 0x0002, 0x039c, 0x03a0, + 0x0002, 0x0040, 0x152e, 0x152e, 0x0002, 0x0040, 0x1545, 0x1545, + 0x0001, 0x0040, 0x14d2, 0x0004, 0x03ac, 0x03af, 0x03b4, 0x03bf, + 0x0001, 0x0040, 0x14ec, 0x0003, 0x0040, 0x14f3, 0x1506, 0x1517, + // Entry 30B40 - 30B7F + 0x0002, 0x03b7, 0x03bb, 0x0002, 0x0040, 0x152e, 0x152e, 0x0002, + 0x0040, 0x1545, 0x1545, 0x0001, 0x0040, 0x14d2, 0x0001, 0x03c4, + 0x0001, 0x0040, 0x155c, 0x0001, 0x03c9, 0x0001, 0x0040, 0x155c, + 0x0001, 0x03ce, 0x0001, 0x0040, 0x155c, 0x0003, 0x03d5, 0x03d8, + 0x03df, 0x0001, 0x0039, 0x18a6, 0x0005, 0x0040, 0x158c, 0x1597, + 0x15a2, 0x1574, 0x15ad, 0x0002, 0x03e2, 0x03e6, 0x0002, 0x0040, + 0x15c0, 0x15c0, 0x0002, 0x0040, 0x15dc, 0x15dc, 0x0003, 0x03ee, + 0x03f1, 0x03f8, 0x0001, 0x0039, 0x18a6, 0x0005, 0x0040, 0x158c, + // Entry 30B80 - 30BBF + 0x1597, 0x15a2, 0x1574, 0x15ad, 0x0002, 0x03fb, 0x03ff, 0x0002, + 0x0040, 0x15f2, 0x15f2, 0x0002, 0x0040, 0x15dc, 0x15dc, 0x0003, + 0x0407, 0x040a, 0x0411, 0x0001, 0x0039, 0x18a6, 0x0005, 0x0040, + 0x158c, 0x1597, 0x15a2, 0x1574, 0x15ad, 0x0002, 0x0414, 0x0418, + 0x0002, 0x0040, 0x15f2, 0x15f2, 0x0002, 0x0040, 0x15dc, 0x15dc, + 0x0001, 0x041e, 0x0001, 0x0040, 0x1609, 0x0001, 0x0423, 0x0001, + 0x0040, 0x1609, 0x0001, 0x0428, 0x0001, 0x0040, 0x1609, 0x0001, + 0x042d, 0x0001, 0x0040, 0x161f, 0x0001, 0x0432, 0x0001, 0x0040, + // Entry 30BC0 - 30BFF + 0x161f, 0x0001, 0x0437, 0x0001, 0x0040, 0x161f, 0x0001, 0x043c, + 0x0001, 0x0040, 0x1637, 0x0001, 0x0441, 0x0001, 0x0040, 0x1637, + 0x0001, 0x0446, 0x0001, 0x0040, 0x1637, 0x0003, 0x0000, 0x044d, + 0x0452, 0x0003, 0x0040, 0x1656, 0x1676, 0x1694, 0x0002, 0x0455, + 0x0459, 0x0002, 0x0040, 0x16b8, 0x16b8, 0x0002, 0x0040, 0x16de, + 0x16de, 0x0003, 0x0000, 0x0461, 0x0466, 0x0003, 0x0040, 0x16fe, + 0x1713, 0x1726, 0x0002, 0x0469, 0x046d, 0x0002, 0x0040, 0x173f, + 0x173f, 0x0002, 0x0040, 0x175c, 0x175c, 0x0003, 0x0000, 0x0475, + // Entry 30C00 - 30C3F + 0x047a, 0x0003, 0x0040, 0x16fe, 0x1713, 0x1726, 0x0002, 0x047d, + 0x0481, 0x0002, 0x0040, 0x173f, 0x173f, 0x0002, 0x0040, 0x175c, + 0x175c, 0x0003, 0x0000, 0x0489, 0x048e, 0x0003, 0x0040, 0x1779, + 0x1799, 0x17b7, 0x0002, 0x0491, 0x0495, 0x0002, 0x0040, 0x17db, + 0x17db, 0x0002, 0x0040, 0x1801, 0x1801, 0x0003, 0x0000, 0x049d, + 0x04a2, 0x0003, 0x0040, 0x1821, 0x1836, 0x1849, 0x0002, 0x04a5, + 0x04a9, 0x0002, 0x0040, 0x1862, 0x1862, 0x0002, 0x0040, 0x1879, + 0x1879, 0x0003, 0x0000, 0x04b1, 0x04b6, 0x0003, 0x0040, 0x1890, + // Entry 30C40 - 30C7F + 0x18a1, 0x18b0, 0x0002, 0x04b9, 0x04bd, 0x0002, 0x0040, 0x18c5, + 0x18c5, 0x0002, 0x0040, 0x18d8, 0x18d8, 0x0003, 0x0000, 0x04c5, + 0x04ca, 0x0003, 0x0040, 0x18eb, 0x190b, 0x1929, 0x0002, 0x04cd, + 0x04d1, 0x0002, 0x0040, 0x194d, 0x194d, 0x0002, 0x0040, 0x1973, + 0x1973, 0x0003, 0x0000, 0x04d9, 0x04de, 0x0003, 0x0040, 0x1993, + 0x19a8, 0x19bb, 0x0002, 0x04e1, 0x04e5, 0x0002, 0x0040, 0x19d4, + 0x19d4, 0x0002, 0x0040, 0x19eb, 0x19eb, 0x0003, 0x0000, 0x04ed, + 0x04f2, 0x0003, 0x0040, 0x1993, 0x19a8, 0x19bb, 0x0002, 0x04f5, + // Entry 30C80 - 30CBF + 0x04f9, 0x0002, 0x0040, 0x19d4, 0x19d4, 0x0002, 0x0040, 0x19eb, + 0x19eb, 0x0003, 0x0000, 0x0501, 0x0506, 0x0003, 0x0040, 0x1a02, + 0x1a22, 0x1a40, 0x0002, 0x0509, 0x050d, 0x0002, 0x0040, 0x1a64, + 0x1a64, 0x0002, 0x0040, 0x1a8a, 0x1a8a, 0x0003, 0x0000, 0x0515, + 0x051a, 0x0003, 0x0040, 0x1aaa, 0x1abf, 0x1ad2, 0x0002, 0x051d, + 0x0521, 0x0002, 0x0040, 0x1aeb, 0x1aeb, 0x0002, 0x0040, 0x1b02, + 0x1b02, 0x0003, 0x0000, 0x0529, 0x052e, 0x0003, 0x0040, 0x1b19, + 0x1b2a, 0x1b39, 0x0002, 0x0531, 0x0535, 0x0002, 0x0040, 0x1b4e, + // Entry 30CC0 - 30CFF + 0x1b4e, 0x0002, 0x0040, 0x1b61, 0x1b61, 0x0003, 0x0000, 0x053d, + 0x0542, 0x0003, 0x0040, 0x1b74, 0x1b94, 0x1bb2, 0x0002, 0x0545, + 0x0549, 0x0002, 0x0040, 0x1bd6, 0x1bd6, 0x0002, 0x0040, 0x1bfc, + 0x1bfc, 0x0003, 0x0000, 0x0551, 0x0556, 0x0003, 0x0040, 0x1c1c, + 0x1c31, 0x1c44, 0x0002, 0x0559, 0x055d, 0x0002, 0x0040, 0x1c5d, + 0x1c5d, 0x0002, 0x0040, 0x1c76, 0x1c76, 0x0003, 0x0000, 0x0565, + 0x056a, 0x0003, 0x0040, 0x1c8f, 0x1ca0, 0x1caf, 0x0002, 0x056d, + 0x0571, 0x0002, 0x0040, 0x1cc4, 0x1cc4, 0x0002, 0x0040, 0x1cd7, + // Entry 30D00 - 30D3F + 0x1cd7, 0x0003, 0x0000, 0x0579, 0x057e, 0x0003, 0x0040, 0x1cea, + 0x1d07, 0x1d22, 0x0002, 0x0581, 0x0585, 0x0002, 0x0040, 0x1d43, + 0x1d43, 0x0002, 0x0040, 0x1d61, 0x1d61, 0x0003, 0x0000, 0x058d, + 0x0592, 0x0003, 0x0040, 0x1d79, 0x1d79, 0x1d8a, 0x0002, 0x0595, + 0x0599, 0x0002, 0x0040, 0x1d9f, 0x1d9f, 0x0002, 0x0040, 0x1db3, + 0x1db3, 0x0003, 0x0000, 0x05a1, 0x05a6, 0x0003, 0x0040, 0x1dc5, + 0x1dd5, 0x1de3, 0x0002, 0x05a9, 0x05ad, 0x0002, 0x0040, 0x1df7, + 0x1df7, 0x0002, 0x0040, 0x1db3, 0x1db3, 0x0003, 0x0000, 0x05b5, + // Entry 30D40 - 30D7F + 0x05ba, 0x0003, 0x0040, 0x1e09, 0x1e25, 0x1e3f, 0x0002, 0x05bd, + 0x05c1, 0x0002, 0x0040, 0x1e5f, 0x1e5f, 0x0002, 0x0040, 0x1e81, + 0x1e81, 0x0003, 0x0000, 0x05c9, 0x05ce, 0x0003, 0x0040, 0x1e9d, + 0x1eb0, 0x1ec1, 0x0002, 0x05d1, 0x05d5, 0x0002, 0x0040, 0x1ed8, + 0x1ed8, 0x0002, 0x0040, 0x1eef, 0x1eef, 0x0003, 0x0000, 0x05dd, + 0x05e2, 0x0003, 0x0040, 0x1e9d, 0x1eb0, 0x1ec1, 0x0002, 0x05e5, + 0x05e9, 0x0002, 0x0040, 0x1ed8, 0x1ed8, 0x0002, 0x0040, 0x1eef, + 0x1eef, 0x0001, 0x05ef, 0x0001, 0x0040, 0x1f04, 0x0001, 0x05f4, + // Entry 30D80 - 30DBF + 0x0001, 0x0040, 0x1f04, 0x0001, 0x05f9, 0x0001, 0x0040, 0x1f04, + 0x0003, 0x0600, 0x0603, 0x0607, 0x0001, 0x0040, 0x1f0e, 0x0002, + 0x0040, 0xffff, 0x1f17, 0x0002, 0x060a, 0x060e, 0x0002, 0x0040, + 0x1f2d, 0x1f2d, 0x0002, 0x0040, 0x1f4b, 0x1f4b, 0x0003, 0x0616, + 0x0000, 0x0619, 0x0001, 0x0040, 0x1f63, 0x0002, 0x061c, 0x0620, + 0x0002, 0x0040, 0x1f68, 0x1f68, 0x0002, 0x0040, 0x1f81, 0x1f81, + 0x0003, 0x0628, 0x0000, 0x062b, 0x0001, 0x0040, 0x1f63, 0x0002, + 0x062e, 0x0632, 0x0002, 0x0040, 0x1f9a, 0x1f9a, 0x0002, 0x0040, + // Entry 30DC0 - 30DFF + 0x1fab, 0x1fab, 0x0003, 0x063a, 0x063d, 0x0641, 0x0001, 0x0040, + 0x1fbc, 0x0002, 0x0040, 0xffff, 0x1fc7, 0x0002, 0x0644, 0x0648, + 0x0002, 0x0040, 0x1fdf, 0x1fdf, 0x0002, 0x0041, 0x0000, 0x0000, + 0x0003, 0x0650, 0x0000, 0x0653, 0x0001, 0x0041, 0x001a, 0x0002, + 0x0656, 0x065a, 0x0002, 0x0041, 0x0022, 0x0022, 0x0002, 0x0041, + 0x0039, 0x0039, 0x0003, 0x0662, 0x0000, 0x0665, 0x0001, 0x0041, + 0x0050, 0x0002, 0x0668, 0x066c, 0x0002, 0x0041, 0x0054, 0x0054, + 0x0002, 0x0041, 0x0069, 0x0069, 0x0003, 0x0674, 0x0677, 0x067b, + // Entry 30E00 - 30E3F + 0x0001, 0x000f, 0x0227, 0x0002, 0x0041, 0xffff, 0x007e, 0x0002, + 0x067e, 0x0682, 0x0002, 0x0041, 0x0087, 0x0087, 0x0002, 0x0041, + 0x00a9, 0x00a9, 0x0003, 0x068a, 0x0000, 0x068d, 0x0001, 0x0012, + 0x0e71, 0x0002, 0x0690, 0x0694, 0x0002, 0x0041, 0x00c5, 0x00c5, + 0x0002, 0x0041, 0x00dc, 0x00dc, 0x0003, 0x069c, 0x0000, 0x069f, + 0x0001, 0x0012, 0x0e71, 0x0002, 0x06a2, 0x06a6, 0x0002, 0x0041, + 0x00f3, 0x00f3, 0x0002, 0x0041, 0x0108, 0x0108, 0x0001, 0x06ac, + 0x0001, 0x0041, 0x011d, 0x0001, 0x06b1, 0x0001, 0x0041, 0x011d, + // Entry 30E40 - 30E7F + 0x0001, 0x06b6, 0x0001, 0x0041, 0x011d, 0x0004, 0x06be, 0x06c3, + 0x06c8, 0x06d7, 0x0003, 0x0000, 0x1dc7, 0x2b8e, 0x2bcd, 0x0003, + 0x0041, 0x0137, 0x014c, 0x0155, 0x0002, 0x0000, 0x06cb, 0x0003, + 0x0000, 0x06d2, 0x06cf, 0x0001, 0x0041, 0x015e, 0x0003, 0x0041, + 0xffff, 0x018f, 0x01bc, 0x0002, 0x0000, 0x06da, 0x0003, 0x0774, + 0x080a, 0x06de, 0x0094, 0x0041, 0x01e7, 0x020d, 0x023e, 0x0267, + 0x02bb, 0x033f, 0x03af, 0x043e, 0x050b, 0x05c8, 0x068a, 0xffff, + 0x073e, 0x07a4, 0x0816, 0x08a3, 0x0937, 0x09af, 0x0a44, 0x0b08, + // Entry 30E80 - 30EBF + 0x0bcf, 0x0c70, 0x0d08, 0x0d82, 0x0df0, 0x0e4c, 0x0e68, 0x0eaa, + 0x0f04, 0x0f5c, 0x0fba, 0x0ff6, 0x105a, 0x10c0, 0x112e, 0x118a, + 0x11bb, 0x1210, 0x1299, 0x1330, 0x137a, 0x1396, 0x13c0, 0x1414, + 0x1480, 0x14d1, 0x1570, 0x15d6, 0x163b, 0x16da, 0x177a, 0x17c2, + 0x17ef, 0x183c, 0x1860, 0x189c, 0x18ec, 0x190c, 0x195c, 0x1a05, + 0x1a7d, 0x1ab7, 0x1afe, 0x1b86, 0x1bf4, 0x1c3c, 0x1c58, 0x1c7d, + 0x1ca1, 0x1cd8, 0x1d07, 0x1d50, 0x1dbe, 0x1e2e, 0x1e9c, 0xffff, + 0x1ee8, 0x1f17, 0x1f62, 0x1fac, 0x1ff0, 0x2050, 0x2076, 0x20c8, + // Entry 30EC0 - 30EFF + 0x211e, 0x215e, 0x21b2, 0x21d4, 0x21f4, 0x2216, 0x226f, 0x22c7, + 0x231d, 0x23d8, 0x247d, 0x24f9, 0x2549, 0x2569, 0x2585, 0x25ce, + 0x2667, 0x26f7, 0x275d, 0x2777, 0x27cd, 0x2877, 0x28f5, 0x295f, + 0x29b7, 0x29d3, 0x2a27, 0x2a9b, 0x2b1e, 0x2ba6, 0x2c14, 0x2c9c, + 0x2cbe, 0x2cdc, 0x2cfa, 0x2d1a, 0x2d58, 0xffff, 0x2dc8, 0x2e14, + 0x2e32, 0x2e54, 0x2e8b, 0x2eb6, 0x2ed8, 0x2ef2, 0x2f2c, 0x2f7a, + 0x2f9e, 0x2fda, 0x3026, 0x3068, 0x30cc, 0x310a, 0x3184, 0x3200, + 0x3254, 0x32a0, 0x3328, 0x3384, 0x33a2, 0x33d3, 0x3423, 0x349d, + // Entry 30F00 - 30F3F + 0x0094, 0x0041, 0xffff, 0xffff, 0xffff, 0xffff, 0x0292, 0x0321, + 0x0391, 0x0401, 0x04d2, 0x0593, 0x0648, 0xffff, 0x0724, 0x0786, + 0x07f2, 0x0874, 0x0917, 0x098b, 0x0a0d, 0x0ac6, 0x0ba0, 0x0c41, + 0x0ce2, 0x0d68, 0x0dcc, 0xffff, 0xffff, 0x0e88, 0xffff, 0x0f37, + 0xffff, 0x0fda, 0x1040, 0x10a4, 0x110a, 0xffff, 0xffff, 0x11ee, + 0x126a, 0x1316, 0xffff, 0xffff, 0xffff, 0x13e7, 0xffff, 0x14a0, + 0x1547, 0xffff, 0x1612, 0x16a1, 0x1760, 0xffff, 0xffff, 0xffff, + 0xffff, 0x187e, 0xffff, 0xffff, 0x192b, 0x19d4, 0xffff, 0xffff, + // Entry 30F40 - 30F7F + 0x1ad5, 0x1b66, 0x1bda, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1d36, 0x1d9e, 0x1e10, 0x1e80, 0xffff, 0xffff, 0xffff, + 0x1f46, 0xffff, 0x1fca, 0xffff, 0xffff, 0x20a7, 0xffff, 0x213e, + 0xffff, 0xffff, 0xffff, 0xffff, 0x224d, 0xffff, 0x22e5, 0x23a3, + 0x2458, 0x24db, 0xffff, 0xffff, 0xffff, 0x25a1, 0x263c, 0x26cf, + 0xffff, 0xffff, 0x2797, 0x284f, 0x28db, 0x293d, 0xffff, 0xffff, + 0x2a05, 0x2a81, 0x2ae5, 0xffff, 0x2bdb, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2d38, 0xffff, 0x2dac, 0xffff, 0xffff, 0xffff, + // Entry 30F80 - 30FBF + 0xffff, 0xffff, 0xffff, 0xffff, 0x2f0e, 0xffff, 0xffff, 0x2fbe, + 0xffff, 0x3040, 0xffff, 0x30ea, 0x3160, 0x31e0, 0xffff, 0x3278, + 0x3304, 0xffff, 0xffff, 0xffff, 0x3405, 0x3473, 0x0094, 0x0041, + 0xffff, 0xffff, 0xffff, 0xffff, 0x02ed, 0x0368, 0x03d8, 0x048a, + 0x054f, 0x0608, 0x06d7, 0xffff, 0x0761, 0x07cb, 0x0845, 0x08dd, + 0x0960, 0x09de, 0x0a84, 0x0b53, 0x0c07, 0x0ca8, 0x0d37, 0x0da5, + 0x0e1d, 0xffff, 0xffff, 0x0ed7, 0xffff, 0x0f8a, 0xffff, 0x1019, + 0x107f, 0x10e5, 0x115b, 0xffff, 0xffff, 0x123d, 0x12d1, 0x1355, + // Entry 30FC0 - 30FFF + 0xffff, 0xffff, 0xffff, 0x144a, 0xffff, 0x150b, 0x15a2, 0xffff, + 0x166d, 0x171c, 0x179d, 0xffff, 0xffff, 0xffff, 0xffff, 0x18c3, + 0xffff, 0xffff, 0x1998, 0x1a41, 0xffff, 0xffff, 0x1b32, 0x1baf, + 0x1c17, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1d73, + 0x1de7, 0x1e57, 0x1ec1, 0xffff, 0xffff, 0xffff, 0x1f87, 0xffff, + 0x201f, 0xffff, 0xffff, 0x20f2, 0xffff, 0x2187, 0xffff, 0xffff, + 0xffff, 0xffff, 0x229a, 0xffff, 0x2360, 0x2418, 0x24ab, 0x2520, + 0xffff, 0xffff, 0xffff, 0x2604, 0x269b, 0x272a, 0xffff, 0xffff, + // Entry 31000 - 3103F + 0x280e, 0x28a8, 0x2918, 0x298a, 0xffff, 0xffff, 0x2a54, 0x2ac0, + 0x2b62, 0xffff, 0x2c58, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2d81, 0xffff, 0x2ded, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2f53, 0xffff, 0xffff, 0x2fff, 0xffff, 0x3099, + 0xffff, 0x3135, 0x31b1, 0x3229, 0xffff, 0x32d1, 0x3355, 0xffff, + 0xffff, 0xffff, 0x344a, 0x34d0, 0x0002, 0x0003, 0x00e9, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, + // Entry 31040 - 3107F + 0x0000, 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, 0x0006, + 0x000d, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, + 0x0002, 0x0587, 0x0008, 0x002f, 0x0066, 0x008b, 0x009f, 0x00b7, + 0x00c7, 0x00d8, 0x0000, 0x0002, 0x0032, 0x0054, 0x0003, 0x0036, + 0x0000, 0x0045, 0x000d, 0x0042, 0xffff, 0x0000, 0x000a, 0x0011, + 0x0018, 0x001f, 0x0029, 0x0031, 0x003c, 0x0045, 0x004c, 0x0051, + 0x0057, 0x000d, 0x0042, 0xffff, 0x005f, 0x006c, 0x0076, 0x0080, + 0x0089, 0x0097, 0x00a2, 0x00b0, 0x00bc, 0x00c6, 0x00ce, 0x00d7, + // Entry 31080 - 310BF + 0x0002, 0x0000, 0x0057, 0x000d, 0x0000, 0xffff, 0x2b4e, 0x2b40, + 0x2773, 0x204d, 0x204d, 0x204d, 0x2b3c, 0x257f, 0x2b3a, 0x204d, + 0x2b3a, 0x2b3a, 0x0002, 0x0069, 0x007f, 0x0003, 0x006d, 0x0000, + 0x0076, 0x0007, 0x0042, 0x00e2, 0x00e9, 0x00f0, 0x00f5, 0x00fc, + 0x0100, 0x0104, 0x0007, 0x0042, 0x010b, 0x0116, 0x0120, 0x0129, + 0x0134, 0x013e, 0x0146, 0x0002, 0x0000, 0x0082, 0x0007, 0x0000, + 0x2722, 0x2b27, 0x2146, 0x2b50, 0x2b42, 0x204d, 0x2b3c, 0x0001, + 0x008d, 0x0003, 0x0091, 0x0000, 0x0098, 0x0005, 0x0042, 0xffff, + // Entry 310C0 - 310FF + 0x0151, 0x0158, 0x015f, 0x0166, 0x0005, 0x0042, 0xffff, 0x016d, + 0x0179, 0x0185, 0x0191, 0x0001, 0x00a1, 0x0003, 0x00a5, 0x0000, + 0x00ae, 0x0002, 0x00a8, 0x00ab, 0x0001, 0x0042, 0x019d, 0x0001, + 0x0042, 0x01a1, 0x0002, 0x00b1, 0x00b4, 0x0001, 0x0042, 0x019d, + 0x0001, 0x0042, 0x01a1, 0x0003, 0x00c1, 0x0000, 0x00bb, 0x0001, + 0x00bd, 0x0002, 0x0042, 0x01a5, 0x01be, 0x0001, 0x00c3, 0x0002, + 0x0042, 0x01d5, 0x01d9, 0x0004, 0x00d5, 0x00cf, 0x00cc, 0x00d2, + 0x0001, 0x0006, 0x015b, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, + // Entry 31100 - 3113F + 0x003c, 0x0001, 0x0002, 0x08e8, 0x0004, 0x00e6, 0x00e0, 0x00dd, + 0x00e3, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, + 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0040, 0x012a, 0x0000, + 0x0000, 0x012f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0134, + 0x0000, 0x0000, 0x0139, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x013e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0149, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 31140 - 3117F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x014e, 0x0000, 0x0153, 0x0000, 0x0000, 0x0158, + 0x0000, 0x0000, 0x015d, 0x0000, 0x0000, 0x0162, 0x0001, 0x012c, + 0x0001, 0x0042, 0x01dc, 0x0001, 0x0131, 0x0001, 0x0042, 0x01e7, + 0x0001, 0x0136, 0x0001, 0x0042, 0x01ef, 0x0001, 0x013b, 0x0001, + 0x0042, 0x01f7, 0x0002, 0x0141, 0x0144, 0x0001, 0x0042, 0x01fe, + 0x0003, 0x0042, 0x0204, 0x020a, 0x0211, 0x0001, 0x014b, 0x0001, + 0x0042, 0x021d, 0x0001, 0x0150, 0x0001, 0x0042, 0x022c, 0x0001, + // Entry 31180 - 311BF + 0x0155, 0x0001, 0x0042, 0x0240, 0x0001, 0x015a, 0x0001, 0x0042, + 0x0245, 0x0001, 0x015f, 0x0001, 0x0042, 0x024d, 0x0001, 0x0164, + 0x0001, 0x0042, 0x0257, 0x0003, 0x0004, 0x024d, 0x050e, 0x0012, + 0x0017, 0x0024, 0x0000, 0x005a, 0x0000, 0x0000, 0x007f, 0x00aa, + 0x020d, 0x0000, 0x021a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0227, + 0x0000, 0x023f, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x001d, + 0x0001, 0x001f, 0x0001, 0x0021, 0x0001, 0x0000, 0x0000, 0x000a, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0049, 0x0000, 0x0000, + // Entry 311C0 - 311FF + 0x0000, 0x002f, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0036, 0x0001, 0x0038, 0x0001, 0x003a, 0x000d, 0x001c, 0xffff, + 0x00cd, 0x27e9, 0x27ee, 0x27f4, 0x2801, 0x2808, 0x2811, 0x2818, + 0x281e, 0x2821, 0x2826, 0x282b, 0x0004, 0x0057, 0x0051, 0x004e, + 0x0054, 0x0001, 0x0017, 0x0281, 0x0001, 0x0017, 0x0291, 0x0001, + 0x0017, 0x029b, 0x0001, 0x0007, 0x02e9, 0x000a, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0065, + 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x006c, 0x0001, + // Entry 31200 - 3123F + 0x006e, 0x0001, 0x0070, 0x000d, 0x001c, 0xffff, 0x00cd, 0x27e9, + 0x27ee, 0x27f4, 0x2801, 0x2808, 0x2811, 0x2818, 0x281e, 0x2821, + 0x2826, 0x282b, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0088, 0x0000, 0x0099, 0x0004, 0x0096, 0x0090, 0x008d, 0x0093, + 0x0001, 0x0014, 0x0904, 0x0001, 0x0014, 0x035a, 0x0001, 0x0017, + 0x0372, 0x0001, 0x0014, 0x0370, 0x0004, 0x00a7, 0x00a1, 0x009e, + 0x00a4, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x00b3, 0x0118, + // Entry 31240 - 3127F + 0x016f, 0x01a4, 0x01c5, 0x01da, 0x01eb, 0x01fc, 0x0002, 0x00b6, + 0x00e7, 0x0003, 0x00ba, 0x00c9, 0x00d8, 0x000d, 0x0000, 0xffff, + 0x1e22, 0x2bd1, 0x2bd6, 0x2bdc, 0x2be1, 0x2be5, 0x2bea, 0x23ed, + 0x23f2, 0x2bbe, 0x2bc3, 0x2bc8, 0x000d, 0x0000, 0xffff, 0x257b, + 0x2b4e, 0x2b3c, 0x2b42, 0x2b3c, 0x257b, 0x257b, 0x2b42, 0x2b3a, + 0x2b50, 0x2b40, 0x2b3e, 0x000d, 0x0017, 0xffff, 0x0389, 0x2dd7, + 0x2e33, 0x2e3a, 0x2e42, 0x2e46, 0x2e4b, 0x2e50, 0x2e57, 0x2e61, + 0x2e69, 0x2e72, 0x0003, 0x00eb, 0x00fa, 0x0109, 0x000d, 0x0006, + // Entry 31280 - 312BF + 0xffff, 0x001e, 0x432b, 0x43c4, 0x4385, 0x43c9, 0x42ad, 0x4333, + 0x415c, 0x433b, 0x43a9, 0x433f, 0x4271, 0x000d, 0x0000, 0xffff, + 0x257b, 0x2b4e, 0x2b3c, 0x2b42, 0x2b3c, 0x257b, 0x257b, 0x2b42, + 0x2b3a, 0x2b50, 0x2b40, 0x2b3e, 0x000d, 0x0017, 0xffff, 0x0389, + 0x2dd7, 0x2e33, 0x2e3a, 0x2e7b, 0x2e46, 0x2e4b, 0x2e50, 0x2e57, + 0x2e61, 0x2e69, 0x2e72, 0x0002, 0x011b, 0x0145, 0x0005, 0x0121, + 0x012a, 0x013c, 0x0000, 0x0133, 0x0007, 0x0042, 0x026e, 0x0273, + 0x0279, 0x027f, 0x0285, 0x028a, 0x028f, 0x0007, 0x0000, 0x2b3a, + // Entry 312C0 - 312FF + 0x2b3c, 0x2b3e, 0x2b3c, 0x2b3e, 0x2b4e, 0x2b3a, 0x0007, 0x0000, + 0x1ebf, 0x2bef, 0x2bf4, 0x2bf9, 0x1ecf, 0x2bfe, 0x2c02, 0x0007, + 0x0042, 0x0294, 0x029c, 0x02a5, 0x02b0, 0x02ba, 0x02c6, 0x02ce, + 0x0005, 0x014b, 0x0154, 0x0166, 0x0000, 0x015d, 0x0007, 0x0042, + 0x02d8, 0x02dc, 0x02e1, 0x02e6, 0x02eb, 0x02ef, 0x02f3, 0x0007, + 0x0000, 0x2b3a, 0x2b3c, 0x2b3e, 0x2b3c, 0x2b3e, 0x2b4e, 0x2b3a, + 0x0007, 0x0000, 0x1ebf, 0x2bef, 0x2bf4, 0x2bf9, 0x1ecf, 0x2bfe, + 0x2c02, 0x0007, 0x0042, 0x0294, 0x029c, 0x02a5, 0x02b0, 0x02ba, + // Entry 31300 - 3133F + 0x02c6, 0x02ce, 0x0002, 0x0172, 0x018b, 0x0003, 0x0176, 0x017d, + 0x0184, 0x0005, 0x0000, 0xffff, 0x04e3, 0x04e6, 0x04e9, 0x04ec, + 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, + 0x0017, 0xffff, 0x0432, 0x043d, 0x0448, 0x0453, 0x0003, 0x018f, + 0x0196, 0x019d, 0x0005, 0x0000, 0xffff, 0x04e3, 0x04e6, 0x04e9, + 0x04ec, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x0005, 0x0017, 0xffff, 0x0432, 0x043d, 0x0448, 0x0453, 0x0001, + 0x01a6, 0x0003, 0x01aa, 0x01b3, 0x01bc, 0x0002, 0x01ad, 0x01b0, + // Entry 31340 - 3137F + 0x0001, 0x0042, 0x02f7, 0x0001, 0x0042, 0x02fd, 0x0002, 0x01b6, + 0x01b9, 0x0001, 0x001c, 0x03f4, 0x0001, 0x0042, 0x0307, 0x0002, + 0x01bf, 0x01c2, 0x0001, 0x0042, 0x02f7, 0x0001, 0x0042, 0x02fd, + 0x0003, 0x01cf, 0x0000, 0x01c9, 0x0001, 0x01cb, 0x0002, 0x0017, + 0x04db, 0x04fc, 0x0002, 0x01d2, 0x01d6, 0x0002, 0x0017, 0x04db, + 0x04fc, 0x0002, 0x0042, 0x030e, 0x0317, 0x0004, 0x01e8, 0x01e2, + 0x01df, 0x01e5, 0x0001, 0x0017, 0x0528, 0x0001, 0x0014, 0x0792, + 0x0001, 0x0016, 0x029f, 0x0001, 0x0007, 0x02e9, 0x0004, 0x01f9, + // Entry 31380 - 313BF + 0x01f3, 0x01f0, 0x01f6, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, + 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, + 0x020a, 0x0204, 0x0201, 0x0207, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0213, 0x0001, 0x0215, + 0x0001, 0x0217, 0x0001, 0x0000, 0x04ef, 0x0005, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0220, 0x0001, 0x0222, 0x0001, 0x0224, 0x0001, + 0x0000, 0x06c8, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 313C0 - 313FF + 0x022e, 0x0004, 0x023c, 0x0236, 0x0233, 0x0239, 0x0001, 0x0014, + 0x0904, 0x0001, 0x0014, 0x035a, 0x0001, 0x0017, 0x0372, 0x0001, + 0x0014, 0x0370, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0245, + 0x0001, 0x0247, 0x0001, 0x0249, 0x0002, 0x0000, 0x1a20, 0x2c06, + 0x0040, 0x028e, 0x0000, 0x0000, 0x0293, 0x02aa, 0x02bc, 0x02ce, + 0x02e0, 0x02f2, 0x0304, 0x031b, 0x032d, 0x033f, 0x0356, 0x0368, + 0x0000, 0x0000, 0x0000, 0x037a, 0x0391, 0x03a3, 0x0000, 0x0000, + 0x0000, 0x03b5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03ba, + // Entry 31400 - 3143F + 0x03c2, 0x03ca, 0x03d2, 0x03da, 0x03e2, 0x03ea, 0x03f2, 0x03fa, + 0x0402, 0x040a, 0x0412, 0x041a, 0x0422, 0x042a, 0x0432, 0x043a, + 0x0442, 0x044a, 0x0452, 0x045a, 0x0000, 0x0462, 0x0000, 0x0467, + 0x0479, 0x048b, 0x049d, 0x04af, 0x04c1, 0x04d3, 0x04e5, 0x04f7, + 0x0509, 0x0001, 0x0290, 0x0001, 0x0042, 0x0320, 0x0003, 0x0297, + 0x029a, 0x029f, 0x0001, 0x0042, 0x0326, 0x0003, 0x0042, 0x032b, + 0x0337, 0x0342, 0x0002, 0x02a2, 0x02a6, 0x0002, 0x0042, 0x035b, + 0x034f, 0x0002, 0x0042, 0x0378, 0x0369, 0x0003, 0x02ae, 0x0000, + // Entry 31440 - 3147F + 0x02b1, 0x0001, 0x0040, 0x06b1, 0x0002, 0x02b4, 0x02b8, 0x0002, + 0x0042, 0x0393, 0x0389, 0x0002, 0x0042, 0x03ac, 0x039f, 0x0003, + 0x02c0, 0x0000, 0x02c3, 0x0001, 0x0040, 0x06b1, 0x0002, 0x02c6, + 0x02ca, 0x0002, 0x0042, 0x03bb, 0x03bb, 0x0002, 0x0042, 0x03c3, + 0x03c3, 0x0003, 0x02d2, 0x0000, 0x02d5, 0x0001, 0x0017, 0x0695, + 0x0002, 0x02d8, 0x02dc, 0x0002, 0x0042, 0x03da, 0x03cb, 0x0002, + 0x0042, 0x03ff, 0x03ed, 0x0003, 0x02e4, 0x0000, 0x02e7, 0x0001, + 0x0040, 0x06bd, 0x0002, 0x02ea, 0x02ee, 0x0002, 0x0042, 0x041f, + // Entry 31480 - 314BF + 0x0415, 0x0002, 0x0042, 0x0438, 0x042b, 0x0003, 0x02f6, 0x0000, + 0x02f9, 0x0001, 0x0040, 0x06bd, 0x0002, 0x02fc, 0x0300, 0x0002, + 0x0042, 0x0447, 0x0447, 0x0002, 0x0042, 0x044f, 0x044f, 0x0003, + 0x0308, 0x030b, 0x0310, 0x0001, 0x0042, 0x0457, 0x0003, 0x0042, + 0x045d, 0x046b, 0x0477, 0x0002, 0x0313, 0x0317, 0x0002, 0x0042, + 0x0493, 0x0486, 0x0002, 0x0042, 0x04b3, 0x04a3, 0x0003, 0x031f, + 0x0000, 0x0322, 0x0001, 0x001d, 0x010c, 0x0002, 0x0325, 0x0329, + 0x0002, 0x0042, 0x04d0, 0x04c6, 0x0002, 0x0042, 0x04e9, 0x04dc, + // Entry 314C0 - 314FF + 0x0003, 0x0331, 0x0000, 0x0334, 0x0001, 0x001d, 0x010c, 0x0002, + 0x0337, 0x033b, 0x0002, 0x0042, 0x04f8, 0x04f8, 0x0002, 0x0042, + 0x0500, 0x0500, 0x0003, 0x0343, 0x0346, 0x034b, 0x0001, 0x0040, + 0x06ef, 0x0003, 0x0042, 0x0508, 0x0514, 0x051e, 0x0002, 0x034e, + 0x0352, 0x0002, 0x0042, 0x0537, 0x052b, 0x0002, 0x0042, 0x0556, + 0x0547, 0x0003, 0x035a, 0x0000, 0x035d, 0x0001, 0x001d, 0x0113, + 0x0002, 0x0360, 0x0364, 0x0002, 0x0042, 0x0573, 0x0569, 0x0002, + 0x0042, 0x058c, 0x057f, 0x0003, 0x036c, 0x0000, 0x036f, 0x0001, + // Entry 31500 - 3153F + 0x001d, 0x0113, 0x0002, 0x0372, 0x0376, 0x0002, 0x0042, 0x059b, + 0x059b, 0x0002, 0x0042, 0x05a3, 0x05a3, 0x0003, 0x037e, 0x0381, + 0x0386, 0x0001, 0x0042, 0x05ab, 0x0003, 0x0042, 0x05af, 0x05b9, + 0x05be, 0x0002, 0x0389, 0x038d, 0x0002, 0x0042, 0x05ce, 0x05c3, + 0x0002, 0x0042, 0x05ea, 0x05dc, 0x0003, 0x0395, 0x0000, 0x0398, + 0x0001, 0x0040, 0x0747, 0x0002, 0x039b, 0x039f, 0x0002, 0x0042, + 0x0605, 0x05fb, 0x0002, 0x0042, 0x061e, 0x0611, 0x0003, 0x03a7, + 0x0000, 0x03aa, 0x0001, 0x0040, 0x0747, 0x0002, 0x03ad, 0x03b1, + // Entry 31540 - 3157F + 0x0002, 0x0042, 0x062d, 0x062d, 0x0002, 0x0042, 0x0635, 0x0635, + 0x0001, 0x03b7, 0x0001, 0x0042, 0x063d, 0x0002, 0x0000, 0x03bd, + 0x0003, 0x0042, 0x0647, 0x0657, 0x0665, 0x0002, 0x0000, 0x03c5, + 0x0003, 0x0042, 0x0676, 0x0683, 0x068e, 0x0002, 0x0000, 0x03cd, + 0x0003, 0x0042, 0x069c, 0x06a8, 0x06b2, 0x0002, 0x0000, 0x03d5, + 0x0003, 0x0042, 0x06bf, 0x06d0, 0x06df, 0x0002, 0x0000, 0x03dd, + 0x0003, 0x0042, 0x06f1, 0x06ff, 0x070b, 0x0002, 0x0000, 0x03e5, + 0x0003, 0x0042, 0x071a, 0x0727, 0x0732, 0x0002, 0x0000, 0x03ed, + // Entry 31580 - 315BF + 0x0003, 0x0042, 0x0740, 0x0754, 0x0766, 0x0002, 0x0000, 0x03f5, + 0x0003, 0x0042, 0x077b, 0x0789, 0x0795, 0x0002, 0x0000, 0x03fd, + 0x0003, 0x0042, 0x077b, 0x0789, 0x0795, 0x0002, 0x0000, 0x0405, + 0x0003, 0x0042, 0x07a4, 0x07b6, 0x07c6, 0x0002, 0x0000, 0x040d, + 0x0003, 0x0042, 0x07d9, 0x07e7, 0x07f3, 0x0002, 0x0000, 0x0415, + 0x0003, 0x0042, 0x0802, 0x080f, 0x081a, 0x0002, 0x0000, 0x041d, + 0x0003, 0x0042, 0x0828, 0x083d, 0x0850, 0x0002, 0x0000, 0x0425, + 0x0003, 0x0042, 0x0866, 0x0874, 0x0880, 0x0002, 0x0000, 0x042d, + // Entry 315C0 - 315FF + 0x0003, 0x0042, 0x088f, 0x089c, 0x08a7, 0x0002, 0x0000, 0x0435, + 0x0003, 0x0042, 0x08b5, 0x08c5, 0x08d3, 0x0002, 0x0000, 0x043d, + 0x0003, 0x0042, 0x08e4, 0x08f1, 0x08fc, 0x0002, 0x0000, 0x0445, + 0x0003, 0x0042, 0x090a, 0x0916, 0x0920, 0x0002, 0x0000, 0x044d, + 0x0003, 0x0042, 0x092d, 0x093f, 0x094f, 0x0002, 0x0000, 0x0455, + 0x0003, 0x0042, 0x0962, 0x096f, 0x097a, 0x0002, 0x0000, 0x045d, + 0x0003, 0x0042, 0x0988, 0x0994, 0x099e, 0x0001, 0x0464, 0x0001, + 0x0042, 0x09ab, 0x0003, 0x046b, 0x0000, 0x046e, 0x0001, 0x0042, + // Entry 31600 - 3163F + 0x09bb, 0x0002, 0x0471, 0x0475, 0x0002, 0x0042, 0x09ce, 0x09c1, + 0x0002, 0x0042, 0x09ef, 0x09df, 0x0003, 0x047d, 0x0000, 0x0480, + 0x0001, 0x0042, 0x0a03, 0x0002, 0x0483, 0x0487, 0x0002, 0x0042, + 0x0a12, 0x0a07, 0x0002, 0x0042, 0x0a2d, 0x0a1f, 0x0003, 0x048f, + 0x0000, 0x0492, 0x0001, 0x0042, 0x0a03, 0x0002, 0x0495, 0x0499, + 0x0002, 0x0042, 0x0a3d, 0x0a3d, 0x0002, 0x0042, 0x0a46, 0x0a46, + 0x0003, 0x04a1, 0x0000, 0x04a4, 0x0001, 0x0042, 0x0a4f, 0x0002, + 0x04a7, 0x04ab, 0x0002, 0x0042, 0x0a64, 0x0a56, 0x0002, 0x0042, + // Entry 31640 - 3167F + 0x0a87, 0x0a76, 0x0003, 0x04b3, 0x0000, 0x04b6, 0x0001, 0x0017, + 0x1185, 0x0002, 0x04b9, 0x04bd, 0x0002, 0x0042, 0x0aa8, 0x0a9c, + 0x0002, 0x0042, 0x0ac5, 0x0ab6, 0x0003, 0x04c5, 0x0000, 0x04c8, + 0x0001, 0x0017, 0x1185, 0x0002, 0x04cb, 0x04cf, 0x0002, 0x0042, + 0x0ad6, 0x0ad6, 0x0002, 0x0042, 0x0ae0, 0x0ae0, 0x0003, 0x04d7, + 0x0000, 0x04da, 0x0001, 0x0042, 0x0aea, 0x0002, 0x04dd, 0x04e1, + 0x0002, 0x0042, 0x0aff, 0x0af1, 0x0002, 0x0042, 0x0b22, 0x0b11, + 0x0003, 0x04e9, 0x0000, 0x04ec, 0x0001, 0x0017, 0x11fc, 0x0002, + // Entry 31680 - 316BF + 0x04ef, 0x04f3, 0x0002, 0x0042, 0x0b43, 0x0b37, 0x0002, 0x0042, + 0x0b60, 0x0b51, 0x0003, 0x04fb, 0x0000, 0x04fe, 0x0001, 0x0017, + 0x11fc, 0x0002, 0x0501, 0x0505, 0x0002, 0x0042, 0x0b71, 0x0b71, + 0x0002, 0x0042, 0x0b7b, 0x0b7b, 0x0001, 0x050b, 0x0001, 0x0042, + 0x0b85, 0x0004, 0x0513, 0x0518, 0x051d, 0x0528, 0x0003, 0x0000, + 0x1dc7, 0x2b8e, 0x2bcd, 0x0003, 0x0042, 0x0b8e, 0x0b98, 0x0ba8, + 0x0002, 0x0000, 0x0520, 0x0002, 0x0000, 0x0523, 0x0003, 0x0042, + 0xffff, 0x0bb8, 0x0bcd, 0x0002, 0x0000, 0x052b, 0x0003, 0x052f, + // Entry 316C0 - 316FF + 0x0663, 0x05c9, 0x0098, 0x0042, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0c63, 0x0cb1, 0x0d17, 0x0d50, 0x0db5, 0x0e26, 0x0e71, 0x0ee5, + 0xffff, 0x0f18, 0x0f51, 0x0f96, 0x0fe7, 0x1023, 0x105c, 0x10b3, + 0x111c, 0x1167, 0x11b5, 0x1209, 0x123c, 0xffff, 0xffff, 0x129e, + 0xffff, 0x12e7, 0xffff, 0x1332, 0x1368, 0x13a7, 0x13e6, 0xffff, + 0xffff, 0x1451, 0x1499, 0x14db, 0xffff, 0xffff, 0xffff, 0x154b, + 0xffff, 0x15a8, 0x15ff, 0xffff, 0x164a, 0x1698, 0x16e6, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1781, 0xffff, 0xffff, 0x17ec, 0x1831, + // Entry 31700 - 3173F + 0xffff, 0xffff, 0x189c, 0x18e7, 0x1923, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x19c8, 0x1a01, 0x1a37, 0x1a76, 0x1ab2, + 0xffff, 0xffff, 0x1b1d, 0xffff, 0x1b69, 0xffff, 0xffff, 0x1bd1, + 0xffff, 0x1c22, 0xffff, 0xffff, 0xffff, 0xffff, 0x1c9e, 0xffff, + 0x1ce7, 0x1d35, 0x1d8e, 0x1dd0, 0xffff, 0xffff, 0xffff, 0x1e35, + 0x1e80, 0x1ec2, 0xffff, 0xffff, 0x1f24, 0x1f7e, 0x1fc0, 0x1fed, + 0xffff, 0xffff, 0x2054, 0x209f, 0x20de, 0xffff, 0x213e, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x21e4, 0x221d, 0x2250, 0xffff, + // Entry 31740 - 3177F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x22f9, 0xffff, + 0xffff, 0x234e, 0xffff, 0x2399, 0xffff, 0x23eb, 0x2432, 0x2471, + 0xffff, 0x24b7, 0x24f9, 0xffff, 0xffff, 0xffff, 0x2569, 0x259f, + 0xffff, 0xffff, 0x0be0, 0x0ce4, 0x0098, 0x0042, 0x0c0d, 0x0c1f, + 0x0c38, 0x0c4d, 0x0c79, 0x0cbe, 0x0d26, 0x0d6d, 0x0dd6, 0x0e3b, + 0x0e93, 0x0ef2, 0xffff, 0x0f27, 0x0f64, 0x0fad, 0x0ff7, 0x1032, + 0x1075, 0x10d2, 0x1131, 0x117d, 0x11cd, 0x1216, 0x124e, 0x127e, + 0x128b, 0x12ae, 0x12da, 0x12f7, 0x1323, 0x1340, 0x1379, 0x13b8, + // Entry 31780 - 317BF + 0x13f7, 0x1425, 0x143e, 0x1465, 0x14ab, 0x14eb, 0x1517, 0x1523, + 0x153c, 0x155f, 0x1593, 0x15c1, 0x1614, 0xffff, 0x1660, 0x16ae, + 0x16f4, 0x171c, 0x1736, 0x1763, 0x1773, 0x1791, 0x17bd, 0x17d3, + 0x17ff, 0x1845, 0x1884, 0x188f, 0x18b1, 0x18f7, 0x192e, 0x1950, + 0x195e, 0x1974, 0x1984, 0x199d, 0x19b2, 0x19d7, 0x1a0f, 0x1a48, + 0x1a86, 0x1ac4, 0x1af4, 0x1b08, 0x1b2e, 0x1b5c, 0x1b7b, 0x1bab, + 0x1bbd, 0x1be1, 0x1c0d, 0x1c30, 0x1c58, 0x1c69, 0x1c78, 0x1c88, + 0x1cae, 0x1cda, 0x1cfd, 0x1d4e, 0x1da0, 0x1ddf, 0x1e09, 0x1e17, + // Entry 317C0 - 317FF + 0x1e23, 0x1e4a, 0x1e92, 0x1ed4, 0x1f04, 0x1f0f, 0x1f3e, 0x1f90, + 0x1fcb, 0x2000, 0x2032, 0x203e, 0x2069, 0x20b0, 0x20f3, 0x2129, + 0x215c, 0x21a4, 0x21ba, 0xffff, 0x21c7, 0x21d6, 0x21f3, 0x222a, + 0x225c, 0x2280, 0x2291, 0x22a8, 0x22bd, 0x22d1, 0x22e0, 0x22ec, + 0x2306, 0x232c, 0x2340, 0x235f, 0x238d, 0x23ac, 0x23de, 0x23ff, + 0x2443, 0x247f, 0x24a7, 0x24c9, 0x2509, 0x2535, 0x2542, 0x2553, + 0x2577, 0x25b4, 0x1879, 0xffff, 0x0beb, 0x0cf1, 0x0098, 0x0042, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0c95, 0x0cd1, 0x0d3b, 0x0d91, + // Entry 31800 - 3183F + 0x0dfe, 0x0e56, 0x0ebc, 0x0f05, 0xffff, 0x0f3c, 0x0f7d, 0x0fca, + 0x100d, 0x1047, 0x1094, 0x10f7, 0x114c, 0x1199, 0x11eb, 0x1229, + 0x1266, 0xffff, 0xffff, 0x12c4, 0xffff, 0x130d, 0xffff, 0x1354, + 0x1390, 0x13cf, 0x140e, 0xffff, 0xffff, 0x147f, 0x14c3, 0x1501, + 0xffff, 0xffff, 0xffff, 0x1579, 0xffff, 0x15e0, 0x162f, 0xffff, + 0x167c, 0x16ca, 0x1708, 0xffff, 0xffff, 0xffff, 0xffff, 0x17a7, + 0xffff, 0xffff, 0x1818, 0x185f, 0xffff, 0xffff, 0x18cc, 0x190d, + 0x193f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x19ec, + // Entry 31840 - 3187F + 0x1a23, 0x1a5f, 0x1a9c, 0x1adc, 0xffff, 0xffff, 0x1b45, 0xffff, + 0x1b93, 0xffff, 0xffff, 0x1bf7, 0xffff, 0x1c44, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1cc4, 0xffff, 0x1d19, 0x1d6e, 0x1db8, 0x1df4, + 0xffff, 0xffff, 0xffff, 0x1e65, 0x1eaa, 0x1eec, 0xffff, 0xffff, + 0x1f5e, 0x1fa8, 0x1fdc, 0x2019, 0xffff, 0xffff, 0x2084, 0x20c7, + 0x210e, 0xffff, 0x2180, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2208, 0x223d, 0x226e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2319, 0xffff, 0xffff, 0x2376, 0xffff, 0x23c5, + // Entry 31880 - 318BF + 0xffff, 0x2418, 0x245a, 0x2493, 0xffff, 0x24e1, 0x251f, 0xffff, + 0xffff, 0xffff, 0x258b, 0x25cf, 0xffff, 0xffff, 0x0bfc, 0x0d04, + 0x0002, 0x0003, 0x00d1, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, 0x0023, 0x001d, + 0x001a, 0x0020, 0x0001, 0x0006, 0x000d, 0x0001, 0x0002, 0x0010, + 0x0001, 0x0002, 0x001b, 0x0001, 0x0002, 0x0587, 0x0008, 0x002f, + 0x0066, 0x008b, 0x0000, 0x009f, 0x00af, 0x00c0, 0x0000, 0x0002, + // Entry 318C0 - 318FF + 0x0032, 0x0054, 0x0003, 0x0036, 0x0000, 0x0045, 0x000d, 0x0006, + 0xffff, 0x001e, 0x432b, 0x43cd, 0x43d1, 0x43d5, 0x43d9, 0x4333, + 0x428d, 0x43dd, 0x43e1, 0x433f, 0x422c, 0x000d, 0x0043, 0xffff, + 0x0000, 0x000a, 0x0014, 0x001b, 0x0021, 0x0027, 0x002d, 0x0035, + 0x003d, 0x0048, 0x0051, 0x0059, 0x0002, 0x0000, 0x0057, 0x000d, + 0x0000, 0xffff, 0x257b, 0x2b4e, 0x2b3c, 0x2b42, 0x2b3c, 0x257b, + 0x257b, 0x2b42, 0x2b3a, 0x2b50, 0x2b40, 0x2b3e, 0x0002, 0x0069, + 0x007f, 0x0003, 0x006d, 0x0000, 0x0076, 0x0007, 0x0033, 0x013a, + // Entry 31900 - 3193F + 0x2644, 0x2648, 0x264c, 0x2650, 0x2654, 0x2658, 0x0007, 0x0043, + 0x0061, 0x006a, 0x0071, 0x007b, 0x0085, 0x008d, 0x0098, 0x0002, + 0x0000, 0x0082, 0x0007, 0x0000, 0x2b3a, 0x25eb, 0x2296, 0x2296, + 0x2296, 0x2296, 0x2296, 0x0001, 0x008d, 0x0003, 0x0091, 0x0000, + 0x0098, 0x0005, 0x0043, 0xffff, 0x00a3, 0x00a8, 0x00ad, 0x00b2, + 0x0005, 0x0043, 0xffff, 0x00b7, 0x00c1, 0x00cb, 0x00d5, 0x0003, + 0x00a9, 0x0000, 0x00a3, 0x0001, 0x00a5, 0x0002, 0x0043, 0x00df, + 0x00f4, 0x0001, 0x00ab, 0x0002, 0x0009, 0x0078, 0x57b0, 0x0004, + // Entry 31940 - 3197F + 0x00bd, 0x00b7, 0x00b4, 0x00ba, 0x0001, 0x0006, 0x015b, 0x0001, + 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, 0x0002, 0x08e8, + 0x0004, 0x00ce, 0x00c8, 0x00c5, 0x00cb, 0x0001, 0x0000, 0x0524, + 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, + 0x0546, 0x0040, 0x0112, 0x0000, 0x0000, 0x0117, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x011c, 0x0000, 0x0000, 0x0121, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0126, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0131, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 31980 - 319BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0136, 0x0000, + 0x013b, 0x0000, 0x0000, 0x0140, 0x0000, 0x0000, 0x0145, 0x0000, + 0x0000, 0x014a, 0x0001, 0x0114, 0x0001, 0x0043, 0x0109, 0x0001, + 0x0119, 0x0001, 0x0006, 0x016f, 0x0001, 0x011e, 0x0001, 0x0043, + 0x0111, 0x0001, 0x0123, 0x0001, 0x0043, 0x0061, 0x0002, 0x0129, + 0x012c, 0x0001, 0x0043, 0x0117, 0x0003, 0x0043, 0x011e, 0x0124, + // Entry 319C0 - 319FF + 0x012d, 0x0001, 0x0133, 0x0001, 0x0043, 0x0132, 0x0001, 0x0138, + 0x0001, 0x0007, 0x0892, 0x0001, 0x013d, 0x0001, 0x0043, 0x014b, + 0x0001, 0x0142, 0x0001, 0x0043, 0x0151, 0x0001, 0x0147, 0x0001, + 0x0043, 0x0159, 0x0001, 0x014c, 0x0001, 0x0043, 0x0163, 0x0002, + 0x0003, 0x007b, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000c, 0x0024, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0013, 0x0004, 0x0021, 0x001b, 0x0018, 0x001e, 0x0001, + 0x000c, 0x0000, 0x0001, 0x000c, 0x0012, 0x0001, 0x000c, 0x001e, + // Entry 31A00 - 31A3F + 0x0001, 0x0013, 0x0203, 0x0007, 0x002c, 0x0041, 0x0000, 0x0000, + 0x0000, 0x0059, 0x006a, 0x0001, 0x002e, 0x0003, 0x0000, 0x0000, + 0x0032, 0x000d, 0x0043, 0xffff, 0x016e, 0x017f, 0x0193, 0x01aa, + 0x01bb, 0x01cf, 0x01e7, 0x01fb, 0x020b, 0x021e, 0x0235, 0x0243, + 0x0001, 0x0043, 0x0003, 0x0000, 0x0047, 0x0050, 0x0007, 0x0000, + 0x2b42, 0x2151, 0x2b40, 0x2523, 0x2b27, 0x2359, 0x2b50, 0x0007, + 0x0043, 0x0257, 0x0268, 0x0278, 0x0287, 0x0295, 0x02a2, 0x02b2, + 0x0004, 0x0067, 0x0061, 0x005e, 0x0064, 0x0001, 0x000c, 0x03c9, + // Entry 31A40 - 31A7F + 0x0001, 0x000c, 0x03d9, 0x0001, 0x000c, 0x03e3, 0x0001, 0x000c, + 0x03ec, 0x0004, 0x0078, 0x0072, 0x006f, 0x0075, 0x0001, 0x0002, + 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, 0x0002, 0x04fe, 0x0001, + 0x0002, 0x0508, 0x003d, 0x0000, 0x0000, 0x0000, 0x00b9, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x00ce, 0x0000, 0x0000, 0x00e3, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00f8, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x010d, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0112, 0x0000, 0x0000, 0x011a, 0x0000, 0x0000, 0x0122, + // Entry 31A80 - 31ABF + 0x0000, 0x0000, 0x012a, 0x0000, 0x0000, 0x0132, 0x0000, 0x0000, + 0x013a, 0x0000, 0x0000, 0x0142, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x014a, 0x0000, 0x0000, 0x015a, 0x0000, 0x0000, 0x016a, + 0x0003, 0x00bd, 0x00c0, 0x00c5, 0x0001, 0x0043, 0x02c4, 0x0003, + 0x0043, 0x02cd, 0x02e5, 0x02f7, 0x0002, 0x00c8, 0x00cb, 0x0001, + 0x0043, 0x0314, 0x0001, 0x0043, 0x0337, 0x0003, 0x00d2, 0x00d5, + 0x00da, 0x0001, 0x0043, 0x035a, 0x0003, 0x0043, 0x035e, 0x0371, + 0x037e, 0x0002, 0x00dd, 0x00e0, 0x0001, 0x0043, 0x0396, 0x0001, + // Entry 31AC0 - 31AFF + 0x0043, 0x03ba, 0x0003, 0x00e7, 0x00ea, 0x00ef, 0x0001, 0x0043, + 0x03de, 0x0003, 0x0043, 0x03e3, 0x03f7, 0x0405, 0x0002, 0x00f2, + 0x00f5, 0x0001, 0x0043, 0x041e, 0x0001, 0x0043, 0x043d, 0x0003, + 0x00fc, 0x00ff, 0x0104, 0x0001, 0x0043, 0x045c, 0x0003, 0x0043, + 0x0465, 0x0471, 0x0483, 0x0002, 0x0107, 0x010a, 0x0001, 0x0043, + 0x0499, 0x0001, 0x0043, 0x04bb, 0x0001, 0x010f, 0x0001, 0x0043, + 0x04de, 0x0002, 0x0000, 0x0115, 0x0003, 0x0043, 0x04ec, 0x050d, + 0x0528, 0x0002, 0x0000, 0x011d, 0x0003, 0x0043, 0x0544, 0x0564, + // Entry 31B00 - 31B3F + 0x057e, 0x0002, 0x0000, 0x0125, 0x0003, 0x0043, 0x0599, 0x05b7, + 0x05cf, 0x0002, 0x0000, 0x012d, 0x0003, 0x0043, 0x05e8, 0x0605, + 0x061c, 0x0002, 0x0000, 0x0135, 0x0003, 0x0043, 0x0634, 0x0650, + 0x0666, 0x0002, 0x0000, 0x013d, 0x0003, 0x0043, 0x067d, 0x069e, + 0x06b5, 0x0002, 0x0000, 0x0145, 0x0003, 0x0043, 0x06cf, 0x06f1, + 0x070d, 0x0003, 0x014e, 0x0000, 0x0151, 0x0001, 0x0043, 0x072a, + 0x0002, 0x0154, 0x0157, 0x0001, 0x0043, 0x0733, 0x0001, 0x0043, + 0x0756, 0x0003, 0x015e, 0x0000, 0x0161, 0x0001, 0x0043, 0x0779, + // Entry 31B40 - 31B7F + 0x0002, 0x0164, 0x0167, 0x0001, 0x0043, 0x0790, 0x0001, 0x0043, + 0x07b9, 0x0003, 0x016e, 0x0000, 0x0171, 0x0001, 0x0043, 0x07e3, + 0x0002, 0x0174, 0x0177, 0x0001, 0x0043, 0x07e9, 0x0001, 0x0043, + 0x0809, 0x0003, 0x0004, 0x00ea, 0x0168, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0027, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, 0x0000, 0x0004, + 0x0024, 0x001e, 0x001b, 0x0021, 0x0001, 0x0002, 0x0000, 0x0001, + 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0000, 0x240c, + // Entry 31B80 - 31BBF + 0x0008, 0x0030, 0x0067, 0x008c, 0x00a0, 0x00b8, 0x00c8, 0x00d9, + 0x0000, 0x0002, 0x0033, 0x0055, 0x0003, 0x0037, 0x0000, 0x0046, + 0x000d, 0x0007, 0xffff, 0x00a7, 0x24e5, 0x24e9, 0x24ed, 0x24f1, + 0x24f5, 0x24f9, 0x24fd, 0x2501, 0x2505, 0x250a, 0x250e, 0x000d, + 0x0043, 0xffff, 0x082a, 0x083b, 0x084f, 0x0863, 0x0875, 0x0889, + 0x089d, 0x08af, 0x08c1, 0x08d2, 0x08e3, 0x0902, 0x0002, 0x0000, + 0x0058, 0x000d, 0x0000, 0xffff, 0x23b1, 0x2006, 0x1f9a, 0x1f9c, + 0x1f9a, 0x23b1, 0x23b1, 0x1f9c, 0x2002, 0x2c0d, 0x1f96, 0x2008, + // Entry 31BC0 - 31BFF + 0x0002, 0x006a, 0x0080, 0x0003, 0x006e, 0x0000, 0x0077, 0x0007, + 0x0043, 0x091f, 0x0923, 0x0927, 0x092b, 0x092f, 0x0933, 0x0937, + 0x0007, 0x0043, 0x093b, 0x0942, 0x0955, 0x096b, 0x0981, 0x0995, + 0x09aa, 0x0002, 0x0000, 0x0083, 0x0007, 0x0000, 0x235f, 0x23b1, + 0x1f9a, 0x1f9a, 0x1f9a, 0x1f9a, 0x21e4, 0x0001, 0x008e, 0x0003, + 0x0092, 0x0000, 0x0099, 0x0005, 0x0043, 0xffff, 0x09b4, 0x09b8, + 0x09bc, 0x09c0, 0x0005, 0x0043, 0xffff, 0x09c4, 0x09de, 0x09fb, + 0x0a18, 0x0001, 0x00a2, 0x0003, 0x00a6, 0x0000, 0x00af, 0x0002, + // Entry 31C00 - 31C3F + 0x00a9, 0x00ac, 0x0001, 0x0043, 0x0a33, 0x0001, 0x0043, 0x0a40, + 0x0002, 0x00b2, 0x00b5, 0x0001, 0x0043, 0x0a33, 0x0001, 0x0043, + 0x0a40, 0x0003, 0x00c2, 0x0000, 0x00bc, 0x0001, 0x00be, 0x0002, + 0x0043, 0x0a48, 0x0a5d, 0x0001, 0x00c4, 0x0002, 0x0043, 0x0a72, + 0x0a7d, 0x0004, 0x00d6, 0x00d0, 0x00cd, 0x00d3, 0x0001, 0x0002, + 0x0025, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, + 0x0002, 0x028b, 0x0004, 0x00e7, 0x00e1, 0x00de, 0x00e4, 0x0001, + 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, + // Entry 31C40 - 31C7F + 0x0001, 0x0000, 0x0546, 0x0040, 0x012b, 0x0000, 0x0000, 0x0130, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0135, 0x0000, 0x0000, + 0x013a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x013f, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x014a, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x014f, 0x0000, 0x0154, 0x0000, 0x0000, 0x0159, 0x0000, 0x0000, + // Entry 31C80 - 31CBF + 0x015e, 0x0000, 0x0000, 0x0163, 0x0001, 0x012d, 0x0001, 0x0043, + 0x0a88, 0x0001, 0x0132, 0x0001, 0x0043, 0x0a90, 0x0001, 0x0137, + 0x0001, 0x0043, 0x0a96, 0x0001, 0x013c, 0x0001, 0x0043, 0x0a9e, + 0x0002, 0x0142, 0x0145, 0x0001, 0x0043, 0x0aa7, 0x0003, 0x0043, + 0x0ab0, 0x0abe, 0x0ac7, 0x0001, 0x014c, 0x0001, 0x0043, 0x0ad4, + 0x0001, 0x0151, 0x0001, 0x0043, 0x0ae9, 0x0001, 0x0156, 0x0001, + 0x0043, 0x0afb, 0x0001, 0x015b, 0x0001, 0x0043, 0x0b02, 0x0001, + 0x0160, 0x0001, 0x0043, 0x0b0a, 0x0001, 0x0165, 0x0001, 0x0043, + // Entry 31CC0 - 31CFF + 0x0b17, 0x0004, 0x0000, 0x016d, 0x0000, 0x0170, 0x0001, 0x0043, + 0x0b29, 0x0002, 0x0000, 0x0173, 0x0003, 0x0000, 0x0000, 0x0177, + 0x007c, 0x0043, 0xffff, 0x0b37, 0x0b4d, 0x0b6c, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 31D00 - 31D3F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0b87, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 31D40 - 31D7F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0b9a, 0x0003, 0x0004, + 0x06f9, 0x0ae0, 0x0012, 0x0017, 0x0024, 0x0115, 0x0000, 0x0182, + 0x0000, 0x01ef, 0x021a, 0x0432, 0x048a, 0x04fc, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0582, 0x067a, 0x06ec, 0x0005, 0x0000, 0x0000, + 0x0000, 0x0000, 0x001d, 0x0001, 0x001f, 0x0001, 0x0021, 0x0001, + 0x0043, 0x0bad, 0x000a, 0x002f, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0104, 0x0000, 0x0000, 0x0000, 0x0094, 0x0002, 0x0032, 0x0063, + // Entry 31D80 - 31DBF + 0x0003, 0x0036, 0x0045, 0x0054, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x2215, 0x2b8b, 0x2426, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, + 0x2b8b, 0x2426, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2b8b, + 0x2426, 0x0003, 0x0067, 0x0076, 0x0085, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + // Entry 31DC0 - 31DFF + 0x2424, 0x2215, 0x2b8b, 0x2426, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x2215, 0x2b8b, 0x2426, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, + 0x2b8b, 0x2426, 0x0006, 0x009b, 0x0000, 0x0000, 0x0000, 0x00ae, + 0x00f1, 0x0001, 0x009d, 0x0001, 0x009f, 0x000d, 0x0043, 0xffff, + 0x0bb6, 0x0bbd, 0x0bc4, 0x0bce, 0x0bdb, 0x0be8, 0x0bf2, 0x0bf9, + 0x0c06, 0x0c16, 0x0c1d, 0x0c27, 0x0001, 0x00b0, 0x0001, 0x00b2, + // Entry 31E00 - 31E3F + 0x003d, 0x0043, 0xffff, 0x0c2e, 0x0c3f, 0x0c4d, 0x0c61, 0x0c78, + 0x0c8c, 0x0c9a, 0x0cab, 0x0cc2, 0x0cd6, 0x0ce7, 0x0cf5, 0x0d03, + 0x0d14, 0x0d25, 0x0d36, 0x0d4a, 0x0d5e, 0x0d6f, 0x0d80, 0x0d97, + 0x0dab, 0x0db9, 0x0dca, 0x0ddb, 0x0de9, 0x0df7, 0x0e0b, 0x0e22, + 0x0e3b, 0x0e4c, 0x0e5a, 0x0e6e, 0x0e82, 0x0e93, 0x0ea1, 0x0eaf, + 0x0ec0, 0x0ed1, 0x0ee5, 0x0efc, 0x0f0d, 0x0f1b, 0x0f2c, 0x0f43, + 0x0f54, 0x0f62, 0x0f73, 0x0f84, 0x0f95, 0x0fa6, 0x0fba, 0x0fce, + 0x0fe7, 0x0ff8, 0x1006, 0x101a, 0x102e, 0x103f, 0x1050, 0x0001, + // Entry 31E40 - 31E7F + 0x00f3, 0x0001, 0x00f5, 0x000d, 0x0043, 0xffff, 0x1066, 0x106d, + 0x1080, 0x108d, 0x10a0, 0x10b3, 0x10ba, 0x10c4, 0x10ce, 0x10d8, + 0x10eb, 0x10f2, 0x0004, 0x0112, 0x010c, 0x0109, 0x010f, 0x0001, + 0x0033, 0x00ef, 0x0001, 0x0033, 0x00ff, 0x0001, 0x0033, 0x0108, + 0x0001, 0x0033, 0x0110, 0x0001, 0x0117, 0x0002, 0x011a, 0x014e, + 0x0003, 0x011e, 0x012e, 0x013e, 0x000e, 0x0043, 0xffff, 0x10f9, + 0x1106, 0x1113, 0x1120, 0x112a, 0x1137, 0x1147, 0x115d, 0x1176, + 0x1189, 0x119c, 0x11ac, 0x11bc, 0x000e, 0x0000, 0xffff, 0x0033, + // Entry 31E80 - 31EBF + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x2215, 0x2b8b, 0x2426, 0x0422, 0x000e, 0x0043, 0xffff, 0x10f9, + 0x1106, 0x1113, 0x1120, 0x112a, 0x11cc, 0x1147, 0x115d, 0x1176, + 0x1189, 0x119c, 0x11ac, 0x11dc, 0x0003, 0x0152, 0x0162, 0x0172, + 0x000e, 0x0043, 0xffff, 0x10f9, 0x1106, 0x1113, 0x1120, 0x112a, + 0x1137, 0x1147, 0x115d, 0x1176, 0x1189, 0x119c, 0x11ac, 0x11dc, + 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2b8b, 0x2426, 0x0422, + // Entry 31EC0 - 31EFF + 0x000e, 0x0043, 0xffff, 0x10f9, 0x1106, 0x1113, 0x1120, 0x112a, + 0x1137, 0x1147, 0x115d, 0x1176, 0x1189, 0x119c, 0x11ac, 0x11dc, + 0x0001, 0x0184, 0x0002, 0x0187, 0x01bb, 0x0003, 0x018b, 0x019b, + 0x01ab, 0x000e, 0x0043, 0xffff, 0x11ec, 0x1208, 0x1218, 0x1225, + 0x1235, 0x123f, 0x1255, 0x126b, 0x127e, 0x1291, 0x129e, 0x12ab, + 0x12be, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2b8b, 0x2426, + 0x0422, 0x000e, 0x0043, 0xffff, 0x11ec, 0x1208, 0x1218, 0x1225, + // Entry 31F00 - 31F3F + 0x1235, 0x123f, 0x1255, 0x126b, 0x127e, 0x1291, 0x129e, 0x12ab, + 0x12be, 0x0003, 0x01bf, 0x01cf, 0x01df, 0x000e, 0x0043, 0xffff, + 0x11ec, 0x1208, 0x1218, 0x1225, 0x1235, 0x123f, 0x1255, 0x126b, + 0x127e, 0x1291, 0x129e, 0x12ab, 0x12be, 0x000e, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x2215, 0x2b8b, 0x2426, 0x0422, 0x000e, 0x0043, 0xffff, + 0x11ec, 0x1208, 0x1218, 0x1225, 0x1235, 0x123f, 0x1255, 0x126b, + 0x127e, 0x1291, 0x129e, 0x12ab, 0x12be, 0x0008, 0x0000, 0x0000, + // Entry 31F40 - 31F7F + 0x0000, 0x0000, 0x0000, 0x01f8, 0x0000, 0x0209, 0x0004, 0x0206, + 0x0200, 0x01fd, 0x0203, 0x0001, 0x0043, 0x12d4, 0x0001, 0x0002, + 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0000, 0x240c, 0x0004, + 0x0217, 0x0211, 0x020e, 0x0214, 0x0001, 0x0006, 0x022e, 0x0001, + 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, + 0x0008, 0x0223, 0x0288, 0x02df, 0x0314, 0x03e5, 0x03ff, 0x0410, + 0x0421, 0x0002, 0x0226, 0x0257, 0x0003, 0x022a, 0x0239, 0x0248, + 0x000d, 0x0043, 0xffff, 0x12ea, 0x12f3, 0x12fc, 0x1305, 0x130e, + // Entry 31F80 - 31FBF + 0x1317, 0x1323, 0x132c, 0x1335, 0x133e, 0x1347, 0x1350, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x2215, 0x2b8b, 0x2426, 0x000d, 0x0043, + 0xffff, 0x10a0, 0x1359, 0x1369, 0x1376, 0x1383, 0x1399, 0x13ac, + 0x13c2, 0x13d2, 0x13e2, 0x13ef, 0x13ff, 0x0003, 0x025b, 0x026a, + 0x0279, 0x000d, 0x0043, 0xffff, 0x12ea, 0x12f3, 0x12fc, 0x1305, + 0x130e, 0x1317, 0x1323, 0x132c, 0x1335, 0x133e, 0x1347, 0x1350, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + // Entry 31FC0 - 31FFF + 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2b8b, 0x2426, 0x000d, + 0x0043, 0xffff, 0x10a0, 0x1359, 0x1369, 0x1376, 0x1383, 0x1399, + 0x13ac, 0x13c2, 0x13d2, 0x13e2, 0x13ef, 0x13ff, 0x0002, 0x028b, + 0x02b5, 0x0005, 0x0291, 0x029a, 0x02ac, 0x0000, 0x02a3, 0x0007, + 0x0043, 0x140f, 0x141f, 0x1429, 0x143c, 0x1446, 0x1456, 0x1460, + 0x0007, 0x0043, 0x146d, 0x1474, 0x1478, 0x147c, 0x1480, 0x1487, + 0x148e, 0x0007, 0x0043, 0x1492, 0x149a, 0x149f, 0x14a4, 0x14a9, + 0x14b1, 0x14b9, 0x0007, 0x0043, 0x14be, 0x14d7, 0x14ea, 0x1506, + // Entry 32000 - 3203F + 0x1519, 0x1532, 0x1545, 0x0005, 0x02bb, 0x02c4, 0x02d6, 0x0000, + 0x02cd, 0x0007, 0x0043, 0x140f, 0x141f, 0x1429, 0x143c, 0x1446, + 0x1456, 0x1460, 0x0007, 0x0043, 0x146d, 0x1474, 0x1478, 0x147c, + 0x1480, 0x1487, 0x148e, 0x0007, 0x0043, 0x1492, 0x149a, 0x149f, + 0x14a4, 0x14a9, 0x14b1, 0x14b9, 0x0007, 0x0043, 0x14be, 0x14d7, + 0x14ea, 0x1506, 0x1519, 0x1532, 0x1545, 0x0002, 0x02e2, 0x02fb, + 0x0003, 0x02e6, 0x02ed, 0x02f4, 0x0005, 0x0043, 0xffff, 0x155b, + 0x1563, 0x156b, 0x1573, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, + // Entry 32040 - 3207F + 0x0037, 0x23b3, 0x0005, 0x0043, 0xffff, 0x157b, 0x1590, 0x15a5, + 0x15ba, 0x0003, 0x02ff, 0x0306, 0x030d, 0x0005, 0x0043, 0xffff, + 0x15cf, 0x15d4, 0x15d9, 0x15de, 0x0005, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x0005, 0x0043, 0xffff, 0x157b, 0x1590, + 0x15a5, 0x15ba, 0x0002, 0x0317, 0x037e, 0x0003, 0x031b, 0x033c, + 0x035d, 0x0008, 0x0327, 0x032d, 0x0324, 0x0330, 0x0333, 0x0336, + 0x0339, 0x032a, 0x0001, 0x0043, 0x15e3, 0x0001, 0x0043, 0x15f9, + 0x0001, 0x0043, 0x1612, 0x0001, 0x0043, 0x1628, 0x0001, 0x0043, + // Entry 32080 - 320BF + 0x1641, 0x0001, 0x0043, 0x165a, 0x0001, 0x0043, 0x1670, 0x0001, + 0x0043, 0x1683, 0x0008, 0x0348, 0x034e, 0x0345, 0x0351, 0x0354, + 0x0357, 0x035a, 0x034b, 0x0001, 0x0043, 0x1696, 0x0001, 0x0043, + 0x169d, 0x0001, 0x0043, 0x16a4, 0x0001, 0x0043, 0x16a8, 0x0001, + 0x0043, 0x1641, 0x0001, 0x0043, 0x1612, 0x0001, 0x0043, 0x1670, + 0x0001, 0x0043, 0x1683, 0x0008, 0x0369, 0x036f, 0x0366, 0x0372, + 0x0375, 0x0378, 0x037b, 0x036c, 0x0001, 0x0043, 0x15e3, 0x0001, + 0x0043, 0x15f9, 0x0001, 0x0043, 0x1612, 0x0001, 0x0043, 0x1628, + // Entry 320C0 - 320FF + 0x0001, 0x0043, 0x1641, 0x0001, 0x0043, 0x165a, 0x0001, 0x0043, + 0x1670, 0x0001, 0x0043, 0x16b2, 0x0003, 0x0382, 0x03a3, 0x03c4, + 0x0008, 0x038e, 0x0394, 0x038b, 0x0397, 0x039a, 0x039d, 0x03a0, + 0x0391, 0x0001, 0x0043, 0x16ce, 0x0001, 0x0043, 0x15f9, 0x0001, + 0x0043, 0x16e7, 0x0001, 0x0043, 0x1628, 0x0001, 0x0043, 0x16f4, + 0x0001, 0x0043, 0x1707, 0x0001, 0x0043, 0x1711, 0x0001, 0x0043, + 0x171b, 0x0008, 0x03af, 0x03b5, 0x03ac, 0x03b8, 0x03bb, 0x03be, + 0x03c1, 0x03b2, 0x0001, 0x0043, 0x1696, 0x0001, 0x0043, 0x169d, + // Entry 32100 - 3213F + 0x0001, 0x0043, 0x1612, 0x0001, 0x0043, 0x16a8, 0x0001, 0x0043, + 0x1734, 0x0001, 0x0043, 0x148e, 0x0001, 0x0043, 0x1738, 0x0001, + 0x0043, 0x173c, 0x0008, 0x03d0, 0x03d6, 0x03cd, 0x03d9, 0x03dc, + 0x03df, 0x03e2, 0x03d3, 0x0001, 0x0043, 0x15e3, 0x0001, 0x0043, + 0x15f9, 0x0001, 0x0043, 0x1612, 0x0001, 0x0043, 0x1628, 0x0001, + 0x0043, 0x16f4, 0x0001, 0x0043, 0x1707, 0x0001, 0x0043, 0x1711, + 0x0001, 0x0043, 0x171b, 0x0003, 0x03f4, 0x0000, 0x03e9, 0x0002, + 0x03ec, 0x03f0, 0x0002, 0x0043, 0x1743, 0x17a8, 0x0002, 0x0043, + // Entry 32140 - 3217F + 0x1774, 0x17cd, 0x0002, 0x03f7, 0x03fb, 0x0002, 0x0043, 0x17f5, + 0x1829, 0x0002, 0x0043, 0x180b, 0x1832, 0x0004, 0x040d, 0x0407, + 0x0404, 0x040a, 0x0001, 0x0043, 0x1844, 0x0001, 0x0002, 0x0033, + 0x0001, 0x0002, 0x003c, 0x0001, 0x0002, 0x028b, 0x0004, 0x041e, + 0x0418, 0x0415, 0x041b, 0x0001, 0x0043, 0x185b, 0x0001, 0x0043, + 0x1891, 0x0001, 0x0005, 0x0099, 0x0001, 0x0005, 0x00a1, 0x0004, + 0x042f, 0x0429, 0x0426, 0x042c, 0x0001, 0x0006, 0x022e, 0x0001, + 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, + // Entry 32180 - 321BF + 0x0005, 0x0438, 0x0000, 0x0000, 0x0000, 0x0483, 0x0002, 0x043b, + 0x045f, 0x0003, 0x043f, 0x0000, 0x044f, 0x000e, 0x0043, 0x1936, + 0x18c4, 0x18d7, 0x18e7, 0x18fa, 0x190a, 0x191a, 0x1929, 0x1946, + 0x1959, 0x1969, 0x1979, 0x1986, 0x1990, 0x000e, 0x0043, 0x1936, + 0x18c4, 0x18d7, 0x18e7, 0x18fa, 0x190a, 0x191a, 0x1929, 0x1946, + 0x1959, 0x1969, 0x1979, 0x1986, 0x1990, 0x0003, 0x0463, 0x0000, + 0x0473, 0x000e, 0x0043, 0x1936, 0x18c4, 0x18d7, 0x18e7, 0x18fa, + 0x190a, 0x191a, 0x1929, 0x1946, 0x1959, 0x1969, 0x1979, 0x1986, + // Entry 321C0 - 321FF + 0x1990, 0x000e, 0x0043, 0x1936, 0x18c4, 0x18d7, 0x18e7, 0x18fa, + 0x190a, 0x191a, 0x1929, 0x1946, 0x1959, 0x1969, 0x1979, 0x1986, + 0x1990, 0x0001, 0x0485, 0x0001, 0x0487, 0x0001, 0x0000, 0x04ef, + 0x0005, 0x0490, 0x0000, 0x0000, 0x0000, 0x04f5, 0x0002, 0x0493, + 0x04c4, 0x0003, 0x0497, 0x04a6, 0x04b5, 0x000d, 0x0043, 0xffff, + 0x199d, 0x19ad, 0x19c0, 0x19d0, 0x19e0, 0x19f9, 0x1a09, 0x1a1f, + 0x1a35, 0x1a57, 0x1a64, 0x1a71, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + // Entry 32200 - 3223F + 0x2215, 0x2b8b, 0x2426, 0x000d, 0x0043, 0xffff, 0x199d, 0x19ad, + 0x19c0, 0x19d0, 0x19e0, 0x19f9, 0x1a09, 0x1a1f, 0x1a35, 0x1a87, + 0x1a64, 0x1a71, 0x0003, 0x04c8, 0x04d7, 0x04e6, 0x000d, 0x0043, + 0xffff, 0x199d, 0x19ad, 0x19c0, 0x19d0, 0x19e0, 0x19f9, 0x1a09, + 0x1a1f, 0x1a35, 0x1a87, 0x1a64, 0x1a71, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x2215, 0x2b8b, 0x2426, 0x000d, 0x0043, 0xffff, 0x199d, + 0x19ad, 0x19c0, 0x19d0, 0x19e0, 0x19f9, 0x1a09, 0x1a1f, 0x1a35, + // Entry 32240 - 3227F + 0x1a87, 0x1a64, 0x1a71, 0x0001, 0x04f7, 0x0001, 0x04f9, 0x0001, + 0x0043, 0x1305, 0x0008, 0x0505, 0x0000, 0x0000, 0x0000, 0x056a, + 0x0571, 0x0000, 0x9006, 0x0002, 0x0508, 0x0539, 0x0003, 0x050c, + 0x051b, 0x052a, 0x000d, 0x0043, 0xffff, 0x1a9a, 0x1aaa, 0x1ab7, + 0x1ac9, 0x1adb, 0x1aea, 0x1af9, 0x1b06, 0x1b13, 0x1b26, 0x1b33, + 0x1b49, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2b8b, 0x2426, + 0x000d, 0x0043, 0xffff, 0x1b5c, 0x1b72, 0x1ab7, 0x1b82, 0x1b94, + // Entry 32280 - 322BF + 0x1ba9, 0x1bbe, 0x1bce, 0x1bde, 0x1bf4, 0x1c0a, 0x1c26, 0x0003, + 0x053d, 0x054c, 0x055b, 0x000d, 0x0043, 0xffff, 0x1a9a, 0x1aaa, + 0x1c42, 0x1ac9, 0x1adb, 0x1aea, 0x1af9, 0x1c54, 0x1b13, 0x1b26, + 0x1b33, 0x1b49, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2b8b, + 0x2426, 0x000d, 0x0043, 0xffff, 0x1b5c, 0x1b72, 0x1ab7, 0x1b82, + 0x1b94, 0x1ba9, 0x1bbe, 0x1bce, 0x1bde, 0x1bf4, 0x1c0a, 0x1c26, + 0x0001, 0x056c, 0x0001, 0x056e, 0x0001, 0x0000, 0x06c8, 0x0004, + // Entry 322C0 - 322FF + 0x057f, 0x0579, 0x0576, 0x057c, 0x0001, 0x0002, 0x04ca, 0x0001, + 0x0000, 0x050b, 0x0001, 0x0000, 0x0514, 0x0001, 0x0000, 0x051c, + 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0588, 0x0001, 0x058a, + 0x0001, 0x058c, 0x00ec, 0x0043, 0x1c5b, 0x1c7a, 0x1c99, 0x1cb8, + 0x1cd1, 0x1cf0, 0x1d0c, 0x1d25, 0x1d44, 0x1d5d, 0x1d79, 0x1d9b, + 0x1dcd, 0x1dfc, 0x1e2b, 0x1e60, 0x1e8f, 0x1ea8, 0x1ec8, 0x1ef0, + 0x1f0f, 0x1f2b, 0x1f4a, 0x1f63, 0x1f7c, 0x1f98, 0x1fba, 0x1fdc, + 0x1ff8, 0x2017, 0x2033, 0x2052, 0x2071, 0x2090, 0x20af, 0x20c8, + // Entry 32300 - 3233F + 0x20ea, 0x2112, 0x213a, 0x2153, 0x216c, 0x2185, 0x21ad, 0x21d3, + 0x21f2, 0x2217, 0x2233, 0x224f, 0x226f, 0x2288, 0x22aa, 0x22cc, + 0x22e6, 0x2304, 0x2322, 0x2343, 0x2361, 0x237f, 0x23a0, 0x23c7, + 0x23e5, 0x240c, 0x242a, 0x244b, 0x2466, 0x248d, 0x24b1, 0x24cf, + 0x24f9, 0x2517, 0x253b, 0x2559, 0x2574, 0x2595, 0x25bc, 0x25da, + 0x25f8, 0x2616, 0x263a, 0x265c, 0x267a, 0x269c, 0x26bd, 0x26de, + 0x26ff, 0x2723, 0x2744, 0x2765, 0x2780, 0x279e, 0x27c2, 0x27e3, + 0x2801, 0x281f, 0x2840, 0x285b, 0x2882, 0x289d, 0x28be, 0x28dc, + // Entry 32340 - 3237F + 0x28fe, 0x2919, 0x293a, 0x295e, 0x297c, 0x299a, 0x29b8, 0x29e5, + 0x2a03, 0x2a27, 0x2a42, 0x2a66, 0x2a8a, 0x2aaf, 0x2ad3, 0x2b00, + 0x2b24, 0x2b45, 0x2b66, 0x2b8a, 0x2bab, 0x2bcc, 0x2bea, 0x2c0b, + 0x2c32, 0x2c5c, 0x2c7a, 0x2ca4, 0x2cc6, 0x2ce4, 0x2d05, 0x2d20, + 0x2d3e, 0x2d5c, 0x2d77, 0x2d95, 0x2db4, 0x2dcf, 0x2dee, 0x2e0c, + 0x2e27, 0x2e3c, 0x2e5d, 0x2e78, 0x2e99, 0x2eb7, 0x2ed8, 0x2ef6, + 0x2f11, 0x2f2c, 0x2f4a, 0x2f65, 0x2f86, 0x2fa1, 0x2fc2, 0x2fe6, + 0x3004, 0x3025, 0x304c, 0x306d, 0x3088, 0x30ac, 0x30ca, 0x30eb, + // Entry 32380 - 323BF + 0x310c, 0x3127, 0x3148, 0x3169, 0x3184, 0x3199, 0x31ba, 0x31d5, + 0x31f0, 0x320e, 0x322f, 0x3251, 0x3272, 0x3296, 0x32b1, 0x32d2, + 0x32f0, 0x330e, 0x332c, 0x334a, 0x3368, 0x338f, 0x33aa, 0x33c8, + 0x33e3, 0x33fe, 0x3422, 0x3446, 0x3461, 0x3482, 0x34a3, 0x34c4, + 0x34e8, 0x3503, 0x3524, 0x3543, 0x355e, 0x3576, 0x358b, 0x35af, + 0x35cd, 0x35ee, 0x360f, 0x3630, 0x364e, 0x3675, 0x3690, 0x36b1, + 0x36cf, 0x36f3, 0x3711, 0x3735, 0x3757, 0x3778, 0x3796, 0x37b8, + 0x37d9, 0x37f7, 0x3815, 0x3833, 0x3851, 0x3872, 0x388d, 0x38a8, + // Entry 323C0 - 323FF + 0x38c9, 0x38f1, 0x390f, 0x392d, 0x3948, 0x3955, 0x3962, 0x396f, + 0x0005, 0x0680, 0x0000, 0x0000, 0x0000, 0x06e5, 0x0002, 0x0683, + 0x06b4, 0x0003, 0x0687, 0x0696, 0x06a5, 0x000d, 0x0044, 0xffff, + 0x0000, 0x0019, 0x003b, 0x004e, 0x0058, 0x006b, 0x0081, 0x008b, + 0x009b, 0x00a8, 0x00b2, 0x00c5, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x2215, 0x2b8b, 0x2426, 0x000d, 0x0044, 0xffff, 0x00d8, 0x0019, + 0x003b, 0x004e, 0x0058, 0x006b, 0x0081, 0x008b, 0x00f1, 0x00a8, + // Entry 32400 - 3243F + 0x0101, 0x00c5, 0x0003, 0x06b8, 0x06c7, 0x06d6, 0x000d, 0x0044, + 0xffff, 0x00d8, 0x0114, 0x003b, 0x004e, 0x0058, 0x0136, 0x0081, + 0x008b, 0x009b, 0x00a8, 0x00b2, 0x00c5, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x2215, 0x2b8b, 0x2426, 0x000d, 0x0044, 0xffff, 0x00d8, + 0x0019, 0x003b, 0x004e, 0x0058, 0x006b, 0x0081, 0x008b, 0x00f1, + 0x00a8, 0x0101, 0x00c5, 0x0001, 0x06e7, 0x0001, 0x06e9, 0x0001, + 0x0044, 0x014c, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x06f2, + // Entry 32440 - 3247F + 0x0001, 0x06f4, 0x0001, 0x06f6, 0x0001, 0x0044, 0x0165, 0x0042, + 0x073c, 0x0741, 0x0746, 0x074b, 0x0760, 0x0770, 0x0780, 0x0795, + 0x07a5, 0x07b5, 0x07ca, 0x07da, 0x07ea, 0x0803, 0x0817, 0x082b, + 0x0830, 0x0835, 0x083a, 0x0851, 0x0868, 0x087f, 0x0884, 0x0889, + 0x088e, 0x0893, 0x0898, 0x089d, 0x08a2, 0x08a7, 0x08ac, 0x08be, + 0x08d0, 0x08e2, 0x08f4, 0x0906, 0x0918, 0x092a, 0x093c, 0x094e, + 0x0960, 0x0972, 0x0984, 0x0996, 0x09a8, 0x09ba, 0x09cc, 0x09de, + 0x09f0, 0x0a02, 0x0a14, 0x0a26, 0x0a2b, 0x0a30, 0x0a35, 0x0a49, + // Entry 32480 - 324BF + 0x0a59, 0x0a69, 0x0a7d, 0x0a8d, 0x0a9d, 0x0ab1, 0x0ac1, 0x0ad1, + 0x0ad6, 0x0adb, 0x0001, 0x073e, 0x0001, 0x0044, 0x0179, 0x0001, + 0x0743, 0x0001, 0x0044, 0x0179, 0x0001, 0x0748, 0x0001, 0x0044, + 0x0179, 0x0003, 0x074f, 0x0752, 0x0757, 0x0001, 0x0044, 0x0186, + 0x0003, 0x0044, 0x018d, 0x019d, 0x01ad, 0x0002, 0x075a, 0x075d, + 0x0001, 0x0044, 0x01bd, 0x0001, 0x0044, 0x01d8, 0x0003, 0x0764, + 0x0000, 0x0767, 0x0001, 0x0044, 0x0186, 0x0002, 0x076a, 0x076d, + 0x0001, 0x0044, 0x01bd, 0x0001, 0x0044, 0x01d8, 0x0003, 0x0774, + // Entry 324C0 - 324FF + 0x0000, 0x0777, 0x0001, 0x0044, 0x0186, 0x0002, 0x077a, 0x077d, + 0x0001, 0x0044, 0x01bd, 0x0001, 0x0044, 0x01d8, 0x0003, 0x0784, + 0x0787, 0x078c, 0x0001, 0x0044, 0x01ef, 0x0003, 0x0044, 0x0202, + 0x022a, 0x0246, 0x0002, 0x078f, 0x0792, 0x0001, 0x0044, 0x0262, + 0x0001, 0x0044, 0x0289, 0x0003, 0x0799, 0x0000, 0x079c, 0x0001, + 0x0044, 0x02ac, 0x0002, 0x079f, 0x07a2, 0x0001, 0x0044, 0x02b4, + 0x0001, 0x0044, 0x02c7, 0x0003, 0x07a9, 0x0000, 0x07ac, 0x0001, + 0x0044, 0x02ac, 0x0002, 0x07af, 0x07b2, 0x0001, 0x0044, 0x02b4, + // Entry 32500 - 3253F + 0x0001, 0x0044, 0x02c7, 0x0003, 0x07b9, 0x07bc, 0x07c1, 0x0001, + 0x0044, 0x02e0, 0x0003, 0x0044, 0x02f0, 0x030c, 0x0325, 0x0002, + 0x07c4, 0x07c7, 0x0001, 0x0044, 0x033e, 0x0001, 0x0044, 0x0362, + 0x0003, 0x07ce, 0x0000, 0x07d1, 0x0001, 0x0044, 0x0382, 0x0002, + 0x07d4, 0x07d7, 0x0001, 0x0044, 0x0387, 0x0001, 0x0044, 0x03a0, + 0x0003, 0x07de, 0x0000, 0x07e1, 0x0001, 0x0044, 0x0382, 0x0002, + 0x07e4, 0x07e7, 0x0001, 0x0044, 0x0387, 0x0001, 0x0044, 0x03a0, + 0x0004, 0x07ef, 0x07f2, 0x07f7, 0x0800, 0x0001, 0x0043, 0x140f, + // Entry 32540 - 3257F + 0x0003, 0x0044, 0x03b6, 0x03d2, 0x03eb, 0x0002, 0x07fa, 0x07fd, + 0x0001, 0x0044, 0x0404, 0x0001, 0x0044, 0x0428, 0x0001, 0x0044, + 0x0448, 0x0004, 0x0808, 0x0000, 0x080b, 0x0814, 0x0001, 0x0043, + 0x149f, 0x0002, 0x080e, 0x0811, 0x0001, 0x0044, 0x0462, 0x0001, + 0x0044, 0x047e, 0x0001, 0x0044, 0x0448, 0x0004, 0x081c, 0x0000, + 0x081f, 0x0828, 0x0001, 0x0043, 0x149f, 0x0002, 0x0822, 0x0825, + 0x0001, 0x0044, 0x0462, 0x0001, 0x0044, 0x047e, 0x0001, 0x0044, + 0x0448, 0x0001, 0x082d, 0x0001, 0x0044, 0x0497, 0x0001, 0x0832, + // Entry 32580 - 325BF + 0x0001, 0x0044, 0x04bf, 0x0001, 0x0837, 0x0001, 0x0044, 0x04bf, + 0x0003, 0x083e, 0x0841, 0x0848, 0x0001, 0x0044, 0x04d4, 0x0005, + 0x0044, 0x04f4, 0x0507, 0x051a, 0x04de, 0x0530, 0x0002, 0x084b, + 0x084e, 0x0001, 0x0044, 0x0540, 0x0001, 0x0044, 0x055e, 0x0003, + 0x0855, 0x0858, 0x085f, 0x0001, 0x0044, 0x04d4, 0x0005, 0x0044, + 0x04f4, 0x0507, 0x051a, 0x04de, 0x0530, 0x0002, 0x0862, 0x0865, + 0x0001, 0x0044, 0x0540, 0x0001, 0x0044, 0x055e, 0x0003, 0x086c, + 0x086f, 0x0876, 0x0001, 0x0044, 0x04d4, 0x0005, 0x0044, 0x04f4, + // Entry 325C0 - 325FF + 0x0507, 0x051a, 0x04de, 0x0530, 0x0002, 0x0879, 0x087c, 0x0001, + 0x0044, 0x0540, 0x0001, 0x0044, 0x055e, 0x0001, 0x0881, 0x0001, + 0x0044, 0x0578, 0x0001, 0x0886, 0x0001, 0x0044, 0x0578, 0x0001, + 0x088b, 0x0001, 0x0044, 0x0578, 0x0001, 0x0890, 0x0001, 0x0044, + 0x0591, 0x0001, 0x0895, 0x0001, 0x0044, 0x0591, 0x0001, 0x089a, + 0x0001, 0x0044, 0x0591, 0x0001, 0x089f, 0x0001, 0x0044, 0x05b3, + 0x0001, 0x08a4, 0x0001, 0x0044, 0x05ea, 0x0001, 0x08a9, 0x0001, + 0x0044, 0x05ea, 0x0003, 0x0000, 0x08b0, 0x08b5, 0x0003, 0x0044, + // Entry 32600 - 3263F + 0x0602, 0x0627, 0x0649, 0x0002, 0x08b8, 0x08bb, 0x0001, 0x0044, + 0x066b, 0x0001, 0x0044, 0x068f, 0x0003, 0x0000, 0x08c2, 0x08c7, + 0x0003, 0x0044, 0x06b8, 0x06d7, 0x06f3, 0x0002, 0x08ca, 0x08cd, + 0x0001, 0x0044, 0x066b, 0x0001, 0x0044, 0x068f, 0x0003, 0x0000, + 0x08d4, 0x08d9, 0x0003, 0x0044, 0x070f, 0x0724, 0x0736, 0x0002, + 0x08dc, 0x08df, 0x0001, 0x0044, 0x066b, 0x0001, 0x0044, 0x068f, + 0x0003, 0x0000, 0x08e6, 0x08eb, 0x0003, 0x0044, 0x0748, 0x0767, + 0x0783, 0x0002, 0x08ee, 0x08f1, 0x0001, 0x0044, 0x079f, 0x0001, + // Entry 32640 - 3267F + 0x0044, 0x07bd, 0x0003, 0x0000, 0x08f8, 0x08fd, 0x0003, 0x0044, + 0x07e0, 0x07f6, 0x0809, 0x0002, 0x0900, 0x0903, 0x0001, 0x0044, + 0x079f, 0x0001, 0x0044, 0x07bd, 0x0003, 0x0000, 0x090a, 0x090f, + 0x0003, 0x0044, 0x081c, 0x082e, 0x083d, 0x0002, 0x0912, 0x0915, + 0x0001, 0x0044, 0x079f, 0x0001, 0x0044, 0x07bd, 0x0003, 0x0000, + 0x091c, 0x0921, 0x0003, 0x0044, 0x084c, 0x0874, 0x0899, 0x0002, + 0x0924, 0x0927, 0x0001, 0x0044, 0x08be, 0x0001, 0x0044, 0x08e5, + 0x0003, 0x0000, 0x092e, 0x0933, 0x0003, 0x0044, 0x0911, 0x0930, + // Entry 32680 - 326BF + 0x094c, 0x0002, 0x0936, 0x0939, 0x0001, 0x0044, 0x08be, 0x0001, + 0x0044, 0x08e5, 0x0003, 0x0000, 0x0940, 0x0945, 0x0003, 0x0044, + 0x0911, 0x0930, 0x094c, 0x0002, 0x0948, 0x094b, 0x0001, 0x0044, + 0x08be, 0x0001, 0x0044, 0x08e5, 0x0003, 0x0000, 0x0952, 0x0957, + 0x0003, 0x0044, 0x0968, 0x0987, 0x09a3, 0x0002, 0x095a, 0x095d, + 0x0001, 0x0044, 0x09bf, 0x0001, 0x0044, 0x09dd, 0x0003, 0x0000, + 0x0964, 0x0969, 0x0003, 0x0044, 0x0a00, 0x0a16, 0x0a29, 0x0002, + 0x096c, 0x096f, 0x0001, 0x0044, 0x09bf, 0x0001, 0x0044, 0x09dd, + // Entry 326C0 - 326FF + 0x0003, 0x0000, 0x0976, 0x097b, 0x0003, 0x0044, 0x0a3c, 0x0a51, + 0x0a63, 0x0002, 0x097e, 0x0981, 0x0001, 0x0044, 0x09bf, 0x0001, + 0x0044, 0x09dd, 0x0003, 0x0000, 0x0988, 0x098d, 0x0003, 0x0044, + 0x0a75, 0x0a9a, 0x0abc, 0x0002, 0x0990, 0x0993, 0x0001, 0x0044, + 0x0ade, 0x0001, 0x0044, 0x0b02, 0x0003, 0x0000, 0x099a, 0x099f, + 0x0003, 0x0044, 0x0b2b, 0x0b47, 0x0b60, 0x0002, 0x09a2, 0x09a5, + 0x0001, 0x0044, 0x0ade, 0x0001, 0x0044, 0x0b02, 0x0003, 0x0000, + 0x09ac, 0x09b1, 0x0003, 0x0044, 0x0b79, 0x0b8e, 0x0ba0, 0x0002, + // Entry 32700 - 3273F + 0x09b4, 0x09b7, 0x0001, 0x0044, 0x0ade, 0x0001, 0x0044, 0x0b02, + 0x0003, 0x0000, 0x09be, 0x09c3, 0x0003, 0x0044, 0x0bb2, 0x0bd1, + 0x0bed, 0x0002, 0x09c6, 0x09c9, 0x0001, 0x0044, 0x0c09, 0x0001, + 0x0044, 0x0c30, 0x0003, 0x0000, 0x09d0, 0x09d5, 0x0003, 0x0044, + 0x0c53, 0x0c69, 0x0c7c, 0x0002, 0x09d8, 0x09db, 0x0001, 0x0044, + 0x0c09, 0x0001, 0x0044, 0x0c30, 0x0003, 0x0000, 0x09e2, 0x09e7, + 0x0003, 0x0044, 0x0c8f, 0x0ca4, 0x0cb6, 0x0002, 0x09ea, 0x09ed, + 0x0001, 0x0044, 0x0c09, 0x0001, 0x0044, 0x0c30, 0x0003, 0x0000, + // Entry 32740 - 3277F + 0x09f4, 0x09f9, 0x0003, 0x0044, 0x0cc8, 0x0cea, 0x0d09, 0x0002, + 0x09fc, 0x09ff, 0x0001, 0x0044, 0x0d28, 0x0001, 0x0044, 0x0d49, + 0x0003, 0x0000, 0x0a06, 0x0a0b, 0x0003, 0x0044, 0x0d6f, 0x0d88, + 0x0d9e, 0x0002, 0x0a0e, 0x0a11, 0x0001, 0x0044, 0x0d28, 0x0001, + 0x0044, 0x0d49, 0x0003, 0x0000, 0x0a18, 0x0a1d, 0x0003, 0x0044, + 0x0db4, 0x0dc6, 0x0dd5, 0x0002, 0x0a20, 0x0a23, 0x0001, 0x0044, + 0x0d28, 0x0001, 0x0044, 0x0d49, 0x0001, 0x0a28, 0x0001, 0x0044, + 0x0de4, 0x0001, 0x0a2d, 0x0001, 0x0044, 0x0de4, 0x0001, 0x0a32, + // Entry 32780 - 327BF + 0x0001, 0x0044, 0x0de4, 0x0003, 0x0a39, 0x0a3c, 0x0a40, 0x0001, + 0x0044, 0x0e16, 0x0002, 0x0044, 0xffff, 0x0e2c, 0x0002, 0x0a43, + 0x0a46, 0x0001, 0x0044, 0x0e4b, 0x0001, 0x0044, 0x0e75, 0x0003, + 0x0a4d, 0x0000, 0x0a50, 0x0001, 0x0044, 0x0e9b, 0x0002, 0x0a53, + 0x0a56, 0x0001, 0x0044, 0x0ea3, 0x0001, 0x0044, 0x0ebf, 0x0003, + 0x0a5d, 0x0000, 0x0a60, 0x0001, 0x0044, 0x0e9b, 0x0002, 0x0a63, + 0x0a66, 0x0001, 0x0044, 0x0ea3, 0x0001, 0x0044, 0x0ebf, 0x0003, + 0x0a6d, 0x0a70, 0x0a74, 0x0001, 0x0044, 0x0ed8, 0x0002, 0x0044, + // Entry 327C0 - 327FF + 0xffff, 0x0ee5, 0x0002, 0x0a77, 0x0a7a, 0x0001, 0x0044, 0x0efb, + 0x0001, 0x0044, 0x0f1e, 0x0003, 0x0a81, 0x0000, 0x0a84, 0x0001, + 0x0044, 0x0f3b, 0x0002, 0x0a87, 0x0a8a, 0x0001, 0x0044, 0x0f43, + 0x0001, 0x0044, 0x0f56, 0x0003, 0x0a91, 0x0000, 0x0a94, 0x0001, + 0x0044, 0x0f3b, 0x0002, 0x0a97, 0x0a9a, 0x0001, 0x0044, 0x0f43, + 0x0001, 0x0044, 0x0f56, 0x0003, 0x0aa1, 0x0aa4, 0x0aa8, 0x0001, + 0x0044, 0x0f6f, 0x0002, 0x0044, 0xffff, 0x0f82, 0x0002, 0x0aab, + 0x0aae, 0x0001, 0x0044, 0x0f95, 0x0001, 0x0044, 0x0fbc, 0x0003, + // Entry 32800 - 3283F + 0x0ab5, 0x0000, 0x0ab8, 0x0001, 0x0044, 0x0fdf, 0x0002, 0x0abb, + 0x0abe, 0x0001, 0x0044, 0x0fe7, 0x0001, 0x0044, 0x0ffa, 0x0003, + 0x0ac5, 0x0000, 0x0ac8, 0x0001, 0x0044, 0x0fdf, 0x0002, 0x0acb, + 0x0ace, 0x0001, 0x0044, 0x0fe7, 0x0001, 0x0044, 0x0ffa, 0x0001, + 0x0ad3, 0x0001, 0x0044, 0x1013, 0x0001, 0x0ad8, 0x0001, 0x0044, + 0x1013, 0x0001, 0x0add, 0x0001, 0x0044, 0x1013, 0x0004, 0x0ae5, + 0x0aea, 0x0aef, 0x0afe, 0x0003, 0x0000, 0x1dc7, 0x2b8e, 0x2bcd, + 0x0003, 0x0044, 0x1029, 0x103a, 0x1060, 0x0002, 0x0000, 0x0af2, + // Entry 32840 - 3287F + 0x0003, 0x0000, 0x0af9, 0x0af6, 0x0001, 0x0044, 0x1089, 0x0003, + 0x0044, 0xffff, 0x10c0, 0x1109, 0x0002, 0x0000, 0x0b01, 0x0003, + 0x0b05, 0x0c45, 0x0ba5, 0x009e, 0x0044, 0xffff, 0xffff, 0xffff, + 0xffff, 0x12e6, 0x141e, 0x153e, 0x160a, 0x1679, 0x171e, 0x17c3, + 0xffff, 0x1856, 0x1a03, 0x1ab4, 0x1b9b, 0x1ccd, 0x1d63, 0x1e1a, + 0x1f16, 0x2078, 0x21b9, 0x22fd, 0x23b7, 0x2486, 0xffff, 0xffff, + 0x258e, 0xffff, 0x26af, 0xffff, 0x27b9, 0x2864, 0x2906, 0x298a, + 0xffff, 0xffff, 0x2aac, 0x2b48, 0x2c26, 0xffff, 0xffff, 0xffff, + // Entry 32880 - 328BF + 0x2d2b, 0xffff, 0x2e43, 0x2f18, 0xffff, 0x3093, 0x31aa, 0x32d3, + 0xffff, 0xffff, 0xffff, 0xffff, 0x343b, 0xffff, 0xffff, 0x3524, + 0x3614, 0xffff, 0xffff, 0x3758, 0x381b, 0x38d8, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x3b16, 0x3bc1, 0x3c93, 0x3d53, + 0xffff, 0xffff, 0xffff, 0x3ec6, 0xffff, 0x3f96, 0xffff, 0xffff, + 0x410d, 0xffff, 0x42a9, 0xffff, 0xffff, 0xffff, 0xffff, 0x4403, + 0xffff, 0x4506, 0x4611, 0x46f5, 0x47a8, 0xffff, 0xffff, 0xffff, + 0x48cb, 0x498e, 0x4a5a, 0xffff, 0xffff, 0x4b7c, 0x4cac, 0x4db1, + // Entry 328C0 - 328FF + 0x4e6e, 0xffff, 0xffff, 0x4f87, 0x5053, 0x50fe, 0xffff, 0x520a, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x5498, 0xffff, 0x555e, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x5707, + 0xffff, 0xffff, 0x57fc, 0xffff, 0x5896, 0xffff, 0x596f, 0x5a3e, + 0x5b0a, 0xffff, 0x5be6, 0x5c97, 0xffff, 0xffff, 0xffff, 0x5db4, + 0x5e41, 0xffff, 0xffff, 0x1152, 0x14b1, 0x18d7, 0x196d, 0xffff, + 0xffff, 0x41d9, 0x53ab, 0x009e, 0x0044, 0x11f1, 0x1220, 0x125a, + 0x12ac, 0x1338, 0x1440, 0x1572, 0x1620, 0x16a1, 0x1746, 0x17e5, + // Entry 32900 - 3293F + 0xffff, 0x1872, 0x1a31, 0x1ae8, 0x1bed, 0x1cef, 0x1d91, 0x1e5a, + 0x1f77, 0x20cd, 0x2211, 0x232b, 0x23e8, 0x24b2, 0x253b, 0x2560, + 0x25c5, 0x2663, 0x26da, 0x278e, 0x27de, 0x2886, 0x2922, 0x29bb, + 0x2a3b, 0x2a78, 0x2ad1, 0x2b76, 0x2c42, 0x2cb0, 0x2ccc, 0x2cf7, + 0x2d65, 0x2e15, 0x2e74, 0x2f61, 0x3035, 0x30dc, 0x31f9, 0x32ec, + 0x334e, 0x338e, 0x33e2, 0x341c, 0x3457, 0x34bf, 0x34f9, 0x356a, + 0x3651, 0x370e, 0x3736, 0x378a, 0x3843, 0x38fd, 0x398f, 0x39af, + 0x39ef, 0x3a14, 0x3a5a, 0x3ab8, 0x3b3b, 0x3bf5, 0x3cc7, 0x3d7e, + // Entry 32940 - 3297F + 0xffff, 0x3e10, 0x3e6b, 0x3ee8, 0x3f7a, 0x3fd6, 0x4092, 0x40d6, + 0x4138, 0x4266, 0x42d1, 0x4351, 0x437f, 0x439e, 0x43c3, 0x443a, + 0x44ea, 0x4555, 0x464e, 0x4721, 0x47d0, 0x485c, 0x4878, 0x48a3, + 0x48fc, 0x49bf, 0x4a8e, 0x4b20, 0x4b3f, 0x4bb9, 0x4cef, 0x4ddc, + 0x4e9c, 0x4f40, 0x4f5f, 0x4fb5, 0x5075, 0x5132, 0x51d6, 0x5263, + 0x534b, 0x5370, 0x538c, 0x5441, 0x5478, 0x54c6, 0xffff, 0x557a, + 0x55e2, 0x5613, 0x5641, 0x567b, 0x56a0, 0x56ce, 0x56e8, 0x5729, + 0x57ac, 0x57d7, 0x5818, 0x5880, 0x58c4, 0x5950, 0x59a0, 0x5a72, + // Entry 32980 - 329BF + 0x5b2f, 0x5ba9, 0x5c11, 0x5cbc, 0x5d36, 0x5d56, 0x5d78, 0x5dd3, + 0x5e75, 0x36f8, 0x4c63, 0x1177, 0x14d0, 0x18f9, 0x198f, 0x2775, + 0x40ba, 0x41f8, 0x53cd, 0x009e, 0x0044, 0xffff, 0xffff, 0xffff, + 0xffff, 0x13ab, 0x147a, 0x15be, 0x164e, 0x16e1, 0x1786, 0x181f, + 0xffff, 0x18a6, 0x1a7d, 0x1b40, 0x1c5d, 0x1d29, 0x1dd7, 0x1ebb, + 0x1ff9, 0x2146, 0x228a, 0x2371, 0x2437, 0x24f6, 0xffff, 0xffff, + 0x2602, 0xffff, 0x2729, 0xffff, 0x2824, 0x28c6, 0x2950, 0x29f8, + 0xffff, 0xffff, 0x2b0b, 0x2bbc, 0x2c7f, 0xffff, 0xffff, 0xffff, + // Entry 329C0 - 329FF + 0x2dbd, 0xffff, 0x2ec3, 0x2fce, 0xffff, 0x3143, 0x3266, 0x331d, + 0xffff, 0xffff, 0xffff, 0xffff, 0x348b, 0xffff, 0xffff, 0x35bf, + 0x36a6, 0xffff, 0xffff, 0x37d4, 0x388c, 0x3946, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x3b7e, 0x3c44, 0x3d19, 0x3dca, + 0xffff, 0xffff, 0xffff, 0x3f34, 0xffff, 0x4034, 0xffff, 0xffff, + 0x4184, 0xffff, 0x4311, 0xffff, 0xffff, 0xffff, 0xffff, 0x448f, + 0xffff, 0x45c2, 0x46a3, 0x4765, 0x4816, 0xffff, 0xffff, 0xffff, + 0x4945, 0x4a0e, 0x4ae3, 0xffff, 0xffff, 0x4c0e, 0x4d50, 0x4e25, + // Entry 32A00 - 32A3F + 0x4eeb, 0xffff, 0xffff, 0x5004, 0x50bb, 0x5184, 0xffff, 0x52da, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x5512, 0xffff, 0x55ae, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x576c, + 0xffff, 0xffff, 0x584c, 0xffff, 0x590a, 0xffff, 0x59ef, 0x5abe, + 0x5b6c, 0xffff, 0x5c54, 0x5cf9, 0xffff, 0xffff, 0xffff, 0x5e0a, + 0x5ec1, 0xffff, 0xffff, 0x11b4, 0x1507, 0x1933, 0x19c9, 0xffff, + 0xffff, 0x422f, 0x5407, 0x0003, 0x0004, 0x012e, 0x0201, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0038, + // Entry 32A40 - 32A7F + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, + 0x0027, 0x0004, 0x0024, 0x001e, 0x001b, 0x0021, 0x0001, 0x0000, + 0x0489, 0x0001, 0x0000, 0x049a, 0x0001, 0x0000, 0x04a5, 0x0001, + 0x0000, 0x04af, 0x0004, 0x0035, 0x002f, 0x002c, 0x0032, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0008, 0x0041, 0x0000, 0x00a6, 0x00db, + 0x00f3, 0x00fb, 0x010c, 0x011d, 0x0002, 0x0044, 0x0075, 0x0003, + 0x0048, 0x0057, 0x0066, 0x000d, 0x0045, 0xffff, 0x0000, 0x000d, + // Entry 32A80 - 32ABF + 0x001a, 0x0023, 0x002e, 0x0035, 0x0040, 0x004b, 0x0056, 0x0065, + 0x0074, 0x0081, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2b8b, + 0x2426, 0x000d, 0x0045, 0xffff, 0x0000, 0x000d, 0x001a, 0x0023, + 0x002e, 0x0035, 0x0040, 0x004b, 0x0056, 0x0065, 0x0074, 0x0081, + 0x0003, 0x0079, 0x0088, 0x0097, 0x000d, 0x0045, 0xffff, 0x0000, + 0x000d, 0x001a, 0x0023, 0x002e, 0x0035, 0x0040, 0x004b, 0x0056, + 0x0065, 0x0074, 0x0081, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + // Entry 32AC0 - 32AFF + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, + 0x2b8b, 0x2426, 0x000d, 0x0045, 0xffff, 0x0000, 0x000d, 0x001a, + 0x0023, 0x002e, 0x0035, 0x0040, 0x004b, 0x0056, 0x0065, 0x0074, + 0x0081, 0x0002, 0x00a9, 0x00c2, 0x0003, 0x00ad, 0x00b4, 0x00bb, + 0x0005, 0x0000, 0xffff, 0x04e3, 0x04e6, 0x04e9, 0x04ec, 0x0005, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0000, + 0xffff, 0x04e3, 0x04e6, 0x04e9, 0x04ec, 0x0003, 0x00c6, 0x00cd, + 0x00d4, 0x0005, 0x0045, 0xffff, 0x008e, 0x00a2, 0x00a5, 0x00a8, + // Entry 32B00 - 32B3F + 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, + 0x0045, 0xffff, 0x008e, 0x00ab, 0x00c1, 0x00d7, 0x0001, 0x00dd, + 0x0003, 0x00e1, 0x0000, 0x00ea, 0x0002, 0x00e4, 0x00e7, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0002, 0x00ed, 0x00f0, + 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0001, 0x00f5, + 0x0001, 0x00f7, 0x0002, 0x0000, 0x04f5, 0x2701, 0x0004, 0x0109, + 0x0103, 0x0100, 0x0106, 0x0001, 0x0000, 0x04fc, 0x0001, 0x0000, + 0x050b, 0x0001, 0x0000, 0x0514, 0x0001, 0x0000, 0x051c, 0x0004, + // Entry 32B40 - 32B7F + 0x011a, 0x0114, 0x0111, 0x0117, 0x0001, 0x0000, 0x0524, 0x0001, + 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, + 0x0004, 0x012b, 0x0125, 0x0122, 0x0128, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0040, 0x016f, 0x0000, 0x0000, 0x0174, 0x0179, 0x017e, + 0x0183, 0x0188, 0x018d, 0x0192, 0x0197, 0x019c, 0x01a1, 0x01a6, + 0x01ab, 0x0000, 0x0000, 0x0000, 0x01b0, 0x01bb, 0x01c0, 0x0000, + 0x0000, 0x0000, 0x01c5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 32B80 - 32BBF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01ca, 0x0000, + 0x01cf, 0x01d4, 0x01d9, 0x01de, 0x01e3, 0x01e8, 0x01ed, 0x01f2, + 0x01f7, 0x01fc, 0x0001, 0x0171, 0x0001, 0x0045, 0x00ed, 0x0001, + 0x0176, 0x0001, 0x0021, 0x098b, 0x0001, 0x017b, 0x0001, 0x0021, + 0x098b, 0x0001, 0x0180, 0x0001, 0x0021, 0x098b, 0x0001, 0x0185, + 0x0001, 0x0045, 0x00f6, 0x0001, 0x018a, 0x0001, 0x0045, 0x00f6, + // Entry 32BC0 - 32BFF + 0x0001, 0x018f, 0x0001, 0x0045, 0x00f6, 0x0001, 0x0194, 0x0001, + 0x0045, 0x0101, 0x0001, 0x0199, 0x0001, 0x0045, 0x0101, 0x0001, + 0x019e, 0x0001, 0x0045, 0x0101, 0x0001, 0x01a3, 0x0001, 0x0045, + 0x0106, 0x0001, 0x01a8, 0x0001, 0x0045, 0x0106, 0x0001, 0x01ad, + 0x0001, 0x0045, 0x0106, 0x0002, 0x01b3, 0x01b6, 0x0001, 0x0045, + 0x0111, 0x0003, 0x0045, 0x011a, 0x0127, 0x0132, 0x0001, 0x01bd, + 0x0001, 0x0045, 0x0111, 0x0001, 0x01c2, 0x0001, 0x0045, 0x0111, + 0x0001, 0x01c7, 0x0001, 0x0045, 0x013f, 0x0001, 0x01cc, 0x0001, + // Entry 32C00 - 32C3F + 0x0045, 0x0153, 0x0001, 0x01d1, 0x0001, 0x0045, 0x0163, 0x0001, + 0x01d6, 0x0001, 0x0045, 0x0163, 0x0001, 0x01db, 0x0001, 0x0045, + 0x0163, 0x0001, 0x01e0, 0x0001, 0x0045, 0x016c, 0x0001, 0x01e5, + 0x0001, 0x0045, 0x016c, 0x0001, 0x01ea, 0x0001, 0x0045, 0x016c, + 0x0001, 0x01ef, 0x0001, 0x0045, 0x0177, 0x0001, 0x01f4, 0x0001, + 0x0045, 0x0177, 0x0001, 0x01f9, 0x0001, 0x0045, 0x0177, 0x0001, + 0x01fe, 0x0001, 0x0045, 0x0182, 0x0004, 0x0000, 0x0206, 0x0000, + 0x0209, 0x0001, 0x0000, 0x1de0, 0x0002, 0x0000, 0x020c, 0x0003, + // Entry 32C40 - 32C7F + 0x0210, 0x0224, 0x021a, 0x0008, 0x0045, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x018f, 0x0008, 0x0045, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x01a9, 0x0008, + 0x0045, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x01da, 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000b, 0x0007, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0013, 0x0004, 0x0021, 0x001b, 0x0018, + 0x001e, 0x0001, 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, + // Entry 32C80 - 32CBF + 0x0002, 0x04fe, 0x0001, 0x0002, 0x0508, 0x0003, 0x0004, 0x092c, + 0x0ef3, 0x0012, 0x0017, 0x0030, 0x0164, 0x01eb, 0x031f, 0x03a6, + 0x03ba, 0x03e5, 0x0608, 0x069e, 0x071c, 0x0000, 0x0000, 0x0000, + 0x0000, 0x079a, 0x0892, 0x0910, 0x0005, 0x0000, 0x0000, 0x0000, + 0x0000, 0x001d, 0x0003, 0x0026, 0x002b, 0x0021, 0x0001, 0x0023, + 0x0001, 0x0000, 0x0000, 0x0001, 0x0028, 0x0001, 0x0000, 0x0000, + 0x0001, 0x002d, 0x0001, 0x0000, 0x0000, 0x000a, 0x003b, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0142, 0x0000, 0x0153, 0x00a0, 0x00b3, + // Entry 32CC0 - 32CFF + 0x0002, 0x003e, 0x006f, 0x0003, 0x0042, 0x0051, 0x0060, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x2215, 0x2b8b, 0x2426, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x2215, 0x2b8b, 0x2426, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x2215, 0x2b8b, 0x2426, 0x0003, 0x0073, 0x0082, 0x0091, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + // Entry 32D00 - 32D3F + 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2b8b, 0x2426, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x2215, 0x2b8b, 0x2426, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x2215, 0x2b8b, 0x2426, 0x0003, 0x00a4, 0x00af, + 0x00a9, 0x0003, 0x0000, 0xffff, 0xffff, 0x004e, 0x0004, 0x0000, + 0xffff, 0xffff, 0xffff, 0x004e, 0x0002, 0x0000, 0xffff, 0x0055, + 0x0006, 0x00ba, 0x0000, 0x0000, 0x00cd, 0x00ec, 0x012f, 0x0001, + // Entry 32D40 - 32D7F + 0x00bc, 0x0001, 0x00be, 0x000d, 0x0000, 0xffff, 0x005a, 0x005d, + 0x0062, 0x0066, 0x006a, 0x2c10, 0x2784, 0x0075, 0x0079, 0x007e, + 0x221e, 0x0085, 0x0001, 0x00cf, 0x0001, 0x00d1, 0x0019, 0x0045, + 0xffff, 0x0203, 0x0216, 0x0225, 0x023a, 0x0250, 0x0258, 0x0266, + 0x0277, 0x027f, 0x0293, 0x02a9, 0x02bc, 0x02cd, 0x02dd, 0x02f0, + 0x02fb, 0x030e, 0x031a, 0x0322, 0x0333, 0x0346, 0x0357, 0x036d, + 0x037f, 0x0001, 0x00ee, 0x0001, 0x00f0, 0x003d, 0x0000, 0xffff, + 0x01bd, 0x01c4, 0x01cc, 0x01d5, 0x01de, 0x01e6, 0x01ec, 0x01f4, + // Entry 32D80 - 32DBF + 0x01fc, 0x0205, 0x020d, 0x0214, 0x021b, 0x0223, 0x022d, 0x0234, + 0x023b, 0x0245, 0x024c, 0x0253, 0x025b, 0x0264, 0x026b, 0x0273, + 0x027c, 0x0282, 0x028a, 0x0293, 0x029b, 0x02a4, 0x02ab, 0x02b2, + 0x02b9, 0x02c3, 0x02cc, 0x02d2, 0x02d9, 0x02e1, 0x02ea, 0x02f2, + 0x02fa, 0x0303, 0x0309, 0x0311, 0x031a, 0x0322, 0x0329, 0x0331, + 0x0339, 0x0340, 0x0349, 0x0351, 0x0358, 0x0362, 0x036a, 0x0370, + 0x0377, 0x0381, 0x0389, 0x0390, 0x0001, 0x0131, 0x0001, 0x0133, + 0x000d, 0x0045, 0xffff, 0x038f, 0x0398, 0x039f, 0x03a6, 0x03af, + // Entry 32DC0 - 32DFF + 0x03b8, 0x03c0, 0x03c7, 0x03cd, 0x03da, 0x03e1, 0x03e6, 0x0004, + 0x0150, 0x014a, 0x0147, 0x014d, 0x0001, 0x0045, 0x03ee, 0x0001, + 0x0033, 0x00ff, 0x0001, 0x0033, 0x0108, 0x0001, 0x0000, 0x051c, + 0x0004, 0x0161, 0x015b, 0x0158, 0x015e, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0005, 0x016a, 0x0000, 0x0000, 0x0000, 0x01d5, 0x0002, + 0x016d, 0x01a1, 0x0003, 0x0171, 0x0181, 0x0191, 0x000e, 0x0000, + 0xffff, 0x03ce, 0x03d3, 0x03d8, 0x03de, 0x2221, 0x2787, 0x278e, + // Entry 32E00 - 32E3F + 0x03f9, 0x2797, 0x040b, 0x0411, 0x0416, 0x242d, 0x000e, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x2215, 0x2b8b, 0x2426, 0x0422, 0x000e, 0x0000, + 0xffff, 0x03ce, 0x03d3, 0x03d8, 0x03de, 0x2221, 0x2787, 0x278e, + 0x03f9, 0x2797, 0x040b, 0x0411, 0x0416, 0x242d, 0x0003, 0x01a5, + 0x01b5, 0x01c5, 0x000e, 0x0000, 0xffff, 0x03ce, 0x03d3, 0x03d8, + 0x03de, 0x2221, 0x2787, 0x278e, 0x03f9, 0x2797, 0x040b, 0x0411, + 0x0416, 0x242d, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + // Entry 32E40 - 32E7F + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2b8b, + 0x2426, 0x0422, 0x000e, 0x0000, 0xffff, 0x03ce, 0x03d3, 0x03d8, + 0x03de, 0x2221, 0x2787, 0x278e, 0x03f9, 0x2797, 0x040b, 0x0411, + 0x0416, 0x242d, 0x0003, 0x01df, 0x01e5, 0x01d9, 0x0001, 0x01db, + 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x01e1, 0x0002, 0x0000, + 0x0425, 0x042a, 0x0001, 0x01e7, 0x0002, 0x0000, 0x0425, 0x042a, + 0x000a, 0x01f6, 0x0000, 0x0000, 0x0000, 0x0000, 0x02fd, 0x0000, + 0x030e, 0x025b, 0x026e, 0x0002, 0x01f9, 0x022a, 0x0003, 0x01fd, + // Entry 32E80 - 32EBF + 0x020c, 0x021b, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2b8b, + 0x2426, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2b8b, 0x2426, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2b8b, 0x2426, 0x0003, + 0x022e, 0x023d, 0x024c, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, + // Entry 32EC0 - 32EFF + 0x2b8b, 0x2426, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2b8b, + 0x2426, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2b8b, 0x2426, + 0x0003, 0x025f, 0x026a, 0x0264, 0x0003, 0x0000, 0xffff, 0xffff, + 0x004e, 0x0004, 0x0000, 0xffff, 0xffff, 0xffff, 0x004e, 0x0002, + 0x0000, 0xffff, 0x0055, 0x0006, 0x0275, 0x0000, 0x0000, 0x0288, + 0x02a7, 0x02ea, 0x0001, 0x0277, 0x0001, 0x0279, 0x000d, 0x0000, + // Entry 32F00 - 32F3F + 0xffff, 0x005a, 0x005d, 0x0062, 0x0066, 0x006a, 0x2c10, 0x2784, + 0x0075, 0x0079, 0x007e, 0x221e, 0x0085, 0x0001, 0x028a, 0x0001, + 0x028c, 0x0019, 0x0045, 0xffff, 0x0203, 0x0216, 0x0225, 0x023a, + 0x0250, 0x0258, 0x0266, 0x0277, 0x027f, 0x0293, 0x02a9, 0x02bc, + 0x02cd, 0x02dd, 0x02f0, 0x02fb, 0x030e, 0x031a, 0x0322, 0x0333, + 0x0346, 0x0357, 0x036d, 0x037f, 0x0001, 0x02a9, 0x0001, 0x02ab, + 0x003d, 0x0000, 0xffff, 0x01bd, 0x01c4, 0x01cc, 0x01d5, 0x01de, + 0x01e6, 0x01ec, 0x01f4, 0x01fc, 0x0205, 0x020d, 0x0214, 0x021b, + // Entry 32F40 - 32F7F + 0x0223, 0x022d, 0x0234, 0x023b, 0x0245, 0x024c, 0x0253, 0x025b, + 0x0264, 0x026b, 0x0273, 0x027c, 0x0282, 0x028a, 0x0293, 0x029b, + 0x02a4, 0x02ab, 0x02b2, 0x02b9, 0x02c3, 0x02cc, 0x02d2, 0x02d9, + 0x02e1, 0x02ea, 0x02f2, 0x02fa, 0x0303, 0x0309, 0x0311, 0x031a, + 0x0322, 0x0329, 0x0331, 0x0339, 0x0340, 0x0349, 0x0351, 0x0358, + 0x0362, 0x036a, 0x0370, 0x0377, 0x0381, 0x0389, 0x0390, 0x0001, + 0x02ec, 0x0001, 0x02ee, 0x000d, 0x0045, 0xffff, 0x038f, 0x0398, + 0x039f, 0x03a6, 0x03af, 0x03b8, 0x03c0, 0x03c7, 0x03cd, 0x03da, + // Entry 32F80 - 32FBF + 0x03e1, 0x03e6, 0x0004, 0x030b, 0x0305, 0x0302, 0x0308, 0x0001, + 0x0045, 0x03ee, 0x0001, 0x0033, 0x00ff, 0x0001, 0x0033, 0x0108, + 0x0001, 0x0000, 0x051c, 0x0004, 0x031c, 0x0316, 0x0313, 0x0319, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0005, 0x0325, 0x0000, 0x0000, + 0x0000, 0x0390, 0x0002, 0x0328, 0x035c, 0x0003, 0x032c, 0x033c, + 0x034c, 0x000e, 0x0000, 0xffff, 0x042f, 0x0438, 0x2708, 0x270e, + 0x044c, 0x0450, 0x0458, 0x0460, 0x2715, 0x046e, 0x271c, 0x0479, + // Entry 32FC0 - 32FFF + 0x0481, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2b8b, 0x2426, + 0x0422, 0x000e, 0x0000, 0xffff, 0x042f, 0x0438, 0x2708, 0x270e, + 0x044c, 0x0450, 0x0458, 0x0460, 0x2715, 0x046e, 0x271c, 0x0479, + 0x0481, 0x0003, 0x0360, 0x0370, 0x0380, 0x000e, 0x0000, 0xffff, + 0x042f, 0x0438, 0x2708, 0x270e, 0x044c, 0x0450, 0x0458, 0x0460, + 0x2715, 0x046e, 0x271c, 0x0479, 0x0481, 0x000e, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + // Entry 33000 - 3303F + 0x2424, 0x2215, 0x2b8b, 0x2426, 0x0422, 0x000e, 0x0000, 0xffff, + 0x042f, 0x0438, 0x2708, 0x270e, 0x044c, 0x0450, 0x0458, 0x0460, + 0x2715, 0x046e, 0x271c, 0x0479, 0x0481, 0x0003, 0x039a, 0x03a0, + 0x0394, 0x0001, 0x0396, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, + 0x039c, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x03a2, 0x0002, + 0x0000, 0x0425, 0x042a, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, + 0x03ac, 0x0003, 0x03b5, 0x0000, 0x03b0, 0x0001, 0x03b2, 0x0001, + 0x0000, 0x0425, 0x0001, 0x03b7, 0x0001, 0x0000, 0x0425, 0x0008, + // Entry 33040 - 3307F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03c3, 0x0000, 0x03d4, + 0x0004, 0x03d1, 0x03cb, 0x03c8, 0x03ce, 0x0001, 0x0045, 0x03fd, + 0x0001, 0x0045, 0x040e, 0x0001, 0x0045, 0x0419, 0x0001, 0x0045, + 0x0423, 0x0004, 0x03e2, 0x03dc, 0x03d9, 0x03df, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0008, 0x03ee, 0x0453, 0x04aa, 0x04df, 0x05b0, + 0x05d5, 0x05e6, 0x05f7, 0x0002, 0x03f1, 0x0422, 0x0003, 0x03f5, + 0x0404, 0x0413, 0x000d, 0x0045, 0xffff, 0x042d, 0x0433, 0x0438, + // Entry 33080 - 330BF + 0x043d, 0x0442, 0x0447, 0x044e, 0x0454, 0x045a, 0x0460, 0x0466, + 0x046d, 0x000d, 0x0000, 0xffff, 0x2b3a, 0x257f, 0x2773, 0x25eb, + 0x2289, 0x25eb, 0x2296, 0x2246, 0x2246, 0x2b3a, 0x2296, 0x2289, + 0x000d, 0x0045, 0xffff, 0x0474, 0x047b, 0x0483, 0x0488, 0x0493, + 0x049d, 0x04a7, 0x04ae, 0x04ba, 0x04c3, 0x04ca, 0x04d5, 0x0003, + 0x0426, 0x0435, 0x0444, 0x000d, 0x0045, 0xffff, 0x042d, 0x0433, + 0x0438, 0x043d, 0x0442, 0x0447, 0x044e, 0x0454, 0x045a, 0x0460, + 0x0466, 0x046d, 0x000d, 0x0000, 0xffff, 0x2b3a, 0x257f, 0x2773, + // Entry 330C0 - 330FF + 0x25eb, 0x2289, 0x25eb, 0x2296, 0x2246, 0x2246, 0x2b3a, 0x2296, + 0x2289, 0x000d, 0x0045, 0xffff, 0x04df, 0x04e6, 0x04ee, 0x04f4, + 0x04fd, 0x0506, 0x0510, 0x0516, 0x0521, 0x052b, 0x0532, 0x053c, + 0x0002, 0x0456, 0x0480, 0x0005, 0x045c, 0x0465, 0x0477, 0x0000, + 0x046e, 0x0007, 0x0045, 0x0544, 0x0547, 0x054a, 0x054d, 0x0550, + 0x0553, 0x0556, 0x0007, 0x0000, 0x2b3a, 0x2722, 0x2b42, 0x2b27, + 0x2773, 0x2722, 0x2c13, 0x0007, 0x0045, 0x055a, 0x055d, 0x0560, + 0x0563, 0x0566, 0x0569, 0x056c, 0x0007, 0x0045, 0x0570, 0x057c, + // Entry 33100 - 3313F + 0x0588, 0x0594, 0x05a2, 0x05b1, 0x05be, 0x0005, 0x0486, 0x048f, + 0x04a1, 0x0000, 0x0498, 0x0007, 0x0045, 0x0544, 0x0547, 0x054a, + 0x054d, 0x0550, 0x0553, 0x0556, 0x0007, 0x0000, 0x2b3a, 0x2722, + 0x2b42, 0x2b27, 0x2773, 0x2722, 0x2c13, 0x0007, 0x0045, 0x055a, + 0x055d, 0x0560, 0x0563, 0x0566, 0x0569, 0x056c, 0x0007, 0x0045, + 0x0570, 0x057c, 0x0588, 0x0594, 0x05a2, 0x05b1, 0x05be, 0x0002, + 0x04ad, 0x04c6, 0x0003, 0x04b1, 0x04b8, 0x04bf, 0x0005, 0x0045, + 0xffff, 0x05cc, 0x05d1, 0x05d7, 0x05de, 0x0005, 0x0000, 0xffff, + // Entry 33140 - 3317F + 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0045, 0xffff, 0x05e4, + 0x05f0, 0x05fd, 0x060b, 0x0003, 0x04ca, 0x04d1, 0x04d8, 0x0005, + 0x0045, 0xffff, 0x0618, 0x0620, 0x0629, 0x0633, 0x0005, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0045, 0xffff, + 0x05e4, 0x05f0, 0x05fd, 0x060b, 0x0002, 0x04e2, 0x0549, 0x0003, + 0x04e6, 0x0507, 0x0528, 0x0008, 0x04f2, 0x04f8, 0x04ef, 0x04fb, + 0x04fe, 0x0501, 0x0504, 0x04f5, 0x0001, 0x0045, 0x063c, 0x0001, + 0x0045, 0x0648, 0x0001, 0x0045, 0x0653, 0x0001, 0x0045, 0x065b, + // Entry 33180 - 331BF + 0x0001, 0x0045, 0x0662, 0x0001, 0x0045, 0x0668, 0x0001, 0x0045, + 0x0671, 0x0001, 0x0045, 0x0679, 0x0008, 0x0513, 0x0519, 0x0510, + 0x051c, 0x051f, 0x0522, 0x0525, 0x0516, 0x0001, 0x0045, 0x063c, + 0x0001, 0x0045, 0x0680, 0x0001, 0x0045, 0x0653, 0x0001, 0x0030, + 0x004f, 0x0001, 0x0045, 0x0662, 0x0001, 0x0045, 0x0668, 0x0001, + 0x0045, 0x0671, 0x0001, 0x0045, 0x0679, 0x0008, 0x0534, 0x053a, + 0x0531, 0x053d, 0x0540, 0x0543, 0x0546, 0x0537, 0x0001, 0x0045, + 0x063c, 0x0001, 0x0045, 0x0648, 0x0001, 0x0045, 0x0653, 0x0001, + // Entry 331C0 - 331FF + 0x0045, 0x065b, 0x0001, 0x0045, 0x0662, 0x0001, 0x0045, 0x0668, + 0x0001, 0x0045, 0x0671, 0x0001, 0x0045, 0x0679, 0x0003, 0x054d, + 0x056e, 0x058f, 0x0008, 0x0559, 0x055f, 0x0556, 0x0562, 0x0565, + 0x0568, 0x056b, 0x055c, 0x0001, 0x0045, 0x063c, 0x0001, 0x0045, + 0x0648, 0x0001, 0x0045, 0x0687, 0x0001, 0x0045, 0x065b, 0x0001, + 0x0045, 0x0662, 0x0001, 0x0045, 0x0693, 0x0001, 0x0045, 0x0671, + 0x0001, 0x0045, 0x0679, 0x0008, 0x057a, 0x0580, 0x0577, 0x0583, + 0x0586, 0x0589, 0x058c, 0x057d, 0x0001, 0x0045, 0x063c, 0x0001, + // Entry 33200 - 3323F + 0x0045, 0x0680, 0x0001, 0x0045, 0x0687, 0x0001, 0x0030, 0x004f, + 0x0001, 0x0045, 0x0662, 0x0001, 0x0045, 0x0693, 0x0001, 0x0045, + 0x0671, 0x0001, 0x0045, 0x0679, 0x0008, 0x059b, 0x05a1, 0x0598, + 0x05a4, 0x05a7, 0x05aa, 0x05ad, 0x059e, 0x0001, 0x0045, 0x063c, + 0x0001, 0x0045, 0x0648, 0x0001, 0x0045, 0x0687, 0x0001, 0x0045, + 0x065b, 0x0001, 0x0045, 0x0662, 0x0001, 0x0045, 0x0693, 0x0001, + 0x0045, 0x0671, 0x0001, 0x0045, 0x0679, 0x0003, 0x05bf, 0x05ca, + 0x05b4, 0x0002, 0x05b7, 0x05bb, 0x0002, 0x0045, 0x0699, 0x06bb, + // Entry 33240 - 3327F + 0x0002, 0x0045, 0x06a8, 0x06c7, 0x0002, 0x05c2, 0x05c6, 0x0002, + 0x002f, 0x01a6, 0x38e5, 0x0002, 0x0045, 0x06d4, 0x06c7, 0x0002, + 0x05cd, 0x05d1, 0x0002, 0x002f, 0x01a6, 0x38e5, 0x0002, 0x0045, + 0x06de, 0x06e3, 0x0004, 0x05e3, 0x05dd, 0x05da, 0x05e0, 0x0001, + 0x0045, 0x06e8, 0x0001, 0x0045, 0x0701, 0x0001, 0x0000, 0x051c, + 0x0001, 0x0000, 0x051c, 0x0004, 0x05f4, 0x05ee, 0x05eb, 0x05f1, + 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, + 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, 0x0605, 0x05ff, 0x05fc, + // Entry 33280 - 332BF + 0x0602, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0006, 0x060f, 0x0000, + 0x0000, 0x0000, 0x067a, 0x068d, 0x0002, 0x0612, 0x0646, 0x0003, + 0x0616, 0x0626, 0x0636, 0x000e, 0x0000, 0x2445, 0x054c, 0x0553, + 0x279f, 0x27a6, 0x0568, 0x2439, 0x27ac, 0x2c16, 0x0589, 0x27b7, + 0x27bd, 0x27c3, 0x27c6, 0x000e, 0x0000, 0x003f, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, + 0x2b8b, 0x2426, 0x0422, 0x000e, 0x0000, 0x2445, 0x054c, 0x0553, + // Entry 332C0 - 332FF + 0x279f, 0x27a6, 0x0568, 0x2439, 0x27ac, 0x2c16, 0x0589, 0x27b7, + 0x27bd, 0x27c3, 0x27c6, 0x0003, 0x064a, 0x065a, 0x066a, 0x000e, + 0x0000, 0x2445, 0x054c, 0x0553, 0x279f, 0x27a6, 0x0568, 0x2439, + 0x27ac, 0x2c16, 0x0589, 0x27b7, 0x27bd, 0x27c3, 0x27c6, 0x000e, + 0x0000, 0x003f, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x2215, 0x2b8b, 0x2426, 0x0422, 0x000e, + 0x0000, 0x2445, 0x054c, 0x0553, 0x279f, 0x27a6, 0x0568, 0x2439, + 0x27ac, 0x2c16, 0x0589, 0x27b7, 0x27bd, 0x27c3, 0x27c6, 0x0003, + // Entry 33300 - 3333F + 0x0683, 0x0688, 0x067e, 0x0001, 0x0680, 0x0001, 0x0000, 0x04ef, + 0x0001, 0x0685, 0x0001, 0x0000, 0x04ef, 0x0001, 0x068a, 0x0001, + 0x0000, 0x04ef, 0x0004, 0x069b, 0x0695, 0x0692, 0x0698, 0x0001, + 0x0045, 0x03fd, 0x0001, 0x0045, 0x040e, 0x0001, 0x0045, 0x0419, + 0x0001, 0x0045, 0x0423, 0x0005, 0x06a4, 0x0000, 0x0000, 0x0000, + 0x0709, 0x0002, 0x06a7, 0x06d8, 0x0003, 0x06ab, 0x06ba, 0x06c9, + 0x000d, 0x0000, 0xffff, 0x05a2, 0x05aa, 0x05b3, 0x05bc, 0x05c3, + 0x05cb, 0x05d2, 0x05d9, 0x05e1, 0x05ec, 0x05f2, 0x2724, 0x000d, + // Entry 33340 - 3337F + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x2215, 0x2b8b, 0x2426, 0x000d, 0x0000, + 0xffff, 0x05a2, 0x05aa, 0x05b3, 0x05bc, 0x05c3, 0x05cb, 0x05d2, + 0x05d9, 0x05e1, 0x05ec, 0x05f2, 0x2724, 0x0003, 0x06dc, 0x06eb, + 0x06fa, 0x000d, 0x0000, 0xffff, 0x05a2, 0x05aa, 0x05b3, 0x05bc, + 0x05c3, 0x05cb, 0x05d2, 0x05d9, 0x05e1, 0x05ec, 0x05f2, 0x2724, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, 0x2b8b, 0x2426, 0x000d, + // Entry 33380 - 333BF + 0x0000, 0xffff, 0x05a2, 0x05aa, 0x05b3, 0x05bc, 0x05c3, 0x05cb, + 0x05d2, 0x05d9, 0x05e1, 0x05ec, 0x05f2, 0x2724, 0x0003, 0x0712, + 0x0717, 0x070d, 0x0001, 0x070f, 0x0001, 0x0000, 0x0601, 0x0001, + 0x0714, 0x0001, 0x0000, 0x0601, 0x0001, 0x0719, 0x0001, 0x0000, + 0x0601, 0x0005, 0x0722, 0x0000, 0x0000, 0x0000, 0x0787, 0x0002, + 0x0725, 0x0756, 0x0003, 0x0729, 0x0738, 0x0747, 0x000d, 0x0000, + 0xffff, 0x0606, 0x27cb, 0x2732, 0x2739, 0x061f, 0x0626, 0x2741, + 0x0633, 0x27d0, 0x063d, 0x0643, 0x064d, 0x000d, 0x0000, 0xffff, + // Entry 333C0 - 333FF + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x2215, 0x2b8b, 0x2426, 0x000d, 0x0000, 0xffff, 0x0657, + 0x27db, 0x0666, 0x066f, 0x0679, 0x0682, 0x2751, 0x0692, 0x2757, + 0x06a3, 0x06ab, 0x06ba, 0x0003, 0x075a, 0x0769, 0x0778, 0x000d, + 0x0000, 0xffff, 0x0606, 0x27cb, 0x2732, 0x2739, 0x061f, 0x0626, + 0x2741, 0x0633, 0x27d0, 0x063d, 0x0643, 0x064d, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x2215, 0x2b8b, 0x2426, 0x000d, 0x0000, 0xffff, + // Entry 33400 - 3343F + 0x0657, 0x27db, 0x0666, 0x066f, 0x0679, 0x0682, 0x2751, 0x0692, + 0x2757, 0x06a3, 0x06ab, 0x06ba, 0x0003, 0x0790, 0x0795, 0x078b, + 0x0001, 0x078d, 0x0001, 0x0000, 0x06c8, 0x0001, 0x0792, 0x0001, + 0x0000, 0x06c8, 0x0001, 0x0797, 0x0001, 0x0000, 0x06c8, 0x0005, + 0x0000, 0x0000, 0x0000, 0x0000, 0x07a0, 0x0001, 0x07a2, 0x0001, + 0x07a4, 0x00ec, 0x0000, 0x06cb, 0x2c1c, 0x2c30, 0x2c43, 0x2c56, + 0x072c, 0x2c68, 0x0750, 0x2c79, 0x0775, 0x2c8a, 0x2c9d, 0x2cb6, + 0x2ccf, 0x2ce8, 0x2d01, 0x2d1a, 0x2d2b, 0x2d3d, 0x2d51, 0x2d63, + // Entry 33440 - 3347F + 0x2d75, 0x2d88, 0x2d9a, 0x08b5, 0x27fb, 0x2dab, 0x2dbd, 0x2820, + 0x2dcf, 0x2de1, 0x2df4, 0x094e, 0x2e07, 0x2e19, 0x2e2c, 0x2e3f, + 0x09ae, 0x2e54, 0x2e64, 0x2e75, 0x09f7, 0x2e85, 0x2e98, 0x0a33, + 0x0a46, 0x2eaa, 0x2ebb, 0x0a7b, 0x2ecd, 0x2ee2, 0x2ef6, 0x2f09, + 0x2f1d, 0x2f31, 0x2f45, 0x2f5a, 0x2f71, 0x2f86, 0x2f9d, 0x0b77, + 0x2fb2, 0x0ba2, 0x2fc6, 0x2fda, 0x2ff2, 0x3006, 0x301a, 0x3031, + 0x3043, 0x3057, 0x288f, 0x306d, 0x3081, 0x3097, 0x30aa, 0x30c0, + 0x30d4, 0x0cf2, 0x30e8, 0x30fc, 0x28cc, 0x3111, 0x3127, 0x313d, + // Entry 33480 - 334BF + 0x3152, 0x28df, 0x3167, 0x317c, 0x3191, 0x31a5, 0x0e04, 0x31b9, + 0x2907, 0x31cd, 0x31e3, 0x31f9, 0x320b, 0x0e96, 0x3220, 0x3235, + 0x3247, 0x0ee9, 0x325b, 0x3271, 0x3284, 0x3299, 0x32b0, 0x32c6, + 0x32db, 0x32f1, 0x3305, 0x331a, 0x332f, 0x3344, 0x335b, 0x336f, + 0x3384, 0x3397, 0x1051, 0x1066, 0x107a, 0x33ab, 0x2985, 0x33c0, + 0x10cf, 0x33d7, 0x33ee, 0x3401, 0x1124, 0x3417, 0x342c, 0x3441, + 0x3455, 0x3469, 0x347e, 0x3492, 0x34a6, 0x34bb, 0x34d1, 0x34e4, + 0x1224, 0x34f6, 0x124d, 0x1262, 0x350a, 0x29c1, 0x3521, 0x3534, + // Entry 334C0 - 334FF + 0x3548, 0x355c, 0x3571, 0x3588, 0x29eb, 0x1335, 0x359d, 0x35b1, + 0x1374, 0x35c4, 0x35d9, 0x13b4, 0x35ee, 0x3603, 0x3619, 0x362f, + 0x3642, 0x1435, 0x144b, 0x3657, 0x1473, 0x3668, 0x367a, 0x368f, + 0x14c8, 0x36a3, 0x36b8, 0x36cd, 0x36e3, 0x36f7, 0x370d, 0x3722, + 0x3737, 0x158f, 0x374a, 0x15bb, 0x375f, 0x15e4, 0x3772, 0x160d, + 0x3786, 0x2a13, 0x379c, 0x1661, 0x1676, 0x37b1, 0x16a0, 0x37c6, + 0x37db, 0x37ef, 0x3804, 0x170c, 0x3818, 0x382a, 0x3841, 0x175e, + 0x3857, 0x386a, 0x387e, 0x17b1, 0x3894, 0x38a7, 0x38bd, 0x1808, + // Entry 33500 - 3353F + 0x38d1, 0x38e5, 0x38f9, 0x390e, 0x3924, 0x3938, 0x189e, 0x18b3, + 0x394c, 0x18dd, 0x18f1, 0x3960, 0x3974, 0x192f, 0x1942, 0x3987, + 0x399c, 0x39b1, 0x39c7, 0x39db, 0x39e3, 0x39ea, 0x2adc, 0x0005, + 0x0898, 0x0000, 0x0000, 0x0000, 0x08fd, 0x0002, 0x089b, 0x08cc, + 0x0003, 0x089f, 0x08ae, 0x08bd, 0x000d, 0x0000, 0xffff, 0x19c9, + 0x19d3, 0x19df, 0x2566, 0x19eb, 0x19f2, 0x256a, 0x1a01, 0x1a06, + 0x2575, 0x23c6, 0x1a16, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x2215, + // Entry 33540 - 3357F + 0x2b8b, 0x2426, 0x000d, 0x0000, 0xffff, 0x19c9, 0x19d3, 0x19df, + 0x2566, 0x19eb, 0x19f2, 0x256a, 0x1a01, 0x1a06, 0x2575, 0x23c6, + 0x1a16, 0x0003, 0x08d0, 0x08df, 0x08ee, 0x000d, 0x0000, 0xffff, + 0x19c9, 0x19d3, 0x19df, 0x2566, 0x19eb, 0x19f2, 0x256a, 0x1a01, + 0x1a06, 0x2575, 0x23c6, 0x1a16, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x2215, 0x2b8b, 0x2426, 0x000d, 0x0000, 0xffff, 0x19c9, 0x19d3, + 0x19df, 0x2566, 0x19eb, 0x19f2, 0x256a, 0x1a01, 0x1a06, 0x2575, + // Entry 33580 - 335BF + 0x23c6, 0x1a16, 0x0003, 0x0906, 0x090b, 0x0901, 0x0001, 0x0903, + 0x0001, 0x0000, 0x1a1d, 0x0001, 0x0908, 0x0001, 0x0000, 0x1a1d, + 0x0001, 0x090d, 0x0001, 0x0000, 0x1a1d, 0x0005, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0916, 0x0003, 0x0920, 0x0926, 0x091a, 0x0001, + 0x091c, 0x0002, 0x0045, 0x0714, 0x0722, 0x0001, 0x0922, 0x0002, + 0x0045, 0x0714, 0x0722, 0x0001, 0x0928, 0x0002, 0x0045, 0x0714, + 0x0722, 0x0042, 0x096f, 0x0974, 0x0979, 0x097e, 0x099d, 0x09bc, + 0x09db, 0x09fa, 0x0a14, 0x0a2e, 0x0a4d, 0x0a6c, 0x0a8b, 0x0aae, + // Entry 335C0 - 335FF + 0x0ad1, 0x0af4, 0x0af9, 0x0afe, 0x0b03, 0x0b24, 0x0b45, 0x0b66, + 0x0b6b, 0x0b70, 0x0b75, 0x0b7a, 0x0b7f, 0x0b84, 0x0b89, 0x0b8e, + 0x0b93, 0x0baf, 0x0bcb, 0x0be7, 0x0c03, 0x0c1f, 0x0c3b, 0x0c57, + 0x0c73, 0x0c8f, 0x0cab, 0x0cc7, 0x0ce3, 0x0cff, 0x0d1b, 0x0d37, + 0x0d53, 0x0d6f, 0x0d8b, 0x0da7, 0x0dc3, 0x0ddf, 0x0de4, 0x0de9, + 0x0dee, 0x0e0c, 0x0e26, 0x0e40, 0x0e5e, 0x0e78, 0x0e92, 0x0eb0, + 0x0eca, 0x0ee4, 0x0ee9, 0x0eee, 0x0001, 0x0971, 0x0001, 0x0001, + 0x0040, 0x0001, 0x0976, 0x0001, 0x0001, 0x0040, 0x0001, 0x097b, + // Entry 33600 - 3363F + 0x0001, 0x0001, 0x0040, 0x0003, 0x0982, 0x0985, 0x098a, 0x0001, + 0x0045, 0x0729, 0x0003, 0x0045, 0x072f, 0x0743, 0x0751, 0x0002, + 0x098d, 0x0995, 0x0006, 0x0045, 0x075f, 0x075f, 0xffff, 0xffff, + 0x075f, 0x075f, 0x0006, 0x0045, 0x077d, 0x076c, 0xffff, 0xffff, + 0x076c, 0x077d, 0x0003, 0x09a1, 0x09a4, 0x09a9, 0x0001, 0x0029, + 0x006c, 0x0003, 0x0045, 0x072f, 0x0743, 0x0751, 0x0002, 0x09ac, + 0x09b4, 0x0006, 0x0045, 0x078e, 0x078e, 0xffff, 0xffff, 0x078e, + 0x078e, 0x0006, 0x0045, 0x0798, 0x0798, 0xffff, 0xffff, 0x0798, + // Entry 33640 - 3367F + 0x0798, 0x0003, 0x09c0, 0x09c3, 0x09c8, 0x0001, 0x0029, 0x006c, + 0x0003, 0x0045, 0x072f, 0x0743, 0x0751, 0x0002, 0x09cb, 0x09d3, + 0x0006, 0x0045, 0x078e, 0x078e, 0xffff, 0xffff, 0x078e, 0x078e, + 0x0006, 0x0045, 0x0798, 0x0798, 0xffff, 0xffff, 0x0798, 0x0798, + 0x0003, 0x09df, 0x09e2, 0x09e7, 0x0001, 0x0045, 0x07a6, 0x0003, + 0x0045, 0x07b0, 0x07c4, 0x07d3, 0x0002, 0x09ea, 0x09f2, 0x0006, + 0x0045, 0x07f5, 0x07e3, 0xffff, 0xffff, 0x07f5, 0x07e3, 0x0006, + 0x0045, 0x084a, 0x0808, 0xffff, 0xffff, 0x081d, 0x0834, 0x0003, + // Entry 33680 - 336BF + 0x09fe, 0x0000, 0x0a01, 0x0001, 0x0045, 0x0861, 0x0002, 0x0a04, + 0x0a0c, 0x0006, 0x0045, 0x0867, 0x0867, 0xffff, 0xffff, 0x0867, + 0x0867, 0x0006, 0x0045, 0x0874, 0x0874, 0xffff, 0xffff, 0x0874, + 0x0874, 0x0003, 0x0a18, 0x0000, 0x0a1b, 0x0001, 0x0045, 0x0861, + 0x0002, 0x0a1e, 0x0a26, 0x0006, 0x0045, 0x0867, 0x0867, 0xffff, + 0xffff, 0x0867, 0x0867, 0x0006, 0x0045, 0x0874, 0x0874, 0xffff, + 0xffff, 0x0874, 0x0874, 0x0003, 0x0a32, 0x0a35, 0x0a3a, 0x0001, + 0x0045, 0x0885, 0x0003, 0x0045, 0x088c, 0x08a0, 0x08ae, 0x0002, + // Entry 336C0 - 336FF + 0x0a3d, 0x0a45, 0x0006, 0x0045, 0x08cd, 0x08bd, 0xffff, 0xffff, + 0x08cd, 0x08bd, 0x0006, 0x0045, 0x091b, 0x08de, 0xffff, 0xffff, + 0x08f2, 0x0907, 0x0003, 0x0a51, 0x0a54, 0x0a59, 0x0001, 0x0045, + 0x0930, 0x0003, 0x0045, 0x088c, 0x08a0, 0x08ae, 0x0002, 0x0a5c, + 0x0a64, 0x0006, 0x0045, 0x0936, 0x0936, 0xffff, 0xffff, 0x0936, + 0x0936, 0x0006, 0x0045, 0x0943, 0x0943, 0xffff, 0xffff, 0x0943, + 0x0943, 0x0003, 0x0a70, 0x0a73, 0x0a78, 0x0001, 0x0045, 0x0930, + 0x0003, 0x0045, 0x088c, 0x08a0, 0x08ae, 0x0002, 0x0a7b, 0x0a83, + // Entry 33700 - 3373F + 0x0006, 0x0045, 0x0936, 0x0936, 0xffff, 0xffff, 0x0936, 0x0936, + 0x0006, 0x0045, 0x0943, 0x0943, 0xffff, 0xffff, 0x0943, 0x0943, + 0x0004, 0x0a90, 0x0a93, 0x0a98, 0x0aab, 0x0001, 0x0045, 0x0954, + 0x0003, 0x0045, 0x095d, 0x0972, 0x0981, 0x0002, 0x0a9b, 0x0aa3, + 0x0006, 0x0045, 0x09a1, 0x0990, 0xffff, 0xffff, 0x09a1, 0x0990, + 0x0006, 0x0045, 0x09f0, 0x09b3, 0xffff, 0xffff, 0x09c7, 0x09db, + 0x0001, 0x0045, 0x0a06, 0x0004, 0x0ab3, 0x0ab6, 0x0abb, 0x0ace, + 0x0001, 0x0045, 0x0a13, 0x0003, 0x0045, 0x095d, 0x0972, 0x0981, + // Entry 33740 - 3377F + 0x0002, 0x0abe, 0x0ac6, 0x0006, 0x0045, 0x0a18, 0x0a18, 0xffff, + 0xffff, 0x0a18, 0x0a18, 0x0006, 0x0045, 0x0a24, 0x0a24, 0xffff, + 0xffff, 0x0a24, 0x0a24, 0x0001, 0x0045, 0x0a06, 0x0004, 0x0ad6, + 0x0ad9, 0x0ade, 0x0af1, 0x0001, 0x0045, 0x0a13, 0x0003, 0x0045, + 0x095d, 0x0972, 0x0981, 0x0002, 0x0ae1, 0x0ae9, 0x0006, 0x0045, + 0x0a18, 0x0a18, 0xffff, 0xffff, 0x0a18, 0x0a18, 0x0006, 0x0045, + 0x0a24, 0x0a24, 0xffff, 0xffff, 0x0a24, 0x0a24, 0x0001, 0x0045, + 0x0a06, 0x0001, 0x0af6, 0x0001, 0x0045, 0x0a34, 0x0001, 0x0afb, + // Entry 33780 - 337BF + 0x0001, 0x0045, 0x0a34, 0x0001, 0x0b00, 0x0001, 0x0045, 0x0a34, + 0x0003, 0x0b07, 0x0b0a, 0x0b11, 0x0001, 0x0045, 0x0693, 0x0005, + 0x0045, 0x0a4f, 0x0a55, 0x0a5f, 0x0a46, 0x0a65, 0x0002, 0x0b14, + 0x0b1c, 0x0006, 0x0045, 0x0a79, 0x0a6b, 0xffff, 0xffff, 0x0a79, + 0x0a6b, 0x0006, 0x0045, 0x0abd, 0x0a87, 0xffff, 0xffff, 0x0a99, + 0x0aab, 0x0003, 0x0b28, 0x0b2b, 0x0b32, 0x0001, 0x0029, 0x007b, + 0x0005, 0x0045, 0x0a4f, 0x0a55, 0x0a5f, 0x0a46, 0x0a65, 0x0002, + 0x0b35, 0x0b3d, 0x0006, 0x0045, 0x0acf, 0x0acf, 0xffff, 0xffff, + // Entry 337C0 - 337FF + 0x0acf, 0x0acf, 0x0006, 0x0045, 0x0ad9, 0x0ad9, 0xffff, 0xffff, + 0x0ad9, 0x0ad9, 0x0003, 0x0b49, 0x0b4c, 0x0b53, 0x0001, 0x0029, + 0x007b, 0x0005, 0x0045, 0x0a4f, 0x0a55, 0x0a5f, 0x0a46, 0x0a65, + 0x0002, 0x0b56, 0x0b5e, 0x0006, 0x0045, 0x0acf, 0x0acf, 0xffff, + 0xffff, 0x0acf, 0x0acf, 0x0006, 0x0045, 0x0ad9, 0x0ad9, 0xffff, + 0xffff, 0x0ad9, 0x0ad9, 0x0001, 0x0b68, 0x0001, 0x0045, 0x0ae7, + 0x0001, 0x0b6d, 0x0001, 0x0045, 0x0ae7, 0x0001, 0x0b72, 0x0001, + 0x0045, 0x0ae7, 0x0001, 0x0b77, 0x0001, 0x0045, 0x0af3, 0x0001, + // Entry 33800 - 3383F + 0x0b7c, 0x0001, 0x0045, 0x0af3, 0x0001, 0x0b81, 0x0001, 0x0045, + 0x0af3, 0x0001, 0x0b86, 0x0001, 0x0045, 0x0b03, 0x0001, 0x0b8b, + 0x0001, 0x0045, 0x0b03, 0x0001, 0x0b90, 0x0001, 0x0045, 0x0b03, + 0x0003, 0x0000, 0x0b97, 0x0b9c, 0x0003, 0x0045, 0x0b1a, 0x0b31, + 0x0b42, 0x0002, 0x0b9f, 0x0ba7, 0x0006, 0x0045, 0x0b67, 0x0b54, + 0xffff, 0xffff, 0x0b67, 0x0b54, 0x0006, 0x0045, 0x0bc1, 0x0b7b, + 0xffff, 0xffff, 0x0b92, 0x0baa, 0x0003, 0x0000, 0x0bb3, 0x0bb8, + 0x0003, 0x0045, 0x0bd9, 0x0bea, 0x0bf5, 0x0002, 0x0bbb, 0x0bc3, + // Entry 33840 - 3387F + 0x0006, 0x0045, 0x0c01, 0x0c01, 0xffff, 0xffff, 0x0c01, 0x0c01, + 0x0006, 0x0045, 0x0c0e, 0x0c0e, 0xffff, 0xffff, 0x0c0e, 0x0c0e, + 0x0003, 0x0000, 0x0bcf, 0x0bd4, 0x0003, 0x0045, 0x0bd9, 0x0bea, + 0x0bf5, 0x0002, 0x0bd7, 0x0bdf, 0x0006, 0x0045, 0x0c01, 0x0c01, + 0xffff, 0xffff, 0x0c01, 0x0c01, 0x0006, 0x0045, 0x0c0e, 0x0c0e, + 0xffff, 0xffff, 0x0c0e, 0x0c0e, 0x0003, 0x0000, 0x0beb, 0x0bf0, + 0x0003, 0x0045, 0x0c1f, 0x0c36, 0x0c47, 0x0002, 0x0bf3, 0x0bfb, + 0x0006, 0x0045, 0x0c6c, 0x0c59, 0xffff, 0xffff, 0x0c6c, 0x0c59, + // Entry 33880 - 338BF + 0x0006, 0x0045, 0x0cc6, 0x0c80, 0xffff, 0xffff, 0x0c97, 0x0caf, + 0x0003, 0x0000, 0x0c07, 0x0c0c, 0x0003, 0x0045, 0x0cde, 0x0cef, + 0x0cfa, 0x0002, 0x0c0f, 0x0c17, 0x0006, 0x0045, 0x0d06, 0x0d06, + 0xffff, 0xffff, 0x0d06, 0x0d06, 0x0006, 0x0045, 0x0d13, 0x0d13, + 0xffff, 0xffff, 0x0d13, 0x0d13, 0x0003, 0x0000, 0x0c23, 0x0c28, + 0x0003, 0x0045, 0x0cde, 0x0cef, 0x0cfa, 0x0002, 0x0c2b, 0x0c33, + 0x0006, 0x0045, 0x0d06, 0x0d06, 0xffff, 0xffff, 0x0d06, 0x0d06, + 0x0006, 0x0045, 0x0d13, 0x0d13, 0xffff, 0xffff, 0x0d13, 0x0d13, + // Entry 338C0 - 338FF + 0x0003, 0x0000, 0x0c3f, 0x0c44, 0x0003, 0x0045, 0x0d24, 0x0d3b, + 0x0d4c, 0x0002, 0x0c47, 0x0c4f, 0x0006, 0x0045, 0x0d71, 0x0d5e, + 0xffff, 0xffff, 0x0d71, 0x0d5e, 0x0006, 0x0045, 0x0dcb, 0x0d85, + 0xffff, 0xffff, 0x0d9c, 0x0db4, 0x0003, 0x0000, 0x0c5b, 0x0c60, + 0x0003, 0x0045, 0x0de3, 0x0df4, 0x0dff, 0x0002, 0x0c63, 0x0c6b, + 0x0006, 0x0045, 0x0e0b, 0x0e0b, 0xffff, 0xffff, 0x0e0b, 0x0e0b, + 0x0006, 0x0045, 0x0e18, 0x0e18, 0xffff, 0xffff, 0x0e18, 0x0e18, + 0x0003, 0x0000, 0x0c77, 0x0c7c, 0x0003, 0x0045, 0x0de3, 0x0df4, + // Entry 33900 - 3393F + 0x0dff, 0x0002, 0x0c7f, 0x0c87, 0x0006, 0x0045, 0x0e0b, 0x0e0b, + 0xffff, 0xffff, 0x0e0b, 0x0e0b, 0x0006, 0x0045, 0x0e18, 0x0e18, + 0xffff, 0xffff, 0x0e18, 0x0e18, 0x0003, 0x0000, 0x0c93, 0x0c98, + 0x0003, 0x0045, 0x0e29, 0x0e42, 0x0e55, 0x0002, 0x0c9b, 0x0ca3, + 0x0006, 0x0045, 0x0e7e, 0x0e69, 0xffff, 0xffff, 0x0e7e, 0x0e69, + 0x0006, 0x0045, 0x0ee0, 0x0e94, 0xffff, 0xffff, 0x0ead, 0x0ec7, + 0x0003, 0x0000, 0x0caf, 0x0cb4, 0x0003, 0x0045, 0x0efa, 0x0f0c, + 0x0f18, 0x0002, 0x0cb7, 0x0cbf, 0x0006, 0x0045, 0x0f25, 0x0f25, + // Entry 33940 - 3397F + 0xffff, 0xffff, 0x0f25, 0x0f25, 0x0006, 0x0045, 0x0f33, 0x0f33, + 0xffff, 0xffff, 0x0f33, 0x0f33, 0x0003, 0x0000, 0x0ccb, 0x0cd0, + 0x0003, 0x0045, 0x0efa, 0x0f0c, 0x0f18, 0x0002, 0x0cd3, 0x0cdb, + 0x0006, 0x0045, 0x0f25, 0x0f25, 0xffff, 0xffff, 0x0f25, 0x0f25, + 0x0006, 0x0045, 0x0f33, 0x0f33, 0xffff, 0xffff, 0x0f33, 0x0f33, + 0x0003, 0x0000, 0x0ce7, 0x0cec, 0x0003, 0x0045, 0x0f45, 0x0f5f, + 0x0f73, 0x0002, 0x0cef, 0x0cf7, 0x0006, 0x0045, 0x0f9e, 0x0f88, + 0xffff, 0xffff, 0x0f9e, 0x0f88, 0x0006, 0x0045, 0x1004, 0x0fb5, + // Entry 33980 - 339BF + 0xffff, 0xffff, 0x0fcf, 0x0fea, 0x0003, 0x0000, 0x0d03, 0x0d08, + 0x0003, 0x0045, 0x101f, 0x1030, 0x103b, 0x0002, 0x0d0b, 0x0d13, + 0x0006, 0x0045, 0x0867, 0x0867, 0xffff, 0xffff, 0x0867, 0x0867, + 0x0006, 0x0045, 0x0874, 0x0874, 0xffff, 0xffff, 0x0874, 0x0874, + 0x0003, 0x0000, 0x0d1f, 0x0d24, 0x0003, 0x0045, 0x101f, 0x1030, + 0x103b, 0x0002, 0x0d27, 0x0d2f, 0x0006, 0x0045, 0x0867, 0x0867, + 0xffff, 0xffff, 0x0867, 0x0867, 0x0006, 0x0045, 0x0874, 0x0874, + 0xffff, 0xffff, 0x0874, 0x0874, 0x0003, 0x0000, 0x0d3b, 0x0d40, + // Entry 339C0 - 339FF + 0x0003, 0x0045, 0x1047, 0x105f, 0x1071, 0x0002, 0x0d43, 0x0d4b, + 0x0006, 0x0045, 0x1098, 0x1084, 0xffff, 0xffff, 0x1098, 0x1084, + 0x0006, 0x0045, 0x10f6, 0x10ad, 0xffff, 0xffff, 0x10c5, 0x10de, + 0x0003, 0x0000, 0x0d57, 0x0d5c, 0x0003, 0x0045, 0x110f, 0x1121, + 0x112d, 0x0002, 0x0d5f, 0x0d67, 0x0006, 0x0045, 0x113a, 0x113a, + 0xffff, 0xffff, 0x113a, 0x113a, 0x0006, 0x0045, 0x1148, 0x1148, + 0xffff, 0xffff, 0x1148, 0x1148, 0x0003, 0x0000, 0x0d73, 0x0d78, + 0x0003, 0x0045, 0x110f, 0x1121, 0x112d, 0x0002, 0x0d7b, 0x0d83, + // Entry 33A00 - 33A3F + 0x0006, 0x0045, 0x113a, 0x113a, 0xffff, 0xffff, 0x113a, 0x113a, + 0x0006, 0x0045, 0x1148, 0x1148, 0xffff, 0xffff, 0x1148, 0x1148, + 0x0003, 0x0000, 0x0d8f, 0x0d94, 0x0003, 0x0045, 0x115a, 0x1173, + 0x1186, 0x0002, 0x0d97, 0x0d9f, 0x0006, 0x0045, 0x11af, 0x119a, + 0xffff, 0xffff, 0x11af, 0x119a, 0x0006, 0x0045, 0x1211, 0x11c5, + 0xffff, 0xffff, 0x11de, 0x11f8, 0x0003, 0x0000, 0x0dab, 0x0db0, + 0x0003, 0x0045, 0x122b, 0x123e, 0x124b, 0x0002, 0x0db3, 0x0dbb, + 0x0006, 0x0045, 0x1259, 0x1259, 0xffff, 0xffff, 0x1259, 0x1259, + // Entry 33A40 - 33A7F + 0x0006, 0x0045, 0x1268, 0x1268, 0xffff, 0xffff, 0x1268, 0x1268, + 0x0003, 0x0000, 0x0dc7, 0x0dcc, 0x0003, 0x0045, 0x122b, 0x123e, + 0x124b, 0x0002, 0x0dcf, 0x0dd7, 0x0006, 0x0045, 0x1259, 0x119a, + 0xffff, 0xffff, 0x1259, 0x1259, 0x0006, 0x0045, 0x1268, 0x1268, + 0xffff, 0xffff, 0x1268, 0x1268, 0x0001, 0x0de1, 0x0001, 0x0045, + 0x127b, 0x0001, 0x0de6, 0x0001, 0x0045, 0x127b, 0x0001, 0x0deb, + 0x0001, 0x0045, 0x127b, 0x0003, 0x0df2, 0x0df5, 0x0df9, 0x0001, + 0x0045, 0x1292, 0x0002, 0x0045, 0xffff, 0x129a, 0x0002, 0x0dfc, + // Entry 33A80 - 33ABF + 0x0e04, 0x0006, 0x0045, 0x12b9, 0x12a9, 0xffff, 0xffff, 0x12b9, + 0x12a9, 0x0006, 0x0045, 0x1305, 0x12c9, 0xffff, 0xffff, 0x12dd, + 0x12f1, 0x0003, 0x0e10, 0x0000, 0x0e13, 0x0001, 0x0045, 0x1319, + 0x0002, 0x0e16, 0x0e1e, 0x0006, 0x0045, 0x131e, 0x131e, 0xffff, + 0xffff, 0x131e, 0x131e, 0x0006, 0x0045, 0x132a, 0x132a, 0xffff, + 0xffff, 0x132a, 0x132a, 0x0003, 0x0e2a, 0x0000, 0x0e2d, 0x0001, + 0x0000, 0x213b, 0x0002, 0x0e30, 0x0e38, 0x0006, 0x0045, 0x131e, + 0x131e, 0xffff, 0xffff, 0x131e, 0x131e, 0x0006, 0x0045, 0x132a, + // Entry 33AC0 - 33AFF + 0x132a, 0xffff, 0xffff, 0x132a, 0x132a, 0x0003, 0x0e44, 0x0e47, + 0x0e4b, 0x0001, 0x0045, 0x133a, 0x0002, 0x0045, 0xffff, 0x1342, + 0x0002, 0x0e4e, 0x0e56, 0x0006, 0x0045, 0x1360, 0x1350, 0xffff, + 0xffff, 0x1360, 0x1350, 0x0006, 0x0045, 0x13ab, 0x1371, 0xffff, + 0xffff, 0x1384, 0x1397, 0x0003, 0x0e62, 0x0000, 0x0e65, 0x0001, + 0x0001, 0x07c5, 0x0002, 0x0e68, 0x0e70, 0x0006, 0x0045, 0x13c0, + 0x13c0, 0xffff, 0xffff, 0x13c0, 0x13c0, 0x0006, 0x0045, 0x13cc, + 0x13cc, 0xffff, 0xffff, 0x13cc, 0x13cc, 0x0003, 0x0e7c, 0x0000, + // Entry 33B00 - 33B3F + 0x0e7f, 0x0001, 0x0001, 0x07c5, 0x0002, 0x0e82, 0x0e8a, 0x0006, + 0x0045, 0x13c0, 0x13c0, 0xffff, 0xffff, 0x13c0, 0x13c0, 0x0006, + 0x0045, 0x13cc, 0x13cc, 0xffff, 0xffff, 0x13cc, 0x13cc, 0x0003, + 0x0e96, 0x0e99, 0x0e9d, 0x0001, 0x0045, 0x13dc, 0x0002, 0x0045, + 0xffff, 0x13e5, 0x0002, 0x0ea0, 0x0ea8, 0x0006, 0x0045, 0x13fc, + 0x13eb, 0xffff, 0xffff, 0x13fc, 0x13eb, 0x0006, 0x0045, 0x144c, + 0x140f, 0xffff, 0xffff, 0x1423, 0x1437, 0x0003, 0x0eb4, 0x0000, + 0x0eb7, 0x0001, 0x0001, 0x083e, 0x0002, 0x0eba, 0x0ec2, 0x0006, + // Entry 33B40 - 33B7F + 0x0045, 0x1463, 0x1463, 0xffff, 0xffff, 0x1463, 0x1463, 0x0006, + 0x0045, 0x146f, 0x146f, 0xffff, 0xffff, 0x146f, 0x146f, 0x0003, + 0x0ece, 0x0000, 0x0ed1, 0x0001, 0x0000, 0x2002, 0x0002, 0x0ed4, + 0x0edc, 0x0006, 0x0045, 0x147f, 0x147f, 0xffff, 0xffff, 0x147f, + 0x147f, 0x0006, 0x0045, 0x1488, 0x1488, 0xffff, 0xffff, 0x1488, + 0x1488, 0x0001, 0x0ee6, 0x0001, 0x0045, 0x1495, 0x0001, 0x0eeb, + 0x0001, 0x0045, 0x1495, 0x0001, 0x0ef0, 0x0001, 0x0045, 0x1495, + 0x0004, 0x0ef8, 0x0efd, 0x0f02, 0x0f11, 0x0003, 0x001d, 0x0e69, + // Entry 33B80 - 33BBF + 0x2212, 0x2219, 0x0003, 0x0045, 0x14a2, 0x14ae, 0x14c2, 0x0002, + 0x0000, 0x0f05, 0x0003, 0x0000, 0x0f0c, 0x0f09, 0x0001, 0x0045, + 0x14d6, 0x0003, 0x0045, 0xffff, 0x14f3, 0x150d, 0x0002, 0x0000, + 0x0f14, 0x0003, 0x0f18, 0x1058, 0x0fb8, 0x009e, 0x0045, 0xffff, + 0xffff, 0xffff, 0xffff, 0x15b2, 0x1607, 0x1684, 0x16c7, 0x173a, + 0x17aa, 0x181d, 0x18b1, 0x18f4, 0x19a5, 0x19e5, 0x1a2b, 0x1a89, + 0x1acf, 0x1b0c, 0x1b76, 0x1bf8, 0x1c53, 0x1cb4, 0x1d03, 0x1d4f, + 0xffff, 0xffff, 0x1db7, 0xffff, 0x1e1a, 0xffff, 0x1e92, 0x1ecf, + // Entry 33BC0 - 33BFF + 0x1f0c, 0x1f49, 0xffff, 0xffff, 0x1fbd, 0x2003, 0x2050, 0xffff, + 0xffff, 0xffff, 0x20c5, 0xffff, 0x2124, 0x2179, 0xffff, 0x21e8, + 0x223d, 0x2293, 0xffff, 0xffff, 0xffff, 0xffff, 0x2336, 0xffff, + 0xffff, 0x239d, 0x23fb, 0xffff, 0xffff, 0x2494, 0x24ed, 0x252d, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x25f1, 0x2628, + 0x2668, 0x26a8, 0x26eb, 0xffff, 0xffff, 0x2795, 0xffff, 0x27e5, + 0xffff, 0xffff, 0x2864, 0xffff, 0x28f4, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2981, 0xffff, 0x29d8, 0x2a4e, 0x2ac4, 0x2b0d, 0xffff, + // Entry 33C00 - 33C3F + 0xffff, 0xffff, 0x2b75, 0x2bdc, 0x2c40, 0xffff, 0xffff, 0x2cb3, + 0x2d37, 0x2d83, 0x2dba, 0xffff, 0xffff, 0x2e2b, 0x2e74, 0x2ea8, + 0xffff, 0x2f00, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2ffd, + 0x3040, 0x307d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x3138, 0xffff, 0xffff, 0x31a2, 0xffff, 0x31e9, 0xffff, + 0x3249, 0x328f, 0x32d8, 0xffff, 0x3327, 0x3373, 0xffff, 0xffff, + 0xffff, 0x33f5, 0x3435, 0xffff, 0xffff, 0x1524, 0x1647, 0x192e, + 0x1965, 0xffff, 0xffff, 0x28a7, 0x2f98, 0x009e, 0x0045, 0x155a, + // Entry 33C40 - 33C7F + 0x156d, 0x1587, 0x159c, 0x15c9, 0x1617, 0x1695, 0x16e8, 0x175a, + 0x17cb, 0x1849, 0x18c2, 0x1902, 0x19b5, 0x19f7, 0x1a45, 0x1a9b, + 0x1ade, 0x1b2a, 0x1b9c, 0x1c11, 0x1c6e, 0x1cc9, 0x1d17, 0x1d62, + 0x1d98, 0x1da6, 0x1dc9, 0x1dfd, 0x1e33, 0x1e83, 0x1ea1, 0x1ede, + 0x1f1b, 0x1f5c, 0x1f92, 0x1fa8, 0x1fcf, 0x2015, 0x205d, 0x2087, + 0x2096, 0x20b1, 0x20da, 0x2114, 0x213b, 0x218e, 0x21c8, 0x21ff, + 0x2254, 0x22a2, 0x22d0, 0x22ec, 0x2316, 0x2327, 0x2346, 0x2376, + 0x238c, 0x23b7, 0x2417, 0x246c, 0x2485, 0x24ab, 0x24fd, 0x253a, + // Entry 33C80 - 33CBF + 0x2564, 0x2573, 0x258c, 0x259f, 0x25bd, 0x25d6, 0x25fe, 0x2638, + 0x2678, 0x26b9, 0x270d, 0x2761, 0x277a, 0x27a5, 0x27d5, 0x27f9, + 0x2831, 0x2851, 0x2875, 0x28de, 0x2904, 0x2934, 0x2946, 0x2956, + 0x296b, 0x2994, 0x29ca, 0x29fa, 0x2a70, 0x2ad7, 0x2b1c, 0x2b4a, + 0x2b5a, 0x2b67, 0x2b92, 0x2bf8, 0x2c55, 0x2c8f, 0x2c9d, 0x2ccf, + 0x2d4b, 0x2d90, 0x2dcb, 0x2dfd, 0x2e0a, 0x2e3e, 0x2e80, 0x2eb9, + 0x2eeb, 0x2f1d, 0x2f67, 0x2f77, 0x2f87, 0x2fde, 0x2fee, 0x300e, + 0x304f, 0x308a, 0x30b4, 0x30c6, 0x30d8, 0x30ef, 0x310a, 0x311a, + // Entry 33CC0 - 33CFF + 0x3128, 0x314a, 0x317e, 0x3193, 0x31b0, 0x31dc, 0x31ff, 0x323b, + 0x325b, 0x32a2, 0x32e7, 0x3315, 0x333b, 0x3385, 0x33b9, 0x33c8, + 0x33db, 0x3405, 0x344b, 0x245f, 0x2d17, 0x152f, 0x1656, 0x193b, + 0x1975, 0x1e75, 0x2843, 0x28b4, 0x2faa, 0x009e, 0x0045, 0xffff, + 0xffff, 0xffff, 0xffff, 0x15e8, 0x162f, 0x16ae, 0x1711, 0x1782, + 0x17f4, 0x187d, 0x18db, 0x1918, 0x19cd, 0x1a11, 0x1a67, 0x1ab5, + 0x1af5, 0x1b50, 0x1bca, 0x1c32, 0x1c91, 0x1ce6, 0x1d33, 0x1d7d, + 0xffff, 0xffff, 0x1de3, 0xffff, 0x1e54, 0xffff, 0x1eb8, 0x1ef5, + // Entry 33D00 - 33D3F + 0x1f32, 0x1f77, 0xffff, 0xffff, 0x1fe9, 0x202f, 0x2072, 0xffff, + 0xffff, 0xffff, 0x20f7, 0xffff, 0x215a, 0x21ab, 0xffff, 0x221e, + 0x2274, 0x22b9, 0xffff, 0xffff, 0xffff, 0xffff, 0x235e, 0xffff, + 0xffff, 0x23d9, 0x243b, 0xffff, 0xffff, 0x24cc, 0x2515, 0x254f, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2613, 0x2650, + 0x2690, 0x26d2, 0x2737, 0xffff, 0xffff, 0x27bd, 0xffff, 0x2815, + 0xffff, 0xffff, 0x288e, 0xffff, 0x291c, 0xffff, 0xffff, 0xffff, + 0xffff, 0x29af, 0xffff, 0x2a24, 0x2a9a, 0x2af2, 0x2b33, 0xffff, + // Entry 33D40 - 33D7F + 0xffff, 0xffff, 0x2bb7, 0x2c1c, 0x2c72, 0xffff, 0xffff, 0x2cf3, + 0x2d67, 0x2da5, 0x2de4, 0xffff, 0xffff, 0x2e59, 0x2e94, 0x2ed2, + 0xffff, 0x2f42, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3027, + 0x3066, 0x309f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x3164, 0xffff, 0xffff, 0x31c6, 0xffff, 0x321d, 0xffff, + 0x3275, 0x32bd, 0x32fe, 0xffff, 0x3357, 0x339f, 0xffff, 0xffff, + 0xffff, 0x341d, 0x3469, 0xffff, 0xffff, 0x1547, 0x166d, 0x1950, + 0x198d, 0xffff, 0xffff, 0x28c9, 0x2fc4, 0x0002, 0x0003, 0x00e9, + // Entry 33D80 - 33DBF + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, + 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, + 0x0000, 0x0000, 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, + 0x0002, 0x0000, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, + 0x0001, 0x0000, 0x240c, 0x0008, 0x002f, 0x0066, 0x008b, 0x009f, + 0x00b7, 0x00c7, 0x00d8, 0x0000, 0x0002, 0x0032, 0x0054, 0x0003, + 0x0036, 0x0000, 0x0045, 0x000d, 0x0046, 0xffff, 0x0000, 0x0004, + 0x0008, 0x000c, 0x0010, 0x0014, 0x0018, 0x001c, 0x0021, 0x0025, + // Entry 33DC0 - 33DFF + 0x0029, 0x002d, 0x000d, 0x0046, 0xffff, 0x0031, 0x0038, 0x0040, + 0x0048, 0x0050, 0x005d, 0x0065, 0x0075, 0x0080, 0x008a, 0x0093, + 0x00a0, 0x0002, 0x0000, 0x0057, 0x000d, 0x0000, 0xffff, 0x25ed, + 0x2296, 0x2296, 0x2b3c, 0x2296, 0x2296, 0x2773, 0x2296, 0x2296, + 0x2296, 0x2773, 0x25ed, 0x0002, 0x0069, 0x007f, 0x0003, 0x006d, + 0x0000, 0x0076, 0x0007, 0x0046, 0x0010, 0x00a7, 0x00ab, 0x00af, + 0x00b3, 0x00b7, 0x00bb, 0x0007, 0x0046, 0x00bf, 0x00c7, 0x00ce, + 0x00d7, 0x00df, 0x00e6, 0x00ee, 0x0002, 0x0000, 0x0082, 0x0007, + // Entry 33E00 - 33E3F + 0x0000, 0x2296, 0x2b40, 0x2b40, 0x2b40, 0x2b40, 0x2b40, 0x2296, + 0x0001, 0x008d, 0x0003, 0x0091, 0x0000, 0x0098, 0x0005, 0x0046, + 0xffff, 0x00f6, 0x00f9, 0x00fc, 0x00ff, 0x0005, 0x0046, 0xffff, + 0x0102, 0x010a, 0x0112, 0x011a, 0x0001, 0x00a1, 0x0003, 0x00a5, + 0x0000, 0x00ae, 0x0002, 0x00a8, 0x00ab, 0x0001, 0x0046, 0x0122, + 0x0001, 0x0046, 0x0128, 0x0002, 0x00b1, 0x00b4, 0x0001, 0x0046, + 0x0122, 0x0001, 0x0046, 0x0128, 0x0003, 0x00c1, 0x0000, 0x00bb, + 0x0001, 0x00bd, 0x0002, 0x0046, 0x012f, 0x0144, 0x0001, 0x00c3, + // Entry 33E40 - 33E7F + 0x0002, 0x0046, 0x0159, 0x0163, 0x0004, 0x00d5, 0x00cf, 0x00cc, + 0x00d2, 0x0001, 0x0002, 0x0025, 0x0001, 0x0002, 0x0033, 0x0001, + 0x0002, 0x003c, 0x0001, 0x0002, 0x028b, 0x0004, 0x00e6, 0x00e0, + 0x00dd, 0x00e3, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, + 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0040, 0x012a, + 0x0000, 0x0000, 0x012f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0134, 0x0000, 0x0000, 0x0139, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x013e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0149, + // Entry 33E80 - 33EBF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x014e, 0x0000, 0x0153, 0x0000, 0x0000, + 0x0158, 0x0000, 0x0000, 0x015d, 0x0000, 0x0000, 0x0162, 0x0001, + 0x012c, 0x0001, 0x0046, 0x016e, 0x0001, 0x0131, 0x0001, 0x0046, + 0x0178, 0x0001, 0x0136, 0x0001, 0x0046, 0x0181, 0x0001, 0x013b, + 0x0001, 0x0046, 0x00ee, 0x0002, 0x0141, 0x0144, 0x0001, 0x0046, + // Entry 33EC0 - 33EFF + 0x0188, 0x0003, 0x0046, 0x018f, 0x0198, 0x019d, 0x0001, 0x014b, + 0x0001, 0x0046, 0x01a4, 0x0001, 0x0150, 0x0001, 0x0046, 0x01b7, + 0x0001, 0x0155, 0x0001, 0x0046, 0x01c9, 0x0001, 0x015a, 0x0001, + 0x0046, 0x01ce, 0x0001, 0x015f, 0x0001, 0x0046, 0x01d6, 0x0001, + 0x0164, 0x0001, 0x0046, 0x01e2, 0x0002, 0x0003, 0x00e9, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, + 0x0000, 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, 0x0006, + // Entry 33F00 - 33F3F + 0x000d, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, + 0x0002, 0x0587, 0x0008, 0x002f, 0x0066, 0x008b, 0x009f, 0x00b7, + 0x00c7, 0x00d8, 0x0000, 0x0002, 0x0032, 0x0054, 0x0003, 0x0036, + 0x0000, 0x0045, 0x000d, 0x0046, 0xffff, 0x01e9, 0x01ed, 0x01f1, + 0x01f5, 0x01f9, 0x01fd, 0x0201, 0x0205, 0x0209, 0x020d, 0x0211, + 0x0215, 0x000d, 0x0046, 0xffff, 0x0219, 0x0228, 0x0236, 0x0243, + 0x0255, 0x0263, 0x0273, 0x0283, 0x0291, 0x02a0, 0x02ad, 0x02bf, + 0x0002, 0x0000, 0x0057, 0x000d, 0x0000, 0xffff, 0x25ed, 0x2246, + // Entry 33F40 - 33F7F + 0x2b3e, 0x2b40, 0x25eb, 0x39f0, 0x25eb, 0x25eb, 0x25ed, 0x2722, + 0x25ed, 0x2722, 0x0002, 0x0069, 0x007f, 0x0003, 0x006d, 0x0000, + 0x0076, 0x0007, 0x0046, 0x02d5, 0x02d9, 0x02dd, 0x02e1, 0x02e5, + 0x02e9, 0x02ed, 0x0007, 0x0046, 0x02f1, 0x02f9, 0x0303, 0x030e, + 0x0318, 0x0327, 0x0332, 0x0002, 0x0000, 0x0082, 0x0007, 0x0000, + 0x257b, 0x2151, 0x2b27, 0x2b27, 0x2b27, 0x2b27, 0x2b40, 0x0001, + 0x008d, 0x0003, 0x0091, 0x0000, 0x0098, 0x0005, 0x0046, 0xffff, + 0x0338, 0x033d, 0x0342, 0x0347, 0x0005, 0x0046, 0xffff, 0x034c, + // Entry 33F80 - 33FBF + 0x035a, 0x0368, 0x0376, 0x0001, 0x00a1, 0x0003, 0x00a5, 0x0000, + 0x00ae, 0x0002, 0x00a8, 0x00ab, 0x0001, 0x0046, 0x0384, 0x0001, + 0x0046, 0x0387, 0x0002, 0x00b1, 0x00b4, 0x0001, 0x0046, 0x0384, + 0x0001, 0x0046, 0x0387, 0x0003, 0x00c1, 0x0000, 0x00bb, 0x0001, + 0x00bd, 0x0002, 0x0046, 0x038a, 0x039d, 0x0001, 0x00c3, 0x0002, + 0x0009, 0x0078, 0x57b0, 0x0004, 0x00d5, 0x00cf, 0x00cc, 0x00d2, + 0x0001, 0x0006, 0x015b, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, + 0x003c, 0x0001, 0x0002, 0x08e8, 0x0004, 0x00e6, 0x00e0, 0x00dd, + // Entry 33FC0 - 33FFF + 0x00e3, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, + 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0040, 0x012a, 0x0000, + 0x0000, 0x012f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0134, + 0x0000, 0x0000, 0x0139, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x013e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0149, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 34000 - 3403F + 0x0000, 0x0000, 0x014e, 0x0000, 0x0153, 0x0000, 0x0000, 0x0158, + 0x0000, 0x0000, 0x015d, 0x0000, 0x0000, 0x0162, 0x0001, 0x012c, + 0x0001, 0x0046, 0x03af, 0x0001, 0x0131, 0x0001, 0x0046, 0x03b5, + 0x0001, 0x0136, 0x0001, 0x0046, 0x03ba, 0x0001, 0x013b, 0x0001, + 0x000a, 0x00dd, 0x0002, 0x0141, 0x0144, 0x0001, 0x0046, 0x03be, + 0x0003, 0x0046, 0x03c8, 0x03ce, 0x03d6, 0x0001, 0x014b, 0x0001, + 0x0046, 0x03db, 0x0001, 0x0150, 0x0001, 0x0046, 0x03ea, 0x0001, + 0x0155, 0x0001, 0x0046, 0x0400, 0x0001, 0x015a, 0x0001, 0x0046, + // Entry 34040 - 3407F + 0x0404, 0x0001, 0x015f, 0x0001, 0x0046, 0x040b, 0x0001, 0x0164, + 0x0001, 0x0046, 0x041b, 0x0002, 0x0003, 0x00e9, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, + 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, 0x0006, 0x000d, + 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0002, + 0x0587, 0x0008, 0x002f, 0x0066, 0x008b, 0x009f, 0x00b7, 0x00c7, + 0x00d8, 0x0000, 0x0002, 0x0032, 0x0054, 0x0003, 0x0036, 0x0000, + // Entry 34080 - 340BF + 0x0045, 0x000d, 0x0006, 0xffff, 0x001e, 0x432b, 0x43cd, 0x42a5, + 0x43e5, 0x42ad, 0x4333, 0x4337, 0x433b, 0x43a9, 0x433f, 0x422c, + 0x000d, 0x0006, 0xffff, 0x004e, 0x0056, 0x43e9, 0x0065, 0x43e5, + 0x43ef, 0x43f4, 0x43fa, 0x4401, 0x440a, 0x4411, 0x4419, 0x0002, + 0x0000, 0x0057, 0x000d, 0x0000, 0xffff, 0x257b, 0x2b4e, 0x2b3c, + 0x2b42, 0x2b3c, 0x257b, 0x257b, 0x2b42, 0x2b3a, 0x2b50, 0x2b40, + 0x2b3e, 0x0002, 0x0069, 0x007f, 0x0003, 0x006d, 0x0000, 0x0076, + 0x0007, 0x0046, 0x0423, 0x0426, 0x0429, 0x042c, 0x042f, 0x0432, + // Entry 340C0 - 340FF + 0x0435, 0x0007, 0x0046, 0x0438, 0x0441, 0x044a, 0x0452, 0x045b, + 0x046a, 0x047a, 0x0002, 0x0000, 0x0082, 0x0007, 0x0000, 0x2b3a, + 0x2b3c, 0x2b27, 0x2151, 0x2b27, 0x2b4e, 0x2b3a, 0x0001, 0x008d, + 0x0003, 0x0091, 0x0000, 0x0098, 0x0005, 0x0000, 0xffff, 0x04e3, + 0x39f2, 0x39f5, 0x39f8, 0x0005, 0x0046, 0xffff, 0x0483, 0x0490, + 0x049f, 0x04ae, 0x0001, 0x00a1, 0x0003, 0x00a5, 0x0000, 0x00ae, + 0x0002, 0x00a8, 0x00ab, 0x0001, 0x001d, 0x050b, 0x0001, 0x001d, + 0x0510, 0x0002, 0x00b1, 0x00b4, 0x0001, 0x001d, 0x050b, 0x0001, + // Entry 34100 - 3413F + 0x001d, 0x0510, 0x0003, 0x00c1, 0x0000, 0x00bb, 0x0001, 0x00bd, + 0x0002, 0x0046, 0x04bc, 0x04d0, 0x0001, 0x00c3, 0x0002, 0x0009, + 0x0078, 0x57b0, 0x0004, 0x00d5, 0x00cf, 0x00cc, 0x00d2, 0x0001, + 0x0006, 0x015b, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, + 0x0001, 0x0002, 0x08e8, 0x0004, 0x00e6, 0x00e0, 0x00dd, 0x00e3, + 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, + 0x053d, 0x0001, 0x0000, 0x0546, 0x0040, 0x012a, 0x0000, 0x0000, + 0x012f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0134, 0x0000, + // Entry 34140 - 3417F + 0x0000, 0x0139, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x013e, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0149, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x014e, 0x0000, 0x0153, 0x0000, 0x0000, 0x0158, 0x0000, + 0x0000, 0x015d, 0x0000, 0x0000, 0x0162, 0x0001, 0x012c, 0x0001, + 0x0046, 0x04e4, 0x0001, 0x0131, 0x0001, 0x0046, 0x04ec, 0x0001, + // Entry 34180 - 341BF + 0x0136, 0x0001, 0x001a, 0x01db, 0x0001, 0x013b, 0x0001, 0x0046, + 0x04f3, 0x0002, 0x0141, 0x0144, 0x0001, 0x0046, 0x04fa, 0x0003, + 0x0046, 0x0501, 0x0509, 0x050e, 0x0001, 0x014b, 0x0001, 0x0046, + 0x0515, 0x0001, 0x0150, 0x0001, 0x0046, 0x051d, 0x0001, 0x0155, + 0x0001, 0x0046, 0x0529, 0x0001, 0x015a, 0x0001, 0x0046, 0x052e, + 0x0001, 0x015f, 0x0001, 0x0009, 0x030c, 0x0001, 0x0164, 0x0001, + 0x0046, 0x0536, 0x0003, 0x0004, 0x04c4, 0x0951, 0x0012, 0x0017, + 0x0000, 0x0030, 0x0000, 0x0097, 0x0000, 0x00fe, 0x0129, 0x0342, + // Entry 341C0 - 341FF + 0x03a6, 0x0406, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0448, + 0x04a8, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x001d, 0x0003, + 0x0026, 0x002b, 0x0021, 0x0001, 0x0023, 0x0001, 0x0046, 0x053e, + 0x0001, 0x0028, 0x0001, 0x0007, 0x0172, 0x0001, 0x002d, 0x0001, + 0x0007, 0x0172, 0x0005, 0x0036, 0x0000, 0x0000, 0x0000, 0x0081, + 0x0002, 0x0039, 0x005d, 0x0003, 0x003d, 0x0000, 0x004d, 0x000e, + 0x0046, 0xffff, 0x054b, 0x0550, 0x0555, 0x055c, 0x0563, 0x0568, + 0x0571, 0x057b, 0x0583, 0x058c, 0x0592, 0x0598, 0x059e, 0x000e, + // Entry 34200 - 3423F + 0x0046, 0xffff, 0x054b, 0x0550, 0x0555, 0x055c, 0x0563, 0x0568, + 0x0571, 0x057b, 0x0583, 0x058c, 0x0592, 0x0598, 0x059e, 0x0003, + 0x0061, 0x0000, 0x0071, 0x000e, 0x0046, 0xffff, 0x054b, 0x0550, + 0x0555, 0x055c, 0x0563, 0x0568, 0x0571, 0x057b, 0x0583, 0x058c, + 0x0592, 0x0598, 0x059e, 0x000e, 0x0046, 0xffff, 0x054b, 0x0550, + 0x0555, 0x055c, 0x0563, 0x0568, 0x0571, 0x057b, 0x0583, 0x058c, + 0x0592, 0x0598, 0x059e, 0x0003, 0x008b, 0x0091, 0x0085, 0x0001, + 0x0087, 0x0002, 0x0046, 0x05a4, 0x05b7, 0x0001, 0x008d, 0x0002, + // Entry 34240 - 3427F + 0x0046, 0x05c9, 0x05d6, 0x0001, 0x0093, 0x0002, 0x0046, 0x05c9, + 0x05d6, 0x0005, 0x009d, 0x0000, 0x0000, 0x0000, 0x00e8, 0x0002, + 0x00a0, 0x00c4, 0x0003, 0x00a4, 0x0000, 0x00b4, 0x000e, 0x0046, + 0xffff, 0x05e2, 0x05ec, 0x05f4, 0x05fb, 0x0603, 0x0608, 0x0612, + 0x061b, 0x0624, 0x062c, 0x0632, 0x0639, 0x0641, 0x000e, 0x0046, + 0xffff, 0x05e2, 0x05ec, 0x05f4, 0x05fb, 0x0603, 0x0608, 0x0612, + 0x061b, 0x0624, 0x062c, 0x0632, 0x0639, 0x0641, 0x0003, 0x00c8, + 0x0000, 0x00d8, 0x000e, 0x0046, 0xffff, 0x05e2, 0x05ec, 0x05f4, + // Entry 34280 - 342BF + 0x05fb, 0x0603, 0x0608, 0x0612, 0x061b, 0x0624, 0x062c, 0x0632, + 0x0639, 0x0641, 0x000e, 0x0046, 0xffff, 0x05e2, 0x05ec, 0x05f4, + 0x05fb, 0x0603, 0x0608, 0x0612, 0x061b, 0x0624, 0x062c, 0x0632, + 0x0639, 0x0641, 0x0003, 0x00f2, 0x00f8, 0x00ec, 0x0001, 0x00ee, + 0x0002, 0x0046, 0x064b, 0x0668, 0x0001, 0x00f4, 0x0002, 0x0046, + 0x0684, 0x0692, 0x0001, 0x00fa, 0x0002, 0x0046, 0x0684, 0x0692, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0107, 0x0000, + 0x0118, 0x0004, 0x0115, 0x010f, 0x010c, 0x0112, 0x0001, 0x0046, + // Entry 342C0 - 342FF + 0x069f, 0x0001, 0x0046, 0x06b9, 0x0001, 0x0046, 0x06cd, 0x0001, + 0x001f, 0x0b31, 0x0004, 0x0126, 0x0120, 0x011d, 0x0123, 0x0001, + 0x0046, 0x06e0, 0x0001, 0x0046, 0x06e0, 0x0001, 0x0006, 0x022e, + 0x0001, 0x0006, 0x022e, 0x0008, 0x0132, 0x0197, 0x01ee, 0x0223, + 0x02f4, 0x030f, 0x0320, 0x0331, 0x0002, 0x0135, 0x0166, 0x0003, + 0x0139, 0x0148, 0x0157, 0x000d, 0x0025, 0xffff, 0x0208, 0x360c, + 0x3612, 0x3618, 0x361d, 0x3623, 0x3629, 0x362f, 0x3634, 0x363a, + 0x363f, 0x3644, 0x000d, 0x0000, 0xffff, 0x257b, 0x2b4e, 0x2b3c, + // Entry 34300 - 3433F + 0x2b42, 0x2b3c, 0x257b, 0x257b, 0x2b42, 0x2b3a, 0x2b50, 0x2b40, + 0x2b3e, 0x000d, 0x0046, 0xffff, 0x06f1, 0x06fb, 0x0706, 0x070c, + 0x0715, 0x071b, 0x0723, 0x072b, 0x0733, 0x073e, 0x0747, 0x0751, + 0x0003, 0x016a, 0x0179, 0x0188, 0x000d, 0x0025, 0xffff, 0x0208, + 0x360c, 0x3649, 0x3618, 0x364f, 0x3623, 0x3629, 0x362f, 0x3634, + 0x363a, 0x363f, 0x3644, 0x000d, 0x0000, 0xffff, 0x257b, 0x2b4e, + 0x2b3c, 0x2b42, 0x2b3c, 0x257b, 0x257b, 0x2b42, 0x2b3a, 0x2b50, + 0x2b40, 0x2b3e, 0x000d, 0x0046, 0xffff, 0x06f1, 0x06fb, 0x075b, + // Entry 34340 - 3437F + 0x070c, 0x0761, 0x071b, 0x0723, 0x072b, 0x0733, 0x073e, 0x0747, + 0x0751, 0x0002, 0x019a, 0x01c4, 0x0005, 0x01a0, 0x01a9, 0x01bb, + 0x0000, 0x01b2, 0x0007, 0x0046, 0x0767, 0x076f, 0x0776, 0x077c, + 0x0784, 0x078d, 0x0795, 0x0007, 0x0000, 0x2b3a, 0x2722, 0x2b50, + 0x2b27, 0x25ed, 0x2722, 0x2b3a, 0x0007, 0x0046, 0x079c, 0x079f, + 0x07a2, 0x07a5, 0x07a8, 0x07ab, 0x07ae, 0x0007, 0x0046, 0x07b1, + 0x07bc, 0x07c6, 0x07cf, 0x07da, 0x07e6, 0x07f1, 0x0005, 0x01ca, + 0x01d3, 0x01e5, 0x0000, 0x01dc, 0x0007, 0x0046, 0x07fb, 0x0803, + // Entry 34380 - 343BF + 0x080a, 0x0810, 0x0818, 0x0821, 0x0829, 0x0007, 0x0000, 0x2b3a, + 0x2722, 0x2b50, 0x2b27, 0x25ed, 0x2722, 0x2b3a, 0x0007, 0x0046, + 0x079c, 0x079f, 0x07a2, 0x07a5, 0x07a8, 0x07ab, 0x07ae, 0x0007, + 0x0046, 0x0830, 0x083b, 0x0845, 0x084e, 0x0859, 0x0865, 0x0870, + 0x0002, 0x01f1, 0x020a, 0x0003, 0x01f5, 0x01fc, 0x0203, 0x0005, + 0x0046, 0xffff, 0x087a, 0x0883, 0x088c, 0x0895, 0x0005, 0x000d, + 0xffff, 0x0140, 0x0143, 0x0146, 0x0149, 0x0005, 0x0046, 0xffff, + 0x089e, 0x08ac, 0x08ba, 0x08c8, 0x0003, 0x020e, 0x0215, 0x021c, + // Entry 343C0 - 343FF + 0x0005, 0x0046, 0xffff, 0x087a, 0x0883, 0x088c, 0x0895, 0x0005, + 0x000d, 0xffff, 0x0140, 0x0143, 0x0146, 0x0149, 0x0005, 0x0046, + 0xffff, 0x089e, 0x08ac, 0x08ba, 0x08c8, 0x0002, 0x0226, 0x028d, + 0x0003, 0x022a, 0x024b, 0x026c, 0x0008, 0x0236, 0x023c, 0x0233, + 0x023f, 0x0242, 0x0245, 0x0248, 0x0239, 0x0001, 0x0046, 0x08d6, + 0x0001, 0x0046, 0x08e0, 0x0001, 0x0046, 0x08ea, 0x0001, 0x0046, + 0x08f0, 0x0001, 0x0046, 0x08f7, 0x0001, 0x0046, 0x0900, 0x0001, + 0x0046, 0x090a, 0x0001, 0x0046, 0x0912, 0x0008, 0x0257, 0x025d, + // Entry 34400 - 3443F + 0x0254, 0x0260, 0x0263, 0x0266, 0x0269, 0x025a, 0x0001, 0x0046, + 0x08d6, 0x0001, 0x0046, 0x08e0, 0x0001, 0x0046, 0x08ea, 0x0001, + 0x0046, 0x08f0, 0x0001, 0x0046, 0x08f7, 0x0001, 0x0046, 0x0900, + 0x0001, 0x0046, 0x090a, 0x0001, 0x0046, 0x0912, 0x0008, 0x0278, + 0x027e, 0x0275, 0x0281, 0x0284, 0x0287, 0x028a, 0x027b, 0x0001, + 0x0046, 0x08d6, 0x0001, 0x0046, 0x0919, 0x0001, 0x0046, 0x092a, + 0x0001, 0x0046, 0x0938, 0x0001, 0x0046, 0x08f7, 0x0001, 0x0046, + 0x0938, 0x0001, 0x0046, 0x090a, 0x0001, 0x0046, 0x0912, 0x0003, + // Entry 34440 - 3447F + 0x0291, 0x02b2, 0x02d3, 0x0008, 0x029d, 0x02a3, 0x029a, 0x02a6, + 0x02a9, 0x02ac, 0x02af, 0x02a0, 0x0001, 0x0046, 0x0946, 0x0001, + 0x0046, 0x08e0, 0x0001, 0x0046, 0x08ea, 0x0001, 0x0046, 0x0900, + 0x0001, 0x0046, 0x094f, 0x0001, 0x0046, 0x0955, 0x0001, 0x0046, + 0x0962, 0x0001, 0x0046, 0x0969, 0x0008, 0x02be, 0x02c4, 0x02bb, + 0x02c7, 0x02ca, 0x02cd, 0x02d0, 0x02c1, 0x0001, 0x0046, 0x0946, + 0x0001, 0x0046, 0x08e0, 0x0001, 0x0046, 0x08ea, 0x0001, 0x0046, + 0x0900, 0x0001, 0x0046, 0x094f, 0x0001, 0x0046, 0x0900, 0x0001, + // Entry 34480 - 344BF + 0x0046, 0x0962, 0x0001, 0x0046, 0x0969, 0x0008, 0x02df, 0x02e5, + 0x02dc, 0x02e8, 0x02eb, 0x02ee, 0x02f1, 0x02e2, 0x0001, 0x0046, + 0x0946, 0x0001, 0x0046, 0x096f, 0x0001, 0x0046, 0x097f, 0x0001, + 0x0046, 0x0955, 0x0001, 0x0046, 0x094f, 0x0001, 0x0046, 0x0955, + 0x0001, 0x0046, 0x0962, 0x0001, 0x0046, 0x0969, 0x0003, 0x02fe, + 0x0304, 0x02f8, 0x0001, 0x02fa, 0x0002, 0x0046, 0x098c, 0x099e, + 0x0001, 0x0300, 0x0002, 0x0046, 0x09aa, 0x09b2, 0x0002, 0x0307, + 0x030b, 0x0002, 0x0046, 0x09aa, 0x09b2, 0x0002, 0x0046, 0x09b8, + // Entry 344C0 - 344FF + 0x09bd, 0x0004, 0x031d, 0x0317, 0x0314, 0x031a, 0x0001, 0x0046, + 0x09c1, 0x0001, 0x0046, 0x09d9, 0x0001, 0x0046, 0x09eb, 0x0001, + 0x0007, 0x02e9, 0x0004, 0x032e, 0x0328, 0x0325, 0x032b, 0x0001, + 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, + 0x0001, 0x0000, 0x0546, 0x0004, 0x033f, 0x0339, 0x0336, 0x033c, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0005, 0x0348, 0x0000, 0x0000, + 0x0000, 0x0393, 0x0002, 0x034b, 0x036f, 0x0003, 0x034f, 0x0000, + // Entry 34500 - 3453F + 0x035f, 0x000e, 0x0014, 0x3653, 0x079c, 0x3623, 0x362c, 0x3635, + 0x363c, 0x3644, 0x364d, 0x365c, 0x3663, 0x3669, 0x3670, 0x3677, + 0x367b, 0x000e, 0x0014, 0x3653, 0x079c, 0x3623, 0x362c, 0x3635, + 0x363c, 0x3644, 0x364d, 0x365c, 0x3663, 0x3669, 0x3670, 0x3677, + 0x367b, 0x0003, 0x0373, 0x0000, 0x0383, 0x000e, 0x0014, 0x3653, + 0x079c, 0x3623, 0x362c, 0x3635, 0x363c, 0x3644, 0x364d, 0x365c, + 0x3663, 0x3669, 0x3670, 0x3677, 0x367b, 0x000e, 0x0014, 0x3653, + 0x079c, 0x3623, 0x362c, 0x3635, 0x363c, 0x3644, 0x364d, 0x365c, + // Entry 34540 - 3457F + 0x3663, 0x3669, 0x3670, 0x3677, 0x367b, 0x0003, 0x039c, 0x03a1, + 0x0397, 0x0001, 0x0399, 0x0001, 0x0046, 0x09fc, 0x0001, 0x039e, + 0x0001, 0x0000, 0x04ef, 0x0001, 0x03a3, 0x0001, 0x0000, 0x04ef, + 0x0005, 0x03ac, 0x0000, 0x0000, 0x0000, 0x03f3, 0x0002, 0x03af, + 0x03d1, 0x0003, 0x03b3, 0x0000, 0x03c2, 0x000d, 0x0046, 0xffff, + 0x0a17, 0x0a1f, 0x0a2a, 0x0a36, 0x0a40, 0x0a4a, 0x0a56, 0x0a5f, + 0x0a68, 0x0a77, 0x0a7e, 0x0a85, 0x000d, 0x0046, 0xffff, 0x0a17, + 0x0a1f, 0x0a2a, 0x0a36, 0x0a40, 0x0a4a, 0x0a56, 0x0a5f, 0x0a68, + // Entry 34580 - 345BF + 0x0a77, 0x0a7e, 0x0a85, 0x0003, 0x03d5, 0x0000, 0x03e4, 0x000d, + 0x0046, 0xffff, 0x0a17, 0x0a1f, 0x0a2a, 0x0a36, 0x0a40, 0x0a4a, + 0x0a56, 0x0a5f, 0x0a68, 0x0a77, 0x0a7e, 0x0a85, 0x000d, 0x0046, + 0xffff, 0x0a17, 0x0a1f, 0x0a2a, 0x0a36, 0x0a40, 0x0a4a, 0x0a56, + 0x0a5f, 0x0a68, 0x0a77, 0x0a7e, 0x0a85, 0x0003, 0x03fc, 0x0401, + 0x03f7, 0x0001, 0x03f9, 0x0001, 0x0000, 0x0601, 0x0001, 0x03fe, + 0x0001, 0x0000, 0x0601, 0x0001, 0x0403, 0x0001, 0x0000, 0x0601, + 0x0005, 0x040c, 0x0000, 0x0000, 0x0000, 0x0435, 0x0002, 0x040f, + // Entry 345C0 - 345FF + 0x0422, 0x0003, 0x0000, 0x0000, 0x0413, 0x000d, 0x0046, 0xffff, + 0x0a8f, 0x0a98, 0x0a9f, 0x0aa8, 0x0ab1, 0x0abf, 0x0acd, 0x0ad6, + 0x0ade, 0x0ae8, 0x0af1, 0x0afd, 0x0003, 0x0000, 0x0000, 0x0426, + 0x000d, 0x0046, 0xffff, 0x0a8f, 0x0a98, 0x0a9f, 0x0aa8, 0x0ab1, + 0x0abf, 0x0acd, 0x0ad6, 0x0ade, 0x0ae8, 0x0af1, 0x0afd, 0x0003, + 0x043e, 0x0443, 0x0439, 0x0001, 0x043b, 0x0001, 0x0046, 0x0b0b, + 0x0001, 0x0440, 0x0001, 0x0000, 0x06c8, 0x0001, 0x0445, 0x0001, + 0x0000, 0x06c8, 0x0005, 0x044e, 0x0000, 0x0000, 0x0000, 0x0495, + // Entry 34600 - 3463F + 0x0002, 0x0451, 0x0473, 0x0003, 0x0455, 0x0000, 0x0464, 0x000d, + 0x0046, 0xffff, 0x0b19, 0x0b25, 0x0b32, 0x0b3b, 0x0b41, 0x0b4a, + 0x0b56, 0x0b5c, 0x0b62, 0x0b68, 0x0b6d, 0x0b75, 0x000d, 0x0046, + 0xffff, 0x0b19, 0x0b25, 0x0b32, 0x0b3b, 0x0b41, 0x0b4a, 0x0b56, + 0x0b5c, 0x0b62, 0x0b68, 0x0b6d, 0x0b75, 0x0003, 0x0477, 0x0000, + 0x0486, 0x000d, 0x0046, 0xffff, 0x0b19, 0x0b25, 0x0b32, 0x0b3b, + 0x0b41, 0x0b4a, 0x0b56, 0x0b5c, 0x0b62, 0x0b68, 0x0b6d, 0x0b75, + 0x000d, 0x0046, 0xffff, 0x0b19, 0x0b25, 0x0b32, 0x0b3b, 0x0b41, + // Entry 34640 - 3467F + 0x0b4a, 0x0b56, 0x0b5c, 0x0b62, 0x0b68, 0x0b6d, 0x0b75, 0x0003, + 0x049e, 0x04a3, 0x0499, 0x0001, 0x049b, 0x0001, 0x0046, 0x0b7d, + 0x0001, 0x04a0, 0x0001, 0x0046, 0x0b8c, 0x0001, 0x04a5, 0x0001, + 0x0046, 0x0b8c, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x04ae, + 0x0003, 0x04b8, 0x04be, 0x04b2, 0x0001, 0x04b4, 0x0002, 0x0046, + 0x0b97, 0x0bbe, 0x0001, 0x04ba, 0x0002, 0x0046, 0x0bc5, 0x0bbe, + 0x0001, 0x04c0, 0x0002, 0x0046, 0x0bd6, 0x0bbe, 0x0042, 0x0507, + 0x050c, 0x0511, 0x0516, 0x052f, 0x0543, 0x0557, 0x0570, 0x0584, + // Entry 34680 - 346BF + 0x0598, 0x05b1, 0x05c5, 0x05d9, 0x05f6, 0x060e, 0x0626, 0x062b, + 0x0630, 0x0635, 0x0650, 0x0664, 0x0678, 0x067d, 0x0682, 0x0687, + 0x068c, 0x0691, 0x0696, 0x069b, 0x06a0, 0x06a5, 0x06bb, 0x06d1, + 0x06e7, 0x06fd, 0x0713, 0x0729, 0x073f, 0x0755, 0x076b, 0x0781, + 0x0797, 0x07ad, 0x07c3, 0x07d9, 0x07ef, 0x0805, 0x081b, 0x0831, + 0x0847, 0x085d, 0x0873, 0x0878, 0x087d, 0x0882, 0x089a, 0x08ae, + 0x08c2, 0x08da, 0x08ee, 0x0902, 0x091a, 0x092e, 0x0942, 0x0947, + 0x094c, 0x0001, 0x0509, 0x0001, 0x0046, 0x0be1, 0x0001, 0x050e, + // Entry 346C0 - 346FF + 0x0001, 0x0046, 0x0be1, 0x0001, 0x0513, 0x0001, 0x0046, 0x0be1, + 0x0003, 0x051a, 0x051d, 0x0522, 0x0001, 0x0046, 0x0be6, 0x0003, + 0x0046, 0x0beb, 0x0bff, 0x0c0c, 0x0002, 0x0525, 0x052a, 0x0003, + 0x0046, 0x0c1d, 0x0c2d, 0x0c1d, 0x0003, 0x0046, 0x0c3b, 0x0c4c, + 0x0c3b, 0x0003, 0x0533, 0x0000, 0x0536, 0x0001, 0x000d, 0x03ac, + 0x0002, 0x0539, 0x053e, 0x0003, 0x0046, 0x0c5b, 0x0c5b, 0x0c5b, + 0x0003, 0x0046, 0x0c67, 0x0c67, 0x0c67, 0x0003, 0x0547, 0x0000, + 0x054a, 0x0001, 0x000d, 0x03ac, 0x0002, 0x054d, 0x0552, 0x0003, + // Entry 34700 - 3473F + 0x0046, 0x0c5b, 0x0c5b, 0x0c5b, 0x0003, 0x0046, 0x0c67, 0x0c67, + 0x0c67, 0x0003, 0x055b, 0x055e, 0x0563, 0x0001, 0x0046, 0x0c74, + 0x0003, 0x0046, 0x0c7f, 0x0c95, 0x0ca5, 0x0002, 0x0566, 0x056b, + 0x0003, 0x0046, 0x0cba, 0x0cd2, 0x0cba, 0x0003, 0x0046, 0x0ce8, + 0x0d01, 0x0ce8, 0x0003, 0x0574, 0x0000, 0x0577, 0x0001, 0x0046, + 0x0d18, 0x0002, 0x057a, 0x057f, 0x0003, 0x0046, 0x0d1d, 0x0d1d, + 0x0d1d, 0x0003, 0x0046, 0x0d2c, 0x0d2c, 0x0d2c, 0x0003, 0x0588, + 0x0000, 0x058b, 0x0001, 0x0046, 0x0d18, 0x0002, 0x058e, 0x0593, + // Entry 34740 - 3477F + 0x0003, 0x0046, 0x0d1d, 0x0d1d, 0x0d1d, 0x0003, 0x0046, 0x0d2c, + 0x0d2c, 0x0d2c, 0x0003, 0x059c, 0x059f, 0x05a4, 0x0001, 0x0046, + 0x0d3c, 0x0003, 0x0046, 0x0d45, 0x0d5c, 0x0d6c, 0x0002, 0x05a7, + 0x05ac, 0x0003, 0x0046, 0x0d80, 0x0d94, 0x0d80, 0x0003, 0x0046, + 0x0da6, 0x0dbb, 0x0da6, 0x0003, 0x05b5, 0x0000, 0x05b8, 0x0001, + 0x0046, 0x0dce, 0x0002, 0x05bb, 0x05c0, 0x0003, 0x0046, 0x0dd4, + 0x0dd4, 0x0dd4, 0x0003, 0x0046, 0x0de3, 0x0de3, 0x0de3, 0x0003, + 0x05c9, 0x0000, 0x05cc, 0x0001, 0x0046, 0x0dce, 0x0002, 0x05cf, + // Entry 34780 - 347BF + 0x05d4, 0x0003, 0x0046, 0x0dd4, 0x0dd4, 0x0dd4, 0x0003, 0x0046, + 0x0de3, 0x0de3, 0x0de3, 0x0004, 0x05de, 0x05e1, 0x05e6, 0x05f3, + 0x0001, 0x0046, 0x0df3, 0x0003, 0x0046, 0x0dfc, 0x0e14, 0x0e25, + 0x0002, 0x05e9, 0x05ee, 0x0003, 0x0046, 0x0e3a, 0x0e4e, 0x0e3a, + 0x0003, 0x0046, 0x0e61, 0x0e76, 0x0e61, 0x0001, 0x0046, 0x0e8a, + 0x0004, 0x05fb, 0x0000, 0x05fe, 0x060b, 0x0001, 0x0046, 0x0e98, + 0x0002, 0x0601, 0x0606, 0x0003, 0x0046, 0x0e9d, 0x0e9d, 0x0e9d, + 0x0003, 0x0046, 0x0eab, 0x0eab, 0x0eab, 0x0001, 0x0046, 0x0eba, + // Entry 347C0 - 347FF + 0x0004, 0x0613, 0x0000, 0x0616, 0x0623, 0x0001, 0x0046, 0x0e98, + 0x0002, 0x0619, 0x061e, 0x0003, 0x0046, 0x0e9d, 0x0e9d, 0x0e9d, + 0x0003, 0x0046, 0x0eab, 0x0eab, 0x0eab, 0x0001, 0x0046, 0x0eba, + 0x0001, 0x0628, 0x0001, 0x0046, 0x0ec4, 0x0001, 0x062d, 0x0001, + 0x0046, 0x0ed6, 0x0001, 0x0632, 0x0001, 0x0046, 0x0ed6, 0x0003, + 0x0639, 0x063c, 0x0643, 0x0001, 0x0045, 0x0693, 0x0005, 0x0046, + 0x0eed, 0x0ef3, 0x0efb, 0x0ee4, 0x0f00, 0x0002, 0x0646, 0x064b, + 0x0003, 0x0046, 0x0f07, 0x0f18, 0x0f07, 0x0003, 0x0046, 0x0f28, + // Entry 34800 - 3483F + 0x0f3a, 0x0f28, 0x0003, 0x0654, 0x0000, 0x0657, 0x0001, 0x0029, + 0x007b, 0x0002, 0x065a, 0x065f, 0x0003, 0x0046, 0x0f4b, 0x0f57, + 0x0f4b, 0x0003, 0x0046, 0x0f64, 0x0f71, 0x0f64, 0x0003, 0x0668, + 0x0000, 0x066b, 0x0001, 0x0029, 0x007b, 0x0002, 0x066e, 0x0673, + 0x0003, 0x0046, 0x0f4b, 0x0f57, 0x0f4b, 0x0003, 0x0046, 0x0f64, + 0x0f71, 0x0f64, 0x0001, 0x067a, 0x0001, 0x0046, 0x0f7f, 0x0001, + 0x067f, 0x0001, 0x0046, 0x0f7f, 0x0001, 0x0684, 0x0001, 0x0046, + 0x0f7f, 0x0001, 0x0689, 0x0001, 0x0046, 0x0f8a, 0x0001, 0x068e, + // Entry 34840 - 3487F + 0x0001, 0x0046, 0x0f8a, 0x0001, 0x0693, 0x0001, 0x0046, 0x0f8a, + 0x0001, 0x0698, 0x0001, 0x0046, 0x0f9a, 0x0001, 0x069d, 0x0001, + 0x0046, 0x0fb3, 0x0001, 0x06a2, 0x0001, 0x0046, 0x0fb3, 0x0003, + 0x0000, 0x06a9, 0x06ae, 0x0003, 0x0046, 0x0fc7, 0x0fe1, 0x0ff4, + 0x0002, 0x06b1, 0x06b6, 0x0003, 0x0046, 0x100b, 0x1021, 0x100b, + 0x0003, 0x0046, 0x1036, 0x104d, 0x1036, 0x0003, 0x0000, 0x06bf, + 0x06c4, 0x0003, 0x0046, 0x1063, 0x1070, 0x107f, 0x0002, 0x06c7, + 0x06cc, 0x0003, 0x0046, 0x100b, 0x1021, 0x100b, 0x0003, 0x0046, + // Entry 34880 - 348BF + 0x1036, 0x104d, 0x1036, 0x0003, 0x0000, 0x06d5, 0x06da, 0x0003, + 0x0046, 0x1063, 0x1070, 0x107f, 0x0002, 0x06dd, 0x06e2, 0x0003, + 0x0046, 0x100b, 0x1021, 0x100b, 0x0003, 0x0046, 0x1036, 0x104d, + 0x1036, 0x0003, 0x0000, 0x06eb, 0x06f0, 0x0003, 0x0046, 0x108d, + 0x10a6, 0x10b8, 0x0002, 0x06f3, 0x06f8, 0x0003, 0x0046, 0x10ce, + 0x10e3, 0x10ce, 0x0003, 0x0046, 0x10f7, 0x110d, 0x10f7, 0x0003, + 0x0000, 0x0701, 0x0706, 0x0003, 0x0046, 0x1122, 0x112e, 0x113c, + 0x0002, 0x0709, 0x070e, 0x0003, 0x0046, 0x10ce, 0x10e3, 0x10ce, + // Entry 348C0 - 348FF + 0x0003, 0x0046, 0x10f7, 0x110d, 0x10f7, 0x0003, 0x0000, 0x0717, + 0x071c, 0x0003, 0x0046, 0x1122, 0x112e, 0x113c, 0x0002, 0x071f, + 0x0724, 0x0003, 0x0046, 0x10ce, 0x10e3, 0x10ce, 0x0003, 0x0046, + 0x10f7, 0x110d, 0x10f7, 0x0003, 0x0000, 0x072d, 0x0732, 0x0003, + 0x0046, 0x1149, 0x1161, 0x1172, 0x0002, 0x0735, 0x073a, 0x0003, + 0x0046, 0x1187, 0x119b, 0x1187, 0x0003, 0x0046, 0x11ae, 0x11c3, + 0x11ae, 0x0003, 0x0000, 0x0743, 0x0748, 0x0003, 0x0046, 0x11d7, + 0x11e2, 0x11ef, 0x0002, 0x074b, 0x0750, 0x0003, 0x0046, 0x1187, + // Entry 34900 - 3493F + 0x119b, 0x1187, 0x0003, 0x0046, 0x11ae, 0x11c3, 0x11ae, 0x0003, + 0x0000, 0x0759, 0x075e, 0x0003, 0x0046, 0x11d7, 0x11e2, 0x11ef, + 0x0002, 0x0761, 0x0766, 0x0003, 0x0046, 0x1187, 0x119b, 0x1187, + 0x0003, 0x0046, 0x11ae, 0x11c3, 0x11ae, 0x0003, 0x0000, 0x076f, + 0x0774, 0x0003, 0x0046, 0x11fb, 0x1215, 0x1228, 0x0002, 0x0777, + 0x077c, 0x0003, 0x0046, 0x123f, 0x1255, 0x123f, 0x0003, 0x0046, + 0x126a, 0x1281, 0x126a, 0x0003, 0x0000, 0x0785, 0x078a, 0x0003, + 0x0046, 0x1297, 0x12a4, 0x12b3, 0x0002, 0x078d, 0x0792, 0x0003, + // Entry 34940 - 3497F + 0x0046, 0x123f, 0x1255, 0x123f, 0x0003, 0x0046, 0x126a, 0x1281, + 0x126a, 0x0003, 0x0000, 0x079b, 0x07a0, 0x0003, 0x0046, 0x1297, + 0x12a4, 0x12b3, 0x0002, 0x07a3, 0x07a8, 0x0003, 0x0046, 0x123f, + 0x1255, 0x123f, 0x0003, 0x0046, 0x126a, 0x1281, 0x126a, 0x0003, + 0x0000, 0x07b1, 0x07b6, 0x0003, 0x0046, 0x12c1, 0x12dc, 0x12f0, + 0x0002, 0x07b9, 0x07be, 0x0003, 0x0046, 0x1308, 0x131f, 0x1308, + 0x0003, 0x0046, 0x1335, 0x134d, 0x1335, 0x0003, 0x0000, 0x07c7, + 0x07cc, 0x0003, 0x0046, 0x1364, 0x1372, 0x1382, 0x0002, 0x07cf, + // Entry 34980 - 349BF + 0x07d4, 0x0003, 0x0046, 0x1308, 0x131f, 0x1308, 0x0003, 0x0046, + 0x1335, 0x134d, 0x1335, 0x0003, 0x0000, 0x07dd, 0x07e2, 0x0003, + 0x0046, 0x1364, 0x1372, 0x1382, 0x0002, 0x07e5, 0x07ea, 0x0003, + 0x0046, 0x1308, 0x131f, 0x1308, 0x0003, 0x0046, 0x1335, 0x134d, + 0x1335, 0x0003, 0x0000, 0x07f3, 0x07f8, 0x0003, 0x0046, 0x1391, + 0x13ab, 0x13be, 0x0002, 0x07fb, 0x0800, 0x0003, 0x0046, 0x13d5, + 0x13eb, 0x13d5, 0x0003, 0x0046, 0x1400, 0x1417, 0x1400, 0x0003, + 0x0000, 0x0809, 0x080e, 0x0003, 0x0046, 0x142d, 0x143a, 0x1449, + // Entry 349C0 - 349FF + 0x0002, 0x0811, 0x0816, 0x0003, 0x0046, 0x13d5, 0x13eb, 0x13d5, + 0x0003, 0x0046, 0x1400, 0x1417, 0x1400, 0x0003, 0x0000, 0x081f, + 0x0824, 0x0003, 0x0046, 0x142d, 0x143a, 0x1449, 0x0002, 0x0827, + 0x082c, 0x0003, 0x0046, 0x13d5, 0x13eb, 0x13d5, 0x0003, 0x0046, + 0x1400, 0x1417, 0x1400, 0x0003, 0x0000, 0x0835, 0x083a, 0x0003, + 0x0046, 0x1457, 0x1470, 0x1482, 0x0002, 0x083d, 0x0842, 0x0003, + 0x0046, 0x1498, 0x14ad, 0x1498, 0x0003, 0x0046, 0x14c1, 0x14d7, + 0x14c1, 0x0003, 0x0000, 0x084b, 0x0850, 0x0003, 0x0046, 0x14ec, + // Entry 34A00 - 34A3F + 0x14f8, 0x1506, 0x0002, 0x0853, 0x0858, 0x0003, 0x0046, 0x1498, + 0x14ad, 0x1498, 0x0003, 0x0046, 0x14c1, 0x14d7, 0x14c1, 0x0003, + 0x0000, 0x0861, 0x0866, 0x0003, 0x0046, 0x14ec, 0x14f8, 0x1506, + 0x0002, 0x0869, 0x086e, 0x0003, 0x0046, 0x1498, 0x14ad, 0x1498, + 0x0003, 0x0046, 0x14c1, 0x14d7, 0x14c1, 0x0001, 0x0875, 0x0001, + 0x0046, 0x1513, 0x0001, 0x087a, 0x0001, 0x0046, 0x152a, 0x0001, + 0x087f, 0x0001, 0x0046, 0x1513, 0x0003, 0x0886, 0x0889, 0x088d, + 0x0001, 0x0046, 0x1549, 0x0002, 0x0046, 0xffff, 0x1551, 0x0002, + // Entry 34A40 - 34A7F + 0x0890, 0x0895, 0x0003, 0x0046, 0x1560, 0x1572, 0x1560, 0x0003, + 0x0046, 0x1583, 0x1596, 0x1583, 0x0003, 0x089e, 0x0000, 0x08a1, + 0x0001, 0x0046, 0x15a8, 0x0002, 0x08a4, 0x08a9, 0x0003, 0x0046, + 0x15ac, 0x15ac, 0x15ac, 0x0003, 0x0046, 0x15ba, 0x15ba, 0x15ba, + 0x0003, 0x08b2, 0x0000, 0x08b5, 0x0001, 0x0000, 0x213b, 0x0002, + 0x08b8, 0x08bd, 0x0003, 0x0046, 0x15c9, 0x15c9, 0x15c9, 0x0003, + 0x0046, 0x15d4, 0x15d4, 0x15d4, 0x0003, 0x08c6, 0x08c9, 0x08cd, + 0x0001, 0x0046, 0x15e0, 0x0002, 0x0046, 0xffff, 0x15e9, 0x0002, + // Entry 34A80 - 34ABF + 0x08d0, 0x08d5, 0x0003, 0x0046, 0x15f9, 0x160c, 0x15f9, 0x0003, + 0x0046, 0x161e, 0x1632, 0x161e, 0x0003, 0x08de, 0x0000, 0x08e1, + 0x0001, 0x0001, 0x07c5, 0x0002, 0x08e4, 0x08e9, 0x0003, 0x0046, + 0x1645, 0x1645, 0x1645, 0x0003, 0x0046, 0x1653, 0x1653, 0x1653, + 0x0003, 0x08f2, 0x0000, 0x08f5, 0x0001, 0x0043, 0x092f, 0x0002, + 0x08f8, 0x08fd, 0x0003, 0x0046, 0x1662, 0x166f, 0x1662, 0x0003, + 0x0046, 0x167d, 0x167d, 0x167d, 0x0003, 0x0906, 0x0909, 0x090d, + 0x0001, 0x0046, 0x168c, 0x0002, 0x0046, 0xffff, 0x1695, 0x0002, + // Entry 34AC0 - 34AFF + 0x0910, 0x0915, 0x0003, 0x0046, 0x169b, 0x16ae, 0x169b, 0x0003, + 0x0046, 0x16c0, 0x16d4, 0x16c0, 0x0003, 0x091e, 0x0000, 0x0921, + 0x0001, 0x0001, 0x083e, 0x0002, 0x0924, 0x0929, 0x0003, 0x0046, + 0x16e7, 0x16e7, 0x16e7, 0x0003, 0x0046, 0x16f5, 0x16f5, 0x16f5, + 0x0003, 0x0932, 0x0000, 0x0935, 0x0001, 0x0000, 0x2002, 0x0002, + 0x0938, 0x093d, 0x0003, 0x0046, 0x1704, 0x1704, 0x1704, 0x0003, + 0x0046, 0x1710, 0x171d, 0x1710, 0x0001, 0x0944, 0x0001, 0x0046, + 0x1729, 0x0001, 0x0949, 0x0001, 0x0046, 0x1729, 0x0001, 0x094e, + // Entry 34B00 - 34B3F + 0x0001, 0x0046, 0x1729, 0x0004, 0x0956, 0x095b, 0x0960, 0x096f, + 0x0003, 0x0000, 0x1dc7, 0x39fb, 0x3a02, 0x0003, 0x0046, 0x1735, + 0x1746, 0x1759, 0x0002, 0x0000, 0x0963, 0x0003, 0x0000, 0x096a, + 0x0967, 0x0001, 0x0046, 0x176e, 0x0003, 0x0046, 0xffff, 0x1790, + 0x17ae, 0x0002, 0x0b38, 0x0972, 0x0003, 0x0a0c, 0x0aa2, 0x0976, + 0x0094, 0x0046, 0x17c3, 0x17d7, 0x17ee, 0x1804, 0x1836, 0x187e, + 0x18ba, 0x18f9, 0x193b, 0x1974, 0x19b0, 0x19f8, 0x1a32, 0x1a74, + 0x1ac7, 0x1b12, 0x1b62, 0x1ba4, 0x1bf4, 0x1c68, 0x1ce1, 0x1d43, + // Entry 34B40 - 34B7F + 0x1d9e, 0x1dea, 0x1e2e, 0x1e63, 0x1e72, 0x1e95, 0x1ec8, 0x1ef4, + 0x1f25, 0x1f4a, 0x1f85, 0x1fbe, 0x1ffc, 0x2031, 0x2049, 0x2077, + 0x20b8, 0x20f3, 0x211a, 0x2129, 0x213d, 0x2168, 0x21a3, 0x21c9, + 0x2219, 0x2252, 0x2287, 0x22dd, 0x2337, 0x2360, 0x2379, 0x23b1, + 0x23c0, 0x23e2, 0x240f, 0x2423, 0x244b, 0x24a1, 0x24de, 0x24f4, + 0x2519, 0x2564, 0x25a0, 0x25c9, 0x25de, 0x25f4, 0x2606, 0x2621, + 0x263b, 0x2662, 0x269d, 0x26dc, 0x271a, 0x2769, 0x27bc, 0x27d6, + 0x27fd, 0x2828, 0x2849, 0x2880, 0x2894, 0x28bd, 0x28fa, 0x2920, + // Entry 34B80 - 34BBF + 0x294f, 0x2960, 0x2972, 0x2987, 0x29ae, 0x29e1, 0x2a0d, 0x2a81, + 0x2af4, 0x2b36, 0x2b63, 0x2b71, 0x2b7d, 0x2ba2, 0x2bf1, 0x2c3e, + 0x2c79, 0x2c85, 0x2cb6, 0x2d0f, 0x2d53, 0x2d8e, 0x2dc1, 0x2dcd, + 0x2df7, 0x2e33, 0x2e68, 0x2e97, 0x2ec9, 0x2f14, 0x2f25, 0x2f33, + 0x2f43, 0x2f53, 0x2f72, 0x2fb1, 0x2fe8, 0x300f, 0x3024, 0x3036, + 0x304b, 0x3065, 0x3075, 0x3082, 0x309b, 0x30c4, 0x30da, 0x30f5, + 0x311e, 0x3142, 0x317d, 0x319a, 0x31dd, 0x3222, 0x324d, 0x3273, + 0x32bc, 0x32ef, 0x32fe, 0x3310, 0x3339, 0x337e, 0x0094, 0x0046, + // Entry 34BC0 - 34BFF + 0xffff, 0xffff, 0xffff, 0xffff, 0x1821, 0x186f, 0x18ab, 0x18e7, + 0x192c, 0x1968, 0x199b, 0x19e9, 0x1a25, 0x1a5b, 0x1ab5, 0x1afa, + 0x1b51, 0x1b93, 0x1bd5, 0x1c41, 0x1cc5, 0x1d28, 0x1d88, 0x1dd9, + 0x1e1b, 0xffff, 0xffff, 0x1e83, 0xffff, 0x1ee3, 0xffff, 0x1f3b, + 0x1f77, 0x1fb0, 0x1fe9, 0xffff, 0xffff, 0x2066, 0x20a8, 0x20e7, + 0xffff, 0xffff, 0xffff, 0x2152, 0xffff, 0x21b3, 0x2204, 0xffff, + 0x2273, 0x22be, 0x232a, 0xffff, 0xffff, 0xffff, 0xffff, 0x23d3, + 0xffff, 0xffff, 0x2433, 0x248a, 0xffff, 0xffff, 0x2503, 0x2554, + // Entry 34C00 - 34C3F + 0x2593, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2654, + 0x268d, 0x26cc, 0x270b, 0x2747, 0xffff, 0xffff, 0x27ef, 0xffff, + 0x2835, 0xffff, 0xffff, 0x28a6, 0xffff, 0x2910, 0xffff, 0xffff, + 0xffff, 0xffff, 0x299c, 0xffff, 0x29ef, 0x2a58, 0x2ae2, 0x2b27, + 0xffff, 0xffff, 0xffff, 0x2b8c, 0x2bdd, 0x2c28, 0xffff, 0xffff, + 0x2c9b, 0x2cfb, 0x2d46, 0x2d7c, 0xffff, 0xffff, 0x2de6, 0x2e28, + 0x2e58, 0xffff, 0x2eab, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2f61, 0x2fa3, 0x2fdc, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 34C40 - 34C7F + 0xffff, 0xffff, 0x308e, 0xffff, 0xffff, 0x30e8, 0xffff, 0x312c, + 0xffff, 0x318a, 0x31c9, 0x3214, 0xffff, 0x325f, 0x32aa, 0xffff, + 0xffff, 0xffff, 0x3329, 0x3368, 0x0094, 0x0046, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1852, 0x1894, 0x18d0, 0x1912, 0x1951, 0x1987, + 0x19cc, 0x1a0e, 0x1a46, 0x1a94, 0x1ae0, 0x1b31, 0x1b7a, 0x1bbc, + 0x1c1a, 0x1c96, 0x1d04, 0x1d65, 0x1dbb, 0x1e02, 0x1e48, 0xffff, + 0xffff, 0x1eae, 0xffff, 0x1f0c, 0xffff, 0x1f60, 0x1f9a, 0x1fd3, + 0x2016, 0xffff, 0xffff, 0x208f, 0x20cf, 0x2106, 0xffff, 0xffff, + // Entry 34C80 - 34CBF + 0xffff, 0x2185, 0xffff, 0x21e6, 0x2235, 0xffff, 0x22a2, 0x2303, + 0x234b, 0xffff, 0xffff, 0xffff, 0xffff, 0x23f8, 0xffff, 0xffff, + 0x246a, 0x24bf, 0xffff, 0xffff, 0x2536, 0x257b, 0x25b4, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2677, 0x26b4, 0x26f3, + 0x2730, 0x2792, 0xffff, 0xffff, 0x2812, 0xffff, 0x2864, 0xffff, + 0xffff, 0x28db, 0xffff, 0x2937, 0xffff, 0xffff, 0xffff, 0xffff, + 0x29c7, 0xffff, 0x2a32, 0x2ab1, 0x2b0d, 0x2b4c, 0xffff, 0xffff, + 0xffff, 0x2bbf, 0x2c0c, 0x2c5b, 0xffff, 0xffff, 0x2cd8, 0x2d2a, + // Entry 34CC0 - 34CFF + 0x2d67, 0x2da7, 0xffff, 0xffff, 0x2e0f, 0x2e45, 0x2e7f, 0xffff, + 0x2eee, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2f8a, 0x2fc6, + 0x2ffb, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x30af, 0xffff, 0xffff, 0x3109, 0xffff, 0x315f, 0xffff, 0x31b1, + 0x31f8, 0x3237, 0xffff, 0x328e, 0x32d5, 0xffff, 0xffff, 0xffff, + 0x3350, 0x339b, 0x0003, 0x0b3c, 0x0ba2, 0x0b6f, 0x0031, 0x0007, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 34D00 - 34D3F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x24ae, 0x24b7, 0xffff, + 0x24c0, 0x0031, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 34D40 - 34D7F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x24ae, 0x24b7, 0xffff, 0x24c0, 0x0031, 0x0007, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 34D80 - 34DBF + 0xffff, 0xffff, 0xffff, 0x24b2, 0x24bb, 0xffff, 0x24c4, 0x0002, + 0x0003, 0x00d6, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000c, 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, 0x0023, 0x001d, 0x001a, + 0x0020, 0x0001, 0x0006, 0x000d, 0x0001, 0x0002, 0x0010, 0x0001, + 0x0002, 0x001b, 0x0001, 0x0002, 0x0587, 0x0008, 0x002f, 0x0053, + 0x0078, 0x008c, 0x00a4, 0x00b4, 0x00c5, 0x0000, 0x0001, 0x0031, + 0x0003, 0x0035, 0x0000, 0x0044, 0x000d, 0x0047, 0xffff, 0x0000, + // Entry 34DC0 - 34DFF + 0x0004, 0x0009, 0x000f, 0x0013, 0x0018, 0x001c, 0x0021, 0x0028, + 0x002d, 0x0032, 0x0039, 0x000d, 0x0047, 0xffff, 0x0040, 0x004b, + 0x0051, 0x0064, 0x007f, 0x009b, 0x00a8, 0x00b4, 0x00cb, 0x00d4, + 0x00dd, 0x00e9, 0x0002, 0x0056, 0x006c, 0x0003, 0x005a, 0x0000, + 0x0063, 0x0007, 0x0006, 0x009e, 0x00a2, 0x00a6, 0x00aa, 0x4421, + 0x4381, 0x00b6, 0x0007, 0x0047, 0x00f7, 0x0102, 0x010c, 0x0113, + 0x011e, 0x0128, 0x012f, 0x0002, 0x0000, 0x006f, 0x0007, 0x0000, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0033, 0x0001, + // Entry 34E00 - 34E3F + 0x007a, 0x0003, 0x007e, 0x0000, 0x0085, 0x0005, 0x002b, 0xffff, + 0x15a7, 0x15aa, 0x15ad, 0x15b0, 0x0005, 0x0047, 0xffff, 0x0139, + 0x0141, 0x0149, 0x0151, 0x0001, 0x008e, 0x0003, 0x0092, 0x0000, + 0x009b, 0x0002, 0x0095, 0x0098, 0x0001, 0x0047, 0x0159, 0x0001, + 0x0047, 0x0166, 0x0002, 0x009e, 0x00a1, 0x0001, 0x0047, 0x0159, + 0x0001, 0x0047, 0x0166, 0x0003, 0x00ae, 0x0000, 0x00a8, 0x0001, + 0x00aa, 0x0002, 0x0047, 0x0170, 0x0181, 0x0001, 0x00b0, 0x0002, + 0x0039, 0x019c, 0x201c, 0x0004, 0x00c2, 0x00bc, 0x00b9, 0x00bf, + // Entry 34E40 - 34E7F + 0x0001, 0x0006, 0x015b, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, + 0x003c, 0x0001, 0x0002, 0x08e8, 0x0004, 0x00d3, 0x00cd, 0x00ca, + 0x00d0, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, + 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0040, 0x0117, 0x0000, + 0x0000, 0x011c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0121, + 0x0000, 0x0000, 0x0126, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x012b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0136, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 34E80 - 34EBF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x013b, 0x0000, 0x0140, 0x0000, 0x0000, 0x0145, + 0x0000, 0x0000, 0x014a, 0x0000, 0x0000, 0x014f, 0x0001, 0x0119, + 0x0001, 0x0047, 0x0191, 0x0001, 0x011e, 0x0001, 0x0047, 0x019b, + 0x0001, 0x0123, 0x0001, 0x0047, 0x01a4, 0x0001, 0x0128, 0x0001, + 0x0047, 0x01ad, 0x0002, 0x012e, 0x0131, 0x0001, 0x0047, 0x01b5, + 0x0003, 0x0047, 0x01c3, 0x01ca, 0x01d2, 0x0001, 0x0138, 0x0001, + // Entry 34EC0 - 34EFF + 0x0047, 0x01df, 0x0001, 0x013d, 0x0001, 0x0047, 0x01f5, 0x0001, + 0x0142, 0x0001, 0x0047, 0x020c, 0x0001, 0x0147, 0x0001, 0x0047, + 0x0216, 0x0001, 0x014c, 0x0001, 0x0009, 0x030c, 0x0001, 0x0151, + 0x0001, 0x0047, 0x0222, 0x0002, 0x0003, 0x00e2, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, + 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, 0x0006, 0x000d, + 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0002, + // Entry 34F00 - 34F3F + 0x0587, 0x0008, 0x002f, 0x0066, 0x008b, 0x0098, 0x00b0, 0x00c0, + 0x00d1, 0x0000, 0x0002, 0x0032, 0x0054, 0x0003, 0x0036, 0x0000, + 0x0045, 0x000d, 0x0047, 0xffff, 0x0237, 0x023b, 0x023f, 0x0243, + 0x0248, 0x024e, 0x0252, 0x0256, 0x025a, 0x025e, 0x0262, 0x0266, + 0x000d, 0x0047, 0xffff, 0x026a, 0x0273, 0x027e, 0x0284, 0x028c, + 0x0292, 0x0298, 0x02a0, 0x02a7, 0x02b0, 0x02b8, 0x02c0, 0x0002, + 0x0000, 0x0057, 0x000d, 0x0000, 0xffff, 0x257b, 0x2b4e, 0x2b3c, + 0x2b37, 0x2b3c, 0x2b40, 0x2b40, 0x2b42, 0x2b3a, 0x2b50, 0x2b40, + // Entry 34F40 - 34F7F + 0x2b3e, 0x0002, 0x0069, 0x007f, 0x0003, 0x006d, 0x0000, 0x0076, + 0x0007, 0x0047, 0x02c8, 0x02cc, 0x02d0, 0x02d4, 0x02d8, 0x02dc, + 0x02e0, 0x0007, 0x001a, 0x0128, 0x2dea, 0x2df3, 0x2df9, 0x2e01, + 0x2e06, 0x2e0d, 0x0002, 0x0000, 0x0082, 0x0007, 0x0000, 0x2773, + 0x2b3c, 0x2151, 0x2151, 0x2151, 0x2151, 0x257b, 0x0001, 0x008d, + 0x0003, 0x0000, 0x0000, 0x0091, 0x0005, 0x0047, 0xffff, 0x02e4, + 0x02f6, 0x030a, 0x031e, 0x0001, 0x009a, 0x0003, 0x009e, 0x0000, + 0x00a7, 0x0002, 0x00a1, 0x00a4, 0x0001, 0x0047, 0x032f, 0x0001, + // Entry 34F80 - 34FBF + 0x0047, 0x0333, 0x0002, 0x00aa, 0x00ad, 0x0001, 0x0047, 0x032f, + 0x0001, 0x0047, 0x0333, 0x0003, 0x00ba, 0x0000, 0x00b4, 0x0001, + 0x00b6, 0x0002, 0x0047, 0x0337, 0x0348, 0x0001, 0x00bc, 0x0002, + 0x001a, 0x01ce, 0x2e16, 0x0004, 0x00ce, 0x00c8, 0x00c5, 0x00cb, + 0x0001, 0x0006, 0x015b, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, + 0x003c, 0x0001, 0x0002, 0x08e8, 0x0004, 0x00df, 0x00d9, 0x00d6, + 0x00dc, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, + 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0040, 0x0123, 0x0000, + // Entry 34FC0 - 34FFF + 0x0000, 0x0128, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x012d, + 0x0000, 0x0000, 0x0132, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0137, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0142, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0147, 0x0000, 0x014c, 0x0000, 0x0000, 0x0151, + 0x0000, 0x0000, 0x0156, 0x0000, 0x0000, 0x015b, 0x0001, 0x0125, + // Entry 35000 - 3503F + 0x0001, 0x0047, 0x0359, 0x0001, 0x012a, 0x0001, 0x0006, 0x016f, + 0x0001, 0x012f, 0x0001, 0x001a, 0x01db, 0x0001, 0x0134, 0x0001, + 0x001a, 0x0128, 0x0002, 0x013a, 0x013d, 0x0001, 0x0047, 0x0360, + 0x0003, 0x001a, 0x01eb, 0x2e19, 0x2e1f, 0x0001, 0x0144, 0x0001, + 0x0047, 0x0367, 0x0001, 0x0149, 0x0001, 0x001a, 0x01e1, 0x0001, + 0x014e, 0x0001, 0x0047, 0x0379, 0x0001, 0x0153, 0x0001, 0x0047, + 0x0380, 0x0001, 0x0158, 0x0001, 0x0009, 0x00ba, 0x0001, 0x015d, + 0x0001, 0x0047, 0x0388, 0x0002, 0x0003, 0x00d1, 0x0008, 0x0000, + // Entry 35040 - 3507F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, + 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, 0x0002, 0x0000, + 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x0044, 0x0001, 0x0000, + 0x240c, 0x0008, 0x002f, 0x0066, 0x008b, 0x0000, 0x009f, 0x00af, + 0x00c0, 0x0000, 0x0002, 0x0032, 0x0054, 0x0003, 0x0036, 0x0000, + 0x0045, 0x000d, 0x000a, 0xffff, 0x0000, 0x6288, 0x628c, 0x6290, + 0x6294, 0x6297, 0x629b, 0x629f, 0x62a3, 0x62a7, 0x62ab, 0x62af, + // Entry 35080 - 350BF + 0x000d, 0x0047, 0xffff, 0x0399, 0x03a0, 0x03a8, 0x03ad, 0x03b3, + 0x03b6, 0x03ba, 0x03c0, 0x03c4, 0x03cb, 0x03d1, 0x03d7, 0x0002, + 0x0000, 0x0057, 0x000d, 0x0000, 0xffff, 0x2004, 0x2006, 0x1f9a, + 0x1f9c, 0x1f9a, 0x2004, 0x2004, 0x1f98, 0x2002, 0x1f98, 0x1f96, + 0x2008, 0x0002, 0x0069, 0x007f, 0x0003, 0x006d, 0x0000, 0x0076, + 0x0007, 0x0047, 0x03dd, 0x03e1, 0x03e5, 0x03e9, 0x03ed, 0x03f0, + 0x03f4, 0x0007, 0x0047, 0x03f8, 0x03ff, 0x0405, 0x040b, 0x0414, + 0x0419, 0x0422, 0x0002, 0x0000, 0x0082, 0x0007, 0x0000, 0x2008, + // Entry 350C0 - 350FF + 0x200a, 0x1f9a, 0x1f9a, 0x2004, 0x1f94, 0x2002, 0x0001, 0x008d, + 0x0003, 0x0091, 0x0000, 0x0098, 0x0005, 0x001d, 0xffff, 0x1674, + 0x1677, 0x167a, 0x167d, 0x0005, 0x0047, 0xffff, 0x0428, 0x0432, + 0x043d, 0x0448, 0x0003, 0x00a9, 0x0000, 0x00a3, 0x0001, 0x00a5, + 0x0002, 0x0047, 0x0453, 0x0463, 0x0001, 0x00ab, 0x0002, 0x0047, + 0x0473, 0x047b, 0x0004, 0x00bd, 0x00b7, 0x00b4, 0x00ba, 0x0001, + 0x0002, 0x0025, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x0282, + 0x0001, 0x0002, 0x028b, 0x0004, 0x00ce, 0x00c8, 0x00c5, 0x00cb, + // Entry 35100 - 3513F + 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, + 0x053d, 0x0001, 0x0000, 0x0546, 0x0040, 0x0112, 0x0000, 0x0000, + 0x0117, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x011c, 0x0000, + 0x0000, 0x0121, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0126, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0131, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 35140 - 3517F + 0x0000, 0x0136, 0x0000, 0x013b, 0x0000, 0x0000, 0x0140, 0x0000, + 0x0000, 0x0145, 0x0000, 0x0000, 0x014a, 0x0001, 0x0114, 0x0001, + 0x0047, 0x0483, 0x0001, 0x0119, 0x0001, 0x0047, 0x0489, 0x0001, + 0x011e, 0x0001, 0x0047, 0x048e, 0x0001, 0x0123, 0x0001, 0x0047, + 0x0492, 0x0002, 0x0129, 0x012c, 0x0001, 0x0047, 0x0499, 0x0003, + 0x0047, 0x049e, 0x04a2, 0x04a8, 0x0001, 0x0133, 0x0001, 0x0047, + 0x04ae, 0x0001, 0x0138, 0x0001, 0x0047, 0x04bc, 0x0001, 0x013d, + 0x0001, 0x0047, 0x04d0, 0x0001, 0x0142, 0x0001, 0x0047, 0x04d4, + // Entry 35180 - 351BF + 0x0001, 0x0147, 0x0001, 0x0047, 0x04da, 0x0001, 0x014c, 0x0001, + 0x0047, 0x04e1, 0x0002, 0x0003, 0x01a5, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, + 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, 0x0002, 0x0000, 0x0001, + 0x0002, 0x0010, 0x0001, 0x0002, 0x0044, 0x0001, 0x0000, 0x240c, + 0x0008, 0x002f, 0x0094, 0x00eb, 0x0120, 0x0158, 0x0172, 0x0183, + 0x0194, 0x0002, 0x0032, 0x0063, 0x0003, 0x0036, 0x0045, 0x0054, + // Entry 351C0 - 351FF + 0x000d, 0x0006, 0xffff, 0x001e, 0x432b, 0x43cd, 0x42a5, 0x4425, + 0x4429, 0x442d, 0x4431, 0x433b, 0x43a9, 0x433f, 0x422c, 0x000d, + 0x0000, 0xffff, 0x257b, 0x2b4e, 0x2b3c, 0x2b42, 0x2b3c, 0x257b, + 0x257b, 0x2b42, 0x2b3a, 0x2b50, 0x2b40, 0x2b3e, 0x000d, 0x0047, + 0xffff, 0x04ee, 0x04f6, 0x04ff, 0x0506, 0x050d, 0x0511, 0x0516, + 0x051c, 0x0526, 0x0530, 0x0538, 0x0541, 0x0003, 0x0067, 0x0076, + 0x0085, 0x000d, 0x0006, 0xffff, 0x001e, 0x432b, 0x43cd, 0x42a5, + 0x4435, 0x4429, 0x442d, 0x4431, 0x433b, 0x43a9, 0x433f, 0x422c, + // Entry 35200 - 3523F + 0x000d, 0x0000, 0xffff, 0x257b, 0x2b4e, 0x2b3c, 0x2b42, 0x2b3c, + 0x257b, 0x257b, 0x2b42, 0x2b3a, 0x2b50, 0x2b40, 0x2b3e, 0x000d, + 0x0047, 0xffff, 0x04ee, 0x04f6, 0x04ff, 0x0506, 0x054a, 0x0511, + 0x0516, 0x051c, 0x0526, 0x0530, 0x0538, 0x0541, 0x0002, 0x0097, + 0x00c1, 0x0005, 0x009d, 0x00a6, 0x00b8, 0x0000, 0x00af, 0x0007, + 0x0047, 0x054e, 0x0553, 0x0559, 0x055d, 0x0562, 0x0567, 0x056b, + 0x0007, 0x0000, 0x2b42, 0x2b42, 0x2b27, 0x2b42, 0x2b42, 0x2359, + 0x2b42, 0x0007, 0x0047, 0x054e, 0x0553, 0x0559, 0x055d, 0x0562, + // Entry 35240 - 3527F + 0x0567, 0x056b, 0x0007, 0x0047, 0x0570, 0x0578, 0x0584, 0x058b, + 0x0594, 0x059e, 0x05a3, 0x0005, 0x00c7, 0x00d0, 0x00e2, 0x0000, + 0x00d9, 0x0007, 0x0047, 0x054e, 0x0553, 0x0559, 0x055d, 0x0562, + 0x0567, 0x056b, 0x0007, 0x0000, 0x2b42, 0x2b42, 0x2b27, 0x2b42, + 0x2b42, 0x2359, 0x2b42, 0x0007, 0x0047, 0x054e, 0x0553, 0x0559, + 0x055d, 0x0562, 0x0567, 0x056b, 0x0007, 0x0047, 0x0570, 0x0578, + 0x0584, 0x058b, 0x0594, 0x059e, 0x05a3, 0x0002, 0x00ee, 0x0107, + 0x0003, 0x00f2, 0x00f9, 0x0100, 0x0005, 0x001d, 0xffff, 0x1674, + // Entry 35280 - 352BF + 0x1677, 0x167a, 0x167d, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x0005, 0x0047, 0xffff, 0x05ac, 0x05c1, 0x05d4, + 0x05e8, 0x0003, 0x010b, 0x0112, 0x0119, 0x0005, 0x001d, 0xffff, + 0x1674, 0x1677, 0x167a, 0x167d, 0x0005, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x0005, 0x0047, 0xffff, 0x05ac, 0x05c1, + 0x05d4, 0x05e8, 0x0002, 0x0123, 0x0139, 0x0003, 0x0127, 0x0000, + 0x0130, 0x0002, 0x012a, 0x012d, 0x0001, 0x0000, 0x04ef, 0x0001, + 0x0000, 0x04f2, 0x0002, 0x0133, 0x0136, 0x0001, 0x0000, 0x04ef, + // Entry 352C0 - 352FF + 0x0001, 0x0000, 0x04f2, 0x0003, 0x013d, 0x0146, 0x014f, 0x0002, + 0x0140, 0x0143, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, + 0x0002, 0x0149, 0x014c, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, + 0x04f2, 0x0002, 0x0152, 0x0155, 0x0001, 0x0000, 0x04ef, 0x0001, + 0x0000, 0x04f2, 0x0003, 0x0167, 0x0000, 0x015c, 0x0002, 0x015f, + 0x0163, 0x0002, 0x0047, 0x05fd, 0x060b, 0x0002, 0x0000, 0x04f5, + 0x2701, 0x0002, 0x016a, 0x016e, 0x0002, 0x0009, 0x0078, 0x57b0, + 0x0002, 0x0000, 0x04f5, 0x2701, 0x0004, 0x0180, 0x017a, 0x0177, + // Entry 35300 - 3533F + 0x017d, 0x0001, 0x0002, 0x0025, 0x0001, 0x0002, 0x0033, 0x0001, + 0x0000, 0x0514, 0x0001, 0x0000, 0x051c, 0x0004, 0x0191, 0x018b, + 0x0188, 0x018e, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, + 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, 0x01a2, + 0x019c, 0x0199, 0x019f, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x003d, + 0x01e3, 0x0000, 0x0000, 0x01e8, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x01ed, 0x0000, 0x0000, 0x01f2, 0x0000, 0x0000, 0x0000, + // Entry 35340 - 3537F + 0x0000, 0x0000, 0x01f7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0202, 0x0000, 0x0207, 0x0000, + 0x0000, 0x020c, 0x0000, 0x0000, 0x0211, 0x0001, 0x01e5, 0x0001, + 0x0000, 0x1a35, 0x0001, 0x01ea, 0x0001, 0x0047, 0x0619, 0x0001, + 0x01ef, 0x0001, 0x0047, 0x061f, 0x0001, 0x01f4, 0x0001, 0x0047, + // Entry 35380 - 353BF + 0x0626, 0x0002, 0x01fa, 0x01fd, 0x0001, 0x0047, 0x0631, 0x0003, + 0x0047, 0x0637, 0x063d, 0x0642, 0x0001, 0x0204, 0x0001, 0x0007, + 0x0892, 0x0001, 0x0209, 0x0001, 0x0039, 0x09c6, 0x0001, 0x020e, + 0x0001, 0x0047, 0x064d, 0x0001, 0x0213, 0x0001, 0x0047, 0x0655, + 0x0002, 0x0003, 0x00d5, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, 0x0023, 0x001d, + 0x001a, 0x0020, 0x0001, 0x0006, 0x000d, 0x0001, 0x0002, 0x0010, + // Entry 353C0 - 353FF + 0x0001, 0x0002, 0x001b, 0x0001, 0x0002, 0x0587, 0x0008, 0x002f, + 0x0066, 0x0000, 0x008b, 0x00a3, 0x00b3, 0x00c4, 0x0000, 0x0002, + 0x0032, 0x0054, 0x0003, 0x0036, 0x0000, 0x0045, 0x000d, 0x0047, + 0xffff, 0x065e, 0x0662, 0x0666, 0x066a, 0x066e, 0x0672, 0x0676, + 0x067a, 0x067e, 0x0682, 0x0686, 0x068a, 0x000d, 0x0047, 0xffff, + 0x068e, 0x069e, 0x06af, 0x06c0, 0x06d3, 0x06e5, 0x06fd, 0x070b, + 0x0719, 0x0727, 0x0735, 0x074b, 0x0002, 0x0000, 0x0057, 0x000d, + 0x0000, 0xffff, 0x2773, 0x39f0, 0x2246, 0x25ed, 0x2b27, 0x2b3c, + // Entry 35400 - 3543F + 0x2b3a, 0x2b40, 0x2b27, 0x2773, 0x2b3c, 0x2523, 0x0002, 0x0069, + 0x007f, 0x0003, 0x006d, 0x0000, 0x0076, 0x0007, 0x0047, 0x0676, + 0x0765, 0x0769, 0x076d, 0x0771, 0x0775, 0x0779, 0x0007, 0x0047, + 0x077d, 0x0784, 0x078d, 0x0795, 0x079e, 0x07a8, 0x07af, 0x0002, + 0x0000, 0x0082, 0x0007, 0x0000, 0x2b3a, 0x257b, 0x257b, 0x257b, + 0x2b42, 0x204d, 0x257b, 0x0001, 0x008d, 0x0003, 0x0091, 0x0000, + 0x009a, 0x0002, 0x0094, 0x0097, 0x0001, 0x0047, 0x07b8, 0x0001, + 0x0047, 0x07c1, 0x0002, 0x009d, 0x00a0, 0x0001, 0x0047, 0x07b8, + // Entry 35440 - 3547F + 0x0001, 0x0047, 0x07c1, 0x0003, 0x00ad, 0x0000, 0x00a7, 0x0001, + 0x00a9, 0x0002, 0x0047, 0x07ce, 0x07dc, 0x0001, 0x00af, 0x0002, + 0x0047, 0x07e7, 0x07ea, 0x0004, 0x00c1, 0x00bb, 0x00b8, 0x00be, + 0x0001, 0x0006, 0x015b, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, + 0x003c, 0x0001, 0x0002, 0x08e8, 0x0004, 0x00d2, 0x00cc, 0x00c9, + 0x00cf, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, + 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x003d, 0x0113, 0x0000, + 0x0000, 0x0118, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x011d, + // Entry 35480 - 354BF + 0x0000, 0x0000, 0x0122, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0127, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0132, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0137, 0x0000, 0x0000, 0x013c, + 0x0000, 0x0000, 0x0141, 0x0001, 0x0115, 0x0001, 0x0047, 0x07ed, + 0x0001, 0x011a, 0x0001, 0x0047, 0x07f7, 0x0001, 0x011f, 0x0001, + // Entry 354C0 - 354FF + 0x0047, 0x07fc, 0x0001, 0x0124, 0x0001, 0x0047, 0x0802, 0x0002, + 0x012a, 0x012d, 0x0001, 0x0047, 0x080e, 0x0003, 0x0047, 0x0815, + 0x081f, 0x0828, 0x0001, 0x0134, 0x0001, 0x0047, 0x0831, 0x0001, + 0x0139, 0x0001, 0x0047, 0x084a, 0x0001, 0x013e, 0x0001, 0x0047, + 0x084f, 0x0001, 0x0143, 0x0001, 0x0047, 0x0857, 0x0003, 0x0004, + 0x0150, 0x0210, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000d, 0x0038, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0016, 0x0000, 0x0027, 0x0004, 0x0024, 0x001e, 0x001b, + // Entry 35500 - 3553F + 0x0021, 0x0001, 0x0002, 0x031a, 0x0001, 0x0000, 0x049a, 0x0001, + 0x0000, 0x04a5, 0x0001, 0x0000, 0x04af, 0x0004, 0x0035, 0x002f, + 0x002c, 0x0032, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x0041, + 0x00a6, 0x0000, 0x00fd, 0x0115, 0x011d, 0x012e, 0x013f, 0x0002, + 0x0044, 0x0075, 0x0003, 0x0048, 0x0057, 0x0066, 0x000d, 0x0047, + 0xffff, 0x0860, 0x0868, 0x0876, 0x0887, 0x0896, 0x08a0, 0x08b0, + 0x08c4, 0x08d1, 0x08db, 0x08ea, 0x08f4, 0x000d, 0x0046, 0xffff, + // Entry 35540 - 3557F + 0x00f6, 0x33b9, 0x00fc, 0x33bc, 0x33bf, 0x33c2, 0x33c5, 0x33c8, + 0x33cb, 0x33ce, 0x33d1, 0x33d4, 0x000d, 0x0047, 0xffff, 0x0902, + 0x0868, 0x0876, 0x0887, 0x0896, 0x08a0, 0x08b0, 0x08c4, 0x08d1, + 0x08db, 0x08ea, 0x08f4, 0x0003, 0x0079, 0x0088, 0x0097, 0x000d, + 0x0047, 0xffff, 0x0860, 0x0868, 0x0876, 0x0887, 0x0896, 0x08a0, + 0x08b0, 0x08c4, 0x08d1, 0x08db, 0x08ea, 0x08f4, 0x000d, 0x0046, + 0xffff, 0x00f6, 0x33b9, 0x00fc, 0x33bc, 0x33bf, 0x33c2, 0x33c5, + 0x33c8, 0x33cb, 0x33ce, 0x33d1, 0x33d4, 0x000d, 0x0047, 0xffff, + // Entry 35580 - 355BF + 0x0902, 0x0868, 0x0876, 0x0887, 0x0896, 0x08a0, 0x08b0, 0x08c4, + 0x08d1, 0x08db, 0x08ea, 0x08f4, 0x0002, 0x00a9, 0x00d3, 0x0005, + 0x00af, 0x00b8, 0x00ca, 0x0000, 0x00c1, 0x0007, 0x0047, 0x0910, + 0x0917, 0x091e, 0x0925, 0x092c, 0x0933, 0x093a, 0x0007, 0x0018, + 0x01d9, 0x29f0, 0x01df, 0x01e2, 0x29f3, 0x29f6, 0x29f9, 0x0007, + 0x0000, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0007, 0x0047, 0x0910, 0x0917, 0x091e, 0x0925, 0x092c, 0x0933, + 0x093a, 0x0005, 0x00d9, 0x00e2, 0x00f4, 0x0000, 0x00eb, 0x0007, + // Entry 355C0 - 355FF + 0x0047, 0x0910, 0x0917, 0x091e, 0x0925, 0x092c, 0x0933, 0x093a, + 0x0007, 0x0018, 0x01d9, 0x29f0, 0x01df, 0x01e2, 0x29f3, 0x29f6, + 0x29f9, 0x0007, 0x0000, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0007, 0x0047, 0x0910, 0x0917, 0x091e, 0x0925, + 0x092c, 0x0933, 0x093a, 0x0001, 0x00ff, 0x0003, 0x0103, 0x0000, + 0x010c, 0x0002, 0x0106, 0x0109, 0x0001, 0x0000, 0x04ef, 0x0001, + 0x0000, 0x04f2, 0x0002, 0x010f, 0x0112, 0x0001, 0x0000, 0x04ef, + 0x0001, 0x0000, 0x04f2, 0x0001, 0x0117, 0x0001, 0x0119, 0x0002, + // Entry 35600 - 3563F + 0x0000, 0x04f5, 0x2701, 0x0004, 0x012b, 0x0125, 0x0122, 0x0128, + 0x0001, 0x0002, 0x04ca, 0x0001, 0x0000, 0x050b, 0x0001, 0x0000, + 0x0514, 0x0001, 0x0000, 0x051c, 0x0004, 0x013c, 0x0136, 0x0133, + 0x0139, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, + 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, 0x014d, 0x0147, + 0x0144, 0x014a, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0040, 0x0191, + 0x0000, 0x0000, 0x0196, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 35640 - 3567F + 0x019b, 0x0000, 0x0000, 0x01ad, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x01b2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01cb, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x01d0, 0x0000, 0x01d5, 0x0000, 0x0000, + 0x01e7, 0x0000, 0x0000, 0x01f9, 0x0000, 0x0000, 0x020b, 0x0001, + 0x0193, 0x0001, 0x0000, 0x1a35, 0x0001, 0x0198, 0x0001, 0x0047, + // Entry 35680 - 356BF + 0x0941, 0x0003, 0x019f, 0x0000, 0x01a2, 0x0001, 0x0047, 0x0948, + 0x0002, 0x01a5, 0x01a9, 0x0002, 0x0000, 0x1ace, 0x1ace, 0x0002, + 0x0000, 0x1ad5, 0x1ad5, 0x0001, 0x01af, 0x0001, 0x0047, 0x094e, + 0x0003, 0x01b6, 0x01b9, 0x01c0, 0x0001, 0x0047, 0x0953, 0x0005, + 0x0047, 0x0959, 0x0960, 0x096c, 0xffff, 0x0970, 0x0002, 0x01c3, + 0x01c7, 0x0002, 0x0000, 0x1b48, 0x1b48, 0x0002, 0x0000, 0x1b4f, + 0x1b4f, 0x0001, 0x01cd, 0x0001, 0x0047, 0x0978, 0x0001, 0x01d2, + 0x0001, 0x0000, 0x1d5d, 0x0003, 0x01d9, 0x0000, 0x01dc, 0x0001, + // Entry 356C0 - 356FF + 0x0000, 0x1d67, 0x0002, 0x01df, 0x01e3, 0x0002, 0x0000, 0x1d76, + 0x1d76, 0x0002, 0x0000, 0x1d7d, 0x1d7d, 0x0003, 0x01eb, 0x0000, + 0x01ee, 0x0001, 0x0000, 0x1d84, 0x0002, 0x01f1, 0x01f5, 0x0002, + 0x0000, 0x1d97, 0x1d97, 0x0002, 0x0000, 0x1da0, 0x1da0, 0x0003, + 0x01fd, 0x0000, 0x0200, 0x0001, 0x0000, 0x1da9, 0x0002, 0x0203, + 0x0207, 0x0002, 0x0026, 0x02ce, 0x02ce, 0x0002, 0x0000, 0x1dbb, + 0x1dbb, 0x0001, 0x020d, 0x0001, 0x0000, 0x1dc2, 0x0004, 0x0215, + 0x021a, 0x0000, 0x0000, 0x0003, 0x0000, 0x1dc7, 0x39fb, 0x3a02, + // Entry 35700 - 3573F + 0x0001, 0x0000, 0x1de0, 0x0003, 0x0004, 0x064c, 0x0aab, 0x0012, + 0x0017, 0x0000, 0x0055, 0x0000, 0x0101, 0x0000, 0x0188, 0x01b3, + 0x03e8, 0x0491, 0x050f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x05b2, 0x0630, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, + 0x0033, 0x0000, 0x0044, 0x0003, 0x0029, 0x002e, 0x0024, 0x0001, + 0x0026, 0x0001, 0x0000, 0x0000, 0x0001, 0x002b, 0x0001, 0x0000, + 0x0000, 0x0001, 0x0030, 0x0001, 0x0000, 0x0000, 0x0004, 0x0041, + 0x003b, 0x0038, 0x003e, 0x0001, 0x0047, 0x0987, 0x0001, 0x0047, + // Entry 35740 - 3577F + 0x099f, 0x0001, 0x0047, 0x09b1, 0x0001, 0x0047, 0x09ba, 0x0004, + 0x0052, 0x004c, 0x0049, 0x004f, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0008, 0x005e, 0x0000, 0x0000, 0x0000, 0x00c9, 0x00df, 0x0000, + 0x00f0, 0x0002, 0x0061, 0x0095, 0x0003, 0x0065, 0x0075, 0x0085, + 0x000e, 0x0047, 0xffff, 0x09c7, 0x09ce, 0x09d7, 0x09e2, 0x09ed, + 0x09f6, 0x0a01, 0x0a12, 0x0a23, 0x0a30, 0x0a3b, 0x0a44, 0x0a4f, + 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + // Entry 35780 - 357BF + 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, + 0x000e, 0x0047, 0xffff, 0x09c7, 0x09ce, 0x09d7, 0x09e2, 0x09ed, + 0x09f6, 0x0a01, 0x0a12, 0x0a23, 0x0a30, 0x0a3b, 0x0a44, 0x0a4f, + 0x0003, 0x0099, 0x00a9, 0x00b9, 0x000e, 0x0047, 0xffff, 0x09c7, + 0x09ce, 0x09d7, 0x09e2, 0x09ed, 0x09f6, 0x0a01, 0x0a12, 0x0a23, + 0x0a30, 0x0a3b, 0x0a44, 0x0a4f, 0x000e, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x0047, 0xffff, 0x09c7, + // Entry 357C0 - 357FF + 0x09ce, 0x09d7, 0x09e2, 0x09ed, 0x09f6, 0x0a01, 0x0a12, 0x0a23, + 0x0a30, 0x0a3b, 0x0a44, 0x0a4f, 0x0003, 0x00d3, 0x00d9, 0x00cd, + 0x0001, 0x00cf, 0x0002, 0x0047, 0x0a58, 0x0a60, 0x0001, 0x00d5, + 0x0002, 0x0047, 0x0a58, 0x0a60, 0x0001, 0x00db, 0x0002, 0x0047, + 0x0a58, 0x0a60, 0x0004, 0x00ed, 0x00e7, 0x00e4, 0x00ea, 0x0001, + 0x0047, 0x0987, 0x0001, 0x0047, 0x099f, 0x0001, 0x0047, 0x09b1, + 0x0001, 0x0047, 0x09ba, 0x0004, 0x00fe, 0x00f8, 0x00f5, 0x00fb, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + // Entry 35800 - 3583F + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0005, 0x0107, 0x0000, 0x0000, + 0x0000, 0x0172, 0x0002, 0x010a, 0x013e, 0x0003, 0x010e, 0x011e, + 0x012e, 0x000e, 0x0047, 0xffff, 0x0a68, 0x0a79, 0x0a86, 0x0a91, + 0x0a9e, 0x0aa5, 0x0ab4, 0x0ac3, 0x0ad0, 0x0add, 0x0ae6, 0x0af1, + 0x0afe, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, + 0x0422, 0x000e, 0x0047, 0xffff, 0x0a68, 0x0a79, 0x0a86, 0x0a91, + 0x0a9e, 0x0aa5, 0x0ab4, 0x0ac3, 0x0ad0, 0x0add, 0x0ae6, 0x0af1, + // Entry 35840 - 3587F + 0x0afe, 0x0003, 0x0142, 0x0152, 0x0162, 0x000e, 0x0047, 0xffff, + 0x0a68, 0x0a79, 0x0a86, 0x0a91, 0x0a9e, 0x0aa5, 0x0ab4, 0x0ac3, + 0x0ad0, 0x0add, 0x0ae6, 0x0af1, 0x0afe, 0x000e, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x0047, 0xffff, + 0x0a68, 0x0a79, 0x0a86, 0x0a91, 0x0a9e, 0x0aa5, 0x0ab4, 0x0ac3, + 0x0ad0, 0x0add, 0x0ae6, 0x0af1, 0x0afe, 0x0003, 0x017c, 0x0182, + 0x0176, 0x0001, 0x0178, 0x0002, 0x0047, 0x0a58, 0x0a60, 0x0001, + // Entry 35880 - 358BF + 0x017e, 0x0002, 0x0047, 0x0a58, 0x0a60, 0x0001, 0x0184, 0x0002, + 0x0047, 0x0a58, 0x0a60, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0191, 0x0000, 0x01a2, 0x0004, 0x019f, 0x0199, 0x0196, + 0x019c, 0x0001, 0x0047, 0x0987, 0x0001, 0x0047, 0x099f, 0x0001, + 0x0047, 0x09b1, 0x0001, 0x0047, 0x09ba, 0x0004, 0x01b0, 0x01aa, + 0x01a7, 0x01ad, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x01bc, + 0x0221, 0x0278, 0x02ad, 0x0396, 0x03b5, 0x03c6, 0x03d7, 0x0002, + // Entry 358C0 - 358FF + 0x01bf, 0x01f0, 0x0003, 0x01c3, 0x01d2, 0x01e1, 0x000d, 0x0047, + 0xffff, 0x0b0d, 0x0b15, 0x0b1d, 0x0b25, 0x0b2d, 0x0b34, 0x0b3c, + 0x0b44, 0x0b4c, 0x0b56, 0x0b5e, 0x0b68, 0x000d, 0x000e, 0xffff, + 0x01e4, 0x01e7, 0x01ea, 0x01ed, 0x01ea, 0x01e4, 0x01e4, 0x01ed, + 0x01f0, 0x1ff8, 0x01f6, 0x01f9, 0x000d, 0x0047, 0xffff, 0x0b70, + 0x0b7f, 0x0b90, 0x0b99, 0x0b2d, 0x0ba4, 0x0bad, 0x0bb6, 0x0bc3, + 0x0bd6, 0x0be7, 0x0bf6, 0x0003, 0x01f4, 0x0203, 0x0212, 0x000d, + 0x0047, 0xffff, 0x0b0d, 0x0b15, 0x0b1d, 0x0b25, 0x0b2d, 0x0b34, + // Entry 35900 - 3593F + 0x0b3c, 0x0b44, 0x0b4c, 0x0b56, 0x0b5e, 0x0b68, 0x000d, 0x000e, + 0xffff, 0x01e4, 0x01e7, 0x01ea, 0x01ed, 0x01ea, 0x01e4, 0x01e4, + 0x01ed, 0x01f0, 0x1ff8, 0x01f6, 0x01f9, 0x000d, 0x0047, 0xffff, + 0x0b70, 0x0b7f, 0x0b90, 0x0b99, 0x0b2d, 0x0ba4, 0x0bad, 0x0bb6, + 0x0bc3, 0x0bd6, 0x0be7, 0x0bf6, 0x0002, 0x0224, 0x024e, 0x0005, + 0x022a, 0x0233, 0x0245, 0x0000, 0x023c, 0x0007, 0x0047, 0x0c07, + 0x0c0f, 0x0c17, 0x0c1d, 0x0c25, 0x0c2d, 0x0c35, 0x0007, 0x000e, + 0x01f6, 0x0296, 0x1ffb, 0x01f0, 0x029c, 0x0296, 0x01f0, 0x0007, + // Entry 35940 - 3597F + 0x0047, 0x0c07, 0x0c0f, 0x0c3d, 0x0c1d, 0x0c25, 0x0c2d, 0x0c35, + 0x0007, 0x0047, 0x0c45, 0x0c52, 0x0c67, 0x0c76, 0x0c81, 0x0c92, + 0x0c9d, 0x0005, 0x0254, 0x025d, 0x026f, 0x0000, 0x0266, 0x0007, + 0x0047, 0x0c07, 0x0c0f, 0x0c3d, 0x0c1d, 0x0c25, 0x0c2d, 0x0c35, + 0x0007, 0x000e, 0x01f6, 0x0296, 0x1ffb, 0x01f0, 0x029c, 0x0296, + 0x01f0, 0x0007, 0x0047, 0x0c07, 0x0c0f, 0x0c3d, 0x0c1d, 0x0c25, + 0x0c2d, 0x0c35, 0x0007, 0x0047, 0x0c45, 0x0c52, 0x0c67, 0x0c76, + 0x0c81, 0x0c92, 0x0c9d, 0x0002, 0x027b, 0x0294, 0x0003, 0x027f, + // Entry 35980 - 359BF + 0x0286, 0x028d, 0x0005, 0x0047, 0xffff, 0x0caa, 0x0cb8, 0x0cc6, + 0x0cd4, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x0005, 0x0047, 0xffff, 0x0ce2, 0x0d00, 0x0d20, 0x0d40, 0x0003, + 0x0298, 0x029f, 0x02a6, 0x0005, 0x0047, 0xffff, 0x0caa, 0x0cb8, + 0x0cc6, 0x0cd4, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x0005, 0x0047, 0xffff, 0x0ce2, 0x0d00, 0x0d20, 0x0d40, + 0x0002, 0x02b0, 0x0323, 0x0003, 0x02b4, 0x02d9, 0x02fe, 0x0009, + 0x02c1, 0x02c7, 0x02be, 0x02ca, 0x02d0, 0x02d3, 0x02d6, 0x02c4, + // Entry 359C0 - 359FF + 0x02cd, 0x0001, 0x0047, 0x0d64, 0x0001, 0x0047, 0x0d71, 0x0001, + 0x0047, 0x0d7f, 0x0001, 0x0047, 0x0d90, 0x0001, 0x0047, 0x0d9a, + 0x0001, 0x0047, 0x0d71, 0x0001, 0x0047, 0x0d90, 0x0001, 0x0047, + 0x0da7, 0x0001, 0x0047, 0x0db6, 0x0009, 0x02e6, 0x02ec, 0x02e3, + 0x02ef, 0x02f5, 0x02f8, 0x02fb, 0x02e9, 0x02f2, 0x0001, 0x0047, + 0x0dbf, 0x0001, 0x0047, 0x0d71, 0x0001, 0x0047, 0x0dc9, 0x0001, + 0x0047, 0x0d90, 0x0001, 0x0047, 0x0dd3, 0x0001, 0x0047, 0x0d71, + 0x0001, 0x0047, 0x0d90, 0x0001, 0x0047, 0x0ddc, 0x0001, 0x0047, + // Entry 35A00 - 35A3F + 0x0db6, 0x0009, 0x030b, 0x0311, 0x0308, 0x0314, 0x031a, 0x031d, + 0x0320, 0x030e, 0x0317, 0x0001, 0x0047, 0x0d64, 0x0001, 0x0047, + 0x0de4, 0x0001, 0x0047, 0x0d7f, 0x0001, 0x0047, 0x0df9, 0x0001, + 0x0047, 0x0d9a, 0x0001, 0x0047, 0x0de4, 0x0001, 0x0047, 0x0df9, + 0x0001, 0x0047, 0x0da7, 0x0001, 0x0047, 0x0e0a, 0x0003, 0x0327, + 0x034c, 0x0371, 0x0009, 0x0334, 0x033a, 0x0331, 0x033d, 0x0343, + 0x0346, 0x0349, 0x0337, 0x0340, 0x0001, 0x0047, 0x0d64, 0x0001, + 0x0047, 0x0d71, 0x0001, 0x0047, 0x0d7f, 0x0001, 0x0047, 0x0d90, + // Entry 35A40 - 35A7F + 0x0001, 0x0047, 0x0d9a, 0x0001, 0x0047, 0x0d71, 0x0001, 0x0047, + 0x0d90, 0x0001, 0x0047, 0x0da7, 0x0001, 0x0047, 0x0e0a, 0x0009, + 0x0359, 0x035f, 0x0356, 0x0362, 0x0368, 0x036b, 0x036e, 0x035c, + 0x0365, 0x0001, 0x0047, 0x0d64, 0x0001, 0x0047, 0x0d71, 0x0001, + 0x0047, 0x0e1c, 0x0001, 0x0047, 0x0d90, 0x0001, 0x0047, 0x0d9a, + 0x0001, 0x0047, 0x0d71, 0x0001, 0x0047, 0x0d90, 0x0001, 0x0047, + 0x0da7, 0x0001, 0x0047, 0x0e0a, 0x0009, 0x037e, 0x0384, 0x037b, + 0x0387, 0x038d, 0x0390, 0x0393, 0x0381, 0x038a, 0x0001, 0x0047, + // Entry 35A80 - 35ABF + 0x0e29, 0x0001, 0x0047, 0x0de4, 0x0001, 0x0047, 0x0d7f, 0x0001, + 0x0047, 0x0df9, 0x0001, 0x0047, 0x0d9a, 0x0001, 0x0047, 0x0de4, + 0x0001, 0x0047, 0x0df9, 0x0001, 0x0047, 0x0da7, 0x0001, 0x0047, + 0x0e0a, 0x0003, 0x03a5, 0x03af, 0x039a, 0x0002, 0x039d, 0x03a1, + 0x0002, 0x0047, 0x0e3b, 0x0e65, 0x0002, 0x0047, 0x0e58, 0x0e7e, + 0x0002, 0x03a8, 0x03ac, 0x0002, 0x0009, 0x065b, 0x57b3, 0x0001, + 0x000e, 0x0391, 0x0001, 0x03b1, 0x0002, 0x0009, 0x065b, 0x57b3, + 0x0004, 0x03c3, 0x03bd, 0x03ba, 0x03c0, 0x0001, 0x0001, 0x001d, + // Entry 35AC0 - 35AFF + 0x0001, 0x0001, 0x002d, 0x0001, 0x0047, 0x0e92, 0x0001, 0x0047, + 0x0e99, 0x0004, 0x03d4, 0x03ce, 0x03cb, 0x03d1, 0x0001, 0x0000, + 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, + 0x0000, 0x0546, 0x0004, 0x03e5, 0x03df, 0x03dc, 0x03e2, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0008, 0x03f1, 0x0000, 0x0000, 0x0000, + 0x045c, 0x046f, 0x0000, 0x0480, 0x0002, 0x03f4, 0x0428, 0x0003, + 0x03f8, 0x0408, 0x0418, 0x000e, 0x0009, 0x0724, 0x06d5, 0x06e0, + // Entry 35B00 - 35B3F + 0x06ed, 0x57ba, 0x57c5, 0x0710, 0x071b, 0x0730, 0x57d0, 0x0742, + 0x074d, 0x0758, 0x075d, 0x000e, 0x0000, 0x003f, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, + 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x0009, 0x0724, 0x06d5, 0x06e0, + 0x06ed, 0x57ba, 0x57c5, 0x0710, 0x071b, 0x0730, 0x57d0, 0x0742, + 0x074d, 0x0758, 0x075d, 0x0003, 0x042c, 0x043c, 0x044c, 0x000e, + 0x0009, 0x0724, 0x06d5, 0x06e0, 0x06ed, 0x57ba, 0x57c5, 0x0710, + 0x071b, 0x0730, 0x57d0, 0x0742, 0x074d, 0x0758, 0x075d, 0x000e, + // Entry 35B40 - 35B7F + 0x0000, 0x003f, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, + 0x0009, 0x0724, 0x06d5, 0x06e0, 0x06ed, 0x57ba, 0x57c5, 0x57d9, + 0x071b, 0x0730, 0x57d0, 0x0742, 0x074d, 0x0758, 0x075d, 0x0003, + 0x0465, 0x046a, 0x0460, 0x0001, 0x0462, 0x0001, 0x0000, 0x04ef, + 0x0001, 0x0467, 0x0001, 0x0000, 0x04ef, 0x0001, 0x046c, 0x0001, + 0x0000, 0x04ef, 0x0004, 0x047d, 0x0477, 0x0474, 0x047a, 0x0001, + 0x0047, 0x0987, 0x0001, 0x0047, 0x099f, 0x0001, 0x0047, 0x09b1, + // Entry 35B80 - 35BBF + 0x0001, 0x0047, 0x09ba, 0x0004, 0x048e, 0x0488, 0x0485, 0x048b, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0005, 0x0497, 0x0000, 0x0000, + 0x0000, 0x04fc, 0x0002, 0x049a, 0x04cb, 0x0003, 0x049e, 0x04ad, + 0x04bc, 0x000d, 0x0047, 0xffff, 0x0ea1, 0x0eae, 0x0ebd, 0x0eca, + 0x0ed5, 0x0ee4, 0x0eef, 0x0efc, 0x0f0b, 0x0f20, 0x0f2b, 0x0f34, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, + // Entry 35BC0 - 35BFF + 0x0047, 0xffff, 0x0ea1, 0x0eae, 0x0ebd, 0x0eca, 0x0ed5, 0x0ee4, + 0x0eef, 0x0efc, 0x0f0b, 0x0f20, 0x0f2b, 0x0f34, 0x0003, 0x04cf, + 0x04de, 0x04ed, 0x000d, 0x0047, 0xffff, 0x0ea1, 0x0eae, 0x0ebd, + 0x0eca, 0x0ed5, 0x0ee4, 0x0eef, 0x0efc, 0x0f0b, 0x0f20, 0x0f2b, + 0x0f34, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, + 0x000d, 0x0047, 0xffff, 0x0ea1, 0x0eae, 0x0ebd, 0x0eca, 0x0ed5, + 0x0ee4, 0x0eef, 0x0efc, 0x0f0b, 0x0f20, 0x0f2b, 0x0f34, 0x0003, + // Entry 35C00 - 35C3F + 0x0505, 0x050a, 0x0500, 0x0001, 0x0502, 0x0001, 0x0047, 0x0f43, + 0x0001, 0x0507, 0x0001, 0x0047, 0x0f43, 0x0001, 0x050c, 0x0001, + 0x0047, 0x0f43, 0x0008, 0x0518, 0x0000, 0x0000, 0x0000, 0x057d, + 0x0590, 0x0000, 0x05a1, 0x0002, 0x051b, 0x054c, 0x0003, 0x051f, + 0x052e, 0x053d, 0x000d, 0x0047, 0xffff, 0x0f4c, 0x0f54, 0x0f5c, + 0x0f66, 0x0f71, 0x0f7b, 0x0f86, 0x0f8e, 0x0f96, 0x0f9e, 0x0fa6, + 0x0fb0, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, + // Entry 35C40 - 35C7F + 0x000d, 0x0047, 0xffff, 0x0fba, 0x0fc9, 0x0fd4, 0x0fdf, 0x0feb, + 0x0ffa, 0x100a, 0x1015, 0x1020, 0x102f, 0x103a, 0x1049, 0x0003, + 0x0550, 0x055f, 0x056e, 0x000d, 0x0047, 0xffff, 0x0f4c, 0x0f54, + 0x0f5c, 0x0f66, 0x0f71, 0x0f7b, 0x0f86, 0x0f8e, 0x0f96, 0x0f9e, + 0x0fa6, 0x0fb0, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, + 0x3a0c, 0x000d, 0x0047, 0xffff, 0x0fba, 0x0fc9, 0x0fd4, 0x0fdf, + 0x0feb, 0x0ffa, 0x100a, 0x1015, 0x1020, 0x102f, 0x103a, 0x1049, + // Entry 35C80 - 35CBF + 0x0003, 0x0586, 0x058b, 0x0581, 0x0001, 0x0583, 0x0001, 0x0000, + 0x06c8, 0x0001, 0x0588, 0x0001, 0x0000, 0x06c8, 0x0001, 0x058d, + 0x0001, 0x0000, 0x06c8, 0x0004, 0x059e, 0x0598, 0x0595, 0x059b, + 0x0001, 0x0047, 0x0987, 0x0001, 0x0047, 0x099f, 0x0001, 0x0047, + 0x09b1, 0x0001, 0x0047, 0x09ba, 0x0004, 0x05af, 0x05a9, 0x05a6, + 0x05ac, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0005, 0x05b8, 0x0000, + 0x0000, 0x0000, 0x061d, 0x0002, 0x05bb, 0x05ec, 0x0003, 0x05bf, + // Entry 35CC0 - 35CFF + 0x05ce, 0x05dd, 0x000d, 0x0047, 0xffff, 0x1058, 0x106b, 0x1080, + 0x108d, 0x1094, 0x10a1, 0x10b2, 0x10b9, 0x10c2, 0x10cb, 0x10d2, + 0x10df, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, + 0x000d, 0x0047, 0xffff, 0x1058, 0x106b, 0x1080, 0x108d, 0x1094, + 0x10a1, 0x10b2, 0x10b9, 0x10c2, 0x10cb, 0x10d2, 0x10df, 0x0003, + 0x05f0, 0x05ff, 0x060e, 0x000d, 0x0047, 0xffff, 0x1058, 0x106b, + 0x1080, 0x108d, 0x1094, 0x10a1, 0x10b2, 0x10b9, 0x10c2, 0x10cb, + // Entry 35D00 - 35D3F + 0x10d2, 0x10df, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, + 0x3a0c, 0x000d, 0x0047, 0xffff, 0x1058, 0x106b, 0x1080, 0x108d, + 0x1094, 0x10a1, 0x10b2, 0x10b9, 0x10c2, 0x10cb, 0x10d2, 0x10df, + 0x0003, 0x0626, 0x062b, 0x0621, 0x0001, 0x0623, 0x0001, 0x000e, + 0x1de1, 0x0001, 0x0628, 0x0001, 0x000e, 0x1de1, 0x0001, 0x062d, + 0x0001, 0x000e, 0x1de1, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0636, 0x0003, 0x0640, 0x0646, 0x063a, 0x0001, 0x063c, 0x0002, + // Entry 35D40 - 35D7F + 0x0047, 0x10ec, 0x10fc, 0x0001, 0x0642, 0x0002, 0x0047, 0x1109, + 0x10fc, 0x0001, 0x0648, 0x0002, 0x0047, 0x1109, 0x10fc, 0x0042, + 0x068f, 0x0694, 0x0699, 0x069e, 0x06b5, 0x06cc, 0x06e3, 0x06fa, + 0x070c, 0x071e, 0x0735, 0x074c, 0x0763, 0x077e, 0x0799, 0x07b4, + 0x07b9, 0x07be, 0x07c3, 0x07dc, 0x07f5, 0x080e, 0x0813, 0x0818, + 0x081d, 0x0822, 0x0827, 0x082c, 0x0831, 0x0836, 0x083b, 0x084f, + 0x0863, 0x0877, 0x088b, 0x089f, 0x08b3, 0x08c7, 0x08db, 0x08ef, + 0x0903, 0x0917, 0x092b, 0x093f, 0x0953, 0x0967, 0x097b, 0x098f, + // Entry 35D80 - 35DBF + 0x09a3, 0x09b7, 0x09cb, 0x09df, 0x09e4, 0x09e9, 0x09ee, 0x0a04, + 0x0a16, 0x0a28, 0x0a3e, 0x0a50, 0x0a62, 0x0a78, 0x0a8a, 0x0a9c, + 0x0aa1, 0x0aa6, 0x0001, 0x0691, 0x0001, 0x0009, 0x08c0, 0x0001, + 0x0696, 0x0001, 0x0009, 0x08c0, 0x0001, 0x069b, 0x0001, 0x0009, + 0x08c0, 0x0003, 0x06a2, 0x06a5, 0x06aa, 0x0001, 0x0009, 0x08c7, + 0x0003, 0x0047, 0x1116, 0x1134, 0x114a, 0x0002, 0x06ad, 0x06b1, + 0x0002, 0x000e, 0x1ffe, 0x1e6d, 0x0002, 0x0047, 0x1182, 0x1168, + 0x0003, 0x06b9, 0x06bc, 0x06c1, 0x0001, 0x0047, 0x119c, 0x0003, + // Entry 35DC0 - 35DFF + 0x0047, 0x1116, 0x1134, 0x114a, 0x0002, 0x06c4, 0x06c8, 0x0002, + 0x0047, 0x11a4, 0x11a4, 0x0002, 0x0047, 0x11b5, 0x11b5, 0x0003, + 0x06d0, 0x06d3, 0x06d8, 0x0001, 0x0047, 0x119c, 0x0003, 0x0047, + 0x1116, 0x1134, 0x114a, 0x0002, 0x06db, 0x06df, 0x0002, 0x0047, + 0x11a4, 0x11a4, 0x0002, 0x0047, 0x11b5, 0x11b5, 0x0003, 0x06e7, + 0x06ea, 0x06ef, 0x0001, 0x0047, 0x11ca, 0x0003, 0x0047, 0x11df, + 0x1209, 0x1225, 0x0002, 0x06f2, 0x06f6, 0x0002, 0x0047, 0x1269, + 0x124b, 0x0002, 0x0047, 0x12a9, 0x1287, 0x0003, 0x06fe, 0x0000, + // Entry 35E00 - 35E3F + 0x0701, 0x0001, 0x0047, 0x12cb, 0x0002, 0x0704, 0x0708, 0x0002, + 0x0047, 0x12d9, 0x12d9, 0x0002, 0x0047, 0x12f0, 0x12f0, 0x0003, + 0x0710, 0x0000, 0x0713, 0x0001, 0x0047, 0x12cb, 0x0002, 0x0716, + 0x071a, 0x0002, 0x0047, 0x12d9, 0x12d9, 0x0002, 0x0047, 0x12f0, + 0x12f0, 0x0003, 0x0722, 0x0725, 0x072a, 0x0001, 0x0009, 0x0bae, + 0x0003, 0x0047, 0x130b, 0x1327, 0x133b, 0x0002, 0x072d, 0x0731, + 0x0002, 0x000e, 0x1f45, 0x1f1b, 0x0002, 0x0047, 0x136f, 0x1357, + 0x0003, 0x0739, 0x073c, 0x0741, 0x0001, 0x0008, 0x0e09, 0x0003, + // Entry 35E40 - 35E7F + 0x0047, 0x130b, 0x1327, 0x133b, 0x0002, 0x0744, 0x0748, 0x0002, + 0x000e, 0x1f45, 0x1f1b, 0x0002, 0x0047, 0x136f, 0x1357, 0x0003, + 0x0750, 0x0753, 0x0758, 0x0001, 0x0008, 0x0e09, 0x0003, 0x0047, + 0x130b, 0x1327, 0x133b, 0x0002, 0x075b, 0x075f, 0x0002, 0x000e, + 0x1f45, 0x1f1b, 0x0002, 0x0047, 0x136f, 0x1357, 0x0004, 0x0768, + 0x076b, 0x0770, 0x077b, 0x0001, 0x0009, 0x0d00, 0x0003, 0x0047, + 0x1389, 0x13a9, 0x13c1, 0x0002, 0x0773, 0x0777, 0x0002, 0x0047, + 0x13f9, 0x13e1, 0x0002, 0x0047, 0x142d, 0x1411, 0x0001, 0x0047, + // Entry 35E80 - 35EBF + 0x1449, 0x0004, 0x0783, 0x0786, 0x078b, 0x0796, 0x0001, 0x0047, + 0x145c, 0x0003, 0x0047, 0x1389, 0x13a9, 0x13c1, 0x0002, 0x078e, + 0x0792, 0x0002, 0x0047, 0x13f9, 0x13e1, 0x0002, 0x0047, 0x142d, + 0x1411, 0x0001, 0x0047, 0x1449, 0x0004, 0x079e, 0x07a1, 0x07a6, + 0x07b1, 0x0001, 0x0047, 0x145c, 0x0003, 0x0047, 0x1389, 0x13a9, + 0x13c1, 0x0002, 0x07a9, 0x07ad, 0x0002, 0x0047, 0x13f9, 0x13e1, + 0x0002, 0x0047, 0x142d, 0x1411, 0x0001, 0x0047, 0x1449, 0x0001, + 0x07b6, 0x0001, 0x0047, 0x1464, 0x0001, 0x07bb, 0x0001, 0x0047, + // Entry 35EC0 - 35EFF + 0x1464, 0x0001, 0x07c0, 0x0001, 0x0047, 0x1464, 0x0003, 0x07c7, + 0x07ca, 0x07d1, 0x0001, 0x0009, 0x0eef, 0x0005, 0x0047, 0x1496, + 0x14a1, 0x14ac, 0x1487, 0x14b5, 0x0002, 0x07d4, 0x07d8, 0x0002, + 0x0047, 0x14d4, 0x14c4, 0x0002, 0x0047, 0x14fa, 0x14e6, 0x0003, + 0x07e0, 0x07e3, 0x07ea, 0x0001, 0x0009, 0x0eef, 0x0005, 0x0047, + 0x1496, 0x14a1, 0x14ac, 0x1487, 0x14b5, 0x0002, 0x07ed, 0x07f1, + 0x0002, 0x0047, 0x14d4, 0x14c4, 0x0002, 0x0047, 0x14fa, 0x14e6, + 0x0003, 0x07f9, 0x07fc, 0x0803, 0x0001, 0x0009, 0x0eef, 0x0005, + // Entry 35F00 - 35F3F + 0x0047, 0x1496, 0x14a1, 0x14ac, 0x1487, 0x14b5, 0x0002, 0x0806, + 0x080a, 0x0002, 0x0047, 0x14d4, 0x14c4, 0x0002, 0x0047, 0x14fa, + 0x14e6, 0x0001, 0x0810, 0x0001, 0x0047, 0x1510, 0x0001, 0x0815, + 0x0001, 0x0047, 0x152d, 0x0001, 0x081a, 0x0001, 0x0047, 0x152d, + 0x0001, 0x081f, 0x0001, 0x0047, 0x1541, 0x0001, 0x0824, 0x0001, + 0x0047, 0x155e, 0x0001, 0x0829, 0x0001, 0x0047, 0x155e, 0x0001, + 0x082e, 0x0001, 0x0047, 0x157b, 0x0001, 0x0833, 0x0001, 0x0047, + 0x1596, 0x0001, 0x0838, 0x0001, 0x0047, 0x1596, 0x0003, 0x0000, + // Entry 35F40 - 35F7F + 0x083f, 0x0844, 0x0003, 0x0047, 0x15aa, 0x15c8, 0x15de, 0x0002, + 0x0847, 0x084b, 0x0002, 0x0047, 0x1612, 0x15fc, 0x0002, 0x0047, + 0x1642, 0x1628, 0x0003, 0x0000, 0x0853, 0x0858, 0x0003, 0x0047, + 0x165c, 0x1675, 0x1686, 0x0002, 0x085b, 0x085f, 0x0002, 0x0047, + 0x169f, 0x169f, 0x0002, 0x0047, 0x16b0, 0x16b0, 0x0003, 0x0000, + 0x0867, 0x086c, 0x0003, 0x0047, 0x165c, 0x1675, 0x1686, 0x0002, + 0x086f, 0x0873, 0x0002, 0x0047, 0x169f, 0x169f, 0x0002, 0x0047, + 0x16b0, 0x16b0, 0x0003, 0x0000, 0x087b, 0x0880, 0x0003, 0x0047, + // Entry 35F80 - 35FBF + 0x16c5, 0x16eb, 0x1709, 0x0002, 0x0883, 0x0887, 0x0002, 0x0047, + 0x174d, 0x172f, 0x0002, 0x0047, 0x178f, 0x176d, 0x0003, 0x0000, + 0x088f, 0x0894, 0x0003, 0x0047, 0x17b3, 0x17cc, 0x17dd, 0x0002, + 0x0897, 0x089b, 0x0002, 0x0047, 0x17f6, 0x17f6, 0x0002, 0x0047, + 0x1807, 0x1807, 0x0003, 0x0000, 0x08a3, 0x08a8, 0x0003, 0x0047, + 0x17b3, 0x17cc, 0x17dd, 0x0002, 0x08ab, 0x08af, 0x0002, 0x0047, + 0x17f6, 0x17f6, 0x0002, 0x0047, 0x1807, 0x1807, 0x0003, 0x0000, + 0x08b7, 0x08bc, 0x0003, 0x0047, 0x181c, 0x183c, 0x1854, 0x0002, + // Entry 35FC0 - 35FFF + 0x08bf, 0x08c3, 0x0002, 0x0047, 0x188c, 0x1874, 0x0002, 0x0047, + 0x18c2, 0x18a6, 0x0003, 0x0000, 0x08cb, 0x08d0, 0x0003, 0x0047, + 0x18e0, 0x18f9, 0x190a, 0x0002, 0x08d3, 0x08d7, 0x0002, 0x0047, + 0x1923, 0x1923, 0x0002, 0x0047, 0x1934, 0x1934, 0x0003, 0x0000, + 0x08df, 0x08e4, 0x0003, 0x0047, 0x18e0, 0x18f9, 0x190a, 0x0002, + 0x08e7, 0x08eb, 0x0002, 0x0047, 0x1923, 0x1923, 0x0002, 0x0047, + 0x1934, 0x1934, 0x0003, 0x0000, 0x08f3, 0x08f8, 0x0003, 0x0047, + 0x1949, 0x1965, 0x1979, 0x0002, 0x08fb, 0x08ff, 0x0002, 0x0047, + // Entry 36000 - 3603F + 0x19a9, 0x1995, 0x0002, 0x0047, 0x19d5, 0x19bd, 0x0003, 0x0000, + 0x0907, 0x090c, 0x0003, 0x0047, 0x19ed, 0x1a06, 0x1a17, 0x0002, + 0x090f, 0x0913, 0x0002, 0x0047, 0x1a30, 0x1a30, 0x0002, 0x0047, + 0x1a41, 0x1a41, 0x0003, 0x0000, 0x091b, 0x0920, 0x0003, 0x0047, + 0x19ed, 0x1a06, 0x1a17, 0x0002, 0x0923, 0x0927, 0x0002, 0x0047, + 0x1a30, 0x1a30, 0x0002, 0x0047, 0x1a41, 0x1a41, 0x0003, 0x0000, + 0x092f, 0x0934, 0x0003, 0x0047, 0x1a56, 0x1a78, 0x1a92, 0x0002, + 0x0937, 0x093b, 0x0002, 0x0047, 0x1ace, 0x1ab4, 0x0002, 0x0047, + // Entry 36040 - 3607F + 0x1b08, 0x1aea, 0x0003, 0x0000, 0x0943, 0x0948, 0x0003, 0x0047, + 0x1b28, 0x1b41, 0x1b52, 0x0002, 0x094b, 0x094f, 0x0002, 0x0047, + 0x1b6b, 0x1b6b, 0x0002, 0x0047, 0x1b7c, 0x1b7c, 0x0003, 0x0000, + 0x0957, 0x095c, 0x0003, 0x0047, 0x1b28, 0x1b41, 0x1b52, 0x0002, + 0x095f, 0x0963, 0x0002, 0x0047, 0x1b6b, 0x1b6b, 0x0002, 0x0047, + 0x1b7c, 0x1b7c, 0x0003, 0x0000, 0x096b, 0x0970, 0x0003, 0x0047, + 0x1b91, 0x1bad, 0x1bc1, 0x0002, 0x0973, 0x0977, 0x0002, 0x0047, + 0x1bf1, 0x1bdd, 0x0002, 0x0047, 0x1c1f, 0x1c07, 0x0003, 0x0000, + // Entry 36080 - 360BF + 0x097f, 0x0984, 0x0003, 0x0047, 0x1c39, 0x1c52, 0x1c63, 0x0002, + 0x0987, 0x098b, 0x0002, 0x0047, 0x1c7c, 0x1c7c, 0x0002, 0x0047, + 0x1c8d, 0x1c8d, 0x0003, 0x0000, 0x0993, 0x0998, 0x0003, 0x0047, + 0x1c39, 0x1c52, 0x1c63, 0x0002, 0x099b, 0x099f, 0x0002, 0x0047, + 0x1c7c, 0x1c7c, 0x0002, 0x0047, 0x1c8d, 0x1c8d, 0x0003, 0x0000, + 0x09a7, 0x09ac, 0x0003, 0x0047, 0x1ca2, 0x1cc0, 0x1cd6, 0x0002, + 0x09af, 0x09b3, 0x0002, 0x0047, 0x1d0a, 0x1cf4, 0x0002, 0x0047, + 0x1d3a, 0x1d20, 0x0003, 0x0000, 0x09bb, 0x09c0, 0x0003, 0x0047, + // Entry 360C0 - 360FF + 0x1d54, 0x1d6d, 0x1d7e, 0x0002, 0x09c3, 0x09c7, 0x0002, 0x0047, + 0x1d97, 0x1d97, 0x0002, 0x0047, 0x1da8, 0x1da8, 0x0003, 0x0000, + 0x09cf, 0x09d4, 0x0003, 0x0047, 0x1d54, 0x1d6d, 0x1d7e, 0x0002, + 0x09d7, 0x09db, 0x0002, 0x0047, 0x1d97, 0x1d97, 0x0002, 0x0047, + 0x1da8, 0x1da8, 0x0001, 0x09e1, 0x0001, 0x0047, 0x1dbd, 0x0001, + 0x09e6, 0x0001, 0x0047, 0x1dbd, 0x0001, 0x09eb, 0x0001, 0x0047, + 0x1dbd, 0x0003, 0x09f2, 0x09f5, 0x09f9, 0x0001, 0x0009, 0x1ad5, + 0x0002, 0x0047, 0xffff, 0x1de3, 0x0002, 0x09fc, 0x0a00, 0x0002, + // Entry 36100 - 3613F + 0x0047, 0x1dfe, 0x1dee, 0x0002, 0x0047, 0x1e24, 0x1e10, 0x0003, + 0x0a08, 0x0000, 0x0a0b, 0x0001, 0x0047, 0x1e3a, 0x0002, 0x0a0e, + 0x0a12, 0x0002, 0x0047, 0x1dfe, 0x1dee, 0x0002, 0x0047, 0x1e24, + 0x1e10, 0x0003, 0x0a1a, 0x0000, 0x0a1d, 0x0001, 0x0047, 0x1e3a, + 0x0002, 0x0a20, 0x0a24, 0x0002, 0x0047, 0x1dfe, 0x1dee, 0x0002, + 0x0047, 0x1e24, 0x1e10, 0x0003, 0x0a2c, 0x0a2f, 0x0a33, 0x0001, + 0x0009, 0x1b83, 0x0002, 0x0047, 0xffff, 0x1e3e, 0x0002, 0x0a36, + 0x0a3a, 0x0002, 0x000f, 0x3be9, 0x01e3, 0x0002, 0x0047, 0x1e6e, + // Entry 36140 - 3617F + 0x1e54, 0x0003, 0x0a42, 0x0000, 0x0a45, 0x0001, 0x0012, 0x0dff, + 0x0002, 0x0a48, 0x0a4c, 0x0002, 0x0047, 0x1e88, 0x1e88, 0x0002, + 0x0047, 0x1e99, 0x1e99, 0x0003, 0x0a54, 0x0000, 0x0a57, 0x0001, + 0x0012, 0x0dff, 0x0002, 0x0a5a, 0x0a5e, 0x0002, 0x0047, 0x1e88, + 0x1e88, 0x0002, 0x0047, 0x1e99, 0x1e99, 0x0003, 0x0a66, 0x0a69, + 0x0a6d, 0x0001, 0x0008, 0x1cca, 0x0002, 0x0009, 0xffff, 0x1c68, + 0x0002, 0x0a70, 0x0a74, 0x0002, 0x0047, 0x1ec6, 0x1eae, 0x0002, + 0x0047, 0x1efa, 0x1ede, 0x0003, 0x0a7c, 0x0000, 0x0a7f, 0x0001, + // Entry 36180 - 361BF + 0x0012, 0x0e71, 0x0002, 0x0a82, 0x0a86, 0x0002, 0x0047, 0x1f16, + 0x1f16, 0x0002, 0x0047, 0x1f27, 0x1f27, 0x0003, 0x0a8e, 0x0000, + 0x0a91, 0x0001, 0x0012, 0x0e71, 0x0002, 0x0a94, 0x0a98, 0x0002, + 0x0047, 0x1f16, 0x1f16, 0x0002, 0x0047, 0x1f27, 0x1f27, 0x0001, + 0x0a9e, 0x0001, 0x0047, 0x1f3c, 0x0001, 0x0aa3, 0x0001, 0x000f, + 0x02c6, 0x0001, 0x0aa8, 0x0001, 0x000f, 0x02c6, 0x0004, 0x0ab0, + 0x0ab5, 0x0aba, 0x0ac9, 0x0003, 0x0000, 0x1dc7, 0x39fb, 0x3a02, + 0x0003, 0x0047, 0x1f58, 0x1f6c, 0x1f75, 0x0002, 0x0000, 0x0abd, + // Entry 361C0 - 361FF + 0x0003, 0x0000, 0x0ac4, 0x0ac1, 0x0001, 0x0047, 0x1f7e, 0x0003, + 0x0047, 0xffff, 0x1fb9, 0x1fe2, 0x0002, 0x0c9b, 0x0acc, 0x0003, + 0x0ad0, 0x0c02, 0x0b69, 0x0097, 0x000f, 0xffff, 0xffff, 0xffff, + 0xffff, 0x3cc0, 0x3d31, 0x3d84, 0x3dd3, 0x06a0, 0x0723, 0x07b2, + 0x3e6a, 0x3ebb, 0x3f06, 0x3f4f, 0x3faa, 0x4023, 0x407a, 0x40cb, + 0x4150, 0x41f9, 0x4276, 0x42f3, 0x4352, 0x43cb, 0xffff, 0xffff, + 0x4462, 0xffff, 0x44ed, 0xffff, 0x4567, 0x45b2, 0x45f9, 0x4640, + 0xffff, 0xffff, 0x46ff, 0x475a, 0x47c3, 0xffff, 0xffff, 0xffff, + // Entry 36200 - 3623F + 0x4879, 0xffff, 0x491d, 0x192d, 0xffff, 0x19e0, 0x49aa, 0x4a33, + 0xffff, 0xffff, 0xffff, 0xffff, 0x4aea, 0xffff, 0xffff, 0x4b99, + 0x4c0e, 0xffff, 0xffff, 0x4cd8, 0x4d67, 0x4dc0, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x4f0f, 0x4f56, 0x4fa9, 0x4ff8, + 0xffff, 0xffff, 0xffff, 0x50b3, 0xffff, 0x511d, 0xffff, 0xffff, + 0x51d1, 0xffff, 0x5256, 0xffff, 0xffff, 0xffff, 0xffff, 0x533c, + 0xffff, 0x53b2, 0x543b, 0x54b4, 0x5511, 0xffff, 0xffff, 0xffff, + 0x55b5, 0x5626, 0x5683, 0xffff, 0xffff, 0x5731, 0x57ac, 0x580f, + // Entry 36240 - 3627F + 0x5856, 0xffff, 0xffff, 0x58fb, 0x5952, 0x5999, 0xffff, 0x5a20, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x5b3f, 0x33a0, 0x5b92, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x5cd8, + 0xffff, 0xffff, 0x5d6b, 0xffff, 0x5dcf, 0xffff, 0x5e53, 0x5ea6, + 0x5f05, 0xffff, 0x5f7b, 0x5fde, 0xffff, 0xffff, 0xffff, 0x60ab, + 0x60fe, 0xffff, 0xffff, 0x02ed, 0x0097, 0x000f, 0x3bff, 0x3c24, + 0x3c50, 0x3c7e, 0x3cee, 0x3d50, 0x3da1, 0x3e14, 0x06ba, 0x0741, + 0x07d0, 0x3e88, 0x3ed6, 0x3f20, 0x3f72, 0x3fdc, 0x4044, 0x4098, + // Entry 36280 - 362BF + 0x4103, 0x419a, 0x422d, 0x42aa, 0x4318, 0x4384, 0x43ee, 0x4426, + 0x4441, 0x4485, 0x44bd, 0x4511, 0x454a, 0x4582, 0x45cb, 0x4612, + 0x4663, 0x469b, 0x46cb, 0x4722, 0x4784, 0x47dc, 0x480a, 0x4827, + 0x484f, 0x48b1, 0x48fe, 0x4945, 0x1957, 0x4982, 0x1a0a, 0x49e4, + 0x4a4c, 0x4a7a, 0x1bf3, 0x4aac, 0x4acf, 0x4b09, 0x4b3d, 0x4b6f, + 0x4bc9, 0x4c3e, 0x4c83, 0x4cb9, 0x4d15, 0x4d89, 0x4dd9, 0x4e07, + 0x4e24, 0x4e4e, 0x4e6f, 0x4ea7, 0x4edb, 0x4f28, 0x4f75, 0x4fc6, + 0x5019, 0xffff, 0x504f, 0x5081, 0x50d0, 0x5102, 0x5144, 0x5180, + // Entry 362C0 - 362FF + 0x51a3, 0x51f1, 0x5226, 0x5275, 0x52a9, 0x52ca, 0x52e9, 0x530a, + 0x535f, 0x5397, 0x53ec, 0x546d, 0x54d8, 0x552e, 0x5560, 0x557f, + 0x559a, 0x55e3, 0x564a, 0x56aa, 0x56e6, 0x56ff, 0x5764, 0x57d3, + 0x5828, 0x5877, 0x58ad, 0x58c8, 0x591c, 0x596b, 0x59ba, 0x59f0, + 0x5a59, 0x5aa2, 0x5ac1, 0x5ade, 0x5b01, 0x5b22, 0x5b5e, 0x33b8, + 0x5bad, 0x5bdd, 0x5bfc, 0x5c1d, 0x5c55, 0x5c7f, 0x5c9e, 0x5cbb, + 0x5cf5, 0x5d27, 0x5d4c, 0x5d86, 0x5db6, 0x5df8, 0x5e36, 0x5e72, + 0x5ecb, 0x5f24, 0x5f58, 0x5fa2, 0x6001, 0x6039, 0x6056, 0x6080, + // Entry 36300 - 3633F + 0x60ca, 0x6127, 0xffff, 0xffff, 0x0301, 0x0097, 0x0048, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0037, 0x0088, 0x00ca, 0x010a, 0x014b, + 0x0188, 0x01c9, 0x020a, 0x0233, 0x0259, 0x0296, 0x02dc, 0x0331, + 0x035d, 0x039e, 0x03f9, 0x0466, 0x04bd, 0x0514, 0x0544, 0x0581, + 0xffff, 0xffff, 0x05af, 0xffff, 0x05f5, 0xffff, 0x063c, 0x067a, + 0x06b6, 0x06f2, 0xffff, 0xffff, 0x0720, 0x0766, 0x079b, 0xffff, + 0xffff, 0xffff, 0x07d7, 0xffff, 0x081a, 0x084d, 0xffff, 0x0882, + 0x08b7, 0x0914, 0xffff, 0xffff, 0xffff, 0xffff, 0x0938, 0xffff, + // Entry 36340 - 3637F + 0xffff, 0x0962, 0x09b5, 0xffff, 0xffff, 0x0a08, 0x0a68, 0x0a95, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0ab9, 0x0af5, + 0x0b1f, 0x0b5f, 0xffff, 0xffff, 0xffff, 0x0ba3, 0xffff, 0x0be3, + 0xffff, 0xffff, 0x0c15, 0xffff, 0x0c58, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0c82, 0xffff, 0x0cc8, 0x0d25, 0x0d62, 0x0d91, 0xffff, + 0xffff, 0xffff, 0x0dd1, 0x0e0a, 0x0e51, 0xffff, 0xffff, 0x0e9b, + 0x0ef1, 0x0f23, 0x0f47, 0xffff, 0xffff, 0x0f73, 0x0fb7, 0x0ff3, + 0xffff, 0x101f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1076, + // Entry 36380 - 363BF + 0x10a0, 0x10db, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1101, 0xffff, 0xffff, 0x1141, 0xffff, 0x1167, 0xffff, + 0x119b, 0x11dd, 0x120d, 0xffff, 0x1237, 0x1269, 0xffff, 0xffff, + 0xffff, 0x12af, 0x12d9, 0xffff, 0xffff, 0x0000, 0x0003, 0x0c9f, + 0x0d05, 0x0cd2, 0x0031, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 363C0 - 363FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x24ae, 0x24b7, 0xffff, 0x2512, 0x0031, 0x0007, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 36400 - 3643F + 0xffff, 0xffff, 0xffff, 0xffff, 0x24ae, 0x24b7, 0xffff, 0x2512, + 0x0031, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x24b2, + 0x24bb, 0xffff, 0x24c4, 0x0003, 0x0004, 0x05f4, 0x0a53, 0x0012, + // Entry 36440 - 3647F + 0x0017, 0x0000, 0x0030, 0x0000, 0x00b7, 0x0000, 0x013e, 0x0169, + 0x03da, 0x045e, 0x04dc, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x055a, 0x05d8, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x001d, + 0x0003, 0x0026, 0x002b, 0x0021, 0x0001, 0x0023, 0x0001, 0x0000, + 0x0000, 0x0001, 0x0028, 0x0001, 0x0000, 0x0000, 0x0001, 0x002d, + 0x0001, 0x0000, 0x0000, 0x0005, 0x0036, 0x0000, 0x0000, 0x0000, + 0x00a1, 0x0002, 0x0039, 0x006d, 0x0003, 0x003d, 0x004d, 0x005d, + 0x000e, 0x0048, 0xffff, 0x130d, 0x1320, 0x132a, 0x133d, 0x1356, + // Entry 36480 - 364BF + 0x1360, 0x1370, 0x138f, 0x13a2, 0x13b5, 0x13c2, 0x13d2, 0x13e2, + 0x000e, 0x0048, 0xffff, 0x13ec, 0x13f4, 0x13fc, 0x1404, 0x140c, + 0x1414, 0x13f4, 0x13f4, 0x13f4, 0x141c, 0x1421, 0x1426, 0x142e, + 0x000e, 0x0048, 0xffff, 0x130d, 0x1320, 0x132a, 0x133d, 0x1356, + 0x1360, 0x1370, 0x138f, 0x13a2, 0x13b5, 0x13c2, 0x13d2, 0x13e2, + 0x0003, 0x0071, 0x0081, 0x0091, 0x000e, 0x0048, 0xffff, 0x130d, + 0x1320, 0x132a, 0x133d, 0x1356, 0x1360, 0x1370, 0x138f, 0x13a2, + 0x13b5, 0x13c2, 0x13d2, 0x13e2, 0x000e, 0x0048, 0xffff, 0x13ec, + // Entry 364C0 - 364FF + 0x13f4, 0x13fc, 0x1404, 0x140c, 0x1414, 0x13f4, 0x13f4, 0x13f4, + 0x141c, 0x1421, 0x1426, 0x142e, 0x000e, 0x0048, 0xffff, 0x130d, + 0x1320, 0x132a, 0x133d, 0x1356, 0x1360, 0x1370, 0x138f, 0x13a2, + 0x13b5, 0x13c2, 0x13d2, 0x13e2, 0x0003, 0x00ab, 0x00b1, 0x00a5, + 0x0001, 0x00a7, 0x0002, 0x0048, 0x1433, 0x144d, 0x0001, 0x00ad, + 0x0002, 0x0048, 0x1433, 0x144d, 0x0001, 0x00b3, 0x0002, 0x0048, + 0x1433, 0x144d, 0x0005, 0x00bd, 0x0000, 0x0000, 0x0000, 0x0128, + 0x0002, 0x00c0, 0x00f4, 0x0003, 0x00c4, 0x00d4, 0x00e4, 0x000e, + // Entry 36500 - 3653F + 0x0048, 0xffff, 0x1467, 0x1486, 0x14a8, 0x14b5, 0x14ce, 0x14d8, + 0x1503, 0x1522, 0x1538, 0x1554, 0x1561, 0x1571, 0x1584, 0x000e, + 0x0048, 0xffff, 0x1426, 0x159a, 0x15a2, 0x15aa, 0x159a, 0x15af, + 0x1426, 0x15b7, 0x15bf, 0x15c7, 0x15cf, 0x15d9, 0x15e1, 0x000e, + 0x0048, 0xffff, 0x1467, 0x1486, 0x14a8, 0x14b5, 0x14ce, 0x14d8, + 0x1503, 0x1522, 0x1538, 0x1554, 0x1561, 0x1571, 0x1584, 0x0003, + 0x00f8, 0x0108, 0x0118, 0x000e, 0x0048, 0xffff, 0x1467, 0x1486, + 0x14a8, 0x14b5, 0x14ce, 0x14d8, 0x1503, 0x1522, 0x1538, 0x1554, + // Entry 36540 - 3657F + 0x1561, 0x1571, 0x1584, 0x000e, 0x0048, 0xffff, 0x1426, 0x159a, + 0x15a2, 0x15aa, 0x159a, 0x15af, 0x1426, 0x15b7, 0x15bf, 0x15c7, + 0x15cf, 0x15d9, 0x15e1, 0x000e, 0x0048, 0xffff, 0x1467, 0x1486, + 0x14a8, 0x14b5, 0x14ce, 0x14d8, 0x1503, 0x1522, 0x1538, 0x1554, + 0x1561, 0x1571, 0x1584, 0x0003, 0x0132, 0x0138, 0x012c, 0x0001, + 0x012e, 0x0002, 0x0048, 0x1433, 0x144d, 0x0001, 0x0134, 0x0002, + 0x0048, 0x1433, 0x144d, 0x0001, 0x013a, 0x0002, 0x0048, 0x1433, + 0x144d, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0147, + // Entry 36580 - 365BF + 0x0000, 0x0158, 0x0004, 0x0155, 0x014f, 0x014c, 0x0152, 0x0001, + 0x0048, 0x15e9, 0x0001, 0x0048, 0x15fb, 0x0001, 0x0048, 0x1607, + 0x0001, 0x0000, 0x04af, 0x0004, 0x0166, 0x0160, 0x015d, 0x0163, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x0172, 0x01d7, 0x022e, + 0x0263, 0x0382, 0x03a7, 0x03b8, 0x03c9, 0x0002, 0x0175, 0x01a6, + 0x0003, 0x0179, 0x0188, 0x0197, 0x000d, 0x0048, 0xffff, 0x1612, + 0x161c, 0x162f, 0x1639, 0x1649, 0x1656, 0x1660, 0x166d, 0x1674, + // Entry 365C0 - 365FF + 0x168d, 0x169d, 0x16a7, 0x000d, 0x0048, 0xffff, 0x16b4, 0x16b8, + 0x16bf, 0x16c6, 0x16ca, 0x1656, 0x16d1, 0x16d8, 0x16dc, 0x16e3, + 0x16e7, 0x16eb, 0x000d, 0x0048, 0xffff, 0x16f2, 0x1705, 0x1721, + 0x1737, 0x1649, 0x1656, 0x1660, 0x174a, 0x1763, 0x1782, 0x179b, + 0x17ab, 0x0003, 0x01aa, 0x01b9, 0x01c8, 0x000d, 0x0048, 0xffff, + 0x1612, 0x161c, 0x162f, 0x1639, 0x1649, 0x1656, 0x1660, 0x166d, + 0x1674, 0x168d, 0x169d, 0x16a7, 0x000d, 0x0048, 0xffff, 0x16b4, + 0x16b8, 0x16bf, 0x16c6, 0x16ca, 0x1656, 0x16d1, 0x16d8, 0x16dc, + // Entry 36600 - 3663F + 0x16e3, 0x16e7, 0x16eb, 0x000d, 0x0048, 0xffff, 0x16f2, 0x1705, + 0x1721, 0x1737, 0x1649, 0x1656, 0x1660, 0x174a, 0x1763, 0x1782, + 0x179b, 0x17ab, 0x0002, 0x01da, 0x0204, 0x0005, 0x01e0, 0x01e9, + 0x01fb, 0x0000, 0x01f2, 0x0007, 0x0048, 0x17be, 0x17cb, 0x17de, + 0x17ee, 0x17fb, 0x180e, 0x1821, 0x0007, 0x0048, 0x182b, 0x182f, + 0x1836, 0x183d, 0x1844, 0x1851, 0x1858, 0x0007, 0x0048, 0x185c, + 0x182f, 0x1836, 0x183d, 0x1844, 0x1851, 0x1858, 0x0007, 0x0048, + 0x1863, 0x187f, 0x18a1, 0x18bd, 0x18d9, 0x18f8, 0x191d, 0x0005, + // Entry 36640 - 3667F + 0x020a, 0x0213, 0x0225, 0x0000, 0x021c, 0x0007, 0x0048, 0x17be, + 0x17cb, 0x17de, 0x17ee, 0x17fb, 0x180e, 0x1821, 0x0007, 0x0048, + 0x185c, 0x182f, 0x1836, 0x183d, 0x1844, 0x1851, 0x1858, 0x0007, + 0x0048, 0x185c, 0x182f, 0x1836, 0x183d, 0x1844, 0x1851, 0x1858, + 0x0007, 0x0048, 0x1863, 0x187f, 0x1939, 0x18bd, 0x18d9, 0x18f8, + 0x191d, 0x0002, 0x0231, 0x024a, 0x0003, 0x0235, 0x023c, 0x0243, + 0x0005, 0x0048, 0xffff, 0x1958, 0x1978, 0x1998, 0x19bb, 0x0005, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0048, + // Entry 36680 - 366BF + 0xffff, 0x1958, 0x1978, 0x1998, 0x19bb, 0x0003, 0x024e, 0x0255, + 0x025c, 0x0005, 0x0048, 0xffff, 0x1958, 0x1978, 0x1998, 0x19bb, + 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, + 0x0048, 0xffff, 0x1958, 0x1978, 0x1998, 0x19bb, 0x0002, 0x0266, + 0x02f4, 0x0003, 0x026a, 0x0298, 0x02c6, 0x000c, 0x027a, 0x0280, + 0x0277, 0x0283, 0x0289, 0x028f, 0x0295, 0x027d, 0x0286, 0x028c, + 0x0000, 0x0292, 0x0001, 0x0048, 0x19d8, 0x0001, 0x0000, 0x04ef, + 0x0001, 0x0048, 0x19fa, 0x0001, 0x0000, 0x04f2, 0x0001, 0x0048, + // Entry 366C0 - 366FF + 0x1a07, 0x0001, 0x0048, 0x1a20, 0x0001, 0x0048, 0x1a33, 0x0001, + 0x0048, 0x1a52, 0x0001, 0x0048, 0x1a77, 0x0001, 0x0048, 0x1a96, + 0x0001, 0x0048, 0x1aa9, 0x000c, 0x02a8, 0x02ae, 0x02a5, 0x02b1, + 0x02b7, 0x02bd, 0x02c3, 0x02ab, 0x02b4, 0x02ba, 0x0000, 0x02c0, + 0x0001, 0x0048, 0x1abc, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0048, + 0x19fa, 0x0001, 0x0000, 0x04f2, 0x0001, 0x0048, 0x1a07, 0x0001, + 0x0048, 0x1a20, 0x0001, 0x0048, 0x1a33, 0x0001, 0x0048, 0x1a52, + 0x0001, 0x0048, 0x1a77, 0x0001, 0x0048, 0x1a96, 0x0001, 0x0048, + // Entry 36700 - 3673F + 0x1aa9, 0x000c, 0x02d6, 0x02dc, 0x02d3, 0x02df, 0x02e5, 0x02eb, + 0x02f1, 0x02d9, 0x02e2, 0x02e8, 0x0000, 0x02ee, 0x0001, 0x0048, + 0x19d8, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0048, 0x19fa, 0x0001, + 0x0000, 0x04f2, 0x0001, 0x0048, 0x1a07, 0x0001, 0x0048, 0x1a20, + 0x0001, 0x0048, 0x1a33, 0x0001, 0x0048, 0x1a52, 0x0001, 0x0048, + 0x1a77, 0x0001, 0x0048, 0x1a96, 0x0001, 0x0048, 0x1aa9, 0x0003, + 0x02f8, 0x0326, 0x0354, 0x000c, 0x0308, 0x030e, 0x0305, 0x0311, + 0x0317, 0x031d, 0x0323, 0x030b, 0x0314, 0x031a, 0x0000, 0x0320, + // Entry 36740 - 3677F + 0x0001, 0x0048, 0x19d8, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0048, + 0x19fa, 0x0001, 0x0000, 0x04f2, 0x0001, 0x0048, 0x1a07, 0x0001, + 0x0048, 0x1a20, 0x0001, 0x0048, 0x1a33, 0x0001, 0x0048, 0x1a52, + 0x0001, 0x0048, 0x1a77, 0x0001, 0x0048, 0x1a96, 0x0001, 0x0048, + 0x1aa9, 0x000c, 0x0336, 0x033c, 0x0333, 0x033f, 0x0345, 0x034b, + 0x0351, 0x0339, 0x0342, 0x0348, 0x0000, 0x034e, 0x0001, 0x0048, + 0x19d8, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0048, 0x19fa, 0x0001, + 0x0000, 0x04f2, 0x0001, 0x0048, 0x1a07, 0x0001, 0x0048, 0x1a20, + // Entry 36780 - 367BF + 0x0001, 0x0048, 0x1a33, 0x0001, 0x0048, 0x1a52, 0x0001, 0x0048, + 0x1a77, 0x0001, 0x0048, 0x1a96, 0x0001, 0x0048, 0x1aa9, 0x000c, + 0x0364, 0x036a, 0x0361, 0x036d, 0x0373, 0x0379, 0x037f, 0x0367, + 0x0370, 0x0376, 0x0000, 0x037c, 0x0001, 0x0048, 0x19d8, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x0048, 0x19fa, 0x0001, 0x0000, 0x04f2, + 0x0001, 0x0048, 0x1a07, 0x0001, 0x0048, 0x1a20, 0x0001, 0x0048, + 0x1a33, 0x0001, 0x0048, 0x1a52, 0x0001, 0x0048, 0x1a77, 0x0001, + 0x0048, 0x1a96, 0x0001, 0x0048, 0x1aa9, 0x0003, 0x0391, 0x039c, + // Entry 367C0 - 367FF + 0x0386, 0x0002, 0x0389, 0x038d, 0x0002, 0x0048, 0x1ac0, 0x1b0e, + 0x0002, 0x0048, 0x1afb, 0x1b31, 0x0002, 0x0394, 0x0398, 0x0002, + 0x0048, 0x1b3d, 0x1b62, 0x0002, 0x0048, 0x1b52, 0x1b6c, 0x0002, + 0x039f, 0x03a3, 0x0002, 0x0048, 0x1b3d, 0x1b62, 0x0002, 0x0048, + 0x1b52, 0x1b6c, 0x0004, 0x03b5, 0x03af, 0x03ac, 0x03b2, 0x0001, + 0x0048, 0x1b76, 0x0001, 0x0048, 0x1b86, 0x0001, 0x0048, 0x1b90, + 0x0001, 0x0000, 0x2418, 0x0004, 0x03c6, 0x03c0, 0x03bd, 0x03c3, + 0x0001, 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, 0x0002, + // Entry 36800 - 3683F + 0x04fe, 0x0001, 0x0002, 0x0508, 0x0004, 0x03d7, 0x03d1, 0x03ce, + 0x03d4, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0005, 0x03e0, 0x0000, + 0x0000, 0x0000, 0x044b, 0x0002, 0x03e3, 0x0417, 0x0003, 0x03e7, + 0x03f7, 0x0407, 0x000e, 0x0048, 0x1c2c, 0x1b99, 0x1bac, 0x1bc2, + 0x1bde, 0x1bf7, 0x1c10, 0x1c1f, 0x1c3c, 0x1c4c, 0x1c59, 0x1c69, + 0x1c7c, 0x1c86, 0x000e, 0x0048, 0x1cbe, 0x1c93, 0x1c9b, 0x1404, + 0x1ca3, 0x1cab, 0x1cb3, 0x1cb9, 0x1cc5, 0x1ccd, 0x1cd2, 0x1cda, + // Entry 36840 - 3687F + 0x1cb9, 0x1ce2, 0x000e, 0x0048, 0x1c2c, 0x1b99, 0x1bac, 0x1bc2, + 0x1bde, 0x1bf7, 0x1c10, 0x1c1f, 0x1c3c, 0x1c4c, 0x1c59, 0x1c69, + 0x1c7c, 0x1c86, 0x0003, 0x041b, 0x042b, 0x043b, 0x000e, 0x0048, + 0x1c2c, 0x1b99, 0x1bac, 0x1bc2, 0x1bde, 0x1bf7, 0x1c10, 0x1c1f, + 0x1c3c, 0x1c4c, 0x1c59, 0x1c69, 0x1c7c, 0x1c86, 0x000e, 0x0048, + 0x1cbe, 0x1c93, 0x1c9b, 0x1404, 0x1ca3, 0x1cab, 0x1cb3, 0x1cb9, + 0x1cc5, 0x1ccd, 0x1cd2, 0x1cda, 0x1cb9, 0x1ce2, 0x000e, 0x0048, + 0x1c2c, 0x1b99, 0x1bac, 0x1bc2, 0x1bde, 0x1bf7, 0x1c10, 0x1c1f, + // Entry 36880 - 368BF + 0x1c3c, 0x1c4c, 0x1c59, 0x1c69, 0x1c7c, 0x1c86, 0x0003, 0x0454, + 0x0459, 0x044f, 0x0001, 0x0451, 0x0001, 0x0000, 0x04ef, 0x0001, + 0x0456, 0x0001, 0x0000, 0x04ef, 0x0001, 0x045b, 0x0001, 0x0000, + 0x04ef, 0x0005, 0x0464, 0x0000, 0x0000, 0x0000, 0x04c9, 0x0002, + 0x0467, 0x0498, 0x0003, 0x046b, 0x047a, 0x0489, 0x000d, 0x0048, + 0xffff, 0x1ce7, 0x1cfa, 0x1d0d, 0x1d26, 0x1d36, 0x1d4c, 0x1d68, + 0x1d7e, 0x1d9a, 0x1db6, 0x1dc3, 0x1dd0, 0x000d, 0x0048, 0xffff, + 0x1de3, 0x1dea, 0x1df1, 0x1dfe, 0x1e02, 0x1e0f, 0x1dfe, 0x1e16, + // Entry 368C0 - 368FF + 0x16bf, 0x1e1d, 0x16bf, 0x1e24, 0x000d, 0x0048, 0xffff, 0x1ce7, + 0x1cfa, 0x1d0d, 0x1d26, 0x1d36, 0x1d4c, 0x1d68, 0x1d7e, 0x1d9a, + 0x1db6, 0x1dc3, 0x1dd0, 0x0003, 0x049c, 0x04ab, 0x04ba, 0x000d, + 0x0048, 0xffff, 0x1ce7, 0x1cfa, 0x1d0d, 0x1d26, 0x1d36, 0x1d4c, + 0x1d68, 0x1d7e, 0x1d9a, 0x1db6, 0x1dc3, 0x1dd0, 0x000d, 0x0048, + 0xffff, 0x1de3, 0x1dea, 0x1df1, 0x1dfe, 0x1e02, 0x1e0f, 0x1dfe, + 0x1e16, 0x16bf, 0x1e1d, 0x16bf, 0x1e24, 0x000d, 0x0048, 0xffff, + 0x1ce7, 0x1cfa, 0x1d0d, 0x1d26, 0x1d36, 0x1d4c, 0x1d68, 0x1d7e, + // Entry 36900 - 3693F + 0x1d9a, 0x1db6, 0x1dc3, 0x1dd0, 0x0003, 0x04d2, 0x04d7, 0x04cd, + 0x0001, 0x04cf, 0x0001, 0x0048, 0x1e28, 0x0001, 0x04d4, 0x0001, + 0x0048, 0x1e28, 0x0001, 0x04d9, 0x0001, 0x0048, 0x1e28, 0x0005, + 0x04e2, 0x0000, 0x0000, 0x0000, 0x0547, 0x0002, 0x04e5, 0x0516, + 0x0003, 0x04e9, 0x04f8, 0x0507, 0x000d, 0x0048, 0xffff, 0x1e2f, + 0x1e3a, 0x1e42, 0x1e63, 0x1e81, 0x1ea2, 0x1ec0, 0x1ec8, 0x1ed6, + 0x1ee4, 0x1ef5, 0x1f07, 0x000d, 0x0048, 0xffff, 0x1f19, 0x1f20, + 0x1f24, 0x1f24, 0x16b4, 0x16b4, 0x1f24, 0x1858, 0x1f24, 0x1858, + // Entry 36940 - 3697F + 0x1f28, 0x1f28, 0x000d, 0x0048, 0xffff, 0x1f2f, 0x1f3f, 0x1f49, + 0x1f6c, 0x1f8c, 0x1faf, 0x1fcf, 0x1fdc, 0x1fec, 0x1ffc, 0x200f, + 0x2026, 0x0003, 0x051a, 0x0529, 0x0538, 0x000d, 0x0048, 0xffff, + 0x1e2f, 0x1e3a, 0x1e42, 0x1e63, 0x1e81, 0x1ea2, 0x1ec0, 0x1ec8, + 0x1ed6, 0x1ee4, 0x1ef5, 0x1f07, 0x000d, 0x0048, 0xffff, 0x1f19, + 0x1f20, 0x1f24, 0x1f24, 0x16b4, 0x16b4, 0x1f24, 0x1858, 0x1f24, + 0x1858, 0x1f28, 0x1f28, 0x000d, 0x0048, 0xffff, 0x1f2f, 0x1f3f, + 0x1f49, 0x1f6c, 0x1f8c, 0x1faf, 0x1fcf, 0x1fdc, 0x2040, 0x1ffc, + // Entry 36980 - 369BF + 0x200f, 0x2026, 0x0003, 0x0550, 0x0555, 0x054b, 0x0001, 0x054d, + 0x0001, 0x0049, 0x0000, 0x0001, 0x0552, 0x0001, 0x0049, 0x0000, + 0x0001, 0x0557, 0x0001, 0x0049, 0x0000, 0x0005, 0x0560, 0x0000, + 0x0000, 0x0000, 0x05c5, 0x0002, 0x0563, 0x0594, 0x0003, 0x0567, + 0x0576, 0x0585, 0x000d, 0x0049, 0xffff, 0x000d, 0x0026, 0x0054, + 0x006a, 0x0074, 0x008a, 0x00a6, 0x00b3, 0x00c0, 0x00ca, 0x00d7, + 0x00ed, 0x000d, 0x0049, 0xffff, 0x0109, 0x010e, 0x0113, 0x011a, + 0x0122, 0x012a, 0x012f, 0x0137, 0x0137, 0x013c, 0x0144, 0x0149, + // Entry 369C0 - 369FF + 0x000d, 0x0049, 0xffff, 0x000d, 0x0026, 0x0054, 0x006a, 0x0074, + 0x008a, 0x00a6, 0x00b3, 0x00c0, 0x00ca, 0x00d7, 0x00ed, 0x0003, + 0x0598, 0x05a7, 0x05b6, 0x000d, 0x0049, 0xffff, 0x000d, 0x0026, + 0x0054, 0x006a, 0x0074, 0x008a, 0x00a6, 0x00b3, 0x00c0, 0x00ca, + 0x00d7, 0x00ed, 0x000d, 0x0049, 0xffff, 0x0109, 0x010e, 0x0113, + 0x011a, 0x0122, 0x012a, 0x012f, 0x0137, 0x0137, 0x013c, 0x0144, + 0x0149, 0x000d, 0x0049, 0xffff, 0x000d, 0x0026, 0x0054, 0x006a, + 0x0074, 0x008a, 0x00a6, 0x00b3, 0x00c0, 0x00ca, 0x00d7, 0x00ed, + // Entry 36A00 - 36A3F + 0x0003, 0x05ce, 0x05d3, 0x05c9, 0x0001, 0x05cb, 0x0001, 0x0000, + 0x1a1d, 0x0001, 0x05d0, 0x0001, 0x0000, 0x1a1d, 0x0001, 0x05d5, + 0x0001, 0x0000, 0x1a1d, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, + 0x05de, 0x0003, 0x05e8, 0x05ee, 0x05e2, 0x0001, 0x05e4, 0x0002, + 0x0049, 0x014e, 0x017d, 0x0001, 0x05ea, 0x0002, 0x0049, 0x0193, + 0x017d, 0x0001, 0x05f0, 0x0002, 0x0049, 0x0193, 0x017d, 0x0042, + 0x0637, 0x063c, 0x0641, 0x0646, 0x065d, 0x0674, 0x068b, 0x06a2, + 0x06b4, 0x06c6, 0x06dd, 0x06f4, 0x070b, 0x0726, 0x0741, 0x075c, + // Entry 36A40 - 36A7F + 0x0761, 0x0766, 0x076b, 0x0784, 0x079d, 0x07b6, 0x07bb, 0x07c0, + 0x07c5, 0x07ca, 0x07cf, 0x07d4, 0x07d9, 0x07de, 0x07e3, 0x07f7, + 0x080b, 0x081f, 0x0833, 0x0847, 0x085b, 0x086f, 0x0883, 0x0897, + 0x08ab, 0x08bf, 0x08d3, 0x08e7, 0x08fb, 0x090f, 0x0923, 0x0937, + 0x094b, 0x095f, 0x0973, 0x0987, 0x098c, 0x0991, 0x0996, 0x09ac, + 0x09be, 0x09d0, 0x09e6, 0x09f8, 0x0a0a, 0x0a20, 0x0a32, 0x0a44, + 0x0a49, 0x0a4e, 0x0001, 0x0639, 0x0001, 0x0049, 0x01b7, 0x0001, + 0x063e, 0x0001, 0x0049, 0x01b7, 0x0001, 0x0643, 0x0001, 0x0049, + // Entry 36A80 - 36ABF + 0x01b7, 0x0003, 0x064a, 0x064d, 0x0652, 0x0001, 0x0049, 0x01d0, + 0x0003, 0x0049, 0x01dd, 0x01fd, 0x0211, 0x0002, 0x0655, 0x0659, + 0x0002, 0x0049, 0x0230, 0x0230, 0x0002, 0x0049, 0x024d, 0x024d, + 0x0003, 0x0661, 0x0664, 0x0669, 0x0001, 0x0049, 0x0271, 0x0003, + 0x0049, 0x01dd, 0x01fd, 0x0211, 0x0002, 0x066c, 0x0670, 0x0002, + 0x0049, 0x0230, 0x0230, 0x0002, 0x0049, 0x024d, 0x024d, 0x0003, + 0x0678, 0x067b, 0x0680, 0x0001, 0x0049, 0x0271, 0x0003, 0x0049, + 0x01dd, 0x01fd, 0x0211, 0x0002, 0x0683, 0x0687, 0x0002, 0x0049, + // Entry 36AC0 - 36AFF + 0x0230, 0x0230, 0x0002, 0x0049, 0x024d, 0x024d, 0x0003, 0x068f, + 0x0692, 0x0697, 0x0001, 0x0049, 0x0276, 0x0003, 0x0049, 0x0283, + 0x02a3, 0x02b4, 0x0002, 0x069a, 0x069e, 0x0002, 0x0049, 0x02d4, + 0x02d4, 0x0002, 0x0049, 0x02f1, 0x02f1, 0x0003, 0x06a6, 0x0000, + 0x06a9, 0x0001, 0x0049, 0x0276, 0x0002, 0x06ac, 0x06b0, 0x0002, + 0x0049, 0x02d4, 0x02d4, 0x0002, 0x0049, 0x02f1, 0x02f1, 0x0003, + 0x06b8, 0x0000, 0x06bb, 0x0001, 0x0049, 0x0276, 0x0002, 0x06be, + 0x06c2, 0x0002, 0x0049, 0x02d4, 0x02d4, 0x0002, 0x0049, 0x02f1, + // Entry 36B00 - 36B3F + 0x02f1, 0x0003, 0x06ca, 0x06cd, 0x06d2, 0x0001, 0x0049, 0x0315, + 0x0003, 0x0049, 0x0322, 0x0342, 0x0353, 0x0002, 0x06d5, 0x06d9, + 0x0002, 0x0049, 0x0373, 0x0373, 0x0002, 0x0049, 0x0390, 0x0390, + 0x0003, 0x06e1, 0x06e4, 0x06e9, 0x0001, 0x0049, 0x03b4, 0x0003, + 0x0049, 0x0322, 0x0342, 0x0353, 0x0002, 0x06ec, 0x06f0, 0x0002, + 0x0049, 0x0373, 0x0373, 0x0002, 0x0049, 0x0390, 0x0390, 0x0003, + 0x06f8, 0x06fb, 0x0700, 0x0001, 0x0049, 0x03b4, 0x0003, 0x0049, + 0x0322, 0x0342, 0x0353, 0x0002, 0x0703, 0x0707, 0x0002, 0x0049, + // Entry 36B40 - 36B7F + 0x0373, 0x0373, 0x0002, 0x0049, 0x0390, 0x0390, 0x0004, 0x0710, + 0x0713, 0x0718, 0x0723, 0x0001, 0x0049, 0x03bc, 0x0003, 0x0049, + 0x03c9, 0x03ec, 0x03fd, 0x0002, 0x071b, 0x071f, 0x0002, 0x0049, + 0x041d, 0x041d, 0x0002, 0x0049, 0x0437, 0x0437, 0x0001, 0x0049, + 0x045b, 0x0004, 0x072b, 0x072e, 0x0733, 0x073e, 0x0001, 0x0049, + 0x047f, 0x0003, 0x0049, 0x03c9, 0x03ec, 0x03fd, 0x0002, 0x0736, + 0x073a, 0x0002, 0x0049, 0x041d, 0x041d, 0x0002, 0x0049, 0x0437, + 0x0437, 0x0001, 0x0049, 0x045b, 0x0004, 0x0746, 0x0749, 0x074e, + // Entry 36B80 - 36BBF + 0x0759, 0x0001, 0x0049, 0x047f, 0x0003, 0x0049, 0x03c9, 0x03ec, + 0x03fd, 0x0002, 0x0751, 0x0755, 0x0002, 0x0049, 0x041d, 0x041d, + 0x0002, 0x0049, 0x0437, 0x0437, 0x0001, 0x0049, 0x045b, 0x0001, + 0x075e, 0x0001, 0x0049, 0x0484, 0x0001, 0x0763, 0x0001, 0x0049, + 0x04b0, 0x0001, 0x0768, 0x0001, 0x0049, 0x04b0, 0x0003, 0x076f, + 0x0772, 0x0779, 0x0001, 0x0049, 0x04cb, 0x0005, 0x0049, 0x0500, + 0x0513, 0x0523, 0x04db, 0x0530, 0x0002, 0x077c, 0x0780, 0x0002, + 0x0049, 0x054c, 0x054c, 0x0002, 0x0049, 0x056c, 0x056c, 0x0003, + // Entry 36BC0 - 36BFF + 0x0788, 0x078b, 0x0792, 0x0001, 0x0049, 0x04cb, 0x0005, 0x0049, + 0x0500, 0x0513, 0x0523, 0x04db, 0x0530, 0x0002, 0x0795, 0x0799, + 0x0002, 0x0049, 0x054c, 0x054c, 0x0002, 0x0049, 0x056c, 0x056c, + 0x0003, 0x07a1, 0x07a4, 0x07ab, 0x0001, 0x0049, 0x04cb, 0x0005, + 0x0049, 0x0500, 0x0513, 0x0523, 0x04db, 0x0530, 0x0002, 0x07ae, + 0x07b2, 0x0002, 0x0049, 0x054c, 0x054c, 0x0002, 0x0049, 0x056c, + 0x056c, 0x0001, 0x07b8, 0x0001, 0x0049, 0x0593, 0x0001, 0x07bd, + 0x0001, 0x0049, 0x05bf, 0x0001, 0x07c2, 0x0001, 0x0049, 0x05bf, + // Entry 36C00 - 36C3F + 0x0001, 0x07c7, 0x0001, 0x0049, 0x05da, 0x0001, 0x07cc, 0x0001, + 0x0049, 0x0603, 0x0001, 0x07d1, 0x0001, 0x0049, 0x0603, 0x0001, + 0x07d6, 0x0001, 0x0049, 0x0624, 0x0001, 0x07db, 0x0001, 0x0049, + 0x0668, 0x0001, 0x07e0, 0x0001, 0x0049, 0x0668, 0x0003, 0x0000, + 0x07e7, 0x07ec, 0x0003, 0x0049, 0x069b, 0x06c7, 0x06e4, 0x0002, + 0x07ef, 0x07f3, 0x0002, 0x0049, 0x0710, 0x0710, 0x0002, 0x0049, + 0x0736, 0x0736, 0x0003, 0x0000, 0x07fb, 0x0800, 0x0003, 0x0049, + 0x0766, 0x0786, 0x0797, 0x0002, 0x0803, 0x0807, 0x0002, 0x0049, + // Entry 36C40 - 36C7F + 0x0710, 0x0710, 0x0002, 0x0049, 0x0736, 0x0736, 0x0003, 0x0000, + 0x080f, 0x0814, 0x0003, 0x0049, 0x0766, 0x0786, 0x0797, 0x0002, + 0x0817, 0x081b, 0x0002, 0x0049, 0x0710, 0x0710, 0x0002, 0x0049, + 0x0736, 0x0736, 0x0003, 0x0000, 0x0823, 0x0828, 0x0003, 0x0049, + 0x07b7, 0x07e9, 0x080c, 0x0002, 0x082b, 0x082f, 0x0002, 0x0049, + 0x083e, 0x083e, 0x0002, 0x0049, 0x086a, 0x086a, 0x0003, 0x0000, + 0x0837, 0x083c, 0x0003, 0x0049, 0x08a0, 0x08c6, 0x08dd, 0x0002, + 0x083f, 0x0843, 0x0002, 0x0049, 0x083e, 0x083e, 0x0002, 0x0049, + // Entry 36C80 - 36CBF + 0x086a, 0x086a, 0x0003, 0x0000, 0x084b, 0x0850, 0x0003, 0x0049, + 0x08a0, 0x08c6, 0x08dd, 0x0002, 0x0853, 0x0857, 0x0002, 0x0049, + 0x083e, 0x083e, 0x0002, 0x0049, 0x086a, 0x086a, 0x0003, 0x0000, + 0x085f, 0x0864, 0x0003, 0x0049, 0x0903, 0x0932, 0x0952, 0x0002, + 0x0867, 0x086b, 0x0002, 0x0049, 0x0981, 0x0981, 0x0002, 0x0049, + 0x09aa, 0x09aa, 0x0003, 0x0000, 0x0873, 0x0878, 0x0003, 0x0049, + 0x09dd, 0x0a00, 0x0a14, 0x0002, 0x087b, 0x087f, 0x0002, 0x0049, + 0x0981, 0x0981, 0x0002, 0x0049, 0x09aa, 0x09aa, 0x0003, 0x0000, + // Entry 36CC0 - 36CFF + 0x0887, 0x088c, 0x0003, 0x0049, 0x09dd, 0x0a00, 0x0a14, 0x0002, + 0x088f, 0x0893, 0x0002, 0x0049, 0x0981, 0x0981, 0x0002, 0x0049, + 0x09aa, 0x09aa, 0x0003, 0x0000, 0x089b, 0x08a0, 0x0003, 0x0049, + 0x0a37, 0x0a63, 0x0a80, 0x0002, 0x08a3, 0x08a7, 0x0002, 0x0049, + 0x0aac, 0x0aac, 0x0002, 0x0049, 0x0ad2, 0x0ad2, 0x0003, 0x0000, + 0x08af, 0x08b4, 0x0003, 0x0049, 0x0b02, 0x0b22, 0x0b33, 0x0002, + 0x08b7, 0x08bb, 0x0002, 0x0049, 0x0aac, 0x0aac, 0x0002, 0x0049, + 0x0ad2, 0x0ad2, 0x0003, 0x0000, 0x08c3, 0x08c8, 0x0003, 0x0049, + // Entry 36D00 - 36D3F + 0x0b02, 0x0b22, 0x0b33, 0x0002, 0x08cb, 0x08cf, 0x0002, 0x0049, + 0x0aac, 0x0aac, 0x0002, 0x0049, 0x0ad2, 0x0ad2, 0x0003, 0x0000, + 0x08d7, 0x08dc, 0x0003, 0x0049, 0x0b53, 0x0b82, 0x0ba2, 0x0002, + 0x08df, 0x08e3, 0x0002, 0x0049, 0x0bd1, 0x0bd1, 0x0002, 0x0049, + 0x0bfa, 0x0bfa, 0x0003, 0x0000, 0x08eb, 0x08f0, 0x0003, 0x0049, + 0x0c2d, 0x0c53, 0x0c6a, 0x0002, 0x08f3, 0x08f7, 0x0002, 0x0049, + 0x0bd1, 0x0bd1, 0x0002, 0x0049, 0x0bfa, 0x0bfa, 0x0003, 0x0000, + 0x08ff, 0x0904, 0x0003, 0x0049, 0x0c2d, 0x0c53, 0x0c6a, 0x0002, + // Entry 36D40 - 36D7F + 0x0907, 0x090b, 0x0002, 0x0049, 0x0bd1, 0x0bd1, 0x0002, 0x0049, + 0x0bfa, 0x0bfa, 0x0003, 0x0000, 0x0913, 0x0918, 0x0003, 0x0049, + 0x0c90, 0x0cc5, 0x0ceb, 0x0002, 0x091b, 0x091f, 0x0002, 0x0049, + 0x0d20, 0x0d20, 0x0002, 0x0049, 0x0d4f, 0x0d4f, 0x0003, 0x0000, + 0x0927, 0x092c, 0x0003, 0x0049, 0x0d88, 0x0dae, 0x0dc5, 0x0002, + 0x092f, 0x0933, 0x0002, 0x0049, 0x0d20, 0x0d20, 0x0002, 0x0049, + 0x0d4f, 0x0d4f, 0x0003, 0x0000, 0x093b, 0x0940, 0x0003, 0x0049, + 0x0d88, 0x0dae, 0x0dc5, 0x0002, 0x0943, 0x0947, 0x0002, 0x0049, + // Entry 36D80 - 36DBF + 0x0d20, 0x0d20, 0x0002, 0x0049, 0x0d4f, 0x0d4f, 0x0003, 0x0000, + 0x094f, 0x0954, 0x0003, 0x0049, 0x0deb, 0x0e17, 0x0e34, 0x0002, + 0x0957, 0x095b, 0x0002, 0x0049, 0x0e60, 0x0e60, 0x0002, 0x0049, + 0x0e86, 0x0e86, 0x0003, 0x0000, 0x0963, 0x0968, 0x0003, 0x0049, + 0x0eb6, 0x0ed3, 0x0ee1, 0x0002, 0x096b, 0x096f, 0x0002, 0x0049, + 0x0e60, 0x0e60, 0x0002, 0x0049, 0x0e86, 0x0e86, 0x0003, 0x0000, + 0x0977, 0x097c, 0x0003, 0x0049, 0x0eb6, 0x0ed3, 0x0ee1, 0x0002, + 0x097f, 0x0983, 0x0002, 0x0049, 0x0e60, 0x0e60, 0x0002, 0x0049, + // Entry 36DC0 - 36DFF + 0x0e86, 0x0e86, 0x0001, 0x0989, 0x0001, 0x0007, 0x0892, 0x0001, + 0x098e, 0x0001, 0x0007, 0x0892, 0x0001, 0x0993, 0x0001, 0x0007, + 0x0892, 0x0003, 0x099a, 0x099d, 0x09a1, 0x0001, 0x0049, 0x0efe, + 0x0002, 0x0049, 0xffff, 0x0f17, 0x0002, 0x09a4, 0x09a8, 0x0002, + 0x0049, 0x0f3a, 0x0f3a, 0x0002, 0x0049, 0x0f5d, 0x0f5d, 0x0003, + 0x09b0, 0x0000, 0x09b3, 0x0001, 0x0049, 0x0f8d, 0x0002, 0x09b6, + 0x09ba, 0x0002, 0x0049, 0x0f3a, 0x0f3a, 0x0002, 0x0049, 0x0f5d, + 0x0f5d, 0x0003, 0x09c2, 0x0000, 0x09c5, 0x0001, 0x0049, 0x0f8d, + // Entry 36E00 - 36E3F + 0x0002, 0x09c8, 0x09cc, 0x0002, 0x0049, 0x0f3a, 0x0f3a, 0x0002, + 0x0049, 0x0f5d, 0x0f5d, 0x0003, 0x09d4, 0x09d7, 0x09db, 0x0001, + 0x0049, 0x0f92, 0x0002, 0x0049, 0xffff, 0x0fab, 0x0002, 0x09de, + 0x09e2, 0x0002, 0x0049, 0x0fcb, 0x0fcb, 0x0002, 0x0049, 0x0feb, + 0x0feb, 0x0003, 0x09ea, 0x0000, 0x09ed, 0x0001, 0x0048, 0x15b7, + 0x0002, 0x09f0, 0x09f4, 0x0002, 0x0049, 0x0fcb, 0x0fcb, 0x0002, + 0x0049, 0x0feb, 0x0feb, 0x0003, 0x09fc, 0x0000, 0x09ff, 0x0001, + 0x0048, 0x15b7, 0x0002, 0x0a02, 0x0a06, 0x0002, 0x0049, 0x0fcb, + // Entry 36E40 - 36E7F + 0x0fcb, 0x0002, 0x0049, 0x0feb, 0x0feb, 0x0003, 0x0a0e, 0x0a11, + 0x0a15, 0x0001, 0x0049, 0x101b, 0x0002, 0x0049, 0xffff, 0x1034, + 0x0002, 0x0a18, 0x0a1c, 0x0002, 0x0049, 0x1047, 0x1047, 0x0002, + 0x0049, 0x1067, 0x1067, 0x0003, 0x0a24, 0x0000, 0x0a27, 0x0001, + 0x0048, 0x15c7, 0x0002, 0x0a2a, 0x0a2e, 0x0002, 0x0049, 0x1047, + 0x1047, 0x0002, 0x0049, 0x1067, 0x1067, 0x0003, 0x0a36, 0x0000, + 0x0a39, 0x0001, 0x0048, 0x15c7, 0x0002, 0x0a3c, 0x0a40, 0x0002, + 0x0049, 0x1047, 0x1047, 0x0002, 0x0049, 0x1067, 0x1067, 0x0001, + // Entry 36E80 - 36EBF + 0x0a46, 0x0001, 0x0049, 0x1097, 0x0001, 0x0a4b, 0x0001, 0x0049, + 0x1097, 0x0001, 0x0a50, 0x0001, 0x0049, 0x1097, 0x0004, 0x0a58, + 0x0a5d, 0x0a62, 0x0a71, 0x0003, 0x0000, 0x1dc7, 0x3a0f, 0x3a26, + 0x0003, 0x0049, 0x10ae, 0x10bf, 0x10e9, 0x0002, 0x0000, 0x0a65, + 0x0003, 0x0000, 0x0a6c, 0x0a69, 0x0001, 0x0049, 0x111f, 0x0003, + 0x0049, 0xffff, 0x1170, 0x11be, 0x0002, 0x0c58, 0x0a74, 0x0003, + 0x0a78, 0x0bb8, 0x0b18, 0x009e, 0x0049, 0xffff, 0xffff, 0xffff, + 0xffff, 0x13ab, 0x14b8, 0x15f4, 0x1692, 0x17c6, 0x18fa, 0x1a25, + // Entry 36EC0 - 36EFF + 0x1b50, 0x1bf1, 0x1dbf, 0x1e66, 0x1f1f, 0x202c, 0x20dc, 0x21c2, + 0x22cc, 0x242d, 0x2540, 0x2665, 0x271e, 0x27c5, 0xffff, 0xffff, + 0x28d6, 0xffff, 0x29ce, 0xffff, 0x2ad5, 0x2b7c, 0x2c11, 0x2c94, + 0xffff, 0xffff, 0x2dda, 0x2e8a, 0x2f8c, 0xffff, 0xffff, 0xffff, + 0x30ba, 0xffff, 0x31c6, 0x32be, 0xffff, 0x340a, 0x3517, 0x363f, + 0xffff, 0xffff, 0xffff, 0xffff, 0x37ac, 0xffff, 0xffff, 0x38e3, + 0x39f0, 0xffff, 0xffff, 0x3baa, 0x3c81, 0x3d4c, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x3f4e, 0x3fda, 0x408d, 0x413d, + // Entry 36F00 - 36F3F + 0x41db, 0xffff, 0xffff, 0x43b4, 0xffff, 0x446f, 0xffff, 0xffff, + 0x45ef, 0xffff, 0x4767, 0xffff, 0xffff, 0xffff, 0xffff, 0x48b3, + 0xffff, 0x498f, 0x4ade, 0x4bdc, 0x4c98, 0xffff, 0xffff, 0xffff, + 0x4da5, 0x4e8e, 0x4f59, 0xffff, 0xffff, 0x50bc, 0x520c, 0x52f8, + 0x53ba, 0xffff, 0xffff, 0x54eb, 0x559b, 0x5630, 0xffff, 0x5734, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x59e5, 0x5a8c, 0x5b1b, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x5cf9, + 0xffff, 0xffff, 0x5e0d, 0xffff, 0x5ec2, 0xffff, 0x5fec, 0x609c, + // Entry 36F40 - 36F7F + 0x6194, 0xffff, 0x626d, 0x636e, 0xffff, 0xffff, 0xffff, 0x64ed, + 0x65b8, 0xffff, 0xffff, 0x1200, 0x155c, 0x1c7d, 0x1d15, 0xffff, + 0xffff, 0x46ab, 0x58ef, 0x009e, 0x0049, 0x12aa, 0x12df, 0x1312, + 0x134e, 0x13ed, 0x14db, 0x1611, 0x16e4, 0x1818, 0x1949, 0x1a74, + 0x1b70, 0x1c0b, 0x1de2, 0x1e8c, 0x1f61, 0x204f, 0x2114, 0x2204, + 0x232d, 0x2472, 0x258b, 0x268b, 0x273e, 0x27f1, 0x2890, 0x28b3, + 0x28fc, 0x298f, 0x29f8, 0x2a93, 0x2af5, 0x2b96, 0x2c28, 0x2cc0, + 0x2d5c, 0x2d9b, 0x2dfd, 0x2ec3, 0x2fa9, 0x3021, 0x3041, 0x3087, + // Entry 36F80 - 36FBF + 0x30f0, 0x31a3, 0x3202, 0x32fa, 0x33b6, 0x344c, 0x3562, 0x3659, + 0x36d4, 0x3704, 0x375a, 0x3786, 0x37d2, 0x3865, 0x38aa, 0x3925, + 0x3a38, 0x3b51, 0x3b90, 0x3bdd, 0x3cad, 0x3d66, 0x3de1, 0x3e29, + 0x3e68, 0x3e8b, 0x3ec4, 0x3f06, 0x3f68, 0x3ffd, 0x40b3, 0x415d, + 0x4235, 0x432a, 0x436c, 0x43d4, 0x4452, 0x44b0, 0x4579, 0x45bf, + 0x4619, 0x4731, 0x4784, 0x4805, 0x4825, 0x4857, 0x487d, 0x48dc, + 0x4975, 0x49e9, 0x4b1d, 0x4c03, 0x4cb8, 0x4d42, 0x4d68, 0x4d82, + 0x4ddb, 0x4ebd, 0x4f9a, 0x505a, 0x507a, 0x50f9, 0x5244, 0x5321, + // Entry 36FC0 - 36FFF + 0x53e9, 0x548e, 0x54ab, 0x550e, 0x55b5, 0x5659, 0x56f2, 0x5787, + 0x586b, 0x5894, 0x58ba, 0x59a2, 0x59c8, 0x5a05, 0x5aa6, 0x5b35, + 0x5bb3, 0x5bd6, 0x5c24, 0x5c5a, 0x5c96, 0x5cbf, 0x5cd9, 0x5d22, + 0x5db2, 0x5de7, 0x5e27, 0x5ea2, 0x5f03, 0x5fcc, 0x600f, 0x60d7, + 0x61b7, 0x6244, 0x62ab, 0x639d, 0x6442, 0x646e, 0x64a1, 0x6519, + 0x65f6, 0x3b0f, 0x51ba, 0x1223, 0x1579, 0x1c9a, 0x1d38, 0xffff, + 0x45a5, 0x46c2, 0x5915, 0x009e, 0x0049, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1454, 0x1520, 0x1653, 0x175b, 0x188f, 0x19bd, 0x1ae8, + // Entry 37000 - 3703F + 0x1bb5, 0x1c4a, 0x1e2a, 0x1ed7, 0x1fc8, 0x2097, 0x2171, 0x226e, + 0x23b3, 0x24df, 0x25fe, 0x26d6, 0x2783, 0x2842, 0xffff, 0xffff, + 0x2947, 0xffff, 0x2a47, 0xffff, 0x2b3a, 0x2bd5, 0x2c64, 0x2d11, + 0xffff, 0xffff, 0x2e45, 0x2f21, 0x2feb, 0xffff, 0xffff, 0xffff, + 0x314b, 0xffff, 0x3263, 0x335b, 0xffff, 0x34b3, 0x35d2, 0x3698, + 0xffff, 0xffff, 0xffff, 0xffff, 0x381d, 0xffff, 0xffff, 0x398c, + 0x3aa5, 0xffff, 0xffff, 0x3c35, 0x3cfe, 0x3da5, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x3fa7, 0x4045, 0x40fe, 0x41a2, + // Entry 37040 - 3707F + 0x42b4, 0xffff, 0xffff, 0x4419, 0xffff, 0x4516, 0xffff, 0xffff, + 0x4668, 0xffff, 0x47c6, 0xffff, 0xffff, 0xffff, 0xffff, 0x492a, + 0xffff, 0x4a6b, 0x4b84, 0x4c4f, 0x4cfd, 0xffff, 0xffff, 0xffff, + 0x4e36, 0x4f11, 0x5000, 0xffff, 0xffff, 0x515b, 0x529e, 0x536f, + 0x543d, 0xffff, 0xffff, 0x5556, 0x55f4, 0x56a7, 0xffff, 0x57ff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x5a4a, 0x5ae5, 0x5b74, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x5d70, + 0xffff, 0xffff, 0x5e66, 0xffff, 0x5f69, 0xffff, 0x6057, 0x6137, + // Entry 37080 - 370BF + 0x61ff, 0xffff, 0x630e, 0x63f1, 0xffff, 0xffff, 0xffff, 0x656a, + 0x6659, 0xffff, 0xffff, 0x126b, 0x15bb, 0x1cdc, 0x1d80, 0xffff, + 0xffff, 0x46fe, 0x5960, 0x0003, 0x0000, 0x0000, 0x0c5c, 0x0042, + 0x000b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 370C0 - 370FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0000, 0x0003, 0x0004, 0x0256, 0x0689, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0038, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, + 0x0027, 0x0004, 0x0024, 0x001e, 0x001b, 0x0021, 0x0001, 0x004a, + 0x0000, 0x0001, 0x004a, 0x0024, 0x0001, 0x004a, 0x0042, 0x0001, + // Entry 37100 - 3713F + 0x0000, 0x051c, 0x0004, 0x0035, 0x002f, 0x002c, 0x0032, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0006, 0x022e, 0x0008, 0x0041, 0x00a6, 0x00fd, 0x0132, + 0x0203, 0x0223, 0x0234, 0x0245, 0x0002, 0x0044, 0x0075, 0x0003, + 0x0048, 0x0057, 0x0066, 0x000d, 0x004a, 0xffff, 0x0049, 0x0055, + 0x0061, 0x006d, 0x0079, 0x0085, 0x0091, 0x009d, 0x00a9, 0x00b5, + 0x00c2, 0x00cf, 0x000d, 0x0000, 0xffff, 0x204d, 0x2b44, 0x2b47, + 0x2b4b, 0x257f, 0x3a39, 0x3a3c, 0x3a40, 0x3a45, 0x2060, 0x3a48, + // Entry 37140 - 3717F + 0x3a4b, 0x000d, 0x004a, 0xffff, 0x00dc, 0x00f6, 0x0112, 0x0130, + 0x014e, 0x0168, 0x0188, 0x01a2, 0x01be, 0x01d6, 0x01f2, 0x0217, + 0x0003, 0x0079, 0x0088, 0x0097, 0x000d, 0x004a, 0xffff, 0x0049, + 0x0055, 0x0061, 0x006d, 0x0079, 0x0085, 0x0091, 0x009d, 0x00a9, + 0x00b5, 0x00c2, 0x00cf, 0x000d, 0x0000, 0xffff, 0x204d, 0x2b44, + 0x2b47, 0x2b4b, 0x257f, 0x3a39, 0x3a3c, 0x3a40, 0x3a45, 0x2060, + 0x3a48, 0x3a4b, 0x000d, 0x004a, 0xffff, 0x00dc, 0x00f6, 0x0112, + 0x0130, 0x014e, 0x0168, 0x0188, 0x01a2, 0x01be, 0x01d6, 0x01f2, + // Entry 37180 - 371BF + 0x0217, 0x0002, 0x00a9, 0x00d3, 0x0005, 0x00af, 0x00b8, 0x00ca, + 0x0000, 0x00c1, 0x0007, 0x004a, 0x023e, 0x0243, 0x0248, 0x024d, + 0x0252, 0x0257, 0x025c, 0x0007, 0x004a, 0x023e, 0x0243, 0x0248, + 0x024d, 0x0252, 0x0257, 0x025c, 0x0007, 0x004a, 0x023e, 0x0243, + 0x0248, 0x024d, 0x0252, 0x0257, 0x025c, 0x0007, 0x004a, 0x0261, + 0x0268, 0x0273, 0x0280, 0x028d, 0x0298, 0x02a5, 0x0005, 0x00d9, + 0x00e2, 0x00f4, 0x0000, 0x00eb, 0x0007, 0x004a, 0x023e, 0x0243, + 0x0248, 0x024d, 0x0252, 0x0257, 0x025c, 0x0007, 0x004a, 0x023e, + // Entry 371C0 - 371FF + 0x0243, 0x0248, 0x024d, 0x0252, 0x0257, 0x025c, 0x0007, 0x004a, + 0x023e, 0x0243, 0x0248, 0x024d, 0x0252, 0x0257, 0x025c, 0x0007, + 0x004a, 0x0261, 0x0268, 0x0273, 0x0280, 0x028d, 0x0298, 0x02a5, + 0x0002, 0x0100, 0x0119, 0x0003, 0x0104, 0x010b, 0x0112, 0x0005, + 0x004a, 0xffff, 0x02b0, 0x02bf, 0x02cf, 0x02e0, 0x0005, 0x0000, + 0xffff, 0x204d, 0x2b44, 0x2b47, 0x2b4b, 0x0005, 0x004a, 0xffff, + 0x02f0, 0x0302, 0x0314, 0x0326, 0x0003, 0x011d, 0x0124, 0x012b, + 0x0005, 0x0000, 0xffff, 0x204d, 0x2b44, 0x2b47, 0x2b4b, 0x0005, + // Entry 37200 - 3723F + 0x0000, 0xffff, 0x204d, 0x2b44, 0x2b47, 0x2b4b, 0x0005, 0x004a, + 0xffff, 0x02f0, 0x0302, 0x0314, 0x0326, 0x0002, 0x0135, 0x019c, + 0x0003, 0x0139, 0x015a, 0x017b, 0x0008, 0x0145, 0x014b, 0x0142, + 0x014e, 0x0151, 0x0154, 0x0157, 0x0148, 0x0001, 0x004a, 0x0338, + 0x0001, 0x004a, 0x034a, 0x0001, 0x004a, 0x034f, 0x0001, 0x004a, + 0x035d, 0x0001, 0x004a, 0x0362, 0x0001, 0x004a, 0x036d, 0x0001, + 0x004a, 0x0376, 0x0001, 0x004a, 0x037f, 0x0008, 0x0166, 0x016c, + 0x0163, 0x016f, 0x0172, 0x0175, 0x0178, 0x0169, 0x0001, 0x004a, + // Entry 37240 - 3727F + 0x0338, 0x0001, 0x004a, 0x0388, 0x0001, 0x004a, 0x034f, 0x0001, + 0x004a, 0x038d, 0x0001, 0x004a, 0x0362, 0x0001, 0x004a, 0x036d, + 0x0001, 0x004a, 0x0376, 0x0001, 0x004a, 0x037f, 0x0008, 0x0187, + 0x018d, 0x0184, 0x0190, 0x0193, 0x0196, 0x0199, 0x018a, 0x0001, + 0x004a, 0x0338, 0x0001, 0x004a, 0x0392, 0x0001, 0x004a, 0x034f, + 0x0001, 0x004a, 0x0398, 0x0001, 0x004a, 0x0362, 0x0001, 0x004a, + 0x036d, 0x0001, 0x004a, 0x0376, 0x0001, 0x004a, 0x037f, 0x0003, + 0x01a0, 0x01c1, 0x01e2, 0x0008, 0x01ac, 0x01b2, 0x01a9, 0x01b5, + // Entry 37280 - 372BF + 0x01b8, 0x01bb, 0x01be, 0x01af, 0x0001, 0x004a, 0x0338, 0x0001, + 0x004a, 0x034a, 0x0001, 0x004a, 0x034f, 0x0001, 0x004a, 0x035d, + 0x0001, 0x004a, 0x0362, 0x0001, 0x004a, 0x036d, 0x0001, 0x004a, + 0x0376, 0x0001, 0x004a, 0x037f, 0x0008, 0x01cd, 0x01d3, 0x01ca, + 0x01d6, 0x01d9, 0x01dc, 0x01df, 0x01d0, 0x0001, 0x004a, 0x0338, + 0x0001, 0x004a, 0x034a, 0x0001, 0x004a, 0x034f, 0x0001, 0x004a, + 0x035d, 0x0001, 0x004a, 0x0362, 0x0001, 0x004a, 0x036d, 0x0001, + 0x004a, 0x0376, 0x0001, 0x004a, 0x037f, 0x0008, 0x01ee, 0x01f4, + // Entry 372C0 - 372FF + 0x01eb, 0x01f7, 0x01fa, 0x01fd, 0x0200, 0x01f1, 0x0001, 0x004a, + 0x0338, 0x0001, 0x004a, 0x034a, 0x0001, 0x004a, 0x034f, 0x0001, + 0x004a, 0x035d, 0x0001, 0x004a, 0x0362, 0x0001, 0x004a, 0x036d, + 0x0001, 0x004a, 0x0376, 0x0001, 0x004a, 0x037f, 0x0003, 0x0212, + 0x021d, 0x0207, 0x0002, 0x020a, 0x020e, 0x0002, 0x004a, 0x039e, + 0x03c8, 0x0002, 0x004a, 0x03c1, 0x03e0, 0x0002, 0x0215, 0x0219, + 0x0002, 0x004a, 0x03e5, 0x03ec, 0x0002, 0x004a, 0x03c1, 0x03e0, + 0x0001, 0x021f, 0x0002, 0x004a, 0x03e5, 0x03ec, 0x0004, 0x0231, + // Entry 37300 - 3733F + 0x022b, 0x0228, 0x022e, 0x0001, 0x004a, 0x03f1, 0x0001, 0x004a, + 0x041c, 0x0001, 0x0015, 0x042e, 0x0001, 0x0015, 0x042e, 0x0004, + 0x0242, 0x023c, 0x0239, 0x023f, 0x0001, 0x0020, 0x0365, 0x0001, + 0x0020, 0x0375, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, + 0x0004, 0x0253, 0x024d, 0x024a, 0x0250, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0042, 0x0299, 0x029e, 0x02a3, 0x02a8, 0x02bf, 0x02d1, + 0x02e3, 0x02fa, 0x030c, 0x031e, 0x0335, 0x0347, 0x0359, 0x0374, + // Entry 37340 - 3737F + 0x038a, 0x03a0, 0x03a5, 0x03aa, 0x03af, 0x03c8, 0x03da, 0x03ec, + 0x03f1, 0x03f6, 0x03fb, 0x0400, 0x0405, 0x040a, 0x040f, 0x0414, + 0x0419, 0x042d, 0x0441, 0x0455, 0x0469, 0x047d, 0x0491, 0x04a5, + 0x04b9, 0x04cd, 0x04e1, 0x04f5, 0x0509, 0x051d, 0x0531, 0x0545, + 0x0559, 0x056d, 0x0581, 0x0595, 0x05a9, 0x05bd, 0x05c2, 0x05c7, + 0x05cc, 0x05e2, 0x05f4, 0x0606, 0x061c, 0x062e, 0x0640, 0x0656, + 0x0668, 0x067a, 0x067f, 0x0684, 0x0001, 0x029b, 0x0001, 0x004a, + 0x0433, 0x0001, 0x02a0, 0x0001, 0x004a, 0x0433, 0x0001, 0x02a5, + // Entry 37380 - 373BF + 0x0001, 0x004a, 0x0433, 0x0003, 0x02ac, 0x02af, 0x02b4, 0x0001, + 0x004a, 0x043c, 0x0003, 0x004a, 0x0443, 0x045b, 0x0469, 0x0002, + 0x02b7, 0x02bb, 0x0002, 0x004a, 0x0479, 0x0479, 0x0002, 0x004a, + 0x0495, 0x0495, 0x0003, 0x02c3, 0x0000, 0x02c6, 0x0001, 0x004a, + 0x043c, 0x0002, 0x02c9, 0x02cd, 0x0002, 0x004a, 0x0479, 0x0479, + 0x0002, 0x004a, 0x0495, 0x0495, 0x0003, 0x02d5, 0x0000, 0x02d8, + 0x0001, 0x004a, 0x043c, 0x0002, 0x02db, 0x02df, 0x0002, 0x004a, + 0x04af, 0x04af, 0x0002, 0x004a, 0x04bd, 0x04bd, 0x0003, 0x02e7, + // Entry 373C0 - 373FF + 0x02ea, 0x02ef, 0x0001, 0x004a, 0x04d5, 0x0003, 0x004a, 0x04e2, + 0x0500, 0x0514, 0x0002, 0x02f2, 0x02f6, 0x0002, 0x004a, 0x0534, + 0x0534, 0x0002, 0x004a, 0x0547, 0x0547, 0x0003, 0x02fe, 0x0000, + 0x0301, 0x0001, 0x004a, 0x04d5, 0x0002, 0x0304, 0x0308, 0x0002, + 0x004a, 0x0534, 0x0534, 0x0002, 0x004a, 0x0547, 0x0547, 0x0003, + 0x0310, 0x0000, 0x0313, 0x0001, 0x004a, 0x04d5, 0x0002, 0x0316, + 0x031a, 0x0002, 0x004a, 0x0534, 0x0534, 0x0002, 0x004a, 0x0547, + 0x0547, 0x0003, 0x0322, 0x0325, 0x032a, 0x0001, 0x004a, 0x0563, + // Entry 37400 - 3743F + 0x0003, 0x004a, 0x056a, 0x0582, 0x0590, 0x0002, 0x032d, 0x0331, + 0x0002, 0x004a, 0x05a0, 0x05a0, 0x0002, 0x004a, 0x05ad, 0x05ad, + 0x0003, 0x0339, 0x0000, 0x033c, 0x0001, 0x004a, 0x0563, 0x0002, + 0x033f, 0x0343, 0x0002, 0x004a, 0x05a0, 0x05a0, 0x0002, 0x004a, + 0x05ad, 0x05ad, 0x0003, 0x034b, 0x0000, 0x034e, 0x0001, 0x004a, + 0x0563, 0x0002, 0x0351, 0x0355, 0x0002, 0x004a, 0x05c5, 0x05c5, + 0x0002, 0x004a, 0x05ad, 0x05ad, 0x0004, 0x035e, 0x0361, 0x0366, + 0x0371, 0x0001, 0x004a, 0x05d3, 0x0003, 0x004a, 0x05e9, 0x0610, + // Entry 37440 - 3747F + 0x062d, 0x0002, 0x0369, 0x036d, 0x0002, 0x004a, 0x064c, 0x064c, + 0x0002, 0x004a, 0x065f, 0x065f, 0x0001, 0x004a, 0x067f, 0x0004, + 0x0379, 0x0000, 0x037c, 0x0387, 0x0001, 0x004a, 0x06a0, 0x0002, + 0x037f, 0x0383, 0x0002, 0x004a, 0x064c, 0x064c, 0x0002, 0x004a, + 0x065f, 0x065f, 0x0001, 0x004a, 0x067f, 0x0004, 0x038f, 0x0000, + 0x0392, 0x039d, 0x0001, 0x004a, 0x06a0, 0x0002, 0x0395, 0x0399, + 0x0002, 0x004a, 0x064c, 0x064c, 0x0002, 0x004a, 0x065f, 0x065f, + 0x0001, 0x004a, 0x067f, 0x0001, 0x03a2, 0x0001, 0x004a, 0x06a4, + // Entry 37480 - 374BF + 0x0001, 0x03a7, 0x0001, 0x004a, 0x06a4, 0x0001, 0x03ac, 0x0001, + 0x004a, 0x06a4, 0x0003, 0x03b3, 0x03b6, 0x03bd, 0x0001, 0x004a, + 0x036d, 0x0005, 0x004a, 0x06d6, 0x06e5, 0x06f4, 0x06c5, 0x0703, + 0x0002, 0x03c0, 0x03c4, 0x0002, 0x004a, 0x0714, 0x0714, 0x0002, + 0x004a, 0x0723, 0x0723, 0x0003, 0x03cc, 0x0000, 0x03cf, 0x0001, + 0x004a, 0x036d, 0x0002, 0x03d2, 0x03d6, 0x0002, 0x004a, 0x0714, + 0x0714, 0x0002, 0x004a, 0x0723, 0x0723, 0x0003, 0x03de, 0x0000, + 0x03e1, 0x0001, 0x004a, 0x036d, 0x0002, 0x03e4, 0x03e8, 0x0002, + // Entry 374C0 - 374FF + 0x004a, 0x0714, 0x0714, 0x0002, 0x004a, 0x0723, 0x0723, 0x0001, + 0x03ee, 0x0001, 0x004a, 0x073d, 0x0001, 0x03f3, 0x0001, 0x004a, + 0x073d, 0x0001, 0x03f8, 0x0001, 0x004a, 0x073d, 0x0001, 0x03fd, + 0x0001, 0x004a, 0x0753, 0x0001, 0x0402, 0x0001, 0x004a, 0x0753, + 0x0001, 0x0407, 0x0001, 0x004a, 0x0753, 0x0001, 0x040c, 0x0001, + 0x004a, 0x075e, 0x0001, 0x0411, 0x0001, 0x004a, 0x075e, 0x0001, + 0x0416, 0x0001, 0x004a, 0x075e, 0x0003, 0x0000, 0x041d, 0x0422, + 0x0003, 0x004a, 0x0772, 0x0795, 0x07ae, 0x0002, 0x0425, 0x0429, + // Entry 37500 - 3753F + 0x0002, 0x004a, 0x07c9, 0x07c9, 0x0002, 0x004a, 0x07e1, 0x07e1, + 0x0003, 0x0000, 0x0431, 0x0436, 0x0003, 0x004a, 0x0806, 0x081f, + 0x082e, 0x0002, 0x0439, 0x043d, 0x0002, 0x004a, 0x07c9, 0x07c9, + 0x0002, 0x004a, 0x07e1, 0x07e1, 0x0003, 0x0000, 0x0445, 0x044a, + 0x0003, 0x004a, 0x0806, 0x083f, 0x082e, 0x0002, 0x044d, 0x0451, + 0x0002, 0x004a, 0x07c9, 0x07c9, 0x0002, 0x004a, 0x07e1, 0x07e1, + 0x0003, 0x0000, 0x0459, 0x045e, 0x0003, 0x004a, 0x084d, 0x0874, + 0x0891, 0x0002, 0x0461, 0x0465, 0x0002, 0x004a, 0x08b0, 0x08b0, + // Entry 37540 - 3757F + 0x0002, 0x004a, 0x08cc, 0x08cc, 0x0003, 0x0000, 0x046d, 0x0472, + 0x0003, 0x004a, 0x08f5, 0x0874, 0x0891, 0x0002, 0x0475, 0x0479, + 0x0002, 0x004a, 0x08b0, 0x08b0, 0x0002, 0x004a, 0x08cc, 0x08cc, + 0x0003, 0x0000, 0x0481, 0x0486, 0x0003, 0x004a, 0x08f5, 0x0911, + 0x0923, 0x0002, 0x0489, 0x048d, 0x0002, 0x004a, 0x08b0, 0x08b0, + 0x0002, 0x004a, 0x08cc, 0x08cc, 0x0003, 0x0000, 0x0495, 0x049a, + 0x0003, 0x004a, 0x0937, 0x0960, 0x097f, 0x0002, 0x049d, 0x04a1, + 0x0002, 0x004a, 0x09a0, 0x09a0, 0x0002, 0x004a, 0x09be, 0x09be, + // Entry 37580 - 375BF + 0x0003, 0x0000, 0x04a9, 0x04ae, 0x0003, 0x004a, 0x09e9, 0x0a07, + 0x0a1b, 0x0002, 0x04b1, 0x04b5, 0x0002, 0x004a, 0x09a0, 0x09a0, + 0x0002, 0x004a, 0x09be, 0x09be, 0x0003, 0x0000, 0x04bd, 0x04c2, + 0x0003, 0x004a, 0x09e9, 0x0a07, 0x0a1b, 0x0002, 0x04c5, 0x04c9, + 0x0002, 0x004a, 0x09a0, 0x09a0, 0x0002, 0x004a, 0x09be, 0x09be, + 0x0003, 0x0000, 0x04d1, 0x04d6, 0x0003, 0x004a, 0x0a31, 0x0a5a, + 0x0a79, 0x0002, 0x04d9, 0x04dd, 0x0002, 0x004a, 0x0a9a, 0x0a9a, + 0x0002, 0x004a, 0x0ab8, 0x0ab8, 0x0003, 0x0000, 0x04e5, 0x04ea, + // Entry 375C0 - 375FF + 0x0003, 0x004a, 0x0ae3, 0x0b01, 0x0b15, 0x0002, 0x04ed, 0x04f1, + 0x0002, 0x004a, 0x0a9a, 0x0a9a, 0x0002, 0x004a, 0x0ab8, 0x0ab8, + 0x0003, 0x0000, 0x04f9, 0x04fe, 0x0003, 0x004a, 0x0b2b, 0x0b43, + 0x0b51, 0x0002, 0x0501, 0x0505, 0x0002, 0x004a, 0x0a9a, 0x0a9a, + 0x0002, 0x004a, 0x0ab8, 0x0ab8, 0x0003, 0x0000, 0x050d, 0x0512, + 0x0003, 0x004a, 0x0b61, 0x0b88, 0x0ba5, 0x0002, 0x0515, 0x0519, + 0x0002, 0x004a, 0x0bc4, 0x0bc4, 0x0002, 0x004a, 0x0be0, 0x0be0, + 0x0003, 0x0000, 0x0521, 0x0526, 0x0003, 0x004a, 0x0c09, 0x0c25, + // Entry 37600 - 3763F + 0x0c37, 0x0002, 0x0529, 0x052d, 0x0002, 0x004a, 0x0bc4, 0x0bc4, + 0x0002, 0x004a, 0x0be0, 0x0be0, 0x0003, 0x0000, 0x0535, 0x053a, + 0x0003, 0x004a, 0x0c4b, 0x0c61, 0x0c6d, 0x0002, 0x053d, 0x0541, + 0x0002, 0x004a, 0x0bc4, 0x0bc4, 0x0002, 0x004a, 0x0be0, 0x0be0, + 0x0003, 0x0000, 0x0549, 0x054e, 0x0003, 0x004a, 0x0c7b, 0x0ca4, + 0x0cc3, 0x0002, 0x0551, 0x0555, 0x0002, 0x004a, 0x0ce4, 0x0ce4, + 0x0002, 0x004a, 0x0d02, 0x0d02, 0x0003, 0x0000, 0x055d, 0x0562, + 0x0003, 0x004a, 0x0c7b, 0x0ca4, 0x0cc3, 0x0002, 0x0565, 0x0569, + // Entry 37640 - 3767F + 0x0002, 0x004a, 0x0ce4, 0x0ce4, 0x0002, 0x004a, 0x0d02, 0x0d02, + 0x0003, 0x0000, 0x0571, 0x0576, 0x0003, 0x004a, 0x0c7b, 0x0ca4, + 0x0cc3, 0x0002, 0x0579, 0x057d, 0x0002, 0x004a, 0x0ce4, 0x0ce4, + 0x0002, 0x004a, 0x0d02, 0x0d02, 0x0003, 0x0000, 0x0585, 0x058a, + 0x0003, 0x004a, 0x0d2d, 0x0d54, 0x0d71, 0x0002, 0x058d, 0x0591, + 0x0002, 0x004a, 0x0d90, 0x0d90, 0x0002, 0x004a, 0x0dac, 0x0dac, + 0x0003, 0x0000, 0x0599, 0x059e, 0x0003, 0x004a, 0x0dd5, 0x0df1, + 0x0e03, 0x0002, 0x05a1, 0x05a5, 0x0002, 0x004a, 0x0d90, 0x0d90, + // Entry 37680 - 376BF + 0x0002, 0x004a, 0x0dac, 0x0dac, 0x0003, 0x0000, 0x05ad, 0x05b2, + 0x0003, 0x004a, 0x0dd5, 0x0df1, 0x0e03, 0x0002, 0x05b5, 0x05b9, + 0x0002, 0x004a, 0x0d90, 0x0d90, 0x0002, 0x004a, 0x0dac, 0x0dac, + 0x0001, 0x05bf, 0x0001, 0x004a, 0x0e17, 0x0001, 0x05c4, 0x0001, + 0x004a, 0x0e17, 0x0001, 0x05c9, 0x0001, 0x004a, 0x0e17, 0x0003, + 0x05d0, 0x05d3, 0x05d7, 0x0001, 0x004a, 0x0e25, 0x0002, 0x004a, + 0xffff, 0x0e2c, 0x0002, 0x05da, 0x05de, 0x0002, 0x004a, 0x0e3a, + 0x0e3a, 0x0002, 0x004a, 0x0e47, 0x0e47, 0x0003, 0x05e6, 0x0000, + // Entry 376C0 - 376FF + 0x05e9, 0x0001, 0x004a, 0x0e61, 0x0002, 0x05ec, 0x05f0, 0x0002, + 0x004a, 0x0e3a, 0x0e3a, 0x0002, 0x004a, 0x0e65, 0x0e65, 0x0003, + 0x05f8, 0x0000, 0x05fb, 0x0001, 0x004a, 0x0e61, 0x0002, 0x05fe, + 0x0602, 0x0002, 0x004a, 0x0e3a, 0x0e3a, 0x0002, 0x004a, 0x0e65, + 0x0e65, 0x0003, 0x060a, 0x060d, 0x0611, 0x0001, 0x000f, 0x01c4, + 0x0002, 0x004a, 0xffff, 0x0e76, 0x0002, 0x0614, 0x0618, 0x0002, + 0x004a, 0x0e88, 0x0e88, 0x0002, 0x004a, 0x0ea6, 0x0ea6, 0x0003, + 0x0620, 0x0000, 0x0623, 0x0001, 0x0012, 0x0dff, 0x0002, 0x0626, + // Entry 37700 - 3773F + 0x062a, 0x0002, 0x004a, 0x0ec2, 0x0ec2, 0x0002, 0x004a, 0x0ed9, + 0x0ed9, 0x0003, 0x0632, 0x0000, 0x0635, 0x0001, 0x0012, 0x0dff, + 0x0002, 0x0638, 0x063c, 0x0002, 0x004a, 0x0ec2, 0x0ec2, 0x0002, + 0x004a, 0x0ed9, 0x0ed9, 0x0003, 0x0644, 0x0647, 0x064b, 0x0001, + 0x000f, 0x0227, 0x0002, 0x004a, 0xffff, 0x0eee, 0x0002, 0x064e, + 0x0652, 0x0002, 0x004a, 0x0ef7, 0x0ef7, 0x0002, 0x004a, 0x0f17, + 0x0f17, 0x0003, 0x065a, 0x0000, 0x065d, 0x0001, 0x0012, 0x0e71, + 0x0002, 0x0660, 0x0664, 0x0002, 0x004a, 0x0f35, 0x0f35, 0x0002, + // Entry 37740 - 3777F + 0x004a, 0x0f4c, 0x0f4c, 0x0003, 0x066c, 0x0000, 0x066f, 0x0001, + 0x0012, 0x0e71, 0x0002, 0x0672, 0x0676, 0x0002, 0x004a, 0x0f35, + 0x0f35, 0x0002, 0x004a, 0x0f4c, 0x0f4c, 0x0001, 0x067c, 0x0001, + 0x004a, 0x0f61, 0x0001, 0x0681, 0x0001, 0x004a, 0x0f61, 0x0001, + 0x0686, 0x0001, 0x004a, 0x0f61, 0x0004, 0x068e, 0x0693, 0x0698, + 0x06a7, 0x0003, 0x0000, 0x1dc7, 0x39fb, 0x3a02, 0x0003, 0x004a, + 0x0f75, 0x0f80, 0x0f94, 0x0002, 0x0000, 0x069b, 0x0003, 0x0000, + 0x06a2, 0x069f, 0x0001, 0x004a, 0x0fb0, 0x0003, 0x004a, 0xffff, + // Entry 37780 - 377BF + 0x0fe8, 0x100b, 0x0002, 0x0000, 0x06aa, 0x0003, 0x0744, 0x07da, + 0x06ae, 0x0094, 0x004a, 0x1034, 0x1052, 0x1071, 0x1092, 0x10eb, + 0x1167, 0x11c7, 0x121b, 0x126e, 0x12d4, 0x1333, 0xffff, 0x13a7, + 0x1405, 0x1461, 0x14d6, 0x1556, 0x15b8, 0x1625, 0x16c2, 0x177b, + 0x1822, 0x18c6, 0x1930, 0x1992, 0x19ec, 0x1a00, 0x1a32, 0x1a80, + 0x1acc, 0x1b24, 0x1b58, 0x1bb2, 0x1c0a, 0x1c72, 0x1cd0, 0x1cf1, + 0x1d26, 0x1d8b, 0x1df8, 0x1e36, 0x1e4e, 0x1e76, 0x1eb6, 0x1f12, + 0x1f49, 0x1fbc, 0x2014, 0x2061, 0x20f0, 0x2180, 0x21ca, 0x21f5, + // Entry 377C0 - 377FF + 0x2234, 0x2252, 0x2284, 0x22ca, 0x22eb, 0x232c, 0x23b9, 0x2425, + 0x244c, 0x2489, 0x2504, 0x2570, 0x25b2, 0x25ce, 0x25f7, 0x262b, + 0x264e, 0x2673, 0x26ae, 0x2706, 0x276e, 0x27ce, 0xffff, 0x280c, + 0x2831, 0x2876, 0x28c8, 0x2904, 0x2962, 0x297c, 0x29b6, 0x2a0e, + 0x2a49, 0x2a93, 0x2aab, 0x2ac7, 0x2ae3, 0x2b22, 0x2b70, 0x2bb6, + 0x2c5e, 0x2cf6, 0x2d70, 0x2dc2, 0x2ddc, 0x2df6, 0x2e2f, 0x2eb4, + 0x2f35, 0x2f99, 0x2fb1, 0x3004, 0x30a6, 0x311e, 0x317e, 0x31cc, + 0x31e6, 0x322a, 0x3290, 0x32f6, 0x3348, 0x3394, 0x3408, 0x3424, + // Entry 37800 - 3783F + 0x3440, 0x3456, 0x346e, 0x34a2, 0xffff, 0x3506, 0x3554, 0x357f, + 0x359b, 0x35c4, 0x35e5, 0x35ff, 0x3617, 0x3647, 0x368d, 0x36ab, + 0x36e3, 0x3731, 0x3769, 0x37c7, 0x37fb, 0x3863, 0x38d7, 0x392d, + 0x396f, 0x39ef, 0x3a45, 0x3a5f, 0x3a7a, 0x3abc, 0x3b24, 0x0094, + 0x004a, 0xffff, 0xffff, 0xffff, 0xffff, 0x10c6, 0x114f, 0x11b1, + 0x120d, 0x1251, 0x12c2, 0x1312, 0xffff, 0x138f, 0x13f1, 0x1447, + 0x14af, 0x153e, 0x15a0, 0x1602, 0x1685, 0x1756, 0x17f9, 0x18a8, + 0x191c, 0x1972, 0xffff, 0xffff, 0x1a18, 0xffff, 0x1aad, 0xffff, + // Entry 37840 - 3787F + 0x1b42, 0x1b9e, 0x1bf4, 0x1c50, 0xffff, 0xffff, 0x1d0e, 0x1d70, + 0x1de6, 0xffff, 0xffff, 0xffff, 0x1e95, 0xffff, 0x1f2c, 0x1f9d, + 0xffff, 0x203e, 0x20c1, 0x2168, 0xffff, 0xffff, 0xffff, 0xffff, + 0x226e, 0xffff, 0xffff, 0x2307, 0x2390, 0xffff, 0xffff, 0x2468, + 0x24e5, 0x255c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x269c, 0x26ec, 0x2754, 0x27bc, 0xffff, 0xffff, 0xffff, 0x285a, + 0xffff, 0x28e2, 0xffff, 0xffff, 0x2997, 0xffff, 0x2a31, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2b08, 0xffff, 0x2b86, 0x2c30, 0x2cd4, + // Entry 37880 - 378BF + 0x2d54, 0xffff, 0xffff, 0xffff, 0x2e0a, 0x2e93, 0x2f10, 0xffff, + 0xffff, 0x2fd2, 0x3082, 0x3108, 0x3164, 0xffff, 0xffff, 0x3210, + 0x3278, 0x32da, 0xffff, 0x3367, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x348a, 0xffff, 0x34ec, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x3631, 0xffff, 0xffff, 0x36c9, 0xffff, + 0x3747, 0xffff, 0x37e3, 0x3845, 0x38b9, 0xffff, 0x394b, 0x39d1, + 0xffff, 0xffff, 0xffff, 0x3aa8, 0x3afe, 0x0094, 0x004a, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1121, 0x1190, 0x11ee, 0x123a, 0x129c, + // Entry 378C0 - 378FF + 0x12f7, 0x1365, 0xffff, 0x13d0, 0x142a, 0x148c, 0x150e, 0x157f, + 0x15e1, 0x1659, 0x1710, 0x17be, 0x1869, 0x18f5, 0x1955, 0x19c3, + 0xffff, 0xffff, 0x1a5d, 0xffff, 0x1afc, 0xffff, 0x1b7f, 0x1bd7, + 0x1c31, 0x1ca5, 0xffff, 0xffff, 0x1d4f, 0x1db7, 0x1e1b, 0xffff, + 0xffff, 0xffff, 0x1ee8, 0xffff, 0x1f77, 0x1fec, 0xffff, 0x2095, + 0x2130, 0x21a9, 0xffff, 0xffff, 0xffff, 0xffff, 0x22ab, 0xffff, + 0xffff, 0x2362, 0x23f3, 0xffff, 0xffff, 0x24bb, 0x2534, 0x2595, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x26d1, 0x2731, + // Entry 37900 - 3793F + 0x2799, 0x27f1, 0xffff, 0xffff, 0xffff, 0x28a3, 0xffff, 0x2937, + 0xffff, 0xffff, 0x29e6, 0xffff, 0x2a72, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2b4d, 0xffff, 0x2bf7, 0x2c9d, 0x2d29, 0x2d9d, 0xffff, + 0xffff, 0xffff, 0x2e65, 0x2ee6, 0x2f6b, 0xffff, 0xffff, 0x3047, + 0x30db, 0x3145, 0x31a9, 0xffff, 0xffff, 0x3255, 0x32b9, 0x3323, + 0xffff, 0x33d2, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x34cb, + 0xffff, 0x3531, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x366e, 0xffff, 0xffff, 0x370e, 0xffff, 0x379c, 0xffff, + // Entry 37940 - 3797F + 0x3824, 0x3892, 0x3906, 0xffff, 0x39a4, 0x3a1e, 0xffff, 0xffff, + 0xffff, 0x3ae1, 0x3b5b, 0x0003, 0x0004, 0x05d7, 0x0a30, 0x0012, + 0x0017, 0x0000, 0x0030, 0x0000, 0x00b7, 0x0000, 0x013e, 0x0169, + 0x03bd, 0x0441, 0x04bf, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x053d, 0x05bb, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x001d, + 0x0003, 0x0026, 0x002b, 0x0021, 0x0001, 0x0023, 0x0001, 0x004b, + 0x0000, 0x0001, 0x0028, 0x0001, 0x004b, 0x0023, 0x0001, 0x002d, + 0x0001, 0x004b, 0x0023, 0x0005, 0x0036, 0x0000, 0x0000, 0x0000, + // Entry 37980 - 379BF + 0x00a1, 0x0002, 0x0039, 0x006d, 0x0003, 0x003d, 0x004d, 0x005d, + 0x000e, 0x004b, 0xffff, 0x0031, 0x003b, 0x0048, 0x0058, 0x006b, + 0x0078, 0x0088, 0x009e, 0x00b4, 0x00c7, 0x00d7, 0x00e4, 0x00f7, + 0x000e, 0x004b, 0xffff, 0x0104, 0x0108, 0x010c, 0x0110, 0x0114, + 0x0118, 0x011c, 0x0120, 0x0124, 0x0128, 0x012f, 0x0136, 0x013d, + 0x000e, 0x004b, 0xffff, 0x0031, 0x003b, 0x0048, 0x0058, 0x006b, + 0x0078, 0x0088, 0x009e, 0x00b4, 0x00c7, 0x00d7, 0x00e4, 0x00f7, + 0x0003, 0x0071, 0x0081, 0x0091, 0x000e, 0x004b, 0xffff, 0x0031, + // Entry 379C0 - 379FF + 0x003b, 0x0048, 0x0058, 0x006b, 0x0078, 0x0088, 0x009e, 0x00b4, + 0x00c7, 0x00d7, 0x00e4, 0x00f7, 0x000e, 0x004b, 0xffff, 0x0104, + 0x0108, 0x010c, 0x0110, 0x0114, 0x0118, 0x011c, 0x0120, 0x0124, + 0x0128, 0x012f, 0x0136, 0x013d, 0x000e, 0x004b, 0xffff, 0x0031, + 0x003b, 0x0048, 0x0058, 0x006b, 0x0078, 0x0088, 0x009e, 0x00b4, + 0x00c7, 0x00d7, 0x00e4, 0x00f7, 0x0003, 0x00ab, 0x00b1, 0x00a5, + 0x0001, 0x00a7, 0x0002, 0x004b, 0x0144, 0x014f, 0x0001, 0x00ad, + 0x0002, 0x004b, 0x0144, 0x014f, 0x0001, 0x00b3, 0x0002, 0x004b, + // Entry 37A00 - 37A3F + 0x0144, 0x014f, 0x0005, 0x00bd, 0x0000, 0x0000, 0x0000, 0x0128, + 0x0002, 0x00c0, 0x00f4, 0x0003, 0x00c4, 0x00d4, 0x00e4, 0x000e, + 0x004b, 0xffff, 0x015a, 0x0173, 0x0189, 0x0199, 0x01ac, 0x01b6, + 0x01cc, 0x01e2, 0x01fb, 0x020e, 0x021b, 0x022e, 0x0247, 0x000e, + 0x004b, 0xffff, 0x0104, 0x0108, 0x010c, 0x0110, 0x0114, 0x0118, + 0x011c, 0x0120, 0x0124, 0x0128, 0x012f, 0x0136, 0x013d, 0x000e, + 0x004b, 0xffff, 0x015a, 0x0173, 0x0189, 0x0199, 0x01ac, 0x01b6, + 0x01cc, 0x01e2, 0x01fb, 0x020e, 0x021b, 0x022e, 0x0247, 0x0003, + // Entry 37A40 - 37A7F + 0x00f8, 0x0108, 0x0118, 0x000e, 0x004b, 0xffff, 0x015a, 0x0173, + 0x0189, 0x0199, 0x01ac, 0x01b6, 0x01cc, 0x01e2, 0x01fb, 0x020e, + 0x021b, 0x022e, 0x0247, 0x000e, 0x004b, 0xffff, 0x0104, 0x0108, + 0x010c, 0x0110, 0x0114, 0x0118, 0x011c, 0x0120, 0x0124, 0x0128, + 0x012f, 0x0136, 0x013d, 0x000e, 0x004b, 0xffff, 0x015a, 0x0173, + 0x0189, 0x0199, 0x01ac, 0x01b6, 0x01cc, 0x01e2, 0x01fb, 0x020e, + 0x021b, 0x022e, 0x0247, 0x0003, 0x0132, 0x0138, 0x012c, 0x0001, + 0x012e, 0x0002, 0x004b, 0x0144, 0x014f, 0x0001, 0x0134, 0x0002, + // Entry 37A80 - 37ABF + 0x004b, 0x0144, 0x014f, 0x0001, 0x013a, 0x0002, 0x004b, 0x0144, + 0x014f, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0147, + 0x0000, 0x0158, 0x0004, 0x0155, 0x014f, 0x014c, 0x0152, 0x0001, + 0x000a, 0x042e, 0x0001, 0x000a, 0x0440, 0x0001, 0x0002, 0x0044, + 0x0001, 0x0000, 0x240c, 0x0004, 0x0166, 0x0160, 0x015d, 0x0163, + 0x0001, 0x004b, 0x025d, 0x0001, 0x004b, 0x025d, 0x0001, 0x0006, + 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, 0x0172, 0x01d7, 0x022e, + 0x0263, 0x0370, 0x038a, 0x039b, 0x03ac, 0x0002, 0x0175, 0x01a6, + // Entry 37AC0 - 37AFF + 0x0003, 0x0179, 0x0188, 0x0197, 0x000d, 0x004b, 0xffff, 0x0275, + 0x0282, 0x0295, 0x02a5, 0x02b5, 0x02bc, 0x02c6, 0x02d3, 0x02da, + 0x02ed, 0x02fd, 0x0313, 0x000d, 0x004b, 0xffff, 0x0323, 0x032a, + 0x0331, 0x0338, 0x02b5, 0x033c, 0x0343, 0x034a, 0x034e, 0x034a, + 0x0352, 0x0359, 0x000d, 0x003f, 0xffff, 0x0043, 0x005c, 0x4368, + 0x008b, 0x4378, 0x437f, 0x4389, 0x4396, 0x00d2, 0x00eb, 0x0101, + 0x011d, 0x0003, 0x01aa, 0x01b9, 0x01c8, 0x000d, 0x004b, 0xffff, + 0x0275, 0x0282, 0x0360, 0x02a5, 0x0370, 0x0377, 0x0381, 0x02d3, + // Entry 37B00 - 37B3F + 0x02da, 0x02ed, 0x02fd, 0x0313, 0x000d, 0x004b, 0xffff, 0x0323, + 0x032a, 0x0331, 0x0338, 0x0370, 0x033c, 0x0343, 0x034a, 0x034e, + 0x034a, 0x0352, 0x0359, 0x000d, 0x003f, 0xffff, 0x0043, 0x005c, + 0x43a6, 0x008b, 0x43b6, 0x43bd, 0x43c7, 0x4396, 0x00d2, 0x00eb, + 0x0101, 0x011d, 0x0002, 0x01da, 0x0204, 0x0005, 0x01e0, 0x01e9, + 0x01fb, 0x0000, 0x01f2, 0x0007, 0x002d, 0x0233, 0x22c6, 0x22d0, + 0x22dd, 0x22e7, 0x22f4, 0x027b, 0x0007, 0x000c, 0x0246, 0x4e4f, + 0x024e, 0x0255, 0x4e56, 0x4e5d, 0x4e64, 0x0007, 0x000c, 0x0246, + // Entry 37B40 - 37B7F + 0x4e4f, 0x024e, 0x0255, 0x4e56, 0x4e5d, 0x4e64, 0x0007, 0x002d, + 0x0285, 0x0298, 0x2304, 0x231a, 0x232d, 0x02ea, 0x0303, 0x0005, + 0x020a, 0x0213, 0x0225, 0x0000, 0x021c, 0x0007, 0x002d, 0x0233, + 0x22c6, 0x22d0, 0x22dd, 0x22e7, 0x22f4, 0x027b, 0x0007, 0x000c, + 0x0246, 0x4e4f, 0x024e, 0x0255, 0x4e56, 0x4e5d, 0x4e64, 0x0007, + 0x000c, 0x0246, 0x4e4f, 0x024e, 0x0255, 0x4e56, 0x4e5d, 0x4e64, + 0x0007, 0x002d, 0x0285, 0x0298, 0x2304, 0x231a, 0x232d, 0x02ea, + 0x0303, 0x0002, 0x0231, 0x024a, 0x0003, 0x0235, 0x023c, 0x0243, + // Entry 37B80 - 37BBF + 0x0005, 0x004b, 0xffff, 0x038e, 0x0398, 0x03a2, 0x03ac, 0x0005, + 0x004b, 0xffff, 0x0104, 0x0108, 0x010c, 0x0110, 0x0005, 0x004b, + 0xffff, 0x03b6, 0x03d9, 0x0402, 0x0425, 0x0003, 0x024e, 0x0255, + 0x025c, 0x0005, 0x004b, 0xffff, 0x038e, 0x0398, 0x03a2, 0x03ac, + 0x0005, 0x004b, 0xffff, 0x0104, 0x0108, 0x010c, 0x0110, 0x0005, + 0x004b, 0xffff, 0x03b6, 0x03d9, 0x0402, 0x0425, 0x0002, 0x0266, + 0x02eb, 0x0003, 0x026a, 0x0295, 0x02c0, 0x000c, 0x027a, 0x0280, + 0x0277, 0x0283, 0x0289, 0x028c, 0x0292, 0x027d, 0x0286, 0x0000, + // Entry 37BC0 - 37BFF + 0x0000, 0x028f, 0x0001, 0x004b, 0x044b, 0x0001, 0x003f, 0x0207, + 0x0001, 0x004b, 0x0467, 0x0001, 0x004b, 0x0480, 0x0001, 0x004b, + 0x0489, 0x0001, 0x004b, 0x0496, 0x0001, 0x004b, 0x04a3, 0x0001, + 0x004b, 0x04b3, 0x0001, 0x004b, 0x04cf, 0x0001, 0x004b, 0x04e5, + 0x000c, 0x02a5, 0x02ab, 0x02a2, 0x02ae, 0x02b4, 0x02b7, 0x02bd, + 0x02a8, 0x02b1, 0x0000, 0x0000, 0x02ba, 0x0001, 0x004b, 0x04f5, + 0x0001, 0x004b, 0x034e, 0x0001, 0x004b, 0x0501, 0x0001, 0x004b, + 0x0508, 0x0001, 0x004b, 0x050f, 0x0001, 0x004b, 0x034e, 0x0001, + // Entry 37C00 - 37C3F + 0x004b, 0x0501, 0x0001, 0x004b, 0x0508, 0x0001, 0x004b, 0x0513, + 0x0001, 0x004b, 0x051a, 0x000c, 0x02d0, 0x02d6, 0x02cd, 0x02d9, + 0x02df, 0x02e2, 0x02e8, 0x02d3, 0x02dc, 0x0000, 0x0000, 0x02e5, + 0x0001, 0x004b, 0x044b, 0x0001, 0x003f, 0x0207, 0x0001, 0x004b, + 0x0467, 0x0001, 0x004b, 0x0480, 0x0001, 0x004b, 0x0489, 0x0001, + 0x004b, 0x0496, 0x0001, 0x004b, 0x04a3, 0x0001, 0x004b, 0x04b3, + 0x0001, 0x004b, 0x04cf, 0x0001, 0x004b, 0x04e5, 0x0003, 0x02ef, + 0x031a, 0x0345, 0x000c, 0x02ff, 0x0305, 0x02fc, 0x0308, 0x030e, + // Entry 37C40 - 37C7F + 0x0311, 0x0317, 0x0302, 0x030b, 0x0000, 0x0000, 0x0314, 0x0001, + 0x004b, 0x044b, 0x0001, 0x003f, 0x0207, 0x0001, 0x004b, 0x0467, + 0x0001, 0x004b, 0x0480, 0x0001, 0x004b, 0x0489, 0x0001, 0x004b, + 0x0496, 0x0001, 0x004b, 0x04a3, 0x0001, 0x004b, 0x04b3, 0x0001, + 0x004b, 0x04cf, 0x0001, 0x004b, 0x04e5, 0x000c, 0x032a, 0x0330, + 0x0327, 0x0333, 0x0339, 0x033c, 0x0342, 0x032d, 0x0336, 0x0000, + 0x0000, 0x033f, 0x0001, 0x004b, 0x04f5, 0x0001, 0x003f, 0x0207, + 0x0001, 0x000c, 0x4e3d, 0x0001, 0x004b, 0x0480, 0x0001, 0x004b, + // Entry 37C80 - 37CBF + 0x050f, 0x0001, 0x004b, 0x034e, 0x0001, 0x004b, 0x0501, 0x0001, + 0x004b, 0x0508, 0x0001, 0x004b, 0x0513, 0x0001, 0x004b, 0x04e5, + 0x000c, 0x0355, 0x035b, 0x0352, 0x035e, 0x0364, 0x0367, 0x036d, + 0x0358, 0x0361, 0x0000, 0x0000, 0x036a, 0x0001, 0x004b, 0x044b, + 0x0001, 0x003f, 0x0207, 0x0001, 0x004b, 0x0467, 0x0001, 0x004b, + 0x0480, 0x0001, 0x004b, 0x0489, 0x0001, 0x004b, 0x0496, 0x0001, + 0x004b, 0x04a3, 0x0001, 0x004b, 0x04b3, 0x0001, 0x004b, 0x04cf, + 0x0001, 0x004b, 0x04e5, 0x0003, 0x037f, 0x0000, 0x0374, 0x0002, + // Entry 37CC0 - 37CFF + 0x0377, 0x037b, 0x0002, 0x004b, 0x0521, 0x0566, 0x0002, 0x004b, + 0x0543, 0x0579, 0x0002, 0x0382, 0x0386, 0x0002, 0x004b, 0x0598, + 0x05c6, 0x0002, 0x004b, 0x05aa, 0x05d0, 0x0004, 0x0398, 0x0392, + 0x038f, 0x0395, 0x0001, 0x0005, 0x0615, 0x0001, 0x0005, 0x0625, + 0x0001, 0x0002, 0x0282, 0x0001, 0x0000, 0x2418, 0x0004, 0x03a9, + 0x03a3, 0x03a0, 0x03a6, 0x0001, 0x0002, 0x04e3, 0x0001, 0x0002, + 0x04f2, 0x0001, 0x0002, 0x04fe, 0x0001, 0x0002, 0x0508, 0x0004, + 0x03ba, 0x03b4, 0x03b1, 0x03b7, 0x0001, 0x004b, 0x05e6, 0x0001, + // Entry 37D00 - 37D3F + 0x004b, 0x05e6, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, + 0x0005, 0x03c3, 0x0000, 0x0000, 0x0000, 0x042e, 0x0002, 0x03c6, + 0x03fa, 0x0003, 0x03ca, 0x03da, 0x03ea, 0x000e, 0x004b, 0x0670, + 0x05fb, 0x060b, 0x061e, 0x0634, 0x0644, 0x0654, 0x0663, 0x0680, + 0x0690, 0x069d, 0x06ad, 0x06bd, 0x06c4, 0x000e, 0x004b, 0x011c, + 0x0104, 0x0108, 0x010c, 0x0110, 0x0114, 0x0118, 0x011c, 0x0120, + 0x0124, 0x0128, 0x012f, 0x0136, 0x013d, 0x000e, 0x004b, 0x0670, + 0x05fb, 0x060b, 0x061e, 0x0634, 0x0644, 0x0654, 0x0663, 0x0680, + // Entry 37D40 - 37D7F + 0x0690, 0x069d, 0x06ad, 0x06bd, 0x06c4, 0x0003, 0x03fe, 0x040e, + 0x041e, 0x000e, 0x004b, 0x0670, 0x05fb, 0x060b, 0x061e, 0x0634, + 0x0644, 0x0654, 0x0663, 0x0680, 0x0690, 0x069d, 0x06ad, 0x06bd, + 0x06c4, 0x000e, 0x004b, 0x011c, 0x0104, 0x0108, 0x010c, 0x0110, + 0x0114, 0x0118, 0x011c, 0x0120, 0x0124, 0x0128, 0x012f, 0x0136, + 0x013d, 0x000e, 0x004b, 0x0670, 0x05fb, 0x060b, 0x061e, 0x0634, + 0x0644, 0x0654, 0x0663, 0x0680, 0x0690, 0x069d, 0x06ad, 0x06bd, + 0x06c4, 0x0003, 0x0437, 0x043c, 0x0432, 0x0001, 0x0434, 0x0001, + // Entry 37D80 - 37DBF + 0x004b, 0x06d1, 0x0001, 0x0439, 0x0001, 0x0000, 0x04ef, 0x0001, + 0x043e, 0x0001, 0x0000, 0x04ef, 0x0005, 0x0447, 0x0000, 0x0000, + 0x0000, 0x04ac, 0x0002, 0x044a, 0x047b, 0x0003, 0x044e, 0x045d, + 0x046c, 0x000d, 0x002d, 0xffff, 0x04c1, 0x04d1, 0x04e1, 0x2343, + 0x0507, 0x2350, 0x2360, 0x0543, 0x2373, 0x0572, 0x057c, 0x0586, + 0x000d, 0x004b, 0xffff, 0x0104, 0x0108, 0x010c, 0x0110, 0x0114, + 0x0118, 0x011c, 0x0120, 0x0124, 0x0128, 0x012f, 0x0136, 0x000d, + 0x002d, 0xffff, 0x04c1, 0x04d1, 0x04e1, 0x2343, 0x0507, 0x2350, + // Entry 37DC0 - 37DFF + 0x2360, 0x0543, 0x2373, 0x0572, 0x057c, 0x0586, 0x0003, 0x047f, + 0x048e, 0x049d, 0x000d, 0x002d, 0xffff, 0x04c1, 0x04d1, 0x04e1, + 0x2343, 0x0507, 0x2350, 0x2360, 0x0543, 0x2373, 0x0572, 0x057c, + 0x0586, 0x000d, 0x004b, 0xffff, 0x0104, 0x0108, 0x010c, 0x0110, + 0x0114, 0x0118, 0x011c, 0x0120, 0x0124, 0x0128, 0x012f, 0x0136, + 0x000d, 0x002d, 0xffff, 0x04c1, 0x04d1, 0x04e1, 0x2343, 0x0507, + 0x2350, 0x2360, 0x0543, 0x2373, 0x0572, 0x057c, 0x0586, 0x0003, + 0x04b5, 0x04ba, 0x04b0, 0x0001, 0x04b2, 0x0001, 0x002d, 0x059c, + // Entry 37E00 - 37E3F + 0x0001, 0x04b7, 0x0001, 0x002d, 0x059c, 0x0001, 0x04bc, 0x0001, + 0x002d, 0x059c, 0x0005, 0x04c5, 0x0000, 0x0000, 0x0000, 0x052a, + 0x0002, 0x04c8, 0x04f9, 0x0003, 0x04cc, 0x04db, 0x04ea, 0x000d, + 0x004b, 0xffff, 0x06f1, 0x06fc, 0x0704, 0x0713, 0x0723, 0x0733, + 0x0744, 0x074f, 0x075d, 0x0765, 0x0776, 0x0788, 0x000d, 0x004b, + 0xffff, 0x0104, 0x0108, 0x010c, 0x0110, 0x0114, 0x0118, 0x011c, + 0x0120, 0x0124, 0x0128, 0x012f, 0x0136, 0x000d, 0x004b, 0xffff, + 0x079a, 0x07aa, 0x0704, 0x0713, 0x07b4, 0x07c9, 0x07df, 0x07ec, + // Entry 37E40 - 37E7F + 0x07fc, 0x080c, 0x081f, 0x0839, 0x0003, 0x04fd, 0x050c, 0x051b, + 0x000d, 0x004b, 0xffff, 0x06f1, 0x06fc, 0x0704, 0x0713, 0x0723, + 0x0733, 0x0744, 0x074f, 0x075d, 0x0765, 0x0776, 0x0788, 0x000d, + 0x004b, 0xffff, 0x0104, 0x0108, 0x010c, 0x0110, 0x0114, 0x0118, + 0x011c, 0x0120, 0x0124, 0x0128, 0x012f, 0x0136, 0x000d, 0x004b, + 0xffff, 0x079a, 0x07aa, 0x0704, 0x0713, 0x07b4, 0x07c9, 0x07df, + 0x07ec, 0x07fc, 0x080c, 0x081f, 0x0839, 0x0003, 0x0533, 0x0538, + 0x052e, 0x0001, 0x0530, 0x0001, 0x004b, 0x0853, 0x0001, 0x0535, + // Entry 37E80 - 37EBF + 0x0001, 0x004b, 0x0870, 0x0001, 0x053a, 0x0001, 0x004b, 0x0870, + 0x0005, 0x0543, 0x0000, 0x0000, 0x0000, 0x05a8, 0x0002, 0x0546, + 0x0577, 0x0003, 0x054a, 0x0559, 0x0568, 0x000d, 0x004b, 0xffff, + 0x087c, 0x0892, 0x08b7, 0x08ca, 0x08d4, 0x08e7, 0x0900, 0x0910, + 0x091d, 0x092a, 0x0931, 0x0944, 0x000d, 0x004b, 0xffff, 0x0104, + 0x0108, 0x010c, 0x0110, 0x0114, 0x0118, 0x011c, 0x0120, 0x0124, + 0x0128, 0x012f, 0x0136, 0x000d, 0x004b, 0xffff, 0x087c, 0x0892, + 0x08b7, 0x08ca, 0x08d4, 0x08e7, 0x0900, 0x0910, 0x091d, 0x092a, + // Entry 37EC0 - 37EFF + 0x0931, 0x0944, 0x0003, 0x057b, 0x058a, 0x0599, 0x000d, 0x004b, + 0xffff, 0x087c, 0x0892, 0x08b7, 0x08ca, 0x08d4, 0x08e7, 0x0900, + 0x0910, 0x091d, 0x092a, 0x0931, 0x0944, 0x000d, 0x004b, 0xffff, + 0x0104, 0x0108, 0x010c, 0x0110, 0x0114, 0x0118, 0x011c, 0x0120, + 0x0124, 0x0128, 0x012f, 0x0136, 0x000d, 0x004b, 0xffff, 0x087c, + 0x0892, 0x08b7, 0x08ca, 0x08d4, 0x08e7, 0x0900, 0x0910, 0x091d, + 0x092a, 0x0931, 0x0944, 0x0003, 0x05b1, 0x05b6, 0x05ac, 0x0001, + 0x05ae, 0x0001, 0x0000, 0x1a1d, 0x0001, 0x05b3, 0x0001, 0x0000, + // Entry 37F00 - 37F3F + 0x1a1d, 0x0001, 0x05b8, 0x0001, 0x0000, 0x1a1d, 0x0005, 0x0000, + 0x0000, 0x0000, 0x0000, 0x05c1, 0x0003, 0x05cb, 0x05d1, 0x05c5, + 0x0001, 0x05c7, 0x0002, 0x004b, 0x0957, 0x0974, 0x0001, 0x05cd, + 0x0002, 0x004b, 0x0957, 0x0974, 0x0001, 0x05d3, 0x0002, 0x004b, + 0x0957, 0x0974, 0x0042, 0x061a, 0x061f, 0x0624, 0x0629, 0x0640, + 0x0657, 0x066e, 0x0685, 0x069c, 0x06b3, 0x06ca, 0x06e1, 0x06f8, + 0x0713, 0x072e, 0x0749, 0x074e, 0x0753, 0x0758, 0x076f, 0x0781, + 0x0793, 0x0798, 0x079d, 0x07a2, 0x07a7, 0x07ac, 0x07b1, 0x07b6, + // Entry 37F40 - 37F7F + 0x07bb, 0x07c0, 0x07d4, 0x07e8, 0x07fc, 0x0810, 0x0824, 0x0838, + 0x084c, 0x0860, 0x0874, 0x0888, 0x089c, 0x08b0, 0x08c4, 0x08d8, + 0x08ec, 0x0900, 0x0914, 0x0928, 0x093c, 0x0950, 0x0964, 0x0969, + 0x096e, 0x0973, 0x0989, 0x099b, 0x09ad, 0x09c3, 0x09d5, 0x09e7, + 0x09fd, 0x0a0f, 0x0a21, 0x0a26, 0x0a2b, 0x0001, 0x061c, 0x0001, + 0x002e, 0x00de, 0x0001, 0x0621, 0x0001, 0x002e, 0x00de, 0x0001, + 0x0626, 0x0001, 0x002e, 0x00de, 0x0003, 0x062d, 0x0630, 0x0635, + 0x0001, 0x002e, 0x00e8, 0x0003, 0x004b, 0x0984, 0x09a1, 0x09b5, + // Entry 37F80 - 37FBF + 0x0002, 0x0638, 0x063c, 0x0002, 0x004b, 0x0a08, 0x09d2, 0x0002, + 0x004b, 0x0a67, 0x0a41, 0x0003, 0x0644, 0x0647, 0x064c, 0x0001, + 0x002e, 0x00e8, 0x0003, 0x004b, 0x0984, 0x09a1, 0x09b5, 0x0002, + 0x064f, 0x0653, 0x0002, 0x004b, 0x0ab3, 0x0a90, 0x0002, 0x004b, + 0x0a67, 0x0a41, 0x0003, 0x065b, 0x065e, 0x0663, 0x0001, 0x002e, + 0x00e8, 0x0003, 0x004b, 0x0984, 0x09a1, 0x09b5, 0x0002, 0x0666, + 0x066a, 0x0002, 0x004b, 0x0a08, 0x09d2, 0x0002, 0x004b, 0x0a67, + 0x0a41, 0x0003, 0x0672, 0x0675, 0x067a, 0x0001, 0x002e, 0x0179, + // Entry 37FC0 - 37FFF + 0x0003, 0x004b, 0x0ad9, 0x0afc, 0x0b16, 0x0002, 0x067d, 0x0681, + 0x0002, 0x004b, 0x0b5f, 0x0b39, 0x0002, 0x004b, 0x0bb1, 0x0b88, + 0x0003, 0x0689, 0x068c, 0x0691, 0x0001, 0x002e, 0x0179, 0x0003, + 0x004b, 0x0ad9, 0x0afc, 0x0b16, 0x0002, 0x0694, 0x0698, 0x0002, + 0x004b, 0x0c16, 0x0bdd, 0x0002, 0x004b, 0x0bb1, 0x0b88, 0x0003, + 0x06a0, 0x06a3, 0x06a8, 0x0001, 0x002e, 0x0179, 0x0003, 0x004b, + 0x0ad9, 0x0afc, 0x0b16, 0x0002, 0x06ab, 0x06af, 0x0002, 0x004b, + 0x0b5f, 0x0b39, 0x0002, 0x004b, 0x0bb1, 0x0b88, 0x0003, 0x06b7, + // Entry 38000 - 3803F + 0x06ba, 0x06bf, 0x0001, 0x004b, 0x0c52, 0x0003, 0x004b, 0x0c62, + 0x0c82, 0x0c99, 0x0002, 0x06c2, 0x06c6, 0x0002, 0x004b, 0x0cf5, + 0x0cb9, 0x0002, 0x004b, 0x0d60, 0x0d34, 0x0003, 0x06ce, 0x06d1, + 0x06d6, 0x0001, 0x004b, 0x0c52, 0x0003, 0x004b, 0x0c62, 0x0c82, + 0x0c99, 0x0002, 0x06d9, 0x06dd, 0x0002, 0x004b, 0x0d8f, 0x0d8f, + 0x0002, 0x004b, 0x0d60, 0x0d34, 0x0003, 0x06e5, 0x06e8, 0x06ed, + 0x0001, 0x004b, 0x0c52, 0x0003, 0x004b, 0x0c62, 0x0c82, 0x0c99, + 0x0002, 0x06f0, 0x06f4, 0x0002, 0x004b, 0x0db8, 0x0d8f, 0x0002, + // Entry 38040 - 3807F + 0x004b, 0x0d60, 0x0d34, 0x0004, 0x06fd, 0x0700, 0x0705, 0x0710, + 0x0001, 0x004b, 0x0de4, 0x0003, 0x004b, 0x0df4, 0x0e14, 0x0e2b, + 0x0002, 0x0708, 0x070c, 0x0002, 0x004b, 0x0e74, 0x0e4b, 0x0002, + 0x004b, 0x0ecc, 0x0ea0, 0x0001, 0x004b, 0x0efb, 0x0004, 0x0718, + 0x071b, 0x0720, 0x072b, 0x0001, 0x004b, 0x0de4, 0x0003, 0x004b, + 0x0df4, 0x0e14, 0x0e2b, 0x0002, 0x0723, 0x0727, 0x0002, 0x004b, + 0x0f52, 0x0f16, 0x0002, 0x004b, 0x0ecc, 0x0ea0, 0x0001, 0x004b, + 0x0efb, 0x0004, 0x0733, 0x0736, 0x073b, 0x0746, 0x0001, 0x004b, + // Entry 38080 - 380BF + 0x0de4, 0x0003, 0x004b, 0x0df4, 0x0e14, 0x0e2b, 0x0002, 0x073e, + 0x0742, 0x0002, 0x004b, 0x0f52, 0x0f16, 0x0002, 0x004b, 0x0ecc, + 0x0ea0, 0x0001, 0x004b, 0x0efb, 0x0001, 0x074b, 0x0001, 0x004b, + 0x0f91, 0x0001, 0x0750, 0x0001, 0x004b, 0x0fbd, 0x0001, 0x0755, + 0x0001, 0x004b, 0x0fbd, 0x0003, 0x075c, 0x075f, 0x0764, 0x0001, + 0x004b, 0x0fe1, 0x0003, 0x003f, 0x0625, 0x43d4, 0x43db, 0x0002, + 0x0767, 0x076b, 0x0002, 0x004b, 0x1024, 0x0fee, 0x0002, 0x004b, + 0x1083, 0x105d, 0x0003, 0x0773, 0x0000, 0x0776, 0x0001, 0x004b, + // Entry 380C0 - 380FF + 0x0fe1, 0x0002, 0x0779, 0x077d, 0x0002, 0x004b, 0x1024, 0x10ac, + 0x0002, 0x004b, 0x1083, 0x105d, 0x0003, 0x0785, 0x0000, 0x0788, + 0x0001, 0x004b, 0x0fe1, 0x0002, 0x078b, 0x078f, 0x0002, 0x004b, + 0x10cf, 0x10ac, 0x0002, 0x004b, 0x1083, 0x105d, 0x0001, 0x0795, + 0x0001, 0x004b, 0x10f5, 0x0001, 0x079a, 0x0001, 0x004b, 0x10f5, + 0x0001, 0x079f, 0x0001, 0x004b, 0x10f5, 0x0001, 0x07a4, 0x0001, + 0x004b, 0x111b, 0x0001, 0x07a9, 0x0001, 0x004b, 0x111b, 0x0001, + 0x07ae, 0x0001, 0x004b, 0x111b, 0x0001, 0x07b3, 0x0001, 0x004b, + // Entry 38100 - 3813F + 0x1144, 0x0001, 0x07b8, 0x0001, 0x004b, 0x118c, 0x0001, 0x07bd, + 0x0001, 0x004b, 0x118c, 0x0003, 0x0000, 0x07c4, 0x07c9, 0x0003, + 0x004b, 0x11cc, 0x11ef, 0x1209, 0x0002, 0x07cc, 0x07d0, 0x0002, + 0x004b, 0x122c, 0x122c, 0x0002, 0x004b, 0x1282, 0x1259, 0x0003, + 0x0000, 0x07d8, 0x07dd, 0x0003, 0x004b, 0x12b1, 0x12cc, 0x12de, + 0x0002, 0x07e0, 0x07e4, 0x0002, 0x004b, 0x122c, 0x122c, 0x0002, + 0x004b, 0x1282, 0x1259, 0x0003, 0x0000, 0x07ec, 0x07f1, 0x0003, + 0x004b, 0x12f9, 0x130d, 0x1318, 0x0002, 0x07f4, 0x07f8, 0x0002, + // Entry 38140 - 3817F + 0x004b, 0x122c, 0x122c, 0x0002, 0x004b, 0x1282, 0x1259, 0x0003, + 0x0000, 0x0800, 0x0805, 0x0003, 0x004b, 0x132c, 0x134f, 0x1369, + 0x0002, 0x0808, 0x080c, 0x0002, 0x004b, 0x138c, 0x138c, 0x0002, + 0x004b, 0x13e2, 0x13b9, 0x0003, 0x0000, 0x0814, 0x0819, 0x0003, + 0x004b, 0x1411, 0x142c, 0x143e, 0x0002, 0x081c, 0x0820, 0x0002, + 0x004b, 0x138c, 0x138c, 0x0002, 0x004b, 0x13e2, 0x1459, 0x0003, + 0x0000, 0x0828, 0x082d, 0x0003, 0x004b, 0x1485, 0x149c, 0x14aa, + 0x0002, 0x0830, 0x0834, 0x0002, 0x004b, 0x138c, 0x138c, 0x0002, + // Entry 38180 - 381BF + 0x004b, 0x13e2, 0x1459, 0x0003, 0x0000, 0x083c, 0x0841, 0x0003, + 0x004b, 0x14c1, 0x14e7, 0x1504, 0x0002, 0x0844, 0x0848, 0x0002, + 0x004b, 0x152a, 0x152a, 0x0002, 0x004b, 0x1586, 0x155a, 0x0003, + 0x0000, 0x0850, 0x0855, 0x0003, 0x004b, 0x15b8, 0x15d6, 0x15eb, + 0x0002, 0x0858, 0x085c, 0x0002, 0x004b, 0x152a, 0x152a, 0x0002, + 0x004b, 0x1586, 0x1609, 0x0003, 0x0000, 0x0864, 0x0869, 0x0003, + 0x004b, 0x1638, 0x164f, 0x165d, 0x0002, 0x086c, 0x0870, 0x0002, + 0x004b, 0x152a, 0x152a, 0x0002, 0x004b, 0x1586, 0x155a, 0x0003, + // Entry 381C0 - 381FF + 0x0000, 0x0878, 0x087d, 0x0003, 0x004b, 0x1674, 0x1697, 0x16b1, + 0x0002, 0x0880, 0x0884, 0x0002, 0x004b, 0x16d4, 0x16d4, 0x0002, + 0x004b, 0x172a, 0x1701, 0x0003, 0x0000, 0x088c, 0x0891, 0x0003, + 0x004b, 0x1759, 0x1774, 0x1786, 0x0002, 0x0894, 0x0898, 0x0002, + 0x004b, 0x17a1, 0x17a1, 0x0002, 0x004b, 0x172a, 0x1701, 0x0003, + 0x0000, 0x08a0, 0x08a5, 0x0003, 0x004b, 0x17cb, 0x17e2, 0x17f0, + 0x0002, 0x08a8, 0x08ac, 0x0002, 0x004b, 0x16d4, 0x16d4, 0x0002, + 0x004b, 0x172a, 0x1701, 0x0003, 0x0000, 0x08b4, 0x08b9, 0x0003, + // Entry 38200 - 3823F + 0x004b, 0x1807, 0x182d, 0x184a, 0x0002, 0x08bc, 0x08c0, 0x0002, + 0x004b, 0x1870, 0x1870, 0x0002, 0x004b, 0x18cc, 0x18a0, 0x0003, + 0x0000, 0x08c8, 0x08cd, 0x0003, 0x004b, 0x18fe, 0x191c, 0x1931, + 0x0002, 0x08d0, 0x08d4, 0x0002, 0x004b, 0x1870, 0x1870, 0x0002, + 0x004b, 0x18cc, 0x18a0, 0x0003, 0x0000, 0x08dc, 0x08e1, 0x0003, + 0x004b, 0x194f, 0x1966, 0x1974, 0x0002, 0x08e4, 0x08e8, 0x0002, + 0x004b, 0x1870, 0x1870, 0x0002, 0x004b, 0x18cc, 0x18a0, 0x0003, + 0x0000, 0x08f0, 0x08f5, 0x0003, 0x004b, 0x198b, 0x19b4, 0x19d4, + // Entry 38240 - 3827F + 0x0002, 0x08f8, 0x08fc, 0x0002, 0x004b, 0x19fd, 0x19fd, 0x0002, + 0x004b, 0x1a5f, 0x1a30, 0x0003, 0x0000, 0x0904, 0x0909, 0x0003, + 0x004b, 0x1a94, 0x1ab5, 0x1acd, 0x0002, 0x090c, 0x0910, 0x0002, + 0x004b, 0x19fd, 0x19fd, 0x0002, 0x004b, 0x1a5f, 0x1a30, 0x0003, + 0x0000, 0x0918, 0x091d, 0x0003, 0x004b, 0x1a94, 0x1ab5, 0x1acd, + 0x0002, 0x0920, 0x0924, 0x0002, 0x004b, 0x19fd, 0x19fd, 0x0002, + 0x004b, 0x1a5f, 0x1a30, 0x0003, 0x0000, 0x092c, 0x0931, 0x0003, + 0x004b, 0x1aee, 0x1b11, 0x1b2b, 0x0002, 0x0934, 0x0938, 0x0002, + // Entry 38280 - 382BF + 0x004b, 0x1b4e, 0x1b4e, 0x0002, 0x004b, 0x1ba4, 0x1b7b, 0x0003, + 0x0000, 0x0940, 0x0945, 0x0003, 0x004b, 0x1bd3, 0x1bee, 0x1c00, + 0x0002, 0x0948, 0x094c, 0x0002, 0x004b, 0x1b4e, 0x1b4e, 0x0002, + 0x004b, 0x1ba4, 0x1b7b, 0x0003, 0x0000, 0x0954, 0x0959, 0x0003, + 0x004b, 0x1bd3, 0x1bee, 0x1c00, 0x0002, 0x095c, 0x0960, 0x0002, + 0x004b, 0x1b4e, 0x1b4e, 0x0002, 0x004b, 0x1ba4, 0x1b7b, 0x0001, + 0x0966, 0x0001, 0x004b, 0x1c1b, 0x0001, 0x096b, 0x0001, 0x004b, + 0x1c1b, 0x0001, 0x0970, 0x0001, 0x004b, 0x1c1b, 0x0003, 0x0977, + // Entry 382C0 - 382FF + 0x097a, 0x097e, 0x0001, 0x004b, 0x1c32, 0x0002, 0x004b, 0xffff, + 0x1c3c, 0x0002, 0x0981, 0x0985, 0x0002, 0x004b, 0x1c6c, 0x1c4c, + 0x0002, 0x004b, 0x1cb2, 0x1c8f, 0x0003, 0x098d, 0x0000, 0x0990, + 0x0001, 0x004b, 0x1c32, 0x0002, 0x0993, 0x0997, 0x0002, 0x004b, + 0x1c6c, 0x1c4c, 0x0002, 0x004b, 0x1cb2, 0x1c8f, 0x0003, 0x099f, + 0x0000, 0x09a2, 0x0001, 0x004b, 0x1c32, 0x0002, 0x09a5, 0x09a9, + 0x0002, 0x004b, 0x1d0b, 0x1cd8, 0x0002, 0x004b, 0x1cb2, 0x1c8f, + 0x0003, 0x09b1, 0x09b4, 0x09b8, 0x0001, 0x004b, 0x1d41, 0x0002, + // Entry 38300 - 3833F + 0x004b, 0xffff, 0x1d51, 0x0002, 0x09bb, 0x09bf, 0x0002, 0x004b, + 0x1d94, 0x1d6e, 0x0002, 0x004b, 0x1de6, 0x1dbd, 0x0003, 0x09c7, + 0x0000, 0x09ca, 0x0001, 0x004b, 0x1e12, 0x0002, 0x09cd, 0x09d1, + 0x0002, 0x004b, 0x1e1a, 0x1e1a, 0x0002, 0x004b, 0x1e3c, 0x1e3c, + 0x0003, 0x09d9, 0x0000, 0x09dc, 0x0001, 0x004b, 0x1e12, 0x0002, + 0x09df, 0x09e3, 0x0002, 0x004b, 0x1e1a, 0x1e1a, 0x0002, 0x004b, + 0x1e3c, 0x1e3c, 0x0003, 0x09eb, 0x09ee, 0x09f2, 0x0001, 0x003f, + 0x102b, 0x0002, 0x004b, 0xffff, 0x1e61, 0x0002, 0x09f5, 0x09f9, + // Entry 38340 - 3837F + 0x0002, 0x004b, 0x1e97, 0x1e71, 0x0002, 0x004b, 0x1ee9, 0x1ec0, + 0x0003, 0x0a01, 0x0000, 0x0a04, 0x0001, 0x004b, 0x1f15, 0x0002, + 0x0a07, 0x0a0b, 0x0002, 0x004b, 0x1f1d, 0x1f1d, 0x0002, 0x004b, + 0x1f39, 0x1f39, 0x0003, 0x0a13, 0x0000, 0x0a16, 0x0001, 0x004b, + 0x1f15, 0x0002, 0x0a19, 0x0a1d, 0x0002, 0x004b, 0x1f58, 0x1f1d, + 0x0002, 0x004b, 0x1f39, 0x1f39, 0x0001, 0x0a23, 0x0001, 0x004b, + 0x1f87, 0x0001, 0x0a28, 0x0001, 0x002e, 0x0fc2, 0x0001, 0x0a2d, + 0x0001, 0x002e, 0x0fc2, 0x0004, 0x0a35, 0x0a3a, 0x0a3f, 0x0a4e, + // Entry 38380 - 383BF + 0x0003, 0x0000, 0x1dc7, 0x3a4f, 0x3a58, 0x0003, 0x004b, 0x1fa7, + 0x1fb5, 0x1fe5, 0x0002, 0x0000, 0x0a42, 0x0003, 0x0000, 0x0a49, + 0x0a46, 0x0001, 0x003f, 0x10ac, 0x0003, 0x004c, 0xffff, 0x0000, + 0x0036, 0x0002, 0x0c35, 0x0a51, 0x0003, 0x0a55, 0x0b95, 0x0af5, + 0x009e, 0x004c, 0xffff, 0xffff, 0xffff, 0xffff, 0x0199, 0x025b, + 0x0387, 0x0416, 0x04b4, 0x055b, 0x05f0, 0x0685, 0x0716, 0x08e2, + 0x0977, 0x0a1b, 0x0b01, 0x0b9c, 0x0c3a, 0x0d1a, 0x0e33, 0x0f1c, + 0x100e, 0x10a0, 0x1132, 0xffff, 0xffff, 0x1210, 0xffff, 0x12ed, + // Entry 383C0 - 383FF + 0xffff, 0x13c4, 0x143e, 0x14ac, 0x1526, 0xffff, 0xffff, 0x1612, + 0x16a4, 0x173d, 0xffff, 0xffff, 0xffff, 0x1855, 0xffff, 0x190d, + 0x19cf, 0xffff, 0x1add, 0x1ba8, 0x1c4f, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1d8f, 0xffff, 0xffff, 0x1e84, 0x1f46, 0xffff, 0xffff, + 0x207e, 0x2128, 0x21bd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2385, 0x23ff, 0x249a, 0x2525, 0x259f, 0xffff, 0xffff, + 0x275f, 0xffff, 0x280b, 0xffff, 0xffff, 0x2940, 0xffff, 0x2a93, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2ba6, 0xffff, 0x2c3d, 0x2d14, + // Entry 38400 - 3843F + 0x2df4, 0x2e92, 0xffff, 0xffff, 0xffff, 0x2f66, 0x3031, 0x30d8, + 0xffff, 0xffff, 0x31de, 0x3307, 0x33c6, 0x3446, 0xffff, 0xffff, + 0x352c, 0x35be, 0x362c, 0xffff, 0x36ee, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x396b, 0x39e2, 0x3a67, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x3bfd, 0xffff, 0xffff, 0x3ccc, + 0xffff, 0x3d57, 0xffff, 0x3e3c, 0x3ec5, 0x3f72, 0xffff, 0x4027, + 0x40e6, 0xffff, 0xffff, 0xffff, 0x4220, 0x42b2, 0xffff, 0xffff, + 0x0063, 0x02f0, 0x0799, 0x0839, 0xffff, 0xffff, 0x29ea, 0x3870, + // Entry 38440 - 3847F + 0x009e, 0x004c, 0x00c7, 0x00f3, 0x0123, 0x0153, 0x01cc, 0x027b, + 0x03a7, 0x0439, 0x04da, 0x057b, 0x0610, 0x06a5, 0x0730, 0x0902, + 0x09a0, 0x0a5a, 0x0b27, 0x0bbf, 0x0c73, 0x0d66, 0x0e6f, 0x0f5b, + 0x1031, 0x10c3, 0x1158, 0x11cd, 0x11e7, 0x1239, 0x12b4, 0x1317, + 0x1394, 0x13db, 0x1455, 0x14c3, 0x154c, 0x15c1, 0x15eb, 0x1635, + 0x16c5, 0x175a, 0x17c9, 0x17e9, 0x182b, 0x1879, 0x18ea, 0x1940, + 0x1a02, 0x1a91, 0x1b13, 0x1bd2, 0x1c66, 0x1cbd, 0x1cea, 0x1d46, + 0x1d6c, 0x1db2, 0x1e21, 0x1e51, 0x1eb7, 0x1f7c, 0x203a, 0x2064, + // Entry 38480 - 384BF + 0x20a5, 0x214c, 0x21dd, 0x2246, 0x2276, 0x22a2, 0x22c8, 0x2301, + 0x2346, 0x239c, 0x2425, 0x24b0, 0x253c, 0x25fd, 0x26f0, 0x2726, + 0x277c, 0x27eb, 0x2843, 0x28dc, 0x291c, 0x2967, 0x2a66, 0x2ab0, + 0x2b13, 0x2b33, 0x2b50, 0x2b7c, 0x2bc3, 0x2c26, 0x2c73, 0x2d4d, + 0x2e1b, 0x2eaf, 0x2f12, 0x2f35, 0x2f4c, 0x2f9c, 0x3057, 0x3108, + 0x319d, 0x31b7, 0x3221, 0x3339, 0x33e3, 0x346c, 0x34e1, 0x34f8, + 0x354f, 0x35d5, 0x364f, 0x36be, 0x3738, 0x3807, 0x382a, 0x3847, + 0x392b, 0x394e, 0x3985, 0x39fc, 0x3a81, 0x3aea, 0x3b0a, 0x3b40, + // Entry 384C0 - 384FF + 0x3b6d, 0x3ba3, 0x3bc3, 0x3be0, 0x3c17, 0x3c80, 0x3cac, 0x3ce6, + 0x3d43, 0x3d8c, 0x3e1f, 0x3e5c, 0x3ef1, 0x3f92, 0x3ffb, 0x4059, + 0x4118, 0x41a5, 0x41cb, 0x41e9, 0x4243, 0x42de, 0x2011, 0x32d0, + 0x0077, 0x0310, 0x07bc, 0x085f, 0xffff, 0x2905, 0x2a01, 0x389c, + 0x009e, 0x004c, 0xffff, 0xffff, 0xffff, 0xffff, 0x0212, 0x02ae, + 0x03dd, 0x046f, 0x0513, 0x05ae, 0x0643, 0x06d4, 0x075d, 0x0935, + 0x09dc, 0x0aac, 0x0b60, 0x0bf5, 0x0cbf, 0x0dc5, 0x0ebe, 0x0fad, + 0x1067, 0x10f9, 0x1191, 0xffff, 0xffff, 0x1275, 0xffff, 0x1354, + // Entry 38500 - 3853F + 0xffff, 0x1405, 0x147f, 0x14ed, 0x1585, 0xffff, 0xffff, 0x166b, + 0x16f9, 0x178a, 0xffff, 0xffff, 0xffff, 0x18b0, 0xffff, 0x1986, + 0x1a48, 0xffff, 0x1b5c, 0x1c0f, 0x1c90, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1de8, 0xffff, 0xffff, 0x1efd, 0x1fc5, 0xffff, 0xffff, + 0x20df, 0x2183, 0x2210, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x23c6, 0x245e, 0x24e3, 0x2566, 0x266d, 0xffff, 0xffff, + 0x27ac, 0xffff, 0x288e, 0xffff, 0xffff, 0x29a1, 0xffff, 0x2ae0, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2bf3, 0xffff, 0x2cbc, 0x2d99, + // Entry 38540 - 3857F + 0x2e55, 0x2edf, 0xffff, 0xffff, 0xffff, 0x2fe5, 0x3090, 0x314b, + 0xffff, 0xffff, 0x3277, 0x337e, 0x3413, 0x34a5, 0xffff, 0xffff, + 0x3585, 0x35ff, 0x3685, 0xffff, 0x3798, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x39b2, 0x3a28, 0x3aae, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x3c44, 0xffff, 0xffff, 0x3d13, + 0xffff, 0x3dd4, 0xffff, 0x3e8f, 0x3f30, 0x3fc5, 0xffff, 0x409e, + 0x415d, 0xffff, 0xffff, 0xffff, 0x4279, 0x431d, 0xffff, 0xffff, + 0x009d, 0x0342, 0x07f1, 0x0897, 0xffff, 0xffff, 0x2a2a, 0x38da, + // Entry 38580 - 385BF + 0x0003, 0x0000, 0x0000, 0x0c39, 0x0042, 0x000b, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 385C0 - 385FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0003, 0x0004, 0x065e, 0x0a7d, 0x0012, 0x0017, 0x0030, 0x00ad, + 0x0000, 0x0134, 0x01bb, 0x01d4, 0x01ff, 0x0407, 0x04b0, 0x052e, + 0x0000, 0x0000, 0x0000, 0x0000, 0x05ac, 0x05c4, 0x0642, 0x0005, + 0x0000, 0x0000, 0x0000, 0x0000, 0x001d, 0x0003, 0x0026, 0x002b, + 0x0021, 0x0001, 0x0023, 0x0001, 0x0000, 0x0000, 0x0001, 0x0028, + 0x0001, 0x0000, 0x0000, 0x0001, 0x002d, 0x0001, 0x0000, 0x0000, + 0x0006, 0x0037, 0x0000, 0x0000, 0x0000, 0x0000, 0x009c, 0x0002, + // Entry 38600 - 3863F + 0x003a, 0x006b, 0x0003, 0x003e, 0x004d, 0x005c, 0x000d, 0x0006, + 0xffff, 0x001e, 0x432b, 0x432f, 0x42a5, 0x43e5, 0x42ad, 0x4333, + 0x4439, 0x433b, 0x43a9, 0x433f, 0x443d, 0x000d, 0x004d, 0xffff, + 0x0000, 0x0003, 0x0006, 0x0009, 0x000c, 0x000f, 0x0012, 0x0015, + 0x0018, 0x001b, 0x001e, 0x0021, 0x000d, 0x0006, 0xffff, 0x004e, + 0x0056, 0x432f, 0x42bf, 0x43e5, 0x42ad, 0x43f4, 0x4441, 0x4446, + 0x4450, 0x4458, 0x4461, 0x0003, 0x006f, 0x007e, 0x008d, 0x000d, + 0x0006, 0xffff, 0x001e, 0x432b, 0x432f, 0x42a5, 0x43e5, 0x42ad, + // Entry 38640 - 3867F + 0x4333, 0x4439, 0x433b, 0x43a9, 0x433f, 0x443d, 0x000d, 0x004d, + 0xffff, 0x0000, 0x0024, 0x0006, 0x0009, 0x000c, 0x000f, 0x0012, + 0x0015, 0x0018, 0x001b, 0x001e, 0x0021, 0x000d, 0x0006, 0xffff, + 0x004e, 0x0056, 0x432f, 0x42bf, 0x43e5, 0x42ad, 0x43f4, 0x4441, + 0x4446, 0x4450, 0x4458, 0x4461, 0x0004, 0x00aa, 0x00a4, 0x00a1, + 0x00a7, 0x0001, 0x001d, 0x0000, 0x0001, 0x001d, 0x0012, 0x0001, + 0x001d, 0x001e, 0x0001, 0x0000, 0x2406, 0x0005, 0x00b3, 0x0000, + 0x0000, 0x0000, 0x011e, 0x0002, 0x00b6, 0x00ea, 0x0003, 0x00ba, + // Entry 38680 - 386BF + 0x00ca, 0x00da, 0x000e, 0x0000, 0xffff, 0x03ce, 0x03d3, 0x03d8, + 0x03de, 0x2221, 0x2787, 0x278e, 0x03f9, 0x2797, 0x040b, 0x0411, + 0x0416, 0x242d, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, + 0x3a0c, 0x0422, 0x000e, 0x0000, 0xffff, 0x03ce, 0x03d3, 0x03d8, + 0x03de, 0x2221, 0x2787, 0x278e, 0x03f9, 0x2797, 0x040b, 0x0411, + 0x0416, 0x242d, 0x0003, 0x00ee, 0x00fe, 0x010e, 0x000e, 0x0000, + 0xffff, 0x03ce, 0x03d3, 0x03d8, 0x03de, 0x2221, 0x2787, 0x278e, + // Entry 386C0 - 386FF + 0x03f9, 0x2797, 0x040b, 0x0411, 0x0416, 0x242d, 0x000e, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x0000, + 0xffff, 0x03ce, 0x03d3, 0x03d8, 0x03de, 0x2221, 0x2787, 0x278e, + 0x03f9, 0x2797, 0x040b, 0x0411, 0x0416, 0x242d, 0x0003, 0x0128, + 0x012e, 0x0122, 0x0001, 0x0124, 0x0002, 0x0000, 0x0425, 0x042a, + 0x0001, 0x012a, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x0130, + 0x0002, 0x0000, 0x0425, 0x042a, 0x0005, 0x013a, 0x0000, 0x0000, + // Entry 38700 - 3873F + 0x0000, 0x01a5, 0x0002, 0x013d, 0x0171, 0x0003, 0x0141, 0x0151, + 0x0161, 0x000e, 0x0000, 0xffff, 0x042f, 0x0438, 0x2708, 0x270e, + 0x044c, 0x0450, 0x0458, 0x0460, 0x2715, 0x046e, 0x271c, 0x0479, + 0x0481, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, + 0x0422, 0x000e, 0x0000, 0xffff, 0x042f, 0x0438, 0x2708, 0x270e, + 0x044c, 0x0450, 0x0458, 0x0460, 0x2715, 0x046e, 0x271c, 0x0479, + 0x0481, 0x0003, 0x0175, 0x0185, 0x0195, 0x000e, 0x0000, 0xffff, + // Entry 38740 - 3877F + 0x042f, 0x0438, 0x2708, 0x270e, 0x044c, 0x0450, 0x0458, 0x0460, + 0x2715, 0x046e, 0x271c, 0x0479, 0x0481, 0x000e, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x0000, 0xffff, + 0x042f, 0x0438, 0x2708, 0x270e, 0x044c, 0x0450, 0x0458, 0x0460, + 0x2715, 0x046e, 0x271c, 0x0479, 0x0481, 0x0003, 0x01af, 0x01b5, + 0x01a9, 0x0001, 0x01ab, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, + 0x01b1, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x01b7, 0x0002, + // Entry 38780 - 387BF + 0x0000, 0x0425, 0x042a, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, + 0x01c1, 0x0003, 0x01ca, 0x01cf, 0x01c5, 0x0001, 0x01c7, 0x0001, + 0x0000, 0x0425, 0x0001, 0x01cc, 0x0001, 0x0000, 0x0425, 0x0001, + 0x01d1, 0x0001, 0x0000, 0x0425, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x01dd, 0x0000, 0x01ee, 0x0004, 0x01eb, 0x01e5, + 0x01e2, 0x01e8, 0x0001, 0x0006, 0x000d, 0x0001, 0x0002, 0x0010, + 0x0001, 0x0010, 0x0305, 0x0001, 0x001d, 0x0786, 0x0004, 0x01fc, + 0x01f6, 0x01f3, 0x01f9, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + // Entry 387C0 - 387FF + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, + 0x0208, 0x026d, 0x02c4, 0x02f9, 0x03be, 0x03d4, 0x03e5, 0x03f6, + 0x0002, 0x020b, 0x023c, 0x0003, 0x020f, 0x021e, 0x022d, 0x000d, + 0x0006, 0xffff, 0x001e, 0x432b, 0x432f, 0x42a5, 0x43e5, 0x42ad, + 0x4333, 0x4439, 0x433b, 0x43a9, 0x433f, 0x443d, 0x000d, 0x0000, + 0xffff, 0x257b, 0x2b4e, 0x2b3c, 0x2b42, 0x2b3c, 0x257b, 0x257b, + 0x2b50, 0x2b3a, 0x2b50, 0x2b40, 0x2b3e, 0x000d, 0x0006, 0xffff, + 0x004e, 0x0056, 0x432f, 0x42bf, 0x43e5, 0x42ad, 0x43f4, 0x4441, + // Entry 38800 - 3883F + 0x4446, 0x4450, 0x4458, 0x4461, 0x0003, 0x0240, 0x024f, 0x025e, + 0x000d, 0x0006, 0xffff, 0x001e, 0x432b, 0x432f, 0x42a5, 0x43e5, + 0x42ad, 0x4333, 0x4439, 0x433b, 0x43a9, 0x433f, 0x443d, 0x000d, + 0x0000, 0xffff, 0x257b, 0x2b4e, 0x2b3c, 0x2b42, 0x2b3c, 0x257b, + 0x257b, 0x2b50, 0x2b3a, 0x2b50, 0x2b40, 0x2b3e, 0x000d, 0x0006, + 0xffff, 0x004e, 0x0056, 0x432f, 0x42bf, 0x43e5, 0x42ad, 0x43f4, + 0x4441, 0x4446, 0x4450, 0x4458, 0x4461, 0x0002, 0x0270, 0x029a, + 0x0005, 0x0276, 0x027f, 0x0291, 0x0000, 0x0288, 0x0007, 0x004d, + // Entry 38840 - 3887F + 0x0027, 0x002b, 0x002f, 0x0033, 0x0037, 0x003b, 0x003f, 0x0007, + 0x0000, 0x2b42, 0x204d, 0x2b3a, 0x2246, 0x2773, 0x257b, 0x2b3a, + 0x0007, 0x004d, 0x0043, 0x0046, 0x0049, 0x004c, 0x004f, 0x000f, + 0x0052, 0x0007, 0x0038, 0x015d, 0x2678, 0x267e, 0x2685, 0x268a, + 0x2691, 0x2698, 0x0005, 0x02a0, 0x02a9, 0x02bb, 0x0000, 0x02b2, + 0x0007, 0x004d, 0x0027, 0x002b, 0x002f, 0x0033, 0x0037, 0x003b, + 0x003f, 0x0007, 0x0000, 0x2b42, 0x204d, 0x2b3a, 0x2246, 0x2773, + 0x257b, 0x2b3a, 0x0007, 0x004d, 0x0043, 0x0046, 0x0049, 0x004c, + // Entry 38880 - 388BF + 0x004f, 0x000f, 0x0052, 0x0007, 0x0038, 0x015d, 0x2678, 0x267e, + 0x2685, 0x268a, 0x2691, 0x2698, 0x0002, 0x02c7, 0x02e0, 0x0003, + 0x02cb, 0x02d2, 0x02d9, 0x0005, 0x003b, 0xffff, 0x01a7, 0x01aa, + 0x01ad, 0x01b0, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x0005, 0x004d, 0xffff, 0x0055, 0x0062, 0x006c, 0x0076, + 0x0003, 0x02e4, 0x02eb, 0x02f2, 0x0005, 0x003b, 0xffff, 0x01a7, + 0x01aa, 0x01ad, 0x01b0, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x0005, 0x004d, 0xffff, 0x0055, 0x0062, 0x006c, + // Entry 388C0 - 388FF + 0x0076, 0x0002, 0x02fc, 0x035d, 0x0003, 0x0300, 0x031f, 0x033e, + 0x0009, 0x030a, 0x030d, 0x0000, 0x0310, 0x0316, 0x0319, 0x031c, + 0x0000, 0x0313, 0x0001, 0x004d, 0x0080, 0x0001, 0x004d, 0x0083, + 0x0001, 0x0033, 0x01b6, 0x0001, 0x0033, 0x01b6, 0x0001, 0x0033, + 0x01aa, 0x0001, 0x004d, 0x0087, 0x0001, 0x0033, 0x01c6, 0x0009, + 0x0329, 0x032c, 0x0000, 0x032f, 0x0335, 0x0338, 0x033b, 0x0000, + 0x0332, 0x0001, 0x0000, 0x1f9c, 0x0001, 0x0000, 0x21e4, 0x0001, + 0x0033, 0x01b6, 0x0001, 0x0033, 0x01b6, 0x0001, 0x0033, 0x01aa, + // Entry 38900 - 3893F + 0x0001, 0x004d, 0x0087, 0x0001, 0x0033, 0x01c6, 0x0009, 0x0348, + 0x034b, 0x0000, 0x034e, 0x0354, 0x0357, 0x035a, 0x0000, 0x0351, + 0x0001, 0x004d, 0x0080, 0x0001, 0x004d, 0x0083, 0x0001, 0x0033, + 0x019d, 0x0001, 0x0033, 0x01b6, 0x0001, 0x0033, 0x01aa, 0x0001, + 0x004d, 0x0087, 0x0001, 0x0033, 0x01c6, 0x0003, 0x0361, 0x0380, + 0x039f, 0x0009, 0x036b, 0x036e, 0x0000, 0x0371, 0x0377, 0x037a, + 0x037d, 0x0000, 0x0374, 0x0001, 0x004d, 0x0080, 0x0001, 0x004d, + 0x0083, 0x0001, 0x0033, 0x019d, 0x0001, 0x0033, 0x01b6, 0x0001, + // Entry 38940 - 3897F + 0x0033, 0x01aa, 0x0001, 0x004d, 0x0087, 0x0001, 0x0033, 0x01c6, + 0x0009, 0x038a, 0x038d, 0x0000, 0x0390, 0x0396, 0x0399, 0x039c, + 0x0000, 0x0393, 0x0001, 0x0000, 0x1f9c, 0x0001, 0x0000, 0x21e4, + 0x0001, 0x0033, 0x01b6, 0x0001, 0x0033, 0x01b6, 0x0001, 0x0033, + 0x01aa, 0x0001, 0x004d, 0x0087, 0x0001, 0x0033, 0x01c6, 0x0009, + 0x03a9, 0x03ac, 0x0000, 0x03af, 0x03b5, 0x03b8, 0x03bb, 0x0000, + 0x03b2, 0x0001, 0x004d, 0x0080, 0x0001, 0x004d, 0x0083, 0x0001, + 0x0033, 0x019d, 0x0001, 0x0033, 0x01b6, 0x0001, 0x0033, 0x01aa, + // Entry 38980 - 389BF + 0x0001, 0x004d, 0x0087, 0x0001, 0x0033, 0x01c6, 0x0003, 0x03c8, + 0x03ce, 0x03c2, 0x0001, 0x03c4, 0x0002, 0x004d, 0x008e, 0x0093, + 0x0001, 0x03ca, 0x0002, 0x004d, 0x008e, 0x0093, 0x0001, 0x03d0, + 0x0002, 0x004d, 0x008e, 0x0093, 0x0004, 0x03e2, 0x03dc, 0x03d9, + 0x03df, 0x0001, 0x0006, 0x015b, 0x0001, 0x0002, 0x0033, 0x0001, + 0x0002, 0x003c, 0x0001, 0x001d, 0x079a, 0x0004, 0x03f3, 0x03ed, + 0x03ea, 0x03f0, 0x0001, 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, + 0x0001, 0x0002, 0x04fe, 0x0001, 0x0002, 0x0508, 0x0004, 0x0404, + // Entry 389C0 - 389FF + 0x03fe, 0x03fb, 0x0401, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, + 0x0410, 0x0000, 0x0000, 0x0000, 0x047b, 0x048e, 0x0000, 0x049f, + 0x0002, 0x0413, 0x0447, 0x0003, 0x0417, 0x0427, 0x0437, 0x000e, + 0x0000, 0x2445, 0x054c, 0x0553, 0x279f, 0x27a6, 0x0568, 0x3a5e, + 0x27ac, 0x2c16, 0x0589, 0x27b7, 0x27bd, 0x27c3, 0x27c6, 0x000e, + 0x0000, 0x003f, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, + // Entry 38A00 - 38A3F + 0x0000, 0x2445, 0x054c, 0x0553, 0x279f, 0x27a6, 0x0568, 0x3a5e, + 0x27ac, 0x2c16, 0x0589, 0x27b7, 0x27bd, 0x27c3, 0x27c6, 0x0003, + 0x044b, 0x045b, 0x046b, 0x000e, 0x0000, 0x2445, 0x054c, 0x0553, + 0x279f, 0x27a6, 0x0568, 0x3a5e, 0x27ac, 0x2c16, 0x0589, 0x27b7, + 0x27bd, 0x27c3, 0x27c6, 0x000e, 0x0000, 0x003f, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, + 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x0000, 0x2445, 0x054c, 0x0553, + 0x279f, 0x27a6, 0x0568, 0x3a5e, 0x27ac, 0x2c16, 0x0589, 0x27b7, + // Entry 38A40 - 38A7F + 0x27bd, 0x27c3, 0x27c6, 0x0003, 0x0484, 0x0489, 0x047f, 0x0001, + 0x0481, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0486, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x048b, 0x0001, 0x0000, 0x04ef, 0x0004, 0x049c, + 0x0496, 0x0493, 0x0499, 0x0001, 0x0006, 0x000d, 0x0001, 0x0002, + 0x0010, 0x0001, 0x0010, 0x0305, 0x0001, 0x001d, 0x0786, 0x0004, + 0x04ad, 0x04a7, 0x04a4, 0x04aa, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, + 0x0005, 0x04b6, 0x0000, 0x0000, 0x0000, 0x051b, 0x0002, 0x04b9, + // Entry 38A80 - 38ABF + 0x04ea, 0x0003, 0x04bd, 0x04cc, 0x04db, 0x000d, 0x0000, 0xffff, + 0x05a2, 0x05aa, 0x05b3, 0x05bc, 0x05c3, 0x05cb, 0x05d2, 0x05d9, + 0x05e1, 0x05ec, 0x05f2, 0x2724, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0000, 0xffff, 0x05a2, 0x05aa, + 0x05b3, 0x05bc, 0x05c3, 0x05cb, 0x05d2, 0x05d9, 0x05e1, 0x05ec, + 0x05f2, 0x2724, 0x0003, 0x04ee, 0x04fd, 0x050c, 0x000d, 0x0000, + 0xffff, 0x05a2, 0x05aa, 0x05b3, 0x05bc, 0x05c3, 0x05cb, 0x05d2, + // Entry 38AC0 - 38AFF + 0x05d9, 0x05e1, 0x05ec, 0x05f2, 0x2724, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0000, 0xffff, 0x05a2, + 0x05aa, 0x05b3, 0x05bc, 0x05c3, 0x05cb, 0x05d2, 0x05d9, 0x05e1, + 0x05ec, 0x05f2, 0x2724, 0x0003, 0x0524, 0x0529, 0x051f, 0x0001, + 0x0521, 0x0001, 0x0000, 0x0601, 0x0001, 0x0526, 0x0001, 0x0000, + 0x0601, 0x0001, 0x052b, 0x0001, 0x0000, 0x0601, 0x0005, 0x0534, + 0x0000, 0x0000, 0x0000, 0x0599, 0x0002, 0x0537, 0x0568, 0x0003, + // Entry 38B00 - 38B3F + 0x053b, 0x054a, 0x0559, 0x000d, 0x0000, 0xffff, 0x0606, 0x27cb, + 0x2732, 0x2739, 0x061f, 0x0626, 0x2741, 0x0633, 0x27d0, 0x063d, + 0x0643, 0x064d, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, + 0x3a0c, 0x000d, 0x0000, 0xffff, 0x0657, 0x27db, 0x0666, 0x066f, + 0x0679, 0x0682, 0x2751, 0x0692, 0x2757, 0x06a3, 0x06ab, 0x06ba, + 0x0003, 0x056c, 0x057b, 0x058a, 0x000d, 0x0000, 0xffff, 0x0606, + 0x27cb, 0x2732, 0x2739, 0x061f, 0x0626, 0x2741, 0x0633, 0x27d0, + // Entry 38B40 - 38B7F + 0x063d, 0x0643, 0x064d, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, + 0x3a09, 0x3a0c, 0x000d, 0x0000, 0xffff, 0x0657, 0x27db, 0x0666, + 0x066f, 0x0679, 0x0682, 0x2751, 0x0692, 0x2757, 0x06a3, 0x06ab, + 0x06ba, 0x0003, 0x05a2, 0x05a7, 0x059d, 0x0001, 0x059f, 0x0001, + 0x0000, 0x06c8, 0x0001, 0x05a4, 0x0001, 0x0000, 0x06c8, 0x0001, + 0x05a9, 0x0001, 0x0000, 0x06c8, 0x0006, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x05b3, 0x0004, 0x05c1, 0x05bb, 0x05b8, 0x05be, + // Entry 38B80 - 38BBF + 0x0001, 0x0006, 0x000d, 0x0001, 0x0002, 0x0010, 0x0001, 0x0010, + 0x0305, 0x0001, 0x001d, 0x0786, 0x0005, 0x05ca, 0x0000, 0x0000, + 0x0000, 0x062f, 0x0002, 0x05cd, 0x05fe, 0x0003, 0x05d1, 0x05e0, + 0x05ef, 0x000d, 0x0000, 0xffff, 0x19c9, 0x19d3, 0x19df, 0x2566, + 0x19eb, 0x19f2, 0x256a, 0x1a01, 0x1a06, 0x2575, 0x23c6, 0x1a16, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, + 0x0000, 0xffff, 0x19c9, 0x19d3, 0x19df, 0x2566, 0x19eb, 0x19f2, + // Entry 38BC0 - 38BFF + 0x256a, 0x1a01, 0x1a06, 0x2575, 0x23c6, 0x1a16, 0x0003, 0x0602, + 0x0611, 0x0620, 0x000d, 0x0000, 0xffff, 0x19c9, 0x19d3, 0x19df, + 0x2566, 0x19eb, 0x19f2, 0x256a, 0x1a01, 0x1a06, 0x2575, 0x23c6, + 0x1a16, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, + 0x000d, 0x0000, 0xffff, 0x19c9, 0x19d3, 0x19df, 0x2566, 0x19eb, + 0x19f2, 0x256a, 0x1a01, 0x1a06, 0x2575, 0x23c6, 0x1a16, 0x0003, + 0x0638, 0x063d, 0x0633, 0x0001, 0x0635, 0x0001, 0x0000, 0x1a1d, + // Entry 38C00 - 38C3F + 0x0001, 0x063a, 0x0001, 0x0000, 0x1a1d, 0x0001, 0x063f, 0x0001, + 0x0000, 0x1a1d, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0648, + 0x0003, 0x0652, 0x0658, 0x064c, 0x0001, 0x064e, 0x0002, 0x004d, + 0x0096, 0x00a4, 0x0001, 0x0654, 0x0002, 0x0000, 0x1a20, 0x3a65, + 0x0001, 0x065a, 0x0002, 0x004d, 0x00ab, 0x00b6, 0x0042, 0x06a1, + 0x06a6, 0x06ab, 0x06b0, 0x06c5, 0x06da, 0x06ef, 0x0704, 0x0719, + 0x072e, 0x0743, 0x0758, 0x076d, 0x0786, 0x079f, 0x07b8, 0x07bd, + 0x07c2, 0x07c7, 0x07de, 0x07f5, 0x080c, 0x0811, 0x0816, 0x081b, + // Entry 38C40 - 38C7F + 0x0820, 0x0825, 0x082a, 0x082f, 0x0834, 0x0839, 0x084b, 0x085d, + 0x086f, 0x0881, 0x0893, 0x08a5, 0x08b7, 0x08c9, 0x08db, 0x08ed, + 0x08ff, 0x0911, 0x0923, 0x0935, 0x0947, 0x0959, 0x096b, 0x097d, + 0x098f, 0x09a1, 0x09b3, 0x09b8, 0x09bd, 0x09c2, 0x09d6, 0x09ea, + 0x09fe, 0x0a12, 0x0a22, 0x0a32, 0x0a46, 0x0a5a, 0x0a6e, 0x0a73, + 0x0a78, 0x0001, 0x06a3, 0x0001, 0x0001, 0x0040, 0x0001, 0x06a8, + 0x0001, 0x0001, 0x0040, 0x0001, 0x06ad, 0x0001, 0x0001, 0x0040, + 0x0003, 0x06b4, 0x06b7, 0x06bc, 0x0001, 0x0033, 0x021e, 0x0003, + // Entry 38C80 - 38CBF + 0x0033, 0x0224, 0x022f, 0x0239, 0x0002, 0x06bf, 0x06c2, 0x0001, + 0x0033, 0x0245, 0x0001, 0x004d, 0x00bd, 0x0003, 0x06c9, 0x06cc, + 0x06d1, 0x0001, 0x004d, 0x00cc, 0x0003, 0x004d, 0x00d0, 0x00da, + 0x00e2, 0x0002, 0x06d4, 0x06d7, 0x0001, 0x004d, 0x00ec, 0x0001, + 0x0033, 0x027a, 0x0003, 0x06de, 0x06e1, 0x06e6, 0x0001, 0x004d, + 0x00cc, 0x0003, 0x004d, 0x00d0, 0x00da, 0x00e2, 0x0002, 0x06e9, + 0x06ec, 0x0001, 0x004d, 0x00ec, 0x0001, 0x0033, 0x027a, 0x0003, + 0x06f3, 0x06f6, 0x06fb, 0x0001, 0x004d, 0x00fa, 0x0003, 0x004d, + // Entry 38CC0 - 38CFF + 0x0105, 0x0115, 0x0124, 0x0002, 0x06fe, 0x0701, 0x0001, 0x004d, + 0x013a, 0x0001, 0x004d, 0x014f, 0x0003, 0x0708, 0x070b, 0x0710, + 0x0001, 0x004d, 0x0163, 0x0003, 0x004d, 0x0168, 0x0173, 0x017c, + 0x0002, 0x0713, 0x0716, 0x0001, 0x004d, 0x018c, 0x0001, 0x004d, + 0x019d, 0x0003, 0x071d, 0x0720, 0x0725, 0x0001, 0x004d, 0x0163, + 0x0003, 0x004d, 0x0168, 0x0173, 0x017c, 0x0002, 0x0728, 0x072b, + 0x0001, 0x004d, 0x018c, 0x0001, 0x004d, 0x019d, 0x0003, 0x0732, + 0x0735, 0x073a, 0x0001, 0x0033, 0x0306, 0x0003, 0x0033, 0x030c, + // Entry 38D00 - 38D3F + 0x0317, 0x265c, 0x0002, 0x073d, 0x0740, 0x0001, 0x0033, 0x0332, + 0x0001, 0x004d, 0x01af, 0x0003, 0x0747, 0x074a, 0x074f, 0x0001, + 0x004d, 0x01be, 0x0003, 0x004d, 0x01c2, 0x01cb, 0x01d3, 0x0002, + 0x0752, 0x0755, 0x0001, 0x0033, 0x035b, 0x0001, 0x0033, 0x0367, + 0x0003, 0x075c, 0x075f, 0x0764, 0x0001, 0x004d, 0x01be, 0x0003, + 0x004d, 0x01c2, 0x01cb, 0x01d3, 0x0002, 0x0767, 0x076a, 0x0001, + 0x0033, 0x035b, 0x0001, 0x004d, 0x01af, 0x0004, 0x0772, 0x0775, + 0x077a, 0x0783, 0x0001, 0x0033, 0x0374, 0x0003, 0x0033, 0x037b, + // Entry 38D40 - 38D7F + 0x0387, 0x0392, 0x0002, 0x077d, 0x0780, 0x0001, 0x0033, 0x039f, + 0x0001, 0x004d, 0x01dd, 0x0001, 0x0033, 0x03c5, 0x0004, 0x078b, + 0x078e, 0x0793, 0x079c, 0x0001, 0x004d, 0x01ed, 0x0003, 0x004d, + 0x01f1, 0x01fb, 0x0203, 0x0002, 0x0796, 0x0799, 0x0001, 0x004d, + 0x020d, 0x0001, 0x004d, 0x0219, 0x0001, 0x0033, 0x03c5, 0x0004, + 0x07a4, 0x07a7, 0x07ac, 0x07b5, 0x0001, 0x004d, 0x01ed, 0x0003, + 0x004d, 0x01f1, 0x01fb, 0x0203, 0x0002, 0x07af, 0x07b2, 0x0001, + 0x004d, 0x020d, 0x0001, 0x004d, 0x0219, 0x0001, 0x0033, 0x03c5, + // Entry 38D80 - 38DBF + 0x0001, 0x07ba, 0x0001, 0x0000, 0x1b1d, 0x0001, 0x07bf, 0x0001, + 0x0000, 0x1b1d, 0x0001, 0x07c4, 0x0001, 0x0000, 0x1b1d, 0x0003, + 0x07cb, 0x07ce, 0x07d5, 0x0001, 0x0033, 0x03fc, 0x0005, 0x004d, + 0x022f, 0x0237, 0x0240, 0x0226, 0x0245, 0x0002, 0x07d8, 0x07db, + 0x0001, 0x0033, 0x042a, 0x0001, 0x004d, 0x024a, 0x0003, 0x07e2, + 0x07e5, 0x07ec, 0x0001, 0x0033, 0x03fc, 0x0005, 0x004d, 0x0258, + 0x0237, 0x0240, 0x0226, 0x0245, 0x0002, 0x07ef, 0x07f2, 0x0001, + 0x004d, 0x025e, 0x0001, 0x004d, 0x024a, 0x0003, 0x07f9, 0x07fc, + // Entry 38DC0 - 38DFF + 0x0803, 0x0001, 0x0033, 0x03fc, 0x0005, 0x004d, 0x0258, 0x0237, + 0x0240, 0x0226, 0x0245, 0x0002, 0x0806, 0x0809, 0x0001, 0x004d, + 0x025e, 0x0001, 0x004d, 0x024a, 0x0001, 0x080e, 0x0001, 0x0000, + 0x1b56, 0x0001, 0x0813, 0x0001, 0x0000, 0x1b56, 0x0001, 0x0818, + 0x0001, 0x0000, 0x1b56, 0x0001, 0x081d, 0x0001, 0x004d, 0x026b, + 0x0001, 0x0822, 0x0001, 0x004d, 0x026b, 0x0001, 0x0827, 0x0001, + 0x004d, 0x026b, 0x0001, 0x082c, 0x0001, 0x0000, 0x1b72, 0x0001, + 0x0831, 0x0001, 0x0000, 0x1b72, 0x0001, 0x0836, 0x0001, 0x0000, + // Entry 38E00 - 38E3F + 0x1b72, 0x0003, 0x0000, 0x083d, 0x0842, 0x0003, 0x004d, 0x027d, + 0x0287, 0x0290, 0x0002, 0x0845, 0x0848, 0x0001, 0x004d, 0x029b, + 0x0001, 0x004d, 0x02a9, 0x0003, 0x0000, 0x084f, 0x0854, 0x0003, + 0x004d, 0x02b7, 0x02c0, 0x02c8, 0x0002, 0x0857, 0x085a, 0x0001, + 0x004d, 0x02d2, 0x0001, 0x004d, 0x02df, 0x0003, 0x0000, 0x0861, + 0x0866, 0x0003, 0x004d, 0x02b7, 0x02c0, 0x02c8, 0x0002, 0x0869, + 0x086c, 0x0001, 0x004d, 0x02ec, 0x0001, 0x004d, 0x02df, 0x0003, + 0x0000, 0x0873, 0x0878, 0x0003, 0x004d, 0x02f7, 0x0302, 0x030c, + // Entry 38E40 - 38E7F + 0x0002, 0x087b, 0x087e, 0x0001, 0x004d, 0x0318, 0x0001, 0x004d, + 0x0327, 0x0003, 0x0000, 0x0885, 0x088a, 0x0003, 0x004d, 0x0336, + 0x033f, 0x0347, 0x0002, 0x088d, 0x0890, 0x0001, 0x004d, 0x0351, + 0x0001, 0x004d, 0x035e, 0x0003, 0x0000, 0x0897, 0x089c, 0x0003, + 0x004d, 0x0336, 0x033f, 0x0347, 0x0002, 0x089f, 0x08a2, 0x0001, + 0x004d, 0x036b, 0x0001, 0x004d, 0x035e, 0x0003, 0x0000, 0x08a9, + 0x08ae, 0x0003, 0x0033, 0x05d9, 0x05e5, 0x2668, 0x0002, 0x08b1, + 0x08b4, 0x0001, 0x004d, 0x0376, 0x0001, 0x0033, 0x0613, 0x0003, + // Entry 38E80 - 38EBF + 0x0000, 0x08bb, 0x08c0, 0x0003, 0x004d, 0x0386, 0x038f, 0x0397, + 0x0002, 0x08c3, 0x08c6, 0x0001, 0x004d, 0x03a1, 0x0001, 0x004d, + 0x03ae, 0x0003, 0x0000, 0x08cd, 0x08d2, 0x0003, 0x004d, 0x0386, + 0x038f, 0x0397, 0x0002, 0x08d5, 0x08d8, 0x0001, 0x004d, 0x03a1, + 0x0001, 0x004d, 0x03ae, 0x0003, 0x0000, 0x08df, 0x08e4, 0x0003, + 0x0033, 0x0661, 0x066b, 0x2675, 0x0002, 0x08e7, 0x08ea, 0x0001, + 0x004d, 0x03bb, 0x0001, 0x0033, 0x0693, 0x0003, 0x0000, 0x08f1, + 0x08f6, 0x0003, 0x004d, 0x03c9, 0x03d2, 0x03da, 0x0002, 0x08f9, + // Entry 38EC0 - 38EFF + 0x08fc, 0x0001, 0x004d, 0x03e4, 0x0001, 0x004d, 0x03f1, 0x0003, + 0x0000, 0x0903, 0x0908, 0x0003, 0x004d, 0x03c9, 0x03d2, 0x03da, + 0x0002, 0x090b, 0x090e, 0x0001, 0x004d, 0x03fe, 0x0001, 0x004d, + 0x03f1, 0x0003, 0x0000, 0x0915, 0x091a, 0x0003, 0x004d, 0x0409, + 0x0415, 0x0420, 0x0002, 0x091d, 0x0920, 0x0001, 0x004d, 0x042d, + 0x0001, 0x004d, 0x043d, 0x0003, 0x0000, 0x0927, 0x092c, 0x0003, + 0x004d, 0x044d, 0x0456, 0x045e, 0x0002, 0x092f, 0x0932, 0x0001, + 0x004d, 0x0468, 0x0001, 0x004d, 0x0475, 0x0003, 0x0000, 0x0939, + // Entry 38F00 - 38F3F + 0x093e, 0x0003, 0x004d, 0x044d, 0x0456, 0x045e, 0x0002, 0x0941, + 0x0944, 0x0001, 0x004d, 0x0468, 0x0001, 0x004d, 0x0475, 0x0003, + 0x0000, 0x094b, 0x0950, 0x0003, 0x004d, 0x0482, 0x048e, 0x0499, + 0x0002, 0x0953, 0x0956, 0x0001, 0x004d, 0x04a6, 0x0001, 0x004d, + 0x04b6, 0x0003, 0x0000, 0x095d, 0x0962, 0x0003, 0x004d, 0x04c6, + 0x04cf, 0x04d7, 0x0002, 0x0965, 0x0968, 0x0001, 0x004d, 0x04e1, + 0x0001, 0x004d, 0x04ee, 0x0003, 0x0000, 0x096f, 0x0974, 0x0003, + 0x004d, 0x04c6, 0x04cf, 0x04d7, 0x0002, 0x0977, 0x097a, 0x0001, + // Entry 38F40 - 38F7F + 0x004d, 0x04fb, 0x0001, 0x004d, 0x04ee, 0x0003, 0x0000, 0x0981, + 0x0986, 0x0003, 0x0033, 0x07e5, 0x07f0, 0x2680, 0x0002, 0x0989, + 0x098c, 0x0001, 0x004d, 0x0506, 0x0001, 0x0033, 0x081b, 0x0003, + 0x0000, 0x0993, 0x0998, 0x0003, 0x004d, 0x0515, 0x051e, 0x0526, + 0x0002, 0x099b, 0x099e, 0x0001, 0x004d, 0x0530, 0x0001, 0x004d, + 0x053d, 0x0003, 0x0000, 0x09a5, 0x09aa, 0x0003, 0x004d, 0x0515, + 0x051e, 0x0526, 0x0002, 0x09ad, 0x09b0, 0x0001, 0x004d, 0x0530, + 0x0001, 0x004d, 0x053d, 0x0001, 0x09b5, 0x0001, 0x004d, 0x054a, + // Entry 38F80 - 38FBF + 0x0001, 0x09ba, 0x0001, 0x004d, 0x054a, 0x0001, 0x09bf, 0x0001, + 0x004d, 0x054a, 0x0003, 0x09c6, 0x09c9, 0x09cd, 0x0001, 0x0033, + 0x0894, 0x0002, 0x0033, 0xffff, 0x086c, 0x0002, 0x09d0, 0x09d3, + 0x0001, 0x0033, 0x0874, 0x0001, 0x0033, 0x0898, 0x0003, 0x09da, + 0x09dd, 0x09e1, 0x0001, 0x0033, 0x0894, 0x0002, 0x0033, 0xffff, + 0x086c, 0x0002, 0x09e4, 0x09e7, 0x0001, 0x004d, 0x0551, 0x0001, + 0x0033, 0x0898, 0x0003, 0x09ee, 0x09f1, 0x09f5, 0x0001, 0x0033, + 0x0894, 0x0002, 0x0033, 0xffff, 0x086c, 0x0002, 0x09f8, 0x09fb, + // Entry 38FC0 - 38FFF + 0x0001, 0x004d, 0x0551, 0x0001, 0x0033, 0x0898, 0x0003, 0x0a02, + 0x0a05, 0x0a09, 0x0001, 0x004d, 0x055d, 0x0002, 0x004d, 0xffff, + 0x0563, 0x0002, 0x0a0c, 0x0a0f, 0x0001, 0x004d, 0x0572, 0x0001, + 0x004d, 0x0582, 0x0003, 0x0a16, 0x0000, 0x0a19, 0x0001, 0x0043, + 0x092f, 0x0002, 0x0a1c, 0x0a1f, 0x0001, 0x004d, 0x0591, 0x0001, + 0x004d, 0x059d, 0x0003, 0x0a26, 0x0000, 0x0a29, 0x0001, 0x0043, + 0x092f, 0x0002, 0x0a2c, 0x0a2f, 0x0001, 0x004d, 0x0591, 0x0001, + 0x004d, 0x059d, 0x0003, 0x0a36, 0x0a39, 0x0a3d, 0x0001, 0x0007, + // Entry 39000 - 3903F + 0x08c8, 0x0002, 0x0033, 0xffff, 0x08fd, 0x0002, 0x0a40, 0x0a43, + 0x0001, 0x004d, 0x05aa, 0x0001, 0x004d, 0x05b9, 0x0003, 0x0a4a, + 0x0a4d, 0x0a51, 0x0001, 0x0007, 0x08c8, 0x0002, 0x0033, 0xffff, + 0x08fd, 0x0002, 0x0a54, 0x0a57, 0x0001, 0x004d, 0x05c7, 0x0001, + 0x004d, 0x05b9, 0x0003, 0x0a5e, 0x0a61, 0x0a65, 0x0001, 0x0007, + 0x08c8, 0x0002, 0x0033, 0xffff, 0x08fd, 0x0002, 0x0a68, 0x0a6b, + 0x0001, 0x004d, 0x05c7, 0x0001, 0x004d, 0x05b9, 0x0001, 0x0a70, + 0x0001, 0x004d, 0x05d4, 0x0001, 0x0a75, 0x0001, 0x004d, 0x05de, + // Entry 39040 - 3907F + 0x0001, 0x0a7a, 0x0001, 0x004d, 0x05de, 0x0004, 0x0a82, 0x0a87, + 0x0a8c, 0x0a9b, 0x0003, 0x0000, 0x1dc7, 0x39fb, 0x3a02, 0x0003, + 0x0033, 0x095c, 0x268c, 0x269c, 0x0002, 0x0000, 0x0a8f, 0x0003, + 0x0000, 0x0a96, 0x0a93, 0x0001, 0x004d, 0x05e2, 0x0003, 0x004d, + 0xffff, 0x05fa, 0x0614, 0x0002, 0x0c64, 0x0a9e, 0x0003, 0x0b38, + 0x0bce, 0x0aa2, 0x0094, 0x004d, 0x0629, 0x063b, 0x064f, 0x0662, + 0x067e, 0x0698, 0x06ac, 0x06c0, 0x06d3, 0x06e6, 0x06ff, 0x0714, + 0x0728, 0x073a, 0x074c, 0x0763, 0x0780, 0x0795, 0x07ab, 0x07c9, + // Entry 39080 - 390BF + 0x07ed, 0x080a, 0x0827, 0x083f, 0x0853, 0x086b, 0x0878, 0x0886, + 0x089c, 0x08b4, 0x08cf, 0x08e5, 0x08fa, 0x090d, 0x0920, 0x0938, + 0x094e, 0x0964, 0x097a, 0x0996, 0x09a8, 0x09b4, 0x09cd, 0x09df, + 0x09f9, 0x0a07, 0x0a22, 0x0a3c, 0x0a55, 0x0a6f, 0x0a8f, 0x0aa1, + 0x0ab7, 0x0adc, 0x0aec, 0x0afa, 0x0b0f, 0x0b27, 0x0b3b, 0x0b58, + 0x0b75, 0x0b88, 0x0b95, 0x0bb2, 0x0bc9, 0x0bdb, 0x0bee, 0x0c01, + 0x0c11, 0x0c28, 0x0c3e, 0x0c54, 0x0c66, 0x0c7b, 0x0c8f, 0x0ca2, + 0x0cc8, 0x0cdf, 0x0cf6, 0x0d09, 0x0d16, 0x0d2f, 0x0d3f, 0x0d54, + // Entry 390C0 - 390FF + 0x0d6b, 0x0d81, 0x0d96, 0x0da5, 0x0db4, 0x0dc4, 0x0ddd, 0x0df4, + 0x0e01, 0x0e20, 0x0e3c, 0x0e54, 0x0e68, 0x0e76, 0x0e82, 0x0e8e, + 0x0ea9, 0x0ec2, 0x0edc, 0x0ee7, 0x0eff, 0x0f20, 0x0f39, 0x0f4b, + 0x0f61, 0x0f6d, 0x0f84, 0x0f9a, 0x0fac, 0x0fc2, 0x0fda, 0x1001, + 0x1010, 0x101d, 0x102d, 0x103b, 0x1049, 0x105f, 0x1073, 0x1086, + 0x1097, 0x10ae, 0x10c6, 0x10dc, 0x10eb, 0x10f7, 0x1104, 0x1118, + 0x1129, 0x1137, 0x114a, 0x1156, 0x1170, 0x117d, 0x1192, 0x11aa, + 0x11bf, 0x11cf, 0x11e8, 0x11ff, 0x120c, 0x121d, 0x1235, 0x124a, + // Entry 39100 - 3913F + 0x0094, 0x0033, 0xffff, 0xffff, 0xffff, 0xffff, 0x0a67, 0x0ab4, + 0x0b2a, 0x26c0, 0x0ba0, 0x26f1, 0x0c1f, 0x0c5d, 0x0c98, 0x0d40, + 0x0d75, 0x2756, 0x0e24, 0x0e62, 0x27a3, 0x0efc, 0x27fa, 0x282c, + 0x1013, 0x105a, 0x1095, 0xffff, 0xffff, 0x285e, 0xffff, 0x114a, + 0xffff, 0x11bd, 0x289c, 0x28c0, 0x1271, 0xffff, 0xffff, 0x28de, + 0x2908, 0x2946, 0xffff, 0xffff, 0xffff, 0x2962, 0xffff, 0x2994, + 0x29c8, 0xffff, 0x29fa, 0x152b, 0x158a, 0xffff, 0xffff, 0xffff, + 0xffff, 0x161f, 0xffff, 0xffff, 0x1684, 0x16da, 0xffff, 0xffff, + // Entry 39140 - 3917F + 0x175c, 0x17b2, 0x17f6, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x18ad, 0x18e2, 0x1920, 0x2a6c, 0x2a8a, 0xffff, 0xffff, + 0x1a35, 0xffff, 0x1a7a, 0xffff, 0xffff, 0x1af0, 0xffff, 0x1b86, + 0xffff, 0xffff, 0xffff, 0xffff, 0x1c06, 0xffff, 0x2ad1, 0x2b07, + 0x1d0c, 0x2b37, 0xffff, 0xffff, 0xffff, 0x2b5d, 0x2b91, 0x1e57, + 0xffff, 0xffff, 0x1ec7, 0x1f42, 0x1f8c, 0x1fc1, 0xffff, 0xffff, + 0x2021, 0x2062, 0x2097, 0xffff, 0x20f0, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x21f0, 0x2231, 0x226c, 0xffff, 0xffff, 0xffff, + // Entry 39180 - 391BF + 0xffff, 0xffff, 0xffff, 0xffff, 0x2323, 0xffff, 0xffff, 0x237d, + 0xffff, 0x23c1, 0xffff, 0x241b, 0x2459, 0x24a0, 0xffff, 0x24ee, + 0x2538, 0xffff, 0xffff, 0xffff, 0x25b6, 0x25f4, 0x0094, 0x0033, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0a95, 0x26ad, 0x0b4c, 0x26cc, + 0x26df, 0x2703, 0x2720, 0x0c7f, 0x2734, 0x2745, 0x0d9d, 0x276c, + 0x0e48, 0x278e, 0x27ba, 0x27d7, 0x2810, 0x2842, 0x103d, 0x107c, + 0x10bf, 0xffff, 0xffff, 0x286d, 0xffff, 0x117a, 0xffff, 0x2888, + 0x28a8, 0x28cc, 0x129b, 0xffff, 0xffff, 0x28ed, 0x291d, 0x2951, + // Entry 391C0 - 391FF + 0xffff, 0xffff, 0xffff, 0x2975, 0xffff, 0x29a8, 0x29db, 0xffff, + 0x2a0d, 0x1565, 0x15a8, 0xffff, 0xffff, 0xffff, 0xffff, 0x1643, + 0xffff, 0xffff, 0x16b8, 0x170e, 0xffff, 0xffff, 0x2a2c, 0x17da, + 0x1814, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2a48, + 0x1906, 0x2a59, 0x2a78, 0x19dc, 0xffff, 0xffff, 0x2aa9, 0xffff, + 0x1aa6, 0xffff, 0xffff, 0x2abb, 0xffff, 0x1baa, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1c2e, 0xffff, 0x2ae9, 0x2b1c, 0x1d36, 0x2b44, + 0xffff, 0xffff, 0xffff, 0x2b71, 0x2ba3, 0x2bbb, 0xffff, 0xffff, + // Entry 39200 - 3923F + 0x1f03, 0x1f6e, 0x1faa, 0x1fe7, 0xffff, 0xffff, 0x2047, 0x2080, + 0x20bd, 0xffff, 0x2bd4, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2216, 0x2253, 0x228c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2bfa, 0xffff, 0xffff, 0x239d, 0xffff, 0x23ef, + 0xffff, 0x243f, 0x2483, 0x24c4, 0xffff, 0x251a, 0x2560, 0xffff, + 0xffff, 0xffff, 0x25da, 0x2624, 0x0003, 0x0000, 0x0000, 0x0c68, + 0x007d, 0x001d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 39240 - 3927F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 39280 - 392BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0779, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x083e, 0x0001, + 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000b, 0x0019, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 392C0 - 392FF + 0x0012, 0x0003, 0x0000, 0x0000, 0x0016, 0x0001, 0x0000, 0x1e0b, + 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0003, + 0x0000, 0x0000, 0x0024, 0x0001, 0x0001, 0x002d, 0x0003, 0x0004, + 0x01af, 0x026f, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000d, 0x002c, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0016, 0x0000, 0x0027, 0x0004, 0x0024, 0x001e, 0x001b, + 0x0021, 0x0001, 0x004d, 0x1265, 0x0001, 0x004d, 0x127e, 0x0001, + 0x0000, 0x1e17, 0x0001, 0x0002, 0x0587, 0x0001, 0x0029, 0x0001, + // Entry 39300 - 3933F + 0x0000, 0x03c6, 0x0008, 0x0035, 0x009a, 0x00f1, 0x0126, 0x0167, + 0x017c, 0x018d, 0x019e, 0x0002, 0x0038, 0x0069, 0x0003, 0x003c, + 0x004b, 0x005a, 0x000d, 0x0006, 0xffff, 0x001e, 0x446a, 0x43cd, + 0x42a5, 0x446e, 0x4472, 0x4477, 0x447b, 0x438d, 0x447f, 0x433f, + 0x4483, 0x000d, 0x0000, 0xffff, 0x257b, 0x2b4e, 0x2b3c, 0x2b42, + 0x2b3c, 0x3a6c, 0x2296, 0x2b42, 0x2b3a, 0x2b50, 0x2b40, 0x2b3e, + 0x000d, 0x004d, 0xffff, 0x1291, 0x1298, 0x129d, 0x12a3, 0x12a9, + 0x12af, 0x12b6, 0x12bc, 0x12c4, 0x12ce, 0x12d6, 0x12df, 0x0003, + // Entry 39340 - 3937F + 0x006d, 0x007c, 0x008b, 0x000d, 0x0006, 0xffff, 0x001e, 0x446a, + 0x43cd, 0x42a5, 0x446e, 0x4472, 0x4477, 0x447b, 0x438d, 0x447f, + 0x433f, 0x4483, 0x000d, 0x004d, 0xffff, 0x0000, 0x12e9, 0x12ec, + 0x0009, 0x12ef, 0x12f2, 0x12f6, 0x12f9, 0x12fc, 0x12ff, 0x001e, + 0x1302, 0x000d, 0x004d, 0xffff, 0x1291, 0x1298, 0x129d, 0x12a3, + 0x12a9, 0x12af, 0x12b6, 0x12bc, 0x12c4, 0x12ce, 0x12d6, 0x12df, + 0x0002, 0x009d, 0x00c7, 0x0005, 0x00a3, 0x00ac, 0x00be, 0x0000, + 0x00b5, 0x0007, 0x004d, 0x1306, 0x130b, 0x130f, 0x1313, 0x1317, + // Entry 39380 - 393BF + 0x131c, 0x1321, 0x0007, 0x004d, 0x1325, 0x1329, 0x132b, 0x132e, + 0x1331, 0x1335, 0x1339, 0x0007, 0x004d, 0x1306, 0x130b, 0x130f, + 0x1313, 0x1317, 0x131c, 0x1321, 0x0007, 0x004d, 0x133c, 0x1345, + 0x134e, 0x1358, 0x1362, 0x136c, 0x1378, 0x0005, 0x00cd, 0x00d6, + 0x00e8, 0x0000, 0x00df, 0x0007, 0x004d, 0x1306, 0x130b, 0x130f, + 0x1313, 0x1317, 0x131c, 0x1321, 0x0007, 0x004d, 0x1325, 0x1380, + 0x132b, 0x132e, 0x1331, 0x1335, 0x1339, 0x0007, 0x004d, 0x1306, + 0x130b, 0x130f, 0x1313, 0x1317, 0x131c, 0x1321, 0x0007, 0x004d, + // Entry 393C0 - 393FF + 0x133c, 0x1345, 0x134e, 0x1358, 0x1362, 0x136c, 0x1378, 0x0002, + 0x00f4, 0x010d, 0x0003, 0x00f8, 0x00ff, 0x0106, 0x0005, 0x0000, + 0xffff, 0x1f17, 0x1f1a, 0x1f1d, 0x1f20, 0x0005, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x004d, 0xffff, 0x1383, + 0x138d, 0x1397, 0x13a1, 0x0003, 0x0111, 0x0118, 0x011f, 0x0005, + 0x0000, 0xffff, 0x1f17, 0x1f1a, 0x1f1d, 0x1f20, 0x0005, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x004d, 0xffff, + 0x1383, 0x138d, 0x1397, 0x13a1, 0x0002, 0x0129, 0x0148, 0x0003, + // Entry 39400 - 3943F + 0x012d, 0x0136, 0x013f, 0x0002, 0x0130, 0x0133, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0002, 0x0139, 0x013c, 0x0001, + 0x0000, 0x23cd, 0x0001, 0x0000, 0x23d0, 0x0002, 0x0142, 0x0145, + 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0003, 0x014c, + 0x0155, 0x015e, 0x0002, 0x014f, 0x0152, 0x0001, 0x0000, 0x04ef, + 0x0001, 0x0000, 0x04f2, 0x0002, 0x0158, 0x015b, 0x0001, 0x0000, + 0x23cd, 0x0001, 0x0000, 0x23d0, 0x0002, 0x0161, 0x0164, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0003, 0x0171, 0x0000, + // Entry 39440 - 3947F + 0x016b, 0x0001, 0x016d, 0x0002, 0x004d, 0x13ae, 0x13bb, 0x0002, + 0x0174, 0x0178, 0x0002, 0x004d, 0x13c7, 0x13ce, 0x0002, 0x004d, + 0x13ca, 0x13d1, 0x0004, 0x018a, 0x0184, 0x0181, 0x0187, 0x0001, + 0x004d, 0x13d4, 0x0001, 0x004d, 0x13eb, 0x0001, 0x0001, 0x0037, + 0x0001, 0x0002, 0x08e8, 0x0004, 0x019b, 0x0195, 0x0192, 0x0198, + 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, + 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, 0x01ac, 0x01a6, 0x01a3, + 0x01a9, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + // Entry 39480 - 394BF + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0040, 0x01f0, 0x0000, + 0x0000, 0x01f5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x020c, + 0x0000, 0x0000, 0x0217, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0222, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x022d, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0232, 0x0000, 0x0000, 0x023a, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0242, 0x0000, 0x0247, 0x0000, 0x0000, 0x024c, + // Entry 394C0 - 394FF + 0x0251, 0x0256, 0x025b, 0x0260, 0x0265, 0x026a, 0x0001, 0x01f2, + 0x0001, 0x004d, 0x13fc, 0x0003, 0x01f9, 0x01fc, 0x0201, 0x0001, + 0x004d, 0x1402, 0x0003, 0x004d, 0x1407, 0x141c, 0x1428, 0x0002, + 0x0000, 0x0204, 0x0006, 0x004d, 0x1447, 0x143a, 0xffff, 0xffff, + 0x1447, 0x1447, 0x0002, 0x020f, 0x0212, 0x0001, 0x004d, 0x1454, + 0x0003, 0x004d, 0x145a, 0x146e, 0x147b, 0x0002, 0x021a, 0x021d, + 0x0001, 0x004d, 0x148f, 0x0003, 0x004d, 0x1498, 0x14b1, 0x14c1, + 0x0002, 0x0225, 0x0228, 0x0001, 0x004d, 0x003b, 0x0003, 0x004d, + // Entry 39500 - 3953F + 0x14d7, 0x14e1, 0x14e7, 0x0001, 0x022f, 0x0001, 0x004d, 0x14ee, + 0x0002, 0x0000, 0x0235, 0x0003, 0x004d, 0x14ff, 0x1513, 0x1520, + 0x0002, 0x0000, 0x023d, 0x0003, 0x004d, 0x1531, 0x1545, 0x1552, + 0x0001, 0x0244, 0x0001, 0x004d, 0x1563, 0x0001, 0x0249, 0x0001, + 0x004d, 0x1569, 0x0001, 0x024e, 0x0001, 0x004d, 0x1571, 0x0001, + 0x0253, 0x0001, 0x0001, 0x07c5, 0x0001, 0x0258, 0x0001, 0x0000, + 0x1f9a, 0x0001, 0x025d, 0x0001, 0x004d, 0x1578, 0x0001, 0x0262, + 0x0001, 0x0001, 0x083e, 0x0001, 0x0267, 0x0001, 0x0000, 0x2002, + // Entry 39540 - 3957F + 0x0001, 0x026c, 0x0001, 0x004d, 0x1580, 0x0004, 0x0274, 0x0279, + 0x0000, 0x027e, 0x0003, 0x0000, 0x1dc7, 0x39fb, 0x3a02, 0x0003, + 0x004d, 0x1586, 0x1595, 0x159e, 0x0002, 0x0315, 0x0281, 0x0003, + 0x0285, 0x02e5, 0x02b5, 0x002e, 0x004d, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 39580 - 395BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x15b0, 0x002e, 0x004d, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x15c7, 0x002e, 0x004d, 0xffff, 0xffff, 0xffff, + // Entry 395C0 - 395FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x15e7, 0x0003, 0x0319, 0x0388, 0x034c, 0x0031, + 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 39600 - 3963F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x24ae, 0x24b7, + 0xffff, 0x2512, 0x003a, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 39640 - 3967F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x24ae, 0x24b7, 0xffff, 0x2512, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2516, 0x0031, 0x0007, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 39680 - 396BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x24b2, 0x24bb, 0xffff, + 0x24c4, 0x0002, 0x0003, 0x00e9, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, 0x0023, + 0x001d, 0x001a, 0x0020, 0x0001, 0x0002, 0x0000, 0x0001, 0x0002, + 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0000, 0x240c, 0x0008, + 0x002f, 0x0066, 0x008b, 0x009f, 0x00b7, 0x00c7, 0x00d8, 0x0000, + // Entry 396C0 - 396FF + 0x0002, 0x0032, 0x0054, 0x0003, 0x0036, 0x0000, 0x0045, 0x000d, + 0x004d, 0xffff, 0x1607, 0x160b, 0x160f, 0x1613, 0x1617, 0x161b, + 0x161f, 0x1623, 0x1627, 0x162b, 0x162f, 0x1633, 0x000d, 0x004d, + 0xffff, 0x1637, 0x1640, 0x164e, 0x1659, 0x1665, 0x1678, 0x168b, + 0x169b, 0x16a5, 0x16b3, 0x16c0, 0x16cd, 0x0002, 0x0000, 0x0057, + 0x000d, 0x0000, 0xffff, 0x2b50, 0x2b42, 0x204d, 0x2b4e, 0x2b3e, + 0x25eb, 0x2296, 0x2b3c, 0x2146, 0x39f0, 0x2151, 0x2523, 0x0002, + 0x0069, 0x007f, 0x0003, 0x006d, 0x0000, 0x0076, 0x0007, 0x004d, + // Entry 39700 - 3973F + 0x16d7, 0x16db, 0x16df, 0x16e3, 0x16e7, 0x16eb, 0x16ef, 0x0007, + 0x004d, 0x16f3, 0x16ff, 0x170a, 0x1716, 0x171f, 0x172e, 0x1738, + 0x0002, 0x0000, 0x0082, 0x0007, 0x0000, 0x2523, 0x2296, 0x2359, + 0x2b50, 0x2b42, 0x2289, 0x2146, 0x0001, 0x008d, 0x0003, 0x0091, + 0x0000, 0x0098, 0x0005, 0x0034, 0xffff, 0x0419, 0x041c, 0x041f, + 0x0422, 0x0005, 0x004d, 0xffff, 0x1744, 0x1761, 0x1782, 0x17a3, + 0x0001, 0x00a1, 0x0003, 0x00a5, 0x0000, 0x00ae, 0x0002, 0x00a8, + 0x00ab, 0x0001, 0x004d, 0x17c5, 0x0001, 0x004d, 0x17cb, 0x0002, + // Entry 39740 - 3977F + 0x00b1, 0x00b4, 0x0001, 0x004d, 0x17c5, 0x0001, 0x004d, 0x17cb, + 0x0003, 0x00c1, 0x0000, 0x00bb, 0x0001, 0x00bd, 0x0002, 0x004d, + 0x17d1, 0x17df, 0x0001, 0x00c3, 0x0002, 0x0017, 0x01f4, 0x2e7f, + 0x0004, 0x00d5, 0x00cf, 0x00cc, 0x00d2, 0x0001, 0x0002, 0x0025, + 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, 0x0002, + 0x028b, 0x0004, 0x00e6, 0x00e0, 0x00dd, 0x00e3, 0x0001, 0x0000, + 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, + 0x0000, 0x0546, 0x0040, 0x012a, 0x0000, 0x0000, 0x012f, 0x0000, + // Entry 39780 - 397BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0134, 0x0000, 0x0000, 0x0139, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x013e, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0149, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x014e, 0x0000, 0x0000, 0x0153, 0x0000, 0x0000, 0x0158, + 0x0000, 0x0000, 0x015d, 0x0001, 0x012c, 0x0001, 0x004d, 0x17ea, + // Entry 397C0 - 397FF + 0x0001, 0x0131, 0x0001, 0x004d, 0x17f7, 0x0001, 0x0136, 0x0001, + 0x004d, 0x17fc, 0x0001, 0x013b, 0x0001, 0x004d, 0x1801, 0x0002, + 0x0141, 0x0144, 0x0001, 0x004d, 0x1806, 0x0003, 0x004d, 0x1818, + 0x181f, 0x182b, 0x0001, 0x014b, 0x0001, 0x004d, 0x1836, 0x0001, + 0x0150, 0x0001, 0x004d, 0x1843, 0x0001, 0x0155, 0x0001, 0x004d, + 0x184d, 0x0001, 0x015a, 0x0001, 0x004d, 0x1861, 0x0001, 0x015f, + 0x0001, 0x004d, 0x187c, 0x0003, 0x0004, 0x0250, 0x0633, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0038, + // Entry 39800 - 3983F + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, + 0x0027, 0x0004, 0x0024, 0x001e, 0x001b, 0x0021, 0x0001, 0x004d, + 0x188b, 0x0001, 0x004d, 0x189c, 0x0001, 0x0007, 0x008f, 0x0001, + 0x004d, 0x18a8, 0x0004, 0x0035, 0x002f, 0x002c, 0x0032, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0008, 0x0041, 0x00a6, 0x00fd, 0x0132, + 0x0203, 0x021d, 0x022e, 0x023f, 0x0002, 0x0044, 0x0075, 0x0003, + 0x0048, 0x0057, 0x0066, 0x000d, 0x004d, 0xffff, 0x18b7, 0x18c1, + // Entry 39840 - 3987F + 0x18c8, 0x18d2, 0x18d6, 0x18dd, 0x18ea, 0x18f1, 0x18f5, 0x18ff, + 0x190f, 0x1919, 0x000d, 0x004d, 0xffff, 0x1920, 0x1924, 0x1928, + 0x18d2, 0x1928, 0x1920, 0x1920, 0x18f1, 0x192c, 0x1930, 0x1934, + 0x1938, 0x000d, 0x004d, 0xffff, 0x193c, 0x1955, 0x18c8, 0x1974, + 0x18d6, 0x18dd, 0x1981, 0x1997, 0x19a7, 0x19c0, 0x19df, 0x19f8, + 0x0003, 0x0079, 0x0088, 0x0097, 0x000d, 0x004d, 0xffff, 0x18b7, + 0x18c1, 0x18c8, 0x18d2, 0x18d6, 0x18dd, 0x18ea, 0x18f1, 0x18f5, + 0x18ff, 0x190f, 0x1919, 0x000d, 0x004d, 0xffff, 0x1920, 0x1924, + // Entry 39880 - 398BF + 0x1928, 0x18d2, 0x1928, 0x1920, 0x1920, 0x18f1, 0x192c, 0x1930, + 0x1934, 0x1938, 0x000d, 0x004d, 0xffff, 0x193c, 0x1955, 0x18c8, + 0x1974, 0x18d6, 0x18dd, 0x1981, 0x1997, 0x19a7, 0x19c0, 0x19df, + 0x19f8, 0x0002, 0x00a9, 0x00d3, 0x0005, 0x00af, 0x00b8, 0x00ca, + 0x0000, 0x00c1, 0x0007, 0x004d, 0x1a0e, 0x1a2a, 0x1a40, 0x1a53, + 0x1a6c, 0x1a85, 0x1a98, 0x0007, 0x004d, 0x1aa2, 0x1aa2, 0x1930, + 0x1aa6, 0x1aaa, 0x1aae, 0x192c, 0x0007, 0x004d, 0x1a0e, 0x1a2a, + 0x1a40, 0x1a53, 0x1a6c, 0x1a85, 0x1a98, 0x0007, 0x004d, 0x1a0e, + // Entry 398C0 - 398FF + 0x1a2a, 0x1a40, 0x1a53, 0x1a6c, 0x1a85, 0x1a98, 0x0005, 0x00d9, + 0x00e2, 0x00f4, 0x0000, 0x00eb, 0x0007, 0x004d, 0x1a0e, 0x1a2a, + 0x1a40, 0x1a53, 0x1a6c, 0x1a85, 0x1a98, 0x0007, 0x004d, 0x1aa2, + 0x1aa2, 0x1930, 0x1aa6, 0x1aaa, 0x1aae, 0x192c, 0x0007, 0x004d, + 0x1a0e, 0x1a2a, 0x1a40, 0x1a53, 0x1a6c, 0x1a85, 0x1a98, 0x0007, + 0x004d, 0x1a0e, 0x1a2a, 0x1a40, 0x1a53, 0x1a6c, 0x1a85, 0x1a98, + 0x0002, 0x0100, 0x0119, 0x0003, 0x0104, 0x010b, 0x0112, 0x0005, + 0x004d, 0xffff, 0x1ab2, 0x1ad5, 0x1afe, 0x1b24, 0x0005, 0x004d, + // Entry 39900 - 3993F + 0xffff, 0x1b50, 0x1b54, 0x1aa2, 0x192c, 0x0005, 0x004d, 0xffff, + 0x1ab2, 0x1ad5, 0x1afe, 0x1b24, 0x0003, 0x011d, 0x0124, 0x012b, + 0x0005, 0x004d, 0xffff, 0x1ab2, 0x1ad5, 0x1afe, 0x1b24, 0x0005, + 0x004d, 0xffff, 0x1b50, 0x1b54, 0x1aa2, 0x192c, 0x0005, 0x004d, + 0xffff, 0x1ab2, 0x1ad5, 0x1afe, 0x1b24, 0x0002, 0x0135, 0x019c, + 0x0003, 0x0139, 0x015a, 0x017b, 0x0008, 0x0145, 0x014b, 0x0142, + 0x014e, 0x0151, 0x0154, 0x0157, 0x0148, 0x0001, 0x004d, 0x1b5b, + 0x0001, 0x004d, 0x1b7d, 0x0001, 0x004d, 0x1b8d, 0x0001, 0x004d, + // Entry 39940 - 3997F + 0x1ba9, 0x0001, 0x004d, 0x1b7d, 0x0001, 0x004d, 0x1bb3, 0x0001, + 0x004d, 0x1ba9, 0x0001, 0x004d, 0x1bc6, 0x0008, 0x0166, 0x016c, + 0x0163, 0x016f, 0x0172, 0x0175, 0x0178, 0x0169, 0x0001, 0x004d, + 0x1b5b, 0x0001, 0x004d, 0x1b7d, 0x0001, 0x004d, 0x1b8d, 0x0001, + 0x004d, 0x1ba9, 0x0001, 0x004d, 0x1b7d, 0x0001, 0x004d, 0x1bb3, + 0x0001, 0x004d, 0x1ba9, 0x0001, 0x004d, 0x1bc6, 0x0008, 0x0187, + 0x018d, 0x0184, 0x0190, 0x0193, 0x0196, 0x0199, 0x018a, 0x0001, + 0x004d, 0x1b5b, 0x0001, 0x004d, 0x1b7d, 0x0001, 0x004d, 0x1b8d, + // Entry 39980 - 399BF + 0x0001, 0x004d, 0x1ba9, 0x0001, 0x004d, 0x1b7d, 0x0001, 0x004d, + 0x1bb3, 0x0001, 0x004d, 0x1ba9, 0x0001, 0x004d, 0x1bc6, 0x0003, + 0x01a0, 0x01c1, 0x01e2, 0x0008, 0x01ac, 0x01b2, 0x01a9, 0x01b5, + 0x01b8, 0x01bb, 0x01be, 0x01af, 0x0001, 0x004d, 0x1b5b, 0x0001, + 0x004d, 0x1b7d, 0x0001, 0x004d, 0x1b8d, 0x0001, 0x004d, 0x1ba9, + 0x0001, 0x004d, 0x1b7d, 0x0001, 0x004d, 0x1bb3, 0x0001, 0x004d, + 0x1ba9, 0x0001, 0x004d, 0x1bc6, 0x0008, 0x01cd, 0x01d3, 0x01ca, + 0x01d6, 0x01d9, 0x01dc, 0x01df, 0x01d0, 0x0001, 0x004d, 0x1b5b, + // Entry 399C0 - 399FF + 0x0001, 0x004d, 0x1b7d, 0x0001, 0x004d, 0x1b8d, 0x0001, 0x004d, + 0x1ba9, 0x0001, 0x004d, 0x1b7d, 0x0001, 0x004d, 0x1bb3, 0x0001, + 0x004d, 0x1ba9, 0x0001, 0x004d, 0x1bc6, 0x0008, 0x01ee, 0x01f4, + 0x01eb, 0x01f7, 0x01fa, 0x01fd, 0x0200, 0x01f1, 0x0001, 0x004d, + 0x1b5b, 0x0001, 0x004d, 0x1b7d, 0x0001, 0x004d, 0x1b8d, 0x0001, + 0x004d, 0x1ba9, 0x0001, 0x004d, 0x1b7d, 0x0001, 0x004d, 0x1bb3, + 0x0001, 0x004d, 0x1ba9, 0x0001, 0x004d, 0x1bc6, 0x0003, 0x0212, + 0x0000, 0x0207, 0x0002, 0x020a, 0x020e, 0x0002, 0x004d, 0x1bca, + // Entry 39A00 - 39A3F + 0x1c34, 0x0002, 0x004d, 0x1c05, 0x1c4d, 0x0002, 0x0215, 0x0219, + 0x0002, 0x004d, 0x1c63, 0x1c86, 0x0002, 0x004d, 0x1c70, 0x1c93, + 0x0004, 0x022b, 0x0225, 0x0222, 0x0228, 0x0001, 0x004d, 0x1ca3, + 0x0001, 0x004d, 0x1cb7, 0x0001, 0x004d, 0x1cc3, 0x0001, 0x001f, + 0x0579, 0x0004, 0x023c, 0x0236, 0x0233, 0x0239, 0x0001, 0x004d, + 0x1cce, 0x0001, 0x004d, 0x1cdc, 0x0001, 0x004d, 0x1ce7, 0x0001, + 0x004d, 0x1cf2, 0x0004, 0x024d, 0x0247, 0x0244, 0x024a, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + // Entry 39A40 - 39A7F + 0x0001, 0x0000, 0x03c6, 0x0042, 0x0293, 0x0298, 0x029d, 0x02a2, + 0x02b7, 0x02c7, 0x02d7, 0x02ec, 0x0301, 0x0316, 0x032b, 0x033b, + 0x034b, 0x0364, 0x0378, 0x038c, 0x0391, 0x0396, 0x039b, 0x03b2, + 0x03c2, 0x03d2, 0x03d7, 0x03dc, 0x03e1, 0x03e6, 0x03eb, 0x03f0, + 0x03f5, 0x03fa, 0x03ff, 0x0411, 0x0423, 0x0435, 0x0447, 0x0459, + 0x046b, 0x047d, 0x048f, 0x04a1, 0x04b3, 0x04c5, 0x04d7, 0x04e9, + 0x04fb, 0x050d, 0x051f, 0x0531, 0x0543, 0x0555, 0x0567, 0x0579, + 0x057e, 0x0583, 0x0588, 0x059c, 0x05ac, 0x05bc, 0x05d0, 0x05e0, + // Entry 39A80 - 39ABF + 0x05f0, 0x0604, 0x0614, 0x0624, 0x0629, 0x062e, 0x0001, 0x0295, + 0x0001, 0x004d, 0x1cf9, 0x0001, 0x029a, 0x0001, 0x004d, 0x1cf9, + 0x0001, 0x029f, 0x0001, 0x004d, 0x1cf9, 0x0003, 0x02a6, 0x02a9, + 0x02ae, 0x0001, 0x004d, 0x1d06, 0x0003, 0x004d, 0x1d13, 0x1d2c, + 0x1d42, 0x0002, 0x02b1, 0x02b4, 0x0001, 0x004d, 0x1d61, 0x0001, + 0x004d, 0x1d84, 0x0003, 0x02bb, 0x0000, 0x02be, 0x0001, 0x004d, + 0x1d06, 0x0002, 0x02c1, 0x02c4, 0x0001, 0x004d, 0x1d61, 0x0001, + 0x004d, 0x1d84, 0x0003, 0x02cb, 0x0000, 0x02ce, 0x0001, 0x004d, + // Entry 39AC0 - 39AFF + 0x1d06, 0x0002, 0x02d1, 0x02d4, 0x0001, 0x004d, 0x1d61, 0x0001, + 0x004d, 0x1d84, 0x0003, 0x02db, 0x02de, 0x02e3, 0x0001, 0x004d, + 0x1db7, 0x0003, 0x004d, 0x1dd0, 0x1e0b, 0x1e2e, 0x0002, 0x02e6, + 0x02e9, 0x0001, 0x004d, 0x1e5a, 0x0001, 0x004d, 0x1e93, 0x0003, + 0x02f0, 0x02f3, 0x02f8, 0x0001, 0x004d, 0x1db7, 0x0003, 0x004d, + 0x1ef4, 0x1f2b, 0x1f4d, 0x0002, 0x02fb, 0x02fe, 0x0001, 0x004d, + 0x1f87, 0x0001, 0x004d, 0x1e93, 0x0003, 0x0305, 0x0308, 0x030d, + 0x0001, 0x004d, 0x1db7, 0x0003, 0x004d, 0x1ef4, 0x1f2b, 0x1f4d, + // Entry 39B00 - 39B3F + 0x0002, 0x0310, 0x0313, 0x0001, 0x004d, 0x1f87, 0x0001, 0x004d, + 0x1e93, 0x0003, 0x031a, 0x031d, 0x0322, 0x0001, 0x004d, 0x1fc6, + 0x0003, 0x004d, 0x1fca, 0x1fef, 0x1ffc, 0x0002, 0x0325, 0x0328, + 0x0001, 0x004e, 0x0000, 0x0001, 0x004e, 0x001a, 0x0003, 0x032f, + 0x0000, 0x0332, 0x0001, 0x004d, 0x1fc6, 0x0002, 0x0335, 0x0338, + 0x0001, 0x004e, 0x0000, 0x0001, 0x004e, 0x001a, 0x0003, 0x033f, + 0x0000, 0x0342, 0x0001, 0x004d, 0x1fc6, 0x0002, 0x0345, 0x0348, + 0x0001, 0x004e, 0x0000, 0x0001, 0x004e, 0x001a, 0x0004, 0x0350, + // Entry 39B40 - 39B7F + 0x0353, 0x0358, 0x0361, 0x0001, 0x004e, 0x0044, 0x0003, 0x004e, + 0x004e, 0x008c, 0x00b2, 0x0002, 0x035b, 0x035e, 0x0001, 0x004e, + 0x00e1, 0x0001, 0x004e, 0x0101, 0x0001, 0x004e, 0x0131, 0x0004, + 0x0369, 0x0000, 0x036c, 0x0375, 0x0001, 0x004e, 0x0044, 0x0002, + 0x036f, 0x0372, 0x0001, 0x004e, 0x00e1, 0x0001, 0x004e, 0x0101, + 0x0001, 0x004e, 0x0131, 0x0004, 0x037d, 0x0000, 0x0380, 0x0389, + 0x0001, 0x004e, 0x0044, 0x0002, 0x0383, 0x0386, 0x0001, 0x004e, + 0x00e1, 0x0001, 0x004e, 0x0101, 0x0001, 0x004e, 0x0131, 0x0001, + // Entry 39B80 - 39BBF + 0x038e, 0x0001, 0x004e, 0x016d, 0x0001, 0x0393, 0x0001, 0x004e, + 0x016d, 0x0001, 0x0398, 0x0001, 0x004e, 0x016d, 0x0003, 0x039f, + 0x03a2, 0x03a9, 0x0001, 0x004e, 0x01b0, 0x0005, 0x004e, 0x01d0, + 0x01e0, 0x01ed, 0x01ba, 0x0206, 0x0002, 0x03ac, 0x03af, 0x0001, + 0x004e, 0x021f, 0x0001, 0x004e, 0x023f, 0x0003, 0x03b6, 0x0000, + 0x03b9, 0x0001, 0x004e, 0x01b0, 0x0002, 0x03bc, 0x03bf, 0x0001, + 0x004e, 0x021f, 0x0001, 0x004e, 0x023f, 0x0003, 0x03c6, 0x0000, + 0x03c9, 0x0001, 0x004e, 0x01b0, 0x0002, 0x03cc, 0x03cf, 0x0001, + // Entry 39BC0 - 39BFF + 0x004e, 0x021f, 0x0001, 0x004e, 0x023f, 0x0001, 0x03d4, 0x0001, + 0x004e, 0x026f, 0x0001, 0x03d9, 0x0001, 0x004e, 0x026f, 0x0001, + 0x03de, 0x0001, 0x004e, 0x026f, 0x0001, 0x03e3, 0x0001, 0x004e, + 0x02bc, 0x0001, 0x03e8, 0x0001, 0x004e, 0x02bc, 0x0001, 0x03ed, + 0x0001, 0x004e, 0x02bc, 0x0001, 0x03f2, 0x0001, 0x004e, 0x02c6, + 0x0001, 0x03f7, 0x0001, 0x004e, 0x02c6, 0x0001, 0x03fc, 0x0001, + 0x004e, 0x02c6, 0x0003, 0x0000, 0x0403, 0x0408, 0x0003, 0x004e, + 0x0306, 0x034d, 0x0375, 0x0002, 0x040b, 0x040e, 0x0001, 0x004e, + // Entry 39C00 - 39C3F + 0x03ad, 0x0001, 0x004e, 0x03e9, 0x0003, 0x0000, 0x0415, 0x041a, + 0x0003, 0x004e, 0x0306, 0x034d, 0x0375, 0x0002, 0x041d, 0x0420, + 0x0001, 0x004e, 0x03ad, 0x0001, 0x004e, 0x03e9, 0x0003, 0x0000, + 0x0427, 0x042c, 0x0003, 0x004e, 0x0306, 0x034d, 0x0375, 0x0002, + 0x042f, 0x0432, 0x0001, 0x004e, 0x03ad, 0x0001, 0x004e, 0x03e9, + 0x0003, 0x0000, 0x0439, 0x043e, 0x0003, 0x004e, 0x0435, 0x0476, + 0x0498, 0x0002, 0x0441, 0x0444, 0x0001, 0x004e, 0x04ca, 0x0001, + 0x004e, 0x0500, 0x0003, 0x0000, 0x044b, 0x0450, 0x0003, 0x004e, + // Entry 39C40 - 39C7F + 0x0435, 0x0476, 0x0498, 0x0002, 0x0453, 0x0456, 0x0001, 0x004e, + 0x04ca, 0x0001, 0x004e, 0x0500, 0x0003, 0x0000, 0x045d, 0x0462, + 0x0003, 0x004e, 0x0435, 0x0476, 0x0498, 0x0002, 0x0465, 0x0468, + 0x0001, 0x004e, 0x04ca, 0x0001, 0x004e, 0x0500, 0x0003, 0x0000, + 0x046f, 0x0474, 0x0003, 0x004e, 0x0546, 0x0584, 0x05a3, 0x0002, + 0x0477, 0x047a, 0x0001, 0x004e, 0x05d2, 0x0001, 0x004e, 0x0605, + 0x0003, 0x0000, 0x0481, 0x0486, 0x0003, 0x004e, 0x0546, 0x0584, + 0x05a3, 0x0002, 0x0489, 0x048c, 0x0001, 0x004e, 0x05d2, 0x0001, + // Entry 39C80 - 39CBF + 0x004e, 0x0605, 0x0003, 0x0000, 0x0493, 0x0498, 0x0003, 0x004e, + 0x0546, 0x0584, 0x05a3, 0x0002, 0x049b, 0x049e, 0x0001, 0x004e, + 0x05d2, 0x0001, 0x004e, 0x0605, 0x0003, 0x0000, 0x04a5, 0x04aa, + 0x0003, 0x004e, 0x0648, 0x068c, 0x06b1, 0x0002, 0x04ad, 0x04b0, + 0x0001, 0x004e, 0x06e6, 0x0001, 0x004e, 0x071f, 0x0003, 0x0000, + 0x04b7, 0x04bc, 0x0003, 0x004e, 0x0648, 0x068c, 0x06b1, 0x0002, + 0x04bf, 0x04c2, 0x0001, 0x004e, 0x06e6, 0x0001, 0x004e, 0x071f, + 0x0003, 0x0000, 0x04c9, 0x04ce, 0x0003, 0x004e, 0x0648, 0x068c, + // Entry 39CC0 - 39CFF + 0x06b1, 0x0002, 0x04d1, 0x04d4, 0x0001, 0x004e, 0x06e6, 0x0001, + 0x004e, 0x071f, 0x0003, 0x0000, 0x04db, 0x04e0, 0x0003, 0x004e, + 0x0768, 0x07ac, 0x07d1, 0x0002, 0x04e3, 0x04e6, 0x0001, 0x004e, + 0x0806, 0x0001, 0x004e, 0x083f, 0x0003, 0x0000, 0x04ed, 0x04f2, + 0x0003, 0x004e, 0x0768, 0x07ac, 0x07d1, 0x0002, 0x04f5, 0x04f8, + 0x0001, 0x004e, 0x0806, 0x0001, 0x004e, 0x083f, 0x0003, 0x0000, + 0x04ff, 0x0504, 0x0003, 0x004e, 0x0768, 0x07ac, 0x07d1, 0x0002, + 0x0507, 0x050a, 0x0001, 0x004e, 0x0806, 0x0001, 0x004e, 0x083f, + // Entry 39D00 - 39D3F + 0x0003, 0x0000, 0x0511, 0x0516, 0x0003, 0x004e, 0x0888, 0x08c6, + 0x08e5, 0x0002, 0x0519, 0x051c, 0x0001, 0x004e, 0x0914, 0x0001, + 0x004e, 0x0947, 0x0003, 0x0000, 0x0523, 0x0528, 0x0003, 0x004e, + 0x0888, 0x08c6, 0x08e5, 0x0002, 0x052b, 0x052e, 0x0001, 0x004e, + 0x0914, 0x0001, 0x004e, 0x0947, 0x0003, 0x0000, 0x0535, 0x053a, + 0x0003, 0x004e, 0x0888, 0x08c6, 0x08e5, 0x0002, 0x053d, 0x0540, + 0x0001, 0x004e, 0x0914, 0x0001, 0x004e, 0x0947, 0x0003, 0x0000, + 0x0547, 0x054c, 0x0003, 0x004e, 0x099c, 0x09d1, 0x09e7, 0x0002, + // Entry 39D40 - 39D7F + 0x054f, 0x0552, 0x0001, 0x004e, 0x0a0d, 0x0001, 0x004e, 0x0a37, + 0x0003, 0x0000, 0x0559, 0x055e, 0x0003, 0x004e, 0x099c, 0x09d1, + 0x09e7, 0x0002, 0x0561, 0x0564, 0x0001, 0x004e, 0x0a0d, 0x0001, + 0x004e, 0x0a37, 0x0003, 0x0000, 0x056b, 0x0570, 0x0003, 0x004e, + 0x099c, 0x09d1, 0x09e7, 0x0002, 0x0573, 0x0576, 0x0001, 0x004e, + 0x0a0d, 0x0001, 0x004e, 0x0a37, 0x0001, 0x057b, 0x0001, 0x004e, + 0x0a83, 0x0001, 0x0580, 0x0001, 0x004e, 0x0a83, 0x0001, 0x0585, + 0x0001, 0x004e, 0x0a83, 0x0003, 0x058c, 0x058f, 0x0593, 0x0001, + // Entry 39D80 - 39DBF + 0x004e, 0x0a9d, 0x0002, 0x004e, 0xffff, 0x0aaa, 0x0002, 0x0596, + 0x0599, 0x0001, 0x004e, 0x0ac0, 0x0001, 0x004e, 0x0ae3, 0x0003, + 0x05a0, 0x0000, 0x05a3, 0x0001, 0x004e, 0x0a9d, 0x0002, 0x05a6, + 0x05a9, 0x0001, 0x004e, 0x0ac0, 0x0001, 0x004e, 0x0ae3, 0x0003, + 0x05b0, 0x0000, 0x05b3, 0x0001, 0x004e, 0x0a9d, 0x0002, 0x05b6, + 0x05b9, 0x0001, 0x004e, 0x0ac0, 0x0001, 0x004e, 0x0ae3, 0x0003, + 0x05c0, 0x05c3, 0x05c7, 0x0001, 0x004e, 0x0b16, 0x0002, 0x004e, + 0xffff, 0x0b26, 0x0002, 0x05ca, 0x05cd, 0x0001, 0x004e, 0x0b39, + // Entry 39DC0 - 39DFF + 0x0001, 0x004e, 0x0b5f, 0x0003, 0x05d4, 0x0000, 0x05d7, 0x0001, + 0x004e, 0x0b16, 0x0002, 0x05da, 0x05dd, 0x0001, 0x004e, 0x0b39, + 0x0001, 0x004e, 0x0b5f, 0x0003, 0x05e4, 0x0000, 0x05e7, 0x0001, + 0x004e, 0x0b16, 0x0002, 0x05ea, 0x05ed, 0x0001, 0x004e, 0x0b39, + 0x0001, 0x004e, 0x0b5f, 0x0003, 0x05f4, 0x05f7, 0x05fb, 0x0001, + 0x004e, 0x0b95, 0x0002, 0x004e, 0xffff, 0x0bab, 0x0002, 0x05fe, + 0x0601, 0x0001, 0x004e, 0x0bb5, 0x0001, 0x004e, 0x0be1, 0x0003, + 0x0608, 0x0000, 0x060b, 0x0001, 0x004e, 0x0b95, 0x0002, 0x060e, + // Entry 39E00 - 39E3F + 0x0611, 0x0001, 0x004e, 0x0bb5, 0x0001, 0x004e, 0x0be1, 0x0003, + 0x0618, 0x0000, 0x061b, 0x0001, 0x004e, 0x0b95, 0x0002, 0x061e, + 0x0621, 0x0001, 0x004e, 0x0bb5, 0x0001, 0x004e, 0x0be1, 0x0001, + 0x0626, 0x0001, 0x004e, 0x0c1d, 0x0001, 0x062b, 0x0001, 0x004e, + 0x0c1d, 0x0001, 0x0630, 0x0001, 0x004e, 0x0c1d, 0x0004, 0x0638, + 0x063d, 0x0642, 0x0651, 0x0003, 0x0000, 0x1dc7, 0x39fb, 0x3a6f, + 0x0003, 0x004e, 0x0c2a, 0x0c41, 0x0c7d, 0x0002, 0x0000, 0x0645, + 0x0003, 0x0000, 0x064c, 0x0649, 0x0001, 0x004e, 0x0ca3, 0x0003, + // Entry 39E40 - 39E7F + 0x004e, 0xffff, 0x0cf7, 0x0d36, 0x0002, 0x0000, 0x0654, 0x0003, + 0x06f7, 0x0796, 0x0658, 0x009d, 0x004e, 0x0d7d, 0x0db8, 0x0dea, + 0x0e1f, 0x0e8c, 0x0f47, 0x0fed, 0x10b3, 0x11ec, 0x132e, 0x1467, + 0xffff, 0x1558, 0x15e9, 0x1692, 0x1771, 0x1861, 0x1922, 0x1a05, + 0x1b26, 0x1c52, 0x1d2b, 0x1df2, 0x1ebc, 0x1f89, 0x202a, 0x204d, + 0x20ab, 0x211c, 0x218d, 0x2218, 0x226f, 0x2305, 0x2393, 0x2436, + 0x24cb, 0x2509, 0x2573, 0x2634, 0x26fe, 0x2784, 0x27aa, 0x27f5, + 0x285b, 0x28e7, 0x2954, 0x2a2d, 0x2ab6, 0x2b33, 0x2c06, 0x2cd6, + // Entry 39E80 - 39EBF + 0x2d41, 0x2d83, 0x2df8, 0x2e32, 0x2e8d, 0x2f16, 0x2f57, 0x2fd0, + 0x30bf, 0x3174, 0x31a6, 0x3226, 0x332e, 0x33dd, 0x344e, 0x3486, + 0x34c7, 0x350b, 0x3565, 0x35c2, 0x3645, 0x36dc, 0x3782, 0x381c, + 0xffff, 0x3887, 0x38c5, 0x3935, 0x39b8, 0x3a25, 0x3ac0, 0x3b24, + 0x3b97, 0x3cbd, 0x3d2a, 0x3da7, 0x3dd3, 0x3e05, 0x3e37, 0x3ea4, + 0x3f27, 0x3fa4, 0x40bf, 0x41ac, 0x425b, 0x42d8, 0x42fe, 0x4324, + 0x4394, 0x447c, 0x4537, 0x45db, 0x4601, 0x4694, 0x47a2, 0x487e, + 0x4930, 0x49b3, 0x49d9, 0x4a43, 0x4ae3, 0x4b80, 0x4c09, 0x4c9f, + // Entry 39EC0 - 39EFF + 0x4d85, 0x4db7, 0x4de6, 0x4e12, 0x4e3e, 0x4e90, 0xffff, 0x4f2d, + 0x4fa4, 0x4fca, 0x4ff6, 0x503d, 0x507e, 0x50ac, 0x50d2, 0x511e, + 0x5195, 0x51d0, 0x5222, 0x5293, 0x52f7, 0x539e, 0x53f0, 0x549f, + 0x555d, 0x55d4, 0x564d, 0x5732, 0x57c1, 0x57f3, 0x582b, 0x58a8, + 0x596f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x3af2, 0x3c4c, 0x009d, 0x004e, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0e54, 0x0f21, 0x0fc7, 0x105d, 0x1193, 0x12d2, 0x141a, 0xffff, + 0x1535, 0x15c3, 0x165a, 0x1726, 0x182c, 0x18f0, 0x19ba, 0x1ac0, + // Entry 39F00 - 39F3F + 0x1c17, 0x1ced, 0x1dba, 0x1e87, 0x1f4b, 0xffff, 0xffff, 0x2085, + 0xffff, 0x215a, 0xffff, 0x2247, 0x22e2, 0x2370, 0x23fe, 0xffff, + 0xffff, 0x2544, 0x25f6, 0x26d5, 0xffff, 0xffff, 0xffff, 0x2827, + 0xffff, 0x2913, 0x29fb, 0xffff, 0x2afe, 0x2bc2, 0x2cb3, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2e5b, 0xffff, 0xffff, 0x2f92, 0x307d, + 0xffff, 0xffff, 0x31d5, 0x32fc, 0x33b7, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x3622, 0x36b0, 0x3759, 0x37f9, 0xffff, + 0xffff, 0xffff, 0x3906, 0xffff, 0x39ea, 0xffff, 0xffff, 0x3b62, + // Entry 39F40 - 39F7F + 0xffff, 0x3cfe, 0xffff, 0xffff, 0xffff, 0xffff, 0x3e75, 0xffff, + 0x3f53, 0x407a, 0x417d, 0x422f, 0xffff, 0xffff, 0xffff, 0x4347, + 0x444d, 0x44ff, 0xffff, 0xffff, 0x4641, 0x475e, 0x484f, 0x4901, + 0xffff, 0xffff, 0x4a17, 0x4ac0, 0x4b4e, 0xffff, 0x4c47, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x4e67, 0xffff, 0x4f07, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x50f5, 0xffff, + 0xffff, 0x51fc, 0xffff, 0x52b6, 0xffff, 0x53c7, 0x5467, 0x5534, + 0xffff, 0x5609, 0x56fa, 0xffff, 0xffff, 0xffff, 0x5879, 0x592b, + // Entry 39F80 - 39FBF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x3c26, 0x009d, 0x004e, 0xffff, 0xffff, 0xffff, 0xffff, 0x0ed3, + 0x0f7c, 0x1022, 0x1118, 0x1254, 0x1399, 0x14c3, 0xffff, 0x158a, + 0x161e, 0x16d9, 0x17cb, 0x18a5, 0x1963, 0x1a5f, 0x1b9b, 0x1c9c, + 0x1d78, 0x1e39, 0x1f00, 0x1fd6, 0xffff, 0xffff, 0x20e0, 0xffff, + 0x21cf, 0xffff, 0x22a6, 0x2337, 0x23c5, 0x247d, 0xffff, 0xffff, + 0x25b1, 0x2681, 0x2736, 0xffff, 0xffff, 0xffff, 0x289e, 0xffff, + 0x29a4, 0x2a6e, 0xffff, 0x2b77, 0x2c59, 0x2d08, 0xffff, 0xffff, + // Entry 39FC0 - 39FFF + 0xffff, 0xffff, 0x2ece, 0xffff, 0xffff, 0x301d, 0x3110, 0xffff, + 0xffff, 0x3286, 0x336f, 0x3412, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x3677, 0x3717, 0x37ba, 0x384e, 0xffff, 0xffff, + 0xffff, 0x3973, 0xffff, 0x3a6f, 0xffff, 0xffff, 0x3bdb, 0xffff, + 0x3d65, 0xffff, 0xffff, 0xffff, 0xffff, 0x3ee2, 0xffff, 0x4004, + 0x4113, 0x41ea, 0x4296, 0xffff, 0xffff, 0xffff, 0x43ed, 0x44ba, + 0x457e, 0xffff, 0xffff, 0x46f6, 0x47f5, 0x48bc, 0x496e, 0xffff, + 0xffff, 0x4a7e, 0x4b15, 0x4bc1, 0xffff, 0x4d06, 0xffff, 0xffff, + // Entry 3A000 - 3A03F + 0xffff, 0xffff, 0xffff, 0x4ec8, 0xffff, 0x4f62, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x5156, 0xffff, 0xffff, + 0x5257, 0xffff, 0x5347, 0xffff, 0x5428, 0x54e6, 0x5595, 0xffff, + 0x56a0, 0x5779, 0xffff, 0xffff, 0xffff, 0x58e6, 0x59c2, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3c81, + 0x0003, 0x0004, 0x0074, 0x0305, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0005, 0x0013, 0x0000, + 0x0000, 0x0000, 0x005a, 0x0002, 0x0016, 0x0038, 0x0003, 0x001a, + // Entry 3A040 - 3A07F + 0x0000, 0x0029, 0x000d, 0x0021, 0xffff, 0x0506, 0x0513, 0x3963, + 0x048b, 0x051e, 0x049d, 0x0523, 0x04b3, 0x04ba, 0x04c9, 0x04d4, + 0x04e1, 0x000d, 0x0021, 0xffff, 0x0506, 0x0513, 0x3963, 0x048b, + 0x051e, 0x049d, 0x0523, 0x04b3, 0x04ba, 0x04c9, 0x04d4, 0x04e1, + 0x0003, 0x003c, 0x0000, 0x004b, 0x000d, 0x0021, 0xffff, 0x0506, + 0x0513, 0x3963, 0x048b, 0x051e, 0x049d, 0x0523, 0x04b3, 0x04ba, + 0x04c9, 0x04d4, 0x04e1, 0x000d, 0x0021, 0xffff, 0x0506, 0x0513, + 0x3963, 0x048b, 0x051e, 0x049d, 0x0523, 0x04b3, 0x04ba, 0x04c9, + // Entry 3A080 - 3A0BF + 0x04d4, 0x04e1, 0x0003, 0x0069, 0x0000, 0x005e, 0x0002, 0x0061, + 0x0065, 0x0002, 0x004f, 0x0000, 0x0031, 0x0002, 0x004f, 0x0012, + 0x0043, 0x0002, 0x006c, 0x0070, 0x0002, 0x004f, 0x0050, 0x005d, + 0x0002, 0x004f, 0x0056, 0x0061, 0x0040, 0x00b5, 0x0000, 0x0000, + 0x00ba, 0x00cf, 0x00df, 0x00ef, 0x00ff, 0x010f, 0x011f, 0x0134, + 0x0144, 0x0154, 0x0169, 0x0179, 0x0000, 0x0000, 0x0000, 0x0189, + 0x019e, 0x01ae, 0x0000, 0x0000, 0x0000, 0x01be, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x01c3, 0x01cb, 0x01d3, 0x01db, 0x01e3, + // Entry 3A0C0 - 3A0FF + 0x01eb, 0x01f3, 0x01fb, 0x0203, 0x020b, 0x0213, 0x021b, 0x0223, + 0x022b, 0x0233, 0x023b, 0x0243, 0x024b, 0x0253, 0x025b, 0x0263, + 0x0000, 0x026b, 0x0000, 0x0270, 0x0280, 0x0290, 0x02a0, 0x02b0, + 0x02c0, 0x02d0, 0x02e0, 0x02f0, 0x0300, 0x0001, 0x00b7, 0x0001, + 0x004f, 0x0064, 0x0003, 0x00be, 0x00c1, 0x00c6, 0x0001, 0x0021, + 0x098b, 0x0003, 0x004f, 0x006f, 0x007c, 0x0087, 0x0002, 0x00c9, + 0x00cc, 0x0001, 0x004f, 0x0097, 0x0001, 0x0021, 0x09d3, 0x0003, + 0x00d3, 0x0000, 0x00d6, 0x0001, 0x0021, 0x098b, 0x0002, 0x00d9, + // Entry 3A100 - 3A13F + 0x00dc, 0x0001, 0x004f, 0x0097, 0x0001, 0x0021, 0x09d3, 0x0003, + 0x00e3, 0x0000, 0x00e6, 0x0001, 0x0021, 0x098b, 0x0002, 0x00e9, + 0x00ec, 0x0001, 0x004f, 0x0097, 0x0001, 0x0021, 0x09d3, 0x0003, + 0x00f3, 0x0000, 0x00f6, 0x0001, 0x004f, 0x00a9, 0x0002, 0x00f9, + 0x00fc, 0x0001, 0x004f, 0x00b0, 0x0001, 0x004f, 0x00c2, 0x0003, + 0x0103, 0x0000, 0x0106, 0x0001, 0x004f, 0x00a9, 0x0002, 0x0109, + 0x010c, 0x0001, 0x004f, 0x00b0, 0x0001, 0x004f, 0x00c2, 0x0003, + 0x0113, 0x0000, 0x0116, 0x0001, 0x004f, 0x00a9, 0x0002, 0x0119, + // Entry 3A140 - 3A17F + 0x011c, 0x0001, 0x004f, 0x00b0, 0x0001, 0x004f, 0x00c2, 0x0003, + 0x0123, 0x0126, 0x012b, 0x0001, 0x0021, 0x0a86, 0x0003, 0x004f, + 0x00d4, 0x00e2, 0x00f0, 0x0002, 0x012e, 0x0131, 0x0001, 0x004f, + 0x0100, 0x0001, 0x0021, 0x0ad1, 0x0003, 0x0138, 0x0000, 0x013b, + 0x0001, 0x0021, 0x0a86, 0x0002, 0x013e, 0x0141, 0x0001, 0x004f, + 0x0100, 0x0001, 0x0021, 0x0ad1, 0x0003, 0x0148, 0x0000, 0x014b, + 0x0001, 0x0021, 0x0a86, 0x0002, 0x014e, 0x0151, 0x0001, 0x004f, + 0x0100, 0x0001, 0x0021, 0x0ad1, 0x0003, 0x0158, 0x015b, 0x0160, + // Entry 3A180 - 3A1BF + 0x0001, 0x0021, 0x0af1, 0x0003, 0x004f, 0x0112, 0x0124, 0x0134, + 0x0002, 0x0163, 0x0166, 0x0001, 0x004f, 0x0146, 0x0001, 0x0021, + 0x0b4a, 0x0003, 0x016d, 0x0000, 0x0170, 0x0001, 0x0021, 0x0af1, + 0x0002, 0x0173, 0x0176, 0x0001, 0x004f, 0x0146, 0x0001, 0x0021, + 0x0b4a, 0x0003, 0x017d, 0x0000, 0x0180, 0x0001, 0x0021, 0x0af1, + 0x0002, 0x0183, 0x0186, 0x0001, 0x004f, 0x0146, 0x0001, 0x0021, + 0x0b4a, 0x0003, 0x018d, 0x0190, 0x0195, 0x0001, 0x0021, 0x0b7f, + 0x0003, 0x0021, 0x0b93, 0x396c, 0x3979, 0x0002, 0x0198, 0x019b, + // Entry 3A1C0 - 3A1FF + 0x0001, 0x004f, 0x015a, 0x0001, 0x0021, 0x0bd4, 0x0003, 0x01a2, + 0x0000, 0x01a5, 0x0001, 0x0021, 0x0b7f, 0x0002, 0x01a8, 0x01ab, + 0x0001, 0x004f, 0x015a, 0x0001, 0x0021, 0x0bd4, 0x0003, 0x01b2, + 0x0000, 0x01b5, 0x0001, 0x0021, 0x0b7f, 0x0002, 0x01b8, 0x01bb, + 0x0001, 0x004f, 0x015a, 0x0001, 0x0021, 0x0bd4, 0x0001, 0x01c0, + 0x0001, 0x004f, 0x016c, 0x0002, 0x0000, 0x01c6, 0x0003, 0x004f, + 0x0183, 0x0199, 0x01ad, 0x0002, 0x0000, 0x01ce, 0x0003, 0x004f, + 0x01c3, 0x0199, 0x01d7, 0x0002, 0x0000, 0x01d6, 0x0003, 0x004f, + // Entry 3A200 - 3A23F + 0x0183, 0x0199, 0x01ad, 0x0002, 0x0000, 0x01de, 0x0003, 0x004f, + 0x01eb, 0x0201, 0x0215, 0x0002, 0x0000, 0x01e6, 0x0003, 0x004f, + 0x01eb, 0x0201, 0x0215, 0x0002, 0x0000, 0x01ee, 0x0003, 0x004f, + 0x01eb, 0x0201, 0x0215, 0x0002, 0x0000, 0x01f6, 0x0003, 0x004f, + 0x022b, 0x0244, 0x025b, 0x0002, 0x0000, 0x01fe, 0x0003, 0x004f, + 0x022b, 0x0244, 0x025b, 0x0002, 0x0000, 0x0206, 0x0003, 0x004f, + 0x022b, 0x0244, 0x025b, 0x0002, 0x0000, 0x020e, 0x0003, 0x004f, + 0x0274, 0x028c, 0x02a2, 0x0002, 0x0000, 0x0216, 0x0003, 0x004f, + // Entry 3A240 - 3A27F + 0x0274, 0x028c, 0x02a2, 0x0002, 0x0000, 0x021e, 0x0003, 0x004f, + 0x0274, 0x028c, 0x02a2, 0x0002, 0x0000, 0x0226, 0x0003, 0x004f, + 0x02ba, 0x02d2, 0x02e8, 0x0002, 0x0000, 0x022e, 0x0003, 0x004f, + 0x02ba, 0x02d2, 0x02e8, 0x0002, 0x0000, 0x0236, 0x0003, 0x004f, + 0x02ba, 0x02d2, 0x02e8, 0x0002, 0x0000, 0x023e, 0x0003, 0x004f, + 0x0300, 0x0312, 0x0322, 0x0002, 0x0000, 0x0246, 0x0003, 0x004f, + 0x0300, 0x0312, 0x0322, 0x0002, 0x0000, 0x024e, 0x0003, 0x004f, + 0x0300, 0x0312, 0x0322, 0x0002, 0x0000, 0x0256, 0x0003, 0x004f, + // Entry 3A280 - 3A2BF + 0x0334, 0x0346, 0x0356, 0x0002, 0x0000, 0x025e, 0x0003, 0x004f, + 0x0334, 0x0346, 0x0356, 0x0002, 0x0000, 0x0266, 0x0003, 0x004f, + 0x0334, 0x0346, 0x0356, 0x0001, 0x026d, 0x0001, 0x004f, 0x0368, + 0x0003, 0x0274, 0x0000, 0x0277, 0x0001, 0x004f, 0x037a, 0x0002, + 0x027a, 0x027d, 0x0001, 0x004f, 0x0385, 0x0001, 0x004f, 0x039b, + 0x0003, 0x0284, 0x0000, 0x0287, 0x0001, 0x0021, 0x0f9c, 0x0002, + 0x028a, 0x028d, 0x0001, 0x004f, 0x03b1, 0x0001, 0x0021, 0x0fcb, + 0x0003, 0x0294, 0x0000, 0x0297, 0x0001, 0x0021, 0x0f9c, 0x0002, + // Entry 3A2C0 - 3A2FF + 0x029a, 0x029d, 0x0001, 0x004f, 0x03b1, 0x0001, 0x0021, 0x0fcb, + 0x0003, 0x02a4, 0x0000, 0x02a7, 0x0001, 0x0021, 0x0fdf, 0x0002, + 0x02aa, 0x02ad, 0x0001, 0x004f, 0x03c5, 0x0001, 0x004f, 0x03db, + 0x0003, 0x02b4, 0x0000, 0x02b7, 0x0001, 0x004f, 0x03ef, 0x0002, + 0x02ba, 0x02bd, 0x0001, 0x004f, 0x03f8, 0x0001, 0x004f, 0x03db, + 0x0003, 0x02c4, 0x0000, 0x02c7, 0x0001, 0x004f, 0x03ef, 0x0002, + 0x02ca, 0x02cd, 0x0001, 0x004f, 0x03f8, 0x0001, 0x004f, 0x03db, + 0x0003, 0x02d4, 0x0000, 0x02d7, 0x0001, 0x0021, 0x102a, 0x0002, + // Entry 3A300 - 3A33F + 0x02da, 0x02dd, 0x0001, 0x004f, 0x040c, 0x0001, 0x0021, 0x1056, + 0x0003, 0x02e4, 0x0000, 0x02e7, 0x0001, 0x0021, 0x102a, 0x0002, + 0x02ea, 0x02ed, 0x0001, 0x004f, 0x040c, 0x0001, 0x0021, 0x1056, + 0x0003, 0x02f4, 0x0000, 0x02f7, 0x0001, 0x0021, 0x102a, 0x0002, + 0x02fa, 0x02fd, 0x0001, 0x004f, 0x040c, 0x0001, 0x0021, 0x1056, + 0x0001, 0x0302, 0x0001, 0x004f, 0x0422, 0x0004, 0x030a, 0x030f, + 0x0000, 0x0000, 0x0003, 0x0000, 0x1dc7, 0x39fb, 0x3a6f, 0x0003, + 0x0000, 0x1de0, 0x3a73, 0x3a7c, 0x0002, 0x0003, 0x00e9, 0x0008, + // Entry 3A340 - 3A37F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, + 0x0000, 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, 0x0006, + 0x000d, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, + 0x0002, 0x0587, 0x0008, 0x002f, 0x0066, 0x008b, 0x009f, 0x00b7, + 0x00c7, 0x00d8, 0x0000, 0x0002, 0x0032, 0x0054, 0x0003, 0x0036, + 0x0000, 0x0045, 0x000d, 0x0006, 0xffff, 0x001e, 0x432b, 0x43cd, + 0x42a5, 0x4488, 0x42ad, 0x4333, 0x415c, 0x433b, 0x4164, 0x433f, + // Entry 3A380 - 3A3BF + 0x004a, 0x000d, 0x004f, 0xffff, 0x0438, 0x0441, 0x044f, 0x045d, + 0x046b, 0x0477, 0x0481, 0x048c, 0x049f, 0x04b4, 0x04c3, 0x04cf, + 0x0002, 0x0000, 0x0057, 0x000d, 0x0000, 0xffff, 0x257b, 0x2b4e, + 0x2b3c, 0x2b42, 0x2b3c, 0x257b, 0x257b, 0x2b42, 0x2b3a, 0x2b50, + 0x2b40, 0x2b3e, 0x0002, 0x0069, 0x007f, 0x0003, 0x006d, 0x0000, + 0x0076, 0x0007, 0x0042, 0x02d8, 0x25ea, 0x25ed, 0x25f0, 0x25f3, + 0x25f6, 0x25f9, 0x0007, 0x004f, 0x04df, 0x04eb, 0x04f7, 0x0504, + 0x0511, 0x0520, 0x052d, 0x0002, 0x0000, 0x0082, 0x0007, 0x0000, + // Entry 3A3C0 - 3A3FF + 0x2b3a, 0x2b3c, 0x2146, 0x2151, 0x2b3e, 0x2b4e, 0x2b42, 0x0001, + 0x008d, 0x0003, 0x0091, 0x0000, 0x0098, 0x0005, 0x004f, 0xffff, + 0x053b, 0x053f, 0x0543, 0x0547, 0x0005, 0x004f, 0xffff, 0x054b, + 0x0558, 0x0567, 0x0576, 0x0001, 0x00a1, 0x0003, 0x00a5, 0x0000, + 0x00ae, 0x0002, 0x00a8, 0x00ab, 0x0001, 0x004f, 0x0585, 0x0001, + 0x004f, 0x058e, 0x0002, 0x00b1, 0x00b4, 0x0001, 0x004f, 0x0585, + 0x0001, 0x004f, 0x058e, 0x0003, 0x00c1, 0x0000, 0x00bb, 0x0001, + 0x00bd, 0x0002, 0x004f, 0x0595, 0x05a4, 0x0001, 0x00c3, 0x0002, + // Entry 3A400 - 3A43F + 0x0009, 0x0078, 0x57b0, 0x0004, 0x00d5, 0x00cf, 0x00cc, 0x00d2, + 0x0001, 0x0006, 0x015b, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, + 0x003c, 0x0001, 0x0002, 0x08e8, 0x0004, 0x00e6, 0x00e0, 0x00dd, + 0x00e3, 0x0001, 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, + 0x0002, 0x04fe, 0x0001, 0x0002, 0x0508, 0x0040, 0x012a, 0x0000, + 0x0000, 0x012f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0134, + 0x0000, 0x0000, 0x0139, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x013e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0149, 0x0000, + // Entry 3A440 - 3A47F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x014e, 0x0000, 0x0153, 0x0000, 0x0000, 0x0158, + 0x0000, 0x0000, 0x015d, 0x0000, 0x0000, 0x0162, 0x0001, 0x012c, + 0x0001, 0x004f, 0x05b6, 0x0001, 0x0131, 0x0001, 0x004f, 0x05c1, + 0x0001, 0x0136, 0x0001, 0x004f, 0x05c7, 0x0001, 0x013b, 0x0001, + 0x004f, 0x05cf, 0x0002, 0x0141, 0x0144, 0x0001, 0x004f, 0x05d6, + // Entry 3A480 - 3A4BF + 0x0003, 0x0000, 0x1b2f, 0x3a85, 0x1b3f, 0x0001, 0x014b, 0x0001, + 0x004f, 0x05dc, 0x0001, 0x0150, 0x0001, 0x004f, 0x05e9, 0x0001, + 0x0155, 0x0001, 0x004f, 0x05f6, 0x0001, 0x015a, 0x0001, 0x004f, + 0x05fb, 0x0001, 0x015f, 0x0001, 0x004f, 0x0600, 0x0001, 0x0164, + 0x0001, 0x004f, 0x0608, 0x0003, 0x0004, 0x1153, 0x15c4, 0x0012, + 0x0017, 0x0055, 0x0408, 0x04b4, 0x0867, 0x0910, 0x0929, 0x0954, + 0x0b81, 0x0c2a, 0x0ccd, 0x0000, 0x0000, 0x0000, 0x0000, 0x0d70, + 0x106f, 0x1112, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, + // Entry 3A4C0 - 3A4FF + 0x0033, 0x0000, 0x0044, 0x0003, 0x0029, 0x002e, 0x0024, 0x0001, + 0x0026, 0x0001, 0x0000, 0x0000, 0x0001, 0x002b, 0x0001, 0x0000, + 0x0000, 0x0001, 0x0030, 0x0001, 0x0000, 0x0000, 0x0004, 0x0041, + 0x003b, 0x0038, 0x003e, 0x0001, 0x0014, 0x0349, 0x0001, 0x0014, + 0x035a, 0x0001, 0x0016, 0x0098, 0x0001, 0x0008, 0x0627, 0x0004, + 0x0052, 0x004c, 0x0049, 0x004f, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x000a, 0x0060, 0x0000, 0x0000, 0x0000, 0x0000, 0x03e6, 0x0000, + // Entry 3A500 - 3A53F + 0x03f7, 0x00c5, 0x00d9, 0x0002, 0x0063, 0x0094, 0x0003, 0x0067, + 0x0076, 0x0085, 0x000d, 0x0000, 0xffff, 0x0003, 0x0007, 0x000b, + 0x000f, 0x0013, 0x0017, 0x001b, 0x001f, 0x0023, 0x0027, 0x002b, + 0x002f, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, + 0x000d, 0x0000, 0xffff, 0x0003, 0x0007, 0x000b, 0x000f, 0x0013, + 0x0017, 0x001b, 0x001f, 0x0023, 0x0027, 0x002b, 0x002f, 0x0003, + 0x0098, 0x00a7, 0x00b6, 0x000d, 0x0000, 0xffff, 0x0003, 0x0007, + // Entry 3A540 - 3A57F + 0x000b, 0x000f, 0x0013, 0x0017, 0x001b, 0x001f, 0x0023, 0x0027, + 0x002b, 0x002f, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, + 0x3a0c, 0x000d, 0x0000, 0xffff, 0x0003, 0x0007, 0x000b, 0x000f, + 0x0013, 0x0017, 0x001b, 0x001f, 0x0023, 0x0027, 0x002b, 0x002f, + 0x0003, 0x00c9, 0x00d4, 0x00ce, 0x0003, 0x0000, 0x004e, 0x0055, + 0x004e, 0x0004, 0x0000, 0xffff, 0xffff, 0xffff, 0x004e, 0x0003, + 0x0000, 0x004e, 0x0055, 0x004e, 0x0006, 0x00e0, 0x0113, 0x01d6, + // Entry 3A580 - 3A5BF + 0x0299, 0x02f0, 0x03b3, 0x0001, 0x00e2, 0x0003, 0x00e6, 0x00f5, + 0x0104, 0x000d, 0x0000, 0xffff, 0x005a, 0x005d, 0x0062, 0x0066, + 0x006a, 0x2c10, 0x2784, 0x0075, 0x0079, 0x007e, 0x221e, 0x0085, + 0x000d, 0x0000, 0xffff, 0x005a, 0x005d, 0x0062, 0x0066, 0x006a, + 0x2c10, 0x2784, 0x0075, 0x0079, 0x007e, 0x221e, 0x0085, 0x000d, + 0x0000, 0xffff, 0x005a, 0x005d, 0x0062, 0x0066, 0x006a, 0x2c10, + 0x2784, 0x0075, 0x0079, 0x007e, 0x221e, 0x0085, 0x0001, 0x0115, + 0x0003, 0x0119, 0x0158, 0x0197, 0x003d, 0x0000, 0xffff, 0x01bd, + // Entry 3A5C0 - 3A5FF + 0x01c4, 0x01cc, 0x01d5, 0x01de, 0x01e6, 0x01ec, 0x01f4, 0x01fc, + 0x0205, 0x020d, 0x0214, 0x021b, 0x0223, 0x022d, 0x0234, 0x023b, + 0x0245, 0x024c, 0x0253, 0x025b, 0x0264, 0x026b, 0x0273, 0x027c, + 0x0282, 0x028a, 0x0293, 0x029b, 0x02a4, 0x02ab, 0x02b2, 0x02b9, + 0x02c3, 0x02cc, 0x02d2, 0x02d9, 0x02e1, 0x02ea, 0x02f2, 0x02fa, + 0x0303, 0x0309, 0x0311, 0x031a, 0x0322, 0x0329, 0x0331, 0x0339, + 0x0340, 0x0349, 0x0351, 0x0358, 0x0362, 0x036a, 0x0370, 0x0377, + 0x0381, 0x0389, 0x0390, 0x003d, 0x0000, 0xffff, 0x01bd, 0x01c4, + // Entry 3A600 - 3A63F + 0x01cc, 0x01d5, 0x01de, 0x01e6, 0x01ec, 0x01f4, 0x01fc, 0x0205, + 0x020d, 0x0214, 0x021b, 0x0223, 0x022d, 0x0234, 0x023b, 0x0245, + 0x024c, 0x0253, 0x025b, 0x0264, 0x026b, 0x0273, 0x027c, 0x0282, + 0x028a, 0x0293, 0x029b, 0x02a4, 0x02ab, 0x02b2, 0x02b9, 0x02c3, + 0x02cc, 0x02d2, 0x02d9, 0x02e1, 0x02ea, 0x02f2, 0x02fa, 0x0303, + 0x0309, 0x0311, 0x031a, 0x0322, 0x0329, 0x0331, 0x0339, 0x0340, + 0x0349, 0x0351, 0x0358, 0x0362, 0x036a, 0x0370, 0x0377, 0x0381, + 0x0389, 0x0390, 0x003d, 0x0000, 0xffff, 0x01bd, 0x01c4, 0x01cc, + // Entry 3A640 - 3A67F + 0x01d5, 0x01de, 0x01e6, 0x01ec, 0x01f4, 0x01fc, 0x0205, 0x020d, + 0x0214, 0x021b, 0x0223, 0x022d, 0x0234, 0x023b, 0x0245, 0x024c, + 0x0253, 0x025b, 0x0264, 0x026b, 0x0273, 0x027c, 0x0282, 0x028a, + 0x0293, 0x029b, 0x02a4, 0x02ab, 0x02b2, 0x02b9, 0x02c3, 0x02cc, + 0x02d2, 0x02d9, 0x02e1, 0x02ea, 0x02f2, 0x02fa, 0x0303, 0x0309, + 0x0311, 0x031a, 0x0322, 0x0329, 0x0331, 0x0339, 0x0340, 0x0349, + 0x0351, 0x0358, 0x0362, 0x036a, 0x0370, 0x0377, 0x0381, 0x0389, + 0x0390, 0x0001, 0x01d8, 0x0003, 0x01dc, 0x021b, 0x025a, 0x003d, + // Entry 3A680 - 3A6BF + 0x0000, 0xffff, 0x01bd, 0x01c4, 0x01cc, 0x01d5, 0x01de, 0x01e6, + 0x01ec, 0x01f4, 0x01fc, 0x0205, 0x020d, 0x0214, 0x021b, 0x0223, + 0x022d, 0x0234, 0x023b, 0x0245, 0x024c, 0x0253, 0x025b, 0x0264, + 0x026b, 0x0273, 0x027c, 0x0282, 0x028a, 0x0293, 0x029b, 0x02a4, + 0x02ab, 0x02b2, 0x02b9, 0x02c3, 0x02cc, 0x02d2, 0x02d9, 0x02e1, + 0x02ea, 0x02f2, 0x02fa, 0x0303, 0x0309, 0x0311, 0x031a, 0x0322, + 0x0329, 0x0331, 0x0339, 0x0340, 0x0349, 0x0351, 0x0358, 0x0362, + 0x036a, 0x0370, 0x0377, 0x0381, 0x0389, 0x0390, 0x003d, 0x0000, + // Entry 3A6C0 - 3A6FF + 0xffff, 0x01bd, 0x01c4, 0x01cc, 0x01d5, 0x01de, 0x01e6, 0x01ec, + 0x01f4, 0x01fc, 0x0205, 0x020d, 0x0214, 0x021b, 0x0223, 0x022d, + 0x0234, 0x023b, 0x0245, 0x024c, 0x0253, 0x025b, 0x0264, 0x026b, + 0x0273, 0x027c, 0x0282, 0x028a, 0x0293, 0x029b, 0x02a4, 0x02ab, + 0x02b2, 0x02b9, 0x02c3, 0x02cc, 0x02d2, 0x02d9, 0x02e1, 0x02ea, + 0x02f2, 0x02fa, 0x0303, 0x0309, 0x0311, 0x031a, 0x0322, 0x0329, + 0x0331, 0x0339, 0x0340, 0x0349, 0x0351, 0x0358, 0x0362, 0x036a, + 0x0370, 0x0377, 0x0381, 0x0389, 0x0390, 0x003d, 0x0000, 0xffff, + // Entry 3A700 - 3A73F + 0x01bd, 0x01c4, 0x01cc, 0x01d5, 0x01de, 0x01e6, 0x01ec, 0x01f4, + 0x01fc, 0x0205, 0x020d, 0x0214, 0x021b, 0x0223, 0x022d, 0x0234, + 0x023b, 0x0245, 0x024c, 0x0253, 0x025b, 0x0264, 0x026b, 0x0273, + 0x027c, 0x0282, 0x028a, 0x0293, 0x029b, 0x02a4, 0x02ab, 0x02b2, + 0x02b9, 0x02c3, 0x02cc, 0x02d2, 0x02d9, 0x02e1, 0x02ea, 0x02f2, + 0x02fa, 0x0303, 0x0309, 0x0311, 0x031a, 0x0322, 0x0329, 0x0331, + 0x0339, 0x0340, 0x0349, 0x0351, 0x0358, 0x0362, 0x036a, 0x0370, + 0x0377, 0x0381, 0x0389, 0x0390, 0x0001, 0x029b, 0x0003, 0x029f, + // Entry 3A740 - 3A77F + 0x02ba, 0x02d5, 0x0019, 0x004f, 0xffff, 0x0616, 0x0620, 0x0629, + 0x063a, 0x0648, 0x0656, 0x065f, 0x066b, 0x0676, 0x0681, 0x068f, + 0x069b, 0x06a6, 0x06b1, 0x06bc, 0x06c6, 0x06d5, 0x06de, 0x06ec, + 0x06f8, 0x0702, 0x070b, 0x0719, 0x0725, 0x0019, 0x004f, 0xffff, + 0x0616, 0x0620, 0x0629, 0x063a, 0x0648, 0x0656, 0x065f, 0x066b, + 0x0676, 0x0681, 0x068f, 0x069b, 0x06a6, 0x06b1, 0x06bc, 0x06c6, + 0x06d5, 0x06de, 0x06ec, 0x06f8, 0x0702, 0x070b, 0x0719, 0x0725, + 0x0019, 0x004f, 0xffff, 0x0616, 0x0620, 0x0629, 0x063a, 0x0648, + // Entry 3A780 - 3A7BF + 0x0656, 0x065f, 0x066b, 0x0676, 0x0681, 0x068f, 0x069b, 0x06a6, + 0x06b1, 0x06bc, 0x06c6, 0x06d5, 0x06de, 0x06ec, 0x06f8, 0x0702, + 0x070b, 0x0719, 0x0725, 0x0001, 0x02f2, 0x0003, 0x02f6, 0x0335, + 0x0374, 0x003d, 0x0000, 0xffff, 0x01bd, 0x01c4, 0x01cc, 0x01d5, + 0x01de, 0x01e6, 0x01ec, 0x01f4, 0x01fc, 0x0205, 0x020d, 0x0214, + 0x021b, 0x0223, 0x022d, 0x0234, 0x023b, 0x0245, 0x024c, 0x0253, + 0x025b, 0x0264, 0x026b, 0x0273, 0x027c, 0x0282, 0x028a, 0x0293, + 0x029b, 0x02a4, 0x02ab, 0x02b2, 0x02b9, 0x02c3, 0x02cc, 0x02d2, + // Entry 3A7C0 - 3A7FF + 0x02d9, 0x02e1, 0x02ea, 0x02f2, 0x02fa, 0x0303, 0x0309, 0x0311, + 0x031a, 0x0322, 0x0329, 0x0331, 0x0339, 0x0340, 0x0349, 0x0351, + 0x0358, 0x0362, 0x036a, 0x0370, 0x0377, 0x0381, 0x0389, 0x0390, + 0x003d, 0x0000, 0xffff, 0x01bd, 0x01c4, 0x01cc, 0x01d5, 0x01de, + 0x01e6, 0x01ec, 0x01f4, 0x01fc, 0x0205, 0x020d, 0x0214, 0x021b, + 0x0223, 0x022d, 0x0234, 0x023b, 0x0245, 0x024c, 0x0253, 0x025b, + 0x0264, 0x026b, 0x0273, 0x027c, 0x0282, 0x028a, 0x0293, 0x029b, + 0x02a4, 0x02ab, 0x02b2, 0x02b9, 0x02c3, 0x02cc, 0x02d2, 0x02d9, + // Entry 3A800 - 3A83F + 0x02e1, 0x02ea, 0x02f2, 0x02fa, 0x0303, 0x0309, 0x0311, 0x031a, + 0x0322, 0x0329, 0x0331, 0x0339, 0x0340, 0x0349, 0x0351, 0x0358, + 0x0362, 0x036a, 0x0370, 0x0377, 0x0381, 0x0389, 0x0390, 0x003d, + 0x0000, 0xffff, 0x01bd, 0x01c4, 0x01cc, 0x01d5, 0x01de, 0x01e6, + 0x01ec, 0x01f4, 0x01fc, 0x0205, 0x020d, 0x0214, 0x021b, 0x0223, + 0x022d, 0x0234, 0x023b, 0x0245, 0x024c, 0x0253, 0x025b, 0x0264, + 0x026b, 0x0273, 0x027c, 0x0282, 0x028a, 0x0293, 0x029b, 0x02a4, + 0x02ab, 0x02b2, 0x02b9, 0x02c3, 0x02cc, 0x02d2, 0x02d9, 0x02e1, + // Entry 3A840 - 3A87F + 0x02ea, 0x02f2, 0x02fa, 0x0303, 0x0309, 0x0311, 0x031a, 0x0322, + 0x0329, 0x0331, 0x0339, 0x0340, 0x0349, 0x0351, 0x0358, 0x0362, + 0x036a, 0x0370, 0x0377, 0x0381, 0x0389, 0x0390, 0x0001, 0x03b5, + 0x0003, 0x03b9, 0x03c8, 0x03d7, 0x000d, 0x0000, 0xffff, 0x005a, + 0x005d, 0x0062, 0x0066, 0x006a, 0x2c10, 0x2784, 0x0075, 0x0079, + 0x007e, 0x221e, 0x0085, 0x000d, 0x0000, 0xffff, 0x005a, 0x005d, + 0x0062, 0x0066, 0x006a, 0x2c10, 0x2784, 0x0075, 0x0079, 0x007e, + 0x221e, 0x0085, 0x000d, 0x0000, 0xffff, 0x005a, 0x005d, 0x0062, + // Entry 3A880 - 3A8BF + 0x0066, 0x006a, 0x2c10, 0x2784, 0x0075, 0x0079, 0x007e, 0x221e, + 0x0085, 0x0004, 0x03f4, 0x03ee, 0x03eb, 0x03f1, 0x0001, 0x004f, + 0x0730, 0x0001, 0x004f, 0x0742, 0x0001, 0x004f, 0x074f, 0x0001, + 0x004f, 0x0758, 0x0004, 0x0405, 0x03ff, 0x03fc, 0x0402, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0008, 0x0411, 0x0000, 0x0000, 0x0000, + 0x047c, 0x0492, 0x0000, 0x04a3, 0x0002, 0x0414, 0x0448, 0x0003, + 0x0418, 0x0428, 0x0438, 0x000e, 0x0014, 0xffff, 0x0395, 0x3681, + // Entry 3A8C0 - 3A8FF + 0x34b1, 0x03a6, 0x3608, 0x34bc, 0x34c3, 0x03c2, 0x34cc, 0x34d4, + 0x34da, 0x03e3, 0x03e9, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, + 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x0014, 0xffff, 0x0395, 0x3681, + 0x34b1, 0x03a6, 0x3608, 0x34bc, 0x34c3, 0x03c2, 0x34cc, 0x34d4, + 0x34da, 0x03e3, 0x03e9, 0x0003, 0x044c, 0x045c, 0x046c, 0x000e, + 0x0014, 0xffff, 0x0395, 0x3681, 0x34b1, 0x03a6, 0x3608, 0x34bc, + 0x34c3, 0x03c2, 0x34cc, 0x34d4, 0x34da, 0x03e3, 0x03e9, 0x000e, + // Entry 3A900 - 3A93F + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, + 0x0014, 0xffff, 0x0395, 0x3681, 0x34b1, 0x03a6, 0x3608, 0x34bc, + 0x34c3, 0x03c2, 0x34cc, 0x34d4, 0x34da, 0x03e3, 0x03e9, 0x0003, + 0x0486, 0x048c, 0x0480, 0x0001, 0x0482, 0x0002, 0x004f, 0x075e, + 0x076b, 0x0001, 0x0488, 0x0002, 0x004f, 0x0778, 0x0780, 0x0001, + 0x048e, 0x0002, 0x004f, 0x0788, 0x078c, 0x0004, 0x04a0, 0x049a, + 0x0497, 0x049d, 0x0001, 0x0014, 0x0349, 0x0001, 0x0014, 0x035a, + // Entry 3A940 - 3A97F + 0x0001, 0x0016, 0x0098, 0x0001, 0x0008, 0x0627, 0x0004, 0x04b1, + 0x04ab, 0x04a8, 0x04ae, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x000a, + 0x04bf, 0x0000, 0x0000, 0x0000, 0x0000, 0x0845, 0x0000, 0x0856, + 0x0524, 0x0538, 0x0002, 0x04c2, 0x04f3, 0x0003, 0x04c6, 0x04d5, + 0x04e4, 0x000d, 0x0000, 0xffff, 0x0003, 0x0007, 0x000b, 0x000f, + 0x0013, 0x0017, 0x001b, 0x001f, 0x0023, 0x0027, 0x002b, 0x002f, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + // Entry 3A980 - 3A9BF + 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, + 0x0000, 0xffff, 0x0003, 0x0007, 0x000b, 0x000f, 0x0013, 0x0017, + 0x001b, 0x001f, 0x0023, 0x0027, 0x002b, 0x002f, 0x0003, 0x04f7, + 0x0506, 0x0515, 0x000d, 0x0000, 0xffff, 0x0003, 0x0007, 0x000b, + 0x000f, 0x0013, 0x0017, 0x001b, 0x001f, 0x0023, 0x0027, 0x002b, + 0x002f, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, + 0x000d, 0x0000, 0xffff, 0x0003, 0x0007, 0x000b, 0x000f, 0x0013, + // Entry 3A9C0 - 3A9FF + 0x0017, 0x001b, 0x001f, 0x0023, 0x0027, 0x002b, 0x002f, 0x0003, + 0x0528, 0x0533, 0x052d, 0x0003, 0x0000, 0x004e, 0x0055, 0x004e, + 0x0004, 0x0000, 0xffff, 0xffff, 0xffff, 0x004e, 0x0003, 0x0000, + 0x004e, 0x0055, 0x004e, 0x0006, 0x053f, 0x0572, 0x0635, 0x06f8, + 0x074f, 0x0812, 0x0001, 0x0541, 0x0003, 0x0545, 0x0554, 0x0563, + 0x000d, 0x0000, 0xffff, 0x005a, 0x005d, 0x0062, 0x0066, 0x006a, + 0x2c10, 0x2784, 0x0075, 0x0079, 0x007e, 0x221e, 0x0085, 0x000d, + 0x0000, 0xffff, 0x005a, 0x005d, 0x0062, 0x0066, 0x006a, 0x2c10, + // Entry 3AA00 - 3AA3F + 0x2784, 0x0075, 0x0079, 0x007e, 0x221e, 0x0085, 0x000d, 0x0000, + 0xffff, 0x005a, 0x005d, 0x0062, 0x0066, 0x006a, 0x2c10, 0x2784, + 0x0075, 0x0079, 0x007e, 0x221e, 0x0085, 0x0001, 0x0574, 0x0003, + 0x0578, 0x05b7, 0x05f6, 0x003d, 0x0000, 0xffff, 0x01bd, 0x01c4, + 0x01cc, 0x01d5, 0x01de, 0x01e6, 0x01ec, 0x01f4, 0x01fc, 0x0205, + 0x020d, 0x0214, 0x021b, 0x0223, 0x022d, 0x0234, 0x023b, 0x0245, + 0x024c, 0x0253, 0x025b, 0x0264, 0x026b, 0x0273, 0x027c, 0x0282, + 0x028a, 0x0293, 0x029b, 0x02a4, 0x02ab, 0x02b2, 0x02b9, 0x02c3, + // Entry 3AA40 - 3AA7F + 0x02cc, 0x02d2, 0x02d9, 0x02e1, 0x02ea, 0x02f2, 0x02fa, 0x0303, + 0x0309, 0x0311, 0x031a, 0x0322, 0x0329, 0x0331, 0x0339, 0x0340, + 0x0349, 0x0351, 0x0358, 0x0362, 0x036a, 0x0370, 0x0377, 0x0381, + 0x0389, 0x0390, 0x003d, 0x0000, 0xffff, 0x01bd, 0x01c4, 0x01cc, + 0x01d5, 0x01de, 0x01e6, 0x01ec, 0x01f4, 0x01fc, 0x0205, 0x020d, + 0x0214, 0x021b, 0x0223, 0x022d, 0x0234, 0x023b, 0x0245, 0x024c, + 0x0253, 0x025b, 0x0264, 0x026b, 0x0273, 0x027c, 0x0282, 0x028a, + 0x0293, 0x029b, 0x02a4, 0x02ab, 0x02b2, 0x02b9, 0x02c3, 0x02cc, + // Entry 3AA80 - 3AABF + 0x02d2, 0x02d9, 0x02e1, 0x02ea, 0x02f2, 0x02fa, 0x0303, 0x0309, + 0x0311, 0x031a, 0x0322, 0x0329, 0x0331, 0x0339, 0x0340, 0x0349, + 0x0351, 0x0358, 0x0362, 0x036a, 0x0370, 0x0377, 0x0381, 0x0389, + 0x0390, 0x003d, 0x0000, 0xffff, 0x01bd, 0x01c4, 0x01cc, 0x01d5, + 0x01de, 0x01e6, 0x01ec, 0x01f4, 0x01fc, 0x0205, 0x020d, 0x0214, + 0x021b, 0x0223, 0x022d, 0x0234, 0x023b, 0x0245, 0x024c, 0x0253, + 0x025b, 0x0264, 0x026b, 0x0273, 0x027c, 0x0282, 0x028a, 0x0293, + 0x029b, 0x02a4, 0x02ab, 0x02b2, 0x02b9, 0x02c3, 0x02cc, 0x02d2, + // Entry 3AAC0 - 3AAFF + 0x02d9, 0x02e1, 0x02ea, 0x02f2, 0x02fa, 0x0303, 0x0309, 0x0311, + 0x031a, 0x0322, 0x0329, 0x0331, 0x0339, 0x0340, 0x0349, 0x0351, + 0x0358, 0x0362, 0x036a, 0x0370, 0x0377, 0x0381, 0x0389, 0x0390, + 0x0001, 0x0637, 0x0003, 0x063b, 0x067a, 0x06b9, 0x003d, 0x0000, + 0xffff, 0x01bd, 0x01c4, 0x01cc, 0x01d5, 0x01de, 0x01e6, 0x01ec, + 0x01f4, 0x01fc, 0x0205, 0x020d, 0x0214, 0x021b, 0x0223, 0x022d, + 0x0234, 0x023b, 0x0245, 0x024c, 0x0253, 0x025b, 0x0264, 0x026b, + 0x0273, 0x027c, 0x0282, 0x028a, 0x0293, 0x029b, 0x02a4, 0x02ab, + // Entry 3AB00 - 3AB3F + 0x02b2, 0x02b9, 0x02c3, 0x02cc, 0x02d2, 0x02d9, 0x02e1, 0x02ea, + 0x02f2, 0x02fa, 0x0303, 0x0309, 0x0311, 0x031a, 0x0322, 0x0329, + 0x0331, 0x0339, 0x0340, 0x0349, 0x0351, 0x0358, 0x0362, 0x036a, + 0x0370, 0x0377, 0x0381, 0x0389, 0x0390, 0x003d, 0x0000, 0xffff, + 0x01bd, 0x01c4, 0x01cc, 0x01d5, 0x01de, 0x01e6, 0x01ec, 0x01f4, + 0x01fc, 0x0205, 0x020d, 0x0214, 0x021b, 0x0223, 0x022d, 0x0234, + 0x023b, 0x0245, 0x024c, 0x0253, 0x025b, 0x0264, 0x026b, 0x0273, + 0x027c, 0x0282, 0x028a, 0x0293, 0x029b, 0x02a4, 0x02ab, 0x02b2, + // Entry 3AB40 - 3AB7F + 0x02b9, 0x02c3, 0x02cc, 0x02d2, 0x02d9, 0x02e1, 0x02ea, 0x02f2, + 0x02fa, 0x0303, 0x0309, 0x0311, 0x031a, 0x0322, 0x0329, 0x0331, + 0x0339, 0x0340, 0x0349, 0x0351, 0x0358, 0x0362, 0x036a, 0x0370, + 0x0377, 0x0381, 0x0389, 0x0390, 0x003d, 0x0000, 0xffff, 0x01bd, + 0x01c4, 0x01cc, 0x01d5, 0x01de, 0x01e6, 0x01ec, 0x01f4, 0x01fc, + 0x0205, 0x020d, 0x0214, 0x021b, 0x0223, 0x022d, 0x0234, 0x023b, + 0x0245, 0x024c, 0x0253, 0x025b, 0x0264, 0x026b, 0x0273, 0x027c, + 0x0282, 0x028a, 0x0293, 0x029b, 0x02a4, 0x02ab, 0x02b2, 0x02b9, + // Entry 3AB80 - 3ABBF + 0x02c3, 0x02cc, 0x02d2, 0x02d9, 0x02e1, 0x02ea, 0x02f2, 0x02fa, + 0x0303, 0x0309, 0x0311, 0x031a, 0x0322, 0x0329, 0x0331, 0x0339, + 0x0340, 0x0349, 0x0351, 0x0358, 0x0362, 0x036a, 0x0370, 0x0377, + 0x0381, 0x0389, 0x0390, 0x0001, 0x06fa, 0x0003, 0x06fe, 0x0719, + 0x0734, 0x0019, 0x004f, 0xffff, 0x0616, 0x0620, 0x0629, 0x063a, + 0x0648, 0x0656, 0x065f, 0x066b, 0x0676, 0x0681, 0x068f, 0x069b, + 0x06a6, 0x06b1, 0x06bc, 0x06c6, 0x06d5, 0x06de, 0x06ec, 0x06f8, + 0x0702, 0x070b, 0x0719, 0x0725, 0x0019, 0x004f, 0xffff, 0x0616, + // Entry 3ABC0 - 3ABFF + 0x0620, 0x0629, 0x063a, 0x0648, 0x0656, 0x065f, 0x066b, 0x0676, + 0x0681, 0x068f, 0x069b, 0x06a6, 0x06b1, 0x06bc, 0x06c6, 0x06d5, + 0x06de, 0x06ec, 0x06f8, 0x0702, 0x070b, 0x0719, 0x0725, 0x0019, + 0x004f, 0xffff, 0x0616, 0x0620, 0x0629, 0x063a, 0x0648, 0x0656, + 0x065f, 0x066b, 0x0676, 0x0681, 0x068f, 0x069b, 0x06a6, 0x06b1, + 0x06bc, 0x06c6, 0x06d5, 0x06de, 0x06ec, 0x06f8, 0x0702, 0x070b, + 0x0719, 0x0725, 0x0001, 0x0751, 0x0003, 0x0755, 0x0794, 0x07d3, + 0x003d, 0x0000, 0xffff, 0x01bd, 0x01c4, 0x01cc, 0x01d5, 0x01de, + // Entry 3AC00 - 3AC3F + 0x01e6, 0x01ec, 0x01f4, 0x01fc, 0x0205, 0x020d, 0x0214, 0x021b, + 0x0223, 0x022d, 0x0234, 0x023b, 0x0245, 0x024c, 0x0253, 0x025b, + 0x0264, 0x026b, 0x0273, 0x027c, 0x0282, 0x028a, 0x0293, 0x029b, + 0x02a4, 0x02ab, 0x02b2, 0x02b9, 0x02c3, 0x02cc, 0x02d2, 0x02d9, + 0x02e1, 0x02ea, 0x02f2, 0x02fa, 0x0303, 0x0309, 0x0311, 0x031a, + 0x0322, 0x0329, 0x0331, 0x0339, 0x0340, 0x0349, 0x0351, 0x0358, + 0x0362, 0x036a, 0x0370, 0x0377, 0x0381, 0x0389, 0x0390, 0x003d, + 0x0000, 0xffff, 0x01bd, 0x01c4, 0x01cc, 0x01d5, 0x01de, 0x01e6, + // Entry 3AC40 - 3AC7F + 0x01ec, 0x01f4, 0x01fc, 0x0205, 0x020d, 0x0214, 0x021b, 0x0223, + 0x022d, 0x0234, 0x023b, 0x0245, 0x024c, 0x0253, 0x025b, 0x0264, + 0x026b, 0x0273, 0x027c, 0x0282, 0x028a, 0x0293, 0x029b, 0x02a4, + 0x02ab, 0x02b2, 0x02b9, 0x02c3, 0x02cc, 0x02d2, 0x02d9, 0x02e1, + 0x02ea, 0x02f2, 0x02fa, 0x0303, 0x0309, 0x0311, 0x031a, 0x0322, + 0x0329, 0x0331, 0x0339, 0x0340, 0x0349, 0x0351, 0x0358, 0x0362, + 0x036a, 0x0370, 0x0377, 0x0381, 0x0389, 0x0390, 0x003d, 0x0000, + 0xffff, 0x01bd, 0x01c4, 0x01cc, 0x01d5, 0x01de, 0x01e6, 0x01ec, + // Entry 3AC80 - 3ACBF + 0x01f4, 0x01fc, 0x0205, 0x020d, 0x0214, 0x021b, 0x0223, 0x022d, + 0x0234, 0x023b, 0x0245, 0x024c, 0x0253, 0x025b, 0x0264, 0x026b, + 0x0273, 0x027c, 0x0282, 0x028a, 0x0293, 0x029b, 0x02a4, 0x02ab, + 0x02b2, 0x02b9, 0x02c3, 0x02cc, 0x02d2, 0x02d9, 0x02e1, 0x02ea, + 0x02f2, 0x02fa, 0x0303, 0x0309, 0x0311, 0x031a, 0x0322, 0x0329, + 0x0331, 0x0339, 0x0340, 0x0349, 0x0351, 0x0358, 0x0362, 0x036a, + 0x0370, 0x0377, 0x0381, 0x0389, 0x0390, 0x0001, 0x0814, 0x0003, + 0x0818, 0x0827, 0x0836, 0x000d, 0x0000, 0xffff, 0x005a, 0x005d, + // Entry 3ACC0 - 3ACFF + 0x0062, 0x0066, 0x006a, 0x2c10, 0x2784, 0x0075, 0x0079, 0x007e, + 0x221e, 0x0085, 0x000d, 0x0000, 0xffff, 0x005a, 0x005d, 0x0062, + 0x0066, 0x006a, 0x2c10, 0x2784, 0x0075, 0x0079, 0x007e, 0x221e, + 0x0085, 0x000d, 0x0000, 0xffff, 0x005a, 0x005d, 0x0062, 0x0066, + 0x006a, 0x2c10, 0x2784, 0x0075, 0x0079, 0x007e, 0x221e, 0x0085, + 0x0004, 0x0853, 0x084d, 0x084a, 0x0850, 0x0001, 0x004f, 0x0730, + 0x0001, 0x004f, 0x0742, 0x0001, 0x004f, 0x074f, 0x0001, 0x004f, + 0x0758, 0x0004, 0x0864, 0x085e, 0x085b, 0x0861, 0x0001, 0x0000, + // Entry 3AD00 - 3AD3F + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0008, 0x0870, 0x0000, 0x0000, 0x0000, 0x08db, + 0x08f1, 0x0000, 0x08ff, 0x0002, 0x0873, 0x08a7, 0x0003, 0x0877, + 0x0887, 0x0897, 0x000e, 0x0014, 0xffff, 0x04f6, 0x3444, 0x360d, + 0x3451, 0x3686, 0x0519, 0x0521, 0x345c, 0x3463, 0x0537, 0x053c, + 0x346a, 0x3472, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, + 0x3a0c, 0x0422, 0x000e, 0x0014, 0xffff, 0x04f6, 0x3444, 0x360d, + // Entry 3AD40 - 3AD7F + 0x3451, 0x3686, 0x0519, 0x0521, 0x345c, 0x3463, 0x0537, 0x053c, + 0x346a, 0x3472, 0x0003, 0x08ab, 0x08bb, 0x08cb, 0x000e, 0x0014, + 0xffff, 0x04f6, 0x3444, 0x360d, 0x3451, 0x3686, 0x0519, 0x0521, + 0x345c, 0x3463, 0x0537, 0x053c, 0x346a, 0x3472, 0x000e, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x0014, + 0xffff, 0x04f6, 0x3444, 0x360d, 0x3451, 0x3686, 0x0519, 0x0521, + 0x345c, 0x3463, 0x0537, 0x053c, 0x346a, 0x3472, 0x0003, 0x08e5, + // Entry 3AD80 - 3ADBF + 0x08eb, 0x08df, 0x0001, 0x08e1, 0x0002, 0x004f, 0x075e, 0x076b, + 0x0001, 0x08e7, 0x0002, 0x004f, 0x0778, 0x0780, 0x0001, 0x08ed, + 0x0002, 0x004f, 0x0788, 0x078c, 0x0004, 0x0000, 0x08f9, 0x08f6, + 0x08fc, 0x0001, 0x0014, 0x0349, 0x0001, 0x0014, 0x035a, 0x0001, + 0x0016, 0x0098, 0x0004, 0x090d, 0x0907, 0x0904, 0x090a, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0916, 0x0003, 0x091f, 0x0924, 0x091a, 0x0001, 0x091c, 0x0001, + // Entry 3ADC0 - 3ADFF + 0x004f, 0x075e, 0x0001, 0x0921, 0x0001, 0x004f, 0x0778, 0x0001, + 0x0926, 0x0001, 0x004f, 0x0788, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0932, 0x0000, 0x0943, 0x0004, 0x0940, 0x093a, + 0x0937, 0x093d, 0x0001, 0x0014, 0x0349, 0x0001, 0x0014, 0x035a, + 0x0001, 0x0016, 0x0098, 0x0001, 0x0008, 0x0627, 0x0004, 0x0951, + 0x094b, 0x0948, 0x094e, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, + 0x095d, 0x09c2, 0x0a19, 0x0a4e, 0x0b25, 0x0b4a, 0x0b5b, 0x0b70, + // Entry 3AE00 - 3AE3F + 0x0002, 0x0960, 0x0991, 0x0003, 0x0964, 0x0973, 0x0982, 0x000d, + 0x0016, 0xffff, 0x00a3, 0x26b4, 0x26f4, 0x2753, 0x2758, 0x25ed, + 0x25f2, 0x275c, 0x25f7, 0x2761, 0x2766, 0x2601, 0x000d, 0x0000, + 0xffff, 0x257b, 0x2b4e, 0x2b3c, 0x2b42, 0x2b3c, 0x257b, 0x257b, + 0x2b42, 0x2b3a, 0x2b50, 0x2b40, 0x2b3e, 0x000d, 0x000d, 0xffff, + 0x0089, 0x0090, 0x341b, 0x009d, 0x3420, 0x3424, 0x3429, 0x3340, + 0x342e, 0x3258, 0x3438, 0x3441, 0x0003, 0x0995, 0x09a4, 0x09b3, + 0x000d, 0x000d, 0xffff, 0x0059, 0x340b, 0x344a, 0x3413, 0x3420, + // Entry 3AE40 - 3AE7F + 0x336f, 0x3373, 0x3377, 0x344e, 0x3452, 0x3456, 0x345a, 0x000d, + 0x0000, 0xffff, 0x257b, 0x2b4e, 0x2b3c, 0x2b42, 0x2b3c, 0x257b, + 0x257b, 0x2b42, 0x2b3a, 0x2b50, 0x2b40, 0x2b3e, 0x000d, 0x000d, + 0xffff, 0x0089, 0x0090, 0x341b, 0x009d, 0x3420, 0x3424, 0x3429, + 0x3340, 0x342e, 0x3258, 0x3438, 0x3441, 0x0002, 0x09c5, 0x09ef, + 0x0005, 0x09cb, 0x09d4, 0x09e6, 0x0000, 0x09dd, 0x0007, 0x0016, + 0x00e2, 0x00e8, 0x00ed, 0x00f2, 0x00f7, 0x00fc, 0x0101, 0x0007, + 0x0000, 0x2b3a, 0x2b3c, 0x3a8d, 0x2b50, 0x3a8d, 0x2b4e, 0x2296, + // Entry 3AE80 - 3AEBF + 0x0007, 0x004f, 0x0790, 0x0795, 0x0799, 0x079d, 0x07a1, 0x07a5, + 0x07a9, 0x0007, 0x0016, 0x011e, 0x0126, 0x012d, 0x0135, 0x013c, + 0x0144, 0x014b, 0x0005, 0x09f5, 0x09fe, 0x0a10, 0x0000, 0x0a07, + 0x0007, 0x0016, 0x00e2, 0x00e8, 0x00ed, 0x00f2, 0x00f7, 0x00fc, + 0x0101, 0x0007, 0x0000, 0x2b3a, 0x2b3c, 0x3a8d, 0x2b50, 0x3a8d, + 0x2b4e, 0x2296, 0x0007, 0x004f, 0x0790, 0x0795, 0x0799, 0x079d, + 0x07a1, 0x07a5, 0x07a9, 0x0007, 0x0016, 0x011e, 0x0126, 0x012d, + 0x0135, 0x013c, 0x0144, 0x014b, 0x0002, 0x0a1c, 0x0a35, 0x0003, + // Entry 3AEC0 - 3AEFF + 0x0a20, 0x0a27, 0x0a2e, 0x0005, 0x0000, 0xffff, 0x1f17, 0x1f1a, + 0x1f1d, 0x1f20, 0x0005, 0x000d, 0xffff, 0x0140, 0x0143, 0x0146, + 0x0149, 0x0005, 0x0016, 0xffff, 0x0191, 0x019c, 0x01a7, 0x01b2, + 0x0003, 0x0a39, 0x0a40, 0x0a47, 0x0005, 0x0000, 0xffff, 0x1f17, + 0x1f1a, 0x1f1d, 0x1f20, 0x0005, 0x000d, 0xffff, 0x0140, 0x0143, + 0x0146, 0x0149, 0x0005, 0x0016, 0xffff, 0x0191, 0x019c, 0x01a7, + 0x01b2, 0x0002, 0x0a51, 0x0abb, 0x0003, 0x0a55, 0x0a77, 0x0a99, + 0x0009, 0x0a62, 0x0a65, 0x0a5f, 0x0a68, 0x0a6e, 0x0a71, 0x0a74, + // Entry 3AF00 - 3AF3F + 0x0000, 0x0a6b, 0x0001, 0x004f, 0x07ae, 0x0001, 0x001d, 0x050b, + 0x0001, 0x001d, 0x0510, 0x0001, 0x004f, 0x07b4, 0x0001, 0x004f, + 0x07ba, 0x0001, 0x004f, 0x07c0, 0x0001, 0x004f, 0x07c8, 0x0001, + 0x004f, 0x07ce, 0x0009, 0x0a84, 0x0a87, 0x0a81, 0x0a8a, 0x0a90, + 0x0a93, 0x0a96, 0x0000, 0x0a8d, 0x0001, 0x0034, 0x04af, 0x0001, + 0x0000, 0x1f9c, 0x0001, 0x0000, 0x21e4, 0x0001, 0x004f, 0x07d3, + 0x0001, 0x004f, 0x07d7, 0x0001, 0x004f, 0x07db, 0x0001, 0x000d, + 0x0444, 0x0001, 0x004f, 0x07df, 0x0009, 0x0aa6, 0x0aa9, 0x0aa3, + // Entry 3AF40 - 3AF7F + 0x0aac, 0x0ab2, 0x0ab5, 0x0ab8, 0x0000, 0x0aaf, 0x0001, 0x004f, + 0x07e3, 0x0001, 0x001d, 0x050b, 0x0001, 0x001d, 0x0510, 0x0001, + 0x004f, 0x07eb, 0x0001, 0x004f, 0x07f4, 0x0001, 0x004f, 0x0800, + 0x0001, 0x004f, 0x080e, 0x0001, 0x004f, 0x0816, 0x0003, 0x0abf, + 0x0ae1, 0x0b03, 0x0009, 0x0acc, 0x0acf, 0x0ac9, 0x0ad2, 0x0ad8, + 0x0adb, 0x0ade, 0x0000, 0x0ad5, 0x0001, 0x004f, 0x07ae, 0x0001, + 0x001d, 0x050b, 0x0001, 0x001d, 0x0510, 0x0001, 0x004f, 0x07b4, + 0x0001, 0x004f, 0x07ba, 0x0001, 0x004f, 0x07c0, 0x0001, 0x004f, + // Entry 3AF80 - 3AFBF + 0x07c8, 0x0001, 0x004f, 0x07ce, 0x0009, 0x0aee, 0x0af1, 0x0aeb, + 0x0af4, 0x0afa, 0x0afd, 0x0b00, 0x0000, 0x0af7, 0x0001, 0x0034, + 0x04af, 0x0001, 0x001d, 0x050b, 0x0001, 0x001d, 0x0510, 0x0001, + 0x004f, 0x07d3, 0x0001, 0x004f, 0x07d7, 0x0001, 0x004f, 0x07db, + 0x0001, 0x000d, 0x0444, 0x0001, 0x004f, 0x07df, 0x0009, 0x0b10, + 0x0b13, 0x0b0d, 0x0b16, 0x0b1c, 0x0b1f, 0x0b22, 0x0000, 0x0b19, + 0x0001, 0x004f, 0x07e3, 0x0001, 0x001d, 0x050b, 0x0001, 0x001d, + 0x0510, 0x0001, 0x0026, 0x199e, 0x0001, 0x0016, 0x020c, 0x0001, + // Entry 3AFC0 - 3AFFF + 0x004f, 0x081d, 0x0001, 0x004f, 0x07c8, 0x0001, 0x004f, 0x07ce, + 0x0003, 0x0b34, 0x0b3f, 0x0b29, 0x0002, 0x0b2c, 0x0b30, 0x0002, + 0x004f, 0x0829, 0x084c, 0x0002, 0x004f, 0x0836, 0x085a, 0x0002, + 0x0b37, 0x0b3b, 0x0002, 0x0016, 0x022c, 0x0250, 0x0002, 0x004f, + 0x0871, 0x0876, 0x0002, 0x0b42, 0x0b46, 0x0002, 0x0016, 0x022c, + 0x0250, 0x0002, 0x004f, 0x0871, 0x087b, 0x0004, 0x0b58, 0x0b52, + 0x0b4f, 0x0b55, 0x0001, 0x0014, 0x0783, 0x0001, 0x0014, 0x0792, + 0x0001, 0x0016, 0x029f, 0x0001, 0x0017, 0x0538, 0x0004, 0x0b6c, + // Entry 3B000 - 3B03F + 0x0b64, 0x0b60, 0x0b68, 0x0002, 0x0000, 0x0524, 0x3a8f, 0x0002, + 0x0000, 0x0532, 0x3a9d, 0x0002, 0x0000, 0x053d, 0x3aa8, 0x0002, + 0x0000, 0x0546, 0x3ab1, 0x0004, 0x0b7e, 0x0b78, 0x0b75, 0x0b7b, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0016, 0x02d0, 0x0001, 0x0006, + 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, 0x0b8a, 0x0000, 0x0000, + 0x0000, 0x0bf5, 0x0c08, 0x0000, 0x0c19, 0x0002, 0x0b8d, 0x0bc1, + 0x0003, 0x0b91, 0x0ba1, 0x0bb1, 0x000e, 0x0016, 0x2723, 0x02de, + 0x02e5, 0x2710, 0x02f4, 0x02fa, 0x2717, 0x271e, 0x0315, 0x272b, + // Entry 3B040 - 3B07F + 0x2730, 0x0326, 0x2736, 0x252b, 0x000e, 0x0000, 0x003f, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x0016, 0x2723, 0x02de, + 0x02e5, 0x2710, 0x02f4, 0x02fa, 0x2717, 0x271e, 0x0315, 0x272b, + 0x2730, 0x0326, 0x2736, 0x252b, 0x0003, 0x0bc5, 0x0bd5, 0x0be5, + 0x000e, 0x0016, 0x2723, 0x02de, 0x02e5, 0x2710, 0x02f4, 0x02fa, + 0x2717, 0x271e, 0x0315, 0x272b, 0x2730, 0x0326, 0x2736, 0x252b, + 0x000e, 0x0000, 0x003f, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + // Entry 3B080 - 3B0BF + 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, + 0x000e, 0x0016, 0x2723, 0x02de, 0x02e5, 0x2710, 0x02f4, 0x02fa, + 0x2717, 0x271e, 0x0315, 0x272b, 0x2730, 0x0326, 0x2736, 0x252b, + 0x0003, 0x0bfe, 0x0c03, 0x0bf9, 0x0001, 0x0bfb, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x0c00, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0c05, + 0x0001, 0x0000, 0x04ef, 0x0004, 0x0c16, 0x0c10, 0x0c0d, 0x0c13, + 0x0001, 0x0014, 0x0349, 0x0001, 0x0014, 0x035a, 0x0001, 0x0016, + 0x0098, 0x0001, 0x0008, 0x0627, 0x0004, 0x0c27, 0x0c21, 0x0c1e, + // Entry 3B0C0 - 3B0FF + 0x0c24, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x0c33, 0x0000, + 0x0000, 0x0000, 0x0c98, 0x0cab, 0x0000, 0x0cbc, 0x0002, 0x0c36, + 0x0c67, 0x0003, 0x0c3a, 0x0c49, 0x0c58, 0x000d, 0x0016, 0xffff, + 0x0334, 0x033c, 0x0345, 0x034e, 0x0355, 0x035d, 0x0364, 0x036b, + 0x0373, 0x037e, 0x0384, 0x038a, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0016, 0xffff, 0x0334, 0x033c, + // Entry 3B100 - 3B13F + 0x0345, 0x034e, 0x0355, 0x035d, 0x0364, 0x036b, 0x0373, 0x037e, + 0x0384, 0x038a, 0x0003, 0x0c6b, 0x0c7a, 0x0c89, 0x000d, 0x0016, + 0xffff, 0x0334, 0x033c, 0x0345, 0x034e, 0x0355, 0x035d, 0x0364, + 0x036b, 0x0373, 0x037e, 0x0384, 0x038a, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0016, 0xffff, 0x0334, + 0x033c, 0x0345, 0x034e, 0x0355, 0x035d, 0x0364, 0x036b, 0x0373, + 0x037e, 0x0384, 0x038a, 0x0003, 0x0ca1, 0x0ca6, 0x0c9c, 0x0001, + // Entry 3B140 - 3B17F + 0x0c9e, 0x0001, 0x001d, 0x179b, 0x0001, 0x0ca3, 0x0001, 0x001d, + 0x179b, 0x0001, 0x0ca8, 0x0001, 0x001d, 0x179b, 0x0004, 0x0cb9, + 0x0cb3, 0x0cb0, 0x0cb6, 0x0001, 0x0014, 0x0349, 0x0001, 0x0014, + 0x035a, 0x0001, 0x0016, 0x0098, 0x0001, 0x0008, 0x0627, 0x0004, + 0x0cca, 0x0cc4, 0x0cc1, 0x0cc7, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0008, 0x0cd6, 0x0000, 0x0000, 0x0000, 0x0d3b, 0x0d4e, 0x0000, + 0x0d5f, 0x0002, 0x0cd9, 0x0d0a, 0x0003, 0x0cdd, 0x0cec, 0x0cfb, + // Entry 3B180 - 3B1BF + 0x000d, 0x000d, 0xffff, 0x022d, 0x33e8, 0x32ee, 0x32f5, 0x32fd, + 0x3304, 0x33ed, 0x3311, 0x33f2, 0x3316, 0x331c, 0x3326, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0016, + 0xffff, 0x0393, 0x273f, 0x03a2, 0x03ab, 0x03b5, 0x03be, 0x2745, + 0x03ce, 0x274b, 0x03df, 0x2541, 0x2550, 0x0003, 0x0d0e, 0x0d1d, + 0x0d2c, 0x000d, 0x000d, 0xffff, 0x022d, 0x33e8, 0x32ee, 0x32f5, + 0x32fd, 0x3304, 0x33ed, 0x3311, 0x33f2, 0x3316, 0x331c, 0x345e, + // Entry 3B1C0 - 3B1FF + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, + 0x0016, 0xffff, 0x0393, 0x273f, 0x03a2, 0x03ab, 0x03b5, 0x03be, + 0x2745, 0x03ce, 0x274b, 0x03df, 0x2541, 0x2550, 0x0003, 0x0d44, + 0x0d49, 0x0d3f, 0x0001, 0x0d41, 0x0001, 0x0000, 0x06c8, 0x0001, + 0x0d46, 0x0001, 0x0000, 0x06c8, 0x0001, 0x0d4b, 0x0001, 0x0000, + 0x06c8, 0x0004, 0x0d5c, 0x0d56, 0x0d53, 0x0d59, 0x0001, 0x0014, + 0x0349, 0x0001, 0x0014, 0x035a, 0x0001, 0x0016, 0x0098, 0x0001, + // Entry 3B200 - 3B23F + 0x0008, 0x0627, 0x0004, 0x0d6d, 0x0d67, 0x0d64, 0x0d6a, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0d79, 0x104d, 0x0000, 0x105e, 0x0003, 0x0e6d, 0x0f5d, 0x0d7d, + 0x0001, 0x0d7f, 0x00ec, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x206c, + 0x2085, 0x209f, 0x20b7, 0x20cf, 0xffff, 0x20e5, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x20f6, 0xffff, + // Entry 3B240 - 3B27F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2107, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 3B280 - 3B2BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 3B2C0 - 3B2FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 3B300 - 3B33F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2ac7, 0x2acd, 0x2ad5, 0x2adc, + 0x0001, 0x0e6f, 0x00ec, 0x0000, 0x06cb, 0x06dd, 0x06f1, 0x0705, + 0x0719, 0x072c, 0x073e, 0x0750, 0x0762, 0x0775, 0x0787, 0x206c, + 0x2085, 0x209f, 0x20b7, 0x20cf, 0x081e, 0x20e5, 0x0843, 0x0857, + 0x086a, 0x087d, 0x0891, 0x08a3, 0x08b5, 0x08c7, 0x20f6, 0x08ed, + 0x0900, 0x0914, 0x0926, 0x093a, 0x094e, 0x095f, 0x0972, 0x0985, + 0x0999, 0x09ae, 0x09c2, 0x09d3, 0x09e6, 0x09f7, 0x0a0b, 0x0a20, + // Entry 3B340 - 3B37F + 0x0a33, 0x0a46, 0x0a58, 0x0a6a, 0x0a7b, 0x0a8c, 0x0aa2, 0x0ab7, + 0x0acc, 0x0ae1, 0x0af6, 0x0b0b, 0x0b1e, 0x0b32, 0x0b48, 0x0b60, + 0x0b77, 0x0b8d, 0x0ba2, 0x0bb6, 0x0bcb, 0x0be1, 0x0bf6, 0x0c0b, + 0x0c23, 0x0c37, 0x0c4c, 0x0c60, 0x0c74, 0x0c89, 0x0c9f, 0x0cb3, + 0x0cc8, 0x0cdd, 0x2107, 0x0d07, 0x0d1c, 0x0d33, 0x0d47, 0x0d5b, + 0x0d6f, 0x0d85, 0x0d9c, 0x0db0, 0x0dc3, 0x0dd7, 0x0def, 0x0e04, + 0x0e19, 0x0e2e, 0x0e43, 0x0e57, 0x0e6d, 0x0e80, 0x0e96, 0x0eaa, + 0x0ec1, 0x0ed4, 0x0ee9, 0x0efd, 0x0f12, 0x0f26, 0x0f39, 0x0f50, + // Entry 3B380 - 3B3BF + 0x0f64, 0x0f7a, 0x0f8f, 0x0fa4, 0x0fba, 0x0fd1, 0x0fe6, 0x0ffd, + 0x1012, 0x1028, 0x103c, 0x1051, 0x1066, 0x107a, 0x108e, 0x10a2, + 0x10b8, 0x10cf, 0x10e3, 0x10fa, 0x1110, 0x1124, 0x1139, 0x114d, + 0x1163, 0x1178, 0x118d, 0x11a3, 0x11ba, 0x11d0, 0x11e7, 0x11fb, + 0x120f, 0x1224, 0x1238, 0x124d, 0x1262, 0x1276, 0x128b, 0x12a0, + 0x12b5, 0x12ca, 0x12df, 0x12f3, 0x1308, 0x131f, 0x1335, 0x134b, + 0x1360, 0x1374, 0x1388, 0x139e, 0x13b4, 0x13ca, 0x13e0, 0x13f4, + 0x140b, 0x141f, 0x1435, 0x144b, 0x145f, 0x1473, 0x1489, 0x149c, + // Entry 3B3C0 - 3B3FF + 0x14b3, 0x14c8, 0x14de, 0x14f5, 0x150b, 0x1522, 0x1538, 0x154f, + 0x1565, 0x157b, 0x158f, 0x15a4, 0x15bb, 0x15d0, 0x15e4, 0x15f8, + 0x160d, 0x1621, 0x1638, 0x164d, 0x1661, 0x1676, 0x168a, 0x16a0, + 0x16b6, 0x16cc, 0x16e0, 0x16f7, 0x170c, 0x1720, 0x1734, 0x174a, + 0x175e, 0x1773, 0x1787, 0x179b, 0x17b1, 0x17c7, 0x17db, 0x17f2, + 0x1808, 0x181d, 0x1832, 0x1847, 0x185e, 0x1874, 0x1888, 0x189e, + 0x18b3, 0x18c8, 0x18dd, 0x18f1, 0x1906, 0x191b, 0x192f, 0x1942, + 0x1956, 0x196d, 0x1983, 0x1997, 0x2ac7, 0x2acd, 0x2ad5, 0x2adc, + // Entry 3B400 - 3B43F + 0x0001, 0x0f5f, 0x00ec, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 3B440 - 3B47F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 3B480 - 3B4BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 3B4C0 - 3B4FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2b3c, 0x3a8d, 0x2b3a, 0x2b29, + 0x0004, 0x105b, 0x1055, 0x1052, 0x1058, 0x0001, 0x0014, 0x0349, + 0x0001, 0x0014, 0x035a, 0x0001, 0x0016, 0x0098, 0x0001, 0x004f, + // Entry 3B500 - 3B53F + 0x087f, 0x0004, 0x106c, 0x1066, 0x1063, 0x1069, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0008, 0x1078, 0x0000, 0x0000, 0x0000, 0x10dd, + 0x10f0, 0x0000, 0x1101, 0x0002, 0x107b, 0x10ac, 0x0003, 0x107f, + 0x108e, 0x109d, 0x000d, 0x0014, 0xffff, 0x0916, 0x347a, 0x3486, + 0x35ee, 0x3492, 0x3499, 0x35f2, 0x34a3, 0x34a8, 0x3604, 0x0963, + 0x096a, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, + // Entry 3B540 - 3B57F + 0x000d, 0x0014, 0xffff, 0x0916, 0x347a, 0x3486, 0x35ee, 0x3492, + 0x3499, 0x35f2, 0x34a3, 0x34a8, 0x3604, 0x0963, 0x096a, 0x0003, + 0x10b0, 0x10bf, 0x10ce, 0x000d, 0x0014, 0xffff, 0x0916, 0x347a, + 0x3486, 0x35ee, 0x3492, 0x3499, 0x35f2, 0x34a3, 0x34a8, 0x3604, + 0x0963, 0x096a, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, + 0x3a0c, 0x000d, 0x0014, 0xffff, 0x0916, 0x347a, 0x3486, 0x35ee, + 0x3492, 0x3499, 0x35f2, 0x34a3, 0x34a8, 0x3604, 0x0963, 0x096a, + // Entry 3B580 - 3B5BF + 0x0003, 0x10e6, 0x10eb, 0x10e1, 0x0001, 0x10e3, 0x0001, 0x0000, + 0x1a1d, 0x0001, 0x10e8, 0x0001, 0x0000, 0x1a1d, 0x0001, 0x10ed, + 0x0001, 0x0000, 0x1a1d, 0x0004, 0x10fe, 0x10f8, 0x10f5, 0x10fb, + 0x0001, 0x0014, 0x0349, 0x0001, 0x0014, 0x035a, 0x0001, 0x0016, + 0x0098, 0x0001, 0x0008, 0x0627, 0x0004, 0x110f, 0x1109, 0x1106, + 0x110c, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x111b, 0x1131, 0x0000, 0x1142, 0x0003, 0x1125, + // Entry 3B5C0 - 3B5FF + 0x112b, 0x111f, 0x0001, 0x1121, 0x0002, 0x004f, 0x0887, 0x0893, + 0x0001, 0x1127, 0x0002, 0x004f, 0x089a, 0x0893, 0x0001, 0x112d, + 0x0002, 0x004f, 0xffff, 0x0893, 0x0004, 0x113f, 0x1139, 0x1136, + 0x113c, 0x0001, 0x0014, 0x0349, 0x0001, 0x0014, 0x035a, 0x0001, + 0x0016, 0x0098, 0x0001, 0x0008, 0x0627, 0x0004, 0x1150, 0x114a, + 0x1147, 0x114d, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0042, 0x1196, + 0x119b, 0x11a0, 0x11a5, 0x11bc, 0x11d3, 0x11ea, 0x1201, 0x1218, + // Entry 3B600 - 3B63F + 0x122f, 0x1246, 0x125d, 0x1274, 0x128f, 0x12aa, 0x12c5, 0x12ca, + 0x12cf, 0x12d4, 0x12ed, 0x1306, 0x131f, 0x1324, 0x1329, 0x132e, + 0x1333, 0x1338, 0x133d, 0x1342, 0x1347, 0x134c, 0x1360, 0x1374, + 0x1388, 0x139c, 0x13b0, 0x13c4, 0x13d8, 0x13ec, 0x1400, 0x1414, + 0x1428, 0x143c, 0x1450, 0x1464, 0x1478, 0x148c, 0x14a0, 0x14b4, + 0x14c8, 0x14dc, 0x14f0, 0x14f5, 0x14fa, 0x14ff, 0x1515, 0x1527, + 0x1539, 0x154f, 0x1561, 0x1573, 0x1589, 0x159f, 0x15b5, 0x15ba, + 0x15bf, 0x0001, 0x1198, 0x0001, 0x004f, 0x08a3, 0x0001, 0x119d, + // Entry 3B640 - 3B67F + 0x0001, 0x004f, 0x08a3, 0x0001, 0x11a2, 0x0001, 0x004f, 0x08a3, + 0x0003, 0x11a9, 0x11ac, 0x11b1, 0x0001, 0x0016, 0x041c, 0x0003, + 0x004f, 0x08ad, 0x08b4, 0x08ba, 0x0002, 0x11b4, 0x11b8, 0x0002, + 0x0016, 0x043c, 0x043c, 0x0002, 0x0016, 0x0447, 0x0447, 0x0003, + 0x11c0, 0x11c3, 0x11c8, 0x0001, 0x0016, 0x041c, 0x0003, 0x004f, + 0x08ad, 0x08b4, 0x08ba, 0x0002, 0x11cb, 0x11cf, 0x0002, 0x0016, + 0x043c, 0x043c, 0x0002, 0x0016, 0x0447, 0x0447, 0x0003, 0x11d7, + 0x11da, 0x11df, 0x0001, 0x0016, 0x041c, 0x0003, 0x004f, 0x08ad, + // Entry 3B680 - 3B6BF + 0x08b4, 0x08ba, 0x0002, 0x11e2, 0x11e6, 0x0002, 0x004f, 0x08c4, + 0x08c4, 0x0002, 0x004f, 0x08cd, 0x08cd, 0x0003, 0x11ee, 0x11f1, + 0x11f6, 0x0001, 0x000d, 0x03c6, 0x0003, 0x004f, 0x08d8, 0x08e8, + 0x08f8, 0x0002, 0x11f9, 0x11fd, 0x0002, 0x0016, 0x0494, 0x0485, + 0x0002, 0x0016, 0x04bb, 0x04a5, 0x0003, 0x1205, 0x1208, 0x120d, + 0x0001, 0x000d, 0x0444, 0x0003, 0x004f, 0x0906, 0x0912, 0x091c, + 0x0002, 0x1210, 0x1214, 0x0002, 0x004f, 0x0926, 0x0926, 0x0002, + 0x004f, 0x0931, 0x0931, 0x0003, 0x121c, 0x121f, 0x1224, 0x0001, + // Entry 3B6C0 - 3B6FF + 0x000d, 0x0444, 0x0003, 0x004f, 0x0906, 0x0912, 0x091c, 0x0002, + 0x1227, 0x122b, 0x0002, 0x004f, 0x0943, 0x0943, 0x0002, 0x004f, + 0x094c, 0x094c, 0x0003, 0x1233, 0x1236, 0x123b, 0x0001, 0x0016, + 0x051a, 0x0003, 0x004f, 0x0957, 0x0966, 0x0975, 0x0002, 0x123e, + 0x1242, 0x0002, 0x0016, 0x0558, 0x054a, 0x0002, 0x0016, 0x057d, + 0x0568, 0x0003, 0x124a, 0x124d, 0x1252, 0x0001, 0x004f, 0x0982, + 0x0003, 0x004f, 0x0987, 0x0993, 0x099d, 0x0002, 0x1255, 0x1259, + 0x0002, 0x0016, 0x05b4, 0x05b4, 0x0002, 0x0016, 0x05cb, 0x05cb, + // Entry 3B700 - 3B73F + 0x0003, 0x1261, 0x1264, 0x1269, 0x0001, 0x0001, 0x017d, 0x0003, + 0x004f, 0x0987, 0x0993, 0x099d, 0x0002, 0x126c, 0x1270, 0x0002, + 0x004f, 0x09a7, 0x09a7, 0x0002, 0x004f, 0x09b0, 0x09b0, 0x0004, + 0x1279, 0x127c, 0x1281, 0x128c, 0x0001, 0x004f, 0x09b9, 0x0003, + 0x004f, 0x09bd, 0x09c9, 0x09d4, 0x0002, 0x1284, 0x1288, 0x0002, + 0x004f, 0x09e9, 0x09de, 0x0002, 0x004f, 0x0a07, 0x09f5, 0x0001, + 0x004f, 0x0a1a, 0x0004, 0x1294, 0x1297, 0x129c, 0x12a7, 0x0001, + 0x004f, 0x09b9, 0x0003, 0x004f, 0x09bd, 0x09c9, 0x09d4, 0x0002, + // Entry 3B740 - 3B77F + 0x129f, 0x12a3, 0x0002, 0x004f, 0x0a32, 0x0a32, 0x0002, 0x004f, + 0x0a3c, 0x0a3c, 0x0001, 0x004f, 0x0a4d, 0x0004, 0x12af, 0x12b2, + 0x12b7, 0x12c2, 0x0001, 0x0001, 0x0788, 0x0003, 0x004f, 0x09bd, + 0x09c9, 0x09d4, 0x0002, 0x12ba, 0x12be, 0x0002, 0x0028, 0x132d, + 0x132d, 0x0002, 0x0028, 0x1335, 0x1335, 0x0001, 0x004f, 0x0a5a, + 0x0001, 0x12c7, 0x0001, 0x004f, 0x0a61, 0x0001, 0x12cc, 0x0001, + 0x004f, 0x0a70, 0x0001, 0x12d1, 0x0001, 0x004f, 0x0a7b, 0x0003, + 0x12d8, 0x12db, 0x12e2, 0x0001, 0x0001, 0x024a, 0x0005, 0x0016, + // Entry 3B780 - 3B7BF + 0x0683, 0x068a, 0x0690, 0x0678, 0x0699, 0x0002, 0x12e5, 0x12e9, + 0x0002, 0x004f, 0x0a85, 0x0a85, 0x0002, 0x004f, 0x0a92, 0x0a92, + 0x0003, 0x12f1, 0x12f4, 0x12fb, 0x0001, 0x0001, 0x024a, 0x0005, + 0x0016, 0x0683, 0x068a, 0x0690, 0x0678, 0x0699, 0x0002, 0x12fe, + 0x1302, 0x0002, 0x004f, 0x0aa6, 0x0aa6, 0x0002, 0x004f, 0x0ab0, + 0x0ab0, 0x0003, 0x130a, 0x130d, 0x1314, 0x0001, 0x0029, 0x007b, + 0x0005, 0x004f, 0x0ac7, 0x0ace, 0x0ad4, 0x0ac1, 0x0add, 0x0002, + 0x1317, 0x131b, 0x0002, 0x004f, 0x0ae3, 0x0ae3, 0x0002, 0x004f, + // Entry 3B7C0 - 3B7FF + 0x0aeb, 0x0aeb, 0x0001, 0x1321, 0x0001, 0x0016, 0x06e2, 0x0001, + 0x1326, 0x0001, 0x0016, 0x06e2, 0x0001, 0x132b, 0x0001, 0x004f, + 0x0af3, 0x0001, 0x1330, 0x0001, 0x004f, 0x0afe, 0x0001, 0x1335, + 0x0001, 0x004f, 0x0afe, 0x0001, 0x133a, 0x0001, 0x004f, 0x0b05, + 0x0001, 0x133f, 0x0001, 0x004f, 0x0b0b, 0x0001, 0x1344, 0x0001, + 0x004f, 0x0b1d, 0x0001, 0x1349, 0x0001, 0x004f, 0x0b2a, 0x0003, + 0x0000, 0x1350, 0x1355, 0x0003, 0x004f, 0x0b36, 0x0b46, 0x0b4e, + 0x0002, 0x1358, 0x135c, 0x0002, 0x0016, 0x276b, 0x073e, 0x0002, + // Entry 3B800 - 3B83F + 0x0016, 0x277c, 0x075d, 0x0003, 0x0000, 0x1364, 0x1369, 0x0003, + 0x004f, 0x0b5c, 0x0b67, 0x0b73, 0x0002, 0x136c, 0x1370, 0x0002, + 0x004f, 0x0b7f, 0x0b7f, 0x0002, 0x004f, 0x0b8c, 0x0b8c, 0x0003, + 0x0000, 0x1378, 0x137d, 0x0003, 0x004f, 0x0ba0, 0x0baa, 0x0bb5, + 0x0002, 0x1380, 0x1384, 0x0002, 0x004f, 0x0bc0, 0x0bc0, 0x0002, + 0x004f, 0x0bcc, 0x0bcc, 0x0003, 0x0000, 0x138c, 0x1391, 0x0003, + 0x004f, 0x0bdf, 0x0bee, 0x0bf5, 0x0002, 0x1394, 0x1398, 0x0002, + 0x0016, 0x2794, 0x07f6, 0x0002, 0x0016, 0x27a4, 0x0813, 0x0003, + // Entry 3B840 - 3B87F + 0x0000, 0x13a0, 0x13a5, 0x0003, 0x004f, 0x0c02, 0x0c0c, 0x0c17, + 0x0002, 0x13a8, 0x13ac, 0x0002, 0x004f, 0x0c22, 0x0c22, 0x0002, + 0x004f, 0x0c2e, 0x0c2e, 0x0003, 0x0000, 0x13b4, 0x13b9, 0x0003, + 0x004f, 0x0c41, 0x0c4a, 0x0c54, 0x0002, 0x13bc, 0x13c0, 0x0002, + 0x004f, 0x0c5e, 0x0c5e, 0x0002, 0x004f, 0x0c69, 0x0c69, 0x0003, + 0x0000, 0x13c8, 0x13cd, 0x0003, 0x004f, 0x0c7b, 0x0c8b, 0x0c93, + 0x0002, 0x13d0, 0x13d4, 0x0002, 0x0016, 0x27bb, 0x08a7, 0x0002, + 0x0016, 0x27cc, 0x08c6, 0x0003, 0x0000, 0x13dc, 0x13e1, 0x0003, + // Entry 3B880 - 3B8BF + 0x004f, 0x0ca1, 0x0cab, 0x0cb6, 0x0002, 0x13e4, 0x13e8, 0x0002, + 0x004f, 0x0cc1, 0x0cc1, 0x0002, 0x004f, 0x0ccd, 0x0ccd, 0x0003, + 0x0000, 0x13f0, 0x13f5, 0x0003, 0x004f, 0x0ce0, 0x0ce9, 0x0cf3, + 0x0002, 0x13f8, 0x13fc, 0x0002, 0x004f, 0x0cfd, 0x0cfd, 0x0002, + 0x004f, 0x0d08, 0x0d08, 0x0003, 0x0000, 0x1404, 0x1409, 0x0003, + 0x004f, 0x0d1a, 0x0d29, 0x0d30, 0x0002, 0x140c, 0x1410, 0x0002, + 0x0016, 0x27e4, 0x0959, 0x0002, 0x0016, 0x27f4, 0x0976, 0x0003, + 0x0000, 0x1418, 0x141d, 0x0003, 0x004f, 0x0d3d, 0x0d47, 0x0d52, + // Entry 3B8C0 - 3B8FF + 0x0002, 0x1420, 0x1424, 0x0002, 0x004f, 0x0d5d, 0x0d5d, 0x0002, + 0x004f, 0x0d69, 0x0d69, 0x0003, 0x0000, 0x142c, 0x1431, 0x0003, + 0x004f, 0x0d7c, 0x0d85, 0x0d8f, 0x0002, 0x1434, 0x1438, 0x0002, + 0x004f, 0x0d99, 0x0d99, 0x0002, 0x004f, 0x0da4, 0x0da4, 0x0003, + 0x0000, 0x1440, 0x1445, 0x0003, 0x004f, 0x0db6, 0x0dc6, 0x0dce, + 0x0002, 0x1448, 0x144c, 0x0002, 0x0016, 0x280b, 0x0a0a, 0x0002, + 0x0016, 0x281c, 0x0a29, 0x0003, 0x0000, 0x1454, 0x1459, 0x0003, + 0x004f, 0x0ddc, 0x0de6, 0x0df1, 0x0002, 0x145c, 0x1460, 0x0002, + // Entry 3B900 - 3B93F + 0x004f, 0x0dfc, 0x0dfc, 0x0002, 0x004f, 0x0e08, 0x0e08, 0x0003, + 0x0000, 0x1468, 0x146d, 0x0003, 0x004f, 0x0e1b, 0x0e24, 0x0e2e, + 0x0002, 0x1470, 0x1474, 0x0002, 0x004f, 0x0e38, 0x0e38, 0x0002, + 0x004f, 0x0e43, 0x0e43, 0x0003, 0x0000, 0x147c, 0x1481, 0x0003, + 0x004f, 0x0e55, 0x0e64, 0x0e6b, 0x0002, 0x1484, 0x1488, 0x0002, + 0x0016, 0x2834, 0x0abc, 0x0002, 0x0016, 0x2844, 0x0ad9, 0x0003, + 0x0000, 0x1490, 0x1495, 0x0003, 0x004f, 0x0e78, 0x0e82, 0x0e8d, + 0x0002, 0x1498, 0x149c, 0x0002, 0x004f, 0x0e98, 0x0e98, 0x0002, + // Entry 3B940 - 3B97F + 0x004f, 0x0ea4, 0x0ea4, 0x0003, 0x0000, 0x14a4, 0x14a9, 0x0003, + 0x004f, 0x0eb7, 0x0ec0, 0x0eca, 0x0002, 0x14ac, 0x14b0, 0x0002, + 0x004f, 0x0ed4, 0x0ed4, 0x0002, 0x004f, 0x0edf, 0x0edf, 0x0003, + 0x0000, 0x14b8, 0x14bd, 0x0003, 0x004f, 0x0ef1, 0x0f01, 0x0f09, + 0x0002, 0x14c0, 0x14c4, 0x0002, 0x0016, 0x285b, 0x0b6d, 0x0002, + 0x0016, 0x286c, 0x0b8c, 0x0003, 0x0000, 0x14cc, 0x14d1, 0x0003, + 0x004f, 0x0f17, 0x0f22, 0x0f2e, 0x0002, 0x14d4, 0x14d8, 0x0002, + 0x004f, 0x0f3a, 0x0f3a, 0x0002, 0x004f, 0x0f47, 0x0f47, 0x0003, + // Entry 3B980 - 3B9BF + 0x0000, 0x14e0, 0x14e5, 0x0003, 0x004f, 0x0f5b, 0x0f65, 0x0f70, + 0x0002, 0x14e8, 0x14ec, 0x0002, 0x004f, 0x0f7b, 0x0f7b, 0x0002, + 0x004f, 0x0f87, 0x0f87, 0x0001, 0x14f2, 0x0001, 0x0007, 0x2485, + 0x0001, 0x14f7, 0x0001, 0x001d, 0x0524, 0x0001, 0x14fc, 0x0001, + 0x0007, 0x2485, 0x0003, 0x1503, 0x1506, 0x150a, 0x0001, 0x0016, + 0x0bfe, 0x0002, 0x004f, 0xffff, 0x0f9a, 0x0002, 0x150d, 0x1511, + 0x0002, 0x0016, 0x0c23, 0x0c17, 0x0002, 0x0016, 0x0c43, 0x0c30, + 0x0003, 0x1519, 0x0000, 0x151c, 0x0001, 0x0000, 0x2000, 0x0002, + // Entry 3B9C0 - 3B9FF + 0x151f, 0x1523, 0x0002, 0x004f, 0x0fa6, 0x0fa6, 0x0002, 0x004f, + 0x0faf, 0x0faf, 0x0003, 0x152b, 0x0000, 0x152e, 0x0001, 0x0000, + 0x2000, 0x0002, 0x1531, 0x1535, 0x0002, 0x004f, 0x0fbf, 0x0fbf, + 0x0002, 0x004f, 0x0fc6, 0x0fc6, 0x0003, 0x153d, 0x1540, 0x1544, + 0x0001, 0x004f, 0x0fcd, 0x0002, 0x004f, 0xffff, 0x0fd4, 0x0002, + 0x1547, 0x154b, 0x0002, 0x004f, 0x0ff1, 0x0fe3, 0x0002, 0x004f, + 0x1016, 0x1001, 0x0003, 0x1553, 0x0000, 0x1556, 0x0001, 0x0043, + 0x092f, 0x0002, 0x1559, 0x155d, 0x0002, 0x004f, 0x102d, 0x102d, + // Entry 3BA00 - 3BA3F + 0x0002, 0x004f, 0x1038, 0x1038, 0x0003, 0x1565, 0x0000, 0x1568, + 0x0001, 0x0000, 0x1f9a, 0x0002, 0x156b, 0x156f, 0x0002, 0x0000, + 0x1d97, 0x1d97, 0x0002, 0x0000, 0x1da0, 0x1da0, 0x0003, 0x1577, + 0x157a, 0x157e, 0x0001, 0x0016, 0x0cec, 0x0002, 0x004f, 0xffff, + 0x104a, 0x0002, 0x1581, 0x1585, 0x0002, 0x0016, 0x0d04, 0x0cf6, + 0x0002, 0x0016, 0x0d29, 0x0d14, 0x0003, 0x158d, 0x1590, 0x1594, + 0x0001, 0x001f, 0x16d8, 0x0002, 0x004f, 0xffff, 0x104a, 0x0002, + 0x1597, 0x159b, 0x0002, 0x004f, 0x104e, 0x104e, 0x0002, 0x004f, + // Entry 3BA40 - 3BA7F + 0x1059, 0x1059, 0x0003, 0x15a3, 0x15a6, 0x15aa, 0x0001, 0x0000, + 0x2002, 0x0002, 0x004f, 0xffff, 0x104a, 0x0002, 0x15ad, 0x15b1, + 0x0002, 0x0026, 0x02ce, 0x02ce, 0x0002, 0x0000, 0x1dbb, 0x1dbb, + 0x0001, 0x15b7, 0x0001, 0x004f, 0x106b, 0x0001, 0x15bc, 0x0001, + 0x004f, 0x106b, 0x0001, 0x15c1, 0x0001, 0x004f, 0x106b, 0x0004, + 0x15c9, 0x15ce, 0x15d3, 0x15e2, 0x0003, 0x0000, 0x1dc7, 0x39fb, + 0x3a6f, 0x0003, 0x004f, 0x1074, 0x1085, 0x1097, 0x0002, 0x0000, + 0x15d6, 0x0003, 0x0000, 0x15dd, 0x15da, 0x0001, 0x004f, 0x10a9, + // Entry 3BA80 - 3BABF + 0x0003, 0x004f, 0xffff, 0x10c1, 0x10d3, 0x0002, 0x17c9, 0x15e5, + 0x0003, 0x15e9, 0x1729, 0x1689, 0x009e, 0x0016, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2884, 0x2896, 0x28a3, 0x28b9, 0x28e0, 0x290c, + 0x292f, 0x2961, 0x2976, 0x2988, 0x2994, 0x29a3, 0x29b6, 0x29c2, + 0x29f6, 0x2a0b, 0x2a25, 0x2a37, 0x2a49, 0x2a5c, 0x2a68, 0xffff, + 0xffff, 0x2a7a, 0xffff, 0x2a90, 0xffff, 0x2aa0, 0x2ab5, 0x2ac2, + 0x2acf, 0xffff, 0xffff, 0x2ae8, 0x2af8, 0x2b10, 0xffff, 0xffff, + 0xffff, 0x2b1c, 0xffff, 0x2b34, 0x2b49, 0xffff, 0x2b5b, 0x2b6d, + // Entry 3BAC0 - 3BAFF + 0x2b8a, 0xffff, 0xffff, 0xffff, 0xffff, 0x2b97, 0xffff, 0xffff, + 0x2ba4, 0x2bb8, 0xffff, 0xffff, 0x2bcc, 0x2bec, 0x2c02, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2c15, 0x2c20, 0x2c35, + 0x2c42, 0x2c4e, 0xffff, 0xffff, 0x2c77, 0xffff, 0x2c84, 0xffff, + 0xffff, 0x2c9d, 0xffff, 0x2cc3, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2cd8, 0xffff, 0x2ce6, 0x2d07, 0x2d35, 0x2d4d, 0xffff, 0xffff, + 0xffff, 0x2d61, 0x2d6f, 0x2d80, 0xffff, 0xffff, 0x2d9a, 0x2dbb, + 0x2dd4, 0x2de6, 0xffff, 0xffff, 0x2df5, 0x2e06, 0x2e13, 0xffff, + // Entry 3BB00 - 3BB3F + 0x2e22, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2e48, 0x2e5e, + 0x2e73, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2e80, 0xffff, 0xffff, 0x2e94, 0xffff, 0x2ea1, 0xffff, 0x2eaf, + 0x2ebf, 0x2ecc, 0xffff, 0x2eda, 0x2ef3, 0xffff, 0xffff, 0xffff, + 0x2f0a, 0x2f1f, 0xffff, 0xffff, 0x0da7, 0x0e82, 0x0ff9, 0x1023, + 0xffff, 0xffff, 0x2cb9, 0x215a, 0x009e, 0x004f, 0x1100, 0x110d, + 0x1122, 0x1134, 0x1146, 0x1176, 0x11c2, 0x11f0, 0x1240, 0x129a, + 0x12e2, 0x1348, 0x137e, 0x13ee, 0x1414, 0x143e, 0x1470, 0x1494, + // Entry 3BB40 - 3BB7F + 0x14fe, 0x1534, 0x1574, 0x15a4, 0x15d4, 0x1606, 0x162a, 0x165a, + 0x1667, 0x1676, 0x16a4, 0x16c3, 0x16f9, 0x170f, 0x173b, 0x1761, + 0x1787, 0x17bb, 0x17d6, 0x17ef, 0x181b, 0x1852, 0x1876, 0x1889, + 0x18a9, 0x18bc, 0x18ee, 0x18ff, 0x1935, 0x1965, 0x197d, 0x19ad, + 0x19e9, 0x1a0f, 0x1a2a, 0x1a52, 0x1a70, 0x1a85, 0x1aab, 0x1ac6, + 0x1ada, 0x1b0e, 0x1b4b, 0x1b64, 0x1b70, 0x1bb2, 0x1be0, 0x1c08, + 0x1c13, 0x1c2b, 0x1c3c, 0x1c52, 0x1c65, 0x1c78, 0x1c9a, 0x1cc6, + 0x1cec, 0x1d10, 0x1d6e, 0x1d83, 0x1d98, 0x1dbe, 0x1dd2, 0x1e06, + // Entry 3BB80 - 3BBBF + 0x1e1e, 0x1e37, 0x1e95, 0x1eb0, 0x1edc, 0x1eea, 0x1ef8, 0x1f15, + 0x1f27, 0x1f4f, 0x1f63, 0x1fa7, 0x2005, 0x2037, 0x2061, 0x206f, + 0x207b, 0x2087, 0x20af, 0x20dd, 0x2113, 0x2125, 0x213e, 0x2195, + 0x21c9, 0x21ef, 0x2219, 0x2226, 0x2233, 0x2261, 0x2287, 0x22b1, + 0x22cc, 0x231a, 0x2330, 0x2345, 0x2388, 0x239e, 0x23b3, 0x23e1, + 0x2417, 0x243d, 0x244d, 0x245c, 0x246a, 0x2484, 0x2492, 0x24a5, + 0x24b2, 0x24dc, 0x24eb, 0x2500, 0x2526, 0x253f, 0x2567, 0x2573, + 0x259f, 0x25c5, 0x25ed, 0x25fe, 0x2632, 0x2662, 0x2676, 0x268f, + // Entry 3BBC0 - 3BBFF + 0x26b4, 0x26e0, 0x1b42, 0x2182, 0x10e2, 0x119c, 0x13a4, 0x13c8, + 0x16ef, 0x1e14, 0x1e71, 0x235c, 0x009e, 0x004f, 0xffff, 0xffff, + 0xffff, 0xffff, 0x115e, 0x1189, 0x11d9, 0x1218, 0x126d, 0x12be, + 0x1315, 0x1363, 0x1391, 0x1402, 0x1429, 0x1457, 0x1482, 0x14c9, + 0x1519, 0x1554, 0x158c, 0x15bc, 0x15ed, 0x1618, 0x1642, 0xffff, + 0xffff, 0x168d, 0xffff, 0x16d9, 0xffff, 0x1725, 0x174e, 0x1774, + 0x17a1, 0xffff, 0xffff, 0x1805, 0x1834, 0x1864, 0xffff, 0xffff, + 0xffff, 0x18d5, 0xffff, 0x191a, 0x194d, 0xffff, 0x1995, 0x19cb, + // Entry 3BC00 - 3BC3F + 0x19fc, 0xffff, 0xffff, 0xffff, 0xffff, 0x1a98, 0xffff, 0xffff, + 0x1af4, 0x1b28, 0xffff, 0xffff, 0x1b91, 0x1bc9, 0x1bf4, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1c89, 0x1cb0, 0x1cd9, + 0x1cfe, 0x1d3f, 0xffff, 0xffff, 0x1dab, 0xffff, 0x1dec, 0xffff, + 0xffff, 0x1e54, 0xffff, 0x1ec6, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1f3b, 0xffff, 0x1f85, 0x1fd6, 0x201e, 0x204c, 0xffff, 0xffff, + 0xffff, 0x209b, 0x20c6, 0x20f8, 0xffff, 0xffff, 0x2160, 0x21af, + 0x21dc, 0x2204, 0xffff, 0xffff, 0x224a, 0x2274, 0x229c, 0xffff, + // Entry 3BC40 - 3BC7F + 0x22f3, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x23ca, 0x23fc, + 0x242a, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x24c7, 0xffff, 0xffff, 0x2513, 0xffff, 0x2553, 0xffff, 0x2589, + 0x25b2, 0x25d9, 0xffff, 0x2618, 0x264a, 0xffff, 0xffff, 0xffff, + 0x26ca, 0x26fc, 0xffff, 0xffff, 0x10f1, 0x11b0, 0x13b7, 0x13dc, + 0xffff, 0xffff, 0x1e84, 0x2373, 0x0003, 0x17cd, 0x184f, 0x180e, + 0x003f, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0x000e, 0x0019, 0x0024, 0x002f, 0xffff, 0xffff, 0xffff, + // Entry 3BC80 - 3BCBF + 0xffff, 0xffff, 0xffff, 0x003a, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x24ae, + 0x24b7, 0xffff, 0x2512, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x24cd, 0x003f, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0004, 0xffff, 0x0011, 0x001c, 0x249e, 0x0032, 0xffff, 0xffff, + // Entry 3BCC0 - 3BCFF + 0xffff, 0xffff, 0xffff, 0xffff, 0x003d, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x24ae, 0x24b7, 0xffff, 0x2512, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x251a, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0068, 0x003f, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0009, 0xffff, 0x0015, 0x0020, 0x24a2, 0x0036, 0xffff, + // Entry 3BD00 - 3BD3F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0041, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x24b2, 0x24bb, 0xffff, 0x24c4, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x006d, 0x0002, 0x0003, 0x00d1, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, + // Entry 3BD40 - 3BD7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, + 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, 0x0006, 0x000d, + 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0002, + 0x0587, 0x0008, 0x002f, 0x0066, 0x008b, 0x0000, 0x009f, 0x00af, + 0x00c0, 0x0000, 0x0002, 0x0032, 0x0054, 0x0003, 0x0036, 0x0000, + 0x0045, 0x000d, 0x0050, 0xffff, 0x0000, 0x0004, 0x0009, 0x000d, + 0x0011, 0x0015, 0x001a, 0x001e, 0x0022, 0x0027, 0x002b, 0x002f, + 0x000d, 0x0050, 0xffff, 0x0034, 0x003f, 0x0049, 0x0053, 0x005a, + // Entry 3BD80 - 3BDBF + 0x0065, 0x006f, 0x0079, 0x0084, 0x008d, 0x0094, 0x009a, 0x0002, + 0x0000, 0x0057, 0x000d, 0x0000, 0xffff, 0x2359, 0x2b40, 0x2b3c, + 0x2b3c, 0x2b40, 0x2b40, 0x2b40, 0x2b40, 0x2b3c, 0x2b3c, 0x2296, + 0x2b3c, 0x0002, 0x0069, 0x007f, 0x0003, 0x006d, 0x0000, 0x0076, + 0x0007, 0x0042, 0x02d8, 0x25fd, 0x2601, 0x2605, 0x2609, 0x260d, + 0x2611, 0x0007, 0x0050, 0x00a4, 0x00aa, 0x00b0, 0x00b7, 0x00c0, + 0x00c5, 0x00cd, 0x0002, 0x0000, 0x0082, 0x0007, 0x0000, 0x2b3a, + 0x2b3c, 0x2b3a, 0x2b3a, 0x2b3a, 0x2b3a, 0x2b3c, 0x0001, 0x008d, + // Entry 3BDC0 - 3BDFF + 0x0003, 0x0091, 0x0000, 0x0098, 0x0005, 0x0000, 0xffff, 0x1f17, + 0x1f1a, 0x1f1d, 0x1f20, 0x0005, 0x0050, 0xffff, 0x00d6, 0x00dd, + 0x00e4, 0x00eb, 0x0003, 0x00a9, 0x0000, 0x00a3, 0x0001, 0x00a5, + 0x0002, 0x0050, 0x00f2, 0x0105, 0x0001, 0x00ab, 0x0002, 0x0009, + 0x0078, 0x57b0, 0x0004, 0x00bd, 0x00b7, 0x00b4, 0x00ba, 0x0001, + 0x0006, 0x015b, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, + 0x0001, 0x0002, 0x08e8, 0x0004, 0x00ce, 0x00c8, 0x00c5, 0x00cb, + 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, + // Entry 3BE00 - 3BE3F + 0x053d, 0x0001, 0x0000, 0x0546, 0x0040, 0x0000, 0x0000, 0x0000, + 0x0112, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0117, 0x0000, + 0x0000, 0x011c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0121, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x012c, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0131, 0x0000, 0x0000, 0x0136, 0x0000, + // Entry 3BE40 - 3BE7F + 0x0000, 0x013b, 0x0000, 0x0000, 0x0140, 0x0001, 0x0114, 0x0001, + 0x0050, 0x0115, 0x0001, 0x0119, 0x0001, 0x0050, 0x011d, 0x0001, + 0x011e, 0x0001, 0x0050, 0x0129, 0x0002, 0x0124, 0x0127, 0x0001, + 0x0050, 0x012f, 0x0003, 0x0050, 0x0136, 0x013c, 0x0144, 0x0001, + 0x012e, 0x0001, 0x0050, 0x014b, 0x0001, 0x0133, 0x0001, 0x0050, + 0x0159, 0x0001, 0x0138, 0x0001, 0x0050, 0x015f, 0x0001, 0x013d, + 0x0001, 0x0050, 0x0167, 0x0001, 0x0142, 0x0001, 0x0050, 0x0170, + 0x0003, 0x0004, 0x018c, 0x0271, 0x0008, 0x0000, 0x0000, 0x0000, + // Entry 3BE80 - 3BEBF + 0x0000, 0x0000, 0x0000, 0x000d, 0x0038, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, 0x0027, 0x0004, 0x0024, + 0x001e, 0x001b, 0x0021, 0x0001, 0x0050, 0x017a, 0x0001, 0x0014, + 0x035a, 0x0001, 0x0016, 0x0098, 0x0001, 0x0050, 0x0191, 0x0004, + 0x0035, 0x002f, 0x002c, 0x0032, 0x0001, 0x0006, 0x022e, 0x0001, + 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, + 0x0008, 0x0041, 0x00a6, 0x00e7, 0x011c, 0x0134, 0x0159, 0x016a, + 0x017b, 0x0002, 0x0044, 0x0075, 0x0003, 0x0048, 0x0057, 0x0066, + // Entry 3BEC0 - 3BEFF + 0x000d, 0x0000, 0xffff, 0x1e22, 0x2bd1, 0x3ab7, 0x23e4, 0x2ba5, + 0x3abd, 0x3ac2, 0x23ed, 0x23f2, 0x2bbe, 0x2bc3, 0x2bc8, 0x000d, + 0x0000, 0xffff, 0x257b, 0x2b4e, 0x2b3c, 0x2b42, 0x2b3c, 0x257b, + 0x257b, 0x2b42, 0x2b3a, 0x2b50, 0x2b40, 0x2b3e, 0x000d, 0x0050, + 0xffff, 0x019f, 0x01a7, 0x01b0, 0x01b6, 0x01bc, 0x01c0, 0x01c5, + 0x01ca, 0x01d1, 0x01db, 0x01e3, 0x01ec, 0x0003, 0x0079, 0x0088, + 0x0097, 0x000d, 0x0000, 0xffff, 0x1e22, 0x2bd1, 0x3ac7, 0x23e4, + 0x3acd, 0x3ad1, 0x3ad6, 0x23ed, 0x23f2, 0x2bbe, 0x2bc3, 0x2bc8, + // Entry 3BF00 - 3BF3F + 0x000d, 0x0000, 0xffff, 0x257b, 0x2b4e, 0x2b3c, 0x2b42, 0x2b3c, + 0x257b, 0x257b, 0x2b42, 0x2b3a, 0x2b50, 0x2b40, 0x2b3e, 0x000d, + 0x0050, 0xffff, 0x019f, 0x01a7, 0x01f5, 0x01b6, 0x01fb, 0x01ff, + 0x0204, 0x01ca, 0x01d1, 0x01db, 0x01e3, 0x01ec, 0x0002, 0x00a9, + 0x00c8, 0x0003, 0x00ad, 0x00b6, 0x00bf, 0x0007, 0x0050, 0x0209, + 0x020e, 0x0212, 0x0216, 0x021a, 0x021e, 0x0222, 0x0007, 0x0000, + 0x2b3a, 0x2b3c, 0x2b3e, 0x2b3c, 0x2b3e, 0x2b4e, 0x2b3a, 0x0007, + 0x0050, 0x0226, 0x022f, 0x0237, 0x0240, 0x024b, 0x0256, 0x025e, + // Entry 3BF40 - 3BF7F + 0x0003, 0x00cc, 0x00d5, 0x00de, 0x0007, 0x0050, 0x0209, 0x020e, + 0x0212, 0x0216, 0x021a, 0x021e, 0x0222, 0x0007, 0x0000, 0x2b3a, + 0x2b3c, 0x2b3e, 0x2b3c, 0x2b3e, 0x2b4e, 0x2b3a, 0x0007, 0x0050, + 0x0226, 0x022f, 0x0237, 0x0240, 0x024b, 0x0256, 0x025e, 0x0002, + 0x00ea, 0x0103, 0x0003, 0x00ee, 0x00f5, 0x00fc, 0x0005, 0x0050, + 0xffff, 0x0269, 0x026d, 0x0271, 0x0275, 0x0005, 0x0000, 0xffff, + 0x04e3, 0x39f2, 0x39f5, 0x39f8, 0x0005, 0x0050, 0xffff, 0x0279, + 0x0285, 0x0291, 0x029d, 0x0003, 0x0107, 0x010e, 0x0115, 0x0005, + // Entry 3BF80 - 3BFBF + 0x0050, 0xffff, 0x02a9, 0x02ae, 0x02b4, 0x02bb, 0x0005, 0x0000, + 0xffff, 0x04e3, 0x39f2, 0x39f5, 0x39f8, 0x0005, 0x0050, 0xffff, + 0x0279, 0x0285, 0x0291, 0x029d, 0x0001, 0x011e, 0x0003, 0x0122, + 0x0000, 0x012b, 0x0002, 0x0125, 0x0128, 0x0001, 0x0050, 0x02c1, + 0x0001, 0x0050, 0x02c4, 0x0002, 0x012e, 0x0131, 0x0001, 0x0050, + 0x02c1, 0x0001, 0x0050, 0x02c4, 0x0003, 0x0143, 0x014e, 0x0138, + 0x0002, 0x013b, 0x013f, 0x0002, 0x0050, 0x02c7, 0x02e3, 0x0002, + 0x0050, 0x02d5, 0x02ef, 0x0002, 0x0146, 0x014a, 0x0002, 0x0050, + // Entry 3BFC0 - 3BFFF + 0x02ff, 0x030d, 0x0002, 0x0050, 0x0306, 0x0314, 0x0002, 0x0151, + 0x0155, 0x0002, 0x0040, 0x060b, 0x060e, 0x0002, 0x0050, 0x031b, + 0x031f, 0x0004, 0x0167, 0x0161, 0x015e, 0x0164, 0x0001, 0x0050, + 0x0323, 0x0001, 0x0014, 0x0792, 0x0001, 0x0016, 0x029f, 0x0001, + 0x0008, 0x09eb, 0x0004, 0x0178, 0x0172, 0x016f, 0x0175, 0x0001, + 0x0050, 0x0338, 0x0001, 0x0050, 0x034f, 0x0001, 0x0050, 0x0363, + 0x0001, 0x0050, 0x0373, 0x0004, 0x0189, 0x0183, 0x0180, 0x0186, + 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, + // Entry 3C000 - 3C03F + 0x022e, 0x0001, 0x0006, 0x022e, 0x0040, 0x01cd, 0x0000, 0x0000, + 0x01d2, 0x01dd, 0x01e2, 0x01e7, 0x01ec, 0x01f1, 0x01f6, 0x0201, + 0x0206, 0x020b, 0x0216, 0x021b, 0x0000, 0x0000, 0x0000, 0x0220, + 0x022b, 0x0230, 0x0000, 0x0000, 0x0000, 0x0235, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x023a, 0x0000, 0x023f, 0x0244, 0x0249, 0x024e, 0x0253, + // Entry 3C040 - 3C07F + 0x0258, 0x025d, 0x0262, 0x0267, 0x026c, 0x0001, 0x01cf, 0x0001, + 0x0050, 0x037e, 0x0002, 0x01d5, 0x01d8, 0x0001, 0x0040, 0x0637, + 0x0003, 0x0050, 0x0383, 0x0391, 0x039a, 0x0001, 0x01df, 0x0001, + 0x0040, 0x06b1, 0x0001, 0x01e4, 0x0001, 0x0040, 0x06b1, 0x0001, + 0x01e9, 0x0001, 0x0050, 0x03a7, 0x0001, 0x01ee, 0x0001, 0x0017, + 0x0710, 0x0001, 0x01f3, 0x0001, 0x0040, 0x06bd, 0x0002, 0x01f9, + 0x01fc, 0x0001, 0x0050, 0x03b0, 0x0003, 0x0050, 0x03b6, 0x03c5, + 0x03d1, 0x0001, 0x0203, 0x0001, 0x001d, 0x010c, 0x0001, 0x0208, + // Entry 3C080 - 3C0BF + 0x0001, 0x001d, 0x010c, 0x0002, 0x020e, 0x0211, 0x0001, 0x0000, + 0x1adc, 0x0003, 0x0050, 0x03df, 0x03ed, 0x03f8, 0x0001, 0x0218, + 0x0001, 0x0050, 0x0405, 0x0001, 0x021d, 0x0001, 0x0050, 0x0405, + 0x0002, 0x0223, 0x0226, 0x0001, 0x0042, 0x05ab, 0x0003, 0x0050, + 0x0409, 0x0412, 0x041a, 0x0001, 0x022d, 0x0001, 0x0042, 0x05ab, + 0x0001, 0x0232, 0x0001, 0x0040, 0x0747, 0x0001, 0x0237, 0x0001, + 0x0050, 0x0421, 0x0001, 0x023c, 0x0001, 0x0050, 0x042a, 0x0001, + 0x0241, 0x0001, 0x0050, 0x0432, 0x0001, 0x0246, 0x0001, 0x0042, + // Entry 3C0C0 - 3C0FF + 0x0a03, 0x0001, 0x024b, 0x0001, 0x0000, 0x213b, 0x0001, 0x0250, + 0x0001, 0x0050, 0x0439, 0x0001, 0x0255, 0x0001, 0x0017, 0x1185, + 0x0001, 0x025a, 0x0001, 0x0001, 0x07c5, 0x0001, 0x025f, 0x0001, + 0x0050, 0x0440, 0x0001, 0x0264, 0x0001, 0x0017, 0x11fc, 0x0001, + 0x0269, 0x0001, 0x0000, 0x2002, 0x0001, 0x026e, 0x0001, 0x0050, + 0x0447, 0x0004, 0x0276, 0x027b, 0x0000, 0x0280, 0x0003, 0x0008, + 0x1dbe, 0x4fa4, 0x4fab, 0x0003, 0x0050, 0x0452, 0x045b, 0x046a, + 0x0002, 0x0000, 0x0283, 0x0003, 0x02e9, 0x034b, 0x0287, 0x0060, + // Entry 3C100 - 3C13F + 0x0050, 0xffff, 0x047b, 0x0494, 0x04a9, 0x04d5, 0xffff, 0xffff, + 0x052c, 0x0598, 0x05fd, 0x0661, 0xffff, 0xffff, 0x06bb, 0xffff, + 0xffff, 0xffff, 0x0704, 0x076b, 0x07c8, 0x0825, 0x0872, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x08b5, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x08f3, 0x094b, + 0xffff, 0x099b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x09d5, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 3C140 - 3C17F + 0xffff, 0xffff, 0x09eb, 0xffff, 0x09f7, 0x0a10, 0x0a28, 0x0a3c, + 0xffff, 0xffff, 0x0a5c, 0x0a91, 0xffff, 0xffff, 0xffff, 0x0acd, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0b07, 0x0060, 0x0050, 0xffff, 0xffff, 0xffff, 0xffff, 0x04c0, + 0xffff, 0xffff, 0x050d, 0x057a, 0x05e2, 0x0643, 0xffff, 0xffff, + 0x06ad, 0xffff, 0xffff, 0xffff, 0x06e5, 0x0752, 0x07ab, 0x0810, + 0x085d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 3C180 - 3C1BF + 0xffff, 0xffff, 0xffff, 0xffff, 0x08aa, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x08d9, 0x0935, 0xffff, 0x0985, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0a50, 0x0a82, 0xffff, 0xffff, + 0xffff, 0x0abd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 3C1C0 - 3C1FF + 0xffff, 0xffff, 0x0afb, 0x0060, 0x0050, 0xffff, 0xffff, 0xffff, + 0xffff, 0x04f2, 0xffff, 0xffff, 0x0554, 0x05be, 0x0621, 0x0688, + 0xffff, 0xffff, 0x06d1, 0xffff, 0xffff, 0xffff, 0x072c, 0x078c, + 0x07ed, 0x0842, 0x088f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x08c8, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0915, 0x0969, 0xffff, 0x09b9, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 3C200 - 3C23F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0a70, 0x0aa8, + 0xffff, 0xffff, 0xffff, 0x0ae5, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0b1b, 0x0003, 0x0004, 0x0287, + 0x06ba, 0x000a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000f, 0x003a, 0x0000, 0x0270, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0018, 0x0000, 0x0029, 0x0004, 0x0026, 0x0020, + // Entry 3C240 - 3C27F + 0x001d, 0x0023, 0x0001, 0x0000, 0x0489, 0x0001, 0x0000, 0x049a, + 0x0001, 0x0000, 0x04a5, 0x0001, 0x0000, 0x04af, 0x0004, 0x0037, + 0x0031, 0x002e, 0x0034, 0x0001, 0x0050, 0x0b2d, 0x0001, 0x0050, + 0x0b2d, 0x0001, 0x0050, 0x0b3a, 0x0001, 0x0050, 0x0b3a, 0x0008, + 0x0043, 0x00a8, 0x00ff, 0x0134, 0x0223, 0x023d, 0x024e, 0x025f, + 0x0002, 0x0046, 0x0077, 0x0003, 0x004a, 0x0059, 0x0068, 0x000d, + 0x002d, 0xffff, 0x01a4, 0x2392, 0x23ae, 0x23be, 0x23d1, 0x23d8, + 0x01c7, 0x23e2, 0x23f2, 0x2411, 0x2427, 0x2440, 0x000d, 0x0050, + // Entry 3C280 - 3C2BF + 0xffff, 0x0b42, 0x0b49, 0x0b53, 0x0b63, 0x0b70, 0x0b77, 0x0b81, + 0x0b8b, 0x0b92, 0x0b9c, 0x0bac, 0x0bb9, 0x000d, 0x002d, 0xffff, + 0x01a4, 0x2392, 0x2459, 0x23be, 0x2469, 0x2470, 0x01c7, 0x23e2, + 0x23f2, 0x2411, 0x2427, 0x2440, 0x0003, 0x007b, 0x008a, 0x0099, + 0x000d, 0x002d, 0xffff, 0x01a4, 0x2392, 0x2459, 0x23be, 0x2469, + 0x2470, 0x01c7, 0x23e2, 0x23f2, 0x2411, 0x2427, 0x2440, 0x000d, + 0x0050, 0xffff, 0x0b42, 0x0bc6, 0x0bd3, 0x0b63, 0x0be3, 0x0bea, + 0x0b81, 0x0b8b, 0x0b92, 0x0b9c, 0x0bac, 0x0bb9, 0x000d, 0x002d, + // Entry 3C2C0 - 3C2FF + 0xffff, 0x01a4, 0x2392, 0x247a, 0x23be, 0x248a, 0x2491, 0x01c7, + 0x23e2, 0x23f2, 0x2411, 0x2427, 0x2440, 0x0002, 0x00ab, 0x00d5, + 0x0005, 0x00b1, 0x00ba, 0x00cc, 0x0000, 0x00c3, 0x0007, 0x0050, + 0x0bf4, 0x0bfe, 0x0c08, 0x0c18, 0x0c22, 0x0c2f, 0x0c3f, 0x0007, + 0x000c, 0x0143, 0x4e4f, 0x4e3d, 0x0255, 0x025c, 0x4e5d, 0x4e64, + 0x0007, 0x0050, 0x0bf4, 0x0bfe, 0x0c08, 0x0c18, 0x0c22, 0x0c2f, + 0x0c3f, 0x0007, 0x0050, 0x0c49, 0x0c5c, 0x0c6f, 0x0c88, 0x0c9b, + 0x0cb1, 0x0cca, 0x0005, 0x00db, 0x00e4, 0x00f6, 0x0000, 0x00ed, + // Entry 3C300 - 3C33F + 0x0007, 0x0050, 0x0bf4, 0x0bfe, 0x0c08, 0x0c18, 0x0c22, 0x0c2f, + 0x0c3f, 0x0007, 0x000c, 0x0143, 0x4e4f, 0x4e3d, 0x0255, 0x025c, + 0x4e5d, 0x4e64, 0x0007, 0x0050, 0x0bf4, 0x0bfe, 0x0c08, 0x0c18, + 0x0c22, 0x0c2f, 0x0c3f, 0x0007, 0x0050, 0x0c49, 0x0c5c, 0x0c6f, + 0x0c88, 0x0c9b, 0x0cb1, 0x0cca, 0x0002, 0x0102, 0x011b, 0x0003, + 0x0106, 0x010d, 0x0114, 0x0005, 0x0050, 0xffff, 0x0cdd, 0x0cfa, + 0x0d1a, 0x0d3a, 0x0005, 0x004b, 0xffff, 0x0104, 0x0108, 0x010c, + 0x0110, 0x0005, 0x0050, 0xffff, 0x0cdd, 0x0cfa, 0x0d1a, 0x0d3a, + // Entry 3C340 - 3C37F + 0x0003, 0x011f, 0x0126, 0x012d, 0x0005, 0x0050, 0xffff, 0x0cdd, + 0x0cfa, 0x0d1a, 0x0d3a, 0x0005, 0x004b, 0xffff, 0x0104, 0x0108, + 0x010c, 0x0110, 0x0005, 0x0050, 0xffff, 0x0cdd, 0x0cfa, 0x0d1a, + 0x0d3a, 0x0002, 0x0137, 0x01ad, 0x0003, 0x013b, 0x0161, 0x0187, + 0x000a, 0x0149, 0x014f, 0x0146, 0x0152, 0x0155, 0x015b, 0x015e, + 0x014c, 0x0000, 0x0158, 0x0001, 0x0050, 0x0d54, 0x0001, 0x002d, + 0x03db, 0x0001, 0x004b, 0x0467, 0x0001, 0x002d, 0x03f7, 0x0001, + 0x0050, 0x0d6a, 0x0001, 0x0050, 0x0d7a, 0x0001, 0x0050, 0x0d90, + // Entry 3C380 - 3C3BF + 0x0001, 0x0050, 0x0d9d, 0x0001, 0x002d, 0x0424, 0x000a, 0x016f, + 0x0175, 0x016c, 0x0178, 0x017b, 0x0181, 0x0184, 0x0172, 0x0000, + 0x017e, 0x0001, 0x0050, 0x0d54, 0x0001, 0x002d, 0x03db, 0x0001, + 0x004b, 0x0467, 0x0001, 0x002d, 0x03f7, 0x0001, 0x0050, 0x0d6a, + 0x0001, 0x0050, 0x0d7a, 0x0001, 0x0050, 0x0d90, 0x0001, 0x0050, + 0x0d9d, 0x0001, 0x002d, 0x0424, 0x000a, 0x0195, 0x019b, 0x0192, + 0x019e, 0x01a1, 0x01a7, 0x01aa, 0x0198, 0x0000, 0x01a4, 0x0001, + 0x0050, 0x0d54, 0x0001, 0x002d, 0x03db, 0x0001, 0x004b, 0x0467, + // Entry 3C3C0 - 3C3FF + 0x0001, 0x002d, 0x03f7, 0x0001, 0x0050, 0x0d6a, 0x0001, 0x0050, + 0x0d7a, 0x0001, 0x0050, 0x0d90, 0x0001, 0x0050, 0x0d9d, 0x0001, + 0x002d, 0x0424, 0x0003, 0x01b1, 0x01d7, 0x01fd, 0x000a, 0x01bf, + 0x01c5, 0x01bc, 0x01c8, 0x01cb, 0x01d1, 0x01d4, 0x01c2, 0x0000, + 0x01ce, 0x0001, 0x0050, 0x0d54, 0x0001, 0x002d, 0x03db, 0x0001, + 0x004b, 0x0467, 0x0001, 0x002d, 0x03f7, 0x0001, 0x0050, 0x0d6a, + 0x0001, 0x0050, 0x0d7a, 0x0001, 0x0050, 0x0d90, 0x0001, 0x0050, + 0x0d9d, 0x0001, 0x002d, 0x0424, 0x000a, 0x01e5, 0x01eb, 0x01e2, + // Entry 3C400 - 3C43F + 0x01ee, 0x01f1, 0x01f7, 0x01fa, 0x01e8, 0x0000, 0x01f4, 0x0001, + 0x0050, 0x0d54, 0x0001, 0x002d, 0x03db, 0x0001, 0x004b, 0x0467, + 0x0001, 0x002d, 0x03f7, 0x0001, 0x0050, 0x0d6a, 0x0001, 0x0050, + 0x0d7a, 0x0001, 0x0050, 0x0d90, 0x0001, 0x0050, 0x0d9d, 0x0001, + 0x002d, 0x0424, 0x000a, 0x020b, 0x0211, 0x0208, 0x0214, 0x0217, + 0x021d, 0x0220, 0x020e, 0x0000, 0x021a, 0x0001, 0x0050, 0x0d54, + 0x0001, 0x002d, 0x03db, 0x0001, 0x004b, 0x0467, 0x0001, 0x002d, + 0x03f7, 0x0001, 0x0050, 0x0d6a, 0x0001, 0x0050, 0x0d7a, 0x0001, + // Entry 3C440 - 3C47F + 0x0050, 0x0d90, 0x0001, 0x0050, 0x0d9d, 0x0001, 0x002d, 0x0424, + 0x0003, 0x0232, 0x0000, 0x0227, 0x0002, 0x022a, 0x022e, 0x0002, + 0x0050, 0x0db0, 0x0de9, 0x0002, 0x0050, 0x0dca, 0x0df3, 0x0002, + 0x0235, 0x0239, 0x0002, 0x0050, 0x0db0, 0x0de9, 0x0002, 0x0050, + 0x0dca, 0x0df3, 0x0004, 0x024b, 0x0245, 0x0242, 0x0248, 0x0001, + 0x0000, 0x04fc, 0x0001, 0x0000, 0x050b, 0x0001, 0x0000, 0x0514, + 0x0001, 0x0020, 0x035e, 0x0004, 0x025c, 0x0256, 0x0253, 0x0259, + 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, + // Entry 3C480 - 3C4BF + 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, 0x026d, 0x0267, 0x0264, + 0x026a, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0001, 0x0272, 0x0001, + 0x0274, 0x0003, 0x0000, 0x0000, 0x0278, 0x000d, 0x002d, 0xffff, + 0x04d1, 0x249b, 0x24a5, 0x24b2, 0x24bf, 0x24c9, 0x24d6, 0x24ec, + 0x24fc, 0x057c, 0x2506, 0x2516, 0x0042, 0x02ca, 0x02cf, 0x02d4, + 0x02d9, 0x02f0, 0x0302, 0x0314, 0x032b, 0x033d, 0x034f, 0x0366, + 0x0378, 0x038a, 0x03a5, 0x03bb, 0x03d1, 0x03d6, 0x03db, 0x03e0, + // Entry 3C4C0 - 3C4FF + 0x03f9, 0x040b, 0x041d, 0x0422, 0x0427, 0x042c, 0x0431, 0x0436, + 0x043b, 0x0440, 0x0445, 0x044a, 0x045e, 0x0472, 0x0486, 0x049a, + 0x04ae, 0x04c2, 0x04d6, 0x04ea, 0x04fe, 0x0512, 0x0526, 0x053a, + 0x054e, 0x0562, 0x0576, 0x058a, 0x059e, 0x05b2, 0x05c6, 0x05da, + 0x05ee, 0x05f3, 0x05f8, 0x05fd, 0x0613, 0x0625, 0x0637, 0x064d, + 0x065f, 0x0671, 0x0687, 0x0699, 0x06ab, 0x06b0, 0x06b5, 0x0001, + 0x02cc, 0x0001, 0x003f, 0x0625, 0x0001, 0x02d1, 0x0001, 0x003f, + 0x0625, 0x0001, 0x02d6, 0x0001, 0x003f, 0x0625, 0x0003, 0x02dd, + // Entry 3C500 - 3C53F + 0x02e0, 0x02e5, 0x0001, 0x002e, 0x00e8, 0x0003, 0x0050, 0x0e07, + 0x0e1b, 0x0e2f, 0x0002, 0x02e8, 0x02ec, 0x0002, 0x0050, 0x0e4c, + 0x0e4c, 0x0002, 0x0050, 0x0e63, 0x0e63, 0x0003, 0x02f4, 0x0000, + 0x02f7, 0x0001, 0x002e, 0x00e8, 0x0002, 0x02fa, 0x02fe, 0x0002, + 0x0050, 0x0e4c, 0x0e4c, 0x0002, 0x0050, 0x0e63, 0x0e63, 0x0003, + 0x0306, 0x0000, 0x0309, 0x0001, 0x002e, 0x00e8, 0x0002, 0x030c, + 0x0310, 0x0002, 0x0050, 0x0e4c, 0x0e4c, 0x0002, 0x0050, 0x0e63, + 0x0e63, 0x0003, 0x0318, 0x031b, 0x0320, 0x0001, 0x0050, 0x0e7e, + // Entry 3C540 - 3C57F + 0x0003, 0x0050, 0x0e8b, 0x0eae, 0x0ec2, 0x0002, 0x0323, 0x0327, + 0x0002, 0x0050, 0x0ef7, 0x0edf, 0x0002, 0x0050, 0x0f0d, 0x0f0d, + 0x0003, 0x032f, 0x0000, 0x0332, 0x0001, 0x0050, 0x0e7e, 0x0002, + 0x0335, 0x0339, 0x0002, 0x0050, 0x0ef7, 0x0ef7, 0x0002, 0x0050, + 0x0f0d, 0x0f0d, 0x0003, 0x0341, 0x0000, 0x0344, 0x0001, 0x0050, + 0x0e7e, 0x0002, 0x0347, 0x034b, 0x0002, 0x0050, 0x0ef7, 0x0ef7, + 0x0002, 0x0050, 0x0f0d, 0x0f0d, 0x0003, 0x0353, 0x0356, 0x035b, + 0x0001, 0x004b, 0x0c52, 0x0003, 0x0050, 0x0f27, 0x0f3e, 0x0f55, + // Entry 3C580 - 3C5BF + 0x0002, 0x035e, 0x0362, 0x0002, 0x0050, 0x0f75, 0x0f75, 0x0002, + 0x0050, 0x0f8f, 0x0f8f, 0x0003, 0x036a, 0x0000, 0x036d, 0x0001, + 0x004b, 0x0c52, 0x0002, 0x0370, 0x0374, 0x0002, 0x0050, 0x0f75, + 0x0f75, 0x0002, 0x0050, 0x0f8f, 0x0f8f, 0x0003, 0x037c, 0x0000, + 0x037f, 0x0001, 0x004b, 0x0c52, 0x0002, 0x0382, 0x0386, 0x0002, + 0x0050, 0x0f75, 0x0f75, 0x0002, 0x0050, 0x0f8f, 0x0f8f, 0x0004, + 0x038f, 0x0392, 0x0397, 0x03a2, 0x0001, 0x0050, 0x0fb3, 0x0003, + 0x0050, 0x0fc3, 0x0fda, 0x0ff1, 0x0002, 0x039a, 0x039e, 0x0002, + // Entry 3C5C0 - 3C5FF + 0x0050, 0x100e, 0x100e, 0x0002, 0x0050, 0x1028, 0x1028, 0x0001, + 0x0050, 0x104c, 0x0004, 0x03aa, 0x0000, 0x03ad, 0x03b8, 0x0001, + 0x0050, 0x0fb3, 0x0002, 0x03b0, 0x03b4, 0x0002, 0x0050, 0x100e, + 0x100e, 0x0002, 0x0050, 0x1028, 0x1028, 0x0001, 0x0050, 0x1066, + 0x0004, 0x03c0, 0x0000, 0x03c3, 0x03ce, 0x0001, 0x0050, 0x0fb3, + 0x0002, 0x03c6, 0x03ca, 0x0002, 0x0050, 0x100e, 0x100e, 0x0002, + 0x0050, 0x1028, 0x1028, 0x0001, 0x0050, 0x1066, 0x0001, 0x03d3, + 0x0001, 0x0050, 0x1081, 0x0001, 0x03d8, 0x0001, 0x0050, 0x1081, + // Entry 3C600 - 3C63F + 0x0001, 0x03dd, 0x0001, 0x0050, 0x1081, 0x0003, 0x03e4, 0x03e7, + 0x03ee, 0x0001, 0x0050, 0x10a7, 0x0005, 0x0050, 0x10c1, 0x10ce, + 0x10d5, 0x10b1, 0x10e2, 0x0002, 0x03f1, 0x03f5, 0x0002, 0x0050, + 0x10f2, 0x10f2, 0x0002, 0x0050, 0x1106, 0x1106, 0x0003, 0x03fd, + 0x0000, 0x0400, 0x0001, 0x0050, 0x10a7, 0x0002, 0x0403, 0x0407, + 0x0002, 0x0050, 0x10f2, 0x10f2, 0x0002, 0x0050, 0x1106, 0x1106, + 0x0003, 0x040f, 0x0000, 0x0412, 0x0001, 0x0050, 0x10a7, 0x0002, + 0x0415, 0x0419, 0x0002, 0x0050, 0x10f2, 0x10f2, 0x0002, 0x0050, + // Entry 3C640 - 3C67F + 0x1106, 0x1106, 0x0001, 0x041f, 0x0001, 0x0050, 0x1124, 0x0001, + 0x0424, 0x0001, 0x0050, 0x1124, 0x0001, 0x0429, 0x0001, 0x0050, + 0x1124, 0x0001, 0x042e, 0x0001, 0x0050, 0x1141, 0x0001, 0x0433, + 0x0001, 0x0050, 0x1141, 0x0001, 0x0438, 0x0001, 0x0050, 0x1141, + 0x0001, 0x043d, 0x0001, 0x0050, 0x1161, 0x0001, 0x0442, 0x0001, + 0x0050, 0x1161, 0x0001, 0x0447, 0x0001, 0x0050, 0x1161, 0x0003, + 0x0000, 0x044e, 0x0453, 0x0003, 0x0050, 0x1190, 0x11aa, 0x11c4, + 0x0002, 0x0456, 0x045a, 0x0002, 0x0050, 0x1204, 0x11e7, 0x0002, + // Entry 3C680 - 3C6BF + 0x0050, 0x1250, 0x122a, 0x0003, 0x0000, 0x0462, 0x0467, 0x0003, + 0x0050, 0x1190, 0x11aa, 0x11c4, 0x0002, 0x046a, 0x046e, 0x0002, + 0x0050, 0x1204, 0x1204, 0x0002, 0x0050, 0x1250, 0x1250, 0x0003, + 0x0000, 0x0476, 0x047b, 0x0003, 0x0050, 0x1190, 0x11aa, 0x11c4, + 0x0002, 0x047e, 0x0482, 0x0002, 0x0050, 0x1204, 0x1204, 0x0002, + 0x0050, 0x1250, 0x1250, 0x0003, 0x0000, 0x048a, 0x048f, 0x0003, + 0x0050, 0x1280, 0x129a, 0x12b4, 0x0002, 0x0492, 0x0496, 0x0002, + 0x0050, 0x12d7, 0x12d7, 0x0002, 0x0050, 0x1324, 0x12fd, 0x0003, + // Entry 3C6C0 - 3C6FF + 0x0000, 0x049e, 0x04a3, 0x0003, 0x0050, 0x1280, 0x129a, 0x12b4, + 0x0002, 0x04a6, 0x04aa, 0x0002, 0x0050, 0x12d7, 0x12d7, 0x0002, + 0x0050, 0x1324, 0x12fd, 0x0003, 0x0000, 0x04b2, 0x04b7, 0x0003, + 0x0050, 0x1280, 0x129a, 0x12b4, 0x0002, 0x04ba, 0x04be, 0x0002, + 0x0050, 0x12d7, 0x12d7, 0x0002, 0x0050, 0x1354, 0x12fd, 0x0003, + 0x0000, 0x04c6, 0x04cb, 0x0003, 0x0050, 0x1383, 0x13a0, 0x13bd, + 0x0002, 0x04ce, 0x04d2, 0x0002, 0x0050, 0x1403, 0x13e3, 0x0002, + 0x0050, 0x1456, 0x142c, 0x0003, 0x0000, 0x04da, 0x04df, 0x0003, + // Entry 3C700 - 3C73F + 0x0050, 0x1383, 0x13a0, 0x13bd, 0x0002, 0x04e2, 0x04e6, 0x0002, + 0x0050, 0x1403, 0x13e3, 0x0002, 0x0050, 0x1456, 0x142c, 0x0003, + 0x0000, 0x04ee, 0x04f3, 0x0003, 0x0050, 0x1383, 0x13a0, 0x13bd, + 0x0002, 0x04f6, 0x04fa, 0x0002, 0x0050, 0x1403, 0x13e3, 0x0002, + 0x0050, 0x1456, 0x142c, 0x0003, 0x0000, 0x0502, 0x0507, 0x0003, + 0x0050, 0x1489, 0x14a3, 0x14bd, 0x0002, 0x050a, 0x050e, 0x0002, + 0x0050, 0x14fd, 0x14e0, 0x0002, 0x0050, 0x1550, 0x1529, 0x0003, + 0x0000, 0x0516, 0x051b, 0x0003, 0x0050, 0x1489, 0x14a3, 0x14bd, + // Entry 3C740 - 3C77F + 0x0002, 0x051e, 0x0522, 0x0002, 0x0050, 0x14fd, 0x14e0, 0x0002, + 0x0050, 0x1550, 0x1529, 0x0003, 0x0000, 0x052a, 0x052f, 0x0003, + 0x0050, 0x1489, 0x14a3, 0x14bd, 0x0002, 0x0532, 0x0536, 0x0002, + 0x0050, 0x14fd, 0x14e0, 0x0002, 0x0050, 0x1550, 0x1529, 0x0003, + 0x0000, 0x053e, 0x0543, 0x0003, 0x0050, 0x1580, 0x159d, 0x15ba, + 0x0002, 0x0546, 0x054a, 0x0002, 0x0050, 0x1600, 0x15e0, 0x0002, + 0x0050, 0x1653, 0x1629, 0x0003, 0x0000, 0x0552, 0x0557, 0x0003, + 0x0050, 0x1580, 0x159d, 0x15ba, 0x0002, 0x055a, 0x055e, 0x0002, + // Entry 3C780 - 3C7BF + 0x0050, 0x1600, 0x15e0, 0x0002, 0x0050, 0x1653, 0x1629, 0x0003, + 0x0000, 0x0566, 0x056b, 0x0003, 0x0050, 0x1580, 0x159d, 0x15ba, + 0x0002, 0x056e, 0x0572, 0x0002, 0x0050, 0x1600, 0x15e0, 0x0002, + 0x0050, 0x1653, 0x1629, 0x0003, 0x0000, 0x057a, 0x057f, 0x0003, + 0x0050, 0x1686, 0x16a6, 0x16c6, 0x0002, 0x0582, 0x0586, 0x0002, + 0x0050, 0x1712, 0x16ef, 0x0002, 0x0050, 0x176b, 0x173e, 0x0003, + 0x0000, 0x058e, 0x0593, 0x0003, 0x0050, 0x1686, 0x16a6, 0x16c6, + 0x0002, 0x0596, 0x059a, 0x0002, 0x0050, 0x1712, 0x16ef, 0x0002, + // Entry 3C7C0 - 3C7FF + 0x0050, 0x176b, 0x173e, 0x0003, 0x0000, 0x05a2, 0x05a7, 0x0003, + 0x0050, 0x1686, 0x16a6, 0x16c6, 0x0002, 0x05aa, 0x05ae, 0x0002, + 0x0050, 0x1712, 0x16ef, 0x0002, 0x0050, 0x176b, 0x173e, 0x0003, + 0x0000, 0x05b6, 0x05bb, 0x0003, 0x0050, 0x17a1, 0x17bb, 0x17d5, + 0x0002, 0x05be, 0x05c2, 0x0002, 0x0050, 0x1815, 0x17f8, 0x0002, + 0x0050, 0x1862, 0x183b, 0x0003, 0x0000, 0x05ca, 0x05cf, 0x0003, + 0x0050, 0x17a1, 0x17bb, 0x17d5, 0x0002, 0x05d2, 0x05d6, 0x0002, + 0x0050, 0x1815, 0x17f8, 0x0002, 0x0050, 0x1862, 0x183b, 0x0003, + // Entry 3C800 - 3C83F + 0x0000, 0x05de, 0x05e3, 0x0003, 0x0050, 0x17a1, 0x17bb, 0x17d5, + 0x0002, 0x05e6, 0x05ea, 0x0002, 0x0050, 0x1815, 0x17f8, 0x0002, + 0x0050, 0x1862, 0x183b, 0x0001, 0x05f0, 0x0001, 0x0050, 0x1892, + 0x0001, 0x05f5, 0x0001, 0x0050, 0x1892, 0x0001, 0x05fa, 0x0001, + 0x0050, 0x1892, 0x0003, 0x0601, 0x0604, 0x0608, 0x0001, 0x0050, + 0x18c6, 0x0002, 0x0050, 0xffff, 0x18d6, 0x0002, 0x060b, 0x060f, + 0x0002, 0x0050, 0x18ed, 0x18ed, 0x0002, 0x0050, 0x1907, 0x1907, + 0x0003, 0x0617, 0x0000, 0x061a, 0x0001, 0x0050, 0x18c6, 0x0002, + // Entry 3C840 - 3C87F + 0x061d, 0x0621, 0x0002, 0x0050, 0x18ed, 0x18ed, 0x0002, 0x0050, + 0x1907, 0x1907, 0x0003, 0x0629, 0x0000, 0x062c, 0x0001, 0x0050, + 0x18c6, 0x0002, 0x062f, 0x0633, 0x0002, 0x0050, 0x18ed, 0x18ed, + 0x0002, 0x0050, 0x1907, 0x1907, 0x0003, 0x063b, 0x063e, 0x0642, + 0x0001, 0x0050, 0x192b, 0x0002, 0x0050, 0xffff, 0x193b, 0x0002, + 0x0645, 0x0649, 0x0002, 0x0050, 0x195b, 0x195b, 0x0002, 0x0050, + 0x1975, 0x1975, 0x0003, 0x0651, 0x0000, 0x0654, 0x0001, 0x0050, + 0x192b, 0x0002, 0x0657, 0x065b, 0x0002, 0x0050, 0x195b, 0x195b, + // Entry 3C880 - 3C8BF + 0x0002, 0x0050, 0x1975, 0x1975, 0x0003, 0x0663, 0x0000, 0x0666, + 0x0001, 0x0050, 0x192b, 0x0002, 0x0669, 0x066d, 0x0002, 0x0050, + 0x195b, 0x195b, 0x0002, 0x0050, 0x1975, 0x1975, 0x0003, 0x0675, + 0x0678, 0x067c, 0x0001, 0x0050, 0x1999, 0x0002, 0x0050, 0xffff, + 0x19af, 0x0002, 0x067f, 0x0683, 0x0002, 0x0050, 0x19bf, 0x19bf, + 0x0002, 0x0050, 0x19df, 0x19df, 0x0003, 0x068b, 0x0000, 0x068e, + 0x0001, 0x0050, 0x1999, 0x0002, 0x0691, 0x0695, 0x0002, 0x0050, + 0x19bf, 0x19bf, 0x0002, 0x0050, 0x19df, 0x19df, 0x0003, 0x069d, + // Entry 3C8C0 - 3C8FF + 0x0000, 0x06a0, 0x0001, 0x0050, 0x1999, 0x0002, 0x06a3, 0x06a7, + 0x0002, 0x0050, 0x19bf, 0x19bf, 0x0002, 0x0050, 0x19df, 0x19df, + 0x0001, 0x06ad, 0x0001, 0x002e, 0x0fc2, 0x0001, 0x06b2, 0x0001, + 0x002e, 0x0fa2, 0x0001, 0x06b7, 0x0001, 0x002e, 0x0fa2, 0x0004, + 0x06bf, 0x06c4, 0x06c9, 0x06d8, 0x0003, 0x0000, 0x1dc7, 0x39fb, + 0x3adb, 0x0003, 0x002e, 0x0fd8, 0x52c5, 0x52d0, 0x0002, 0x0000, + 0x06cc, 0x0003, 0x0000, 0x06d3, 0x06d0, 0x0001, 0x0050, 0x1a09, + 0x0003, 0x0050, 0xffff, 0x1a39, 0x1a7e, 0x0002, 0x0000, 0x06db, + // Entry 3C900 - 3C93F + 0x0003, 0x0775, 0x080b, 0x06df, 0x0094, 0x0050, 0x1aa5, 0x1ad1, + 0x1b0d, 0x1b40, 0x1ba6, 0x1c61, 0x1cde, 0x1d70, 0x1df3, 0x1e64, + 0x1ede, 0xffff, 0x1f5e, 0x1fc3, 0x2034, 0x20f7, 0x21cd, 0x2274, + 0x2328, 0x2430, 0x2545, 0x261f, 0x26e0, 0x2778, 0x2810, 0x288e, + 0x28ab, 0x28f7, 0x297b, 0x29db, 0x2a55, 0x2a9f, 0x2b04, 0x2b78, + 0x2be0, 0x2c5e, 0x2c8e, 0x2ce1, 0x2d8c, 0x2e2d, 0x2e8d, 0x2ea7, + 0x2ee7, 0x2f3b, 0x2fac, 0x300e, 0x30f4, 0x3192, 0x3208, 0x32cf, + 0x338a, 0x33ea, 0x341d, 0x3476, 0x349f, 0x34e8, 0x355a, 0x358a, + // Entry 3C940 - 3C97F + 0x35ff, 0x370c, 0x37d4, 0x37f8, 0x3842, 0x38cd, 0x3947, 0x39ad, + 0x39d7, 0x3a07, 0x3a30, 0x3a78, 0x3ab7, 0x3b13, 0x3b8a, 0x3c2b, + 0x3c99, 0xffff, 0x3ce7, 0x3d20, 0x3d7c, 0x3ddc, 0x3e28, 0x3eb8, + 0x3ee4, 0x3f2c, 0x3f8e, 0x3fde, 0x4050, 0x4070, 0x4096, 0x40b9, + 0x4100, 0x416c, 0x41cc, 0x42bd, 0x437c, 0x4416, 0x447c, 0x449f, + 0x44b9, 0x450c, 0x45dc, 0x469e, 0x4737, 0x474e, 0x47c4, 0x48b4, + 0x4967, 0x49fc, 0x4a80, 0x4a9a, 0x4af1, 0x4b80, 0x4c03, 0x4c7b, + 0x4cfe, 0x4dc4, 0x4de4, 0x4e01, 0x4e24, 0x4e47, 0x4e84, 0xffff, + // Entry 3C980 - 3C9BF + 0x4f10, 0x4f5e, 0x4f87, 0x4fb7, 0x4fe4, 0x5017, 0x503a, 0x5057, + 0x5091, 0x50e5, 0x510e, 0x5148, 0x51ae, 0x51fa, 0x52a3, 0x52e0, + 0x5381, 0x5431, 0x54a3, 0x5501, 0x55c3, 0x564d, 0x566d, 0x568e, + 0x56e2, 0x5786, 0x0094, 0x0050, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1b73, 0x1c3e, 0x1cc1, 0x1d4a, 0x1dd6, 0x1e47, 0x1eb8, 0xffff, + 0x1f44, 0x1fac, 0x200b, 0x20b8, 0x21a7, 0x224b, 0x22e0, 0x23d2, + 0x2506, 0x25dd, 0x26bd, 0x2758, 0x27ea, 0xffff, 0xffff, 0x28ce, + 0xffff, 0x29b7, 0xffff, 0x2a85, 0x2aed, 0x2b64, 0x2bba, 0xffff, + // Entry 3C9C0 - 3C9FF + 0xffff, 0x2cb5, 0x2d6b, 0x2e0a, 0xffff, 0xffff, 0xffff, 0x2f14, + 0xffff, 0x2fcf, 0x30be, 0xffff, 0x31cf, 0x3296, 0x3373, 0xffff, + 0xffff, 0xffff, 0xffff, 0x34c8, 0xffff, 0xffff, 0x35b7, 0x36c1, + 0xffff, 0xffff, 0x3815, 0x38b6, 0x392d, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x3af9, 0x3b61, 0x3c0e, 0x3c7f, 0xffff, + 0xffff, 0xffff, 0x3d59, 0xffff, 0x3df9, 0xffff, 0xffff, 0x3f08, + 0xffff, 0x3fbe, 0xffff, 0xffff, 0xffff, 0xffff, 0x40e3, 0xffff, + 0x4186, 0x427e, 0x4355, 0x43fc, 0xffff, 0xffff, 0xffff, 0x44d6, + // Entry 3CA00 - 3CA3F + 0x45aa, 0x465a, 0xffff, 0xffff, 0x477e, 0x4882, 0x494a, 0x49d3, + 0xffff, 0xffff, 0x4ace, 0x4b69, 0x4be0, 0xffff, 0x4ca8, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x4e64, 0xffff, 0x4ef6, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x5074, 0xffff, + 0xffff, 0x512e, 0xffff, 0x51c5, 0xffff, 0x52c0, 0x5352, 0x5411, + 0xffff, 0x54cf, 0x5597, 0xffff, 0xffff, 0xffff, 0x56c2, 0x5754, + 0x0094, 0x0050, 0xffff, 0xffff, 0xffff, 0xffff, 0x1be6, 0x1c91, + 0x1d08, 0x1da3, 0x1e1d, 0x1e8e, 0x1f11, 0xffff, 0x1f85, 0x1fe7, + // Entry 3CA40 - 3CA7F + 0x206a, 0x2143, 0x2200, 0x22aa, 0x237d, 0x249b, 0x2591, 0x266e, + 0x2710, 0x27a5, 0x2843, 0xffff, 0xffff, 0x292d, 0xffff, 0x2a0c, + 0xffff, 0x2ac6, 0x2b28, 0x2b99, 0x2c13, 0xffff, 0xffff, 0x2d1a, + 0x2dba, 0x2e5d, 0xffff, 0xffff, 0xffff, 0x2f6f, 0xffff, 0x305a, + 0x3137, 0xffff, 0x324e, 0x3315, 0x33ae, 0xffff, 0xffff, 0xffff, + 0xffff, 0x3515, 0xffff, 0xffff, 0x3654, 0x3764, 0xffff, 0xffff, + 0x387c, 0x38f1, 0x396e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x3b3a, 0x3bc0, 0x3c55, 0x3cc0, 0xffff, 0xffff, 0xffff, + // Entry 3CA80 - 3CABF + 0x3dac, 0xffff, 0x3e64, 0xffff, 0xffff, 0x3f5d, 0xffff, 0x400b, + 0xffff, 0xffff, 0xffff, 0xffff, 0x412a, 0xffff, 0x4225, 0x4309, + 0x43b0, 0x443d, 0xffff, 0xffff, 0xffff, 0x454f, 0x461b, 0x46ec, + 0xffff, 0xffff, 0x4817, 0x48f3, 0x4991, 0x4a32, 0xffff, 0xffff, + 0x4b21, 0x4ba4, 0x4c33, 0xffff, 0x4d61, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x4eb1, 0xffff, 0x4f37, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x50bb, 0xffff, 0xffff, 0x516f, + 0xffff, 0x523c, 0xffff, 0x530d, 0x53bd, 0x545e, 0xffff, 0x5540, + // Entry 3CAC0 - 3CAFF + 0x55fc, 0xffff, 0xffff, 0xffff, 0x570f, 0x57c5, 0x0003, 0x0004, + 0x0000, 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000d, 0x0007, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0015, 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, + 0x0001, 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, 0x0002, + 0x04fe, 0x0001, 0x0002, 0x0508, 0x0004, 0x0000, 0x0000, 0x0000, + 0x002b, 0x0001, 0x002d, 0x0003, 0x0000, 0x0000, 0x0031, 0x0042, + 0x000b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 3CB00 - 3CB3F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0000, 0x0003, 0x0004, 0x0fb6, 0x1437, 0x0012, + // Entry 3CB40 - 3CB7F + 0x0017, 0x0044, 0x03f7, 0x0481, 0x0812, 0x08be, 0x08d7, 0x0902, + 0x0b0d, 0x0ba3, 0x0c21, 0x0000, 0x0000, 0x0000, 0x0000, 0x0cb3, + 0x0f08, 0x0f86, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, + 0x0033, 0x0000, 0x9006, 0x0003, 0x0029, 0x002e, 0x0024, 0x0001, + 0x0026, 0x0001, 0x0000, 0x0000, 0x0001, 0x002b, 0x0001, 0x0000, + 0x0000, 0x0001, 0x0030, 0x0001, 0x0000, 0x0000, 0x0004, 0x0041, + 0x003b, 0x0038, 0x003e, 0x0001, 0x0002, 0x0000, 0x0001, 0x0002, + 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0026, 0x13a4, 0x000a, + // Entry 3CB80 - 3CBBF + 0x004f, 0x0000, 0x0000, 0x0000, 0x0000, 0x03d5, 0x0000, 0x03e6, + 0x00b4, 0x00c8, 0x0002, 0x0052, 0x0083, 0x0003, 0x0056, 0x0065, + 0x0074, 0x000d, 0x0051, 0xffff, 0x0000, 0x0006, 0x000c, 0x0012, + 0x0018, 0x001e, 0x0024, 0x002a, 0x0030, 0x0036, 0x003d, 0x0044, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, + 0x0051, 0xffff, 0x004b, 0x0053, 0x005b, 0x0063, 0x006b, 0x0073, + 0x007b, 0x0083, 0x008b, 0x0093, 0x009c, 0x00a5, 0x0003, 0x0087, + // Entry 3CBC0 - 3CBFF + 0x0096, 0x00a5, 0x000d, 0x0051, 0xffff, 0x0000, 0x0006, 0x000c, + 0x0012, 0x0018, 0x001e, 0x0024, 0x002a, 0x0030, 0x0036, 0x003d, + 0x0044, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, + 0x000d, 0x0051, 0xffff, 0x004b, 0x0053, 0x005b, 0x0063, 0x006b, + 0x0073, 0x007b, 0x0083, 0x008b, 0x0093, 0x009c, 0x00a5, 0x0003, + 0x00b8, 0x00c3, 0x00bd, 0x0003, 0x0000, 0x004e, 0x0055, 0x004e, + 0x0004, 0x0000, 0xffff, 0xffff, 0xffff, 0x004e, 0x0003, 0x0000, + // Entry 3CC00 - 3CC3F + 0x004e, 0x0055, 0x004e, 0x0006, 0x00cf, 0x0102, 0x01c5, 0x0288, + 0x02df, 0x03a2, 0x0001, 0x00d1, 0x0003, 0x00d5, 0x00e4, 0x00f3, + 0x000d, 0x0000, 0xffff, 0x005a, 0x005d, 0x0062, 0x0066, 0x006a, + 0x2c10, 0x2784, 0x0075, 0x0079, 0x007e, 0x221e, 0x0085, 0x000d, + 0x0000, 0xffff, 0x005a, 0x005d, 0x0062, 0x0066, 0x006a, 0x2c10, + 0x2784, 0x0075, 0x0079, 0x007e, 0x221e, 0x0085, 0x000d, 0x0000, + 0xffff, 0x005a, 0x005d, 0x0062, 0x0066, 0x006a, 0x2c10, 0x2784, + 0x0075, 0x0079, 0x007e, 0x221e, 0x0085, 0x0001, 0x0104, 0x0003, + // Entry 3CC40 - 3CC7F + 0x0108, 0x0147, 0x0186, 0x003d, 0x0000, 0xffff, 0x01bd, 0x01c4, + 0x01cc, 0x01d5, 0x01de, 0x01e6, 0x01ec, 0x01f4, 0x01fc, 0x0205, + 0x020d, 0x0214, 0x021b, 0x0223, 0x022d, 0x0234, 0x023b, 0x0245, + 0x024c, 0x0253, 0x025b, 0x0264, 0x026b, 0x0273, 0x027c, 0x0282, + 0x028a, 0x0293, 0x029b, 0x02a4, 0x02ab, 0x02b2, 0x02b9, 0x02c3, + 0x02cc, 0x02d2, 0x02d9, 0x02e1, 0x02ea, 0x02f2, 0x02fa, 0x0303, + 0x0309, 0x0311, 0x031a, 0x0322, 0x0329, 0x0331, 0x0339, 0x0340, + 0x0349, 0x0351, 0x0358, 0x0362, 0x036a, 0x0370, 0x0377, 0x0381, + // Entry 3CC80 - 3CCBF + 0x0389, 0x0390, 0x003d, 0x0000, 0xffff, 0x01bd, 0x01c4, 0x01cc, + 0x01d5, 0x01de, 0x01e6, 0x01ec, 0x01f4, 0x01fc, 0x0205, 0x020d, + 0x0214, 0x021b, 0x0223, 0x022d, 0x0234, 0x023b, 0x0245, 0x024c, + 0x0253, 0x025b, 0x0264, 0x026b, 0x0273, 0x027c, 0x0282, 0x028a, + 0x0293, 0x029b, 0x02a4, 0x02ab, 0x02b2, 0x02b9, 0x02c3, 0x02cc, + 0x02d2, 0x02d9, 0x02e1, 0x02ea, 0x02f2, 0x02fa, 0x0303, 0x0309, + 0x0311, 0x031a, 0x0322, 0x0329, 0x0331, 0x0339, 0x0340, 0x0349, + 0x0351, 0x0358, 0x0362, 0x036a, 0x0370, 0x0377, 0x0381, 0x0389, + // Entry 3CCC0 - 3CCFF + 0x0390, 0x003d, 0x0000, 0xffff, 0x01bd, 0x01c4, 0x01cc, 0x01d5, + 0x01de, 0x01e6, 0x01ec, 0x01f4, 0x01fc, 0x0205, 0x020d, 0x0214, + 0x021b, 0x0223, 0x022d, 0x0234, 0x023b, 0x0245, 0x024c, 0x0253, + 0x025b, 0x0264, 0x026b, 0x0273, 0x027c, 0x0282, 0x028a, 0x0293, + 0x029b, 0x02a4, 0x02ab, 0x02b2, 0x02b9, 0x02c3, 0x02cc, 0x02d2, + 0x02d9, 0x02e1, 0x02ea, 0x02f2, 0x02fa, 0x0303, 0x0309, 0x0311, + 0x031a, 0x0322, 0x0329, 0x0331, 0x0339, 0x0340, 0x0349, 0x0351, + 0x0358, 0x0362, 0x036a, 0x0370, 0x0377, 0x0381, 0x0389, 0x0390, + // Entry 3CD00 - 3CD3F + 0x0001, 0x01c7, 0x0003, 0x01cb, 0x020a, 0x0249, 0x003d, 0x0000, + 0xffff, 0x01bd, 0x01c4, 0x01cc, 0x01d5, 0x01de, 0x01e6, 0x01ec, + 0x01f4, 0x01fc, 0x0205, 0x020d, 0x0214, 0x021b, 0x0223, 0x022d, + 0x0234, 0x023b, 0x0245, 0x024c, 0x0253, 0x025b, 0x0264, 0x026b, + 0x0273, 0x027c, 0x0282, 0x028a, 0x0293, 0x029b, 0x02a4, 0x02ab, + 0x02b2, 0x02b9, 0x02c3, 0x02cc, 0x02d2, 0x02d9, 0x02e1, 0x02ea, + 0x02f2, 0x02fa, 0x0303, 0x0309, 0x0311, 0x031a, 0x0322, 0x0329, + 0x0331, 0x0339, 0x0340, 0x0349, 0x0351, 0x0358, 0x0362, 0x036a, + // Entry 3CD40 - 3CD7F + 0x0370, 0x0377, 0x0381, 0x0389, 0x0390, 0x003d, 0x0000, 0xffff, + 0x01bd, 0x01c4, 0x01cc, 0x01d5, 0x01de, 0x01e6, 0x01ec, 0x01f4, + 0x01fc, 0x0205, 0x020d, 0x0214, 0x021b, 0x0223, 0x022d, 0x0234, + 0x023b, 0x0245, 0x024c, 0x0253, 0x025b, 0x0264, 0x026b, 0x0273, + 0x027c, 0x0282, 0x028a, 0x0293, 0x029b, 0x02a4, 0x02ab, 0x02b2, + 0x02b9, 0x02c3, 0x02cc, 0x02d2, 0x02d9, 0x02e1, 0x02ea, 0x02f2, + 0x02fa, 0x0303, 0x0309, 0x0311, 0x031a, 0x0322, 0x0329, 0x0331, + 0x0339, 0x0340, 0x0349, 0x0351, 0x0358, 0x0362, 0x036a, 0x0370, + // Entry 3CD80 - 3CDBF + 0x0377, 0x0381, 0x0389, 0x0390, 0x003d, 0x0000, 0xffff, 0x01bd, + 0x01c4, 0x01cc, 0x01d5, 0x01de, 0x01e6, 0x01ec, 0x01f4, 0x01fc, + 0x0205, 0x020d, 0x0214, 0x021b, 0x0223, 0x022d, 0x0234, 0x023b, + 0x0245, 0x024c, 0x0253, 0x025b, 0x0264, 0x026b, 0x0273, 0x027c, + 0x0282, 0x028a, 0x0293, 0x029b, 0x02a4, 0x02ab, 0x02b2, 0x02b9, + 0x02c3, 0x02cc, 0x02d2, 0x02d9, 0x02e1, 0x02ea, 0x02f2, 0x02fa, + 0x0303, 0x0309, 0x0311, 0x031a, 0x0322, 0x0329, 0x0331, 0x0339, + 0x0340, 0x0349, 0x0351, 0x0358, 0x0362, 0x036a, 0x0370, 0x0377, + // Entry 3CDC0 - 3CDFF + 0x0381, 0x0389, 0x0390, 0x0001, 0x028a, 0x0003, 0x028e, 0x02a9, + 0x02c4, 0x0019, 0x0051, 0xffff, 0x00ae, 0x00c1, 0x00cc, 0x00de, + 0x00e8, 0x00f8, 0x0102, 0x0115, 0x011f, 0x012b, 0x0135, 0x013a, + 0x013f, 0x0153, 0x0166, 0x0171, 0x017c, 0x0187, 0x0194, 0x01a8, + 0x01b6, 0x01c3, 0x01ce, 0x01d3, 0x0019, 0x0051, 0xffff, 0x00ae, + 0x00c1, 0x00cc, 0x00de, 0x00e8, 0x00f8, 0x0102, 0x0115, 0x011f, + 0x012b, 0x0135, 0x013a, 0x013f, 0x0153, 0x0166, 0x0171, 0x017c, + 0x0187, 0x0194, 0x01a8, 0x01b6, 0x01c3, 0x01ce, 0x01d3, 0x0019, + // Entry 3CE00 - 3CE3F + 0x0051, 0xffff, 0x00ae, 0x00c1, 0x00cc, 0x00de, 0x00e8, 0x00f8, + 0x0102, 0x0115, 0x011f, 0x012b, 0x0135, 0x013a, 0x013f, 0x0153, + 0x0166, 0x0171, 0x017c, 0x0187, 0x0194, 0x01a8, 0x01b6, 0x01c3, + 0x01ce, 0x01d3, 0x0001, 0x02e1, 0x0003, 0x02e5, 0x0324, 0x0363, + 0x003d, 0x0000, 0xffff, 0x01bd, 0x01c4, 0x01cc, 0x01d5, 0x01de, + 0x01e6, 0x01ec, 0x01f4, 0x01fc, 0x0205, 0x020d, 0x0214, 0x021b, + 0x0223, 0x022d, 0x0234, 0x023b, 0x0245, 0x024c, 0x0253, 0x025b, + 0x0264, 0x026b, 0x0273, 0x027c, 0x0282, 0x028a, 0x0293, 0x029b, + // Entry 3CE40 - 3CE7F + 0x02a4, 0x02ab, 0x02b2, 0x02b9, 0x02c3, 0x02cc, 0x02d2, 0x02d9, + 0x02e1, 0x02ea, 0x02f2, 0x02fa, 0x0303, 0x0309, 0x0311, 0x031a, + 0x0322, 0x0329, 0x0331, 0x0339, 0x0340, 0x0349, 0x0351, 0x0358, + 0x0362, 0x036a, 0x0370, 0x0377, 0x0381, 0x0389, 0x0390, 0x003d, + 0x0000, 0xffff, 0x01bd, 0x01c4, 0x01cc, 0x01d5, 0x01de, 0x01e6, + 0x01ec, 0x01f4, 0x01fc, 0x0205, 0x020d, 0x0214, 0x021b, 0x0223, + 0x022d, 0x0234, 0x023b, 0x0245, 0x024c, 0x0253, 0x025b, 0x0264, + 0x026b, 0x0273, 0x027c, 0x0282, 0x028a, 0x0293, 0x029b, 0x02a4, + // Entry 3CE80 - 3CEBF + 0x02ab, 0x02b2, 0x02b9, 0x02c3, 0x02cc, 0x02d2, 0x02d9, 0x02e1, + 0x02ea, 0x02f2, 0x02fa, 0x0303, 0x0309, 0x0311, 0x031a, 0x0322, + 0x0329, 0x0331, 0x0339, 0x0340, 0x0349, 0x0351, 0x0358, 0x0362, + 0x036a, 0x0370, 0x0377, 0x0381, 0x0389, 0x0390, 0x003d, 0x0000, + 0xffff, 0x01bd, 0x01c4, 0x01cc, 0x01d5, 0x01de, 0x01e6, 0x01ec, + 0x01f4, 0x01fc, 0x0205, 0x020d, 0x0214, 0x021b, 0x0223, 0x022d, + 0x0234, 0x023b, 0x0245, 0x024c, 0x0253, 0x025b, 0x0264, 0x026b, + 0x0273, 0x027c, 0x0282, 0x028a, 0x0293, 0x029b, 0x02a4, 0x02ab, + // Entry 3CEC0 - 3CEFF + 0x02b2, 0x02b9, 0x02c3, 0x02cc, 0x02d2, 0x02d9, 0x02e1, 0x02ea, + 0x02f2, 0x02fa, 0x0303, 0x0309, 0x0311, 0x031a, 0x0322, 0x0329, + 0x0331, 0x0339, 0x0340, 0x0349, 0x0351, 0x0358, 0x0362, 0x036a, + 0x0370, 0x0377, 0x0381, 0x0389, 0x0390, 0x0001, 0x03a4, 0x0003, + 0x03a8, 0x03b7, 0x03c6, 0x000d, 0x001c, 0xffff, 0x00cd, 0x2834, + 0x2837, 0x283e, 0x2845, 0x284b, 0x2851, 0x2857, 0x285c, 0x2860, + 0x2826, 0x2865, 0x000d, 0x001c, 0xffff, 0x00cd, 0x2834, 0x2837, + 0x283e, 0x2845, 0x284b, 0x2851, 0x2857, 0x285c, 0x2860, 0x2826, + // Entry 3CF00 - 3CF3F + 0x2865, 0x000d, 0x001c, 0xffff, 0x00cd, 0x2834, 0x2837, 0x283e, + 0x2845, 0x284b, 0x2851, 0x2857, 0x285c, 0x2860, 0x2826, 0x2865, + 0x0004, 0x03e3, 0x03dd, 0x03da, 0x03e0, 0x0001, 0x0025, 0x00d3, + 0x0001, 0x0010, 0x0026, 0x0001, 0x0010, 0x002f, 0x0001, 0x001f, + 0x0579, 0x0004, 0x03f4, 0x03ee, 0x03eb, 0x03f1, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0008, 0x0400, 0x0000, 0x0000, 0x0000, 0x046b, + 0x0000, 0x0000, 0x9006, 0x0002, 0x0403, 0x0437, 0x0003, 0x0407, + // Entry 3CF40 - 3CF7F + 0x0417, 0x0427, 0x000e, 0x0026, 0xffff, 0x1508, 0x150c, 0x1512, + 0x1518, 0x151f, 0x36cf, 0x36d6, 0x1535, 0x36df, 0x1548, 0x1552, + 0x1557, 0x155d, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, + 0x3a0c, 0x0422, 0x000e, 0x0026, 0xffff, 0x1508, 0x150c, 0x1512, + 0x1518, 0x151f, 0x36cf, 0x36d6, 0x1535, 0x36df, 0x1548, 0x1552, + 0x1557, 0x155d, 0x0003, 0x043b, 0x044b, 0x045b, 0x000e, 0x0026, + 0xffff, 0x1508, 0x150c, 0x1512, 0x1518, 0x151f, 0x36cf, 0x36d6, + // Entry 3CF80 - 3CFBF + 0x1535, 0x36df, 0x1548, 0x1552, 0x1557, 0x155d, 0x000e, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x0026, + 0xffff, 0x1508, 0x150c, 0x1512, 0x1518, 0x151f, 0x36cf, 0x36d6, + 0x1535, 0x36df, 0x1548, 0x1552, 0x1557, 0x155d, 0x0003, 0x0475, + 0x047b, 0x046f, 0x0001, 0x0471, 0x0002, 0x0000, 0x0425, 0x042a, + 0x0001, 0x0477, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x047d, + 0x0002, 0x0000, 0x0425, 0x042a, 0x000a, 0x048c, 0x0000, 0x0000, + // Entry 3CFC0 - 3CFFF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x04f1, 0x0505, 0x0002, + 0x048f, 0x04c0, 0x0003, 0x0493, 0x04a2, 0x04b1, 0x000d, 0x0051, + 0xffff, 0x0000, 0x0006, 0x000c, 0x0012, 0x0018, 0x001e, 0x0024, + 0x002a, 0x0030, 0x0036, 0x003d, 0x0044, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0051, 0xffff, 0x004b, + 0x0053, 0x005b, 0x0063, 0x006b, 0x0073, 0x007b, 0x0083, 0x008b, + 0x0093, 0x009c, 0x00a5, 0x0003, 0x04c4, 0x04d3, 0x04e2, 0x000d, + // Entry 3D000 - 3D03F + 0x0051, 0xffff, 0x0000, 0x0006, 0x000c, 0x0012, 0x0018, 0x001e, + 0x0024, 0x002a, 0x0030, 0x0036, 0x003d, 0x0044, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0051, 0xffff, + 0x004b, 0x0053, 0x005b, 0x0063, 0x006b, 0x0073, 0x007b, 0x0083, + 0x008b, 0x0093, 0x009c, 0x00a5, 0x0003, 0x04f5, 0x0500, 0x04fa, + 0x0003, 0x0000, 0x004e, 0x0055, 0x004e, 0x0004, 0x0000, 0xffff, + 0xffff, 0xffff, 0x004e, 0x0003, 0x0000, 0x004e, 0x0055, 0x004e, + // Entry 3D040 - 3D07F + 0x0006, 0x050c, 0x053f, 0x0602, 0x06c5, 0x071c, 0x07df, 0x0001, + 0x050e, 0x0003, 0x0512, 0x0521, 0x0530, 0x000d, 0x0000, 0xffff, + 0x005a, 0x005d, 0x0062, 0x0066, 0x006a, 0x2c10, 0x2784, 0x0075, + 0x0079, 0x007e, 0x221e, 0x0085, 0x000d, 0x0000, 0xffff, 0x005a, + 0x005d, 0x0062, 0x0066, 0x006a, 0x2c10, 0x2784, 0x0075, 0x0079, + 0x007e, 0x221e, 0x0085, 0x000d, 0x0000, 0xffff, 0x005a, 0x005d, + 0x0062, 0x0066, 0x006a, 0x2c10, 0x2784, 0x0075, 0x0079, 0x007e, + 0x221e, 0x0085, 0x0001, 0x0541, 0x0003, 0x0545, 0x0584, 0x05c3, + // Entry 3D080 - 3D0BF + 0x003d, 0x0000, 0xffff, 0x01bd, 0x01c4, 0x01cc, 0x01d5, 0x01de, + 0x01e6, 0x01ec, 0x01f4, 0x01fc, 0x0205, 0x020d, 0x0214, 0x021b, + 0x0223, 0x022d, 0x0234, 0x023b, 0x0245, 0x024c, 0x0253, 0x025b, + 0x0264, 0x026b, 0x0273, 0x027c, 0x0282, 0x028a, 0x0293, 0x029b, + 0x02a4, 0x02ab, 0x02b2, 0x02b9, 0x02c3, 0x02cc, 0x02d2, 0x02d9, + 0x02e1, 0x02ea, 0x02f2, 0x02fa, 0x0303, 0x0309, 0x0311, 0x031a, + 0x0322, 0x0329, 0x0331, 0x0339, 0x0340, 0x0349, 0x0351, 0x0358, + 0x0362, 0x036a, 0x0370, 0x0377, 0x0381, 0x0389, 0x0390, 0x003d, + // Entry 3D0C0 - 3D0FF + 0x0000, 0xffff, 0x01bd, 0x01c4, 0x01cc, 0x01d5, 0x01de, 0x01e6, + 0x01ec, 0x01f4, 0x01fc, 0x0205, 0x020d, 0x0214, 0x021b, 0x0223, + 0x022d, 0x0234, 0x023b, 0x0245, 0x024c, 0x0253, 0x025b, 0x0264, + 0x026b, 0x0273, 0x027c, 0x0282, 0x028a, 0x0293, 0x029b, 0x02a4, + 0x02ab, 0x02b2, 0x02b9, 0x02c3, 0x02cc, 0x02d2, 0x02d9, 0x02e1, + 0x02ea, 0x02f2, 0x02fa, 0x0303, 0x0309, 0x0311, 0x031a, 0x0322, + 0x0329, 0x0331, 0x0339, 0x0340, 0x0349, 0x0351, 0x0358, 0x0362, + 0x036a, 0x0370, 0x0377, 0x0381, 0x0389, 0x0390, 0x003d, 0x0000, + // Entry 3D100 - 3D13F + 0xffff, 0x01bd, 0x01c4, 0x01cc, 0x01d5, 0x01de, 0x01e6, 0x01ec, + 0x01f4, 0x01fc, 0x0205, 0x020d, 0x0214, 0x021b, 0x0223, 0x022d, + 0x0234, 0x023b, 0x0245, 0x024c, 0x0253, 0x025b, 0x0264, 0x026b, + 0x0273, 0x027c, 0x0282, 0x028a, 0x0293, 0x029b, 0x02a4, 0x02ab, + 0x02b2, 0x02b9, 0x02c3, 0x02cc, 0x02d2, 0x02d9, 0x02e1, 0x02ea, + 0x02f2, 0x02fa, 0x0303, 0x0309, 0x0311, 0x031a, 0x0322, 0x0329, + 0x0331, 0x0339, 0x0340, 0x0349, 0x0351, 0x0358, 0x0362, 0x036a, + 0x0370, 0x0377, 0x0381, 0x0389, 0x0390, 0x0001, 0x0604, 0x0003, + // Entry 3D140 - 3D17F + 0x0608, 0x0647, 0x0686, 0x003d, 0x0000, 0xffff, 0x01bd, 0x01c4, + 0x01cc, 0x01d5, 0x01de, 0x01e6, 0x01ec, 0x01f4, 0x01fc, 0x0205, + 0x020d, 0x0214, 0x021b, 0x0223, 0x022d, 0x0234, 0x023b, 0x0245, + 0x024c, 0x0253, 0x025b, 0x0264, 0x026b, 0x0273, 0x027c, 0x0282, + 0x028a, 0x0293, 0x029b, 0x02a4, 0x02ab, 0x02b2, 0x02b9, 0x02c3, + 0x02cc, 0x02d2, 0x02d9, 0x02e1, 0x02ea, 0x02f2, 0x02fa, 0x0303, + 0x0309, 0x0311, 0x031a, 0x0322, 0x0329, 0x0331, 0x0339, 0x0340, + 0x0349, 0x0351, 0x0358, 0x0362, 0x036a, 0x0370, 0x0377, 0x0381, + // Entry 3D180 - 3D1BF + 0x0389, 0x0390, 0x003d, 0x0000, 0xffff, 0x01bd, 0x01c4, 0x01cc, + 0x01d5, 0x01de, 0x01e6, 0x01ec, 0x01f4, 0x01fc, 0x0205, 0x020d, + 0x0214, 0x021b, 0x0223, 0x022d, 0x0234, 0x023b, 0x0245, 0x024c, + 0x0253, 0x025b, 0x0264, 0x026b, 0x0273, 0x027c, 0x0282, 0x028a, + 0x0293, 0x029b, 0x02a4, 0x02ab, 0x02b2, 0x02b9, 0x02c3, 0x02cc, + 0x02d2, 0x02d9, 0x02e1, 0x02ea, 0x02f2, 0x02fa, 0x0303, 0x0309, + 0x0311, 0x031a, 0x0322, 0x0329, 0x0331, 0x0339, 0x0340, 0x0349, + 0x0351, 0x0358, 0x0362, 0x036a, 0x0370, 0x0377, 0x0381, 0x0389, + // Entry 3D1C0 - 3D1FF + 0x0390, 0x003d, 0x0000, 0xffff, 0x01bd, 0x01c4, 0x01cc, 0x01d5, + 0x01de, 0x01e6, 0x01ec, 0x01f4, 0x01fc, 0x0205, 0x020d, 0x0214, + 0x021b, 0x0223, 0x022d, 0x0234, 0x023b, 0x0245, 0x024c, 0x0253, + 0x025b, 0x0264, 0x026b, 0x0273, 0x027c, 0x0282, 0x028a, 0x0293, + 0x029b, 0x02a4, 0x02ab, 0x02b2, 0x02b9, 0x02c3, 0x02cc, 0x02d2, + 0x02d9, 0x02e1, 0x02ea, 0x02f2, 0x02fa, 0x0303, 0x0309, 0x0311, + 0x031a, 0x0322, 0x0329, 0x0331, 0x0339, 0x0340, 0x0349, 0x0351, + 0x0358, 0x0362, 0x036a, 0x0370, 0x0377, 0x0381, 0x0389, 0x0390, + // Entry 3D200 - 3D23F + 0x0001, 0x06c7, 0x0003, 0x06cb, 0x06e6, 0x0701, 0x0019, 0x0051, + 0xffff, 0x00ae, 0x00c1, 0x00cc, 0x00de, 0x00e8, 0x00f8, 0x0102, + 0x0115, 0x011f, 0x012b, 0x0135, 0x013a, 0x013f, 0x0153, 0x0166, + 0x0171, 0x017c, 0x0187, 0x0194, 0x01a8, 0x01b6, 0x01c3, 0x01ce, + 0x01d3, 0x0019, 0x0051, 0xffff, 0x00ae, 0x00c1, 0x00cc, 0x00de, + 0x00e8, 0x00f8, 0x0102, 0x0115, 0x011f, 0x012b, 0x0135, 0x013a, + 0x013f, 0x0153, 0x0166, 0x0171, 0x017c, 0x0187, 0x0194, 0x01a8, + 0x01b6, 0x01c3, 0x01ce, 0x01d3, 0x0019, 0x0051, 0xffff, 0x00ae, + // Entry 3D240 - 3D27F + 0x00c1, 0x00cc, 0x00de, 0x00e8, 0x00f8, 0x0102, 0x0115, 0x011f, + 0x012b, 0x0135, 0x013a, 0x013f, 0x0153, 0x0166, 0x0171, 0x017c, + 0x0187, 0x0194, 0x01a8, 0x01b6, 0x01c3, 0x01ce, 0x01d3, 0x0001, + 0x071e, 0x0003, 0x0722, 0x0761, 0x07a0, 0x003d, 0x0000, 0xffff, + 0x01bd, 0x01c4, 0x01cc, 0x01d5, 0x01de, 0x01e6, 0x01ec, 0x01f4, + 0x01fc, 0x0205, 0x020d, 0x0214, 0x021b, 0x0223, 0x022d, 0x0234, + 0x023b, 0x0245, 0x024c, 0x0253, 0x025b, 0x0264, 0x026b, 0x0273, + 0x027c, 0x0282, 0x028a, 0x0293, 0x029b, 0x02a4, 0x02ab, 0x02b2, + // Entry 3D280 - 3D2BF + 0x02b9, 0x02c3, 0x02cc, 0x02d2, 0x02d9, 0x02e1, 0x02ea, 0x02f2, + 0x02fa, 0x0303, 0x0309, 0x0311, 0x031a, 0x0322, 0x0329, 0x0331, + 0x0339, 0x0340, 0x0349, 0x0351, 0x0358, 0x0362, 0x036a, 0x0370, + 0x0377, 0x0381, 0x0389, 0x0390, 0x003d, 0x0000, 0xffff, 0x01bd, + 0x01c4, 0x01cc, 0x01d5, 0x01de, 0x01e6, 0x01ec, 0x01f4, 0x01fc, + 0x0205, 0x020d, 0x0214, 0x021b, 0x0223, 0x022d, 0x0234, 0x023b, + 0x0245, 0x024c, 0x0253, 0x025b, 0x0264, 0x026b, 0x0273, 0x027c, + 0x0282, 0x028a, 0x0293, 0x029b, 0x02a4, 0x02ab, 0x02b2, 0x02b9, + // Entry 3D2C0 - 3D2FF + 0x02c3, 0x02cc, 0x02d2, 0x02d9, 0x02e1, 0x02ea, 0x02f2, 0x02fa, + 0x0303, 0x0309, 0x0311, 0x031a, 0x0322, 0x0329, 0x0331, 0x0339, + 0x0340, 0x0349, 0x0351, 0x0358, 0x0362, 0x036a, 0x0370, 0x0377, + 0x0381, 0x0389, 0x0390, 0x003d, 0x0000, 0xffff, 0x01bd, 0x01c4, + 0x01cc, 0x01d5, 0x01de, 0x01e6, 0x01ec, 0x01f4, 0x01fc, 0x0205, + 0x020d, 0x0214, 0x021b, 0x0223, 0x022d, 0x0234, 0x023b, 0x0245, + 0x024c, 0x0253, 0x025b, 0x0264, 0x026b, 0x0273, 0x027c, 0x0282, + 0x028a, 0x0293, 0x029b, 0x02a4, 0x02ab, 0x02b2, 0x02b9, 0x02c3, + // Entry 3D300 - 3D33F + 0x02cc, 0x02d2, 0x02d9, 0x02e1, 0x02ea, 0x02f2, 0x02fa, 0x0303, + 0x0309, 0x0311, 0x031a, 0x0322, 0x0329, 0x0331, 0x0339, 0x0340, + 0x0349, 0x0351, 0x0358, 0x0362, 0x036a, 0x0370, 0x0377, 0x0381, + 0x0389, 0x0390, 0x0001, 0x07e1, 0x0003, 0x07e5, 0x07f4, 0x0803, + 0x000d, 0x001c, 0xffff, 0x00cd, 0x2834, 0x2837, 0x283e, 0x2845, + 0x284b, 0x2851, 0x2857, 0x285c, 0x2860, 0x2826, 0x2865, 0x000d, + 0x001c, 0xffff, 0x00cd, 0x2834, 0x2837, 0x283e, 0x2845, 0x284b, + 0x2851, 0x2857, 0x285c, 0x2860, 0x2826, 0x2865, 0x000d, 0x001c, + // Entry 3D340 - 3D37F + 0xffff, 0x00cd, 0x2834, 0x2837, 0x283e, 0x2845, 0x284b, 0x2851, + 0x2857, 0x285c, 0x2860, 0x2826, 0x2865, 0x0008, 0x081b, 0x0000, + 0x0000, 0x0000, 0x0886, 0x089c, 0x0000, 0x08ad, 0x0002, 0x081e, + 0x0852, 0x0003, 0x0822, 0x0832, 0x0842, 0x000e, 0x0017, 0xffff, + 0x02fd, 0x2d7d, 0x2e82, 0x2e88, 0x2d91, 0x0330, 0x0339, 0x0342, + 0x2e8f, 0x0352, 0x2e96, 0x0360, 0x2da5, 0x000e, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x0017, 0xffff, + // Entry 3D380 - 3D3BF + 0x02fd, 0x2d7d, 0x2e82, 0x2e88, 0x2d91, 0x0330, 0x0339, 0x0342, + 0x2e8f, 0x0352, 0x2e96, 0x0360, 0x2da5, 0x0003, 0x0856, 0x0866, + 0x0876, 0x000e, 0x0017, 0xffff, 0x02fd, 0x2d7d, 0x2e82, 0x2e88, + 0x2d91, 0x0330, 0x0339, 0x0342, 0x2e8f, 0x0352, 0x2e96, 0x0360, + 0x2da5, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, + 0x0422, 0x000e, 0x0017, 0xffff, 0x02fd, 0x2d7d, 0x2e82, 0x2e88, + 0x2d91, 0x0330, 0x0339, 0x0342, 0x2e8f, 0x0352, 0x2e96, 0x0360, + // Entry 3D3C0 - 3D3FF + 0x2da5, 0x0003, 0x0890, 0x0896, 0x088a, 0x0001, 0x088c, 0x0002, + 0x0051, 0x01d8, 0x01e3, 0x0001, 0x0892, 0x0002, 0x0051, 0x01ee, + 0x01f4, 0x0001, 0x0898, 0x0002, 0x0051, 0x01ee, 0x01f4, 0x0004, + 0x08aa, 0x08a4, 0x08a1, 0x08a7, 0x0001, 0x0002, 0x0000, 0x0001, + 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0026, 0x13a4, + 0x0004, 0x08bb, 0x08b5, 0x08b2, 0x08b8, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x08c4, 0x0003, + // Entry 3D400 - 3D43F + 0x08cd, 0x08d2, 0x08c8, 0x0001, 0x08ca, 0x0001, 0x0051, 0x01d8, + 0x0001, 0x08cf, 0x0001, 0x0051, 0x01ee, 0x0001, 0x08d4, 0x0001, + 0x0051, 0x01ee, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x08e0, 0x0000, 0x08f1, 0x0004, 0x08ee, 0x08e8, 0x08e5, 0x08eb, + 0x0001, 0x0002, 0x0000, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, + 0x001b, 0x0001, 0x0026, 0x13a4, 0x0004, 0x08ff, 0x08f9, 0x08f6, + 0x08fc, 0x0001, 0x0026, 0x1692, 0x0001, 0x0026, 0x1692, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x090b, 0x0970, + // Entry 3D440 - 3D47F + 0x09c7, 0x09fc, 0x0ab5, 0x0ada, 0x0aeb, 0x0afc, 0x0002, 0x090e, + 0x093f, 0x0003, 0x0912, 0x0921, 0x0930, 0x000d, 0x0016, 0xffff, + 0x00a3, 0x26b4, 0x2f3a, 0x2753, 0x2f3f, 0x25ed, 0x25f2, 0x275c, + 0x25f7, 0x2761, 0x2766, 0x2f43, 0x000d, 0x0000, 0xffff, 0x257b, + 0x2b4e, 0x2b3c, 0x2b42, 0x2b3c, 0x257b, 0x257b, 0x2b42, 0x2b3a, + 0x2b50, 0x2b40, 0x2b3e, 0x000d, 0x003b, 0xffff, 0x00e5, 0x00ed, + 0x745e, 0x7464, 0x746a, 0x746e, 0x7473, 0x7478, 0x7481, 0x748b, + 0x7493, 0x749c, 0x0003, 0x0943, 0x0952, 0x0961, 0x000d, 0x0016, + // Entry 3D480 - 3D4BF + 0xffff, 0x00a3, 0x26b4, 0x2f3a, 0x2753, 0x2f48, 0x25ed, 0x25f2, + 0x275c, 0x25f7, 0x2761, 0x2766, 0x2f43, 0x000d, 0x0000, 0xffff, + 0x257b, 0x2b4e, 0x2b3c, 0x2b42, 0x2b3c, 0x257b, 0x257b, 0x2b42, + 0x2b3a, 0x2b50, 0x2b40, 0x2b3e, 0x000d, 0x003b, 0xffff, 0x00e5, + 0x00ed, 0x745e, 0x7464, 0x74a5, 0x746e, 0x7473, 0x7478, 0x7481, + 0x748b, 0x7493, 0x749c, 0x0002, 0x0973, 0x099d, 0x0005, 0x0979, + 0x0982, 0x0994, 0x0000, 0x098b, 0x0007, 0x0051, 0x01fa, 0x01fd, + 0x0200, 0x0203, 0x0206, 0x0209, 0x020c, 0x0007, 0x0000, 0x2359, + // Entry 3D4C0 - 3D4FF + 0x2b3c, 0x2b3e, 0x2151, 0x2b3e, 0x257f, 0x2359, 0x0007, 0x0051, + 0x01fa, 0x01fd, 0x0200, 0x0203, 0x0206, 0x0209, 0x020c, 0x0007, + 0x0051, 0x020f, 0x0216, 0x021e, 0x0226, 0x022f, 0x0239, 0x0241, + 0x0005, 0x09a3, 0x09ac, 0x09be, 0x0000, 0x09b5, 0x0007, 0x0051, + 0x01fa, 0x01fd, 0x0200, 0x0203, 0x0206, 0x0209, 0x020c, 0x0007, + 0x0000, 0x2359, 0x2b3c, 0x2b3e, 0x2151, 0x2b3e, 0x257f, 0x2359, + 0x0007, 0x0051, 0x01fa, 0x01fd, 0x0200, 0x0203, 0x0206, 0x0209, + 0x020c, 0x0007, 0x0051, 0x020f, 0x0216, 0x021e, 0x0226, 0x022f, + // Entry 3D500 - 3D53F + 0x0239, 0x0241, 0x0002, 0x09ca, 0x09e3, 0x0003, 0x09ce, 0x09d5, + 0x09dc, 0x0005, 0x0000, 0xffff, 0x1f17, 0x1f1a, 0x1f1d, 0x1f20, + 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, + 0x0051, 0xffff, 0x024a, 0x0256, 0x0262, 0x026e, 0x0003, 0x09e7, + 0x09ee, 0x09f5, 0x0005, 0x0000, 0xffff, 0x1f17, 0x1f1a, 0x1f1d, + 0x1f20, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x0005, 0x0051, 0xffff, 0x024a, 0x0256, 0x0262, 0x026e, 0x0002, + 0x09ff, 0x0a5a, 0x0003, 0x0a03, 0x0a20, 0x0a3d, 0x0007, 0x0a0e, + // Entry 3D540 - 3D57F + 0x0a11, 0x0a0b, 0x0a14, 0x0a17, 0x0a1a, 0x0a1d, 0x0001, 0x0051, + 0x027a, 0x0001, 0x001d, 0x050b, 0x0001, 0x001d, 0x0510, 0x0001, + 0x0051, 0x0286, 0x0001, 0x0051, 0x0294, 0x0001, 0x0051, 0x02a1, + 0x0001, 0x0051, 0x02ad, 0x0007, 0x0a2b, 0x0a2e, 0x0a28, 0x0a31, + 0x0a34, 0x0a37, 0x0a3a, 0x0001, 0x0051, 0x027a, 0x0001, 0x001d, + 0x050b, 0x0001, 0x001d, 0x0510, 0x0001, 0x0051, 0x0286, 0x0001, + 0x0051, 0x0294, 0x0001, 0x0051, 0x02a1, 0x0001, 0x0051, 0x02ad, + 0x0007, 0x0a48, 0x0a4b, 0x0a45, 0x0a4e, 0x0a51, 0x0a54, 0x0a57, + // Entry 3D580 - 3D5BF + 0x0001, 0x0051, 0x027a, 0x0001, 0x001d, 0x050b, 0x0001, 0x001d, + 0x0510, 0x0001, 0x0051, 0x0286, 0x0001, 0x0051, 0x0294, 0x0001, + 0x0051, 0x02a1, 0x0001, 0x0051, 0x02ad, 0x0003, 0x0a5e, 0x0a7b, + 0x0a98, 0x0007, 0x0a69, 0x0a6c, 0x0a66, 0x0a6f, 0x0a72, 0x0a75, + 0x0a78, 0x0001, 0x0051, 0x027a, 0x0001, 0x001d, 0x050b, 0x0001, + 0x001d, 0x0510, 0x0001, 0x0051, 0x02b9, 0x0001, 0x0000, 0x1fa5, + 0x0001, 0x0051, 0x02c1, 0x0001, 0x0051, 0x02c7, 0x0007, 0x0a86, + 0x0a89, 0x0a83, 0x0a8c, 0x0a8f, 0x0a92, 0x0a95, 0x0001, 0x0051, + // Entry 3D5C0 - 3D5FF + 0x027a, 0x0001, 0x001d, 0x050b, 0x0001, 0x001d, 0x0510, 0x0001, + 0x0051, 0x02b9, 0x0001, 0x0000, 0x1fa5, 0x0001, 0x0051, 0x02c1, + 0x0001, 0x0051, 0x02c7, 0x0007, 0x0aa3, 0x0aa6, 0x0aa0, 0x0aa9, + 0x0aac, 0x0aaf, 0x0ab2, 0x0001, 0x0051, 0x027a, 0x0001, 0x001d, + 0x050b, 0x0001, 0x001d, 0x0510, 0x0001, 0x0051, 0x02b9, 0x0001, + 0x0000, 0x1fa5, 0x0001, 0x0051, 0x02c1, 0x0001, 0x0051, 0x02c7, + 0x0003, 0x0ac4, 0x0acf, 0x0ab9, 0x0002, 0x0abc, 0x0ac0, 0x0002, + 0x0000, 0x1fb5, 0x3adf, 0x0002, 0x0051, 0x02cd, 0x02e7, 0x0002, + // Entry 3D600 - 3D63F + 0x0ac7, 0x0acb, 0x0002, 0x0050, 0x02ff, 0x030d, 0x0002, 0x0001, + 0x0005, 0x208a, 0x0002, 0x0ad2, 0x0ad6, 0x0002, 0x0001, 0x0000, + 0x000c, 0x0002, 0x0001, 0x0016, 0x208f, 0x0004, 0x0ae8, 0x0ae2, + 0x0adf, 0x0ae5, 0x0001, 0x0002, 0x0025, 0x0001, 0x0002, 0x0033, + 0x0001, 0x0002, 0x003c, 0x0001, 0x001f, 0x0579, 0x0004, 0x0af9, + 0x0af3, 0x0af0, 0x0af6, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, + 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, + 0x0b0a, 0x0b04, 0x0b01, 0x0b07, 0x0001, 0x0026, 0x1692, 0x0001, + // Entry 3D640 - 3D67F + 0x0026, 0x1692, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0006, 0x0b14, 0x0000, 0x0000, 0x0000, 0x0b7f, 0x0b92, 0x0002, + 0x0b17, 0x0b4b, 0x0003, 0x0b1b, 0x0b2b, 0x0b3b, 0x000e, 0x0026, + 0x16d0, 0x169f, 0x16a7, 0x36e7, 0x36ee, 0x16bd, 0x16c4, 0x36f4, + 0x36f9, 0x16dd, 0x36ff, 0x16e8, 0x3705, 0x16f3, 0x000e, 0x0000, + 0x003f, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x0026, + 0x16d0, 0x169f, 0x16a7, 0x36e7, 0x36ee, 0x16bd, 0x16c4, 0x36f4, + // Entry 3D680 - 3D6BF + 0x36f9, 0x16dd, 0x36ff, 0x16e8, 0x3705, 0x16f3, 0x0003, 0x0b4f, + 0x0b5f, 0x0b6f, 0x000e, 0x0026, 0x16d0, 0x169f, 0x16a7, 0x36e7, + 0x36ee, 0x16bd, 0x16c4, 0x36f4, 0x36f9, 0x16dd, 0x36ff, 0x16e8, + 0x3705, 0x16f3, 0x000e, 0x0000, 0x003f, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, + 0x3a0c, 0x0422, 0x000e, 0x0026, 0x16d0, 0x169f, 0x16a7, 0x36e7, + 0x36ee, 0x16bd, 0x16c4, 0x36f4, 0x36f9, 0x16dd, 0x36ff, 0x16e8, + 0x3705, 0x16f3, 0x0003, 0x0b88, 0x0b8d, 0x0b83, 0x0001, 0x0b85, + // Entry 3D6C0 - 3D6FF + 0x0001, 0x0000, 0x04ef, 0x0001, 0x0b8a, 0x0001, 0x0000, 0x04ef, + 0x0001, 0x0b8f, 0x0001, 0x0000, 0x04ef, 0x0004, 0x0ba0, 0x0b9a, + 0x0b97, 0x0b9d, 0x0001, 0x0002, 0x0000, 0x0001, 0x0002, 0x0010, + 0x0001, 0x0002, 0x001b, 0x0001, 0x0026, 0x13a4, 0x0005, 0x0ba9, + 0x0000, 0x0000, 0x0000, 0x0c0e, 0x0002, 0x0bac, 0x0bdd, 0x0003, + 0x0bb0, 0x0bbf, 0x0bce, 0x000d, 0x0000, 0xffff, 0x05a2, 0x2593, + 0x259d, 0x25a6, 0x25b0, 0x25ba, 0x22ec, 0x25c6, 0x05e1, 0x2300, + 0x25cf, 0x25d6, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + // Entry 3D700 - 3D73F + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, + 0x3a0c, 0x000d, 0x0000, 0xffff, 0x05a2, 0x2593, 0x259d, 0x25a6, + 0x25b0, 0x25ba, 0x22ec, 0x25c6, 0x05e1, 0x2300, 0x25cf, 0x25d6, + 0x0003, 0x0be1, 0x0bf0, 0x0bff, 0x000d, 0x0000, 0xffff, 0x05a2, + 0x2593, 0x259d, 0x25a6, 0x25b0, 0x25ba, 0x22ec, 0x25c6, 0x05e1, + 0x2300, 0x25cf, 0x25d6, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, + 0x3a09, 0x3a0c, 0x000d, 0x0000, 0xffff, 0x05a2, 0x2593, 0x259d, + // Entry 3D740 - 3D77F + 0x25a6, 0x25b0, 0x25ba, 0x22ec, 0x25c6, 0x05e1, 0x2300, 0x25cf, + 0x25d6, 0x0003, 0x0c17, 0x0c1c, 0x0c12, 0x0001, 0x0c14, 0x0001, + 0x0000, 0x0601, 0x0001, 0x0c19, 0x0001, 0x0000, 0x0601, 0x0001, + 0x0c1e, 0x0001, 0x0000, 0x0601, 0x0008, 0x0c2a, 0x0000, 0x0000, + 0x0000, 0x0c8f, 0x0ca2, 0x0000, 0x9006, 0x0002, 0x0c2d, 0x0c5e, + 0x0003, 0x0c31, 0x0c40, 0x0c4f, 0x000d, 0x0026, 0xffff, 0x16ff, + 0x3708, 0x370d, 0x3714, 0x1719, 0x1721, 0x371c, 0x172f, 0x3721, + 0x1739, 0x173f, 0x1749, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + // Entry 3D780 - 3D7BF + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, + 0x3a09, 0x3a0c, 0x000d, 0x0026, 0xffff, 0x1753, 0x3726, 0x1763, + 0x1773, 0x1784, 0x1794, 0x372c, 0x17ab, 0x3732, 0x17bd, 0x17c4, + 0x17d3, 0x0003, 0x0c62, 0x0c71, 0x0c80, 0x000d, 0x0026, 0xffff, + 0x16ff, 0x3708, 0x370d, 0x3714, 0x1719, 0x1721, 0x371c, 0x172f, + 0x3721, 0x1739, 0x173f, 0x1749, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0026, 0xffff, 0x1753, 0x3726, + // Entry 3D7C0 - 3D7FF + 0x1763, 0x1773, 0x1784, 0x1794, 0x372c, 0x17ab, 0x3732, 0x17bd, + 0x17c4, 0x17d3, 0x0003, 0x0c98, 0x0c9d, 0x0c93, 0x0001, 0x0c95, + 0x0001, 0x0026, 0x17e0, 0x0001, 0x0c9a, 0x0001, 0x0000, 0x06c8, + 0x0001, 0x0c9f, 0x0001, 0x0000, 0x06c8, 0x0004, 0x0cb0, 0x0caa, + 0x0ca7, 0x0cad, 0x0001, 0x0002, 0x0000, 0x0001, 0x0002, 0x0010, + 0x0001, 0x0002, 0x001b, 0x0001, 0x0026, 0x13a4, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0cbc, 0x0ee6, 0x0000, 0x0ef7, 0x0003, + 0x0db0, 0x0ea0, 0x0cc0, 0x0001, 0x0cc2, 0x00ec, 0x0000, 0x06cb, + // Entry 3D800 - 3D83F + 0x06dd, 0x06f1, 0x0705, 0x0719, 0x072c, 0x073e, 0x0750, 0x0762, + 0x0775, 0x0787, 0x206c, 0x2085, 0x209f, 0x20b7, 0x20cf, 0x081e, + 0x20e5, 0x0843, 0x0857, 0x086a, 0x087d, 0x0891, 0x08a3, 0x08b5, + 0x08c7, 0x20f6, 0x08ed, 0x0900, 0x0914, 0x0926, 0x093a, 0x094e, + 0x095f, 0x0972, 0x0985, 0x0999, 0x09ae, 0x09c2, 0x09d3, 0x09e6, + 0x09f7, 0x0a0b, 0x0a20, 0x0a33, 0x0a46, 0x0a58, 0x0a6a, 0x0a7b, + 0x0a8c, 0x0aa2, 0x0ab7, 0x0acc, 0x0ae1, 0x0af6, 0x0b0b, 0x0b1e, + 0x0b32, 0x0b48, 0x0b60, 0x0b77, 0x0b8d, 0x0ba2, 0x0bb6, 0x0bcb, + // Entry 3D840 - 3D87F + 0x0be1, 0x0bf6, 0x0c0b, 0x0c23, 0x0c37, 0x0c4c, 0x288f, 0x0c74, + 0x28a2, 0x0c9f, 0x0cb3, 0x0cc8, 0x0cdd, 0x2107, 0x0d07, 0x28b9, + 0x28cc, 0x0d47, 0x0d5b, 0x0d6f, 0x0d85, 0x28df, 0x0db0, 0x0dc3, + 0x0dd7, 0x0def, 0x0e04, 0x0e19, 0x2907, 0x0e43, 0x0e57, 0x0e6d, + 0x0e80, 0x0e96, 0x0eaa, 0x0ec1, 0x0ed4, 0x0ee9, 0x0efd, 0x0f12, + 0x0f26, 0x0f39, 0x0f50, 0x0f64, 0x0f7a, 0x0f8f, 0x0fa4, 0x2945, + 0x2958, 0x0fe6, 0x0ffd, 0x296e, 0x1028, 0x103c, 0x1051, 0x1066, + 0x107a, 0x108e, 0x2985, 0x10b8, 0x10cf, 0x10e3, 0x211a, 0x1110, + // Entry 3D880 - 3D8BF + 0x1124, 0x1139, 0x114d, 0x1163, 0x1178, 0x118d, 0x299b, 0x11ba, + 0x29ae, 0x11e7, 0x11fb, 0x120f, 0x1224, 0x1238, 0x124d, 0x1262, + 0x1276, 0x29c1, 0x12a0, 0x12b5, 0x12ca, 0x12df, 0x29d5, 0x1308, + 0x29eb, 0x1335, 0x134b, 0x24f6, 0x1374, 0x1388, 0x139e, 0x13b4, + 0x13ca, 0x13e0, 0x13f4, 0x140b, 0x141f, 0x1435, 0x144b, 0x145f, + 0x1473, 0x1489, 0x149c, 0x14b3, 0x14c8, 0x2a00, 0x14f5, 0x150b, + 0x1522, 0x1538, 0x154f, 0x1565, 0x157b, 0x158f, 0x15a4, 0x15bb, + 0x15d0, 0x15e4, 0x15f8, 0x160d, 0x1621, 0x2a13, 0x164d, 0x1661, + // Entry 3D8C0 - 3D8FF + 0x1676, 0x168a, 0x16a0, 0x16b6, 0x2a28, 0x2a3c, 0x16f7, 0x170c, + 0x2a4f, 0x2a64, 0x174a, 0x175e, 0x1773, 0x2a7b, 0x179b, 0x17b1, + 0x17c7, 0x17db, 0x17f2, 0x1808, 0x181d, 0x1832, 0x2a8f, 0x250a, + 0x1874, 0x2aa2, 0x189e, 0x18b3, 0x18c8, 0x18dd, 0x18f1, 0x1906, + 0x191b, 0x192f, 0x1942, 0x2ab4, 0x196d, 0x1983, 0x1997, 0x2ac7, + 0x2acd, 0x2ad5, 0x2adc, 0x0001, 0x0db2, 0x00ec, 0x0000, 0x06cb, + 0x06dd, 0x06f1, 0x0705, 0x0719, 0x072c, 0x073e, 0x0750, 0x0762, + 0x0775, 0x0787, 0x206c, 0x2085, 0x209f, 0x20b7, 0x20cf, 0x081e, + // Entry 3D900 - 3D93F + 0x20e5, 0x0843, 0x0857, 0x086a, 0x087d, 0x0891, 0x08a3, 0x08b5, + 0x08c7, 0x20f6, 0x08ed, 0x0900, 0x0914, 0x0926, 0x093a, 0x094e, + 0x095f, 0x0972, 0x0985, 0x0999, 0x09ae, 0x09c2, 0x09d3, 0x09e6, + 0x09f7, 0x0a0b, 0x0a20, 0x0a33, 0x0a46, 0x0a58, 0x0a6a, 0x0a7b, + 0x0a8c, 0x0aa2, 0x0ab7, 0x0acc, 0x0ae1, 0x0af6, 0x0b0b, 0x0b1e, + 0x0b32, 0x0b48, 0x0b60, 0x0b77, 0x0b8d, 0x0ba2, 0x0bb6, 0x0bcb, + 0x0be1, 0x0bf6, 0x0c0b, 0x0c23, 0x0c37, 0x0c4c, 0x288f, 0x0c74, + 0x28a2, 0x0c9f, 0x0cb3, 0x0cc8, 0x0cdd, 0x2107, 0x0d07, 0x28b9, + // Entry 3D940 - 3D97F + 0x28cc, 0x0d47, 0x0d5b, 0x0d6f, 0x0d85, 0x28df, 0x0db0, 0x0dc3, + 0x0dd7, 0x0def, 0x0e04, 0x0e19, 0x2907, 0x0e43, 0x0e57, 0x0e6d, + 0x0e80, 0x0e96, 0x0eaa, 0x0ec1, 0x0ed4, 0x0ee9, 0x0efd, 0x0f12, + 0x0f26, 0x0f39, 0x0f50, 0x0f64, 0x0f7a, 0x0f8f, 0x0fa4, 0x2945, + 0x2958, 0x0fe6, 0x0ffd, 0x296e, 0x1028, 0x103c, 0x1051, 0x1066, + 0x107a, 0x108e, 0x2985, 0x10b8, 0x10cf, 0x10e3, 0x211a, 0x1110, + 0x1124, 0x1139, 0x114d, 0x1163, 0x1178, 0x118d, 0x299b, 0x11ba, + 0x29ae, 0x11e7, 0x11fb, 0x120f, 0x1224, 0x1238, 0x124d, 0x1262, + // Entry 3D980 - 3D9BF + 0x1276, 0x29c1, 0x12a0, 0x12b5, 0x12ca, 0x12df, 0x29d5, 0x1308, + 0x29eb, 0x1335, 0x134b, 0x24f6, 0x1374, 0x1388, 0x139e, 0x13b4, + 0x13ca, 0x13e0, 0x13f4, 0x140b, 0x141f, 0x1435, 0x144b, 0x145f, + 0x1473, 0x1489, 0x149c, 0x14b3, 0x14c8, 0x2a00, 0x14f5, 0x150b, + 0x1522, 0x1538, 0x154f, 0x1565, 0x157b, 0x158f, 0x15a4, 0x15bb, + 0x15d0, 0x15e4, 0x15f8, 0x160d, 0x1621, 0x2a13, 0x164d, 0x1661, + 0x1676, 0x168a, 0x16a0, 0x16b6, 0x2a28, 0x2a3c, 0x16f7, 0x170c, + 0x2a4f, 0x2a64, 0x174a, 0x175e, 0x1773, 0x2a7b, 0x179b, 0x17b1, + // Entry 3D9C0 - 3D9FF + 0x17c7, 0x17db, 0x17f2, 0x1808, 0x181d, 0x1832, 0x2a8f, 0x250a, + 0x1874, 0x2aa2, 0x189e, 0x18b3, 0x18c8, 0x18dd, 0x18f1, 0x1906, + 0x191b, 0x192f, 0x1942, 0x2ab4, 0x196d, 0x1983, 0x1997, 0x2ac7, + 0x2acd, 0x2ad5, 0x2adc, 0x0001, 0x0ea2, 0x0042, 0x0000, 0x06cb, + 0x06dd, 0x06f1, 0x0705, 0x0719, 0x072c, 0x073e, 0x0750, 0x0762, + 0x0775, 0x0787, 0x206c, 0x2085, 0x07d2, 0x20b7, 0x20cf, 0x081e, + 0x20e5, 0x0843, 0x0857, 0x086a, 0x087d, 0x0891, 0x08a3, 0x08b5, + 0x08c7, 0x20f6, 0x08ed, 0x0900, 0x0914, 0x0926, 0x093a, 0x094e, + // Entry 3DA00 - 3DA3F + 0x095f, 0x0972, 0x0985, 0x0999, 0x09ae, 0x09c2, 0x09d3, 0x09e6, + 0x09f7, 0x0a0b, 0x0a20, 0x0a33, 0x0a46, 0x0a58, 0x0a6a, 0x0a7b, + 0x0a8c, 0x0aa2, 0x0ab7, 0x0acc, 0x0ae1, 0x0af6, 0x0b0b, 0x0b1e, + 0x0b32, 0x0b48, 0x0b60, 0x0b77, 0x0b8d, 0x0ba2, 0x0bb6, 0x0bcb, + 0x0be1, 0x0004, 0x0ef4, 0x0eee, 0x0eeb, 0x0ef1, 0x0001, 0x0002, + 0x0000, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, + 0x0026, 0x13a4, 0x0004, 0x0f05, 0x0eff, 0x0efc, 0x0f02, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + // Entry 3DA40 - 3DA7F + 0x0001, 0x0000, 0x03c6, 0x0005, 0x0f0e, 0x0000, 0x0000, 0x0000, + 0x0f73, 0x0002, 0x0f11, 0x0f42, 0x0003, 0x0f15, 0x0f24, 0x0f33, + 0x000d, 0x0000, 0xffff, 0x19c9, 0x19d3, 0x19df, 0x2566, 0x19eb, + 0x19f2, 0x256a, 0x1a01, 0x1a06, 0x2575, 0x23c6, 0x1a16, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0000, + 0xffff, 0x19c9, 0x19d3, 0x19df, 0x2566, 0x19eb, 0x19f2, 0x256a, + 0x1a01, 0x1a06, 0x2575, 0x23c6, 0x1a16, 0x0003, 0x0f46, 0x0f55, + // Entry 3DA80 - 3DABF + 0x0f64, 0x000d, 0x0000, 0xffff, 0x19c9, 0x19d3, 0x19df, 0x2566, + 0x19eb, 0x19f2, 0x256a, 0x1a01, 0x1a06, 0x2575, 0x23c6, 0x1a16, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, + 0x0000, 0xffff, 0x19c9, 0x19d3, 0x19df, 0x2566, 0x19eb, 0x19f2, + 0x256a, 0x1a01, 0x1a06, 0x2575, 0x23c6, 0x1a16, 0x0003, 0x0f7c, + 0x0f81, 0x0f77, 0x0001, 0x0f79, 0x0001, 0x0000, 0x1a1d, 0x0001, + 0x0f7e, 0x0001, 0x0000, 0x1a1d, 0x0001, 0x0f83, 0x0001, 0x0000, + // Entry 3DAC0 - 3DAFF + 0x1a1d, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0f8f, 0x0fa5, + 0x0000, 0x9006, 0x0003, 0x0f99, 0x0f9f, 0x0f93, 0x0001, 0x0f95, + 0x0002, 0x0051, 0x02fa, 0x0306, 0x0001, 0x0f9b, 0x0002, 0x0051, + 0x02fa, 0x0306, 0x0001, 0x0fa1, 0x0002, 0x0051, 0x02fa, 0x0306, + 0x0004, 0x0fb3, 0x0fad, 0x0faa, 0x0fb0, 0x0001, 0x0002, 0x0000, + 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0026, + 0x13a4, 0x0042, 0x0ff9, 0x0ffe, 0x1003, 0x1008, 0x101f, 0x1036, + 0x104d, 0x1064, 0x107b, 0x1092, 0x10a9, 0x10c0, 0x10d7, 0x10f2, + // Entry 3DB00 - 3DB3F + 0x110d, 0x1128, 0x112d, 0x1132, 0x1137, 0x1150, 0x1169, 0x1182, + 0x1187, 0x118c, 0x1191, 0x1196, 0x119b, 0x11a0, 0x11a5, 0x11aa, + 0x11af, 0x11c3, 0x11d7, 0x11eb, 0x11ff, 0x1213, 0x1227, 0x123b, + 0x124f, 0x1263, 0x1277, 0x128b, 0x129f, 0x12b3, 0x12c7, 0x12db, + 0x12ef, 0x1303, 0x1317, 0x132b, 0x133f, 0x1353, 0x1358, 0x135d, + 0x1362, 0x1378, 0x138e, 0x13a4, 0x13ba, 0x13d0, 0x13e6, 0x13fc, + 0x1412, 0x1428, 0x142d, 0x1432, 0x0001, 0x0ffb, 0x0001, 0x0051, + 0x030d, 0x0001, 0x1000, 0x0001, 0x0051, 0x030d, 0x0001, 0x1005, + // Entry 3DB40 - 3DB7F + 0x0001, 0x0051, 0x030d, 0x0003, 0x100c, 0x100f, 0x1014, 0x0001, + 0x0001, 0x0044, 0x0003, 0x0051, 0x0316, 0x0321, 0x032a, 0x0002, + 0x1017, 0x101b, 0x0002, 0x0051, 0x0337, 0x0337, 0x0002, 0x0051, + 0x0345, 0x0345, 0x0003, 0x1023, 0x1026, 0x102b, 0x0001, 0x0051, + 0x0356, 0x0003, 0x0051, 0x0316, 0x0321, 0x032a, 0x0002, 0x102e, + 0x1032, 0x0002, 0x0051, 0x0337, 0x0337, 0x0002, 0x0051, 0x0345, + 0x0345, 0x0003, 0x103a, 0x103d, 0x1042, 0x0001, 0x0051, 0x0356, + 0x0003, 0x0051, 0x0316, 0x0321, 0x032a, 0x0002, 0x1045, 0x1049, + // Entry 3DB80 - 3DBBF + 0x0002, 0x0051, 0x0337, 0x0337, 0x0002, 0x0051, 0x0345, 0x0345, + 0x0003, 0x1051, 0x1054, 0x1059, 0x0001, 0x0001, 0x0091, 0x0003, + 0x0051, 0x0359, 0x0368, 0x0375, 0x0002, 0x105c, 0x1060, 0x0002, + 0x0051, 0x0398, 0x0386, 0x0002, 0x0051, 0x03c0, 0x03ab, 0x0003, + 0x1068, 0x106b, 0x1070, 0x0001, 0x0001, 0x0091, 0x0003, 0x0051, + 0x0359, 0x0368, 0x0375, 0x0002, 0x1073, 0x1077, 0x0002, 0x0051, + 0x0398, 0x0386, 0x0002, 0x0051, 0x03c0, 0x03ab, 0x0003, 0x107f, + 0x1082, 0x1087, 0x0001, 0x0001, 0x0091, 0x0003, 0x0051, 0x0359, + // Entry 3DBC0 - 3DBFF + 0x0368, 0x0375, 0x0002, 0x108a, 0x108e, 0x0002, 0x0051, 0x0398, + 0x03d6, 0x0002, 0x0051, 0x03c0, 0x03ab, 0x0003, 0x1096, 0x1099, + 0x109e, 0x0001, 0x0001, 0x011b, 0x0003, 0x0051, 0x03e3, 0x03f0, + 0x03fb, 0x0002, 0x10a1, 0x10a5, 0x0002, 0x0051, 0x0419, 0x040a, + 0x0002, 0x0051, 0x043c, 0x042a, 0x0003, 0x10ad, 0x10b0, 0x10b5, + 0x0001, 0x0051, 0x0450, 0x0003, 0x0051, 0x03e3, 0x03f0, 0x03fb, + 0x0002, 0x10b8, 0x10bc, 0x0002, 0x0051, 0x0419, 0x040a, 0x0002, + 0x0051, 0x043c, 0x042a, 0x0003, 0x10c4, 0x10c7, 0x10cc, 0x0001, + // Entry 3DC00 - 3DC3F + 0x0051, 0x0450, 0x0003, 0x0051, 0x03e3, 0x03f0, 0x03fb, 0x0002, + 0x10cf, 0x10d3, 0x0002, 0x0051, 0x0419, 0x040a, 0x0002, 0x0051, + 0x043c, 0x042a, 0x0004, 0x10dc, 0x10df, 0x10e4, 0x10ef, 0x0001, + 0x0001, 0x019c, 0x0003, 0x0051, 0x0454, 0x0460, 0x046a, 0x0002, + 0x10e7, 0x10eb, 0x0002, 0x0051, 0x0486, 0x0478, 0x0002, 0x0051, + 0x04a6, 0x0495, 0x0001, 0x0051, 0x04b8, 0x0004, 0x10f7, 0x10fa, + 0x10ff, 0x110a, 0x0001, 0x001d, 0x0079, 0x0003, 0x0051, 0x0454, + 0x0460, 0x046a, 0x0002, 0x1102, 0x1106, 0x0002, 0x0051, 0x0486, + // Entry 3DC40 - 3DC7F + 0x0478, 0x0002, 0x0051, 0x04a6, 0x0495, 0x0001, 0x0051, 0x04b8, + 0x0004, 0x1112, 0x1115, 0x111a, 0x1125, 0x0001, 0x001d, 0x0079, + 0x0003, 0x0051, 0x0454, 0x0460, 0x046a, 0x0002, 0x111d, 0x1121, + 0x0002, 0x0051, 0x0486, 0x0478, 0x0002, 0x0051, 0x04a6, 0x0495, + 0x0001, 0x0051, 0x04b8, 0x0001, 0x112a, 0x0001, 0x0051, 0x04c8, + 0x0001, 0x112f, 0x0001, 0x0051, 0x04da, 0x0001, 0x1134, 0x0001, + 0x0051, 0x04e8, 0x0003, 0x113b, 0x113e, 0x1145, 0x0001, 0x0001, + 0x024a, 0x0005, 0x0026, 0x198d, 0x1996, 0x373a, 0x1981, 0x3741, + // Entry 3DC80 - 3DCBF + 0x0002, 0x1148, 0x114c, 0x0002, 0x0051, 0x0501, 0x04f4, 0x0002, + 0x0051, 0x0520, 0x0510, 0x0003, 0x1154, 0x1157, 0x115e, 0x0001, + 0x0001, 0x024a, 0x0005, 0x0026, 0x198d, 0x1996, 0x373a, 0x1981, + 0x3741, 0x0002, 0x1161, 0x1165, 0x0002, 0x0051, 0x0532, 0x04f4, + 0x0002, 0x0051, 0x053f, 0x0510, 0x0003, 0x116d, 0x1170, 0x1177, + 0x0001, 0x0001, 0x024a, 0x0005, 0x0026, 0x198d, 0x1996, 0x373a, + 0x1981, 0x3741, 0x0002, 0x117a, 0x117e, 0x0002, 0x0051, 0x0532, + 0x04f4, 0x0002, 0x0051, 0x053f, 0x0510, 0x0001, 0x1184, 0x0001, + // Entry 3DCC0 - 3DCFF + 0x0051, 0x054f, 0x0001, 0x1189, 0x0001, 0x0051, 0x0560, 0x0001, + 0x118e, 0x0001, 0x0051, 0x056f, 0x0001, 0x1193, 0x0001, 0x0051, + 0x057b, 0x0001, 0x1198, 0x0001, 0x0051, 0x058b, 0x0001, 0x119d, + 0x0001, 0x0051, 0x0599, 0x0001, 0x11a2, 0x0001, 0x0051, 0x05a5, + 0x0001, 0x11a7, 0x0001, 0x0051, 0x05ba, 0x0001, 0x11ac, 0x0001, + 0x0051, 0x05cb, 0x0003, 0x0000, 0x11b3, 0x11b8, 0x0003, 0x0051, + 0x05da, 0x05eb, 0x05f7, 0x0002, 0x11bb, 0x11bf, 0x0002, 0x0051, + 0x061c, 0x060c, 0x0002, 0x0051, 0x0641, 0x062e, 0x0003, 0x0000, + // Entry 3DD00 - 3DD3F + 0x11c7, 0x11cc, 0x0003, 0x0051, 0x0656, 0x0665, 0x066f, 0x0002, + 0x11cf, 0x11d3, 0x0002, 0x0051, 0x0682, 0x0682, 0x0002, 0x0051, + 0x0690, 0x0690, 0x0003, 0x0000, 0x11db, 0x11e0, 0x0003, 0x0051, + 0x06a1, 0x06ae, 0x06b6, 0x0002, 0x11e3, 0x11e7, 0x0002, 0x0051, + 0x06c7, 0x06c7, 0x0002, 0x0051, 0x06d3, 0x06d3, 0x0003, 0x0000, + 0x11ef, 0x11f4, 0x0003, 0x0051, 0x06e2, 0x06f4, 0x0701, 0x0002, + 0x11f7, 0x11fb, 0x0002, 0x0051, 0x0728, 0x0717, 0x0002, 0x0051, + 0x074f, 0x073b, 0x0003, 0x0000, 0x1203, 0x1208, 0x0003, 0x0051, + // Entry 3DD40 - 3DD7F + 0x0765, 0x0775, 0x0780, 0x0002, 0x120b, 0x120f, 0x0002, 0x0051, + 0x0794, 0x0794, 0x0002, 0x0051, 0x07a3, 0x07a3, 0x0003, 0x0000, + 0x1217, 0x121c, 0x0003, 0x0051, 0x07b5, 0x07c2, 0x07ca, 0x0002, + 0x121f, 0x1223, 0x0002, 0x0051, 0x07db, 0x07db, 0x0002, 0x0051, + 0x07e7, 0x07e7, 0x0003, 0x0000, 0x122b, 0x1230, 0x0003, 0x0051, + 0x07f6, 0x0808, 0x0815, 0x0002, 0x1233, 0x1237, 0x0002, 0x0051, + 0x083c, 0x082b, 0x0002, 0x0051, 0x0863, 0x084f, 0x0003, 0x0000, + 0x123f, 0x1244, 0x0003, 0x0051, 0x0879, 0x0889, 0x0894, 0x0002, + // Entry 3DD80 - 3DDBF + 0x1247, 0x124b, 0x0002, 0x0051, 0x08a8, 0x08a8, 0x0002, 0x0051, + 0x08b7, 0x08b7, 0x0003, 0x0000, 0x1253, 0x1258, 0x0003, 0x0051, + 0x08c9, 0x08d6, 0x08de, 0x0002, 0x125b, 0x125f, 0x0002, 0x0051, + 0x08ef, 0x08ef, 0x0002, 0x0051, 0x08fb, 0x08fb, 0x0003, 0x0000, + 0x1267, 0x126c, 0x0003, 0x0051, 0x090a, 0x091d, 0x092b, 0x0002, + 0x126f, 0x1273, 0x0002, 0x0051, 0x0954, 0x0942, 0x0002, 0x0051, + 0x097d, 0x0968, 0x0003, 0x0000, 0x127b, 0x1280, 0x0003, 0x0051, + 0x0994, 0x09a5, 0x09b1, 0x0002, 0x1283, 0x1287, 0x0002, 0x0051, + // Entry 3DDC0 - 3DDFF + 0x09c6, 0x09c6, 0x0002, 0x0051, 0x09d6, 0x09d6, 0x0003, 0x0000, + 0x128f, 0x1294, 0x0003, 0x0051, 0x09e9, 0x09f6, 0x09fe, 0x0002, + 0x1297, 0x129b, 0x0002, 0x0051, 0x0a0f, 0x0a0f, 0x0002, 0x0051, + 0x0a1b, 0x0a1b, 0x0003, 0x0000, 0x12a3, 0x12a8, 0x0003, 0x0051, + 0x0a2a, 0x0a3e, 0x0a4d, 0x0002, 0x12ab, 0x12af, 0x0002, 0x0051, + 0x0a78, 0x0a65, 0x0002, 0x0051, 0x0aa3, 0x0a8d, 0x0003, 0x0000, + 0x12b7, 0x12bc, 0x0003, 0x0051, 0x0abb, 0x0acd, 0x0ada, 0x0002, + 0x12bf, 0x12c3, 0x0002, 0x0051, 0x0af0, 0x0af0, 0x0002, 0x0051, + // Entry 3DE00 - 3DE3F + 0x0b01, 0x0b01, 0x0003, 0x0000, 0x12cb, 0x12d0, 0x0003, 0x0051, + 0x0b15, 0x0b22, 0x0b2a, 0x0002, 0x12d3, 0x12d7, 0x0002, 0x0051, + 0x0b3b, 0x0b3b, 0x0002, 0x0051, 0x0b47, 0x0b47, 0x0003, 0x0000, + 0x12df, 0x12e4, 0x0003, 0x0051, 0x0b56, 0x0b68, 0x0b75, 0x0002, + 0x12e7, 0x12eb, 0x0002, 0x0051, 0x0b9c, 0x0b8b, 0x0002, 0x0051, + 0x0bc3, 0x0baf, 0x0003, 0x0000, 0x12f3, 0x12f8, 0x0003, 0x0051, + 0x0bd9, 0x0be9, 0x0bf4, 0x0002, 0x12fb, 0x12ff, 0x0002, 0x0051, + 0x0c08, 0x0c08, 0x0002, 0x0051, 0x0c17, 0x0c17, 0x0003, 0x0000, + // Entry 3DE40 - 3DE7F + 0x1307, 0x130c, 0x0003, 0x0051, 0x0c29, 0x0c36, 0x0c3e, 0x0002, + 0x130f, 0x1313, 0x0002, 0x0051, 0x0c4f, 0x0c4f, 0x0002, 0x0051, + 0x0c5b, 0x0c5b, 0x0003, 0x0000, 0x131b, 0x1320, 0x0003, 0x0051, + 0x0c6a, 0x0c7d, 0x0c8b, 0x0002, 0x1323, 0x1327, 0x0002, 0x0051, + 0x0cb4, 0x0ca2, 0x0002, 0x0051, 0x0cdd, 0x0cc8, 0x0003, 0x0000, + 0x132f, 0x1334, 0x0003, 0x0051, 0x0cf4, 0x0d05, 0x0d11, 0x0002, + 0x1337, 0x133b, 0x0002, 0x0051, 0x0d26, 0x0d26, 0x0002, 0x0051, + 0x0d36, 0x0d36, 0x0003, 0x0000, 0x1343, 0x1348, 0x0003, 0x0051, + // Entry 3DE80 - 3DEBF + 0x0d49, 0x0d56, 0x0d5e, 0x0002, 0x134b, 0x134f, 0x0002, 0x0051, + 0x0d6f, 0x0d6f, 0x0002, 0x0051, 0x0d7b, 0x0d7b, 0x0001, 0x1355, + 0x0001, 0x001d, 0x0524, 0x0001, 0x135a, 0x0001, 0x001d, 0x0524, + 0x0001, 0x135f, 0x0001, 0x001d, 0x0524, 0x0003, 0x1366, 0x1369, + 0x136d, 0x0001, 0x0001, 0x075d, 0x0002, 0x0051, 0xffff, 0x0d8a, + 0x0002, 0x1370, 0x1374, 0x0002, 0x0051, 0x0d99, 0x0d99, 0x0002, + 0x0051, 0x0da6, 0x0da6, 0x0003, 0x137c, 0x137f, 0x1383, 0x0001, + 0x0001, 0x075d, 0x0002, 0x0051, 0xffff, 0x0d8a, 0x0002, 0x1386, + // Entry 3DEC0 - 3DEFF + 0x138a, 0x0002, 0x0051, 0x0d99, 0x0d99, 0x0002, 0x0051, 0x0da6, + 0x0da6, 0x0003, 0x1392, 0x1395, 0x1399, 0x0001, 0x0001, 0x075d, + 0x0002, 0x0051, 0xffff, 0x0d8a, 0x0002, 0x139c, 0x13a0, 0x0002, + 0x0051, 0x0d99, 0x0d99, 0x0002, 0x0051, 0x0da6, 0x0da6, 0x0003, + 0x13a8, 0x13ab, 0x13af, 0x0001, 0x0001, 0x078b, 0x0002, 0x0051, + 0xffff, 0x0db6, 0x0002, 0x13b2, 0x13b6, 0x0002, 0x0051, 0x0dd8, + 0x0dc8, 0x0002, 0x0051, 0x0dfc, 0x0de9, 0x0003, 0x13be, 0x13c1, + 0x13c5, 0x0001, 0x0043, 0x092f, 0x0002, 0x0051, 0xffff, 0x0db6, + // Entry 3DF00 - 3DF3F + 0x0002, 0x13c8, 0x13cc, 0x0002, 0x0051, 0x0e10, 0x0e10, 0x0002, + 0x0051, 0x0e1e, 0x0e1e, 0x0003, 0x13d4, 0x13d7, 0x13db, 0x0001, + 0x0043, 0x092f, 0x0002, 0x0051, 0xffff, 0x0db6, 0x0002, 0x13de, + 0x13e2, 0x0002, 0x0051, 0x0e10, 0x0e10, 0x0002, 0x0051, 0x0e1e, + 0x0e1e, 0x0003, 0x13ea, 0x13ed, 0x13f1, 0x0001, 0x0025, 0x0fe4, + 0x0002, 0x0016, 0xffff, 0x0cf3, 0x0002, 0x13f4, 0x13f8, 0x0002, + 0x0051, 0x0e40, 0x0e2f, 0x0002, 0x0051, 0x0e66, 0x0e52, 0x0003, + 0x1400, 0x1403, 0x1407, 0x0001, 0x001d, 0x00c0, 0x0002, 0x0016, + // Entry 3DF40 - 3DF7F + 0xffff, 0x0cf3, 0x0002, 0x140a, 0x140e, 0x0002, 0x0051, 0x0e7b, + 0x0e7b, 0x0002, 0x0051, 0x0e89, 0x0e89, 0x0003, 0x1416, 0x1419, + 0x141d, 0x0001, 0x0000, 0x2002, 0x0002, 0x0016, 0xffff, 0x0cf3, + 0x0002, 0x1420, 0x1424, 0x0002, 0x0051, 0x0e7b, 0x0e7b, 0x0002, + 0x0051, 0x0e89, 0x0e89, 0x0001, 0x142a, 0x0001, 0x0051, 0x0e9a, + 0x0001, 0x142f, 0x0001, 0x0016, 0x0d68, 0x0001, 0x1434, 0x0001, + 0x0016, 0x0d68, 0x0004, 0x143c, 0x1441, 0x1446, 0x146b, 0x0003, + 0x0000, 0x1dc7, 0x39fb, 0x3adb, 0x0003, 0x0051, 0x0ea3, 0x0eac, + // Entry 3DF80 - 3DFBF + 0x0eba, 0x0002, 0x1449, 0x145f, 0x0003, 0x144d, 0x1459, 0x1453, + 0x0004, 0x0006, 0xffff, 0xffff, 0xffff, 0x1f5f, 0x0004, 0x0006, + 0xffff, 0xffff, 0xffff, 0x1f5f, 0x0004, 0x0006, 0xffff, 0xffff, + 0xffff, 0x1f63, 0x0003, 0x0000, 0x1466, 0x1463, 0x0001, 0x0051, + 0x0ecc, 0x0003, 0x0051, 0xffff, 0x0ee7, 0x0ef8, 0x0002, 0x1652, + 0x146e, 0x0003, 0x1472, 0x15b2, 0x1512, 0x009e, 0x0051, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0f8a, 0x0fd7, 0x1041, 0x1076, 0x10ab, + 0x10e0, 0x1118, 0x114d, 0x117f, 0x120f, 0x124a, 0x128b, 0x12db, + // Entry 3DFC0 - 3DFFF + 0x1313, 0x134b, 0x13a4, 0x141e, 0x1471, 0x14c4, 0x1511, 0x1543, + 0xffff, 0xffff, 0x159e, 0xffff, 0x15f0, 0xffff, 0x1650, 0x1685, + 0x16c0, 0x16f5, 0xffff, 0xffff, 0x1760, 0x17a4, 0x17ee, 0xffff, + 0xffff, 0xffff, 0x185c, 0xffff, 0x18b2, 0x18ff, 0xffff, 0x1965, + 0x19ac, 0x19fc, 0xffff, 0xffff, 0xffff, 0xffff, 0x1aa4, 0xffff, + 0xffff, 0x1b0b, 0x1b5b, 0xffff, 0xffff, 0x1be2, 0x1c38, 0x1c76, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1d1e, 0x1d53, + 0x1d8b, 0x1dcf, 0x1e04, 0xffff, 0xffff, 0x1e95, 0xffff, 0x1ede, + // Entry 3E000 - 3E03F + 0xffff, 0xffff, 0x1f4e, 0xffff, 0x1ff1, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2075, 0xffff, 0x20c5, 0x2121, 0x2177, 0x21b8, 0xffff, + 0xffff, 0xffff, 0x2218, 0x226e, 0x22bb, 0xffff, 0xffff, 0x2320, + 0x2393, 0x23d4, 0x2400, 0xffff, 0xffff, 0x2469, 0x24b0, 0x24eb, + 0xffff, 0x253e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2630, + 0x2668, 0x269a, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2755, 0xffff, 0xffff, 0x27ad, 0xffff, 0x27f5, 0xffff, + 0x2844, 0x2888, 0x28c3, 0xffff, 0x2919, 0x295a, 0xffff, 0xffff, + // Entry 3E040 - 3E07F + 0xffff, 0x29cc, 0x2a04, 0xffff, 0xffff, 0x0f0c, 0x1009, 0x11ab, + 0x11da, 0xffff, 0xffff, 0x1fa4, 0x25d8, 0x009e, 0x0051, 0x0f38, + 0x0f47, 0x0f60, 0x0f75, 0x0f9f, 0x0fe3, 0x104e, 0x1083, 0x10b8, + 0x10ee, 0x1125, 0x1159, 0x1189, 0x121e, 0x125b, 0x12a1, 0x12e9, + 0x1321, 0x1364, 0x13c8, 0x1435, 0x1488, 0x14d9, 0x151d, 0x1552, + 0x157e, 0x158d, 0x15b0, 0x15e2, 0x1603, 0x1642, 0x165d, 0x1694, + 0x16cd, 0x1706, 0x1736, 0x174d, 0x1772, 0x17b6, 0x17fc, 0x1826, + 0x1831, 0x1849, 0x186e, 0x18a0, 0x18c7, 0x1912, 0x1946, 0x1978, + // Entry 3E080 - 3E0BF + 0x19c2, 0x1a0a, 0x1a34, 0x1a48, 0x1a6f, 0x1a8f, 0x1ab4, 0x1ae2, + 0x1af7, 0x1b21, 0x1b71, 0x1bc1, 0x1bd4, 0x1bfa, 0x1c48, 0x1c80, + 0x1ca2, 0x1caf, 0x1cc4, 0x1cd5, 0x1cf0, 0x1d07, 0x1d2b, 0x1d61, + 0x1d9d, 0x1ddc, 0x1e23, 0x1e6f, 0x1e82, 0x1ea4, 0x1ed0, 0x1eef, + 0x1f1f, 0x1f3b, 0x1f66, 0x1fd9, 0x1ffe, 0x2026, 0x2037, 0x2048, + 0x205f, 0x2087, 0x20b9, 0x20df, 0x2139, 0x2188, 0x21c4, 0x21ea, + 0x21fa, 0x220a, 0x2230, 0x2283, 0x22cd, 0x22ff, 0x230b, 0x2339, + 0x23a4, 0x23de, 0x2411, 0x2441, 0x244e, 0x247c, 0x24bf, 0x24fb, + // Entry 3E0C0 - 3E0FF + 0x2529, 0x255c, 0x25a6, 0x25bc, 0x25c9, 0x2613, 0x2623, 0x263e, + 0x2674, 0x26a9, 0x26d5, 0x26e4, 0x26fe, 0x2714, 0x2729, 0x2739, + 0x2744, 0x2761, 0x2787, 0x2797, 0x27bc, 0x27e8, 0x2805, 0x2833, + 0x2856, 0x2897, 0x28d5, 0x2907, 0x292a, 0x2969, 0x2995, 0x29a1, + 0x29b4, 0x29da, 0x2a19, 0x1bab, 0x2379, 0x0f16, 0x1017, 0x11b6, + 0x11e7, 0x1637, 0x1f30, 0x1fb1, 0x25e7, 0x009e, 0x0051, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0fbd, 0x0ff8, 0x1064, 0x1099, 0x10ce, + 0x1105, 0x113b, 0x116e, 0x119c, 0x1236, 0x1275, 0x12c0, 0x1300, + // Entry 3E100 - 3E13F + 0x1338, 0x1386, 0x13f5, 0x1455, 0x14a8, 0x14f7, 0x1532, 0x156a, + 0xffff, 0xffff, 0x15cb, 0xffff, 0x161f, 0xffff, 0x1673, 0x16ac, + 0x16e3, 0x1720, 0xffff, 0xffff, 0x178d, 0x17d1, 0x1813, 0xffff, + 0xffff, 0xffff, 0x1889, 0xffff, 0x18e5, 0x192e, 0xffff, 0x1994, + 0x19e1, 0x1a21, 0xffff, 0xffff, 0xffff, 0xffff, 0x1acd, 0xffff, + 0xffff, 0x1b40, 0x1b90, 0xffff, 0xffff, 0x1c1b, 0x1c61, 0x1c93, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1d41, 0x1d78, + 0x1db8, 0x1df2, 0x1e4b, 0xffff, 0xffff, 0x1ebc, 0xffff, 0x1f09, + // Entry 3E140 - 3E17F + 0xffff, 0xffff, 0x1f87, 0xffff, 0x2014, 0xffff, 0xffff, 0xffff, + 0xffff, 0x20a2, 0xffff, 0x2102, 0x215a, 0x21a2, 0x21d9, 0xffff, + 0xffff, 0xffff, 0x2251, 0x22a1, 0x22e8, 0xffff, 0xffff, 0x235b, + 0x23be, 0x23f1, 0x242b, 0xffff, 0xffff, 0x2498, 0x24d7, 0x2514, + 0xffff, 0x2583, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2655, + 0x2689, 0x26c1, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2776, 0xffff, 0xffff, 0x27d4, 0xffff, 0x281e, 0xffff, + 0x2871, 0x28af, 0x28f0, 0xffff, 0x2944, 0x2981, 0xffff, 0xffff, + // Entry 3E180 - 3E1BF + 0xffff, 0x29f1, 0x2a37, 0xffff, 0xffff, 0x0f29, 0x102e, 0x11ca, + 0x11fd, 0xffff, 0xffff, 0x1fc7, 0x25ff, 0x0003, 0x1656, 0x16bc, + 0x1689, 0x0031, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 3E1C0 - 3E1FF + 0x24ae, 0x24b7, 0xffff, 0x2512, 0x0031, 0x0007, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x24ae, 0x24b7, 0xffff, 0x2512, 0x0031, + 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 3E200 - 3E23F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x24b2, 0x24bb, + 0xffff, 0x24c4, 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000b, 0x0019, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0014, 0x0000, 0x0000, 0x0001, 0x0016, + // Entry 3E240 - 3E27F + 0x0001, 0x001f, 0x058b, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0022, 0x0000, 0x0000, 0x0001, 0x0024, 0x0001, 0x001d, + 0x079a, 0x0003, 0x0000, 0x0000, 0x0004, 0x0004, 0x0000, 0x0000, + 0x0000, 0x0009, 0x0001, 0x000b, 0x0003, 0x0000, 0x0000, 0x000f, + 0x0080, 0x0052, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 3E280 - 3E2BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 3E2C0 - 3E2FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0000, 0x0002, 0x0003, 0x00d6, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, + 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, 0x0002, 0x0000, 0x0001, + // Entry 3E300 - 3E33F + 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0000, 0x240c, + 0x0008, 0x002f, 0x0053, 0x0078, 0x008c, 0x00a4, 0x00b4, 0x00c5, + 0x0000, 0x0001, 0x0031, 0x0003, 0x0035, 0x0000, 0x0044, 0x000d, + 0x0052, 0xffff, 0x0004, 0x0008, 0x000c, 0x0010, 0x0014, 0x0018, + 0x001c, 0x0020, 0x0024, 0x0028, 0x002d, 0x0032, 0x000d, 0x0052, + 0xffff, 0x0037, 0x0047, 0x0054, 0x0061, 0x006d, 0x007a, 0x0088, + 0x009b, 0x00a9, 0x00b9, 0x00c4, 0x00d6, 0x0002, 0x0056, 0x006c, + 0x0003, 0x005a, 0x0000, 0x0063, 0x0007, 0x0021, 0x00d9, 0x00e0, + // Entry 3E340 - 3E37F + 0x00e7, 0x00eb, 0x00ef, 0x3984, 0x3988, 0x0007, 0x0021, 0x00fd, + 0x398c, 0x3996, 0x39ac, 0x39c3, 0x39d9, 0x39ec, 0x0002, 0x0000, + 0x006f, 0x0007, 0x0000, 0x2002, 0x1f9a, 0x2002, 0x2002, 0x2002, + 0x1f9a, 0x2002, 0x0001, 0x007a, 0x0003, 0x007e, 0x0000, 0x0085, + 0x0005, 0x001d, 0xffff, 0x1674, 0x1677, 0x167a, 0x167d, 0x0005, + 0x0052, 0xffff, 0x00e0, 0x00ed, 0x00fa, 0x0107, 0x0001, 0x008e, + 0x0003, 0x0092, 0x0000, 0x009b, 0x0002, 0x0095, 0x0098, 0x0001, + 0x0052, 0x0113, 0x0001, 0x0052, 0x0119, 0x0002, 0x009e, 0x00a1, + // Entry 3E380 - 3E3BF + 0x0001, 0x0052, 0x0113, 0x0001, 0x0052, 0x0119, 0x0003, 0x00ae, + 0x0000, 0x00a8, 0x0001, 0x00aa, 0x0002, 0x0052, 0x011f, 0x012c, + 0x0001, 0x00b0, 0x0002, 0x0052, 0x0138, 0x013b, 0x0004, 0x00c2, + 0x00bc, 0x00b9, 0x00bf, 0x0001, 0x0002, 0x0025, 0x0001, 0x0002, + 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, 0x0002, 0x028b, 0x0004, + 0x00d3, 0x00cd, 0x00ca, 0x00d0, 0x0001, 0x0000, 0x0524, 0x0001, + 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, + 0x0040, 0x0117, 0x0000, 0x0000, 0x011c, 0x0000, 0x0000, 0x0000, + // Entry 3E3C0 - 3E3FF + 0x0000, 0x0000, 0x0121, 0x0000, 0x0000, 0x0126, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x012b, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0136, 0x0000, 0x013b, + 0x0000, 0x0000, 0x0140, 0x0000, 0x0000, 0x0145, 0x0000, 0x0000, + 0x014a, 0x0001, 0x0119, 0x0001, 0x0052, 0x013e, 0x0001, 0x011e, + // Entry 3E400 - 3E43F + 0x0001, 0x0052, 0x014c, 0x0001, 0x0123, 0x0001, 0x0052, 0x0151, + 0x0001, 0x0128, 0x0001, 0x0021, 0x0235, 0x0002, 0x012e, 0x0131, + 0x0001, 0x0052, 0x0158, 0x0003, 0x0052, 0x015d, 0x0165, 0x016a, + 0x0001, 0x0138, 0x0001, 0x0052, 0x0173, 0x0001, 0x013d, 0x0001, + 0x0052, 0x018d, 0x0001, 0x0142, 0x0001, 0x0052, 0x0193, 0x0001, + 0x0147, 0x0001, 0x0052, 0x019b, 0x0001, 0x014c, 0x0001, 0x0052, + 0x01a2, 0x0003, 0x0004, 0x01cf, 0x0602, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0038, 0x0008, 0x0000, + // Entry 3E440 - 3E47F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, 0x0027, 0x0004, + 0x0024, 0x001e, 0x001b, 0x0021, 0x0001, 0x0014, 0x0349, 0x0001, + 0x0014, 0x035a, 0x0001, 0x0016, 0x0098, 0x0001, 0x0008, 0x0627, + 0x0004, 0x0035, 0x002f, 0x002c, 0x0032, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0008, 0x0041, 0x00a6, 0x00fd, 0x0132, 0x0173, 0x0198, + 0x01a9, 0x01be, 0x0002, 0x0044, 0x0075, 0x0003, 0x0048, 0x0057, + 0x0066, 0x000d, 0x0016, 0xffff, 0x00a3, 0x26b4, 0x2f4c, 0x2753, + // Entry 3E480 - 3E4BF + 0x2f51, 0x2f55, 0x2f5a, 0x275c, 0x25f7, 0x2761, 0x2766, 0x2601, + 0x000d, 0x0000, 0xffff, 0x257b, 0x2b4e, 0x2b3c, 0x2b42, 0x2b3c, + 0x257b, 0x257b, 0x2b42, 0x2b3a, 0x2b50, 0x2b40, 0x2b3e, 0x000d, + 0x000d, 0xffff, 0x0089, 0x0090, 0x3468, 0x346d, 0x3473, 0x3477, + 0x347c, 0x3340, 0x3481, 0x348b, 0x3493, 0x3441, 0x0003, 0x0079, + 0x0088, 0x0097, 0x000d, 0x000d, 0xffff, 0x0059, 0x340b, 0x344a, + 0x3413, 0x3473, 0x336f, 0x3373, 0x3377, 0x344e, 0x3452, 0x3456, + 0x345a, 0x000d, 0x0000, 0xffff, 0x257b, 0x2b4e, 0x2b3c, 0x2b42, + // Entry 3E4C0 - 3E4FF + 0x2b3c, 0x257b, 0x257b, 0x2b42, 0x2b3a, 0x2b50, 0x2b40, 0x2b3e, + 0x000d, 0x000d, 0xffff, 0x0089, 0x0090, 0x3468, 0x346d, 0x3473, + 0x3477, 0x347c, 0x3340, 0x3481, 0x348b, 0x3493, 0x3441, 0x0002, + 0x00a9, 0x00d3, 0x0005, 0x00af, 0x00b8, 0x00ca, 0x0000, 0x00c1, + 0x0007, 0x004f, 0x0790, 0x2718, 0x271d, 0x079d, 0x07a1, 0x07a5, + 0x2721, 0x0007, 0x0000, 0x2b3a, 0x2b3c, 0x3a8d, 0x2b50, 0x3a8d, + 0x2b4e, 0x2296, 0x0007, 0x004f, 0x0790, 0x2718, 0x271d, 0x079d, + 0x07a1, 0x07a5, 0x2721, 0x0007, 0x004f, 0x0b46, 0x2725, 0x272d, + // Entry 3E500 - 3E53F + 0x0d29, 0x0dc6, 0x0e64, 0x2734, 0x0005, 0x00d9, 0x00e2, 0x00f4, + 0x0000, 0x00eb, 0x0007, 0x0016, 0x0153, 0x2f5f, 0x2f64, 0x0160, + 0x0164, 0x0168, 0x2f68, 0x0007, 0x0000, 0x2b3a, 0x2b3c, 0x3a8d, + 0x2b50, 0x3a8d, 0x2b4e, 0x2296, 0x0007, 0x004f, 0x0790, 0x2718, + 0x271d, 0x079d, 0x07a1, 0x07a5, 0x2721, 0x0007, 0x004f, 0x0b46, + 0x2725, 0x272d, 0x0d29, 0x0dc6, 0x0e64, 0x2734, 0x0002, 0x0100, + 0x0119, 0x0003, 0x0104, 0x010b, 0x0112, 0x0005, 0x0000, 0xffff, + 0x1f17, 0x1f1a, 0x1f1d, 0x1f20, 0x0005, 0x0000, 0xffff, 0x0033, + // Entry 3E540 - 3E57F + 0x0035, 0x0037, 0x23b3, 0x0005, 0x0016, 0xffff, 0x0191, 0x019c, + 0x01a7, 0x01b2, 0x0003, 0x011d, 0x0124, 0x012b, 0x0005, 0x0000, + 0xffff, 0x1f17, 0x1f1a, 0x1f1d, 0x1f20, 0x0005, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0016, 0xffff, 0x0191, + 0x019c, 0x01a7, 0x01b2, 0x0002, 0x0135, 0x0154, 0x0003, 0x0139, + 0x0142, 0x014b, 0x0002, 0x013c, 0x013f, 0x0001, 0x0052, 0x01b0, + 0x0001, 0x0052, 0x01b5, 0x0002, 0x0145, 0x0148, 0x0001, 0x0052, + 0x01b0, 0x0001, 0x0052, 0x01b5, 0x0002, 0x014e, 0x0151, 0x0001, + // Entry 3E580 - 3E5BF + 0x0016, 0x020c, 0x0001, 0x004f, 0x081d, 0x0003, 0x0158, 0x0161, + 0x016a, 0x0002, 0x015b, 0x015e, 0x0001, 0x0052, 0x01b0, 0x0001, + 0x0052, 0x01b5, 0x0002, 0x0164, 0x0167, 0x0001, 0x0052, 0x01b0, + 0x0001, 0x0052, 0x01b5, 0x0002, 0x016d, 0x0170, 0x0001, 0x0052, + 0x01b0, 0x0001, 0x0052, 0x01b5, 0x0003, 0x0182, 0x018d, 0x0177, + 0x0002, 0x017a, 0x017e, 0x0002, 0x0016, 0x022c, 0x0250, 0x0002, + 0x0016, 0x026f, 0x0276, 0x0002, 0x0185, 0x0189, 0x0002, 0x0016, + 0x022c, 0x0250, 0x0002, 0x0016, 0x026f, 0x0276, 0x0002, 0x0190, + // Entry 3E5C0 - 3E5FF + 0x0194, 0x0002, 0x0016, 0x022c, 0x0250, 0x0002, 0x0016, 0x027f, + 0x0287, 0x0004, 0x01a6, 0x01a0, 0x019d, 0x01a3, 0x0001, 0x0014, + 0x0783, 0x0001, 0x0014, 0x0792, 0x0001, 0x0016, 0x029f, 0x0001, + 0x0017, 0x0538, 0x0004, 0x01ba, 0x01b2, 0x01ae, 0x01b6, 0x0002, + 0x0052, 0x01ba, 0x01ce, 0x0002, 0x0000, 0x0532, 0x3a9d, 0x0002, + 0x0000, 0x053d, 0x3aa8, 0x0002, 0x0000, 0x0546, 0x3ab1, 0x0004, + 0x01cc, 0x01c6, 0x01c3, 0x01c9, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0016, 0x02d0, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, + // Entry 3E600 - 3E63F + 0x0042, 0x0212, 0x0217, 0x021c, 0x0221, 0x0238, 0x024a, 0x025c, + 0x0273, 0x0285, 0x0297, 0x02ae, 0x02c0, 0x02d2, 0x02ed, 0x0303, + 0x0319, 0x031e, 0x0323, 0x0328, 0x0341, 0x0353, 0x0365, 0x036a, + 0x036f, 0x0374, 0x0379, 0x037e, 0x0383, 0x0388, 0x038d, 0x0392, + 0x03a6, 0x03ba, 0x03ce, 0x03e2, 0x03f6, 0x040a, 0x041e, 0x0432, + 0x0446, 0x045a, 0x046e, 0x0482, 0x0496, 0x04aa, 0x04be, 0x04d2, + 0x04e6, 0x04fa, 0x050e, 0x0522, 0x0536, 0x053b, 0x0540, 0x0545, + 0x055b, 0x056d, 0x057f, 0x0595, 0x05a7, 0x05b9, 0x05cf, 0x05e1, + // Entry 3E640 - 3E67F + 0x05f3, 0x05f8, 0x05fd, 0x0001, 0x0214, 0x0001, 0x004f, 0x08a3, + 0x0001, 0x0219, 0x0001, 0x004f, 0x08a3, 0x0001, 0x021e, 0x0001, + 0x004f, 0x08a3, 0x0003, 0x0225, 0x0228, 0x022d, 0x0001, 0x0016, + 0x041c, 0x0003, 0x004f, 0x08ad, 0x08b4, 0x08ba, 0x0002, 0x0230, + 0x0234, 0x0002, 0x0016, 0x043c, 0x043c, 0x0002, 0x0052, 0x01e2, + 0x01e2, 0x0003, 0x023c, 0x0000, 0x023f, 0x0001, 0x0016, 0x041c, + 0x0002, 0x0242, 0x0246, 0x0002, 0x0016, 0x043c, 0x043c, 0x0002, + 0x0052, 0x01e2, 0x01e2, 0x0003, 0x024e, 0x0000, 0x0251, 0x0001, + // Entry 3E680 - 3E6BF + 0x0016, 0x041c, 0x0002, 0x0254, 0x0258, 0x0002, 0x0016, 0x043c, + 0x043c, 0x0002, 0x0052, 0x01e2, 0x01e2, 0x0003, 0x0260, 0x0263, + 0x0268, 0x0001, 0x000d, 0x03c6, 0x0003, 0x0052, 0x01f4, 0x0203, + 0x0213, 0x0002, 0x026b, 0x026f, 0x0002, 0x0016, 0x0485, 0x0485, + 0x0002, 0x0052, 0x0221, 0x0221, 0x0003, 0x0277, 0x0000, 0x027a, + 0x0001, 0x000d, 0x0444, 0x0002, 0x027d, 0x0281, 0x0002, 0x004f, + 0x0926, 0x0926, 0x0002, 0x0052, 0x0237, 0x0237, 0x0003, 0x0289, + 0x0000, 0x028c, 0x0001, 0x000d, 0x0444, 0x0002, 0x028f, 0x0293, + // Entry 3E6C0 - 3E6FF + 0x0002, 0x004f, 0x0943, 0x0943, 0x0002, 0x004f, 0x094c, 0x094c, + 0x0003, 0x029b, 0x029e, 0x02a3, 0x0001, 0x0052, 0x0249, 0x0003, + 0x0052, 0x0250, 0x025e, 0x026d, 0x0002, 0x02a6, 0x02aa, 0x0002, + 0x0052, 0x0288, 0x027a, 0x0002, 0x0052, 0x02ad, 0x0298, 0x0003, + 0x02b2, 0x0000, 0x02b5, 0x0001, 0x004f, 0x0982, 0x0002, 0x02b8, + 0x02bc, 0x0002, 0x0016, 0x05b4, 0x05b4, 0x0002, 0x0052, 0x02c4, + 0x02c4, 0x0003, 0x02c4, 0x0000, 0x02c7, 0x0001, 0x0001, 0x017d, + 0x0002, 0x02ca, 0x02ce, 0x0002, 0x004f, 0x09a7, 0x09a7, 0x0002, + // Entry 3E700 - 3E73F + 0x0052, 0x02d6, 0x02d6, 0x0004, 0x02d7, 0x02da, 0x02df, 0x02ea, + 0x0001, 0x0052, 0x02e1, 0x0003, 0x0052, 0x02e6, 0x02f2, 0x02fd, + 0x0002, 0x02e2, 0x02e6, 0x0002, 0x0052, 0x0314, 0x0308, 0x0002, + 0x0052, 0x0334, 0x0321, 0x0001, 0x0052, 0x0348, 0x0004, 0x02f2, + 0x0000, 0x02f5, 0x0300, 0x0001, 0x0052, 0x02e1, 0x0002, 0x02f8, + 0x02fc, 0x0002, 0x0052, 0x035e, 0x035e, 0x0002, 0x0052, 0x0368, + 0x0368, 0x0001, 0x0052, 0x0379, 0x0004, 0x0308, 0x0000, 0x030b, + 0x0316, 0x0001, 0x0029, 0x0158, 0x0002, 0x030e, 0x0312, 0x0002, + // Entry 3E740 - 3E77F + 0x0052, 0x0386, 0x0386, 0x0002, 0x0052, 0x038e, 0x038e, 0x0001, + 0x0052, 0x0398, 0x0001, 0x031b, 0x0001, 0x0052, 0x03a2, 0x0001, + 0x0320, 0x0001, 0x0052, 0x03b2, 0x0001, 0x0325, 0x0001, 0x0052, + 0x03be, 0x0003, 0x032c, 0x032f, 0x0336, 0x0001, 0x0001, 0x024a, + 0x0005, 0x0052, 0x03d4, 0x03db, 0x03e1, 0x03c9, 0x03ea, 0x0002, + 0x0339, 0x033d, 0x0002, 0x004f, 0x0a85, 0x0a85, 0x0002, 0x0052, + 0x03f7, 0x03f7, 0x0003, 0x0345, 0x0000, 0x0348, 0x0001, 0x0001, + 0x024a, 0x0002, 0x034b, 0x034f, 0x0002, 0x004f, 0x0aa6, 0x0aa6, + // Entry 3E780 - 3E7BF + 0x0002, 0x0052, 0x040b, 0x040b, 0x0003, 0x0357, 0x0000, 0x035a, + 0x0001, 0x0029, 0x007b, 0x0002, 0x035d, 0x0361, 0x0002, 0x004f, + 0x0ae3, 0x0ae3, 0x0002, 0x0052, 0x041c, 0x041c, 0x0001, 0x0367, + 0x0001, 0x0016, 0x06e2, 0x0001, 0x036c, 0x0001, 0x0016, 0x06e2, + 0x0001, 0x0371, 0x0001, 0x004f, 0x0af3, 0x0001, 0x0376, 0x0001, + 0x0052, 0x0426, 0x0001, 0x037b, 0x0001, 0x0052, 0x0426, 0x0001, + 0x0380, 0x0001, 0x0052, 0x042e, 0x0001, 0x0385, 0x0001, 0x0052, + 0x0435, 0x0001, 0x038a, 0x0001, 0x0052, 0x0448, 0x0001, 0x038f, + // Entry 3E7C0 - 3E7FF + 0x0001, 0x0052, 0x0456, 0x0003, 0x0000, 0x0396, 0x039b, 0x0003, + 0x0052, 0x0463, 0x0471, 0x0478, 0x0002, 0x039e, 0x03a2, 0x0002, + 0x0052, 0x0493, 0x0485, 0x0002, 0x0052, 0x04b8, 0x04a3, 0x0003, + 0x0000, 0x03aa, 0x03af, 0x0003, 0x0052, 0x04cf, 0x04db, 0x04e0, + 0x0002, 0x03b2, 0x03b6, 0x0002, 0x0052, 0x04eb, 0x04eb, 0x0002, + 0x0052, 0x04f7, 0x04f7, 0x0003, 0x0000, 0x03be, 0x03c3, 0x0003, + 0x0052, 0x050a, 0x0515, 0x0519, 0x0002, 0x03c6, 0x03ca, 0x0002, + 0x0052, 0x0523, 0x0523, 0x0002, 0x0052, 0x052e, 0x052e, 0x0003, + // Entry 3E800 - 3E83F + 0x0000, 0x03d2, 0x03d7, 0x0003, 0x0052, 0x0540, 0x054f, 0x0557, + 0x0002, 0x03da, 0x03de, 0x0002, 0x0052, 0x0574, 0x0565, 0x0002, + 0x0052, 0x059b, 0x0585, 0x0003, 0x0000, 0x03e6, 0x03eb, 0x0003, + 0x0052, 0x05b3, 0x05c0, 0x05c6, 0x0002, 0x03ee, 0x03f2, 0x0002, + 0x0052, 0x05d2, 0x05d2, 0x0002, 0x0052, 0x05df, 0x05df, 0x0003, + 0x0000, 0x03fa, 0x03ff, 0x0003, 0x0052, 0x05b3, 0x05c0, 0x05c6, + 0x0002, 0x0402, 0x0406, 0x0002, 0x0052, 0x05f3, 0x05f3, 0x0002, + 0x0052, 0x05ff, 0x05ff, 0x0003, 0x0000, 0x040e, 0x0413, 0x0003, + // Entry 3E840 - 3E87F + 0x0052, 0x0612, 0x0620, 0x0627, 0x0002, 0x0416, 0x041a, 0x0002, + 0x0052, 0x0642, 0x0634, 0x0002, 0x0052, 0x0667, 0x0652, 0x0003, + 0x0000, 0x0422, 0x0427, 0x0003, 0x0052, 0x067e, 0x068a, 0x068f, + 0x0002, 0x042a, 0x042e, 0x0002, 0x0052, 0x069a, 0x069a, 0x0002, + 0x0052, 0x06a6, 0x06a6, 0x0003, 0x0000, 0x0436, 0x043b, 0x0003, + 0x0052, 0x06b9, 0x06c4, 0x06c8, 0x0002, 0x043e, 0x0442, 0x0002, + 0x0052, 0x06d2, 0x06d2, 0x0002, 0x0052, 0x06dd, 0x06dd, 0x0003, + 0x0000, 0x044a, 0x044f, 0x0003, 0x0052, 0x06ef, 0x06fd, 0x0704, + // Entry 3E880 - 3E8BF + 0x0002, 0x0452, 0x0456, 0x0002, 0x0016, 0x2f6c, 0x0959, 0x0002, + 0x0052, 0x0726, 0x0711, 0x0003, 0x0000, 0x045e, 0x0463, 0x0003, + 0x0052, 0x073d, 0x0749, 0x074e, 0x0002, 0x0466, 0x046a, 0x0002, + 0x004f, 0x0d5d, 0x0d5d, 0x0002, 0x0052, 0x0759, 0x0759, 0x0003, + 0x0000, 0x0472, 0x0477, 0x0003, 0x0052, 0x076c, 0x0777, 0x077b, + 0x0002, 0x047a, 0x047e, 0x0002, 0x004f, 0x0d99, 0x0d99, 0x0002, + 0x0052, 0x0785, 0x0785, 0x0003, 0x0000, 0x0486, 0x048b, 0x0003, + 0x0052, 0x0797, 0x07a6, 0x07ae, 0x0002, 0x048e, 0x0492, 0x0002, + // Entry 3E8C0 - 3E8FF + 0x0016, 0x2f7c, 0x0a0a, 0x0002, 0x0052, 0x07d2, 0x07bc, 0x0003, + 0x0000, 0x049a, 0x049f, 0x0003, 0x0052, 0x07ea, 0x07f6, 0x07fb, + 0x0002, 0x04a2, 0x04a6, 0x0002, 0x004f, 0x0dfc, 0x0dfc, 0x0002, + 0x0052, 0x0806, 0x0806, 0x0003, 0x0000, 0x04ae, 0x04b3, 0x0003, + 0x0052, 0x0819, 0x0824, 0x0828, 0x0002, 0x04b6, 0x04ba, 0x0002, + 0x004f, 0x0e38, 0x0e38, 0x0002, 0x0052, 0x0832, 0x0832, 0x0003, + 0x0000, 0x04c2, 0x04c7, 0x0003, 0x0052, 0x0844, 0x0852, 0x0859, + 0x0002, 0x04ca, 0x04ce, 0x0002, 0x0016, 0x2f8d, 0x0abc, 0x0002, + // Entry 3E900 - 3E93F + 0x0052, 0x087b, 0x0866, 0x0003, 0x0000, 0x04d6, 0x04db, 0x0003, + 0x0052, 0x0892, 0x089e, 0x08a3, 0x0002, 0x04de, 0x04e2, 0x0002, + 0x004f, 0x0e98, 0x0e98, 0x0002, 0x0052, 0x08ae, 0x08ae, 0x0003, + 0x0000, 0x04ea, 0x04ef, 0x0003, 0x0052, 0x08c1, 0x08cc, 0x08d0, + 0x0002, 0x04f2, 0x04f6, 0x0002, 0x004f, 0x0ed4, 0x0ed4, 0x0002, + 0x0052, 0x08da, 0x08da, 0x0003, 0x0000, 0x04fe, 0x0503, 0x0003, + 0x0052, 0x08ec, 0x08fb, 0x0903, 0x0002, 0x0506, 0x050a, 0x0002, + 0x0052, 0x0920, 0x0911, 0x0002, 0x0052, 0x0947, 0x0931, 0x0003, + // Entry 3E940 - 3E97F + 0x0000, 0x0512, 0x0517, 0x0003, 0x0052, 0x095f, 0x096b, 0x0970, + 0x0002, 0x051a, 0x051e, 0x0002, 0x0052, 0x097b, 0x097b, 0x0002, + 0x0052, 0x099a, 0x0987, 0x0003, 0x0000, 0x0526, 0x052b, 0x0003, + 0x0052, 0x09ae, 0x09b9, 0x09bd, 0x0002, 0x052e, 0x0532, 0x0002, + 0x0052, 0x09c7, 0x09c7, 0x0002, 0x0052, 0x09d2, 0x09d2, 0x0001, + 0x0538, 0x0001, 0x0052, 0x09e4, 0x0001, 0x053d, 0x0001, 0x0052, + 0x09e4, 0x0001, 0x0542, 0x0001, 0x0052, 0x09e4, 0x0003, 0x0549, + 0x054c, 0x0550, 0x0001, 0x0016, 0x0bfe, 0x0002, 0x004f, 0xffff, + // Entry 3E980 - 3E9BF + 0x0f9a, 0x0002, 0x0553, 0x0557, 0x0002, 0x0016, 0x2f9d, 0x0c17, + 0x0002, 0x0052, 0x0a01, 0x09ee, 0x0003, 0x055f, 0x0000, 0x0562, + 0x0001, 0x0000, 0x2000, 0x0002, 0x0565, 0x0569, 0x0002, 0x004f, + 0x0fa6, 0x0fa6, 0x0002, 0x0052, 0x0a15, 0x0a15, 0x0003, 0x0571, + 0x0000, 0x0574, 0x0001, 0x0000, 0x2000, 0x0002, 0x0577, 0x057b, + 0x0002, 0x004f, 0x0fbf, 0x0fbf, 0x0002, 0x0052, 0x0a25, 0x0a25, + 0x0003, 0x0583, 0x0586, 0x058a, 0x0001, 0x004f, 0x0fcd, 0x0002, + 0x004f, 0xffff, 0x0fd4, 0x0002, 0x058d, 0x0591, 0x0002, 0x004f, + // Entry 3E9C0 - 3E9FF + 0x0fe3, 0x0fe3, 0x0002, 0x0052, 0x0a2e, 0x0a2e, 0x0003, 0x0599, + 0x0000, 0x059c, 0x0001, 0x0043, 0x092f, 0x0002, 0x059f, 0x05a3, + 0x0002, 0x004f, 0x102d, 0x102d, 0x0002, 0x0052, 0x0a43, 0x0a43, + 0x0003, 0x05ab, 0x0000, 0x05ae, 0x0001, 0x0000, 0x1f9a, 0x0002, + 0x05b1, 0x05b5, 0x0002, 0x0000, 0x1d97, 0x1d97, 0x0002, 0x0052, + 0x0a55, 0x0a55, 0x0003, 0x05bd, 0x05c0, 0x05c4, 0x0001, 0x0016, + 0x0cec, 0x0002, 0x0052, 0xffff, 0x0a60, 0x0002, 0x05c7, 0x05cb, + 0x0002, 0x0016, 0x2faa, 0x0cf6, 0x0002, 0x0052, 0x0a63, 0x0a63, + // Entry 3EA00 - 3EA3F + 0x0003, 0x05d3, 0x0000, 0x05d6, 0x0001, 0x001f, 0x16d8, 0x0002, + 0x05d9, 0x05dd, 0x0002, 0x0052, 0x0a78, 0x0a78, 0x0002, 0x0052, + 0x0a84, 0x0a84, 0x0003, 0x05e5, 0x0000, 0x05e8, 0x0001, 0x0000, + 0x2002, 0x0002, 0x05eb, 0x05ef, 0x0002, 0x0026, 0x02ce, 0x02ce, + 0x0002, 0x0052, 0x0a9f, 0x0a96, 0x0001, 0x05f5, 0x0001, 0x004f, + 0x106b, 0x0001, 0x05fa, 0x0001, 0x004f, 0x106b, 0x0001, 0x05ff, + 0x0001, 0x004f, 0x106b, 0x0004, 0x0607, 0x060c, 0x0611, 0x0620, + 0x0003, 0x0000, 0x1dc7, 0x39fb, 0x3adb, 0x0003, 0x004f, 0x1074, + // Entry 3EA40 - 3EA7F + 0x273c, 0x1097, 0x0002, 0x0000, 0x0614, 0x0003, 0x0000, 0x061b, + 0x0618, 0x0001, 0x004f, 0x10a9, 0x0003, 0x0052, 0xffff, 0x0aa9, + 0x0aba, 0x0002, 0x07e9, 0x0623, 0x0003, 0x06bd, 0x0753, 0x0627, + 0x0094, 0x004f, 0x1100, 0x110d, 0x274d, 0x1134, 0x275f, 0x1176, + 0x11c2, 0x2779, 0x279d, 0x129a, 0x27c9, 0xffff, 0x137e, 0x27fc, + 0x1414, 0x143e, 0x1470, 0x1494, 0x280e, 0x282b, 0x284d, 0x2867, + 0x15d4, 0x1606, 0x162a, 0x165a, 0x1667, 0x1676, 0x16a4, 0x16c3, + 0x16f9, 0x170f, 0x173b, 0x1761, 0x1787, 0x17bb, 0x2881, 0x289a, + // Entry 3EA80 - 3EABF + 0x28b0, 0x28c9, 0x1876, 0x28db, 0x28fb, 0x18bc, 0x18ee, 0x290e, + 0x292b, 0x2945, 0x295d, 0x2977, 0x19e9, 0x1a0f, 0x2995, 0x29bd, + 0x1a70, 0x1a85, 0x29db, 0x1ac6, 0x29f6, 0x1b0e, 0x1b4b, 0x1b64, + 0x1b70, 0x2a10, 0x1be0, 0x1c08, 0x1c13, 0x1c2b, 0x1c3c, 0x2a2b, + 0x1c65, 0x1c78, 0x1c9a, 0x1cc6, 0x1cec, 0xffff, 0x2a3e, 0x1d83, + 0x1d98, 0x1dbe, 0x1dd2, 0x1e06, 0x2a53, 0x1e37, 0x1e95, 0x1eb0, + 0x1edc, 0x1eea, 0x2a6b, 0x1f15, 0x1f27, 0x1f4f, 0x2a88, 0x2aaa, + 0x2005, 0x2037, 0x2061, 0x206f, 0x207b, 0x2087, 0x2ad9, 0x20dd, + // Entry 3EAC0 - 3EAFF + 0x2113, 0x2125, 0x213e, 0x2195, 0x21c9, 0x21ef, 0x2219, 0x2226, + 0x2233, 0x2261, 0x2287, 0x2aef, 0x22cc, 0x231a, 0x2330, 0x2345, + 0x2388, 0x239e, 0x23b3, 0xffff, 0x2417, 0x243d, 0x244d, 0x245c, + 0x246a, 0x2484, 0x2492, 0x24a5, 0x24b2, 0x24dc, 0x24eb, 0x2500, + 0x2b0a, 0x253f, 0x2567, 0x2573, 0x259f, 0x25c5, 0x25ed, 0x25fe, + 0x2632, 0x2662, 0x2676, 0x2b23, 0x26b4, 0x26e0, 0x0094, 0x0016, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2884, 0x2896, 0x28a3, 0x2fb9, + 0x2fdc, 0x290c, 0x3007, 0xffff, 0x2976, 0x2988, 0x2994, 0x29a3, + // Entry 3EB00 - 3EB3F + 0x29b6, 0x29c2, 0x29f6, 0x2a0b, 0x3039, 0x2a37, 0x2a49, 0x2a5c, + 0x2a68, 0xffff, 0xffff, 0x2a7a, 0xffff, 0x2a90, 0xffff, 0x2aa0, + 0x2ab5, 0x2ac2, 0x2acf, 0xffff, 0xffff, 0x304b, 0x305b, 0x3073, + 0xffff, 0xffff, 0xffff, 0x2b1c, 0xffff, 0x2b34, 0x307f, 0xffff, + 0x2b5b, 0x3091, 0x2b8a, 0xffff, 0xffff, 0xffff, 0xffff, 0x2b97, + 0xffff, 0xffff, 0x30ae, 0x2bb8, 0xffff, 0xffff, 0x2bcc, 0x30c2, + 0x2c02, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2c15, + 0x2c20, 0x2c35, 0x2c42, 0xffff, 0xffff, 0xffff, 0x2c77, 0xffff, + // Entry 3EB40 - 3EB7F + 0x2c84, 0xffff, 0xffff, 0x2c9d, 0xffff, 0x2cc3, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2cd8, 0xffff, 0x30d7, 0x30f8, 0x2d35, 0x2d4d, + 0xffff, 0xffff, 0xffff, 0x2d61, 0x3126, 0x2d80, 0xffff, 0xffff, + 0x2d9a, 0x2dbb, 0x2dd4, 0x2de6, 0xffff, 0xffff, 0x2df5, 0x2e06, + 0x2e13, 0xffff, 0x2e22, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2e48, 0xffff, 0x2e73, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2e80, 0xffff, 0xffff, 0x2e94, 0xffff, 0x2ea1, + 0xffff, 0x2eaf, 0x2ebf, 0x2ecc, 0xffff, 0x2eda, 0x2ef3, 0xffff, + // Entry 3EB80 - 3EBBF + 0xffff, 0xffff, 0x2f0a, 0x2f1f, 0x0094, 0x0052, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0ac8, 0x0ae0, 0x0af2, 0x0b08, 0x0b2b, 0x0b56, + 0x0b79, 0xffff, 0x0bab, 0x0bbd, 0x0bce, 0x0be2, 0x0bfa, 0x0c0b, + 0x0c3f, 0x0c5a, 0x0c7a, 0x0c92, 0x0caa, 0x0cc2, 0x0cd3, 0xffff, + 0xffff, 0x0cea, 0xffff, 0x0d00, 0xffff, 0x0d15, 0x0d2a, 0x0d3c, + 0x0d4e, 0xffff, 0xffff, 0x0d67, 0x0d7c, 0x0d94, 0xffff, 0xffff, + 0xffff, 0x0da5, 0xffff, 0x0dbd, 0x0dd8, 0xffff, 0x0df0, 0x0e08, + 0x0e25, 0xffff, 0xffff, 0xffff, 0xffff, 0x0e37, 0xffff, 0xffff, + // Entry 3EBC0 - 3EBFF + 0x0e49, 0x0e62, 0xffff, 0xffff, 0x0e7b, 0x0e9b, 0x0eb5, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0ec8, 0x0ed8, 0x0eed, + 0x0eff, 0xffff, 0xffff, 0xffff, 0x0f10, 0xffff, 0x0f22, 0xffff, + 0xffff, 0x0f3b, 0xffff, 0x0f57, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0f6c, 0xffff, 0x0f7f, 0x0fa0, 0x0fce, 0x0fd7, 0xffff, 0xffff, + 0xffff, 0x0feb, 0x0ffe, 0x1013, 0xffff, 0xffff, 0x102d, 0x104e, + 0x1067, 0x1079, 0xffff, 0xffff, 0x108d, 0x10a3, 0x10b5, 0xffff, + 0x10c9, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x10ef, 0xffff, + // Entry 3EC00 - 3EC3F + 0x1105, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1117, 0xffff, 0xffff, 0x112b, 0xffff, 0x113d, 0xffff, 0x1150, + 0x1165, 0x1177, 0xffff, 0x118a, 0x11a3, 0xffff, 0xffff, 0xffff, + 0x11ba, 0x11cf, 0x0003, 0x07ed, 0x085c, 0x0820, 0x0031, 0x0007, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 3EC40 - 3EC7F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x24ae, 0x24b7, 0xffff, + 0x2512, 0x003a, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 3EC80 - 3ECBF + 0x24ae, 0x24b7, 0xffff, 0x2512, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x251e, 0x0031, 0x0007, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x24b2, 0x24bb, 0xffff, 0x24c4, + // Entry 3ECC0 - 3ECFF + 0x0002, 0x0003, 0x0108, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000c, 0x0030, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0015, 0x0000, 0x0026, 0x0004, 0x0023, 0x001d, + 0x001a, 0x0020, 0x0001, 0x0052, 0x11ea, 0x0001, 0x0052, 0x120d, + 0x0001, 0x0002, 0x0044, 0x0001, 0x001d, 0x17a0, 0x0003, 0x0000, + 0x002d, 0x002a, 0x0001, 0x0050, 0x0b3a, 0x0001, 0x0006, 0x022e, + 0x0008, 0x0039, 0x0080, 0x0000, 0x00c5, 0x00dd, 0x00ed, 0x0000, + 0x00fe, 0x0002, 0x003c, 0x005e, 0x0003, 0x0040, 0x0000, 0x004f, + // Entry 3ED00 - 3ED3F + 0x000d, 0x0052, 0xffff, 0x1229, 0x123f, 0x1251, 0x1263, 0x126e, + 0x1282, 0x1292, 0x12b0, 0x12be, 0x12d4, 0x12ea, 0x12f9, 0x000d, + 0x0052, 0xffff, 0x1229, 0x123f, 0x1251, 0x1263, 0x126e, 0x1282, + 0x1292, 0x12b0, 0x12be, 0x12d4, 0x12ea, 0x12f9, 0x0003, 0x0062, + 0x0000, 0x0071, 0x000d, 0x0052, 0xffff, 0x1229, 0x123f, 0x1251, + 0x1263, 0x126e, 0x1282, 0x1292, 0x12b0, 0x12be, 0x12d4, 0x12ea, + 0x12f9, 0x000d, 0x0052, 0xffff, 0x1229, 0x123f, 0x1251, 0x1263, + 0x126e, 0x1282, 0x1292, 0x12b0, 0x12be, 0x12d4, 0x12ea, 0x12f9, + // Entry 3ED40 - 3ED7F + 0x0002, 0x0083, 0x00a4, 0x0005, 0x0089, 0x0000, 0x009b, 0x0000, + 0x0092, 0x0007, 0x0052, 0x1303, 0x131a, 0x1329, 0x1345, 0x135b, + 0x137d, 0x1392, 0x0007, 0x0052, 0x1303, 0x131a, 0x1329, 0x1345, + 0x135b, 0x137d, 0x1392, 0x0007, 0x0052, 0x1303, 0x131a, 0x1329, + 0x1345, 0x135b, 0x137d, 0x1392, 0x0005, 0x00aa, 0x0000, 0x00bc, + 0x0000, 0x00b3, 0x0007, 0x0052, 0x1303, 0x131a, 0x1329, 0x1345, + 0x135b, 0x137d, 0x1392, 0x0007, 0x0052, 0x1303, 0x131a, 0x1329, + 0x1345, 0x135b, 0x137d, 0x1392, 0x0007, 0x0052, 0x1303, 0x131a, + // Entry 3ED80 - 3EDBF + 0x1329, 0x1345, 0x135b, 0x137d, 0x1392, 0x0001, 0x00c7, 0x0003, + 0x00cb, 0x0000, 0x00d4, 0x0002, 0x00ce, 0x00d1, 0x0001, 0x0052, + 0x13a1, 0x0001, 0x0052, 0x13ae, 0x0002, 0x00d7, 0x00da, 0x0001, + 0x0052, 0x13a1, 0x0001, 0x0052, 0x13ae, 0x0003, 0x00e7, 0x0000, + 0x00e1, 0x0001, 0x00e3, 0x0002, 0x0052, 0x13b9, 0x13c9, 0x0001, + 0x00e9, 0x0002, 0x0052, 0x13e0, 0x13e7, 0x0004, 0x00fb, 0x00f5, + 0x00f2, 0x00f8, 0x0001, 0x0052, 0x13f0, 0x0001, 0x0052, 0x1411, + 0x0001, 0x0002, 0x0282, 0x0001, 0x0015, 0x14be, 0x0003, 0x0000, + // Entry 3EDC0 - 3EDFF + 0x0105, 0x0102, 0x0001, 0x0050, 0x0b3a, 0x0001, 0x0006, 0x022e, + 0x0037, 0x0140, 0x0000, 0x0000, 0x0145, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x014a, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0155, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x015a, + // Entry 3EE00 - 3EE3F + 0x0001, 0x0142, 0x0001, 0x0052, 0x142b, 0x0001, 0x0147, 0x0001, + 0x0052, 0x143a, 0x0002, 0x014d, 0x0150, 0x0001, 0x0052, 0x1441, + 0x0003, 0x0052, 0x144a, 0x1464, 0x1472, 0x0001, 0x0157, 0x0001, + 0x0052, 0x148b, 0x0001, 0x015c, 0x0001, 0x0052, 0x1498, 0x0002, + 0x0003, 0x00e9, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000c, 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, 0x0023, 0x001d, 0x001a, + 0x0020, 0x0001, 0x0002, 0x0000, 0x0001, 0x0002, 0x0010, 0x0001, + // Entry 3EE40 - 3EE7F + 0x0002, 0x001b, 0x0001, 0x001d, 0x0786, 0x0008, 0x002f, 0x0066, + 0x008b, 0x009f, 0x00b7, 0x00c7, 0x00d8, 0x0000, 0x0002, 0x0032, + 0x0054, 0x0003, 0x0036, 0x0000, 0x0045, 0x000d, 0x0052, 0xffff, + 0x14a5, 0x14aa, 0x14af, 0x14ba, 0x14bf, 0x14c4, 0x14c8, 0x14cc, + 0x14d1, 0x14d7, 0x14db, 0x14df, 0x000d, 0x0052, 0xffff, 0x14e3, + 0x14aa, 0x14f2, 0x14ba, 0x14ff, 0x1505, 0x150e, 0x151b, 0x1525, + 0x152c, 0x14db, 0x1532, 0x0002, 0x0000, 0x0057, 0x000d, 0x0000, + 0xffff, 0x3a8d, 0x2722, 0x2b3e, 0x2289, 0x2b3e, 0x2773, 0x2722, + // Entry 3EE80 - 3EEBF + 0x3a8d, 0x3a8d, 0x2296, 0x2773, 0x3a8d, 0x0002, 0x0069, 0x007f, + 0x0003, 0x006d, 0x0000, 0x0076, 0x0007, 0x0052, 0x1545, 0x154b, + 0x1550, 0x1555, 0x155d, 0x1564, 0x156b, 0x0007, 0x0052, 0x1573, + 0x1580, 0x158b, 0x1597, 0x15a6, 0x15b4, 0x15c2, 0x0002, 0x0000, + 0x0082, 0x0007, 0x0000, 0x25ed, 0x257b, 0x2246, 0x2b3e, 0x3aeb, + 0x2b3e, 0x25eb, 0x0001, 0x008d, 0x0003, 0x0091, 0x0000, 0x0098, + 0x0005, 0x002b, 0xffff, 0x19ff, 0x1a02, 0x1a05, 0x1a08, 0x0005, + 0x0052, 0xffff, 0x15d1, 0x15e7, 0x15fe, 0x161d, 0x0001, 0x00a1, + // Entry 3EEC0 - 3EEFF + 0x0003, 0x00a5, 0x0000, 0x00ae, 0x0002, 0x00a8, 0x00ab, 0x0001, + 0x0052, 0x1639, 0x0001, 0x0052, 0x163c, 0x0002, 0x00b1, 0x00b4, + 0x0001, 0x0052, 0x1639, 0x0001, 0x0052, 0x163c, 0x0003, 0x00c1, + 0x0000, 0x00bb, 0x0001, 0x00bd, 0x0002, 0x0052, 0x1640, 0x1654, + 0x0001, 0x00c3, 0x0002, 0x0039, 0x03d7, 0x201f, 0x0004, 0x00d5, + 0x00cf, 0x00cc, 0x00d2, 0x0001, 0x0002, 0x0025, 0x0001, 0x0002, + 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, 0x001d, 0x0793, 0x0004, + 0x00e6, 0x00e0, 0x00dd, 0x00e3, 0x0001, 0x0052, 0x1663, 0x0001, + // Entry 3EF00 - 3EF3F + 0x0052, 0x1672, 0x0001, 0x0002, 0x04fe, 0x0001, 0x0002, 0x0508, + 0x003d, 0x0127, 0x0000, 0x0000, 0x012c, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0131, 0x0000, 0x0000, 0x0136, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x013b, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0146, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x014b, + // Entry 3EF40 - 3EF7F + 0x0000, 0x0000, 0x0150, 0x0000, 0x0000, 0x0155, 0x0001, 0x0129, + 0x0001, 0x0052, 0x167e, 0x0001, 0x012e, 0x0001, 0x0052, 0x168f, + 0x0001, 0x0133, 0x0001, 0x0052, 0x14c8, 0x0001, 0x0138, 0x0001, + 0x0052, 0x1697, 0x0002, 0x013e, 0x0141, 0x0001, 0x0052, 0x1545, + 0x0003, 0x0052, 0x169d, 0x16a1, 0x16a7, 0x0001, 0x0148, 0x0001, + 0x0052, 0x16ac, 0x0001, 0x014d, 0x0001, 0x0052, 0x16b8, 0x0001, + 0x0152, 0x0001, 0x0047, 0x04d4, 0x0001, 0x0157, 0x0001, 0x0052, + 0x16be, 0x0002, 0x0003, 0x00d1, 0x0008, 0x0000, 0x0000, 0x0000, + // Entry 3EF80 - 3EFBF + 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, 0x0023, + 0x001d, 0x001a, 0x0020, 0x0001, 0x0006, 0x000d, 0x0001, 0x0002, + 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0002, 0x0587, 0x0008, + 0x002f, 0x0066, 0x008b, 0x0000, 0x009f, 0x00af, 0x00c0, 0x0000, + 0x0002, 0x0032, 0x0054, 0x0003, 0x0036, 0x0000, 0x0045, 0x000d, + 0x0013, 0xffff, 0x0000, 0x0004, 0x0008, 0x000c, 0x0010, 0x0014, + 0x0018, 0x001c, 0x0020, 0x0024, 0x0028, 0x002c, 0x000d, 0x0013, + // Entry 3EFC0 - 3EFFF + 0xffff, 0x0030, 0x003c, 0x0047, 0x0053, 0x005c, 0x0068, 0x0074, + 0x0081, 0x008d, 0x0098, 0x00a2, 0x00b5, 0x0002, 0x0000, 0x0057, + 0x000d, 0x0000, 0xffff, 0x257b, 0x2b4e, 0x2b3c, 0x2b42, 0x2b3c, + 0x257b, 0x257b, 0x2b42, 0x2b3a, 0x2b50, 0x2b40, 0x2b3e, 0x0002, + 0x0069, 0x007f, 0x0003, 0x006d, 0x0000, 0x0076, 0x0007, 0x0013, + 0x00c8, 0x00cc, 0x00d0, 0x00d4, 0x00d8, 0x4791, 0x00e0, 0x0007, + 0x0013, 0x00e4, 0x00ea, 0x00f6, 0x0101, 0x010d, 0x0116, 0x0122, + 0x0002, 0x0000, 0x0082, 0x0007, 0x0000, 0x2b3a, 0x2773, 0x2246, + // Entry 3F000 - 3F03F + 0x2b3a, 0x2b40, 0x3a8d, 0x2b3c, 0x0001, 0x008d, 0x0003, 0x0091, + 0x0000, 0x0098, 0x0005, 0x0000, 0xffff, 0x1f17, 0x1f1a, 0x1f1d, + 0x1f20, 0x0005, 0x0013, 0xffff, 0x012e, 0x0136, 0x013e, 0x0146, + 0x0003, 0x00a9, 0x0000, 0x00a3, 0x0001, 0x00a5, 0x0002, 0x0013, + 0x014e, 0x0162, 0x0001, 0x00ab, 0x0002, 0x0009, 0x0078, 0x57b0, + 0x0004, 0x00bd, 0x00b7, 0x00b4, 0x00ba, 0x0001, 0x0006, 0x015b, + 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, 0x0002, + 0x08e8, 0x0004, 0x00ce, 0x00c8, 0x00c5, 0x00cb, 0x0001, 0x0000, + // Entry 3F040 - 3F07F + 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, + 0x0000, 0x0546, 0x0040, 0x0112, 0x0000, 0x0000, 0x0117, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x011c, 0x0000, 0x0000, 0x0121, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0126, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0131, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0136, + // Entry 3F080 - 3F0BF + 0x0000, 0x013b, 0x0000, 0x0000, 0x0140, 0x0000, 0x0000, 0x0145, + 0x0000, 0x0000, 0x014a, 0x0001, 0x0114, 0x0001, 0x0013, 0x0173, + 0x0001, 0x0119, 0x0001, 0x0013, 0x017b, 0x0001, 0x011e, 0x0001, + 0x0013, 0x0182, 0x0001, 0x0123, 0x0001, 0x0013, 0x0189, 0x0002, + 0x0129, 0x012c, 0x0001, 0x0013, 0x0190, 0x0003, 0x0013, 0x0198, + 0x01a4, 0x01ad, 0x0001, 0x0133, 0x0001, 0x0013, 0x01b9, 0x0001, + 0x0138, 0x0001, 0x0013, 0x01ce, 0x0001, 0x013d, 0x0001, 0x0013, + 0x01e1, 0x0001, 0x0142, 0x0001, 0x0013, 0x01e8, 0x0001, 0x0147, + // Entry 3F0C0 - 3F0FF + 0x0001, 0x0013, 0x01f1, 0x0001, 0x014c, 0x0001, 0x0052, 0x16c8, + 0x0003, 0x0004, 0x0000, 0x0197, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000d, 0x0027, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, 0x0000, 0x0004, 0x0024, + 0x001e, 0x001b, 0x0021, 0x0001, 0x000c, 0x0000, 0x0001, 0x0000, + 0x1e0b, 0x0001, 0x001d, 0x04f7, 0x0001, 0x001d, 0x17a0, 0x0008, + 0x0030, 0x0095, 0x00e3, 0x0118, 0x0150, 0x0164, 0x0175, 0x0186, + 0x0002, 0x0033, 0x0064, 0x0003, 0x0037, 0x0046, 0x0055, 0x000d, + // Entry 3F100 - 3F13F + 0x0052, 0xffff, 0x16d3, 0x16d7, 0x16db, 0x16df, 0x16e3, 0x16e7, + 0x16eb, 0x16ef, 0x16f3, 0x16f7, 0x16fb, 0x16ff, 0x000d, 0x0000, + 0xffff, 0x257b, 0x2b4e, 0x2b3c, 0x2b42, 0x2b3c, 0x257b, 0x257b, + 0x2b42, 0x2b3a, 0x2b50, 0x2b40, 0x2b3e, 0x000d, 0x0052, 0xffff, + 0x1703, 0x170b, 0x1717, 0x1723, 0x1728, 0x172f, 0x173a, 0x1745, + 0x174d, 0x1756, 0x1763, 0x176b, 0x0003, 0x0068, 0x0077, 0x0086, + 0x000d, 0x0052, 0xffff, 0x16d3, 0x16d7, 0x16db, 0x16df, 0x16e3, + 0x16e7, 0x16eb, 0x16ef, 0x16f3, 0x16f7, 0x16fb, 0x16ff, 0x000d, + // Entry 3F140 - 3F17F + 0x0000, 0xffff, 0x257b, 0x2b4e, 0x2b3c, 0x2b42, 0x2b3c, 0x257b, + 0x257b, 0x2b42, 0x2b3a, 0x2b50, 0x2b40, 0x2b3e, 0x000d, 0x0052, + 0xffff, 0x1703, 0x170b, 0x1717, 0x1723, 0x1728, 0x172f, 0x173a, + 0x1745, 0x174d, 0x1756, 0x1763, 0x176b, 0x0002, 0x0098, 0x00b9, + 0x0005, 0x009e, 0x0000, 0x00b0, 0x0000, 0x00a7, 0x0007, 0x0052, + 0x1772, 0x1776, 0x177a, 0x177e, 0x1782, 0x1786, 0x178a, 0x0007, + 0x0052, 0x1772, 0x1776, 0x177a, 0x177e, 0x1782, 0x1786, 0x178a, + 0x0007, 0x0052, 0x178e, 0x1796, 0x179e, 0x17a6, 0x17ad, 0x17b5, + // Entry 3F180 - 3F1BF + 0x17bd, 0x0005, 0x00bf, 0x00c8, 0x00da, 0x0000, 0x00d1, 0x0007, + 0x0052, 0x1772, 0x1776, 0x177a, 0x177e, 0x1782, 0x1786, 0x178a, + 0x0007, 0x0000, 0x2b3a, 0x2b3c, 0x3a8d, 0x2151, 0x3a8d, 0x2b4e, + 0x2b3a, 0x0007, 0x0052, 0x1772, 0x1776, 0x177a, 0x177e, 0x1782, + 0x1786, 0x178a, 0x0007, 0x0052, 0x178e, 0x1796, 0x179e, 0x17a6, + 0x17ad, 0x17b5, 0x17bd, 0x0002, 0x00e6, 0x00ff, 0x0003, 0x00ea, + 0x00f1, 0x00f8, 0x0005, 0x0000, 0xffff, 0x04e3, 0x39f2, 0x39f5, + 0x39f8, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + // Entry 3F1C0 - 3F1FF + 0x0005, 0x0052, 0xffff, 0x17c5, 0x17d0, 0x17db, 0x17e6, 0x0003, + 0x0103, 0x010a, 0x0111, 0x0005, 0x0000, 0xffff, 0x04e3, 0x39f2, + 0x39f5, 0x39f8, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x0005, 0x0052, 0xffff, 0x17c5, 0x17d0, 0x17db, 0x17e6, + 0x0002, 0x011b, 0x0131, 0x0003, 0x011f, 0x0000, 0x0128, 0x0002, + 0x0122, 0x0125, 0x0001, 0x0052, 0x17f1, 0x0001, 0x0052, 0x17f4, + 0x0002, 0x012b, 0x012e, 0x0001, 0x0052, 0x17f1, 0x0001, 0x0052, + 0x17f4, 0x0003, 0x0135, 0x013e, 0x0147, 0x0002, 0x0138, 0x013b, + // Entry 3F200 - 3F23F + 0x0001, 0x0052, 0x17f1, 0x0001, 0x0052, 0x17f4, 0x0002, 0x0141, + 0x0144, 0x0001, 0x0052, 0x17f1, 0x0001, 0x0052, 0x17f4, 0x0002, + 0x014a, 0x014d, 0x0001, 0x0052, 0x17f1, 0x0001, 0x0052, 0x17f4, + 0x0003, 0x015e, 0x0000, 0x0154, 0x0002, 0x0157, 0x015a, 0x0001, + 0x0052, 0x17f7, 0x0002, 0x0000, 0x04f5, 0x2701, 0x0001, 0x0160, + 0x0002, 0x0000, 0x04f5, 0x2701, 0x0004, 0x0172, 0x016c, 0x0169, + 0x016f, 0x0001, 0x000c, 0x03c9, 0x0001, 0x0001, 0x002d, 0x0001, + 0x001d, 0x0502, 0x0001, 0x0015, 0x14be, 0x0004, 0x0183, 0x017d, + // Entry 3F240 - 3F27F + 0x017a, 0x0180, 0x0001, 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, + 0x0001, 0x0002, 0x04fe, 0x0001, 0x0002, 0x0508, 0x0004, 0x0194, + 0x018e, 0x018b, 0x0191, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0004, + 0x019c, 0x0000, 0x0000, 0x0000, 0x0002, 0x0000, 0x1dc7, 0x39fb, + 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000b, 0x0007, 0x0013, 0x0028, 0x0037, 0x0000, + 0x0042, 0x0000, 0x004e, 0x0002, 0x0000, 0x0016, 0x0002, 0x0000, + // Entry 3F280 - 3F2BF + 0x0019, 0x000d, 0x0000, 0xffff, 0x2b42, 0x2289, 0x25eb, 0x2146, + 0x25ed, 0x2151, 0x2b42, 0x2b29, 0x2b4e, 0x2b50, 0x2b3a, 0x2b3c, + 0x0002, 0x0000, 0x002b, 0x0002, 0x0000, 0x002e, 0x0007, 0x0000, + 0x2b3e, 0x2151, 0x3aee, 0x2246, 0x2773, 0x257b, 0x2b3a, 0x0001, + 0x0039, 0x0001, 0x003b, 0x0005, 0x0000, 0xffff, 0x1f17, 0x1f1a, + 0x1f1d, 0x1f20, 0x0001, 0x0044, 0x0002, 0x0047, 0x004a, 0x0001, + 0x0052, 0x1808, 0x0002, 0x0000, 0x04f5, 0x3af0, 0x0004, 0x005c, + 0x0056, 0x0053, 0x0059, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, + // Entry 3F2C0 - 3F2FF + 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0003, + 0x0004, 0x01c0, 0x05f1, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000d, 0x0038, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0016, 0x0000, 0x0027, 0x0004, 0x0024, 0x001e, + 0x001b, 0x0021, 0x0001, 0x000c, 0x0000, 0x0001, 0x000c, 0x0012, + 0x0001, 0x000c, 0x001e, 0x0001, 0x0013, 0x0203, 0x0004, 0x0035, + 0x002f, 0x002c, 0x0032, 0x0001, 0x0052, 0x180b, 0x0001, 0x0052, + 0x180b, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, + // Entry 3F300 - 3F33F + 0x0041, 0x00a6, 0x00fd, 0x0132, 0x0173, 0x018d, 0x019e, 0x01af, + 0x0002, 0x0044, 0x0075, 0x0003, 0x0048, 0x0057, 0x0066, 0x000d, + 0x0052, 0xffff, 0x181a, 0x1830, 0x1846, 0x185c, 0x186f, 0x1876, + 0x1880, 0x1890, 0x18a0, 0x18bf, 0x18d5, 0x18eb, 0x000d, 0x0052, + 0xffff, 0x1904, 0x190b, 0x1912, 0x1919, 0x186f, 0x191d, 0x191d, + 0x1919, 0x1924, 0x1919, 0x192b, 0x192f, 0x000d, 0x0052, 0xffff, + 0x181a, 0x1830, 0x1846, 0x185c, 0x186f, 0x1876, 0x1880, 0x1890, + 0x18a0, 0x18bf, 0x18d5, 0x18eb, 0x0003, 0x0079, 0x0088, 0x0097, + // Entry 3F340 - 3F37F + 0x000d, 0x0052, 0xffff, 0x181a, 0x1830, 0x1846, 0x185c, 0x186f, + 0x1876, 0x1880, 0x1890, 0x18a0, 0x18bf, 0x18d5, 0x18eb, 0x000d, + 0x0052, 0xffff, 0x1904, 0x190b, 0x1912, 0x1919, 0x186f, 0x191d, + 0x191d, 0x1919, 0x1924, 0x1919, 0x192b, 0x192f, 0x000d, 0x0052, + 0xffff, 0x181a, 0x1830, 0x1846, 0x185c, 0x186f, 0x1876, 0x1880, + 0x1890, 0x18a0, 0x18bf, 0x18d5, 0x18eb, 0x0002, 0x00a9, 0x00d3, + 0x0005, 0x00af, 0x00b8, 0x00ca, 0x0000, 0x00c1, 0x0007, 0x0052, + 0x1936, 0x1940, 0x194a, 0x195a, 0x1964, 0x1971, 0x1981, 0x0007, + // Entry 3F380 - 3F3BF + 0x0052, 0x198b, 0x198f, 0x1996, 0x199a, 0x19a1, 0x19a8, 0x19af, + 0x0007, 0x0052, 0x1936, 0x1940, 0x194a, 0x195a, 0x1964, 0x1971, + 0x1981, 0x0007, 0x0052, 0x19b3, 0x19c6, 0x19d9, 0x19f2, 0x1a05, + 0x1a1b, 0x1a34, 0x0005, 0x00d9, 0x00e2, 0x00f4, 0x0000, 0x00eb, + 0x0007, 0x0052, 0x1936, 0x1940, 0x194a, 0x195a, 0x1964, 0x1971, + 0x1981, 0x0007, 0x0052, 0x198b, 0x198f, 0x1996, 0x199a, 0x19a1, + 0x19a8, 0x19af, 0x0007, 0x0052, 0x1936, 0x1940, 0x194a, 0x195a, + 0x1964, 0x1971, 0x1981, 0x0007, 0x0052, 0x19b3, 0x19c6, 0x19d9, + // Entry 3F3C0 - 3F3FF + 0x19f2, 0x1a05, 0x1a1b, 0x1a34, 0x0002, 0x0100, 0x0119, 0x0003, + 0x0104, 0x010b, 0x0112, 0x0005, 0x0052, 0xffff, 0x1a47, 0x1a62, + 0x1a7d, 0x1a98, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x0005, 0x0052, 0xffff, 0x1a47, 0x1a62, 0x1a7d, 0x1a98, + 0x0003, 0x011d, 0x0124, 0x012b, 0x0005, 0x0000, 0xffff, 0x04e3, + 0x39f2, 0x39f5, 0x39f8, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x0005, 0x0052, 0xffff, 0x1a47, 0x1a62, 0x1a7d, + 0x1a98, 0x0002, 0x0135, 0x0154, 0x0003, 0x0139, 0x0142, 0x014b, + // Entry 3F400 - 3F43F + 0x0002, 0x013c, 0x013f, 0x0001, 0x0000, 0x23cd, 0x0001, 0x0000, + 0x23d0, 0x0002, 0x0145, 0x0148, 0x0001, 0x0052, 0x1ab9, 0x0001, + 0x0052, 0x1919, 0x0002, 0x014e, 0x0151, 0x0001, 0x0000, 0x04ef, + 0x0001, 0x0000, 0x04f2, 0x0003, 0x0158, 0x0161, 0x016a, 0x0002, + 0x015b, 0x015e, 0x0001, 0x0052, 0x1ac0, 0x0001, 0x0052, 0x1adc, + 0x0002, 0x0164, 0x0167, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0052, + 0x1adc, 0x0002, 0x016d, 0x0170, 0x0001, 0x0052, 0x1ac0, 0x0001, + 0x0052, 0x1adc, 0x0003, 0x0182, 0x0000, 0x0177, 0x0002, 0x017a, + // Entry 3F440 - 3F47F + 0x017e, 0x0002, 0x0052, 0x1af2, 0x1b56, 0x0002, 0x0052, 0x1b17, + 0x1b78, 0x0002, 0x0185, 0x0189, 0x0002, 0x0009, 0x0078, 0x57b0, + 0x0002, 0x0000, 0x04f5, 0x2701, 0x0004, 0x019b, 0x0195, 0x0192, + 0x0198, 0x0001, 0x000c, 0x03c9, 0x0001, 0x000c, 0x03d9, 0x0001, + 0x000c, 0x03e3, 0x0001, 0x000c, 0x03ec, 0x0004, 0x01ac, 0x01a6, + 0x01a3, 0x01a9, 0x0001, 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, + 0x0001, 0x0002, 0x04fe, 0x0001, 0x0002, 0x0508, 0x0004, 0x01bd, + 0x01b7, 0x01b4, 0x01ba, 0x0001, 0x0052, 0x1ba1, 0x0001, 0x0052, + // Entry 3F480 - 3F4BF + 0x1ba1, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0042, + 0x0203, 0x0208, 0x020d, 0x0212, 0x0229, 0x023b, 0x024d, 0x0264, + 0x0276, 0x0288, 0x029f, 0x02b1, 0x02c3, 0x02de, 0x02f4, 0x030a, + 0x030f, 0x0314, 0x0319, 0x0330, 0x0342, 0x0354, 0x0359, 0x035e, + 0x0363, 0x0368, 0x036d, 0x0372, 0x0377, 0x037c, 0x0381, 0x0395, + 0x03a9, 0x03bd, 0x03d1, 0x03e5, 0x03f9, 0x040d, 0x0421, 0x0435, + 0x0449, 0x045d, 0x0471, 0x0485, 0x0499, 0x04ad, 0x04c1, 0x04d5, + 0x04e9, 0x04fd, 0x0511, 0x0525, 0x052a, 0x052f, 0x0534, 0x054a, + // Entry 3F4C0 - 3F4FF + 0x055c, 0x056e, 0x0584, 0x0596, 0x05a8, 0x05be, 0x05d0, 0x05e2, + 0x05e7, 0x05ec, 0x0001, 0x0205, 0x0001, 0x0052, 0x1bb6, 0x0001, + 0x020a, 0x0001, 0x0052, 0x1bb6, 0x0001, 0x020f, 0x0001, 0x0052, + 0x1bb6, 0x0003, 0x0216, 0x0219, 0x021e, 0x0001, 0x0052, 0x1bc0, + 0x0003, 0x0052, 0x1bcd, 0x1be1, 0x1bf8, 0x0002, 0x0221, 0x0225, + 0x0002, 0x0052, 0x1c15, 0x1c15, 0x0002, 0x0052, 0x1c2c, 0x1c2c, + 0x0003, 0x022d, 0x0000, 0x0230, 0x0001, 0x0052, 0x1c50, 0x0002, + 0x0233, 0x0237, 0x0002, 0x0052, 0x1c55, 0x1c55, 0x0002, 0x0052, + // Entry 3F500 - 3F53F + 0x1c65, 0x1c65, 0x0003, 0x023f, 0x0000, 0x0242, 0x0001, 0x0052, + 0x1c50, 0x0002, 0x0245, 0x0249, 0x0002, 0x0052, 0x1c55, 0x1c55, + 0x0002, 0x0052, 0x1c65, 0x1c65, 0x0003, 0x0251, 0x0254, 0x0259, + 0x0001, 0x0052, 0x1c81, 0x0003, 0x0052, 0x1c97, 0x1c97, 0x1cb4, + 0x0002, 0x025c, 0x0260, 0x0002, 0x0052, 0x1cda, 0x1cda, 0x0002, + 0x0052, 0x1cfa, 0x1cfa, 0x0003, 0x0268, 0x0000, 0x026b, 0x0001, + 0x0052, 0x1d27, 0x0002, 0x026e, 0x0272, 0x0002, 0x0052, 0x1d35, + 0x1d35, 0x0002, 0x0052, 0x1d4e, 0x1d4e, 0x0003, 0x027a, 0x0000, + // Entry 3F540 - 3F57F + 0x027d, 0x0001, 0x0052, 0x1d27, 0x0002, 0x0280, 0x0284, 0x0002, + 0x0052, 0x1d35, 0x1d35, 0x0002, 0x0052, 0x1d4e, 0x1d4e, 0x0003, + 0x028c, 0x028f, 0x0294, 0x0001, 0x0052, 0x1d73, 0x0003, 0x0052, + 0x1d7d, 0x1d8e, 0x1da2, 0x0002, 0x0297, 0x029b, 0x0002, 0x0052, + 0x1dbc, 0x1dbc, 0x0002, 0x0052, 0x1dd0, 0x1dd0, 0x0003, 0x02a3, + 0x0000, 0x02a6, 0x0001, 0x0052, 0x1df1, 0x0002, 0x02a9, 0x02ad, + 0x0002, 0x0052, 0x1df9, 0x1df9, 0x0002, 0x0052, 0x1e0c, 0x1e0c, + 0x0003, 0x02b5, 0x0000, 0x02b8, 0x0001, 0x0052, 0x1df1, 0x0002, + // Entry 3F580 - 3F5BF + 0x02bb, 0x02bf, 0x0002, 0x0052, 0x1df9, 0x1df9, 0x0002, 0x0052, + 0x1e0c, 0x1e0c, 0x0004, 0x02c8, 0x02cb, 0x02d0, 0x02db, 0x0001, + 0x0052, 0x1e2b, 0x0003, 0x0052, 0x1e3e, 0x1e58, 0x1e75, 0x0002, + 0x02d3, 0x02d7, 0x0002, 0x0052, 0x1e98, 0x1e98, 0x0002, 0x0052, + 0x1eb5, 0x1e98, 0x0001, 0x0052, 0x1edf, 0x0004, 0x02e3, 0x0000, + 0x02e6, 0x02f1, 0x0001, 0x0052, 0x1efa, 0x0002, 0x02e9, 0x02ed, + 0x0002, 0x0052, 0x1eff, 0x1eff, 0x0002, 0x0052, 0x1f1b, 0x1f1b, + 0x0001, 0x0052, 0x1edf, 0x0004, 0x02f9, 0x0000, 0x02fc, 0x0307, + // Entry 3F5C0 - 3F5FF + 0x0001, 0x0052, 0x1efa, 0x0002, 0x02ff, 0x0303, 0x0002, 0x0052, + 0x1eff, 0x1eff, 0x0002, 0x0052, 0x1f1b, 0x1f1b, 0x0001, 0x0052, + 0x1edf, 0x0001, 0x030c, 0x0001, 0x0052, 0x1f43, 0x0001, 0x0311, + 0x0001, 0x0052, 0x1f63, 0x0001, 0x0316, 0x0001, 0x0052, 0x1f63, + 0x0003, 0x031d, 0x0320, 0x0325, 0x0001, 0x0052, 0x1f74, 0x0003, + 0x0052, 0x1f7e, 0x1f91, 0x1f9b, 0x0002, 0x0328, 0x032c, 0x0002, + 0x0052, 0x1fba, 0x1fba, 0x0002, 0x0052, 0x1fce, 0x1fce, 0x0003, + 0x0334, 0x0000, 0x0337, 0x0001, 0x0052, 0x1f74, 0x0002, 0x033a, + // Entry 3F600 - 3F63F + 0x033e, 0x0002, 0x0052, 0x1fba, 0x1fba, 0x0002, 0x0052, 0x1fce, + 0x1fce, 0x0003, 0x0346, 0x0000, 0x0349, 0x0001, 0x0052, 0x1f74, + 0x0002, 0x034c, 0x0350, 0x0002, 0x0052, 0x1fba, 0x1fba, 0x0002, + 0x0052, 0x1fce, 0x1fce, 0x0001, 0x0356, 0x0001, 0x0053, 0x0000, + 0x0001, 0x035b, 0x0001, 0x0053, 0x001a, 0x0001, 0x0360, 0x0001, + 0x0053, 0x001a, 0x0001, 0x0365, 0x0001, 0x0053, 0x002d, 0x0001, + 0x036a, 0x0001, 0x0053, 0x002d, 0x0001, 0x036f, 0x0001, 0x0053, + 0x002d, 0x0001, 0x0374, 0x0001, 0x0053, 0x0040, 0x0001, 0x0379, + // Entry 3F640 - 3F67F + 0x0001, 0x0053, 0x0073, 0x0001, 0x037e, 0x0001, 0x0053, 0x0073, + 0x0003, 0x0000, 0x0385, 0x038a, 0x0003, 0x0053, 0x0090, 0x00aa, + 0x00c7, 0x0002, 0x038d, 0x0391, 0x0002, 0x0053, 0x00ea, 0x00ea, + 0x0002, 0x0053, 0x0107, 0x0107, 0x0003, 0x0000, 0x0399, 0x039e, + 0x0003, 0x0053, 0x0131, 0x0143, 0x0158, 0x0002, 0x03a1, 0x03a5, + 0x0002, 0x0053, 0x0173, 0x0173, 0x0002, 0x0053, 0x0189, 0x0189, + 0x0003, 0x0000, 0x03ad, 0x03b2, 0x0003, 0x0053, 0x0131, 0x0143, + 0x0158, 0x0002, 0x03b5, 0x03b9, 0x0002, 0x0053, 0x0173, 0x0173, + // Entry 3F680 - 3F6BF + 0x0002, 0x0053, 0x0189, 0x0189, 0x0003, 0x0000, 0x03c1, 0x03c6, + 0x0003, 0x0053, 0x01ab, 0x01c5, 0x01e2, 0x0002, 0x03c9, 0x03cd, + 0x0002, 0x0053, 0x0208, 0x0208, 0x0002, 0x0053, 0x0225, 0x0225, + 0x0003, 0x0000, 0x03d5, 0x03da, 0x0003, 0x0053, 0x024f, 0x0261, + 0x0276, 0x0002, 0x03dd, 0x03e1, 0x0002, 0x0053, 0x0294, 0x0294, + 0x0002, 0x0053, 0x02aa, 0x02aa, 0x0003, 0x0000, 0x03e9, 0x03ee, + 0x0003, 0x0053, 0x02cc, 0x02da, 0x02eb, 0x0002, 0x03f1, 0x03f5, + 0x0002, 0x0053, 0x0305, 0x0305, 0x0002, 0x0053, 0x0317, 0x0317, + // Entry 3F6C0 - 3F6FF + 0x0003, 0x0000, 0x03fd, 0x0402, 0x0003, 0x0053, 0x0335, 0x0355, + 0x0378, 0x0002, 0x0405, 0x0409, 0x0002, 0x0053, 0x03a1, 0x03a1, + 0x0002, 0x0053, 0x03c4, 0x03c4, 0x0003, 0x0000, 0x0411, 0x0416, + 0x0003, 0x0053, 0x03f4, 0x040c, 0x0427, 0x0002, 0x0419, 0x041d, + 0x0002, 0x0053, 0x0448, 0x0448, 0x0002, 0x0053, 0x0464, 0x0464, + 0x0003, 0x0000, 0x0425, 0x042a, 0x0003, 0x0053, 0x03f4, 0x040c, + 0x0427, 0x0002, 0x042d, 0x0431, 0x0002, 0x0053, 0x0448, 0x0448, + 0x0002, 0x0053, 0x0464, 0x0464, 0x0003, 0x0000, 0x0439, 0x043e, + // Entry 3F700 - 3F73F + 0x0003, 0x0053, 0x048c, 0x04a6, 0x04c3, 0x0002, 0x0441, 0x0445, + 0x0002, 0x0053, 0x04e9, 0x04e9, 0x0002, 0x0053, 0x0506, 0x0506, + 0x0003, 0x0000, 0x044d, 0x0452, 0x0003, 0x0053, 0x0530, 0x0542, + 0x0557, 0x0002, 0x0455, 0x0459, 0x0002, 0x0053, 0x0575, 0x0575, + 0x0002, 0x0053, 0x058b, 0x058b, 0x0003, 0x0000, 0x0461, 0x0466, + 0x0003, 0x0053, 0x05ad, 0x05be, 0x05d2, 0x0002, 0x0469, 0x046d, + 0x0002, 0x0053, 0x0575, 0x0575, 0x0002, 0x0053, 0x058b, 0x058b, + 0x0003, 0x0000, 0x0475, 0x047a, 0x0003, 0x0053, 0x05ef, 0x060c, + // Entry 3F740 - 3F77F + 0x062c, 0x0002, 0x047d, 0x0481, 0x0002, 0x0053, 0x0652, 0x0652, + 0x0002, 0x0053, 0x0672, 0x0672, 0x0003, 0x0000, 0x0489, 0x048e, + 0x0003, 0x0053, 0x069f, 0x06b4, 0x06cc, 0x0002, 0x0491, 0x0495, + 0x0002, 0x0053, 0x06ea, 0x06ea, 0x0002, 0x0053, 0x0703, 0x0703, + 0x0003, 0x0000, 0x049d, 0x04a2, 0x0003, 0x0053, 0x069f, 0x06b4, + 0x06cc, 0x0002, 0x04a5, 0x04a9, 0x0002, 0x0053, 0x06ea, 0x06ea, + 0x0002, 0x0053, 0x0703, 0x0703, 0x0003, 0x0000, 0x04b1, 0x04b6, + 0x0003, 0x0053, 0x0728, 0x0748, 0x076b, 0x0002, 0x04b9, 0x04bd, + // Entry 3F780 - 3F7BF + 0x0002, 0x0053, 0x0794, 0x0794, 0x0002, 0x0053, 0x07b7, 0x07b7, + 0x0003, 0x0000, 0x04c5, 0x04ca, 0x0003, 0x0053, 0x07e7, 0x07ff, + 0x081a, 0x0002, 0x04cd, 0x04d1, 0x0002, 0x0053, 0x083b, 0x083b, + 0x0002, 0x0053, 0x0857, 0x0857, 0x0003, 0x0000, 0x04d9, 0x04de, + 0x0003, 0x0053, 0x07e7, 0x07ff, 0x081a, 0x0002, 0x04e1, 0x04e5, + 0x0002, 0x0053, 0x083b, 0x083b, 0x0002, 0x0053, 0x087f, 0x087f, + 0x0003, 0x0000, 0x04ed, 0x04f2, 0x0003, 0x0053, 0x089e, 0x08b8, + 0x08d5, 0x0002, 0x04f5, 0x04f9, 0x0002, 0x0053, 0x08f8, 0x08f8, + // Entry 3F7C0 - 3F7FF + 0x0002, 0x0053, 0x0915, 0x0915, 0x0003, 0x0000, 0x0501, 0x0506, + 0x0003, 0x0053, 0x093f, 0x0951, 0x0966, 0x0002, 0x0509, 0x050d, + 0x0002, 0x0053, 0x0981, 0x0981, 0x0002, 0x0053, 0x0997, 0x0997, + 0x0003, 0x0000, 0x0515, 0x051a, 0x0003, 0x0053, 0x093f, 0x0951, + 0x0966, 0x0002, 0x051d, 0x0521, 0x0002, 0x0053, 0x0981, 0x0981, + 0x0002, 0x0053, 0x0997, 0x0997, 0x0001, 0x0527, 0x0001, 0x0053, + 0x09b9, 0x0001, 0x052c, 0x0001, 0x0053, 0x09b9, 0x0001, 0x0531, + 0x0001, 0x0053, 0x09b9, 0x0003, 0x0538, 0x053b, 0x053f, 0x0001, + // Entry 3F800 - 3F83F + 0x0053, 0x09eb, 0x0002, 0x0053, 0xffff, 0x09fb, 0x0002, 0x0542, + 0x0546, 0x0002, 0x0053, 0x0a15, 0x0a15, 0x0002, 0x0053, 0x0a2f, + 0x0a2f, 0x0003, 0x054e, 0x0000, 0x0551, 0x0001, 0x0053, 0x0a56, + 0x0002, 0x0554, 0x0558, 0x0002, 0x0053, 0x0a5b, 0x0a5b, 0x0002, + 0x0053, 0x0a6b, 0x0a6b, 0x0003, 0x0560, 0x0000, 0x0563, 0x0001, + 0x0053, 0x0a56, 0x0002, 0x0566, 0x056a, 0x0002, 0x0053, 0x0a5b, + 0x0a5b, 0x0002, 0x0053, 0x0a6b, 0x0a6b, 0x0003, 0x0572, 0x0575, + 0x0579, 0x0001, 0x0053, 0x0a87, 0x0002, 0x0053, 0xffff, 0x0a9a, + // Entry 3F840 - 3F87F + 0x0002, 0x057c, 0x0580, 0x0002, 0x0053, 0x0ab7, 0x0ab7, 0x0002, + 0x0053, 0x0ada, 0x0ada, 0x0003, 0x0588, 0x0000, 0x058b, 0x0001, + 0x0053, 0x0b04, 0x0002, 0x058e, 0x0592, 0x0002, 0x0053, 0x0b0c, + 0x0b0c, 0x0002, 0x0053, 0x0b1f, 0x0b1f, 0x0003, 0x059a, 0x0000, + 0x059d, 0x0001, 0x0053, 0x0b04, 0x0002, 0x05a0, 0x05a4, 0x0002, + 0x0053, 0x0b0c, 0x0b0c, 0x0002, 0x0053, 0x0b1f, 0x0b1f, 0x0003, + 0x05ac, 0x05af, 0x05b3, 0x0001, 0x0053, 0x0b3e, 0x0002, 0x0053, + 0xffff, 0x0b57, 0x0002, 0x05b6, 0x05ba, 0x0002, 0x0053, 0x0b73, + // Entry 3F880 - 3F8BF + 0x0b73, 0x0002, 0x0053, 0x0b93, 0x0b93, 0x0003, 0x05c2, 0x0000, + 0x05c5, 0x0001, 0x0053, 0x0b3e, 0x0002, 0x05c8, 0x05cc, 0x0002, + 0x0053, 0x0bc0, 0x0bc0, 0x0002, 0x0053, 0x0bd3, 0x0bd3, 0x0003, + 0x05d4, 0x0000, 0x05d7, 0x0001, 0x0053, 0x0bf2, 0x0002, 0x05da, + 0x05de, 0x0002, 0x0053, 0x0bc0, 0x0bc0, 0x0002, 0x0053, 0x0bd3, + 0x0bd3, 0x0001, 0x05e4, 0x0001, 0x0053, 0x0bfa, 0x0001, 0x05e9, + 0x0001, 0x0053, 0x0c1a, 0x0001, 0x05ee, 0x0001, 0x0053, 0x0c1a, + 0x0004, 0x05f6, 0x05fb, 0x0600, 0x060f, 0x0003, 0x0000, 0x1dc7, + // Entry 3F8C0 - 3F8FF + 0x39fb, 0x3af3, 0x0003, 0x0053, 0x0c30, 0x0c3e, 0x0c62, 0x0002, + 0x0000, 0x0603, 0x0003, 0x0000, 0x060a, 0x0607, 0x0001, 0x0053, + 0x0c86, 0x0003, 0x0053, 0xffff, 0x0cc2, 0x0cfe, 0x0002, 0x07d8, + 0x0612, 0x0003, 0x06ac, 0x0742, 0x0616, 0x0094, 0x0053, 0x0d34, + 0x0d60, 0x0d8d, 0x0dbd, 0x0e39, 0x0ee8, 0x0f71, 0x1006, 0x10a7, + 0x1148, 0x11dd, 0xffff, 0x1266, 0x12da, 0x1366, 0x1432, 0x1508, + 0x15a0, 0x1654, 0x1735, 0x182c, 0x1906, 0x19d3, 0x1a6b, 0x1b03, + 0x1b7e, 0x1b98, 0x1bdb, 0x1c5c, 0x1cc2, 0x1d3f, 0x1d92, 0x1e15, + // Entry 3F900 - 3F93F + 0x1e8c, 0x1f06, 0x1f87, 0x1fc0, 0x201f, 0x20cd, 0x219b, 0x2201, + 0x2221, 0x2263, 0x22cf, 0x237c, 0x23d8, 0x24c4, 0x2577, 0x2614, + 0x2712, 0x27e8, 0x284b, 0x287b, 0x28e3, 0x290c, 0x294f, 0x29b2, + 0x29f7, 0x2a6c, 0x2b6a, 0x2c20, 0x2c4d, 0x2c94, 0x2d32, 0x2db4, + 0x2e23, 0x2e50, 0x2e80, 0x2ea9, 0x2edf, 0x2f18, 0x2f6b, 0x2feb, + 0x308c, 0x3112, 0xffff, 0x3172, 0x319b, 0x31f1, 0x3251, 0x32a0, + 0x3339, 0x3365, 0x33c5, 0x3439, 0x348f, 0x350a, 0x352a, 0x354d, + 0x357f, 0x35e7, 0x3656, 0x36bb, 0x37ad, 0x387e, 0x392d, 0x3996, + // Entry 3F940 - 3F97F + 0x39bc, 0x39d6, 0x3a23, 0x3aea, 0x3baf, 0x3c5d, 0x3c74, 0x3cf0, + 0x3dec, 0x3e99, 0x3f28, 0x3fa9, 0x3fc3, 0x4017, 0x40a3, 0x412f, + 0x41b6, 0x4249, 0x431d, 0x4346, 0x4363, 0x438f, 0x43b8, 0x43f5, + 0xffff, 0x4484, 0x44e4, 0x4510, 0x4552, 0x458e, 0x45be, 0x45e4, + 0x45fb, 0x4635, 0x469b, 0x46c7, 0x4704, 0x4773, 0x47c2, 0x4855, + 0x488f, 0x492a, 0x49cb, 0x4a34, 0x4a8f, 0x4b5a, 0x4be7, 0x4c0d, + 0x4c37, 0x4c97, 0x4d47, 0x0094, 0x0053, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0e06, 0x0ec8, 0x0f54, 0x0fe0, 0x107e, 0x1125, 0x11ba, + // Entry 3F980 - 3F9BF + 0xffff, 0x124f, 0x12c0, 0x133a, 0x13f3, 0x14e5, 0x1577, 0x161e, + 0x16ec, 0x17f3, 0x18ca, 0x19aa, 0x1a4b, 0x1ae0, 0xffff, 0xffff, + 0x1bb5, 0xffff, 0x1c98, 0xffff, 0x1d72, 0x1dfe, 0x1e78, 0x1ee0, + 0xffff, 0xffff, 0x1fff, 0x2094, 0x217e, 0xffff, 0xffff, 0xffff, + 0x2293, 0xffff, 0x239c, 0x2485, 0xffff, 0x25d2, 0x26cd, 0x27d1, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2932, 0xffff, 0xffff, 0x2a2a, + 0x2b25, 0xffff, 0xffff, 0x2c67, 0x2d1a, 0x2d97, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2f54, 0x2fc5, 0x306c, 0x30f8, + // Entry 3F9C0 - 3F9FF + 0xffff, 0xffff, 0xffff, 0x31d7, 0xffff, 0x326e, 0xffff, 0xffff, + 0x33a1, 0xffff, 0x346c, 0xffff, 0xffff, 0xffff, 0xffff, 0x35c4, + 0xffff, 0x3676, 0x3771, 0x3851, 0x3913, 0xffff, 0xffff, 0xffff, + 0x39f0, 0x3abe, 0x3b6e, 0xffff, 0xffff, 0x3ca4, 0x3dbd, 0x3e7f, + 0x3f02, 0xffff, 0xffff, 0x3ff7, 0x408c, 0x4106, 0xffff, 0x41f5, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x43d5, 0xffff, 0x446a, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x4618, + 0xffff, 0xffff, 0x46e7, 0xffff, 0x478d, 0xffff, 0x4872, 0x48fe, + // Entry 3FA00 - 3FA3F + 0x49ab, 0xffff, 0x4a5a, 0x4b2e, 0xffff, 0xffff, 0xffff, 0x4c74, + 0x4d12, 0x0094, 0x0053, 0xffff, 0xffff, 0xffff, 0xffff, 0x0e82, + 0x0f1e, 0x0fa4, 0x1042, 0x10e6, 0x1181, 0x1216, 0xffff, 0x1293, + 0x130a, 0x13a8, 0x1487, 0x1541, 0x15df, 0x16a0, 0x1794, 0x187b, + 0x1958, 0x1a0f, 0x1aa1, 0x1b3c, 0xffff, 0xffff, 0x1c17, 0xffff, + 0x1d02, 0xffff, 0x1dc8, 0x1e42, 0x1eb6, 0x1f42, 0xffff, 0xffff, + 0x2055, 0x211c, 0x21ce, 0xffff, 0xffff, 0xffff, 0x2321, 0xffff, + 0x242a, 0x2519, 0xffff, 0x266c, 0x276d, 0x2815, 0xffff, 0xffff, + // Entry 3FA40 - 3FA7F + 0xffff, 0xffff, 0x2982, 0xffff, 0xffff, 0x2ac4, 0x2bc5, 0xffff, + 0xffff, 0x2cd7, 0x2d60, 0x2de7, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2f98, 0x3027, 0x30c2, 0x3142, 0xffff, 0xffff, + 0xffff, 0x3221, 0xffff, 0x32e8, 0xffff, 0xffff, 0x33ff, 0xffff, + 0x34c8, 0xffff, 0xffff, 0xffff, 0xffff, 0x3620, 0xffff, 0x3716, + 0x37ff, 0x38c4, 0x395d, 0xffff, 0xffff, 0xffff, 0x3a6c, 0x3b2c, + 0x3c06, 0xffff, 0xffff, 0x3d52, 0x3e31, 0x3ec9, 0x3f64, 0xffff, + 0xffff, 0x404d, 0x40d0, 0x416e, 0xffff, 0x42b3, 0xffff, 0xffff, + // Entry 3FA80 - 3FABF + 0xffff, 0xffff, 0xffff, 0x442b, 0xffff, 0x44b4, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x4668, 0xffff, 0xffff, + 0x4737, 0xffff, 0x480d, 0xffff, 0x48c2, 0x496c, 0x4a01, 0xffff, + 0x4ada, 0x4b9c, 0xffff, 0xffff, 0xffff, 0x4cd0, 0x4d92, 0x0003, + 0x0000, 0x0000, 0x07dc, 0x0042, 0x000b, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 3FAC0 - 3FAFF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0003, + 0x0004, 0x016f, 0x0217, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000d, 0x0038, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0016, 0x0000, 0x0027, 0x0004, 0x0024, 0x001e, + // Entry 3FB00 - 3FB3F + 0x001b, 0x0021, 0x0001, 0x0054, 0x0000, 0x0001, 0x0054, 0x0019, + 0x0001, 0x0054, 0x002c, 0x0001, 0x0014, 0x0370, 0x0004, 0x0035, + 0x002f, 0x002c, 0x0032, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, + 0x022e, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, + 0x0041, 0x00a6, 0x00e7, 0x011c, 0x0134, 0x013c, 0x014d, 0x015e, + 0x0002, 0x0044, 0x0075, 0x0003, 0x0048, 0x0057, 0x0066, 0x000d, + 0x0040, 0xffff, 0x0e23, 0x1fff, 0x2007, 0x200f, 0x2017, 0x2020, + 0x2029, 0x2032, 0x0e62, 0x203a, 0x0e72, 0x2042, 0x000d, 0x0012, + // Entry 3FB40 - 3FB7F + 0xffff, 0x0054, 0x3a36, 0x3a39, 0x3a3c, 0x3a39, 0x3a4f, 0x3a4f, + 0x3a3c, 0x3a3f, 0x0066, 0x3a42, 0x3a52, 0x000d, 0x0054, 0xffff, + 0x003e, 0x004b, 0x005a, 0x006b, 0x0078, 0x0081, 0x008a, 0x0093, + 0x00a2, 0x00b3, 0x00c2, 0x00cf, 0x0003, 0x0079, 0x0088, 0x0097, + 0x000d, 0x0054, 0xffff, 0x00de, 0x00e6, 0x00f0, 0x00fa, 0x0102, + 0x0109, 0x0112, 0x011b, 0x0123, 0x012d, 0x0135, 0x013f, 0x000d, + 0x0012, 0xffff, 0x0054, 0x3a36, 0x3a39, 0x3a3c, 0x3a39, 0x3a4f, + 0x3a4f, 0x3a3c, 0x3a3f, 0x0066, 0x3a42, 0x3a52, 0x000d, 0x0040, + // Entry 3FB80 - 3FBBF + 0xffff, 0x0ed6, 0x0ee3, 0x204a, 0x0efb, 0x2057, 0x205e, 0x2067, + 0x0f1a, 0x0f27, 0x0f38, 0x0f47, 0x0f54, 0x0002, 0x00a9, 0x00c8, + 0x0003, 0x00ad, 0x00b6, 0x00bf, 0x0007, 0x0054, 0x0147, 0x014e, + 0x0155, 0x015c, 0x0163, 0x016a, 0x0171, 0x0007, 0x0054, 0x0178, + 0x017b, 0x017e, 0x0181, 0x0184, 0x0187, 0x018a, 0x0007, 0x0054, + 0x018d, 0x01a0, 0x01b3, 0x01c0, 0x01d1, 0x01e2, 0x01f5, 0x0003, + 0x00cc, 0x00d5, 0x00de, 0x0007, 0x0054, 0x0200, 0x0207, 0x020e, + 0x0215, 0x021c, 0x0223, 0x022a, 0x0007, 0x0054, 0x0178, 0x017b, + // Entry 3FBC0 - 3FBFF + 0x017e, 0x0181, 0x0184, 0x0187, 0x018a, 0x0007, 0x0054, 0x0231, + 0x0244, 0x0257, 0x0264, 0x0275, 0x0286, 0x0299, 0x0002, 0x00ea, + 0x0103, 0x0003, 0x00ee, 0x00f5, 0x00fc, 0x0005, 0x0054, 0xffff, + 0x02a4, 0x02b1, 0x02be, 0x02cb, 0x0005, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x0005, 0x0054, 0xffff, 0x02d8, 0x02ee, + 0x0304, 0x031a, 0x0003, 0x0107, 0x010e, 0x0115, 0x0005, 0x0054, + 0xffff, 0x02a4, 0x02b1, 0x02be, 0x02cb, 0x0005, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0054, 0xffff, 0x02d8, + // Entry 3FC00 - 3FC3F + 0x02ee, 0x0304, 0x031a, 0x0001, 0x011e, 0x0003, 0x0122, 0x0000, + 0x012b, 0x0002, 0x0125, 0x0128, 0x0001, 0x0000, 0x04ef, 0x0001, + 0x0000, 0x04f2, 0x0002, 0x012e, 0x0131, 0x0001, 0x0054, 0x0330, + 0x0001, 0x0054, 0x034e, 0x0001, 0x0136, 0x0001, 0x0138, 0x0002, + 0x0054, 0x036c, 0x0376, 0x0004, 0x014a, 0x0144, 0x0141, 0x0147, + 0x0001, 0x0054, 0x037d, 0x0001, 0x0054, 0x0394, 0x0001, 0x0054, + 0x03a5, 0x0001, 0x0007, 0x02e9, 0x0004, 0x015b, 0x0155, 0x0152, + 0x0158, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, + // Entry 3FC40 - 3FC7F + 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, 0x016c, 0x0166, + 0x0163, 0x0169, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, + 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0040, 0x01b0, + 0x0000, 0x0000, 0x01b5, 0x0000, 0x0000, 0x01ba, 0x01bf, 0x01c4, + 0x01c9, 0x0000, 0x0000, 0x01ce, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x01d3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01ec, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 3FC80 - 3FCBF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x01f1, 0x0000, 0x01f6, 0x0000, 0x0000, + 0x0208, 0x0000, 0x0000, 0x020d, 0x0000, 0x0000, 0x0212, 0x0001, + 0x01b2, 0x0001, 0x0054, 0x03b5, 0x0001, 0x01b7, 0x0001, 0x0054, + 0x03bc, 0x0001, 0x01bc, 0x0001, 0x0008, 0x0b3d, 0x0001, 0x01c1, + 0x0001, 0x0008, 0x0ca5, 0x0001, 0x01c6, 0x0001, 0x0008, 0x0ca5, + 0x0001, 0x01cb, 0x0001, 0x0054, 0x03c1, 0x0001, 0x01d0, 0x0001, + 0x0054, 0x03c8, 0x0003, 0x01d7, 0x01da, 0x01e1, 0x0001, 0x0054, + // Entry 3FCC0 - 3FCFF + 0x03d5, 0x0005, 0x0054, 0x03ef, 0x03f8, 0x0401, 0x03dc, 0x0408, + 0x0002, 0x01e4, 0x01e8, 0x0002, 0x0054, 0x0417, 0x0417, 0x0002, + 0x0054, 0x0447, 0x042f, 0x0001, 0x01ee, 0x0001, 0x0054, 0x045f, + 0x0001, 0x01f3, 0x0001, 0x0054, 0x0477, 0x0003, 0x01fa, 0x0000, + 0x01fd, 0x0001, 0x0054, 0x048d, 0x0002, 0x0200, 0x0204, 0x0002, + 0x0054, 0x0498, 0x0498, 0x0002, 0x0054, 0x04b4, 0x04b4, 0x0001, + 0x020a, 0x0001, 0x0054, 0x04d0, 0x0001, 0x020f, 0x0001, 0x0054, + 0x04db, 0x0001, 0x0214, 0x0001, 0x0054, 0x04e8, 0x0004, 0x021c, + // Entry 3FD00 - 3FD3F + 0x0221, 0x0000, 0x0224, 0x0003, 0x0000, 0x1dc7, 0x39fb, 0x3af3, + 0x0001, 0x0054, 0x0502, 0x0002, 0x0000, 0x0227, 0x0003, 0x022b, + 0x02ef, 0x028d, 0x0060, 0x0054, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 3FD40 - 3FD7F + 0xffff, 0x0513, 0x05d2, 0xffff, 0x067f, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x073e, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0807, 0x0060, 0x0054, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 3FD80 - 3FDBF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0546, 0x05ff, 0xffff, 0x06b2, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0764, 0xffff, 0x07d6, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 3FDC0 - 3FDFF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0825, 0x0060, 0x0054, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 3FE00 - 3FE3F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x058e, 0x0641, 0xffff, + 0x06fa, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x079f, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0858, + 0x0003, 0x0004, 0x05a5, 0x09fe, 0x0012, 0x0017, 0x0000, 0x0044, + // Entry 3FE40 - 3FE7F + 0x0000, 0x00cb, 0x0000, 0x0152, 0x017d, 0x0388, 0x040c, 0x048a, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x050b, 0x0589, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x0033, + 0x0003, 0x0029, 0x002e, 0x0024, 0x0001, 0x0026, 0x0001, 0x0054, + 0x0887, 0x0001, 0x002b, 0x0001, 0x0054, 0x0887, 0x0001, 0x0030, + 0x0001, 0x0054, 0x08a1, 0x0004, 0x0041, 0x003b, 0x0038, 0x003e, + 0x0001, 0x0054, 0x08ae, 0x0001, 0x0054, 0x08ae, 0x0001, 0x0006, + 0x022e, 0x0001, 0x0006, 0x022e, 0x0005, 0x004a, 0x0000, 0x0000, + // Entry 3FE80 - 3FEBF + 0x0000, 0x00b5, 0x0002, 0x004d, 0x0081, 0x0003, 0x0051, 0x0061, + 0x0071, 0x000e, 0x0054, 0xffff, 0x08c3, 0x08d0, 0x08dd, 0x08ea, + 0x08f7, 0x0904, 0x0917, 0x092d, 0x0946, 0x0959, 0x0969, 0x0976, + 0x0986, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, + 0x0422, 0x000e, 0x0054, 0xffff, 0x08c3, 0x08d0, 0x08dd, 0x08ea, + 0x08f7, 0x0904, 0x0917, 0x092d, 0x0946, 0x0959, 0x0969, 0x0976, + 0x0986, 0x0003, 0x0085, 0x0095, 0x00a5, 0x000e, 0x0054, 0xffff, + // Entry 3FEC0 - 3FEFF + 0x08c3, 0x08d0, 0x08dd, 0x08ea, 0x08f7, 0x0904, 0x0917, 0x092d, + 0x0946, 0x0959, 0x0969, 0x0976, 0x0986, 0x000e, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x0054, 0xffff, + 0x08c3, 0x08d0, 0x08dd, 0x08ea, 0x08f7, 0x0904, 0x0917, 0x092d, + 0x0946, 0x0959, 0x0969, 0x0976, 0x0986, 0x0003, 0x00bf, 0x00c5, + 0x00b9, 0x0001, 0x00bb, 0x0002, 0x0054, 0x0996, 0x09a1, 0x0001, + 0x00c1, 0x0002, 0x0054, 0x0996, 0x09a1, 0x0001, 0x00c7, 0x0002, + // Entry 3FF00 - 3FF3F + 0x0054, 0x0996, 0x09a1, 0x0005, 0x00d1, 0x0000, 0x0000, 0x0000, + 0x013c, 0x0002, 0x00d4, 0x0108, 0x0003, 0x00d8, 0x00e8, 0x00f8, + 0x000e, 0x0054, 0xffff, 0x09ac, 0x09c5, 0x09d8, 0x09e5, 0x09f5, + 0x09fc, 0x0a0f, 0x0a25, 0x0a38, 0x0a4b, 0x0a55, 0x0a62, 0x0a75, + 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, + 0x000e, 0x0054, 0xffff, 0x09ac, 0x09c5, 0x09d8, 0x09e5, 0x09f5, + 0x09fc, 0x0a0f, 0x0a25, 0x0a38, 0x0a4b, 0x0a55, 0x0a62, 0x0a75, + // Entry 3FF40 - 3FF7F + 0x0003, 0x010c, 0x011c, 0x012c, 0x000e, 0x0054, 0xffff, 0x09ac, + 0x09c5, 0x09d8, 0x09e5, 0x09f5, 0x09fc, 0x0a0f, 0x0a25, 0x0a38, + 0x0a4b, 0x0a55, 0x0a62, 0x0a75, 0x000e, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x0054, 0xffff, 0x09ac, + 0x09c5, 0x09d8, 0x09e5, 0x09f5, 0x09fc, 0x0a0f, 0x0a25, 0x0a38, + 0x0a4b, 0x0a55, 0x0a62, 0x0a8b, 0x0003, 0x0146, 0x014c, 0x0140, + 0x0001, 0x0142, 0x0002, 0x0054, 0x0996, 0x09a1, 0x0001, 0x0148, + // Entry 3FF80 - 3FFBF + 0x0002, 0x0054, 0x0996, 0x09a1, 0x0001, 0x014e, 0x0002, 0x0054, + 0x0996, 0x09a1, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x015b, 0x0000, 0x016c, 0x0004, 0x0169, 0x0163, 0x0160, 0x0166, + 0x0001, 0x0010, 0x0003, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, + 0x001b, 0x0001, 0x0002, 0x0587, 0x0004, 0x017a, 0x0174, 0x0171, + 0x0177, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, 0x0186, 0x01eb, + 0x0242, 0x0277, 0x0330, 0x0355, 0x0366, 0x0377, 0x0002, 0x0189, + // Entry 3FFC0 - 3FFFF + 0x01ba, 0x0003, 0x018d, 0x019c, 0x01ab, 0x000d, 0x0054, 0xffff, + 0x0a93, 0x0a9a, 0x0aa4, 0x0ab1, 0x0ac1, 0x0ac8, 0x0ad2, 0x0adf, + 0x0ae6, 0x0af0, 0x0afd, 0x0b07, 0x000d, 0x0054, 0xffff, 0x0b11, + 0x0b15, 0x0b1c, 0x0b23, 0x0b27, 0x0b2b, 0x0b32, 0x0b23, 0x0b39, + 0x0b23, 0x0b3d, 0x0b41, 0x000d, 0x0054, 0xffff, 0x0b45, 0x0b55, + 0x0aa4, 0x0b68, 0x0ac1, 0x0ac8, 0x0b7b, 0x0b8b, 0x0b98, 0x0ba8, + 0x0bbb, 0x0bcb, 0x0003, 0x01be, 0x01cd, 0x01dc, 0x000d, 0x0054, + 0xffff, 0x0a93, 0x0a9a, 0x0aa4, 0x0ab1, 0x0ac1, 0x0ac8, 0x0ad2, + // Entry 40000 - 4003F + 0x0adf, 0x0ae6, 0x0af0, 0x0afd, 0x0b07, 0x000d, 0x0054, 0xffff, + 0x0b11, 0x0b15, 0x0b1c, 0x0b23, 0x0b27, 0x0b2b, 0x0b32, 0x0b23, + 0x0b39, 0x0b23, 0x0b3d, 0x0b41, 0x000d, 0x0054, 0xffff, 0x0b45, + 0x0b55, 0x0aa4, 0x0b68, 0x0ac1, 0x0ac8, 0x0b7b, 0x0b8b, 0x0b98, + 0x0ba8, 0x0bbb, 0x0bcb, 0x0002, 0x01ee, 0x0218, 0x0005, 0x01f4, + 0x01fd, 0x020f, 0x0000, 0x0206, 0x0007, 0x0054, 0x0bdb, 0x0be2, + 0x0bec, 0x0bf9, 0x0c06, 0x0c10, 0x0c23, 0x0007, 0x0054, 0x0c39, + 0x0c3d, 0x0c44, 0x0c4b, 0x0c55, 0x0c5c, 0x0c69, 0x0007, 0x0054, + // Entry 40040 - 4007F + 0x0bdb, 0x0be2, 0x0c70, 0x0bf9, 0x0c06, 0x0c7a, 0x0c8a, 0x0007, + 0x0054, 0x0c9a, 0x0caa, 0x0cbd, 0x0cd3, 0x0ce9, 0x0cfc, 0x0d18, + 0x0005, 0x021e, 0x0227, 0x0239, 0x0000, 0x0230, 0x0007, 0x0054, + 0x0bdb, 0x0be2, 0x0bec, 0x0bf9, 0x0c06, 0x0c10, 0x0c23, 0x0007, + 0x0054, 0x0c39, 0x0c3d, 0x0c44, 0x0c4b, 0x0c55, 0x0c5c, 0x0c69, + 0x0007, 0x0054, 0x0bdb, 0x0be2, 0x0c70, 0x0bf9, 0x0c06, 0x0c7a, + 0x0c8a, 0x0007, 0x0054, 0x0c9a, 0x0caa, 0x0cbd, 0x0cd3, 0x0ce9, + 0x0cfc, 0x0d18, 0x0002, 0x0245, 0x025e, 0x0003, 0x0249, 0x0250, + // Entry 40080 - 400BF + 0x0257, 0x0005, 0x0054, 0xffff, 0x0d37, 0x0d4b, 0x0d5f, 0x0d73, + 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, + 0x0054, 0xffff, 0x0d87, 0x0daa, 0x0dca, 0x0dea, 0x0003, 0x0262, + 0x0269, 0x0270, 0x0005, 0x0054, 0xffff, 0x0d37, 0x0d4b, 0x0d5f, + 0x0d73, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x0005, 0x0054, 0xffff, 0x0d87, 0x0daa, 0x0dca, 0x0dea, 0x0002, + 0x027a, 0x02d5, 0x0003, 0x027e, 0x029b, 0x02b8, 0x0007, 0x0289, + 0x028c, 0x0286, 0x028f, 0x0292, 0x0295, 0x0298, 0x0001, 0x0054, + // Entry 400C0 - 400FF + 0x0e0a, 0x0001, 0x0054, 0x0e21, 0x0001, 0x0054, 0x0e30, 0x0001, + 0x0054, 0x0e3f, 0x0001, 0x0054, 0x0e4f, 0x0001, 0x0054, 0x0e65, + 0x0001, 0x0054, 0x0e78, 0x0007, 0x02a6, 0x02a9, 0x02a3, 0x02ac, + 0x02af, 0x02b2, 0x02b5, 0x0001, 0x0054, 0x0e0a, 0x0001, 0x0054, + 0x0e88, 0x0001, 0x0054, 0x0e8d, 0x0001, 0x0054, 0x0e3f, 0x0001, + 0x0054, 0x0e4f, 0x0001, 0x0054, 0x0e65, 0x0001, 0x0054, 0x0e78, + 0x0007, 0x02c3, 0x02c6, 0x02c0, 0x02c9, 0x02cc, 0x02cf, 0x02d2, + 0x0001, 0x0054, 0x0e0a, 0x0001, 0x0054, 0x0e21, 0x0001, 0x0054, + // Entry 40100 - 4013F + 0x0e30, 0x0001, 0x0054, 0x0e3f, 0x0001, 0x0054, 0x0e4f, 0x0001, + 0x0054, 0x0e65, 0x0001, 0x0054, 0x0e78, 0x0003, 0x02d9, 0x02f6, + 0x0313, 0x0007, 0x02e4, 0x02e7, 0x02e1, 0x02ea, 0x02ed, 0x02f0, + 0x02f3, 0x0001, 0x0054, 0x0e0a, 0x0001, 0x0054, 0x0e21, 0x0001, + 0x0054, 0x0e30, 0x0001, 0x0054, 0x0e3f, 0x0001, 0x0054, 0x0e4f, + 0x0001, 0x0054, 0x0e65, 0x0001, 0x0054, 0x0e78, 0x0007, 0x0301, + 0x0304, 0x02fe, 0x0307, 0x030a, 0x030d, 0x0310, 0x0001, 0x0054, + 0x0e0a, 0x0001, 0x0054, 0x0e21, 0x0001, 0x0054, 0x0e30, 0x0001, + // Entry 40140 - 4017F + 0x0054, 0x0e3f, 0x0001, 0x0054, 0x0e4f, 0x0001, 0x0054, 0x0e65, + 0x0001, 0x0054, 0x0e78, 0x0007, 0x031e, 0x0321, 0x031b, 0x0324, + 0x0327, 0x032a, 0x032d, 0x0001, 0x0054, 0x0e0a, 0x0001, 0x0054, + 0x0e21, 0x0001, 0x0054, 0x0e30, 0x0001, 0x0054, 0x0e3f, 0x0001, + 0x0054, 0x0e4f, 0x0001, 0x0054, 0x0e95, 0x0001, 0x0054, 0x0ea2, + 0x0003, 0x033f, 0x034a, 0x0334, 0x0002, 0x0337, 0x033b, 0x0002, + 0x0054, 0x0887, 0x0ed3, 0x0002, 0x0054, 0x0eac, 0x0eea, 0x0002, + 0x0342, 0x0346, 0x0002, 0x0054, 0x08a1, 0x0f19, 0x0002, 0x0054, + // Entry 40180 - 401BF + 0x0f04, 0x0f23, 0x0002, 0x034d, 0x0351, 0x0002, 0x0054, 0x0f30, + 0x0f19, 0x0002, 0x0054, 0x0f3c, 0x0f4f, 0x0004, 0x0363, 0x035d, + 0x035a, 0x0360, 0x0001, 0x0006, 0x015b, 0x0001, 0x0002, 0x0033, + 0x0001, 0x0002, 0x003c, 0x0001, 0x0000, 0x2418, 0x0004, 0x0374, + 0x036e, 0x036b, 0x0371, 0x0001, 0x0002, 0x04e3, 0x0001, 0x0002, + 0x04f2, 0x0001, 0x0002, 0x04fe, 0x0001, 0x0002, 0x0508, 0x0004, + 0x0385, 0x037f, 0x037c, 0x0382, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, + // Entry 401C0 - 401FF + 0x0005, 0x038e, 0x0000, 0x0000, 0x0000, 0x03f9, 0x0002, 0x0391, + 0x03c5, 0x0003, 0x0395, 0x03a5, 0x03b5, 0x000e, 0x0054, 0x0fc7, + 0x0f5b, 0x0f6e, 0x0f81, 0x0f94, 0x0fa1, 0x0fb1, 0x0fbd, 0x0fd4, + 0x0fe4, 0x0ff1, 0x1001, 0x1014, 0x101b, 0x000e, 0x0000, 0x003f, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x0054, 0x0fc7, + 0x0f5b, 0x0f6e, 0x0f81, 0x0f94, 0x0fa1, 0x0fb1, 0x0fbd, 0x0fd4, + 0x0fe4, 0x0ff1, 0x1001, 0x1014, 0x101b, 0x0003, 0x03c9, 0x03d9, + // Entry 40200 - 4023F + 0x03e9, 0x000e, 0x0054, 0x0fc7, 0x0f5b, 0x0f6e, 0x0f81, 0x0f94, + 0x0fa1, 0x0fb1, 0x0fbd, 0x0fd4, 0x0fe4, 0x0ff1, 0x1001, 0x1028, + 0x102b, 0x000e, 0x0000, 0x003f, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, + 0x0422, 0x000e, 0x0054, 0x0fc7, 0x0f5b, 0x0f6e, 0x0f81, 0x0f94, + 0x0fa1, 0x0fb1, 0x0fbd, 0x0fd4, 0x0fe4, 0x0ff1, 0x1001, 0x1014, + 0x101b, 0x0003, 0x0402, 0x0407, 0x03fd, 0x0001, 0x03ff, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x0404, 0x0001, 0x0000, 0x04ef, 0x0001, + // Entry 40240 - 4027F + 0x0409, 0x0001, 0x0000, 0x04ef, 0x0005, 0x0412, 0x0000, 0x0000, + 0x0000, 0x0477, 0x0002, 0x0415, 0x0446, 0x0003, 0x0419, 0x0428, + 0x0437, 0x000d, 0x0054, 0xffff, 0x1030, 0x103a, 0x104a, 0x1054, + 0x105e, 0x106b, 0x107b, 0x1088, 0x1095, 0x10a2, 0x10ac, 0x10b6, + 0x000d, 0x0054, 0xffff, 0x10c3, 0x10c7, 0x10cb, 0x10cf, 0x10d3, + 0x10d7, 0x10db, 0x10df, 0x10e3, 0x10e7, 0x10ee, 0x10f5, 0x000d, + 0x0054, 0xffff, 0x1030, 0x103a, 0x104a, 0x1054, 0x105e, 0x106b, + 0x107b, 0x1088, 0x1095, 0x10a2, 0x10ac, 0x10b6, 0x0003, 0x044a, + // Entry 40280 - 402BF + 0x0459, 0x0468, 0x000d, 0x0054, 0xffff, 0x1030, 0x103a, 0x104a, + 0x1054, 0x105e, 0x106b, 0x107b, 0x1088, 0x1095, 0x10a2, 0x10ac, + 0x10b6, 0x000d, 0x0054, 0xffff, 0x10c3, 0x10c7, 0x10cb, 0x10cf, + 0x10d3, 0x10d7, 0x10db, 0x10df, 0x10e3, 0x10e7, 0x10ee, 0x10f5, + 0x000d, 0x0054, 0xffff, 0x1030, 0x103a, 0x104a, 0x1054, 0x105e, + 0x106b, 0x107b, 0x1088, 0x1095, 0x10a2, 0x10ac, 0x10b6, 0x0003, + 0x0480, 0x0485, 0x047b, 0x0001, 0x047d, 0x0001, 0x0054, 0x10fc, + 0x0001, 0x0482, 0x0001, 0x0054, 0x10fc, 0x0001, 0x0487, 0x0001, + // Entry 402C0 - 402FF + 0x0054, 0x10fc, 0x0008, 0x0493, 0x0000, 0x0000, 0x0000, 0x04f8, + 0x0000, 0x0000, 0x9006, 0x0002, 0x0496, 0x04c7, 0x0003, 0x049a, + 0x04a9, 0x04b8, 0x000d, 0x0054, 0xffff, 0x1109, 0x1117, 0x111f, + 0x1129, 0x1134, 0x1141, 0x114f, 0x115a, 0x1165, 0x1170, 0x117b, + 0x1191, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, + 0x000d, 0x0054, 0xffff, 0x11a7, 0x11ba, 0x11c4, 0x11d3, 0x11e3, + 0x11f8, 0x120e, 0x1218, 0x1228, 0x123b, 0x124b, 0x1269, 0x0003, + // Entry 40300 - 4033F + 0x04cb, 0x04da, 0x04e9, 0x000d, 0x0054, 0xffff, 0x1109, 0x1117, + 0x111f, 0x1129, 0x1134, 0x1141, 0x114f, 0x115a, 0x1165, 0x1170, + 0x117b, 0x1191, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, + 0x3a0c, 0x000d, 0x0054, 0xffff, 0x11a7, 0x11ba, 0x128a, 0x1298, + 0x11e3, 0x11f8, 0x120e, 0x1218, 0x1228, 0x123b, 0x124b, 0x1269, + 0x0003, 0x0501, 0x0506, 0x04fc, 0x0001, 0x04fe, 0x0001, 0x0000, + 0x06c8, 0x0001, 0x0503, 0x0001, 0x0000, 0x06c8, 0x0001, 0x0508, + // Entry 40340 - 4037F + 0x0001, 0x0000, 0x06c8, 0x0005, 0x0511, 0x0000, 0x0000, 0x0000, + 0x0576, 0x0002, 0x0514, 0x0545, 0x0003, 0x0518, 0x0527, 0x0536, + 0x000d, 0x0054, 0xffff, 0x12a7, 0x12c0, 0x12e2, 0x12f2, 0x12fc, + 0x130f, 0x1325, 0x1332, 0x133f, 0x134f, 0x1359, 0x1369, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0054, + 0xffff, 0x12a7, 0x12c0, 0x12e2, 0x12f2, 0x12fc, 0x130f, 0x1325, + 0x1332, 0x133f, 0x134f, 0x1359, 0x1369, 0x0003, 0x0549, 0x0558, + // Entry 40380 - 403BF + 0x0567, 0x000d, 0x0054, 0xffff, 0x12a7, 0x12c0, 0x12e2, 0x12f2, + 0x12fc, 0x130f, 0x1325, 0x1332, 0x133f, 0x134f, 0x1359, 0x1369, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, + 0x0054, 0xffff, 0x12a7, 0x12c0, 0x12e2, 0x12f2, 0x12fc, 0x130f, + 0x1325, 0x1332, 0x133f, 0x134f, 0x1359, 0x1369, 0x0003, 0x057f, + 0x0584, 0x057a, 0x0001, 0x057c, 0x0001, 0x0000, 0x1a1d, 0x0001, + 0x0581, 0x0001, 0x0000, 0x1a1d, 0x0001, 0x0586, 0x0001, 0x0000, + // Entry 403C0 - 403FF + 0x1a1d, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x058f, 0x0003, + 0x0599, 0x059f, 0x0593, 0x0001, 0x0595, 0x0002, 0x0054, 0x1379, + 0x13b7, 0x0001, 0x059b, 0x0002, 0x0054, 0x13c4, 0x13b7, 0x0001, + 0x05a1, 0x0002, 0x0054, 0x13c4, 0x13b7, 0x0042, 0x05e8, 0x05ed, + 0x05f2, 0x05f7, 0x060e, 0x0625, 0x063c, 0x0653, 0x066a, 0x0681, + 0x0698, 0x06af, 0x06c6, 0x06e1, 0x06fc, 0x0717, 0x071c, 0x0721, + 0x0726, 0x073d, 0x074f, 0x0761, 0x0766, 0x076b, 0x0770, 0x0775, + 0x077a, 0x077f, 0x0784, 0x0789, 0x078e, 0x07a2, 0x07b6, 0x07ca, + // Entry 40400 - 4043F + 0x07de, 0x07f2, 0x0806, 0x081a, 0x082e, 0x0842, 0x0856, 0x086a, + 0x087e, 0x0892, 0x08a6, 0x08ba, 0x08ce, 0x08e2, 0x08f6, 0x090a, + 0x091e, 0x0932, 0x0937, 0x093c, 0x0941, 0x0957, 0x0969, 0x097b, + 0x0991, 0x09a3, 0x09b5, 0x09cb, 0x09dd, 0x09ef, 0x09f4, 0x09f9, + 0x0001, 0x05ea, 0x0001, 0x0054, 0x13f3, 0x0001, 0x05ef, 0x0001, + 0x0054, 0x13f3, 0x0001, 0x05f4, 0x0001, 0x0054, 0x13f3, 0x0003, + 0x05fb, 0x05fe, 0x0603, 0x0001, 0x0054, 0x1400, 0x0003, 0x0054, + 0x140a, 0x1424, 0x1435, 0x0002, 0x0606, 0x060a, 0x0002, 0x0054, + // Entry 40440 - 4047F + 0x1467, 0x144c, 0x0002, 0x0054, 0x1488, 0x1488, 0x0003, 0x0612, + 0x0615, 0x061a, 0x0001, 0x0054, 0x1400, 0x0003, 0x0054, 0x140a, + 0x1424, 0x1435, 0x0002, 0x061d, 0x0621, 0x0002, 0x0054, 0x1467, + 0x144c, 0x0002, 0x0054, 0x1488, 0x1488, 0x0003, 0x0629, 0x062c, + 0x0631, 0x0001, 0x0054, 0x1400, 0x0003, 0x0054, 0x140a, 0x1424, + 0x1435, 0x0002, 0x0634, 0x0638, 0x0002, 0x0054, 0x1467, 0x144c, + 0x0002, 0x0054, 0x1488, 0x1488, 0x0003, 0x0640, 0x0643, 0x0648, + 0x0001, 0x0054, 0x14a9, 0x0003, 0x0054, 0x14bc, 0x14df, 0x14f9, + // Entry 40480 - 404BF + 0x0002, 0x064b, 0x064f, 0x0002, 0x0054, 0x153d, 0x1519, 0x0002, + 0x0054, 0x1591, 0x1567, 0x0003, 0x0657, 0x065a, 0x065f, 0x0001, + 0x0054, 0x14a9, 0x0003, 0x0054, 0x14bc, 0x15c1, 0x14f9, 0x0002, + 0x0662, 0x0666, 0x0002, 0x0054, 0x153d, 0x1519, 0x0002, 0x0054, + 0x1591, 0x1567, 0x0003, 0x066e, 0x0671, 0x0676, 0x0001, 0x0054, + 0x14a9, 0x0003, 0x0054, 0x14bc, 0x15c1, 0x14f9, 0x0002, 0x0679, + 0x067d, 0x0002, 0x0054, 0x153d, 0x153d, 0x0002, 0x0054, 0x1591, + 0x1591, 0x0003, 0x0685, 0x0688, 0x068d, 0x0001, 0x0054, 0x15db, + // Entry 404C0 - 404FF + 0x0003, 0x0054, 0x15eb, 0x160b, 0x1622, 0x0002, 0x0690, 0x0694, + 0x0002, 0x0054, 0x1660, 0x163f, 0x0002, 0x0054, 0x16ae, 0x1687, + 0x0003, 0x069c, 0x069f, 0x06a4, 0x0001, 0x0054, 0x15db, 0x0003, + 0x0054, 0x15eb, 0x160b, 0x1622, 0x0002, 0x06a7, 0x06ab, 0x0002, + 0x0054, 0x1660, 0x163f, 0x0002, 0x0054, 0x16ae, 0x1687, 0x0003, + 0x06b3, 0x06b6, 0x06bb, 0x0001, 0x0054, 0x15db, 0x0003, 0x0054, + 0x15eb, 0x160b, 0x1622, 0x0002, 0x06be, 0x06c2, 0x0002, 0x0054, + 0x1660, 0x163f, 0x0002, 0x0054, 0x16ae, 0x1687, 0x0004, 0x06cb, + // Entry 40500 - 4053F + 0x06ce, 0x06d3, 0x06de, 0x0001, 0x0054, 0x16d5, 0x0003, 0x0054, + 0x16e5, 0x1705, 0x171c, 0x0002, 0x06d6, 0x06da, 0x0002, 0x0054, + 0x175a, 0x1739, 0x0002, 0x0054, 0x17a8, 0x1781, 0x0001, 0x0054, + 0x17cf, 0x0004, 0x06e6, 0x06e9, 0x06ee, 0x06f9, 0x0001, 0x0054, + 0x16d5, 0x0003, 0x0054, 0x16e5, 0x1705, 0x171c, 0x0002, 0x06f1, + 0x06f5, 0x0002, 0x0054, 0x175a, 0x1739, 0x0002, 0x0054, 0x17a8, + 0x1781, 0x0001, 0x0054, 0x17cf, 0x0004, 0x0701, 0x0704, 0x0709, + 0x0714, 0x0001, 0x0054, 0x16d5, 0x0003, 0x0054, 0x16e5, 0x1705, + // Entry 40540 - 4057F + 0x171c, 0x0002, 0x070c, 0x0710, 0x0002, 0x0054, 0x175a, 0x1739, + 0x0002, 0x0054, 0x17a8, 0x1781, 0x0001, 0x0054, 0x17cf, 0x0001, + 0x0719, 0x0001, 0x0054, 0x17ea, 0x0001, 0x071e, 0x0001, 0x0054, + 0x17ea, 0x0001, 0x0723, 0x0001, 0x0054, 0x17ea, 0x0003, 0x072a, + 0x072d, 0x0732, 0x0001, 0x0054, 0x1811, 0x0003, 0x0054, 0x181b, + 0x183b, 0x1845, 0x0002, 0x0735, 0x0739, 0x0002, 0x0054, 0x186d, + 0x1852, 0x0002, 0x0054, 0x188e, 0x188e, 0x0003, 0x0741, 0x0000, + 0x0744, 0x0001, 0x0054, 0x1811, 0x0002, 0x0747, 0x074b, 0x0002, + // Entry 40580 - 405BF + 0x0054, 0x186d, 0x1852, 0x0002, 0x0054, 0x188e, 0x188e, 0x0003, + 0x0753, 0x0000, 0x0756, 0x0001, 0x0054, 0x1811, 0x0002, 0x0759, + 0x075d, 0x0002, 0x0054, 0x186d, 0x1852, 0x0002, 0x0054, 0x188e, + 0x188e, 0x0001, 0x0763, 0x0001, 0x0054, 0x18af, 0x0001, 0x0768, + 0x0001, 0x0054, 0x18af, 0x0001, 0x076d, 0x0001, 0x0054, 0x18af, + 0x0001, 0x0772, 0x0001, 0x0054, 0x18ca, 0x0001, 0x0777, 0x0001, + 0x0054, 0x18ca, 0x0001, 0x077c, 0x0001, 0x0054, 0x18ca, 0x0001, + 0x0781, 0x0001, 0x0054, 0x18eb, 0x0001, 0x0786, 0x0001, 0x0054, + // Entry 405C0 - 405FF + 0x18eb, 0x0001, 0x078b, 0x0001, 0x0054, 0x18eb, 0x0003, 0x0000, + 0x0792, 0x0797, 0x0003, 0x0054, 0x1923, 0x1943, 0x195a, 0x0002, + 0x079a, 0x079e, 0x0002, 0x0054, 0x1998, 0x1977, 0x0002, 0x0054, + 0x19bf, 0x19bf, 0x0003, 0x0000, 0x07a6, 0x07ab, 0x0003, 0x0054, + 0x19e6, 0x19fd, 0x1a0b, 0x0002, 0x07ae, 0x07b2, 0x0002, 0x0054, + 0x1998, 0x1998, 0x0002, 0x0054, 0x19bf, 0x19bf, 0x0003, 0x0000, + 0x07ba, 0x07bf, 0x0003, 0x0054, 0x19e6, 0x19fd, 0x1a0b, 0x0002, + 0x07c2, 0x07c6, 0x0002, 0x0054, 0x1998, 0x1977, 0x0002, 0x0054, + // Entry 40600 - 4063F + 0x19bf, 0x19bf, 0x0003, 0x0000, 0x07ce, 0x07d3, 0x0003, 0x0054, + 0x1a1f, 0x1a42, 0x1a5c, 0x0002, 0x07d6, 0x07da, 0x0002, 0x0054, + 0x1aa0, 0x1a7c, 0x0002, 0x0054, 0x1aca, 0x1aca, 0x0003, 0x0000, + 0x07e2, 0x07e7, 0x0003, 0x0054, 0x1af4, 0x1b0e, 0x1b1f, 0x0002, + 0x07ea, 0x07ee, 0x0002, 0x0054, 0x1aa0, 0x1a7c, 0x0002, 0x0054, + 0x1aca, 0x1aca, 0x0003, 0x0000, 0x07f6, 0x07fb, 0x0003, 0x0054, + 0x1af4, 0x1b0e, 0x1b1f, 0x0002, 0x07fe, 0x0802, 0x0002, 0x0054, + 0x1aa0, 0x1a7c, 0x0002, 0x0054, 0x1aca, 0x1aca, 0x0003, 0x0000, + // Entry 40640 - 4067F + 0x080a, 0x080f, 0x0003, 0x0054, 0x1b36, 0x1b5c, 0x1b79, 0x0002, + 0x0812, 0x0816, 0x0002, 0x0054, 0x1bc3, 0x1b9c, 0x0002, 0x0054, + 0x1bf0, 0x1bf0, 0x0003, 0x0000, 0x081e, 0x0823, 0x0003, 0x0054, + 0x1c1d, 0x1c3a, 0x1c4e, 0x0002, 0x0826, 0x082a, 0x0002, 0x0054, + 0x1bc3, 0x1b9c, 0x0002, 0x0054, 0x1bf0, 0x1bf0, 0x0003, 0x0000, + 0x0832, 0x0837, 0x0003, 0x0054, 0x1c1d, 0x1c3a, 0x1c4e, 0x0002, + 0x083a, 0x083e, 0x0002, 0x0054, 0x1bc3, 0x1b9c, 0x0002, 0x0054, + 0x1bf0, 0x1bf0, 0x0003, 0x0000, 0x0846, 0x084b, 0x0003, 0x0054, + // Entry 40680 - 406BF + 0x1c68, 0x1c8e, 0x1cab, 0x0002, 0x084e, 0x0852, 0x0002, 0x0054, + 0x1cf5, 0x1cce, 0x0002, 0x0054, 0x1d22, 0x1d22, 0x0003, 0x0000, + 0x085a, 0x085f, 0x0003, 0x0054, 0x1d4f, 0x1d6c, 0x1d80, 0x0002, + 0x0862, 0x0866, 0x0002, 0x0054, 0x1cf5, 0x1cce, 0x0002, 0x0054, + 0x1d22, 0x1d22, 0x0003, 0x0000, 0x086e, 0x0873, 0x0003, 0x0054, + 0x1d4f, 0x1d6c, 0x1d80, 0x0002, 0x0876, 0x087a, 0x0002, 0x0054, + 0x1cf5, 0x1cce, 0x0002, 0x0054, 0x1d22, 0x1d22, 0x0003, 0x0000, + 0x0882, 0x0887, 0x0003, 0x0054, 0x1d9a, 0x1dbd, 0x1dd7, 0x0002, + // Entry 406C0 - 406FF + 0x088a, 0x088e, 0x0002, 0x0054, 0x1e1b, 0x1df7, 0x0002, 0x0054, + 0x1e45, 0x1e45, 0x0003, 0x0000, 0x0896, 0x089b, 0x0003, 0x0054, + 0x1e6f, 0x1e89, 0x1e9a, 0x0002, 0x089e, 0x08a2, 0x0002, 0x0054, + 0x1e1b, 0x1e1b, 0x0002, 0x0054, 0x1e45, 0x1e45, 0x0003, 0x0000, + 0x08aa, 0x08af, 0x0003, 0x0054, 0x1e6f, 0x1e89, 0x1e9a, 0x0002, + 0x08b2, 0x08b6, 0x0002, 0x0054, 0x1e1b, 0x1e1b, 0x0002, 0x0054, + 0x1e45, 0x1e45, 0x0003, 0x0000, 0x08be, 0x08c3, 0x0003, 0x0054, + 0x1eb1, 0x1edd, 0x1f00, 0x0002, 0x08c6, 0x08ca, 0x0002, 0x0054, + // Entry 40700 - 4073F + 0x1f56, 0x1f29, 0x0002, 0x0054, 0x1f89, 0x1f89, 0x0003, 0x0000, + 0x08d2, 0x08d7, 0x0003, 0x0054, 0x1fbc, 0x1fdf, 0x1ff9, 0x0002, + 0x08da, 0x08de, 0x0002, 0x0054, 0x1f56, 0x1f56, 0x0002, 0x0054, + 0x1f89, 0x1f89, 0x0003, 0x0000, 0x08e6, 0x08eb, 0x0003, 0x0055, + 0x0000, 0x001d, 0x0031, 0x0002, 0x08ee, 0x08f2, 0x0002, 0x0054, + 0x1f56, 0x1f56, 0x0002, 0x0054, 0x1f89, 0x1f89, 0x0003, 0x0000, + 0x08fa, 0x08ff, 0x0003, 0x0055, 0x004b, 0x007a, 0x00a0, 0x0002, + 0x0902, 0x0906, 0x0002, 0x0055, 0x00fc, 0x00cc, 0x0002, 0x0055, + // Entry 40740 - 4077F + 0x0132, 0x0132, 0x0003, 0x0000, 0x090e, 0x0913, 0x0003, 0x0055, + 0x0168, 0x018e, 0x01ab, 0x0002, 0x0916, 0x091a, 0x0002, 0x0055, + 0x00fc, 0x00fc, 0x0002, 0x0055, 0x0132, 0x0132, 0x0003, 0x0000, + 0x0922, 0x0927, 0x0003, 0x0055, 0x01ce, 0x01ee, 0x0205, 0x0002, + 0x092a, 0x092e, 0x0002, 0x0055, 0x00fc, 0x00fc, 0x0002, 0x0055, + 0x0132, 0x0132, 0x0001, 0x0934, 0x0001, 0x0055, 0x0222, 0x0001, + 0x0939, 0x0001, 0x0055, 0x0222, 0x0001, 0x093e, 0x0001, 0x0055, + 0x0222, 0x0003, 0x0945, 0x0948, 0x094c, 0x0001, 0x0055, 0x0240, + // Entry 40780 - 407BF + 0x0002, 0x0055, 0xffff, 0x024d, 0x0002, 0x094f, 0x0953, 0x0002, + 0x0055, 0x027f, 0x0261, 0x0002, 0x0055, 0x02c7, 0x02a3, 0x0003, + 0x095b, 0x0000, 0x095e, 0x0001, 0x0055, 0x0240, 0x0002, 0x0961, + 0x0965, 0x0002, 0x0055, 0x027f, 0x0261, 0x0002, 0x0055, 0x02c7, + 0x02a3, 0x0003, 0x096d, 0x0000, 0x0970, 0x0001, 0x0055, 0x02eb, + 0x0002, 0x0973, 0x0977, 0x0002, 0x0055, 0x027f, 0x0261, 0x0002, + 0x0055, 0x02c7, 0x02a3, 0x0003, 0x097f, 0x0982, 0x0986, 0x0001, + 0x0055, 0x02f2, 0x0002, 0x0055, 0xffff, 0x02ff, 0x0002, 0x0989, + // Entry 407C0 - 407FF + 0x098d, 0x0002, 0x0055, 0x0331, 0x0313, 0x0002, 0x0055, 0x0355, + 0x0355, 0x0003, 0x0995, 0x0000, 0x0998, 0x0001, 0x0055, 0x02f2, + 0x0002, 0x099b, 0x099f, 0x0002, 0x0055, 0x0331, 0x0313, 0x0002, + 0x0055, 0x0355, 0x0355, 0x0003, 0x09a7, 0x0000, 0x09aa, 0x0001, + 0x0055, 0x02f2, 0x0002, 0x09ad, 0x09b1, 0x0002, 0x0055, 0x0331, + 0x0313, 0x0002, 0x0055, 0x0355, 0x0355, 0x0003, 0x09b9, 0x09bc, + 0x09c0, 0x0001, 0x0055, 0x0379, 0x0002, 0x0055, 0xffff, 0x0389, + 0x0002, 0x09c3, 0x09c7, 0x0002, 0x0055, 0x03b4, 0x0393, 0x0002, + // Entry 40800 - 4083F + 0x0055, 0x03db, 0x03db, 0x0003, 0x09cf, 0x0000, 0x09d2, 0x0001, + 0x0055, 0x0379, 0x0002, 0x09d5, 0x09d9, 0x0002, 0x0055, 0x03b4, + 0x0393, 0x0002, 0x0055, 0x03db, 0x03db, 0x0003, 0x09e1, 0x0000, + 0x09e4, 0x0001, 0x0055, 0x0379, 0x0002, 0x09e7, 0x09eb, 0x0002, + 0x0055, 0x03b4, 0x0393, 0x0002, 0x0055, 0x03db, 0x03db, 0x0001, + 0x09f1, 0x0001, 0x0055, 0x0402, 0x0001, 0x09f6, 0x0001, 0x0055, + 0x0402, 0x0001, 0x09fb, 0x0001, 0x0055, 0x0402, 0x0004, 0x0a03, + 0x0a08, 0x0a0d, 0x0a1c, 0x0003, 0x0000, 0x1dc7, 0x39fb, 0x3af3, + // Entry 40840 - 4087F + 0x0003, 0x0055, 0x0422, 0x0433, 0x045a, 0x0002, 0x0000, 0x0a10, + 0x0003, 0x0000, 0x0a17, 0x0a14, 0x0001, 0x0055, 0x047b, 0x0003, + 0x0055, 0xffff, 0x04ba, 0x04fa, 0x0002, 0x0c03, 0x0a1f, 0x0003, + 0x0ac3, 0x0b63, 0x0a23, 0x009e, 0x0055, 0x052a, 0x0559, 0x058c, + 0x05bc, 0x062f, 0x06d9, 0x07e9, 0x0896, 0x0982, 0x0a6e, 0x0b66, + 0xffff, 0x0c32, 0x0da8, 0x0e28, 0x0ed4, 0x0f8d, 0x1023, 0x10d4, + 0x11c7, 0x12c7, 0x13a1, 0x146b, 0x150d, 0x15a0, 0x161c, 0x1639, + 0x1688, 0x170a, 0x1764, 0x17ea, 0x1834, 0x18a8, 0x191d, 0x1997, + // Entry 40880 - 408BF + 0x1a0d, 0x1a43, 0x1a93, 0x1b30, 0x1bdb, 0x1c3b, 0x1c58, 0x1c94, + 0x1cee, 0x1d72, 0x1dbc, 0x1e61, 0x1ee5, 0x1f49, 0x2009, 0x20cb, + 0x2135, 0x2165, 0x21b8, 0x21de, 0x2221, 0x228b, 0x22be, 0x2327, + 0x23fc, 0x24b2, 0x24dc, 0x2535, 0x25f4, 0x2686, 0x26e4, 0x2711, + 0x2744, 0x276d, 0x27a6, 0x27e2, 0x2838, 0x28b5, 0x2948, 0x29ce, + 0xffff, 0x2a28, 0x2a64, 0x2ac0, 0x2b26, 0x2b75, 0x2c03, 0x2c46, + 0x2c9a, 0x2d86, 0x2ddf, 0x2e49, 0x2e6c, 0x2e8c, 0x2eb2, 0x2f08, + 0x2f78, 0x2fd2, 0x30b1, 0x316d, 0x31fc, 0x3260, 0x3283, 0x32a0, + // Entry 408C0 - 408FF + 0x32f0, 0x33ac, 0x345c, 0x34e6, 0x34fd, 0x3570, 0x368c, 0x372e, + 0x37b2, 0x3828, 0x3842, 0x3899, 0x3923, 0x39a7, 0x3a1d, 0x3a97, + 0x3b4b, 0x3b6e, 0x3b8e, 0x3c5c, 0x3c82, 0x3cbf, 0xffff, 0x3d40, + 0x3da0, 0x3dc0, 0x3df6, 0x3e2c, 0x3e5c, 0x3e7f, 0x3e9c, 0x3ed6, + 0x3f30, 0x3f5c, 0x3f9c, 0x4000, 0x4049, 0x40d7, 0x4117, 0x41b0, + 0x425b, 0x42cb, 0x4323, 0x43d1, 0x4453, 0x4473, 0x449d, 0x44f7, + 0x458d, 0x2498, 0x361a, 0xffff, 0x075f, 0x0ca9, 0x0d2a, 0x17d0, + 0x2c2c, 0x2d28, 0x3be0, 0x009e, 0x0055, 0xffff, 0xffff, 0xffff, + // Entry 40900 - 4093F + 0xffff, 0x05ff, 0x06b9, 0x07c9, 0x0853, 0x0942, 0x0a28, 0x0b20, + 0xffff, 0x0c18, 0x0d8e, 0x0e02, 0x0e9e, 0x0f6a, 0x0ffd, 0x1095, + 0x1178, 0x128b, 0x1365, 0x143f, 0x14ed, 0x1577, 0xffff, 0xffff, + 0x165c, 0xffff, 0x1743, 0xffff, 0x181a, 0x188e, 0x1906, 0x1971, + 0xffff, 0xffff, 0x1a70, 0x1b03, 0x1bbe, 0xffff, 0xffff, 0xffff, + 0x1cc1, 0xffff, 0x1d95, 0x1e34, 0xffff, 0x1f1c, 0x1fcd, 0x20ab, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2201, 0xffff, 0xffff, 0x22ee, + 0x23c3, 0xffff, 0xffff, 0x24fc, 0x25cd, 0x266c, 0xffff, 0xffff, + // Entry 40940 - 4097F + 0xffff, 0xffff, 0xffff, 0xffff, 0x281e, 0x2892, 0x2925, 0x29b4, + 0xffff, 0xffff, 0xffff, 0x2aa0, 0xffff, 0x2b43, 0xffff, 0xffff, + 0x2c73, 0xffff, 0x2dbf, 0xffff, 0xffff, 0xffff, 0xffff, 0x2ee5, + 0xffff, 0x2f92, 0x3078, 0x3149, 0x31df, 0xffff, 0xffff, 0xffff, + 0x32bd, 0x3380, 0x342a, 0xffff, 0xffff, 0x3530, 0x365d, 0x3714, + 0x378c, 0xffff, 0xffff, 0x3876, 0x3909, 0x3981, 0xffff, 0x3a50, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3ca2, 0xffff, 0x3d23, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3ebc, + // Entry 40980 - 409BF + 0xffff, 0xffff, 0x3f7f, 0xffff, 0x4017, 0xffff, 0x40f7, 0x4181, + 0x4238, 0xffff, 0x42f7, 0x43a5, 0xffff, 0xffff, 0xffff, 0x44d7, + 0x4561, 0xffff, 0xffff, 0xffff, 0x073f, 0x0c8c, 0x0d0d, 0xffff, + 0xffff, 0x2d0e, 0x3bb7, 0x009e, 0x0055, 0xffff, 0xffff, 0xffff, + 0xffff, 0x066f, 0x0709, 0x0819, 0x08e9, 0x09d2, 0x0ac4, 0x0bbc, + 0xffff, 0x0c5c, 0x0dd2, 0x0e5e, 0x0f1a, 0x0fc0, 0x1059, 0x1123, + 0x1226, 0x1313, 0x13ed, 0x14a7, 0x153d, 0x15d9, 0xffff, 0xffff, + 0x16c4, 0xffff, 0x1795, 0xffff, 0x185e, 0x18d2, 0x1944, 0x19cd, + // Entry 409C0 - 409FF + 0xffff, 0xffff, 0x1ac6, 0x1b6d, 0x1c08, 0xffff, 0xffff, 0xffff, + 0x1d2b, 0xffff, 0x1df3, 0x1e9e, 0xffff, 0x1f86, 0x2055, 0x20fb, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2251, 0xffff, 0xffff, 0x2370, + 0x2445, 0xffff, 0xffff, 0x257e, 0x262b, 0x26b0, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2862, 0x28e8, 0x297b, 0x29f8, + 0xffff, 0xffff, 0xffff, 0x2af0, 0xffff, 0x2bb7, 0xffff, 0xffff, + 0x2cd1, 0xffff, 0x2e0f, 0xffff, 0xffff, 0xffff, 0xffff, 0x2f3b, + 0xffff, 0x3022, 0x30fa, 0x31a1, 0x3229, 0xffff, 0xffff, 0xffff, + // Entry 40A00 - 40A3F + 0x3333, 0x33e8, 0x349e, 0xffff, 0xffff, 0x35c0, 0x36cb, 0x3758, + 0x37e8, 0xffff, 0xffff, 0x38cc, 0x394d, 0x39dd, 0xffff, 0x3aee, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3cec, 0xffff, 0x3d6d, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3f00, + 0xffff, 0xffff, 0x3fc9, 0xffff, 0x408b, 0xffff, 0x4147, 0x41ef, + 0x428e, 0xffff, 0x435f, 0x440d, 0xffff, 0xffff, 0xffff, 0x4527, + 0x45c9, 0xffff, 0xffff, 0xffff, 0x078f, 0x0cd6, 0x0d57, 0xffff, + 0xffff, 0x2d52, 0x3c19, 0x0003, 0x0000, 0x0000, 0x0c07, 0x0042, + // Entry 40A40 - 40A7F + 0x000b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 40A80 - 40ABF + 0xffff, 0xffff, 0x0000, 0x0002, 0x0003, 0x0092, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, + 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, 0x0010, 0x0003, + 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0002, + 0x0587, 0x0008, 0x002f, 0x0044, 0x0053, 0x0000, 0x0060, 0x0070, + 0x0081, 0x0000, 0x0001, 0x0031, 0x0003, 0x0000, 0x0000, 0x0035, + 0x000d, 0x0022, 0xffff, 0x0000, 0x354a, 0x0018, 0x3555, 0x3560, + // Entry 40AC0 - 40AFF + 0x0031, 0x3565, 0x3572, 0x357b, 0x0059, 0x3586, 0x3591, 0x0001, + 0x0046, 0x0003, 0x0000, 0x0000, 0x004a, 0x0007, 0x0056, 0x0000, + 0x000b, 0x0012, 0x001b, 0x0024, 0x0031, 0x003a, 0x0001, 0x0055, + 0x0003, 0x0000, 0x0000, 0x0059, 0x0005, 0x0056, 0xffff, 0x0043, + 0x005b, 0x0071, 0x0087, 0x0003, 0x006a, 0x0000, 0x0064, 0x0001, + 0x0066, 0x0002, 0x0056, 0x009f, 0x00b0, 0x0001, 0x006c, 0x0002, + 0x0056, 0x009f, 0x00b0, 0x0004, 0x007e, 0x0078, 0x0075, 0x007b, + 0x0001, 0x0001, 0x001d, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, + // Entry 40B00 - 40B3F + 0x003c, 0x0001, 0x0002, 0x08e8, 0x0004, 0x008f, 0x0089, 0x0086, + 0x008c, 0x0001, 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, + 0x0002, 0x04fe, 0x0001, 0x0002, 0x0508, 0x0040, 0x0000, 0x0000, + 0x0000, 0x00d3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00d8, + 0x0000, 0x0000, 0x00dd, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x00e2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00e7, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40B40 - 40B7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x00ec, 0x0000, 0x0000, 0x00f1, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00f6, 0x0001, 0x00d5, + 0x0001, 0x0056, 0x00b5, 0x0001, 0x00da, 0x0001, 0x0056, 0x00be, + 0x0001, 0x00df, 0x0001, 0x0056, 0x003a, 0x0001, 0x00e4, 0x0001, + 0x0056, 0x00c9, 0x0001, 0x00e9, 0x0001, 0x0056, 0x00d0, 0x0001, + 0x00ee, 0x0001, 0x0056, 0x00e3, 0x0001, 0x00f3, 0x0001, 0x0056, + 0x00ee, 0x0001, 0x00f8, 0x0001, 0x0056, 0x00f5, 0x0003, 0x0004, + // Entry 40B80 - 40BBF + 0x05a5, 0x0b76, 0x0012, 0x0017, 0x0030, 0x008e, 0x0000, 0x0105, + 0x0000, 0x017c, 0x01a7, 0x03d7, 0x043b, 0x04aa, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0502, 0x051a, 0x0589, 0x0005, 0x0000, 0x0000, + 0x0000, 0x0000, 0x001d, 0x0003, 0x0026, 0x002b, 0x0021, 0x0001, + 0x0023, 0x0001, 0x0056, 0x00fc, 0x0001, 0x0028, 0x0001, 0x0056, + 0x00fc, 0x0001, 0x002d, 0x0001, 0x0056, 0x00fc, 0x0006, 0x0037, + 0x0000, 0x0000, 0x0000, 0x0000, 0x007d, 0x0002, 0x003a, 0x005b, + 0x0002, 0x003d, 0x004c, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + // Entry 40BC0 - 40BFF + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, + 0x3a09, 0x3a0c, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, + 0x3a0c, 0x0003, 0x005f, 0x0000, 0x006e, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x3a06, 0x3a09, 0x3a0c, 0x0004, 0x008b, 0x0085, 0x0082, 0x0088, + // Entry 40C00 - 40C3F + 0x0001, 0x0056, 0x0101, 0x0001, 0x0010, 0x0026, 0x0001, 0x0010, + 0x002f, 0x0001, 0x0017, 0x0538, 0x0005, 0x0094, 0x0000, 0x0000, + 0x0000, 0x00ef, 0x0002, 0x0097, 0x00cb, 0x0003, 0x009b, 0x00ab, + 0x00bb, 0x000e, 0x0000, 0xffff, 0x03ce, 0x03d3, 0x03d8, 0x03de, + 0x2221, 0x3af7, 0x3afe, 0x03f9, 0x3b07, 0x040b, 0x0411, 0x0416, + 0x242d, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, + 0x0422, 0x000e, 0x0000, 0xffff, 0x03ce, 0x03d3, 0x03d8, 0x03de, + // Entry 40C40 - 40C7F + 0x2221, 0x3af7, 0x3afe, 0x03f9, 0x3b07, 0x040b, 0x0411, 0x0416, + 0x242d, 0x0003, 0x00cf, 0x0000, 0x00df, 0x000e, 0x0000, 0xffff, + 0x03ce, 0x03d3, 0x03d8, 0x03de, 0x2221, 0x3af7, 0x3afe, 0x03f9, + 0x3b07, 0x040b, 0x0411, 0x0416, 0x242d, 0x000e, 0x0000, 0xffff, + 0x03ce, 0x03d3, 0x03d8, 0x03de, 0x2221, 0x3af7, 0x3afe, 0x03f9, + 0x3b07, 0x040b, 0x0411, 0x0416, 0x242d, 0x0003, 0x00f9, 0x00ff, + 0x00f3, 0x0001, 0x00f5, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, + 0x00fb, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x0101, 0x0002, + // Entry 40C80 - 40CBF + 0x0000, 0x0425, 0x042a, 0x0005, 0x010b, 0x0000, 0x0000, 0x0000, + 0x0166, 0x0002, 0x010e, 0x0142, 0x0003, 0x0112, 0x0122, 0x0132, + 0x000e, 0x0000, 0xffff, 0x042f, 0x0438, 0x3b0f, 0x3b15, 0x044c, + 0x0450, 0x0458, 0x0460, 0x3b1c, 0x046e, 0x3b23, 0x0479, 0x3b29, + 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, + 0x000e, 0x0000, 0xffff, 0x042f, 0x0438, 0x3b0f, 0x3b15, 0x044c, + 0x0450, 0x0458, 0x0460, 0x3b1c, 0x046e, 0x3b23, 0x0479, 0x3b29, + // Entry 40CC0 - 40CFF + 0x0003, 0x0146, 0x0000, 0x0156, 0x000e, 0x0000, 0xffff, 0x042f, + 0x0438, 0x3b0f, 0x3b15, 0x044c, 0x0450, 0x0458, 0x0460, 0x3b1c, + 0x046e, 0x3b23, 0x0479, 0x3b29, 0x000e, 0x0000, 0xffff, 0x042f, + 0x0438, 0x3b0f, 0x3b15, 0x044c, 0x0450, 0x0458, 0x0460, 0x3b1c, + 0x046e, 0x3b23, 0x0479, 0x3b29, 0x0003, 0x0170, 0x0176, 0x016a, + 0x0001, 0x016c, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x0172, + 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x0178, 0x0002, 0x0000, + 0x0425, 0x042a, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40D00 - 40D3F + 0x0185, 0x0000, 0x0196, 0x0004, 0x0193, 0x018d, 0x018a, 0x0190, + 0x0001, 0x0006, 0x000d, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, + 0x001b, 0x0001, 0x0017, 0x0372, 0x0004, 0x01a4, 0x019e, 0x019b, + 0x01a1, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0001, + 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, 0x01b0, 0x0215, + 0x026c, 0x02a1, 0x038a, 0x03a4, 0x03b5, 0x03c6, 0x0002, 0x01b3, + 0x01e4, 0x0003, 0x01b7, 0x01c6, 0x01d5, 0x000d, 0x0056, 0xffff, + 0x0110, 0x0114, 0x0118, 0x011c, 0x0120, 0x0124, 0x0128, 0x012c, + // Entry 40D40 - 40D7F + 0x0130, 0x0134, 0x0139, 0x013d, 0x000d, 0x0000, 0xffff, 0x2002, + 0x200a, 0x1f9a, 0x1ffe, 0x1f9a, 0x200c, 0x200a, 0x2002, 0x235d, + 0x21e4, 0x200a, 0x200e, 0x000d, 0x0056, 0xffff, 0x0141, 0x014a, + 0x0151, 0x0157, 0x0160, 0x0165, 0x016d, 0x0173, 0x017c, 0x0186, + 0x0194, 0x019e, 0x0003, 0x01e8, 0x01f7, 0x0206, 0x000d, 0x0056, + 0xffff, 0x0110, 0x0114, 0x0118, 0x011c, 0x0120, 0x0124, 0x0128, + 0x012c, 0x0130, 0x0134, 0x0139, 0x013d, 0x000d, 0x0000, 0xffff, + 0x2b3a, 0x2296, 0x2b3c, 0x2773, 0x2b3c, 0x25ed, 0x2296, 0x2b3a, + // Entry 40D80 - 40DBF + 0x2151, 0x2722, 0x2296, 0x2289, 0x000d, 0x0056, 0xffff, 0x01a6, + 0x01af, 0x01b4, 0x01bb, 0x0120, 0x01c5, 0x01ce, 0x01d5, 0x01df, + 0x01e9, 0x01f6, 0x01ff, 0x0002, 0x0218, 0x0242, 0x0005, 0x021e, + 0x0227, 0x0239, 0x0000, 0x0230, 0x0007, 0x0056, 0x0209, 0x0210, + 0x0215, 0x0219, 0x021e, 0x0223, 0x0227, 0x0007, 0x0000, 0x1f96, + 0x21e4, 0x235d, 0x3b31, 0x200c, 0x21e4, 0x2002, 0x0007, 0x0056, + 0x022c, 0x0230, 0x0234, 0x0238, 0x023d, 0x0241, 0x0246, 0x0007, + 0x0056, 0x024a, 0x0254, 0x0262, 0x0269, 0x0270, 0x0279, 0x0281, + // Entry 40DC0 - 40DFF + 0x0005, 0x0248, 0x0251, 0x0263, 0x0000, 0x025a, 0x0007, 0x0056, + 0x0209, 0x0210, 0x0215, 0x0219, 0x021e, 0x0223, 0x0227, 0x0007, + 0x0000, 0x2b40, 0x2722, 0x2151, 0x3b34, 0x25ed, 0x2722, 0x2b3a, + 0x0007, 0x0056, 0x022c, 0x0230, 0x0234, 0x0238, 0x023d, 0x0241, + 0x0246, 0x0007, 0x0056, 0x024a, 0x0254, 0x0262, 0x0269, 0x0270, + 0x0279, 0x0281, 0x0002, 0x026f, 0x0288, 0x0003, 0x0273, 0x027a, + 0x0281, 0x0005, 0x0056, 0xffff, 0x0288, 0x028e, 0x0295, 0x029d, + 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, + // Entry 40E00 - 40E3F + 0x0056, 0xffff, 0x02a4, 0x02af, 0x02bb, 0x02c8, 0x0003, 0x028c, + 0x0293, 0x029a, 0x0005, 0x0056, 0xffff, 0x0288, 0x028e, 0x0295, + 0x029d, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x0005, 0x0056, 0xffff, 0x02a4, 0x02af, 0x02bb, 0x02c8, 0x0002, + 0x02a4, 0x0317, 0x0003, 0x02a8, 0x02cd, 0x02f2, 0x0009, 0x02b5, + 0x02bb, 0x02b2, 0x02be, 0x02c4, 0x02c7, 0x02ca, 0x02b8, 0x02c1, + 0x0001, 0x0056, 0x02d4, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0056, + 0x02e0, 0x0001, 0x0000, 0x04f2, 0x0001, 0x0056, 0x02ec, 0x0001, + // Entry 40E40 - 40E7F + 0x0056, 0x02f1, 0x0001, 0x0056, 0x0302, 0x0001, 0x0056, 0x030f, + 0x0001, 0x0056, 0x0319, 0x0009, 0x02da, 0x02e0, 0x02d7, 0x02e3, + 0x02e9, 0x02ec, 0x02ef, 0x02dd, 0x02e6, 0x0001, 0x0056, 0x0320, + 0x0001, 0x0000, 0x1f9c, 0x0001, 0x0056, 0x032a, 0x0001, 0x0000, + 0x21e4, 0x0001, 0x0056, 0x02ec, 0x0001, 0x0056, 0x0332, 0x0001, + 0x0056, 0x033e, 0x0001, 0x0056, 0x0347, 0x0001, 0x0056, 0x0319, + 0x0009, 0x02ff, 0x0305, 0x02fc, 0x0308, 0x030e, 0x0311, 0x0314, + 0x0302, 0x030b, 0x0001, 0x0056, 0x02d4, 0x0001, 0x0000, 0x04ef, + // Entry 40E80 - 40EBF + 0x0001, 0x0056, 0x02e0, 0x0001, 0x0000, 0x04f2, 0x0001, 0x0056, + 0x02ec, 0x0001, 0x0056, 0x02f1, 0x0001, 0x0056, 0x0302, 0x0001, + 0x0056, 0x030f, 0x0001, 0x0056, 0x0319, 0x0003, 0x031b, 0x0340, + 0x0365, 0x0009, 0x0328, 0x032e, 0x0325, 0x0331, 0x0337, 0x033a, + 0x033d, 0x032b, 0x0334, 0x0001, 0x0056, 0x034e, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x0056, 0x0357, 0x0001, 0x0000, 0x04f2, 0x0001, + 0x0056, 0x02ec, 0x0001, 0x0056, 0x0361, 0x0001, 0x0056, 0x0370, + 0x0001, 0x0056, 0x037c, 0x0001, 0x0014, 0x0733, 0x0009, 0x034d, + // Entry 40EC0 - 40EFF + 0x0353, 0x034a, 0x0356, 0x035c, 0x035f, 0x0362, 0x0350, 0x0359, + 0x0001, 0x0056, 0x0385, 0x0001, 0x0000, 0x1f9c, 0x0001, 0x0056, + 0x038d, 0x0001, 0x0000, 0x21e4, 0x0001, 0x0056, 0x02ec, 0x0001, + 0x0056, 0x0393, 0x0001, 0x0056, 0x039e, 0x0001, 0x0056, 0x0347, + 0x0001, 0x0014, 0x0733, 0x0009, 0x0372, 0x0378, 0x036f, 0x037b, + 0x0381, 0x0384, 0x0387, 0x0375, 0x037e, 0x0001, 0x0056, 0x034e, + 0x0001, 0x0000, 0x04ef, 0x0001, 0x0056, 0x0357, 0x0001, 0x0000, + 0x04f2, 0x0001, 0x0056, 0x02ec, 0x0001, 0x0056, 0x0361, 0x0001, + // Entry 40F00 - 40F3F + 0x0056, 0x0370, 0x0001, 0x0056, 0x037c, 0x0001, 0x0014, 0x0733, + 0x0003, 0x0399, 0x0000, 0x038e, 0x0002, 0x0391, 0x0395, 0x0002, + 0x0056, 0x03a6, 0x03bf, 0x0002, 0x0056, 0x03b8, 0x03ca, 0x0002, + 0x039c, 0x03a0, 0x0002, 0x0056, 0x03b8, 0x03ca, 0x0002, 0x0000, + 0x04f5, 0x2701, 0x0004, 0x03b2, 0x03ac, 0x03a9, 0x03af, 0x0001, + 0x0006, 0x015b, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, + 0x0001, 0x0017, 0x0538, 0x0004, 0x03c3, 0x03bd, 0x03ba, 0x03c0, + 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, + // Entry 40F40 - 40F7F + 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, 0x03d4, 0x03ce, 0x03cb, + 0x03d1, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0005, 0x03dd, 0x0000, + 0x0000, 0x0000, 0x0428, 0x0002, 0x03e0, 0x0404, 0x0003, 0x03e4, + 0x0000, 0x03f4, 0x000e, 0x0056, 0x03fe, 0x03cf, 0x03d6, 0x03df, + 0x03e6, 0x03ec, 0x03f2, 0x03f9, 0x0406, 0x040c, 0x0411, 0x0417, + 0x041d, 0x0420, 0x000e, 0x0056, 0x03fe, 0x03cf, 0x03d6, 0x03df, + 0x03e6, 0x03ec, 0x03f2, 0x03f9, 0x0406, 0x040c, 0x0411, 0x0417, + // Entry 40F80 - 40FBF + 0x041d, 0x0420, 0x0003, 0x0408, 0x0000, 0x0418, 0x000e, 0x0056, + 0x03fe, 0x03cf, 0x03d6, 0x03df, 0x03e6, 0x03ec, 0x03f2, 0x03f9, + 0x0406, 0x040c, 0x0411, 0x0417, 0x041d, 0x0420, 0x000e, 0x0056, + 0x03fe, 0x03cf, 0x03d6, 0x03df, 0x03e6, 0x03ec, 0x03f2, 0x03f9, + 0x0406, 0x040c, 0x0411, 0x0417, 0x041d, 0x0420, 0x0003, 0x0431, + 0x0436, 0x042c, 0x0001, 0x042e, 0x0001, 0x0000, 0x04ef, 0x0001, + 0x0433, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0438, 0x0001, 0x0000, + 0x04ef, 0x0005, 0x0441, 0x0000, 0x0000, 0x0000, 0x0497, 0x0002, + // Entry 40FC0 - 40FFF + 0x0444, 0x0475, 0x0003, 0x0448, 0x0457, 0x0466, 0x000d, 0x0056, + 0xffff, 0x0425, 0x042d, 0x0437, 0x0442, 0x044a, 0x0453, 0x045e, + 0x0466, 0x046f, 0x0487, 0x048e, 0x0494, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0056, 0xffff, 0x0425, + 0x042d, 0x0437, 0x0442, 0x044a, 0x0453, 0x045e, 0x0466, 0x046f, + 0x0487, 0x048e, 0x0494, 0x0003, 0x0479, 0x0000, 0x0488, 0x000d, + 0x0056, 0xffff, 0x0425, 0x042d, 0x0437, 0x0442, 0x044a, 0x0453, + // Entry 41000 - 4103F + 0x045e, 0x0466, 0x046f, 0x0487, 0x048e, 0x0494, 0x000d, 0x0056, + 0xffff, 0x0425, 0x042d, 0x0437, 0x0442, 0x044a, 0x0453, 0x045e, + 0x0466, 0x046f, 0x0487, 0x048e, 0x0494, 0x0003, 0x04a0, 0x04a5, + 0x049b, 0x0001, 0x049d, 0x0001, 0x0000, 0x0601, 0x0001, 0x04a2, + 0x0001, 0x0000, 0x0601, 0x0001, 0x04a7, 0x0001, 0x0000, 0x0601, + 0x0001, 0x04ac, 0x0002, 0x04af, 0x04e0, 0x0003, 0x04b3, 0x04c2, + 0x04d1, 0x000d, 0x0000, 0xffff, 0x0606, 0x3b37, 0x3b3c, 0x3b43, + 0x3b4b, 0x3b53, 0x3b5c, 0x3b60, 0x3b65, 0x3b6a, 0x3b70, 0x3b79, + // Entry 41040 - 4107F + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, + 0x0000, 0xffff, 0x0657, 0x3b82, 0x0666, 0x066f, 0x3b88, 0x3b93, + 0x3b9f, 0x3ba7, 0x3bae, 0x3bb6, 0x3bbe, 0x3bc9, 0x0003, 0x04e4, + 0x0000, 0x04f3, 0x000d, 0x0000, 0xffff, 0x0606, 0x3b37, 0x3b3c, + 0x3b43, 0x3b4b, 0x3b53, 0x3b5c, 0x3b60, 0x3b65, 0x3b6a, 0x3b70, + 0x3b79, 0x000d, 0x0000, 0xffff, 0x0657, 0x3b82, 0x0666, 0x066f, + 0x3b88, 0x3b93, 0x3b9f, 0x3ba7, 0x3bae, 0x3bb6, 0x3bbe, 0x3bc9, + // Entry 41080 - 410BF + 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0509, 0x0004, + 0x0517, 0x0511, 0x050e, 0x0514, 0x0001, 0x0006, 0x000d, 0x0001, + 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0017, 0x0372, + 0x0005, 0x0520, 0x0000, 0x0000, 0x0000, 0x0576, 0x0002, 0x0523, + 0x0554, 0x0003, 0x0527, 0x0536, 0x0545, 0x000d, 0x0017, 0xffff, + 0x059c, 0x2e9c, 0x05b3, 0x2ea8, 0x05c0, 0x2eac, 0x2eb6, 0x05d8, + 0x05df, 0x05e5, 0x2ebb, 0x2ec2, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + // Entry 410C0 - 410FF + 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0017, 0xffff, 0x059c, 0x2e9c, + 0x05b3, 0x2ea8, 0x05c0, 0x2eac, 0x2eb6, 0x05d8, 0x05df, 0x05e5, + 0x2ebb, 0x2ec2, 0x0003, 0x0558, 0x0000, 0x0567, 0x000d, 0x0017, + 0xffff, 0x059c, 0x2e9c, 0x05b3, 0x2ea8, 0x05c0, 0x2eac, 0x2eb6, + 0x05d8, 0x05df, 0x05e5, 0x2ebb, 0x2ec2, 0x000d, 0x0017, 0xffff, + 0x059c, 0x2e9c, 0x05b3, 0x2ea8, 0x05c0, 0x2eac, 0x2eb6, 0x05d8, + 0x05df, 0x05e5, 0x2ebb, 0x2ec2, 0x0003, 0x057f, 0x0584, 0x057a, + 0x0001, 0x057c, 0x0001, 0x0000, 0x1a1d, 0x0001, 0x0581, 0x0001, + // Entry 41100 - 4113F + 0x0000, 0x1a1d, 0x0001, 0x0586, 0x0001, 0x0000, 0x1a1d, 0x0005, + 0x0000, 0x0000, 0x0000, 0x0000, 0x058f, 0x0003, 0x0599, 0x059f, + 0x0593, 0x0001, 0x0595, 0x0002, 0x0056, 0x049d, 0x04a7, 0x0001, + 0x059b, 0x0002, 0x0056, 0x04ab, 0x04a7, 0x0001, 0x05a1, 0x0002, + 0x0056, 0x049d, 0x04a7, 0x0042, 0x05e8, 0x05ed, 0x05f2, 0x05f7, + 0x0616, 0x0635, 0x0654, 0x0673, 0x0692, 0x06b1, 0x06d0, 0x06ef, + 0x070e, 0x0731, 0x0754, 0x0777, 0x077c, 0x0781, 0x0786, 0x07a7, + 0x07c8, 0x07e9, 0x07ee, 0x07f3, 0x07f8, 0x07fd, 0x0802, 0x0807, + // Entry 41140 - 4117F + 0x080c, 0x0811, 0x0816, 0x0832, 0x084e, 0x086a, 0x0886, 0x08a2, + 0x08be, 0x08da, 0x08f6, 0x0912, 0x092e, 0x094a, 0x0966, 0x0982, + 0x099e, 0x09ba, 0x09d6, 0x09f2, 0x0a0e, 0x0a2a, 0x0a46, 0x0a62, + 0x0a67, 0x0a6c, 0x0a71, 0x0a8f, 0x0aa9, 0x0ac3, 0x0ae1, 0x0afb, + 0x0b15, 0x0b33, 0x0b4d, 0x0b67, 0x0b6c, 0x0b71, 0x0001, 0x05ea, + 0x0001, 0x0001, 0x0040, 0x0001, 0x05ef, 0x0001, 0x0001, 0x0040, + 0x0001, 0x05f4, 0x0001, 0x0001, 0x0040, 0x0003, 0x05fb, 0x05fe, + 0x0603, 0x0001, 0x0014, 0x0996, 0x0003, 0x0056, 0x04b5, 0x04c5, + // Entry 41180 - 411BF + 0x04d0, 0x0002, 0x0606, 0x060e, 0x0006, 0x0014, 0x09d6, 0x09bf, + 0xffff, 0xffff, 0x368a, 0x3696, 0x0006, 0x0056, 0x050a, 0x04e2, + 0xffff, 0xffff, 0x04ef, 0x04fd, 0x0003, 0x061a, 0x061d, 0x0622, + 0x0001, 0x0014, 0x06de, 0x0003, 0x0056, 0x04b5, 0x04c5, 0x04d0, + 0x0002, 0x0625, 0x062d, 0x0006, 0x0014, 0x09d6, 0x09bf, 0xffff, + 0xffff, 0x368a, 0x3696, 0x0006, 0x0056, 0x050a, 0x04e2, 0xffff, + 0xffff, 0x04ef, 0x04fd, 0x0003, 0x0639, 0x063c, 0x0641, 0x0001, + 0x0014, 0x06de, 0x0003, 0x0056, 0x04b5, 0x04c5, 0x04d0, 0x0002, + // Entry 411C0 - 411FF + 0x0644, 0x064c, 0x0006, 0x0014, 0x09d6, 0x09bf, 0xffff, 0xffff, + 0x368a, 0x3696, 0x0006, 0x0056, 0x050a, 0x04e2, 0xffff, 0xffff, + 0x04ef, 0x04fd, 0x0003, 0x0658, 0x065b, 0x0660, 0x0001, 0x0056, + 0x0518, 0x0003, 0x0056, 0x0521, 0x0535, 0x0544, 0x0002, 0x0663, + 0x066b, 0x0006, 0x0056, 0x058e, 0x055a, 0xffff, 0xffff, 0x056a, + 0x057b, 0x0006, 0x0056, 0x05d9, 0x059f, 0xffff, 0xffff, 0x05b1, + 0x05c4, 0x0003, 0x0677, 0x067a, 0x067f, 0x0001, 0x0001, 0x0117, + 0x0003, 0x0056, 0x0521, 0x0535, 0x0544, 0x0002, 0x0682, 0x068a, + // Entry 41200 - 4123F + 0x0006, 0x0018, 0x057a, 0x057a, 0xffff, 0xffff, 0x057a, 0x057a, + 0x0006, 0x0056, 0x05ec, 0x05ec, 0xffff, 0xffff, 0x05ec, 0x05ec, + 0x0003, 0x0696, 0x0699, 0x069e, 0x0001, 0x0001, 0x0117, 0x0003, + 0x0056, 0x0521, 0x0535, 0x0544, 0x0002, 0x06a1, 0x06a9, 0x0006, + 0x0018, 0x057a, 0x057a, 0xffff, 0xffff, 0x057a, 0x057a, 0x0006, + 0x0056, 0x05ec, 0x05ec, 0xffff, 0xffff, 0x05ec, 0x05ec, 0x0003, + 0x06b5, 0x06b8, 0x06bd, 0x0001, 0x0056, 0x05f9, 0x0003, 0x0056, + 0x0602, 0x0617, 0x0627, 0x0002, 0x06c0, 0x06c8, 0x0006, 0x0056, + // Entry 41240 - 4127F + 0x0670, 0x063e, 0xffff, 0xffff, 0x064e, 0x065f, 0x0006, 0x0056, + 0x06b9, 0x0681, 0xffff, 0xffff, 0x0693, 0x06a6, 0x0003, 0x06d4, + 0x06d7, 0x06dc, 0x0001, 0x0056, 0x06cc, 0x0003, 0x0056, 0x0602, + 0x0617, 0x0627, 0x0002, 0x06df, 0x06e7, 0x0006, 0x0056, 0x06d2, + 0x06d2, 0xffff, 0xffff, 0x06d2, 0x06d2, 0x0006, 0x0056, 0x06df, + 0x06df, 0xffff, 0xffff, 0x06df, 0x06df, 0x0003, 0x06f3, 0x06f6, + 0x06fb, 0x0001, 0x0056, 0x06ee, 0x0003, 0x0056, 0x0602, 0x0617, + 0x0627, 0x0002, 0x06fe, 0x0706, 0x0006, 0x0056, 0x06d2, 0x06d2, + // Entry 41280 - 412BF + 0xffff, 0xffff, 0x06d2, 0x06d2, 0x0006, 0x0056, 0x06df, 0x06df, + 0xffff, 0xffff, 0x06df, 0x06df, 0x0004, 0x0713, 0x0716, 0x071b, + 0x072e, 0x0001, 0x0056, 0x06f1, 0x0003, 0x0056, 0x06fa, 0x070e, + 0x071d, 0x0002, 0x071e, 0x0726, 0x0006, 0x0056, 0x0762, 0x0733, + 0xffff, 0xffff, 0x0743, 0x0753, 0x0006, 0x0056, 0x07a7, 0x0772, + 0xffff, 0xffff, 0x0784, 0x0796, 0x0001, 0x0056, 0x07b9, 0x0004, + 0x0736, 0x0739, 0x073e, 0x0751, 0x0001, 0x0056, 0x07c6, 0x0003, + 0x0056, 0x06fa, 0x070e, 0x071d, 0x0002, 0x0741, 0x0749, 0x0006, + // Entry 412C0 - 412FF + 0x0056, 0x07d9, 0x07cc, 0xffff, 0xffff, 0x07d9, 0x07d9, 0x0006, + 0x0056, 0x07f4, 0x07e5, 0xffff, 0xffff, 0x07f4, 0x07f4, 0x0001, + 0x0056, 0x07b9, 0x0004, 0x0759, 0x075c, 0x0761, 0x0774, 0x0001, + 0x0056, 0x07c6, 0x0003, 0x0056, 0x06fa, 0x070e, 0x071d, 0x0002, + 0x0764, 0x076c, 0x0006, 0x0056, 0x07d9, 0x07cc, 0xffff, 0xffff, + 0x07d9, 0x07d9, 0x0006, 0x0056, 0x07f4, 0x07e5, 0xffff, 0xffff, + 0x07f4, 0x07f4, 0x0001, 0x0056, 0x07b9, 0x0001, 0x0779, 0x0001, + 0x0056, 0x0802, 0x0001, 0x077e, 0x0001, 0x0056, 0x0815, 0x0001, + // Entry 41300 - 4133F + 0x0783, 0x0001, 0x0056, 0x0815, 0x0003, 0x078a, 0x078d, 0x0794, + 0x0001, 0x0056, 0x0821, 0x0005, 0x0056, 0x0835, 0x083d, 0x0845, + 0x0828, 0x084b, 0x0002, 0x0797, 0x079f, 0x0006, 0x0056, 0x086d, + 0x0854, 0xffff, 0xffff, 0x0862, 0x0862, 0x0006, 0x0056, 0x0896, + 0x0879, 0xffff, 0xffff, 0x0889, 0x0889, 0x0003, 0x07ab, 0x07ae, + 0x07b5, 0x0001, 0x0056, 0x0821, 0x0005, 0x0056, 0xffff, 0xffff, + 0xffff, 0x0828, 0x084b, 0x0002, 0x07b8, 0x07c0, 0x0006, 0x0056, + 0x086d, 0x0854, 0xffff, 0xffff, 0x0862, 0x0862, 0x0006, 0x0056, + // Entry 41340 - 4137F + 0x0896, 0x0879, 0xffff, 0xffff, 0x0889, 0x0889, 0x0003, 0x07cc, + 0x07cf, 0x07d6, 0x0001, 0x0056, 0x0821, 0x0005, 0x0056, 0xffff, + 0xffff, 0xffff, 0x0828, 0x084b, 0x0002, 0x07d9, 0x07e1, 0x0006, + 0x0056, 0x086d, 0x0854, 0xffff, 0xffff, 0x0862, 0x0862, 0x0006, + 0x0056, 0x0896, 0x0879, 0xffff, 0xffff, 0x0889, 0x0889, 0x0001, + 0x07eb, 0x0001, 0x0056, 0x08a4, 0x0001, 0x07f0, 0x0001, 0x0056, + 0x08b0, 0x0001, 0x07f5, 0x0001, 0x0056, 0x08b9, 0x0001, 0x07fa, + 0x0001, 0x0056, 0x08c0, 0x0001, 0x07ff, 0x0001, 0x0056, 0x08d0, + // Entry 41380 - 413BF + 0x0001, 0x0804, 0x0001, 0x0056, 0x08d0, 0x0001, 0x0809, 0x0001, + 0x0056, 0x08dc, 0x0001, 0x080e, 0x0001, 0x0056, 0x08ed, 0x0001, + 0x0813, 0x0001, 0x0056, 0x08ed, 0x0003, 0x0000, 0x081a, 0x081f, + 0x0003, 0x0056, 0x08fa, 0x0910, 0x0921, 0x0002, 0x0822, 0x082a, + 0x0006, 0x0056, 0x096c, 0x0939, 0xffff, 0xffff, 0x094b, 0x095c, + 0x0006, 0x0056, 0x09b6, 0x097d, 0xffff, 0xffff, 0x0991, 0x09a4, + 0x0003, 0x0000, 0x0836, 0x083b, 0x0003, 0x0056, 0x08fa, 0x0910, + 0x0921, 0x0002, 0x083e, 0x0846, 0x0006, 0x0056, 0x096c, 0x0939, + // Entry 413C0 - 413FF + 0xffff, 0xffff, 0x094b, 0x095c, 0x0006, 0x0056, 0x09b6, 0x097d, + 0xffff, 0xffff, 0x0991, 0x09a4, 0x0003, 0x0000, 0x0852, 0x0857, + 0x0003, 0x0056, 0x08fa, 0x0910, 0x0921, 0x0002, 0x085a, 0x0862, + 0x0006, 0x0056, 0x096c, 0x0939, 0xffff, 0xffff, 0x094b, 0x095c, + 0x0006, 0x0056, 0x09b6, 0x097d, 0xffff, 0xffff, 0x0991, 0x09a4, + 0x0003, 0x0000, 0x086e, 0x0873, 0x0003, 0x0056, 0x09c9, 0x09e1, + 0x09f5, 0x0002, 0x0876, 0x087e, 0x0006, 0x0056, 0x0a50, 0x0a0f, + 0xffff, 0xffff, 0x0a24, 0x0a39, 0x0006, 0x0056, 0x0aac, 0x0a65, + // Entry 41400 - 4143F + 0xffff, 0xffff, 0x0a7c, 0x0a93, 0x0003, 0x0000, 0x088a, 0x088f, + 0x0003, 0x0056, 0x09c9, 0x09e1, 0x09f5, 0x0002, 0x0892, 0x089a, + 0x0006, 0x0056, 0x0a50, 0x0a0f, 0xffff, 0xffff, 0x0a24, 0x0a39, + 0x0006, 0x0056, 0x0aac, 0x0a65, 0xffff, 0xffff, 0x0a7c, 0x0a93, + 0x0003, 0x0000, 0x08a6, 0x08ab, 0x0003, 0x0056, 0x09c9, 0x09e1, + 0x09f5, 0x0002, 0x08ae, 0x08b6, 0x0006, 0x0056, 0x0a50, 0x0a0f, + 0xffff, 0xffff, 0x0a24, 0x0a39, 0x0006, 0x0056, 0x0aac, 0x0a65, + 0xffff, 0xffff, 0x0a7c, 0x0a93, 0x0003, 0x0000, 0x08c2, 0x08c7, + // Entry 41440 - 4147F + 0x0003, 0x0056, 0x0ac3, 0x0ad4, 0x0ae1, 0x0002, 0x08ca, 0x08d2, + 0x0006, 0x0056, 0x0b20, 0x0af4, 0xffff, 0xffff, 0x0b02, 0x0b10, + 0x0006, 0x0056, 0x0b60, 0x0b2e, 0xffff, 0xffff, 0x0b3e, 0x0b4e, + 0x0003, 0x0000, 0x08de, 0x08e3, 0x0003, 0x0056, 0x0ac3, 0x0ad4, + 0x0ae1, 0x0002, 0x08e6, 0x08ee, 0x0006, 0x0056, 0x0b20, 0x0af4, + 0xffff, 0xffff, 0x0b02, 0x0b10, 0x0006, 0x0056, 0x0b60, 0x0b2e, + 0xffff, 0xffff, 0x0b3e, 0x0b4e, 0x0003, 0x0000, 0x08fa, 0x08ff, + 0x0003, 0x0056, 0x0ac3, 0x0ad4, 0x0ae1, 0x0002, 0x0902, 0x090a, + // Entry 41480 - 414BF + 0x0006, 0x0056, 0x0b20, 0x0af4, 0xffff, 0xffff, 0x0b02, 0x0b10, + 0x0006, 0x0056, 0x0b60, 0x0b2e, 0xffff, 0xffff, 0x0b3e, 0x0b4e, + 0x0003, 0x0000, 0x0916, 0x091b, 0x0003, 0x0056, 0x0b70, 0x0b83, + 0x0b91, 0x0002, 0x091e, 0x0926, 0x0006, 0x0056, 0x0bb5, 0x0ba6, + 0xffff, 0xffff, 0x0bb5, 0x0bc3, 0x0006, 0x0056, 0x0be2, 0x0bd1, + 0xffff, 0xffff, 0x0be2, 0x0bf2, 0x0003, 0x0000, 0x0932, 0x0937, + 0x0003, 0x0056, 0x0b70, 0x0b83, 0x0b91, 0x0002, 0x093a, 0x0942, + 0x0006, 0x0056, 0x0bb5, 0x0ba6, 0xffff, 0xffff, 0x0bb5, 0x0bc3, + // Entry 414C0 - 414FF + 0x0006, 0x0056, 0x0be2, 0x0bd1, 0xffff, 0xffff, 0x0be2, 0x0bf2, + 0x0003, 0x0000, 0x094e, 0x0953, 0x0003, 0x0056, 0x0b70, 0x0b83, + 0x0b91, 0x0002, 0x0956, 0x095e, 0x0006, 0x0056, 0x0bb5, 0x0ba6, + 0xffff, 0xffff, 0x0bb5, 0x0bc3, 0x0006, 0x0056, 0x0be2, 0x0bd1, + 0xffff, 0xffff, 0x0be2, 0x0bf2, 0x0003, 0x0000, 0x096a, 0x096f, + 0x0003, 0x0056, 0x0c02, 0x0c15, 0x0c24, 0x0002, 0x0972, 0x097a, + 0x0006, 0x0056, 0x0c6b, 0x0c39, 0xffff, 0xffff, 0x0c49, 0x0c59, + 0x0006, 0x0056, 0x0cb3, 0x0c7b, 0xffff, 0xffff, 0x0c8d, 0x0c9f, + // Entry 41500 - 4153F + 0x0003, 0x0000, 0x0986, 0x098b, 0x0003, 0x0056, 0x0c02, 0x0c15, + 0x0c24, 0x0002, 0x098e, 0x0996, 0x0006, 0x0056, 0x0c6b, 0x0c39, + 0xffff, 0xffff, 0x0c49, 0x0c59, 0x0006, 0x0056, 0x0cb3, 0x0c7b, + 0xffff, 0xffff, 0x0c8d, 0x0c9f, 0x0003, 0x0000, 0x09a2, 0x09a7, + 0x0003, 0x0056, 0x0c02, 0x0c15, 0x0c24, 0x0002, 0x09aa, 0x09b2, + 0x0006, 0x0056, 0x0c6b, 0x0c39, 0xffff, 0xffff, 0x0c49, 0x0c59, + 0x0006, 0x0056, 0x0cb3, 0x0c7b, 0xffff, 0xffff, 0x0c8d, 0x0c9f, + 0x0003, 0x0000, 0x09be, 0x09c3, 0x0003, 0x0056, 0x0cc5, 0x0cd7, + // Entry 41540 - 4157F + 0x0ce5, 0x0002, 0x09c6, 0x09ce, 0x0006, 0x0056, 0x0d28, 0x0cf9, + 0xffff, 0xffff, 0x0d08, 0x0d17, 0x0006, 0x0056, 0x0d6c, 0x0d37, + 0xffff, 0xffff, 0x0d48, 0x0d59, 0x0003, 0x0000, 0x09da, 0x09df, + 0x0003, 0x0056, 0x0cc5, 0x0cd7, 0x0ce5, 0x0002, 0x09e2, 0x09ea, + 0x0006, 0x0056, 0x0d28, 0x0cf9, 0xffff, 0xffff, 0x0d08, 0x0d17, + 0x0006, 0x0056, 0x0d6c, 0x0d37, 0xffff, 0xffff, 0x0d48, 0x0d59, + 0x0003, 0x0000, 0x09f6, 0x09fb, 0x0003, 0x0056, 0x0cc5, 0x0cd7, + 0x0ce5, 0x0002, 0x09fe, 0x0a06, 0x0006, 0x0056, 0x0d28, 0x0cf9, + // Entry 41580 - 415BF + 0xffff, 0xffff, 0x0d08, 0x0d17, 0x0006, 0x0056, 0x0d6c, 0x0d37, + 0xffff, 0xffff, 0x0d48, 0x0d59, 0x0003, 0x0000, 0x0a12, 0x0a17, + 0x0003, 0x0056, 0x0d7d, 0x0d90, 0x0d9e, 0x0002, 0x0a1a, 0x0a22, + 0x0006, 0x0056, 0x0dc2, 0x0db3, 0xffff, 0xffff, 0x0dc2, 0x0dd0, + 0x0006, 0x0056, 0x0def, 0x0dde, 0xffff, 0xffff, 0x0def, 0x0dff, + 0x0003, 0x0000, 0x0a2e, 0x0a33, 0x0003, 0x0056, 0x0d7d, 0x0d90, + 0x0d9e, 0x0002, 0x0a36, 0x0a3e, 0x0006, 0x0056, 0x0dc2, 0x0db3, + 0xffff, 0xffff, 0x0dc2, 0x0dd0, 0x0006, 0x0056, 0x0def, 0x0dde, + // Entry 415C0 - 415FF + 0xffff, 0xffff, 0x0def, 0x0dff, 0x0003, 0x0000, 0x0a4a, 0x0a4f, + 0x0003, 0x0056, 0x0d7d, 0x0d90, 0x0d9e, 0x0002, 0x0a52, 0x0a5a, + 0x0006, 0x0056, 0x0dc2, 0x0db3, 0xffff, 0xffff, 0x0dc2, 0x0dd0, + 0x0006, 0x0056, 0x0def, 0x0dde, 0xffff, 0xffff, 0x0def, 0x0dff, + 0x0001, 0x0a64, 0x0001, 0x0056, 0x0e0f, 0x0001, 0x0a69, 0x0001, + 0x0056, 0x0e0f, 0x0001, 0x0a6e, 0x0001, 0x0056, 0x0e2f, 0x0003, + 0x0a75, 0x0a78, 0x0a7c, 0x0001, 0x0056, 0x0e48, 0x0002, 0x0056, + 0xffff, 0x0e50, 0x0002, 0x0a7f, 0x0a87, 0x0006, 0x0056, 0x0e6b, + // Entry 41600 - 4163F + 0x0e5b, 0xffff, 0xffff, 0x0e6b, 0x0e7a, 0x0006, 0x0056, 0x0e9a, + 0x0e88, 0xffff, 0xffff, 0x0e9a, 0x0eab, 0x0003, 0x0a93, 0x0000, + 0x0a96, 0x0001, 0x0056, 0x0ebb, 0x0002, 0x0a99, 0x0aa1, 0x0006, + 0x0056, 0x0ec1, 0x0ec1, 0xffff, 0xffff, 0x0ec1, 0x0ec1, 0x0006, + 0x0056, 0x0ece, 0x0ece, 0xffff, 0xffff, 0x0ece, 0x0ece, 0x0003, + 0x0aad, 0x0000, 0x0ab0, 0x0001, 0x000d, 0x03ac, 0x0002, 0x0ab3, + 0x0abb, 0x0006, 0x000d, 0x03af, 0x03af, 0xffff, 0xffff, 0x03af, + 0x03af, 0x0006, 0x0056, 0x0edd, 0x0edd, 0xffff, 0xffff, 0x0edd, + // Entry 41640 - 4167F + 0x0edd, 0x0003, 0x0ac7, 0x0aca, 0x0ace, 0x0001, 0x000d, 0x0c85, + 0x0002, 0x0056, 0xffff, 0x0ee9, 0x0002, 0x0ad1, 0x0ad9, 0x0006, + 0x0056, 0x0f02, 0x0ef3, 0xffff, 0xffff, 0x0f02, 0x0f10, 0x0006, + 0x0056, 0x0f2e, 0x0f1d, 0xffff, 0xffff, 0x0f2e, 0x0f3e, 0x0003, + 0x0ae5, 0x0000, 0x0ae8, 0x0001, 0x0043, 0x092f, 0x0002, 0x0aeb, + 0x0af3, 0x0006, 0x0014, 0x12ef, 0x12ef, 0xffff, 0xffff, 0x12ef, + 0x12ef, 0x0006, 0x0056, 0x0f4d, 0x0f4d, 0xffff, 0xffff, 0x0f4d, + 0x0f4d, 0x0003, 0x0aff, 0x0000, 0x0b02, 0x0001, 0x0043, 0x092f, + // Entry 41680 - 416BF + 0x0002, 0x0b05, 0x0b0d, 0x0006, 0x0014, 0x12ef, 0x12ef, 0xffff, + 0xffff, 0x12ef, 0x12ef, 0x0006, 0x0056, 0x0f4d, 0x0f4d, 0xffff, + 0xffff, 0x0f4d, 0x0f4d, 0x0003, 0x0b19, 0x0b1c, 0x0b20, 0x0001, + 0x000d, 0x0d0f, 0x0002, 0x0056, 0xffff, 0x0f5a, 0x0002, 0x0b23, + 0x0b2b, 0x0006, 0x0056, 0x0f70, 0x0f60, 0xffff, 0xffff, 0x0f70, + 0x0f7f, 0x0006, 0x0056, 0x0f9f, 0x0f8d, 0xffff, 0xffff, 0x0f9f, + 0x0fb0, 0x0003, 0x0b37, 0x0000, 0x0b3a, 0x0001, 0x0001, 0x083e, + 0x0002, 0x0b3d, 0x0b45, 0x0006, 0x000d, 0x0d7f, 0x0d7f, 0xffff, + // Entry 416C0 - 416FF + 0xffff, 0x0d7f, 0x0d7f, 0x0006, 0x0056, 0x0fc0, 0x0fc0, 0xffff, + 0xffff, 0x0fc0, 0x0fc0, 0x0003, 0x0b51, 0x0000, 0x0b54, 0x0001, + 0x0000, 0x2002, 0x0002, 0x0b57, 0x0b5f, 0x0006, 0x0014, 0x1347, + 0x1347, 0xffff, 0xffff, 0x1347, 0x1347, 0x0006, 0x0056, 0x0fce, + 0x0fce, 0xffff, 0xffff, 0x0fce, 0x0fce, 0x0001, 0x0b69, 0x0001, + 0x0056, 0x0fd9, 0x0001, 0x0b6e, 0x0001, 0x0056, 0x0fe8, 0x0001, + 0x0b73, 0x0001, 0x0056, 0x0ff5, 0x0004, 0x0b7b, 0x0b80, 0x0b85, + 0x0b94, 0x0003, 0x0000, 0x1dc7, 0x39fb, 0x3af3, 0x0003, 0x0056, + // Entry 41700 - 4173F + 0x1000, 0x100a, 0x101b, 0x0002, 0x0000, 0x0b88, 0x0003, 0x0000, + 0x0b8f, 0x0b8c, 0x0001, 0x0056, 0x1032, 0x0003, 0x0056, 0xffff, + 0x1050, 0x1065, 0x0002, 0x0d5d, 0x0b97, 0x0003, 0x0c31, 0x0cc7, + 0x0b9b, 0x0094, 0x0056, 0x107b, 0x1086, 0x10a0, 0x10ba, 0x10f0, + 0x113d, 0x117b, 0x11c8, 0x122b, 0x1280, 0x12bc, 0x12fa, 0x1329, + 0x1366, 0x13b6, 0x13fe, 0x144e, 0x148e, 0x14db, 0x1548, 0x15bf, + 0x1622, 0x1677, 0x16b7, 0x16ee, 0x1724, 0x172b, 0x173d, 0x1771, + 0x1793, 0x17e9, 0x17fa, 0x1830, 0x1862, 0x1899, 0x18cf, 0x18e8, + // Entry 41740 - 4177F + 0x1900, 0x193e, 0x197b, 0x19a5, 0x19ab, 0x19be, 0x19df, 0x1a23, + 0x1a44, 0x1aa1, 0x1ae5, 0x1b1e, 0x1b6c, 0x1ba7, 0x1bd5, 0x1be6, + 0x1c16, 0x1c20, 0x1c36, 0x1c64, 0x1c73, 0x1c99, 0x1cf8, 0x1d42, + 0x1d50, 0x1d65, 0x1daa, 0x1de2, 0x1e0e, 0x1e1c, 0x1e2b, 0x1e3d, + 0x1e51, 0x1e65, 0x1e7e, 0x1eaf, 0x1ee4, 0x1f1a, 0x1f69, 0x1fb9, + 0x1fcd, 0x1fe7, 0x2013, 0x2026, 0x205e, 0x2068, 0x207f, 0x20b3, + 0x20c5, 0x20f5, 0x20fd, 0x2106, 0x210e, 0x2128, 0x215c, 0x217e, + 0x21ed, 0x223d, 0x2285, 0x22b7, 0x22be, 0x22c4, 0x22d9, 0x2325, + // Entry 41780 - 417BF + 0x2371, 0x23b1, 0x23b6, 0x23d2, 0x2426, 0x2463, 0x2496, 0x24c8, + 0x24ce, 0x24e9, 0x2520, 0x2553, 0x2585, 0x25a4, 0x25f4, 0x25fd, + 0x2605, 0x260f, 0x2617, 0x2628, 0x2666, 0x2696, 0x26c2, 0x26ca, + 0x26d3, 0x26e2, 0x26f6, 0x26fe, 0x2704, 0x2712, 0x2740, 0x274d, + 0x275b, 0x2787, 0x279a, 0x27d4, 0x27e3, 0x281e, 0x285c, 0x288c, + 0x28a3, 0x28e8, 0x291e, 0x2925, 0x292a, 0x2941, 0x297d, 0x0094, + 0x0056, 0xffff, 0xffff, 0xffff, 0xffff, 0x10d6, 0x1136, 0x116b, + 0x11ad, 0x1210, 0x1273, 0x12ac, 0x12ee, 0x1324, 0x1353, 0x13ac, + // Entry 417C0 - 417FF + 0x13ea, 0x1446, 0x147e, 0x14c0, 0x1523, 0x15a4, 0x1607, 0x166a, + 0x16b1, 0x16e3, 0xffff, 0xffff, 0x1733, 0xffff, 0x1778, 0xffff, + 0x17f2, 0x182a, 0x185c, 0x188e, 0xffff, 0xffff, 0x18f7, 0x1932, + 0x1976, 0xffff, 0xffff, 0xffff, 0x19cd, 0xffff, 0x1a2b, 0x1a88, + 0xffff, 0x1b05, 0x1b62, 0x1ba0, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1c2f, 0xffff, 0xffff, 0x1c84, 0x1ce3, 0xffff, 0xffff, 0x1d57, + 0x1da1, 0x1ddc, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1e79, 0x1ea8, 0x1edd, 0x1f12, 0x1f4a, 0xffff, 0xffff, 0x1fe1, + // Entry 41800 - 4183F + 0xffff, 0x201a, 0xffff, 0xffff, 0x2075, 0xffff, 0x20bd, 0xffff, + 0xffff, 0xffff, 0xffff, 0x211e, 0xffff, 0x2163, 0x21d4, 0x2231, + 0x2275, 0xffff, 0xffff, 0xffff, 0x22ca, 0x2317, 0x2361, 0xffff, + 0xffff, 0x23be, 0x241a, 0x245e, 0x248d, 0xffff, 0xffff, 0x24e0, + 0x251b, 0x254a, 0xffff, 0x258c, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x261f, 0x265a, 0x2690, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x270b, 0xffff, 0xffff, 0x2755, 0xffff, + 0x278d, 0xffff, 0x27db, 0x2813, 0x2854, 0xffff, 0x2896, 0x28dd, + // Entry 41840 - 4187F + 0xffff, 0xffff, 0xffff, 0x293a, 0x296f, 0x0094, 0x0056, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1116, 0x1157, 0x1197, 0x11ef, 0x1252, + 0x1299, 0x12d8, 0x1312, 0x1341, 0x138c, 0x13d3, 0x1425, 0x1469, + 0x14aa, 0x1502, 0x1579, 0x15e6, 0x1649, 0x1697, 0x16d0, 0x170c, + 0xffff, 0xffff, 0x175a, 0xffff, 0x17c1, 0xffff, 0x1815, 0x1849, + 0x187b, 0x18b7, 0xffff, 0xffff, 0x191c, 0x195d, 0x1993, 0xffff, + 0xffff, 0xffff, 0x1a04, 0xffff, 0x1a69, 0x1ac6, 0xffff, 0x1b43, + 0x1b89, 0x1bc1, 0xffff, 0xffff, 0xffff, 0xffff, 0x1c50, 0xffff, + // Entry 41880 - 418BF + 0xffff, 0x1cc1, 0x1d20, 0xffff, 0xffff, 0x1d86, 0x1dc6, 0x1dfb, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1e96, 0x1ec9, + 0x1efe, 0x1f35, 0x1f94, 0xffff, 0xffff, 0x2000, 0xffff, 0x2045, + 0xffff, 0xffff, 0x209c, 0xffff, 0x20e0, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2145, 0xffff, 0x21ac, 0x2212, 0x225c, 0x22a1, 0xffff, + 0xffff, 0xffff, 0x22fb, 0x2346, 0x2394, 0xffff, 0xffff, 0x23f9, + 0x2445, 0x247b, 0x24b2, 0xffff, 0xffff, 0x2505, 0x2538, 0x256f, + 0xffff, 0x25cf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2644, + // Entry 418C0 - 418FF + 0x267e, 0x26af, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x272c, 0xffff, 0xffff, 0x2774, 0xffff, 0x27ba, 0xffff, + 0x27fe, 0x283c, 0x2877, 0xffff, 0x28c3, 0x2906, 0xffff, 0xffff, + 0xffff, 0x295b, 0x299e, 0x0003, 0x0d61, 0x0dc7, 0x0d94, 0x0031, + 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 41900 - 4193F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x24ae, 0x24b7, + 0xffff, 0x2512, 0x0031, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 41940 - 4197F + 0xffff, 0x24ae, 0x24b7, 0xffff, 0x2512, 0x0031, 0x0007, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x24b2, 0x24bb, 0xffff, 0x24c4, + 0x0003, 0x0004, 0x016f, 0x0248, 0x0008, 0x0000, 0x0000, 0x0000, + // Entry 41980 - 419BF + 0x0000, 0x0000, 0x0000, 0x000d, 0x0038, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, 0x0027, 0x0004, 0x0024, + 0x001e, 0x001b, 0x0021, 0x0001, 0x0057, 0x0000, 0x0001, 0x0057, + 0x001b, 0x0001, 0x0057, 0x0030, 0x0001, 0x001f, 0x0b31, 0x0004, + 0x0035, 0x002f, 0x002c, 0x0032, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0008, 0x0041, 0x00a6, 0x00e7, 0x011c, 0x0134, 0x013c, 0x014d, + 0x015e, 0x0002, 0x0044, 0x0075, 0x0003, 0x0048, 0x0057, 0x0066, + // Entry 419C0 - 419FF + 0x000d, 0x0057, 0xffff, 0x0040, 0x0044, 0x0048, 0x004d, 0x0051, + 0x0055, 0x005a, 0x005f, 0x0063, 0x0067, 0x006b, 0x006f, 0x000d, + 0x0000, 0xffff, 0x2246, 0x2151, 0x2722, 0x2b3a, 0x2359, 0x2b3a, + 0x2296, 0x2b3e, 0x2b3a, 0x2b3a, 0x2296, 0x2b3a, 0x000d, 0x0057, + 0xffff, 0x0073, 0x0078, 0x0082, 0x0089, 0x0090, 0x0098, 0x00a1, + 0x00a7, 0x00ae, 0x00b6, 0x00bf, 0x00ca, 0x0003, 0x0079, 0x0088, + 0x0097, 0x000d, 0x0057, 0xffff, 0x0040, 0x0044, 0x0048, 0x004d, + 0x0051, 0x0055, 0x005a, 0x005f, 0x0063, 0x0067, 0x006b, 0x006f, + // Entry 41A00 - 41A3F + 0x000d, 0x0000, 0xffff, 0x2246, 0x2151, 0x2722, 0x2b3a, 0x2359, + 0x2b3a, 0x2296, 0x2b3e, 0x2b3a, 0x2b3a, 0x2296, 0x2b3a, 0x000d, + 0x0057, 0xffff, 0x0073, 0x0078, 0x0082, 0x0089, 0x0090, 0x0098, + 0x00a1, 0x00a7, 0x00ae, 0x00b6, 0x00bf, 0x00ca, 0x0002, 0x00a9, + 0x00c8, 0x0003, 0x00ad, 0x00b6, 0x00bf, 0x0007, 0x0057, 0x00d2, + 0x00d6, 0x00da, 0x00de, 0x00e2, 0x00e6, 0x00eb, 0x0007, 0x0000, + 0x2b40, 0x2722, 0x2151, 0x2722, 0x2773, 0x2722, 0x2b3a, 0x0007, + 0x0057, 0x00ef, 0x00f7, 0x0101, 0x010c, 0x0119, 0x0124, 0x012e, + // Entry 41A40 - 41A7F + 0x0003, 0x00cc, 0x00d5, 0x00de, 0x0007, 0x0057, 0x00d2, 0x00d6, + 0x00da, 0x00de, 0x00e2, 0x00e6, 0x00eb, 0x0007, 0x0000, 0x2b40, + 0x2722, 0x2151, 0x2722, 0x2773, 0x2722, 0x2b3a, 0x0007, 0x0057, + 0x00ef, 0x00f7, 0x0101, 0x010c, 0x0119, 0x0124, 0x012e, 0x0002, + 0x00ea, 0x0103, 0x0003, 0x00ee, 0x00f5, 0x00fc, 0x0005, 0x0057, + 0xffff, 0x0138, 0x013e, 0x0144, 0x014a, 0x0005, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0057, 0xffff, 0x0150, + 0x015c, 0x0168, 0x0174, 0x0003, 0x0107, 0x010e, 0x0115, 0x0005, + // Entry 41A80 - 41ABF + 0x0057, 0xffff, 0x0180, 0x0189, 0x0192, 0x019b, 0x0005, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0057, 0xffff, + 0x0150, 0x015c, 0x0168, 0x0174, 0x0001, 0x011e, 0x0003, 0x0122, + 0x0000, 0x012b, 0x0002, 0x0125, 0x0128, 0x0001, 0x0000, 0x04ef, + 0x0001, 0x0000, 0x04f2, 0x0002, 0x012e, 0x0131, 0x0001, 0x0057, + 0x01a4, 0x0001, 0x0057, 0x01b0, 0x0001, 0x0136, 0x0001, 0x0138, + 0x0002, 0x0009, 0x0078, 0x57b0, 0x0004, 0x014a, 0x0144, 0x0141, + 0x0147, 0x0001, 0x0057, 0x01bf, 0x0001, 0x0057, 0x01d8, 0x0001, + // Entry 41AC0 - 41AFF + 0x0057, 0x01eb, 0x0001, 0x0007, 0x02e9, 0x0004, 0x015b, 0x0155, + 0x0152, 0x0158, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, + 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, 0x016c, + 0x0166, 0x0163, 0x0169, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0040, + 0x01b0, 0x0000, 0x0000, 0x01b5, 0x01c0, 0x01c5, 0x01ca, 0x01cf, + 0x01d4, 0x01d9, 0x01de, 0x01e3, 0x01e8, 0x01ed, 0x01f2, 0x0000, + 0x0000, 0x0000, 0x01f7, 0x0202, 0x0207, 0x0000, 0x0000, 0x0000, + // Entry 41B00 - 41B3F + 0x020c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0211, 0x0000, 0x0216, 0x021b, + 0x0220, 0x0225, 0x022a, 0x022f, 0x0234, 0x0239, 0x023e, 0x0243, + 0x0001, 0x01b2, 0x0001, 0x0046, 0x0be1, 0x0002, 0x01b8, 0x01bb, + 0x0001, 0x0057, 0x01f9, 0x0003, 0x0057, 0x0200, 0x0212, 0x021c, + 0x0001, 0x01c2, 0x0001, 0x0029, 0x006c, 0x0001, 0x01c7, 0x0001, + // Entry 41B40 - 41B7F + 0x0029, 0x006c, 0x0001, 0x01cc, 0x0001, 0x0057, 0x0226, 0x0001, + 0x01d1, 0x0001, 0x0057, 0x022f, 0x0001, 0x01d6, 0x0001, 0x0057, + 0x022f, 0x0001, 0x01db, 0x0001, 0x0057, 0x0235, 0x0001, 0x01e0, + 0x0001, 0x0057, 0x023c, 0x0001, 0x01e5, 0x0001, 0x0057, 0x023c, + 0x0001, 0x01ea, 0x0001, 0x0057, 0x0241, 0x0001, 0x01ef, 0x0001, + 0x0057, 0x024a, 0x0001, 0x01f4, 0x0001, 0x0057, 0x024a, 0x0002, + 0x01fa, 0x01fd, 0x0001, 0x0057, 0x024f, 0x0003, 0x0057, 0x0256, + 0x025d, 0x01a4, 0x0001, 0x0204, 0x0001, 0x0029, 0x007b, 0x0001, + // Entry 41B80 - 41BBF + 0x0209, 0x0001, 0x0029, 0x007b, 0x0001, 0x020e, 0x0001, 0x0057, + 0x0269, 0x0001, 0x0213, 0x0001, 0x0057, 0x027a, 0x0001, 0x0218, + 0x0001, 0x0057, 0x0297, 0x0001, 0x021d, 0x0001, 0x0046, 0x15a8, + 0x0001, 0x0222, 0x0001, 0x0046, 0x15a8, 0x0001, 0x0227, 0x0001, + 0x0057, 0x029f, 0x0001, 0x022c, 0x0001, 0x0001, 0x07c5, 0x0001, + 0x0231, 0x0001, 0x0001, 0x07c5, 0x0001, 0x0236, 0x0001, 0x0057, + 0x02a7, 0x0001, 0x023b, 0x0001, 0x0001, 0x083e, 0x0001, 0x0240, + 0x0001, 0x0001, 0x083e, 0x0001, 0x0245, 0x0001, 0x0057, 0x02b0, + // Entry 41BC0 - 41BFF + 0x0004, 0x024d, 0x0252, 0x0000, 0x0257, 0x0003, 0x0000, 0x1dc7, + 0x39fb, 0x3af3, 0x0003, 0x0057, 0x02bc, 0x02c8, 0x02db, 0x0002, + 0x0000, 0x025a, 0x0003, 0x025e, 0x02cd, 0x0291, 0x0031, 0x0057, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x02ef, + 0x0352, 0x03b5, 0x040f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0475, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 41C00 - 41C3F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x04bd, 0x051d, 0xffff, + 0x057d, 0x003a, 0x0057, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x030b, 0x036e, 0x03ce, 0x042c, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0488, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x04d8, 0x0538, 0xffff, 0x0599, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 41C40 - 41C7F + 0xffff, 0xffff, 0xffff, 0xffff, 0x05e0, 0x0031, 0x0057, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x032f, 0x0392, + 0x03ef, 0x0451, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x04a3, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x04fb, 0x055b, 0xffff, 0x05bd, + 0x0003, 0x0004, 0x0345, 0x0780, 0x0011, 0x0000, 0x0000, 0x0000, + // Entry 41C80 - 41CBF + 0x0000, 0x0000, 0x0000, 0x0016, 0x0041, 0x0000, 0x01cf, 0x024d, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02d3, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x001f, 0x0000, 0x0030, 0x0004, + 0x002d, 0x0027, 0x0024, 0x002a, 0x0001, 0x0057, 0x05f1, 0x0001, + 0x0057, 0x0607, 0x0001, 0x0000, 0x04a5, 0x0001, 0x0057, 0x0618, + 0x0004, 0x003e, 0x0038, 0x0035, 0x003b, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0008, 0x004a, 0x00af, 0x0106, 0x013b, 0x017c, 0x019c, + // Entry 41CC0 - 41CFF + 0x01ad, 0x01be, 0x0002, 0x004d, 0x007e, 0x0003, 0x0051, 0x0060, + 0x006f, 0x000d, 0x0057, 0xffff, 0x0624, 0x062f, 0x063c, 0x0645, + 0x0650, 0x0655, 0x065c, 0x0667, 0x0670, 0x067f, 0x068c, 0x0697, + 0x000d, 0x0014, 0xffff, 0x3503, 0x3617, 0x36a1, 0x3509, 0x36a1, + 0x3503, 0x3503, 0x3509, 0x3506, 0x3509, 0x361a, 0x3515, 0x000d, + 0x0057, 0xffff, 0x0624, 0x062f, 0x063c, 0x0645, 0x0650, 0x0655, + 0x065c, 0x0667, 0x0670, 0x067f, 0x068c, 0x0697, 0x0003, 0x0082, + 0x0091, 0x00a0, 0x000d, 0x0057, 0xffff, 0x0624, 0x062f, 0x063c, + // Entry 41D00 - 41D3F + 0x0645, 0x0650, 0x0655, 0x065c, 0x0667, 0x06a2, 0x067f, 0x068c, + 0x0697, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, + 0x000d, 0x0057, 0xffff, 0x0624, 0x06af, 0x063c, 0x0645, 0x0650, + 0x0655, 0x065c, 0x0667, 0x06a2, 0x067f, 0x068c, 0x0697, 0x0002, + 0x00b2, 0x00dc, 0x0005, 0x00b8, 0x00c1, 0x00d3, 0x0000, 0x00ca, + 0x0007, 0x0057, 0x06be, 0x06c7, 0x06d0, 0x06db, 0x06e6, 0x06f3, + 0x06fc, 0x0007, 0x0000, 0x2b3a, 0x2b3c, 0x3a8d, 0x2151, 0x3a8d, + // Entry 41D40 - 41D7F + 0x2b4e, 0x2b3a, 0x0007, 0x0057, 0x06be, 0x06c7, 0x06d0, 0x06db, + 0x06e6, 0x06f3, 0x06fc, 0x0007, 0x0057, 0x06be, 0x06c7, 0x06d0, + 0x06db, 0x06e6, 0x06f3, 0x06fc, 0x0005, 0x00e2, 0x00eb, 0x00fd, + 0x0000, 0x00f4, 0x0007, 0x0057, 0x06be, 0x06c7, 0x06d0, 0x06db, + 0x06e6, 0x06f3, 0x06fc, 0x0007, 0x0000, 0x2b3a, 0x2b3c, 0x3a8d, + 0x2151, 0x3a8d, 0x2b4e, 0x2b3a, 0x0007, 0x0057, 0x06be, 0x06c7, + 0x06d0, 0x06db, 0x06e6, 0x06f3, 0x06fc, 0x0007, 0x0057, 0x06be, + 0x06c7, 0x06d0, 0x06db, 0x06e6, 0x06f3, 0x06fc, 0x0002, 0x0109, + // Entry 41D80 - 41DBF + 0x0122, 0x0003, 0x010d, 0x0114, 0x011b, 0x0005, 0x0057, 0xffff, + 0x0705, 0x0719, 0x0729, 0x0739, 0x0005, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x0005, 0x0057, 0xffff, 0x0705, 0x0719, + 0x0729, 0x0739, 0x0003, 0x0126, 0x012d, 0x0134, 0x0005, 0x0057, + 0xffff, 0x0705, 0x0719, 0x0729, 0x0739, 0x0005, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0057, 0xffff, 0x0705, + 0x0719, 0x0729, 0x0739, 0x0002, 0x013e, 0x015d, 0x0003, 0x0142, + 0x014b, 0x0154, 0x0002, 0x0145, 0x0148, 0x0001, 0x0057, 0x0749, + // Entry 41DC0 - 41DFF + 0x0001, 0x0057, 0x0750, 0x0002, 0x014e, 0x0151, 0x0001, 0x0057, + 0x0749, 0x0001, 0x0057, 0x0750, 0x0002, 0x0157, 0x015a, 0x0001, + 0x0057, 0x0749, 0x0001, 0x0057, 0x0750, 0x0003, 0x0161, 0x016a, + 0x0173, 0x0002, 0x0164, 0x0167, 0x0001, 0x0057, 0x0749, 0x0001, + 0x0057, 0x0750, 0x0002, 0x016d, 0x0170, 0x0001, 0x0057, 0x0749, + 0x0001, 0x0057, 0x0750, 0x0002, 0x0176, 0x0179, 0x0001, 0x0057, + 0x0749, 0x0001, 0x0057, 0x0750, 0x0003, 0x018b, 0x0196, 0x0180, + 0x0002, 0x0183, 0x0187, 0x0002, 0x0057, 0x0757, 0x0797, 0x0002, + // Entry 41E00 - 41E3F + 0x0057, 0x077b, 0x07bb, 0x0002, 0x018e, 0x0192, 0x0002, 0x0057, + 0x07be, 0x07db, 0x0002, 0x0000, 0x04f5, 0x3bd9, 0x0001, 0x0198, + 0x0002, 0x0057, 0xffff, 0x07db, 0x0004, 0x01aa, 0x01a4, 0x01a1, + 0x01a7, 0x0001, 0x0057, 0x07df, 0x0001, 0x0057, 0x07f3, 0x0001, + 0x0000, 0x0514, 0x0001, 0x0021, 0x0721, 0x0004, 0x01bb, 0x01b5, + 0x01b2, 0x01b8, 0x0001, 0x001d, 0x178c, 0x0001, 0x0021, 0x0727, + 0x0001, 0x0005, 0x0099, 0x0001, 0x0005, 0x00a1, 0x0004, 0x01cc, + 0x01c6, 0x01c3, 0x01c9, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + // Entry 41E40 - 41E7F + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0005, + 0x01d5, 0x0000, 0x0000, 0x0000, 0x023a, 0x0002, 0x01d8, 0x0209, + 0x0003, 0x01dc, 0x01eb, 0x01fa, 0x000d, 0x0057, 0xffff, 0x0802, + 0x080d, 0x081a, 0x0827, 0x0834, 0x0843, 0x0850, 0x085d, 0x086c, + 0x0881, 0x088c, 0x0895, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, + 0x3a09, 0x3a0c, 0x000d, 0x0057, 0xffff, 0x0802, 0x080d, 0x081a, + 0x0827, 0x0834, 0x0843, 0x0850, 0x085d, 0x086c, 0x0881, 0x088c, + // Entry 41E80 - 41EBF + 0x0895, 0x0003, 0x020d, 0x021c, 0x022b, 0x000d, 0x0057, 0xffff, + 0x0802, 0x080d, 0x081a, 0x0827, 0x0834, 0x0843, 0x0850, 0x085d, + 0x086c, 0x0881, 0x088c, 0x0895, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0057, 0xffff, 0x0802, 0x080d, + 0x081a, 0x0827, 0x0834, 0x0843, 0x0850, 0x085d, 0x086c, 0x0881, + 0x088c, 0x0895, 0x0003, 0x0243, 0x0248, 0x023e, 0x0001, 0x0240, + 0x0001, 0x0057, 0x08a6, 0x0001, 0x0245, 0x0001, 0x0057, 0x08a6, + // Entry 41EC0 - 41EFF + 0x0001, 0x024a, 0x0001, 0x0057, 0x08a6, 0x0008, 0x0256, 0x0000, + 0x0000, 0x0000, 0x02bb, 0x02c2, 0x0000, 0x9006, 0x0002, 0x0259, + 0x028a, 0x0003, 0x025d, 0x026c, 0x027b, 0x000d, 0x0003, 0xffff, + 0x04dd, 0x22ef, 0x22fe, 0x2307, 0x2313, 0x231e, 0x232c, 0x054c, + 0x0557, 0x0562, 0x2337, 0x2348, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0003, 0xffff, 0x04dd, 0x22ef, + 0x22fe, 0x2307, 0x2313, 0x231e, 0x232c, 0x054c, 0x0557, 0x0562, + // Entry 41F00 - 41F3F + 0x2337, 0x2348, 0x0003, 0x028e, 0x029d, 0x02ac, 0x000d, 0x0003, + 0xffff, 0x04dd, 0x22ef, 0x22fe, 0x2307, 0x2313, 0x231e, 0x232c, + 0x054c, 0x0557, 0x0562, 0x2337, 0x2348, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0003, 0xffff, 0x04dd, + 0x22ef, 0x22fe, 0x2307, 0x2313, 0x231e, 0x232c, 0x054c, 0x0557, + 0x0562, 0x2337, 0x2348, 0x0001, 0x02bd, 0x0001, 0x02bf, 0x0001, + 0x0000, 0x06c8, 0x0004, 0x02d0, 0x02ca, 0x02c7, 0x02cd, 0x0001, + // Entry 41F40 - 41F7F + 0x0057, 0x05f1, 0x0001, 0x0057, 0x0607, 0x0001, 0x0000, 0x04a5, + 0x0001, 0x0057, 0x0618, 0x0005, 0x02d9, 0x0000, 0x0000, 0x0000, + 0x033e, 0x0002, 0x02dc, 0x030d, 0x0003, 0x02e0, 0x02ef, 0x02fe, + 0x000d, 0x0057, 0xffff, 0x08af, 0x08b6, 0x08bf, 0x08ce, 0x08d9, + 0x08e2, 0x08e9, 0x08f0, 0x08f7, 0x0902, 0x090f, 0x091c, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0057, + 0xffff, 0x08af, 0x08b6, 0x08bf, 0x08ce, 0x08d9, 0x08e2, 0x08e9, + // Entry 41F80 - 41FBF + 0x08f0, 0x08f7, 0x0902, 0x090f, 0x091c, 0x0003, 0x0311, 0x0320, + 0x032f, 0x000d, 0x0057, 0xffff, 0x08af, 0x08b6, 0x08bf, 0x08ce, + 0x08d9, 0x08e2, 0x08e9, 0x08f0, 0x08f7, 0x0902, 0x090f, 0x091c, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, + 0x0057, 0xffff, 0x08af, 0x08b6, 0x08bf, 0x08ce, 0x08d9, 0x08e2, + 0x08e9, 0x08f0, 0x08f7, 0x0902, 0x090f, 0x091c, 0x0001, 0x0340, + 0x0001, 0x0342, 0x0001, 0x0000, 0x1a1d, 0x0042, 0x0388, 0x038d, + // Entry 41FC0 - 41FFF + 0x0392, 0x0397, 0x03ae, 0x03c5, 0x03dc, 0x03f3, 0x0405, 0x0417, + 0x042e, 0x0440, 0x0452, 0x046d, 0x0483, 0x0499, 0x049e, 0x04a3, + 0x04a8, 0x04bf, 0x04d1, 0x04e3, 0x04e8, 0x04ed, 0x04f2, 0x04f7, + 0x04fc, 0x0501, 0x0506, 0x050b, 0x0510, 0x0524, 0x0538, 0x054c, + 0x0560, 0x0574, 0x0588, 0x059c, 0x05b0, 0x05c4, 0x05d8, 0x05ec, + 0x0600, 0x0614, 0x0628, 0x063c, 0x0650, 0x0664, 0x0678, 0x068c, + 0x06a0, 0x06b4, 0x06b9, 0x06be, 0x06c3, 0x06d9, 0x06eb, 0x06fd, + 0x0713, 0x0725, 0x0737, 0x074d, 0x075f, 0x0771, 0x0776, 0x077b, + // Entry 42000 - 4203F + 0x0001, 0x038a, 0x0001, 0x0057, 0x0921, 0x0001, 0x038f, 0x0001, + 0x0057, 0x0921, 0x0001, 0x0394, 0x0001, 0x0057, 0x0921, 0x0003, + 0x039b, 0x039e, 0x03a3, 0x0001, 0x0057, 0x0928, 0x0003, 0x0057, + 0x092f, 0x0940, 0x094b, 0x0002, 0x03a6, 0x03aa, 0x0002, 0x0057, + 0x096c, 0x0957, 0x0002, 0x0057, 0x099b, 0x0987, 0x0003, 0x03b2, + 0x03b5, 0x03ba, 0x0001, 0x0057, 0x0928, 0x0003, 0x0057, 0x092f, + 0x0940, 0x094b, 0x0002, 0x03bd, 0x03c1, 0x0002, 0x0057, 0x096c, + 0x0957, 0x0002, 0x0057, 0x099b, 0x0987, 0x0003, 0x03c9, 0x03cc, + // Entry 42040 - 4207F + 0x03d1, 0x0001, 0x0057, 0x0928, 0x0003, 0x0057, 0x092f, 0x0940, + 0x094b, 0x0002, 0x03d4, 0x03d8, 0x0002, 0x0057, 0x096c, 0x0957, + 0x0002, 0x0057, 0x099b, 0x0987, 0x0003, 0x03e0, 0x03e3, 0x03e8, + 0x0001, 0x0000, 0x1a6a, 0x0003, 0x0000, 0x1a72, 0x1a7f, 0x1a8c, + 0x0002, 0x03eb, 0x03ef, 0x0002, 0x0000, 0x1a99, 0x1a99, 0x0002, + 0x0000, 0x1aa0, 0x1aa0, 0x0003, 0x03f7, 0x0000, 0x03fa, 0x0001, + 0x0000, 0x1a6a, 0x0002, 0x03fd, 0x0401, 0x0002, 0x0000, 0x1a99, + 0x1a99, 0x0002, 0x0000, 0x1aa0, 0x1aa0, 0x0003, 0x0409, 0x0000, + // Entry 42080 - 420BF + 0x040c, 0x0001, 0x0000, 0x1a6a, 0x0002, 0x040f, 0x0413, 0x0002, + 0x0000, 0x1a99, 0x1a99, 0x0002, 0x0000, 0x1aa0, 0x1aa0, 0x0003, + 0x041b, 0x041e, 0x0423, 0x0001, 0x0057, 0x09b1, 0x0003, 0x0000, + 0x1aad, 0x1ab8, 0x1ac3, 0x0002, 0x0426, 0x042a, 0x0002, 0x0000, + 0x1ace, 0x1ace, 0x0002, 0x0000, 0x1ad5, 0x1ad5, 0x0003, 0x0432, + 0x0000, 0x0435, 0x0001, 0x0057, 0x09b1, 0x0002, 0x0438, 0x043c, + 0x0002, 0x0000, 0x1ace, 0x1ace, 0x0002, 0x0000, 0x1ad5, 0x1ad5, + 0x0003, 0x0444, 0x0000, 0x0447, 0x0001, 0x0057, 0x09b1, 0x0002, + // Entry 420C0 - 420FF + 0x044a, 0x044e, 0x0002, 0x0000, 0x1ace, 0x1ace, 0x0002, 0x0000, + 0x1ad5, 0x1ad5, 0x0004, 0x0457, 0x045a, 0x045f, 0x046a, 0x0001, + 0x0057, 0x06fc, 0x0003, 0x0000, 0x1ae1, 0x1aeb, 0x1af5, 0x0002, + 0x0462, 0x0466, 0x0002, 0x0000, 0x1aff, 0x1aff, 0x0002, 0x0000, + 0x1b06, 0x1b06, 0x0001, 0x0000, 0x1b0d, 0x0004, 0x0472, 0x0000, + 0x0475, 0x0480, 0x0001, 0x0057, 0x06fc, 0x0002, 0x0478, 0x047c, + 0x0002, 0x0000, 0x1aff, 0x1aff, 0x0002, 0x0000, 0x1b06, 0x1b06, + 0x0001, 0x0000, 0x1b0d, 0x0004, 0x0488, 0x0000, 0x048b, 0x0496, + // Entry 42100 - 4213F + 0x0001, 0x0057, 0x06fc, 0x0002, 0x048e, 0x0492, 0x0002, 0x0000, + 0x1aff, 0x1aff, 0x0002, 0x0000, 0x1b06, 0x1b06, 0x0001, 0x0000, + 0x1b0d, 0x0001, 0x049b, 0x0001, 0x0057, 0x09bc, 0x0001, 0x04a0, + 0x0001, 0x0057, 0x09bc, 0x0001, 0x04a5, 0x0001, 0x0057, 0x09bc, + 0x0003, 0x04ac, 0x04af, 0x04b4, 0x0001, 0x0057, 0x09d5, 0x0003, + 0x0000, 0x1b2f, 0x1b39, 0x1b3f, 0x0002, 0x04b7, 0x04bb, 0x0002, + 0x0000, 0x1b48, 0x1b48, 0x0002, 0x0000, 0x1b4f, 0x1b4f, 0x0003, + 0x04c3, 0x0000, 0x04c6, 0x0001, 0x0057, 0x09d5, 0x0002, 0x04c9, + // Entry 42140 - 4217F + 0x04cd, 0x0002, 0x0000, 0x1b48, 0x1b48, 0x0002, 0x0000, 0x1b4f, + 0x1b4f, 0x0003, 0x04d5, 0x0000, 0x04d8, 0x0001, 0x0057, 0x09d5, + 0x0002, 0x04db, 0x04df, 0x0002, 0x0000, 0x1b48, 0x1b48, 0x0002, + 0x0000, 0x1b4f, 0x1b4f, 0x0001, 0x04e5, 0x0001, 0x0057, 0x09dc, + 0x0001, 0x04ea, 0x0001, 0x0057, 0x09dc, 0x0001, 0x04ef, 0x0001, + 0x0057, 0x09dc, 0x0001, 0x04f4, 0x0001, 0x0057, 0x09ed, 0x0001, + 0x04f9, 0x0001, 0x0057, 0x09ed, 0x0001, 0x04fe, 0x0001, 0x0057, + 0x09ed, 0x0001, 0x0503, 0x0001, 0x0057, 0x0a00, 0x0001, 0x0508, + // Entry 42180 - 421BF + 0x0001, 0x0057, 0x0a00, 0x0001, 0x050d, 0x0001, 0x0057, 0x0a00, + 0x0003, 0x0000, 0x0514, 0x0519, 0x0003, 0x0000, 0x1b83, 0x1b8f, + 0x1b9b, 0x0002, 0x051c, 0x0520, 0x0002, 0x0000, 0x1ba7, 0x1ba7, + 0x0002, 0x0000, 0x1bb4, 0x1bb4, 0x0003, 0x0000, 0x0528, 0x052d, + 0x0003, 0x0000, 0x1b83, 0x1b8f, 0x1b9b, 0x0002, 0x0530, 0x0534, + 0x0002, 0x0000, 0x1ba7, 0x1ba7, 0x0002, 0x0000, 0x1bb4, 0x1bb4, + 0x0003, 0x0000, 0x053c, 0x0541, 0x0003, 0x0000, 0x1b83, 0x1b8f, + 0x1b9b, 0x0002, 0x0544, 0x0548, 0x0002, 0x0000, 0x1ba7, 0x1ba7, + // Entry 421C0 - 421FF + 0x0002, 0x0000, 0x1bb4, 0x1bb4, 0x0003, 0x0000, 0x0550, 0x0555, + 0x0003, 0x0000, 0x1bc1, 0x1bcd, 0x1bd9, 0x0002, 0x0558, 0x055c, + 0x0002, 0x0000, 0x1be5, 0x1be5, 0x0002, 0x0000, 0x1bf2, 0x1bf2, + 0x0003, 0x0000, 0x0564, 0x0569, 0x0003, 0x0000, 0x1bc1, 0x1bcd, + 0x1bd9, 0x0002, 0x056c, 0x0570, 0x0002, 0x0000, 0x1be5, 0x1be5, + 0x0002, 0x0000, 0x1bf2, 0x1bf2, 0x0003, 0x0000, 0x0578, 0x057d, + 0x0003, 0x0000, 0x1bc1, 0x1bcd, 0x1bd9, 0x0002, 0x0580, 0x0584, + 0x0002, 0x0000, 0x1be5, 0x1be5, 0x0002, 0x0000, 0x1bf2, 0x1bf2, + // Entry 42200 - 4223F + 0x0003, 0x0000, 0x058c, 0x0591, 0x0003, 0x0000, 0x1bff, 0x1c0c, + 0x1c19, 0x0002, 0x0594, 0x0598, 0x0002, 0x0000, 0x1c26, 0x1c26, + 0x0002, 0x0000, 0x1c34, 0x1c34, 0x0003, 0x0000, 0x05a0, 0x05a5, + 0x0003, 0x0000, 0x1bff, 0x1c0c, 0x1c19, 0x0002, 0x05a8, 0x05ac, + 0x0002, 0x0000, 0x1c26, 0x1c26, 0x0002, 0x0000, 0x1c34, 0x1c34, + 0x0003, 0x0000, 0x05b4, 0x05b9, 0x0003, 0x0000, 0x1bff, 0x1c0c, + 0x1c19, 0x0002, 0x05bc, 0x05c0, 0x0002, 0x0000, 0x1c26, 0x1c26, + 0x0002, 0x0000, 0x1c34, 0x1c34, 0x0003, 0x0000, 0x05c8, 0x05cd, + // Entry 42240 - 4227F + 0x0003, 0x0000, 0x1c42, 0x1c51, 0x1c60, 0x0002, 0x05d0, 0x05d4, + 0x0002, 0x0000, 0x1c6f, 0x1c6f, 0x0002, 0x0000, 0x1c7f, 0x1c7f, + 0x0003, 0x0000, 0x05dc, 0x05e1, 0x0003, 0x0000, 0x1c42, 0x1c51, + 0x1c60, 0x0002, 0x05e4, 0x05e8, 0x0002, 0x0000, 0x1c6f, 0x1c6f, + 0x0002, 0x0000, 0x1c7f, 0x1c7f, 0x0003, 0x0000, 0x05f0, 0x05f5, + 0x0003, 0x0000, 0x1c42, 0x1c51, 0x1c60, 0x0002, 0x05f8, 0x05fc, + 0x0002, 0x0000, 0x1c6f, 0x1c6f, 0x0002, 0x0000, 0x1c7f, 0x1c7f, + 0x0003, 0x0000, 0x0604, 0x0609, 0x0003, 0x0000, 0x1c8f, 0x1c9d, + // Entry 42280 - 422BF + 0x1cab, 0x0002, 0x060c, 0x0610, 0x0002, 0x0000, 0x1cb9, 0x1cb9, + 0x0002, 0x0000, 0x1cc8, 0x1cc8, 0x0003, 0x0000, 0x0618, 0x061d, + 0x0003, 0x0000, 0x1c8f, 0x1c9d, 0x1cab, 0x0002, 0x0620, 0x0624, + 0x0002, 0x0000, 0x1cb9, 0x1cb9, 0x0002, 0x0000, 0x1cc8, 0x1cc8, + 0x0003, 0x0000, 0x062c, 0x0631, 0x0003, 0x0000, 0x1c8f, 0x1c9d, + 0x1cab, 0x0002, 0x0634, 0x0638, 0x0002, 0x0000, 0x1cb9, 0x1cb9, + 0x0002, 0x0000, 0x1cc8, 0x1cc8, 0x0003, 0x0000, 0x0640, 0x0645, + 0x0003, 0x0000, 0x1cd7, 0x1ce3, 0x1cef, 0x0002, 0x0648, 0x064c, + // Entry 422C0 - 422FF + 0x0002, 0x0000, 0x1cfb, 0x1cfb, 0x0002, 0x0000, 0x1d08, 0x1d08, + 0x0003, 0x0000, 0x0654, 0x0659, 0x0003, 0x0000, 0x1cd7, 0x1ce3, + 0x1cef, 0x0002, 0x065c, 0x0660, 0x0002, 0x0000, 0x1cfb, 0x1cfb, + 0x0002, 0x0000, 0x1d08, 0x1d08, 0x0003, 0x0000, 0x0668, 0x066d, + 0x0003, 0x0000, 0x1cd7, 0x1ce3, 0x1cef, 0x0002, 0x0670, 0x0674, + 0x0002, 0x0000, 0x1cfb, 0x1cfb, 0x0002, 0x0000, 0x1d08, 0x1d08, + 0x0003, 0x0000, 0x067c, 0x0681, 0x0003, 0x0000, 0x1d15, 0x1d23, + 0x1d31, 0x0002, 0x0684, 0x0688, 0x0002, 0x0000, 0x1d3f, 0x1d3f, + // Entry 42300 - 4233F + 0x0002, 0x0000, 0x1d4e, 0x1d4e, 0x0003, 0x0000, 0x0690, 0x0695, + 0x0003, 0x0000, 0x1d15, 0x1d23, 0x1d31, 0x0002, 0x0698, 0x069c, + 0x0002, 0x0000, 0x1d3f, 0x1d3f, 0x0002, 0x0000, 0x1d4e, 0x1d4e, + 0x0003, 0x0000, 0x06a4, 0x06a9, 0x0003, 0x0000, 0x1d15, 0x1d23, + 0x1d31, 0x0002, 0x06ac, 0x06b0, 0x0002, 0x0000, 0x1d3f, 0x1d3f, + 0x0002, 0x0000, 0x1d4e, 0x1d4e, 0x0001, 0x06b6, 0x0001, 0x0057, + 0x0a20, 0x0001, 0x06bb, 0x0001, 0x0057, 0x0a20, 0x0001, 0x06c0, + 0x0001, 0x0057, 0x0a20, 0x0003, 0x06c7, 0x06ca, 0x06ce, 0x0001, + // Entry 42340 - 4237F + 0x0021, 0x0f9c, 0x0002, 0x0000, 0xffff, 0x1d6c, 0x0002, 0x06d1, + 0x06d5, 0x0002, 0x0000, 0x1d76, 0x1d76, 0x0002, 0x0000, 0x1d7d, + 0x1d7d, 0x0003, 0x06dd, 0x0000, 0x06e0, 0x0001, 0x0021, 0x0f9c, + 0x0002, 0x06e3, 0x06e7, 0x0002, 0x0000, 0x1d76, 0x1d76, 0x0002, + 0x0000, 0x1d7d, 0x1d7d, 0x0003, 0x06ef, 0x0000, 0x06f2, 0x0001, + 0x0021, 0x0f9c, 0x0002, 0x06f5, 0x06f9, 0x0002, 0x0000, 0x1d76, + 0x1d76, 0x0002, 0x0000, 0x1d7d, 0x1d7d, 0x0003, 0x0701, 0x0704, + 0x0708, 0x0001, 0x0057, 0x0a30, 0x0002, 0x0000, 0xffff, 0x1d8b, + // Entry 42380 - 423BF + 0x0002, 0x070b, 0x070f, 0x0002, 0x0000, 0x1d97, 0x1d97, 0x0002, + 0x0000, 0x1da0, 0x1da0, 0x0003, 0x0717, 0x0000, 0x071a, 0x0001, + 0x0057, 0x0a30, 0x0002, 0x071d, 0x0721, 0x0002, 0x0000, 0x1d97, + 0x1d97, 0x0002, 0x0000, 0x1da0, 0x1da0, 0x0003, 0x0729, 0x0000, + 0x072c, 0x0001, 0x0057, 0x0a30, 0x0002, 0x072f, 0x0733, 0x0002, + 0x0000, 0x1d97, 0x1d97, 0x0002, 0x0000, 0x1da0, 0x1da0, 0x0003, + 0x073b, 0x073e, 0x0742, 0x0001, 0x0057, 0x0a3b, 0x0002, 0x000d, + 0xffff, 0x327f, 0x0002, 0x0745, 0x0749, 0x0002, 0x0026, 0x02ce, + // Entry 423C0 - 423FF + 0x02ce, 0x0002, 0x0000, 0x1dbb, 0x1dbb, 0x0003, 0x0751, 0x0000, + 0x0754, 0x0001, 0x0057, 0x0a3b, 0x0002, 0x0757, 0x075b, 0x0002, + 0x0026, 0x02ce, 0x02ce, 0x0002, 0x0000, 0x1dbb, 0x1dbb, 0x0003, + 0x0763, 0x0000, 0x0766, 0x0001, 0x0057, 0x0a3b, 0x0002, 0x0769, + 0x076d, 0x0002, 0x0026, 0x02ce, 0x02ce, 0x0002, 0x0000, 0x1dbb, + 0x1dbb, 0x0001, 0x0773, 0x0001, 0x0057, 0x0a46, 0x0001, 0x0778, + 0x0001, 0x0057, 0x0a46, 0x0001, 0x077d, 0x0001, 0x0057, 0x0a46, + 0x0004, 0x0785, 0x078a, 0x078f, 0x079e, 0x0003, 0x0000, 0x1dc7, + // Entry 42400 - 4243F + 0x39fb, 0x3af3, 0x0003, 0x0057, 0x0a56, 0x0a69, 0x0a82, 0x0002, + 0x0000, 0x0792, 0x0003, 0x0000, 0x0799, 0x0796, 0x0001, 0x0057, + 0x0a9a, 0x0003, 0x0057, 0xffff, 0x0abd, 0x0adf, 0x0002, 0x0000, + 0x07a1, 0x0003, 0x083f, 0x08d9, 0x07a5, 0x0098, 0x0057, 0x0afe, + 0x0b18, 0x0b37, 0x0b54, 0x0ba1, 0x0c18, 0x0ca2, 0x0cf6, 0x0d47, + 0x0d9b, 0x0def, 0xffff, 0x0e49, 0x0e98, 0x0eef, 0x0f56, 0x0fc6, + 0x1025, 0x1093, 0x112c, 0x11d0, 0x125f, 0x12dc, 0x1335, 0x137e, + 0x13cc, 0x13e1, 0x140b, 0x1449, 0x1482, 0x14c4, 0x14f5, 0x153f, + // Entry 42440 - 4247F + 0x157f, 0x15d8, 0x1622, 0x1640, 0x1676, 0x16d4, 0x173c, 0x1780, + 0x1790, 0x17b3, 0x17f2, 0x183e, 0x1874, 0x18e3, 0x191f, 0x196b, + 0x19e8, 0x1a4c, 0x1a82, 0x1aa4, 0x1ada, 0x1af0, 0x1b1d, 0x1b5f, + 0x1b81, 0x1bbb, 0x1c3e, 0x1c9e, 0x1cbe, 0x1cf8, 0x1d76, 0x1dd4, + 0x1e0a, 0x1e28, 0x1e44, 0x1e5f, 0x1e87, 0x1ea4, 0x1ee3, 0x1f3d, + 0x1f9a, 0x1ffc, 0xffff, 0x2043, 0x206a, 0x20a1, 0x20ed, 0x211f, + 0x2173, 0x218d, 0x21c0, 0x2209, 0x223e, 0x2279, 0x2291, 0x22a5, + 0x22b9, 0x22ec, 0x232c, 0x236d, 0x2403, 0x2478, 0x24d0, 0x2508, + // Entry 42480 - 424BF + 0x2521, 0x2533, 0x2569, 0x25e0, 0x2661, 0x26c2, 0x26d2, 0x271e, + 0x27a7, 0x2806, 0x2858, 0x289e, 0x28b0, 0x28eb, 0x2941, 0x298c, + 0x29c7, 0x2a10, 0x2a83, 0x2a93, 0x2aa5, 0x2abd, 0x2ad4, 0x2b00, + 0xffff, 0x2b4b, 0x2b94, 0x2ba8, 0x2bce, 0x2bf6, 0x2c16, 0x2c2c, + 0x2c3c, 0x2c60, 0x2ca3, 0x2cbe, 0x2ce6, 0x2d20, 0x2d4f, 0x2d99, + 0x2dc5, 0x2e26, 0x2e81, 0x2ebe, 0x2ef2, 0x2f55, 0x2f98, 0x2faf, + 0x2fc4, 0x2ffc, 0x305d, 0xffff, 0xffff, 0xffff, 0x0c82, 0x0098, + 0x0057, 0xffff, 0xffff, 0xffff, 0xffff, 0x0b80, 0x0c04, 0x0c8c, + // Entry 424C0 - 424FF + 0x0ce4, 0x0d37, 0x0d87, 0x0ddd, 0xffff, 0x0e36, 0x0e88, 0x0ed7, + 0x0f35, 0x0fae, 0x100a, 0x1075, 0x10f9, 0x11b4, 0x1237, 0x12bf, + 0x1329, 0x1365, 0xffff, 0xffff, 0x13f7, 0xffff, 0x146b, 0xffff, + 0x14e3, 0x1531, 0x1571, 0x15be, 0xffff, 0xffff, 0x1660, 0x16b8, + 0x1727, 0xffff, 0xffff, 0xffff, 0x17d7, 0xffff, 0x1857, 0x18cd, + 0xffff, 0x194a, 0x19c8, 0x1a3e, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1b09, 0xffff, 0xffff, 0x1b97, 0x1c19, 0xffff, 0xffff, 0x1cd7, + 0x1d57, 0x1dc4, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 42500 - 4253F + 0x1ece, 0x1f26, 0x1f81, 0x1fe7, 0xffff, 0xffff, 0xffff, 0x208f, + 0xffff, 0x2101, 0xffff, 0xffff, 0x21ad, 0xffff, 0x2229, 0xffff, + 0xffff, 0xffff, 0xffff, 0x22d6, 0xffff, 0x2340, 0x23e4, 0x245e, + 0x24be, 0xffff, 0xffff, 0xffff, 0x2545, 0x25c2, 0x263f, 0xffff, + 0xffff, 0x26f4, 0x2788, 0x27f6, 0x283f, 0xffff, 0xffff, 0x28d0, + 0x2931, 0x2977, 0xffff, 0x29e5, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2aeb, 0xffff, 0x2b3b, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2c50, 0xffff, 0xffff, 0x2cd4, 0xffff, + // Entry 42540 - 4257F + 0x2d33, 0xffff, 0x2dad, 0x2e0b, 0x2e6c, 0xffff, 0x2ed6, 0x2f3c, + 0xffff, 0xffff, 0xffff, 0x2fe8, 0x303c, 0xffff, 0xffff, 0xffff, + 0x0c69, 0x0098, 0x0057, 0xffff, 0xffff, 0xffff, 0xffff, 0x0bd3, + 0x0c39, 0x0cc5, 0x0d15, 0x0d64, 0x0db9, 0x0e11, 0xffff, 0x0e69, + 0x0eb5, 0x0f14, 0x0f84, 0x0feb, 0x104a, 0x10c8, 0x116c, 0x1201, + 0x128b, 0x1303, 0x1350, 0x13a6, 0xffff, 0xffff, 0x142c, 0xffff, + 0x14a6, 0xffff, 0x1515, 0x155a, 0x159a, 0x15ff, 0xffff, 0xffff, + 0x1699, 0x16fd, 0x175b, 0xffff, 0xffff, 0xffff, 0x181a, 0xffff, + // Entry 42580 - 425BF + 0x18a1, 0x1902, 0xffff, 0x199a, 0x1a15, 0x1a6a, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1b3e, 0xffff, 0xffff, 0x1bec, 0x1c70, 0xffff, + 0xffff, 0x1d26, 0x1d9f, 0x1df1, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1f05, 0x1f61, 0x1fc0, 0x201e, 0xffff, 0xffff, + 0xffff, 0x20c0, 0xffff, 0x214c, 0xffff, 0xffff, 0x21e0, 0xffff, + 0x225f, 0xffff, 0xffff, 0xffff, 0xffff, 0x230f, 0xffff, 0x23a7, + 0x242f, 0x249e, 0x24ef, 0xffff, 0xffff, 0xffff, 0x2597, 0x260b, + 0x2690, 0xffff, 0xffff, 0x2755, 0x27d3, 0x2826, 0x287e, 0xffff, + // Entry 425C0 - 425FF + 0xffff, 0x2910, 0x295e, 0x29ab, 0xffff, 0x2a48, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2b1f, 0xffff, 0x2b68, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2c7d, 0xffff, 0xffff, + 0x2d06, 0xffff, 0x2d76, 0xffff, 0x2dea, 0x2e4b, 0x2ea3, 0xffff, + 0x2f1b, 0x2f78, 0xffff, 0xffff, 0xffff, 0x301f, 0x3091, 0xffff, + 0xffff, 0xffff, 0x0c82, 0x0003, 0x0004, 0x0630, 0x0a8f, 0x0012, + 0x0017, 0x0030, 0x00ad, 0x0000, 0x0134, 0x0000, 0x01bb, 0x01e6, + 0x03fe, 0x0482, 0x0500, 0x0000, 0x0000, 0x0000, 0x0000, 0x057e, + // Entry 42600 - 4263F + 0x0596, 0x0614, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x001d, + 0x0003, 0x0026, 0x002b, 0x0021, 0x0001, 0x0023, 0x0001, 0x0006, + 0x01e5, 0x0001, 0x0028, 0x0001, 0x0000, 0x0000, 0x0001, 0x002d, + 0x0001, 0x0006, 0x01e5, 0x0006, 0x0037, 0x0000, 0x0000, 0x0000, + 0x0000, 0x009c, 0x0002, 0x003a, 0x006b, 0x0003, 0x003e, 0x004d, + 0x005c, 0x000d, 0x0058, 0xffff, 0x0000, 0x0007, 0x000e, 0x0015, + 0x001c, 0x0023, 0x002a, 0x0031, 0x0038, 0x003f, 0x0047, 0x004f, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + // Entry 42640 - 4267F + 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, + 0x0058, 0xffff, 0x0000, 0x0007, 0x000e, 0x0015, 0x001c, 0x0023, + 0x002a, 0x0031, 0x0038, 0x003f, 0x0047, 0x004f, 0x0003, 0x006f, + 0x007e, 0x008d, 0x000d, 0x0058, 0xffff, 0x0000, 0x0007, 0x000e, + 0x0015, 0x001c, 0x0023, 0x002a, 0x0031, 0x0038, 0x003f, 0x0047, + 0x004f, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, + 0x000d, 0x0058, 0xffff, 0x0000, 0x0007, 0x000e, 0x0015, 0x001c, + // Entry 42680 - 426BF + 0x0023, 0x002a, 0x0031, 0x0038, 0x003f, 0x0047, 0x004f, 0x0004, + 0x00aa, 0x00a4, 0x00a1, 0x00a7, 0x0001, 0x0058, 0x0057, 0x0001, + 0x0058, 0x0070, 0x0001, 0x0058, 0x0083, 0x0001, 0x0015, 0x14be, + 0x0005, 0x00b3, 0x0000, 0x0000, 0x0000, 0x011e, 0x0002, 0x00b6, + 0x00ea, 0x0003, 0x00ba, 0x00ca, 0x00da, 0x000e, 0x0000, 0xffff, + 0x03ce, 0x03d3, 0x03d8, 0x03de, 0x2221, 0x3af7, 0x3afe, 0x03f9, + 0x3b07, 0x040b, 0x0411, 0x0416, 0x242d, 0x000e, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + // Entry 426C0 - 426FF + 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x0000, 0xffff, + 0x03ce, 0x03d3, 0x03d8, 0x03de, 0x2221, 0x3af7, 0x3afe, 0x03f9, + 0x3b07, 0x040b, 0x0411, 0x0416, 0x242d, 0x0003, 0x00ee, 0x00fe, + 0x010e, 0x000e, 0x0000, 0xffff, 0x03ce, 0x03d3, 0x03d8, 0x03de, + 0x2221, 0x3af7, 0x3afe, 0x03f9, 0x3b07, 0x040b, 0x0411, 0x0416, + 0x242d, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, + 0x0422, 0x000e, 0x0000, 0xffff, 0x03ce, 0x03d3, 0x03d8, 0x03de, + // Entry 42700 - 4273F + 0x2221, 0x3af7, 0x3afe, 0x03f9, 0x3b07, 0x040b, 0x0411, 0x0416, + 0x242d, 0x0003, 0x0128, 0x012e, 0x0122, 0x0001, 0x0124, 0x0002, + 0x0000, 0x0425, 0x042a, 0x0001, 0x012a, 0x0002, 0x0000, 0x0425, + 0x042a, 0x0001, 0x0130, 0x0002, 0x0000, 0x0425, 0x042a, 0x0005, + 0x013a, 0x0000, 0x0000, 0x0000, 0x01a5, 0x0002, 0x013d, 0x0171, + 0x0003, 0x0141, 0x0151, 0x0161, 0x000e, 0x0000, 0xffff, 0x042f, + 0x0438, 0x3b0f, 0x3b15, 0x044c, 0x0450, 0x0458, 0x0460, 0x3b1c, + 0x046e, 0x3b23, 0x0479, 0x3b29, 0x000e, 0x0000, 0xffff, 0x0033, + // Entry 42740 - 4277F + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x0000, 0xffff, 0x042f, + 0x0438, 0x3b0f, 0x3b15, 0x044c, 0x0450, 0x0458, 0x0460, 0x3b1c, + 0x046e, 0x3b23, 0x0479, 0x3b29, 0x0003, 0x0175, 0x0185, 0x0195, + 0x000e, 0x0000, 0xffff, 0x042f, 0x0438, 0x3b0f, 0x3b15, 0x044c, + 0x0450, 0x0458, 0x0460, 0x3b1c, 0x046e, 0x3b23, 0x0479, 0x3b29, + 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, + // Entry 42780 - 427BF + 0x000e, 0x0000, 0xffff, 0x042f, 0x0438, 0x3b0f, 0x3b15, 0x044c, + 0x0450, 0x0458, 0x0460, 0x3b1c, 0x046e, 0x3b23, 0x0479, 0x3b29, + 0x0003, 0x01af, 0x01b5, 0x01a9, 0x0001, 0x01ab, 0x0002, 0x0000, + 0x0425, 0x042a, 0x0001, 0x01b1, 0x0002, 0x0000, 0x0425, 0x042a, + 0x0001, 0x01b7, 0x0002, 0x0000, 0x0425, 0x042a, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x01c4, 0x0000, 0x01d5, 0x0004, + 0x01d2, 0x01cc, 0x01c9, 0x01cf, 0x0001, 0x001d, 0x1545, 0x0001, + 0x001d, 0x1560, 0x0001, 0x0010, 0x0305, 0x0001, 0x0002, 0x0587, + // Entry 427C0 - 427FF + 0x0004, 0x01e3, 0x01dd, 0x01da, 0x01e0, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0008, 0x01ef, 0x0254, 0x02ab, 0x02e0, 0x03b1, 0x03cb, + 0x03dc, 0x03ed, 0x0002, 0x01f2, 0x0223, 0x0003, 0x01f6, 0x0205, + 0x0214, 0x000d, 0x000d, 0xffff, 0x0059, 0x349c, 0x34a0, 0x34a4, + 0x3473, 0x336f, 0x3373, 0x34a8, 0x34ac, 0x34b0, 0x3456, 0x34b4, + 0x000d, 0x0000, 0xffff, 0x257b, 0x2b4e, 0x2b3c, 0x2b42, 0x2b3c, + 0x257b, 0x257b, 0x2b42, 0x2b3a, 0x2b50, 0x2b40, 0x2b3e, 0x000d, + // Entry 42800 - 4283F + 0x0058, 0xffff, 0x008b, 0x0093, 0x009d, 0x00a4, 0x00aa, 0x00af, + 0x00b5, 0x00bb, 0x00c2, 0x00cb, 0x00d3, 0x00dc, 0x0003, 0x0227, + 0x0236, 0x0245, 0x000d, 0x000d, 0xffff, 0x0059, 0x349c, 0x34a0, + 0x34a4, 0x3473, 0x336f, 0x3373, 0x34a8, 0x34ac, 0x34b0, 0x3456, + 0x34b4, 0x000d, 0x0000, 0xffff, 0x257b, 0x2b4e, 0x2b3c, 0x2b42, + 0x2b3c, 0x257b, 0x257b, 0x2b42, 0x2b3a, 0x2b50, 0x2b40, 0x2b3e, + 0x000d, 0x0058, 0xffff, 0x008b, 0x0093, 0x009d, 0x00a4, 0x00aa, + 0x00af, 0x00b5, 0x00bb, 0x00c2, 0x00cb, 0x00d3, 0x00dc, 0x0002, + // Entry 42840 - 4287F + 0x0257, 0x0281, 0x0005, 0x025d, 0x0266, 0x0278, 0x0000, 0x026f, + 0x0007, 0x0006, 0x0c24, 0x448c, 0x4490, 0x4494, 0x4498, 0x449c, + 0x0c39, 0x0007, 0x0000, 0x2b3e, 0x2b3a, 0x3a8d, 0x3aee, 0x3aee, + 0x2b3a, 0x2b3a, 0x0007, 0x0006, 0x0c24, 0x448c, 0x4490, 0x4494, + 0x4498, 0x449c, 0x0c39, 0x0007, 0x001d, 0x163d, 0x221d, 0x222b, + 0x2238, 0x2245, 0x2252, 0x166c, 0x0005, 0x0287, 0x0290, 0x02a2, + 0x0000, 0x0299, 0x0007, 0x0006, 0x0c24, 0x448c, 0x4490, 0x4494, + 0x4498, 0x449c, 0x0c39, 0x0007, 0x0000, 0x2b3e, 0x2b3a, 0x3a8d, + // Entry 42880 - 428BF + 0x3aee, 0x3aee, 0x2b3a, 0x2b3a, 0x0007, 0x0006, 0x0c24, 0x448c, + 0x4490, 0x4494, 0x4498, 0x449c, 0x0c39, 0x0007, 0x001d, 0x163d, + 0x221d, 0x222b, 0x2238, 0x2245, 0x2252, 0x166c, 0x0002, 0x02ae, + 0x02c7, 0x0003, 0x02b2, 0x02b9, 0x02c0, 0x0005, 0x001d, 0xffff, + 0x1674, 0x1677, 0x167a, 0x167d, 0x0005, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x0005, 0x0035, 0xffff, 0x00be, 0x00cc, + 0x00da, 0x00e8, 0x0003, 0x02cb, 0x02d2, 0x02d9, 0x0005, 0x001d, + 0xffff, 0x1674, 0x1677, 0x167a, 0x167d, 0x0005, 0x0000, 0xffff, + // Entry 428C0 - 428FF + 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0035, 0xffff, 0x00be, + 0x00cc, 0x00da, 0x00e8, 0x0002, 0x02e3, 0x034a, 0x0003, 0x02e7, + 0x0308, 0x0329, 0x0008, 0x02f3, 0x02f9, 0x02f0, 0x02fc, 0x02ff, + 0x0302, 0x0305, 0x02f6, 0x0001, 0x0058, 0x00e5, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x0058, 0x00f0, 0x0001, 0x0000, 0x04f2, 0x0001, + 0x0058, 0x00f9, 0x0001, 0x0029, 0x01f4, 0x0001, 0x0029, 0x01c7, + 0x0001, 0x0029, 0x01d0, 0x0008, 0x0314, 0x031a, 0x0311, 0x031d, + 0x0320, 0x0323, 0x0326, 0x0317, 0x0001, 0x0058, 0x00e5, 0x0001, + // Entry 42900 - 4293F + 0x0000, 0x04ef, 0x0001, 0x0058, 0x00f0, 0x0001, 0x0000, 0x04f2, + 0x0001, 0x0058, 0x00f9, 0x0001, 0x0029, 0x01f4, 0x0001, 0x0029, + 0x01c7, 0x0001, 0x0029, 0x01d0, 0x0008, 0x0335, 0x033b, 0x0332, + 0x033e, 0x0341, 0x0344, 0x0347, 0x0338, 0x0001, 0x0058, 0x00e5, + 0x0001, 0x0000, 0x04ef, 0x0001, 0x0058, 0x00f0, 0x0001, 0x0000, + 0x04f2, 0x0001, 0x0058, 0x00f9, 0x0001, 0x0029, 0x01f4, 0x0001, + 0x0029, 0x01c7, 0x0001, 0x0029, 0x01d0, 0x0003, 0x034e, 0x036f, + 0x0390, 0x0008, 0x035a, 0x0360, 0x0357, 0x0363, 0x0366, 0x0369, + // Entry 42940 - 4297F + 0x036c, 0x035d, 0x0001, 0x0058, 0x00e5, 0x0001, 0x0000, 0x04ef, + 0x0001, 0x0058, 0x00f0, 0x0001, 0x0000, 0x04f2, 0x0001, 0x0058, + 0x0103, 0x0001, 0x0006, 0x0cf2, 0x0001, 0x0029, 0x020f, 0x0001, + 0x001d, 0x16f0, 0x0008, 0x037b, 0x0381, 0x0378, 0x0384, 0x0387, + 0x038a, 0x038d, 0x037e, 0x0001, 0x0058, 0x00e5, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x0058, 0x00f0, 0x0001, 0x0000, 0x04f2, 0x0001, + 0x0058, 0x0103, 0x0001, 0x0006, 0x0cf2, 0x0001, 0x0029, 0x020f, + 0x0001, 0x001d, 0x16f0, 0x0008, 0x039c, 0x03a2, 0x0399, 0x03a5, + // Entry 42980 - 429BF + 0x03a8, 0x03ab, 0x03ae, 0x039f, 0x0001, 0x0058, 0x00e5, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x0058, 0x00f0, 0x0001, 0x0000, 0x04f2, + 0x0001, 0x0058, 0x0103, 0x0001, 0x0006, 0x0cf2, 0x0001, 0x0029, + 0x020f, 0x0001, 0x001d, 0x16f0, 0x0003, 0x03c0, 0x0000, 0x03b5, + 0x0002, 0x03b8, 0x03bc, 0x0002, 0x001d, 0x1700, 0x225e, 0x0002, + 0x0058, 0x010a, 0x011d, 0x0002, 0x03c3, 0x03c7, 0x0002, 0x0029, + 0x0237, 0x0243, 0x0002, 0x0010, 0x02ea, 0x02f1, 0x0004, 0x03d9, + 0x03d3, 0x03d0, 0x03d6, 0x0001, 0x001d, 0x1760, 0x0001, 0x001d, + // Entry 429C0 - 429FF + 0x1779, 0x0001, 0x0058, 0x0127, 0x0001, 0x0002, 0x08e8, 0x0004, + 0x03ea, 0x03e4, 0x03e1, 0x03e7, 0x0001, 0x0000, 0x0524, 0x0001, + 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, + 0x0004, 0x03fb, 0x03f5, 0x03f2, 0x03f8, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0005, 0x0404, 0x0000, 0x0000, 0x0000, 0x046f, 0x0002, + 0x0407, 0x043b, 0x0003, 0x040b, 0x041b, 0x042b, 0x000e, 0x0000, + 0x3bf8, 0x054c, 0x0553, 0x3bdf, 0x3be6, 0x0568, 0x3bec, 0x3bf3, + // Entry 42A00 - 42A3F + 0x3c00, 0x0589, 0x3c06, 0x3c0c, 0x3c12, 0x3c15, 0x000e, 0x0000, + 0x003f, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x0000, + 0x3bf8, 0x054c, 0x0553, 0x3bdf, 0x3be6, 0x0568, 0x3bec, 0x3bf3, + 0x3c00, 0x0589, 0x3c06, 0x3c0c, 0x3c12, 0x3c15, 0x0003, 0x043f, + 0x044f, 0x045f, 0x000e, 0x0000, 0x3bf8, 0x054c, 0x0553, 0x3bdf, + 0x3be6, 0x0568, 0x3bec, 0x3bf3, 0x3c00, 0x0589, 0x3c06, 0x3c0c, + 0x3c12, 0x3c15, 0x000e, 0x0000, 0x003f, 0x0033, 0x0035, 0x0037, + // Entry 42A40 - 42A7F + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, + 0x3a0c, 0x0422, 0x000e, 0x0000, 0x3bf8, 0x054c, 0x0553, 0x3bdf, + 0x3be6, 0x0568, 0x3bec, 0x3bf3, 0x3c00, 0x0589, 0x3c06, 0x3c0c, + 0x3c12, 0x3c15, 0x0003, 0x0478, 0x047d, 0x0473, 0x0001, 0x0475, + 0x0001, 0x0000, 0x04ef, 0x0001, 0x047a, 0x0001, 0x0000, 0x04ef, + 0x0001, 0x047f, 0x0001, 0x0000, 0x04ef, 0x0005, 0x0488, 0x0000, + 0x0000, 0x0000, 0x04ed, 0x0002, 0x048b, 0x04bc, 0x0003, 0x048f, + 0x049e, 0x04ad, 0x000d, 0x0000, 0xffff, 0x05a2, 0x05aa, 0x05b3, + // Entry 42A80 - 42ABF + 0x05bc, 0x05c3, 0x05cb, 0x05d2, 0x05d9, 0x05e1, 0x05ec, 0x3c1a, + 0x3c20, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, + 0x000d, 0x0000, 0xffff, 0x05a2, 0x05aa, 0x05b3, 0x05bc, 0x05c3, + 0x05cb, 0x05d2, 0x05d9, 0x05e1, 0x05ec, 0x3c1a, 0x3c20, 0x0003, + 0x04c0, 0x04cf, 0x04de, 0x000d, 0x0000, 0xffff, 0x05a2, 0x05aa, + 0x05b3, 0x05bc, 0x05c3, 0x05cb, 0x05d2, 0x05d9, 0x05e1, 0x05ec, + 0x3c1a, 0x3c20, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + // Entry 42AC0 - 42AFF + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, + 0x3a0c, 0x000d, 0x0000, 0xffff, 0x05a2, 0x05aa, 0x05b3, 0x05bc, + 0x05c3, 0x05cb, 0x05d2, 0x05d9, 0x05e1, 0x05ec, 0x3c1a, 0x3c20, + 0x0003, 0x04f6, 0x04fb, 0x04f1, 0x0001, 0x04f3, 0x0001, 0x0000, + 0x0601, 0x0001, 0x04f8, 0x0001, 0x0000, 0x0601, 0x0001, 0x04fd, + 0x0001, 0x0000, 0x0601, 0x0005, 0x0506, 0x0000, 0x0000, 0x0000, + 0x056b, 0x0002, 0x0509, 0x053a, 0x0003, 0x050d, 0x051c, 0x052b, + 0x000d, 0x0000, 0xffff, 0x0606, 0x3b37, 0x3b3c, 0x3b43, 0x061f, + // Entry 42B00 - 42B3F + 0x0626, 0x3c29, 0x0633, 0x3b65, 0x063d, 0x0643, 0x3c2e, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0000, + 0xffff, 0x0657, 0x3b82, 0x0666, 0x066f, 0x0679, 0x0682, 0x3c38, + 0x0692, 0x3bae, 0x06a3, 0x06ab, 0x06ba, 0x0003, 0x053e, 0x054d, + 0x055c, 0x000d, 0x0000, 0xffff, 0x0606, 0x3b37, 0x3b3c, 0x3b43, + 0x061f, 0x0626, 0x3c29, 0x0633, 0x3b65, 0x063d, 0x0643, 0x3c2e, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + // Entry 42B40 - 42B7F + 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, + 0x0000, 0xffff, 0x0657, 0x3b82, 0x0666, 0x066f, 0x0679, 0x0682, + 0x3c38, 0x0692, 0x3bae, 0x06a3, 0x06ab, 0x06ba, 0x0003, 0x0574, + 0x0579, 0x056f, 0x0001, 0x0571, 0x0001, 0x0000, 0x06c8, 0x0001, + 0x0576, 0x0001, 0x0000, 0x06c8, 0x0001, 0x057b, 0x0001, 0x0000, + 0x06c8, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0585, + 0x0004, 0x0593, 0x058d, 0x058a, 0x0590, 0x0001, 0x001d, 0x1545, + 0x0001, 0x001d, 0x1560, 0x0001, 0x0010, 0x0305, 0x0001, 0x001d, + // Entry 42B80 - 42BBF + 0x17a0, 0x0005, 0x059c, 0x0000, 0x0000, 0x0000, 0x0601, 0x0002, + 0x059f, 0x05d0, 0x0003, 0x05a3, 0x05b2, 0x05c1, 0x000d, 0x0000, + 0xffff, 0x19c9, 0x19d3, 0x19df, 0x3c3e, 0x19eb, 0x19f2, 0x3c42, + 0x1a01, 0x1a06, 0x2575, 0x3c47, 0x3c4e, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0000, 0xffff, 0x19c9, + 0x19d3, 0x19df, 0x3c3e, 0x19eb, 0x19f2, 0x3c42, 0x1a01, 0x1a06, + 0x2575, 0x3c47, 0x3c4e, 0x0003, 0x05d4, 0x05e3, 0x05f2, 0x000d, + // Entry 42BC0 - 42BFF + 0x0000, 0xffff, 0x19c9, 0x19d3, 0x19df, 0x3c3e, 0x19eb, 0x19f2, + 0x3c42, 0x1a01, 0x1a06, 0x2575, 0x3c47, 0x3c4e, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0000, 0xffff, + 0x19c9, 0x19d3, 0x19df, 0x3c3e, 0x19eb, 0x19f2, 0x3c42, 0x1a01, + 0x1a06, 0x2575, 0x3c47, 0x3c4e, 0x0003, 0x060a, 0x060f, 0x0605, + 0x0001, 0x0607, 0x0001, 0x0000, 0x1a1d, 0x0001, 0x060c, 0x0001, + 0x0000, 0x1a1d, 0x0001, 0x0611, 0x0001, 0x0000, 0x1a1d, 0x0005, + // Entry 42C00 - 42C3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x061a, 0x0003, 0x0624, 0x062a, + 0x061e, 0x0001, 0x0620, 0x0002, 0x0058, 0x0139, 0x0147, 0x0001, + 0x0626, 0x0002, 0x0058, 0x0139, 0x0147, 0x0001, 0x062c, 0x0002, + 0x0058, 0x0139, 0x0147, 0x0042, 0x0673, 0x0678, 0x067d, 0x0682, + 0x0699, 0x06b0, 0x06c7, 0x06de, 0x06f0, 0x0702, 0x0719, 0x0730, + 0x0747, 0x0762, 0x077d, 0x0798, 0x079d, 0x07a2, 0x07a7, 0x07c0, + 0x07d9, 0x07f2, 0x07f7, 0x07fc, 0x0801, 0x0806, 0x080b, 0x0810, + 0x0815, 0x081a, 0x081f, 0x0833, 0x0847, 0x085b, 0x086f, 0x0883, + // Entry 42C40 - 42C7F + 0x0897, 0x08ab, 0x08bf, 0x08d3, 0x08e7, 0x08fb, 0x090f, 0x0923, + 0x0937, 0x094b, 0x095f, 0x0973, 0x0987, 0x099b, 0x09af, 0x09c3, + 0x09c8, 0x09cd, 0x09d2, 0x09e8, 0x09fa, 0x0a0c, 0x0a22, 0x0a34, + 0x0a46, 0x0a5c, 0x0a6e, 0x0a80, 0x0a85, 0x0a8a, 0x0001, 0x0675, + 0x0001, 0x0001, 0x0040, 0x0001, 0x067a, 0x0001, 0x0001, 0x0040, + 0x0001, 0x067f, 0x0001, 0x0001, 0x0040, 0x0003, 0x0686, 0x0689, + 0x068e, 0x0001, 0x0029, 0x0266, 0x0003, 0x0058, 0x014e, 0x015a, + 0x0163, 0x0002, 0x0691, 0x0695, 0x0002, 0x0058, 0x017b, 0x0170, + // Entry 42C80 - 42CBF + 0x0002, 0x0058, 0x0196, 0x0187, 0x0003, 0x069d, 0x06a0, 0x06a5, + 0x0001, 0x0029, 0x0266, 0x0003, 0x0058, 0x014e, 0x015a, 0x0163, + 0x0002, 0x06a8, 0x06ac, 0x0002, 0x0058, 0x017b, 0x0170, 0x0002, + 0x0058, 0x0196, 0x0187, 0x0003, 0x06b4, 0x06b7, 0x06bc, 0x0001, + 0x0029, 0x0266, 0x0003, 0x0058, 0x014e, 0x015a, 0x0163, 0x0002, + 0x06bf, 0x06c3, 0x0002, 0x0058, 0x017b, 0x0170, 0x0002, 0x0058, + 0x0196, 0x0187, 0x0003, 0x06cb, 0x06ce, 0x06d3, 0x0001, 0x0006, + 0x1655, 0x0003, 0x0058, 0x01a6, 0x01b8, 0x01c7, 0x0002, 0x06d6, + // Entry 42CC0 - 42CFF + 0x06da, 0x0002, 0x0058, 0x01eb, 0x01da, 0x0002, 0x0058, 0x0212, + 0x01fd, 0x0003, 0x06e2, 0x0000, 0x06e5, 0x0001, 0x000b, 0x0c78, + 0x0002, 0x06e8, 0x06ec, 0x0002, 0x0058, 0x0228, 0x0228, 0x0002, + 0x0058, 0x0235, 0x0235, 0x0003, 0x06f4, 0x0000, 0x06f7, 0x0001, + 0x000b, 0x0c78, 0x0002, 0x06fa, 0x06fe, 0x0002, 0x0058, 0x0228, + 0x0228, 0x0002, 0x0058, 0x0235, 0x0235, 0x0003, 0x0706, 0x0709, + 0x070e, 0x0001, 0x0026, 0x1066, 0x0003, 0x0058, 0x0246, 0x0253, + 0x025d, 0x0002, 0x0711, 0x0715, 0x0002, 0x0058, 0x0277, 0x026b, + // Entry 42D00 - 42D3F + 0x0002, 0x0058, 0x0294, 0x0284, 0x0003, 0x071d, 0x0720, 0x0725, + 0x0001, 0x0026, 0x1066, 0x0003, 0x0058, 0x0246, 0x0253, 0x025d, + 0x0002, 0x0728, 0x072c, 0x0002, 0x0058, 0x0277, 0x026b, 0x0002, + 0x0058, 0x0294, 0x0284, 0x0003, 0x0734, 0x0737, 0x073c, 0x0001, + 0x0026, 0x1066, 0x0003, 0x0058, 0x0246, 0x0253, 0x025d, 0x0002, + 0x073f, 0x0743, 0x0002, 0x0058, 0x0277, 0x026b, 0x0002, 0x0058, + 0x0294, 0x0284, 0x0004, 0x074c, 0x074f, 0x0754, 0x075f, 0x0001, + 0x001d, 0x1989, 0x0003, 0x0058, 0x02a5, 0x02b4, 0x02c0, 0x0002, + // Entry 42D40 - 42D7F + 0x0757, 0x075b, 0x0002, 0x0058, 0x02de, 0x02d0, 0x0002, 0x0058, + 0x02ff, 0x02ed, 0x0001, 0x0058, 0x0312, 0x0004, 0x0767, 0x076a, + 0x076f, 0x077a, 0x0001, 0x001d, 0x1a1e, 0x0003, 0x0058, 0x02a5, + 0x02b4, 0x02c0, 0x0002, 0x0772, 0x0776, 0x0002, 0x0058, 0x0322, + 0x0322, 0x0002, 0x0058, 0x032e, 0x032e, 0x0001, 0x0058, 0x0312, + 0x0004, 0x0782, 0x0785, 0x078a, 0x0795, 0x0001, 0x001d, 0x1a1e, + 0x0003, 0x0058, 0x02a5, 0x02b4, 0x02c0, 0x0002, 0x078d, 0x0791, + 0x0002, 0x0058, 0x0322, 0x0322, 0x0002, 0x0058, 0x032e, 0x032e, + // Entry 42D80 - 42DBF + 0x0001, 0x0058, 0x0312, 0x0001, 0x079a, 0x0001, 0x0058, 0x033e, + 0x0001, 0x079f, 0x0001, 0x0058, 0x034d, 0x0001, 0x07a4, 0x0001, + 0x0058, 0x034d, 0x0003, 0x07ab, 0x07ae, 0x07b5, 0x0001, 0x0010, + 0x0624, 0x0005, 0x0058, 0x0364, 0x036a, 0x036f, 0x035a, 0x0377, + 0x0002, 0x07b8, 0x07bc, 0x0002, 0x0058, 0x0394, 0x0389, 0x0002, + 0x0058, 0x03af, 0x03a0, 0x0003, 0x07c4, 0x07c7, 0x07ce, 0x0001, + 0x0010, 0x0624, 0x0005, 0x0058, 0xffff, 0xffff, 0xffff, 0x035a, + 0x0377, 0x0002, 0x07d1, 0x07d5, 0x0002, 0x0058, 0x0394, 0x0389, + // Entry 42DC0 - 42DFF + 0x0002, 0x0058, 0x03af, 0x03a0, 0x0003, 0x07dd, 0x07e0, 0x07e7, + 0x0001, 0x0010, 0x0624, 0x0005, 0x0058, 0xffff, 0xffff, 0xffff, + 0x035a, 0x0377, 0x0002, 0x07ea, 0x07ee, 0x0002, 0x0058, 0x0394, + 0x0389, 0x0002, 0x0058, 0x03af, 0x03a0, 0x0001, 0x07f4, 0x0001, + 0x0058, 0x03bf, 0x0001, 0x07f9, 0x0001, 0x0058, 0x03bf, 0x0001, + 0x07fe, 0x0001, 0x0058, 0x03bf, 0x0001, 0x0803, 0x0001, 0x0058, + 0x03ca, 0x0001, 0x0808, 0x0001, 0x0058, 0x03d8, 0x0001, 0x080d, + 0x0001, 0x0058, 0x03d8, 0x0001, 0x0812, 0x0001, 0x0058, 0x03e4, + // Entry 42E00 - 42E3F + 0x0001, 0x0817, 0x0001, 0x0058, 0x03fa, 0x0001, 0x081c, 0x0001, + 0x0058, 0x03fa, 0x0003, 0x0000, 0x0823, 0x0828, 0x0003, 0x0058, + 0x040e, 0x041e, 0x042b, 0x0002, 0x082b, 0x082f, 0x0002, 0x0058, + 0x044b, 0x043c, 0x0002, 0x0058, 0x046e, 0x045b, 0x0003, 0x0000, + 0x0837, 0x083c, 0x0003, 0x0058, 0x0482, 0x048f, 0x0499, 0x0002, + 0x083f, 0x0843, 0x0002, 0x0058, 0x04a7, 0x04a7, 0x0002, 0x0058, + 0x04b3, 0x04b3, 0x0003, 0x0000, 0x084b, 0x0850, 0x0003, 0x0058, + 0x0482, 0x048f, 0x0499, 0x0002, 0x0853, 0x0857, 0x0002, 0x0058, + // Entry 42E40 - 42E7F + 0x04a7, 0x04a7, 0x0002, 0x0058, 0x04b3, 0x04b3, 0x0003, 0x0000, + 0x085f, 0x0864, 0x0003, 0x0058, 0x04c3, 0x04d9, 0x04ec, 0x0002, + 0x0867, 0x086b, 0x0002, 0x0058, 0x0518, 0x0503, 0x0002, 0x0058, + 0x0548, 0x052f, 0x0003, 0x0000, 0x0873, 0x0878, 0x0003, 0x0058, + 0x0564, 0x0571, 0x057b, 0x0002, 0x087b, 0x087f, 0x0002, 0x0058, + 0x0589, 0x0589, 0x0002, 0x0058, 0x0595, 0x0595, 0x0003, 0x0000, + 0x0887, 0x088c, 0x0003, 0x0058, 0x0564, 0x0571, 0x057b, 0x0002, + 0x088f, 0x0893, 0x0002, 0x0058, 0x0589, 0x0589, 0x0002, 0x0058, + // Entry 42E80 - 42EBF + 0x05a5, 0x05a5, 0x0003, 0x0000, 0x089b, 0x08a0, 0x0003, 0x0058, + 0x05bd, 0x05d2, 0x05e4, 0x0002, 0x08a3, 0x08a7, 0x0002, 0x0058, + 0x060e, 0x05fa, 0x0002, 0x0058, 0x0639, 0x0624, 0x0003, 0x0000, + 0x08af, 0x08b4, 0x0003, 0x0058, 0x0650, 0x065d, 0x0667, 0x0002, + 0x08b7, 0x08bb, 0x0002, 0x0058, 0x060e, 0x060e, 0x0002, 0x0058, + 0x0639, 0x0639, 0x0003, 0x0000, 0x08c3, 0x08c8, 0x0003, 0x0058, + 0x0650, 0x065d, 0x0667, 0x0002, 0x08cb, 0x08cf, 0x0002, 0x0058, + 0x060e, 0x060e, 0x0002, 0x0058, 0x0639, 0x0639, 0x0003, 0x0000, + // Entry 42EC0 - 42EFF + 0x08d7, 0x08dc, 0x0003, 0x0058, 0x0675, 0x068a, 0x069c, 0x0002, + 0x08df, 0x08e3, 0x0002, 0x0058, 0x06b2, 0x06b2, 0x0002, 0x0058, + 0x06c8, 0x06c8, 0x0003, 0x0000, 0x08eb, 0x08f0, 0x0003, 0x0058, + 0x06df, 0x06ec, 0x06f6, 0x0002, 0x08f3, 0x08f7, 0x0002, 0x0058, + 0x06b2, 0x06b2, 0x0002, 0x0058, 0x06c8, 0x06c8, 0x0003, 0x0000, + 0x08ff, 0x0904, 0x0003, 0x0058, 0x06df, 0x06ec, 0x06f6, 0x0002, + 0x0907, 0x090b, 0x0002, 0x0058, 0x06b2, 0x06b2, 0x0002, 0x0058, + 0x06c8, 0x06c8, 0x0003, 0x0000, 0x0913, 0x0918, 0x0003, 0x0058, + // Entry 42F00 - 42F3F + 0x0704, 0x0719, 0x072b, 0x0002, 0x091b, 0x091f, 0x0002, 0x0058, + 0x0741, 0x0741, 0x0002, 0x0058, 0x0757, 0x0757, 0x0003, 0x0000, + 0x0927, 0x092c, 0x0003, 0x0058, 0x076e, 0x077b, 0x0785, 0x0002, + 0x092f, 0x0933, 0x0002, 0x0058, 0x0741, 0x0741, 0x0002, 0x0058, + 0x0757, 0x0757, 0x0003, 0x0000, 0x093b, 0x0940, 0x0003, 0x0058, + 0x076e, 0x077b, 0x0785, 0x0002, 0x0943, 0x0947, 0x0002, 0x0058, + 0x0741, 0x0741, 0x0002, 0x0058, 0x0757, 0x0757, 0x0003, 0x0000, + 0x094f, 0x0954, 0x0003, 0x0058, 0x0790, 0x07a4, 0x07b5, 0x0002, + // Entry 42F40 - 42F7F + 0x0957, 0x095b, 0x0002, 0x0058, 0x07ca, 0x07ca, 0x0002, 0x0058, + 0x07df, 0x07df, 0x0003, 0x0000, 0x0963, 0x0968, 0x0003, 0x0058, + 0x07f5, 0x0802, 0x080c, 0x0002, 0x096b, 0x096f, 0x0002, 0x0058, + 0x07ca, 0x07ca, 0x0002, 0x0058, 0x07df, 0x07df, 0x0003, 0x0000, + 0x0977, 0x097c, 0x0003, 0x0058, 0x07f5, 0x0802, 0x080c, 0x0002, + 0x097f, 0x0983, 0x0002, 0x0058, 0x07ca, 0x07ca, 0x0002, 0x0058, + 0x07df, 0x07df, 0x0003, 0x0000, 0x098b, 0x0990, 0x0003, 0x0058, + 0x081a, 0x082a, 0x0837, 0x0002, 0x0993, 0x0997, 0x0002, 0x0058, + // Entry 42F80 - 42FBF + 0x0857, 0x0848, 0x0002, 0x0058, 0x087a, 0x0867, 0x0003, 0x0000, + 0x099f, 0x09a4, 0x0003, 0x0058, 0x088e, 0x089c, 0x08a7, 0x0002, + 0x09a7, 0x09ab, 0x0002, 0x0058, 0x08b6, 0x08b6, 0x0002, 0x0058, + 0x08c3, 0x08c3, 0x0003, 0x0000, 0x09b3, 0x09b8, 0x0003, 0x0058, + 0x088e, 0x089c, 0x08a7, 0x0002, 0x09bb, 0x09bf, 0x0002, 0x0058, + 0x08b6, 0x08b6, 0x0002, 0x0058, 0x08c3, 0x08c3, 0x0001, 0x09c5, + 0x0001, 0x0007, 0x0892, 0x0001, 0x09ca, 0x0001, 0x0007, 0x0892, + 0x0001, 0x09cf, 0x0001, 0x0007, 0x0892, 0x0003, 0x09d6, 0x09d9, + // Entry 42FC0 - 42FFF + 0x09dd, 0x0001, 0x0006, 0x1dc8, 0x0002, 0x0006, 0xffff, 0x1dcd, + 0x0002, 0x09e0, 0x09e4, 0x0002, 0x0058, 0x08e0, 0x08d4, 0x0002, + 0x0058, 0x08fd, 0x08ed, 0x0003, 0x09ec, 0x0000, 0x09ef, 0x0001, + 0x0000, 0x213b, 0x0002, 0x09f2, 0x09f6, 0x0002, 0x0058, 0x090e, + 0x090e, 0x0002, 0x0058, 0x0917, 0x0917, 0x0003, 0x09fe, 0x0000, + 0x0a01, 0x0001, 0x0000, 0x213b, 0x0002, 0x0a04, 0x0a08, 0x0002, + 0x0058, 0x090e, 0x090e, 0x0002, 0x0058, 0x0917, 0x0917, 0x0003, + 0x0a10, 0x0a13, 0x0a17, 0x0001, 0x001d, 0x0dc2, 0x0002, 0x001e, + // Entry 43000 - 4303F + 0xffff, 0x0226, 0x0002, 0x0a1a, 0x0a1e, 0x0002, 0x0058, 0x0932, + 0x0924, 0x0002, 0x0058, 0x0953, 0x0941, 0x0003, 0x0a26, 0x0000, + 0x0a29, 0x0001, 0x0001, 0x07c5, 0x0002, 0x0a2c, 0x0a30, 0x0002, + 0x0058, 0x0966, 0x0966, 0x0002, 0x0058, 0x0972, 0x0972, 0x0003, + 0x0a38, 0x0000, 0x0a3b, 0x0001, 0x0001, 0x07c5, 0x0002, 0x0a3e, + 0x0a42, 0x0002, 0x0058, 0x0966, 0x0966, 0x0002, 0x0058, 0x0972, + 0x0972, 0x0003, 0x0a4a, 0x0a4d, 0x0a51, 0x0001, 0x001e, 0x029d, + 0x0002, 0x0006, 0xffff, 0x1ea5, 0x0002, 0x0a54, 0x0a58, 0x0002, + // Entry 43040 - 4307F + 0x0058, 0x0991, 0x0982, 0x0002, 0x0058, 0x09b4, 0x09a1, 0x0003, + 0x0a60, 0x0000, 0x0a63, 0x0001, 0x001f, 0x04da, 0x0002, 0x0a66, + 0x0a6a, 0x0002, 0x0058, 0x0589, 0x0589, 0x0002, 0x0058, 0x0595, + 0x0595, 0x0003, 0x0a72, 0x0000, 0x0a75, 0x0001, 0x001f, 0x04da, + 0x0002, 0x0a78, 0x0a7c, 0x0002, 0x0058, 0x0589, 0x0589, 0x0002, + 0x0058, 0x0595, 0x0595, 0x0001, 0x0a82, 0x0001, 0x0058, 0x09c8, + 0x0001, 0x0a87, 0x0001, 0x0029, 0x09ab, 0x0001, 0x0a8c, 0x0001, + 0x0029, 0x09ab, 0x0004, 0x0a94, 0x0a99, 0x0a9e, 0x0aad, 0x0003, + // Entry 43080 - 430BF + 0x0000, 0x1dc7, 0x39fb, 0x3af3, 0x0003, 0x0058, 0x09d6, 0x09e3, + 0x09fb, 0x0002, 0x0000, 0x0aa1, 0x0003, 0x0000, 0x0aa8, 0x0aa5, + 0x0001, 0x0058, 0x0a11, 0x0003, 0x0058, 0xffff, 0x0a2f, 0x0a4d, + 0x0002, 0x0c94, 0x0ab0, 0x0003, 0x0ab4, 0x0bf4, 0x0b54, 0x009e, + 0x0058, 0xffff, 0xffff, 0xffff, 0xffff, 0x0b1b, 0x0b87, 0x0c1d, + 0x0c6e, 0x0cb3, 0x0cfb, 0x0d52, 0x0da6, 0x0df1, 0x0ec9, 0x0f17, + 0x0f6b, 0x0fdd, 0x102e, 0x1085, 0x10f4, 0x117e, 0x11f0, 0x1265, + 0x12c2, 0x1313, 0xffff, 0xffff, 0x1392, 0xffff, 0x1404, 0xffff, + // Entry 430C0 - 430FF + 0x1470, 0x14be, 0x1506, 0x154e, 0xffff, 0xffff, 0x15d8, 0x162c, + 0x168b, 0xffff, 0xffff, 0xffff, 0x1719, 0xffff, 0x1793, 0x17f6, + 0xffff, 0x187e, 0x18e7, 0x194d, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1a04, 0xffff, 0xffff, 0x1a94, 0x1b09, 0xffff, 0xffff, 0x1bc2, + 0x1c3d, 0x1c91, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1d82, 0x1dc7, 0x1e15, 0x1e60, 0x1eab, 0xffff, 0xffff, 0x1f71, + 0xffff, 0x1fcf, 0xffff, 0xffff, 0x206c, 0xffff, 0x2123, 0xffff, + 0xffff, 0xffff, 0xffff, 0x21d5, 0xffff, 0x223c, 0x22ae, 0x231d, + // Entry 43100 - 4313F + 0x2374, 0xffff, 0xffff, 0xffff, 0x23f7, 0x245d, 0x24c0, 0xffff, + 0xffff, 0x2541, 0x25d7, 0x2631, 0x2676, 0xffff, 0xffff, 0x26fd, + 0x274e, 0x2793, 0xffff, 0x2804, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x293d, 0x298e, 0x29d9, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2ac6, 0xffff, 0xffff, 0x2b3e, 0xffff, + 0x2b98, 0xffff, 0x2c0e, 0x2c5c, 0x2cb9, 0xffff, 0x2d1d, 0x2d77, + 0xffff, 0xffff, 0xffff, 0x2e15, 0x2e63, 0xffff, 0xffff, 0x0a69, + 0x0bd2, 0x0e36, 0x0e7e, 0xffff, 0xffff, 0x20c0, 0x28c0, 0x009e, + // Entry 43140 - 4317F + 0x0058, 0x0aae, 0x0ac7, 0x0ae3, 0x0b00, 0x0b39, 0x0b9a, 0x0c32, + 0x0c7f, 0x0cc5, 0x0d12, 0x0d68, 0x0db9, 0x0e02, 0x0edd, 0x0f2d, + 0x0f8b, 0x0ff2, 0x1045, 0x10a4, 0x111c, 0x119e, 0x1211, 0x127e, + 0x12d7, 0x132a, 0x136a, 0x137d, 0x13a8, 0x13e6, 0x141b, 0x145b, + 0x1484, 0x14d0, 0x1518, 0x1565, 0x15a5, 0x15c0, 0x15ee, 0x1644, + 0x169c, 0x16d0, 0x16e2, 0x1701, 0x1735, 0x177f, 0x17ae, 0x1812, + 0x185c, 0x189b, 0x1903, 0x195e, 0x1992, 0x19ae, 0x19d9, 0x19f0, + 0x1a19, 0x1a55, 0x1a71, 0x1ab5, 0x1b2c, 0x1b9d, 0x1baf, 0x1be5, + // Entry 43180 - 431BF + 0x1c53, 0x1ca2, 0x1cd6, 0x1cf1, 0x1d0c, 0x1d22, 0x1d41, 0x1d61, + 0x1d93, 0x1ddb, 0x1e28, 0x1e73, 0x1ed0, 0x1f2c, 0x1f4e, 0x1f84, + 0x1fbc, 0x1fe7, 0x2029, 0x2054, 0x2082, 0x2108, 0x2137, 0x2171, + 0x2186, 0x21a2, 0x21b9, 0x21eb, 0x2229, 0x225c, 0x22cd, 0x2334, + 0x2387, 0x23bf, 0x23d3, 0x23e5, 0x2413, 0x2478, 0x24d7, 0x2517, + 0x2528, 0x2561, 0x25ef, 0x2642, 0x268d, 0x26cd, 0x26df, 0x2712, + 0x275f, 0x27aa, 0x27ea, 0x2828, 0x2882, 0x2897, 0x28aa, 0x2914, + 0x2929, 0x2952, 0x29a1, 0x29eb, 0x2a21, 0x2a37, 0x2a55, 0x2a71, + // Entry 431C0 - 431FF + 0x2a8d, 0x2aa2, 0x2ab4, 0x2ad9, 0x2b11, 0x2b2a, 0x2b50, 0x2b86, + 0x2bb3, 0x2bfb, 0x2c22, 0x2c75, 0x2ccd, 0x2d07, 0x2d35, 0x2d8e, + 0x2dce, 0x2de1, 0x2df9, 0x2e29, 0x2e7d, 0x1b84, 0x25b3, 0x0a7a, + 0x0be5, 0x0e48, 0x0e91, 0xffff, 0x2042, 0x20d2, 0x28d6, 0x009e, + 0x0058, 0xffff, 0xffff, 0xffff, 0xffff, 0x0b5f, 0x0bb5, 0x0c4f, + 0x0c98, 0x0cdf, 0x0d31, 0x0d86, 0x0dd4, 0x0e1b, 0x0ef9, 0x0f4b, + 0x0fb3, 0x100f, 0x1064, 0x10cb, 0x114c, 0x11c6, 0x123a, 0x129f, + 0x12f4, 0x1349, 0xffff, 0xffff, 0x13c6, 0xffff, 0x143a, 0xffff, + // Entry 43200 - 4323F + 0x14a0, 0x14ea, 0x1532, 0x1584, 0xffff, 0xffff, 0x160c, 0x1664, + 0x16b5, 0xffff, 0xffff, 0xffff, 0x1759, 0xffff, 0x17d1, 0x1836, + 0xffff, 0x18c0, 0x1927, 0x1977, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1a36, 0xffff, 0xffff, 0x1ade, 0x1b57, 0xffff, 0xffff, 0x1c10, + 0x1c71, 0x1cbb, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1dac, 0x1df7, 0x1e43, 0x1e8e, 0x1efd, 0xffff, 0xffff, 0x1f9f, + 0xffff, 0x2007, 0xffff, 0xffff, 0x20a0, 0xffff, 0x2153, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2209, 0xffff, 0x2284, 0x22f4, 0x2353, + // Entry 43240 - 4327F + 0x23a2, 0xffff, 0xffff, 0xffff, 0x2437, 0x249b, 0x24f6, 0xffff, + 0xffff, 0x2589, 0x260f, 0x265b, 0x26ac, 0xffff, 0xffff, 0x272f, + 0x2778, 0x27c9, 0xffff, 0x2854, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x296f, 0x29bc, 0x2a05, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2af4, 0xffff, 0xffff, 0x2b6a, 0xffff, + 0x2bd6, 0xffff, 0x2c3e, 0x2c96, 0x2ce9, 0xffff, 0x2d55, 0x2dad, + 0xffff, 0xffff, 0xffff, 0x2e45, 0x2e9f, 0xffff, 0xffff, 0x0a93, + 0x0c00, 0x0e62, 0x0eac, 0xffff, 0xffff, 0x20ec, 0x28f4, 0x0003, + // Entry 43280 - 432BF + 0x0c98, 0x0dca, 0x0d31, 0x0097, 0x001d, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x226f, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2278, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 432C0 - 432FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 43300 - 4333F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0279, 0x0097, 0x001d, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x226f, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2278, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 43340 - 4337F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 43380 - 433BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0279, 0x0097, 0x001d, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2273, 0xffff, 0xffff, + // Entry 433C0 - 433FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x227c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 43400 - 4343F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 43440 - 4347F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x027d, 0x0003, 0x0000, + 0x0000, 0x0004, 0x0004, 0x0000, 0x0000, 0x0000, 0x0009, 0x0001, + 0x000b, 0x0003, 0x000f, 0x0075, 0x0042, 0x0031, 0x0057, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0c82, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 43480 - 434BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0c82, 0x0c82, 0xffff, 0x0c82, + 0x0031, 0x0057, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0c82, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0c82, + // Entry 434C0 - 434FF + 0x0c82, 0xffff, 0x0c82, 0x0031, 0x0057, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0c82, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0c82, 0x0c82, 0xffff, 0x0c82, 0x0003, 0x0000, + 0x0000, 0x0004, 0x0004, 0x0000, 0x0000, 0x0000, 0x0009, 0x0001, + // Entry 43500 - 4353F + 0x000b, 0x0003, 0x000f, 0x0075, 0x0042, 0x0031, 0x0057, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0c82, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0c82, 0x0c82, 0xffff, 0x0c82, + 0x0031, 0x0057, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 43540 - 4357F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0c82, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0c82, + 0x0c82, 0xffff, 0x0c82, 0x0031, 0x0057, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 43580 - 435BF + 0xffff, 0xffff, 0xffff, 0xffff, 0x0c82, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0c82, 0x0c82, 0xffff, 0x0c82, 0x0003, 0x0000, + 0x0000, 0x0004, 0x0004, 0x0000, 0x0000, 0x0000, 0x0009, 0x0001, + 0x000b, 0x0003, 0x000f, 0x0075, 0x0042, 0x0031, 0x0057, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 435C0 - 435FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0c82, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0c82, 0x0c82, 0xffff, 0x0c82, + 0x0031, 0x0057, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0c82, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 43600 - 4363F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0c82, + 0x0c82, 0xffff, 0x0c82, 0x0031, 0x0057, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0c82, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 43640 - 4367F + 0xffff, 0xffff, 0x0c82, 0x0c82, 0xffff, 0x0c82, 0x0003, 0x0004, + 0x0000, 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000d, 0x0007, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0015, 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, + 0x0001, 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, 0x0002, + 0x04fe, 0x0001, 0x0002, 0x0508, 0x0004, 0x0000, 0x0000, 0x0000, + 0x002b, 0x0001, 0x002d, 0x0003, 0x0031, 0x0097, 0x0064, 0x0031, + 0x0057, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 43680 - 436BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0c82, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0c82, 0x0c82, + 0xffff, 0x0c82, 0x0031, 0x0057, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 436C0 - 436FF + 0xffff, 0xffff, 0xffff, 0x0c82, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0c82, 0x0c82, 0xffff, 0x0c82, 0x0031, 0x0057, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0c82, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 43700 - 4373F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0c82, 0x0c82, 0xffff, 0x0c82, + 0x0003, 0x0000, 0x0000, 0x0004, 0x0004, 0x0000, 0x0000, 0x0000, + 0x0009, 0x0001, 0x000b, 0x0003, 0x000f, 0x0075, 0x0042, 0x0031, + 0x0057, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0c82, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 43740 - 4377F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0c82, 0x0c82, + 0xffff, 0x0c82, 0x0031, 0x0057, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0c82, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 43780 - 437BF + 0xffff, 0x0c82, 0x0c82, 0xffff, 0x0c82, 0x0031, 0x0057, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0c82, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0c82, 0x0c82, 0xffff, 0x0c82, + 0x0003, 0x0004, 0x019b, 0x04f1, 0x0012, 0x0017, 0x0031, 0x0000, + // Entry 437C0 - 437FF + 0x0000, 0x0000, 0x0000, 0x0065, 0x0084, 0x0158, 0x0000, 0x0177, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0183, 0x0000, 0x018f, 0x0006, + 0x0000, 0x0000, 0x0000, 0x0000, 0x001e, 0x002c, 0x0003, 0x0000, + 0x0027, 0x0022, 0x0001, 0x0024, 0x0001, 0x0000, 0x0000, 0x0001, + 0x0029, 0x0001, 0x0000, 0x0000, 0x0001, 0x002e, 0x0001, 0x0010, + 0x004c, 0x0006, 0x0038, 0x0000, 0x0000, 0x0000, 0x0000, 0x005d, + 0x0002, 0x003b, 0x004c, 0x0001, 0x003d, 0x000d, 0x0046, 0xffff, + 0x00f6, 0x00f9, 0x00fc, 0x00ff, 0x33d7, 0x33da, 0x33dd, 0x33e0, + // Entry 43800 - 4383F + 0x33e3, 0x33e6, 0x33ea, 0x33ee, 0x0001, 0x004e, 0x000d, 0x0046, + 0xffff, 0x00f6, 0x00f9, 0x00fc, 0x00ff, 0x33d7, 0x33da, 0x33dd, + 0x33e0, 0x33e3, 0x33e6, 0x33ea, 0x33ee, 0x0004, 0x0000, 0x0000, + 0x0000, 0x0062, 0x0001, 0x0059, 0x0000, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x006e, 0x0000, 0x0073, 0x0001, 0x0070, + 0x0001, 0x0010, 0x004c, 0x0004, 0x0081, 0x007b, 0x0078, 0x007e, + 0x0001, 0x0059, 0x0012, 0x0001, 0x0059, 0x0012, 0x0001, 0x0006, + 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, 0x0000, 0x008d, 0x00a6, + // Entry 43840 - 4387F + 0x00bf, 0x0133, 0x013c, 0x0000, 0x0147, 0x0002, 0x0090, 0x009b, + 0x0001, 0x0092, 0x0007, 0x001d, 0x163d, 0x2281, 0x2289, 0x2290, + 0x2297, 0x229e, 0x166c, 0x0001, 0x009d, 0x0007, 0x001d, 0x163d, + 0x2281, 0x2289, 0x2290, 0x2297, 0x229e, 0x166c, 0x0002, 0x00a9, + 0x00b4, 0x0003, 0x0000, 0x0000, 0x00ad, 0x0005, 0x001f, 0xffff, + 0x0014, 0x300f, 0x0032, 0x301e, 0x0003, 0x0000, 0x0000, 0x00b8, + 0x0005, 0x001f, 0xffff, 0x0014, 0x300f, 0x0032, 0x301e, 0x0002, + 0x00c2, 0x0114, 0x0003, 0x00c6, 0x00d8, 0x00f9, 0x0008, 0x00cf, + // Entry 43880 - 438BF + 0x00d5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00d2, 0x0001, + 0x001d, 0x050b, 0x0001, 0x0058, 0x00f0, 0x0001, 0x001d, 0x0510, + 0x0008, 0x00e4, 0x00ea, 0x00e1, 0x00ed, 0x00f0, 0x00f3, 0x00f6, + 0x00e7, 0x0001, 0x0058, 0x00e5, 0x0001, 0x001d, 0x050b, 0x0001, + 0x0058, 0x00f0, 0x0001, 0x001d, 0x0510, 0x0001, 0x0058, 0x0103, + 0x0001, 0x0006, 0x0cf2, 0x0001, 0x0029, 0x020f, 0x0001, 0x001d, + 0x16f0, 0x0008, 0x0102, 0x0108, 0x0000, 0x010b, 0x010e, 0x0111, + 0x0000, 0x0105, 0x0001, 0x0058, 0x00f9, 0x0001, 0x0058, 0x00f0, + // Entry 438C0 - 438FF + 0x0001, 0x0029, 0x01f4, 0x0001, 0x0058, 0x00f9, 0x0001, 0x0029, + 0x01f4, 0x0001, 0x0029, 0x01c7, 0x0003, 0x0118, 0x0121, 0x012a, + 0x0002, 0x011b, 0x011e, 0x0001, 0x001d, 0x050b, 0x0001, 0x001d, + 0x0510, 0x0002, 0x0124, 0x0127, 0x0001, 0x001d, 0x050b, 0x0001, + 0x001d, 0x0510, 0x0002, 0x012d, 0x0130, 0x0001, 0x0058, 0x0103, + 0x0001, 0x0006, 0x0cf2, 0x0001, 0x0135, 0x0002, 0x0000, 0x0138, + 0x0002, 0x0059, 0x0020, 0x0027, 0x0004, 0x0144, 0x0000, 0x0000, + 0x0141, 0x0001, 0x0002, 0x08e8, 0x0001, 0x0015, 0x14be, 0x0004, + // Entry 43900 - 4393F + 0x0155, 0x014f, 0x014c, 0x0152, 0x0001, 0x0059, 0x0012, 0x0001, + 0x0059, 0x0012, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, + 0x0006, 0x015f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0172, 0x0001, + 0x0161, 0x0003, 0x0000, 0x0000, 0x0165, 0x000b, 0x0000, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3c00, + 0xffff, 0x3c06, 0x0001, 0x0174, 0x0001, 0x0010, 0x004c, 0x0006, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x017e, 0x0001, 0x0180, + 0x0001, 0x0010, 0x004c, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 43940 - 4397F + 0x0000, 0x018a, 0x0001, 0x018c, 0x0001, 0x0010, 0x004c, 0x0006, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0196, 0x0001, 0x0198, + 0x0001, 0x0010, 0x004c, 0x0042, 0x0000, 0x0000, 0x0000, 0x01de, + 0x01ed, 0x01fc, 0x020b, 0x021f, 0x0233, 0x0247, 0x0256, 0x0265, + 0x0274, 0x0283, 0x0296, 0x0000, 0x0000, 0x0000, 0x02a5, 0x02bb, + 0x02d1, 0x0000, 0x0000, 0x0000, 0x0000, 0x02e7, 0x02ec, 0x0000, + 0x0000, 0x0000, 0x02f1, 0x0300, 0x030f, 0x031e, 0x0328, 0x033c, + 0x034b, 0x0355, 0x0369, 0x0378, 0x0387, 0x039b, 0x03aa, 0x03b9, + // Entry 43980 - 439BF + 0x03cd, 0x03e1, 0x03f0, 0x0404, 0x0413, 0x0422, 0x0436, 0x0445, + 0x044a, 0x044f, 0x0454, 0x0463, 0x0472, 0x0481, 0x0490, 0x04a2, + 0x04b4, 0x04c3, 0x04d5, 0x0000, 0x04e7, 0x04ec, 0x0003, 0x0000, + 0x0000, 0x01e2, 0x0002, 0x01e5, 0x01e9, 0x0002, 0x0029, 0x02a1, + 0x028f, 0x0002, 0x0059, 0x0038, 0x002c, 0x0003, 0x0000, 0x0000, + 0x01f1, 0x0002, 0x01f4, 0x01f8, 0x0002, 0x0029, 0x02a1, 0x028f, + 0x0002, 0x0059, 0x0038, 0x002c, 0x0003, 0x0000, 0x0000, 0x0200, + 0x0002, 0x0203, 0x0207, 0x0002, 0x0059, 0x004e, 0x0045, 0x0002, + // Entry 439C0 - 439FF + 0x0059, 0x0061, 0x0058, 0x0003, 0x0000, 0x020f, 0x0214, 0x0003, + 0x0059, 0x006b, 0x007d, 0x008c, 0x0002, 0x0217, 0x021b, 0x0002, + 0x001d, 0x18a2, 0x188a, 0x0002, 0x0059, 0x00b1, 0x009f, 0x0003, + 0x0000, 0x0223, 0x0228, 0x0003, 0x0059, 0x00c4, 0x00d2, 0x00dd, + 0x0002, 0x022b, 0x022f, 0x0002, 0x001d, 0x18e2, 0x18e2, 0x0002, + 0x0059, 0x00ec, 0x00ec, 0x0003, 0x0000, 0x0237, 0x023c, 0x0003, + 0x0059, 0x00c4, 0x00d2, 0x00dd, 0x0002, 0x023f, 0x0243, 0x0002, + 0x000b, 0x0c9c, 0x0c9c, 0x0002, 0x000b, 0x0ca7, 0x0ca7, 0x0003, + // Entry 43A00 - 43A3F + 0x0000, 0x0000, 0x024b, 0x0002, 0x024e, 0x0252, 0x0002, 0x0059, + 0x010d, 0x00fa, 0x0002, 0x0059, 0x012e, 0x0121, 0x0003, 0x0000, + 0x0000, 0x025a, 0x0002, 0x025d, 0x0261, 0x0002, 0x0059, 0x010d, + 0x00fa, 0x0002, 0x0059, 0x012e, 0x0121, 0x0003, 0x0000, 0x0000, + 0x0269, 0x0002, 0x026c, 0x0270, 0x0002, 0x0059, 0x0146, 0x013c, + 0x0002, 0x0059, 0x015b, 0x0151, 0x0003, 0x0000, 0x0000, 0x0278, + 0x0002, 0x027b, 0x027f, 0x0002, 0x001d, 0x19d5, 0x19c0, 0x0002, + 0x0059, 0x0175, 0x0166, 0x0004, 0x0000, 0x0000, 0x0288, 0x0293, + // Entry 43A40 - 43A7F + 0x0002, 0x028b, 0x028f, 0x0002, 0x001d, 0x1a23, 0x1a23, 0x0002, + 0x0059, 0x0185, 0x0185, 0x0001, 0x0059, 0x0192, 0x0003, 0x0000, + 0x0000, 0x029a, 0x0002, 0x029d, 0x02a1, 0x0002, 0x0025, 0x08f9, + 0x08f9, 0x0002, 0x0025, 0x0903, 0x0903, 0x0003, 0x0000, 0x02a9, + 0x02b0, 0x0005, 0x0058, 0x0364, 0x036a, 0x036f, 0x035a, 0x0377, + 0x0002, 0x02b3, 0x02b7, 0x0002, 0x0059, 0x01b2, 0x01a0, 0x0002, + 0x0059, 0x01d1, 0x01c5, 0x0003, 0x0000, 0x02bf, 0x02c6, 0x0005, + 0x0058, 0x0364, 0x036a, 0x036f, 0x035a, 0x0377, 0x0002, 0x02c9, + // Entry 43A80 - 43ABF + 0x02cd, 0x0002, 0x0059, 0x01b2, 0x01a0, 0x0002, 0x0059, 0x01d1, + 0x01c5, 0x0003, 0x0000, 0x02d5, 0x02dc, 0x0005, 0x0058, 0x0364, + 0x036a, 0x036f, 0x035a, 0x0377, 0x0002, 0x02df, 0x02e3, 0x0002, + 0x0059, 0x01e7, 0x01de, 0x0002, 0x0059, 0x01d1, 0x01d1, 0x0001, + 0x02e9, 0x0001, 0x0058, 0x03ca, 0x0001, 0x02ee, 0x0001, 0x0058, + 0x03ca, 0x0003, 0x0000, 0x0000, 0x02f5, 0x0002, 0x02f8, 0x02fc, + 0x0002, 0x001d, 0x1b8b, 0x1b75, 0x0002, 0x0059, 0x0201, 0x01f1, + 0x0003, 0x0000, 0x0304, 0x0309, 0x0003, 0x0058, 0x040e, 0x041e, + // Entry 43AC0 - 43AFF + 0x042b, 0x0001, 0x030b, 0x0002, 0x001d, 0x1b8b, 0x1b75, 0x0003, + 0x0000, 0x0000, 0x0313, 0x0002, 0x0316, 0x031a, 0x0002, 0x001d, + 0x1bef, 0x1bef, 0x0002, 0x0059, 0x0212, 0x0212, 0x0003, 0x0000, + 0x0000, 0x0322, 0x0001, 0x0324, 0x0002, 0x0059, 0x023b, 0x021f, + 0x0003, 0x0000, 0x032c, 0x0331, 0x0003, 0x0059, 0x0259, 0x0269, + 0x0276, 0x0002, 0x0334, 0x0338, 0x0002, 0x0059, 0x029d, 0x0287, + 0x0002, 0x0059, 0x02c4, 0x02b4, 0x0003, 0x0000, 0x0000, 0x0340, + 0x0002, 0x0343, 0x0347, 0x0002, 0x001f, 0x04df, 0x04df, 0x0002, + // Entry 43B00 - 43B3F + 0x0059, 0x02d5, 0x02d5, 0x0003, 0x0000, 0x0000, 0x034f, 0x0001, + 0x0351, 0x0002, 0x0059, 0x02fd, 0x02e2, 0x0003, 0x0000, 0x0359, + 0x035e, 0x0003, 0x0059, 0x031a, 0x0329, 0x0335, 0x0002, 0x0361, + 0x0365, 0x0002, 0x0059, 0x035a, 0x0345, 0x0002, 0x0059, 0x037f, + 0x0370, 0x0003, 0x0000, 0x0000, 0x036d, 0x0002, 0x0370, 0x0374, + 0x0002, 0x0059, 0x038f, 0x038f, 0x0002, 0x0059, 0x03a2, 0x03a2, + 0x0003, 0x0000, 0x0000, 0x037c, 0x0002, 0x037f, 0x0383, 0x0002, + 0x0059, 0x03ca, 0x03af, 0x0002, 0x0059, 0x03fc, 0x03e7, 0x0003, + // Entry 43B40 - 43B7F + 0x0000, 0x038b, 0x0390, 0x0003, 0x0059, 0x0413, 0x0422, 0x042e, + 0x0002, 0x0393, 0x0397, 0x0002, 0x0059, 0x0453, 0x043e, 0x0002, + 0x0059, 0x0478, 0x0469, 0x0003, 0x0000, 0x0000, 0x039f, 0x0002, + 0x03a2, 0x03a6, 0x0002, 0x0059, 0x0488, 0x0488, 0x0002, 0x0059, + 0x049b, 0x049b, 0x0003, 0x0000, 0x0000, 0x03ae, 0x0002, 0x03b1, + 0x03b5, 0x0002, 0x0059, 0x04c3, 0x04a8, 0x0002, 0x0059, 0x04f5, + 0x04e0, 0x0003, 0x0000, 0x03bd, 0x03c2, 0x0003, 0x0059, 0x050c, + 0x051b, 0x0527, 0x0002, 0x03c5, 0x03c9, 0x0002, 0x0059, 0x054c, + // Entry 43B80 - 43BBF + 0x0537, 0x0002, 0x0059, 0x0571, 0x0562, 0x0003, 0x0000, 0x03d1, + 0x03d6, 0x0003, 0x0058, 0x076e, 0x077b, 0x2ec3, 0x0002, 0x03d9, + 0x03dd, 0x0002, 0x0059, 0x0581, 0x0581, 0x0002, 0x0059, 0x0594, + 0x0594, 0x0003, 0x0000, 0x0000, 0x03e5, 0x0002, 0x03e8, 0x03ec, + 0x0002, 0x0059, 0x05bb, 0x05a1, 0x0002, 0x0059, 0x05eb, 0x05d7, + 0x0003, 0x0000, 0x03f4, 0x03f9, 0x0003, 0x0059, 0x0601, 0x060f, + 0x061a, 0x0002, 0x03fc, 0x0400, 0x0002, 0x0059, 0x063d, 0x0629, + 0x0002, 0x0059, 0x0660, 0x0652, 0x0003, 0x0000, 0x0000, 0x0408, + // Entry 43BC0 - 43BFF + 0x0002, 0x040b, 0x040f, 0x0002, 0x0059, 0x066f, 0x066f, 0x0002, + 0x0059, 0x0682, 0x0682, 0x0003, 0x0000, 0x0000, 0x0417, 0x0002, + 0x041a, 0x041e, 0x0002, 0x001e, 0x00fc, 0x00e6, 0x0002, 0x0059, + 0x069f, 0x068f, 0x0003, 0x0000, 0x0426, 0x042b, 0x0003, 0x0058, + 0x081a, 0x082a, 0x0837, 0x0002, 0x042e, 0x0432, 0x0002, 0x001e, + 0x00fc, 0x00e6, 0x0002, 0x0059, 0x069f, 0x068f, 0x0003, 0x0000, + 0x0000, 0x043a, 0x0002, 0x043d, 0x0441, 0x0002, 0x001e, 0x0163, + 0x0163, 0x0002, 0x0059, 0x06b0, 0x06b0, 0x0001, 0x0447, 0x0001, + // Entry 43C00 - 43C3F + 0x0007, 0x2485, 0x0001, 0x044c, 0x0001, 0x0007, 0x2485, 0x0001, + 0x0451, 0x0001, 0x0007, 0x2485, 0x0003, 0x0000, 0x0000, 0x0458, + 0x0002, 0x045b, 0x045f, 0x0002, 0x001e, 0x01da, 0x01c7, 0x0002, + 0x0059, 0x06cb, 0x06be, 0x0003, 0x0000, 0x0000, 0x0467, 0x0002, + 0x046a, 0x046e, 0x0002, 0x001e, 0x020b, 0x020b, 0x0002, 0x0059, + 0x06d9, 0x06d9, 0x0003, 0x0000, 0x0000, 0x0476, 0x0002, 0x0479, + 0x047d, 0x0002, 0x0000, 0x1d76, 0x1d76, 0x0002, 0x0000, 0x1d7d, + 0x1d7d, 0x0003, 0x0000, 0x0000, 0x0485, 0x0002, 0x0488, 0x048c, + // Entry 43C40 - 43C7F + 0x0002, 0x001e, 0x0247, 0x0232, 0x0002, 0x0059, 0x06f2, 0x06e3, + 0x0003, 0x0494, 0x0000, 0x0497, 0x0001, 0x0043, 0x092f, 0x0002, + 0x049a, 0x049e, 0x0002, 0x001e, 0x027e, 0x027e, 0x0002, 0x0059, + 0x0702, 0x0702, 0x0003, 0x04a6, 0x0000, 0x04a9, 0x0001, 0x0043, + 0x092f, 0x0002, 0x04ac, 0x04b0, 0x0002, 0x0000, 0x1d97, 0x1d97, + 0x0002, 0x0000, 0x1da0, 0x1da0, 0x0003, 0x0000, 0x0000, 0x04b8, + 0x0002, 0x04bb, 0x04bf, 0x0002, 0x001e, 0x02c1, 0x02ab, 0x0002, + 0x0059, 0x071e, 0x070e, 0x0003, 0x04c7, 0x0000, 0x04ca, 0x0001, + // Entry 43C80 - 43CBF + 0x0000, 0x2002, 0x0002, 0x04cd, 0x04d1, 0x0002, 0x001e, 0x02fb, + 0x02fb, 0x0002, 0x0059, 0x072f, 0x072f, 0x0003, 0x04d9, 0x0000, + 0x04dc, 0x0001, 0x0000, 0x2002, 0x0002, 0x04df, 0x04e3, 0x0002, + 0x0026, 0x02ce, 0x02ce, 0x0002, 0x0000, 0x1dbb, 0x1dbb, 0x0001, + 0x04e9, 0x0001, 0x0058, 0x09c8, 0x0001, 0x04ee, 0x0001, 0x0058, + 0x09c8, 0x0004, 0x0000, 0x04f6, 0x04fb, 0x050a, 0x0003, 0x0006, + 0x1f28, 0x44a0, 0x44a0, 0x0002, 0x0000, 0x04fe, 0x0003, 0x0000, + 0x0505, 0x0502, 0x0001, 0x0059, 0x0739, 0x0003, 0x0059, 0xffff, + // Entry 43CC0 - 43CFF + 0x0753, 0x076d, 0x0002, 0x06f1, 0x050d, 0x0003, 0x0511, 0x0651, + 0x05b1, 0x009e, 0x0059, 0xffff, 0xffff, 0xffff, 0xffff, 0x081d, + 0x087d, 0x08fb, 0x0940, 0x0979, 0x09b5, 0x09fa, 0x0a42, 0x0a81, + 0x0b35, 0x0b77, 0x0bbf, 0x0c25, 0x0c6a, 0x0cb5, 0x0d18, 0x0d99, + 0x0dff, 0x0e68, 0x0eb6, 0x0efb, 0xffff, 0xffff, 0x0f66, 0xffff, + 0x0fc8, 0xffff, 0x102c, 0x106e, 0x10aa, 0x10e6, 0xffff, 0xffff, + 0x115c, 0x11a4, 0x11f2, 0xffff, 0xffff, 0xffff, 0x1268, 0xffff, + 0x12d2, 0x1329, 0xffff, 0x13a3, 0x1400, 0x145a, 0xffff, 0xffff, + // Entry 43D00 - 43D3F + 0xffff, 0xffff, 0x1501, 0xffff, 0xffff, 0x156f, 0x15db, 0xffff, + 0xffff, 0x1684, 0x16de, 0x1726, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x17f3, 0x182f, 0x1871, 0x18b0, 0x18ef, 0xffff, + 0xffff, 0x19a1, 0xffff, 0x19ef, 0xffff, 0xffff, 0x1a78, 0xffff, + 0x1b13, 0xffff, 0xffff, 0xffff, 0xffff, 0x1ba9, 0xffff, 0x1c00, + 0x1c66, 0x1cc9, 0x1d14, 0xffff, 0xffff, 0xffff, 0x1d82, 0x1ddc, + 0x1e33, 0xffff, 0xffff, 0x1ea1, 0x1f27, 0x1f75, 0x1fae, 0xffff, + 0xffff, 0x2021, 0x2066, 0x209f, 0xffff, 0x2100, 0xffff, 0xffff, + // Entry 43D40 - 43D7F + 0xffff, 0xffff, 0xffff, 0x220a, 0x224f, 0x228e, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2354, 0xffff, 0xffff, + 0x23b8, 0xffff, 0x2402, 0xffff, 0x246b, 0x24ad, 0x24fe, 0xffff, + 0x2552, 0x25a0, 0xffff, 0xffff, 0xffff, 0x2624, 0x2666, 0xffff, + 0xffff, 0x0787, 0x08bc, 0x0aba, 0x0af6, 0xffff, 0xffff, 0x1ac0, + 0x21a1, 0x009e, 0x0059, 0x07c0, 0x07d5, 0x07ed, 0x0806, 0x0837, + 0x088c, 0x090c, 0x094d, 0x0987, 0x09c6, 0x0a0c, 0x0a51, 0x0a8e, + 0x0b45, 0x0b89, 0x0bdb, 0x0c36, 0x0c7d, 0x0cd0, 0x0d3d, 0x0db5, + // Entry 43D80 - 43DBF + 0x0e1c, 0x0e7c, 0x0ec7, 0x0f0e, 0x0f46, 0x0f55, 0x0f78, 0x0fae, + 0x0fdb, 0x1013, 0x103c, 0x107c, 0x10b8, 0x10f9, 0x1131, 0x1147, + 0x116e, 0x11b8, 0x11ff, 0x122b, 0x1239, 0x1254, 0x1280, 0x12c2, + 0x12e9, 0x1341, 0x1383, 0x13bc, 0x1418, 0x1467, 0x1493, 0x14ab, + 0x14dd, 0x14f1, 0x1512, 0x1546, 0x155d, 0x158d, 0x15fa, 0x165f, + 0x1675, 0x169c, 0x16f0, 0x1733, 0x175f, 0x1776, 0x178d, 0x179f, + 0x17ba, 0x17d6, 0x1801, 0x183f, 0x1880, 0x18bf, 0x1910, 0x1964, + 0x1982, 0x19b0, 0x19e0, 0x1a03, 0x1a3d, 0x1a64, 0x1a8a, 0x1afc, + // Entry 43DC0 - 43DFF + 0x1b23, 0x1b55, 0x1b66, 0x1b78, 0x1b91, 0x1bbb, 0x1bf1, 0x1c1c, + 0x1c81, 0x1cdc, 0x1d24, 0x1d56, 0x1d66, 0x1d74, 0x1d9a, 0x1df3, + 0x1e46, 0x1e7e, 0x1e8c, 0x1ebd, 0x1f3b, 0x1f82, 0x1fc1, 0x1ff9, + 0x2007, 0x2032, 0x2073, 0x20b2, 0x20ea, 0x211f, 0x216f, 0x2180, + 0x218f, 0x21e9, 0x21fa, 0x221b, 0x225e, 0x229c, 0x22ca, 0x22dd, + 0x22f7, 0x230f, 0x2327, 0x2338, 0x2346, 0x2363, 0x2393, 0x23a8, + 0x23c6, 0x23f4, 0x241a, 0x245c, 0x247b, 0x24c2, 0x250e, 0x2540, + 0x2566, 0x25b3, 0x25eb, 0x25fa, 0x260c, 0x2634, 0x267c, 0x164a, + // Entry 43E00 - 43E3F + 0x1f07, 0x0794, 0x08cb, 0x0ac8, 0x0b05, 0xffff, 0x1a52, 0x1ace, + 0x21b3, 0x009e, 0x0059, 0xffff, 0xffff, 0xffff, 0xffff, 0x0859, + 0x08a3, 0x0925, 0x0962, 0x099d, 0x09df, 0x0a26, 0x0a68, 0x0aa3, + 0x0b5d, 0x0ba3, 0x0bff, 0x0c4f, 0x0c98, 0x0cf3, 0x0d6a, 0x0dd9, + 0x0e41, 0x0e98, 0x0ee0, 0x0f29, 0xffff, 0xffff, 0x0f92, 0xffff, + 0x0ff6, 0xffff, 0x1054, 0x1092, 0x10ce, 0x1114, 0xffff, 0xffff, + 0x1188, 0x11d4, 0x1214, 0xffff, 0xffff, 0xffff, 0x12a0, 0xffff, + 0x1308, 0x1361, 0xffff, 0x13dd, 0x1438, 0x147c, 0xffff, 0xffff, + // Entry 43E40 - 43E7F + 0xffff, 0xffff, 0x152b, 0xffff, 0xffff, 0x15b3, 0x1621, 0xffff, + 0xffff, 0x16bc, 0x170a, 0x1748, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1817, 0x1857, 0x1897, 0x18d6, 0x1939, 0xffff, + 0xffff, 0x19c7, 0xffff, 0x1a1f, 0xffff, 0xffff, 0x1aa4, 0xffff, + 0x1b3b, 0xffff, 0xffff, 0xffff, 0xffff, 0x1bd5, 0xffff, 0x1c40, + 0x1ca4, 0x1cf7, 0x1d3c, 0xffff, 0xffff, 0xffff, 0x1dba, 0x1e12, + 0x1e61, 0xffff, 0xffff, 0x1ee1, 0x1f57, 0x1f97, 0x1fdc, 0xffff, + 0xffff, 0x204b, 0x2088, 0x20cd, 0xffff, 0x2146, 0xffff, 0xffff, + // Entry 43E80 - 43EBF + 0xffff, 0xffff, 0xffff, 0x2234, 0x2275, 0x22b2, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x237a, 0xffff, 0xffff, + 0x23dc, 0xffff, 0x243a, 0xffff, 0x2493, 0x24df, 0x2526, 0xffff, + 0x2582, 0x25ce, 0xffff, 0xffff, 0xffff, 0x264c, 0x269a, 0xffff, + 0xffff, 0x07a9, 0x08e2, 0x0ade, 0x0b1c, 0xffff, 0xffff, 0x1ae4, + 0x21cd, 0x0003, 0x06f5, 0x0827, 0x078e, 0x0097, 0x0057, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0c82, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 43EC0 - 43EFF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x30bb, 0xffff, + 0xffff, 0xffff, 0x0c82, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x30c6, 0x30cf, 0xffff, 0x30d8, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 43F00 - 43F3F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 43F40 - 43F7F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0c82, 0x0097, 0x0057, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0c82, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x30bb, + 0xffff, 0xffff, 0xffff, 0x0c82, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x30c6, 0x30cf, 0xffff, + 0x30d8, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 43F80 - 43FBF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 43FC0 - 43FFF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0c82, 0x0097, + 0x0057, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0c82, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x30c0, 0xffff, 0xffff, 0xffff, 0x0c82, 0xffff, 0xffff, 0xffff, + // Entry 44000 - 4403F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x30ca, 0x30d3, + 0xffff, 0x30dc, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 44040 - 4407F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0c82, + 0x0003, 0x0000, 0x0000, 0x0004, 0x0004, 0x0000, 0x0000, 0x0000, + // Entry 44080 - 440BF + 0x0009, 0x0001, 0x000b, 0x0003, 0x000f, 0x0075, 0x0042, 0x0031, + 0x0057, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0c82, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0c82, 0x0c82, + 0xffff, 0x0c82, 0x0031, 0x0057, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 440C0 - 440FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0c82, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0c82, 0x0c82, 0xffff, 0x0c82, 0x0031, 0x0057, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 44100 - 4413F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0c82, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0c82, 0x0c82, 0xffff, 0x0c82, + 0x0003, 0x0000, 0x0000, 0x0004, 0x0004, 0x0000, 0x0000, 0x0000, + 0x0009, 0x0001, 0x000b, 0x0003, 0x000f, 0x0075, 0x0042, 0x0031, + 0x0057, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 44140 - 4417F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0c82, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0c82, 0x0c82, + 0xffff, 0x0c82, 0x0031, 0x0057, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0c82, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 44180 - 441BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0c82, 0x0c82, 0xffff, 0x0c82, 0x0031, 0x0057, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0c82, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 441C0 - 441FF + 0xffff, 0xffff, 0xffff, 0xffff, 0x0c82, 0x0c82, 0xffff, 0x0c82, + 0x0003, 0x0004, 0x0000, 0x019b, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0008, 0x0016, 0x007b, + 0x00d2, 0x0107, 0x0148, 0x0168, 0x0179, 0x018a, 0x0002, 0x0019, + 0x004a, 0x0003, 0x001d, 0x002c, 0x003b, 0x000d, 0x0023, 0xffff, + 0x000f, 0x2b1a, 0x2b1e, 0x2b22, 0x2b26, 0x2b2a, 0x2b2e, 0x2b32, + 0x2b36, 0x2b3a, 0x2b3e, 0x2b42, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + // Entry 44200 - 4423F + 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x001f, 0xffff, 0x0874, 0x087a, + 0x302d, 0x3033, 0x088e, 0x0893, 0x0899, 0x3039, 0x08a6, 0x08b0, + 0x08b8, 0x08c2, 0x0003, 0x004e, 0x005d, 0x006c, 0x000d, 0x0023, + 0xffff, 0x000f, 0x2b1a, 0x2b1e, 0x2b22, 0x2b26, 0x2b2a, 0x2b2e, + 0x2b32, 0x2b36, 0x2b3a, 0x2b3e, 0x2b42, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x001f, 0xffff, 0x0874, + 0x087a, 0x302d, 0x3033, 0x088e, 0x0893, 0x0899, 0x3039, 0x08a6, + // Entry 44240 - 4427F + 0x08b0, 0x08b8, 0x08c2, 0x0002, 0x007e, 0x00a8, 0x0005, 0x0084, + 0x008d, 0x009f, 0x0000, 0x0096, 0x0007, 0x005a, 0x0000, 0x0004, + 0x0008, 0x000c, 0x0011, 0x0015, 0x0019, 0x0007, 0x0000, 0x2b3e, + 0x2296, 0x2b3c, 0x2060, 0x257b, 0x257f, 0x2b3a, 0x0007, 0x005a, + 0x0000, 0x0004, 0x0008, 0x000c, 0x0011, 0x0015, 0x0019, 0x0007, + 0x0029, 0x0199, 0x2cb1, 0x01a1, 0x2cb7, 0x2cc2, 0x2cc9, 0x01bf, + 0x0005, 0x00ae, 0x00b7, 0x00c9, 0x0000, 0x00c0, 0x0007, 0x005a, + 0x0000, 0x0004, 0x0008, 0x000c, 0x0011, 0x0015, 0x0019, 0x0007, + // Entry 44280 - 442BF + 0x0000, 0x2b3e, 0x2296, 0x2b3c, 0x2060, 0x257b, 0x257f, 0x2b3a, + 0x0007, 0x005a, 0x0000, 0x0004, 0x0008, 0x000c, 0x0011, 0x0015, + 0x0019, 0x0007, 0x0029, 0x0199, 0x2cb1, 0x01a1, 0x2cb7, 0x2cc2, + 0x2cc9, 0x01bf, 0x0002, 0x00d5, 0x00ee, 0x0003, 0x00d9, 0x00e0, + 0x00e7, 0x0005, 0x0000, 0xffff, 0x04e3, 0x39f2, 0x39f5, 0x39f8, + 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, + 0x0000, 0xffff, 0x04e3, 0x39f2, 0x39f5, 0x39f8, 0x0003, 0x00f2, + 0x00f9, 0x0100, 0x0005, 0x0000, 0xffff, 0x04e3, 0x39f2, 0x39f5, + // Entry 442C0 - 442FF + 0x39f8, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x0005, 0x0000, 0xffff, 0x04e3, 0x39f2, 0x39f5, 0x39f8, 0x0002, + 0x010a, 0x0129, 0x0003, 0x010e, 0x0117, 0x0120, 0x0002, 0x0111, + 0x0114, 0x0001, 0x001d, 0x050b, 0x0001, 0x001d, 0x0510, 0x0002, + 0x011a, 0x011d, 0x0001, 0x001d, 0x050b, 0x0001, 0x001d, 0x0510, + 0x0002, 0x0123, 0x0126, 0x0001, 0x001d, 0x050b, 0x0001, 0x001d, + 0x0510, 0x0003, 0x012d, 0x0136, 0x013f, 0x0002, 0x0130, 0x0133, + 0x0001, 0x001d, 0x050b, 0x0001, 0x001d, 0x0510, 0x0002, 0x0139, + // Entry 44300 - 4433F + 0x013c, 0x0001, 0x001d, 0x050b, 0x0001, 0x001d, 0x0510, 0x0002, + 0x0142, 0x0145, 0x0001, 0x001d, 0x050b, 0x0001, 0x001d, 0x0510, + 0x0003, 0x0157, 0x0162, 0x014c, 0x0002, 0x014f, 0x0153, 0x0002, + 0x0000, 0x04f5, 0x3c55, 0x0002, 0x0057, 0xffff, 0x07bb, 0x0002, + 0x015a, 0x015e, 0x0002, 0x0000, 0x04f5, 0x3c55, 0x0002, 0x0057, + 0xffff, 0x07bb, 0x0001, 0x0164, 0x0002, 0x0010, 0xffff, 0x02ee, + 0x0004, 0x0176, 0x0170, 0x016d, 0x0173, 0x0001, 0x0005, 0x0615, + 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, 0x0002, + // Entry 44340 - 4437F + 0x08e8, 0x0004, 0x0187, 0x0181, 0x017e, 0x0184, 0x0001, 0x0000, + 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, + 0x0000, 0x0546, 0x0004, 0x0198, 0x0192, 0x018f, 0x0195, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x001a, 0x04b3, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0004, 0x01a0, 0x01a5, 0x0000, 0x01aa, + 0x0003, 0x0000, 0x1dc7, 0x39fb, 0x3af3, 0x0003, 0x0000, 0x1de0, + 0x3a73, 0x3a7c, 0x0002, 0x0361, 0x01ad, 0x0003, 0x0245, 0x02d3, + 0x01b1, 0x0092, 0x001c, 0x0b5c, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 44380 - 443BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0e86, 0xffff, 0x0f16, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1109, 0xffff, 0x117d, 0x11ad, 0x11b9, 0xffff, 0x1200, + 0xffff, 0xffff, 0xffff, 0x12bd, 0x2877, 0xffff, 0xffff, 0xffff, + 0x138d, 0x13cb, 0x140e, 0xffff, 0xffff, 0xffff, 0xffff, 0x14b0, + 0xffff, 0xffff, 0xffff, 0xffff, 0x15e7, 0x162d, 0x1651, 0xffff, + 0xffff, 0xffff, 0x16ae, 0xffff, 0xffff, 0x1715, 0xffff, 0xffff, + 0xffff, 0xffff, 0x182b, 0xffff, 0x1887, 0xffff, 0xffff, 0x18bc, + // Entry 443C0 - 443FF + 0x18d3, 0xffff, 0x190b, 0xffff, 0x1974, 0x2896, 0xffff, 0x1a3b, + 0x1a50, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1bd4, 0x1be2, 0xffff, 0xffff, 0x1c24, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1d7a, 0x1d87, 0x1d92, 0x1db0, 0x1df7, + 0xffff, 0x1e73, 0xffff, 0xffff, 0xffff, 0xffff, 0x1f86, 0x1fb2, + 0x1fbd, 0x1fe1, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2159, 0xffff, 0xffff, 0xffff, 0x28b5, 0x2214, 0x2224, + 0x223c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x22bf, 0x22cf, + // Entry 44400 - 4443F + 0x22e7, 0xffff, 0x232a, 0x235e, 0xffff, 0x23b1, 0x23ee, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x24c4, 0x008c, 0x001c, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0e77, 0xffff, 0x0f09, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x10f9, 0xffff, 0x116d, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x12b2, + 0x286c, 0xffff, 0xffff, 0xffff, 0x137f, 0x13b9, 0x1404, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 44440 - 4447F + 0x15d1, 0x1623, 0xffff, 0xffff, 0xffff, 0xffff, 0x16a1, 0xffff, + 0xffff, 0x1701, 0xffff, 0xffff, 0xffff, 0xffff, 0x181c, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1901, 0xffff, + 0x1968, 0x288b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1c15, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1d9d, 0x1de6, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1f78, 0xffff, 0xffff, 0x1fd3, 0xffff, 0xffff, + // Entry 44480 - 444BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x28aa, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x22dc, 0xffff, 0x2318, 0xffff, + 0xffff, 0x23a1, 0x23e1, 0x008c, 0x001c, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0e9e, 0xffff, 0x0f2c, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1122, 0xffff, 0x1196, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x12d1, 0x1302, 0xffff, + // Entry 444C0 - 444FF + 0xffff, 0xffff, 0x13a4, 0x13e6, 0x1421, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1606, 0x1640, + 0xffff, 0xffff, 0xffff, 0xffff, 0x16c4, 0xffff, 0xffff, 0x1732, + 0xffff, 0xffff, 0xffff, 0xffff, 0x1843, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x191e, 0xffff, 0x1989, 0x19bd, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1c3c, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 44500 - 4453F + 0x1dcc, 0x1e11, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1f9d, 0xffff, 0xffff, 0x1ff8, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2200, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x22fb, 0xffff, 0x2345, 0xffff, 0xffff, 0x23ca, + 0x2404, 0x0003, 0x0365, 0x0449, 0x03d7, 0x0070, 0x001f, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 44540 - 4457F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 44580 - 445BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x08cc, 0x0070, + 0x001f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 445C0 - 445FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 44600 - 4463F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x08cc, 0x0070, 0x001f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 44640 - 4467F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 44680 - 446BF + 0xffff, 0xffff, 0x08d0, 0x0003, 0x0000, 0x0000, 0x0004, 0x0004, + 0x0000, 0x0000, 0x0000, 0x0009, 0x0001, 0x000b, 0x0003, 0x0081, + 0x00f3, 0x000f, 0x0070, 0x001f, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0521, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 446C0 - 446FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 44700 - 4473F + 0xffff, 0xffff, 0xffff, 0x3040, 0x0070, 0x0057, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 44740 - 4477F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0c82, 0x0070, 0x001f, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 44780 - 447BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 447C0 - 447FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3040, + 0x0003, 0x0000, 0x0000, 0x0004, 0x0004, 0x0000, 0x0000, 0x0000, + 0x0009, 0x0001, 0x000b, 0x0003, 0x0081, 0x00f3, 0x000f, 0x0070, + 0x001f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 44800 - 4483F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0604, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 44840 - 4487F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x3040, 0x0070, 0x001f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 44880 - 448BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 448C0 - 448FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x3040, 0x0070, 0x001f, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 44900 - 4493F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 44940 - 4497F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x3040, 0x0003, 0x0004, 0x01af, + 0x022f, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000d, 0x0027, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0016, 0x0000, 0x0000, 0x0004, 0x0024, 0x001e, 0x001b, 0x0021, + 0x0001, 0x005a, 0x001d, 0x0001, 0x005a, 0x0039, 0x0001, 0x001f, + 0x0525, 0x0001, 0x0026, 0x13a4, 0x0008, 0x0030, 0x0095, 0x00ec, + 0x0121, 0x0162, 0x017c, 0x018d, 0x019e, 0x0002, 0x0033, 0x0064, + // Entry 44980 - 449BF + 0x0003, 0x0037, 0x0046, 0x0055, 0x000d, 0x005a, 0xffff, 0x0049, + 0x0050, 0x0056, 0x005b, 0x0060, 0x0065, 0x006c, 0x0071, 0x0077, + 0x007d, 0x0082, 0x0087, 0x000d, 0x0000, 0xffff, 0x2b3a, 0x2b4e, + 0x2b3c, 0x2b42, 0x2b3c, 0x2359, 0x2b4e, 0x2b42, 0x2b3a, 0x2b50, + 0x2b40, 0x2b3e, 0x000d, 0x005a, 0xffff, 0x008c, 0x0094, 0x0056, + 0x009b, 0x0060, 0x00a2, 0x00ac, 0x0071, 0x00b4, 0x00be, 0x00c6, + 0x00cf, 0x0003, 0x0068, 0x0077, 0x0086, 0x000d, 0x005a, 0xffff, + 0x0049, 0x0050, 0x0056, 0x005b, 0x0060, 0x0065, 0x006c, 0x0071, + // Entry 449C0 - 449FF + 0x0077, 0x007d, 0x0082, 0x0087, 0x000d, 0x0000, 0xffff, 0x2b3a, + 0x2b4e, 0x2b3c, 0x2b42, 0x2b3c, 0x2359, 0x2b4e, 0x2b42, 0x2b3a, + 0x2b50, 0x2b40, 0x2b3e, 0x000d, 0x005a, 0xffff, 0x008c, 0x0094, + 0x0056, 0x009b, 0x0060, 0x00a2, 0x00ac, 0x0071, 0x00b4, 0x00be, + 0x00c6, 0x00cf, 0x0002, 0x0098, 0x00c2, 0x0005, 0x009e, 0x00a7, + 0x00b9, 0x0000, 0x00b0, 0x0007, 0x0039, 0x04b9, 0x2023, 0x2027, + 0x202a, 0x202d, 0x2031, 0x2034, 0x0007, 0x0000, 0x2b3e, 0x2289, + 0x2b3c, 0x2b3c, 0x2289, 0x257f, 0x2b3a, 0x0007, 0x0039, 0x04b9, + // Entry 44A00 - 44A3F + 0x2023, 0x2027, 0x202a, 0x202d, 0x2031, 0x2034, 0x0007, 0x005a, + 0x00d8, 0x00e1, 0x00eb, 0x00f1, 0x00f9, 0x0101, 0x010a, 0x0005, + 0x00c8, 0x00d1, 0x00e3, 0x0000, 0x00da, 0x0007, 0x0039, 0x04b9, + 0x2023, 0x2027, 0x202a, 0x202d, 0x2031, 0x2034, 0x0007, 0x0000, + 0x2b3e, 0x2289, 0x2b3c, 0x2b3c, 0x2289, 0x257f, 0x2b3a, 0x0007, + 0x0039, 0x04b9, 0x2023, 0x2027, 0x202a, 0x202d, 0x2031, 0x2034, + 0x0007, 0x005a, 0x00d8, 0x00e1, 0x00eb, 0x00f1, 0x00f9, 0x0101, + 0x010a, 0x0002, 0x00ef, 0x0108, 0x0003, 0x00f3, 0x00fa, 0x0101, + // Entry 44A40 - 44A7F + 0x0005, 0x0000, 0xffff, 0x04e3, 0x39f2, 0x39f5, 0x39f8, 0x0005, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x005a, + 0xffff, 0x0110, 0x011b, 0x0126, 0x0131, 0x0003, 0x010c, 0x0113, + 0x011a, 0x0005, 0x0000, 0xffff, 0x04e3, 0x39f2, 0x39f5, 0x39f8, + 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, + 0x005a, 0xffff, 0x0110, 0x011b, 0x0126, 0x0131, 0x0002, 0x0124, + 0x0143, 0x0003, 0x0128, 0x0131, 0x013a, 0x0002, 0x012b, 0x012e, + 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0002, 0x0134, + // Entry 44A80 - 44ABF + 0x0137, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0002, + 0x013d, 0x0140, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, + 0x0003, 0x0147, 0x0150, 0x0159, 0x0002, 0x014a, 0x014d, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0002, 0x0153, 0x0156, + 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0002, 0x015c, + 0x015f, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0003, + 0x0171, 0x0000, 0x0166, 0x0002, 0x0169, 0x016d, 0x0002, 0x005a, + 0x013c, 0x014a, 0x0002, 0x0000, 0x04f5, 0x3c5a, 0x0002, 0x0174, + // Entry 44AC0 - 44AFF + 0x0178, 0x0002, 0x005a, 0x015a, 0x0162, 0x0002, 0x0000, 0x04f5, + 0x3c5a, 0x0004, 0x018a, 0x0184, 0x0181, 0x0187, 0x0001, 0x005a, + 0x0169, 0x0001, 0x005a, 0x0183, 0x0001, 0x0005, 0x062f, 0x0001, + 0x001f, 0x0579, 0x0004, 0x019b, 0x0195, 0x0192, 0x0198, 0x0001, + 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, + 0x0001, 0x0000, 0x0546, 0x0004, 0x01ac, 0x01a6, 0x01a3, 0x01a9, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0040, 0x01f0, 0x0000, 0x0000, + // Entry 44B00 - 44B3F + 0x01f5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01fa, 0x0000, + 0x0000, 0x01ff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0204, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0211, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0216, 0x0000, 0x021b, 0x0000, 0x0000, 0x0220, 0x0000, + 0x0000, 0x0225, 0x0000, 0x0000, 0x022a, 0x0001, 0x01f2, 0x0001, + // Entry 44B40 - 44B7F + 0x005a, 0x0191, 0x0001, 0x01f7, 0x0001, 0x005a, 0x0197, 0x0001, + 0x01fc, 0x0001, 0x005a, 0x019b, 0x0001, 0x0201, 0x0001, 0x005a, + 0x01a0, 0x0002, 0x0207, 0x020a, 0x0001, 0x0017, 0x0885, 0x0005, + 0x005a, 0x01ad, 0x01b1, 0x01b4, 0x01a5, 0x01bb, 0x0001, 0x0213, + 0x0001, 0x005a, 0x01c5, 0x0001, 0x0218, 0x0001, 0x005a, 0x01d4, + 0x0001, 0x021d, 0x0001, 0x005a, 0x01e3, 0x0001, 0x0222, 0x0001, + 0x000d, 0x0c85, 0x0001, 0x0227, 0x0001, 0x005a, 0x01e7, 0x0001, + 0x022c, 0x0001, 0x005a, 0x01ef, 0x0004, 0x0234, 0x0000, 0x0000, + // Entry 44B80 - 44BBF + 0x0000, 0x0002, 0x0000, 0x1dc7, 0x39fb, 0x0002, 0x0003, 0x00c9, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, + 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, + 0x0000, 0x0000, 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, + 0x0002, 0x0000, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, + 0x0001, 0x0000, 0x240c, 0x0008, 0x002f, 0x0053, 0x006b, 0x007f, + 0x0097, 0x00a7, 0x00b8, 0x0000, 0x0001, 0x0031, 0x0003, 0x0035, + 0x0000, 0x0044, 0x000d, 0x005a, 0xffff, 0x01fe, 0x0203, 0x0208, + // Entry 44BC0 - 44BFF + 0x020d, 0x0212, 0x0217, 0x021c, 0x0221, 0x0226, 0x022b, 0x0230, + 0x0235, 0x000d, 0x005a, 0xffff, 0x023a, 0x0240, 0x0249, 0x0253, + 0x025d, 0x0264, 0x026c, 0x0275, 0x0280, 0x0289, 0x0292, 0x029b, + 0x0001, 0x0055, 0x0003, 0x0059, 0x0000, 0x0062, 0x0007, 0x005a, + 0x02a4, 0x02a8, 0x02ad, 0x02b2, 0x02b7, 0x02bc, 0x02c1, 0x0007, + 0x005a, 0x02c6, 0x02d3, 0x02df, 0x02ec, 0x02f9, 0x0304, 0x0311, + 0x0001, 0x006d, 0x0003, 0x0071, 0x0000, 0x0078, 0x0005, 0x005a, + 0xffff, 0x0321, 0x0324, 0x0327, 0x032a, 0x0005, 0x005a, 0xffff, + // Entry 44C00 - 44C3F + 0x032d, 0x0347, 0x0362, 0x037d, 0x0001, 0x0081, 0x0003, 0x0085, + 0x0000, 0x008e, 0x0002, 0x0088, 0x008b, 0x0001, 0x005a, 0x0396, + 0x0001, 0x005a, 0x039c, 0x0002, 0x0091, 0x0094, 0x0001, 0x005a, + 0x0396, 0x0001, 0x005a, 0x039c, 0x0003, 0x00a1, 0x0000, 0x009b, + 0x0001, 0x009d, 0x0002, 0x005a, 0x03a2, 0x03b0, 0x0001, 0x00a3, + 0x0002, 0x005a, 0x03be, 0x03c4, 0x0004, 0x00b5, 0x00af, 0x00ac, + 0x00b2, 0x0001, 0x0002, 0x0025, 0x0001, 0x0002, 0x0033, 0x0001, + 0x0002, 0x003c, 0x0001, 0x0002, 0x028b, 0x0004, 0x00c6, 0x00c0, + // Entry 44C40 - 44C7F + 0x00bd, 0x00c3, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, + 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0040, 0x010a, + 0x0000, 0x0000, 0x010f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0114, 0x0000, 0x0000, 0x0119, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x011e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0129, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 44C80 - 44CBF + 0x0000, 0x0000, 0x0000, 0x012e, 0x0000, 0x0133, 0x0000, 0x0000, + 0x0138, 0x0000, 0x0000, 0x013d, 0x0000, 0x0000, 0x0142, 0x0001, + 0x010c, 0x0001, 0x005a, 0x03c9, 0x0001, 0x0111, 0x0001, 0x0009, + 0x0085, 0x0001, 0x0116, 0x0001, 0x005a, 0x03cf, 0x0001, 0x011b, + 0x0001, 0x005a, 0x03d6, 0x0002, 0x0121, 0x0124, 0x0001, 0x005a, + 0x03e4, 0x0003, 0x005a, 0x03ea, 0x03f7, 0x0400, 0x0001, 0x012b, + 0x0001, 0x005a, 0x040d, 0x0001, 0x0130, 0x0001, 0x005a, 0x041f, + 0x0001, 0x0135, 0x0001, 0x005a, 0x0427, 0x0001, 0x013a, 0x0001, + // Entry 44CC0 - 44CFF + 0x005a, 0x042d, 0x0001, 0x013f, 0x0001, 0x005a, 0x0435, 0x0001, + 0x0144, 0x0001, 0x005a, 0x043e, 0x0003, 0x0004, 0x05ee, 0x0b39, + 0x0012, 0x0017, 0x0030, 0x0078, 0x0000, 0x00ff, 0x0000, 0x0186, + 0x01b1, 0x03d4, 0x0458, 0x04d6, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0554, 0x05d2, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, + 0x001d, 0x0003, 0x0026, 0x002b, 0x0021, 0x0001, 0x0023, 0x0001, + 0x005a, 0x0450, 0x0001, 0x0028, 0x0001, 0x0056, 0x00fc, 0x0001, + 0x002d, 0x0001, 0x0056, 0x00fc, 0x0001, 0x0032, 0x0002, 0x0035, + // Entry 44D00 - 44D3F + 0x0056, 0x0002, 0x0038, 0x0047, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, + 0x3a09, 0x3a0c, 0x0003, 0x005a, 0x0000, 0x0069, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + // Entry 44D40 - 44D7F + 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0005, 0x007e, 0x0000, 0x0000, + 0x0000, 0x00e9, 0x0002, 0x0081, 0x00b5, 0x0003, 0x0085, 0x0095, + 0x00a5, 0x000e, 0x0017, 0xffff, 0x02a3, 0x02a9, 0x02af, 0x2ec9, + 0x02bc, 0x2ecf, 0x02c9, 0x02d2, 0x2ed6, 0x02e5, 0x2ede, 0x02f0, + 0x2ee3, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, + 0x0422, 0x000e, 0x0017, 0xffff, 0x02a3, 0x02a9, 0x02af, 0x2ec9, + 0x02bc, 0x2ecf, 0x02c9, 0x02d2, 0x2ed6, 0x02e5, 0x2ede, 0x02f0, + // Entry 44D80 - 44DBF + 0x2ee3, 0x0003, 0x00b9, 0x00c9, 0x00d9, 0x000e, 0x0017, 0xffff, + 0x02a3, 0x02a9, 0x02af, 0x2ec9, 0x02bc, 0x2ecf, 0x02c9, 0x02d2, + 0x2ed6, 0x02e5, 0x2ede, 0x02f0, 0x2ee3, 0x000e, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x0017, 0xffff, + 0x02a3, 0x02a9, 0x02af, 0x2ec9, 0x02bc, 0x2ecf, 0x02c9, 0x02d2, + 0x2ed6, 0x02e5, 0x2ede, 0x02f0, 0x2ee3, 0x0003, 0x00f3, 0x00f9, + 0x00ed, 0x0001, 0x00ef, 0x0002, 0x005a, 0x045d, 0x0477, 0x0001, + // Entry 44DC0 - 44DFF + 0x00f5, 0x0002, 0x005a, 0x048b, 0x0493, 0x0001, 0x00fb, 0x0002, + 0x005a, 0x048b, 0x0493, 0x0005, 0x0105, 0x0000, 0x0000, 0x0000, + 0x0170, 0x0002, 0x0108, 0x013c, 0x0003, 0x010c, 0x011c, 0x012c, + 0x000e, 0x0014, 0xffff, 0x04f6, 0x36a4, 0x360d, 0x3451, 0x36ab, + 0x0519, 0x0521, 0x345c, 0x3463, 0x0537, 0x053c, 0x0542, 0x3472, + 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, + 0x000e, 0x0014, 0xffff, 0x04f6, 0x36a4, 0x360d, 0x3451, 0x36ab, + // Entry 44E00 - 44E3F + 0x0519, 0x0521, 0x345c, 0x3463, 0x0537, 0x053c, 0x0542, 0x3472, + 0x0003, 0x0140, 0x0150, 0x0160, 0x000e, 0x0014, 0xffff, 0x04f6, + 0x36a4, 0x360d, 0x3451, 0x36ab, 0x0519, 0x0521, 0x345c, 0x3463, + 0x0537, 0x053c, 0x0542, 0x3472, 0x000e, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x0014, 0xffff, 0x04f6, + 0x36a4, 0x360d, 0x3451, 0x36ab, 0x0519, 0x0521, 0x345c, 0x3463, + 0x0537, 0x053c, 0x0542, 0x3472, 0x0003, 0x017a, 0x0180, 0x0174, + // Entry 44E40 - 44E7F + 0x0001, 0x0176, 0x0002, 0x005a, 0x0498, 0x04af, 0x0001, 0x017c, + 0x0002, 0x005a, 0x04c0, 0x04ca, 0x0001, 0x0182, 0x0002, 0x005a, + 0x04c0, 0x04ca, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x018f, 0x0000, 0x01a0, 0x0004, 0x019d, 0x0197, 0x0194, 0x019a, + 0x0001, 0x0006, 0x000d, 0x0001, 0x0002, 0x0010, 0x0001, 0x0017, + 0x0372, 0x0001, 0x001f, 0x0b31, 0x0004, 0x01ae, 0x01a8, 0x01a5, + 0x01ab, 0x0001, 0x005a, 0x04d3, 0x0001, 0x005a, 0x04d3, 0x0001, + 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, 0x01ba, 0x021f, + // Entry 44E80 - 44EBF + 0x0276, 0x02ab, 0x037c, 0x03a1, 0x03b2, 0x03c3, 0x0002, 0x01bd, + 0x01ee, 0x0003, 0x01c1, 0x01d0, 0x01df, 0x000d, 0x005a, 0xffff, + 0x04e0, 0x04e5, 0x04ea, 0x04ef, 0x04f4, 0x04f8, 0x04fd, 0x0502, + 0x0507, 0x007d, 0x0082, 0x0087, 0x000d, 0x0000, 0xffff, 0x204d, + 0x2b4e, 0x2b3c, 0x2b42, 0x2b3c, 0x204d, 0x204d, 0x2b42, 0x2b3a, + 0x2b50, 0x2b40, 0x2b3e, 0x000d, 0x005a, 0xffff, 0x050d, 0x0516, + 0x0520, 0x0527, 0x04f4, 0x052f, 0x0535, 0x053b, 0x0542, 0x054d, + 0x0557, 0x0561, 0x0003, 0x01f2, 0x0201, 0x0210, 0x000d, 0x005a, + // Entry 44EC0 - 44EFF + 0xffff, 0x04e0, 0x04e5, 0x04ea, 0x04ef, 0x04f4, 0x04f8, 0x04fd, + 0x0502, 0x0507, 0x007d, 0x0082, 0x0087, 0x000d, 0x0000, 0xffff, + 0x204d, 0x2b4e, 0x2b3c, 0x2b42, 0x2b3c, 0x204d, 0x204d, 0x2b42, + 0x2b3a, 0x2b50, 0x2b40, 0x2b3e, 0x000d, 0x005a, 0xffff, 0x050d, + 0x0516, 0x0520, 0x0527, 0x04f4, 0x052f, 0x0535, 0x053b, 0x0542, + 0x054d, 0x0557, 0x0561, 0x0002, 0x0222, 0x024c, 0x0005, 0x0228, + 0x0231, 0x0243, 0x0000, 0x023a, 0x0007, 0x005a, 0x056b, 0x0570, + 0x04ea, 0x0575, 0x057a, 0x057e, 0x0583, 0x0007, 0x0000, 0x2b3e, + // Entry 44F00 - 44F3F + 0x2296, 0x2b3c, 0x2b3c, 0x257b, 0x257f, 0x2b3a, 0x0007, 0x0031, + 0x0220, 0x26b7, 0x26bb, 0x26bf, 0x26c3, 0x26c7, 0x26cb, 0x0007, + 0x005a, 0x0589, 0x0593, 0x0598, 0x059f, 0x05a8, 0x05ac, 0x05b3, + 0x0005, 0x0252, 0x025b, 0x026d, 0x0000, 0x0264, 0x0007, 0x005a, + 0x056b, 0x0570, 0x04ea, 0x0575, 0x05a8, 0x057e, 0x0583, 0x0007, + 0x0000, 0x2b3e, 0x2296, 0x2b3c, 0x2b3c, 0x257b, 0x257f, 0x2b3a, + 0x0007, 0x0031, 0x0220, 0x26b7, 0x26bb, 0x26bf, 0x26d0, 0x26c7, + 0x26cb, 0x0007, 0x005a, 0x0589, 0x0593, 0x0598, 0x059f, 0x05be, + // Entry 44F40 - 44F7F + 0x05ac, 0x05b3, 0x0002, 0x0279, 0x0292, 0x0003, 0x027d, 0x0284, + 0x028b, 0x0005, 0x005a, 0xffff, 0x05c2, 0x05ca, 0x05d3, 0x05dd, + 0x0005, 0x0000, 0xffff, 0x204d, 0x2b44, 0x2b47, 0x2b4b, 0x0005, + 0x005a, 0xffff, 0x05e6, 0x05f3, 0x0608, 0x061e, 0x0003, 0x0296, + 0x029d, 0x02a4, 0x0005, 0x005a, 0xffff, 0x05c2, 0x05ca, 0x05d3, + 0x05dd, 0x0005, 0x0000, 0xffff, 0x204d, 0x2b44, 0x2b47, 0x2b4b, + 0x0005, 0x005a, 0xffff, 0x05e6, 0x05f3, 0x0608, 0x061e, 0x0002, + 0x02ae, 0x0315, 0x0003, 0x02b2, 0x02d3, 0x02f4, 0x0008, 0x02be, + // Entry 44F80 - 44FBF + 0x02c4, 0x02bb, 0x02c7, 0x02ca, 0x02cd, 0x02d0, 0x02c1, 0x0001, + 0x005a, 0x0633, 0x0001, 0x001d, 0x050b, 0x0001, 0x005a, 0x0642, + 0x0001, 0x001d, 0x0510, 0x0001, 0x005a, 0x064a, 0x0001, 0x005a, + 0x0655, 0x0001, 0x005a, 0x0662, 0x0001, 0x005a, 0x0668, 0x0008, + 0x02df, 0x02e5, 0x02dc, 0x02e8, 0x02eb, 0x02ee, 0x02f1, 0x02e2, + 0x0001, 0x005a, 0x0633, 0x0001, 0x001d, 0x050b, 0x0001, 0x005a, + 0x0670, 0x0001, 0x001d, 0x0510, 0x0001, 0x005a, 0x064a, 0x0001, + 0x005a, 0x0655, 0x0001, 0x005a, 0x0662, 0x0001, 0x005a, 0x0668, + // Entry 44FC0 - 44FFF + 0x0008, 0x0300, 0x0306, 0x02fd, 0x0309, 0x030c, 0x030f, 0x0312, + 0x0303, 0x0001, 0x005a, 0x067b, 0x0001, 0x001d, 0x050b, 0x0001, + 0x005a, 0x0670, 0x0001, 0x001d, 0x0510, 0x0001, 0x005a, 0x064a, + 0x0001, 0x005a, 0x0655, 0x0001, 0x005a, 0x0662, 0x0001, 0x005a, + 0x0668, 0x0003, 0x0319, 0x033a, 0x035b, 0x0008, 0x0325, 0x032b, + 0x0322, 0x032e, 0x0331, 0x0334, 0x0337, 0x0328, 0x0001, 0x005a, + 0x0633, 0x0001, 0x001d, 0x050b, 0x0001, 0x005a, 0x0642, 0x0001, + 0x001d, 0x0510, 0x0001, 0x005a, 0x064a, 0x0001, 0x005a, 0x0655, + // Entry 45000 - 4503F + 0x0001, 0x005a, 0x0662, 0x0001, 0x005a, 0x0668, 0x0008, 0x0346, + 0x034c, 0x0343, 0x034f, 0x0352, 0x0355, 0x0358, 0x0349, 0x0001, + 0x005a, 0x0633, 0x0001, 0x001d, 0x050b, 0x0001, 0x005a, 0x0642, + 0x0001, 0x001d, 0x0510, 0x0001, 0x005a, 0x064a, 0x0001, 0x005a, + 0x0655, 0x0001, 0x005a, 0x0662, 0x0001, 0x005a, 0x0668, 0x0008, + 0x0367, 0x036d, 0x0364, 0x0370, 0x0373, 0x0376, 0x0379, 0x036a, + 0x0001, 0x005a, 0x067b, 0x0001, 0x001d, 0x050b, 0x0001, 0x005a, + 0x0670, 0x0001, 0x001d, 0x0510, 0x0001, 0x005a, 0x064a, 0x0001, + // Entry 45040 - 4507F + 0x005a, 0x0655, 0x0001, 0x005a, 0x0662, 0x0001, 0x005a, 0x0668, + 0x0003, 0x038b, 0x0396, 0x0380, 0x0002, 0x0383, 0x0387, 0x0002, + 0x005a, 0x068d, 0x06b8, 0x0002, 0x005a, 0x06a1, 0x06c6, 0x0002, + 0x038e, 0x0392, 0x0002, 0x005a, 0x06d3, 0x06e1, 0x0002, 0x005a, + 0x06da, 0x06e7, 0x0002, 0x0399, 0x039d, 0x0002, 0x005a, 0x06d3, + 0x06e1, 0x0002, 0x005a, 0x06da, 0x06e7, 0x0004, 0x03af, 0x03a9, + 0x03a6, 0x03ac, 0x0001, 0x0006, 0x015b, 0x0001, 0x0002, 0x0033, + 0x0001, 0x0002, 0x003c, 0x0001, 0x0017, 0x0538, 0x0004, 0x03c0, + // Entry 45080 - 450BF + 0x03ba, 0x03b7, 0x03bd, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, + 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, + 0x03d1, 0x03cb, 0x03c8, 0x03ce, 0x0001, 0x0006, 0x022e, 0x0001, + 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, + 0x0005, 0x03da, 0x0000, 0x0000, 0x0000, 0x0445, 0x0002, 0x03dd, + 0x0411, 0x0003, 0x03e1, 0x03f1, 0x0401, 0x000e, 0x005a, 0x071c, + 0x06ec, 0x06f4, 0x06fc, 0x0703, 0x0709, 0x0710, 0x0717, 0x0724, + 0x072a, 0x072f, 0x0735, 0x073c, 0x073f, 0x000e, 0x0000, 0x003f, + // Entry 450C0 - 450FF + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x005a, 0x071c, + 0x06ec, 0x06f4, 0x06fc, 0x0703, 0x0709, 0x0710, 0x0717, 0x0724, + 0x072a, 0x072f, 0x0735, 0x073c, 0x073f, 0x0003, 0x0415, 0x0425, + 0x0435, 0x000e, 0x005a, 0x071c, 0x06ec, 0x06f4, 0x06fc, 0x0703, + 0x0709, 0x0710, 0x0717, 0x0724, 0x072a, 0x072f, 0x0735, 0x073c, + 0x073f, 0x000e, 0x0000, 0x003f, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, + // Entry 45100 - 4513F + 0x0422, 0x000e, 0x005a, 0x071c, 0x06ec, 0x06f4, 0x06fc, 0x0703, + 0x0709, 0x0710, 0x0717, 0x0724, 0x072a, 0x072f, 0x0735, 0x073c, + 0x073f, 0x0003, 0x044e, 0x0453, 0x0449, 0x0001, 0x044b, 0x0001, + 0x005a, 0x0493, 0x0001, 0x0450, 0x0001, 0x005a, 0x0493, 0x0001, + 0x0455, 0x0001, 0x0000, 0x04ef, 0x0005, 0x045e, 0x0000, 0x0000, + 0x0000, 0x04c3, 0x0002, 0x0461, 0x0492, 0x0003, 0x0465, 0x0474, + 0x0483, 0x000d, 0x0000, 0xffff, 0x05a2, 0x05aa, 0x3c5d, 0x25a6, + 0x25b0, 0x3c65, 0x3c70, 0x3c77, 0x3c7e, 0x2300, 0x3c8b, 0x3c20, + // Entry 45140 - 4517F + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, + 0x0000, 0xffff, 0x05a2, 0x05aa, 0x3c5d, 0x25a6, 0x25b0, 0x3c65, + 0x3c70, 0x3c77, 0x3c7e, 0x2300, 0x3c8b, 0x3c20, 0x0003, 0x0496, + 0x04a5, 0x04b4, 0x000d, 0x0000, 0xffff, 0x05a2, 0x05aa, 0x3c5d, + 0x25a6, 0x25b0, 0x3c65, 0x3c70, 0x3c77, 0x3c7e, 0x2300, 0x3c8b, + 0x3c20, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, + // Entry 45180 - 451BF + 0x000d, 0x0000, 0xffff, 0x05a2, 0x05aa, 0x3c5d, 0x25a6, 0x25b0, + 0x3c65, 0x3c70, 0x3c77, 0x3c7e, 0x2300, 0x3c8b, 0x3c20, 0x0003, + 0x04cc, 0x04d1, 0x04c7, 0x0001, 0x04c9, 0x0001, 0x0000, 0x0601, + 0x0001, 0x04ce, 0x0001, 0x0000, 0x0601, 0x0001, 0x04d3, 0x0001, + 0x0000, 0x0601, 0x0005, 0x04dc, 0x0000, 0x0000, 0x0000, 0x0541, + 0x0002, 0x04df, 0x0510, 0x0003, 0x04e3, 0x04f2, 0x0501, 0x000d, + 0x0000, 0xffff, 0x0606, 0x3b37, 0x3b3c, 0x3b43, 0x061f, 0x0626, + 0x3c29, 0x0633, 0x3b65, 0x063d, 0x0643, 0x3c2e, 0x000d, 0x0000, + // Entry 451C0 - 451FF + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0000, 0xffff, + 0x0657, 0x3b82, 0x0666, 0x066f, 0x0679, 0x0682, 0x3c38, 0x0692, + 0x3bae, 0x06a3, 0x06ab, 0x06ba, 0x0003, 0x0514, 0x0523, 0x0532, + 0x000d, 0x0000, 0xffff, 0x0606, 0x3b37, 0x3b3c, 0x3b43, 0x061f, + 0x0626, 0x3c29, 0x0633, 0x3b65, 0x063d, 0x0643, 0x3c2e, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0000, + // Entry 45200 - 4523F + 0xffff, 0x0657, 0x3b82, 0x0666, 0x066f, 0x0679, 0x0682, 0x3c38, + 0x0692, 0x3bae, 0x06a3, 0x06ab, 0x06ba, 0x0003, 0x054a, 0x054f, + 0x0545, 0x0001, 0x0547, 0x0001, 0x005a, 0x0744, 0x0001, 0x054c, + 0x0001, 0x0000, 0x06c8, 0x0001, 0x0551, 0x0001, 0x0000, 0x06c8, + 0x0005, 0x055a, 0x0000, 0x0000, 0x0000, 0x05bf, 0x0002, 0x055d, + 0x058e, 0x0003, 0x0561, 0x0570, 0x057f, 0x000d, 0x0000, 0xffff, + 0x19c9, 0x19d3, 0x19df, 0x3c3e, 0x3c90, 0x19f2, 0x3c42, 0x1a01, + 0x1a06, 0x2575, 0x3c47, 0x3c4e, 0x000d, 0x0000, 0xffff, 0x0033, + // Entry 45240 - 4527F + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0000, 0xffff, 0x19c9, 0x19d3, + 0x19df, 0x3c3e, 0x3c90, 0x19f2, 0x3c42, 0x1a01, 0x1a06, 0x2575, + 0x3c47, 0x3c4e, 0x0003, 0x0592, 0x05a1, 0x05b0, 0x000d, 0x0000, + 0xffff, 0x19c9, 0x19d3, 0x19df, 0x3c3e, 0x3c90, 0x19f2, 0x3c42, + 0x1a01, 0x1a06, 0x2575, 0x3c47, 0x3c4e, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0000, 0xffff, 0x19c9, + // Entry 45280 - 452BF + 0x19d3, 0x19df, 0x3c3e, 0x3c90, 0x19f2, 0x3c42, 0x1a01, 0x1a06, + 0x2575, 0x3c47, 0x3c4e, 0x0003, 0x05c8, 0x05cd, 0x05c3, 0x0001, + 0x05c5, 0x0001, 0x0022, 0x0de0, 0x0001, 0x05ca, 0x0001, 0x005a, + 0x0749, 0x0001, 0x05cf, 0x0001, 0x005a, 0x0749, 0x0005, 0x0000, + 0x0000, 0x0000, 0x0000, 0x05d8, 0x0003, 0x05e2, 0x05e8, 0x05dc, + 0x0001, 0x05de, 0x0002, 0x005a, 0x074e, 0x076a, 0x0001, 0x05e4, + 0x0002, 0x005a, 0x077a, 0x0782, 0x0001, 0x05ea, 0x0002, 0x005a, + 0x077a, 0x0782, 0x0042, 0x0631, 0x0636, 0x063b, 0x0640, 0x065d, + // Entry 452C0 - 452FF + 0x0675, 0x068d, 0x06aa, 0x06c7, 0x06e4, 0x0701, 0x0719, 0x0731, + 0x0752, 0x076e, 0x078a, 0x078f, 0x0794, 0x0799, 0x07b8, 0x07d0, + 0x07e8, 0x07ed, 0x07f2, 0x07f7, 0x07fc, 0x0801, 0x0806, 0x080b, + 0x0810, 0x0815, 0x082f, 0x0849, 0x0863, 0x087d, 0x0897, 0x08b1, + 0x08cb, 0x08e5, 0x08ff, 0x0919, 0x0933, 0x094d, 0x0967, 0x0981, + 0x099b, 0x09b5, 0x09cf, 0x09e9, 0x0a03, 0x0a1d, 0x0a37, 0x0a3c, + 0x0a41, 0x0a46, 0x0a62, 0x0a7a, 0x0a92, 0x0aae, 0x0ac6, 0x0ade, + 0x0afa, 0x0b12, 0x0b2a, 0x0b2f, 0x0b34, 0x0001, 0x0633, 0x0001, + // Entry 45300 - 4533F + 0x005a, 0x0787, 0x0001, 0x0638, 0x0001, 0x005a, 0x0787, 0x0001, + 0x063d, 0x0001, 0x005a, 0x0787, 0x0003, 0x0644, 0x0647, 0x064c, + 0x0001, 0x0045, 0x054a, 0x0003, 0x005a, 0x078c, 0x0798, 0x07a4, + 0x0002, 0x064f, 0x0656, 0x0005, 0x005a, 0x07cb, 0x07b0, 0xffff, + 0xffff, 0x07bd, 0x0005, 0x005a, 0x07f5, 0x07dc, 0xffff, 0xffff, + 0x07e8, 0x0003, 0x0661, 0x0000, 0x0664, 0x0001, 0x0045, 0x054a, + 0x0002, 0x0667, 0x066e, 0x0005, 0x005a, 0x07cb, 0x07b0, 0xffff, + 0xffff, 0x07bd, 0x0005, 0x005a, 0x07f5, 0x07dc, 0xffff, 0xffff, + // Entry 45340 - 4537F + 0x07e8, 0x0003, 0x0679, 0x0000, 0x067c, 0x0001, 0x0045, 0x054a, + 0x0002, 0x067f, 0x0686, 0x0005, 0x005a, 0x080d, 0x0805, 0xffff, + 0xffff, 0x080d, 0x0005, 0x005a, 0x081e, 0x0816, 0xffff, 0xffff, + 0x081e, 0x0003, 0x0691, 0x0694, 0x0699, 0x0001, 0x005a, 0x0827, + 0x0003, 0x005a, 0x0831, 0x0843, 0x0855, 0x0002, 0x069c, 0x06a3, + 0x0005, 0x005a, 0x088f, 0x0867, 0xffff, 0xffff, 0x087b, 0x0005, + 0x005a, 0x08cc, 0x08a6, 0xffff, 0xffff, 0x08b9, 0x0003, 0x06ae, + 0x06b1, 0x06b6, 0x0001, 0x000b, 0x0c78, 0x0003, 0x005a, 0x08e2, + // Entry 45380 - 453BF + 0x08ef, 0x08fc, 0x0002, 0x06b9, 0x06c0, 0x0005, 0x005a, 0x0909, + 0x0909, 0xffff, 0xffff, 0x0909, 0x0005, 0x005a, 0x0919, 0x0919, + 0xffff, 0xffff, 0x0919, 0x0003, 0x06cb, 0x06ce, 0x06d3, 0x0001, + 0x000b, 0x0c78, 0x0003, 0x005a, 0x08e2, 0x08ef, 0x08fc, 0x0002, + 0x06d6, 0x06dd, 0x0005, 0x000b, 0x0c9c, 0x0c9c, 0xffff, 0xffff, + 0x0c9c, 0x0005, 0x000b, 0x0ca7, 0x0ca7, 0xffff, 0xffff, 0x0ca7, + 0x0003, 0x06e8, 0x06eb, 0x06f0, 0x0001, 0x005a, 0x0928, 0x0003, + 0x005a, 0x092e, 0x093c, 0x0949, 0x0002, 0x06f3, 0x06fa, 0x0005, + // Entry 453C0 - 453FF + 0x005a, 0x0976, 0x0957, 0xffff, 0xffff, 0x0967, 0x0005, 0x005a, + 0x09a5, 0x0988, 0xffff, 0xffff, 0x0997, 0x0003, 0x0705, 0x0000, + 0x0708, 0x0001, 0x005a, 0x0928, 0x0002, 0x070b, 0x0712, 0x0005, + 0x005a, 0x0967, 0x0957, 0xffff, 0xffff, 0x0967, 0x0005, 0x005a, + 0x0997, 0x0988, 0xffff, 0xffff, 0x0997, 0x0003, 0x071d, 0x0000, + 0x0720, 0x0001, 0x005a, 0x0928, 0x0002, 0x0723, 0x072a, 0x0005, + 0x005a, 0x09c1, 0x09b6, 0xffff, 0xffff, 0x09c1, 0x0005, 0x005a, + 0x09d6, 0x09cb, 0xffff, 0xffff, 0x09d6, 0x0004, 0x0736, 0x0739, + // Entry 45400 - 4543F + 0x073e, 0x074f, 0x0001, 0x005a, 0x09e0, 0x0003, 0x005a, 0x09ee, + 0x0a04, 0x0a19, 0x0002, 0x0741, 0x0748, 0x0005, 0x005a, 0x0a5e, + 0x0a2f, 0xffff, 0xffff, 0x0a47, 0x0005, 0x005a, 0x0aa5, 0x0a78, + 0xffff, 0xffff, 0x0a8f, 0x0001, 0x005a, 0x0abe, 0x0004, 0x0757, + 0x0000, 0x075a, 0x076b, 0x0001, 0x005a, 0x0ad2, 0x0002, 0x075d, + 0x0764, 0x0005, 0x005a, 0x0ad9, 0x0ad9, 0xffff, 0xffff, 0x0ad9, + 0x0005, 0x005a, 0x0aea, 0x0aea, 0xffff, 0xffff, 0x0aea, 0x0001, + 0x005a, 0x0afa, 0x0004, 0x0773, 0x0000, 0x0776, 0x0787, 0x0001, + // Entry 45440 - 4547F + 0x005a, 0x0ad2, 0x0002, 0x0779, 0x0780, 0x0005, 0x005a, 0x0b08, + 0x0b08, 0xffff, 0xffff, 0x0b08, 0x0005, 0x005a, 0x0b14, 0x0b14, + 0xffff, 0xffff, 0x0b14, 0x0001, 0x005a, 0x0afa, 0x0001, 0x078c, + 0x0001, 0x005a, 0x0b20, 0x0001, 0x0791, 0x0001, 0x005a, 0x0b37, + 0x0001, 0x0796, 0x0001, 0x005a, 0x0b37, 0x0003, 0x079d, 0x07a0, + 0x07a7, 0x0001, 0x0000, 0x005a, 0x0005, 0x005a, 0x0b54, 0x0b59, + 0x0b5d, 0x0b48, 0x0b64, 0x0002, 0x07aa, 0x07b1, 0x0005, 0x005a, + 0x0b8a, 0x0b6e, 0xffff, 0xffff, 0x0b7b, 0x0005, 0x005a, 0x0bb6, + // Entry 45480 - 454BF + 0x0b9c, 0xffff, 0xffff, 0x0ba8, 0x0003, 0x07bc, 0x0000, 0x07bf, + 0x0001, 0x0000, 0x005a, 0x0002, 0x07c2, 0x07c9, 0x0005, 0x005a, + 0x0b8a, 0x0b6e, 0xffff, 0xffff, 0x0b7b, 0x0005, 0x005a, 0x0bb6, + 0x0b9c, 0xffff, 0xffff, 0x0ba8, 0x0003, 0x07d4, 0x0000, 0x07d7, + 0x0001, 0x0000, 0x005a, 0x0002, 0x07da, 0x07e1, 0x0005, 0x005a, + 0x0bcf, 0x0bc7, 0xffff, 0xffff, 0x0bcf, 0x0005, 0x005a, 0x0be1, + 0x0bd9, 0xffff, 0xffff, 0x0be1, 0x0001, 0x07ea, 0x0001, 0x005a, + 0x0beb, 0x0001, 0x07ef, 0x0001, 0x005a, 0x0beb, 0x0001, 0x07f4, + // Entry 454C0 - 454FF + 0x0001, 0x005a, 0x0beb, 0x0001, 0x07f9, 0x0001, 0x005a, 0x0bf7, + 0x0001, 0x07fe, 0x0001, 0x005a, 0x0c0e, 0x0001, 0x0803, 0x0001, + 0x005a, 0x0c0e, 0x0001, 0x0808, 0x0001, 0x005a, 0x0c1e, 0x0001, + 0x080d, 0x0001, 0x005a, 0x0c3b, 0x0001, 0x0812, 0x0001, 0x005a, + 0x0c3b, 0x0003, 0x0000, 0x0819, 0x081e, 0x0003, 0x005a, 0x0c51, + 0x0c63, 0x0c74, 0x0002, 0x0821, 0x0828, 0x0005, 0x005a, 0x0ccb, + 0x0c86, 0xffff, 0xffff, 0x0ca9, 0x0005, 0x005a, 0x0d33, 0x0cf0, + 0xffff, 0xffff, 0x0d12, 0x0003, 0x0000, 0x0833, 0x0838, 0x0003, + // Entry 45500 - 4553F + 0x005a, 0x0d57, 0x0d65, 0x0d72, 0x0002, 0x083b, 0x0842, 0x0005, + 0x005a, 0x0d80, 0x0d80, 0xffff, 0xffff, 0x0d80, 0x0005, 0x005a, + 0x0d9c, 0x0d9c, 0xffff, 0xffff, 0x0d9c, 0x0003, 0x0000, 0x084d, + 0x0852, 0x0003, 0x005a, 0x0db7, 0x0dc4, 0x0dd0, 0x0002, 0x0855, + 0x085c, 0x0005, 0x005a, 0x0ddd, 0x0ddd, 0xffff, 0xffff, 0x0ddd, + 0x0005, 0x005a, 0x0ded, 0x0ded, 0xffff, 0xffff, 0x0ded, 0x0003, + 0x0000, 0x0867, 0x086c, 0x0003, 0x005a, 0x0dfd, 0x0e0c, 0x0e1a, + 0x0002, 0x086f, 0x0876, 0x0005, 0x005a, 0x0e64, 0x0e29, 0xffff, + // Entry 45540 - 4557F + 0xffff, 0x0e47, 0x0005, 0x005a, 0x0ebd, 0x0e84, 0xffff, 0xffff, + 0x0ea1, 0x0003, 0x0000, 0x0881, 0x0886, 0x0003, 0x005a, 0x0edc, + 0x0eea, 0x0ef7, 0x0002, 0x0889, 0x0890, 0x0005, 0x005a, 0x0f05, + 0x0f05, 0xffff, 0xffff, 0x0f05, 0x0005, 0x005a, 0x0f1c, 0x0f1c, + 0xffff, 0xffff, 0x0f1c, 0x0003, 0x0000, 0x089b, 0x08a0, 0x0003, + 0x005a, 0x0f32, 0x0f3f, 0x0f4b, 0x0002, 0x08a3, 0x08aa, 0x0005, + 0x005a, 0x0f58, 0x0f58, 0xffff, 0xffff, 0x0f58, 0x0005, 0x005a, + 0x0f68, 0x0f68, 0xffff, 0xffff, 0x0f68, 0x0003, 0x0000, 0x08b5, + // Entry 45580 - 455BF + 0x08ba, 0x0003, 0x005a, 0x0f78, 0x0f89, 0x0f99, 0x0002, 0x08bd, + 0x08c4, 0x0005, 0x005a, 0x0fe9, 0x0faa, 0xffff, 0xffff, 0x0fca, + 0x0005, 0x005a, 0x1048, 0x100b, 0xffff, 0xffff, 0x102a, 0x0003, + 0x0000, 0x08cf, 0x08d4, 0x0003, 0x005a, 0x1069, 0x1077, 0x1084, + 0x0002, 0x08d7, 0x08de, 0x0005, 0x005a, 0x1092, 0x1092, 0xffff, + 0xffff, 0x1092, 0x0005, 0x005a, 0x10ab, 0x10ab, 0xffff, 0xffff, + 0x10ab, 0x0003, 0x0000, 0x08e9, 0x08ee, 0x0003, 0x005a, 0x10c3, + 0x10d0, 0x10dc, 0x0002, 0x08f1, 0x08f8, 0x0005, 0x005a, 0x10e9, + // Entry 455C0 - 455FF + 0x10e9, 0xffff, 0xffff, 0x10e9, 0x0005, 0x005a, 0x10f9, 0x10f9, + 0xffff, 0xffff, 0x10f9, 0x0003, 0x0000, 0x0903, 0x0908, 0x0003, + 0x005a, 0x1109, 0x111c, 0x112e, 0x0002, 0x090b, 0x0912, 0x0005, + 0x005a, 0x1184, 0x1141, 0xffff, 0xffff, 0x1163, 0x0005, 0x005a, + 0x11e9, 0x11a8, 0xffff, 0xffff, 0x11c9, 0x0003, 0x0000, 0x091d, + 0x0922, 0x0003, 0x005a, 0x120c, 0x121a, 0x1227, 0x0002, 0x0925, + 0x092c, 0x0005, 0x005a, 0x1235, 0x1235, 0xffff, 0xffff, 0x1235, + 0x0005, 0x005a, 0x1250, 0x1250, 0xffff, 0xffff, 0x1250, 0x0003, + // Entry 45600 - 4563F + 0x0000, 0x0937, 0x093c, 0x0003, 0x005a, 0x126a, 0x1277, 0x1283, + 0x0002, 0x093f, 0x0946, 0x0005, 0x005a, 0x1290, 0x1290, 0xffff, + 0xffff, 0x1290, 0x0005, 0x005a, 0x12a0, 0x12a0, 0xffff, 0xffff, + 0x12a0, 0x0003, 0x0000, 0x0951, 0x0956, 0x0003, 0x005a, 0x12b0, + 0x12be, 0x12cb, 0x0002, 0x0959, 0x0960, 0x0005, 0x005a, 0x1312, + 0x12d9, 0xffff, 0xffff, 0x12f6, 0x0005, 0x005a, 0x1368, 0x1331, + 0xffff, 0xffff, 0x134d, 0x0003, 0x0000, 0x096b, 0x0970, 0x0003, + 0x005a, 0x12b0, 0x12be, 0x12cb, 0x0002, 0x0973, 0x097a, 0x0005, + // Entry 45640 - 4567F + 0x005a, 0x1386, 0x1386, 0xffff, 0xffff, 0x1386, 0x0005, 0x005a, + 0x139c, 0x139c, 0xffff, 0xffff, 0x139c, 0x0003, 0x0000, 0x0985, + 0x098a, 0x0003, 0x005a, 0x13b1, 0x13be, 0x13ca, 0x0002, 0x098d, + 0x0994, 0x0005, 0x005a, 0x13d7, 0x13d7, 0xffff, 0xffff, 0x13d7, + 0x0005, 0x005a, 0x13e7, 0x13e7, 0xffff, 0xffff, 0x13e7, 0x0003, + 0x0000, 0x099f, 0x09a4, 0x0003, 0x005a, 0x13f7, 0x1408, 0x1418, + 0x0002, 0x09a7, 0x09ae, 0x0005, 0x005a, 0x1468, 0x1429, 0xffff, + 0xffff, 0x1449, 0x0005, 0x005a, 0x14c7, 0x148a, 0xffff, 0xffff, + // Entry 45680 - 456BF + 0x14a9, 0x0003, 0x0000, 0x09b9, 0x09be, 0x0003, 0x005a, 0x14e8, + 0x14f6, 0x1503, 0x0002, 0x09c1, 0x09c8, 0x0005, 0x005a, 0x1511, + 0x1511, 0xffff, 0xffff, 0x1511, 0x0005, 0x005a, 0x152a, 0x152a, + 0xffff, 0xffff, 0x152a, 0x0003, 0x0000, 0x09d3, 0x09d8, 0x0003, + 0x005a, 0x1542, 0x154f, 0x155b, 0x0002, 0x09db, 0x09e2, 0x0005, + 0x005a, 0x1568, 0x1568, 0xffff, 0xffff, 0x1568, 0x0005, 0x005a, + 0x1578, 0x1578, 0xffff, 0xffff, 0x1578, 0x0003, 0x0000, 0x09ed, + 0x09f2, 0x0003, 0x005a, 0x1588, 0x159b, 0x15ad, 0x0002, 0x09f5, + // Entry 456C0 - 456FF + 0x09fc, 0x0005, 0x005a, 0x1607, 0x15c0, 0xffff, 0xffff, 0x15e4, + 0x0005, 0x005a, 0x1672, 0x162d, 0xffff, 0xffff, 0x1650, 0x0003, + 0x0000, 0x0a07, 0x0a0c, 0x0003, 0x005a, 0x1697, 0x16a6, 0x16b4, + 0x0002, 0x0a0f, 0x0a16, 0x0005, 0x005a, 0x16c3, 0x16c3, 0xffff, + 0xffff, 0x16c3, 0x0005, 0x005a, 0x16e0, 0x16e0, 0xffff, 0xffff, + 0x16e0, 0x0003, 0x0000, 0x0a21, 0x0a26, 0x0003, 0x005a, 0x16fc, + 0x170a, 0x1717, 0x0002, 0x0a29, 0x0a30, 0x0005, 0x005a, 0x1725, + 0x1725, 0xffff, 0xffff, 0x1725, 0x0005, 0x005a, 0x1736, 0x1736, + // Entry 45700 - 4573F + 0xffff, 0xffff, 0x1736, 0x0001, 0x0a39, 0x0001, 0x005a, 0x1747, + 0x0001, 0x0a3e, 0x0001, 0x005a, 0x1747, 0x0001, 0x0a43, 0x0001, + 0x005a, 0x1747, 0x0003, 0x0a4a, 0x0a4d, 0x0a51, 0x0001, 0x005a, + 0x1750, 0x0002, 0x005a, 0xffff, 0x1755, 0x0002, 0x0a54, 0x0a5b, + 0x0005, 0x005a, 0x177e, 0x1761, 0xffff, 0xffff, 0x1770, 0x0005, + 0x005a, 0x17aa, 0x178f, 0xffff, 0xffff, 0x179d, 0x0003, 0x0a66, + 0x0000, 0x0a69, 0x0001, 0x0000, 0x213b, 0x0002, 0x0a6c, 0x0a73, + 0x0005, 0x005a, 0x17ba, 0x17ba, 0xffff, 0xffff, 0x17ba, 0x0005, + // Entry 45740 - 4577F + 0x005a, 0x17c6, 0x17c6, 0xffff, 0xffff, 0x17c6, 0x0003, 0x0a7e, + 0x0000, 0x0a81, 0x0001, 0x0000, 0x213b, 0x0002, 0x0a84, 0x0a8b, + 0x0005, 0x0000, 0x1d76, 0x1d76, 0xffff, 0xffff, 0x1d76, 0x0005, + 0x0000, 0x1d7d, 0x1d7d, 0xffff, 0xffff, 0x1d7d, 0x0003, 0x0a96, + 0x0a99, 0x0a9d, 0x0001, 0x0010, 0x0bf7, 0x0002, 0x005a, 0xffff, + 0x17d1, 0x0002, 0x0aa0, 0x0aa7, 0x0005, 0x005a, 0x1801, 0x17e0, + 0xffff, 0xffff, 0x17f0, 0x0005, 0x005a, 0x1834, 0x1815, 0xffff, + 0xffff, 0x1824, 0x0003, 0x0ab2, 0x0000, 0x0ab5, 0x0001, 0x0001, + // Entry 45780 - 457BF + 0x07c5, 0x0002, 0x0ab8, 0x0abf, 0x0005, 0x005a, 0x1847, 0x1847, + 0xffff, 0xffff, 0x1847, 0x0005, 0x005a, 0x1856, 0x1856, 0xffff, + 0xffff, 0x1856, 0x0003, 0x0aca, 0x0000, 0x0acd, 0x0001, 0x0000, + 0x1f9a, 0x0002, 0x0ad0, 0x0ad7, 0x0005, 0x0000, 0x1ace, 0x1ace, + 0xffff, 0xffff, 0x1ace, 0x0005, 0x0000, 0x1ad5, 0x1ad5, 0xffff, + 0xffff, 0x1ad5, 0x0003, 0x0ae2, 0x0ae5, 0x0ae9, 0x0001, 0x005a, + 0x1864, 0x0002, 0x005a, 0xffff, 0x186d, 0x0002, 0x0aec, 0x0af3, + 0x0005, 0x005a, 0x1897, 0x1872, 0xffff, 0xffff, 0x1885, 0x0005, + // Entry 457C0 - 457FF + 0x005a, 0x18cf, 0x18ac, 0xffff, 0xffff, 0x18be, 0x0003, 0x0afe, + 0x0000, 0x0b01, 0x0001, 0x001c, 0x0a96, 0x0002, 0x0b04, 0x0b0b, + 0x0005, 0x005a, 0x18e3, 0x18e3, 0xffff, 0xffff, 0x18e3, 0x0005, + 0x005a, 0x18f2, 0x18f2, 0xffff, 0xffff, 0x18f2, 0x0003, 0x0b16, + 0x0000, 0x0b19, 0x0001, 0x0000, 0x2002, 0x0002, 0x0b1c, 0x0b23, + 0x0005, 0x0026, 0x02ce, 0x02ce, 0xffff, 0xffff, 0x02ce, 0x0005, + 0x0000, 0x1dbb, 0x1dbb, 0xffff, 0xffff, 0x1dbb, 0x0001, 0x0b2c, + 0x0001, 0x005a, 0x1900, 0x0001, 0x0b31, 0x0001, 0x005a, 0x1909, + // Entry 45800 - 4583F + 0x0001, 0x0b36, 0x0001, 0x005a, 0x1909, 0x0004, 0x0b3e, 0x0b43, + 0x0b48, 0x0b57, 0x0003, 0x0000, 0x1dc7, 0x39fb, 0x3af3, 0x0003, + 0x005a, 0x190d, 0x1919, 0x192e, 0x0002, 0x0000, 0x0b4b, 0x0003, + 0x0000, 0x0b52, 0x0b4f, 0x0001, 0x005a, 0x1943, 0x0003, 0x005a, + 0xffff, 0x195e, 0x1976, 0x0002, 0x0d32, 0x0b5a, 0x0003, 0x0b5e, + 0x0c96, 0x0bfa, 0x009a, 0x005a, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1a11, 0x1a6f, 0x1ae1, 0x1b24, 0x1b90, 0x1bff, 0x1c7e, 0x1cfb, + 0x1d3a, 0x1de6, 0x1e19, 0x1e5c, 0x1ec3, 0x1f00, 0x1f80, 0x1fde, + // Entry 45840 - 4587F + 0x205d, 0x20be, 0x2125, 0x2177, 0x21b3, 0xffff, 0xffff, 0x221a, + 0xffff, 0x2274, 0xffff, 0x22d3, 0x2315, 0x2351, 0x2388, 0xffff, + 0xffff, 0x2400, 0x2440, 0x248f, 0xffff, 0xffff, 0xffff, 0x2501, + 0xffff, 0x256e, 0x25c3, 0xffff, 0x2633, 0x2685, 0x26e5, 0xffff, + 0xffff, 0xffff, 0xffff, 0x278e, 0xffff, 0xffff, 0x27f3, 0x2857, + 0xffff, 0xffff, 0x28e8, 0x2942, 0x298a, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2a37, 0x2a74, 0x2ab6, 0x2af9, 0x2b36, + 0xffff, 0xffff, 0x2be2, 0xffff, 0x2c28, 0xffff, 0xffff, 0x2ca1, + // Entry 45880 - 458BF + 0xffff, 0x2cfb, 0xffff, 0xffff, 0xffff, 0xffff, 0x2d8c, 0xffff, + 0x2de3, 0x2e4a, 0x2eb1, 0x2efc, 0xffff, 0xffff, 0xffff, 0x2f65, + 0x2fb4, 0x3000, 0xffff, 0xffff, 0x3074, 0x30da, 0x3128, 0x3161, + 0xffff, 0xffff, 0x31d2, 0x3217, 0x3250, 0xffff, 0x32ab, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x3375, 0x33b7, 0x33f6, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x34ae, 0xffff, + 0xffff, 0x3511, 0xffff, 0x355b, 0xffff, 0x35bb, 0x3601, 0x364c, + 0xffff, 0x369d, 0x36eb, 0xffff, 0xffff, 0xffff, 0x376d, 0x37af, + // Entry 458C0 - 458FF + 0xffff, 0xffff, 0x198e, 0x1aae, 0x1d73, 0x1dab, 0x009a, 0x005a, + 0x19bb, 0x19ce, 0x19e3, 0x19f9, 0x1a29, 0x1a7e, 0x1af0, 0x1b42, + 0x1baf, 0x1c20, 0x1c9f, 0x1d0a, 0x1d47, 0x1df1, 0x1e28, 0x1e77, + 0x1ed0, 0x1f22, 0x1f98, 0x2001, 0x2076, 0x20d9, 0x2139, 0x2185, + 0x21c6, 0x21fe, 0x220d, 0x2228, 0x225a, 0x2288, 0x22c2, 0x22e3, + 0x2323, 0x235c, 0x239b, 0x23d3, 0x23ec, 0x240e, 0x2453, 0x2499, + 0x24c3, 0x24d1, 0x24ec, 0x251a, 0x255e, 0x2583, 0x25d6, 0x2612, + 0x2647, 0x269f, 0x26f2, 0x271e, 0x2737, 0x276c, 0x277e, 0x279b, + // Entry 45900 - 4593F + 0x27cb, 0x27e1, 0x280d, 0x2873, 0x28c1, 0x28d9, 0x2900, 0x2954, + 0x2997, 0x29c3, 0x29ce, 0x29e3, 0x29f2, 0x2a0a, 0x2a20, 0x2a44, + 0x2a84, 0x2ac5, 0x2b06, 0x2b57, 0x2bab, 0x2bc6, 0x2bed, 0x2c19, + 0x2c3c, 0x2c76, 0x2c8b, 0x2cb3, 0x2ce9, 0x2d0b, 0x2d3d, 0x2d4e, + 0x2d5e, 0x2d75, 0x2d9e, 0x2dd4, 0x2dfe, 0x2e65, 0x2ec4, 0x2f09, + 0x2f39, 0x2f49, 0x2f57, 0x2f78, 0x2fc6, 0x3015, 0x3051, 0x305e, + 0x3090, 0x30ee, 0x3135, 0x3172, 0x31aa, 0x31b8, 0x31e3, 0x3224, + 0x3261, 0x3295, 0x32cd, 0x3323, 0x3334, 0x3343, 0x3355, 0x3365, + // Entry 45940 - 4597F + 0x3385, 0x33c6, 0x3404, 0x3432, 0x3445, 0x3457, 0x346d, 0x3481, + 0x3491, 0x349f, 0x34bd, 0x34ed, 0x3501, 0x351f, 0x354d, 0x3570, + 0x35ac, 0x35cb, 0x3614, 0x365c, 0x368e, 0x36b1, 0x36fd, 0x3733, + 0x3742, 0x3753, 0x377d, 0x37c4, 0xffff, 0xffff, 0x1997, 0x1ab9, + 0x1d7d, 0x1db6, 0x009a, 0x005a, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1a4c, 0x1a96, 0x1b0a, 0x1b69, 0x1bd7, 0x1c4f, 0x1ccd, 0x1d22, + 0x1d5d, 0x1e05, 0x1e42, 0x1e9d, 0x1ee8, 0x1f51, 0x1fbb, 0x202f, + 0x209a, 0x20ff, 0x2158, 0x219c, 0x21e2, 0xffff, 0xffff, 0x2241, + // Entry 45980 - 459BF + 0xffff, 0x22a5, 0xffff, 0x22fc, 0x233a, 0x2372, 0x23b7, 0xffff, + 0xffff, 0x2427, 0x2471, 0x24ae, 0xffff, 0xffff, 0xffff, 0x253c, + 0xffff, 0x25a3, 0x25f4, 0xffff, 0x2666, 0x26c2, 0x2708, 0xffff, + 0xffff, 0xffff, 0xffff, 0x27b3, 0xffff, 0xffff, 0x2832, 0x289a, + 0xffff, 0xffff, 0x2921, 0x296f, 0x29ad, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2a5c, 0x2a9d, 0x2adf, 0x2b1e, 0x2b81, + 0xffff, 0xffff, 0x2c03, 0xffff, 0x2c59, 0xffff, 0xffff, 0x2cce, + 0xffff, 0x2d24, 0xffff, 0xffff, 0xffff, 0xffff, 0x2db9, 0xffff, + // Entry 459C0 - 459FF + 0x2e24, 0x2e8b, 0x2ee0, 0x2f21, 0xffff, 0xffff, 0xffff, 0x2f96, + 0x2fe3, 0x3033, 0xffff, 0xffff, 0x30b5, 0x310b, 0x314b, 0x318e, + 0xffff, 0xffff, 0x31fd, 0x323a, 0x327b, 0xffff, 0x32f8, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x339e, 0x33de, 0x341b, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x34d5, 0xffff, + 0xffff, 0x3536, 0xffff, 0x358e, 0xffff, 0x35e6, 0x3630, 0x3675, + 0xffff, 0x36ce, 0x3718, 0xffff, 0xffff, 0xffff, 0x3796, 0x37e2, + 0xffff, 0xffff, 0x19a9, 0x1acd, 0x1d90, 0x1dca, 0x0003, 0x0d36, + // Entry 45A00 - 45A3F + 0x0da5, 0x0d69, 0x0031, 0x0057, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x30c6, 0x30cf, 0xffff, 0x30d8, 0x003a, 0x0057, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 45A40 - 45A7F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x30c6, 0x30cf, 0xffff, 0x30d8, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x30e1, 0x0031, 0x0057, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 45A80 - 45ABF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x30ca, 0x30d3, 0xffff, 0x30dc, 0x0001, 0x0002, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0005, + 0x0000, 0x0011, 0x0056, 0x007d, 0x00e1, 0x0002, 0x0014, 0x0035, + 0x0005, 0x001a, 0x0023, 0x0000, 0x0000, 0x002c, 0x0007, 0x005b, + // Entry 45AC0 - 45AFF + 0x0000, 0x0004, 0x0008, 0x000c, 0x0010, 0x0014, 0x0018, 0x0007, + 0x0000, 0x2b3e, 0x2296, 0x3c99, 0x3c9c, 0x257b, 0x257f, 0x2b3a, + 0x0007, 0x0040, 0x0d08, 0x2070, 0x2073, 0x2076, 0x2079, 0x207c, + 0x207f, 0x0005, 0x003b, 0x0044, 0x0000, 0x0000, 0x004d, 0x0007, + 0x005b, 0x0000, 0x0004, 0x0008, 0x000c, 0x0010, 0x0014, 0x0018, + 0x0007, 0x0000, 0x2b3e, 0x2296, 0x3c9f, 0x3ca2, 0x257b, 0x257f, + 0x2b3a, 0x0007, 0x0040, 0x0d08, 0x2070, 0x2083, 0x2086, 0x2079, + 0x207c, 0x207f, 0x0002, 0x0059, 0x006b, 0x0003, 0x005d, 0x0000, + // Entry 45B00 - 45B3F + 0x0064, 0x0005, 0x005b, 0xffff, 0x001d, 0x0025, 0x002d, 0x0035, + 0x0005, 0x005b, 0xffff, 0x003d, 0x004a, 0x0057, 0x0064, 0x0003, + 0x006f, 0x0000, 0x0076, 0x0005, 0x005b, 0xffff, 0x0071, 0x0079, + 0x0081, 0x0089, 0x0005, 0x005b, 0xffff, 0x0091, 0x009e, 0x00ab, + 0x00b8, 0x0002, 0x0080, 0x00ba, 0x0003, 0x0000, 0x0084, 0x009f, + 0x0008, 0x0000, 0x0000, 0x008d, 0x0093, 0x0096, 0x0099, 0x009c, + 0x0090, 0x0001, 0x005a, 0x0633, 0x0001, 0x005a, 0x0642, 0x0001, + 0x005b, 0x00c5, 0x0001, 0x005b, 0x00d1, 0x0001, 0x005b, 0x00df, + // Entry 45B40 - 45B7F + 0x0001, 0x005b, 0x00e6, 0x0008, 0x0000, 0x0000, 0x00a8, 0x00ae, + 0x00b1, 0x00b4, 0x00b7, 0x00ab, 0x0001, 0x005a, 0x0633, 0x0001, + 0x005a, 0x0642, 0x0001, 0x005a, 0x064a, 0x0001, 0x005a, 0x0655, + 0x0001, 0x005a, 0x0662, 0x0001, 0x005a, 0x0668, 0x0003, 0x0000, + 0x00be, 0x00d2, 0x0007, 0x0000, 0x0000, 0x0000, 0x00c6, 0x00c9, + 0x00cc, 0x00cf, 0x0001, 0x005b, 0x00c5, 0x0001, 0x005b, 0x00d1, + 0x0001, 0x005b, 0x00df, 0x0001, 0x005b, 0x00e6, 0x0008, 0x0000, + 0x0000, 0x00db, 0x0000, 0x0000, 0x0000, 0x0000, 0x00de, 0x0001, + // Entry 45B80 - 45BBF + 0x005a, 0x0633, 0x0001, 0x005a, 0x0642, 0x0001, 0x00e3, 0x0002, + 0x0000, 0x00e6, 0x0001, 0x005b, 0x00ed, 0x0002, 0x0003, 0x00e9, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, + 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, + 0x0000, 0x0000, 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, + 0x0006, 0x000d, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, + 0x0001, 0x0002, 0x0587, 0x0008, 0x002f, 0x0066, 0x008b, 0x009f, + 0x00b7, 0x00c7, 0x00d8, 0x0000, 0x0002, 0x0032, 0x0054, 0x0003, + // Entry 45BC0 - 45BFF + 0x0036, 0x0000, 0x0045, 0x000d, 0x0046, 0xffff, 0x00f6, 0x00f9, + 0x00fc, 0x00ff, 0x33d7, 0x33da, 0x33dd, 0x33e0, 0x33e3, 0x33e6, + 0x33ea, 0x33ee, 0x000d, 0x005b, 0xffff, 0x00f5, 0x0105, 0x0114, + 0x0124, 0x0133, 0x0141, 0x014f, 0x015d, 0x016b, 0x0179, 0x0188, + 0x019f, 0x0002, 0x0000, 0x0057, 0x000d, 0x0000, 0xffff, 0x2773, + 0x2773, 0x2773, 0x2773, 0x3a8d, 0x2b3a, 0x2b3a, 0x2b40, 0x3a8d, + 0x204d, 0x204d, 0x204d, 0x0002, 0x0069, 0x007f, 0x0003, 0x006d, + 0x0000, 0x0076, 0x0007, 0x005b, 0x01b7, 0x01bb, 0x01bf, 0x01c3, + // Entry 45C00 - 45C3F + 0x01c8, 0x01cc, 0x01d0, 0x0007, 0x005b, 0x01d4, 0x01de, 0x01e8, + 0x01f1, 0x01fb, 0x0204, 0x020b, 0x0002, 0x0000, 0x0082, 0x0007, + 0x0000, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0033, + 0x0001, 0x008d, 0x0003, 0x0091, 0x0000, 0x0098, 0x0005, 0x0006, + 0xffff, 0x00f6, 0x00f9, 0x00fc, 0x00ff, 0x0005, 0x005b, 0xffff, + 0x0215, 0x0224, 0x0232, 0x0241, 0x0001, 0x00a1, 0x0003, 0x00a5, + 0x0000, 0x00ae, 0x0002, 0x00a8, 0x00ab, 0x0001, 0x005b, 0x024f, + 0x0001, 0x005b, 0x025a, 0x0002, 0x00b1, 0x00b4, 0x0001, 0x005b, + // Entry 45C40 - 45C7F + 0x024f, 0x0001, 0x005b, 0x025a, 0x0003, 0x00c1, 0x0000, 0x00bb, + 0x0001, 0x00bd, 0x0002, 0x005b, 0x0262, 0x0272, 0x0001, 0x00c3, + 0x0002, 0x0006, 0x0155, 0x0158, 0x0004, 0x00d5, 0x00cf, 0x00cc, + 0x00d2, 0x0001, 0x0006, 0x015b, 0x0001, 0x0002, 0x0033, 0x0001, + 0x0002, 0x003c, 0x0001, 0x0002, 0x08e8, 0x0004, 0x00e6, 0x00e0, + 0x00dd, 0x00e3, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, + 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0040, 0x012a, + 0x0000, 0x0000, 0x012f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 45C80 - 45CBF + 0x0134, 0x0000, 0x0000, 0x0139, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x013e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0149, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x014e, 0x0000, 0x0153, 0x0000, 0x0000, + 0x0158, 0x0000, 0x0000, 0x015d, 0x0000, 0x0000, 0x0162, 0x0001, + 0x012c, 0x0001, 0x0037, 0x0381, 0x0001, 0x0131, 0x0001, 0x005b, + // Entry 45CC0 - 45CFF + 0x0282, 0x0001, 0x0136, 0x0001, 0x001a, 0x01db, 0x0001, 0x013b, + 0x0001, 0x005b, 0x0288, 0x0002, 0x0141, 0x0144, 0x0001, 0x0037, + 0x0393, 0x0003, 0x005b, 0x028e, 0x0293, 0x0298, 0x0001, 0x014b, + 0x0001, 0x005b, 0x02a1, 0x0001, 0x0150, 0x0001, 0x005b, 0x02af, + 0x0001, 0x0155, 0x0001, 0x0046, 0x0529, 0x0001, 0x015a, 0x0001, + 0x0006, 0x01bc, 0x0001, 0x015f, 0x0001, 0x0009, 0x030c, 0x0001, + 0x0164, 0x0001, 0x0037, 0x03bd, 0x0003, 0x0004, 0x06f4, 0x0ccd, + 0x0012, 0x0017, 0x0030, 0x0090, 0x0000, 0x0117, 0x0000, 0x019e, + // Entry 45D00 - 45D3F + 0x01c9, 0x03e2, 0x0466, 0x04e4, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0562, 0x065a, 0x06d8, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, + 0x001d, 0x0003, 0x0026, 0x002b, 0x0021, 0x0001, 0x0023, 0x0001, + 0x005b, 0x02b6, 0x0001, 0x0028, 0x0001, 0x0000, 0x0000, 0x0001, + 0x002d, 0x0001, 0x005b, 0x02d2, 0x0008, 0x0039, 0x0000, 0x0000, + 0x0000, 0x0000, 0x007f, 0x0000, 0x0000, 0x0002, 0x003c, 0x005d, + 0x0002, 0x003f, 0x004e, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, + // Entry 45D40 - 45D7F + 0x3a09, 0x3a0c, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, + 0x3a0c, 0x0003, 0x0061, 0x0000, 0x0070, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x3a06, 0x3a09, 0x3a0c, 0x0004, 0x008d, 0x0087, 0x0084, 0x008a, + 0x0001, 0x0056, 0x0101, 0x0001, 0x0010, 0x0026, 0x0001, 0x0017, + // Entry 45D80 - 45DBF + 0x029b, 0x0001, 0x0017, 0x0538, 0x0005, 0x0096, 0x0000, 0x0000, + 0x0000, 0x0101, 0x0002, 0x0099, 0x00cd, 0x0003, 0x009d, 0x00ad, + 0x00bd, 0x000e, 0x005b, 0xffff, 0x02d7, 0x02de, 0x02e7, 0x02f2, + 0x02fd, 0x0306, 0x0311, 0x0322, 0x0331, 0x033e, 0x0349, 0x0352, + 0x035d, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, + 0x0422, 0x000e, 0x005b, 0xffff, 0x02d7, 0x02de, 0x02e7, 0x02f2, + 0x02fd, 0x0306, 0x0311, 0x0322, 0x0331, 0x033e, 0x0349, 0x0352, + // Entry 45DC0 - 45DFF + 0x035d, 0x0003, 0x00d1, 0x00e1, 0x00f1, 0x000e, 0x005b, 0xffff, + 0x02d7, 0x02de, 0x02e7, 0x02f2, 0x02fd, 0x0306, 0x0311, 0x0322, + 0x0331, 0x033e, 0x0349, 0x0352, 0x035d, 0x000e, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x005b, 0xffff, + 0x02d7, 0x02de, 0x02e7, 0x02f2, 0x02fd, 0x0306, 0x0311, 0x0322, + 0x0331, 0x033e, 0x0349, 0x0352, 0x035d, 0x0003, 0x010b, 0x0111, + 0x0105, 0x0001, 0x0107, 0x0002, 0x005b, 0x0366, 0x0382, 0x0001, + // Entry 45E00 - 45E3F + 0x010d, 0x0002, 0x005b, 0x039e, 0x03af, 0x0001, 0x0113, 0x0002, + 0x005b, 0x039e, 0x03af, 0x0005, 0x011d, 0x0000, 0x0000, 0x0000, + 0x0188, 0x0002, 0x0120, 0x0154, 0x0003, 0x0124, 0x0134, 0x0144, + 0x000e, 0x0047, 0xffff, 0x0a68, 0x0a79, 0x0a86, 0x0a91, 0x0a9e, + 0x200d, 0x201a, 0x2029, 0x0ad0, 0x2036, 0x203f, 0x204a, 0x2057, + 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, + 0x000e, 0x0047, 0xffff, 0x0a68, 0x0a79, 0x0a86, 0x0a91, 0x0a9e, + // Entry 45E40 - 45E7F + 0x200d, 0x201a, 0x2029, 0x0ad0, 0x2036, 0x203f, 0x204a, 0x2057, + 0x0003, 0x0158, 0x0168, 0x0178, 0x000e, 0x0047, 0xffff, 0x0a68, + 0x0a79, 0x0a86, 0x0a91, 0x0a9e, 0x200d, 0x201a, 0x2029, 0x0ad0, + 0x2036, 0x203f, 0x204a, 0x2057, 0x000e, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x0047, 0xffff, 0x0a68, + 0x0a79, 0x0a86, 0x0a91, 0x0a9e, 0x200d, 0x201a, 0x2029, 0x0ad0, + 0x2036, 0x203f, 0x204a, 0x2057, 0x0003, 0x0192, 0x0198, 0x018c, + // Entry 45E80 - 45EBF + 0x0001, 0x018e, 0x0002, 0x005b, 0x03c0, 0x03e7, 0x0001, 0x0194, + 0x0002, 0x005b, 0x040e, 0x0420, 0x0001, 0x019a, 0x0002, 0x005b, + 0x040e, 0x0420, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x01a7, 0x0000, 0x01b8, 0x0004, 0x01b5, 0x01af, 0x01ac, 0x01b2, + 0x0001, 0x0009, 0x0323, 0x0001, 0x0009, 0x033a, 0x0001, 0x005b, + 0x0432, 0x0001, 0x0017, 0x0372, 0x0004, 0x01c6, 0x01c0, 0x01bd, + 0x01c3, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0001, + 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, 0x01d2, 0x0237, + // Entry 45EC0 - 45EFF + 0x028e, 0x02c3, 0x0394, 0x03af, 0x03c0, 0x03d1, 0x0002, 0x01d5, + 0x0206, 0x0003, 0x01d9, 0x01e8, 0x01f7, 0x000d, 0x0040, 0xffff, + 0x0e23, 0x2089, 0x2007, 0x200f, 0x2093, 0x0e4a, 0x0e52, 0x2032, + 0x209a, 0x203a, 0x20a4, 0x2042, 0x000d, 0x0012, 0xffff, 0x0054, + 0x3a36, 0x3a55, 0x3a3c, 0x3a55, 0x3a4f, 0x3a4f, 0x3a3c, 0x3a58, + 0x0066, 0x3a42, 0x3a5b, 0x000d, 0x005b, 0xffff, 0x0442, 0x044f, + 0x045e, 0x0469, 0x0476, 0x047d, 0x0486, 0x048f, 0x049e, 0x04af, + 0x04be, 0x04cb, 0x0003, 0x020a, 0x0219, 0x0228, 0x000d, 0x0040, + // Entry 45F00 - 45F3F + 0xffff, 0x0e23, 0x2089, 0x20ae, 0x200f, 0x20b7, 0x20be, 0x20c7, + 0x2032, 0x209a, 0x203a, 0x20a4, 0x2042, 0x000d, 0x0012, 0xffff, + 0x0054, 0x3a36, 0x3a55, 0x3a3c, 0x3a55, 0x3a4f, 0x3a4f, 0x3a3c, + 0x3a58, 0x0066, 0x3a42, 0x3a5b, 0x000d, 0x0012, 0xffff, 0x006f, + 0x007c, 0x3a5e, 0x0094, 0x3a67, 0x3a6e, 0x3a77, 0x3a80, 0x00c0, + 0x00d1, 0x00e0, 0x00ed, 0x0002, 0x023a, 0x0264, 0x0005, 0x0240, + 0x0249, 0x025b, 0x0000, 0x0252, 0x0007, 0x005b, 0x04da, 0x04df, + 0x04e4, 0x04e9, 0x04ee, 0x04f3, 0x04f8, 0x0007, 0x005b, 0x04da, + // Entry 45F40 - 45F7F + 0x04df, 0x04e4, 0x04e9, 0x04ee, 0x04f3, 0x04f8, 0x0007, 0x005b, + 0x04da, 0x04df, 0x04e4, 0x04e9, 0x04ee, 0x04f3, 0x04f8, 0x0007, + 0x005b, 0x04fd, 0x0514, 0x052b, 0x053a, 0x0545, 0x0554, 0x0563, + 0x0005, 0x026a, 0x0273, 0x0285, 0x0000, 0x027c, 0x0007, 0x005b, + 0x04da, 0x04df, 0x04e4, 0x04e9, 0x04ee, 0x04f3, 0x04f8, 0x0007, + 0x0015, 0x02b6, 0x02b3, 0x02b6, 0x36c4, 0x02b9, 0x02b3, 0x36c4, + 0x0007, 0x005b, 0x04da, 0x04df, 0x04e4, 0x04e9, 0x04ee, 0x04f3, + 0x04f8, 0x0007, 0x005b, 0x04fd, 0x0514, 0x052b, 0x053a, 0x0545, + // Entry 45F80 - 45FBF + 0x0554, 0x0563, 0x0002, 0x0291, 0x02aa, 0x0003, 0x0295, 0x029c, + 0x02a3, 0x0005, 0x005b, 0xffff, 0x0572, 0x057d, 0x0588, 0x0593, + 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, + 0x005b, 0xffff, 0x059e, 0x05b2, 0x05c6, 0x05da, 0x0003, 0x02ae, + 0x02b5, 0x02bc, 0x0005, 0x005b, 0xffff, 0x0572, 0x057d, 0x0588, + 0x0593, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x0005, 0x005b, 0xffff, 0x059e, 0x05b2, 0x05c6, 0x05da, 0x0002, + 0x02c6, 0x032d, 0x0003, 0x02ca, 0x02eb, 0x030c, 0x0008, 0x02d6, + // Entry 45FC0 - 45FFF + 0x02dc, 0x02d3, 0x02df, 0x02e2, 0x02e5, 0x02e8, 0x02d9, 0x0001, + 0x0047, 0x0dbf, 0x0001, 0x0000, 0x04ef, 0x0001, 0x005b, 0x05ee, + 0x0001, 0x0000, 0x04f2, 0x0001, 0x005b, 0x05f8, 0x0001, 0x005b, + 0x0601, 0x0001, 0x005b, 0x0608, 0x0001, 0x005b, 0x0615, 0x0008, + 0x02f7, 0x02fd, 0x02f4, 0x0300, 0x0303, 0x0306, 0x0309, 0x02fa, + 0x0001, 0x0047, 0x0dbf, 0x0001, 0x0000, 0x04ef, 0x0001, 0x005b, + 0x05ee, 0x0001, 0x0000, 0x04f2, 0x0001, 0x005b, 0x05f8, 0x0001, + 0x005b, 0x0601, 0x0001, 0x0047, 0x0ddc, 0x0001, 0x005b, 0x0615, + // Entry 46000 - 4603F + 0x0008, 0x0318, 0x031e, 0x0315, 0x0321, 0x0324, 0x0327, 0x032a, + 0x031b, 0x0001, 0x005b, 0x061e, 0x0001, 0x0000, 0x04ef, 0x0001, + 0x005b, 0x062d, 0x0001, 0x0000, 0x04f2, 0x0001, 0x005b, 0x05f8, + 0x0001, 0x005b, 0x0601, 0x0001, 0x005b, 0x0608, 0x0001, 0x005b, + 0x0615, 0x0003, 0x0331, 0x0352, 0x0373, 0x0008, 0x033d, 0x0343, + 0x033a, 0x0346, 0x0349, 0x034c, 0x034f, 0x0340, 0x0001, 0x0047, + 0x0dbf, 0x0001, 0x0000, 0x04ef, 0x0001, 0x005b, 0x05ee, 0x0001, + 0x0000, 0x04f2, 0x0001, 0x0047, 0x0dd3, 0x0001, 0x005b, 0x063c, + // Entry 46040 - 4607F + 0x0001, 0x0047, 0x0ddc, 0x0001, 0x005b, 0x0645, 0x0008, 0x035e, + 0x0364, 0x035b, 0x0367, 0x036a, 0x036d, 0x0370, 0x0361, 0x0001, + 0x0047, 0x0dbf, 0x0001, 0x0000, 0x04ef, 0x0001, 0x005b, 0x05ee, + 0x0001, 0x0000, 0x04f2, 0x0001, 0x0047, 0x0dd3, 0x0001, 0x005b, + 0x063c, 0x0001, 0x0047, 0x0ddc, 0x0001, 0x005b, 0x0645, 0x0008, + 0x037f, 0x0385, 0x037c, 0x0388, 0x038b, 0x038e, 0x0391, 0x0382, + 0x0001, 0x005b, 0x061e, 0x0001, 0x0000, 0x04ef, 0x0001, 0x005b, + 0x062d, 0x0001, 0x0000, 0x04f2, 0x0001, 0x0047, 0x0dd3, 0x0001, + // Entry 46080 - 460BF + 0x005b, 0x063c, 0x0001, 0x005b, 0x064e, 0x0001, 0x005b, 0x0645, + 0x0003, 0x03a3, 0x03a9, 0x0398, 0x0002, 0x039b, 0x039f, 0x0002, + 0x005b, 0x0659, 0x0699, 0x0002, 0x005b, 0x0682, 0x06c2, 0x0001, + 0x03a5, 0x0002, 0x005b, 0x06d4, 0x06e1, 0x0001, 0x03ab, 0x0002, + 0x005b, 0x06e9, 0x06f5, 0x0004, 0x03bd, 0x03b7, 0x03b4, 0x03ba, + 0x0001, 0x0008, 0x09c0, 0x0001, 0x0008, 0x09d5, 0x0001, 0x005b, + 0x06fc, 0x0001, 0x0017, 0x0538, 0x0004, 0x03ce, 0x03c8, 0x03c5, + 0x03cb, 0x0001, 0x0005, 0x0082, 0x0001, 0x0005, 0x008f, 0x0001, + // Entry 460C0 - 460FF + 0x0005, 0x0099, 0x0001, 0x0005, 0x00a1, 0x0004, 0x03df, 0x03d9, + 0x03d6, 0x03dc, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, + 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0005, 0x03e8, + 0x0000, 0x0000, 0x0000, 0x0453, 0x0002, 0x03eb, 0x041f, 0x0003, + 0x03ef, 0x03ff, 0x040f, 0x000e, 0x005b, 0x075b, 0x070a, 0x0717, + 0x0724, 0x0731, 0x073c, 0x0747, 0x0752, 0x0767, 0x0772, 0x0779, + 0x0784, 0x0791, 0x0796, 0x000e, 0x0000, 0x003f, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, + // Entry 46100 - 4613F + 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x005b, 0x075b, 0x070a, 0x0717, + 0x0724, 0x0731, 0x073c, 0x0747, 0x0752, 0x0767, 0x0772, 0x0779, + 0x0784, 0x0791, 0x0796, 0x0003, 0x0423, 0x0433, 0x0443, 0x000e, + 0x005b, 0x075b, 0x070a, 0x0717, 0x0724, 0x0731, 0x073c, 0x0747, + 0x0752, 0x0767, 0x0772, 0x0779, 0x0784, 0x0791, 0x0796, 0x000e, + 0x0000, 0x003f, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, + 0x005b, 0x075b, 0x070a, 0x0717, 0x0724, 0x0731, 0x073c, 0x0747, + // Entry 46140 - 4617F + 0x0752, 0x0767, 0x0772, 0x0779, 0x0784, 0x0791, 0x0796, 0x0003, + 0x045c, 0x0461, 0x0457, 0x0001, 0x0459, 0x0001, 0x005b, 0x079f, + 0x0001, 0x045e, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0463, 0x0001, + 0x0000, 0x04ef, 0x0005, 0x046c, 0x0000, 0x0000, 0x0000, 0x04d1, + 0x0002, 0x046f, 0x04a0, 0x0003, 0x0473, 0x0482, 0x0491, 0x000d, + 0x0009, 0xffff, 0x0766, 0x57e0, 0x57f1, 0x0795, 0x5802, 0x5811, + 0x07bc, 0x581e, 0x07d8, 0x07ed, 0x07f8, 0x0803, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + // Entry 46180 - 461BF + 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0009, 0xffff, + 0x0766, 0x57e0, 0x57f1, 0x0795, 0x5802, 0x5811, 0x07bc, 0x581e, + 0x07d8, 0x07ed, 0x07f8, 0x0803, 0x0003, 0x04a4, 0x04b3, 0x04c2, + 0x000d, 0x0009, 0xffff, 0x0766, 0x57e0, 0x57f1, 0x0795, 0x5802, + 0x5811, 0x07bc, 0x581e, 0x07d8, 0x07ed, 0x07f8, 0x0803, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0009, + 0xffff, 0x0766, 0x57e0, 0x57f1, 0x0795, 0x5802, 0x5811, 0x07bc, + // Entry 461C0 - 461FF + 0x581e, 0x07d8, 0x07ed, 0x07f8, 0x0803, 0x0003, 0x04da, 0x04df, + 0x04d5, 0x0001, 0x04d7, 0x0001, 0x0047, 0x0f43, 0x0001, 0x04dc, + 0x0001, 0x0047, 0x0f43, 0x0001, 0x04e1, 0x0001, 0x0047, 0x0f43, + 0x0005, 0x04ea, 0x0000, 0x0000, 0x0000, 0x054f, 0x0002, 0x04ed, + 0x051e, 0x0003, 0x04f1, 0x0500, 0x050f, 0x000d, 0x0047, 0xffff, + 0x0f4c, 0x0f54, 0x0f5c, 0x0f66, 0x2068, 0x2074, 0x2081, 0x208b, + 0x0f96, 0x0f9e, 0x2095, 0x20a2, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + // Entry 46200 - 4623F + 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x005b, 0xffff, 0x07c2, 0x07d3, + 0x07de, 0x07fb, 0x0814, 0x0835, 0x0852, 0x085f, 0x086c, 0x087b, + 0x088a, 0x089e, 0x0003, 0x0522, 0x0531, 0x0540, 0x000d, 0x0047, + 0xffff, 0x0f4c, 0x0f54, 0x0f5c, 0x0f66, 0x2068, 0x2074, 0x2081, + 0x208b, 0x0f96, 0x0f9e, 0x2095, 0x20a2, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x005b, 0xffff, 0x07c2, + 0x07d3, 0x07de, 0x07fb, 0x0814, 0x0835, 0x0852, 0x085f, 0x086c, + // Entry 46240 - 4627F + 0x087b, 0x088a, 0x089e, 0x0003, 0x0558, 0x055d, 0x0553, 0x0001, + 0x0555, 0x0001, 0x005b, 0x08b4, 0x0001, 0x055a, 0x0001, 0x0000, + 0x06c8, 0x0001, 0x055f, 0x0001, 0x0000, 0x06c8, 0x0005, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0568, 0x0001, 0x056a, 0x0001, 0x056c, + 0x00ec, 0x005b, 0x08cc, 0x08ee, 0x0912, 0x0936, 0x0956, 0x0978, + 0x0998, 0x09b8, 0x09da, 0x09f8, 0x0a1c, 0x0a40, 0x0a64, 0x0a91, + 0x0abe, 0x0aeb, 0x0b16, 0x0b36, 0x0b58, 0x0b7c, 0x0b9e, 0x0bc0, + 0x0be4, 0x0c04, 0x0c24, 0x0c48, 0x0c6a, 0x0c8e, 0x0cb0, 0x0cd4, + // Entry 46280 - 462BF + 0x0cf6, 0x0d1a, 0x0d3e, 0x0d5e, 0x0d80, 0x0da4, 0x0dc8, 0x0df0, + 0x0e16, 0x0e34, 0x0e54, 0x0e74, 0x0e9a, 0x0ebe, 0x0ee4, 0x0f08, + 0x0f2a, 0x0f4c, 0x0f6c, 0x0f8c, 0x0fb0, 0x0fd4, 0x0ff5, 0x1019, + 0x103b, 0x1061, 0x1085, 0x10ab, 0x10cf, 0x10f5, 0x1117, 0x113d, + 0x115f, 0x1183, 0x11a7, 0x11cf, 0x11f1, 0x1213, 0x1239, 0x125b, + 0x127f, 0x12a5, 0x12c7, 0x12e9, 0x130f, 0x1331, 0x1355, 0x1377, + 0x139d, 0x13c3, 0x13e5, 0x140b, 0x142d, 0x1453, 0x1479, 0x149d, + 0x14bf, 0x14e1, 0x1505, 0x1529, 0x154b, 0x156d, 0x1593, 0x15b7, + // Entry 462C0 - 462FF + 0x15db, 0x1601, 0x1627, 0x1647, 0x166b, 0x168f, 0x16b5, 0x16d5, + 0x16f7, 0x171b, 0x173f, 0x175f, 0x1783, 0x17ab, 0x17d1, 0x17f5, + 0x1819, 0x183f, 0x1863, 0x1889, 0x18ad, 0x18d5, 0x18f9, 0x191b, + 0x193d, 0x1963, 0x1989, 0x19ad, 0x19d1, 0x19f5, 0x1a1d, 0x1a45, + 0x1a69, 0x1a91, 0x1ab3, 0x1ad9, 0x1aff, 0x1b23, 0x1b47, 0x1b6b, + 0x1b8d, 0x1bb1, 0x1bd5, 0x1bf7, 0x1c1d, 0x1c43, 0x1c65, 0x1c85, + 0x1ca9, 0x1ccb, 0x1cf1, 0x1d15, 0x1d3d, 0x1d61, 0x1d81, 0x1da3, + 0x1dc7, 0x1de9, 0x1e0d, 0x1e2f, 0x1e55, 0x1e7d, 0x1ea1, 0x1ec5, + // Entry 46300 - 4633F + 0x1ee9, 0x1f0f, 0x1f33, 0x1f5b, 0x1f7f, 0x1fa5, 0x1fcb, 0x1fed, + 0x2011, 0x2039, 0x205d, 0x207d, 0x20a5, 0x20c5, 0x20e7, 0x2109, + 0x212f, 0x2155, 0x217b, 0x21a1, 0x21c3, 0x21e9, 0x220d, 0x2231, + 0x2253, 0x2279, 0x229b, 0x22c1, 0x22e3, 0x2307, 0x2329, 0x234d, + 0x2373, 0x2399, 0x23bd, 0x23e3, 0x2407, 0x242b, 0x2453, 0x2477, + 0x249b, 0x24c1, 0x24e3, 0x2507, 0x2525, 0x254d, 0x2573, 0x2599, + 0x25bb, 0x25df, 0x2603, 0x262b, 0x264d, 0x2673, 0x2695, 0x26bb, + 0x26df, 0x2701, 0x2727, 0x274d, 0x2771, 0x2795, 0x27bb, 0x27e1, + // Entry 46340 - 4637F + 0x2803, 0x2827, 0x284d, 0x2871, 0x2893, 0x28b5, 0x28d9, 0x28ff, + 0x2923, 0x2949, 0x296b, 0x2983, 0x299b, 0x29a6, 0x0005, 0x0660, + 0x0000, 0x0000, 0x0000, 0x06c5, 0x0002, 0x0663, 0x0694, 0x0003, + 0x0667, 0x0676, 0x0685, 0x000d, 0x0047, 0xffff, 0x1058, 0x106b, + 0x20af, 0x108d, 0x1094, 0x20bc, 0x20cd, 0x10b9, 0x20d6, 0x20df, + 0x10d2, 0x20e6, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, + 0x3a0c, 0x000d, 0x0047, 0xffff, 0x1058, 0x106b, 0x20af, 0x108d, + // Entry 46380 - 463BF + 0x1094, 0x20bc, 0x20cd, 0x10b9, 0x20d6, 0x20df, 0x10d2, 0x20e6, + 0x0003, 0x0698, 0x06a7, 0x06b6, 0x000d, 0x0047, 0xffff, 0x1058, + 0x106b, 0x20af, 0x108d, 0x1094, 0x20bc, 0x20cd, 0x10b9, 0x20d6, + 0x20df, 0x10d2, 0x20e6, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, + 0x3a09, 0x3a0c, 0x000d, 0x0047, 0xffff, 0x1058, 0x106b, 0x20af, + 0x108d, 0x1094, 0x20bc, 0x20cd, 0x10b9, 0x20d6, 0x20df, 0x10d2, + 0x20e6, 0x0003, 0x06ce, 0x06d3, 0x06c9, 0x0001, 0x06cb, 0x0001, + // Entry 463C0 - 463FF + 0x005c, 0x0000, 0x0001, 0x06d0, 0x0001, 0x005c, 0x001c, 0x0001, + 0x06d5, 0x0001, 0x005c, 0x001c, 0x0005, 0x0000, 0x0000, 0x0000, + 0x0000, 0x06de, 0x0003, 0x06e8, 0x06ee, 0x06e2, 0x0001, 0x06e4, + 0x0002, 0x005c, 0x002d, 0x006d, 0x0001, 0x06ea, 0x0002, 0x0000, + 0x1a20, 0x3ca5, 0x0001, 0x06f0, 0x0002, 0x005c, 0x007a, 0x006d, + 0x0042, 0x0737, 0x073c, 0x0741, 0x0746, 0x0765, 0x0784, 0x07a3, + 0x07c2, 0x07e1, 0x0800, 0x081f, 0x083e, 0x085d, 0x0880, 0x08a3, + 0x08c6, 0x08cb, 0x08d0, 0x08d5, 0x08f6, 0x0917, 0x0938, 0x093d, + // Entry 46400 - 4643F + 0x0942, 0x0947, 0x094c, 0x0951, 0x0956, 0x095b, 0x0960, 0x0965, + 0x0981, 0x099d, 0x09b9, 0x09d5, 0x09f1, 0x0a0d, 0x0a29, 0x0a45, + 0x0a61, 0x0a7d, 0x0a99, 0x0ab5, 0x0ad1, 0x0aed, 0x0b09, 0x0b25, + 0x0b41, 0x0b5d, 0x0b79, 0x0b95, 0x0bb1, 0x0bb6, 0x0bbb, 0x0bc0, + 0x0bde, 0x0bfc, 0x0c1a, 0x0c38, 0x0c52, 0x0c6c, 0x0c8a, 0x0ca4, + 0x0cbe, 0x0cc3, 0x0cc8, 0x0001, 0x0739, 0x0001, 0x0008, 0x0a02, + 0x0001, 0x073e, 0x0001, 0x0008, 0x0a02, 0x0001, 0x0743, 0x0001, + 0x0008, 0x0a02, 0x0003, 0x074a, 0x074d, 0x0752, 0x0001, 0x0008, + // Entry 46440 - 4647F + 0x0a09, 0x0003, 0x005c, 0x0089, 0x00a4, 0x00b9, 0x0002, 0x0755, + 0x075d, 0x0006, 0x005c, 0x00ee, 0x00d8, 0xffff, 0xffff, 0x00ee, + 0x0106, 0x0006, 0x005c, 0x0132, 0x011c, 0xffff, 0xffff, 0x0132, + 0x014a, 0x0003, 0x0769, 0x076c, 0x0771, 0x0001, 0x0008, 0x0b17, + 0x0003, 0x005c, 0x0160, 0x0176, 0x0186, 0x0002, 0x0774, 0x077c, + 0x0006, 0x005c, 0x0197, 0x0197, 0xffff, 0xffff, 0x0197, 0x01aa, + 0x0006, 0x005c, 0x01bd, 0x01bd, 0xffff, 0xffff, 0x01bd, 0x01d0, + 0x0003, 0x0788, 0x078b, 0x0790, 0x0001, 0x0008, 0x0b17, 0x0003, + // Entry 46480 - 464BF + 0x005c, 0x01e3, 0x01f0, 0x01fd, 0x0002, 0x0793, 0x079b, 0x0006, + 0x005c, 0x020a, 0x020a, 0xffff, 0xffff, 0x020a, 0x0213, 0x0006, + 0x005c, 0x021c, 0x021c, 0xffff, 0xffff, 0x021c, 0x0225, 0x0003, + 0x07a7, 0x07aa, 0x07af, 0x0001, 0x0008, 0x0b3d, 0x0003, 0x005c, + 0x022e, 0x0251, 0x0274, 0x0002, 0x07b2, 0x07ba, 0x0006, 0x005c, + 0x02b9, 0x029b, 0xffff, 0xffff, 0x02b9, 0x02d9, 0x0006, 0x005c, + 0x0319, 0x02fb, 0xffff, 0xffff, 0x0319, 0x0339, 0x0003, 0x07c6, + 0x07c9, 0x07ce, 0x0001, 0x0008, 0x0ca5, 0x0003, 0x005c, 0x035b, + // Entry 464C0 - 464FF + 0x0374, 0x0389, 0x0002, 0x07d1, 0x07d9, 0x0006, 0x005c, 0x03a2, + 0x03a2, 0xffff, 0xffff, 0x03a2, 0x03a2, 0x0006, 0x005c, 0x03b7, + 0x03b7, 0xffff, 0xffff, 0x03b7, 0x03b7, 0x0003, 0x07e5, 0x07e8, + 0x07ed, 0x0001, 0x0008, 0x0ca5, 0x0003, 0x005c, 0x03cc, 0x03dc, + 0x03ea, 0x0002, 0x07f0, 0x07f8, 0x0006, 0x005c, 0x03fa, 0x03fa, + 0xffff, 0xffff, 0x03fa, 0x03fa, 0x0006, 0x005c, 0x0405, 0x0405, + 0xffff, 0xffff, 0x0405, 0x0405, 0x0003, 0x0804, 0x0807, 0x080c, + 0x0001, 0x0008, 0x0cd1, 0x0003, 0x005c, 0x0410, 0x042f, 0x0448, + // Entry 46500 - 4653F + 0x0002, 0x080f, 0x0817, 0x0006, 0x005c, 0x0485, 0x046b, 0xffff, + 0xffff, 0x0485, 0x04a1, 0x0006, 0x005c, 0x04d9, 0x04bf, 0xffff, + 0xffff, 0x04d9, 0x04f5, 0x0003, 0x0823, 0x0826, 0x082b, 0x0001, + 0x0008, 0x0e09, 0x0003, 0x005c, 0x0513, 0x052d, 0x0541, 0x0002, + 0x082e, 0x0836, 0x0006, 0x005c, 0x055f, 0x055f, 0xffff, 0xffff, + 0x055f, 0x055f, 0x0006, 0x005c, 0x0576, 0x0576, 0xffff, 0xffff, + 0x0576, 0x0576, 0x0003, 0x0842, 0x0845, 0x084a, 0x0001, 0x0008, + 0x0e09, 0x0003, 0x005c, 0x058d, 0x059e, 0x05af, 0x0002, 0x084d, + // Entry 46540 - 4657F + 0x0855, 0x0006, 0x005c, 0x05c4, 0x05c4, 0xffff, 0xffff, 0x05c4, + 0x05c4, 0x0006, 0x005c, 0x05d1, 0x05d1, 0xffff, 0xffff, 0x05d1, + 0x05d1, 0x0004, 0x0862, 0x0865, 0x086a, 0x087d, 0x0001, 0x0009, + 0x0458, 0x0003, 0x005c, 0x05de, 0x05ff, 0x061a, 0x0002, 0x086d, + 0x0875, 0x0006, 0x005c, 0x065b, 0x063f, 0xffff, 0xffff, 0x065b, + 0x0677, 0x0006, 0x005c, 0x06af, 0x0693, 0xffff, 0xffff, 0x06af, + 0x06cb, 0x0001, 0x005c, 0x06e7, 0x0004, 0x0885, 0x0888, 0x088d, + 0x08a0, 0x0001, 0x0047, 0x0c07, 0x0003, 0x005c, 0x06fd, 0x0719, + // Entry 46580 - 465BF + 0x072f, 0x0002, 0x0890, 0x0898, 0x0006, 0x005c, 0x074f, 0x074f, + 0xffff, 0xffff, 0x074f, 0x074f, 0x0006, 0x005c, 0x0766, 0x0766, + 0xffff, 0xffff, 0x0766, 0x0766, 0x0001, 0x005c, 0x077d, 0x0004, + 0x08a8, 0x08ab, 0x08b0, 0x08c3, 0x0001, 0x0047, 0x0c07, 0x0003, + 0x005c, 0x078e, 0x07a1, 0x07b4, 0x0002, 0x08b3, 0x08bb, 0x0006, + 0x005c, 0x07d0, 0x07d0, 0xffff, 0xffff, 0x07d0, 0x07d0, 0x0006, + 0x005c, 0x07dd, 0x07dd, 0xffff, 0xffff, 0x07dd, 0x07dd, 0x0001, + 0x005c, 0x077d, 0x0001, 0x08c8, 0x0001, 0x005c, 0x07ea, 0x0001, + // Entry 465C0 - 465FF + 0x08cd, 0x0001, 0x005c, 0x0804, 0x0001, 0x08d2, 0x0001, 0x005c, + 0x0819, 0x0003, 0x08d9, 0x08dc, 0x08e3, 0x0001, 0x005b, 0x063c, + 0x0005, 0x005c, 0x083c, 0x0847, 0x0856, 0x0829, 0x0863, 0x0002, + 0x08e6, 0x08ee, 0x0006, 0x005c, 0x0892, 0x087a, 0xffff, 0xffff, + 0x0892, 0x08a8, 0x0006, 0x005c, 0x08d8, 0x08c0, 0xffff, 0xffff, + 0x08d8, 0x08ee, 0x0003, 0x08fa, 0x08fd, 0x0904, 0x0001, 0x005c, + 0x0906, 0x0005, 0x005c, 0xffff, 0xffff, 0xffff, 0x0829, 0x0863, + 0x0002, 0x0907, 0x090f, 0x0006, 0x005c, 0x090c, 0x090c, 0xffff, + // Entry 46600 - 4663F + 0xffff, 0x090c, 0x090c, 0x0006, 0x005c, 0x0921, 0x0921, 0xffff, + 0xffff, 0x0921, 0x0921, 0x0003, 0x091b, 0x091e, 0x0925, 0x0001, + 0x005c, 0x0906, 0x0005, 0x005c, 0xffff, 0xffff, 0xffff, 0x0829, + 0x0863, 0x0002, 0x0928, 0x0930, 0x0006, 0x005c, 0x0936, 0x0936, + 0xffff, 0xffff, 0x0936, 0x0936, 0x0006, 0x005c, 0x0941, 0x0941, + 0xffff, 0xffff, 0x0941, 0x0941, 0x0001, 0x093a, 0x0001, 0x005c, + 0x094c, 0x0001, 0x093f, 0x0001, 0x005c, 0x095e, 0x0001, 0x0944, + 0x0001, 0x005c, 0x095e, 0x0001, 0x0949, 0x0001, 0x005c, 0x096d, + // Entry 46640 - 4667F + 0x0001, 0x094e, 0x0001, 0x005c, 0x0983, 0x0001, 0x0953, 0x0001, + 0x005c, 0x0996, 0x0001, 0x0958, 0x0001, 0x005c, 0x09a4, 0x0001, + 0x095d, 0x0001, 0x005c, 0x09ca, 0x0001, 0x0962, 0x0001, 0x005c, + 0x09e8, 0x0003, 0x0000, 0x0969, 0x096e, 0x0003, 0x005c, 0x0a01, + 0x0a2a, 0x0a4b, 0x0002, 0x0971, 0x0979, 0x0006, 0x005c, 0x0a9e, + 0x0a78, 0xffff, 0xffff, 0x0a9e, 0x0ac4, 0x0006, 0x005c, 0x0b10, + 0x0aea, 0xffff, 0xffff, 0x0b10, 0x0b36, 0x0003, 0x0000, 0x0985, + 0x098a, 0x0003, 0x005c, 0x0b5c, 0x0b6f, 0x0b7f, 0x0002, 0x098d, + // Entry 46680 - 466BF + 0x0995, 0x0006, 0x005c, 0x0b92, 0x0b92, 0xffff, 0xffff, 0x0b92, + 0x0b92, 0x0006, 0x005c, 0x0ba7, 0x0ba7, 0xffff, 0xffff, 0x0ba7, + 0x0ba7, 0x0003, 0x0000, 0x09a1, 0x09a6, 0x0003, 0x005c, 0x0b5c, + 0x0b6f, 0x0b7f, 0x0002, 0x09a9, 0x09b1, 0x0006, 0x005c, 0x0bbc, + 0x0bbc, 0xffff, 0xffff, 0x0bbc, 0x0bbc, 0x0006, 0x005c, 0x0bc7, + 0x0bc7, 0xffff, 0xffff, 0x0bc7, 0x0bc7, 0x0003, 0x0000, 0x09bd, + 0x09c2, 0x0003, 0x005c, 0x0bd2, 0x0bfb, 0x0c1e, 0x0002, 0x09c5, + 0x09cd, 0x0006, 0x005c, 0x0c71, 0x0c4b, 0xffff, 0xffff, 0x0c71, + // Entry 466C0 - 466FF + 0x0c99, 0x0006, 0x005c, 0x0ce9, 0x0cc3, 0xffff, 0xffff, 0x0ce9, + 0x0d11, 0x0003, 0x0000, 0x09d9, 0x09de, 0x0003, 0x005c, 0x0d3b, + 0x0d4e, 0x0d60, 0x0002, 0x09e1, 0x09e9, 0x0006, 0x005c, 0x0d73, + 0x0d73, 0xffff, 0xffff, 0x0d73, 0x0d73, 0x0006, 0x005c, 0x0d88, + 0x0d88, 0xffff, 0xffff, 0x0d88, 0x0d88, 0x0003, 0x0000, 0x09f5, + 0x09fa, 0x0003, 0x005c, 0x0d3b, 0x0d4e, 0x0d60, 0x0002, 0x09fd, + 0x0a05, 0x0006, 0x005c, 0x0d9d, 0x0d9d, 0xffff, 0xffff, 0x0d9d, + 0x0d9d, 0x0006, 0x005c, 0x0da8, 0x0da8, 0xffff, 0xffff, 0x0da8, + // Entry 46700 - 4673F + 0x0da8, 0x0003, 0x0000, 0x0a11, 0x0a16, 0x0003, 0x005c, 0x0db3, + 0x0dd4, 0x0def, 0x0002, 0x0a19, 0x0a21, 0x0006, 0x005c, 0x0e32, + 0x0e14, 0xffff, 0xffff, 0x0e32, 0x0e52, 0x0006, 0x005c, 0x0e92, + 0x0e74, 0xffff, 0xffff, 0x0e92, 0x0eb2, 0x0003, 0x0000, 0x0a2d, + 0x0a32, 0x0003, 0x005c, 0x0ed4, 0x0ee7, 0x0ef9, 0x0002, 0x0a35, + 0x0a3d, 0x0006, 0x005c, 0x0f0c, 0x0f0c, 0xffff, 0xffff, 0x0f0c, + 0x0f0c, 0x0006, 0x005c, 0x0f21, 0x0f21, 0xffff, 0xffff, 0x0f21, + 0x0f21, 0x0003, 0x0000, 0x0a49, 0x0a4e, 0x0003, 0x005c, 0x0ed4, + // Entry 46740 - 4677F + 0x0ee7, 0x0ef9, 0x0002, 0x0a51, 0x0a59, 0x0006, 0x005c, 0x0f36, + 0x0f36, 0xffff, 0xffff, 0x0f36, 0x0f36, 0x0006, 0x005c, 0x0f41, + 0x0f41, 0xffff, 0xffff, 0x0f41, 0x0f41, 0x0003, 0x0000, 0x0a65, + 0x0a6a, 0x0003, 0x005c, 0x0f4c, 0x0f69, 0x0f7e, 0x0002, 0x0a6d, + 0x0a75, 0x0006, 0x005c, 0x0fb9, 0x0f9f, 0xffff, 0xffff, 0x0fb9, + 0x0fd3, 0x0006, 0x005c, 0x1005, 0x0feb, 0xffff, 0xffff, 0x1005, + 0x101f, 0x0003, 0x0000, 0x0a81, 0x0a86, 0x0003, 0x005c, 0x1037, + 0x104a, 0x105a, 0x0002, 0x0a89, 0x0a91, 0x0006, 0x005c, 0x106d, + // Entry 46780 - 467BF + 0x106d, 0xffff, 0xffff, 0x106d, 0x106d, 0x0006, 0x005c, 0x1082, + 0x1082, 0xffff, 0xffff, 0x1082, 0x1082, 0x0003, 0x0000, 0x0a9d, + 0x0aa2, 0x0003, 0x005c, 0x1037, 0x104a, 0x105a, 0x0002, 0x0aa5, + 0x0aad, 0x0006, 0x005c, 0x1097, 0x1097, 0xffff, 0xffff, 0x1097, + 0x1097, 0x0006, 0x005c, 0x10a2, 0x10a2, 0xffff, 0xffff, 0x10a2, + 0x10a2, 0x0003, 0x0000, 0x0ab9, 0x0abe, 0x0003, 0x005c, 0x10ad, + 0x10ce, 0x10e9, 0x0002, 0x0ac1, 0x0ac9, 0x0006, 0x005c, 0x112c, + 0x110e, 0xffff, 0xffff, 0x112c, 0x114c, 0x0006, 0x005c, 0x118c, + // Entry 467C0 - 467FF + 0x116e, 0xffff, 0xffff, 0x118c, 0x11ac, 0x0003, 0x0000, 0x0ad5, + 0x0ada, 0x0003, 0x005c, 0x11ce, 0x11e1, 0x11f3, 0x0002, 0x0add, + 0x0ae5, 0x0006, 0x005c, 0x1206, 0x1206, 0xffff, 0xffff, 0x1206, + 0x1206, 0x0006, 0x005c, 0x121b, 0x121b, 0xffff, 0xffff, 0x121b, + 0x121b, 0x0003, 0x0000, 0x0af1, 0x0af6, 0x0003, 0x005c, 0x11ce, + 0x11e1, 0x11f3, 0x0002, 0x0af9, 0x0b01, 0x0006, 0x005c, 0x1230, + 0x1230, 0xffff, 0xffff, 0x1230, 0x1230, 0x0006, 0x005c, 0x123b, + 0x123b, 0xffff, 0xffff, 0x123b, 0x123b, 0x0003, 0x0000, 0x0b0d, + // Entry 46800 - 4683F + 0x0b12, 0x0003, 0x005c, 0x1246, 0x1267, 0x1280, 0x0002, 0x0b15, + 0x0b1d, 0x0006, 0x005c, 0x12c3, 0x12a5, 0xffff, 0xffff, 0x12c3, + 0x12e1, 0x0006, 0x005c, 0x131b, 0x12fd, 0xffff, 0xffff, 0x131b, + 0x1339, 0x0003, 0x0000, 0x0b29, 0x0b2e, 0x0003, 0x005c, 0x1355, + 0x1368, 0x1378, 0x0002, 0x0b31, 0x0b39, 0x0006, 0x005c, 0x138b, + 0x138b, 0xffff, 0xffff, 0x138b, 0x138b, 0x0006, 0x005c, 0x13a0, + 0x13a0, 0xffff, 0xffff, 0x13a0, 0x13a0, 0x0003, 0x0000, 0x0b45, + 0x0b4a, 0x0003, 0x005c, 0x1355, 0x1368, 0x1378, 0x0002, 0x0b4d, + // Entry 46840 - 4687F + 0x0b55, 0x0006, 0x005c, 0x13b5, 0x13b5, 0xffff, 0xffff, 0x13b5, + 0x13b5, 0x0006, 0x005c, 0x13c0, 0x13c0, 0xffff, 0xffff, 0x13c0, + 0x13c0, 0x0003, 0x0000, 0x0b61, 0x0b66, 0x0003, 0x005c, 0x13cb, + 0x13ec, 0x1405, 0x0002, 0x0b69, 0x0b71, 0x0006, 0x005c, 0x1448, + 0x142a, 0xffff, 0xffff, 0x1448, 0x1466, 0x0006, 0x005c, 0x14a0, + 0x1482, 0xffff, 0xffff, 0x14a0, 0x14be, 0x0003, 0x0000, 0x0b7d, + 0x0b82, 0x0003, 0x005c, 0x14da, 0x14ed, 0x14fd, 0x0002, 0x0b85, + 0x0b8d, 0x0006, 0x005c, 0x1510, 0x1510, 0xffff, 0xffff, 0x1510, + // Entry 46880 - 468BF + 0x1510, 0x0006, 0x005c, 0x1525, 0x1525, 0xffff, 0xffff, 0x1525, + 0x1525, 0x0003, 0x0000, 0x0b99, 0x0b9e, 0x0003, 0x005c, 0x14da, + 0x14ed, 0x14fd, 0x0002, 0x0ba1, 0x0ba9, 0x0006, 0x005c, 0x153a, + 0x153a, 0xffff, 0xffff, 0x153a, 0x153a, 0x0006, 0x005c, 0x1545, + 0x1545, 0xffff, 0xffff, 0x1545, 0x1545, 0x0001, 0x0bb3, 0x0001, + 0x0007, 0x0892, 0x0001, 0x0bb8, 0x0001, 0x0007, 0x0892, 0x0001, + 0x0bbd, 0x0001, 0x0007, 0x0892, 0x0003, 0x0bc4, 0x0bc7, 0x0bcb, + 0x0001, 0x0009, 0x1ad5, 0x0002, 0x005c, 0xffff, 0x1550, 0x0002, + // Entry 468C0 - 468FF + 0x0bce, 0x0bd6, 0x0006, 0x005c, 0x1579, 0x1563, 0xffff, 0xffff, + 0x1579, 0x1591, 0x0006, 0x005c, 0x15c1, 0x15ab, 0xffff, 0xffff, + 0x15c1, 0x15d9, 0x0003, 0x0be2, 0x0be5, 0x0be9, 0x0001, 0x000e, + 0x029c, 0x0002, 0x005c, 0xffff, 0x1550, 0x0002, 0x0bec, 0x0bf4, + 0x0006, 0x005c, 0x1607, 0x15f3, 0xffff, 0xffff, 0x1607, 0x1607, + 0x0006, 0x005c, 0x162e, 0x161a, 0xffff, 0xffff, 0x162e, 0x162e, + 0x0003, 0x0c00, 0x0c03, 0x0c07, 0x0001, 0x000e, 0x029c, 0x0002, + 0x005c, 0xffff, 0x1550, 0x0002, 0x0c0a, 0x0c12, 0x0006, 0x005c, + // Entry 46900 - 4693F + 0x1641, 0x1641, 0xffff, 0xffff, 0x1641, 0x1641, 0x0006, 0x005c, + 0x164a, 0x164a, 0xffff, 0xffff, 0x164a, 0x164a, 0x0003, 0x0c1e, + 0x0c21, 0x0c25, 0x0001, 0x0009, 0x1b83, 0x0002, 0x005c, 0xffff, + 0x1653, 0x0002, 0x0c28, 0x0c30, 0x0006, 0x005c, 0x1686, 0x166a, + 0xffff, 0xffff, 0x1686, 0x16a2, 0x0006, 0x005c, 0x16d8, 0x16bc, + 0xffff, 0xffff, 0x16d8, 0x16f4, 0x0003, 0x0c3c, 0x0000, 0x0c3f, + 0x0001, 0x0012, 0x0dff, 0x0002, 0x0c42, 0x0c4a, 0x0006, 0x005c, + 0x170e, 0x170e, 0xffff, 0xffff, 0x170e, 0x170e, 0x0006, 0x005c, + // Entry 46940 - 4697F + 0x1725, 0x1725, 0xffff, 0xffff, 0x1725, 0x1725, 0x0003, 0x0c56, + 0x0000, 0x0c59, 0x0001, 0x0009, 0x1c15, 0x0002, 0x0c5c, 0x0c64, + 0x0006, 0x005c, 0x173c, 0x173c, 0xffff, 0xffff, 0x173c, 0x173c, + 0x0006, 0x005c, 0x1749, 0x1749, 0xffff, 0xffff, 0x1749, 0x1749, + 0x0003, 0x0c70, 0x0c73, 0x0c77, 0x0001, 0x0008, 0x1cca, 0x0002, + 0x005c, 0xffff, 0x1756, 0x0002, 0x0c7a, 0x0c82, 0x0006, 0x005c, + 0x1781, 0x1763, 0xffff, 0xffff, 0x1781, 0x179f, 0x0006, 0x005c, + 0x17d9, 0x17bb, 0xffff, 0xffff, 0x17d9, 0x17f7, 0x0003, 0x0c8e, + // Entry 46980 - 469BF + 0x0000, 0x0c91, 0x0001, 0x0012, 0x0e71, 0x0002, 0x0c94, 0x0c9c, + 0x0006, 0x005c, 0x1813, 0x1813, 0xffff, 0xffff, 0x1813, 0x1813, + 0x0006, 0x005c, 0x182b, 0x182b, 0xffff, 0xffff, 0x182b, 0x182b, + 0x0003, 0x0ca8, 0x0000, 0x0cab, 0x0001, 0x000e, 0x01f0, 0x0002, + 0x0cae, 0x0cb6, 0x0006, 0x005c, 0x1842, 0x1842, 0xffff, 0xffff, + 0x1842, 0x1842, 0x0006, 0x005c, 0x184a, 0x184a, 0xffff, 0xffff, + 0x184a, 0x184a, 0x0001, 0x0cc0, 0x0001, 0x005c, 0x1852, 0x0001, + 0x0cc5, 0x0001, 0x005c, 0x186a, 0x0001, 0x0cca, 0x0001, 0x005c, + // Entry 469C0 - 469FF + 0x186a, 0x0004, 0x0cd2, 0x0cd7, 0x0cdc, 0x0ceb, 0x0003, 0x0000, + 0x1dc7, 0x39fb, 0x3cac, 0x0003, 0x0000, 0x1de0, 0x3cb0, 0x3ccd, + 0x0002, 0x0000, 0x0cdf, 0x0003, 0x0000, 0x0ce6, 0x0ce3, 0x0001, + 0x005c, 0x187b, 0x0003, 0x005c, 0xffff, 0x18ba, 0x18f0, 0x0002, + 0x0000, 0x0cee, 0x0003, 0x0cf2, 0x0e32, 0x0d92, 0x009e, 0x005c, + 0xffff, 0xffff, 0xffff, 0xffff, 0x19f5, 0x1a8b, 0x1b63, 0x1bd2, + 0x1c80, 0x1d22, 0x1df4, 0x1e8a, 0x1f01, 0x202b, 0x20cd, 0x2142, + 0x21ea, 0x2253, 0x22e9, 0x23a3, 0x249c, 0x254a, 0x25f2, 0x2673, + // Entry 46A00 - 46A3F + 0x26fa, 0xffff, 0xffff, 0x2789, 0xffff, 0x281a, 0xffff, 0x28ac, + 0x2909, 0x2960, 0x29bd, 0xffff, 0xffff, 0x2a66, 0x2ad5, 0x2b61, + 0xffff, 0xffff, 0xffff, 0x2c00, 0xffff, 0x2c7e, 0x2d26, 0xffff, + 0x2ddc, 0x2e72, 0x2f11, 0xffff, 0xffff, 0xffff, 0xffff, 0x3019, + 0xffff, 0xffff, 0x30c5, 0x3177, 0xffff, 0xffff, 0x325b, 0x330c, + 0x3375, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x347c, + 0x34d3, 0x353c, 0x35a5, 0x3608, 0xffff, 0xffff, 0x371e, 0xffff, + 0x3788, 0xffff, 0xffff, 0x3837, 0xffff, 0x3911, 0xffff, 0xffff, + // Entry 46A40 - 46A7F + 0xffff, 0xffff, 0x39dd, 0xffff, 0x3a59, 0x3b43, 0x3c24, 0x3c9c, + 0xffff, 0xffff, 0xffff, 0x3d22, 0x3db8, 0x3e48, 0xffff, 0xffff, + 0x3ee7, 0x3fc0, 0x4041, 0x4098, 0xffff, 0xffff, 0x4139, 0x41a8, + 0x41ff, 0xffff, 0x4289, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x43ea, 0x4453, 0x44ce, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x45c3, 0xffff, 0xffff, 0x4652, 0xffff, 0x46b8, + 0xffff, 0x473a, 0x47a3, 0x481e, 0xffff, 0x489a, 0x491b, 0xffff, + 0xffff, 0xffff, 0x49c3, 0x4a26, 0xffff, 0xffff, 0x1924, 0x1aee, + // Entry 46A80 - 46ABF + 0x1f58, 0x1fbf, 0xffff, 0xffff, 0x38a3, 0x4356, 0x009e, 0x005c, + 0x1984, 0x1999, 0x19bd, 0x19dd, 0x1a13, 0x1a98, 0x1b74, 0x1bf8, + 0x1ca2, 0x1d5c, 0x1e1a, 0x1ea9, 0x1f0a, 0x204d, 0x20e0, 0x2166, + 0x21f9, 0x2279, 0x2313, 0x23ea, 0x24c2, 0x256e, 0x2609, 0x268c, + 0x270d, 0x276f, 0x277a, 0x279a, 0x27f8, 0x282e, 0x289d, 0x28b7, + 0x2912, 0x296b, 0x29d0, 0x2a32, 0x2a4b, 0x2a77, 0x2aed, 0x2b6a, + 0x2bb8, 0x2bc5, 0x2be2, 0x2c11, 0x2c6f, 0x2ca2, 0x2d46, 0x2dc2, + 0x2dfa, 0x2e93, 0x2f1c, 0x2f6e, 0x2f92, 0x2fe9, 0x300c, 0x3026, + // Entry 46AC0 - 46AFF + 0x307c, 0x3095, 0x30ed, 0x319d, 0x322e, 0x324e, 0x328a, 0x331b, + 0x337e, 0x33cc, 0x33d7, 0x33f5, 0x3408, 0x3432, 0x3458, 0x3485, + 0x34e2, 0x354b, 0x35b2, 0x3638, 0x36d4, 0x36fa, 0x3729, 0x377b, + 0x379d, 0x3803, 0x3826, 0x3847, 0x3900, 0x3920, 0x397a, 0x398b, + 0x399c, 0x39b9, 0x39ee, 0x3a4c, 0x3a9b, 0x3b82, 0x3c38, 0x3ca9, + 0x3cff, 0x3d0c, 0x3d17, 0x3d40, 0x3dd4, 0x3e61, 0x3ecf, 0x3ed8, + 0x3f0c, 0x3fd7, 0x404a, 0x40a9, 0x4107, 0x4112, 0x414a, 0x41b1, + 0x4212, 0x4274, 0x42ab, 0x432b, 0x433a, 0x4347, 0x43ce, 0x43dd, + // Entry 46B00 - 46B3F + 0x43f9, 0x446e, 0x44d9, 0x452b, 0x4551, 0x4562, 0x4586, 0x45a0, + 0x45af, 0x45b8, 0x45d2, 0x462c, 0x4643, 0x465d, 0x46af, 0x46cb, + 0x472d, 0x4749, 0x47b8, 0x482d, 0x4887, 0x48b1, 0x492e, 0x4990, + 0x499d, 0x49a6, 0x49d0, 0x4a3f, 0x3225, 0x3f92, 0x1938, 0x1b09, + 0x1f6e, 0x1fd7, 0x2892, 0x3814, 0x38ae, 0x436a, 0x009e, 0x005c, + 0xffff, 0xffff, 0xffff, 0xffff, 0x1a54, 0x1ac8, 0x1ba8, 0x1c41, + 0x1ce7, 0x1dad, 0x1e57, 0x1eda, 0x1f36, 0x2092, 0x2116, 0x21ad, + 0x222b, 0x22b6, 0x2360, 0x2448, 0x250b, 0x25b5, 0x2643, 0x26c8, + // Entry 46B40 - 46B7F + 0x2743, 0xffff, 0xffff, 0x27ce, 0xffff, 0x2865, 0xffff, 0x28e5, + 0x293e, 0x2999, 0x2a06, 0xffff, 0xffff, 0x2aab, 0x2b28, 0x2b96, + 0xffff, 0xffff, 0xffff, 0x2c45, 0xffff, 0x2ce9, 0x2d89, 0xffff, + 0x2e3b, 0x2ed7, 0x2f4a, 0xffff, 0xffff, 0xffff, 0xffff, 0x3056, + 0xffff, 0xffff, 0x3136, 0x31e6, 0xffff, 0xffff, 0x32d0, 0x334d, + 0x33aa, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x34b1, + 0x3514, 0x357d, 0x35e2, 0x368b, 0xffff, 0xffff, 0x3757, 0xffff, + 0x37d5, 0xffff, 0xffff, 0x387a, 0xffff, 0x3952, 0xffff, 0xffff, + // Entry 46B80 - 46BBF + 0xffff, 0xffff, 0x3a22, 0xffff, 0x3af4, 0x3bd8, 0x3c6f, 0x3cd9, + 0xffff, 0xffff, 0xffff, 0x3d81, 0x3e13, 0x3e9d, 0xffff, 0xffff, + 0x3f54, 0x4011, 0x4076, 0x40dd, 0xffff, 0xffff, 0x417e, 0x41dd, + 0x4248, 0xffff, 0x42f0, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x442b, 0x44a3, 0x4507, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x4604, 0xffff, 0xffff, 0x468b, 0xffff, 0x4701, + 0xffff, 0x477b, 0x47f0, 0x485f, 0xffff, 0x48eb, 0x4964, 0xffff, + 0xffff, 0xffff, 0x4a00, 0x4a7b, 0xffff, 0xffff, 0x1963, 0x1b3b, + // Entry 46BC0 - 46BFF + 0x1f9c, 0x2006, 0xffff, 0xffff, 0x38dc, 0x43a1, 0x0001, 0x0002, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, + 0x0025, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0014, 0x0000, 0x0004, 0x0022, 0x001c, 0x0019, 0x001f, 0x0001, + 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, + 0x0001, 0x0000, 0x0546, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x002e, 0x0000, 0x0004, 0x003c, 0x0036, 0x0033, + 0x0039, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, + // Entry 46C00 - 46C3F + 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0003, 0x0004, 0x0000, + 0x01a3, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000d, 0x0025, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0014, 0x0004, 0x0022, 0x001c, 0x0019, 0x001f, 0x0001, 0x0002, + 0x031a, 0x0001, 0x0000, 0x049a, 0x0001, 0x0000, 0x04a5, 0x0001, + 0x0002, 0x032c, 0x0008, 0x002e, 0x0093, 0x00ea, 0x011f, 0x0160, + 0x0170, 0x0181, 0x0192, 0x0002, 0x0031, 0x0062, 0x0003, 0x0035, + 0x0044, 0x0053, 0x000d, 0x005d, 0xffff, 0x0000, 0x0005, 0x000a, + // Entry 46C40 - 46C7F + 0x000f, 0x0014, 0x0019, 0x001e, 0x0023, 0x0028, 0x002d, 0x0032, + 0x0037, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, + 0x000d, 0x005d, 0xffff, 0x003c, 0x0045, 0x0051, 0x0059, 0x005e, + 0x0068, 0x006f, 0x0078, 0x007f, 0x0085, 0x008e, 0x0099, 0x0003, + 0x0066, 0x0075, 0x0084, 0x000d, 0x005d, 0xffff, 0x0000, 0x0005, + 0x000a, 0x000f, 0x0014, 0x0019, 0x001e, 0x0023, 0x0028, 0x002d, + 0x0032, 0x0037, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + // Entry 46C80 - 46CBF + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, + 0x3a0c, 0x000d, 0x005d, 0xffff, 0x003c, 0x0045, 0x0051, 0x0059, + 0x005e, 0x0068, 0x006f, 0x0078, 0x007f, 0x0085, 0x008e, 0x0099, + 0x0002, 0x0096, 0x00c0, 0x0005, 0x009c, 0x00a5, 0x00b7, 0x0000, + 0x00ae, 0x0007, 0x005d, 0x00a1, 0x00a6, 0x00ab, 0x00b0, 0x0023, + 0x00b5, 0x00ba, 0x0007, 0x0000, 0x2b3a, 0x2b3c, 0x3a8d, 0x2151, + 0x3a8d, 0x2b4e, 0x2b3a, 0x0007, 0x005d, 0x00a1, 0x00a6, 0x00ab, + 0x00b0, 0x0023, 0x00b5, 0x00ba, 0x0007, 0x005d, 0x00bf, 0x00cb, + // Entry 46CC0 - 46CFF + 0x00d6, 0x00e2, 0x00ee, 0x00f8, 0x0104, 0x0005, 0x00c6, 0x00cf, + 0x00e1, 0x0000, 0x00d8, 0x0007, 0x005d, 0x00a1, 0x00a6, 0x00ab, + 0x00b0, 0x0023, 0x00b5, 0x00ba, 0x0007, 0x0000, 0x2b3a, 0x2b3c, + 0x3a8d, 0x2151, 0x3a8d, 0x2b4e, 0x2b3a, 0x0007, 0x005d, 0x00a1, + 0x00a6, 0x00ab, 0x00b0, 0x0023, 0x00b5, 0x00ba, 0x0007, 0x005d, + 0x00bf, 0x00cb, 0x00d6, 0x00e2, 0x00ee, 0x00f8, 0x0104, 0x0002, + 0x00ed, 0x0106, 0x0003, 0x00f1, 0x00f8, 0x00ff, 0x0005, 0x005a, + 0xffff, 0x0321, 0x0324, 0x0327, 0x032a, 0x0005, 0x0000, 0xffff, + // Entry 46D00 - 46D3F + 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x005d, 0xffff, 0x0113, + 0x0127, 0x013c, 0x0151, 0x0003, 0x010a, 0x0111, 0x0118, 0x0005, + 0x005a, 0xffff, 0x0321, 0x0324, 0x0327, 0x032a, 0x0005, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x005d, 0xffff, + 0x0113, 0x0127, 0x013c, 0x0151, 0x0002, 0x0122, 0x0141, 0x0003, + 0x0126, 0x012f, 0x0138, 0x0002, 0x0129, 0x012c, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0002, 0x0132, 0x0135, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0002, 0x013b, 0x013e, + // Entry 46D40 - 46D7F + 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0003, 0x0145, + 0x014e, 0x0157, 0x0002, 0x0148, 0x014b, 0x0001, 0x0000, 0x04ef, + 0x0001, 0x0000, 0x04f2, 0x0002, 0x0151, 0x0154, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0002, 0x015a, 0x015d, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0003, 0x016a, 0x0000, + 0x0164, 0x0001, 0x0166, 0x0002, 0x0000, 0x04f5, 0x3c5a, 0x0001, + 0x016c, 0x0002, 0x0000, 0x04f5, 0x3c5a, 0x0004, 0x017e, 0x0178, + 0x0175, 0x017b, 0x0001, 0x0000, 0x04fc, 0x0001, 0x0000, 0x050b, + // Entry 46D80 - 46DBF + 0x0001, 0x0000, 0x0514, 0x0001, 0x0000, 0x051c, 0x0004, 0x018f, + 0x0189, 0x0186, 0x018c, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, + 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, + 0x01a0, 0x019a, 0x0197, 0x019d, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0004, 0x01a8, 0x0000, 0x0000, 0x0000, 0x0002, 0x0000, 0x1dc7, + 0x39fb, 0x0002, 0x0003, 0x00e9, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, 0x0000, 0x0000, + // Entry 46DC0 - 46DFF + 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, 0x0023, + 0x001d, 0x001a, 0x0020, 0x0001, 0x0006, 0x000d, 0x0001, 0x0002, + 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0002, 0x0587, 0x0008, + 0x002f, 0x0066, 0x008b, 0x009f, 0x00b7, 0x00c7, 0x00d8, 0x0000, + 0x0002, 0x0032, 0x0054, 0x0003, 0x0036, 0x0000, 0x0045, 0x000d, + 0x0006, 0xffff, 0x001e, 0x44b4, 0x432f, 0x42a5, 0x43e5, 0x44b8, + 0x44bc, 0x44c0, 0x433b, 0x43a9, 0x44c4, 0x422c, 0x000d, 0x0006, + 0xffff, 0x004e, 0x0056, 0x44c8, 0x4349, 0x43e5, 0x4351, 0x4357, + // Entry 46E00 - 46E3F + 0x435e, 0x44ce, 0x440a, 0x44d7, 0x4419, 0x0002, 0x0000, 0x0057, + 0x000d, 0x0000, 0xffff, 0x257b, 0x2b4e, 0x2b3c, 0x2b42, 0x2b3c, + 0x257b, 0x257b, 0x2b42, 0x2b3a, 0x2b50, 0x2b40, 0x2b3e, 0x0002, + 0x0069, 0x007f, 0x0003, 0x006d, 0x0000, 0x0076, 0x0007, 0x0006, + 0x009e, 0x44df, 0x44e3, 0x44e7, 0x44eb, 0x44ef, 0x44f3, 0x0007, + 0x0037, 0x0313, 0x031d, 0x68cb, 0x032f, 0x68d3, 0x68dc, 0x68e3, + 0x0002, 0x0000, 0x0082, 0x0007, 0x0000, 0x257b, 0x257b, 0x257b, + 0x257b, 0x2b42, 0x204d, 0x257b, 0x0001, 0x008d, 0x0003, 0x0091, + // Entry 46E40 - 46E7F + 0x0000, 0x0098, 0x0005, 0x0006, 0xffff, 0x00f6, 0x00f9, 0x00fc, + 0x00ff, 0x0005, 0x0006, 0xffff, 0x0102, 0x0109, 0x0110, 0x0117, + 0x0001, 0x00a1, 0x0003, 0x00a5, 0x0000, 0x00ae, 0x0002, 0x00a8, + 0x00ab, 0x0001, 0x0037, 0x0351, 0x0001, 0x0037, 0x0357, 0x0002, + 0x00b1, 0x00b4, 0x0001, 0x0037, 0x0351, 0x0001, 0x0037, 0x0357, + 0x0003, 0x00c1, 0x0000, 0x00bb, 0x0001, 0x00bd, 0x0002, 0x0037, + 0x0361, 0x0371, 0x0001, 0x00c3, 0x0002, 0x0017, 0x01f4, 0x01f7, + 0x0004, 0x00d5, 0x00cf, 0x00cc, 0x00d2, 0x0001, 0x0006, 0x015b, + // Entry 46E80 - 46EBF + 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, 0x0002, + 0x08e8, 0x0004, 0x00e6, 0x00e0, 0x00dd, 0x00e3, 0x0001, 0x0000, + 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, + 0x0000, 0x0546, 0x0040, 0x012a, 0x0000, 0x0000, 0x012f, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0134, 0x0000, 0x0000, 0x0139, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x013e, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 46EC0 - 46EFF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0149, + 0x0000, 0x014e, 0x0000, 0x0000, 0x0153, 0x0000, 0x0000, 0x0158, + 0x0000, 0x0000, 0x015d, 0x0001, 0x012c, 0x0001, 0x0037, 0x0381, + 0x0001, 0x0131, 0x0001, 0x0037, 0x0387, 0x0001, 0x0136, 0x0001, + 0x0017, 0x0200, 0x0001, 0x013b, 0x0001, 0x0037, 0x038c, 0x0002, + 0x0141, 0x0144, 0x0001, 0x0037, 0x0393, 0x0003, 0x0037, 0x0399, + 0x039e, 0x03a2, 0x0001, 0x014b, 0x0001, 0x0037, 0x03a8, 0x0001, + // Entry 46F00 - 46F3F + 0x0150, 0x0001, 0x0009, 0x0308, 0x0001, 0x0155, 0x0001, 0x0037, + 0x03b5, 0x0001, 0x015a, 0x0001, 0x0009, 0x030c, 0x0001, 0x015f, + 0x0001, 0x0037, 0x03bd, 0x0003, 0x0004, 0x01c0, 0x046c, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0038, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, + 0x0027, 0x0004, 0x0024, 0x001e, 0x001b, 0x0021, 0x0001, 0x005d, + 0x0164, 0x0001, 0x0048, 0x15fb, 0x0001, 0x0048, 0x1607, 0x0001, + 0x005d, 0x0189, 0x0004, 0x0035, 0x002f, 0x002c, 0x0032, 0x0001, + // Entry 46F40 - 46F7F + 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, + 0x0001, 0x0006, 0x022e, 0x0008, 0x0041, 0x00a6, 0x00fd, 0x0132, + 0x0173, 0x018d, 0x019e, 0x01af, 0x0002, 0x0044, 0x0075, 0x0003, + 0x0048, 0x0057, 0x0066, 0x000d, 0x005d, 0xffff, 0x0196, 0x019f, + 0x01a8, 0x01af, 0x01b6, 0x01bd, 0x01c4, 0x01cb, 0x01d2, 0x01d9, + 0x01e0, 0x01e7, 0x000d, 0x0039, 0xffff, 0x11a5, 0x2037, 0x203a, + 0x203d, 0x2040, 0x1365, 0x2037, 0x2043, 0x1365, 0x2043, 0x2046, + 0x2043, 0x000d, 0x005d, 0xffff, 0x01ee, 0x0201, 0x0210, 0x0226, + // Entry 46F80 - 46FBF + 0x023a, 0x024a, 0x025a, 0x0268, 0x0282, 0x029a, 0x02ab, 0x02bc, + 0x0003, 0x0079, 0x0088, 0x0097, 0x000d, 0x005d, 0xffff, 0x0196, + 0x019f, 0x01a8, 0x01af, 0x01b6, 0x01bd, 0x01c4, 0x01cb, 0x01d2, + 0x01d9, 0x01e0, 0x01e7, 0x000d, 0x0039, 0xffff, 0x11a5, 0x2037, + 0x203a, 0x203d, 0x2040, 0x1365, 0x2037, 0x2043, 0x1365, 0x2043, + 0x2046, 0x2043, 0x000d, 0x005d, 0xffff, 0x02cd, 0x02e0, 0x02ef, + 0x0305, 0x0319, 0x0327, 0x0335, 0x0341, 0x0359, 0x036f, 0x0380, + 0x02bc, 0x0002, 0x00a9, 0x00d3, 0x0005, 0x00af, 0x00b8, 0x00ca, + // Entry 46FC0 - 46FFF + 0x0000, 0x00c1, 0x0007, 0x005d, 0x0391, 0x0396, 0x039b, 0x03a0, + 0x03a5, 0x03aa, 0x03af, 0x0007, 0x0039, 0x1365, 0x1365, 0x2037, + 0x2046, 0x2049, 0x1365, 0x2046, 0x0007, 0x005d, 0x0391, 0x0396, + 0x039b, 0x03a0, 0x03a5, 0x03aa, 0x03af, 0x0007, 0x005d, 0x03b4, + 0x03cd, 0x03e6, 0x03ff, 0x040c, 0x041b, 0x042c, 0x0005, 0x00d9, + 0x00e2, 0x00f4, 0x0000, 0x00eb, 0x0007, 0x005d, 0x0391, 0x0396, + 0x039b, 0x03a0, 0x03a5, 0x03aa, 0x03af, 0x0007, 0x0039, 0x1365, + 0x1365, 0x2037, 0x2046, 0x2049, 0x1365, 0x2046, 0x0007, 0x005d, + // Entry 47000 - 4703F + 0x0391, 0x0396, 0x039b, 0x03a0, 0x03a5, 0x03aa, 0x03af, 0x0007, + 0x005d, 0x03b4, 0x03cd, 0x03e6, 0x03ff, 0x040c, 0x041b, 0x042c, + 0x0002, 0x0100, 0x0119, 0x0003, 0x0104, 0x010b, 0x0112, 0x0005, + 0x005d, 0xffff, 0x043b, 0x0447, 0x0451, 0x045b, 0x0005, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x005d, 0xffff, + 0x0465, 0x047f, 0x0497, 0x04af, 0x0003, 0x011d, 0x0124, 0x012b, + 0x0005, 0x005d, 0xffff, 0x043b, 0x0447, 0x0451, 0x045b, 0x0005, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x005d, + // Entry 47040 - 4707F + 0xffff, 0x0465, 0x047f, 0x0497, 0x04af, 0x0002, 0x0135, 0x0154, + 0x0003, 0x0139, 0x0142, 0x014b, 0x0002, 0x013c, 0x013f, 0x0001, + 0x005d, 0x04c7, 0x0001, 0x005d, 0x04cc, 0x0002, 0x0145, 0x0148, + 0x0001, 0x005d, 0x04c7, 0x0001, 0x005d, 0x04cc, 0x0002, 0x014e, + 0x0151, 0x0001, 0x005d, 0x04c7, 0x0001, 0x005d, 0x04cc, 0x0003, + 0x0158, 0x0161, 0x016a, 0x0002, 0x015b, 0x015e, 0x0001, 0x005d, + 0x04c7, 0x0001, 0x005d, 0x04cc, 0x0002, 0x0164, 0x0167, 0x0001, + 0x005d, 0x04c7, 0x0001, 0x005d, 0x04cc, 0x0002, 0x016d, 0x0170, + // Entry 47080 - 470BF + 0x0001, 0x005d, 0x04c7, 0x0001, 0x005d, 0x04cc, 0x0003, 0x0182, + 0x0000, 0x0177, 0x0002, 0x017a, 0x017e, 0x0002, 0x005d, 0x04d1, + 0x0506, 0x0002, 0x005d, 0x04dd, 0x050d, 0x0002, 0x0185, 0x0189, + 0x0002, 0x005d, 0x04d1, 0x0506, 0x0002, 0x0000, 0x04f5, 0x3c5a, + 0x0004, 0x019b, 0x0195, 0x0192, 0x0198, 0x0001, 0x005d, 0x0529, + 0x0001, 0x0048, 0x1b86, 0x0001, 0x0048, 0x1b90, 0x0001, 0x0020, + 0x035e, 0x0004, 0x01ac, 0x01a6, 0x01a3, 0x01a9, 0x0001, 0x0000, + 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, + // Entry 470C0 - 470FF + 0x0000, 0x0546, 0x0004, 0x01bd, 0x01b7, 0x01b4, 0x01ba, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0040, 0x0201, 0x0000, 0x0000, 0x0206, + 0x0000, 0x0000, 0x021b, 0x0230, 0x0240, 0x0250, 0x0000, 0x0000, + 0x0265, 0x027e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0286, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x029d, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x02a2, 0x02b4, 0x02c6, 0x02d8, 0x02ea, 0x02fc, + 0x030e, 0x0320, 0x0332, 0x0344, 0x0356, 0x0368, 0x037a, 0x038c, + // Entry 47100 - 4713F + 0x039e, 0x03b0, 0x03c2, 0x03d4, 0x03e6, 0x03f8, 0x040a, 0x0000, + 0x041c, 0x0000, 0x0421, 0x0000, 0x0000, 0x0435, 0x0000, 0x0000, + 0x0449, 0x045d, 0x0000, 0x0467, 0x0001, 0x0203, 0x0001, 0x005d, + 0x054c, 0x0003, 0x020a, 0x020d, 0x0212, 0x0001, 0x005d, 0x0555, + 0x0003, 0x005d, 0x055c, 0x056d, 0x0578, 0x0002, 0x0215, 0x0218, + 0x0001, 0x005d, 0x0583, 0x0001, 0x005d, 0x0596, 0x0003, 0x021f, + 0x0222, 0x0227, 0x0001, 0x005d, 0x05bd, 0x0003, 0x005d, 0x05cc, + 0x05ec, 0x0604, 0x0002, 0x022a, 0x022d, 0x0001, 0x005d, 0x0622, + // Entry 47140 - 4717F + 0x0001, 0x005d, 0x0641, 0x0003, 0x0234, 0x0000, 0x0237, 0x0001, + 0x005d, 0x0674, 0x0002, 0x023a, 0x023d, 0x0001, 0x005d, 0x0622, + 0x0001, 0x005d, 0x067c, 0x0003, 0x0244, 0x0000, 0x0247, 0x0001, + 0x005d, 0x0674, 0x0002, 0x024a, 0x024d, 0x0001, 0x005d, 0x0622, + 0x0001, 0x005d, 0x067c, 0x0003, 0x0254, 0x0257, 0x025c, 0x0001, + 0x005d, 0x06a4, 0x0003, 0x005d, 0x06a9, 0x06bb, 0x06c5, 0x0002, + 0x025f, 0x0262, 0x0001, 0x005d, 0x06db, 0x0001, 0x005d, 0x06ec, + 0x0004, 0x026a, 0x026d, 0x0272, 0x027b, 0x0001, 0x005d, 0x0711, + // Entry 47180 - 471BF + 0x0003, 0x005d, 0x0720, 0x073c, 0x0750, 0x0002, 0x0275, 0x0278, + 0x0001, 0x005d, 0x076a, 0x0001, 0x005d, 0x0785, 0x0001, 0x005d, + 0x07b4, 0x0004, 0x0000, 0x0000, 0x0000, 0x0283, 0x0001, 0x005d, + 0x07b4, 0x0003, 0x028a, 0x028d, 0x0294, 0x0001, 0x005d, 0x07cb, + 0x0005, 0x005d, 0x07e8, 0x07f7, 0x0802, 0x07d2, 0x080f, 0x0002, + 0x0297, 0x029a, 0x0001, 0x005d, 0x081a, 0x0001, 0x005d, 0x082d, + 0x0001, 0x029f, 0x0001, 0x005d, 0x0854, 0x0003, 0x0000, 0x02a6, + 0x02ab, 0x0003, 0x005d, 0x086c, 0x0892, 0x08b0, 0x0002, 0x02ae, + // Entry 471C0 - 471FF + 0x02b1, 0x0001, 0x005d, 0x08d4, 0x0001, 0x005d, 0x08f7, 0x0003, + 0x0000, 0x02b8, 0x02bd, 0x0003, 0x005d, 0x0930, 0x0943, 0x094e, + 0x0002, 0x02c0, 0x02c3, 0x0001, 0x005d, 0x08d4, 0x0001, 0x005d, + 0x095f, 0x0003, 0x0000, 0x02ca, 0x02cf, 0x0003, 0x005d, 0x0930, + 0x0943, 0x094e, 0x0002, 0x02d2, 0x02d5, 0x0001, 0x005d, 0x08d4, + 0x0001, 0x005d, 0x095f, 0x0003, 0x0000, 0x02dc, 0x02e1, 0x0003, + 0x005d, 0x0985, 0x09ab, 0x09c9, 0x0002, 0x02e4, 0x02e7, 0x0001, + 0x005d, 0x09ed, 0x0001, 0x005d, 0x0a12, 0x0003, 0x0000, 0x02ee, + // Entry 47200 - 4723F + 0x02f3, 0x0003, 0x005d, 0x0a4b, 0x0a5e, 0x0a69, 0x0002, 0x02f6, + 0x02f9, 0x0001, 0x005d, 0x09ed, 0x0001, 0x005d, 0x0a7a, 0x0003, + 0x0000, 0x0300, 0x0305, 0x0003, 0x005d, 0x0a4b, 0x0a5e, 0x0a69, + 0x0002, 0x0308, 0x030b, 0x0001, 0x005d, 0x09ed, 0x0001, 0x005d, + 0x0a7a, 0x0003, 0x0000, 0x0312, 0x0317, 0x0003, 0x005d, 0x0aa0, + 0x0ac6, 0x0ae4, 0x0002, 0x031a, 0x031d, 0x0001, 0x005d, 0x0b08, + 0x0001, 0x005d, 0x0b2d, 0x0003, 0x0000, 0x0324, 0x0329, 0x0003, + 0x005d, 0x0b66, 0x0b79, 0x0b84, 0x0002, 0x032c, 0x032f, 0x0001, + // Entry 47240 - 4727F + 0x005d, 0x0b08, 0x0001, 0x005d, 0x0b95, 0x0003, 0x0000, 0x0336, + 0x033b, 0x0003, 0x005d, 0x0b66, 0x0b79, 0x0b84, 0x0002, 0x033e, + 0x0341, 0x0001, 0x005d, 0x0b08, 0x0001, 0x005d, 0x0b95, 0x0003, + 0x0000, 0x0348, 0x034d, 0x0003, 0x005d, 0x0bbb, 0x0bd5, 0x0be7, + 0x0002, 0x0350, 0x0353, 0x0001, 0x005d, 0x0bff, 0x0001, 0x005d, + 0x0c16, 0x0003, 0x0000, 0x035a, 0x035f, 0x0003, 0x005d, 0x0c43, + 0x0c56, 0x0c61, 0x0002, 0x0362, 0x0365, 0x0001, 0x005d, 0x0bff, + 0x0001, 0x005d, 0x0c72, 0x0003, 0x0000, 0x036c, 0x0371, 0x0003, + // Entry 47280 - 472BF + 0x005d, 0x0c43, 0x0c56, 0x0c61, 0x0002, 0x0374, 0x0377, 0x0001, + 0x005d, 0x0bff, 0x0001, 0x005d, 0x0c72, 0x0003, 0x0000, 0x037e, + 0x0383, 0x0003, 0x005d, 0x0c98, 0x0cb4, 0x0cc8, 0x0002, 0x0386, + 0x0389, 0x0001, 0x005d, 0x0ce2, 0x0001, 0x005d, 0x0cfd, 0x0003, + 0x0000, 0x0390, 0x0395, 0x0003, 0x005d, 0x0d2c, 0x0d3f, 0x0d4a, + 0x0002, 0x0398, 0x039b, 0x0001, 0x005d, 0x0ce2, 0x0001, 0x005d, + 0x0d5b, 0x0003, 0x0000, 0x03a2, 0x03a7, 0x0003, 0x005d, 0x0d2c, + 0x0d3f, 0x0d4a, 0x0002, 0x03aa, 0x03ad, 0x0001, 0x005d, 0x0ce2, + // Entry 472C0 - 472FF + 0x0001, 0x005d, 0x0d5b, 0x0003, 0x0000, 0x03b4, 0x03b9, 0x0003, + 0x005d, 0x0d81, 0x0d9f, 0x0db5, 0x0002, 0x03bc, 0x03bf, 0x0001, + 0x005d, 0x0dd1, 0x0001, 0x005d, 0x0dec, 0x0003, 0x0000, 0x03c6, + 0x03cb, 0x0003, 0x005d, 0x0e1d, 0x0e30, 0x0e3b, 0x0002, 0x03ce, + 0x03d1, 0x0001, 0x005d, 0x0dd1, 0x0001, 0x005d, 0x0e4c, 0x0003, + 0x0000, 0x03d8, 0x03dd, 0x0003, 0x005d, 0x0e1d, 0x0e30, 0x0e3b, + 0x0002, 0x03e0, 0x03e3, 0x0001, 0x005d, 0x0dd1, 0x0001, 0x005d, + 0x0e4c, 0x0003, 0x0000, 0x03ea, 0x03ef, 0x0003, 0x005d, 0x0e72, + // Entry 47300 - 4733F + 0x0e8e, 0x0ea2, 0x0002, 0x03f2, 0x03f5, 0x0001, 0x005d, 0x0ebc, + 0x0001, 0x005d, 0x0ed5, 0x0003, 0x0000, 0x03fc, 0x0401, 0x0003, + 0x005d, 0x0f04, 0x0f17, 0x0f22, 0x0002, 0x0404, 0x0407, 0x0001, + 0x005d, 0x0ebc, 0x0001, 0x005d, 0x0f33, 0x0003, 0x0000, 0x040e, + 0x0413, 0x0003, 0x005d, 0x0f04, 0x0f17, 0x0f22, 0x0002, 0x0416, + 0x0419, 0x0001, 0x005d, 0x0ebc, 0x0001, 0x005d, 0x0f33, 0x0001, + 0x041e, 0x0001, 0x005d, 0x0f59, 0x0003, 0x0425, 0x0428, 0x042c, + 0x0001, 0x005d, 0x0f63, 0x0002, 0x005d, 0xffff, 0x0f6c, 0x0002, + // Entry 47340 - 4737F + 0x042f, 0x0432, 0x0001, 0x005d, 0x0f7e, 0x0001, 0x005d, 0x0f93, + 0x0003, 0x0439, 0x043c, 0x0440, 0x0001, 0x005d, 0x0fbc, 0x0002, + 0x005d, 0xffff, 0x0fcb, 0x0002, 0x0443, 0x0446, 0x0001, 0x005d, + 0x0fe3, 0x0001, 0x005d, 0x0ffe, 0x0003, 0x044d, 0x0450, 0x0454, + 0x0001, 0x005d, 0x102d, 0x0002, 0x005d, 0xffff, 0x103e, 0x0002, + 0x0457, 0x045a, 0x0001, 0x005d, 0x104d, 0x0001, 0x005d, 0x106a, + 0x0003, 0x0000, 0x0000, 0x0461, 0x0002, 0x0000, 0x0464, 0x0001, + 0x005d, 0x109b, 0x0001, 0x0469, 0x0001, 0x005d, 0x10c3, 0x0004, + // Entry 47380 - 473BF + 0x0000, 0x0000, 0x0000, 0x0471, 0x0002, 0x0000, 0x0474, 0x0003, + 0x0478, 0x05a4, 0x050e, 0x0094, 0x005d, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x10db, 0xffff, 0xffff, 0x1131, 0xffff, 0x118d, + 0xffff, 0x1216, 0x129f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x132e, 0x1384, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 473C0 - 473FF + 0xffff, 0xffff, 0xffff, 0xffff, 0x13f2, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x147d, 0xffff, 0xffff, 0x14d3, + 0xffff, 0xffff, 0xffff, 0x158b, 0xffff, 0x15e7, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1685, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x16ed, 0x1764, 0xffff, 0xffff, 0xffff, + 0xffff, 0x17c6, 0xffff, 0xffff, 0xffff, 0xffff, 0x1845, 0x18cb, + 0x1927, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 47400 - 4743F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1995, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x19fd, 0x1a83, 0xffff, 0xffff, 0xffff, 0x1af1, + 0x1b65, 0x0094, 0x005d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x10ef, 0xffff, 0xffff, 0x1147, 0xffff, 0x11b2, 0xffff, 0x123b, + 0x12c6, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 47440 - 4747F + 0xffff, 0xffff, 0xffff, 0xffff, 0x1342, 0x13a0, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x140c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x145a, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1491, 0xffff, 0xffff, 0x14ed, 0xffff, 0x153b, + 0x1562, 0x15a1, 0xffff, 0x1609, 0x1667, 0xffff, 0xffff, 0xffff, + 0x169f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 47480 - 474BF + 0xffff, 0x170c, 0x177c, 0xffff, 0xffff, 0xffff, 0xffff, 0x17e9, + 0xffff, 0xffff, 0xffff, 0xffff, 0x1869, 0x18e1, 0x1943, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x19af, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1a1d, 0x1a9f, 0xffff, 0xffff, 0xffff, 0x1b0f, 0x1b87, 0x0094, + 0x005d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 474C0 - 474FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x110e, 0xffff, + 0xffff, 0x1168, 0xffff, 0x11e2, 0xffff, 0x126b, 0x12f8, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1361, 0x13c7, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1431, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 47500 - 4753F + 0x14b0, 0xffff, 0xffff, 0x1512, 0xffff, 0xffff, 0xffff, 0x15c2, + 0xffff, 0x1636, 0xffff, 0xffff, 0xffff, 0xffff, 0x16c4, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1736, + 0x179f, 0xffff, 0xffff, 0xffff, 0xffff, 0x1815, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1898, 0x1902, 0x196a, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x19d4, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 47540 - 4757F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1a4e, 0x1ac6, + 0xffff, 0xffff, 0xffff, 0x1b38, 0x1bb4, 0x0002, 0x0003, 0x00e9, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, + 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, + 0x0000, 0x0000, 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, + 0x0006, 0x000d, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, + 0x0001, 0x0002, 0x0587, 0x0008, 0x002f, 0x0066, 0x008b, 0x009f, + 0x00b7, 0x00c7, 0x00d8, 0x0000, 0x0002, 0x0032, 0x0054, 0x0003, + // Entry 47580 - 475BF + 0x0036, 0x0000, 0x0045, 0x000d, 0x005d, 0xffff, 0x1be5, 0x1be9, + 0x1bed, 0x1bf1, 0x1bf5, 0x1bf9, 0x1bfd, 0x1c01, 0x1c05, 0x1c09, + 0x1c0d, 0x1c11, 0x000d, 0x005d, 0xffff, 0x1c15, 0x1c21, 0x1c2f, + 0x1c3d, 0x1c4f, 0x1c5c, 0x1c68, 0x1c75, 0x1c83, 0x1c90, 0x1c9e, + 0x1cb0, 0x0002, 0x0000, 0x0057, 0x000d, 0x0000, 0xffff, 0x2b50, + 0x2151, 0x2b50, 0x2b50, 0x204d, 0x204d, 0x2b3a, 0x204d, 0x2b3a, + 0x3a8d, 0x3a8d, 0x3a8d, 0x0002, 0x0069, 0x007f, 0x0003, 0x006d, + 0x0000, 0x0076, 0x0007, 0x005d, 0x1cc4, 0x1cc8, 0x1bf1, 0x1ccc, + // Entry 475C0 - 475FF + 0x1bf9, 0x1bfd, 0x1cd0, 0x0007, 0x005d, 0x1cd4, 0x1ce2, 0x1cf1, + 0x1d05, 0x1d14, 0x1d22, 0x1d31, 0x0002, 0x0000, 0x0082, 0x0007, + 0x0000, 0x2b42, 0x2773, 0x2b50, 0x204d, 0x204d, 0x2b3a, 0x2773, + 0x0001, 0x008d, 0x0003, 0x0091, 0x0000, 0x0098, 0x0005, 0x0006, + 0xffff, 0x00f6, 0x00f9, 0x00fc, 0x00ff, 0x0005, 0x0006, 0xffff, + 0x0102, 0x0109, 0x0110, 0x0117, 0x0001, 0x00a1, 0x0003, 0x00a5, + 0x0000, 0x00ae, 0x0002, 0x00a8, 0x00ab, 0x0001, 0x005d, 0x1d3f, + 0x0001, 0x005d, 0x1d47, 0x0002, 0x00b1, 0x00b4, 0x0001, 0x005d, + // Entry 47600 - 4763F + 0x1d3f, 0x0001, 0x005d, 0x1d47, 0x0003, 0x00c1, 0x0000, 0x00bb, + 0x0001, 0x00bd, 0x0002, 0x005d, 0x1d4d, 0x1d5e, 0x0001, 0x00c3, + 0x0002, 0x0017, 0x01f4, 0x01f7, 0x0004, 0x00d5, 0x00cf, 0x00cc, + 0x00d2, 0x0001, 0x0006, 0x015b, 0x0001, 0x0002, 0x0033, 0x0001, + 0x0002, 0x003c, 0x0001, 0x0002, 0x08e8, 0x0004, 0x00e6, 0x00e0, + 0x00dd, 0x00e3, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, + 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0040, 0x012a, + 0x0000, 0x0000, 0x012f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 47640 - 4767F + 0x0134, 0x0000, 0x0000, 0x0139, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x013e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0149, 0x0000, 0x014e, 0x0000, 0x0000, + 0x0153, 0x0000, 0x0000, 0x0158, 0x0000, 0x0000, 0x015d, 0x0001, + 0x012c, 0x0001, 0x005d, 0x1d6f, 0x0001, 0x0131, 0x0001, 0x005d, + // Entry 47680 - 476BF + 0x1d77, 0x0001, 0x0136, 0x0001, 0x005d, 0x1d7c, 0x0001, 0x013b, + 0x0001, 0x005d, 0x1d81, 0x0002, 0x0141, 0x0144, 0x0001, 0x005d, + 0x1d8c, 0x0003, 0x005d, 0x1d92, 0x1d9b, 0x1d9f, 0x0001, 0x014b, + 0x0001, 0x005d, 0x1da7, 0x0001, 0x0150, 0x0001, 0x005d, 0x1dad, + 0x0001, 0x0155, 0x0001, 0x005d, 0x1db2, 0x0001, 0x015a, 0x0001, + 0x005d, 0x1dba, 0x0001, 0x015f, 0x0001, 0x0017, 0x0227, 0x0002, + 0x0003, 0x00d6, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000c, 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 476C0 - 476FF + 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, 0x0023, 0x001d, 0x001a, + 0x0020, 0x0001, 0x0006, 0x000d, 0x0001, 0x0002, 0x0010, 0x0001, + 0x0002, 0x001b, 0x0001, 0x0002, 0x0587, 0x0008, 0x002f, 0x0053, + 0x0078, 0x008c, 0x00a4, 0x00b4, 0x00c5, 0x0000, 0x0001, 0x0031, + 0x0003, 0x0035, 0x0000, 0x0044, 0x000d, 0x005d, 0xffff, 0x1dc3, + 0x1dc7, 0x1dcb, 0x1dcf, 0x1dd3, 0x1dd7, 0x1ddb, 0x1ddf, 0x1de3, + 0x1de7, 0x1deb, 0x1def, 0x000d, 0x005d, 0xffff, 0x1df3, 0x1e00, + 0x1e08, 0x1e11, 0x1e17, 0x1e27, 0x1e2f, 0x1e39, 0x1e42, 0x1e4b, + // Entry 47700 - 4773F + 0x1e51, 0x1e60, 0x0002, 0x0056, 0x006c, 0x0003, 0x005a, 0x0000, + 0x0063, 0x0007, 0x0009, 0x01f0, 0x582d, 0x5831, 0x5835, 0x5839, + 0x583d, 0x5841, 0x0007, 0x005d, 0x1e68, 0x1e70, 0x1e79, 0x1e81, + 0x1e8a, 0x1e94, 0x1e9b, 0x0002, 0x0000, 0x006f, 0x0007, 0x0000, + 0x2b3c, 0x257b, 0x257b, 0x257b, 0x2b42, 0x204d, 0x257b, 0x0001, + 0x007a, 0x0003, 0x007e, 0x0000, 0x0085, 0x0005, 0x0009, 0xffff, + 0x025a, 0x025d, 0x0260, 0x0263, 0x0005, 0x0009, 0xffff, 0x0266, + 0x026d, 0x0274, 0x027b, 0x0001, 0x008e, 0x0003, 0x0092, 0x0000, + // Entry 47740 - 4777F + 0x009b, 0x0002, 0x0095, 0x0098, 0x0001, 0x005d, 0x1ea4, 0x0001, + 0x005d, 0x1eae, 0x0002, 0x009e, 0x00a1, 0x0001, 0x005d, 0x1ea4, + 0x0001, 0x005d, 0x1eae, 0x0003, 0x00ae, 0x0000, 0x00a8, 0x0001, + 0x00aa, 0x0002, 0x005d, 0x1eb8, 0x1ecb, 0x0001, 0x00b0, 0x0002, + 0x0002, 0x04c4, 0x4d26, 0x0004, 0x00c2, 0x00bc, 0x00b9, 0x00bf, + 0x0001, 0x0006, 0x015b, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, + 0x003c, 0x0001, 0x0002, 0x08e8, 0x0004, 0x00d3, 0x00cd, 0x00ca, + 0x00d0, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, + // Entry 47780 - 477BF + 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0040, 0x0117, 0x0000, + 0x0000, 0x011c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0121, + 0x0000, 0x0000, 0x0126, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x012b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0136, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x013b, 0x0000, 0x0140, 0x0000, 0x0000, 0x0145, + // Entry 477C0 - 477FF + 0x0000, 0x0000, 0x014a, 0x0000, 0x0000, 0x014f, 0x0001, 0x0119, + 0x0001, 0x005d, 0x1edf, 0x0001, 0x011e, 0x0001, 0x005d, 0x1eec, + 0x0001, 0x0123, 0x0001, 0x005d, 0x1ef3, 0x0001, 0x0128, 0x0001, + 0x005d, 0x1ef9, 0x0002, 0x012e, 0x0131, 0x0001, 0x005d, 0x1f01, + 0x0003, 0x005d, 0x1f08, 0x1f0e, 0x1f1a, 0x0001, 0x0138, 0x0001, + 0x005d, 0x1f24, 0x0001, 0x013d, 0x0001, 0x005d, 0x1f37, 0x0001, + 0x0142, 0x0001, 0x005d, 0x1f4b, 0x0001, 0x0147, 0x0001, 0x005d, + 0x1db2, 0x0001, 0x014c, 0x0001, 0x005d, 0x1f53, 0x0001, 0x0151, + // Entry 47800 - 4783F + 0x0001, 0x005d, 0x1f5c, 0x0003, 0x0004, 0x01bb, 0x05ec, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0038, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, + 0x0027, 0x0004, 0x0024, 0x001e, 0x001b, 0x0021, 0x0001, 0x0000, + 0x0489, 0x0001, 0x0000, 0x049a, 0x0001, 0x0000, 0x04a5, 0x0001, + 0x0000, 0x04af, 0x0004, 0x0035, 0x002f, 0x002c, 0x0032, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0008, 0x0041, 0x00a6, 0x00fd, 0x0132, + // Entry 47840 - 4787F + 0x0173, 0x0188, 0x0199, 0x01aa, 0x0002, 0x0044, 0x0075, 0x0003, + 0x0048, 0x0057, 0x0066, 0x000d, 0x0057, 0xffff, 0x0624, 0x30e5, + 0x063c, 0x30f4, 0x30ff, 0x0655, 0x3106, 0x3113, 0x311c, 0x312b, + 0x068c, 0x3138, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, + 0x3a0c, 0x000d, 0x0057, 0xffff, 0x0624, 0x30e5, 0x063c, 0x30f4, + 0x30ff, 0x0655, 0x3106, 0x3113, 0x311c, 0x312b, 0x068c, 0x3138, + 0x0003, 0x0079, 0x0088, 0x0097, 0x000d, 0x0057, 0xffff, 0x0624, + // Entry 47880 - 478BF + 0x30e5, 0x063c, 0x30f4, 0x30ff, 0x0655, 0x3106, 0x3113, 0x311c, + 0x312b, 0x068c, 0x3138, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, + 0x3a09, 0x3a0c, 0x000d, 0x0057, 0xffff, 0x0624, 0x30e5, 0x063c, + 0x30f4, 0x30ff, 0x0655, 0x3106, 0x3113, 0x311c, 0x312b, 0x068c, + 0x3138, 0x0002, 0x00a9, 0x00d3, 0x0005, 0x00af, 0x00b8, 0x00ca, + 0x0000, 0x00c1, 0x0007, 0x005d, 0x1f6f, 0x1f76, 0x1f7f, 0x1f8a, + 0x1f93, 0x1f9c, 0x1fa5, 0x0007, 0x005d, 0x1f6f, 0x1fae, 0x1f7f, + // Entry 478C0 - 478FF + 0x1f8a, 0x1fb3, 0x1f9c, 0x1fa5, 0x0007, 0x005d, 0x1f6f, 0x1f76, + 0x1f7f, 0x1f8a, 0x1f93, 0x1f9c, 0x1fa5, 0x0007, 0x005d, 0x1f6f, + 0x1f76, 0x1f7f, 0x1f8a, 0x1f93, 0x1f9c, 0x1fa5, 0x0005, 0x00d9, + 0x00e2, 0x00f4, 0x0000, 0x00eb, 0x0007, 0x005d, 0x1f6f, 0x1f76, + 0x1f7f, 0x1f8a, 0x1f93, 0x1f9c, 0x1fa5, 0x0007, 0x005d, 0x1fb8, + 0x1fae, 0x1fbd, 0x1fc2, 0x1fb3, 0x1fc7, 0x1fcc, 0x0007, 0x005d, + 0x1f6f, 0x1f76, 0x1f7f, 0x1f8a, 0x1f93, 0x1f9c, 0x1fa5, 0x0007, + 0x005d, 0x1f6f, 0x1f76, 0x1f7f, 0x1f8a, 0x1f93, 0x1f9c, 0x1fa5, + // Entry 47900 - 4793F + 0x0002, 0x0100, 0x0119, 0x0003, 0x0104, 0x010b, 0x0112, 0x0005, + 0x005d, 0xffff, 0x1fd1, 0x1fea, 0x1fff, 0x2014, 0x0005, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x005d, 0xffff, + 0x1fd1, 0x1fea, 0x1fff, 0x2014, 0x0003, 0x011d, 0x0124, 0x012b, + 0x0005, 0x005d, 0xffff, 0x1fd1, 0x1fea, 0x1fff, 0x2014, 0x0005, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x005d, + 0xffff, 0x1fd1, 0x1fea, 0x1fff, 0x2014, 0x0002, 0x0135, 0x0154, + 0x0003, 0x0139, 0x0142, 0x014b, 0x0002, 0x013c, 0x013f, 0x0001, + // Entry 47940 - 4797F + 0x005e, 0x0000, 0x0001, 0x005e, 0x0016, 0x0002, 0x0145, 0x0148, + 0x0001, 0x005e, 0x0000, 0x0001, 0x005e, 0x002c, 0x0002, 0x014e, + 0x0151, 0x0001, 0x005e, 0x0000, 0x0001, 0x005e, 0x002c, 0x0003, + 0x0158, 0x0161, 0x016a, 0x0002, 0x015b, 0x015e, 0x0001, 0x005e, + 0x0000, 0x0001, 0x005e, 0x002c, 0x0002, 0x0164, 0x0167, 0x0001, + 0x005e, 0x0000, 0x0001, 0x005e, 0x002c, 0x0002, 0x016d, 0x0170, + 0x0001, 0x005e, 0x0000, 0x0001, 0x005e, 0x002c, 0x0003, 0x0182, + 0x0000, 0x0177, 0x0002, 0x017a, 0x017e, 0x0002, 0x005e, 0x0042, + // Entry 47980 - 479BF + 0x0077, 0x0002, 0x005e, 0x0057, 0x0094, 0x0001, 0x0184, 0x0002, + 0x0000, 0x04f5, 0x3c5a, 0x0004, 0x0196, 0x0190, 0x018d, 0x0193, + 0x0001, 0x0000, 0x04fc, 0x0001, 0x0000, 0x050b, 0x0001, 0x0000, + 0x0514, 0x0001, 0x0000, 0x051c, 0x0004, 0x01a7, 0x01a1, 0x019e, + 0x01a4, 0x0001, 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, + 0x0002, 0x04fe, 0x0001, 0x0002, 0x0508, 0x0004, 0x01b8, 0x01b2, + 0x01af, 0x01b5, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0042, 0x01fe, + // Entry 479C0 - 479FF + 0x0203, 0x0208, 0x020d, 0x0224, 0x0236, 0x0248, 0x025f, 0x0271, + 0x0283, 0x029a, 0x02ac, 0x02be, 0x02d9, 0x02ef, 0x0305, 0x030a, + 0x030f, 0x0314, 0x032b, 0x033d, 0x034f, 0x0354, 0x0359, 0x035e, + 0x0363, 0x0368, 0x036d, 0x0372, 0x0377, 0x037c, 0x0390, 0x03a4, + 0x03b8, 0x03cc, 0x03e0, 0x03f4, 0x0408, 0x041c, 0x0430, 0x0444, + 0x0458, 0x046c, 0x0480, 0x0494, 0x04a8, 0x04bc, 0x04d0, 0x04e4, + 0x04f8, 0x050c, 0x0520, 0x0525, 0x052a, 0x052f, 0x0545, 0x0557, + 0x0569, 0x057f, 0x0591, 0x05a3, 0x05b9, 0x05cb, 0x05dd, 0x05e2, + // Entry 47A00 - 47A3F + 0x05e7, 0x0001, 0x0200, 0x0001, 0x003f, 0x134f, 0x0001, 0x0205, + 0x0001, 0x003f, 0x134f, 0x0001, 0x020a, 0x0001, 0x003f, 0x134f, + 0x0003, 0x0211, 0x0214, 0x0219, 0x0001, 0x0021, 0x098b, 0x0003, + 0x005e, 0x00a2, 0x00a2, 0x00a2, 0x0002, 0x021c, 0x0220, 0x0002, + 0x005e, 0x00b4, 0x00b4, 0x0002, 0x005e, 0x00c4, 0x00c4, 0x0003, + 0x0228, 0x0000, 0x022b, 0x0001, 0x0021, 0x098b, 0x0002, 0x022e, + 0x0232, 0x0002, 0x005e, 0x00b4, 0x00b4, 0x0002, 0x005e, 0x00c4, + 0x00c4, 0x0003, 0x023a, 0x0000, 0x023d, 0x0001, 0x0021, 0x098b, + // Entry 47A40 - 47A7F + 0x0002, 0x0240, 0x0244, 0x0002, 0x005e, 0x00b4, 0x00b4, 0x0002, + 0x005e, 0x00c4, 0x00c4, 0x0003, 0x024c, 0x024f, 0x0254, 0x0001, + 0x005e, 0x00da, 0x0003, 0x005e, 0x00e8, 0x0101, 0x0114, 0x0002, + 0x0257, 0x025b, 0x0002, 0x005e, 0x012b, 0x012b, 0x0002, 0x005e, + 0x0140, 0x0140, 0x0003, 0x0263, 0x0000, 0x0266, 0x0001, 0x005e, + 0x00da, 0x0002, 0x0269, 0x026d, 0x0002, 0x005e, 0x012b, 0x012b, + 0x0002, 0x005e, 0x0140, 0x0140, 0x0003, 0x0275, 0x0000, 0x0278, + 0x0001, 0x005e, 0x00da, 0x0002, 0x027b, 0x027f, 0x0002, 0x005e, + // Entry 47A80 - 47ABF + 0x012b, 0x012b, 0x0002, 0x005e, 0x0140, 0x0140, 0x0003, 0x0287, + 0x028a, 0x028f, 0x0001, 0x005e, 0x015d, 0x0003, 0x005e, 0x0168, + 0x017e, 0x018e, 0x0002, 0x0292, 0x0296, 0x0002, 0x005e, 0x01a2, + 0x01a2, 0x0002, 0x005e, 0x01b4, 0x01b4, 0x0003, 0x029e, 0x0000, + 0x02a1, 0x0001, 0x005e, 0x015d, 0x0002, 0x02a4, 0x02a8, 0x0002, + 0x005e, 0x01a2, 0x01a2, 0x0002, 0x005e, 0x01b4, 0x01b4, 0x0003, + 0x02b0, 0x0000, 0x02b3, 0x0001, 0x005e, 0x015d, 0x0002, 0x02b6, + 0x02ba, 0x0002, 0x005e, 0x01a2, 0x01a2, 0x0002, 0x005e, 0x01b4, + // Entry 47AC0 - 47AFF + 0x01b4, 0x0004, 0x02c3, 0x02c6, 0x02cb, 0x02d6, 0x0001, 0x005e, + 0x01ce, 0x0003, 0x005e, 0x01d7, 0x01eb, 0x01f9, 0x0002, 0x02ce, + 0x02d2, 0x0002, 0x005e, 0x020b, 0x020b, 0x0002, 0x005e, 0x021b, + 0x021b, 0x0001, 0x005e, 0x0233, 0x0004, 0x02de, 0x0000, 0x02e1, + 0x02ec, 0x0001, 0x005e, 0x01ce, 0x0002, 0x02e4, 0x02e8, 0x0002, + 0x005e, 0x020b, 0x020b, 0x0002, 0x005e, 0x021b, 0x021b, 0x0001, + 0x005e, 0x0233, 0x0004, 0x02f4, 0x0000, 0x02f7, 0x0302, 0x0001, + 0x005e, 0x01ce, 0x0002, 0x02fa, 0x02fe, 0x0002, 0x005e, 0x020b, + // Entry 47B00 - 47B3F + 0x020b, 0x0002, 0x005e, 0x021b, 0x021b, 0x0001, 0x005e, 0x0233, + 0x0001, 0x0307, 0x0001, 0x005e, 0x0245, 0x0001, 0x030c, 0x0001, + 0x005e, 0x0245, 0x0001, 0x0311, 0x0001, 0x005e, 0x0245, 0x0003, + 0x0318, 0x031b, 0x0320, 0x0001, 0x005e, 0x025e, 0x0003, 0x005e, + 0x0269, 0x026e, 0x0273, 0x0002, 0x0323, 0x0327, 0x0002, 0x005e, + 0x027e, 0x027e, 0x0002, 0x005e, 0x0290, 0x0290, 0x0003, 0x032f, + 0x0000, 0x0332, 0x0001, 0x005e, 0x025e, 0x0002, 0x0335, 0x0339, + 0x0002, 0x005e, 0x027e, 0x027e, 0x0002, 0x005e, 0x0290, 0x0290, + // Entry 47B40 - 47B7F + 0x0003, 0x0341, 0x0000, 0x0344, 0x0001, 0x005e, 0x025e, 0x0002, + 0x0347, 0x034b, 0x0002, 0x005e, 0x027e, 0x027e, 0x0002, 0x005e, + 0x0290, 0x0290, 0x0001, 0x0351, 0x0001, 0x005e, 0x02aa, 0x0001, + 0x0356, 0x0001, 0x005e, 0x02aa, 0x0001, 0x035b, 0x0001, 0x005e, + 0x02aa, 0x0001, 0x0360, 0x0001, 0x005e, 0x02c1, 0x0001, 0x0365, + 0x0001, 0x005e, 0x02c1, 0x0001, 0x036a, 0x0001, 0x005e, 0x02c1, + 0x0001, 0x036f, 0x0001, 0x005e, 0x02da, 0x0001, 0x0374, 0x0001, + 0x005e, 0x02da, 0x0001, 0x0379, 0x0001, 0x005e, 0x02da, 0x0003, + // Entry 47B80 - 47BBF + 0x0000, 0x0380, 0x0385, 0x0003, 0x005e, 0x0303, 0x0315, 0x0321, + 0x0002, 0x0388, 0x038c, 0x0002, 0x005e, 0x0331, 0x0331, 0x0002, + 0x005e, 0x0341, 0x0341, 0x0003, 0x0000, 0x0394, 0x0399, 0x0003, + 0x005e, 0x0303, 0x0315, 0x0321, 0x0002, 0x039c, 0x03a0, 0x0002, + 0x005e, 0x0331, 0x0331, 0x0002, 0x005e, 0x0341, 0x0341, 0x0003, + 0x0000, 0x03a8, 0x03ad, 0x0003, 0x005e, 0x0303, 0x0315, 0x0321, + 0x0002, 0x03b0, 0x03b4, 0x0002, 0x005e, 0x0331, 0x0331, 0x0002, + 0x005e, 0x0341, 0x0341, 0x0003, 0x0000, 0x03bc, 0x03c1, 0x0003, + // Entry 47BC0 - 47BFF + 0x005e, 0x0357, 0x036b, 0x0379, 0x0002, 0x03c4, 0x03c8, 0x0002, + 0x005e, 0x038b, 0x038b, 0x0002, 0x005e, 0x039d, 0x039d, 0x0003, + 0x0000, 0x03d0, 0x03d5, 0x0003, 0x005e, 0x0357, 0x036b, 0x0379, + 0x0002, 0x03d8, 0x03dc, 0x0002, 0x005e, 0x038b, 0x038b, 0x0002, + 0x005e, 0x039d, 0x039d, 0x0003, 0x0000, 0x03e4, 0x03e9, 0x0003, + 0x005e, 0x0357, 0x036b, 0x0379, 0x0002, 0x03ec, 0x03f0, 0x0002, + 0x005e, 0x038b, 0x038b, 0x0002, 0x005e, 0x039d, 0x039d, 0x0003, + 0x0000, 0x03f8, 0x03fd, 0x0003, 0x005e, 0x03b5, 0x03cb, 0x03db, + // Entry 47C00 - 47C3F + 0x0002, 0x0400, 0x0404, 0x0002, 0x005e, 0x03ef, 0x03ef, 0x0002, + 0x005e, 0x0401, 0x0401, 0x0003, 0x0000, 0x040c, 0x0411, 0x0003, + 0x005e, 0x03b5, 0x03cb, 0x03db, 0x0002, 0x0414, 0x0418, 0x0002, + 0x005e, 0x03ef, 0x03ef, 0x0002, 0x005e, 0x0401, 0x0401, 0x0003, + 0x0000, 0x0420, 0x0425, 0x0003, 0x005e, 0x03b5, 0x03cb, 0x03db, + 0x0002, 0x0428, 0x042c, 0x0002, 0x005e, 0x03ef, 0x03ef, 0x0002, + 0x005e, 0x0401, 0x0401, 0x0003, 0x0000, 0x0434, 0x0439, 0x0003, + 0x005e, 0x041b, 0x042f, 0x043d, 0x0002, 0x043c, 0x0440, 0x0002, + // Entry 47C40 - 47C7F + 0x005e, 0x044f, 0x044f, 0x0002, 0x005e, 0x0461, 0x0461, 0x0003, + 0x0000, 0x0448, 0x044d, 0x0003, 0x005e, 0x041b, 0x042f, 0x043d, + 0x0002, 0x0450, 0x0454, 0x0002, 0x005e, 0x044f, 0x044f, 0x0002, + 0x005e, 0x0461, 0x0461, 0x0003, 0x0000, 0x045c, 0x0461, 0x0003, + 0x005e, 0x041b, 0x042f, 0x043d, 0x0002, 0x0464, 0x0468, 0x0002, + 0x005e, 0x044f, 0x044f, 0x0002, 0x005e, 0x0461, 0x0461, 0x0003, + 0x0000, 0x0470, 0x0475, 0x0003, 0x005e, 0x047b, 0x048f, 0x049d, + 0x0002, 0x0478, 0x047c, 0x0002, 0x005e, 0x04af, 0x04af, 0x0002, + // Entry 47C80 - 47CBF + 0x005e, 0x04c1, 0x04c1, 0x0003, 0x0000, 0x0484, 0x0489, 0x0003, + 0x005e, 0x047b, 0x048f, 0x049d, 0x0002, 0x048c, 0x0490, 0x0002, + 0x005e, 0x04af, 0x04af, 0x0002, 0x005e, 0x04c1, 0x04c1, 0x0003, + 0x0000, 0x0498, 0x049d, 0x0003, 0x005e, 0x047b, 0x048f, 0x049d, + 0x0002, 0x04a0, 0x04a4, 0x0002, 0x005e, 0x04af, 0x04af, 0x0002, + 0x005e, 0x04c1, 0x04c1, 0x0003, 0x0000, 0x04ac, 0x04b1, 0x0003, + 0x005e, 0x04d9, 0x04ed, 0x04fb, 0x0002, 0x04b4, 0x04b8, 0x0002, + 0x005e, 0x050d, 0x050d, 0x0002, 0x005e, 0x051d, 0x051d, 0x0003, + // Entry 47CC0 - 47CFF + 0x0000, 0x04c0, 0x04c5, 0x0003, 0x005e, 0x04d9, 0x04ed, 0x04fb, + 0x0002, 0x04c8, 0x04cc, 0x0002, 0x005e, 0x050d, 0x050d, 0x0002, + 0x005e, 0x051d, 0x051d, 0x0003, 0x0000, 0x04d4, 0x04d9, 0x0003, + 0x005e, 0x04d9, 0x04ed, 0x04fb, 0x0002, 0x04dc, 0x04e0, 0x0002, + 0x005e, 0x050d, 0x050d, 0x0002, 0x005e, 0x051d, 0x051d, 0x0003, + 0x0000, 0x04e8, 0x04ed, 0x0003, 0x005e, 0x0535, 0x0549, 0x0557, + 0x0002, 0x04f0, 0x04f4, 0x0002, 0x005e, 0x0569, 0x0569, 0x0002, + 0x005e, 0x057b, 0x057b, 0x0003, 0x0000, 0x04fc, 0x0501, 0x0003, + // Entry 47D00 - 47D3F + 0x005e, 0x0535, 0x0549, 0x0557, 0x0002, 0x0504, 0x0508, 0x0002, + 0x005e, 0x0569, 0x0569, 0x0002, 0x005e, 0x057b, 0x057b, 0x0003, + 0x0000, 0x0510, 0x0515, 0x0003, 0x005e, 0x0535, 0x0549, 0x0557, + 0x0002, 0x0518, 0x051c, 0x0002, 0x005e, 0x0569, 0x0569, 0x0002, + 0x005e, 0x057b, 0x057b, 0x0001, 0x0522, 0x0001, 0x005e, 0x0593, + 0x0001, 0x0527, 0x0001, 0x005e, 0x0593, 0x0001, 0x052c, 0x0001, + 0x005e, 0x0593, 0x0003, 0x0533, 0x0536, 0x053a, 0x0001, 0x005e, + 0x05bf, 0x0002, 0x005e, 0xffff, 0x05c8, 0x0002, 0x053d, 0x0541, + // Entry 47D40 - 47D7F + 0x0002, 0x005e, 0x05d4, 0x05d4, 0x0002, 0x005e, 0x05e4, 0x05e4, + 0x0003, 0x0549, 0x0000, 0x054c, 0x0001, 0x005e, 0x05bf, 0x0002, + 0x054f, 0x0553, 0x0002, 0x005e, 0x05d4, 0x05d4, 0x0002, 0x005e, + 0x05e4, 0x05e4, 0x0003, 0x055b, 0x0000, 0x055e, 0x0001, 0x005e, + 0x05bf, 0x0002, 0x0561, 0x0565, 0x0002, 0x005e, 0x05d4, 0x05d4, + 0x0002, 0x005e, 0x05e4, 0x05e4, 0x0003, 0x056d, 0x0570, 0x0574, + 0x0001, 0x005e, 0x05fc, 0x0002, 0x005e, 0xffff, 0x0603, 0x0002, + 0x0577, 0x057b, 0x0002, 0x005e, 0x061f, 0x060f, 0x0002, 0x005e, + // Entry 47D80 - 47DBF + 0x0628, 0x0628, 0x0003, 0x0583, 0x0000, 0x0586, 0x0001, 0x005e, + 0x05fc, 0x0002, 0x0589, 0x058d, 0x0002, 0x005e, 0x060f, 0x060f, + 0x0002, 0x005e, 0x0628, 0x0628, 0x0003, 0x0595, 0x0000, 0x0598, + 0x0001, 0x005e, 0x05fc, 0x0002, 0x059b, 0x059f, 0x0002, 0x005e, + 0x060f, 0x060f, 0x0002, 0x005e, 0x0628, 0x0628, 0x0003, 0x05a7, + 0x05aa, 0x05ae, 0x0001, 0x005e, 0x063e, 0x0002, 0x005e, 0xffff, + 0x0649, 0x0002, 0x05b1, 0x05b5, 0x0002, 0x005e, 0x0652, 0x0652, + 0x0002, 0x005e, 0x0666, 0x0666, 0x0003, 0x05bd, 0x0000, 0x05c0, + // Entry 47DC0 - 47DFF + 0x0001, 0x005e, 0x063e, 0x0002, 0x05c3, 0x05c7, 0x0002, 0x005e, + 0x0652, 0x0652, 0x0002, 0x005e, 0x0666, 0x0666, 0x0003, 0x05cf, + 0x0000, 0x05d2, 0x0001, 0x005e, 0x063e, 0x0002, 0x05d5, 0x05d9, + 0x0002, 0x005e, 0x0652, 0x0652, 0x0002, 0x005e, 0x0666, 0x0666, + 0x0001, 0x05df, 0x0001, 0x005e, 0x0680, 0x0001, 0x05e4, 0x0001, + 0x005e, 0x0680, 0x0001, 0x05e9, 0x0001, 0x005e, 0x0680, 0x0004, + 0x05f1, 0x05f6, 0x05fb, 0x060a, 0x0003, 0x0000, 0x1dc7, 0x39fb, + 0x3cac, 0x0003, 0x005e, 0x0692, 0x069d, 0x06a6, 0x0002, 0x0000, + // Entry 47E00 - 47E3F + 0x05fe, 0x0003, 0x0000, 0x0605, 0x0602, 0x0001, 0x005e, 0x06af, + 0x0003, 0x005e, 0xffff, 0x06cc, 0x06fb, 0x0002, 0x0000, 0x060d, + 0x0003, 0x06a7, 0x073d, 0x0611, 0x0094, 0x005e, 0x071d, 0x073c, + 0x0760, 0x0782, 0x07d3, 0x0855, 0x08bf, 0x0928, 0x097b, 0x09ce, + 0x0a23, 0xffff, 0x0a7d, 0x0adb, 0x0b3e, 0x0bb7, 0x0c43, 0x0cb7, + 0x0d36, 0x0dd6, 0x0e7f, 0x0f14, 0x0fa2, 0x101c, 0x1088, 0x10e3, + 0x10fa, 0x1132, 0x118d, 0x11d7, 0x122c, 0x1265, 0x12bf, 0x131d, + 0x1388, 0x13e9, 0x1410, 0x1452, 0x14cc, 0x154f, 0x159a, 0x15af, + // Entry 47E40 - 47E7F + 0x15d5, 0x161c, 0x168b, 0x16c5, 0x173d, 0x1798, 0x17db, 0x185e, + 0x18ea, 0x1931, 0x1959, 0x1995, 0x19b4, 0x19e8, 0x1a3b, 0x1a62, + 0x1aab, 0x1b47, 0x1bba, 0x1bd5, 0x1c12, 0x1c99, 0x1d0b, 0x1d56, + 0x1d78, 0x1d94, 0x1db4, 0x1dde, 0x1e06, 0x1e47, 0x1eab, 0x1f15, + 0x1f7f, 0xffff, 0x1fca, 0x1ff0, 0x202f, 0x207a, 0x20b8, 0x211b, + 0x2138, 0x217b, 0x21d4, 0x2218, 0x2267, 0x2284, 0x229d, 0x22b8, + 0x22fa, 0x2351, 0x239b, 0x243d, 0x24ca, 0x2542, 0x258d, 0x25a8, + 0x25c1, 0x25fe, 0x268a, 0x270e, 0x277d, 0x2794, 0x27ed, 0x288a, + // Entry 47E80 - 47EBF + 0x2904, 0x296a, 0x29c1, 0x29d8, 0x2a1a, 0x2a8a, 0x2aee, 0x2b41, + 0x2b9e, 0x2c23, 0x2c3c, 0x2c55, 0x2c75, 0x2c91, 0x2cc3, 0xffff, + 0x2d29, 0x2d74, 0x2d8c, 0x2db4, 0x2ddd, 0x2dfd, 0x2e19, 0x2e32, + 0x2e62, 0x2ead, 0x2eca, 0x2efe, 0x2f4d, 0x2f83, 0x2fe6, 0x301c, + 0x3094, 0x310a, 0x315d, 0x319b, 0x321b, 0x3276, 0x328f, 0x32b2, + 0x32ee, 0x335e, 0x0094, 0x005e, 0xffff, 0xffff, 0xffff, 0xffff, + 0x07af, 0x083c, 0x08a4, 0x0916, 0x0969, 0x09bc, 0x0a0f, 0xffff, + 0x0a68, 0x0ac4, 0x0b26, 0x0b94, 0x0c28, 0x0c9a, 0x0d0e, 0x0da3, + // Entry 47EC0 - 47EFF + 0x0e59, 0x0eec, 0x0f81, 0x1005, 0x106b, 0xffff, 0xffff, 0x1115, + 0xffff, 0x11bd, 0xffff, 0x1250, 0x12ac, 0x1306, 0x1368, 0xffff, + 0xffff, 0x1437, 0x14a9, 0x1538, 0xffff, 0xffff, 0xffff, 0x15f5, + 0xffff, 0x16a8, 0x1720, 0xffff, 0x17be, 0x1832, 0x18d7, 0xffff, + 0xffff, 0xffff, 0xffff, 0x19cf, 0xffff, 0xffff, 0x1a82, 0x1b1e, + 0xffff, 0xffff, 0x1bec, 0x1c7b, 0x1cf6, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1e30, 0x1e92, 0x1efa, 0x1f68, 0xffff, + 0xffff, 0xffff, 0x2018, 0xffff, 0x2095, 0xffff, 0xffff, 0x215d, + // Entry 47F00 - 47F3F + 0xffff, 0x21ff, 0xffff, 0xffff, 0xffff, 0xffff, 0x22df, 0xffff, + 0x236a, 0x241a, 0x24aa, 0x252b, 0xffff, 0xffff, 0xffff, 0x25d8, + 0x266b, 0x26e5, 0xffff, 0xffff, 0x27be, 0x2867, 0x28ed, 0x294f, + 0xffff, 0xffff, 0x29fd, 0x2a75, 0x2ad5, 0xffff, 0x2b6a, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2caa, 0xffff, 0x2d12, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2e4b, 0xffff, + 0xffff, 0x2ee7, 0xffff, 0x2f62, 0xffff, 0x2fff, 0x3077, 0x30ef, + 0xffff, 0x317a, 0x31fc, 0xffff, 0xffff, 0xffff, 0x32d5, 0x333d, + // Entry 47F40 - 47F7F + 0x0094, 0x005e, 0xffff, 0xffff, 0xffff, 0xffff, 0x0804, 0x087b, + 0x08e7, 0x0947, 0x099a, 0x09ed, 0x0a44, 0xffff, 0x0a9f, 0x0aff, + 0x0b63, 0x0bec, 0x0c6b, 0x0ce1, 0x0d6b, 0x0e16, 0x0eb4, 0x0f49, + 0x0fd0, 0x1040, 0x10b2, 0xffff, 0xffff, 0x115c, 0xffff, 0x11fe, + 0xffff, 0x1287, 0x12df, 0x1341, 0x13b5, 0xffff, 0xffff, 0x147a, + 0x14fc, 0x1573, 0xffff, 0xffff, 0xffff, 0x1650, 0xffff, 0x16ef, + 0x1767, 0xffff, 0x1805, 0x1897, 0x190a, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1a0e, 0xffff, 0xffff, 0x1ae1, 0x1b7d, 0xffff, 0xffff, + // Entry 47F80 - 47FBF + 0x1c45, 0x1cc4, 0x1d2d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1e6b, 0x1ed1, 0x1f3d, 0x1fa3, 0xffff, 0xffff, 0xffff, + 0x2053, 0xffff, 0x20e8, 0xffff, 0xffff, 0x21a6, 0xffff, 0x223e, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2322, 0xffff, 0x23d9, 0x2472, + 0x24f7, 0x2566, 0xffff, 0xffff, 0xffff, 0x2631, 0x26b6, 0x2744, + 0xffff, 0xffff, 0x2829, 0x28ba, 0x2928, 0x2992, 0xffff, 0xffff, + 0x2a44, 0x2aac, 0x2b14, 0xffff, 0x2bdf, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2ce9, 0xffff, 0x2d4d, 0xffff, 0xffff, 0xffff, + // Entry 47FC0 - 47FFF + 0xffff, 0xffff, 0xffff, 0xffff, 0x2e86, 0xffff, 0xffff, 0x2f22, + 0xffff, 0x2fb1, 0xffff, 0x3046, 0x30be, 0x3132, 0xffff, 0x31c9, + 0x3247, 0xffff, 0xffff, 0xffff, 0x3314, 0x338c, 0x0003, 0x0004, + 0x019c, 0x0296, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000d, 0x0008, 0x0016, 0x007b, 0x00d2, 0x0107, + 0x0148, 0x0169, 0x017a, 0x018b, 0x0002, 0x0019, 0x004a, 0x0003, + 0x001d, 0x002c, 0x003b, 0x000d, 0x005f, 0xffff, 0x0000, 0x0007, + 0x000c, 0x0011, 0x0015, 0x001a, 0x001f, 0x0024, 0x0029, 0x0030, + // Entry 48000 - 4803F + 0x0035, 0x003b, 0x000d, 0x0000, 0xffff, 0x2b50, 0x2289, 0x2b40, + 0x25ed, 0x2b3c, 0x2289, 0x2b3a, 0x25eb, 0x21e1, 0x2289, 0x2b3a, + 0x257b, 0x000d, 0x005f, 0xffff, 0x0040, 0x0051, 0x005e, 0x006c, + 0x0079, 0x0086, 0x0093, 0x00a1, 0x00ad, 0x00bb, 0x00c9, 0x00d7, + 0x0003, 0x004e, 0x005d, 0x006c, 0x000d, 0x005f, 0xffff, 0x0000, + 0x0007, 0x000c, 0x0011, 0x0015, 0x001a, 0x001f, 0x0024, 0x0029, + 0x0030, 0x0035, 0x003b, 0x000d, 0x0000, 0xffff, 0x2b50, 0x2289, + 0x2b40, 0x25ed, 0x2b3c, 0x2289, 0x2b3a, 0x25eb, 0x21e1, 0x2289, + // Entry 48040 - 4807F + 0x2b3a, 0x257b, 0x000d, 0x005f, 0xffff, 0x0040, 0x0051, 0x005e, + 0x006c, 0x0079, 0x0086, 0x0093, 0x00a1, 0x00ad, 0x00bb, 0x00c9, + 0x00d7, 0x0002, 0x007e, 0x00a8, 0x0005, 0x0084, 0x008d, 0x009f, + 0x0000, 0x0096, 0x0007, 0x005f, 0x00e4, 0x00e9, 0x00ee, 0x00f3, + 0x00f8, 0x00fd, 0x0102, 0x0007, 0x0000, 0x2b3a, 0x257f, 0x2b3c, + 0x2289, 0x2b3e, 0x25eb, 0x2296, 0x0007, 0x005f, 0x00e4, 0x00e9, + 0x00ee, 0x00f3, 0x00f8, 0x00fd, 0x0102, 0x0007, 0x005f, 0x0107, + 0x0113, 0x011e, 0x012c, 0x0138, 0x0142, 0x014c, 0x0005, 0x00ae, + // Entry 48080 - 480BF + 0x00b7, 0x00c9, 0x0000, 0x00c0, 0x0007, 0x005f, 0x00e4, 0x00e9, + 0x00ee, 0x00f3, 0x00f8, 0x00fd, 0x0102, 0x0007, 0x0000, 0x2b3a, + 0x257f, 0x2b3c, 0x2289, 0x2b3e, 0x25eb, 0x2296, 0x0007, 0x005f, + 0x00e4, 0x00e9, 0x00ee, 0x00f3, 0x00f8, 0x00fd, 0x0102, 0x0007, + 0x005f, 0x0107, 0x0113, 0x011e, 0x012c, 0x0138, 0x0142, 0x014c, + 0x0002, 0x00d5, 0x00ee, 0x0003, 0x00d9, 0x00e0, 0x00e7, 0x0005, + 0x0000, 0xffff, 0x04e3, 0x39f2, 0x39f5, 0x39f8, 0x0005, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0000, 0xffff, + // Entry 480C0 - 480FF + 0x04e3, 0x39f2, 0x39f5, 0x39f8, 0x0003, 0x00f2, 0x00f9, 0x0100, + 0x0005, 0x0000, 0xffff, 0x04e3, 0x39f2, 0x39f5, 0x39f8, 0x0005, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0000, + 0xffff, 0x04e3, 0x39f2, 0x39f5, 0x39f8, 0x0002, 0x010a, 0x0129, + 0x0003, 0x010e, 0x0117, 0x0120, 0x0002, 0x0111, 0x0114, 0x0001, + 0x005f, 0x0157, 0x0001, 0x0056, 0x00fc, 0x0002, 0x011a, 0x011d, + 0x0001, 0x005f, 0x0157, 0x0001, 0x0056, 0x00fc, 0x0002, 0x0123, + 0x0126, 0x0001, 0x005f, 0x015c, 0x0001, 0x005f, 0x0169, 0x0003, + // Entry 48100 - 4813F + 0x012d, 0x0136, 0x013f, 0x0002, 0x0130, 0x0133, 0x0001, 0x005f, + 0x0157, 0x0001, 0x0056, 0x00fc, 0x0002, 0x0139, 0x013c, 0x0001, + 0x005f, 0x0157, 0x0001, 0x0056, 0x00fc, 0x0002, 0x0142, 0x0145, + 0x0001, 0x005f, 0x0177, 0x0001, 0x005f, 0x0183, 0x0003, 0x0157, + 0x0162, 0x014c, 0x0002, 0x014f, 0x0153, 0x0002, 0x005f, 0x0190, + 0x01a0, 0x0002, 0x0000, 0x04f5, 0x3c5a, 0x0002, 0x015a, 0x015e, + 0x0002, 0x005f, 0x01b3, 0x01b9, 0x0002, 0x0000, 0x04f5, 0x3c5a, + 0x0002, 0x0000, 0x0165, 0x0002, 0x005f, 0x01bf, 0x01c4, 0x0004, + // Entry 48140 - 4817F + 0x0177, 0x0171, 0x016e, 0x0174, 0x0001, 0x0000, 0x04fc, 0x0001, + 0x0000, 0x050b, 0x0001, 0x0000, 0x0514, 0x0001, 0x0000, 0x051c, + 0x0004, 0x0188, 0x0182, 0x017f, 0x0185, 0x0001, 0x0000, 0x0524, + 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, + 0x0546, 0x0004, 0x0199, 0x0193, 0x0190, 0x0196, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0040, 0x01dd, 0x0000, 0x0000, 0x01e2, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x01f8, 0x0000, 0x0000, 0x020e, + // Entry 48180 - 481BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0224, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0241, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0246, + 0x0000, 0x024b, 0x0000, 0x0000, 0x0261, 0x0000, 0x0000, 0x0277, + 0x0000, 0x0000, 0x0291, 0x0001, 0x01df, 0x0001, 0x0031, 0x047c, + 0x0003, 0x01e6, 0x0000, 0x01e9, 0x0001, 0x005f, 0x01c8, 0x0002, + // Entry 481C0 - 481FF + 0x01ec, 0x01f2, 0x0004, 0x005f, 0x01e4, 0x01cf, 0xffff, 0x01e4, + 0x0004, 0x005f, 0x020a, 0x01fa, 0xffff, 0x020a, 0x0003, 0x01fc, + 0x0000, 0x01ff, 0x0001, 0x005f, 0x021b, 0x0002, 0x0202, 0x0208, + 0x0004, 0x005f, 0x0222, 0x0222, 0xffff, 0x0222, 0x0004, 0x005f, + 0x023d, 0x023d, 0xffff, 0x023d, 0x0003, 0x0212, 0x0000, 0x0215, + 0x0001, 0x005f, 0x0253, 0x0002, 0x0218, 0x021e, 0x0004, 0x005f, + 0x0270, 0x025b, 0xffff, 0x0270, 0x0004, 0x005f, 0x0296, 0x0286, + 0xffff, 0x0296, 0x0003, 0x0228, 0x022b, 0x0232, 0x0001, 0x005f, + // Entry 48200 - 4823F + 0x02a7, 0x0005, 0x005f, 0x02bb, 0x02c0, 0x02c5, 0x02ae, 0x02cc, + 0x0002, 0x0235, 0x023b, 0x0004, 0x005f, 0x030a, 0x02db, 0xffff, + 0x02f2, 0x0004, 0x005f, 0x0334, 0x0322, 0xffff, 0x0334, 0x0001, + 0x0243, 0x0001, 0x005f, 0x0347, 0x0001, 0x0248, 0x0001, 0x005f, + 0x0355, 0x0003, 0x024f, 0x0000, 0x0252, 0x0001, 0x005f, 0x0369, + 0x0002, 0x0255, 0x025b, 0x0004, 0x005f, 0x0386, 0x0370, 0xffff, + 0x0386, 0x0004, 0x005f, 0x03ae, 0x039d, 0xffff, 0x03ae, 0x0003, + 0x0265, 0x0000, 0x0268, 0x0001, 0x005f, 0x03c0, 0x0002, 0x026b, + // Entry 48240 - 4827F + 0x0271, 0x0004, 0x005f, 0x03e0, 0x03c9, 0xffff, 0x03e0, 0x0004, + 0x005f, 0x040a, 0x03f8, 0xffff, 0x040a, 0x0003, 0x027b, 0x027e, + 0x0282, 0x0001, 0x000d, 0x0d0f, 0x0002, 0x005f, 0xffff, 0x041d, + 0x0002, 0x0285, 0x028b, 0x0004, 0x005f, 0x0437, 0x0420, 0xffff, + 0x0437, 0x0004, 0x005f, 0x0461, 0x044f, 0xffff, 0x0461, 0x0001, + 0x0293, 0x0001, 0x005f, 0x0474, 0x0004, 0x029b, 0x02a0, 0x0000, + 0x02a5, 0x0003, 0x001d, 0x0e69, 0x22a4, 0x22ab, 0x0003, 0x005f, + 0x0481, 0x048b, 0x049b, 0x0002, 0x03d2, 0x02a8, 0x0003, 0x02ac, + // Entry 48280 - 482BF + 0x0370, 0x030e, 0x0060, 0x005f, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x04af, 0x04fe, 0xffff, 0x0550, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 482C0 - 482FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x05b6, 0x0060, 0x005f, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 48300 - 4833F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x04c4, 0x0514, 0xffff, 0x0565, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x059f, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 48340 - 4837F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x05c3, 0x0060, 0x005f, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x04e3, 0x0534, 0xffff, + 0x0584, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 48380 - 483BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x05da, + 0x0003, 0x03d6, 0x0445, 0x0409, 0x0031, 0x0057, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 483C0 - 483FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x30c6, 0x30cf, 0xffff, 0x30d8, 0x003a, + 0x0057, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 48400 - 4843F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x30c6, 0x30cf, + 0xffff, 0x30d8, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x3143, 0x0031, 0x0057, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 48440 - 4847F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x30ca, 0x30d3, 0xffff, 0x30dc, 0x0003, 0x0004, + 0x013b, 0x05c3, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000d, 0x0027, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0016, 0x0000, 0x0000, 0x0004, 0x0024, 0x001e, 0x001b, + 0x0021, 0x0001, 0x0002, 0x0000, 0x0001, 0x0002, 0x0010, 0x0001, + 0x0002, 0x001b, 0x0001, 0x0008, 0x062f, 0x0008, 0x0030, 0x0055, + 0x00a8, 0x00cf, 0x0110, 0x012a, 0x0000, 0x0000, 0x0002, 0x0033, + // Entry 48480 - 484BF + 0x0044, 0x0001, 0x0035, 0x000d, 0x005f, 0xffff, 0x0000, 0x0007, + 0x000c, 0x05ed, 0x0015, 0x001a, 0x001f, 0x0024, 0x0029, 0x0030, + 0x0035, 0x003b, 0x0001, 0x0046, 0x000d, 0x005f, 0xffff, 0x0000, + 0x0007, 0x000c, 0x05ed, 0x0015, 0x001a, 0x001f, 0x0024, 0x0029, + 0x0030, 0x0035, 0x003b, 0x0002, 0x0058, 0x007e, 0x0005, 0x005e, + 0x0067, 0x0075, 0x0000, 0x006c, 0x0007, 0x0039, 0x2034, 0x204c, + 0x2050, 0x2053, 0x04b9, 0x2056, 0x2059, 0x0003, 0x0000, 0xffff, + 0x2b3c, 0x2b3e, 0x0007, 0x0039, 0x2034, 0x204c, 0x2050, 0x2053, + // Entry 484C0 - 484FF + 0x04b9, 0x2056, 0x2059, 0x0007, 0x005f, 0xffff, 0x05f3, 0x05fd, + 0x012c, 0x0604, 0x0142, 0x060e, 0x0005, 0x0084, 0x008d, 0x009f, + 0x0000, 0x0096, 0x0007, 0x0039, 0x2034, 0x204c, 0x2050, 0x2053, + 0x04b9, 0x2056, 0x2059, 0x0007, 0x0000, 0x2b3a, 0x2b3c, 0x2b3e, + 0x2289, 0x2b3e, 0x25eb, 0x2296, 0x0007, 0x0039, 0x2034, 0x204c, + 0x2050, 0x2053, 0x04b9, 0x2056, 0x2059, 0x0007, 0x005f, 0xffff, + 0x05f3, 0x05fd, 0xffff, 0x0604, 0xffff, 0x060e, 0x0002, 0x00ab, + 0x00bd, 0x0003, 0x00af, 0x0000, 0x00b6, 0x0005, 0x0040, 0xffff, + // Entry 48500 - 4853F + 0x0549, 0x054c, 0x054f, 0x0552, 0x0005, 0x005f, 0xffff, 0x0619, + 0x0628, 0x0637, 0x0646, 0x0003, 0x00c1, 0x0000, 0x00c8, 0x0005, + 0x0000, 0xffff, 0x04e3, 0x3cf4, 0x3cf7, 0x3cfa, 0x0005, 0x005f, + 0xffff, 0x0619, 0x0628, 0x0637, 0x0646, 0x0002, 0x00d2, 0x00f1, + 0x0003, 0x00d6, 0x00df, 0x00e8, 0x0002, 0x00d9, 0x00dc, 0x0001, + 0x005f, 0x0655, 0x0001, 0x005f, 0x0658, 0x0002, 0x00e2, 0x00e5, + 0x0001, 0x005f, 0x065b, 0x0001, 0x0000, 0x235f, 0x0002, 0x00eb, + 0x00ee, 0x0001, 0x005f, 0x0655, 0x0001, 0x005f, 0x0658, 0x0003, + // Entry 48540 - 4857F + 0x00f5, 0x00fe, 0x0107, 0x0002, 0x00f8, 0x00fb, 0x0001, 0x005f, + 0x0655, 0x0001, 0x005f, 0x0658, 0x0002, 0x0101, 0x0104, 0x0001, + 0x005f, 0x0655, 0x0001, 0x005f, 0x0658, 0x0002, 0x010a, 0x010d, + 0x0001, 0x005f, 0x0655, 0x0001, 0x005f, 0x0658, 0x0003, 0x011f, + 0x0000, 0x0114, 0x0002, 0x0117, 0x011b, 0x0002, 0x005f, 0x065d, + 0x067c, 0x0002, 0x005f, 0x066c, 0x068e, 0x0002, 0x0122, 0x0126, + 0x0002, 0x005f, 0x0699, 0x06a5, 0x0002, 0x005f, 0x069e, 0x06aa, + 0x0004, 0x0138, 0x0132, 0x012f, 0x0135, 0x0001, 0x0002, 0x0025, + // Entry 48580 - 485BF + 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, 0x0017, + 0x0538, 0x0042, 0x017e, 0x0183, 0x0188, 0x018d, 0x01a8, 0x01be, + 0x01d4, 0x01ef, 0x0205, 0x021b, 0x0233, 0x0249, 0x025f, 0x027e, + 0x0298, 0x02b2, 0x02b7, 0x02bc, 0x02c1, 0x02db, 0x02f1, 0x0307, + 0x030c, 0x0311, 0x0316, 0x031b, 0x0320, 0x0325, 0x032a, 0x032f, + 0x0334, 0x034c, 0x035f, 0x0372, 0x038a, 0x039d, 0x03b0, 0x03c8, + 0x03db, 0x03ee, 0x0406, 0x0419, 0x042c, 0x0444, 0x0457, 0x046a, + 0x0482, 0x0495, 0x04a8, 0x04c0, 0x04d3, 0x04e6, 0x04eb, 0x0000, + // Entry 485C0 - 485FF + 0x04f0, 0x0507, 0x051d, 0x0533, 0x054a, 0x0560, 0x0576, 0x058d, + 0x05a3, 0x0000, 0x05b9, 0x05be, 0x0001, 0x0180, 0x0001, 0x005f, + 0x06b0, 0x0001, 0x0185, 0x0001, 0x005f, 0x06b9, 0x0001, 0x018a, + 0x0001, 0x005f, 0x06b9, 0x0003, 0x0191, 0x0194, 0x0199, 0x0001, + 0x005f, 0x06bf, 0x0003, 0x005f, 0x06c5, 0x06cd, 0x06d7, 0x0002, + 0x019c, 0x01a2, 0x0004, 0x005f, 0x06e4, 0x06e4, 0xffff, 0x06e4, + 0x0004, 0x005f, 0x06ff, 0x06c5, 0xffff, 0x06f3, 0x0003, 0x01ac, + 0x0000, 0x01af, 0x0001, 0x0001, 0x008e, 0x0002, 0x01b2, 0x01b8, + // Entry 48600 - 4863F + 0x0004, 0x005f, 0x0713, 0x0713, 0xffff, 0x06e4, 0x0004, 0x005f, + 0x0720, 0x06c5, 0xffff, 0x06f3, 0x0003, 0x01c2, 0x0000, 0x01c5, + 0x0001, 0x0001, 0x008e, 0x0002, 0x01c8, 0x01ce, 0x0004, 0x005f, + 0x06e4, 0x06e4, 0xffff, 0x06e4, 0x0004, 0x005f, 0x0720, 0x0720, + 0xffff, 0x06ff, 0x0003, 0x01d8, 0x01db, 0x01e0, 0x0001, 0x005f, + 0x0732, 0x0003, 0x005f, 0x0743, 0x075a, 0x076f, 0x0002, 0x01e3, + 0x01e9, 0x0004, 0x005f, 0x0787, 0x0787, 0xffff, 0x0787, 0x0004, + 0x005f, 0x07a7, 0x07a7, 0xffff, 0x07a7, 0x0003, 0x01f3, 0x0000, + // Entry 48640 - 4867F + 0x01f6, 0x0001, 0x005f, 0x07c7, 0x0002, 0x01f9, 0x01ff, 0x0004, + 0x005f, 0x07d1, 0x07d1, 0xffff, 0x07e7, 0x0004, 0x005f, 0x0803, + 0x0803, 0xffff, 0x081c, 0x0003, 0x0209, 0x0000, 0x020c, 0x0001, + 0x005f, 0x083b, 0x0002, 0x020f, 0x0215, 0x0004, 0x005f, 0x07d1, + 0x07d1, 0xffff, 0x07e7, 0x0004, 0x005f, 0x0803, 0x0803, 0xffff, + 0x07a7, 0x0003, 0x0000, 0x021f, 0x0224, 0x0003, 0x005f, 0x084c, + 0x0859, 0x0864, 0x0002, 0x0227, 0x022d, 0x0004, 0x005f, 0x0872, + 0x0872, 0xffff, 0x0872, 0x0004, 0x005f, 0x0898, 0x0882, 0xffff, + // Entry 48680 - 486BF + 0x0898, 0x0003, 0x0237, 0x0000, 0x023a, 0x0001, 0x0029, 0x006c, + 0x0002, 0x023d, 0x0243, 0x0004, 0x005f, 0x0872, 0x0872, 0xffff, + 0x0872, 0x0004, 0x005f, 0x0898, 0x0882, 0xffff, 0x0898, 0x0003, + 0x024d, 0x0000, 0x0250, 0x0001, 0x0029, 0x006c, 0x0002, 0x0253, + 0x0259, 0x0004, 0x005f, 0x08ad, 0x08ad, 0xffff, 0x08ad, 0x0004, + 0x005f, 0x0898, 0x0882, 0xffff, 0x0898, 0x0004, 0x0264, 0x0267, + 0x026c, 0x027b, 0x0001, 0x005f, 0x08c0, 0x0003, 0x005f, 0x08c7, + 0x08d4, 0x08df, 0x0002, 0x026f, 0x0275, 0x0004, 0x005f, 0x08ed, + // Entry 486C0 - 486FF + 0x08ed, 0xffff, 0x08ed, 0x0004, 0x005f, 0x0916, 0x0900, 0xffff, + 0x0916, 0x0001, 0x005f, 0x092b, 0x0004, 0x0283, 0x0000, 0x0286, + 0x0295, 0x0001, 0x005f, 0x0936, 0x0002, 0x0289, 0x028f, 0x0004, + 0x005f, 0x093b, 0x093b, 0xffff, 0x094a, 0x0004, 0x005f, 0x095a, + 0x095a, 0xffff, 0x0916, 0x0001, 0x005f, 0x092b, 0x0004, 0x029d, + 0x0000, 0x02a0, 0x02af, 0x0001, 0x005f, 0x0936, 0x0002, 0x02a3, + 0x02a9, 0x0004, 0x005f, 0x096e, 0x096e, 0xffff, 0x096e, 0x0004, + 0x005f, 0x095a, 0x0900, 0xffff, 0x0916, 0x0001, 0x005f, 0x092b, + // Entry 48700 - 4873F + 0x0001, 0x02b4, 0x0001, 0x005f, 0x0980, 0x0001, 0x02b9, 0x0001, + 0x005f, 0x098d, 0x0001, 0x02be, 0x0001, 0x005f, 0x098d, 0x0003, + 0x0000, 0x02c5, 0x02cc, 0x0005, 0x005f, 0x02bb, 0x02c0, 0x02c5, + 0x0995, 0x09a4, 0x0002, 0x02cf, 0x02d5, 0x0004, 0x005f, 0x09b0, + 0x09b0, 0xffff, 0x09b0, 0x0004, 0x005f, 0x09d1, 0x02bb, 0xffff, + 0x09c2, 0x0003, 0x02df, 0x0000, 0x02e2, 0x0001, 0x005f, 0x09e8, + 0x0002, 0x02e5, 0x02eb, 0x0004, 0x005f, 0x09b0, 0x09b0, 0xffff, + 0x09b0, 0x0004, 0x005f, 0x09d1, 0x02bb, 0xffff, 0x09c2, 0x0003, + // Entry 48740 - 4877F + 0x02f5, 0x0000, 0x02f8, 0x0001, 0x005f, 0x09e8, 0x0002, 0x02fb, + 0x0301, 0x0004, 0x005f, 0x09b0, 0x09b0, 0xffff, 0x09b0, 0x0004, + 0x005f, 0x09d1, 0x02bb, 0xffff, 0x09c2, 0x0001, 0x0309, 0x0001, + 0x005f, 0x09eb, 0x0001, 0x030e, 0x0001, 0x005f, 0x09f7, 0x0001, + 0x0313, 0x0001, 0x005f, 0x09f7, 0x0001, 0x0318, 0x0001, 0x005f, + 0x0a01, 0x0001, 0x031d, 0x0001, 0x005f, 0x0a0e, 0x0001, 0x0322, + 0x0001, 0x005f, 0x0a0e, 0x0001, 0x0327, 0x0001, 0x005f, 0x0a1a, + 0x0001, 0x032c, 0x0001, 0x005f, 0x0a2d, 0x0001, 0x0331, 0x0001, + // Entry 48780 - 487BF + 0x005f, 0x0a2d, 0x0003, 0x0000, 0x0338, 0x033d, 0x0003, 0x005f, + 0x0a37, 0x0a4b, 0x0a5d, 0x0002, 0x0340, 0x0346, 0x0004, 0x005f, + 0x0a72, 0x0a5d, 0xffff, 0x0a72, 0x0004, 0x005f, 0x0a9f, 0x0a37, + 0xffff, 0x0a8b, 0x0003, 0x0000, 0x0000, 0x0350, 0x0002, 0x0353, + 0x0359, 0x0004, 0x005f, 0x0ada, 0x0abb, 0xffff, 0x0ac6, 0x0004, + 0x005f, 0x0af3, 0x0ae9, 0xffff, 0x0a8b, 0x0003, 0x0000, 0x0000, + 0x0363, 0x0002, 0x0366, 0x036c, 0x0004, 0x005f, 0x0ada, 0x0ada, + 0xffff, 0x0a72, 0x0004, 0x005f, 0x0af3, 0x0ae9, 0xffff, 0x0a8b, + // Entry 487C0 - 487FF + 0x0003, 0x0000, 0x0376, 0x037b, 0x0003, 0x005f, 0x0b05, 0x0b17, + 0x0b27, 0x0002, 0x037e, 0x0384, 0x0004, 0x005f, 0x0b51, 0x0b3a, + 0xffff, 0x0b51, 0x0004, 0x005f, 0x0b7a, 0x0b05, 0xffff, 0x0b68, + 0x0003, 0x0000, 0x0000, 0x038e, 0x0002, 0x0391, 0x0397, 0x0004, + 0x005f, 0x0b94, 0x0b94, 0xffff, 0x0b3a, 0x0004, 0x005f, 0x0bba, + 0x0ba4, 0xffff, 0x0baf, 0x0003, 0x0000, 0x0000, 0x03a1, 0x0002, + 0x03a4, 0x03aa, 0x0004, 0x005f, 0x0b94, 0x0b94, 0xffff, 0x0b3a, + 0x0004, 0x005f, 0x0bba, 0x0ba4, 0xffff, 0x0baf, 0x0003, 0x0000, + // Entry 48800 - 4883F + 0x03b4, 0x03b9, 0x0003, 0x005f, 0x0bcd, 0x0bdc, 0x0be9, 0x0002, + 0x03bc, 0x03c2, 0x0004, 0x005f, 0x0bf9, 0x0bf9, 0xffff, 0x0bf9, + 0x0004, 0x005f, 0x0c1c, 0x0bcd, 0xffff, 0x0c0d, 0x0003, 0x0000, + 0x0000, 0x03cc, 0x0002, 0x03cf, 0x03d5, 0x0004, 0x005f, 0x0c3e, + 0x0c33, 0xffff, 0x0bf9, 0x0004, 0x005f, 0x0c57, 0x0c4d, 0xffff, + 0x0c0d, 0x0003, 0x0000, 0x0000, 0x03df, 0x0002, 0x03e2, 0x03e8, + 0x0004, 0x005f, 0x0c3e, 0x0c33, 0xffff, 0x0bf9, 0x0004, 0x005f, + 0x0c57, 0x0c4d, 0xffff, 0x0c0d, 0x0003, 0x0000, 0x03f2, 0x03f7, + // Entry 48840 - 4887F + 0x0003, 0x005f, 0x0c69, 0x0c7b, 0x0c8b, 0x0002, 0x03fa, 0x0400, + 0x0004, 0x005f, 0x0c9e, 0x0c8b, 0xffff, 0x0c9e, 0x0004, 0x005f, + 0x0cc7, 0x0c69, 0xffff, 0x0cb5, 0x0003, 0x0000, 0x0000, 0x040a, + 0x0002, 0x040d, 0x0413, 0x0004, 0x005f, 0x0cec, 0x0ce1, 0xffff, + 0x0c9e, 0x0004, 0x005f, 0x0d05, 0x0cfb, 0xffff, 0x0cb5, 0x0003, + 0x0000, 0x0000, 0x041d, 0x0002, 0x0420, 0x0426, 0x0004, 0x005f, + 0x0cec, 0x0ce1, 0xffff, 0x0c9e, 0x0004, 0x005f, 0x0d05, 0x0cfb, + 0xffff, 0x0cb5, 0x0003, 0x0000, 0x0430, 0x0435, 0x0003, 0x005f, + // Entry 48880 - 488BF + 0x0d17, 0x0d29, 0x0d39, 0x0002, 0x0438, 0x043e, 0x0004, 0x005f, + 0x0d4c, 0x0d39, 0xffff, 0x0d4c, 0x0004, 0x005f, 0x0d76, 0x0d17, + 0xffff, 0x0d64, 0x0003, 0x0000, 0x0000, 0x0448, 0x0002, 0x044b, + 0x0451, 0x0004, 0x005f, 0x0d9b, 0x0d90, 0xffff, 0x0d4c, 0x0004, + 0x005f, 0x0db5, 0x0dab, 0xffff, 0x0d64, 0x0003, 0x0000, 0x0000, + 0x045b, 0x0002, 0x045e, 0x0464, 0x0004, 0x005f, 0x0d9b, 0x0d90, + 0xffff, 0x0d4c, 0x0004, 0x005f, 0x0db5, 0x0dab, 0xffff, 0x0d64, + 0x0003, 0x0000, 0x046e, 0x0473, 0x0003, 0x005f, 0x0dc7, 0x0dd9, + // Entry 488C0 - 488FF + 0x0de9, 0x0002, 0x0476, 0x047c, 0x0004, 0x005f, 0x0dfc, 0x0de9, + 0xffff, 0x0dfc, 0x0004, 0x005f, 0x0e25, 0x0dc7, 0xffff, 0x0e13, + 0x0003, 0x0000, 0x0000, 0x0486, 0x0002, 0x0489, 0x048f, 0x0004, + 0x005f, 0x0e4b, 0x0e40, 0xffff, 0x0dfc, 0x0004, 0x005f, 0x0e64, + 0x0e5a, 0xffff, 0x0e13, 0x0003, 0x0000, 0x0000, 0x0499, 0x0002, + 0x049c, 0x04a2, 0x0004, 0x005f, 0x0e4b, 0x0e40, 0xffff, 0x0dfc, + 0x0004, 0x005f, 0x0e64, 0x0e5a, 0xffff, 0x0e13, 0x0003, 0x0000, + 0x04ac, 0x04b1, 0x0003, 0x005f, 0x0e77, 0x0e8a, 0x0e9b, 0x0002, + // Entry 48900 - 4893F + 0x04b4, 0x04ba, 0x0004, 0x005f, 0x0ec7, 0x0eaf, 0xffff, 0x0ec7, + 0x0004, 0x005f, 0x0ef2, 0x0e77, 0xffff, 0x0edf, 0x0003, 0x0000, + 0x0000, 0x04c4, 0x0002, 0x04c7, 0x04cd, 0x0004, 0x005f, 0x0f1f, + 0x0f0e, 0xffff, 0x0f1f, 0x0004, 0x005f, 0x0f45, 0x0f2f, 0xffff, + 0x0f3a, 0x0003, 0x0000, 0x0000, 0x04d7, 0x0002, 0x04da, 0x04e0, + 0x0004, 0x005f, 0x0f1f, 0x0f0e, 0xffff, 0x0f1f, 0x0004, 0x005f, + 0x0f45, 0x0f2f, 0xffff, 0x0f3a, 0x0001, 0x04e8, 0x0001, 0x005f, + 0x0f59, 0x0001, 0x04ed, 0x0001, 0x005f, 0x0f59, 0x0003, 0x0000, + // Entry 48940 - 4897F + 0x04f4, 0x04f8, 0x0002, 0x005f, 0xffff, 0x0f5f, 0x0002, 0x04fb, + 0x0501, 0x0004, 0x005f, 0x0f6b, 0x0f6b, 0xffff, 0x0f6b, 0x0004, + 0x005f, 0x0f8d, 0x0f7c, 0xffff, 0x0f8d, 0x0003, 0x050b, 0x0000, + 0x050e, 0x0001, 0x005f, 0x0f9e, 0x0002, 0x0511, 0x0517, 0x0004, + 0x005f, 0x0fa2, 0x0fa2, 0xffff, 0x0f6b, 0x0004, 0x005f, 0x0fb0, + 0x0fb0, 0xffff, 0x0f8d, 0x0003, 0x0521, 0x0000, 0x0524, 0x0001, + 0x005f, 0x0f9e, 0x0002, 0x0527, 0x052d, 0x0004, 0x005f, 0x0fa2, + 0x0fa2, 0xffff, 0x0f6b, 0x0004, 0x005f, 0x0fb0, 0x0fb0, 0xffff, + // Entry 48980 - 489BF + 0x0f8d, 0x0003, 0x0000, 0x0537, 0x053b, 0x0002, 0x005f, 0xffff, + 0x0fbe, 0x0002, 0x053e, 0x0544, 0x0004, 0x005f, 0x0fcb, 0x0fcb, + 0xffff, 0x0fcb, 0x0004, 0x005f, 0x0ff0, 0x0fdd, 0xffff, 0x0ff0, + 0x0003, 0x054e, 0x0000, 0x0551, 0x0001, 0x0001, 0x07c5, 0x0002, + 0x0554, 0x055a, 0x0004, 0x005f, 0x1002, 0x1002, 0xffff, 0x0fcb, + 0x0004, 0x005f, 0x1011, 0x1011, 0xffff, 0x0ff0, 0x0003, 0x0564, + 0x0000, 0x0567, 0x0001, 0x0001, 0x07c5, 0x0002, 0x056a, 0x0570, + 0x0004, 0x005f, 0x1002, 0x1002, 0xffff, 0x0fcb, 0x0004, 0x005f, + // Entry 489C0 - 489FF + 0x1011, 0x1011, 0xffff, 0x0ff0, 0x0003, 0x0000, 0x057a, 0x057e, + 0x0002, 0x005f, 0xffff, 0x1020, 0x0002, 0x0581, 0x0587, 0x0004, + 0x005f, 0x1025, 0x1025, 0xffff, 0x1025, 0x0004, 0x005f, 0x104a, + 0x1038, 0xffff, 0x104a, 0x0003, 0x0591, 0x0000, 0x0594, 0x0001, + 0x0001, 0x083e, 0x0002, 0x0597, 0x059d, 0x0004, 0x005f, 0x105d, + 0x105d, 0xffff, 0x1025, 0x0004, 0x005f, 0x106c, 0x106c, 0xffff, + 0x104a, 0x0003, 0x05a7, 0x0000, 0x05aa, 0x0001, 0x0001, 0x083e, + 0x0002, 0x05ad, 0x05b3, 0x0004, 0x005f, 0x105d, 0x105d, 0xffff, + // Entry 48A00 - 48A3F + 0x1025, 0x0004, 0x005f, 0x106c, 0x106c, 0xffff, 0x104a, 0x0001, + 0x05bb, 0x0001, 0x005f, 0x107b, 0x0001, 0x05c0, 0x0001, 0x005f, + 0x107b, 0x0004, 0x05c8, 0x05cd, 0x05d2, 0x05e1, 0x0003, 0x0000, + 0x1dc7, 0x23b5, 0x3cfd, 0x0003, 0x005f, 0xffff, 0x1082, 0x1092, + 0x0002, 0x0000, 0x05d5, 0x0003, 0x0000, 0x05dc, 0x05d9, 0x0001, + 0x005f, 0x10a2, 0x0003, 0x005f, 0xffff, 0x10c2, 0x10d9, 0x0002, + 0x0000, 0x05e4, 0x0003, 0x067e, 0x0714, 0x05e8, 0x0094, 0x005f, + 0x10f3, 0x1106, 0x111b, 0x1131, 0x1161, 0x11a4, 0x11d8, 0x1210, + // Entry 48A40 - 48A7F + 0x124c, 0x1281, 0x12b8, 0xffff, 0x12f1, 0x1321, 0x1359, 0x139b, + 0x13e1, 0x141c, 0x1465, 0x14c2, 0x152c, 0x157f, 0x15cc, 0x160c, + 0x1646, 0x1676, 0x1684, 0x16a1, 0x16cb, 0x16f4, 0x1720, 0x1744, + 0x177a, 0x17ac, 0x17e6, 0x1816, 0x1828, 0x184a, 0x1886, 0x18cd, + 0x18ef, 0x18fc, 0x1915, 0x193e, 0x1974, 0x1998, 0x19e3, 0x1a19, + 0x1a51, 0x1a9d, 0x1ae0, 0x1b02, 0x1b1b, 0x1b41, 0x1b52, 0x1b6f, + 0x1b97, 0x1bac, 0x1bd8, 0x1c34, 0x1c74, 0x1c86, 0x1cac, 0x1cfb, + 0x1d35, 0x1d59, 0x1d6b, 0x1d7b, 0x1d8d, 0x1da3, 0x1dba, 0x1ddc, + // Entry 48A80 - 48ABF + 0x1e0e, 0x1e44, 0x1e7a, 0xffff, 0x1ea2, 0x1eba, 0x1edd, 0x1f01, + 0x1f22, 0x1f54, 0x1f63, 0x1f85, 0x1fb1, 0x1fd6, 0x2000, 0x200e, + 0x2021, 0x2034, 0x205b, 0x2089, 0x20b0, 0x2108, 0x215a, 0x2197, + 0x21bd, 0x21cc, 0x21d8, 0x21fc, 0x224c, 0x2298, 0x22cc, 0x22d8, + 0x2305, 0x2358, 0x2396, 0x23ca, 0x23f6, 0x2403, 0x242d, 0x2464, + 0x249a, 0x24ce, 0x24fe, 0x2540, 0x2556, 0x2563, 0x2574, 0x2583, + 0x25a0, 0xffff, 0x25d6, 0x25fa, 0x260c, 0x2622, 0x2637, 0x264b, + 0x265a, 0x2666, 0x2681, 0x26a9, 0x26bc, 0x26d7, 0x26fb, 0x271c, + // Entry 48AC0 - 48AFF + 0x2750, 0x276c, 0x27a8, 0x27e6, 0x280e, 0x2831, 0x2874, 0x28a2, + 0x28b0, 0x28c0, 0x28e6, 0x2923, 0x0094, 0x005f, 0xffff, 0xffff, + 0xffff, 0xffff, 0x114c, 0x1197, 0x11ca, 0x1200, 0x123e, 0x1274, + 0x12a7, 0xffff, 0x12e6, 0x1313, 0x1349, 0x1385, 0x13d3, 0x1409, + 0x144e, 0x149f, 0x1514, 0x1568, 0x15b9, 0x15fe, 0x1634, 0xffff, + 0xffff, 0x1692, 0xffff, 0x16e4, 0xffff, 0x1735, 0x176e, 0x179e, + 0x17d4, 0xffff, 0xffff, 0x183b, 0x1874, 0x18c2, 0xffff, 0xffff, + 0xffff, 0x1929, 0xffff, 0x1983, 0x19ce, 0xffff, 0x1a3c, 0x1a87, + // Entry 48B00 - 48B3F + 0x1ad5, 0xffff, 0xffff, 0xffff, 0xffff, 0x1b61, 0xffff, 0xffff, + 0x1bbd, 0x1c1a, 0xffff, 0xffff, 0x1c93, 0x1cea, 0x1d29, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1dd0, 0x1e00, 0x1e36, + 0x1e6c, 0xffff, 0xffff, 0xffff, 0x1ed1, 0xffff, 0x1f0f, 0xffff, + 0xffff, 0x1f75, 0xffff, 0x1fc7, 0xffff, 0xffff, 0xffff, 0xffff, + 0x204a, 0xffff, 0x2097, 0x20ee, 0x2148, 0x218a, 0xffff, 0xffff, + 0xffff, 0x21e5, 0x2236, 0x2284, 0xffff, 0xffff, 0x22eb, 0x2345, + 0x238a, 0x23ba, 0xffff, 0xffff, 0x241d, 0x2459, 0x2486, 0xffff, + // Entry 48B40 - 48B7F + 0x24e3, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2591, 0xffff, + 0x25ca, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2673, 0xffff, 0xffff, 0x26cb, 0xffff, 0x2708, 0xffff, 0x275d, + 0x2796, 0x27d8, 0xffff, 0x281e, 0x2863, 0xffff, 0xffff, 0xffff, + 0x28d8, 0x290e, 0x0094, 0x005f, 0xffff, 0xffff, 0xffff, 0xffff, + 0x117c, 0x11b7, 0x11ec, 0x1227, 0x1260, 0x1294, 0x12cf, 0xffff, + 0x1302, 0x1335, 0x136f, 0x13b7, 0x13f5, 0x1435, 0x1482, 0x14eb, + 0x154a, 0x159c, 0x15e5, 0x1620, 0x165e, 0xffff, 0xffff, 0x16b6, + // Entry 48B80 - 48BBF + 0xffff, 0x170a, 0xffff, 0x1759, 0x178c, 0x17c0, 0x17fe, 0xffff, + 0xffff, 0x185f, 0x189e, 0x18de, 0xffff, 0xffff, 0xffff, 0x1959, + 0xffff, 0x19b3, 0x19fe, 0xffff, 0x1a6c, 0x1ab9, 0x1af1, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1b83, 0xffff, 0xffff, 0x1bf9, 0x1c54, + 0xffff, 0xffff, 0x1ccb, 0x1d12, 0x1d47, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1dee, 0x1e22, 0x1e58, 0x1e8e, 0xffff, + 0xffff, 0xffff, 0x1eef, 0xffff, 0x1f3b, 0xffff, 0xffff, 0x1f9b, + 0xffff, 0x1feb, 0xffff, 0xffff, 0xffff, 0xffff, 0x2072, 0xffff, + // Entry 48BC0 - 48BFF + 0x20cf, 0x2128, 0x2172, 0x21aa, 0xffff, 0xffff, 0xffff, 0x2219, + 0x2268, 0x22b2, 0xffff, 0xffff, 0x2325, 0x2371, 0x23a8, 0x23e0, + 0xffff, 0xffff, 0x2443, 0x2475, 0x24b4, 0xffff, 0x251f, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x25b5, 0xffff, 0x25e8, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2695, 0xffff, + 0xffff, 0x26e9, 0xffff, 0x2736, 0xffff, 0x2781, 0x27c0, 0x27fa, + 0xffff, 0x284a, 0x288b, 0xffff, 0xffff, 0xffff, 0x28fa, 0x293e, + 0x0002, 0x0003, 0x00bd, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 48C00 - 48C3F + 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, 0x0023, 0x001d, + 0x001a, 0x0020, 0x0001, 0x001d, 0x1545, 0x0001, 0x001d, 0x1560, + 0x0001, 0x001f, 0x0000, 0x0001, 0x0000, 0x240c, 0x0008, 0x002f, + 0x0066, 0x0000, 0x0000, 0x008b, 0x009b, 0x00ac, 0x0000, 0x0002, + 0x0032, 0x0054, 0x0003, 0x0036, 0x0000, 0x0045, 0x000d, 0x0006, + 0xffff, 0x001e, 0x44f7, 0x44fb, 0x44ff, 0x4503, 0x44b8, 0x44bc, + 0x415c, 0x4507, 0x4391, 0x44c4, 0x004a, 0x000d, 0x0060, 0xffff, + // Entry 48C40 - 48C7F + 0x0000, 0x0008, 0x0011, 0x0017, 0x001d, 0x0022, 0x0028, 0x002e, + 0x0036, 0x003f, 0x0046, 0x004f, 0x0002, 0x0000, 0x0057, 0x000d, + 0x0000, 0xffff, 0x257b, 0x2b4e, 0x2b3c, 0x2b42, 0x2b3c, 0x257b, + 0x257b, 0x2b42, 0x2b3a, 0x2b50, 0x2b40, 0x2b3e, 0x0002, 0x0069, + 0x007f, 0x0003, 0x006d, 0x0000, 0x0076, 0x0007, 0x0019, 0x02ce, + 0x4a3f, 0x4a43, 0x4a47, 0x4a4b, 0x4a4f, 0x4a53, 0x0007, 0x0060, + 0x0058, 0x0060, 0x0068, 0x0070, 0x0078, 0x007f, 0x0088, 0x0002, + 0x0000, 0x0082, 0x0007, 0x0000, 0x2b3e, 0x2722, 0x25ed, 0x3a8d, + // Entry 48C80 - 48CBF + 0x2b40, 0x2b3a, 0x2b3a, 0x0003, 0x0095, 0x0000, 0x008f, 0x0001, + 0x0091, 0x0002, 0x0060, 0x008f, 0x009f, 0x0001, 0x0097, 0x0002, + 0x0060, 0x00ab, 0x00ae, 0x0004, 0x00a9, 0x00a3, 0x00a0, 0x00a6, + 0x0001, 0x001d, 0x1760, 0x0001, 0x001d, 0x1779, 0x0001, 0x0058, + 0x0127, 0x0001, 0x0002, 0x028b, 0x0004, 0x00ba, 0x00b4, 0x00b1, + 0x00b7, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, + 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x003d, 0x0000, 0x0000, + 0x0000, 0x00fb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0100, + // Entry 48CC0 - 48CFF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0105, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0110, 0x0000, 0x0000, 0x0115, + 0x0000, 0x0000, 0x011a, 0x0001, 0x00fd, 0x0001, 0x0060, 0x00b1, + 0x0001, 0x0102, 0x0001, 0x0043, 0x0111, 0x0002, 0x0108, 0x010b, + // Entry 48D00 - 48D3F + 0x0001, 0x0060, 0x00b7, 0x0003, 0x0060, 0x00be, 0x00c3, 0x00c8, + 0x0001, 0x0112, 0x0001, 0x0060, 0x00d1, 0x0001, 0x0117, 0x0001, + 0x001f, 0x05f5, 0x0001, 0x011c, 0x0001, 0x001f, 0x05fc, 0x0002, + 0x0003, 0x00e9, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000c, 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, 0x0023, 0x001d, 0x001a, + 0x0020, 0x0001, 0x0002, 0x0000, 0x0001, 0x0002, 0x0010, 0x0001, + 0x0002, 0x0044, 0x0001, 0x0000, 0x240c, 0x0008, 0x002f, 0x0066, + // Entry 48D40 - 48D7F + 0x008b, 0x009f, 0x00b7, 0x00c7, 0x00d8, 0x0000, 0x0002, 0x0032, + 0x0054, 0x0003, 0x0036, 0x0000, 0x0045, 0x000d, 0x0018, 0xffff, + 0x010e, 0x0113, 0x29fc, 0x011b, 0x2a00, 0x0122, 0x0127, 0x2992, + 0x012f, 0x2a03, 0x0133, 0x0137, 0x000d, 0x0018, 0xffff, 0x013b, + 0x0144, 0x014e, 0x0154, 0x2a00, 0x015b, 0x0163, 0x2992, 0x016a, + 0x0174, 0x017d, 0x0187, 0x0002, 0x0000, 0x0057, 0x000d, 0x0018, + 0xffff, 0x0191, 0x2a07, 0x2a09, 0x2a0b, 0x2a09, 0x0191, 0x0191, + 0x2a0d, 0x2a0f, 0x2a11, 0x2a13, 0x2a15, 0x0002, 0x0069, 0x007f, + // Entry 48D80 - 48DBF + 0x0003, 0x006d, 0x0000, 0x0076, 0x0007, 0x0009, 0x5839, 0x5845, + 0x5849, 0x584d, 0x5851, 0x5855, 0x5859, 0x0007, 0x0018, 0x01a4, + 0x01ab, 0x01b2, 0x01bb, 0x29b7, 0x01cb, 0x01d2, 0x0002, 0x0000, + 0x0082, 0x0007, 0x0000, 0x2b29, 0x3a8d, 0x3a8d, 0x2296, 0x2296, + 0x2296, 0x3d01, 0x0001, 0x008d, 0x0003, 0x0091, 0x0000, 0x0098, + 0x0005, 0x0018, 0xffff, 0x01d9, 0x29f0, 0x01df, 0x01e2, 0x0005, + 0x0018, 0xffff, 0x01e5, 0x01ee, 0x01f7, 0x0200, 0x0001, 0x00a1, + 0x0003, 0x00a5, 0x0000, 0x00ae, 0x0002, 0x00a8, 0x00ab, 0x0001, + // Entry 48DC0 - 48DFF + 0x0039, 0x0f50, 0x0001, 0x0039, 0x0f57, 0x0002, 0x00b1, 0x00b4, + 0x0001, 0x0039, 0x0f50, 0x0001, 0x0039, 0x0f57, 0x0003, 0x00c1, + 0x0000, 0x00bb, 0x0001, 0x00bd, 0x0002, 0x0018, 0x021d, 0x0227, + 0x0001, 0x00c3, 0x0002, 0x0018, 0x0234, 0x0237, 0x0004, 0x00d5, + 0x00cf, 0x00cc, 0x00d2, 0x0001, 0x0002, 0x0025, 0x0001, 0x0002, + 0x0033, 0x0001, 0x0002, 0x0282, 0x0001, 0x0002, 0x028b, 0x0004, + 0x00e6, 0x00e0, 0x00dd, 0x00e3, 0x0001, 0x0000, 0x0524, 0x0001, + 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, + // Entry 48E00 - 48E3F + 0x0040, 0x012a, 0x0000, 0x0000, 0x012f, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0134, 0x0000, 0x0000, 0x0139, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x013e, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0149, 0x0000, 0x014e, + 0x0000, 0x0000, 0x0153, 0x0000, 0x0000, 0x0158, 0x0000, 0x0000, + // Entry 48E40 - 48E7F + 0x015d, 0x0001, 0x012c, 0x0001, 0x0018, 0x023a, 0x0001, 0x0131, + 0x0001, 0x0018, 0x0240, 0x0001, 0x0136, 0x0001, 0x0018, 0x0246, + 0x0001, 0x013b, 0x0001, 0x0018, 0x024c, 0x0002, 0x0141, 0x0144, + 0x0001, 0x0018, 0x0251, 0x0003, 0x0023, 0x0066, 0x2b10, 0x2b15, + 0x0001, 0x014b, 0x0001, 0x0039, 0x0f64, 0x0001, 0x0150, 0x0001, + 0x0018, 0x027c, 0x0001, 0x0155, 0x0001, 0x0018, 0x0282, 0x0001, + 0x015a, 0x0001, 0x0018, 0x0289, 0x0001, 0x015f, 0x0001, 0x0018, + 0x028e, 0x0002, 0x0003, 0x00e9, 0x0008, 0x0000, 0x0000, 0x0000, + // Entry 48E80 - 48EBF + 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, 0x0023, + 0x001d, 0x001a, 0x0020, 0x0001, 0x0002, 0x0000, 0x0001, 0x0002, + 0x0010, 0x0001, 0x0002, 0x0044, 0x0001, 0x0000, 0x240c, 0x0008, + 0x002f, 0x0066, 0x008b, 0x009f, 0x00b7, 0x00c7, 0x00d8, 0x0000, + 0x0002, 0x0032, 0x0054, 0x0003, 0x0036, 0x0000, 0x0045, 0x000d, + 0x0060, 0xffff, 0x00d6, 0x00da, 0x00de, 0x00e3, 0x00e7, 0x00ec, + 0x00f1, 0x00f5, 0x00fa, 0x00fe, 0x0102, 0x0106, 0x000d, 0x0060, + // Entry 48EC0 - 48EFF + 0xffff, 0x010a, 0x0111, 0x011c, 0x0125, 0x012d, 0x0137, 0x013e, + 0x0145, 0x014f, 0x0155, 0x015e, 0x016a, 0x0002, 0x0000, 0x0057, + 0x000d, 0x0018, 0xffff, 0x2a13, 0x2a07, 0x2a09, 0x2a13, 0x2a17, + 0x2a07, 0x2a19, 0x2a1b, 0x2a09, 0x2a13, 0x2a13, 0x2a1b, 0x0002, + 0x0069, 0x007f, 0x0003, 0x006d, 0x0000, 0x0076, 0x0007, 0x0060, + 0x0172, 0x0176, 0x017a, 0x017e, 0x0182, 0x0186, 0x018b, 0x0007, + 0x0060, 0x0190, 0x019b, 0x01a7, 0x01b3, 0x01c1, 0x01cd, 0x01d7, + 0x0002, 0x0000, 0x0082, 0x0007, 0x0018, 0x2a1b, 0x2a1d, 0x2a1f, + // Entry 48F00 - 48F3F + 0x2a1d, 0x2a1b, 0x2a21, 0x2a23, 0x0001, 0x008d, 0x0003, 0x0091, + 0x0000, 0x0098, 0x0005, 0x0060, 0xffff, 0x01e0, 0x01e7, 0x01ee, + 0x01f5, 0x0005, 0x0060, 0xffff, 0x01fc, 0x020e, 0x0220, 0x0232, + 0x0001, 0x00a1, 0x0003, 0x00a5, 0x0000, 0x00ae, 0x0002, 0x00a8, + 0x00ab, 0x0001, 0x0060, 0x0246, 0x0001, 0x0060, 0x0249, 0x0002, + 0x00b1, 0x00b4, 0x0001, 0x0060, 0x0246, 0x0001, 0x0060, 0x0249, + 0x0003, 0x00c1, 0x0000, 0x00bb, 0x0001, 0x00bd, 0x0002, 0x0060, + 0x024c, 0x025d, 0x0001, 0x00c3, 0x0002, 0x0060, 0x0272, 0x0276, + // Entry 48F40 - 48F7F + 0x0004, 0x00d5, 0x00cf, 0x00cc, 0x00d2, 0x0001, 0x0002, 0x0025, + 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x0282, 0x0001, 0x0002, + 0x028b, 0x0004, 0x00e6, 0x00e0, 0x00dd, 0x00e3, 0x0001, 0x0000, + 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, + 0x0000, 0x0546, 0x0040, 0x012a, 0x0000, 0x0000, 0x012f, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0134, 0x0000, 0x0000, 0x0139, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x013e, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0149, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 48F80 - 48FBF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x014e, + 0x0000, 0x0153, 0x0000, 0x0000, 0x0158, 0x0000, 0x0000, 0x015d, + 0x0000, 0x0000, 0x0162, 0x0001, 0x012c, 0x0001, 0x0060, 0x027a, + 0x0001, 0x0131, 0x0001, 0x0060, 0x0285, 0x0001, 0x0136, 0x0001, + 0x0060, 0x028a, 0x0001, 0x013b, 0x0001, 0x0060, 0x028e, 0x0002, + 0x0141, 0x0144, 0x0001, 0x0060, 0x0296, 0x0003, 0x0060, 0x029a, + // Entry 48FC0 - 48FFF + 0x02a1, 0x02a8, 0x0001, 0x014b, 0x0001, 0x0060, 0x02b3, 0x0001, + 0x0150, 0x0001, 0x0060, 0x02ba, 0x0001, 0x0155, 0x0001, 0x0060, + 0x02c1, 0x0001, 0x015a, 0x0001, 0x0060, 0x02c9, 0x0001, 0x015f, + 0x0001, 0x0060, 0x02d8, 0x0001, 0x0164, 0x0001, 0x0060, 0x02e7, + 0x0002, 0x0003, 0x00cb, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, 0x0023, 0x001d, + 0x001a, 0x0020, 0x0001, 0x0002, 0x0000, 0x0001, 0x0002, 0x0010, + // Entry 49000 - 4903F + 0x0001, 0x0002, 0x0044, 0x0001, 0x0000, 0x240c, 0x0008, 0x002f, + 0x0066, 0x007e, 0x0092, 0x00aa, 0x00ba, 0x0000, 0x0000, 0x0002, + 0x0032, 0x0054, 0x0003, 0x0036, 0x0000, 0x0045, 0x000d, 0x0060, + 0xffff, 0x02f3, 0x02fd, 0x0307, 0x0311, 0x031b, 0x0325, 0x032f, + 0x0339, 0x0343, 0x034d, 0x0357, 0x0361, 0x000d, 0x0060, 0xffff, + 0x036b, 0x037e, 0x038e, 0x039b, 0x03ab, 0x03bb, 0x03cb, 0x03de, + 0x03eb, 0x0404, 0x0414, 0x042d, 0x0002, 0x0000, 0x0057, 0x000d, + 0x0060, 0xffff, 0x0446, 0x044a, 0x044e, 0x0446, 0x044e, 0x0452, + // Entry 49040 - 4907F + 0x0452, 0x0456, 0x045a, 0x045e, 0x0462, 0x0466, 0x0001, 0x0068, + 0x0003, 0x006c, 0x0000, 0x0075, 0x0007, 0x0060, 0x046a, 0x0474, + 0x047e, 0x0488, 0x0492, 0x049c, 0x04a9, 0x0007, 0x0060, 0x04b6, + 0x04c9, 0x04d9, 0x04ec, 0x04fc, 0x050c, 0x051f, 0x0001, 0x0080, + 0x0003, 0x0084, 0x0000, 0x008b, 0x0005, 0x0060, 0xffff, 0x0535, + 0x053e, 0x0547, 0x0550, 0x0005, 0x0060, 0xffff, 0x0559, 0x0574, + 0x058f, 0x05aa, 0x0001, 0x0094, 0x0003, 0x0098, 0x0000, 0x00a1, + 0x0002, 0x009b, 0x009e, 0x0001, 0x0060, 0x05c5, 0x0001, 0x0060, + // Entry 49080 - 490BF + 0x05d8, 0x0002, 0x00a4, 0x00a7, 0x0001, 0x0060, 0x05c5, 0x0001, + 0x0060, 0x05d8, 0x0003, 0x00b4, 0x0000, 0x00ae, 0x0001, 0x00b0, + 0x0002, 0x0060, 0x05f1, 0x060c, 0x0001, 0x00b6, 0x0002, 0x0060, + 0x062d, 0x0637, 0x0004, 0x00c8, 0x00c2, 0x00bf, 0x00c5, 0x0001, + 0x0002, 0x0025, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x0282, + 0x0001, 0x0002, 0x028b, 0x0040, 0x010c, 0x0000, 0x0000, 0x0111, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0116, 0x0000, 0x0000, + 0x011b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0120, 0x0000, + // Entry 490C0 - 490FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x012b, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0130, 0x0000, 0x0135, 0x0000, 0x0000, 0x013a, 0x0000, 0x0000, + 0x013f, 0x0000, 0x0000, 0x0144, 0x0001, 0x010e, 0x0001, 0x0060, + 0x0641, 0x0001, 0x0113, 0x0001, 0x0060, 0x0651, 0x0001, 0x0118, + 0x0001, 0x0060, 0x0667, 0x0001, 0x011d, 0x0001, 0x0060, 0x0677, + // Entry 49100 - 4913F + 0x0002, 0x0123, 0x0126, 0x0001, 0x0060, 0x068d, 0x0003, 0x0060, + 0x0697, 0x06a7, 0x06b4, 0x0001, 0x012d, 0x0001, 0x0060, 0x06c4, + 0x0001, 0x0132, 0x0001, 0x0060, 0x06e8, 0x0001, 0x0137, 0x0001, + 0x0060, 0x0733, 0x0001, 0x013c, 0x0001, 0x0060, 0x0749, 0x0001, + 0x0141, 0x0001, 0x0060, 0x075f, 0x0001, 0x0146, 0x0001, 0x0060, + 0x0772, 0x0002, 0x0003, 0x00cb, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, 0x0023, + // Entry 49140 - 4917F + 0x001d, 0x001a, 0x0020, 0x0001, 0x0002, 0x0000, 0x0001, 0x0002, + 0x0010, 0x0001, 0x0002, 0x0044, 0x0001, 0x0000, 0x240c, 0x0008, + 0x002f, 0x0066, 0x007e, 0x0092, 0x00aa, 0x00ba, 0x0000, 0x0000, + 0x0002, 0x0032, 0x0054, 0x0003, 0x0036, 0x0000, 0x0045, 0x000d, + 0x0060, 0xffff, 0x0796, 0x079a, 0x07a0, 0x07a6, 0x07aa, 0x07ae, + 0x07b2, 0x07b6, 0x07bb, 0x07bf, 0x07c3, 0x07c7, 0x000d, 0x0060, + 0xffff, 0x07cb, 0x07d2, 0x07dc, 0x07e5, 0x07eb, 0x07f1, 0x07f7, + 0x07fe, 0x0804, 0x080d, 0x0813, 0x081c, 0x0002, 0x0000, 0x0057, + // Entry 49180 - 491BF + 0x000d, 0x005f, 0xffff, 0x065b, 0x2959, 0x295b, 0x065b, 0x295b, + 0x295d, 0x295d, 0x295f, 0x2962, 0x2964, 0x2966, 0x2968, 0x0001, + 0x0068, 0x0003, 0x006c, 0x0000, 0x0075, 0x0007, 0x0060, 0x0825, + 0x0829, 0x082d, 0x0831, 0x0837, 0x083b, 0x0840, 0x0007, 0x0060, + 0x0847, 0x084e, 0x0854, 0x085b, 0x0863, 0x0869, 0x0871, 0x0001, + 0x0080, 0x0003, 0x0084, 0x0000, 0x008b, 0x0005, 0x0060, 0xffff, + 0x087b, 0x0880, 0x0885, 0x088a, 0x0005, 0x0060, 0xffff, 0x088f, + 0x089e, 0x08ad, 0x08bc, 0x0001, 0x0094, 0x0003, 0x0098, 0x0000, + // Entry 491C0 - 491FF + 0x00a1, 0x0002, 0x009b, 0x009e, 0x0001, 0x0060, 0x08cb, 0x0001, + 0x0060, 0x08d2, 0x0002, 0x00a4, 0x00a7, 0x0001, 0x0060, 0x08cb, + 0x0001, 0x0060, 0x08d2, 0x0003, 0x00b4, 0x0000, 0x00ae, 0x0001, + 0x00b0, 0x0002, 0x0060, 0x08dc, 0x08e8, 0x0001, 0x00b6, 0x0002, + 0x0060, 0x08f6, 0x08fb, 0x0004, 0x00c8, 0x00c2, 0x00bf, 0x00c5, + 0x0001, 0x0002, 0x0025, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, + 0x0282, 0x0001, 0x0002, 0x028b, 0x0040, 0x010c, 0x0000, 0x0000, + 0x0111, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0116, 0x0000, + // Entry 49200 - 4923F + 0x0000, 0x011b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0120, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x012b, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0130, 0x0000, 0x0135, 0x0000, 0x0000, 0x013a, 0x0000, + 0x0000, 0x013f, 0x0000, 0x0000, 0x0144, 0x0001, 0x010e, 0x0001, + 0x0060, 0x0900, 0x0001, 0x0113, 0x0001, 0x0060, 0x0906, 0x0001, + // Entry 49240 - 4927F + 0x0118, 0x0001, 0x0060, 0x090f, 0x0001, 0x011d, 0x0001, 0x0060, + 0x0915, 0x0002, 0x0123, 0x0126, 0x0001, 0x0060, 0x091d, 0x0003, + 0x0060, 0x0921, 0x0929, 0x092e, 0x0001, 0x012d, 0x0001, 0x0060, + 0x0934, 0x0001, 0x0132, 0x0001, 0x0060, 0x0942, 0x0001, 0x0137, + 0x0001, 0x0060, 0x0962, 0x0001, 0x013c, 0x0001, 0x0060, 0x096a, + 0x0001, 0x0141, 0x0001, 0x0060, 0x0972, 0x0001, 0x0146, 0x0001, + 0x0060, 0x0979, 0x0003, 0x0004, 0x0286, 0x06e1, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0038, 0x0008, + // Entry 49280 - 492BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, 0x0027, + 0x0004, 0x0024, 0x001e, 0x001b, 0x0021, 0x0001, 0x0000, 0x0489, + 0x0001, 0x0000, 0x049a, 0x0001, 0x0000, 0x04a5, 0x0001, 0x0000, + 0x04af, 0x0004, 0x0035, 0x002f, 0x002c, 0x0032, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0008, 0x0041, 0x00a6, 0x00fd, 0x0132, 0x0239, + 0x0253, 0x0264, 0x0275, 0x0002, 0x0044, 0x0075, 0x0003, 0x0048, + 0x0057, 0x0066, 0x000d, 0x0060, 0xffff, 0x0989, 0x0990, 0x099a, + // Entry 492C0 - 492FF + 0x09ad, 0x09c6, 0x09d3, 0x09e0, 0x09ed, 0x09f7, 0x0a04, 0x0a0e, + 0x0a1b, 0x000d, 0x0060, 0xffff, 0x0a28, 0x0a2c, 0x0a33, 0x0a3a, + 0x0a3e, 0x0a45, 0x0a45, 0x0a3a, 0x0a4c, 0x0a53, 0x0a57, 0x0a5e, + 0x000d, 0x0060, 0xffff, 0x0a65, 0x0a78, 0x099a, 0x09ad, 0x09c6, + 0x09d3, 0x09e0, 0x0a91, 0x0aa7, 0x0ac9, 0x0ae2, 0x0afe, 0x0003, + 0x0079, 0x0088, 0x0097, 0x000d, 0x0060, 0xffff, 0x0989, 0x0990, + 0x0b1a, 0x09ad, 0x09c6, 0x09d3, 0x09e0, 0x09ed, 0x09f7, 0x0a04, + 0x0a0e, 0x0a1b, 0x000d, 0x0060, 0xffff, 0x0a28, 0x0a2c, 0x0a33, + // Entry 49300 - 4933F + 0x0a3a, 0x0a3e, 0x0a45, 0x0a45, 0x0a3a, 0x0a4c, 0x0a53, 0x0a57, + 0x0a5e, 0x000d, 0x0060, 0xffff, 0x0a65, 0x0a78, 0x099a, 0x09ad, + 0x09c6, 0x09d3, 0x09e0, 0x0a91, 0x0aa7, 0x0ac9, 0x0ae2, 0x0afe, + 0x0002, 0x00a9, 0x00d3, 0x0005, 0x00af, 0x00b8, 0x00ca, 0x0000, + 0x00c1, 0x0007, 0x0060, 0x0b27, 0x0b37, 0x0b47, 0x0b51, 0x0b61, + 0x0b77, 0x0b84, 0x0007, 0x0060, 0x0b8e, 0x0b92, 0x0a3a, 0x0b96, + 0x0b9a, 0x0ba7, 0x0bae, 0x0007, 0x0060, 0x0bb5, 0x0bbf, 0x0bc9, + 0x0bd0, 0x0bda, 0x0b77, 0x0b84, 0x0007, 0x0060, 0x0b27, 0x0b37, + // Entry 49340 - 4937F + 0x0bea, 0x0b51, 0x0c06, 0x0c31, 0x0c4a, 0x0005, 0x00d9, 0x00e2, + 0x00f4, 0x0000, 0x00eb, 0x0007, 0x0060, 0x0b27, 0x0b37, 0x0b47, + 0x0b51, 0x0b61, 0x0b77, 0x0b84, 0x0007, 0x0060, 0x0b8e, 0x0b92, + 0x0a3a, 0x0b96, 0x0b9a, 0x0ba7, 0x0bae, 0x0007, 0x0060, 0x0bb5, + 0x0bbf, 0x0bc9, 0x0bd0, 0x0bda, 0x0b77, 0x0b84, 0x0007, 0x0060, + 0x0b27, 0x0b37, 0x0bea, 0x0b51, 0x0c06, 0x0c31, 0x0c4a, 0x0002, + 0x0100, 0x0119, 0x0003, 0x0104, 0x010b, 0x0112, 0x0005, 0x0060, + 0xffff, 0x0c66, 0x0c75, 0x0c84, 0x0c93, 0x0005, 0x0000, 0xffff, + // Entry 49380 - 493BF + 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0060, 0xffff, 0x0ca2, + 0x0cc1, 0x0ce0, 0x0cff, 0x0003, 0x011d, 0x0124, 0x012b, 0x0005, + 0x0060, 0xffff, 0x0c66, 0x0c75, 0x0c84, 0x0c93, 0x0005, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0060, 0xffff, + 0x0ca2, 0x0cc1, 0x0ce0, 0x0cff, 0x0002, 0x0135, 0x01b7, 0x0003, + 0x0139, 0x0163, 0x018d, 0x000b, 0x0148, 0x014e, 0x0145, 0x0151, + 0x0157, 0x015a, 0x015d, 0x014b, 0x0154, 0x0000, 0x0160, 0x0001, + 0x0060, 0x0d1e, 0x0001, 0x0060, 0x0d31, 0x0001, 0x0060, 0x0d3d, + // Entry 493C0 - 493FF + 0x0001, 0x0060, 0x0d5c, 0x0001, 0x0060, 0x0d65, 0x0001, 0x0060, + 0x0d78, 0x0001, 0x0060, 0x0d82, 0x0001, 0x0060, 0x0d8f, 0x0001, + 0x0060, 0x0d99, 0x0001, 0x0060, 0x0da0, 0x000b, 0x0172, 0x0178, + 0x016f, 0x017b, 0x0181, 0x0184, 0x0187, 0x0175, 0x017e, 0x0000, + 0x018a, 0x0001, 0x0060, 0x0a3e, 0x0001, 0x0060, 0x0a2c, 0x0001, + 0x0060, 0x0dc0, 0x0001, 0x0060, 0x0dc4, 0x0001, 0x0060, 0x0dc8, + 0x0001, 0x0060, 0x0dcf, 0x0001, 0x0060, 0x0dd3, 0x0001, 0x0060, + 0x0dd7, 0x0001, 0x0060, 0x0d99, 0x0001, 0x0060, 0x0a3e, 0x000b, + // Entry 49400 - 4943F + 0x019c, 0x01a2, 0x0199, 0x01a5, 0x01ab, 0x01ae, 0x01b1, 0x019f, + 0x01a8, 0x0000, 0x01b4, 0x0001, 0x0060, 0x0d1e, 0x0001, 0x0060, + 0x0d31, 0x0001, 0x0060, 0x0d3d, 0x0001, 0x0060, 0x0d5c, 0x0001, + 0x0060, 0x0d65, 0x0001, 0x0060, 0x0d78, 0x0001, 0x0060, 0x0d82, + 0x0001, 0x0060, 0x0d8f, 0x0001, 0x0060, 0x0d99, 0x0001, 0x0060, + 0x0da0, 0x0003, 0x01bb, 0x01e5, 0x020f, 0x000b, 0x01ca, 0x01d0, + 0x01c7, 0x01d3, 0x01d9, 0x01dc, 0x01df, 0x01cd, 0x01d6, 0x0000, + 0x01e2, 0x0001, 0x0060, 0x0d1e, 0x0001, 0x0060, 0x0d31, 0x0001, + // Entry 49440 - 4947F + 0x0060, 0x0d3d, 0x0001, 0x0060, 0x0d5c, 0x0001, 0x0060, 0x0d65, + 0x0001, 0x0060, 0x0d78, 0x0001, 0x0060, 0x0d82, 0x0001, 0x0060, + 0x0d8f, 0x0001, 0x0060, 0x0d99, 0x0001, 0x0060, 0x0da0, 0x000b, + 0x01f4, 0x01fa, 0x01f1, 0x01fd, 0x0203, 0x0206, 0x0209, 0x01f7, + 0x0200, 0x0000, 0x020c, 0x0001, 0x0060, 0x0d1e, 0x0001, 0x0060, + 0x0d31, 0x0001, 0x0060, 0x0d3d, 0x0001, 0x0060, 0x0d5c, 0x0001, + 0x0060, 0x0d65, 0x0001, 0x0060, 0x0d78, 0x0001, 0x0060, 0x0d82, + 0x0001, 0x0060, 0x0d8f, 0x0001, 0x0060, 0x0d99, 0x0001, 0x0060, + // Entry 49480 - 494BF + 0x0da0, 0x000b, 0x021e, 0x0224, 0x021b, 0x0227, 0x022d, 0x0230, + 0x0233, 0x0221, 0x022a, 0x0000, 0x0236, 0x0001, 0x0060, 0x0d1e, + 0x0001, 0x0060, 0x0d31, 0x0001, 0x0060, 0x0d3d, 0x0001, 0x0060, + 0x0d5c, 0x0001, 0x0060, 0x0d65, 0x0001, 0x0060, 0x0d78, 0x0001, + 0x0060, 0x0d82, 0x0001, 0x0060, 0x0d8f, 0x0001, 0x0060, 0x0d99, + 0x0001, 0x0060, 0x0da0, 0x0003, 0x0248, 0x0000, 0x023d, 0x0002, + 0x0240, 0x0244, 0x0002, 0x0060, 0x0ddb, 0x0e2e, 0x0002, 0x0060, + 0x0e07, 0x0e57, 0x0002, 0x024b, 0x024f, 0x0002, 0x0060, 0x0e71, + // Entry 494C0 - 494FF + 0x0e96, 0x0002, 0x0060, 0x0e89, 0x0eab, 0x0004, 0x0261, 0x025b, + 0x0258, 0x025e, 0x0001, 0x0000, 0x04fc, 0x0001, 0x0000, 0x050b, + 0x0001, 0x0000, 0x0514, 0x0001, 0x0000, 0x051c, 0x0004, 0x0272, + 0x026c, 0x0269, 0x026f, 0x0001, 0x0000, 0x3a8f, 0x0001, 0x0000, + 0x3a9d, 0x0001, 0x0000, 0x3aa8, 0x0001, 0x0000, 0x3ab1, 0x0004, + 0x0283, 0x027d, 0x027a, 0x0280, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0042, 0x02c9, 0x02ce, 0x02d3, 0x02d8, 0x02ef, 0x0306, 0x031d, + // Entry 49500 - 4953F + 0x0334, 0x034b, 0x0362, 0x0379, 0x0390, 0x03a7, 0x03c2, 0x03dd, + 0x03f8, 0x03fd, 0x0402, 0x0407, 0x0420, 0x0432, 0x0444, 0x0449, + 0x044e, 0x0453, 0x0458, 0x045d, 0x0462, 0x0467, 0x046c, 0x0471, + 0x0485, 0x0499, 0x04ad, 0x04c1, 0x04d5, 0x04e9, 0x04fd, 0x0511, + 0x0525, 0x0539, 0x054d, 0x0561, 0x0575, 0x0589, 0x059d, 0x05b1, + 0x05c5, 0x05d9, 0x05ed, 0x0601, 0x0615, 0x061a, 0x061f, 0x0624, + 0x063a, 0x064c, 0x065e, 0x0674, 0x0686, 0x0698, 0x06ae, 0x06c0, + 0x06d2, 0x06d7, 0x06dc, 0x0001, 0x02cb, 0x0001, 0x0060, 0x0eb9, + // Entry 49540 - 4957F + 0x0001, 0x02d0, 0x0001, 0x0060, 0x0eb9, 0x0001, 0x02d5, 0x0001, + 0x0060, 0x0eb9, 0x0003, 0x02dc, 0x02df, 0x02e4, 0x0001, 0x0060, + 0x0ec6, 0x0003, 0x0060, 0x0ed6, 0x0ef3, 0x0f07, 0x0002, 0x02e7, + 0x02eb, 0x0002, 0x0060, 0x0f1b, 0x0f1b, 0x0002, 0x0060, 0x0f35, + 0x0f35, 0x0003, 0x02f3, 0x02f6, 0x02fb, 0x0001, 0x0060, 0x0f53, + 0x0003, 0x0060, 0x0ed6, 0x0ef3, 0x0f07, 0x0002, 0x02fe, 0x0302, + 0x0002, 0x0060, 0x0f1b, 0x0f1b, 0x0002, 0x0060, 0x0f35, 0x0f35, + 0x0003, 0x030a, 0x030d, 0x0312, 0x0001, 0x0060, 0x0f53, 0x0003, + // Entry 49580 - 495BF + 0x0060, 0x0ed6, 0x0ef3, 0x0f07, 0x0002, 0x0315, 0x0319, 0x0002, + 0x0060, 0x0f1b, 0x0f1b, 0x0002, 0x0060, 0x0f35, 0x0f35, 0x0003, + 0x0321, 0x0324, 0x0329, 0x0001, 0x0060, 0x0f5e, 0x0003, 0x0060, + 0x0f74, 0x0f9d, 0x0fbd, 0x0002, 0x032c, 0x0330, 0x0002, 0x0060, + 0x0fdd, 0x0fdd, 0x0002, 0x0060, 0x1000, 0x1000, 0x0003, 0x0338, + 0x033b, 0x0340, 0x0001, 0x0060, 0x1027, 0x0003, 0x0060, 0x1035, + 0x1056, 0x106e, 0x0002, 0x0343, 0x0347, 0x0002, 0x0060, 0x1086, + 0x1086, 0x0002, 0x0060, 0x10a4, 0x10a4, 0x0003, 0x034f, 0x0352, + // Entry 495C0 - 495FF + 0x0357, 0x0001, 0x0060, 0x1027, 0x0003, 0x0060, 0x1035, 0x1056, + 0x106e, 0x0002, 0x035a, 0x035e, 0x0002, 0x0060, 0x1086, 0x1086, + 0x0002, 0x0060, 0x10a4, 0x10a4, 0x0003, 0x0366, 0x0369, 0x036e, + 0x0001, 0x0060, 0x10c6, 0x0003, 0x0060, 0x10d3, 0x10f3, 0x110a, + 0x0002, 0x0371, 0x0375, 0x0002, 0x0060, 0x1121, 0x1121, 0x0002, + 0x0060, 0x113b, 0x113b, 0x0003, 0x037d, 0x0380, 0x0385, 0x0001, + 0x0060, 0x1159, 0x0003, 0x0060, 0x1164, 0x1182, 0x1197, 0x0002, + 0x0388, 0x038c, 0x0002, 0x0060, 0x1121, 0x1121, 0x0002, 0x0060, + // Entry 49600 - 4963F + 0x113b, 0x113b, 0x0003, 0x0394, 0x0397, 0x039c, 0x0001, 0x0060, + 0x1159, 0x0003, 0x0060, 0x1164, 0x1182, 0x1197, 0x0002, 0x039f, + 0x03a3, 0x0002, 0x0060, 0x1121, 0x1121, 0x0002, 0x0060, 0x113b, + 0x113b, 0x0004, 0x03ac, 0x03af, 0x03b4, 0x03bf, 0x0001, 0x0060, + 0x11ac, 0x0003, 0x0060, 0x11b9, 0x11d9, 0x11f0, 0x0002, 0x03b7, + 0x03bb, 0x0002, 0x0060, 0x1207, 0x1207, 0x0002, 0x0060, 0x1221, + 0x1221, 0x0001, 0x0060, 0x123f, 0x0004, 0x03c7, 0x03ca, 0x03cf, + 0x03da, 0x0001, 0x0060, 0x125d, 0x0003, 0x0060, 0x1268, 0x1286, + // Entry 49640 - 4967F + 0x129b, 0x0002, 0x03d2, 0x03d6, 0x0002, 0x0060, 0x1207, 0x1207, + 0x0002, 0x0060, 0x1221, 0x1221, 0x0001, 0x0060, 0x123f, 0x0004, + 0x03e2, 0x03e5, 0x03ea, 0x03f5, 0x0001, 0x0060, 0x125d, 0x0003, + 0x0060, 0x1268, 0x1286, 0x129b, 0x0002, 0x03ed, 0x03f1, 0x0002, + 0x0060, 0x1207, 0x1207, 0x0002, 0x0060, 0x1221, 0x1221, 0x0001, + 0x0060, 0x123f, 0x0001, 0x03fa, 0x0001, 0x0060, 0x12b0, 0x0001, + 0x03ff, 0x0001, 0x0060, 0x12b0, 0x0001, 0x0404, 0x0001, 0x0060, + 0x12b0, 0x0003, 0x040b, 0x040e, 0x0415, 0x0001, 0x0060, 0x12cd, + // Entry 49680 - 496BF + 0x0005, 0x0060, 0x12ed, 0x12f7, 0x12fe, 0x12da, 0x1308, 0x0002, + 0x0418, 0x041c, 0x0002, 0x0060, 0x131e, 0x131e, 0x0002, 0x0060, + 0x1332, 0x1332, 0x0003, 0x0424, 0x0000, 0x0427, 0x0001, 0x0060, + 0x12cd, 0x0002, 0x042a, 0x042e, 0x0002, 0x0060, 0x131e, 0x131e, + 0x0002, 0x0060, 0x1332, 0x1332, 0x0003, 0x0436, 0x0000, 0x0439, + 0x0001, 0x0060, 0x12cd, 0x0002, 0x043c, 0x0440, 0x0002, 0x0060, + 0x131e, 0x131e, 0x0002, 0x0060, 0x1332, 0x1332, 0x0001, 0x0446, + 0x0001, 0x0060, 0x1350, 0x0001, 0x044b, 0x0001, 0x0060, 0x1350, + // Entry 496C0 - 496FF + 0x0001, 0x0450, 0x0001, 0x0060, 0x1350, 0x0001, 0x0455, 0x0001, + 0x0060, 0x136a, 0x0001, 0x045a, 0x0001, 0x0060, 0x136a, 0x0001, + 0x045f, 0x0001, 0x0060, 0x136a, 0x0001, 0x0464, 0x0001, 0x0060, + 0x1387, 0x0001, 0x0469, 0x0001, 0x0060, 0x1387, 0x0001, 0x046e, + 0x0001, 0x0060, 0x1387, 0x0003, 0x0000, 0x0475, 0x047a, 0x0003, + 0x0060, 0x13b4, 0x13d7, 0x13ee, 0x0002, 0x047d, 0x0481, 0x0002, + 0x0060, 0x142b, 0x1408, 0x0002, 0x0060, 0x147c, 0x1455, 0x0003, + 0x0000, 0x0489, 0x048e, 0x0003, 0x0060, 0x13b4, 0x13d7, 0x13ee, + // Entry 49700 - 4973F + 0x0002, 0x0491, 0x0495, 0x0002, 0x0060, 0x142b, 0x142b, 0x0002, + 0x0060, 0x147c, 0x147c, 0x0003, 0x0000, 0x049d, 0x04a2, 0x0003, + 0x0060, 0x13b4, 0x13d7, 0x13ee, 0x0002, 0x04a5, 0x04a9, 0x0002, + 0x0060, 0x142b, 0x142b, 0x0002, 0x0060, 0x147c, 0x147c, 0x0003, + 0x0000, 0x04b1, 0x04b6, 0x0003, 0x0060, 0x14aa, 0x14cd, 0x14e4, + 0x0002, 0x04b9, 0x04bd, 0x0002, 0x0060, 0x1521, 0x14fe, 0x0002, + 0x0060, 0x1572, 0x154b, 0x0003, 0x0000, 0x04c5, 0x04ca, 0x0003, + 0x0060, 0x14aa, 0x14cd, 0x14e4, 0x0002, 0x04cd, 0x04d1, 0x0002, + // Entry 49740 - 4977F + 0x0060, 0x1521, 0x1521, 0x0002, 0x0060, 0x1572, 0x1572, 0x0003, + 0x0000, 0x04d9, 0x04de, 0x0003, 0x0060, 0x14aa, 0x14cd, 0x14e4, + 0x0002, 0x04e1, 0x04e5, 0x0002, 0x0060, 0x1521, 0x1521, 0x0002, + 0x0060, 0x1572, 0x1572, 0x0003, 0x0000, 0x04ed, 0x04f2, 0x0003, + 0x0060, 0x15a0, 0x15cf, 0x15f2, 0x0002, 0x04f5, 0x04f9, 0x0002, + 0x0060, 0x1647, 0x1618, 0x0002, 0x0060, 0x16b0, 0x167d, 0x0003, + 0x0000, 0x0501, 0x0506, 0x0003, 0x0060, 0x15a0, 0x15cf, 0x15f2, + 0x0002, 0x0509, 0x050d, 0x0002, 0x0060, 0x1647, 0x1647, 0x0002, + // Entry 49780 - 497BF + 0x0060, 0x16b0, 0x16b0, 0x0003, 0x0000, 0x0515, 0x051a, 0x0003, + 0x0060, 0x15a0, 0x15cf, 0x15f2, 0x0002, 0x051d, 0x0521, 0x0002, + 0x0060, 0x1647, 0x1647, 0x0002, 0x0060, 0x16b0, 0x16b0, 0x0003, + 0x0000, 0x0529, 0x052e, 0x0003, 0x0060, 0x16ea, 0x170d, 0x1724, + 0x0002, 0x0531, 0x0535, 0x0002, 0x0060, 0x1761, 0x173e, 0x0002, + 0x0060, 0x17b2, 0x178b, 0x0003, 0x0000, 0x053d, 0x0542, 0x0003, + 0x0060, 0x16ea, 0x170d, 0x1724, 0x0002, 0x0545, 0x0549, 0x0002, + 0x0060, 0x1761, 0x1761, 0x0002, 0x0060, 0x17b2, 0x17b2, 0x0003, + // Entry 497C0 - 497FF + 0x0000, 0x0551, 0x0556, 0x0003, 0x0060, 0x16ea, 0x170d, 0x1724, + 0x0002, 0x0559, 0x055d, 0x0002, 0x0060, 0x1761, 0x1761, 0x0002, + 0x0060, 0x17b2, 0x17b2, 0x0003, 0x0000, 0x0565, 0x056a, 0x0003, + 0x0060, 0x17e0, 0x181e, 0x1850, 0x0002, 0x056d, 0x0571, 0x0002, + 0x0060, 0x18c3, 0x1885, 0x0002, 0x0060, 0x194a, 0x1908, 0x0003, + 0x0000, 0x0579, 0x057e, 0x0003, 0x0060, 0x17e0, 0x181e, 0x1850, + 0x0002, 0x0581, 0x0585, 0x0002, 0x0060, 0x18c3, 0x18c3, 0x0002, + 0x0060, 0x194a, 0x194a, 0x0003, 0x0000, 0x058d, 0x0592, 0x0003, + // Entry 49800 - 4983F + 0x0060, 0x17e0, 0x181e, 0x1850, 0x0002, 0x0595, 0x0599, 0x0002, + 0x0060, 0x18c3, 0x18c3, 0x0002, 0x0060, 0x194a, 0x194a, 0x0003, + 0x0000, 0x05a1, 0x05a6, 0x0003, 0x0060, 0x1993, 0x19bf, 0x19df, + 0x0002, 0x05a9, 0x05ad, 0x0002, 0x0060, 0x1a2c, 0x1a02, 0x0002, + 0x0060, 0x1a8a, 0x1a5d, 0x0003, 0x0000, 0x05b5, 0x05ba, 0x0003, + 0x0060, 0x1993, 0x19bf, 0x19df, 0x0002, 0x05bd, 0x05c1, 0x0002, + 0x0060, 0x1a2c, 0x1a2c, 0x0002, 0x0060, 0x1a8a, 0x1a8a, 0x0003, + 0x0000, 0x05c9, 0x05ce, 0x0003, 0x0060, 0x1993, 0x19bf, 0x19df, + // Entry 49840 - 4987F + 0x0002, 0x05d1, 0x05d5, 0x0002, 0x0060, 0x1a2c, 0x1a2c, 0x0002, + 0x0060, 0x1a8a, 0x1a8a, 0x0003, 0x0000, 0x05dd, 0x05e2, 0x0003, + 0x0060, 0x1abe, 0x1aed, 0x1b10, 0x0002, 0x05e5, 0x05e9, 0x0002, + 0x0060, 0x1b64, 0x1b36, 0x0002, 0x0060, 0x1bcc, 0x1b9b, 0x0003, + 0x0000, 0x05f1, 0x05f6, 0x0003, 0x0060, 0x1abe, 0x1aed, 0x1b10, + 0x0002, 0x05f9, 0x05fd, 0x0002, 0x0060, 0x1b64, 0x1b64, 0x0002, + 0x0060, 0x1bcc, 0x1bcc, 0x0003, 0x0000, 0x0605, 0x060a, 0x0003, + 0x0060, 0x1abe, 0x1aed, 0x1b10, 0x0002, 0x060d, 0x0611, 0x0002, + // Entry 49880 - 498BF + 0x0060, 0x1b64, 0x1b64, 0x0002, 0x0060, 0x1bcc, 0x1bcc, 0x0001, + 0x0617, 0x0001, 0x0060, 0x1c06, 0x0001, 0x061c, 0x0001, 0x0060, + 0x1c06, 0x0001, 0x0621, 0x0001, 0x0060, 0x1c06, 0x0003, 0x0628, + 0x062b, 0x062f, 0x0001, 0x0060, 0x1c19, 0x0002, 0x0060, 0xffff, + 0x1c23, 0x0002, 0x0632, 0x0636, 0x0002, 0x0060, 0x1c37, 0x1c37, + 0x0002, 0x0060, 0x1c51, 0x1c51, 0x0003, 0x063e, 0x0000, 0x0641, + 0x0001, 0x0060, 0x1c19, 0x0002, 0x0644, 0x0648, 0x0002, 0x0060, + 0x1c37, 0x1c37, 0x0002, 0x0060, 0x1c51, 0x1c51, 0x0003, 0x0650, + // Entry 498C0 - 498FF + 0x0000, 0x0653, 0x0001, 0x0060, 0x1c19, 0x0002, 0x0656, 0x065a, + 0x0002, 0x0060, 0x1c37, 0x1c37, 0x0002, 0x0060, 0x1c51, 0x1c51, + 0x0003, 0x0662, 0x0665, 0x0669, 0x0001, 0x0060, 0x1c6f, 0x0002, + 0x0060, 0xffff, 0x1c8b, 0x0002, 0x066c, 0x0670, 0x0002, 0x0060, + 0x1cb1, 0x1cb1, 0x0002, 0x0060, 0x1cda, 0x1cda, 0x0003, 0x0678, + 0x0000, 0x067b, 0x0001, 0x0060, 0x1d07, 0x0002, 0x067e, 0x0682, + 0x0002, 0x0060, 0x1cb1, 0x1cb1, 0x0002, 0x0060, 0x1cda, 0x1cda, + 0x0003, 0x068a, 0x0000, 0x068d, 0x0001, 0x0060, 0x1d07, 0x0002, + // Entry 49900 - 4993F + 0x0690, 0x0694, 0x0002, 0x0060, 0x1cb1, 0x1cb1, 0x0002, 0x0060, + 0x1cda, 0x1cda, 0x0003, 0x069c, 0x069f, 0x06a3, 0x0001, 0x0060, + 0x1d15, 0x0002, 0x0060, 0xffff, 0x1d28, 0x0002, 0x06a6, 0x06aa, + 0x0002, 0x0060, 0x1d35, 0x1d35, 0x0002, 0x0060, 0x1d55, 0x1d55, + 0x0003, 0x06b2, 0x0000, 0x06b5, 0x0001, 0x0060, 0x1d79, 0x0002, + 0x06b8, 0x06bc, 0x0002, 0x0060, 0x1d35, 0x1d35, 0x0002, 0x0060, + 0x1d55, 0x1d55, 0x0003, 0x06c4, 0x0000, 0x06c7, 0x0001, 0x0060, + 0x1d79, 0x0002, 0x06ca, 0x06ce, 0x0002, 0x0060, 0x1d35, 0x1d35, + // Entry 49940 - 4997F + 0x0002, 0x0060, 0x1d55, 0x1d55, 0x0001, 0x06d4, 0x0001, 0x0060, + 0x1d84, 0x0001, 0x06d9, 0x0001, 0x0060, 0x1da1, 0x0001, 0x06de, + 0x0001, 0x0060, 0x1da1, 0x0004, 0x06e6, 0x06eb, 0x06f0, 0x06ff, + 0x0003, 0x0008, 0x1dbe, 0x4faf, 0x4fcb, 0x0003, 0x0060, 0x1db1, + 0x1dc5, 0x1df2, 0x0002, 0x0000, 0x06f3, 0x0003, 0x0000, 0x06fa, + 0x06f7, 0x0001, 0x0060, 0x1e16, 0x0003, 0x0060, 0xffff, 0x1e49, + 0x1e91, 0x0002, 0x0000, 0x0702, 0x0003, 0x07a4, 0x083a, 0x0706, + 0x009c, 0x0060, 0x1eca, 0x1efc, 0x1f3e, 0x1f86, 0x1fc5, 0x2014, + // Entry 49980 - 499BF + 0x2047, 0x207d, 0x20d9, 0x213b, 0x2194, 0xffff, 0x21f6, 0x2226, + 0x2256, 0x2295, 0x22e4, 0x2320, 0x2362, 0x23ad, 0x241b, 0x247f, + 0x24da, 0x251c, 0x2552, 0x258b, 0x25ab, 0x25d4, 0x260a, 0x264c, + 0x2685, 0x26a5, 0x26d5, 0x2702, 0x272c, 0x276e, 0x27ad, 0x27e0, + 0x281f, 0x285c, 0x2895, 0x28b8, 0x28fd, 0x2939, 0x297c, 0x29a5, + 0x29ee, 0x2a3d, 0x2a89, 0x2acf, 0x2b1b, 0x2b48, 0x2b78, 0x2be3, + 0x2c09, 0x2c35, 0x2c74, 0x2cb0, 0x2cef, 0x2d4a, 0x2d9c, 0x2dbc, + 0x2dd9, 0x2e2b, 0x2e5e, 0x2e91, 0x2ebd, 0x2ef3, 0x2f1c, 0x2f67, + // Entry 499C0 - 499FF + 0x2fb8, 0x3000, 0x302d, 0x306f, 0x30a8, 0xffff, 0x30d5, 0x3117, + 0x3150, 0x3189, 0x31ac, 0x31fd, 0x325c, 0x328c, 0x32cc, 0x3308, + 0x333b, 0x336a, 0x3399, 0x33cb, 0x3401, 0x3434, 0x345a, 0x349d, + 0x34ef, 0x352f, 0x3565, 0x3591, 0x35b4, 0x35d4, 0x361d, 0x3656, + 0x369e, 0x36bb, 0x36f4, 0x3750, 0x3798, 0x37ce, 0x380a, 0x382a, + 0x386d, 0x38a3, 0x38d0, 0x3906, 0x393f, 0x399c, 0x39cb, 0x39eb, + 0x3a1d, 0x3a49, 0x3a6c, 0xffff, 0x3a9f, 0x3ad2, 0x3afb, 0x3b2a, + 0x3b60, 0x3b93, 0x3bb9, 0x3bdc, 0x3bff, 0x3c32, 0x3c61, 0x3c8a, + // Entry 49A00 - 49A3F + 0x3cba, 0x3cd7, 0x3d22, 0x3d45, 0x3d7b, 0x3dc0, 0x3df3, 0x3e22, + 0x3e6a, 0x3eb2, 0x3edb, 0x3f08, 0x3f45, 0x3f81, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x322f, 0x0094, 0x0061, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0094, 0x00f3, 0x0155, + 0x0206, 0x02c3, 0x036e, 0xffff, 0x042b, 0x0478, 0x04c8, 0x053c, + 0x05d0, 0x0641, 0x06be, 0x076a, 0x0836, 0x08ee, 0x0994, 0x0a11, + 0x0a76, 0xffff, 0xffff, 0x0ade, 0xffff, 0x0b40, 0xffff, 0x0ba8, + 0x0bf5, 0x0c45, 0x0c89, 0xffff, 0xffff, 0x0d06, 0x0d7a, 0x0df7, + // Entry 49A40 - 49A7F + 0xffff, 0xffff, 0xffff, 0x0e62, 0xffff, 0x0ede, 0x0f69, 0xffff, + 0x1000, 0x1085, 0x1113, 0xffff, 0xffff, 0xffff, 0xffff, 0x1166, + 0xffff, 0xffff, 0x11dd, 0x1289, 0xffff, 0xffff, 0x1323, 0x13c0, + 0x141f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x147e, + 0x14c2, 0x153f, 0x15a1, 0xffff, 0xffff, 0xffff, 0x15eb, 0xffff, + 0x164d, 0xffff, 0xffff, 0x16e8, 0xffff, 0x1755, 0xffff, 0xffff, + 0xffff, 0xffff, 0x17b4, 0xffff, 0x1810, 0x188f, 0x192c, 0x19a5, + 0xffff, 0xffff, 0xffff, 0x1a0a, 0x1a95, 0x1af4, 0xffff, 0xffff, + // Entry 49A80 - 49ABF + 0x1b7d, 0x1c2b, 0x1cb4, 0x1d19, 0xffff, 0xffff, 0x1d87, 0x1de9, + 0x1e39, 0xffff, 0x1e9e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1f51, 0xffff, 0x1fb0, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x200f, 0xffff, 0xffff, 0x2065, 0xffff, 0x20be, + 0xffff, 0x214d, 0x21af, 0x2232, 0xffff, 0x228e, 0x2317, 0xffff, + 0xffff, 0xffff, 0x23a0, 0x2411, 0x0094, 0x0061, 0xffff, 0xffff, + 0xffff, 0xffff, 0x003f, 0x00b7, 0x0119, 0x01a1, 0x0258, 0x030c, + 0x03c0, 0xffff, 0x044b, 0x0498, 0x04f7, 0x057b, 0x05fc, 0x0673, + // Entry 49AC0 - 49AFF + 0x070c, 0x07c8, 0x088a, 0x0939, 0x09c6, 0x0a37, 0x0a9f, 0xffff, + 0xffff, 0x0b04, 0xffff, 0x0b69, 0xffff, 0x0bc8, 0x0c12, 0x0c5f, + 0x0cbb, 0xffff, 0xffff, 0x0d35, 0x0da7, 0x0e20, 0xffff, 0xffff, + 0xffff, 0x0e95, 0xffff, 0x0f17, 0x0fa8, 0xffff, 0x1036, 0x10c1, + 0x1130, 0xffff, 0xffff, 0xffff, 0xffff, 0x1195, 0xffff, 0xffff, + 0x1228, 0x12cb, 0xffff, 0xffff, 0x1365, 0x13e3, 0x1442, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x149b, 0x14f4, 0x1568, + 0x15be, 0xffff, 0xffff, 0xffff, 0x1614, 0xffff, 0x168e, 0xffff, + // Entry 49B00 - 49B3F + 0xffff, 0x1718, 0xffff, 0x1778, 0xffff, 0xffff, 0xffff, 0xffff, + 0x17d7, 0xffff, 0x1843, 0x18d1, 0x195c, 0x19cb, 0xffff, 0xffff, + 0xffff, 0x1a43, 0x1abe, 0x1b2c, 0xffff, 0xffff, 0x1bc9, 0x1c63, + 0x1cda, 0x1d45, 0xffff, 0xffff, 0x1dad, 0x1e06, 0x1e5f, 0xffff, + 0x1eeb, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1f74, 0xffff, + 0x1fd3, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2032, 0xffff, 0xffff, 0x2085, 0xffff, 0x20f9, 0xffff, 0x2173, + 0x21e4, 0x2255, 0xffff, 0x22c6, 0x234f, 0xffff, 0xffff, 0xffff, + // Entry 49B40 - 49B7F + 0x23cc, 0x244c, 0x0003, 0x0004, 0x04f9, 0x0ab2, 0x0012, 0x0017, + 0x0000, 0x0030, 0x0000, 0x0097, 0x0000, 0x00fe, 0x0129, 0x0359, + 0x03bd, 0x041d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x047d, + 0x04dd, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x001d, 0x0003, + 0x0026, 0x002b, 0x0021, 0x0001, 0x0023, 0x0001, 0x0000, 0x0000, + 0x0001, 0x0028, 0x0001, 0x0000, 0x0000, 0x0001, 0x002d, 0x0001, + 0x0000, 0x0000, 0x0005, 0x0036, 0x0000, 0x0000, 0x0000, 0x0081, + 0x0002, 0x0039, 0x005d, 0x0003, 0x003d, 0x0000, 0x004d, 0x000e, + // Entry 49B80 - 49BBF + 0x0014, 0xffff, 0x0395, 0x3681, 0x34b1, 0x03a6, 0x3608, 0x34bc, + 0x34c3, 0x03c2, 0x34cc, 0x03d4, 0x36af, 0x03e3, 0x03e9, 0x000e, + 0x0014, 0xffff, 0x0395, 0x3681, 0x34b1, 0x03a6, 0x3608, 0x34bc, + 0x34c3, 0x03c2, 0x34cc, 0x03d4, 0x36af, 0x03e3, 0x03e9, 0x0003, + 0x0061, 0x0000, 0x0071, 0x000e, 0x0014, 0xffff, 0x0395, 0x3681, + 0x34b1, 0x03a6, 0x3608, 0x34bc, 0x34c3, 0x03c2, 0x34cc, 0x03d4, + 0x36af, 0x03e3, 0x03e9, 0x000e, 0x0014, 0xffff, 0x0395, 0x3681, + 0x34b1, 0x03a6, 0x3608, 0x34bc, 0x34c3, 0x03c2, 0x34cc, 0x03d4, + // Entry 49BC0 - 49BFF + 0x36af, 0x03e3, 0x03e9, 0x0003, 0x008b, 0x0091, 0x0085, 0x0001, + 0x0087, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x008d, 0x0002, + 0x0000, 0x0425, 0x042a, 0x0001, 0x0093, 0x0002, 0x0000, 0x0425, + 0x042a, 0x0005, 0x009d, 0x0000, 0x0000, 0x0000, 0x00e8, 0x0002, + 0x00a0, 0x00c4, 0x0003, 0x00a4, 0x0000, 0x00b4, 0x000e, 0x0014, + 0xffff, 0x04f6, 0x04ff, 0x0507, 0x36b4, 0x35ee, 0x0519, 0x0521, + 0x0529, 0x0530, 0x0537, 0x053c, 0x0542, 0x0549, 0x000e, 0x0014, + 0xffff, 0x04f6, 0x04ff, 0x0507, 0x36b4, 0x35ee, 0x0519, 0x0521, + // Entry 49C00 - 49C3F + 0x0529, 0x0530, 0x0537, 0x053c, 0x0542, 0x0549, 0x0003, 0x00c8, + 0x0000, 0x00d8, 0x000e, 0x0014, 0xffff, 0x04f6, 0x04ff, 0x0507, + 0x36b4, 0x35ee, 0x0519, 0x0521, 0x0529, 0x0530, 0x0537, 0x053c, + 0x0542, 0x0549, 0x000e, 0x0014, 0xffff, 0x04f6, 0x04ff, 0x0507, + 0x36b4, 0x35ee, 0x0519, 0x0521, 0x0529, 0x0530, 0x0537, 0x053c, + 0x0542, 0x0549, 0x0003, 0x00f2, 0x00f8, 0x00ec, 0x0001, 0x00ee, + 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x00f4, 0x0002, 0x0000, + 0x0425, 0x042a, 0x0001, 0x00fa, 0x0002, 0x0000, 0x0425, 0x042a, + // Entry 49C40 - 49C7F + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0107, 0x0000, + 0x0118, 0x0004, 0x0115, 0x010f, 0x010c, 0x0112, 0x0001, 0x0062, + 0x0000, 0x0001, 0x0014, 0x0366, 0x0001, 0x0014, 0x0366, 0x0001, + 0x0008, 0x062f, 0x0004, 0x0126, 0x0120, 0x011d, 0x0123, 0x0001, + 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, + 0x0001, 0x0006, 0x022e, 0x0008, 0x0132, 0x0197, 0x01ee, 0x0223, + 0x030c, 0x0326, 0x0337, 0x0348, 0x0002, 0x0135, 0x0166, 0x0003, + 0x0139, 0x0148, 0x0157, 0x000d, 0x000d, 0xffff, 0x0059, 0x340b, + // Entry 49C80 - 49CBF + 0x34a0, 0x3413, 0x34b8, 0x34bd, 0x34c2, 0x3377, 0x344e, 0x3452, + 0x3456, 0x0085, 0x000d, 0x0000, 0xffff, 0x2142, 0x2006, 0x3d03, + 0x1f9c, 0x3d03, 0x2142, 0x2142, 0x1f9c, 0x2002, 0x1f98, 0x3d05, + 0x3d07, 0x000d, 0x0062, 0xffff, 0x0010, 0x0019, 0x0023, 0x0029, + 0x0031, 0x0037, 0x003d, 0x0043, 0x004b, 0x0055, 0x005e, 0x0067, + 0x0003, 0x016a, 0x0179, 0x0188, 0x000d, 0x000d, 0xffff, 0x0059, + 0x340b, 0x34a0, 0x3413, 0x34b8, 0x34bd, 0x34c2, 0x3377, 0x344e, + 0x3452, 0x3456, 0x0085, 0x000d, 0x0000, 0xffff, 0x2142, 0x2006, + // Entry 49CC0 - 49CFF + 0x3d03, 0x1f9c, 0x3d03, 0x2142, 0x2142, 0x1f9c, 0x2002, 0x1f98, + 0x3d05, 0x3d07, 0x000d, 0x0031, 0xffff, 0x00a2, 0x00aa, 0x26d4, + 0x26da, 0x26e1, 0x26e6, 0x26eb, 0x26f0, 0x26f7, 0x2701, 0x270a, + 0x2713, 0x0002, 0x019a, 0x01c4, 0x0005, 0x01a0, 0x01a9, 0x01bb, + 0x0000, 0x01b2, 0x0007, 0x0014, 0x063b, 0x063e, 0x36bc, 0x36bf, + 0x36c2, 0x36c6, 0x36c9, 0x0007, 0x0000, 0x3d05, 0x21e4, 0x2010, + 0x2002, 0x275f, 0x21e4, 0x2002, 0x0007, 0x0014, 0x063b, 0x063e, + 0x36bc, 0x36bf, 0x36c2, 0x36c6, 0x36c9, 0x0007, 0x0062, 0x0070, + // Entry 49D00 - 49D3F + 0x0078, 0x0081, 0x0088, 0x008f, 0x0098, 0x009f, 0x0005, 0x01ca, + 0x01d3, 0x01e5, 0x0000, 0x01dc, 0x0007, 0x0014, 0x063b, 0x063e, + 0x36bc, 0x36bf, 0x36c2, 0x36c6, 0x36c9, 0x0007, 0x0000, 0x3d05, + 0x21e4, 0x2010, 0x2002, 0x275f, 0x21e4, 0x2002, 0x0007, 0x0014, + 0x063b, 0x063e, 0x36bc, 0x36bf, 0x36c2, 0x36c6, 0x36c9, 0x0007, + 0x0062, 0x0070, 0x0078, 0x0081, 0x0088, 0x008f, 0x0098, 0x009f, + 0x0002, 0x01f1, 0x020a, 0x0003, 0x01f5, 0x01fc, 0x0203, 0x0005, + 0x0000, 0xffff, 0x04e3, 0x39f2, 0x39f5, 0x39f8, 0x0005, 0x0000, + // Entry 49D40 - 49D7F + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0062, 0xffff, + 0x00a6, 0x00b4, 0x00c2, 0x00d0, 0x0003, 0x020e, 0x0215, 0x021c, + 0x0005, 0x0000, 0xffff, 0x04e3, 0x39f2, 0x39f5, 0x39f8, 0x0005, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0062, + 0xffff, 0x00a6, 0x00b4, 0x00c2, 0x00d0, 0x0002, 0x0226, 0x0299, + 0x0003, 0x022a, 0x024f, 0x0274, 0x0009, 0x0237, 0x023d, 0x0234, + 0x0240, 0x0246, 0x0249, 0x024c, 0x023a, 0x0243, 0x0001, 0x0062, + 0x00de, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0062, 0x00e6, 0x0001, + // Entry 49D80 - 49DBF + 0x0000, 0x04f2, 0x0001, 0x0014, 0x070b, 0x0001, 0x0062, 0x00ed, + 0x0001, 0x0062, 0x00f4, 0x0001, 0x0014, 0x0725, 0x0001, 0x0014, + 0x072c, 0x0009, 0x025c, 0x0262, 0x0259, 0x0265, 0x026b, 0x026e, + 0x0271, 0x025f, 0x0268, 0x0001, 0x0062, 0x00de, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x0062, 0x00fb, 0x0001, 0x0000, 0x04f2, 0x0001, + 0x0014, 0x070b, 0x0001, 0x0014, 0x06cf, 0x0001, 0x0030, 0x004f, + 0x0001, 0x0014, 0x06e1, 0x0001, 0x0014, 0x06e7, 0x0009, 0x0281, + 0x0287, 0x027e, 0x028a, 0x0290, 0x0293, 0x0296, 0x0284, 0x028d, + // Entry 49DC0 - 49DFF + 0x0001, 0x0062, 0x0100, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0062, + 0x010a, 0x0001, 0x0000, 0x04f2, 0x0001, 0x0014, 0x070b, 0x0001, + 0x0062, 0x0115, 0x0001, 0x0062, 0x0120, 0x0001, 0x0014, 0x0725, + 0x0001, 0x0014, 0x072c, 0x0003, 0x029d, 0x02c2, 0x02e7, 0x0009, + 0x02aa, 0x02b0, 0x02a7, 0x02b3, 0x02b9, 0x02bc, 0x02bf, 0x02ad, + 0x02b6, 0x0001, 0x0062, 0x012b, 0x0001, 0x0000, 0x04ef, 0x0001, + 0x0014, 0x06d4, 0x0001, 0x0000, 0x04f2, 0x0001, 0x0014, 0x070b, + 0x0001, 0x0062, 0x00ed, 0x0001, 0x0062, 0x00f4, 0x0001, 0x0014, + // Entry 49E00 - 49E3F + 0x0725, 0x0001, 0x0014, 0x0733, 0x0009, 0x02cf, 0x02d5, 0x02cc, + 0x02d8, 0x02de, 0x02e1, 0x02e4, 0x02d2, 0x02db, 0x0001, 0x0062, + 0x012b, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0014, 0x06d4, 0x0001, + 0x0000, 0x04f2, 0x0001, 0x0014, 0x070b, 0x0001, 0x0014, 0x06cf, + 0x0001, 0x0030, 0x004f, 0x0001, 0x0014, 0x06e1, 0x0001, 0x0014, + 0x0733, 0x0009, 0x02f4, 0x02fa, 0x02f1, 0x02fd, 0x0303, 0x0306, + 0x0309, 0x02f7, 0x0300, 0x0001, 0x0062, 0x0131, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x0062, 0x0138, 0x0001, 0x0000, 0x04f2, 0x0001, + // Entry 49E40 - 49E7F + 0x0014, 0x070b, 0x0001, 0x0062, 0x0141, 0x0001, 0x0062, 0x014c, + 0x0001, 0x0014, 0x0725, 0x0001, 0x0014, 0x0733, 0x0003, 0x031b, + 0x0000, 0x0310, 0x0002, 0x0313, 0x0317, 0x0002, 0x0062, 0x0157, + 0x017d, 0x0002, 0x0062, 0x0164, 0x0189, 0x0002, 0x031e, 0x0322, + 0x0002, 0x0062, 0x019c, 0x01b0, 0x0002, 0x0062, 0x01a5, 0x01b7, + 0x0004, 0x0334, 0x032e, 0x032b, 0x0331, 0x0001, 0x0014, 0x0783, + 0x0001, 0x0014, 0x0792, 0x0001, 0x0014, 0x038d, 0x0001, 0x0014, + 0x038d, 0x0004, 0x0345, 0x033f, 0x033c, 0x0342, 0x0001, 0x0005, + // Entry 49E80 - 49EBF + 0x0082, 0x0001, 0x0005, 0x008f, 0x0001, 0x0005, 0x0099, 0x0001, + 0x0005, 0x00a1, 0x0004, 0x0356, 0x0350, 0x034d, 0x0353, 0x0001, + 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, + 0x0001, 0x0000, 0x03c6, 0x0005, 0x035f, 0x0000, 0x0000, 0x0000, + 0x03aa, 0x0002, 0x0362, 0x0386, 0x0003, 0x0366, 0x0000, 0x0376, + 0x000e, 0x0014, 0x36e5, 0x079c, 0x07a3, 0x36cc, 0x36d3, 0x07b9, + 0x36d9, 0x36e0, 0x36ed, 0x07da, 0x36f3, 0x36f9, 0x36ff, 0x3702, + 0x000e, 0x0014, 0x36e5, 0x079c, 0x07a3, 0x36cc, 0x36d3, 0x07b9, + // Entry 49EC0 - 49EFF + 0x36d9, 0x36e0, 0x36ed, 0x07da, 0x36f3, 0x36f9, 0x36ff, 0x3702, + 0x0003, 0x038a, 0x0000, 0x039a, 0x000e, 0x0014, 0x36e5, 0x079c, + 0x07a3, 0x36cc, 0x36d3, 0x07b9, 0x36d9, 0x36e0, 0x36ed, 0x07da, + 0x36f3, 0x36f9, 0x36ff, 0x3702, 0x000e, 0x0014, 0x36e5, 0x079c, + 0x07a3, 0x36cc, 0x36d3, 0x07b9, 0x36d9, 0x36e0, 0x36ed, 0x07da, + 0x36f3, 0x36f9, 0x36ff, 0x3702, 0x0003, 0x03b3, 0x03b8, 0x03ae, + 0x0001, 0x03b0, 0x0001, 0x0000, 0x04ef, 0x0001, 0x03b5, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x03ba, 0x0001, 0x0000, 0x04ef, 0x0005, + // Entry 49F00 - 49F3F + 0x03c3, 0x0000, 0x0000, 0x0000, 0x040a, 0x0002, 0x03c6, 0x03e8, + 0x0003, 0x03ca, 0x0000, 0x03d9, 0x000d, 0x0014, 0xffff, 0x07f3, + 0x07fb, 0x0805, 0x0810, 0x0819, 0x0823, 0x082e, 0x0836, 0x083e, + 0x0849, 0x084f, 0x0855, 0x000d, 0x0014, 0xffff, 0x07f3, 0x07fb, + 0x0805, 0x0810, 0x0819, 0x0823, 0x082e, 0x0836, 0x083e, 0x0849, + 0x084f, 0x0855, 0x0003, 0x03ec, 0x0000, 0x03fb, 0x000d, 0x0014, + 0xffff, 0x07f3, 0x07fb, 0x0805, 0x0810, 0x0819, 0x0823, 0x082e, + 0x0836, 0x083e, 0x0849, 0x084f, 0x0855, 0x000d, 0x0014, 0xffff, + // Entry 49F40 - 49F7F + 0x07f3, 0x07fb, 0x0805, 0x0810, 0x0819, 0x0823, 0x082e, 0x0836, + 0x083e, 0x0849, 0x084f, 0x0855, 0x0003, 0x0413, 0x0418, 0x040e, + 0x0001, 0x0410, 0x0001, 0x0014, 0x085e, 0x0001, 0x0415, 0x0001, + 0x0014, 0x085e, 0x0001, 0x041a, 0x0001, 0x0014, 0x085e, 0x0005, + 0x0423, 0x0000, 0x0000, 0x0000, 0x046a, 0x0002, 0x0426, 0x0448, + 0x0003, 0x042a, 0x0000, 0x0439, 0x000d, 0x000d, 0xffff, 0x022d, + 0x33e8, 0x32ee, 0x32f5, 0x31d5, 0x31de, 0x34c7, 0x0260, 0x33f2, + 0x34cc, 0x34d2, 0x34dc, 0x000d, 0x0062, 0xffff, 0x01bd, 0x01c9, + // Entry 49F80 - 49FBF + 0x01cf, 0x01e0, 0x01f3, 0x0206, 0x021b, 0x0223, 0x022e, 0x0237, + 0x0240, 0x024f, 0x0003, 0x044c, 0x0000, 0x045b, 0x000d, 0x000d, + 0xffff, 0x022d, 0x33e8, 0x32ee, 0x32f5, 0x31d5, 0x31de, 0x34c7, + 0x0260, 0x33f2, 0x34cc, 0x34d2, 0x34dc, 0x000d, 0x0062, 0xffff, + 0x01bd, 0x01c9, 0x01cf, 0x01e0, 0x01f3, 0x0206, 0x021b, 0x0223, + 0x022e, 0x0237, 0x0240, 0x024f, 0x0003, 0x0473, 0x0478, 0x046e, + 0x0001, 0x0470, 0x0001, 0x0000, 0x06c8, 0x0001, 0x0475, 0x0001, + 0x0000, 0x06c8, 0x0001, 0x047a, 0x0001, 0x0000, 0x06c8, 0x0005, + // Entry 49FC0 - 49FFF + 0x0483, 0x0000, 0x0000, 0x0000, 0x04ca, 0x0002, 0x0486, 0x04a8, + 0x0003, 0x048a, 0x0000, 0x0499, 0x000d, 0x0014, 0xffff, 0x0916, + 0x0920, 0x092c, 0x0935, 0x093a, 0x0942, 0x35f2, 0x0952, 0x0959, + 0x095f, 0x0963, 0x096a, 0x000d, 0x0014, 0xffff, 0x0916, 0x0920, + 0x092c, 0x0935, 0x093a, 0x0942, 0x35f2, 0x0952, 0x0959, 0x095f, + 0x0963, 0x096a, 0x0003, 0x04ac, 0x0000, 0x04bb, 0x000d, 0x0014, + 0xffff, 0x0916, 0x0920, 0x092c, 0x0935, 0x093a, 0x0942, 0x35f2, + 0x0952, 0x0959, 0x095f, 0x0963, 0x096a, 0x000d, 0x0014, 0xffff, + // Entry 4A000 - 4A03F + 0x0916, 0x0920, 0x092c, 0x0935, 0x093a, 0x0942, 0x35f2, 0x0952, + 0x0959, 0x095f, 0x0963, 0x096a, 0x0003, 0x04d3, 0x04d8, 0x04ce, + 0x0001, 0x04d0, 0x0001, 0x0000, 0x1a1d, 0x0001, 0x04d5, 0x0001, + 0x0000, 0x1a1d, 0x0001, 0x04da, 0x0001, 0x0000, 0x1a1d, 0x0005, + 0x0000, 0x0000, 0x0000, 0x0000, 0x04e3, 0x0003, 0x04ed, 0x04f3, + 0x04e7, 0x0001, 0x04e9, 0x0002, 0x0062, 0x0260, 0x0269, 0x0001, + 0x04ef, 0x0002, 0x0062, 0x0260, 0x0269, 0x0001, 0x04f5, 0x0002, + 0x0062, 0x0260, 0x0269, 0x0042, 0x053c, 0x0541, 0x0546, 0x054b, + // Entry 4A040 - 4A07F + 0x056a, 0x0589, 0x05a8, 0x05c7, 0x05e6, 0x0605, 0x0624, 0x0643, + 0x065d, 0x0680, 0x06a3, 0x06c1, 0x06c6, 0x06cb, 0x06d0, 0x06f1, + 0x070b, 0x0725, 0x072a, 0x072f, 0x0734, 0x0739, 0x073e, 0x0743, + 0x0748, 0x074d, 0x0752, 0x076e, 0x078a, 0x07a6, 0x07c2, 0x07de, + 0x07fa, 0x0816, 0x0832, 0x084e, 0x086a, 0x0886, 0x08a2, 0x08be, + 0x08da, 0x08f6, 0x0912, 0x092e, 0x094a, 0x0966, 0x0982, 0x099e, + 0x09a3, 0x09a8, 0x09ad, 0x09cb, 0x09e5, 0x09ff, 0x0a1d, 0x0a37, + 0x0a51, 0x0a6f, 0x0a89, 0x0aa3, 0x0aa8, 0x0aad, 0x0001, 0x053e, + // Entry 4A080 - 4A0BF + 0x0001, 0x0014, 0x097f, 0x0001, 0x0543, 0x0001, 0x0014, 0x098a, + 0x0001, 0x0548, 0x0001, 0x0014, 0x098a, 0x0003, 0x054f, 0x0552, + 0x0557, 0x0001, 0x0014, 0x0996, 0x0003, 0x0014, 0x099a, 0x09a6, + 0x3707, 0x0002, 0x055a, 0x0562, 0x0006, 0x0062, 0x028d, 0x026d, + 0xffff, 0xffff, 0x0277, 0x0282, 0x0006, 0x0062, 0x02a8, 0x0299, + 0xffff, 0xffff, 0x02a8, 0x02b7, 0x0003, 0x056e, 0x0571, 0x0576, + 0x0001, 0x0014, 0x06de, 0x0003, 0x0014, 0x099a, 0x09a6, 0x3707, + 0x0002, 0x0579, 0x0581, 0x0006, 0x0062, 0x02c5, 0x02c5, 0xffff, + // Entry 4A0C0 - 4A0FF + 0xffff, 0x02c5, 0x02c5, 0x0006, 0x0062, 0x02ce, 0x02ce, 0xffff, + 0xffff, 0x02ce, 0x02ce, 0x0003, 0x058d, 0x0590, 0x0595, 0x0001, + 0x0014, 0x06de, 0x0003, 0x0014, 0x099a, 0x09a6, 0x3707, 0x0002, + 0x0598, 0x05a0, 0x0006, 0x0062, 0x02c5, 0x02c5, 0xffff, 0xffff, + 0x02c5, 0x02c5, 0x0006, 0x0062, 0x02ce, 0x02ce, 0xffff, 0xffff, + 0x02ce, 0x02ce, 0x0003, 0x05ac, 0x05af, 0x05b4, 0x0001, 0x0062, + 0x02da, 0x0003, 0x0062, 0x02e5, 0x02f8, 0x0309, 0x0002, 0x05b7, + 0x05bf, 0x0006, 0x0062, 0x0351, 0x031c, 0xffff, 0xffff, 0x032d, + // Entry 4A100 - 4A13F + 0x033f, 0x0006, 0x0062, 0x037a, 0x0364, 0xffff, 0xffff, 0x037a, + 0x0390, 0x0003, 0x05cb, 0x05ce, 0x05d3, 0x0001, 0x0000, 0x3aee, + 0x0003, 0x0062, 0x03a5, 0x03b7, 0x03c7, 0x0002, 0x05d6, 0x05de, + 0x0006, 0x0062, 0x03d9, 0x03d9, 0xffff, 0xffff, 0x03d9, 0x03d9, + 0x0006, 0x0062, 0x03e9, 0x03e9, 0xffff, 0xffff, 0x03e9, 0x03e9, + 0x0003, 0x05ea, 0x05ed, 0x05f2, 0x0001, 0x0000, 0x3aee, 0x0003, + 0x0062, 0x03a5, 0x03b7, 0x03c7, 0x0002, 0x05f5, 0x05fd, 0x0006, + 0x0062, 0x03d9, 0x03d9, 0xffff, 0xffff, 0x03d9, 0x03d9, 0x0006, + // Entry 4A140 - 4A17F + 0x0062, 0x03e9, 0x03e9, 0xffff, 0xffff, 0x03e9, 0x03e9, 0x0003, + 0x0609, 0x060c, 0x0611, 0x0001, 0x0062, 0x03fc, 0x0003, 0x0062, + 0x0403, 0x0412, 0x041f, 0x0002, 0x0614, 0x061c, 0x0006, 0x0062, + 0x0457, 0x042e, 0xffff, 0xffff, 0x043b, 0x0449, 0x0006, 0x0062, + 0x0478, 0x0466, 0xffff, 0xffff, 0x0478, 0x048a, 0x0003, 0x0628, + 0x062b, 0x0630, 0x0001, 0x0062, 0x049b, 0x0003, 0x0062, 0x04a0, + 0x04ad, 0x04b8, 0x0002, 0x0633, 0x063b, 0x0006, 0x0062, 0x04c5, + 0x04c5, 0xffff, 0xffff, 0x04c5, 0x04c5, 0x0006, 0x0062, 0x04d0, + // Entry 4A180 - 4A1BF + 0x04d0, 0xffff, 0xffff, 0x04d0, 0x04d0, 0x0003, 0x0647, 0x0000, + 0x064a, 0x0001, 0x0062, 0x049b, 0x0002, 0x064d, 0x0655, 0x0006, + 0x0062, 0x04c5, 0x04c5, 0xffff, 0xffff, 0x04c5, 0x04c5, 0x0006, + 0x0062, 0x04d0, 0x04d0, 0xffff, 0xffff, 0x04d0, 0x04d0, 0x0004, + 0x0662, 0x0665, 0x066a, 0x067d, 0x0001, 0x0062, 0x04de, 0x0003, + 0x0062, 0x04e8, 0x04fa, 0x050a, 0x0002, 0x066d, 0x0675, 0x0006, + 0x0062, 0x054b, 0x051c, 0xffff, 0xffff, 0x052c, 0x053b, 0x0006, + 0x0062, 0x0570, 0x055c, 0xffff, 0xffff, 0x0570, 0x0585, 0x0001, + // Entry 4A1C0 - 4A1FF + 0x0062, 0x0598, 0x0004, 0x0685, 0x0688, 0x068d, 0x06a0, 0x0001, + 0x0062, 0x05ab, 0x0003, 0x0062, 0x05b2, 0x05c1, 0x05ce, 0x0002, + 0x0690, 0x0698, 0x0006, 0x0062, 0x05dd, 0x05dd, 0xffff, 0xffff, + 0x05dd, 0x05dd, 0x0006, 0x0062, 0x05ea, 0x05ea, 0xffff, 0xffff, + 0x05ea, 0x05ea, 0x0001, 0x0062, 0x05fa, 0x0004, 0x06a8, 0x0000, + 0x06ab, 0x06be, 0x0001, 0x0062, 0x05ab, 0x0002, 0x06ae, 0x06b6, + 0x0006, 0x0062, 0x05dd, 0x05dd, 0xffff, 0xffff, 0x05dd, 0x05dd, + 0x0006, 0x0062, 0x05ea, 0x05ea, 0xffff, 0xffff, 0x05ea, 0x05ea, + // Entry 4A200 - 4A23F + 0x0001, 0x0062, 0x05fa, 0x0001, 0x06c3, 0x0001, 0x0062, 0x060a, + 0x0001, 0x06c8, 0x0001, 0x0062, 0x061c, 0x0001, 0x06cd, 0x0001, + 0x0062, 0x061c, 0x0003, 0x06d4, 0x06d7, 0x06de, 0x0001, 0x0062, + 0x0628, 0x0005, 0x0062, 0x0639, 0x0640, 0x0645, 0x062d, 0x064c, + 0x0002, 0x06e1, 0x06e9, 0x0006, 0x0062, 0x0675, 0x0655, 0xffff, + 0xffff, 0x0660, 0x066a, 0x0006, 0x0062, 0x068f, 0x0680, 0xffff, + 0xffff, 0x068f, 0x069f, 0x0003, 0x06f5, 0x0000, 0x06f8, 0x0001, + 0x0029, 0x007b, 0x0002, 0x06fb, 0x0703, 0x0006, 0x0062, 0x06ad, + // Entry 4A240 - 4A27F + 0x06ad, 0xffff, 0xffff, 0x06ad, 0x06ad, 0x0006, 0x0062, 0x06b6, + 0x06b6, 0xffff, 0xffff, 0x06b6, 0x06b6, 0x0003, 0x070f, 0x0000, + 0x0712, 0x0001, 0x0029, 0x007b, 0x0002, 0x0715, 0x071d, 0x0006, + 0x0062, 0x06ad, 0x06ad, 0xffff, 0xffff, 0x06ad, 0x06ad, 0x0006, + 0x0062, 0x06b6, 0x06b6, 0xffff, 0xffff, 0x06b6, 0x06b6, 0x0001, + 0x0727, 0x0001, 0x0062, 0x06c2, 0x0001, 0x072c, 0x0001, 0x0062, + 0x06cc, 0x0001, 0x0731, 0x0001, 0x0062, 0x06cc, 0x0001, 0x0736, + 0x0001, 0x0062, 0x06d4, 0x0001, 0x073b, 0x0001, 0x0062, 0x06e3, + // Entry 4A280 - 4A2BF + 0x0001, 0x0740, 0x0001, 0x0062, 0x06e3, 0x0001, 0x0745, 0x0001, + 0x0062, 0x06ef, 0x0001, 0x074a, 0x0001, 0x0062, 0x0709, 0x0001, + 0x074f, 0x0001, 0x0062, 0x0709, 0x0003, 0x0000, 0x0756, 0x075b, + 0x0003, 0x0062, 0x071d, 0x072d, 0x073b, 0x0002, 0x075e, 0x0766, + 0x0006, 0x0062, 0x0766, 0x074b, 0xffff, 0xffff, 0x0759, 0x0759, + 0x0006, 0x0062, 0x0786, 0x0774, 0xffff, 0xffff, 0x0786, 0x0799, + 0x0003, 0x0000, 0x0772, 0x0777, 0x0003, 0x0062, 0x07a9, 0x07b6, + 0x07c1, 0x0002, 0x077a, 0x0782, 0x0006, 0x0062, 0x07ce, 0x07ce, + // Entry 4A2C0 - 4A2FF + 0xffff, 0xffff, 0x07ce, 0x07ce, 0x0006, 0x0062, 0x07d9, 0x07d9, + 0xffff, 0xffff, 0x07d9, 0x07d9, 0x0003, 0x0000, 0x078e, 0x0793, + 0x0003, 0x0062, 0x07e7, 0x07f3, 0x07fd, 0x0002, 0x0796, 0x079e, + 0x0006, 0x0062, 0x0809, 0x0809, 0xffff, 0xffff, 0x0809, 0x0809, + 0x0006, 0x0062, 0x0813, 0x0813, 0xffff, 0xffff, 0x0813, 0x0813, + 0x0003, 0x0000, 0x07aa, 0x07af, 0x0003, 0x0062, 0x0820, 0x0831, + 0x0840, 0x0002, 0x07b2, 0x07ba, 0x0006, 0x0062, 0x087e, 0x0851, + 0xffff, 0xffff, 0x0860, 0x086f, 0x0006, 0x0062, 0x08a1, 0x088e, + // Entry 4A300 - 4A33F + 0xffff, 0xffff, 0x08a1, 0x08b5, 0x0003, 0x0000, 0x07c6, 0x07cb, + 0x0003, 0x0062, 0x08c7, 0x08d5, 0x08e1, 0x0002, 0x07ce, 0x07d6, + 0x0006, 0x0062, 0x08ef, 0x08ef, 0xffff, 0xffff, 0x08ef, 0x08ef, + 0x0006, 0x0062, 0x08fb, 0x08fb, 0xffff, 0xffff, 0x08fb, 0x08fb, + 0x0003, 0x0000, 0x07e2, 0x07e7, 0x0003, 0x0062, 0x090a, 0x0916, + 0x0920, 0x0002, 0x07ea, 0x07f2, 0x0006, 0x0062, 0x092c, 0x092c, + 0xffff, 0xffff, 0x092c, 0x092c, 0x0006, 0x0062, 0x0936, 0x0936, + 0xffff, 0xffff, 0x0936, 0x0936, 0x0003, 0x0000, 0x07fe, 0x0803, + // Entry 4A340 - 4A37F + 0x0003, 0x0062, 0x0943, 0x0952, 0x095f, 0x0002, 0x0806, 0x080e, + 0x0006, 0x0062, 0x0995, 0x096e, 0xffff, 0xffff, 0x097b, 0x0988, + 0x0006, 0x0062, 0x09b4, 0x09a3, 0xffff, 0xffff, 0x09b4, 0x09c6, + 0x0003, 0x0000, 0x081a, 0x081f, 0x0003, 0x0062, 0x09d6, 0x09e4, + 0x09f0, 0x0002, 0x0822, 0x082a, 0x0006, 0x0062, 0x09fe, 0x09fe, + 0xffff, 0xffff, 0x09fe, 0x09fe, 0x0006, 0x0062, 0x0a0a, 0x0a0a, + 0xffff, 0xffff, 0x0a0a, 0x0a0a, 0x0003, 0x0000, 0x0836, 0x083b, + 0x0003, 0x0062, 0x0a19, 0x0a25, 0x0a2f, 0x0002, 0x083e, 0x0846, + // Entry 4A380 - 4A3BF + 0x0006, 0x0062, 0x0a3b, 0x0a3b, 0xffff, 0xffff, 0x0a3b, 0x0a3b, + 0x0006, 0x0062, 0x0a45, 0x0a45, 0xffff, 0xffff, 0x0a45, 0x0a45, + 0x0003, 0x0000, 0x0852, 0x0857, 0x0003, 0x0062, 0x0a52, 0x0a61, + 0x0a6e, 0x0002, 0x085a, 0x0862, 0x0006, 0x0062, 0x0a97, 0x0a7d, + 0xffff, 0xffff, 0x0a8a, 0x0a8a, 0x0006, 0x0062, 0x0ab5, 0x0aa4, + 0xffff, 0xffff, 0x0ab5, 0x0ac7, 0x0003, 0x0000, 0x086e, 0x0873, + 0x0003, 0x0062, 0x0ad7, 0x0ae4, 0x0aef, 0x0002, 0x0876, 0x087e, + 0x0006, 0x0062, 0x0afc, 0x0afc, 0xffff, 0xffff, 0x0afc, 0x0afc, + // Entry 4A3C0 - 4A3FF + 0x0006, 0x0062, 0x0b07, 0x0b07, 0xffff, 0xffff, 0x0b07, 0x0b07, + 0x0003, 0x0000, 0x088a, 0x088f, 0x0003, 0x0062, 0x0b15, 0x0b21, + 0x0b2b, 0x0002, 0x0892, 0x089a, 0x0006, 0x0062, 0x0b37, 0x0b37, + 0xffff, 0xffff, 0x0b37, 0x0b37, 0x0006, 0x0062, 0x0b41, 0x0b41, + 0xffff, 0xffff, 0x0b41, 0x0b41, 0x0003, 0x0000, 0x08a6, 0x08ab, + 0x0003, 0x0062, 0x0b4e, 0x0b5f, 0x0b6e, 0x0002, 0x08ae, 0x08b6, + 0x0006, 0x0062, 0x0bac, 0x0b7f, 0xffff, 0xffff, 0x0b8e, 0x0b9d, + 0x0006, 0x0062, 0x0bcf, 0x0bbc, 0xffff, 0xffff, 0x0bcf, 0x0be3, + // Entry 4A400 - 4A43F + 0x0003, 0x0000, 0x08c2, 0x08c7, 0x0003, 0x0062, 0x0bf5, 0x0c02, + 0x0c0d, 0x0002, 0x08ca, 0x08d2, 0x0006, 0x0062, 0x0c1a, 0x0c1a, + 0xffff, 0xffff, 0x0c1a, 0x0c1a, 0x0006, 0x0062, 0x0c25, 0x0c25, + 0xffff, 0xffff, 0x0c25, 0x0c25, 0x0003, 0x0000, 0x08de, 0x08e3, + 0x0003, 0x0062, 0x0bf5, 0x0c02, 0x0c0d, 0x0002, 0x08e6, 0x08ee, + 0x0006, 0x0062, 0x0c1a, 0x0c1a, 0xffff, 0xffff, 0x0c1a, 0x0c1a, + 0x0006, 0x0062, 0x0c25, 0x0c25, 0xffff, 0xffff, 0x0c25, 0x0c25, + 0x0003, 0x0000, 0x08fa, 0x08ff, 0x0003, 0x0062, 0x0c33, 0x0c42, + // Entry 4A440 - 4A47F + 0x0c4f, 0x0002, 0x0902, 0x090a, 0x0006, 0x0062, 0x0c85, 0x0c5e, + 0xffff, 0xffff, 0x0c6b, 0x0c78, 0x0006, 0x0062, 0x0ca4, 0x0c93, + 0xffff, 0xffff, 0x0ca4, 0x0cb6, 0x0003, 0x0000, 0x0916, 0x091b, + 0x0003, 0x0062, 0x0cc6, 0x0cd2, 0x0cdc, 0x0002, 0x091e, 0x0926, + 0x0006, 0x0062, 0x0ce8, 0x0ce8, 0xffff, 0xffff, 0x0ce8, 0x0ce8, + 0x0006, 0x0062, 0x0cf2, 0x0cf2, 0xffff, 0xffff, 0x0cf2, 0x0cf2, + 0x0003, 0x0000, 0x0932, 0x0937, 0x0003, 0x0062, 0x0cc6, 0x0cd2, + 0x0cdc, 0x0002, 0x093a, 0x0942, 0x0006, 0x0062, 0x0ce8, 0x0ce8, + // Entry 4A480 - 4A4BF + 0xffff, 0xffff, 0x0ce8, 0x0ce8, 0x0006, 0x0062, 0x0cf2, 0x0cf2, + 0xffff, 0xffff, 0x0cf2, 0x0cf2, 0x0003, 0x0000, 0x094e, 0x0953, + 0x0003, 0x0062, 0x0cff, 0x0d0e, 0x0d1b, 0x0002, 0x0956, 0x095e, + 0x0006, 0x0062, 0x0d44, 0x0d2a, 0xffff, 0xffff, 0x0d37, 0x0d37, + 0x0006, 0x0062, 0x0d62, 0x0d51, 0xffff, 0xffff, 0x0d62, 0x0d74, + 0x0003, 0x0000, 0x096a, 0x096f, 0x0003, 0x0062, 0x0d84, 0x0d90, + 0x0d9a, 0x0002, 0x0972, 0x097a, 0x0006, 0x0062, 0x0da6, 0x0da6, + 0xffff, 0xffff, 0x0da6, 0x0da6, 0x0006, 0x0062, 0x0db0, 0x0db0, + // Entry 4A4C0 - 4A4FF + 0xffff, 0xffff, 0x0db0, 0x0db0, 0x0003, 0x0000, 0x0986, 0x098b, + 0x0003, 0x0062, 0x0d84, 0x0d90, 0x0d9a, 0x0002, 0x098e, 0x0996, + 0x0006, 0x0062, 0x0da6, 0x0da6, 0xffff, 0xffff, 0x0da6, 0x0da6, + 0x0006, 0x0062, 0x0db0, 0x0db0, 0xffff, 0xffff, 0x0db0, 0x0db0, + 0x0001, 0x09a0, 0x0001, 0x0007, 0x0892, 0x0001, 0x09a5, 0x0001, + 0x0007, 0x0892, 0x0001, 0x09aa, 0x0001, 0x0007, 0x0892, 0x0003, + 0x09b1, 0x09b4, 0x09b8, 0x0001, 0x0014, 0x1226, 0x0002, 0x0062, + 0xffff, 0x0dbd, 0x0002, 0x09bb, 0x09c3, 0x0006, 0x0062, 0x0de6, + // Entry 4A500 - 4A53F + 0x0dcc, 0xffff, 0xffff, 0x0dd9, 0x0dd9, 0x0006, 0x0062, 0x0e04, + 0x0df3, 0xffff, 0xffff, 0x0e04, 0x0df3, 0x0003, 0x09cf, 0x0000, + 0x09d2, 0x0001, 0x0000, 0x213b, 0x0002, 0x09d5, 0x09dd, 0x0006, + 0x0062, 0x0e16, 0x0e16, 0xffff, 0xffff, 0x0e16, 0x0e16, 0x0006, + 0x0062, 0x0e1e, 0x0e1e, 0xffff, 0xffff, 0x0e1e, 0x0e1e, 0x0003, + 0x09e9, 0x0000, 0x09ec, 0x0001, 0x0000, 0x213b, 0x0002, 0x09ef, + 0x09f7, 0x0006, 0x0062, 0x0e16, 0x0e16, 0xffff, 0xffff, 0x0e16, + 0x0e16, 0x0006, 0x0062, 0x0e1e, 0x0e1e, 0xffff, 0xffff, 0x0e1e, + // Entry 4A540 - 4A57F + 0x0e1e, 0x0003, 0x0a03, 0x0a06, 0x0a0a, 0x0001, 0x0062, 0x0e29, + 0x0002, 0x0062, 0xffff, 0x0e31, 0x0002, 0x0a0d, 0x0a15, 0x0006, + 0x0062, 0x0e5d, 0x0e41, 0xffff, 0xffff, 0x0e4f, 0x0e4f, 0x0006, + 0x0062, 0x0e7c, 0x0e6a, 0xffff, 0xffff, 0x0e7c, 0x0e8f, 0x0003, + 0x0a21, 0x0000, 0x0a24, 0x0001, 0x0043, 0x092f, 0x0002, 0x0a27, + 0x0a2f, 0x0006, 0x0062, 0x0ea0, 0x0ea0, 0xffff, 0xffff, 0x0ea0, + 0x0ea0, 0x0006, 0x0062, 0x0eaa, 0x0eaa, 0xffff, 0xffff, 0x0eaa, + 0x0eaa, 0x0003, 0x0a3b, 0x0000, 0x0a3e, 0x0001, 0x0043, 0x092f, + // Entry 4A580 - 4A5BF + 0x0002, 0x0a41, 0x0a49, 0x0006, 0x0062, 0x0ea0, 0x0ea0, 0xffff, + 0xffff, 0x0ea0, 0x0ea0, 0x0006, 0x0062, 0x0eaa, 0x0eaa, 0xffff, + 0xffff, 0x0eaa, 0x0eaa, 0x0003, 0x0a55, 0x0a58, 0x0a5c, 0x0001, + 0x000d, 0x0d0f, 0x0002, 0x0056, 0xffff, 0x0f5a, 0x0002, 0x0a5f, + 0x0a67, 0x0006, 0x0062, 0x0ed3, 0x0eb7, 0xffff, 0xffff, 0x0ec5, + 0x0ec5, 0x0006, 0x0062, 0x0ef3, 0x0ee1, 0xffff, 0xffff, 0x0ef3, + 0x0f06, 0x0003, 0x0a73, 0x0000, 0x0a76, 0x0001, 0x0000, 0x2002, + 0x0002, 0x0a79, 0x0a81, 0x0006, 0x0062, 0x0f17, 0x0f17, 0xffff, + // Entry 4A5C0 - 4A5FF + 0xffff, 0x0f17, 0x0f17, 0x0006, 0x0062, 0x0f1f, 0x0f1f, 0xffff, + 0xffff, 0x0f1f, 0x0f1f, 0x0003, 0x0a8d, 0x0000, 0x0a90, 0x0001, + 0x0000, 0x2002, 0x0002, 0x0a93, 0x0a9b, 0x0006, 0x0062, 0x0f17, + 0x0f17, 0xffff, 0xffff, 0x0f17, 0x0f17, 0x0006, 0x0062, 0x0f1f, + 0x0f1f, 0xffff, 0xffff, 0x0f1f, 0x0f1f, 0x0001, 0x0aa5, 0x0001, + 0x0014, 0x135c, 0x0001, 0x0aaa, 0x0001, 0x0014, 0x1379, 0x0001, + 0x0aaf, 0x0001, 0x0014, 0x1379, 0x0004, 0x0ab7, 0x0abc, 0x0ac1, + 0x0ae6, 0x0003, 0x0000, 0x1dc7, 0x39fb, 0x3cfd, 0x0003, 0x0062, + // Entry 4A600 - 4A63F + 0x0f2a, 0x0f3e, 0x0f47, 0x0002, 0x0ac4, 0x0ada, 0x0003, 0x0ac8, + 0x0ad4, 0x0ace, 0x0004, 0x0006, 0xffff, 0xffff, 0xffff, 0x1f5f, + 0x0004, 0x0006, 0x450b, 0xffff, 0xffff, 0x1f5f, 0x0004, 0x0006, + 0xffff, 0xffff, 0xffff, 0x1f63, 0x0003, 0x0000, 0x0ae1, 0x0ade, + 0x0001, 0x0062, 0x0f50, 0x0003, 0x0062, 0xffff, 0x0f6c, 0x0f81, + 0x0002, 0x0ccd, 0x0ae9, 0x0003, 0x0aed, 0x0c2d, 0x0b8d, 0x009e, + 0x0062, 0xffff, 0xffff, 0xffff, 0xffff, 0x1026, 0x1079, 0x1101, + 0x1145, 0x11b9, 0x122d, 0x1298, 0x1312, 0x1356, 0x1416, 0x1454, + // Entry 4A640 - 4A67F + 0x149e, 0x14fd, 0x153e, 0x1585, 0x15de, 0x1655, 0x16b4, 0x1710, + 0x1766, 0x17a4, 0xffff, 0xffff, 0x1816, 0xffff, 0x186a, 0xffff, + 0x18d7, 0x191e, 0x195c, 0x199a, 0xffff, 0xffff, 0x1a1e, 0x1a68, + 0x1ac7, 0xffff, 0xffff, 0xffff, 0x1b58, 0xffff, 0x1bd5, 0x1c28, + 0xffff, 0x1c8e, 0x1ce4, 0x1d2e, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1de7, 0xffff, 0xffff, 0x1e5a, 0x1eb0, 0xffff, 0xffff, 0x1f45, + 0x1fa1, 0x1fe8, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x20a7, 0x20e5, 0x2126, 0x216a, 0x21ab, 0xffff, 0xffff, 0x2257, + // Entry 4A680 - 4A6BF + 0xffff, 0x22ab, 0xffff, 0xffff, 0x2335, 0xffff, 0x23e9, 0xffff, + 0xffff, 0xffff, 0xffff, 0x247f, 0xffff, 0x24e4, 0x2552, 0x25b7, + 0x2607, 0xffff, 0xffff, 0xffff, 0x267a, 0x26cd, 0x2720, 0xffff, + 0xffff, 0x2795, 0x282e, 0x287b, 0x28b3, 0xffff, 0xffff, 0x2924, + 0x296e, 0x29b2, 0xffff, 0x2a14, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2b27, 0x2b71, 0x2bb2, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2c8a, 0xffff, 0xffff, 0x2cf5, 0xffff, + 0x2d45, 0xffff, 0x2d9b, 0x2de2, 0x2e20, 0xffff, 0x2e76, 0x2ec6, + // Entry 4A6C0 - 4A6FF + 0xffff, 0xffff, 0xffff, 0x2f57, 0x2f98, 0xffff, 0xffff, 0x0f9a, + 0x10bd, 0x1394, 0x13d5, 0xffff, 0xffff, 0x2391, 0x2ab3, 0x009e, + 0x0062, 0x0fdb, 0x0fea, 0x0ffe, 0x1014, 0x103b, 0x1089, 0x1111, + 0x1165, 0x11d9, 0x124a, 0x12ba, 0x1322, 0x1364, 0x1424, 0x1466, + 0x14b7, 0x150c, 0x154f, 0x159c, 0x15ff, 0x166e, 0x16cc, 0x1726, + 0x1774, 0x17b8, 0x17f4, 0x1804, 0x1826, 0x185a, 0x187b, 0x18c6, + 0x18e8, 0x192c, 0x196a, 0x19ae, 0x19ea, 0x1a04, 0x1a30, 0x1a81, + 0x1ad6, 0x1b08, 0x1b1f, 0x1b41, 0x1b75, 0x1bc3, 0x1bea, 0x1c3f, + // Entry 4A700 - 4A73F + 0x1c81, 0x1ca4, 0x1cf6, 0x1d3f, 0x1d75, 0x1d8f, 0x1dc5, 0x1dd6, + 0x1df7, 0x1e2b, 0x1e47, 0x1e70, 0x1ec5, 0x1f11, 0x1f36, 0x1f5d, + 0x1fb2, 0x1ff7, 0x2029, 0x2037, 0x204d, 0x205f, 0x2076, 0x208f, + 0x20b5, 0x20f4, 0x2136, 0x2179, 0x21ca, 0x2220, 0x223c, 0x2267, + 0x229b, 0x22be, 0x22f8, 0x2319, 0x234d, 0x23d2, 0x23fa, 0x2430, + 0x2442, 0x2452, 0x2462, 0x2492, 0x24cc, 0x2502, 0x256d, 0x25cb, + 0x2617, 0x264b, 0x265c, 0x266b, 0x268f, 0x26e2, 0x2736, 0x2776, + 0x2785, 0x27ba, 0x2841, 0x2887, 0x28c5, 0x28fd, 0x290c, 0x2936, + // Entry 4A740 - 4A77F + 0x297e, 0x29c3, 0x29f9, 0x2a2d, 0x2a73, 0x2a90, 0x2a9f, 0x2afd, + 0x2b0f, 0x2b39, 0x2b80, 0x2bc1, 0x2bf3, 0x2c04, 0x2c23, 0x2c41, + 0x2c56, 0x2c67, 0x2c7b, 0x2c9c, 0x2cd4, 0x2ce4, 0x2d04, 0x2d36, + 0x2d56, 0x2d8c, 0x2dac, 0x2df0, 0x2e30, 0x2e64, 0x2e8a, 0x2ed9, + 0x2f13, 0x2f27, 0x2f39, 0x2f66, 0x2fae, 0x1f03, 0x2818, 0x0fa9, + 0x10cd, 0x13a3, 0x13e4, 0x18b1, 0x2308, 0x23a0, 0x2ac5, 0x009e, + 0x0062, 0xffff, 0xffff, 0xffff, 0xffff, 0x105d, 0x10a6, 0x112e, + 0x1192, 0x1206, 0x1274, 0x12e9, 0x133f, 0x137f, 0x143f, 0x1485, + // Entry 4A780 - 4A7BF + 0x14dd, 0x1528, 0x156d, 0x15c0, 0x162d, 0x1694, 0x16f1, 0x1749, + 0x178f, 0x17d9, 0xffff, 0xffff, 0x1843, 0xffff, 0x1899, 0xffff, + 0x1906, 0x1947, 0x1985, 0x19cf, 0xffff, 0xffff, 0x1a4f, 0x1aa7, + 0x1af2, 0xffff, 0xffff, 0xffff, 0x1b9f, 0xffff, 0x1c0c, 0x1c63, + 0xffff, 0x1cc7, 0x1d15, 0x1d5d, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1e14, 0xffff, 0xffff, 0x1e93, 0x1ee7, 0xffff, 0xffff, 0x1f82, + 0x1fd0, 0x2013, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x20d0, 0x2110, 0x2153, 0x2195, 0x21f6, 0xffff, 0xffff, 0x2284, + // Entry 4A7C0 - 4A7FF + 0xffff, 0x22de, 0xffff, 0xffff, 0x2372, 0xffff, 0x2418, 0xffff, + 0xffff, 0xffff, 0xffff, 0x24b2, 0xffff, 0x252d, 0x2595, 0x25ec, + 0x2634, 0xffff, 0xffff, 0xffff, 0x26b1, 0x2704, 0x2759, 0xffff, + 0xffff, 0x27ec, 0x2861, 0x28a0, 0x28e4, 0xffff, 0xffff, 0x2955, + 0x299b, 0x29e1, 0xffff, 0x2a53, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2b58, 0x2b9c, 0x2bdd, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2cbb, 0xffff, 0xffff, 0x2d20, 0xffff, + 0x2d74, 0xffff, 0x2dca, 0x2e0b, 0x2e4d, 0xffff, 0x2eab, 0x2ef9, + // Entry 4A800 - 4A83F + 0xffff, 0xffff, 0xffff, 0x2f82, 0x2fd1, 0xffff, 0xffff, 0x0fc5, + 0x10ea, 0x13bf, 0x1400, 0xffff, 0xffff, 0x23bc, 0x2ae4, 0x0003, + 0x0cd1, 0x0d31, 0x0d01, 0x002e, 0x0007, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 4A840 - 4A87F + 0xffff, 0xffff, 0x2476, 0x002e, 0x0007, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2476, 0x002e, 0x0007, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 4A880 - 4A8BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x247b, 0x0003, 0x0004, 0x05b3, 0x0afe, 0x0012, + 0x0017, 0x0000, 0x0030, 0x0000, 0x00b7, 0x0000, 0x013e, 0x0169, + 0x0399, 0x041d, 0x049b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0519, 0x0597, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x001d, + // Entry 4A8C0 - 4A8FF + 0x0003, 0x0026, 0x002b, 0x0021, 0x0001, 0x0023, 0x0001, 0x0063, + 0x0000, 0x0001, 0x0028, 0x0001, 0x0063, 0x0014, 0x0001, 0x002d, + 0x0001, 0x0017, 0x01f7, 0x0005, 0x0036, 0x0000, 0x0000, 0x0000, + 0x00a1, 0x0002, 0x0039, 0x006d, 0x0003, 0x003d, 0x004d, 0x005d, + 0x000e, 0x0000, 0xffff, 0x03ce, 0x03d3, 0x03d8, 0x03de, 0x2221, + 0x3af7, 0x3afe, 0x03f9, 0x3b07, 0x040b, 0x0411, 0x0416, 0x242d, + 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, + // Entry 4A900 - 4A93F + 0x000e, 0x0000, 0xffff, 0x03ce, 0x03d3, 0x03d8, 0x03de, 0x2221, + 0x3af7, 0x3afe, 0x03f9, 0x3b07, 0x040b, 0x0411, 0x0416, 0x242d, + 0x0003, 0x0071, 0x0081, 0x0091, 0x000e, 0x0000, 0xffff, 0x03ce, + 0x03d3, 0x03d8, 0x03de, 0x2221, 0x3af7, 0x3afe, 0x03f9, 0x3b07, + 0x040b, 0x0411, 0x0416, 0x242d, 0x000e, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x0000, 0xffff, 0x03ce, + 0x03d3, 0x03d8, 0x03de, 0x2221, 0x3af7, 0x3afe, 0x03f9, 0x3b07, + // Entry 4A940 - 4A97F + 0x040b, 0x0411, 0x0416, 0x242d, 0x0003, 0x00ab, 0x00b1, 0x00a5, + 0x0001, 0x00a7, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x00ad, + 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x00b3, 0x0002, 0x0000, + 0x0425, 0x042a, 0x0005, 0x00bd, 0x0000, 0x0000, 0x0000, 0x0128, + 0x0002, 0x00c0, 0x00f4, 0x0003, 0x00c4, 0x00d4, 0x00e4, 0x000e, + 0x0000, 0xffff, 0x042f, 0x0438, 0x3b0f, 0x3b15, 0x044c, 0x0450, + 0x0458, 0x0460, 0x3b1c, 0x046e, 0x3b23, 0x0479, 0x3b29, 0x000e, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + // Entry 4A980 - 4A9BF + 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, + 0x0000, 0xffff, 0x042f, 0x0438, 0x3b0f, 0x3b15, 0x044c, 0x0450, + 0x0458, 0x0460, 0x3b1c, 0x046e, 0x3b23, 0x0479, 0x3b29, 0x0003, + 0x00f8, 0x0108, 0x0118, 0x000e, 0x0000, 0xffff, 0x042f, 0x0438, + 0x3b0f, 0x3b15, 0x044c, 0x0450, 0x0458, 0x0460, 0x3b1c, 0x046e, + 0x3b23, 0x0479, 0x3b29, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, + 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x0000, 0xffff, 0x042f, 0x0438, + // Entry 4A9C0 - 4A9FF + 0x3b0f, 0x3b15, 0x044c, 0x0450, 0x0458, 0x0460, 0x3b1c, 0x046e, + 0x3b23, 0x0479, 0x3b29, 0x0003, 0x0132, 0x0138, 0x012c, 0x0001, + 0x012e, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x0134, 0x0002, + 0x0000, 0x0425, 0x042a, 0x0001, 0x013a, 0x0002, 0x0000, 0x0425, + 0x042a, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0147, + 0x0000, 0x0158, 0x0004, 0x0155, 0x014f, 0x014c, 0x0152, 0x0001, + 0x0024, 0x0000, 0x0001, 0x0063, 0x001e, 0x0001, 0x0016, 0x0098, + 0x0001, 0x0063, 0x002b, 0x0004, 0x0166, 0x0160, 0x015d, 0x0163, + // Entry 4AA00 - 4AA3F + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x0172, 0x01d7, 0x022e, + 0x0263, 0x034c, 0x0366, 0x0377, 0x0388, 0x0002, 0x0175, 0x01a6, + 0x0003, 0x0179, 0x0188, 0x0197, 0x000d, 0x0016, 0xffff, 0x00a3, + 0x3136, 0x313b, 0x3140, 0x3145, 0x25ed, 0x25f2, 0x3149, 0x25f7, + 0x2761, 0x314e, 0x3153, 0x000d, 0x0000, 0xffff, 0x2142, 0x2006, + 0x3d03, 0x1f9c, 0x3d03, 0x2142, 0x2142, 0x1f9c, 0x2002, 0x1f98, + 0x3d05, 0x3d07, 0x000d, 0x000d, 0xffff, 0x0089, 0x0090, 0x34e6, + // Entry 4AA40 - 4AA7F + 0x346d, 0x34ec, 0x328f, 0x3295, 0x00ad, 0x34f0, 0x348b, 0x34fa, + 0x3503, 0x0003, 0x01aa, 0x01b9, 0x01c8, 0x000d, 0x0016, 0xffff, + 0x00a3, 0x3136, 0x313b, 0x3140, 0x3158, 0x25ed, 0x25f2, 0x3149, + 0x25f7, 0x2761, 0x314e, 0x3153, 0x000d, 0x0000, 0xffff, 0x2142, + 0x2006, 0x3d03, 0x1f9c, 0x3d03, 0x2142, 0x2142, 0x1f9c, 0x2002, + 0x1f98, 0x3d05, 0x3d07, 0x000d, 0x000d, 0xffff, 0x0089, 0x0090, + 0x34e6, 0x346d, 0x350c, 0x328f, 0x3295, 0x00ad, 0x34f0, 0x348b, + 0x34fa, 0x3503, 0x0002, 0x01da, 0x0204, 0x0005, 0x01e0, 0x01e9, + // Entry 4AA80 - 4AABF + 0x01fb, 0x0000, 0x01f2, 0x0007, 0x0046, 0x0e98, 0x33f2, 0x33f7, + 0x33fc, 0x3401, 0x3407, 0x340c, 0x0007, 0x0000, 0x3d05, 0x21e4, + 0x2000, 0x2002, 0x21e6, 0x21e4, 0x2002, 0x0007, 0x0046, 0x0e98, + 0x33f2, 0x33f7, 0x33fc, 0x3401, 0x3407, 0x340c, 0x0007, 0x0063, + 0x003b, 0x0043, 0x004e, 0x0054, 0x005a, 0x0063, 0x0069, 0x0005, + 0x020a, 0x0213, 0x0225, 0x0000, 0x021c, 0x0007, 0x0046, 0x0e98, + 0x33f2, 0x33f7, 0x33fc, 0x3401, 0x3407, 0x340c, 0x0007, 0x0000, + 0x3d05, 0x21e4, 0x2000, 0x2002, 0x21e6, 0x21e4, 0x2002, 0x0007, + // Entry 4AAC0 - 4AAFF + 0x0046, 0x0e98, 0x33f2, 0x33f7, 0x33fc, 0x3401, 0x3407, 0x340c, + 0x0007, 0x0063, 0x003b, 0x0043, 0x004e, 0x0054, 0x005a, 0x0063, + 0x0069, 0x0002, 0x0231, 0x024a, 0x0003, 0x0235, 0x023c, 0x0243, + 0x0005, 0x0063, 0xffff, 0x0070, 0x0079, 0x0082, 0x008b, 0x0005, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0063, + 0xffff, 0x0094, 0x00a3, 0x00b2, 0x00c1, 0x0003, 0x024e, 0x0255, + 0x025c, 0x0005, 0x0063, 0xffff, 0x0070, 0x0079, 0x0082, 0x008b, + 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, + // Entry 4AB00 - 4AB3F + 0x0063, 0xffff, 0x0094, 0x00a3, 0x00b2, 0x00c1, 0x0002, 0x0266, + 0x02d9, 0x0003, 0x026a, 0x028f, 0x02b4, 0x0009, 0x0277, 0x027d, + 0x0274, 0x0280, 0x0286, 0x0289, 0x028c, 0x027a, 0x0283, 0x0001, + 0x0063, 0x00d0, 0x0001, 0x0014, 0x06cf, 0x0001, 0x0063, 0x00d7, + 0x0001, 0x0030, 0x004f, 0x0001, 0x0063, 0x00de, 0x0001, 0x0014, + 0x06cf, 0x0001, 0x0030, 0x004f, 0x0001, 0x0063, 0x00e4, 0x0001, + 0x0063, 0x00eb, 0x0009, 0x029c, 0x02a2, 0x0299, 0x02a5, 0x02ab, + 0x02ae, 0x02b1, 0x029f, 0x02a8, 0x0001, 0x0063, 0x00f3, 0x0001, + // Entry 4AB40 - 4AB7F + 0x0000, 0x3d07, 0x0001, 0x0063, 0x00f9, 0x0001, 0x0000, 0x21e4, + 0x0001, 0x0063, 0x00ff, 0x0001, 0x0000, 0x3d07, 0x0001, 0x0000, + 0x21e4, 0x0001, 0x0063, 0x0102, 0x0001, 0x0014, 0x063e, 0x0009, + 0x02c1, 0x02c7, 0x02be, 0x02ca, 0x02d0, 0x02d3, 0x02d6, 0x02c4, + 0x02cd, 0x0001, 0x0063, 0x0105, 0x0001, 0x0014, 0x06cf, 0x0001, + 0x0063, 0x010f, 0x0001, 0x0030, 0x004f, 0x0001, 0x0063, 0x0117, + 0x0001, 0x0063, 0x011f, 0x0001, 0x0063, 0x0128, 0x0001, 0x0063, + 0x0131, 0x0001, 0x0063, 0x00eb, 0x0003, 0x02dd, 0x0302, 0x0327, + // Entry 4AB80 - 4ABBF + 0x0009, 0x02ea, 0x02f0, 0x02e7, 0x02f3, 0x02f9, 0x02fc, 0x02ff, + 0x02ed, 0x02f6, 0x0001, 0x0062, 0x012b, 0x0001, 0x0014, 0x06cf, + 0x0001, 0x0063, 0x0139, 0x0001, 0x0030, 0x004f, 0x0001, 0x0063, + 0x013f, 0x0001, 0x0014, 0x06cf, 0x0001, 0x0030, 0x004f, 0x0001, + 0x0063, 0x00e4, 0x0001, 0x0063, 0x0144, 0x0009, 0x030f, 0x0315, + 0x030c, 0x0318, 0x031e, 0x0321, 0x0324, 0x0312, 0x031b, 0x0001, + 0x0063, 0x00f3, 0x0001, 0x0000, 0x3d07, 0x0001, 0x0063, 0x00f9, + 0x0001, 0x0000, 0x21e4, 0x0001, 0x0000, 0x2142, 0x0001, 0x0000, + // Entry 4ABC0 - 4ABFF + 0x3d07, 0x0001, 0x0000, 0x21e4, 0x0001, 0x0000, 0x1f94, 0x0001, + 0x0000, 0x3d05, 0x0009, 0x0334, 0x033a, 0x0331, 0x033d, 0x0343, + 0x0346, 0x0349, 0x0337, 0x0340, 0x0001, 0x0063, 0x0149, 0x0001, + 0x0063, 0x0151, 0x0001, 0x0063, 0x015a, 0x0001, 0x0063, 0x0161, + 0x0001, 0x0056, 0x0845, 0x0001, 0x0063, 0x0151, 0x0001, 0x0063, + 0x0161, 0x0001, 0x0014, 0x0725, 0x0001, 0x0063, 0x0144, 0x0003, + 0x035b, 0x0000, 0x0350, 0x0002, 0x0353, 0x0357, 0x0002, 0x0063, + 0x016a, 0x018e, 0x0002, 0x0063, 0x0179, 0x019a, 0x0002, 0x035e, + // Entry 4AC00 - 4AC3F + 0x0362, 0x0002, 0x002f, 0x01a6, 0x38ec, 0x0002, 0x0063, 0x01ac, + 0x01b8, 0x0004, 0x0374, 0x036e, 0x036b, 0x0371, 0x0001, 0x0063, + 0x01c3, 0x0001, 0x0063, 0x01d4, 0x0001, 0x0016, 0x029f, 0x0001, + 0x0063, 0x01df, 0x0004, 0x0385, 0x037f, 0x037c, 0x0382, 0x0001, + 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, + 0x0001, 0x0000, 0x0546, 0x0004, 0x0396, 0x0390, 0x038d, 0x0393, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0005, 0x039f, 0x0000, 0x0000, + // Entry 4AC40 - 4AC7F + 0x0000, 0x040a, 0x0002, 0x03a2, 0x03d6, 0x0003, 0x03a6, 0x03b6, + 0x03c6, 0x000e, 0x0000, 0x3d22, 0x054c, 0x0553, 0x3d09, 0x3d10, + 0x0568, 0x3d16, 0x3d1d, 0x3d2a, 0x3d30, 0x3d35, 0x3c0c, 0x3d3b, + 0x3d3e, 0x000e, 0x0000, 0x003f, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, + 0x0422, 0x000e, 0x0000, 0x3d22, 0x054c, 0x0553, 0x3d09, 0x3d10, + 0x0568, 0x3d16, 0x3d1d, 0x3d2a, 0x3d30, 0x3d35, 0x3c0c, 0x3d3b, + 0x3d3e, 0x0003, 0x03da, 0x03ea, 0x03fa, 0x000e, 0x0000, 0x3d22, + // Entry 4AC80 - 4ACBF + 0x054c, 0x0553, 0x3d09, 0x3d10, 0x0568, 0x3d16, 0x3d1d, 0x3d2a, + 0x3d30, 0x3d35, 0x3c0c, 0x3d3b, 0x3d3e, 0x000e, 0x0000, 0x003f, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x0000, 0x3d22, + 0x054c, 0x0553, 0x3d09, 0x3d10, 0x0568, 0x3d16, 0x3d1d, 0x3d2a, + 0x3d30, 0x3d35, 0x3c0c, 0x3d3b, 0x3d3e, 0x0003, 0x0413, 0x0418, + 0x040e, 0x0001, 0x0410, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0415, + 0x0001, 0x0000, 0x04ef, 0x0001, 0x041a, 0x0001, 0x0000, 0x04ef, + // Entry 4ACC0 - 4ACFF + 0x0005, 0x0423, 0x0000, 0x0000, 0x0000, 0x0488, 0x0002, 0x0426, + 0x0457, 0x0003, 0x042a, 0x0439, 0x0448, 0x000d, 0x0000, 0xffff, + 0x05a2, 0x05aa, 0x05b3, 0x05bc, 0x05c3, 0x05cb, 0x05d2, 0x05d9, + 0x05e1, 0x05ec, 0x3c1a, 0x3c20, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0000, 0xffff, 0x05a2, 0x05aa, + 0x05b3, 0x05bc, 0x05c3, 0x05cb, 0x05d2, 0x05d9, 0x05e1, 0x05ec, + 0x3c1a, 0x3c20, 0x0003, 0x045b, 0x046a, 0x0479, 0x000d, 0x0000, + // Entry 4AD00 - 4AD3F + 0xffff, 0x05a2, 0x05aa, 0x05b3, 0x05bc, 0x05c3, 0x05cb, 0x05d2, + 0x05d9, 0x05e1, 0x05ec, 0x3c1a, 0x3c20, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0000, 0xffff, 0x05a2, + 0x05aa, 0x05b3, 0x05bc, 0x05c3, 0x05cb, 0x05d2, 0x05d9, 0x05e1, + 0x05ec, 0x3c1a, 0x3c20, 0x0003, 0x0491, 0x0496, 0x048c, 0x0001, + 0x048e, 0x0001, 0x0000, 0x0601, 0x0001, 0x0493, 0x0001, 0x0000, + 0x0601, 0x0001, 0x0498, 0x0001, 0x0000, 0x0601, 0x0005, 0x04a1, + // Entry 4AD40 - 4AD7F + 0x0000, 0x0000, 0x0000, 0x0506, 0x0002, 0x04a4, 0x04d5, 0x0003, + 0x04a8, 0x04b7, 0x04c6, 0x000d, 0x0000, 0xffff, 0x0606, 0x3b37, + 0x3b3c, 0x3b43, 0x061f, 0x0626, 0x3c29, 0x0633, 0x3b65, 0x063d, + 0x0643, 0x3c2e, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, + 0x3a0c, 0x000d, 0x0000, 0xffff, 0x0657, 0x3b82, 0x0666, 0x066f, + 0x0679, 0x0682, 0x3c38, 0x0692, 0x3bae, 0x06a3, 0x06ab, 0x06ba, + 0x0003, 0x04d9, 0x04e8, 0x04f7, 0x000d, 0x0000, 0xffff, 0x0606, + // Entry 4AD80 - 4ADBF + 0x3b37, 0x3b3c, 0x3b43, 0x061f, 0x0626, 0x3c29, 0x0633, 0x3b65, + 0x063d, 0x0643, 0x3c2e, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, + 0x3a09, 0x3a0c, 0x000d, 0x0000, 0xffff, 0x0657, 0x3b82, 0x0666, + 0x066f, 0x0679, 0x0682, 0x3c38, 0x0692, 0x3bae, 0x06a3, 0x06ab, + 0x06ba, 0x0003, 0x050f, 0x0514, 0x050a, 0x0001, 0x050c, 0x0001, + 0x0000, 0x06c8, 0x0001, 0x0511, 0x0001, 0x0000, 0x06c8, 0x0001, + 0x0516, 0x0001, 0x0000, 0x06c8, 0x0005, 0x051f, 0x0000, 0x0000, + // Entry 4ADC0 - 4ADFF + 0x0000, 0x0584, 0x0002, 0x0522, 0x0553, 0x0003, 0x0526, 0x0535, + 0x0544, 0x000d, 0x0000, 0xffff, 0x19c9, 0x19d3, 0x19df, 0x3c3e, + 0x19eb, 0x19f2, 0x3c42, 0x1a01, 0x1a06, 0x2575, 0x3c47, 0x3c4e, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, + 0x0000, 0xffff, 0x19c9, 0x19d3, 0x19df, 0x3c3e, 0x19eb, 0x19f2, + 0x3c42, 0x1a01, 0x1a06, 0x2575, 0x3c47, 0x3c4e, 0x0003, 0x0557, + 0x0566, 0x0575, 0x000d, 0x0000, 0xffff, 0x19c9, 0x19d3, 0x19df, + // Entry 4AE00 - 4AE3F + 0x3c3e, 0x19eb, 0x19f2, 0x3c42, 0x1a01, 0x1a06, 0x2575, 0x3c47, + 0x3c4e, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, + 0x000d, 0x0000, 0xffff, 0x19c9, 0x19d3, 0x19df, 0x3c3e, 0x19eb, + 0x19f2, 0x3c42, 0x1a01, 0x1a06, 0x2575, 0x3c47, 0x3c4e, 0x0003, + 0x058d, 0x0592, 0x0588, 0x0001, 0x058a, 0x0001, 0x0000, 0x1a1d, + 0x0001, 0x058f, 0x0001, 0x0000, 0x1a1d, 0x0001, 0x0594, 0x0001, + 0x0000, 0x1a1d, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x059d, + // Entry 4AE40 - 4AE7F + 0x0003, 0x05a7, 0x05ad, 0x05a1, 0x0001, 0x05a3, 0x0002, 0x0063, + 0x01e9, 0x01f1, 0x0001, 0x05a9, 0x0002, 0x0063, 0x01e9, 0x01f1, + 0x0001, 0x05af, 0x0002, 0x0063, 0x01e9, 0x01f1, 0x0042, 0x05f6, + 0x05fb, 0x0600, 0x0605, 0x0622, 0x063a, 0x0652, 0x066f, 0x068c, + 0x06a9, 0x06c6, 0x06de, 0x06f6, 0x0717, 0x0733, 0x074f, 0x0754, + 0x0759, 0x075e, 0x077d, 0x0795, 0x07ad, 0x07b2, 0x07b7, 0x07bc, + 0x07c1, 0x07c6, 0x07cb, 0x07d0, 0x07d5, 0x07da, 0x07f4, 0x080e, + 0x0828, 0x0842, 0x085c, 0x0876, 0x0890, 0x08aa, 0x08c4, 0x08de, + // Entry 4AE80 - 4AEBF + 0x08f8, 0x0912, 0x092c, 0x0946, 0x0960, 0x097a, 0x0994, 0x09ae, + 0x09c8, 0x09e2, 0x09fc, 0x0a01, 0x0a06, 0x0a0b, 0x0a27, 0x0a3f, + 0x0a57, 0x0a73, 0x0a8b, 0x0aa3, 0x0abf, 0x0ad7, 0x0aef, 0x0af4, + 0x0af9, 0x0001, 0x05f8, 0x0001, 0x0030, 0x00f7, 0x0001, 0x05fd, + 0x0001, 0x0030, 0x00f7, 0x0001, 0x0602, 0x0001, 0x0030, 0x00f7, + 0x0003, 0x0609, 0x060c, 0x0611, 0x0001, 0x0063, 0x0200, 0x0003, + 0x0063, 0x0205, 0x020a, 0x0210, 0x0002, 0x0614, 0x061b, 0x0005, + 0x0063, 0x0249, 0x021f, 0xffff, 0x022d, 0x023b, 0x0005, 0x0063, + // Entry 4AEC0 - 4AEFF + 0x0275, 0x0256, 0xffff, 0x0265, 0x0275, 0x0003, 0x0626, 0x0000, + 0x0629, 0x0001, 0x0063, 0x0200, 0x0002, 0x062c, 0x0633, 0x0005, + 0x0063, 0x0249, 0x021f, 0xffff, 0x022d, 0x023b, 0x0005, 0x0063, + 0x0275, 0x0256, 0xffff, 0x0265, 0x0275, 0x0003, 0x063e, 0x0000, + 0x0641, 0x0001, 0x0063, 0x0200, 0x0002, 0x0644, 0x064b, 0x0005, + 0x0063, 0x0249, 0x021f, 0xffff, 0x022d, 0x023b, 0x0005, 0x0063, + 0x0275, 0x0256, 0xffff, 0x0265, 0x0275, 0x0003, 0x0656, 0x0659, + 0x065e, 0x0001, 0x0063, 0x0283, 0x0003, 0x0063, 0x028f, 0x02a2, + // Entry 4AF00 - 4AF3F + 0x02b1, 0x0002, 0x0661, 0x0668, 0x0005, 0x0063, 0x0306, 0x02c7, + 0xffff, 0x02dc, 0x02f1, 0x0005, 0x0063, 0x0348, 0x031b, 0xffff, + 0x0331, 0x0348, 0x0003, 0x0673, 0x0676, 0x067b, 0x0001, 0x0063, + 0x035d, 0x0003, 0x0063, 0x028f, 0x02a2, 0x02b1, 0x0002, 0x067e, + 0x0685, 0x0005, 0x0063, 0x0366, 0x0366, 0xffff, 0x0366, 0x0366, + 0x0005, 0x0063, 0x0378, 0x0378, 0xffff, 0x0378, 0x0378, 0x0003, + 0x0690, 0x0693, 0x0698, 0x0001, 0x0063, 0x038a, 0x0003, 0x0063, + 0x028f, 0x02a2, 0x02b1, 0x0002, 0x069b, 0x06a2, 0x0005, 0x0063, + // Entry 4AF40 - 4AF7F + 0x0391, 0x0391, 0xffff, 0x0391, 0x0391, 0x0005, 0x0063, 0x03a1, + 0x03a1, 0xffff, 0x03a1, 0x03a1, 0x0003, 0x06ad, 0x06b0, 0x06b5, + 0x0001, 0x0063, 0x03b1, 0x0003, 0x0063, 0x03b7, 0x03c7, 0x03d0, + 0x0002, 0x06b8, 0x06bf, 0x0005, 0x0063, 0x040f, 0x03e0, 0xffff, + 0x03ef, 0x03ff, 0x0005, 0x0063, 0x0443, 0x0420, 0xffff, 0x0431, + 0x0443, 0x0003, 0x06ca, 0x0000, 0x06cd, 0x0001, 0x0062, 0x049b, + 0x0002, 0x06d0, 0x06d7, 0x0005, 0x0063, 0x0453, 0x0453, 0xffff, + 0x0453, 0x0453, 0x0005, 0x0062, 0x04d0, 0x04d0, 0xffff, 0x04d0, + // Entry 4AF80 - 4AFBF + 0x04d0, 0x0003, 0x06e2, 0x0000, 0x06e5, 0x0001, 0x0062, 0x049b, + 0x0002, 0x06e8, 0x06ef, 0x0005, 0x0063, 0x0453, 0x0453, 0xffff, + 0x0453, 0x0453, 0x0005, 0x0062, 0x04d0, 0x04d0, 0xffff, 0x04d0, + 0x04d0, 0x0004, 0x06fb, 0x06fe, 0x0703, 0x0714, 0x0001, 0x0063, + 0x0461, 0x0003, 0x0063, 0x0467, 0x0477, 0x0480, 0x0002, 0x0706, + 0x070d, 0x0005, 0x0063, 0x04bd, 0x0490, 0xffff, 0x049f, 0x04ae, + 0x0005, 0x0063, 0x04ee, 0x04cd, 0xffff, 0x04dd, 0x04ee, 0x0001, + 0x0063, 0x04fd, 0x0004, 0x071c, 0x0000, 0x071f, 0x0730, 0x0001, + // Entry 4AFC0 - 4AFFF + 0x0063, 0x0509, 0x0002, 0x0722, 0x0729, 0x0005, 0x0063, 0x050e, + 0x050e, 0xffff, 0x050e, 0x050e, 0x0005, 0x0063, 0x051c, 0x051c, + 0xffff, 0x051c, 0x051c, 0x0001, 0x0063, 0x04fd, 0x0004, 0x0738, + 0x0000, 0x073b, 0x074c, 0x0001, 0x0063, 0x0509, 0x0002, 0x073e, + 0x0745, 0x0005, 0x0063, 0x050e, 0x050e, 0xffff, 0x050e, 0x050e, + 0x0005, 0x0063, 0x051c, 0x051c, 0xffff, 0x051c, 0x051c, 0x0001, + 0x0063, 0x04fd, 0x0001, 0x0751, 0x0001, 0x0063, 0x052a, 0x0001, + 0x0756, 0x0001, 0x0063, 0x0537, 0x0001, 0x075b, 0x0001, 0x0063, + // Entry 4B000 - 4B03F + 0x052a, 0x0003, 0x0762, 0x0765, 0x076c, 0x0001, 0x000d, 0x0608, + 0x0005, 0x0063, 0x0555, 0x055d, 0x0563, 0x0543, 0x0569, 0x0002, + 0x076f, 0x0776, 0x0005, 0x0063, 0x0593, 0x0577, 0xffff, 0x0584, + 0x0593, 0x0005, 0x0063, 0x05c1, 0x05a0, 0xffff, 0x05b0, 0x05c1, + 0x0003, 0x0781, 0x0000, 0x0784, 0x0001, 0x000d, 0x0608, 0x0002, + 0x0787, 0x078e, 0x0005, 0x0063, 0x0593, 0x0577, 0xffff, 0x0584, + 0x0593, 0x0005, 0x0063, 0x05c1, 0x05a0, 0xffff, 0x05b0, 0x05c1, + 0x0003, 0x0799, 0x0000, 0x079c, 0x0001, 0x000d, 0x0608, 0x0002, + // Entry 4B040 - 4B07F + 0x079f, 0x07a6, 0x0005, 0x0063, 0x0593, 0x0577, 0xffff, 0x0584, + 0x0593, 0x0005, 0x0063, 0x05c1, 0x05a0, 0xffff, 0x05b0, 0x05c1, + 0x0001, 0x07af, 0x0001, 0x0063, 0x05d0, 0x0001, 0x07b4, 0x0001, + 0x0063, 0x05d0, 0x0001, 0x07b9, 0x0001, 0x0063, 0x05d0, 0x0001, + 0x07be, 0x0001, 0x0063, 0x05d9, 0x0001, 0x07c3, 0x0001, 0x0063, + 0x05d9, 0x0001, 0x07c8, 0x0001, 0x0063, 0x05d9, 0x0001, 0x07cd, + 0x0001, 0x0063, 0x05e5, 0x0001, 0x07d2, 0x0001, 0x0063, 0x05e5, + 0x0001, 0x07d7, 0x0001, 0x0063, 0x05f0, 0x0003, 0x0000, 0x07de, + // Entry 4B080 - 4B0BF + 0x07e3, 0x0003, 0x0063, 0x05fb, 0x060d, 0x0618, 0x0002, 0x07e6, + 0x07ed, 0x0005, 0x0063, 0x064c, 0x062a, 0xffff, 0x063b, 0x064c, + 0x0005, 0x0063, 0x0680, 0x065c, 0xffff, 0x066d, 0x0680, 0x0003, + 0x0000, 0x07f8, 0x07fd, 0x0003, 0x0063, 0x0693, 0x06a2, 0x06aa, + 0x0002, 0x0800, 0x0807, 0x0005, 0x0063, 0x064c, 0x062a, 0xffff, + 0x063b, 0x06b9, 0x0005, 0x0063, 0x0680, 0x065c, 0xffff, 0x066d, + 0x0680, 0x0003, 0x0000, 0x0812, 0x0817, 0x0003, 0x0063, 0x06ca, + 0x06a2, 0x06d7, 0x0002, 0x081a, 0x0821, 0x0005, 0x0063, 0x06e2, + // Entry 4B0C0 - 4B0FF + 0x06e2, 0xffff, 0x06e2, 0x06e2, 0x0005, 0x0062, 0x07d9, 0x07d9, + 0xffff, 0x07d9, 0x07d9, 0x0003, 0x0000, 0x082c, 0x0831, 0x0003, + 0x0063, 0x06f0, 0x0705, 0x0713, 0x0002, 0x0834, 0x083b, 0x0005, + 0x0063, 0x0764, 0x0728, 0xffff, 0x073c, 0x0750, 0x0005, 0x0063, + 0x07a4, 0x0779, 0xffff, 0x078e, 0x07a4, 0x0003, 0x0000, 0x0846, + 0x084b, 0x0003, 0x0063, 0x07b8, 0x07c7, 0x07cf, 0x0002, 0x084e, + 0x0855, 0x0005, 0x0063, 0x07de, 0x07de, 0xffff, 0x07de, 0x07de, + 0x0005, 0x0063, 0x07ec, 0x07ec, 0xffff, 0x07ec, 0x07ec, 0x0003, + // Entry 4B100 - 4B13F + 0x0000, 0x0860, 0x0865, 0x0003, 0x0063, 0x07fa, 0x07c7, 0x0807, + 0x0002, 0x0868, 0x086f, 0x0005, 0x0063, 0x0764, 0x0728, 0xffff, + 0x073c, 0x0750, 0x0005, 0x0063, 0x07a4, 0x0779, 0xffff, 0x078e, + 0x07a4, 0x0003, 0x0000, 0x087a, 0x087f, 0x0003, 0x0063, 0x0812, + 0x0822, 0x082b, 0x0002, 0x0882, 0x0889, 0x0005, 0x0063, 0x0868, + 0x083b, 0xffff, 0x084a, 0x0859, 0x0005, 0x0063, 0x0899, 0x0878, + 0xffff, 0x0888, 0x0899, 0x0003, 0x0000, 0x0894, 0x0899, 0x0003, + 0x0063, 0x08a8, 0x08b7, 0x08bf, 0x0002, 0x089c, 0x08a3, 0x0005, + // Entry 4B140 - 4B17F + 0x0063, 0x08ce, 0x08ce, 0xffff, 0x08ce, 0x08ce, 0x0005, 0x0063, + 0x08dc, 0x08dc, 0xffff, 0x08dc, 0x08dc, 0x0003, 0x0000, 0x08ae, + 0x08b3, 0x0003, 0x0063, 0x08ea, 0x08b7, 0x08f7, 0x0002, 0x08b6, + 0x08bd, 0x0005, 0x0063, 0x0868, 0x083b, 0xffff, 0x084a, 0x0859, + 0x0005, 0x0063, 0x0899, 0x0878, 0xffff, 0x0888, 0x0899, 0x0003, + 0x0000, 0x08c8, 0x08cd, 0x0003, 0x0063, 0x0902, 0x0912, 0x091b, + 0x0002, 0x08d0, 0x08d7, 0x0005, 0x0063, 0x0958, 0x092b, 0xffff, + 0x093a, 0x0949, 0x0005, 0x0063, 0x0986, 0x0966, 0xffff, 0x0975, + // Entry 4B180 - 4B1BF + 0x0986, 0x0003, 0x0000, 0x08e2, 0x08e7, 0x0003, 0x0063, 0x0997, + 0x09a6, 0x09ae, 0x0002, 0x08ea, 0x08f1, 0x0005, 0x0063, 0x09bd, + 0x09bd, 0xffff, 0x09bd, 0x09bd, 0x0005, 0x0063, 0x09cb, 0x09cb, + 0xffff, 0x09cb, 0x09cb, 0x0003, 0x0000, 0x08fc, 0x0901, 0x0003, + 0x0063, 0x09d9, 0x09a6, 0x09e6, 0x0002, 0x0904, 0x090b, 0x0005, + 0x0063, 0x09bd, 0x09bd, 0xffff, 0x09bd, 0x09bd, 0x0005, 0x0063, + 0x09cb, 0x09cb, 0xffff, 0x09cb, 0x09cb, 0x0003, 0x0000, 0x0916, + 0x091b, 0x0003, 0x0063, 0x09f1, 0x0a04, 0x0a10, 0x0002, 0x091e, + // Entry 4B1C0 - 4B1FF + 0x0925, 0x0005, 0x0063, 0x0a59, 0x0a23, 0xffff, 0x0a35, 0x0a47, + 0x0005, 0x0063, 0x0a93, 0x0a6c, 0xffff, 0x0a7f, 0x0a93, 0x0003, + 0x0000, 0x0930, 0x0935, 0x0003, 0x0063, 0x0aa5, 0x0ab5, 0x0abe, + 0x0002, 0x0938, 0x093f, 0x0005, 0x0063, 0x0ace, 0x0ace, 0xffff, + 0x0ace, 0x0ace, 0x0005, 0x0063, 0x0add, 0x0add, 0xffff, 0x0add, + 0x0add, 0x0003, 0x0000, 0x094a, 0x094f, 0x0003, 0x0063, 0x0aec, + 0x0ab5, 0x0afa, 0x0002, 0x0952, 0x0959, 0x0005, 0x0063, 0x0ace, + 0x0ace, 0xffff, 0x0ace, 0x0a47, 0x0005, 0x0063, 0x0a93, 0x0add, + // Entry 4B200 - 4B23F + 0xffff, 0x0a7f, 0x0a93, 0x0003, 0x0000, 0x0964, 0x0969, 0x0003, + 0x0063, 0x0b06, 0x0b16, 0x0b1f, 0x0002, 0x096c, 0x0973, 0x0005, + 0x0063, 0x0b5c, 0x0b2f, 0xffff, 0x0b3e, 0x0b4d, 0x0005, 0x0063, + 0x0b8d, 0x0b6c, 0xffff, 0x0b7c, 0x0b8d, 0x0003, 0x0000, 0x097e, + 0x0983, 0x0003, 0x0063, 0x0b9c, 0x0bab, 0x0bb3, 0x0002, 0x0986, + 0x098d, 0x0005, 0x0063, 0x0bc2, 0x0bc2, 0xffff, 0x0bc2, 0x0bc2, + 0x0005, 0x0063, 0x0bd0, 0x0bd0, 0xffff, 0x0bd0, 0x0bd0, 0x0003, + 0x0000, 0x0998, 0x099d, 0x0003, 0x0063, 0x0bde, 0x0bab, 0x0beb, + // Entry 4B240 - 4B27F + 0x0002, 0x09a0, 0x09a7, 0x0005, 0x0063, 0x0bc2, 0x0bc2, 0xffff, + 0x0bc2, 0x0bc2, 0x0005, 0x0063, 0x0bd0, 0x0bd0, 0xffff, 0x0bd0, + 0x0bd0, 0x0003, 0x0000, 0x09b2, 0x09b7, 0x0003, 0x0063, 0x0bf6, + 0x0c07, 0x0c11, 0x0002, 0x09ba, 0x09c1, 0x0005, 0x0063, 0x0c52, + 0x0c22, 0xffff, 0x0c32, 0x0c42, 0x0005, 0x0063, 0x0c83, 0x0c61, + 0xffff, 0x0c71, 0x0c83, 0x0003, 0x0000, 0x09cc, 0x09d1, 0x0003, + 0x0063, 0x0c95, 0x0ca4, 0x0cac, 0x0002, 0x09d4, 0x09db, 0x0005, + 0x0063, 0x0cbb, 0x0cbb, 0xffff, 0x0cbb, 0x0cbb, 0x0005, 0x0063, + // Entry 4B280 - 4B2BF + 0x0cc9, 0x0cc9, 0xffff, 0x0cc9, 0x0cc9, 0x0003, 0x0000, 0x09e6, + 0x09eb, 0x0003, 0x0063, 0x0cd7, 0x0ca4, 0x0ce4, 0x0002, 0x09ee, + 0x09f5, 0x0005, 0x0063, 0x0c52, 0x0cbb, 0xffff, 0x0c32, 0x0c42, + 0x0005, 0x0063, 0x0c83, 0x0cc9, 0xffff, 0x0c71, 0x0c83, 0x0001, + 0x09fe, 0x0001, 0x0063, 0x0cef, 0x0001, 0x0a03, 0x0001, 0x0063, + 0x0cef, 0x0001, 0x0a08, 0x0001, 0x0063, 0x0cef, 0x0003, 0x0a0f, + 0x0a12, 0x0a16, 0x0001, 0x005a, 0x01e3, 0x0002, 0x0063, 0xffff, + 0x0cf7, 0x0002, 0x0a19, 0x0a20, 0x0005, 0x0063, 0x0d28, 0x0d01, + // Entry 4B2C0 - 4B2FF + 0xffff, 0x0d0e, 0x0d1b, 0x0005, 0x0063, 0x0d50, 0x0d34, 0xffff, + 0x0d41, 0x0d50, 0x0003, 0x0a2b, 0x0000, 0x0a2e, 0x0001, 0x005a, + 0x01e3, 0x0002, 0x0a31, 0x0a38, 0x0005, 0x0063, 0x0d28, 0x0d01, + 0xffff, 0x0d0e, 0x0d1b, 0x0005, 0x0063, 0x0d50, 0x0d34, 0xffff, + 0x0d41, 0x0d50, 0x0003, 0x0a43, 0x0000, 0x0a46, 0x0001, 0x0000, + 0x213b, 0x0002, 0x0a49, 0x0a50, 0x0005, 0x0063, 0x0d5f, 0x0d5f, + 0xffff, 0x0d5f, 0x0d5f, 0x0005, 0x0062, 0x0e1e, 0x0e1e, 0xffff, + 0x0e1e, 0x0e1e, 0x0003, 0x0a5b, 0x0a5e, 0x0a62, 0x0001, 0x000d, + // Entry 4B300 - 4B33F + 0x0c85, 0x0002, 0x0063, 0xffff, 0x0d6a, 0x0002, 0x0a65, 0x0a6c, + 0x0005, 0x0063, 0x0da4, 0x0d74, 0xffff, 0x0d84, 0x0d94, 0x0005, + 0x0063, 0x0dd5, 0x0db3, 0xffff, 0x0dc3, 0x0dd5, 0x0003, 0x0a77, + 0x0000, 0x0a7a, 0x0001, 0x0001, 0x07c5, 0x0002, 0x0a7d, 0x0a84, + 0x0005, 0x0063, 0x0de7, 0x0de7, 0xffff, 0x0de7, 0x0de7, 0x0005, + 0x0063, 0x0df5, 0x0df5, 0xffff, 0x0df5, 0x0df5, 0x0003, 0x0a8f, + 0x0000, 0x0a92, 0x0001, 0x0043, 0x092f, 0x0002, 0x0a95, 0x0a9c, + 0x0005, 0x0063, 0x0e03, 0x0e03, 0xffff, 0x0e03, 0x0e03, 0x0005, + // Entry 4B340 - 4B37F + 0x0062, 0x0eaa, 0x0eaa, 0xffff, 0x0eaa, 0x0eaa, 0x0003, 0x0aa7, + 0x0aaa, 0x0aae, 0x0001, 0x000d, 0x0d0f, 0x0002, 0x0063, 0xffff, + 0x0e10, 0x0002, 0x0ab1, 0x0ab8, 0x0005, 0x0063, 0x0e48, 0x0e15, + 0xffff, 0x0e26, 0x0e37, 0x0005, 0x0063, 0x0e7c, 0x0e58, 0xffff, + 0x0e69, 0x0e7c, 0x0003, 0x0ac3, 0x0000, 0x0ac6, 0x0001, 0x0001, + 0x083e, 0x0002, 0x0ac9, 0x0ad0, 0x0005, 0x0063, 0x0e8f, 0x0e8f, + 0xffff, 0x0e8f, 0x0e8f, 0x0005, 0x0062, 0x0f1f, 0x0f1f, 0xffff, + 0x0f1f, 0x0f1f, 0x0003, 0x0adb, 0x0000, 0x0ade, 0x0001, 0x0000, + // Entry 4B380 - 4B3BF + 0x2002, 0x0002, 0x0ae1, 0x0ae8, 0x0005, 0x0063, 0x0e8f, 0x0e8f, + 0xffff, 0x0e8f, 0x0e8f, 0x0005, 0x0062, 0x0f1f, 0x0f1f, 0xffff, + 0x0f1f, 0x0f1f, 0x0001, 0x0af1, 0x0001, 0x0063, 0x0e9a, 0x0001, + 0x0af6, 0x0001, 0x0063, 0x0e9a, 0x0001, 0x0afb, 0x0001, 0x0063, + 0x0e9a, 0x0004, 0x0b03, 0x0b08, 0x0b0d, 0x0b1c, 0x0003, 0x0008, + 0x1dbe, 0x4fe4, 0x4feb, 0x0003, 0x0063, 0x0ea7, 0x0eb0, 0x0ec1, + 0x0002, 0x0000, 0x0b10, 0x0003, 0x0000, 0x0b17, 0x0b14, 0x0001, + 0x0063, 0x0ed5, 0x0003, 0x0063, 0xffff, 0x0ef3, 0x0f0a, 0x0002, + // Entry 4B3C0 - 4B3FF + 0x0000, 0x0b1f, 0x0003, 0x0bb9, 0x0c4f, 0x0b23, 0x0094, 0x0063, + 0x0f20, 0x0f33, 0x0f4a, 0x0f5f, 0x0f88, 0x0fd3, 0x1011, 0x1051, + 0x108f, 0x10c8, 0x1103, 0x1145, 0x1181, 0x11b7, 0x11f5, 0x1243, + 0x1296, 0x12d4, 0x131f, 0x1388, 0x13f7, 0x1452, 0x14aa, 0x14f4, + 0x1533, 0x156a, 0x1578, 0x1597, 0x15c8, 0x15e7, 0x161a, 0x1643, + 0x1681, 0x16bc, 0x16fe, 0x1737, 0x174d, 0x1773, 0x17bc, 0x180c, + 0x183b, 0x1847, 0x1860, 0x188d, 0x18d0, 0x18f5, 0x1947, 0x1984, + 0x19b6, 0x1a0d, 0x1a64, 0x1a97, 0x1aaf, 0x1ad5, 0x1ae5, 0x1b04, + // Entry 4B400 - 4B43F + 0x1b35, 0x1b4c, 0x1b7d, 0x1bd8, 0x1c1b, 0x1c34, 0x1c5a, 0x1cac, + 0x1cee, 0x1d1b, 0x1d34, 0x1d4a, 0x1d5c, 0x1d77, 0x1d91, 0x1db8, + 0x1df3, 0x1e31, 0x1e70, 0x1ebd, 0x1f0c, 0x1f26, 0x1f4e, 0x1f7d, + 0x1f9f, 0x1fd6, 0x1fea, 0x2016, 0x2053, 0x2075, 0x20a8, 0x20b8, + 0x20c7, 0x20dc, 0x2105, 0x213a, 0x2165, 0x21c9, 0x2220, 0x2266, + 0x2297, 0x22a7, 0x22b6, 0x22da, 0x232c, 0x237a, 0x23b7, 0x23c5, + 0x23f7, 0x2452, 0x2494, 0x24ce, 0x2503, 0x2511, 0x2531, 0x2574, + 0x25b3, 0x25e6, 0x261a, 0x266b, 0x267c, 0x268a, 0x269c, 0x26ac, + // Entry 4B440 - 4B47F + 0x26cb, 0x270c, 0x274a, 0x277b, 0x278b, 0x27a7, 0x27be, 0x27d4, + 0x27e4, 0x27f0, 0x280f, 0x2840, 0x2855, 0x2874, 0x28a5, 0x28cb, + 0x2908, 0x2928, 0x296e, 0x29b8, 0x29ed, 0x2a12, 0x2a5f, 0x2a96, + 0x2aa5, 0x2ab5, 0x2ada, 0x2b1f, 0x0094, 0x0063, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0f73, 0x0fc5, 0x1002, 0x1042, 0x1082, 0x10bc, + 0x10f3, 0x1136, 0x1176, 0x11aa, 0x11e4, 0x122a, 0x1288, 0x12c5, + 0x1305, 0x1366, 0x13df, 0x143a, 0x1495, 0x14e7, 0x1521, 0xffff, + 0xffff, 0x1588, 0xffff, 0x15d7, 0xffff, 0x1634, 0x1674, 0x16ae, + // Entry 4B480 - 4B4BF + 0x16eb, 0xffff, 0xffff, 0x1762, 0x17a8, 0x17fe, 0xffff, 0xffff, + 0xffff, 0x1875, 0xffff, 0x18e0, 0x1932, 0xffff, 0x19a1, 0x19f3, + 0x1a54, 0xffff, 0xffff, 0xffff, 0xffff, 0x1af5, 0xffff, 0xffff, + 0x1b65, 0x1bc0, 0xffff, 0xffff, 0x1c43, 0x1c9b, 0x1ce1, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1dab, 0x1de5, 0x1e22, + 0x1e62, 0x1e9f, 0xffff, 0xffff, 0x1f40, 0xffff, 0x1f8d, 0xffff, + 0xffff, 0x2001, 0xffff, 0x2065, 0xffff, 0xffff, 0xffff, 0xffff, + 0x20f4, 0xffff, 0x2149, 0x21b0, 0x220e, 0x2257, 0xffff, 0xffff, + // Entry 4B4C0 - 4B4FF + 0xffff, 0x22c4, 0x2319, 0x2365, 0xffff, 0xffff, 0x23dc, 0x2440, + 0x2489, 0x24bd, 0xffff, 0xffff, 0x2520, 0x2566, 0x25a3, 0xffff, + 0x25fb, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x26bb, 0x26fe, + 0x273b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2800, 0xffff, 0xffff, 0x2865, 0xffff, 0x28b6, 0xffff, 0x2918, + 0x295b, 0x29a7, 0xffff, 0x29fe, 0x2a4d, 0xffff, 0xffff, 0xffff, + 0x2acc, 0x2b09, 0x0094, 0x0063, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0fa8, 0x0fec, 0x102b, 0x106b, 0x10a7, 0x10df, 0x111e, 0x115f, + // Entry 4B500 - 4B53F + 0x1197, 0x11cf, 0x1211, 0x1267, 0x12af, 0x12ee, 0x1344, 0x13b5, + 0x141a, 0x1475, 0x14ca, 0x150c, 0x1550, 0xffff, 0xffff, 0x15b1, + 0xffff, 0x1602, 0xffff, 0x165d, 0x1699, 0x16d5, 0x171c, 0xffff, + 0xffff, 0x178f, 0x17db, 0x1825, 0xffff, 0xffff, 0xffff, 0x18b0, + 0xffff, 0x1915, 0x1967, 0xffff, 0x19d6, 0x1a32, 0x1a7f, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1b1e, 0xffff, 0xffff, 0x1ba0, 0x1bfb, + 0xffff, 0xffff, 0x1c7c, 0x1cc8, 0x1d06, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1dd0, 0x1e0c, 0x1e4b, 0x1e89, 0x1ee6, + // Entry 4B540 - 4B57F + 0xffff, 0xffff, 0x1f67, 0xffff, 0x1fbc, 0xffff, 0xffff, 0x2036, + 0xffff, 0x2090, 0xffff, 0xffff, 0xffff, 0xffff, 0x2121, 0xffff, + 0x218c, 0x21ed, 0x223d, 0x2280, 0xffff, 0xffff, 0xffff, 0x22fb, + 0x234a, 0x239a, 0xffff, 0xffff, 0x241d, 0x246f, 0x24aa, 0x24ea, + 0xffff, 0xffff, 0x254d, 0x258d, 0x25ce, 0xffff, 0x2644, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x26e6, 0x2725, 0x2764, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2829, 0xffff, + 0xffff, 0x288e, 0xffff, 0x28eb, 0xffff, 0x2943, 0x298c, 0x29d4, + // Entry 4B580 - 4B5BF + 0xffff, 0x2a31, 0x2a7c, 0xffff, 0xffff, 0xffff, 0x2af3, 0x2b40, + 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000b, 0x0036, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0014, 0x0000, 0x0025, 0x0004, 0x0022, 0x001c, 0x0019, + 0x001f, 0x0001, 0x0064, 0x0000, 0x0001, 0x0064, 0x0011, 0x0001, + 0x0008, 0x0627, 0x0001, 0x0008, 0x062f, 0x0004, 0x0033, 0x002d, + 0x002a, 0x0030, 0x0001, 0x0064, 0x001d, 0x0001, 0x0064, 0x001d, + 0x0001, 0x0064, 0x001d, 0x0001, 0x0000, 0x03c6, 0x0008, 0x003f, + // Entry 4B5C0 - 4B5FF + 0x00a4, 0x00fb, 0x0130, 0x0171, 0x018b, 0x019c, 0x01ad, 0x0002, + 0x0042, 0x0073, 0x0003, 0x0046, 0x0055, 0x0064, 0x000d, 0x0064, + 0xffff, 0x002b, 0x0031, 0x0038, 0x0041, 0x004a, 0x0050, 0x0055, + 0x005c, 0x0062, 0x006b, 0x0074, 0x007c, 0x000d, 0x0018, 0xffff, + 0x2a0d, 0x2a1b, 0x2a25, 0x2a28, 0x2a2a, 0x2a1b, 0x2a1d, 0x2a21, + 0x2a2c, 0x2a2f, 0x2a1d, 0x2a31, 0x000d, 0x0064, 0xffff, 0x0084, + 0x0096, 0x00a4, 0x00b4, 0x00c4, 0x00d1, 0x00dd, 0x00eb, 0x00f8, + 0x0108, 0x0118, 0x0127, 0x0003, 0x0077, 0x0086, 0x0095, 0x000d, + // Entry 4B600 - 4B63F + 0x0064, 0xffff, 0x002b, 0x0031, 0x0038, 0x0041, 0x004a, 0x0050, + 0x0055, 0x005c, 0x0062, 0x006b, 0x0074, 0x007c, 0x000d, 0x0018, + 0xffff, 0x2a0d, 0x2a1b, 0x2a25, 0x2a28, 0x2a2a, 0x2a1b, 0x2a1d, + 0x2a21, 0x2a2c, 0x2a2f, 0x2a1d, 0x2a31, 0x000d, 0x0064, 0xffff, + 0x0084, 0x0096, 0x00a4, 0x00b4, 0x00c4, 0x00d1, 0x00dd, 0x00eb, + 0x00f8, 0x0108, 0x0118, 0x0127, 0x0002, 0x00a7, 0x00d1, 0x0005, + 0x00ad, 0x00b6, 0x00c8, 0x0000, 0x00bf, 0x0007, 0x0064, 0x0136, + 0x013a, 0x013e, 0x0142, 0x0146, 0x014a, 0x014f, 0x0007, 0x0000, + // Entry 4B640 - 4B67F + 0x21e4, 0x3d43, 0x3d45, 0x3d47, 0x3d49, 0x3d43, 0x3d4b, 0x0007, + 0x0064, 0x0154, 0x0157, 0x015a, 0x015d, 0x0160, 0x0163, 0x0167, + 0x0007, 0x0064, 0x016b, 0x0176, 0x0182, 0x018e, 0x0196, 0x01a1, + 0x01af, 0x0005, 0x00d7, 0x00e0, 0x00f2, 0x0000, 0x00e9, 0x0007, + 0x0064, 0x0136, 0x013a, 0x013e, 0x0142, 0x0146, 0x014a, 0x014f, + 0x0007, 0x0018, 0x2a1d, 0x2a33, 0x2a35, 0x2a37, 0x2a35, 0x2a07, + 0x2a1d, 0x0007, 0x0064, 0x0154, 0x0157, 0x015a, 0x015d, 0x0160, + 0x0163, 0x0167, 0x0007, 0x0064, 0x01b9, 0x01c3, 0x01ce, 0x01d9, + // Entry 4B680 - 4B6BF + 0x01e2, 0x01ee, 0x01fb, 0x0002, 0x00fe, 0x0117, 0x0003, 0x0102, + 0x0109, 0x0110, 0x0005, 0x0064, 0xffff, 0x0206, 0x0211, 0x021c, + 0x0227, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x0005, 0x0064, 0xffff, 0x0232, 0x0242, 0x0252, 0x0262, 0x0003, + 0x011b, 0x0122, 0x0129, 0x0005, 0x0064, 0xffff, 0x0206, 0x0211, + 0x021c, 0x0227, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x0005, 0x0064, 0xffff, 0x0232, 0x0242, 0x0252, 0x0262, + 0x0002, 0x0133, 0x0152, 0x0003, 0x0137, 0x0140, 0x0149, 0x0002, + // Entry 4B6C0 - 4B6FF + 0x013a, 0x013d, 0x0001, 0x0022, 0x08ba, 0x0001, 0x0064, 0x0272, + 0x0002, 0x0143, 0x0146, 0x0001, 0x0022, 0x08ba, 0x0001, 0x0064, + 0x0272, 0x0002, 0x014c, 0x014f, 0x0001, 0x0022, 0x08ba, 0x0001, + 0x0064, 0x0272, 0x0003, 0x0156, 0x015f, 0x0168, 0x0002, 0x0159, + 0x015c, 0x0001, 0x0022, 0x08ba, 0x0001, 0x0064, 0x0272, 0x0002, + 0x0162, 0x0165, 0x0001, 0x0022, 0x08ba, 0x0001, 0x0064, 0x0272, + 0x0002, 0x016b, 0x016e, 0x0001, 0x0022, 0x08ba, 0x0001, 0x0064, + 0x0272, 0x0003, 0x0180, 0x0000, 0x0175, 0x0002, 0x0178, 0x017c, + // Entry 4B700 - 4B73F + 0x0002, 0x0064, 0x0276, 0x02ac, 0x0002, 0x0064, 0x028d, 0x02c3, + 0x0002, 0x0183, 0x0187, 0x0002, 0x005f, 0x0699, 0x06a5, 0x0002, + 0x0064, 0x02e2, 0x02e9, 0x0004, 0x0199, 0x0193, 0x0190, 0x0196, + 0x0001, 0x0064, 0x02f0, 0x0001, 0x0064, 0x0300, 0x0001, 0x0064, + 0x030a, 0x0001, 0x0018, 0x042e, 0x0004, 0x01aa, 0x01a4, 0x01a1, + 0x01a7, 0x0001, 0x001d, 0x0547, 0x0001, 0x001d, 0x0554, 0x0001, + 0x001d, 0x055e, 0x0001, 0x001d, 0x0566, 0x0004, 0x01bb, 0x01b5, + 0x01b2, 0x01b8, 0x0001, 0x0064, 0x001d, 0x0001, 0x0064, 0x001d, + // Entry 4B740 - 4B77F + 0x0001, 0x0064, 0x001d, 0x0001, 0x0000, 0x03c6, 0x0002, 0x0003, + 0x01ba, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000c, 0x0037, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0015, 0x0000, 0x0026, 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, + 0x0001, 0x0006, 0x000d, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, + 0x001b, 0x0001, 0x0002, 0x0587, 0x0004, 0x0034, 0x002e, 0x002b, + 0x0031, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x0040, 0x00a5, + // Entry 4B780 - 4B7BF + 0x00fc, 0x0131, 0x0172, 0x0187, 0x0198, 0x01a9, 0x0002, 0x0043, + 0x0074, 0x0003, 0x0047, 0x0056, 0x0065, 0x000d, 0x0064, 0xffff, + 0x0313, 0x0317, 0x031b, 0x031f, 0x0323, 0x0327, 0x032b, 0x032f, + 0x0333, 0x0337, 0x033b, 0x033f, 0x000d, 0x0018, 0xffff, 0x2a13, + 0x2a39, 0x2a39, 0x2a39, 0x2a28, 0x2a28, 0x2a28, 0x2a13, 0x2a3b, + 0x2a3b, 0x2a33, 0x2a3d, 0x000d, 0x0064, 0xffff, 0x0343, 0x0349, + 0x0351, 0x0358, 0x0361, 0x036a, 0x0372, 0x037d, 0x0389, 0x0391, + 0x039a, 0x03a1, 0x0003, 0x0078, 0x0087, 0x0096, 0x000d, 0x0064, + // Entry 4B7C0 - 4B7FF + 0xffff, 0x0313, 0x0317, 0x031b, 0x031f, 0x0323, 0x0327, 0x032b, + 0x032f, 0x0333, 0x0337, 0x033b, 0x033f, 0x000d, 0x0018, 0xffff, + 0x2a13, 0x2a39, 0x2a39, 0x2a39, 0x2a28, 0x2a28, 0x2a28, 0x2a13, + 0x2a3b, 0x2a3b, 0x2a33, 0x2a3d, 0x000d, 0x0064, 0xffff, 0x0343, + 0x0349, 0x0351, 0x0358, 0x0361, 0x036a, 0x0372, 0x037d, 0x0389, + 0x0391, 0x039a, 0x03a1, 0x0002, 0x00a8, 0x00d2, 0x0005, 0x00ae, + 0x00b7, 0x00c9, 0x0000, 0x00c0, 0x0007, 0x0064, 0x03a7, 0x03ab, + 0x03af, 0x03b3, 0x03b7, 0x03bb, 0x03bf, 0x0007, 0x0018, 0x2a1d, + // Entry 4B800 - 4B83F + 0x2a33, 0x2a28, 0x2a28, 0x2a28, 0x2a28, 0x2a33, 0x0007, 0x0046, + 0x079c, 0x3411, 0x3414, 0x3417, 0x341a, 0x341d, 0x3420, 0x0007, + 0x0064, 0x03c3, 0x03ca, 0x03d2, 0x03da, 0x03e2, 0x03e8, 0x03f1, + 0x0005, 0x00d8, 0x00e1, 0x00f3, 0x0000, 0x00ea, 0x0007, 0x0064, + 0x03a7, 0x03ab, 0x03af, 0x03b3, 0x03b7, 0x03bb, 0x03bf, 0x0007, + 0x0018, 0x2a1d, 0x2a33, 0x2a28, 0x2a28, 0x2a28, 0x2a28, 0x2a33, + 0x0007, 0x0046, 0x079c, 0x3411, 0x3414, 0x3417, 0x341a, 0x341d, + 0x3420, 0x0007, 0x0064, 0x03c3, 0x03ca, 0x03d2, 0x03da, 0x03e2, + // Entry 4B840 - 4B87F + 0x03e8, 0x03f1, 0x0002, 0x00ff, 0x0118, 0x0003, 0x0103, 0x010a, + 0x0111, 0x0005, 0x0000, 0xffff, 0x1f17, 0x1f1a, 0x1f1d, 0x1f20, + 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, + 0x0050, 0xffff, 0x00d6, 0x00dd, 0x00e4, 0x00eb, 0x0003, 0x011c, + 0x0123, 0x012a, 0x0005, 0x0000, 0xffff, 0x1f17, 0x1f1a, 0x1f1d, + 0x1f20, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x0005, 0x0050, 0xffff, 0x00d6, 0x00dd, 0x00e4, 0x00eb, 0x0002, + 0x0134, 0x0153, 0x0003, 0x0138, 0x0141, 0x014a, 0x0002, 0x013b, + // Entry 4B880 - 4B8BF + 0x013e, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0002, + 0x0144, 0x0147, 0x0001, 0x0000, 0x1f9c, 0x0001, 0x0000, 0x21e4, + 0x0002, 0x014d, 0x0150, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, + 0x04f2, 0x0003, 0x0157, 0x0160, 0x0169, 0x0002, 0x015a, 0x015d, + 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0002, 0x0163, + 0x0166, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0002, + 0x016c, 0x016f, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, + 0x0003, 0x017c, 0x0000, 0x0176, 0x0001, 0x0178, 0x0002, 0x0064, + // Entry 4B8C0 - 4B8FF + 0x03fa, 0x040c, 0x0002, 0x017f, 0x0183, 0x0002, 0x0009, 0x0078, + 0x585d, 0x0002, 0x0000, 0x04f5, 0x3c5a, 0x0004, 0x0195, 0x018f, + 0x018c, 0x0192, 0x0001, 0x0000, 0x04fc, 0x0001, 0x0000, 0x050b, + 0x0001, 0x0000, 0x0514, 0x0001, 0x0000, 0x051c, 0x0004, 0x01a6, + 0x01a0, 0x019d, 0x01a3, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, + 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, + 0x01b7, 0x01b1, 0x01ae, 0x01b4, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + // Entry 4B900 - 4B93F + 0x0040, 0x01fb, 0x0000, 0x0000, 0x0200, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0205, 0x0000, 0x0000, 0x020a, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x020f, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x021a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x021f, + 0x0000, 0x0000, 0x0224, 0x0000, 0x0000, 0x0229, 0x0000, 0x0000, + // Entry 4B940 - 4B97F + 0x022e, 0x0001, 0x01fd, 0x0001, 0x0064, 0x0420, 0x0001, 0x0202, + 0x0001, 0x0064, 0x0427, 0x0001, 0x0207, 0x0001, 0x0009, 0x02be, + 0x0001, 0x020c, 0x0001, 0x0064, 0x042c, 0x0002, 0x0212, 0x0215, + 0x0001, 0x0064, 0x0432, 0x0003, 0x0064, 0x0437, 0x043e, 0x0444, + 0x0001, 0x021c, 0x0001, 0x0064, 0x044d, 0x0001, 0x0221, 0x0001, + 0x002b, 0x194b, 0x0001, 0x0226, 0x0001, 0x0009, 0x00b3, 0x0001, + 0x022b, 0x0001, 0x0009, 0x00ba, 0x0001, 0x0230, 0x0001, 0x0064, + 0x045a, 0x0003, 0x0004, 0x0155, 0x035e, 0x0008, 0x0000, 0x0000, + // Entry 4B980 - 4B9BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0027, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, 0x0000, 0x0004, + 0x0024, 0x001e, 0x001b, 0x0021, 0x0001, 0x0064, 0x0460, 0x0001, + 0x0000, 0x1e0b, 0x0001, 0x001d, 0x04f7, 0x0001, 0x001d, 0x17a0, + 0x0008, 0x0030, 0x0076, 0x00c4, 0x00eb, 0x0123, 0x0133, 0x0144, + 0x0000, 0x0002, 0x0033, 0x0064, 0x0003, 0x0037, 0x0046, 0x0055, + 0x000d, 0x0064, 0xffff, 0x0473, 0x0477, 0x047b, 0x047f, 0x0483, + 0x0487, 0x048b, 0x048f, 0x0493, 0x0497, 0x049b, 0x049f, 0x000d, + // Entry 4B9C0 - 4B9FF + 0x0018, 0xffff, 0x2a39, 0x2a3f, 0x2a1d, 0x2a0b, 0x2a1d, 0x2a3f, + 0x2a35, 0x2a1d, 0x2a1d, 0x2a35, 0x2a39, 0x2a3f, 0x000d, 0x0064, + 0xffff, 0x04a3, 0x04b1, 0x04be, 0x04ce, 0x04db, 0x04e9, 0x04f6, + 0x0505, 0x0515, 0x0525, 0x0533, 0x0549, 0x0002, 0x0000, 0x0067, + 0x000d, 0x0018, 0xffff, 0x2a39, 0x2a3f, 0x2a1d, 0x2a0b, 0x2a1d, + 0x2a3f, 0x2a35, 0x2a1d, 0x2a1d, 0x2a35, 0x2a39, 0x2a3f, 0x0002, + 0x0079, 0x00a3, 0x0005, 0x007f, 0x0088, 0x009a, 0x0000, 0x0091, + 0x0007, 0x0064, 0x0560, 0x0564, 0x0568, 0x056c, 0x0570, 0x0574, + // Entry 4BA00 - 4BA3F + 0x0578, 0x0007, 0x0018, 0x2a0b, 0x2a41, 0x2a35, 0x2a0b, 0x2a43, + 0x2a31, 0x2a1d, 0x0007, 0x0064, 0x0560, 0x0564, 0x0568, 0x056c, + 0x0570, 0x0574, 0x0578, 0x0007, 0x0064, 0x057c, 0x0581, 0x0588, + 0x0590, 0x0597, 0x059f, 0x05a5, 0x0005, 0x0000, 0x00a9, 0x00bb, + 0x0000, 0x00b2, 0x0007, 0x0018, 0x2a0b, 0x2a41, 0x2a35, 0x2a0b, + 0x2a43, 0x2a31, 0x2a1d, 0x0007, 0x0064, 0x0560, 0x0564, 0x0568, + 0x056c, 0x0570, 0x0574, 0x0578, 0x0007, 0x0064, 0x057c, 0x0581, + 0x0588, 0x0590, 0x0597, 0x059f, 0x05a5, 0x0002, 0x00c7, 0x00e0, + // Entry 4BA40 - 4BA7F + 0x0003, 0x00cb, 0x00d2, 0x00d9, 0x0005, 0x0006, 0xffff, 0x00f6, + 0x00f9, 0x00fc, 0x00ff, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x0005, 0x0064, 0xffff, 0x05ab, 0x05b7, 0x05c3, + 0x05cf, 0x0003, 0x0000, 0x0000, 0x00e4, 0x0005, 0x0064, 0xffff, + 0x05ab, 0x05b7, 0x05c3, 0x05cf, 0x0002, 0x00ee, 0x010d, 0x0003, + 0x00f2, 0x00fb, 0x0104, 0x0002, 0x00f5, 0x00f8, 0x0001, 0x0028, + 0x07e7, 0x0001, 0x0064, 0x05db, 0x0002, 0x00fe, 0x0101, 0x0001, + 0x0028, 0x07e7, 0x0001, 0x0064, 0x05db, 0x0002, 0x0107, 0x010a, + // Entry 4BA80 - 4BABF + 0x0001, 0x0028, 0x07e7, 0x0001, 0x0064, 0x05db, 0x0003, 0x0111, + 0x0000, 0x011a, 0x0002, 0x0114, 0x0117, 0x0001, 0x0028, 0x07e7, + 0x0001, 0x0064, 0x05db, 0x0002, 0x011d, 0x0120, 0x0001, 0x0028, + 0x07e7, 0x0001, 0x0064, 0x05db, 0x0003, 0x012d, 0x0000, 0x0127, + 0x0001, 0x0129, 0x0002, 0x0064, 0x05df, 0x05e2, 0x0001, 0x012f, + 0x0002, 0x0064, 0x05df, 0x05e2, 0x0004, 0x0141, 0x013b, 0x0138, + 0x013e, 0x0001, 0x0064, 0x05e5, 0x0001, 0x0001, 0x002d, 0x0001, + 0x001d, 0x0502, 0x0001, 0x0015, 0x14be, 0x0004, 0x0152, 0x014c, + // Entry 4BAC0 - 4BAFF + 0x0149, 0x014f, 0x0001, 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, + 0x0001, 0x0002, 0x04fe, 0x0001, 0x0002, 0x0508, 0x0040, 0x0196, + 0x0000, 0x0000, 0x019b, 0x01ad, 0x01bc, 0x01cb, 0x01dd, 0x01ec, + 0x01fb, 0x020d, 0x021c, 0x022b, 0x0241, 0x0254, 0x0000, 0x0000, + 0x0000, 0x0267, 0x027e, 0x0290, 0x0000, 0x0000, 0x0000, 0x029f, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02a4, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 4BB00 - 4BB3F + 0x0000, 0x0000, 0x0000, 0x02b8, 0x0000, 0x02bd, 0x02d3, 0x02e2, + 0x02f1, 0x0307, 0x0316, 0x0325, 0x033b, 0x034a, 0x0359, 0x0001, + 0x0198, 0x0001, 0x0000, 0x1a35, 0x0003, 0x019f, 0x0000, 0x01a2, + 0x0001, 0x0000, 0x1a39, 0x0002, 0x01a5, 0x01a9, 0x0002, 0x0000, + 0x1a5c, 0x1a5c, 0x0002, 0x0000, 0x1a63, 0x1a63, 0x0003, 0x0000, + 0x0000, 0x01b1, 0x0002, 0x01b4, 0x01b8, 0x0002, 0x0000, 0x1a5c, + 0x1a5c, 0x0002, 0x0000, 0x1a63, 0x1a63, 0x0003, 0x0000, 0x0000, + 0x01c0, 0x0002, 0x01c3, 0x01c7, 0x0002, 0x0000, 0x1a5c, 0x1a5c, + // Entry 4BB40 - 4BB7F + 0x0002, 0x0000, 0x1a63, 0x1a63, 0x0003, 0x01cf, 0x0000, 0x01d2, + 0x0001, 0x0000, 0x1a6a, 0x0002, 0x01d5, 0x01d9, 0x0002, 0x0000, + 0x1a99, 0x1a99, 0x0002, 0x0000, 0x1aa0, 0x1aa0, 0x0003, 0x0000, + 0x0000, 0x01e1, 0x0002, 0x01e4, 0x01e8, 0x0002, 0x0000, 0x1a99, + 0x1a99, 0x0002, 0x0000, 0x1aa0, 0x1aa0, 0x0003, 0x0000, 0x0000, + 0x01f0, 0x0002, 0x01f3, 0x01f7, 0x0002, 0x0000, 0x1a99, 0x1a99, + 0x0002, 0x0000, 0x1aa0, 0x1aa0, 0x0003, 0x01ff, 0x0000, 0x0202, + 0x0001, 0x0000, 0x1aa7, 0x0002, 0x0205, 0x0209, 0x0002, 0x0000, + // Entry 4BB80 - 4BBBF + 0x1ace, 0x1ace, 0x0002, 0x0000, 0x1ad5, 0x1ad5, 0x0003, 0x0000, + 0x0000, 0x0211, 0x0002, 0x0214, 0x0218, 0x0002, 0x0000, 0x1ace, + 0x1ace, 0x0002, 0x0000, 0x1ad5, 0x1ad5, 0x0003, 0x0000, 0x0000, + 0x0220, 0x0002, 0x0223, 0x0227, 0x0002, 0x0000, 0x1ace, 0x1ace, + 0x0002, 0x0000, 0x1ad5, 0x1ad5, 0x0004, 0x0230, 0x0000, 0x0233, + 0x023e, 0x0001, 0x0000, 0x1adc, 0x0002, 0x0236, 0x023a, 0x0002, + 0x0000, 0x1aff, 0x1aff, 0x0002, 0x0000, 0x1b06, 0x1b06, 0x0001, + 0x0000, 0x1b0d, 0x0004, 0x0000, 0x0000, 0x0246, 0x0251, 0x0002, + // Entry 4BBC0 - 4BBFF + 0x0249, 0x024d, 0x0002, 0x0000, 0x1aff, 0x1aff, 0x0002, 0x0000, + 0x1b06, 0x1b06, 0x0001, 0x0000, 0x1b0d, 0x0004, 0x0000, 0x0000, + 0x0259, 0x0264, 0x0002, 0x025c, 0x0260, 0x0002, 0x0000, 0x1aff, + 0x1aff, 0x0002, 0x0000, 0x1b06, 0x1b06, 0x0001, 0x0000, 0x1b0d, + 0x0003, 0x026b, 0x026e, 0x0273, 0x0001, 0x0000, 0x1b2b, 0x0003, + 0x0064, 0x05f6, 0x05fd, 0x0604, 0x0002, 0x0276, 0x027a, 0x0002, + 0x0000, 0x1b48, 0x1b48, 0x0002, 0x0000, 0x1b4f, 0x1b4f, 0x0003, + 0x0282, 0x0000, 0x0285, 0x0001, 0x0000, 0x1b2b, 0x0002, 0x0288, + // Entry 4BC00 - 4BC3F + 0x028c, 0x0002, 0x0000, 0x1b48, 0x1b48, 0x0002, 0x0000, 0x1b4f, + 0x1b4f, 0x0003, 0x0000, 0x0000, 0x0294, 0x0002, 0x0297, 0x029b, + 0x0002, 0x0000, 0x1b48, 0x1b48, 0x0002, 0x0000, 0x1b4f, 0x1b4f, + 0x0001, 0x02a1, 0x0001, 0x0000, 0x1b62, 0x0003, 0x0000, 0x02a8, + 0x02ad, 0x0003, 0x0000, 0x1b83, 0x1b8f, 0x1b9b, 0x0002, 0x02b0, + 0x02b4, 0x0002, 0x0000, 0x1ba7, 0x1ba7, 0x0002, 0x0000, 0x1bb4, + 0x1bb4, 0x0001, 0x02ba, 0x0001, 0x0000, 0x1d5d, 0x0003, 0x02c1, + 0x02c4, 0x02c8, 0x0001, 0x0000, 0x1d67, 0x0002, 0x0000, 0xffff, + // Entry 4BC40 - 4BC7F + 0x1d6c, 0x0002, 0x02cb, 0x02cf, 0x0002, 0x0000, 0x1d76, 0x1d76, + 0x0002, 0x0000, 0x1d7d, 0x1d7d, 0x0003, 0x0000, 0x0000, 0x02d7, + 0x0002, 0x02da, 0x02de, 0x0002, 0x0000, 0x1d76, 0x1d76, 0x0002, + 0x0000, 0x1d7d, 0x1d7d, 0x0003, 0x0000, 0x0000, 0x02e6, 0x0002, + 0x02e9, 0x02ed, 0x0002, 0x0000, 0x1d76, 0x1d76, 0x0002, 0x0000, + 0x1d7d, 0x1d7d, 0x0003, 0x02f5, 0x02f8, 0x02fc, 0x0001, 0x0000, + 0x1d84, 0x0002, 0x0000, 0xffff, 0x1d8b, 0x0002, 0x02ff, 0x0303, + 0x0002, 0x005e, 0x061f, 0x061f, 0x0002, 0x0000, 0x1da0, 0x1da0, + // Entry 4BC80 - 4BCBF + 0x0003, 0x0000, 0x0000, 0x030b, 0x0002, 0x030e, 0x0312, 0x0002, + 0x005e, 0x061f, 0x061f, 0x0002, 0x0000, 0x1da0, 0x1da0, 0x0003, + 0x0000, 0x0000, 0x031a, 0x0002, 0x031d, 0x0321, 0x0002, 0x005e, + 0x061f, 0x061f, 0x0002, 0x0000, 0x1da0, 0x1da0, 0x0003, 0x0329, + 0x032c, 0x0330, 0x0001, 0x0000, 0x1da9, 0x0002, 0x000d, 0xffff, + 0x327f, 0x0002, 0x0333, 0x0337, 0x0002, 0x0026, 0x02ce, 0x02ce, + 0x0002, 0x0000, 0x1dbb, 0x1dbb, 0x0003, 0x0000, 0x0000, 0x033f, + 0x0002, 0x0342, 0x0346, 0x0002, 0x0026, 0x02ce, 0x02ce, 0x0002, + // Entry 4BCC0 - 4BCFF + 0x0000, 0x1dbb, 0x1dbb, 0x0003, 0x0000, 0x0000, 0x034e, 0x0002, + 0x0351, 0x0355, 0x0002, 0x0026, 0x02ce, 0x02ce, 0x0002, 0x0000, + 0x1dbb, 0x1dbb, 0x0001, 0x035b, 0x0001, 0x0000, 0x1dc2, 0x0004, + 0x0000, 0x0000, 0x0000, 0x0363, 0x0002, 0x0000, 0x0366, 0x0003, + 0x036a, 0x03ca, 0x0392, 0x0026, 0x0064, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 4BD00 - 4BD3F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x060a, 0x0036, 0x0064, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x061c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 4BD40 - 4BD7F + 0xffff, 0xffff, 0x065a, 0x0026, 0x0064, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x063e, 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0007, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0013, 0x0004, 0x0021, + // Entry 4BD80 - 4BDBF + 0x001b, 0x0018, 0x001e, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, + 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0003, + 0x0004, 0x0273, 0x06a4, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000d, 0x0038, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0016, 0x0000, 0x0027, 0x0004, 0x0024, 0x001e, + 0x001b, 0x0021, 0x0001, 0x0064, 0x066c, 0x0001, 0x0002, 0x001b, + 0x0001, 0x0002, 0x001b, 0x0001, 0x0008, 0x062f, 0x0004, 0x0035, + 0x002f, 0x002c, 0x0032, 0x0001, 0x0064, 0x067c, 0x0001, 0x0064, + // Entry 4BDC0 - 4BDFF + 0x067c, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, + 0x0041, 0x00a6, 0x00fd, 0x0132, 0x021b, 0x0240, 0x0251, 0x0262, + 0x0002, 0x0044, 0x0075, 0x0003, 0x0048, 0x0057, 0x0066, 0x000d, + 0x000d, 0xffff, 0x0059, 0x3510, 0x34a0, 0x3514, 0x3518, 0x351c, + 0x3520, 0x3525, 0x352a, 0x352e, 0x3532, 0x3537, 0x000d, 0x0000, + 0xffff, 0x2142, 0x3d4d, 0x3d03, 0x21e4, 0x3d03, 0x3d50, 0x3d52, + 0x200e, 0x3d4d, 0x2000, 0x3d05, 0x3d54, 0x000d, 0x0064, 0xffff, + 0x068a, 0x0690, 0x0697, 0x069c, 0x06a2, 0x06a6, 0x06ae, 0x06b5, + // Entry 4BE00 - 4BE3F + 0x06bb, 0x06c3, 0x06c9, 0x06d1, 0x0003, 0x0079, 0x0088, 0x0097, + 0x000d, 0x0006, 0xffff, 0x001e, 0x450f, 0x4513, 0x4517, 0x451b, + 0x451f, 0x4523, 0x4528, 0x452d, 0x4531, 0x4535, 0x453a, 0x000d, + 0x0018, 0xffff, 0x2a31, 0x2a46, 0x2a33, 0x2a21, 0x2a33, 0x2a49, + 0x2a39, 0x2a3b, 0x2a46, 0x2a35, 0x2a13, 0x2a4b, 0x000d, 0x0064, + 0xffff, 0x06d9, 0x06df, 0x06e6, 0x06eb, 0x06f1, 0x06f5, 0x06fd, + 0x0704, 0x070a, 0x0712, 0x0718, 0x0720, 0x0002, 0x00a9, 0x00d3, + 0x0005, 0x00af, 0x00b8, 0x00ca, 0x0000, 0x00c1, 0x0007, 0x0064, + // Entry 4BE40 - 4BE7F + 0x0728, 0x072c, 0x0731, 0x0735, 0x073a, 0x073e, 0x0742, 0x0007, + 0x0018, 0x2a15, 0x2a4e, 0x2a33, 0x2a33, 0x2a50, 0x2a21, 0x2a46, + 0x0007, 0x0064, 0x0728, 0x072c, 0x0731, 0x0735, 0x073a, 0x073e, + 0x0742, 0x0007, 0x0064, 0x0746, 0x074d, 0x0756, 0x075f, 0x076b, + 0x0773, 0x077c, 0x0005, 0x00d9, 0x00e2, 0x00f4, 0x0000, 0x00eb, + 0x0007, 0x0064, 0x0728, 0x072c, 0x0731, 0x0735, 0x073a, 0x073e, + 0x0742, 0x0007, 0x0018, 0x2a15, 0x2a4e, 0x2a33, 0x2a33, 0x2a50, + 0x2a21, 0x2a46, 0x0007, 0x0064, 0x0728, 0x072c, 0x0731, 0x0735, + // Entry 4BE80 - 4BEBF + 0x073a, 0x073e, 0x0742, 0x0007, 0x0064, 0x0786, 0x078d, 0x0796, + 0x079f, 0x07ab, 0x07b3, 0x07bc, 0x0002, 0x0100, 0x0119, 0x0003, + 0x0104, 0x010b, 0x0112, 0x0005, 0x0064, 0xffff, 0x07c6, 0x07d2, + 0x07df, 0x07ed, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x0005, 0x0064, 0xffff, 0x07fa, 0x080c, 0x081e, 0x0831, + 0x0003, 0x011d, 0x0124, 0x012b, 0x0005, 0x0064, 0xffff, 0x0845, + 0x0851, 0x085e, 0x086c, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x0005, 0x0064, 0xffff, 0x0879, 0x088b, 0x089d, + // Entry 4BEC0 - 4BEFF + 0x08af, 0x0002, 0x0135, 0x01a8, 0x0003, 0x0139, 0x015e, 0x0183, + 0x0009, 0x0146, 0x014c, 0x0143, 0x014f, 0x0155, 0x0158, 0x015b, + 0x0149, 0x0152, 0x0001, 0x0064, 0x08bf, 0x0001, 0x0064, 0x08cb, + 0x0001, 0x0064, 0x08d7, 0x0001, 0x0064, 0x08e3, 0x0001, 0x0064, + 0x08ee, 0x0001, 0x0064, 0x08cb, 0x0001, 0x0064, 0x08e3, 0x0001, + 0x0064, 0x08fb, 0x0001, 0x0064, 0x0907, 0x0009, 0x016b, 0x0171, + 0x0168, 0x0174, 0x017a, 0x017d, 0x0180, 0x016e, 0x0177, 0x0001, + 0x0064, 0x08bf, 0x0001, 0x0064, 0x08cb, 0x0001, 0x0064, 0x08d7, + // Entry 4BF00 - 4BF3F + 0x0001, 0x0064, 0x08e3, 0x0001, 0x0064, 0x08ee, 0x0001, 0x0064, + 0x08cb, 0x0001, 0x0064, 0x08e3, 0x0001, 0x0064, 0x08fb, 0x0001, + 0x0064, 0x0907, 0x0009, 0x0190, 0x0196, 0x018d, 0x0199, 0x019f, + 0x01a2, 0x01a5, 0x0193, 0x019c, 0x0001, 0x0064, 0x08bf, 0x0001, + 0x0064, 0x08cb, 0x0001, 0x0064, 0x08d7, 0x0001, 0x0064, 0x08e3, + 0x0001, 0x0064, 0x08ee, 0x0001, 0x0064, 0x08cb, 0x0001, 0x0064, + 0x08e3, 0x0001, 0x0064, 0x08fb, 0x0001, 0x0064, 0x0907, 0x0003, + 0x01ac, 0x01d1, 0x01f6, 0x0009, 0x01b9, 0x01bf, 0x01b6, 0x01c2, + // Entry 4BF40 - 4BF7F + 0x01c8, 0x01cb, 0x01ce, 0x01bc, 0x01c5, 0x0001, 0x0064, 0x0910, + 0x0001, 0x0064, 0x0919, 0x0001, 0x0064, 0x0922, 0x0001, 0x0064, + 0x092b, 0x0001, 0x0064, 0x0933, 0x0001, 0x0064, 0x0919, 0x0001, + 0x0064, 0x092b, 0x0001, 0x0064, 0x093c, 0x0001, 0x0064, 0x0945, + 0x0009, 0x01de, 0x01e4, 0x01db, 0x01e7, 0x01ed, 0x01f0, 0x01f3, + 0x01e1, 0x01ea, 0x0001, 0x0064, 0x0910, 0x0001, 0x0064, 0x0919, + 0x0001, 0x0064, 0x0922, 0x0001, 0x0064, 0x092b, 0x0001, 0x0064, + 0x0933, 0x0001, 0x0064, 0x0919, 0x0001, 0x0064, 0x092b, 0x0001, + // Entry 4BF80 - 4BFBF + 0x0064, 0x093c, 0x0001, 0x0064, 0x0945, 0x0009, 0x0203, 0x0209, + 0x0200, 0x020c, 0x0212, 0x0215, 0x0218, 0x0206, 0x020f, 0x0001, + 0x0064, 0x0910, 0x0001, 0x0064, 0x0919, 0x0001, 0x0064, 0x0922, + 0x0001, 0x0064, 0x092b, 0x0001, 0x0064, 0x0933, 0x0001, 0x0064, + 0x0919, 0x0001, 0x0064, 0x092b, 0x0001, 0x0064, 0x093c, 0x0001, + 0x0064, 0x0945, 0x0003, 0x022a, 0x0235, 0x021f, 0x0002, 0x0222, + 0x0226, 0x0002, 0x0064, 0x094b, 0x096a, 0x0002, 0x0064, 0x0959, + 0x0978, 0x0002, 0x022d, 0x0231, 0x0002, 0x0064, 0x0984, 0x0990, + // Entry 4BFC0 - 4BFFF + 0x0002, 0x0064, 0x0989, 0x0996, 0x0002, 0x0238, 0x023c, 0x0002, + 0x0064, 0x0984, 0x0990, 0x0002, 0x0064, 0x0989, 0x0996, 0x0004, + 0x024e, 0x0248, 0x0245, 0x024b, 0x0001, 0x0006, 0x015b, 0x0001, + 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, 0x0008, 0x0620, + 0x0004, 0x025f, 0x0259, 0x0256, 0x025c, 0x0001, 0x0064, 0x099b, + 0x0001, 0x0064, 0x09ab, 0x0001, 0x0002, 0x04fe, 0x0001, 0x0002, + 0x0508, 0x0004, 0x0270, 0x026a, 0x0267, 0x026d, 0x0001, 0x0064, + 0x067c, 0x0001, 0x0064, 0x067c, 0x0001, 0x0006, 0x022e, 0x0001, + // Entry 4C000 - 4C03F + 0x0006, 0x022e, 0x0042, 0x02b6, 0x02bb, 0x02c0, 0x02c5, 0x02dc, + 0x02ee, 0x0300, 0x0317, 0x0329, 0x033b, 0x0352, 0x0364, 0x0376, + 0x0391, 0x03a7, 0x03bd, 0x03c2, 0x03c7, 0x03cc, 0x03e3, 0x03f5, + 0x0407, 0x040c, 0x0411, 0x0416, 0x041b, 0x0420, 0x0425, 0x042a, + 0x042f, 0x0434, 0x0448, 0x045c, 0x0470, 0x0484, 0x0498, 0x04ac, + 0x04c0, 0x04d4, 0x04e8, 0x04fc, 0x0510, 0x0524, 0x0538, 0x054c, + 0x0560, 0x0574, 0x0588, 0x059c, 0x05b0, 0x05c4, 0x05d8, 0x05dd, + 0x05e2, 0x05e7, 0x05fd, 0x060f, 0x0621, 0x0637, 0x0649, 0x065b, + // Entry 4C040 - 4C07F + 0x0671, 0x0683, 0x0695, 0x069a, 0x069f, 0x0001, 0x02b8, 0x0001, + 0x0064, 0x09b8, 0x0001, 0x02bd, 0x0001, 0x0064, 0x09b8, 0x0001, + 0x02c2, 0x0001, 0x0064, 0x09b8, 0x0003, 0x02c9, 0x02cc, 0x02d1, + 0x0001, 0x0064, 0x09bd, 0x0003, 0x0064, 0x09c1, 0x09d0, 0x09db, + 0x0002, 0x02d4, 0x02d8, 0x0002, 0x0064, 0x09fa, 0x09ed, 0x0002, + 0x0064, 0x0a1d, 0x0a0b, 0x0003, 0x02e0, 0x0000, 0x02e3, 0x0001, + 0x0064, 0x09bd, 0x0002, 0x02e6, 0x02ea, 0x0002, 0x0064, 0x09fa, + 0x09ed, 0x0002, 0x0064, 0x0a1d, 0x0a0b, 0x0003, 0x02f2, 0x0000, + // Entry 4C080 - 4C0BF + 0x02f5, 0x0001, 0x0064, 0x09bd, 0x0002, 0x02f8, 0x02fc, 0x0002, + 0x0064, 0x09fa, 0x09ed, 0x0002, 0x0064, 0x0a1d, 0x0a0b, 0x0003, + 0x0304, 0x0307, 0x030c, 0x0001, 0x0064, 0x0a30, 0x0003, 0x0064, + 0x0a39, 0x0a4d, 0x0a5d, 0x0002, 0x030f, 0x0313, 0x0002, 0x0064, + 0x0a86, 0x0a74, 0x0002, 0x0064, 0x0ab2, 0x0a9b, 0x0003, 0x031b, + 0x0000, 0x031e, 0x0001, 0x0064, 0x0a30, 0x0002, 0x0321, 0x0325, + 0x0002, 0x0064, 0x0a86, 0x0a74, 0x0002, 0x0064, 0x0ab2, 0x0a9b, + 0x0003, 0x032d, 0x0000, 0x0330, 0x0001, 0x0064, 0x0a30, 0x0002, + // Entry 4C0C0 - 4C0FF + 0x0333, 0x0337, 0x0002, 0x0064, 0x0a86, 0x0a74, 0x0002, 0x0064, + 0x0ab2, 0x0a9b, 0x0003, 0x033f, 0x0342, 0x0347, 0x0001, 0x0064, + 0x0acb, 0x0003, 0x0064, 0x0ad0, 0x0ae0, 0x0aec, 0x0002, 0x034a, + 0x034e, 0x0002, 0x0064, 0x0b0d, 0x0aff, 0x0002, 0x0064, 0x0b1c, + 0x0b1c, 0x0003, 0x0356, 0x0000, 0x0359, 0x0001, 0x0064, 0x0acb, + 0x0002, 0x035c, 0x0360, 0x0002, 0x0064, 0x0b0d, 0x0aff, 0x0002, + 0x0064, 0x0b1c, 0x0b1c, 0x0003, 0x0368, 0x0000, 0x036b, 0x0001, + 0x0064, 0x0acb, 0x0002, 0x036e, 0x0372, 0x0002, 0x0064, 0x0b0d, + // Entry 4C100 - 4C13F + 0x0aff, 0x0002, 0x0064, 0x0b1c, 0x0b1c, 0x0004, 0x037b, 0x037e, + 0x0383, 0x038e, 0x0001, 0x0064, 0x0b2f, 0x0003, 0x0064, 0x0b35, + 0x0b45, 0x0b52, 0x0002, 0x0386, 0x038a, 0x0002, 0x0064, 0x0b71, + 0x0b64, 0x0002, 0x0064, 0x0b81, 0x0b81, 0x0001, 0x0064, 0x0b95, + 0x0004, 0x0396, 0x0000, 0x0399, 0x03a4, 0x0001, 0x0064, 0x0b2f, + 0x0002, 0x039c, 0x03a0, 0x0002, 0x0064, 0x0b71, 0x0b64, 0x0002, + 0x0064, 0x0b81, 0x0b81, 0x0001, 0x0064, 0x0b95, 0x0004, 0x03ac, + 0x0000, 0x03af, 0x03ba, 0x0001, 0x0064, 0x0b2f, 0x0002, 0x03b2, + // Entry 4C140 - 4C17F + 0x03b6, 0x0002, 0x0064, 0x0b71, 0x0b64, 0x0002, 0x0064, 0x0b81, + 0x0b81, 0x0001, 0x0064, 0x0b95, 0x0001, 0x03bf, 0x0001, 0x0064, + 0x0ba0, 0x0001, 0x03c4, 0x0001, 0x0064, 0x0ba0, 0x0001, 0x03c9, + 0x0001, 0x0064, 0x0ba0, 0x0003, 0x03d0, 0x03d3, 0x03d8, 0x0001, + 0x0064, 0x0baf, 0x0003, 0x0064, 0x0bb5, 0x0bb9, 0x0bbd, 0x0002, + 0x03db, 0x03df, 0x0002, 0x0064, 0x0bd1, 0x0bc4, 0x0002, 0x0064, + 0x0be1, 0x0be1, 0x0003, 0x03e7, 0x0000, 0x03ea, 0x0001, 0x0064, + 0x0baf, 0x0002, 0x03ed, 0x03f1, 0x0002, 0x0064, 0x0bd1, 0x0bc4, + // Entry 4C180 - 4C1BF + 0x0002, 0x0064, 0x0be1, 0x0be1, 0x0003, 0x03f9, 0x0000, 0x03fc, + 0x0001, 0x0064, 0x0baf, 0x0002, 0x03ff, 0x0403, 0x0002, 0x0064, + 0x0bd1, 0x0bc4, 0x0002, 0x0064, 0x0be1, 0x0be1, 0x0001, 0x0409, + 0x0001, 0x0064, 0x0bf5, 0x0001, 0x040e, 0x0001, 0x0064, 0x0bf5, + 0x0001, 0x0413, 0x0001, 0x0064, 0x0bf5, 0x0001, 0x0418, 0x0001, + 0x0064, 0x0c03, 0x0001, 0x041d, 0x0001, 0x0064, 0x0c03, 0x0001, + 0x0422, 0x0001, 0x0064, 0x0c03, 0x0001, 0x0427, 0x0001, 0x0064, + 0x0c12, 0x0001, 0x042c, 0x0001, 0x0064, 0x0c12, 0x0001, 0x0431, + // Entry 4C1C0 - 4C1FF + 0x0001, 0x0064, 0x0c12, 0x0003, 0x0000, 0x0438, 0x043d, 0x0003, + 0x0064, 0x0c26, 0x0c3b, 0x0c4b, 0x0002, 0x0440, 0x0444, 0x0002, + 0x0064, 0x0c74, 0x0c62, 0x0002, 0x0064, 0x0ca1, 0x0c88, 0x0003, + 0x0000, 0x044c, 0x0451, 0x0003, 0x0064, 0x0c26, 0x0c3b, 0x0c4b, + 0x0002, 0x0454, 0x0458, 0x0002, 0x0064, 0x0c74, 0x0c62, 0x0002, + 0x0064, 0x0ca1, 0x0c88, 0x0003, 0x0000, 0x0460, 0x0465, 0x0003, + 0x0064, 0x0c26, 0x0c3b, 0x0c4b, 0x0002, 0x0468, 0x046c, 0x0002, + 0x0064, 0x0c74, 0x0c62, 0x0002, 0x0064, 0x0ca1, 0x0c88, 0x0003, + // Entry 4C200 - 4C23F + 0x0000, 0x0474, 0x0479, 0x0003, 0x0064, 0x0cb9, 0x0cce, 0x0ce0, + 0x0002, 0x047c, 0x0480, 0x0002, 0x0064, 0x0d09, 0x0cf7, 0x0002, + 0x0064, 0x0d36, 0x0d1d, 0x0003, 0x0000, 0x0488, 0x048d, 0x0003, + 0x0064, 0x0cb9, 0x0cce, 0x0ce0, 0x0002, 0x0490, 0x0494, 0x0002, + 0x0064, 0x0d09, 0x0cf7, 0x0002, 0x0064, 0x0d36, 0x0d1d, 0x0003, + 0x0000, 0x049c, 0x04a1, 0x0003, 0x0064, 0x0cb9, 0x0cce, 0x0ce0, + 0x0002, 0x04a4, 0x04a8, 0x0002, 0x0064, 0x0d09, 0x0cf7, 0x0002, + 0x0064, 0x0d36, 0x0d1d, 0x0003, 0x0000, 0x04b0, 0x04b5, 0x0003, + // Entry 4C240 - 4C27F + 0x0064, 0x0d4e, 0x0d63, 0x0d75, 0x0002, 0x04b8, 0x04bc, 0x0002, + 0x0064, 0x0d9e, 0x0d8c, 0x0002, 0x0064, 0x0dcb, 0x0db2, 0x0003, + 0x0000, 0x04c4, 0x04c9, 0x0003, 0x0064, 0x0d4e, 0x0d63, 0x0d75, + 0x0002, 0x04cc, 0x04d0, 0x0002, 0x0064, 0x0d9e, 0x0d8c, 0x0002, + 0x0064, 0x0dcb, 0x0db2, 0x0003, 0x0000, 0x04d8, 0x04dd, 0x0003, + 0x0064, 0x0d4e, 0x0d63, 0x0d75, 0x0002, 0x04e0, 0x04e4, 0x0002, + 0x0064, 0x0d9e, 0x0d8c, 0x0002, 0x0064, 0x0dcb, 0x0db2, 0x0003, + 0x0000, 0x04ec, 0x04f1, 0x0003, 0x0064, 0x0de3, 0x0dfb, 0x0e10, + // Entry 4C280 - 4C2BF + 0x0002, 0x04f4, 0x04f8, 0x0002, 0x0064, 0x0e3f, 0x0e2a, 0x0002, + 0x0064, 0x0e72, 0x0e56, 0x0003, 0x0000, 0x0500, 0x0505, 0x0003, + 0x0064, 0x0de3, 0x0dfb, 0x0e10, 0x0002, 0x0508, 0x050c, 0x0002, + 0x0064, 0x0e3f, 0x0e2a, 0x0002, 0x0064, 0x0e72, 0x0e56, 0x0003, + 0x0000, 0x0514, 0x0519, 0x0003, 0x0064, 0x0de3, 0x0dfb, 0x0e10, + 0x0002, 0x051c, 0x0520, 0x0002, 0x0064, 0x0e3f, 0x0e2a, 0x0002, + 0x0064, 0x0e72, 0x0e56, 0x0003, 0x0000, 0x0528, 0x052d, 0x0003, + 0x0064, 0x0e8d, 0x0ea1, 0x0eb2, 0x0002, 0x0530, 0x0534, 0x0002, + // Entry 4C2C0 - 4C2FF + 0x0064, 0x0eda, 0x0ec8, 0x0002, 0x0064, 0x0eee, 0x0eee, 0x0003, + 0x0000, 0x053c, 0x0541, 0x0003, 0x0064, 0x0e8d, 0x0ea1, 0x0eb2, + 0x0002, 0x0544, 0x0548, 0x0002, 0x0064, 0x0eda, 0x0ec8, 0x0002, + 0x0064, 0x0eee, 0x0eee, 0x0003, 0x0000, 0x0550, 0x0555, 0x0003, + 0x0064, 0x0e8d, 0x0ea1, 0x0eb2, 0x0002, 0x0558, 0x055c, 0x0002, + 0x0064, 0x0eda, 0x0ec8, 0x0002, 0x0064, 0x0eee, 0x0eee, 0x0003, + 0x0000, 0x0564, 0x0569, 0x0003, 0x0064, 0x0f06, 0x0f1b, 0x0f2d, + 0x0002, 0x056c, 0x0570, 0x0002, 0x0064, 0x0f57, 0x0f44, 0x0002, + // Entry 4C300 - 4C33F + 0x0064, 0x0f6c, 0x0f6c, 0x0003, 0x0000, 0x0578, 0x057d, 0x0003, + 0x0064, 0x0f06, 0x0f1b, 0x0f2d, 0x0002, 0x0580, 0x0584, 0x0002, + 0x0064, 0x0f57, 0x0f44, 0x0002, 0x0064, 0x0f6c, 0x0f6c, 0x0003, + 0x0000, 0x058c, 0x0591, 0x0003, 0x0064, 0x0f06, 0x0f1b, 0x0f2d, + 0x0002, 0x0594, 0x0598, 0x0002, 0x0064, 0x0f57, 0x0f44, 0x0002, + 0x0064, 0x0f6c, 0x0f6c, 0x0003, 0x0000, 0x05a0, 0x05a5, 0x0003, + 0x0064, 0x0f85, 0x0f9b, 0x0fae, 0x0002, 0x05a8, 0x05ac, 0x0002, + 0x0064, 0x0fd9, 0x0fc6, 0x0002, 0x0064, 0x1008, 0x0fee, 0x0003, + // Entry 4C340 - 4C37F + 0x0000, 0x05b4, 0x05b9, 0x0003, 0x0064, 0x0f85, 0x0f9b, 0x0fae, + 0x0002, 0x05bc, 0x05c0, 0x0002, 0x0064, 0x0fd9, 0x0fc6, 0x0002, + 0x0064, 0x1008, 0x0fee, 0x0003, 0x0000, 0x05c8, 0x05cd, 0x0003, + 0x0064, 0x0f85, 0x0f9b, 0x0fae, 0x0002, 0x05d0, 0x05d4, 0x0002, + 0x0064, 0x0fd9, 0x0fc6, 0x0002, 0x0064, 0x1008, 0x0fee, 0x0001, + 0x05da, 0x0001, 0x0064, 0x1021, 0x0001, 0x05df, 0x0001, 0x0064, + 0x1021, 0x0001, 0x05e4, 0x0001, 0x0064, 0x1021, 0x0003, 0x05eb, + 0x05ee, 0x05f2, 0x0001, 0x0064, 0x1032, 0x0002, 0x0064, 0xffff, + // Entry 4C380 - 4C3BF + 0x1037, 0x0002, 0x05f5, 0x05f9, 0x0002, 0x0064, 0x104f, 0x1043, + 0x0002, 0x0064, 0x105e, 0x105e, 0x0003, 0x0601, 0x0000, 0x0604, + 0x0001, 0x0064, 0x1032, 0x0002, 0x0607, 0x060b, 0x0002, 0x0064, + 0x104f, 0x1043, 0x0002, 0x0064, 0x105e, 0x105e, 0x0003, 0x0613, + 0x0000, 0x0616, 0x0001, 0x0064, 0x1032, 0x0002, 0x0619, 0x061d, + 0x0002, 0x0064, 0x104f, 0x1043, 0x0002, 0x0064, 0x105e, 0x105e, + 0x0003, 0x0625, 0x0628, 0x062c, 0x0001, 0x0064, 0x1071, 0x0002, + 0x0064, 0xffff, 0x1079, 0x0002, 0x062f, 0x0633, 0x0002, 0x0064, + // Entry 4C3C0 - 4C3FF + 0x1097, 0x1088, 0x0002, 0x0064, 0x10be, 0x10a8, 0x0003, 0x063b, + 0x0000, 0x063e, 0x0001, 0x0001, 0x07c5, 0x0002, 0x0641, 0x0645, + 0x0002, 0x0064, 0x10d3, 0x10d3, 0x0002, 0x0064, 0x10e0, 0x10e0, + 0x0003, 0x064d, 0x0000, 0x0650, 0x0001, 0x0001, 0x07c5, 0x0002, + 0x0653, 0x0657, 0x0002, 0x0064, 0x10d3, 0x10d3, 0x0002, 0x0064, + 0x10e0, 0x10e0, 0x0003, 0x065f, 0x0662, 0x0666, 0x0001, 0x0064, + 0x10f3, 0x0002, 0x0064, 0xffff, 0x10fc, 0x0002, 0x0669, 0x066d, + 0x0002, 0x0064, 0x1111, 0x1101, 0x0002, 0x0064, 0x113a, 0x1123, + // Entry 4C400 - 4C43F + 0x0003, 0x0675, 0x0000, 0x0678, 0x0001, 0x0001, 0x083e, 0x0002, + 0x067b, 0x067f, 0x0002, 0x0064, 0x1150, 0x1150, 0x0002, 0x0064, + 0x115d, 0x115d, 0x0003, 0x0687, 0x0000, 0x068a, 0x0001, 0x0001, + 0x083e, 0x0002, 0x068d, 0x0691, 0x0002, 0x0064, 0x1150, 0x1150, + 0x0002, 0x0064, 0x115d, 0x115d, 0x0001, 0x0697, 0x0001, 0x0064, + 0x1170, 0x0001, 0x069c, 0x0001, 0x0064, 0x1170, 0x0001, 0x06a1, + 0x0001, 0x0064, 0x1170, 0x0004, 0x06a9, 0x06ae, 0x06b3, 0x06c2, + 0x0003, 0x0000, 0x1dc7, 0x3d57, 0x3d5e, 0x0003, 0x0064, 0x117b, + // Entry 4C440 - 4C47F + 0x1184, 0x1194, 0x0002, 0x0000, 0x06b6, 0x0003, 0x0000, 0x06bd, + 0x06ba, 0x0001, 0x0064, 0x11a7, 0x0003, 0x0064, 0xffff, 0x11c3, + 0x11d8, 0x0002, 0x0000, 0x06c5, 0x0003, 0x06c9, 0x0809, 0x0769, + 0x009e, 0x0064, 0xffff, 0xffff, 0xffff, 0xffff, 0x129f, 0x1304, + 0x137e, 0x13bf, 0x1418, 0x146e, 0x1506, 0x15b9, 0x15f7, 0x169f, + 0x16ce, 0x1718, 0x1789, 0x17ca, 0x180e, 0x1870, 0x18f9, 0x1958, + 0x19c6, 0x1a13, 0x1a4e, 0xffff, 0xffff, 0x1ab6, 0xffff, 0x1b10, + 0xffff, 0x1b88, 0x1bc3, 0x1bf8, 0x1c30, 0xffff, 0xffff, 0x1cb0, + // Entry 4C480 - 4C4BF + 0x1cf4, 0x1d3b, 0xffff, 0xffff, 0xffff, 0x1db1, 0xffff, 0x1e26, + 0x1e7f, 0xffff, 0x1ef8, 0x1f5d, 0x1fb3, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2057, 0xffff, 0xffff, 0x20c5, 0x2124, 0xffff, 0xffff, + 0x21bc, 0x2224, 0x226b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2335, 0x236d, 0x23ae, 0x23ec, 0x242d, 0xffff, 0xffff, + 0x24da, 0xffff, 0x251d, 0xffff, 0xffff, 0x25b1, 0xffff, 0x2644, + 0xffff, 0xffff, 0xffff, 0xffff, 0x26d6, 0xffff, 0x272c, 0x27a0, + 0x2853, 0x289d, 0xffff, 0xffff, 0xffff, 0x2905, 0x2961, 0x29b7, + // Entry 4C4C0 - 4C4FF + 0xffff, 0xffff, 0x2a5c, 0x2ae8, 0x2b35, 0x2b6d, 0xffff, 0xffff, + 0x2bda, 0x2c1b, 0x2c56, 0xffff, 0x2caf, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2da9, 0x2dea, 0x2e28, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2edd, 0xffff, 0xffff, 0x2f3b, + 0xffff, 0x2f83, 0xffff, 0x2fe3, 0x3021, 0x306b, 0xffff, 0x30c1, + 0x310e, 0xffff, 0xffff, 0xffff, 0x3194, 0x31d5, 0xffff, 0xffff, + 0x11f3, 0x1343, 0x162c, 0x1664, 0xffff, 0xffff, 0x25f5, 0x2d45, + 0x009e, 0x0064, 0x123d, 0x1250, 0x1268, 0x127f, 0x12bb, 0x1313, + // Entry 4C500 - 4C53F + 0x138e, 0x13d7, 0x142f, 0x149b, 0x153c, 0x15c8, 0x1603, 0x16a9, + 0x16e1, 0x1738, 0x1799, 0x17db, 0x1829, 0x1898, 0x1913, 0x1977, + 0x19da, 0x1a21, 0x1a61, 0x1a98, 0x1aa6, 0x1ac6, 0x1af7, 0x1b29, + 0x1b79, 0x1b96, 0x1bcf, 0x1c05, 0x1c43, 0x1c7a, 0x1c9c, 0x1cc1, + 0x1d06, 0x1d48, 0x1d73, 0x1d82, 0x1d9c, 0x1dcd, 0x1e16, 0x1e3e, + 0x1e96, 0x1ed5, 0x1f14, 0x1f74, 0x1fc0, 0x1feb, 0x2004, 0x2035, + 0x2047, 0x2069, 0x209e, 0x20b4, 0x20df, 0x2143, 0x219f, 0x21ac, + 0x21d9, 0x2236, 0x2278, 0x22a3, 0x22bb, 0x22d0, 0x22e1, 0x22fc, + // Entry 4C540 - 4C57F + 0x2316, 0x2342, 0x237d, 0x23bd, 0x23fc, 0x244e, 0x24a1, 0x24bb, + 0x24e6, 0x250f, 0x2531, 0x256a, 0x258b, 0x25c2, 0x262d, 0x2654, + 0x2685, 0x2696, 0x26a6, 0x26bd, 0x26e8, 0x271d, 0x274d, 0x27d6, + 0x2866, 0x28ab, 0x28d8, 0x28e8, 0x28f7, 0x291e, 0x2978, 0x29dc, + 0x2a37, 0x2a45, 0x2a78, 0x2afc, 0x2b42, 0x2b7e, 0x2bb1, 0x2bbe, + 0x2bea, 0x2c29, 0x2c67, 0x2c9a, 0x2ccc, 0x2d17, 0x2d27, 0x2d36, + 0x2d89, 0x2d99, 0x2db9, 0x2df9, 0x2e35, 0x2e60, 0x2e72, 0x2e83, + 0x2e99, 0x2eb2, 0x2ec2, 0x2ecf, 0x2eeb, 0x2f18, 0x2f2c, 0x2f49, + // Entry 4C580 - 4C5BF + 0x2f76, 0x2f98, 0x2fd3, 0x2ff2, 0x3034, 0x307c, 0x30af, 0x30d5, + 0x3120, 0x3155, 0x3164, 0x3178, 0x31a4, 0x31ea, 0x2192, 0x2ac1, + 0x1206, 0x1351, 0x1639, 0x1672, 0x1b6c, 0x257c, 0x2602, 0x2d56, + 0x009e, 0x0064, 0xffff, 0xffff, 0xffff, 0xffff, 0x12e1, 0x132c, + 0x13a8, 0x13f9, 0x1450, 0x14d2, 0x157c, 0x15e1, 0x1619, 0x16bd, + 0x16fe, 0x1762, 0x17b3, 0x17f6, 0x184e, 0x18ca, 0x1937, 0x19a0, + 0x19f8, 0x1a39, 0x1a7e, 0xffff, 0xffff, 0x1ae0, 0xffff, 0x1b4c, + 0xffff, 0x1bae, 0x1be5, 0x1c1c, 0x1c60, 0xffff, 0xffff, 0x1cdc, + // Entry 4C5C0 - 4C5FF + 0x1d22, 0x1d5f, 0xffff, 0xffff, 0xffff, 0x1df3, 0xffff, 0x1e60, + 0x1eb7, 0xffff, 0x1f3a, 0x1f95, 0x1fd7, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2085, 0xffff, 0xffff, 0x2103, 0x216c, 0xffff, 0xffff, + 0x2200, 0x2252, 0x228f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2359, 0x2397, 0x23d6, 0x2416, 0x2479, 0xffff, 0xffff, + 0x24fc, 0xffff, 0x254f, 0xffff, 0xffff, 0x25dd, 0xffff, 0x266e, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2704, 0xffff, 0x2778, 0x2816, + 0x2883, 0x28c3, 0xffff, 0xffff, 0xffff, 0x2941, 0x2999, 0x2a0b, + // Entry 4C600 - 4C63F + 0xffff, 0xffff, 0x2a9e, 0x2b1a, 0x2b59, 0x2b99, 0xffff, 0xffff, + 0x2c04, 0x2c41, 0x2c82, 0xffff, 0x2cf3, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2dd3, 0x2e12, 0x2e4c, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2f03, 0xffff, 0xffff, 0x2f61, + 0xffff, 0x2fb7, 0xffff, 0x300b, 0x3051, 0x3097, 0xffff, 0x30f3, + 0x313c, 0xffff, 0xffff, 0xffff, 0x31be, 0x3209, 0xffff, 0xffff, + 0x1223, 0x1369, 0x1650, 0x168a, 0xffff, 0xffff, 0x2619, 0x2d71, + 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 4C640 - 4C67F + 0x0000, 0x0000, 0x000b, 0x0007, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0013, 0x0004, 0x0021, 0x001b, 0x0018, 0x001e, + 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, + 0x053d, 0x0001, 0x0000, 0x0546, 0x0001, 0x0002, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0007, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0013, 0x0004, + 0x0021, 0x001b, 0x0018, 0x001e, 0x0001, 0x0000, 0x0524, 0x0001, + 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, + // Entry 4C680 - 4C6BF + 0x0003, 0x0004, 0x044c, 0x09b5, 0x0012, 0x0017, 0x0000, 0x0024, + 0x0000, 0x003c, 0x0000, 0x0054, 0x007f, 0x0293, 0x02ab, 0x02cd, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0312, 0x041c, 0x043e, 0x0005, + 0x0000, 0x0000, 0x0000, 0x0000, 0x001d, 0x0001, 0x001f, 0x0001, + 0x0021, 0x0001, 0x000e, 0x0000, 0x0001, 0x0026, 0x0001, 0x0028, + 0x0003, 0x0000, 0x0000, 0x002c, 0x000e, 0x000e, 0xffff, 0x0005, + 0x000e, 0x0017, 0x0022, 0x002d, 0x0036, 0x0041, 0x0052, 0x0063, + 0x0070, 0x007b, 0x0084, 0x008f, 0x0001, 0x003e, 0x0001, 0x0040, + // Entry 4C6C0 - 4C6FF + 0x0003, 0x0000, 0x0000, 0x0044, 0x000e, 0x000e, 0xffff, 0x0098, + 0x00a9, 0x00b6, 0x00c1, 0x00ce, 0x00d5, 0x00e4, 0x00f3, 0x0100, + 0x010d, 0x0116, 0x0121, 0x012e, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x005d, 0x0000, 0x006e, 0x0004, 0x006b, 0x0065, + 0x0062, 0x0068, 0x0001, 0x002f, 0x0015, 0x0001, 0x002f, 0x0028, + 0x0001, 0x0065, 0x0000, 0x0001, 0x000e, 0x013d, 0x0004, 0x007c, + 0x0076, 0x0073, 0x0079, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, + // Entry 4C700 - 4C73F + 0x0088, 0x00ed, 0x0144, 0x0179, 0x024a, 0x0260, 0x0271, 0x0282, + 0x0002, 0x008b, 0x00bc, 0x0003, 0x008f, 0x009e, 0x00ad, 0x000d, + 0x0008, 0xffff, 0x0000, 0x4f2d, 0x4fef, 0x4ff6, 0x4ffd, 0x4f42, + 0x4f49, 0x5004, 0x4f57, 0x500b, 0x4f65, 0x4f6c, 0x000d, 0x000e, + 0xffff, 0x01e4, 0x01e7, 0x01ea, 0x01ed, 0x01ea, 0x01e4, 0x01e4, + 0x01ed, 0x01f0, 0x1ff8, 0x01f6, 0x01f9, 0x000d, 0x000e, 0xffff, + 0x014a, 0x0157, 0x2014, 0x201d, 0x2028, 0x202f, 0x2036, 0x203d, + 0x01a0, 0x01b3, 0x01c2, 0x01d3, 0x0003, 0x00c0, 0x00cf, 0x00de, + // Entry 4C740 - 4C77F + 0x000d, 0x0008, 0xffff, 0x0000, 0x4f2d, 0x4fef, 0x4ff6, 0x5012, + 0x5019, 0x5020, 0x5004, 0x4f57, 0x500b, 0x4f65, 0x4f6c, 0x000d, + 0x000e, 0xffff, 0x01e4, 0x01e7, 0x01ea, 0x01ed, 0x01ea, 0x01e4, + 0x01e4, 0x01ed, 0x01f0, 0x1ff8, 0x01f6, 0x01f9, 0x000d, 0x000e, + 0xffff, 0x014a, 0x0157, 0x2014, 0x201d, 0x204a, 0x2051, 0x2058, + 0x203d, 0x01a0, 0x01b3, 0x01c2, 0x01d3, 0x0002, 0x00f0, 0x011a, + 0x0005, 0x00f6, 0x00ff, 0x0111, 0x0000, 0x0108, 0x0007, 0x000e, + 0x01fc, 0x0203, 0x020a, 0x205f, 0x0218, 0x021f, 0x0226, 0x0007, + // Entry 4C780 - 4C7BF + 0x000e, 0x01f6, 0x0296, 0x0299, 0x01f0, 0x029c, 0x0296, 0x01f0, + 0x0007, 0x0065, 0x000a, 0x000f, 0x0014, 0x0019, 0x001e, 0x0023, + 0x0028, 0x0007, 0x000e, 0x1fa1, 0x2066, 0x0251, 0x2079, 0x026d, + 0x027e, 0x0289, 0x0005, 0x0120, 0x0129, 0x013b, 0x0000, 0x0132, + 0x0007, 0x000e, 0x01fc, 0x0203, 0x020a, 0x205f, 0x0218, 0x021f, + 0x0226, 0x0007, 0x000e, 0x01f6, 0x0296, 0x0299, 0x01f0, 0x029c, + 0x0296, 0x01f0, 0x0007, 0x0065, 0x000a, 0x000f, 0x0014, 0x0019, + 0x001e, 0x0023, 0x0028, 0x0007, 0x000e, 0x1fa1, 0x2066, 0x0251, + // Entry 4C7C0 - 4C7FF + 0x2079, 0x026d, 0x027e, 0x0289, 0x0002, 0x0147, 0x0160, 0x0003, + 0x014b, 0x0152, 0x0159, 0x0005, 0x000e, 0xffff, 0x029f, 0x02a3, + 0x02a7, 0x02ab, 0x0005, 0x000d, 0xffff, 0x0140, 0x0143, 0x0146, + 0x0149, 0x0005, 0x0065, 0xffff, 0x002d, 0x0045, 0x005f, 0x0079, + 0x0003, 0x0164, 0x016b, 0x0172, 0x0005, 0x000e, 0xffff, 0x029f, + 0x02a3, 0x02a7, 0x02ab, 0x0005, 0x000d, 0xffff, 0x0140, 0x0143, + 0x0146, 0x0149, 0x0005, 0x0065, 0xffff, 0x002d, 0x0045, 0x005f, + 0x0079, 0x0002, 0x017c, 0x01e3, 0x0003, 0x0180, 0x01a1, 0x01c2, + // Entry 4C800 - 4C83F + 0x0008, 0x018c, 0x0192, 0x0189, 0x0195, 0x0198, 0x019b, 0x019e, + 0x018f, 0x0001, 0x0065, 0x0097, 0x0001, 0x000e, 0x0331, 0x0001, + 0x0065, 0x00a2, 0x0001, 0x0065, 0x00ad, 0x0001, 0x0065, 0x00bd, + 0x0001, 0x0065, 0x00ad, 0x0001, 0x0065, 0x00ca, 0x0001, 0x0065, + 0x00d5, 0x0008, 0x01ad, 0x01b3, 0x01aa, 0x01b6, 0x01b9, 0x01bc, + 0x01bf, 0x01b0, 0x0001, 0x0065, 0x0097, 0x0001, 0x0000, 0x1f9c, + 0x0001, 0x0065, 0x00a2, 0x0001, 0x0000, 0x21e4, 0x0001, 0x0065, + 0x00de, 0x0001, 0x0065, 0x00ad, 0x0001, 0x0065, 0x00ca, 0x0001, + // Entry 4C840 - 4C87F + 0x0065, 0x00d5, 0x0008, 0x01ce, 0x01d4, 0x01cb, 0x01d7, 0x01da, + 0x01dd, 0x01e0, 0x01d1, 0x0001, 0x0065, 0x0097, 0x0001, 0x000e, + 0x0331, 0x0001, 0x0065, 0x00a2, 0x0001, 0x0065, 0x00ad, 0x0001, + 0x0065, 0x00bd, 0x0001, 0x0065, 0x00ad, 0x0001, 0x0065, 0x00ca, + 0x0001, 0x0065, 0x00d5, 0x0003, 0x01e7, 0x0208, 0x0229, 0x0008, + 0x01f3, 0x01f9, 0x01f0, 0x01fc, 0x01ff, 0x0202, 0x0205, 0x01f6, + 0x0001, 0x0065, 0x0097, 0x0001, 0x000e, 0x0331, 0x0001, 0x0065, + 0x00a2, 0x0001, 0x0065, 0x00ad, 0x0001, 0x0065, 0x00eb, 0x0001, + // Entry 4C880 - 4C8BF + 0x000e, 0x0343, 0x0001, 0x0065, 0x00f6, 0x0001, 0x0065, 0x00ff, + 0x0008, 0x0214, 0x021a, 0x0211, 0x021d, 0x0220, 0x0223, 0x0226, + 0x0217, 0x0001, 0x0065, 0x0097, 0x0001, 0x000e, 0x0331, 0x0001, + 0x0065, 0x00a2, 0x0001, 0x0065, 0x00ad, 0x0001, 0x0065, 0x00eb, + 0x0001, 0x000e, 0x0343, 0x0001, 0x0065, 0x00f6, 0x0001, 0x0065, + 0x00ff, 0x0008, 0x0235, 0x023b, 0x0232, 0x023e, 0x0241, 0x0244, + 0x0247, 0x0238, 0x0001, 0x0065, 0x0097, 0x0001, 0x000e, 0x0331, + 0x0001, 0x0065, 0x00a2, 0x0001, 0x0065, 0x00ad, 0x0001, 0x0065, + // Entry 4C8C0 - 4C8FF + 0x00eb, 0x0001, 0x000e, 0x0343, 0x0001, 0x0065, 0x00f6, 0x0001, + 0x0065, 0x00ff, 0x0003, 0x0254, 0x025a, 0x024e, 0x0001, 0x0250, + 0x0002, 0x0065, 0x0106, 0x011d, 0x0001, 0x0256, 0x0002, 0x000e, + 0x037d, 0x0389, 0x0001, 0x025c, 0x0002, 0x000e, 0x0391, 0x2084, + 0x0004, 0x026e, 0x0268, 0x0265, 0x026b, 0x0001, 0x000e, 0x03a2, + 0x0001, 0x000e, 0x03b4, 0x0001, 0x000e, 0x03c0, 0x0001, 0x000d, + 0x0225, 0x0004, 0x027f, 0x0279, 0x0276, 0x027c, 0x0001, 0x0000, + 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, + // Entry 4C900 - 4C93F + 0x0000, 0x0546, 0x0004, 0x0290, 0x028a, 0x0287, 0x028d, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0295, 0x0001, 0x0297, 0x0003, + 0x0000, 0x0000, 0x029b, 0x000e, 0x000e, 0x0418, 0x03c9, 0x03d4, + 0x03e1, 0x03ee, 0x03f9, 0x0404, 0x040f, 0x0424, 0x042f, 0x0438, + 0x0443, 0x044e, 0x0453, 0x0005, 0x02b1, 0x0000, 0x0000, 0x0000, + 0x02c6, 0x0001, 0x02b3, 0x0003, 0x0000, 0x0000, 0x02b7, 0x000d, + 0x000e, 0xffff, 0x045c, 0x0469, 0x0478, 0x0487, 0x0492, 0x04a1, + // Entry 4C940 - 4C97F + 0x04ac, 0x04b9, 0x04c8, 0x04d9, 0x04e4, 0x04ed, 0x0001, 0x02c8, + 0x0001, 0x02ca, 0x0001, 0x000e, 0x04fc, 0x0005, 0x02d3, 0x0000, + 0x0000, 0x0000, 0x030b, 0x0002, 0x02d6, 0x02f8, 0x0003, 0x02da, + 0x0000, 0x02e9, 0x000d, 0x000e, 0xffff, 0x0505, 0x050d, 0x0515, + 0x051f, 0x0529, 0x0533, 0x053d, 0x0545, 0x054b, 0x0553, 0x0559, + 0x0564, 0x000d, 0x000e, 0xffff, 0x056f, 0x057e, 0x0589, 0x0596, + 0x05a4, 0x05b3, 0x05c3, 0x05ce, 0x05db, 0x05ea, 0x05f5, 0x0609, + 0x0003, 0x0000, 0x0000, 0x02fc, 0x000d, 0x000e, 0xffff, 0x061b, + // Entry 4C980 - 4C9BF + 0x062a, 0x0635, 0x0640, 0x064b, 0x065a, 0x0669, 0x05ce, 0x0674, + 0x0683, 0x068e, 0x069e, 0x0001, 0x030d, 0x0001, 0x030f, 0x0001, + 0x000e, 0x06ae, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0319, + 0x040b, 0x0001, 0x031b, 0x0001, 0x031d, 0x00ec, 0x000e, 0x06b3, + 0x06ca, 0x06e3, 0x06fc, 0x0711, 0x0728, 0x073f, 0x0754, 0x076b, + 0x0780, 0x0797, 0x07b0, 0x07d2, 0x07f2, 0x0812, 0x0832, 0x0852, + 0x0867, 0x087b, 0x0896, 0x08ad, 0x08c4, 0x08db, 0x08f0, 0x0905, + 0x091a, 0x0931, 0x0948, 0x095f, 0x0978, 0x098d, 0x09a6, 0x09bd, + // Entry 4C9C0 - 4C9FF + 0x09d2, 0x09e7, 0x09fe, 0x0a17, 0x0a34, 0x0a4f, 0x0a62, 0x0a77, + 0x0a8a, 0x0aa5, 0x0abb, 0x0ad2, 0x0aeb, 0x0b02, 0x0b17, 0x0b2b, + 0x0b40, 0x0b5b, 0x0b74, 0x0b8a, 0x0ba3, 0x0bba, 0x0bd3, 0x0bea, + 0x0c01, 0x0c1a, 0x0c37, 0x0c50, 0x0c6d, 0x0c84, 0x0c9d, 0x0cb6, + 0x0cd3, 0x0cec, 0x0d03, 0x0d20, 0x0d37, 0x0d50, 0x0d69, 0x0d80, + 0x0d97, 0x0db2, 0x0dc9, 0x0de0, 0x0df7, 0x0e10, 0x0e28, 0x0e41, + 0x0e59, 0x0e70, 0x0e89, 0x0ea2, 0x0ebb, 0x0ed4, 0x0eeb, 0x0f02, + 0x0f19, 0x0f30, 0x0f49, 0x0f64, 0x0f7d, 0x0f96, 0x0faf, 0x0fcc, + // Entry 4CA00 - 4CA3F + 0x0fe1, 0x0ffa, 0x1013, 0x102b, 0x1040, 0x1057, 0x1070, 0x1087, + 0x109e, 0x10b5, 0x10d4, 0x10ed, 0x1108, 0x111f, 0x1138, 0x1153, + 0x116b, 0x1184, 0x11a3, 0x11bc, 0x11d5, 0x11e8, 0x1201, 0x121c, + 0x1235, 0x124e, 0x1265, 0x1282, 0x12a1, 0x12ba, 0x12d9, 0x12ed, + 0x1304, 0x131f, 0x1336, 0x134f, 0x1368, 0x137f, 0x1398, 0x13ae, + 0x13c5, 0x13dd, 0x13f6, 0x140d, 0x1420, 0x1439, 0x1450, 0x146b, + 0x1484, 0x149f, 0x14b8, 0x14cd, 0x14e4, 0x14fd, 0x1514, 0x152f, + 0x1546, 0x1561, 0x157e, 0x1597, 0x15ae, 0x15c7, 0x15e2, 0x15fb, + // Entry 4CA40 - 4CA7F + 0x1618, 0x162f, 0x1646, 0x1663, 0x167a, 0x1693, 0x16b0, 0x16c9, + 0x16dc, 0x16f9, 0x170e, 0x1725, 0x173e, 0x175b, 0x1773, 0x178e, + 0x17ab, 0x17c2, 0x17dd, 0x17f6, 0x180f, 0x1826, 0x1841, 0x185a, + 0x1875, 0x188c, 0x18a5, 0x18bc, 0x18d5, 0x18f2, 0x190d, 0x1924, + 0x193f, 0x1958, 0x1971, 0x198e, 0x19a7, 0x19c0, 0x19d8, 0x19ef, + 0x1a08, 0x1a1b, 0x1a3a, 0x1a51, 0x1a6c, 0x1a83, 0x1a9c, 0x1ab5, + 0x1ad2, 0x1ae9, 0x1b04, 0x1b1d, 0x1b38, 0x1b51, 0x1b6a, 0x1b82, + 0x1b9f, 0x1bb8, 0x1bce, 0x1be9, 0x1c04, 0x1c1d, 0x1c36, 0x1c51, + // Entry 4CA80 - 4CABF + 0x1c6a, 0x1c81, 0x1c98, 0x1cb1, 0x1cc9, 0x1ce4, 0x1cfd, 0x1d16, + 0x1d21, 0x1d2c, 0x1d35, 0x0004, 0x0419, 0x0413, 0x0410, 0x0416, + 0x0001, 0x000c, 0x0000, 0x0001, 0x000c, 0x0012, 0x0001, 0x000c, + 0x001e, 0x0001, 0x000e, 0x1d42, 0x0005, 0x0422, 0x0000, 0x0000, + 0x0000, 0x0437, 0x0001, 0x0424, 0x0003, 0x0000, 0x0000, 0x0428, + 0x000d, 0x000e, 0xffff, 0x1d4b, 0x1d5e, 0x1d73, 0x1d80, 0x1d87, + 0x1d94, 0x1da5, 0x1dae, 0x1db7, 0x1dc0, 0x1dc7, 0x1dd4, 0x0001, + 0x0439, 0x0001, 0x043b, 0x0001, 0x000e, 0x1de1, 0x0005, 0x0000, + // Entry 4CAC0 - 4CAFF + 0x0000, 0x0000, 0x0000, 0x0444, 0x0001, 0x0446, 0x0001, 0x0448, + 0x0002, 0x000e, 0x1de6, 0x1df2, 0x0042, 0x048f, 0x0494, 0x0499, + 0x049e, 0x04bb, 0x04d8, 0x04f5, 0x0512, 0x052f, 0x054c, 0x0569, + 0x0586, 0x05a3, 0x05c4, 0x05e5, 0x0606, 0x060b, 0x0610, 0x0615, + 0x0634, 0x064c, 0x0664, 0x0669, 0x066e, 0x0673, 0x0678, 0x067d, + 0x0682, 0x0687, 0x068c, 0x0691, 0x06ab, 0x06c5, 0x06df, 0x06f9, + 0x0713, 0x072d, 0x0747, 0x0761, 0x077b, 0x0795, 0x07af, 0x07c9, + 0x07e3, 0x07fd, 0x0817, 0x0831, 0x084b, 0x0865, 0x087f, 0x0899, + // Entry 4CB00 - 4CB3F + 0x08b3, 0x08b8, 0x08bd, 0x08c2, 0x08de, 0x08f6, 0x090e, 0x092a, + 0x0942, 0x095a, 0x0976, 0x098e, 0x09a6, 0x09ab, 0x09b0, 0x0001, + 0x0491, 0x0001, 0x0009, 0x08c0, 0x0001, 0x0496, 0x0001, 0x0009, + 0x08c0, 0x0001, 0x049b, 0x0001, 0x0009, 0x08c0, 0x0003, 0x04a2, + 0x04a5, 0x04aa, 0x0001, 0x0009, 0x08c7, 0x0003, 0x0065, 0x012d, + 0x0147, 0x015b, 0x0002, 0x04ad, 0x04b4, 0x0005, 0x000e, 0x1e6d, + 0x1e41, 0xffff, 0xffff, 0x1e57, 0x0005, 0x000e, 0x1eb3, 0x1e9b, + 0xffff, 0xffff, 0x1e9b, 0x0003, 0x04bf, 0x04c2, 0x04c7, 0x0001, + // Entry 4CB40 - 4CB7F + 0x0047, 0x119c, 0x0003, 0x0065, 0x0177, 0x018c, 0x019b, 0x0002, + 0x04ca, 0x04d1, 0x0005, 0x0047, 0x11a4, 0x11a4, 0xffff, 0xffff, + 0x11a4, 0x0005, 0x0065, 0x01b2, 0x01b2, 0xffff, 0xffff, 0x01b2, + 0x0003, 0x04dc, 0x04df, 0x04e4, 0x0001, 0x0008, 0x0b17, 0x0003, + 0x0065, 0x01c5, 0x01d6, 0x01e1, 0x0002, 0x04e7, 0x04ee, 0x0005, + 0x0065, 0x01f4, 0x01f4, 0xffff, 0xffff, 0x01f4, 0x0005, 0x0065, + 0x0201, 0x0201, 0xffff, 0xffff, 0x0201, 0x0003, 0x04f9, 0x04fc, + 0x0501, 0x0001, 0x0008, 0x0b3d, 0x0003, 0x0065, 0x0210, 0x0230, + // Entry 4CB80 - 4CBBF + 0x024a, 0x0002, 0x0504, 0x050b, 0x0005, 0x0065, 0x0284, 0x026c, + 0xffff, 0xffff, 0x0284, 0x0005, 0x0065, 0x029e, 0x029e, 0xffff, + 0xffff, 0x029e, 0x0003, 0x0516, 0x0519, 0x051e, 0x0001, 0x0008, + 0x0ca5, 0x0003, 0x0065, 0x0210, 0x0230, 0x024a, 0x0002, 0x0521, + 0x0528, 0x0005, 0x0065, 0x02ba, 0x02ba, 0xffff, 0xffff, 0x02ba, + 0x0005, 0x0065, 0x02c9, 0x02c9, 0xffff, 0xffff, 0x02c9, 0x0003, + 0x0533, 0x0536, 0x053b, 0x0001, 0x0008, 0x0ca5, 0x0003, 0x0065, + 0x0210, 0x0230, 0x024a, 0x0002, 0x053e, 0x0545, 0x0005, 0x0065, + // Entry 4CBC0 - 4CBFF + 0x02ba, 0x02ba, 0xffff, 0xffff, 0x02ba, 0x0005, 0x0065, 0x02c9, + 0x02c9, 0xffff, 0xffff, 0x02c9, 0x0003, 0x0550, 0x0553, 0x0558, + 0x0001, 0x0009, 0x0bae, 0x0003, 0x0065, 0x02da, 0x02f6, 0x030c, + 0x0002, 0x055b, 0x0562, 0x0005, 0x000e, 0x1f45, 0x1f1b, 0xffff, + 0xffff, 0x1f2f, 0x0005, 0x000e, 0x1f89, 0x1f71, 0xffff, 0xffff, + 0x1f71, 0x0003, 0x056d, 0x0570, 0x0575, 0x0001, 0x0008, 0x0e09, + 0x0003, 0x0065, 0x032a, 0x0341, 0x0352, 0x0002, 0x0578, 0x057f, + 0x0005, 0x0065, 0x036b, 0x036b, 0xffff, 0xffff, 0x036b, 0x0005, + // Entry 4CC00 - 4CC3F + 0x0065, 0x037c, 0x037c, 0xffff, 0xffff, 0x037c, 0x0003, 0x058a, + 0x058d, 0x0592, 0x0001, 0x0041, 0x0050, 0x0003, 0x0065, 0x038f, + 0x03a2, 0x03af, 0x0002, 0x0595, 0x059c, 0x0005, 0x0065, 0x03c4, + 0x03c4, 0xffff, 0xffff, 0x03c4, 0x0005, 0x0065, 0x03d1, 0x03d1, + 0xffff, 0xffff, 0x03d1, 0x0004, 0x05a8, 0x05ab, 0x05b0, 0x05c1, + 0x0001, 0x000e, 0x1fa1, 0x0003, 0x0065, 0x03e0, 0x03fa, 0x040e, + 0x0002, 0x05b3, 0x05ba, 0x0005, 0x000f, 0x002c, 0x0000, 0xffff, + 0xffff, 0x0016, 0x0005, 0x000f, 0x0072, 0x005a, 0xffff, 0xffff, + // Entry 4CC40 - 4CC7F + 0x005a, 0x0001, 0x0065, 0x042a, 0x0004, 0x05c9, 0x05cc, 0x05d1, + 0x05e2, 0x0001, 0x0047, 0x0c07, 0x0003, 0x0065, 0x0452, 0x0467, + 0x0476, 0x0002, 0x05d4, 0x05db, 0x0005, 0x0047, 0x169f, 0x169f, + 0xffff, 0xffff, 0x169f, 0x0005, 0x0065, 0x048d, 0x048d, 0xffff, + 0xffff, 0x048d, 0x0001, 0x0065, 0x042a, 0x0004, 0x05ea, 0x05ed, + 0x05f2, 0x0603, 0x0001, 0x0065, 0x04a0, 0x0003, 0x0065, 0x04a4, + 0x04b5, 0x04c0, 0x0002, 0x05f5, 0x05fc, 0x0005, 0x0065, 0x04d3, + 0x04d3, 0xffff, 0xffff, 0x04d3, 0x0005, 0x0065, 0x04e0, 0x04e0, + // Entry 4CC80 - 4CCBF + 0xffff, 0xffff, 0x04e0, 0x0001, 0x0065, 0x042a, 0x0001, 0x0608, + 0x0001, 0x0065, 0x04ef, 0x0001, 0x060d, 0x0001, 0x0065, 0x050c, + 0x0001, 0x0612, 0x0001, 0x0065, 0x050c, 0x0003, 0x0619, 0x061c, + 0x0623, 0x0001, 0x000f, 0x008a, 0x0005, 0x000f, 0x00a2, 0x00ab, + 0x00b6, 0x0091, 0x00c1, 0x0002, 0x0626, 0x062d, 0x0005, 0x000f, + 0x00e6, 0x00d6, 0xffff, 0xffff, 0x00e6, 0x0005, 0x000f, 0x010a, + 0x010a, 0xffff, 0xffff, 0x010a, 0x0003, 0x0638, 0x0000, 0x063b, + 0x0001, 0x0008, 0x10c6, 0x0002, 0x063e, 0x0645, 0x0005, 0x0065, + // Entry 4CCC0 - 4CCFF + 0x051f, 0x051f, 0xffff, 0xffff, 0x051f, 0x0005, 0x0065, 0x052c, + 0x052c, 0xffff, 0xffff, 0x052c, 0x0003, 0x0650, 0x0000, 0x0653, + 0x0001, 0x0008, 0x10c6, 0x0002, 0x0656, 0x065d, 0x0005, 0x0065, + 0x051f, 0x051f, 0xffff, 0xffff, 0x051f, 0x0005, 0x0065, 0x052c, + 0x052c, 0xffff, 0xffff, 0x052c, 0x0001, 0x0666, 0x0001, 0x0065, + 0x053b, 0x0001, 0x066b, 0x0001, 0x0065, 0x0552, 0x0001, 0x0670, + 0x0001, 0x0065, 0x0552, 0x0001, 0x0675, 0x0001, 0x000f, 0x011e, + 0x0001, 0x067a, 0x0001, 0x000f, 0x011e, 0x0001, 0x067f, 0x0001, + // Entry 4CD00 - 4CD3F + 0x000f, 0x011e, 0x0001, 0x0684, 0x0001, 0x0065, 0x0564, 0x0001, + 0x0689, 0x0001, 0x0065, 0x0564, 0x0001, 0x068e, 0x0001, 0x0065, + 0x0564, 0x0003, 0x0000, 0x0695, 0x069a, 0x0003, 0x0065, 0x03e0, + 0x057b, 0x040e, 0x0002, 0x069d, 0x06a4, 0x0005, 0x000f, 0x002c, + 0x0000, 0xffff, 0xffff, 0x0016, 0x0005, 0x000f, 0x0072, 0x005a, + 0xffff, 0xffff, 0x005a, 0x0003, 0x0000, 0x06af, 0x06b4, 0x0003, + 0x0065, 0x058b, 0x0599, 0x05a3, 0x0002, 0x06b7, 0x06be, 0x0005, + 0x000f, 0x002c, 0x0000, 0xffff, 0xffff, 0x0016, 0x0005, 0x000f, + // Entry 4CD40 - 4CD7F + 0x0072, 0x005a, 0xffff, 0xffff, 0x005a, 0x0003, 0x0000, 0x06c9, + 0x06ce, 0x0003, 0x0065, 0x05b1, 0x0599, 0x05c5, 0x0002, 0x06d1, + 0x06d8, 0x0005, 0x000f, 0x002c, 0x0000, 0xffff, 0xffff, 0x0016, + 0x0005, 0x000f, 0x0072, 0x005a, 0xffff, 0xffff, 0x005a, 0x0003, + 0x0000, 0x06e3, 0x06e8, 0x0003, 0x0065, 0x05db, 0x05fd, 0x0613, + 0x0002, 0x06eb, 0x06f2, 0x0005, 0x0065, 0x066f, 0x0637, 0xffff, + 0xffff, 0x0653, 0x0005, 0x0065, 0x06ab, 0x068d, 0xffff, 0xffff, + 0x068d, 0x0003, 0x0000, 0x06fd, 0x0702, 0x0003, 0x0065, 0x06cb, + // Entry 4CD80 - 4CDBF + 0x06e1, 0x06eb, 0x0002, 0x0705, 0x070c, 0x0005, 0x0065, 0x066f, + 0x0637, 0xffff, 0xffff, 0x0653, 0x0005, 0x0065, 0x06ab, 0x068d, + 0xffff, 0xffff, 0x068d, 0x0003, 0x0000, 0x0717, 0x071c, 0x0003, + 0x0065, 0x06cb, 0x06e1, 0x06eb, 0x0002, 0x071f, 0x0726, 0x0005, + 0x0065, 0x066f, 0x0637, 0xffff, 0xffff, 0x0703, 0x0005, 0x0065, + 0x06ab, 0x068d, 0xffff, 0xffff, 0x068d, 0x0003, 0x0000, 0x0731, + 0x0736, 0x0003, 0x0065, 0x071e, 0x073a, 0x074a, 0x0002, 0x0739, + 0x0740, 0x0005, 0x0065, 0x0794, 0x0768, 0xffff, 0xffff, 0x077e, + // Entry 4CDC0 - 4CDFF + 0x0005, 0x0065, 0x07c4, 0x07ac, 0xffff, 0xffff, 0x07ac, 0x0003, + 0x0000, 0x074b, 0x0750, 0x0003, 0x0065, 0x07de, 0x07f4, 0x07fe, + 0x0002, 0x0753, 0x075a, 0x0005, 0x0065, 0x0794, 0x0768, 0xffff, + 0xffff, 0x077e, 0x0005, 0x0065, 0x07c4, 0x07ac, 0xffff, 0xffff, + 0x07ac, 0x0003, 0x0000, 0x0765, 0x076a, 0x0003, 0x0065, 0x07de, + 0x07f4, 0x07fe, 0x0002, 0x076d, 0x0774, 0x0005, 0x0065, 0x0794, + 0x0768, 0xffff, 0xffff, 0x077e, 0x0005, 0x0065, 0x07c4, 0x07ac, + 0xffff, 0xffff, 0x07ac, 0x0003, 0x0000, 0x077f, 0x0784, 0x0003, + // Entry 4CE00 - 4CE3F + 0x0065, 0x0816, 0x082e, 0x083c, 0x0002, 0x0787, 0x078e, 0x0005, + 0x0065, 0x087e, 0x0856, 0xffff, 0xffff, 0x086a, 0x0005, 0x0065, + 0x08a8, 0x0892, 0xffff, 0xffff, 0x0892, 0x0003, 0x0000, 0x0799, + 0x079e, 0x0003, 0x0065, 0x08be, 0x08d2, 0x08dc, 0x0002, 0x07a1, + 0x07a8, 0x0005, 0x0065, 0x087e, 0x0856, 0xffff, 0xffff, 0x086a, + 0x0005, 0x0065, 0x08a8, 0x0892, 0xffff, 0xffff, 0x0892, 0x0003, + 0x0000, 0x07b3, 0x07b8, 0x0003, 0x0065, 0x08be, 0x08d2, 0x08dc, + 0x0002, 0x07bb, 0x07c2, 0x0005, 0x0065, 0x087e, 0x0856, 0xffff, + // Entry 4CE40 - 4CE7F + 0xffff, 0x086a, 0x0005, 0x0065, 0x08a8, 0x0892, 0xffff, 0xffff, + 0x0892, 0x0003, 0x0000, 0x07cd, 0x07d2, 0x0003, 0x0065, 0x08f2, + 0x0912, 0x0926, 0x0002, 0x07d5, 0x07dc, 0x0005, 0x0065, 0x097c, + 0x0948, 0xffff, 0xffff, 0x0962, 0x0005, 0x0065, 0x09b4, 0x0998, + 0xffff, 0xffff, 0x0998, 0x0003, 0x0000, 0x07e7, 0x07ec, 0x0003, + 0x0065, 0x09d2, 0x09e8, 0x09f2, 0x0002, 0x07ef, 0x07f6, 0x0005, + 0x0065, 0x097c, 0x0948, 0xffff, 0xffff, 0x0962, 0x0005, 0x0065, + 0x09b4, 0x0998, 0xffff, 0xffff, 0x0998, 0x0003, 0x0000, 0x0801, + // Entry 4CE80 - 4CEBF + 0x0806, 0x0003, 0x0065, 0x09d2, 0x09e8, 0x09f2, 0x0002, 0x0809, + 0x0810, 0x0005, 0x0065, 0x097c, 0x0948, 0xffff, 0xffff, 0x0962, + 0x0005, 0x0065, 0x09b4, 0x0998, 0xffff, 0xffff, 0x0998, 0x0003, + 0x0000, 0x081b, 0x0820, 0x0003, 0x0065, 0x0a0a, 0x0a24, 0x0a32, + 0x0002, 0x0823, 0x082a, 0x0005, 0x0065, 0x0a76, 0x0a4e, 0xffff, + 0xffff, 0x0a62, 0x0005, 0x0065, 0x0aa2, 0x0a8c, 0xffff, 0xffff, + 0x0a8c, 0x0003, 0x0000, 0x0835, 0x083a, 0x0003, 0x0065, 0x0aba, + 0x0ad0, 0x0ada, 0x0002, 0x083d, 0x0844, 0x0005, 0x0065, 0x0a76, + // Entry 4CEC0 - 4CEFF + 0x0a4e, 0xffff, 0xffff, 0x0a62, 0x0005, 0x0065, 0x0aa2, 0x0a8c, + 0xffff, 0xffff, 0x0a8c, 0x0003, 0x0000, 0x084f, 0x0854, 0x0003, + 0x0065, 0x0aba, 0x0ad0, 0x0ada, 0x0002, 0x0857, 0x085e, 0x0005, + 0x0065, 0x0a76, 0x0a4e, 0xffff, 0xffff, 0x0a62, 0x0005, 0x0065, + 0x0aa2, 0x0a8c, 0xffff, 0xffff, 0x0a8c, 0x0003, 0x0000, 0x0869, + 0x086e, 0x0003, 0x0065, 0x0af2, 0x0b0c, 0x0b1c, 0x0002, 0x0871, + 0x0878, 0x0005, 0x0065, 0x0b64, 0x0b38, 0xffff, 0xffff, 0x0b4e, + 0x0005, 0x0065, 0x0b92, 0x0b7a, 0xffff, 0xffff, 0x0b7a, 0x0003, + // Entry 4CF00 - 4CF3F + 0x0000, 0x0883, 0x0888, 0x0003, 0x0065, 0x0baa, 0x0bbe, 0x0bc8, + 0x0002, 0x088b, 0x0892, 0x0005, 0x0065, 0x0b64, 0x0b38, 0xffff, + 0xffff, 0x0b4e, 0x0005, 0x0065, 0x0b92, 0x0b7a, 0xffff, 0xffff, + 0x0b7a, 0x0003, 0x0000, 0x089d, 0x08a2, 0x0003, 0x0065, 0x0baa, + 0x0bbe, 0x0bc8, 0x0002, 0x08a5, 0x08ac, 0x0005, 0x0065, 0x0b64, + 0x0b38, 0xffff, 0xffff, 0x0b4e, 0x0005, 0x0065, 0x0b92, 0x0b7a, + 0xffff, 0xffff, 0x0b7a, 0x0001, 0x08b5, 0x0001, 0x0065, 0x0bde, + 0x0001, 0x08ba, 0x0001, 0x0065, 0x0bde, 0x0001, 0x08bf, 0x0001, + // Entry 4CF40 - 4CF7F + 0x0065, 0x0bde, 0x0003, 0x08c6, 0x08c9, 0x08cd, 0x0001, 0x0065, + 0x0c00, 0x0002, 0x0065, 0xffff, 0x0c07, 0x0002, 0x08d0, 0x08d7, + 0x0005, 0x000f, 0x0178, 0x0156, 0xffff, 0xffff, 0x0166, 0x0005, + 0x000f, 0x01b0, 0x019c, 0xffff, 0xffff, 0x019c, 0x0003, 0x08e2, + 0x0000, 0x08e5, 0x0001, 0x0047, 0x1e3a, 0x0002, 0x08e8, 0x08ef, + 0x0005, 0x0065, 0x0c19, 0x0c19, 0xffff, 0xffff, 0x0c19, 0x0005, + 0x0065, 0x0c26, 0x0c26, 0xffff, 0xffff, 0x0c26, 0x0003, 0x08fa, + 0x0000, 0x08fd, 0x0001, 0x0047, 0x1e3a, 0x0002, 0x0900, 0x0907, + // Entry 4CF80 - 4CFBF + 0x0005, 0x0065, 0x0c19, 0x0c19, 0xffff, 0xffff, 0x0c19, 0x0005, + 0x0065, 0x0c26, 0x0c26, 0xffff, 0xffff, 0x0c26, 0x0003, 0x0912, + 0x0915, 0x0919, 0x0001, 0x000f, 0x01c4, 0x0002, 0x0065, 0xffff, + 0x0c35, 0x0002, 0x091c, 0x0923, 0x0005, 0x000f, 0x01e3, 0x01cf, + 0xffff, 0xffff, 0x01e3, 0x0005, 0x000f, 0x020f, 0x020f, 0xffff, + 0xffff, 0x020f, 0x0003, 0x092e, 0x0000, 0x0931, 0x0001, 0x0012, + 0x0dff, 0x0002, 0x0934, 0x093b, 0x0005, 0x0047, 0x1e88, 0x1e88, + 0xffff, 0xffff, 0x1e88, 0x0005, 0x0065, 0x0c4b, 0x0c4b, 0xffff, + // Entry 4CFC0 - 4CFFF + 0xffff, 0x0c4b, 0x0003, 0x0946, 0x0000, 0x0949, 0x0001, 0x0012, + 0x0dff, 0x0002, 0x094c, 0x0953, 0x0005, 0x0047, 0x1e88, 0x1e88, + 0xffff, 0xffff, 0x1e88, 0x0005, 0x0065, 0x0c4b, 0x0c4b, 0xffff, + 0xffff, 0x0c4b, 0x0003, 0x095e, 0x0961, 0x0965, 0x0001, 0x000f, + 0x0227, 0x0002, 0x0065, 0xffff, 0x0c5e, 0x0002, 0x0968, 0x096f, + 0x0005, 0x0065, 0x0c97, 0x0c67, 0xffff, 0xffff, 0x0c7f, 0x0005, + 0x000f, 0x02ac, 0x0292, 0xffff, 0xffff, 0x0292, 0x0003, 0x097a, + 0x0000, 0x097d, 0x0001, 0x0012, 0x0e71, 0x0002, 0x0980, 0x0987, + // Entry 4D000 - 4D03F + 0x0005, 0x0047, 0x1f16, 0x1f16, 0xffff, 0xffff, 0x1f16, 0x0005, + 0x0065, 0x0caf, 0x0caf, 0xffff, 0xffff, 0x0caf, 0x0003, 0x0992, + 0x0000, 0x0995, 0x0001, 0x0065, 0x0cc2, 0x0002, 0x0998, 0x099f, + 0x0005, 0x0065, 0x0cc6, 0x0cc6, 0xffff, 0xffff, 0x0cc6, 0x0005, + 0x0065, 0x0cd3, 0x0cd3, 0xffff, 0xffff, 0x0cd3, 0x0001, 0x09a8, + 0x0001, 0x0047, 0x1f3c, 0x0001, 0x09ad, 0x0001, 0x0047, 0x1f3c, + 0x0001, 0x09b2, 0x0001, 0x0047, 0x1f3c, 0x0004, 0x09ba, 0x09bf, + 0x09c4, 0x09d3, 0x0003, 0x0000, 0x1dc7, 0x3d57, 0x3d5e, 0x0003, + // Entry 4D040 - 4D07F + 0x0000, 0x1de0, 0x3d62, 0x3d7d, 0x0002, 0x0000, 0x09c7, 0x0003, + 0x0000, 0x09ce, 0x09cb, 0x0001, 0x0065, 0x0ce2, 0x0003, 0x0065, + 0xffff, 0x0d1d, 0x0d47, 0x0002, 0x0bba, 0x09d6, 0x0003, 0x09da, + 0x0b1a, 0x0a7a, 0x009e, 0x000f, 0xffff, 0xffff, 0xffff, 0xffff, + 0x03ff, 0x61b9, 0x0594, 0x626a, 0x6341, 0x640c, 0x64e3, 0x0841, + 0x65ba, 0x09c4, 0x0a53, 0x0ae2, 0x6721, 0x407a, 0x0cae, 0x0d88, + 0x0e8f, 0x0f5d, 0x102b, 0x10c0, 0x1137, 0xffff, 0xffff, 0x11f8, + 0xffff, 0x6a41, 0xffff, 0x1365, 0x13dc, 0x144d, 0x14c4, 0xffff, + // Entry 4D080 - 4D0BF + 0xffff, 0x15ac, 0x163b, 0x6d00, 0xffff, 0xffff, 0xffff, 0x17bc, + 0xffff, 0x1880, 0x192d, 0xffff, 0x19e0, 0x1a93, 0x1b55, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1c70, 0xffff, 0xffff, 0x6fe7, 0x707f, + 0xffff, 0xffff, 0x1f06, 0x1fc2, 0x2051, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x21d9, 0x224a, 0x22c7, 0x2356, 0x23df, + 0xffff, 0xffff, 0x7358, 0xffff, 0x25c4, 0xffff, 0xffff, 0x26bd, + 0xffff, 0x27da, 0xffff, 0xffff, 0xffff, 0xffff, 0x28d4, 0xffff, + 0x75ad, 0x7663, 0x297f, 0x2a11, 0xffff, 0xffff, 0xffff, 0x2ad6, + // Entry 4D0C0 - 4D0FF + 0x2b86, 0x7885, 0xffff, 0xffff, 0x2cf4, 0x2def, 0x2e8a, 0x2efb, + 0xffff, 0xffff, 0x2fc8, 0x3051, 0x30c2, 0xffff, 0x7b88, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x331d, 0x33a0, 0x341d, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x7d36, 0xffff, + 0xffff, 0x362c, 0xffff, 0x36b7, 0xffff, 0x3770, 0x37f3, 0x3888, + 0xffff, 0x3929, 0x39c4, 0xffff, 0xffff, 0xffff, 0x3abf, 0x3b42, + 0xffff, 0xffff, 0x02ed, 0x0517, 0x08be, 0x0941, 0xffff, 0xffff, + 0x2743, 0x325c, 0x009e, 0x000f, 0x6165, 0x0384, 0x03b1, 0x03da, + // Entry 4D100 - 4D13F + 0x0428, 0x61c6, 0x6218, 0x62a7, 0x637a, 0x6449, 0x6520, 0x0859, + 0x65d0, 0x09e2, 0x6647, 0x66a5, 0x673f, 0x4098, 0x0ce5, 0x0dce, + 0x0ec2, 0x0f90, 0x68d5, 0x6937, 0x6985, 0x11c6, 0x11dc, 0x69e3, + 0x1287, 0x6a70, 0x134d, 0x6af0, 0x6b3e, 0x1461, 0x6ba8, 0x6c06, + 0x157a, 0x6c2d, 0x6c8b, 0x6d09, 0x1759, 0x1771, 0x1797, 0x6d53, + 0x1866, 0x18a8, 0x1957, 0x6e2b, 0x1a0a, 0x6e81, 0x6f01, 0x1bc6, + 0x1bf3, 0x1c36, 0x6f4b, 0x6f65, 0x1cf3, 0x6fbb, 0x7007, 0x709f, + 0x7117, 0x1eec, 0x1f33, 0x716b, 0x71c7, 0x20c2, 0x20f3, 0x2120, + // Entry 4D140 - 4D17F + 0x213c, 0x2173, 0x21a6, 0x7211, 0x725b, 0x22e5, 0x2372, 0x241a, + 0x24c3, 0x24f6, 0x2541, 0x25ae, 0x739b, 0x7401, 0x741f, 0x7440, + 0x74ce, 0x74f5, 0x285b, 0x2877, 0x2891, 0x28a9, 0x754b, 0x2969, + 0x75d7, 0x7683, 0x76fb, 0x775b, 0x2a8e, 0x2aaa, 0x2ac0, 0x77ad, + 0x7821, 0x789c, 0x2cb9, 0x2ccd, 0x7902, 0x7980, 0x79e6, 0x7a30, + 0x2f84, 0x2f9a, 0x7a8a, 0x7ae4, 0x7b2e, 0x314b, 0x7baa, 0x322a, + 0x7c26, 0x7c3e, 0x32eb, 0x3305, 0x7c60, 0x33b8, 0x7cb6, 0x3494, + 0x7d04, 0x34df, 0x350c, 0x3531, 0x354b, 0x355f, 0x7d4e, 0x35f2, + // Entry 4D180 - 4D1BF + 0x3612, 0x7da0, 0x7dee, 0x7e02, 0x3758, 0x7e6c, 0x7ec2, 0x7f24, + 0x390b, 0x7f7a, 0x7fe0, 0x3a53, 0x3a6b, 0x3a8c, 0x803e, 0x8094, + 0x1ead, 0x2db3, 0x0301, 0x052f, 0x08d8, 0x095b, 0xffff, 0x267f, + 0x2759, 0x327a, 0x009e, 0x000f, 0xffff, 0xffff, 0xffff, 0xffff, + 0x6185, 0x61f4, 0x6246, 0x62f9, 0x63c8, 0x649b, 0x6572, 0x0886, + 0x65fc, 0x661e, 0x667b, 0x66e8, 0x6773, 0x679d, 0x67c6, 0x6808, + 0x6859, 0x6897, 0x690b, 0x6963, 0x69b9, 0xffff, 0xffff, 0x6a17, + 0xffff, 0x6ab5, 0xffff, 0x6b1c, 0x6b68, 0x6b88, 0x6bdc, 0xffff, + // Entry 4D1C0 - 4D1FF + 0xffff, 0x6c61, 0x6cc6, 0x6d33, 0xffff, 0xffff, 0xffff, 0x6d90, + 0xffff, 0x6dc3, 0x6df6, 0xffff, 0x6e4c, 0x6ec6, 0x6f2b, 0xffff, + 0xffff, 0xffff, 0xffff, 0x6f95, 0xffff, 0xffff, 0x7048, 0x70e0, + 0xffff, 0xffff, 0x7133, 0x719e, 0x71f1, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x723b, 0x7289, 0x72ad, 0x72d6, 0x72fd, + 0xffff, 0xffff, 0x7374, 0xffff, 0x73d3, 0xffff, 0xffff, 0x7471, + 0xffff, 0x7525, 0xffff, 0xffff, 0xffff, 0xffff, 0x7581, 0xffff, + 0x7622, 0x76c4, 0x7730, 0x7789, 0xffff, 0xffff, 0xffff, 0x77ec, + // Entry 4D200 - 4D23F + 0x7858, 0x78d4, 0xffff, 0xffff, 0x7946, 0x79b8, 0x7a10, 0x7a62, + 0xffff, 0xffff, 0x7abc, 0x7b0e, 0x7b60, 0xffff, 0x7bed, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x7c90, 0x33e5, 0x7ce2, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x7d7c, 0xffff, + 0xffff, 0x7dcc, 0xffff, 0x7e3c, 0xffff, 0x7e9c, 0x7ef8, 0x7f54, + 0xffff, 0x7fb2, 0x8014, 0xffff, 0xffff, 0xffff, 0x806e, 0x80d0, + 0xffff, 0xffff, 0x032a, 0x055c, 0x0907, 0x098a, 0xffff, 0xffff, + 0x7498, 0x32ad, 0x0003, 0x0bbe, 0x0c2d, 0x0bf1, 0x0031, 0x0057, + // Entry 4D240 - 4D27F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x30c6, 0x30cf, 0xffff, + 0x30d8, 0x003a, 0x0057, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 4D280 - 4D2BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x30c6, 0x30cf, 0xffff, 0x30d8, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x3147, 0x0031, 0x0057, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 4D2C0 - 4D2FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x30ca, 0x30d3, 0xffff, 0x30dc, + 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000b, 0x0014, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x001d, 0x0042, 0x0000, + 0x0071, 0x00dc, 0x0000, 0x0000, 0x0000, 0x0002, 0x0020, 0x0031, + // Entry 4D300 - 4D33F + 0x0001, 0x0022, 0x000d, 0x0047, 0xffff, 0x0b0d, 0x20f3, 0x20fb, + 0x2104, 0x210c, 0x2113, 0x211a, 0x2121, 0x0b4c, 0x2129, 0x2131, + 0x2139, 0x0001, 0x0033, 0x000d, 0x0047, 0xffff, 0x0b0d, 0x20f3, + 0x20fb, 0x2104, 0x210c, 0x2113, 0x211a, 0x2121, 0x0b4c, 0x2129, + 0x2131, 0x2139, 0x0002, 0x0045, 0x005b, 0x0003, 0x0049, 0x0000, + 0x0052, 0x0007, 0x0047, 0x0c07, 0x0c0f, 0x2141, 0x2147, 0x0c25, + 0x0c2d, 0x214d, 0x0007, 0x000e, 0x022d, 0x2066, 0x0251, 0x025e, + 0x026d, 0x027e, 0x0289, 0x0003, 0x005f, 0x0000, 0x0068, 0x0007, + // Entry 4D340 - 4D37F + 0x0047, 0x0c07, 0x0c0f, 0x2141, 0x2147, 0x0c25, 0x0c2d, 0x214d, + 0x0007, 0x000e, 0x022d, 0x2066, 0x0251, 0x025e, 0x026d, 0x027e, + 0x0289, 0x0002, 0x0074, 0x00bd, 0x0003, 0x0078, 0x0099, 0x00b4, + 0x0008, 0x0084, 0x008a, 0x0081, 0x008d, 0x0090, 0x0093, 0x0096, + 0x0087, 0x0001, 0x0065, 0x0097, 0x0001, 0x0065, 0x0d73, 0x0001, + 0x0065, 0x00a2, 0x0001, 0x0065, 0x00ad, 0x0001, 0x0065, 0x00eb, + 0x0001, 0x0065, 0x0d89, 0x0001, 0x0065, 0x00f6, 0x0001, 0x0065, + 0x00d5, 0x0008, 0x0000, 0x0000, 0x00a2, 0x00a8, 0x00ab, 0x00ae, + // Entry 4D380 - 4D3BF + 0x00b1, 0x00a5, 0x0001, 0x0065, 0x0097, 0x0001, 0x0065, 0x00a2, + 0x0001, 0x0065, 0x00eb, 0x0001, 0x0065, 0x0d89, 0x0001, 0x0065, + 0x00f6, 0x0001, 0x0065, 0x00ff, 0x0002, 0x00b7, 0x00ba, 0x0001, + 0x0065, 0x0d73, 0x0001, 0x0065, 0x00ad, 0x0003, 0x00c1, 0x00ca, + 0x00d3, 0x0002, 0x00c4, 0x00c7, 0x0001, 0x0065, 0x0d73, 0x0001, + 0x0065, 0x00ad, 0x0002, 0x00cd, 0x00d0, 0x0001, 0x000e, 0x01ed, + 0x0001, 0x0000, 0x21e4, 0x0002, 0x00d6, 0x00d9, 0x0001, 0x0065, + 0x0d73, 0x0001, 0x0065, 0x00ad, 0x0003, 0x0000, 0x0000, 0x00e0, + // Entry 4D3C0 - 4D3FF + 0x0002, 0x00e3, 0x00e6, 0x0001, 0x000e, 0x0352, 0x0002, 0x0065, + 0xffff, 0x011d, 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000b, 0x0014, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x001d, + 0x0042, 0x0000, 0x0071, 0x00dc, 0x0000, 0x0000, 0x0000, 0x0002, + 0x0020, 0x0031, 0x0001, 0x0022, 0x000d, 0x0047, 0xffff, 0x0b0d, + 0x20f3, 0x20fb, 0x2104, 0x210c, 0x2113, 0x211a, 0x2121, 0x0b4c, + 0x2129, 0x2131, 0x2139, 0x0001, 0x0033, 0x000d, 0x0047, 0xffff, + // Entry 4D400 - 4D43F + 0x0b0d, 0x20f3, 0x20fb, 0x2104, 0x210c, 0x2113, 0x211a, 0x2121, + 0x0b4c, 0x2129, 0x2131, 0x2139, 0x0002, 0x0045, 0x005b, 0x0003, + 0x0049, 0x0000, 0x0052, 0x0007, 0x0047, 0x0c07, 0x0c0f, 0x2141, + 0x2147, 0x0c25, 0x0c2d, 0x214d, 0x0007, 0x000e, 0x022d, 0x2066, + 0x0251, 0x025e, 0x026d, 0x027e, 0x0289, 0x0003, 0x005f, 0x0000, + 0x0068, 0x0007, 0x0047, 0x0c07, 0x0c0f, 0x2141, 0x2147, 0x0c25, + 0x0c2d, 0x214d, 0x0007, 0x000e, 0x022d, 0x2066, 0x0251, 0x025e, + 0x026d, 0x027e, 0x0289, 0x0002, 0x0074, 0x00bd, 0x0003, 0x0078, + // Entry 4D440 - 4D47F + 0x0099, 0x00b4, 0x0008, 0x0084, 0x008a, 0x0081, 0x008d, 0x0090, + 0x0093, 0x0096, 0x0087, 0x0001, 0x0065, 0x0097, 0x0001, 0x0065, + 0x0d73, 0x0001, 0x0065, 0x00a2, 0x0001, 0x0065, 0x00ad, 0x0001, + 0x0065, 0x00eb, 0x0001, 0x0065, 0x0d89, 0x0001, 0x0065, 0x00f6, + 0x0001, 0x0065, 0x00d5, 0x0008, 0x0000, 0x0000, 0x00a2, 0x00a8, + 0x00ab, 0x00ae, 0x00b1, 0x00a5, 0x0001, 0x0065, 0x0097, 0x0001, + 0x0065, 0x00a2, 0x0001, 0x0065, 0x00eb, 0x0001, 0x0065, 0x0d89, + 0x0001, 0x0065, 0x00f6, 0x0001, 0x0065, 0x00ff, 0x0002, 0x00b7, + // Entry 4D480 - 4D4BF + 0x00ba, 0x0001, 0x0065, 0x0d73, 0x0001, 0x0065, 0x00ad, 0x0003, + 0x00c1, 0x00ca, 0x00d3, 0x0002, 0x00c4, 0x00c7, 0x0001, 0x0065, + 0x0d73, 0x0001, 0x0065, 0x00ad, 0x0002, 0x00cd, 0x00d0, 0x0001, + 0x0000, 0x1f9c, 0x0001, 0x0000, 0x21e4, 0x0002, 0x00d6, 0x00d9, + 0x0001, 0x0065, 0x0d73, 0x0001, 0x0065, 0x00ad, 0x0003, 0x0000, + 0x0000, 0x00e0, 0x0001, 0x00e2, 0x0001, 0x000e, 0x0352, 0x0001, + 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000b, 0x0014, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 4D4C0 - 4D4FF + 0x0000, 0x0000, 0x0000, 0x0004, 0x0019, 0x003e, 0x0000, 0x0057, + 0x0002, 0x001c, 0x002d, 0x0001, 0x001e, 0x000d, 0x0047, 0xffff, + 0x0b0d, 0x20f3, 0x20fb, 0x2104, 0x210c, 0x2113, 0x211a, 0x2121, + 0x0b4c, 0x2129, 0x2131, 0x2139, 0x0001, 0x002f, 0x000d, 0x0047, + 0xffff, 0x0b0d, 0x20f3, 0x20fb, 0x2104, 0x210c, 0x2113, 0x211a, + 0x2121, 0x0b4c, 0x2129, 0x2131, 0x2139, 0x0002, 0x0041, 0x004c, + 0x0001, 0x0043, 0x0007, 0x0047, 0x0c07, 0x0c0f, 0x2141, 0x2147, + 0x0c25, 0x0c2d, 0x214d, 0x0001, 0x004e, 0x0007, 0x0047, 0x0c07, + // Entry 4D500 - 4D53F + 0x0c0f, 0x2141, 0x2147, 0x0c25, 0x0c2d, 0x214d, 0x0002, 0x005a, + 0x0093, 0x0002, 0x005d, 0x0078, 0x0008, 0x0000, 0x0000, 0x0066, + 0x006c, 0x006f, 0x0072, 0x0075, 0x0069, 0x0001, 0x0065, 0x0097, + 0x0001, 0x0065, 0x00a2, 0x0001, 0x0065, 0x00eb, 0x0001, 0x0065, + 0x0d89, 0x0001, 0x0065, 0x00ca, 0x0001, 0x0065, 0x00d5, 0x0008, + 0x0000, 0x0000, 0x0081, 0x0087, 0x008a, 0x008d, 0x0090, 0x0084, + 0x0001, 0x0065, 0x0097, 0x0001, 0x0065, 0x00a2, 0x0001, 0x0065, + 0x00eb, 0x0001, 0x0065, 0x0d89, 0x0001, 0x0065, 0x00f6, 0x0001, + // Entry 4D540 - 4D57F + 0x0065, 0x00ff, 0x0002, 0x0000, 0x0096, 0x0002, 0x0099, 0x009c, + 0x0001, 0x0000, 0x1f9c, 0x0001, 0x0000, 0x21e4, 0x0003, 0x0004, + 0x044c, 0x09b5, 0x0012, 0x0017, 0x0000, 0x0024, 0x0000, 0x003c, + 0x0000, 0x0054, 0x007f, 0x0293, 0x02ab, 0x02cd, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0312, 0x041c, 0x043e, 0x0005, 0x0000, 0x0000, + 0x0000, 0x0000, 0x001d, 0x0001, 0x001f, 0x0001, 0x0021, 0x0001, + 0x0000, 0x0000, 0x0001, 0x0026, 0x0001, 0x0028, 0x0003, 0x0000, + 0x0000, 0x002c, 0x000e, 0x0065, 0xffff, 0x0d96, 0x0d9b, 0x0da0, + // Entry 4D580 - 4D5BF + 0x0da6, 0x0dac, 0x0db1, 0x0db8, 0x0dc1, 0x0dca, 0x0dd2, 0x0dd8, + 0x0ddd, 0x0de3, 0x0001, 0x003e, 0x0001, 0x0040, 0x0003, 0x0000, + 0x0000, 0x0044, 0x000e, 0x0000, 0xffff, 0x042f, 0x0438, 0x3b0f, + 0x3b15, 0x044c, 0x3da2, 0x0458, 0x0460, 0x3b1c, 0x046e, 0x3b23, + 0x3daa, 0x3b29, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x005d, 0x0000, 0x006e, 0x0004, 0x006b, 0x0065, 0x0062, 0x0068, + 0x0001, 0x002f, 0x0015, 0x0001, 0x002f, 0x0028, 0x0001, 0x0065, + 0x0000, 0x0001, 0x000e, 0x013d, 0x0004, 0x007c, 0x0076, 0x0073, + // Entry 4D5C0 - 4D5FF + 0x0079, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x0088, 0x00ed, + 0x0144, 0x0179, 0x024a, 0x0260, 0x0271, 0x0282, 0x0002, 0x008b, + 0x00bc, 0x0003, 0x008f, 0x009e, 0x00ad, 0x000d, 0x000d, 0xffff, + 0x0059, 0x340b, 0x34a0, 0x3413, 0x353b, 0x336f, 0x3373, 0x0075, + 0x344e, 0x3452, 0x3456, 0x0085, 0x000d, 0x0000, 0xffff, 0x2142, + 0x2006, 0x3d03, 0x1f9c, 0x3d03, 0x2142, 0x2142, 0x1f9c, 0x2002, + 0x1f98, 0x3d05, 0x3d07, 0x000d, 0x000d, 0xffff, 0x0089, 0x0090, + // Entry 4D600 - 4D63F + 0x0098, 0x346d, 0x353b, 0x336f, 0x3373, 0x00ad, 0x00b4, 0x00be, + 0x00c6, 0x00cf, 0x0003, 0x00c0, 0x00cf, 0x00de, 0x000d, 0x000d, + 0xffff, 0x0059, 0x340b, 0x34a0, 0x3413, 0x353b, 0x336f, 0x3373, + 0x0075, 0x344e, 0x3452, 0x3456, 0x0085, 0x000d, 0x0000, 0xffff, + 0x2142, 0x2006, 0x3d03, 0x1f9c, 0x3d03, 0x2142, 0x2142, 0x1f9c, + 0x2002, 0x1f98, 0x3d05, 0x3d07, 0x000d, 0x000d, 0xffff, 0x0089, + 0x0090, 0x0098, 0x346d, 0x353b, 0x336f, 0x3373, 0x00ad, 0x00b4, + 0x00be, 0x00c6, 0x00cf, 0x0002, 0x00f0, 0x011a, 0x0005, 0x00f6, + // Entry 4D640 - 4D67F + 0x00ff, 0x0111, 0x0000, 0x0108, 0x0007, 0x000d, 0x00d8, 0x353f, + 0x00e0, 0x3543, 0x00e8, 0x00ed, 0x00f1, 0x0007, 0x0000, 0x3d05, + 0x21e4, 0x2010, 0x2002, 0x21e6, 0x21e4, 0x2002, 0x0007, 0x0014, + 0x063b, 0x063e, 0x36bc, 0x3713, 0x3716, 0x371a, 0x371d, 0x0007, + 0x0063, 0x003b, 0x2b5e, 0x2b69, 0x0054, 0x2b70, 0x2b7a, 0x2b80, + 0x0005, 0x0120, 0x0129, 0x013b, 0x0000, 0x0132, 0x0007, 0x000d, + 0x00d8, 0x353f, 0x00e0, 0x3543, 0x00e8, 0x00ed, 0x00f1, 0x0007, + 0x0000, 0x3d05, 0x21e4, 0x2010, 0x2002, 0x21e6, 0x21e4, 0x2002, + // Entry 4D680 - 4D6BF + 0x0007, 0x0014, 0x063b, 0x063e, 0x36bc, 0x3713, 0x3716, 0x371a, + 0x371d, 0x0007, 0x0063, 0x003b, 0x2b5e, 0x2b69, 0x0054, 0x2b70, + 0x2b7a, 0x2b80, 0x0002, 0x0147, 0x0160, 0x0003, 0x014b, 0x0152, + 0x0159, 0x0005, 0x0000, 0xffff, 0x1f17, 0x1f1a, 0x1f1d, 0x1f20, + 0x0005, 0x000d, 0xffff, 0x0140, 0x0143, 0x0146, 0x0149, 0x0005, + 0x0065, 0xffff, 0x0de8, 0x0df5, 0x0e03, 0x0e12, 0x0003, 0x0164, + 0x016b, 0x0172, 0x0005, 0x0000, 0xffff, 0x1f17, 0x1f1a, 0x1f1d, + 0x1f20, 0x0005, 0x000d, 0xffff, 0x0140, 0x0143, 0x0146, 0x0149, + // Entry 4D6C0 - 4D6FF + 0x0005, 0x0065, 0xffff, 0x0de8, 0x0df5, 0x0e03, 0x0e12, 0x0002, + 0x017c, 0x01e3, 0x0003, 0x0180, 0x01a1, 0x01c2, 0x0008, 0x018c, + 0x0192, 0x0189, 0x0195, 0x0198, 0x019b, 0x019e, 0x018f, 0x0001, + 0x000d, 0x0187, 0x0001, 0x0065, 0x0e23, 0x0001, 0x000d, 0x0199, + 0x0001, 0x0065, 0x0e2d, 0x0001, 0x000d, 0x01a7, 0x0001, 0x0065, + 0x0e2d, 0x0001, 0x0065, 0x0e36, 0x0001, 0x002f, 0x0176, 0x0008, + 0x01ad, 0x01b3, 0x01aa, 0x01b6, 0x01b9, 0x01bc, 0x01bf, 0x01b0, + 0x0001, 0x000d, 0x0187, 0x0001, 0x0000, 0x1f9c, 0x0001, 0x000d, + // Entry 4D700 - 4D73F + 0x0199, 0x0001, 0x0000, 0x21e4, 0x0001, 0x0065, 0x0e3d, 0x0001, + 0x0065, 0x0e2d, 0x0001, 0x0065, 0x0e36, 0x0001, 0x002f, 0x0176, + 0x0008, 0x01ce, 0x01d4, 0x01cb, 0x01d7, 0x01da, 0x01dd, 0x01e0, + 0x01d1, 0x0001, 0x000d, 0x0187, 0x0001, 0x0065, 0x0e23, 0x0001, + 0x000d, 0x0199, 0x0001, 0x0065, 0x0e2d, 0x0001, 0x000d, 0x01a7, + 0x0001, 0x0065, 0x0e2d, 0x0001, 0x0065, 0x0e36, 0x0001, 0x002f, + 0x0176, 0x0003, 0x01e7, 0x0208, 0x0229, 0x0008, 0x01f3, 0x01f9, + 0x01f0, 0x01fc, 0x01ff, 0x0202, 0x0205, 0x01f6, 0x0001, 0x000d, + // Entry 4D740 - 4D77F + 0x0187, 0x0001, 0x0065, 0x0e23, 0x0001, 0x000d, 0x0199, 0x0001, + 0x0065, 0x0e2d, 0x0001, 0x0056, 0x0845, 0x0001, 0x000d, 0x019f, + 0x0001, 0x0065, 0x0e44, 0x0001, 0x0065, 0x0e4a, 0x0008, 0x0214, + 0x021a, 0x0211, 0x021d, 0x0220, 0x0223, 0x0226, 0x0217, 0x0001, + 0x000d, 0x0187, 0x0001, 0x0065, 0x0e23, 0x0001, 0x000d, 0x0199, + 0x0001, 0x0065, 0x0e2d, 0x0001, 0x0056, 0x0845, 0x0001, 0x000d, + 0x019f, 0x0001, 0x0065, 0x0e44, 0x0001, 0x0065, 0x0e4a, 0x0008, + 0x0235, 0x023b, 0x0232, 0x023e, 0x0241, 0x0244, 0x0247, 0x0238, + // Entry 4D780 - 4D7BF + 0x0001, 0x000d, 0x0187, 0x0001, 0x0065, 0x0e23, 0x0001, 0x000d, + 0x0199, 0x0001, 0x0065, 0x0e2d, 0x0001, 0x0056, 0x0845, 0x0001, + 0x000d, 0x019f, 0x0001, 0x0065, 0x0e44, 0x0001, 0x0065, 0x0e4a, + 0x0003, 0x0254, 0x025a, 0x024e, 0x0001, 0x0250, 0x0002, 0x0065, + 0x0e4f, 0x0e5c, 0x0001, 0x0256, 0x0002, 0x000d, 0x01eb, 0x3547, + 0x0001, 0x025c, 0x0002, 0x0056, 0x03b8, 0x03ca, 0x0004, 0x026e, + 0x0268, 0x0265, 0x026b, 0x0001, 0x000e, 0x03a2, 0x0001, 0x000e, + 0x03b4, 0x0001, 0x000e, 0x03c0, 0x0001, 0x000d, 0x0225, 0x0004, + // Entry 4D7C0 - 4D7FF + 0x027f, 0x0279, 0x0276, 0x027c, 0x0001, 0x0000, 0x0524, 0x0001, + 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, + 0x0004, 0x0290, 0x028a, 0x0287, 0x028d, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0295, 0x0001, 0x0297, 0x0003, 0x0000, 0x0000, + 0x029b, 0x000e, 0x0065, 0x0e94, 0x0e65, 0x0e6c, 0x0e74, 0x0e7b, + 0x0e81, 0x0e88, 0x0e8f, 0x0e9c, 0x0ea2, 0x0ea7, 0x0ead, 0x0eb3, + 0x0eb6, 0x0005, 0x02b1, 0x0000, 0x0000, 0x0000, 0x02c6, 0x0001, + // Entry 4D800 - 4D83F + 0x02b3, 0x0003, 0x0000, 0x0000, 0x02b7, 0x000d, 0x0046, 0xffff, + 0x0a17, 0x3423, 0x342b, 0x3433, 0x3439, 0x3441, 0x3447, 0x344e, + 0x3456, 0x345f, 0x3465, 0x346a, 0x0001, 0x02c8, 0x0001, 0x02ca, + 0x0001, 0x0026, 0x16fa, 0x0005, 0x02d3, 0x0000, 0x0000, 0x0000, + 0x030b, 0x0002, 0x02d6, 0x02f8, 0x0003, 0x02da, 0x0000, 0x02e9, + 0x000d, 0x0000, 0xffff, 0x0606, 0x3b37, 0x3db1, 0x3db8, 0x3dbf, + 0x3dc8, 0x3dd1, 0x3dd8, 0x3b65, 0x3ddd, 0x3de2, 0x3de9, 0x000d, + 0x0065, 0xffff, 0x0ebb, 0x0ec3, 0x0ec9, 0x0ed2, 0x0edc, 0x0ee5, + // Entry 4D840 - 4D87F + 0x0eef, 0x0ef6, 0x0eff, 0x0f07, 0x0f0e, 0x0f1b, 0x0003, 0x0000, + 0x0000, 0x02fc, 0x000d, 0x0065, 0xffff, 0x0f27, 0x0f2f, 0x0f35, + 0x0f3c, 0x0f43, 0x0f4e, 0x0f59, 0x0ef6, 0x0f61, 0x0f69, 0x0f70, + 0x0f79, 0x0001, 0x030d, 0x0001, 0x030f, 0x0001, 0x0000, 0x06c8, + 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0319, 0x040b, 0x0001, + 0x031b, 0x0001, 0x031d, 0x00ec, 0x0000, 0x06cb, 0x2c1c, 0x2c30, + 0x2c43, 0x2c56, 0x072c, 0x2c68, 0x0750, 0x2c79, 0x0775, 0x2c8a, + 0x3df0, 0x3e07, 0x3e1e, 0x3e35, 0x3e4c, 0x2d1a, 0x3e63, 0x2d3d, + // Entry 4D880 - 4D8BF + 0x2d51, 0x2d63, 0x2d75, 0x2d88, 0x2d9a, 0x08b5, 0x27fb, 0x2dab, + 0x2dbd, 0x2820, 0x2dcf, 0x2de1, 0x2df4, 0x3e73, 0x2e07, 0x2e19, + 0x2e2c, 0x2e3f, 0x09ae, 0x2e54, 0x2e64, 0x2e75, 0x09f7, 0x285b, + 0x2e98, 0x0a33, 0x0a46, 0x2eaa, 0x286c, 0x0a7b, 0x2ecd, 0x2ee2, + 0x2ef6, 0x2f09, 0x2f1d, 0x2f31, 0x3e85, 0x0b1e, 0x2f71, 0x2f86, + 0x2f9d, 0x0b77, 0x2fb2, 0x3e99, 0x2fc6, 0x3eae, 0x2ff2, 0x3006, + 0x301a, 0x3ec5, 0x3043, 0x3ed9, 0x288f, 0x306d, 0x3081, 0x3097, + 0x3eee, 0x30c0, 0x30d4, 0x2107, 0x30e8, 0x3f03, 0x28cc, 0x3f17, + // Entry 4D8C0 - 4D8FF + 0x3f2c, 0x313d, 0x3f41, 0x28df, 0x3f57, 0x3f6b, 0x3191, 0x31a5, + 0x0e04, 0x31b9, 0x2907, 0x3f7f, 0x31e3, 0x31f9, 0x320b, 0x0e96, + 0x291b, 0x3235, 0x3247, 0x0ee9, 0x3f94, 0x3271, 0x3fa9, 0x3299, + 0x3fbd, 0x32c6, 0x3fd2, 0x32f1, 0x3305, 0x2945, 0x332f, 0x3344, + 0x335b, 0x336f, 0x3fe7, 0x3ff9, 0x1051, 0x1066, 0x107a, 0x400e, + 0x2985, 0x33c0, 0x10cf, 0x33d7, 0x4022, 0x1110, 0x1124, 0x4033, + 0x342c, 0x3441, 0x3455, 0x3469, 0x4047, 0x3492, 0x29ae, 0x4059, + 0x34d1, 0x34e4, 0x1224, 0x34f6, 0x124d, 0x1262, 0x406e, 0x29c1, + // Entry 4D900 - 4D93F + 0x3521, 0x3534, 0x3548, 0x4084, 0x4098, 0x3588, 0x29eb, 0x1335, + 0x359d, 0x35b1, 0x1374, 0x35c4, 0x35d9, 0x13b4, 0x40ae, 0x13e0, + 0x3619, 0x362f, 0x3642, 0x1435, 0x144b, 0x3657, 0x1473, 0x3668, + 0x367a, 0x368f, 0x14c8, 0x2a00, 0x36b8, 0x36cd, 0x36e3, 0x36f7, + 0x370d, 0x3722, 0x3737, 0x158f, 0x374a, 0x15bb, 0x375f, 0x15e4, + 0x3772, 0x160d, 0x3786, 0x2a13, 0x40c2, 0x1661, 0x1676, 0x37b1, + 0x16a0, 0x37c6, 0x37db, 0x2a3c, 0x3804, 0x170c, 0x3818, 0x382a, + 0x174a, 0x175e, 0x3857, 0x386a, 0x40d6, 0x17b1, 0x3894, 0x38a7, + // Entry 4D940 - 4D97F + 0x38bd, 0x1808, 0x38d1, 0x38e5, 0x2a8f, 0x390e, 0x3924, 0x2aa2, + 0x189e, 0x18b3, 0x394c, 0x18dd, 0x18f1, 0x3960, 0x3974, 0x192f, + 0x1942, 0x2ab4, 0x399c, 0x40ea, 0x39c7, 0x40ff, 0x39e3, 0x39ea, + 0x4106, 0x0004, 0x0419, 0x0413, 0x0410, 0x0416, 0x0001, 0x000c, + 0x0000, 0x0001, 0x000c, 0x0012, 0x0001, 0x000c, 0x001e, 0x0001, + 0x000e, 0x1d42, 0x0005, 0x0422, 0x0000, 0x0000, 0x0000, 0x0437, + 0x0001, 0x0424, 0x0003, 0x0000, 0x0000, 0x0428, 0x000d, 0x0065, + 0xffff, 0x0f84, 0x0f8e, 0x0f9a, 0x0fa1, 0x0fa5, 0x0fac, 0x0fb6, + // Entry 4D980 - 4D9BF + 0x0fbb, 0x0fc0, 0x0fc5, 0x0fc9, 0x0fd0, 0x0001, 0x0439, 0x0001, + 0x043b, 0x0001, 0x0000, 0x1a1d, 0x0005, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0444, 0x0001, 0x0446, 0x0001, 0x0448, 0x0002, 0x0065, + 0x0fd7, 0x0fde, 0x0042, 0x048f, 0x0494, 0x0499, 0x049e, 0x04bb, + 0x04d8, 0x04f5, 0x0512, 0x052f, 0x054c, 0x0569, 0x0586, 0x05a3, + 0x05c4, 0x05e5, 0x0606, 0x060b, 0x0610, 0x0615, 0x0634, 0x064c, + 0x0664, 0x0669, 0x066e, 0x0673, 0x0678, 0x067d, 0x0682, 0x0687, + 0x068c, 0x0691, 0x06ab, 0x06c5, 0x06df, 0x06f9, 0x0713, 0x072d, + // Entry 4D9C0 - 4D9FF + 0x0747, 0x0761, 0x077b, 0x0795, 0x07af, 0x07c9, 0x07e3, 0x07fd, + 0x0817, 0x0831, 0x084b, 0x0865, 0x087f, 0x0899, 0x08b3, 0x08b8, + 0x08bd, 0x08c2, 0x08de, 0x08f6, 0x090e, 0x092a, 0x0942, 0x095a, + 0x0976, 0x098e, 0x09a6, 0x09ab, 0x09b0, 0x0001, 0x0491, 0x0001, + 0x0001, 0x0040, 0x0001, 0x0496, 0x0001, 0x0001, 0x0040, 0x0001, + 0x049b, 0x0001, 0x0001, 0x0040, 0x0003, 0x04a2, 0x04a5, 0x04aa, + 0x0001, 0x000d, 0x02fd, 0x0003, 0x000d, 0x0304, 0x0313, 0x354d, + 0x0002, 0x04ad, 0x04b4, 0x0005, 0x000d, 0x034b, 0x032f, 0xffff, + // Entry 4DA00 - 4DA3F + 0xffff, 0x033d, 0x0005, 0x0065, 0x0ff0, 0x0fe1, 0xffff, 0xffff, + 0x0fe1, 0x0003, 0x04bf, 0x04c2, 0x04c7, 0x0001, 0x000d, 0x038c, + 0x0003, 0x002f, 0x14cc, 0x14d9, 0x38f3, 0x0002, 0x04ca, 0x04d1, + 0x0005, 0x000d, 0x0391, 0x0391, 0xffff, 0xffff, 0x0391, 0x0005, + 0x0065, 0x0fff, 0x0fff, 0xffff, 0xffff, 0x0fff, 0x0003, 0x04dc, + 0x04df, 0x04e4, 0x0001, 0x000d, 0x03ac, 0x0003, 0x002f, 0x14f1, + 0x14fc, 0x3901, 0x0002, 0x04e7, 0x04ee, 0x0005, 0x000d, 0x03af, + 0x03af, 0xffff, 0xffff, 0x03af, 0x0005, 0x0065, 0x100c, 0x100c, + // Entry 4DA40 - 4DA7F + 0xffff, 0xffff, 0x100c, 0x0003, 0x04f9, 0x04fc, 0x0501, 0x0001, + 0x000d, 0x03c6, 0x0003, 0x0065, 0x1017, 0x1029, 0x1037, 0x0002, + 0x0504, 0x050b, 0x0005, 0x000d, 0x040f, 0x0400, 0xffff, 0xffff, + 0x040f, 0x0005, 0x0065, 0x104a, 0x104a, 0xffff, 0xffff, 0x104a, + 0x0003, 0x0516, 0x0519, 0x051e, 0x0001, 0x000d, 0x0444, 0x0003, + 0x0065, 0x1017, 0x1029, 0x1037, 0x0002, 0x0521, 0x0528, 0x0005, + 0x000d, 0x0448, 0x0448, 0xffff, 0xffff, 0x0448, 0x0005, 0x0065, + 0x105b, 0x105b, 0xffff, 0xffff, 0x105b, 0x0003, 0x0533, 0x0536, + // Entry 4DA80 - 4DABF + 0x053b, 0x0001, 0x000d, 0x0444, 0x0003, 0x0065, 0x1017, 0x1029, + 0x1037, 0x0002, 0x053e, 0x0545, 0x0005, 0x000d, 0x0448, 0x0448, + 0xffff, 0xffff, 0x0448, 0x0005, 0x0065, 0x105b, 0x105b, 0xffff, + 0xffff, 0x105b, 0x0003, 0x0550, 0x0553, 0x0558, 0x0001, 0x0063, + 0x03b1, 0x0003, 0x0065, 0x1067, 0x1077, 0x1083, 0x0002, 0x055b, + 0x0562, 0x0005, 0x0065, 0x10af, 0x1094, 0xffff, 0xffff, 0x10a1, + 0x0005, 0x0065, 0x10cc, 0x10bd, 0xffff, 0xffff, 0x10bd, 0x0003, + 0x056d, 0x0570, 0x0575, 0x0001, 0x0062, 0x049b, 0x0003, 0x0065, + // Entry 4DAC0 - 4DAFF + 0x10db, 0x10e9, 0x10f3, 0x0002, 0x0578, 0x057f, 0x0005, 0x0065, + 0x1102, 0x1102, 0xffff, 0xffff, 0x1102, 0x0005, 0x0065, 0x110e, + 0x110e, 0xffff, 0xffff, 0x110e, 0x0003, 0x058a, 0x058d, 0x0592, + 0x0001, 0x0029, 0x006c, 0x0003, 0x0065, 0x111b, 0x1127, 0x112f, + 0x0002, 0x0595, 0x059c, 0x0005, 0x0065, 0x113c, 0x113c, 0xffff, + 0xffff, 0x113c, 0x0005, 0x0065, 0x1146, 0x1146, 0xffff, 0xffff, + 0x1146, 0x0004, 0x05a8, 0x05ab, 0x05b0, 0x05c1, 0x0001, 0x0063, + 0x003b, 0x0003, 0x0065, 0x1151, 0x1161, 0x116d, 0x0002, 0x05b3, + // Entry 4DB00 - 4DB3F + 0x05ba, 0x0005, 0x0065, 0x119c, 0x117e, 0xffff, 0xffff, 0x118d, + 0x0005, 0x0065, 0x11bb, 0x11ab, 0xffff, 0xffff, 0x11ab, 0x0001, + 0x0065, 0x11cb, 0x0004, 0x05c9, 0x05cc, 0x05d1, 0x05e2, 0x0001, + 0x0046, 0x0e98, 0x0003, 0x0065, 0x11e6, 0x11f3, 0x11fc, 0x0002, + 0x05d4, 0x05db, 0x0005, 0x0065, 0x120a, 0x120a, 0xffff, 0xffff, + 0x120a, 0x0005, 0x0065, 0x1216, 0x1216, 0xffff, 0xffff, 0x1216, + 0x0001, 0x0065, 0x11cb, 0x0004, 0x05ea, 0x05ed, 0x05f2, 0x0603, + 0x0001, 0x0029, 0x0078, 0x0003, 0x0065, 0x1223, 0x122e, 0x1235, + // Entry 4DB40 - 4DB7F + 0x0002, 0x05f5, 0x05fc, 0x0005, 0x0065, 0x1241, 0x1241, 0xffff, + 0xffff, 0x1241, 0x0005, 0x0065, 0x124b, 0x124b, 0xffff, 0xffff, + 0x124b, 0x0001, 0x0065, 0x11cb, 0x0001, 0x0608, 0x0001, 0x0065, + 0x1256, 0x0001, 0x060d, 0x0001, 0x0065, 0x1267, 0x0001, 0x0612, + 0x0001, 0x0065, 0x1267, 0x0003, 0x0619, 0x061c, 0x0623, 0x0001, + 0x000d, 0x0608, 0x0005, 0x0065, 0x127d, 0x1283, 0x1289, 0x1273, + 0x128f, 0x0002, 0x0626, 0x062d, 0x0005, 0x000d, 0x0640, 0x0635, + 0xffff, 0xffff, 0x0640, 0x0005, 0x0065, 0x129a, 0x129a, 0xffff, + // Entry 4DB80 - 4DBBF + 0xffff, 0x129a, 0x0003, 0x0638, 0x0000, 0x063b, 0x0001, 0x0029, + 0x007b, 0x0002, 0x063e, 0x0645, 0x0005, 0x000d, 0x0669, 0x0669, + 0xffff, 0xffff, 0x0669, 0x0005, 0x0065, 0x12a7, 0x12a7, 0xffff, + 0xffff, 0x12a7, 0x0003, 0x0650, 0x0000, 0x0653, 0x0001, 0x0029, + 0x007b, 0x0002, 0x0656, 0x065d, 0x0005, 0x000d, 0x0669, 0x0669, + 0xffff, 0xffff, 0x0669, 0x0005, 0x0065, 0x12a7, 0x12a7, 0xffff, + 0xffff, 0x12a7, 0x0001, 0x0666, 0x0001, 0x000d, 0x0680, 0x0001, + 0x066b, 0x0001, 0x000d, 0x068d, 0x0001, 0x0670, 0x0001, 0x000d, + // Entry 4DBC0 - 4DBFF + 0x068d, 0x0001, 0x0675, 0x0001, 0x0065, 0x12b2, 0x0001, 0x067a, + 0x0001, 0x0065, 0x12b2, 0x0001, 0x067f, 0x0001, 0x0065, 0x12b2, + 0x0001, 0x0684, 0x0001, 0x0065, 0x12c0, 0x0001, 0x0689, 0x0001, + 0x0065, 0x12c0, 0x0001, 0x068e, 0x0001, 0x0065, 0x12c0, 0x0003, + 0x0000, 0x0695, 0x069a, 0x0003, 0x0065, 0x1151, 0x12cd, 0x116d, + 0x0002, 0x069d, 0x06a4, 0x0005, 0x0065, 0x119c, 0x117e, 0xffff, + 0xffff, 0x118d, 0x0005, 0x0065, 0x11bb, 0x11ab, 0xffff, 0xffff, + 0x11ab, 0x0003, 0x0000, 0x06af, 0x06b4, 0x0003, 0x0065, 0x12d7, + // Entry 4DC00 - 4DC3F + 0x12e0, 0x12e6, 0x0002, 0x06b7, 0x06be, 0x0005, 0x0065, 0x119c, + 0x117e, 0xffff, 0xffff, 0x118d, 0x0005, 0x0065, 0x11bb, 0x11ab, + 0xffff, 0xffff, 0x11ab, 0x0003, 0x0000, 0x06c9, 0x06ce, 0x0003, + 0x0065, 0x12ef, 0x12e0, 0x12fb, 0x0002, 0x06d1, 0x06d8, 0x0005, + 0x0065, 0x119c, 0x117e, 0xffff, 0xffff, 0x118d, 0x0005, 0x0065, + 0x11bb, 0x11ab, 0xffff, 0xffff, 0x11ab, 0x0003, 0x0000, 0x06e3, + 0x06e8, 0x0003, 0x0065, 0x1308, 0x131c, 0x1329, 0x0002, 0x06eb, + 0x06f2, 0x0005, 0x0065, 0x1362, 0x133e, 0xffff, 0xffff, 0x1350, + // Entry 4DC40 - 4DC7F + 0x0005, 0x0065, 0x1388, 0x1375, 0xffff, 0xffff, 0x1375, 0x0003, + 0x0000, 0x06fd, 0x0702, 0x0003, 0x0065, 0x139c, 0x13a9, 0x13af, + 0x0002, 0x0705, 0x070c, 0x0005, 0x0065, 0x1362, 0x133e, 0xffff, + 0xffff, 0x1350, 0x0005, 0x0065, 0x1388, 0x1375, 0xffff, 0xffff, + 0x1375, 0x0003, 0x0000, 0x0717, 0x071c, 0x0003, 0x0065, 0x139c, + 0x13a9, 0x13af, 0x0002, 0x071f, 0x0726, 0x0005, 0x0065, 0x1362, + 0x133e, 0xffff, 0xffff, 0x1350, 0x0005, 0x0065, 0x1388, 0x1375, + 0xffff, 0xffff, 0x1375, 0x0003, 0x0000, 0x0731, 0x0736, 0x0003, + // Entry 4DC80 - 4DCBF + 0x0065, 0x13bd, 0x13cd, 0x13d6, 0x0002, 0x0739, 0x0740, 0x0005, + 0x000d, 0x08ce, 0x08b2, 0xffff, 0xffff, 0x08c0, 0x0005, 0x0065, + 0x13f6, 0x13e7, 0xffff, 0xffff, 0x13e7, 0x0003, 0x0000, 0x074b, + 0x0750, 0x0003, 0x0065, 0x1406, 0x1413, 0x1419, 0x0002, 0x0753, + 0x075a, 0x0005, 0x000d, 0x08ce, 0x08b2, 0xffff, 0xffff, 0x08c0, + 0x0005, 0x0065, 0x13f6, 0x13e7, 0xffff, 0xffff, 0x13e7, 0x0003, + 0x0000, 0x0765, 0x076a, 0x0003, 0x0065, 0x1406, 0x1413, 0x1419, + 0x0002, 0x076d, 0x0774, 0x0005, 0x000d, 0x08ce, 0x08b2, 0xffff, + // Entry 4DCC0 - 4DCFF + 0xffff, 0x08c0, 0x0005, 0x0065, 0x13f6, 0x13e7, 0xffff, 0xffff, + 0x13e7, 0x0003, 0x0000, 0x077f, 0x0784, 0x0003, 0x0065, 0x1427, + 0x1435, 0x143d, 0x0002, 0x0787, 0x078e, 0x0005, 0x0065, 0x1466, + 0x144c, 0xffff, 0xffff, 0x1459, 0x0005, 0x0065, 0x1481, 0x1473, + 0xffff, 0xffff, 0x1473, 0x0003, 0x0000, 0x0799, 0x079e, 0x0003, + 0x0065, 0x148f, 0x149b, 0x14a1, 0x0002, 0x07a1, 0x07a8, 0x0005, + 0x0065, 0x1466, 0x144c, 0xffff, 0xffff, 0x1459, 0x0005, 0x0065, + 0x1481, 0x1473, 0xffff, 0xffff, 0x1473, 0x0003, 0x0000, 0x07b3, + // Entry 4DD00 - 4DD3F + 0x07b8, 0x0003, 0x0065, 0x148f, 0x149b, 0x14a1, 0x0002, 0x07bb, + 0x07c2, 0x0005, 0x0065, 0x1466, 0x144c, 0xffff, 0xffff, 0x1459, + 0x0005, 0x0065, 0x1481, 0x1473, 0xffff, 0xffff, 0x1473, 0x0003, + 0x0000, 0x07cd, 0x07d2, 0x0003, 0x0065, 0x14ae, 0x14c1, 0x14cd, + 0x0002, 0x07d5, 0x07dc, 0x0005, 0x000d, 0x0a44, 0x0a22, 0xffff, + 0xffff, 0x0a33, 0x0005, 0x0065, 0x14f3, 0x14e1, 0xffff, 0xffff, + 0x14e1, 0x0003, 0x0000, 0x07e7, 0x07ec, 0x0003, 0x0065, 0x1506, + 0x1514, 0x151b, 0x0002, 0x07ef, 0x07f6, 0x0005, 0x000d, 0x0a44, + // Entry 4DD40 - 4DD7F + 0x0a22, 0xffff, 0xffff, 0x0a33, 0x0005, 0x0065, 0x14f3, 0x14e1, + 0xffff, 0xffff, 0x14e1, 0x0003, 0x0000, 0x0801, 0x0806, 0x0003, + 0x0065, 0x1506, 0x1514, 0x151b, 0x0002, 0x0809, 0x0810, 0x0005, + 0x000d, 0x0a44, 0x0a22, 0xffff, 0xffff, 0x0a33, 0x0005, 0x0065, + 0x14f3, 0x14e1, 0xffff, 0xffff, 0x14e1, 0x0003, 0x0000, 0x081b, + 0x0820, 0x0003, 0x0065, 0x152a, 0x1539, 0x1541, 0x0002, 0x0823, + 0x082a, 0x0005, 0x000d, 0x0aff, 0x0ae5, 0xffff, 0xffff, 0x0af2, + 0x0005, 0x0065, 0x155f, 0x1551, 0xffff, 0xffff, 0x1551, 0x0003, + // Entry 4DD80 - 4DDBF + 0x0000, 0x0835, 0x083a, 0x0003, 0x0065, 0x156e, 0x157b, 0x1581, + 0x0002, 0x083d, 0x0844, 0x0005, 0x000d, 0x0aff, 0x0ae5, 0xffff, + 0xffff, 0x0af2, 0x0005, 0x0065, 0x155f, 0x1551, 0xffff, 0xffff, + 0x1551, 0x0003, 0x0000, 0x084f, 0x0854, 0x0003, 0x0065, 0x156e, + 0x157b, 0x1581, 0x0002, 0x0857, 0x085e, 0x0005, 0x000d, 0x0aff, + 0x0ae5, 0xffff, 0xffff, 0x0af2, 0x0005, 0x0065, 0x155f, 0x1551, + 0xffff, 0xffff, 0x1551, 0x0003, 0x0000, 0x0869, 0x086e, 0x0003, + 0x0065, 0x158f, 0x159e, 0x15a7, 0x0002, 0x0871, 0x0878, 0x0005, + // Entry 4DDC0 - 4DDFF + 0x000d, 0x0bab, 0x0b8f, 0xffff, 0xffff, 0x0b9d, 0x0005, 0x0065, + 0x15c6, 0x15b7, 0xffff, 0xffff, 0x15b7, 0x0003, 0x0000, 0x0883, + 0x0888, 0x0003, 0x0065, 0x15d5, 0x15e1, 0x15e7, 0x0002, 0x088b, + 0x0892, 0x0005, 0x000d, 0x0bab, 0x0b8f, 0xffff, 0xffff, 0x0b9d, + 0x0005, 0x0065, 0x15c6, 0x15b7, 0xffff, 0xffff, 0x15b7, 0x0003, + 0x0000, 0x089d, 0x08a2, 0x0003, 0x0065, 0x15d5, 0x15e1, 0x15e7, + 0x0002, 0x08a5, 0x08ac, 0x0005, 0x000d, 0x0bab, 0x0b8f, 0xffff, + 0xffff, 0x0b9d, 0x0005, 0x0065, 0x15c6, 0x15b7, 0xffff, 0xffff, + // Entry 4DE00 - 4DE3F + 0x15b7, 0x0001, 0x08b5, 0x0001, 0x0065, 0x15f4, 0x0001, 0x08ba, + 0x0001, 0x0065, 0x15f4, 0x0001, 0x08bf, 0x0001, 0x0065, 0x15f4, + 0x0003, 0x08c6, 0x08c9, 0x08cd, 0x0001, 0x000d, 0x0c29, 0x0002, + 0x0065, 0xffff, 0x1607, 0x0002, 0x08d0, 0x08d7, 0x0005, 0x000d, + 0x0c4d, 0x0c36, 0xffff, 0xffff, 0x0c41, 0x0005, 0x0065, 0x161e, + 0x1611, 0xffff, 0xffff, 0x1611, 0x0003, 0x08e2, 0x0000, 0x08e5, + 0x0001, 0x0065, 0x162b, 0x0002, 0x08e8, 0x08ef, 0x0005, 0x0065, + 0x162f, 0x162f, 0xffff, 0xffff, 0x162f, 0x0005, 0x0065, 0x163a, + // Entry 4DE40 - 4DE7F + 0x163a, 0xffff, 0xffff, 0x163a, 0x0003, 0x08fa, 0x0000, 0x08fd, + 0x0001, 0x0065, 0x162b, 0x0002, 0x0900, 0x0907, 0x0005, 0x0065, + 0x162f, 0x162f, 0xffff, 0xffff, 0x162f, 0x0005, 0x0065, 0x163a, + 0x163a, 0xffff, 0xffff, 0x163a, 0x0003, 0x0912, 0x0915, 0x0919, + 0x0001, 0x0010, 0x0bf7, 0x0002, 0x0065, 0xffff, 0x1646, 0x0002, + 0x091c, 0x0923, 0x0005, 0x0056, 0x29b9, 0x0f10, 0xffff, 0xffff, + 0x29b9, 0x0005, 0x0065, 0x1652, 0x1652, 0xffff, 0xffff, 0x1652, + 0x0003, 0x092e, 0x0000, 0x0931, 0x0001, 0x0001, 0x07c5, 0x0002, + // Entry 4DE80 - 4DEBF + 0x0934, 0x093b, 0x0005, 0x000d, 0x0cf4, 0x0cf4, 0xffff, 0xffff, + 0x0cf4, 0x0005, 0x0065, 0x1661, 0x1661, 0xffff, 0xffff, 0x1661, + 0x0003, 0x0946, 0x0000, 0x0949, 0x0001, 0x0001, 0x07c5, 0x0002, + 0x094c, 0x0953, 0x0005, 0x000d, 0x0cf4, 0x0cf4, 0xffff, 0xffff, + 0x0cf4, 0x0005, 0x0065, 0x1661, 0x1661, 0xffff, 0xffff, 0x1661, + 0x0003, 0x095e, 0x0961, 0x0965, 0x0001, 0x0016, 0x0cec, 0x0002, + 0x000d, 0xffff, 0x0d17, 0x0002, 0x0968, 0x096f, 0x0005, 0x000d, + 0x0d3a, 0x0d1c, 0xffff, 0xffff, 0x0d2b, 0x0005, 0x0065, 0x167e, + // Entry 4DEC0 - 4DEFF + 0x166e, 0xffff, 0xffff, 0x166e, 0x0003, 0x097a, 0x0000, 0x097d, + 0x0001, 0x0001, 0x083e, 0x0002, 0x0980, 0x0987, 0x0005, 0x000d, + 0x0d7f, 0x0d7f, 0xffff, 0xffff, 0x0d7f, 0x0005, 0x0065, 0x168e, + 0x168e, 0xffff, 0xffff, 0x168e, 0x0003, 0x0992, 0x0000, 0x0995, + 0x0001, 0x0029, 0x0072, 0x0002, 0x0998, 0x099f, 0x0005, 0x0065, + 0x169b, 0x169b, 0xffff, 0xffff, 0x169b, 0x0005, 0x0065, 0x16a5, + 0x16a5, 0xffff, 0xffff, 0x16a5, 0x0001, 0x09a8, 0x0001, 0x000d, + 0x0d9a, 0x0001, 0x09ad, 0x0001, 0x000d, 0x0d9a, 0x0001, 0x09b2, + // Entry 4DF00 - 4DF3F + 0x0001, 0x000d, 0x0d9a, 0x0004, 0x09ba, 0x09bf, 0x09c4, 0x09d3, + 0x0003, 0x0000, 0x1dc7, 0x3d57, 0x410d, 0x0003, 0x0000, 0x1de0, + 0x4111, 0x4123, 0x0002, 0x0000, 0x09c7, 0x0003, 0x0000, 0x09ce, + 0x09cb, 0x0001, 0x0065, 0x16b0, 0x0003, 0x0065, 0xffff, 0x16cf, + 0x16e7, 0x0002, 0x0bba, 0x09d6, 0x0003, 0x09da, 0x0b1a, 0x0a7a, + 0x009e, 0x0065, 0xffff, 0xffff, 0xffff, 0xffff, 0x1797, 0x17ee, + 0x186c, 0x18a7, 0x191c, 0x198e, 0x1a03, 0x1a7b, 0x1ac1, 0x1b8b, + 0x1bcd, 0x1c11, 0x1c6d, 0x1cb1, 0x1cf3, 0x1d5c, 0x1ddd, 0x1e43, + // Entry 4DF40 - 4DF7F + 0x1ea6, 0x1ef3, 0x1f2b, 0xffff, 0xffff, 0x1f8d, 0xffff, 0x1fe8, + 0xffff, 0x2055, 0x2090, 0x20c8, 0x20ff, 0xffff, 0xffff, 0x2179, + 0x21bd, 0x2212, 0xffff, 0xffff, 0xffff, 0x2279, 0xffff, 0x22e0, + 0x2334, 0xffff, 0x239e, 0x23f2, 0x2451, 0xffff, 0xffff, 0xffff, + 0xffff, 0x24e8, 0xffff, 0xffff, 0x2555, 0x25ab, 0xffff, 0xffff, + 0x2631, 0x268b, 0x26cf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2799, 0x27ce, 0x2809, 0x284b, 0x288a, 0xffff, 0xffff, + 0x2940, 0xffff, 0x298c, 0xffff, 0xffff, 0x2a09, 0xffff, 0x2aa2, + // Entry 4DF80 - 4DFBF + 0xffff, 0xffff, 0xffff, 0xffff, 0x2b22, 0xffff, 0x2b75, 0x2bd7, + 0x2c2d, 0x2c74, 0xffff, 0xffff, 0xffff, 0x2cd6, 0x2d2c, 0x2d76, + 0xffff, 0xffff, 0x2ddd, 0x2e5f, 0x2ea9, 0x2ede, 0xffff, 0xffff, + 0x2f44, 0x2f85, 0x2fba, 0xffff, 0x300f, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x3100, 0x313e, 0x3184, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x323e, 0xffff, 0xffff, 0x329a, + 0xffff, 0x32de, 0xffff, 0x3338, 0x3376, 0x33bd, 0xffff, 0x340b, + 0x3455, 0xffff, 0xffff, 0xffff, 0x34d4, 0x3512, 0xffff, 0xffff, + // Entry 4DFC0 - 4DFFF + 0x16ff, 0x1826, 0x1af9, 0x1b42, 0xffff, 0xffff, 0x2a4a, 0x3096, + 0x009e, 0x0065, 0x173f, 0x1750, 0x1769, 0x1781, 0x17ae, 0x17f6, + 0x1879, 0x18c8, 0x193c, 0x19af, 0x1a25, 0x1a88, 0x1acd, 0x1b9b, + 0x1bdd, 0x1c29, 0x1c7d, 0x1cc1, 0x1d10, 0x1d81, 0x1df9, 0x1e5e, + 0x1eb9, 0x1eff, 0x1f3c, 0x1f72, 0x1f7e, 0x1f9d, 0x1fd1, 0x2001, + 0x2047, 0x2062, 0x209c, 0x20d3, 0x2110, 0x2146, 0x215d, 0x2189, + 0x21d1, 0x2217, 0x2241, 0x224e, 0x2264, 0x2290, 0x22d2, 0x22f6, + 0x234b, 0x238b, 0x23b4, 0x240b, 0x245e, 0x248c, 0x24a4, 0x24ca, + // Entry 4E000 - 4E03F + 0x24da, 0x24f6, 0x2526, 0x253b, 0x2567, 0x25bc, 0x2614, 0x2623, + 0x2649, 0x269b, 0x26da, 0x2704, 0x271e, 0x2736, 0x2745, 0x2762, + 0x277e, 0x27a4, 0x27db, 0x2819, 0x285a, 0x28aa, 0x2909, 0x2925, + 0x294f, 0x297f, 0x299e, 0x29d6, 0x29f7, 0x2a18, 0x2a8d, 0x2ab0, + 0x2ae0, 0x2aef, 0x2afd, 0x2b0a, 0x2b33, 0x2b69, 0x2b8b, 0x2be9, + 0x2c3e, 0x2c81, 0x2caf, 0x2cbe, 0x2cca, 0x2cec, 0x2d3e, 0x2d83, + 0x2dbd, 0x2dc8, 0x2df7, 0x2e71, 0x2eb4, 0x2eed, 0x2f1f, 0x2f2b, + 0x2f53, 0x2f90, 0x2fc9, 0x2ffb, 0x3022, 0x3068, 0x3076, 0x3083, + // Entry 4E040 - 4E07F + 0x30e5, 0x30f3, 0x310e, 0x314b, 0x3190, 0x31bc, 0x31cb, 0x31e6, + 0x31fe, 0x3217, 0x3225, 0x3231, 0x324b, 0x3279, 0x328c, 0x32a6, + 0x32d2, 0x32f1, 0x332b, 0x3346, 0x3387, 0x33cb, 0x33fb, 0x341d, + 0x3465, 0x3499, 0x34a6, 0x34b8, 0x34e2, 0x3526, 0x25fe, 0x2e3f, + 0x170a, 0x1833, 0x1b07, 0x1b50, 0xffff, 0x29e6, 0x2a56, 0x30a6, + 0x009e, 0x0065, 0xffff, 0xffff, 0xffff, 0xffff, 0x17d0, 0x1810, + 0x1892, 0x18f4, 0x1967, 0x19db, 0x1a52, 0x1aa0, 0x1ae5, 0x1bb6, + 0x1bf9, 0x1c4d, 0x1c99, 0x1cdc, 0x1d38, 0x1db1, 0x1e20, 0x1e84, + // Entry 4E080 - 4E0BF + 0x1ed8, 0x1f17, 0x1f59, 0xffff, 0xffff, 0x1fb9, 0xffff, 0x2026, + 0xffff, 0x207b, 0x20b4, 0x20ec, 0x212d, 0xffff, 0xffff, 0x21a5, + 0x21f1, 0x222e, 0xffff, 0xffff, 0xffff, 0x22b3, 0xffff, 0x2317, + 0x236d, 0xffff, 0x23d5, 0x2430, 0x2477, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2510, 0xffff, 0xffff, 0x258b, 0x25df, 0xffff, 0xffff, + 0x266c, 0x26b7, 0x26f1, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x27bb, 0x27f4, 0x2834, 0x2874, 0x28d5, 0xffff, 0xffff, + 0x2969, 0xffff, 0x29bc, 0xffff, 0xffff, 0x2a33, 0xffff, 0x2aca, + // Entry 4E0C0 - 4E0FF + 0xffff, 0xffff, 0xffff, 0xffff, 0x2b50, 0xffff, 0x2bb3, 0x2c0d, + 0x2c5b, 0x2c9a, 0xffff, 0xffff, 0xffff, 0x2d0e, 0x2d5c, 0x2da2, + 0xffff, 0xffff, 0x2e1d, 0x2e8f, 0x2ecb, 0x2f08, 0xffff, 0xffff, + 0x2f6e, 0x2fa7, 0x2fe4, 0xffff, 0x3047, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x3128, 0x3163, 0x31a8, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x3264, 0xffff, 0xffff, 0x32be, + 0xffff, 0x3310, 0xffff, 0x3360, 0x33a4, 0x33e5, 0xffff, 0x343b, + 0x3481, 0xffff, 0xffff, 0xffff, 0x34fc, 0x3546, 0xffff, 0xffff, + // Entry 4E100 - 4E13F + 0x1720, 0x184b, 0x1b20, 0x1b69, 0xffff, 0xffff, 0x2a6d, 0x30c1, + 0x0003, 0x0bbe, 0x0c2d, 0x0bf1, 0x0031, 0x0057, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x30c6, 0x30cf, 0xffff, 0x30d8, 0x003a, + // Entry 4E140 - 4E17F + 0x0057, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x30c6, 0x30cf, + 0xffff, 0x30d8, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x314b, 0x0031, 0x0057, 0xffff, 0xffff, 0xffff, + // Entry 4E180 - 4E1BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x30ca, 0x30d3, 0xffff, 0x30dc, 0x0001, 0x0002, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, + 0x0014, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 4E1C0 - 4E1FF + 0x0000, 0x0000, 0x0008, 0x001d, 0x0042, 0x0000, 0x0071, 0x00dc, + 0x0000, 0x0000, 0x0000, 0x0002, 0x0020, 0x0031, 0x0001, 0x0022, + 0x000d, 0x0016, 0xffff, 0x00a3, 0x3136, 0x315c, 0x3140, 0x3161, + 0x3165, 0x3169, 0x3149, 0x316d, 0x2761, 0x314e, 0x3153, 0x0001, + 0x0033, 0x000d, 0x0016, 0xffff, 0x00a3, 0x3136, 0x315c, 0x3140, + 0x3161, 0x3165, 0x3169, 0x3149, 0x316d, 0x2761, 0x314e, 0x3153, + 0x0002, 0x0045, 0x005b, 0x0003, 0x0049, 0x0000, 0x0052, 0x0007, + 0x0046, 0x0e98, 0x33f2, 0x3472, 0x3476, 0x3401, 0x3407, 0x347a, + // Entry 4E200 - 4E23F + 0x0007, 0x000d, 0x00f5, 0x355d, 0x3568, 0x0111, 0x356f, 0x3579, + 0x357f, 0x0003, 0x005f, 0x0000, 0x0068, 0x0007, 0x0046, 0x0e98, + 0x33f2, 0x3472, 0x3476, 0x3401, 0x3407, 0x347a, 0x0007, 0x000d, + 0x00f5, 0x355d, 0x3568, 0x0111, 0x356f, 0x3579, 0x357f, 0x0002, + 0x0074, 0x00bd, 0x0003, 0x0078, 0x0099, 0x00b4, 0x0008, 0x0084, + 0x008a, 0x0081, 0x008d, 0x0090, 0x0093, 0x0096, 0x0087, 0x0001, + 0x000d, 0x0187, 0x0001, 0x0066, 0x0000, 0x0001, 0x000d, 0x0199, + 0x0001, 0x0065, 0x0e2d, 0x0001, 0x0056, 0x0845, 0x0001, 0x0066, + // Entry 4E240 - 4E27F + 0x000c, 0x0001, 0x0065, 0x0e44, 0x0001, 0x002f, 0x0176, 0x0008, + 0x0000, 0x0000, 0x00a2, 0x00a8, 0x00ab, 0x00ae, 0x00b1, 0x00a5, + 0x0001, 0x000d, 0x0187, 0x0001, 0x000d, 0x0199, 0x0001, 0x0056, + 0x0845, 0x0001, 0x0066, 0x000c, 0x0001, 0x0065, 0x0e44, 0x0001, + 0x0065, 0x0e4a, 0x0002, 0x00b7, 0x00ba, 0x0001, 0x0066, 0x0000, + 0x0001, 0x0065, 0x0e2d, 0x0003, 0x00c1, 0x00ca, 0x00d3, 0x0002, + 0x00c4, 0x00c7, 0x0001, 0x0066, 0x0000, 0x0001, 0x0065, 0x0e2d, + 0x0002, 0x00cd, 0x00d0, 0x0001, 0x0000, 0x1f9c, 0x0001, 0x0000, + // Entry 4E280 - 4E2BF + 0x21e4, 0x0002, 0x00d6, 0x00d9, 0x0001, 0x0066, 0x0000, 0x0001, + 0x0065, 0x0e2d, 0x0003, 0x0000, 0x0000, 0x00e0, 0x0002, 0x00e3, + 0x00e6, 0x0001, 0x000d, 0x01cd, 0x0002, 0x0065, 0xffff, 0x0e5c, + 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000b, 0x0014, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x001d, 0x0042, 0x0000, + 0x0071, 0x00dc, 0x0000, 0x0000, 0x0000, 0x0002, 0x0020, 0x0031, + 0x0001, 0x0022, 0x000d, 0x0016, 0xffff, 0x00a3, 0x3136, 0x315c, + // Entry 4E2C0 - 4E2FF + 0x3140, 0x3161, 0x3165, 0x3169, 0x3149, 0x316d, 0x2761, 0x314e, + 0x3153, 0x0001, 0x0033, 0x000d, 0x0016, 0xffff, 0x00a3, 0x3136, + 0x315c, 0x3140, 0x3161, 0x3165, 0x3169, 0x3149, 0x316d, 0x2761, + 0x314e, 0x3153, 0x0002, 0x0045, 0x005b, 0x0003, 0x0049, 0x0000, + 0x0052, 0x0007, 0x0046, 0x0e98, 0x33f2, 0x3472, 0x3476, 0x3401, + 0x3407, 0x347a, 0x0007, 0x000d, 0x00f5, 0x355d, 0x3568, 0x0111, + 0x356f, 0x3579, 0x357f, 0x0003, 0x005f, 0x0000, 0x0068, 0x0007, + 0x0046, 0x0e98, 0x33f2, 0x3472, 0x3476, 0x3401, 0x3407, 0x347a, + // Entry 4E300 - 4E33F + 0x0007, 0x000d, 0x00f5, 0x355d, 0x3568, 0x0111, 0x356f, 0x3579, + 0x357f, 0x0002, 0x0074, 0x00bd, 0x0003, 0x0078, 0x0099, 0x00b4, + 0x0008, 0x0084, 0x008a, 0x0081, 0x008d, 0x0090, 0x0093, 0x0096, + 0x0087, 0x0001, 0x000d, 0x0187, 0x0001, 0x0066, 0x0000, 0x0001, + 0x000d, 0x0199, 0x0001, 0x0065, 0x0e2d, 0x0001, 0x0056, 0x0845, + 0x0001, 0x0066, 0x000c, 0x0001, 0x0065, 0x0e44, 0x0001, 0x002f, + 0x0176, 0x0008, 0x0000, 0x0000, 0x00a2, 0x00a8, 0x00ab, 0x00ae, + 0x00b1, 0x00a5, 0x0001, 0x000d, 0x0187, 0x0001, 0x000d, 0x0199, + // Entry 4E340 - 4E37F + 0x0001, 0x0056, 0x0845, 0x0001, 0x0066, 0x000c, 0x0001, 0x0065, + 0x0e44, 0x0001, 0x0065, 0x0e4a, 0x0002, 0x00b7, 0x00ba, 0x0001, + 0x0066, 0x0000, 0x0001, 0x0065, 0x0e2d, 0x0003, 0x00c1, 0x00ca, + 0x00d3, 0x0002, 0x00c4, 0x00c7, 0x0001, 0x0066, 0x0000, 0x0001, + 0x0065, 0x0e2d, 0x0002, 0x00cd, 0x00d0, 0x0001, 0x0000, 0x1f9c, + 0x0001, 0x0000, 0x21e4, 0x0002, 0x00d6, 0x00d9, 0x0001, 0x0066, + 0x0000, 0x0001, 0x0065, 0x0e2d, 0x0003, 0x0000, 0x0000, 0x00e0, + 0x0001, 0x00e2, 0x0001, 0x000d, 0x01cd, 0x0001, 0x0002, 0x0008, + // Entry 4E380 - 4E3BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0014, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0004, 0x0019, 0x003e, 0x0000, 0x0057, 0x0002, 0x001c, + 0x002d, 0x0001, 0x001e, 0x000d, 0x0016, 0xffff, 0x00a3, 0x3136, + 0x315c, 0x3140, 0x3161, 0x3165, 0x3169, 0x3149, 0x316d, 0x2761, + 0x314e, 0x3153, 0x0001, 0x002f, 0x000d, 0x0016, 0xffff, 0x00a3, + 0x3136, 0x315c, 0x3140, 0x3161, 0x3165, 0x3169, 0x3149, 0x316d, + 0x2761, 0x314e, 0x3153, 0x0002, 0x0041, 0x004c, 0x0001, 0x0043, + // Entry 4E3C0 - 4E3FF + 0x0007, 0x0046, 0x0e98, 0x33f2, 0x3472, 0x3476, 0x3401, 0x3407, + 0x347a, 0x0001, 0x004e, 0x0007, 0x0046, 0x0e98, 0x33f2, 0x3472, + 0x3476, 0x3401, 0x3407, 0x347a, 0x0002, 0x005a, 0x0093, 0x0002, + 0x005d, 0x0078, 0x0008, 0x0000, 0x0000, 0x0066, 0x006c, 0x006f, + 0x0072, 0x0075, 0x0069, 0x0001, 0x000d, 0x0187, 0x0001, 0x000d, + 0x0199, 0x0001, 0x0056, 0x0845, 0x0001, 0x0066, 0x000c, 0x0001, + 0x0065, 0x0e36, 0x0001, 0x002f, 0x0176, 0x0008, 0x0000, 0x0000, + 0x0081, 0x0087, 0x008a, 0x008d, 0x0090, 0x0084, 0x0001, 0x000d, + // Entry 4E400 - 4E43F + 0x0187, 0x0001, 0x000d, 0x0199, 0x0001, 0x0056, 0x0845, 0x0001, + 0x0066, 0x000c, 0x0001, 0x0065, 0x0e44, 0x0001, 0x0065, 0x0e4a, + 0x0002, 0x0000, 0x0096, 0x0002, 0x0099, 0x009c, 0x0001, 0x0000, + 0x1f9c, 0x0001, 0x0000, 0x21e4, 0x0003, 0x0004, 0x0627, 0x0aa8, + 0x0012, 0x0017, 0x0033, 0x004a, 0x0097, 0x00eb, 0x0000, 0x0138, + 0x0163, 0x0390, 0x03f7, 0x045a, 0x0000, 0x0000, 0x0000, 0x0000, + 0x049f, 0x05ab, 0x0608, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0020, 0x0000, 0x0000, 0x9006, 0x0003, 0x0029, 0x002e, 0x0024, + // Entry 4E440 - 4E47F + 0x0001, 0x0026, 0x0001, 0x0066, 0x0014, 0x0001, 0x002b, 0x0001, + 0x0000, 0x0000, 0x0001, 0x0030, 0x0001, 0x0000, 0x0000, 0x0001, + 0x0035, 0x0001, 0x0037, 0x0003, 0x0000, 0x0000, 0x003b, 0x000d, + 0x0066, 0xffff, 0x0024, 0x0035, 0x0044, 0x0054, 0x0065, 0x0074, + 0x0085, 0x0095, 0x00a7, 0x00b7, 0x00c7, 0x00d6, 0x0001, 0x004c, + 0x0002, 0x004f, 0x0073, 0x0003, 0x0053, 0x0000, 0x0063, 0x000e, + 0x0014, 0xffff, 0x0395, 0x356c, 0x3573, 0x03a6, 0x3581, 0x3588, + 0x3590, 0x359a, 0x34cc, 0x35a4, 0x35af, 0x3720, 0x35bb, 0x000e, + // Entry 4E480 - 4E4BF + 0x0014, 0xffff, 0x0395, 0x356c, 0x3573, 0x03a6, 0x3581, 0x3588, + 0x3590, 0x359a, 0x34cc, 0x35a4, 0x35af, 0x3720, 0x35bb, 0x0003, + 0x0077, 0x0000, 0x0087, 0x000e, 0x0000, 0xffff, 0x03ce, 0x4139, + 0x4140, 0x4148, 0x414e, 0x4155, 0x415d, 0x4167, 0x3b07, 0x4171, + 0x417c, 0x4182, 0x4188, 0x000e, 0x0000, 0xffff, 0x03ce, 0x4139, + 0x4140, 0x4148, 0x414e, 0x4155, 0x415d, 0x4167, 0x3b07, 0x4171, + 0x417c, 0x4182, 0x4188, 0x000a, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00a2, 0x0005, 0x0000, + // Entry 4E4C0 - 4E4FF + 0x0000, 0x0000, 0x0000, 0x00a8, 0x0001, 0x00aa, 0x0001, 0x00ac, + 0x003d, 0x0000, 0xffff, 0x01bd, 0x01c4, 0x01cc, 0x01d5, 0x01de, + 0x01e6, 0x01ec, 0x01f4, 0x01fc, 0x0205, 0x020d, 0x0214, 0x021b, + 0x0223, 0x022d, 0x0234, 0x023b, 0x0245, 0x024c, 0x0253, 0x025b, + 0x0264, 0x026b, 0x0273, 0x027c, 0x0282, 0x028a, 0x0293, 0x029b, + 0x02a4, 0x02ab, 0x02b2, 0x02b9, 0x02c3, 0x02cc, 0x02d2, 0x02d9, + 0x02e1, 0x02ea, 0x02f2, 0x02fa, 0x0303, 0x0309, 0x0311, 0x031a, + 0x0322, 0x0329, 0x0331, 0x0339, 0x0340, 0x0349, 0x0351, 0x0358, + // Entry 4E500 - 4E53F + 0x0362, 0x036a, 0x0370, 0x0377, 0x0381, 0x0389, 0x0390, 0x0001, + 0x00ed, 0x0002, 0x00f0, 0x0114, 0x0003, 0x00f4, 0x0000, 0x0104, + 0x000e, 0x0025, 0xffff, 0x0159, 0x0165, 0x3655, 0x365b, 0x3663, + 0x017a, 0x0183, 0x018c, 0x0194, 0x019c, 0x01a3, 0x01aa, 0x01b3, + 0x000e, 0x0025, 0xffff, 0x0159, 0x0165, 0x3655, 0x365b, 0x3663, + 0x017a, 0x0183, 0x018c, 0x0194, 0x019c, 0x01a3, 0x01aa, 0x01b3, + 0x0003, 0x0118, 0x0000, 0x0128, 0x000e, 0x0017, 0xffff, 0x02fd, + 0x2d7d, 0x2ef2, 0x2ef8, 0x2f00, 0x0330, 0x0339, 0x0342, 0x2f04, + // Entry 4E540 - 4E57F + 0x2f0c, 0x2f13, 0x2f1a, 0x2f23, 0x000e, 0x0017, 0xffff, 0x02fd, + 0x2d7d, 0x2ef2, 0x2ef8, 0x2f00, 0x0330, 0x0339, 0x0342, 0x2f04, + 0x2f0c, 0x2f13, 0x2f1a, 0x2f23, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0141, 0x0000, 0x0152, 0x0004, 0x014f, 0x0149, + 0x0146, 0x014c, 0x0001, 0x0002, 0x0000, 0x0001, 0x0002, 0x0010, + 0x0001, 0x0002, 0x001b, 0x0001, 0x001d, 0x07b3, 0x0004, 0x0160, + 0x015a, 0x0157, 0x015d, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, + // Entry 4E580 - 4E5BF + 0x016c, 0x01d1, 0x0228, 0x025d, 0x0334, 0x0359, 0x036a, 0x037f, + 0x0002, 0x016f, 0x01a0, 0x0003, 0x0173, 0x0182, 0x0191, 0x000d, + 0x0016, 0xffff, 0x00a3, 0x3136, 0x3173, 0x3140, 0x3161, 0x3178, + 0x317d, 0x3182, 0x25f7, 0x2761, 0x314e, 0x3153, 0x000d, 0x0018, + 0xffff, 0x2a31, 0x2a07, 0x2a33, 0x2a0b, 0x2a33, 0x2a31, 0x2a31, + 0x2a0b, 0x2a1d, 0x2a11, 0x2a13, 0x2a15, 0x000d, 0x003b, 0xffff, + 0x00e5, 0x00ed, 0x74a9, 0x74ae, 0x74b4, 0x74b8, 0x74bd, 0x74c2, + 0x74ca, 0x74d4, 0x74dc, 0x74e5, 0x0003, 0x01a4, 0x01b3, 0x01c2, + // Entry 4E5C0 - 4E5FF + 0x000d, 0x0016, 0xffff, 0x00a3, 0x3136, 0x3187, 0x3140, 0x318c, + 0x3190, 0x3195, 0x3182, 0x25f7, 0x2761, 0x314e, 0x3153, 0x000d, + 0x0018, 0xffff, 0x2a31, 0x2a07, 0x2a33, 0x2a0b, 0x2a33, 0x2a31, + 0x2a31, 0x2a0b, 0x2a1d, 0x2a11, 0x2a13, 0x2a15, 0x000d, 0x003b, + 0xffff, 0x00e5, 0x00ed, 0x74ee, 0x74ae, 0x74f3, 0x74f7, 0x74fc, + 0x74c2, 0x74ca, 0x74d4, 0x74dc, 0x74e5, 0x0002, 0x01d4, 0x01fe, + 0x0005, 0x01da, 0x01e3, 0x01f5, 0x0000, 0x01ec, 0x0007, 0x0066, + 0x00e6, 0x00eb, 0x00f0, 0x00f4, 0x00f8, 0x00fd, 0x0101, 0x0007, + // Entry 4E600 - 4E63F + 0x0018, 0x2a1d, 0x2a33, 0x2a35, 0x2a11, 0x2a35, 0x2a07, 0x2a3f, + 0x0007, 0x0066, 0x0106, 0x010a, 0x010e, 0x0111, 0x0114, 0x0117, + 0x011a, 0x0007, 0x0066, 0x011e, 0x0126, 0x012e, 0x0135, 0x013c, + 0x0144, 0x014b, 0x0005, 0x0204, 0x020d, 0x021f, 0x0000, 0x0216, + 0x0007, 0x0066, 0x00e6, 0x00eb, 0x00f0, 0x00f4, 0x00f8, 0x00fd, + 0x0101, 0x0007, 0x0018, 0x2a1d, 0x2a33, 0x2a35, 0x2a11, 0x2a35, + 0x2a07, 0x2a3f, 0x0007, 0x0066, 0x0106, 0x010a, 0x010e, 0x0111, + 0x0114, 0x0117, 0x011a, 0x0007, 0x0066, 0x011e, 0x0126, 0x012e, + // Entry 4E640 - 4E67F + 0x0135, 0x013c, 0x0144, 0x014b, 0x0002, 0x022b, 0x0244, 0x0003, + 0x022f, 0x0236, 0x023d, 0x0005, 0x0000, 0xffff, 0x1f17, 0x1f1a, + 0x1f1d, 0x1f20, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x0005, 0x0066, 0xffff, 0x0153, 0x0161, 0x016f, 0x017d, + 0x0003, 0x0248, 0x024f, 0x0256, 0x0005, 0x0000, 0xffff, 0x1f17, + 0x1f1a, 0x1f1d, 0x1f20, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x0005, 0x0066, 0xffff, 0x0153, 0x0161, 0x016f, + 0x017d, 0x0002, 0x0260, 0x02ca, 0x0003, 0x0264, 0x0286, 0x02a8, + // Entry 4E680 - 4E6BF + 0x0009, 0x0271, 0x0274, 0x026e, 0x0277, 0x027d, 0x0280, 0x0283, + 0x0000, 0x027a, 0x0001, 0x004f, 0x07e3, 0x0001, 0x0066, 0x018b, + 0x0001, 0x0066, 0x018e, 0x0001, 0x0066, 0x0191, 0x0001, 0x0066, + 0x019b, 0x0001, 0x0066, 0x01a6, 0x0001, 0x0066, 0x01b2, 0x0001, + 0x0066, 0x01bf, 0x0009, 0x0293, 0x0296, 0x0290, 0x0299, 0x029f, + 0x02a2, 0x02a5, 0x0000, 0x029c, 0x0001, 0x004f, 0x07ae, 0x0001, + 0x0066, 0x018b, 0x0001, 0x0066, 0x018e, 0x0001, 0x0066, 0x0191, + 0x0001, 0x0066, 0x019b, 0x0001, 0x0066, 0x01a6, 0x0001, 0x0066, + // Entry 4E6C0 - 4E6FF + 0x01b2, 0x0001, 0x0066, 0x01bf, 0x0009, 0x02b5, 0x02b8, 0x02b2, + 0x02bb, 0x02c1, 0x02c4, 0x02c7, 0x0000, 0x02be, 0x0001, 0x004f, + 0x07e3, 0x0001, 0x0066, 0x018b, 0x0001, 0x0066, 0x018e, 0x0001, + 0x0066, 0x01ca, 0x0001, 0x0066, 0x01d7, 0x0001, 0x0066, 0x01e8, + 0x0001, 0x0066, 0x01b2, 0x0001, 0x0066, 0x01bf, 0x0003, 0x02ce, + 0x02f0, 0x0312, 0x0009, 0x02db, 0x02de, 0x02d8, 0x02e1, 0x02e7, + 0x02ea, 0x02ed, 0x0000, 0x02e4, 0x0001, 0x004f, 0x07e3, 0x0001, + 0x0052, 0x01b0, 0x0001, 0x0052, 0x01b5, 0x0001, 0x0066, 0x01fa, + // Entry 4E700 - 4E73F + 0x0001, 0x0066, 0x0201, 0x0001, 0x0066, 0x0208, 0x0001, 0x0066, + 0x0210, 0x0001, 0x004f, 0x07ce, 0x0009, 0x02fd, 0x0300, 0x02fa, + 0x0303, 0x0309, 0x030c, 0x030f, 0x0000, 0x0306, 0x0001, 0x004f, + 0x07ae, 0x0001, 0x0066, 0x018b, 0x0001, 0x0066, 0x018e, 0x0001, + 0x004f, 0x07b4, 0x0001, 0x0066, 0x0201, 0x0001, 0x0066, 0x0208, + 0x0001, 0x0066, 0x0210, 0x0001, 0x004f, 0x07ce, 0x0009, 0x031f, + 0x0322, 0x031c, 0x0325, 0x032b, 0x032e, 0x0331, 0x0000, 0x0328, + 0x0001, 0x004f, 0x07e3, 0x0001, 0x0066, 0x0217, 0x0001, 0x0016, + // Entry 4E740 - 4E77F + 0x0216, 0x0001, 0x0066, 0x01fa, 0x0001, 0x0066, 0x0217, 0x0001, + 0x0016, 0x0216, 0x0001, 0x0066, 0x0210, 0x0001, 0x004f, 0x07ce, + 0x0003, 0x0343, 0x034e, 0x0338, 0x0002, 0x033b, 0x033f, 0x0002, + 0x0066, 0x0222, 0x0252, 0x0002, 0x0066, 0x0230, 0x0260, 0x0002, + 0x0346, 0x034a, 0x0002, 0x0016, 0x022c, 0x0250, 0x0002, 0x0016, + 0x026f, 0x0276, 0x0002, 0x0351, 0x0355, 0x0002, 0x0016, 0x022c, + 0x0250, 0x0002, 0x0016, 0x026f, 0x0276, 0x0004, 0x0367, 0x0361, + 0x035e, 0x0364, 0x0001, 0x0002, 0x0025, 0x0001, 0x0002, 0x0033, + // Entry 4E780 - 4E7BF + 0x0001, 0x0002, 0x003c, 0x0001, 0x0000, 0x051c, 0x0004, 0x037b, + 0x0373, 0x036f, 0x0377, 0x0002, 0x0052, 0x01ba, 0x01ce, 0x0002, + 0x0000, 0x0532, 0x3a9d, 0x0002, 0x0000, 0x053d, 0x3aa8, 0x0002, + 0x0000, 0x0546, 0x3ab1, 0x0004, 0x038d, 0x0387, 0x0384, 0x038a, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x0399, 0x0000, 0x0000, + 0x0000, 0x03e4, 0x0000, 0x0000, 0x9006, 0x0002, 0x039c, 0x03c0, + 0x0003, 0x03a0, 0x0000, 0x03b0, 0x000e, 0x0066, 0x02b2, 0x027c, + // Entry 4E7C0 - 4E7FF + 0x0284, 0x028d, 0x0295, 0x029c, 0x02a4, 0x02ac, 0x02bb, 0x02c2, + 0x02c9, 0x02d0, 0x02d8, 0x02db, 0x000e, 0x0066, 0x02b2, 0x027c, + 0x0284, 0x028d, 0x0295, 0x029c, 0x02a4, 0x02ac, 0x02bb, 0x02c2, + 0x02c9, 0x02d0, 0x02d8, 0x02db, 0x0003, 0x03c4, 0x0000, 0x03d4, + 0x000e, 0x0066, 0x0317, 0x02e1, 0x02e9, 0x02f2, 0x02fa, 0x0301, + 0x0309, 0x0311, 0x0320, 0x0327, 0x032e, 0x0335, 0x033d, 0x0340, + 0x000e, 0x0066, 0x0317, 0x02e1, 0x02e9, 0x02f2, 0x02fa, 0x0301, + 0x0309, 0x0311, 0x0320, 0x0327, 0x032e, 0x0335, 0x033d, 0x0340, + // Entry 4E800 - 4E83F + 0x0003, 0x03ed, 0x03f2, 0x03e8, 0x0001, 0x03ea, 0x0001, 0x0022, + 0x0b8d, 0x0001, 0x03ef, 0x0001, 0x0000, 0x04ef, 0x0001, 0x03f4, + 0x0001, 0x0000, 0x04ef, 0x0008, 0x0400, 0x0000, 0x0000, 0x0000, + 0x0447, 0x0000, 0x0000, 0x9006, 0x0002, 0x0403, 0x0425, 0x0003, + 0x0407, 0x0000, 0x0416, 0x000d, 0x0016, 0xffff, 0x0334, 0x2606, + 0x2610, 0x261a, 0x2624, 0x262e, 0x2639, 0x2641, 0x2649, 0x2658, + 0x266d, 0x2664, 0x000d, 0x0016, 0xffff, 0x0334, 0x2606, 0x2610, + 0x261a, 0x2624, 0x262e, 0x2639, 0x2641, 0x2649, 0x2658, 0x266d, + // Entry 4E840 - 4E87F + 0x2664, 0x0003, 0x0429, 0x0000, 0x0438, 0x000d, 0x0000, 0xffff, + 0x05a2, 0x4190, 0x22cf, 0x419a, 0x41a4, 0x41ae, 0x41b9, 0x41c1, + 0x41c9, 0x41d8, 0x41de, 0x41e4, 0x000d, 0x0000, 0xffff, 0x05a2, + 0x4190, 0x22cf, 0x419a, 0x41a4, 0x41ae, 0x41b9, 0x41c1, 0x41c9, + 0x41d8, 0x41de, 0x41e4, 0x0003, 0x0450, 0x0455, 0x044b, 0x0001, + 0x044d, 0x0001, 0x0066, 0x0346, 0x0001, 0x0452, 0x0001, 0x0026, + 0x16fa, 0x0001, 0x0457, 0x0001, 0x0026, 0x16fa, 0x0008, 0x0463, + 0x0000, 0x0000, 0x0000, 0x048c, 0x0000, 0x0000, 0x9006, 0x0002, + // Entry 4E880 - 4E8BF + 0x0466, 0x0479, 0x0003, 0x0000, 0x0000, 0x046a, 0x000d, 0x0016, + 0xffff, 0x0393, 0x319a, 0x2566, 0x2577, 0x31a0, 0x31ad, 0x2745, + 0x31bd, 0x274b, 0x03df, 0x31c7, 0x31d5, 0x0003, 0x0000, 0x0000, + 0x047d, 0x000d, 0x0000, 0xffff, 0x0657, 0x41ed, 0x41f3, 0x4204, + 0x4215, 0x4222, 0x3c38, 0x4232, 0x423c, 0x06a3, 0x4244, 0x4252, + 0x0003, 0x0495, 0x049a, 0x0490, 0x0001, 0x0492, 0x0001, 0x0066, + 0x0350, 0x0001, 0x0497, 0x0001, 0x0000, 0x06c8, 0x0001, 0x049c, + 0x0001, 0x0000, 0x06c8, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 4E8C0 - 4E8FF + 0x04a8, 0x0000, 0x0000, 0x059a, 0x0001, 0x04aa, 0x0001, 0x04ac, + 0x00ec, 0x0000, 0x06cb, 0x06dd, 0x06f1, 0x0705, 0x0719, 0x072c, + 0x073e, 0x0750, 0x0762, 0x0775, 0x247f, 0x425e, 0x4279, 0x4295, + 0x42af, 0x0806, 0x081e, 0x0830, 0x0843, 0x0857, 0x086a, 0x087d, + 0x0891, 0x08a3, 0x08b5, 0x27fb, 0x280d, 0x08ed, 0x2820, 0x0914, + 0x2833, 0x093a, 0x094e, 0x095f, 0x2847, 0x0985, 0x0999, 0x09ae, + 0x09c2, 0x09d3, 0x09e6, 0x09f7, 0x2e85, 0x0a20, 0x0a33, 0x0a46, + 0x0a58, 0x2ebb, 0x0a7b, 0x0a8c, 0x0aa2, 0x0ab7, 0x0acc, 0x0ae1, + // Entry 4E900 - 4E93F + 0x0af6, 0x0b0b, 0x0b1e, 0x0b32, 0x0b48, 0x0b60, 0x0b77, 0x0b8d, + 0x0ba2, 0x0bb6, 0x0bcb, 0x0be1, 0x0bf6, 0x0c0b, 0x287c, 0x0c37, + 0x0c4c, 0x288f, 0x0c74, 0x28a2, 0x0c9f, 0x0cb3, 0x0cc8, 0x0cdd, + 0x0cf2, 0x0d07, 0x30fc, 0x28cc, 0x0d47, 0x0d5b, 0x0d6f, 0x0d85, + 0x28df, 0x0db0, 0x0dc3, 0x28f2, 0x0def, 0x0e04, 0x0e19, 0x2907, + 0x0e43, 0x0e57, 0x0e6d, 0x0e80, 0x0e96, 0x3220, 0x0ec1, 0x0ed4, + 0x0ee9, 0x0efd, 0x0f12, 0x0f26, 0x292e, 0x0f50, 0x0f64, 0x0f7a, + 0x0f8f, 0x0fa4, 0x331a, 0x2958, 0x0fe6, 0x0ffd, 0x296e, 0x1028, + // Entry 4E940 - 4E97F + 0x103c, 0x1051, 0x1066, 0x107a, 0x108e, 0x2985, 0x10b8, 0x10cf, + 0x10e3, 0x42c9, 0x1110, 0x1124, 0x1139, 0x114d, 0x1163, 0x1178, + 0x118d, 0x42dd, 0x11ba, 0x34a6, 0x11e7, 0x11fb, 0x120f, 0x1224, + 0x1238, 0x124d, 0x1262, 0x1276, 0x29c1, 0x12a0, 0x12b5, 0x12ca, + 0x12df, 0x29d5, 0x1308, 0x29eb, 0x1335, 0x134b, 0x24f6, 0x1374, + 0x1388, 0x139e, 0x13b4, 0x13ca, 0x13e0, 0x13f4, 0x140b, 0x141f, + 0x1435, 0x144b, 0x145f, 0x1473, 0x1489, 0x149c, 0x14b3, 0x14c8, + 0x36a3, 0x14f5, 0x150b, 0x1522, 0x1538, 0x154f, 0x1565, 0x157b, + // Entry 4E980 - 4E9BF + 0x158f, 0x15a4, 0x15bb, 0x15d0, 0x15e4, 0x15f8, 0x160d, 0x1621, + 0x2a13, 0x164d, 0x1661, 0x1676, 0x168a, 0x16a0, 0x16b6, 0x2a28, + 0x37ef, 0x16f7, 0x170c, 0x2a4f, 0x2a64, 0x174a, 0x175e, 0x1773, + 0x2a7b, 0x179b, 0x17b1, 0x17c7, 0x17db, 0x17f2, 0x1808, 0x181d, + 0x1832, 0x38f9, 0x250a, 0x1874, 0x3938, 0x189e, 0x18b3, 0x18c8, + 0x18dd, 0x18f1, 0x1906, 0x191b, 0x192f, 0x1942, 0x3987, 0x196d, + 0x1983, 0x1997, 0x2ac7, 0x2acd, 0x2ad5, 0x2adc, 0x0004, 0x05a8, + 0x05a2, 0x059f, 0x05a5, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + // Entry 4E9C0 - 4E9FF + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, + 0x05b4, 0x0000, 0x0000, 0x0000, 0x05fb, 0x0000, 0x0000, 0x9006, + 0x0002, 0x05b7, 0x05d9, 0x0003, 0x05bb, 0x0000, 0x05ca, 0x000d, + 0x0014, 0xffff, 0x0916, 0x347a, 0x3726, 0x35ee, 0x372f, 0x3499, + 0x35f2, 0x3737, 0x373e, 0x3604, 0x0963, 0x096a, 0x000d, 0x0014, + 0xffff, 0x0916, 0x347a, 0x3726, 0x35ee, 0x372f, 0x3499, 0x35f2, + 0x3737, 0x373e, 0x3604, 0x0963, 0x096a, 0x0003, 0x05dd, 0x0000, + 0x05ec, 0x000d, 0x0000, 0xffff, 0x19c9, 0x19d3, 0x42f2, 0x42fb, + // Entry 4EA00 - 4EA3F + 0x42ff, 0x19f2, 0x4307, 0x430c, 0x4313, 0x2575, 0x4319, 0x4320, + 0x000d, 0x0000, 0xffff, 0x19c9, 0x19d3, 0x42f2, 0x42fb, 0x42ff, + 0x19f2, 0x4307, 0x430c, 0x4313, 0x2575, 0x4319, 0x4320, 0x0002, + 0x05fe, 0x0603, 0x0001, 0x0600, 0x0001, 0x0000, 0x1a1d, 0x0001, + 0x0605, 0x0001, 0x0000, 0x1a1d, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0611, 0x0000, 0x0000, 0x9006, 0x0003, 0x061b, 0x0621, + 0x0615, 0x0001, 0x0617, 0x0002, 0x0066, 0x035c, 0x0372, 0x0001, + 0x061d, 0x0002, 0x0066, 0x0379, 0x0384, 0x0001, 0x0623, 0x0002, + // Entry 4EA40 - 4EA7F + 0x0066, 0x0389, 0x0384, 0x0042, 0x066a, 0x066f, 0x0674, 0x0679, + 0x0690, 0x06a7, 0x06be, 0x06d5, 0x06ec, 0x0703, 0x071a, 0x0731, + 0x0748, 0x0763, 0x077e, 0x0799, 0x079e, 0x07a3, 0x07a8, 0x07c1, + 0x07da, 0x07f3, 0x07f8, 0x07fd, 0x0802, 0x0807, 0x080c, 0x0811, + 0x0816, 0x081b, 0x0820, 0x0834, 0x0848, 0x085c, 0x0870, 0x0884, + 0x0898, 0x08ac, 0x08c0, 0x08d4, 0x08e8, 0x08fc, 0x0910, 0x0924, + 0x0938, 0x094c, 0x0960, 0x0974, 0x0988, 0x099c, 0x09b0, 0x09c4, + 0x09c9, 0x09ce, 0x09d3, 0x09e9, 0x09ff, 0x0a15, 0x0a2b, 0x0a41, + // Entry 4EA80 - 4EABF + 0x0a57, 0x0a6d, 0x0a83, 0x0a99, 0x0a9e, 0x0aa3, 0x0001, 0x066c, + 0x0001, 0x0001, 0x0040, 0x0001, 0x0671, 0x0001, 0x0001, 0x0040, + 0x0001, 0x0676, 0x0001, 0x0001, 0x0040, 0x0003, 0x067d, 0x0680, + 0x0685, 0x0001, 0x0016, 0x041c, 0x0003, 0x0066, 0x0390, 0x0397, + 0x039d, 0x0002, 0x0688, 0x068c, 0x0002, 0x0016, 0x043c, 0x043c, + 0x0002, 0x0066, 0x03a8, 0x03a8, 0x0003, 0x0694, 0x0697, 0x069c, + 0x0001, 0x0016, 0x041c, 0x0003, 0x0066, 0x0390, 0x0397, 0x039d, + 0x0002, 0x069f, 0x06a3, 0x0002, 0x0016, 0x043c, 0x043c, 0x0002, + // Entry 4EAC0 - 4EAFF + 0x0066, 0x03bb, 0x03bb, 0x0003, 0x06ab, 0x06ae, 0x06b3, 0x0001, + 0x0016, 0x041c, 0x0003, 0x0066, 0x0390, 0x0397, 0x039d, 0x0002, + 0x06b6, 0x06ba, 0x0002, 0x004f, 0x08c4, 0x08c4, 0x0002, 0x0066, + 0x03cc, 0x03cc, 0x0003, 0x06c2, 0x06c5, 0x06ca, 0x0001, 0x000d, + 0x03c6, 0x0003, 0x0066, 0x03d7, 0x03e8, 0x03f6, 0x0002, 0x06cd, + 0x06d1, 0x0002, 0x0016, 0x0485, 0x0485, 0x0002, 0x0066, 0x0405, + 0x0405, 0x0003, 0x06d9, 0x06dc, 0x06e1, 0x0001, 0x000d, 0x0444, + 0x0003, 0x0066, 0x041c, 0x0427, 0x0431, 0x0002, 0x06e4, 0x06e8, + // Entry 4EB00 - 4EB3F + 0x0002, 0x004f, 0x0926, 0x0926, 0x0002, 0x0066, 0x043c, 0x043c, + 0x0003, 0x06f0, 0x06f3, 0x06f8, 0x0001, 0x000d, 0x0444, 0x0003, + 0x0066, 0x041c, 0x0427, 0x0431, 0x0002, 0x06fb, 0x06ff, 0x0002, + 0x004f, 0x0943, 0x0943, 0x0002, 0x0066, 0x044d, 0x044d, 0x0003, + 0x0707, 0x070a, 0x070f, 0x0001, 0x0052, 0x0249, 0x0003, 0x0066, + 0x0457, 0x0467, 0x0474, 0x0002, 0x0712, 0x0716, 0x0002, 0x0052, + 0x1fef, 0x027a, 0x0002, 0x0066, 0x0498, 0x0482, 0x0003, 0x071e, + 0x0721, 0x0726, 0x0001, 0x0000, 0x3d03, 0x0003, 0x0066, 0x04b0, + // Entry 4EB40 - 4EB7F + 0x04bd, 0x04c9, 0x0002, 0x0729, 0x072d, 0x0002, 0x0052, 0x05d2, + 0x05d2, 0x0002, 0x0066, 0x04d6, 0x04d6, 0x0003, 0x0735, 0x0738, + 0x073d, 0x0001, 0x0066, 0x00eb, 0x0003, 0x0066, 0x04b0, 0x04bd, + 0x04c9, 0x0002, 0x0740, 0x0744, 0x0002, 0x0066, 0x04e9, 0x04e9, + 0x0002, 0x0066, 0x04f4, 0x04f4, 0x0004, 0x074d, 0x0750, 0x0755, + 0x0760, 0x0001, 0x0066, 0x0500, 0x0003, 0x0066, 0x0506, 0x0514, + 0x0520, 0x0002, 0x0758, 0x075c, 0x0002, 0x0066, 0x053a, 0x052d, + 0x0002, 0x0066, 0x055d, 0x0548, 0x0001, 0x0066, 0x0573, 0x0004, + // Entry 4EB80 - 4EBBF + 0x0768, 0x076b, 0x0770, 0x077b, 0x0001, 0x0000, 0x1f94, 0x0003, + 0x0066, 0x0583, 0x058d, 0x0596, 0x0002, 0x0773, 0x0777, 0x0002, + 0x0052, 0x035e, 0x035e, 0x0002, 0x0066, 0x05a0, 0x05a0, 0x0001, + 0x0066, 0x0573, 0x0004, 0x0783, 0x0786, 0x078b, 0x0796, 0x0001, + 0x0000, 0x1f94, 0x0003, 0x0066, 0x0583, 0x058d, 0x0596, 0x0002, + 0x078e, 0x0792, 0x0002, 0x0052, 0x0386, 0x0386, 0x0002, 0x0066, + 0x05b2, 0x05b2, 0x0001, 0x0066, 0x0573, 0x0001, 0x079b, 0x0001, + 0x0066, 0x05bb, 0x0001, 0x07a0, 0x0001, 0x0066, 0x05cc, 0x0001, + // Entry 4EBC0 - 4EBFF + 0x07a5, 0x0001, 0x0066, 0x05d8, 0x0003, 0x07ac, 0x07af, 0x07b6, + 0x0001, 0x0057, 0x005f, 0x0005, 0x0066, 0x05ef, 0x05f6, 0x05fc, + 0x05e3, 0x0605, 0x0002, 0x07b9, 0x07bd, 0x0002, 0x0016, 0x31e1, + 0x06a6, 0x0002, 0x0066, 0x0626, 0x0613, 0x0003, 0x07c5, 0x07c8, + 0x07cf, 0x0001, 0x0057, 0x005f, 0x0005, 0x0066, 0x05ef, 0x05f6, + 0x05fc, 0x05e3, 0x0605, 0x0002, 0x07d2, 0x07d6, 0x0002, 0x0066, + 0x063b, 0x063b, 0x0002, 0x0066, 0x0655, 0x0644, 0x0003, 0x07de, + 0x07e1, 0x07e8, 0x0001, 0x0057, 0x005f, 0x0005, 0x0066, 0x0668, + // Entry 4EC00 - 4EC3F + 0x066e, 0x0673, 0x05e3, 0x0605, 0x0002, 0x07eb, 0x07ef, 0x0002, + 0x0000, 0x1b48, 0x1b48, 0x0002, 0x0066, 0x067b, 0x067b, 0x0001, + 0x07f5, 0x0001, 0x0066, 0x0684, 0x0001, 0x07fa, 0x0001, 0x0066, + 0x0684, 0x0001, 0x07ff, 0x0001, 0x0066, 0x0684, 0x0001, 0x0804, + 0x0001, 0x0066, 0x0694, 0x0001, 0x0809, 0x0001, 0x0066, 0x0694, + 0x0001, 0x080e, 0x0001, 0x0066, 0x0694, 0x0001, 0x0813, 0x0001, + 0x0066, 0x069d, 0x0001, 0x0818, 0x0001, 0x0066, 0x06af, 0x0001, + 0x081d, 0x0001, 0x0066, 0x06af, 0x0003, 0x0000, 0x0824, 0x0829, + // Entry 4EC40 - 4EC7F + 0x0003, 0x0066, 0x06c0, 0x06d6, 0x06ea, 0x0002, 0x082c, 0x0830, + 0x0002, 0x0066, 0x070e, 0x06ff, 0x0002, 0x0066, 0x0736, 0x071f, + 0x0003, 0x0000, 0x0838, 0x083d, 0x0003, 0x0066, 0x074f, 0x0763, + 0x0775, 0x0002, 0x0840, 0x0844, 0x0002, 0x0066, 0x0788, 0x0788, + 0x0002, 0x0066, 0x0795, 0x0795, 0x0003, 0x0000, 0x084c, 0x0851, + 0x0003, 0x0066, 0x07a8, 0x07b5, 0x07c1, 0x0002, 0x0854, 0x0858, + 0x0002, 0x0066, 0x07ce, 0x07ce, 0x0002, 0x0066, 0x07d8, 0x07d8, + 0x0003, 0x0000, 0x0860, 0x0865, 0x0003, 0x0066, 0x07e4, 0x07fa, + // Entry 4EC80 - 4ECBF + 0x080e, 0x0002, 0x0868, 0x086c, 0x0002, 0x0052, 0x0574, 0x0565, + 0x0002, 0x0066, 0x083a, 0x0823, 0x0003, 0x0000, 0x0874, 0x0879, + 0x0003, 0x0066, 0x0853, 0x0867, 0x0879, 0x0002, 0x087c, 0x0880, + 0x0002, 0x0066, 0x088c, 0x088c, 0x0002, 0x0066, 0x089a, 0x089a, + 0x0003, 0x0000, 0x0888, 0x088d, 0x0003, 0x0066, 0x04b0, 0x04bd, + 0x04c9, 0x0002, 0x0890, 0x0894, 0x0002, 0x0066, 0x08ae, 0x08ae, + 0x0002, 0x0066, 0x08b9, 0x08b9, 0x0003, 0x0000, 0x089c, 0x08a1, + 0x0003, 0x0066, 0x08c6, 0x08db, 0x08ee, 0x0002, 0x08a4, 0x08a8, + // Entry 4ECC0 - 4ECFF + 0x0002, 0x0066, 0x0910, 0x0902, 0x0002, 0x0066, 0x0936, 0x0920, + 0x0003, 0x0000, 0x08b0, 0x08b5, 0x0003, 0x0066, 0x094e, 0x0961, + 0x0972, 0x0002, 0x08b8, 0x08bc, 0x0002, 0x0066, 0x0984, 0x0984, + 0x0002, 0x0066, 0x0990, 0x0990, 0x0003, 0x0000, 0x08c4, 0x08c9, + 0x0003, 0x0066, 0x09a2, 0x09ae, 0x09b9, 0x0002, 0x08cc, 0x08d0, + 0x0002, 0x0066, 0x09c5, 0x09c5, 0x0002, 0x0066, 0x09ce, 0x09ce, + 0x0003, 0x0000, 0x08d8, 0x08dd, 0x0003, 0x0066, 0x09d9, 0x09ee, + 0x0a01, 0x0002, 0x08e0, 0x08e4, 0x0002, 0x0016, 0x2f6c, 0x0959, + // Entry 4ED00 - 4ED3F + 0x0002, 0x0066, 0x0a2b, 0x0a15, 0x0003, 0x0000, 0x08ec, 0x08f1, + 0x0003, 0x0066, 0x0a43, 0x0a56, 0x0a67, 0x0002, 0x08f4, 0x08f8, + 0x0002, 0x004f, 0x0d5d, 0x0d5d, 0x0002, 0x0066, 0x0a79, 0x0a79, + 0x0003, 0x0000, 0x0900, 0x0905, 0x0003, 0x0066, 0x0a8b, 0x0a97, + 0x0aa2, 0x0002, 0x0908, 0x090c, 0x0002, 0x0066, 0x0aae, 0x0aae, + 0x0002, 0x0066, 0x0ab7, 0x0ab7, 0x0003, 0x0000, 0x0914, 0x0919, + 0x0003, 0x0066, 0x0ac2, 0x0ad8, 0x0aec, 0x0002, 0x091c, 0x0920, + 0x0002, 0x0016, 0x2f7c, 0x0a0a, 0x0002, 0x0066, 0x0b18, 0x0b01, + // Entry 4ED40 - 4ED7F + 0x0003, 0x0000, 0x0928, 0x092d, 0x0003, 0x0066, 0x0b31, 0x0b45, + 0x0b57, 0x0002, 0x0930, 0x0934, 0x0002, 0x0066, 0x0b6a, 0x0b6a, + 0x0002, 0x0066, 0x0b77, 0x0b77, 0x0003, 0x0000, 0x093c, 0x0941, + 0x0003, 0x0066, 0x0b8a, 0x0b97, 0x0ba3, 0x0002, 0x0944, 0x0948, + 0x0002, 0x0066, 0x0bb0, 0x0bb0, 0x0002, 0x0066, 0x0bba, 0x0bba, + 0x0003, 0x0000, 0x0950, 0x0955, 0x0003, 0x0066, 0x0bc6, 0x0bdb, + 0x0bee, 0x0002, 0x0958, 0x095c, 0x0002, 0x0016, 0x2f8d, 0x0abc, + 0x0002, 0x0066, 0x0c18, 0x0c02, 0x0003, 0x0000, 0x0964, 0x0969, + // Entry 4ED80 - 4EDBF + 0x0003, 0x0066, 0x0c30, 0x0c43, 0x0c54, 0x0002, 0x096c, 0x0970, + 0x0002, 0x004f, 0x0e98, 0x0e98, 0x0002, 0x0066, 0x0c78, 0x0c66, + 0x0003, 0x0000, 0x0978, 0x097d, 0x0003, 0x0066, 0x0c8b, 0x0c97, + 0x0ca2, 0x0002, 0x0980, 0x0984, 0x0002, 0x0066, 0x0cae, 0x0cae, + 0x0002, 0x0066, 0x0cb7, 0x0cb7, 0x0003, 0x0000, 0x098c, 0x0991, + 0x0003, 0x0066, 0x0cc2, 0x0cd8, 0x0cec, 0x0002, 0x0994, 0x0998, + 0x0002, 0x0066, 0x0d10, 0x0d01, 0x0002, 0x0066, 0x0d38, 0x0d21, + 0x0003, 0x0000, 0x09a0, 0x09a5, 0x0003, 0x0066, 0x0d51, 0x0d65, + // Entry 4EDC0 - 4EDFF + 0x0d77, 0x0002, 0x09a8, 0x09ac, 0x0002, 0x0066, 0x0d8a, 0x0d8a, + 0x0002, 0x0066, 0x0d97, 0x0d97, 0x0003, 0x0000, 0x09b4, 0x09b9, + 0x0003, 0x0066, 0x0daa, 0x0db7, 0x0dc3, 0x0002, 0x09bc, 0x09c0, + 0x0002, 0x0066, 0x0dd0, 0x0dd0, 0x0002, 0x0066, 0x0dda, 0x0dda, + 0x0001, 0x09c6, 0x0001, 0x0066, 0x0de6, 0x0001, 0x09cb, 0x0001, + 0x0066, 0x0de6, 0x0001, 0x09d0, 0x0001, 0x0066, 0x0de6, 0x0003, + 0x09d7, 0x09da, 0x09de, 0x0001, 0x0066, 0x0dec, 0x0002, 0x0066, + 0xffff, 0x0df2, 0x0002, 0x09e1, 0x09e5, 0x0002, 0x0066, 0x0e0b, + // Entry 4EE00 - 4EE3F + 0x0dfe, 0x0002, 0x0066, 0x0e2e, 0x0e19, 0x0003, 0x09ed, 0x09f0, + 0x09f4, 0x0001, 0x0066, 0x0e44, 0x0002, 0x0066, 0xffff, 0x0df2, + 0x0002, 0x09f7, 0x09fb, 0x0002, 0x0066, 0x0e48, 0x0e48, 0x0002, + 0x0066, 0x0e53, 0x0e53, 0x0003, 0x0a03, 0x0a06, 0x0a0a, 0x0001, + 0x0000, 0x213b, 0x0002, 0x0066, 0xffff, 0x0df2, 0x0002, 0x0a0d, + 0x0a11, 0x0002, 0x0000, 0x1d76, 0x1d76, 0x0002, 0x0066, 0x0e66, + 0x0e66, 0x0003, 0x0a19, 0x0a1c, 0x0a20, 0x0001, 0x0010, 0x0bf7, + 0x0002, 0x0066, 0xffff, 0x0e6f, 0x0002, 0x0a23, 0x0a27, 0x0002, + // Entry 4EE40 - 4EE7F + 0x0016, 0x31ee, 0x0c7a, 0x0002, 0x0066, 0x0e90, 0x0e7b, 0x0003, + 0x0a2f, 0x0a32, 0x0a36, 0x0001, 0x0043, 0x092f, 0x0002, 0x0066, + 0xffff, 0x0e6f, 0x0002, 0x0a39, 0x0a3d, 0x0002, 0x0066, 0x0ea7, + 0x0ea7, 0x0002, 0x0066, 0x0eb3, 0x0eb3, 0x0003, 0x0a45, 0x0a48, + 0x0a4c, 0x0001, 0x0000, 0x3d03, 0x0002, 0x0066, 0xffff, 0x0e6f, + 0x0002, 0x0a4f, 0x0a53, 0x0002, 0x005e, 0x061f, 0x061f, 0x0002, + 0x0066, 0x0ec4, 0x0ec4, 0x0003, 0x0a5b, 0x0a5e, 0x0a62, 0x0001, + 0x0016, 0x0cec, 0x0002, 0x0016, 0xffff, 0x0cf3, 0x0002, 0x0a65, + // Entry 4EE80 - 4EEBF + 0x0a69, 0x0002, 0x0016, 0x0d04, 0x0cf6, 0x0002, 0x0066, 0x0ee5, + 0x0ecf, 0x0003, 0x0a71, 0x0a74, 0x0a78, 0x0001, 0x001f, 0x16d8, + 0x0002, 0x0016, 0xffff, 0x0cf3, 0x0002, 0x0a7b, 0x0a7f, 0x0002, + 0x0066, 0x0f09, 0x0efd, 0x0002, 0x0066, 0x0f14, 0x0f14, 0x0003, + 0x0a87, 0x0a8a, 0x0a8e, 0x0001, 0x0000, 0x2002, 0x0002, 0x0016, + 0xffff, 0x0cf3, 0x0002, 0x0a91, 0x0a95, 0x0002, 0x0026, 0x02ce, + 0x02ce, 0x0002, 0x0066, 0x0f23, 0x0f23, 0x0001, 0x0a9b, 0x0001, + 0x0066, 0x0f2c, 0x0001, 0x0aa0, 0x0001, 0x0066, 0x0f2c, 0x0001, + // Entry 4EEC0 - 4EEFF + 0x0aa5, 0x0001, 0x0066, 0x0f2c, 0x0004, 0x0aad, 0x0ab2, 0x0ab7, + 0x0adc, 0x0003, 0x001d, 0x0e69, 0x22af, 0x22b6, 0x0003, 0x0066, + 0x0f34, 0x0f3b, 0x0f4b, 0x0002, 0x0aba, 0x0ad0, 0x0003, 0x0abe, + 0x0aca, 0x0ac4, 0x0004, 0x0066, 0xffff, 0xffff, 0xffff, 0x0f5b, + 0x0004, 0x0066, 0x0fa6, 0xffff, 0xffff, 0x0f67, 0x0004, 0x0066, + 0xffff, 0xffff, 0xffff, 0x0f79, 0x0003, 0x0000, 0x0ad7, 0x0ad4, + 0x0001, 0x0066, 0x0f8b, 0x0003, 0x0066, 0xffff, 0x0faa, 0x0fbd, + 0x0002, 0x0cc3, 0x0adf, 0x0003, 0x0ae3, 0x0c23, 0x0b83, 0x009e, + // Entry 4EF00 - 4EF3F + 0x0066, 0xffff, 0xffff, 0xffff, 0xffff, 0x1061, 0x10a6, 0x10fe, + 0x1132, 0x118c, 0x11dd, 0x1226, 0x127a, 0x12a4, 0x1320, 0x135f, + 0x13a4, 0x13ec, 0x141f, 0x1476, 0x14c4, 0x1521, 0x1566, 0x15ae, + 0x15f3, 0x1623, 0xffff, 0xffff, 0x1681, 0xffff, 0x16bf, 0xffff, + 0x170b, 0x173c, 0x176f, 0x17a2, 0xffff, 0xffff, 0x17fb, 0x1837, + 0x1873, 0xffff, 0xffff, 0xffff, 0x18d4, 0xffff, 0x1918, 0x1963, + 0xffff, 0x19b4, 0x19f9, 0x1a44, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1ab5, 0xffff, 0xffff, 0x1b01, 0x1b4c, 0xffff, 0xffff, 0x0f5b, + // Entry 4EF40 - 4EF7F + 0x1be6, 0x1c1a, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1cc1, 0x1cee, 0x1d1f, 0x1d55, 0x1d85, 0xffff, 0xffff, 0x1de1, + 0xffff, 0x1e1e, 0xffff, 0xffff, 0x1e86, 0xffff, 0x1ef1, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1f5f, 0xffff, 0x1fa0, 0x1ff1, 0x204f, + 0x208c, 0xffff, 0xffff, 0xffff, 0x20e0, 0x2126, 0x2165, 0xffff, + 0xffff, 0x21bd, 0x2226, 0x2263, 0x228b, 0xffff, 0xffff, 0x22e3, + 0x2322, 0x2355, 0xffff, 0x239b, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2469, 0x249d, 0x24c7, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 4EF80 - 4EFBF + 0xffff, 0xffff, 0xffff, 0x2558, 0xffff, 0xffff, 0x25a1, 0xffff, + 0x25d5, 0xffff, 0x2615, 0x2651, 0x2684, 0xffff, 0x26c6, 0x2703, + 0xffff, 0xffff, 0xffff, 0x2772, 0x27a3, 0xffff, 0xffff, 0x0fd1, + 0x10d4, 0x12cc, 0x12f3, 0xffff, 0xffff, 0x1ebd, 0x241f, 0x009e, + 0x0066, 0x101c, 0x1029, 0x103e, 0x1050, 0x1074, 0x10b0, 0x110a, + 0x114c, 0x11a3, 0x11f0, 0x123e, 0x1284, 0x12ac, 0x1331, 0x1372, + 0x13b8, 0x13f9, 0x1438, 0x148c, 0x14df, 0x1534, 0x157a, 0x15c1, + 0x15ff, 0x1635, 0x1665, 0x1672, 0x168d, 0x16b5, 0x16cc, 0x16ff, + // Entry 4EFC0 - 4EFFF + 0x1716, 0x1749, 0x177c, 0x17b0, 0x17dc, 0x17e8, 0x180b, 0x1847, + 0x187f, 0x18a3, 0x18ac, 0x18c3, 0x18df, 0x1907, 0x192d, 0x1975, + 0x19a5, 0x19c7, 0x1a0e, 0x1a4c, 0x1a6c, 0x1a7e, 0x1a9c, 0x1aaa, + 0x1ac2, 0x1ae8, 0x1af4, 0x1b16, 0x1b62, 0x1ba2, 0x1bb4, 0x1bbe, + 0x1bf2, 0x1c23, 0x1c45, 0x1c50, 0x1c73, 0x1c84, 0x1c9a, 0x1cad, + 0x1ccc, 0x1cf9, 0x1d2d, 0x1d61, 0x1d92, 0x1db8, 0x1dcc, 0x1dee, + 0x1e14, 0x1e2d, 0x1e5b, 0x1e76, 0x1e93, 0x1ee4, 0x1efc, 0x1f22, + 0x1f30, 0x1f3e, 0x1f4b, 0x1f6c, 0x1f96, 0x1fb7, 0x2009, 0x205e, + // Entry 4F000 - 4F03F + 0x2096, 0x20ba, 0x20c8, 0x20d1, 0x20f2, 0x2137, 0x2175, 0x21a5, + 0x21ad, 0x21d4, 0x2235, 0x226b, 0x229a, 0x22c4, 0x22cd, 0x22f4, + 0x232f, 0x2364, 0x238e, 0x23b6, 0x23fc, 0x2408, 0x2412, 0x2452, + 0x245e, 0x2475, 0x24a7, 0x24d4, 0x24fa, 0x250a, 0x2517, 0x252a, + 0x253a, 0x2545, 0x254e, 0x2562, 0x2586, 0x2596, 0x25aa, 0x25cc, + 0x25e3, 0x260b, 0x2625, 0x265e, 0x268f, 0x26b5, 0x26d5, 0x2710, + 0x273a, 0x2744, 0x2754, 0x277d, 0x27b4, 0x1b9a, 0x2212, 0x0fe6, + 0x10de, 0x12d5, 0x12fe, 0x16f6, 0x1e69, 0x1ec6, 0x242c, 0x009e, + // Entry 4F040 - 4F07F + 0x0066, 0xffff, 0xffff, 0xffff, 0xffff, 0x108d, 0x10c2, 0x111e, + 0x116c, 0x11c0, 0x120b, 0x125c, 0x1294, 0x12bc, 0x1348, 0x138b, + 0x13d2, 0x140c, 0x1457, 0x14a8, 0x1500, 0x154d, 0x1594, 0x15da, + 0x1611, 0x164d, 0xffff, 0xffff, 0x16a1, 0xffff, 0x16e1, 0xffff, + 0x1729, 0x175c, 0x178f, 0x17c6, 0xffff, 0xffff, 0x1821, 0x185d, + 0x1891, 0xffff, 0xffff, 0xffff, 0x18f3, 0xffff, 0x1948, 0x198d, + 0xffff, 0x19e0, 0x1a29, 0x1a5c, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1ad5, 0xffff, 0xffff, 0x1b31, 0x1b7e, 0xffff, 0xffff, 0x1bd2, + // Entry 4F080 - 4F0BF + 0x1c06, 0x1c34, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1cdd, 0x1d0c, 0x1d41, 0x1d73, 0x1da5, 0xffff, 0xffff, 0x1e01, + 0xffff, 0x1e44, 0xffff, 0xffff, 0x1ea8, 0xffff, 0x1f0f, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1f81, 0xffff, 0x1fd4, 0x202c, 0x2075, + 0x20a8, 0xffff, 0xffff, 0xffff, 0x210c, 0x214e, 0x218d, 0xffff, + 0xffff, 0x21f3, 0x224c, 0x227b, 0x22af, 0xffff, 0xffff, 0x230b, + 0x2342, 0x2379, 0xffff, 0x23d9, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2489, 0x24b7, 0x24e7, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 4F0C0 - 4F0FF + 0xffff, 0xffff, 0xffff, 0x2574, 0xffff, 0xffff, 0x25bb, 0xffff, + 0x25f7, 0xffff, 0x263b, 0x2671, 0x26a2, 0xffff, 0x26ec, 0x2725, + 0xffff, 0xffff, 0xffff, 0x2790, 0x27cd, 0xffff, 0xffff, 0x1001, + 0x10ee, 0x12e4, 0x130f, 0xffff, 0xffff, 0x1ed5, 0x243f, 0x0003, + 0x0cc7, 0x0d36, 0x0cfa, 0x0031, 0x0057, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 4F100 - 4F13F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x30c6, 0x30cf, 0xffff, 0x30d8, 0x003a, 0x0057, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 4F140 - 4F17F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x30c6, 0x30cf, 0xffff, + 0x30d8, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x314f, 0x0031, 0x0057, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 4F180 - 4F1BF + 0xffff, 0x30ca, 0x30d3, 0xffff, 0x30dc, 0x0001, 0x0002, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, + 0x0006, 0x0000, 0x0000, 0x0012, 0x0000, 0x0000, 0x0027, 0x0002, + 0x0015, 0x001e, 0x0001, 0x0017, 0x0005, 0x0000, 0xffff, 0x04e3, + 0x39f2, 0x39f5, 0x39f8, 0x0001, 0x0020, 0x0005, 0x0000, 0xffff, + 0x04e3, 0x39f2, 0x39f5, 0x39f8, 0x0001, 0x0029, 0x0001, 0x0005, + 0x062f, 0x0003, 0x0004, 0x0268, 0x069b, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0038, 0x0008, 0x0000, + // Entry 4F1C0 - 4F1FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, 0x0027, 0x0004, + 0x0024, 0x001e, 0x001b, 0x0021, 0x0001, 0x0006, 0x000d, 0x0001, + 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0002, 0x0587, + 0x0004, 0x0035, 0x002f, 0x002c, 0x0032, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0008, 0x0041, 0x00a6, 0x00fd, 0x0132, 0x021b, 0x0235, + 0x0246, 0x0257, 0x0002, 0x0044, 0x0075, 0x0003, 0x0048, 0x0057, + 0x0066, 0x000d, 0x0006, 0xffff, 0x001e, 0x44b4, 0x432f, 0x42a5, + // Entry 4F200 - 4F23F + 0x43e5, 0x44b8, 0x44bc, 0x44c0, 0x433b, 0x453e, 0x44c4, 0x422c, + 0x000d, 0x0018, 0xffff, 0x2a31, 0x2a07, 0x2a33, 0x2a0b, 0x2a33, + 0x2a31, 0x2a31, 0x2a0b, 0x2a1d, 0x2a11, 0x2a13, 0x2a15, 0x000d, + 0x0006, 0xffff, 0x004e, 0x0056, 0x44c8, 0x0065, 0x43e5, 0x4542, + 0x43f4, 0x43fa, 0x44ce, 0x440a, 0x44d7, 0x4419, 0x0003, 0x0079, + 0x0088, 0x0097, 0x000d, 0x0006, 0xffff, 0x001e, 0x44b4, 0x432f, + 0x42a5, 0x43e5, 0x44b8, 0x44bc, 0x44c0, 0x433b, 0x453e, 0x44c4, + 0x422c, 0x000d, 0x0018, 0xffff, 0x2a31, 0x2a07, 0x2a33, 0x2a0b, + // Entry 4F240 - 4F27F + 0x2a33, 0x2a31, 0x2a31, 0x2a0b, 0x2a1d, 0x2a11, 0x2a13, 0x2a15, + 0x000d, 0x0006, 0xffff, 0x004e, 0x0056, 0x44c8, 0x0065, 0x43e5, + 0x4542, 0x43f4, 0x43fa, 0x44ce, 0x440a, 0x44d7, 0x4419, 0x0002, + 0x00a9, 0x00d3, 0x0005, 0x00af, 0x00b8, 0x00ca, 0x0000, 0x00c1, + 0x0007, 0x0006, 0x00ba, 0x4547, 0x4550, 0x4558, 0x4561, 0x456a, + 0x4571, 0x0007, 0x0018, 0x2a1d, 0x2a33, 0x2a35, 0x2a37, 0x2a35, + 0x2a07, 0x2a1d, 0x0007, 0x0006, 0x00ba, 0x4547, 0x4550, 0x4558, + 0x4561, 0x456a, 0x4571, 0x0007, 0x0006, 0x00ba, 0x4547, 0x4550, + // Entry 4F280 - 4F2BF + 0x4558, 0x4561, 0x456a, 0x4571, 0x0005, 0x00d9, 0x00e2, 0x00f4, + 0x0000, 0x00eb, 0x0007, 0x0006, 0x00ba, 0x4547, 0x4550, 0x4558, + 0x4561, 0x456a, 0x4571, 0x0007, 0x0018, 0x2a1d, 0x2a33, 0x2a35, + 0x2a37, 0x2a35, 0x2a07, 0x2a1d, 0x0007, 0x0006, 0x00ba, 0x4547, + 0x4550, 0x4558, 0x4561, 0x456a, 0x4571, 0x0007, 0x0006, 0x00ba, + 0x4547, 0x4550, 0x4558, 0x4561, 0x456a, 0x4571, 0x0002, 0x0100, + 0x0119, 0x0003, 0x0104, 0x010b, 0x0112, 0x0005, 0x0067, 0xffff, + 0x0000, 0x000a, 0x0014, 0x001e, 0x0005, 0x0000, 0xffff, 0x0033, + // Entry 4F2C0 - 4F2FF + 0x0035, 0x0037, 0x23b3, 0x0005, 0x0067, 0xffff, 0x0000, 0x000a, + 0x0014, 0x001e, 0x0003, 0x011d, 0x0124, 0x012b, 0x0005, 0x0067, + 0xffff, 0x0000, 0x000a, 0x0014, 0x001e, 0x0005, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0067, 0xffff, 0x0000, + 0x000a, 0x0014, 0x001e, 0x0002, 0x0135, 0x01a8, 0x0003, 0x0139, + 0x015e, 0x0183, 0x0009, 0x0146, 0x014c, 0x0143, 0x014f, 0x0155, + 0x0158, 0x015b, 0x0149, 0x0152, 0x0001, 0x0067, 0x0028, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x0067, 0x003a, 0x0001, 0x0000, 0x04f2, + // Entry 4F300 - 4F33F + 0x0001, 0x0067, 0x004d, 0x0001, 0x0067, 0x0056, 0x0001, 0x0067, + 0x005e, 0x0001, 0x0067, 0x0065, 0x0001, 0x0067, 0x006b, 0x0009, + 0x016b, 0x0171, 0x0168, 0x0174, 0x017a, 0x017d, 0x0180, 0x016e, + 0x0177, 0x0001, 0x0067, 0x006b, 0x0001, 0x0000, 0x23cd, 0x0001, + 0x0067, 0x005e, 0x0001, 0x0000, 0x23d0, 0x0001, 0x0067, 0x004d, + 0x0001, 0x0067, 0x0056, 0x0001, 0x0067, 0x005e, 0x0001, 0x0067, + 0x0065, 0x0001, 0x0067, 0x006b, 0x0009, 0x0190, 0x0196, 0x018d, + 0x0199, 0x019f, 0x01a2, 0x01a5, 0x0193, 0x019c, 0x0001, 0x0067, + // Entry 4F340 - 4F37F + 0x0028, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0067, 0x003a, 0x0001, + 0x0000, 0x04f2, 0x0001, 0x0067, 0x004d, 0x0001, 0x0067, 0x0056, + 0x0001, 0x0067, 0x005e, 0x0001, 0x0067, 0x0065, 0x0001, 0x0067, + 0x006b, 0x0003, 0x01ac, 0x01d1, 0x01f6, 0x0009, 0x01b9, 0x01bf, + 0x01b6, 0x01c2, 0x01c8, 0x01cb, 0x01ce, 0x01bc, 0x01c5, 0x0001, + 0x0067, 0x0028, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0067, 0x003a, + 0x0001, 0x0000, 0x04f2, 0x0001, 0x0067, 0x004d, 0x0001, 0x0067, + 0x0056, 0x0001, 0x0067, 0x0071, 0x0001, 0x0067, 0x0065, 0x0001, + // Entry 4F380 - 4F3BF + 0x0067, 0x006b, 0x0009, 0x01de, 0x01e4, 0x01db, 0x01e7, 0x01ed, + 0x01f0, 0x01f3, 0x01e1, 0x01ea, 0x0001, 0x0067, 0x0028, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x0067, 0x003a, 0x0001, 0x0000, 0x04f2, + 0x0001, 0x0067, 0x004d, 0x0001, 0x0067, 0x0056, 0x0001, 0x0067, + 0x005e, 0x0001, 0x0067, 0x0065, 0x0001, 0x0067, 0x006b, 0x0009, + 0x0203, 0x0209, 0x0200, 0x020c, 0x0212, 0x0215, 0x0218, 0x0206, + 0x020f, 0x0001, 0x0067, 0x0028, 0x0001, 0x0000, 0x04ef, 0x0001, + 0x0067, 0x003a, 0x0001, 0x0000, 0x04f2, 0x0001, 0x0067, 0x004d, + // Entry 4F3C0 - 4F3FF + 0x0001, 0x0067, 0x0056, 0x0001, 0x0067, 0x005e, 0x0001, 0x0067, + 0x0065, 0x0001, 0x0067, 0x006b, 0x0003, 0x022a, 0x0000, 0x021f, + 0x0002, 0x0222, 0x0226, 0x0002, 0x0017, 0x01d4, 0x01e4, 0x0002, + 0x0000, 0x04f5, 0x3c5a, 0x0002, 0x022d, 0x0231, 0x0002, 0x0017, + 0x01f4, 0x01f7, 0x0002, 0x0000, 0x04f5, 0x3c5a, 0x0004, 0x0243, + 0x023d, 0x023a, 0x0240, 0x0001, 0x0006, 0x015b, 0x0001, 0x0002, + 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, 0x0002, 0x08e8, 0x0004, + 0x0254, 0x024e, 0x024b, 0x0251, 0x0001, 0x0000, 0x0524, 0x0001, + // Entry 4F400 - 4F43F + 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, + 0x0004, 0x0265, 0x025f, 0x025c, 0x0262, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0042, 0x02ab, 0x02b0, 0x02b5, 0x02ba, 0x02d1, 0x02e3, + 0x02f5, 0x030c, 0x031e, 0x0330, 0x0347, 0x0359, 0x036b, 0x0386, + 0x039c, 0x03b2, 0x03b7, 0x03bc, 0x03c1, 0x03da, 0x03ec, 0x03fe, + 0x0403, 0x0408, 0x040d, 0x0412, 0x0417, 0x041c, 0x0421, 0x0426, + 0x042b, 0x043f, 0x0453, 0x0467, 0x047b, 0x048f, 0x04a3, 0x04b7, + // Entry 4F440 - 4F47F + 0x04cb, 0x04df, 0x04f3, 0x0507, 0x051b, 0x052f, 0x0543, 0x0557, + 0x056b, 0x057f, 0x0593, 0x05a7, 0x05bb, 0x05cf, 0x05d4, 0x05d9, + 0x05de, 0x05f4, 0x0606, 0x0618, 0x062e, 0x0640, 0x0652, 0x0668, + 0x067a, 0x068c, 0x0691, 0x0696, 0x0001, 0x02ad, 0x0001, 0x0067, + 0x0079, 0x0001, 0x02b2, 0x0001, 0x0067, 0x0079, 0x0001, 0x02b7, + 0x0001, 0x0067, 0x0079, 0x0003, 0x02be, 0x02c1, 0x02c6, 0x0001, + 0x0067, 0x007e, 0x0003, 0x0067, 0x0084, 0x0093, 0x009d, 0x0002, + 0x02c9, 0x02cd, 0x0002, 0x0067, 0x00bb, 0x00a8, 0x0002, 0x0067, + // Entry 4F480 - 4F4BF + 0x00e1, 0x00ce, 0x0003, 0x02d5, 0x0000, 0x02d8, 0x0001, 0x0067, + 0x007e, 0x0002, 0x02db, 0x02df, 0x0002, 0x0067, 0x00bb, 0x00a8, + 0x0002, 0x0067, 0x00e1, 0x00ce, 0x0003, 0x02e7, 0x0000, 0x02ea, + 0x0001, 0x0067, 0x007e, 0x0002, 0x02ed, 0x02f1, 0x0002, 0x0067, + 0x00bb, 0x00a8, 0x0002, 0x0067, 0x00e1, 0x00ce, 0x0003, 0x02f9, + 0x02fc, 0x0301, 0x0001, 0x0067, 0x00f5, 0x0003, 0x0067, 0x00fa, + 0x0112, 0x0124, 0x0002, 0x0304, 0x0308, 0x0002, 0x0067, 0x013d, + 0x013d, 0x0002, 0x0067, 0x0162, 0x014f, 0x0003, 0x0310, 0x0000, + // Entry 4F4C0 - 4F4FF + 0x0313, 0x0001, 0x0067, 0x00f5, 0x0002, 0x0316, 0x031a, 0x0002, + 0x0067, 0x013d, 0x013d, 0x0002, 0x0067, 0x0162, 0x014f, 0x0003, + 0x0322, 0x0000, 0x0325, 0x0001, 0x0067, 0x00f5, 0x0002, 0x0328, + 0x032c, 0x0002, 0x0067, 0x013d, 0x013d, 0x0002, 0x0067, 0x0162, + 0x014f, 0x0003, 0x0334, 0x0337, 0x033c, 0x0001, 0x0067, 0x0176, + 0x0003, 0x0067, 0x017c, 0x018b, 0x0195, 0x0002, 0x033f, 0x0343, + 0x0002, 0x0067, 0x01b3, 0x01a0, 0x0002, 0x0067, 0x01d9, 0x01c6, + 0x0003, 0x034b, 0x0000, 0x034e, 0x0001, 0x0067, 0x0176, 0x0002, + // Entry 4F500 - 4F53F + 0x0351, 0x0355, 0x0002, 0x0067, 0x01b3, 0x01a0, 0x0002, 0x0067, + 0x01d9, 0x01c6, 0x0003, 0x035d, 0x0000, 0x0360, 0x0001, 0x0067, + 0x0176, 0x0002, 0x0363, 0x0367, 0x0002, 0x0067, 0x01b3, 0x01a0, + 0x0002, 0x0067, 0x01d9, 0x01c6, 0x0004, 0x0370, 0x0373, 0x0378, + 0x0383, 0x0001, 0x0067, 0x01ed, 0x0003, 0x0067, 0x01f2, 0x0201, + 0x020a, 0x0002, 0x037b, 0x037f, 0x0002, 0x0067, 0x0215, 0x0215, + 0x0002, 0x0067, 0x023a, 0x0227, 0x0001, 0x0067, 0x024e, 0x0004, + 0x038b, 0x0000, 0x038e, 0x0399, 0x0001, 0x0067, 0x01ed, 0x0002, + // Entry 4F540 - 4F57F + 0x0391, 0x0395, 0x0002, 0x0067, 0x0215, 0x0215, 0x0002, 0x0067, + 0x023a, 0x0227, 0x0001, 0x0067, 0x024e, 0x0004, 0x03a1, 0x0000, + 0x03a4, 0x03af, 0x0001, 0x0067, 0x01ed, 0x0002, 0x03a7, 0x03ab, + 0x0002, 0x0067, 0x0215, 0x0215, 0x0002, 0x0067, 0x023a, 0x0227, + 0x0001, 0x0067, 0x024e, 0x0001, 0x03b4, 0x0001, 0x0067, 0x025a, + 0x0001, 0x03b9, 0x0001, 0x0067, 0x025a, 0x0001, 0x03be, 0x0001, + 0x0067, 0x025a, 0x0003, 0x03c5, 0x03c8, 0x03cf, 0x0001, 0x0067, + 0x0268, 0x0005, 0x0067, 0x0272, 0x0277, 0x027b, 0x026d, 0x0281, + // Entry 4F580 - 4F5BF + 0x0002, 0x03d2, 0x03d6, 0x0002, 0x0067, 0x028d, 0x028d, 0x0002, + 0x0067, 0x02b2, 0x029f, 0x0003, 0x03de, 0x0000, 0x03e1, 0x0001, + 0x0067, 0x0268, 0x0002, 0x03e4, 0x03e8, 0x0002, 0x0067, 0x028d, + 0x028d, 0x0002, 0x0067, 0x02b2, 0x029f, 0x0003, 0x03f0, 0x0000, + 0x03f3, 0x0001, 0x0067, 0x0268, 0x0002, 0x03f6, 0x03fa, 0x0002, + 0x0067, 0x028d, 0x028d, 0x0002, 0x0067, 0x02b2, 0x029f, 0x0001, + 0x0400, 0x0001, 0x0067, 0x02c6, 0x0001, 0x0405, 0x0001, 0x0067, + 0x02c6, 0x0001, 0x040a, 0x0001, 0x0067, 0x02c6, 0x0001, 0x040f, + // Entry 4F5C0 - 4F5FF + 0x0001, 0x0067, 0x02d4, 0x0001, 0x0414, 0x0001, 0x0067, 0x02d4, + 0x0001, 0x0419, 0x0001, 0x0067, 0x02d4, 0x0001, 0x041e, 0x0001, + 0x0067, 0x02e1, 0x0001, 0x0423, 0x0001, 0x0067, 0x02e1, 0x0001, + 0x0428, 0x0001, 0x0067, 0x02e1, 0x0003, 0x0000, 0x042f, 0x0434, + 0x0003, 0x0067, 0x02ef, 0x0302, 0x030f, 0x0002, 0x0437, 0x043b, + 0x0002, 0x0067, 0x031e, 0x031e, 0x0002, 0x0067, 0x034b, 0x0334, + 0x0003, 0x0000, 0x0443, 0x0448, 0x0003, 0x0067, 0x02ef, 0x0302, + 0x030f, 0x0002, 0x044b, 0x044f, 0x0002, 0x0067, 0x031e, 0x031e, + // Entry 4F600 - 4F63F + 0x0002, 0x0067, 0x034b, 0x0334, 0x0003, 0x0000, 0x0457, 0x045c, + 0x0003, 0x0067, 0x02ef, 0x0302, 0x030f, 0x0002, 0x045f, 0x0463, + 0x0002, 0x0067, 0x031e, 0x031e, 0x0002, 0x0067, 0x034b, 0x0334, + 0x0003, 0x0000, 0x046b, 0x0470, 0x0003, 0x0067, 0x0363, 0x0376, + 0x0383, 0x0002, 0x0473, 0x0477, 0x0002, 0x0067, 0x0392, 0x0392, + 0x0002, 0x0067, 0x03bf, 0x03a8, 0x0003, 0x0000, 0x047f, 0x0484, + 0x0003, 0x0067, 0x0363, 0x0376, 0x0383, 0x0002, 0x0487, 0x048b, + 0x0002, 0x0067, 0x0392, 0x0392, 0x0002, 0x0067, 0x03bf, 0x03a8, + // Entry 4F640 - 4F67F + 0x0003, 0x0000, 0x0493, 0x0498, 0x0003, 0x0067, 0x0363, 0x0376, + 0x0383, 0x0002, 0x049b, 0x049f, 0x0002, 0x0067, 0x0392, 0x0392, + 0x0002, 0x0067, 0x03bf, 0x03a8, 0x0003, 0x0000, 0x04a7, 0x04ac, + 0x0003, 0x0067, 0x03d7, 0x03e9, 0x03f5, 0x0002, 0x04af, 0x04b3, + 0x0002, 0x0067, 0x0403, 0x0403, 0x0002, 0x0067, 0x042e, 0x0418, + 0x0003, 0x0000, 0x04bb, 0x04c0, 0x0003, 0x0067, 0x03d7, 0x03e9, + 0x03f5, 0x0002, 0x04c3, 0x04c7, 0x0002, 0x0067, 0x0403, 0x0403, + 0x0002, 0x0067, 0x042e, 0x0418, 0x0003, 0x0000, 0x04cf, 0x04d4, + // Entry 4F680 - 4F6BF + 0x0003, 0x0067, 0x03d7, 0x03e9, 0x03f5, 0x0002, 0x04d7, 0x04db, + 0x0002, 0x0067, 0x0403, 0x0403, 0x0002, 0x0067, 0x042e, 0x0418, + 0x0003, 0x0000, 0x04e3, 0x04e8, 0x0003, 0x0067, 0x0445, 0x0458, + 0x0465, 0x0002, 0x04eb, 0x04ef, 0x0002, 0x0067, 0x0474, 0x0474, + 0x0002, 0x0067, 0x04a1, 0x048a, 0x0003, 0x0000, 0x04f7, 0x04fc, + 0x0003, 0x0067, 0x0445, 0x0458, 0x0465, 0x0002, 0x04ff, 0x0503, + 0x0002, 0x0067, 0x0474, 0x0474, 0x0002, 0x0067, 0x04a1, 0x048a, + 0x0003, 0x0000, 0x050b, 0x0510, 0x0003, 0x0067, 0x0445, 0x0458, + // Entry 4F6C0 - 4F6FF + 0x0465, 0x0002, 0x0513, 0x0517, 0x0002, 0x0067, 0x0474, 0x0474, + 0x0002, 0x0067, 0x04a1, 0x048a, 0x0003, 0x0000, 0x051f, 0x0524, + 0x0003, 0x0067, 0x04b9, 0x04cc, 0x04d9, 0x0002, 0x0527, 0x052b, + 0x0002, 0x0067, 0x04e8, 0x04e8, 0x0002, 0x0067, 0x0515, 0x04fe, + 0x0003, 0x0000, 0x0533, 0x0538, 0x0003, 0x0067, 0x04b9, 0x04cc, + 0x04d9, 0x0002, 0x053b, 0x053f, 0x0002, 0x0067, 0x04e8, 0x04e8, + 0x0002, 0x0067, 0x0515, 0x04fe, 0x0003, 0x0000, 0x0547, 0x054c, + 0x0003, 0x0067, 0x04b9, 0x04cc, 0x04d9, 0x0002, 0x054f, 0x0553, + // Entry 4F700 - 4F73F + 0x0002, 0x0067, 0x04e8, 0x04e8, 0x0002, 0x0067, 0x0515, 0x04fe, + 0x0003, 0x0000, 0x055b, 0x0560, 0x0003, 0x0067, 0x052d, 0x053e, + 0x0549, 0x0002, 0x0563, 0x0567, 0x0002, 0x0067, 0x0556, 0x0556, + 0x0002, 0x0067, 0x057f, 0x056a, 0x0003, 0x0000, 0x056f, 0x0574, + 0x0003, 0x0067, 0x052d, 0x053e, 0x0549, 0x0002, 0x0577, 0x057b, + 0x0002, 0x0067, 0x0556, 0x0556, 0x0002, 0x0067, 0x057f, 0x056a, + 0x0003, 0x0000, 0x0583, 0x0588, 0x0003, 0x0067, 0x052d, 0x053e, + 0x0549, 0x0002, 0x058b, 0x058f, 0x0002, 0x0067, 0x0556, 0x0556, + // Entry 4F740 - 4F77F + 0x0002, 0x0067, 0x057f, 0x056a, 0x0003, 0x0000, 0x0597, 0x059c, + 0x0003, 0x0067, 0x0595, 0x05a8, 0x05b5, 0x0002, 0x059f, 0x05a3, + 0x0002, 0x0067, 0x05c4, 0x05c4, 0x0002, 0x0067, 0x05f1, 0x05da, + 0x0003, 0x0000, 0x05ab, 0x05b0, 0x0003, 0x0067, 0x0595, 0x05a8, + 0x05b5, 0x0002, 0x05b3, 0x05b7, 0x0002, 0x0067, 0x05c4, 0x05c4, + 0x0002, 0x0067, 0x05f1, 0x05da, 0x0003, 0x0000, 0x05bf, 0x05c4, + 0x0003, 0x0067, 0x0595, 0x05a8, 0x05b5, 0x0002, 0x05c7, 0x05cb, + 0x0002, 0x0067, 0x05c4, 0x05c4, 0x0002, 0x0067, 0x05f1, 0x05da, + // Entry 4F780 - 4F7BF + 0x0001, 0x05d1, 0x0001, 0x0007, 0x0892, 0x0001, 0x05d6, 0x0001, + 0x0007, 0x0892, 0x0001, 0x05db, 0x0001, 0x0007, 0x0892, 0x0003, + 0x05e2, 0x05e5, 0x05e9, 0x0001, 0x0046, 0x0400, 0x0002, 0x0067, + 0xffff, 0x0609, 0x0002, 0x05ec, 0x05f0, 0x0002, 0x0067, 0x0611, + 0x0611, 0x0002, 0x0067, 0x0634, 0x0622, 0x0003, 0x05f8, 0x0000, + 0x05fb, 0x0001, 0x0046, 0x0400, 0x0002, 0x05fe, 0x0602, 0x0002, + 0x0067, 0x0611, 0x0611, 0x0002, 0x0067, 0x0634, 0x0622, 0x0003, + 0x060a, 0x0000, 0x060d, 0x0001, 0x0046, 0x0400, 0x0002, 0x0610, + // Entry 4F7C0 - 4F7FF + 0x0614, 0x0002, 0x0067, 0x0611, 0x0611, 0x0002, 0x0067, 0x0659, + 0x0647, 0x0003, 0x061c, 0x061f, 0x0623, 0x0001, 0x0046, 0x0404, + 0x0002, 0x0067, 0xffff, 0x066c, 0x0002, 0x0626, 0x062a, 0x0002, + 0x0067, 0x0677, 0x0677, 0x0002, 0x0067, 0x06a0, 0x068b, 0x0003, + 0x0632, 0x0000, 0x0635, 0x0001, 0x0067, 0x06b6, 0x0002, 0x0638, + 0x063c, 0x0002, 0x0067, 0x0677, 0x0677, 0x0002, 0x0067, 0x06a0, + 0x068b, 0x0003, 0x0644, 0x0000, 0x0647, 0x0001, 0x0067, 0x06b6, + 0x0002, 0x064a, 0x064e, 0x0002, 0x0067, 0x0677, 0x0677, 0x0002, + // Entry 4F800 - 4F83F + 0x0067, 0x06a0, 0x068b, 0x0003, 0x0656, 0x0659, 0x065d, 0x0001, + 0x0067, 0x06ba, 0x0002, 0x0067, 0xffff, 0x06c2, 0x0002, 0x0660, + 0x0664, 0x0002, 0x0067, 0x06cc, 0x06cc, 0x0002, 0x0067, 0x06f7, + 0x06e1, 0x0003, 0x066c, 0x0000, 0x066f, 0x0001, 0x001f, 0x16d8, + 0x0002, 0x0672, 0x0676, 0x0002, 0x0067, 0x06cc, 0x06cc, 0x0002, + 0x0067, 0x0724, 0x070e, 0x0003, 0x067e, 0x0000, 0x0681, 0x0001, + 0x001f, 0x16d8, 0x0002, 0x0684, 0x0688, 0x0002, 0x0067, 0x06cc, + 0x06cc, 0x0002, 0x0067, 0x0724, 0x070e, 0x0001, 0x068e, 0x0001, + // Entry 4F840 - 4F87F + 0x0067, 0x073b, 0x0001, 0x0693, 0x0001, 0x0067, 0x073b, 0x0001, + 0x0698, 0x0001, 0x0067, 0x073b, 0x0004, 0x06a0, 0x06a5, 0x06aa, + 0x06b9, 0x0003, 0x0000, 0x1dc7, 0x4327, 0x432f, 0x0003, 0x0067, + 0x0747, 0x0752, 0x0767, 0x0002, 0x0000, 0x06ad, 0x0003, 0x0000, + 0x06b4, 0x06b1, 0x0001, 0x0067, 0x077d, 0x0003, 0x0067, 0xffff, + 0x079f, 0x07c2, 0x0002, 0x0000, 0x06bc, 0x0003, 0x0756, 0x07ec, + 0x06c0, 0x0094, 0x0067, 0x07e4, 0x07f7, 0x080d, 0x0825, 0x085d, + 0x08b8, 0x08f7, 0x093c, 0x097a, 0x09c1, 0x0a06, 0x0a49, 0x0a88, + // Entry 4F880 - 4F8BF + 0x0ac5, 0x0b0b, 0x0b69, 0x0bd3, 0x0c1f, 0x0c6f, 0x0cdc, 0x0d58, + 0x0dc6, 0x0e23, 0x0e72, 0x0ebd, 0x0efe, 0x0f0c, 0x0f2b, 0x0f68, + 0x0f93, 0x0fd4, 0x0ffe, 0x103e, 0x1083, 0x10c6, 0x1107, 0x1123, + 0x114b, 0x119f, 0x11f7, 0x1224, 0x1231, 0x124b, 0x127b, 0x12ca, + 0x12ee, 0x1350, 0x13a3, 0x13df, 0x144d, 0x14ac, 0x14e1, 0x14fb, + 0x1523, 0x1534, 0x1552, 0x158d, 0x15a7, 0x15d3, 0x1641, 0x1694, + 0x16ab, 0x16d0, 0x1724, 0x176f, 0x17a4, 0x17b9, 0x17cd, 0x17de, + 0x17f7, 0x1816, 0x1841, 0x187d, 0x18c7, 0x1907, 0x1953, 0x19aa, + // Entry 4F8C0 - 4F8FF + 0x19c6, 0x19ef, 0x1a1e, 0x1a3f, 0x1a81, 0x1a92, 0x1aba, 0x1af1, + 0x1b1c, 0x1b57, 0x1b67, 0x1b77, 0x1b88, 0x1bb4, 0x1bf3, 0x1c23, + 0x1c96, 0x1cf1, 0x1d40, 0x1d79, 0x1d88, 0x1d95, 0x1db7, 0x1e11, + 0x1e60, 0x1e9d, 0x1ea9, 0x1ede, 0x1f44, 0x1f93, 0x1fd8, 0x2015, + 0x2022, 0x204a, 0x2093, 0x20d9, 0x2118, 0x2152, 0x21a7, 0x21b7, + 0x21c5, 0x21d6, 0x21e5, 0x2204, 0x224f, 0x228f, 0x22c6, 0x22d9, + 0x22f5, 0x230f, 0x2325, 0x2335, 0x2342, 0x235e, 0x238f, 0x23a1, + 0x23bd, 0x23f4, 0x2415, 0x245a, 0x2477, 0x24c4, 0x2514, 0x254f, + // Entry 4F900 - 4F93F + 0x2573, 0x25c7, 0x2606, 0x2614, 0x262b, 0x2652, 0x26a2, 0x0094, + 0x0067, 0xffff, 0xffff, 0xffff, 0xffff, 0x0845, 0x08aa, 0x08e9, + 0x0930, 0x0969, 0x09b1, 0x09f6, 0x0a3b, 0x0a7c, 0x0ab5, 0x0afa, + 0x0b4a, 0x0bc4, 0x0c0e, 0x0c56, 0x0cb6, 0x0d3d, 0x0dab, 0x0e11, + 0x0e64, 0x0eab, 0xffff, 0xffff, 0x0f1b, 0xffff, 0x0f81, 0xffff, + 0x0fef, 0x1031, 0x1075, 0x10b4, 0xffff, 0xffff, 0x113b, 0x1188, + 0x11eb, 0xffff, 0xffff, 0xffff, 0x1262, 0xffff, 0x12d9, 0x1335, + 0xffff, 0x13c4, 0x1432, 0x14a0, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 4F940 - 4F97F + 0x1543, 0xffff, 0xffff, 0x15b8, 0x1626, 0xffff, 0xffff, 0x16b9, + 0x1713, 0x1763, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1835, 0x186e, 0x18b8, 0x18fa, 0x1933, 0xffff, 0xffff, 0x19e2, + 0xffff, 0x1a2c, 0xffff, 0xffff, 0x1aa9, 0xffff, 0x1b0d, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1ba3, 0xffff, 0x1c01, 0x1c7c, 0x1cdf, + 0x1d32, 0xffff, 0xffff, 0xffff, 0x1da2, 0x1dfe, 0x1e4c, 0xffff, + 0xffff, 0x1ec3, 0x1f31, 0x1f87, 0x1fc8, 0xffff, 0xffff, 0x203a, + 0x2087, 0x20c8, 0xffff, 0x2132, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 4F980 - 4F9BF + 0xffff, 0x21f4, 0x2241, 0x2282, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2350, 0xffff, 0xffff, 0x23b0, 0xffff, + 0x2401, 0xffff, 0x2468, 0x24b2, 0x2505, 0xffff, 0x2560, 0x25b6, + 0xffff, 0xffff, 0xffff, 0x2643, 0x268d, 0x0094, 0x0067, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0880, 0x08d1, 0x0910, 0x0953, 0x0996, + 0x09dc, 0x0a21, 0x0a62, 0x0a9f, 0x0ae0, 0x0b27, 0x0b93, 0x0bed, + 0x0c3b, 0x0c93, 0x0d0d, 0x0d82, 0x0dec, 0x0e40, 0x0e8b, 0x0eda, + 0xffff, 0xffff, 0x0f46, 0xffff, 0x0fb0, 0xffff, 0x1018, 0x1056, + // Entry 4F9C0 - 4F9FF + 0x109c, 0x10e3, 0xffff, 0xffff, 0x1166, 0x11c1, 0x120e, 0xffff, + 0xffff, 0xffff, 0x129f, 0xffff, 0x130e, 0x1376, 0xffff, 0x1405, + 0x1473, 0x14c3, 0xffff, 0xffff, 0xffff, 0xffff, 0x156c, 0xffff, + 0xffff, 0x15f9, 0x1667, 0xffff, 0xffff, 0x16f2, 0x1740, 0x1786, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1858, 0x1897, + 0x18e1, 0x191c, 0x197e, 0xffff, 0xffff, 0x1a07, 0xffff, 0x1a5c, + 0xffff, 0xffff, 0x1ad6, 0xffff, 0x1b36, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1bd0, 0xffff, 0x1c50, 0x1cbb, 0x1d0e, 0x1d59, 0xffff, + // Entry 4FA00 - 4FA3F + 0xffff, 0xffff, 0x1dd7, 0x1e2f, 0x1e7f, 0xffff, 0xffff, 0x1f04, + 0x1f62, 0x1faa, 0x1ff3, 0xffff, 0xffff, 0x2065, 0x20aa, 0x20f5, + 0xffff, 0x217d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x221f, + 0x2268, 0x22a7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2377, 0xffff, 0xffff, 0x23d5, 0xffff, 0x2434, 0xffff, + 0x2491, 0x24e1, 0x252e, 0xffff, 0x2591, 0x25e3, 0xffff, 0xffff, + 0xffff, 0x266c, 0x26c2, 0x0002, 0x0003, 0x0014, 0x0007, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0008, 0x0000, + // Entry 4FA40 - 4FA7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0040, + 0x0055, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x005a, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x005f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0064, 0x0000, 0x0000, 0x0000, + // Entry 4FA80 - 4FABF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0069, + 0x0001, 0x0057, 0x0001, 0x0068, 0x0000, 0x0001, 0x005c, 0x0001, + 0x0017, 0x0205, 0x0001, 0x0061, 0x0001, 0x0068, 0x0007, 0x0001, + 0x0066, 0x0001, 0x0068, 0x0014, 0x0001, 0x006b, 0x0001, 0x0017, + 0x0227, 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000b, 0x0025, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0014, 0x0004, 0x0022, 0x001c, + 0x0019, 0x001f, 0x0001, 0x0068, 0x0021, 0x0001, 0x0068, 0x0021, + // Entry 4FAC0 - 4FAFF + 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x002e, 0x0004, + 0x003c, 0x0036, 0x0033, 0x0039, 0x0001, 0x0068, 0x0021, 0x0001, + 0x0068, 0x0021, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, + 0x0003, 0x0004, 0x05ac, 0x0a15, 0x0012, 0x0017, 0x0030, 0x00ad, + 0x0000, 0x0114, 0x0000, 0x017b, 0x01a6, 0x040c, 0x0470, 0x04d0, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0530, 0x0590, 0x0005, + 0x0000, 0x0000, 0x0000, 0x0000, 0x001d, 0x0003, 0x0026, 0x002b, + // Entry 4FB00 - 4FB3F + 0x0021, 0x0001, 0x0023, 0x0001, 0x0000, 0x0000, 0x0001, 0x0028, + 0x0001, 0x0000, 0x0000, 0x0001, 0x002d, 0x0001, 0x0000, 0x0000, + 0x0006, 0x0037, 0x0000, 0x0000, 0x0000, 0x0000, 0x009c, 0x0002, + 0x003a, 0x006b, 0x0003, 0x003e, 0x004d, 0x005c, 0x000d, 0x0068, + 0xffff, 0x002f, 0x0037, 0x003f, 0x0047, 0x004f, 0x0057, 0x005f, + 0x0067, 0x006f, 0x0077, 0x0080, 0x0089, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0068, 0xffff, 0x0092, + // Entry 4FB40 - 4FB7F + 0x00a3, 0x00b4, 0x00c5, 0x00d6, 0x00e7, 0x00f8, 0x0109, 0x011a, + 0x012b, 0x013d, 0x014f, 0x0003, 0x006f, 0x007e, 0x008d, 0x000d, + 0x0068, 0xffff, 0x002f, 0x0037, 0x003f, 0x0047, 0x004f, 0x0057, + 0x005f, 0x0067, 0x006f, 0x0077, 0x0080, 0x0089, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0068, 0xffff, + 0x0092, 0x00a3, 0x00b4, 0x00c5, 0x00d6, 0x00e7, 0x00f8, 0x0109, + 0x011a, 0x012b, 0x013d, 0x014f, 0x0004, 0x00aa, 0x00a4, 0x00a1, + // Entry 4FB80 - 4FBBF + 0x00a7, 0x0001, 0x0045, 0x03ee, 0x0001, 0x0068, 0x0161, 0x0001, + 0x0068, 0x016b, 0x0001, 0x0005, 0x062f, 0x0005, 0x00b3, 0x0000, + 0x0000, 0x0000, 0x00fe, 0x0002, 0x00b6, 0x00da, 0x0003, 0x00ba, + 0x0000, 0x00ca, 0x000e, 0x0068, 0xffff, 0x0174, 0x017e, 0x018b, + 0x0196, 0x01a4, 0x01b1, 0x01bc, 0x01ca, 0x01d8, 0x01e3, 0x01ee, + 0x01f9, 0x0204, 0x000e, 0x0068, 0xffff, 0x0174, 0x017e, 0x020e, + 0x021e, 0x01a4, 0x0231, 0x0247, 0x0260, 0x0273, 0x0289, 0x0299, + 0x02a9, 0x0204, 0x0003, 0x00de, 0x0000, 0x00ee, 0x000e, 0x0068, + // Entry 4FBC0 - 4FBFF + 0xffff, 0x0174, 0x017e, 0x018b, 0x0196, 0x01a4, 0x01b1, 0x01bc, + 0x01ca, 0x01d8, 0x01e3, 0x01ee, 0x02a9, 0x0204, 0x000e, 0x0068, + 0xffff, 0x0174, 0x017e, 0x020e, 0x021e, 0x01a4, 0x0231, 0x0247, + 0x0260, 0x0273, 0x0289, 0x0299, 0x02a9, 0x0204, 0x0003, 0x0108, + 0x010e, 0x0102, 0x0001, 0x0104, 0x0002, 0x0000, 0x0425, 0x042a, + 0x0001, 0x010a, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x0110, + 0x0002, 0x0000, 0x0425, 0x042a, 0x0005, 0x011a, 0x0000, 0x0000, + 0x0000, 0x0165, 0x0002, 0x011d, 0x0141, 0x0003, 0x0121, 0x0000, + // Entry 4FC00 - 4FC3F + 0x0131, 0x000e, 0x0068, 0xffff, 0x01f9, 0x02b9, 0x02c7, 0x02d2, + 0x02dd, 0x02ea, 0x02f8, 0x0303, 0x0311, 0x031f, 0x0329, 0x0334, + 0x033f, 0x000e, 0x0068, 0xffff, 0x034d, 0x0363, 0x0382, 0x0392, + 0x02dd, 0x03a8, 0x03c1, 0x03d7, 0x03f0, 0x031f, 0x0403, 0x0413, + 0x0423, 0x0003, 0x0145, 0x0000, 0x0155, 0x000e, 0x0068, 0xffff, + 0x01f9, 0x02b9, 0x02c7, 0x02d2, 0x02dd, 0x02ea, 0x02f8, 0x0303, + 0x0311, 0x031f, 0x0329, 0x0334, 0x033f, 0x000e, 0x0068, 0xffff, + 0x034d, 0x0363, 0x0382, 0x0392, 0x02dd, 0x03a8, 0x03c1, 0x03d7, + // Entry 4FC40 - 4FC7F + 0x03f0, 0x031f, 0x0403, 0x0413, 0x0423, 0x0003, 0x016f, 0x0175, + 0x0169, 0x0001, 0x016b, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, + 0x0171, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x0177, 0x0002, + 0x0000, 0x0425, 0x042a, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0184, 0x0000, 0x0195, 0x0004, 0x0192, 0x018c, 0x0189, + 0x018f, 0x0001, 0x000a, 0x042e, 0x0001, 0x000a, 0x0440, 0x0001, + 0x0002, 0x0044, 0x0001, 0x0000, 0x240c, 0x0004, 0x01a3, 0x019d, + 0x019a, 0x01a0, 0x0001, 0x0068, 0x0436, 0x0001, 0x0000, 0x03c6, + // Entry 4FC80 - 4FCBF + 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, 0x01af, + 0x0214, 0x026b, 0x02a0, 0x03bf, 0x03d9, 0x03ea, 0x03fb, 0x0002, + 0x01b2, 0x01e3, 0x0003, 0x01b6, 0x01c5, 0x01d4, 0x000d, 0x0068, + 0xffff, 0x044e, 0x0456, 0x0464, 0x0472, 0x047d, 0x0484, 0x0491, + 0x049e, 0x04a6, 0x04b4, 0x04bf, 0x04c7, 0x000d, 0x0068, 0xffff, + 0x04d2, 0x04d6, 0x04dd, 0x04e4, 0x047d, 0x04e8, 0x04e8, 0x04ef, + 0x04f3, 0x04fa, 0x04fe, 0x0502, 0x000d, 0x0068, 0xffff, 0x0509, + 0x0519, 0x0532, 0x0545, 0x047d, 0x0484, 0x0491, 0x0558, 0x056b, + // Entry 4FCC0 - 4FCFF + 0x058a, 0x05a3, 0x05b9, 0x0003, 0x01e7, 0x01f6, 0x0205, 0x000d, + 0x0068, 0xffff, 0x044e, 0x0456, 0x0464, 0x0472, 0x047d, 0x0484, + 0x0491, 0x049e, 0x04a6, 0x04b4, 0x04bf, 0x04c7, 0x000d, 0x0068, + 0xffff, 0x04d2, 0x04d6, 0x04dd, 0x04e4, 0x047d, 0x04e8, 0x04e8, + 0x04ef, 0x04f3, 0x04fa, 0x04fe, 0x0502, 0x000d, 0x0068, 0xffff, + 0x0509, 0x0519, 0x0532, 0x0545, 0x047d, 0x0484, 0x0491, 0x0558, + 0x056b, 0x058a, 0x05a3, 0x05b9, 0x0002, 0x0217, 0x0241, 0x0005, + 0x021d, 0x0226, 0x0238, 0x0000, 0x022f, 0x0007, 0x0068, 0x05d2, + // Entry 4FD00 - 4FD3F + 0x05e0, 0x05ee, 0x05fc, 0x0607, 0x0615, 0x0623, 0x0007, 0x0068, + 0x062d, 0x0634, 0x04f3, 0x063b, 0x0642, 0x0649, 0x0650, 0x0007, + 0x0068, 0x062d, 0x0634, 0x04f3, 0x063b, 0x0642, 0x0649, 0x0650, + 0x0007, 0x0068, 0x0654, 0x0667, 0x067d, 0x0696, 0x06a6, 0x06bc, + 0x0623, 0x0005, 0x0247, 0x0250, 0x0262, 0x0000, 0x0259, 0x0007, + 0x0068, 0x05d2, 0x05e0, 0x05ee, 0x05fc, 0x0607, 0x0615, 0x0623, + 0x0007, 0x0068, 0x062d, 0x0634, 0x04f3, 0x063b, 0x0642, 0x0649, + 0x0650, 0x0007, 0x0068, 0x062d, 0x0634, 0x04f3, 0x063b, 0x0642, + // Entry 4FD40 - 4FD7F + 0x0649, 0x0650, 0x0007, 0x0068, 0x0654, 0x0667, 0x067d, 0x0696, + 0x06a6, 0x06bc, 0x0623, 0x0002, 0x026e, 0x0287, 0x0003, 0x0272, + 0x0279, 0x0280, 0x0005, 0x0068, 0xffff, 0x06cf, 0x06de, 0x06ed, + 0x06fc, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x0005, 0x0068, 0xffff, 0x070b, 0x073a, 0x076c, 0x079e, 0x0003, + 0x028b, 0x0292, 0x0299, 0x0005, 0x0068, 0xffff, 0x06cf, 0x06de, + 0x06ed, 0x06fc, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x0005, 0x0068, 0xffff, 0x070b, 0x073a, 0x076c, 0x079e, + // Entry 4FD80 - 4FDBF + 0x0002, 0x02a3, 0x0331, 0x0003, 0x02a7, 0x02d5, 0x0303, 0x000c, + 0x02b7, 0x02bd, 0x02b4, 0x02c0, 0x02c6, 0x02cc, 0x02d2, 0x02ba, + 0x02c3, 0x02c9, 0x0000, 0x02cf, 0x0001, 0x0068, 0x07d0, 0x0001, + 0x0068, 0x07e9, 0x0001, 0x0068, 0x0802, 0x0001, 0x0068, 0x0818, + 0x0001, 0x0068, 0x0831, 0x0001, 0x0068, 0x0847, 0x0001, 0x0068, + 0x0854, 0x0001, 0x0068, 0x0818, 0x0001, 0x0068, 0x0867, 0x0001, + 0x0068, 0x0874, 0x0001, 0x0068, 0x0891, 0x000c, 0x02e5, 0x02eb, + 0x02e2, 0x02ee, 0x02f4, 0x02fa, 0x0300, 0x02e8, 0x02f1, 0x02f7, + // Entry 4FDC0 - 4FDFF + 0x0000, 0x02fd, 0x0001, 0x0068, 0x089e, 0x0001, 0x0068, 0x08a9, + 0x0001, 0x0068, 0x08b4, 0x0001, 0x0068, 0x08bf, 0x0001, 0x0068, + 0x08ca, 0x0001, 0x0068, 0x08d5, 0x0001, 0x0068, 0x08dd, 0x0001, + 0x0068, 0x08e8, 0x0001, 0x0068, 0x08f6, 0x0001, 0x0068, 0x08fe, + 0x0001, 0x0068, 0x0916, 0x000c, 0x0313, 0x0319, 0x0310, 0x031c, + 0x0322, 0x0328, 0x032e, 0x0316, 0x031f, 0x0325, 0x0000, 0x032b, + 0x0001, 0x0068, 0x07d0, 0x0001, 0x0068, 0x07e9, 0x0001, 0x0068, + 0x0802, 0x0001, 0x0068, 0x0818, 0x0001, 0x0068, 0x0831, 0x0001, + // Entry 4FE00 - 4FE3F + 0x0068, 0x0847, 0x0001, 0x0068, 0x0854, 0x0001, 0x0068, 0x0818, + 0x0001, 0x0068, 0x0867, 0x0001, 0x0068, 0x0874, 0x0001, 0x0068, + 0x0891, 0x0003, 0x0335, 0x0363, 0x0391, 0x000c, 0x0345, 0x034b, + 0x0342, 0x034e, 0x0354, 0x035a, 0x0360, 0x0348, 0x0351, 0x0357, + 0x0000, 0x035d, 0x0001, 0x0068, 0x07d0, 0x0001, 0x0068, 0x07e9, + 0x0001, 0x0068, 0x0802, 0x0001, 0x0068, 0x0818, 0x0001, 0x0068, + 0x0831, 0x0001, 0x0068, 0x0847, 0x0001, 0x0068, 0x0854, 0x0001, + 0x0068, 0x0818, 0x0001, 0x0068, 0x0867, 0x0001, 0x0068, 0x0874, + // Entry 4FE40 - 4FE7F + 0x0001, 0x0068, 0x0891, 0x000c, 0x0373, 0x0379, 0x0370, 0x037c, + 0x0382, 0x0388, 0x038e, 0x0376, 0x037f, 0x0385, 0x0000, 0x038b, + 0x0001, 0x0068, 0x089e, 0x0001, 0x0068, 0x08a9, 0x0001, 0x0068, + 0x08b4, 0x0001, 0x0068, 0x08bf, 0x0001, 0x0068, 0x08ca, 0x0001, + 0x0068, 0x08d5, 0x0001, 0x0068, 0x08dd, 0x0001, 0x0068, 0x08e8, + 0x0001, 0x0068, 0x08f6, 0x0001, 0x0068, 0x08fe, 0x0001, 0x0068, + 0x091e, 0x000c, 0x03a1, 0x03a7, 0x039e, 0x03aa, 0x03b0, 0x03b6, + 0x03bc, 0x03a4, 0x03ad, 0x03b3, 0x0000, 0x03b9, 0x0001, 0x0068, + // Entry 4FE80 - 4FEBF + 0x07d0, 0x0001, 0x0068, 0x07e9, 0x0001, 0x0068, 0x0802, 0x0001, + 0x0068, 0x0818, 0x0001, 0x0068, 0x0831, 0x0001, 0x0068, 0x0847, + 0x0001, 0x0068, 0x0854, 0x0001, 0x0068, 0x0818, 0x0001, 0x0068, + 0x0867, 0x0001, 0x0068, 0x0874, 0x0001, 0x0068, 0x0891, 0x0003, + 0x03ce, 0x0000, 0x03c3, 0x0002, 0x03c6, 0x03ca, 0x0002, 0x0068, + 0x0923, 0x096d, 0x0002, 0x0068, 0x095b, 0x0990, 0x0002, 0x03d1, + 0x03d5, 0x0002, 0x0068, 0x099b, 0x09aa, 0x0002, 0x0068, 0x095b, + 0x0990, 0x0004, 0x03e7, 0x03e1, 0x03de, 0x03e4, 0x0001, 0x0005, + // Entry 4FEC0 - 4FEFF + 0x0615, 0x0001, 0x0005, 0x0625, 0x0001, 0x0002, 0x0282, 0x0001, + 0x0000, 0x2418, 0x0004, 0x03f8, 0x03f2, 0x03ef, 0x03f5, 0x0001, + 0x0068, 0x09b9, 0x0001, 0x0068, 0x09c8, 0x0001, 0x003d, 0x0587, + 0x0001, 0x003d, 0x0591, 0x0004, 0x0409, 0x0403, 0x0400, 0x0406, + 0x0001, 0x0068, 0x09d4, 0x0001, 0x0068, 0x09d4, 0x0001, 0x0006, + 0x022e, 0x0001, 0x0006, 0x022e, 0x0005, 0x0412, 0x0000, 0x0000, + 0x0000, 0x045d, 0x0002, 0x0415, 0x0439, 0x0003, 0x0419, 0x0000, + 0x0429, 0x000e, 0x0068, 0x0a50, 0x09f2, 0x0a00, 0x0a0e, 0x0a1c, + // Entry 4FF00 - 4FF3F + 0x0a2a, 0x0a38, 0x0a45, 0x0a5d, 0x0a6b, 0x0a76, 0x0a84, 0x0a8f, + 0x0a99, 0x000e, 0x0068, 0x0b31, 0x0aa4, 0x0ab7, 0x0ad0, 0x0ae9, + 0x0afc, 0x0b0f, 0x0b21, 0x0b43, 0x0b56, 0x0b66, 0x0b79, 0x0a8f, + 0x0b89, 0x0003, 0x043d, 0x0000, 0x044d, 0x000e, 0x0068, 0x0a50, + 0x09f2, 0x0a00, 0x0a0e, 0x0a1c, 0x0a2a, 0x0a38, 0x0a45, 0x0a5d, + 0x0a6b, 0x0a76, 0x0a84, 0x0a8f, 0x0a99, 0x000e, 0x0068, 0x0b31, + 0x0aa4, 0x0ab7, 0x0ad0, 0x0ae9, 0x0afc, 0x0b0f, 0x0b21, 0x0b43, + 0x0b56, 0x0b66, 0x0b79, 0x0a8f, 0x0b89, 0x0003, 0x0466, 0x046b, + // Entry 4FF40 - 4FF7F + 0x0461, 0x0001, 0x0463, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0468, + 0x0001, 0x0000, 0x04ef, 0x0001, 0x046d, 0x0001, 0x0000, 0x04ef, + 0x0005, 0x0476, 0x0000, 0x0000, 0x0000, 0x04bd, 0x0002, 0x0479, + 0x049b, 0x0003, 0x047d, 0x0000, 0x048c, 0x000d, 0x0068, 0xffff, + 0x0b99, 0x0ba7, 0x0bb5, 0x0bbf, 0x0bc9, 0x0bd1, 0x0bdc, 0x0be7, + 0x0464, 0x0bf5, 0x0bfc, 0x0c09, 0x000d, 0x0068, 0xffff, 0x0c14, + 0x0c2d, 0x0bb5, 0x0bbf, 0x0c40, 0x0c4d, 0x0c69, 0x0c7c, 0x0c9b, + 0x0bf5, 0x0bfc, 0x0cb1, 0x0003, 0x049f, 0x0000, 0x04ae, 0x000d, + // Entry 4FF80 - 4FFBF + 0x0068, 0xffff, 0x0b99, 0x0ba7, 0x0bb5, 0x0bbf, 0x0bc9, 0x0bd1, + 0x0bdc, 0x0be7, 0x0464, 0x0bf5, 0x0bfc, 0x0c09, 0x000d, 0x0068, + 0xffff, 0x0c14, 0x0c2d, 0x0bb5, 0x0bbf, 0x0c40, 0x0c4d, 0x0c69, + 0x0c7c, 0x0c9b, 0x0bf5, 0x0bfc, 0x0cb1, 0x0003, 0x04c6, 0x04cb, + 0x04c1, 0x0001, 0x04c3, 0x0001, 0x0068, 0x0cc7, 0x0001, 0x04c8, + 0x0001, 0x0068, 0x0cc7, 0x0001, 0x04cd, 0x0001, 0x0068, 0x0cc7, + 0x0005, 0x04d6, 0x0000, 0x0000, 0x0000, 0x051d, 0x0002, 0x04d9, + 0x04fb, 0x0003, 0x04dd, 0x0000, 0x04ec, 0x000d, 0x0068, 0xffff, + // Entry 4FFC0 - 4FFFF + 0x0cd4, 0x0cdf, 0x0cea, 0x0cf6, 0x0d02, 0x0d0f, 0x0d1c, 0x0d24, + 0x0d2c, 0x0d34, 0x0d3f, 0x0d54, 0x000d, 0x0068, 0xffff, 0x0d6f, + 0x0d88, 0x0cea, 0x0cf6, 0x0d98, 0x0daa, 0x0dbc, 0x0dc9, 0x0ddc, + 0x0def, 0x0e05, 0x0e1f, 0x0003, 0x04ff, 0x0000, 0x050e, 0x000d, + 0x0068, 0xffff, 0x0cd4, 0x0cdf, 0x0cea, 0x0cf6, 0x0d02, 0x0d0f, + 0x0d1c, 0x0d24, 0x0d2c, 0x0d34, 0x0d3f, 0x0d54, 0x000d, 0x0068, + 0xffff, 0x0d6f, 0x0d88, 0x0cea, 0x0cf6, 0x0d98, 0x0daa, 0x0dbc, + 0x0dc9, 0x0ddc, 0x0def, 0x0e05, 0x0e1f, 0x0003, 0x0526, 0x052b, + // Entry 50000 - 5003F + 0x0521, 0x0001, 0x0523, 0x0001, 0x0000, 0x06c8, 0x0001, 0x0528, + 0x0001, 0x0000, 0x06c8, 0x0001, 0x052d, 0x0001, 0x0000, 0x06c8, + 0x0005, 0x0536, 0x0000, 0x0000, 0x0000, 0x057d, 0x0002, 0x0539, + 0x055b, 0x0003, 0x053d, 0x0000, 0x054c, 0x000d, 0x0068, 0xffff, + 0x0e3f, 0x0e4d, 0x0e5e, 0x0e6c, 0x0e79, 0x0e87, 0x0e95, 0x0ea3, + 0x0eae, 0x0eb9, 0x0ec0, 0x0ecb, 0x000d, 0x0068, 0xffff, 0x0ed3, + 0x0ef2, 0x0f1a, 0x0e6c, 0x0f33, 0x0f4c, 0x0f65, 0x0f78, 0x0f88, + 0x0eb9, 0x0f98, 0x0fae, 0x0003, 0x055f, 0x0000, 0x056e, 0x000d, + // Entry 50040 - 5007F + 0x0068, 0xffff, 0x0e3f, 0x0e4d, 0x0e5e, 0x0e6c, 0x0e79, 0x0e87, + 0x0e95, 0x0ea3, 0x0eae, 0x0eb9, 0x0ec0, 0x0ecb, 0x000d, 0x0068, + 0xffff, 0x0ed3, 0x0ef2, 0x0f1a, 0x0e6c, 0x0f33, 0x0f4c, 0x0f65, + 0x0f78, 0x0f88, 0x0eb9, 0x0f98, 0x0fae, 0x0003, 0x0586, 0x058b, + 0x0581, 0x0001, 0x0583, 0x0001, 0x0000, 0x1a1d, 0x0001, 0x0588, + 0x0001, 0x0000, 0x1a1d, 0x0001, 0x058d, 0x0001, 0x0000, 0x1a1d, + 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0596, 0x0003, 0x05a0, + 0x05a6, 0x059a, 0x0001, 0x059c, 0x0002, 0x0068, 0x0fc1, 0x0fe9, + // Entry 50080 - 500BF + 0x0001, 0x05a2, 0x0002, 0x0068, 0x0ff0, 0x0fe9, 0x0001, 0x05a8, + 0x0002, 0x0068, 0x0ff0, 0x0fe9, 0x0042, 0x05ef, 0x05f4, 0x05f9, + 0x05fe, 0x0615, 0x062c, 0x0643, 0x065a, 0x0671, 0x0688, 0x069f, + 0x06b6, 0x06cd, 0x06e8, 0x0703, 0x071e, 0x0723, 0x0728, 0x072d, + 0x0746, 0x075f, 0x0778, 0x077d, 0x0782, 0x0787, 0x078c, 0x0791, + 0x0796, 0x079b, 0x07a0, 0x07a5, 0x07b9, 0x07cd, 0x07e1, 0x07f5, + 0x0809, 0x081d, 0x0831, 0x0845, 0x0859, 0x086d, 0x0881, 0x0895, + 0x08a9, 0x08bd, 0x08d1, 0x08e5, 0x08f9, 0x090d, 0x0921, 0x0935, + // Entry 500C0 - 500FF + 0x0949, 0x094e, 0x0953, 0x0958, 0x096e, 0x0980, 0x0992, 0x09a8, + 0x09ba, 0x09cc, 0x09e2, 0x09f4, 0x0a06, 0x0a0b, 0x0a10, 0x0001, + 0x05f1, 0x0001, 0x0068, 0x100d, 0x0001, 0x05f6, 0x0001, 0x0068, + 0x100d, 0x0001, 0x05fb, 0x0001, 0x0068, 0x100d, 0x0003, 0x0602, + 0x0605, 0x060a, 0x0001, 0x0068, 0x101d, 0x0003, 0x0068, 0x102d, + 0x104d, 0x106a, 0x0002, 0x060d, 0x0611, 0x0002, 0x0068, 0x10a7, + 0x108d, 0x0002, 0x0068, 0x10f7, 0x10ca, 0x0003, 0x0619, 0x061c, + 0x0621, 0x0001, 0x0068, 0x101d, 0x0003, 0x0068, 0x102d, 0x104d, + // Entry 50100 - 5013F + 0x106a, 0x0002, 0x0624, 0x0628, 0x0002, 0x0068, 0x10a7, 0x108d, + 0x0002, 0x0068, 0x10f7, 0x10ca, 0x0003, 0x0630, 0x0633, 0x0638, + 0x0001, 0x0068, 0x112d, 0x0003, 0x0068, 0x102d, 0x104d, 0x106a, + 0x0002, 0x063b, 0x063f, 0x0002, 0x0068, 0x1132, 0x1132, 0x0002, + 0x0068, 0x113b, 0x113b, 0x0003, 0x0647, 0x064a, 0x064f, 0x0001, + 0x0068, 0x1151, 0x0003, 0x0068, 0x116a, 0x1193, 0x11b9, 0x0002, + 0x0652, 0x0656, 0x0002, 0x0068, 0x1209, 0x11e5, 0x0002, 0x0068, + 0x126b, 0x1235, 0x0003, 0x065e, 0x0661, 0x0666, 0x0001, 0x0068, + // Entry 50140 - 5017F + 0x12aa, 0x0003, 0x0068, 0x12b8, 0x1193, 0x11b9, 0x0002, 0x0669, + 0x066d, 0x0002, 0x0068, 0x12e1, 0x12e1, 0x0002, 0x0068, 0x12f3, + 0x12f3, 0x0003, 0x0675, 0x0678, 0x067d, 0x0001, 0x0068, 0x08d5, + 0x0003, 0x0068, 0x12b8, 0x1193, 0x11b9, 0x0002, 0x0680, 0x0684, + 0x0002, 0x0068, 0x1312, 0x1312, 0x0002, 0x0068, 0x131e, 0x131e, + 0x0003, 0x068c, 0x068f, 0x0694, 0x0001, 0x0068, 0x1337, 0x0003, + 0x0068, 0x1347, 0x1367, 0x1384, 0x0002, 0x0697, 0x069b, 0x0002, + 0x0068, 0x13c7, 0x13a7, 0x0002, 0x0068, 0x141d, 0x13ea, 0x0003, + // Entry 50180 - 501BF + 0x06a3, 0x06a6, 0x06ab, 0x0001, 0x0068, 0x1453, 0x0003, 0x0068, + 0x1347, 0x1367, 0x1384, 0x0002, 0x06ae, 0x06b2, 0x0002, 0x0068, + 0x145e, 0x145e, 0x0002, 0x0068, 0x146d, 0x146d, 0x0003, 0x06ba, + 0x06bd, 0x06c2, 0x0001, 0x0068, 0x08f6, 0x0003, 0x0068, 0x1347, + 0x1367, 0x1384, 0x0002, 0x06c5, 0x06c9, 0x0002, 0x0068, 0x1489, + 0x1489, 0x0002, 0x0068, 0x1495, 0x1495, 0x0004, 0x06d2, 0x06d5, + 0x06da, 0x06e5, 0x0001, 0x0068, 0x14ae, 0x0003, 0x0068, 0x14be, + 0x14de, 0x14fb, 0x0002, 0x06dd, 0x06e1, 0x0002, 0x0068, 0x153e, + // Entry 501C0 - 501FF + 0x151e, 0x0002, 0x0068, 0x1594, 0x1561, 0x0001, 0x0068, 0x15ca, + 0x0004, 0x06ed, 0x06f0, 0x06f5, 0x0700, 0x0001, 0x0068, 0x14ae, + 0x0003, 0x0068, 0x14be, 0x14de, 0x14fb, 0x0002, 0x06f8, 0x06fc, + 0x0002, 0x0068, 0x15e9, 0x15e9, 0x0002, 0x0068, 0x15f8, 0x15f8, + 0x0001, 0x0068, 0x15ca, 0x0004, 0x0708, 0x070b, 0x0710, 0x071b, + 0x0001, 0x0068, 0x1614, 0x0003, 0x0068, 0x14be, 0x14de, 0x14fb, + 0x0002, 0x0713, 0x0717, 0x0002, 0x0068, 0x161c, 0x161c, 0x0002, + 0x0068, 0x1628, 0x1628, 0x0001, 0x0068, 0x15ca, 0x0001, 0x0720, + // Entry 50200 - 5023F + 0x0001, 0x0068, 0x1641, 0x0001, 0x0725, 0x0001, 0x0068, 0x166d, + 0x0001, 0x072a, 0x0001, 0x0068, 0x166d, 0x0003, 0x0731, 0x0734, + 0x073b, 0x0001, 0x0068, 0x1688, 0x0005, 0x0068, 0x16c5, 0x16d8, + 0x16e8, 0x1695, 0x16f5, 0x0002, 0x073e, 0x0742, 0x0002, 0x0068, + 0x172f, 0x1718, 0x0002, 0x0068, 0x1779, 0x174f, 0x0003, 0x074a, + 0x074d, 0x0754, 0x0001, 0x0068, 0x1688, 0x0005, 0x0068, 0x16c5, + 0x16d8, 0x16e8, 0x1695, 0x16f5, 0x0002, 0x0757, 0x075b, 0x0002, + 0x0068, 0x172f, 0x1718, 0x0002, 0x0068, 0x1779, 0x174f, 0x0003, + // Entry 50240 - 5027F + 0x0763, 0x0766, 0x076d, 0x0001, 0x0068, 0x17ac, 0x0005, 0x0068, + 0x16c5, 0x16d8, 0x16e8, 0x1695, 0x16f5, 0x0002, 0x0770, 0x0774, + 0x0002, 0x0068, 0x17b4, 0x17b4, 0x0002, 0x0068, 0x17c0, 0x17c0, + 0x0001, 0x077a, 0x0001, 0x0068, 0x17d9, 0x0001, 0x077f, 0x0001, + 0x0068, 0x1805, 0x0001, 0x0784, 0x0001, 0x0068, 0x1805, 0x0001, + 0x0789, 0x0001, 0x0068, 0x1820, 0x0001, 0x078e, 0x0001, 0x0068, + 0x1849, 0x0001, 0x0793, 0x0001, 0x0068, 0x1849, 0x0001, 0x0798, + 0x0001, 0x0068, 0x1861, 0x0001, 0x079d, 0x0001, 0x0068, 0x1893, + // Entry 50280 - 502BF + 0x0001, 0x07a2, 0x0001, 0x0068, 0x1893, 0x0003, 0x0000, 0x07a9, + 0x07ae, 0x0003, 0x0068, 0x18b4, 0x18d7, 0x18f7, 0x0002, 0x07b1, + 0x07b5, 0x0002, 0x0068, 0x193a, 0x191d, 0x0002, 0x0068, 0x1996, + 0x1960, 0x0003, 0x0000, 0x07bd, 0x07c2, 0x0003, 0x0068, 0x19d5, + 0x19f3, 0x1a0e, 0x0002, 0x07c5, 0x07c9, 0x0002, 0x0068, 0x1a2f, + 0x1a2f, 0x0002, 0x0068, 0x1a41, 0x1a41, 0x0003, 0x0000, 0x07d1, + 0x07d6, 0x0003, 0x0068, 0x1a60, 0x1a78, 0x1a8d, 0x0002, 0x07d9, + 0x07dd, 0x0002, 0x0068, 0x1aa8, 0x1aa8, 0x0002, 0x0068, 0x1ab4, + // Entry 502C0 - 502FF + 0x1ab4, 0x0003, 0x0000, 0x07e5, 0x07ea, 0x0003, 0x0068, 0x1acd, + 0x1af3, 0x1b16, 0x0002, 0x07ed, 0x07f1, 0x0002, 0x0068, 0x1b5f, + 0x1b3f, 0x0002, 0x0068, 0x1bbb, 0x1b88, 0x0003, 0x0000, 0x07f9, + 0x07fe, 0x0003, 0x0068, 0x1bf7, 0x1c15, 0x1c30, 0x0002, 0x0801, + 0x0805, 0x0002, 0x0068, 0x1c51, 0x1c51, 0x0002, 0x0068, 0x1c63, + 0x1c63, 0x0003, 0x0000, 0x080d, 0x0812, 0x0003, 0x0068, 0x1bf7, + 0x1c15, 0x1c30, 0x0002, 0x0815, 0x0819, 0x0002, 0x0068, 0x1c51, + 0x1c51, 0x0002, 0x0068, 0x1c63, 0x1c63, 0x0003, 0x0000, 0x0821, + // Entry 50300 - 5033F + 0x0826, 0x0003, 0x0068, 0x1c82, 0x1cab, 0x1cd1, 0x0002, 0x0829, + 0x082d, 0x0002, 0x0068, 0x1d20, 0x1cfd, 0x0002, 0x0068, 0x1d7c, + 0x1d4c, 0x0003, 0x0000, 0x0835, 0x083a, 0x0003, 0x0068, 0x1db5, + 0x1dd3, 0x1dee, 0x0002, 0x083d, 0x0841, 0x0002, 0x0068, 0x1e0f, + 0x1e0f, 0x0002, 0x0068, 0x1e21, 0x1e21, 0x0003, 0x0000, 0x0849, + 0x084e, 0x0003, 0x0068, 0x1db5, 0x1dd3, 0x1dee, 0x0002, 0x0851, + 0x0855, 0x0002, 0x0068, 0x1d20, 0x1e0f, 0x0002, 0x0068, 0x1e60, + 0x1e21, 0x0003, 0x0000, 0x085d, 0x0862, 0x0003, 0x0068, 0x1e85, + // Entry 50340 - 5037F + 0x1ea5, 0x1ec2, 0x0002, 0x0865, 0x0869, 0x0002, 0x0068, 0x1eff, + 0x1ee5, 0x0002, 0x0068, 0x1f4f, 0x1f22, 0x0003, 0x0000, 0x0871, + 0x0876, 0x0003, 0x0068, 0x1f85, 0x1fa0, 0x1fb8, 0x0002, 0x0879, + 0x087d, 0x0002, 0x0068, 0x1fd6, 0x1fd6, 0x0002, 0x0068, 0x1f4f, + 0x1f4f, 0x0003, 0x0000, 0x0885, 0x088a, 0x0003, 0x0068, 0x1f85, + 0x1fa0, 0x1fb8, 0x0002, 0x088d, 0x0891, 0x0002, 0x0068, 0x1fd6, + 0x1fd6, 0x0002, 0x0069, 0x0000, 0x0000, 0x0003, 0x0000, 0x0899, + 0x089e, 0x0003, 0x0069, 0x001c, 0x0042, 0x0065, 0x0002, 0x08a1, + // Entry 50380 - 503BF + 0x08a5, 0x0002, 0x0069, 0x00ae, 0x008e, 0x0002, 0x0069, 0x010a, + 0x00d7, 0x0003, 0x0000, 0x08ad, 0x08b2, 0x0003, 0x0069, 0x0146, + 0x0164, 0x017f, 0x0002, 0x08b5, 0x08b9, 0x0002, 0x0069, 0x01a0, + 0x01a0, 0x0002, 0x0069, 0x01b2, 0x01b2, 0x0003, 0x0000, 0x08c1, + 0x08c6, 0x0003, 0x0069, 0x0146, 0x0164, 0x017f, 0x0002, 0x08c9, + 0x08cd, 0x0002, 0x0069, 0x01a0, 0x01a0, 0x0002, 0x0069, 0x01b2, + 0x01b2, 0x0003, 0x0000, 0x08d5, 0x08da, 0x0003, 0x0069, 0x01d1, + 0x01f4, 0x0214, 0x0002, 0x08dd, 0x08e1, 0x0002, 0x0069, 0x025d, + // Entry 503C0 - 503FF + 0x023a, 0x0002, 0x0069, 0x02b3, 0x0283, 0x0003, 0x0000, 0x08e9, + 0x08ee, 0x0003, 0x0069, 0x02ec, 0x030a, 0x0325, 0x0002, 0x08f1, + 0x08f5, 0x0002, 0x0069, 0x0346, 0x0346, 0x0002, 0x0069, 0x0358, + 0x0358, 0x0003, 0x0000, 0x08fd, 0x0902, 0x0003, 0x0069, 0x02ec, + 0x030a, 0x0325, 0x0002, 0x0905, 0x0909, 0x0002, 0x0069, 0x0346, + 0x0346, 0x0002, 0x0069, 0x0358, 0x0358, 0x0003, 0x0000, 0x0911, + 0x0916, 0x0003, 0x0069, 0x0377, 0x0391, 0x03a8, 0x0002, 0x0919, + 0x091d, 0x0002, 0x0069, 0x03df, 0x03c5, 0x0002, 0x0069, 0x0423, + // Entry 50400 - 5043F + 0x03fc, 0x0003, 0x0000, 0x0925, 0x092a, 0x0003, 0x0069, 0x0377, + 0x0391, 0x03a8, 0x0002, 0x092d, 0x0931, 0x0002, 0x0069, 0x0453, + 0x0453, 0x0002, 0x0069, 0x0462, 0x0462, 0x0003, 0x0000, 0x0939, + 0x093e, 0x0003, 0x0069, 0x0377, 0x0391, 0x03a8, 0x0002, 0x0941, + 0x0945, 0x0002, 0x0069, 0x0453, 0x0453, 0x0002, 0x0069, 0x0462, + 0x0462, 0x0001, 0x094b, 0x0001, 0x0069, 0x047e, 0x0001, 0x0950, + 0x0001, 0x0069, 0x049a, 0x0001, 0x0955, 0x0001, 0x0069, 0x047e, + 0x0003, 0x095c, 0x095f, 0x0963, 0x0001, 0x0069, 0x04cc, 0x0002, + // Entry 50440 - 5047F + 0x0069, 0xffff, 0x04d6, 0x0002, 0x0966, 0x096a, 0x0002, 0x0069, + 0x0512, 0x0512, 0x0002, 0x0069, 0x053b, 0x053b, 0x0003, 0x0972, + 0x0000, 0x0975, 0x0001, 0x0069, 0x0565, 0x0002, 0x0978, 0x097c, + 0x0002, 0x0069, 0x0570, 0x0570, 0x0002, 0x0069, 0x057f, 0x057f, + 0x0003, 0x0984, 0x0000, 0x0987, 0x0001, 0x0069, 0x059b, 0x0002, + 0x098a, 0x098e, 0x0002, 0x0069, 0x05a0, 0x05a0, 0x0002, 0x0069, + 0x05a9, 0x05a9, 0x0003, 0x0996, 0x0999, 0x099d, 0x0001, 0x0069, + 0x05bf, 0x0002, 0x0069, 0xffff, 0x05d5, 0x0002, 0x09a0, 0x09a4, + // Entry 50480 - 504BF + 0x0002, 0x0069, 0x0634, 0x060e, 0x0002, 0x0069, 0x0696, 0x065d, + 0x0003, 0x09ac, 0x0000, 0x09af, 0x0001, 0x0069, 0x06d2, 0x0002, + 0x09b2, 0x09b6, 0x0002, 0x0069, 0x06e0, 0x06e0, 0x0002, 0x0069, + 0x06f2, 0x06f2, 0x0003, 0x09be, 0x0000, 0x09c1, 0x0001, 0x0069, + 0x06d2, 0x0002, 0x09c4, 0x09c8, 0x0002, 0x0069, 0x0711, 0x0711, + 0x0002, 0x0069, 0x071d, 0x071d, 0x0003, 0x09d0, 0x09d3, 0x09d7, + 0x0001, 0x0069, 0x0736, 0x0002, 0x0069, 0xffff, 0x0749, 0x0002, + 0x09da, 0x09de, 0x0002, 0x0069, 0x0782, 0x075f, 0x0002, 0x0069, + // Entry 504C0 - 504FF + 0x07d8, 0x07a8, 0x0003, 0x09e6, 0x0000, 0x09e9, 0x0001, 0x0069, + 0x0811, 0x0002, 0x09ec, 0x09f0, 0x0002, 0x0069, 0x081f, 0x081f, + 0x0002, 0x0069, 0x0831, 0x0831, 0x0003, 0x09f8, 0x0000, 0x09fb, + 0x0001, 0x0069, 0x0850, 0x0002, 0x09fe, 0x0a02, 0x0002, 0x0069, + 0x0858, 0x0858, 0x0002, 0x0069, 0x0864, 0x0864, 0x0001, 0x0a08, + 0x0001, 0x0069, 0x087d, 0x0001, 0x0a0d, 0x0001, 0x0069, 0x089d, + 0x0001, 0x0a12, 0x0001, 0x0069, 0x087d, 0x0004, 0x0a1a, 0x0a1f, + 0x0a24, 0x0a33, 0x0003, 0x0000, 0x1dc7, 0x4333, 0x432f, 0x0003, + // Entry 50500 - 5053F + 0x0069, 0x08b3, 0x08c7, 0x08ee, 0x0002, 0x0000, 0x0a27, 0x0003, + 0x0000, 0x0a2e, 0x0a2b, 0x0001, 0x0069, 0x0918, 0x0003, 0x0069, + 0xffff, 0x0963, 0x099f, 0x0002, 0x0c1a, 0x0a36, 0x0003, 0x0a3a, + 0x0b7a, 0x0ada, 0x009e, 0x0069, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0b5d, 0x0c46, 0x0d67, 0x0dfc, 0x0e8e, 0x0f4d, 0x0ffa, 0x1095, + 0x111e, 0x12a1, 0x1333, 0x13ec, 0x1502, 0x15a0, 0x165f, 0x175a, + 0x18b8, 0x19e0, 0x1aff, 0x1baf, 0x1c3e, 0xffff, 0xffff, 0x1d1f, + 0xffff, 0x1e11, 0xffff, 0x1efd, 0x1f98, 0x2012, 0x2089, 0xffff, + // Entry 50540 - 5057F + 0xffff, 0x21ba, 0x2261, 0x2327, 0xffff, 0xffff, 0xffff, 0x2461, + 0xffff, 0x253d, 0x2614, 0xffff, 0x2761, 0x285c, 0x2957, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2ad1, 0xffff, 0xffff, 0x2bf3, 0x2cf7, + 0xffff, 0xffff, 0x2e6f, 0x2f43, 0x2fe1, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x31f8, 0x3281, 0x333a, 0x33d5, 0x3470, + 0xffff, 0xffff, 0x362e, 0xffff, 0x36da, 0xffff, 0xffff, 0x383f, + 0xffff, 0x39ba, 0xffff, 0xffff, 0xffff, 0xffff, 0x3b06, 0xffff, + 0x3bcd, 0x3cbc, 0x3dab, 0x3e55, 0xffff, 0xffff, 0xffff, 0x3f4d, + // Entry 50580 - 505BF + 0x401b, 0x40e3, 0xffff, 0xffff, 0x4237, 0x438d, 0x4461, 0x44f6, + 0xffff, 0xffff, 0x4606, 0x469b, 0x4715, 0xffff, 0x4807, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x4ac7, 0x4b53, 0x4bbe, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x4d99, 0xffff, + 0xffff, 0x4e8c, 0xffff, 0x4f35, 0xffff, 0x503e, 0x50d3, 0x519e, + 0xffff, 0x526e, 0x5342, 0xffff, 0xffff, 0xffff, 0x54ac, 0x5553, + 0xffff, 0xffff, 0x09d5, 0x0ce1, 0x11a7, 0x121b, 0xffff, 0xffff, + 0x38f8, 0x49d7, 0x009e, 0x0069, 0x0a49, 0x0a84, 0x0ac6, 0x0b0b, + // Entry 505C0 - 505FF + 0x0b9f, 0x0c6c, 0x0d8d, 0x0e1f, 0x0ec0, 0x0f79, 0x1020, 0x10b8, + 0x113e, 0x12c4, 0x1365, 0x143d, 0x152b, 0x15d2, 0x16a1, 0x17c1, + 0x1909, 0x1a2e, 0x1b2e, 0x1bd2, 0x1c64, 0x1cd3, 0x1cf6, 0x1d4e, + 0x1dcf, 0x1e41, 0x1ec4, 0x1f23, 0x1fb5, 0x202c, 0x20bb, 0x2142, + 0x2181, 0x21e6, 0x2294, 0x234a, 0x23b9, 0x23dc, 0x2428, 0x2491, + 0x2514, 0x2579, 0x265f, 0x2718, 0x27a9, 0x28a4, 0x2977, 0x29da, + 0x2a13, 0x2a7f, 0x2aa5, 0x2afa, 0x2b6f, 0x2bb1, 0x2c3e, 0x2d3f, + 0x2e13, 0x2e4f, 0x2ea8, 0x2f6c, 0x3004, 0x306d, 0x30a6, 0x30ee, + // Entry 50600 - 5063F + 0x3117, 0x3159, 0x31aa, 0x3218, 0x32b3, 0x3360, 0x33fb, 0x34d3, + 0x35ad, 0x35ef, 0x364e, 0x36b7, 0x3718, 0x37b7, 0x380c, 0x386f, + 0x397e, 0x39da, 0x3a3d, 0x3a60, 0x3a95, 0x3aca, 0x3b32, 0x3bad, + 0x3c0f, 0x3cfe, 0x3dd8, 0x3e78, 0x3ee1, 0x3f0d, 0x3f2d, 0x3f86, + 0x4050, 0x412a, 0x41e1, 0x41fe, 0x4283, 0x43c8, 0x4487, 0x4525, + 0x45a6, 0x45c6, 0x462c, 0x46b8, 0x4744, 0x47c5, 0x4867, 0x4950, + 0x4985, 0x49a8, 0x4a78, 0x4aa4, 0x4aea, 0x4b70, 0x4bde, 0x4c47, + 0x4c70, 0x4cb8, 0x4cf1, 0x4d2d, 0x4d56, 0x4d79, 0x4dbc, 0x4e2b, + // Entry 50640 - 5067F + 0x4e5d, 0x4eaf, 0x4f18, 0x4f76, 0x501b, 0x5064, 0x510b, 0x51ca, + 0x5245, 0x52a9, 0x5377, 0x5404, 0x542d, 0x5457, 0x54d8, 0x5591, + 0x2df2, 0x4344, 0x09f5, 0x0d07, 0x11c7, 0x1241, 0xffff, 0x37ec, + 0x391e, 0x4a06, 0x009e, 0x0069, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0bf7, 0x0ca8, 0x0dc9, 0x0e58, 0x0f08, 0x0fbb, 0x105c, 0x10e8, + 0x1174, 0x12fd, 0x13ad, 0x14a4, 0x156a, 0x161a, 0x16ff, 0x183e, + 0x1976, 0x1a98, 0x1b73, 0x1c0b, 0x1ca0, 0xffff, 0xffff, 0x1d93, + 0xffff, 0x1e87, 0xffff, 0x1f5f, 0x1fe8, 0x205c, 0x2103, 0xffff, + // Entry 50680 - 506BF + 0xffff, 0x2228, 0x22dd, 0x2383, 0xffff, 0xffff, 0xffff, 0x24d7, + 0xffff, 0x25cb, 0x26c0, 0xffff, 0x2807, 0x2902, 0x29ad, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2b39, 0xffff, 0xffff, 0x2c9f, 0x2d9d, + 0xffff, 0xffff, 0x2ef7, 0x2fab, 0x303d, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x324e, 0x32fb, 0x339c, 0x3437, 0x353d, + 0xffff, 0xffff, 0x3684, 0xffff, 0x376c, 0xffff, 0xffff, 0x38b5, + 0xffff, 0x3a10, 0xffff, 0xffff, 0xffff, 0xffff, 0x3b74, 0xffff, + 0x3c67, 0x3d56, 0x3e1b, 0x3eb1, 0xffff, 0xffff, 0xffff, 0x3fd5, + // Entry 506C0 - 506FF + 0x409b, 0x4187, 0xffff, 0xffff, 0x42e8, 0x4419, 0x44c3, 0x456a, + 0xffff, 0xffff, 0x4668, 0x46eb, 0x4789, 0xffff, 0x48dd, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x4b23, 0x4b94, 0x4c14, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x4df5, 0xffff, + 0xffff, 0x4ee8, 0xffff, 0x4fcd, 0xffff, 0x50a0, 0x5159, 0x520c, + 0xffff, 0x52fa, 0x53c2, 0xffff, 0xffff, 0xffff, 0x551a, 0x55e5, + 0xffff, 0xffff, 0x0a1c, 0x0d34, 0x11ee, 0x126e, 0xffff, 0xffff, + 0x394b, 0x4a3c, 0x0003, 0x0000, 0x0000, 0x0c1e, 0x0042, 0x000b, + // Entry 50700 - 5073F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 50740 - 5077F + 0xffff, 0x0000, 0x0001, 0x0002, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0007, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0013, 0x0004, 0x0021, 0x001b, + 0x0018, 0x001e, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, + 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0003, 0x0000, + 0x0000, 0x0004, 0x0004, 0x0000, 0x0000, 0x0000, 0x0009, 0x0001, + 0x000b, 0x0003, 0x0000, 0x0000, 0x000f, 0x007d, 0x001f, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 50780 - 507BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x3040, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 507C0 - 507FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x304a, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x304e, 0x0003, 0x0000, 0x0000, 0x0004, + 0x0004, 0x0000, 0x0000, 0x0000, 0x0009, 0x0001, 0x000b, 0x0003, + // Entry 50800 - 5083F + 0x0000, 0x0000, 0x000f, 0x007d, 0x001f, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 50840 - 5087F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3040, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x304a, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 50880 - 508BF + 0xffff, 0x304e, 0x0003, 0x0004, 0x0583, 0x09d8, 0x0012, 0x0017, + 0x0000, 0x0030, 0x0000, 0x00b7, 0x0000, 0x013e, 0x0169, 0x0369, + 0x03ed, 0x046b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x04e9, + 0x0567, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x001d, 0x0003, + 0x0026, 0x002b, 0x0021, 0x0001, 0x0023, 0x0001, 0x0000, 0x0000, + 0x0001, 0x0028, 0x0001, 0x0000, 0x0000, 0x0001, 0x002d, 0x0001, + 0x0000, 0x0000, 0x0005, 0x0036, 0x0000, 0x0000, 0x0000, 0x00a1, + 0x0002, 0x0039, 0x006d, 0x0003, 0x003d, 0x004d, 0x005d, 0x000e, + // Entry 508C0 - 508FF + 0x006a, 0xffff, 0x0000, 0x000d, 0x001a, 0x002a, 0x003a, 0x0047, + 0x005d, 0x0079, 0x0092, 0x00a8, 0x00b5, 0x00c5, 0x00d8, 0x000e, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, + 0x006a, 0xffff, 0x0000, 0x000d, 0x001a, 0x002a, 0x003a, 0x0047, + 0x005d, 0x0079, 0x0092, 0x00a8, 0x00b5, 0x00c5, 0x00d8, 0x0003, + 0x0071, 0x0081, 0x0091, 0x000e, 0x006a, 0xffff, 0x0000, 0x000d, + 0x001a, 0x002a, 0x003a, 0x0047, 0x005d, 0x0079, 0x0092, 0x00a8, + // Entry 50900 - 5093F + 0x00b5, 0x00c5, 0x00d8, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, + 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x006a, 0xffff, 0x0000, 0x000d, + 0x001a, 0x002a, 0x003a, 0x0047, 0x005d, 0x0079, 0x0092, 0x00a8, + 0x00b5, 0x00c5, 0x00d8, 0x0003, 0x00ab, 0x00b1, 0x00a5, 0x0001, + 0x00a7, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x00ad, 0x0002, + 0x0000, 0x0425, 0x042a, 0x0001, 0x00b3, 0x0002, 0x0000, 0x0425, + 0x042a, 0x0005, 0x00bd, 0x0000, 0x0000, 0x0000, 0x0128, 0x0002, + // Entry 50940 - 5097F + 0x00c0, 0x00f4, 0x0003, 0x00c4, 0x00d4, 0x00e4, 0x000e, 0x006a, + 0xffff, 0x00e5, 0x0104, 0x011a, 0x012a, 0x013d, 0x0147, 0x0160, + 0x0179, 0x018c, 0x01a8, 0x01b5, 0x01c5, 0x01db, 0x000e, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x006a, + 0xffff, 0x00e5, 0x0104, 0x011a, 0x012a, 0x013d, 0x0147, 0x0160, + 0x0179, 0x018c, 0x01a8, 0x01b5, 0x01c5, 0x01db, 0x0003, 0x00f8, + 0x0108, 0x0118, 0x000e, 0x006a, 0xffff, 0x00e5, 0x0104, 0x011a, + // Entry 50980 - 509BF + 0x012a, 0x013d, 0x0147, 0x0160, 0x0179, 0x018c, 0x01a8, 0x01b5, + 0x01c5, 0x01db, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, + 0x3a0c, 0x0422, 0x000e, 0x006a, 0xffff, 0x00e5, 0x0104, 0x011a, + 0x012a, 0x013d, 0x0147, 0x0160, 0x0179, 0x018c, 0x01a8, 0x01b5, + 0x01c5, 0x01db, 0x0003, 0x0132, 0x0138, 0x012c, 0x0001, 0x012e, + 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x0134, 0x0002, 0x0000, + 0x0425, 0x042a, 0x0001, 0x013a, 0x0002, 0x0000, 0x0425, 0x042a, + // Entry 509C0 - 509FF + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0147, 0x0000, + 0x0158, 0x0004, 0x0155, 0x014f, 0x014c, 0x0152, 0x0001, 0x0002, + 0x0000, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, + 0x001f, 0x052f, 0x0004, 0x0166, 0x0160, 0x015d, 0x0163, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0008, 0x0172, 0x01d7, 0x022e, 0x0263, + 0x031c, 0x0336, 0x0347, 0x0358, 0x0002, 0x0175, 0x01a6, 0x0003, + 0x0179, 0x0188, 0x0197, 0x000d, 0x006a, 0xffff, 0x01f1, 0x01f8, + // Entry 50A00 - 50A3F + 0x0208, 0x021b, 0x022b, 0x0232, 0x023f, 0x024c, 0x0253, 0x0269, + 0x0279, 0x0283, 0x000d, 0x006a, 0xffff, 0x0293, 0x0297, 0x029e, + 0x02a5, 0x022b, 0x02a9, 0x02b0, 0x02b7, 0x02bb, 0x02c2, 0x02c6, + 0x02ca, 0x000d, 0x006a, 0xffff, 0x02d1, 0x02e1, 0x0208, 0x02fa, + 0x022b, 0x0232, 0x023f, 0x0310, 0x0323, 0x0342, 0x035b, 0x036e, + 0x0003, 0x01aa, 0x01b9, 0x01c8, 0x000d, 0x006a, 0xffff, 0x01f1, + 0x01f8, 0x0208, 0x021b, 0x022b, 0x0232, 0x023f, 0x024c, 0x0253, + 0x0269, 0x0279, 0x0283, 0x000d, 0x006a, 0xffff, 0x0293, 0x0297, + // Entry 50A40 - 50A7F + 0x029e, 0x02a5, 0x022b, 0x02a9, 0x02b0, 0x02b7, 0x02bb, 0x02c2, + 0x02c6, 0x02ca, 0x000d, 0x006a, 0xffff, 0x02d1, 0x02e1, 0x0208, + 0x02fa, 0x022b, 0x0232, 0x023f, 0x0310, 0x0323, 0x0342, 0x035b, + 0x036e, 0x0002, 0x01da, 0x0204, 0x0005, 0x01e0, 0x01e9, 0x01fb, + 0x0000, 0x01f2, 0x0007, 0x006a, 0x0387, 0x0391, 0x039b, 0x03a8, + 0x03b2, 0x03bf, 0x03cf, 0x0007, 0x006a, 0x02b7, 0x03d9, 0x03e0, + 0x03e4, 0x03eb, 0x03f2, 0x03f9, 0x0007, 0x006a, 0x0387, 0x0391, + 0x03fd, 0x03a8, 0x03b2, 0x03bf, 0x03cf, 0x0007, 0x006a, 0x0404, + // Entry 50A80 - 50ABF + 0x041a, 0x0430, 0x0449, 0x045f, 0x0478, 0x0494, 0x0005, 0x020a, + 0x0213, 0x0225, 0x0000, 0x021c, 0x0007, 0x006a, 0x0387, 0x0391, + 0x039b, 0x03a8, 0x03b2, 0x03bf, 0x03cf, 0x0007, 0x006a, 0x02b7, + 0x03d9, 0x03e0, 0x03e4, 0x03eb, 0x03f2, 0x03f9, 0x0007, 0x006a, + 0x0387, 0x0391, 0x03fd, 0x03a8, 0x03b2, 0x03bf, 0x03cf, 0x0007, + 0x006a, 0x0404, 0x041a, 0x0430, 0x0449, 0x045f, 0x0478, 0x0494, + 0x0002, 0x0231, 0x024a, 0x0003, 0x0235, 0x023c, 0x0243, 0x0005, + 0x006a, 0xffff, 0x04aa, 0x04b8, 0x04c6, 0x04d4, 0x0005, 0x0000, + // Entry 50AC0 - 50AFF + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x006a, 0xffff, + 0x04e2, 0x0506, 0x052a, 0x054e, 0x0003, 0x024e, 0x0255, 0x025c, + 0x0005, 0x006a, 0xffff, 0x04aa, 0x04b8, 0x04c6, 0x04d4, 0x0005, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x006a, + 0xffff, 0x04e2, 0x0506, 0x052a, 0x054e, 0x0002, 0x0266, 0x02c1, + 0x0003, 0x026a, 0x0287, 0x02a4, 0x0007, 0x0275, 0x0278, 0x0272, + 0x027b, 0x027e, 0x0281, 0x0284, 0x0001, 0x006a, 0x0572, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0001, 0x006a, 0x0591, + // Entry 50B00 - 50B3F + 0x0001, 0x006a, 0x059e, 0x0001, 0x006a, 0x05ba, 0x0001, 0x006a, + 0x05d3, 0x0007, 0x0292, 0x0295, 0x028f, 0x0298, 0x029b, 0x029e, + 0x02a1, 0x0001, 0x006a, 0x0572, 0x0001, 0x006a, 0x05e6, 0x0001, + 0x006a, 0x05ea, 0x0001, 0x006a, 0x0591, 0x0001, 0x006a, 0x059e, + 0x0001, 0x006a, 0x05ba, 0x0001, 0x006a, 0x05d3, 0x0007, 0x02af, + 0x02b2, 0x02ac, 0x02b5, 0x02b8, 0x02bb, 0x02be, 0x0001, 0x006a, + 0x0572, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0001, + 0x006a, 0x0591, 0x0001, 0x006a, 0x059e, 0x0001, 0x006a, 0x05ba, + // Entry 50B40 - 50B7F + 0x0001, 0x006a, 0x05d3, 0x0003, 0x02c5, 0x02e2, 0x02ff, 0x0007, + 0x02d0, 0x02d3, 0x02cd, 0x02d6, 0x02d9, 0x02dc, 0x02df, 0x0001, + 0x006a, 0x0572, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, + 0x0001, 0x006a, 0x0591, 0x0001, 0x006a, 0x059e, 0x0001, 0x006a, + 0x05ba, 0x0001, 0x006a, 0x05d3, 0x0007, 0x02ed, 0x02f0, 0x02ea, + 0x02f3, 0x02f6, 0x02f9, 0x02fc, 0x0001, 0x006a, 0x0572, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0001, 0x006a, 0x0591, + 0x0001, 0x006a, 0x059e, 0x0001, 0x006a, 0x05ba, 0x0001, 0x006a, + // Entry 50B80 - 50BBF + 0x05d3, 0x0007, 0x030a, 0x030d, 0x0307, 0x0310, 0x0313, 0x0316, + 0x0319, 0x0001, 0x006a, 0x0572, 0x0001, 0x0000, 0x04ef, 0x0001, + 0x0000, 0x04f2, 0x0001, 0x006a, 0x0591, 0x0001, 0x006a, 0x059e, + 0x0001, 0x006a, 0x05ba, 0x0001, 0x006a, 0x05d3, 0x0003, 0x032b, + 0x0000, 0x0320, 0x0002, 0x0323, 0x0327, 0x0002, 0x006a, 0x05f1, + 0x065f, 0x0002, 0x006a, 0x061d, 0x0682, 0x0002, 0x032e, 0x0332, + 0x0002, 0x006a, 0x06a5, 0x06b8, 0x0002, 0x0000, 0x04f5, 0x3c5a, + 0x0004, 0x0344, 0x033e, 0x033b, 0x0341, 0x0001, 0x006a, 0x06c8, + // Entry 50BC0 - 50BFF + 0x0001, 0x0005, 0x0625, 0x0001, 0x0002, 0x0282, 0x0001, 0x001f, + 0x0579, 0x0004, 0x0355, 0x034f, 0x034c, 0x0352, 0x0001, 0x0002, + 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, 0x0002, 0x04fe, 0x0001, + 0x0002, 0x0508, 0x0004, 0x0366, 0x0360, 0x035d, 0x0363, 0x0001, + 0x006a, 0x06d8, 0x0001, 0x006a, 0x06d8, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0005, 0x036f, 0x0000, 0x0000, 0x0000, + 0x03da, 0x0002, 0x0372, 0x03a6, 0x0003, 0x0376, 0x0386, 0x0396, + 0x000e, 0x006a, 0x0770, 0x06e6, 0x06f9, 0x0715, 0x072e, 0x0741, + // Entry 50C00 - 50C3F + 0x0754, 0x0763, 0x0780, 0x0793, 0x07a0, 0x07b3, 0x07c3, 0x07ca, + 0x000e, 0x0000, 0x003f, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, + 0x000e, 0x006a, 0x0770, 0x06e6, 0x06f9, 0x0715, 0x072e, 0x0741, + 0x0754, 0x0763, 0x0780, 0x0793, 0x07a0, 0x07b3, 0x07c3, 0x07ca, + 0x0003, 0x03aa, 0x03ba, 0x03ca, 0x000e, 0x006a, 0x0770, 0x06e6, + 0x06f9, 0x0715, 0x072e, 0x0741, 0x0754, 0x0763, 0x0780, 0x0793, + 0x07a0, 0x07b3, 0x07c3, 0x07ca, 0x000e, 0x0000, 0x003f, 0x0033, + // Entry 50C40 - 50C7F + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x006a, 0x0770, 0x06e6, + 0x06f9, 0x0715, 0x072e, 0x0741, 0x0754, 0x0763, 0x0780, 0x0793, + 0x07a0, 0x07b3, 0x07c3, 0x07ca, 0x0003, 0x03e3, 0x03e8, 0x03de, + 0x0001, 0x03e0, 0x0001, 0x0000, 0x04ef, 0x0001, 0x03e5, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x03ea, 0x0001, 0x0000, 0x04ef, 0x0005, + 0x03f3, 0x0000, 0x0000, 0x0000, 0x0458, 0x0002, 0x03f6, 0x0427, + 0x0003, 0x03fa, 0x0409, 0x0418, 0x000d, 0x006a, 0xffff, 0x07da, + // Entry 50C80 - 50CBF + 0x07ed, 0x0800, 0x0819, 0x0829, 0x083f, 0x0858, 0x0871, 0x088a, + 0x08a6, 0x08b9, 0x08c6, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, + 0x3a09, 0x3a0c, 0x000d, 0x006a, 0xffff, 0x07da, 0x07ed, 0x0800, + 0x0819, 0x0829, 0x083f, 0x0858, 0x0871, 0x088a, 0x08a6, 0x08b9, + 0x08c6, 0x0003, 0x042b, 0x043a, 0x0449, 0x000d, 0x006a, 0xffff, + 0x07da, 0x07ed, 0x0800, 0x0819, 0x0829, 0x083f, 0x0858, 0x0871, + 0x088a, 0x08a6, 0x08b9, 0x08c6, 0x000d, 0x0000, 0xffff, 0x0033, + // Entry 50CC0 - 50CFF + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x006a, 0xffff, 0x07da, 0x07ed, + 0x0800, 0x0819, 0x0829, 0x083f, 0x0858, 0x0871, 0x088a, 0x08a6, + 0x08b9, 0x08c6, 0x0003, 0x0461, 0x0466, 0x045c, 0x0001, 0x045e, + 0x0001, 0x006a, 0x08dc, 0x0001, 0x0463, 0x0001, 0x006a, 0x08dc, + 0x0001, 0x0468, 0x0001, 0x006a, 0x08dc, 0x0005, 0x0471, 0x0000, + 0x0000, 0x0000, 0x04d6, 0x0002, 0x0474, 0x04a5, 0x0003, 0x0478, + 0x0487, 0x0496, 0x000d, 0x006a, 0xffff, 0x08e3, 0x08ee, 0x08f6, + // Entry 50D00 - 50D3F + 0x08fd, 0x0905, 0x0912, 0x0920, 0x0928, 0x0933, 0x0941, 0x0952, + 0x0967, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, + 0x000d, 0x0000, 0xffff, 0x0657, 0x41ed, 0x433a, 0x4343, 0x434d, + 0x4356, 0x3c38, 0x0692, 0x423c, 0x06a3, 0x06ab, 0x06ba, 0x0003, + 0x04a9, 0x04b8, 0x04c7, 0x000d, 0x006a, 0xffff, 0x08e3, 0x08ee, + 0x08f6, 0x08fd, 0x0905, 0x0912, 0x0920, 0x0928, 0x0933, 0x0941, + 0x0952, 0x0967, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + // Entry 50D40 - 50D7F + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, + 0x3a0c, 0x000d, 0x006a, 0xffff, 0x097c, 0x0992, 0x099f, 0x09ab, + 0x09b8, 0x09ca, 0x09dd, 0x09ea, 0x09fa, 0x0a0d, 0x0a23, 0x0a44, + 0x0003, 0x04df, 0x04e4, 0x04da, 0x0001, 0x04dc, 0x0001, 0x0000, + 0x06c8, 0x0001, 0x04e1, 0x0001, 0x0000, 0x06c8, 0x0001, 0x04e6, + 0x0001, 0x0000, 0x06c8, 0x0005, 0x04ef, 0x0000, 0x0000, 0x0000, + 0x0554, 0x0002, 0x04f2, 0x0523, 0x0003, 0x04f6, 0x0505, 0x0514, + 0x000d, 0x006a, 0xffff, 0x0a6a, 0x0a86, 0x0aa2, 0x0abb, 0x0ac8, + // Entry 50D80 - 50DBF + 0x0ae1, 0x0af4, 0x0b04, 0x0b11, 0x0b1e, 0x0b25, 0x0b41, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x006a, + 0xffff, 0x0a6a, 0x0a86, 0x0aa2, 0x0abb, 0x0ac8, 0x0ae1, 0x0af4, + 0x0b04, 0x0b11, 0x0b1e, 0x0b25, 0x0b41, 0x0003, 0x0527, 0x0536, + 0x0545, 0x000d, 0x006a, 0xffff, 0x0a6a, 0x0a86, 0x0aa2, 0x0abb, + 0x0ac8, 0x0ae1, 0x0af4, 0x0b04, 0x0b11, 0x0b1e, 0x0b25, 0x0b41, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + // Entry 50DC0 - 50DFF + 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, + 0x006a, 0xffff, 0x0a6a, 0x0a86, 0x0aa2, 0x0abb, 0x0ac8, 0x0ae1, + 0x0af4, 0x0b04, 0x0b11, 0x0b1e, 0x0b25, 0x0b41, 0x0003, 0x055d, + 0x0562, 0x0558, 0x0001, 0x055a, 0x0001, 0x0000, 0x1a1d, 0x0001, + 0x055f, 0x0001, 0x0000, 0x1a1d, 0x0001, 0x0564, 0x0001, 0x0000, + 0x1a1d, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x056d, 0x0003, + 0x0577, 0x057d, 0x0571, 0x0001, 0x0573, 0x0002, 0x006a, 0x0b5d, + 0x0b77, 0x0001, 0x0579, 0x0002, 0x006a, 0x0b5d, 0x0b77, 0x0001, + // Entry 50E00 - 50E3F + 0x057f, 0x0002, 0x006a, 0x0b5d, 0x0b77, 0x0042, 0x05c6, 0x05cb, + 0x05d0, 0x05d5, 0x05ec, 0x05fe, 0x0610, 0x0627, 0x0639, 0x064b, + 0x0662, 0x0679, 0x0690, 0x06ab, 0x06c6, 0x06e1, 0x06e6, 0x06eb, + 0x06f0, 0x0709, 0x0722, 0x073b, 0x0740, 0x0745, 0x074a, 0x074f, + 0x0754, 0x0759, 0x075e, 0x0763, 0x0768, 0x077c, 0x0790, 0x07a4, + 0x07b8, 0x07cc, 0x07e0, 0x07f4, 0x0808, 0x081c, 0x0830, 0x0844, + 0x0858, 0x086c, 0x0880, 0x0894, 0x08a8, 0x08bc, 0x08d0, 0x08e4, + 0x08f8, 0x090c, 0x0911, 0x0916, 0x091b, 0x0931, 0x0943, 0x0955, + // Entry 50E40 - 50E7F + 0x096b, 0x097d, 0x098f, 0x09a5, 0x09b7, 0x09c9, 0x09ce, 0x09d3, + 0x0001, 0x05c8, 0x0001, 0x006a, 0x0b7e, 0x0001, 0x05cd, 0x0001, + 0x006a, 0x0b7e, 0x0001, 0x05d2, 0x0001, 0x006a, 0x0b7e, 0x0003, + 0x05d9, 0x05dc, 0x05e1, 0x0001, 0x006a, 0x0b8b, 0x0003, 0x006a, + 0x0ba4, 0x0bc4, 0x0be1, 0x0002, 0x05e4, 0x05e8, 0x0002, 0x006a, + 0x0c30, 0x0c0d, 0x0002, 0x006a, 0x0c89, 0x0c59, 0x0003, 0x05f0, + 0x0000, 0x05f3, 0x0001, 0x006a, 0x0cbc, 0x0002, 0x05f6, 0x05fa, + 0x0002, 0x006a, 0x0cd6, 0x0cc4, 0x0002, 0x006a, 0x0cee, 0x0cee, + // Entry 50E80 - 50EBF + 0x0003, 0x0602, 0x0000, 0x0605, 0x0001, 0x006a, 0x0cbc, 0x0002, + 0x0608, 0x060c, 0x0002, 0x006a, 0x0cd6, 0x0cc4, 0x0002, 0x006a, + 0x0cee, 0x0cee, 0x0003, 0x0614, 0x0617, 0x061c, 0x0001, 0x006a, + 0x0d0d, 0x0003, 0x006a, 0x0d2c, 0x0d52, 0x0d75, 0x0002, 0x061f, + 0x0623, 0x0002, 0x006a, 0x0dd0, 0x0da7, 0x0002, 0x006a, 0x0e35, + 0x0dff, 0x0003, 0x062b, 0x0000, 0x062e, 0x0001, 0x006a, 0x0e6e, + 0x0002, 0x0631, 0x0635, 0x0002, 0x006a, 0x0e9a, 0x0e7c, 0x0002, + 0x006a, 0x0ebe, 0x0ebe, 0x0003, 0x063d, 0x0000, 0x0640, 0x0001, + // Entry 50EC0 - 50EFF + 0x006a, 0x0e6e, 0x0002, 0x0643, 0x0647, 0x0002, 0x006a, 0x0dd0, + 0x0da7, 0x0002, 0x006a, 0x0ebe, 0x0ebe, 0x0003, 0x064f, 0x0652, + 0x0657, 0x0001, 0x006a, 0x0ee9, 0x0003, 0x006a, 0x0ef3, 0x0f04, + 0x0f12, 0x0002, 0x065a, 0x065e, 0x0002, 0x006a, 0x0f43, 0x0f2f, + 0x0002, 0x006a, 0x0f7e, 0x0f5d, 0x0003, 0x0666, 0x0669, 0x066e, + 0x0001, 0x006a, 0x0ee9, 0x0003, 0x006a, 0x0ef3, 0x0f04, 0x0f12, + 0x0002, 0x0671, 0x0675, 0x0002, 0x006a, 0x0f43, 0x0f2f, 0x0002, + 0x006a, 0x0f7e, 0x0f5d, 0x0003, 0x067d, 0x0680, 0x0685, 0x0001, + // Entry 50F00 - 50F3F + 0x006a, 0x0fa2, 0x0003, 0x006a, 0x0ef3, 0x0f04, 0x0f12, 0x0002, + 0x0688, 0x068c, 0x0002, 0x006a, 0x0f43, 0x0f2f, 0x0002, 0x006a, + 0x0f7e, 0x0f5d, 0x0004, 0x0695, 0x0698, 0x069d, 0x06a8, 0x0001, + 0x006a, 0x0fa9, 0x0003, 0x006a, 0x0fb9, 0x0fcd, 0x0fde, 0x0002, + 0x06a0, 0x06a4, 0x0002, 0x006a, 0x1015, 0x0ffe, 0x0002, 0x006a, + 0x1056, 0x1032, 0x0001, 0x006a, 0x107d, 0x0004, 0x06b0, 0x06b3, + 0x06b8, 0x06c3, 0x0001, 0x006a, 0x108e, 0x0003, 0x006a, 0x0fb9, + 0x0fcd, 0x0fde, 0x0002, 0x06bb, 0x06bf, 0x0002, 0x006a, 0x1015, + // Entry 50F40 - 50F7F + 0x0ffe, 0x0002, 0x006a, 0x1056, 0x1032, 0x0001, 0x006a, 0x1095, + 0x0004, 0x06cb, 0x06ce, 0x06d3, 0x06de, 0x0001, 0x006a, 0x108e, + 0x0003, 0x006a, 0x0fb9, 0x0fcd, 0x0fde, 0x0002, 0x06d6, 0x06da, + 0x0002, 0x006a, 0x1015, 0x0ffe, 0x0002, 0x006a, 0x1056, 0x1032, + 0x0001, 0x006a, 0x1095, 0x0001, 0x06e3, 0x0001, 0x006a, 0x10ac, + 0x0001, 0x06e8, 0x0001, 0x006a, 0x10ac, 0x0001, 0x06ed, 0x0001, + 0x006a, 0x10ac, 0x0003, 0x06f4, 0x06f7, 0x06fe, 0x0001, 0x006a, + 0x10c9, 0x0005, 0x006a, 0x10e6, 0x10f6, 0x1107, 0x10d6, 0x1114, + // Entry 50F80 - 50FBF + 0x0002, 0x0701, 0x0705, 0x0002, 0x006a, 0x1144, 0x112d, 0x0002, + 0x006a, 0x1185, 0x1161, 0x0003, 0x070d, 0x0710, 0x0717, 0x0001, + 0x006a, 0x10c9, 0x0005, 0x006a, 0x10e6, 0x10f6, 0x1107, 0x10d6, + 0x1114, 0x0002, 0x071a, 0x071e, 0x0002, 0x006a, 0x1144, 0x112d, + 0x0002, 0x006a, 0x1185, 0x1161, 0x0003, 0x0726, 0x0729, 0x0730, + 0x0001, 0x006a, 0x11ac, 0x0005, 0x006a, 0x10e6, 0x10f6, 0x1107, + 0x10d6, 0x1114, 0x0002, 0x0733, 0x0737, 0x0002, 0x006a, 0x1144, + 0x112d, 0x0002, 0x006a, 0x1185, 0x1161, 0x0001, 0x073d, 0x0001, + // Entry 50FC0 - 50FFF + 0x006a, 0x11b9, 0x0001, 0x0742, 0x0001, 0x006a, 0x11b9, 0x0001, + 0x0747, 0x0001, 0x006a, 0x11b9, 0x0001, 0x074c, 0x0001, 0x006a, + 0x11e5, 0x0001, 0x0751, 0x0001, 0x006a, 0x11e5, 0x0001, 0x0756, + 0x0001, 0x006a, 0x11e5, 0x0001, 0x075b, 0x0001, 0x006a, 0x1205, + 0x0001, 0x0760, 0x0001, 0x006a, 0x1205, 0x0001, 0x0765, 0x0001, + 0x006a, 0x1205, 0x0003, 0x0000, 0x076c, 0x0771, 0x0003, 0x006a, + 0x122b, 0x1248, 0x1262, 0x0002, 0x0774, 0x0778, 0x0002, 0x006a, + 0x12ab, 0x128b, 0x0002, 0x006a, 0x12fe, 0x12d1, 0x0003, 0x0000, + // Entry 51000 - 5103F + 0x0780, 0x0785, 0x0003, 0x006a, 0x132e, 0x1340, 0x134f, 0x0002, + 0x0788, 0x078c, 0x0002, 0x006a, 0x1382, 0x136d, 0x0002, 0x006a, + 0x139d, 0x139d, 0x0003, 0x0000, 0x0794, 0x0799, 0x0003, 0x006a, + 0x132e, 0x1340, 0x134f, 0x0002, 0x079c, 0x07a0, 0x0002, 0x006a, + 0x12ab, 0x128b, 0x0002, 0x006a, 0x139d, 0x139d, 0x0003, 0x0000, + 0x07a8, 0x07ad, 0x0003, 0x006a, 0x13bf, 0x13dc, 0x13f6, 0x0002, + 0x07b0, 0x07b4, 0x0002, 0x006a, 0x143f, 0x141f, 0x0002, 0x006a, + 0x148f, 0x1462, 0x0003, 0x0000, 0x07bc, 0x07c1, 0x0003, 0x006a, + // Entry 51040 - 5107F + 0x14bf, 0x14d1, 0x14e0, 0x0002, 0x07c4, 0x07c8, 0x0002, 0x006a, + 0x14fe, 0x14fe, 0x0002, 0x006a, 0x1513, 0x1513, 0x0003, 0x0000, + 0x07d0, 0x07d5, 0x0003, 0x006a, 0x14bf, 0x14d1, 0x14e0, 0x0002, + 0x07d8, 0x07dc, 0x0002, 0x006a, 0x143f, 0x141f, 0x0002, 0x006a, + 0x1513, 0x1513, 0x0003, 0x0000, 0x07e4, 0x07e9, 0x0003, 0x006a, + 0x1535, 0x1555, 0x1572, 0x0002, 0x07ec, 0x07f0, 0x0002, 0x006a, + 0x15c1, 0x159e, 0x0002, 0x006a, 0x1617, 0x15e7, 0x0003, 0x0000, + 0x07f8, 0x07fd, 0x0003, 0x006a, 0x164a, 0x165f, 0x1671, 0x0002, + // Entry 51080 - 510BF + 0x0800, 0x0804, 0x0002, 0x006a, 0x1692, 0x1692, 0x0002, 0x006a, + 0x16aa, 0x16aa, 0x0003, 0x0000, 0x080c, 0x0811, 0x0003, 0x006a, + 0x164a, 0x165f, 0x1671, 0x0002, 0x0814, 0x0818, 0x0002, 0x006a, + 0x16cf, 0x16cf, 0x0002, 0x006a, 0x16aa, 0x16aa, 0x0003, 0x0000, + 0x0820, 0x0825, 0x0003, 0x006a, 0x16e1, 0x16fe, 0x1718, 0x0002, + 0x0828, 0x082c, 0x0002, 0x006a, 0x1761, 0x1741, 0x0002, 0x006a, + 0x17b1, 0x1784, 0x0003, 0x0000, 0x0834, 0x0839, 0x0003, 0x006a, + 0x17e1, 0x17f3, 0x1802, 0x0002, 0x083c, 0x0840, 0x0002, 0x006a, + // Entry 510C0 - 510FF + 0x1820, 0x1820, 0x0002, 0x006a, 0x1835, 0x1835, 0x0003, 0x0000, + 0x0848, 0x084d, 0x0003, 0x006a, 0x17e1, 0x17f3, 0x1802, 0x0002, + 0x0850, 0x0854, 0x0002, 0x006a, 0x1761, 0x1741, 0x0002, 0x006a, + 0x1835, 0x1835, 0x0003, 0x0000, 0x085c, 0x0861, 0x0003, 0x006a, + 0x1857, 0x1877, 0x1894, 0x0002, 0x0864, 0x0868, 0x0002, 0x006a, + 0x18e3, 0x18c0, 0x0002, 0x006a, 0x1939, 0x1909, 0x0003, 0x0000, + 0x0870, 0x0875, 0x0003, 0x006a, 0x196c, 0x1981, 0x1993, 0x0002, + 0x0878, 0x087c, 0x0002, 0x006a, 0x19b4, 0x19b4, 0x0002, 0x006a, + // Entry 51100 - 5113F + 0x19cc, 0x19cc, 0x0003, 0x0000, 0x0884, 0x0889, 0x0003, 0x006a, + 0x196c, 0x1981, 0x1993, 0x0002, 0x088c, 0x0890, 0x0002, 0x006a, + 0x19f1, 0x19f1, 0x0002, 0x006a, 0x19cc, 0x19cc, 0x0003, 0x0000, + 0x0898, 0x089d, 0x0003, 0x006a, 0x1a03, 0x1a26, 0x1a46, 0x0002, + 0x08a0, 0x08a4, 0x0002, 0x006a, 0x1a9b, 0x1a75, 0x0002, 0x006a, + 0x1af7, 0x1ac4, 0x0003, 0x0000, 0x08ac, 0x08b1, 0x0003, 0x006a, + 0x1b2d, 0x1b45, 0x1b5a, 0x0002, 0x08b4, 0x08b8, 0x0002, 0x006a, + 0x1b7e, 0x1b7e, 0x0002, 0x006a, 0x1b99, 0x1b99, 0x0003, 0x0000, + // Entry 51140 - 5117F + 0x08c0, 0x08c5, 0x0003, 0x006a, 0x1b2d, 0x1b45, 0x1b5a, 0x0002, + 0x08c8, 0x08cc, 0x0002, 0x006a, 0x1bc1, 0x1bc1, 0x0002, 0x006a, + 0x1b99, 0x1b99, 0x0003, 0x0000, 0x08d4, 0x08d9, 0x0003, 0x006a, + 0x1bd3, 0x1bf0, 0x1c0a, 0x0002, 0x08dc, 0x08e0, 0x0002, 0x006a, + 0x1c53, 0x1c33, 0x0002, 0x006a, 0x1ca3, 0x1c76, 0x0003, 0x0000, + 0x08e8, 0x08ed, 0x0003, 0x006a, 0x1cd3, 0x1ce5, 0x1cf4, 0x0002, + 0x08f0, 0x08f4, 0x0002, 0x006a, 0x1d12, 0x1d12, 0x0002, 0x006a, + 0x1d27, 0x1d27, 0x0003, 0x0000, 0x08fc, 0x0901, 0x0003, 0x006a, + // Entry 51180 - 511BF + 0x1cd3, 0x1ce5, 0x1cf4, 0x0002, 0x0904, 0x0908, 0x0002, 0x006a, + 0x1d49, 0x1d49, 0x0002, 0x006a, 0x1d27, 0x1d27, 0x0001, 0x090e, + 0x0001, 0x0007, 0x0892, 0x0001, 0x0913, 0x0001, 0x0007, 0x0892, + 0x0001, 0x0918, 0x0001, 0x0007, 0x0892, 0x0003, 0x091f, 0x0922, + 0x0926, 0x0001, 0x006a, 0x1d58, 0x0002, 0x006a, 0xffff, 0x1d62, + 0x0002, 0x0929, 0x092d, 0x0002, 0x006a, 0x1d84, 0x1d70, 0x0002, + 0x006a, 0x1dbf, 0x1d9e, 0x0003, 0x0935, 0x0000, 0x0938, 0x0001, + 0x006a, 0x1de3, 0x0002, 0x093b, 0x093f, 0x0002, 0x006a, 0x1deb, + // Entry 511C0 - 511FF + 0x1deb, 0x0002, 0x006a, 0x1dfd, 0x1dfd, 0x0003, 0x0947, 0x0000, + 0x094a, 0x0001, 0x006a, 0x1e1c, 0x0002, 0x094d, 0x0951, 0x0002, + 0x006a, 0x1deb, 0x1deb, 0x0002, 0x006a, 0x1dfd, 0x1dfd, 0x0003, + 0x0959, 0x095c, 0x0960, 0x0001, 0x006a, 0x1e23, 0x0002, 0x006a, + 0xffff, 0x1e39, 0x0002, 0x0963, 0x0967, 0x0002, 0x006a, 0x1e6d, + 0x1e50, 0x0002, 0x006a, 0x1eba, 0x1e90, 0x0003, 0x096f, 0x0000, + 0x0972, 0x0001, 0x006a, 0x1ee7, 0x0002, 0x0975, 0x0979, 0x0002, + 0x006a, 0x1ef5, 0x1ef5, 0x0002, 0x006a, 0x1f0d, 0x1f0d, 0x0003, + // Entry 51200 - 5123F + 0x0981, 0x0000, 0x0984, 0x0001, 0x006a, 0x1f32, 0x0002, 0x0987, + 0x098b, 0x0002, 0x006a, 0x1ef5, 0x1ef5, 0x0002, 0x006a, 0x1f0d, + 0x1f0d, 0x0003, 0x0993, 0x0996, 0x099a, 0x0001, 0x006a, 0x1f39, + 0x0002, 0x006a, 0xffff, 0x1f49, 0x0002, 0x099d, 0x09a1, 0x0002, + 0x006a, 0x1f7f, 0x1f65, 0x0002, 0x006a, 0x1fc3, 0x1f9c, 0x0003, + 0x09a9, 0x0000, 0x09ac, 0x0001, 0x006a, 0x1fed, 0x0002, 0x09af, + 0x09b3, 0x0002, 0x006a, 0x1f7f, 0x1f65, 0x0002, 0x006b, 0x0000, + 0x0000, 0x0003, 0x09bb, 0x0000, 0x09be, 0x0001, 0x006a, 0x1fed, + // Entry 51240 - 5127F + 0x0002, 0x09c1, 0x09c5, 0x0002, 0x006b, 0x0037, 0x0022, 0x0002, + 0x006b, 0x0000, 0x0000, 0x0001, 0x09cb, 0x0001, 0x006b, 0x004d, + 0x0001, 0x09d0, 0x0001, 0x006b, 0x004d, 0x0001, 0x09d5, 0x0001, + 0x006b, 0x004d, 0x0004, 0x09dd, 0x09e2, 0x09e7, 0x09f6, 0x0003, + 0x0000, 0x1dc7, 0x4333, 0x432f, 0x0003, 0x006b, 0x0067, 0x0078, + 0x00af, 0x0002, 0x0000, 0x09ea, 0x0003, 0x0000, 0x09f1, 0x09ee, + 0x0001, 0x006b, 0x00dc, 0x0003, 0x006b, 0xffff, 0x0118, 0x014e, + 0x0002, 0x0bdd, 0x09f9, 0x0003, 0x09fd, 0x0b3d, 0x0a9d, 0x009e, + // Entry 51280 - 512BF + 0x006b, 0xffff, 0xffff, 0xffff, 0xffff, 0x02f7, 0x03c5, 0x0505, + 0x059a, 0x0633, 0x06d5, 0x0792, 0x083d, 0x08db, 0x0a85, 0x0b39, + 0x0be9, 0x0cd2, 0x0d79, 0x0e3f, 0x0f3e, 0x1079, 0x1187, 0x1295, + 0x1345, 0x13da, 0xffff, 0xffff, 0x14d0, 0xffff, 0x15b9, 0xffff, + 0x16ab, 0x1744, 0x17be, 0x184e, 0xffff, 0xffff, 0x196d, 0x1a0b, + 0x1ac2, 0xffff, 0xffff, 0xffff, 0x1c05, 0xffff, 0x1cde, 0x1dd0, + 0xffff, 0x1efc, 0x1fdc, 0x20ce, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2238, 0xffff, 0xffff, 0x234b, 0x2458, 0xffff, 0xffff, 0x25f7, + // Entry 512C0 - 512FF + 0x26ed, 0x278b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x295d, 0x29f6, 0x2aaf, 0x2b6c, 0x2c05, 0xffff, 0xffff, 0x2ded, + 0xffff, 0x2ebe, 0xffff, 0xffff, 0x301a, 0xffff, 0x3186, 0xffff, + 0xffff, 0xffff, 0xffff, 0x32c3, 0xffff, 0x3375, 0x346b, 0x356a, + 0x3614, 0xffff, 0xffff, 0xffff, 0x3700, 0x37d7, 0x38b8, 0xffff, + 0xffff, 0x3a0a, 0x3b57, 0x3c2b, 0x3cc0, 0xffff, 0xffff, 0x3dd0, + 0x3e65, 0x3edf, 0xffff, 0x3fc5, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x42a7, 0x433c, 0x43bf, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 51300 - 5133F + 0xffff, 0xffff, 0xffff, 0x458c, 0xffff, 0xffff, 0x4671, 0xffff, + 0x470b, 0xffff, 0x481a, 0x48af, 0x497a, 0xffff, 0x4a23, 0x4af7, + 0xffff, 0xffff, 0xffff, 0x4c49, 0x4cf9, 0xffff, 0xffff, 0x0187, + 0x0470, 0x095b, 0x09f0, 0xffff, 0xffff, 0x30ca, 0x41ae, 0x009e, + 0x006b, 0x0201, 0x0233, 0x026f, 0x02a5, 0x032d, 0x03e8, 0x0528, + 0x05b7, 0x0653, 0x06fe, 0x07b5, 0x085d, 0x08f8, 0x0aab, 0x0b65, + 0x0c28, 0x0cfb, 0x0da5, 0x0e7e, 0x0f90, 0x10bb, 0x11c9, 0x12c1, + 0x1368, 0x1406, 0x148a, 0x14aa, 0x14fc, 0x1580, 0x15e6, 0x166c, + // Entry 51340 - 5137F + 0x16c8, 0x175e, 0x17d8, 0x187d, 0x1907, 0x193d, 0x1993, 0x1a35, + 0x1ae2, 0x1b64, 0x1b84, 0x1bd2, 0x1c32, 0x1cb8, 0x1d20, 0x1e0c, + 0x1eb0, 0x1f38, 0x201e, 0x20e8, 0x2148, 0x217b, 0x21e6, 0x2212, + 0x225e, 0x22d6, 0x230f, 0x2396, 0x24a3, 0x25a1, 0x25da, 0x2633, + 0x2713, 0x27ab, 0x2817, 0x283a, 0x2874, 0x289a, 0x28df, 0x291e, + 0x297a, 0x2a25, 0x2ad8, 0x2b89, 0x2c6e, 0x2d6c, 0x2dae, 0x2e10, + 0x2e98, 0x2efc, 0x2fa4, 0x2ff0, 0x3047, 0x314d, 0x31a6, 0x3212, + 0x3235, 0x325e, 0x3290, 0x32e6, 0x3358, 0x33b1, 0x34aa, 0x3594, + // Entry 51380 - 513BF + 0x3634, 0x36a0, 0x36c6, 0x36e0, 0x3739, 0x380c, 0x38f9, 0x39bd, + 0x39d7, 0x3a53, 0x3b8f, 0x3c4e, 0x3cec, 0x3d70, 0x3d90, 0x3df3, + 0x3e7f, 0x3f0b, 0x3f8f, 0x402a, 0x4133, 0x4162, 0x4182, 0x425e, + 0x4287, 0x42ca, 0x4359, 0x43dc, 0x4458, 0x447e, 0x44c0, 0x44f0, + 0x4529, 0x454f, 0x456f, 0x45a6, 0x461c, 0x464b, 0x468e, 0x46f4, + 0x474c, 0x47fa, 0x483d, 0x48e4, 0x4997, 0x49fd, 0x4a5b, 0x4b29, + 0x4bb9, 0x4bdf, 0x4c06, 0x4c75, 0x4d34, 0x2565, 0x3b11, 0x01a1, + 0x0493, 0x097e, 0x0a13, 0xffff, 0x2fd6, 0x30e7, 0x41da, 0x009e, + // Entry 513C0 - 513FF + 0x006b, 0xffff, 0xffff, 0xffff, 0xffff, 0x037f, 0x0427, 0x0567, + 0x05f0, 0x068f, 0x0743, 0x07f4, 0x08a2, 0x0931, 0x0aed, 0x0bad, + 0x0c83, 0x0d40, 0x0ded, 0x0ed9, 0x1001, 0x111c, 0x122a, 0x1309, + 0x13a7, 0x144e, 0xffff, 0xffff, 0x1544, 0xffff, 0x162f, 0xffff, + 0x1701, 0x1794, 0x180e, 0x18c8, 0xffff, 0xffff, 0x19d5, 0x1a7b, + 0x1b1e, 0xffff, 0xffff, 0xffff, 0x1c7b, 0xffff, 0x1d7e, 0x1e64, + 0xffff, 0x1f90, 0x207c, 0x211e, 0xffff, 0xffff, 0xffff, 0xffff, + 0x22a0, 0xffff, 0xffff, 0x23fd, 0x250a, 0xffff, 0xffff, 0x268b, + // Entry 51400 - 5143F + 0x2755, 0x27e7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x29b3, 0x2a70, 0x2b1d, 0x2bc2, 0x2cf3, 0xffff, 0xffff, 0x2e4f, + 0xffff, 0x2f56, 0xffff, 0xffff, 0x3090, 0xffff, 0x31e2, 0xffff, + 0xffff, 0xffff, 0xffff, 0x3325, 0xffff, 0x3409, 0x3505, 0x35da, + 0x3670, 0xffff, 0xffff, 0xffff, 0x378e, 0x385d, 0x3956, 0xffff, + 0xffff, 0x3ab8, 0x3be3, 0x3c8d, 0x3d34, 0xffff, 0xffff, 0x3e32, + 0x3eb5, 0x3f53, 0xffff, 0x40ab, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x4309, 0x4392, 0x4415, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 51440 - 5147F + 0xffff, 0xffff, 0xffff, 0x45dc, 0xffff, 0xffff, 0x46c7, 0xffff, + 0x47a9, 0xffff, 0x487c, 0x4935, 0x49d0, 0xffff, 0x4aaf, 0x4b77, + 0xffff, 0xffff, 0xffff, 0x4cbd, 0x4d8b, 0xffff, 0xffff, 0x01d7, + 0x04d2, 0x09bd, 0x0a52, 0xffff, 0xffff, 0x3120, 0x4222, 0x0003, + 0x0000, 0x0000, 0x0be1, 0x0042, 0x000b, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 51480 - 514BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0002, + 0x0003, 0x00e9, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000c, 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, 0x0023, 0x001d, 0x001a, + // Entry 514C0 - 514FF + 0x0020, 0x0001, 0x0006, 0x000d, 0x0001, 0x0002, 0x0010, 0x0001, + 0x0002, 0x001b, 0x0001, 0x0002, 0x0587, 0x0008, 0x002f, 0x0066, + 0x008b, 0x009f, 0x00b7, 0x00c7, 0x00d8, 0x0000, 0x0002, 0x0032, + 0x0054, 0x0003, 0x0036, 0x0000, 0x0045, 0x000d, 0x0047, 0xffff, + 0x0666, 0x2155, 0x065e, 0x2159, 0x215d, 0x2161, 0x2165, 0x2169, + 0x216d, 0x2171, 0x2175, 0x2179, 0x000d, 0x006c, 0xffff, 0x0000, + 0x0006, 0x000b, 0x0015, 0x0020, 0x0027, 0x003a, 0x0040, 0x0047, + 0x0053, 0x005a, 0x0061, 0x0002, 0x0000, 0x0057, 0x000d, 0x0018, + // Entry 51500 - 5153F + 0xffff, 0x2a2f, 0x2a33, 0x2a39, 0x2a15, 0x2a33, 0x2a33, 0x2a31, + 0x2a21, 0x2a1d, 0x2a35, 0x2a3f, 0x2a21, 0x0002, 0x0069, 0x007f, + 0x0003, 0x006d, 0x0000, 0x0076, 0x0007, 0x004d, 0x003b, 0x2012, + 0x2016, 0x201a, 0x201e, 0x2022, 0x2026, 0x0007, 0x006c, 0x0066, + 0x0070, 0x007c, 0x0084, 0x008c, 0x0099, 0x00a2, 0x0002, 0x0000, + 0x0082, 0x0007, 0x0018, 0x2a31, 0x2a17, 0x2a0b, 0x2a0d, 0x2a0d, + 0x2a39, 0x2a1d, 0x0001, 0x008d, 0x0003, 0x0091, 0x0000, 0x0098, + 0x0005, 0x0000, 0xffff, 0x1f17, 0x1f1a, 0x1f1d, 0x1f20, 0x0005, + // Entry 51540 - 5157F + 0x006c, 0xffff, 0x00ad, 0x00b8, 0x00c4, 0x00d0, 0x0001, 0x00a1, + 0x0003, 0x00a5, 0x0000, 0x00ae, 0x0002, 0x00a8, 0x00ab, 0x0001, + 0x006c, 0x00e1, 0x0001, 0x006c, 0x00eb, 0x0002, 0x00b1, 0x00b4, + 0x0001, 0x006c, 0x00e1, 0x0001, 0x006c, 0x00eb, 0x0003, 0x00c1, + 0x0000, 0x00bb, 0x0001, 0x00bd, 0x0002, 0x005d, 0x1d4d, 0x1d5e, + 0x0001, 0x00c3, 0x0002, 0x0017, 0x01f4, 0x01f7, 0x0004, 0x00d5, + 0x00cf, 0x00cc, 0x00d2, 0x0001, 0x0006, 0x015b, 0x0001, 0x0002, + 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, 0x0002, 0x08e8, 0x0004, + // Entry 51580 - 515BF + 0x00e6, 0x00e0, 0x00dd, 0x00e3, 0x0001, 0x0000, 0x0524, 0x0001, + 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, + 0x0040, 0x012a, 0x0000, 0x0000, 0x012f, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0134, 0x0000, 0x0000, 0x0139, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x013e, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 515C0 - 515FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0149, 0x0000, 0x014e, + 0x0000, 0x0000, 0x0153, 0x0000, 0x0000, 0x0158, 0x0000, 0x0000, + 0x015d, 0x0001, 0x012c, 0x0001, 0x006c, 0x00f2, 0x0001, 0x0131, + 0x0001, 0x006c, 0x00f7, 0x0001, 0x0136, 0x0001, 0x006c, 0x00fc, + 0x0001, 0x013b, 0x0001, 0x006c, 0x0101, 0x0002, 0x0141, 0x0144, + 0x0001, 0x006c, 0x0107, 0x0003, 0x006c, 0x010e, 0x0113, 0x0118, + 0x0001, 0x014b, 0x0001, 0x006c, 0x011c, 0x0001, 0x0150, 0x0001, + 0x006c, 0x0122, 0x0001, 0x0155, 0x0001, 0x005d, 0x1db2, 0x0001, + // Entry 51600 - 5163F + 0x015a, 0x0001, 0x006c, 0x0127, 0x0001, 0x015f, 0x0001, 0x0017, + 0x0227, 0x0003, 0x0004, 0x0197, 0x026a, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0038, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, 0x0027, 0x0004, + 0x0024, 0x001e, 0x001b, 0x0021, 0x0001, 0x0010, 0x0003, 0x0001, + 0x0000, 0x1e0b, 0x0001, 0x0000, 0x1e17, 0x0001, 0x001d, 0x17a0, + 0x0004, 0x0035, 0x002f, 0x002c, 0x0032, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + // Entry 51640 - 5167F + 0x03c6, 0x0008, 0x0041, 0x00a6, 0x00fd, 0x0132, 0x014a, 0x0164, + 0x0175, 0x0186, 0x0002, 0x0044, 0x0075, 0x0003, 0x0048, 0x0057, + 0x0066, 0x000d, 0x0040, 0xffff, 0x0e82, 0x0e89, 0x0e90, 0x0e97, + 0x2057, 0x0ea5, 0x0eac, 0x0eb3, 0x0eba, 0x0ec1, 0x0ec8, 0x0ecf, + 0x000d, 0x0012, 0xffff, 0x0054, 0x3a36, 0x3a8d, 0x3a90, 0x3a8d, + 0x3a4f, 0x3a4f, 0x3a90, 0x3a93, 0x3a96, 0x3a42, 0x3a5b, 0x000d, + 0x006c, 0xffff, 0x0130, 0x013b, 0x0148, 0x0151, 0x015c, 0x0163, + 0x016a, 0x0171, 0x017e, 0x018d, 0x019a, 0x01a5, 0x0003, 0x0079, + // Entry 51680 - 516BF + 0x0088, 0x0097, 0x000d, 0x0040, 0xffff, 0x0e82, 0x0e89, 0x0e90, + 0x0e97, 0x20d0, 0x20d7, 0x20de, 0x0eb3, 0x0eba, 0x0ec1, 0x0ec8, + 0x0ecf, 0x000d, 0x0012, 0xffff, 0x0054, 0x3a36, 0x3a8d, 0x3a90, + 0x3a8d, 0x3a4f, 0x3a4f, 0x3a90, 0x3a93, 0x3a96, 0x3a42, 0x3a5b, + 0x000d, 0x006c, 0xffff, 0x0130, 0x013b, 0x0148, 0x0151, 0x01b2, + 0x01b9, 0x01c0, 0x0171, 0x017e, 0x018d, 0x019a, 0x01a5, 0x0002, + 0x00a9, 0x00d3, 0x0005, 0x00af, 0x00b8, 0x00ca, 0x0000, 0x00c1, + 0x0007, 0x006c, 0x01c7, 0x01ce, 0x01d5, 0x01dc, 0x01e3, 0x01ea, + // Entry 516C0 - 516FF + 0x01f1, 0x0007, 0x0012, 0x0054, 0x3a5b, 0x3a93, 0x3a99, 0x3a9c, + 0x3a9f, 0x3aa2, 0x0007, 0x006c, 0x01c7, 0x01ce, 0x01d5, 0x01dc, + 0x01e3, 0x01ea, 0x01f1, 0x0007, 0x006c, 0x01f8, 0x0207, 0x0216, + 0x0225, 0x0236, 0x0249, 0x0254, 0x0005, 0x00d9, 0x00e2, 0x00f4, + 0x0000, 0x00eb, 0x0007, 0x006c, 0x01c7, 0x01ce, 0x01d5, 0x01dc, + 0x01e3, 0x01ea, 0x01f1, 0x0007, 0x0012, 0x0054, 0x3a5b, 0x3a93, + 0x3a99, 0x3a9c, 0x3a9f, 0x3aa2, 0x0007, 0x006c, 0x01c7, 0x01ce, + 0x01d5, 0x01dc, 0x01e3, 0x01ea, 0x01f1, 0x0007, 0x006c, 0x01f8, + // Entry 51700 - 5173F + 0x0207, 0x0216, 0x0225, 0x0236, 0x0249, 0x0254, 0x0002, 0x0100, + 0x0119, 0x0003, 0x0104, 0x010b, 0x0112, 0x0005, 0x006c, 0xffff, + 0x025f, 0x0263, 0x0267, 0x026b, 0x0005, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x0005, 0x006c, 0xffff, 0x025f, 0x0263, + 0x0267, 0x026b, 0x0003, 0x011d, 0x0124, 0x012b, 0x0005, 0x006c, + 0xffff, 0x025f, 0x0263, 0x0267, 0x026b, 0x0005, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x006c, 0xffff, 0x025f, + 0x0263, 0x0267, 0x026b, 0x0001, 0x0134, 0x0003, 0x0138, 0x0000, + // Entry 51740 - 5177F + 0x0141, 0x0002, 0x013b, 0x013e, 0x0001, 0x006c, 0x026f, 0x0001, + 0x006c, 0x027b, 0x0002, 0x0144, 0x0147, 0x0001, 0x006c, 0x026f, + 0x0001, 0x006c, 0x027b, 0x0003, 0x0159, 0x0000, 0x014e, 0x0002, + 0x0151, 0x0155, 0x0002, 0x006c, 0x0287, 0x029e, 0x0002, 0x0000, + 0x04f5, 0x3c5a, 0x0002, 0x015c, 0x0160, 0x0002, 0x006c, 0x02a5, + 0x029e, 0x0002, 0x0000, 0x04f5, 0x3c5a, 0x0004, 0x0172, 0x016c, + 0x0169, 0x016f, 0x0001, 0x0001, 0x001d, 0x0001, 0x0001, 0x002d, + 0x0001, 0x0001, 0x0037, 0x0001, 0x0015, 0x14be, 0x0004, 0x0183, + // Entry 51780 - 517BF + 0x017d, 0x017a, 0x0180, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, + 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, + 0x0194, 0x018e, 0x018b, 0x0191, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0040, 0x01d8, 0x0000, 0x0000, 0x01dd, 0x01e2, 0x01e7, 0x01ec, + 0x01f1, 0x01f6, 0x01fb, 0x0200, 0x0205, 0x020a, 0x020f, 0x0214, + 0x0000, 0x0000, 0x0000, 0x0219, 0x0224, 0x0229, 0x0000, 0x0000, + 0x0000, 0x022e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 517C0 - 517FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0233, 0x0000, 0x0238, + 0x023d, 0x0242, 0x0247, 0x024c, 0x0251, 0x0256, 0x025b, 0x0260, + 0x0265, 0x0001, 0x01da, 0x0001, 0x006c, 0x02ac, 0x0001, 0x01df, + 0x0001, 0x006c, 0x02c6, 0x0001, 0x01e4, 0x0001, 0x0065, 0x0cc2, + 0x0001, 0x01e9, 0x0001, 0x0065, 0x0cc2, 0x0001, 0x01ee, 0x0001, + 0x006c, 0x02cd, 0x0001, 0x01f3, 0x0001, 0x006c, 0x02d8, 0x0001, + // Entry 51800 - 5183F + 0x01f8, 0x0001, 0x006c, 0x02d8, 0x0001, 0x01fd, 0x0001, 0x006c, + 0x02de, 0x0001, 0x0202, 0x0001, 0x0041, 0x0050, 0x0001, 0x0207, + 0x0001, 0x0041, 0x0050, 0x0001, 0x020c, 0x0001, 0x006c, 0x02e5, + 0x0001, 0x0211, 0x0001, 0x006c, 0x02f0, 0x0001, 0x0216, 0x0001, + 0x006c, 0x02f0, 0x0002, 0x021c, 0x021f, 0x0001, 0x006c, 0x02f4, + 0x0003, 0x006c, 0x02fb, 0x0306, 0x0311, 0x0001, 0x0226, 0x0001, + 0x006c, 0x02f4, 0x0001, 0x022b, 0x0001, 0x006c, 0x02f4, 0x0001, + 0x0230, 0x0001, 0x006c, 0x031c, 0x0001, 0x0235, 0x0001, 0x006c, + // Entry 51840 - 5187F + 0x0330, 0x0001, 0x023a, 0x0001, 0x006c, 0x0348, 0x0001, 0x023f, + 0x0001, 0x006c, 0x0351, 0x0001, 0x0244, 0x0001, 0x006c, 0x0351, + 0x0001, 0x0249, 0x0001, 0x006c, 0x0357, 0x0001, 0x024e, 0x0001, + 0x006c, 0x0364, 0x0001, 0x0253, 0x0001, 0x006c, 0x0364, 0x0001, + 0x0258, 0x0001, 0x006c, 0x036c, 0x0001, 0x025d, 0x0001, 0x006c, + 0x0377, 0x0001, 0x0262, 0x0001, 0x006c, 0x0377, 0x0001, 0x0267, + 0x0001, 0x006c, 0x037f, 0x0004, 0x026f, 0x0274, 0x0279, 0x0283, + 0x0003, 0x0000, 0x1dc7, 0x4333, 0x432f, 0x0003, 0x0000, 0x1de0, + // Entry 51880 - 518BF + 0x4360, 0x4369, 0x0002, 0x0000, 0x027c, 0x0003, 0x0000, 0x0000, + 0x0280, 0x0001, 0x006c, 0x0399, 0x0002, 0x0000, 0x0286, 0x0003, + 0x028a, 0x02f9, 0x02bd, 0x0031, 0x006c, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x03cc, 0x043e, 0x04a4, 0x0504, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x058f, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 518C0 - 518FF + 0xffff, 0xffff, 0x060d, 0x06b8, 0xffff, 0x0757, 0x003a, 0x006c, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x03e6, + 0x0454, 0x04b8, 0x0525, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x05ad, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0638, 0x06df, 0xffff, + 0x077e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 51900 - 5193F + 0xffff, 0x07f6, 0x0031, 0x006c, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0415, 0x047f, 0x04e1, 0x055d, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x05e0, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0678, 0x071b, 0xffff, 0x07ba, 0x0003, 0x0004, 0x08c7, + 0x0ccc, 0x0012, 0x0017, 0x003f, 0x0138, 0x01a5, 0x0296, 0x0000, + // Entry 51940 - 5197F + 0x0303, 0x032e, 0x058d, 0x0617, 0x0689, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0716, 0x0833, 0x08a5, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0020, 0x002e, 0x0000, 0x9006, 0x0003, 0x0029, 0x0000, + 0x0024, 0x0001, 0x0026, 0x0001, 0x006c, 0x0815, 0x0001, 0x002b, + 0x0001, 0x006c, 0x0834, 0x0004, 0x003c, 0x0036, 0x0033, 0x0039, + 0x0001, 0x006c, 0x083d, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, + 0x003c, 0x0001, 0x0000, 0x2418, 0x000a, 0x004a, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0127, 0x0000, 0x0000, 0x0000, 0x00af, 0x0002, + // Entry 51980 - 519BF + 0x004d, 0x007e, 0x0003, 0x0051, 0x0060, 0x006f, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x3a06, 0x3a09, 0x3a0c, 0x0003, 0x0082, 0x0091, 0x00a0, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + // Entry 519C0 - 519FF + 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0006, 0x00b6, 0x0000, 0x0000, + 0x00c9, 0x00d1, 0x0114, 0x0001, 0x00b8, 0x0001, 0x00ba, 0x000d, + 0x006c, 0xffff, 0x0856, 0x0863, 0x0870, 0x087d, 0x088d, 0x089a, + 0x08a7, 0x08b1, 0x08be, 0x08cb, 0x08db, 0x08e2, 0x0001, 0x00cb, + // Entry 51A00 - 51A3F + 0x0001, 0x00cd, 0x0002, 0x006c, 0xffff, 0x08ef, 0x0001, 0x00d3, + 0x0001, 0x00d5, 0x003d, 0x006c, 0xffff, 0x0902, 0x091e, 0x0934, + 0x094d, 0x0966, 0x097c, 0x0992, 0x09a8, 0x09be, 0x09da, 0x09f9, + 0x0a0f, 0x0a25, 0x0a44, 0x0a5a, 0x0a70, 0x0a89, 0x0aa2, 0x0ab8, + 0x0ad1, 0x0aea, 0x0b06, 0x0b1f, 0x0b32, 0x0b48, 0x0b5e, 0x0b74, + 0x0b8d, 0x0ba6, 0x0bc2, 0x0bd8, 0x0bf1, 0x0c07, 0x0c20, 0x0c39, + 0x0c49, 0x0c5f, 0x0c78, 0x0c8e, 0x0caa, 0x0cc6, 0x0ce2, 0x0cf8, + 0x0d0e, 0x0d24, 0x0d3a, 0x0d53, 0x0d66, 0x0d7c, 0x0d98, 0x0db4, + // Entry 51A40 - 51A7F + 0x0dd0, 0x0de9, 0x0e02, 0x0e18, 0x0e2b, 0x0e41, 0x0e5a, 0x0e73, + 0x0e89, 0x0001, 0x0116, 0x0001, 0x0118, 0x000d, 0x006c, 0xffff, + 0x0ea2, 0x0eac, 0x0eb6, 0x0ec3, 0x0ed9, 0x0ee9, 0x0ef0, 0x0efa, + 0x0f04, 0x0f0e, 0x0f2a, 0x0f3a, 0x0004, 0x0135, 0x012f, 0x012c, + 0x0132, 0x0001, 0x006c, 0x0f44, 0x0001, 0x0033, 0x00ff, 0x0001, + 0x0033, 0x0108, 0x0001, 0x0033, 0x0110, 0x0001, 0x013a, 0x0002, + 0x013d, 0x0171, 0x0003, 0x0141, 0x0151, 0x0161, 0x000e, 0x006c, + 0xffff, 0x0f53, 0x0f63, 0x0f70, 0x0f86, 0x0f96, 0x0fa3, 0x0fbc, + // Entry 51A80 - 51ABF + 0x0fd5, 0x0ff1, 0x1007, 0x101a, 0x102a, 0x103a, 0x000e, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x006c, + 0xffff, 0x0f53, 0x0f63, 0x0f70, 0x0f86, 0x0f96, 0x0fa3, 0x0fbc, + 0x0fd5, 0x0ff1, 0x1007, 0x101a, 0x102a, 0x103a, 0x0003, 0x0175, + 0x0185, 0x0195, 0x000e, 0x006c, 0xffff, 0x0f53, 0x0f63, 0x0f70, + 0x0f86, 0x0f96, 0x0fa3, 0x0fbc, 0x0fd5, 0x0ff1, 0x1007, 0x101a, + 0x102a, 0x103a, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + // Entry 51AC0 - 51AFF + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, + 0x3a0c, 0x0422, 0x000e, 0x006c, 0xffff, 0x0f53, 0x0f63, 0x0f70, + 0x0f86, 0x0f96, 0x0fa3, 0x0fbc, 0x0fd5, 0x0ff1, 0x1007, 0x101a, + 0x102a, 0x103a, 0x000a, 0x01b0, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0285, 0x0000, 0x0000, 0x0000, 0x0215, 0x0002, 0x01b3, 0x01e4, + 0x0003, 0x01b7, 0x01c6, 0x01d5, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + // Entry 51B00 - 51B3F + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, + 0x3a09, 0x3a0c, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, + 0x3a0c, 0x0003, 0x01e8, 0x01f7, 0x0206, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + // Entry 51B40 - 51B7F + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, + 0x3a09, 0x3a0c, 0x0006, 0x021c, 0x0000, 0x0000, 0x0000, 0x022f, + 0x0272, 0x0001, 0x021e, 0x0001, 0x0220, 0x000d, 0x006c, 0xffff, + 0x0856, 0x0863, 0x0870, 0x087d, 0x088d, 0x089a, 0x08a7, 0x08b1, + 0x08be, 0x08cb, 0x08db, 0x08e2, 0x0001, 0x0231, 0x0001, 0x0233, + 0x003d, 0x006c, 0xffff, 0x0902, 0x091e, 0x0934, 0x094d, 0x0966, + 0x097c, 0x0992, 0x09a8, 0x09be, 0x09da, 0x09f9, 0x0a0f, 0x0a25, + 0x0a44, 0x0a5a, 0x0a70, 0x0a89, 0x0aa2, 0x0ab8, 0x0ad1, 0x0aea, + // Entry 51B80 - 51BBF + 0x0b06, 0x0b1f, 0x0b32, 0x0b48, 0x0b5e, 0x0b74, 0x0b8d, 0x0ba6, + 0x0bc2, 0x0bd8, 0x0bf1, 0x0c07, 0x0c20, 0x0c39, 0x0c49, 0x0c5f, + 0x0c78, 0x0c8e, 0x0caa, 0x0cc6, 0x0ce2, 0x0cf8, 0x0d0e, 0x0d24, + 0x0d3a, 0x0d53, 0x0d66, 0x0d7c, 0x0d98, 0x0db4, 0x0dd0, 0x0de9, + 0x0e02, 0x0e18, 0x0e2b, 0x0e41, 0x0e5a, 0x0e73, 0x0e89, 0x0001, + 0x0274, 0x0001, 0x0276, 0x000d, 0x006c, 0xffff, 0x0ea2, 0x0eac, + 0x0eb6, 0x0ec3, 0x0ed9, 0x0ee9, 0x0ef0, 0x0efa, 0x0f04, 0x0f0e, + 0x0f2a, 0x0f3a, 0x0004, 0x0293, 0x028d, 0x028a, 0x0290, 0x0001, + // Entry 51BC0 - 51BFF + 0x006c, 0x0f44, 0x0001, 0x0033, 0x00ff, 0x0001, 0x0033, 0x0108, + 0x0001, 0x0033, 0x0110, 0x0001, 0x0298, 0x0002, 0x029b, 0x02cf, + 0x0003, 0x029f, 0x02af, 0x02bf, 0x000e, 0x006c, 0xffff, 0x1047, + 0x1063, 0x1076, 0x1089, 0x109f, 0x10af, 0x10c5, 0x10db, 0x10f4, + 0x1107, 0x1114, 0x1124, 0x1134, 0x000e, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x006c, 0xffff, 0x1047, + 0x1063, 0x1076, 0x1089, 0x109f, 0x10af, 0x10c5, 0x10db, 0x10f4, + // Entry 51C00 - 51C3F + 0x1107, 0x1114, 0x1124, 0x1134, 0x0003, 0x02d3, 0x02e3, 0x02f3, + 0x000e, 0x006c, 0xffff, 0x1047, 0x1063, 0x1076, 0x1089, 0x109f, + 0x10af, 0x10c5, 0x10db, 0x10f4, 0x1107, 0x1114, 0x1124, 0x1134, + 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, + 0x000e, 0x006c, 0xffff, 0x1047, 0x1063, 0x1076, 0x1089, 0x109f, + 0x10af, 0x10c5, 0x10db, 0x10f4, 0x1107, 0x1114, 0x1124, 0x1134, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x030c, 0x0000, + // Entry 51C40 - 51C7F + 0x031d, 0x0004, 0x031a, 0x0314, 0x0311, 0x0317, 0x0001, 0x006c, + 0x083d, 0x0001, 0x006c, 0x114a, 0x0001, 0x006c, 0x1155, 0x0001, + 0x0010, 0x004c, 0x0004, 0x032b, 0x0325, 0x0322, 0x0328, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0008, 0x0337, 0x039c, 0x03f3, 0x0428, + 0x0535, 0x055a, 0x056b, 0x057c, 0x0002, 0x033a, 0x036b, 0x0003, + 0x033e, 0x034d, 0x035c, 0x000d, 0x006c, 0xffff, 0x115f, 0x1168, + 0x1171, 0x117d, 0x1189, 0x1192, 0x119e, 0x11a7, 0x11b0, 0x11b9, + // Entry 51C80 - 51CBF + 0x11c2, 0x11cb, 0x000d, 0x006c, 0xffff, 0x115f, 0x1168, 0x1171, + 0x117d, 0x1189, 0x1192, 0x119e, 0x11a7, 0x11b0, 0x11b9, 0x11c2, + 0x11cb, 0x000d, 0x006c, 0xffff, 0x11d4, 0x11e7, 0x1206, 0x1219, + 0x122c, 0x1242, 0x125b, 0x1271, 0x1287, 0x129d, 0x12b0, 0x12cc, + 0x0003, 0x036f, 0x037e, 0x038d, 0x000d, 0x006c, 0xffff, 0x115f, + 0x1168, 0x1171, 0x117d, 0x1189, 0x1192, 0x119e, 0x11a7, 0x11b0, + 0x11b9, 0x11c2, 0x11cb, 0x000d, 0x006c, 0xffff, 0x115f, 0x1168, + 0x1171, 0x117d, 0x1189, 0x1192, 0x119e, 0x11a7, 0x11b0, 0x11b9, + // Entry 51CC0 - 51CFF + 0x11c2, 0x11cb, 0x000d, 0x006c, 0xffff, 0x11d4, 0x11e7, 0x1206, + 0x1219, 0x122c, 0x1242, 0x125b, 0x1271, 0x1287, 0x129d, 0x12b0, + 0x12cc, 0x0002, 0x039f, 0x03c9, 0x0005, 0x03a5, 0x03ae, 0x03c0, + 0x0000, 0x03b7, 0x0007, 0x006c, 0x12e2, 0x12ea, 0x12ef, 0x12f4, + 0x12f9, 0x1301, 0x1306, 0x0007, 0x006c, 0x130b, 0x1312, 0x1316, + 0x131a, 0x131e, 0x1325, 0x1329, 0x0007, 0x006c, 0x12e2, 0x12ea, + 0x12ef, 0x12f4, 0x12f9, 0x1301, 0x1306, 0x0007, 0x006c, 0x132d, + 0x134c, 0x1368, 0x1384, 0x1397, 0x13b9, 0x13d2, 0x0005, 0x03cf, + // Entry 51D00 - 51D3F + 0x03d8, 0x03ea, 0x0000, 0x03e1, 0x0007, 0x006c, 0x12e2, 0x12ea, + 0x12ef, 0x12f4, 0x12f9, 0x1301, 0x1306, 0x0007, 0x006c, 0x130b, + 0x1312, 0x1316, 0x131a, 0x131e, 0x1325, 0x1329, 0x0007, 0x006c, + 0x12e2, 0x12ea, 0x12ef, 0x12f4, 0x12f9, 0x1301, 0x1306, 0x0007, + 0x006c, 0x132d, 0x134c, 0x1368, 0x1384, 0x1397, 0x13b9, 0x13d2, + 0x0002, 0x03f6, 0x040f, 0x0003, 0x03fa, 0x0401, 0x0408, 0x0005, + 0x006c, 0xffff, 0x13eb, 0x1400, 0x1415, 0x142a, 0x0005, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x006c, 0xffff, + // Entry 51D40 - 51D7F + 0x13eb, 0x1400, 0x1415, 0x142a, 0x0003, 0x0413, 0x041a, 0x0421, + 0x0005, 0x006c, 0xffff, 0x13eb, 0x1400, 0x1415, 0x142a, 0x0005, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x006c, + 0xffff, 0x13eb, 0x1400, 0x1415, 0x142a, 0x0002, 0x042b, 0x04b0, + 0x0003, 0x042f, 0x045a, 0x0485, 0x000c, 0x043f, 0x0445, 0x043c, + 0x0448, 0x044b, 0x0451, 0x0457, 0x0442, 0x0000, 0x044e, 0x0000, + 0x0454, 0x0001, 0x006c, 0x143f, 0x0001, 0x006c, 0x145b, 0x0001, + 0x006c, 0x147a, 0x0001, 0x006c, 0x148d, 0x0001, 0x006c, 0x14ac, + // Entry 51D80 - 51DBF + 0x0001, 0x006c, 0x14c8, 0x0001, 0x006c, 0x14e4, 0x0001, 0x006c, + 0x14f1, 0x0001, 0x006c, 0x150d, 0x0001, 0x006c, 0x1517, 0x000c, + 0x046a, 0x0470, 0x0467, 0x0473, 0x0476, 0x047c, 0x0482, 0x046d, + 0x0000, 0x0479, 0x0000, 0x047f, 0x0001, 0x006c, 0x143f, 0x0001, + 0x0000, 0x1f9c, 0x0001, 0x0000, 0x3d05, 0x0001, 0x0000, 0x21e4, + 0x0001, 0x006c, 0x152d, 0x0001, 0x006c, 0x147a, 0x0001, 0x006c, + 0x14e4, 0x0001, 0x006c, 0x153a, 0x0001, 0x006c, 0x150d, 0x0001, + 0x006c, 0x1517, 0x000c, 0x0495, 0x049b, 0x0492, 0x049e, 0x04a1, + // Entry 51DC0 - 51DFF + 0x04a7, 0x04ad, 0x0498, 0x0000, 0x04a4, 0x0000, 0x04aa, 0x0001, + 0x006c, 0x143f, 0x0001, 0x006c, 0x145b, 0x0001, 0x006c, 0x147a, + 0x0001, 0x006c, 0x148d, 0x0001, 0x006c, 0x14ac, 0x0001, 0x006c, + 0x14c8, 0x0001, 0x006c, 0x14e4, 0x0001, 0x006c, 0x14f1, 0x0001, + 0x006c, 0x150d, 0x0001, 0x006c, 0x1517, 0x0003, 0x04b4, 0x04df, + 0x050a, 0x000c, 0x04c4, 0x04ca, 0x04c1, 0x04cd, 0x04d0, 0x04d6, + 0x04dc, 0x04c7, 0x0000, 0x04d3, 0x0000, 0x04d9, 0x0001, 0x006c, + 0x143f, 0x0001, 0x006c, 0x145b, 0x0001, 0x006c, 0x147a, 0x0001, + // Entry 51E00 - 51E3F + 0x006c, 0x148d, 0x0001, 0x006c, 0x14ac, 0x0001, 0x006c, 0x14c8, + 0x0001, 0x006c, 0x14e4, 0x0001, 0x006c, 0x14f1, 0x0001, 0x006c, + 0x150d, 0x0001, 0x006c, 0x1517, 0x000c, 0x04ef, 0x04f5, 0x04ec, + 0x04f8, 0x04fb, 0x0501, 0x0507, 0x04f2, 0x0000, 0x04fe, 0x0000, + 0x0504, 0x0001, 0x006c, 0x143f, 0x0001, 0x006c, 0x145b, 0x0001, + 0x006c, 0x147a, 0x0001, 0x006c, 0x148d, 0x0001, 0x006c, 0x152d, + 0x0001, 0x006c, 0x1547, 0x0001, 0x006c, 0x14e4, 0x0001, 0x006c, + 0x153a, 0x0001, 0x006c, 0x150d, 0x0001, 0x006c, 0x1517, 0x000c, + // Entry 51E40 - 51E7F + 0x051a, 0x0520, 0x0517, 0x0523, 0x0526, 0x052c, 0x0532, 0x051d, + 0x0000, 0x0529, 0x0000, 0x052f, 0x0001, 0x006c, 0x143f, 0x0001, + 0x006c, 0x145b, 0x0001, 0x006c, 0x147a, 0x0001, 0x006c, 0x148d, + 0x0001, 0x006c, 0x14ac, 0x0001, 0x006c, 0x14c8, 0x0001, 0x006c, + 0x14e4, 0x0001, 0x006c, 0x14f1, 0x0001, 0x006c, 0x150d, 0x0001, + 0x006c, 0x1517, 0x0003, 0x0544, 0x054f, 0x0539, 0x0002, 0x053c, + 0x0540, 0x0002, 0x006c, 0x1566, 0x15cb, 0x0002, 0x006c, 0x159d, + 0x15f0, 0x0002, 0x0547, 0x054b, 0x0002, 0x006c, 0x1612, 0x163b, + // Entry 51E80 - 51EBF + 0x0002, 0x006c, 0x162e, 0x1644, 0x0002, 0x0552, 0x0556, 0x0002, + 0x006c, 0x164d, 0x163b, 0x0002, 0x006c, 0x162e, 0x1644, 0x0004, + 0x0568, 0x0562, 0x055f, 0x0565, 0x0001, 0x006c, 0x083d, 0x0001, + 0x006c, 0x114a, 0x0001, 0x0002, 0x003c, 0x0001, 0x0000, 0x2418, + 0x0004, 0x0579, 0x0573, 0x0570, 0x0576, 0x0001, 0x006c, 0x1663, + 0x0001, 0x006c, 0x16a3, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, + 0x0546, 0x0004, 0x058a, 0x0584, 0x0581, 0x0587, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + // Entry 51EC0 - 51EFF + 0x0000, 0x03c6, 0x0006, 0x0594, 0x0000, 0x0000, 0x0000, 0x05ff, + 0x0606, 0x0002, 0x0597, 0x05cb, 0x0003, 0x059b, 0x05ab, 0x05bb, + 0x000e, 0x006c, 0x175b, 0x16e0, 0x16f0, 0x1700, 0x1713, 0x1723, + 0x1733, 0x1748, 0x1771, 0x1784, 0x1797, 0x17a7, 0x17b7, 0x17c1, + 0x000e, 0x0000, 0x003f, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, + 0x000e, 0x006c, 0x175b, 0x16e0, 0x16f0, 0x1700, 0x1713, 0x1723, + 0x1733, 0x1748, 0x1771, 0x1784, 0x1797, 0x17a7, 0x17b7, 0x17c1, + // Entry 51F00 - 51F3F + 0x0003, 0x05cf, 0x05df, 0x05ef, 0x000e, 0x006c, 0x175b, 0x16e0, + 0x16f0, 0x1700, 0x1713, 0x1723, 0x1733, 0x1748, 0x1771, 0x1784, + 0x1797, 0x17a7, 0x17b7, 0x17c1, 0x000e, 0x0000, 0x003f, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x006c, 0x175b, 0x16e0, + 0x16f0, 0x1700, 0x1713, 0x1723, 0x1733, 0x1748, 0x1771, 0x1784, + 0x1797, 0x17a7, 0x17b7, 0x17c1, 0x0001, 0x0601, 0x0001, 0x0603, + 0x0001, 0x006c, 0x17d4, 0x0004, 0x0614, 0x060e, 0x060b, 0x0611, + // Entry 51F40 - 51F7F + 0x0001, 0x006c, 0x083d, 0x0001, 0x006c, 0x114a, 0x0001, 0x006c, + 0x1155, 0x0001, 0x0010, 0x004c, 0x0005, 0x061d, 0x0000, 0x0000, + 0x0000, 0x0682, 0x0002, 0x0620, 0x0651, 0x0003, 0x0624, 0x0633, + 0x0642, 0x000d, 0x006c, 0xffff, 0x17dd, 0x17ed, 0x1800, 0x1810, + 0x1820, 0x1830, 0x1840, 0x1856, 0x186c, 0x1882, 0x1892, 0x189f, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, + 0x006c, 0xffff, 0x17dd, 0x17ed, 0x1800, 0x1810, 0x1820, 0x1830, + // Entry 51F80 - 51FBF + 0x1840, 0x1856, 0x186c, 0x1882, 0x1892, 0x189f, 0x0003, 0x0655, + 0x0664, 0x0673, 0x000d, 0x006c, 0xffff, 0x17dd, 0x17ed, 0x1800, + 0x1810, 0x1820, 0x1830, 0x1840, 0x1856, 0x186c, 0x1882, 0x1892, + 0x189f, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, + 0x000d, 0x006c, 0xffff, 0x17dd, 0x17ed, 0x1800, 0x1810, 0x1820, + 0x1830, 0x1840, 0x1856, 0x186c, 0x1882, 0x1892, 0x189f, 0x0001, + 0x0684, 0x0001, 0x0686, 0x0001, 0x006c, 0x18b2, 0x0008, 0x0692, + // Entry 51FC0 - 51FFF + 0x0000, 0x0000, 0x0000, 0x06f7, 0x0705, 0x0000, 0x9006, 0x0002, + 0x0695, 0x06c6, 0x0003, 0x0699, 0x06a8, 0x06b7, 0x000d, 0x006c, + 0xffff, 0x18bb, 0x18cc, 0x18da, 0x18e9, 0x18f9, 0x190e, 0x1924, + 0x1932, 0x1940, 0x1954, 0x1962, 0x1979, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x006c, 0xffff, 0x198d, + 0x19a9, 0x18da, 0x18e9, 0x18f9, 0x190e, 0x19bc, 0x19cc, 0x19e2, + 0x19f8, 0x1a0b, 0x1a2d, 0x0003, 0x06ca, 0x06d9, 0x06e8, 0x000d, + // Entry 52000 - 5203F + 0x006c, 0xffff, 0x18bb, 0x18cc, 0x18da, 0x18e9, 0x18f9, 0x190e, + 0x1924, 0x1932, 0x1940, 0x1954, 0x1962, 0x1979, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x006c, 0xffff, + 0x198d, 0x19a9, 0x18da, 0x18e9, 0x18f9, 0x190e, 0x19bc, 0x19cc, + 0x19e2, 0x19f8, 0x1a0b, 0x1a2d, 0x0003, 0x0700, 0x0000, 0x06fb, + 0x0001, 0x06fd, 0x0001, 0x006c, 0x1a4c, 0x0001, 0x0702, 0x0001, + 0x006c, 0x1a7a, 0x0004, 0x0713, 0x070d, 0x070a, 0x0710, 0x0001, + // Entry 52040 - 5207F + 0x006c, 0x083d, 0x0001, 0x006c, 0x114a, 0x0001, 0x006c, 0x1155, + 0x0001, 0x0010, 0x004c, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x071f, 0x0811, 0x0000, 0x0822, 0x0001, 0x0721, 0x0001, 0x0723, + 0x00ec, 0x006c, 0x1a83, 0x1aa2, 0x1ac1, 0x1ae0, 0x1af9, 0x1b18, + 0x1b34, 0x1b4d, 0x1b66, 0x1b7f, 0x1b9b, 0x1bc3, 0x1bf9, 0x1c2c, + 0x1c5f, 0x1c98, 0x1cc5, 0x1cde, 0x1cfd, 0x1d2b, 0x1d4a, 0x1d66, + 0x1d85, 0x1d9e, 0x1db7, 0x1dd3, 0x1df5, 0x1e17, 0x1e33, 0x1e52, + 0x1e6e, 0x1e93, 0x1eb2, 0x1ed1, 0x1ef0, 0x1f09, 0x1f31, 0x1f5f, + // Entry 52080 - 520BF + 0x1f87, 0x1fa0, 0x1fb9, 0x1fd5, 0x1ffd, 0x2022, 0x2041, 0x2066, + 0x2082, 0x209e, 0x20bd, 0x20d6, 0x20fe, 0x2120, 0x213a, 0x2158, + 0x2173, 0x2194, 0x21b2, 0x21d0, 0x21f1, 0x221b, 0x2239, 0x2260, + 0x227b, 0x229c, 0x22b7, 0x22e1, 0x2305, 0x2320, 0x234a, 0x2368, + 0x238c, 0x23aa, 0x23c8, 0x23e3, 0x2407, 0x2422, 0x243d, 0x2458, + 0x247c, 0x249d, 0x24bb, 0x24dc, 0x24fd, 0x251e, 0x253f, 0x2560, + 0x257b, 0x259f, 0x25ba, 0x25d5, 0x25f6, 0x2617, 0x2635, 0x2653, + 0x2677, 0x2692, 0x26bc, 0x26d7, 0x26f5, 0x2713, 0x2734, 0x274f, + // Entry 520C0 - 520FF + 0x276d, 0x2791, 0x27ac, 0x27c7, 0x27e2, 0x2812, 0x2830, 0x2854, + 0x286f, 0x2893, 0x28b7, 0x28d8, 0x28f9, 0x2929, 0x294a, 0x2968, + 0x2983, 0x29a7, 0x29cb, 0x29e9, 0x2a07, 0x2a22, 0x2a49, 0x2a76, + 0x2a91, 0x2abe, 0x2adf, 0x2afd, 0x2b21, 0x2b3c, 0x2b5d, 0x2b7e, + 0x2b99, 0x2bba, 0x2bd8, 0x2bf3, 0x2c11, 0x2c32, 0x2c50, 0x2c6b, + 0x2c89, 0x2ca7, 0x2cce, 0x2cef, 0x2d13, 0x2d34, 0x2d4f, 0x2d6a, + 0x2d88, 0x2da9, 0x2dd3, 0x2dee, 0x2e12, 0x2e3c, 0x2e5d, 0x2e7e, + 0x2ea5, 0x2ec9, 0x2ee4, 0x2f0e, 0x2f2c, 0x2f4d, 0x2f77, 0x2f92, + // Entry 52100 - 5213F + 0x2fb3, 0x2fd7, 0x2ff2, 0x300d, 0x3031, 0x304c, 0x3067, 0x308b, + 0x30ac, 0x30cd, 0x30f1, 0x311e, 0x3139, 0x315d, 0x317b, 0x3199, + 0x31b7, 0x31d5, 0x31f9, 0x3223, 0x323e, 0x325c, 0x3277, 0x3298, + 0x32c5, 0x32e6, 0x3301, 0x3325, 0x3346, 0x3367, 0x338e, 0x33a9, + 0x33ca, 0x33e8, 0x3403, 0x3421, 0x343c, 0x3466, 0x3484, 0x34a5, + 0x34c6, 0x34e7, 0x350b, 0x3535, 0x3550, 0x3574, 0x3598, 0x35bc, + 0x35da, 0x3604, 0x3628, 0x3652, 0x366d, 0x368b, 0x36ac, 0x36ca, + 0x36ee, 0x370c, 0x372a, 0x374b, 0x3766, 0x3781, 0x379f, 0x37c3, + // Entry 52140 - 5217F + 0x37e4, 0x3805, 0x3820, 0x382d, 0x3840, 0x384d, 0x0004, 0x081f, + 0x0819, 0x0816, 0x081c, 0x0001, 0x006d, 0x0000, 0x0001, 0x006d, + 0x0028, 0x0001, 0x006c, 0x1155, 0x0001, 0x001d, 0x1575, 0x0004, + 0x0830, 0x082a, 0x0827, 0x082d, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0005, 0x0839, 0x0000, 0x0000, 0x0000, 0x089e, 0x0002, 0x083c, + 0x086d, 0x0003, 0x0840, 0x084f, 0x085e, 0x000d, 0x006d, 0xffff, + 0x0039, 0x005b, 0x0083, 0x0099, 0x00a9, 0x00bf, 0x00db, 0x00eb, + // Entry 52180 - 521BF + 0x00fb, 0x010e, 0x011b, 0x0131, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x006d, 0xffff, 0x0039, 0x005b, + 0x0083, 0x0099, 0x00a9, 0x00bf, 0x00db, 0x00eb, 0x00fb, 0x010e, + 0x011b, 0x0131, 0x0003, 0x0871, 0x0880, 0x088f, 0x000d, 0x006d, + 0xffff, 0x0039, 0x005b, 0x0083, 0x0099, 0x00a9, 0x00bf, 0x00db, + 0x00eb, 0x00fb, 0x010e, 0x011b, 0x0131, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + // Entry 521C0 - 521FF + 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x006d, 0xffff, 0x0039, + 0x005b, 0x0083, 0x0099, 0x00a9, 0x00bf, 0x00db, 0x00eb, 0x00fb, + 0x010e, 0x011b, 0x0131, 0x0001, 0x08a0, 0x0001, 0x08a2, 0x0001, + 0x006d, 0x014a, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x08ae, + 0x08b6, 0x0000, 0x9006, 0x0001, 0x08b0, 0x0001, 0x08b2, 0x0002, + 0x006d, 0x016c, 0x0194, 0x0004, 0x08c4, 0x08be, 0x08bb, 0x08c1, + 0x0001, 0x006d, 0x0000, 0x0001, 0x006d, 0x0028, 0x0001, 0x006c, + 0x1155, 0x0001, 0x0010, 0x004c, 0x0042, 0x090a, 0x090f, 0x0914, + // Entry 52200 - 5223F + 0x0919, 0x092e, 0x0943, 0x0958, 0x096d, 0x097d, 0x098d, 0x09a2, + 0x09b7, 0x09cc, 0x09e5, 0x09fe, 0x0a17, 0x0a1c, 0x0a21, 0x0a26, + 0x0a3d, 0x0a54, 0x0a6b, 0x0a70, 0x0a75, 0x0a7a, 0x0a7f, 0x0a84, + 0x0a89, 0x0a8e, 0x0a93, 0x0a98, 0x0aaa, 0x0abc, 0x0ace, 0x0ae0, + 0x0af2, 0x0b04, 0x0b16, 0x0b28, 0x0b3a, 0x0b4c, 0x0b5e, 0x0b70, + 0x0b82, 0x0b94, 0x0ba6, 0x0bb8, 0x0bca, 0x0bdc, 0x0bee, 0x0c00, + 0x0c12, 0x0c17, 0x0c1c, 0x0c21, 0x0c35, 0x0c45, 0x0c55, 0x0c69, + 0x0c79, 0x0c89, 0x0c9d, 0x0cad, 0x0cbd, 0x0cc2, 0x0cc7, 0x0001, + // Entry 52240 - 5227F + 0x090c, 0x0001, 0x006d, 0x01aa, 0x0001, 0x0911, 0x0001, 0x006d, + 0x01aa, 0x0001, 0x0916, 0x0001, 0x006d, 0x01aa, 0x0003, 0x091d, + 0x0920, 0x0925, 0x0001, 0x006d, 0x01b7, 0x0003, 0x006d, 0x01be, + 0x01da, 0x01ea, 0x0002, 0x0928, 0x092b, 0x0001, 0x006d, 0x01fd, + 0x0001, 0x006d, 0x0218, 0x0003, 0x0932, 0x0935, 0x093a, 0x0001, + 0x006d, 0x01b7, 0x0003, 0x006d, 0x01be, 0x01da, 0x01ea, 0x0002, + 0x093d, 0x0940, 0x0001, 0x006d, 0x0238, 0x0001, 0x006d, 0x0218, + 0x0003, 0x0947, 0x094a, 0x094f, 0x0001, 0x006d, 0x01b7, 0x0003, + // Entry 52280 - 522BF + 0x006d, 0x01be, 0x01da, 0x01ea, 0x0002, 0x0952, 0x0955, 0x0001, + 0x006d, 0x0238, 0x0001, 0x006d, 0x0218, 0x0003, 0x095c, 0x095f, + 0x0964, 0x0001, 0x006d, 0x024a, 0x0003, 0x006d, 0x025d, 0x0285, + 0x02a1, 0x0002, 0x0967, 0x096a, 0x0001, 0x006d, 0x02c0, 0x0001, + 0x006d, 0x02e7, 0x0003, 0x0971, 0x0000, 0x0974, 0x0001, 0x006d, + 0x024a, 0x0002, 0x0977, 0x097a, 0x0001, 0x006d, 0x0313, 0x0001, + 0x006d, 0x02e7, 0x0003, 0x0981, 0x0000, 0x0984, 0x0001, 0x006d, + 0x024a, 0x0002, 0x0987, 0x098a, 0x0001, 0x006d, 0x0313, 0x0001, + // Entry 522C0 - 522FF + 0x006d, 0x02e7, 0x0003, 0x0991, 0x0994, 0x0999, 0x0001, 0x006d, + 0x0331, 0x0003, 0x006d, 0x0341, 0x0366, 0x037f, 0x0002, 0x099c, + 0x099f, 0x0001, 0x006d, 0x039b, 0x0001, 0x006d, 0x03bf, 0x0003, + 0x09a6, 0x09a9, 0x09ae, 0x0001, 0x006d, 0x0331, 0x0003, 0x006d, + 0x0341, 0x0366, 0x037f, 0x0002, 0x09b1, 0x09b4, 0x0001, 0x006d, + 0x03ee, 0x0001, 0x006d, 0x0409, 0x0003, 0x09bb, 0x09be, 0x09c3, + 0x0001, 0x006d, 0x0331, 0x0003, 0x006d, 0x0341, 0x0366, 0x037f, + 0x0002, 0x09c6, 0x09c9, 0x0001, 0x006d, 0x03ee, 0x0001, 0x006d, + // Entry 52300 - 5233F + 0x0409, 0x0004, 0x09d1, 0x09d4, 0x09d9, 0x09e2, 0x0001, 0x006d, + 0x0432, 0x0003, 0x006d, 0x0448, 0x0473, 0x0492, 0x0002, 0x09dc, + 0x09df, 0x0001, 0x006d, 0x04b4, 0x0001, 0x006d, 0x04de, 0x0001, + 0x006d, 0x0513, 0x0004, 0x09ea, 0x09ed, 0x09f2, 0x09fb, 0x0001, + 0x006d, 0x0432, 0x0003, 0x006d, 0x0448, 0x0473, 0x0492, 0x0002, + 0x09f5, 0x09f8, 0x0001, 0x006d, 0x055c, 0x0001, 0x006d, 0x057d, + 0x0001, 0x006d, 0x0513, 0x0004, 0x0a03, 0x0a06, 0x0a0b, 0x0a14, + 0x0001, 0x006d, 0x0432, 0x0003, 0x006d, 0x0448, 0x0473, 0x0492, + // Entry 52340 - 5237F + 0x0002, 0x0a0e, 0x0a11, 0x0001, 0x006d, 0x055c, 0x0001, 0x006d, + 0x057d, 0x0001, 0x006d, 0x0513, 0x0001, 0x0a19, 0x0001, 0x006d, + 0x05ac, 0x0001, 0x0a1e, 0x0001, 0x006d, 0x05ac, 0x0001, 0x0a23, + 0x0001, 0x006d, 0x05ac, 0x0003, 0x0a2a, 0x0a2d, 0x0a34, 0x0001, + 0x006d, 0x05da, 0x0005, 0x006d, 0x0606, 0x061f, 0x0632, 0x05e4, + 0x064b, 0x0002, 0x0a37, 0x0a3a, 0x0001, 0x006d, 0x0664, 0x0001, + 0x006d, 0x0682, 0x0003, 0x0a41, 0x0a44, 0x0a4b, 0x0001, 0x006d, + 0x05da, 0x0005, 0x006d, 0x0606, 0x061f, 0x0632, 0x05e4, 0x064b, + // Entry 52380 - 523BF + 0x0002, 0x0a4e, 0x0a51, 0x0001, 0x006d, 0x06ab, 0x0001, 0x006d, + 0x06c0, 0x0003, 0x0a58, 0x0a5b, 0x0a62, 0x0001, 0x006d, 0x05da, + 0x0005, 0x006d, 0x0606, 0x061f, 0x0632, 0x05e4, 0x064b, 0x0002, + 0x0a65, 0x0a68, 0x0001, 0x006d, 0x06ab, 0x0001, 0x006d, 0x06c0, + 0x0001, 0x0a6d, 0x0001, 0x006d, 0x06e3, 0x0001, 0x0a72, 0x0001, + 0x006d, 0x06e3, 0x0001, 0x0a77, 0x0001, 0x006d, 0x06e3, 0x0001, + 0x0a7c, 0x0001, 0x006d, 0x06fc, 0x0001, 0x0a81, 0x0001, 0x006d, + 0x0721, 0x0001, 0x0a86, 0x0001, 0x006d, 0x0721, 0x0001, 0x0a8b, + // Entry 523C0 - 523FF + 0x0001, 0x006d, 0x0749, 0x0001, 0x0a90, 0x0001, 0x006d, 0x0749, + 0x0001, 0x0a95, 0x0001, 0x006d, 0x0749, 0x0003, 0x0000, 0x0a9c, + 0x0aa1, 0x0003, 0x006d, 0x076b, 0x079f, 0x07c7, 0x0002, 0x0aa4, + 0x0aa7, 0x0001, 0x006d, 0x07f2, 0x0001, 0x006d, 0x083a, 0x0003, + 0x0000, 0x0aae, 0x0ab3, 0x0003, 0x006d, 0x076b, 0x079f, 0x07c7, + 0x0002, 0x0ab6, 0x0ab9, 0x0001, 0x006d, 0x07f2, 0x0001, 0x006d, + 0x083a, 0x0003, 0x0000, 0x0ac0, 0x0ac5, 0x0003, 0x006d, 0x076b, + 0x079f, 0x07c7, 0x0002, 0x0ac8, 0x0acb, 0x0001, 0x006d, 0x07f2, + // Entry 52400 - 5243F + 0x0001, 0x006d, 0x083a, 0x0003, 0x0000, 0x0ad2, 0x0ad7, 0x0003, + 0x006d, 0x0897, 0x08bf, 0x08db, 0x0002, 0x0ada, 0x0add, 0x0001, + 0x006d, 0x08fa, 0x0001, 0x006d, 0x0921, 0x0003, 0x0000, 0x0ae4, + 0x0ae9, 0x0003, 0x006d, 0x0897, 0x08bf, 0x08db, 0x0002, 0x0aec, + 0x0aef, 0x0001, 0x006d, 0x08fa, 0x0001, 0x006d, 0x0921, 0x0003, + 0x0000, 0x0af6, 0x0afb, 0x0003, 0x006d, 0x0897, 0x08bf, 0x08db, + 0x0002, 0x0afe, 0x0b01, 0x0001, 0x006d, 0x094d, 0x0001, 0x006d, + 0x0921, 0x0003, 0x0000, 0x0b08, 0x0b0d, 0x0003, 0x006d, 0x096e, + // Entry 52440 - 5247F + 0x0996, 0x09b2, 0x0002, 0x0b10, 0x0b13, 0x0001, 0x006d, 0x09d1, + 0x0001, 0x006d, 0x09f8, 0x0003, 0x0000, 0x0b1a, 0x0b1f, 0x0003, + 0x006d, 0x096e, 0x0996, 0x09b2, 0x0002, 0x0b22, 0x0b25, 0x0001, + 0x006d, 0x09d1, 0x0001, 0x006d, 0x09f8, 0x0003, 0x0000, 0x0b2c, + 0x0b31, 0x0003, 0x006d, 0x096e, 0x0996, 0x09b2, 0x0002, 0x0b34, + 0x0b37, 0x0001, 0x006d, 0x0a24, 0x0001, 0x006d, 0x09f8, 0x0003, + 0x0000, 0x0b3e, 0x0b43, 0x0003, 0x006d, 0x0a45, 0x0a64, 0x0a77, + 0x0002, 0x0b46, 0x0b49, 0x0001, 0x006d, 0x0a8d, 0x0001, 0x006d, + // Entry 52480 - 524BF + 0x0aab, 0x0003, 0x0000, 0x0b50, 0x0b55, 0x0003, 0x006d, 0x0a45, + 0x0a64, 0x0a77, 0x0002, 0x0b58, 0x0b5b, 0x0001, 0x006d, 0x0a8d, + 0x0001, 0x006d, 0x0aab, 0x0003, 0x0000, 0x0b62, 0x0b67, 0x0003, + 0x006d, 0x0a45, 0x0a64, 0x0a77, 0x0002, 0x0b6a, 0x0b6d, 0x0001, + 0x006d, 0x0a8d, 0x0001, 0x006d, 0x0aab, 0x0003, 0x0000, 0x0b74, + 0x0b79, 0x0003, 0x006d, 0x0ace, 0x0af3, 0x0b0c, 0x0002, 0x0b7c, + 0x0b7f, 0x0001, 0x006d, 0x0b28, 0x0001, 0x006d, 0x0b4c, 0x0003, + 0x0000, 0x0b86, 0x0b8b, 0x0003, 0x006d, 0x0ace, 0x0af3, 0x0b0c, + // Entry 524C0 - 524FF + 0x0002, 0x0b8e, 0x0b91, 0x0001, 0x006d, 0x0b75, 0x0001, 0x006d, + 0x0b4c, 0x0003, 0x0000, 0x0b98, 0x0b9d, 0x0003, 0x006d, 0x0ace, + 0x0af3, 0x0b0c, 0x0002, 0x0ba0, 0x0ba3, 0x0001, 0x006d, 0x0b75, + 0x0001, 0x006d, 0x0b4c, 0x0003, 0x0000, 0x0baa, 0x0baf, 0x0003, + 0x006d, 0x0b93, 0x0bb8, 0x0bd1, 0x0002, 0x0bb2, 0x0bb5, 0x0001, + 0x006d, 0x0bed, 0x0001, 0x006d, 0x0c11, 0x0003, 0x0000, 0x0bbc, + 0x0bc1, 0x0003, 0x006d, 0x0b93, 0x0bb8, 0x0bd1, 0x0002, 0x0bc4, + 0x0bc7, 0x0001, 0x006d, 0x0bed, 0x0001, 0x006d, 0x0c11, 0x0003, + // Entry 52500 - 5253F + 0x0000, 0x0bce, 0x0bd3, 0x0003, 0x006d, 0x0b93, 0x0bb8, 0x0bd1, + 0x0002, 0x0bd6, 0x0bd9, 0x0001, 0x006d, 0x0c3a, 0x0001, 0x006d, + 0x0c11, 0x0003, 0x0000, 0x0be0, 0x0be5, 0x0003, 0x006d, 0x0c58, + 0x0c7d, 0x0c96, 0x0002, 0x0be8, 0x0beb, 0x0001, 0x006d, 0x0cb2, + 0x0001, 0x006d, 0x0cd6, 0x0003, 0x0000, 0x0bf2, 0x0bf7, 0x0003, + 0x006d, 0x0c58, 0x0c7d, 0x0c96, 0x0002, 0x0bfa, 0x0bfd, 0x0001, + 0x006d, 0x0cb2, 0x0001, 0x006d, 0x0cd6, 0x0003, 0x0000, 0x0c04, + 0x0c09, 0x0003, 0x006d, 0x0c58, 0x0c7d, 0x0c96, 0x0002, 0x0c0c, + // Entry 52540 - 5257F + 0x0c0f, 0x0001, 0x006d, 0x0cff, 0x0001, 0x006d, 0x0cd6, 0x0001, + 0x0c14, 0x0001, 0x006d, 0x0d1d, 0x0001, 0x0c19, 0x0001, 0x006d, + 0x0d1d, 0x0001, 0x0c1e, 0x0001, 0x006d, 0x0d1d, 0x0003, 0x0c25, + 0x0c28, 0x0c2c, 0x0001, 0x006d, 0x0d33, 0x0002, 0x006d, 0xffff, + 0x0d49, 0x0002, 0x0c2f, 0x0c32, 0x0001, 0x006d, 0x0d68, 0x0001, + 0x006d, 0x0d92, 0x0003, 0x0c39, 0x0000, 0x0c3c, 0x0001, 0x006d, + 0x0dc7, 0x0002, 0x0c3f, 0x0c42, 0x0001, 0x006d, 0x0dcf, 0x0001, + 0x006d, 0x0de2, 0x0003, 0x0c49, 0x0000, 0x0c4c, 0x0001, 0x006d, + // Entry 52580 - 525BF + 0x0dc7, 0x0002, 0x0c4f, 0x0c52, 0x0001, 0x006d, 0x0dcf, 0x0001, + 0x006d, 0x0de2, 0x0003, 0x0c59, 0x0c5c, 0x0c60, 0x0001, 0x006d, + 0x0e04, 0x0002, 0x006d, 0xffff, 0x0e11, 0x0002, 0x0c63, 0x0c66, + 0x0001, 0x006d, 0x0e27, 0x0001, 0x006d, 0x0e48, 0x0003, 0x0c6d, + 0x0000, 0x0c70, 0x0001, 0x006d, 0x0e74, 0x0002, 0x0c73, 0x0c76, + 0x0001, 0x006d, 0x0e79, 0x0001, 0x006d, 0x0e91, 0x0003, 0x0c7d, + 0x0000, 0x0c80, 0x0001, 0x006d, 0x0e74, 0x0002, 0x0c83, 0x0c86, + 0x0001, 0x006d, 0x0e79, 0x0001, 0x006d, 0x0e91, 0x0003, 0x0c8d, + // Entry 525C0 - 525FF + 0x0c90, 0x0c94, 0x0001, 0x006d, 0x0eb7, 0x0002, 0x006d, 0xffff, + 0x0eca, 0x0002, 0x0c97, 0x0c9a, 0x0001, 0x006d, 0x0edd, 0x0001, + 0x006d, 0x0f04, 0x0003, 0x0ca1, 0x0000, 0x0ca4, 0x0001, 0x006d, + 0x0f36, 0x0002, 0x0ca7, 0x0caa, 0x0001, 0x006d, 0x0f3d, 0x0001, + 0x006d, 0x0f5b, 0x0003, 0x0cb1, 0x0000, 0x0cb4, 0x0001, 0x006d, + 0x0f36, 0x0002, 0x0cb7, 0x0cba, 0x0001, 0x006d, 0x0f3d, 0x0001, + 0x006d, 0x0f5b, 0x0001, 0x0cbf, 0x0001, 0x006d, 0x0f87, 0x0001, + 0x0cc4, 0x0001, 0x006d, 0x0f9d, 0x0001, 0x0cc9, 0x0001, 0x006d, + // Entry 52600 - 5263F + 0x0f87, 0x0004, 0x0cd1, 0x0cd6, 0x0cdb, 0x0cea, 0x0003, 0x0000, + 0x1dc7, 0x4333, 0x432f, 0x0003, 0x006d, 0x0fa7, 0x0fb7, 0x0fd9, + 0x0002, 0x0000, 0x0cde, 0x0003, 0x0000, 0x0ce5, 0x0ce2, 0x0001, + 0x006d, 0x0ffe, 0x0003, 0x006d, 0xffff, 0x1032, 0x1066, 0x0002, + 0x0000, 0x0ced, 0x0003, 0x0cf1, 0x0e31, 0x0d91, 0x009e, 0x006d, + 0xffff, 0xffff, 0xffff, 0xffff, 0x11e2, 0x12b1, 0x13d7, 0x1467, + 0x1572, 0x16a1, 0x17b5, 0x18c0, 0x1959, 0x1afd, 0x1b81, 0x1c35, + 0x1d55, 0x1e00, 0x1ea8, 0x1faa, 0x2106, 0x221a, 0x2325, 0x23e2, + // Entry 52640 - 5267F + 0x2472, 0xffff, 0xffff, 0x2555, 0xffff, 0x2631, 0xffff, 0x2717, + 0x2792, 0x2807, 0x2870, 0xffff, 0xffff, 0x297a, 0x2a1c, 0x2adf, + 0xffff, 0xffff, 0xffff, 0x2bf3, 0xffff, 0x2cd8, 0x2d7a, 0xffff, + 0x2e7d, 0x2f3a, 0x302d, 0xffff, 0xffff, 0xffff, 0xffff, 0x3187, + 0xffff, 0xffff, 0x3294, 0x337e, 0xffff, 0xffff, 0x34b3, 0x3582, + 0x3609, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x37ec, + 0x3879, 0x3924, 0x39ba, 0x3a47, 0xffff, 0xffff, 0x3ba4, 0xffff, + 0x3c44, 0xffff, 0xffff, 0x3d73, 0xffff, 0x3eca, 0xffff, 0xffff, + // Entry 52680 - 526BF + 0xffff, 0xffff, 0x400c, 0xffff, 0x40d9, 0x4208, 0x42dd, 0x4391, + 0xffff, 0xffff, 0xffff, 0x4463, 0x4529, 0x45d1, 0xffff, 0xffff, + 0x46e7, 0x482f, 0x48e3, 0x496a, 0xffff, 0xffff, 0x4a50, 0x4ae9, + 0x4b5e, 0xffff, 0x4c43, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x4eaf, 0x4f3f, 0x4fc6, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x515c, 0xffff, 0xffff, 0x521b, 0xffff, 0x52af, + 0xffff, 0x539d, 0x5436, 0x54ea, 0xffff, 0x55ae, 0x5662, 0xffff, + 0xffff, 0xffff, 0x577f, 0x5818, 0xffff, 0xffff, 0x10a3, 0x1347, + // Entry 526C0 - 526FF + 0x19dd, 0x1a6d, 0xffff, 0xffff, 0x3e12, 0x4dae, 0x009e, 0x006d, + 0x1121, 0x114f, 0x117d, 0x11b7, 0x1219, 0x12d3, 0x13f9, 0x14b3, + 0x15ca, 0x16f0, 0x1801, 0x18e5, 0x1978, 0x1b1c, 0x1baf, 0x1c81, + 0x1d80, 0x1e28, 0x1edf, 0x2011, 0x2149, 0x225a, 0x2356, 0x2404, + 0x249a, 0x2514, 0x2530, 0x257d, 0x25f7, 0x2659, 0x26f2, 0x2733, + 0x27ab, 0x281d, 0x2898, 0x2912, 0x2946, 0x29a2, 0x2a4a, 0x2afb, + 0x2b63, 0x2b7f, 0x2bbc, 0x2c24, 0x2cb0, 0x2d00, 0x2dae, 0x2e40, + 0x2eae, 0x2f7d, 0x3046, 0x30a2, 0x30d3, 0x3137, 0x315f, 0x31ac, + // Entry 52700 - 5273F + 0x3220, 0x3260, 0x32d4, 0x33bb, 0x3475, 0x3491, 0x34eb, 0x35a1, + 0x3625, 0x3687, 0x36a9, 0x36e3, 0x3708, 0x374b, 0x379d, 0x380e, + 0x38a4, 0x3949, 0x39dc, 0x3a6c, 0x3b27, 0x3b67, 0x3bc3, 0x3c28, + 0x3c72, 0x3cf8, 0x3d42, 0x3d9b, 0x3e99, 0x3eec, 0x3f5a, 0x3f7f, + 0x3fa4, 0x3fcc, 0x4034, 0x40b7, 0x4131, 0x4242, 0x430b, 0x43ad, + 0x440f, 0x4428, 0x4447, 0x4497, 0x4554, 0x4605, 0x4694, 0x46b3, + 0x472a, 0x485d, 0x4902, 0x498f, 0x4a03, 0x4a1f, 0x4a75, 0x4b02, + 0x4b89, 0x4c09, 0x4c89, 0x4d45, 0x4d6a, 0x4d89, 0x4e6b, 0x4e90, + // Entry 52740 - 5277F + 0x4ed1, 0x4f5e, 0x4fe2, 0x5044, 0x5066, 0x508b, 0x50c5, 0x50f9, + 0x511e, 0x513d, 0x5175, 0x51ce, 0x51f9, 0x5237, 0x5299, 0x52e6, + 0x537e, 0x53c2, 0x5464, 0x550f, 0x5583, 0x55dc, 0x568a, 0x5704, + 0x5723, 0x5745, 0x57a4, 0x584f, 0x345f, 0x47e3, 0x10bf, 0x1369, + 0x19ff, 0x1a8f, 0x26d3, 0x3d26, 0x3e31, 0x4ddf, 0x009e, 0x006d, + 0xffff, 0xffff, 0xffff, 0xffff, 0x1265, 0x130a, 0x1430, 0x1514, + 0x1637, 0x1754, 0x1862, 0x191f, 0x19ac, 0x1b50, 0x1bf2, 0x1ceb, + 0x1dc0, 0x1e65, 0x1f46, 0x208d, 0x21b3, 0x22c1, 0x239c, 0x243b, + // Entry 52780 - 527BF + 0x24d7, 0xffff, 0xffff, 0x25ba, 0xffff, 0x2696, 0xffff, 0x2764, + 0x27d9, 0x2848, 0x28d5, 0xffff, 0xffff, 0x29df, 0x2a8d, 0x2b2c, + 0xffff, 0xffff, 0xffff, 0x2c6a, 0xffff, 0x2d3d, 0x2df7, 0xffff, + 0x2ef4, 0x2fd5, 0x3074, 0xffff, 0xffff, 0xffff, 0xffff, 0x31e6, + 0xffff, 0xffff, 0x3329, 0x340d, 0xffff, 0xffff, 0x3538, 0x35d5, + 0x3656, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3845, + 0x38e4, 0x3983, 0x3a13, 0x3abf, 0xffff, 0xffff, 0x3bf7, 0xffff, + 0x3cb5, 0xffff, 0xffff, 0x3dd8, 0xffff, 0x3f23, 0xffff, 0xffff, + // Entry 527C0 - 527FF + 0xffff, 0xffff, 0x4071, 0xffff, 0x419e, 0x4291, 0x434e, 0x43de, + 0xffff, 0xffff, 0xffff, 0x44e0, 0x4594, 0x464e, 0xffff, 0xffff, + 0x4782, 0x48a0, 0x4936, 0x49c9, 0xffff, 0xffff, 0x4aaf, 0x4b30, + 0x4bc9, 0xffff, 0x4ce4, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x4f08, 0x4f92, 0x5013, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x51a3, 0xffff, 0xffff, 0x5268, 0xffff, 0x5332, + 0xffff, 0x53fc, 0x54a7, 0x5549, 0xffff, 0x561f, 0x56c7, 0xffff, + 0xffff, 0xffff, 0x57de, 0x589b, 0xffff, 0xffff, 0x10f0, 0x13a0, + // Entry 52800 - 5283F + 0x1a36, 0x1ac6, 0xffff, 0xffff, 0x3e65, 0x4e25, 0x0003, 0x0004, + 0x01af, 0x05e0, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000d, 0x0027, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0016, 0x0000, 0x0000, 0x0004, 0x0024, 0x001e, 0x001b, + 0x0021, 0x0001, 0x0000, 0x0489, 0x0001, 0x0000, 0x1e0b, 0x0001, + 0x001d, 0x04f7, 0x0001, 0x001d, 0x17a0, 0x0008, 0x0030, 0x0095, + 0x00ec, 0x0121, 0x0162, 0x017c, 0x018d, 0x019e, 0x0002, 0x0033, + 0x0064, 0x0003, 0x0037, 0x0046, 0x0055, 0x000d, 0x006e, 0xffff, + // Entry 52840 - 5287F + 0x0000, 0x0007, 0x000e, 0x0015, 0x001c, 0x0023, 0x002a, 0x0031, + 0x0038, 0x003f, 0x0046, 0x004d, 0x000d, 0x006e, 0xffff, 0x0054, + 0x0058, 0x005c, 0x0060, 0x0064, 0x0068, 0x006c, 0x0070, 0x005c, + 0x0054, 0x0074, 0x0078, 0x000d, 0x006e, 0xffff, 0x0000, 0x007c, + 0x0089, 0x0096, 0x00a3, 0x0023, 0x00b0, 0x00ba, 0x00c4, 0x00d4, + 0x00e1, 0x00eb, 0x0003, 0x0068, 0x0077, 0x0086, 0x000d, 0x006e, + 0xffff, 0x0000, 0x0007, 0x000e, 0x0015, 0x001c, 0x0023, 0x002a, + 0x0031, 0x0038, 0x003f, 0x0046, 0x004d, 0x000d, 0x006e, 0xffff, + // Entry 52880 - 528BF + 0x0054, 0x0058, 0x005c, 0x0060, 0x0064, 0x0068, 0x006c, 0x0070, + 0x005c, 0x0054, 0x0074, 0x0078, 0x000d, 0x006e, 0xffff, 0x0000, + 0x007c, 0x0089, 0x0096, 0x00a3, 0x0023, 0x00b0, 0x00ba, 0x00c4, + 0x00d4, 0x00e1, 0x00eb, 0x0002, 0x0098, 0x00c2, 0x0005, 0x009e, + 0x00a7, 0x00b9, 0x0000, 0x00b0, 0x0007, 0x006e, 0x00f8, 0x00ff, + 0x0106, 0x010d, 0x0114, 0x011b, 0x0122, 0x0007, 0x006e, 0x0068, + 0x0068, 0x0068, 0x0129, 0x006c, 0x012d, 0x0131, 0x0007, 0x006e, + 0x00f8, 0x00ff, 0x0106, 0x010d, 0x0114, 0x011b, 0x0122, 0x0007, + // Entry 528C0 - 528FF + 0x006e, 0x0135, 0x0142, 0x014c, 0x0156, 0x0160, 0x016a, 0x0174, + 0x0005, 0x00c8, 0x00d1, 0x00e3, 0x0000, 0x00da, 0x0007, 0x006e, + 0x00f8, 0x00ff, 0x0106, 0x010d, 0x0114, 0x011b, 0x0122, 0x0007, + 0x006e, 0x0068, 0x0068, 0x017e, 0x0129, 0x006c, 0x012d, 0x0131, + 0x0007, 0x006e, 0x00f8, 0x00ff, 0x0106, 0x010d, 0x0114, 0x011b, + 0x0122, 0x0007, 0x006e, 0x0135, 0x0142, 0x0182, 0x0156, 0x018c, + 0x016a, 0x0174, 0x0002, 0x00ef, 0x0108, 0x0003, 0x00f3, 0x00fa, + 0x0101, 0x0005, 0x006e, 0xffff, 0x0196, 0x019b, 0x01a0, 0x01a5, + // Entry 52900 - 5293F + 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, + 0x006e, 0xffff, 0x01aa, 0x01c1, 0x01d8, 0x01ef, 0x0003, 0x010c, + 0x0113, 0x011a, 0x0005, 0x006e, 0xffff, 0x0196, 0x019b, 0x01a0, + 0x01a5, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x0005, 0x006e, 0xffff, 0x01aa, 0x01c1, 0x01d8, 0x01ef, 0x0002, + 0x0124, 0x0143, 0x0003, 0x0128, 0x0131, 0x013a, 0x0002, 0x012b, + 0x012e, 0x0001, 0x006e, 0x0206, 0x0001, 0x006e, 0x021a, 0x0002, + 0x0134, 0x0137, 0x0001, 0x006e, 0x0206, 0x0001, 0x006e, 0x021a, + // Entry 52940 - 5297F + 0x0002, 0x013d, 0x0140, 0x0001, 0x006e, 0x0206, 0x0001, 0x006e, + 0x021a, 0x0003, 0x0147, 0x0150, 0x0159, 0x0002, 0x014a, 0x014d, + 0x0001, 0x006e, 0x0206, 0x0001, 0x006e, 0x021a, 0x0002, 0x0153, + 0x0156, 0x0001, 0x006e, 0x0206, 0x0001, 0x006e, 0x021a, 0x0002, + 0x015c, 0x015f, 0x0001, 0x006e, 0x0206, 0x0001, 0x006e, 0x021a, + 0x0003, 0x0171, 0x0000, 0x0166, 0x0002, 0x0169, 0x016d, 0x0002, + 0x0002, 0x0595, 0x4d29, 0x0002, 0x006e, 0x022e, 0x023a, 0x0002, + 0x0174, 0x0178, 0x0002, 0x0002, 0x0595, 0x059d, 0x0002, 0x006e, + // Entry 52980 - 529BF + 0x022e, 0x023a, 0x0004, 0x018a, 0x0184, 0x0181, 0x0187, 0x0001, + 0x006e, 0x0246, 0x0001, 0x0001, 0x002d, 0x0001, 0x001d, 0x0502, + 0x0001, 0x0015, 0x14be, 0x0004, 0x019b, 0x0195, 0x0192, 0x0198, + 0x0001, 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, 0x0002, + 0x04fe, 0x0001, 0x0002, 0x0508, 0x0004, 0x01ac, 0x01a6, 0x01a3, + 0x01a9, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0042, 0x01f2, 0x01f7, + 0x01fc, 0x0201, 0x0218, 0x022a, 0x023c, 0x0253, 0x0265, 0x0277, + // Entry 529C0 - 529FF + 0x028e, 0x02a0, 0x02b2, 0x02cd, 0x02e3, 0x02f9, 0x02fe, 0x0303, + 0x0308, 0x031f, 0x0331, 0x0343, 0x0348, 0x034d, 0x0352, 0x0357, + 0x035c, 0x0361, 0x0366, 0x036b, 0x0370, 0x0384, 0x0398, 0x03ac, + 0x03c0, 0x03d4, 0x03e8, 0x03fc, 0x0410, 0x0424, 0x0438, 0x044c, + 0x0460, 0x0474, 0x0488, 0x049c, 0x04b0, 0x04c4, 0x04d8, 0x04ec, + 0x0500, 0x0514, 0x0519, 0x051e, 0x0523, 0x0539, 0x054b, 0x055d, + 0x0573, 0x0585, 0x0597, 0x05ad, 0x05bf, 0x05d1, 0x05d6, 0x05db, + 0x0001, 0x01f4, 0x0001, 0x0002, 0x09b1, 0x0001, 0x01f9, 0x0001, + // Entry 52A00 - 52A3F + 0x0002, 0x09b1, 0x0001, 0x01fe, 0x0001, 0x0002, 0x09b1, 0x0003, + 0x0205, 0x0208, 0x020d, 0x0001, 0x0002, 0x09bb, 0x0003, 0x006e, + 0x0267, 0x026e, 0x027f, 0x0002, 0x0210, 0x0214, 0x0002, 0x006e, + 0x028c, 0x028c, 0x0002, 0x006e, 0x029b, 0x029b, 0x0003, 0x021c, + 0x0000, 0x021f, 0x0001, 0x0002, 0x09bb, 0x0002, 0x0222, 0x0226, + 0x0002, 0x006e, 0x028c, 0x028c, 0x0002, 0x006e, 0x029b, 0x02ad, + 0x0003, 0x022e, 0x0000, 0x0231, 0x0001, 0x0002, 0x09bb, 0x0002, + 0x0234, 0x0238, 0x0002, 0x006e, 0x028c, 0x028c, 0x0002, 0x006e, + // Entry 52A40 - 52A7F + 0x029b, 0x029b, 0x0003, 0x0240, 0x0243, 0x0248, 0x0001, 0x006e, + 0x02c0, 0x0003, 0x006e, 0x02ca, 0x02e1, 0x02f5, 0x0002, 0x024b, + 0x024f, 0x0002, 0x006e, 0x030c, 0x030c, 0x0002, 0x006e, 0x0321, + 0x0321, 0x0003, 0x0257, 0x0000, 0x025a, 0x0001, 0x006e, 0x02c0, + 0x0002, 0x025d, 0x0261, 0x0002, 0x006e, 0x030c, 0x030c, 0x0002, + 0x006e, 0x0321, 0x0321, 0x0003, 0x0269, 0x0000, 0x026c, 0x0001, + 0x006e, 0x02c0, 0x0002, 0x026f, 0x0273, 0x0002, 0x006e, 0x030c, + 0x030c, 0x0002, 0x006e, 0x0321, 0x0321, 0x0003, 0x027b, 0x027e, + // Entry 52A80 - 52ABF + 0x0283, 0x0001, 0x006e, 0x0339, 0x0003, 0x0000, 0x1aad, 0x4372, + 0x4386, 0x0002, 0x0286, 0x028a, 0x0002, 0x006e, 0x0343, 0x0343, + 0x0002, 0x006e, 0x0358, 0x0358, 0x0003, 0x0292, 0x0000, 0x0295, + 0x0001, 0x006e, 0x0339, 0x0002, 0x0298, 0x029c, 0x0002, 0x006e, + 0x0343, 0x0343, 0x0002, 0x006e, 0x0358, 0x0358, 0x0003, 0x02a4, + 0x0000, 0x02a7, 0x0001, 0x006e, 0x0339, 0x0002, 0x02aa, 0x02ae, + 0x0002, 0x006e, 0x0343, 0x0343, 0x0002, 0x006e, 0x0358, 0x0358, + 0x0004, 0x02b7, 0x02ba, 0x02bf, 0x02ca, 0x0001, 0x006e, 0x0370, + // Entry 52AC0 - 52AFF + 0x0003, 0x006e, 0x037a, 0x0391, 0x03a5, 0x0002, 0x02c2, 0x02c6, + 0x0002, 0x006e, 0x03bc, 0x03bc, 0x0002, 0x006e, 0x03d1, 0x03d1, + 0x0001, 0x006e, 0x03e9, 0x0004, 0x02d2, 0x0000, 0x02d5, 0x02e0, + 0x0001, 0x006e, 0x0370, 0x0002, 0x02d8, 0x02dc, 0x0002, 0x006e, + 0x03bc, 0x03bc, 0x0002, 0x006e, 0x03d1, 0x03d1, 0x0001, 0x006e, + 0x03e9, 0x0004, 0x02e8, 0x0000, 0x02eb, 0x02f6, 0x0001, 0x006e, + 0x0370, 0x0002, 0x02ee, 0x02f2, 0x0002, 0x006e, 0x03bc, 0x03bc, + 0x0002, 0x006e, 0x03d1, 0x03d1, 0x0001, 0x006e, 0x03e9, 0x0001, + // Entry 52B00 - 52B3F + 0x02fb, 0x0001, 0x006e, 0x03fe, 0x0001, 0x0300, 0x0001, 0x006e, + 0x0416, 0x0001, 0x0305, 0x0001, 0x006e, 0x0416, 0x0003, 0x030c, + 0x030f, 0x0314, 0x0001, 0x006e, 0x042d, 0x0003, 0x006e, 0x043a, + 0x0444, 0x044b, 0x0002, 0x0317, 0x031b, 0x0002, 0x006e, 0x0455, + 0x0455, 0x0002, 0x006e, 0x0455, 0x046d, 0x0003, 0x0323, 0x0000, + 0x0326, 0x0001, 0x006e, 0x042d, 0x0002, 0x0329, 0x032d, 0x0002, + 0x006e, 0x0455, 0x0455, 0x0002, 0x006e, 0x046d, 0x046d, 0x0003, + 0x0335, 0x0000, 0x0338, 0x0001, 0x006e, 0x042d, 0x0002, 0x033b, + // Entry 52B40 - 52B7F + 0x033f, 0x0002, 0x006e, 0x0455, 0x0455, 0x0002, 0x006e, 0x046d, + 0x046d, 0x0001, 0x0345, 0x0001, 0x006e, 0x0488, 0x0001, 0x034a, + 0x0001, 0x006e, 0x04a6, 0x0001, 0x034f, 0x0001, 0x006e, 0x04a6, + 0x0001, 0x0354, 0x0001, 0x006e, 0x04bf, 0x0001, 0x0359, 0x0001, + 0x006e, 0x04bf, 0x0001, 0x035e, 0x0001, 0x006e, 0x04dd, 0x0001, + 0x0363, 0x0001, 0x006e, 0x04f6, 0x0001, 0x0368, 0x0001, 0x006e, + 0x04f6, 0x0001, 0x036d, 0x0001, 0x006e, 0x0521, 0x0003, 0x0000, + 0x0374, 0x0379, 0x0003, 0x006e, 0x0540, 0x055a, 0x056e, 0x0002, + // Entry 52B80 - 52BBF + 0x037c, 0x0380, 0x0002, 0x006e, 0x0588, 0x0588, 0x0002, 0x006e, + 0x05a0, 0x05a0, 0x0003, 0x0000, 0x0388, 0x038d, 0x0003, 0x006e, + 0x0540, 0x055a, 0x056e, 0x0002, 0x0390, 0x0394, 0x0002, 0x006e, + 0x0588, 0x0588, 0x0002, 0x006e, 0x05a0, 0x05a0, 0x0003, 0x0000, + 0x039c, 0x03a1, 0x0003, 0x006e, 0x0540, 0x055a, 0x056e, 0x0002, + 0x03a4, 0x03a8, 0x0002, 0x006e, 0x0588, 0x0588, 0x0002, 0x006e, + 0x05a0, 0x05a0, 0x0003, 0x0000, 0x03b0, 0x03b5, 0x0003, 0x006e, + 0x05bb, 0x05d2, 0x05e3, 0x0002, 0x03b8, 0x03bc, 0x0002, 0x006e, + // Entry 52BC0 - 52BFF + 0x05fa, 0x05fa, 0x0002, 0x006e, 0x060f, 0x060f, 0x0003, 0x0000, + 0x03c4, 0x03c9, 0x0003, 0x006e, 0x05bb, 0x05d2, 0x05e3, 0x0002, + 0x03cc, 0x03d0, 0x0002, 0x006e, 0x05fa, 0x05fa, 0x0002, 0x006e, + 0x060f, 0x060f, 0x0003, 0x0000, 0x03d8, 0x03dd, 0x0003, 0x006e, + 0x05bb, 0x05d2, 0x05e3, 0x0002, 0x03e0, 0x03e4, 0x0002, 0x006e, + 0x05fa, 0x05fa, 0x0002, 0x006e, 0x060f, 0x060f, 0x0003, 0x0000, + 0x03ec, 0x03f1, 0x0003, 0x006e, 0x0627, 0x063e, 0x064f, 0x0002, + 0x03f4, 0x03f8, 0x0002, 0x006e, 0x0666, 0x0666, 0x0002, 0x006e, + // Entry 52C00 - 52C3F + 0x067b, 0x067b, 0x0003, 0x0000, 0x0400, 0x0405, 0x0003, 0x006e, + 0x0627, 0x063e, 0x064f, 0x0002, 0x0408, 0x040c, 0x0002, 0x006e, + 0x0666, 0x0666, 0x0002, 0x006e, 0x067b, 0x067b, 0x0003, 0x0000, + 0x0414, 0x0419, 0x0003, 0x006e, 0x0627, 0x063e, 0x064f, 0x0002, + 0x041c, 0x0420, 0x0002, 0x006e, 0x0666, 0x0666, 0x0002, 0x006e, + 0x067b, 0x067b, 0x0003, 0x0000, 0x0428, 0x042d, 0x0003, 0x006e, + 0x0693, 0x06aa, 0x06bb, 0x0002, 0x0430, 0x0434, 0x0002, 0x006e, + 0x06d2, 0x06d2, 0x0002, 0x006e, 0x06e7, 0x06e7, 0x0003, 0x0000, + // Entry 52C40 - 52C7F + 0x043c, 0x0441, 0x0003, 0x006e, 0x0693, 0x06aa, 0x06bb, 0x0002, + 0x0444, 0x0448, 0x0002, 0x006e, 0x06d2, 0x06d2, 0x0002, 0x006e, + 0x06e7, 0x06e7, 0x0003, 0x0000, 0x0450, 0x0455, 0x0003, 0x006e, + 0x0693, 0x06aa, 0x06bb, 0x0002, 0x0458, 0x045c, 0x0002, 0x006e, + 0x06d2, 0x06d2, 0x0002, 0x006e, 0x06e7, 0x06e7, 0x0003, 0x0000, + 0x0464, 0x0469, 0x0003, 0x006e, 0x06ff, 0x0716, 0x0727, 0x0002, + 0x046c, 0x0470, 0x0002, 0x006e, 0x073e, 0x073e, 0x0002, 0x006e, + 0x0753, 0x0753, 0x0003, 0x0000, 0x0478, 0x047d, 0x0003, 0x006e, + // Entry 52C80 - 52CBF + 0x06ff, 0x0716, 0x0727, 0x0002, 0x0480, 0x0484, 0x0002, 0x006e, + 0x073e, 0x073e, 0x0002, 0x006e, 0x0753, 0x0753, 0x0003, 0x0000, + 0x048c, 0x0491, 0x0003, 0x006e, 0x06ff, 0x0716, 0x0727, 0x0002, + 0x0494, 0x0498, 0x0002, 0x006e, 0x073e, 0x073e, 0x0002, 0x006e, + 0x0753, 0x0753, 0x0003, 0x0000, 0x04a0, 0x04a5, 0x0003, 0x006e, + 0x076b, 0x0782, 0x0793, 0x0002, 0x04a8, 0x04ac, 0x0002, 0x006e, + 0x07aa, 0x07aa, 0x0002, 0x006e, 0x07bf, 0x07aa, 0x0003, 0x0000, + 0x04b4, 0x04b9, 0x0003, 0x006e, 0x076b, 0x0782, 0x0793, 0x0002, + // Entry 52CC0 - 52CFF + 0x04bc, 0x04c0, 0x0002, 0x006e, 0x07aa, 0x07aa, 0x0002, 0x006e, + 0x07bf, 0x07bf, 0x0003, 0x0000, 0x04c8, 0x04cd, 0x0003, 0x006e, + 0x076b, 0x0782, 0x0793, 0x0002, 0x04d0, 0x04d4, 0x0002, 0x006e, + 0x07aa, 0x07aa, 0x0002, 0x006e, 0x07bf, 0x07bf, 0x0003, 0x0000, + 0x04dc, 0x04e1, 0x0003, 0x006e, 0x07d7, 0x07ee, 0x07ff, 0x0002, + 0x04e4, 0x04e8, 0x0002, 0x006e, 0x0816, 0x0816, 0x0002, 0x006e, + 0x082b, 0x082b, 0x0003, 0x0000, 0x04f0, 0x04f5, 0x0003, 0x006e, + 0x07d7, 0x07ee, 0x07ff, 0x0002, 0x04f8, 0x04fc, 0x0002, 0x006e, + // Entry 52D00 - 52D3F + 0x0816, 0x0816, 0x0002, 0x006e, 0x082b, 0x082b, 0x0003, 0x0000, + 0x0504, 0x0509, 0x0003, 0x006e, 0x07d7, 0x07ee, 0x07ff, 0x0002, + 0x050c, 0x0510, 0x0002, 0x006e, 0x0816, 0x0816, 0x0002, 0x006e, + 0x082b, 0x082b, 0x0001, 0x0516, 0x0001, 0x006e, 0x0843, 0x0001, + 0x051b, 0x0001, 0x006e, 0x0843, 0x0001, 0x0520, 0x0001, 0x006e, + 0x0843, 0x0003, 0x0527, 0x052a, 0x052e, 0x0001, 0x0002, 0x1366, + 0x0002, 0x006e, 0xffff, 0x085a, 0x0002, 0x0531, 0x0535, 0x0002, + 0x006e, 0x086e, 0x086e, 0x0002, 0x006e, 0x0883, 0x0883, 0x0003, + // Entry 52D40 - 52D7F + 0x053d, 0x0000, 0x0540, 0x0001, 0x0002, 0x1366, 0x0002, 0x0543, + 0x0547, 0x0002, 0x006e, 0x086e, 0x086e, 0x0002, 0x006e, 0x0883, + 0x0883, 0x0003, 0x054f, 0x0000, 0x0552, 0x0001, 0x0002, 0x1366, + 0x0002, 0x0555, 0x0559, 0x0002, 0x006e, 0x086e, 0x086e, 0x0002, + 0x006e, 0x0883, 0x0883, 0x0003, 0x0561, 0x0564, 0x0568, 0x0001, + 0x006e, 0x089b, 0x0002, 0x006e, 0xffff, 0x08a5, 0x0002, 0x056b, + 0x056f, 0x0002, 0x006e, 0x08b9, 0x08b9, 0x0002, 0x006e, 0x08ce, + 0x08ce, 0x0003, 0x0577, 0x0000, 0x057a, 0x0001, 0x006e, 0x089b, + // Entry 52D80 - 52DBF + 0x0002, 0x057d, 0x0581, 0x0002, 0x006e, 0x08b9, 0x08b9, 0x0002, + 0x006e, 0x08ce, 0x08ce, 0x0003, 0x0589, 0x0000, 0x058c, 0x0001, + 0x006e, 0x08e6, 0x0002, 0x058f, 0x0593, 0x0002, 0x006e, 0x08b9, + 0x08b9, 0x0002, 0x006e, 0x08ce, 0x08ce, 0x0003, 0x059b, 0x059e, + 0x05a2, 0x0001, 0x006e, 0x08ee, 0x0002, 0x006e, 0xffff, 0x08fb, + 0x0002, 0x05a5, 0x05a9, 0x0002, 0x006e, 0x0902, 0x0902, 0x0002, + 0x006e, 0x091a, 0x091a, 0x0003, 0x05b1, 0x0000, 0x05b4, 0x0001, + 0x006e, 0x08ee, 0x0002, 0x05b7, 0x05bb, 0x0002, 0x006e, 0x0902, + // Entry 52DC0 - 52DFF + 0x0902, 0x0002, 0x006e, 0x091a, 0x091a, 0x0003, 0x05c3, 0x0000, + 0x05c6, 0x0001, 0x006e, 0x08ee, 0x0002, 0x05c9, 0x05cd, 0x0002, + 0x006e, 0x0902, 0x0902, 0x0002, 0x006e, 0x091a, 0x091a, 0x0001, + 0x05d3, 0x0001, 0x006e, 0x0935, 0x0001, 0x05d8, 0x0001, 0x006e, + 0x0935, 0x0001, 0x05dd, 0x0001, 0x006e, 0x0935, 0x0004, 0x05e5, + 0x05ea, 0x0000, 0x0000, 0x0003, 0x0000, 0x1dc7, 0x4333, 0x432f, + 0x0003, 0x0000, 0x1de0, 0x4360, 0x4369, 0x0001, 0x0002, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x001b, + // Entry 52E00 - 52E3F + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0014, 0x0000, + 0x0000, 0x0003, 0x0000, 0x0000, 0x0018, 0x0001, 0x006e, 0x093f, + 0x0005, 0x0000, 0x0021, 0x0000, 0x0000, 0x0030, 0x0002, 0x0000, + 0x0024, 0x0002, 0x0000, 0x0027, 0x0007, 0x006e, 0x0068, 0x0068, + 0x0068, 0x0129, 0x006c, 0x012d, 0x0131, 0x0003, 0x0000, 0x0000, + 0x0034, 0x0002, 0x0037, 0x003a, 0x0001, 0x0002, 0x08ac, 0x0002, + 0x006e, 0x0960, 0x0984, 0x0003, 0x0004, 0x01f6, 0x0627, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x006e, + // Entry 52E40 - 52E7F + 0x0008, 0x0000, 0x0016, 0x0000, 0x0000, 0x0000, 0x003b, 0x004c, + 0x005d, 0x0002, 0x0019, 0x002f, 0x0003, 0x001d, 0x0000, 0x0026, + 0x0007, 0x006e, 0x09a8, 0x09ac, 0x09af, 0x09b2, 0x09b6, 0x09b9, + 0x09bc, 0x0007, 0x006e, 0x09c0, 0x09cb, 0x09d4, 0x09dd, 0x09e8, + 0x09f2, 0x09f7, 0x0002, 0x0000, 0x0032, 0x0007, 0x006e, 0x09fe, + 0x0a01, 0x0a03, 0x0a05, 0x0a08, 0x0a0a, 0x0a0c, 0x0004, 0x0049, + 0x0043, 0x0040, 0x0046, 0x0001, 0x006e, 0x0a0f, 0x0001, 0x0002, + 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x001f, 0x0b31, 0x0004, + // Entry 52E80 - 52EBF + 0x005a, 0x0054, 0x0051, 0x0057, 0x0001, 0x0000, 0x0524, 0x0001, + 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, + 0x0004, 0x006b, 0x0065, 0x0062, 0x0068, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0008, 0x0077, 0x00dc, 0x0133, 0x0168, 0x01a9, 0x01c3, + 0x01d4, 0x01e5, 0x0002, 0x007a, 0x00ab, 0x0003, 0x007e, 0x008d, + 0x009c, 0x000d, 0x006e, 0xffff, 0x0a1f, 0x0a24, 0x0a28, 0x0a2d, + 0x0a31, 0x0a36, 0x0a3c, 0x0a42, 0x0a46, 0x0a4a, 0x0a4e, 0x0a53, + // Entry 52EC0 - 52EFF + 0x000d, 0x006e, 0xffff, 0x09fe, 0x0a57, 0x0a59, 0x0a0a, 0x0a59, + 0x0a5b, 0x0a5b, 0x0a0a, 0x0a03, 0x0a5d, 0x0a5f, 0x0a01, 0x000d, + 0x006e, 0xffff, 0x0a61, 0x0a69, 0x0a28, 0x0a70, 0x0a31, 0x0a36, + 0x0a3c, 0x0a76, 0x0a7d, 0x0a87, 0x0a90, 0x0a98, 0x0003, 0x00af, + 0x00be, 0x00cd, 0x000d, 0x006e, 0xffff, 0x0a9f, 0x0aa4, 0x0aa8, + 0x0aad, 0x0ab1, 0x0ab6, 0x0abc, 0x0ac2, 0x0ac6, 0x0aca, 0x0ace, + 0x0ad3, 0x000d, 0x006e, 0xffff, 0x09fe, 0x0a57, 0x0a59, 0x0a0a, + 0x0a59, 0x0a5b, 0x0a5b, 0x0a0a, 0x0a03, 0x0a5d, 0x0a5f, 0x0a01, + // Entry 52F00 - 52F3F + 0x000d, 0x006e, 0xffff, 0x0ad7, 0x0adf, 0x0aa8, 0x0ae6, 0x0ab1, + 0x0ab6, 0x0abc, 0x0aec, 0x0af3, 0x0afd, 0x0b06, 0x0b0e, 0x0002, + 0x00df, 0x0109, 0x0005, 0x00e5, 0x00ee, 0x0100, 0x0000, 0x00f7, + 0x0007, 0x006e, 0x0b15, 0x0b1a, 0x0b1f, 0x0b24, 0x0b29, 0x0b2d, + 0x0b31, 0x0007, 0x006e, 0x09fe, 0x0a01, 0x0a03, 0x0a05, 0x0a08, + 0x0a0a, 0x0a0c, 0x0007, 0x006e, 0x09a8, 0x09ac, 0x09af, 0x09b2, + 0x09b6, 0x09b9, 0x09bc, 0x0007, 0x006e, 0x09c0, 0x09cb, 0x09d4, + 0x09dd, 0x09e8, 0x09f2, 0x09f7, 0x0005, 0x010f, 0x0118, 0x012a, + // Entry 52F40 - 52F7F + 0x0000, 0x0121, 0x0007, 0x006e, 0x0b36, 0x0b3b, 0x0b40, 0x0b45, + 0x0b4a, 0x0b4e, 0x0b52, 0x0007, 0x006e, 0x09fe, 0x0a01, 0x0a03, + 0x0a05, 0x0a08, 0x0a0a, 0x0a0c, 0x0007, 0x006e, 0x0b57, 0x0b5b, + 0x0b5e, 0x0b61, 0x0b65, 0x0b68, 0x0b6b, 0x0007, 0x006e, 0x0b6f, + 0x0b7a, 0x0b83, 0x0b8c, 0x0b97, 0x0ba1, 0x0ba6, 0x0002, 0x0136, + 0x014f, 0x0003, 0x013a, 0x0141, 0x0148, 0x0005, 0x006e, 0xffff, + 0x0bad, 0x0bb1, 0x0bb5, 0x0bb9, 0x0005, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x0005, 0x006e, 0xffff, 0x0bbd, 0x0bcd, + // Entry 52F80 - 52FBF + 0x0bdd, 0x0bed, 0x0003, 0x0153, 0x015a, 0x0161, 0x0005, 0x006e, + 0xffff, 0x0bad, 0x0bb1, 0x0bb5, 0x0bfd, 0x0005, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x006e, 0xffff, 0x0bbd, + 0x0bcd, 0x0bdd, 0x0bed, 0x0002, 0x016b, 0x018a, 0x0003, 0x016f, + 0x0178, 0x0181, 0x0002, 0x0172, 0x0175, 0x0001, 0x006e, 0x0c00, + 0x0001, 0x006e, 0x0c08, 0x0002, 0x017b, 0x017e, 0x0001, 0x006e, + 0x0c10, 0x0001, 0x006e, 0x0c15, 0x0002, 0x0184, 0x0187, 0x0001, + 0x006e, 0x0c1a, 0x0001, 0x006e, 0x0c2b, 0x0003, 0x018e, 0x0197, + // Entry 52FC0 - 52FFF + 0x01a0, 0x0002, 0x0191, 0x0194, 0x0001, 0x006e, 0x0c3c, 0x0001, + 0x006e, 0x0c43, 0x0002, 0x019a, 0x019d, 0x0001, 0x006e, 0x0c10, + 0x0001, 0x006e, 0x0c15, 0x0002, 0x01a3, 0x01a6, 0x0001, 0x006e, + 0x0c1a, 0x0001, 0x006e, 0x0c2b, 0x0003, 0x01b8, 0x0000, 0x01ad, + 0x0002, 0x01b0, 0x01b4, 0x0002, 0x006e, 0x0c4a, 0x0c6c, 0x0002, + 0x006e, 0x0c56, 0x0c78, 0x0002, 0x01bb, 0x01bf, 0x0002, 0x006e, + 0x0c86, 0x0c98, 0x0002, 0x006e, 0x0c8f, 0x0c9d, 0x0004, 0x01d1, + 0x01cb, 0x01c8, 0x01ce, 0x0001, 0x006e, 0x0ca2, 0x0001, 0x0002, + // Entry 53000 - 5303F + 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, 0x0017, 0x0538, 0x0004, + 0x01e2, 0x01dc, 0x01d9, 0x01df, 0x0001, 0x0000, 0x0524, 0x0001, + 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, + 0x0004, 0x01f3, 0x01ed, 0x01ea, 0x01f0, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0042, 0x0239, 0x023e, 0x0243, 0x0248, 0x025f, 0x0271, + 0x0283, 0x029a, 0x02ac, 0x02be, 0x02d5, 0x02e7, 0x02f9, 0x0314, + 0x032a, 0x0340, 0x0345, 0x034a, 0x034f, 0x0366, 0x0378, 0x038a, + // Entry 53040 - 5307F + 0x038f, 0x0394, 0x0399, 0x039e, 0x03a3, 0x03a8, 0x03ad, 0x03b2, + 0x03b7, 0x03cb, 0x03df, 0x03f3, 0x0407, 0x041b, 0x042f, 0x0443, + 0x0457, 0x046b, 0x047f, 0x0493, 0x04a7, 0x04bb, 0x04cf, 0x04e3, + 0x04f7, 0x050b, 0x051f, 0x0533, 0x0547, 0x055b, 0x0560, 0x0565, + 0x056a, 0x0580, 0x0592, 0x05a4, 0x05ba, 0x05cc, 0x05de, 0x05f4, + 0x0606, 0x0618, 0x061d, 0x0622, 0x0001, 0x023b, 0x0001, 0x0001, + 0x0040, 0x0001, 0x0240, 0x0001, 0x0001, 0x0040, 0x0001, 0x0245, + 0x0001, 0x0001, 0x0040, 0x0003, 0x024c, 0x024f, 0x0254, 0x0001, + // Entry 53080 - 530BF + 0x006e, 0x0cb0, 0x0003, 0x006e, 0x0cb5, 0x0cc1, 0x0cca, 0x0002, + 0x0257, 0x025b, 0x0002, 0x006e, 0x0cd6, 0x0cd6, 0x0002, 0x006e, + 0x0ce2, 0x0ce2, 0x0003, 0x0263, 0x0000, 0x0266, 0x0001, 0x006e, + 0x0cf0, 0x0002, 0x0269, 0x026d, 0x0002, 0x006e, 0x0cf4, 0x0cf4, + 0x0002, 0x006e, 0x0cff, 0x0cff, 0x0003, 0x0275, 0x0000, 0x0278, + 0x0001, 0x006e, 0x0cf0, 0x0002, 0x027b, 0x027f, 0x0002, 0x006e, + 0x0cf4, 0x0cf4, 0x0002, 0x006e, 0x0cff, 0x0cff, 0x0003, 0x0287, + 0x028a, 0x028f, 0x0001, 0x006e, 0x0d0b, 0x0003, 0x006e, 0x0d14, + // Entry 530C0 - 530FF + 0x0d25, 0x0d33, 0x0002, 0x0292, 0x0296, 0x0002, 0x006e, 0x0d44, + 0x0d44, 0x0002, 0x006e, 0x0d55, 0x0d55, 0x0003, 0x029e, 0x0000, + 0x02a1, 0x0001, 0x006e, 0x0d68, 0x0002, 0x02a4, 0x02a8, 0x0002, + 0x006e, 0x0d6f, 0x0d6f, 0x0002, 0x006e, 0x0d7e, 0x0d7e, 0x0003, + 0x02b0, 0x0000, 0x02b3, 0x0001, 0x006e, 0x0d68, 0x0002, 0x02b6, + 0x02ba, 0x0002, 0x006e, 0x0d8e, 0x0d8e, 0x0002, 0x006e, 0x0d9a, + 0x0d9a, 0x0003, 0x02c2, 0x02c5, 0x02ca, 0x0001, 0x006e, 0x0da7, + 0x0003, 0x006e, 0x0dab, 0x0db6, 0x0dbe, 0x0002, 0x02cd, 0x02d1, + // Entry 53100 - 5313F + 0x0002, 0x006e, 0x0dc9, 0x0dc9, 0x0002, 0x006e, 0x0dd4, 0x0dd4, + 0x0003, 0x02d9, 0x0000, 0x02dc, 0x0001, 0x006e, 0x0da7, 0x0002, + 0x02df, 0x02e3, 0x0002, 0x006e, 0x0dc9, 0x0dc9, 0x0002, 0x006e, + 0x0dd4, 0x0dd4, 0x0003, 0x02eb, 0x0000, 0x02ee, 0x0001, 0x006e, + 0x0da7, 0x0002, 0x02f1, 0x02f5, 0x0002, 0x006e, 0x0dc9, 0x0dc9, + 0x0002, 0x006e, 0x0dd4, 0x0dd4, 0x0004, 0x02fe, 0x0301, 0x0306, + 0x0311, 0x0001, 0x006e, 0x0de1, 0x0003, 0x006e, 0x0de7, 0x0df4, + 0x0dfe, 0x0002, 0x0309, 0x030d, 0x0002, 0x006e, 0x0e0b, 0x0e0b, + // Entry 53140 - 5317F + 0x0002, 0x006e, 0x0e18, 0x0e18, 0x0001, 0x006e, 0x0e27, 0x0004, + 0x0319, 0x0000, 0x031c, 0x0327, 0x0001, 0x006e, 0x0e33, 0x0002, + 0x031f, 0x0323, 0x0002, 0x006e, 0x0e38, 0x0e38, 0x0002, 0x006e, + 0x0e44, 0x0e44, 0x0001, 0x006e, 0x0e27, 0x0004, 0x032f, 0x0000, + 0x0332, 0x033d, 0x0001, 0x006e, 0x0e33, 0x0002, 0x0335, 0x0339, + 0x0002, 0x006e, 0x0e52, 0x0e52, 0x0002, 0x006e, 0x0e5c, 0x0e5c, + 0x0001, 0x006e, 0x0e27, 0x0001, 0x0342, 0x0001, 0x006e, 0x0e68, + 0x0001, 0x0347, 0x0001, 0x006e, 0x0e77, 0x0001, 0x034c, 0x0001, + // Entry 53180 - 531BF + 0x006e, 0x0e77, 0x0003, 0x0353, 0x0356, 0x035b, 0x0001, 0x006e, + 0x0e80, 0x0003, 0x006e, 0x0e85, 0x0e8c, 0x0e95, 0x0002, 0x035e, + 0x0362, 0x0002, 0x006e, 0x0e9b, 0x0e9b, 0x0002, 0x006e, 0x0ea7, + 0x0ea7, 0x0003, 0x036a, 0x0000, 0x036d, 0x0001, 0x006e, 0x0e80, + 0x0002, 0x0370, 0x0374, 0x0002, 0x006e, 0x0eb5, 0x0eb5, 0x0002, + 0x006e, 0x0ebf, 0x0ebf, 0x0003, 0x037c, 0x0000, 0x037f, 0x0001, + 0x006e, 0x0e80, 0x0002, 0x0382, 0x0386, 0x0002, 0x006e, 0x0eb5, + 0x0eb5, 0x0002, 0x006e, 0x0ebf, 0x0ebf, 0x0001, 0x038c, 0x0001, + // Entry 531C0 - 531FF + 0x006e, 0x0ecb, 0x0001, 0x0391, 0x0001, 0x006e, 0x0ed9, 0x0001, + 0x0396, 0x0001, 0x006e, 0x0ed9, 0x0001, 0x039b, 0x0001, 0x006e, + 0x0ee3, 0x0001, 0x03a0, 0x0001, 0x006e, 0x0ef4, 0x0001, 0x03a5, + 0x0001, 0x006e, 0x0ef4, 0x0001, 0x03aa, 0x0001, 0x006e, 0x0eff, + 0x0001, 0x03af, 0x0001, 0x006e, 0x0f14, 0x0001, 0x03b4, 0x0001, + 0x006e, 0x0f14, 0x0003, 0x0000, 0x03bb, 0x03c0, 0x0003, 0x006e, + 0x0f25, 0x0f37, 0x0f46, 0x0002, 0x03c3, 0x03c7, 0x0002, 0x006e, + 0x0f6a, 0x0f58, 0x0002, 0x006e, 0x0f79, 0x0f79, 0x0003, 0x0000, + // Entry 53200 - 5323F + 0x03cf, 0x03d4, 0x0003, 0x006e, 0x0f8d, 0x0f9a, 0x0fa4, 0x0002, + 0x03d7, 0x03db, 0x0002, 0x006e, 0x0fb1, 0x0fb1, 0x0002, 0x006e, + 0x0fbf, 0x0fbf, 0x0003, 0x0000, 0x03e3, 0x03e8, 0x0003, 0x006e, + 0x0fce, 0x0fd9, 0x0fe1, 0x0002, 0x03eb, 0x03ef, 0x0002, 0x006e, + 0x0fec, 0x0fec, 0x0002, 0x006e, 0x0ff9, 0x0ff9, 0x0003, 0x0000, + 0x03f7, 0x03fc, 0x0003, 0x006e, 0x1006, 0x1016, 0x1023, 0x0002, + 0x03ff, 0x0403, 0x0002, 0x006e, 0x1033, 0x1033, 0x0002, 0x006e, + 0x1043, 0x1043, 0x0003, 0x0000, 0x040b, 0x0410, 0x0003, 0x006e, + // Entry 53240 - 5327F + 0x1055, 0x1062, 0x106c, 0x0002, 0x0413, 0x0417, 0x0002, 0x006e, + 0x1079, 0x1079, 0x0002, 0x006e, 0x1087, 0x1087, 0x0003, 0x0000, + 0x041f, 0x0424, 0x0003, 0x006e, 0x1096, 0x10a0, 0x10a7, 0x0002, + 0x0427, 0x042b, 0x0002, 0x006e, 0x10b1, 0x10b1, 0x0002, 0x006e, + 0x10bd, 0x10bd, 0x0003, 0x0000, 0x0433, 0x0438, 0x0003, 0x006e, + 0x10c9, 0x10d9, 0x10e6, 0x0002, 0x043b, 0x043f, 0x0002, 0x006e, + 0x10f6, 0x10f6, 0x0002, 0x006e, 0x1106, 0x1106, 0x0003, 0x0000, + 0x0447, 0x044c, 0x0003, 0x006e, 0x1118, 0x1125, 0x112f, 0x0002, + // Entry 53280 - 532BF + 0x044f, 0x0453, 0x0002, 0x006e, 0x113c, 0x113c, 0x0002, 0x006e, + 0x114a, 0x114a, 0x0003, 0x0000, 0x045b, 0x0460, 0x0003, 0x006e, + 0x1159, 0x1163, 0x116a, 0x0002, 0x0463, 0x0467, 0x0002, 0x006e, + 0x1174, 0x1174, 0x0002, 0x006e, 0x1180, 0x1180, 0x0003, 0x0000, + 0x046f, 0x0474, 0x0003, 0x006e, 0x118c, 0x119e, 0x11ad, 0x0002, + 0x0477, 0x047b, 0x0002, 0x006e, 0x11bf, 0x11bf, 0x0002, 0x006e, + 0x11d1, 0x11d1, 0x0003, 0x0000, 0x0483, 0x0488, 0x0003, 0x006e, + 0x11e5, 0x11f2, 0x11fc, 0x0002, 0x048b, 0x048f, 0x0002, 0x006e, + // Entry 532C0 - 532FF + 0x1209, 0x1209, 0x0002, 0x006e, 0x1217, 0x1217, 0x0003, 0x0000, + 0x0497, 0x049c, 0x0003, 0x006e, 0x1226, 0x1231, 0x1239, 0x0002, + 0x049f, 0x04a3, 0x0002, 0x006e, 0x1244, 0x1244, 0x0002, 0x006e, + 0x1251, 0x1251, 0x0003, 0x0000, 0x04ab, 0x04b0, 0x0003, 0x006e, + 0x125e, 0x126f, 0x127d, 0x0002, 0x04b3, 0x04b7, 0x0002, 0x006e, + 0x128e, 0x128e, 0x0002, 0x006e, 0x129f, 0x129f, 0x0003, 0x0000, + 0x04bf, 0x04c4, 0x0003, 0x006e, 0x12b2, 0x12be, 0x12c7, 0x0002, + 0x04c7, 0x04cb, 0x0002, 0x006e, 0x12d3, 0x12d3, 0x0002, 0x006e, + // Entry 53300 - 5333F + 0x12e0, 0x12e0, 0x0003, 0x0000, 0x04d3, 0x04d8, 0x0003, 0x006e, + 0x12ee, 0x12f8, 0x12ff, 0x0002, 0x04db, 0x04df, 0x0002, 0x006e, + 0x1309, 0x1309, 0x0002, 0x006e, 0x1315, 0x1315, 0x0003, 0x0000, + 0x04e7, 0x04ec, 0x0003, 0x006e, 0x1321, 0x132d, 0x1336, 0x0002, + 0x04ef, 0x04f3, 0x0002, 0x006e, 0x1342, 0x1342, 0x0002, 0x006e, + 0x134e, 0x134e, 0x0003, 0x0000, 0x04fb, 0x0500, 0x0003, 0x006e, + 0x135c, 0x1367, 0x136f, 0x0002, 0x0503, 0x0507, 0x0002, 0x006e, + 0x1386, 0x137a, 0x0002, 0x006e, 0x1393, 0x1393, 0x0003, 0x0000, + // Entry 53340 - 5337F + 0x050f, 0x0514, 0x0003, 0x006e, 0x13a0, 0x13aa, 0x13b1, 0x0002, + 0x0517, 0x051b, 0x0002, 0x006e, 0x13bb, 0x13bb, 0x0002, 0x006e, + 0x13c6, 0x13c6, 0x0003, 0x0000, 0x0523, 0x0528, 0x0003, 0x006e, + 0x13d2, 0x13e0, 0x13eb, 0x0002, 0x052b, 0x052f, 0x0002, 0x006e, + 0x13f9, 0x13f9, 0x0002, 0x006e, 0x1407, 0x1407, 0x0003, 0x0000, + 0x0537, 0x053c, 0x0003, 0x006e, 0x1417, 0x1424, 0x142e, 0x0002, + 0x053f, 0x0543, 0x0002, 0x006e, 0x143b, 0x143b, 0x0002, 0x006e, + 0x1449, 0x1449, 0x0003, 0x0000, 0x054b, 0x0550, 0x0003, 0x006e, + // Entry 53380 - 533BF + 0x1458, 0x1463, 0x146b, 0x0002, 0x0553, 0x0557, 0x0002, 0x006e, + 0x1476, 0x1476, 0x0002, 0x006e, 0x1483, 0x1483, 0x0001, 0x055d, + 0x0001, 0x006e, 0x1490, 0x0001, 0x0562, 0x0001, 0x006e, 0x1490, + 0x0001, 0x0567, 0x0001, 0x006e, 0x1490, 0x0003, 0x056e, 0x0571, + 0x0575, 0x0001, 0x006e, 0x14b2, 0x0002, 0x006e, 0xffff, 0x14b8, + 0x0002, 0x0578, 0x057c, 0x0002, 0x006e, 0x14c2, 0x14c2, 0x0002, + 0x006e, 0x14cf, 0x14cf, 0x0003, 0x0584, 0x0000, 0x0587, 0x0001, + 0x006e, 0x14de, 0x0002, 0x058a, 0x058e, 0x0002, 0x006e, 0x14e3, + // Entry 533C0 - 533FF + 0x14e3, 0x0002, 0x006e, 0x14ef, 0x14ef, 0x0003, 0x0596, 0x0000, + 0x0599, 0x0001, 0x006e, 0x14de, 0x0002, 0x059c, 0x05a0, 0x0002, + 0x006e, 0x14e3, 0x14e3, 0x0002, 0x006e, 0x14ef, 0x14ef, 0x0003, + 0x05a8, 0x05ab, 0x05af, 0x0001, 0x0010, 0x0bf7, 0x0002, 0x006e, + 0xffff, 0x14fd, 0x0002, 0x05b2, 0x05b6, 0x0002, 0x006e, 0x1507, + 0x1507, 0x0002, 0x006e, 0x1514, 0x1514, 0x0003, 0x05be, 0x0000, + 0x05c1, 0x0001, 0x0001, 0x07c5, 0x0002, 0x05c4, 0x05c8, 0x0002, + 0x006e, 0x1523, 0x1523, 0x0002, 0x006e, 0x152f, 0x152f, 0x0003, + // Entry 53400 - 5343F + 0x05d0, 0x0000, 0x05d3, 0x0001, 0x0001, 0x07c5, 0x0002, 0x05d6, + 0x05da, 0x0002, 0x006e, 0x1523, 0x1523, 0x0002, 0x006e, 0x152f, + 0x152f, 0x0003, 0x05e2, 0x05e5, 0x05e9, 0x0001, 0x006e, 0x153d, + 0x0002, 0x006e, 0xffff, 0x1544, 0x0002, 0x05ec, 0x05f0, 0x0002, + 0x006e, 0x154b, 0x154b, 0x0002, 0x006e, 0x1559, 0x1559, 0x0003, + 0x05f8, 0x0000, 0x05fb, 0x0001, 0x0001, 0x083e, 0x0002, 0x05fe, + 0x0602, 0x0002, 0x006e, 0x1569, 0x1569, 0x0002, 0x006e, 0x1575, + 0x1575, 0x0003, 0x060a, 0x0000, 0x060d, 0x0001, 0x0001, 0x083e, + // Entry 53440 - 5347F + 0x0002, 0x0610, 0x0614, 0x0002, 0x006e, 0x1569, 0x1569, 0x0002, + 0x006e, 0x1575, 0x1575, 0x0001, 0x061a, 0x0001, 0x006e, 0x1583, + 0x0001, 0x061f, 0x0001, 0x006e, 0x1594, 0x0001, 0x0624, 0x0001, + 0x006e, 0x1594, 0x0004, 0x062c, 0x0631, 0x0636, 0x0645, 0x0003, + 0x0000, 0x1dc7, 0x4333, 0x432f, 0x0003, 0x006e, 0x159e, 0x15a8, + 0x15ba, 0x0002, 0x0000, 0x0639, 0x0003, 0x0000, 0x0640, 0x063d, + 0x0001, 0x006e, 0x15cd, 0x0003, 0x006e, 0xffff, 0x15ed, 0x160d, + 0x0002, 0x080e, 0x0648, 0x0003, 0x06e2, 0x0778, 0x064c, 0x0094, + // Entry 53480 - 534BF + 0x006e, 0x1627, 0x1638, 0x164d, 0x1664, 0x169a, 0x16e8, 0x1724, + 0x175f, 0x17bf, 0x1833, 0x18a5, 0xffff, 0x190f, 0x194b, 0x1996, + 0x19e1, 0x1a37, 0x1a79, 0x1ac2, 0x1b2b, 0x1ba0, 0x1c05, 0x1c60, + 0x1ca8, 0x1cf0, 0x1d23, 0x1d2f, 0x1d50, 0x1d83, 0x1dad, 0x1de0, + 0x1dfc, 0x1e33, 0x1e69, 0x1ea6, 0x1eda, 0x1ef1, 0x1f16, 0x1f5b, + 0x1f9b, 0x1fc2, 0x1fd0, 0x1fe8, 0x2010, 0x2045, 0x206a, 0x20c2, + 0x2105, 0x213c, 0x2196, 0x21e0, 0x2207, 0x221e, 0x224c, 0x2264, + 0x2281, 0x22b0, 0x22c7, 0x2301, 0x2369, 0x23b4, 0x23d0, 0x23f1, + // Entry 534C0 - 534FF + 0x2436, 0x246e, 0x2495, 0x24ae, 0x24c1, 0x24d3, 0x24ed, 0x2509, + 0x2532, 0x256b, 0x25a7, 0x25e7, 0xffff, 0x261a, 0x2635, 0x265e, + 0x268b, 0x26ad, 0x26e4, 0x26f6, 0x2719, 0x2748, 0x276b, 0x2798, + 0x27aa, 0x27ba, 0x27cf, 0x27f6, 0x2827, 0x2857, 0x28cb, 0x2927, + 0x2967, 0x2992, 0x29a0, 0x29ac, 0x29d0, 0x2a28, 0x2a7b, 0x2ab4, + 0x2abf, 0x2aee, 0x2b47, 0x2b86, 0x2bbc, 0x2beb, 0x2bf7, 0x2c24, + 0x2c60, 0x2c99, 0x2cce, 0x2cf8, 0x2d3f, 0x2d4d, 0x2d5a, 0x2d69, + 0x2d7a, 0x2d95, 0xffff, 0x2dce, 0x2df7, 0x2e0e, 0x2e1d, 0x2e33, + // Entry 53500 - 5353F + 0x2e4c, 0x2e5a, 0x2e67, 0x2e82, 0x2eb1, 0x2ec3, 0x2edd, 0x2f06, + 0x2f26, 0x2f5f, 0x2f7b, 0x2fbc, 0x2fff, 0x302c, 0x304e, 0x3093, + 0x30c4, 0x30d1, 0x30e3, 0x3109, 0x314d, 0x0094, 0x006e, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1683, 0x16d9, 0x1717, 0x174f, 0x179c, + 0x1816, 0x187e, 0xffff, 0x1904, 0x1936, 0x1986, 0x19c7, 0x1a26, + 0x1a6a, 0x1aa8, 0x1b07, 0x1b84, 0x1be9, 0x1c4e, 0x1c95, 0x1cdf, + 0xffff, 0xffff, 0x1d3f, 0xffff, 0x1d9c, 0xffff, 0x1def, 0x1e27, + 0x1e5c, 0x1e94, 0xffff, 0xffff, 0x1f05, 0x1f49, 0x1f90, 0xffff, + // Entry 53540 - 5357F + 0xffff, 0xffff, 0x1ffe, 0xffff, 0x2053, 0x20a9, 0xffff, 0x2123, + 0x217f, 0x21d5, 0xffff, 0xffff, 0xffff, 0xffff, 0x2272, 0xffff, + 0xffff, 0x22e4, 0x234c, 0xffff, 0xffff, 0x23de, 0x2428, 0x2463, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2525, 0x255d, + 0x2598, 0x25d6, 0xffff, 0xffff, 0xffff, 0x2650, 0xffff, 0x269a, + 0xffff, 0xffff, 0x270a, 0xffff, 0x275d, 0xffff, 0xffff, 0xffff, + 0xffff, 0x27e6, 0xffff, 0x2834, 0x28ae, 0x2916, 0x295a, 0xffff, + 0xffff, 0xffff, 0x29b8, 0x2a11, 0x2a67, 0xffff, 0xffff, 0x2ad3, + // Entry 53580 - 535BF + 0x2b35, 0x2b7b, 0x2bad, 0xffff, 0xffff, 0x2c14, 0x2c55, 0x2c87, + 0xffff, 0x2ce3, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2d87, + 0xffff, 0x2dc2, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2e73, 0xffff, 0xffff, 0x2ed1, 0xffff, 0x2f12, 0xffff, + 0x2f6c, 0x2faa, 0x2ff1, 0xffff, 0x303c, 0x3083, 0xffff, 0xffff, + 0xffff, 0x30fa, 0x3138, 0x0094, 0x006e, 0xffff, 0xffff, 0xffff, + 0xffff, 0x16ba, 0x1700, 0x173a, 0x177e, 0x17eb, 0x1859, 0x18d5, + 0xffff, 0x1923, 0x1969, 0x19af, 0x1a04, 0x1a51, 0x1a91, 0x1ae5, + // Entry 535C0 - 535FF + 0x1b58, 0x1bc5, 0x1c2a, 0x1c7b, 0x1cc4, 0x1d0a, 0xffff, 0xffff, + 0x1d6a, 0xffff, 0x1dc7, 0xffff, 0x1e12, 0x1e48, 0x1e7f, 0x1ec1, + 0xffff, 0xffff, 0x1f30, 0x1f76, 0x1faf, 0xffff, 0xffff, 0xffff, + 0x202b, 0xffff, 0x208a, 0x20e4, 0xffff, 0x215e, 0x21b6, 0x21f4, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2299, 0xffff, 0xffff, 0x2327, + 0x238f, 0xffff, 0xffff, 0x240d, 0x244d, 0x2482, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2548, 0x2582, 0x25bf, 0x2601, + 0xffff, 0xffff, 0xffff, 0x2675, 0xffff, 0x26c9, 0xffff, 0xffff, + // Entry 53600 - 5363F + 0x2731, 0xffff, 0x2782, 0xffff, 0xffff, 0xffff, 0xffff, 0x280f, + 0xffff, 0x2883, 0x28f1, 0x2941, 0x297d, 0xffff, 0xffff, 0xffff, + 0x29f1, 0x2a48, 0x2a98, 0xffff, 0xffff, 0x2b12, 0x2b62, 0x2b9a, + 0x2bd4, 0xffff, 0xffff, 0x2c3d, 0x2c74, 0x2cb4, 0xffff, 0x2d1c, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2dac, 0xffff, 0x2de3, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2e9a, + 0xffff, 0xffff, 0x2ef2, 0xffff, 0x2f43, 0xffff, 0x2f93, 0x2fd7, + 0x3016, 0xffff, 0x3069, 0x30ac, 0xffff, 0xffff, 0xffff, 0x3121, + // Entry 53640 - 5367F + 0x316b, 0x0003, 0x0812, 0x0926, 0x089c, 0x0088, 0x006f, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 53680 - 536BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 536C0 - 536FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0088, + 0x006f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 53700 - 5373F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 53740 - 5377F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0088, 0x006f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 53780 - 537BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 537C0 - 537FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0004, 0x0003, 0x0004, 0x01c1, 0x05e8, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0038, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, + 0x0027, 0x0004, 0x0024, 0x001e, 0x001b, 0x0021, 0x0001, 0x0002, + // Entry 53800 - 5383F + 0x0000, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, + 0x0006, 0x020f, 0x0004, 0x0035, 0x002f, 0x002c, 0x0032, 0x0001, + 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, + 0x0001, 0x0006, 0x022e, 0x0008, 0x0041, 0x00a6, 0x00fd, 0x0132, + 0x0173, 0x018e, 0x019f, 0x01b0, 0x0002, 0x0044, 0x0075, 0x0003, + 0x0048, 0x0057, 0x0066, 0x000d, 0x006f, 0xffff, 0x0009, 0x000e, + 0x0013, 0x0019, 0x001f, 0x0023, 0x0027, 0x002b, 0x0031, 0x0035, + 0x003b, 0x0040, 0x000d, 0x006e, 0xffff, 0x0a03, 0x0a57, 0x0a59, + // Entry 53840 - 5387F + 0x3188, 0x0a59, 0x0a03, 0x0a03, 0x0a0a, 0x0a03, 0x0a5d, 0x0a5f, + 0x318a, 0x000d, 0x006f, 0xffff, 0x0045, 0x004e, 0x0057, 0x005f, + 0x001f, 0x0069, 0x006e, 0x0075, 0x007e, 0x0087, 0x0091, 0x0099, + 0x0003, 0x0079, 0x0088, 0x0097, 0x000d, 0x006f, 0xffff, 0x0009, + 0x000e, 0x0013, 0x0019, 0x001f, 0x0023, 0x0027, 0x002b, 0x0031, + 0x0035, 0x003b, 0x0040, 0x000d, 0x006e, 0xffff, 0x0a03, 0x0a57, + 0x0a59, 0x3188, 0x0a59, 0x0a03, 0x0a03, 0x0a0a, 0x0a03, 0x0a5d, + 0x0a5f, 0x318a, 0x000d, 0x006f, 0xffff, 0x0045, 0x004e, 0x0057, + // Entry 53880 - 538BF + 0x005f, 0x001f, 0x0069, 0x006e, 0x0075, 0x007e, 0x0087, 0x0091, + 0x0099, 0x0002, 0x00a9, 0x00d3, 0x0005, 0x00af, 0x00b8, 0x00ca, + 0x0000, 0x00c1, 0x0007, 0x006f, 0x00a1, 0x00a6, 0x00ab, 0x00b0, + 0x00b4, 0x00ba, 0x00be, 0x0007, 0x006e, 0x0a03, 0x0a59, 0x318a, + 0x0a08, 0x318a, 0x0a57, 0x318a, 0x0007, 0x006f, 0x00a1, 0x00a6, + 0x00ab, 0x00b0, 0x00b4, 0x00ba, 0x00be, 0x0007, 0x006f, 0x00c2, + 0x00ca, 0x00d2, 0x00da, 0x00e3, 0x00f1, 0x00f9, 0x0005, 0x00d9, + 0x00e2, 0x00f4, 0x0000, 0x00eb, 0x0007, 0x006f, 0x00a1, 0x00a6, + // Entry 538C0 - 538FF + 0x00ab, 0x00b0, 0x00b4, 0x00ba, 0x00be, 0x0007, 0x006e, 0x0a03, + 0x0a59, 0x318a, 0x0a08, 0x318a, 0x0a57, 0x318a, 0x0007, 0x006f, + 0x00a1, 0x00a6, 0x00ab, 0x00b0, 0x00b4, 0x00ba, 0x00be, 0x0007, + 0x006f, 0x00c2, 0x00ca, 0x00d2, 0x00da, 0x00e3, 0x00f1, 0x00f9, + 0x0002, 0x0100, 0x0119, 0x0003, 0x0104, 0x010b, 0x0112, 0x0005, + 0x0000, 0xffff, 0x1f17, 0x1f1a, 0x1f1d, 0x1f20, 0x0005, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x006f, 0xffff, + 0x0102, 0x0111, 0x011a, 0x0125, 0x0003, 0x011d, 0x0124, 0x012b, + // Entry 53900 - 5393F + 0x0005, 0x0000, 0xffff, 0x1f17, 0x1f1a, 0x1f1d, 0x1f20, 0x0005, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x006f, + 0xffff, 0x012f, 0x0137, 0x013f, 0x0147, 0x0002, 0x0135, 0x0154, + 0x0003, 0x0139, 0x0142, 0x014b, 0x0002, 0x013c, 0x013f, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0002, 0x0145, 0x0148, + 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0002, 0x014e, + 0x0151, 0x0001, 0x006f, 0x014f, 0x0001, 0x006f, 0x015a, 0x0003, + 0x0158, 0x0161, 0x016a, 0x0002, 0x015b, 0x015e, 0x0001, 0x0000, + // Entry 53940 - 5397F + 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0002, 0x0164, 0x0167, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0002, 0x016d, 0x0170, + 0x0001, 0x006f, 0x0161, 0x0001, 0x006f, 0x0164, 0x0003, 0x0182, + 0x0188, 0x0177, 0x0002, 0x017a, 0x017e, 0x0002, 0x006f, 0x0167, + 0x0170, 0x0002, 0x0006, 0x0155, 0x457a, 0x0001, 0x0184, 0x0002, + 0x0006, 0x0155, 0x457a, 0x0001, 0x018a, 0x0002, 0x0006, 0x0155, + 0x457a, 0x0004, 0x019c, 0x0196, 0x0193, 0x0199, 0x0001, 0x0002, + 0x0025, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, + // Entry 53980 - 539BF + 0x0000, 0x2418, 0x0004, 0x01ad, 0x01a7, 0x01a4, 0x01aa, 0x0001, + 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, 0x0002, 0x04fe, + 0x0001, 0x0002, 0x0508, 0x0004, 0x01be, 0x01b8, 0x01b5, 0x01bb, + 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, + 0x022e, 0x0001, 0x0000, 0x03c6, 0x0042, 0x0204, 0x0209, 0x020e, + 0x0213, 0x0228, 0x023d, 0x0252, 0x0267, 0x027c, 0x0291, 0x02a6, + 0x02bb, 0x02d0, 0x02e9, 0x0302, 0x031b, 0x0320, 0x0325, 0x032a, + 0x0341, 0x0358, 0x036f, 0x0374, 0x0379, 0x037e, 0x0383, 0x0388, + // Entry 539C0 - 539FF + 0x038d, 0x0392, 0x0397, 0x039c, 0x03ae, 0x03c0, 0x03d2, 0x03e4, + 0x03f6, 0x0408, 0x041a, 0x042c, 0x043e, 0x0450, 0x0462, 0x0474, + 0x0486, 0x0498, 0x04aa, 0x04bc, 0x04ce, 0x04e0, 0x04f2, 0x0504, + 0x0516, 0x051b, 0x0520, 0x0525, 0x0539, 0x054d, 0x0561, 0x0575, + 0x0589, 0x059d, 0x05b1, 0x05c5, 0x05d9, 0x05de, 0x05e3, 0x0001, + 0x0206, 0x0001, 0x006f, 0x0181, 0x0001, 0x020b, 0x0001, 0x006f, + 0x0181, 0x0001, 0x0210, 0x0001, 0x006f, 0x0181, 0x0003, 0x0217, + 0x021a, 0x021f, 0x0001, 0x006f, 0x0188, 0x0003, 0x006f, 0x018e, + // Entry 53A00 - 53A3F + 0x019d, 0x01a7, 0x0002, 0x0222, 0x0225, 0x0001, 0x006f, 0x01b5, + 0x0001, 0x006f, 0x01ca, 0x0003, 0x022c, 0x022f, 0x0234, 0x0001, + 0x006f, 0x0188, 0x0003, 0x006f, 0x018e, 0x019d, 0x01a7, 0x0002, + 0x0237, 0x023a, 0x0001, 0x006f, 0x01b5, 0x0001, 0x006f, 0x01ca, + 0x0003, 0x0241, 0x0244, 0x0249, 0x0001, 0x006f, 0x0188, 0x0003, + 0x006f, 0x018e, 0x019d, 0x01a7, 0x0002, 0x024c, 0x024f, 0x0001, + 0x006f, 0x01b5, 0x0001, 0x006f, 0x01ca, 0x0003, 0x0256, 0x0259, + 0x025e, 0x0001, 0x006f, 0x01e1, 0x0003, 0x006f, 0x01e7, 0x01f6, + // Entry 53A40 - 53A7F + 0x0204, 0x0002, 0x0261, 0x0264, 0x0001, 0x006f, 0x020f, 0x0001, + 0x006f, 0x0224, 0x0003, 0x026b, 0x026e, 0x0273, 0x0001, 0x006f, + 0x01e1, 0x0003, 0x006f, 0x01e7, 0x01f6, 0x0204, 0x0002, 0x0276, + 0x0279, 0x0001, 0x006f, 0x020f, 0x0001, 0x006f, 0x0224, 0x0003, + 0x0280, 0x0283, 0x0288, 0x0001, 0x006f, 0x01e1, 0x0003, 0x006f, + 0x01e7, 0x01f6, 0x0204, 0x0002, 0x028b, 0x028e, 0x0001, 0x006f, + 0x020f, 0x0001, 0x006f, 0x0224, 0x0003, 0x0295, 0x0298, 0x029d, + 0x0001, 0x006f, 0x023b, 0x0003, 0x006f, 0x0243, 0x0254, 0x0260, + // Entry 53A80 - 53ABF + 0x0002, 0x02a0, 0x02a3, 0x0001, 0x006f, 0x0270, 0x0001, 0x006f, + 0x0287, 0x0003, 0x02aa, 0x02ad, 0x02b2, 0x0001, 0x006f, 0x023b, + 0x0003, 0x006f, 0x0243, 0x0254, 0x0260, 0x0002, 0x02b5, 0x02b8, + 0x0001, 0x006f, 0x0270, 0x0001, 0x006f, 0x0287, 0x0003, 0x02bf, + 0x02c2, 0x02c7, 0x0001, 0x006f, 0x023b, 0x0003, 0x006f, 0x0243, + 0x0254, 0x0260, 0x0002, 0x02ca, 0x02cd, 0x0001, 0x006f, 0x0270, + 0x0001, 0x006f, 0x0287, 0x0004, 0x02d5, 0x02d8, 0x02dd, 0x02e6, + 0x0001, 0x006f, 0x02a0, 0x0003, 0x006f, 0x02a5, 0x02b3, 0x02bc, + // Entry 53AC0 - 53AFF + 0x0002, 0x02e0, 0x02e3, 0x0001, 0x006f, 0x02c9, 0x0001, 0x006f, + 0x02dd, 0x0001, 0x006f, 0x02f3, 0x0004, 0x02ee, 0x02f1, 0x02f6, + 0x02ff, 0x0001, 0x006f, 0x02a0, 0x0003, 0x006f, 0x02a5, 0x02b3, + 0x02bc, 0x0002, 0x02f9, 0x02fc, 0x0001, 0x006f, 0x02c9, 0x0001, + 0x006f, 0x02dd, 0x0001, 0x006f, 0x02f3, 0x0004, 0x0307, 0x030a, + 0x030f, 0x0318, 0x0001, 0x006f, 0x02a0, 0x0003, 0x006f, 0x02a5, + 0x02b3, 0x02bc, 0x0002, 0x0312, 0x0315, 0x0001, 0x006f, 0x02c9, + 0x0001, 0x006f, 0x02dd, 0x0001, 0x006f, 0x02f3, 0x0001, 0x031d, + // Entry 53B00 - 53B3F + 0x0001, 0x006f, 0x0309, 0x0001, 0x0322, 0x0001, 0x006f, 0x031c, + 0x0001, 0x0327, 0x0001, 0x006f, 0x032e, 0x0003, 0x032e, 0x0331, + 0x0338, 0x0001, 0x006f, 0x0339, 0x0005, 0x006f, 0x034a, 0x0353, + 0x035d, 0x033f, 0x036b, 0x0002, 0x033b, 0x033e, 0x0001, 0x006f, + 0x037b, 0x0001, 0x006f, 0x0390, 0x0003, 0x0345, 0x0348, 0x034f, + 0x0001, 0x006f, 0x0339, 0x0005, 0x006f, 0x034a, 0x0353, 0x035d, + 0x033f, 0x036b, 0x0002, 0x0352, 0x0355, 0x0001, 0x006f, 0x037b, + 0x0001, 0x006f, 0x0390, 0x0003, 0x035c, 0x035f, 0x0366, 0x0001, + // Entry 53B40 - 53B7F + 0x006f, 0x0339, 0x0005, 0x006f, 0x034a, 0x0353, 0x035d, 0x033f, + 0x036b, 0x0002, 0x0369, 0x036c, 0x0001, 0x006f, 0x037b, 0x0001, + 0x006f, 0x0390, 0x0001, 0x0371, 0x0001, 0x006f, 0x03a7, 0x0001, + 0x0376, 0x0001, 0x006f, 0x03b9, 0x0001, 0x037b, 0x0001, 0x006f, + 0x03b9, 0x0001, 0x0380, 0x0001, 0x006f, 0x03ca, 0x0001, 0x0385, + 0x0001, 0x006f, 0x03db, 0x0001, 0x038a, 0x0001, 0x006f, 0x03db, + 0x0001, 0x038f, 0x0001, 0x006f, 0x03eb, 0x0001, 0x0394, 0x0001, + 0x006f, 0x03eb, 0x0001, 0x0399, 0x0001, 0x006f, 0x03eb, 0x0003, + // Entry 53B80 - 53BBF + 0x0000, 0x03a0, 0x03a5, 0x0003, 0x006f, 0x03fe, 0x040f, 0x041b, + 0x0002, 0x03a8, 0x03ab, 0x0001, 0x006f, 0x042b, 0x0001, 0x006f, + 0x0451, 0x0003, 0x0000, 0x03b2, 0x03b7, 0x0003, 0x006f, 0x03fe, + 0x040f, 0x041b, 0x0002, 0x03ba, 0x03bd, 0x0001, 0x006f, 0x0477, + 0x0001, 0x006f, 0x0496, 0x0003, 0x0000, 0x03c4, 0x03c9, 0x0003, + 0x006f, 0x03fe, 0x040f, 0x041b, 0x0002, 0x03cc, 0x03cf, 0x0001, + 0x006f, 0x0477, 0x0001, 0x006f, 0x0496, 0x0003, 0x0000, 0x03d6, + 0x03db, 0x0003, 0x006f, 0x04b5, 0x04c6, 0x04d2, 0x0002, 0x03de, + // Entry 53BC0 - 53BFF + 0x03e1, 0x0001, 0x006f, 0x04e2, 0x0001, 0x006f, 0x0508, 0x0003, + 0x0000, 0x03e8, 0x03ed, 0x0003, 0x006f, 0x04b5, 0x04c6, 0x04d2, + 0x0002, 0x03f0, 0x03f3, 0x0001, 0x006f, 0x052e, 0x0001, 0x006f, + 0x054d, 0x0003, 0x0000, 0x03fa, 0x03ff, 0x0003, 0x006f, 0x04b5, + 0x04c6, 0x04d2, 0x0002, 0x0402, 0x0405, 0x0001, 0x006f, 0x052e, + 0x0001, 0x006f, 0x054d, 0x0003, 0x0000, 0x040c, 0x0411, 0x0003, + 0x006f, 0x056c, 0x057d, 0x0589, 0x0002, 0x0414, 0x0417, 0x0001, + 0x006f, 0x0599, 0x0001, 0x006f, 0x05bf, 0x0003, 0x0000, 0x041e, + // Entry 53C00 - 53C3F + 0x0423, 0x0003, 0x006f, 0x056c, 0x057d, 0x0589, 0x0002, 0x0426, + 0x0429, 0x0001, 0x006f, 0x05e5, 0x0001, 0x006f, 0x0604, 0x0003, + 0x0000, 0x0430, 0x0435, 0x0003, 0x006f, 0x056c, 0x057d, 0x0589, + 0x0002, 0x0438, 0x043b, 0x0001, 0x006f, 0x05e5, 0x0001, 0x006f, + 0x0604, 0x0003, 0x0000, 0x0442, 0x0447, 0x0003, 0x006f, 0x0623, + 0x0635, 0x0642, 0x0002, 0x044a, 0x044d, 0x0001, 0x006f, 0x0653, + 0x0001, 0x006f, 0x067a, 0x0003, 0x0000, 0x0454, 0x0459, 0x0003, + 0x006f, 0x0623, 0x0635, 0x0642, 0x0002, 0x045c, 0x045f, 0x0001, + // Entry 53C40 - 53C7F + 0x006f, 0x06a1, 0x0001, 0x006f, 0x06c1, 0x0003, 0x0000, 0x0466, + 0x046b, 0x0003, 0x006f, 0x0623, 0x0635, 0x0642, 0x0002, 0x046e, + 0x0471, 0x0001, 0x006f, 0x06a1, 0x0001, 0x006f, 0x06c1, 0x0003, + 0x0000, 0x0478, 0x047d, 0x0003, 0x006f, 0x06e1, 0x06f8, 0x070a, + 0x0002, 0x0480, 0x0483, 0x0001, 0x006f, 0x0720, 0x0001, 0x006f, + 0x074c, 0x0003, 0x0000, 0x048a, 0x048f, 0x0003, 0x006f, 0x06e1, + 0x06f8, 0x070a, 0x0002, 0x0492, 0x0495, 0x0001, 0x006f, 0x0778, + 0x0001, 0x006f, 0x079d, 0x0003, 0x0000, 0x049c, 0x04a1, 0x0003, + // Entry 53C80 - 53CBF + 0x006f, 0x06e1, 0x06f8, 0x070a, 0x0002, 0x04a4, 0x04a7, 0x0001, + 0x006f, 0x0778, 0x0001, 0x006f, 0x079d, 0x0003, 0x0000, 0x04ae, + 0x04b3, 0x0003, 0x006f, 0x07c2, 0x07d3, 0x07df, 0x0002, 0x04b6, + 0x04b9, 0x0001, 0x006f, 0x07ef, 0x0001, 0x006f, 0x0815, 0x0003, + 0x0000, 0x04c0, 0x04c5, 0x0003, 0x006f, 0x07c2, 0x07d3, 0x07df, + 0x0002, 0x04c8, 0x04cb, 0x0001, 0x006f, 0x083b, 0x0001, 0x006f, + 0x085a, 0x0003, 0x0000, 0x04d2, 0x04d7, 0x0003, 0x006f, 0x07c2, + 0x07d3, 0x07df, 0x0002, 0x04da, 0x04dd, 0x0001, 0x006f, 0x083b, + // Entry 53CC0 - 53CFF + 0x0001, 0x006f, 0x085a, 0x0003, 0x0000, 0x04e4, 0x04e9, 0x0003, + 0x006f, 0x0879, 0x088b, 0x0898, 0x0002, 0x04ec, 0x04ef, 0x0001, + 0x006f, 0x08a9, 0x0001, 0x006f, 0x08d0, 0x0003, 0x0000, 0x04f6, + 0x04fb, 0x0003, 0x006f, 0x0879, 0x088b, 0x0898, 0x0002, 0x04fe, + 0x0501, 0x0001, 0x006f, 0x08f7, 0x0001, 0x006f, 0x0917, 0x0003, + 0x0000, 0x0508, 0x050d, 0x0003, 0x006f, 0x0879, 0x088b, 0x0898, + 0x0002, 0x0510, 0x0513, 0x0001, 0x006f, 0x08f7, 0x0001, 0x006f, + 0x0917, 0x0001, 0x0518, 0x0001, 0x006f, 0x0937, 0x0001, 0x051d, + // Entry 53D00 - 53D3F + 0x0001, 0x0007, 0x0892, 0x0001, 0x0522, 0x0001, 0x006f, 0x0937, + 0x0003, 0x0529, 0x052c, 0x0530, 0x0001, 0x006f, 0x093d, 0x0002, + 0x006f, 0xffff, 0x0942, 0x0002, 0x0533, 0x0536, 0x0001, 0x006f, + 0x0952, 0x0001, 0x006f, 0x0966, 0x0003, 0x053d, 0x0540, 0x0544, + 0x0001, 0x006f, 0x093d, 0x0002, 0x006f, 0xffff, 0x0942, 0x0002, + 0x0547, 0x054a, 0x0001, 0x006f, 0x0952, 0x0001, 0x006f, 0x0966, + 0x0003, 0x0551, 0x0554, 0x0558, 0x0001, 0x006f, 0x093d, 0x0002, + 0x006f, 0xffff, 0x0942, 0x0002, 0x055b, 0x055e, 0x0001, 0x006f, + // Entry 53D40 - 53D7F + 0x0952, 0x0001, 0x006f, 0x0966, 0x0003, 0x0565, 0x0568, 0x056c, + 0x0001, 0x000a, 0x01c1, 0x0002, 0x006f, 0xffff, 0x097c, 0x0002, + 0x056f, 0x0572, 0x0001, 0x006f, 0x098e, 0x0001, 0x006f, 0x09a4, + 0x0003, 0x0579, 0x057c, 0x0580, 0x0001, 0x000a, 0x01c1, 0x0002, + 0x006f, 0xffff, 0x097c, 0x0002, 0x0583, 0x0586, 0x0001, 0x006f, + 0x098e, 0x0001, 0x006f, 0x09a4, 0x0003, 0x058d, 0x0590, 0x0594, + 0x0001, 0x000a, 0x01c1, 0x0002, 0x006f, 0xffff, 0x097c, 0x0002, + 0x0597, 0x059a, 0x0001, 0x006f, 0x098e, 0x0001, 0x006f, 0x09a4, + // Entry 53D80 - 53DBF + 0x0003, 0x05a1, 0x05a4, 0x05a8, 0x0001, 0x006f, 0x09bc, 0x0002, + 0x006f, 0xffff, 0x09c3, 0x0002, 0x05ab, 0x05ae, 0x0001, 0x006f, + 0x09cd, 0x0001, 0x006f, 0x09e3, 0x0003, 0x05b5, 0x05b8, 0x05bc, + 0x0001, 0x006f, 0x09bc, 0x0002, 0x006f, 0xffff, 0x09c3, 0x0002, + 0x05bf, 0x05c2, 0x0001, 0x006f, 0x09cd, 0x0001, 0x006f, 0x09e3, + 0x0003, 0x05c9, 0x05cc, 0x05d0, 0x0001, 0x006f, 0x09bc, 0x0002, + 0x006f, 0xffff, 0x09c3, 0x0002, 0x05d3, 0x05d6, 0x0001, 0x006f, + 0x09cd, 0x0001, 0x006f, 0x09e3, 0x0001, 0x05db, 0x0001, 0x006f, + // Entry 53DC0 - 53DFF + 0x09fb, 0x0001, 0x05e0, 0x0001, 0x006f, 0x09fb, 0x0001, 0x05e5, + 0x0001, 0x006f, 0x09fb, 0x0004, 0x05ed, 0x05f2, 0x05f7, 0x060d, + 0x0003, 0x0000, 0x1dc7, 0x4333, 0x432f, 0x0003, 0x006f, 0x0a0a, + 0x0a14, 0x0a24, 0x0002, 0x0606, 0x05fa, 0x0003, 0x0000, 0x0601, + 0x05fe, 0x0001, 0x006f, 0x0a35, 0x0003, 0x006f, 0xffff, 0x0a48, + 0x0a68, 0x0003, 0x0000, 0x0000, 0x060a, 0x0001, 0x0066, 0x0fa6, + 0x0002, 0x0000, 0x0610, 0x0003, 0x0614, 0x0754, 0x06b4, 0x009e, + 0x006f, 0xffff, 0xffff, 0xffff, 0xffff, 0x0b3c, 0x0ba3, 0x0c47, + // Entry 53E00 - 53E3F + 0x0c9c, 0x0d15, 0x0d94, 0x0e19, 0x0e9e, 0x0f05, 0x0fec, 0x103b, + 0x1093, 0x1100, 0x1152, 0x11e6, 0x1256, 0x12db, 0x1351, 0x13c7, + 0x1422, 0x1477, 0xffff, 0xffff, 0x14f8, 0xffff, 0x155b, 0xffff, + 0x15d5, 0x1624, 0x1667, 0x16b0, 0xffff, 0xffff, 0x1734, 0x1786, + 0x17e4, 0xffff, 0xffff, 0xffff, 0x1869, 0xffff, 0x18c8, 0x1926, + 0xffff, 0x19a8, 0x1a0c, 0x1a79, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1b1f, 0xffff, 0xffff, 0x1b98, 0x1bff, 0xffff, 0xffff, 0x1c96, + 0x1ce2, 0x1d3a, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 53E40 - 53E7F + 0x1e18, 0x1e67, 0x1ed7, 0x1f29, 0x1f75, 0xffff, 0xffff, 0x202d, + 0xffff, 0x2087, 0xffff, 0xffff, 0x213f, 0xffff, 0x21fb, 0xffff, + 0xffff, 0xffff, 0xffff, 0x22b1, 0xffff, 0x2317, 0x2393, 0x2400, + 0x2461, 0xffff, 0xffff, 0xffff, 0x24ef, 0x2556, 0x25a8, 0xffff, + 0xffff, 0x2630, 0x26be, 0x2731, 0x2798, 0xffff, 0xffff, 0x2815, + 0x2864, 0x28aa, 0xffff, 0x2918, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2a38, 0x2a9f, 0x2afd, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2bda, 0xffff, 0xffff, 0x2c48, 0xffff, + // Entry 53E80 - 53EBF + 0x2c9d, 0xffff, 0x2d12, 0x2d64, 0x2dc2, 0xffff, 0x2e21, 0x2e97, + 0xffff, 0xffff, 0xffff, 0x2f45, 0x2fb8, 0xffff, 0xffff, 0x0a88, + 0x0bf5, 0x0f48, 0x0f97, 0xffff, 0xffff, 0x21a0, 0x29c3, 0x009e, + 0x006f, 0x0ad7, 0x0af1, 0x0b09, 0x0b23, 0x0b56, 0x0bb6, 0x0c5b, + 0x0cbc, 0x0d37, 0x0db8, 0x0e3d, 0x0eb8, 0x0f13, 0x0ffe, 0x1050, + 0x10af, 0x1113, 0x117b, 0x1203, 0x127a, 0x12fa, 0x1370, 0x13dd, + 0x1436, 0x148e, 0x14d5, 0x14e6, 0x150b, 0x154a, 0x1571, 0x15c5, + 0x15e7, 0x1632, 0x1677, 0x16c5, 0x1708, 0x1720, 0x1747, 0x179d, + // Entry 53EC0 - 53EFF + 0x17f3, 0x182a, 0x183a, 0x1853, 0x187a, 0x18b5, 0x18df, 0x193f, + 0x198a, 0x19c1, 0x1a28, 0x1a87, 0x1abc, 0x1ada, 0x1af9, 0x1b0d, + 0x1b30, 0x1b6b, 0x1b7d, 0x1bb2, 0x1c19, 0x1c75, 0x1c86, 0x1ca7, + 0x1cf7, 0x1d4a, 0x1d83, 0x1d95, 0x1dac, 0x1dc3, 0x1dde, 0x1dfb, + 0x1e2a, 0x1e84, 0x1eea, 0x1f3a, 0x1f98, 0x1ff7, 0x2012, 0x203d, + 0x2076, 0x20a7, 0x2100, 0x2127, 0x2157, 0x21e6, 0x2214, 0x225f, + 0x2271, 0x2285, 0x2298, 0x22c5, 0x2306, 0x2338, 0x23af, 0x2418, + 0x2479, 0x24c2, 0x24d0, 0x24df, 0x2509, 0x2569, 0x25c2, 0x260f, + // Entry 53F00 - 53F3F + 0x261e, 0x264f, 0x26dc, 0x274b, 0x27ad, 0x27f0, 0x27ff, 0x2827, + 0x2873, 0x28bd, 0x28fc, 0x2936, 0x298b, 0x299d, 0x29af, 0x2a15, + 0x2a28, 0x2a52, 0x2ab6, 0x2b0f, 0x2b4c, 0x2b67, 0x2b79, 0x2b94, + 0x2ba9, 0x2bbb, 0x2bca, 0x2bea, 0x2c23, 0x2c37, 0x2c57, 0x2c8e, + 0x2cb6, 0x2d01, 0x2d25, 0x2d7b, 0x2dd3, 0x2e0e, 0x2e40, 0x2eb4, + 0x2f07, 0x2f19, 0x2f2b, 0x2f63, 0x2fda, 0x1c66, 0x26a6, 0x0a9a, + 0x0c08, 0x0f5a, 0x0fab, 0x15b6, 0x2115, 0x21af, 0x29d6, 0x009e, + 0x006f, 0xffff, 0xffff, 0xffff, 0xffff, 0x0b7d, 0x0bd6, 0x0c7c, + // Entry 53F40 - 53F7F + 0x0ce9, 0x0d66, 0x0de9, 0x0e6e, 0x0edf, 0x0f2e, 0x101d, 0x1072, + 0x10d8, 0x1133, 0x11b1, 0x122d, 0x12ab, 0x1326, 0x139c, 0x1400, + 0x1457, 0x14b2, 0xffff, 0xffff, 0x152b, 0xffff, 0x1594, 0xffff, + 0x1606, 0x164d, 0x1694, 0x16e7, 0xffff, 0xffff, 0x1767, 0x17c1, + 0x180f, 0xffff, 0xffff, 0xffff, 0x1898, 0xffff, 0x1903, 0x1965, + 0xffff, 0x19e7, 0x1a51, 0x1aa2, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1b4e, 0xffff, 0xffff, 0x1bd9, 0x1c40, 0xffff, 0xffff, 0x1cc5, + 0x1d19, 0x1d67, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 53F80 - 53FBF + 0x1e49, 0x1eae, 0x1f0a, 0x1f58, 0x1fc8, 0xffff, 0xffff, 0x205a, + 0xffff, 0x20d4, 0xffff, 0xffff, 0x217c, 0xffff, 0x223a, 0xffff, + 0xffff, 0xffff, 0xffff, 0x22e6, 0xffff, 0x2366, 0x23d8, 0x243d, + 0x249e, 0xffff, 0xffff, 0xffff, 0x2530, 0x2589, 0x25e9, 0xffff, + 0xffff, 0x267b, 0x2707, 0x2772, 0x27cf, 0xffff, 0xffff, 0x2846, + 0x288f, 0x28dd, 0xffff, 0x2961, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2a79, 0x2ada, 0x2b2e, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2c07, 0xffff, 0xffff, 0x2c73, 0xffff, + // Entry 53FC0 - 53FFF + 0x2cdc, 0xffff, 0x2d45, 0x2d9f, 0x2df1, 0xffff, 0x2e6c, 0x2ede, + 0xffff, 0xffff, 0xffff, 0x2f8e, 0x3009, 0xffff, 0xffff, 0x0ab9, + 0x0c28, 0x0f79, 0x0fcc, 0xffff, 0xffff, 0x21cb, 0x29f6, 0x0003, + 0x0004, 0x04dd, 0x0932, 0x0012, 0x0017, 0x0000, 0x0030, 0x0000, + 0x00b7, 0x0000, 0x00fe, 0x0129, 0x0371, 0x03d5, 0x0403, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0481, 0x0499, 0x04c7, 0x0005, 0x0000, + 0x0000, 0x0000, 0x0000, 0x001d, 0x0003, 0x0026, 0x002b, 0x0021, + 0x0001, 0x0023, 0x0001, 0x0000, 0x0000, 0x0001, 0x0028, 0x0001, + // Entry 54000 - 5403F + 0x0000, 0x0000, 0x0001, 0x002d, 0x0001, 0x0000, 0x0000, 0x0005, + 0x0036, 0x0000, 0x0000, 0x0000, 0x00a1, 0x0002, 0x0039, 0x006d, + 0x0003, 0x003d, 0x004d, 0x005d, 0x000e, 0x0070, 0xffff, 0x0000, + 0x0005, 0x000b, 0x0011, 0x0018, 0x001e, 0x0025, 0x002e, 0x0036, + 0x003f, 0x0044, 0x0049, 0x0051, 0x000e, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x3a06, 0x3a09, 0x3a0c, 0x0422, 0x000e, 0x0070, 0xffff, 0x0000, + 0x0005, 0x000b, 0x0011, 0x0018, 0x001e, 0x0025, 0x002e, 0x0036, + // Entry 54040 - 5407F + 0x003f, 0x0044, 0x0049, 0x0051, 0x0003, 0x0071, 0x0081, 0x0091, + 0x000e, 0x0070, 0xffff, 0x0000, 0x0005, 0x000b, 0x0011, 0x0018, + 0x001e, 0x0025, 0x002e, 0x0036, 0x003f, 0x0044, 0x0049, 0x0051, + 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x0422, + 0x000e, 0x0070, 0xffff, 0x0000, 0x0005, 0x000b, 0x0011, 0x0018, + 0x001e, 0x0025, 0x002e, 0x0036, 0x003f, 0x0044, 0x0049, 0x0051, + 0x0003, 0x00ab, 0x00b1, 0x00a5, 0x0001, 0x00a7, 0x0002, 0x0000, + // Entry 54080 - 540BF + 0x0425, 0x042a, 0x0001, 0x00ad, 0x0002, 0x0000, 0x0425, 0x042a, + 0x0001, 0x00b3, 0x0002, 0x0000, 0x0425, 0x042a, 0x0005, 0x00bd, + 0x0000, 0x0000, 0x0000, 0x00e8, 0x0002, 0x00c0, 0x00d4, 0x0003, + 0x0000, 0x0000, 0x00c4, 0x000e, 0x0000, 0xffff, 0x042f, 0x439d, + 0x43a4, 0x3b15, 0x42fb, 0x43aa, 0x43b2, 0x43ba, 0x43c2, 0x046e, + 0x3b23, 0x43c9, 0x43d0, 0x0003, 0x0000, 0x0000, 0x00d8, 0x000e, + 0x0000, 0xffff, 0x042f, 0x439d, 0x43a4, 0x3b15, 0x42fb, 0x43aa, + 0x43b2, 0x43ba, 0x43c2, 0x046e, 0x3b23, 0x43c9, 0x43d0, 0x0003, + // Entry 540C0 - 540FF + 0x00f2, 0x00f8, 0x00ec, 0x0001, 0x00ee, 0x0002, 0x0000, 0x0425, + 0x042a, 0x0001, 0x00f4, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, + 0x00fa, 0x0002, 0x0000, 0x0425, 0x042a, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0107, 0x0000, 0x0118, 0x0004, 0x0115, + 0x010f, 0x010c, 0x0112, 0x0001, 0x0070, 0x0057, 0x0001, 0x0021, + 0x0433, 0x0001, 0x0007, 0x008f, 0x0001, 0x0070, 0x0067, 0x0004, + 0x0126, 0x0120, 0x011d, 0x0123, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + // Entry 54100 - 5413F + 0x0008, 0x0132, 0x0197, 0x01ee, 0x0223, 0x0324, 0x033e, 0x034f, + 0x0360, 0x0002, 0x0135, 0x0166, 0x0003, 0x0139, 0x0148, 0x0157, + 0x000d, 0x0070, 0xffff, 0x0074, 0x0078, 0x007d, 0x0081, 0x0085, + 0x0089, 0x008d, 0x0091, 0x0096, 0x009a, 0x009e, 0x00a2, 0x000d, + 0x006e, 0xffff, 0x0a5d, 0x0a0c, 0x0a59, 0x0a5f, 0x0a59, 0x318c, + 0x318a, 0x0a0a, 0x3188, 0x3188, 0x318e, 0x0a0a, 0x000d, 0x0070, + 0xffff, 0x00a6, 0x00ab, 0x00b2, 0x00b7, 0x00bd, 0x00c4, 0x00cc, + 0x00d3, 0x00dc, 0x00e3, 0x00e8, 0x00ef, 0x0003, 0x016a, 0x0179, + // Entry 54140 - 5417F + 0x0188, 0x000d, 0x0070, 0xffff, 0x0074, 0x0078, 0x007d, 0x0081, + 0x0085, 0x0089, 0x008d, 0x0091, 0x0096, 0x009a, 0x009e, 0x00a2, + 0x000d, 0x006e, 0xffff, 0x0a5d, 0x0a0c, 0x0a59, 0x0a5f, 0x0a59, + 0x318c, 0x318a, 0x0a0a, 0x3188, 0x3188, 0x318e, 0x0a0a, 0x000d, + 0x0070, 0xffff, 0x00a6, 0x00ab, 0x00b2, 0x00b7, 0x00bd, 0x00c4, + 0x00cc, 0x00d3, 0x00dc, 0x00e3, 0x00e8, 0x00ef, 0x0002, 0x019a, + 0x01c4, 0x0005, 0x01a0, 0x01a9, 0x01bb, 0x0000, 0x01b2, 0x0007, + 0x0070, 0x00f7, 0x00fb, 0x00ff, 0x0103, 0x0108, 0x010c, 0x0110, + // Entry 54180 - 541BF + 0x0007, 0x006e, 0x0a08, 0x0a08, 0x0a03, 0x0a05, 0x0a08, 0x3190, + 0x3190, 0x0007, 0x0070, 0x0114, 0x0117, 0x011a, 0x011d, 0x0121, + 0x0124, 0x0127, 0x0007, 0x0070, 0x012a, 0x0130, 0x013a, 0x0140, + 0x014b, 0x0155, 0x015a, 0x0005, 0x01ca, 0x01d3, 0x01e5, 0x0000, + 0x01dc, 0x0007, 0x0070, 0x00f7, 0x00fb, 0x00ff, 0x0103, 0x0108, + 0x010c, 0x0110, 0x0007, 0x006e, 0x0a08, 0x0a08, 0x0a03, 0x0a05, + 0x0a08, 0x3190, 0x3190, 0x0007, 0x0070, 0x0114, 0x0117, 0x011a, + 0x011d, 0x0121, 0x0124, 0x0127, 0x0007, 0x0070, 0x012a, 0x0130, + // Entry 541C0 - 541FF + 0x013a, 0x0140, 0x014b, 0x0155, 0x015a, 0x0002, 0x01f1, 0x020a, + 0x0003, 0x01f5, 0x01fc, 0x0203, 0x0005, 0x0070, 0xffff, 0x0164, + 0x0168, 0x016c, 0x0170, 0x0005, 0x000d, 0xffff, 0x0140, 0x0143, + 0x0146, 0x0149, 0x0005, 0x0070, 0xffff, 0x0174, 0x017f, 0x018a, + 0x0195, 0x0003, 0x020e, 0x0215, 0x021c, 0x0005, 0x0070, 0xffff, + 0x0164, 0x0168, 0x016c, 0x0170, 0x0005, 0x000d, 0xffff, 0x0140, + 0x0143, 0x0146, 0x0149, 0x0005, 0x0070, 0xffff, 0x0174, 0x017f, + 0x018a, 0x0195, 0x0002, 0x0226, 0x02a5, 0x0003, 0x022a, 0x0253, + // Entry 54200 - 5423F + 0x027c, 0x000a, 0x0238, 0x023e, 0x0235, 0x0241, 0x0247, 0x024d, + 0x0250, 0x023b, 0x0244, 0x024a, 0x0001, 0x0070, 0x01a0, 0x0001, + 0x0070, 0x01ae, 0x0001, 0x0070, 0x01b3, 0x0001, 0x0070, 0x01ba, + 0x0001, 0x0007, 0x0463, 0x0001, 0x0070, 0x01be, 0x0001, 0x0070, + 0x01ce, 0x0001, 0x0070, 0x01de, 0x0001, 0x0070, 0x01eb, 0x0001, + 0x0070, 0x01f2, 0x000a, 0x0261, 0x0267, 0x025e, 0x026a, 0x0270, + 0x0276, 0x0279, 0x0264, 0x026d, 0x0273, 0x0001, 0x0070, 0x01f2, + 0x0001, 0x001f, 0x0c7d, 0x0001, 0x0070, 0x01f7, 0x0001, 0x0070, + // Entry 54240 - 5427F + 0x01fa, 0x0001, 0x0007, 0x0463, 0x0001, 0x0070, 0x01be, 0x0001, + 0x0070, 0x01ce, 0x0001, 0x0070, 0x01de, 0x0001, 0x0070, 0x01eb, + 0x0001, 0x0070, 0x01f2, 0x000a, 0x028a, 0x0290, 0x0287, 0x0293, + 0x0299, 0x029f, 0x02a2, 0x028d, 0x0296, 0x029c, 0x0001, 0x0070, + 0x01a0, 0x0001, 0x0070, 0x01ae, 0x0001, 0x0070, 0x01b3, 0x0001, + 0x0070, 0x01ba, 0x0001, 0x0007, 0x0463, 0x0001, 0x0070, 0x01be, + 0x0001, 0x0070, 0x01ce, 0x0001, 0x0070, 0x01de, 0x0001, 0x0070, + 0x01eb, 0x0001, 0x0070, 0x01f2, 0x0003, 0x02a9, 0x02d2, 0x02fb, + // Entry 54280 - 542BF + 0x000a, 0x02b7, 0x02bd, 0x02b4, 0x02c0, 0x02c6, 0x02cc, 0x02cf, + 0x02ba, 0x02c3, 0x02c9, 0x0001, 0x0070, 0x01a0, 0x0001, 0x0070, + 0x01ae, 0x0001, 0x0070, 0x01b3, 0x0001, 0x0070, 0x01ba, 0x0001, + 0x0007, 0x0463, 0x0001, 0x0070, 0x01be, 0x0001, 0x0070, 0x01ce, + 0x0001, 0x0070, 0x01de, 0x0001, 0x0070, 0x01eb, 0x0001, 0x0070, + 0x01f2, 0x000a, 0x02e0, 0x02e6, 0x02dd, 0x02e9, 0x02ef, 0x02f5, + 0x02f8, 0x02e3, 0x02ec, 0x02f2, 0x0001, 0x0070, 0x01a0, 0x0001, + 0x0070, 0x01ae, 0x0001, 0x0070, 0x01b3, 0x0001, 0x0070, 0x01ba, + // Entry 542C0 - 542FF + 0x0001, 0x0007, 0x0463, 0x0001, 0x0070, 0x01be, 0x0001, 0x0070, + 0x01ce, 0x0001, 0x0070, 0x01de, 0x0001, 0x0070, 0x01eb, 0x0001, + 0x0070, 0x01f2, 0x000a, 0x0309, 0x030f, 0x0306, 0x0312, 0x0318, + 0x031e, 0x0321, 0x030c, 0x0315, 0x031b, 0x0001, 0x0070, 0x01a0, + 0x0001, 0x0070, 0x01ae, 0x0001, 0x0070, 0x01b3, 0x0001, 0x0070, + 0x01ba, 0x0001, 0x0007, 0x0463, 0x0001, 0x0070, 0x01be, 0x0001, + 0x0070, 0x01ce, 0x0001, 0x0070, 0x01de, 0x0001, 0x0070, 0x01eb, + 0x0001, 0x0070, 0x01f2, 0x0003, 0x0333, 0x0000, 0x0328, 0x0002, + // Entry 54300 - 5433F + 0x032b, 0x032f, 0x0002, 0x0070, 0x01fe, 0x021e, 0x0002, 0x0070, + 0x020d, 0x022d, 0x0002, 0x0336, 0x033a, 0x0002, 0x0070, 0x023e, + 0x0247, 0x0002, 0x0070, 0x0242, 0x024a, 0x0004, 0x034c, 0x0346, + 0x0343, 0x0349, 0x0001, 0x006e, 0x0ca2, 0x0001, 0x0002, 0x0033, + 0x0001, 0x0002, 0x003c, 0x0001, 0x0008, 0x09e4, 0x0004, 0x035d, + 0x0357, 0x0354, 0x035a, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, + 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, + 0x036e, 0x0368, 0x0365, 0x036b, 0x0001, 0x0000, 0x03c6, 0x0001, + // Entry 54340 - 5437F + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0005, 0x0377, 0x0000, 0x0000, 0x0000, 0x03c2, 0x0002, 0x037a, + 0x039e, 0x0003, 0x037e, 0x0000, 0x038e, 0x000e, 0x0070, 0x027d, + 0x024e, 0x0255, 0x025d, 0x0264, 0x026a, 0x0271, 0x0278, 0x00b7, + 0x0285, 0x028b, 0x0291, 0x0297, 0x029a, 0x000e, 0x0070, 0x027d, + 0x024e, 0x0255, 0x025d, 0x0264, 0x026a, 0x0271, 0x0278, 0x00b7, + 0x0285, 0x028b, 0x0291, 0x0297, 0x029a, 0x0003, 0x03a2, 0x0000, + 0x03b2, 0x000e, 0x0070, 0x027d, 0x024e, 0x0255, 0x025d, 0x0264, + // Entry 54380 - 543BF + 0x026a, 0x0271, 0x0278, 0x00b7, 0x0285, 0x028b, 0x0291, 0x0297, + 0x029a, 0x000e, 0x0070, 0x027d, 0x024e, 0x0255, 0x025d, 0x0264, + 0x026a, 0x0271, 0x0278, 0x00b7, 0x0285, 0x028b, 0x0291, 0x0297, + 0x029a, 0x0003, 0x03cb, 0x03d0, 0x03c6, 0x0001, 0x03c8, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x03cd, 0x0001, 0x0000, 0x04ef, 0x0001, + 0x03d2, 0x0001, 0x0000, 0x04ef, 0x0005, 0x03db, 0x0000, 0x0000, + 0x0000, 0x03f0, 0x0001, 0x03dd, 0x0003, 0x0000, 0x0000, 0x03e1, + 0x000d, 0x0000, 0xffff, 0x05a2, 0x05aa, 0x05b3, 0x05bc, 0x43da, + // Entry 543C0 - 543FF + 0x05cb, 0x43e2, 0x43e9, 0x05e1, 0x05ec, 0x3c1a, 0x3c20, 0x0003, + 0x03f9, 0x03fe, 0x03f4, 0x0001, 0x03f6, 0x0001, 0x0000, 0x0601, + 0x0001, 0x03fb, 0x0001, 0x0000, 0x0601, 0x0001, 0x0400, 0x0001, + 0x0000, 0x0601, 0x0005, 0x0409, 0x0000, 0x0000, 0x0000, 0x046e, + 0x0002, 0x040c, 0x043d, 0x0003, 0x0410, 0x041f, 0x042e, 0x000d, + 0x0070, 0xffff, 0x029f, 0x02a6, 0x02ac, 0x02b4, 0x02bb, 0x02c3, + 0x02ca, 0x02d0, 0x02d7, 0x02dc, 0x02e4, 0x02ec, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + // Entry 54400 - 5443F + 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0070, 0xffff, + 0x02f5, 0x02a6, 0x02fe, 0x030b, 0x0317, 0x0326, 0x02ca, 0x02d0, + 0x0334, 0x02dc, 0x02e4, 0x02ec, 0x0003, 0x0441, 0x0450, 0x045f, + 0x000d, 0x0070, 0xffff, 0x029f, 0x02a6, 0x02ac, 0x02b4, 0x02bb, + 0x02c3, 0x02ca, 0x02d0, 0x02d7, 0x02dc, 0x02e4, 0x02ec, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, 0x000d, 0x0070, + 0xffff, 0x02f5, 0x02a6, 0x02fe, 0x030b, 0x0317, 0x0326, 0x02ca, + // Entry 54440 - 5447F + 0x02d0, 0x0334, 0x02dc, 0x02e4, 0x02ec, 0x0003, 0x0477, 0x047c, + 0x0472, 0x0001, 0x0474, 0x0001, 0x0070, 0x033c, 0x0001, 0x0479, + 0x0001, 0x0070, 0x033c, 0x0001, 0x047e, 0x0001, 0x0070, 0x033c, + 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0488, 0x0004, + 0x0496, 0x0490, 0x048d, 0x0493, 0x0001, 0x006e, 0x0a0f, 0x0001, + 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0070, 0x0342, + 0x0005, 0x049f, 0x0000, 0x0000, 0x0000, 0x04b4, 0x0001, 0x04a1, + 0x0003, 0x0000, 0x0000, 0x04a5, 0x000d, 0x0070, 0xffff, 0x034b, + // Entry 54480 - 544BF + 0x0355, 0x0361, 0x0368, 0x036c, 0x0373, 0x037d, 0x0382, 0x0387, + 0x038c, 0x0390, 0x0397, 0x0003, 0x04bd, 0x04c2, 0x04b8, 0x0001, + 0x04ba, 0x0001, 0x0000, 0x1a1d, 0x0001, 0x04bf, 0x0001, 0x0000, + 0x1a1d, 0x0001, 0x04c4, 0x0001, 0x0000, 0x1a1d, 0x0005, 0x0000, + 0x0000, 0x0000, 0x0000, 0x04cd, 0x0003, 0x04d7, 0x0000, 0x04d1, + 0x0001, 0x04d3, 0x0002, 0x0070, 0x039e, 0x03ad, 0x0001, 0x04d9, + 0x0002, 0x0000, 0x1a20, 0x43f1, 0x0042, 0x0520, 0x0525, 0x052a, + 0x052f, 0x0546, 0x055d, 0x0574, 0x058b, 0x059d, 0x05af, 0x05c6, + // Entry 544C0 - 544FF + 0x05dd, 0x05f4, 0x060f, 0x0625, 0x063b, 0x0640, 0x0645, 0x064a, + 0x0663, 0x067c, 0x0695, 0x069a, 0x069f, 0x06a4, 0x06a9, 0x06ae, + 0x06b3, 0x06b8, 0x06bd, 0x06c2, 0x06d6, 0x06ea, 0x06fe, 0x0712, + 0x0726, 0x073a, 0x074e, 0x0762, 0x0776, 0x078a, 0x079e, 0x07b2, + 0x07c6, 0x07da, 0x07ee, 0x0802, 0x0816, 0x082a, 0x083e, 0x0852, + 0x0866, 0x086b, 0x0870, 0x0875, 0x088b, 0x089d, 0x08af, 0x08c5, + 0x08d7, 0x08e9, 0x08ff, 0x0911, 0x0923, 0x0928, 0x092d, 0x0001, + 0x0522, 0x0001, 0x0070, 0x03b4, 0x0001, 0x0527, 0x0001, 0x0070, + // Entry 54500 - 5453F + 0x03b4, 0x0001, 0x052c, 0x0001, 0x0070, 0x03b4, 0x0003, 0x0533, + 0x0536, 0x053b, 0x0001, 0x0070, 0x03ba, 0x0003, 0x0070, 0x03bf, + 0x03cb, 0x03d3, 0x0002, 0x053e, 0x0542, 0x0002, 0x0070, 0x03e0, + 0x03e0, 0x0002, 0x0070, 0x03ef, 0x03ef, 0x0003, 0x054a, 0x054d, + 0x0552, 0x0001, 0x0070, 0x03ba, 0x0003, 0x0070, 0x03bf, 0x03cb, + 0x03d3, 0x0002, 0x0555, 0x0559, 0x0002, 0x0070, 0x03e0, 0x03e0, + 0x0002, 0x0070, 0x03ef, 0x03ef, 0x0003, 0x0561, 0x0564, 0x0569, + 0x0001, 0x0070, 0x03ba, 0x0003, 0x0070, 0x03bf, 0x03cb, 0x03d3, + // Entry 54540 - 5457F + 0x0002, 0x056c, 0x0570, 0x0002, 0x0070, 0x03e0, 0x03e0, 0x0002, + 0x0070, 0x03ef, 0x03ef, 0x0003, 0x0578, 0x057b, 0x0580, 0x0001, + 0x0070, 0x03fe, 0x0003, 0x0070, 0x0406, 0x0415, 0x0420, 0x0002, + 0x0583, 0x0587, 0x0002, 0x0070, 0x0430, 0x0430, 0x0002, 0x0070, + 0x0442, 0x0442, 0x0003, 0x058f, 0x0000, 0x0592, 0x0001, 0x0070, + 0x0454, 0x0002, 0x0595, 0x0599, 0x0002, 0x0070, 0x045a, 0x045a, + 0x0002, 0x0070, 0x046a, 0x046a, 0x0003, 0x05a1, 0x0000, 0x05a4, + 0x0001, 0x0070, 0x0454, 0x0002, 0x05a7, 0x05ab, 0x0002, 0x0070, + // Entry 54580 - 545BF + 0x045a, 0x045a, 0x0002, 0x0070, 0x046a, 0x046a, 0x0003, 0x05b3, + 0x05b6, 0x05bb, 0x0001, 0x0007, 0x03c1, 0x0003, 0x0070, 0x047a, + 0x0484, 0x048a, 0x0002, 0x05be, 0x05c2, 0x0002, 0x0070, 0x0495, + 0x0495, 0x0002, 0x0070, 0x04a2, 0x04a2, 0x0003, 0x05ca, 0x05cd, + 0x05d2, 0x0001, 0x0007, 0x03c1, 0x0003, 0x0070, 0x047a, 0x0484, + 0x048a, 0x0002, 0x05d5, 0x05d9, 0x0002, 0x0070, 0x0495, 0x0495, + 0x0002, 0x0070, 0x04a2, 0x04a2, 0x0003, 0x05e1, 0x05e4, 0x05e9, + 0x0001, 0x0007, 0x03c1, 0x0003, 0x0070, 0x047a, 0x0484, 0x048a, + // Entry 545C0 - 545FF + 0x0002, 0x05ec, 0x05f0, 0x0002, 0x0070, 0x0495, 0x0495, 0x0002, + 0x0070, 0x04a2, 0x04a2, 0x0004, 0x05f9, 0x05fc, 0x0601, 0x060c, + 0x0001, 0x0070, 0x04af, 0x0003, 0x0070, 0x04b5, 0x04c2, 0x04cb, + 0x0002, 0x0604, 0x0608, 0x0002, 0x0070, 0x04d9, 0x04d9, 0x0002, + 0x0070, 0x04e9, 0x04e9, 0x0001, 0x0070, 0x04f9, 0x0004, 0x0614, + 0x0000, 0x0617, 0x0622, 0x0001, 0x0070, 0x0506, 0x0002, 0x061a, + 0x061e, 0x0002, 0x0070, 0x050a, 0x050a, 0x0002, 0x0070, 0x0518, + 0x0518, 0x0001, 0x0070, 0x04f9, 0x0004, 0x062a, 0x0000, 0x062d, + // Entry 54600 - 5463F + 0x0638, 0x0001, 0x0070, 0x0506, 0x0002, 0x0630, 0x0634, 0x0002, + 0x0070, 0x050a, 0x050a, 0x0002, 0x0070, 0x0518, 0x0518, 0x0001, + 0x0070, 0x04f9, 0x0001, 0x063d, 0x0001, 0x0070, 0x0526, 0x0001, + 0x0642, 0x0001, 0x0070, 0x0526, 0x0001, 0x0647, 0x0001, 0x0070, + 0x0526, 0x0003, 0x064e, 0x0651, 0x0658, 0x0001, 0x006e, 0x0e80, + 0x0005, 0x0070, 0x0542, 0x0547, 0x054e, 0x0535, 0x0555, 0x0002, + 0x065b, 0x065f, 0x0002, 0x0070, 0x0561, 0x0561, 0x0002, 0x0070, + 0x0570, 0x0570, 0x0003, 0x0667, 0x066a, 0x0671, 0x0001, 0x006e, + // Entry 54640 - 5467F + 0x0e80, 0x0005, 0x0070, 0x0542, 0x0547, 0x054e, 0x0535, 0x0555, + 0x0002, 0x0674, 0x0678, 0x0002, 0x0070, 0x0561, 0x0561, 0x0002, + 0x0070, 0x0570, 0x0570, 0x0003, 0x0680, 0x0683, 0x068a, 0x0001, + 0x006e, 0x0e80, 0x0005, 0x0070, 0x0542, 0x0547, 0x054e, 0x0535, + 0x0555, 0x0002, 0x068d, 0x0691, 0x0002, 0x0070, 0x0561, 0x0561, + 0x0002, 0x0070, 0x0570, 0x0570, 0x0001, 0x0697, 0x0001, 0x0070, + 0x057f, 0x0001, 0x069c, 0x0001, 0x0070, 0x057f, 0x0001, 0x06a1, + 0x0001, 0x0070, 0x057f, 0x0001, 0x06a6, 0x0001, 0x0070, 0x058e, + // Entry 54680 - 546BF + 0x0001, 0x06ab, 0x0001, 0x0070, 0x058e, 0x0001, 0x06b0, 0x0001, + 0x0070, 0x058e, 0x0001, 0x06b5, 0x0001, 0x0070, 0x059f, 0x0001, + 0x06ba, 0x0001, 0x0070, 0x059f, 0x0001, 0x06bf, 0x0001, 0x0070, + 0x059f, 0x0003, 0x0000, 0x06c6, 0x06cb, 0x0003, 0x0070, 0x05ac, + 0x05b9, 0x05c2, 0x0002, 0x06ce, 0x06d2, 0x0002, 0x0070, 0x05d0, + 0x05d0, 0x0002, 0x0070, 0x05e0, 0x05e0, 0x0003, 0x0000, 0x06da, + 0x06df, 0x0003, 0x0070, 0x05f0, 0x05fc, 0x0604, 0x0002, 0x06e2, + 0x06e6, 0x0002, 0x0070, 0x0611, 0x0611, 0x0002, 0x0070, 0x0620, + // Entry 546C0 - 546FF + 0x0620, 0x0003, 0x0000, 0x06ee, 0x06f3, 0x0003, 0x0070, 0x05f0, + 0x05fc, 0x0604, 0x0002, 0x06f6, 0x06fa, 0x0002, 0x0070, 0x0611, + 0x0611, 0x0002, 0x0070, 0x0620, 0x0620, 0x0003, 0x0000, 0x0702, + 0x0707, 0x0003, 0x0070, 0x062f, 0x0640, 0x064d, 0x0002, 0x070a, + 0x070e, 0x0002, 0x0070, 0x065f, 0x065f, 0x0002, 0x0070, 0x0673, + 0x0673, 0x0003, 0x0000, 0x0716, 0x071b, 0x0003, 0x0070, 0x0687, + 0x0693, 0x069b, 0x0002, 0x071e, 0x0722, 0x0002, 0x0070, 0x06a8, + 0x06a8, 0x0002, 0x0070, 0x06b7, 0x06b7, 0x0003, 0x0000, 0x072a, + // Entry 54700 - 5473F + 0x072f, 0x0003, 0x0070, 0x0687, 0x0693, 0x069b, 0x0002, 0x0732, + 0x0736, 0x0002, 0x0070, 0x06a8, 0x06a8, 0x0002, 0x0070, 0x06b7, + 0x06b7, 0x0003, 0x0000, 0x073e, 0x0743, 0x0003, 0x0070, 0x06c6, + 0x06d3, 0x06dc, 0x0002, 0x0746, 0x074a, 0x0002, 0x0070, 0x06ea, + 0x06ea, 0x0002, 0x0070, 0x06fa, 0x06fa, 0x0003, 0x0000, 0x0752, + 0x0757, 0x0003, 0x0070, 0x06c6, 0x06d3, 0x06dc, 0x0002, 0x075a, + 0x075e, 0x0002, 0x0070, 0x06ea, 0x06ea, 0x0002, 0x0070, 0x06fa, + 0x06fa, 0x0003, 0x0000, 0x0766, 0x076b, 0x0003, 0x0070, 0x06c6, + // Entry 54740 - 5477F + 0x06d3, 0x06dc, 0x0002, 0x076e, 0x0772, 0x0002, 0x0070, 0x06ea, + 0x06ea, 0x0002, 0x0070, 0x06fa, 0x06fa, 0x0003, 0x0000, 0x077a, + 0x077f, 0x0003, 0x0070, 0x070a, 0x071c, 0x072a, 0x0002, 0x0782, + 0x0786, 0x0002, 0x0070, 0x073d, 0x073d, 0x0002, 0x0070, 0x0752, + 0x0752, 0x0003, 0x0000, 0x078e, 0x0793, 0x0003, 0x006e, 0x11e5, + 0x3192, 0x319b, 0x0002, 0x0796, 0x079a, 0x0002, 0x0070, 0x0767, + 0x0767, 0x0002, 0x0070, 0x0777, 0x0777, 0x0003, 0x0000, 0x07a2, + 0x07a7, 0x0003, 0x006e, 0x11e5, 0x3192, 0x319b, 0x0002, 0x07aa, + // Entry 54780 - 547BF + 0x07ae, 0x0002, 0x0070, 0x0767, 0x0767, 0x0002, 0x0070, 0x0777, + 0x0777, 0x0003, 0x0000, 0x07b6, 0x07bb, 0x0003, 0x0070, 0x0787, + 0x0798, 0x07a5, 0x0002, 0x07be, 0x07c2, 0x0002, 0x0070, 0x07b7, + 0x07b7, 0x0002, 0x0070, 0x07cb, 0x07cb, 0x0003, 0x0000, 0x07ca, + 0x07cf, 0x0003, 0x0070, 0x07df, 0x07eb, 0x07f3, 0x0002, 0x07d2, + 0x07d6, 0x0002, 0x0070, 0x0800, 0x0800, 0x0002, 0x0070, 0x080f, + 0x080f, 0x0003, 0x0000, 0x07de, 0x07e3, 0x0003, 0x0070, 0x07df, + 0x07eb, 0x07f3, 0x0002, 0x07e6, 0x07ea, 0x0002, 0x0070, 0x0800, + // Entry 547C0 - 547FF + 0x0800, 0x0002, 0x0070, 0x080f, 0x080f, 0x0003, 0x0000, 0x07f2, + 0x07f7, 0x0003, 0x0070, 0x081e, 0x082a, 0x0832, 0x0002, 0x07fa, + 0x07fe, 0x0002, 0x0070, 0x083f, 0x083f, 0x0002, 0x0070, 0x084e, + 0x084e, 0x0003, 0x0000, 0x0806, 0x080b, 0x0003, 0x0070, 0x081e, + 0x082a, 0x0832, 0x0002, 0x080e, 0x0812, 0x0002, 0x0070, 0x083f, + 0x083f, 0x0002, 0x0070, 0x084e, 0x084e, 0x0003, 0x0000, 0x081a, + 0x081f, 0x0003, 0x0070, 0x081e, 0x082a, 0x0832, 0x0002, 0x0822, + 0x0826, 0x0002, 0x0070, 0x083f, 0x083f, 0x0002, 0x0070, 0x084e, + // Entry 54800 - 5483F + 0x084e, 0x0003, 0x0000, 0x082e, 0x0833, 0x0003, 0x0070, 0x085d, + 0x086e, 0x087b, 0x0002, 0x0836, 0x083a, 0x0002, 0x0070, 0x088d, + 0x088d, 0x0002, 0x0070, 0x08a1, 0x08a1, 0x0003, 0x0000, 0x0842, + 0x0847, 0x0003, 0x0070, 0x08b5, 0x08c1, 0x08c9, 0x0002, 0x084a, + 0x084e, 0x0002, 0x0070, 0x08d6, 0x08d6, 0x0002, 0x0070, 0x08e5, + 0x08e5, 0x0003, 0x0000, 0x0856, 0x085b, 0x0003, 0x0070, 0x08b5, + 0x08c1, 0x08c9, 0x0002, 0x085e, 0x0862, 0x0002, 0x0070, 0x08d6, + 0x08d6, 0x0002, 0x0070, 0x08e5, 0x08e5, 0x0001, 0x0868, 0x0001, + // Entry 54840 - 5487F + 0x0070, 0x08f4, 0x0001, 0x086d, 0x0001, 0x0070, 0x08f4, 0x0001, + 0x0872, 0x0001, 0x0070, 0x08f4, 0x0003, 0x0879, 0x087c, 0x0880, + 0x0001, 0x0007, 0x08c8, 0x0002, 0x0007, 0xffff, 0x089d, 0x0002, + 0x0883, 0x0887, 0x0002, 0x0070, 0x08fd, 0x08fd, 0x0002, 0x0070, + 0x090c, 0x090c, 0x0003, 0x088f, 0x0000, 0x0892, 0x0001, 0x0070, + 0x091b, 0x0002, 0x0895, 0x0899, 0x0002, 0x0070, 0x091f, 0x091f, + 0x0002, 0x0070, 0x092d, 0x092d, 0x0003, 0x08a1, 0x0000, 0x08a4, + 0x0001, 0x0070, 0x091b, 0x0002, 0x08a7, 0x08ab, 0x0002, 0x0070, + // Entry 54880 - 548BF + 0x091f, 0x091f, 0x0002, 0x0070, 0x092d, 0x092d, 0x0003, 0x08b3, + 0x08b6, 0x08ba, 0x0001, 0x0046, 0x0404, 0x0002, 0x0070, 0xffff, + 0x093b, 0x0002, 0x08bd, 0x08c1, 0x0002, 0x0070, 0x0945, 0x0945, + 0x0002, 0x0070, 0x0956, 0x0956, 0x0003, 0x08c9, 0x0000, 0x08cc, + 0x0001, 0x0070, 0x0967, 0x0002, 0x08cf, 0x08d3, 0x0002, 0x0070, + 0x096b, 0x096b, 0x0002, 0x0070, 0x0979, 0x0979, 0x0003, 0x08db, + 0x0000, 0x08de, 0x0001, 0x0070, 0x0967, 0x0002, 0x08e1, 0x08e5, + 0x0002, 0x0070, 0x096b, 0x096b, 0x0002, 0x0070, 0x0979, 0x0979, + // Entry 548C0 - 548FF + 0x0003, 0x08ed, 0x08f0, 0x08f4, 0x0001, 0x0070, 0x0987, 0x0002, + 0x0070, 0xffff, 0x098e, 0x0002, 0x08f7, 0x08fb, 0x0002, 0x0070, + 0x0995, 0x0995, 0x0002, 0x0070, 0x09a6, 0x09a6, 0x0003, 0x0903, + 0x0000, 0x0906, 0x0001, 0x0028, 0x07e7, 0x0002, 0x0909, 0x090d, + 0x0002, 0x0070, 0x09b7, 0x09b7, 0x0002, 0x0070, 0x09c5, 0x09c5, + 0x0003, 0x0915, 0x0000, 0x0918, 0x0001, 0x0028, 0x07e7, 0x0002, + 0x091b, 0x091f, 0x0002, 0x0070, 0x09b7, 0x09b7, 0x0002, 0x0070, + 0x09c5, 0x09c5, 0x0001, 0x0925, 0x0001, 0x0070, 0x09d3, 0x0001, + // Entry 54900 - 5493F + 0x092a, 0x0001, 0x0070, 0x09df, 0x0001, 0x092f, 0x0001, 0x0070, + 0x09df, 0x0004, 0x0937, 0x093c, 0x0941, 0x0950, 0x0003, 0x0000, + 0x1dc7, 0x4333, 0x432f, 0x0003, 0x0070, 0x09e5, 0x09ef, 0x09fd, + 0x0002, 0x0000, 0x0944, 0x0003, 0x0000, 0x094b, 0x0948, 0x0001, + 0x0070, 0x0a10, 0x0003, 0x0070, 0xffff, 0x0a2e, 0x0a43, 0x0002, + 0x0000, 0x0953, 0x0003, 0x0957, 0x0a97, 0x09f7, 0x009e, 0x0070, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0adc, 0x0b22, 0x0b8d, 0x0bc1, + 0x0c22, 0x0c7d, 0x0cd5, 0x0d36, 0x0d6c, 0x0e02, 0x0e3f, 0x0e79, + // Entry 54940 - 5497F + 0x0ec5, 0x0f05, 0x0f3f, 0x0f8e, 0x0fef, 0x1041, 0x1093, 0x10d3, + 0x110a, 0xffff, 0xffff, 0x1164, 0xffff, 0x11bb, 0xffff, 0x1216, + 0x124d, 0x127e, 0x12ac, 0xffff, 0xffff, 0x1318, 0x1355, 0x13a4, + 0xffff, 0xffff, 0xffff, 0x140c, 0xffff, 0x1469, 0x14ac, 0xffff, + 0x150c, 0x1552, 0x15a7, 0xffff, 0xffff, 0xffff, 0xffff, 0x1630, + 0xffff, 0xffff, 0x16a0, 0x16ef, 0xffff, 0xffff, 0x176d, 0x17b3, + 0x17f0, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x189c, + 0x18cd, 0x1907, 0x193e, 0x1975, 0xffff, 0xffff, 0x1a0d, 0xffff, + // Entry 54980 - 549BF + 0x1a48, 0xffff, 0xffff, 0x1abf, 0xffff, 0x1b44, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1bc7, 0xffff, 0x1c11, 0x1c69, 0x1cd6, 0x1d16, + 0xffff, 0xffff, 0xffff, 0x1d73, 0x1dbf, 0x1e05, 0xffff, 0xffff, + 0x1e6b, 0x1ee3, 0x1f26, 0x1f54, 0xffff, 0xffff, 0x1fb0, 0x1fea, + 0x2018, 0xffff, 0x206f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2164, 0x219b, 0x21cf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x227c, 0xffff, 0xffff, 0x22cf, 0xffff, 0x230c, + 0xffff, 0x2362, 0x2399, 0x23dc, 0xffff, 0x2423, 0x2466, 0xffff, + // Entry 549C0 - 549FF + 0xffff, 0xffff, 0x24d9, 0x2510, 0xffff, 0xffff, 0x0a5b, 0x0b56, + 0x0d9a, 0x0dcb, 0xffff, 0xffff, 0x1afc, 0x2105, 0x009e, 0x0070, + 0x0a89, 0x0a9a, 0x0aac, 0x0abf, 0x0aef, 0x0b2f, 0x0b9a, 0x0bdd, + 0x0c3c, 0x0c96, 0x0cf1, 0x0d43, 0x0d77, 0x0e12, 0x0e4e, 0x0e8e, + 0x0ed6, 0x0f14, 0x0f55, 0x0faa, 0x1006, 0x1058, 0x10a4, 0x10e1, + 0x111b, 0x114a, 0x1156, 0x1173, 0x119e, 0x11cc, 0x1207, 0x1224, + 0x1259, 0x1289, 0x12bd, 0x12ec, 0x1303, 0x1328, 0x1369, 0x13b0, + 0x13d5, 0x13e1, 0x13fa, 0x1422, 0x145b, 0x147b, 0x14bf, 0x14f2, + // Entry 54A00 - 54A3F + 0x151f, 0x156a, 0x15b2, 0x15d5, 0x15ee, 0x1612, 0x1622, 0x1641, + 0x1670, 0x1687, 0x16b6, 0x1705, 0x1752, 0x1760, 0x1780, 0x17c3, + 0x17fb, 0x181e, 0x1837, 0x184b, 0x185b, 0x1870, 0x1886, 0x18a8, + 0x18dc, 0x1915, 0x194c, 0x1994, 0x19df, 0x19f6, 0x1a18, 0x1a3b, + 0x1a5a, 0x1a8b, 0x1aab, 0x1acf, 0x1b2d, 0x1b52, 0x1b7b, 0x1b89, + 0x1b99, 0x1baf, 0x1bd7, 0x1c04, 0x1c2a, 0x1c89, 0x1ce7, 0x1d24, + 0x1d4d, 0x1d5b, 0x1d67, 0x1d88, 0x1dd2, 0x1e18, 0x1e4b, 0x1e56, + 0x1e85, 0x1ef5, 0x1f31, 0x1f63, 0x1f8e, 0x1f9a, 0x1fbf, 0x1ff5, + // Entry 54A40 - 54A7F + 0x2029, 0x2058, 0x208e, 0x20d9, 0x20e8, 0x20f5, 0x2148, 0x2156, + 0x2172, 0x21a8, 0x21db, 0x2200, 0x2211, 0x2229, 0x2240, 0x2255, + 0x2263, 0x226f, 0x2289, 0x22b0, 0x22c1, 0x22db, 0x2300, 0x2320, + 0x2355, 0x2370, 0x23ab, 0x23ea, 0x2413, 0x2435, 0x2476, 0x24a3, + 0x24b0, 0x24c2, 0x24e7, 0x2524, 0x173e, 0x1ec6, 0x0a66, 0x0b64, + 0x0da6, 0x0dd9, 0x11fb, 0x1a9f, 0x1b08, 0x2117, 0x009e, 0x0070, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0b0b, 0x0b45, 0x0bb0, 0x0c02, + 0x0c5f, 0x0cb8, 0x0d16, 0x0d5a, 0x0d8b, 0x0e2b, 0x0e66, 0x0eac, + // Entry 54A80 - 54ABF + 0x0ef0, 0x0f2c, 0x0f74, 0x0fcf, 0x1026, 0x1078, 0x10be, 0x10f8, + 0x1135, 0xffff, 0xffff, 0x118b, 0xffff, 0x11e6, 0xffff, 0x123b, + 0x126e, 0x129d, 0x12d7, 0xffff, 0xffff, 0x1341, 0x1386, 0x13c5, + 0xffff, 0xffff, 0xffff, 0x1441, 0xffff, 0x1496, 0x14db, 0xffff, + 0x153b, 0x158b, 0x15c6, 0xffff, 0xffff, 0xffff, 0xffff, 0x165b, + 0xffff, 0xffff, 0x16d5, 0x1724, 0xffff, 0xffff, 0x179c, 0x17dc, + 0x180f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x18bd, + 0x18f4, 0x192c, 0x1963, 0x19bc, 0xffff, 0xffff, 0x1a2c, 0xffff, + // Entry 54AC0 - 54AFF + 0x1a75, 0xffff, 0xffff, 0x1ae8, 0xffff, 0x1b69, 0xffff, 0xffff, + 0xffff, 0xffff, 0x1bf0, 0xffff, 0x1c4c, 0x1cb2, 0x1d01, 0x1d3b, + 0xffff, 0xffff, 0xffff, 0x1da6, 0x1dee, 0x1e34, 0xffff, 0xffff, + 0x1ea8, 0x1f10, 0x1f45, 0x1f7b, 0xffff, 0xffff, 0x1fd7, 0x2009, + 0x2043, 0xffff, 0x20b6, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2189, 0x21be, 0x21f0, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x229f, 0xffff, 0xffff, 0x22f0, 0xffff, 0x233d, + 0xffff, 0x2387, 0x23c6, 0x2401, 0xffff, 0x2450, 0x248f, 0xffff, + // Entry 54B00 - 54B3F + 0xffff, 0xffff, 0x24fe, 0x2541, 0xffff, 0xffff, 0x0a7a, 0x0b7b, + 0x0dbb, 0x0df0, 0xffff, 0xffff, 0x1b1d, 0x2132, 0x0001, 0x0002, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000b, 0x0007, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0013, 0x0004, 0x0021, 0x001b, 0x0018, 0x001e, 0x0001, 0x0002, + 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, 0x0002, 0x04fe, 0x0001, + 0x0002, 0x0508, 0x0003, 0x0004, 0x01b6, 0x0289, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0038, 0x0008, + // Entry 54B40 - 54B7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, 0x0027, + 0x0004, 0x0024, 0x001e, 0x001b, 0x0021, 0x0001, 0x0071, 0x0000, + 0x0001, 0x0071, 0x001b, 0x0001, 0x0017, 0x0372, 0x0001, 0x001f, + 0x0b31, 0x0004, 0x0035, 0x002f, 0x002c, 0x0032, 0x0001, 0x0006, + 0x022e, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0001, + 0x0006, 0x022e, 0x0008, 0x0041, 0x00a6, 0x00fd, 0x0132, 0x0173, + 0x0183, 0x0194, 0x01a5, 0x0002, 0x0044, 0x0075, 0x0003, 0x0048, + 0x0057, 0x0066, 0x000d, 0x0071, 0xffff, 0x0030, 0x003a, 0x0042, + // Entry 54B80 - 54BBF + 0x004a, 0x0052, 0x0059, 0x0062, 0x006b, 0x0073, 0x007d, 0x0085, + 0x008f, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, 0x3a0c, + 0x000d, 0x0071, 0xffff, 0x0097, 0x00a6, 0x00b5, 0x00be, 0x0052, + 0x0059, 0x0062, 0x00cb, 0x00d8, 0x00e9, 0x00f8, 0x0105, 0x0003, + 0x0079, 0x0088, 0x0097, 0x000d, 0x0071, 0xffff, 0x0030, 0x003a, + 0x0042, 0x004a, 0x0052, 0x0059, 0x0062, 0x006b, 0x0073, 0x007d, + 0x0085, 0x008f, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + // Entry 54BC0 - 54BFF + 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, 0x3a09, + 0x3a0c, 0x000d, 0x0071, 0xffff, 0x0097, 0x00a6, 0x00b5, 0x00be, + 0x0052, 0x0059, 0x0062, 0x00cb, 0x00d8, 0x00e9, 0x00f8, 0x0105, + 0x0002, 0x00a9, 0x00d3, 0x0005, 0x00af, 0x00b8, 0x00ca, 0x0000, + 0x00c1, 0x0007, 0x0071, 0x0114, 0x011c, 0x0124, 0x012c, 0x0134, + 0x013e, 0x0146, 0x0007, 0x0012, 0x0054, 0x3a5b, 0x3a93, 0x3a99, + 0x3a9c, 0x3aa5, 0x3aa2, 0x0007, 0x0071, 0x0114, 0x011c, 0x0124, + 0x012c, 0x0134, 0x013e, 0x0146, 0x0007, 0x0071, 0x014e, 0x015d, + // Entry 54C00 - 54C3F + 0x016c, 0x017b, 0x018c, 0x01a1, 0x01ac, 0x0005, 0x00d9, 0x00e2, + 0x00f4, 0x0000, 0x00eb, 0x0007, 0x0071, 0x0114, 0x011c, 0x0124, + 0x012c, 0x0134, 0x013e, 0x0146, 0x0007, 0x0012, 0x0054, 0x3a5b, + 0x3a93, 0x3a99, 0x3a9c, 0x3aa5, 0x3aa2, 0x0007, 0x0071, 0x0114, + 0x011c, 0x0124, 0x012c, 0x0134, 0x013e, 0x0146, 0x0007, 0x0071, + 0x014e, 0x015d, 0x016c, 0x017b, 0x018c, 0x01a1, 0x01ac, 0x0002, + 0x0100, 0x0119, 0x0003, 0x0104, 0x010b, 0x0112, 0x0005, 0x0071, + 0xffff, 0x01b7, 0x01c6, 0x01d5, 0x01e4, 0x0005, 0x0000, 0xffff, + // Entry 54C40 - 54C7F + 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0071, 0xffff, 0x01f3, + 0x020b, 0x0223, 0x023b, 0x0003, 0x011d, 0x0124, 0x012b, 0x0005, + 0x0071, 0xffff, 0x01b7, 0x01c6, 0x01d5, 0x01e4, 0x0005, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0071, 0xffff, + 0x01f3, 0x020b, 0x0223, 0x023b, 0x0002, 0x0135, 0x0154, 0x0003, + 0x0139, 0x0142, 0x014b, 0x0002, 0x013c, 0x013f, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0002, 0x0145, 0x0148, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0002, 0x014e, 0x0151, + // Entry 54C80 - 54CBF + 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0003, 0x0158, + 0x0161, 0x016a, 0x0002, 0x015b, 0x015e, 0x0001, 0x0000, 0x04ef, + 0x0001, 0x0000, 0x04f2, 0x0002, 0x0164, 0x0167, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0002, 0x016d, 0x0170, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0003, 0x017d, 0x0000, + 0x0177, 0x0001, 0x0179, 0x0002, 0x0071, 0x0253, 0x0276, 0x0001, + 0x017f, 0x0002, 0x0071, 0x028a, 0x0294, 0x0004, 0x0191, 0x018b, + 0x0188, 0x018e, 0x0001, 0x0071, 0x029b, 0x0001, 0x0071, 0x02b2, + // Entry 54CC0 - 54CFF + 0x0001, 0x0071, 0x02c3, 0x0001, 0x0017, 0x0538, 0x0004, 0x01a2, + 0x019c, 0x0199, 0x019f, 0x0001, 0x0005, 0x0082, 0x0001, 0x0005, + 0x008f, 0x0001, 0x0005, 0x0099, 0x0001, 0x0005, 0x00a1, 0x0004, + 0x01b3, 0x01ad, 0x01aa, 0x01b0, 0x0001, 0x0006, 0x022e, 0x0001, + 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, + 0x0040, 0x01f7, 0x0000, 0x0000, 0x01fc, 0x0201, 0x0206, 0x020b, + 0x0210, 0x0215, 0x021a, 0x021f, 0x0224, 0x0229, 0x022e, 0x0233, + 0x0000, 0x0000, 0x0000, 0x0238, 0x0243, 0x0248, 0x0000, 0x0000, + // Entry 54D00 - 54D3F + 0x0000, 0x024d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0252, 0x0000, 0x0257, + 0x025c, 0x0261, 0x0266, 0x026b, 0x0270, 0x0275, 0x027a, 0x027f, + 0x0284, 0x0001, 0x01f9, 0x0001, 0x0008, 0x0a02, 0x0001, 0x01fe, + 0x0001, 0x0071, 0x02d3, 0x0001, 0x0203, 0x0001, 0x0071, 0x02d3, + 0x0001, 0x0208, 0x0001, 0x0071, 0x02d3, 0x0001, 0x020d, 0x0001, + // Entry 54D40 - 54D7F + 0x0008, 0x0b3d, 0x0001, 0x0212, 0x0001, 0x0008, 0x0ca5, 0x0001, + 0x0217, 0x0001, 0x0008, 0x0ca5, 0x0001, 0x021c, 0x0001, 0x0039, + 0x1775, 0x0001, 0x0221, 0x0001, 0x0039, 0x1775, 0x0001, 0x0226, + 0x0001, 0x0039, 0x1775, 0x0001, 0x022b, 0x0001, 0x0071, 0x02d8, + 0x0001, 0x0230, 0x0001, 0x0071, 0x02d8, 0x0001, 0x0235, 0x0001, + 0x0071, 0x02d8, 0x0002, 0x023b, 0x023e, 0x0001, 0x0071, 0x02e1, + 0x0003, 0x0071, 0x02e8, 0x02f1, 0x02fc, 0x0001, 0x0245, 0x0001, + 0x0071, 0x02e1, 0x0001, 0x024a, 0x0001, 0x0071, 0x02e1, 0x0001, + // Entry 54D80 - 54DBF + 0x024f, 0x0001, 0x0071, 0x0309, 0x0001, 0x0254, 0x0001, 0x0007, + 0x0892, 0x0001, 0x0259, 0x0001, 0x0071, 0x031b, 0x0001, 0x025e, + 0x0001, 0x0071, 0x0328, 0x0001, 0x0263, 0x0001, 0x0071, 0x0328, + 0x0001, 0x0268, 0x0001, 0x000f, 0x01c4, 0x0001, 0x026d, 0x0001, + 0x0012, 0x0dff, 0x0001, 0x0272, 0x0001, 0x0012, 0x0dff, 0x0001, + 0x0277, 0x0001, 0x000f, 0x0227, 0x0001, 0x027c, 0x0001, 0x0065, + 0x0cc2, 0x0001, 0x0281, 0x0001, 0x0065, 0x0cc2, 0x0001, 0x0286, + 0x0001, 0x0071, 0x0330, 0x0004, 0x028e, 0x0293, 0x0298, 0x02a2, + // Entry 54DC0 - 54DFF + 0x0003, 0x0000, 0x1dc7, 0x4333, 0x432f, 0x0003, 0x0071, 0x0348, + 0x0359, 0x0375, 0x0002, 0x0000, 0x029b, 0x0003, 0x0000, 0x0000, + 0x029f, 0x0001, 0x0071, 0x0393, 0x0002, 0x0000, 0x02a5, 0x0003, + 0x02a9, 0x0318, 0x02dc, 0x0031, 0x0071, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x03d0, 0x047e, 0x0544, 0x05ec, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x06b5, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 54E00 - 54E3F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x077b, 0x07fc, 0xffff, 0x0895, 0x003a, 0x0071, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0402, + 0x04b8, 0x0574, 0x0627, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x06ef, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x079e, 0x0827, 0xffff, + // Entry 54E40 - 54E7F + 0x08c0, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x092e, 0x0031, 0x0071, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0441, 0x04ff, 0x05b1, 0x066f, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0736, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x07ce, 0x085f, 0xffff, 0x08f8, 0x0002, 0x0003, 0x00e9, + // Entry 54E80 - 54EBF + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, + 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, + 0x0000, 0x0000, 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, + 0x0002, 0x0000, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, + 0x0001, 0x0000, 0x240c, 0x0008, 0x002f, 0x0066, 0x008b, 0x009f, + 0x00b7, 0x00c7, 0x00d8, 0x0000, 0x0002, 0x0032, 0x0054, 0x0003, + 0x0036, 0x0000, 0x0045, 0x000d, 0x0018, 0xffff, 0x010e, 0x0113, + 0x2a52, 0x011b, 0x2a00, 0x0122, 0x0127, 0x2992, 0x012f, 0x2a56, + // Entry 54EC0 - 54EFF + 0x0133, 0x0137, 0x000d, 0x0018, 0xffff, 0x013b, 0x0144, 0x014e, + 0x0154, 0x2a00, 0x015b, 0x0163, 0x2992, 0x016a, 0x0174, 0x017d, + 0x0187, 0x0002, 0x0000, 0x0057, 0x000d, 0x0018, 0xffff, 0x0191, + 0x2a5a, 0x2a5c, 0x2a5e, 0x2a5c, 0x0191, 0x0191, 0x2a0d, 0x2a60, + 0x2a62, 0x2a64, 0x2a66, 0x0002, 0x0069, 0x007f, 0x0003, 0x006d, + 0x0000, 0x0076, 0x0007, 0x0009, 0x5839, 0x5845, 0x5849, 0x584d, + 0x5851, 0x5855, 0x5859, 0x0007, 0x0018, 0x01a4, 0x01ab, 0x01b2, + 0x01bb, 0x29b7, 0x01cb, 0x01d2, 0x0002, 0x0000, 0x0082, 0x0007, + // Entry 54F00 - 54F3F + 0x006e, 0x318c, 0x318a, 0x318a, 0x31a9, 0x31a9, 0x31a9, 0x31ab, + 0x0001, 0x008d, 0x0003, 0x0091, 0x0000, 0x0098, 0x0005, 0x0018, + 0xffff, 0x01d9, 0x29f0, 0x01df, 0x01e2, 0x0005, 0x0018, 0xffff, + 0x01e5, 0x01ee, 0x01f7, 0x0200, 0x0001, 0x00a1, 0x0003, 0x00a5, + 0x0000, 0x00ae, 0x0002, 0x00a8, 0x00ab, 0x0001, 0x0018, 0x0209, + 0x0001, 0x0018, 0x0212, 0x0002, 0x00b1, 0x00b4, 0x0001, 0x0018, + 0x0209, 0x0001, 0x0018, 0x0212, 0x0003, 0x00c1, 0x0000, 0x00bb, + 0x0001, 0x00bd, 0x0002, 0x0018, 0x021d, 0x0227, 0x0001, 0x00c3, + // Entry 54F40 - 54F7F + 0x0002, 0x0018, 0x0234, 0x0237, 0x0004, 0x00d5, 0x00cf, 0x00cc, + 0x00d2, 0x0001, 0x0002, 0x0025, 0x0001, 0x0002, 0x0033, 0x0001, + 0x0002, 0x003c, 0x0001, 0x0002, 0x028b, 0x0004, 0x00e6, 0x00e0, + 0x00dd, 0x00e3, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, + 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0040, 0x012a, + 0x0000, 0x0000, 0x012f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0134, 0x0000, 0x0000, 0x0139, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x013e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 54F80 - 54FBF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0149, 0x0000, 0x014e, 0x0000, 0x0000, + 0x0153, 0x0000, 0x0000, 0x0158, 0x0000, 0x0000, 0x015d, 0x0001, + 0x012c, 0x0001, 0x0018, 0x023a, 0x0001, 0x0131, 0x0001, 0x0018, + 0x0240, 0x0001, 0x0136, 0x0001, 0x0018, 0x0246, 0x0001, 0x013b, + 0x0001, 0x0018, 0x024c, 0x0002, 0x0141, 0x0144, 0x0001, 0x0018, + // Entry 54FC0 - 54FFF + 0x0251, 0x0003, 0x0023, 0x0066, 0x2b10, 0x2b15, 0x0001, 0x014b, + 0x0001, 0x0018, 0x0264, 0x0001, 0x0150, 0x0001, 0x0018, 0x027c, + 0x0001, 0x0155, 0x0001, 0x0018, 0x0282, 0x0001, 0x015a, 0x0001, + 0x0018, 0x0289, 0x0001, 0x015f, 0x0001, 0x0018, 0x028e, 0x0002, + 0x0003, 0x00d8, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000c, 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0015, 0x0000, 0x0000, 0x0004, 0x0023, 0x001d, 0x001a, + 0x0020, 0x0001, 0x0006, 0x000d, 0x0001, 0x0002, 0x0010, 0x0001, + // Entry 55000 - 5503F + 0x0002, 0x001b, 0x0001, 0x0002, 0x0587, 0x0008, 0x002f, 0x0066, + 0x008b, 0x009f, 0x00b7, 0x00c7, 0x0000, 0x0000, 0x0002, 0x0032, + 0x0054, 0x0003, 0x0036, 0x0000, 0x0045, 0x000d, 0x0038, 0xffff, + 0x000d, 0x001a, 0x269e, 0x26a2, 0x26a6, 0x0022, 0x0026, 0x002a, + 0x26aa, 0x26ae, 0x26b4, 0x00a5, 0x000d, 0x0038, 0xffff, 0x0040, + 0x26b8, 0x26c1, 0x26c6, 0x0060, 0x0066, 0x26cc, 0x0072, 0x26d3, + 0x26dc, 0x26e5, 0x26ed, 0x0002, 0x0000, 0x0057, 0x000d, 0x0018, + 0xffff, 0x2a23, 0x2a23, 0x2a5c, 0x2a68, 0x2a5c, 0x2a23, 0x2a23, + // Entry 55040 - 5507F + 0x2a6a, 0x2a6d, 0x2a6f, 0x2a64, 0x2a66, 0x0002, 0x0069, 0x007f, + 0x0003, 0x006d, 0x0000, 0x0076, 0x0007, 0x002b, 0x1859, 0x2062, + 0x2066, 0x206a, 0x206e, 0x2072, 0x2076, 0x0007, 0x0071, 0x0957, + 0x095e, 0x0964, 0x096b, 0x0971, 0x0977, 0x097f, 0x0002, 0x0000, + 0x0082, 0x0007, 0x0018, 0x2a5e, 0x2a5e, 0x2a5e, 0x2a5e, 0x2a5e, + 0x2a5e, 0x2a5e, 0x0001, 0x008d, 0x0003, 0x0091, 0x0000, 0x0098, + 0x0005, 0x0071, 0xffff, 0x0989, 0x098d, 0x0991, 0x0995, 0x0005, + 0x0071, 0xffff, 0x0999, 0x09a8, 0x09b7, 0x09c6, 0x0001, 0x00a1, + // Entry 55080 - 550BF + 0x0003, 0x00a5, 0x0000, 0x00ae, 0x0002, 0x00a8, 0x00ab, 0x0001, + 0x0071, 0x09d5, 0x0001, 0x0071, 0x09df, 0x0002, 0x00b1, 0x00b4, + 0x0001, 0x0071, 0x09d5, 0x0001, 0x0071, 0x09df, 0x0003, 0x00c1, + 0x0000, 0x00bb, 0x0001, 0x00bd, 0x0002, 0x0071, 0x09ec, 0x09fe, + 0x0001, 0x00c3, 0x0002, 0x0071, 0x0a14, 0x0a18, 0x0004, 0x00d5, + 0x00cf, 0x00cc, 0x00d2, 0x0001, 0x0006, 0x015b, 0x0001, 0x0002, + 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, 0x0002, 0x08e8, 0x0040, + 0x0119, 0x0000, 0x0000, 0x011e, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 550C0 - 550FF + 0x0000, 0x0123, 0x0000, 0x0000, 0x0128, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x012d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0138, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x013d, 0x0000, 0x0142, 0x0000, + 0x0000, 0x0147, 0x0000, 0x0000, 0x014c, 0x0000, 0x0000, 0x0151, + 0x0001, 0x011b, 0x0001, 0x0038, 0x02b2, 0x0001, 0x0120, 0x0001, + // Entry 55100 - 5513F + 0x0071, 0x0a1e, 0x0001, 0x0125, 0x0001, 0x0071, 0x0a27, 0x0001, + 0x012a, 0x0001, 0x0071, 0x0a2c, 0x0002, 0x0130, 0x0133, 0x0001, + 0x0006, 0x43a5, 0x0003, 0x0071, 0x0a34, 0x0a3e, 0x0a43, 0x0001, + 0x013a, 0x0001, 0x0071, 0x0a4a, 0x0001, 0x013f, 0x0001, 0x0071, + 0x0a58, 0x0001, 0x0144, 0x0001, 0x0071, 0x0a6e, 0x0001, 0x0149, + 0x0001, 0x0071, 0x0a76, 0x0001, 0x014e, 0x0001, 0x0071, 0x0a7d, + 0x0001, 0x0153, 0x0001, 0x0038, 0x0aa7, 0x0003, 0x0004, 0x02aa, + 0x03c9, 0x0012, 0x0017, 0x0030, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 55140 - 5517F + 0x008a, 0x00b5, 0x022a, 0x0000, 0x0237, 0x0000, 0x0000, 0x0000, + 0x0000, 0x027c, 0x0000, 0x0294, 0x0005, 0x0000, 0x0000, 0x0000, + 0x0000, 0x001d, 0x0003, 0x0026, 0x002b, 0x0021, 0x0001, 0x0023, + 0x0001, 0x0071, 0x0a84, 0x0001, 0x0028, 0x0001, 0x0000, 0x0000, + 0x0001, 0x002d, 0x0001, 0x0000, 0x0000, 0x000a, 0x003b, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0079, 0x0000, 0x0000, 0x0000, 0x005f, + 0x0001, 0x003d, 0x0003, 0x0041, 0x0000, 0x0050, 0x000d, 0x001c, + 0xffff, 0x0000, 0x0004, 0x0008, 0x000c, 0x0010, 0x0014, 0x0018, + // Entry 55180 - 551BF + 0x001c, 0x0020, 0x0024, 0x0029, 0x002e, 0x000d, 0x0071, 0xffff, + 0x0aa2, 0x0aa9, 0x0ab0, 0x0ab7, 0x0abe, 0x0ac5, 0x0acc, 0x0ad3, + 0x0ada, 0x0ae1, 0x0ae9, 0x0af1, 0x0006, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0066, 0x0001, 0x0068, 0x0001, 0x006a, 0x000d, + 0x0071, 0xffff, 0x0af9, 0x0b06, 0x0b0f, 0x0b1c, 0x0b29, 0x0b38, + 0x0b43, 0x0b4a, 0x0b51, 0x0b5e, 0x0b67, 0x0b6e, 0x0004, 0x0087, + 0x0081, 0x007e, 0x0084, 0x0001, 0x0071, 0x0b79, 0x0001, 0x0071, + 0x0b8b, 0x0001, 0x0071, 0x0b96, 0x0001, 0x000c, 0x03ec, 0x0008, + // Entry 551C0 - 551FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0093, 0x0000, 0x00a4, + 0x0004, 0x00a1, 0x009b, 0x0098, 0x009e, 0x0001, 0x0071, 0x0ba0, + 0x0001, 0x0071, 0x0bb4, 0x0001, 0x0071, 0x0bc1, 0x0001, 0x0013, + 0x0203, 0x0004, 0x00b2, 0x00ac, 0x00a9, 0x00af, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0071, 0x0bcd, 0x0001, + 0x0071, 0x0bcd, 0x0008, 0x00be, 0x0114, 0x016b, 0x01a0, 0x01e1, + 0x01f7, 0x0208, 0x0219, 0x0002, 0x00c1, 0x00e3, 0x0003, 0x00c5, + 0x0000, 0x00d4, 0x000d, 0x0071, 0xffff, 0x0bd7, 0x0be4, 0x0bf1, + // Entry 55200 - 5523F + 0x0bfa, 0x0c07, 0x0c0e, 0x0c19, 0x0c24, 0x0c33, 0x0c44, 0x0c55, + 0x0c64, 0x000d, 0x0071, 0xffff, 0x0bd7, 0x0be4, 0x0bf1, 0x0bfa, + 0x0c07, 0x0c0e, 0x0c19, 0x0c24, 0x0c33, 0x0c44, 0x0c55, 0x0c64, + 0x0003, 0x00e7, 0x00f6, 0x0105, 0x000d, 0x0071, 0xffff, 0x0bd7, + 0x0be4, 0x0bf1, 0x0bfa, 0x0c07, 0x0c0e, 0x0c19, 0x0c24, 0x0c33, + 0x0c44, 0x0c55, 0x0c64, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, 0x3a06, + 0x3a09, 0x3a0c, 0x000d, 0x0071, 0xffff, 0x0bd7, 0x0be4, 0x0bf1, + // Entry 55240 - 5527F + 0x0bfa, 0x0c07, 0x0c0e, 0x0c19, 0x0c24, 0x0c33, 0x0c44, 0x0c55, + 0x0c64, 0x0002, 0x0117, 0x0141, 0x0005, 0x011d, 0x0126, 0x0138, + 0x0000, 0x012f, 0x0007, 0x0071, 0x0c73, 0x0c78, 0x0c7d, 0x0c82, + 0x0c87, 0x0c8c, 0x0c91, 0x0007, 0x0003, 0x0209, 0x2356, 0x2359, + 0x235c, 0x235f, 0x2362, 0x2365, 0x0007, 0x0003, 0x0209, 0x2356, + 0x2359, 0x235c, 0x235f, 0x2362, 0x2365, 0x0007, 0x0071, 0x0c96, + 0x0ca7, 0x0cb6, 0x0cc7, 0x0cd8, 0x0ce9, 0x0cf2, 0x0005, 0x0147, + 0x0150, 0x0162, 0x0000, 0x0159, 0x0007, 0x0071, 0x0c73, 0x0c78, + // Entry 55280 - 552BF + 0x0c7d, 0x0c82, 0x0c87, 0x0c8c, 0x0c91, 0x0007, 0x0003, 0x0209, + 0x2356, 0x2359, 0x235c, 0x235f, 0x2362, 0x2365, 0x0007, 0x0003, + 0x0209, 0x2356, 0x2359, 0x235c, 0x235f, 0x2362, 0x2365, 0x0007, + 0x0071, 0x0c96, 0x0ca7, 0x0cb6, 0x0cc7, 0x0cd8, 0x0ce9, 0x0cf2, + 0x0002, 0x016e, 0x0187, 0x0003, 0x0172, 0x0179, 0x0180, 0x0005, + 0x0071, 0xffff, 0x0cfd, 0x0d0a, 0x0d17, 0x0d24, 0x0005, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0071, 0xffff, + 0x0d31, 0x0d4b, 0x0d67, 0x0d81, 0x0003, 0x018b, 0x0192, 0x0199, + // Entry 552C0 - 552FF + 0x0005, 0x0071, 0xffff, 0x0cfd, 0x0d0a, 0x0d17, 0x0d24, 0x0005, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0071, + 0xffff, 0x0d31, 0x0d4b, 0x0d67, 0x0d81, 0x0002, 0x01a3, 0x01c2, + 0x0003, 0x01a7, 0x01b0, 0x01b9, 0x0002, 0x01aa, 0x01ad, 0x0001, + 0x0071, 0x0d9b, 0x0001, 0x0071, 0x0da1, 0x0002, 0x01b3, 0x01b6, + 0x0001, 0x0014, 0x3620, 0x0001, 0x0003, 0x0224, 0x0002, 0x01bc, + 0x01bf, 0x0001, 0x0071, 0x0da7, 0x0001, 0x0071, 0x0dbf, 0x0003, + 0x01c6, 0x01cf, 0x01d8, 0x0002, 0x01c9, 0x01cc, 0x0001, 0x0071, + // Entry 55300 - 5533F + 0x0d9b, 0x0001, 0x0071, 0x0da1, 0x0002, 0x01d2, 0x01d5, 0x0001, + 0x0071, 0x0d9b, 0x0001, 0x0071, 0x0da1, 0x0002, 0x01db, 0x01de, + 0x0001, 0x0071, 0x0d9b, 0x0001, 0x0071, 0x0da1, 0x0003, 0x01eb, + 0x01f1, 0x01e5, 0x0001, 0x01e7, 0x0002, 0x0071, 0x0dd7, 0x0df9, + 0x0001, 0x01ed, 0x0002, 0x0000, 0x04f5, 0x43f8, 0x0001, 0x01f3, + 0x0002, 0x0000, 0x04f5, 0x43f8, 0x0004, 0x0205, 0x01ff, 0x01fc, + 0x0202, 0x0001, 0x0071, 0x0e0a, 0x0001, 0x0071, 0x0e1a, 0x0001, + 0x0071, 0x0e25, 0x0001, 0x0000, 0x051c, 0x0004, 0x0216, 0x0210, + // Entry 55340 - 5537F + 0x020d, 0x0213, 0x0001, 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, + 0x0001, 0x0002, 0x04fe, 0x0001, 0x0002, 0x0508, 0x0004, 0x0227, + 0x0221, 0x021e, 0x0224, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0071, 0x0bcd, 0x0001, 0x0071, 0x0bcd, 0x0005, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0230, 0x0001, 0x0232, 0x0001, + 0x0234, 0x0001, 0x0000, 0x04ef, 0x0008, 0x0240, 0x0000, 0x0000, + 0x0000, 0x0264, 0x026b, 0x0000, 0x9006, 0x0001, 0x0242, 0x0003, + 0x0246, 0x0000, 0x0255, 0x000d, 0x0071, 0xffff, 0x0e2f, 0x0e40, + // Entry 55380 - 553BF + 0x0e4b, 0x0e66, 0x0e7f, 0x0e9e, 0x0ebb, 0x0ec6, 0x0ed3, 0x0ee2, + 0x0eef, 0x0f00, 0x000d, 0x0071, 0xffff, 0x0e2f, 0x0e40, 0x0e4b, + 0x0e66, 0x0e7f, 0x0e9e, 0x0ebb, 0x0ec6, 0x0ed3, 0x0ee2, 0x0eef, + 0x0f00, 0x0001, 0x0266, 0x0001, 0x0268, 0x0001, 0x0071, 0x0f11, + 0x0004, 0x0279, 0x0273, 0x0270, 0x0276, 0x0001, 0x0071, 0x0f20, + 0x0001, 0x0071, 0x0f34, 0x0001, 0x0071, 0x0f41, 0x0001, 0x0003, + 0x016d, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0283, + 0x0004, 0x0291, 0x028b, 0x0288, 0x028e, 0x0001, 0x0071, 0x0f4d, + // Entry 553C0 - 553FF + 0x0001, 0x0071, 0x0bb4, 0x0001, 0x0071, 0x0bc1, 0x0001, 0x0013, + 0x0203, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x029a, 0x0003, + 0x02a4, 0x0000, 0x029e, 0x0001, 0x02a0, 0x0002, 0x0071, 0x0f60, + 0x0f89, 0x0001, 0x02a6, 0x0002, 0x0000, 0x1a20, 0x4409, 0x0040, + 0x02eb, 0x0000, 0x0000, 0x02f0, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0307, 0x0000, 0x0000, 0x031e, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0335, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x034c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0351, 0x0000, + // Entry 55400 - 5543F + 0x0000, 0x0359, 0x0000, 0x0000, 0x0361, 0x0000, 0x0000, 0x0369, + 0x0000, 0x0000, 0x0371, 0x0000, 0x0000, 0x0379, 0x0000, 0x0000, + 0x0381, 0x0000, 0x0000, 0x0000, 0x0389, 0x0000, 0x038e, 0x0000, + 0x0000, 0x03a0, 0x0000, 0x0000, 0x03b2, 0x0000, 0x0000, 0x03c4, + 0x0001, 0x02ed, 0x0001, 0x0000, 0x43f8, 0x0003, 0x02f4, 0x02f7, + 0x02fc, 0x0001, 0x0071, 0x0f94, 0x0003, 0x0071, 0x0f9b, 0x0faf, + 0x0fbb, 0x0002, 0x02ff, 0x0303, 0x0002, 0x0071, 0x0fcd, 0x0fcd, + 0x0002, 0x0071, 0x0fe9, 0x0fe9, 0x0003, 0x030b, 0x030e, 0x0313, + // Entry 55440 - 5547F + 0x0001, 0x0071, 0x1003, 0x0003, 0x0071, 0x100a, 0x101e, 0x102a, + 0x0002, 0x0316, 0x031a, 0x0002, 0x0071, 0x103c, 0x103c, 0x0002, + 0x0071, 0x1058, 0x1058, 0x0003, 0x0322, 0x0325, 0x032a, 0x0001, + 0x0071, 0x1072, 0x0003, 0x0071, 0x107d, 0x1095, 0x10a5, 0x0002, + 0x032d, 0x0331, 0x0002, 0x0071, 0x10bb, 0x10bb, 0x0002, 0x0071, + 0x10db, 0x10db, 0x0003, 0x0339, 0x033c, 0x0341, 0x0001, 0x0071, + 0x10f9, 0x0003, 0x0071, 0x1100, 0x110f, 0x111a, 0x0002, 0x0344, + 0x0348, 0x0002, 0x0071, 0x1123, 0x1123, 0x0002, 0x0071, 0x113f, + // Entry 55480 - 554BF + 0x113f, 0x0001, 0x034e, 0x0001, 0x0071, 0x1159, 0x0002, 0x0000, + 0x0354, 0x0003, 0x0071, 0x1173, 0x1191, 0x11a7, 0x0002, 0x0000, + 0x035c, 0x0003, 0x0071, 0x11c3, 0x11df, 0x11f3, 0x0002, 0x0000, + 0x0364, 0x0003, 0x0071, 0x120d, 0x122b, 0x1241, 0x0002, 0x0000, + 0x036c, 0x0003, 0x0071, 0x125d, 0x127b, 0x1291, 0x0002, 0x0000, + 0x0374, 0x0003, 0x0071, 0x12ad, 0x12cb, 0x12e1, 0x0002, 0x0000, + 0x037c, 0x0003, 0x0071, 0x12fd, 0x1313, 0x1321, 0x0002, 0x0000, + 0x0384, 0x0003, 0x0071, 0x1335, 0x134d, 0x135d, 0x0001, 0x038b, + // Entry 554C0 - 554FF + 0x0001, 0x0071, 0x1373, 0x0003, 0x0392, 0x0000, 0x0395, 0x0001, + 0x0071, 0x13a3, 0x0002, 0x0398, 0x039c, 0x0002, 0x0071, 0x13ae, + 0x13ae, 0x0002, 0x0071, 0x13ce, 0x13ce, 0x0003, 0x03a4, 0x0000, + 0x03a7, 0x0001, 0x0071, 0x13ec, 0x0002, 0x03aa, 0x03ae, 0x0002, + 0x0071, 0x13f7, 0x13f7, 0x0002, 0x0071, 0x1417, 0x1417, 0x0003, + 0x03b6, 0x0000, 0x03b9, 0x0001, 0x0071, 0x1435, 0x0002, 0x03bc, + 0x03c0, 0x0002, 0x0071, 0x1442, 0x1442, 0x0002, 0x0071, 0x1464, + 0x1464, 0x0001, 0x03c6, 0x0001, 0x0071, 0x1484, 0x0004, 0x03ce, + // Entry 55500 - 5553F + 0x03d2, 0x03d7, 0x03e2, 0x0002, 0x0000, 0x1dc7, 0x4333, 0x0003, + 0x0071, 0x149c, 0x14ab, 0x14c7, 0x0002, 0x0000, 0x03da, 0x0002, + 0x0000, 0x03dd, 0x0003, 0x0071, 0xffff, 0x14e9, 0x1512, 0x0002, + 0x0000, 0x03e5, 0x0003, 0x03e9, 0x0529, 0x0489, 0x009e, 0x0071, + 0xffff, 0xffff, 0xffff, 0xffff, 0x164b, 0x16e0, 0x17c2, 0x1830, + 0x18bf, 0x1948, 0x199e, 0x1a21, 0xffff, 0x1b65, 0x1bc7, 0x1c47, + 0x1cee, 0x1d68, 0x1e09, 0x1edd, 0x1fda, 0x20a8, 0x2176, 0x21fc, + 0x225e, 0xffff, 0xffff, 0x2304, 0xffff, 0x23b3, 0xffff, 0x247f, + // Entry 55540 - 5557F + 0x24e1, 0x253d, 0x259f, 0xffff, 0xffff, 0x2667, 0x26e1, 0x277b, + 0xffff, 0xffff, 0xffff, 0x2835, 0xffff, 0x28e4, 0x297f, 0xffff, + 0x2a14, 0x2aa9, 0x2b56, 0xffff, 0xffff, 0xffff, 0xffff, 0x2c8e, + 0xffff, 0xffff, 0x2d4b, 0x2dec, 0xffff, 0xffff, 0x2ef9, 0x2f88, + 0x2ff6, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3154, + 0x31b6, 0x322a, 0x32b0, 0x3324, 0xffff, 0xffff, 0x344f, 0xffff, + 0x34d1, 0xffff, 0xffff, 0x35c5, 0xffff, 0x36cf, 0xffff, 0xffff, + 0xffff, 0xffff, 0x37b8, 0xffff, 0x3850, 0x3933, 0x39e3, 0x3a63, + // Entry 55580 - 555BF + 0xffff, 0xffff, 0xffff, 0x3b0d, 0x3ba8, 0x3c3d, 0xffff, 0xffff, + 0x3d0e, 0x3ded, 0x3e73, 0x3ed5, 0xffff, 0xffff, 0x3f95, 0x4009, + 0x4065, 0xffff, 0x4104, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x42b1, 0x431f, 0x4387, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x44c3, 0xffff, 0xffff, 0x4565, 0xffff, 0x45d9, + 0xffff, 0x467d, 0x46f1, 0x4777, 0xffff, 0x480b, 0x4897, 0xffff, + 0xffff, 0xffff, 0x4974, 0x49e2, 0xffff, 0xffff, 0x153b, 0x1754, + 0x1a8f, 0x1af7, 0xffff, 0xffff, 0x3636, 0x41fb, 0x009e, 0x0071, + // Entry 555C0 - 555FF + 0x159d, 0x15bf, 0x15e8, 0x160f, 0x1672, 0x16fc, 0x17dc, 0x1855, + 0x18e2, 0x195a, 0x19bf, 0x1a3b, 0xffff, 0x1b7b, 0x1be7, 0x1c74, + 0x1d0c, 0x1d93, 0x1e45, 0x1f26, 0x2014, 0x20e2, 0x2198, 0x2212, + 0x227a, 0x22d2, 0x22e8, 0x2324, 0x2384, 0x23d6, 0x2452, 0x2495, + 0x24f5, 0x2553, 0x25bd, 0x2619, 0x2644, 0x2685, 0x2706, 0x278f, + 0x27d7, 0x27ed, 0x2812, 0x285a, 0x28c8, 0x290d, 0x29a6, 0xffff, + 0x2a3b, 0x2ad8, 0x2b6a, 0x2bb2, 0x2bf6, 0x2c54, 0x2c72, 0x2caa, + 0x2d02, 0x2d2f, 0x2d76, 0x2e17, 0x2eb6, 0x2edd, 0x2f1e, 0x2fa2, + // Entry 55600 - 5563F + 0x300a, 0x3052, 0x3083, 0x30a6, 0x30c5, 0x30f6, 0x3125, 0x316a, + 0x31d2, 0x324c, 0x32cc, 0x335f, 0x33f5, 0x3422, 0x3467, 0x34b7, + 0x34f5, 0x355d, 0x359e, 0x35e0, 0x369e, 0x36e9, 0x373d, 0x375b, + 0x3775, 0x378d, 0x37d8, 0x3838, 0x3891, 0x3963, 0x3a03, 0x3a7b, + 0x3acb, 0x3ae1, 0x3af7, 0x3b36, 0x3bcf, 0x3c61, 0x3cc9, 0x3ce1, + 0x3d39, 0x3e0f, 0x3e89, 0x3ef1, 0x3f49, 0x3f5f, 0x3fb1, 0x401d, + 0x4081, 0x40d9, 0x413b, 0x41c9, 0x41e3, 0xffff, 0x427b, 0x4299, + 0x42cb, 0x4337, 0x439f, 0x43f5, 0x440d, 0x4429, 0x4456, 0x447f, + // Entry 55640 - 5567F + 0x4499, 0x44ad, 0x44db, 0x452b, 0x454b, 0x457b, 0x45c7, 0x45fd, + 0x4665, 0x4699, 0x4713, 0x4793, 0x47eb, 0x482f, 0x48b5, 0x4911, + 0x4929, 0x494a, 0x498e, 0x4a08, 0x2e8d, 0x3daf, 0x1551, 0x176e, + 0x1aa7, 0x1b11, 0x243c, 0x357f, 0x364e, 0x421b, 0x009e, 0x0071, + 0xffff, 0xffff, 0xffff, 0xffff, 0x16ac, 0x172b, 0x1809, 0x188d, + 0x1918, 0x197f, 0x19f3, 0x1a68, 0xffff, 0x1ba4, 0x1c1a, 0x1cb4, + 0x1d3d, 0x1dd1, 0x1e94, 0x1f84, 0x2061, 0x212f, 0x21cd, 0x223b, + 0x22a9, 0xffff, 0xffff, 0x2357, 0xffff, 0x240c, 0xffff, 0x24be, + // Entry 55680 - 556BF + 0x251c, 0x257c, 0x25ee, 0xffff, 0xffff, 0x26b6, 0x273e, 0x27b6, + 0xffff, 0xffff, 0xffff, 0x2896, 0xffff, 0x2949, 0x29e0, 0xffff, + 0x2a75, 0x2b1a, 0x2b91, 0xffff, 0xffff, 0xffff, 0xffff, 0x2cd9, + 0xffff, 0xffff, 0x2db4, 0x2e55, 0xffff, 0xffff, 0x2f56, 0x2fcf, + 0x3031, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3193, + 0x3201, 0x3281, 0x32fb, 0x33ad, 0xffff, 0xffff, 0x3492, 0xffff, + 0x352c, 0xffff, 0xffff, 0x360e, 0xffff, 0x3716, 0xffff, 0xffff, + 0xffff, 0xffff, 0x380b, 0xffff, 0x38e5, 0x39a6, 0x3a36, 0x3aa6, + // Entry 556C0 - 556FF + 0xffff, 0xffff, 0xffff, 0x3b72, 0x3c09, 0x3c98, 0xffff, 0xffff, + 0x3d77, 0x3e44, 0x3eb2, 0x3f20, 0xffff, 0xffff, 0x3fe0, 0x4044, + 0x40b0, 0xffff, 0x4185, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x42f8, 0x4362, 0x43ca, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x4506, 0xffff, 0xffff, 0x45a4, 0xffff, 0x4634, + 0xffff, 0x46c8, 0x4748, 0x47c2, 0xffff, 0x4866, 0x48e6, 0xffff, + 0xffff, 0xffff, 0x49bb, 0x4a41, 0xffff, 0xffff, 0x157a, 0x179b, + 0x1ad2, 0x1b3e, 0xffff, 0xffff, 0x3679, 0x424e, 0x0003, 0x0004, + // Entry 55700 - 5573F + 0x0601, 0x0bea, 0x0011, 0x0016, 0x0000, 0x002f, 0x0000, 0x0096, + 0x0000, 0x011d, 0x0148, 0x0361, 0x03d5, 0x0453, 0x0000, 0x0000, + 0x0000, 0x0000, 0x04d1, 0x05c9, 0x0005, 0x0000, 0x0000, 0x0000, + 0x0000, 0x001c, 0x0003, 0x0025, 0x002a, 0x0020, 0x0001, 0x0022, + 0x0001, 0x0072, 0x0000, 0x0001, 0x0027, 0x0001, 0x0072, 0x0000, + 0x0001, 0x002c, 0x0001, 0x0008, 0x038c, 0x0005, 0x0035, 0x0000, + 0x0000, 0x0000, 0x0080, 0x0002, 0x0038, 0x005c, 0x0003, 0x003c, + 0x0000, 0x004c, 0x000e, 0x005b, 0xffff, 0x02d7, 0x29be, 0x29c6, + // Entry 55740 - 5577F + 0x29ce, 0x29d6, 0x29de, 0x29e6, 0x29f2, 0x29fc, 0x2a04, 0x2a0e, + 0x2a14, 0x2a1c, 0x000e, 0x005b, 0xffff, 0x02d7, 0x2a24, 0x02e7, + 0x2a2d, 0x2a38, 0x0306, 0x0311, 0x0322, 0x0331, 0x033e, 0x2a41, + 0x0352, 0x2a4a, 0x0003, 0x0060, 0x0000, 0x0070, 0x000e, 0x005b, + 0xffff, 0x02d7, 0x2a53, 0x2a5a, 0x2a61, 0x2a68, 0x2a6f, 0x2a76, + 0x2a81, 0x2a8a, 0x2a91, 0x2a9a, 0x2a9f, 0x2aa6, 0x000e, 0x005b, + 0xffff, 0x02d7, 0x2a24, 0x02e7, 0x2a2d, 0x2a38, 0x0306, 0x0311, + 0x0322, 0x0331, 0x033e, 0x2a41, 0x0352, 0x2a4a, 0x0003, 0x008a, + // Entry 55780 - 557BF + 0x0090, 0x0084, 0x0001, 0x0086, 0x0002, 0x0000, 0x0425, 0x042a, + 0x0001, 0x008c, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x0092, + 0x0002, 0x0000, 0x0425, 0x042a, 0x0005, 0x009c, 0x0000, 0x0000, + 0x0000, 0x0107, 0x0002, 0x009f, 0x00d3, 0x0003, 0x00a3, 0x00b3, + 0x00c3, 0x000e, 0x0008, 0xffff, 0x0e09, 0x5027, 0x502f, 0x5037, + 0x503f, 0x5047, 0x5051, 0x5059, 0x5063, 0x506b, 0x5073, 0x507b, + 0x5083, 0x000e, 0x000b, 0xffff, 0x0962, 0x0965, 0x0968, 0x096b, + 0x096e, 0x0971, 0x0974, 0x0977, 0x097a, 0x2780, 0x2783, 0x2786, + // Entry 557C0 - 557FF + 0x2789, 0x000e, 0x0072, 0xffff, 0x0008, 0x001b, 0x002a, 0x0037, + 0x0046, 0x004f, 0x005e, 0x006f, 0x007c, 0x008b, 0x0094, 0x009f, + 0x00ac, 0x0003, 0x00d7, 0x00e7, 0x00f7, 0x000e, 0x0008, 0xffff, + 0x0e09, 0x5027, 0x502f, 0x5037, 0x503f, 0x5047, 0x5051, 0x5059, + 0x5063, 0x506b, 0x5073, 0x507b, 0x5083, 0x000e, 0x000b, 0xffff, + 0x0962, 0x0965, 0x0968, 0x096b, 0x096e, 0x0971, 0x0974, 0x0977, + 0x097a, 0x2780, 0x2783, 0x2786, 0x2789, 0x000e, 0x0072, 0xffff, + 0x0008, 0x00bd, 0x002a, 0x0037, 0x0046, 0x004f, 0x005e, 0x006f, + // Entry 55800 - 5583F + 0x007c, 0x008b, 0x0094, 0x009f, 0x00ac, 0x0003, 0x0111, 0x0117, + 0x010b, 0x0001, 0x010d, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, + 0x0113, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x0119, 0x0002, + 0x0000, 0xffff, 0x042a, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0126, 0x0000, 0x0137, 0x0004, 0x0134, 0x012e, 0x012b, + 0x0131, 0x0001, 0x0072, 0x00ca, 0x0001, 0x0072, 0x00e1, 0x0001, + 0x0002, 0x001b, 0x0001, 0x0014, 0x0370, 0x0004, 0x0145, 0x013f, + 0x013c, 0x0142, 0x0001, 0x0072, 0x00f2, 0x0001, 0x0072, 0x00f2, + // Entry 55840 - 5587F + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x0151, + 0x01b6, 0x020d, 0x0242, 0x0313, 0x032e, 0x033f, 0x0350, 0x0002, + 0x0154, 0x0185, 0x0003, 0x0158, 0x0167, 0x0176, 0x000d, 0x0072, + 0xffff, 0x00ff, 0x0107, 0x010f, 0x0117, 0x0121, 0x012b, 0x0135, + 0x013d, 0x0147, 0x014f, 0x0159, 0x0163, 0x000d, 0x000e, 0xffff, + 0x01f0, 0x208b, 0x208e, 0x2091, 0x2094, 0x029c, 0x208b, 0x01f0, + 0x1ffb, 0x2097, 0x208b, 0x209a, 0x000d, 0x0072, 0xffff, 0x016d, + 0x0178, 0x0185, 0x0194, 0x01a1, 0x01ae, 0x01bb, 0x01c6, 0x01d3, + // Entry 55880 - 558BF + 0x01e2, 0x01ef, 0x0202, 0x0003, 0x0189, 0x0198, 0x01a7, 0x000d, + 0x0072, 0xffff, 0x020f, 0x0216, 0x021d, 0x0224, 0x022b, 0x0232, + 0x0239, 0x0240, 0x0247, 0x024e, 0x0255, 0x025c, 0x000d, 0x0012, + 0xffff, 0x3a93, 0x3aa8, 0x3aab, 0x3aae, 0x3ab1, 0x3a99, 0x3aa8, + 0x3a93, 0x3ab4, 0x3ab7, 0x3aa8, 0x3aba, 0x000d, 0x0072, 0xffff, + 0x0263, 0x0270, 0x027b, 0x028c, 0x029b, 0x02aa, 0x02b9, 0x02c6, + 0x02d5, 0x02e6, 0x02f5, 0x0306, 0x0002, 0x01b9, 0x01e3, 0x0005, + 0x01bf, 0x01c8, 0x01da, 0x0000, 0x01d1, 0x0007, 0x0008, 0x080d, + // Entry 558C0 - 558FF + 0x508b, 0x5090, 0x5095, 0x509a, 0x509f, 0x50a4, 0x0007, 0x0012, + 0x3a42, 0x3a9c, 0x3ab4, 0x3a93, 0x3a99, 0x3a9c, 0x3a93, 0x0007, + 0x0008, 0x080d, 0x508b, 0x5090, 0x5095, 0x509a, 0x509f, 0x50a4, + 0x0007, 0x0072, 0x0315, 0x0322, 0x0335, 0x0346, 0x0353, 0x0360, + 0x0371, 0x0005, 0x01e9, 0x01f2, 0x0204, 0x0000, 0x01fb, 0x0007, + 0x0008, 0x080d, 0x508b, 0x5090, 0x5095, 0x509a, 0x509f, 0x50a4, + 0x0007, 0x0012, 0x3a42, 0x3a9c, 0x3ab4, 0x3a93, 0x3a99, 0x3a9c, + 0x3a93, 0x0007, 0x0008, 0x080d, 0x508b, 0x5090, 0x5095, 0x509a, + // Entry 55900 - 5593F + 0x509f, 0x50a4, 0x0007, 0x0072, 0x0315, 0x0322, 0x0335, 0x0346, + 0x0353, 0x0360, 0x0371, 0x0002, 0x0210, 0x0229, 0x0003, 0x0214, + 0x021b, 0x0222, 0x0005, 0x005b, 0xffff, 0x0572, 0x057d, 0x0588, + 0x0593, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x0005, 0x005b, 0xffff, 0x059e, 0x05b2, 0x05c6, 0x05da, 0x0003, + 0x022d, 0x0234, 0x023b, 0x0005, 0x005b, 0xffff, 0x0572, 0x057d, + 0x0588, 0x0593, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x0005, 0x005b, 0xffff, 0x059e, 0x05b2, 0x05c6, 0x05da, + // Entry 55940 - 5597F + 0x0002, 0x0245, 0x02ac, 0x0003, 0x0249, 0x026a, 0x028b, 0x0008, + 0x0255, 0x025b, 0x0252, 0x025e, 0x0261, 0x0264, 0x0267, 0x0258, + 0x0001, 0x0072, 0x037e, 0x0001, 0x0072, 0x038f, 0x0001, 0x0072, + 0x0394, 0x0001, 0x0072, 0x03a7, 0x0001, 0x0072, 0x03ac, 0x0001, + 0x005b, 0x0601, 0x0001, 0x0072, 0x03b7, 0x0001, 0x0072, 0x03c4, + 0x0008, 0x0276, 0x027c, 0x0273, 0x027f, 0x0282, 0x0285, 0x0288, + 0x0279, 0x0001, 0x0072, 0x03cd, 0x0001, 0x0072, 0x038f, 0x0001, + 0x000e, 0x0296, 0x0001, 0x0072, 0x03a7, 0x0001, 0x0072, 0x03ac, + // Entry 55980 - 559BF + 0x0001, 0x005b, 0x0601, 0x0001, 0x0072, 0x03b7, 0x0001, 0x0072, + 0x03c4, 0x0008, 0x0297, 0x029d, 0x0294, 0x02a0, 0x02a3, 0x02a6, + 0x02a9, 0x029a, 0x0001, 0x0072, 0x037e, 0x0001, 0x0072, 0x038f, + 0x0001, 0x0072, 0x0394, 0x0001, 0x0072, 0x03a7, 0x0001, 0x0072, + 0x03ac, 0x0001, 0x005b, 0x0601, 0x0001, 0x0072, 0x03b7, 0x0001, + 0x0072, 0x03c4, 0x0003, 0x02b0, 0x02d1, 0x02f2, 0x0008, 0x02bc, + 0x02c2, 0x02b9, 0x02c5, 0x02c8, 0x02cb, 0x02ce, 0x02bf, 0x0001, + 0x0072, 0x03cd, 0x0001, 0x0072, 0x038f, 0x0001, 0x0072, 0x03da, + // Entry 559C0 - 559FF + 0x0001, 0x0072, 0x03a7, 0x0001, 0x0072, 0x03eb, 0x0001, 0x005b, + 0x063c, 0x0001, 0x0072, 0x03f6, 0x0001, 0x0072, 0x0401, 0x0008, + 0x02dd, 0x02e3, 0x02da, 0x02e6, 0x02e9, 0x02ec, 0x02ef, 0x02e0, + 0x0001, 0x0072, 0x03cd, 0x0001, 0x0072, 0x038f, 0x0001, 0x0072, + 0x03da, 0x0001, 0x0072, 0x03a7, 0x0001, 0x0072, 0x03eb, 0x0001, + 0x005b, 0x063c, 0x0001, 0x0072, 0x03f6, 0x0001, 0x0072, 0x0401, + 0x0008, 0x02fe, 0x0304, 0x02fb, 0x0307, 0x030a, 0x030d, 0x0310, + 0x0301, 0x0001, 0x0072, 0x03cd, 0x0001, 0x0072, 0x038f, 0x0001, + // Entry 55A00 - 55A3F + 0x0072, 0x03da, 0x0001, 0x0072, 0x03a7, 0x0001, 0x0072, 0x03eb, + 0x0001, 0x005b, 0x063c, 0x0001, 0x0072, 0x03f6, 0x0001, 0x0072, + 0x0401, 0x0003, 0x0322, 0x0328, 0x0317, 0x0002, 0x031a, 0x031e, + 0x0002, 0x0072, 0x0408, 0x0436, 0x0002, 0x0072, 0x041f, 0x0448, + 0x0001, 0x0324, 0x0002, 0x0072, 0x045a, 0x0467, 0x0001, 0x032a, + 0x0002, 0x0072, 0x046f, 0x047b, 0x0004, 0x033c, 0x0336, 0x0333, + 0x0339, 0x0001, 0x0072, 0x0482, 0x0001, 0x0072, 0x0497, 0x0001, + 0x0072, 0x04a6, 0x0001, 0x0007, 0x02e9, 0x0004, 0x034d, 0x0347, + // Entry 55A40 - 55A7F + 0x0344, 0x034a, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, + 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, 0x035e, + 0x0358, 0x0355, 0x035b, 0x0001, 0x0072, 0x00f2, 0x0001, 0x0072, + 0x00f2, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0005, + 0x0367, 0x0000, 0x0000, 0x0000, 0x03c2, 0x0002, 0x036a, 0x039e, + 0x0003, 0x036e, 0x037e, 0x038e, 0x000e, 0x0072, 0x050b, 0x04b4, + 0x04bf, 0x04d2, 0x04e1, 0x04ec, 0x04f7, 0x0502, 0x0517, 0x0522, + 0x0529, 0x0534, 0x0541, 0x0546, 0x000e, 0x0000, 0x003f, 0x0033, + // Entry 55A80 - 55ABF + 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, 0x2424, + 0x4414, 0x4417, 0x441a, 0x441d, 0x000e, 0x0072, 0x050b, 0x04b4, + 0x04bf, 0x04d2, 0x04e1, 0x04ec, 0x04f7, 0x0502, 0x0517, 0x0522, + 0x0529, 0x0534, 0x0541, 0x0546, 0x0003, 0x0000, 0x03a2, 0x03b2, + 0x000e, 0x0000, 0x003f, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, 0x441d, + 0x000e, 0x0072, 0x050b, 0x04b4, 0x054f, 0x055c, 0x0569, 0x0574, + 0x04f7, 0x0502, 0x0517, 0x057d, 0x0529, 0x0534, 0x0584, 0x0546, + // Entry 55AC0 - 55AFF + 0x0003, 0x03cb, 0x03d0, 0x03c6, 0x0001, 0x03c8, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x03cd, 0x0001, 0x0000, 0x04ef, 0x0001, 0x03d2, + 0x0001, 0x0000, 0x04ef, 0x0005, 0x03db, 0x0000, 0x0000, 0x0000, + 0x0440, 0x0002, 0x03de, 0x040f, 0x0003, 0x03e2, 0x03f1, 0x0400, + 0x000d, 0x0072, 0xffff, 0x0589, 0x0593, 0x059d, 0x05a7, 0x05b1, + 0x05bb, 0x05c5, 0x05cd, 0x05d5, 0x05dd, 0x05e7, 0x05ef, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, + 0x003f, 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, 0x000d, 0x0009, + // Entry 55B00 - 55B3F + 0xffff, 0x0766, 0x0773, 0x5860, 0x0795, 0x5871, 0x5811, 0x5880, + 0x588d, 0x589c, 0x58af, 0x07f8, 0x58ba, 0x0003, 0x0413, 0x0422, + 0x0431, 0x000d, 0x0072, 0xffff, 0x0589, 0x0593, 0x059d, 0x05a7, + 0x05b1, 0x05bb, 0x05c5, 0x05cd, 0x05d5, 0x05dd, 0x05e7, 0x05ef, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x003d, 0x003f, 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, 0x000d, + 0x0009, 0xffff, 0x0766, 0x0773, 0x5860, 0x0795, 0x5871, 0x5811, + 0x5880, 0x588d, 0x589c, 0x58af, 0x07f8, 0x58ba, 0x0003, 0x0449, + // Entry 55B40 - 55B7F + 0x044e, 0x0444, 0x0001, 0x0446, 0x0001, 0x0000, 0x0601, 0x0001, + 0x044b, 0x0001, 0x0000, 0x0601, 0x0001, 0x0450, 0x0001, 0x0000, + 0x0601, 0x0005, 0x0459, 0x0000, 0x0000, 0x0000, 0x04be, 0x0002, + 0x045c, 0x048d, 0x0003, 0x0460, 0x046f, 0x047e, 0x000d, 0x0047, + 0xffff, 0x0f4c, 0x0f54, 0x217d, 0x2188, 0x2068, 0x2074, 0x2081, + 0x208b, 0x0f96, 0x2194, 0x219c, 0x21aa, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, 0x0041, + 0x2424, 0x4414, 0x4417, 0x441a, 0x000d, 0x005b, 0xffff, 0x07c2, + // Entry 55B80 - 55BBF + 0x07d3, 0x2aad, 0x2ab8, 0x2ac4, 0x2ad5, 0x0852, 0x085f, 0x086c, + 0x2ae7, 0x2af4, 0x2b09, 0x0003, 0x0491, 0x04a0, 0x04af, 0x000d, + 0x0072, 0xffff, 0x05f9, 0x0600, 0x0607, 0x0612, 0x061e, 0x0629, + 0x0635, 0x063e, 0x0647, 0x064e, 0x0655, 0x0662, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x003d, 0x003f, + 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, 0x000d, 0x005b, 0xffff, + 0x07c2, 0x07d3, 0x2b1e, 0x2b29, 0x2ac4, 0x2ad5, 0x0852, 0x085f, + 0x086c, 0x2ae7, 0x2af4, 0x2b09, 0x0003, 0x04c7, 0x04cc, 0x04c2, + // Entry 55BC0 - 55BFF + 0x0001, 0x04c4, 0x0001, 0x0000, 0x06c8, 0x0001, 0x04c9, 0x0001, + 0x0000, 0x06c8, 0x0001, 0x04ce, 0x0001, 0x0000, 0x06c8, 0x0005, + 0x0000, 0x0000, 0x0000, 0x0000, 0x04d7, 0x0001, 0x04d9, 0x0001, + 0x04db, 0x00ec, 0x0072, 0x066f, 0x0686, 0x069f, 0x06b8, 0x06cf, + 0x06e6, 0x06fd, 0x0712, 0x0729, 0x073e, 0x0757, 0x0770, 0x0794, + 0x07b8, 0x07dc, 0x0802, 0x0826, 0x083b, 0x0853, 0x086c, 0x0883, + 0x089a, 0x08b3, 0x08ca, 0x08e3, 0x08fc, 0x0913, 0x092c, 0x0947, + 0x0960, 0x0977, 0x0990, 0x09a9, 0x09be, 0x09d5, 0x09ee, 0x0a07, + // Entry 55C00 - 55C3F + 0x0a22, 0x0a3d, 0x0a50, 0x0a65, 0x0a7a, 0x0a95, 0x0aaf, 0x0aca, + 0x0ae3, 0x0afa, 0x0b11, 0x0b26, 0x0b3b, 0x0b56, 0x0b71, 0x0b89, + 0x0ba2, 0x0bbb, 0x0bd6, 0x0bef, 0x0c0a, 0x0c25, 0x0c42, 0x0c5b, + 0x0c78, 0x0c91, 0x0caa, 0x0cc3, 0x0ce0, 0x0cf7, 0x0d10, 0x0d2d, + 0x0d44, 0x0d5d, 0x0d78, 0x0d8f, 0x0da8, 0x0dc5, 0x0ddc, 0x0df7, + 0x0e12, 0x0e2d, 0x0e49, 0x0e60, 0x0e7c, 0x0e93, 0x0eae, 0x0ec9, + 0x0ee4, 0x0eff, 0x0f16, 0x0f2f, 0x0f48, 0x0f61, 0x0f78, 0x0f93, + 0x0fac, 0x0fc5, 0x0fe0, 0x0ffb, 0x1010, 0x102b, 0x1044, 0x1060, + // Entry 55C40 - 55C7F + 0x1075, 0x108e, 0x10a7, 0x10c2, 0x10d9, 0x10f2, 0x110f, 0x112a, + 0x1143, 0x115e, 0x1179, 0x1192, 0x11ae, 0x11c9, 0x11e6, 0x11ff, + 0x121a, 0x1233, 0x124e, 0x1269, 0x1282, 0x129b, 0x12b4, 0x12d1, + 0x12ee, 0x1307, 0x1324, 0x133c, 0x1357, 0x1372, 0x138d, 0x13a8, + 0x13c1, 0x13da, 0x13f5, 0x140f, 0x1428, 0x1444, 0x145f, 0x1476, + 0x148d, 0x14a6, 0x14bf, 0x14da, 0x14f3, 0x1510, 0x1529, 0x1540, + 0x1559, 0x1572, 0x158c, 0x15a7, 0x15c0, 0x15db, 0x15f8, 0x1611, + 0x162a, 0x1643, 0x165e, 0x1679, 0x1696, 0x16af, 0x16ca, 0x16e5, + // Entry 55C80 - 55CBF + 0x16fc, 0x1715, 0x1732, 0x174b, 0x1760, 0x177d, 0x1792, 0x17ad, + 0x17c6, 0x17e1, 0x17fc, 0x1817, 0x1834, 0x184d, 0x186a, 0x1885, + 0x18a0, 0x18b7, 0x18d2, 0x18ed, 0x1908, 0x191f, 0x1938, 0x1951, + 0x196a, 0x1987, 0x19a2, 0x19bb, 0x19d6, 0x19ef, 0x1a0a, 0x1a27, + 0x1a42, 0x1a5b, 0x1a77, 0x1a90, 0x1aa9, 0x1ac0, 0x1add, 0x1af8, + 0x1b13, 0x1b2a, 0x1b43, 0x1b60, 0x1b7d, 0x1b94, 0x1bb1, 0x1bca, + 0x1be5, 0x1bfe, 0x1c17, 0x1c33, 0x1c4e, 0x1c67, 0x1c81, 0x1c9c, + 0x1cb7, 0x1cd0, 0x1ce9, 0x1d04, 0x1d1d, 0x1d34, 0x1d4b, 0x1d64, + // Entry 55CC0 - 55CFF + 0x1d80, 0x1d99, 0x1db4, 0x1dcb, 0x1dd8, 0x1de5, 0x1df0, 0x0001, + 0x05cb, 0x0002, 0x05ce, 0x05f0, 0x0003, 0x05d2, 0x0000, 0x05e1, + 0x000d, 0x0072, 0xffff, 0x1dfd, 0x1e05, 0x1e0d, 0x1e15, 0x1e1c, + 0x1e24, 0x1e2c, 0x1e34, 0x1e3d, 0x1e46, 0x1e4d, 0x1e55, 0x000d, + 0x0072, 0xffff, 0x1e5d, 0x1e70, 0x1e85, 0x1e15, 0x1e92, 0x1e9f, + 0x1eb0, 0x1e34, 0x1e3d, 0x1e46, 0x1eb9, 0x1ec6, 0x0001, 0x05f2, + 0x000d, 0x0072, 0xffff, 0x1ed3, 0x1eda, 0x1ee1, 0x1e15, 0x1ee8, + 0x1eef, 0x1ef6, 0x1e34, 0x1e3d, 0x1e46, 0x1efd, 0x1f04, 0x0042, + // Entry 55D00 - 55D3F + 0x0644, 0x0649, 0x064e, 0x0653, 0x0672, 0x0691, 0x06b0, 0x06cf, + 0x06ee, 0x070d, 0x072c, 0x074b, 0x076a, 0x078d, 0x07b0, 0x07d3, + 0x07d8, 0x07dd, 0x07e2, 0x0803, 0x0824, 0x0845, 0x084a, 0x084f, + 0x0854, 0x0859, 0x085e, 0x0863, 0x0868, 0x086d, 0x0872, 0x088e, + 0x08aa, 0x08c6, 0x08e2, 0x08fe, 0x091a, 0x0936, 0x0952, 0x096e, + 0x098a, 0x09a6, 0x09c2, 0x09de, 0x09fa, 0x0a16, 0x0a32, 0x0a4e, + 0x0a6a, 0x0a86, 0x0aa2, 0x0abe, 0x0ac3, 0x0ac8, 0x0acd, 0x0aeb, + 0x0b09, 0x0b27, 0x0b45, 0x0b63, 0x0b81, 0x0b9f, 0x0bbd, 0x0bdb, + // Entry 55D40 - 55D7F + 0x0be0, 0x0be5, 0x0001, 0x0646, 0x0001, 0x0009, 0x08c0, 0x0001, + 0x064b, 0x0001, 0x0072, 0x1f0b, 0x0001, 0x0650, 0x0001, 0x0012, + 0x018a, 0x0003, 0x0657, 0x065a, 0x065f, 0x0001, 0x0072, 0x1f0f, + 0x0003, 0x0072, 0x1f16, 0x1f21, 0x1f35, 0x0002, 0x0662, 0x066a, + 0x0006, 0x0072, 0x1f9b, 0x1f53, 0xffff, 0xffff, 0x1f69, 0x1f81, + 0x0006, 0x0072, 0x1ff5, 0x1fb3, 0xffff, 0xffff, 0x1fc7, 0x1fdd, + 0x0003, 0x0676, 0x0679, 0x067e, 0x0001, 0x0073, 0x0000, 0x0003, + 0x0072, 0x1f16, 0x1f21, 0x1f35, 0x0002, 0x0681, 0x0689, 0x0006, + // Entry 55D80 - 55DBF + 0x0073, 0x0004, 0x0004, 0xffff, 0xffff, 0x0004, 0x0004, 0x0006, + 0x0073, 0x0017, 0x0017, 0xffff, 0xffff, 0x0017, 0x0017, 0x0003, + 0x0695, 0x0698, 0x069d, 0x0001, 0x0073, 0x0000, 0x0003, 0x0072, + 0x1f16, 0x1f21, 0x1f35, 0x0002, 0x06a0, 0x06a8, 0x0006, 0x0073, + 0x0028, 0x0028, 0xffff, 0xffff, 0x0028, 0x0028, 0x0006, 0x0073, + 0x0017, 0x0017, 0xffff, 0xffff, 0x0017, 0x0017, 0x0003, 0x06b4, + 0x06b7, 0x06bc, 0x0001, 0x0008, 0x0b3d, 0x0003, 0x0073, 0x0035, + 0x0057, 0x0073, 0x0002, 0x06bf, 0x06c7, 0x0006, 0x005c, 0x4aef, + // Entry 55DC0 - 55DFF + 0x029b, 0xffff, 0xffff, 0x4aad, 0x4acd, 0x0006, 0x0073, 0x00f3, + 0x0099, 0xffff, 0xffff, 0x00b5, 0x00d3, 0x0003, 0x06d3, 0x06d6, + 0x06db, 0x0001, 0x0008, 0x0ca5, 0x0003, 0x0073, 0x0111, 0x0128, + 0x0139, 0x0002, 0x06de, 0x06e6, 0x0006, 0x005c, 0x03a2, 0x03a2, + 0xffff, 0xffff, 0x03a2, 0x03a2, 0x0006, 0x0073, 0x0154, 0x0154, + 0xffff, 0xffff, 0x0154, 0x0154, 0x0003, 0x06f2, 0x06f5, 0x06fa, + 0x0001, 0x0008, 0x0ca5, 0x0003, 0x0073, 0x0111, 0x0128, 0x0139, + 0x0002, 0x06fd, 0x0705, 0x0006, 0x0065, 0x02ba, 0x02ba, 0xffff, + // Entry 55E00 - 55E3F + 0xffff, 0x02ba, 0x02ba, 0x0006, 0x0073, 0x0154, 0x0154, 0xffff, + 0xffff, 0x0154, 0x0154, 0x0003, 0x0711, 0x0714, 0x0719, 0x0001, + 0x0073, 0x0167, 0x0003, 0x0073, 0x0174, 0x0192, 0x01aa, 0x0002, + 0x071c, 0x0724, 0x0006, 0x0073, 0x0222, 0x01cc, 0xffff, 0xffff, + 0x01e8, 0x0204, 0x0006, 0x0073, 0x028e, 0x023e, 0xffff, 0xffff, + 0x0258, 0x0272, 0x0003, 0x0730, 0x0733, 0x0738, 0x0001, 0x0073, + 0x02a8, 0x0003, 0x0073, 0x0174, 0x0192, 0x01aa, 0x0002, 0x073b, + 0x0743, 0x0006, 0x0073, 0x02b0, 0x02b0, 0xffff, 0xffff, 0x02b0, + // Entry 55E40 - 55E7F + 0x02b0, 0x0006, 0x0073, 0x02c7, 0x02c7, 0xffff, 0xffff, 0x02c7, + 0x02c7, 0x0003, 0x074f, 0x0752, 0x0757, 0x0001, 0x0073, 0x02a8, + 0x0003, 0x0073, 0x0174, 0x0192, 0x01aa, 0x0002, 0x075a, 0x0762, + 0x0006, 0x0073, 0x02dc, 0x02dc, 0xffff, 0xffff, 0x02dc, 0x02dc, + 0x0006, 0x0073, 0x02c7, 0x02c7, 0xffff, 0xffff, 0x02c7, 0x02c7, + 0x0004, 0x076f, 0x0772, 0x0777, 0x078a, 0x0001, 0x0073, 0x02ed, + 0x0003, 0x0073, 0x02fc, 0x0318, 0x032e, 0x0002, 0x077a, 0x0782, + 0x0006, 0x0073, 0x03a2, 0x034e, 0xffff, 0xffff, 0x036c, 0x0386, + // Entry 55E80 - 55EBF + 0x0006, 0x0073, 0x040a, 0x03bc, 0xffff, 0xffff, 0x03d8, 0x03f0, + 0x0001, 0x0073, 0x0422, 0x0004, 0x0792, 0x0795, 0x079a, 0x07ad, + 0x0001, 0x0073, 0x0438, 0x0003, 0x0073, 0x02fc, 0x0318, 0x032e, + 0x0002, 0x079d, 0x07a5, 0x0006, 0x0073, 0x0440, 0x0440, 0xffff, + 0xffff, 0x0440, 0x0440, 0x0006, 0x0073, 0x0457, 0x0457, 0xffff, + 0xffff, 0x0457, 0x0457, 0x0001, 0x0073, 0x0422, 0x0004, 0x07b5, + 0x07b8, 0x07bd, 0x07d0, 0x0001, 0x0073, 0x0438, 0x0003, 0x0073, + 0x02fc, 0x0318, 0x032e, 0x0002, 0x07c0, 0x07c8, 0x0006, 0x0073, + // Entry 55EC0 - 55EFF + 0x046c, 0x046c, 0xffff, 0xffff, 0x046c, 0x046c, 0x0006, 0x0073, + 0x0457, 0x0457, 0xffff, 0xffff, 0x0457, 0x0457, 0x0001, 0x0073, + 0x0422, 0x0001, 0x07d5, 0x0001, 0x0073, 0x047d, 0x0001, 0x07da, + 0x0001, 0x0073, 0x0499, 0x0001, 0x07df, 0x0001, 0x0073, 0x0499, + 0x0003, 0x07e6, 0x07e9, 0x07f0, 0x0001, 0x005b, 0x063c, 0x0005, + 0x0073, 0x04c1, 0x04cc, 0x04dd, 0x04ae, 0x04ea, 0x0002, 0x07f3, + 0x07fb, 0x0006, 0x005c, 0x0892, 0x087a, 0xffff, 0xffff, 0x4b0f, + 0x4b25, 0x0006, 0x0073, 0x0541, 0x0501, 0xffff, 0xffff, 0x0517, + // Entry 55F00 - 55F3F + 0x052b, 0x0003, 0x0807, 0x080a, 0x0811, 0x0001, 0x0008, 0x10c6, + 0x0005, 0x0073, 0x04c1, 0x04cc, 0x04dd, 0x04ae, 0x04ea, 0x0002, + 0x0814, 0x081c, 0x0006, 0x005c, 0x090c, 0x090c, 0xffff, 0xffff, + 0x090c, 0x090c, 0x0006, 0x0073, 0x0555, 0x0555, 0xffff, 0xffff, + 0x0555, 0x0555, 0x0003, 0x0828, 0x082b, 0x0832, 0x0001, 0x0008, + 0x10c6, 0x0005, 0x0073, 0x04c1, 0x04cc, 0x04dd, 0x04ae, 0x04ea, + 0x0002, 0x0835, 0x083d, 0x0006, 0x0065, 0x051f, 0x051f, 0xffff, + 0xffff, 0x051f, 0x051f, 0x0006, 0x0073, 0x0579, 0x0568, 0xffff, + // Entry 55F40 - 55F7F + 0xffff, 0x0579, 0x0579, 0x0001, 0x0847, 0x0001, 0x0073, 0x0584, + 0x0001, 0x084c, 0x0001, 0x0073, 0x0584, 0x0001, 0x0851, 0x0001, + 0x0073, 0x0584, 0x0001, 0x0856, 0x0001, 0x0073, 0x0596, 0x0001, + 0x085b, 0x0001, 0x0073, 0x0596, 0x0001, 0x0860, 0x0001, 0x0073, + 0x0596, 0x0001, 0x0865, 0x0001, 0x0073, 0x05aa, 0x0001, 0x086a, + 0x0001, 0x0073, 0x05aa, 0x0001, 0x086f, 0x0001, 0x0073, 0x05aa, + 0x0003, 0x0000, 0x0876, 0x087b, 0x0003, 0x0073, 0x05c0, 0x05dc, + 0x05f2, 0x0002, 0x087e, 0x0886, 0x0006, 0x0073, 0x062e, 0x0612, + // Entry 55F80 - 55FBF + 0xffff, 0xffff, 0x062e, 0x064a, 0x0006, 0x0073, 0x0680, 0x0666, + 0xffff, 0xffff, 0x0680, 0x069a, 0x0003, 0x0000, 0x0892, 0x0897, + 0x0003, 0x0073, 0x06b4, 0x06c8, 0x06d6, 0x0002, 0x089a, 0x08a2, + 0x0006, 0x0073, 0x062e, 0x0612, 0xffff, 0xffff, 0x062e, 0x064a, + 0x0006, 0x0073, 0x0680, 0x0666, 0xffff, 0xffff, 0x0680, 0x069a, + 0x0003, 0x0000, 0x08ae, 0x08b3, 0x0003, 0x0073, 0x06ee, 0x06c8, + 0x06fb, 0x0002, 0x08b6, 0x08be, 0x0006, 0x0073, 0x062e, 0x0612, + 0xffff, 0xffff, 0x062e, 0x064a, 0x0006, 0x0073, 0x0680, 0x0666, + // Entry 55FC0 - 55FFF + 0xffff, 0xffff, 0x0680, 0x069a, 0x0003, 0x0000, 0x08ca, 0x08cf, + 0x0003, 0x0073, 0x070a, 0x072e, 0x074c, 0x0002, 0x08d2, 0x08da, + 0x0006, 0x0073, 0x07dc, 0x0774, 0xffff, 0xffff, 0x0796, 0x07b8, + 0x0006, 0x0073, 0x0860, 0x07fe, 0xffff, 0xffff, 0x081e, 0x083e, + 0x0003, 0x0000, 0x08e6, 0x08eb, 0x0003, 0x0073, 0x0880, 0x0896, + 0x08a6, 0x0002, 0x08ee, 0x08f6, 0x0006, 0x0073, 0x07dc, 0x0774, + 0xffff, 0xffff, 0x0796, 0x07b8, 0x0006, 0x0073, 0x0860, 0x07fe, + 0xffff, 0xffff, 0x081e, 0x083e, 0x0003, 0x0000, 0x0902, 0x0907, + // Entry 56000 - 5603F + 0x0003, 0x0073, 0x08c0, 0x0896, 0x08cd, 0x0002, 0x090a, 0x0912, + 0x0006, 0x0073, 0x07dc, 0x0774, 0xffff, 0xffff, 0x0796, 0x07b8, + 0x0006, 0x0073, 0x0860, 0x07fe, 0xffff, 0xffff, 0x081e, 0x083e, + 0x0003, 0x0000, 0x091e, 0x0923, 0x0003, 0x0073, 0x08dc, 0x08fe, + 0x091a, 0x0002, 0x0926, 0x092e, 0x0006, 0x0073, 0x09a2, 0x0940, + 0xffff, 0xffff, 0x0960, 0x0980, 0x0006, 0x0073, 0x0a1e, 0x09c2, + 0xffff, 0xffff, 0x09e0, 0x09fe, 0x0003, 0x0000, 0x093a, 0x093f, + 0x0003, 0x0073, 0x0a3c, 0x0a52, 0x0a62, 0x0002, 0x0942, 0x094a, + // Entry 56040 - 5607F + 0x0006, 0x0073, 0x09a2, 0x0940, 0xffff, 0xffff, 0x0960, 0x0980, + 0x0006, 0x0073, 0x0a1e, 0x09c2, 0xffff, 0xffff, 0x09e0, 0x09fe, + 0x0003, 0x0000, 0x0956, 0x095b, 0x0003, 0x0073, 0x0a7c, 0x0a52, + 0x0a89, 0x0002, 0x095e, 0x0966, 0x0006, 0x0073, 0x09a2, 0x0940, + 0xffff, 0xffff, 0x0960, 0x0980, 0x0006, 0x0073, 0x0a1e, 0x09c2, + 0xffff, 0xffff, 0x09e0, 0x09fe, 0x0003, 0x0000, 0x0972, 0x0977, + 0x0003, 0x0073, 0x0a98, 0x0ab4, 0x0aca, 0x0002, 0x097a, 0x0982, + 0x0006, 0x0073, 0x0b06, 0x0aea, 0xffff, 0xffff, 0x0b06, 0x0b22, + // Entry 56080 - 560BF + 0x0006, 0x0073, 0x0b56, 0x0b3c, 0xffff, 0xffff, 0x0b56, 0x0b70, + 0x0003, 0x0000, 0x098e, 0x0993, 0x0003, 0x0073, 0x0b88, 0x0b9c, + 0x0baa, 0x0002, 0x0996, 0x099e, 0x0006, 0x0073, 0x0b06, 0x0aea, + 0xffff, 0xffff, 0x0b06, 0x0b22, 0x0006, 0x0073, 0x0b56, 0x0b3c, + 0xffff, 0xffff, 0x0b56, 0x0b70, 0x0003, 0x0000, 0x09aa, 0x09af, + 0x0003, 0x0073, 0x0bc2, 0x0b9c, 0x0bcf, 0x0002, 0x09b2, 0x09ba, + 0x0006, 0x0073, 0x0b06, 0x0aea, 0xffff, 0xffff, 0x0b06, 0x0b22, + 0x0006, 0x0073, 0x0b56, 0x0b3c, 0xffff, 0xffff, 0x0b56, 0x0b70, + // Entry 560C0 - 560FF + 0x0003, 0x0000, 0x09c6, 0x09cb, 0x0003, 0x0073, 0x0bde, 0x0c00, + 0x0c1c, 0x0002, 0x09ce, 0x09d6, 0x0006, 0x0073, 0x0ca0, 0x0c42, + 0xffff, 0xffff, 0x0c5e, 0x0c7e, 0x0006, 0x0073, 0x0d18, 0x0cc0, + 0xffff, 0xffff, 0x0cda, 0x0cf8, 0x0003, 0x0000, 0x09e2, 0x09e7, + 0x0003, 0x0073, 0x0d36, 0x0d4c, 0x0d5c, 0x0002, 0x09ea, 0x09f2, + 0x0006, 0x0073, 0x0ca0, 0x0c42, 0xffff, 0xffff, 0x0c5e, 0x0c7e, + 0x0006, 0x0073, 0x0d18, 0x0cc0, 0xffff, 0xffff, 0x0cda, 0x0cf8, + 0x0003, 0x0000, 0x09fe, 0x0a03, 0x0003, 0x0073, 0x0d76, 0x0d4c, + // Entry 56100 - 5613F + 0x0d83, 0x0002, 0x0a06, 0x0a0e, 0x0006, 0x0073, 0x0ca0, 0x0c42, + 0xffff, 0xffff, 0x0c5e, 0x0c7e, 0x0006, 0x0073, 0x0d18, 0x0cc0, + 0xffff, 0xffff, 0x0cda, 0x0cf8, 0x0003, 0x0000, 0x0a1a, 0x0a1f, + 0x0003, 0x0073, 0x0d92, 0x0db2, 0x0dcc, 0x0002, 0x0a22, 0x0a2a, + 0x0006, 0x0073, 0x0e10, 0x0df0, 0xffff, 0xffff, 0x0e10, 0x0e30, + 0x0006, 0x0073, 0x0e6e, 0x0e50, 0xffff, 0xffff, 0x0e6e, 0x0e8c, + 0x0003, 0x0000, 0x0a36, 0x0a3b, 0x0003, 0x0073, 0x0eaa, 0x0ebe, + 0x0ecc, 0x0002, 0x0a3e, 0x0a46, 0x0006, 0x0073, 0x0e10, 0x0df0, + // Entry 56140 - 5617F + 0xffff, 0xffff, 0x0e10, 0x0e30, 0x0006, 0x0073, 0x0e6e, 0x0e50, + 0xffff, 0xffff, 0x0e6e, 0x0e8c, 0x0003, 0x0000, 0x0a52, 0x0a57, + 0x0003, 0x0073, 0x0ee4, 0x0ebe, 0x0ef1, 0x0002, 0x0a5a, 0x0a62, + 0x0006, 0x0073, 0x0e10, 0x0df0, 0xffff, 0xffff, 0x0e10, 0x0e30, + 0x0006, 0x0073, 0x0e6e, 0x0e50, 0xffff, 0xffff, 0x0e6e, 0x0e8c, + 0x0003, 0x0000, 0x0a6e, 0x0a73, 0x0003, 0x0073, 0x0f00, 0x0f1c, + 0x0f32, 0x0002, 0x0a76, 0x0a7e, 0x0006, 0x0073, 0x0f6e, 0x0f52, + 0xffff, 0xffff, 0x0f6e, 0x0f8a, 0x0006, 0x0073, 0x0fbe, 0x0fa4, + // Entry 56180 - 561BF + 0xffff, 0xffff, 0x0fbe, 0x0fd8, 0x0003, 0x0000, 0x0a8a, 0x0a8f, + 0x0003, 0x0073, 0x0ff0, 0x1004, 0x1012, 0x0002, 0x0a92, 0x0a9a, + 0x0006, 0x0073, 0x0f6e, 0x0f52, 0xffff, 0xffff, 0x0f6e, 0x0f8a, + 0x0006, 0x0073, 0x0fbe, 0x0fa4, 0xffff, 0xffff, 0x0fbe, 0x0fd8, + 0x0003, 0x0000, 0x0aa6, 0x0aab, 0x0003, 0x0073, 0x102a, 0x1004, + 0x1037, 0x0002, 0x0aae, 0x0ab6, 0x0006, 0x0073, 0x0f6e, 0x0f52, + 0xffff, 0xffff, 0x0f6e, 0x0f8a, 0x0006, 0x0073, 0x0fbe, 0x0fa4, + 0xffff, 0xffff, 0x0fbe, 0x0fd8, 0x0001, 0x0ac0, 0x0001, 0x0073, + // Entry 561C0 - 561FF + 0x1046, 0x0001, 0x0ac5, 0x0001, 0x0073, 0x1046, 0x0001, 0x0aca, + 0x0001, 0x0073, 0x1046, 0x0003, 0x0ad1, 0x0ad4, 0x0ad8, 0x0001, + 0x0009, 0x08c7, 0x0002, 0x0073, 0xffff, 0x1050, 0x0002, 0x0adb, + 0x0ae3, 0x0006, 0x0073, 0x1082, 0x1066, 0xffff, 0xffff, 0x1082, + 0x109e, 0x0006, 0x0073, 0x10d2, 0x10b8, 0xffff, 0xffff, 0x10d2, + 0x10ec, 0x0003, 0x0aef, 0x0af2, 0x0af6, 0x0001, 0x0008, 0x0a09, + 0x0002, 0x0073, 0xffff, 0x1050, 0x0002, 0x0af9, 0x0b01, 0x0006, + 0x005c, 0x00d8, 0x00d8, 0xffff, 0xffff, 0x00d8, 0x00d8, 0x0006, + // Entry 56200 - 5623F + 0x0073, 0x1104, 0x1104, 0xffff, 0xffff, 0x1104, 0x1104, 0x0003, + 0x0b0d, 0x0b10, 0x0b14, 0x0001, 0x0008, 0x0a09, 0x0002, 0x0073, + 0xffff, 0x1050, 0x0002, 0x0b17, 0x0b1f, 0x0006, 0x0073, 0x1118, + 0x1118, 0xffff, 0xffff, 0x1118, 0x1118, 0x0006, 0x0073, 0x1104, + 0x1104, 0xffff, 0xffff, 0x1104, 0x1104, 0x0003, 0x0b2b, 0x0b2e, + 0x0b32, 0x0001, 0x0073, 0x1128, 0x0002, 0x0073, 0xffff, 0x1137, + 0x0002, 0x0b35, 0x0b3d, 0x0006, 0x0073, 0x116d, 0x114f, 0xffff, + 0xffff, 0x116d, 0x118b, 0x0006, 0x0073, 0x11c3, 0x11a7, 0xffff, + // Entry 56240 - 5627F + 0xffff, 0x11c3, 0x11df, 0x0003, 0x0b49, 0x0b4c, 0x0b50, 0x0001, + 0x0008, 0x1ca1, 0x0002, 0x0073, 0xffff, 0x1137, 0x0002, 0x0b53, + 0x0b5b, 0x0006, 0x0073, 0x11f9, 0x11f9, 0xffff, 0xffff, 0x11f9, + 0x11f9, 0x0006, 0x0073, 0x120d, 0x120d, 0xffff, 0xffff, 0x120d, + 0x120d, 0x0003, 0x0b67, 0x0b6a, 0x0b6e, 0x0001, 0x0008, 0x1ca1, + 0x0002, 0x0073, 0xffff, 0x1137, 0x0002, 0x0b71, 0x0b79, 0x0006, + 0x0073, 0x121f, 0x121f, 0xffff, 0xffff, 0x121f, 0x121f, 0x0006, + 0x0073, 0x120d, 0x120d, 0xffff, 0xffff, 0x120d, 0x120d, 0x0003, + // Entry 56280 - 562BF + 0x0b85, 0x0b88, 0x0b8c, 0x0001, 0x0008, 0x1cca, 0x0002, 0x0073, + 0xffff, 0x122d, 0x0002, 0x0b8f, 0x0b97, 0x0006, 0x005c, 0x4b3d, + 0x1763, 0xffff, 0xffff, 0x4b3d, 0x179f, 0x0006, 0x0073, 0x1254, + 0x1238, 0xffff, 0xffff, 0x1254, 0x1270, 0x0003, 0x0ba3, 0x0ba6, + 0x0baa, 0x0001, 0x000e, 0x01f0, 0x0002, 0x0073, 0xffff, 0x122d, + 0x0002, 0x0bad, 0x0bb5, 0x0006, 0x0073, 0x128a, 0x128a, 0xffff, + 0xffff, 0x128a, 0x128a, 0x0006, 0x0073, 0x129c, 0x129c, 0xffff, + 0xffff, 0x129c, 0x129c, 0x0003, 0x0bc1, 0x0bc4, 0x0bc8, 0x0001, + // Entry 562C0 - 562FF + 0x000e, 0x01f0, 0x0002, 0x0073, 0xffff, 0x122d, 0x0002, 0x0bcb, + 0x0bd3, 0x0006, 0x0073, 0x12ac, 0x12ac, 0xffff, 0xffff, 0x12ac, + 0x12ac, 0x0006, 0x0073, 0x129c, 0x129c, 0xffff, 0xffff, 0x129c, + 0x129c, 0x0001, 0x0bdd, 0x0001, 0x0073, 0x12b8, 0x0001, 0x0be2, + 0x0001, 0x0073, 0x12b8, 0x0001, 0x0be7, 0x0001, 0x0073, 0x12b8, + 0x0004, 0x0bef, 0x0bf4, 0x0bf9, 0x0c08, 0x0003, 0x0000, 0x1dc7, + 0x4333, 0x432f, 0x0003, 0x0073, 0x12d0, 0x12dc, 0x12f6, 0x0002, + 0x0000, 0x0bfc, 0x0003, 0x0000, 0x0c03, 0x0c00, 0x0001, 0x0073, + // Entry 56300 - 5633F + 0x131a, 0x0003, 0x0073, 0xffff, 0x135a, 0x139a, 0x0002, 0x0000, + 0x0c0b, 0x0003, 0x0c0f, 0x0d4f, 0x0caf, 0x009e, 0x0073, 0xffff, + 0xffff, 0xffff, 0xffff, 0x14f9, 0x15c2, 0x164c, 0x16e2, 0x17fc, + 0x18fe, 0x1a06, 0x1b32, 0x1b97, 0x1c0f, 0x1c9c, 0x1d41, 0x1e15, + 0x1eae, 0x1f47, 0x202e, 0x2148, 0x2217, 0x22ec, 0x2394, 0x2463, + 0xffff, 0xffff, 0x2542, 0xffff, 0x2601, 0xffff, 0x2723, 0x27e6, + 0x2879, 0x290c, 0xffff, 0xffff, 0x2a12, 0x2ab7, 0x2b68, 0xffff, + 0xffff, 0xffff, 0x2c64, 0xffff, 0x2d39, 0x2e14, 0xffff, 0x2f1b, + // Entry 56340 - 5637F + 0x2fe4, 0x30cb, 0xffff, 0xffff, 0xffff, 0xffff, 0x3249, 0xffff, + 0xffff, 0x331c, 0x33e5, 0xffff, 0xffff, 0x352d, 0x35f9, 0x3689, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3855, 0x38e2, + 0x3975, 0x3a14, 0x3aa1, 0xffff, 0xffff, 0x3baa, 0xffff, 0x3c6e, + 0xffff, 0xffff, 0x3d7d, 0xffff, 0x3e72, 0xffff, 0xffff, 0xffff, + 0xffff, 0x3fd5, 0xffff, 0x40c9, 0x41b6, 0x4297, 0x4336, 0xffff, + 0xffff, 0xffff, 0x443e, 0x452e, 0x45df, 0xffff, 0xffff, 0x4709, + 0x481a, 0x48c5, 0x4946, 0xffff, 0xffff, 0x4a52, 0x4af7, 0x4b6f, + // Entry 56380 - 563BF + 0xffff, 0x4c44, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x4eaa, + 0x4f49, 0x4fdc, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x51f5, 0xffff, 0xffff, 0x52da, 0xffff, 0x53c0, 0xffff, + 0x54a1, 0x552b, 0x55cd, 0xffff, 0x56b6, 0x5767, 0xffff, 0xffff, + 0xffff, 0x58b3, 0x5940, 0xffff, 0xffff, 0x13cb, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x4dcd, 0x009e, 0x0073, 0x1424, + 0x144e, 0x148b, 0x14c0, 0x1530, 0x15e4, 0x1672, 0x1734, 0x1846, + 0x194a, 0x1a5e, 0x1b47, 0x1bb3, 0x1c32, 0x1cc7, 0x1d7a, 0x1e3c, + // Entry 563C0 - 563FF + 0x1ed5, 0x1f88, 0x2080, 0x2181, 0x2252, 0x2318, 0x23cd, 0x2489, + 0x24f9, 0x2519, 0x256b, 0x25e1, 0x263b, 0x26d3, 0x2758, 0x280b, + 0x289e, 0x2934, 0x29a8, 0x29d9, 0x2a3d, 0x2ae6, 0x2b86, 0x2be6, + 0x2c04, 0x2c33, 0x2c93, 0x2d15, 0x2d76, 0x2e49, 0x2ed7, 0x2f52, + 0x3025, 0x30eb, 0x314f, 0x3183, 0x31f3, 0x3218, 0x3269, 0x32cd, + 0x3304, 0x3353, 0x341e, 0x34e1, 0x350f, 0x3565, 0x361d, 0x36a7, + 0x3707, 0x3743, 0x377a, 0x37a0, 0x37e1, 0x381a, 0x3878, 0x3907, + 0x399e, 0x3a37, 0x3ac8, 0x3b3a, 0x3b71, 0x3bcf, 0x3c3d, 0x3c99, + // Entry 56400 - 5643F + 0x3d13, 0x3d50, 0x3db1, 0x3e3d, 0x3e9b, 0x3f11, 0x3f35, 0x3f5d, + 0x3f98, 0x400a, 0x4098, 0x410c, 0x41f5, 0x42c0, 0x435d, 0x43cf, + 0x43ef, 0x441e, 0x4482, 0x455d, 0x461c, 0x46a9, 0x46d6, 0x4758, + 0x4847, 0x48e4, 0x496c, 0x49dc, 0x4a0b, 0x4a7d, 0x4b13, 0x4b99, + 0x4c11, 0x4c8d, 0x4d43, 0x4d78, 0x4da9, 0x4e44, 0x4e79, 0x4ed3, + 0x4f6e, 0x500b, 0x508d, 0x50cc, 0x50f2, 0x512f, 0x5175, 0x5199, + 0x51c6, 0x5215, 0x5279, 0x52a5, 0x530b, 0x5391, 0x53ee, 0x546e, + 0x54c3, 0x5555, 0x5602, 0x5690, 0x56e5, 0x5794, 0x5812, 0x5843, + // Entry 56440 - 5647F + 0x5870, 0x58d6, 0x5971, 0x34b4, 0xffff, 0x13dc, 0xffff, 0xffff, + 0xffff, 0xffff, 0x3d3d, 0xffff, 0x4de8, 0x009e, 0x0073, 0xffff, + 0xffff, 0xffff, 0xffff, 0x157e, 0x161d, 0x16af, 0x179d, 0x18a7, + 0x19ad, 0x1acd, 0x1b74, 0x1be6, 0x1c6c, 0x1d09, 0x1dca, 0x1e7a, + 0x1f13, 0x1fe0, 0x20e9, 0x21d1, 0x22a4, 0x235b, 0x241d, 0x24c6, + 0xffff, 0xffff, 0x25ab, 0xffff, 0x268c, 0xffff, 0x27a4, 0x2847, + 0x28da, 0x2973, 0xffff, 0xffff, 0x2a7f, 0x2b2c, 0x2bbb, 0xffff, + 0xffff, 0xffff, 0x2cd9, 0xffff, 0x2dca, 0x2e95, 0xffff, 0x2fa0, + // Entry 56480 - 564BF + 0x307d, 0x3122, 0xffff, 0xffff, 0xffff, 0xffff, 0x32a0, 0xffff, + 0xffff, 0x33a1, 0x346e, 0xffff, 0xffff, 0x35b4, 0x3658, 0x36dc, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x38b2, 0x3943, + 0x39de, 0x3a71, 0x3b06, 0xffff, 0xffff, 0x3c0b, 0xffff, 0x3cdb, + 0xffff, 0xffff, 0x3dfc, 0xffff, 0x3edb, 0xffff, 0xffff, 0xffff, + 0xffff, 0x4056, 0xffff, 0x4166, 0x424b, 0x4300, 0x439b, 0xffff, + 0xffff, 0xffff, 0x44dd, 0x45a3, 0x4670, 0xffff, 0xffff, 0x47be, + 0x488b, 0x491a, 0x49a9, 0xffff, 0xffff, 0x4abf, 0x4b46, 0x4bda, + // Entry 564C0 - 564FF + 0xffff, 0x4ced, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x4f13, + 0x4faa, 0x5051, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x524c, 0xffff, 0xffff, 0x5353, 0xffff, 0x5433, 0xffff, + 0x54fc, 0x5596, 0x564e, 0xffff, 0x572b, 0x57d8, 0xffff, 0xffff, + 0xffff, 0x5910, 0x59b9, 0xffff, 0xffff, 0x1405, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x4e1b, 0x0003, 0x0004, 0x04ed, + 0x0947, 0x0012, 0x0017, 0x0000, 0x0030, 0x0000, 0x0097, 0x0000, + 0x00fe, 0x0129, 0x034d, 0x03b1, 0x0411, 0x0000, 0x0000, 0x0000, + // Entry 56500 - 5653F + 0x0000, 0x0000, 0x0471, 0x04d1, 0x0005, 0x0000, 0x0000, 0x0000, + 0x0000, 0x001d, 0x0003, 0x0026, 0x002b, 0x0021, 0x0001, 0x0023, + 0x0001, 0x0000, 0x0000, 0x0001, 0x0028, 0x0001, 0x0000, 0x0000, + 0x0001, 0x002d, 0x0001, 0x0000, 0x0000, 0x0005, 0x0036, 0x0000, + 0x0000, 0x0000, 0x0081, 0x0002, 0x0039, 0x005d, 0x0003, 0x003d, + 0x0000, 0x004d, 0x000e, 0x0074, 0xffff, 0x0000, 0x0009, 0x0012, + 0x001b, 0x0026, 0x002f, 0x003a, 0x0047, 0x0054, 0x005f, 0x006a, + 0x0073, 0x007e, 0x000e, 0x0074, 0xffff, 0x0000, 0x0009, 0x0012, + // Entry 56540 - 5657F + 0x001b, 0x0026, 0x002f, 0x003a, 0x0047, 0x0054, 0x005f, 0x006a, + 0x0073, 0x007e, 0x0003, 0x0061, 0x0000, 0x0071, 0x000e, 0x0074, + 0xffff, 0x0000, 0x0009, 0x0012, 0x001b, 0x0026, 0x002f, 0x003a, + 0x0047, 0x0054, 0x005f, 0x006a, 0x0073, 0x007e, 0x000e, 0x0074, + 0xffff, 0x0000, 0x0009, 0x0012, 0x001b, 0x0026, 0x002f, 0x003a, + 0x0047, 0x0054, 0x005f, 0x006a, 0x0073, 0x007e, 0x0003, 0x008b, + 0x0091, 0x0085, 0x0001, 0x0087, 0x0002, 0x0074, 0x0087, 0x008f, + 0x0001, 0x008d, 0x0002, 0x0074, 0x0087, 0x008f, 0x0001, 0x0093, + // Entry 56580 - 565BF + 0x0002, 0x0074, 0x0087, 0x008f, 0x0005, 0x009d, 0x0000, 0x0000, + 0x0000, 0x00e8, 0x0002, 0x00a0, 0x00c4, 0x0003, 0x00a4, 0x0000, + 0x00b4, 0x000e, 0x0021, 0xffff, 0x0392, 0x39f4, 0x3a01, 0x3a0a, + 0x08d9, 0x3a15, 0x3a22, 0x03e0, 0x3a2f, 0x3a3c, 0x3a45, 0x3a50, + 0x3a5d, 0x000e, 0x0021, 0xffff, 0x0392, 0x39f4, 0x3a01, 0x3a0a, + 0x08d9, 0x3a15, 0x3a22, 0x03e0, 0x3a2f, 0x3a3c, 0x3a45, 0x3a50, + 0x3a5d, 0x0003, 0x00c8, 0x0000, 0x00d8, 0x000e, 0x0021, 0xffff, + 0x0392, 0x39f4, 0x3a01, 0x3a0a, 0x08d9, 0x3a15, 0x3a22, 0x03e0, + // Entry 565C0 - 565FF + 0x3a2f, 0x3a3c, 0x3a45, 0x3a50, 0x3a5d, 0x000e, 0x0021, 0xffff, + 0x0392, 0x39f4, 0x3a01, 0x3a0a, 0x08d9, 0x3a15, 0x3a22, 0x03e0, + 0x3a2f, 0x3a3c, 0x3a45, 0x3a50, 0x3a5d, 0x0003, 0x00f2, 0x00f8, + 0x00ec, 0x0001, 0x00ee, 0x0002, 0x0074, 0x0087, 0x008f, 0x0001, + 0x00f4, 0x0002, 0x0074, 0x0087, 0x008f, 0x0001, 0x00fa, 0x0002, + 0x0074, 0x0087, 0x008f, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0107, 0x0000, 0x0118, 0x0004, 0x0115, 0x010f, 0x010c, + 0x0112, 0x0001, 0x0071, 0x0f20, 0x0001, 0x0071, 0x0f34, 0x0001, + // Entry 56600 - 5663F + 0x0071, 0x0f41, 0x0001, 0x0000, 0x240c, 0x0004, 0x0126, 0x0120, + 0x011d, 0x0123, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x0132, + 0x0197, 0x01ee, 0x0223, 0x0300, 0x031a, 0x032b, 0x033c, 0x0002, + 0x0135, 0x0166, 0x0003, 0x0139, 0x0148, 0x0157, 0x000d, 0x0022, + 0xffff, 0x0000, 0x354a, 0x359c, 0x35a5, 0x35b0, 0x35b7, 0x3565, + 0x35be, 0x357b, 0x35c7, 0x35d4, 0x35df, 0x000d, 0x0018, 0xffff, + 0x2a31, 0x2a5a, 0x2a5c, 0x2a5e, 0x2a5c, 0x2a31, 0x2a31, 0x2a5e, + // Entry 56640 - 5667F + 0x2a71, 0x2a62, 0x2a64, 0x2a66, 0x000d, 0x0022, 0xffff, 0x0000, + 0x354a, 0x359c, 0x35a5, 0x35b0, 0x35b7, 0x3565, 0x35be, 0x357b, + 0x35c7, 0x35d4, 0x35df, 0x0003, 0x016a, 0x0179, 0x0188, 0x000d, + 0x0022, 0xffff, 0x0000, 0x354a, 0x359c, 0x35a5, 0x35b0, 0x35b7, + 0x3565, 0x35be, 0x357b, 0x35c7, 0x35d4, 0x35df, 0x000d, 0x0018, + 0xffff, 0x2a31, 0x2a5a, 0x2a5c, 0x2a5e, 0x2a5c, 0x2a31, 0x2a31, + 0x2a5e, 0x2a71, 0x2a62, 0x2a64, 0x2a66, 0x000d, 0x0022, 0xffff, + 0x0000, 0x354a, 0x359c, 0x35a5, 0x35b0, 0x35b7, 0x3565, 0x35be, + // Entry 56680 - 566BF + 0x357b, 0x35c7, 0x35d4, 0x35df, 0x0002, 0x019a, 0x01c4, 0x0005, + 0x01a0, 0x01a9, 0x01bb, 0x0000, 0x01b2, 0x0007, 0x0056, 0x0000, + 0x000b, 0x0012, 0x29c7, 0x0024, 0x0031, 0x003a, 0x0007, 0x0018, + 0x2a71, 0x2a5c, 0x2a73, 0x2a37, 0x2a73, 0x2a5a, 0x2a71, 0x0007, + 0x0056, 0x0000, 0x000b, 0x0012, 0x29c7, 0x0024, 0x0031, 0x003a, + 0x0007, 0x0056, 0x0000, 0x000b, 0x0012, 0x29c7, 0x0024, 0x0031, + 0x003a, 0x0005, 0x01ca, 0x01d3, 0x01e5, 0x0000, 0x01dc, 0x0007, + 0x0056, 0x0000, 0x000b, 0x0012, 0x29c7, 0x0024, 0x0031, 0x003a, + // Entry 566C0 - 566FF + 0x0007, 0x0018, 0x2a71, 0x2a5c, 0x2a73, 0x2a37, 0x2a73, 0x2a5a, + 0x2a71, 0x0007, 0x0056, 0x0000, 0x000b, 0x0012, 0x29c7, 0x0024, + 0x0031, 0x003a, 0x0007, 0x0056, 0x0000, 0x000b, 0x0012, 0x29c7, + 0x0024, 0x0031, 0x003a, 0x0002, 0x01f1, 0x020a, 0x0003, 0x01f5, + 0x01fc, 0x0203, 0x0005, 0x0074, 0xffff, 0x0097, 0x00ae, 0x00c7, + 0x00e0, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x0005, 0x0074, 0xffff, 0x0097, 0x00ae, 0x00c7, 0x00e0, 0x0003, + 0x020e, 0x0215, 0x021c, 0x0005, 0x0074, 0xffff, 0x0097, 0x00ae, + // Entry 56700 - 5673F + 0x00c7, 0x00e0, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x0005, 0x0074, 0xffff, 0x0097, 0x00ae, 0x00c7, 0x00e0, + 0x0002, 0x0226, 0x0293, 0x0003, 0x022a, 0x024d, 0x0270, 0x000a, + 0x0238, 0x023b, 0x0235, 0x023e, 0x0241, 0x0247, 0x024a, 0x0000, + 0x0000, 0x0244, 0x0001, 0x0074, 0x00f9, 0x0001, 0x0000, 0x04ef, + 0x0001, 0x0000, 0x04f2, 0x0001, 0x0021, 0x0670, 0x0001, 0x0074, + 0x0109, 0x0001, 0x0074, 0x0114, 0x0001, 0x0022, 0x00e1, 0x0001, + 0x0074, 0x0120, 0x000a, 0x025b, 0x025e, 0x0258, 0x0261, 0x0264, + // Entry 56740 - 5677F + 0x026a, 0x026d, 0x0000, 0x0000, 0x0267, 0x0001, 0x0074, 0x00f9, + 0x0001, 0x0000, 0x1f9c, 0x0001, 0x0000, 0x21e4, 0x0001, 0x0021, + 0x0670, 0x0001, 0x0074, 0x0109, 0x0001, 0x0074, 0x0114, 0x0001, + 0x0022, 0x00e1, 0x0001, 0x0074, 0x0120, 0x000a, 0x027e, 0x0281, + 0x027b, 0x0284, 0x0287, 0x028d, 0x0290, 0x0000, 0x0000, 0x028a, + 0x0001, 0x0074, 0x00f9, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, + 0x04f2, 0x0001, 0x0074, 0x0127, 0x0001, 0x0074, 0x0135, 0x0001, + 0x0074, 0x0114, 0x0001, 0x0074, 0x0147, 0x0001, 0x0074, 0x0155, + // Entry 56780 - 567BF + 0x0003, 0x0297, 0x02ba, 0x02dd, 0x000a, 0x02a5, 0x02a8, 0x02a2, + 0x02ab, 0x02ae, 0x02b4, 0x02b7, 0x0000, 0x0000, 0x02b1, 0x0001, + 0x0074, 0x00f9, 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, + 0x0001, 0x0021, 0x0670, 0x0001, 0x0074, 0x0109, 0x0001, 0x0074, + 0x0114, 0x0001, 0x0022, 0x00e1, 0x0001, 0x0074, 0x0120, 0x000a, + 0x02c8, 0x02cb, 0x02c5, 0x02ce, 0x02d1, 0x02d7, 0x02da, 0x0000, + 0x0000, 0x02d4, 0x0001, 0x0074, 0x00f9, 0x0001, 0x0000, 0x04ef, + 0x0001, 0x0000, 0x04f2, 0x0001, 0x0021, 0x0670, 0x0001, 0x0074, + // Entry 567C0 - 567FF + 0x0109, 0x0001, 0x0074, 0x0114, 0x0001, 0x0022, 0x00e1, 0x0001, + 0x0074, 0x0120, 0x000a, 0x02eb, 0x02ee, 0x02e8, 0x02f1, 0x02f4, + 0x02fa, 0x02fd, 0x0000, 0x0000, 0x02f7, 0x0001, 0x0074, 0x00f9, + 0x0001, 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0001, 0x0021, + 0x0670, 0x0001, 0x0074, 0x0109, 0x0001, 0x0074, 0x0114, 0x0001, + 0x0022, 0x00e1, 0x0001, 0x0074, 0x0120, 0x0003, 0x030f, 0x0000, + 0x0304, 0x0002, 0x0307, 0x030b, 0x0002, 0x0074, 0x0163, 0x018d, + 0x0002, 0x0074, 0x0173, 0x0198, 0x0002, 0x0312, 0x0316, 0x0002, + // Entry 56800 - 5683F + 0x0074, 0x0163, 0x018d, 0x0002, 0x0000, 0x04f5, 0x3c5a, 0x0004, + 0x0328, 0x0322, 0x031f, 0x0325, 0x0001, 0x000c, 0x03c9, 0x0001, + 0x000c, 0x03d9, 0x0001, 0x000c, 0x03e3, 0x0001, 0x0000, 0x2418, + 0x0004, 0x0339, 0x0333, 0x0330, 0x0336, 0x0001, 0x0002, 0x04e3, + 0x0001, 0x0002, 0x04f2, 0x0001, 0x0002, 0x04fe, 0x0001, 0x0002, + 0x0508, 0x0004, 0x034a, 0x0344, 0x0341, 0x0347, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0005, 0x0353, 0x0000, 0x0000, 0x0000, 0x039e, + // Entry 56840 - 5687F + 0x0002, 0x0356, 0x037a, 0x0003, 0x035a, 0x0000, 0x036a, 0x000e, + 0x0074, 0x01f2, 0x01a6, 0x01af, 0x01bc, 0x01c7, 0x01d2, 0x01db, + 0x01eb, 0x0202, 0x020b, 0x0214, 0x021d, 0x0226, 0x022b, 0x000e, + 0x0074, 0x01f2, 0x01a6, 0x01af, 0x01bc, 0x01c7, 0x01d2, 0x01db, + 0x01eb, 0x0202, 0x020b, 0x0214, 0x021d, 0x0226, 0x022b, 0x0003, + 0x037e, 0x0000, 0x038e, 0x000e, 0x0074, 0x01f2, 0x01a6, 0x01af, + 0x01bc, 0x01c7, 0x01d2, 0x01db, 0x01eb, 0x0202, 0x020b, 0x0214, + 0x021d, 0x0226, 0x022b, 0x000e, 0x0074, 0x01f2, 0x01a6, 0x01af, + // Entry 56880 - 568BF + 0x01bc, 0x01c7, 0x01d2, 0x01db, 0x01eb, 0x0202, 0x020b, 0x0214, + 0x021d, 0x0226, 0x022b, 0x0003, 0x03a7, 0x03ac, 0x03a2, 0x0001, + 0x03a4, 0x0001, 0x0000, 0x04ef, 0x0001, 0x03a9, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x03ae, 0x0001, 0x0000, 0x04ef, 0x0005, 0x03b7, + 0x0000, 0x0000, 0x0000, 0x03fe, 0x0002, 0x03ba, 0x03dc, 0x0003, + 0x03be, 0x0000, 0x03cd, 0x000d, 0x0074, 0xffff, 0x0237, 0x0242, + 0x0251, 0x0260, 0x026b, 0x0278, 0x0283, 0x0290, 0x029f, 0x02b0, + 0x02b9, 0x02c2, 0x000d, 0x0074, 0xffff, 0x0237, 0x0242, 0x0251, + // Entry 568C0 - 568FF + 0x0260, 0x026b, 0x0278, 0x0283, 0x0290, 0x029f, 0x02b0, 0x02b9, + 0x02c2, 0x0003, 0x03e0, 0x0000, 0x03ef, 0x000d, 0x0074, 0xffff, + 0x0237, 0x0242, 0x0251, 0x0260, 0x026b, 0x0278, 0x0283, 0x0290, + 0x029f, 0x02b0, 0x02b9, 0x02c2, 0x000d, 0x0074, 0xffff, 0x0237, + 0x0242, 0x0251, 0x0260, 0x026b, 0x0278, 0x0283, 0x0290, 0x029f, + 0x02b0, 0x02b9, 0x02c2, 0x0003, 0x0407, 0x040c, 0x0402, 0x0001, + 0x0404, 0x0001, 0x0057, 0x08a6, 0x0001, 0x0409, 0x0001, 0x0057, + 0x08a6, 0x0001, 0x040e, 0x0001, 0x0057, 0x08a6, 0x0005, 0x0417, + // Entry 56900 - 5693F + 0x0000, 0x0000, 0x0000, 0x045e, 0x0002, 0x041a, 0x043c, 0x0003, + 0x041e, 0x0000, 0x042d, 0x000d, 0x0003, 0xffff, 0x04dd, 0x04e6, + 0x2368, 0x237e, 0x2396, 0x23ae, 0x0545, 0x054c, 0x0557, 0x0562, + 0x23c8, 0x23d9, 0x000d, 0x0003, 0xffff, 0x04dd, 0x04e6, 0x23e8, + 0x23fd, 0x220a, 0x2220, 0x0545, 0x054c, 0x0557, 0x0562, 0x23c8, + 0x23d9, 0x0003, 0x0440, 0x0000, 0x044f, 0x000d, 0x0003, 0xffff, + 0x04dd, 0x04e6, 0x2368, 0x237e, 0x2396, 0x23ae, 0x0545, 0x054c, + 0x0557, 0x0562, 0x23c8, 0x23d9, 0x000d, 0x0003, 0xffff, 0x04dd, + // Entry 56940 - 5697F + 0x04e6, 0x23e8, 0x23fd, 0x220a, 0x2220, 0x0545, 0x054c, 0x0557, + 0x0562, 0x23c8, 0x23d9, 0x0003, 0x0467, 0x046c, 0x0462, 0x0001, + 0x0464, 0x0001, 0x0074, 0x02d1, 0x0001, 0x0469, 0x0001, 0x0074, + 0x02d1, 0x0001, 0x046e, 0x0001, 0x0074, 0x02d1, 0x0005, 0x0477, + 0x0000, 0x0000, 0x0000, 0x04be, 0x0002, 0x047a, 0x049c, 0x0003, + 0x047e, 0x0000, 0x048d, 0x000d, 0x0074, 0xffff, 0x02da, 0x02e7, + 0x02f6, 0x0303, 0x030a, 0x0315, 0x0324, 0x032b, 0x0334, 0x033b, + 0x0340, 0x0349, 0x000d, 0x0074, 0xffff, 0x02da, 0x02e7, 0x02f6, + // Entry 56980 - 569BF + 0x0303, 0x030a, 0x0315, 0x0324, 0x032b, 0x0334, 0x033b, 0x0340, + 0x0349, 0x0003, 0x04a0, 0x0000, 0x04af, 0x000d, 0x0074, 0xffff, + 0x02da, 0x02e7, 0x02f6, 0x0303, 0x030a, 0x0315, 0x0324, 0x032b, + 0x0334, 0x033b, 0x0340, 0x0349, 0x000d, 0x0074, 0xffff, 0x02da, + 0x02e7, 0x02f6, 0x0303, 0x030a, 0x0315, 0x0324, 0x032b, 0x0334, + 0x033b, 0x0340, 0x0349, 0x0003, 0x04c7, 0x04cc, 0x04c2, 0x0001, + 0x04c4, 0x0001, 0x0000, 0x1a1d, 0x0001, 0x04c9, 0x0001, 0x0000, + 0x1a1d, 0x0001, 0x04ce, 0x0001, 0x0000, 0x1a1d, 0x0005, 0x0000, + // Entry 569C0 - 569FF + 0x0000, 0x0000, 0x0000, 0x04d7, 0x0003, 0x04e1, 0x04e7, 0x04db, + 0x0001, 0x04dd, 0x0002, 0x0074, 0x0354, 0x0376, 0x0001, 0x04e3, + 0x0002, 0x0074, 0x0354, 0x0376, 0x0001, 0x04e9, 0x0002, 0x0074, + 0x0354, 0x0376, 0x0042, 0x0530, 0x0535, 0x053a, 0x053f, 0x0556, + 0x056d, 0x0584, 0x059b, 0x05ad, 0x05bf, 0x05d6, 0x05ed, 0x05ff, + 0x061a, 0x0635, 0x0650, 0x0655, 0x065a, 0x065f, 0x0678, 0x0691, + 0x06aa, 0x06af, 0x06b4, 0x06b9, 0x06be, 0x06c3, 0x06c8, 0x06cd, + 0x06d2, 0x06d7, 0x06eb, 0x06ff, 0x0713, 0x0727, 0x073b, 0x074f, + // Entry 56A00 - 56A3F + 0x0763, 0x0777, 0x078b, 0x079f, 0x07b3, 0x07c7, 0x07db, 0x07ef, + 0x0803, 0x0817, 0x082b, 0x083f, 0x0853, 0x0867, 0x087b, 0x0880, + 0x0885, 0x088a, 0x08a0, 0x08b2, 0x08c4, 0x08da, 0x08ec, 0x08fe, + 0x0914, 0x0926, 0x0938, 0x093d, 0x0942, 0x0001, 0x0532, 0x0001, + 0x0074, 0x038c, 0x0001, 0x0537, 0x0001, 0x0074, 0x038c, 0x0001, + 0x053c, 0x0001, 0x0074, 0x038c, 0x0003, 0x0543, 0x0546, 0x054b, + 0x0001, 0x0021, 0x098b, 0x0003, 0x0074, 0x0393, 0x03a5, 0x03b1, + 0x0002, 0x054e, 0x0552, 0x0002, 0x0074, 0x03c1, 0x03c1, 0x0002, + // Entry 56A40 - 56A7F + 0x0074, 0x03d3, 0x03d3, 0x0003, 0x055a, 0x055d, 0x0562, 0x0001, + 0x0021, 0x098b, 0x0003, 0x0074, 0x0393, 0x03a5, 0x03b1, 0x0002, + 0x0565, 0x0569, 0x0002, 0x0074, 0x03c1, 0x03c1, 0x0002, 0x0074, + 0x03d3, 0x03d3, 0x0003, 0x0571, 0x0574, 0x0579, 0x0001, 0x0021, + 0x098b, 0x0003, 0x0074, 0x0393, 0x03a5, 0x03b1, 0x0002, 0x057c, + 0x0580, 0x0002, 0x0074, 0x03c1, 0x03c1, 0x0002, 0x0074, 0x03d3, + 0x03d3, 0x0003, 0x0588, 0x058b, 0x0590, 0x0001, 0x0074, 0x03e7, + 0x0003, 0x0074, 0x03f5, 0x040e, 0x0421, 0x0002, 0x0593, 0x0597, + // Entry 56A80 - 56ABF + 0x0002, 0x0074, 0x0438, 0x0438, 0x0002, 0x0074, 0x0451, 0x0451, + 0x0003, 0x059f, 0x0000, 0x05a2, 0x0001, 0x0074, 0x03e7, 0x0002, + 0x05a5, 0x05a9, 0x0002, 0x0074, 0x0438, 0x0438, 0x0002, 0x0074, + 0x046c, 0x046c, 0x0003, 0x05b1, 0x0000, 0x05b4, 0x0001, 0x0074, + 0x03e7, 0x0002, 0x05b7, 0x05bb, 0x0002, 0x0074, 0x0438, 0x0438, + 0x0002, 0x0074, 0x0451, 0x0451, 0x0003, 0x05c3, 0x05c6, 0x05cb, + 0x0001, 0x0074, 0x0485, 0x0003, 0x0074, 0x0490, 0x04a6, 0x04b6, + 0x0002, 0x05ce, 0x05d2, 0x0002, 0x0074, 0x04e0, 0x04ca, 0x0002, + // Entry 56AC0 - 56AFF + 0x0074, 0x050e, 0x04f6, 0x0003, 0x05da, 0x05dd, 0x05e2, 0x0001, + 0x0074, 0x0526, 0x0003, 0x0074, 0x052d, 0x04a6, 0x0543, 0x0002, + 0x05e5, 0x05e9, 0x0002, 0x0074, 0x0557, 0x0557, 0x0002, 0x0074, + 0x0569, 0x0569, 0x0003, 0x05f1, 0x0000, 0x05f4, 0x0001, 0x0074, + 0x0526, 0x0002, 0x05f7, 0x05fb, 0x0002, 0x0074, 0x0557, 0x0557, + 0x0002, 0x0074, 0x057b, 0x057b, 0x0004, 0x0604, 0x0607, 0x060c, + 0x0617, 0x0001, 0x0056, 0x003a, 0x0003, 0x0074, 0x058f, 0x05a3, + 0x05b1, 0x0002, 0x060f, 0x0613, 0x0002, 0x0074, 0x05d7, 0x05c3, + // Entry 56B00 - 56B3F + 0x0002, 0x0074, 0x0601, 0x05eb, 0x0001, 0x0074, 0x0617, 0x0004, + 0x061f, 0x0622, 0x0627, 0x0632, 0x0001, 0x0056, 0x003a, 0x0003, + 0x0074, 0x058f, 0x05a3, 0x05b1, 0x0002, 0x062a, 0x062e, 0x0002, + 0x0074, 0x05d7, 0x05d7, 0x0002, 0x0074, 0x0601, 0x0601, 0x0001, + 0x0074, 0x0617, 0x0004, 0x063a, 0x063d, 0x0642, 0x064d, 0x0001, + 0x0056, 0x003a, 0x0003, 0x0074, 0x058f, 0x05a3, 0x05b1, 0x0002, + 0x0645, 0x0649, 0x0002, 0x0074, 0x05d7, 0x05c3, 0x0002, 0x0074, + 0x0601, 0x05eb, 0x0001, 0x0074, 0x0617, 0x0001, 0x0652, 0x0001, + // Entry 56B40 - 56B7F + 0x0074, 0x0629, 0x0001, 0x0657, 0x0001, 0x0074, 0x0629, 0x0001, + 0x065c, 0x0001, 0x0074, 0x0629, 0x0003, 0x0663, 0x0666, 0x066d, + 0x0001, 0x0074, 0x0642, 0x0005, 0x0074, 0x065d, 0x066d, 0x0672, + 0x0647, 0x0682, 0x0002, 0x0670, 0x0674, 0x0002, 0x0074, 0x06ad, + 0x069d, 0x0002, 0x0074, 0x06d3, 0x06c1, 0x0003, 0x067c, 0x067f, + 0x0686, 0x0001, 0x0074, 0x0642, 0x0005, 0x0074, 0x065d, 0x066d, + 0x0672, 0x0647, 0x0682, 0x0002, 0x0689, 0x068d, 0x0002, 0x0074, + 0x06ad, 0x069d, 0x0002, 0x0074, 0x06d3, 0x06c1, 0x0003, 0x0695, + // Entry 56B80 - 56BBF + 0x0698, 0x069f, 0x0001, 0x0074, 0x0642, 0x0005, 0x0074, 0x065d, + 0x066d, 0x0672, 0x0647, 0x0682, 0x0002, 0x06a2, 0x06a6, 0x0002, + 0x0074, 0x06ad, 0x069d, 0x0002, 0x0074, 0x06c1, 0x06c1, 0x0001, + 0x06ac, 0x0001, 0x0074, 0x06e9, 0x0001, 0x06b1, 0x0001, 0x0074, + 0x06e9, 0x0001, 0x06b6, 0x0001, 0x0074, 0x06e9, 0x0001, 0x06bb, + 0x0001, 0x0074, 0x06f7, 0x0001, 0x06c0, 0x0001, 0x0074, 0x06f7, + 0x0001, 0x06c5, 0x0001, 0x0074, 0x06f7, 0x0001, 0x06ca, 0x0001, + 0x0074, 0x070a, 0x0001, 0x06cf, 0x0001, 0x0074, 0x070a, 0x0001, + // Entry 56BC0 - 56BFF + 0x06d4, 0x0001, 0x0074, 0x070a, 0x0003, 0x0000, 0x06db, 0x06e0, + 0x0003, 0x0074, 0x072a, 0x0740, 0x0750, 0x0002, 0x06e3, 0x06e7, + 0x0002, 0x0074, 0x0764, 0x0764, 0x0002, 0x0074, 0x077a, 0x077a, + 0x0003, 0x0000, 0x06ef, 0x06f4, 0x0003, 0x0074, 0x072a, 0x0740, + 0x0750, 0x0002, 0x06f7, 0x06fb, 0x0002, 0x0074, 0x0764, 0x0764, + 0x0002, 0x0074, 0x077a, 0x077a, 0x0003, 0x0000, 0x0703, 0x0708, + 0x0003, 0x0074, 0x072a, 0x0740, 0x0750, 0x0002, 0x070b, 0x070f, + 0x0002, 0x0074, 0x0764, 0x0764, 0x0002, 0x0074, 0x077a, 0x077a, + // Entry 56C00 - 56C3F + 0x0003, 0x0000, 0x0717, 0x071c, 0x0003, 0x0074, 0x0790, 0x07a2, + 0x07ae, 0x0002, 0x071f, 0x0723, 0x0002, 0x0074, 0x07be, 0x07be, + 0x0002, 0x0074, 0x07d0, 0x07d0, 0x0003, 0x0000, 0x072b, 0x0730, + 0x0003, 0x0074, 0x0790, 0x07a2, 0x07ae, 0x0002, 0x0733, 0x0737, + 0x0002, 0x0074, 0x07be, 0x07be, 0x0002, 0x0074, 0x07d0, 0x07d0, + 0x0003, 0x0000, 0x073f, 0x0744, 0x0003, 0x0074, 0x0790, 0x07a2, + 0x07ae, 0x0002, 0x0747, 0x074b, 0x0002, 0x0074, 0x07be, 0x07be, + 0x0002, 0x0074, 0x07d0, 0x07d0, 0x0003, 0x0000, 0x0753, 0x0758, + // Entry 56C40 - 56C7F + 0x0003, 0x0074, 0x07e2, 0x07f6, 0x0804, 0x0002, 0x075b, 0x075f, + 0x0002, 0x0074, 0x0816, 0x0816, 0x0002, 0x0074, 0x082a, 0x082a, + 0x0003, 0x0000, 0x0767, 0x076c, 0x0003, 0x0074, 0x07e2, 0x07f6, + 0x0804, 0x0002, 0x076f, 0x0773, 0x0002, 0x0074, 0x0816, 0x0816, + 0x0002, 0x0074, 0x082a, 0x082a, 0x0003, 0x0000, 0x077b, 0x0780, + 0x0003, 0x0074, 0x07e2, 0x07f6, 0x0804, 0x0002, 0x0783, 0x0787, + 0x0002, 0x0074, 0x0816, 0x0816, 0x0002, 0x0074, 0x082a, 0x082a, + 0x0003, 0x0000, 0x078f, 0x0794, 0x0003, 0x0074, 0x083e, 0x0850, + // Entry 56C80 - 56CBF + 0x085c, 0x0002, 0x0797, 0x079b, 0x0002, 0x0074, 0x086c, 0x086c, + 0x0002, 0x0074, 0x087e, 0x087e, 0x0003, 0x0000, 0x07a3, 0x07a8, + 0x0003, 0x0074, 0x083e, 0x0850, 0x085c, 0x0002, 0x07ab, 0x07af, + 0x0002, 0x0074, 0x086c, 0x086c, 0x0002, 0x0074, 0x087e, 0x087e, + 0x0003, 0x0000, 0x07b7, 0x07bc, 0x0003, 0x0074, 0x083e, 0x0850, + 0x085c, 0x0002, 0x07bf, 0x07c3, 0x0002, 0x0074, 0x086c, 0x086c, + 0x0002, 0x0074, 0x087e, 0x087e, 0x0003, 0x0000, 0x07cb, 0x07d0, + 0x0003, 0x0074, 0x0890, 0x08a8, 0x08ba, 0x0002, 0x07d3, 0x07d7, + // Entry 56CC0 - 56CFF + 0x0002, 0x0074, 0x08d0, 0x08d0, 0x0002, 0x0074, 0x08e8, 0x08e8, + 0x0003, 0x0000, 0x07df, 0x07e4, 0x0003, 0x0074, 0x0890, 0x08a8, + 0x08ba, 0x0002, 0x07e7, 0x07eb, 0x0002, 0x0074, 0x08d0, 0x08d0, + 0x0002, 0x0074, 0x08e8, 0x08e8, 0x0003, 0x0000, 0x07f3, 0x07f8, + 0x0003, 0x0074, 0x0890, 0x08a8, 0x0900, 0x0002, 0x07fb, 0x07ff, + 0x0002, 0x0074, 0x08d0, 0x08d0, 0x0002, 0x0074, 0x08e8, 0x08e8, + 0x0003, 0x0000, 0x0807, 0x080c, 0x0003, 0x0074, 0x0916, 0x092a, + 0x0938, 0x0002, 0x080f, 0x0813, 0x0002, 0x0074, 0x094a, 0x094a, + // Entry 56D00 - 56D3F + 0x0002, 0x0074, 0x095e, 0x095e, 0x0003, 0x0000, 0x081b, 0x0820, + 0x0003, 0x0074, 0x0916, 0x092a, 0x0938, 0x0002, 0x0823, 0x0827, + 0x0002, 0x0074, 0x094a, 0x094a, 0x0002, 0x0074, 0x095e, 0x095e, + 0x0003, 0x0000, 0x082f, 0x0834, 0x0003, 0x0074, 0x0916, 0x092a, + 0x0938, 0x0002, 0x0837, 0x083b, 0x0002, 0x0074, 0x094a, 0x094a, + 0x0002, 0x0074, 0x095e, 0x095e, 0x0003, 0x0000, 0x0843, 0x0848, + 0x0003, 0x0074, 0x0972, 0x0988, 0x0998, 0x0002, 0x084b, 0x084f, + 0x0002, 0x0074, 0x09ac, 0x09ac, 0x0002, 0x0074, 0x09c2, 0x09c2, + // Entry 56D40 - 56D7F + 0x0003, 0x0000, 0x0857, 0x085c, 0x0003, 0x0074, 0x0972, 0x0988, + 0x0998, 0x0002, 0x085f, 0x0863, 0x0002, 0x0074, 0x09ac, 0x09ac, + 0x0002, 0x0074, 0x09c2, 0x09c2, 0x0003, 0x0000, 0x086b, 0x0870, + 0x0003, 0x0074, 0x0972, 0x0988, 0x0998, 0x0002, 0x0873, 0x0877, + 0x0002, 0x0074, 0x09ac, 0x09ac, 0x0002, 0x0074, 0x09c2, 0x09c2, + 0x0001, 0x087d, 0x0001, 0x0074, 0x09d8, 0x0001, 0x0882, 0x0001, + 0x0074, 0x09d8, 0x0001, 0x0887, 0x0001, 0x0074, 0x09d8, 0x0003, + 0x088e, 0x0891, 0x0895, 0x0001, 0x0074, 0x09fc, 0x0002, 0x0074, + // Entry 56D80 - 56DBF + 0xffff, 0x0a07, 0x0002, 0x0898, 0x089c, 0x0002, 0x0074, 0x0a17, + 0x0a17, 0x0002, 0x0074, 0x0a45, 0x0a2d, 0x0003, 0x08a4, 0x0000, + 0x08a7, 0x0001, 0x0074, 0x09fc, 0x0002, 0x08aa, 0x08ae, 0x0002, + 0x0074, 0x0a17, 0x0a17, 0x0002, 0x0074, 0x0a45, 0x0a45, 0x0003, + 0x08b6, 0x0000, 0x08b9, 0x0001, 0x0074, 0x09fc, 0x0002, 0x08bc, + 0x08c0, 0x0002, 0x0074, 0x0a73, 0x0a5d, 0x0002, 0x0074, 0x0a45, + 0x0a2d, 0x0003, 0x08c8, 0x08cb, 0x08cf, 0x0001, 0x0056, 0x00ee, + 0x0002, 0x0074, 0xffff, 0x0a8b, 0x0002, 0x08d2, 0x08d6, 0x0002, + // Entry 56DC0 - 56DFF + 0x0074, 0x0a97, 0x0a97, 0x0002, 0x0074, 0x0aa9, 0x0aa9, 0x0003, + 0x08de, 0x0000, 0x08e1, 0x0001, 0x0056, 0x00ee, 0x0002, 0x08e4, + 0x08e8, 0x0002, 0x0074, 0x0a97, 0x0a97, 0x0002, 0x0074, 0x0aa9, + 0x0aa9, 0x0003, 0x08f0, 0x0000, 0x08f3, 0x0001, 0x0056, 0x00ee, + 0x0002, 0x08f6, 0x08fa, 0x0002, 0x0074, 0x0a97, 0x0a97, 0x0002, + 0x0074, 0x0aa9, 0x0aa9, 0x0003, 0x0902, 0x0905, 0x0909, 0x0001, + 0x0074, 0x0abd, 0x0002, 0x0074, 0xffff, 0x0ac8, 0x0002, 0x090c, + 0x0910, 0x0002, 0x0074, 0x0acd, 0x0acd, 0x0002, 0x0074, 0x0ae3, + // Entry 56E00 - 56E3F + 0x0ae3, 0x0003, 0x0918, 0x0000, 0x091b, 0x0001, 0x0074, 0x0abd, + 0x0002, 0x091e, 0x0922, 0x0002, 0x0074, 0x0acd, 0x0acd, 0x0002, + 0x0074, 0x0ae3, 0x0ae3, 0x0003, 0x092a, 0x0000, 0x092d, 0x0001, + 0x0074, 0x0abd, 0x0002, 0x0930, 0x0934, 0x0002, 0x0074, 0x0acd, + 0x0acd, 0x0002, 0x0074, 0x0ae3, 0x0ae3, 0x0001, 0x093a, 0x0001, + 0x0074, 0x0afb, 0x0001, 0x093f, 0x0001, 0x0074, 0x0afb, 0x0001, + 0x0944, 0x0001, 0x0074, 0x0afb, 0x0004, 0x094c, 0x0951, 0x0956, + 0x0965, 0x0003, 0x0000, 0x1dc7, 0x4327, 0x432f, 0x0003, 0x005e, + // Entry 56E40 - 56E7F + 0x0692, 0x33bd, 0x33c6, 0x0002, 0x0000, 0x0959, 0x0003, 0x0000, + 0x0960, 0x095d, 0x0001, 0x0074, 0x0b0d, 0x0003, 0x0074, 0xffff, + 0x0b3c, 0x0b55, 0x0002, 0x0000, 0x0968, 0x0003, 0x0a02, 0x0a98, + 0x096c, 0x0094, 0x0074, 0x0b78, 0x0b97, 0x0bb6, 0x0bd7, 0x0c28, + 0x0c96, 0x0cf7, 0x0d62, 0x0dbf, 0x0e22, 0x0e85, 0x0ee0, 0x0f34, + 0x0f8c, 0x0fe4, 0x1056, 0x10e5, 0x1157, 0x11cb, 0x1266, 0x1310, + 0x13a4, 0x1432, 0x14b1, 0x1525, 0x1585, 0x159e, 0x15d3, 0x161f, + 0x1661, 0x16a9, 0x16e2, 0x173c, 0x1796, 0x17ef, 0x183b, 0x185c, + // Entry 56E80 - 56EBF + 0x1897, 0x190e, 0x1979, 0x19c0, 0x19d2, 0x19fc, 0x1a3f, 0x1aab, + 0x1ae4, 0x1b64, 0x1bc8, 0x1c0e, 0x1c9d, 0x1d27, 0x1d5d, 0x1d7f, + 0x1db6, 0x1dd5, 0x1e06, 0x1e5c, 0x1e7f, 0x1ec6, 0x1f63, 0x1fda, + 0x1ffc, 0x2038, 0x20bc, 0x211a, 0x2154, 0x217e, 0x2195, 0x21ac, + 0x21d1, 0x21f8, 0x2236, 0x2292, 0x22ef, 0x2351, 0x23c9, 0x2447, + 0x246f, 0x24ab, 0x24f0, 0x2524, 0x2578, 0x2593, 0x25cf, 0x2624, + 0x2660, 0x26a4, 0x26ba, 0x26d3, 0x26eb, 0x2724, 0x2766, 0x27a6, + 0x2840, 0x28c4, 0x292c, 0x296c, 0x2984, 0x2998, 0x29d2, 0x2a4e, + // Entry 56EC0 - 56EFF + 0x2aca, 0x2b31, 0x2b43, 0x2b96, 0x2c21, 0x2c87, 0x2ce0, 0x2d3a, + 0x2d4c, 0x2d8b, 0x2dfe, 0x2e62, 0x2ea4, 0x2ef8, 0x2f79, 0x2f91, + 0x2fa7, 0x2fc2, 0x2fdb, 0x300c, 0x3062, 0x30b6, 0x30fb, 0x3111, + 0x3138, 0x315b, 0x317c, 0x3197, 0x31ab, 0x31dc, 0x322f, 0x324c, + 0x3278, 0x32b6, 0x32e7, 0x334d, 0x337e, 0x33f9, 0x346f, 0x34b5, + 0x34f3, 0x3563, 0x35b3, 0x35cc, 0x35e9, 0x3625, 0x3689, 0x0094, + 0x0074, 0xffff, 0xffff, 0xffff, 0xffff, 0x0c07, 0x0c80, 0x0ce1, + 0x0d4e, 0x0da9, 0x0e0a, 0x0e71, 0x0ecc, 0x0f20, 0x0f79, 0x0fca, + // Entry 56F00 - 56F3F + 0x102e, 0x10ca, 0x113f, 0x11a6, 0x1234, 0x12e9, 0x137d, 0x1411, + 0x1498, 0x1507, 0xffff, 0xffff, 0x15b9, 0xffff, 0x1648, 0xffff, + 0x16ce, 0x1729, 0x1786, 0x17d5, 0xffff, 0xffff, 0x187f, 0x18f1, + 0x1965, 0xffff, 0xffff, 0xffff, 0x1a1b, 0xffff, 0x1ac8, 0x1b44, + 0xffff, 0x1bee, 0x1c72, 0x1d17, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1ded, 0xffff, 0xffff, 0x1ea0, 0x1f3d, 0xffff, 0xffff, 0x2013, + 0x20a1, 0x2108, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x221f, 0x227c, 0x22d4, 0x233d, 0x2396, 0xffff, 0xffff, 0x2497, + // Entry 56F40 - 56F7F + 0xffff, 0x2504, 0xffff, 0xffff, 0x25b4, 0xffff, 0x264a, 0xffff, + 0xffff, 0xffff, 0xffff, 0x270e, 0xffff, 0x277a, 0x281d, 0x28a5, + 0x2918, 0xffff, 0xffff, 0xffff, 0x29af, 0x2a2e, 0x2aa6, 0xffff, + 0xffff, 0x2b69, 0x2c03, 0x2c73, 0x2cc5, 0xffff, 0xffff, 0x2d6e, + 0x2de9, 0x2e4c, 0xffff, 0x2ec7, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2ff6, 0x304e, 0x30a2, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x31c1, 0xffff, 0xffff, 0x3264, 0xffff, + 0x32c6, 0xffff, 0x3361, 0x33dc, 0x3457, 0xffff, 0x34d4, 0x3547, + // Entry 56F80 - 56FBF + 0xffff, 0xffff, 0xffff, 0x360f, 0x3669, 0x0094, 0x0074, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0c58, 0x0cbd, 0x0d1e, 0x0d87, 0x0de6, + 0x0e4b, 0x0eaa, 0x0f05, 0x0f57, 0x0fac, 0x100d, 0x108b, 0x110d, + 0x1180, 0x1201, 0x12a9, 0x1348, 0x13dc, 0x1460, 0x14d7, 0x1550, + 0xffff, 0xffff, 0x15fe, 0xffff, 0x1689, 0xffff, 0x1707, 0x175c, + 0x17b5, 0x1818, 0xffff, 0xffff, 0x18bf, 0x193a, 0x199e, 0xffff, + 0xffff, 0xffff, 0x1a70, 0xffff, 0x1b0f, 0x1b91, 0xffff, 0x1c3b, + 0x1cd5, 0x1d46, 0xffff, 0xffff, 0xffff, 0xffff, 0x1e2c, 0xffff, + // Entry 56FC0 - 56FFF + 0xffff, 0x1efd, 0x1f9a, 0xffff, 0xffff, 0x206e, 0x20e6, 0x213b, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x225a, 0x22b7, + 0x2317, 0x2374, 0x240d, 0xffff, 0xffff, 0x24ce, 0xffff, 0x2551, + 0xffff, 0xffff, 0x25fb, 0xffff, 0x2687, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2749, 0xffff, 0x27e3, 0x2874, 0x28f2, 0x2951, 0xffff, + 0xffff, 0xffff, 0x2a04, 0x2a7b, 0x2aff, 0xffff, 0xffff, 0x2bd0, + 0x2c4e, 0x2caa, 0x2d08, 0xffff, 0xffff, 0x2db5, 0x2e20, 0x2e87, + 0xffff, 0x2f3a, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3031, + // Entry 57000 - 5703F + 0x3087, 0x30d9, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x3208, 0xffff, 0xffff, 0x329b, 0xffff, 0x3315, 0xffff, + 0x33a8, 0x3423, 0x3496, 0xffff, 0x3521, 0x3590, 0xffff, 0xffff, + 0xffff, 0x364c, 0x36ba, 0x0003, 0x0000, 0x0004, 0x0148, 0x003f, + 0x0044, 0x0000, 0x0000, 0x0049, 0x0053, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0062, 0x0076, 0x007b, 0x0089, 0x009d, 0x00a8, 0x0000, + 0x0000, 0x0000, 0x0000, 0x00b3, 0x00bd, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 57040 - 5707F + 0x0000, 0x00c8, 0x0000, 0x0000, 0x00d0, 0x0000, 0x0000, 0x00d8, + 0x0000, 0x0000, 0x00e0, 0x0000, 0x0000, 0x00e8, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00f0, + 0x00fb, 0x0106, 0x0111, 0x011c, 0x0127, 0x0132, 0x013d, 0x0001, + 0x0046, 0x0001, 0x003f, 0x134f, 0x0003, 0x0000, 0x0000, 0x004d, + 0x0001, 0x004f, 0x0002, 0x0074, 0x36e1, 0x03c1, 0x0003, 0x0000, + 0x0000, 0x0057, 0x0002, 0x005a, 0x005e, 0x0002, 0x0074, 0x36e1, + 0x03c1, 0x0002, 0x0074, 0x36f7, 0x03d3, 0x0003, 0x0000, 0x0066, + // Entry 57080 - 570BF + 0x006b, 0x0003, 0x0075, 0x0000, 0x0012, 0x001e, 0x0002, 0x006e, + 0x0072, 0x0002, 0x0074, 0x0557, 0x0557, 0x0002, 0x0074, 0x0569, + 0x0569, 0x0001, 0x0078, 0x0001, 0x0074, 0x0485, 0x0003, 0x007f, + 0x0000, 0x0082, 0x0001, 0x0074, 0x0485, 0x0002, 0x0000, 0x0085, + 0x0002, 0x0074, 0x0569, 0x0569, 0x0003, 0x0000, 0x008d, 0x0092, + 0x0003, 0x0075, 0x002e, 0x0042, 0x0050, 0x0002, 0x0095, 0x0099, + 0x0002, 0x0074, 0x370f, 0x05c3, 0x0002, 0x0075, 0x0076, 0x0062, + 0x0003, 0x0000, 0x0000, 0x00a1, 0x0002, 0x0000, 0x00a4, 0x0002, + // Entry 570C0 - 570FF + 0x0075, 0x0076, 0x0076, 0x0003, 0x0000, 0x0000, 0x00ac, 0x0002, + 0x0000, 0x00af, 0x0002, 0x0075, 0x0076, 0x0062, 0x0003, 0x0000, + 0x0000, 0x00b7, 0x0001, 0x00b9, 0x0002, 0x0074, 0x06ad, 0x06ad, + 0x0003, 0x0000, 0x0000, 0x00c1, 0x0002, 0x0000, 0x00c4, 0x0002, + 0x0075, 0x008a, 0x008a, 0x0002, 0x0000, 0x00cb, 0x0003, 0x0075, + 0x009a, 0x00b2, 0x00c4, 0x0002, 0x0000, 0x00d3, 0x0003, 0x0075, + 0x00da, 0x00ee, 0x00fc, 0x0002, 0x0000, 0x00db, 0x0003, 0x0075, + 0x010e, 0x0120, 0x012c, 0x0002, 0x0000, 0x00e3, 0x0003, 0x0075, + // Entry 57100 - 5713F + 0x013c, 0x0154, 0x0166, 0x0002, 0x0000, 0x00eb, 0x0003, 0x0075, + 0x017c, 0x0190, 0x019e, 0x0003, 0x0000, 0x0000, 0x00f4, 0x0002, + 0x0000, 0x00f7, 0x0002, 0x0075, 0x01b0, 0x01b0, 0x0003, 0x0000, + 0x0000, 0x00ff, 0x0002, 0x0000, 0x0102, 0x0002, 0x0075, 0x01b0, + 0x01c6, 0x0003, 0x0000, 0x0000, 0x010a, 0x0002, 0x0000, 0x010d, + 0x0002, 0x0075, 0x01dc, 0x01dc, 0x0003, 0x0000, 0x0000, 0x0115, + 0x0002, 0x0000, 0x0118, 0x0002, 0x0075, 0x01dc, 0x01dc, 0x0003, + 0x0000, 0x0000, 0x0120, 0x0002, 0x0000, 0x0123, 0x0002, 0x0075, + // Entry 57140 - 5717F + 0x01dc, 0x01dc, 0x0003, 0x0000, 0x0000, 0x012b, 0x0002, 0x0000, + 0x012e, 0x0002, 0x0075, 0x01ee, 0x01ee, 0x0003, 0x0000, 0x0000, + 0x0136, 0x0002, 0x0000, 0x0139, 0x0002, 0x0075, 0x01ee, 0x01ee, + 0x0003, 0x0000, 0x0000, 0x0141, 0x0002, 0x0000, 0x0144, 0x0002, + 0x0075, 0x01ee, 0x01ee, 0x0004, 0x014d, 0x0151, 0x0000, 0x0156, + 0x0002, 0x0000, 0xffff, 0x4333, 0x0003, 0x0075, 0xffff, 0x0204, + 0x0219, 0x0002, 0x0000, 0x0159, 0x0003, 0x01ef, 0x027c, 0x015d, + 0x0090, 0x0075, 0x0231, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 57180 - 571BF + 0x0265, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x02bb, + 0xffff, 0x031d, 0x0395, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x03f9, 0xffff, 0x0466, 0x04b2, 0x04c8, 0x04fa, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0554, 0xffff, 0xffff, 0xffff, 0xffff, 0x05a2, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0609, 0x0661, 0x0699, + 0xffff, 0xffff, 0xffff, 0x0721, 0xffff, 0x0787, 0xffff, 0x07a6, + 0xffff, 0x07d8, 0xffff, 0x081a, 0xffff, 0xffff, 0x0838, 0x0859, + 0xffff, 0xffff, 0xffff, 0x086d, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 571C0 - 571FF + 0xffff, 0x08a4, 0xffff, 0x0901, 0xffff, 0xffff, 0x094e, 0x0973, + 0xffff, 0xffff, 0xffff, 0x0998, 0xffff, 0xffff, 0x09b0, 0xffff, + 0xffff, 0x09d3, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x09e9, 0xffff, 0x0a1a, 0xffff, + 0xffff, 0xffff, 0x0a9b, 0xffff, 0xffff, 0x0b1f, 0xffff, 0xffff, + 0x0b7f, 0x0bdb, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0c15, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0c2d, 0xffff, 0xffff, 0xffff, 0x0c45, 0xffff, 0xffff, + // Entry 57200 - 5723F + 0xffff, 0x0c7d, 0xffff, 0x0ce9, 0x0d4d, 0xffff, 0x0d97, 0xffff, + 0xffff, 0x0db3, 0x008b, 0x0075, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x024d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x02ab, 0xffff, 0x02f8, 0x037d, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x03db, 0xffff, 0x044b, 0xffff, 0xffff, 0x04e0, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0544, 0xffff, 0xffff, 0xffff, + 0xffff, 0x058a, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x05e8, + 0xffff, 0x067b, 0xffff, 0xffff, 0xffff, 0x06f9, 0xffff, 0xffff, + // Entry 57240 - 5727F + 0xffff, 0xffff, 0xffff, 0x07c2, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0890, 0xffff, 0x08e9, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x09fd, 0xffff, 0xffff, 0xffff, 0x0a71, 0xffff, 0xffff, 0x0b07, + 0xffff, 0xffff, 0x0b65, 0x0bc9, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 57280 - 572BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0c5f, 0xffff, 0x0ccf, 0x0d33, 0x008b, + 0x0075, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x028c, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x02da, 0xffff, + 0x0351, 0x03bc, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0426, + 0xffff, 0x0490, 0xffff, 0xffff, 0x0523, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0573, 0xffff, 0xffff, 0xffff, 0xffff, 0x05c9, 0xffff, + // Entry 572C0 - 572FF + 0xffff, 0xffff, 0xffff, 0xffff, 0x0639, 0xffff, 0x06c4, 0xffff, + 0xffff, 0xffff, 0x0758, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x07fd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x08c7, 0xffff, 0x0928, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0a46, 0xffff, 0xffff, + // Entry 57300 - 5733F + 0xffff, 0x0ad4, 0xffff, 0xffff, 0x0b46, 0xffff, 0xffff, 0x0ba8, + 0x0bfc, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0caa, 0xffff, 0x0d12, 0x0d76, 0x0003, 0x0004, 0x026a, 0x06a5, + 0x000b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, + 0x003b, 0x0000, 0x0000, 0x0253, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0019, 0x0000, 0x002a, 0x0004, 0x0027, 0x0021, + // Entry 57340 - 5737F + 0x001e, 0x0024, 0x0001, 0x0075, 0x0dc9, 0x0001, 0x0075, 0x0ddd, + 0x0001, 0x0075, 0x0deb, 0x0001, 0x0075, 0x0df8, 0x0004, 0x0038, + 0x0032, 0x002f, 0x0035, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, + 0x022e, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, + 0x0044, 0x00a9, 0x0100, 0x0135, 0x0206, 0x0220, 0x0231, 0x0242, + 0x0002, 0x0047, 0x0078, 0x0003, 0x004b, 0x005a, 0x0069, 0x000d, + 0x0007, 0xffff, 0x00a7, 0x2522, 0x2526, 0x252a, 0x252e, 0x00bb, + 0x00bf, 0x2532, 0x2536, 0x253a, 0x00cf, 0x253e, 0x000d, 0x0018, + // Entry 57380 - 573BF + 0xffff, 0x2a23, 0x2a5a, 0x2a5c, 0x2a5e, 0x2a5c, 0x2a68, 0x2a68, + 0x2a5e, 0x2a71, 0x2a62, 0x2a64, 0x2a66, 0x000d, 0x0007, 0xffff, + 0x00d7, 0x00de, 0x2542, 0x2547, 0x252e, 0x00f0, 0x00f5, 0x254d, + 0x2554, 0x255c, 0x0112, 0x2563, 0x0003, 0x007c, 0x008b, 0x009a, + 0x000d, 0x0038, 0xffff, 0x00bd, 0x26f6, 0x269e, 0x26fa, 0x26a6, + 0x26fe, 0x2702, 0x2706, 0x270a, 0x270e, 0x2712, 0x2716, 0x000d, + 0x0018, 0xffff, 0x2a23, 0x2a5a, 0x2a5c, 0x2a5e, 0x2a5c, 0x2a68, + 0x2a68, 0x2a5e, 0x2a71, 0x2a62, 0x2a64, 0x2a66, 0x000d, 0x0007, + // Entry 573C0 - 573FF + 0xffff, 0x0120, 0x0127, 0x256a, 0x256f, 0x2575, 0x2579, 0x257e, + 0x2583, 0x258a, 0x2592, 0x0161, 0x2599, 0x0002, 0x00ac, 0x00d6, + 0x0005, 0x00b2, 0x00bb, 0x00cd, 0x0000, 0x00c4, 0x0007, 0x0075, + 0x0e08, 0x0e0c, 0x0e11, 0x0e16, 0x0e1b, 0x0e1f, 0x0e23, 0x0007, + 0x0018, 0x2a23, 0x2a66, 0x2a71, 0x2a6d, 0x2a75, 0x2a31, 0x2a71, + 0x0007, 0x0075, 0x0e28, 0x0e2b, 0x0e2e, 0x0e31, 0x0e34, 0x0e37, + 0x0e3a, 0x0007, 0x0075, 0x0e3d, 0x0e47, 0x0e50, 0x0e59, 0x0e64, + 0x0e6e, 0x0e73, 0x0005, 0x00dc, 0x00e5, 0x00f7, 0x0000, 0x00ee, + // Entry 57400 - 5743F + 0x0007, 0x0075, 0x0e08, 0x0e0c, 0x0e11, 0x0e16, 0x0e1b, 0x0e1f, + 0x0e23, 0x0007, 0x0018, 0x2a23, 0x2a66, 0x2a71, 0x2a6d, 0x2a75, + 0x2a31, 0x2a71, 0x0007, 0x0075, 0x0e28, 0x0e2b, 0x0e2e, 0x0e31, + 0x0e34, 0x0e37, 0x0e3a, 0x0007, 0x0075, 0x0e3d, 0x0e47, 0x0e50, + 0x0e59, 0x0e64, 0x0e6e, 0x0e73, 0x0002, 0x0103, 0x011c, 0x0003, + 0x0107, 0x010e, 0x0115, 0x0005, 0x0075, 0xffff, 0x0e7a, 0x0e7f, + 0x0e84, 0x0e89, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x0005, 0x0075, 0xffff, 0x0e8e, 0x0e97, 0x0ea0, 0x0ea9, + // Entry 57440 - 5747F + 0x0003, 0x0120, 0x0127, 0x012e, 0x0005, 0x0075, 0xffff, 0x0e7a, + 0x0e7f, 0x0e84, 0x0e89, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x0005, 0x0075, 0xffff, 0x0e8e, 0x0e97, 0x0ea0, + 0x0ea9, 0x0002, 0x0138, 0x019f, 0x0003, 0x013c, 0x015d, 0x017e, + 0x0008, 0x0148, 0x014e, 0x0145, 0x0151, 0x0154, 0x0157, 0x015a, + 0x014b, 0x0001, 0x0075, 0x0eb2, 0x0001, 0x0075, 0x0ebc, 0x0001, + 0x0075, 0x0ebf, 0x0001, 0x001a, 0x01d1, 0x0001, 0x0075, 0x0eca, + 0x0001, 0x0075, 0x0ed2, 0x0001, 0x0075, 0x0eda, 0x0001, 0x0075, + // Entry 57480 - 574BF + 0x0ee4, 0x0008, 0x0169, 0x016f, 0x0166, 0x0172, 0x0175, 0x0178, + 0x017b, 0x016c, 0x0001, 0x0075, 0x0eb2, 0x0001, 0x0075, 0x0ebc, + 0x0001, 0x0075, 0x0ebf, 0x0001, 0x001a, 0x01d1, 0x0001, 0x0075, + 0x0eca, 0x0001, 0x0075, 0x0ed2, 0x0001, 0x0075, 0x0eda, 0x0001, + 0x0075, 0x0ee4, 0x0008, 0x018a, 0x0190, 0x0187, 0x0193, 0x0196, + 0x0199, 0x019c, 0x018d, 0x0001, 0x0075, 0x0eb2, 0x0001, 0x0075, + 0x0ebc, 0x0001, 0x0075, 0x0ebf, 0x0001, 0x001a, 0x01d1, 0x0001, + 0x0075, 0x0eca, 0x0001, 0x0075, 0x0ed2, 0x0001, 0x0075, 0x0eda, + // Entry 574C0 - 574FF + 0x0001, 0x0075, 0x0ee4, 0x0003, 0x01a3, 0x01c4, 0x01e5, 0x0008, + 0x01af, 0x01b5, 0x01ac, 0x01b8, 0x01bb, 0x01be, 0x01c1, 0x01b2, + 0x0001, 0x0075, 0x0eb2, 0x0001, 0x0075, 0x0ebc, 0x0001, 0x0075, + 0x0ebf, 0x0001, 0x001a, 0x01d1, 0x0001, 0x0075, 0x0eca, 0x0001, + 0x0075, 0x0ed2, 0x0001, 0x0075, 0x0eda, 0x0001, 0x0075, 0x0ee4, + 0x0008, 0x01d0, 0x01d6, 0x01cd, 0x01d9, 0x01dc, 0x01df, 0x01e2, + 0x01d3, 0x0001, 0x0075, 0x0eb2, 0x0001, 0x0075, 0x0ebc, 0x0001, + 0x0075, 0x0ebf, 0x0001, 0x001a, 0x01d1, 0x0001, 0x0075, 0x0eca, + // Entry 57500 - 5753F + 0x0001, 0x0075, 0x0ed2, 0x0001, 0x0075, 0x0eda, 0x0001, 0x0075, + 0x0ee4, 0x0008, 0x01f1, 0x01f7, 0x01ee, 0x01fa, 0x01fd, 0x0200, + 0x0203, 0x01f4, 0x0001, 0x0075, 0x0eb2, 0x0001, 0x0075, 0x0ebc, + 0x0001, 0x0075, 0x0ebf, 0x0001, 0x001a, 0x01d1, 0x0001, 0x0075, + 0x0eca, 0x0001, 0x0075, 0x0ed2, 0x0001, 0x0075, 0x0eda, 0x0001, + 0x0075, 0x0ee4, 0x0003, 0x0215, 0x0000, 0x020a, 0x0002, 0x020d, + 0x0211, 0x0002, 0x0075, 0x0eec, 0x0f0f, 0x0002, 0x0075, 0x0efd, + 0x0f17, 0x0002, 0x0218, 0x021c, 0x0002, 0x0075, 0x0f1c, 0x0f0f, + // Entry 57540 - 5757F + 0x0002, 0x0075, 0x0f21, 0x0f17, 0x0004, 0x022e, 0x0228, 0x0225, + 0x022b, 0x0001, 0x0075, 0x0f26, 0x0001, 0x0075, 0x0f36, 0x0001, + 0x0075, 0x0f40, 0x0001, 0x0015, 0x14be, 0x0004, 0x023f, 0x0239, + 0x0236, 0x023c, 0x0001, 0x001d, 0x178c, 0x0001, 0x0021, 0x0727, + 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, 0x0250, + 0x024a, 0x0247, 0x024d, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, + 0x022e, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0001, + 0x0255, 0x0001, 0x0257, 0x0003, 0x0000, 0x0000, 0x025b, 0x000d, + // Entry 57580 - 575BF + 0x0000, 0xffff, 0x0657, 0x41ed, 0x4420, 0x4430, 0x443f, 0x444e, + 0x3c38, 0x445c, 0x4465, 0x446d, 0x4475, 0x4480, 0x0042, 0x02ad, + 0x02b2, 0x02b7, 0x02bc, 0x02d3, 0x02ea, 0x0301, 0x0318, 0x032a, + 0x033c, 0x0353, 0x0365, 0x0377, 0x0392, 0x03a8, 0x03be, 0x03c3, + 0x03c8, 0x03cd, 0x03e4, 0x03f6, 0x0408, 0x040d, 0x0412, 0x0417, + 0x041c, 0x0421, 0x0426, 0x042b, 0x0430, 0x0435, 0x0449, 0x045d, + 0x0471, 0x0485, 0x0499, 0x04ad, 0x04c1, 0x04d5, 0x04e9, 0x04fd, + 0x0511, 0x0525, 0x0539, 0x054d, 0x0561, 0x0575, 0x0589, 0x059d, + // Entry 575C0 - 575FF + 0x05b1, 0x05c5, 0x05d9, 0x05de, 0x05e3, 0x05e8, 0x05fe, 0x0610, + 0x0622, 0x0638, 0x064a, 0x065c, 0x0672, 0x0684, 0x0696, 0x069b, + 0x06a0, 0x0001, 0x02af, 0x0001, 0x0001, 0x0040, 0x0001, 0x02b4, + 0x0001, 0x0001, 0x0040, 0x0001, 0x02b9, 0x0001, 0x0001, 0x0040, + 0x0003, 0x02c0, 0x02c3, 0x02c8, 0x0001, 0x0075, 0x0f49, 0x0003, + 0x0075, 0x0f4d, 0x0f5a, 0x0f62, 0x0002, 0x02cb, 0x02cf, 0x0002, + 0x0075, 0x0f6e, 0x0f6e, 0x0002, 0x0075, 0x0f7f, 0x0f7f, 0x0003, + 0x02d7, 0x02da, 0x02df, 0x0001, 0x0075, 0x0f49, 0x0003, 0x0075, + // Entry 57600 - 5763F + 0x0f8d, 0x0f99, 0x0f62, 0x0002, 0x02e2, 0x02e6, 0x0002, 0x0075, + 0x0f6e, 0x0f6e, 0x0002, 0x0075, 0x0f7f, 0x0f7f, 0x0003, 0x02ee, + 0x02f1, 0x02f6, 0x0001, 0x0075, 0x0f49, 0x0003, 0x0075, 0x0f8d, + 0x0f99, 0x0f62, 0x0002, 0x02f9, 0x02fd, 0x0002, 0x0075, 0x0f6e, + 0x0f6e, 0x0002, 0x0075, 0x0f7f, 0x0f7f, 0x0003, 0x0305, 0x0308, + 0x030d, 0x0001, 0x0075, 0x0fa0, 0x0003, 0x0075, 0x0fa7, 0x0fb7, + 0x0fc2, 0x0002, 0x0310, 0x0314, 0x0002, 0x0075, 0x0fd1, 0x0fd1, + 0x0002, 0x0075, 0x0fe5, 0x0fe5, 0x0003, 0x031c, 0x0000, 0x031f, + // Entry 57640 - 5767F + 0x0001, 0x0075, 0x0ff6, 0x0002, 0x0322, 0x0326, 0x0002, 0x0075, + 0x0fd1, 0x0fd1, 0x0002, 0x0075, 0x0fe5, 0x0fe5, 0x0003, 0x032e, + 0x0000, 0x0331, 0x0001, 0x0075, 0x0ff6, 0x0002, 0x0334, 0x0338, + 0x0002, 0x0075, 0x0fd1, 0x0fd1, 0x0002, 0x0075, 0x0fe5, 0x0fe5, + 0x0003, 0x0340, 0x0343, 0x0348, 0x0001, 0x0075, 0x0ff9, 0x0003, + 0x0075, 0x0ffc, 0x1008, 0x100f, 0x0002, 0x034b, 0x034f, 0x0002, + 0x0075, 0x101a, 0x101a, 0x0002, 0x0075, 0x102a, 0x102a, 0x0003, + 0x0357, 0x0000, 0x035a, 0x0001, 0x0075, 0x0ff9, 0x0002, 0x035d, + // Entry 57680 - 576BF + 0x0361, 0x0002, 0x0075, 0x101a, 0x101a, 0x0002, 0x0075, 0x102a, + 0x102a, 0x0003, 0x0369, 0x0000, 0x036c, 0x0001, 0x0075, 0x0ff9, + 0x0002, 0x036f, 0x0373, 0x0002, 0x0075, 0x101a, 0x101a, 0x0002, + 0x0075, 0x102a, 0x102a, 0x0004, 0x037c, 0x037f, 0x0384, 0x038f, + 0x0001, 0x0070, 0x04af, 0x0003, 0x0075, 0x1037, 0x1046, 0x1050, + 0x0002, 0x0387, 0x038b, 0x0002, 0x0075, 0x105e, 0x105e, 0x0002, + 0x0075, 0x1071, 0x1071, 0x0001, 0x0075, 0x1081, 0x0004, 0x0397, + 0x0000, 0x039a, 0x03a5, 0x0001, 0x0070, 0x04af, 0x0002, 0x039d, + // Entry 576C0 - 576FF + 0x03a1, 0x0002, 0x0075, 0x105e, 0x105e, 0x0002, 0x0075, 0x1071, + 0x1071, 0x0001, 0x0075, 0x1081, 0x0004, 0x03ad, 0x0000, 0x03b0, + 0x03bb, 0x0001, 0x0070, 0x04af, 0x0002, 0x03b3, 0x03b7, 0x0002, + 0x0075, 0x105e, 0x105e, 0x0002, 0x0075, 0x1071, 0x1071, 0x0001, + 0x0075, 0x1081, 0x0001, 0x03c0, 0x0001, 0x0075, 0x108b, 0x0001, + 0x03c5, 0x0001, 0x0075, 0x108b, 0x0001, 0x03ca, 0x0001, 0x0075, + 0x108b, 0x0003, 0x03d1, 0x03d4, 0x03d9, 0x0001, 0x0075, 0x109a, + 0x0003, 0x0075, 0x109e, 0x10a4, 0x10aa, 0x0002, 0x03dc, 0x03e0, + // Entry 57700 - 5773F + 0x0002, 0x0075, 0x10b1, 0x10b1, 0x0002, 0x0075, 0x10c2, 0x10c2, + 0x0003, 0x03e8, 0x0000, 0x03eb, 0x0001, 0x0075, 0x109a, 0x0002, + 0x03ee, 0x03f2, 0x0002, 0x0075, 0x10b1, 0x10b1, 0x0002, 0x0075, + 0x10c2, 0x10c2, 0x0003, 0x03fa, 0x0000, 0x03fd, 0x0001, 0x0075, + 0x109a, 0x0002, 0x0400, 0x0404, 0x0002, 0x0075, 0x10b1, 0x10b1, + 0x0002, 0x0075, 0x10c2, 0x10c2, 0x0001, 0x040a, 0x0001, 0x0075, + 0x10d0, 0x0001, 0x040f, 0x0001, 0x0075, 0x10d0, 0x0001, 0x0414, + 0x0001, 0x0075, 0x10d0, 0x0001, 0x0419, 0x0001, 0x0075, 0x10d9, + // Entry 57740 - 5777F + 0x0001, 0x041e, 0x0001, 0x0075, 0x10d9, 0x0001, 0x0423, 0x0001, + 0x0075, 0x10d9, 0x0001, 0x0428, 0x0001, 0x0075, 0x10e4, 0x0001, + 0x042d, 0x0001, 0x0075, 0x10e4, 0x0001, 0x0432, 0x0001, 0x0075, + 0x10e4, 0x0003, 0x0000, 0x0439, 0x043e, 0x0003, 0x0075, 0x10f6, + 0x1109, 0x1117, 0x0002, 0x0441, 0x0445, 0x0002, 0x0075, 0x1129, + 0x1129, 0x0002, 0x0075, 0x1143, 0x1143, 0x0003, 0x0000, 0x044d, + 0x0452, 0x0003, 0x0075, 0x10f6, 0x1109, 0x1117, 0x0002, 0x0455, + 0x0459, 0x0002, 0x0075, 0x1129, 0x1129, 0x0002, 0x0075, 0x1143, + // Entry 57780 - 577BF + 0x1143, 0x0003, 0x0000, 0x0461, 0x0466, 0x0003, 0x0075, 0x10f6, + 0x1109, 0x1117, 0x0002, 0x0469, 0x046d, 0x0002, 0x0075, 0x1129, + 0x1129, 0x0002, 0x0075, 0x1143, 0x1143, 0x0003, 0x0000, 0x0475, + 0x047a, 0x0003, 0x0075, 0x115a, 0x116c, 0x1179, 0x0002, 0x047d, + 0x0481, 0x0002, 0x0075, 0x118a, 0x118a, 0x0002, 0x0075, 0x11a3, + 0x11a3, 0x0003, 0x0000, 0x0489, 0x048e, 0x0003, 0x0075, 0x115a, + 0x116c, 0x1179, 0x0002, 0x0491, 0x0495, 0x0002, 0x0075, 0x118a, + 0x118a, 0x0002, 0x0075, 0x11a3, 0x11a3, 0x0003, 0x0000, 0x049d, + // Entry 577C0 - 577FF + 0x04a2, 0x0003, 0x0075, 0x115a, 0x116c, 0x1179, 0x0002, 0x04a5, + 0x04a9, 0x0002, 0x0075, 0x118a, 0x118a, 0x0002, 0x0075, 0x11a3, + 0x11a3, 0x0003, 0x0000, 0x04b1, 0x04b6, 0x0003, 0x0075, 0x11b9, + 0x11cb, 0x11d8, 0x0002, 0x04b9, 0x04bd, 0x0002, 0x0075, 0x11e9, + 0x11e9, 0x0002, 0x0075, 0x1202, 0x1202, 0x0003, 0x0000, 0x04c5, + 0x04ca, 0x0003, 0x0075, 0x11b9, 0x11cb, 0x11d8, 0x0002, 0x04cd, + 0x04d1, 0x0002, 0x0075, 0x11e9, 0x11e9, 0x0002, 0x0075, 0x1202, + 0x1202, 0x0003, 0x0000, 0x04d9, 0x04de, 0x0003, 0x0075, 0x11b9, + // Entry 57800 - 5783F + 0x11cb, 0x11d8, 0x0002, 0x04e1, 0x04e5, 0x0002, 0x0075, 0x11e9, + 0x11e9, 0x0002, 0x0075, 0x1202, 0x1202, 0x0003, 0x0000, 0x04ed, + 0x04f2, 0x0003, 0x0075, 0x1218, 0x122c, 0x123b, 0x0002, 0x04f5, + 0x04f9, 0x0002, 0x0075, 0x124e, 0x124e, 0x0002, 0x0075, 0x1269, + 0x1269, 0x0003, 0x0000, 0x0501, 0x0506, 0x0003, 0x0075, 0x1218, + 0x122c, 0x123b, 0x0002, 0x0509, 0x050d, 0x0002, 0x0075, 0x124e, + 0x124e, 0x0002, 0x0075, 0x1269, 0x1269, 0x0003, 0x0000, 0x0515, + 0x051a, 0x0003, 0x0075, 0x1218, 0x122c, 0x123b, 0x0002, 0x051d, + // Entry 57840 - 5787F + 0x0521, 0x0002, 0x0075, 0x124e, 0x124e, 0x0002, 0x0075, 0x1269, + 0x1269, 0x0003, 0x0000, 0x0529, 0x052e, 0x0003, 0x0075, 0x1281, + 0x1294, 0x12a2, 0x0002, 0x0531, 0x0535, 0x0002, 0x0075, 0x12b4, + 0x12b4, 0x0002, 0x0075, 0x12ce, 0x12ce, 0x0003, 0x0000, 0x053d, + 0x0542, 0x0003, 0x0075, 0x1281, 0x1294, 0x12a2, 0x0002, 0x0545, + 0x0549, 0x0002, 0x0075, 0x12b4, 0x12b4, 0x0002, 0x0075, 0x12ce, + 0x12ce, 0x0003, 0x0000, 0x0551, 0x0556, 0x0003, 0x0075, 0x1281, + 0x1294, 0x12a2, 0x0002, 0x0559, 0x055d, 0x0002, 0x0075, 0x12b4, + // Entry 57880 - 578BF + 0x12b4, 0x0002, 0x0075, 0x12ce, 0x12ce, 0x0003, 0x0000, 0x0565, + 0x056a, 0x0003, 0x0075, 0x12e5, 0x12f3, 0x12fc, 0x0002, 0x056d, + 0x0571, 0x0002, 0x0075, 0x1309, 0x1309, 0x0002, 0x0075, 0x131e, + 0x131e, 0x0003, 0x0000, 0x0579, 0x057e, 0x0003, 0x0075, 0x12e5, + 0x12f3, 0x12fc, 0x0002, 0x0581, 0x0585, 0x0002, 0x0075, 0x1309, + 0x1309, 0x0002, 0x0075, 0x131e, 0x131e, 0x0003, 0x0000, 0x058d, + 0x0592, 0x0003, 0x0075, 0x12e5, 0x12f3, 0x12fc, 0x0002, 0x0595, + 0x0599, 0x0002, 0x0075, 0x1309, 0x1309, 0x0002, 0x0075, 0x131e, + // Entry 578C0 - 578FF + 0x131e, 0x0003, 0x0000, 0x05a1, 0x05a6, 0x0003, 0x0075, 0x1330, + 0x1340, 0x134b, 0x0002, 0x05a9, 0x05ad, 0x0002, 0x0075, 0x135a, + 0x135a, 0x0002, 0x0075, 0x1371, 0x1371, 0x0003, 0x0000, 0x05b5, + 0x05ba, 0x0003, 0x0075, 0x1330, 0x1340, 0x134b, 0x0002, 0x05bd, + 0x05c1, 0x0002, 0x0075, 0x135a, 0x135a, 0x0002, 0x0075, 0x1371, + 0x1371, 0x0003, 0x0000, 0x05c9, 0x05ce, 0x0003, 0x0075, 0x1330, + 0x1340, 0x134b, 0x0002, 0x05d1, 0x05d5, 0x0002, 0x0075, 0x135a, + 0x135a, 0x0002, 0x0075, 0x1371, 0x1371, 0x0001, 0x05db, 0x0001, + // Entry 57900 - 5793F + 0x0075, 0x1385, 0x0001, 0x05e0, 0x0001, 0x0075, 0x1385, 0x0001, + 0x05e5, 0x0001, 0x0075, 0x1385, 0x0003, 0x05ec, 0x05ef, 0x05f3, + 0x0001, 0x0075, 0x138b, 0x0002, 0x0075, 0xffff, 0x1390, 0x0002, + 0x05f6, 0x05fa, 0x0002, 0x0075, 0x139b, 0x139b, 0x0002, 0x0075, + 0x13ad, 0x13ad, 0x0003, 0x0602, 0x0000, 0x0605, 0x0001, 0x0075, + 0x138b, 0x0002, 0x0608, 0x060c, 0x0002, 0x0075, 0x139b, 0x139b, + 0x0002, 0x0075, 0x13ad, 0x13ad, 0x0003, 0x0614, 0x0000, 0x0617, + 0x0001, 0x0075, 0x138b, 0x0002, 0x061a, 0x061e, 0x0002, 0x0075, + // Entry 57940 - 5797F + 0x139b, 0x139b, 0x0002, 0x0075, 0x13ad, 0x13ad, 0x0003, 0x0626, + 0x0629, 0x062d, 0x0001, 0x0075, 0x13bc, 0x0002, 0x0075, 0xffff, + 0x13c3, 0x0002, 0x0630, 0x0634, 0x0002, 0x0075, 0x13d0, 0x13d0, + 0x0002, 0x0075, 0x13e4, 0x13e4, 0x0003, 0x063c, 0x0000, 0x063f, + 0x0001, 0x0075, 0x13f5, 0x0002, 0x0642, 0x0646, 0x0002, 0x0075, + 0x13d0, 0x13d0, 0x0002, 0x0075, 0x13e4, 0x13e4, 0x0003, 0x064e, + 0x0000, 0x0651, 0x0001, 0x0075, 0x13f5, 0x0002, 0x0654, 0x0658, + 0x0002, 0x0075, 0x13d0, 0x13d0, 0x0002, 0x0075, 0x13e4, 0x13e4, + // Entry 57980 - 579BF + 0x0003, 0x0660, 0x0663, 0x0667, 0x0001, 0x0075, 0x13fa, 0x0002, + 0x0075, 0xffff, 0x1401, 0x0002, 0x066a, 0x066e, 0x0002, 0x0075, + 0x1407, 0x1407, 0x0002, 0x0075, 0x141b, 0x141b, 0x0003, 0x0676, + 0x0000, 0x0679, 0x0001, 0x0075, 0x142c, 0x0002, 0x067c, 0x0680, + 0x0002, 0x0075, 0x1407, 0x1407, 0x0002, 0x0075, 0x141b, 0x141b, + 0x0003, 0x0688, 0x0000, 0x068b, 0x0001, 0x0075, 0x142c, 0x0002, + 0x068e, 0x0692, 0x0002, 0x0075, 0x1407, 0x1407, 0x0002, 0x0075, + 0x141b, 0x141b, 0x0001, 0x0698, 0x0001, 0x0075, 0x1431, 0x0001, + // Entry 579C0 - 579FF + 0x069d, 0x0001, 0x0075, 0x1431, 0x0001, 0x06a2, 0x0001, 0x0075, + 0x1431, 0x0004, 0x06aa, 0x06af, 0x06b4, 0x06c3, 0x0003, 0x0000, + 0x1dc7, 0x4333, 0x432f, 0x0003, 0x0000, 0x1de0, 0x448a, 0x4493, + 0x0002, 0x0000, 0x06b7, 0x0003, 0x0000, 0x06be, 0x06bb, 0x0001, + 0x0075, 0x1440, 0x0003, 0x0075, 0xffff, 0x145c, 0x1472, 0x0002, + 0x0000, 0x06c6, 0x0003, 0x0760, 0x07f6, 0x06ca, 0x0094, 0x0075, + 0x1488, 0x149b, 0x14b1, 0x14c6, 0x14fa, 0x1543, 0x157d, 0x15c1, + 0x1614, 0x1663, 0x16ad, 0xffff, 0x16ed, 0x172b, 0x177c, 0x17c4, + // Entry 57A00 - 57A3F + 0x1816, 0x1857, 0x18a0, 0x1907, 0x1977, 0x19d3, 0x1a29, 0x1a6e, + 0x1ab6, 0x1ae7, 0x1af3, 0x1b12, 0x1b41, 0x1b6a, 0x1b9b, 0x1bc0, + 0x1bf5, 0x1c28, 0x1c60, 0x1c91, 0x1ca7, 0x1ccc, 0x1d0e, 0x1d54, + 0x1d79, 0x1d86, 0x1d9e, 0x1dc4, 0x1df7, 0x1e1c, 0x1e6f, 0x1eaa, + 0x1edd, 0x1f34, 0x1f7e, 0x1fa3, 0x1fba, 0x1fe8, 0x1ff8, 0x2013, + 0x203e, 0x2055, 0x2089, 0x20e8, 0x212f, 0x214e, 0x216e, 0x21b1, + 0x21e7, 0x220c, 0x2225, 0x2237, 0x2248, 0x2262, 0x227b, 0x22a0, + 0x22d3, 0x230b, 0x2343, 0xffff, 0x2370, 0x238b, 0x23b4, 0x23dd, + // Entry 57A40 - 57A7F + 0x23fc, 0x242f, 0x2443, 0x2466, 0x2493, 0x24b6, 0x24e1, 0x24f1, + 0x2507, 0x251d, 0x2544, 0x2571, 0x259e, 0x2608, 0x265e, 0x269c, + 0x26c5, 0x26d2, 0x26de, 0x2701, 0x2754, 0x27a2, 0x27d7, 0x27e3, + 0x2811, 0x2866, 0x28a4, 0x28d8, 0x2905, 0x2911, 0x293a, 0x2972, + 0x29a6, 0x29d3, 0x2a03, 0x2a46, 0x2a54, 0x2a61, 0x2a6f, 0x2a7e, + 0x2a99, 0xffff, 0x2ad0, 0x2af7, 0x2b0e, 0x2b1d, 0x2b34, 0x2b4b, + 0x2b59, 0x2b65, 0x2b7e, 0x2ba7, 0x2bb8, 0x2bd2, 0x2bf9, 0x2c18, + 0x2c4d, 0x2c68, 0x2ca7, 0x2cec, 0x2d17, 0x2d39, 0x2d7c, 0x2dab, + // Entry 57A80 - 57ABF + 0x2db8, 0x2dc9, 0x2dee, 0x2e2d, 0x0094, 0x0075, 0xffff, 0xffff, + 0xffff, 0xffff, 0x14e4, 0x1535, 0x156e, 0x15aa, 0x15fe, 0x164f, + 0x169a, 0xffff, 0x16e2, 0x1712, 0x176c, 0x17ab, 0x1805, 0x1847, + 0x1886, 0x18e3, 0x195e, 0x19b8, 0x1a18, 0x1a5a, 0x1aa5, 0xffff, + 0xffff, 0x1b02, 0xffff, 0x1b59, 0xffff, 0x1bb3, 0x1be9, 0x1c1c, + 0x1c4f, 0xffff, 0xffff, 0x1cbc, 0x1cfb, 0x1d49, 0xffff, 0xffff, + 0xffff, 0x1db2, 0xffff, 0x1e05, 0x1e59, 0xffff, 0x1ec5, 0x1f1c, + 0x1f73, 0xffff, 0xffff, 0xffff, 0xffff, 0x2005, 0xffff, 0xffff, + // Entry 57AC0 - 57AFF + 0x206f, 0x20cc, 0xffff, 0xffff, 0x215b, 0x21a3, 0x21dc, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2295, 0x22c5, 0x22fe, + 0x2334, 0xffff, 0xffff, 0xffff, 0x23a7, 0xffff, 0x23ea, 0xffff, + 0xffff, 0x2457, 0xffff, 0x24a8, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2535, 0xffff, 0x257e, 0x25ed, 0x264d, 0x268f, 0xffff, 0xffff, + 0xffff, 0x26ea, 0x273e, 0x278f, 0xffff, 0xffff, 0x27f7, 0x2854, + 0x2899, 0x28c9, 0xffff, 0xffff, 0x292b, 0x2967, 0x2997, 0xffff, + 0x29e9, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2a8b, 0xffff, + // Entry 57B00 - 57B3F + 0x2ac4, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2b71, 0xffff, 0xffff, 0x2bc6, 0xffff, 0x2c05, 0xffff, 0x2c5a, + 0x2c93, 0x2cde, 0xffff, 0x2d27, 0x2d6c, 0xffff, 0xffff, 0xffff, + 0x2de0, 0x2e19, 0x0094, 0x0075, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1519, 0x155a, 0x1595, 0x15e1, 0x1633, 0x1680, 0x16c9, 0xffff, + 0x1701, 0x174d, 0x1795, 0x17e6, 0x1830, 0x1870, 0x18c3, 0x1934, + 0x1999, 0x19f7, 0x1a43, 0x1a8b, 0x1ad0, 0xffff, 0xffff, 0x1b2b, + 0xffff, 0x1b84, 0xffff, 0x1bd6, 0x1c0a, 0x1c3d, 0x1c7a, 0xffff, + // Entry 57B40 - 57B7F + 0xffff, 0x1ce5, 0x1d2a, 0x1d68, 0xffff, 0xffff, 0xffff, 0x1ddf, + 0xffff, 0x1e3c, 0x1e8e, 0xffff, 0x1efe, 0x1f55, 0x1f92, 0xffff, + 0xffff, 0xffff, 0xffff, 0x202a, 0xffff, 0xffff, 0x20ac, 0x210d, + 0xffff, 0xffff, 0x218a, 0x21c8, 0x21fb, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x22b4, 0x22ea, 0x2321, 0x235b, 0xffff, + 0xffff, 0xffff, 0x23ca, 0xffff, 0x2417, 0xffff, 0xffff, 0x247e, + 0xffff, 0x24cd, 0xffff, 0xffff, 0xffff, 0xffff, 0x255c, 0xffff, + 0x25c7, 0x262c, 0x2678, 0x26b2, 0xffff, 0xffff, 0xffff, 0x2721, + // Entry 57B80 - 57BBF + 0x2773, 0x27be, 0xffff, 0xffff, 0x2834, 0x2881, 0x28b8, 0x28f0, + 0xffff, 0xffff, 0x2952, 0x2986, 0x29be, 0xffff, 0x2a26, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2ab0, 0xffff, 0x2ae5, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2b94, 0xffff, + 0xffff, 0x2be7, 0xffff, 0x2c34, 0xffff, 0x2c7f, 0x2cc4, 0x2d03, + 0xffff, 0x2d54, 0x2d95, 0xffff, 0xffff, 0xffff, 0x2e05, 0x2e4a, + 0x0003, 0x0004, 0x0000, 0x0096, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000d, 0x0027, 0x0008, 0x0000, 0x0000, + // Entry 57BC0 - 57BFF + 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, 0x0000, 0x0004, 0x0024, + 0x001e, 0x001b, 0x0021, 0x0001, 0x0076, 0x0000, 0x0001, 0x0076, + 0x002e, 0x0001, 0x0002, 0x001b, 0x0001, 0x0057, 0x0618, 0x0008, + 0x0030, 0x0054, 0x0000, 0x0000, 0x006c, 0x0074, 0x0085, 0x0000, + 0x0001, 0x0032, 0x0003, 0x0036, 0x0000, 0x0045, 0x000d, 0x0003, + 0xffff, 0x0d88, 0x2414, 0x241b, 0x2422, 0x2429, 0x242e, 0x2265, + 0x2435, 0x243c, 0x2443, 0x244a, 0x229a, 0x000d, 0x0022, 0xffff, + 0x0000, 0x000b, 0x359c, 0x35a5, 0x35ea, 0x35ef, 0x35f6, 0x35be, + // Entry 57C00 - 57C3F + 0x3601, 0x35c7, 0x35d4, 0x35df, 0x0001, 0x0056, 0x0003, 0x005a, + 0x0000, 0x0063, 0x0007, 0x0076, 0x0040, 0x0044, 0x0048, 0x004c, + 0x0050, 0x0054, 0x0058, 0x0007, 0x0021, 0x052e, 0x053b, 0x0548, + 0x0558, 0x0569, 0x3a6e, 0x0581, 0x0001, 0x006e, 0x0001, 0x0070, + 0x0002, 0x0021, 0x0384, 0x3a77, 0x0004, 0x0082, 0x007c, 0x0079, + 0x007f, 0x0001, 0x0076, 0x005c, 0x0001, 0x0076, 0x0088, 0x0001, + 0x0002, 0x003c, 0x0001, 0x0021, 0x0721, 0x0004, 0x0093, 0x008d, + 0x008a, 0x0090, 0x0001, 0x001d, 0x178c, 0x0001, 0x0021, 0x0727, + // Entry 57C40 - 57C7F + 0x0001, 0x0005, 0x0099, 0x0001, 0x0005, 0x00a1, 0x0004, 0x0000, + 0x0000, 0x0000, 0x009b, 0x0002, 0x0000, 0x009e, 0x0003, 0x0000, + 0x0000, 0x00a2, 0x0001, 0x0076, 0x0098, 0x0003, 0x0004, 0x0268, + 0x038b, 0x000b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0010, 0x003b, 0x0000, 0x0000, 0x0251, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0019, 0x0000, 0x002a, 0x0004, 0x0027, + 0x0021, 0x001e, 0x0024, 0x0001, 0x0002, 0x031a, 0x0001, 0x0000, + 0x049a, 0x0001, 0x0000, 0x04a5, 0x0001, 0x001d, 0x0842, 0x0004, + // Entry 57C80 - 57CBF + 0x0038, 0x0032, 0x002f, 0x0035, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0008, 0x0044, 0x00a9, 0x0100, 0x0135, 0x0206, 0x021e, 0x022f, + 0x0240, 0x0002, 0x0047, 0x0078, 0x0003, 0x004b, 0x005a, 0x0069, + 0x000d, 0x0012, 0xffff, 0x0000, 0x0007, 0x3abd, 0x3ac4, 0x3acb, + 0x0023, 0x002a, 0x3ad2, 0x0038, 0x3ad9, 0x0046, 0x004d, 0x000d, + 0x0012, 0xffff, 0x0054, 0x3a36, 0x3a8d, 0x3a90, 0x3a8d, 0x3a4f, + 0x3a4f, 0x3a90, 0x3a93, 0x3a96, 0x3a42, 0x3a5b, 0x000d, 0x0076, + // Entry 57CC0 - 57CFF + 0xffff, 0x00b4, 0x00bf, 0x00cc, 0x00d5, 0x00e0, 0x00e7, 0x00ee, + 0x00f5, 0x0102, 0x0111, 0x011e, 0x0129, 0x0003, 0x007c, 0x008b, + 0x009a, 0x000d, 0x0040, 0xffff, 0x0e82, 0x0e89, 0x0e90, 0x0e97, + 0x20e5, 0x20ec, 0x20f3, 0x0eb3, 0x0eba, 0x0ec1, 0x0ec8, 0x0ecf, + 0x000d, 0x0012, 0xffff, 0x0054, 0x3a36, 0x3a8d, 0x3a90, 0x3a8d, + 0x3a4f, 0x3a4f, 0x3a90, 0x3a93, 0x3a96, 0x3a42, 0x3a5b, 0x000d, + 0x006c, 0xffff, 0x0130, 0x013b, 0x0148, 0x0151, 0x385a, 0x3861, + 0x3868, 0x0171, 0x017e, 0x018d, 0x019a, 0x01a5, 0x0002, 0x00ac, + // Entry 57D00 - 57D3F + 0x00d6, 0x0005, 0x00b2, 0x00bb, 0x00cd, 0x0000, 0x00c4, 0x0007, + 0x0076, 0x0136, 0x013d, 0x0144, 0x014b, 0x0152, 0x0159, 0x0160, + 0x0007, 0x0012, 0x0054, 0x3a5b, 0x3a93, 0x3a99, 0x3a9c, 0x3ab7, + 0x3aa2, 0x0007, 0x0076, 0x0167, 0x016c, 0x0171, 0x0176, 0x017b, + 0x0180, 0x0185, 0x0007, 0x0076, 0x018a, 0x0199, 0x01a8, 0x01b7, + 0x01c8, 0x01d9, 0x01e2, 0x0005, 0x00dc, 0x00e5, 0x00f7, 0x0000, + 0x00ee, 0x0007, 0x0076, 0x01ed, 0x01f4, 0x01fb, 0x0202, 0x0209, + 0x0210, 0x0217, 0x0007, 0x0012, 0x0054, 0x3a5b, 0x3a93, 0x3a99, + // Entry 57D40 - 57D7F + 0x3a9c, 0x3ab7, 0x3aa2, 0x0007, 0x0076, 0x0167, 0x016c, 0x0171, + 0x0176, 0x017b, 0x0180, 0x0185, 0x0007, 0x0076, 0x021e, 0x022d, + 0x023c, 0x024b, 0x025c, 0x026d, 0x0276, 0x0002, 0x0103, 0x011c, + 0x0003, 0x0107, 0x010e, 0x0115, 0x0005, 0x0076, 0xffff, 0x0281, + 0x0286, 0x028b, 0x0290, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x0005, 0x0076, 0xffff, 0x0295, 0x02a2, 0x02af, + 0x02bc, 0x0003, 0x0120, 0x0127, 0x012e, 0x0005, 0x0076, 0xffff, + 0x0281, 0x0286, 0x028b, 0x0290, 0x0005, 0x0000, 0xffff, 0x0033, + // Entry 57D80 - 57DBF + 0x0035, 0x0037, 0x23b3, 0x0005, 0x0076, 0xffff, 0x0295, 0x02a2, + 0x02af, 0x02bc, 0x0002, 0x0138, 0x019f, 0x0003, 0x013c, 0x015d, + 0x017e, 0x0008, 0x0148, 0x014e, 0x0145, 0x0151, 0x0154, 0x0157, + 0x015a, 0x014b, 0x0001, 0x0076, 0x02c9, 0x0001, 0x0076, 0x02d9, + 0x0001, 0x0076, 0x02de, 0x0001, 0x0076, 0x02f0, 0x0001, 0x0076, + 0x02f5, 0x0001, 0x0076, 0x0304, 0x0001, 0x0076, 0x0313, 0x0001, + 0x0076, 0x0324, 0x0008, 0x0169, 0x016f, 0x0166, 0x0172, 0x0175, + 0x0178, 0x017b, 0x016c, 0x0001, 0x0076, 0x02c9, 0x0001, 0x0076, + // Entry 57DC0 - 57DFF + 0x02d9, 0x0001, 0x0076, 0x02de, 0x0001, 0x0076, 0x02f0, 0x0001, + 0x0076, 0x02f5, 0x0001, 0x0076, 0x0304, 0x0001, 0x0076, 0x0313, + 0x0001, 0x0076, 0x0324, 0x0008, 0x018a, 0x0190, 0x0187, 0x0193, + 0x0196, 0x0199, 0x019c, 0x018d, 0x0001, 0x0076, 0x02c9, 0x0001, + 0x0076, 0x02d9, 0x0001, 0x0076, 0x02de, 0x0001, 0x0076, 0x02f0, + 0x0001, 0x0076, 0x02f5, 0x0001, 0x0076, 0x0304, 0x0001, 0x0076, + 0x0313, 0x0001, 0x0076, 0x0324, 0x0003, 0x01a3, 0x01c4, 0x01e5, + 0x0008, 0x01af, 0x01b5, 0x01ac, 0x01b8, 0x01bb, 0x01be, 0x01c1, + // Entry 57E00 - 57E3F + 0x01b2, 0x0001, 0x0076, 0x02c9, 0x0001, 0x0076, 0x02d9, 0x0001, + 0x0076, 0x02de, 0x0001, 0x0076, 0x02f0, 0x0001, 0x0076, 0x02f5, + 0x0001, 0x0076, 0x0304, 0x0001, 0x0076, 0x0313, 0x0001, 0x0076, + 0x0324, 0x0008, 0x01d0, 0x01d6, 0x01cd, 0x01d9, 0x01dc, 0x01df, + 0x01e2, 0x01d3, 0x0001, 0x0076, 0x02c9, 0x0001, 0x0076, 0x02d9, + 0x0001, 0x0076, 0x02de, 0x0001, 0x0076, 0x02f0, 0x0001, 0x0076, + 0x02f5, 0x0001, 0x0076, 0x0304, 0x0001, 0x0076, 0x0313, 0x0001, + 0x0076, 0x0324, 0x0008, 0x01f1, 0x01f7, 0x01ee, 0x01fa, 0x01fd, + // Entry 57E40 - 57E7F + 0x0200, 0x0203, 0x01f4, 0x0001, 0x0076, 0x02c9, 0x0001, 0x0076, + 0x02d9, 0x0001, 0x0076, 0x02de, 0x0001, 0x0076, 0x02f0, 0x0001, + 0x0076, 0x02f5, 0x0001, 0x0076, 0x0304, 0x0001, 0x0076, 0x0313, + 0x0001, 0x0076, 0x0324, 0x0003, 0x0214, 0x0000, 0x020a, 0x0002, + 0x020d, 0x0211, 0x0002, 0x0076, 0x0331, 0x0373, 0x0001, 0x0076, + 0x0351, 0x0002, 0x0217, 0x021b, 0x0002, 0x0076, 0x0382, 0x0373, + 0x0001, 0x0076, 0x0389, 0x0004, 0x022c, 0x0226, 0x0223, 0x0229, + 0x0001, 0x0037, 0x09ae, 0x0001, 0x0005, 0x0625, 0x0001, 0x0002, + // Entry 57E80 - 57EBF + 0x0282, 0x0001, 0x0015, 0x14be, 0x0004, 0x023d, 0x0237, 0x0234, + 0x023a, 0x0001, 0x0020, 0x0365, 0x0001, 0x0020, 0x0375, 0x0001, + 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, 0x024e, 0x0248, + 0x0245, 0x024b, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0253, + 0x0001, 0x0255, 0x0003, 0x0000, 0x0000, 0x0259, 0x000d, 0x0076, + 0xffff, 0x0390, 0x03a1, 0x03ac, 0x03c4, 0x03da, 0x03f2, 0x040c, + 0x0417, 0x0424, 0x0433, 0x0440, 0x0452, 0x0040, 0x02a9, 0x0000, + // Entry 57EC0 - 57EFF + 0x0000, 0x02ae, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02c5, + 0x0000, 0x0000, 0x02dc, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x02f3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x030a, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x030f, 0x0000, 0x0000, 0x0317, + 0x0000, 0x0000, 0x031f, 0x0000, 0x0000, 0x0327, 0x0000, 0x0000, + 0x032f, 0x0000, 0x0000, 0x0337, 0x0000, 0x0000, 0x033f, 0x0000, + 0x0000, 0x0000, 0x0347, 0x0000, 0x034c, 0x0000, 0x0000, 0x035e, + 0x0000, 0x0000, 0x0370, 0x0000, 0x0000, 0x0386, 0x0001, 0x02ab, + // Entry 57F00 - 57F3F + 0x0001, 0x0076, 0x0464, 0x0003, 0x02b2, 0x02b5, 0x02ba, 0x0001, + 0x0076, 0x046b, 0x0003, 0x0076, 0x0472, 0x0484, 0x0490, 0x0002, + 0x02bd, 0x02c1, 0x0002, 0x0076, 0x04a6, 0x04a6, 0x0002, 0x0076, + 0x04c0, 0x04c0, 0x0003, 0x02c9, 0x02cc, 0x02d1, 0x0001, 0x0076, + 0x04d6, 0x0003, 0x0076, 0x04db, 0x04eb, 0x04f5, 0x0002, 0x02d4, + 0x02d8, 0x0002, 0x0076, 0x0509, 0x0509, 0x0002, 0x0076, 0x0521, + 0x0521, 0x0003, 0x02e0, 0x02e3, 0x02e8, 0x0001, 0x0076, 0x0535, + 0x0003, 0x0076, 0x0540, 0x0556, 0x0566, 0x0002, 0x02eb, 0x02ef, + // Entry 57F40 - 57F7F + 0x0002, 0x0076, 0x0580, 0x0580, 0x0002, 0x0076, 0x059e, 0x059e, + 0x0003, 0x02f7, 0x02fa, 0x02ff, 0x0001, 0x0076, 0x05b8, 0x0003, + 0x0076, 0x05bf, 0x05c8, 0x05d3, 0x0002, 0x0302, 0x0306, 0x0002, + 0x0076, 0x05e0, 0x05e0, 0x0002, 0x0076, 0x05fa, 0x05fa, 0x0001, + 0x030c, 0x0001, 0x0076, 0x0610, 0x0002, 0x0000, 0x0312, 0x0003, + 0x0076, 0x0624, 0x063e, 0x0652, 0x0002, 0x0000, 0x031a, 0x0003, + 0x0076, 0x0670, 0x068a, 0x069e, 0x0002, 0x0000, 0x0322, 0x0003, + 0x0076, 0x06bc, 0x06d6, 0x06ea, 0x0002, 0x0000, 0x032a, 0x0003, + // Entry 57F80 - 57FBF + 0x0076, 0x0708, 0x0724, 0x0733, 0x0002, 0x0000, 0x0332, 0x0003, + 0x0076, 0x0753, 0x076f, 0x0785, 0x0002, 0x0000, 0x033a, 0x0003, + 0x0076, 0x07a5, 0x07b9, 0x07c7, 0x0002, 0x0000, 0x0342, 0x0003, + 0x0076, 0x07df, 0x07f5, 0x0805, 0x0001, 0x0349, 0x0001, 0x0076, + 0x081f, 0x0003, 0x0350, 0x0000, 0x0353, 0x0001, 0x0076, 0x0831, + 0x0002, 0x0356, 0x035a, 0x0002, 0x0076, 0x083a, 0x083a, 0x0002, + 0x0076, 0x0856, 0x0856, 0x0003, 0x0362, 0x0000, 0x0365, 0x0001, + 0x0076, 0x086e, 0x0002, 0x0368, 0x036c, 0x0002, 0x0076, 0x087b, + // Entry 57FC0 - 57FFF + 0x087b, 0x0002, 0x0076, 0x089b, 0x089b, 0x0003, 0x0374, 0x0377, + 0x037b, 0x0001, 0x0076, 0x08b7, 0x0002, 0x0076, 0xffff, 0x08c2, + 0x0002, 0x037e, 0x0382, 0x0002, 0x0076, 0x08cd, 0x08cd, 0x0002, + 0x0076, 0x08eb, 0x08eb, 0x0001, 0x0388, 0x0001, 0x0076, 0x0905, + 0x0004, 0x0390, 0x0395, 0x039a, 0x03a5, 0x0003, 0x0000, 0x1dc7, + 0x4333, 0x432f, 0x0003, 0x0076, 0x0914, 0x0923, 0x0943, 0x0002, + 0x0000, 0x039d, 0x0002, 0x0000, 0x03a0, 0x0003, 0x0076, 0xffff, + 0x0963, 0x0988, 0x0002, 0x0000, 0x03a8, 0x0003, 0x0442, 0x04d8, + // Entry 58000 - 5803F + 0x03ac, 0x0094, 0x0076, 0x09ad, 0x09cd, 0x09f6, 0x0a1b, 0x0a67, + 0x0ae3, 0x0b51, 0x0bc1, 0x0c8d, 0x0d4b, 0x0e0c, 0xffff, 0xffff, + 0x0eca, 0x0f46, 0x0fc7, 0x1057, 0x10cf, 0x115c, 0x1218, 0x12dd, + 0x1380, 0x1418, 0x1486, 0x14e6, 0x153c, 0x1552, 0x1588, 0x15da, + 0x1626, 0x167e, 0x16b0, 0x1716, 0x176e, 0x17da, 0x1830, 0x1859, + 0x189c, 0x1911, 0x198e, 0x19d8, 0x19ee, 0x1a14, 0x1a58, 0x1ab4, + 0x1af7, 0x1b88, 0xffff, 0x1c11, 0x1ca4, 0x1d30, 0x1d72, 0x1d9d, + 0x1de0, 0x1dfe, 0x1e30, 0x1e7a, 0x1ea5, 0x1eec, 0x1f8d, 0x2001, + // Entry 58040 - 5807F + 0x2019, 0x2054, 0x20d6, 0x2138, 0x217a, 0x2198, 0x21b9, 0x21d8, + 0x2207, 0x2232, 0x2271, 0x22d5, 0x233b, 0x23a5, 0xffff, 0x23f7, + 0x2424, 0x2467, 0x24b5, 0x24ed, 0x2547, 0x2569, 0x25ab, 0x2607, + 0x2646, 0x2694, 0x26b0, 0x26ce, 0x26ea, 0x2731, 0x2783, 0xffff, + 0xffff, 0x27bc, 0x282c, 0x2876, 0x288e, 0x28a4, 0x28e1, 0x296e, + 0x29fe, 0x2a68, 0x2a7c, 0x2ad1, 0x2b6d, 0x2bdf, 0x2c3d, 0x2c8f, + 0x2ca5, 0x2ced, 0x2d53, 0x2db1, 0x2e03, 0x2e5d, 0x2ee1, 0x2efb, + 0xffff, 0x2f13, 0x2f2d, 0x2f5f, 0xffff, 0x2fc3, 0x3011, 0x303a, + // Entry 58080 - 580BF + 0x3056, 0x3081, 0x30ac, 0x30c6, 0x30dc, 0x310a, 0x315c, 0x317c, + 0x31ac, 0x31f2, 0x322a, 0x328c, 0x32be, 0x332c, 0x33a0, 0x33ee, + 0x342e, 0x34aa, 0x3500, 0x3518, 0x3537, 0x3579, 0x35e7, 0x0094, + 0x0076, 0xffff, 0xffff, 0xffff, 0xffff, 0x0a42, 0x0acb, 0x0b35, + 0x0ba3, 0x0c57, 0x0d1b, 0x0dcd, 0xffff, 0xffff, 0x0eac, 0x0f28, + 0x0f9c, 0x1037, 0x10b1, 0x112d, 0x11dc, 0x12b2, 0x1355, 0x13f8, + 0x1472, 0x14c8, 0xffff, 0xffff, 0x156c, 0xffff, 0x1607, 0xffff, + 0x1698, 0x1702, 0x1758, 0x17bc, 0xffff, 0xffff, 0x1880, 0x18ee, + // Entry 580C0 - 580FF + 0x197a, 0xffff, 0xffff, 0xffff, 0x1a37, 0xffff, 0x1ace, 0x1b63, + 0xffff, 0x1bec, 0x1c75, 0x1d1c, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1e18, 0xffff, 0xffff, 0x1ebf, 0x1f60, 0xffff, 0xffff, 0x2031, + 0x20bc, 0x2124, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x225d, 0x22bb, 0x2323, 0x238d, 0xffff, 0xffff, 0xffff, 0x2451, + 0xffff, 0x24cd, 0xffff, 0xffff, 0x258e, 0xffff, 0x262c, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2715, 0xffff, 0xffff, 0xffff, 0x279d, + 0x2814, 0xffff, 0xffff, 0xffff, 0x28ba, 0x2949, 0x29da, 0xffff, + // Entry 58100 - 5813F + 0xffff, 0x2aa1, 0x2b4b, 0x2bcb, 0x2c21, 0xffff, 0xffff, 0x2cd1, + 0x2d3f, 0x2d95, 0xffff, 0x2e2c, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2f45, 0xffff, 0x2fad, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x30f2, 0xffff, 0xffff, 0x3196, 0xffff, + 0x3206, 0xffff, 0x32a4, 0x330c, 0x3386, 0xffff, 0x340c, 0x348c, + 0xffff, 0xffff, 0xffff, 0x3561, 0x35c3, 0x0094, 0x0076, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0a9d, 0x0b0c, 0x0b7e, 0x0c0c, 0x0cd4, + 0x0d8c, 0x0e5c, 0xffff, 0xffff, 0x0ef9, 0x0f75, 0x1003, 0x1088, + // Entry 58140 - 5817F + 0x10fe, 0x119c, 0x1265, 0x1319, 0x13bc, 0x1449, 0x14ab, 0x1515, + 0xffff, 0xffff, 0x15b5, 0xffff, 0x1656, 0xffff, 0x16d9, 0x173b, + 0x1795, 0x1809, 0xffff, 0xffff, 0x18c9, 0x1945, 0x19b3, 0xffff, + 0xffff, 0xffff, 0x1a8a, 0xffff, 0x1b31, 0x1bbe, 0xffff, 0x1c47, + 0x1ce4, 0x1d55, 0xffff, 0xffff, 0xffff, 0xffff, 0x1e59, 0xffff, + 0xffff, 0x1f2a, 0x1fcb, 0xffff, 0xffff, 0x2088, 0x2101, 0x215d, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2296, 0x2300, + 0x2364, 0x23ce, 0xffff, 0xffff, 0xffff, 0x248e, 0xffff, 0x251e, + // Entry 58180 - 581BF + 0xffff, 0xffff, 0x25d9, 0xffff, 0x2671, 0xffff, 0xffff, 0xffff, + 0xffff, 0x275e, 0xffff, 0xffff, 0xffff, 0x27ec, 0x2855, 0xffff, + 0xffff, 0xffff, 0x2919, 0x29a4, 0x2a33, 0xffff, 0xffff, 0x2b12, + 0x2ba0, 0x2c04, 0x2c6a, 0xffff, 0xffff, 0x2d1a, 0x2d78, 0x2dde, + 0xffff, 0x2e9f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2f8a, + 0xffff, 0x2fea, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x3133, 0xffff, 0xffff, 0x31d3, 0xffff, 0x325f, 0xffff, + 0x32e9, 0x335d, 0x33cb, 0xffff, 0x3461, 0x34d9, 0xffff, 0xffff, + // Entry 581C0 - 581FF + 0xffff, 0x35a2, 0x361c, 0x0002, 0x0003, 0x00a7, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, 0x0000, + 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, 0x0006, 0x000d, + 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, 0x0002, + 0x0587, 0x0008, 0x002f, 0x0076, 0x0000, 0x0000, 0x0000, 0x0085, + 0x0096, 0x0000, 0x0002, 0x0032, 0x0054, 0x0003, 0x0036, 0x0000, + 0x0045, 0x000d, 0x0077, 0xffff, 0x0000, 0x000a, 0x0011, 0x0018, + // Entry 58200 - 5823F + 0x001f, 0x0026, 0x002d, 0x0034, 0x003b, 0x0042, 0x0049, 0x0050, + 0x000d, 0x0077, 0xffff, 0x005a, 0x006b, 0x0011, 0x0018, 0x001f, + 0x0026, 0x0078, 0x0034, 0x003b, 0x0042, 0x0082, 0x0099, 0x0003, + 0x0058, 0x0000, 0x0067, 0x000d, 0x0077, 0xffff, 0x0000, 0x000a, + 0x0011, 0x0018, 0x001f, 0x0026, 0x002d, 0x0034, 0x003b, 0x0042, + 0x0049, 0x0050, 0x000d, 0x0077, 0xffff, 0x005a, 0x006b, 0x0011, + 0x0018, 0x001f, 0x0026, 0x0078, 0x0034, 0x003b, 0x0042, 0x0082, + 0x0099, 0x0001, 0x0078, 0x0003, 0x0000, 0x0000, 0x007c, 0x0007, + // Entry 58240 - 5827F + 0x0077, 0x00aa, 0x00b4, 0x00be, 0x00c8, 0x00d2, 0x00df, 0x00ec, + 0x0004, 0x0093, 0x008d, 0x008a, 0x0090, 0x0001, 0x0006, 0x015b, + 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, 0x0002, + 0x08e8, 0x0004, 0x00a4, 0x009e, 0x009b, 0x00a1, 0x0001, 0x0002, + 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, 0x0002, 0x04fe, 0x0001, + 0x0002, 0x0508, 0x003d, 0x0000, 0x0000, 0x0000, 0x00e5, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x00ea, 0x0000, 0x0000, 0x00ef, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00f4, 0x0000, 0x0000, + // Entry 58280 - 582BF + 0x0000, 0x0000, 0x0000, 0x00ff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0104, 0x0000, 0x0000, 0x0109, 0x0000, 0x0000, 0x010e, + 0x0001, 0x00e7, 0x0001, 0x0077, 0x00f6, 0x0001, 0x00ec, 0x0001, + 0x0077, 0x00fd, 0x0001, 0x00f1, 0x0001, 0x0077, 0x0104, 0x0002, + 0x00f7, 0x00fa, 0x0001, 0x0077, 0x010e, 0x0003, 0x0077, 0x0115, + // Entry 582C0 - 582FF + 0x011c, 0x0123, 0x0001, 0x0101, 0x0001, 0x0077, 0x012a, 0x0001, + 0x0106, 0x0001, 0x0077, 0x013b, 0x0001, 0x010b, 0x0001, 0x0077, + 0x0142, 0x0001, 0x0110, 0x0001, 0x0077, 0x0149, 0x0002, 0x0003, + 0x0075, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000c, 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0015, 0x0000, 0x0000, 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, + 0x0001, 0x0006, 0x000d, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, + 0x001b, 0x0001, 0x0010, 0x0305, 0x0008, 0x002f, 0x0044, 0x0000, + // Entry 58300 - 5833F + 0x0000, 0x0000, 0x0053, 0x0064, 0x0000, 0x0001, 0x0031, 0x0003, + 0x0000, 0x0000, 0x0035, 0x000d, 0x0077, 0xffff, 0x0156, 0x0163, + 0x016d, 0x0173, 0x0178, 0x017c, 0x017e, 0x0180, 0x0187, 0x018c, + 0x0191, 0x01a3, 0x0001, 0x0046, 0x0003, 0x0000, 0x0000, 0x004a, + 0x0007, 0x0077, 0x01b0, 0x01b7, 0x01c2, 0x01c9, 0x01cf, 0x01d6, + 0x01dd, 0x0004, 0x0061, 0x005b, 0x0058, 0x005e, 0x0001, 0x0006, + 0x015b, 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, + 0x0002, 0x08e8, 0x0004, 0x0072, 0x006c, 0x0069, 0x006f, 0x0001, + // Entry 58340 - 5837F + 0x0002, 0x04e3, 0x0001, 0x0002, 0x04f2, 0x0001, 0x0002, 0x04fe, + 0x0001, 0x0002, 0x0508, 0x003d, 0x0000, 0x0000, 0x0000, 0x00b3, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00b8, 0x0000, 0x0000, + 0x00bd, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00c2, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x00cd, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 58380 - 583BF + 0x0000, 0x0000, 0x00d2, 0x0000, 0x0000, 0x00d7, 0x0000, 0x0000, + 0x00dc, 0x0001, 0x00b5, 0x0001, 0x0077, 0x01e5, 0x0001, 0x00ba, + 0x0001, 0x000a, 0x0184, 0x0001, 0x00bf, 0x0001, 0x0067, 0x01ed, + 0x0002, 0x00c5, 0x00c8, 0x0001, 0x0077, 0x01ea, 0x0003, 0x000a, + 0x0197, 0x62b3, 0x62ba, 0x0001, 0x00cf, 0x0001, 0x0077, 0x01ef, + 0x0001, 0x00d4, 0x0001, 0x0077, 0x01fe, 0x0001, 0x00d9, 0x0001, + 0x0077, 0x0203, 0x0001, 0x00de, 0x0001, 0x0077, 0x0208, 0x0003, + 0x0004, 0x053a, 0x0949, 0x0012, 0x0017, 0x002e, 0x0151, 0x0000, + // Entry 583C0 - 583FF + 0x019d, 0x0000, 0x01e9, 0x0214, 0x0432, 0x046d, 0x04b5, 0x0000, + 0x0000, 0x0000, 0x0000, 0x04c2, 0x04da, 0x0522, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0020, 0x0027, 0x0000, 0x9006, 0x0001, + 0x0022, 0x0001, 0x0024, 0x0001, 0x0000, 0x0000, 0x0003, 0x0000, + 0x0000, 0x002b, 0x0001, 0x0077, 0x0212, 0x000a, 0x0039, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0140, 0x0000, 0x0000, 0x009e, 0x00b1, + 0x0002, 0x003c, 0x006d, 0x0003, 0x0040, 0x004f, 0x005e, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, + // Entry 58400 - 5843F + 0x449e, 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, + 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, + 0x2424, 0x4414, 0x4417, 0x441a, 0x0003, 0x0071, 0x0080, 0x008f, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, + // Entry 58440 - 5847F + 0x449e, 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, + 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, 0x0003, 0x00a2, 0x00ad, + 0x00a7, 0x0003, 0x0077, 0xffff, 0xffff, 0x0233, 0x0004, 0x0077, + 0xffff, 0xffff, 0xffff, 0x0233, 0x0002, 0x0077, 0xffff, 0x0233, + 0x0006, 0x00b8, 0x0000, 0x0000, 0x00cb, 0x00ea, 0x012d, 0x0001, + 0x00ba, 0x0001, 0x00bc, 0x000d, 0x0077, 0xffff, 0x023f, 0x0243, + 0x0249, 0x024f, 0x0254, 0x025a, 0x025f, 0x0265, 0x026a, 0x0270, + // Entry 58480 - 584BF + 0x0276, 0x027d, 0x0001, 0x00cd, 0x0001, 0x00cf, 0x0019, 0x0077, + 0xffff, 0x0283, 0x028f, 0x029a, 0x02a6, 0x02b2, 0x02bd, 0x02c7, + 0x02d2, 0x02de, 0x02eb, 0x02f5, 0x0302, 0x030f, 0x0319, 0x0324, + 0x0330, 0x033a, 0x0344, 0x0353, 0x0360, 0x036f, 0x037e, 0x038a, + 0x0396, 0x0001, 0x00ec, 0x0001, 0x00ee, 0x003d, 0x0077, 0xffff, + 0x03a2, 0x03ac, 0x03b7, 0x03c3, 0x03ce, 0x03da, 0x03e4, 0x03ef, + 0x03f9, 0x0405, 0x0410, 0x041d, 0x0428, 0x0432, 0x043e, 0x044a, + 0x0454, 0x045f, 0x0469, 0x0475, 0x047f, 0x048b, 0x0496, 0x04a3, + // Entry 584C0 - 584FF + 0x04af, 0x04b9, 0x04c4, 0x04cf, 0x04d9, 0x04e5, 0x04ef, 0x04fb, + 0x0505, 0x0511, 0x051d, 0x052a, 0x0535, 0x053e, 0x0549, 0x0555, + 0x055f, 0x056b, 0x0575, 0x0581, 0x058c, 0x0598, 0x05a3, 0x05af, + 0x05ba, 0x05c4, 0x05cf, 0x05db, 0x05e5, 0x05f1, 0x05fc, 0x0608, + 0x0612, 0x061d, 0x0628, 0x0635, 0x0001, 0x012f, 0x0001, 0x0131, + 0x000d, 0x0077, 0xffff, 0x023f, 0x0243, 0x0249, 0x024f, 0x0254, + 0x025a, 0x025f, 0x0265, 0x026a, 0x0270, 0x0276, 0x027d, 0x0004, + 0x014e, 0x0148, 0x0145, 0x014b, 0x0001, 0x0077, 0x0640, 0x0001, + // Entry 58500 - 5853F + 0x0077, 0x065f, 0x0001, 0x0077, 0x067e, 0x0001, 0x0002, 0x08e8, + 0x0001, 0x0153, 0x0002, 0x0156, 0x0179, 0x0002, 0x0159, 0x0169, + 0x000e, 0x0000, 0xffff, 0x03ce, 0x44a0, 0x44a5, 0x4148, 0x44ab, + 0x3af7, 0x44b0, 0x03f9, 0x3b07, 0x44b9, 0x44bf, 0x44c4, 0x242d, + 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, 0x441d, + 0x0003, 0x017d, 0x0000, 0x018d, 0x000e, 0x0000, 0xffff, 0x03ce, + 0x44a0, 0x44a5, 0x4148, 0x44ab, 0x3af7, 0x44b0, 0x03f9, 0x3b07, + // Entry 58540 - 5857F + 0x44b9, 0x44bf, 0x44c4, 0x242d, 0x000e, 0x0000, 0xffff, 0x03ce, + 0x44a0, 0x44a5, 0x4148, 0x44ab, 0x3af7, 0x44b0, 0x03f9, 0x3b07, + 0x44b9, 0x44bf, 0x44c4, 0x242d, 0x0001, 0x019f, 0x0002, 0x01a2, + 0x01c5, 0x0002, 0x01a5, 0x01b5, 0x000e, 0x0000, 0xffff, 0x042f, + 0x0438, 0x44ca, 0x3b15, 0x44d0, 0x0450, 0x0458, 0x0460, 0x3b1c, + 0x046e, 0x3b23, 0x0479, 0x3b29, 0x000e, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, + 0x4414, 0x4417, 0x441a, 0x441d, 0x0003, 0x01c9, 0x0000, 0x01d9, + // Entry 58580 - 585BF + 0x000e, 0x0000, 0xffff, 0x042f, 0x0438, 0x44ca, 0x3b15, 0x44d0, + 0x0450, 0x0458, 0x0460, 0x3b1c, 0x046e, 0x3b23, 0x0479, 0x3b29, + 0x000e, 0x0000, 0xffff, 0x042f, 0x0438, 0x44ca, 0x3b15, 0x44d0, + 0x0450, 0x0458, 0x0460, 0x3b1c, 0x046e, 0x3b23, 0x0479, 0x3b29, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01f2, 0x0000, + 0x0203, 0x0004, 0x0200, 0x01fa, 0x01f7, 0x01fd, 0x0001, 0x0077, + 0x0686, 0x0001, 0x0077, 0x06ae, 0x0001, 0x001f, 0x0525, 0x0001, + 0x0002, 0x0587, 0x0004, 0x0211, 0x020b, 0x0208, 0x020e, 0x0001, + // Entry 585C0 - 585FF + 0x0077, 0x06cf, 0x0001, 0x0077, 0x06cf, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0008, 0x021d, 0x0282, 0x02d9, 0x030e, + 0x03df, 0x03ff, 0x0410, 0x0421, 0x0002, 0x0220, 0x0251, 0x0003, + 0x0224, 0x0233, 0x0242, 0x000d, 0x0077, 0xffff, 0x06de, 0x06e4, + 0x06ea, 0x06f0, 0x06f6, 0x06fc, 0x0702, 0x0708, 0x070e, 0x0714, + 0x071b, 0x0722, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, 0x4417, + 0x441a, 0x000d, 0x0077, 0xffff, 0x0729, 0x0732, 0x073b, 0x0744, + // Entry 58600 - 5863F + 0x074d, 0x0756, 0x075f, 0x0768, 0x0771, 0x077a, 0x0784, 0x078e, + 0x0003, 0x0255, 0x0264, 0x0273, 0x000d, 0x0077, 0xffff, 0x0798, + 0x079e, 0x07a4, 0x07aa, 0x07b0, 0x07b6, 0x07bc, 0x07c2, 0x07c8, + 0x07ce, 0x07d5, 0x07dc, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, + 0x4417, 0x441a, 0x000d, 0x0077, 0xffff, 0x07e3, 0x07ec, 0x07f5, + 0x07fe, 0x0807, 0x0810, 0x0819, 0x0822, 0x082b, 0x0834, 0x083e, + 0x0848, 0x0002, 0x0285, 0x02af, 0x0005, 0x028b, 0x0294, 0x02a6, + // Entry 58640 - 5867F + 0x0000, 0x029d, 0x0007, 0x0077, 0x0852, 0x0855, 0x085a, 0x085f, + 0x0864, 0x0869, 0x086e, 0x0007, 0x0077, 0x0852, 0x0873, 0x0876, + 0x0879, 0x087c, 0x087f, 0x0882, 0x0007, 0x0077, 0x0852, 0x0873, + 0x0876, 0x0879, 0x087c, 0x087f, 0x0882, 0x0007, 0x0077, 0x0885, + 0x0892, 0x089c, 0x08a5, 0x08af, 0x08ba, 0x08c5, 0x0005, 0x02b5, + 0x02be, 0x02d0, 0x0000, 0x02c7, 0x0007, 0x0077, 0x0852, 0x0855, + 0x085a, 0x085f, 0x0864, 0x0869, 0x086e, 0x0007, 0x0077, 0x0852, + 0x0873, 0x0876, 0x0879, 0x087c, 0x087f, 0x0882, 0x0007, 0x0077, + // Entry 58680 - 586BF + 0x0852, 0x0873, 0x0876, 0x0879, 0x087c, 0x087f, 0x0882, 0x0007, + 0x0077, 0x0885, 0x0892, 0x089c, 0x08a5, 0x08af, 0x08ba, 0x08c5, + 0x0002, 0x02dc, 0x02f5, 0x0003, 0x02e0, 0x02e7, 0x02ee, 0x0005, + 0x0000, 0xffff, 0x04e3, 0x39f2, 0x39f5, 0x44d4, 0x0005, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0077, 0xffff, + 0x08d1, 0x08d8, 0x08df, 0x08e6, 0x0003, 0x02f9, 0x0300, 0x0307, + 0x0005, 0x0000, 0xffff, 0x04e3, 0x39f2, 0x39f5, 0x44d4, 0x0005, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0077, + // Entry 586C0 - 586FF + 0xffff, 0x08ed, 0x08f4, 0x08fb, 0x0902, 0x0002, 0x0311, 0x0378, + 0x0003, 0x0315, 0x0336, 0x0357, 0x0008, 0x0321, 0x0327, 0x031e, + 0x032a, 0x032d, 0x0330, 0x0333, 0x0324, 0x0001, 0x0077, 0x0909, + 0x0001, 0x001d, 0x163a, 0x0001, 0x0077, 0x0915, 0x0001, 0x0077, + 0x0918, 0x0001, 0x0077, 0x091b, 0x0001, 0x0077, 0x0921, 0x0001, + 0x0077, 0x0929, 0x0001, 0x0077, 0x092f, 0x0008, 0x0342, 0x0348, + 0x033f, 0x034b, 0x034e, 0x0351, 0x0354, 0x0345, 0x0001, 0x0077, + 0x0909, 0x0001, 0x0000, 0x2002, 0x0001, 0x0045, 0x054d, 0x0001, + // Entry 58700 - 5873F + 0x005f, 0x2962, 0x0001, 0x0077, 0x091b, 0x0001, 0x0077, 0x0921, + 0x0001, 0x0077, 0x0929, 0x0001, 0x0077, 0x092f, 0x0008, 0x0363, + 0x0369, 0x0360, 0x036c, 0x036f, 0x0372, 0x0375, 0x0366, 0x0001, + 0x0077, 0x0909, 0x0001, 0x001d, 0x163a, 0x0001, 0x0077, 0x0915, + 0x0001, 0x0077, 0x0918, 0x0001, 0x0077, 0x091b, 0x0001, 0x0077, + 0x0921, 0x0001, 0x0077, 0x0929, 0x0001, 0x0077, 0x092f, 0x0003, + 0x037c, 0x039d, 0x03be, 0x0008, 0x0388, 0x038e, 0x0385, 0x0391, + 0x0394, 0x0397, 0x039a, 0x038b, 0x0001, 0x0077, 0x0909, 0x0001, + // Entry 58740 - 5877F + 0x001d, 0x163a, 0x0001, 0x0077, 0x0915, 0x0001, 0x0077, 0x0918, + 0x0001, 0x0077, 0x091b, 0x0001, 0x0077, 0x0921, 0x0001, 0x0077, + 0x0929, 0x0001, 0x0077, 0x092f, 0x0008, 0x03a9, 0x03af, 0x03a6, + 0x03b2, 0x03b5, 0x03b8, 0x03bb, 0x03ac, 0x0001, 0x0077, 0x0909, + 0x0001, 0x001d, 0x163a, 0x0001, 0x0077, 0x0935, 0x0001, 0x0077, + 0x0918, 0x0001, 0x0077, 0x091b, 0x0001, 0x0077, 0x0921, 0x0001, + 0x0077, 0x0929, 0x0001, 0x0077, 0x092f, 0x0008, 0x03ca, 0x03d0, + 0x03c7, 0x03d3, 0x03d6, 0x03d9, 0x03dc, 0x03cd, 0x0001, 0x0077, + // Entry 58780 - 587BF + 0x0909, 0x0001, 0x001d, 0x163a, 0x0001, 0x0077, 0x0935, 0x0001, + 0x0077, 0x0918, 0x0001, 0x0077, 0x091b, 0x0001, 0x0077, 0x0921, + 0x0001, 0x0077, 0x0929, 0x0001, 0x0077, 0x092f, 0x0003, 0x03ee, + 0x03f9, 0x03e3, 0x0002, 0x03e6, 0x03ea, 0x0002, 0x0077, 0x093b, + 0x0947, 0x0002, 0x0077, 0xffff, 0x0852, 0x0002, 0x03f1, 0x03f5, + 0x0002, 0x0077, 0x093b, 0x0947, 0x0002, 0x0077, 0xffff, 0x0852, + 0x0001, 0x03fb, 0x0002, 0x0077, 0x094e, 0x0947, 0x0004, 0x040d, + 0x0407, 0x0404, 0x040a, 0x0001, 0x0005, 0x0615, 0x0001, 0x0005, + // Entry 587C0 - 587FF + 0x0625, 0x0001, 0x0002, 0x0282, 0x0001, 0x0002, 0x08e8, 0x0004, + 0x041e, 0x0418, 0x0415, 0x041b, 0x0001, 0x0000, 0x0524, 0x0001, + 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, + 0x0004, 0x042f, 0x0429, 0x0426, 0x042c, 0x0001, 0x001a, 0x04b3, + 0x0001, 0x001a, 0x04b3, 0x0001, 0x0029, 0x025a, 0x0001, 0x0029, + 0x025a, 0x0001, 0x0434, 0x0002, 0x0437, 0x0449, 0x0001, 0x0439, + 0x000e, 0x0000, 0x44f0, 0x054c, 0x0553, 0x44d7, 0x44de, 0x0568, + 0x44e4, 0x44eb, 0x44f8, 0x3d30, 0x44fe, 0x4504, 0x450a, 0x450d, + // Entry 58800 - 5883F + 0x0003, 0x044d, 0x0000, 0x045d, 0x000e, 0x0000, 0x44f0, 0x054c, + 0x0553, 0x44d7, 0x44de, 0x0568, 0x44e4, 0x44eb, 0x44f8, 0x3d30, + 0x44fe, 0x4504, 0x450a, 0x450d, 0x000e, 0x0000, 0x44f0, 0x054c, + 0x0553, 0x44d7, 0x44de, 0x0568, 0x44e4, 0x44eb, 0x44f8, 0x3d30, + 0x44fe, 0x4504, 0x450a, 0x450d, 0x0001, 0x046f, 0x0002, 0x0472, + 0x0493, 0x0002, 0x0475, 0x0484, 0x000d, 0x0000, 0xffff, 0x05a2, + 0x05aa, 0x05b3, 0x05bc, 0x43da, 0x05cb, 0x43e2, 0x43e9, 0x05e1, + 0x05ec, 0x3c1a, 0x3c20, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + // Entry 58840 - 5887F + 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, + 0x4417, 0x441a, 0x0003, 0x0497, 0x0000, 0x04a6, 0x000d, 0x0000, + 0xffff, 0x05a2, 0x05aa, 0x05b3, 0x05bc, 0x43da, 0x05cb, 0x43e2, + 0x43e9, 0x05e1, 0x05ec, 0x3c1a, 0x3c20, 0x000d, 0x0000, 0xffff, + 0x05a2, 0x05aa, 0x05b3, 0x05bc, 0x43da, 0x05cb, 0x43e2, 0x43e9, + 0x05e1, 0x05ec, 0x3c1a, 0x3c20, 0x0005, 0x0000, 0x0000, 0x0000, + 0x0000, 0x04bb, 0x0001, 0x04bd, 0x0001, 0x04bf, 0x0001, 0x0000, + 0x06c8, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x04c9, + // Entry 58880 - 588BF + 0x0004, 0x04d7, 0x04d1, 0x04ce, 0x04d4, 0x0001, 0x0077, 0x0212, + 0x0001, 0x0077, 0x06ae, 0x0001, 0x001f, 0x0525, 0x0001, 0x0010, + 0x0305, 0x0001, 0x04dc, 0x0002, 0x04df, 0x0500, 0x0002, 0x04e2, + 0x04f1, 0x000d, 0x0000, 0xffff, 0x19c9, 0x19d3, 0x19df, 0x4512, + 0x4516, 0x19f2, 0x451d, 0x4522, 0x4527, 0x452c, 0x4319, 0x4320, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, 0x0003, + 0x0504, 0x0000, 0x0513, 0x000d, 0x0000, 0xffff, 0x19c9, 0x19d3, + // Entry 588C0 - 588FF + 0x19df, 0x4512, 0x4516, 0x19f2, 0x451d, 0x4522, 0x4527, 0x452c, + 0x4319, 0x4320, 0x000d, 0x0000, 0xffff, 0x19c9, 0x19d3, 0x19df, + 0x4512, 0x4516, 0x19f2, 0x451d, 0x4522, 0x4527, 0x452c, 0x4319, + 0x4320, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x052b, 0x0533, + 0x0000, 0x9006, 0x0001, 0x052d, 0x0001, 0x052f, 0x0002, 0x0077, + 0x0955, 0x0964, 0x0003, 0x0000, 0x0000, 0x0537, 0x0001, 0x0077, + 0x0212, 0x0042, 0x057d, 0x0582, 0x0587, 0x058c, 0x05a1, 0x05b6, + 0x05cb, 0x05e0, 0x05f5, 0x060a, 0x061f, 0x0634, 0x0649, 0x0662, + // Entry 58900 - 5893F + 0x067b, 0x0694, 0x0699, 0x069e, 0x06a3, 0x06ba, 0x06d1, 0x06e8, + 0x06ed, 0x06f2, 0x06f7, 0x06fc, 0x0701, 0x0706, 0x070b, 0x0710, + 0x0715, 0x0727, 0x0739, 0x074b, 0x075d, 0x076f, 0x0781, 0x0793, + 0x07a5, 0x07b7, 0x07c9, 0x07db, 0x07ed, 0x07ff, 0x0811, 0x0823, + 0x0835, 0x0847, 0x0859, 0x086b, 0x087d, 0x088f, 0x0894, 0x0899, + 0x089e, 0x08b2, 0x08c2, 0x08d2, 0x08e6, 0x08f6, 0x0906, 0x091a, + 0x092a, 0x093a, 0x093f, 0x0944, 0x0001, 0x057f, 0x0001, 0x0077, + 0x096b, 0x0001, 0x0584, 0x0001, 0x0077, 0x096b, 0x0001, 0x0589, + // Entry 58940 - 5897F + 0x0001, 0x0077, 0x096b, 0x0003, 0x0590, 0x0593, 0x0598, 0x0001, + 0x0077, 0x0979, 0x0003, 0x0077, 0x097e, 0x098a, 0x0993, 0x0002, + 0x059b, 0x059e, 0x0001, 0x0077, 0x099c, 0x0001, 0x0077, 0x09af, + 0x0003, 0x05a5, 0x05a8, 0x05ad, 0x0001, 0x0077, 0x0979, 0x0003, + 0x0077, 0x097e, 0x098a, 0x0993, 0x0002, 0x05b0, 0x05b3, 0x0001, + 0x0077, 0x099c, 0x0001, 0x0077, 0x09af, 0x0003, 0x05ba, 0x05bd, + 0x05c2, 0x0001, 0x0077, 0x0979, 0x0003, 0x0077, 0x097e, 0x098a, + 0x0993, 0x0002, 0x05c5, 0x05c8, 0x0001, 0x0077, 0x099c, 0x0001, + // Entry 58980 - 589BF + 0x0077, 0x09af, 0x0003, 0x05cf, 0x05d2, 0x05d7, 0x0001, 0x0077, + 0x09c1, 0x0003, 0x0077, 0x09c6, 0x09d4, 0x09de, 0x0002, 0x05da, + 0x05dd, 0x0001, 0x0077, 0x09e7, 0x0001, 0x0077, 0x09fa, 0x0003, + 0x05e4, 0x05e7, 0x05ec, 0x0001, 0x0077, 0x09c1, 0x0003, 0x0077, + 0x09c6, 0x09d4, 0x09de, 0x0002, 0x05ef, 0x05f2, 0x0001, 0x0077, + 0x09e7, 0x0001, 0x0077, 0x09fa, 0x0003, 0x05f9, 0x05fc, 0x0601, + 0x0001, 0x0077, 0x09c1, 0x0003, 0x0077, 0x09c6, 0x09d4, 0x09de, + 0x0002, 0x0604, 0x0607, 0x0001, 0x0077, 0x09e7, 0x0001, 0x0077, + // Entry 589C0 - 589FF + 0x09fa, 0x0003, 0x060e, 0x0611, 0x0616, 0x0001, 0x0077, 0x0a0c, + 0x0003, 0x0077, 0x0a13, 0x0a23, 0x0a2f, 0x0002, 0x0619, 0x061c, + 0x0001, 0x0077, 0x0a3a, 0x0001, 0x0077, 0x0a4f, 0x0003, 0x0623, + 0x0626, 0x062b, 0x0001, 0x0077, 0x0a0c, 0x0003, 0x0077, 0x0a13, + 0x0a23, 0x0a2f, 0x0002, 0x062e, 0x0631, 0x0001, 0x0077, 0x0a3a, + 0x0001, 0x0077, 0x0a4f, 0x0003, 0x0638, 0x063b, 0x0640, 0x0001, + 0x0077, 0x0a0c, 0x0003, 0x0077, 0x0a13, 0x0a23, 0x0a2f, 0x0002, + 0x0643, 0x0646, 0x0001, 0x0077, 0x0a3a, 0x0001, 0x0077, 0x0a4f, + // Entry 58A00 - 58A3F + 0x0004, 0x064e, 0x0651, 0x0656, 0x065f, 0x0001, 0x0077, 0x0a63, + 0x0003, 0x0077, 0x0a6a, 0x0a7a, 0x0a86, 0x0002, 0x0659, 0x065c, + 0x0001, 0x0077, 0x0a91, 0x0001, 0x0077, 0x0aa6, 0x0001, 0x0077, + 0x0aba, 0x0004, 0x0667, 0x066a, 0x066f, 0x0678, 0x0001, 0x0077, + 0x0a63, 0x0003, 0x0077, 0x0a6a, 0x0a7a, 0x0a86, 0x0002, 0x0672, + 0x0675, 0x0001, 0x0077, 0x0a91, 0x0001, 0x0077, 0x0aa6, 0x0001, + 0x0077, 0x0aba, 0x0004, 0x0680, 0x0683, 0x0688, 0x0691, 0x0001, + 0x0077, 0x0a63, 0x0003, 0x0077, 0x0a6a, 0x0a7a, 0x0a86, 0x0002, + // Entry 58A40 - 58A7F + 0x068b, 0x068e, 0x0001, 0x0077, 0x0a91, 0x0001, 0x0077, 0x0aa6, + 0x0001, 0x0077, 0x0aba, 0x0001, 0x0696, 0x0001, 0x0077, 0x0ac5, + 0x0001, 0x069b, 0x0001, 0x0077, 0x0ac5, 0x0001, 0x06a0, 0x0001, + 0x0077, 0x0ac5, 0x0003, 0x06a7, 0x06aa, 0x06b1, 0x0001, 0x0077, + 0x0ad9, 0x0005, 0x0077, 0x0ae8, 0x0af1, 0x0afa, 0x0adf, 0x0b04, + 0x0002, 0x06b4, 0x06b7, 0x0001, 0x0077, 0x0b0e, 0x0001, 0x0077, + 0x0b22, 0x0003, 0x06be, 0x06c1, 0x06c8, 0x0001, 0x0077, 0x0ad9, + 0x0005, 0x0077, 0xffff, 0xffff, 0xffff, 0x0adf, 0x0b04, 0x0002, + // Entry 58A80 - 58ABF + 0x06cb, 0x06ce, 0x0001, 0x0077, 0x0b0e, 0x0001, 0x0077, 0x0b22, + 0x0003, 0x06d5, 0x06d8, 0x06df, 0x0001, 0x0077, 0x0ad9, 0x0005, + 0x0077, 0xffff, 0xffff, 0xffff, 0x0adf, 0x0b04, 0x0002, 0x06e2, + 0x06e5, 0x0001, 0x0077, 0x0b0e, 0x0001, 0x0077, 0x0b22, 0x0001, + 0x06ea, 0x0001, 0x0077, 0x0b35, 0x0001, 0x06ef, 0x0001, 0x0077, + 0x0b35, 0x0001, 0x06f4, 0x0001, 0x0077, 0x0b35, 0x0001, 0x06f9, + 0x0001, 0x0077, 0x0b46, 0x0001, 0x06fe, 0x0001, 0x0077, 0x0b46, + 0x0001, 0x0703, 0x0001, 0x0077, 0x0b46, 0x0001, 0x0708, 0x0001, + // Entry 58AC0 - 58AFF + 0x0077, 0x0b59, 0x0001, 0x070d, 0x0001, 0x0077, 0x0b59, 0x0001, + 0x0712, 0x0001, 0x0077, 0x0b59, 0x0003, 0x0000, 0x0719, 0x071e, + 0x0003, 0x0077, 0x0b76, 0x0b93, 0x0bac, 0x0002, 0x0721, 0x0724, + 0x0001, 0x0077, 0x0bc4, 0x0001, 0x0077, 0x0bdf, 0x0003, 0x0000, + 0x072b, 0x0730, 0x0003, 0x0077, 0x0b76, 0x0b93, 0x0bac, 0x0002, + 0x0733, 0x0736, 0x0001, 0x0077, 0x0bc4, 0x0001, 0x0077, 0x0bdf, + 0x0003, 0x0000, 0x073d, 0x0742, 0x0003, 0x0077, 0x0b76, 0x0b93, + 0x0bac, 0x0002, 0x0745, 0x0748, 0x0001, 0x0077, 0x0bc4, 0x0001, + // Entry 58B00 - 58B3F + 0x0077, 0x0bdf, 0x0003, 0x0000, 0x074f, 0x0754, 0x0003, 0x0077, + 0x0bf9, 0x0c13, 0x0c29, 0x0002, 0x0757, 0x075a, 0x0001, 0x0077, + 0x0c3e, 0x0001, 0x0077, 0x0c56, 0x0003, 0x0000, 0x0761, 0x0766, + 0x0003, 0x0077, 0x0bf9, 0x0c13, 0x0c29, 0x0002, 0x0769, 0x076c, + 0x0001, 0x0077, 0x0c3e, 0x0001, 0x0077, 0x0c56, 0x0003, 0x0000, + 0x0773, 0x0778, 0x0003, 0x0077, 0x0bf9, 0x0c13, 0x0c29, 0x0002, + 0x077b, 0x077e, 0x0001, 0x0077, 0x0c3e, 0x0001, 0x0077, 0x0c56, + 0x0003, 0x0000, 0x0785, 0x078a, 0x0003, 0x0077, 0x0c6d, 0x0c86, + // Entry 58B40 - 58B7F + 0x0c9b, 0x0002, 0x078d, 0x0790, 0x0001, 0x0077, 0x0caf, 0x0001, + 0x0077, 0x0cc6, 0x0003, 0x0000, 0x0797, 0x079c, 0x0003, 0x0077, + 0x0c6d, 0x0c86, 0x0c9b, 0x0002, 0x079f, 0x07a2, 0x0001, 0x0077, + 0x0caf, 0x0001, 0x0077, 0x0cc6, 0x0003, 0x0000, 0x07a9, 0x07ae, + 0x0003, 0x0077, 0x0c6d, 0x0c86, 0x0c9b, 0x0002, 0x07b1, 0x07b4, + 0x0001, 0x0077, 0x0caf, 0x0001, 0x0077, 0x0cc6, 0x0003, 0x0000, + 0x07bb, 0x07c0, 0x0003, 0x0077, 0x0cdc, 0x0cf6, 0x0d0c, 0x0002, + 0x07c3, 0x07c6, 0x0001, 0x0077, 0x0d21, 0x0001, 0x0077, 0x0d39, + // Entry 58B80 - 58BBF + 0x0003, 0x0000, 0x07cd, 0x07d2, 0x0003, 0x0077, 0x0cdc, 0x0cf6, + 0x0d0c, 0x0002, 0x07d5, 0x07d8, 0x0001, 0x0077, 0x0d21, 0x0001, + 0x0077, 0x0d39, 0x0003, 0x0000, 0x07df, 0x07e4, 0x0003, 0x0077, + 0x0cdc, 0x0cf6, 0x0d0c, 0x0002, 0x07e7, 0x07ea, 0x0001, 0x0077, + 0x0d21, 0x0001, 0x0077, 0x0d39, 0x0003, 0x0000, 0x07f1, 0x07f6, + 0x0003, 0x0077, 0x0d50, 0x0d6b, 0x0d82, 0x0002, 0x07f9, 0x07fc, + 0x0001, 0x0077, 0x0d98, 0x0001, 0x0077, 0x0db1, 0x0003, 0x0000, + 0x0803, 0x0808, 0x0003, 0x0077, 0x0d50, 0x0d6b, 0x0d82, 0x0002, + // Entry 58BC0 - 58BFF + 0x080b, 0x080e, 0x0001, 0x0077, 0x0d98, 0x0001, 0x0077, 0x0db1, + 0x0003, 0x0000, 0x0815, 0x081a, 0x0003, 0x0077, 0x0d50, 0x0d6b, + 0x0d82, 0x0002, 0x081d, 0x0820, 0x0001, 0x0077, 0x0d98, 0x0001, + 0x0077, 0x0db1, 0x0003, 0x0000, 0x0827, 0x082c, 0x0003, 0x0077, + 0x0dc9, 0x0de4, 0x0dfb, 0x0002, 0x082f, 0x0832, 0x0001, 0x0077, + 0x0e11, 0x0001, 0x0077, 0x0e2a, 0x0003, 0x0000, 0x0839, 0x083e, + 0x0003, 0x0077, 0x0dc9, 0x0de4, 0x0dfb, 0x0002, 0x0841, 0x0844, + 0x0001, 0x0077, 0x0e11, 0x0001, 0x0077, 0x0e2a, 0x0003, 0x0000, + // Entry 58C00 - 58C3F + 0x084b, 0x0850, 0x0003, 0x0077, 0x0dc9, 0x0de4, 0x0dfb, 0x0002, + 0x0853, 0x0856, 0x0001, 0x0077, 0x0e11, 0x0001, 0x0077, 0x0e2a, + 0x0003, 0x0000, 0x085d, 0x0862, 0x0003, 0x0077, 0x0e42, 0x0e5e, + 0x0e76, 0x0002, 0x0865, 0x0868, 0x0001, 0x0077, 0x0e8d, 0x0001, + 0x0077, 0x0ea7, 0x0003, 0x0000, 0x086f, 0x0874, 0x0003, 0x0077, + 0x0e42, 0x0e5e, 0x0e76, 0x0002, 0x0877, 0x087a, 0x0001, 0x0077, + 0x0e8d, 0x0001, 0x0077, 0x0ea7, 0x0003, 0x0000, 0x0881, 0x0886, + 0x0003, 0x0077, 0x0e42, 0x0e5e, 0x0e76, 0x0002, 0x0889, 0x088c, + // Entry 58C40 - 58C7F + 0x0001, 0x0077, 0x0e8d, 0x0001, 0x0077, 0x0ea7, 0x0001, 0x0891, + 0x0001, 0x0077, 0x0ec0, 0x0001, 0x0896, 0x0001, 0x0077, 0x0ec0, + 0x0001, 0x089b, 0x0001, 0x0077, 0x0ec0, 0x0003, 0x08a2, 0x08a5, + 0x08a9, 0x0001, 0x0077, 0x0ec6, 0x0002, 0x0077, 0xffff, 0x0ecc, + 0x0002, 0x08ac, 0x08af, 0x0001, 0x0077, 0x0ed7, 0x0001, 0x0077, + 0x0eeb, 0x0003, 0x08b6, 0x0000, 0x08b9, 0x0001, 0x0077, 0x0ec6, + 0x0002, 0x08bc, 0x08bf, 0x0001, 0x0077, 0x0ed7, 0x0001, 0x0077, + 0x0eeb, 0x0003, 0x08c6, 0x0000, 0x08c9, 0x0001, 0x0077, 0x0ec6, + // Entry 58C80 - 58CBF + 0x0002, 0x08cc, 0x08cf, 0x0001, 0x0077, 0x0ed7, 0x0001, 0x0077, + 0x0eeb, 0x0003, 0x08d6, 0x08d9, 0x08dd, 0x0001, 0x0077, 0x0efe, + 0x0002, 0x0077, 0xffff, 0x0f04, 0x0002, 0x08e0, 0x08e3, 0x0001, + 0x0077, 0x0f0f, 0x0001, 0x0077, 0x0f23, 0x0003, 0x08ea, 0x0000, + 0x08ed, 0x0001, 0x0077, 0x0efe, 0x0002, 0x08f0, 0x08f3, 0x0001, + 0x0077, 0x0f0f, 0x0001, 0x0077, 0x0f23, 0x0003, 0x08fa, 0x0000, + 0x08fd, 0x0001, 0x0077, 0x0efe, 0x0002, 0x0900, 0x0903, 0x0001, + 0x0077, 0x0f0f, 0x0001, 0x0077, 0x0f23, 0x0003, 0x090a, 0x090d, + // Entry 58CC0 - 58CFF + 0x0911, 0x0001, 0x0077, 0x0f36, 0x0002, 0x0077, 0xffff, 0x0f3c, + 0x0002, 0x0914, 0x0917, 0x0001, 0x0077, 0x0f47, 0x0001, 0x0077, + 0x0f5b, 0x0003, 0x091e, 0x0000, 0x0921, 0x0001, 0x0077, 0x0f36, + 0x0002, 0x0924, 0x0927, 0x0001, 0x0077, 0x0f47, 0x0001, 0x0077, + 0x0f5b, 0x0003, 0x092e, 0x0000, 0x0931, 0x0001, 0x0077, 0x0f36, + 0x0002, 0x0934, 0x0937, 0x0001, 0x0077, 0x0f47, 0x0001, 0x0077, + 0x0f5b, 0x0001, 0x093c, 0x0001, 0x0077, 0x0f6e, 0x0001, 0x0941, + 0x0001, 0x0077, 0x0f6e, 0x0001, 0x0946, 0x0001, 0x0077, 0x0f6e, + // Entry 58D00 - 58D3F + 0x0004, 0x094e, 0x0953, 0x0958, 0x0967, 0x0003, 0x0000, 0x1dc7, + 0x4333, 0x432f, 0x0003, 0x0077, 0x0f79, 0x0f83, 0x0f96, 0x0002, + 0x0000, 0x095b, 0x0003, 0x0000, 0x0962, 0x095f, 0x0001, 0x0077, + 0x0fa8, 0x0003, 0x0077, 0xffff, 0x0fc7, 0x0fda, 0x0002, 0x0000, + 0x096a, 0x0003, 0x096e, 0x0aae, 0x0a0e, 0x009e, 0x0077, 0xffff, + 0xffff, 0xffff, 0xffff, 0x106a, 0x10a8, 0x1118, 0x1150, 0x119a, + 0x11e7, 0x122e, 0x128d, 0x12c5, 0x1364, 0x13a5, 0x13e6, 0x144b, + 0x1486, 0x14e5, 0x154d, 0x15c4, 0x162f, 0x1694, 0x16d8, 0x1710, + // Entry 58D40 - 58D7F + 0xffff, 0xffff, 0x176f, 0xffff, 0x17c5, 0xffff, 0x1818, 0x1853, + 0x1888, 0x18d2, 0xffff, 0xffff, 0x1947, 0x1985, 0x19e7, 0xffff, + 0xffff, 0xffff, 0x1a51, 0xffff, 0x1abb, 0x1afc, 0xffff, 0x1b5e, + 0x1b9c, 0x1c04, 0xffff, 0xffff, 0xffff, 0xffff, 0x1c95, 0xffff, + 0xffff, 0x1d05, 0x1d70, 0xffff, 0xffff, 0x1e10, 0x1e5a, 0x1ea4, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1f74, 0x1fa6, + 0x1fe1, 0x2019, 0x2063, 0xffff, 0xffff, 0x210d, 0xffff, 0x2161, + 0xffff, 0xffff, 0x21dd, 0xffff, 0x226d, 0xffff, 0xffff, 0xffff, + // Entry 58D80 - 58DBF + 0xffff, 0x22f3, 0xffff, 0x2341, 0x239a, 0x240e, 0x2452, 0xffff, + 0xffff, 0xffff, 0x24b9, 0x2506, 0x254d, 0xffff, 0xffff, 0x25b7, + 0x2638, 0x267f, 0x26b1, 0xffff, 0xffff, 0x2712, 0x2750, 0x2782, + 0xffff, 0x27df, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x28db, + 0x2919, 0x2951, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x29fe, 0xffff, 0xffff, 0x2a64, 0xffff, 0x2aa5, 0xffff, + 0x2afc, 0x2b37, 0x2b7b, 0xffff, 0x2bc6, 0x2c0d, 0xffff, 0xffff, + 0xffff, 0x2c85, 0x2cc0, 0xffff, 0xffff, 0x0fef, 0x10e0, 0x12f7, + // Entry 58DC0 - 58DFF + 0x132c, 0xffff, 0xffff, 0x221e, 0x287e, 0x009e, 0x0077, 0x1021, + 0x1033, 0x1043, 0x1054, 0x1079, 0x10b5, 0x1125, 0x1163, 0x11ae, + 0x11f9, 0x1248, 0x129a, 0x12d0, 0x1374, 0x13b5, 0x1402, 0x1459, + 0x14a0, 0x1502, 0x156f, 0x15e2, 0x164b, 0x16a5, 0x16e5, 0x1721, + 0x1754, 0x1761, 0x177e, 0x17ad, 0x17d6, 0x1809, 0x1826, 0x185f, + 0x189b, 0x18e3, 0x1916, 0x192d, 0x1956, 0x199e, 0x19f2, 0x1a19, + 0x1a25, 0x1a3e, 0x1a6a, 0x1aad, 0x1acb, 0x1b0d, 0x1b40, 0x1b6d, + 0x1bb9, 0x1c0f, 0x1c36, 0x1c51, 0x1c77, 0x1c87, 0x1ca2, 0x1ccd, + // Entry 58E00 - 58E3F + 0x1ce9, 0x1d23, 0x1d8c, 0x1de8, 0x1e03, 0x1e23, 0x1e6d, 0x1eaf, + 0x1ed6, 0x1eef, 0x1f08, 0x1f1d, 0x1f3a, 0x1f58, 0x1f7f, 0x1fb4, + 0x1fee, 0x202c, 0x2082, 0x20d1, 0x20f0, 0x211f, 0x2154, 0x2173, + 0x21a8, 0x21c4, 0x21ed, 0x2256, 0x227b, 0x22a8, 0x22b7, 0x22c6, + 0x22d6, 0x2303, 0x2334, 0x2359, 0x23bb, 0x241f, 0x2462, 0x2493, + 0x24a1, 0x24ad, 0x24cd, 0x2518, 0x2560, 0x2597, 0x25a2, 0x25d1, + 0x264a, 0x268a, 0x26c0, 0x26ef, 0x26fb, 0x2721, 0x275b, 0x2792, + 0x27c3, 0x27fd, 0x284c, 0x285b, 0x2868, 0x28bf, 0x28cd, 0x28ea, + // Entry 58E40 - 58E7F + 0x2926, 0x295d, 0x2987, 0x2998, 0x29a8, 0x29c4, 0x29d6, 0x29e5, + 0x29f1, 0x2a10, 0x2a45, 0x2a56, 0x2a70, 0x2a99, 0x2ab8, 0x2aef, + 0x2b0a, 0x2b48, 0x2b89, 0x2bb6, 0x2bd8, 0x2c1d, 0x2c4e, 0x2c5b, + 0x2c6d, 0x2c93, 0x2cd4, 0x1dd5, 0x2616, 0x0ffa, 0x10ed, 0x1303, + 0x1339, 0xffff, 0x21b8, 0x222b, 0x288e, 0x009e, 0x0077, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1090, 0x10ca, 0x113a, 0x117e, 0x11ca, + 0x1213, 0x126a, 0x12af, 0x12e3, 0x138c, 0x13cd, 0x1426, 0x146f, + 0x14c2, 0x1527, 0x1599, 0x1608, 0x166f, 0x16be, 0x16fa, 0x173a, + // Entry 58E80 - 58EBF + 0xffff, 0xffff, 0x1795, 0xffff, 0x17ef, 0xffff, 0x183c, 0x1873, + 0x18b6, 0x18fc, 0xffff, 0xffff, 0x196d, 0x19bf, 0x1a05, 0xffff, + 0xffff, 0xffff, 0x1a8b, 0xffff, 0x1ae3, 0x1b26, 0xffff, 0x1b84, + 0x1bde, 0x1c22, 0xffff, 0xffff, 0xffff, 0xffff, 0x1cb7, 0xffff, + 0xffff, 0x1d49, 0x1db0, 0xffff, 0xffff, 0x1e3e, 0x1e88, 0x1ec2, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1f92, 0x1fca, + 0x2003, 0x2047, 0x20a9, 0xffff, 0xffff, 0x2139, 0xffff, 0x218d, + 0xffff, 0xffff, 0x2205, 0xffff, 0x2291, 0xffff, 0xffff, 0xffff, + // Entry 58EC0 - 58EFF + 0xffff, 0x231b, 0xffff, 0x2379, 0x23e4, 0x2438, 0x247a, 0xffff, + 0xffff, 0xffff, 0x24e9, 0x2532, 0x257b, 0xffff, 0xffff, 0x25f3, + 0x2664, 0x269d, 0x26d7, 0xffff, 0xffff, 0x2738, 0x276e, 0x27aa, + 0xffff, 0x2823, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2901, + 0x293b, 0x2971, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2a2a, 0xffff, 0xffff, 0x2a84, 0xffff, 0x2ad3, 0xffff, + 0x2b20, 0x2b61, 0x2b9f, 0xffff, 0x2bf2, 0x2c35, 0xffff, 0xffff, + 0xffff, 0x2ca9, 0x2cf0, 0xffff, 0xffff, 0x100d, 0x1102, 0x1317, + // Entry 58F00 - 58F3F + 0x134e, 0xffff, 0xffff, 0x2240, 0x28a6, 0x0002, 0x0003, 0x0116, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, + 0x0024, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0013, + 0x0004, 0x0021, 0x001b, 0x0018, 0x001e, 0x0001, 0x0078, 0x0000, + 0x0001, 0x0000, 0x049a, 0x0001, 0x0078, 0x0017, 0x0001, 0x0000, + 0x04af, 0x0007, 0x002c, 0x0091, 0x00c9, 0x0000, 0x00e4, 0x00f4, + 0x0105, 0x0002, 0x002f, 0x0060, 0x0003, 0x0033, 0x0042, 0x0051, + 0x000d, 0x0007, 0xffff, 0x00a7, 0x25a0, 0x25a4, 0x25a9, 0x252e, + // Entry 58F40 - 58F7F + 0x25ad, 0x25b1, 0x25b5, 0x25b9, 0x25bd, 0x25c1, 0x253e, 0x000d, + 0x0018, 0xffff, 0x2a23, 0x2a5a, 0x2a5c, 0x2a75, 0x2a5c, 0x2a23, + 0x2a23, 0x2a3b, 0x2a71, 0x2a73, 0x2a64, 0x2a66, 0x000d, 0x0078, + 0xffff, 0x0022, 0x0028, 0x002e, 0x0035, 0x003c, 0x0042, 0x0048, + 0x004e, 0x0055, 0x005b, 0x0061, 0x0067, 0x0003, 0x0064, 0x0073, + 0x0082, 0x000d, 0x0007, 0xffff, 0x00a7, 0x25a0, 0x25a4, 0x25a9, + 0x252e, 0x25ad, 0x25b1, 0x25b5, 0x25b9, 0x25c5, 0x25c1, 0x253e, + 0x000d, 0x0018, 0xffff, 0x2a23, 0x2a5a, 0x2a5c, 0x2a75, 0x2a5c, + // Entry 58F80 - 58FBF + 0x2a23, 0x2a23, 0x2a3b, 0x2a71, 0x2a73, 0x2a64, 0x2a66, 0x000d, + 0x0078, 0xffff, 0x0022, 0x0028, 0x002e, 0x0035, 0x003c, 0x0042, + 0x0048, 0x004e, 0x0055, 0x005b, 0x0061, 0x0067, 0x0002, 0x0094, + 0x00aa, 0x0003, 0x0098, 0x0000, 0x00a1, 0x0007, 0x0052, 0x0515, + 0x1fff, 0x2003, 0x2007, 0x200b, 0x08cc, 0x2010, 0x0007, 0x0078, + 0x006d, 0x0073, 0x0079, 0x007f, 0x0085, 0x008c, 0x0093, 0x0003, + 0x00ae, 0x00b7, 0x00c0, 0x0007, 0x0017, 0x2d55, 0x2f2c, 0x2d6b, + 0x2dd0, 0x2f2f, 0x2f33, 0x2f36, 0x0007, 0x0018, 0x2a71, 0x2a5c, + // Entry 58FC0 - 58FFF + 0x2a73, 0x2a77, 0x2a66, 0x2a5a, 0x2a3d, 0x0007, 0x0078, 0x006d, + 0x0073, 0x0079, 0x007f, 0x0085, 0x008c, 0x0093, 0x0001, 0x00cb, + 0x0003, 0x00cf, 0x00d6, 0x00dd, 0x0005, 0x0078, 0xffff, 0x009a, + 0x009e, 0x00a2, 0x00a6, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x0005, 0x0078, 0xffff, 0x00aa, 0x00b9, 0x00c8, + 0x00d7, 0x0003, 0x00ee, 0x0000, 0x00e8, 0x0001, 0x00ea, 0x0002, + 0x0078, 0x00e6, 0x00f0, 0x0001, 0x00f0, 0x0002, 0x0078, 0x00e6, + 0x00f0, 0x0004, 0x0102, 0x00fc, 0x00f9, 0x00ff, 0x0001, 0x0078, + // Entry 59000 - 5903F + 0x00fa, 0x0001, 0x0000, 0x050b, 0x0001, 0x0078, 0x010f, 0x0001, + 0x0000, 0x051c, 0x0004, 0x0113, 0x010d, 0x010a, 0x0110, 0x0001, + 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, + 0x0001, 0x0000, 0x0546, 0x0040, 0x0157, 0x0000, 0x0000, 0x015c, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0167, 0x0000, 0x0000, + 0x0172, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x017d, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x018a, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 59040 - 5907F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x018f, 0x0000, 0x0194, 0x0000, 0x0000, 0x0199, 0x0000, 0x0000, + 0x019e, 0x0000, 0x0000, 0x01a3, 0x0001, 0x0159, 0x0001, 0x0017, + 0x062b, 0x0002, 0x015f, 0x0162, 0x0001, 0x0078, 0x0118, 0x0003, + 0x0078, 0x011c, 0x0123, 0x0129, 0x0002, 0x016a, 0x016d, 0x0001, + 0x0078, 0x012f, 0x0003, 0x0078, 0x0133, 0x013a, 0x0140, 0x0002, + 0x0175, 0x0178, 0x0001, 0x0078, 0x0146, 0x0003, 0x0078, 0x014a, + // Entry 59080 - 590BF + 0x0151, 0x0157, 0x0002, 0x0180, 0x0183, 0x0001, 0x0017, 0x0885, + 0x0005, 0x0078, 0x0163, 0x016a, 0x0170, 0x015d, 0x0176, 0x0001, + 0x018c, 0x0001, 0x0078, 0x017c, 0x0001, 0x0191, 0x0001, 0x0078, + 0x0184, 0x0001, 0x0196, 0x0001, 0x0078, 0x018c, 0x0001, 0x019b, + 0x0001, 0x0010, 0x0bf7, 0x0001, 0x01a0, 0x0001, 0x0078, 0x0191, + 0x0001, 0x01a5, 0x0001, 0x004d, 0x05de, 0x0002, 0x0003, 0x00e9, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, + 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, + // Entry 590C0 - 590FF + 0x0000, 0x0000, 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, + 0x0006, 0x000d, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, + 0x0001, 0x0002, 0x0587, 0x0008, 0x002f, 0x0066, 0x008b, 0x009f, + 0x00b7, 0x00c7, 0x00d8, 0x0000, 0x0002, 0x0032, 0x0054, 0x0003, + 0x0036, 0x0000, 0x0045, 0x000d, 0x0006, 0xffff, 0x001e, 0x44b4, + 0x432f, 0x457d, 0x43e5, 0x44b8, 0x44bc, 0x44c0, 0x4581, 0x4585, + 0x44c4, 0x422c, 0x000d, 0x0006, 0xffff, 0x004e, 0x0056, 0x44c8, + 0x4349, 0x43e5, 0x4351, 0x4357, 0x435e, 0x44ce, 0x440a, 0x44d7, + // Entry 59100 - 5913F + 0x4419, 0x0002, 0x0000, 0x0057, 0x000d, 0x0018, 0xffff, 0x2a31, + 0x2a5a, 0x2a5c, 0x2a5e, 0x2a5c, 0x2a31, 0x2a31, 0x2a5e, 0x2a71, + 0x2a62, 0x2a64, 0x2a66, 0x0002, 0x0069, 0x007f, 0x0003, 0x006d, + 0x0000, 0x0076, 0x0007, 0x0006, 0x009e, 0x4589, 0x458d, 0x4591, + 0x4595, 0x4599, 0x459d, 0x0007, 0x0037, 0x0313, 0x031d, 0x68ec, + 0x032f, 0x68f4, 0x68fd, 0x6904, 0x0002, 0x0000, 0x0082, 0x0007, + 0x0018, 0x2a31, 0x2a31, 0x2a31, 0x2a31, 0x2a5e, 0x2a68, 0x2a31, + 0x0001, 0x008d, 0x0003, 0x0091, 0x0000, 0x0098, 0x0005, 0x0006, + // Entry 59140 - 5917F + 0xffff, 0x00f6, 0x00f9, 0x00fc, 0x00ff, 0x0005, 0x0006, 0xffff, + 0x0102, 0x0109, 0x0110, 0x0117, 0x0001, 0x00a1, 0x0003, 0x00a5, + 0x0000, 0x00ae, 0x0002, 0x00a8, 0x00ab, 0x0001, 0x0037, 0x0351, + 0x0001, 0x0037, 0x0357, 0x0002, 0x00b1, 0x00b4, 0x0001, 0x0037, + 0x0351, 0x0001, 0x0037, 0x0357, 0x0003, 0x00c1, 0x0000, 0x00bb, + 0x0001, 0x00bd, 0x0002, 0x0037, 0x0361, 0x0371, 0x0001, 0x00c3, + 0x0002, 0x0017, 0x01f4, 0x01f7, 0x0004, 0x00d5, 0x00cf, 0x00cc, + 0x00d2, 0x0001, 0x0006, 0x015b, 0x0001, 0x0002, 0x0033, 0x0001, + // Entry 59180 - 591BF + 0x0002, 0x003c, 0x0001, 0x0002, 0x08e8, 0x0004, 0x00e6, 0x00e0, + 0x00dd, 0x00e3, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, + 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0040, 0x012a, + 0x0000, 0x0000, 0x012f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0134, 0x0000, 0x0000, 0x0139, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x013e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 591C0 - 591FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0149, 0x0000, 0x014e, 0x0000, 0x0000, + 0x0153, 0x0000, 0x0000, 0x0158, 0x0000, 0x0000, 0x015d, 0x0001, + 0x012c, 0x0001, 0x0037, 0x0381, 0x0001, 0x0131, 0x0001, 0x0037, + 0x0387, 0x0001, 0x0136, 0x0001, 0x0017, 0x0200, 0x0001, 0x013b, + 0x0001, 0x0037, 0x038c, 0x0002, 0x0141, 0x0144, 0x0001, 0x0037, + 0x0393, 0x0003, 0x0037, 0x0399, 0x039e, 0x03a2, 0x0001, 0x014b, + 0x0001, 0x0037, 0x03a8, 0x0001, 0x0150, 0x0001, 0x005d, 0x1c05, + // Entry 59200 - 5923F + 0x0001, 0x0155, 0x0001, 0x0037, 0x03b5, 0x0001, 0x015a, 0x0001, + 0x0009, 0x030c, 0x0001, 0x015f, 0x0001, 0x0037, 0x03bd, 0x0003, + 0x0004, 0x0117, 0x01f1, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000d, 0x0024, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0016, 0x0000, 0x0000, 0x0004, 0x0000, 0x001e, + 0x001b, 0x0021, 0x0001, 0x0014, 0x0904, 0x0001, 0x0014, 0x035a, + 0x0001, 0x0016, 0x0098, 0x0008, 0x002d, 0x0092, 0x00d3, 0x0000, + 0x0101, 0x0109, 0x0000, 0x0000, 0x0002, 0x0030, 0x0061, 0x0003, + // Entry 59240 - 5927F + 0x0034, 0x0043, 0x0052, 0x000d, 0x0034, 0xffff, 0x0000, 0x2eb7, + 0x2ebb, 0x2ec0, 0x2ec4, 0x2ec8, 0x2ecd, 0x2ed1, 0x2ed6, 0x2eda, + 0x2edf, 0x2ee3, 0x000d, 0x0018, 0xffff, 0x2a31, 0x2a79, 0x2a5c, + 0x2a5e, 0x2a5c, 0x2a17, 0x2a79, 0x2a7b, 0x2a79, 0x2a37, 0x2a37, + 0x2a6d, 0x000d, 0x0078, 0xffff, 0x0197, 0x019e, 0x01a5, 0x01ac, + 0x01b4, 0x01ba, 0x01c3, 0x01ca, 0x01d3, 0x01e1, 0x01eb, 0x01f8, + 0x0003, 0x0065, 0x0074, 0x0083, 0x000d, 0x0034, 0xffff, 0x0000, + 0x2eb7, 0x2ebb, 0x2ec0, 0x2ec4, 0x2ec8, 0x2ecd, 0x2ed1, 0x2ed6, + // Entry 59280 - 592BF + 0x2eda, 0x2edf, 0x2ee3, 0x000d, 0x0018, 0xffff, 0x2a31, 0x2a79, + 0x2a5c, 0x2a5e, 0x2a5c, 0x2a17, 0x2a79, 0x2a7b, 0x2a79, 0x2a37, + 0x2a37, 0x2a6d, 0x000d, 0x0078, 0xffff, 0x0197, 0x019e, 0x01a5, + 0x01ac, 0x01b4, 0x01ba, 0x01c3, 0x01ca, 0x01d3, 0x01e1, 0x01eb, + 0x01f8, 0x0002, 0x0095, 0x00b4, 0x0003, 0x0099, 0x00a2, 0x00ab, + 0x0007, 0x006f, 0x0023, 0x3037, 0x303c, 0x3041, 0x3045, 0x304a, + 0x304e, 0x0007, 0x0018, 0x2a71, 0x2a5c, 0x2a3d, 0x2a5c, 0x2a5a, + 0x2a5a, 0x2a71, 0x0007, 0x0078, 0x0206, 0x020e, 0x0216, 0x021e, + // Entry 592C0 - 592FF + 0x0227, 0x0230, 0x0237, 0x0003, 0x00b8, 0x00c1, 0x00ca, 0x0007, + 0x006f, 0x0023, 0x3037, 0x303c, 0x3041, 0x3045, 0x304a, 0x304e, + 0x0007, 0x0018, 0x2a71, 0x2a5c, 0x2a3d, 0x2a5c, 0x2a5a, 0x2a5a, + 0x2a71, 0x0007, 0x0078, 0x0206, 0x020e, 0x0216, 0x021e, 0x0227, + 0x0230, 0x0237, 0x0002, 0x00d6, 0x00ef, 0x0003, 0x00da, 0x00e1, + 0x00e8, 0x0005, 0x0000, 0xffff, 0x04e3, 0x39f2, 0x39f5, 0x44d4, + 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, + 0x005a, 0xffff, 0x0110, 0x011b, 0x0126, 0x0131, 0x0003, 0x00f3, + // Entry 59300 - 5933F + 0x0000, 0x00fa, 0x0005, 0x0000, 0xffff, 0x04e3, 0x39f2, 0x39f5, + 0x44d4, 0x0005, 0x005a, 0xffff, 0x0110, 0x011b, 0x0126, 0x0131, + 0x0001, 0x0103, 0x0001, 0x0105, 0x0002, 0x0017, 0x04db, 0x2f3a, + 0x0004, 0x0000, 0x0111, 0x010e, 0x0114, 0x0001, 0x0017, 0x0528, + 0x0001, 0x0014, 0x0792, 0x0001, 0x0016, 0x029f, 0x0040, 0x0158, + 0x0000, 0x0000, 0x015d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x016f, 0x0000, 0x0000, 0x0181, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0193, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01ac, + // Entry 59340 - 5937F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x01b1, 0x0000, 0x01b6, 0x0000, 0x0000, + 0x01c8, 0x0000, 0x0000, 0x01da, 0x0000, 0x0000, 0x01ec, 0x0001, + 0x015a, 0x0001, 0x0078, 0x0240, 0x0003, 0x0161, 0x0000, 0x0164, + 0x0001, 0x0078, 0x0247, 0x0002, 0x0167, 0x016b, 0x0002, 0x0078, + 0x024c, 0x024c, 0x0002, 0x0078, 0x0264, 0x0257, 0x0003, 0x0173, + // Entry 59380 - 593BF + 0x0000, 0x0176, 0x0001, 0x0078, 0x0271, 0x0002, 0x0179, 0x017d, + 0x0002, 0x0078, 0x0278, 0x0278, 0x0002, 0x0078, 0x0285, 0x0285, + 0x0003, 0x0185, 0x0000, 0x0188, 0x0001, 0x0078, 0x0294, 0x0002, + 0x018b, 0x018f, 0x0002, 0x0078, 0x02a6, 0x029a, 0x0002, 0x0078, + 0x02c1, 0x02b3, 0x0003, 0x0197, 0x019a, 0x01a1, 0x0001, 0x0017, + 0x0885, 0x0005, 0x0078, 0x02db, 0x02e3, 0x02e9, 0x02d0, 0x02ef, + 0x0002, 0x01a4, 0x01a8, 0x0002, 0x0078, 0x0303, 0x02f9, 0x0002, + 0x0078, 0x031a, 0x030e, 0x0001, 0x01ae, 0x0001, 0x0078, 0x0327, + // Entry 593C0 - 593FF + 0x0001, 0x01b3, 0x0001, 0x0007, 0x0892, 0x0003, 0x01ba, 0x0000, + 0x01bd, 0x0001, 0x002a, 0x038d, 0x0002, 0x01c0, 0x01c4, 0x0002, + 0x0078, 0x033c, 0x0330, 0x0002, 0x0078, 0x0357, 0x0349, 0x0003, + 0x01cc, 0x0000, 0x01cf, 0x0001, 0x0078, 0x0366, 0x0002, 0x01d2, + 0x01d6, 0x0002, 0x0078, 0x037e, 0x0370, 0x0002, 0x0078, 0x039c, + 0x038c, 0x0003, 0x01de, 0x0000, 0x01e1, 0x0001, 0x0078, 0x03ac, + 0x0002, 0x01e4, 0x01e8, 0x0002, 0x0078, 0x03c1, 0x03b4, 0x0002, + 0x0078, 0x03de, 0x03cf, 0x0001, 0x01ee, 0x0001, 0x0078, 0x03ee, + // Entry 59400 - 5943F + 0x0004, 0x0000, 0x01f6, 0x0000, 0x01f9, 0x0001, 0x0078, 0x03f7, + 0x0002, 0x0299, 0x01fc, 0x0003, 0x0200, 0x0266, 0x0233, 0x0031, + 0x0078, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x03ff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x043a, 0x048a, + // Entry 59440 - 5947F + 0xffff, 0x04d4, 0x0031, 0x0078, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x040e, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0450, 0x049e, 0xffff, 0x04e9, 0x0031, 0x0078, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 59480 - 594BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0425, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x046e, 0x04ba, 0xffff, 0x0506, + 0x0003, 0x029d, 0x0303, 0x02d0, 0x0031, 0x0017, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 594C0 - 594FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1d16, 0x1d6a, 0xffff, 0x1dd4, 0x0031, + 0x0017, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 59500 - 5953F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1d16, 0x1d6a, + 0xffff, 0x1dd4, 0x0031, 0x0017, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 59540 - 5957F + 0xffff, 0x1d1a, 0x1d6e, 0xffff, 0x1dd8, 0x0003, 0x0004, 0x01bb, + 0x028e, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000d, 0x0038, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0016, 0x0000, 0x0027, 0x0004, 0x0024, 0x001e, 0x001b, 0x0021, + 0x0001, 0x0078, 0x0521, 0x0001, 0x000a, 0x0440, 0x0001, 0x0002, + 0x0044, 0x0001, 0x001f, 0x052f, 0x0004, 0x0035, 0x002f, 0x002c, + 0x0032, 0x0001, 0x0078, 0x0532, 0x0001, 0x0078, 0x0532, 0x0001, + 0x001b, 0x0007, 0x0001, 0x001b, 0x0007, 0x0008, 0x0041, 0x00a6, + // Entry 59580 - 595BF + 0x00fd, 0x0132, 0x0173, 0x0188, 0x0199, 0x01aa, 0x0002, 0x0044, + 0x0075, 0x0003, 0x0048, 0x0057, 0x0066, 0x000d, 0x006f, 0xffff, + 0x304e, 0x3052, 0x3056, 0x305a, 0x305e, 0x3062, 0x3066, 0x306a, + 0x306d, 0x3072, 0x3076, 0x307a, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, + 0x4414, 0x4417, 0x441a, 0x000d, 0x0078, 0xffff, 0x053f, 0x0548, + 0x0551, 0x0556, 0x055c, 0x0560, 0x0565, 0x056b, 0x056e, 0x0579, + 0x0582, 0x058c, 0x0003, 0x0079, 0x0088, 0x0097, 0x000d, 0x006f, + // Entry 595C0 - 595FF + 0xffff, 0x304e, 0x3052, 0x3056, 0x305a, 0x307e, 0x3062, 0x3066, + 0x3082, 0x306d, 0x3072, 0x3076, 0x307a, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, + 0x2424, 0x4414, 0x4417, 0x441a, 0x000d, 0x0078, 0xffff, 0x053f, + 0x0548, 0x0551, 0x0556, 0x0596, 0x0560, 0x0565, 0x059a, 0x056e, + 0x0579, 0x0582, 0x058c, 0x0002, 0x00a9, 0x00d3, 0x0005, 0x00af, + 0x00b8, 0x00ca, 0x0000, 0x00c1, 0x0007, 0x0078, 0x059d, 0x05a1, + 0x05a5, 0x05a9, 0x05ae, 0x05b2, 0x05b7, 0x0007, 0x0078, 0x059d, + // Entry 59600 - 5963F + 0x05a1, 0x05a5, 0x05a9, 0x05ae, 0x05b2, 0x05b7, 0x0007, 0x0078, + 0x059d, 0x05a1, 0x05a5, 0x05a9, 0x05ae, 0x05b2, 0x05b7, 0x0007, + 0x0078, 0x05bb, 0x05c3, 0x05ca, 0x05d2, 0x05da, 0x05e2, 0x05ea, + 0x0005, 0x00d9, 0x00e2, 0x00f4, 0x0000, 0x00eb, 0x0007, 0x0078, + 0x059d, 0x05a1, 0x05a5, 0x05a9, 0x05ae, 0x05b2, 0x05b7, 0x0007, + 0x0078, 0x059d, 0x05a1, 0x05a5, 0x05a9, 0x05ae, 0x05b2, 0x05b7, + 0x0007, 0x0078, 0x059d, 0x05a1, 0x05a5, 0x05a9, 0x05ae, 0x05b2, + 0x05b7, 0x0007, 0x0078, 0x05bb, 0x05c3, 0x05ca, 0x05d2, 0x05da, + // Entry 59640 - 5967F + 0x05e2, 0x05ea, 0x0002, 0x0100, 0x0119, 0x0003, 0x0104, 0x010b, + 0x0112, 0x0005, 0x0078, 0xffff, 0x05f0, 0x05f8, 0x05ff, 0x0606, + 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, + 0x0078, 0xffff, 0x060d, 0x061b, 0x0628, 0x0635, 0x0003, 0x011d, + 0x0124, 0x012b, 0x0005, 0x0078, 0xffff, 0x05f0, 0x05f8, 0x05ff, + 0x0606, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x0005, 0x0078, 0xffff, 0x060d, 0x061b, 0x0628, 0x0635, 0x0002, + 0x0135, 0x0154, 0x0003, 0x0139, 0x0142, 0x014b, 0x0002, 0x013c, + // Entry 59680 - 596BF + 0x013f, 0x0001, 0x0078, 0x0642, 0x0001, 0x0078, 0x0646, 0x0002, + 0x0145, 0x0148, 0x0001, 0x0078, 0x0642, 0x0001, 0x0078, 0x0646, + 0x0002, 0x014e, 0x0151, 0x0001, 0x0078, 0x0642, 0x0001, 0x0078, + 0x0646, 0x0003, 0x0158, 0x0161, 0x016a, 0x0002, 0x015b, 0x015e, + 0x0001, 0x0078, 0x0642, 0x0001, 0x0078, 0x0646, 0x0002, 0x0164, + 0x0167, 0x0001, 0x0078, 0x0642, 0x0001, 0x0078, 0x0646, 0x0002, + 0x016d, 0x0170, 0x0001, 0x0078, 0x0642, 0x0001, 0x0078, 0x0646, + 0x0003, 0x017d, 0x0000, 0x0177, 0x0001, 0x0179, 0x0002, 0x0078, + // Entry 596C0 - 596FF + 0x064a, 0x0651, 0x0002, 0x0180, 0x0184, 0x0002, 0x0078, 0x0654, + 0x0651, 0x0002, 0x0000, 0x04f5, 0x3c5a, 0x0004, 0x0196, 0x0190, + 0x018d, 0x0193, 0x0001, 0x0078, 0x0657, 0x0001, 0x0005, 0x0625, + 0x0001, 0x0002, 0x0282, 0x0001, 0x0005, 0x062f, 0x0004, 0x01a7, + 0x01a1, 0x019e, 0x01a4, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, + 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, + 0x01b8, 0x01b2, 0x01af, 0x01b5, 0x0001, 0x0078, 0x0532, 0x0001, + 0x0078, 0x0532, 0x0001, 0x001b, 0x0007, 0x0001, 0x001b, 0x0007, + // Entry 59700 - 5973F + 0x0040, 0x01fc, 0x0000, 0x0000, 0x0201, 0x0206, 0x020b, 0x0210, + 0x0215, 0x021a, 0x021f, 0x0224, 0x0229, 0x022e, 0x0233, 0x0238, + 0x0000, 0x0000, 0x0000, 0x023d, 0x0248, 0x024d, 0x0000, 0x0000, + 0x0000, 0x0252, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0257, 0x0000, 0x025c, + 0x0261, 0x0266, 0x026b, 0x0270, 0x0275, 0x027a, 0x027f, 0x0284, + // Entry 59740 - 5977F + 0x0289, 0x0001, 0x01fe, 0x0001, 0x0078, 0x0666, 0x0001, 0x0203, + 0x0001, 0x0078, 0x066d, 0x0001, 0x0208, 0x0001, 0x0078, 0x0670, + 0x0001, 0x020d, 0x0001, 0x0078, 0x0670, 0x0001, 0x0212, 0x0001, + 0x0078, 0x0674, 0x0001, 0x0217, 0x0001, 0x0078, 0x0681, 0x0001, + 0x021c, 0x0001, 0x0078, 0x0681, 0x0001, 0x0221, 0x0001, 0x0078, + 0x0686, 0x0001, 0x0226, 0x0001, 0x0078, 0x068b, 0x0001, 0x022b, + 0x0001, 0x0078, 0x068b, 0x0001, 0x0230, 0x0001, 0x0078, 0x068f, + 0x0001, 0x0235, 0x0001, 0x0078, 0x0697, 0x0001, 0x023a, 0x0001, + // Entry 59780 - 597BF + 0x0078, 0x0697, 0x0002, 0x0240, 0x0243, 0x0001, 0x0078, 0x069e, + 0x0003, 0x0078, 0x06a2, 0x06a8, 0x06ac, 0x0001, 0x024a, 0x0001, + 0x0078, 0x069e, 0x0001, 0x024f, 0x0001, 0x0078, 0x069e, 0x0001, + 0x0254, 0x0001, 0x0078, 0x06b1, 0x0001, 0x0259, 0x0001, 0x0078, + 0x06be, 0x0001, 0x025e, 0x0001, 0x0078, 0x06c6, 0x0001, 0x0263, + 0x0001, 0x0078, 0x06cc, 0x0001, 0x0268, 0x0001, 0x0078, 0x06cc, + 0x0001, 0x026d, 0x0001, 0x0078, 0x06d1, 0x0001, 0x0272, 0x0001, + 0x0039, 0x06f2, 0x0001, 0x0277, 0x0001, 0x0039, 0x06f2, 0x0001, + // Entry 597C0 - 597FF + 0x027c, 0x0001, 0x0046, 0x0400, 0x0001, 0x0281, 0x0001, 0x0078, + 0x06d8, 0x0001, 0x0286, 0x0001, 0x0078, 0x06d8, 0x0001, 0x028b, + 0x0001, 0x0078, 0x06dd, 0x0004, 0x0293, 0x0298, 0x029d, 0x02a7, + 0x0003, 0x0000, 0x1dc7, 0x4333, 0x432f, 0x0003, 0x0000, 0x1de0, + 0x448a, 0x4493, 0x0002, 0x0000, 0x02a0, 0x0003, 0x0000, 0x0000, + 0x02a4, 0x0001, 0x0078, 0x06e8, 0x0002, 0x0000, 0x02aa, 0x0003, + 0x02ae, 0x031d, 0x02e1, 0x0031, 0x0078, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0709, 0x0761, 0x07aa, 0x07f5, + // Entry 59800 - 5983F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0846, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0899, 0x0908, 0xffff, 0x096e, 0x003a, 0x0078, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x071e, + 0x0770, 0x07bb, 0x0808, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x085b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 59840 - 5987F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x08b7, 0x0923, 0xffff, + 0x098d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x09e2, 0x0031, 0x0078, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0741, 0x078e, 0x07d9, 0x0828, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0879, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 59880 - 598BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x08e2, 0x094b, 0xffff, 0x09ba, 0x0002, 0x0003, 0x00e9, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, + 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, + 0x0000, 0x0000, 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, + 0x0006, 0x000d, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, + 0x0001, 0x0002, 0x0587, 0x0008, 0x002f, 0x0066, 0x008b, 0x009f, + // Entry 598C0 - 598FF + 0x00b7, 0x00c7, 0x00d8, 0x0000, 0x0002, 0x0032, 0x0054, 0x0003, + 0x0036, 0x0000, 0x0045, 0x000d, 0x0006, 0xffff, 0x001e, 0x44b4, + 0x45a1, 0x43d1, 0x43d5, 0x43d9, 0x44bc, 0x428d, 0x43dd, 0x43e1, + 0x44c4, 0x45a5, 0x000d, 0x0043, 0xffff, 0x0000, 0x000a, 0x0014, + 0x001b, 0x0021, 0x0027, 0x002d, 0x0035, 0x003d, 0x0048, 0x397c, + 0x3984, 0x0002, 0x0000, 0x0057, 0x000d, 0x0018, 0xffff, 0x2a31, + 0x2a5a, 0x2a5c, 0x2a5e, 0x2a5c, 0x2a31, 0x2a31, 0x2a5e, 0x2a71, + 0x2a62, 0x2a64, 0x2a66, 0x0002, 0x0069, 0x007f, 0x0003, 0x006d, + // Entry 59900 - 5993F + 0x0000, 0x0076, 0x0007, 0x0078, 0x09f8, 0x09fd, 0x0a02, 0x0a07, + 0x0a0c, 0x0a11, 0x0a16, 0x0007, 0x0078, 0x0a1b, 0x0a23, 0x0a2a, + 0x0a34, 0x0a3e, 0x0a46, 0x0a51, 0x0002, 0x0000, 0x0082, 0x0007, + 0x0018, 0x2a71, 0x2a17, 0x2a17, 0x2a71, 0x2a6f, 0x2a6f, 0x2a5c, + 0x0001, 0x008d, 0x0003, 0x0091, 0x0000, 0x0098, 0x0005, 0x0000, + 0xffff, 0x04e3, 0x39f2, 0x39f5, 0x44d4, 0x0005, 0x0078, 0xffff, + 0x0a5c, 0x0a76, 0x0a93, 0x0ab0, 0x0001, 0x00a1, 0x0003, 0x00a5, + 0x0000, 0x00ae, 0x0002, 0x00a8, 0x00ab, 0x0001, 0x0078, 0x0acb, + // Entry 59940 - 5997F + 0x0001, 0x0078, 0x0ad2, 0x0002, 0x00b1, 0x00b4, 0x0001, 0x0078, + 0x0acb, 0x0001, 0x0078, 0x0ad2, 0x0003, 0x00c1, 0x0000, 0x00bb, + 0x0001, 0x00bd, 0x0002, 0x0078, 0x0ad9, 0x0aed, 0x0001, 0x00c3, + 0x0002, 0x0078, 0x0b00, 0x0b03, 0x0004, 0x00d5, 0x00cf, 0x00cc, + 0x00d2, 0x0001, 0x0006, 0x015b, 0x0001, 0x0002, 0x0033, 0x0001, + 0x0002, 0x003c, 0x0001, 0x0002, 0x08e8, 0x0004, 0x00e6, 0x00e0, + 0x00dd, 0x00e3, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, + 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0040, 0x012a, + // Entry 59980 - 599BF + 0x0000, 0x0000, 0x012f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0134, 0x0000, 0x0000, 0x0139, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x013e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0149, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x014e, 0x0000, 0x0153, 0x0000, 0x0000, + 0x0158, 0x0000, 0x0000, 0x015d, 0x0000, 0x0000, 0x0162, 0x0001, + // Entry 599C0 - 599FF + 0x012c, 0x0001, 0x0078, 0x0b06, 0x0001, 0x0131, 0x0001, 0x0013, + 0x017b, 0x0001, 0x0136, 0x0001, 0x0013, 0x0182, 0x0001, 0x013b, + 0x0001, 0x0078, 0x0b0f, 0x0002, 0x0141, 0x0144, 0x0001, 0x0078, + 0x0b18, 0x0003, 0x0078, 0x0b20, 0x0b25, 0x0b37, 0x0001, 0x014b, + 0x0001, 0x0078, 0x0b3d, 0x0001, 0x0150, 0x0001, 0x0078, 0x0b51, + 0x0001, 0x0155, 0x0001, 0x0078, 0x0b5f, 0x0001, 0x015a, 0x0001, + 0x0013, 0x01e8, 0x0001, 0x015f, 0x0001, 0x0078, 0x0b66, 0x0001, + 0x0164, 0x0001, 0x0078, 0x0b72, 0x0002, 0x0003, 0x00d6, 0x0008, + // Entry 59A00 - 59A3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, + 0x0000, 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, 0x0002, + 0x0000, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, + 0x0000, 0x240c, 0x0008, 0x002f, 0x0053, 0x0078, 0x008c, 0x00a4, + 0x00b4, 0x00c5, 0x0000, 0x0001, 0x0031, 0x0003, 0x0035, 0x0000, + 0x0044, 0x000d, 0x0078, 0xffff, 0x0b7e, 0x0b82, 0x0b86, 0x0b8a, + 0x0b8e, 0x0b92, 0x0b96, 0x0b9a, 0x0b9e, 0x0ba2, 0x0ba7, 0x0bac, + // Entry 59A40 - 59A7F + 0x000d, 0x0078, 0xffff, 0x0bb1, 0x0bd3, 0x0bf1, 0x0c13, 0x0c2b, + 0x0c46, 0x0c4d, 0x0c53, 0x0c5b, 0x0c6a, 0x0c8c, 0x0c97, 0x0002, + 0x0056, 0x006c, 0x0003, 0x005a, 0x0000, 0x0063, 0x0007, 0x0078, + 0x0ca3, 0x0ca6, 0x0ca9, 0x0cac, 0x0caf, 0x0cb2, 0x0cb5, 0x0007, + 0x0078, 0x0cb8, 0x0cc3, 0x0ccb, 0x0cdd, 0x0cec, 0x0d01, 0x0d09, + 0x0002, 0x0000, 0x006f, 0x0007, 0x0000, 0x2002, 0x3d03, 0x3d03, + 0x235f, 0x3d52, 0x2006, 0x2002, 0x0001, 0x007a, 0x0003, 0x007e, + 0x0000, 0x0085, 0x0005, 0x0000, 0xffff, 0x04e3, 0x39f2, 0x39f5, + // Entry 59A80 - 59ABF + 0x44d4, 0x0005, 0x0078, 0xffff, 0x0d12, 0x0d1e, 0x0d2a, 0x0d36, + 0x0001, 0x008e, 0x0003, 0x0092, 0x0000, 0x009b, 0x0002, 0x0095, + 0x0098, 0x0001, 0x0078, 0x0d42, 0x0001, 0x0078, 0x0d4f, 0x0002, + 0x009e, 0x00a1, 0x0001, 0x0078, 0x0d42, 0x0001, 0x0078, 0x0d4f, + 0x0003, 0x00ae, 0x0000, 0x00a8, 0x0001, 0x00aa, 0x0002, 0x0078, + 0x0d5b, 0x0d6f, 0x0001, 0x00b0, 0x0002, 0x0040, 0x0395, 0x20fa, + 0x0004, 0x00c2, 0x00bc, 0x00b9, 0x00bf, 0x0001, 0x0002, 0x0025, + 0x0001, 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, 0x0002, + // Entry 59AC0 - 59AFF + 0x028b, 0x0004, 0x00d3, 0x00cd, 0x00ca, 0x00d0, 0x0001, 0x0000, + 0x0524, 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, + 0x0000, 0x0546, 0x0040, 0x0117, 0x0000, 0x0000, 0x011c, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0121, 0x0000, 0x0000, 0x0126, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x012b, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0136, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 59B00 - 59B3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x013b, + 0x0000, 0x0140, 0x0000, 0x0000, 0x0145, 0x0000, 0x0000, 0x014a, + 0x0000, 0x0000, 0x014f, 0x0001, 0x0119, 0x0001, 0x0078, 0x0d86, + 0x0001, 0x011e, 0x0001, 0x0078, 0x0d91, 0x0001, 0x0123, 0x0001, + 0x0078, 0x0d99, 0x0001, 0x0128, 0x0001, 0x0078, 0x0cb8, 0x0002, + 0x012e, 0x0131, 0x0001, 0x0078, 0x0d9f, 0x0003, 0x0078, 0x0dab, + 0x0db3, 0x0dba, 0x0001, 0x0138, 0x0001, 0x0078, 0x0dc4, 0x0001, + 0x013d, 0x0001, 0x0078, 0x0ddb, 0x0001, 0x0142, 0x0001, 0x0078, + // Entry 59B40 - 59B7F + 0x0df4, 0x0001, 0x0147, 0x0001, 0x0078, 0x0dfe, 0x0001, 0x014c, + 0x0001, 0x0078, 0x0e05, 0x0001, 0x0151, 0x0001, 0x0078, 0x0e0d, + 0x0003, 0x0004, 0x01a5, 0x02c9, 0x0009, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000e, 0x0039, 0x0119, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0017, 0x0000, 0x0028, 0x0004, + 0x0025, 0x001f, 0x001c, 0x0022, 0x0001, 0x002b, 0x1b86, 0x0001, + 0x002b, 0x1b99, 0x0001, 0x002b, 0x1ba6, 0x0001, 0x001d, 0x17a0, + 0x0004, 0x0036, 0x0030, 0x002d, 0x0033, 0x0001, 0x0000, 0x03c6, + // Entry 59B80 - 59BBF + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, + 0x022e, 0x0008, 0x0042, 0x0089, 0x0000, 0x00ce, 0x0000, 0x00e6, + 0x00f7, 0x0108, 0x0002, 0x0045, 0x0067, 0x0003, 0x0049, 0x0000, + 0x0058, 0x000d, 0x0078, 0xffff, 0x0e2b, 0x0e3c, 0x0e4f, 0x0e58, + 0x0e67, 0x0e6e, 0x0e77, 0x0e80, 0x0e8f, 0x0ea4, 0x0eb3, 0x0ec6, + 0x000d, 0x0078, 0xffff, 0x0e2b, 0x0e3c, 0x0e4f, 0x0e58, 0x0e67, + 0x0e6e, 0x0e77, 0x0e80, 0x0e8f, 0x0ea4, 0x0eb3, 0x0ec6, 0x0003, + 0x006b, 0x0000, 0x007a, 0x000d, 0x0078, 0xffff, 0x0ed7, 0x0ee0, + // Entry 59BC0 - 59BFF + 0x0e4f, 0x0ee9, 0x0e67, 0x0e6e, 0x0e77, 0x0ef4, 0x0efd, 0x0f06, + 0x0f0d, 0x0f16, 0x000d, 0x0078, 0xffff, 0x0e2b, 0x0e3c, 0x0e4f, + 0x0e58, 0x0e67, 0x0e6e, 0x0e77, 0x0e80, 0x0e8f, 0x0ea4, 0x0eb3, + 0x0ec6, 0x0002, 0x008c, 0x00ad, 0x0005, 0x0092, 0x0000, 0x00a4, + 0x0000, 0x009b, 0x0007, 0x0078, 0x0f1d, 0x0f2a, 0x0f39, 0x0f48, + 0x0f57, 0x0f6a, 0x0f7b, 0x0007, 0x0078, 0x0f1d, 0x0f2a, 0x0f39, + 0x0f48, 0x0f57, 0x0f6a, 0x0f7b, 0x0007, 0x0078, 0x0f1d, 0x0f2a, + 0x0f39, 0x0f48, 0x0f57, 0x0f6a, 0x0f7b, 0x0005, 0x00b3, 0x0000, + // Entry 59C00 - 59C3F + 0x00c5, 0x0000, 0x00bc, 0x0007, 0x0078, 0x0f1d, 0x0f2a, 0x0f39, + 0x0f48, 0x0f57, 0x0f6a, 0x0f7b, 0x0007, 0x0078, 0x0f1d, 0x0f2a, + 0x0f39, 0x0f48, 0x0f57, 0x0f6a, 0x0f7b, 0x0007, 0x0078, 0x0f1d, + 0x0f2a, 0x0f39, 0x0f48, 0x0f57, 0x0f6a, 0x0f7b, 0x0001, 0x00d0, + 0x0003, 0x00d4, 0x0000, 0x00dd, 0x0002, 0x00d7, 0x00da, 0x0001, + 0x0078, 0x0f82, 0x0001, 0x0078, 0x0f99, 0x0002, 0x00e0, 0x00e3, + 0x0001, 0x0078, 0x0f82, 0x0001, 0x0078, 0x0f99, 0x0004, 0x00f4, + 0x00ee, 0x00eb, 0x00f1, 0x0001, 0x0078, 0x0fae, 0x0001, 0x0078, + // Entry 59C40 - 59C7F + 0x0fc1, 0x0001, 0x0078, 0x0fce, 0x0001, 0x0015, 0x14be, 0x0004, + 0x0105, 0x00ff, 0x00fc, 0x0102, 0x0001, 0x0000, 0x0524, 0x0001, + 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, + 0x0004, 0x0116, 0x0110, 0x010d, 0x0113, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0006, 0x022e, 0x0001, 0x0000, + 0x03c6, 0x0008, 0x0122, 0x0000, 0x0000, 0x0000, 0x018d, 0x0194, + 0x0000, 0x9006, 0x0002, 0x0125, 0x0159, 0x0003, 0x0129, 0x0139, + 0x0149, 0x000e, 0x002b, 0x1edd, 0x1ea1, 0x1f76, 0x1eb3, 0x1ebc, + // Entry 59C80 - 59CBF + 0x1ec3, 0x1eca, 0x1ed6, 0x1ee9, 0x1ef2, 0x1efb, 0x1f04, 0x1f0d, + 0x1f12, 0x000e, 0x0078, 0x0ffd, 0x0fda, 0x0fdf, 0x0fe4, 0x0fe9, + 0x0fee, 0x0ff3, 0x0ff8, 0x1001, 0x1006, 0x100b, 0x1010, 0x1015, + 0x101a, 0x000e, 0x002b, 0x1edd, 0x1ea1, 0x1f76, 0x1eb3, 0x1ebc, + 0x1ec3, 0x1eca, 0x1ed6, 0x1ee9, 0x1ef2, 0x1efb, 0x1f04, 0x207c, + 0x1f12, 0x0003, 0x015d, 0x016d, 0x017d, 0x000e, 0x002b, 0x1edd, + 0x1ea1, 0x1eaa, 0x1eb3, 0x1ebc, 0x1ec3, 0x1eca, 0x1ed6, 0x1ee9, + 0x1ef2, 0x1efb, 0x1f04, 0x207c, 0x1f12, 0x000e, 0x0078, 0x0ffd, + // Entry 59CC0 - 59CFF + 0x0fda, 0x0fdf, 0x0fe4, 0x0fe9, 0x0fee, 0x0ff3, 0x0ff8, 0x1001, + 0x1006, 0x100b, 0x1010, 0x101f, 0x101a, 0x000e, 0x002b, 0x1edd, + 0x1ea1, 0x1eaa, 0x1eb3, 0x1ebc, 0x1ec3, 0x1eca, 0x1ed6, 0x1ee9, + 0x1ef2, 0x1efb, 0x1f04, 0x2081, 0x1f12, 0x0001, 0x018f, 0x0001, + 0x0191, 0x0001, 0x0078, 0x1024, 0x0004, 0x01a2, 0x019c, 0x0199, + 0x019f, 0x0001, 0x0006, 0x015b, 0x0001, 0x0002, 0x0033, 0x0001, + 0x002b, 0x1e8c, 0x0001, 0x002b, 0x1e8c, 0x0040, 0x01e6, 0x0000, + 0x0000, 0x01eb, 0x0202, 0x0214, 0x0000, 0x0000, 0x0000, 0x0226, + // Entry 59D00 - 59D3F + 0x023d, 0x024f, 0x0261, 0x026c, 0x0271, 0x0000, 0x0000, 0x0000, + 0x0276, 0x0288, 0x028d, 0x0000, 0x0000, 0x0000, 0x0292, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0297, 0x029c, 0x02a1, 0x02a6, + 0x02ab, 0x02b0, 0x02b5, 0x02ba, 0x02bf, 0x02c4, 0x0001, 0x01e8, + 0x0001, 0x0078, 0x102f, 0x0003, 0x01ef, 0x01f2, 0x01f7, 0x0001, + // Entry 59D40 - 59D7F + 0x0078, 0x103c, 0x0003, 0x0078, 0x1045, 0x105c, 0x106c, 0x0002, + 0x01fa, 0x01fe, 0x0002, 0x0078, 0x1083, 0x1083, 0x0002, 0x0078, + 0x109b, 0x109b, 0x0003, 0x0206, 0x0000, 0x0209, 0x0001, 0x0078, + 0x103c, 0x0002, 0x020c, 0x0210, 0x0002, 0x0078, 0x1083, 0x106c, + 0x0002, 0x0078, 0x109b, 0x109b, 0x0003, 0x0218, 0x0000, 0x021b, + 0x0001, 0x0078, 0x103c, 0x0002, 0x021e, 0x0222, 0x0002, 0x0078, + 0x1083, 0x1083, 0x0002, 0x0078, 0x109b, 0x109b, 0x0003, 0x022a, + 0x022d, 0x0232, 0x0001, 0x0078, 0x10b3, 0x0003, 0x0078, 0x10c0, + // Entry 59D80 - 59DBF + 0x10e4, 0x10f4, 0x0002, 0x0235, 0x0239, 0x0002, 0x0078, 0x1128, + 0x1110, 0x0002, 0x0078, 0x115a, 0x1142, 0x0003, 0x0241, 0x0000, + 0x0244, 0x0001, 0x0078, 0x10b3, 0x0002, 0x0247, 0x024b, 0x0002, + 0x0078, 0x1128, 0x1110, 0x0002, 0x0078, 0x115a, 0x1142, 0x0003, + 0x0253, 0x0000, 0x0256, 0x0001, 0x0078, 0x10b3, 0x0002, 0x0259, + 0x025d, 0x0002, 0x0078, 0x1128, 0x1110, 0x0002, 0x0078, 0x115a, + 0x1142, 0x0002, 0x0264, 0x0267, 0x0001, 0x0078, 0x1174, 0x0003, + 0x0000, 0x1ae1, 0x1aeb, 0x4530, 0x0001, 0x026e, 0x0001, 0x0078, + // Entry 59DC0 - 59DFF + 0x1174, 0x0001, 0x0273, 0x0001, 0x0078, 0x1174, 0x0003, 0x027a, + 0x027d, 0x0282, 0x0001, 0x0078, 0x117d, 0x0003, 0x0078, 0x1186, + 0x1191, 0x119c, 0x0001, 0x0284, 0x0002, 0x0078, 0x11c6, 0x11a7, + 0x0001, 0x028a, 0x0001, 0x0078, 0x117d, 0x0001, 0x028f, 0x0001, + 0x0078, 0x117d, 0x0001, 0x0294, 0x0001, 0x0078, 0x11e3, 0x0001, + 0x0299, 0x0001, 0x002c, 0x0f17, 0x0001, 0x029e, 0x0001, 0x002c, + 0x0f17, 0x0001, 0x02a3, 0x0001, 0x002c, 0x0f17, 0x0001, 0x02a8, + 0x0001, 0x0078, 0x1203, 0x0001, 0x02ad, 0x0001, 0x0078, 0x1203, + // Entry 59E00 - 59E3F + 0x0001, 0x02b2, 0x0001, 0x0078, 0x1203, 0x0001, 0x02b7, 0x0001, + 0x0078, 0x120e, 0x0001, 0x02bc, 0x0001, 0x0078, 0x120e, 0x0001, + 0x02c1, 0x0001, 0x0078, 0x120e, 0x0001, 0x02c6, 0x0001, 0x0078, + 0x121d, 0x0004, 0x0000, 0x0000, 0x0000, 0x0000, 0x0002, 0x0003, + 0x019c, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000c, 0x0026, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0015, 0x0000, 0x0000, 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, + 0x0001, 0x0006, 0x000d, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, + // Entry 59E40 - 59E7F + 0x001b, 0x0001, 0x0002, 0x0587, 0x0008, 0x002f, 0x0094, 0x00d9, + 0x010e, 0x014f, 0x0169, 0x017a, 0x018b, 0x0002, 0x0032, 0x0063, + 0x0003, 0x0036, 0x0045, 0x0054, 0x000d, 0x0078, 0xffff, 0x122e, + 0x123d, 0x1246, 0x1253, 0x125a, 0x1264, 0x126c, 0x1276, 0x127d, + 0x1283, 0x128f, 0x1296, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, + 0x4417, 0x441a, 0x000d, 0x0078, 0xffff, 0x12a2, 0x12b8, 0x12c8, + 0x12dc, 0x12ea, 0x12fb, 0x130a, 0x131b, 0x1329, 0x1336, 0x1349, + // Entry 59E80 - 59EBF + 0x1357, 0x0003, 0x0067, 0x0076, 0x0085, 0x000d, 0x0078, 0xffff, + 0x122e, 0x123d, 0x1246, 0x1253, 0x125a, 0x1264, 0x126c, 0x1276, + 0x127d, 0x1283, 0x128f, 0x1296, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, + 0x4414, 0x4417, 0x441a, 0x000d, 0x0078, 0xffff, 0x12a2, 0x12b8, + 0x12c8, 0x12dc, 0x12ea, 0x12fb, 0x130a, 0x131b, 0x1329, 0x1336, + 0x1349, 0x1357, 0x0002, 0x0097, 0x00b8, 0x0005, 0x009d, 0x0000, + 0x00af, 0x0000, 0x00a6, 0x0007, 0x0078, 0x136a, 0x1372, 0x1377, + // Entry 59EC0 - 59EFF + 0x1383, 0x1390, 0x139e, 0x13a5, 0x0007, 0x0078, 0x136a, 0x1372, + 0x1377, 0x1383, 0x1390, 0x139e, 0x13a5, 0x0007, 0x0078, 0x13b3, + 0x13c5, 0x13d4, 0x1383, 0x1390, 0x13ea, 0x13fb, 0x0005, 0x00be, + 0x0000, 0x00d0, 0x0000, 0x00c7, 0x0007, 0x0078, 0x136a, 0x1372, + 0x1377, 0x1383, 0x1390, 0x139e, 0x13a5, 0x0007, 0x0078, 0x136a, + 0x1372, 0x1377, 0x1383, 0x1390, 0x139e, 0x13a5, 0x0007, 0x0078, + 0x13b3, 0x13c5, 0x13d4, 0x1383, 0x1390, 0x13ea, 0x13fb, 0x0002, + 0x00dc, 0x00f5, 0x0003, 0x00e0, 0x00e7, 0x00ee, 0x0005, 0x0000, + // Entry 59F00 - 59F3F + 0xffff, 0x1f17, 0x1f1a, 0x1f1d, 0x1f20, 0x0005, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0078, 0xffff, 0x1413, + 0x1425, 0x1435, 0x1443, 0x0003, 0x00f9, 0x0100, 0x0107, 0x0005, + 0x0000, 0xffff, 0x1f17, 0x1f1a, 0x1f1d, 0x1f20, 0x0005, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0078, 0xffff, + 0x1413, 0x1425, 0x1435, 0x1443, 0x0002, 0x0111, 0x0130, 0x0003, + 0x0115, 0x011e, 0x0127, 0x0002, 0x0118, 0x011b, 0x0001, 0x0078, + 0x1455, 0x0001, 0x0078, 0x1460, 0x0002, 0x0121, 0x0124, 0x0001, + // Entry 59F40 - 59F7F + 0x0078, 0x1455, 0x0001, 0x0078, 0x1460, 0x0002, 0x012a, 0x012d, + 0x0001, 0x0078, 0x1455, 0x0001, 0x0078, 0x1460, 0x0003, 0x0134, + 0x013d, 0x0146, 0x0002, 0x0137, 0x013a, 0x0001, 0x0078, 0x1455, + 0x0001, 0x0078, 0x1460, 0x0002, 0x0140, 0x0143, 0x0001, 0x0078, + 0x1455, 0x0001, 0x0078, 0x1460, 0x0002, 0x0149, 0x014c, 0x0001, + 0x0078, 0x1455, 0x0001, 0x0078, 0x1460, 0x0003, 0x015e, 0x0000, + 0x0153, 0x0002, 0x0156, 0x015a, 0x0002, 0x0078, 0x146a, 0x1476, + 0x0002, 0x0000, 0x04f5, 0x3c5a, 0x0002, 0x0161, 0x0165, 0x0002, + // Entry 59F80 - 59FBF + 0x0000, 0x04f5, 0x454d, 0x0002, 0x0000, 0xffff, 0x3c5a, 0x0004, + 0x0177, 0x0171, 0x016e, 0x0174, 0x0001, 0x0006, 0x015b, 0x0001, + 0x0002, 0x0033, 0x0001, 0x0002, 0x003c, 0x0001, 0x0002, 0x08e8, + 0x0004, 0x0188, 0x0182, 0x017f, 0x0185, 0x0001, 0x0000, 0x0524, + 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, + 0x0546, 0x0004, 0x0199, 0x0193, 0x0190, 0x0196, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0040, 0x01dd, 0x0000, 0x0000, 0x01e2, 0x0000, + // Entry 59FC0 - 59FFF + 0x0000, 0x0000, 0x0000, 0x0000, 0x01e7, 0x0000, 0x0000, 0x01ec, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01f1, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x01fe, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0203, + 0x0000, 0x0208, 0x020d, 0x0212, 0x0217, 0x0000, 0x0000, 0x021c, + 0x0000, 0x0000, 0x0221, 0x0001, 0x01df, 0x0001, 0x0078, 0x1483, + // Entry 5A000 - 5A03F + 0x0001, 0x01e4, 0x0001, 0x0078, 0x148a, 0x0001, 0x01e9, 0x0001, + 0x0078, 0x1492, 0x0001, 0x01ee, 0x0001, 0x0078, 0x1497, 0x0002, + 0x01f4, 0x01f7, 0x0001, 0x0078, 0x14a0, 0x0005, 0x0078, 0x14b3, + 0x14b9, 0x14bf, 0x14aa, 0x14c7, 0x0001, 0x0200, 0x0001, 0x0078, + 0x14d2, 0x0001, 0x0205, 0x0001, 0x0078, 0x14e8, 0x0001, 0x020a, + 0x0001, 0x0078, 0x14fd, 0x0001, 0x020f, 0x0001, 0x0078, 0x14fd, + 0x0001, 0x0214, 0x0001, 0x0078, 0x14fd, 0x0001, 0x0219, 0x0001, + 0x0078, 0x1507, 0x0001, 0x021e, 0x0001, 0x0078, 0x1513, 0x0001, + // Entry 5A040 - 5A07F + 0x0223, 0x0001, 0x0078, 0x1527, 0x0002, 0x0003, 0x00f7, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, + 0x0004, 0x0011, 0x0058, 0x009d, 0x00b6, 0x0002, 0x0014, 0x0036, + 0x0003, 0x0018, 0x0000, 0x0027, 0x000d, 0x0078, 0xffff, 0x153e, + 0x123d, 0x154a, 0x1253, 0x1555, 0x1264, 0x155e, 0x1276, 0x127d, + 0x1566, 0x128f, 0x1571, 0x000d, 0x0078, 0xffff, 0x157b, 0x158d, + 0x159c, 0x15ad, 0x15ba, 0x15c9, 0x15d7, 0x15e5, 0x15f2, 0x15fe, + 0x160f, 0x161c, 0x0003, 0x003a, 0x0000, 0x0049, 0x000d, 0x0078, + // Entry 5A080 - 5A0BF + 0xffff, 0x153e, 0x123d, 0x154a, 0x1253, 0x1555, 0x1264, 0x155e, + 0x1276, 0x127d, 0x1566, 0x128f, 0x1571, 0x000d, 0x0078, 0xffff, + 0x157b, 0x158d, 0x159c, 0x15ad, 0x15ba, 0x15c9, 0x15d7, 0x15e5, + 0x15f2, 0x15fe, 0x160f, 0x161c, 0x0002, 0x005b, 0x007c, 0x0005, + 0x0061, 0x0000, 0x0073, 0x0000, 0x006a, 0x0007, 0x0078, 0x136a, + 0x1372, 0x162c, 0x1637, 0x1642, 0x164d, 0x1653, 0x0007, 0x0078, + 0x136a, 0x1372, 0x162c, 0x1637, 0x1642, 0x164d, 0x1653, 0x0007, + 0x0078, 0x1660, 0x1670, 0x167d, 0x1637, 0x1642, 0x1690, 0x169e, + // Entry 5A0C0 - 5A0FF + 0x0005, 0x0082, 0x0000, 0x0094, 0x0000, 0x008b, 0x0007, 0x0078, + 0x136a, 0x1372, 0x162c, 0x1637, 0x1642, 0x164d, 0x1653, 0x0007, + 0x0078, 0x136a, 0x1372, 0x162c, 0x1637, 0x1642, 0x164d, 0x1653, + 0x0007, 0x0078, 0x1660, 0x1670, 0x167d, 0x1637, 0x1642, 0x1690, + 0x169e, 0x0002, 0x00a0, 0x00ab, 0x0003, 0x0000, 0x0000, 0x00a4, + 0x0005, 0x0078, 0xffff, 0x16b3, 0x16c4, 0x16d3, 0x16e0, 0x0003, + 0x0000, 0x0000, 0x00af, 0x0005, 0x0078, 0xffff, 0x16b3, 0x16c4, + 0x16d3, 0x16e0, 0x0002, 0x00b9, 0x00d8, 0x0003, 0x00bd, 0x00c6, + // Entry 5A100 - 5A13F + 0x00cf, 0x0002, 0x00c0, 0x00c3, 0x0001, 0x0078, 0x16f0, 0x0001, + 0x0078, 0x16fa, 0x0002, 0x00c9, 0x00cc, 0x0001, 0x0078, 0x16f0, + 0x0001, 0x0078, 0x16fa, 0x0002, 0x00d2, 0x00d5, 0x0001, 0x0078, + 0x16f0, 0x0001, 0x0078, 0x16fa, 0x0003, 0x00dc, 0x00e5, 0x00ee, + 0x0002, 0x00df, 0x00e2, 0x0001, 0x0078, 0x16f0, 0x0001, 0x0078, + 0x16fa, 0x0002, 0x00e8, 0x00eb, 0x0001, 0x0078, 0x16f0, 0x0001, + 0x0078, 0x16fa, 0x0002, 0x00f1, 0x00f4, 0x0001, 0x0078, 0x16f0, + 0x0001, 0x0078, 0x16fa, 0x003d, 0x0000, 0x0000, 0x0000, 0x0135, + // Entry 5A140 - 5A17F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x013a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x013f, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x014c, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0151, 0x0000, 0x0000, 0x0000, 0x0000, 0x0156, 0x0000, 0x0000, + 0x015b, 0x0001, 0x0137, 0x0001, 0x0078, 0x1703, 0x0001, 0x013c, + // Entry 5A180 - 5A1BF + 0x0001, 0x0078, 0x170a, 0x0002, 0x0142, 0x0145, 0x0001, 0x0078, + 0x1712, 0x0005, 0x0078, 0x14b3, 0x14b9, 0x1722, 0x171a, 0x14c7, + 0x0001, 0x014e, 0x0001, 0x0078, 0x1729, 0x0001, 0x0153, 0x0001, + 0x0078, 0x173b, 0x0001, 0x0158, 0x0001, 0x0078, 0x174e, 0x0001, + 0x015d, 0x0001, 0x0078, 0x1759, 0x0003, 0x0004, 0x08cc, 0x0caf, + 0x0012, 0x0017, 0x0038, 0x015b, 0x01c8, 0x02b9, 0x0000, 0x0326, + 0x0351, 0x0592, 0x061c, 0x068e, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0714, 0x0831, 0x08aa, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 5A1C0 - 5A1FF + 0x0020, 0x0027, 0x0000, 0x9006, 0x0001, 0x0022, 0x0001, 0x0024, + 0x0001, 0x0078, 0x176c, 0x0004, 0x0035, 0x002f, 0x002c, 0x0032, + 0x0001, 0x0036, 0x0719, 0x0001, 0x0036, 0x04f5, 0x0001, 0x0036, + 0x04f5, 0x0001, 0x0036, 0x0503, 0x000a, 0x0043, 0x0000, 0x0000, + 0x0000, 0x0000, 0x014a, 0x0000, 0x0000, 0x00a8, 0x00bb, 0x0002, + 0x0046, 0x0077, 0x0003, 0x004a, 0x0059, 0x0068, 0x000d, 0x0036, + 0xffff, 0x0036, 0x003d, 0x0044, 0x004b, 0x0052, 0x0059, 0x0060, + 0x0067, 0x006e, 0x0075, 0x3b22, 0x3b29, 0x000d, 0x0036, 0xffff, + // Entry 5A200 - 5A23F + 0x0090, 0x0094, 0x0098, 0x009c, 0x00a0, 0x00a4, 0x00a8, 0x00ac, + 0x00b0, 0x00b4, 0x3b30, 0x3b34, 0x000d, 0x0036, 0xffff, 0x0036, + 0x003d, 0x0044, 0x004b, 0x0052, 0x0059, 0x0060, 0x0067, 0x006e, + 0x0075, 0x3b22, 0x3b29, 0x0003, 0x007b, 0x008a, 0x0099, 0x000d, + 0x0036, 0xffff, 0x0036, 0x003d, 0x0044, 0x004b, 0x0052, 0x0059, + 0x0060, 0x0067, 0x006e, 0x0075, 0x3b22, 0x3b29, 0x000d, 0x0036, + 0xffff, 0x0090, 0x0094, 0x0098, 0x009c, 0x00a0, 0x00a4, 0x00a8, + 0x00ac, 0x00b0, 0x00b4, 0x3b30, 0x3b34, 0x000d, 0x0036, 0xffff, + // Entry 5A240 - 5A27F + 0x0036, 0x003d, 0x0044, 0x004b, 0x0052, 0x0059, 0x0060, 0x0067, + 0x006e, 0x0075, 0x3b22, 0x3b29, 0x0003, 0x00ac, 0x00b7, 0x00b1, + 0x0003, 0x0036, 0xffff, 0xffff, 0x00c6, 0x0004, 0x0036, 0xffff, + 0xffff, 0xffff, 0x00c6, 0x0002, 0x0036, 0xffff, 0x00c6, 0x0006, + 0x00c2, 0x0000, 0x0000, 0x00d5, 0x00f4, 0x0137, 0x0001, 0x00c4, + 0x0001, 0x00c6, 0x000d, 0x0036, 0xffff, 0x00cd, 0x00d1, 0x00d5, + 0x00d9, 0x00dd, 0x00e1, 0x00e5, 0x00e9, 0x00ed, 0x00f1, 0x00f5, + 0x00f9, 0x0001, 0x00d7, 0x0001, 0x00d9, 0x0019, 0x0036, 0xffff, + // Entry 5A280 - 5A2BF + 0x00fd, 0x0104, 0x3b38, 0x0112, 0x0119, 0x0120, 0x0127, 0x3b3f, + 0x0135, 0x013c, 0x0143, 0x014a, 0x0151, 0x3b46, 0x015f, 0x0166, + 0x016d, 0x0174, 0x017b, 0x0182, 0x0189, 0x0190, 0x0197, 0x019e, + 0x0001, 0x00f6, 0x0001, 0x00f8, 0x003d, 0x0036, 0xffff, 0x01a5, + 0x01ac, 0x01b3, 0x01ba, 0x01c1, 0x01c8, 0x01cf, 0x01d6, 0x01dd, + 0x01e4, 0x01eb, 0x01f2, 0x01f9, 0x0200, 0x0207, 0x020e, 0x0215, + 0x021c, 0x0223, 0x022a, 0x0231, 0x0238, 0x023f, 0x0246, 0x024d, + 0x0254, 0x025b, 0x0262, 0x0269, 0x0270, 0x0277, 0x027e, 0x0285, + // Entry 5A2C0 - 5A2FF + 0x028c, 0x0293, 0x029a, 0x02a1, 0x02a8, 0x02af, 0x02b6, 0x02bd, + 0x02c4, 0x02cb, 0x02d2, 0x02d9, 0x02e0, 0x02e7, 0x02ee, 0x02f5, + 0x02fc, 0x0303, 0x030a, 0x0311, 0x0318, 0x031f, 0x0326, 0x032d, + 0x0334, 0x033b, 0x0342, 0x0001, 0x0139, 0x0001, 0x013b, 0x000d, + 0x0036, 0xffff, 0x0349, 0x034d, 0x0351, 0x3b4d, 0x3b51, 0x035d, + 0x0361, 0x0365, 0x3b55, 0x3b59, 0x3b5d, 0x3b61, 0x0004, 0x0158, + 0x0152, 0x014f, 0x0155, 0x0001, 0x0078, 0x1773, 0x0001, 0x0078, + 0x1785, 0x0001, 0x0078, 0x1793, 0x0001, 0x0078, 0x179c, 0x0001, + // Entry 5A300 - 5A33F + 0x015d, 0x0002, 0x0160, 0x0194, 0x0003, 0x0164, 0x0174, 0x0184, + 0x000e, 0x0036, 0xffff, 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, + 0x0523, 0x0528, 0x052d, 0x0532, 0x0537, 0x053d, 0x0543, 0x3b65, + 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, 0x441d, + 0x000e, 0x0036, 0xffff, 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, + 0x0523, 0x0528, 0x052d, 0x0532, 0x0537, 0x053d, 0x0543, 0x3b65, + 0x0003, 0x0198, 0x01a8, 0x01b8, 0x000e, 0x0036, 0xffff, 0x050a, + // Entry 5A340 - 5A37F + 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, + 0x0537, 0x053d, 0x0543, 0x3b65, 0x000e, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, + 0x4414, 0x4417, 0x441a, 0x441d, 0x000e, 0x0036, 0xffff, 0x050a, + 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, + 0x0537, 0x053d, 0x0543, 0x3b65, 0x000a, 0x01d3, 0x0000, 0x0000, + 0x0000, 0x0000, 0x02a8, 0x0000, 0x0000, 0x0000, 0x0238, 0x0002, + 0x01d6, 0x0207, 0x0003, 0x01da, 0x01e9, 0x01f8, 0x000d, 0x0036, + // Entry 5A380 - 5A3BF + 0xffff, 0x0036, 0x003d, 0x0044, 0x004b, 0x0052, 0x0059, 0x0060, + 0x0067, 0x006e, 0x0075, 0x007c, 0x0086, 0x000d, 0x0036, 0xffff, + 0x0090, 0x0094, 0x0098, 0x009c, 0x00a0, 0x00a4, 0x00a8, 0x00ac, + 0x00b0, 0x00b4, 0x00b8, 0x00bf, 0x000d, 0x0036, 0xffff, 0x0036, + 0x003d, 0x0044, 0x004b, 0x0052, 0x0059, 0x0060, 0x0067, 0x006e, + 0x0075, 0x007c, 0x0086, 0x0003, 0x020b, 0x021a, 0x0229, 0x000d, + 0x0036, 0xffff, 0x0036, 0x003d, 0x0044, 0x004b, 0x0052, 0x0059, + 0x0060, 0x0067, 0x006e, 0x0075, 0x007c, 0x0086, 0x000d, 0x0036, + // Entry 5A3C0 - 5A3FF + 0xffff, 0x0090, 0x0094, 0x0098, 0x009c, 0x00a0, 0x00a4, 0x00a8, + 0x00ac, 0x00b0, 0x00b4, 0x00b8, 0x00bf, 0x000d, 0x0036, 0xffff, + 0x0036, 0x003d, 0x0044, 0x004b, 0x0052, 0x0059, 0x0060, 0x0067, + 0x006e, 0x0075, 0x007c, 0x0086, 0x0006, 0x023f, 0x0000, 0x0000, + 0x0000, 0x0252, 0x0295, 0x0001, 0x0241, 0x0001, 0x0243, 0x000d, + 0x0036, 0xffff, 0x00cd, 0x00d1, 0x00d5, 0x00d9, 0x00dd, 0x00e1, + 0x00e5, 0x00e9, 0x00ed, 0x00f1, 0x00f5, 0x00f9, 0x0001, 0x0254, + 0x0001, 0x0256, 0x003d, 0x0036, 0xffff, 0x01a5, 0x01ac, 0x01b3, + // Entry 5A400 - 5A43F + 0x01ba, 0x01c1, 0x01c8, 0x01cf, 0x01d6, 0x01dd, 0x01e4, 0x01eb, + 0x01f2, 0x01f9, 0x0200, 0x0207, 0x020e, 0x0215, 0x021c, 0x0223, + 0x022a, 0x0231, 0x0238, 0x023f, 0x0246, 0x024d, 0x0254, 0x025b, + 0x0262, 0x0269, 0x0270, 0x0277, 0x027e, 0x0285, 0x028c, 0x0293, + 0x029a, 0x02a1, 0x02a8, 0x02af, 0x02b6, 0x02bd, 0x02c4, 0x02cb, + 0x02d2, 0x02d9, 0x02e0, 0x02e7, 0x02ee, 0x02f5, 0x02fc, 0x0303, + 0x030a, 0x0311, 0x0318, 0x031f, 0x0326, 0x032d, 0x0334, 0x033b, + 0x0342, 0x0001, 0x0297, 0x0001, 0x0299, 0x000d, 0x0036, 0xffff, + // Entry 5A440 - 5A47F + 0x0349, 0x034d, 0x0351, 0x3b4d, 0x3b51, 0x035d, 0x0361, 0x0365, + 0x3b55, 0x3b59, 0x3b5d, 0x3b61, 0x0004, 0x02b6, 0x02b0, 0x02ad, + 0x02b3, 0x0001, 0x0036, 0x0379, 0x0001, 0x0036, 0x0389, 0x0001, + 0x0036, 0x0389, 0x0001, 0x0078, 0x17a2, 0x0001, 0x02bb, 0x0002, + 0x02be, 0x02f2, 0x0003, 0x02c2, 0x02d2, 0x02e2, 0x000e, 0x0036, + 0xffff, 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, + 0x052d, 0x0532, 0x0537, 0x053d, 0x0543, 0x3b65, 0x000e, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, + // Entry 5A480 - 5A4BF + 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, 0x441d, 0x000e, 0x0036, + 0xffff, 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, + 0x052d, 0x0532, 0x0537, 0x053d, 0x0543, 0x3b65, 0x0003, 0x02f6, + 0x0306, 0x0316, 0x000e, 0x0036, 0xffff, 0x050a, 0x050f, 0x0514, + 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, 0x0537, 0x053d, + 0x0543, 0x3b65, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, 0x4417, + 0x441a, 0x441d, 0x000e, 0x0036, 0xffff, 0x050a, 0x050f, 0x0514, + // Entry 5A4C0 - 5A4FF + 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, 0x0537, 0x053d, + 0x0543, 0x3b65, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x032f, 0x0000, 0x0340, 0x0004, 0x033d, 0x0337, 0x0334, 0x033a, + 0x0001, 0x0078, 0x17a8, 0x0001, 0x0078, 0x17bc, 0x0001, 0x0078, + 0x17bc, 0x0001, 0x0078, 0x17cb, 0x0004, 0x034e, 0x0348, 0x0345, + 0x034b, 0x0001, 0x0078, 0x17d3, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x035a, 0x03bf, + 0x0416, 0x044b, 0x053a, 0x055f, 0x0570, 0x0581, 0x0002, 0x035d, + // Entry 5A500 - 5A53F + 0x038e, 0x0003, 0x0361, 0x0370, 0x037f, 0x000d, 0x0036, 0xffff, + 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, + 0x0532, 0x0537, 0x053d, 0x0543, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, + 0x4414, 0x4417, 0x441a, 0x000d, 0x0036, 0xffff, 0x050a, 0x050f, + 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, 0x0537, + 0x053d, 0x0543, 0x0003, 0x0392, 0x03a1, 0x03b0, 0x000d, 0x0036, + 0xffff, 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, + // Entry 5A540 - 5A57F + 0x052d, 0x0532, 0x0537, 0x053d, 0x0543, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, + 0x2424, 0x4414, 0x4417, 0x441a, 0x000d, 0x0036, 0xffff, 0x050a, + 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, + 0x0537, 0x053d, 0x0543, 0x0002, 0x03c2, 0x03ec, 0x0005, 0x03c8, + 0x03d1, 0x03e3, 0x0000, 0x03da, 0x0007, 0x0078, 0x17da, 0x17e4, + 0x17ee, 0x17f8, 0x1802, 0x180c, 0x1816, 0x0007, 0x0036, 0x0549, + 0x3b6b, 0x0094, 0x0098, 0x009c, 0x00a0, 0x00a4, 0x0007, 0x0036, + // Entry 5A580 - 5A5BF + 0x0549, 0x3b6b, 0x0094, 0x0098, 0x009c, 0x00a0, 0x00a4, 0x0007, + 0x0078, 0x17da, 0x17e4, 0x17ee, 0x17f8, 0x1802, 0x180c, 0x1816, + 0x0005, 0x03f2, 0x03fb, 0x040d, 0x0000, 0x0404, 0x0007, 0x0078, + 0x17da, 0x17e4, 0x17ee, 0x17f8, 0x1802, 0x180c, 0x1816, 0x0007, + 0x0036, 0x0549, 0x3b6b, 0x0094, 0x0098, 0x009c, 0x00a0, 0x00a4, + 0x0007, 0x0036, 0x0549, 0x3b6b, 0x0094, 0x0098, 0x009c, 0x00a0, + 0x00a4, 0x0007, 0x0078, 0x17da, 0x17e4, 0x17ee, 0x17f8, 0x1802, + 0x180c, 0x1816, 0x0002, 0x0419, 0x0432, 0x0003, 0x041d, 0x0424, + // Entry 5A5C0 - 5A5FF + 0x042b, 0x0005, 0x0078, 0xffff, 0x1820, 0x1828, 0x1830, 0x1838, + 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, + 0x0078, 0xffff, 0x1820, 0x1828, 0x1830, 0x1838, 0x0003, 0x0436, + 0x043d, 0x0444, 0x0005, 0x0078, 0xffff, 0x1820, 0x1828, 0x1830, + 0x1838, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x0005, 0x0078, 0xffff, 0x1820, 0x1828, 0x1830, 0x1838, 0x0002, + 0x044e, 0x04c4, 0x0003, 0x0452, 0x0478, 0x049e, 0x000a, 0x0460, + 0x0463, 0x045d, 0x0466, 0x046c, 0x0472, 0x0475, 0x0000, 0x0469, + // Entry 5A600 - 5A63F + 0x046f, 0x0001, 0x0078, 0x1840, 0x0001, 0x0078, 0x1847, 0x0001, + 0x0078, 0x184e, 0x0001, 0x0078, 0x1855, 0x0001, 0x0078, 0x185c, + 0x0001, 0x0078, 0x1863, 0x0001, 0x0078, 0x186a, 0x0001, 0x0078, + 0x1871, 0x0001, 0x0078, 0x1878, 0x000a, 0x0486, 0x0489, 0x0483, + 0x048c, 0x0492, 0x0498, 0x049b, 0x0000, 0x048f, 0x0495, 0x0001, + 0x0078, 0x1840, 0x0001, 0x0078, 0x1847, 0x0001, 0x0078, 0x184e, + 0x0001, 0x0078, 0x1855, 0x0001, 0x0078, 0x185c, 0x0001, 0x0078, + 0x1863, 0x0001, 0x0078, 0x186a, 0x0001, 0x0078, 0x1871, 0x0001, + // Entry 5A640 - 5A67F + 0x0078, 0x1878, 0x000a, 0x04ac, 0x04af, 0x04a9, 0x04b2, 0x04b8, + 0x04be, 0x04c1, 0x0000, 0x04b5, 0x04bb, 0x0001, 0x0078, 0x1840, + 0x0001, 0x0078, 0x1847, 0x0001, 0x0078, 0x184e, 0x0001, 0x0078, + 0x1855, 0x0001, 0x0078, 0x185c, 0x0001, 0x0078, 0x1863, 0x0001, + 0x0078, 0x186a, 0x0001, 0x0078, 0x1871, 0x0001, 0x0078, 0x1878, + 0x0003, 0x04c8, 0x04ee, 0x0514, 0x000a, 0x04d6, 0x04d9, 0x04d3, + 0x04dc, 0x04e2, 0x04e8, 0x04eb, 0x0000, 0x04df, 0x04e5, 0x0001, + 0x0078, 0x1840, 0x0001, 0x0078, 0x1847, 0x0001, 0x0078, 0x184e, + // Entry 5A680 - 5A6BF + 0x0001, 0x0078, 0x1855, 0x0001, 0x0078, 0x185c, 0x0001, 0x0078, + 0x1863, 0x0001, 0x0078, 0x186a, 0x0001, 0x0078, 0x1871, 0x0001, + 0x0078, 0x1878, 0x000a, 0x04fc, 0x04ff, 0x04f9, 0x0502, 0x0508, + 0x050e, 0x0511, 0x0000, 0x0505, 0x050b, 0x0001, 0x0078, 0x1840, + 0x0001, 0x0078, 0x1847, 0x0001, 0x0078, 0x184e, 0x0001, 0x0078, + 0x1855, 0x0001, 0x0078, 0x185c, 0x0001, 0x0078, 0x1863, 0x0001, + 0x0078, 0x186a, 0x0001, 0x0078, 0x1871, 0x0001, 0x0078, 0x1878, + 0x000a, 0x0522, 0x0525, 0x051f, 0x0528, 0x052e, 0x0534, 0x0537, + // Entry 5A6C0 - 5A6FF + 0x0000, 0x052b, 0x0531, 0x0001, 0x0078, 0x1840, 0x0001, 0x0078, + 0x1847, 0x0001, 0x0078, 0x184e, 0x0001, 0x0078, 0x1855, 0x0001, + 0x0078, 0x185c, 0x0001, 0x0078, 0x1863, 0x0001, 0x0078, 0x186a, + 0x0001, 0x0078, 0x1871, 0x0001, 0x0078, 0x1878, 0x0003, 0x0549, + 0x0554, 0x053e, 0x0002, 0x0541, 0x0545, 0x0002, 0x0078, 0x187f, + 0x1893, 0x0002, 0x0078, 0x1889, 0x189a, 0x0002, 0x054c, 0x0550, + 0x0002, 0x0078, 0x187f, 0x1893, 0x0002, 0x0078, 0x1889, 0x189a, + 0x0002, 0x0557, 0x055b, 0x0002, 0x0078, 0x187f, 0x1893, 0x0002, + // Entry 5A700 - 5A73F + 0x0078, 0x1889, 0x189a, 0x0004, 0x056d, 0x0567, 0x0564, 0x056a, + 0x0001, 0x0078, 0x18a1, 0x0001, 0x0036, 0x065b, 0x0001, 0x0036, + 0x065b, 0x0001, 0x0021, 0x0721, 0x0004, 0x057e, 0x0578, 0x0575, + 0x057b, 0x0001, 0x0078, 0x18b3, 0x0001, 0x0078, 0x18c3, 0x0001, + 0x0078, 0x18d0, 0x0001, 0x0078, 0x18d9, 0x0004, 0x058f, 0x0589, + 0x0586, 0x058c, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0006, 0x0599, + 0x0000, 0x0000, 0x0000, 0x0604, 0x060b, 0x0002, 0x059c, 0x05d0, + // Entry 5A740 - 5A77F + 0x0003, 0x05a0, 0x05b0, 0x05c0, 0x000e, 0x0078, 0x1933, 0x18df, + 0x18ec, 0x18f9, 0x1906, 0x1910, 0x191d, 0x1929, 0x1940, 0x194a, + 0x1954, 0x195e, 0x196b, 0x1975, 0x000e, 0x0000, 0x449e, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, + 0x4414, 0x4417, 0x441a, 0x441d, 0x000e, 0x0078, 0x1933, 0x18df, + 0x18ec, 0x18f9, 0x1906, 0x1910, 0x191d, 0x1929, 0x1940, 0x194a, + 0x1954, 0x195e, 0x196b, 0x1975, 0x0003, 0x05d4, 0x05e4, 0x05f4, + 0x000e, 0x0078, 0x1933, 0x18df, 0x18ec, 0x18f9, 0x1906, 0x1910, + // Entry 5A780 - 5A7BF + 0x191d, 0x1929, 0x1940, 0x194a, 0x1954, 0x195e, 0x196b, 0x1975, + 0x000e, 0x0000, 0x449e, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, 0x441d, + 0x000e, 0x0078, 0x1933, 0x18df, 0x18ec, 0x18f9, 0x1906, 0x1910, + 0x191d, 0x1929, 0x1940, 0x194a, 0x1954, 0x195e, 0x196b, 0x1975, + 0x0001, 0x0606, 0x0001, 0x0608, 0x0001, 0x0078, 0x197f, 0x0004, + 0x0619, 0x0613, 0x0610, 0x0616, 0x0001, 0x0036, 0x0719, 0x0001, + 0x0036, 0x04f5, 0x0001, 0x0036, 0x04f5, 0x0001, 0x0036, 0x0503, + // Entry 5A7C0 - 5A7FF + 0x0005, 0x0622, 0x0000, 0x0000, 0x0000, 0x0687, 0x0002, 0x0625, + 0x0656, 0x0003, 0x0629, 0x0638, 0x0647, 0x000d, 0x0078, 0xffff, + 0x198c, 0x1999, 0x19a6, 0x19b3, 0x19c0, 0x19d0, 0x19e0, 0x19f3, + 0x1a03, 0x1a13, 0x1a1d, 0x1a27, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, + 0x4414, 0x4417, 0x441a, 0x000d, 0x0078, 0xffff, 0x198c, 0x1999, + 0x19a6, 0x19b3, 0x19c0, 0x19d0, 0x19e0, 0x19f3, 0x1a03, 0x1a13, + 0x1a1d, 0x1a27, 0x0003, 0x065a, 0x0669, 0x0678, 0x000d, 0x0078, + // Entry 5A800 - 5A83F + 0xffff, 0x198c, 0x1999, 0x19a6, 0x19b3, 0x19c0, 0x19d0, 0x19e0, + 0x19f3, 0x1a03, 0x1a13, 0x1a1d, 0x1a27, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, + 0x2424, 0x4414, 0x4417, 0x441a, 0x000d, 0x0078, 0xffff, 0x198c, + 0x1999, 0x19a6, 0x19b3, 0x19c0, 0x19d0, 0x19e0, 0x19f3, 0x1a03, + 0x1a13, 0x1a1d, 0x1a27, 0x0001, 0x0689, 0x0001, 0x068b, 0x0001, + 0x0078, 0x1a37, 0x0008, 0x0697, 0x0000, 0x0000, 0x0000, 0x06fc, + 0x0703, 0x0000, 0x9006, 0x0002, 0x069a, 0x06cb, 0x0003, 0x069e, + // Entry 5A840 - 5A87F + 0x06ad, 0x06bc, 0x000d, 0x0078, 0xffff, 0x1a41, 0x1a51, 0x1a5e, + 0x1a6a, 0x1a77, 0x1a86, 0x1a96, 0x1aa3, 0x1ab0, 0x1abd, 0x1aca, + 0x1add, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, + 0x000d, 0x0078, 0xffff, 0x1a41, 0x1a51, 0x1a5e, 0x1a6a, 0x1a77, + 0x1a86, 0x1a96, 0x1aa3, 0x1ab0, 0x1abd, 0x1aca, 0x1add, 0x0003, + 0x06cf, 0x06de, 0x06ed, 0x000d, 0x0078, 0xffff, 0x1a41, 0x1a51, + 0x1a5e, 0x1a6a, 0x1a77, 0x1a86, 0x1a96, 0x1aa3, 0x1ab0, 0x1abd, + // Entry 5A880 - 5A8BF + 0x1aca, 0x1add, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, 0x4417, + 0x441a, 0x000d, 0x0078, 0xffff, 0x1a41, 0x1a51, 0x1a5e, 0x1a6a, + 0x1a77, 0x1a86, 0x1a96, 0x1aa3, 0x1ab0, 0x1abd, 0x1aca, 0x1add, + 0x0001, 0x06fe, 0x0001, 0x0700, 0x0001, 0x0078, 0x1aed, 0x0004, + 0x0711, 0x070b, 0x0708, 0x070e, 0x0001, 0x0036, 0x0719, 0x0001, + 0x0036, 0x04f5, 0x0001, 0x0036, 0x04f5, 0x0001, 0x0036, 0x0503, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x071d, 0x080f, 0x0000, + // Entry 5A8C0 - 5A8FF + 0x0820, 0x0001, 0x071f, 0x0001, 0x0721, 0x00ec, 0x0036, 0x08e5, + 0x08ec, 0x08f3, 0x08fa, 0x3b6f, 0x0908, 0x090f, 0x3b76, 0x091d, + 0x3b7d, 0x092b, 0x3b84, 0x3b91, 0x3b9e, 0x0959, 0x0966, 0x3bab, + 0x3bb2, 0x3bb9, 0x0988, 0x098f, 0x0996, 0x099d, 0x09a4, 0x3bc0, + 0x3bc7, 0x09b9, 0x3bce, 0x09c7, 0x09ce, 0x3bd5, 0x09dc, 0x09e3, + 0x09ea, 0x09f1, 0x09f8, 0x3bdc, 0x3be3, 0x3bea, 0x0a14, 0x0a1b, + 0x3bf1, 0x0a29, 0x0a30, 0x0a37, 0x3bf8, 0x3bff, 0x0a4c, 0x0a53, + 0x3c06, 0x3c0d, 0x0a68, 0x3c14, 0x0a76, 0x3c1b, 0x0a84, 0x3c22, + // Entry 5A900 - 5A93F + 0x0a92, 0x3c29, 0x0aa0, 0x3c30, 0x0aae, 0x0ab5, 0x0abc, 0x3c37, + 0x0aca, 0x0ad1, 0x3c3e, 0x0adf, 0x3c45, 0x3c4c, 0x0af4, 0x0afb, + 0x3c53, 0x0b09, 0x0b10, 0x0b17, 0x0b1e, 0x0b25, 0x0b2c, 0x0b33, + 0x0b3a, 0x0b41, 0x0b48, 0x0b4f, 0x0b56, 0x0b5d, 0x0b64, 0x0b6b, + 0x0b72, 0x0b79, 0x0b80, 0x3c5a, 0x0b8e, 0x0b95, 0x3c61, 0x3c68, + 0x3c6f, 0x3c76, 0x0bb8, 0x3c7d, 0x0bc6, 0x0bcd, 0x0bd4, 0x0bdb, + 0x3c84, 0x3c8b, 0x0bf0, 0x0bf7, 0x0bfe, 0x0c05, 0x0c0c, 0x0c13, + 0x0c1a, 0x3c92, 0x0c28, 0x0c2f, 0x3c99, 0x0c3d, 0x3ca0, 0x0c4b, + // Entry 5A940 - 5A97F + 0x3ca7, 0x0c59, 0x0c60, 0x3cae, 0x0c6e, 0x3cb5, 0x3cbc, 0x0c83, + 0x3cc3, 0x3cca, 0x0c98, 0x0c9f, 0x0ca6, 0x0cad, 0x3cd1, 0x0cbb, + 0x0cc2, 0x0cc9, 0x0cd0, 0x3cd8, 0x0cde, 0x0ce5, 0x0cec, 0x0cf3, + 0x3cdf, 0x0d01, 0x3ce6, 0x0d0f, 0x0d16, 0x3ced, 0x0d24, 0x0d2b, + 0x3cf4, 0x3cfb, 0x0d40, 0x0d47, 0x0d4e, 0x3d02, 0x0d5c, 0x3d09, + 0x0d6a, 0x0d71, 0x3d10, 0x0d7f, 0x0d86, 0x3d17, 0x0d94, 0x3d1e, + 0x3d25, 0x3d2c, 0x0db0, 0x0db7, 0x0dbe, 0x0dc5, 0x3d33, 0x3d3a, + 0x0dda, 0x3d41, 0x3d48, 0x0def, 0x3d4f, 0x0dfd, 0x0e04, 0x3d56, + // Entry 5A980 - 5A9BF + 0x3d5d, 0x3d64, 0x0e20, 0x0e27, 0x3d6b, 0x0e35, 0x0e3c, 0x3d72, + 0x3d79, 0x0e51, 0x3d80, 0x0e5f, 0x0e66, 0x3d87, 0x0e74, 0x0e7b, + 0x3d8e, 0x3d95, 0x3d9c, 0x3da3, 0x3daa, 0x0ea5, 0x0eac, 0x3db1, + 0x3db8, 0x3dbf, 0x0ec8, 0x0ecf, 0x3dc6, 0x0edd, 0x3dcd, 0x3dd4, + 0x0ef2, 0x0ef9, 0x0f00, 0x3ddb, 0x0f0e, 0x0f15, 0x0f1c, 0x0f23, + 0x0f2a, 0x0f31, 0x0f38, 0x3de2, 0x0f46, 0x0f4d, 0x3de9, 0x0f5b, + 0x0f62, 0x0f69, 0x0f70, 0x0004, 0x081d, 0x0817, 0x0814, 0x081a, + 0x0001, 0x0036, 0x0719, 0x0001, 0x0036, 0x04f5, 0x0001, 0x0036, + // Entry 5A9C0 - 5A9FF + 0x04f5, 0x0001, 0x0036, 0x0503, 0x0004, 0x082e, 0x0828, 0x0825, + 0x082b, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0005, 0x0837, 0x0000, + 0x0000, 0x0000, 0x089c, 0x0002, 0x083a, 0x086b, 0x0003, 0x083e, + 0x084d, 0x085c, 0x000d, 0x0036, 0xffff, 0x050a, 0x050f, 0x0514, + 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, 0x0537, 0x053d, + 0x0543, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, + // Entry 5AA00 - 5AA3F + 0x000d, 0x0036, 0xffff, 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, + 0x0523, 0x0528, 0x052d, 0x0532, 0x0537, 0x053d, 0x0543, 0x0003, + 0x086f, 0x087e, 0x088d, 0x000d, 0x0036, 0xffff, 0x050a, 0x050f, + 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, 0x0537, + 0x053d, 0x0543, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, 0x4417, + 0x441a, 0x000d, 0x0036, 0xffff, 0x050a, 0x050f, 0x0514, 0x0519, + 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, 0x0537, 0x053d, 0x0543, + // Entry 5AA40 - 5AA7F + 0x0003, 0x08a5, 0x0000, 0x08a0, 0x0001, 0x08a2, 0x0001, 0x0078, + 0x1afa, 0x0001, 0x08a7, 0x0001, 0x0078, 0x1afa, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x08b3, 0x08bb, 0x0000, 0x9006, 0x0001, + 0x08b5, 0x0001, 0x08b7, 0x0002, 0x0078, 0x1b04, 0x1b0e, 0x0004, + 0x08c9, 0x08c3, 0x08c0, 0x08c6, 0x0001, 0x0078, 0x1b15, 0x0001, + 0x0036, 0x04f5, 0x0001, 0x0036, 0x04f5, 0x0001, 0x0036, 0x0503, + 0x0042, 0x090f, 0x0914, 0x0919, 0x091e, 0x0933, 0x0943, 0x0953, + 0x0968, 0x097d, 0x0992, 0x09a7, 0x09b7, 0x09c7, 0x09e0, 0x09f4, + // Entry 5AA80 - 5AABF + 0x0a08, 0x0a0d, 0x0a12, 0x0a17, 0x0a2e, 0x0a3e, 0x0a4e, 0x0a53, + 0x0a58, 0x0a5d, 0x0a62, 0x0a67, 0x0a6c, 0x0a71, 0x0a76, 0x0a7b, + 0x0a8d, 0x0a9f, 0x0ab1, 0x0ac3, 0x0ad5, 0x0ae7, 0x0af9, 0x0b0b, + 0x0b1d, 0x0b2f, 0x0b41, 0x0b53, 0x0b65, 0x0b77, 0x0b89, 0x0b9b, + 0x0bad, 0x0bbf, 0x0bd1, 0x0be3, 0x0bf5, 0x0bfa, 0x0bff, 0x0c04, + 0x0c18, 0x0c28, 0x0c38, 0x0c4c, 0x0c5c, 0x0c6c, 0x0c80, 0x0c90, + 0x0ca0, 0x0ca5, 0x0caa, 0x0001, 0x0911, 0x0001, 0x0078, 0x1b28, + 0x0001, 0x0916, 0x0001, 0x0078, 0x1b28, 0x0001, 0x091b, 0x0001, + // Entry 5AAC0 - 5AAFF + 0x0078, 0x1b28, 0x0003, 0x0922, 0x0925, 0x092a, 0x0001, 0x0036, + 0x1074, 0x0003, 0x0078, 0x1b2f, 0x1b36, 0x1b3d, 0x0002, 0x092d, + 0x0930, 0x0001, 0x0036, 0x108d, 0x0001, 0x0036, 0x1098, 0x0003, + 0x0937, 0x0000, 0x093a, 0x0001, 0x0036, 0x1074, 0x0002, 0x093d, + 0x0940, 0x0001, 0x0036, 0x108d, 0x0001, 0x0036, 0x1098, 0x0003, + 0x0947, 0x0000, 0x094a, 0x0001, 0x0036, 0x1074, 0x0002, 0x094d, + 0x0950, 0x0001, 0x0036, 0x108d, 0x0001, 0x0036, 0x1098, 0x0003, + 0x0957, 0x095a, 0x095f, 0x0001, 0x0078, 0x1b44, 0x0003, 0x0078, + // Entry 5AB00 - 5AB3F + 0x1b48, 0x1b52, 0x1b59, 0x0002, 0x0962, 0x0965, 0x0001, 0x0078, + 0x1b63, 0x0001, 0x0078, 0x1b6e, 0x0003, 0x096c, 0x096f, 0x0974, + 0x0001, 0x0078, 0x1b44, 0x0003, 0x0078, 0x1b79, 0x1b52, 0x1b80, + 0x0002, 0x0977, 0x097a, 0x0001, 0x0078, 0x1b63, 0x0001, 0x0078, + 0x1b6e, 0x0003, 0x0981, 0x0984, 0x0989, 0x0001, 0x0078, 0x1b44, + 0x0003, 0x0078, 0x1b79, 0x1b52, 0x1b80, 0x0002, 0x098c, 0x098f, + 0x0001, 0x0078, 0x1b63, 0x0001, 0x0078, 0x1b6e, 0x0003, 0x0996, + 0x0999, 0x099e, 0x0001, 0x0036, 0x054d, 0x0003, 0x0078, 0x1b87, + // Entry 5AB40 - 5AB7F + 0x1b91, 0x1b9b, 0x0002, 0x09a1, 0x09a4, 0x0001, 0x0078, 0x1ba5, + 0x0001, 0x0078, 0x1bb3, 0x0003, 0x09ab, 0x0000, 0x09ae, 0x0001, + 0x0036, 0x054d, 0x0002, 0x09b1, 0x09b4, 0x0001, 0x0078, 0x1ba5, + 0x0001, 0x0078, 0x1bb3, 0x0003, 0x09bb, 0x0000, 0x09be, 0x0001, + 0x0036, 0x054d, 0x0002, 0x09c1, 0x09c4, 0x0001, 0x0078, 0x1ba5, + 0x0001, 0x0078, 0x1bb3, 0x0004, 0x09cc, 0x09cf, 0x09d4, 0x09dd, + 0x0001, 0x0036, 0x1175, 0x0003, 0x0078, 0x1bc1, 0x1bcb, 0x1bd8, + 0x0002, 0x09d7, 0x09da, 0x0001, 0x0078, 0x1be2, 0x0001, 0x0078, + // Entry 5AB80 - 5ABBF + 0x1bf3, 0x0001, 0x0078, 0x1c04, 0x0004, 0x09e5, 0x0000, 0x09e8, + 0x09f1, 0x0001, 0x0036, 0x1175, 0x0002, 0x09eb, 0x09ee, 0x0001, + 0x0078, 0x1be2, 0x0001, 0x0078, 0x1bf3, 0x0001, 0x0078, 0x1c04, + 0x0004, 0x09f9, 0x0000, 0x09fc, 0x0a05, 0x0001, 0x0036, 0x1175, + 0x0002, 0x09ff, 0x0a02, 0x0001, 0x0078, 0x1be2, 0x0001, 0x0078, + 0x1bf3, 0x0001, 0x0078, 0x1c04, 0x0001, 0x0a0a, 0x0001, 0x0078, + 0x1c11, 0x0001, 0x0a0f, 0x0001, 0x0078, 0x1c11, 0x0001, 0x0a14, + 0x0001, 0x0078, 0x1c11, 0x0003, 0x0a1b, 0x0a1e, 0x0a25, 0x0001, + // Entry 5ABC0 - 5ABFF + 0x0036, 0x0549, 0x0005, 0x0078, 0x1c1f, 0x1c26, 0x1c2d, 0x1c18, + 0x1c34, 0x0002, 0x0a28, 0x0a2b, 0x0001, 0x0036, 0x1218, 0x0001, + 0x0036, 0x1223, 0x0003, 0x0a32, 0x0000, 0x0a35, 0x0001, 0x0036, + 0x0549, 0x0002, 0x0a38, 0x0a3b, 0x0001, 0x0036, 0x1218, 0x0001, + 0x0036, 0x1223, 0x0003, 0x0a42, 0x0000, 0x0a45, 0x0001, 0x0036, + 0x0549, 0x0002, 0x0a48, 0x0a4b, 0x0001, 0x0036, 0x1218, 0x0001, + 0x0036, 0x1223, 0x0001, 0x0a50, 0x0001, 0x0078, 0x1c3b, 0x0001, + 0x0a55, 0x0001, 0x0078, 0x1c3b, 0x0001, 0x0a5a, 0x0001, 0x0078, + // Entry 5AC00 - 5AC3F + 0x1c3b, 0x0001, 0x0a5f, 0x0001, 0x0078, 0x1c42, 0x0001, 0x0a64, + 0x0001, 0x0078, 0x1c42, 0x0001, 0x0a69, 0x0001, 0x0078, 0x1c42, + 0x0001, 0x0a6e, 0x0001, 0x0078, 0x1c49, 0x0001, 0x0a73, 0x0001, + 0x0078, 0x1c49, 0x0001, 0x0a78, 0x0001, 0x0078, 0x1c49, 0x0003, + 0x0000, 0x0a7f, 0x0a84, 0x0003, 0x0078, 0x1c53, 0x1c60, 0x1c70, + 0x0002, 0x0a87, 0x0a8a, 0x0001, 0x0078, 0x1c7d, 0x0001, 0x0078, + 0x1c91, 0x0003, 0x0000, 0x0a91, 0x0a96, 0x0003, 0x0078, 0x1c53, + 0x1c60, 0x1c70, 0x0002, 0x0a99, 0x0a9c, 0x0001, 0x0078, 0x1c7d, + // Entry 5AC40 - 5AC7F + 0x0001, 0x0078, 0x1c91, 0x0003, 0x0000, 0x0aa3, 0x0aa8, 0x0003, + 0x0078, 0x1c53, 0x1c60, 0x1c70, 0x0002, 0x0aab, 0x0aae, 0x0001, + 0x0078, 0x1c7d, 0x0001, 0x0078, 0x1c91, 0x0003, 0x0000, 0x0ab5, + 0x0aba, 0x0003, 0x0078, 0x1ca5, 0x1cb2, 0x1cc2, 0x0002, 0x0abd, + 0x0ac0, 0x0001, 0x0078, 0x1ccf, 0x0001, 0x0078, 0x1ce3, 0x0003, + 0x0000, 0x0ac7, 0x0acc, 0x0003, 0x0078, 0x1ca5, 0x1cb2, 0x1cc2, + 0x0002, 0x0acf, 0x0ad2, 0x0001, 0x0078, 0x1ccf, 0x0001, 0x0078, + 0x1ce3, 0x0003, 0x0000, 0x0ad9, 0x0ade, 0x0003, 0x0078, 0x1ca5, + // Entry 5AC80 - 5ACBF + 0x1cb2, 0x1cc2, 0x0002, 0x0ae1, 0x0ae4, 0x0001, 0x0078, 0x1ccf, + 0x0001, 0x0078, 0x1ce3, 0x0003, 0x0000, 0x0aeb, 0x0af0, 0x0003, + 0x0078, 0x1cf7, 0x1d04, 0x1d14, 0x0002, 0x0af3, 0x0af6, 0x0001, + 0x0078, 0x1d21, 0x0001, 0x0078, 0x1d35, 0x0003, 0x0000, 0x0afd, + 0x0b02, 0x0003, 0x0078, 0x1cf7, 0x1d04, 0x1d14, 0x0002, 0x0b05, + 0x0b08, 0x0001, 0x0078, 0x1d21, 0x0001, 0x0078, 0x1d35, 0x0003, + 0x0000, 0x0b0f, 0x0b14, 0x0003, 0x0078, 0x1cf7, 0x1d04, 0x1d14, + 0x0002, 0x0b17, 0x0b1a, 0x0001, 0x0078, 0x1d21, 0x0001, 0x0078, + // Entry 5ACC0 - 5ACFF + 0x1d35, 0x0003, 0x0000, 0x0b21, 0x0b26, 0x0003, 0x0078, 0x1d49, + 0x1d56, 0x1d66, 0x0002, 0x0b29, 0x0b2c, 0x0001, 0x0078, 0x1d73, + 0x0001, 0x0078, 0x1d87, 0x0003, 0x0000, 0x0b33, 0x0b38, 0x0003, + 0x0078, 0x1d49, 0x1d56, 0x1d66, 0x0002, 0x0b3b, 0x0b3e, 0x0001, + 0x0078, 0x1d73, 0x0001, 0x0078, 0x1d87, 0x0003, 0x0000, 0x0b45, + 0x0b4a, 0x0003, 0x0078, 0x1d49, 0x1d56, 0x1d66, 0x0002, 0x0b4d, + 0x0b50, 0x0001, 0x0078, 0x1d73, 0x0001, 0x0078, 0x1d87, 0x0003, + 0x0000, 0x0b57, 0x0b5c, 0x0003, 0x0078, 0x1d9b, 0x1da8, 0x1db8, + // Entry 5AD00 - 5AD3F + 0x0002, 0x0b5f, 0x0b62, 0x0001, 0x0078, 0x1dc5, 0x0001, 0x0078, + 0x1dd9, 0x0003, 0x0000, 0x0b69, 0x0b6e, 0x0003, 0x0078, 0x1d9b, + 0x1da8, 0x1db8, 0x0002, 0x0b71, 0x0b74, 0x0001, 0x0078, 0x1dc5, + 0x0001, 0x0078, 0x1dd9, 0x0003, 0x0000, 0x0b7b, 0x0b80, 0x0003, + 0x0078, 0x1d9b, 0x1da8, 0x1db8, 0x0002, 0x0b83, 0x0b86, 0x0001, + 0x0078, 0x1dc5, 0x0001, 0x0078, 0x1dd9, 0x0003, 0x0000, 0x0b8d, + 0x0b92, 0x0003, 0x0078, 0x1ded, 0x1dfa, 0x1e0a, 0x0002, 0x0b95, + 0x0b98, 0x0001, 0x0078, 0x1e17, 0x0001, 0x0078, 0x1e2b, 0x0003, + // Entry 5AD40 - 5AD7F + 0x0000, 0x0b9f, 0x0ba4, 0x0003, 0x0078, 0x1ded, 0x1dfa, 0x1e0a, + 0x0002, 0x0ba7, 0x0baa, 0x0001, 0x0078, 0x1e17, 0x0001, 0x0078, + 0x1e2b, 0x0003, 0x0000, 0x0bb1, 0x0bb6, 0x0003, 0x0078, 0x1ded, + 0x1dfa, 0x1e0a, 0x0002, 0x0bb9, 0x0bbc, 0x0001, 0x0078, 0x1e17, + 0x0001, 0x0078, 0x1e2b, 0x0003, 0x0000, 0x0bc3, 0x0bc8, 0x0003, + 0x0078, 0x1e3f, 0x1e4c, 0x1e5c, 0x0002, 0x0bcb, 0x0bce, 0x0001, + 0x0078, 0x1e69, 0x0001, 0x0078, 0x1e7d, 0x0003, 0x0000, 0x0bd5, + 0x0bda, 0x0003, 0x0078, 0x1e3f, 0x1e4c, 0x1e5c, 0x0002, 0x0bdd, + // Entry 5AD80 - 5ADBF + 0x0be0, 0x0001, 0x0078, 0x1e69, 0x0001, 0x0078, 0x1e7d, 0x0003, + 0x0000, 0x0be7, 0x0bec, 0x0003, 0x0078, 0x1e3f, 0x1e4c, 0x1e5c, + 0x0002, 0x0bef, 0x0bf2, 0x0001, 0x0078, 0x1e69, 0x0001, 0x0078, + 0x1e7d, 0x0001, 0x0bf7, 0x0001, 0x0078, 0x1e91, 0x0001, 0x0bfc, + 0x0001, 0x0078, 0x1e91, 0x0001, 0x0c01, 0x0001, 0x0078, 0x1e91, + 0x0003, 0x0c08, 0x0c0b, 0x0c0f, 0x0001, 0x0078, 0x1e9f, 0x0002, + 0x0078, 0xffff, 0x1ea6, 0x0002, 0x0c12, 0x0c15, 0x0001, 0x0078, + 0x1eb3, 0x0001, 0x0078, 0x1ec1, 0x0003, 0x0c1c, 0x0000, 0x0c1f, + // Entry 5ADC0 - 5ADFF + 0x0001, 0x0078, 0x1e9f, 0x0002, 0x0c22, 0x0c25, 0x0001, 0x0078, + 0x1eb3, 0x0001, 0x0078, 0x1ec1, 0x0003, 0x0c2c, 0x0000, 0x0c2f, + 0x0001, 0x0078, 0x1e9f, 0x0002, 0x0c32, 0x0c35, 0x0001, 0x0078, + 0x1eb3, 0x0001, 0x0078, 0x1ec1, 0x0003, 0x0c3c, 0x0c3f, 0x0c43, + 0x0001, 0x0078, 0x1ecf, 0x0002, 0x0078, 0xffff, 0x1ed6, 0x0002, + 0x0c46, 0x0c49, 0x0001, 0x0078, 0x1ee0, 0x0001, 0x0078, 0x1eee, + 0x0003, 0x0c50, 0x0000, 0x0c53, 0x0001, 0x0078, 0x1ecf, 0x0002, + 0x0c56, 0x0c59, 0x0001, 0x0078, 0x1ee0, 0x0001, 0x0078, 0x1eee, + // Entry 5AE00 - 5AE3F + 0x0003, 0x0c60, 0x0000, 0x0c63, 0x0001, 0x0078, 0x1ecf, 0x0002, + 0x0c66, 0x0c69, 0x0001, 0x0078, 0x1ee0, 0x0001, 0x0078, 0x1eee, + 0x0003, 0x0c70, 0x0c73, 0x0c77, 0x0001, 0x0036, 0x1944, 0x0002, + 0x0078, 0xffff, 0x1efc, 0x0002, 0x0c7a, 0x0c7d, 0x0001, 0x0036, + 0x194c, 0x0001, 0x0036, 0x1957, 0x0003, 0x0c84, 0x0000, 0x0c87, + 0x0001, 0x0036, 0x1944, 0x0002, 0x0c8a, 0x0c8d, 0x0001, 0x0036, + 0x194c, 0x0001, 0x0036, 0x1957, 0x0003, 0x0c94, 0x0000, 0x0c97, + 0x0001, 0x0036, 0x1944, 0x0002, 0x0c9a, 0x0c9d, 0x0001, 0x0036, + // Entry 5AE40 - 5AE7F + 0x194c, 0x0001, 0x0036, 0x1957, 0x0001, 0x0ca2, 0x0001, 0x0078, + 0x1f03, 0x0001, 0x0ca7, 0x0001, 0x0078, 0x1f03, 0x0001, 0x0cac, + 0x0001, 0x0078, 0x1f03, 0x0004, 0x0cb4, 0x0cb9, 0x0cbe, 0x0ccd, + 0x0003, 0x0000, 0x1dc7, 0x4333, 0x432f, 0x0003, 0x0036, 0x1989, + 0x3df0, 0x3e00, 0x0002, 0x0000, 0x0cc1, 0x0003, 0x0000, 0x0cc8, + 0x0cc5, 0x0001, 0x0078, 0x1f0a, 0x0003, 0x0078, 0xffff, 0x1f1d, + 0x1f30, 0x0002, 0x0000, 0x0cd0, 0x0003, 0x0cd4, 0x0e14, 0x0d74, + 0x009e, 0x0078, 0xffff, 0xffff, 0xffff, 0xffff, 0x1fb6, 0x1fe9, + // Entry 5AE80 - 5AEBF + 0x2073, 0x20af, 0x20e2, 0x2115, 0x2148, 0x2184, 0x21c9, 0x2286, + 0x22c2, 0x22fe, 0x234c, 0x2391, 0x23cd, 0x2412, 0x2460, 0x24a5, + 0x24ea, 0x252f, 0x257d, 0xffff, 0xffff, 0x25d9, 0xffff, 0x262b, + 0xffff, 0x2687, 0x26cc, 0x26ff, 0x2732, 0xffff, 0xffff, 0x2794, + 0x27d9, 0x2821, 0xffff, 0xffff, 0xffff, 0x288a, 0xffff, 0x28df, + 0x2912, 0xffff, 0x2958, 0x298b, 0x29d9, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2a6d, 0xffff, 0xffff, 0x2adb, 0x2b29, 0xffff, 0xffff, + 0x2bb6, 0x2c10, 0x2c43, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 5AEC0 - 5AEFF + 0xffff, 0x2cee, 0x2d21, 0x2d6f, 0x2dab, 0x2dde, 0xffff, 0xffff, + 0x2e7c, 0xffff, 0x2ebf, 0xffff, 0xffff, 0x2f5b, 0xffff, 0x2fe3, + 0xffff, 0xffff, 0xffff, 0xffff, 0x306e, 0xffff, 0x30c0, 0x3117, + 0x316e, 0x31b3, 0xffff, 0xffff, 0xffff, 0x3219, 0x3276, 0x32b2, + 0xffff, 0xffff, 0x3311, 0x33a8, 0x33f6, 0x343b, 0xffff, 0xffff, + 0x34a9, 0x34e5, 0x3518, 0xffff, 0x3567, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x3686, 0x36c2, 0x36fe, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x37bc, 0xffff, 0xffff, 0x3815, + // Entry 5AF00 - 5AF3F + 0xffff, 0x3858, 0xffff, 0x38a4, 0x38e0, 0x3925, 0xffff, 0x3974, + 0x39b0, 0xffff, 0xffff, 0xffff, 0x3a43, 0x3a88, 0xffff, 0xffff, + 0x1f46, 0x202e, 0x2205, 0x2241, 0xffff, 0xffff, 0x2fa0, 0x360f, + 0x009e, 0x0078, 0x1f79, 0x1f89, 0x1f96, 0x1fa3, 0x1fc3, 0x1ffc, + 0x2083, 0x20bc, 0x20ef, 0x2122, 0x2158, 0x2197, 0x21d9, 0x2296, + 0x22d2, 0x2314, 0x235f, 0x23a1, 0x23e0, 0x2428, 0x2473, 0x24b8, + 0x24fd, 0x2545, 0x258d, 0x25b9, 0x25c6, 0x25ec, 0x261e, 0x263b, + 0x2677, 0x269a, 0x26d9, 0x270c, 0x2742, 0x276e, 0x277e, 0x27a7, + // Entry 5AF40 - 5AF7F + 0x27ec, 0x282e, 0x2854, 0x2864, 0x287a, 0x289d, 0x28cf, 0x28ec, + 0x291f, 0x2945, 0x2965, 0x29a1, 0x29e6, 0x2a0c, 0x2a22, 0x2a3e, + 0x2a57, 0x2a7d, 0x2aa9, 0x2ac2, 0x2af1, 0x2b3f, 0x2b8a, 0x2ba6, + 0x2bd0, 0x2c1d, 0x2c53, 0x2c7f, 0x2c92, 0x2ca2, 0x2cb5, 0x2cc8, + 0x2cdb, 0x2cfb, 0x2d37, 0x2d7f, 0x2db8, 0x2e00, 0x2e56, 0x2e69, + 0x2e89, 0x2eaf, 0x2ede, 0x2f28, 0x2f48, 0x2f6e, 0x2fd3, 0x2ff3, + 0x301f, 0x3032, 0x3045, 0x3058, 0x3081, 0x30b3, 0x30d9, 0x3130, + 0x3181, 0x31c3, 0x31ef, 0x31fc, 0x3209, 0x3232, 0x3286, 0x32c2, + // Entry 5AF80 - 5AFBF + 0x32ee, 0x32fe, 0x3336, 0x33be, 0x3409, 0x344e, 0x3480, 0x348d, + 0x34b9, 0x34f2, 0x3528, 0x3554, 0x358c, 0x35e2, 0x35f2, 0x3602, + 0x3666, 0x3676, 0x3696, 0x36d2, 0x370e, 0x373a, 0x374a, 0x3760, + 0x3776, 0x3789, 0x3799, 0x37ac, 0x37c9, 0x37ef, 0x37ff, 0x3822, + 0x3848, 0x3868, 0x3894, 0x38b4, 0x38f3, 0x3935, 0x3961, 0x3984, + 0x39c6, 0x39fe, 0x3a11, 0x3a21, 0x3a56, 0x3a9e, 0x2b77, 0x338c, + 0x1f53, 0x2041, 0x2215, 0x2254, 0x2667, 0x2f3b, 0x2fad, 0x3628, + 0x009e, 0x0078, 0xffff, 0xffff, 0xffff, 0xffff, 0x1fd6, 0x2015, + // Entry 5AFC0 - 5AFFF + 0x2099, 0x20cf, 0x2102, 0x2135, 0x216e, 0x21b0, 0x21ef, 0x22ac, + 0x22e8, 0x2330, 0x2378, 0x23b7, 0x23f9, 0x2444, 0x248c, 0x24d1, + 0x2516, 0x2561, 0x25a3, 0xffff, 0xffff, 0x2605, 0xffff, 0x2651, + 0xffff, 0x26b3, 0x26ec, 0x271f, 0x2758, 0xffff, 0xffff, 0x27c0, + 0x2805, 0x2841, 0xffff, 0xffff, 0xffff, 0x28b6, 0xffff, 0x28ff, + 0x2932, 0xffff, 0x2978, 0x29bd, 0x29f9, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2a93, 0xffff, 0xffff, 0x2b0d, 0x2b5b, 0xffff, 0xffff, + 0x2bf0, 0x2c30, 0x2c69, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 5B000 - 5B03F + 0xffff, 0x2d0e, 0x2d53, 0x2d95, 0x2dcb, 0x2e28, 0xffff, 0xffff, + 0x2e9c, 0xffff, 0x2f03, 0xffff, 0xffff, 0x2f87, 0xffff, 0x3009, + 0xffff, 0xffff, 0xffff, 0xffff, 0x309a, 0xffff, 0x30f8, 0x314f, + 0x319a, 0x31d9, 0xffff, 0xffff, 0xffff, 0x3251, 0x329c, 0x32d8, + 0xffff, 0xffff, 0x3361, 0x33da, 0x3422, 0x3467, 0xffff, 0xffff, + 0x34cf, 0x3505, 0x353e, 0xffff, 0x35b7, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x36ac, 0x36e8, 0x3724, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x37dc, 0xffff, 0xffff, 0x3835, + // Entry 5B040 - 5B07F + 0xffff, 0x387e, 0xffff, 0x38ca, 0x390c, 0x394b, 0xffff, 0x399a, + 0x39e2, 0xffff, 0xffff, 0xffff, 0x3a6f, 0x3aba, 0xffff, 0xffff, + 0x1f66, 0x205a, 0x222b, 0x226d, 0xffff, 0xffff, 0x2fc0, 0x3647, + 0x0003, 0x0004, 0x08cc, 0x0caf, 0x0012, 0x0017, 0x0038, 0x015b, + 0x01c8, 0x02b9, 0x0000, 0x0326, 0x0351, 0x0592, 0x061c, 0x068e, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0714, 0x0831, 0x08aa, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0027, 0x0000, 0x9006, + 0x0001, 0x0022, 0x0001, 0x0024, 0x0001, 0x0079, 0x0000, 0x0004, + // Entry 5B080 - 5B0BF + 0x0035, 0x002f, 0x002c, 0x0032, 0x0001, 0x0036, 0x0719, 0x0001, + 0x0036, 0x04f5, 0x0001, 0x0036, 0x04f5, 0x0001, 0x0079, 0x0007, + 0x000a, 0x0043, 0x0000, 0x0000, 0x0000, 0x0000, 0x014a, 0x0000, + 0x0000, 0x00a8, 0x00bb, 0x0002, 0x0046, 0x0077, 0x0003, 0x004a, + 0x0059, 0x0068, 0x000d, 0x0036, 0xffff, 0x0036, 0x003d, 0x0044, + 0x004b, 0x0052, 0x0059, 0x0060, 0x0067, 0x006e, 0x0075, 0x3b22, + 0x3e10, 0x000d, 0x0036, 0xffff, 0x0090, 0x0094, 0x0098, 0x009c, + 0x00a0, 0x00a4, 0x00a8, 0x00ac, 0x00b0, 0x00b4, 0x3b30, 0x3e17, + // Entry 5B0C0 - 5B0FF + 0x000d, 0x0036, 0xffff, 0x0036, 0x003d, 0x0044, 0x004b, 0x0052, + 0x0059, 0x0060, 0x0067, 0x006e, 0x0075, 0x3b22, 0x3e10, 0x0003, + 0x007b, 0x008a, 0x0099, 0x000d, 0x0036, 0xffff, 0x0036, 0x003d, + 0x0044, 0x004b, 0x0052, 0x0059, 0x0060, 0x0067, 0x006e, 0x0075, + 0x3b22, 0x3e10, 0x000d, 0x0036, 0xffff, 0x0090, 0x0094, 0x0098, + 0x009c, 0x00a0, 0x00a4, 0x00a8, 0x00ac, 0x00b0, 0x00b4, 0x3b30, + 0x3e17, 0x000d, 0x0036, 0xffff, 0x0036, 0x003d, 0x0044, 0x004b, + 0x0052, 0x0059, 0x0060, 0x0067, 0x006e, 0x0075, 0x3b22, 0x3e10, + // Entry 5B100 - 5B13F + 0x0003, 0x00ac, 0x00b7, 0x00b1, 0x0003, 0x0079, 0xffff, 0xffff, + 0x000e, 0x0004, 0x0079, 0xffff, 0xffff, 0xffff, 0x000e, 0x0002, + 0x0079, 0xffff, 0x000e, 0x0006, 0x00c2, 0x0000, 0x0000, 0x00d5, + 0x00f4, 0x0137, 0x0001, 0x00c4, 0x0001, 0x00c6, 0x000d, 0x0036, + 0xffff, 0x00cd, 0x00d1, 0x00d5, 0x00d9, 0x00dd, 0x00e1, 0x00e5, + 0x00e9, 0x00ed, 0x00f1, 0x00f5, 0x00f9, 0x0001, 0x00d7, 0x0001, + 0x00d9, 0x0019, 0x0036, 0xffff, 0x00fd, 0x0104, 0x3e1b, 0x0112, + 0x0119, 0x3e22, 0x0127, 0x3e29, 0x3e30, 0x013c, 0x0143, 0x014a, + // Entry 5B140 - 5B17F + 0x0151, 0x3e37, 0x015f, 0x0166, 0x016d, 0x0174, 0x017b, 0x0182, + 0x0189, 0x0190, 0x0197, 0x019e, 0x0001, 0x00f6, 0x0001, 0x00f8, + 0x003d, 0x0036, 0xffff, 0x01a5, 0x01ac, 0x01b3, 0x01ba, 0x01c1, + 0x01c8, 0x01cf, 0x01d6, 0x01dd, 0x01e4, 0x01eb, 0x01f2, 0x01f9, + 0x0200, 0x0207, 0x020e, 0x0215, 0x021c, 0x0223, 0x022a, 0x0231, + 0x0238, 0x023f, 0x0246, 0x024d, 0x0254, 0x025b, 0x0262, 0x0269, + 0x0270, 0x0277, 0x027e, 0x0285, 0x028c, 0x0293, 0x029a, 0x02a1, + 0x02a8, 0x02af, 0x02b6, 0x02bd, 0x02c4, 0x02cb, 0x02d2, 0x02d9, + // Entry 5B180 - 5B1BF + 0x02e0, 0x02e7, 0x02ee, 0x02f5, 0x02fc, 0x0303, 0x030a, 0x0311, + 0x0318, 0x031f, 0x0326, 0x032d, 0x0334, 0x033b, 0x0342, 0x0001, + 0x0139, 0x0001, 0x013b, 0x000d, 0x0036, 0xffff, 0x0349, 0x034d, + 0x0351, 0x3b4d, 0x3e3e, 0x035d, 0x3e42, 0x0365, 0x3b55, 0x3e46, + 0x3b5d, 0x0375, 0x0004, 0x0158, 0x0152, 0x014f, 0x0155, 0x0001, + 0x0079, 0x0015, 0x0001, 0x0079, 0x0023, 0x0001, 0x0078, 0x1793, + 0x0001, 0x0078, 0x179c, 0x0001, 0x015d, 0x0002, 0x0160, 0x0194, + 0x0003, 0x0164, 0x0174, 0x0184, 0x000e, 0x0036, 0xffff, 0x050a, + // Entry 5B1C0 - 5B1FF + 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, + 0x0537, 0x053d, 0x0543, 0x3b65, 0x000e, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, + 0x4414, 0x4417, 0x441a, 0x441d, 0x000e, 0x0036, 0xffff, 0x050a, + 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, + 0x0537, 0x053d, 0x0543, 0x3b65, 0x0003, 0x0198, 0x01a8, 0x01b8, + 0x000e, 0x0036, 0xffff, 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, + 0x0523, 0x0528, 0x052d, 0x0532, 0x0537, 0x053d, 0x0543, 0x3b65, + // Entry 5B200 - 5B23F + 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, 0x441d, + 0x000e, 0x0036, 0xffff, 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, + 0x0523, 0x0528, 0x052d, 0x0532, 0x0537, 0x053d, 0x0543, 0x3b65, + 0x000a, 0x01d3, 0x0000, 0x0000, 0x0000, 0x0000, 0x02a8, 0x0000, + 0x0000, 0x0000, 0x0238, 0x0002, 0x01d6, 0x0207, 0x0003, 0x01da, + 0x01e9, 0x01f8, 0x000d, 0x0036, 0xffff, 0x0036, 0x003d, 0x0044, + 0x004b, 0x0052, 0x0059, 0x0060, 0x0067, 0x006e, 0x0075, 0x007c, + // Entry 5B240 - 5B27F + 0x0086, 0x000d, 0x0036, 0xffff, 0x0090, 0x0094, 0x0098, 0x009c, + 0x00a0, 0x00a4, 0x00a8, 0x00ac, 0x00b0, 0x00b4, 0x00b8, 0x00bf, + 0x000d, 0x0036, 0xffff, 0x0036, 0x003d, 0x0044, 0x004b, 0x0052, + 0x0059, 0x0060, 0x0067, 0x006e, 0x0075, 0x007c, 0x0086, 0x0003, + 0x020b, 0x021a, 0x0229, 0x000d, 0x0036, 0xffff, 0x0036, 0x003d, + 0x0044, 0x004b, 0x0052, 0x0059, 0x0060, 0x0067, 0x006e, 0x0075, + 0x007c, 0x0086, 0x000d, 0x0036, 0xffff, 0x0090, 0x0094, 0x0098, + 0x009c, 0x00a0, 0x00a4, 0x00a8, 0x00ac, 0x00b0, 0x00b4, 0x00b8, + // Entry 5B280 - 5B2BF + 0x00bf, 0x000d, 0x0036, 0xffff, 0x0036, 0x003d, 0x0044, 0x004b, + 0x0052, 0x0059, 0x0060, 0x0067, 0x006e, 0x0075, 0x007c, 0x0086, + 0x0006, 0x023f, 0x0000, 0x0000, 0x0000, 0x0252, 0x0295, 0x0001, + 0x0241, 0x0001, 0x0243, 0x000d, 0x0036, 0xffff, 0x00cd, 0x00d1, + 0x00d5, 0x00d9, 0x00dd, 0x00e1, 0x00e5, 0x00e9, 0x00ed, 0x00f1, + 0x00f5, 0x00f9, 0x0001, 0x0254, 0x0001, 0x0256, 0x003d, 0x0036, + 0xffff, 0x01a5, 0x01ac, 0x01b3, 0x01ba, 0x01c1, 0x01c8, 0x01cf, + 0x01d6, 0x01dd, 0x01e4, 0x01eb, 0x01f2, 0x01f9, 0x0200, 0x0207, + // Entry 5B2C0 - 5B2FF + 0x020e, 0x0215, 0x021c, 0x0223, 0x022a, 0x0231, 0x0238, 0x023f, + 0x0246, 0x024d, 0x0254, 0x025b, 0x0262, 0x0269, 0x0270, 0x0277, + 0x027e, 0x0285, 0x028c, 0x0293, 0x029a, 0x02a1, 0x02a8, 0x02af, + 0x02b6, 0x02bd, 0x02c4, 0x02cb, 0x02d2, 0x02d9, 0x02e0, 0x02e7, + 0x02ee, 0x02f5, 0x02fc, 0x0303, 0x030a, 0x0311, 0x0318, 0x031f, + 0x0326, 0x032d, 0x0334, 0x033b, 0x0342, 0x0001, 0x0297, 0x0001, + 0x0299, 0x000d, 0x0036, 0xffff, 0x0349, 0x034d, 0x0351, 0x3b4d, + 0x3e3e, 0x035d, 0x3e42, 0x0365, 0x3b55, 0x3e46, 0x3b5d, 0x0375, + // Entry 5B300 - 5B33F + 0x0004, 0x02b6, 0x02b0, 0x02ad, 0x02b3, 0x0001, 0x0036, 0x0379, + 0x0001, 0x0036, 0x0389, 0x0001, 0x0036, 0x0389, 0x0001, 0x0078, + 0x17a2, 0x0001, 0x02bb, 0x0002, 0x02be, 0x02f2, 0x0003, 0x02c2, + 0x02d2, 0x02e2, 0x000e, 0x0036, 0xffff, 0x050a, 0x050f, 0x0514, + 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, 0x0537, 0x053d, + 0x0543, 0x3b65, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, 0x4417, + 0x441a, 0x441d, 0x000e, 0x0036, 0xffff, 0x050a, 0x050f, 0x0514, + // Entry 5B340 - 5B37F + 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, 0x0537, 0x053d, + 0x0543, 0x3b65, 0x0003, 0x02f6, 0x0306, 0x0316, 0x000e, 0x0036, + 0xffff, 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, + 0x052d, 0x0532, 0x0537, 0x053d, 0x0543, 0x3b65, 0x000e, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, + 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, 0x441d, 0x000e, 0x0036, + 0xffff, 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, + 0x052d, 0x0532, 0x0537, 0x053d, 0x0543, 0x3b65, 0x0008, 0x0000, + // Entry 5B380 - 5B3BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x032f, 0x0000, 0x0340, 0x0004, + 0x033d, 0x0337, 0x0334, 0x033a, 0x0001, 0x0079, 0x002d, 0x0001, + 0x0079, 0x0040, 0x0001, 0x0079, 0x0040, 0x0001, 0x0036, 0x0503, + 0x0004, 0x034e, 0x0348, 0x0345, 0x034b, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0008, 0x035a, 0x03bf, 0x0416, 0x044b, 0x053a, 0x055f, + 0x0570, 0x0581, 0x0002, 0x035d, 0x038e, 0x0003, 0x0361, 0x0370, + 0x037f, 0x000d, 0x0036, 0xffff, 0x050a, 0x050f, 0x0514, 0x0519, + // Entry 5B3C0 - 5B3FF + 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, 0x0537, 0x053d, 0x0543, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, 0x000d, + 0x0079, 0xffff, 0x004f, 0x0056, 0x005d, 0x0064, 0x006b, 0x0072, + 0x0079, 0x0080, 0x0087, 0x008e, 0x0095, 0x009f, 0x0003, 0x0392, + 0x03a1, 0x03b0, 0x000d, 0x0036, 0xffff, 0x050a, 0x050f, 0x0514, + 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, 0x0537, 0x053d, + 0x0543, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + // Entry 5B400 - 5B43F + 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, + 0x000d, 0x0079, 0xffff, 0x004f, 0x0056, 0x005d, 0x0064, 0x006b, + 0x0072, 0x0079, 0x0080, 0x0087, 0x008e, 0x0095, 0x009f, 0x0002, + 0x03c2, 0x03ec, 0x0005, 0x03c8, 0x03d1, 0x03e3, 0x0000, 0x03da, + 0x0007, 0x0079, 0x00a9, 0x00b0, 0x00b7, 0x00be, 0x00c5, 0x00cc, + 0x00d3, 0x0007, 0x0036, 0x0549, 0x3b6b, 0x0094, 0x0098, 0x009c, + 0x00a0, 0x00a4, 0x0007, 0x0079, 0x00a9, 0x00b0, 0x00b7, 0x00be, + 0x00c5, 0x00cc, 0x00d3, 0x0007, 0x0078, 0x17da, 0x17e4, 0x17ee, + // Entry 5B440 - 5B47F + 0x17f8, 0x1802, 0x180c, 0x1816, 0x0005, 0x03f2, 0x03fb, 0x040d, + 0x0000, 0x0404, 0x0007, 0x0079, 0x00a9, 0x00b0, 0x00b7, 0x00be, + 0x00c5, 0x00cc, 0x00d3, 0x0007, 0x0036, 0x0549, 0x3b6b, 0x0094, + 0x0098, 0x009c, 0x00a0, 0x00a4, 0x0007, 0x0079, 0x00a9, 0x00b0, + 0x00b7, 0x00be, 0x00c5, 0x00cc, 0x00d3, 0x0007, 0x0078, 0x17da, + 0x17e4, 0x17ee, 0x17f8, 0x1802, 0x180c, 0x1816, 0x0002, 0x0419, + 0x0432, 0x0003, 0x041d, 0x0424, 0x042b, 0x0005, 0x0078, 0xffff, + 0x1820, 0x1828, 0x1830, 0x1838, 0x0005, 0x0000, 0xffff, 0x0033, + // Entry 5B480 - 5B4BF + 0x0035, 0x0037, 0x23b3, 0x0005, 0x0078, 0xffff, 0x1820, 0x1828, + 0x1830, 0x1838, 0x0003, 0x0436, 0x043d, 0x0444, 0x0005, 0x0078, + 0xffff, 0x1820, 0x1828, 0x1830, 0x1838, 0x0005, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0078, 0xffff, 0x1820, + 0x1828, 0x1830, 0x1838, 0x0002, 0x044e, 0x04c4, 0x0003, 0x0452, + 0x0478, 0x049e, 0x000a, 0x0460, 0x0463, 0x045d, 0x0466, 0x046c, + 0x0472, 0x0475, 0x0000, 0x0469, 0x046f, 0x0001, 0x0078, 0x1840, + 0x0001, 0x0078, 0x1847, 0x0001, 0x0078, 0x184e, 0x0001, 0x0078, + // Entry 5B4C0 - 5B4FF + 0x1855, 0x0001, 0x0078, 0x185c, 0x0001, 0x0078, 0x1863, 0x0001, + 0x0079, 0x00da, 0x0001, 0x0078, 0x1871, 0x0001, 0x0078, 0x1878, + 0x000a, 0x0486, 0x0489, 0x0483, 0x048c, 0x0492, 0x0498, 0x049b, + 0x0000, 0x048f, 0x0495, 0x0001, 0x0078, 0x1840, 0x0001, 0x0078, + 0x1847, 0x0001, 0x0078, 0x184e, 0x0001, 0x0078, 0x1855, 0x0001, + 0x0078, 0x185c, 0x0001, 0x0078, 0x1863, 0x0001, 0x0079, 0x00da, + 0x0001, 0x0078, 0x1871, 0x0001, 0x0078, 0x1878, 0x000a, 0x04ac, + 0x04af, 0x04a9, 0x04b2, 0x04b8, 0x04be, 0x04c1, 0x0000, 0x04b5, + // Entry 5B500 - 5B53F + 0x04bb, 0x0001, 0x0078, 0x1840, 0x0001, 0x0078, 0x1847, 0x0001, + 0x0078, 0x184e, 0x0001, 0x0078, 0x1855, 0x0001, 0x0078, 0x185c, + 0x0001, 0x0078, 0x1863, 0x0001, 0x0079, 0x00da, 0x0001, 0x0078, + 0x1871, 0x0001, 0x0078, 0x1878, 0x0003, 0x04c8, 0x04ee, 0x0514, + 0x000a, 0x04d6, 0x04d9, 0x04d3, 0x04dc, 0x04e2, 0x04e8, 0x04eb, + 0x0000, 0x04df, 0x04e5, 0x0001, 0x0078, 0x1840, 0x0001, 0x0078, + 0x1847, 0x0001, 0x0078, 0x184e, 0x0001, 0x0078, 0x1855, 0x0001, + 0x0078, 0x185c, 0x0001, 0x0078, 0x1863, 0x0001, 0x0079, 0x00da, + // Entry 5B540 - 5B57F + 0x0001, 0x0078, 0x1871, 0x0001, 0x0078, 0x1878, 0x000a, 0x04fc, + 0x04ff, 0x04f9, 0x0502, 0x0508, 0x050e, 0x0511, 0x0000, 0x0505, + 0x050b, 0x0001, 0x0078, 0x1840, 0x0001, 0x0078, 0x1847, 0x0001, + 0x0078, 0x184e, 0x0001, 0x0078, 0x1855, 0x0001, 0x0078, 0x185c, + 0x0001, 0x0078, 0x1863, 0x0001, 0x0079, 0x00da, 0x0001, 0x0078, + 0x1871, 0x0001, 0x0078, 0x1878, 0x000a, 0x0522, 0x0525, 0x051f, + 0x0528, 0x052e, 0x0534, 0x0537, 0x0000, 0x052b, 0x0531, 0x0001, + 0x0078, 0x1840, 0x0001, 0x0078, 0x1847, 0x0001, 0x0078, 0x184e, + // Entry 5B580 - 5B5BF + 0x0001, 0x0078, 0x1855, 0x0001, 0x0078, 0x185c, 0x0001, 0x0078, + 0x1863, 0x0001, 0x0079, 0x00da, 0x0001, 0x0078, 0x1871, 0x0001, + 0x0078, 0x1878, 0x0003, 0x0549, 0x0554, 0x053e, 0x0002, 0x0541, + 0x0545, 0x0002, 0x0078, 0x187f, 0x1893, 0x0002, 0x0078, 0x1889, + 0x189a, 0x0002, 0x054c, 0x0550, 0x0002, 0x0078, 0x187f, 0x1893, + 0x0002, 0x0078, 0x1889, 0x189a, 0x0002, 0x0557, 0x055b, 0x0002, + 0x0078, 0x187f, 0x1893, 0x0002, 0x0078, 0x1889, 0x189a, 0x0004, + 0x056d, 0x0567, 0x0564, 0x056a, 0x0001, 0x0036, 0x064a, 0x0001, + // Entry 5B5C0 - 5B5FF + 0x0036, 0x065b, 0x0001, 0x0036, 0x065b, 0x0001, 0x0021, 0x0721, + 0x0004, 0x057e, 0x0578, 0x0575, 0x057b, 0x0001, 0x0079, 0x00e1, + 0x0001, 0x0079, 0x00ef, 0x0001, 0x0078, 0x18d0, 0x0001, 0x0078, + 0x18d9, 0x0004, 0x058f, 0x0589, 0x0586, 0x058c, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0006, 0x0599, 0x0000, 0x0000, 0x0000, 0x0604, + 0x060b, 0x0002, 0x059c, 0x05d0, 0x0003, 0x05a0, 0x05b0, 0x05c0, + 0x000e, 0x0078, 0x3b10, 0x18df, 0x3ad6, 0x18f9, 0x3ae3, 0x3aed, + // Entry 5B600 - 5B63F + 0x3afa, 0x3b06, 0x1940, 0x194a, 0x3b1d, 0x195e, 0x196b, 0x3b27, + 0x000e, 0x0000, 0x449e, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, 0x441d, + 0x000e, 0x0078, 0x3b10, 0x18df, 0x3ad6, 0x18f9, 0x3ae3, 0x3aed, + 0x3afa, 0x3b06, 0x1940, 0x194a, 0x3b1d, 0x195e, 0x196b, 0x3b27, + 0x0003, 0x05d4, 0x05e4, 0x05f4, 0x000e, 0x0078, 0x3b10, 0x18df, + 0x3ad6, 0x18f9, 0x3ae3, 0x3aed, 0x3afa, 0x3b06, 0x1940, 0x194a, + 0x3b1d, 0x195e, 0x196b, 0x3b27, 0x000e, 0x0000, 0x449e, 0x0033, + // Entry 5B640 - 5B67F + 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, + 0x4414, 0x4417, 0x441a, 0x441d, 0x000e, 0x0078, 0x3b10, 0x18df, + 0x3ad6, 0x18f9, 0x3ae3, 0x3aed, 0x3afa, 0x3b06, 0x1940, 0x194a, + 0x3b1d, 0x195e, 0x196b, 0x3b27, 0x0001, 0x0606, 0x0001, 0x0608, + 0x0001, 0x0079, 0x00fa, 0x0004, 0x0619, 0x0613, 0x0610, 0x0616, + 0x0001, 0x0036, 0x0719, 0x0001, 0x0036, 0x04f5, 0x0001, 0x0036, + 0x04f5, 0x0001, 0x0079, 0x0007, 0x0005, 0x0622, 0x0000, 0x0000, + 0x0000, 0x0687, 0x0002, 0x0625, 0x0656, 0x0003, 0x0629, 0x0638, + // Entry 5B680 - 5B6BF + 0x0647, 0x000d, 0x0079, 0xffff, 0x0107, 0x0114, 0x0121, 0x012e, + 0x013b, 0x014b, 0x015b, 0x016e, 0x017e, 0x018e, 0x0198, 0x01a2, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, 0x000d, + 0x0079, 0xffff, 0x0107, 0x0114, 0x0121, 0x012e, 0x013b, 0x014b, + 0x015b, 0x016e, 0x017e, 0x018e, 0x0198, 0x01a2, 0x0003, 0x065a, + 0x0669, 0x0678, 0x000d, 0x0079, 0xffff, 0x0107, 0x0114, 0x0121, + 0x012e, 0x013b, 0x014b, 0x015b, 0x016e, 0x017e, 0x018e, 0x0198, + // Entry 5B6C0 - 5B6FF + 0x01a2, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, + 0x000d, 0x0079, 0xffff, 0x0107, 0x0114, 0x0121, 0x012e, 0x013b, + 0x014b, 0x015b, 0x016e, 0x017e, 0x018e, 0x0198, 0x01a2, 0x0001, + 0x0689, 0x0001, 0x068b, 0x0001, 0x0079, 0x01b2, 0x0008, 0x0697, + 0x0000, 0x0000, 0x0000, 0x06fc, 0x0703, 0x0000, 0x9006, 0x0002, + 0x069a, 0x06cb, 0x0003, 0x069e, 0x06ad, 0x06bc, 0x000d, 0x0079, + 0xffff, 0x01bc, 0x01cc, 0x01d9, 0x01e5, 0x01f2, 0x0201, 0x0211, + // Entry 5B700 - 5B73F + 0x021e, 0x022b, 0x0238, 0x0245, 0x0258, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, + 0x2424, 0x4414, 0x4417, 0x441a, 0x000d, 0x0079, 0xffff, 0x01bc, + 0x01cc, 0x01d9, 0x01e5, 0x01f2, 0x0201, 0x0211, 0x021e, 0x022b, + 0x0238, 0x0245, 0x0258, 0x0003, 0x06cf, 0x06de, 0x06ed, 0x000d, + 0x0079, 0xffff, 0x01bc, 0x01cc, 0x01d9, 0x01e5, 0x01f2, 0x0201, + 0x0211, 0x021e, 0x022b, 0x0238, 0x0245, 0x0258, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, + // Entry 5B740 - 5B77F + 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, 0x000d, 0x0079, 0xffff, + 0x01bc, 0x01cc, 0x01d9, 0x01e5, 0x01f2, 0x0201, 0x0211, 0x021e, + 0x022b, 0x0238, 0x0245, 0x0258, 0x0001, 0x06fe, 0x0001, 0x0700, + 0x0001, 0x0079, 0x0268, 0x0004, 0x0711, 0x070b, 0x0708, 0x070e, + 0x0001, 0x0036, 0x0719, 0x0001, 0x0036, 0x04f5, 0x0001, 0x0036, + 0x04f5, 0x0001, 0x0036, 0x0503, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x071d, 0x080f, 0x0000, 0x0820, 0x0001, 0x071f, 0x0001, + 0x0721, 0x00ec, 0x0036, 0x08e5, 0x08ec, 0x3e4a, 0x3e51, 0x0901, + // Entry 5B780 - 5B7BF + 0x3e58, 0x3e5f, 0x3e66, 0x3e6d, 0x3e74, 0x092b, 0x0932, 0x3e7b, + 0x094c, 0x3e88, 0x3e95, 0x3ea2, 0x3ea9, 0x3eb0, 0x0988, 0x098f, + 0x3eb7, 0x099d, 0x09a4, 0x09ab, 0x3ebe, 0x09b9, 0x3ec5, 0x3ecc, + 0x09ce, 0x3ed3, 0x09dc, 0x09e3, 0x3eda, 0x09f1, 0x3ee1, 0x3ee8, + 0x3be3, 0x3eef, 0x0a14, 0x0a1b, 0x0a22, 0x0a29, 0x3ef6, 0x0a37, + 0x3efd, 0x3f04, 0x0a4c, 0x0a53, 0x3f0b, 0x3f12, 0x3f19, 0x3f20, + 0x3f27, 0x3f2e, 0x0a84, 0x0a8b, 0x3f35, 0x3f3c, 0x3f43, 0x3f4a, + 0x0aae, 0x0ab5, 0x0abc, 0x3f51, 0x0aca, 0x0ad1, 0x3f58, 0x0adf, + // Entry 5B7C0 - 5B7FF + 0x3f5f, 0x3f66, 0x0af4, 0x3f6d, 0x3c53, 0x0b09, 0x3f74, 0x0b17, + 0x0b1e, 0x0b25, 0x0b2c, 0x0b33, 0x0b3a, 0x0b41, 0x0b48, 0x0b4f, + 0x3f7b, 0x0b5d, 0x0b64, 0x0b6b, 0x3f82, 0x0b79, 0x0b80, 0x0b87, + 0x0b8e, 0x0b95, 0x3f89, 0x3f90, 0x3f97, 0x0bb1, 0x0bb8, 0x3f9e, + 0x0bc6, 0x0bcd, 0x0bd4, 0x3fa5, 0x0be2, 0x3fac, 0x0bf0, 0x0bf7, + 0x0bfe, 0x0c05, 0x0c0c, 0x0c13, 0x0c1a, 0x3fb3, 0x0c28, 0x0c2f, + 0x3fba, 0x0c3d, 0x0c44, 0x3fc1, 0x3fc8, 0x3fcf, 0x0c60, 0x3fd6, + 0x3fdd, 0x3fe4, 0x3feb, 0x0c83, 0x3ff2, 0x0c91, 0x3ff9, 0x0c9f, + // Entry 5B800 - 5B83F + 0x0ca6, 0x0cad, 0x4000, 0x4007, 0x0cc2, 0x0cc9, 0x0cd0, 0x400e, + 0x0cde, 0x0ce5, 0x4015, 0x0cf3, 0x3cdf, 0x401c, 0x4023, 0x0d0f, + 0x0d16, 0x402a, 0x0d24, 0x0d2b, 0x4031, 0x3cfb, 0x0d40, 0x0d47, + 0x0d4e, 0x4038, 0x0d5c, 0x3d09, 0x0d6a, 0x0d71, 0x403f, 0x0d7f, + 0x0d86, 0x3d17, 0x4046, 0x404d, 0x3d25, 0x4054, 0x405b, 0x0db7, + 0x0dbe, 0x0dc5, 0x4062, 0x3d3a, 0x0dda, 0x4069, 0x4070, 0x0def, + 0x4077, 0x0dfd, 0x407e, 0x3d56, 0x4085, 0x408c, 0x0e20, 0x0e27, + 0x0e2e, 0x0e35, 0x0e3c, 0x0e43, 0x4093, 0x0e51, 0x0e58, 0x409a, + // Entry 5B840 - 5B87F + 0x0e66, 0x40a1, 0x0e74, 0x40a8, 0x40af, 0x40b6, 0x0e90, 0x40bd, + 0x0e9e, 0x0ea5, 0x40c4, 0x0eb3, 0x0eba, 0x3dbf, 0x0ec8, 0x0ecf, + 0x40cb, 0x0edd, 0x40d2, 0x40d9, 0x0ef2, 0x0ef9, 0x0f00, 0x40e0, + 0x0f0e, 0x0f15, 0x0f1c, 0x0f23, 0x0f2a, 0x0f31, 0x0f38, 0x0f3f, + 0x0f46, 0x0f4d, 0x40e7, 0x0f5b, 0x0f62, 0x0f69, 0x0f70, 0x0004, + 0x081d, 0x0817, 0x0814, 0x081a, 0x0001, 0x0036, 0x0719, 0x0001, + 0x0036, 0x04f5, 0x0001, 0x0036, 0x04f5, 0x0001, 0x0079, 0x0275, + 0x0004, 0x082e, 0x0828, 0x0825, 0x082b, 0x0001, 0x0000, 0x03c6, + // Entry 5B880 - 5B8BF + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0005, 0x0837, 0x0000, 0x0000, 0x0000, 0x089c, 0x0002, + 0x083a, 0x086b, 0x0003, 0x083e, 0x084d, 0x085c, 0x000d, 0x0036, + 0xffff, 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, + 0x052d, 0x0532, 0x0537, 0x053d, 0x0543, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, + 0x2424, 0x4414, 0x4417, 0x441a, 0x000d, 0x0036, 0xffff, 0x050a, + 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, + // Entry 5B8C0 - 5B8FF + 0x0537, 0x053d, 0x0543, 0x0003, 0x086f, 0x087e, 0x088d, 0x000d, + 0x0036, 0xffff, 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, + 0x0528, 0x052d, 0x0532, 0x0537, 0x053d, 0x0543, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, + 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, 0x000d, 0x0036, 0xffff, + 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, + 0x0532, 0x0537, 0x053d, 0x0543, 0x0003, 0x08a5, 0x0000, 0x08a0, + 0x0001, 0x08a2, 0x0001, 0x0079, 0x027f, 0x0001, 0x08a7, 0x0001, + // Entry 5B900 - 5B93F + 0x0079, 0x027f, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x08b3, + 0x08bb, 0x0000, 0x9006, 0x0001, 0x08b5, 0x0001, 0x08b7, 0x0002, + 0x0036, 0x105c, 0x1066, 0x0004, 0x08c9, 0x08c3, 0x08c0, 0x08c6, + 0x0001, 0x0036, 0x0719, 0x0001, 0x0036, 0x04f5, 0x0001, 0x0036, + 0x04f5, 0x0001, 0x0079, 0x0289, 0x0042, 0x090f, 0x0914, 0x0919, + 0x091e, 0x0933, 0x0943, 0x0953, 0x0968, 0x097d, 0x0992, 0x09a7, + 0x09b7, 0x09c7, 0x09e0, 0x09f4, 0x0a08, 0x0a0d, 0x0a12, 0x0a17, + 0x0a2e, 0x0a3e, 0x0a4e, 0x0a53, 0x0a58, 0x0a5d, 0x0a62, 0x0a67, + // Entry 5B940 - 5B97F + 0x0a6c, 0x0a71, 0x0a76, 0x0a7b, 0x0a8d, 0x0a9f, 0x0ab1, 0x0ac3, + 0x0ad5, 0x0ae7, 0x0af9, 0x0b0b, 0x0b1d, 0x0b2f, 0x0b41, 0x0b53, + 0x0b65, 0x0b77, 0x0b89, 0x0b9b, 0x0bad, 0x0bbf, 0x0bd1, 0x0be3, + 0x0bf5, 0x0bfa, 0x0bff, 0x0c04, 0x0c18, 0x0c28, 0x0c38, 0x0c4c, + 0x0c5c, 0x0c6c, 0x0c80, 0x0c90, 0x0ca0, 0x0ca5, 0x0caa, 0x0001, + 0x0911, 0x0001, 0x0078, 0x1b28, 0x0001, 0x0916, 0x0001, 0x0078, + 0x1b28, 0x0001, 0x091b, 0x0001, 0x0078, 0x1b28, 0x0003, 0x0922, + 0x0925, 0x092a, 0x0001, 0x0036, 0x1074, 0x0003, 0x0079, 0x0291, + // Entry 5B980 - 5B9BF + 0x0298, 0x029f, 0x0002, 0x092d, 0x0930, 0x0001, 0x0079, 0x02a6, + 0x0001, 0x0036, 0x1098, 0x0003, 0x0937, 0x0000, 0x093a, 0x0001, + 0x0036, 0x1074, 0x0002, 0x093d, 0x0940, 0x0001, 0x0079, 0x02a6, + 0x0001, 0x0036, 0x1098, 0x0003, 0x0947, 0x0000, 0x094a, 0x0001, + 0x0036, 0x1074, 0x0002, 0x094d, 0x0950, 0x0001, 0x0079, 0x02a6, + 0x0001, 0x0036, 0x1098, 0x0003, 0x0957, 0x095a, 0x095f, 0x0001, + 0x0078, 0x1b44, 0x0003, 0x0078, 0x1b48, 0x1b52, 0x1b59, 0x0002, + 0x0962, 0x0965, 0x0001, 0x0079, 0x02b1, 0x0001, 0x0078, 0x1b6e, + // Entry 5B9C0 - 5B9FF + 0x0003, 0x096c, 0x096f, 0x0974, 0x0001, 0x0078, 0x1b44, 0x0003, + 0x0078, 0x1b79, 0x1b52, 0x1b80, 0x0002, 0x0977, 0x097a, 0x0001, + 0x0079, 0x02b1, 0x0001, 0x0078, 0x1b6e, 0x0003, 0x0981, 0x0984, + 0x0989, 0x0001, 0x0078, 0x1b44, 0x0003, 0x0078, 0x1b79, 0x1b52, + 0x1b80, 0x0002, 0x098c, 0x098f, 0x0001, 0x0079, 0x02b1, 0x0001, + 0x0078, 0x1b6e, 0x0003, 0x0996, 0x0999, 0x099e, 0x0001, 0x0036, + 0x054d, 0x0003, 0x0079, 0x02bc, 0x02c6, 0x02d0, 0x0002, 0x09a1, + 0x09a4, 0x0001, 0x0079, 0x02da, 0x0001, 0x0079, 0x02e8, 0x0003, + // Entry 5BA00 - 5BA3F + 0x09ab, 0x0000, 0x09ae, 0x0001, 0x0036, 0x054d, 0x0002, 0x09b1, + 0x09b4, 0x0001, 0x0079, 0x02da, 0x0001, 0x0079, 0x02e8, 0x0003, + 0x09bb, 0x0000, 0x09be, 0x0001, 0x0036, 0x054d, 0x0002, 0x09c1, + 0x09c4, 0x0001, 0x0079, 0x02da, 0x0001, 0x0079, 0x02e8, 0x0004, + 0x09cc, 0x09cf, 0x09d4, 0x09dd, 0x0001, 0x0079, 0x02f6, 0x0003, + 0x0078, 0x1bc1, 0x3b31, 0x1bd8, 0x0002, 0x09d7, 0x09da, 0x0001, + 0x0079, 0x02fa, 0x0001, 0x0079, 0x030b, 0x0001, 0x0078, 0x1c04, + 0x0004, 0x09e5, 0x0000, 0x09e8, 0x09f1, 0x0001, 0x0079, 0x02f6, + // Entry 5BA40 - 5BA7F + 0x0002, 0x09eb, 0x09ee, 0x0001, 0x0079, 0x02fa, 0x0001, 0x0079, + 0x030b, 0x0001, 0x0078, 0x1c04, 0x0004, 0x09f9, 0x0000, 0x09fc, + 0x0a05, 0x0001, 0x0079, 0x02f6, 0x0002, 0x09ff, 0x0a02, 0x0001, + 0x0079, 0x02fa, 0x0001, 0x0079, 0x030b, 0x0001, 0x0078, 0x1c04, + 0x0001, 0x0a0a, 0x0001, 0x0079, 0x031c, 0x0001, 0x0a0f, 0x0001, + 0x0079, 0x031c, 0x0001, 0x0a14, 0x0001, 0x0079, 0x031c, 0x0003, + 0x0a1b, 0x0a1e, 0x0a25, 0x0001, 0x0036, 0x0549, 0x0005, 0x0078, + 0x3b3e, 0x1c26, 0x3b45, 0x1c18, 0x3b4c, 0x0002, 0x0a28, 0x0a2b, + // Entry 5BA80 - 5BABF + 0x0001, 0x0079, 0x0323, 0x0001, 0x0036, 0x1223, 0x0003, 0x0a32, + 0x0000, 0x0a35, 0x0001, 0x0036, 0x0549, 0x0002, 0x0a38, 0x0a3b, + 0x0001, 0x0079, 0x0323, 0x0001, 0x0036, 0x1223, 0x0003, 0x0a42, + 0x0000, 0x0a45, 0x0001, 0x0036, 0x0549, 0x0002, 0x0a48, 0x0a4b, + 0x0001, 0x0079, 0x0323, 0x0001, 0x0036, 0x1223, 0x0001, 0x0a50, + 0x0001, 0x0078, 0x1c3b, 0x0001, 0x0a55, 0x0001, 0x0078, 0x1c3b, + 0x0001, 0x0a5a, 0x0001, 0x0078, 0x1c3b, 0x0001, 0x0a5f, 0x0001, + 0x0079, 0x032e, 0x0001, 0x0a64, 0x0001, 0x0079, 0x032e, 0x0001, + // Entry 5BAC0 - 5BAFF + 0x0a69, 0x0001, 0x0079, 0x032e, 0x0001, 0x0a6e, 0x0001, 0x0078, + 0x1c49, 0x0001, 0x0a73, 0x0001, 0x0078, 0x1c49, 0x0001, 0x0a78, + 0x0001, 0x0078, 0x1c49, 0x0003, 0x0000, 0x0a7f, 0x0a84, 0x0003, + 0x0078, 0x1c53, 0x3b53, 0x1c70, 0x0002, 0x0a87, 0x0a8a, 0x0001, + 0x0079, 0x0335, 0x0001, 0x0079, 0x0349, 0x0003, 0x0000, 0x0a91, + 0x0a96, 0x0003, 0x0078, 0x1c53, 0x3b53, 0x1c70, 0x0002, 0x0a99, + 0x0a9c, 0x0001, 0x0079, 0x0335, 0x0001, 0x0079, 0x0349, 0x0003, + 0x0000, 0x0aa3, 0x0aa8, 0x0003, 0x0078, 0x1c53, 0x3b53, 0x1c70, + // Entry 5BB00 - 5BB3F + 0x0002, 0x0aab, 0x0aae, 0x0001, 0x0079, 0x0335, 0x0001, 0x0079, + 0x0349, 0x0003, 0x0000, 0x0ab5, 0x0aba, 0x0003, 0x0078, 0x1ca5, + 0x3b63, 0x1cc2, 0x0002, 0x0abd, 0x0ac0, 0x0001, 0x0079, 0x035d, + 0x0001, 0x0079, 0x0371, 0x0003, 0x0000, 0x0ac7, 0x0acc, 0x0003, + 0x0078, 0x1ca5, 0x3b63, 0x1cc2, 0x0002, 0x0acf, 0x0ad2, 0x0001, + 0x0079, 0x035d, 0x0001, 0x0079, 0x0371, 0x0003, 0x0000, 0x0ad9, + 0x0ade, 0x0003, 0x0078, 0x1ca5, 0x3b63, 0x1cc2, 0x0002, 0x0ae1, + 0x0ae4, 0x0001, 0x0079, 0x035d, 0x0001, 0x0079, 0x0371, 0x0003, + // Entry 5BB40 - 5BB7F + 0x0000, 0x0aeb, 0x0af0, 0x0003, 0x0078, 0x1cf7, 0x3b73, 0x1d14, + 0x0002, 0x0af3, 0x0af6, 0x0001, 0x0079, 0x0385, 0x0001, 0x0079, + 0x0399, 0x0003, 0x0000, 0x0afd, 0x0b02, 0x0003, 0x0078, 0x1cf7, + 0x3b73, 0x1d14, 0x0002, 0x0b05, 0x0b08, 0x0001, 0x0079, 0x0385, + 0x0001, 0x0079, 0x0399, 0x0003, 0x0000, 0x0b0f, 0x0b14, 0x0003, + 0x0078, 0x1cf7, 0x3b73, 0x1d14, 0x0002, 0x0b17, 0x0b1a, 0x0001, + 0x0079, 0x0385, 0x0001, 0x0079, 0x0399, 0x0003, 0x0000, 0x0b21, + 0x0b26, 0x0003, 0x0078, 0x1d49, 0x3b83, 0x1d66, 0x0002, 0x0b29, + // Entry 5BB80 - 5BBBF + 0x0b2c, 0x0001, 0x0079, 0x03ad, 0x0001, 0x0079, 0x03c1, 0x0003, + 0x0000, 0x0b33, 0x0b38, 0x0003, 0x0078, 0x1d49, 0x3b83, 0x1d66, + 0x0002, 0x0b3b, 0x0b3e, 0x0001, 0x0079, 0x03ad, 0x0001, 0x0079, + 0x03c1, 0x0003, 0x0000, 0x0b45, 0x0b4a, 0x0003, 0x0078, 0x1d49, + 0x3b83, 0x1d66, 0x0002, 0x0b4d, 0x0b50, 0x0001, 0x0079, 0x03ad, + 0x0001, 0x0079, 0x03c1, 0x0003, 0x0000, 0x0b57, 0x0b5c, 0x0003, + 0x0078, 0x1d9b, 0x3b93, 0x1db8, 0x0002, 0x0b5f, 0x0b62, 0x0001, + 0x0079, 0x03d5, 0x0001, 0x0079, 0x03e9, 0x0003, 0x0000, 0x0b69, + // Entry 5BBC0 - 5BBFF + 0x0b6e, 0x0003, 0x0078, 0x1d9b, 0x3b93, 0x1db8, 0x0002, 0x0b71, + 0x0b74, 0x0001, 0x0079, 0x03d5, 0x0001, 0x0079, 0x03e9, 0x0003, + 0x0000, 0x0b7b, 0x0b80, 0x0003, 0x0078, 0x1d9b, 0x3b93, 0x1db8, + 0x0002, 0x0b83, 0x0b86, 0x0001, 0x0079, 0x03d5, 0x0001, 0x0079, + 0x03e9, 0x0003, 0x0000, 0x0b8d, 0x0b92, 0x0003, 0x0078, 0x1ded, + 0x3ba3, 0x1e0a, 0x0002, 0x0b95, 0x0b98, 0x0001, 0x0079, 0x03fd, + 0x0001, 0x0079, 0x0411, 0x0003, 0x0000, 0x0b9f, 0x0ba4, 0x0003, + 0x0078, 0x1ded, 0x3ba3, 0x1e0a, 0x0002, 0x0ba7, 0x0baa, 0x0001, + // Entry 5BC00 - 5BC3F + 0x0079, 0x03fd, 0x0001, 0x0079, 0x0411, 0x0003, 0x0000, 0x0bb1, + 0x0bb6, 0x0003, 0x0078, 0x1ded, 0x3ba3, 0x1e0a, 0x0002, 0x0bb9, + 0x0bbc, 0x0001, 0x0079, 0x03fd, 0x0001, 0x0079, 0x0411, 0x0003, + 0x0000, 0x0bc3, 0x0bc8, 0x0003, 0x0078, 0x1e3f, 0x3bb3, 0x1e5c, + 0x0002, 0x0bcb, 0x0bce, 0x0001, 0x0079, 0x0425, 0x0001, 0x0079, + 0x0439, 0x0003, 0x0000, 0x0bd5, 0x0bda, 0x0003, 0x0078, 0x1e3f, + 0x3bb3, 0x1e5c, 0x0002, 0x0bdd, 0x0be0, 0x0001, 0x0079, 0x0425, + 0x0001, 0x0079, 0x0439, 0x0003, 0x0000, 0x0be7, 0x0bec, 0x0003, + // Entry 5BC40 - 5BC7F + 0x0078, 0x1e3f, 0x3bb3, 0x1e5c, 0x0002, 0x0bef, 0x0bf2, 0x0001, + 0x0079, 0x0425, 0x0001, 0x0079, 0x0439, 0x0001, 0x0bf7, 0x0001, + 0x0078, 0x1e91, 0x0001, 0x0bfc, 0x0001, 0x0078, 0x1e91, 0x0001, + 0x0c01, 0x0001, 0x0078, 0x1e91, 0x0003, 0x0c08, 0x0c0b, 0x0c0f, + 0x0001, 0x0079, 0x044d, 0x0002, 0x0079, 0xffff, 0x0454, 0x0002, + 0x0c12, 0x0c15, 0x0001, 0x0079, 0x0461, 0x0001, 0x0079, 0x046f, + 0x0003, 0x0c1c, 0x0000, 0x0c1f, 0x0001, 0x0079, 0x044d, 0x0002, + 0x0c22, 0x0c25, 0x0001, 0x0079, 0x0461, 0x0001, 0x0079, 0x046f, + // Entry 5BC80 - 5BCBF + 0x0003, 0x0c2c, 0x0000, 0x0c2f, 0x0001, 0x0079, 0x044d, 0x0002, + 0x0c32, 0x0c35, 0x0001, 0x0079, 0x0461, 0x0001, 0x0079, 0x046f, + 0x0003, 0x0c3c, 0x0c3f, 0x0c43, 0x0001, 0x0079, 0x047d, 0x0002, + 0x0079, 0xffff, 0x0484, 0x0002, 0x0c46, 0x0c49, 0x0001, 0x0079, + 0x048e, 0x0001, 0x0079, 0x049c, 0x0003, 0x0c50, 0x0000, 0x0c53, + 0x0001, 0x0079, 0x047d, 0x0002, 0x0c56, 0x0c59, 0x0001, 0x0079, + 0x048e, 0x0001, 0x0079, 0x049c, 0x0003, 0x0c60, 0x0000, 0x0c63, + 0x0001, 0x0079, 0x047d, 0x0002, 0x0c66, 0x0c69, 0x0001, 0x0079, + // Entry 5BCC0 - 5BCFF + 0x048e, 0x0001, 0x0079, 0x049c, 0x0003, 0x0c70, 0x0c73, 0x0c77, + 0x0001, 0x0036, 0x1944, 0x0002, 0x0078, 0xffff, 0x1efc, 0x0002, + 0x0c7a, 0x0c7d, 0x0001, 0x0079, 0x04aa, 0x0001, 0x0036, 0x1957, + 0x0003, 0x0c84, 0x0000, 0x0c87, 0x0001, 0x0036, 0x1944, 0x0002, + 0x0c8a, 0x0c8d, 0x0001, 0x0079, 0x04aa, 0x0001, 0x0036, 0x1957, + 0x0003, 0x0c94, 0x0000, 0x0c97, 0x0001, 0x0036, 0x1944, 0x0002, + 0x0c9a, 0x0c9d, 0x0001, 0x0079, 0x04aa, 0x0001, 0x0036, 0x1957, + 0x0001, 0x0ca2, 0x0001, 0x0079, 0x04b5, 0x0001, 0x0ca7, 0x0001, + // Entry 5BD00 - 5BD3F + 0x0079, 0x04b5, 0x0001, 0x0cac, 0x0001, 0x0079, 0x04b5, 0x0004, + 0x0cb4, 0x0cb9, 0x0cbe, 0x0ccd, 0x0003, 0x0000, 0x1dc7, 0x4333, + 0x432f, 0x0003, 0x0079, 0x04bc, 0x04c6, 0x04cf, 0x0002, 0x0000, + 0x0cc1, 0x0003, 0x0000, 0x0cc8, 0x0cc5, 0x0001, 0x0079, 0x04d8, + 0x0003, 0x0079, 0xffff, 0x04eb, 0x04fe, 0x0002, 0x0000, 0x0cd0, + 0x0003, 0x0cd4, 0x0e14, 0x0d74, 0x009e, 0x0079, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0584, 0x05b7, 0x0641, 0x067d, 0x06b0, 0x06e3, + 0x0716, 0x0752, 0x0797, 0x0854, 0x0890, 0x08cc, 0x091a, 0x095f, + // Entry 5BD40 - 5BD7F + 0x099b, 0x09e0, 0x0a2e, 0x0a73, 0x0ab8, 0x0afd, 0x0b4b, 0xffff, + 0xffff, 0x0ba7, 0xffff, 0x0bf9, 0xffff, 0x0c55, 0x0c9a, 0x0ccd, + 0x0d00, 0xffff, 0xffff, 0x0d62, 0x0da7, 0x0def, 0xffff, 0xffff, + 0xffff, 0x0e58, 0xffff, 0x0ead, 0x0ee0, 0xffff, 0x0f26, 0x0f59, + 0x0fa7, 0xffff, 0xffff, 0xffff, 0xffff, 0x103b, 0xffff, 0xffff, + 0x10a9, 0x10f7, 0xffff, 0xffff, 0x1184, 0x11de, 0x1211, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x12bc, 0x12ef, 0x133d, + 0x1379, 0x13ac, 0xffff, 0xffff, 0x144a, 0xffff, 0x148d, 0xffff, + // Entry 5BD80 - 5BDBF + 0xffff, 0x1529, 0xffff, 0x15b1, 0xffff, 0xffff, 0xffff, 0xffff, + 0x163c, 0xffff, 0x168e, 0x16e5, 0x173c, 0x1781, 0xffff, 0xffff, + 0xffff, 0x17e7, 0x1844, 0x1880, 0xffff, 0xffff, 0x18df, 0x1976, + 0x19c4, 0x1a09, 0xffff, 0xffff, 0x1a77, 0x1ab3, 0x1ae6, 0xffff, + 0x1b35, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1c54, 0x1c90, + 0x1ccc, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1d8a, 0xffff, 0xffff, 0x1de3, 0xffff, 0x1e26, 0xffff, 0x1e72, + 0x1eae, 0x1ef3, 0xffff, 0x1f42, 0x1f7e, 0xffff, 0xffff, 0xffff, + // Entry 5BDC0 - 5BDFF + 0x2011, 0x2056, 0xffff, 0xffff, 0x0514, 0x05fc, 0x07d3, 0x080f, + 0xffff, 0xffff, 0x156e, 0x1bdd, 0x009e, 0x0079, 0x0547, 0x0557, + 0x0564, 0x0571, 0x0591, 0x05ca, 0x0651, 0x068a, 0x06bd, 0x06f0, + 0x0726, 0x0765, 0x07a7, 0x0864, 0x08a0, 0x08e2, 0x092d, 0x096f, + 0x09ae, 0x09f6, 0x0a41, 0x0a86, 0x0acb, 0x0b13, 0x0b5b, 0x0b87, + 0x0b94, 0x0bba, 0x0bec, 0x0c09, 0x0c45, 0x0c68, 0x0ca7, 0x0cda, + 0x0d10, 0x0d3c, 0x0d4c, 0x0d75, 0x0dba, 0x0dfc, 0x0e22, 0x0e32, + 0x0e48, 0x0e6b, 0x0e9d, 0x0eba, 0x0eed, 0x0f13, 0x0f33, 0x0f6f, + // Entry 5BE00 - 5BE3F + 0x0fb4, 0x0fda, 0x0ff0, 0x100c, 0x1025, 0x104b, 0x1077, 0x1090, + 0x10bf, 0x110d, 0x1158, 0x1174, 0x119e, 0x11eb, 0x1221, 0x124d, + 0x1260, 0x1270, 0x1283, 0x1296, 0x12a9, 0x12c9, 0x1305, 0x134d, + 0x1386, 0x13ce, 0x1424, 0x1437, 0x1457, 0x147d, 0x14ac, 0x14f6, + 0x1516, 0x153c, 0x15a1, 0x15c1, 0x15ed, 0x1600, 0x1613, 0x1626, + 0x164f, 0x1681, 0x16a7, 0x16fe, 0x174f, 0x1791, 0x17bd, 0x17ca, + 0x17d7, 0x1800, 0x1854, 0x1890, 0x18bc, 0x18cc, 0x1904, 0x198c, + 0x19d7, 0x1a1c, 0x1a4e, 0x1a5b, 0x1a87, 0x1ac0, 0x1af6, 0x1b22, + // Entry 5BE40 - 5BE7F + 0x1b5a, 0x1bb0, 0x1bc0, 0x1bd0, 0x1c34, 0x1c44, 0x1c64, 0x1ca0, + 0x1cdc, 0x1d08, 0x1d18, 0x1d2e, 0x1d44, 0x1d57, 0x1d67, 0x1d7a, + 0x1d97, 0x1dbd, 0x1dcd, 0x1df0, 0x1e16, 0x1e36, 0x1e62, 0x1e82, + 0x1ec1, 0x1f03, 0x1f2f, 0x1f52, 0x1f94, 0x1fcc, 0x1fdf, 0x1fef, + 0x2024, 0x206c, 0x1145, 0x195a, 0x0521, 0x060f, 0x07e3, 0x0822, + 0x0c35, 0x1509, 0x157b, 0x1bf6, 0x009e, 0x0079, 0xffff, 0xffff, + 0xffff, 0xffff, 0x05a4, 0x05e3, 0x0667, 0x069d, 0x06d0, 0x0703, + 0x073c, 0x077e, 0x07bd, 0x087a, 0x08b6, 0x08fe, 0x0946, 0x0985, + // Entry 5BE80 - 5BEBF + 0x09c7, 0x0a12, 0x0a5a, 0x0a9f, 0x0ae4, 0x0b2f, 0x0b71, 0xffff, + 0xffff, 0x0bd3, 0xffff, 0x0c1f, 0xffff, 0x0c81, 0x0cba, 0x0ced, + 0x0d26, 0xffff, 0xffff, 0x0d8e, 0x0dd3, 0x0e0f, 0xffff, 0xffff, + 0xffff, 0x0e84, 0xffff, 0x0ecd, 0x0f00, 0xffff, 0x0f46, 0x0f8b, + 0x0fc7, 0xffff, 0xffff, 0xffff, 0xffff, 0x1061, 0xffff, 0xffff, + 0x10db, 0x1129, 0xffff, 0xffff, 0x11be, 0x11fe, 0x1237, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x12dc, 0x1321, 0x1363, + 0x1399, 0x13f6, 0xffff, 0xffff, 0x146a, 0xffff, 0x14d1, 0xffff, + // Entry 5BEC0 - 5BEFF + 0xffff, 0x1555, 0xffff, 0x15d7, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1668, 0xffff, 0x16c6, 0x171d, 0x1768, 0x17a7, 0xffff, 0xffff, + 0xffff, 0x181f, 0x186a, 0x18a6, 0xffff, 0xffff, 0x192f, 0x19a8, + 0x19f0, 0x1a35, 0xffff, 0xffff, 0x1a9d, 0x1ad3, 0x1b0c, 0xffff, + 0x1b85, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1c7a, 0x1cb6, + 0x1cf2, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x1daa, 0xffff, 0xffff, 0x1e03, 0xffff, 0x1e4c, 0xffff, 0x1e98, + 0x1eda, 0x1f19, 0xffff, 0x1f68, 0x1fb0, 0xffff, 0xffff, 0xffff, + // Entry 5BF00 - 5BF3F + 0x203d, 0x2088, 0xffff, 0xffff, 0x0534, 0x0628, 0x07f9, 0x083b, + 0xffff, 0xffff, 0x158e, 0x1c15, 0x0002, 0x0003, 0x01ae, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0026, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x0000, + 0x0000, 0x0004, 0x0023, 0x001d, 0x001a, 0x0020, 0x0001, 0x0002, + 0x0000, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x0044, 0x0001, + 0x0000, 0x240c, 0x0008, 0x002f, 0x0094, 0x00eb, 0x0120, 0x0161, + 0x017b, 0x018c, 0x019d, 0x0002, 0x0032, 0x0063, 0x0003, 0x0036, + // Entry 5BF40 - 5BF7F + 0x0045, 0x0054, 0x000d, 0x0060, 0xffff, 0x02f3, 0x02fd, 0x0307, + 0x0311, 0x031b, 0x0325, 0x032f, 0x0339, 0x0343, 0x034d, 0x0357, + 0x0361, 0x000d, 0x0060, 0xffff, 0x0446, 0x044a, 0x044e, 0x0446, + 0x044e, 0x0452, 0x0452, 0x0456, 0x045a, 0x045e, 0x0462, 0x0466, + 0x000d, 0x0060, 0xffff, 0x036b, 0x037e, 0x038e, 0x039b, 0x03ab, + 0x03bb, 0x03cb, 0x03de, 0x03eb, 0x0404, 0x0414, 0x042d, 0x0003, + 0x0067, 0x0076, 0x0085, 0x000d, 0x0060, 0xffff, 0x02f3, 0x02fd, + 0x0307, 0x0311, 0x031b, 0x0325, 0x032f, 0x0339, 0x0343, 0x034d, + // Entry 5BF80 - 5BFBF + 0x0357, 0x0361, 0x000d, 0x0060, 0xffff, 0x0446, 0x044a, 0x044e, + 0x0446, 0x044e, 0x0452, 0x0452, 0x0456, 0x045a, 0x045e, 0x0462, + 0x0466, 0x000d, 0x0060, 0xffff, 0x036b, 0x037e, 0x038e, 0x039b, + 0x03ab, 0x03bb, 0x03cb, 0x03de, 0x03eb, 0x0404, 0x0414, 0x042d, + 0x0002, 0x0097, 0x00c1, 0x0005, 0x009d, 0x00a6, 0x00b8, 0x0000, + 0x00af, 0x0007, 0x0060, 0x046a, 0x0474, 0x047e, 0x0488, 0x0492, + 0x049c, 0x04a9, 0x0007, 0x0018, 0x2a71, 0x2a5c, 0x2a73, 0x2a37, + 0x2a73, 0x2a5a, 0x2a71, 0x0007, 0x0060, 0x046a, 0x0474, 0x047e, + // Entry 5BFC0 - 5BFFF + 0x0488, 0x0492, 0x049c, 0x04a9, 0x0007, 0x0060, 0x04b6, 0x04c9, + 0x04d9, 0x04ec, 0x04fc, 0x3fcc, 0x051f, 0x0005, 0x00c7, 0x00d0, + 0x00e2, 0x0000, 0x00d9, 0x0007, 0x0060, 0x046a, 0x0474, 0x047e, + 0x0488, 0x0492, 0x049c, 0x04a9, 0x0007, 0x0018, 0x2a71, 0x2a5c, + 0x2a73, 0x2a37, 0x2a73, 0x2a5a, 0x2a71, 0x0007, 0x0060, 0x046a, + 0x0474, 0x047e, 0x0488, 0x0492, 0x049c, 0x04a9, 0x0007, 0x0060, + 0x04b6, 0x04c9, 0x04d9, 0x04ec, 0x04fc, 0x3fcc, 0x051f, 0x0002, + 0x00ee, 0x0107, 0x0003, 0x00f2, 0x00f9, 0x0100, 0x0005, 0x0060, + // Entry 5C000 - 5C03F + 0xffff, 0x0535, 0x053e, 0x0547, 0x0550, 0x0005, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0060, 0xffff, 0x0559, + 0x0574, 0x058f, 0x05aa, 0x0003, 0x010b, 0x0112, 0x0119, 0x0005, + 0x0060, 0xffff, 0x0535, 0x053e, 0x0547, 0x0550, 0x0005, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x0060, 0xffff, + 0x0559, 0x0574, 0x058f, 0x05aa, 0x0002, 0x0123, 0x0142, 0x0003, + 0x0127, 0x0130, 0x0139, 0x0002, 0x012a, 0x012d, 0x0001, 0x0060, + 0x05c5, 0x0001, 0x0060, 0x05d8, 0x0002, 0x0133, 0x0136, 0x0001, + // Entry 5C040 - 5C07F + 0x0060, 0x05c5, 0x0001, 0x0060, 0x05d8, 0x0002, 0x013c, 0x013f, + 0x0001, 0x0060, 0x05c5, 0x0001, 0x0060, 0x05d8, 0x0003, 0x0146, + 0x014f, 0x0158, 0x0002, 0x0149, 0x014c, 0x0001, 0x0060, 0x05c5, + 0x0001, 0x0060, 0x05d8, 0x0002, 0x0152, 0x0155, 0x0001, 0x0060, + 0x05c5, 0x0001, 0x0060, 0x05d8, 0x0002, 0x015b, 0x015e, 0x0001, + 0x0060, 0x05c5, 0x0001, 0x0060, 0x05d8, 0x0003, 0x0170, 0x0000, + 0x0165, 0x0002, 0x0168, 0x016c, 0x0002, 0x0060, 0x05f1, 0x060c, + 0x0002, 0x0000, 0x04f5, 0x3c5a, 0x0002, 0x0173, 0x0177, 0x0002, + // Entry 5C080 - 5C0BF + 0x0060, 0x062d, 0x0637, 0x0002, 0x0000, 0x04f5, 0x3c5a, 0x0004, + 0x0189, 0x0183, 0x0180, 0x0186, 0x0001, 0x0002, 0x0025, 0x0001, + 0x0002, 0x0033, 0x0001, 0x0002, 0x0282, 0x0001, 0x0002, 0x028b, + 0x0004, 0x019a, 0x0194, 0x0191, 0x0197, 0x0001, 0x0000, 0x0524, + 0x0001, 0x0000, 0x0532, 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, + 0x0546, 0x0004, 0x01ab, 0x01a5, 0x01a2, 0x01a8, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0040, 0x01ef, 0x0000, 0x0000, 0x01f4, 0x0000, + // Entry 5C0C0 - 5C0FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x01f9, 0x0000, 0x0000, 0x01fe, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0203, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x020e, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0213, + 0x0000, 0x0218, 0x0000, 0x0000, 0x021d, 0x0000, 0x0000, 0x0222, + 0x0000, 0x0000, 0x0227, 0x0001, 0x01f1, 0x0001, 0x0060, 0x0641, + // Entry 5C100 - 5C13F + 0x0001, 0x01f6, 0x0001, 0x0060, 0x0651, 0x0001, 0x01fb, 0x0001, + 0x0060, 0x0667, 0x0001, 0x0200, 0x0001, 0x0060, 0x0677, 0x0002, + 0x0206, 0x0209, 0x0001, 0x0060, 0x068d, 0x0003, 0x0060, 0x0697, + 0x06a7, 0x06b4, 0x0001, 0x0210, 0x0001, 0x0060, 0x06c4, 0x0001, + 0x0215, 0x0001, 0x0060, 0x06e8, 0x0001, 0x021a, 0x0001, 0x0060, + 0x0733, 0x0001, 0x021f, 0x0001, 0x0060, 0x0749, 0x0001, 0x0224, + 0x0001, 0x0060, 0x075f, 0x0001, 0x0229, 0x0001, 0x0060, 0x0772, + 0x0003, 0x0004, 0x0b3e, 0x0f65, 0x0012, 0x0017, 0x0055, 0x0178, + // Entry 5C140 - 5C17F + 0x0207, 0x030b, 0x038e, 0x039d, 0x03c8, 0x05fa, 0x06a3, 0x0746, + 0x0000, 0x0000, 0x0000, 0x0000, 0x07c9, 0x0a7f, 0x0afd, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0033, 0x0000, 0x0044, + 0x0003, 0x0029, 0x002e, 0x0024, 0x0001, 0x0026, 0x0001, 0x0079, + 0x0000, 0x0001, 0x002b, 0x0001, 0x0079, 0x0000, 0x0001, 0x0030, + 0x0001, 0x0079, 0x0000, 0x0004, 0x0041, 0x003b, 0x0038, 0x003e, + 0x0001, 0x0036, 0x0719, 0x0001, 0x0036, 0x04f5, 0x0001, 0x0036, + 0x04f5, 0x0001, 0x0079, 0x0007, 0x0004, 0x0052, 0x004c, 0x0049, + // Entry 5C180 - 5C1BF + 0x004f, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x000a, 0x0060, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0167, 0x0000, 0x0000, 0x00c5, 0x00d8, + 0x0002, 0x0063, 0x0094, 0x0003, 0x0067, 0x0076, 0x0085, 0x000d, + 0x0036, 0xffff, 0x0036, 0x40ee, 0x40f5, 0x40fc, 0x4103, 0x410a, + 0x4111, 0x4118, 0x411f, 0x4126, 0x412d, 0x3e10, 0x000d, 0x0036, + 0xffff, 0x0090, 0x0094, 0x0098, 0x009c, 0x00a0, 0x00a4, 0x00a8, + 0x00ac, 0x00b0, 0x00b4, 0x00b8, 0x3e17, 0x000d, 0x0036, 0xffff, + // Entry 5C1C0 - 5C1FF + 0x0036, 0x40ee, 0x40f5, 0x40fc, 0x4103, 0x410a, 0x4111, 0x4118, + 0x411f, 0x4126, 0x412d, 0x3e10, 0x0003, 0x0098, 0x00a7, 0x00b6, + 0x000d, 0x0036, 0xffff, 0x0036, 0x40ee, 0x40f5, 0x40fc, 0x4103, + 0x410a, 0x4111, 0x4118, 0x411f, 0x4126, 0x412d, 0x3e10, 0x000d, + 0x0036, 0xffff, 0x0090, 0x0094, 0x0098, 0x009c, 0x00a0, 0x00a4, + 0x00a8, 0x00ac, 0x00b0, 0x00b4, 0x3b30, 0x3e17, 0x000d, 0x0036, + 0xffff, 0x0036, 0x40ee, 0x40f5, 0x40fc, 0x4103, 0x410a, 0x4111, + 0x4118, 0x411f, 0x4126, 0x412d, 0x3e10, 0x0003, 0x00c9, 0x00d4, + // Entry 5C200 - 5C23F + 0x00ce, 0x0003, 0x0079, 0xffff, 0xffff, 0x000e, 0x0004, 0x0079, + 0xffff, 0xffff, 0xffff, 0x000e, 0x0002, 0x0079, 0xffff, 0x000e, + 0x0006, 0x00df, 0x0000, 0x0000, 0x00f2, 0x0111, 0x0154, 0x0001, + 0x00e1, 0x0001, 0x00e3, 0x000d, 0x0036, 0xffff, 0x00cd, 0x00d1, + 0x00d5, 0x00d9, 0x00dd, 0x00e1, 0x00e5, 0x00e9, 0x00ed, 0x00f1, + 0x00f5, 0x00f9, 0x0001, 0x00f4, 0x0001, 0x00f6, 0x0019, 0x0036, + 0xffff, 0x00fd, 0x0104, 0x3e1b, 0x0112, 0x0119, 0x3e22, 0x0127, + 0x3e29, 0x3e30, 0x013c, 0x0143, 0x014a, 0x0151, 0x3e37, 0x015f, + // Entry 5C240 - 5C27F + 0x0166, 0x016d, 0x0174, 0x017b, 0x0182, 0x0189, 0x0190, 0x0197, + 0x019e, 0x0001, 0x0113, 0x0001, 0x0115, 0x003d, 0x0036, 0xffff, + 0x01a5, 0x01ac, 0x01b3, 0x01ba, 0x01c1, 0x01c8, 0x01cf, 0x01d6, + 0x01dd, 0x01e4, 0x01eb, 0x01f2, 0x01f9, 0x0200, 0x0207, 0x020e, + 0x0215, 0x021c, 0x0223, 0x022a, 0x0231, 0x0238, 0x023f, 0x0246, + 0x024d, 0x0254, 0x025b, 0x0262, 0x0269, 0x0270, 0x0277, 0x027e, + 0x0285, 0x028c, 0x0293, 0x029a, 0x02a1, 0x02a8, 0x02af, 0x02b6, + 0x02bd, 0x02c4, 0x02cb, 0x02d2, 0x02d9, 0x02e0, 0x02e7, 0x02ee, + // Entry 5C280 - 5C2BF + 0x02f5, 0x02fc, 0x0303, 0x030a, 0x0311, 0x0318, 0x031f, 0x0326, + 0x032d, 0x0334, 0x033b, 0x0342, 0x0001, 0x0156, 0x0001, 0x0158, + 0x000d, 0x0036, 0xffff, 0x0349, 0x034d, 0x0351, 0x3b4d, 0x3e3e, + 0x035d, 0x3e42, 0x0365, 0x3b55, 0x3e46, 0x3b5d, 0x0375, 0x0004, + 0x0175, 0x016f, 0x016c, 0x0172, 0x0001, 0x0079, 0x0015, 0x0001, + 0x0079, 0x0023, 0x0001, 0x0078, 0x1793, 0x0001, 0x0078, 0x179c, + 0x0006, 0x017f, 0x0000, 0x0000, 0x0000, 0x01ea, 0x0200, 0x0002, + 0x0182, 0x01b6, 0x0003, 0x0186, 0x0196, 0x01a6, 0x000e, 0x0036, + // Entry 5C2C0 - 5C2FF + 0xffff, 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, + 0x052d, 0x0532, 0x0537, 0x053d, 0x0543, 0x3b65, 0x000e, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, + 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, 0x441d, 0x000e, 0x0079, + 0xffff, 0x004f, 0x20a4, 0x20ab, 0x20b2, 0x20b9, 0x20c0, 0x20c7, + 0x20ce, 0x20d5, 0x20dc, 0x20e3, 0x009f, 0x20ed, 0x0003, 0x01ba, + 0x01ca, 0x01da, 0x000e, 0x0036, 0xffff, 0x050a, 0x050f, 0x0514, + 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, 0x0537, 0x053d, + // Entry 5C300 - 5C33F + 0x0543, 0x3b65, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, 0x4417, + 0x441a, 0x441d, 0x000e, 0x0079, 0xffff, 0x004f, 0x20a4, 0x20ab, + 0x20b2, 0x20b9, 0x20c0, 0x20c7, 0x20ce, 0x20d5, 0x20dc, 0x20e3, + 0x009f, 0x20ed, 0x0003, 0x01f4, 0x01fa, 0x01ee, 0x0001, 0x01f0, + 0x0002, 0x007a, 0x0000, 0x0010, 0x0001, 0x01f6, 0x0002, 0x007a, + 0x0000, 0x0010, 0x0001, 0x01fc, 0x0002, 0x007a, 0x0000, 0x0010, + 0x0003, 0x0000, 0x0000, 0x0204, 0x0001, 0x0079, 0x002d, 0x000a, + // Entry 5C340 - 5C37F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0212, 0x0002, 0x0215, 0x0248, 0x0001, 0x0217, 0x0003, + 0x021b, 0x022a, 0x0239, 0x000d, 0x0036, 0xffff, 0x00cd, 0x00d1, + 0x00d5, 0x00d9, 0x00dd, 0x00e1, 0x00e5, 0x00e9, 0x00ed, 0x00f1, + 0x00f5, 0x00f9, 0x000d, 0x0036, 0xffff, 0x00cd, 0x00d1, 0x00d5, + 0x00d9, 0x00dd, 0x00e1, 0x00e5, 0x00e9, 0x00ed, 0x00f1, 0x00f5, + 0x00f9, 0x000d, 0x0036, 0xffff, 0x00cd, 0x00d1, 0x00d5, 0x00d9, + 0x00dd, 0x00e1, 0x00e5, 0x00e9, 0x00ed, 0x00f1, 0x00f5, 0x00f9, + // Entry 5C380 - 5C3BF + 0x0001, 0x024a, 0x0003, 0x024e, 0x028d, 0x02cc, 0x003d, 0x0036, + 0xffff, 0x01a5, 0x01ac, 0x01b3, 0x01ba, 0x01c1, 0x01c8, 0x01cf, + 0x01d6, 0x01dd, 0x01e4, 0x01eb, 0x01f2, 0x01f9, 0x0200, 0x0207, + 0x020e, 0x0215, 0x021c, 0x0223, 0x022a, 0x0231, 0x0238, 0x023f, + 0x0246, 0x024d, 0x0254, 0x025b, 0x0262, 0x0269, 0x0270, 0x0277, + 0x027e, 0x0285, 0x028c, 0x0293, 0x029a, 0x02a1, 0x02a8, 0x02af, + 0x02b6, 0x02bd, 0x02c4, 0x02cb, 0x02d2, 0x02d9, 0x02e0, 0x02e7, + 0x02ee, 0x02f5, 0x02fc, 0x0303, 0x030a, 0x0311, 0x0318, 0x031f, + // Entry 5C3C0 - 5C3FF + 0x0326, 0x032d, 0x0334, 0x033b, 0x0342, 0x003d, 0x0036, 0xffff, + 0x01a5, 0x01ac, 0x01b3, 0x01ba, 0x01c1, 0x01c8, 0x01cf, 0x01d6, + 0x01dd, 0x01e4, 0x01eb, 0x01f2, 0x01f9, 0x0200, 0x0207, 0x020e, + 0x0215, 0x021c, 0x0223, 0x022a, 0x0231, 0x0238, 0x023f, 0x0246, + 0x024d, 0x0254, 0x025b, 0x0262, 0x0269, 0x0270, 0x0277, 0x027e, + 0x0285, 0x028c, 0x0293, 0x029a, 0x02a1, 0x02a8, 0x02af, 0x02b6, + 0x02bd, 0x02c4, 0x02cb, 0x02d2, 0x02d9, 0x02e0, 0x02e7, 0x02ee, + 0x02f5, 0x02fc, 0x0303, 0x030a, 0x0311, 0x0318, 0x031f, 0x0326, + // Entry 5C400 - 5C43F + 0x032d, 0x0334, 0x033b, 0x0342, 0x003d, 0x0036, 0xffff, 0x01a5, + 0x01ac, 0x01b3, 0x01ba, 0x01c1, 0x01c8, 0x01cf, 0x01d6, 0x01dd, + 0x01e4, 0x01eb, 0x01f2, 0x01f9, 0x0200, 0x0207, 0x020e, 0x0215, + 0x021c, 0x0223, 0x022a, 0x0231, 0x0238, 0x023f, 0x0246, 0x024d, + 0x0254, 0x025b, 0x0262, 0x0269, 0x0270, 0x0277, 0x027e, 0x0285, + 0x028c, 0x0293, 0x029a, 0x02a1, 0x02a8, 0x02af, 0x02b6, 0x02bd, + 0x02c4, 0x02cb, 0x02d2, 0x02d9, 0x02e0, 0x02e7, 0x02ee, 0x02f5, + 0x02fc, 0x0303, 0x030a, 0x0311, 0x0318, 0x031f, 0x0326, 0x032d, + // Entry 5C440 - 5C47F + 0x0334, 0x033b, 0x0342, 0x0006, 0x0312, 0x0000, 0x0000, 0x0000, + 0x037d, 0x0387, 0x0002, 0x0315, 0x0349, 0x0003, 0x0319, 0x0329, + 0x0339, 0x000e, 0x0036, 0xffff, 0x050a, 0x050f, 0x0514, 0x0519, + 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, 0x0537, 0x053d, 0x0543, + 0x3b65, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, + 0x441d, 0x000e, 0x0079, 0xffff, 0x004f, 0x20a4, 0x20ab, 0x20b2, + 0x20b9, 0x20c0, 0x20c7, 0x20ce, 0x20d5, 0x20dc, 0x20e3, 0x009f, + // Entry 5C480 - 5C4BF + 0x20ed, 0x0003, 0x034d, 0x035d, 0x036d, 0x000e, 0x0036, 0xffff, + 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, + 0x0532, 0x0537, 0x053d, 0x0543, 0x3b65, 0x000e, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, + 0x2424, 0x4414, 0x4417, 0x441a, 0x441d, 0x000e, 0x0079, 0xffff, + 0x004f, 0x20a4, 0x20ab, 0x20b2, 0x20b9, 0x20c0, 0x20c7, 0x20ce, + 0x20d5, 0x20dc, 0x20e3, 0x009f, 0x20ed, 0x0003, 0x0000, 0x0000, + 0x0381, 0x0001, 0x0383, 0x0002, 0x007a, 0x001d, 0x0033, 0x0003, + // Entry 5C4C0 - 5C4FF + 0x0000, 0x0000, 0x038b, 0x0001, 0x0079, 0x002d, 0x0005, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0394, 0x0003, 0x0000, 0x0000, 0x0398, + 0x0001, 0x039a, 0x0001, 0x007a, 0x0046, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x03a6, 0x0000, 0x03b7, 0x0004, 0x03b4, + 0x03ae, 0x03ab, 0x03b1, 0x0001, 0x0036, 0x0719, 0x0001, 0x0036, + 0x04f5, 0x0001, 0x0036, 0x04f5, 0x0001, 0x0036, 0x0503, 0x0004, + 0x03c5, 0x03bf, 0x03bc, 0x03c2, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + // Entry 5C500 - 5C53F + 0x0008, 0x03d1, 0x0436, 0x048d, 0x04c2, 0x05b1, 0x05c7, 0x05d8, + 0x05e9, 0x0002, 0x03d4, 0x0405, 0x0003, 0x03d8, 0x03e7, 0x03f6, + 0x000d, 0x0036, 0xffff, 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, + 0x0523, 0x0528, 0x052d, 0x0532, 0x0537, 0x053d, 0x0543, 0x000d, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, + 0x449e, 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, 0x000d, 0x0079, + 0xffff, 0x004f, 0x20a4, 0x20ab, 0x20b2, 0x20b9, 0x20c0, 0x20c7, + 0x20ce, 0x20d5, 0x20dc, 0x20e3, 0x009f, 0x0003, 0x0409, 0x0418, + // Entry 5C540 - 5C57F + 0x0427, 0x000d, 0x0036, 0xffff, 0x050a, 0x050f, 0x0514, 0x0519, + 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, 0x0537, 0x053d, 0x0543, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, 0x000d, + 0x0079, 0xffff, 0x004f, 0x20a4, 0x20ab, 0x20b2, 0x20b9, 0x20c0, + 0x20c7, 0x20ce, 0x20d5, 0x20dc, 0x20e3, 0x009f, 0x0002, 0x0439, + 0x0463, 0x0005, 0x043f, 0x0448, 0x045a, 0x0000, 0x0451, 0x0007, + 0x0079, 0x00a9, 0x00b0, 0x00b7, 0x00be, 0x00c5, 0x00cc, 0x00d3, + // Entry 5C580 - 5C5BF + 0x0007, 0x0036, 0x0549, 0x3b6b, 0x0094, 0x0098, 0x009c, 0x00a0, + 0x00a4, 0x0007, 0x0079, 0x00a9, 0x00b0, 0x00b7, 0x00be, 0x00c5, + 0x00cc, 0x00d3, 0x0007, 0x0078, 0x17da, 0x17e4, 0x17ee, 0x17f8, + 0x1802, 0x180c, 0x1816, 0x0005, 0x0469, 0x0472, 0x0484, 0x0000, + 0x047b, 0x0007, 0x0079, 0x00a9, 0x00b0, 0x00b7, 0x00be, 0x00c5, + 0x00cc, 0x00d3, 0x0007, 0x0036, 0x0549, 0x3b6b, 0x0094, 0x0098, + 0x009c, 0x00a0, 0x00a4, 0x0007, 0x0079, 0x00a9, 0x00b0, 0x00b7, + 0x00be, 0x00c5, 0x00cc, 0x00d3, 0x0007, 0x0078, 0x17da, 0x17e4, + // Entry 5C5C0 - 5C5FF + 0x17ee, 0x17f8, 0x1802, 0x180c, 0x1816, 0x0002, 0x0490, 0x04a9, + 0x0003, 0x0494, 0x049b, 0x04a2, 0x0005, 0x007a, 0xffff, 0x006b, + 0x0073, 0x007b, 0x0083, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x0005, 0x007a, 0xffff, 0x008b, 0x0098, 0x00a5, + 0x00b2, 0x0003, 0x04ad, 0x04b4, 0x04bb, 0x0005, 0x007a, 0xffff, + 0x006b, 0x0073, 0x007b, 0x0083, 0x0005, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x0005, 0x007a, 0xffff, 0x008b, 0x0098, + 0x00a5, 0x00b2, 0x0002, 0x04c5, 0x053b, 0x0003, 0x04c9, 0x04ef, + // Entry 5C600 - 5C63F + 0x0515, 0x000a, 0x04d7, 0x04da, 0x04d4, 0x04dd, 0x04e3, 0x04e9, + 0x04ec, 0x0000, 0x04e0, 0x04e6, 0x0001, 0x0078, 0x1840, 0x0001, + 0x0078, 0x1847, 0x0001, 0x0078, 0x184e, 0x0001, 0x007a, 0x00bf, + 0x0001, 0x0078, 0x1847, 0x0001, 0x0078, 0x1863, 0x0001, 0x0078, + 0x184e, 0x0001, 0x007a, 0x00c6, 0x0001, 0x0078, 0x1878, 0x000a, + 0x04fd, 0x0500, 0x04fa, 0x0503, 0x0509, 0x050f, 0x0512, 0x0000, + 0x0506, 0x050c, 0x0001, 0x0078, 0x1840, 0x0001, 0x0078, 0x1847, + 0x0001, 0x0078, 0x184e, 0x0001, 0x007a, 0x00bf, 0x0001, 0x0078, + // Entry 5C640 - 5C67F + 0x1847, 0x0001, 0x0078, 0x1863, 0x0001, 0x0078, 0x184e, 0x0001, + 0x007a, 0x00c6, 0x0001, 0x0078, 0x1878, 0x000a, 0x0523, 0x0526, + 0x0520, 0x0529, 0x052f, 0x0535, 0x0538, 0x0000, 0x052c, 0x0532, + 0x0001, 0x0078, 0x1840, 0x0001, 0x0078, 0x1847, 0x0001, 0x0078, + 0x184e, 0x0001, 0x0078, 0x1855, 0x0001, 0x0078, 0x1847, 0x0001, + 0x0078, 0x1863, 0x0001, 0x0078, 0x184e, 0x0001, 0x007a, 0x00c6, + 0x0001, 0x0078, 0x1878, 0x0003, 0x053f, 0x0565, 0x058b, 0x000a, + 0x054d, 0x0550, 0x054a, 0x0553, 0x0559, 0x055f, 0x0562, 0x0000, + // Entry 5C680 - 5C6BF + 0x0556, 0x055c, 0x0001, 0x0078, 0x1840, 0x0001, 0x0078, 0x1847, + 0x0001, 0x0078, 0x184e, 0x0001, 0x007a, 0x00bf, 0x0001, 0x0078, + 0x1847, 0x0001, 0x0078, 0x1863, 0x0001, 0x0078, 0x184e, 0x0001, + 0x007a, 0x00c6, 0x0001, 0x0078, 0x1878, 0x000a, 0x0573, 0x0576, + 0x0570, 0x0579, 0x057f, 0x0585, 0x0588, 0x0000, 0x057c, 0x0582, + 0x0001, 0x0078, 0x1840, 0x0001, 0x0078, 0x1847, 0x0001, 0x0078, + 0x184e, 0x0001, 0x007a, 0x00bf, 0x0001, 0x0078, 0x1847, 0x0001, + 0x0078, 0x1863, 0x0001, 0x0078, 0x184e, 0x0001, 0x007a, 0x00c6, + // Entry 5C6C0 - 5C6FF + 0x0001, 0x0078, 0x1878, 0x000a, 0x0599, 0x059c, 0x0596, 0x059f, + 0x05a5, 0x05ab, 0x05ae, 0x0000, 0x05a2, 0x05a8, 0x0001, 0x0078, + 0x1840, 0x0001, 0x0078, 0x1847, 0x0001, 0x0078, 0x184e, 0x0001, + 0x007a, 0x00bf, 0x0001, 0x0078, 0x1847, 0x0001, 0x0078, 0x1863, + 0x0001, 0x0078, 0x184e, 0x0001, 0x007a, 0x00c6, 0x0001, 0x0078, + 0x1878, 0x0003, 0x05bb, 0x05c1, 0x05b5, 0x0001, 0x05b7, 0x0002, + 0x0078, 0x1889, 0x189a, 0x0001, 0x05bd, 0x0002, 0x0078, 0x1889, + 0x189a, 0x0001, 0x05c3, 0x0002, 0x0078, 0x1889, 0x189a, 0x0004, + // Entry 5C700 - 5C73F + 0x05d5, 0x05cf, 0x05cc, 0x05d2, 0x0001, 0x0036, 0x064a, 0x0001, + 0x0036, 0x065b, 0x0001, 0x0036, 0x065b, 0x0001, 0x0021, 0x0721, + 0x0004, 0x05e6, 0x05e0, 0x05dd, 0x05e3, 0x0001, 0x0079, 0x00e1, + 0x0001, 0x0079, 0x00ef, 0x0001, 0x0078, 0x18d0, 0x0001, 0x0078, + 0x18d9, 0x0004, 0x05f7, 0x05f1, 0x05ee, 0x05f4, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0008, 0x0603, 0x0000, 0x0000, 0x0000, 0x066e, + 0x0681, 0x0000, 0x0692, 0x0002, 0x0606, 0x063a, 0x0003, 0x060a, + // Entry 5C740 - 5C77F + 0x061a, 0x062a, 0x000e, 0x0036, 0x4137, 0x050a, 0x050f, 0x0514, + 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, 0x0537, 0x053d, + 0x0543, 0x3b65, 0x000e, 0x0000, 0x449e, 0x0033, 0x0035, 0x0037, + 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, 0x4417, + 0x441a, 0x441d, 0x000e, 0x0079, 0x20f7, 0x004f, 0x20a4, 0x20ab, + 0x20b2, 0x20b9, 0x20c0, 0x20c7, 0x20ce, 0x20d5, 0x20dc, 0x20e3, + 0x009f, 0x20ed, 0x0003, 0x063e, 0x064e, 0x065e, 0x000e, 0x0036, + 0x4137, 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, + // Entry 5C780 - 5C7BF + 0x052d, 0x0532, 0x0537, 0x053d, 0x0543, 0x3b65, 0x000e, 0x0000, + 0x449e, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, + 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, 0x441d, 0x000e, 0x0079, + 0x20f7, 0x004f, 0x20a4, 0x20ab, 0x20b2, 0x20b9, 0x20c0, 0x20c7, + 0x20ce, 0x20d5, 0x20dc, 0x20e3, 0x009f, 0x20ed, 0x0003, 0x0677, + 0x067c, 0x0672, 0x0001, 0x0674, 0x0001, 0x007a, 0x00cd, 0x0001, + 0x0679, 0x0001, 0x007a, 0x00cd, 0x0001, 0x067e, 0x0001, 0x007a, + 0x00cd, 0x0004, 0x068f, 0x0689, 0x0686, 0x068c, 0x0001, 0x0036, + // Entry 5C7C0 - 5C7FF + 0x0719, 0x0001, 0x0036, 0x04f5, 0x0001, 0x0036, 0x04f5, 0x0001, + 0x0079, 0x0007, 0x0004, 0x06a0, 0x069a, 0x0697, 0x069d, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0008, 0x06ac, 0x0000, 0x0000, 0x0000, + 0x0711, 0x0724, 0x0000, 0x0735, 0x0002, 0x06af, 0x06e0, 0x0003, + 0x06b3, 0x06c2, 0x06d1, 0x000d, 0x0036, 0xffff, 0x050a, 0x050f, + 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, 0x0537, + 0x053d, 0x0543, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, + // Entry 5C800 - 5C83F + 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, 0x4417, + 0x441a, 0x000d, 0x0079, 0xffff, 0x004f, 0x20a4, 0x20ab, 0x20b2, + 0x20b9, 0x20c0, 0x20c7, 0x20ce, 0x20d5, 0x20dc, 0x20e3, 0x009f, + 0x0003, 0x06e4, 0x06f3, 0x0702, 0x000d, 0x0036, 0xffff, 0x050a, + 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, + 0x0537, 0x053d, 0x0543, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, + 0x4417, 0x441a, 0x000d, 0x0079, 0xffff, 0x004f, 0x20a4, 0x20ab, + // Entry 5C840 - 5C87F + 0x20b2, 0x20b9, 0x20c0, 0x20c7, 0x20ce, 0x20d5, 0x20dc, 0x20e3, + 0x009f, 0x0003, 0x071a, 0x071f, 0x0715, 0x0001, 0x0717, 0x0001, + 0x0079, 0x01b2, 0x0001, 0x071c, 0x0001, 0x0079, 0x01b2, 0x0001, + 0x0721, 0x0001, 0x0079, 0x01b2, 0x0004, 0x0732, 0x072c, 0x0729, + 0x072f, 0x0001, 0x0079, 0x002d, 0x0001, 0x0079, 0x0040, 0x0001, + 0x0079, 0x0040, 0x0001, 0x0036, 0x0503, 0x0004, 0x0743, 0x073d, + 0x073a, 0x0740, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x074f, + // Entry 5C880 - 5C8BF + 0x0000, 0x0000, 0x0000, 0x07b4, 0x07bb, 0x0000, 0x9006, 0x0002, + 0x0752, 0x0783, 0x0003, 0x0756, 0x0765, 0x0774, 0x000d, 0x0036, + 0xffff, 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, + 0x052d, 0x0532, 0x0537, 0x053d, 0x0543, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, + 0x2424, 0x4414, 0x4417, 0x441a, 0x000d, 0x0079, 0xffff, 0x004f, + 0x20a4, 0x20ab, 0x20b2, 0x20b9, 0x20c0, 0x20c7, 0x20ce, 0x20d5, + 0x20dc, 0x20e3, 0x009f, 0x0003, 0x0787, 0x0796, 0x07a5, 0x000d, + // Entry 5C8C0 - 5C8FF + 0x0036, 0xffff, 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, + 0x0528, 0x052d, 0x0532, 0x0537, 0x053d, 0x0543, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, + 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, 0x000d, 0x0079, 0xffff, + 0x004f, 0x20a4, 0x20ab, 0x20b2, 0x20b9, 0x20c0, 0x20c7, 0x20ce, + 0x20d5, 0x20dc, 0x20e3, 0x009f, 0x0001, 0x07b6, 0x0001, 0x07b8, + 0x0001, 0x0079, 0x0268, 0x0004, 0x0000, 0x07c3, 0x07c0, 0x07c6, + 0x0001, 0x0036, 0x0719, 0x0001, 0x0036, 0x04f5, 0x0001, 0x0036, + // Entry 5C900 - 5C93F + 0x04f5, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x07d2, 0x0a5d, + 0x0000, 0x0a6e, 0x0003, 0x08c6, 0x09b6, 0x07d6, 0x0001, 0x07d8, + 0x00ec, 0x007a, 0x00da, 0x00ed, 0x0100, 0x0113, 0x0126, 0x0139, + 0x014c, 0x015f, 0x0172, 0x0185, 0x0198, 0x01ab, 0x01c4, 0x01dd, + 0x01f6, 0x020f, 0x0228, 0x023b, 0x024e, 0x0261, 0x0274, 0x0287, + 0x029a, 0x02ad, 0x02c0, 0x02d3, 0x02e6, 0x02f9, 0x030c, 0x031f, + 0x0332, 0x0345, 0x0358, 0x036b, 0x037e, 0x0391, 0x03a4, 0x03b7, + 0x03ca, 0x03dd, 0x03f0, 0x0403, 0x0416, 0x0429, 0x043c, 0x044f, + // Entry 5C940 - 5C97F + 0x0462, 0x0475, 0x0488, 0x049b, 0x04ae, 0x04c1, 0x04d5, 0x04ea, + 0x04ff, 0x0514, 0x0529, 0x053e, 0x0553, 0x0568, 0x057d, 0x0592, + 0x05a7, 0x05bc, 0x05d1, 0x05e6, 0x05fb, 0x0610, 0x0625, 0x063a, + 0x064f, 0x0664, 0x0679, 0x068e, 0x06a3, 0x06b8, 0x06cd, 0x06e2, + 0x06f7, 0x070c, 0x0721, 0x0736, 0x074b, 0x0760, 0x0775, 0x078a, + 0x079f, 0x07b4, 0x07c9, 0x07de, 0x07f3, 0x0808, 0x081d, 0x0832, + 0x0847, 0x085c, 0x0871, 0x0886, 0x089b, 0x08b0, 0x08c5, 0x08da, + 0x08ef, 0x0904, 0x0919, 0x092e, 0x0943, 0x0958, 0x096d, 0x0982, + // Entry 5C980 - 5C9BF + 0x0997, 0x09ac, 0x09c1, 0x09d6, 0x09eb, 0x0a00, 0x0a15, 0x0a2a, + 0x0a3f, 0x0a54, 0x0a69, 0x0a7e, 0x0a93, 0x0aa8, 0x0abd, 0x0ad2, + 0x0ae7, 0x0afc, 0x0b11, 0x0b26, 0x0b3b, 0x0b50, 0x0b65, 0x0b7a, + 0x0b8f, 0x0ba4, 0x0bb9, 0x0bce, 0x0be3, 0x0bf8, 0x0c0d, 0x0c22, + 0x0c37, 0x0c4c, 0x0c61, 0x0c76, 0x0c8b, 0x0ca0, 0x0cb5, 0x0cca, + 0x0cdf, 0x0cf4, 0x0d09, 0x0d1e, 0x0d33, 0x0d48, 0x0d5d, 0x0d72, + 0x0d87, 0x0d9c, 0x0db1, 0x0dc6, 0x0ddb, 0x0df0, 0x0e05, 0x0e1a, + 0x0e2f, 0x0e44, 0x0e59, 0x0e6e, 0x0e83, 0x0e98, 0x0ead, 0x0ec2, + // Entry 5C9C0 - 5C9FF + 0x0ed7, 0x0eec, 0x0f01, 0x0f16, 0x0f2b, 0x0f40, 0x0f55, 0x0f6a, + 0x0f7f, 0x0f94, 0x0fa9, 0x0fbe, 0x0fd3, 0x0fe8, 0x0ffd, 0x1012, + 0x1027, 0x103c, 0x1051, 0x1066, 0x107b, 0x1090, 0x10a5, 0x10ba, + 0x10cf, 0x10e4, 0x10f9, 0x110e, 0x1123, 0x1138, 0x114d, 0x1162, + 0x1177, 0x118c, 0x11a1, 0x11b6, 0x11cb, 0x11e0, 0x11f5, 0x120a, + 0x121f, 0x1234, 0x1249, 0x125e, 0x1273, 0x1288, 0x129d, 0x12b2, + 0x12c7, 0x12dc, 0x12f1, 0x1306, 0x131b, 0x1330, 0x1345, 0x135a, + 0x136f, 0x1384, 0x1399, 0x13a0, 0x13a7, 0x13ae, 0x0001, 0x08c8, + // Entry 5CA00 - 5CA3F + 0x00ec, 0x007a, 0x00da, 0x00ed, 0x0100, 0x0113, 0x0126, 0x0139, + 0x014c, 0x015f, 0x0172, 0x0185, 0x0198, 0x01ab, 0x01c4, 0x01dd, + 0x01f6, 0x020f, 0x0228, 0x023b, 0x024e, 0x0261, 0x0274, 0x0287, + 0x029a, 0x02ad, 0x02c0, 0x02d3, 0x02e6, 0x02f9, 0x030c, 0x031f, + 0x0332, 0x0345, 0x0358, 0x036b, 0x037e, 0x0391, 0x03a4, 0x03b7, + 0x03ca, 0x03dd, 0x03f0, 0x0403, 0x0416, 0x0429, 0x043c, 0x044f, + 0x0462, 0x0475, 0x0488, 0x049b, 0x04ae, 0x04c1, 0x04d5, 0x04ea, + 0x04ff, 0x0514, 0x0529, 0x053e, 0x0553, 0x0568, 0x057d, 0x0592, + // Entry 5CA40 - 5CA7F + 0x05a7, 0x05bc, 0x05d1, 0x05e6, 0x05fb, 0x0610, 0x0625, 0x063a, + 0x064f, 0x0664, 0x0679, 0x068e, 0x06a3, 0x06b8, 0x06cd, 0x06e2, + 0x06f7, 0x070c, 0x0721, 0x0736, 0x074b, 0x0760, 0x0775, 0x078a, + 0x079f, 0x07b4, 0x07c9, 0x07de, 0x07f3, 0x0808, 0x081d, 0x0832, + 0x0847, 0x085c, 0x0871, 0x0886, 0x089b, 0x08b0, 0x08c5, 0x08da, + 0x08ef, 0x0904, 0x0919, 0x092e, 0x0943, 0x0958, 0x096d, 0x0982, + 0x0997, 0x09ac, 0x09c1, 0x09d6, 0x09eb, 0x0a00, 0x0a15, 0x0a2a, + 0x0a3f, 0x0a54, 0x0a69, 0x0a7e, 0x0a93, 0x0aa8, 0x0abd, 0x0ad2, + // Entry 5CA80 - 5CABF + 0x0ae7, 0x0afc, 0x0b11, 0x0b26, 0x0b3b, 0x0b50, 0x0b65, 0x0b7a, + 0x0b8f, 0x0ba4, 0x0bb9, 0x0bce, 0x0be3, 0x0bf8, 0x0c0d, 0x0c22, + 0x0c37, 0x0c4c, 0x0c61, 0x0c76, 0x0c8b, 0x0ca0, 0x0cb5, 0x0cca, + 0x0cdf, 0x0cf4, 0x0d09, 0x0d1e, 0x0d33, 0x0d48, 0x0d5d, 0x0d72, + 0x0d87, 0x0d9c, 0x0db1, 0x0dc6, 0x0ddb, 0x0df0, 0x0e05, 0x0e1a, + 0x0e2f, 0x0e44, 0x0e59, 0x0e6e, 0x0e83, 0x0e98, 0x0ead, 0x0ec2, + 0x0ed7, 0x0eec, 0x0f01, 0x0f16, 0x0f2b, 0x0f40, 0x0f55, 0x0f6a, + 0x0f7f, 0x0f94, 0x0fa9, 0x0fbe, 0x0fd3, 0x0fe8, 0x0ffd, 0x1012, + // Entry 5CAC0 - 5CAFF + 0x1027, 0x103c, 0x1051, 0x1066, 0x107b, 0x1090, 0x10a5, 0x10ba, + 0x10cf, 0x10e4, 0x10f9, 0x110e, 0x1123, 0x1138, 0x114d, 0x1162, + 0x1177, 0x118c, 0x11a1, 0x11b6, 0x11cb, 0x11e0, 0x11f5, 0x120a, + 0x121f, 0x1234, 0x1249, 0x125e, 0x1273, 0x1288, 0x129d, 0x12b2, + 0x12c7, 0x12dc, 0x12f1, 0x1306, 0x131b, 0x1330, 0x1345, 0x135a, + 0x136f, 0x1384, 0x1399, 0x13a0, 0x13a7, 0x13ae, 0x0001, 0x09b8, + 0x00a3, 0x007a, 0x13b5, 0x13c7, 0x13d9, 0x13eb, 0x13fd, 0x140f, + 0x1421, 0x1433, 0x1445, 0x1457, 0x1469, 0x147b, 0x1493, 0x14ab, + // Entry 5CB00 - 5CB3F + 0x14c3, 0x14db, 0x14f3, 0x1505, 0x1517, 0x1529, 0x153b, 0x154d, + 0x155f, 0x1571, 0x1583, 0x1595, 0x15a7, 0x15b9, 0x15cb, 0x15dd, + 0x15ef, 0x1601, 0x1613, 0x1625, 0x1637, 0x1649, 0x165b, 0x166d, + 0x167f, 0x1691, 0x16a3, 0x16b5, 0x16c7, 0x16d9, 0x16eb, 0x16fd, + 0x170f, 0x1721, 0x1733, 0x1745, 0x1757, 0x1769, 0x177c, 0x1790, + 0x17a4, 0x17b8, 0x17cc, 0x17e0, 0x17f4, 0x1808, 0x181c, 0x1830, + 0x1844, 0x1858, 0x186c, 0x1880, 0x1894, 0x18a8, 0x18bc, 0x18d0, + 0x18e4, 0x18f8, 0x190c, 0x1920, 0x1934, 0x1948, 0x195c, 0x1970, + // Entry 5CB40 - 5CB7F + 0x1984, 0x1998, 0x19ac, 0x19c0, 0x19d4, 0x19e8, 0x19fc, 0x1a10, + 0x1a24, 0x1a38, 0x1a4c, 0x1a60, 0x1a74, 0x1a88, 0x1a9c, 0x1ab0, + 0x1ac4, 0x1ad8, 0x1aec, 0x1b00, 0x1b14, 0x1b28, 0x1b3c, 0x1b50, + 0x1b64, 0x1b78, 0x1b8c, 0x1ba0, 0x1bb4, 0x1bc8, 0x1bdc, 0x1bf0, + 0x1c04, 0x1c18, 0x1c2c, 0x1c40, 0x1c54, 0x1c68, 0x1c7c, 0x1c90, + 0x1ca4, 0x1cb8, 0x1ccc, 0x1ce0, 0x1cf4, 0x1d08, 0x1d1c, 0x1d30, + 0x1d44, 0x1d58, 0x1d6c, 0x1d80, 0x1d94, 0x1da8, 0x1dbc, 0x1dd0, + 0x1de4, 0x1df8, 0x1e0c, 0x1e20, 0x1e34, 0x1e48, 0x1e5c, 0x1e70, + // Entry 5CB80 - 5CBBF + 0x1e84, 0x1e98, 0x1eac, 0x1ec0, 0x1ed4, 0x1ee8, 0x1efc, 0x1f10, + 0x1f24, 0x1f38, 0x1f4c, 0x1f60, 0x1f74, 0x1f88, 0x1f9c, 0x1fb0, + 0x1fc4, 0x1fd8, 0x1fec, 0x2000, 0x2014, 0x0004, 0x0a6b, 0x0a65, + 0x0a62, 0x0a68, 0x0001, 0x0036, 0x0719, 0x0001, 0x0036, 0x04f5, + 0x0001, 0x0036, 0x04f5, 0x0001, 0x0079, 0x0275, 0x0004, 0x0a7c, + 0x0a76, 0x0a73, 0x0a79, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0005, + 0x0a85, 0x0000, 0x0000, 0x0000, 0x0aea, 0x0002, 0x0a88, 0x0ab9, + // Entry 5CBC0 - 5CBFF + 0x0003, 0x0a8c, 0x0a9b, 0x0aaa, 0x000d, 0x0036, 0xffff, 0x050a, + 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, + 0x0537, 0x053d, 0x0543, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, + 0x4417, 0x441a, 0x000d, 0x0079, 0xffff, 0x004f, 0x20a4, 0x20ab, + 0x20b2, 0x20b9, 0x20c0, 0x20c7, 0x20ce, 0x20d5, 0x20dc, 0x20e3, + 0x009f, 0x0003, 0x0abd, 0x0acc, 0x0adb, 0x000d, 0x0036, 0xffff, + 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, + // Entry 5CC00 - 5CC3F + 0x0532, 0x0537, 0x053d, 0x0543, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, + 0x4414, 0x4417, 0x441a, 0x000d, 0x0079, 0xffff, 0x004f, 0x20a4, + 0x20ab, 0x20b2, 0x20b9, 0x20c0, 0x20c7, 0x20ce, 0x20d5, 0x20dc, + 0x20e3, 0x009f, 0x0003, 0x0af3, 0x0af8, 0x0aee, 0x0001, 0x0af0, + 0x0001, 0x0079, 0x027f, 0x0001, 0x0af5, 0x0001, 0x0079, 0x027f, + 0x0001, 0x0afa, 0x0001, 0x0079, 0x027f, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0b06, 0x0b1c, 0x0000, 0x0b2d, 0x0003, 0x0b10, + // Entry 5CC40 - 5CC7F + 0x0b16, 0x0b0a, 0x0001, 0x0b0c, 0x0002, 0x0036, 0x105c, 0x1066, + 0x0001, 0x0b12, 0x0002, 0x0036, 0x105c, 0x1066, 0x0001, 0x0b18, + 0x0002, 0x0036, 0x105c, 0x1066, 0x0004, 0x0b2a, 0x0b24, 0x0b21, + 0x0b27, 0x0001, 0x0036, 0x0719, 0x0001, 0x0036, 0x04f5, 0x0001, + 0x0036, 0x04f5, 0x0001, 0x0079, 0x0289, 0x0004, 0x0b3b, 0x0b35, + 0x0b32, 0x0b38, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0042, 0x0b81, + 0x0b86, 0x0b8b, 0x0b90, 0x0ba5, 0x0bba, 0x0bcf, 0x0be4, 0x0bf9, + // Entry 5CC80 - 5CCBF + 0x0c0e, 0x0c23, 0x0c38, 0x0c4d, 0x0c66, 0x0c7f, 0x0c98, 0x0c9d, + 0x0ca2, 0x0ca7, 0x0cbe, 0x0cd5, 0x0cec, 0x0cf1, 0x0cf6, 0x0cfb, + 0x0d00, 0x0d05, 0x0d0a, 0x0d0f, 0x0d14, 0x0d19, 0x0d2b, 0x0d3d, + 0x0d4f, 0x0d61, 0x0d73, 0x0d85, 0x0d97, 0x0da9, 0x0dbb, 0x0dcd, + 0x0ddf, 0x0df1, 0x0e03, 0x0e15, 0x0e27, 0x0e39, 0x0e4b, 0x0e5d, + 0x0e6f, 0x0e81, 0x0e93, 0x0e98, 0x0e9d, 0x0ea2, 0x0eb6, 0x0eca, + 0x0ede, 0x0ef2, 0x0f06, 0x0f1a, 0x0f2e, 0x0f42, 0x0f56, 0x0f5b, + 0x0f60, 0x0001, 0x0b83, 0x0001, 0x007b, 0x0000, 0x0001, 0x0b88, + // Entry 5CCC0 - 5CCFF + 0x0001, 0x007b, 0x0000, 0x0001, 0x0b8d, 0x0001, 0x007b, 0x0000, + 0x0003, 0x0b94, 0x0b97, 0x0b9c, 0x0001, 0x0036, 0x1074, 0x0003, + 0x007b, 0x0007, 0x000e, 0x0015, 0x0002, 0x0b9f, 0x0ba2, 0x0001, + 0x007b, 0x001c, 0x0001, 0x0036, 0x10ad, 0x0003, 0x0ba9, 0x0bac, + 0x0bb1, 0x0001, 0x0036, 0x1074, 0x0003, 0x007b, 0x0007, 0x000e, + 0x0015, 0x0002, 0x0bb4, 0x0bb7, 0x0001, 0x007b, 0x001c, 0x0001, + 0x0036, 0x10ad, 0x0003, 0x0bbe, 0x0bc1, 0x0bc6, 0x0001, 0x0036, + 0x1074, 0x0003, 0x007b, 0x0007, 0x000e, 0x0015, 0x0002, 0x0bc9, + // Entry 5CD00 - 5CD3F + 0x0bcc, 0x0001, 0x007b, 0x001c, 0x0001, 0x0036, 0x10ad, 0x0003, + 0x0bd3, 0x0bd6, 0x0bdb, 0x0001, 0x007b, 0x0026, 0x0003, 0x007b, + 0x002d, 0x0037, 0x0041, 0x0002, 0x0bde, 0x0be1, 0x0001, 0x007b, + 0x004b, 0x0001, 0x007b, 0x005b, 0x0003, 0x0be8, 0x0beb, 0x0bf0, + 0x0001, 0x0078, 0x1b44, 0x0003, 0x007b, 0x002d, 0x0037, 0x0041, + 0x0002, 0x0bf3, 0x0bf6, 0x0001, 0x007b, 0x004b, 0x0001, 0x007b, + 0x005b, 0x0003, 0x0bfd, 0x0c00, 0x0c05, 0x0001, 0x0078, 0x1b44, + 0x0003, 0x007b, 0x002d, 0x0037, 0x0041, 0x0002, 0x0c08, 0x0c0b, + // Entry 5CD40 - 5CD7F + 0x0001, 0x007b, 0x004b, 0x0001, 0x007b, 0x005b, 0x0003, 0x0c12, + 0x0c15, 0x0c1a, 0x0001, 0x0036, 0x054d, 0x0003, 0x0079, 0x02bc, + 0x2101, 0x02d0, 0x0002, 0x0c1d, 0x0c20, 0x0001, 0x007b, 0x006b, + 0x0001, 0x007b, 0x0078, 0x0003, 0x0c27, 0x0c2a, 0x0c2f, 0x0001, + 0x0036, 0x054d, 0x0003, 0x0079, 0x02bc, 0x2101, 0x02d0, 0x0002, + 0x0c32, 0x0c35, 0x0001, 0x007b, 0x006b, 0x0001, 0x007b, 0x0078, + 0x0003, 0x0c3c, 0x0c3f, 0x0c44, 0x0001, 0x0036, 0x054d, 0x0003, + 0x0079, 0x02bc, 0x2101, 0x02d0, 0x0002, 0x0c47, 0x0c4a, 0x0001, + // Entry 5CD80 - 5CDBF + 0x007b, 0x006b, 0x0001, 0x007b, 0x0078, 0x0004, 0x0c52, 0x0c55, + 0x0c5a, 0x0c63, 0x0001, 0x0079, 0x02f6, 0x0003, 0x007b, 0x0085, + 0x008c, 0x0093, 0x0002, 0x0c5d, 0x0c60, 0x0001, 0x007b, 0x009a, + 0x0001, 0x007b, 0x00a4, 0x0001, 0x007b, 0x00ae, 0x0004, 0x0c6b, + 0x0c6e, 0x0c73, 0x0c7c, 0x0001, 0x0079, 0x02f6, 0x0003, 0x007b, + 0x0085, 0x008c, 0x0093, 0x0002, 0x0c76, 0x0c79, 0x0001, 0x007b, + 0x009a, 0x0001, 0x007b, 0x00a4, 0x0001, 0x007b, 0x00ae, 0x0004, + 0x0c84, 0x0c87, 0x0c8c, 0x0c95, 0x0001, 0x0079, 0x02f6, 0x0003, + // Entry 5CDC0 - 5CDFF + 0x007b, 0x0085, 0x008c, 0x0093, 0x0002, 0x0c8f, 0x0c92, 0x0001, + 0x007b, 0x009a, 0x0001, 0x007b, 0x00a4, 0x0001, 0x007b, 0x00ae, + 0x0001, 0x0c9a, 0x0001, 0x007b, 0x00b8, 0x0001, 0x0c9f, 0x0001, + 0x007b, 0x00b8, 0x0001, 0x0ca4, 0x0001, 0x007b, 0x00b8, 0x0003, + 0x0cab, 0x0cae, 0x0cb5, 0x0001, 0x0036, 0x0549, 0x0005, 0x0078, + 0x3bc3, 0x3bca, 0x3bd1, 0x1c18, 0x3b4c, 0x0002, 0x0cb8, 0x0cbb, + 0x0001, 0x007b, 0x00c2, 0x0001, 0x007b, 0x00cc, 0x0003, 0x0cc2, + 0x0cc5, 0x0ccc, 0x0001, 0x0036, 0x0549, 0x0005, 0x0078, 0x3bc3, + // Entry 5CE00 - 5CE3F + 0x3bca, 0x3bd1, 0x1c18, 0x3b4c, 0x0002, 0x0ccf, 0x0cd2, 0x0001, + 0x007b, 0x00c2, 0x0001, 0x007b, 0x00cc, 0x0003, 0x0cd9, 0x0cdc, + 0x0ce3, 0x0001, 0x0036, 0x0549, 0x0005, 0x0078, 0x3bc3, 0x3bca, + 0x3bd1, 0x1c18, 0x3b4c, 0x0002, 0x0ce6, 0x0ce9, 0x0001, 0x007b, + 0x00c2, 0x0001, 0x007b, 0x00cc, 0x0001, 0x0cee, 0x0001, 0x007b, + 0x00d6, 0x0001, 0x0cf3, 0x0001, 0x007b, 0x00d6, 0x0001, 0x0cf8, + 0x0001, 0x007b, 0x00d6, 0x0001, 0x0cfd, 0x0001, 0x007b, 0x00e0, + 0x0001, 0x0d02, 0x0001, 0x007b, 0x00e0, 0x0001, 0x0d07, 0x0001, + // Entry 5CE40 - 5CE7F + 0x007b, 0x00e0, 0x0001, 0x0d0c, 0x0001, 0x007b, 0x00ea, 0x0001, + 0x0d11, 0x0001, 0x007b, 0x00ea, 0x0001, 0x0d16, 0x0001, 0x007b, + 0x00ea, 0x0003, 0x0000, 0x0d1d, 0x0d22, 0x0003, 0x007b, 0x00f4, + 0x00fe, 0x0108, 0x0002, 0x0d25, 0x0d28, 0x0001, 0x007b, 0x0112, + 0x0001, 0x007b, 0x0122, 0x0003, 0x0000, 0x0d2f, 0x0d34, 0x0003, + 0x007b, 0x00f4, 0x00fe, 0x0108, 0x0002, 0x0d37, 0x0d3a, 0x0001, + 0x007b, 0x0112, 0x0001, 0x007b, 0x0122, 0x0003, 0x0000, 0x0d41, + 0x0d46, 0x0003, 0x007b, 0x00f4, 0x00fe, 0x0108, 0x0002, 0x0d49, + // Entry 5CE80 - 5CEBF + 0x0d4c, 0x0001, 0x007b, 0x0112, 0x0001, 0x007b, 0x0122, 0x0003, + 0x0000, 0x0d53, 0x0d58, 0x0003, 0x007b, 0x0132, 0x013c, 0x0146, + 0x0002, 0x0d5b, 0x0d5e, 0x0001, 0x007b, 0x0150, 0x0001, 0x007b, + 0x0160, 0x0003, 0x0000, 0x0d65, 0x0d6a, 0x0003, 0x007b, 0x0132, + 0x013c, 0x0146, 0x0002, 0x0d6d, 0x0d70, 0x0001, 0x007b, 0x0150, + 0x0001, 0x007b, 0x0160, 0x0003, 0x0000, 0x0d77, 0x0d7c, 0x0003, + 0x007b, 0x0132, 0x013c, 0x0146, 0x0002, 0x0d7f, 0x0d82, 0x0001, + 0x007b, 0x0150, 0x0001, 0x007b, 0x0160, 0x0003, 0x0000, 0x0d89, + // Entry 5CEC0 - 5CEFF + 0x0d8e, 0x0003, 0x007b, 0x0170, 0x017a, 0x0184, 0x0002, 0x0d91, + 0x0d94, 0x0001, 0x007b, 0x018e, 0x0001, 0x007b, 0x019e, 0x0003, + 0x0000, 0x0d9b, 0x0da0, 0x0003, 0x007b, 0x0170, 0x017a, 0x0184, + 0x0002, 0x0da3, 0x0da6, 0x0001, 0x007b, 0x018e, 0x0001, 0x007b, + 0x019e, 0x0003, 0x0000, 0x0dad, 0x0db2, 0x0003, 0x007b, 0x0170, + 0x017a, 0x0184, 0x0002, 0x0db5, 0x0db8, 0x0001, 0x007b, 0x018e, + 0x0001, 0x007b, 0x019e, 0x0003, 0x0000, 0x0dbf, 0x0dc4, 0x0003, + 0x007b, 0x01ae, 0x01b8, 0x01c2, 0x0002, 0x0dc7, 0x0dca, 0x0001, + // Entry 5CF00 - 5CF3F + 0x007b, 0x01cc, 0x0001, 0x007b, 0x01dc, 0x0003, 0x0000, 0x0dd1, + 0x0dd6, 0x0003, 0x007b, 0x01ae, 0x01b8, 0x01c2, 0x0002, 0x0dd9, + 0x0ddc, 0x0001, 0x007b, 0x01cc, 0x0001, 0x007b, 0x01dc, 0x0003, + 0x0000, 0x0de3, 0x0de8, 0x0003, 0x007b, 0x01ae, 0x01b8, 0x01c2, + 0x0002, 0x0deb, 0x0dee, 0x0001, 0x007b, 0x01cc, 0x0001, 0x007b, + 0x01dc, 0x0003, 0x0000, 0x0df5, 0x0dfa, 0x0003, 0x007b, 0x01ec, + 0x01f6, 0x0200, 0x0002, 0x0dfd, 0x0e00, 0x0001, 0x007b, 0x020a, + 0x0001, 0x007b, 0x021a, 0x0003, 0x0000, 0x0e07, 0x0e0c, 0x0003, + // Entry 5CF40 - 5CF7F + 0x007b, 0x01ec, 0x01f6, 0x0200, 0x0002, 0x0e0f, 0x0e12, 0x0001, + 0x007b, 0x020a, 0x0001, 0x007b, 0x021a, 0x0003, 0x0000, 0x0e19, + 0x0e1e, 0x0003, 0x007b, 0x01ec, 0x01f6, 0x0200, 0x0002, 0x0e21, + 0x0e24, 0x0001, 0x007b, 0x020a, 0x0001, 0x007b, 0x021a, 0x0003, + 0x0000, 0x0e2b, 0x0e30, 0x0003, 0x007b, 0x022a, 0x0234, 0x023e, + 0x0002, 0x0e33, 0x0e36, 0x0001, 0x007b, 0x0248, 0x0001, 0x007b, + 0x0258, 0x0003, 0x0000, 0x0e3d, 0x0e42, 0x0003, 0x007b, 0x022a, + 0x0234, 0x023e, 0x0002, 0x0e45, 0x0e48, 0x0001, 0x007b, 0x0248, + // Entry 5CF80 - 5CFBF + 0x0001, 0x007b, 0x0258, 0x0003, 0x0000, 0x0e4f, 0x0e54, 0x0003, + 0x007b, 0x022a, 0x0234, 0x023e, 0x0002, 0x0e57, 0x0e5a, 0x0001, + 0x007b, 0x0248, 0x0001, 0x007b, 0x0258, 0x0003, 0x0000, 0x0e61, + 0x0e66, 0x0003, 0x007b, 0x0268, 0x0272, 0x027c, 0x0002, 0x0e69, + 0x0e6c, 0x0001, 0x007b, 0x0286, 0x0001, 0x007b, 0x0296, 0x0003, + 0x0000, 0x0e73, 0x0e78, 0x0003, 0x007b, 0x0268, 0x0272, 0x027c, + 0x0002, 0x0e7b, 0x0e7e, 0x0001, 0x007b, 0x0286, 0x0001, 0x007b, + 0x0296, 0x0003, 0x0000, 0x0e85, 0x0e8a, 0x0003, 0x007b, 0x0268, + // Entry 5CFC0 - 5CFFF + 0x0272, 0x027c, 0x0002, 0x0e8d, 0x0e90, 0x0001, 0x007b, 0x0286, + 0x0001, 0x007b, 0x0296, 0x0001, 0x0e95, 0x0001, 0x0078, 0x1e91, + 0x0001, 0x0e9a, 0x0001, 0x0078, 0x1e91, 0x0001, 0x0e9f, 0x0001, + 0x0078, 0x1e91, 0x0003, 0x0ea6, 0x0ea9, 0x0ead, 0x0001, 0x0079, + 0x044d, 0x0002, 0x007b, 0xffff, 0x02a6, 0x0002, 0x0eb0, 0x0eb3, + 0x0001, 0x007b, 0x02bc, 0x0001, 0x007b, 0x02c9, 0x0003, 0x0eba, + 0x0ebd, 0x0ec1, 0x0001, 0x0079, 0x044d, 0x0002, 0x007b, 0xffff, + 0x02a6, 0x0002, 0x0ec4, 0x0ec7, 0x0001, 0x007b, 0x02bc, 0x0001, + // Entry 5D000 - 5D03F + 0x007b, 0x02c9, 0x0003, 0x0ece, 0x0ed1, 0x0ed5, 0x0001, 0x0079, + 0x044d, 0x0002, 0x007b, 0xffff, 0x02a6, 0x0002, 0x0ed8, 0x0edb, + 0x0001, 0x007b, 0x02bc, 0x0001, 0x007b, 0x02c9, 0x0003, 0x0ee2, + 0x0ee5, 0x0ee9, 0x0001, 0x0079, 0x047d, 0x0002, 0x007b, 0xffff, + 0x02d6, 0x0002, 0x0eec, 0x0eef, 0x0001, 0x007b, 0x02dd, 0x0001, + 0x007b, 0x02ea, 0x0003, 0x0ef6, 0x0ef9, 0x0efd, 0x0001, 0x0036, + 0x190a, 0x0002, 0x007b, 0xffff, 0x02d6, 0x0002, 0x0f00, 0x0f03, + 0x0001, 0x007b, 0x02dd, 0x0001, 0x007b, 0x02ea, 0x0003, 0x0f0a, + // Entry 5D040 - 5D07F + 0x0f0d, 0x0f11, 0x0001, 0x0036, 0x190a, 0x0002, 0x007b, 0xffff, + 0x02d6, 0x0002, 0x0f14, 0x0f17, 0x0001, 0x007b, 0x02dd, 0x0001, + 0x007b, 0x02ea, 0x0003, 0x0f1e, 0x0f21, 0x0f25, 0x0001, 0x0036, + 0x1944, 0x0002, 0x007b, 0xffff, 0x02f7, 0x0002, 0x0f28, 0x0f2b, + 0x0001, 0x007b, 0x02fe, 0x0001, 0x007b, 0x030b, 0x0003, 0x0f32, + 0x0f35, 0x0f39, 0x0001, 0x0036, 0x1944, 0x0002, 0x007b, 0xffff, + 0x02f7, 0x0002, 0x0f3c, 0x0f3f, 0x0001, 0x007b, 0x0318, 0x0001, + 0x0036, 0x196c, 0x0003, 0x0f46, 0x0f49, 0x0f4d, 0x0001, 0x0036, + // Entry 5D080 - 5D0BF + 0x1944, 0x0002, 0x007b, 0xffff, 0x02f7, 0x0002, 0x0f50, 0x0f53, + 0x0001, 0x007b, 0x0318, 0x0001, 0x0036, 0x196c, 0x0001, 0x0f58, + 0x0001, 0x0079, 0x04b5, 0x0001, 0x0f5d, 0x0001, 0x0079, 0x04b5, + 0x0001, 0x0f62, 0x0001, 0x0079, 0x04b5, 0x0004, 0x0f6a, 0x0f6f, + 0x0f74, 0x0f83, 0x0003, 0x0000, 0x1dc7, 0x4333, 0x432f, 0x0003, + 0x0079, 0x04bc, 0x2108, 0x2118, 0x0002, 0x0000, 0x0f77, 0x0003, + 0x0000, 0x0f7e, 0x0f7b, 0x0001, 0x007b, 0x0322, 0x0003, 0x0079, + 0xffff, 0x04eb, 0x04fe, 0x0002, 0x0000, 0x0f86, 0x0003, 0x0f8a, + // Entry 5D0C0 - 5D0FF + 0x10ca, 0x102a, 0x009e, 0x007b, 0xffff, 0xffff, 0xffff, 0xffff, + 0x03b7, 0x03fc, 0x0486, 0x04c2, 0x0507, 0x054c, 0x0591, 0x05df, + 0x0624, 0x06e1, 0x071d, 0x0759, 0x07a7, 0x07ec, 0x0828, 0x087f, + 0x08df, 0x0936, 0x098d, 0x09d2, 0x0a20, 0xffff, 0xffff, 0x0a82, + 0xffff, 0x0ae0, 0xffff, 0x0b39, 0x0b6c, 0x0b9f, 0x0bd2, 0xffff, + 0xffff, 0x0c34, 0x0c79, 0x0cbe, 0xffff, 0xffff, 0xffff, 0x0d2a, + 0xffff, 0x0d88, 0x0dbb, 0xffff, 0x0e01, 0x0e34, 0x0e82, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0f19, 0xffff, 0xffff, 0x0f90, 0x0fe7, + // Entry 5D100 - 5D13F + 0xffff, 0xffff, 0x106e, 0x10c8, 0x10fb, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x11bb, 0x11ee, 0x123c, 0x1278, 0x12ab, + 0xffff, 0xffff, 0x1373, 0xffff, 0x13b6, 0xffff, 0xffff, 0x1458, + 0xffff, 0x14e3, 0xffff, 0xffff, 0xffff, 0xffff, 0x1574, 0xffff, + 0x15c6, 0x161d, 0x1674, 0x16b9, 0xffff, 0xffff, 0xffff, 0x171f, + 0x1776, 0x17b2, 0xffff, 0xffff, 0x180e, 0x18a8, 0x18f6, 0x193b, + 0xffff, 0xffff, 0x19a9, 0x19e5, 0x1a18, 0xffff, 0x1a6d, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x1b86, 0x1bc2, 0x1bfe, 0xffff, + // Entry 5D140 - 5D17F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1cbc, 0xffff, + 0xffff, 0x1d15, 0xffff, 0x1d55, 0xffff, 0x1db3, 0x1def, 0x1e46, + 0xffff, 0x1e9e, 0x1eda, 0xffff, 0xffff, 0xffff, 0x1f67, 0x1fac, + 0xffff, 0xffff, 0x0332, 0x0441, 0x0660, 0x069c, 0xffff, 0xffff, + 0x149d, 0x1b18, 0x009e, 0x007b, 0x036e, 0x037e, 0x0391, 0x03a4, + 0x03ca, 0x040f, 0x0496, 0x04d5, 0x051a, 0x055f, 0x05a7, 0x05f2, + 0x0634, 0x06f1, 0x072d, 0x076f, 0x07ba, 0x07fc, 0x0841, 0x089b, + 0x08f8, 0x094f, 0x09a0, 0x09e8, 0x0a30, 0x0a5c, 0x0a69, 0x0a95, + // Entry 5D180 - 5D1BF + 0x0ac7, 0x0af0, 0x0b29, 0x0b46, 0x0b79, 0x0bac, 0x0be2, 0x0c0e, + 0x0c1e, 0x0c47, 0x0c8c, 0x0ccb, 0x0cf1, 0x0d01, 0x0d1a, 0x0d3d, + 0x0d6f, 0x0d95, 0x0dc8, 0x0dee, 0x0e0e, 0x0e4a, 0x0e8f, 0x0eb5, + 0x0ed1, 0x0ef3, 0x0f09, 0x0f2c, 0x0f5e, 0x0f77, 0x0fa9, 0x1000, + 0x104b, 0x105e, 0x1088, 0x10d5, 0x110b, 0x1137, 0x1144, 0x1154, + 0x1167, 0x1183, 0x119f, 0x11c8, 0x1204, 0x124c, 0x1285, 0x12d7, + 0x133b, 0x1357, 0x1380, 0x13a6, 0x13d5, 0x141f, 0x1445, 0x146b, + 0x14d0, 0x14f3, 0x151f, 0x1532, 0x1545, 0x155e, 0x1587, 0x15b9, + // Entry 5D1C0 - 5D1FF + 0x15df, 0x1636, 0x1687, 0x16c9, 0x16f5, 0x1702, 0x170f, 0x1738, + 0x1786, 0x17c2, 0x17ee, 0x17fb, 0x1834, 0x18be, 0x1909, 0x194e, + 0x1980, 0x198d, 0x19b9, 0x19f2, 0x1a28, 0x1a54, 0x1a92, 0x1ae8, + 0x1afb, 0x1b0b, 0x1b66, 0x1b76, 0x1b96, 0x1bd2, 0x1c0e, 0x1c3a, + 0x1c4a, 0x1c60, 0x1c76, 0x1c8c, 0x1c9c, 0x1ca9, 0x1cc9, 0x1cef, + 0x1d05, 0x1d22, 0x1d48, 0x1d6b, 0x1da3, 0x1dc3, 0x1e08, 0x1e59, + 0x1e8b, 0x1eae, 0x1ef0, 0x1f28, 0x1f3b, 0x1f4b, 0x1f7a, 0x1fc2, + 0x103e, 0x188c, 0x0342, 0x0454, 0x0670, 0x06af, 0x0b1c, 0x1438, + // Entry 5D200 - 5D23F + 0x14aa, 0x1b2e, 0x009e, 0x007b, 0xffff, 0xffff, 0xffff, 0xffff, + 0x03e3, 0x0428, 0x04ac, 0x04ee, 0x0533, 0x0578, 0x05c3, 0x060b, + 0x064a, 0x0707, 0x0743, 0x078b, 0x07d3, 0x0812, 0x0860, 0x08bd, + 0x0917, 0x096e, 0x09b9, 0x0a04, 0x0a46, 0xffff, 0xffff, 0x0aae, + 0xffff, 0x0b06, 0xffff, 0x0b59, 0x0b8c, 0x0bbf, 0x0bf8, 0xffff, + 0xffff, 0x0c60, 0x0ca5, 0x0cde, 0xffff, 0xffff, 0xffff, 0x0d56, + 0xffff, 0x0da8, 0x0ddb, 0xffff, 0x0e21, 0x0e66, 0x0ea2, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0f45, 0xffff, 0xffff, 0x0fc8, 0x101f, + // Entry 5D240 - 5D27F + 0xffff, 0xffff, 0x10a8, 0x10e8, 0x1121, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x11db, 0x1220, 0x1262, 0x1298, 0x1309, + 0xffff, 0xffff, 0x1393, 0xffff, 0x13fa, 0xffff, 0xffff, 0x1484, + 0xffff, 0x1509, 0xffff, 0xffff, 0xffff, 0xffff, 0x15a0, 0xffff, + 0x15fe, 0x1655, 0x16a0, 0x16df, 0xffff, 0xffff, 0xffff, 0x1757, + 0x179c, 0x17d8, 0xffff, 0xffff, 0x1860, 0x18da, 0x1922, 0x1967, + 0xffff, 0xffff, 0x19cf, 0x1a05, 0x1a3e, 0xffff, 0x1abd, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x1bac, 0x1be8, 0x1c24, 0xffff, + // Entry 5D280 - 5D2BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1cdc, 0xffff, + 0xffff, 0x1d35, 0xffff, 0x1d87, 0xffff, 0x1dd9, 0x1e27, 0x1e72, + 0xffff, 0x1ec4, 0x1f0c, 0xffff, 0xffff, 0xffff, 0x1f93, 0x1fde, + 0xffff, 0xffff, 0x0358, 0x046d, 0x0686, 0x06c8, 0xffff, 0xffff, + 0x14bd, 0x1b4a, 0x0002, 0x0003, 0x007d, 0x0012, 0x0016, 0x0024, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0039, 0x0047, 0x0000, 0x0000, + 0x0055, 0x0000, 0x0000, 0x0000, 0x0000, 0x0061, 0x0000, 0x006f, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x001f, 0x0000, + // Entry 5D2C0 - 5D2FF + 0x9006, 0x0001, 0x0021, 0x0001, 0x007c, 0x0000, 0x0006, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x002b, 0x0004, 0x0000, 0x0033, + 0x0030, 0x0036, 0x0001, 0x0036, 0x0379, 0x0001, 0x0036, 0x0389, + 0x0001, 0x0036, 0x0389, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0042, 0x0000, 0x0000, 0x0001, 0x0044, 0x0001, 0x007c, + 0x0008, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0050, + 0x0000, 0x0000, 0x0001, 0x0052, 0x0001, 0x0000, 0x2418, 0x0006, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x005c, 0x0001, 0x005e, + // Entry 5D300 - 5D33F + 0x0001, 0x007c, 0x0000, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x006a, 0x0000, 0x9006, 0x0001, 0x006c, 0x0001, 0x007c, + 0x0000, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0078, + 0x0000, 0x9006, 0x0001, 0x007a, 0x0001, 0x007c, 0x0000, 0x003d, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 5D340 - 5D37F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x00bb, 0x0003, 0x0000, 0x0000, + 0x00bf, 0x0002, 0x00c2, 0x00c5, 0x0001, 0x007b, 0x0318, 0x0001, + 0x0036, 0x196c, 0x0002, 0x0003, 0x0061, 0x0012, 0x0000, 0x0016, + 0x0000, 0x0000, 0x0000, 0x0000, 0x002b, 0x0039, 0x0000, 0x0000, + 0x0047, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0053, + // Entry 5D380 - 5D3BF + 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x001d, 0x0004, + 0x0000, 0x0025, 0x0022, 0x0028, 0x0001, 0x0036, 0x0379, 0x0001, + 0x0036, 0x0389, 0x0001, 0x0036, 0x0389, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0034, 0x0000, 0x0000, 0x0001, 0x0036, + 0x0001, 0x007c, 0x0008, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0042, 0x0000, 0x0000, 0x0001, 0x0044, 0x0001, 0x0000, + 0x2418, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x004e, + 0x0001, 0x0050, 0x0001, 0x007c, 0x0000, 0x0008, 0x0000, 0x0000, + // Entry 5D3C0 - 5D3FF + 0x0000, 0x0000, 0x0000, 0x005c, 0x0000, 0x9006, 0x0001, 0x005e, + 0x0001, 0x007c, 0x0000, 0x003d, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 5D400 - 5D43F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x009f, 0x0003, 0x0000, 0x0000, 0x00a3, 0x0002, 0x00a6, 0x00a9, + 0x0001, 0x007b, 0x0318, 0x0001, 0x0036, 0x196c, 0x0003, 0x0004, + 0x007c, 0x00c7, 0x0012, 0x0017, 0x0023, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0038, 0x0046, 0x0000, 0x0000, 0x0054, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0060, 0x0000, 0x006e, 0x0006, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x001e, 0x0001, 0x0020, 0x0001, 0x007c, + 0x0000, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x002a, + // Entry 5D440 - 5D47F + 0x0004, 0x0000, 0x0032, 0x002f, 0x0035, 0x0001, 0x0036, 0x0379, + 0x0001, 0x0036, 0x0389, 0x0001, 0x0036, 0x0389, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0041, 0x0000, 0x0000, 0x0001, + 0x0043, 0x0001, 0x007c, 0x0014, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x004f, 0x0000, 0x0000, 0x0001, 0x0051, 0x0001, + 0x0015, 0x14be, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x005b, 0x0001, 0x005d, 0x0001, 0x007c, 0x0000, 0x0008, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0069, 0x0000, 0x9006, 0x0001, + // Entry 5D480 - 5D4BF + 0x006b, 0x0001, 0x007c, 0x0000, 0x0008, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0077, 0x0000, 0x9006, 0x0001, 0x0079, 0x0001, + 0x007c, 0x0000, 0x003d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 5D4C0 - 5D4FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00ba, + 0x0003, 0x0000, 0x0000, 0x00be, 0x0002, 0x00c1, 0x00c4, 0x0001, + 0x007b, 0x0318, 0x0001, 0x0036, 0x196c, 0x0004, 0x0000, 0x0000, + 0x0000, 0x00cc, 0x0001, 0x00ce, 0x0003, 0x0000, 0x0000, 0x00d2, + 0x007d, 0x001f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 5D500 - 5D53F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 5D540 - 5D57F + 0x304a, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x304e, 0x0003, + 0x0004, 0x114b, 0x1572, 0x0012, 0x0017, 0x0055, 0x0408, 0x04b4, + 0x0856, 0x0902, 0x091b, 0x0946, 0x0b79, 0x0c22, 0x0cc5, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0d68, 0x1067, 0x110a, 0x0008, 0x0000, + // Entry 5D580 - 5D5BF + 0x0000, 0x0000, 0x0000, 0x0020, 0x0033, 0x0000, 0x0044, 0x0003, + 0x0029, 0x002e, 0x0024, 0x0001, 0x0026, 0x0001, 0x0078, 0x176c, + 0x0001, 0x002b, 0x0001, 0x0078, 0x176c, 0x0001, 0x0030, 0x0001, + 0x0078, 0x176c, 0x0004, 0x0041, 0x003b, 0x0038, 0x003e, 0x0001, + 0x0036, 0x0719, 0x0001, 0x0036, 0x04f5, 0x0001, 0x0036, 0x04f5, + 0x0001, 0x0036, 0x0503, 0x0004, 0x0052, 0x004c, 0x0049, 0x004f, + 0x0001, 0x0078, 0x17d3, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x000a, 0x0060, 0x0000, 0x0000, + // Entry 5D5C0 - 5D5FF + 0x0000, 0x0000, 0x03e6, 0x0000, 0x03f7, 0x00c5, 0x00d9, 0x0002, + 0x0063, 0x0094, 0x0003, 0x0067, 0x0076, 0x0085, 0x000d, 0x0036, + 0xffff, 0x0036, 0x413f, 0x4146, 0x414d, 0x4154, 0x415b, 0x4162, + 0x4169, 0x4170, 0x4177, 0x3b22, 0x3b29, 0x000d, 0x0036, 0xffff, + 0x0090, 0x0094, 0x0098, 0x009c, 0x00a0, 0x00a4, 0x00a8, 0x00ac, + 0x00b0, 0x00b4, 0x3b30, 0x3b34, 0x000d, 0x0036, 0xffff, 0x0036, + 0x413f, 0x4146, 0x414d, 0x4154, 0x415b, 0x4162, 0x4169, 0x4170, + 0x4177, 0x3b22, 0x3b29, 0x0003, 0x0098, 0x00a7, 0x00b6, 0x000d, + // Entry 5D600 - 5D63F + 0x0036, 0xffff, 0x0036, 0x413f, 0x4146, 0x414d, 0x4154, 0x415b, + 0x4162, 0x4169, 0x4170, 0x4177, 0x3b22, 0x3b29, 0x000d, 0x0036, + 0xffff, 0x0090, 0x0094, 0x0098, 0x009c, 0x00a0, 0x00a4, 0x00a8, + 0x00ac, 0x00b0, 0x00b4, 0x3b30, 0x3b34, 0x000d, 0x0036, 0xffff, + 0x0036, 0x413f, 0x4146, 0x414d, 0x4154, 0x415b, 0x4162, 0x4169, + 0x4170, 0x4177, 0x3b22, 0x3b29, 0x0003, 0x00c9, 0x00d4, 0x00ce, + 0x0003, 0x0036, 0x00c6, 0x00c6, 0x00c6, 0x0004, 0x0036, 0xffff, + 0xffff, 0xffff, 0x00c6, 0x0003, 0x0036, 0x00c6, 0x00c6, 0x00c6, + // Entry 5D640 - 5D67F + 0x0006, 0x00e0, 0x0113, 0x01d6, 0x0299, 0x02f0, 0x03b3, 0x0001, + 0x00e2, 0x0003, 0x00e6, 0x00f5, 0x0104, 0x000d, 0x0036, 0xffff, + 0x00cd, 0x00d1, 0x00d5, 0x00d9, 0x00dd, 0x00e1, 0x00e5, 0x00e9, + 0x00ed, 0x00f1, 0x00f5, 0x00f9, 0x000d, 0x0036, 0xffff, 0x00cd, + 0x00d1, 0x00d5, 0x00d9, 0x00dd, 0x00e1, 0x00e5, 0x00e9, 0x00ed, + 0x00f1, 0x00f5, 0x00f9, 0x000d, 0x0036, 0xffff, 0x00cd, 0x00d1, + 0x00d5, 0x00d9, 0x00dd, 0x00e1, 0x00e5, 0x00e9, 0x00ed, 0x00f1, + 0x00f5, 0x00f9, 0x0001, 0x0115, 0x0003, 0x0119, 0x0158, 0x0197, + // Entry 5D680 - 5D6BF + 0x003d, 0x0036, 0xffff, 0x01a5, 0x01ac, 0x01b3, 0x01ba, 0x01c1, + 0x01c8, 0x01cf, 0x01d6, 0x01dd, 0x01e4, 0x01eb, 0x01f2, 0x01f9, + 0x0200, 0x0207, 0x020e, 0x0215, 0x021c, 0x0223, 0x022a, 0x0231, + 0x0238, 0x023f, 0x0246, 0x024d, 0x0254, 0x025b, 0x0262, 0x0269, + 0x0270, 0x0277, 0x027e, 0x0285, 0x028c, 0x0293, 0x029a, 0x02a1, + 0x02a8, 0x02af, 0x02b6, 0x02bd, 0x02c4, 0x02cb, 0x02d2, 0x02d9, + 0x02e0, 0x02e7, 0x02ee, 0x02f5, 0x02fc, 0x0303, 0x030a, 0x0311, + 0x0318, 0x031f, 0x0326, 0x032d, 0x0334, 0x033b, 0x0342, 0x003d, + // Entry 5D6C0 - 5D6FF + 0x0036, 0xffff, 0x01a5, 0x01ac, 0x01b3, 0x01ba, 0x01c1, 0x01c8, + 0x01cf, 0x01d6, 0x01dd, 0x01e4, 0x01eb, 0x01f2, 0x01f9, 0x0200, + 0x0207, 0x020e, 0x0215, 0x021c, 0x0223, 0x022a, 0x0231, 0x0238, + 0x023f, 0x0246, 0x024d, 0x0254, 0x025b, 0x0262, 0x0269, 0x0270, + 0x0277, 0x027e, 0x0285, 0x028c, 0x0293, 0x029a, 0x02a1, 0x02a8, + 0x02af, 0x02b6, 0x02bd, 0x02c4, 0x02cb, 0x02d2, 0x02d9, 0x02e0, + 0x02e7, 0x02ee, 0x02f5, 0x02fc, 0x0303, 0x030a, 0x0311, 0x0318, + 0x031f, 0x0326, 0x032d, 0x0334, 0x033b, 0x0342, 0x003d, 0x0036, + // Entry 5D700 - 5D73F + 0xffff, 0x01a5, 0x01ac, 0x01b3, 0x01ba, 0x01c1, 0x01c8, 0x01cf, + 0x01d6, 0x01dd, 0x01e4, 0x01eb, 0x01f2, 0x01f9, 0x0200, 0x0207, + 0x020e, 0x0215, 0x021c, 0x0223, 0x022a, 0x0231, 0x0238, 0x023f, + 0x0246, 0x024d, 0x0254, 0x025b, 0x0262, 0x0269, 0x0270, 0x0277, + 0x027e, 0x0285, 0x028c, 0x0293, 0x029a, 0x02a1, 0x02a8, 0x02af, + 0x02b6, 0x02bd, 0x02c4, 0x02cb, 0x02d2, 0x02d9, 0x02e0, 0x02e7, + 0x02ee, 0x02f5, 0x02fc, 0x0303, 0x030a, 0x0311, 0x0318, 0x031f, + 0x0326, 0x032d, 0x0334, 0x033b, 0x0342, 0x0001, 0x01d8, 0x0003, + // Entry 5D740 - 5D77F + 0x01dc, 0x021b, 0x025a, 0x003d, 0x0036, 0xffff, 0x01a5, 0x01ac, + 0x01b3, 0x01ba, 0x01c1, 0x01c8, 0x01cf, 0x01d6, 0x01dd, 0x01e4, + 0x01eb, 0x01f2, 0x01f9, 0x0200, 0x0207, 0x020e, 0x0215, 0x021c, + 0x0223, 0x022a, 0x0231, 0x0238, 0x023f, 0x0246, 0x024d, 0x0254, + 0x025b, 0x0262, 0x0269, 0x0270, 0x0277, 0x027e, 0x0285, 0x028c, + 0x0293, 0x029a, 0x02a1, 0x02a8, 0x02af, 0x02b6, 0x02bd, 0x02c4, + 0x02cb, 0x02d2, 0x02d9, 0x02e0, 0x02e7, 0x02ee, 0x02f5, 0x02fc, + 0x0303, 0x030a, 0x0311, 0x0318, 0x031f, 0x0326, 0x032d, 0x0334, + // Entry 5D780 - 5D7BF + 0x033b, 0x0342, 0x003d, 0x0036, 0xffff, 0x01a5, 0x01ac, 0x01b3, + 0x01ba, 0x01c1, 0x01c8, 0x01cf, 0x01d6, 0x01dd, 0x01e4, 0x01eb, + 0x01f2, 0x01f9, 0x0200, 0x0207, 0x020e, 0x0215, 0x021c, 0x0223, + 0x022a, 0x0231, 0x0238, 0x023f, 0x0246, 0x024d, 0x0254, 0x025b, + 0x0262, 0x0269, 0x0270, 0x0277, 0x027e, 0x0285, 0x028c, 0x0293, + 0x029a, 0x02a1, 0x02a8, 0x02af, 0x02b6, 0x02bd, 0x02c4, 0x02cb, + 0x02d2, 0x02d9, 0x02e0, 0x02e7, 0x02ee, 0x02f5, 0x02fc, 0x0303, + 0x030a, 0x0311, 0x0318, 0x031f, 0x0326, 0x032d, 0x0334, 0x033b, + // Entry 5D7C0 - 5D7FF + 0x0342, 0x003d, 0x0036, 0xffff, 0x01a5, 0x01ac, 0x01b3, 0x01ba, + 0x01c1, 0x01c8, 0x01cf, 0x01d6, 0x01dd, 0x01e4, 0x01eb, 0x01f2, + 0x01f9, 0x0200, 0x0207, 0x020e, 0x0215, 0x021c, 0x0223, 0x022a, + 0x0231, 0x0238, 0x023f, 0x0246, 0x024d, 0x0254, 0x025b, 0x0262, + 0x0269, 0x0270, 0x0277, 0x027e, 0x0285, 0x028c, 0x0293, 0x029a, + 0x02a1, 0x02a8, 0x02af, 0x02b6, 0x02bd, 0x02c4, 0x02cb, 0x02d2, + 0x02d9, 0x02e0, 0x02e7, 0x02ee, 0x02f5, 0x02fc, 0x0303, 0x030a, + 0x0311, 0x0318, 0x031f, 0x0326, 0x032d, 0x0334, 0x033b, 0x0342, + // Entry 5D800 - 5D83F + 0x0001, 0x029b, 0x0003, 0x029f, 0x02ba, 0x02d5, 0x0019, 0x0036, + 0xffff, 0x00fd, 0x0104, 0x3b38, 0x0112, 0x0119, 0x0120, 0x0127, + 0x3b3f, 0x0135, 0x013c, 0x0143, 0x014a, 0x0151, 0x3b46, 0x015f, + 0x0166, 0x016d, 0x0174, 0x017b, 0x0182, 0x0189, 0x0190, 0x0197, + 0x019e, 0x0019, 0x0036, 0xffff, 0x00fd, 0x0104, 0x3b38, 0x0112, + 0x0119, 0x0120, 0x0127, 0x3b3f, 0x0135, 0x013c, 0x0143, 0x014a, + 0x0151, 0x3b46, 0x015f, 0x0166, 0x016d, 0x0174, 0x017b, 0x0182, + 0x0189, 0x0190, 0x0197, 0x019e, 0x0019, 0x0036, 0xffff, 0x00fd, + // Entry 5D840 - 5D87F + 0x0104, 0x3b38, 0x0112, 0x0119, 0x0120, 0x0127, 0x3b3f, 0x0135, + 0x013c, 0x0143, 0x014a, 0x0151, 0x3b46, 0x015f, 0x0166, 0x016d, + 0x0174, 0x017b, 0x0182, 0x0189, 0x0190, 0x0197, 0x019e, 0x0001, + 0x02f2, 0x0003, 0x02f6, 0x0335, 0x0374, 0x003d, 0x0036, 0xffff, + 0x01a5, 0x01ac, 0x01b3, 0x01ba, 0x01c1, 0x01c8, 0x01cf, 0x01d6, + 0x01dd, 0x01e4, 0x01eb, 0x01f2, 0x01f9, 0x0200, 0x0207, 0x020e, + 0x0215, 0x021c, 0x0223, 0x022a, 0x0231, 0x0238, 0x023f, 0x0246, + 0x024d, 0x0254, 0x025b, 0x0262, 0x0269, 0x0270, 0x0277, 0x027e, + // Entry 5D880 - 5D8BF + 0x0285, 0x028c, 0x0293, 0x029a, 0x02a1, 0x02a8, 0x02af, 0x02b6, + 0x02bd, 0x02c4, 0x02cb, 0x02d2, 0x02d9, 0x02e0, 0x02e7, 0x02ee, + 0x02f5, 0x02fc, 0x0303, 0x030a, 0x0311, 0x0318, 0x031f, 0x0326, + 0x032d, 0x0334, 0x033b, 0x0342, 0x003d, 0x0036, 0xffff, 0x01a5, + 0x01ac, 0x01b3, 0x01ba, 0x01c1, 0x01c8, 0x01cf, 0x01d6, 0x01dd, + 0x01e4, 0x01eb, 0x01f2, 0x01f9, 0x0200, 0x0207, 0x020e, 0x0215, + 0x021c, 0x0223, 0x022a, 0x0231, 0x0238, 0x023f, 0x0246, 0x024d, + 0x0254, 0x025b, 0x0262, 0x0269, 0x0270, 0x0277, 0x027e, 0x0285, + // Entry 5D8C0 - 5D8FF + 0x028c, 0x0293, 0x029a, 0x02a1, 0x02a8, 0x02af, 0x02b6, 0x02bd, + 0x02c4, 0x02cb, 0x02d2, 0x02d9, 0x02e0, 0x02e7, 0x02ee, 0x02f5, + 0x02fc, 0x0303, 0x030a, 0x0311, 0x0318, 0x031f, 0x0326, 0x032d, + 0x0334, 0x033b, 0x0342, 0x003d, 0x0036, 0xffff, 0x01a5, 0x01ac, + 0x01b3, 0x01ba, 0x01c1, 0x01c8, 0x01cf, 0x01d6, 0x01dd, 0x01e4, + 0x01eb, 0x01f2, 0x01f9, 0x0200, 0x0207, 0x020e, 0x0215, 0x021c, + 0x0223, 0x022a, 0x0231, 0x0238, 0x023f, 0x0246, 0x024d, 0x0254, + 0x025b, 0x0262, 0x0269, 0x0270, 0x0277, 0x027e, 0x0285, 0x028c, + // Entry 5D900 - 5D93F + 0x0293, 0x029a, 0x02a1, 0x02a8, 0x02af, 0x02b6, 0x02bd, 0x02c4, + 0x02cb, 0x02d2, 0x02d9, 0x02e0, 0x02e7, 0x02ee, 0x02f5, 0x02fc, + 0x0303, 0x030a, 0x0311, 0x0318, 0x031f, 0x0326, 0x032d, 0x0334, + 0x033b, 0x0342, 0x0001, 0x03b5, 0x0003, 0x03b9, 0x03c8, 0x03d7, + 0x000d, 0x0036, 0xffff, 0x0349, 0x034d, 0x0351, 0x3b4d, 0x3b51, + 0x035d, 0x0361, 0x0365, 0x3b55, 0x3b59, 0x3b5d, 0x3b61, 0x000d, + 0x0036, 0xffff, 0x0349, 0x034d, 0x0351, 0x3b4d, 0x3b51, 0x035d, + 0x0361, 0x0365, 0x3b55, 0x3b59, 0x3b5d, 0x3b61, 0x000d, 0x0036, + // Entry 5D940 - 5D97F + 0xffff, 0x0349, 0x034d, 0x0351, 0x3b4d, 0x3b51, 0x035d, 0x0361, + 0x0365, 0x3b55, 0x3b59, 0x3b5d, 0x3b61, 0x0004, 0x03f4, 0x03ee, + 0x03eb, 0x03f1, 0x0001, 0x007c, 0x0022, 0x0001, 0x0079, 0x0023, + 0x0001, 0x0078, 0x1793, 0x0001, 0x0078, 0x179c, 0x0004, 0x0405, + 0x03ff, 0x03fc, 0x0402, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, + 0x0411, 0x0000, 0x0000, 0x0000, 0x047c, 0x0492, 0x0000, 0x04a3, + 0x0002, 0x0414, 0x0448, 0x0003, 0x0418, 0x0428, 0x0438, 0x000e, + // Entry 5D980 - 5D9BF + 0x0036, 0xffff, 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, + 0x0528, 0x052d, 0x0532, 0x0537, 0x053d, 0x0543, 0x3b65, 0x000e, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, + 0x449e, 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, 0x441d, 0x000e, + 0x0036, 0xffff, 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, + 0x0528, 0x052d, 0x0532, 0x0537, 0x053d, 0x0543, 0x3b65, 0x0003, + 0x044c, 0x045c, 0x046c, 0x000e, 0x0036, 0xffff, 0x050a, 0x050f, + 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, 0x0537, + // Entry 5D9C0 - 5D9FF + 0x053d, 0x0543, 0x3b65, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, + 0x4417, 0x441a, 0x441d, 0x000e, 0x0036, 0xffff, 0x050a, 0x050f, + 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, 0x0537, + 0x053d, 0x0543, 0x3b65, 0x0003, 0x0486, 0x048c, 0x0480, 0x0001, + 0x0482, 0x0002, 0x0000, 0x0425, 0x042a, 0x0001, 0x0488, 0x0002, + 0x0000, 0x0425, 0x042a, 0x0001, 0x048e, 0x0002, 0x0000, 0x0425, + 0x042a, 0x0004, 0x04a0, 0x049a, 0x0497, 0x049d, 0x0001, 0x0078, + // Entry 5DA00 - 5DA3F + 0x17a8, 0x0001, 0x0078, 0x17bc, 0x0001, 0x0078, 0x17bc, 0x0001, + 0x0078, 0x17cb, 0x0004, 0x04b1, 0x04ab, 0x04a8, 0x04ae, 0x0001, + 0x0078, 0x17d3, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x000a, 0x04bf, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0845, 0x0000, 0x9001, 0x0524, 0x0538, 0x0002, 0x04c2, + 0x04f3, 0x0003, 0x04c6, 0x04d5, 0x04e4, 0x000d, 0x0036, 0xffff, + 0x0036, 0x413f, 0x4146, 0x414d, 0x4154, 0x415b, 0x4162, 0x4169, + 0x4170, 0x4177, 0x417e, 0x4188, 0x000d, 0x0036, 0xffff, 0x0090, + // Entry 5DA40 - 5DA7F + 0x0094, 0x0098, 0x009c, 0x00a0, 0x00a4, 0x00a8, 0x00ac, 0x00b0, + 0x00b4, 0x00b8, 0x00bf, 0x000d, 0x0036, 0xffff, 0x0036, 0x413f, + 0x4146, 0x414d, 0x4154, 0x415b, 0x4162, 0x4169, 0x4170, 0x4177, + 0x417e, 0x4188, 0x0003, 0x04f7, 0x0506, 0x0515, 0x000d, 0x0036, + 0xffff, 0x0036, 0x413f, 0x4146, 0x414d, 0x4154, 0x415b, 0x4162, + 0x4169, 0x4170, 0x4177, 0x417e, 0x4188, 0x000d, 0x0036, 0xffff, + 0x0090, 0x0094, 0x0098, 0x009c, 0x00a0, 0x00a4, 0x00a8, 0x00ac, + 0x00b0, 0x00b4, 0x00b8, 0x00bf, 0x000d, 0x0036, 0xffff, 0x0036, + // Entry 5DA80 - 5DABF + 0x413f, 0x4146, 0x414d, 0x4154, 0x415b, 0x4162, 0x4169, 0x4170, + 0x4177, 0x417e, 0x4188, 0x0003, 0x0528, 0x0533, 0x052d, 0x0003, + 0x0036, 0x00c6, 0x00c6, 0x00c6, 0x0004, 0x0036, 0xffff, 0xffff, + 0xffff, 0x00c6, 0x0003, 0x0036, 0x00c6, 0x00c6, 0x00c6, 0x0006, + 0x053f, 0x0572, 0x0635, 0x06f8, 0x074f, 0x0812, 0x0001, 0x0541, + 0x0003, 0x0545, 0x0554, 0x0563, 0x000d, 0x0036, 0xffff, 0x00cd, + 0x00d1, 0x00d5, 0x00d9, 0x00dd, 0x00e1, 0x00e5, 0x00e9, 0x00ed, + 0x00f1, 0x00f5, 0x00f9, 0x000d, 0x0036, 0xffff, 0x00cd, 0x00d1, + // Entry 5DAC0 - 5DAFF + 0x00d5, 0x00d9, 0x00dd, 0x00e1, 0x00e5, 0x00e9, 0x00ed, 0x00f1, + 0x00f5, 0x00f9, 0x000d, 0x0036, 0xffff, 0x00cd, 0x00d1, 0x00d5, + 0x00d9, 0x00dd, 0x00e1, 0x00e5, 0x00e9, 0x00ed, 0x00f1, 0x00f5, + 0x00f9, 0x0001, 0x0574, 0x0003, 0x0578, 0x05b7, 0x05f6, 0x003d, + 0x0036, 0xffff, 0x01a5, 0x01ac, 0x01b3, 0x01ba, 0x01c1, 0x01c8, + 0x01cf, 0x01d6, 0x01dd, 0x01e4, 0x01eb, 0x01f2, 0x01f9, 0x0200, + 0x0207, 0x020e, 0x0215, 0x021c, 0x0223, 0x022a, 0x0231, 0x0238, + 0x023f, 0x0246, 0x024d, 0x0254, 0x025b, 0x0262, 0x0269, 0x0270, + // Entry 5DB00 - 5DB3F + 0x0277, 0x027e, 0x0285, 0x028c, 0x0293, 0x029a, 0x02a1, 0x02a8, + 0x02af, 0x02b6, 0x02bd, 0x02c4, 0x02cb, 0x02d2, 0x02d9, 0x02e0, + 0x02e7, 0x02ee, 0x02f5, 0x02fc, 0x0303, 0x030a, 0x0311, 0x0318, + 0x031f, 0x0326, 0x032d, 0x0334, 0x033b, 0x0342, 0x003d, 0x0036, + 0xffff, 0x01a5, 0x01ac, 0x01b3, 0x01ba, 0x01c1, 0x01c8, 0x01cf, + 0x01d6, 0x01dd, 0x01e4, 0x01eb, 0x01f2, 0x01f9, 0x0200, 0x0207, + 0x020e, 0x0215, 0x021c, 0x0223, 0x022a, 0x0231, 0x0238, 0x023f, + 0x0246, 0x024d, 0x0254, 0x025b, 0x0262, 0x0269, 0x0270, 0x0277, + // Entry 5DB40 - 5DB7F + 0x027e, 0x0285, 0x028c, 0x0293, 0x029a, 0x02a1, 0x02a8, 0x02af, + 0x02b6, 0x02bd, 0x02c4, 0x02cb, 0x02d2, 0x02d9, 0x02e0, 0x02e7, + 0x02ee, 0x02f5, 0x02fc, 0x0303, 0x030a, 0x0311, 0x0318, 0x031f, + 0x0326, 0x032d, 0x0334, 0x033b, 0x0342, 0x003d, 0x0036, 0xffff, + 0x01a5, 0x01ac, 0x01b3, 0x01ba, 0x01c1, 0x01c8, 0x01cf, 0x01d6, + 0x01dd, 0x01e4, 0x01eb, 0x01f2, 0x01f9, 0x0200, 0x0207, 0x020e, + 0x0215, 0x021c, 0x0223, 0x022a, 0x0231, 0x0238, 0x023f, 0x0246, + 0x024d, 0x0254, 0x025b, 0x0262, 0x0269, 0x0270, 0x0277, 0x027e, + // Entry 5DB80 - 5DBBF + 0x0285, 0x028c, 0x0293, 0x029a, 0x02a1, 0x02a8, 0x02af, 0x02b6, + 0x02bd, 0x02c4, 0x02cb, 0x02d2, 0x02d9, 0x02e0, 0x02e7, 0x02ee, + 0x02f5, 0x02fc, 0x0303, 0x030a, 0x0311, 0x0318, 0x031f, 0x0326, + 0x032d, 0x0334, 0x033b, 0x0342, 0x0001, 0x0637, 0x0003, 0x063b, + 0x067a, 0x06b9, 0x003d, 0x0036, 0xffff, 0x01a5, 0x01ac, 0x01b3, + 0x01ba, 0x01c1, 0x01c8, 0x01cf, 0x01d6, 0x01dd, 0x01e4, 0x01eb, + 0x01f2, 0x01f9, 0x0200, 0x0207, 0x020e, 0x0215, 0x021c, 0x0223, + 0x022a, 0x0231, 0x0238, 0x023f, 0x0246, 0x024d, 0x0254, 0x025b, + // Entry 5DBC0 - 5DBFF + 0x0262, 0x0269, 0x0270, 0x0277, 0x027e, 0x0285, 0x028c, 0x0293, + 0x029a, 0x02a1, 0x02a8, 0x02af, 0x02b6, 0x02bd, 0x02c4, 0x02cb, + 0x02d2, 0x02d9, 0x02e0, 0x02e7, 0x02ee, 0x02f5, 0x02fc, 0x0303, + 0x030a, 0x0311, 0x0318, 0x031f, 0x0326, 0x032d, 0x0334, 0x033b, + 0x0342, 0x003d, 0x0036, 0xffff, 0x01a5, 0x01ac, 0x01b3, 0x01ba, + 0x01c1, 0x01c8, 0x01cf, 0x01d6, 0x01dd, 0x01e4, 0x01eb, 0x01f2, + 0x01f9, 0x0200, 0x0207, 0x020e, 0x0215, 0x021c, 0x0223, 0x022a, + 0x0231, 0x0238, 0x023f, 0x0246, 0x024d, 0x0254, 0x025b, 0x0262, + // Entry 5DC00 - 5DC3F + 0x0269, 0x0270, 0x0277, 0x027e, 0x0285, 0x028c, 0x0293, 0x029a, + 0x02a1, 0x02a8, 0x02af, 0x02b6, 0x02bd, 0x02c4, 0x02cb, 0x02d2, + 0x02d9, 0x02e0, 0x02e7, 0x02ee, 0x02f5, 0x02fc, 0x0303, 0x030a, + 0x0311, 0x0318, 0x031f, 0x0326, 0x032d, 0x0334, 0x033b, 0x0342, + 0x003d, 0x0036, 0xffff, 0x01a5, 0x01ac, 0x01b3, 0x01ba, 0x01c1, + 0x01c8, 0x01cf, 0x01d6, 0x01dd, 0x01e4, 0x01eb, 0x01f2, 0x01f9, + 0x0200, 0x0207, 0x020e, 0x0215, 0x021c, 0x0223, 0x022a, 0x0231, + 0x0238, 0x023f, 0x0246, 0x024d, 0x0254, 0x025b, 0x0262, 0x0269, + // Entry 5DC40 - 5DC7F + 0x0270, 0x0277, 0x027e, 0x0285, 0x028c, 0x0293, 0x029a, 0x02a1, + 0x02a8, 0x02af, 0x02b6, 0x02bd, 0x02c4, 0x02cb, 0x02d2, 0x02d9, + 0x02e0, 0x02e7, 0x02ee, 0x02f5, 0x02fc, 0x0303, 0x030a, 0x0311, + 0x0318, 0x031f, 0x0326, 0x032d, 0x0334, 0x033b, 0x0342, 0x0001, + 0x06fa, 0x0003, 0x06fe, 0x0719, 0x0734, 0x0019, 0x0036, 0xffff, + 0x00fd, 0x0104, 0x3b38, 0x0112, 0x0119, 0x0120, 0x0127, 0x3b3f, + 0x0135, 0x013c, 0x0143, 0x014a, 0x0151, 0x3b46, 0x015f, 0x0166, + 0x016d, 0x0174, 0x017b, 0x0182, 0x0189, 0x0190, 0x0197, 0x019e, + // Entry 5DC80 - 5DCBF + 0x0019, 0x0036, 0xffff, 0x00fd, 0x0104, 0x3b38, 0x0112, 0x0119, + 0x0120, 0x0127, 0x3b3f, 0x0135, 0x013c, 0x0143, 0x014a, 0x0151, + 0x3b46, 0x015f, 0x0166, 0x016d, 0x0174, 0x017b, 0x0182, 0x0189, + 0x0190, 0x0197, 0x019e, 0x0019, 0x0036, 0xffff, 0x00fd, 0x0104, + 0x3b38, 0x0112, 0x0119, 0x0120, 0x0127, 0x3b3f, 0x0135, 0x013c, + 0x0143, 0x014a, 0x0151, 0x3b46, 0x015f, 0x0166, 0x016d, 0x0174, + 0x017b, 0x0182, 0x0189, 0x0190, 0x0197, 0x019e, 0x0001, 0x0751, + 0x0003, 0x0755, 0x0794, 0x07d3, 0x003d, 0x0036, 0xffff, 0x01a5, + // Entry 5DCC0 - 5DCFF + 0x01ac, 0x01b3, 0x01ba, 0x01c1, 0x01c8, 0x01cf, 0x01d6, 0x01dd, + 0x01e4, 0x01eb, 0x01f2, 0x01f9, 0x0200, 0x0207, 0x020e, 0x0215, + 0x021c, 0x0223, 0x022a, 0x0231, 0x0238, 0x023f, 0x0246, 0x024d, + 0x0254, 0x025b, 0x0262, 0x0269, 0x0270, 0x0277, 0x027e, 0x0285, + 0x028c, 0x0293, 0x029a, 0x02a1, 0x02a8, 0x02af, 0x02b6, 0x02bd, + 0x02c4, 0x02cb, 0x02d2, 0x02d9, 0x02e0, 0x02e7, 0x02ee, 0x02f5, + 0x02fc, 0x0303, 0x030a, 0x0311, 0x0318, 0x031f, 0x0326, 0x032d, + 0x0334, 0x033b, 0x0342, 0x003d, 0x0036, 0xffff, 0x01a5, 0x01ac, + // Entry 5DD00 - 5DD3F + 0x01b3, 0x01ba, 0x01c1, 0x01c8, 0x01cf, 0x01d6, 0x01dd, 0x01e4, + 0x01eb, 0x01f2, 0x01f9, 0x0200, 0x0207, 0x020e, 0x0215, 0x021c, + 0x0223, 0x022a, 0x0231, 0x0238, 0x023f, 0x0246, 0x024d, 0x0254, + 0x025b, 0x0262, 0x0269, 0x0270, 0x0277, 0x027e, 0x0285, 0x028c, + 0x0293, 0x029a, 0x02a1, 0x02a8, 0x02af, 0x02b6, 0x02bd, 0x02c4, + 0x02cb, 0x02d2, 0x02d9, 0x02e0, 0x02e7, 0x02ee, 0x02f5, 0x02fc, + 0x0303, 0x030a, 0x0311, 0x0318, 0x031f, 0x0326, 0x032d, 0x0334, + 0x033b, 0x0342, 0x003d, 0x0036, 0xffff, 0x01a5, 0x01ac, 0x01b3, + // Entry 5DD40 - 5DD7F + 0x01ba, 0x01c1, 0x01c8, 0x01cf, 0x01d6, 0x01dd, 0x01e4, 0x01eb, + 0x01f2, 0x01f9, 0x0200, 0x0207, 0x020e, 0x0215, 0x021c, 0x0223, + 0x022a, 0x0231, 0x0238, 0x023f, 0x0246, 0x024d, 0x0254, 0x025b, + 0x0262, 0x0269, 0x0270, 0x0277, 0x027e, 0x0285, 0x028c, 0x0293, + 0x029a, 0x02a1, 0x02a8, 0x02af, 0x02b6, 0x02bd, 0x02c4, 0x02cb, + 0x02d2, 0x02d9, 0x02e0, 0x02e7, 0x02ee, 0x02f5, 0x02fc, 0x0303, + 0x030a, 0x0311, 0x0318, 0x031f, 0x0326, 0x032d, 0x0334, 0x033b, + 0x0342, 0x0001, 0x0814, 0x0003, 0x0818, 0x0827, 0x0836, 0x000d, + // Entry 5DD80 - 5DDBF + 0x0036, 0xffff, 0x0349, 0x034d, 0x0351, 0x3b4d, 0x3b51, 0x035d, + 0x0361, 0x0365, 0x3b55, 0x3b59, 0x3b5d, 0x3b61, 0x000d, 0x0036, + 0xffff, 0x0349, 0x034d, 0x0351, 0x3b4d, 0x3b51, 0x035d, 0x0361, + 0x0365, 0x3b55, 0x3b59, 0x3b5d, 0x3b61, 0x000d, 0x0036, 0xffff, + 0x0349, 0x034d, 0x0351, 0x3b4d, 0x3b51, 0x035d, 0x0361, 0x0365, + 0x3b55, 0x3b59, 0x3b5d, 0x3b61, 0x0004, 0x0853, 0x084d, 0x084a, + 0x0850, 0x0001, 0x0036, 0x0379, 0x0001, 0x0036, 0x0389, 0x0001, + 0x0036, 0x0389, 0x0001, 0x0078, 0x17a2, 0x0008, 0x085f, 0x0000, + // Entry 5DDC0 - 5DDFF + 0x0000, 0x0000, 0x08ca, 0x08e0, 0x0000, 0x08f1, 0x0002, 0x0862, + 0x0896, 0x0003, 0x0866, 0x0876, 0x0886, 0x000e, 0x0036, 0xffff, + 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, + 0x0532, 0x0537, 0x053d, 0x0543, 0x3b65, 0x000e, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, + 0x2424, 0x4414, 0x4417, 0x441a, 0x441d, 0x000e, 0x0036, 0xffff, + 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, + 0x0532, 0x0537, 0x053d, 0x0543, 0x3b65, 0x0003, 0x089a, 0x08aa, + // Entry 5DE00 - 5DE3F + 0x08ba, 0x000e, 0x0036, 0xffff, 0x050a, 0x050f, 0x0514, 0x0519, + 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, 0x0537, 0x053d, 0x0543, + 0x3b65, 0x000e, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, + 0x441d, 0x000e, 0x0036, 0xffff, 0x050a, 0x050f, 0x0514, 0x0519, + 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, 0x0537, 0x053d, 0x0543, + 0x3b65, 0x0003, 0x08d4, 0x08da, 0x08ce, 0x0001, 0x08d0, 0x0002, + 0x0000, 0x0425, 0x042a, 0x0001, 0x08d6, 0x0002, 0x0000, 0x0425, + // Entry 5DE40 - 5DE7F + 0x042a, 0x0001, 0x08dc, 0x0002, 0x0000, 0x0425, 0x042a, 0x0004, + 0x08ee, 0x08e8, 0x08e5, 0x08eb, 0x0001, 0x0078, 0x17a8, 0x0001, + 0x0078, 0x17bc, 0x0001, 0x0078, 0x17bc, 0x0001, 0x0078, 0x17cb, + 0x0004, 0x08ff, 0x08f9, 0x08f6, 0x08fc, 0x0001, 0x0078, 0x17d3, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0908, 0x0003, + 0x0911, 0x0916, 0x090c, 0x0001, 0x090e, 0x0001, 0x0000, 0x0425, + 0x0001, 0x0913, 0x0001, 0x0000, 0x0425, 0x0001, 0x0918, 0x0001, + // Entry 5DE80 - 5DEBF + 0x0000, 0x0425, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0924, 0x0000, 0x0935, 0x0004, 0x0932, 0x092c, 0x0929, 0x092f, + 0x0001, 0x0078, 0x17a8, 0x0001, 0x0078, 0x17bc, 0x0001, 0x0078, + 0x17bc, 0x0001, 0x0078, 0x17cb, 0x0004, 0x0943, 0x093d, 0x093a, + 0x0940, 0x0001, 0x0078, 0x17d3, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x094f, 0x09b4, + 0x0a0b, 0x0a32, 0x0b21, 0x0b46, 0x0b57, 0x0b68, 0x0002, 0x0952, + 0x0983, 0x0003, 0x0956, 0x0965, 0x0974, 0x000d, 0x0036, 0xffff, + // Entry 5DEC0 - 5DEFF + 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, + 0x0532, 0x0537, 0x053d, 0x0543, 0x000d, 0x0000, 0xffff, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, + 0x4414, 0x4417, 0x441a, 0x000d, 0x0036, 0xffff, 0x050a, 0x050f, + 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, 0x0537, + 0x053d, 0x0543, 0x0003, 0x0987, 0x0996, 0x09a5, 0x000d, 0x0036, + 0xffff, 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, + 0x052d, 0x0532, 0x0537, 0x053d, 0x0543, 0x000d, 0x0000, 0xffff, + // Entry 5DF00 - 5DF3F + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, + 0x2424, 0x4414, 0x4417, 0x441a, 0x000d, 0x0036, 0xffff, 0x050a, + 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, + 0x0537, 0x053d, 0x0543, 0x0002, 0x09b7, 0x09e1, 0x0005, 0x09bd, + 0x09c6, 0x09d8, 0x0000, 0x09cf, 0x0007, 0x007c, 0x0031, 0x0038, + 0x003f, 0x0046, 0x004d, 0x0054, 0x005b, 0x0007, 0x0036, 0x0549, + 0x3b6b, 0x0094, 0x0098, 0x009c, 0x00a0, 0x00a4, 0x0007, 0x0036, + 0x0549, 0x3b6b, 0x0094, 0x0098, 0x009c, 0x00a0, 0x00a4, 0x0007, + // Entry 5DF40 - 5DF7F + 0x0078, 0x17da, 0x17e4, 0x17ee, 0x17f8, 0x1802, 0x180c, 0x1816, + 0x0005, 0x09e7, 0x09f0, 0x0a02, 0x0000, 0x09f9, 0x0007, 0x007c, + 0x0031, 0x0038, 0x003f, 0x0046, 0x004d, 0x0054, 0x005b, 0x0007, + 0x0036, 0x0549, 0x3b6b, 0x0094, 0x0098, 0x009c, 0x00a0, 0x00a4, + 0x0007, 0x0036, 0x0549, 0x3b6b, 0x0094, 0x0098, 0x009c, 0x00a0, + 0x00a4, 0x0007, 0x0078, 0x17da, 0x17e4, 0x17ee, 0x17f8, 0x1802, + 0x180c, 0x1816, 0x0002, 0x0a0e, 0x0a20, 0x0003, 0x0000, 0x0a12, + 0x0a19, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + // Entry 5DF80 - 5DFBF + 0x0005, 0x0078, 0xffff, 0x1820, 0x1828, 0x1830, 0x1838, 0x0003, + 0x0000, 0x0a24, 0x0a2b, 0x0005, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x0005, 0x0078, 0xffff, 0x1820, 0x1828, 0x1830, + 0x1838, 0x0002, 0x0a35, 0x0aab, 0x0003, 0x0a39, 0x0a5f, 0x0a85, + 0x000a, 0x0a47, 0x0a4a, 0x0a44, 0x0a4d, 0x0a53, 0x0a59, 0x0a5c, + 0x0000, 0x0a50, 0x0a56, 0x0001, 0x0078, 0x1840, 0x0001, 0x0078, + 0x1847, 0x0001, 0x0078, 0x184e, 0x0001, 0x0078, 0x1855, 0x0001, + 0x0078, 0x1847, 0x0001, 0x0078, 0x1863, 0x0001, 0x0078, 0x184e, + // Entry 5DFC0 - 5DFFF + 0x0001, 0x007a, 0x00c6, 0x0001, 0x0078, 0x1878, 0x000a, 0x0a6d, + 0x0a70, 0x0a6a, 0x0a73, 0x0a79, 0x0a7f, 0x0a82, 0x0000, 0x0a76, + 0x0a7c, 0x0001, 0x0078, 0x1840, 0x0001, 0x0078, 0x1847, 0x0001, + 0x0078, 0x184e, 0x0001, 0x0078, 0x1855, 0x0001, 0x0078, 0x1847, + 0x0001, 0x0078, 0x1863, 0x0001, 0x0078, 0x184e, 0x0001, 0x007a, + 0x00c6, 0x0001, 0x0078, 0x1878, 0x000a, 0x0a93, 0x0a96, 0x0a90, + 0x0a99, 0x0a9f, 0x0aa5, 0x0aa8, 0x0000, 0x0a9c, 0x0aa2, 0x0001, + 0x0078, 0x1840, 0x0001, 0x0078, 0x1847, 0x0001, 0x0078, 0x184e, + // Entry 5E000 - 5E03F + 0x0001, 0x0078, 0x1855, 0x0001, 0x0078, 0x1847, 0x0001, 0x0078, + 0x1863, 0x0001, 0x0078, 0x184e, 0x0001, 0x007a, 0x00c6, 0x0001, + 0x0078, 0x1878, 0x0003, 0x0aaf, 0x0ad5, 0x0afb, 0x000a, 0x0abd, + 0x0ac0, 0x0aba, 0x0ac3, 0x0ac9, 0x0acf, 0x0ad2, 0x0000, 0x0ac6, + 0x0acc, 0x0001, 0x0078, 0x1840, 0x0001, 0x0078, 0x1847, 0x0001, + 0x0078, 0x184e, 0x0001, 0x0078, 0x1855, 0x0001, 0x0078, 0x1847, + 0x0001, 0x0078, 0x1863, 0x0001, 0x0078, 0x184e, 0x0001, 0x007a, + 0x00c6, 0x0001, 0x0078, 0x1878, 0x000a, 0x0ae3, 0x0ae6, 0x0ae0, + // Entry 5E040 - 5E07F + 0x0ae9, 0x0aef, 0x0af5, 0x0af8, 0x0000, 0x0aec, 0x0af2, 0x0001, + 0x0078, 0x1840, 0x0001, 0x0078, 0x1847, 0x0001, 0x0078, 0x184e, + 0x0001, 0x0078, 0x1855, 0x0001, 0x0078, 0x1847, 0x0001, 0x0078, + 0x1863, 0x0001, 0x0078, 0x184e, 0x0001, 0x007a, 0x00c6, 0x0001, + 0x0078, 0x1878, 0x000a, 0x0b09, 0x0b0c, 0x0b06, 0x0b0f, 0x0b15, + 0x0b1b, 0x0b1e, 0x0000, 0x0b12, 0x0b18, 0x0001, 0x0078, 0x1840, + 0x0001, 0x0078, 0x1847, 0x0001, 0x0078, 0x184e, 0x0001, 0x0078, + 0x1855, 0x0001, 0x0078, 0x1847, 0x0001, 0x0078, 0x1863, 0x0001, + // Entry 5E080 - 5E0BF + 0x0078, 0x184e, 0x0001, 0x007a, 0x00c6, 0x0001, 0x0078, 0x1878, + 0x0003, 0x0b30, 0x0b3b, 0x0b25, 0x0002, 0x0b28, 0x0b2c, 0x0002, + 0x0078, 0x187f, 0x1893, 0x0002, 0x0078, 0x1889, 0x189a, 0x0002, + 0x0b33, 0x0b37, 0x0002, 0x0078, 0x187f, 0x1893, 0x0002, 0x0078, + 0x1889, 0x189a, 0x0002, 0x0b3e, 0x0b42, 0x0002, 0x0078, 0x187f, + 0x1893, 0x0002, 0x0078, 0x1889, 0x189a, 0x0004, 0x0b54, 0x0b4e, + 0x0b4b, 0x0b51, 0x0001, 0x0078, 0x18a1, 0x0001, 0x0036, 0x065b, + 0x0001, 0x0036, 0x065b, 0x0001, 0x0021, 0x0721, 0x0004, 0x0b65, + // Entry 5E0C0 - 5E0FF + 0x0b5f, 0x0b5c, 0x0b62, 0x0001, 0x0078, 0x18b3, 0x0001, 0x0078, + 0x18c3, 0x0001, 0x0078, 0x18d0, 0x0001, 0x0078, 0x18d9, 0x0004, + 0x0b76, 0x0b70, 0x0b6d, 0x0b73, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0008, 0x0b82, 0x0000, 0x0000, 0x0000, 0x0bed, 0x0c00, 0x0000, + 0x0c11, 0x0002, 0x0b85, 0x0bb9, 0x0003, 0x0b89, 0x0b99, 0x0ba9, + 0x000e, 0x0078, 0x1933, 0x18df, 0x18ec, 0x18f9, 0x1906, 0x1910, + 0x191d, 0x1929, 0x1940, 0x194a, 0x1954, 0x195e, 0x196b, 0x1975, + // Entry 5E100 - 5E13F + 0x000e, 0x0000, 0x449e, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, 0x441d, + 0x000e, 0x0078, 0x1933, 0x18df, 0x18ec, 0x18f9, 0x1906, 0x1910, + 0x191d, 0x1929, 0x1940, 0x194a, 0x1954, 0x195e, 0x196b, 0x1975, + 0x0003, 0x0bbd, 0x0bcd, 0x0bdd, 0x000e, 0x0078, 0x1933, 0x18df, + 0x18ec, 0x18f9, 0x1906, 0x1910, 0x191d, 0x1929, 0x1940, 0x194a, + 0x1954, 0x195e, 0x196b, 0x1975, 0x000e, 0x0000, 0x449e, 0x0033, + 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, + // Entry 5E140 - 5E17F + 0x4414, 0x4417, 0x441a, 0x441d, 0x000e, 0x0078, 0x1933, 0x18df, + 0x18ec, 0x18f9, 0x1906, 0x1910, 0x191d, 0x1929, 0x1940, 0x194a, + 0x1954, 0x195e, 0x196b, 0x1975, 0x0003, 0x0bf6, 0x0bfb, 0x0bf1, + 0x0001, 0x0bf3, 0x0001, 0x0078, 0x197f, 0x0001, 0x0bf8, 0x0001, + 0x0078, 0x197f, 0x0001, 0x0bfd, 0x0001, 0x0078, 0x197f, 0x0004, + 0x0c0e, 0x0c08, 0x0c05, 0x0c0b, 0x0001, 0x0036, 0x0719, 0x0001, + 0x0036, 0x04f5, 0x0001, 0x0036, 0x04f5, 0x0001, 0x0036, 0x0503, + 0x0004, 0x0c1f, 0x0c19, 0x0c16, 0x0c1c, 0x0001, 0x0078, 0x17d3, + // Entry 5E180 - 5E1BF + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0008, 0x0c2b, 0x0000, 0x0000, 0x0000, 0x0c90, 0x0ca3, + 0x0000, 0x0cb4, 0x0002, 0x0c2e, 0x0c5f, 0x0003, 0x0c32, 0x0c41, + 0x0c50, 0x000d, 0x0078, 0xffff, 0x198c, 0x3bd8, 0x19a6, 0x3be5, + 0x19c0, 0x19d0, 0x19e0, 0x3bf2, 0x1a03, 0x1a13, 0x3c02, 0x1a27, + 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, + 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, 0x000d, + 0x0078, 0xffff, 0x198c, 0x3bd8, 0x19a6, 0x3be5, 0x19c0, 0x19d0, + // Entry 5E1C0 - 5E1FF + 0x19e0, 0x3bf2, 0x1a03, 0x1a13, 0x3c02, 0x1a27, 0x0003, 0x0c63, + 0x0c72, 0x0c81, 0x000d, 0x0078, 0xffff, 0x198c, 0x3bd8, 0x19a6, + 0x3be5, 0x19c0, 0x19d0, 0x19e0, 0x3bf2, 0x1a03, 0x1a13, 0x3c02, + 0x1a27, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, + 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, + 0x000d, 0x0078, 0xffff, 0x198c, 0x3bd8, 0x19a6, 0x3be5, 0x19c0, + 0x19d0, 0x19e0, 0x3bf2, 0x1a03, 0x1a13, 0x3c02, 0x1a27, 0x0003, + 0x0c99, 0x0c9e, 0x0c94, 0x0001, 0x0c96, 0x0001, 0x0078, 0x1a37, + // Entry 5E200 - 5E23F + 0x0001, 0x0c9b, 0x0001, 0x0078, 0x1a37, 0x0001, 0x0ca0, 0x0001, + 0x0078, 0x1a37, 0x0004, 0x0cb1, 0x0cab, 0x0ca8, 0x0cae, 0x0001, + 0x0078, 0x17a8, 0x0001, 0x0078, 0x17bc, 0x0001, 0x0078, 0x17bc, + 0x0001, 0x0078, 0x17cb, 0x0004, 0x0cc2, 0x0cbc, 0x0cb9, 0x0cbf, + 0x0001, 0x0078, 0x17d3, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x0cce, 0x0000, 0x0000, + 0x0000, 0x0d33, 0x0d46, 0x0000, 0x0d57, 0x0002, 0x0cd1, 0x0d02, + 0x0003, 0x0cd5, 0x0ce4, 0x0cf3, 0x000d, 0x0078, 0xffff, 0x1a41, + // Entry 5E240 - 5E27F + 0x1a51, 0x1a5e, 0x1a6a, 0x1a77, 0x1a86, 0x1a96, 0x1aa3, 0x1ab0, + 0x1abd, 0x1aca, 0x1add, 0x000d, 0x0000, 0xffff, 0x0033, 0x0035, + 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, 0x4414, + 0x4417, 0x441a, 0x000d, 0x0078, 0xffff, 0x1a41, 0x1a51, 0x1a5e, + 0x1a6a, 0x1a77, 0x1a86, 0x1a96, 0x1aa3, 0x1ab0, 0x1abd, 0x1aca, + 0x1add, 0x0003, 0x0d06, 0x0d15, 0x0d24, 0x000d, 0x0078, 0xffff, + 0x1a41, 0x1a51, 0x1a5e, 0x1a6a, 0x1a77, 0x1a86, 0x1a96, 0x1aa3, + 0x1ab0, 0x1abd, 0x1aca, 0x1add, 0x000d, 0x0000, 0xffff, 0x0033, + // Entry 5E280 - 5E2BF + 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, 0x2424, + 0x4414, 0x4417, 0x441a, 0x000d, 0x0078, 0xffff, 0x1a41, 0x1a51, + 0x1a5e, 0x1a6a, 0x1a77, 0x1a86, 0x1a96, 0x1aa3, 0x1ab0, 0x1abd, + 0x1aca, 0x1add, 0x0003, 0x0d3c, 0x0d41, 0x0d37, 0x0001, 0x0d39, + 0x0001, 0x0078, 0x1aed, 0x0001, 0x0d3e, 0x0001, 0x0078, 0x1aed, + 0x0001, 0x0d43, 0x0001, 0x0078, 0x1aed, 0x0004, 0x0d54, 0x0d4e, + 0x0d4b, 0x0d51, 0x0001, 0x0036, 0x0719, 0x0001, 0x0036, 0x04f5, + 0x0001, 0x0036, 0x04f5, 0x0001, 0x0036, 0x0503, 0x0004, 0x0d65, + // Entry 5E2C0 - 5E2FF + 0x0d5f, 0x0d5c, 0x0d62, 0x0001, 0x0078, 0x17d3, 0x0001, 0x0000, + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0d71, 0x1045, 0x0000, 0x1056, + 0x0003, 0x0e65, 0x0f55, 0x0d75, 0x0001, 0x0d77, 0x00ec, 0x0036, + 0x08e5, 0x08ec, 0x08f3, 0x08fa, 0x3b6f, 0x0908, 0x090f, 0x3b76, + 0x091d, 0x3b7d, 0x092b, 0x3b84, 0x3b91, 0x3b9e, 0x0959, 0x0966, + 0x3bab, 0x3bb2, 0x3bb9, 0x0988, 0x098f, 0x0996, 0x099d, 0x09a4, + 0x3bc0, 0x3bc7, 0x09b9, 0x3bce, 0x09c7, 0x09ce, 0x3bd5, 0x09dc, + // Entry 5E300 - 5E33F + 0x09e3, 0x09ea, 0x09f1, 0x09f8, 0x3bdc, 0x3be3, 0x3bea, 0x0a14, + 0x0a1b, 0x3bf1, 0x0a29, 0x0a30, 0x0a37, 0x3bf8, 0x3bff, 0x0a4c, + 0x0a53, 0x3c06, 0x3c0d, 0x0a68, 0x3c14, 0x0a76, 0x3c1b, 0x0a84, + 0x3c22, 0x0a92, 0x3c29, 0x0aa0, 0x3c30, 0x0aae, 0x0ab5, 0x0abc, + 0x3c37, 0x0aca, 0x0ad1, 0x3c3e, 0x0adf, 0x3c45, 0x3c4c, 0x0af4, + 0x0afb, 0x3c53, 0x0b09, 0x0b10, 0x0b17, 0x0b1e, 0x0b25, 0x0b2c, + 0x0b33, 0x0b3a, 0x0b41, 0x0b48, 0x0b4f, 0x0b56, 0x0b5d, 0x0b64, + 0x0b6b, 0x0b72, 0x0b79, 0x0b80, 0x3c5a, 0x0b8e, 0x0b95, 0x3c61, + // Entry 5E340 - 5E37F + 0x3c68, 0x3c6f, 0x3c76, 0x0bb8, 0x3c7d, 0x0bc6, 0x0bcd, 0x0bd4, + 0x0bdb, 0x3c84, 0x3c8b, 0x0bf0, 0x0bf7, 0x0bfe, 0x0c05, 0x0c0c, + 0x0c13, 0x0c1a, 0x3c92, 0x0c28, 0x0c2f, 0x3c99, 0x0c3d, 0x3ca0, + 0x0c4b, 0x3ca7, 0x0c59, 0x0c60, 0x3cae, 0x0c6e, 0x3cb5, 0x3cbc, + 0x0c83, 0x3cc3, 0x3cca, 0x0c98, 0x0c9f, 0x0ca6, 0x0cad, 0x3cd1, + 0x0cbb, 0x0cc2, 0x0cc9, 0x0cd0, 0x3cd8, 0x0cde, 0x0ce5, 0x0cec, + 0x0cf3, 0x3cdf, 0x0d01, 0x3ce6, 0x0d0f, 0x0d16, 0x3ced, 0x0d24, + 0x0d2b, 0x3cf4, 0x3cfb, 0x0d40, 0x0d47, 0x0d4e, 0x3d02, 0x0d5c, + // Entry 5E380 - 5E3BF + 0x3d09, 0x0d6a, 0x0d71, 0x3d10, 0x0d7f, 0x0d86, 0x3d17, 0x0d94, + 0x3d1e, 0x3d25, 0x3d2c, 0x0db0, 0x0db7, 0x0dbe, 0x0dc5, 0x3d33, + 0x3d3a, 0x0dda, 0x3d41, 0x3d48, 0x0def, 0x3d4f, 0x0dfd, 0x0e04, + 0x3d56, 0x3d5d, 0x3d64, 0x0e20, 0x0e27, 0x3d6b, 0x0e35, 0x0e3c, + 0x3d72, 0x3d79, 0x0e51, 0x3d80, 0x0e5f, 0x0e66, 0x3d87, 0x0e74, + 0x0e7b, 0x3d8e, 0x3d95, 0x3d9c, 0x3da3, 0x3daa, 0x0ea5, 0x0eac, + 0x3db1, 0x3db8, 0x3dbf, 0x0ec8, 0x0ecf, 0x3dc6, 0x0edd, 0x3dcd, + 0x3dd4, 0x0ef2, 0x0ef9, 0x0f00, 0x3ddb, 0x0f0e, 0x0f15, 0x0f1c, + // Entry 5E3C0 - 5E3FF + 0x0f23, 0x0f2a, 0x0f31, 0x0f38, 0x3de2, 0x0f46, 0x0f4d, 0x3de9, + 0x4192, 0x4199, 0x41a0, 0x41a7, 0x0001, 0x0e67, 0x00ec, 0x0036, + 0x08e5, 0x08ec, 0x08f3, 0x08fa, 0x3b6f, 0x0908, 0x090f, 0x3b76, + 0x091d, 0x3b7d, 0x092b, 0x3b84, 0x3b91, 0x3b9e, 0x0959, 0x0966, + 0x3bab, 0x3bb2, 0x3bb9, 0x0988, 0x098f, 0x0996, 0x099d, 0x09a4, + 0x3bc0, 0x3bc7, 0x09b9, 0x3bce, 0x09c7, 0x09ce, 0x3bd5, 0x09dc, + 0x09e3, 0x09ea, 0x09f1, 0x09f8, 0x3bdc, 0x3be3, 0x3bea, 0x0a14, + 0x0a1b, 0x3bf1, 0x0a29, 0x0a30, 0x0a37, 0x3bf8, 0x3bff, 0x0a4c, + // Entry 5E400 - 5E43F + 0x0a53, 0x3c06, 0x3c0d, 0x0a68, 0x3c14, 0x0a76, 0x3c1b, 0x0a84, + 0x3c22, 0x0a92, 0x3c29, 0x0aa0, 0x3c30, 0x0aae, 0x0ab5, 0x0abc, + 0x3c37, 0x0aca, 0x0ad1, 0x3c3e, 0x0adf, 0x3c45, 0x3c4c, 0x0af4, + 0x0afb, 0x3c53, 0x0b09, 0x0b10, 0x0b17, 0x0b1e, 0x0b25, 0x0b2c, + 0x0b33, 0x0b3a, 0x0b41, 0x0b48, 0x0b4f, 0x0b56, 0x0b5d, 0x0b64, + 0x0b6b, 0x0b72, 0x0b79, 0x0b80, 0x3c5a, 0x0b8e, 0x0b95, 0x3c61, + 0x3c68, 0x3c6f, 0x3c76, 0x0bb8, 0x3c7d, 0x0bc6, 0x0bcd, 0x0bd4, + 0x0bdb, 0x3c84, 0x3c8b, 0x0bf0, 0x0bf7, 0x0bfe, 0x0c05, 0x0c0c, + // Entry 5E440 - 5E47F + 0x0c13, 0x0c1a, 0x3c92, 0x0c28, 0x0c2f, 0x3c99, 0x0c3d, 0x3ca0, + 0x0c4b, 0x3ca7, 0x0c59, 0x0c60, 0x3cae, 0x0c6e, 0x3cb5, 0x3cbc, + 0x0c83, 0x3cc3, 0x3cca, 0x0c98, 0x0c9f, 0x0ca6, 0x0cad, 0x3cd1, + 0x0cbb, 0x0cc2, 0x0cc9, 0x0cd0, 0x3cd8, 0x0cde, 0x0ce5, 0x0cec, + 0x0cf3, 0x3cdf, 0x0d01, 0x3ce6, 0x0d0f, 0x0d16, 0x3ced, 0x0d24, + 0x0d2b, 0x3cf4, 0x3cfb, 0x0d40, 0x0d47, 0x0d4e, 0x3d02, 0x0d5c, + 0x3d09, 0x0d6a, 0x0d71, 0x3d10, 0x0d7f, 0x0d86, 0x3d17, 0x0d94, + 0x3d1e, 0x3d25, 0x3d2c, 0x0db0, 0x0db7, 0x0dbe, 0x0dc5, 0x3d33, + // Entry 5E480 - 5E4BF + 0x3d3a, 0x0dda, 0x3d41, 0x3d48, 0x0def, 0x3d4f, 0x0dfd, 0x0e04, + 0x3d56, 0x3d5d, 0x3d64, 0x0e20, 0x0e27, 0x3d6b, 0x0e35, 0x0e3c, + 0x3d72, 0x3d79, 0x0e51, 0x3d80, 0x0e5f, 0x0e66, 0x3d87, 0x0e74, + 0x0e7b, 0x3d8e, 0x3d95, 0x3d9c, 0x3da3, 0x3daa, 0x0ea5, 0x0eac, + 0x3db1, 0x3db8, 0x3dbf, 0x0ec8, 0x0ecf, 0x3dc6, 0x0edd, 0x3dcd, + 0x3dd4, 0x0ef2, 0x0ef9, 0x0f00, 0x3ddb, 0x0f0e, 0x0f15, 0x0f1c, + 0x0f23, 0x0f2a, 0x0f31, 0x0f38, 0x3de2, 0x0f46, 0x0f4d, 0x3de9, + 0x4192, 0x4199, 0x41a0, 0x41a7, 0x0001, 0x0f57, 0x00ec, 0x0036, + // Entry 5E4C0 - 5E4FF + 0x08e5, 0x08ec, 0x08f3, 0x08fa, 0x3b6f, 0x0908, 0x090f, 0x3b76, + 0x091d, 0x3b7d, 0x092b, 0x3b84, 0x3b91, 0x3b9e, 0x0959, 0x0966, + 0x3bab, 0x3bb2, 0x3bb9, 0x0988, 0x098f, 0x0996, 0x099d, 0x09a4, + 0x3bc0, 0x3bc7, 0x09b9, 0x3bce, 0x09c7, 0x09ce, 0x3bd5, 0x09dc, + 0x09e3, 0x09ea, 0x09f1, 0x09f8, 0x3bdc, 0x3be3, 0x3bea, 0x0a14, + 0x0a1b, 0x3bf1, 0x0a29, 0x0a30, 0x0a37, 0x3bf8, 0x3bff, 0x0a4c, + 0x0a53, 0x3c06, 0x3c0d, 0x0a68, 0x3c14, 0x0a76, 0x3c1b, 0x0a84, + 0x3c22, 0x0a92, 0x3c29, 0x0aa0, 0x3c30, 0x0aae, 0x0ab5, 0x0abc, + // Entry 5E500 - 5E53F + 0x3c37, 0x0aca, 0x0ad1, 0x3c3e, 0x0adf, 0x3c45, 0x3c4c, 0x0af4, + 0x0afb, 0x3c53, 0x0b09, 0x0b10, 0x0b17, 0x0b1e, 0x0b25, 0x0b2c, + 0x0b33, 0x0b3a, 0x0b41, 0x0b48, 0x0b4f, 0x0b56, 0x0b5d, 0x0b64, + 0x0b6b, 0x0b72, 0x0b79, 0x0b80, 0x3c5a, 0x0b8e, 0x0b95, 0x3c61, + 0x3c68, 0x3c6f, 0x3c76, 0x0bb8, 0x3c7d, 0x0bc6, 0x0bcd, 0x0bd4, + 0x0bdb, 0x3c84, 0x3c8b, 0x0bf0, 0x0bf7, 0x0bfe, 0x0c05, 0x0c0c, + 0x0c13, 0x0c1a, 0x3c92, 0x0c28, 0x0c2f, 0x3c99, 0x0c3d, 0x3ca0, + 0x0c4b, 0x3ca7, 0x0c59, 0x0c60, 0x3cae, 0x0c6e, 0x3cb5, 0x3cbc, + // Entry 5E540 - 5E57F + 0x0c83, 0x3cc3, 0x3cca, 0x0c98, 0x0c9f, 0x0ca6, 0x0cad, 0x3cd1, + 0x0cbb, 0x0cc2, 0x0cc9, 0x0cd0, 0x3cd8, 0x0cde, 0x0ce5, 0x0cec, + 0x0cf3, 0x3cdf, 0x0d01, 0x3ce6, 0x0d0f, 0x0d16, 0x3ced, 0x0d24, + 0x0d2b, 0x3cf4, 0x3cfb, 0x0d40, 0x0d47, 0x0d4e, 0x3d02, 0x0d5c, + 0x3d09, 0x0d6a, 0x0d71, 0x3d10, 0x0d7f, 0x0d86, 0x3d17, 0x0d94, + 0x3d1e, 0x3d25, 0x3d2c, 0x0db0, 0x0db7, 0x0dbe, 0x0dc5, 0x3d33, + 0x3d3a, 0x0dda, 0x3d41, 0x3d48, 0x0def, 0x3d4f, 0x0dfd, 0x0e04, + 0x3d56, 0x3d5d, 0x3d64, 0x0e20, 0x0e27, 0x3d6b, 0x0e35, 0x0e3c, + // Entry 5E580 - 5E5BF + 0x3d72, 0x3d79, 0x0e51, 0x3d80, 0x0e5f, 0x0e66, 0x3d87, 0x0e74, + 0x0e7b, 0x3d8e, 0x3d95, 0x3d9c, 0x3da3, 0x3daa, 0x0ea5, 0x0eac, + 0x3db1, 0x3db8, 0x3dbf, 0x0ec8, 0x0ecf, 0x3dc6, 0x0edd, 0x3dcd, + 0x3dd4, 0x0ef2, 0x0ef9, 0x0f00, 0x3ddb, 0x0f0e, 0x0f15, 0x0f1c, + 0x0f23, 0x0f2a, 0x0f31, 0x0f38, 0x3de2, 0x0f46, 0x0f4d, 0x3de9, + 0x4192, 0x4199, 0x41a0, 0x41a7, 0x0004, 0x1053, 0x104d, 0x104a, + 0x1050, 0x0001, 0x0036, 0x0719, 0x0001, 0x0036, 0x04f5, 0x0001, + 0x0036, 0x04f5, 0x0001, 0x0036, 0x0503, 0x0004, 0x1064, 0x105e, + // Entry 5E5C0 - 5E5FF + 0x105b, 0x1061, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0008, 0x1070, + 0x0000, 0x0000, 0x0000, 0x10d5, 0x10e8, 0x0000, 0x10f9, 0x0002, + 0x1073, 0x10a4, 0x0003, 0x1077, 0x1086, 0x1095, 0x000d, 0x0036, + 0xffff, 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, + 0x052d, 0x0532, 0x0537, 0x053d, 0x0543, 0x000d, 0x0000, 0xffff, + 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, 0x0041, + 0x2424, 0x4414, 0x4417, 0x441a, 0x000d, 0x0036, 0xffff, 0x050a, + // Entry 5E600 - 5E63F + 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, 0x0532, + 0x0537, 0x053d, 0x0543, 0x0003, 0x10a8, 0x10b7, 0x10c6, 0x000d, + 0x0036, 0xffff, 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, + 0x0528, 0x052d, 0x0532, 0x0537, 0x053d, 0x0543, 0x000d, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x003b, 0x449c, 0x449e, + 0x0041, 0x2424, 0x4414, 0x4417, 0x441a, 0x000d, 0x0036, 0xffff, + 0x050a, 0x050f, 0x0514, 0x0519, 0x051e, 0x0523, 0x0528, 0x052d, + 0x0532, 0x0537, 0x053d, 0x0543, 0x0003, 0x10de, 0x10e3, 0x10d9, + // Entry 5E640 - 5E67F + 0x0001, 0x10db, 0x0001, 0x0078, 0x1afa, 0x0001, 0x10e0, 0x0001, + 0x0078, 0x1afa, 0x0001, 0x10e5, 0x0001, 0x0078, 0x1afa, 0x0004, + 0x10f6, 0x10f0, 0x10ed, 0x10f3, 0x0001, 0x0078, 0x17a8, 0x0001, + 0x0078, 0x17bc, 0x0001, 0x0078, 0x17bc, 0x0001, 0x0078, 0x17cb, + 0x0004, 0x1107, 0x1101, 0x10fe, 0x1104, 0x0001, 0x0078, 0x17d3, + 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + 0x03c6, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x1113, 0x1129, + 0x0000, 0x113a, 0x0003, 0x111d, 0x1123, 0x1117, 0x0001, 0x1119, + // Entry 5E680 - 5E6BF + 0x0002, 0x0078, 0x1b04, 0x1b0e, 0x0001, 0x111f, 0x0002, 0x0078, + 0x1b04, 0x1b0e, 0x0001, 0x1125, 0x0002, 0x0078, 0x1b04, 0x1b0e, + 0x0004, 0x1137, 0x1131, 0x112e, 0x1134, 0x0001, 0x0078, 0x1b15, + 0x0001, 0x0036, 0x04f5, 0x0001, 0x0036, 0x04f5, 0x0001, 0x0036, + 0x0503, 0x0004, 0x1148, 0x1142, 0x113f, 0x1145, 0x0001, 0x0078, + 0x17d3, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, + 0x0000, 0x03c6, 0x0042, 0x118e, 0x1193, 0x1198, 0x119d, 0x11b2, + 0x11c7, 0x11dc, 0x11f1, 0x1206, 0x121b, 0x1230, 0x1245, 0x125a, + // Entry 5E6C0 - 5E6FF + 0x1273, 0x128c, 0x12a5, 0x12aa, 0x12af, 0x12b4, 0x12cb, 0x12e2, + 0x12f9, 0x12fe, 0x1303, 0x1308, 0x130d, 0x1312, 0x1317, 0x131c, + 0x1321, 0x1326, 0x1338, 0x134a, 0x135c, 0x136e, 0x1380, 0x1392, + 0x13a4, 0x13b6, 0x13c8, 0x13da, 0x13ec, 0x13fe, 0x1410, 0x1422, + 0x1434, 0x1446, 0x1458, 0x146a, 0x147c, 0x148e, 0x14a0, 0x14a5, + 0x14aa, 0x14af, 0x14c3, 0x14d7, 0x14eb, 0x14ff, 0x1513, 0x1527, + 0x153b, 0x154f, 0x1563, 0x1568, 0x156d, 0x0001, 0x1190, 0x0001, + 0x0078, 0x1b28, 0x0001, 0x1195, 0x0001, 0x0078, 0x1b28, 0x0001, + // Entry 5E700 - 5E73F + 0x119a, 0x0001, 0x0078, 0x1b28, 0x0003, 0x11a1, 0x11a4, 0x11a9, + 0x0001, 0x0036, 0x1074, 0x0003, 0x007b, 0x0007, 0x000e, 0x0015, + 0x0002, 0x11ac, 0x11af, 0x0001, 0x0036, 0x108d, 0x0001, 0x0036, + 0x1098, 0x0003, 0x11b6, 0x11b9, 0x11be, 0x0001, 0x0036, 0x1074, + 0x0003, 0x007b, 0x0007, 0x000e, 0x0015, 0x0002, 0x11c1, 0x11c4, + 0x0001, 0x0036, 0x108d, 0x0001, 0x0036, 0x1098, 0x0003, 0x11cb, + 0x11ce, 0x11d3, 0x0001, 0x0036, 0x1074, 0x0003, 0x007b, 0x0007, + 0x000e, 0x0015, 0x0002, 0x11d6, 0x11d9, 0x0001, 0x0036, 0x108d, + // Entry 5E740 - 5E77F + 0x0001, 0x0036, 0x1098, 0x0003, 0x11e0, 0x11e3, 0x11e8, 0x0001, + 0x0078, 0x1b44, 0x0003, 0x0078, 0x1b48, 0x3c0c, 0x1b59, 0x0002, + 0x11eb, 0x11ee, 0x0001, 0x0078, 0x1b63, 0x0001, 0x0078, 0x1b6e, + 0x0003, 0x11f5, 0x11f8, 0x11fd, 0x0001, 0x0078, 0x1b44, 0x0003, + 0x0078, 0x1b48, 0x3c0c, 0x1b59, 0x0002, 0x1200, 0x1203, 0x0001, + 0x0078, 0x1b63, 0x0001, 0x0078, 0x1b6e, 0x0003, 0x120a, 0x120d, + 0x1212, 0x0001, 0x0078, 0x1b44, 0x0003, 0x0078, 0x1b48, 0x3c0c, + 0x1b59, 0x0002, 0x1215, 0x1218, 0x0001, 0x0078, 0x1b63, 0x0001, + // Entry 5E780 - 5E7BF + 0x0078, 0x1b6e, 0x0003, 0x121f, 0x1222, 0x1227, 0x0001, 0x0036, + 0x054d, 0x0003, 0x0078, 0x1b87, 0x3c16, 0x1b9b, 0x0002, 0x122a, + 0x122d, 0x0001, 0x0078, 0x1ba5, 0x0001, 0x0078, 0x1bb3, 0x0003, + 0x1234, 0x1237, 0x123c, 0x0001, 0x0036, 0x054d, 0x0003, 0x0078, + 0x1b87, 0x3c16, 0x1b9b, 0x0002, 0x123f, 0x1242, 0x0001, 0x0078, + 0x1ba5, 0x0001, 0x0078, 0x1bb3, 0x0003, 0x1249, 0x124c, 0x1251, + 0x0001, 0x0036, 0x054d, 0x0003, 0x0078, 0x1b87, 0x3c16, 0x1b9b, + 0x0002, 0x1254, 0x1257, 0x0001, 0x0078, 0x1ba5, 0x0001, 0x0078, + // Entry 5E7C0 - 5E7FF + 0x1bb3, 0x0004, 0x125f, 0x1262, 0x1267, 0x1270, 0x0001, 0x0036, + 0x1175, 0x0003, 0x007c, 0x0062, 0x0069, 0x0070, 0x0002, 0x126a, + 0x126d, 0x0001, 0x007c, 0x0077, 0x0001, 0x007c, 0x0082, 0x0001, + 0x007c, 0x008d, 0x0004, 0x1278, 0x127b, 0x1280, 0x1289, 0x0001, + 0x0036, 0x1175, 0x0003, 0x007c, 0x0062, 0x0069, 0x0070, 0x0002, + 0x1283, 0x1286, 0x0001, 0x007c, 0x0077, 0x0001, 0x007c, 0x0082, + 0x0001, 0x007c, 0x008d, 0x0004, 0x1291, 0x1294, 0x1299, 0x12a2, + 0x0001, 0x0036, 0x1175, 0x0003, 0x007c, 0x0062, 0x0069, 0x0070, + // Entry 5E800 - 5E83F + 0x0002, 0x129c, 0x129f, 0x0001, 0x007c, 0x0077, 0x0001, 0x007c, + 0x0082, 0x0001, 0x007c, 0x008d, 0x0001, 0x12a7, 0x0001, 0x0036, + 0x1175, 0x0001, 0x12ac, 0x0001, 0x0036, 0x1175, 0x0001, 0x12b1, + 0x0001, 0x0036, 0x1175, 0x0003, 0x12b8, 0x12bb, 0x12c2, 0x0001, + 0x0036, 0x0549, 0x0005, 0x0078, 0x3bc3, 0x3bca, 0x3bd1, 0x1c18, + 0x1c34, 0x0002, 0x12c5, 0x12c8, 0x0001, 0x007c, 0x0098, 0x0001, + 0x007c, 0x00a3, 0x0003, 0x12cf, 0x12d2, 0x12d9, 0x0001, 0x0036, + 0x0549, 0x0005, 0x0078, 0x3bc3, 0x3bca, 0x3bd1, 0x1c18, 0x1c34, + // Entry 5E840 - 5E87F + 0x0002, 0x12dc, 0x12df, 0x0001, 0x007c, 0x0098, 0x0001, 0x007c, + 0x00a3, 0x0003, 0x12e6, 0x12e9, 0x12f0, 0x0001, 0x0036, 0x0549, + 0x0005, 0x0078, 0x3bc3, 0x3bca, 0x3bd1, 0x1c18, 0x1c34, 0x0002, + 0x12f3, 0x12f6, 0x0001, 0x007c, 0x0098, 0x0001, 0x007c, 0x00a3, + 0x0001, 0x12fb, 0x0001, 0x007c, 0x00ae, 0x0001, 0x1300, 0x0001, + 0x007c, 0x00ae, 0x0001, 0x1305, 0x0001, 0x007c, 0x00ae, 0x0001, + 0x130a, 0x0001, 0x0078, 0x1c42, 0x0001, 0x130f, 0x0001, 0x0078, + 0x1c42, 0x0001, 0x1314, 0x0001, 0x0078, 0x1c42, 0x0001, 0x1319, + // Entry 5E880 - 5E8BF + 0x0001, 0x007c, 0x00b5, 0x0001, 0x131e, 0x0001, 0x007c, 0x00b5, + 0x0001, 0x1323, 0x0001, 0x007c, 0x00b5, 0x0003, 0x0000, 0x132a, + 0x132f, 0x0003, 0x007c, 0x00c2, 0x00cc, 0x00d6, 0x0002, 0x1332, + 0x1335, 0x0001, 0x007c, 0x00e0, 0x0001, 0x007c, 0x00f1, 0x0003, + 0x0000, 0x133c, 0x1341, 0x0003, 0x007c, 0x00c2, 0x00cc, 0x00d6, + 0x0002, 0x1344, 0x1347, 0x0001, 0x007c, 0x00e0, 0x0001, 0x007c, + 0x00f1, 0x0003, 0x0000, 0x134e, 0x1353, 0x0003, 0x007c, 0x00c2, + 0x00cc, 0x00d6, 0x0002, 0x1356, 0x1359, 0x0001, 0x007c, 0x00e0, + // Entry 5E8C0 - 5E8FF + 0x0001, 0x007c, 0x00f1, 0x0003, 0x0000, 0x1360, 0x1365, 0x0003, + 0x007c, 0x0102, 0x010c, 0x0116, 0x0002, 0x1368, 0x136b, 0x0001, + 0x007c, 0x0120, 0x0001, 0x007c, 0x0131, 0x0003, 0x0000, 0x1372, + 0x1377, 0x0003, 0x007c, 0x0102, 0x010c, 0x0116, 0x0002, 0x137a, + 0x137d, 0x0001, 0x007c, 0x0120, 0x0001, 0x007c, 0x0131, 0x0003, + 0x0000, 0x1384, 0x1389, 0x0003, 0x007c, 0x0102, 0x010c, 0x0116, + 0x0002, 0x138c, 0x138f, 0x0001, 0x007c, 0x0120, 0x0001, 0x007c, + 0x0131, 0x0003, 0x0000, 0x1396, 0x139b, 0x0003, 0x007c, 0x0142, + // Entry 5E900 - 5E93F + 0x014c, 0x0156, 0x0002, 0x139e, 0x13a1, 0x0001, 0x007c, 0x0160, + 0x0001, 0x007c, 0x0171, 0x0003, 0x0000, 0x13a8, 0x13ad, 0x0003, + 0x007c, 0x0142, 0x014c, 0x0156, 0x0002, 0x13b0, 0x13b3, 0x0001, + 0x007c, 0x0160, 0x0001, 0x007c, 0x0171, 0x0003, 0x0000, 0x13ba, + 0x13bf, 0x0003, 0x007c, 0x0142, 0x014c, 0x0156, 0x0002, 0x13c2, + 0x13c5, 0x0001, 0x007c, 0x0160, 0x0001, 0x007c, 0x0171, 0x0003, + 0x0000, 0x13cc, 0x13d1, 0x0003, 0x007c, 0x0182, 0x018c, 0x0196, + 0x0002, 0x13d4, 0x13d7, 0x0001, 0x007c, 0x01a0, 0x0001, 0x007c, + // Entry 5E940 - 5E97F + 0x01b1, 0x0003, 0x0000, 0x13de, 0x13e3, 0x0003, 0x007c, 0x0182, + 0x018c, 0x0196, 0x0002, 0x13e6, 0x13e9, 0x0001, 0x007c, 0x01a0, + 0x0001, 0x007c, 0x01b1, 0x0003, 0x0000, 0x13f0, 0x13f5, 0x0003, + 0x007c, 0x0182, 0x018c, 0x0196, 0x0002, 0x13f8, 0x13fb, 0x0001, + 0x007c, 0x01a0, 0x0001, 0x007c, 0x01b1, 0x0003, 0x0000, 0x1402, + 0x1407, 0x0003, 0x007c, 0x01c2, 0x01cc, 0x01d6, 0x0002, 0x140a, + 0x140d, 0x0001, 0x007c, 0x01e0, 0x0001, 0x007c, 0x01f1, 0x0003, + 0x0000, 0x1414, 0x1419, 0x0003, 0x007c, 0x01c2, 0x01cc, 0x01d6, + // Entry 5E980 - 5E9BF + 0x0002, 0x141c, 0x141f, 0x0001, 0x007c, 0x01e0, 0x0001, 0x007c, + 0x01f1, 0x0003, 0x0000, 0x1426, 0x142b, 0x0003, 0x007c, 0x01c2, + 0x01cc, 0x01d6, 0x0002, 0x142e, 0x1431, 0x0001, 0x007c, 0x01e0, + 0x0001, 0x007c, 0x01f1, 0x0003, 0x0000, 0x1438, 0x143d, 0x0003, + 0x007c, 0x0202, 0x020c, 0x0216, 0x0002, 0x1440, 0x1443, 0x0001, + 0x007c, 0x0220, 0x0001, 0x007c, 0x0231, 0x0003, 0x0000, 0x144a, + 0x144f, 0x0003, 0x007c, 0x0202, 0x020c, 0x0216, 0x0002, 0x1452, + 0x1455, 0x0001, 0x007c, 0x0220, 0x0001, 0x007c, 0x0231, 0x0003, + // Entry 5E9C0 - 5E9FF + 0x0000, 0x145c, 0x1461, 0x0003, 0x007c, 0x0202, 0x020c, 0x0216, + 0x0002, 0x1464, 0x1467, 0x0001, 0x007c, 0x0220, 0x0001, 0x007c, + 0x0231, 0x0003, 0x0000, 0x146e, 0x1473, 0x0003, 0x007c, 0x0242, + 0x024c, 0x0256, 0x0002, 0x1476, 0x1479, 0x0001, 0x007c, 0x0260, + 0x0001, 0x007c, 0x0271, 0x0003, 0x0000, 0x1480, 0x1485, 0x0003, + 0x007c, 0x0242, 0x024c, 0x0256, 0x0002, 0x1488, 0x148b, 0x0001, + 0x007c, 0x0260, 0x0001, 0x007c, 0x0271, 0x0003, 0x0000, 0x1492, + 0x1497, 0x0003, 0x007c, 0x0242, 0x024c, 0x0256, 0x0002, 0x149a, + // Entry 5EA00 - 5EA3F + 0x149d, 0x0001, 0x007c, 0x0260, 0x0001, 0x007c, 0x0271, 0x0001, + 0x14a2, 0x0001, 0x0078, 0x1e91, 0x0001, 0x14a7, 0x0001, 0x0078, + 0x1e91, 0x0001, 0x14ac, 0x0001, 0x0078, 0x1e91, 0x0003, 0x14b3, + 0x14b6, 0x14ba, 0x0001, 0x0078, 0x1e9f, 0x0002, 0x007c, 0xffff, + 0x0282, 0x0002, 0x14bd, 0x14c0, 0x0001, 0x0078, 0x1eb3, 0x0001, + 0x0078, 0x1ec1, 0x0003, 0x14c7, 0x14ca, 0x14ce, 0x0001, 0x0078, + 0x1e9f, 0x0002, 0x007c, 0xffff, 0x0282, 0x0002, 0x14d1, 0x14d4, + 0x0001, 0x0078, 0x1eb3, 0x0001, 0x0078, 0x1ec1, 0x0003, 0x14db, + // Entry 5EA40 - 5EA7F + 0x14de, 0x14e2, 0x0001, 0x0078, 0x1e9f, 0x0002, 0x007c, 0xffff, + 0x0282, 0x0002, 0x14e5, 0x14e8, 0x0001, 0x0078, 0x1eb3, 0x0001, + 0x0078, 0x1ec1, 0x0003, 0x14ef, 0x14f2, 0x14f6, 0x0001, 0x0078, + 0x1ecf, 0x0002, 0x007c, 0xffff, 0x028f, 0x0002, 0x14f9, 0x14fc, + 0x0001, 0x0078, 0x1ee0, 0x0001, 0x0078, 0x1eee, 0x0003, 0x1503, + 0x1506, 0x150a, 0x0001, 0x0078, 0x1ecf, 0x0002, 0x007c, 0xffff, + 0x028f, 0x0002, 0x150d, 0x1510, 0x0001, 0x0078, 0x1ee0, 0x0001, + 0x0078, 0x1eee, 0x0003, 0x1517, 0x151a, 0x151e, 0x0001, 0x0078, + // Entry 5EA80 - 5EABF + 0x1ecf, 0x0002, 0x007c, 0xffff, 0x028f, 0x0002, 0x1521, 0x1524, + 0x0001, 0x0078, 0x1ee0, 0x0001, 0x0078, 0x1eee, 0x0003, 0x152b, + 0x152e, 0x1532, 0x0001, 0x0036, 0x1944, 0x0002, 0x007c, 0xffff, + 0x029c, 0x0002, 0x1535, 0x1538, 0x0001, 0x0036, 0x194c, 0x0001, + 0x0036, 0x1957, 0x0003, 0x153f, 0x1542, 0x1546, 0x0001, 0x0036, + 0x1944, 0x0002, 0x007c, 0xffff, 0x029c, 0x0002, 0x1549, 0x154c, + 0x0001, 0x0036, 0x194c, 0x0001, 0x0036, 0x1957, 0x0003, 0x1553, + 0x1556, 0x155a, 0x0001, 0x0036, 0x1944, 0x0002, 0x007c, 0xffff, + // Entry 5EAC0 - 5EAFF + 0x029c, 0x0002, 0x155d, 0x1560, 0x0001, 0x0036, 0x194c, 0x0001, + 0x0036, 0x1957, 0x0001, 0x1565, 0x0001, 0x0078, 0x1f03, 0x0001, + 0x156a, 0x0001, 0x0078, 0x1f03, 0x0001, 0x156f, 0x0001, 0x0078, + 0x1f03, 0x0004, 0x1577, 0x157c, 0x1581, 0x1590, 0x0003, 0x0000, + 0x1dc7, 0x4333, 0x432f, 0x0003, 0x0036, 0x1989, 0x41ae, 0x41b7, + 0x0002, 0x0000, 0x1584, 0x0003, 0x0000, 0x158b, 0x1588, 0x0001, + 0x007c, 0x02a3, 0x0003, 0x0078, 0xffff, 0x1f1d, 0x1f30, 0x0002, + 0x1777, 0x1593, 0x0003, 0x1597, 0x16d7, 0x1637, 0x009e, 0x0078, + // Entry 5EB00 - 5EB3F + 0xffff, 0xffff, 0xffff, 0xffff, 0x1fb6, 0x1fe9, 0x2073, 0x20af, + 0x20e2, 0x2115, 0x2148, 0x2184, 0x21c9, 0x2286, 0x22c2, 0x22fe, + 0x234c, 0x2391, 0x23cd, 0x2412, 0x2460, 0x24a5, 0x24ea, 0x252f, + 0x257d, 0xffff, 0xffff, 0x25d9, 0xffff, 0x262b, 0xffff, 0x2687, + 0x26cc, 0x26ff, 0x2732, 0xffff, 0xffff, 0x2794, 0x27d9, 0x2821, + 0xffff, 0xffff, 0xffff, 0x288a, 0xffff, 0x28df, 0x2912, 0xffff, + 0x2958, 0x298b, 0x29d9, 0xffff, 0xffff, 0xffff, 0xffff, 0x2a6d, + 0xffff, 0xffff, 0x2adb, 0x2b29, 0xffff, 0xffff, 0x2bb6, 0x2c10, + // Entry 5EB40 - 5EB7F + 0x2c43, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2cee, + 0x2d21, 0x2d6f, 0x2dab, 0x2dde, 0xffff, 0xffff, 0x2e7c, 0xffff, + 0x2ebf, 0xffff, 0xffff, 0x2f5b, 0xffff, 0x2fe3, 0xffff, 0xffff, + 0xffff, 0xffff, 0x306e, 0xffff, 0x30c0, 0x3117, 0x316e, 0x31b3, + 0xffff, 0xffff, 0xffff, 0x3219, 0x3276, 0x32b2, 0xffff, 0xffff, + 0x3311, 0x33a8, 0x33f6, 0x343b, 0xffff, 0xffff, 0x34a9, 0x34e5, + 0x3518, 0xffff, 0x3c1d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x3686, 0x36c2, 0x36fe, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 5EB80 - 5EBBF + 0xffff, 0xffff, 0x37bc, 0xffff, 0xffff, 0x3815, 0xffff, 0x3858, + 0xffff, 0x38a4, 0x38e0, 0x3925, 0xffff, 0x3974, 0x39b0, 0xffff, + 0xffff, 0xffff, 0x3a43, 0x3a88, 0xffff, 0xffff, 0x1f46, 0x202e, + 0x2205, 0x2241, 0xffff, 0xffff, 0x2fa0, 0x360f, 0x009e, 0x0078, + 0x1f79, 0x1f89, 0x1f96, 0x1fa3, 0x1fc3, 0x1ffc, 0x2083, 0x20bc, + 0x20ef, 0x2122, 0x2158, 0x2197, 0x21d9, 0x2296, 0x22d2, 0x2314, + 0x235f, 0x23a1, 0x23e0, 0x2428, 0x2473, 0x24b8, 0x24fd, 0x2545, + 0x258d, 0x25b9, 0x25c6, 0x25ec, 0x261e, 0x263b, 0x2677, 0x269a, + // Entry 5EBC0 - 5EBFF + 0x26d9, 0x270c, 0x2742, 0x276e, 0x277e, 0x27a7, 0x27ec, 0x282e, + 0x2854, 0x2864, 0x287a, 0x289d, 0x28cf, 0x28ec, 0x291f, 0x2945, + 0x2965, 0x29a1, 0x29e6, 0x2a0c, 0x2a22, 0x2a3e, 0x2a57, 0x2a7d, + 0x2aa9, 0x2ac2, 0x2af1, 0x2b3f, 0x2b8a, 0x2ba6, 0x2bd0, 0x2c1d, + 0x2c53, 0x2c7f, 0x2c92, 0x2ca2, 0x2cb5, 0x2cc8, 0x2cdb, 0x2cfb, + 0x2d37, 0x2d7f, 0x2db8, 0x2e00, 0x2e56, 0x2e69, 0x2e89, 0x2eaf, + 0x2ede, 0x2f28, 0x2f48, 0x2f6e, 0x2fd3, 0x2ff3, 0x301f, 0x3032, + 0x3045, 0x3058, 0x3081, 0x30b3, 0x30d9, 0x3130, 0x3181, 0x31c3, + // Entry 5EC00 - 5EC3F + 0x31ef, 0x31fc, 0x3209, 0x3232, 0x3286, 0x32c2, 0x32ee, 0x32fe, + 0x3336, 0x33be, 0x3409, 0x344e, 0x3480, 0x348d, 0x34b9, 0x34f2, + 0x3528, 0x3554, 0x3c3f, 0x35e2, 0x35f2, 0x3602, 0x3666, 0x3676, + 0x3696, 0x36d2, 0x370e, 0x373a, 0x374a, 0x3760, 0x3776, 0x3789, + 0x3799, 0x37ac, 0x37c9, 0x37ef, 0x37ff, 0x3822, 0x3848, 0x3868, + 0x3894, 0x38b4, 0x38f3, 0x3935, 0x3961, 0x3984, 0x39c6, 0x39fe, + 0x3a11, 0x3a21, 0x3a56, 0x3a9e, 0x2b77, 0x338c, 0x1f53, 0x2041, + 0x2215, 0x2254, 0x2667, 0x2f3b, 0x2fad, 0x3628, 0x009e, 0x0078, + // Entry 5EC40 - 5EC7F + 0xffff, 0xffff, 0xffff, 0xffff, 0x1fd6, 0x2015, 0x2099, 0x20cf, + 0x2102, 0x2135, 0x216e, 0x21b0, 0x21ef, 0x22ac, 0x22e8, 0x2330, + 0x2378, 0x23b7, 0x23f9, 0x2444, 0x248c, 0x24d1, 0x2516, 0x2561, + 0x25a3, 0xffff, 0xffff, 0x2605, 0xffff, 0x2651, 0xffff, 0x26b3, + 0x26ec, 0x271f, 0x2758, 0xffff, 0xffff, 0x27c0, 0x2805, 0x2841, + 0xffff, 0xffff, 0xffff, 0x28b6, 0xffff, 0x28ff, 0x2932, 0xffff, + 0x2978, 0x29bd, 0x29f9, 0xffff, 0xffff, 0xffff, 0xffff, 0x2a93, + 0xffff, 0xffff, 0x2b0d, 0x2b5b, 0xffff, 0xffff, 0x2bf0, 0x2c30, + // Entry 5EC80 - 5ECBF + 0x2c69, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2d0e, + 0x2d53, 0x2d95, 0x2dcb, 0x2e28, 0xffff, 0xffff, 0x2e9c, 0xffff, + 0x2f03, 0xffff, 0xffff, 0x2f87, 0xffff, 0x3009, 0xffff, 0xffff, + 0xffff, 0xffff, 0x309a, 0xffff, 0x30f8, 0x314f, 0x319a, 0x31d9, + 0xffff, 0xffff, 0xffff, 0x3251, 0x329c, 0x32d8, 0xffff, 0xffff, + 0x3361, 0x33da, 0x3422, 0x3467, 0xffff, 0xffff, 0x34cf, 0x3505, + 0x353e, 0xffff, 0x3c67, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x36ac, 0x36e8, 0x3724, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 5ECC0 - 5ECFF + 0xffff, 0xffff, 0x37dc, 0xffff, 0xffff, 0x3835, 0xffff, 0x387e, + 0xffff, 0x38ca, 0x390c, 0x394b, 0xffff, 0x399a, 0x39e2, 0xffff, + 0xffff, 0xffff, 0x3a6f, 0x3aba, 0xffff, 0xffff, 0x1f66, 0x205a, + 0x222b, 0x226d, 0xffff, 0xffff, 0x2fc0, 0x3647, 0x0003, 0x177b, + 0x17fd, 0x17bc, 0x003f, 0x0007, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0000, 0xffff, 0x000e, 0x0019, 0x0024, 0x002f, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x003a, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 5ED00 - 5ED3F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x24cd, 0x003f, 0x0007, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0004, 0xffff, 0x0011, 0x001c, 0x249e, 0x0032, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x003d, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 5ED40 - 5ED7F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x25c9, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0068, 0x003f, 0x0007, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0009, 0xffff, 0x0015, 0x0020, 0x24a2, + 0x0036, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0041, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 5ED80 - 5EDBF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x006d, 0x0003, 0x0004, 0x01ce, + 0x048e, 0x0012, 0x0017, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, + 0x00aa, 0x00cb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x01c5, 0x0008, 0x0000, 0x0000, 0x0000, + // Entry 5EDC0 - 5EDFF + 0x0000, 0x0000, 0x0000, 0x0000, 0x9006, 0x0008, 0x0029, 0x0000, + 0x0000, 0x0000, 0x0000, 0x008e, 0x0000, 0x009f, 0x0002, 0x002c, + 0x005d, 0x0003, 0x0030, 0x003f, 0x004e, 0x000d, 0x0036, 0xffff, + 0x0036, 0x413f, 0x4146, 0x414d, 0x4154, 0x415b, 0x4162, 0x4169, + 0x4170, 0x4177, 0x417e, 0x4188, 0x000d, 0x0036, 0xffff, 0x0090, + 0x0094, 0x0098, 0x009c, 0x00a0, 0x00a4, 0x00a8, 0x00ac, 0x00b0, + 0x00b4, 0x00b8, 0x00bf, 0x000d, 0x0036, 0xffff, 0x0036, 0x413f, + 0x4146, 0x414d, 0x4154, 0x415b, 0x4162, 0x4169, 0x4170, 0x4177, + // Entry 5EE00 - 5EE3F + 0x417e, 0x4188, 0x0003, 0x0061, 0x0070, 0x007f, 0x000d, 0x0036, + 0xffff, 0x0036, 0x413f, 0x4146, 0x414d, 0x4154, 0x415b, 0x4162, + 0x4169, 0x4170, 0x4177, 0x417e, 0x4188, 0x000d, 0x0036, 0xffff, + 0x0090, 0x0094, 0x0098, 0x009c, 0x00a0, 0x00a4, 0x00a8, 0x00ac, + 0x00b0, 0x00b4, 0x00b8, 0x00bf, 0x000d, 0x0036, 0xffff, 0x0036, + 0x413f, 0x4146, 0x414d, 0x4154, 0x415b, 0x4162, 0x4169, 0x4170, + 0x4177, 0x417e, 0x4188, 0x0004, 0x009c, 0x0096, 0x0093, 0x0099, + 0x0001, 0x007c, 0x02b6, 0x0001, 0x007c, 0x02ca, 0x0001, 0x007c, + // Entry 5EE40 - 5EE7F + 0x02da, 0x0001, 0x0078, 0x17a2, 0x0004, 0x00a7, 0x0000, 0x0000, + 0x00a4, 0x0001, 0x0006, 0x022e, 0x0001, 0x0006, 0x022e, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00b3, 0x0000, 0x00c4, + 0x0004, 0x00c1, 0x00bb, 0x00b8, 0x00be, 0x0001, 0x0036, 0x0719, + 0x0001, 0x0036, 0x04f5, 0x0001, 0x0036, 0x04f5, 0x0001, 0x0036, + 0x0503, 0x0003, 0x0000, 0x0000, 0x00c8, 0x0001, 0x0000, 0x03c6, + 0x0008, 0x0000, 0x0000, 0x00d4, 0x00e9, 0x01ab, 0x01bb, 0x0000, + 0x0000, 0x0002, 0x00d7, 0x00e0, 0x0001, 0x00d9, 0x0005, 0x0000, + // Entry 5EE80 - 5EEBF + 0xffff, 0x04e3, 0x39f2, 0x39f5, 0x44d4, 0x0001, 0x00e2, 0x0005, + 0x0000, 0xffff, 0x04e3, 0x39f2, 0x39f5, 0x44d4, 0x0002, 0x00ec, + 0x0150, 0x0003, 0x00f0, 0x0110, 0x0130, 0x000a, 0x0000, 0x0000, + 0x00fb, 0x00fe, 0x0104, 0x010a, 0x010d, 0x0000, 0x0101, 0x0107, + 0x0001, 0x0078, 0x1840, 0x0001, 0x007a, 0x00bf, 0x0001, 0x0078, + 0x1847, 0x0001, 0x0078, 0x1863, 0x0001, 0x0078, 0x184e, 0x0001, + 0x007a, 0x00c6, 0x0001, 0x0078, 0x1878, 0x000a, 0x0000, 0x0000, + 0x011b, 0x011e, 0x0124, 0x012a, 0x012d, 0x0000, 0x0121, 0x0127, + // Entry 5EEC0 - 5EEFF + 0x0001, 0x0078, 0x1840, 0x0001, 0x007a, 0x00bf, 0x0001, 0x0078, + 0x1847, 0x0001, 0x0078, 0x1863, 0x0001, 0x0078, 0x184e, 0x0001, + 0x007a, 0x00c6, 0x0001, 0x0078, 0x1878, 0x000a, 0x0000, 0x0000, + 0x013b, 0x013e, 0x0144, 0x014a, 0x014d, 0x0000, 0x0141, 0x0147, + 0x0001, 0x0078, 0x1840, 0x0001, 0x007a, 0x00bf, 0x0001, 0x0078, + 0x1847, 0x0001, 0x0078, 0x1863, 0x0001, 0x0078, 0x184e, 0x0001, + 0x007a, 0x00c6, 0x0001, 0x0078, 0x1878, 0x0003, 0x0154, 0x0171, + 0x018e, 0x000a, 0x0000, 0x0000, 0x0000, 0x015f, 0x0165, 0x016b, + // Entry 5EF00 - 5EF3F + 0x016e, 0x0000, 0x0162, 0x0168, 0x0001, 0x007a, 0x00bf, 0x0001, + 0x0078, 0x1847, 0x0001, 0x0078, 0x1863, 0x0001, 0x0078, 0x184e, + 0x0001, 0x007a, 0x00c6, 0x0001, 0x0078, 0x1878, 0x000a, 0x0000, + 0x0000, 0x0000, 0x017c, 0x0182, 0x0188, 0x018b, 0x0000, 0x017f, + 0x0185, 0x0001, 0x007a, 0x00bf, 0x0001, 0x0078, 0x1847, 0x0001, + 0x0078, 0x1863, 0x0001, 0x0078, 0x184e, 0x0001, 0x007a, 0x00c6, + 0x0001, 0x0078, 0x1878, 0x000a, 0x0000, 0x0000, 0x0000, 0x0199, + 0x019f, 0x01a5, 0x01a8, 0x0000, 0x019c, 0x01a2, 0x0001, 0x007a, + // Entry 5EF40 - 5EF7F + 0x00bf, 0x0001, 0x0078, 0x1847, 0x0001, 0x0078, 0x1863, 0x0001, + 0x0078, 0x184e, 0x0001, 0x007a, 0x00c6, 0x0001, 0x0078, 0x1878, + 0x0003, 0x01b5, 0x0000, 0x01af, 0x0001, 0x01b1, 0x0002, 0x0078, + 0x1889, 0x189a, 0x0001, 0x01b7, 0x0002, 0x0078, 0x1889, 0x189a, + 0x0003, 0x01c2, 0x0000, 0x01bf, 0x0001, 0x0036, 0x064a, 0x0001, + 0x0002, 0x028b, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x9006, 0x003f, 0x0000, 0x0000, 0x0000, 0x020e, + 0x0216, 0x021e, 0x0230, 0x0238, 0x0240, 0x0000, 0x0000, 0x0252, + // Entry 5EF80 - 5EFBF + 0x025f, 0x0274, 0x0289, 0x0000, 0x0000, 0x0000, 0x029b, 0x02af, + 0x02c3, 0x0000, 0x0000, 0x0000, 0x02d7, 0x02dc, 0x02e1, 0x0000, + 0x0000, 0x0000, 0x02e6, 0x02f8, 0x030a, 0x0317, 0x0329, 0x033b, + 0x0348, 0x035a, 0x036c, 0x0379, 0x038b, 0x039d, 0x03aa, 0x03bc, + 0x03ce, 0x03db, 0x03ed, 0x03ff, 0x040c, 0x041e, 0x0430, 0x0000, + 0x0000, 0x0000, 0x043d, 0x0444, 0x044b, 0x045f, 0x0466, 0x046d, + 0x0000, 0x0000, 0x0481, 0x0002, 0x0000, 0x0211, 0x0003, 0x007c, + 0x02e3, 0x02ea, 0x02f1, 0x0002, 0x0000, 0x0219, 0x0003, 0x007c, + // Entry 5EFC0 - 5EFFF + 0x02e3, 0x02ea, 0x02f1, 0x0003, 0x0000, 0x0222, 0x0227, 0x0003, + 0x007c, 0x02e3, 0x02ea, 0x02f1, 0x0002, 0x022a, 0x022d, 0x0001, + 0x0036, 0x10a3, 0x0001, 0x0036, 0x10ad, 0x0002, 0x0000, 0x0233, + 0x0003, 0x0078, 0x1b48, 0x1b52, 0x1b59, 0x0002, 0x0000, 0x023b, + 0x0003, 0x0078, 0x1b79, 0x1b52, 0x1b80, 0x0003, 0x0000, 0x0244, + 0x0249, 0x0003, 0x0078, 0x1b79, 0x1b52, 0x1b80, 0x0002, 0x024c, + 0x024f, 0x0001, 0x007c, 0x02f8, 0x0001, 0x007c, 0x02fe, 0x0003, + 0x0000, 0x0000, 0x0256, 0x0002, 0x0259, 0x025c, 0x0001, 0x007c, + // Entry 5F000 - 5F03F + 0x0304, 0x0001, 0x007c, 0x0311, 0x0003, 0x0263, 0x0266, 0x026b, + 0x0001, 0x007c, 0x031e, 0x0003, 0x0078, 0x1bc1, 0x3c8f, 0x1bd8, + 0x0002, 0x026e, 0x0271, 0x0001, 0x007c, 0x0325, 0x0001, 0x007c, + 0x0333, 0x0003, 0x0278, 0x027b, 0x0280, 0x0001, 0x007c, 0x031e, + 0x0003, 0x0078, 0x1bc1, 0x3c8f, 0x1bd8, 0x0002, 0x0283, 0x0286, + 0x0001, 0x007c, 0x0325, 0x0001, 0x007c, 0x0333, 0x0003, 0x0000, + 0x028d, 0x0292, 0x0003, 0x0078, 0x1bc1, 0x3c8f, 0x1bd8, 0x0002, + 0x0295, 0x0298, 0x0001, 0x007c, 0x0341, 0x0001, 0x007c, 0x034e, + // Entry 5F040 - 5F07F + 0x0003, 0x0000, 0x029f, 0x02a6, 0x0005, 0x007c, 0x0362, 0x0369, + 0x0370, 0x035b, 0x0377, 0x0002, 0x02a9, 0x02ac, 0x0001, 0x0036, + 0x1218, 0x0001, 0x0036, 0x1223, 0x0003, 0x0000, 0x02b3, 0x02ba, + 0x0005, 0x007c, 0x0362, 0x0369, 0x0370, 0x035b, 0x0377, 0x0002, + 0x02bd, 0x02c0, 0x0001, 0x0036, 0x1218, 0x0001, 0x0036, 0x1223, + 0x0003, 0x0000, 0x02c7, 0x02ce, 0x0005, 0x007c, 0x0362, 0x0369, + 0x0370, 0x035b, 0x0377, 0x0002, 0x02d1, 0x02d4, 0x0001, 0x0036, + 0x122e, 0x0001, 0x0036, 0x1238, 0x0001, 0x02d9, 0x0001, 0x007c, + // Entry 5F080 - 5F0BF + 0x037e, 0x0001, 0x02de, 0x0001, 0x007c, 0x037e, 0x0001, 0x02e3, + 0x0001, 0x007c, 0x037e, 0x0003, 0x0000, 0x02ea, 0x02ef, 0x0003, + 0x0078, 0x1c53, 0x3c99, 0x1c70, 0x0002, 0x02f2, 0x02f5, 0x0001, + 0x0078, 0x1c7d, 0x0001, 0x0078, 0x1c91, 0x0003, 0x0000, 0x02fc, + 0x0301, 0x0003, 0x0078, 0x1c53, 0x3c99, 0x1c70, 0x0002, 0x0304, + 0x0307, 0x0001, 0x0078, 0x1c7d, 0x0001, 0x0078, 0x1c91, 0x0003, + 0x0000, 0x0000, 0x030e, 0x0002, 0x0311, 0x0314, 0x0001, 0x0078, + 0x1c7d, 0x0001, 0x0078, 0x1c91, 0x0003, 0x0000, 0x031b, 0x0320, + // Entry 5F0C0 - 5F0FF + 0x0003, 0x0078, 0x1ca5, 0x3ca6, 0x1cc2, 0x0002, 0x0323, 0x0326, + 0x0001, 0x0078, 0x1ccf, 0x0001, 0x0078, 0x1ce3, 0x0003, 0x0000, + 0x032d, 0x0332, 0x0003, 0x0078, 0x1ca5, 0x3ca6, 0x1cc2, 0x0002, + 0x0335, 0x0338, 0x0001, 0x0078, 0x1ccf, 0x0001, 0x0078, 0x1ce3, + 0x0003, 0x0000, 0x0000, 0x033f, 0x0002, 0x0342, 0x0345, 0x0001, + 0x0078, 0x1ccf, 0x0001, 0x0078, 0x1ce3, 0x0003, 0x0000, 0x034c, + 0x0351, 0x0003, 0x0078, 0x1cf7, 0x3cb3, 0x1d14, 0x0002, 0x0354, + 0x0357, 0x0001, 0x0078, 0x1d21, 0x0001, 0x0078, 0x1d35, 0x0003, + // Entry 5F100 - 5F13F + 0x0000, 0x035e, 0x0363, 0x0003, 0x0078, 0x1cf7, 0x3cb3, 0x1d14, + 0x0002, 0x0366, 0x0369, 0x0001, 0x0078, 0x1d21, 0x0001, 0x0078, + 0x1d35, 0x0003, 0x0000, 0x0000, 0x0370, 0x0002, 0x0373, 0x0376, + 0x0001, 0x0078, 0x1d21, 0x0001, 0x0078, 0x1d35, 0x0003, 0x0000, + 0x037d, 0x0382, 0x0003, 0x0078, 0x1d49, 0x3cc0, 0x1d66, 0x0002, + 0x0385, 0x0388, 0x0001, 0x0078, 0x1d73, 0x0001, 0x0078, 0x1d87, + 0x0003, 0x0000, 0x038f, 0x0394, 0x0003, 0x0078, 0x1d49, 0x3cc0, + 0x1d66, 0x0002, 0x0397, 0x039a, 0x0001, 0x0078, 0x1d73, 0x0001, + // Entry 5F140 - 5F17F + 0x0078, 0x1d87, 0x0003, 0x0000, 0x0000, 0x03a1, 0x0002, 0x03a4, + 0x03a7, 0x0001, 0x0078, 0x1d73, 0x0001, 0x0078, 0x1d87, 0x0003, + 0x0000, 0x03ae, 0x03b3, 0x0003, 0x0078, 0x1d9b, 0x3ccd, 0x1db8, + 0x0002, 0x03b6, 0x03b9, 0x0001, 0x0078, 0x1dc5, 0x0001, 0x0078, + 0x1dd9, 0x0003, 0x0000, 0x03c0, 0x03c5, 0x0003, 0x0078, 0x1d9b, + 0x3ccd, 0x1db8, 0x0002, 0x03c8, 0x03cb, 0x0001, 0x0078, 0x1dc5, + 0x0001, 0x0078, 0x1dd9, 0x0003, 0x0000, 0x0000, 0x03d2, 0x0002, + 0x03d5, 0x03d8, 0x0001, 0x0078, 0x1dc5, 0x0001, 0x0078, 0x1dd9, + // Entry 5F180 - 5F1BF + 0x0003, 0x0000, 0x03df, 0x03e4, 0x0003, 0x0078, 0x1ded, 0x3cda, + 0x1e0a, 0x0002, 0x03e7, 0x03ea, 0x0001, 0x0078, 0x1e17, 0x0001, + 0x0078, 0x1e2b, 0x0003, 0x0000, 0x03f1, 0x03f6, 0x0003, 0x0078, + 0x1ded, 0x3cda, 0x1e0a, 0x0002, 0x03f9, 0x03fc, 0x0001, 0x0078, + 0x1e17, 0x0001, 0x0078, 0x1e2b, 0x0003, 0x0000, 0x0000, 0x0403, + 0x0002, 0x0406, 0x0409, 0x0001, 0x0078, 0x1e17, 0x0001, 0x0078, + 0x1e2b, 0x0003, 0x0000, 0x0410, 0x0415, 0x0003, 0x0078, 0x1e3f, + 0x3ce7, 0x1e5c, 0x0002, 0x0418, 0x041b, 0x0001, 0x0078, 0x1e69, + // Entry 5F1C0 - 5F1FF + 0x0001, 0x0078, 0x1e7d, 0x0003, 0x0000, 0x0422, 0x0427, 0x0003, + 0x0078, 0x1e3f, 0x3ce7, 0x1e5c, 0x0002, 0x042a, 0x042d, 0x0001, + 0x0078, 0x1e69, 0x0001, 0x0078, 0x1e7d, 0x0003, 0x0000, 0x0000, + 0x0434, 0x0002, 0x0437, 0x043a, 0x0001, 0x0078, 0x1e69, 0x0001, + 0x0078, 0x1e7d, 0x0002, 0x0000, 0x0440, 0x0002, 0x007c, 0xffff, + 0x0388, 0x0002, 0x0000, 0x0447, 0x0002, 0x007c, 0xffff, 0x0388, + 0x0003, 0x044f, 0x0452, 0x0456, 0x0001, 0x0036, 0x18c1, 0x0002, + 0x007c, 0xffff, 0x0388, 0x0002, 0x0459, 0x045c, 0x0001, 0x007c, + // Entry 5F200 - 5F23F + 0x0395, 0x0001, 0x007c, 0x03a2, 0x0002, 0x0000, 0x0462, 0x0002, + 0x007c, 0xffff, 0x03af, 0x0002, 0x0000, 0x0469, 0x0002, 0x007c, + 0xffff, 0x03af, 0x0003, 0x0471, 0x0474, 0x0478, 0x0001, 0x0036, + 0x190a, 0x0002, 0x007c, 0xffff, 0x03af, 0x0002, 0x047b, 0x047e, + 0x0001, 0x0036, 0x1930, 0x0001, 0x0036, 0x193a, 0x0003, 0x0000, + 0x0000, 0x0485, 0x0002, 0x0488, 0x048b, 0x0001, 0x0036, 0x1962, + 0x0001, 0x0036, 0x196c, 0x0004, 0x0000, 0x0493, 0x0000, 0x0498, + 0x0003, 0x0036, 0xffff, 0x3df0, 0x3e00, 0x0002, 0x0000, 0x049b, + // Entry 5F240 - 5F27F + 0x0003, 0x0534, 0x05c9, 0x049f, 0x0093, 0x007c, 0xffff, 0xffff, + 0xffff, 0x03b9, 0xffff, 0xffff, 0xffff, 0x03d9, 0x041e, 0x0463, + 0x04ab, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x04f6, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0538, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0564, 0xffff, 0xffff, 0xffff, 0xffff, 0x057a, + 0xffff, 0xffff, 0x0590, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x05a3, 0xffff, 0x05cf, 0xffff, 0xffff, + // Entry 5F280 - 5F2BF + 0xffff, 0xffff, 0x0601, 0x0617, 0xffff, 0xffff, 0xffff, 0x0627, + 0xffff, 0x0634, 0xffff, 0xffff, 0xffff, 0xffff, 0x065d, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0695, 0xffff, 0xffff, + 0xffff, 0xffff, 0x06a5, 0xffff, 0xffff, 0x06bb, 0x06ce, 0xffff, + 0x06f4, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0726, + 0xffff, 0x074c, 0xffff, 0xffff, 0xffff, 0xffff, 0x07ac, 0xffff, + 0xffff, 0xffff, 0xffff, 0x07fc, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x0818, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 5F2C0 - 5F2FF + 0xffff, 0x0828, 0x0838, 0x0848, 0xffff, 0x085e, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x087b, 0xffff, 0xffff, 0x08a1, 0xffff, + 0xffff, 0x08c4, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0909, 0x0093, 0x007c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x03c6, 0x040b, 0x0450, 0x0495, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x04e3, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0528, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 5F300 - 5F33F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x05bc, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0647, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x06e1, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0733, 0xffff, + // Entry 5F340 - 5F37F + 0xffff, 0xffff, 0xffff, 0x078a, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x086e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x08b1, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x08f6, 0x0093, 0x007c, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x03f2, + 0x0437, 0x047c, 0x04c7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 5F380 - 5F3BF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x050f, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x054e, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x05e8, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0679, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 5F3C0 - 5F3FF + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x070d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x076b, 0xffff, 0xffff, 0xffff, 0xffff, + 0x07d4, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x088e, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x08dd, 0xffff, 0xffff, 0xffff, 0xffff, + // Entry 5F400 - 5F43F + 0xffff, 0xffff, 0x0922, 0x0003, 0x0004, 0x0244, 0x0677, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0038, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0000, + 0x0027, 0x0004, 0x0024, 0x001e, 0x001b, 0x0021, 0x0001, 0x0000, + 0x1dfa, 0x0001, 0x0002, 0x0010, 0x0001, 0x0002, 0x001b, 0x0001, + 0x0000, 0x04af, 0x0004, 0x0035, 0x002f, 0x002c, 0x0032, 0x0001, + 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, + 0x0001, 0x0000, 0x03c6, 0x0008, 0x0041, 0x00a6, 0x00fd, 0x0132, + // Entry 5F440 - 5F47F + 0x01f7, 0x0211, 0x0222, 0x0233, 0x0002, 0x0044, 0x0075, 0x0003, + 0x0048, 0x0057, 0x0066, 0x000d, 0x0006, 0xffff, 0x001e, 0x44b4, + 0x45a9, 0x45ad, 0x45b1, 0x44b8, 0x44bc, 0x45b5, 0x4581, 0x45b9, + 0x44c4, 0x443d, 0x000d, 0x0018, 0xffff, 0x2a31, 0x2a5a, 0x2a5c, + 0x2a7e, 0x2a5c, 0x2a31, 0x2a31, 0x2a5e, 0x2a71, 0x2a62, 0x2a64, + 0x2a66, 0x000d, 0x007c, 0xffff, 0x093b, 0x0944, 0x094e, 0x0954, + 0x095c, 0x0961, 0x0966, 0x096d, 0x0974, 0x097e, 0x0986, 0x098e, + 0x0003, 0x0079, 0x0088, 0x0097, 0x000d, 0x0006, 0xffff, 0x001e, + // Entry 5F480 - 5F4BF + 0x44b4, 0x45a9, 0x45ad, 0x45b1, 0x44b8, 0x44bc, 0x45b5, 0x4581, + 0x45b9, 0x44c4, 0x443d, 0x000d, 0x0018, 0xffff, 0x2a31, 0x2a5a, + 0x2a5c, 0x2a5e, 0x2a5c, 0x2a31, 0x2a31, 0x2a5e, 0x2a71, 0x2a62, + 0x2a64, 0x2a66, 0x000d, 0x007c, 0xffff, 0x093b, 0x0944, 0x094e, + 0x0954, 0x095c, 0x0961, 0x0966, 0x096d, 0x0974, 0x097e, 0x0986, + 0x098e, 0x0002, 0x00a9, 0x00d3, 0x0005, 0x00af, 0x00b8, 0x00ca, + 0x0000, 0x00c1, 0x0007, 0x0042, 0x02d8, 0x2615, 0x2619, 0x261d, + 0x2609, 0x2621, 0x2611, 0x0007, 0x0018, 0x2a71, 0x2a5c, 0x2a17, + // Entry 5F4C0 - 5F4FF + 0x2a73, 0x2a71, 0x2a79, 0x2a5c, 0x0007, 0x0042, 0x02d8, 0x2615, + 0x2619, 0x261d, 0x2609, 0x2621, 0x2611, 0x0007, 0x007c, 0x0996, + 0x099d, 0x09a9, 0x09b4, 0x09c1, 0x09ca, 0x09d6, 0x0005, 0x00d9, + 0x00e2, 0x00f4, 0x0000, 0x00eb, 0x0007, 0x0042, 0x02d8, 0x2615, + 0x2619, 0x261d, 0x2609, 0x2621, 0x2611, 0x0007, 0x0018, 0x2a71, + 0x2a5c, 0x2a17, 0x2a73, 0x2a71, 0x2a79, 0x2a5c, 0x0007, 0x0042, + 0x02d8, 0x2615, 0x2619, 0x261d, 0x2609, 0x2621, 0x2611, 0x0007, + 0x007c, 0x0996, 0x099d, 0x09a9, 0x09b4, 0x09c1, 0x09ca, 0x09d6, + // Entry 5F500 - 5F53F + 0x0002, 0x0100, 0x0119, 0x0003, 0x0104, 0x010b, 0x0112, 0x0005, + 0x0000, 0xffff, 0x04e3, 0x39f2, 0x39f5, 0x44d4, 0x0005, 0x0000, + 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x007c, 0xffff, + 0x09e0, 0x09ed, 0x09fa, 0x0a07, 0x0003, 0x011d, 0x0124, 0x012b, + 0x0005, 0x0000, 0xffff, 0x04e3, 0x39f2, 0x39f5, 0x44d4, 0x0005, + 0x0000, 0xffff, 0x0033, 0x0035, 0x0037, 0x23b3, 0x0005, 0x007c, + 0xffff, 0x09e0, 0x09ed, 0x09fa, 0x0a07, 0x0002, 0x0135, 0x0196, + 0x0003, 0x0139, 0x0158, 0x0177, 0x0009, 0x0143, 0x0146, 0x0000, + // Entry 5F540 - 5F57F + 0x0149, 0x014f, 0x0152, 0x0155, 0x0000, 0x014c, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0001, 0x007c, 0x0a14, 0x0001, + 0x007c, 0x0a20, 0x0001, 0x007c, 0x0a28, 0x0001, 0x007c, 0x0a2e, + 0x0001, 0x007c, 0x0a37, 0x0009, 0x0162, 0x0165, 0x0000, 0x0168, + 0x016e, 0x0171, 0x0174, 0x0000, 0x016b, 0x0001, 0x0000, 0x1f9c, + 0x0001, 0x0000, 0x21e4, 0x0001, 0x007c, 0x0a14, 0x0001, 0x007c, + 0x0a20, 0x0001, 0x007c, 0x0a28, 0x0001, 0x007c, 0x0a2e, 0x0001, + 0x007c, 0x0a37, 0x0009, 0x0181, 0x0184, 0x0000, 0x0187, 0x018d, + // Entry 5F580 - 5F5BF + 0x0190, 0x0193, 0x0000, 0x018a, 0x0001, 0x0000, 0x04ef, 0x0001, + 0x0000, 0x04f2, 0x0001, 0x007c, 0x0a14, 0x0001, 0x007c, 0x0a20, + 0x0001, 0x007c, 0x0a28, 0x0001, 0x007c, 0x0a2e, 0x0001, 0x007c, + 0x0a37, 0x0003, 0x019a, 0x01b9, 0x01d8, 0x0009, 0x01a4, 0x01a7, + 0x0000, 0x01aa, 0x01b0, 0x01b3, 0x01b6, 0x0000, 0x01ad, 0x0001, + 0x0000, 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0001, 0x007c, 0x0a14, + 0x0001, 0x007c, 0x0a20, 0x0001, 0x007c, 0x0a28, 0x0001, 0x007c, + 0x0a2e, 0x0001, 0x007c, 0x0a37, 0x0009, 0x01c3, 0x01c6, 0x0000, + // Entry 5F5C0 - 5F5FF + 0x01c9, 0x01cf, 0x01d2, 0x01d5, 0x0000, 0x01cc, 0x0001, 0x0000, + 0x04ef, 0x0001, 0x0000, 0x04f2, 0x0001, 0x007c, 0x0a14, 0x0001, + 0x007c, 0x0a20, 0x0001, 0x007c, 0x0a28, 0x0001, 0x007c, 0x0a2e, + 0x0001, 0x007c, 0x0a37, 0x0009, 0x01e2, 0x01e5, 0x0000, 0x01e8, + 0x01ee, 0x01f1, 0x01f4, 0x0000, 0x01eb, 0x0001, 0x0000, 0x04ef, + 0x0001, 0x0000, 0x04f2, 0x0001, 0x007c, 0x0a14, 0x0001, 0x007c, + 0x0a20, 0x0001, 0x007c, 0x0a28, 0x0001, 0x007c, 0x0a2e, 0x0001, + 0x007c, 0x0a37, 0x0003, 0x0206, 0x0000, 0x01fb, 0x0002, 0x01fe, + // Entry 5F600 - 5F63F + 0x0202, 0x0002, 0x0009, 0x0078, 0x58cb, 0x0002, 0x0000, 0x04f5, + 0x3c5a, 0x0002, 0x0209, 0x020d, 0x0002, 0x0009, 0x0078, 0x58cb, + 0x0002, 0x0000, 0x04f5, 0x3c5a, 0x0004, 0x021f, 0x0219, 0x0216, + 0x021c, 0x0001, 0x000c, 0x03c9, 0x0001, 0x000c, 0x03d9, 0x0001, + 0x000c, 0x03e3, 0x0001, 0x000c, 0x03ec, 0x0004, 0x0230, 0x022a, + 0x0227, 0x022d, 0x0001, 0x0000, 0x0524, 0x0001, 0x0000, 0x0532, + 0x0001, 0x0000, 0x053d, 0x0001, 0x0000, 0x0546, 0x0004, 0x0241, + 0x023b, 0x0238, 0x023e, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, + // Entry 5F640 - 5F67F + 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0001, 0x0000, 0x03c6, 0x0042, + 0x0287, 0x028c, 0x0291, 0x0296, 0x02ad, 0x02bf, 0x02d1, 0x02e8, + 0x02fa, 0x030c, 0x0323, 0x0335, 0x0347, 0x0362, 0x0378, 0x038e, + 0x0393, 0x0398, 0x039d, 0x03b6, 0x03c8, 0x03da, 0x03df, 0x03e4, + 0x03e9, 0x03ee, 0x03f3, 0x03f8, 0x03fd, 0x0402, 0x0407, 0x041b, + 0x042f, 0x0443, 0x0457, 0x046b, 0x047f, 0x0493, 0x04a7, 0x04bb, + 0x04cf, 0x04e3, 0x04f7, 0x050b, 0x051f, 0x0533, 0x0547, 0x055b, + 0x056f, 0x0583, 0x0597, 0x05ab, 0x05b0, 0x05b5, 0x05ba, 0x05d0, + // Entry 5F680 - 5F6BF + 0x05e2, 0x05f4, 0x060a, 0x061c, 0x062e, 0x0644, 0x0656, 0x0668, + 0x066d, 0x0672, 0x0001, 0x0289, 0x0001, 0x0050, 0x0170, 0x0001, + 0x028e, 0x0001, 0x0050, 0x0170, 0x0001, 0x0293, 0x0001, 0x0050, + 0x0170, 0x0003, 0x029a, 0x029d, 0x02a2, 0x0001, 0x007c, 0x0a3f, + 0x0003, 0x007c, 0x0a46, 0x0a56, 0x0a61, 0x0002, 0x02a5, 0x02a9, + 0x0002, 0x007c, 0x0a86, 0x0a6e, 0x0002, 0x007c, 0x0ab2, 0x0aa0, + 0x0003, 0x02b1, 0x0000, 0x02b4, 0x0001, 0x007c, 0x0a3f, 0x0002, + 0x02b7, 0x02bb, 0x0002, 0x007c, 0x0a86, 0x0a6e, 0x0002, 0x007c, + // Entry 5F6C0 - 5F6FF + 0x0aa0, 0x0aa0, 0x0003, 0x02c3, 0x0000, 0x02c6, 0x0001, 0x007c, + 0x0a3f, 0x0002, 0x02c9, 0x02cd, 0x0002, 0x007c, 0x0a86, 0x0a6e, + 0x0002, 0x007c, 0x0aa0, 0x0aa0, 0x0003, 0x02d5, 0x02d8, 0x02dd, + 0x0001, 0x007c, 0x0ac6, 0x0003, 0x007c, 0x0acc, 0x0ad9, 0x0ae1, + 0x0002, 0x02e0, 0x02e4, 0x0002, 0x007c, 0x0b04, 0x0aed, 0x0002, + 0x007c, 0x0b2d, 0x0b1c, 0x0003, 0x02ec, 0x0000, 0x02ef, 0x0001, + 0x007c, 0x0ac6, 0x0002, 0x02f2, 0x02f6, 0x0002, 0x007c, 0x0b04, + 0x0aed, 0x0002, 0x007c, 0x0b40, 0x0b2d, 0x0003, 0x02fe, 0x0000, + // Entry 5F700 - 5F73F + 0x0301, 0x0001, 0x007c, 0x0ac6, 0x0002, 0x0304, 0x0308, 0x0002, + 0x007c, 0x0b53, 0x0b53, 0x0002, 0x007c, 0x0b40, 0x0b2d, 0x0003, + 0x0310, 0x0313, 0x0318, 0x0001, 0x007c, 0x0b65, 0x0003, 0x007c, + 0x0b6d, 0x0b7c, 0x0b86, 0x0002, 0x031b, 0x031f, 0x0002, 0x007c, + 0x0ba7, 0x0b94, 0x0002, 0x007c, 0x0bd9, 0x0bc6, 0x0003, 0x0327, + 0x0000, 0x032a, 0x0001, 0x007c, 0x0b65, 0x0002, 0x032d, 0x0331, + 0x0002, 0x007c, 0x0ba7, 0x0ba7, 0x0002, 0x007c, 0x0bd9, 0x0bd9, + 0x0003, 0x0339, 0x0000, 0x033c, 0x0001, 0x007c, 0x0b65, 0x0002, + // Entry 5F740 - 5F77F + 0x033f, 0x0343, 0x0002, 0x007c, 0x0bf0, 0x0bf0, 0x0002, 0x007c, + 0x0bd9, 0x0bd9, 0x0004, 0x034c, 0x034f, 0x0354, 0x035f, 0x0001, + 0x0050, 0x0129, 0x0003, 0x007c, 0x0c09, 0x0c18, 0x0c22, 0x0002, + 0x0357, 0x035b, 0x0002, 0x007c, 0x0c43, 0x0c30, 0x0002, 0x007c, + 0x0c72, 0x0c56, 0x0001, 0x007c, 0x0c8a, 0x0004, 0x0367, 0x0000, + 0x036a, 0x0375, 0x0001, 0x0050, 0x0129, 0x0002, 0x036d, 0x0371, + 0x0002, 0x007c, 0x0cb4, 0x0c99, 0x0002, 0x007c, 0x0c72, 0x0c72, + 0x0001, 0x007c, 0x0c8a, 0x0004, 0x037d, 0x0000, 0x0380, 0x038b, + // Entry 5F780 - 5F7BF + 0x0001, 0x0050, 0x0129, 0x0002, 0x0383, 0x0387, 0x0002, 0x007c, + 0x0cb4, 0x0cb4, 0x0002, 0x007c, 0x0c72, 0x0c72, 0x0001, 0x007c, + 0x0c8a, 0x0001, 0x0390, 0x0001, 0x007c, 0x0ccd, 0x0001, 0x0395, + 0x0001, 0x007c, 0x0ccd, 0x0001, 0x039a, 0x0001, 0x007c, 0x0ccd, + 0x0003, 0x03a1, 0x03a4, 0x03ab, 0x0001, 0x007c, 0x0cdc, 0x0005, + 0x007c, 0x0cff, 0x0d05, 0x0d0f, 0x0ce2, 0x0d16, 0x0002, 0x03ae, + 0x03b2, 0x0002, 0x007c, 0x0d4e, 0x0d32, 0x0002, 0x007c, 0x0d8b, + 0x0d6d, 0x0003, 0x03ba, 0x0000, 0x03bd, 0x0001, 0x007c, 0x0cdc, + // Entry 5F7C0 - 5F7FF + 0x0002, 0x03c0, 0x03c4, 0x0002, 0x007c, 0x0d4e, 0x0d32, 0x0002, + 0x007c, 0x0dc0, 0x0dac, 0x0003, 0x03cc, 0x0000, 0x03cf, 0x0001, + 0x007c, 0x0cdc, 0x0002, 0x03d2, 0x03d6, 0x0002, 0x007c, 0x0d4e, + 0x0d32, 0x0002, 0x007c, 0x0dc0, 0x0dac, 0x0001, 0x03dc, 0x0001, + 0x0000, 0x1b56, 0x0001, 0x03e1, 0x0001, 0x007c, 0x0dd6, 0x0001, + 0x03e6, 0x0001, 0x007c, 0x0dd6, 0x0001, 0x03eb, 0x0001, 0x007c, + 0x0de4, 0x0001, 0x03f0, 0x0001, 0x007c, 0x0de4, 0x0001, 0x03f5, + 0x0001, 0x007c, 0x0de4, 0x0001, 0x03fa, 0x0001, 0x007c, 0x0df2, + // Entry 5F800 - 5F83F + 0x0001, 0x03ff, 0x0001, 0x007c, 0x0df2, 0x0001, 0x0404, 0x0001, + 0x007c, 0x0df2, 0x0003, 0x0000, 0x040b, 0x0410, 0x0003, 0x007c, + 0x0e02, 0x0e12, 0x0e1f, 0x0002, 0x0413, 0x0417, 0x0002, 0x007c, + 0x0e42, 0x0e2e, 0x0002, 0x007c, 0x0e69, 0x0e55, 0x0003, 0x0000, + 0x041f, 0x0424, 0x0003, 0x007c, 0x0e02, 0x0e12, 0x0e1f, 0x0002, + 0x0427, 0x042b, 0x0002, 0x007c, 0x0e42, 0x0e42, 0x0002, 0x007c, + 0x0e69, 0x0e69, 0x0003, 0x0000, 0x0433, 0x0438, 0x0003, 0x007c, + 0x0e02, 0x0e12, 0x0e1f, 0x0002, 0x043b, 0x043f, 0x0002, 0x007c, + // Entry 5F840 - 5F87F + 0x0e42, 0x0e42, 0x0002, 0x007c, 0x0e69, 0x0e69, 0x0003, 0x0000, + 0x0447, 0x044c, 0x0003, 0x007c, 0x0e7d, 0x0e90, 0x0ea0, 0x0002, + 0x044f, 0x0453, 0x0002, 0x007c, 0x0ec6, 0x0eb2, 0x0002, 0x007c, + 0x0ef6, 0x0edb, 0x0003, 0x0000, 0x045b, 0x0460, 0x0003, 0x007c, + 0x0e7d, 0x0e90, 0x0ea0, 0x0002, 0x0463, 0x0467, 0x0002, 0x007c, + 0x0ec6, 0x0ec6, 0x0002, 0x007c, 0x0ef6, 0x0ef6, 0x0003, 0x0000, + 0x046f, 0x0474, 0x0003, 0x007c, 0x0e7d, 0x0e90, 0x0ea0, 0x0002, + 0x0477, 0x047b, 0x0002, 0x007c, 0x0ec6, 0x0ec6, 0x0002, 0x007c, + // Entry 5F880 - 5F8BF + 0x0ef6, 0x0ef6, 0x0003, 0x0000, 0x0483, 0x0488, 0x0003, 0x007c, + 0x0f11, 0x0f25, 0x0f34, 0x0002, 0x048b, 0x048f, 0x0002, 0x007c, + 0x0f5c, 0x0f47, 0x0002, 0x007c, 0x0f93, 0x0f74, 0x0003, 0x0000, + 0x0497, 0x049c, 0x0003, 0x007c, 0x0f11, 0x0f25, 0x0f34, 0x0002, + 0x049f, 0x04a3, 0x0002, 0x007c, 0x0fb4, 0x0fb4, 0x0002, 0x007c, + 0x0fc5, 0x0fc5, 0x0003, 0x0000, 0x04ab, 0x04b0, 0x0003, 0x007c, + 0x0f11, 0x0f25, 0x0f34, 0x0002, 0x04b3, 0x04b7, 0x0002, 0x007c, + 0x0fb4, 0x0fb4, 0x0002, 0x007c, 0x0fc5, 0x0fc5, 0x0003, 0x0000, + // Entry 5F8C0 - 5F8FF + 0x04bf, 0x04c4, 0x0003, 0x007c, 0x0fe0, 0x0ff6, 0x1007, 0x0002, + 0x04c7, 0x04cb, 0x0002, 0x007c, 0x1031, 0x101c, 0x0002, 0x007c, + 0x106f, 0x104b, 0x0003, 0x0000, 0x04d3, 0x04d8, 0x0003, 0x007c, + 0x0fe0, 0x0ff6, 0x1007, 0x0002, 0x04db, 0x04df, 0x0002, 0x007c, + 0x1031, 0x1031, 0x0002, 0x007c, 0x106f, 0x106f, 0x0003, 0x0000, + 0x04e7, 0x04ec, 0x0003, 0x007c, 0x0fe0, 0x0ff6, 0x1007, 0x0002, + 0x04ef, 0x04f3, 0x0002, 0x007c, 0x1031, 0x1031, 0x0002, 0x007c, + 0x106f, 0x106f, 0x0003, 0x0000, 0x04fb, 0x0500, 0x0003, 0x007c, + // Entry 5F900 - 5F93F + 0x1092, 0x10a4, 0x10b1, 0x0002, 0x0503, 0x0507, 0x0002, 0x007c, + 0x10d5, 0x10c2, 0x0002, 0x007c, 0x1108, 0x10eb, 0x0003, 0x0000, + 0x050f, 0x0514, 0x0003, 0x007c, 0x1127, 0x10a4, 0x10b1, 0x0002, + 0x0517, 0x051b, 0x0002, 0x007c, 0x10d5, 0x10d5, 0x0002, 0x007c, + 0x1108, 0x1108, 0x0003, 0x0000, 0x0523, 0x0528, 0x0003, 0x007c, + 0x1127, 0x10a4, 0x10b1, 0x0002, 0x052b, 0x052f, 0x0002, 0x007c, + 0x10d5, 0x10d5, 0x0002, 0x007c, 0x1108, 0x1108, 0x0003, 0x0000, + 0x0537, 0x053c, 0x0003, 0x007c, 0x113a, 0x114f, 0x115f, 0x0002, + // Entry 5F940 - 5F97F + 0x053f, 0x0543, 0x0002, 0x007c, 0x1186, 0x1173, 0x0002, 0x007c, + 0x11b1, 0x1199, 0x0003, 0x0000, 0x054b, 0x0550, 0x0003, 0x007c, + 0x113a, 0x114f, 0x115f, 0x0002, 0x0553, 0x0557, 0x0002, 0x007c, + 0x1186, 0x1186, 0x0002, 0x007c, 0x11b1, 0x11b1, 0x0003, 0x0000, + 0x055f, 0x0564, 0x0003, 0x007c, 0x113a, 0x114f, 0x115f, 0x0002, + 0x0567, 0x056b, 0x0002, 0x007c, 0x1186, 0x1186, 0x0002, 0x007c, + 0x11b1, 0x11b1, 0x0003, 0x0000, 0x0573, 0x0578, 0x0003, 0x007c, + 0x11c9, 0x11da, 0x11e8, 0x0002, 0x057b, 0x057f, 0x0002, 0x007c, + // Entry 5F980 - 5F9BF + 0x120a, 0x11f8, 0x0002, 0x007c, 0x1238, 0x121f, 0x0003, 0x0000, + 0x0587, 0x058c, 0x0003, 0x007c, 0x11c9, 0x11da, 0x11e8, 0x0002, + 0x058f, 0x0593, 0x0002, 0x007c, 0x120a, 0x120a, 0x0002, 0x007c, + 0x1238, 0x1238, 0x0003, 0x0000, 0x059b, 0x05a0, 0x0003, 0x007c, + 0x11c9, 0x11da, 0x11e8, 0x0002, 0x05a3, 0x05a7, 0x0002, 0x007c, + 0x120a, 0x120a, 0x0002, 0x007c, 0x1238, 0x1238, 0x0001, 0x05ad, + 0x0001, 0x0007, 0x0892, 0x0001, 0x05b2, 0x0001, 0x0007, 0x0892, + 0x0001, 0x05b7, 0x0001, 0x0007, 0x0892, 0x0003, 0x05be, 0x05c1, + // Entry 5F9C0 - 5F9FF + 0x05c5, 0x0001, 0x007c, 0x1254, 0x0002, 0x007c, 0xffff, 0x125a, + 0x0002, 0x05c8, 0x05cc, 0x0002, 0x007c, 0x127f, 0x1264, 0x0002, + 0x007c, 0x12ab, 0x1298, 0x0003, 0x05d4, 0x0000, 0x05d7, 0x0001, + 0x007c, 0x1254, 0x0002, 0x05da, 0x05de, 0x0002, 0x007c, 0x127f, + 0x1264, 0x0002, 0x007c, 0x12ab, 0x1298, 0x0003, 0x05e6, 0x0000, + 0x05e9, 0x0001, 0x007c, 0x1254, 0x0002, 0x05ec, 0x05f0, 0x0002, + 0x007c, 0x127f, 0x1264, 0x0002, 0x007c, 0x12c5, 0x1298, 0x0003, + 0x05f8, 0x05fb, 0x05ff, 0x0001, 0x007c, 0x12d8, 0x0002, 0x007c, + // Entry 5FA00 - 5FA3F + 0xffff, 0x12e1, 0x0002, 0x0602, 0x0606, 0x0002, 0x007c, 0x130b, + 0x12ee, 0x0002, 0x007c, 0x133c, 0x1326, 0x0003, 0x060e, 0x0000, + 0x0611, 0x0001, 0x007c, 0x12d8, 0x0002, 0x0614, 0x0618, 0x0002, + 0x007c, 0x130b, 0x12ee, 0x0002, 0x007c, 0x133c, 0x1326, 0x0003, + 0x0620, 0x0000, 0x0623, 0x0001, 0x007c, 0x12d8, 0x0002, 0x0626, + 0x062a, 0x0002, 0x007c, 0x130b, 0x12ee, 0x0002, 0x007c, 0x133c, + 0x1326, 0x0003, 0x0632, 0x0635, 0x0639, 0x0001, 0x007c, 0x1352, + 0x0002, 0x007c, 0xffff, 0x135c, 0x0002, 0x063c, 0x0640, 0x0002, + // Entry 5FA40 - 5FA7F + 0x007c, 0x1380, 0x1362, 0x0002, 0x007c, 0x13b3, 0x139c, 0x0003, + 0x0648, 0x0000, 0x064b, 0x0001, 0x007c, 0x1352, 0x0002, 0x064e, + 0x0652, 0x0002, 0x007c, 0x1380, 0x1362, 0x0002, 0x007c, 0x13b3, + 0x139c, 0x0003, 0x065a, 0x0000, 0x065d, 0x0001, 0x007c, 0x1352, + 0x0002, 0x0660, 0x0664, 0x0002, 0x007c, 0x1380, 0x1362, 0x0002, + 0x007c, 0x13b3, 0x139c, 0x0001, 0x066a, 0x0001, 0x007c, 0x13ca, + 0x0001, 0x066f, 0x0001, 0x007c, 0x13ca, 0x0001, 0x0674, 0x0001, + 0x007c, 0x13ca, 0x0004, 0x067c, 0x0681, 0x0686, 0x0695, 0x0003, + // Entry 5FA80 - 5FABF + 0x0000, 0x1dc7, 0x4333, 0x4550, 0x0003, 0x007c, 0x13dc, 0x13ef, + 0x1406, 0x0002, 0x0000, 0x0689, 0x0003, 0x0000, 0x0690, 0x068d, + 0x0001, 0x007c, 0x141e, 0x0003, 0x007c, 0xffff, 0x143e, 0x145f, + 0x0002, 0x0000, 0x0698, 0x0003, 0x0732, 0x07c8, 0x069c, 0x0094, + 0x007c, 0x147e, 0x1499, 0x14b7, 0x14d7, 0x1527, 0x159a, 0x15f4, + 0x165f, 0x16e6, 0x176b, 0x17f7, 0x186d, 0x18b5, 0x1907, 0x195f, + 0x19ce, 0x1a45, 0x1a9e, 0x1b07, 0x1b85, 0x1c07, 0x1c79, 0x1cea, + 0x1d46, 0x1da5, 0x1ded, 0x1e03, 0x1e32, 0x1e7b, 0x1eb6, 0x1efd, + // Entry 5FAC0 - 5FAFF + 0x1f3b, 0x1f91, 0x1fe9, 0x203e, 0x2081, 0x20a1, 0x20d6, 0x213b, + 0x21a8, 0x21e8, 0x21fd, 0x221f, 0x2256, 0x22a9, 0x22de, 0x2351, + 0x23a6, 0x23ea, 0x245f, 0x24cc, 0x2506, 0x2523, 0x2551, 0x256a, + 0x2598, 0x25d8, 0x25f7, 0x2633, 0x26a5, 0x26fa, 0x2718, 0x274c, + 0x27b9, 0x2811, 0x2848, 0x2867, 0x2883, 0x289c, 0x28bd, 0x28de, + 0x2913, 0x2965, 0x29ba, 0x2a0f, 0x2a6e, 0x2ac6, 0x2aee, 0x2b2c, + 0x2b6a, 0x2b9b, 0x2be2, 0x2bfb, 0x2c30, 0x2c75, 0x2cac, 0x2ceb, + 0x2d03, 0x2d1b, 0x2d34, 0x2d6d, 0x2db1, 0x2de7, 0x2e5e, 0x2ece, + // Entry 5FB00 - 5FB3F + 0x2f27, 0x2f69, 0x2f80, 0x2f95, 0x2fc7, 0x3035, 0x309a, 0x30ea, + 0x30fe, 0x3140, 0x31ba, 0x3218, 0x326c, 0x32b0, 0x32c5, 0x32fd, + 0x335a, 0x33b5, 0x33fb, 0x3444, 0x34af, 0x34c7, 0x34dd, 0x34f6, + 0x350d, 0x353c, 0x358f, 0x35d8, 0x361a, 0x3634, 0x3657, 0x3676, + 0x3693, 0x36ab, 0x36c0, 0x36ec, 0x3729, 0x3743, 0x376f, 0x37b2, + 0x37e3, 0x382d, 0x385a, 0x38bb, 0x3918, 0x395f, 0x3993, 0x39f3, + 0x3a39, 0x3a4f, 0x3a6a, 0x3aa3, 0x3aff, 0x0094, 0x007c, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1505, 0x1584, 0x15de, 0x1639, 0x16c3, + // Entry 5FB40 - 5FB7F + 0x1744, 0x17d1, 0x185b, 0x18a1, 0x18f0, 0x1946, 0x19aa, 0x1a2f, + 0x1a86, 0x1ae6, 0x1b5e, 0x1be6, 0x1c58, 0x1cd0, 0x1d30, 0x1d8b, + 0xffff, 0xffff, 0x1e1a, 0xffff, 0x1e9c, 0xffff, 0x1f24, 0x1f7c, + 0x1fd4, 0x2024, 0xffff, 0xffff, 0x20be, 0x211f, 0x2194, 0xffff, + 0xffff, 0xffff, 0x2239, 0xffff, 0x22c0, 0x2333, 0xffff, 0x23cc, + 0x243f, 0x24b8, 0xffff, 0xffff, 0xffff, 0xffff, 0x2581, 0xffff, + 0xffff, 0x2615, 0x2687, 0xffff, 0xffff, 0x272e, 0x27a0, 0x27fd, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x28ff, 0x294e, + // Entry 5FB80 - 5FBBF + 0x29a4, 0x29fa, 0x2a4a, 0xffff, 0xffff, 0x2b17, 0xffff, 0x2b80, + 0xffff, 0xffff, 0x2c17, 0xffff, 0x2c95, 0xffff, 0xffff, 0xffff, + 0xffff, 0x2d54, 0xffff, 0x2dc7, 0x2e3f, 0x2eb4, 0x2f11, 0xffff, + 0xffff, 0xffff, 0x2faa, 0x301a, 0x307e, 0xffff, 0xffff, 0x311d, + 0x319f, 0x3204, 0x3254, 0xffff, 0xffff, 0x32e5, 0x3346, 0x339b, + 0xffff, 0x341a, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3524, + 0x357d, 0x35c3, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x36d6, 0xffff, 0xffff, 0x375a, 0xffff, 0x37c7, 0xffff, + // Entry 5FBC0 - 5FBFF + 0x3843, 0x38a1, 0x3901, 0xffff, 0x3978, 0x39da, 0xffff, 0xffff, + 0xffff, 0x3a8c, 0x3ae2, 0x0094, 0x007c, 0xffff, 0xffff, 0xffff, + 0xffff, 0x1558, 0x15bf, 0x1619, 0x1694, 0x1718, 0x17a1, 0x182c, + 0x1888, 0x18d3, 0x1928, 0x1987, 0x1a01, 0x1a67, 0x1ac5, 0x1b33, + 0x1bb6, 0x1c30, 0x1ca5, 0x1d0e, 0x1d6b, 0x1dc9, 0xffff, 0xffff, + 0x1e59, 0xffff, 0x1edb, 0xffff, 0x1f5c, 0x1fb5, 0x2008, 0x2062, + 0xffff, 0xffff, 0x20fd, 0x2161, 0x21cb, 0xffff, 0xffff, 0xffff, + 0x2282, 0xffff, 0x230b, 0x237e, 0xffff, 0x2417, 0x248e, 0x24ea, + // Entry 5FC00 - 5FC3F + 0xffff, 0xffff, 0xffff, 0xffff, 0x25b9, 0xffff, 0xffff, 0x2660, + 0x26d2, 0xffff, 0xffff, 0x2779, 0x27dc, 0x282f, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x2931, 0x2986, 0x29da, 0x2a2e, + 0x2a9b, 0xffff, 0xffff, 0x2b4e, 0xffff, 0x2bc0, 0xffff, 0xffff, + 0x2c53, 0xffff, 0x2ccd, 0xffff, 0xffff, 0xffff, 0xffff, 0x2d90, + 0xffff, 0x2e16, 0x2e8c, 0x2ef2, 0x2f4c, 0xffff, 0xffff, 0xffff, + 0x2ff3, 0x305a, 0x30c5, 0xffff, 0xffff, 0x3172, 0x31df, 0x3236, + 0x328e, 0xffff, 0xffff, 0x3324, 0x337d, 0x33d9, 0xffff, 0x347c, + // Entry 5FC40 - 5FC7F + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x355e, 0x35aa, 0x35fc, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x370c, + 0xffff, 0xffff, 0x3793, 0xffff, 0x3809, 0xffff, 0x3880, 0x38df, + 0x393e, 0xffff, 0x39b8, 0x3a16, 0xffff, 0xffff, 0xffff, 0x3ac4, + 0x3b26, +} // Size: 784602 bytes + +var buckets = []string{ + bucket0, + bucket1, + bucket2, + bucket3, + bucket4, + bucket5, + bucket6, + bucket7, + bucket8, + bucket9, + bucket10, + bucket11, + bucket12, + bucket13, + bucket14, + bucket15, + bucket16, + bucket17, + bucket18, + bucket19, + bucket20, + bucket21, + bucket22, + bucket23, + bucket24, + bucket25, + bucket26, + bucket27, + bucket28, + bucket29, + bucket30, + bucket31, + bucket32, + bucket33, + bucket34, + bucket35, + bucket36, + bucket37, + bucket38, + bucket39, + bucket40, + bucket41, + bucket42, + bucket43, + bucket44, + bucket45, + bucket46, + bucket47, + bucket48, + bucket49, + bucket50, + bucket51, + bucket52, + bucket53, + bucket54, + bucket55, + bucket56, + bucket57, + bucket58, + bucket59, + bucket60, + bucket61, + bucket62, + bucket63, + bucket64, + bucket65, + bucket66, + bucket67, + bucket68, + bucket69, + bucket70, + bucket71, + bucket72, + bucket73, + bucket74, + bucket75, + bucket76, + bucket77, + bucket78, + bucket79, + bucket80, + bucket81, + bucket82, + bucket83, + bucket84, + bucket85, + bucket86, + bucket87, + bucket88, + bucket89, + bucket90, + bucket91, + bucket92, + bucket93, + bucket94, + bucket95, + bucket96, + bucket97, + bucket98, + bucket99, + bucket100, + bucket101, + bucket102, + bucket103, + bucket104, + bucket105, + bucket106, + bucket107, + bucket108, + bucket109, + bucket110, + bucket111, + bucket112, + bucket113, + bucket114, + bucket115, + bucket116, + bucket117, + bucket118, + bucket119, + bucket120, + bucket121, + bucket122, + bucket123, + bucket124, +} + +var bucket0 string = "" + // Size: 17748 bytes + "\x02BE\x03M01\x03M02\x03M03\x03M04\x03M05\x03M06\x03M07\x03M08\x03M09" + + "\x03M10\x03M11\x03M12\x011\x012\x013\x014\x015\x016\x017\x018\x019\x0210" + + "\x0211\x0212\x06{0}bis\x04{0}b\x02zi\x04chou\x03yin\x03mao\x04chen\x02si" + + "\x02wu\x03wei\x04shen\x03you\x02xu\x03hai\x0dspring begins\x0arain water" + + "\x0einsects awaken\x0espring equinox\x10bright and clear\x0agrain rain" + + "\x0dsummer begins\x0agrain full\x0cgrain in ear\x0fsummer solstice\x0ami" + + "nor heat\x0amajor heat\x0dautumn begins\x0bend of heat\x09white dew\x0ea" + + "utumn equinox\x08cold dew\x0efrost descends\x0dwinter begins\x0aminor sn" + + "ow\x0amajor snow\x0fwinter solstice\x0aminor cold\x0amajor cold\x06jia-z" + + "i\x07yi-chou\x08bing-yin\x08ding-mao\x07wu-chen\x05ji-si\x07geng-wu\x07x" + + "in-wei\x08ren-shen\x07gui-you\x06jia-xu\x06yi-hai\x07bing-zi\x09ding-cho" + + "u\x06wu-yin\x06ji-mao\x09geng-chen\x06xin-si\x06ren-wu\x07gui-wei\x08jia" + + "-shen\x06yi-you\x07bing-xu\x08ding-hai\x05wu-zi\x07ji-chou\x08geng-yin" + + "\x07xin-mao\x08ren-chen\x06gui-si\x06jia-wu\x06yi-wei\x09bing-shen\x08di" + + "ng-you\x05wu-xu\x06ji-hai\x07geng-zi\x08xin-chou\x07ren-yin\x07gui-mao" + + "\x08jia-chen\x05yi-si\x07bing-wu\x08ding-wei\x07wu-shen\x06ji-you\x07gen" + + "g-xu\x07xin-hai\x06ren-zi\x08gui-chou\x07jia-yin\x06yi-mao\x09bing-chen" + + "\x07ding-si\x05wu-wu\x06ji-wei\x09geng-shen\x07xin-you\x06ren-xu\x07gui-" + + "hai\x11r(U) MMMM d, EEEE\x0br(U) MMMM d\x07r MMM d\x07r-MM-dd\x07{1} {0}" + + "\x04Tout\x04Baba\x05Hator\x05Kiahk\x04Toba\x06Amshir\x08Baramhat\x09Bara" + + "mouda\x07Bashans\x05Paona\x04Epep\x05Mesra\x05Nasie\x0213\x04ERA0\x04ERA" + + "1\x08Meskerem\x06Tekemt\x05Hedar\x06Tahsas\x03Ter\x07Yekatit\x07Megabit" + + "\x06Miazia\x06Genbot\x04Sene\x05Hamle\x07Nehasse\x07Pagumen\x10G y MMMM " + + "d, EEEE\x0aG y MMMM d\x09G y MMM d\x0dGGGGG y-MM-dd\x03Sun\x03Mon\x03Tue" + + "\x03Wed\x03Thu\x03Fri\x03Sat\x01S\x01M\x01T\x01W\x01F\x02Q1\x02Q2\x02Q3" + + "\x02Q4\x02AM\x02PM\x03BCE\x02CE\x0ey MMMM d, EEEE\x08y MMMM d\x07y MMM d" + + "\x07y-MM-dd\x0dHH:mm:ss zzzz\x0aHH:mm:ss z\x08HH:mm:ss\x05HH:mm\x06Tishr" + + "i\x07Heshvan\x06Kislev\x05Tevet\x06Shevat\x06Adar I\x04Adar\x07Adar II" + + "\x05Nisan\x04Iyar\x05Sivan\x05Tamuz\x02Av\x04Elul\x07Chaitra\x08Vaisakha" + + "\x08Jyaistha\x06Asadha\x07Sravana\x06Bhadra\x06Asvina\x07Kartika\x0aAgra" + + "hayana\x05Pausa\x05Magha\x08Phalguna\x04Saka\x04Muh.\x04Saf.\x06Rab. I" + + "\x07Rab. II\x06Jum. I\x07Jum. II\x04Raj.\x04Sha.\x04Ram.\x05Shaw.\x09Dhu" + + "ʻl-Q.\x09Dhuʻl-H.\x08Muharram\x05Safar\x08Rabiʻ I\x09Rabiʻ II\x08Jumada" + + " I\x09Jumada II\x05Rajab\x08Shaʻban\x07Ramadan\x07Shawwal\x0eDhuʻl-Qiʻda" + + "h\x0dDhuʻl-Hijjah\x02AH\x11Taika (645–650)\x13Hakuchi (650–671)\x13Hakuh" + + "ō (672–686)\x13Shuchō (686–701)\x12Taihō (701–704)\x11Keiun (704–708)" + + "\x11Wadō (708–715)\x11Reiki (715–717)\x12Yōrō (717–724)\x11Jinki (724–72" + + "9)\x13Tenpyō (729–749)\x1aTenpyō-kampō (749–749)\x1bTenpyō-shōhō (749–75" + + "7)\x19Tenpyō-hōji (757–765)\x19Tenpyō-jingo (765–767)\x17Jingo-keiun (76" + + "7–770)\x11Hōki (770–780)\x12Ten-ō (781–782)\x13Enryaku (782–806)\x12Daid" + + "ō (806–810)\x12Kōnin (810–824)\x13Tenchō (824–834)\x11Jōwa (834–848)" + + "\x11Kajō (848–851)\x11Ninju (851–854)\x12Saikō (854–857)\x12Ten-an (857–" + + "859)\x12Jōgan (859–877)\x13Gangyō (877–885)\x11Ninna (885–889)\x13Kanpyō" + + " (889–898)\x13Shōtai (898–901)\x10Engi (901–923)\x12Enchō (923–931)\x12J" + + "ōhei (931–938)\x13Tengyō (938–947)\x14Tenryaku (947–957)\x13Tentoku (95" + + "7–961)\x10Ōwa (961–964)\x12Kōhō (964–968)\x10Anna (968–970)\x13Tenroku (" + + "970–973)\x14Ten’en (973–976)\x12Jōgen (976–978)\x12Tengen (978–983)\x11E" + + "ikan (983–985)\x11Kanna (985–987)\x10Eien (987–989)\x10Eiso (989–990)" + + "\x15Shōryaku (990–995)\x14Chōtoku (995–999)\x14Chōhō (999–1004)\x14Kankō" + + " (1004–1012)\x14Chōwa (1012–1017)\x14Kannin (1017–1021)\x12Jian (1021–10" + + "24)\x13Manju (1024–1028)\x15Chōgen (1028–1037)\x17Chōryaku (1037–1040)" + + "\x16Chōkyū (1040–1044)\x15Kantoku (1044–1046)\x14Eishō (1046–1053)\x13Te" + + "ngi (1053–1058)\x14Kōhei (1058–1065)\x15Jiryaku (1065–1069)\x14Enkyū (10" + + "69–1074)\x14Shōho (1074–1077)\x17Shōryaku (1077–1081)\x13Eihō (1081–1084" + + ")\x14Ōtoku (1084–1087)\x13Kanji (1087–1094)\x13Kahō (1094–1096)\x14Eichō" + + " (1096–1097)\x15Jōtoku (1097–1099)\x13Kōwa (1099–1104)\x14Chōji (1104–11" + + "06)\x14Kashō (1106–1108)\x14Tennin (1108–1110)\x14Ten-ei (1110–1113)\x14" + + "Eikyū (1113–1118)\x16Gen’ei (1118–1120)\x13Hōan (1120–1124)\x13Tenji (11" + + "24–1126)\x13Daiji (1126–1131)\x15Tenshō (1131–1132)\x16Chōshō (1132–1135" + + ")\x13Hōen (1135–1141)\x12Eiji (1141–1142)\x13Kōji (1142–1144)\x17Ten’yō " + + "(1144–1145)\x14Kyūan (1145–1151)\x14Ninpei (1151–1154)\x14Kyūju (1154–11" + + "56)\x14Hōgen (1156–1159)\x13Heiji (1159–1160)\x15Eiryaku (1160–1161)\x12" + + "Ōho (1161–1163)\x15Chōkan (1163–1165)\x13Eiman (1165–1166)\x16Nin’an (1" + + "166–1169)\x12Kaō (1169–1171)\x14Shōan (1171–1175)\x13Angen (1175–1177)" + + "\x14Jishō (1177–1181)\x13Yōwa (1181–1182)\x12Juei (1182–1184)\x16Genryak" + + "u (1184–1185)\x13Bunji (1185–1190)\x15Kenkyū (1190–1199)\x14Shōji (1199–" + + "1201)\x14Kennin (1201–1204)\x15Genkyū (1204–1206)\x16Ken’ei (1206–1207)" + + "\x14Jōgen (1207–1211)\x16Kenryaku (1211–1213)\x14Kenpō (1213–1219)\x15Jō" + + "kyū (1219–1222)\x13Jōō (1222–1224)\x14Gennin (1224–1225)\x14Karoku (1225" + + "–1227)\x13Antei (1227–1229)\x13Kanki (1229–1232)\x13Jōei (1232–1233)" + + "\x15Tenpuku (1233–1234)\x16Bunryaku (1234–1235)\x13Katei (1235–1238)\x16" + + "Ryakunin (1238–1239)\x15En’ō (1239–1240)\x13Ninji (1240–1243)\x14Kangen " + + "(1243–1247)\x13Hōji (1247–1249)\x15Kenchō (1249–1256)\x14Kōgen (1256–125" + + "7)\x14Shōka (1257–1259)\x15Shōgen (1259–1260)\x16Bun’ō (1260–1261)\x15Kō" + + "chō (1261–1264)\x16Bun’ei (1264–1275)\x13Kenji (1275–1278)\x13Kōan (1278" + + "–1288)\x14Shōō (1288–1293)\x13Einin (1293–1299)\x14Shōan (1299–1302)" + + "\x14Kengen (1302–1303)\x13Kagen (1303–1306)\x14Tokuji (1306–1308)\x14Enk" + + "yō (1308–1311)\x14Ōchō (1311–1312)\x14Shōwa (1312–1317)\x14Bunpō (1317–1" + + "319)\x13Genō (1319–1321)\x14Genkō (1321–1324)\x16Shōchū (1324–1326)\x15K" + + "aryaku (1326–1329)\x15Gentoku (1329–1331)\x14Genkō (1331–1334)\x13Kenmu " + + "(1334–1336)\x13Engen (1336–1340)\x15Kōkoku (1340–1346)\x15Shōhei (1346–1" + + "370)\x15Kentoku (1370–1372)\x15Bunchū (1372–1375)\x13Tenju (1375–1379)" + + "\x16Kōryaku (1379–1381)\x13Kōwa (1381–1384)\x15Genchū (1384–1392)\x15Mei" + + "toku (1384–1387)\x13Kakei (1387–1389)\x13Kōō (1389–1390)\x15Meitoku (139" + + "0–1394)\x12Ōei (1394–1428)\x16Shōchō (1428–1429)\x14Eikyō (1429–1441)" + + "\x15Kakitsu (1441–1444)\x16Bun’an (1444–1449)\x15Hōtoku (1449–1452)\x16K" + + "yōtoku (1452–1455)\x15Kōshō (1455–1457)\x16Chōroku (1457–1460)\x15Kanshō" + + " (1460–1466)\x15Bunshō (1466–1467)\x13Ōnin (1467–1469)\x14Bunmei (1469–1" + + "487)\x16Chōkyō (1487–1489)\x14Entoku (1489–1492)\x13Meiō (1492–1501)\x13" + + "Bunki (1501–1504)\x14Eishō (1504–1521)\x13Taiei (1521–1528)\x16Kyōroku (" + + "1528–1532)\x14Tenbun (1532–1555)\x13Kōji (1555–1558)\x14Eiroku (1558–157" + + "0)\x13Genki (1570–1573)\x15Tenshō (1573–1592)\x15Bunroku (1592–1596)\x15" + + "Keichō (1596–1615)\x13Genna (1615–1624)\x16Kan’ei (1624–1644)\x14Shōho (" + + "1644–1648)\x13Keian (1648–1652)\x13Jōō (1652–1655)\x15Meireki (1655–1658" + + ")\x13Manji (1658–1661)\x14Kanbun (1661–1673)\x13Enpō (1673–1681)\x13Tenn" + + "a (1681–1684)\x15Jōkyō (1684–1688)\x15Genroku (1688–1704)\x13Hōei (1704–" + + "1711)\x16Shōtoku (1711–1716)\x15Kyōhō (1716–1736)\x14Genbun (1736–1741)" + + "\x14Kanpō (1741–1744)\x14Enkyō (1744–1748)\x16Kan’en (1748–1751)\x15Hōre" + + "ki (1751–1764)\x13Meiwa (1764–1772)\x15An’ei (1772–1781)\x14Tenmei (1781" + + "–1789)\x14Kansei (1789–1801)\x14Kyōwa (1801–1804)\x13Bunka (1804–1818)" + + "\x14Bunsei (1818–1830)\x14Tenpō (1830–1844)\x13Kōka (1844–1848)\x12Kaei " + + "(1848–1854)\x13Ansei (1854–1860)\x16Man’en (1860–1861)\x15Bunkyū (1861–1" + + "864)\x13Genji (1864–1865)\x13Keiō (1865–1868)\x05Meiji\x07Taishō\x06Shōw" + + "a\x06Heisei\x01H\x09Farvardin\x0bOrdibehesht\x07Khordad\x03Tir\x06Mordad" + + "\x09Shahrivar\x04Mehr\x04Aban\x04Azar\x03Dey\x06Bahman\x06Esfand\x02AP" + + "\x0dBefore R.O.C.\x06R.O.C.\x03Era\x04Year\x09last year\x09this year\x09" + + "next year\x06+{0} y\x06-{0} y\x07Quarter\x0clast quarter\x0cthis quarter" + + "\x0cnext quarter\x06+{0} Q\x06-{0} Q\x05Month\x0alast month\x0athis mont" + + "h\x0anext month\x06+{0} m\x06-{0} m\x04Week\x09last week\x09this week" + + "\x09next week\x06+{0} w\x06-{0} w\x0fthe week of {0}\x0dWeek Of Month" + + "\x03Day\x09yesterday\x05today\x08tomorrow\x06+{0} d\x06-{0} d\x0bDay Of " + + "Year\x0fDay of the Week\x10Weekday Of Month\x0blast Sunday\x0bthis Sunda" + + "y\x0bnext Sunday\x0c+{0} Sundays\x0c-{0} Sundays\x0blast Monday\x0bthis " + + "Monday\x0bnext Monday\x0c+{0} Mondays\x0c-{0} Mondays\x0clast Tuesday" + + "\x0cthis Tuesday\x0cnext Tuesday\x0d+{0} Tuesdays\x0d-{0} Tuesdays\x0ela" + + "st Wednesday\x0ethis Wednesday\x0enext Wednesday\x0f+{0} Wednesdays\x0f-" + + "{0} Wednesdays\x0dlast Thursday\x0dthis Thursday\x0dnext Thursday\x0e+{0" + + "} Thursdays\x0e-{0} Thursdays\x0blast Friday\x0bthis Friday\x0bnext Frid" + + "ay\x0c+{0} Fridays\x0c-{0} Fridays\x0dlast Saturday\x0dthis Saturday\x0d" + + "next Saturday\x0e+{0} Saturdays\x0e-{0} Saturdays\x09Dayperiod\x04Hour" + + "\x09this hour\x06+{0} h\x06-{0} h\x06Minute\x0bthis minute\x08+{0} min" + + "\x08-{0} min\x06Second\x03now\x06+{0} s\x06-{0} s\x04Zone\x0d+HH:mm;-HH:" + + "mm\x06GMT{0}\x03GMT\x03{0}\x08{0} (+1)\x08{0} (+0)\x03UTC\x10EEEE dd MMM" + + "M y G\x0bdd MMMM y G\x0add MMM y G\x04Jan.\x04Feb.\x04Mrt.\x04Apr.\x03Me" + + "i\x04Jun.\x04Jul.\x04Aug.\x04Sep.\x04Okt.\x04Nov.\x04Des.\x01J\x01A\x01O" + + "\x01N\x01D\x08Januarie\x09Februarie\x05Maart\x05April\x05Junie\x05Julie" + + "\x08Augustus\x09September\x07Oktober\x08November\x08Desember\x03So.\x03M" + + "a.\x03Di.\x03Wo.\x03Do.\x03Vr.\x03Sa.\x01V\x06Sondag\x07Maandag\x07Dinsd" + + "ag\x08Woensdag\x09Donderdag\x06Vrydag\x08Saterdag\x02K1\x02K2\x02K3\x02K" + + "4\x0d1ste kwartaal\x0c2de kwartaal\x0c3de kwartaal\x0c4de kwartaal\x09mi" + + "ddernag\x03vm.\x03nm.\x0adie oggend\x0adie middag\x08die aand\x07die nag" + + "\x02mn\x01v\x01n\x01o\x01m\x01a\x06oggend\x06middag\x04aand\x03nag\x0dvo" + + "or Christus\x1bvoor die gewone jaartelling\x0bna Christus\x12gewone jaar" + + "telling\x01k\x01t\x01s\x01z\x01f\x01d\x01l\x01c\x01g\x01u\x17جمهورية الص" + + "ي\x0fغرينتش{0}\x0cغرينتش\x01F\x01M\x01D\x01I\x0c{0} bisiestu\x01L\x01M" + + "\x01X\x01S\x027b\x047bis\x18Tenpyō-kampō (749-749)\x19Tenpyō-shōhō (749-" + + "757)\x17Tenpyō-hōji (757-765)\x17Tenpyō-jingo (765-767)\x15Jingo-keiun (" + + "767-770)\x10Ten-ō (781-782)\x10Ten-an (857-859)\x12Ten-ei (1110-1113)" + + "\x11En-ō (1239-1240)\x0aera Shōwa\x03GMT\x01h\x01b\x02ŋ\x01j\x01F\x01E" + + "\x01O\x04Lelo\x01K\x01W\x11Гринуич{0}\x0eГринуич'{0}, лятно часово време" + + "'{0} – стандартно време\x01N\x01A\x01S\x07GMT {0}\x03GMT\x06GMT{0}\x01P" + + "\x01U\x02Č\x01p\x02č\x13{0}, ljetno vrijeme\x17{0}, standardno vrijeme" + + "\x0210\x0211\x0212\x02xu\x04Toba\x02Av\x06GMT{0}\x03GMT\x07GMT {0}\x03GM" + + "T\x01F\x01M\x01D\x01R\x0aئەمڕۆ\x08سبەی\x02Ú\x05Meiji\x07Taishō\x06Shōwa" + + "\x06Heisei\x06GMT{0}\x03GMT\x02Ch\x01G\x02Rh\x02Ll\x02Ll\x01O\x01L\x08{0" + + "} (+1)\x08{0} (+0)\x05März\x03Mai\x04Juni\x04Juli\x04Dez.\x03Mo.\x03Mi." + + "\x03Fr.\x09Jyaishtha\x07Ashadha\x0aBhadrapada\x07Ashvina\x0bMargasirsha" + + "\x06Pausha\x0bDschumada I\x0cDschumada II\x08Radschab\x0cDhu l-qaʿda\x0e" + + "Dhu l-Hiddscha\x06Minguo\x06GMT{0}\x03GMT\x01M\x01Z\x01S\x01w\x01e\x02ɗ" + + "\x01F\x01A\x01U\x01O\x01N\x01D!ཇི་ཨེམ་ཏི་{0}\x1eཇི་ཨེམ་ཊི་\x01y\x014\x07" + + "{0} GMT\x03Tir\x04Mehr\x06Bahman\x02am\x02pm\x06Minguo\x04Feb.\x04Mar." + + "\x04Apr.\x03May\x04Aug.\x04Sep.\x04Oct.\x04Nov.\x04Dec.\x05d/M/r\x0bd/M/" + + "y GGGGG\x06d/M/yy\x01A\x02Ĵ\x019\x0212\x03GMT\x05Nasie\x05Tevet\x06Adar " + + "I\x04Adar\x07Adar II\x05Nisan\x02Av\x04Elul\x03GMT\x03Hun\x03Hul\x03Ago" + + "\x03Set\x03Okt\x03Nob\x03Dis\x03GMT\x13Tempyō (729–749)\x18Tempyō-kampō " + + "(749-749)\x19Tempyō-shōhō (749-757)\x17Tempyō-hōji (757-765)\x17Temphō-j" + + "ingo (765-767)\x13Kemmu (1334–1336)\x16Hōryaku (1751–1764)\x01B\x01Y\x0b" + + "Ordibehešt\x08Khordâd\x03Tir\x07Mordâd\x09Šahrivar\x04Mehr\x06Âbân\x05Âz" + + "ar\x03Dey\x03Tir\x04Mehr\x05Âzar\x03Dey\x01M\x01J\x01S\x01V\x02mo\x02ti" + + "\x02wo\x02to\x02fr\x02so\x09Vaishakha\x08Jyeshtha\x09Aashaadha\x09Shraav" + + "ana\x0bBhaadrapada\x08Kaartika\x06Maagha\x09Phaalguna\x06Minguo\x03GMT" + + "\x01B\x01C\x06MAG{0}\x03MAG\x08{0} (+1)\x08{0} (+0)\x02Ò\x14Tìde samhrai" + + "dh: {0}\x0cBun-àm: {0}\x03GMT!ઓરડીબેહેશ્ટ\x12ખોરદાદ\x09તિર\x15મોર્દાદ" + + "\x15શાહરિવર\x0cમેહર\x0cઅબાન\x0cઅઝાર\x09ડેય\x12બાહમેન\x18એસ્ફાન્ડ\x03GMT" + + "\x02CE\x03GMT\x05Hedar\x06Tahsas\x06Genbot\x05Hamle\x01P\x08Phalguna\x04" + + "Saf.\x06Rab. I\x07Rab. II\x04Raj.\x04Ram.\x05Safar\x05Rajab\x07Ramadan" + + "\x02š\x06GMT{0}\x03GMT\x02Á\x02Sz\x01K\x03Sze\x02Cs\x03Szo\x03GMT\x02wu" + + "\x06Amshir\x08Baramhat\x07Bashans\x06Kislev\x05Tevet\x04Adar\x05Nisan" + + "\x05Sivan\x05Tamuz\x02Av\x04Elul\x04Saf.\x04Ram.\x05Syaw.\x05Safar\x09Sy" + + "a’ban\x08Ramadhan\x06Syawal\x11Saiko (854–857)\x12Tennan (857–859)\x12Ge" + + "nkei (877–885)\x13Kampyō (889–898)\x13Shōhei (931–938)\x10Ten-en (973-97" + + "6)\x0fEi-en (987-989)\x12Eiho (1081–1084)\x12Kaho (1094–1096)\x16Shōtoku" + + " (1097–1099)\x12Gen-ei (1118-1120)\x12Hoan (1120–1124)\x12Hoen (1135–114" + + "1)\x14Tenyō (1144–1145)\x13Hogen (1156–1159)\x12Nin-an (1166-1169)\x16Ge" + + "nryuku (1184–1185)\x12Ken-ei (1206-1207)\x15Shōgen (1207–1211)\x16Shōkyū" + + " (1219–1222)\x15Tempuku (1233–1234)\x12Bun-ō (1260-1261)\x12Bun-ei (1264" + + "-1275)\x13Enkei (1308–1311)\x15Genkyō (1321–1324)\x14Kareki (1326–1329)" + + "\x12Bun-an (1444-1449)\x14Tenmon (1532–1555)\x13Genwa (1615–1624)\x12Kan" + + "-ei (1624-1644)\x14Shōō (1652–1655)\x16Meiryaku (1655–1658)\x13Tenwa (16" + + "81–1684)\x12Kan-en (1748-1751)\x11An-ei (1772-1781)\x12Man-en (1860-1861" + + ")\x05Meiji\x07Taishō\x06Shōwa\x06Heisei\x01M\x02Þ\x06GMT{0}\x03GMT\x10{0" + + "} (sumartími)\x12{0} (staðaltími)\x08lɔꞋɔ\x01M\x01S\x02Ɣ\x01T\x01H\x07KL" + + "G {0}\x03KLG\x02Ĩ\x01S\x01M\x01D\x01N\x01A\x02II\x03III\x02IV\x01F\x01O" + + "\x02KO\x1cម៉ោង\u200bសកល {0}\x18ម៉ោង\u200bសកល\x0211\x06GMT{0}\x03GMT\x05F" + + "äb.\x05Mäz.\x03Mai\x04Jun.\x04Jul.\x04Ouj.\x05Säp.\x04Okt.\x04Nov.\x04D" + + "ez.\x03GMT\x04Feb.\x05Mäe.\x04Abr.\x03Mee\x04Juni\x04Juli\x04Mé.\x04Dë." + + "\x04Më.\x03Fr.\x03Sa.\x06Minguo\x02ɔ\x02si\x02Š\x05Nisan\x13Hakuči (650–" + + "671)\x12Hakuho (672–686)\x12Šučo (686–701)\x11Taiho (701–704)\x10Vado (7" + + "08–715)\x10Joro (717–724)\x12Tempio (729–749)\x18Tempio-kampo (749–749)" + + "\x18Tempio-šoho (749–757)\x18Tempio-hodzi (757–765)\x18Tempo-dzingo (765" + + "–767)\x18Dzingo-keiun (767–770)\x10Hoki (770–780)\x11Ten-o (781–782)" + + "\x13Enrjaku (782–806)\x11Daido (806–810)\x11Konin (810–824)\x12Tenčo (82" + + "4–834)\x11Šova (834–848)\x10Kajo (848–851)\x11Tenan (857–859)\x11Jogan (" + + "859–877)\x11Ninja (885–889)\x12Kampjo (889–898)\x12Šotai (898–901)\x11En" + + "čo (923–931)\x12Šohei (931–938)\x12Tengjo (938–947)\x14Tenriaku (947–95" + + "7)\x0fOva (961–964)\x10Koho (964–968)\x0fAna (968–970)\x12Ten-en (973–97" + + "6)\x11Jogen (976–978)\x10Kana (985–987)\x11Ei-en (987–989)\x14Šorjaku (9" + + "90–995)\x13Čotoku (995–999)\x12Čoho (999–1004)\x13Kanko (1004–1012)\x13Č" + + "ova (1012–1017)\x13Kanin (1017–1021)\x14Džian (1021–1024)\x16Mandžiu (10" + + "24–1028)\x14Čogen (1028–1037)\x16Čorjaku (1037–1040)\x14Čokju (1040–1044" + + ")\x13Eišo (1046–1053)\x13Kohei (1058–1065)\x17Džirjaku (1065–1069)\x13En" + + "kju (1069–1074)\x13Šoho (1074–1077)\x16Šorjaku (1077–1081)\x11Eiho (1081" + + "–084)\x13Otoku (1084–1087)\x15Kandži (1087–1094)\x13Eičo (1096–1097)" + + "\x15Šotoku (1097–1099)\x12Kova (1099–1104)\x15Čodži (1104–1106)\x13Kašo " + + "(1106–1108)\x13Tenin (1108–1110)\x13Eikju (1113–1118)\x14Gen-ei (1118–11" + + "20)\x15Tendži (1124–1126)\x15Daidži (1126–1131)\x14Tenšo (1131–1132)\x14" + + "Čošo (1132–1135)\x14Eidži (1141–1142)\x14Kodži (1142–1144)\x13Tenjo (11" + + "44–1145)\x13Kjuan (1145–1151)\x13Kjuju (1154–1156)\x15Heidži (1159–1160)" + + "\x15Eirjaku (1160–1161)\x11Oho (1161–1163)\x14Čokan (1163–1165)\x14Nin-a" + + "n (1166–1169)\x11Kao (1169–1171)\x13Šoan (1171–1175)\x15Džišo (1177–1181" + + ")\x12Jova (1181–1182)\x14Džuei (1182–1184)\x16Genrjuku (1184–1185)\x15Bu" + + "ndži (1185–1190)\x14Kenkju (1190–1199)\x15Šodži (1199–1201)\x13Kenin (12" + + "01–1204)\x14Genkju (1204–1206)\x14Ken-ei (1206–1207)\x14Šogen (1207–1211" + + ")\x16Kenrjaku (1211–1213)\x13Kenpo (1213–1219)\x14Šokju (1219–1222)\x12D" + + "žu (1222–1224)\x13Genin (1224–1225)\x14Džoei (1232–1233)\x16Bunrjaku (1" + + "234–1235)\x16Rjakunin (1238–1239)\x12En-o (1239–1240)\x15Nindži (1240–12" + + "43)\x14Hodži (1247–1249)\x14Kenčo (1249–1256)\x13Kogen (1256–1257)\x13Šo" + + "ka (1257–1259)\x14Šogen (1259–1260)\x13Bun-o (1260–1261)\x13Kočo (1261–1" + + "264)\x14Bun-ei (1264–1275)\x15Kendži (1275–1278)\x12Koan (1278–1288)\x11" + + "Šu (1288–1293)\x13Šoan (1299–1302)\x16Tokudži (1306–1308)\x12Očo (1311–" + + "1312)\x13Šova (1312–1317)\x13Bunpo (1317–1319)\x14Dženo (1319–1321)\x16D" + + "ženkjo (1321–1324)\x14Šoču (1324–1326)\x13Genko (1331–1334)\x12Kemu (13" + + "34–1336)\x14Kokoku (1340–1346)\x14Šohei (1346–1370)\x14Bunču (1372–1375)" + + "\x15Tendžu (1375–1379)\x15Korjaku (1379–1381)\x12Kova (1381–1384)\x14Gen" + + "ču (1384–1392)\x10Ku (1389–1390)\x11Oei (1394–1428)\x14Šočo (1428–1429)" + + "\x13Eikjo (1429–1441)\x14Bun-an (1444–1449)\x14Hotoku (1449–1452)\x15Kjo" + + "toku (1452–1455)\x13Košo (1455–1457)\x15Čoroku (1457–1460)\x14Kanšo (146" + + "0–1466)\x14Bunšo (1466–1467)\x12Onin (1467–1469)\x14Čokjo (1487–1489)" + + "\x12Meio (1492–1501)\x13Eišo (1504–1521)\x15Kjoroku (1528–1532)\x14Kodži" + + " (1555–1558)\x14Tenšo (1573–1592)\x14Keičo (1596–1615)\x13Genva (1615–16" + + "24)\x14Kan-ei (1624–1644)\x13Šoho (1644–1648)\x11Šu (1652–1655)\x16Meirj" + + "aku (1655–1658)\x15Mandži (1658–1661)\x12Enpo (1673–1681)\x13Tenva (1681" + + "–1684)\x15Džokjo (1684–1688)\x12Hoei (1704–1711)\x15Šotoku (1711–1716)" + + "\x13Kjoho (1716–1736)\x13Kanpo (1741–1744)\x13Enkjo (1744–1748)\x14Kan-e" + + "n (1748–1751)\x15Horjaku (1751–1764)\x13Meiva (1764–1772)\x13An-ei (1772" + + "–1781)\x13Kjova (1801–1804)\x13Tenpo (1830–1844)\x12Koka (1844–1848)" + + "\x14Man-en (1860–1861)\x14Bunkju (1861–1864)\x15Gendži (1864–1865)\x13Ke" + + "iko (1865–1868)\x07Meidži\x06Taišo\x05Šova\x01U\x02Q2\x02Q3\x02Q4\x06GMT" + + "{0}\x03GMT\x0210\x0211\x0212\x16ജിഎംടി {0}\x12ജിഎംടി\x02VI\x03VII\x04VII" + + "I\x02IX\x02XI\x03XII\x08[GMT]{0}\x05[GMT]\x06Adar I\x06R.O.C.\x02Ġ\x03GM" + + "T\x08{0} (+1)\x08{0} (+0)\x07Neetsee\x01T\x0dHH.mm.ss zzzz\x0aHH.mm.ss z" + + "\x08HH.mm.ss\x05HH.mm\x05März\x04Juni\x04Juli\x05März\x03Mai\x04Juni\x04" + + "Juli\x03GMT\x0bna Christus\x02Ŋ\x01Q\x02KB\x03GMT\x06Amshir\x08Baramhat" + + "\x07Bashans\x05Hedar\x06Tahsas\x06Genbot\x05Hamle\x07Pagumen\x02ś\x02Ś" + + "\x04Saf.\x06Rab. I\x07Rab. II\x07Dżu. I\x08Dżu. II\x03Ra.\x04Sza.\x04Ram" + + ".\x05Szaw.\x08Zu al-k.\x08Zu al-h.\x05Safar\x0aDżumada I\x0bDżumada II" + + "\x07Radżab\x06Szaban\x07Ramadan\x07Szawwal\x0aZu al-kada\x0fZu al-hidżdż" + + "a\x05ع.پ\x06Kislev\x05Tevet\x06Adar I\x04Adar\x07Adar II\x05Nisan\x05Siv" + + "an\x05Tamuz\x02Av\x04Elul\x05Magha\x08Phalguna\x04Raj.\x09Dhuʻl-H.\x05Ra" + + "jab\x03Tir\x04Mehr\x06Bahman\x06Esfand\x04d.C.\x02CE\x07Jyeshta\x0aBhadr" + + "apada\x06Ashwin\x06Kartik\x0cMargashirsha\x04Magh\x08A-Mordad\x02Ma\x02M" + + "i\x02Ma\x02Mi\x06Minguo\x03GMT\x1c{0}, летнее время&{0}, стандартное вре" + + "мя\x022Q\x023Q\x024Q\x03GMT\x01S\x01m\x01n\x01d\x06Kislev\x05Tevet\x06A" + + "dar I\x04Adar\x07Adar II\x05Nisan\x04Iyar\x05Sivan\x02Av\x04Elul\x01V" + + "\x01M\x01K\x01T\x01L\x02sh\x01q\x01k\x02dh\x06GMT{0}\x03GMT\x1a{0}, летњ" + + "е време${0}, стандардно време\x07Jekatit\x06Nehase\x06Reb. 1\x06Reb. 2" + + "\x08Džum. 1\x08Džum. 2\x06Redž.\x04Ša.\x04Še.\x06Zul-k.\x06Zul-h.\x16Tem" + + "pio-kampo (749-749)\x16Tempio-šoho (749-757)\x16Tempio-hođi (757-765)" + + "\x16Tempo-đingo (765-767)\x16Đingo-keiun (767-770)\x0fTen-o (781-782)" + + "\x11Enđi (901–923)\x13Đian (1021–1024)\x14Tenđi (1053–1058)\x16Đirjaku (" + + "1065–1069)\x13Eišo (1081–1084)\x14Kanđi (1087–1094)\x14Čođi (1104–1106)" + + "\x13Đen-ei (1118-1120)\x14Tenđi (1124–1126)\x14Daiđi (1126–1131)\x15Čoša" + + "o (1132–1135)\x13Eiđi (1141–1142)\x13Kođi (1142–1144)\x14Heiđi (1159–116" + + "0)\x14Đišo (1177–1181)\x13Đuei (1182–1184)\x14Bunđi (1185–1190)\x14Šođi " + + "(1199–1201)\x11Đu (1222–1224)\x14Đenin (1224–1225)\x13Đoei (1232–1233)" + + "\x10En-o (1239-1240)\x13Hođi (1247–1249)\x11Bun-o (1260-1261)\x14Kenđi (" + + "1275–1278)\x15Tokuđi (1306–1308)\x13Đeno (1319–1321)\x15Đenkjo (1321–132" + + "4)\x13Buču (1372–1375)\x13Kođi (1555–1558)\x13Jokjo (1684–1688)\x14Genđi" + + " (1864–1865)\x06Meiđi\x06Haisei\x03GMT\x11{0}, letnje vreme\x15{0}, stan" + + "dardno vreme\x06Bâbâ\x07Hâtour\x05Kiahk\x06Toubah\x07Amshîr\x09Barmahât" + + "\x09Barmoudah\x0aBa’ounah\x05Abîb\x05Misra\x07Al-nasi\x09Vaishākh\x09Āsh" + + "ādha\x09Shrāvana\x0aBhādrapad\x07Āshwin\x07Kārtik\x0eMārgashīrsha\x05Pa" + + "ush\x05Māgh\x08Phālgun\x05Safar\x10Rabi’ al-awwal\x10Rabi’ al-akhir\x0cJ" + + "umada-l-ula\x0fJumada-l-akhira\x09Sha’ban\x07Ramadan\x0dDhu-l-ga’da\x0bD" + + "hu-l-hijja\x1aTempyō-kampō (749–749)\x1bTempyō-shōhō (749–757)\x19Tempyō" + + "-hōji (757–765)\x19Temphō-jingo (765–767)\x13En-ō (1239–1240)\x14Bun-ō (" + + "1260–1261)\x08Khordād\x03Tir\x07Mordād\x04Mehr\x06Ābān\x05Āzar\x06Bahman" + + "\x06Esfand\x07GMT {0}\x03GMT\x06GMT{0}\x08Rabiʻ I\x09Rabiʻ II\x08Jumada " + + "I\x09Jumada II\x08{0} (+1)\x08{0} (+0)\x13ህሉው ወርሒ\x16ዝመጽእ ወርሒ\x06Tikimt" + + "\x05Hidar\x07Yakatit\x07Magabit\x07Miyazya\x06Ginbot\x06Nehasa\x09Pagumi" + + "ene\x07Sravana\x06Asvina\x07Kartika\x06Minguo\x10مىلادىيە\x0aمىنگو\x0210" + + "\x0211\x0212\x0213\x0fRobiʼ ul-avval\x0eRobiʼ ul-oxir\x0eJumad ul-avval" + + "\x0dJumad ul-oxir\x08Shaʼbon\x07Ramazon\x07Shavvol\x0aZul-qaʼda\x09Zul-h" + + "ijja\x08{0} (+1)\x08{0} (+0)\x016\x017\x04Baba\x05Hator\x04Toba\x08Baram" + + "hat\x05Paona\x04Epep\x05Mesra\x05Hedar\x03Ter\x02Q4\x06Kislev\x05Tevet" + + "\x06Adar I\x04Adar\x07Adar II\x05Nisan\x05Sivan\x05Tamuz\x02Av\x04Elul" + + "\x03Tir\x06Mordad\x04Mehr\x04Aban\x04Azar\x03Dey\x1cאיבער אַכט טאָג\x02L" + + "K\x03GMT" + +var bucket1 string = "" + // Size: 8338 bytes + "\x04v.C.\x06v.g.j.\x04n.C.\x04g.j.\x03vgj\x02gj\x0fEEEE, dd MMMM y\x09dd" + + " MMMM y\x08dd MMM y\x03era\x04jaar\x0cverlede jaar\x0chierdie jaar\x0dvo" + + "lgende jaar\x0coor {0} jaar\x0f{0} jaar gelede\x02j.\x08kwartaal\x0fvori" + + "ge kwartaal\x10hierdie kwartaal\x11volgende kwartaal\x10oor {0} kwartaal" + + "\x10oor {0} kwartale\x13{0} kwartaal gelede\x13{0} kwartale gelede\x03kw" + + ".\x05maand\x0dverlede maand\x0cvandeesmaand\x0evolgende maand\x0eoor {0}" + + " minuut\x10{0} maand gelede\x11{0} maande gelede\x03md.\x0boor {0} md." + + "\x0e{0} md. gelede\x04week\x0cverlede week\x0bvandeesweek\x0dvolgende we" + + "ek\x0coor {0} week\x0coor {0} weke\x0f{0} week gelede\x0f{0} weke gelede" + + "\x10die week van {0}\x03wk.\x0aoor {0} w.\x0d{0} w. gelede\x0eweek van m" + + "aand\x0awk. v. md.\x03dag\x09eergister\x06gister\x06vandag\x05môre\x08oo" + + "rmôre\x0boor {0} dag\x0boor {0} dae\x0e{0} dag gelede\x0e{0} dae gelede" + + "\x02d.\x0cdag van jaar\x0adag van j.\x10dag van die week\x0bdag van wk." + + "\x14weekdag van die jaar\x0fwk.-dag van md.\x0everlede Sondag\x0ehierdie" + + " Sondag\x0fvolgende Sondag\x0eoor {0} Sondag\x0eoor {0} Sondae\x11{0} So" + + "ndag gelede\x11{0} Sondae gelede\x0cverlede Son.\x0chierdie Son.\x0dvolg" + + "ende Son.\x0fverlede Maandag\x0fhierdie Maandag\x10volgende Maandag\x0fo" + + "or {0} Maandag\x0foor {0} Maandae\x12{0} Maandag gelede\x12{0} Maandae g" + + "elede\x0bverlede Ma.\x0bhierdie Ma.\x0cvolgende Ma.\x0fverlede Dinsdag" + + "\x0fhierdie Dinsdag\x10volgende Dinsdag\x0foor {0} Dinsdag\x0foor {0} Di" + + "nsdae\x12{0} Dinsdag gelede\x12{0} Dinsdae gelede\x0bverlede Di.\x0bhier" + + "die Di.\x0cvolgende Di.\x10verlede Woensdag\x10hierdie Woensdag\x11volge" + + "nde Woensdag\x10oor {0} Woensdag\x10oor {0} Woensdae\x13{0} Woensdag gel" + + "ede\x13{0} Woensdae gelede\x0bverlede Wo.\x0bhierdie Wo.\x0cvolgende Wo." + + "\x11verlede Donderdag\x11hierdie Donderdag\x12volgende Donderdag\x11oor " + + "{0} Donderdag\x11oor {0} Donderdae\x14{0} Donderdag gelede\x14{0} Donder" + + "dae gelede\x0bverlede Do.\x0bhierdie Do.\x0cvolgende Do.\x0everlede Vryd" + + "ag\x0ehierdie Vrydag\x0fvolgende Vrydag\x0eoor {0} Vrydag\x0eoor {0} Vry" + + "dae\x11{0} Vrydag gelede\x11{0} Vrydae gelede\x0bverlede Vr.\x08dié Vr." + + "\x08vlg. Vr.\x10verlede Saterdag\x10hierdie Saterdag\x11volgende Saterda" + + "g\x10oor {0} Saterdag\x10oor {0} Saterdae\x13{0} Saterdag gelede\x13{0} " + + "Saterdae gelede\x0bverlede Sa.\x08dié Sa.\x08vlg. Sa.\x07vm./nm.\x05VM/N" + + "M\x03uur\x0bhierdie uur\x0boor {0} uur\x0e{0} uur gelede\x02u.\x06minuut" + + "\x0ehierdie minuut\x11{0} minuut gelede\x11{0} minute gelede\x04min.\x0c" + + "oor {0} min.\x0f{0} min. gelede\x02m.\x07sekonde\x03nou\x0foor {0} sekon" + + "de\x10oor {0} sekondes\x12{0} sekonde gelede\x13{0} sekondes gelede\x04s" + + "ek.\x0coor {0} sek.\x0f{0} sek. gelede\x02s.\x07tydsone\x04sone\x07{0}-t" + + "yd\x0d{0}-dagligtyd\x10{0}-standaardtyd\x1eGekoördineerde universele tyd" + + "\x0fBritse somertyd\x12Ierse standaardtyd\x0eAfganistan-tyd\x13Sentraal-" + + "Afrika-tyd\x03CAT\x0eOos-Afrika-tyd\x03EAT\x18Suid-Afrika-standaardtyd" + + "\x04SAST\x0eWes-Afrika-tyd\x17Wes-Afrika-standaardtyd\x13Wes-Afrika-some" + + "rtyd\x03WAT\x04WAST\x0aAlaska-tyd\x13Alaska-standaardtyd\x10Alaska-dagli" + + "gtyd\x0bAmasone-tyd\x14Amasone-standaardtyd\x10Amasone-somertyd\x1eNoord" + + "-Amerikaanse sentrale tyd'Noord-Amerikaanse sentrale standaardtyd$Noord-" + + "Amerikaanse sentrale dagligtyd\x1fNoord-Amerikaanse oostelike tyd(Noord-" + + "Amerikaanse oostelike standaardtyd%Noord-Amerikaanse oostelike dagligtyd" + + "\x19Noord-Amerikaanse bergtyd#Noord-Amerikaanse berg-standaardtyd Noord-" + + "Amerikaanse berg-dagligtyd\x0dPasifiese tyd\x16Pasifiese standaardtyd" + + "\x13Pasifiese dagligtyd\x0aAnadyr-tyd\x13Anadyr-standaardtyd\x0fAnadyr-s" + + "omertyd\x08Apia-tyd\x11Apia-standaardtyd\x0eApia-dagligtyd\x0cArabiese t" + + "yd\x15Arabiese standaardtyd\x12Arabiese dagligtyd\x0fArgentinië-tyd\x18A" + + "rgentinië-standaardtyd\x14Argentinië-somertyd\x13Wes-Argentinië-tyd\x1cW" + + "es-Argentinië-standaardtyd\x18Wes-Argentinië-somertyd\x0cArmenië-tyd\x15" + + "Armenië-standaardtyd\x11Armenië-somertyd\x0eAtlantiese tyd\x17Atlantiese" + + " standaardtyd\x14Atlantiese dagligtyd\x18Sentraal-Australiese tyd!Sentra" + + "al-Australiese standaardtyd\x1eSentraal-Australiese dagligtyd\"Sentraal-" + + "westelike Australiese tyd,Sentraal-westelike Australiese standaard-tyd(S" + + "entraal-westelike Australiese dagligtyd\x19Oostelike Australiese tyd\"Oo" + + "stelike Australiese standaardtyd\x1fOostelike Australiese dagligtyd\x19W" + + "estelike Australiese tyd\"Westelike Australiese standaardtyd\x1fWestelik" + + "e Australiese dagligtyd\x0fAserbeidjan-tyd\x18Aserbeidjan-standaardtyd" + + "\x14Aserbeidjan-somertyd\x09Asore-tyd\x12Asore-standaardtyd\x0eAsore-som" + + "ertyd\x0eBangladesj-tyd\x17Bangladesj-standaardtyd\x13Bangladesj-somerty" + + "d\x0bBhoetan-tyd\x0bBolivia-tyd\x0cBrasilia-tyd\x15Brasilia-standaardtyd" + + "\x11Brasilia-somertyd\x16Broenei Darussalam-tyd\x0eKaap Verde-tyd\x17Kaa" + + "p Verde-standaardtyd\x13Kaap Verde-somertyd\x15Chamorro-standaardtyd\x0b" + + "Chatham-tyd\x14Chatham-standaardtyd\x11Chatham-dagligtyd\x09Chili-tyd" + + "\x12Chili-standaardtyd\x0eChili-somertyd\x09China-tyd\x12China-standaard" + + "tyd\x0fChina-dagligtyd\x0eChoibalsan-tyd\x17Choibalsan-standaardtyd\x13C" + + "hoibalsan-somertyd\x13Christmaseiland-tyd\x10Kokoseilande-tyd\x0dColombi" + + "ë-tyd\x16Colombië-standaardtyd\x12Colombië-somertyd\x0fCookeilande-tyd" + + "\x18Cookeilande-standaardtyd\x18Cookeilande-halfsomertyd\x08Kuba-tyd\x11" + + "Kuba-standaardtyd\x0eKuba-dagligtyd\x09Davis-tyd\x16Dumont-d’Urville-tyd" + + "\x0dOos-Timor-tyd\x0ePaaseiland-tyd\x17Paaseiland-standaardtyd\x13Paasei" + + "land-somertyd\x0bEcuador-tyd\x15Sentraal-Europese tyd\x1eSentraal-Europe" + + "se standaardtyd\x1aSentraal-Europese somertyd\x10Oos-Europese tyd\x19Oos" + + "-Europese standaardtyd\x15Oos-Europese somertyd\x17Verder-oos-Europese t" + + "yd\x10Wes-Europese tyd\x19Wes-Europese standaardtyd\x15Wes-Europese some" + + "rtyd\x13Falklandeilande-tyd\x1cFalklandeilande-standaardtyd\x18Falklande" + + "ilande-somertyd\x09Fidji-tyd\x12Fidji-standaardtyd\x0eFidji-somertyd\x10" + + "Frans-Guiana-tyd!Franse Suider- en Antarktiese tyd\x0dGalapagos-tyd\x0bG" + + "ambier-tyd\x0cGeorgië-tyd\x15Georgië-standaardtyd\x11Georgië-somertyd" + + "\x12Gilberteilande-tyd\x0dGreenwich-tyd\x11Oos-Groenland-tyd\x1aOos-Groe" + + "nland-standaardtyd\x16Oos-Groenland-somertyd\x11Wes-Groenland-tyd\x1aWes" + + "-Groenland-standaardtyd\x16Wes-Groenland-somertyd\x1aPersiese Golf-stand" + + "aardtyd\x0aGuyana-tyd\x12Hawaii-Aleoete-tyd\x1bHawaii-Aleoete-standaardt" + + "yd\x18Hawaii-Aleoete-dagligtyd\x0cHongkong-tyd\x15Hongkong-standaardtyd" + + "\x11Hongkong-somertyd\x08Hovd-tyd\x11Hovd-standaardtyd\x0dHovd-somertyd" + + "\x13Indië-standaardtyd\x12Indiese Oseaan-tyd\x0dIndosjina-tyd\x18Sentraa" + + "l-Indonesiese tyd\x12Oos-Indonesië-tyd\x12Wes-Indonesië-tyd\x08Iran-tyd" + + "\x11Iran-standaardtyd\x0eIran-dagligtyd\x0bIrkutsk-tyd\x14Irkutsk-standa" + + "ardtyd\x10Irkutsk-somertyd\x0aIsrael-tyd\x13Israel-standaardtyd\x10Israe" + + "l-dagligtyd\x09Japan-tyd\x12Japan-standaardtyd\x0fJapan-dagligtyd\x1cPet" + + "ropavlovsk-Kamchatski-tyd%Petropavlovsk-Kamchatski-standaardtyd!Petropav" + + "lovsk-Kamchatski-somertyd\x11Oos-Kazakstan-tyd\x11Wes-Kazakstan-tyd\x0dK" + + "oreaanse tyd\x16Koreaanse standaardtyd\x13Koreaanse dagligtyd\x0aKosrae-" + + "tyd\x0fKrasnojarsk-tyd\x18Krasnojarsk-standaardtyd\x14Krasnojarsk-somert" + + "yd\x0dKirgistan-tyd\x10Line-eilande-tyd\x0dLord Howe-tyd\x16Lord Howe-st" + + "andaardtyd\x13Lord Howe-dagligtyd\x14Macquarie-eiland-tyd\x0bMagadan-tyd" + + "\x14Magadan-standaardtyd\x10Magadan-somertyd\x0dMaleisië-tyd\x0cMaledive" + + "-tyd\x0dMarquesas-tyd\x13Marshalleilande-tyd\x0dMauritius-tyd\x16Mauriti" + + "us-standaardtyd\x12Mauritius-somertyd\x0aMawson-tyd\x14Noordwes-Meksiko-" + + "tyd\x1dNoordwes-Meksiko-standaardtyd\x1aNoordwes-Meksiko-dagligtyd\x19Me" + + "ksikaanse Pasifiese tyd\"Meksikaanse Pasifiese standaardtyd\x1fMeksikaan" + + "se Pasifiese dagligtyd\x0fUlaanbaatar-tyd\x18Ulaanbaatar-standaardtyd" + + "\x14Ulaanbaatar-somertyd\x0aMoskou-tyd\x13Moskou-standaardtyd\x0fMoskou-" + + "somertyd\x0bMianmar-tyd\x09Nauru-tyd\x09Nepal-tyd\x13Nieu-Kaledonië-tyd" + + "\x1cNieu-Kaledonië-standaardtyd\x18Nieu-Kaledonië-somertyd\x10Nieu-Seela" + + "nd-tyd\x19Nieu-Seeland-standaardtyd\x16Nieu-Seeland-dagligtyd\x10Newfoun" + + "dland-tyd\x19Newfoundland-standaardtyd\x16Newfoundland-dagligtyd\x08Niue" + + "-tyd\x11Norfolkeiland-tyd\x17Fernando de Noronha-tyd Fernando de Noronha" + + "-standaardtyd\x1cFernando de Noronha-somertyd\x0fNovosibirsk-tyd\x18Novo" + + "sibirsk-standaardtyd\x14Novosibirsk-somertyd\x08Omsk-tyd\x11Omsk-standaa" + + "rdtyd\x0dOmsk-somertyd\x0cPakistan-tyd\x15Pakistan-standaardtyd\x11Pakis" + + "tan-somertyd\x09Palau-tyd\x16Papoea-Nieu-Guinee-tyd\x0cParaguay-tyd\x15P" + + "araguay-standaardtyd\x11Paraguay-somertyd\x08Peru-tyd\x11Peru-standaardt" + + "yd\x0dPeru-somertyd\x0eFilippynse tyd\x17Filippynse standaardtyd\x13Fili" + + "ppynse somertyd\x11Fenikseilande-tyd\x1bSint-Pierre en Miquelon-tyd$Sint" + + "-Pierre en Miquelon-standaardtyd!Sint-Pierre en Miquelon-dagligtyd\x0cPi" + + "tcairn-tyd\x0aPonape-tyd\x0dPyongyang-tyd\x0cRéunion-tyd\x0bRothera-tyd" + + "\x0cSakhalin-tyd\x15Sakhalin-standaardtyd\x11Sakhalin-somertyd\x0aSamara" + + "-tyd\x13Samara-standaardtyd\x10Samara-dagligtyd\x09Samoa-tyd\x12Samoa-st" + + "andaardtyd\x0fSamoa-dagligtyd\x0dSeychelle-tyd\x16Singapoer-standaardtyd" + + "\x13Salomonseilande-tyd\x11Suid-Georgië-tyd\x0cSuriname-tyd\x09Syowa-tyd" + + "\x0aTahiti-tyd\x0aTaipei-tyd\x13Taipei-standaardtyd\x10Taipei-dagligtyd" + + "\x0fTadjikistan-tyd\x0bTokelau-tyd\x09Tonga-tyd\x12Tonga-standaardtyd" + + "\x0eTonga-somertyd\x09Chuuk-tyd\x10Turkmenistan-tyd\x19Turkmenistan-stan" + + "daardtyd\x15Turkmenistan-somertyd\x0aTuvalu-tyd\x0bUruguay-tyd\x14Urugua" + + "y-standaardtyd\x10Uruguay-somertyd\x0fOesbekistan-tyd\x18Oesbekistan-sta" + + "ndaardtyd\x14Oesbekistan-somertyd\x0bVanuatu-tyd\x14Vanuatu-standaardtyd" + + "\x10Vanuatu-somertyd\x0dVenezuela-tyd\x0fWladiwostok-tyd\x18Wladiwostok-" + + "standaardtyd\x14Wladiwostok-somertyd\x0dWolgograd-tyd\x16Wolgograd-stand" + + "aardtyd\x12Wolgograd-somertyd\x0aWostok-tyd\x0fWake-eiland-tyd\x14Wallis" + + " en Futuna-tyd\x0cJakoetsk-tyd\x15Jakoetsk-standaardtyd\x11Jakoetsk-some" + + "rtyd\x11Jekaterinburg-tyd\x1aJekaterinburg-standaardtyd\x16Jekaterinburg" + + "-somertyd\x04g.j.\x02gj" + +var bucket2 string = "" + // Size: 19776 bytes + "\x0fEEEE d MMMM y G\x0ad MMMM y G\x09d MMM y G\x0dEEEE d MMMM y\x08d MMM" + + "M y\x07d MMM y\x0ad MMM, y G\x0bd/M/y GGGGG\x04nùm\x04kɨz\x04tɨd\x03taa" + + "\x03see\x03nzu\x03dum\x04fɔe\x03dzu\x04lɔm\x03kaa\x03fwo\x11ndzɔ̀ŋɔ̀nùm" + + "\x17ndzɔ̀ŋɔ̀kƗ̀zùʔ\x1bndzɔ̀ŋɔ̀tƗ̀dʉ̀ghà\x1andzɔ̀ŋɔ̀tǎafʉ̄ghā\x0fndzɔ̀ŋès" + + "èe\x15ndzɔ̀ŋɔ̀nzùghò\x13ndzɔ̀ŋɔ̀dùmlo\x17ndzɔ̀ŋɔ̀kwîfɔ̀e\"ndzɔ̀ŋɔ̀tƗ̀fʉ" + + "̀ghàdzughù\x1andzɔ̀ŋɔ̀ghǔuwelɔ̀m\x1bndzɔ̀ŋɔ̀chwaʔàkaa wo\x10ndzɔ̀ŋèfwòo" + + "\x03nts\x03kpa\x04ghɔ\x04tɔm\x03ume\x04ghɨ\x03dzk\x0atsuʔntsɨ\x0atsuʔukp" + + "à\x0btsuʔughɔe\x0ftsuʔutɔ̀mlò\x09tsuʔumè\x0dtsuʔughɨ̂m\x11tsuʔndzɨkɔʔɔ" + + "\x0ckɨbâ kɨ 1\x09ugbâ u 2\x09ugbâ u 3\x09ugbâ u 4\x03a.g\x03a.k\x0fSěe K" + + "ɨ̀lesto\x0fBǎa Kɨ̀lesto\x02SK\x02BK\x08d MMM, y\x05d/M/y\x08kɨtîgh\x07k" + + "ɨnûm\x07ndzɔŋ\x05ewɨn\x06utsuʔ\x0aā zūɛɛ\x03nɛ\x08tsʉtsʉ\x15tsuʔu mɨ̀ è" + + "wɨ̄n\x09â tsɨ̀\x04tàm\x05menè\x09sɛkɔ̀n\x15dɨŋò kɨ enɨ̀gha\x11EEEE, G y " + + "MMMM dd\x0eGGGGG yy/MM/dd\x04S-Ɔ\x04K-Ɔ\x04E-Ɔ\x03E-O\x03E-K\x03O-A\x03A" + + "-K\x04D-Ɔ\x04F-Ɛ\x04Ɔ-A\x04Ɔ-O\x04M-Ɔ\x0fSanda-Ɔpɛpɔn\x10Kwakwar-Ɔgyefuo" + + "\x0dEbɔw-Ɔbenem\x11Ebɔbira-Oforisuo\x1cEsusow Aketseaba-Kɔtɔnimba\x14Obi" + + "rade-Ayɛwohomumu\x12Ayɛwoho-Kitawonsa\x0eDifuu-Ɔsandaa\x0cFankwa-Ɛbɔ\x10" + + "Ɔbɛsɛ-Ahinime\x12Ɔberɛfɛw-Obubuo\x0fMumu-Ɔpɛnimba\x03Kwe\x03Dwo\x03Ben" + + "\x03Wuk\x03Yaw\x03Fia\x03Mem\x07Kwesida\x06Dwowda\x06Benada\x06Wukuda" + + "\x05Yawda\x04Fida\x08Memeneda\x01K\x01D\x01B\x01W\x01Y\x01F\x01M\x02AN" + + "\x02EW\x0bAnsa Kristo\x0dKristo Ekyiri\x02AK\x02KE\x0fEEEE, y MMMM dd" + + "\x08yy/MM/dd\x0eh:mm:ss a zzzz\x0bh:mm:ss a z\x09h:mm:ss a\x06h:mm a\x04" + + "Bere\x03Afe\x06Bosome\x06Dapɛn\x02Da\x05Ndeda\x04Ndɛ\x07Ɔkyena\x0cDapɛn " + + "mu da\x07Da bere\x08Dɔnhwer\x04Sema\x08Sɛkɛnd\x0bBere apaamu\x12EEEE፣ d " + + "MMMM y G\x0ddd/MM/y GGGGG\x07ዓ/ዓ\x07ዓ/ም\x0fመስከረም\x0cጥቅምት\x09ኅዳር\x0cታኅሣሥ" + + "\x06ጥር\x0cየካቲት\x0cመጋቢት\x0cሚያዝያ\x0cግንቦት\x06ሰኔ\x09ሐምሌ\x09ነሐሴ\x0cጳጉሜን\x09ጃን" + + "ዩ\x09ፌብሩ\x09ማርች\x09ኤፕሪ\x06ሜይ\x06ጁን\x09ጁላይ\x09ኦገስ\x09ሴፕቴ\x09ኦክቶ\x09ኖቬም" + + "\x09ዲሴም\x03ጃ\x03ፌ\x03ማ\x03ኤ\x03ሜ\x03ጁ\x03ኦ\x03ሴ\x03ኖ\x03ዲ\x0fጃንዩወሪ\x0fፌብ" + + "ሩወሪ\x0cኤፕሪል\x0cኦገስት\x12ሴፕቴምበር\x0fኦክቶበር\x0fኖቬምበር\x0fዲሴምበር\x09እሑድ\x06ሰኞ" + + "\x09ማክሰ\x09ረቡዕ\x09ሐሙስ\x09ዓርብ\x09ቅዳሜ\x03እ\x03ሰ\x03ረ\x03ሐ\x03ዓ\x03ቅ\x0cማክሰ" + + "ኞ\x07ሩብ1\x07ሩብ2\x07ሩብ3\x07ሩብ4\x0e1ኛው ሩብ\x0e2ኛው ሩብ\x0e3ኛው ሩብ\x0e4ኛው ሩብ" + + "\x13እኩለ ሌሊት\x09ጥዋት\x09ቀትር\x0cከሰዓት\x0aጥዋት1\x0dከሰዓት1\x07ማታ1\x0aሌሊት1\x03ጠ" + + "\x03ቀ\x03ከ\x16ከሰዓት በኋላ\x06ማታ\x09ሌሊት\x13ዓመተ ዓለም\x16ዓመተ ምሕረት\x10EEEE ፣d MM" + + "MM y\x07dd/MM/y\x0cሙሀረም\x09ሳፈር\x16ረቢዑል አወል\x16ረቢዑል አኺር\x16ጀማደል አወል\x16ጀማ" + + "ደል አኺር\x09ረጀብ\x0cሻእባን\x0cረመዳን\x09ሸዋል\x0fዙልቂዳህ\x0fዙልሂጃህ\x09ዘመን\x09ዓመት" + + "\x16ያለፈው ዓመት\x13በዚህ ዓመት\x1cየሚቀጥለው ዓመት\x1dበ{0} ዓመታት ውስጥ\x1aከ{0} ዓመት በፊት" + + "\x1dከ{0} ዓመታት በፊት\x06ሩብ\x19የመጨረሻው ሩብ\x0dይህ ሩብ\x19የሚቀጥለው ሩብ\x0b+{0} ሩብ" + + "\x14{0} ሩብ በፊት\x06ወር\x13ያለፈው ወር\x10በዚህ ወር\x19የሚቀጥለው ወር\x17በ{0} ወር ውስጥ" + + "\x1aበ{0} ወራት ውስጥ\x17ከ{0} ወር በፊት\x1aከ{0} ወራት በፊት\x0cሳምንት\x19ያለፈው ሳምንት\x16" + + "በዚህ ሳምንት\x1fየሚቀጥለው ሳምንት\x1dበ{0} ሳምንት ውስጥ በ{0} ሳምንታት ውስጥ\x1dከ{0} ሳምንት በ" + + "ፊት ከ{0} ሳምንታት በፊት\x10{0} ሳምንት\x19ባለፈው ሳምንት\x16በዚህ ሣምንት\x16የወሩ ሳምንት\x06" + + "ቀን\x19ከትናንት ወዲያ\x0cትናንት\x06ዛሬ\x06ነገ\x13ከነገ ወዲያ\x17በ{0} ቀን ውስጥ\x1aበ{0} " + + "ቀናት ውስጥ\x17ከ{0} ቀን በፊት\x1aከ{0} ቀናት በፊት\x0fትላንትና\x1aበ{0} ቀኖች ውስጥ\x18ከ {" + + "0} ቀን በፊት\x1aከ{0} ቀኖች በፊት\x13የዓመቱ ቀን\x0cአዘቦት የወሩ የሳምንት ቀን\x16ያለፈው እሑድ" + + "\x16የአሁኑ እሑድ\x1cየሚቀጥለው እሑድ\x1aበ{0} እሑድ ውስጥ\x1dበ{0} እሑዶች ውስጥ\x1aከ{0} እሑድ " + + "በፊት\x1dከ{0} እሑዶች በፊት\x13ያለፈው ሰኞ\x13የአሁኑ ሰኞ\x19የሚቀጥለው ሰኞ\x17በ{0} ሰኞ ውስጥ" + + "\x1dበ{0} ሰኞዎች ውስጥ\x17ከ{0} ሰኞ በፊት\x1dከ{0} ሰኞዎች በፊት\x19ያለፈው ማክሰኞ\x19የአሁኑ ማ" + + "ክሰኞ\x1fየሚቀጥለው ማክሰኞ\x1dበ{0} ማክሰኞ ውስጥ#በ{0} ማክሰኞዎች ውስጥ\x1dከ{0} ማክሰኞ በፊት#ከ" + + "{0} ማክሰኞዎች በፊት\x16ያለፈው ረቡዕ\x16የአሁኑ ረቡዕ\x1cየሚቀጥለው ረቡዕ\x1aበ{0} ረቡዕ ውስጥ በ{0" + + "} ረቡዕዎች ውስጥ\x1aከ{0} ረቡዕ በፊት ከ{0} ረቡዕዎች በፊት\x16ያለፈው ሐሙስ\x16የአሁኑ ሐሙስ\x1cየሚ" + + "ቀጥለው ሐሙስ\x1aበ{0} ሐሙስ ውስጥ\x1dበ{0} ሐሙሶች ውስጥ\x1aከ{0} ሐሙስ በፊት\x1dከ{0} ሐሙሶች" + + " በፊት\x16ያለፈው ዓርብ\x16የአሁኑ ዓርብ\x1cየሚቀጥለው ዓርብ\x1aበ{0} ዓርብ ውስጥ በ{0} ዓርብዎች ውስ" + + "ጥ\x1aከ{0} ዓርብ በፊት ከ{0} ዓርብዎች በፊት\x16ያለፈው ቅዳሜ\x16የአሁኑ ቅዳሜ\x1cየሚቀጥለው ቅዳሜ" + + "\x1aበ{0} ቅዳሜ ውስጥ በ{0} ቅዳሜዎች ውስጥ\x1aከ{0} ቅዳሜ በፊት ከ{0} ቅዳሜዎች በፊት\x16ጥዋት/ከሰ" + + "ዓት\x09ሰዓት\x10ይህ ሰዓት\x1aበ{0} ሰዓት ውስጥ\x1dበ{0} ሰዓቶች ውስጥ\x1aከ{0} ሰዓት በፊት" + + "\x1dከ{0} ሰዓቶች በፊት\x09ደቂቃ\x10ይህ ደቂቃ\x1aበ{0} ደቂቃ ውስጥ በ{0} ደቂቃዎች ውስጥ\x1aከ{0" + + "} ደቂቃ በፊት ከ{0} ደቂቃዎች በፊት\x0cሰከንድ\x09አሁን\x1dበ{0} ሰከንድ ውስጥ በ{0} ሰከንዶች ውስጥ" + + "\x1dከ{0} ሰከንድ በፊት ከ{0} ሰከንዶች በፊት\x13የሰዓት ሰቅ\x0b+HHmm;-HHmm\x11ጂ ኤም ቲ{0}" + + "\x0eጂ ኤም ቲ\x0a{0} ጊዜ${0} የቀን ብርሃን ሰዓት\x1a{0} መደበኛ ሰዓት,የተቀነባበረ ሁለገብ ሰዓት3የ" + + "ብሪትሽ የበጋ ሰዓት አቆጣጠር6የአይሪሽ መደበኛ ሰዓት አቆጣጠር\"የአፍጋኒስታን ሰዓት,የመካከለኛው አፍሪካ ሰዓት" + + "&የምስራቅ አፍሪካ ሰዓት0የደቡብ አፍሪካ መደበኛ ሰዓት&የምዕራብ አፍሪካ ሰዓት3የምዕራብ አፍሪካ መደበኛ ሰዓት3የም" + + "ዕራብ አፍሪካ ክረምት ሰዓት)የአላስካ ሰዓት አቆጣጠር9የአላስካ መደበኛ የሰዓት አቆጣጠር3የአላስካ የቀን ሰዓት " + + "አቆጣጠር)የአማዞን ሰዓት አቆጣጠር6የአማዞን መደበኛ ሰዓት አቆጣጠር3የአማዞን የቀን ሰዓት አቆጣጠር,የመካከለኛ " + + "ሰዓት አቆጣጠር9የመካከለኛ መደበኛ ሰዓት አቆጣጠር6የመካከለኛ የቀን ሰዓት አቆጣጠር,የምዕራባዊ ሰዓት አቆጣጠር<" + + "የምዕራባዊ መደበኛ የሰዓት አቆጣጠር6የምዕራባዊ የቀን ሰዓት አቆጣጠር)የተራራ የሰዓት አቆጣጠር6የተራራ መደበኛ " + + "የሰዓት አቆጣጠር/የተራራ የቀንሰዓት አቆጣጠር)የፓስፊክ ሰዓት አቆጣጠር6የፓስፊክ መደበኛ ሰዓት አቆጣጠር3የፓስፊ" + + "ክ የቀን ሰዓት አቆጣጠር,የአናድይር ሰዓት አቆጣጠር,የአናዲይር ሰዓት አቆጣጠር9የአናድይር የበጋ የሰዓት አቆጣጠ" + + "ር\x16የአፒያ ሰዓት#የአፒያ መደበኛ ሰዓት'የአፒያ የቀን ጊዜ ሰዓት\x19የዓረቢያ ሰዓት&የዓረቢያ መደበኛ ሰዓ" + + "ት0የዓረቢያ የቀን ብርሃን ሰዓት2የአርጀንቲና የሰዓት አቆጣጠር<የአርጀንቲና መደበኛ ሰዓት አቆጣጠር9የአርጀንቲና" + + " የበጋ ሰዓት አቆጣጠር?የአርጀንቲና ምስራቃዊ ሰዓት አቆጣጠርLየምዕራባዊ አርጀንቲና መደበኛ ሰዓት አቆጣጠርFየአርጀ" + + "ንቲና ምስራቃዊ በጋ ሰዓት አቆጣጠር\x1cየአርመኒያ ሰዓት)የአርመኒያ መደበኛ ሰዓት)የአርመኒያ ክረምት ሰዓት2የ" + + "አትላንቲክ የሰዓት አቆጣጠር?የአትላንቲክ መደበኛ የሰዓት አቆጣጠር9የአትላንቲክ የቀን ሰዓት አቆጣጠርEየመካከለኛ" + + "ው አውስትራሊያ ሰዓት አቆጣጠርRየአውስትራሊያ መካከለኛ መደበኛ የሰዓት አቆጣጠርLየአውስትራሊያ መካከለኛ የቀን " + + "ሰዓት አቆጣጠርRየአውስትራሊያ መካከለኛ ምስራቃዊ ሰዓት አቆጣጠር_የአውስትራሊያ መካከለኛ ምስራቃዊ መደበኛ ሰዓት" + + " አቆጣጠር\\የአውስትራሊያ መካከለኛው ምስራቅ የቀን ሰዓት አቆጣጠርEየምዕራባዊ አውስትራሊያ የሰዓት አቆጣጠርRየአው" + + "ስትራሊያ ምዕራባዊ መደበኛ የሰዓት አቆጣጠርLየአውስትራሊያ ምዕራባዊ የቀን ሰዓት አቆጣጠርBየምስራቃዊ አውስትራሊ" + + "ያ ሰዓት አቆጣጠርOየአውስትራሊያ ምስራቃዊ መደበኛ ሰዓት አቆጣጠርLየአውስትራሊያ ምስራቃዊ የቀን ሰዓት አቆጣጠር" + + "\x1fየአዘርባጃን ሰዓት,የአዘርባጃን መደበኛ ሰዓት,የአዘርባጃን ክረምት ሰዓት\x19የአዞረስ ሰዓት&የአዞረስ መደበ" + + "ኛ ሰዓት&የአዞረስ ክረምት ሰዓት\x1fየባንግላዴሽ ሰዓት,የባንግላዴሽ መደበኛ ሰዓት,የባንግላዴሽ ክረምት ሰዓት" + + "\x16የቡታን ሰዓት\x19የቦሊቪያ ሰዓት,የብራዚላዊ ሰዓት አቆጣጠር9የብራሲሊያ መደበኛ ሰዓት አቆጣጠር3የብራዚላ የ" + + "በጋ ሰዓት አቆጣጠር)የብሩኔይ ዳሩሳላም ሰዓት\x1dየኬፕ ቨርዴ ሰዓት*የኬፕ ቨርዴ መደበኛ ሰዓት*የኬፕ ቨርዴ ክ" + + "ረምት ሰዓት#የቻሞሮ መደበኛ ሰዓት\x16የቻታም ሰዓት#የቻታም መደበኛ ሰዓት-የቻታም የቀን ብርሃን ሰዓት\x13የ" + + "ቺሊ ሰዓት የቺሊ መደበኛ ሰዓት የቺሊ ክረምት ሰዓት\x16የቻይና ሰዓት#የቻይና መደበኛ ሰዓት-የቻይና የቀን ብር" + + "ሃን ሰዓት,የቾይባልሳ ሰዓት አቆጣጠር?የቾይባልሳን መደበኛ የሰዓት አቆጣጠር<የቾይባልሳን የበጋ የሰዓት አቆጣጠር" + + "\x1dየገና ደሴት ሰዓት#የኮኮስ ደሴቶች ሰዓት\x1cየኮሎምቢያ ሰዓት)የኮሎምቢያ መደበኛ ሰዓት)የኮሎምቢያ ክረምት " + + "ሰዓት የኩክ ደሴቶች ሰዓት-የኩክ ደሴቶች መደበኛ ሰዓት7የኩክ ደሴቶች ግማሽ ክረምት ሰዓት\x10ኩባ ሰዓት የኩባ" + + " መደበኛ ሰዓት*የኩባ የቀን ብርሃን ሰዓት\x16የዴቪስ ሰዓት&የዱሞንት-ዱርቪል ሰዓት#የምስራቅ ቲሞር ሰዓት#የኢስተ" + + "ር ደሴት ሰዓት0የኢስተር ደሴት መደበኛ ሰዓት0የኢስተር ደሴት ክረምት ሰዓት\x19የኢኳዶር ሰዓት,የመካከለኛው አ" + + "ውሮፓ ሰዓት9የመካከለኛው አውሮፓ መደበኛ ሰዓት9የመካከለኛው አውሮፓ ክረምት ሰዓት)የምስራቃዊ አውሮፓ ሰዓት6የም" + + "ስራቃዊ አውሮፓ መደበኛ ሰዓት6የምስራቃዊ አውሮፓ ክረምት ሰዓት0የሩቅ ምስራቅ የአውሮፓ ሰዓት)የምዕራባዊ አውሮፓ" + + " ሰዓት6የምዕራባዊ አውሮፓ መደበኛ ሰዓት6የምዕራባዊ አውሮፓ ክረምት ሰዓት,የፋልክላንድ ደሴቶች ሰዓት9የፋልክላንድ " + + "ደሴቶች መደበኛ ሰዓት9የፋልክላንድ ደሴቶች ክረምት ሰዓት\x13የፊጂ ሰዓት የፊጂ መደበኛ ሰዓት የፊጂ ክረምት ሰ" + + "ዓት&የፈረንሳይ ጉያና ሰዓትFየፈረንሳይ ደቡባዊ እና አንታርክቲክ ሰዓት\x1cየጋላፓጎስ ሰዓት\x1cየጋምቢየር ሰ" + + "ዓት\x1cየጂዮርጂያ ሰዓት)የጂዮርጂያ መደበኛ ሰዓት)የጂዮርጂያ ክረምት ሰዓት)የጂልበርት ደሴቶች ሰዓት)ግሪንዊች" + + " ማዕከላዊ ሰዓት,የምስራቅ ግሪንላንድ ሰዓት9የምስራቅ ግሪንላንድ መደበኛ ሰዓት9የምስራቅ ግሪንላንድ ክረምት ሰዓት," + + "የምዕራብ ግሪንላንድ ሰዓት9የምዕራብ ግሪንላንድ መደበኛ ሰዓት9የምዕራብ ግሪንላንድ ክረምት ሰዓት,የባህረሰላጤ መ" + + "ደበኛ ሰዓት\x16የጉያና ሰዓት3የሃዋይ አሌኡት ሰዓት አቆጣጠር@የሃዋይ አሌኡት መደበኛ ሰዓት አቆጣጠር=የሃዋይ " + + "አሌኡት የቀን ሰዓት አቆጣጠር የሆንግ ኮንግ ሰዓት-የሆንግ ኮንግ መደበኛ ሰዓት-የሆንግ ኮንግ ክረምት ሰዓት&የሆ" + + "ቭድ ሰዓት አቆጣጠር6የሆቭድ መደበኛ የሰዓት አቆጣጠር0የሆቭድ የበጋ ሰዓት አቆጣጠር#የህንድ መደበኛ ሰዓት&የህን" + + "ድ ውቅያኖስ ሰዓት\x1fየኢንዶቻይና ሰዓት2የመካከለኛው ኢንዶኔዢያ ሰዓት/የምስራቃዊ ኢንዶኔዢያ ሰዓት/የምዕራባዊ" + + " ኢንዶኔዢያ ሰዓት\x16የኢራን ሰዓት#የኢራን መደበኛ ሰዓት-የኢራን የቀን ብርሃን ሰዓት/የኢርኩትስክ ሰዓት አቆጣጠ" + + "ር?የኢርኩትስክ መደበኛ የሰዓት አቆጣጠር9ኢርኩትስክ የበጋ የሰዓት አቆጣጠር\x1cየእስራኤል ሰዓት)የእስራኤል መ" + + "ደበኛ ሰዓት3የእስራኤል የቀን ብርሃን ሰዓት\x16የጃፓን ሰዓት#የጃፓን መደበኛ ሰዓት-የጃፓን የቀን ብርሃን ሰዓ" + + "ት,የካምቻትካ ሰዓት አቆጣጠርJየፔትሮፓቭሎስኪ - ካምቻትስኪ ሰዓት አቆጣጠርTየፔትሮፓቭሎስኪ - ካምቻትስኪ የበጋ" + + " ሰዓት አቆጣጠር,የምስራቅ ካዛኪስታን ሰዓት,የምዕራብ ካዛኪስታን ሰዓት\x16የኮሪያ ሰዓት#የኮሪያ መደበኛ ሰዓት-የ" + + "ኮሪያ የቀን ብርሃን ሰዓት\x19የኮስራኤ ሰዓት5የክራስኖያርስክ ሰዓት አቆጣጠርEየክራስኖይአርስክ መደበኛ ሰዓት " + + "አቆጣጠር?የክራስኖያርስክ የበጋ ሰዓት አቆጣጠር\x1fየኪርጊስታን ሰዓት#የላይን ደሴቶች ሰዓት0የሎርድ ሆዌ የሰዓ" + + "ት አቆጣጠር=የሎርድ ሆዌ መደበኛ የሰዓት አቆጣጠር7የሎርድ ሆዌ የቀን ሰዓት አቆጣጠር የማከሪ ደሴት ሰዓት,የማጋ" + + "ዳን የሰዓት አቆጣጠር6የማጋዳን መደበኛ ሰዓት አቆጣጠር0የማጋዳን በጋ ሰዓት አቆጣጠር\x1cየማሌይዢያ ሰዓት" + + "\x1cየማልዲቭስ ሰዓት\x1cየማርኴሳስ ሰዓት&የማርሻል ደሴቶች ሰዓት\x1fየማውሪሺየስ ሰዓት,የማውሪሺየስ መደበኛ " + + "ሰዓት,የማውሪሺየስ ክረምት ሰዓት\x19የማውሰን ሰዓትCሰሜናዊ ምእራብ የሜክሲኮ ሰዓት አቆጣጠርPሰሜናዊ ምእራብ " + + "የሜክሲኮ መደበኛ ሰዓት አቆጣጠርMሰሜናዊ ምእራብ የሜክሲኮ የቀን ሰዓት አቆጣጠር6የሜክሲኮ ፓሲፊክ ሰዓት አቆጣጠ" + + "ርCየሜክሲኮ ፓሲፊክ መደበኛ ሰዓት አቆጣጠር@የሜክሲኮ ፓሲፊክ የቀን ሰዓት አቆጣጠር\x1dየኡላን ባቶር ጊዜ=የኡ" + + "ላን ባቶር መደበኛ ሰዓት አቆጣጠር:የኡላን ባቶር የበጋ ሰዓት አቆጣጠር&የሞስኮ ሰዓት አቆጣጠር3የሞስኮ መደበኛ " + + "ሰዓት አቆጣጠር0የሞስኮ የበጋ ሰዓት አቆጣጠር\x1cየሚያንማር ሰዓት\x16የናውሩ ሰዓት\x16የኔፓል ሰዓት#የኒው" + + " ካሌዶኒያ ሰዓት0የኒው ካሌዶኒያ መደበኛ ሰዓት0የኒው ካሌዶኒያ ክረምት ሰዓት የኒው ዚላንድ ሰዓት-የኒው ዚላንድ መ" + + "ደበኛ ሰዓት7የኒው ዚላንድ የቀን ብርሃን ሰዓት;የኒውፋውንድላንድ የሰዓት አቆጣጠርHየኒውፋውንድላንድ መደበኛ የሰ" + + "ዓት አቆጣጠርEየኒውፋውንድላንድ የቀን የሰዓት አቆጣጠር\x16የኒዩዌ ሰዓት)የኖርፎልክ ደሴቶች ሰዓት)የኖሮንሃ ሰ" + + "ዓት አቆጣጠርJየፈርናንዶ ዲ ኖሮንቻ መደበኛ ሰዓት አቆጣጠርJየፈርናንዶ ዲ ኖሮንሃ የበጋ የሰዓት አቆጣጠር5የኖቮ" + + "ሲብሪስክ የሰዓት አቆጣጠርBየኖቮሲቢርስክ መደበኛ የሰዓት አቆጣጠር<የኖቮሲብሪስክ የበጋ ሰአት አቆጣጠር,የኦምስክ" + + " የሰዓት አቆጣጠር6የኦምስክ መደበኛ ሰዓት አቆጣጠር3የኦምስክ የበጋ ሰዓት አቆጣጠር\x1cየፓኪስታን ሰዓት)የፓኪስታ" + + "ን መደበኛ ሰዓት)የፓኪስታን ክረምት ሰዓት\x16የፓላው ሰዓት!የፓፗ ኒው ጊኒ ሰዓት\x19የፓራጓይ ሰዓት&የፓራጓ" + + "ይ መደበኛ ሰዓት&የፓራጓይ ክረምት ሰዓት\x13የፔሩ ሰዓት የፔሩ መደበኛ ሰዓት የፔሩ ክረምት ሰዓት\x19የፊሊፒ" + + "ን ሰዓት&የፊሊፒን መደበኛ ሰዓት&የፊሊፒን ክረምት ሰዓት&የፊኒክስ ደሴቶች ሰዓት4ቅዱስ የፒዬር እና ሚኴሎን ሰዓ" + + "ትAቅዱስ የፒዬር እና ሚኴሎን መደበኛ ሰዓትKቅዱስ የፒዬር እና ሚኴሎን የቀን ብርሃን ሰዓት\x1fየፒትካይርን ሰ" + + "ዓት\x16የፖናፔ ሰዓት\"የፕዮንግያንግ ሰዓት\x1cየሬዩኒየን ሰዓት\x16የሮቴራ ሰዓት,የሳክሃሊን ሰዓት አቆጣጠ" + + "ር9የሳክሃሊን መደበኛ ሰዓት አቆጣጠር6የሳክሃሊን የበጋ ሰዓት አቆጣጠር&የሳማራ ሰዓት አቆጣጠር3የሳማራ መደበኛ " + + "ሰዓት አቆጣጠር0የሳማራ የበጋ ሰዓት አቆጣጠር\x16የሳሞዋ ሰዓት#የሳሞዋ መደበኛ ሰዓት የሳሞዋ የበጋ ሰዓት" + + "\x19የሴሸልስ ሰዓት)የሲንጋፒር መደበኛ ሰዓት&የሰለሞን ደሴቶች ሰዓት&የደቡብ ጂዮርጂያ ሰዓት\x19የሱሪናም ሰዓት" + + "\x16የሲዮዋ ሰዓት\x16የታሂቲ ሰዓት\x19የታይፔይ ሰዓት&የታይፔይ መደበኛ ሰዓት0የታይፔይ የቀን ብርሃን ሰዓት" + + "\x1fየታጂኪስታን ሰዓት\x19የቶኬላው ሰዓት\x16የቶንጋ ሰዓት#የቶንጋ መደበኛ ሰዓት#የቶንጋ ክረምት ሰዓት\x13" + + "የቹክ ሰዓት%የቱርክመኒስታን ሰዓት2የቱርክመኒስታን መደበኛ ሰዓት2የቱርክመኒስታን ክረምት ሰዓት\x16የቱቫሉ ሰዓ" + + "ት\x19የኡራጓይ ሰዓት&የኡራጓይ መደበኛ ሰዓት&የኡራጓይ ክረምት ሰዓት\"የኡዝቤኪስታን ሰዓት/የኡዝቤኪስታን መደ" + + "በኛ ሰዓት/የኡዝቤኪስታን ክረምት ሰዓት\x16የቫኗቱ ሰዓት#የቫኗቱ መደበኛ ሰዓት#የቫኗቱ ክረምት ሰዓት\x1cየቬ" + + "ኔዝዌላ ሰዓት5የቭላዲቮስቶክ የሰዓት አቆጣጠርBየቪላዲቮስቶክ መደበኛ የሰዓት አቆጣጠር?የቭላዲቮስቶክ የበጋ የሰዓ" + + "ት አቆጣጠር/የቮልጎራድ የሰዓት አቆጣጠር9የቮልጎራድ መደበኛ ሰዓት አቆጣጠር6የቫልጎራድ የበጋ ሰዓት አቆጣጠር" + + "\x19የቮስቶክ ሰዓት\x1dየዌክ ደሴት ሰዓት'የዋሊስ እና ፉቱና ሰዓት,ያኩትስክ የሰዓት አቆጣጠር6ያኩትስክ መደበኛ" + + " ሰዓት አቆጣጠር6የያኩትስክ የበጋ ሰዓት አቆጣጠር5የየካተሪንበርግ ሰዓት አቆጣጠርBየየካተሪንበርግ መደበኛ ሰዓት አ" + + "ቆጣጠር?የየካተሪንበርግ የበጋ ሰዓት አቆጣጠር\x06GMT{0}\x01A\x03sig\x03ter\x03kua\x03ki" + + "n\x03ses\x03sab\x02DK\x03ata\x03mar\x03pin\x03sis\x03tal\x03arf\x02PK" + + "\x16ዓመተ ምህረት" + +var bucket3 string = "" + // Size: 9297 bytes + "\x1bالتقويم البوذي\x06توت\x08بابه\x0aهاتور\x08كيهك\x08طوبة\x0aأمشير\x0cب" + + "رمهات\x0cبرمودة\x08بشنس\x0aبؤونة\x08أبيب\x08مسرى\x08نسيئ\x02١\x02٢\x02٣" + + "\x02٤\x02٥\x02٦\x02٧\x02٨\x02٩\x04١٠\x04١١\x04١٢\x04١٣\x0cمسكريم\x08تكمت" + + "\x08هدار\x0aتهساس\x04تر\x08يكتت\x0cمجابيت\x0cميازيا\x08جنبت\x06سين\x08ها" + + "مل\x08نهاس\x0aباجمن\x11EEEE، d MMMM y G\x0fdd\u200f/MM\u200f/y G\x11d" + + "\u200f/M\u200f/y GGGGG\x0aيناير\x0cفبراير\x08مارس\x0aأبريل\x08مايو\x0aيو" + + "نيو\x0aيوليو\x0aأغسطس\x0cسبتمبر\x0cأكتوبر\x0cنوفمبر\x0cديسمبر\x02ي\x02ف" + + "\x02م\x02أ\x02و\x02ن\x02ل\x02غ\x02س\x02ك\x02ب\x02د\x0aالأحد\x0eالاثنين" + + "\x10الثلاثاء\x10الأربعاء\x0cالخميس\x0cالجمعة\x0aالسبت\x02ح\x02ث\x02ر\x02" + + "خ\x02ج\x06أحد\x0aإثنين\x0cثلاثاء\x0cأربعاء\x08خميس\x08جمعة\x06سبت\x15ال" + + "ربع الأول\x17الربع الثاني\x17الربع الثالث\x17الربع الرابع\x02ص\x0aفجرًا" + + "\x0aظهرًا\x11بعد الظهر\x0aمساءً\x15منتصف الليل\x0aليلاً\x0cصباحًا\x15قبل" + + " الميلاد\"قبل الحقبة الحالية\x0cميلادي\x15بعد الميلاد\x05ق.م\x06ق. م\x05" + + "ب.م\x0fEEEE، d MMMM y\x0ddd\u200f/MM\u200f/y\x0bd\u200f/M\u200f/y\x08تش" + + "ري\x0eمرحشوان\x0aكيسلو\x08طيفت\x08شباط\x13آذار الأول\x08آذار\x15آذار ال" + + "ثاني\x0aنيسان\x08أيار\x0aسيفان\x08تموز\x04آب\x0aأيلول\x08محرم\x06صفر" + + "\x13ربيع الأول\x13ربيع الآخر\x17جمادى الأولى\x17جمادى الآخرة\x06رجب\x0aش" + + "عبان\x0aرمضان\x08شوال\x11ذو القعدة\x0fذو الحجة\x04هـ\x08تيكا\x0cهاكتشي" + + "\x0aهاكهو\x08شتشو\x08تيهو\x08كيين\x08وادو\x0aرييكي\x08يورو\x0aجينكي\x0aت" + + "مبيو\x15تمبيو-كامبو\x13تمبيو-شوهو\x13تمبيو-هوجي\x13تمفو-جينجو\x13جينجو-" + + "كيين\x08هوكي\x09تن-أو\x0eإنرياكو\x08ديدو\x0aكونين\x0aتنتشو\x1dشووا (٨٣٤" + + "–٨٤٨)\u200f\x08كاجو\x0aنينجو\x08سيكو\x08تنان\x0aجوجان\x0cجينكيي\x08نين" + + "ا\x0cكامبيو\x0aشوتاي\x08انجي\x0aانتشو\x0aشوهيي\x0aتنجيو\x0eتنرياكو\x0cت" + + "نتوكو\x08أووا\x08كوهو\x06آنا\x0eتينروكو\x09تن-نن\x08جوجن\x08تنجن\x0aإيك" + + "ان\x08كانا\x09اي-ان\x08ايسو#شورياكو (٩٩٠–٩٩٥)\u200f\x0eتشوتوكو\x0aتشوهو" + + "\x0aكانكو\x0aتشووا\x0aكانين\x08جاين\x0aمانجو\x0cتشوجين\x10تشورياكو%تشوكي" + + "و (١٠٤٠–١٠٤٤)\u200f\x0eكانتوكو!ايشو (١٠٤٦–١٠٥٣)\u200f\x0aتينجي\x0aكوهيي" + + "\x0eجيرياكو#انكيو (١٠٦٩–١٠٧٤)\u200f!شوهو (١٠٧٤–١٠٧٧)\u200f'شورياكو (١٠٧٧" + + "–١٠٨١)\u200f\x08ايهو\x0cأوتوكو\x0aكانجي\x08كاهو\x0aايتشو\x0cشوتوكو!كوو" + + "ا (١٠٩٩–١١٠٤)\u200f\x0aتشوجي\x08كاشو\x08تنين\x09تن-اي#ايكيو (١١١٣–١١١٨)" + + "\u200f\x09جن-اي\x08هوان\x08تنجي\x08ديجي!تنشو (١١٣١–١١٣٢)\u200f\x0aتشوشو" + + "\x08هوين\x08ايجي!كوجي (١١٤٢–١١٤٤)\u200f\x08تنيو\x0aكيوان\x0cنينبيي\x0aكي" + + "وجو\x08هجين\x08هيجي\x0eايرياكو\x08أوهو\x0cتشوكان\x0aايمان\x0bنين-ان\x06" + + "كاو\x06شون\x0aأنجين\x08جيشو\x08يووا\x06جيي\x0eجنريوكو\x08بنجي\x0aكنكيو" + + "\x08شوجي\x08كنين#جنكيو (١٢٠٤–١٢٠٦)\u200f\x09كن-اي!شوجن (١٢٠٧–١٢١١)\u200f" + + "\x0eكنرياكو!كنبو (١٢١٣–١٢١٩)\u200f\x0aشوكيو\x04جو\x0cجيننين\x0aكروكو\x0a" + + "أنتيي\x08كنكي\x08جويي\x0aتمبكو\x0eبنرياكو\x0aكاتيي\x0eرياكنين\x09ان-أو" + + "\x0aنينجي\x0aكنجين\x08هوجي\x0aكنتشو\x08كوجن\x08شوكا!شوجن (١٢٥٩–١٢٦٠)" + + "\u200f\x09بن-أو\x0aكوتشو\x09بن-اي\x08كنجي\x08كوان\x1fشوو (١٢٨٨–١٢٩٣)" + + "\u200f\x0aاينين\x08شوان\x08كنجن\x06كجن\x0aتوكجي\x08انكي\x0aأوتشو!شووا (١" + + "٣١٢–١٣١٧)\u200f\x08بنبو\x06جنو#جنكيو (١٣٢١–١٣٢٤)\u200f#شوتشو (١٣٢٤–١٣٢٦" + + ")\u200f\x0aكريكي\x0aجنتكو\x08جنكو\x06كمو\x08إنجن\x0aكوككو\x08شوهي\x0aكنت" + + "كو\x0aبنتشو\x08تنجو\x0eكورياكو!كووا (١٣٨١–١٣٨٤)\u200f\x0aجنتشو%مييتكو (" + + "١٣٨٤–١٣٨٧)\u200f\x08كاكي\x04كو%مييتكو (١٣٩٠–١٣٩٤)\u200f\x08أويي#شوتشو (" + + "١٤٢٨–١٤٢٩)\u200f#ايكيو (١٤٢٩–١٤٤١)\u200f\x0cككيتسو\x09بن-أن\x0aهوتكو" + + "\x0cكيوتكو\x08كوشو\x0cتشوركو\x08كنشو\x08بنشو\x0aأونين\x08بنمي%تشوكيو (١٤" + + "٨٧–١٤٨٩)\u200f\x0aانتكو\x06ميو\x08بنكي!ايشو (١٥٠٤–١٥٢١)\u200f\x08تييي" + + "\x0cكيوركو\x08تنمن!كوجي (١٥٥٥–١٥٥٨)\u200f\x0aايركو\x08جنكي!تنشو (١٥٧٣–١٥" + + "٩٢)\u200f\x0aبنركو\x0aكيتشو\x08جنوا\x0bكان-اي!شوهو (١٦٤٤–١٦٤٨)\u200f" + + "\x08كيان\x1fشوو (١٦٥٢–١٦٥٥)\u200f\x0eميرياكو\x08منجي\x08كنبن\x08انبو\x08" + + "تنوا\x0aجوكيو\x0aجنركو\x08هويي\x0aشوتكو\x0aكيوهو\x08جنبن!كنبو (١٧٤١–١٧٤" + + "٤)\u200f#انكيو (١٧٤٤–١٧٤٨)\u200f\x0bكان-ان\x0eهورياكو\x0aمييوا\x09ان-اي" + + "\x08تنمي\x08كنسي\x0aكيووا\x08بنكا\x08بنسي\x08تنبو\x08كوكا\x06كاي\x08أنسي" + + "\x09من-ان\x0aبنكيو\x08جنجي\x06كيو\x08ميجي\x08تيشو\x08شووا\x08هيسي\x0cفرف" + + "ردن\x10أذربيهشت\x0aخرداد\x06تار\x0aمرداد\x0cشهرفار\x06مهر\x08آيان\x06آذ" + + "ر\x04دي\x08بهمن\x0eاسفندار\x08ه\u200d.ش\x0aالعصر\x0aالسنة\x19السنة الما" + + "ضية\x19السنة الحالية\x19السنة القادمة\x13خلال {0} سنة\x1aخلال سنة واحدة" + + "\x13خلال سنتين\x17خلال {0} سنوات\x11قبل {0} سنة\x18قبل سنة واحدة\x11قبل " + + "سنتين\x15قبل {0} سنوات\x11ربع السنة\x17الربع الأخير\x11هذا الربع\x17الر" + + "بع القادم\x1aخلال {0} ربع سنة\x1fخلال ربع سنة واحد\x18خلال ربعي سنة\x1e" + + "خلال {0} أرباع سنة\x18قبل {0} ربع سنة\x1dقبل ربع سنة واحد\x16قبل ربعي س" + + "نة\x1cقبل {0} أرباع سنة\x0aالشهر\x17الشهر الماضي\x11هذا الشهر\x17الشهر " + + "القادم\x13خلال {0} شهر\x18خلال شهر واحد\x13خلال شهرين\x15خلال {0} أشهر" + + "\x17خلال {0} شهرًا\x11قبل {0} شهر\x16قبل شهر واحد\x11قبل شهرين\x13قبل {0" + + "} أشهر\x15قبل {0} شهرًا\x0eالأسبوع\x1bالأسبوع الماضي\x15هذا الأسبوع\x1bا" + + "لأسبوع القادم\x17خلال {0} أسبوع\x1cخلال أسبوع واحد\x17خلال أسبوعين\x19خ" + + "لال {0} أسابيع\x1bخلال {0} أسبوعًا\x15قبل {0} أسبوع\x1aقبل أسبوع واحد" + + "\x15قبل أسبوعين\x17قبل {0} أسابيع\x19قبل {0} أسبوعًا\x0eأسبوع {0}\x1bخلا" + + "ل {0} أسبوعين\x1eالأسبوع من الشهر\x16أسبوع من شهر\x11أسبوع/شهر\x06يوم" + + "\x0dأول أمس\x06أمس\x0aاليوم\x08غدًا\x0fبعد الغد\x13خلال {0} يوم\x18خلال " + + "يوم واحد\x13خلال يومين\x15خلال {0} أيام\x17خلال {0} يومًا\x11قبل {0} يو" + + "م\x16قبل يوم واحد\x11قبل يومين\x13قبل {0} أيام\x15قبل {0} يومًا\x16يوم " + + "من السنة\x12يوم من سنة\x0dيوم/سنة\x1dيوم عمل من الشهر\x19يوم عمل من شهر" + + "\x14يوم عمل/شهر\x17الأحد الماضي\x17الأحد الحالي\x17الأحد القادم\x13خلال " + + "{0} أحد\x1eالأحد بعد القادم\x11قبل {0} أحد\x1eالأحد قبل الماضي\x0fأحد قا" + + "دم\x1aأحد بعد القادم\x0fأحد ماضي\x1aأحد قبل الماضي\x1bالإثنين الماضي" + + "\x1bالإثنين الحالي\x1bالإثنين القادم\x17خلال {0} إثنين\"الإثنين بعد القا" + + "دم خلال {0} أيام إثنين\x1eخلال {0} يوم إثنين\x15قبل {0} إثنين\"الإثنين " + + "قبل الماضي\x1eقبل {0} أيام إثنين\x1cقبل {0} يوم إثنين\x13إثنين قادم\x13" + + "إثنين ماضي\x1eإثنين قبل الماضي\x1dالثلاثاء الماضي\x1dالثلاثاء الحالي" + + "\x1dالثلاثاء القادم خلال {0} يوم ثلاثاء$الثلاثاء بعد القادم\"خلال {0} أي" + + "ام ثلاثاء\x1eقبل {0} يوم ثلاثاء$الثلاثاء قبل الماضي قبل {0} أيام ثلاثاء" + + "\x19خلال {0} ثلاثاء\x15ثلاثاء قادم ثلاثاء بعد القادم\x17قبل {0} ثلاثاء" + + "\x15ثلاثاء ماضي ثلاثاء قبل الماضي\x1dالأربعاء الماضي\x1dالأربعاء الحالي" + + "\x1dالأربعاء القادم خلال {0} يوم أربعاء$الأربعاء بعد القادم\"خلال {0} أي" + + "ام أربعاء\x1eقبل {0} يوم أربعاء$الأربعاء قبل الماضي قبل {0} أيام أربعاء" + + "\x19خلال {0} أربعاء\x17قبل {0} أربعاء\x15أربعاء ماضي أربعاء قبل الماضي" + + "\x15أربعاء قادم أربعاء بعد القادم\x19الخميس الماضي\x19الخميس الحالي\x19ا" + + "لخميس القادم\x11هذه السنة\x19السنة التالية\x02ش\x02آ\x02ت\x08مارس\x06ما" + + "ي\x0cيوليوز\x06غشت\x0aشتنبر\x0cأكتوبر\x0aنونبر\x0aدجنبر\x0aإبريل\x08أغش" + + "ت\x0aشتمبر\x0cنوفمبر\x0aدجمبر\x02إ\x08پاوی\x08اثور\x08کواق\x08طوفی\x0aم" + + "اخیر\x0eفامینوث\x0cفرموثی\x0aپاخون\x0aپاونی\x0aافیفی\x0cماسوری\x0fماه ک" + + "وچک\x15ربیع\u200cالاول\x17ربیع\u200cالثانی\x17جمادی\u200cالاول\x19جمادی" + + "\u200cالثانی\x0eذیقعدهٔ\x0cذیحجهٔ\x0cذیقعده\x0aذیحجه\x15ربیع الثانی\x15ج" + + "مادی الاول\x17جمادی الثانی\x0cفبروری\x08مارچ\x0aاپریل\x04می\x06جون\x06ج" + + "ول\x08اگست\x0cسپتمبر\x0cاکتوبر\x0aنومبر\x06دسم\x15ربیٖع الاول\x17ربیٖع " + + "الثانی\x0fذِی القد\x0fذِی الحج\x0eد صفرې د\x08ربيع\x0bربيع II\x0aجماعه" + + "\x0dجموما II\x0aراجاب\x10دالقاعده\x0dحلال حج\x02د\x02س\x02چ\x02پ\x02ج" + + "\x02ش\x15ربیع الاوّل\x17ربیع الثّانی\x17جمادی الاوّل\x19جمادی الثّانی" + + "\x10ذوالقعدۃ\x0eذوالحجۃ\x14ر بیع الاول\x16ر بیع الثانی\x06فبر\x06مار\x06" + + "اپر\x04می\x06جون\x06اگس\x06سپت\x06اکت\x06نوم" + +var bucket4 string = "" + // Size: 13674 bytes + "\x1cخلال {0} يوم خميس\x19الخميس القادم الخميس بعد القادم\x1eخلال {0} أيا" + + "م خميس\x1aقبل {0} يوم خميس\x19الخميس الماضي الخميس قبل الماضي\x1cقبل {0" + + "} أيام خميس\x19الخميس الحالي\x15خلال {0} خميس\x13قبل {0} خميس\x11خميس ما" + + "ضي\x1cخميس قبل الماضي\x19الجمعة الماضي\x19الجمعة الحالي\x19الجمعة القاد" + + "م\x1cخلال {0} يوم جمعة الجمعة بعد القادم\x1eخلال {0} أيام جمعة\x1aقبل {" + + "0} يوم جمعة الجمعة قبل الماضي\x1cقبل {0} أيام جمعة\x15خلال {0} جمعة\x11ج" + + "معة قادم\x1cجمعة بعد القادم\x13قبل {0} جمعة\x11جمعة ماضي\x1cجمعة قبل ال" + + "ماضي\x17السبت الماضي\x17السبت الحالي\x17السبت القادم\x1eالسبت بعد القاد" + + "م\"السبت بعد {0} أسابيع\x1aخلال {0} يوم سبت\x18بعد {0} يوم سبت\x18قبل {" + + "0} يوم سبت\x1eالسبت قبل الماضي\x13خلال {0} سبت\x0fسبت قادم\x1aسبت بعد ال" + + "قادم\x11قبل {0} سبت\x0fسبت ماضي\x1aسبت قبل الماضي\x05ص/م\x0eالساعات\x1b" + + "الساعة الحالية\x15خلال {0} ساعة\x1cخلال ساعة واحدة\x15خلال ساعتين\x17خل" + + "ال {0} ساعات\x13قبل {0} ساعة\x1aقبل ساعة واحدة\x13قبل ساعتين\x15قبل {0}" + + " ساعات\x0eالدقائق\x15هذه الدقيقة\x17خلال {0} دقيقة\x1eخلال دقيقة واحدة" + + "\x17خلال دقيقتين\x17خلال {0} دقائق\x15قبل {0} دقيقة\x1cقبل دقيقة واحدة" + + "\x15قبل دقيقتين\x15قبل {0} دقائق\x0eالثواني\x08الآن\x17خلال {0} ثانية" + + "\x1eخلال ثانية واحدة\x17خلال ثانيتين\x17خلال {0} ثوانٍ\x15قبل {0} ثانية" + + "\x1cقبل ثانية واحدة\x15قبل ثانيتين\x15قبل {0} ثوانِ\x15قبل {0} ثوانٍ\x0e" + + "التوقيت\x0aتوقيت\x0eتوقيت {0}\x1bتوقيت {0} الصيفي\x1bتوقيت {0} الرسمي*ا" + + "لتوقيت العالمي المنسق(توقيت بريطانيا الصيفي&توقيت أيرلندا الرسمي\x1dتوق" + + "يت أفغانستان توقيت وسط أفريقيا توقيت شرق أفريقيا\"توقيت جنوب أفريقيا تو" + + "قيت غرب أفريقيا-توقيت غرب أفريقيا الرسمي-توقيت غرب أفريقيا الصيفي\x17تو" + + "قيت ألاسكا*التوقيت الرسمي لألاسكا$توقيت ألاسكا الصيفي\x1bتوقيت الأمازون" + + "(توقيت الأمازون الرسمي(توقيت الأمازون الصيفي=التوقيت المركزي لأمريكا الش" + + "ماليةJالتوقيت الرسمي المركزي لأمريكا الشماليةJالتوقيت الصيفي المركزي لأ" + + "مريكا الشمالية;التوقيت الشرقي لأمريكا الشماليةHالتوقيت الرسمي الشرقي لأ" + + "مريكا الشماليةHالتوقيت الصيفي الشرقي لأمريكا الشمالية;التوقيت الجبلي لأ" + + "مريكا الشماليةHالتوقيت الجبلي الرسمي لأمريكا الشماليةHالتوقيت الجبلي ال" + + "صيفي لأمريكا الشمالية$توقيت المحيط الهادي1توقيت المحيط الهادي الرسمي1تو" + + "قيت المحيط الهادي الصيفي\x17توقيت أنادير$توقيت أنادير الرسمي*التوقيت ال" + + "صيفي لأنادير\x13توقيت آبيا&التوقيت الرسمي لآبيا&التوقيت الصيفي لأبيا" + + "\x1bالتوقيت العربي(التوقيت العربي الرسمي(التوقيت العربي الصيفي\x1dتوقيت " + + "الأرجنتين*توقيت الأرجنتين الرسمي*توقيت الأرجنتين الصيفي$توقيت غرب الأرج" + + "نتين1توقيت غرب الأرجنتين الرسمي1توقيت غرب الأرجنتين الصيفي\x19توقيت أرم" + + "ينيا&توقيت أرمينيا الرسمي&توقيت أرمينيا الصيفي\x19توقيت الأطلسي*التوقيت" + + " الرسمي الأطلسي*التوقيت الصيفي الأطلسي\"توقيت وسط أستراليا/توقيت وسط أست" + + "راليا الرسمي/توقيت وسط أستراليا الصيفي)توقيت غرب وسط أستراليا6توقيت غرب" + + " وسط أستراليا الرسمي6توقيت غرب وسط أستراليا الصيفي\"توقيت شرق أستراليا/ت" + + "وقيت شرق أستراليا الرسمي/توقيت شرق أستراليا الصيفي\"توقيت غرب أستراليا/" + + "توقيت غرب أستراليا الرسمي/توقيت غرب أستراليا الصيفي\x1bتوقيت أذربيجان(ت" + + "وقيت أذربيجان الرسمي(توقيت أذربيجان الصيفي\x15توقيت أزورس\"توقيت أزورس " + + "الرسمي\"توقيت أزورس الصيفي\x1bتوقيت بنغلاديش(توقيت بنغلاديش الرسمي(توقي" + + "ت بنغلاديش الصيفي\x15توقيت بوتان\x19توقيت بوليفيا\x1bتوقيت برازيليا(توق" + + "يت برازيليا الرسمي(توقيت برازيليا الصيفي\x17توقيت بروناي\"توقيت الرأس ا" + + "لأخضر/توقيت الرأس الأخضر الرسمي/توقيت الرأس الأخضر الصيفي\x19توقيت تشام" + + "ورو\x17توقيت تشاتام$توقيت تشاتام الرسمي$توقيت تشاتام الصيفي\x13توقيت شي" + + "لي توقيت شيلي الرسمي توقيت شيلي الصيفي\x15توقيت الصين\"توقيت الصين الرس" + + "مي\"توقيت الصين الصيفي\x1dتوقيت شويبالسان*توقيت شويبالسان الرسمي0التوقي" + + "ت الصيفي لشويبالسان$توقيت جزر الكريسماس\x1cتوقيت جزر كوكوس\x1bتوقيت كول" + + "ومبيا(توقيت كولومبيا الرسمي(توقيت كولومبيا الصيفي\x1aتوقيت جزر كووك'توق" + + "يت جزر كووك الرسمي'توقيت جزر كووك الصيفي\x13توقيت كوبا توقيت كوبا الرسم" + + "ي توقيت كوبا الصيفي\x15توقيت دافيز(توقيت دي مونت دو روفيل$توقيت تيمور ا" + + "لشرقية\x1eتوقيت جزيرة استر+توقيت جزيرة استر الرسمي+توقيت جزيرة استر الص" + + "يفي\x1dتوقيت الإكوادور\x1eتوقيت وسط أوروبا+توقيت وسط أوروبا الرسمي+توقي" + + "ت وسط أوروبا الصيفي\x1eتوقيت شرق أوروبا+توقيت شرق أوروبا الرسمي+توقيت ش" + + "رق أوروبا الصيفي5التوقيت الأوروبي (أكثر شرقًا)\x1eتوقيت غرب أوروبا+توقي" + + "ت غرب أوروبا الرسمي+توقيت غرب أوروبا الصيفي توقيت جزر فوكلاند-توقيت جزر" + + " فوكلاند الرسمي-توقيت جزر فوكلاند الصيفي\x13توقيت فيجي توقيت فيجي الرسمي" + + " توقيت فيجي الصيفي(توقيت غايانا الفرنسيةZتوقيت المقاطعات الفرنسية الجنوب" + + "ية والأنتارتيكية\x1bتوقيت غلاباغوس\x17توقيت جامبير\x17توقيت جورجيا$توقي" + + "ت جورجيا الرسمي$توقيت جورجيا الصيفي\x1eتوقيت جزر جيلبرت\x17توقيت غرينتش" + + "\"توقيت شرق غرينلاند/توقيت شرق غرينلاند الرسمي/توقيت شرق غرينلاند الصيفي" + + "\"توقيت غرب غرينلاند/توقيت غرب غرينلاند الرسمي/توقيت غرب غرينلاند الصيفي" + + "\x13توقيت غوام\x17توقيت الخليج\x15توقيت غيانا$توقيت هاواي ألوتيان1توقيت " + + "هاواي ألوتيان الرسمي1توقيت هاواي ألوتيان الصيفي\x1cتوقيت هونغ كونغ)توقي" + + "ت هونغ كونغ الرسمي)توقيت هونغ كونغ الصيفي\x13توقيت هوفد توقيت هوفد الرس" + + "مي توقيت هوفد الصيفي\x15توقيت الهند$توقيت المحيط الهندي$توقيت الهند الص" + + "ينية$توقيت وسط إندونيسيا$توقيت شرق إندونيسيا$توقيت غرب إندونيسيا\x15توق" + + "يت إيران\"توقيت إيران الرسمي\"توقيت إيران الصيفي\x19توقيت إركوتسك&توقيت" + + " إركوتسك الرسمي&توقيت إركوتسك الصيفي\x19توقيت إسرائيل&توقيت إسرائيل الرس" + + "مي&توقيت إسرائيل الصيفي\x19توقيت اليابان&توقيت اليابان الرسمي&توقيت الي" + + "ابان الصيفي\x1bتوقيت كامشاتكا:توقيت بيتروبافلوفسك-كامتشاتسكيGتوقيت بيتر" + + "وبافلوفسك-كامتشاتسكي الصيفي$توقيت شرق كازاخستان$توقيت غرب كازاخستان\x15" + + "توقيت كوريا\"توقيت كوريا الرسمي\"توقيت كوريا الصيفي\x15توقيت كوسرا!توقي" + + "ت كراسنويارسك.توقيت كراسنويارسك الرسمي4التوقيت الصيفي لكراسنويارسك\x1fت" + + "وقيت قيرغيزستان\x1aتوقيت جزر لاين\x1aتوقيت لورد هاو'توقيت لورد هاو الرس" + + "مي-التوقيت الصيفي للورد هاو\x19توقيت ماكواري\x19توقيت ماغادان&توقيت ماغ" + + "ادان الرسمي&توقيت ماغادان الصيفي\x19توقيت ماليزيا\x1dتوقيت الـمالديف" + + "\x1bتوقيت ماركيساس\x1eتوقيت جزر مارشال\x1bتوقيت موريشيوس(توقيت موريشيوس " + + "الرسمي(توقيت موريشيوس الصيفي\x17توقيت ماوسون)توقيت شمال غرب المكسيك<الت" + + "وقيت الرسمي لشمال غرب المكسيك<التوقيت الصيفي لشمال غرب المكسيك3توقيت ال" + + "محيط الهادي للمكسيك@توقيت المحيط الهادي الرسمي للمكسيك@توقيت المحيط اله" + + "ادي الصيفي للمكسيك توقيت أولان باتور-توقيت أولان باتور الرسمي-توقيت أول" + + "ان باتور الصيفي\x15توقيت موسكو\"توقيت موسكو الرسمي\"توقيت موسكو الصيفي" + + "\x19توقيت ميانمار\x15توقيت ناورو\x15توقيت نيبال,توقيت كاليدونيا الجديدة9" + + "توقيت كاليدونيا الجديدة الرسمي9توقيت كاليدونيا الجديدة الصيفي\x1dتوقيت " + + "نيوزيلندا*توقيت نيوزيلندا الرسمي*توقيت نيوزيلندا الصيفي#توقيت نيوفاوندل" + + "اند0توقيت نيوفاوندلاند الرسمي0توقيت نيوفاوندلاند الصيفي\x13توقيت نيوي$ت" + + "وقيت جزيرة نورفولك/توقيت فيرناندو دي نورونها:توقيت فرناندو دي نورونها ا" + + "لرسمي:توقيت فرناندو دي نورونها الصيفي1توقيت جزر ماريانا الشمالية!توقيت " + + "نوفوسيبيرسك.توقيت نوفوسيبيرسك الرسمي.توقيت نوفوسيبيرسك الصيفي\x15توقيت " + + "أومسك\"توقيت أومسك الرسمي\"توقيت أومسك الصيفي\x19توقيت باكستان&توقيت با" + + "كستان الرسمي&توقيت باكستان الصيفي\x15توقيت بالاو/توقيت بابوا غينيا الجد" + + "يدة\x1bتوقيت باراغواي(توقيت باراغواي الرسمي(توقيت باراغواي الصيفي\x13تو" + + "قيت بيرو توقيت بيرو الرسمي توقيت بيرو الصيفي\x1bتوقيت الفيلبين(توقيت ال" + + "فيلبين الرسمي(توقيت الفيلبين الصيفي\x1cتوقيت جزر فينكس-توقيت سانت بيير " + + "وميكولون:توقيت سانت بيير وميكولون الرسمي:توقيت سانت بيير وميكولون الصيف" + + "ي\x19توقيت بيتكيرن\x17توقيت بونابي\x1eتوقيت بيونغ يانغ\x19توقيت ريونيون" + + "\x17توقيت روثيرا\x19توقيت ساخالين&توقيت ساخالين الرسمي&توقيت ساخالين الص" + + "يفي\x17توقيت سامارا\x15توقيت سمارا\"توقيت سمارا الصيفي\x15توقيت ساموا\"" + + "توقيت ساموا الرسمي\"توقيت ساموا الصيفي\x13توقيت سيشل\x1bتوقيت سنغافورة" + + "\x1eتوقيت جزر سليمان توقيت جنوب جورجيا\x19توقيت سورينام\x17توقيت سايووا" + + "\x17توقيت تاهيتي\x17توقيت تايبيه$توقيت تايبيه الرسمي$توقيت تايبيه الصيفي" + + "\x1bتوقيت طاجكستان\x19توقيت توكيلاو\x15توقيت تونغا\"توقيت تونغا الرسمي\"" + + "توقيت تونغا الصيفي\x11توقيت شوك\x1fتوقيت تركمانستان,توقيت تركمانستان ال" + + "رسمي,توقيت تركمانستان الصيفي\x17توقيت توفالو\x1bتوقيت أوروغواي(توقيت أو" + + "روغواي الرسمي(توقيت أوروغواي الصيفي\x1dتوقيت أوزبكستان*توقيت أوزبكستان " + + "الرسمي*توقيت أوزبكستان الصيفي\x19توقيت فانواتو&توقيت فانواتو الرسمي&توق" + + "يت فانواتو الصيفي\x19توقيت فنزويلا!توقيت فلاديفوستوك.توقيت فلاديفوستوك " + + "الرسمي.توقيت فلاديفوستوك الصيفي\x1dتوقيت فولغوغراد*توقيت فولغوغراد الرس" + + "مي*توقيت فولغوغراد الصيفي\x17توقيت فوستوك\x1cتوقيت جزيرة ويك%توقيت والي" + + "س و فوتونا\x19توقيت ياكوتسك&توقيت ياكوتسك الرسمي&توقيت ياكوتسك الصيفي!ت" + + "وقيت يكاترينبورغ.توقيت يكاترينبورغ الرسمي.توقيت يكاترينبورغ الصيفي" + +var bucket5 string = "" + // Size: 20620 bytes + "\x0aجانفي\x0aفيفري\x08مارس\x0aأفريل\x06ماي\x08جوان\x0cجويلية\x06أوت\x0cس" + + "بتمبر\x0cأكتوبر\x0cنوفمبر\x0cديسمبر\x0cH:mm:ss zzzz\x09H:mm:ss z\x07H:m" + + "m:ss\x04H:mm\x17كانون الثاني\x08شباط\x08آذار\x0aنيسان\x08أيار\x0cحزيران" + + "\x08تموز\x04آب\x0aأيلول\x16تشرين\u00a0الأول\x17تشرين الثاني\x15كانون الأ" + + "ول\x15تشرين الأول\x08مارس\x06ماي\x0cأكتوبر\x0cنوفمبر\x0cজানু\x12ফেব্ৰু" + + "\x0fমাৰ্চ\x12এপ্ৰিল\x09মে’\x09জুন\x0fজুলাই\x06আগ\x12ছেপ্তে\x0fঅক্টো\x09ন" + + "ৱে\x0cডিচে\x03জ\x03ফ\x03ম\x03এ\x03আ\x03ছ\x03অ\x03ন\x03ড\x18জানুৱাৰী" + + "\x1eফেব্ৰুৱাৰী\x0fআগষ্ট\x1eছেপ্তেম্বৰ\x15অক্টোবৰ\x15নৱেম্বৰ\x18ডিচেম্বৰ" + + "\x09দেও\x09সোম\x0fমঙ্গল\x09বুধ\x09বৃহ\x0fশুক্ৰ\x09শনি\x03দ\x03স\x03ব\x03" + + "শ\x12দেওবাৰ\x12সোমবাৰ\x18মঙ্গলবাৰ\x12বুধবাৰ!বৃহস্পতিবাৰ\x18শুক্ৰবাৰ" + + "\x12শনিবাৰ\x07তি1\x07তি2\x07তি3\x07তি4\x1fপ্ৰথম প্ৰহৰ(দ্বিতীয় প্ৰহৰ\"তৃ" + + "তীয় প্ৰহৰ\"চতুৰ্থ প্ৰহৰ%প্ৰথম তিনিমাহ.দ্বিতীয় তিনিমাহ(তৃতীয় তিনিমাহ" + + "(চতুৰ্থ তিনিমাহ\x1bপূৰ্বাহ্ণ\x15অপৰাহ্ণ$খ্ৰীষ্টপূৰ্ব!খ্ৰীষ্টাব্দ\x14খ্ৰী" + + ".পূ.\x11খ্ৰী.দ.\x15খ্ৰীঃদঃ\x0fEEEE, d MMMM, y\x09d MMMM, y\x07dd-MM-y" + + "\x05d-M-y\x0eh.mm.ss a zzzz\x0bh.mm.ss a z\x09h.mm.ss a\x07h.mm. a\x09যু" + + "গ\x09বছৰ\x16যোৱা বছৰ\x10এই বছৰ\x13অহা বছৰ\x10{0} বছৰত#{0} বছৰৰ পূৰ্বে" + + "\x16তিনি মাহ#যোৱা তিনি মাহ\x1dএই তিনি মাহ অহা তিনি মাহ\x1d{0} তিনি মাহত-" + + "{0} তিনি মাহ পূৰ্বে\x09মাহ\x16যোৱা মাহ\x10এই মাহ\x13অহা মাহ\x10{0} মাহত " + + "{0} মাহ পূৰ্বে\x12সপ্তাহ\x1fযোৱা সপ্তাহ\x19এই সপ্তাহ\x1cঅহা সপ্তাহ\x19{0" + + "} সপ্তাহত){0} সপ্তাহ পূৰ্বে\x19{0}ৰ সপ্তাহ\x1fমাহৰ সপ্তাহ\x09দিন\x0cপৰহি" + + "\x0cকালি\x09আজি\x0fকাইলৈ\x12পৰহিলৈ\x10{0} দিনত {0} দিন পূৰ্বে\x16বছৰৰ দি" + + "ন\x1fসপ্তাহৰ দিন,মাহৰ সপ্তাহৰ দিন\x1fযোৱা দেওবাৰ\x19এই দেওবাৰ\x1cঅহা দ" + + "েওবাৰ\x19{0} দেওবাৰে,{0} দেওবাৰৰ পূৰ্বে\x1fযোৱা সোমবাৰ\x19এই সোমবাৰ" + + "\x1cঅহা সোমবাৰ\x19{0} সোমবাৰে,{0} সোমবাৰৰ পূৰ্বে\x16যোৱা সোম\x10এই সোম" + + "\x13অহা সোম\x10{0} সোমে#{0} সোমৰ পূৰ্বে%যোৱা মঙ্গলবাৰ\x1fএই মঙ্গলবাৰ\"অহ" + + "া মঙ্গলবাৰ\x1f{0} মঙ্গলবাৰে2{0} মঙ্গলবাৰৰ পূৰ্বে\x1cযোৱা মঙ্গল\x16এই ম" + + "ঙ্গল\x19অহা মঙ্গল\x16{0} মঙ্গলে){0} মঙ্গলৰ পূৰ্বে\x1fযোৱা বুধবাৰ\x19এই" + + " বুধবাৰ\x1cঅহা বুধবাৰ\x19{0} বুধবাৰে,{0} বুধবাৰৰ পূৰ্বে\x16যোৱা বুধ\x10এ" + + "ই বুধ\x13অহা বুধ\x10{0} বুধে#{0} বুধৰ পূৰ্বে.যোৱা বৃহস্পতিবাৰ(এই বৃহস্" + + "পতিবাৰ+অহা বৃহস্পতিবাৰ({0} বৃহস্পতিবাৰে;{0} বৃহস্পতিবাৰৰ পূৰ্বে%যোৱা ব" + + "ৃহস্পতি\x1fএই বৃহস্পতি\"অহা বৃহস্পতি%{0} বৃহস্পতিয়ে2{0} বৃহস্পতিৰ পূৰ" + + "্বে%যোৱা শুক্ৰবাৰ\x1fএই শুক্ৰবাৰ\"অহা শুক্ৰবাৰ\x1f{0} শুক্ৰবাৰে2{0} শু" + + "ক্ৰবাৰৰ পূৰ্বে\x1cযোৱা শুক্ৰ\x16এই শুক্ৰ\x19অহা শুক্ৰ\x16{0} শুকুৰে){0" + + "} শুক্ৰৰ পূৰ্বে\x1fযোৱা শনিবাৰ\x19এই শনিবাৰ\x1cঅহা শনিবাৰ\x19{0} শনিবাৰে" + + ",{0} শনিবাৰৰ পূৰ্বে\x16যোৱা শনি\x10এই শনি\x13অহা শনি\x16{0} শনিয়ে#{0} শ" + + "নিৰ পূৰ্বে1পূৰ্বাহ্ণ/অপৰাহ্ণ\x0fঘণ্টা\x1fএইটো ঘণ্টাত\x16{0} ঘণ্টাত&{0}" + + " ঘণ্টা পূৰ্বে\x0fমিনিট\x1fএইটো মিনিটত\x16{0} মিনিটত&{0} মিনিট পূৰ্বে\x15" + + "ছেকেণ্ড\x12এতিয়া\x1c{0} ছেকেণ্ডত,{0} ছেকেণ্ড পূৰ্বে\x15ক্ষেত্ৰ>সমন্বি" + + "ত সাৰ্বজনীন সময়Gব্ৰিটিচ গ্ৰীষ্মকালীন সময়&আইৰিচ মান সময়.আফগানিস্তান " + + "সময়/মধ্য আফ্রিকা সময়2পূর্ব আফ্রিকা সময়?দক্ষিণ আফ্রিকা মান সময়5পশ্চ" + + "িম আফ্রিকা সময়Bপশ্চিম আফ্রিকার মান সময়]পশ্চিম আফ্রিকার গ্রীষ্মকালীন " + + "সময়\x1cআমজান সময়&আমজান মান সময়8আমজান গ্রীষ্মের সময়\x1fআপিয়া সময়G" + + "আপিয়া স্ট্যান্ডার্ড টাইম2আপিয়া ডেলাইট টাইম\x1fআরবীয় সময়)আরবীয় মান" + + " সময়,আরবীয় দিনের আলো.আৰ্জেণ্টিনা সময়8আৰ্জেণ্টিনা মান সময়Dআৰ্জেণ্টিনা" + + " গ্ৰীষ্ম সময়Pওয়েস্টার্ন আর্জেন্টিনা সময়Zওয়েস্টার্ন আর্জেন্টিনা মান স" + + "ময়uওয়েস্টার্ন আর্জেন্টিনা গ্রীষ্মকালীন সময়+আর্মেনিয়া টাইমSআর্মেনিয" + + "়া স্ট্যান্ডার্ড টাইমPআর্মেনিয়া গ্রীষ্মকালীন সময়Pকেন্দ্রীয় অস্ট্রেল" + + "িয়া সময়{অস্ট্রেলিয়ান কেন্দ্রীয় স্ট্যান্ডার্ড টাইমiঅস্ট্রেলিয়ান কে" + + "ন্দ্রীয় দিবালোক সময়rঅস্ট্রেলিয়ান সেন্ট্রাল ওয়েস্টার্ন টাইম\x9aঅস্ট" + + "্রেলিয়ান সেন্ট্রাল ওয়েস্টার্ন স্ট্যান্ডার্ড টাইম\x85অস্ট্রেলিয়ান সে" + + "ন্ট্রাল ওয়েস্টার্ন ডেলাইট টাইমAপূর্ব অস্ট্রেলিয়া সময়uঅস্ট্রেলিয়ান " + + "ইস্টার্ন স্ট্যান্ডার্ড টাইমZঅস্ট্রেলিয়ান পূর্ব দিবালোক সময়Sওয়েস্টার" + + "্ন অস্ট্রেলিয়া টাইম~অস্ট্রেলিয়ান ওয়েস্টার্ন স্ট্যান্ডার্ড টাইমiঅস্ট" + + "্রেলিয়ান ওয়েস্টার্ন ডেলাইট টাইম+আজারবাইজান সময়Sআজারবাইজান স্ট্যান্ড" + + "ার্ড টাইমPআজারবাইজান গ্রীষ্মকালীন সময়\x13Azores সময়\x1dAzores মান সম" + + "য়/Azores গ্রীষ্মের সময়%বাংলাদেশ সময়Mবাংলাদেশ স্ট্যান্ডার্ড টাইমJবাং" + + "লাদেশ গ্রীষ্মকালীন সময়\x1cভুটান টাইম%বলিভিয়া সময়.ব্ৰাছিলিয়া সময়8ব" + + "্ৰাছিলিয়া মান সময়Dব্ৰাছিলিয়া গ্ৰীষ্ম সময়Aব্রুনেই দারুসসালাম সময়)ক" + + "েপ ভার্দে সময়Tকেপ ওয়ার্ড স্ট্যান্ডার্ড টাইমNকেপ ভার্দে গ্রীষ্মকালীন " + + "সময়Gচামেরো স্ট্যান্ডার্ড টাইম\"চ্যাথাম টাইমJচ্যাথাম স্ট্যান্ডার্ড টাই" + + "ম8চ্যাথাম ডেইলাইট টাইম\x19চিলি সময়Aচিলি স্ট্যান্ডার্ড টাইম>চিলি গ্রীষ" + + "্মকালীন সময়\x16চীন সময়>চীন স্ট্যান্ডার্ড টাইম,চীন ডেইলাইট টাইম(চিব্ব" + + "ালান টাইমMচিব্বলসন স্ট্যান্ডার্ড টাইমJচিব্বলসন গ্রীষ্মকালীন সময়Aক্রিস" + + "মাস আইল্যান্ড সময়;কোকোস দ্বীপপুঞ্জ সময়(কলম্বিয়া সময়2কলম্বিয়া মান " + + "সময়>কলম্বিয়া গ্ৰীষ্ম সময়5কুক দ্বীপপুঞ্জ সময়]কুক দ্বীপপুঞ্জ স্ট্যান" + + "্ডার্ড টাইমdকুক দ্বীপপুঞ্জ হাফ গ্রীষ্মকালীন সময়\x1cডেভিস টাইমDডামমন্ট" + + "-ডি‘উরিভ্যাল টাইম,পূর্ব তিমুর সময়/ইষ্টাৰ দ্বীপ সময়9ইষ্টাৰ দ্বীপ মান সম" + + "য়Eইষ্টাৰ দ্বীপ গ্ৰীষ্ম সময়\"ইকুৱেডৰ সময়Dকেন্দ্রীয় ইউরোপীয় সময়lকে" + + "ন্দ্রীয় ইউরোপীয় স্ট্যান্ডার্ড টাইমWমধ্য ইউরোপীয় গ্রীষ্মকালীন সময়5প" + + "ূর্ব ইউরোপীয় সময়?পূর্ব ইউরোপীয় মান সময়Zপূর্ব ইউরোপীয় গ্রীষ্মকালীন" + + " সময়?আরও পূর্ব ইউরোপীয় সময়8পশ্চিম ইউরোপীয় সময়Bপশ্চিম ইউরোপীয় মান স" + + "ময়]পশ্চিম ইউরোপীয় গ্রীষ্মকালীন সময়Gফকল্যান্ড দ্বীপপুঞ্জ সময়`ফকল্যা" + + "ন্ড দ্বীপ স্ট্যান্ডার্ড টাইমlফকল্যান্ড দ্বীপপুঞ্জ গ্রীষ্মকালীন সময়" + + "\x19ফিজি সময়Aফিজি স্ট্যান্ডার্ড টাইম>ফিজি গ্রীষ্মকালীন সময়2ফরাসি গায়া" + + "না সময়^ফরাসি দক্ষিণ ও অ্যান্টার্কটিক সময়(গালাপাগোস টাইম\"গাম্বুর সময" + + "়%জর্জিয়া টাইমMজর্জিয়া স্ট্যান্ডার্ড টাইমJজর্জিয়া গ্রীষ্মকালীন সময়" + + "Dগিলবার্ট দ্বীপপুঞ্জ সময়\x1fমক্কার সময়Pউপসাগরীয় স্ট্যান্ডার্ড টাইম\"গ" + + "ায়ানা টাইম\x19হংকং সময়Aহংকং স্ট্যান্ডার্ড টাইম>হংকং গ্রীষ্মকালীন সময" + + "়\x16হওড টাইমAহোভড স্ট্যান্ডার্ড টাইম>হওগড গ্রীষ্মকালীন সময়\"ভাৰতীয় " + + "সময়/ভারত মহাসাগর সময়(ইন্দোচীনা টাইম>মধ্য ইন্দোনেশিয়া সময়Jইস্টার্ন " + + "ইন্দোনেশিয়া সময়Sওয়েস্টার্ন ইন্দোনেশিয়া সময়\x19ইরান সময়Aইরান স্ট্" + + "যান্ডার্ড টাইম/ইরান দিবালোক সময়+ইর্কুক্স্ক সময়Pইঙ্কুক্টক স্ট্যান্ডার" + + "্ড টাইমMইর্কুষস্ক গ্রীষ্মকালীন সময়(ইস্রায়েল সময়Pইস্রায়েল স্ট্যান্ড" + + "ার্ড টাইম>ইস্রায়েল দিবালোক সময়\x1cজাপান সময়Dজাপান স্ট্যান্ডার্ড টাই" + + "ম<জাপান দিনের হালকা সময়;পূর্ব কাজাখস্তান সময়;পশ্চিম কাসাবালান সময়%ক" + + "োরিয়ান সময়Mকোরিয়ান স্ট্যান্ডার্ড টাইম2কোরিয়ান দিনের আলো\x1cকোসরা ট" + + "াইম@ক্রোশোয়েয়ার্স্ক টাইমDক্রোশনোয়ার্স্ক মান সময়bক্রোয়েশোয়ারস্ক গ" + + "্রীষ্মকালীন সময়8লাইন দ্বীপপুঞ্জ সময়&লর্ড হাভী সময়Nলর্ড হাভী স্ট্যান" + + "্ডার্ড টাইমBলর্ড হ্যালো দিবালোক সময়Dম্যাককুরি আইল্যান্ড টাইম(ম্যাগাদা" + + "ন টাইম2ম্যাগাদান মান সময়Mম্যাগাদান গ্রীষ্মকালীন সময়.মালয়েশিয়া সময়" + + "+মালদ্বীপের সময়%মারকাসাস সময়Aমার্শাল দ্বীপপুঞ্জ সময়\x15Mauritus সময় " + + "Mauritius মান সময়;Mauritius গ্রীষ্মকালীন সময়\x19মোসন টাইম(উলানবাটার টা" + + "ইম2উলানবাটার মান সময়Mউলানবাটার গ্রীষ্মকালীন সময়\x1cমস্কো সময়Dমস্কো " + + "স্ট্যান্ডার্ড টাইমAমস্কো গ্রীষ্মকালীন সময়(মায়ানমার টাইম\x1cনাউরু টাই" + + "ম\x1cনেপাল সময়>নিউ ক্যালেডোনিয়া সময়fনিউ ক্যালেডোনিয়া স্ট্যান্ডার্ড" + + " টাইমcনিউ ক্যালেডোনিয়া গ্রীষ্মকালীন সময়1নিউজিল্যান্ড সময়Yনিউজিল্যান্ড" + + " স্ট্যান্ডার্ড টাইমDনিউজিল্যান্ড ডেলাইট টাইম\x1fনিউইয় টাইম,নরফোক দ্বীপ " + + "সময়>ফাৰ্নাণ্ডো ডি নোৰোন্বাUফাৰ্নাণ্ডো ডি নোৰোন্বা মান সময়aফাৰ্নাণ্ডো" + + " ডি নোৰোন্বা গ্ৰীষ্ম সময়1নোভোসিবিরস্ক সময়Yনোভোসিবিরস্ক স্ট্যান্ডার্ড ট" + + "াইমVনোভোসিবিরস্ক গ্রীষ্মকালীন সময়\x11Omsk সময়!Omsk আদর্শ সময়6Omsk গ" + + "্রীষ্মকালীন সময়(পাকিস্তান টাইমPপাকিস্তান স্ট্যান্ডার্ড টাইমMপাকিস্তান" + + " গ্রীষ্মকালীন সময়\x1cপালাউ সময়9পাপুয়া নিউ গিনি সময়%পাৰাগুৱে সময়/পাৰ" + + "াগুৱে মান সময়;পাৰাগুৱে গ্ৰীষ্ম সময়\x19পেরু সময়#পেরু মান সময়>পেরু গ" + + "্রীষ্মকালীন সময়%ফিলিপাইন টাইমMফিলিপাইন স্ট্যান্ডার্ড টাইমJফিলিপাইন গ্" + + "রীষ্মকালীন সময়Aফিনিক্স দ্বীপপুঞ্জ সময়(পিটারকনার টাইম\x19পনাপ সময়(পি" + + "য়ংইয়ং টাইম+রিয়ানিয়ন টাইম\x1fরোথেরা টাইম\"সাখালিন টাইম,সাখালিন মান " + + "টাইম>সাখালিন গ্রীষ্মের সময়\"সামোয়া সময়Jসামোয়া স্ট্যান্ডার্ড টাইম5স" + + "ামোয়া ডেলাইট সময়\x1fসেশেলস সময়Pসিঙ্গাপুর স্ট্যান্ডার্ড টাইম;সলোমন দ" + + "্বীপপুঞ্জ সময়8দক্ষিণ জর্জিয়া টাইম\"সুরিনাম টাইম\x12Syowa টাইম\x1fতাহ" + + "িতি টাইম\x1cতাইপে সময়Dতাইপে স্ট্যান্ডার্ড টাইম<তাইপে দিনের হালকা সময়" + + ".তাজিকিস্তান টাইম\"টোকেলাউ সময়\x1fটোঙ্গা টাইমGটোঙ্গা স্ট্যান্ডার্ড টাইম" + + "Aটঙ্গা গ্রীষ্মকালীন সময়\x19চুুক টাইম7তুর্কমেনিস্তান সময়Aতুর্কমেনিস্তান" + + " মান সময়Mতুর্কমেনিস্তান গ্রীষ্ম সময়\x1fটুভালু সময়\"উৰুগুৱে সময়,উৰুগু" + + "ৱে মান সময়8উৰুগুৱে গ্ৰীষ্ম সময়.উজবেকিস্তান সময়8উজবেকিস্তান মান সময়" + + "Jউজবেকিস্তান গ্রীষ্মের সময়(ভানুয়াতু সময়Pভানুয়াতু স্ট্যান্ডার্ড টাইমM" + + "ভানুয়াতু গ্রীষ্মকালীন সময়.ভেনিজুয়েলা সময়.ভ্লাদভোস্টক টাইমYভ্লাদভোস" + + "্টোক স্ট্যান্ডার্ড টাইম>ভ্লাদভোস্টক সামার সময়(ভলগোগ্রাদ টাইম5ভোলগোগ্র" + + "াদ মান সময়Mভলগোগ্রেড গ্রীষ্মকালীন সময়\"ভোস্টোক টাইম8ওয়াক আইল্যান্ড " + + "টাইম9ওয়ালিস ও ফুটুনা সময়\x14Yakutsk সময়\x1eYakutsk মান সময়0Yakutsk" + + " গ্রীষ্মের সময়=ইয়েকাতেরিনবার্গ সময়eইয়েকাতেরিনবার্গ স্ট্যান্ডার্ড সময" + + "়bইয়েকাতেরিনবার্গ গ্রীষ্মকালীন সময়\x09ফেব\x0fমার্চ\x12এপ্রিল\x06মে" + + "\x0fআগস্ট\x1eসেপ্টেম্বর\x15অক্টোবর\x15নভেম্বর\x18ডিসেম্বর" + +var bucket6 string = "" + // Size: 17853 bytes + "\x0cভা. স.\x10EEEE, d MMMM y G\x03Jan\x03Feb\x03Mac\x03Apr\x03Mei\x03Jun" + + "\x03Jul\x03Ago\x03Sep\x03Okt\x03Nov\x03Dec\x07Januari\x08Februari\x05Mac" + + "hi\x06Aprili\x04Juni\x05Julai\x06Agosti\x08Septemba\x06Oktoba\x07Novemba" + + "\x07Desemba\x03Jpi\x03Jtt\x03Jnn\x03Jtn\x03Alh\x03Ijm\x03Jmo\x08Jumapili" + + "\x08Jumatatu\x07Jumanne\x08Jumatano\x08Alhamisi\x06Ijumaa\x08Jumamosi" + + "\x02R1\x02R2\x02R3\x02R4\x06Robo 1\x06Robo 2\x06Robo 3\x06Robo 4\x09iche" + + "heavo\x08ichamthi\x11Kabla yakwe Yethu\x11Baada yakwe Yethu\x02KM\x02BM" + + "\x0eEEEE, d MMMM y\x04Edhi\x05Mwaka\x05Mweji\x06Ndisha\x05Thiku\x05Ighuo" + + "\x04Iyoo\x04Yavo\x0fThiku ya ndisha\x0eMarango athiku\x04Thaa\x06Dakika" + + "\x08Thekunde\x0cMajira Athaa\x0bera budista\x02EB\x16EEEE, dd MMMM 'de' " + + "y G\x0fd MMMM 'de' y G\x0cd/M/yy GGGGG\x11{1} 'a' 'les' {0}\x08{1}, {0}" + + "\x05mes 1\x05mes 2\x05mes 3\x05mes 4\x05mes 5\x05mes 6\x05mes 7\x05mes 8" + + "\x05mes 9\x06mes 10\x06mes 11\x06mes 12\x05Mes 1\x05Mes 2\x05Mes 3\x05Me" + + "s 4\x05Mes 5\x05Mes 6\x05Mes 7\x05Mes 8\x05Mes 9\x06Mes 10\x06Mes 11\x06" + + "Mes 12\x07{0} bis\x04ratu\x04güe\x05tigre\x06conexu\x07dragón\x07culebra" + + "\x07caballu\x05cabra\x04monu\x05gallu\x05perru\x05gochu\x13ratu de mader" + + "a yang\x12güe de madera yin\x12tigre de fueu yang\x12conexu de fueu yin" + + "\x16dragón de tierra yang\x15culebra de tierra yin\x15caballu de metal y" + + "ang\x12cabra de metal yin\x12monu d’agua yang\x12gallu d’agua yin\x14per" + + "ru de madera yang\x13gochu de madera yin\x11ratu de fueu yang\x10güe de " + + "fueu yin\x14tigre de tierra yang\x14conexu de tierra yin\x15dragón de me" + + "tal yang\x14culebra de metal yin\x15caballu d’agua yang\x12cabra d’agua " + + "yin\x13monu de madera yang\x13gallu de madera yin\x12perru de fueu yang" + + "\x11gochu de fueu yin\x13ratu de tierra yang\x12güe de tierra yin\x13tig" + + "re de metal yang\x13conexu de metal yin\x15dragón d’agua yang\x14culebra" + + " d’agua yin\x16caballu de madera yang\x13cabra de madera yin\x11monu de " + + "fueu yang\x11gallu de fueu yin\x14perru de tierra yang\x13gochu de tierr" + + "a yin\x12ratu de metal yang\x11güe de metal yin\x13tigre d’agua yang\x13" + + "conexu d’agua yin\x16dragón de madera yang\x15culebra de madera yin\x14c" + + "aballu de fueu yang\x11cabra de fueu yin\x13monu de tierra yang\x13gallu" + + " de tierra yin\x13perru de metal yang\x12gochu de metal yin\x12rata d’ag" + + "ua yang\x11güe d’agua yin\x14tigre de madera yang\x14conexu de madera yi" + + "n\x14dragón de fueu yang\x13culebra de fueu yin\x16caballu de tierra yan" + + "g\x13cabra de tierra yin\x12monu de metal yang\x12gallu de metal yin\x13" + + "perru d’agua yang\x12gochu d’agua yin\x16principia la primavera\x0eagua " + + "de lluvia\x18esconsoñen los inseutos\x17equinocciu de primavera\x11brill" + + "ante y claro\x10lluvia del granu\x13principia’l branu\x0egranu completu" + + "\x10granu n’espiga\x12solsticiu braniegu\x0epequeña calor\x0agran calor" + + "\x14principia la seronda\x0ffin de la calor\x0drosada blanca\x15equinocc" + + "iu serondiegu\x0crosada fría\x11descende’l xelu\x15principia l’iviernu" + + "\x0epequeña ñeve\x0agran ñeve\x15solsticiu d’iviernu\x0epequeñu fríu\x0a" + + "gran fríu\x03rat\x03tig\x03con\x03dra\x03cul\x03cbl\x03cbr\x03mon\x03gal" + + "\x03per\x03gch\x04Ratu\x04Güe\x05Tigre\x06Conexu\x07Dragón\x07Culebra" + + "\x07Caballu\x05Cabra\x04Monu\x05Gallu\x05Perru\x05Gochu\x03mes\x03tek" + + "\x03hed\x03tah\x03ter\x03yek\x03meg\x03mia\x03gen\x03sen\x03ham\x03neh" + + "\x03pag\x0bde meskerem\x09de tekemt\x09d’hedar\x09de tahsas\x06de ter" + + "\x0ade yekatit\x0ade megabit\x09de miazia\x09de genbot\x07de sene\x09d’h" + + "amle\x0ade nehasse\x0ade pagumen\x18antes de la Encarnación\x1bdespués d" + + "e la Encarnación\x05a. E.\x05d. E.\x02aE\x02dE\x03xin\x03feb\x03mar\x03a" + + "br\x03may\x03xun\x03xnt\x03ago\x03set\x03och\x03pay\x03avi\x01X\x01F\x01" + + "M\x01A\x01S\x01O\x01P\x09de xineru\x0ade febreru\x08de marzu\x09d’abril" + + "\x07de mayu\x07de xunu\x09de xunetu\x0ad’agostu\x0cde setiembre\x0bd’och" + + "obre\x0ade payares\x0bd’avientu\x03Xin\x03Mar\x03Abr\x03May\x03Xun\x03Xn" + + "t\x03Set\x03Och\x03Pay\x03Avi\x06xineru\x07febreru\x05marzu\x05abril\x04" + + "mayu\x04xunu\x06xunetu\x06agostu\x09setiembre\x07ochobre\x07payares\x07a" + + "vientu\x03dom\x03llu\x04mié\x03xue\x03vie\x04sáb\x02do\x02ll\x02ma\x02mi" + + "\x02xu\x02vi\x03sá\x07domingu\x06llunes\x06martes\x0amiércoles\x06xueves" + + "\x07vienres\x07sábadu\x021T\x022T\x023T\x024T\x0d1er trimestre\x0c2u tri" + + "mestre\x0d3er trimestre\x0c4u trimestre\x01p\x0dde la mañana\x0bde la ta" + + "rde\x07mañana\x05tarde\x11enantes de Cristu\x1cenantes de la dómina comú" + + "n\x12después de Cristu\x0edómina común\x04e.C.\x03EDC\x04d.C.\x02DC\x13E" + + "EEE, d MMMM 'de' y\x0dd MMMM 'de' y\x06d/M/yy\x0ade Chaitra\x0bde Vaisak" + + "ha\x0bde Jyaistha\x0ad’Asadha\x0ade Sravana\x09de Bhadra\x0ad’Asvina\x0a" + + "de Kartika\x0ed’Agrahayana\x08de Pausa\x08de Magha\x0bde Phalguna\x0bde " + + "Muharram\x08de Safar\x0bde Rabiʻ I\x0cde Rabiʻ II\x0bde Jumada I\x0cde J" + + "umada II\x08de Rajab\x0bde Shaʻban\x0ade Ramadan\x0ade Shawwal\x11de Dhu" + + "ʻl-Qiʻdah\x10de Dhuʻl-Hijjah\x05Taika\x07Hakuchi\x07Hakuhō\x07Shuchō" + + "\x06Taihō\x05Keiun\x05Wadō\x05Reiki\x06Yōrō\x05Jinki\x07Tenpyō\x09T.-kam" + + "pō\x0aT.-shōhō\x08T.-hōji\x08T.-jingo\x08J.-keiun\x05Hōki\x06Ten-ō\x07En" + + "ryaku\x06Daidō\x06Kōnin\x07Tenchō\x05Jōwa\x05Kajō\x05Ninju\x06Saikō\x06T" + + "en-an\x06Jōgan\x07Gangyō\x05Ninna\x07Kanpyō\x07Shōtai\x04Engi\x06Enchō" + + "\x06Jōhei\x07Tengyō\x08Tenryaku\x07Tentoku\x04Ōwa\x06Kōhō\x04Anna\x07Ten" + + "roku\x08Ten’en\x06Jōgen\x06Tengen\x05Eikan\x05Kanna\x04Eien\x04Eiso\x09S" + + "hōryaku\x08Chōtoku\x07Chōhō\x06Kankō\x06Chōwa\x06Kannin\x04Jian\x05Manju" + + "\x07Chōgen\x09Chōryaku\x08Chōkyū\x07Kantoku\x06Eishō\x05Tengi\x06Kōhei" + + "\x07Jiryaku\x06Enkyū\x06Shōho\x0cShōryaku II\x05Eihō\x06Ōtoku\x05Kanji" + + "\x05Kahō\x06Eichō\x07Jōtoku\x05Kōwa\x06Chōji\x06Kashō\x06Tennin\x06Ten-e" + + "i\x06Eikyū\x08Gen’ei\x05Hōan\x05Tenji\x05Daiji\x07Tenshō\x08Chōshō\x05Hō" + + "en\x04Eiji\x05Kōji\x09Ten’yō\x06Kyūan\x06Ninpei\x06Kyūju\x06Hōgen\x05Hei" + + "ji\x07Eiryaku\x04Ōho\x07Chōkan\x05Eiman\x08Nin’an\x04Kaō\x06Shōan\x05Ang" + + "en\x06Jishō\x05Yōwa\x04Juei\x08Genryaku\x05Bunji\x07Kenkyū\x06Shōji\x06K" + + "ennin\x07Genkyū\x08Ken’ei\x09Jōgen II\x08Kenryaku\x06Kenpō\x07Jōkyū\x05J" + + "ōō\x06Gennin\x06Karoku\x05Antei\x05Kanki\x05Jōei\x07Tenpuku\x08Bunryaku" + + "\x05Katei\x08Ryakunin\x07En’ō\x05Ninji\x06Kangen\x05Hōji\x07Kenchō\x06Kō" + + "gen\x06Shōka\x07Shōgen\x08Bun’ō\x07Kōchō\x08Bun’ei\x05Kenji\x05Kōan\x06S" + + "hōō\x05Einin\x09Shōan II\x06Kengen\x05Kagen\x06Tokuji\x06Enkyō\x06Ōchō" + + "\x06Shōwa\x06Bunpō\x05Genō\x06Genkō\x08Shōchū\x07Karyaku\x07Gentoku\x09G" + + "enkō II\x05Kenmu\x05Engen\x07Kōkoku\x07Shōhei\x07Kentoku\x07Bunchū\x05Te" + + "nju\x08Kōryaku\x08Kōwa II\x07Genchū\x07Meitoku\x05Kakei\x05Kōō\x0aMeitok" + + "u II\x04Ōei\x08Shōchō\x06Eikyō\x07Kakitsu\x08Bun’an\x07Hōtoku\x08Kyōtoku" + + "\x07Kōshō\x08Chōroku\x07Kanshō\x07Bunshō\x05Ōnin\x06Bunmei\x08Chōkyō\x06" + + "Entoku\x05Meiō\x05Bunki\x09Eishō II\x05Taiei\x08Kyōroku\x06Tenbun\x08Kōj" + + "i II\x06Eiroku\x05Genki\x0aTenshō II\x07Bunroku\x07Keichō\x05Genna\x08Ka" + + "n’ei\x09Shōho II\x05Keian\x08Jōō II\x07Meireki\x05Manji\x06Kanbun\x05Enp" + + "ō\x05Tenna\x07Jōkyō\x07Genroku\x05Hōei\x08Shōtoku\x07Kyōhō\x06Genbun" + + "\x06Kanpō\x09Enkyō II\x08Kan’en\x07Hōreki\x05Meiwa\x07An’ei\x06Tenmei" + + "\x06Kansei\x06Kyōwa\x05Bunka\x06Bunsei\x06Tenpō\x05Kōka\x04Kaei\x05Ansei" + + "\x08Man’en\x07Bunkyū\x05Genji\x05Keiō\x05Meiji\x07Taishō\x09e. Shōwa\x06" + + "Heisei\x09T. kampō\x0aT. shōhō\x08T. hōji\x08T. jingo\x12antes de la R.D" + + ".C.\x06Minguo\x08A.R.D.C.\x04añu\x0fl’añu pasáu\x09esti añu\x11l’añu vin" + + "iente\x0ben {0} añu\x0cen {0} años\x0chai {0} añu\x0dhai {0} años\x0dl’a" + + "ñu pas.\x0dl’añu vin.\x09añu pas.\x09añu vin.\x09en {0} a.\x0ahai {0} a" + + ".\x09trimestre\x12trimestre anterior\x0eesti trimestre\x12trimestre vini" + + "ente\x10en {0} trimestre\x11en {0} trimestres\x11hai {0} trimestre\x12ha" + + "i {0} trimestres\x04tri.\x0atrim. ant.\x0aesti trim.\x0atrim. vin.\x0cen" + + " {0} trim.\x0dhai {0} trim.\x0aen {0} tr.\x0bhai {0} tr.\x0del mes pasáu" + + "\x08esti mes\x0fel mes viniente\x0aen {0} mes\x0cen {0} meses\x0bhai {0}" + + " mes\x0dhai {0} meses\x08mes pas.\x08mes vin.\x09en {0} m.\x0ahai {0} m." + + "\x07selmana\x11la selmana pasada\x0cesta selmana\x13la selmana viniente" + + "\x0een {0} selmana\x0fen {0} selmanes\x0fhai {0} selmana\x10hai {0} selm" + + "anes\x12la selmana del {0}\x04sel.\x0cselm. pasada\x0aesta selm.\x0eselm" + + ". viniente\x0cen {0} selm.\x0dhai {0} selm.\x0aselm. pas.\x0aselm. vin." + + "\x0aen {0} se.\x0bhai {0} se.\x04día\x08antayeri\x05ayeri\x05güei\x0dpas" + + "ao mañana\x0ben {0} día\x0cen {0} díes\x0chai {0} día\x0dhai {0} díes" + + "\x06antay.\x05mañ.\x08p. mañ.\x09en {0} d.\x0ahai {0} d.\x12día de la se" + + "lmana\x11el domingu pasáu\x0cesti domingu\x13el domingu viniente\x16dien" + + "tro de {0} domingu\x17dientro de {0} domingos\x0fhai {0} domingu\x10hai " + + "{0} domingos\x0bdom. pasáu\x09esti dom.\x0ddom. viniente\x09dom. pas." + + "\x09dom. vin.\x10el llunes pasáu\x0besti llunes\x12el llunes viniente" + + "\x15dientro de {0} llunes\x0ehai {0} llunes\x0cllun. pasáu\x0aesti llun." + + "\x0ellun. viniente\x09llu. pas.\x09esti llu.\x09llu. vin.\x10el martes p" + + "asáu\x0besti martes\x12el martes viniente\x15dientro de {0} martes\x0eha" + + "i {0} martes\x0bmar. pasáu\x09esti mar.\x0dmar. viniente\x09mar. pas." + + "\x09mar. vin.\x14el miércoles pasáu\x0festi miércoles\x16el miércoles vi" + + "niente\x19dientro de {0} miércoles\x12hai {0} miércoles\x0cmié. pasáu" + + "\x0aesti mié.\x0emié. viniente\x0amié. pas.\x0amié. vin.\x10el xueves pa" + + "sáu\x0besti xueves\x12el xueves viniente\x15dientro de {0} xueves\x0ehai" + + " {0} xueves\x0bxue. pasáu\x09esti xue.\x0dxue. viniente\x09xue. pas.\x09" + + "xue. vin.\x11el vienres pasáu\x0cesti vienres\x13el vienres viniente\x16" + + "dientro de {0} vienres\x0fhai {0} vienres\x0bvie. pasáu\x09esti vie.\x0d" + + "vie. viniente\x09vie. pas.\x09vie. vin.\x11el sábadu pasáu\x0cesti sábad" + + "u\x13el sábadu viniente\x16dientro de {0} sábadu\x17dientro de {0} sábad" + + "os\x0fhai {0} sábadu\x10hai {0} sábados\x0csáb. pasáu\x0aesti sáb.\x0esá" + + "b. viniente\x0asáb. pas.\x0asáb. vin.\x10periodu del día\x04hora\x09esta" + + " hora\x0ben {0} hora\x0cen {0} hores\x0chai {0} hora\x0dhai {0} hores" + + "\x02h.\x09en {0} h.\x0ahai {0} h.\x07esta h.\x06minutu\x0besti minutu" + + "\x0den {0} minutu\x0een {0} minutos\x0ehai {0} minutu\x0fhai {0} minutos" + + "\x09esti min.\x0ben {0} min.\x0chai {0} min.\x07segundu\x05agora\x0een {" + + "0} segundu\x0fen {0} segundos\x0fhai {0} segundu\x10hai {0} segundos\x0b" + + "en {0} seg.\x0chai {0} seg.\x09en {0} s.\x0ahai {0} s.\x0eestaya horaria" + + "\x0bHora de {0}\x14Hora braniega de {0}\x15Hora estándar de {0}\x03HST" + + "\x03HDT\x19Hora coordinada universal\x18Hora braniega británica\x18Hora " + + "estándar irlandesa\x0dhora d’Acre\x17hora estándar d’Acre\x16hora branie" + + "ga d’Acre\x14Hora d’Afganistán\x18Hora d’África central\x19Hora d’África" + + " del este\x12Hora de Sudáfrica\x1aHora d’África del oeste$Hora estándar " + + "d’África del oeste#Hora braniega d’África del oeste\x0fHora d’Alaska\x19" + + "Hora estándar d’Alaska\x18Hora braniega d’Alaska\x0fHora d’Almaty\x19hor" + + "a estándar d’Almaty\x18hora braniega d’Almaty\x11Hora del Amazonas\x1bHo" + + "ra estándar del Amazonas\x1aHora braniega del Amazonas\x1bHora central n" + + "orteamericana%Hora estándar central norteamericana$Hora braniega central" + + " norteamericana\x1cHora del este norteamericanu&Hora estándar del este n" + + "orteamericanu%Hora braniega del este norteamericanu%Hora de les montañes" + + " norteamericanes/Hora estándar de les montañes norteamericanes.Hora bran" + + "iega de les montañes norteamericanes!Hora del Pacíficu norteamericanu+Ho" + + "ra estándar del Pacíficu norteamericanu*Hora braniega del Pacíficu norte" + + "americanu\x0fhora d’Anadyr\x19hora estándar d’Anadyr\x18hora braniega d’" + + "Anadyr\x0dHora d’Apia\x17Hora estándar d’Apia\x16Hora braniega d’Apia" + + "\x0eHora d’Aqtau\x18Hora estándar d’Aqtau\x17Hora braniega d’Aqtau\x0fHo" + + "ra d’Aqtobe\x19Hora estándar d’Aqtobe\x18Hora braniega d’Aqtobe\x0fHora " + + "d’Arabia\x19Hora estándar d’Arabia\x18Hora braniega d’Arabia\x12Hora d’A" + + "rxentina\x1cHora estándar d’Arxentina\x1bHora braniega d’Arxentina\x1dHo" + + "ra occidental d’Arxentina'Hora estándar occidental d’Arxentina&Hora bran" + + "iega occidental d’Arxentina\x10Hora d’Armenia\x1aHora estándar d’Armenia" + + "\x19Hora braniega d’Armenia\x13Hora del Atlánticu\x1dHora estándar del A" + + "tlánticu\x1cHora braniega del Atlánticu\x1aHora d’Australia central$Hora" + + " estándar d’Australia central#Hora braniega d’Australia central$Hora d’A" + + "ustralia central del oeste.Hora estándar d’Australia central del oeste-H" + + "ora braniega d’Australia central del oeste\x1bHora d’Australia del este%" + + "Hora estándar d’Australia del este$Hora braniega d’Australia del este" + + "\x1cHora d’Australia del oeste&Hora estándar d’Australia del oeste%Hora " + + "braniega d’Australia del oeste\x14Hora d’Azerbaixán\x1eHora estándar d’A" + + "zerbaixán\x1dHora braniega d’Azerbaixán\x12Hora de les Azores\x1cHora es" + + "tándar de les Azores\x1bHora braniega de Les Azores\x11Hora de Bangladex" + + "\x1bHora estándar de Bangladex\x1aHora braniega de Bangladex\x0eHora de " + + "Bután\x0fHora de Bolivia\x10Hora de Brasilia\x1aHora estándar de Brasili" + + "a\x19Hora braniega de Brasilia\x1aHora de Brunéi Darussalam\x12Hora de C" + + "abu Verde\x1cHora estándar de Cabu Verde\x1bHora braniega de Cabu Verde" + + "\x0dHora de Casey\x1aHora estándar de Chamorro\x0fHora de Chatham\x19Hor" + + "a estándar de Chatham\x18Hora braniega de Chatham\x0dHora de Chile\x17Ho" + + "ra estándar de Chile\x16Hora braniega de Chile\x0dHora de China\x17Hora " + + "estándar de China\x16Hora braniega de China\x12Hora de Choibalsan\x1cHor" + + "a estándar de Choibalsan\x1bHora braniega de Choibalsan$Hora estándar de" + + " la Islla Christmas\x18Hora de les Islles Cocos\x10Hora de Colombia\x1aH" + + "ora estándar de Colombia\x19Hora braniega de Colombia\x17Hora de les Isl" + + "les Cook!Hora estándar de les Islles Cook&Hora media braniega de les Isl" + + "les Cook\x0cHora de Cuba\x16Hora estándar de Cuba\x15Hora braniega de Cu" + + "ba\x0dHora de Davis\x1aHora de Dumont-d’Urville\x16Hora de Timor Orienta" + + "l\x1aHora de la Islla de Pascua$Hora estándar de la Islla de Pascua#Hora" + + " braniega de la Islla de Pascua\x10Hora d’Ecuador\x17Hora d’Europa Centr" + + "al!Hora estándar d’Europa Central Hora braniega d’Europa Central\x18Hora" + + " d’Europa del Este\"Hora estándar d’Europa del Este!Hora braniega d’Euro" + + "pa del Este Hora d’Europa del estremu este\x1aHora d’Europa Occidental$H" + + "ora estándar d’Europa Occidental#Hora braniega d’Europa Occidental\x1bHo" + + "ra de les Islles Falkland%Hora estándar de les Islles Falkland$Hora bran" + + "iega de les Islles Falkland\x0cHora de Fixi\x16Hora estándar de Fixi\x15" + + "Hora braniega de Fixi\x1aHora de La Guyana Francesa&Hora del sur y l’ant" + + "árticu francés\x12Hora de Galápagos\x0fHora de Gambier\x0eHora de Xeorx" + + "a\x18Hora estándar de Xeorxa\x17Hora braniega de Xeorxa\x1aHora de les I" + + "slles Gilbert\x17Hora media de Greenwich\x1cHora de Groenlandia oriental" + + "&Hora estándar de Groenlandia oriental%Hora braniega de Groenlandia orie" + + "ntal\x1eHora de Groenlandia occidental(Hora estándar de Groenlandia occi" + + "dental'Hora braniega de Groenlandia occidental\x16Hora estándar de Guam" + + "\x18Hora estándar del Golfu\x11Hora de La Guyana\x19Hora de Hawaii-Aleut" + + "ianes#Hora estándar de Hawaii-Aleutianes\"Hora braniega de Hawaii-Aleuti" + + "anes\x13Hora de Ḥong Kong\x1dHora estándar de Ḥong Kong\x1cHora braniega" + + " de Ḥong Kong\x0cHora de Hovd\x16Hora estándar de Hovd\x15Hora braniega " + + "de Hovd\x1aHora estándar de la India\x18Hora del Océanu Índicu\x12Hora d" + + "’Indochina\x1aHora d’Indonesia central\x1bHora d’Indonesia del este" + + "\x1cHora d’Indonesia del oeste\x0eHora d’Irán\x18Hora estándar d’Irán" + + "\x17Hora braniega d’Irán\x10Hora d’Irkutsk\x1aHora estándar d’Irkutsk" + + "\x19Hora braniega d’Irkutsk\x0fHora d’Israel\x19Hora estándar d’Israel" + + "\x18Hora braniega d’Israel\x0eHora de Xapón\x18Hora estándar de Xapón" + + "\x17Hora braniega de Xapón hora de Petropavlovsk-Kamchatski)hora estanda" + + "r de Petropavlovsk-Kamchatski)hora braniega de Petropavlovsk-Kamchatski" + + "\x1cHora del Kazakstán oriental\x1eHora del Kazakstán occidental\x0dHora" + + " de Corea\x17Hora estándar de Corea\x16Hora braniega de Corea\x0eHora de" + + " Kosrae\x13Hora de Krasnoyarsk\x1dHora estándar de Krasnoyarsk\x1cHora b" + + "raniega de Krasnoyarsk\x14Hora del Kirguistán\x0dHora de Lanka\x17Hora d" + + "e les Islles Line\x11Hora de Lord Howe\x1bHora estándar de Lord Howe\x1a" + + "Hora braniega de Lord Howe\x0eHora de Macáu\x18Hora estándar de Macáu" + + "\x17Hora braniega de Macáu\x1aHora de la Islla Macquarie\x10Hora de Maga" + + "dán\x1aHora estándar de Magadán\x19Hora braniega de Magadán\x0fHora de M" + + "alasia\x14Hora de Les Maldives\x15Hora de les Marqueses\x1bHora de les I" + + "slles Marshall\x10Hora de Mauriciu\x1aHora estándar de Mauriciu\x19Hora " + + "braniega de Mauriciu\x0eHora de Mawson\x1cHora del noroeste de Méxicu&Ho" + + "ra estándar del noroeste de Méxicu%Hora braniega del noroeste de Méxicu" + + "\x1dHora del Pacíficu de Méxicu'Hora estándar del Pacíficu de Méxicu&Hor" + + "a braniega del Pacíficu de Méxicu\x15Hora d’Ulán Bátor\x1fHora estándar " + + "d’Ulán Bátor\x1eHora braniega d’Ulán Bátor\x0eHora de Moscú\x18Hora está" + + "ndar de Moscú\x17Hora braniega de Moscú\x0fHora de Myanmar\x0dHora de Na" + + "uru\x0eHora del Nepal\x17Hora de Nueva Caledonia!Hora estándar de Nueva " + + "Caledonia Hora braniega de Nueva Caledonia\x15Hora de Nueva Zelanda\x1fH" + + "ora estándar de Nueva Zelanda\x1eHora braniega de Nueva Zelanda\x14Hora " + + "de Newfoundland\x1eHora estándar de Newfoundland\x1dHora braniega de New" + + "foundland\x0cHora de Niue\x18Hora de la Islla Norfolk\x1bHora de Fernand" + + "o de Noronha%Hora estándar de Fernando de Noronha$Hora braniega de Ferna" + + "ndo de Noronha%Hora de les Islles Marianes del Norte\x13Hora de Novosibi" + + "rsk\x1dHora estándar de Novosibirsk\x1cHora braniega de Novosibirsk\x0dH" + + "ora d’Omsk\x17Hora estándar d’Omsk\x16Hora braniega d’Omsk\x13Hora del P" + + "aquistán\x1dHora estándar del Paquistán\x1cHora braniega del Paquistán" + + "\x0dHora de Palau\x1bHora de Papúa Nueva Guinea\x12Hora del Paraguái\x1c" + + "Hora estándar del Paraguái\x1bHora braniega del Paraguái\x0eHora del Per" + + "ú\x18Hora estándar del Perú\x17Hora braniega del Perú\x11Hora de Filipi" + + "nes\x1bHora estándar de Filipines\x1aHora de branu de Filipines\x1aHora " + + "de les Islles Phoenix\x1fHora de Saint Pierre y Miquelon)Hora estándar d" + + "e Saint Pierre y Miquelon(Hora braniega de Saint Pierre y Miquelon\x10Ho" + + "ra de Pitcairn\x0eHora de Ponape\x11hora de Pyongyang\x11Hora de Qyzylor" + + "da\x1bHora estándar de Qyzylorda\x1aHora braniega de Qyzylorda\x10Hora d" + + "e Reunión\x0fHora de Rothera\x10Hora de Saxalín\x1aHora estándar de Saxa" + + "lín\x19Hora braniega de Saxalín\x0eHora de Samara\x18Hora estándar de Sa" + + "mara\x17Hora braniega de Samara\x0dHora de Samoa\x17Hora estándar de Sam" + + "oa\x16Hora braniega de Samoa\x14Hora de Les Seixeles\x1aHora estándar de" + + " Singapur\x1bHora de les Islles Salomón\x16Hora de Xeorxa del Sur\x10Hor" + + "a del Surinam\x0dHora de Syowa\x0eHora de Tahiti\x0fHora de Taipéi\x19Ho" + + "ra estándar de Taipéi\x18Hora braniega de Taipéi\x15Hora del Taxiquistán" + + "\x0fHora de Tokelau\x0dHora de Tonga\x17Hora estándar de Tonga\x16Hora b" + + "raniega de Tonga\x0dHora de Chuuk\x16Hora del Turkmenistán Hora estándar" + + " del Turkmenistán\x1fHora braniega del Turkmenistán\x0eHora de Tuvalu" + + "\x11Hora del Uruguái\x1bHora estándar del Uruguái\x1aHora braniega del U" + + "ruguái\x15Hora del Uzbequistán\x1fHora estándar del Uzbequistán\x1eHora " + + "braniega del Uzbequistán\x0fHora de Vanuatu\x19Hora estándar de Vanuatu" + + "\x18Hora braniega de Vanuatu\x11Hora de Venezuela\x13Hora de Vladivostok" + + "\x1dHora estándar de Vladivostok\x1cHora braniega de Vladivostok\x12Hora" + + " de Volgográu\x1cHora estándar de Volgográu\x1bHora braniega de Volgográ" + + "u\x0eHora de Vostok\x15Hora de la Islla Wake\x17Hora de Wallis y Futuna" + + "\x0fHora de Yakutsk\x19Hora estándar de Yakutsk\x18Hora braniega de Yaku" + + "tsk\x16Hora de Yekaterimburgu Hora estándar de Yekaterimburgu\x1fHora br" + + "aniega de Yekaterimburgu\x03Epr\x03Oga\x03Dis\x05Epreo\x06Ogasti\x07Dise" + + "mba\x03UTC\x04Mär\x03Mai\x03Aug\x03Dez\x03Ati\x03Ata\x03Ala\x03Alm\x03Al" + + "z\x03Asi\x03Feb\x03Mar\x03Apr\x03May\x03Jun\x03Jul\x03Aug\x03Sep\x03Oct" + + "\x03Nov\x02lu\x02ma\x02ju\x0ben {0} trim\x0cen {0} días\x02sa\x0d2do tri" + + "mestre\x0d4to trimestre\x0c2e trimestre\x0c3e trimestre\x0c4e trimestre" + + "\x0f2ème trimestre\x0f3ème trimestre\x0f4ème trimestre\x03lun\x03mar\x03" + + "mie\x03joi\x03vin\x03sab\x03Mrt\x03Mai\x03Okt\x03Nov\x03Des\x03TSB\x0eTS" + + "È (Èirinn)\x0chai {0} mes.\x0dhai {0} días\x0dhai {0} horas\x04Mär\x03D" + + "ez\x03Fab\x03Mar\x03Afi\x03May\x03Yun\x03Yul\x03Agu\x03Sat\x03Okt\x03Nuw" + + "\x03Dis\x03Feb\x03Apr\x03Mei\x03Jun\x03Agt\x03Sep\x05Maret\x05April\x04J" + + "uni\x04Juli\x07Agustus\x09September\x07Oktober\x08November\x08Desember" + + "\x03feb\x03apr\x03mag\x03giu\x03lug\x03ago\x03ott\x03nov\x03dic\x03mer" + + "\x03gio\x03ven\x03Feb\x03Mac\x03Jul\x03Ago\x03Sep\x03Nov\x05Machi\x07Apr" + + "ilyi\x05Junyi\x06Julyai\x06Agusti\x08Septemba\x06Oktoba\x07Novemba\x03Al" + + "h\x03Iju\x03Abr\x03Mai\x03Set\x03Otu\x03Nuv\x03Diz\x03Ala\x03Alj\x03Ass" + + "\x03Okt\x03Jmn\x04Fäb\x04Mäz\x03Ouj\x04Säp\x04Mäe\x03Mee\x03Mar\x03Apu" + + "\x03Maa\x03Juu\x03Seb\x03Oki\x03Mei\x05Machi\x04Juni\x05Julai\x06Agosti" + + "\x08Septemba\x06Oktoba\x07Novemba\x07Desemba\x03Alh\x03Mey\x03Jon\x03Jol" + + "\x03Aog\x03Mey\x03Ogo\x03Dis\x04Ogos\x09September\x07Oktober\x08November" + + "\x08Disember\x03Fra\x03Mej\x04Ġun\x03Lul\x03Aww\x03Ott\x04Diċ\x03May\x03" + + "seg\x03ter\x03qua\x03qui\x03sex\x13Hora padrão de {0}\x03Feb\x03Jun\x03J" + + "ul\x03Ago\x03Nov\x05Machi\x08Septemba\x07Novemba\x03Jtt\x03Jnn\x03Jtn" + + "\x03Alh\x03Iju\x03Jmo\x03Fev\x03Mar\x03Abr\x03Mai\x03Set\x03UTC\x03Shk" + + "\x03Mar\x03Pri\x03Maj\x03Qer\x04Korr\x04Gush\x03Sht\x03Tet\x04Nën\x03Dhj" + + "\x03Okt\x04Juni\x08Jumatatu\x07Jumanne\x08Jumatano\x08Alhamisi\x06Ijumaa" + + "\x08Jumamosi\x02TS\x03Apr\x03Sep\x03Okt\x03Jtt\x03Jnn\x03Jtn\x03Alh\x03I" + + "ju\x03Jmo\x03Mar\x03Des\x03Mas\x03Eph\x03Mey\x03Aga\x03Okt" + +var bucket7 string = "" + // Size: 9677 bytes + "\x03AKT\x04AKST\x04AKDT\x02CT\x03CST\x03CDT\x02ET\x03EST\x03EDT\x02MT" + + "\x03MST\x03MDT\x02PT\x03PST\x03PDT\x02AT\x03AST\x03ADT\x03CET\x04CEST" + + "\x03EET\x04EEST\x03WET\x04WEST\x03GMT\x03HAT\x04HAST\x04HADT\x10G d MMMM" + + " y, EEEE\x0bG d MMMM, y\x09G d MMM y\x0dGGGGG dd.MM.y\x03yan\x03fev\x03m" + + "ar\x03apr\x03may\x03iyn\x03iyl\x03avq\x03sen\x03okt\x03noy\x03dek\x06yan" + + "var\x06fevral\x04mart\x05aprel\x04iyun\x04iyul\x06avqust\x08sentyabr\x07" + + "oktyabr\x06noyabr\x06dekabr\x06Yanvar\x06Fevral\x04Mart\x05Aprel\x03May" + + "\x05İyun\x05İyul\x06Avqust\x08Sentyabr\x07Oktyabr\x06Noyabr\x06Dekabr" + + "\x02B.\x04B.E.\x05Ç.A.\x03Ç.\x04C.A.\x02C.\x03Ş.\x05bazar\x0dbazar ertəs" + + "i\x16çərşənbə axşamı\x0dçərşənbə\x0fcümə axşamı\x06cümə\x08şənbə\x081-ci" + + " kv.\x082-ci kv.\x093-cü kv.\x094-cü kv.\x0c1-ci kvartal\x0c2-ci kvartal" + + "\x0d3-cü kvartal\x0d4-cü kvartal\x0agecəyarı\x08günorta\x05sübh\x07səhər" + + "\x08gündüz\x0caxşamüstü\x06axşam\x05gecə\x12eramızdan əvvəl\x14bizim era" + + "dan əvvəl\x08yeni era\x09bizim era\x05e.ə.\x07b.e.ə.\x04y.e.\x04b.e.\x0e" + + "d MMMM y, EEEE\x08dd.MM.yy\x03İl\x0akeçən il\x05bu il\x0agələn il\x10{0}" + + " il ərzində\x0d{0} il öncə\x02il\x04Rüb\x0ckeçən rüb\x07bu rüb\x0cgələn " + + "rüb\x12{0} rüb ərzində\x0f{0} rüb öncə\x04rüb\x02Ay\x0akeçən ay\x05bu ay" + + "\x0agələn ay\x10{0} ay ərzində\x0d{0} ay öncə\x02ay\x07Həftə\x0fkeçən hə" + + "ftə\x0abu həftə\x0fgələn həftə\x15{0} həftə ərzində\x12{0} həftə öncə" + + "\x0d{0} həftəsi\x07həftə\x0fAyın həftəsi\x07ay hft.\x04Gün\x07dünən\x07b" + + "u gün\x05sabah\x12{0} gün ərzində\x0f{0} gün öncə\x0bilin günü\x11Həftən" + + "in Günü\x0bhft. günü\x14ayın həftə günü\x0eay hft. günü\x0dkeçən bazar" + + "\x08bu bazar\x0dgələn bazar\x13{0} bazar ərzində\x10{0} bazar öncə\x15ke" + + "çən bazar ertəsi\x10bu bazar ertəsi\x15gələn bazar ertəsi\x1b{0} bazar " + + "ertəsi ərzində\x1b{0} bazar ertəsi əzrində\x18{0} bazar ertəsi öncə\x0ak" + + "eçən BE\x05bu BE\x0agələn BE\x1ekeçən çərşənbə axşamı\x19bu çərşənbə axş" + + "amı\x1egələn çərşənbə axşamı${0} çərşənbə axşamı ərzində!{0} çərşənbə ax" + + "şamı öncə\x0ckeçən ÇƏ\x07bu ÇƏ\x0cgələn ÇƏ\x15keçən çərşənbə\x10bu çərş" + + "ənbə\x15gələn çərşənbə\x1b{0} çərşənbə ərzində\x18{0} çərşənbə öncə\x0a" + + "keçən Ç\x05bu Ç\x0agələn Ç\x17keçən cümə axşamı\x12bu cümə axşamı\x17gəl" + + "ən cümə axşamı\x1d{0} cümə axşamı ərzində\x1a{0} cümə axşamı öncə\x0ake" + + "çən CA\x05bu CA\x0agələn CA\x0ekeçən cümə\x09bu cümə\x0egələn cümə\x14{" + + "0} cümə ərzində\x11{0} cümə öncə\x09keçən C\x04bu C\x09gələn C\x10keçən " + + "şənbə\x0bbu şənbə\x10gələn şənbə\x16{0} şənbə ərzində\x13{0} şənbə öncə" + + "\x0akeçən Ş\x05bu Ş\x0agələn Ş\x05AM/PM\x04Saat\x07bu saat\x12{0} saat ə" + + "rzində\x0f{0} saat öncə\x04saat\x08Dəqiqə\x0bbu dəqiqə\x16{0} dəqiqə ərz" + + "ində\x13{0} dəqiqə öncə\x05dəq.\x07Saniyə\x04indi\x15{0} saniyə ərzində" + + "\x12{0} saniyə öncə\x04san.\x0fSaat Qurşağı\x07qurşaq\x0a{0} Vaxtı\x0e{0" + + "} Yay Vaxtı\x13{0} Standart Vaxtı(Koordinasiya edilmiş ümumdünya vaxtı" + + "\x14Britaniya Yay Vaxtı\x15İrlandiya Yay Vaxtı\x13Əfqanıstan Vaxtı\x17Mə" + + "rkəzi Afrika Vaxtı\x15Şərqi Afrika Vaxtı\x15Cənubi Afrika Vaxtı\x14Qərbi" + + " Afrika Vaxtı\x1dQərbi Afrika Standart Vaxtı\x18Qərbi Afrika Yay Vaxtı" + + "\x0eAlyaska Vaxtı\x17Alyaska Standart Vaxtı\x12Alyaska Yay Vaxtı\x0dAmaz" + + "on Vaxtı\x16Amazon Standart Vaxtı\x11Amazon Yay Vaxtı Şimali Mərkəzi Ame" + + "rika Vaxtı)Şimali Mərkəzi Amerika Standart Vaxtı$Şimali Mərkəzi Amerika " + + "Yay Vaxtı\x1eŞimali Şərqi Amerika Vaxtı'Şimali Şərqi Amerika Standart Va" + + "xtı\"Şimali Şərqi Amerika Yay Vaxtı\x1fŞimali Dağlıq Amerika Vaxtı(Şimal" + + "i Dağlıq Amerika Standart Vaxtı#Şimali Dağlıq Amerika Yay Vaxtı\"Şimali " + + "Amerika Sakit Okean Vaxtı+Şimali Amerika Sakit Okean Standart Vaxtı&Şima" + + "li Amerika Sakit Okean Yay Vaxtı\x0bApia Vaxtı\x14Apia Standart Vaxtı" + + "\x0fApia Yay Vaxtı\x12Ərəbistan Vaxtı\x1bƏrəbistan Standart Vaxtı\x16Ərə" + + "bistan Yay Vaxtı\x10Argentina Vaxtı\x19Argentina Standart Vaxtı\x14Argen" + + "tina Yay Vaxtı\x17Qərbi Argentina Vaxtı Qərbi Argentina Standart Vaxtı" + + "\x1bQərbi Argentina Yay Vaxtı\x12Ermənistan Vaxtı\x1bErmənistan Standart" + + " Vaxtı\x16Ermənistan Yay Vaxtı\x0dAtlantik Vaxt\x16Atlantik Standart Vax" + + "t\x13Atlantik Yay Vaxtı\x1bMərkəzi Avstraliya Vaxtı$Mərkəzi Avstraliya S" + + "tandart Vaxtı\x1fMərkəzi Avstraliya Yay Vaxtı\"Mərkəzi Qərbi Avstraliya " + + "Vaxtı+Mərkəzi Qərbi Avstraliya Standart Vaxtı&Mərkəzi Qərbi Avstraliya Y" + + "ay Vaxtı\x19Şərqi Avstraliya Vaxtı\"Şərqi Avstraliya Standart Vaxtı\x1dŞ" + + "ərqi Avstraliya Yay Vaxtı\x18Qərbi Avstraliya Vaxtı!Qərbi Avstraliya St" + + "andart Vaxtı\x1cQərbi Avstraliya Yay Vaxtı\x12Azərbaycan Vaxtı\x1bAzərba" + + "ycan Standart Vaxtı\x16Azərbaycan Yay Vaxtı\x0bAzor Vaxtı\x14Azor Standa" + + "rt Vaxtı\x0fAzor Yay Vaxtı\x11Banqladeş Vaxtı\x1aBanqladeş Standart Vaxt" + + "ı\x15Banqladeş Yay Vaxtı\x0cButan Vaxtı\x0fBoliviya Vaxtı\x10Braziliya " + + "Vaxtı\x19Braziliya Standart Vaxtı\x14Braziliya Yay Vaxtı\x18Brunei Darus" + + "salam vaxtı\x11Kape Verde Vaxtı\x1aKape Verde Standart Vaxtı\x15Kape Ver" + + "de Yay Vaxtı\x0fÇamorro Vaxtı\x0eÇatham Vaxtı\x17Çatham Standart Vaxtı" + + "\x12Çatham Yay Vaxtı\x0cÇili Vaxtı\x15Çili Standart Vaxtı\x10Çili Yay Va" + + "xtı\x0bÇin Vaxtı\x14Çin Standart Vaxtı\x0fÇin Yay Vaxtı\x11Çoybalsan Vax" + + "tı\x1aÇoybalsan Standart Vaxtı\x15Çoybalsan Yay Vaxtı\x13Milad Adası Vax" + + "tı\x15Kokos Adaları Vaxtı\x10Kolumbiya Vaxtı\x19Kolumbiya Standart Vaxtı" + + "\x14Kolumbiya Yay Vaxtı\x13Kuk Adaları Vaxtı\x1cKuk Adaları Standart Vax" + + "tı\x1eKuk Adaları Yarım Yay Vaxtı\x0bKuba Vaxtı\x14Kuba Standart Vaxtı" + + "\x0fKuba Yay Vaxtı\x0cDevis Vaxtı\x18Dümon-d’Ürvil Vaxtı\x14Şərqi Timor " + + "Vaxtı\x13Pasxa Adası Vaxtı\x1cPasxa Adası Standart Vaxtı\x17Pasxa Adası " + + "Yay Vaxtı\x0eEkvador Vaxtı\x17Mərkəzi Avropa Vaxtı Mərkəzi Avropa Standa" + + "rt Vaxtı\x1bMərkəzi Avropa Yay Vaxtı\x15Şərqi Avropa Vaxtı\x1eŞərqi Avro" + + "pa Standart Vaxtı\x19Şərqi Avropa Yay Vaxtı\x1cKənar Şərqi Avropa Vaxtı" + + "\x14Qərbi Avropa Vaxtı\x1dQərbi Avropa Standart Vaxtı\x18Qərbi Avropa Ya" + + "y Vaxtı\x18Folklend Adaları Vaxtı!Folklend Adaları Standart Vaxtı\x1cFol" + + "klend Adaları Yay Vaxtı\x0bFici Vaxtı\x14Fici Standart Vaxtı\x0fFici Yay" + + " Vaxtı\x19Fransız Qvianası Vaxtı%Fransız Cənubi və Antarktik Vaxtı\x10Qa" + + "lapaqos Vaxtı\x0eQambier Vaxtı\x11Gurcüstan Vaxtı\x1aGurcüstan Standart " + + "Vaxtı\x15Gurcüstan Yay Vaxtı\x17Gilbert Adaları Vaxtı\x14Qrinviç Orta Va" + + "xtı\x1aŞərqi Qrenlandiya Vaxtı#Şərqi Qrenlandiya Standart Vaxtı\x1eŞərqi" + + " Qrenlandiya Yay Vaxtı\x19Qərbi Qrenlandiya Vaxtı\"Qərbi Qrenlandiya Sta" + + "ndart Vaxtı\x1dQərbi Qrenlandiya Yay Vaxtı\x0fKörfəz Vaxtı\x0dQayana Vax" + + "tı\x12Havay-Aleut Vaxtı\x1bHavay-Aleut Standart Vaxtı\x16Havay-Aleut Yay" + + " Vaxtı\x10Honq Konq Vaxtı\x19Honq Konq Standart Vaxtı\x14Honq Konq Yay V" + + "axtı\x0bHovd Vaxtı\x14Hovd Standart Vaxtı\x0fHovd Yay Vaxtı\x10Hindistan" + + " Vaxtı\x13Hind Okeanı Vaxtı\x0fHindçin Vaxtı\x1cMərkəzi İndoneziya Vaxtı" + + "\x1aŞərqi İndoneziya Vaxtı\x19Qərbi İndoneziya Vaxtı\x0cİran Vaxtı\x15İr" + + "an Standart Vaxtı\x10İran Yay Vaxtı\x0fİrkutsk Vaxtı\x18İrkutsk Standart" + + " Vaxtı\x13İrkutsk Yay Vaxtı\x0eİsrail Vaxtı\x17İsrail Standart Vaxtı\x12" + + "İsrail Yay Vaxtı\x0fYaponiya Vaxtı\x18Yaponiya Standart Vaxtı\x13Yaponi" + + "ya Yay Vaxtı\x1aŞərqi Qazaxıstan Vaxtı\x19Qərbi Qazaxıstan Vaxtı\x0dKore" + + "ya Vaxtı\x16Koreya Standart Vaxtı\x11Koreya Yay Vaxtı\x0cKorse Vaxtı\x12" + + "Krasnoyarsk Vaxtı\x1bKrasnoyarsk Standart Vaxtı\x16Krasnoyarsk Yay Vaxtı" + + "\x16Qırğızıstan Vaxtı\x14Layn Adaları Vaxtı\x0fLord Hau Vaxtı\x18Lord Ha" + + "u Standart Vaxtı\x13Lord Hau Yay vaxtı\x14Makari Adası Vaxtı\x0eMaqadan " + + "Vaxtı\x17Maqadan Standart Vaxtı\x12Maqadan Yay Vaxtı\x10Malayziya Vaxtı" + + "\x0dMaldiv Vaxtı\x0fMarkesas Vaxtı\x17Marşal Adaları Vaxtı\x0eMavriki Va" + + "xtı\x17Mavriki Standart Vaxtı\x12Mavriki Yay Vaxtı\x0dMouson Vaxtı\x1cŞi" + + "mal-Qərbi Meksika Vaxtı%Şimal-Qərbi Meksika Standart Vaxtı Şimal-Qərbi M" + + "eksika Yay Vaxtı\x1aMeksika Sakit Okean Vaxtı#Meksika Sakit Okean Standa" + + "rt Vaxtı\x1eMeksika Sakit Okean Yay Vaxtı\x10Ulanbator Vaxtı\x19Ulanbato" + + "r Standart Vaxtı\x14Ulanbator Yay Vaxtı\x0dMoskva Vaxtı\x16Moskva Standa" + + "rt Vaxtı\x11Moskva Yay vaxtı\x0dMyanma Vaxtı\x0cNauru Vaxtı\x0cNepal vax" + + "tı\x16Yeni Kaledoniya Vaxtı\x1fYeni Kaledoniya Standart Vaxtı\x1aYeni Ka" + + "ledoniya Yay Vaxtı\x15Yeni Zelandiya Vaxtı\x1eYeni Zelandiya Standart Va" + + "xtı\x19Yeni Zelandiya Yay Vaxtı\x13Nyufaundlend Vaxtı\x1cNyufaundlend St" + + "andart Vaxtı\x17Nyufaundlend Yay Vaxtı\x0bNiue Vaxtı\x15Norfolk Adası Va" + + "xtı\x1aFernando de Noronya Vaxtı#Fernando de Noronya Standart Vaxtı\x1eF" + + "ernando de Noronya Yay Vaxtı\x12Novosibirsk Vaxtı\x1bNovosibirsk Standar" + + "t Vaxtı\x16Novosibirsk Yay Vaxtı\x0bOmsk Vaxtı\x14Omsk Standart Vaxtı" + + "\x0fOmsk Yay Vaxtı\x0fPakistan Vaxtı\x18Pakistan Standart vaxtı\x13Pakis" + + "tan Yay Vaxtı\x0cPalau Vaxtı\x19Papua Yeni Qvineya Vaxtı\x0fParaqvay Vax" + + "tı\x18Paraqvay Standart Vaxtı\x13Paraqvay Yay Vaxtı\x0bPeru Vaxtı\x14Per" + + "u Standart Vaxtı\x0fPeru Yay Vaxtı\x0fFilippin Vaxtı\x18Filippin Standar" + + "t Vaxtı\x13Filippin Yay Vaxtı\x16Feniks Adaları Vaxtı#Müqəddəs Pyer və M" + + "ikelon Vaxtı,Müqəddəs Pyer və Mikelon Standart Vaxtı'Müqəddəs Pyer və Mi" + + "kelon Yay Vaxtı\x0ePitkern Vaxtı\x0dPonape Vaxtı\x0ePxenyan Vaxtı\x0eReu" + + "nion Vaxtı\x0dRotera Vaxtı\x0eSaxalin Vaxtı\x17Saxalin Standart Vaxtı" + + "\x12Saxalin Yay Vaxtı\x0dSamara vaxtı\x16Samara standart vaxtı\x11Samara" + + " yay vaxtı\x0cSamoa Vaxtı\x15Samoa Standart Vaxtı\x10Samoa Yay Vaxtı\x17" + + "Seyşel Adaları Vaxtı\x0fSinqapur Vaxtı\x17Solomon Adaları Vaxtı\x16Cənub" + + "i Corciya Vaxtı\x0eSurinam Vaxtı\x0cSyova Vaxtı\x0dTahiti Vaxtı\x0dTaybe" + + "y Vaxtı\x16Taybey Standart Vaxtı\x11Taybey Yay Vaxtı\x11Tacikistan Vaxtı" + + "\x0eTokelau Vaxtı\x0cTonqa Vaxtı\x15Tonqa Standart Vaxtı\x10Tonqa Yay Va" + + "xtı\x0cÇuuk Vaxtı\x15Türkmənistan Vaxtı\x1eTürkmənistan Standart Vaxtı" + + "\x19Türkmənistan Yay Vaxtı\x0dTuvalu Vaxtı\x0eUruqvay Vaxtı\x17Uruqvay S" + + "tandart Vaxtı\x12Uruqvay Yay Vaxtı\x13Özbəkistan Vaxtı\x1cÖzbəkistan Sta" + + "ndart Vaxtı\x17Özbəkistan Yay Vaxtı\x0eVanuatu Vaxtı\x17Vanuatu Standart" + + " Vaxtı\x12Vaunatu Yay Vaxtı\x10Venesuela Vaxtı\x12Vladivostok Vaxtı\x1bV" + + "ladivostok Standart Vaxtı\x16Vladivostok Yay Vaxtı\x10Volqoqrad Vaxtı" + + "\x19Volqoqrad Standart Vaxtı\x14Volqoqrad Yay Vaxtı\x0dVostok Vaxtı\x0bU" + + "eyk Vaxtı\x18Uollis və Futuna Vaxtı\x0eYakutsk Vaxtı\x17Yakutsk Standart" + + " Vaxtı\x12Yakutsk Yay Vaxtı\x14Yekaterinburq Vaxtı\x1dYekaterinburq Stan" + + "dart Vaxtı\x18Yekaterinburq Yay Vaxtı\x03GMT\x03GMT\x04SEČ\x05SELČ\x03GM" + + "T\x05am/pm\x03GMT\x02NT\x03NST\x03NDT\x03GMT\x03MST\x03MDT\x03GMT\x03GMT" + + "\x03CET\x04CEST\x03EET\x04EEST\x03WET\x04WEST\x03GMT\x03HAT\x03GMT\x03GM" + + "T\x03GMT\x03GMT\x03GMT\x03fbl\x03msi\x03apl\x03mai\x03yun\x03yul\x03agt" + + "\x03stb\x04ɔtb\x03nvb\x03dsb\x03WET\x03GMT\x03GMT\x03GMT\x03fev\x03mar" + + "\x03apr\x03may\x03avg\x03sen\x03okt\x03dek\x04mart\x05aprel\x06avgust" + + "\x07sentabr\x06oktabr\x06dekabr\x04Mart\x05Aprel\x03May\x04Iyun\x04Iyul" + + "\x06Avgust\x07Sentabr\x06Oktabr\x06Dekabr\x03feb\x04mäz\x03prl\x03yun" + + "\x03yul\x03gst\x03set\x03ton\x03nov\x03tob\x03GMT" + +var bucket8 string = "" + // Size: 20649 bytes + "\x06јан\x06фев\x06мар\x06апр\x06май\x06ијн\x06ијл\x06авг\x06сен\x06окт" + + "\x06ној\x06дек\x0cјанвар\x0cфеврал\x08март\x0aапрел\x08ијун\x08ијул\x0cа" + + "вгуст\x10сентјабр\x0eоктјабр\x0cнојабр\x0cдекабр\x0cЈанвар\x0cФеврал" + + "\x08Март\x0aАпрел\x06Май\x08Ијун\x08Ијул\x0cАвгуст\x10Сентјабр\x0eОктјаб" + + "р\x0cНојабр\x0cДекабр\x03Б.\x06Б.Е.\x06Ч.А.\x03Ч.\x06Ҹ.А.\x03Ҹ.\x03Ш." + + "\x0aбазар\x17базар ертәси\x1dчәршәнбә ахшамы\x10чәршәнбә\x15ҹүмә ахшамы" + + "\x08ҹүмә\x0aшәнбә\x0c1-ҹи кв.\x0c2-ҹи кв.\x0c3-ҹү кв.\x0c4-ҹү кв.\x151-ҹ" + + "и квартал\x152-ҹи квартал\x153-ҹү квартал\x154-ҹү квартал\x10ҝеҹәјары" + + "\x04АМ\x0eҝүнорта\x04ПМ\x08сүбһ\x0aсәһәр\x0cҝүндүз\x12ахшамүстү\x0aахшам" + + "\x08ҝеҹә\x02а\x02ҝ\x02п\x1dерамыздан әввәл\"бизим ерадан әввәл\x0fјени е" + + "ра\x11бизим ера\x06е.ә.\x09б.е.ә.\x06ј.е.\x06б.е.\x04kɔn\x03mac\x03mat" + + "\x03mto\x03mpu\x03hil\x03nje\x03hik\x03dip\x03bio\x03may\x04liɓ\x09Kɔndɔ" + + "ŋ\x09Màcɛ̂l\x08Màtùmb\x06Màtop\x08M̀puyɛ\x0cHìlòndɛ̀\x07Njèbà\x07Hìkaŋ" + + "\x09Dìpɔ̀s\x08Bìòôm\x0aMàyɛsèp\x10Lìbuy li ńyèe\x04nɔy\x03nja\x03uum\x04" + + "ŋge\x04mbɔ\x05kɔɔ\x03jon\x0dŋgwà nɔ̂y\x11ŋgwà njaŋgumba\x0aŋgwà ûm\x0cŋ" + + "gwà ŋgê\x0cŋgwà mbɔk\x0cŋgwà kɔɔ\x0bŋgwà jôn\x04K1s3\x04K2s3\x04K3s3\x04" + + "K4s3\x15Kèk bisu i soŋ iaâ\"Kèk i ńyonos biɓaà i soŋ iaâ Kèk i ńyonos bi" + + "aâ i soŋ iaâ Kèk i ńyonos binâ i soŋ iaâ\x0dI bikɛ̂glà\x0bI ɓugajɔp\x17b" + + "isū bi Yesù Krǐstò\x16i mbūs Yesù Krǐstò\x05b.Y.K\x05m.Y.K\x04kèk\x06ŋwì" + + "i\x04soŋ\x09sɔndɛ̂\x04kɛl\x07yààni\x06lɛ̀n\x05yàni\x13hìlɔ hi sɔndɛ̂\x09" + + "njǎmùha\x07ŋgɛŋ\x05ŋget\x0chìŋgeŋget\x10komboo i ŋgɛŋ\x06d.M.yy\x07d.M.y" + + " G\x0bd.M.y GGGGG\x0c{1} 'у' {0}\x06сту\x06лют\x06сак\x06кра\x06мая\x06ч" + + "эр\x06ліп\x06жні\x06вер\x06кас\x06ліс\x06сне\x02с\x02л\x02к\x02м\x02ч" + + "\x02ж\x02в\x10студзеня\x0cлютага\x10сакавіка\x12красавіка\x0eчэрвеня\x0c" + + "ліпеня\x0cжніўня\x0eверасня\x16кастрычніка\x12лістапада\x0cснежня\x10ст" + + "удзень\x08люты\x0eсакавік\x10красавік\x0eчэрвень\x0cліпень\x0eжнівень" + + "\x10верасень\x14кастрычнік\x10лістапад\x0eснежань\x04нд\x04пн\x04аў\x04с" + + "р\x04чц\x04пт\x04сб\x02н\x0eнядзеля\x14панядзелак\x0eаўторак\x0cсерада" + + "\x0cчацвер\x0eпятніца\x0cсубота\x0c1-шы кв.\x0c2-гі кв.\x0c3-ці кв.\x0c4" + + "-ты кв.\x151-шы квартал\x152-гі квартал\x153-ці квартал\x154-ты квартал" + + "\x02am\x02pm*да нараджэння Хрыстова\x16да нашай эры*ад нараджэння Хрысто" + + "ва\x11нашай эры\x0bда н.э.\x06н.э.\x14EEEE, d MMMM y 'г'.\x0ed MMMM y '" + + "г'.\x06d.MM.y\x07d.MM.yy\x0eHH:mm:ss, zzzz\x06эра\x06год\x1cу мінулым г" + + "одзе\x18у гэтым годзе у наступным годзе\x13праз {0} год\x15праз {0} гад" + + "ы\x17праз {0} гадоў\x15праз {0} года\x13{0} год таму\x15{0} гады таму" + + "\x17{0} гадоў таму\x15{0} года таму\x03г.\x10праз {0} г.\x10{0} г. таму" + + "\x0eквартал\"у мінулым квартале\x1eу гэтым квартале&у наступным квартале" + + "\x1bпраз {0} квартал\x1dпраз {0} кварталы\x1fпраз {0} кварталаў\x1dпраз " + + "{0} квартала\x1b{0} квартал таму\x1d{0} кварталы таму\x1f{0} кварталаў т" + + "аму\x1d{0} квартала таму\x05кв.\x12праз {0} кв.\x12{0} кв. таму\x0aмеся" + + "ц\x1eу мінулым месяцы\x1aу гэтым месяцы\"у наступным месяцы\x17праз {0}" + + " месяц\x19праз {0} месяцы\x1bпраз {0} месяцаў\x19праз {0} месяца\x17{0} " + + "месяц таму\x19{0} месяцы таму\x1b{0} месяцаў таму\x19{0} месяца таму" + + "\x07мес.\x14праз {0} мес.\x14{0} мес. таму\x06тыд\x1eна мінулым тыдні" + + "\x1aна гэтым тыдні\"на наступным тыдні\x1bпраз {0} тыдзень\x17праз {0} т" + + "ыдні\x19праз {0} тыдняў\x17праз {0} тыдня\x1b{0} тыдзень таму\x17{0} ты" + + "дні таму\x19{0} тыдняў таму\x17{0} тыдня таму\x12тыдзень {0}\x13праз {0" + + "} тыд\x13{0} тыд таму\x1bтыдзень месяца\x0aдзень\x12пазаўчора\x0aучора" + + "\x0aсёння\x0cзаўтра\x16паслязаўтра\x17праз {0} дзень\x13праз {0} дні\x15" + + "праз {0} дзён\x13праз {0} дня\x17{0} дзень таму\x13{0} дні таму\x15{0} " + + "дзён таму\x13{0} дня таму\x03д.\x13дзень года\x15дзень тыдня\x17дзень м" + + "есяца у мінулую нядзелю\x1aу гэту нядзелю$у наступную нядзелю\x1bпраз {" + + "0} нядзелю\x1bпраз {0} нядзелі\x1bпраз {0} нядзель\x1b{0} нядзелю таму" + + "\x1b{0} нядзелі таму\x1b{0} нядзель таму\x16у мінулую нд\x10у гэту нд" + + "\x1aу наступную нд$у мінулы панядзелак у гэты панядзелак(у наступны паня" + + "дзелак!праз {0} панядзелак!праз {0} панядзелкі#праз {0} панядзелкаў!пра" + + "з {0} панядзелка!{0} панядзелак таму!{0} панядзелкі таму#{0} панядзелка" + + "ў таму!{0} панядзелка таму\x14у мінулы пн\x10у гэты пн\x18у наступны пн" + + "\x1eу мінулы аўторак\x1aу гэты аўторак\"у наступны аўторак\x1bпраз {0} а" + + "ўторак\x1bпраз {0} аўторкі\x1dпраз {0} аўторкаў\x1bпраз {0} аўторка\x1b" + + "{0} аўторак таму\x1b{0} аўторкі таму\x1d{0} аўторкаў таму\x1b{0} аўторка" + + " таму\x14у мінулы аў\x10у гэты аў\x18у наступны аў\x1eу мінулую сераду" + + "\x18у гэту сераду\"у наступную сераду\x19праз {0} сераду\x19праз {0} сер" + + "ады\x17праз {0} серад\x19{0} сераду таму\x19{0} серады таму\x17{0} сера" + + "д таму\x16у мінулую ср\x10у гэту ср\x1aу наступную ср\x1cу мінулы чацве" + + "р\x18у гэты чацвер у наступны чацвер\x19праз {0} чацвер\x1dпраз {0} чац" + + "вяргі\x1fпраз {0} чацвяргоў\x1dпраз {0} чацвярга\x19{0} чацвер таму\x1d" + + "{0} чацвяргі таму\x1f{0} чацвяргоў таму\x1d{0} чацвярга таму\x14у мінулы" + + " чц\x10у гэты чц\x18у наступны чц у мінулую пятніцу\x1aу гэту пятніцу$у " + + "наступную пятніцу\x1bпраз {0} пятніцу\x1bпраз {0} пятніцы\x19праз {0} п" + + "ятніц\x1b{0} пятніцу таму\x1b{0} пятніцы таму\x19{0} пятніц таму\x16у м" + + "інулую пт\x10у гэту пт\x1aу наступную пт\x1eу мінулую суботу\x18у гэту " + + "суботу\"у наступную суботу\x19праз {0} суботу\x19праз {0} суботы\x17пра" + + "з {0} субот\x19{0} суботу таму\x19{0} суботы таму\x17{0} субот таму\x16" + + "у мінулую сб\x10у гэту сб\x1aу наступную сб\x0eгадзіна\x1aу гэту гадзін" + + "у\x1bпраз {0} гадзіну\x1bпраз {0} гадзіны\x19праз {0} гадзін\x1b{0} гад" + + "зіну таму\x1b{0} гадзіны таму\x19{0} гадзін таму\x08гадз\x15праз {0} га" + + "дз\x15{0} гадз таму\x0eхвіліна\x1aу гэту хвіліну\x1bпраз {0} хвіліну" + + "\x1bпраз {0} хвіліны\x19праз {0} хвілін\x1b{0} хвіліну таму\x1b{0} хвілі" + + "ны таму\x19{0} хвілін таму\x04хв\x11праз {0} хв\x11{0} хв таму\x0eсекун" + + "да\x0aцяпер\x1bпраз {0} секунду\x1bпраз {0} секунды\x19праз {0} секунд" + + "\x1b{0} секунду таму\x1b{0} секунды таму\x19{0} секунд таму\x0fпраз {0} " + + "с\x0f{0} с таму\x15часавы пояс\x0d+HH.mm;-HH.mm\x06GMT{0}\x03GMT\x0bЧас" + + ": {0}\x16Летні час: {0} Стандартны час: {0}8Універсальны каардынаваны ча" + + "с$Брытанскі летні час.Ірландскі стандартны час!Афганістанскі час/Цэнтра" + + "льнаафрыканскі час)Усходнеафрыканскі час+Паўднёваафрыканскі час)Заходне" + + "афрыканскі час>Заходнеафрыканскі стандартны час4Заходнеафрыканскі летні" + + " час\x13Час Аляскі(Стандартны час Аляскі\x1eЛетні час Аляскі\x19Амазонск" + + "і час.Амазонскі стандартны час$Амазонскі летні часBПаўночнаамерыканскі " + + "цэнтральны часWПаўночнаамерыканскі цэнтральны стандартны часMПаўночнаам" + + "ерыканскі цэнтральны летні час<Паўночнаамерыканскі ўсходні часQПаўночна" + + "амерыканскі ўсходні стандартны часGПаўночнаамерыканскі ўсходні летні ча" + + "с8Паўночнаамерыканскі горны часMПаўночнаамерыканскі горны стандартны ча" + + "сCПаўночнаамерыканскі горны летні час\x1fЦіхаакіянскі час4Ціхаакіянскі " + + "стандартны час*Ціхаакіянскі летні час\x0fЧас Апіі$Стандартны час Апіі" + + "\x1aЛетні час Апіі(Час Саудаўскай Аравіі=Стандартны час Саудаўскай Араві" + + "і3Летні час Саудаўскай Аравіі\x1dАргенцінскі час2Аргенцінскі стандартны" + + " час(Аргенцінскі летні час*Час Заходняй Аргенціны?Стандартны час Заходня" + + "й Аргенціны5Летні час Заходняй Аргенціны\x15Час Арменіі*Стандартны час " + + "Арменіі Летні час Арменіі\x1bАтлантычны час0Атлантычны стандартны час&А" + + "тлантычны летні час0Час цэнтральнай АўстралііEСтандартны час цэнтральна" + + "й Аўстраліі;Летні час цэнтральнай Аўстраліі?Заходні час Цэнтральнай Аўс" + + "тралііTЗаходні стандартны час Цэнтральнай АўстралііJЗаходні летні час Ц" + + "энтральнай Аўстраліі*Час усходняй Аўстраліі?Стандартны час усходняй Аўс" + + "траліі5Летні час усходняй Аўстраліі*Час заходняй Аўстраліі?Стандартны ч" + + "ас заходняй Аўстраліі5Летні час заходняй Аўстраліі\x1fЧас Азербайджана4" + + "Стандартны час Азербайджана*Летні час Азербайджана(Час Азорскіх астраво" + + "ў=Стандартны час Азорскіх астравоў3Летні час Азорскіх астравоў\x19Час Б" + + "англадэш.Стандартны час Бангладэш$Летні час Бангладэш\x13Час Бутана\x1b" + + "Балівійскі час\x1bБразільскі час0Бразільскі стандартны час&Бразільскі л" + + "етні час\x13Час Брунея\x1aЧас Каба-Вердэ/Стандартны час Каба-Вердэ%Летн" + + "і час Каба-Вердэ\x13Час Чамора\x13Час Чатэма(Стандартны час Чатэма\x1eЛ" + + "етні час Чатэма\x17Чылійскі час,Чылійскі стандартны час\"Чылійскі летні" + + " час\x11Час Кітая&Стандартны час Кітая\x1cЛетні час Кітая\x1bЧас Чайбалс" + + "ана0Стандартны час Чайбалсана&Летні час Чайбалсана\"Час вострава Каляд*" + + "Час Какосавых астравоў\x1dКалумбійскі час2Калумбійскі стандартны час(Ка" + + "лумбійскі летні час Час астравоў Кука5Стандартны час астравоў Кука1Паўл" + + "етні час астравоў Кука\x0fЧас Кубы$Стандартны час Кубы\x1aЛетні час Куб" + + "ы\"Час станцыі Дэйвіс3Час станцыі Дзюмон-Дзюрвіль&Час Усходняга Тымора" + + "\"Час вострава Пасхі7Стандартны час вострава Пасхі-Летні час вострава Па" + + "схі\x1bЭквадорскі час/Цэнтральнаеўрапейскі часDЦэнтральнаеўрапейскі ста" + + "ндартны час:Цэнтральнаеўрапейскі летні час)Усходнееўрапейскі час>Усходн" + + "ееўрапейскі стандартны час4Усходнееўрапейскі летні час5Далёкаўсходнееўр" + + "апейскі час)Заходнееўрапейскі час>Заходнееўрапейскі стандартны час4Захо" + + "днееўрапейскі летні час0Час Фалклендскіх астравоўEСтандартны час Фалкле" + + "ндскіх астравоў;Летні час Фалклендскіх астравоў\x11Час Фіджы&Стандартны" + + " час Фіджы\x1cЛетні час Фіджы*Час Французскай ГвіяныZЧас Французскай паў" + + "днёва-антарктычнай тэрыторыіEСтандартны час Галапагоскіх астравоў%Час а" + + "стравоў Гамб’е\x19Грузінскі час.Грузінскі стандартны час$Грузінскі летн" + + "і час(Час астравоў Гілберта\x1cЧас па Грынвічы,Час Усходняй ГрэнландыіA" + + "Стандартны час Усходняй Грэнландыі7Летні час Усходняй Грэнландыі,Час За" + + "ходняй ГрэнландыіAСтандартны час Заходняй Грэнландыі7Летні час Заходняй" + + " Грэнландыі*Час Персідскага заліва\x11Час Гаяны&Гавайска-Алеуцкі час;Гав" + + "айска-Алеуцкі стандартны час1Гавайска-Алеуцкі летні час\x17Час Ганконга" + + ",Стандартны час Ганконга\"Летні час Ганконга\x11Час Хоўда&Стандартны час" + + " Хоўда\x1cЛетні час Хоўда\x11Час Індыі(Час Індыйскага акіяна\x1fІндакіта" + + "йскі час3Цэнтральнаінданезійскі час-Усходнеінданезійскі час-Заходнеінда" + + "незійскі час\x15Іранскі час*Іранскі стандартны час Іранскі летні час" + + "\x15Іркуцкі час*Іркуцкі стандартны час Іркуцкі летні час\x1bІзраільскі ч" + + "ас0Ізраільскі стандартны час&Ізраільскі летні час\x13Час Японіі(Стандар" + + "тны час Японіі\x1eЛетні час Японіі-Усходнеказахстанскі час-Заходнеказах" + + "станскі час\x11Час Карэі&Стандартны час Карэі\x1cЛетні час Карэі$Час во" + + "страва Касрае\x1dКраснаярскі час2Краснаярскі стандартны час(Краснаярскі" + + " летні час\x1dЧас Кыргызстана Час астравоў Лайн\x16Час Лорд-Хау+Стандарт" + + "ны час Лорд-Хау!Летні час Лорд-Хау&Час вострава Макуоры\x1bМагаданскі ч" + + "ас0Магаданскі стандартны час&Магаданскі летні час\x17Час Малайзіі\x15Ча" + + "с Мальдыў,Час Маркізскіх астравоў,Час Маршалавых астравоў\x17Час Маўрык" + + "ія,Стандартны час Маўрыкія\"Летні час Маўрыкія\"Час станцыі Моўсан=Паўн" + + "очна-заходні мексіканскі часRПаўночна-заходні мексіканскі стандартны ча" + + "сHПаўночна-заходні мексіканскі летні час6Мексіканскі ціхаакіянскі часIМ" + + "ексіканскі ціхаакіянскі стандатны часAМексіканскі ціхаакіянскі летні ча" + + "с\x1cЧас Улан-Батара1Стандартны час Улан-Батара'Летні час Улан-Батара" + + "\x19Маскоўскі час.Маскоўскі стандартны час$Маскоўскі летні час\x14Час М’" + + "янмы\x11Час Науру\x19Непальскі час$Час Новай Каледоніі9Стандартны час Н" + + "овай Каледоніі/Летні час Новай Каледоніі\"Час Новай Зеландыі7Стандартны" + + " час Новай Зеландыі-Летні час Новай Зеландыі%Ньюфаўндлендскі час:Ньюфаўн" + + "длендскі стандартны час0Ньюфаўндлендскі летні час\x0fЧас Ніуэ&Час востр" + + "ава Норфалк+Час Фернанду-ды-Наронья@Стандартны час Фернанду-ды-Наронья6" + + "Летні час Фернанду-ды-Наронья\x1fНовасібірскі час4Новасібірскі стандарт" + + "ны час*Новасібірскі летні час\x11Омскі час&Омскі стандартны час\x1cОмск" + + "і летні час\x1dПакістанскі час2Пакістанскі стандартны час(Пакістанскі л" + + "етні час\x11Час Палау)Час Папуа-Новай Гвінеі\x17Час Парагвая,Стандартны" + + " час Парагвая\"Летні час Парагвая\x19Перуанскі час.Перуанскі стандартны " + + "час$Перуанскі летні час\x1bФіліпінскі час0Філіпінскі стандартны час&Філ" + + "іпінскі летні час$Час астравоў Фенікс)Час Сен-П’ер і Мікелон>Стандартны" + + " час Сен-П’ер і МікелонIСтандартны летні час Сен-П’ер і Мікелон&Час вост" + + "рава Піткэрн$Час вострава Понпеі\x1bПхеньянскі час\x17Час Рэюньёна\"Час" + + " станцыі Ратэра\x1bСахалінскі час0Сахалінскі стандартны час&Сахалінскі л" + + "етні час\x11Час Самоа&Стандартны час Самоа\x1cЛетні час Самоа.Час Сейшэ" + + "льскіх астравоў\x1dСінгапурскі час.Час Саламонавых астравоў*Час Паўднёв" + + "ай Джорджыі\x17Час Сурынама\x1eЧас станцыі Сёва\x11Час Таіці\x13Час Тай" + + "бэя(Стандартны час Тайбэя\x1eЛетні час Тайбэя\x1fЧас Таджыкістана\x15Ча" + + "с Такелау\x11Час Тонга&Стандартны час Тонга\x1cЛетні час Тонга\x0fЧас Ч" + + "уук!Час Туркменістана6Стандартны час Туркменістана,Летні час Туркменіст" + + "ана\x13Час Тувалу\x1bУругвайскі час0Уругвайскі стандартны час&Уругвайск" + + "і летні час\x1dЧас Узбекістана2Стандартны час Узбекістана(Летні час Узб" + + "екістана\x15Час Вануату*Стандартны час Вануату Летні час Вануату\x1fВен" + + "есуэльскі час#Уладзівастоцкі час8Уладзівастоцкі стандартны час.Уладзіва" + + "стоцкі летні час\x1fВалгаградскі час4Валгаградскі стандартны час*Валгаг" + + "радскі летні час\"Час станцыі Васток Час вострава Уэйк2Час астравоў Уол" + + "іс і Футуна\x13Якуцкі час(Якуцкі стандартны час\x1eЯкуцкі летні час%Ека" + + "цярынбургскі час:Екацярынбургскі стандартны час0Екацярынбургскі летні ч" + + "ас\x04вт\x04чт\x06феб\x06апр\x06мај\x06јун\x06јул\x06ауг\x06сеп\x06окт" + + "\x06нов\x06дец\x06GMT{0}\x03GMT\x04pón\x04wał\x03srj\x03stw\x04pět\x03so" + + "b\x06GMT{0}\x03GMT\x06UTC{0}\x03UTC\x1bග්\u200dරිමවේ{0}\x18ග්\u200dරිමවේ" + + "\x06GMT{0}\x03GMT\x06мар\x06апр\x06мај\x06авг\x06окт\x06мај\x06јун\x06ју" + + "л\x07тек.\x07хед.\x07тах.\x07тер.\x09єкат.\x07мег.\x09міяз.\x07ген.\x07" + + "сен.\x07хам.\x07нех.\x07паг.\x04пн\x04вт\x04ср\x04чт\x04пт\x04сб" + +var bucket9 string = "" + // Size: 22734 bytes + "\x0aPa Mulungu\x09Palichimo\x0bPalichibuli\x0bPalichitatu\x09Palichine" + + "\x0bPalichisano\x0cPachibelushi\x08uluchelo\x07akasuba\x0bBefore Yesu" + + "\x0aAfter Yesu\x02BC\x02AD\x06Inkulo\x06Umwaka\x07Umweshi\x08Umulungu" + + "\x08Ubushiku\x07Akasuba\x04Insa\x06Mineti\x07Sekondi\x03Hut\x03Vil\x03Da" + + "t\x03Tai\x03Han\x03Sit\x03Sab\x03Nan\x03Tis\x03Kum\x03Kmj\x03Kmb\x14pa m" + + "wedzi gwa hutala\x14pa mwedzi gwa wuvili\x14pa mwedzi gwa wudatu\x13pa m" + + "wedzi gwa wutai\x14pa mwedzi gwa wuhanu\x12pa mwedzi gwa sita\x12pa mwed" + + "zi gwa saba\x12pa mwedzi gwa nane\x12pa mwedzi gwa tisa\x12pa mwedzi gwa" + + " kumi\x1apa mwedzi gwa kumi na moja\x1bpa mwedzi gwa kumi na mbili\x03Mu" + + "l\x03Hiv\x03Hid\x03Hit\x03Hih\x03Lem\x0apa mulungu\x0epa shahuviluha\x09" + + "pa hivili\x09pa hidatu\x09pa hitayi\x09pa hihanu\x0fpa shahulembela\x02L" + + "1\x02L2\x02L3\x02L4\x06Lobo 1\x06Lobo 2\x06Lobo 3\x06Lobo 4\x07pamilau" + + "\x07pamunyi\x0eKabla ya Mtwaa\x0eBaada ya Mtwaa\x07Amajira\x05Mwaha\x06M" + + "wedzi\x0eMlungu gumamfu\x04Sihu\x05Igolo\x0bNeng’u ni\x06Hilawu\x0cSihud" + + "za kasi\x08Lwamelau\x03Saa\x07Sekunde\x0eAmajira ga saa\x16EEEE, d MMMM " + + "y 'г'. G\x10d MMMM y 'г'. G\x0ed.MM.y 'г'. G\x09d.MM.yy G\x06яну\x06фев" + + "\x08март\x06апр\x06май\x06юни\x06юли\x06авг\x06сеп\x06окт\x06ное\x06дек" + + "\x02я\x02ф\x02м\x02а\x02ю\x02с\x02о\x02н\x02д\x0cянуари\x10февруари\x0aа" + + "прил\x0cавгуст\x12септември\x10октомври\x0eноември\x10декември\x02п\x02" + + "в\x02ч\x0cнеделя\x14понеделник\x0eвторник\x0aсряда\x12четвъртък\x0aпетъ" + + "к\x0cсъбота\x0c1. трим.\x0c2. трим.\x0c3. трим.\x0c4. трим.\x171. триме" + + "сечие\x172. тримесечие\x173. тримесечие\x174. тримесечие\x0eполунощ\x10" + + "сутринта\x0dна обед\x10следобед\x0eвечерта\x13през нощта\x0aпр.об.\x0aс" + + "л.об.\x0dна обяд\x0cнаобед\x17преди Христа\x1eпреди новата ера\x15след " + + "Христа\x1cслед новата ера\x0aпр.Хр.\x0bпр.н.е.\x0aсл.Хр.\x0bсл.н.е.\x0c" + + "d.MM.y 'г'.\x0dd.MM.yy 'г'.\x12H:mm:ss 'ч'. zzzz\x0fH:mm:ss 'ч'. z\x0dH:" + + "mm:ss 'ч'.\x0aH:mm 'ч'.\x0aтишри\x0cхешван\x0cкислев\x0aтебет\x0aшебат" + + "\x0aадар I\x08адар\x0bадар II\x0aнисан\x06иар\x0aсиван\x0aтамуз\x04ав" + + "\x08елул\x0cчайтра\x10вайсакха\x10джаинтха\x0cасадха\x0eсравана\x0aбхада" + + "\x0cазвина\x0eкартика\x14аграхайана\x0aпауза\x0aмагха\x10пхалгуна\x0eмух" + + "арам\x0aсафар\x0aраби-1\x0aраби-2\x10джумада-1\x10джумада-2\x0cраджаб" + + "\x0aшабан\x0eрамазан\x0aШавал\x13Дхул-Каада\x13Дхул-хиджа\x06ера\x0cгоди" + + "на\x1dминалата година\x15тази година!следващата година\x19след {0} годи" + + "на\x19след {0} години\x1bпреди {0} година\x1bпреди {0} години\x0bмин. г" + + ".\x07т. г.\x0fследв. г.\x10след {0} г.\x12преди {0} г.\x09сл. г.\x0dсл. " + + "{0} г.\x0dпр. {0} г.\x14тримесечие'предходно тримесечие\x1dтова тримесеч" + + "ие%следващо тримесечие!след {0} тримесечие!след {0} тримесечия#преди {0" + + "} тримесечие#преди {0} тримесечия\x09трим.\x11мин. трим.\x12това трим." + + "\x15следв. трим.\x16след {0} трим.\x18преди {0} трим.\x13сл. {0} трим." + + "\x13пр. {0} трим.\x0aмесец\x1dпредходен месец\x13този месец\x19следващ м" + + "есец\x17след {0} месец\x19след {0} месеца\x19преди {0} месец\x1bпреди {" + + "0} месеца\x0fмин. мес.\x10този мес.\x13следв. мес.\x10след {0} м.\x12пре" + + "ди {0} м.\x0bмин. м.\x07т. м.\x09сл. м.\x0dсл. {0} м.\x0dпр. {0} м.\x0e" + + "седмица%предходната седмица\x17тази седмица#следващата седмица\x1bслед " + + "{0} седмица\x1bслед {0} седмици\x1dпреди {0} седмица\x1dпреди {0} седмиц" + + "и\x1bседмицата от {0}\x09седм.\x1fминалата седмица\x12тази седм.\x15сле" + + "дв. седм.\x16след {0} седм.\x18преди {0} седм.\x11мин. седм.\x0fсл. сед" + + "м.\x13сл. {0} седм.\x13пр. {0} седм. седмица от месеца\x06ден\x0fонзи д" + + "ен\x0aвчера\x08днес\x08утре\x12вдругиден\x13след {0} ден\x13след {0} дн" + + "и\x15преди {0} ден\x15преди {0} дни\x0cсл. {0} д\x0cпр. {0} д\x1cден от" + + " годината\x0fден от г.\x1eден от седмицата\x15ден от седм.'работен ден о" + + "т месеца\x1bраб. ден от мес.#предходната неделя\x15тази неделя!следваща" + + "та неделя\x19след {0} неделя\x19след {0} недели\x1bпреди {0} неделя\x1b" + + "преди {0} недели\x1bпредходната нд\x0dтази нд\x19следващата нд\x11след " + + "{0} нд\x13преди {0} нд\x10предх. нд\x10следв. нд\x0eсл. {0} нд\x0eпр. {0" + + "} нд+предходният понеделник\x1dтози понеделник)следващият понеделник!сле" + + "д {0} понеделник#след {0} понеделника#преди {0} понеделник%преди {0} по" + + "неделника\x1bпредходният пн\x0dтози пн\x19следващият пн\x11след {0} пн" + + "\x13преди {0} пн\x10предх. пн\x10следв. пн\x0eсл. {0} пн\x0eпр. {0} пн%п" + + "редходният вторник\x17този вторник#следващият вторник\x1bслед {0} вторн" + + "ик\x1dслед {0} вторника\x1dпреди {0} вторник\x1fпреди {0} вторника\x1bп" + + "редходният вт\x0dтози вт\x19следващият вт\x11след {0} вт\x13преди {0} в" + + "т\x10предх. вт\x10следв. вт\x0fсл. {0} вт.\x0fпр. {0} вт.!предходната с" + + "ряда\x13тази сряда\x1fследващата сряда\x17след {0} сряда\x17след {0} ср" + + "еди\x19преди {0} сряда\x19преди {0} среди\x1bпредходната ср\x0dтази ср" + + "\x19следващата ср\x11след {0} ср\x13преди {0} ср\x10предх. ср\x10следв. " + + "ср\x0eсл. {0} ср\x0eпр. {0} ср)предходният четвъртък\x1bтози четвъртък'" + + "следващият четвъртък\x1fслед {0} четвъртък!след {0} четвъртъка!преди {0" + + "} четвъртък#преди {0} четвъртъка\x1bпредходният чт\x0dтози чт\x19следващ" + + "ият чт\x11след {0} чт\x13преди {0} чт\x10предх. чт\x10следв. чт\x0eпр. " + + "{0} чт!предходният петък\x13този петък\x1fследващият петък\x17след {0} п" + + "етък\x19след {0} петъка\x19преди {0} петък\x1bпреди {0} петъка\x1bпредх" + + "одният пт\x0dтози пт\x19следващият пт\x11след {0} пт\x13преди {0} пт" + + "\x10предх. пт\x10следв. пт\x0eсл. {0} пт\x0eпр. {0} пт#предходната събот" + + "а\x15тази събота!следващата събота\x19след {0} събота\x19след {0} събот" + + "и\x1bпреди {0} събота\x1bпреди {0} съботи\x1bпредходната сб\x0dтази сб" + + "\x19следващата сб\x11след {0} сб\x13преди {0} сб\x10предх. сб\x10следв. " + + "сб\x0eсл. {0} сб\x0eпр. {0} сб\x15пр.об./сл.об.\x06час\x12в този час" + + "\x13след {0} час\x15след {0} часа\x15преди {0} час\x17преди {0} часа\x0f" + + "след {0} ч\x11преди {0} ч\x0cсл. {0} ч\x0cпр. {0} ч\x0cминута\x18в тази" + + " минута\x19след {0} минута\x19след {0} минути\x1bпреди {0} минута\x1bпре" + + "ди {0} минути\x06мин\x13след {0} мин\x15преди {0} мин\x10сл. {0} мин" + + "\x10пр. {0} мин\x08сега\x1bслед {0} секунда\x1bслед {0} секунди\x1dпреди" + + " {0} секунда\x1dпреди {0} секунди\x13след {0} сек\x15преди {0} сек\x10сл" + + ". {0} сек\x10пр. {0} сек\x15часова зона\x10час. зона:Координирано универ" + + "сално време5Британско лятно часово време2Ирландско стандартно време%Афг" + + "анистанско време1Централноафриканско време-Източноафриканско време'Южно" + + "африканско време-Западноафриканско времеBЗападноафриканско стандартно в" + + "ремеEЗападноафриканско лятно часово време\x0cАляска0Аляска – стандартно" + + " време3Аляска – лятно часово време\x1dАмазонско време2Амазонско стандарт" + + "но време5Амазонско лятно часово времеBСеверноамериканско централно врем" + + "еWСеверноамериканско централно стандартно времеZСеверноамериканско цент" + + "рално лятно часово време>Северноамериканско източно времеSСеверноамерик" + + "анско източно стандартно времеVСеверноамериканско източно лятно часово " + + "времеBСеверноамериканско планинско времеWСеверноамериканско планинско с" + + "тандартно времеZСеверноамериканско планинско лятно часово времеHСеверно" + + "американско тихоокеанско време]Северноамериканско тихоокеанско стандарт" + + "но време`Северноамериканско тихоокеанско лятно часово време\x17Анадир в" + + "реме0Анадир – стандартно време3Анадир – лятно часово време\x08Апия,Апия" + + " – стандартно време/Апия – лятно часово време\x19Арабско време.Арабско с" + + "тандартно време1Арабско лятно часово време!Аржентинско време6Аржентинск" + + "о стандартно време9Аржентинско лятно часово време/Западноаржентинско вр" + + "емеDЗападноаржентинско стандартно времеGЗападноаржентинско лятно часово" + + " време\x1bАрменско време0Арменско стандартно време3Арменско лятно часово" + + " времеHСеверноамериканско атлантическо време]Северноамериканско атлантич" + + "еско стандартно време`Северноамериканско атлантическо лятно часово врем" + + "е5Централноавстралийско времеJЦентралноавстралийско стандартно времеMЦе" + + "нтралноавстралийско лятно часово времеCАвстралия – западно централно вр" + + "емеXАвстралия – западно централно стандартно време[Австралия – западно " + + "централно лятно часово време1Източноавстралийско времеFИзточноавстралий" + + "ско стандартно времеIИзточноавстралийско лятно часово време1Западноавст" + + "ралийско времеFЗападноавстралийско стандартно времеIЗападноавстралийско" + + " лятно часово време'Азербайджанско време<Азербайджанско стандартно време" + + "?Азербайджанско лятно часово време\x1dАзорски островиAАзорски острови – " + + "стандартно времеDАзорски острови – лятно часово време!Бангладешко време" + + "6Бангладешко стандартно време9Бангладешко лятно часово време\x1bБутанско" + + " време\x1fБоливийско време\x1dБразилско време2Бразилско стандартно време" + + "5Бразилско лятно часово време!Бруней Даруссалам\x13Кабо Верде7Кабо Верде" + + " – стандартно време:Кабо Верде – лятно часово време\x1bЧаморско време" + + "\x1bЧатъмско време0Чатъмско стандартно време3Чатъмско лятно часово време" + + "\x1bЧилийско време0Чилийско стандартно време3Чилийско лятно часово време" + + "\x1bКитайско време0Китайско стандартно време3Китайско лятно часово време" + + "#Чойбалсанско време8Чойбалсанско стандартно време;Чойбалсанско лятно час" + + "ово време\x1fОстров Рождество\x1fКокосови острови!Колумбийско време6Кол" + + "умбийско стандартно време9Колумбийско лятно часово време\x15Острови Кук" + + "9Острови Кук – стандартно време<Острови Кук – лятно часово време\x1bКуби" + + "нско време0Кубинско стандартно време3Кубинско лятно часово време\x0cДей" + + "вис\x17Дюмон Дюрвил)Източнотиморско време#Великденски островGВеликденск" + + "и остров – стандартно времеJВеликденски остров – лятно часово време\x1f" + + "Еквадорско време1Централноевропейско времеFЦентралноевропейско стандарт" + + "но времеIЦентралноевропейско лятно часово време-Източноевропейско време" + + "BИзточноевропейско стандартно времеEИзточноевропейско лятно часово време" + + "<Далечно източноевропейско време-Западноевропейско времеBЗападноевропейс" + + "ко стандартно време8Западноевропейско лятно време%Фолклендски островиIФ" + + "олклендски острови – стандартно времеLФолклендски острови – лятно часов" + + "о време\x1dФиджийско време2Фиджийско стандартно време5Фиджийско лятно ч" + + "асово време\x1bФренска ГвианаHФренски южни и антарктически територии!Га" + + "лапагоско време\x0cГамбие\x1dГрузинско време2Грузинско стандартно време" + + "5Грузинско лятно часово време\x1dОстрови Гилбърт*Средно гринуичко време/" + + "Източногренландско времеDИзточногренландско стандартно времеGИзточногре" + + "нландско лятно часово време/Западногренландско времеDЗападногренландско" + + " стандартно времеGЗападногренландско лятно часово време\x1dПерсийски зал" + + "ив\x0aГаяна,Хавайско-алеутско времеAХавайско-алеутско стандартно времеD" + + "Хавайско-алеутско лятно часово време\x1fХонконгско време4Хонконгско ста" + + "ндартно време7Хонконгско лятно часово време\x19Ховдско време.Ховдско ст" + + "андартно време1Ховдско лятно часово време\x1bИндийско време\x1bИндийски" + + " океан#Индокитайско време5Централноиндонезийско време1Източноиндонезийск" + + "о време1Западноиндонезийско време\x19Иранско време.Иранско стандартно в" + + "реме1Иранско лятно часово време\x1bИркутско време0Иркутско стандартно в" + + "реме3Иркутско лятно часово време\x1dИзраелско време2Израелско стандартн" + + "о време5Израелско лятно часово време\x19Японско време.Японско стандартн" + + "о време1Японско лятно часово време8Петропавловск-Камчатски времеMПетроп" + + "авловск-Камчатски стандартно времеTПетропавловск-Камчатски – лятно часо" + + "во време1Източноказахстанско време1Западноказахстанско време\x1bКорейск" + + "о време0Корейско стандартно време3Корейско лятно часово време\x0cКошрай" + + "!Красноярско време6Красноярско стандартно време9Красноярско лятно часово" + + " време%Киргизстанско време'Екваториални острови\x0fЛорд Хау3Лорд Хау – с" + + "тандартно време6Лорд Хау – лятно часово време\x10Маккуори\x1fМагаданско" + + " време4Магаданско стандартно време7Магаданско лятно часово време!Малайзи" + + "йско време\x1dМалдивско време\x1fМаркизки острови!Маршалови острови\x10" + + "Мавриций4Мавриций – стандартно време7Мавриций – лятно часово време\x0cМ" + + "оусън<Северозападно мексиканско времеQСеверозападно стандартно мексикан" + + "ско времеTСеверозападно лятно часово мексиканско време:Мексиканско тихо" + + "океанско времеOМексиканско тихоокеанско стандартно времеRМексиканско ти" + + "хоокеанско лятно часово време#Уланбаторско време8Уланбаторско стандартн" + + "о време;Уланбаторско лятно часово време\x1dМосковско време2Московско ст" + + "андартно време5Московско лятно часово време\x1fМианмарско време\x0aНаур" + + "у\x1bНепалско време'Новокаледонско време<Новокаледонско стандартно врем" + + "е?Новокаледонско лятно часово време%Новозеландско време:Новозеландско с" + + "тандартно време=Новозеландско лятно часово време'Нюфаундлендско време<Н" + + "юфаундлендско стандартно време?Нюфаундлендско лятно часово време\x08Ниу" + + "е\x1fНорфолкско време\"Фернандо де НороняFФернандо де Нороня – стандарт" + + "но времеIФернандо де Нороня – лятно часово време#Новосибирско време8Нов" + + "осибирско стандартно време;Новосибирско лятно часово време\x15Омско вре" + + "ме*Омско стандартно време-Омско лятно часово време!Пакистанско време6Па" + + "кистанско стандартно време9Пакистанско лятно часово време\x0aПалау Папу" + + "а Нова Гвинея!Парагвайско време6Парагвайско стандартно време9Парагвайск" + + "о лятно часово време\x1dПеруанско време2Перуанско стандартно време5Перу" + + "анско лятно часово време\x1fФилипинско време4Филипинско стандартно врем" + + "е7Филипинско лятно часово време\x1bОстрови Феникс!Сен Пиер и МикелонEСе" + + "н Пиер и Микелон – стандартно времеHСен Пиер и Микелон – лятно часово в" + + "реме\x0eПиткерн\x0cПонапе\x1dПхенянско време\x0eРеюнион\x0cРотера\x1fСа" + + "халинско време4Сахалинско стандартно време7Сахалинско лятно часово врем" + + "е\x17Самара време0Самара – стандартно време3Самара – лятно часово време" + + "\x1dСамоанско време2Самоанско стандартно време5Самоанско лятно часово вр" + + "еме\x0eСейшели!Сингапурско време#Соломонови острови\x19Южна Джорджия" + + "\x1fСуринамско време\x08Шова\x1dТаитянско време\x0aТайпе.Тайпе – стандар" + + "тно време1Тайпе – лятно часово време'Таджикистанско време\x0eТокелау" + + "\x0aТонга.Тонга – стандартно време1Тонга – лятно часово време\x08Чуюк)Ту" + + "ркменистанско време>Туркменистанско стандартно времеAТуркменистанско ля" + + "тно часово време\x0cТувалу\x1fУругвайско време4Уругвайско стандартно вр" + + "еме7Уругвайско лятно часово време%Узбекистанско време:Узбекистанско ста" + + "ндартно време=Узбекистанско лятно часово време\x0eВануату2Вануату – ста" + + "ндартно време5Вануату – лятно часово време!Венецуелско време'Владивосто" + + "кско време<Владивостокско стандартно време?Владивостокско лятно часово " + + "време#Волгоградско време8Волгоградско стандартно време;Волгоградско лят" + + "но часово време\x0cВосток\x15Остров Уейк\x1aУолис и Футуна\x19Якутско в" + + "реме2Якутскско стандартно време5Якутскско лятно часово време)Екатеринбу" + + "ргско време>Екатеринбургско стандартно времеAЕкатеринбургско лятно часо" + + "во време\x02AD\x02AD\x04Ngat\x03Taa\x03Iwo\x03Mam\x03Paa\x03Nge\x03Roo" + + "\x03Bur\x03Epe\x03Kpt\x03Kpa\x02AD\x06н.е.\x0aтевет\x0aшеват\x08ијар\x06" + + "Adar I\x10ваисакха\x10джанштха\x0eсравана\x0cбхадра\x0eкартика\x03Jtt" + + "\x03Jnn\x03Jtn\x03Alh\x03Iju\x03Jmo\x03Ati\x03Ata\x03Ala\x03Alm\x03Alz" + + "\x03Asi\x02AD\x10джайстха\x0eшравана\x0cасвіна\x0eкартіка\x12аграхаяна" + + "\x0aпауса\x10фальгуна\x02AD" + +var bucket10 string = "" + // Size: 25279 bytes + "\x03zan\x03feb\x03mar\x03awi\x03mɛ\x03zuw\x03zul\x03uti\x04sɛt\x04ɔku" + + "\x03now\x03des\x07zanwuye\x08feburuye\x06marisi\x07awirili\x06zuwɛn\x06z" + + "uluye\x0asɛtanburu\x0bɔkutɔburu\x09nowanburu\x09desanburu\x01Z\x01F\x01M" + + "\x01A\x01U\x01S\x02Ɔ\x01N\x01D\x03kar\x04ntɛ\x03tar\x03ara\x03ala\x03jum" + + "\x03sib\x04kari\x07ntɛnɛ\x06tarata\x05araba\x07alamisa\x04juma\x06sibiri" + + "\x03KS1\x03KS2\x03KS3\x03KS4\x10kalo saba fɔlɔ\x11kalo saba filanan\x11k" + + "alo saba sabanan\x12kalo saba naaninan\x11jezu krisiti ɲɛ\x13jezu krisit" + + "i minkɛ\x0aJ.-C. ɲɛ\x08ni J.-C.\x04tile\x03san\x04kalo\x09dɔgɔkun\x03don" + + "\x04kunu\x02bi\x04sini\x15sɔgɔma/tile/wula/su\x06lɛrɛ\x06miniti\x07sekon" + + "di\x0esigikun tilena\x0cটাউট\x0cবাবা\x0cহাটর\x12কিয়াক\x0cটোবা\x0fআমশির" + + "\x18বারামহাট\x18বারামৌডা\x18বাসহান্স\x0fপাওনা\x0cএপেপ\x12মেশ্রা\x12ন্যাশ" + + "ি\x03১\x03২\x03৩\x03৪\x03৫\x03৬\x03৭\x03৮\x03৯\x06১০\x06১১\x06১২\x06১৩" + + "\x04Toba\x0dযুগ ০\x0dযুগ ১\x1bমাস্কেরেম\x12টেকেমট\x0fহিডার\x12তাহসাস\x09" + + "টের\x1bইয়েকাটিট\x15মেগাবিট\x1eমিয়াজিয়া\x0fগেনবট\x0cসিনি\x15হ্যামলি" + + "\x12নেহাসে\x15পাগুমেন\x11EEEE, d MMMM, y G\x0bd MMMM, y G\x06জা\x06ফে" + + "\x06মা\x03এ\x06মে\x09জুন\x06জু\x03আ\x06সে\x03অ\x03ন\x06ডি\x1bজানুয়ারী!ফ" + + "েব্রুয়ারী\x0fমার্চ\x12এপ্রিল\x0fজুলাই\x0fআগস্ট\x1eসেপ্টেম্বর\x15অক্টো" + + "বর\x15নভেম্বর\x18ডিসেম্বর\x09রবি\x09সোম\x0fমঙ্গল\x09বুধ\x18বৃহস্পতি" + + "\x0fশুক্র\x09শনি\x03র\x06সো\x03ম\x06বু\x06বৃ\x06শু\x03শ\x06রঃ\x09সোঃ\x06" + + "মঃ\x09বুঃ\x09বৃঃ\x09শুঃ\x09শোঃ\x12রবিবার\x12সোমবার\x18মঙ্গলবার\x12বুধব" + + "ার!বৃহস্পতিবার\x18শুক্রবার\x12শনিবার!বৃহষ্পতিবার\x1bত্রৈমাসিক4দ্বিতীয়" + + " ত্রৈমাসিক.তৃতীয় ত্রৈমাসিক.চতুর্থ ত্রৈমাসিক\x09ভোর\x0cসকাল\x0fদুপুর\x0f" + + "বিকাল\x15সন্ধ্যা\x12রাত্রি\x18রাত্রিতে$খ্রিস্টপূর্ব0খ্রিষ্টপূর্বাব্দ!খ" + + "্রীষ্টাব্দ!খ্রিষ্টাব্দ\x1bখৃষ্টাব্দ\x0fতিশরি\x12হেশভান\x12কিসলেভ\x0fতে" + + "ভেত\x0fশেভাত\x0eআডার I\x0cআডার\x0fআডার II\x0fনিশান\x0fআয়ার\x0fসিভান" + + "\x0fতামুজ\x02Av\x0cএলুল\x0fচৈত্র\x0fবৈশাখ\x15জৈষ্ঠ্য\x0fআষাঢ়\x12শ্রাবণ" + + "\x0fভাদ্র\x12আশ্বিন\x15কার্তিক\x1bঅগ্রহায়ণ\x09পৌষ\x09মাঘ\x15ফাল্গুন\x09" + + "সাল\x0fমহররম\x09সফর\"রবিউল আউয়াল\x1cরবিউস সানি(জমাদিউল আউয়াল\"জমাদিউ" + + "স সানি\x09রজব\x12শা‘বান\x0fরমজান\x15শাওয়াল\x15জ্বিলকদ\x1bজ্বিলহজ্জ!ফ্" + + "যাভার্ডিন!অরডিবেহেশ্ত\x15খোর্দ্দ\x09তীর\x12মর্যাদ\x18শাহরিবার\x0fমেহের" + + "\x0cআবান\x0cআজার\x06দে\x12বাহমান\x1bএসফ্যান্ড\x0fবাজার\x10আগে R.O.C.\x1b" + + "মিঙ্গুয়া\x09বছর\x10গত বছর\x10এই বছর\x16পরের বছর\x10{0} বছরে {0} বছর প" + + "ূর্বে\"গত ত্রৈমাসিক\"এই ত্রৈমাসিক(পরের ত্রৈমাসিক\"{0} ত্রৈমাসিকে){0} ত" + + "্রৈমাসিক আগে\x09মাস\x10গত মাস\x10এই মাস\x16পরের মাস\x10{0} মাসে\x17{0}" + + " মাস আগে\x19গত সপ্তাহ\x19এই সপ্তাহ\x1fপরের সপ্তাহ\x19{0} সপ্তাহে {0} সপ্" + + "তাহ আগে {0} তম সপ্তাহে {0} এর সপ্তাহে\"মাসের সপ্তাহ\x13গত পরশু\x0fগতকা" + + "ল\x06আজ\x18আগামীকাল\x1cআগামী পরশু#{0} দিনের মধ্যে\x17{0} দিন আগে\x19বছ" + + "রের দিন\"সপ্তাহের দিন,মাসের কার্য দিবস\x19গত রবিবার\x19এই রবিবার\x1fপর" + + "ের রবিবার\x1f{0} রবিবারেতে {0} রবিবার আগে\x19গত সোমবার\x19এই সোমবার" + + "\x1fপরের সোমবার\x1f{0} সোমবারেতে {0} সোমবার আগে\x1fগত মঙ্গলবার\x1fএই মঙ্" + + "গলবার%পরের মঙ্গলবার\x1f{0} মঙ্গলবারে&{0} মঙ্গলবার আগে\x19গত বুধবার\x19" + + "এই বুধবার\x1fপরের বুধবার\x19{0} বুধবারে {0} বুধবার আগে(গত বৃহস্পতিবার(" + + "এই বৃহস্পতিবার.পরের বৃহস্পতিবার({0} বৃহস্পতিবারে/{0} বৃহস্পতিবার আগে" + + "\x1fগত শুক্রবার\x1fএই শুক্রবার%পরের শুক্রবার\x1f{0} শুক্রবারে&{0} শুক্রব" + + "ার আগে\x19গত শনিবার\x19এই শনিবার\x1fপরের শনিবার\x19{0} শনিবারে {0} শনি" + + "বার আগে\x1cএই ঘণ্টায়\x19{0} ঘন্টায়\x1d{0} ঘন্টা আগে\x16এই মিনিট\x16{" + + "0} মিনিটে\x1d{0} মিনিট আগে\x15সেকেন্ড\x09এখন\x1c{0} সেকেন্ডে,{0} সেকেন্ড" + + " পূর্বে#{0} সেকেন্ড আগে\x1cসময় অঞ্চল\x0fঅঞ্চল\x10{0} সময়&{0} দিবালোক স" + + "ময়\x1d{0} মানক সময়Mস্থানাংকিত আন্তর্জাতিক সময়Gব্রিটিশ গ্রীষ্মকালীন " + + "সময়)আইরিশ মানক সময়\x16একর সময়#একর মানক সময়5একর গ্রীষ্মকাল সময়.আফগ" + + "ানিস্তান সময়/মধ্য আফ্রিকা সময়2পূর্ব আফ্রিকা সময়Bদক্ষিণ আফ্রিকা মানক" + + " সময়5পশ্চিম আফ্রিকা সময়Bপশ্চিম আফ্রিকা মানক সময়Zপশ্চিম আফ্রিকা গ্রীষ্" + + "মকালীন সময়\"আলাস্কা সময়/আলাস্কা মানক সময়8আলাস্কা দিবালোক সময়\"আল্ম" + + "াটি সময়/আল্মাটি মানক সময়Aআল্মাটি গ্রীষ্মকাল সময়%অ্যামাজন সময়)আমাজন" + + " মানক সময়Jঅ্যামাজন গ্রীষ্মকালীন সময়+কেন্দ্রীয় সময়8কেন্দ্রীয় মানক সম" + + "য়Aকেন্দ্রীয় দিবালোক সময়4পূর্বাঞ্চলীয় সময়Dপূর্বাঞ্চলের প্রমাণ সময়" + + "Gপূর্বাঞ্চলের দিবালোক সময়;পার্বত্য অঞ্চলের সময়Nপার্বত্য অঞ্চলের প্রমাণ" + + " সময়Kপার্বত্য অঞ্চলের দিনের সময়Zপ্রশান্ত মহাসাগরীয় অঞ্চলের সময়gপ্রশা" + + "ন্ত মহাসাগরীয় অঞ্চলের মানক সময়jপ্রশান্ত মহাসাগরীয় অঞ্চলের দিনের সময" + + "়%অনদ্য্র্ সময়2অনদ্য্র্ মানক সময়Jঅনদ্য্র্ গ্রীষ্মকালীন সময়\x1fঅপিয়" + + "া সময়,অপিয়া মানক সময়/অপিয়া দিনের সময়\x1cআকটাও সময়)আকটাও মানক সময" + + "়;আকটাও গ্রীষ্মকাল সময়\x1cআকটোব সময়)আকটোব মানক সময়;আকটোব গ্রীষ্মকাল" + + " সময়\x19আরবি সময়&আরবি মানক সময়/আরবি দিবালোক সময়.আর্জেন্টিনা সময়;আর্" + + "জেন্টিনা মানক সময়Sআর্জেন্টিনা গ্রীষ্মকালীন সময়Dপশ্চিমি আর্জেন্টিনা স" + + "ময়Wপশ্চিমি আর্জেনটিনার প্রমাণ সময়fপশ্চিমি আর্জেনটিনা গ্রীষ্মকালীন সম" + + "য়+আর্মেনিয়া সময়8আর্মেনিয়া মানক সময়Pআর্মেনিয়া গ্রীষ্মকালীন সময়.অ" + + "তলান্তিকের সময়5অতলান্তিক মানক সময়>অতলান্তিক দিবালোক সময়Mকেন্দ্রীয় " + + "অস্ট্রেলীয় সময়Zঅস্ট্রেলীয় কেন্দ্রীয় মানক সময়cঅস্ট্রেলীয় কেন্দ্রী" + + "য় দিবালোক সময়cঅস্ট্রেলীয় কেন্দ্রীয় পশ্চিমি সময়pঅস্ট্রেলীয় কেন্দ্" + + "রীয় পশ্চিমি মানক সময়yঅস্ট্রেলীয় কেন্দ্রীয় পশ্চিমি দিবালোক সময়>পূর" + + "্ব অস্ট্রেলীয় সময়Kঅস্ট্রেলীয় পূর্ব মানক সময়Tঅস্ট্রেলীয় পূর্ব দিবা" + + "লোক সময়Dপশ্চিমি অস্ট্রেলীয় সময়Qঅস্ট্রেলীয় পশ্চিমি মানক সময়Zঅস্ট্র" + + "েলীয় পশ্চিমি দিবালোক সময়+আজারবাইজান সময়8আজারবাইজান মানক সময়Pআজারবা" + + "ইজান গ্রীষ্মকালীন সময়\x1fএজোরেস সময়,এজোরেস মানক সময়Dএজোরেস গ্রীষ্মক" + + "ালীন সময়%বাংলাদেশ সময়2বাংলাদেশ মানক সময়Jবাংলাদেশ গ্রীষ্মকালীন সময়" + + "\x1cভুটান সময়(বোলিভিয়া সময়.ব্রাসিলিয়া সময়;ব্রাসিলিয়া মানক সময়Sব্র" + + "াসিলিয়া গ্রীষ্মকালীন সময়Aব্রুনেই দারুসসালাম সময়&কেপ ভার্দ সময়3কেপ " + + "ভার্দ মানক সময়Kকেপ ভার্দ গ্রীষ্মকালীন সময়,চামেরো মানক সময়\"চ্যাথাম " + + "সময়/চ্যাথাম মানক সময়8চ্যাথাম দিবালোক সময়\x19চিলি সময়&চিলি মানক সময" + + "়>চিলি গ্রীষ্মকালীন সময়\x16চীন সময়#চীন মানক সময়,চীন দিবালোক সময়%চয" + + "়বালসন সময়2চয়বালসন মানক সময়Jচয়বালসন গ্রীষ্মকালীন সময়5ক্রিসমাস দ্ব" + + "ীপ সময়;কোকোস দ্বীপপুঞ্জ সময়.কোলোম্বিয়া সময়;কোলোম্বিয়া মানক সময়Sক" + + "োলোম্বিয়া গ্রীষ্মকালীন সময়5কুক দ্বীপপুঞ্জ সময়Bকুক দ্বীপপুঞ্জ মানক স" + + "ময়mকুক দ্বীপপুঞ্জ অর্ধেক গ্রীষ্মকালীন সময়\x1fকিউবার সময়)কিউবা মানক " + + "সময়2কিউবা দিবালোক সময়\x1cডেভিস সময়>ডুমন্ট-দ্য’উরভিলে সময়)পূর্ব টিম" + + "র সময়/ইস্টার দ্বীপ সময়<ইস্টার দ্বীপ মানক সময়Tইস্টার দ্বীপ গ্রীষ্মকা" + + "লীন সময়%ইকুয়েডর সময়2মধ্য ইউরোপীয় সময়?মধ্য ইউরোপীয় মানক সময়Wমধ্য" + + " ইউরোপীয় গ্রীষ্মকালীন সময়5পূর্ব ইউরোপীয় সময়Bপূর্ব ইউরোপীয় মানক সময়" + + "Zপূর্ব ইউরোপীয় গ্রীষ্মকালীন সময়Nঅতিরিক্ত-পূর্ব ইউরোপীয় সময়8পশ্চিম ইউ" + + "রোপীয় সময়Eপশ্চিম ইউরোপীয় মানক সময়]পশ্চিম ইউরোপীয় গ্রীষ্মকালীন সময" + + "়Gফকল্যান্ড দ্বীপপুঞ্জ সময়Tফকল্যান্ড দ্বীপপুঞ্জ মানক সময়lফকল্যান্ড দ" + + "্বীপপুঞ্জ গ্রীষ্মকালীন সময়\x19ফিজি সময়&ফিজি মানক সময়>ফিজি গ্রীষ্মকা" + + "লীন সময়2ফরাসি গায়ানা সময়[ফরাসি দক্ষিণ এবং আন্টার্কটিক সময়(গালাপাগো" + + "স সময়1গ্যাম্বিয়ার সময়%জর্জিয়া সময়2জর্জিয়া মানক সময়Jজর্জিয়া গ্র" + + "ীষ্মকালীন সময়Dগিলবার্ট দ্বীপপুঞ্জ সময়,গ্রীনিচ মিন টাইমAপূর্ব গ্রীনল্" + + "যান্ড সময়Nপূর্ব গ্রীনল্যান্ড মানক সময়fপূর্ব গ্রীনল্যান্ড গ্রীষ্মকালী" + + "ন সময়Dপশ্চিম গ্রীনল্যান্ড সময়Qপশ্চিম গ্রীনল্যান্ড মানক সময়iপশ্চিম গ" + + "্রীনল্যান্ড গ্রীষ্মকালীন সময়)গুয়াম মান সময়5উপসাগরীয় মানক সময়\"গুয" + + "়ানা সময়Jহাওয়াই অ্যালিউটিয়ান সময়?হাওয়াই-আলেউত মানক সময়Hহাওয়াই-আ" + + "লেউত দিবালোক সময়\x1aহং কং সময়'হং কং মানক সময়?হং কং গ্রীষ্মকালীন সময" + + "়\x19হোভড সময়&হোভড মানক সময়>হোভড গ্রীষ্মকালীন সময়/ভারতীয় মানক সময়" + + "8ভারত মহাসাগরীয় সময়%ইন্দোচীন সময়Pকেন্দ্রীয় ইন্দোনেশিয়া সময়Aপূর্ব ই" + + "ন্দোনেশিয়া সময়Gপশ্চিমী ইন্দোনেশিয়া সময়\x19ইরান সময়&ইরান মানক সময়" + + "/ইরান দিবালোক সময়%ইরকুটস্ক সময়2ইরকুটস্ক মানক সময়Jইরকুটস্ক গ্রীষ্মকালী" + + "ন সময়%ইজরায়েল সময়2ইজরায়েল মানক সময়;ইজরায়েল দিবালোক সময়\x1cজাপান" + + " সময়)জাপান মানক সময়2জাপান দিবালোক সময়fপিত্রেপ্যাভলস্ক- ক্যামচ্যাটস্কি" + + " সময়pপিত্রেপ্যাভলস্ক- ক্যামচ্যাটস্কি মান সময়\x85পিত্রেপ্যাভলস্ক- ক্যাম" + + "চ্যাটস্কি গৃষ্মকালীন সময়>পূর্ব কাজাখাস্তান সময়Aপশ্চিম কাজাখাস্তান সম" + + "য়%কোরিয়ান সময়2কোরিয়ান মানক সময়;কোরিয়ান দিবালোক সময়\x1fকোসরেই সম" + + "য়=ক্রাসনোয়ার্স্কি সময়Jক্রাসনোয়ার্স্কি মানক সময়bক্রাসনোয়ার্স্কি গ" + + "্রীষ্মকালীন সময়+কিরগিস্তান সময়\x1cলঙ্কা সময়8লাইন দ্বীপপুঞ্জ সময়,লর" + + "্ড হাওয়ে সময়9লর্ড হাওয়ে মানক মসয়Bলর্ড হাওয়ে দিবালোক মসয়\x1cমাকাও" + + " সময়&মাকাও মান সময়;মাকাও গ্রীষ্মকাল সময়8ম্যাককুরি দ্বীপ সময়(ম্যাগাডা" + + "ন সময়5ম্যাগাডান মানক সময়Mম্যাগাডান গ্রীষ্মকালীন সময়.মালয়েশিয়া সময" + + "়%মালদ্বীপ সময়(মার্কেসাস সময়Aমার্শাল দ্বীপপুঞ্জ সময়\x1fমরিশাস সময়," + + "মরিশাস মানক সময়Dমরিশাস গ্রীষ্মকালীন সময়\x16মসন সময়Jউত্তরপশ্চিম মেক্" + + "সিকোর সময়Wউত্তরপশ্চিম মেক্সিকোর মানক সময়Zউত্তরপশ্চিম মেক্সিকোর দিনের" + + " সময়`মেক্সিকান প্রশান্ত মহাসাগরীয় সময়jমেক্সিকান প্রশান্ত মহসাগরীয় মা" + + "নক সময়vমেক্সিকান প্রশান্ত মহাসাগরীয় দিবালোক সময়)উলান বাতোর সময়6উলা" + + "ন বাতোর মানক সময়Nউলান বাতোর গ্রীষ্মকালীন সময়\x1cমস্কো সময়)মস্কো মান" + + "ক সময়Aমস্কো গ্রীষ্মকালীন সময়(মায়ানমার সময়\x1cনাউরু সময়\x1cনেপাল স" + + "ময়>নিউ ক্যালেডোনিয়া সময়Kনিউ ক্যালেডোনিয়া মানক সময়cনিউ ক্যালেডোনিয" + + "়া গ্রীষ্মকালীন সময়1নিউজিল্যান্ড সময়>নিউজিল্যান্ড মানক সময়Gনিউজিল্য" + + "ান্ড দিবালোক সময়=নিউফাউন্ডল্যান্ড সময়Jনিউফাউন্ডল্যান্ড মানক সময়Sনিউ" + + "ফাউন্ডল্যান্ড দিবালোক সময়\x19নিউই সময়,নরফোক দ্বীপ সময়Hফার্নান্দো ডি" + + " নোরোনহা সময়Uফার্নান্দো ডি নোরোনহা মানক সময়mফার্নান্দো ডি নোরোনহা গ্রী" + + "ষ্মকালীন সময়Kউত্তর মেরিন দ্বীপপুঞ্জ সময়4নোভোসিবির্স্ক সময়Aনোভোসিবির" + + "্স্ক মানক সময়Yনোভোসিবির্স্ক গ্রীষ্মকালীন সময়\x1cওমস্ক সময়)ওমস্ক মান" + + "ক সময়Aওমস্ক গ্রীষ্মকালীন সময়(পাকিস্তান সময়5পাকিস্তান মানক সময়Mপাকি" + + "স্তান গ্রীষ্মকালীন সময়\x1cপালাউ সময়9পাপুয়া নিউ গিনি সময়.প্যারাগুয়" + + "ে সময়;প্যারাগুয়ে মানক সময়Sপ্যারাগুয়ে গ্রীষ্মকালীন সময়\x19পেরু সময" + + "়&পেরু মানক সময়>পেরু গ্রীষ্মকালীন সময়%ফিলিপাইন সময়2ফিলিপাইন মানক সম" + + "য়Jফিলিপাইন গ্রীষ্মকালীন সময়Aফোনিক্স দ্বীপপুঞ্জ সময়Fসেন্ট পিয়ের ও ম" + + "িকেলন সময়Sসেন্ট পিয়ের ও মিকেলন মানক সময়\\সেন্ট পিয়ের ও মিকেলন দিবা" + + "লোক সময়.পিটকেয়ার্ন সময়\x1fপোনাপে সময়+পিয়ংইয়াং সময়+কিজিলোর্ডা সম" + + "য়5কিজিলোর্ডা মান সময়Jকিজিলোর্ডা গ্রীষ্মকাল সময়(রিইউনিয়ন সময়\x1cরথ" + + "েরা সময়\"সাখালিন সময়/সাখালিন মানক সময়Gসাখালিন গ্রীষ্মকালীন সময়\x1f" + + "সামারা সময়)সামারা মান সময়>সামারা গৃষ্মকালীন সময়\"সামোয়া সময়/সামোয" + + "়া মানক সময়8সামোয়া দিবালোক সময়\x1fসেশেলস সময়5সিঙ্গাপুর মানক সময়;স" + + "লোমন দ্বীপপুঞ্জ সময়8দক্ষিণ জর্জিয়া সময়\"সুরিনাম সময়(সায়োওয়া সময়" + + "\x1fতাহিতি সময়\x1fতাইপেই সময়,তাইপেই মানক সময়5তাইপেই দিবালোক সময়.তাজা" + + "খাস্তান সময়\"টোকেলাউ সময়\x1fটোঙ্গা সময়,টোঙ্গা মানক সময়Dটোঙ্গা গ্রী" + + "ষ্মকালীন সময়\x16চুক সময়7তুর্কমেনিস্তান সময়Dতুর্কমেনিস্তান মানক সময়" + + "\\তুর্কমেনিস্তান গ্রীষ্মকালীন সময়\x1fটুভালু সময়%উরুগুয়ে সময়2উরুগুয়ে" + + " মানক সময়Jউরুগুয়ে গ্রীষ্মকালীন সময়.উজবেকিস্তান সময়;উজবেকিস্তান মানক " + + "সময়Sউজবেকিস্তান গ্রীষ্মকালীন সময়(ভানুয়াতু সময়5ভানুয়াতু মানক সময়M" + + "ভানুয়াতু গ্রীষ্মকালীন সময়.ভেনেজুয়েলা সময়.ভ্লাদিভস্তক সময়;ভ্লাদিভস" + + "্তক মানক সময়Sভ্লাদিভস্তক গ্রীষ্মকালীন সময়(ভলগোগ্রাড সময়5ভলগোগ্রাড ম" + + "ানক সময়Mভলগোগ্রাড গ্রীষ্মকালীন সময়\x19ভসটক সময়,ওয়েক দ্বীপ সময়?ওয়" + + "ালিস এবং ফুটুনা সময়.ইয়াকুটাস্ক সময়;ইয়াকুটাস্ক মানক সময়Sইয়াকুটাস্" + + "ক গ্রীষ্মকালীন সময়=ইয়েকাতেরিনবুর্গ সময়Jইয়েকাতেরিনবুর্গ মানক সময়bই" + + "য়েকাতেরিনবুর্গ গ্রীষ্মকালীন সময়\x03fev\x03mar\x03avr\x02me\x03zin" + + "\x03zil\x03out\x03sep\x03okt\x03nov\x03des\x06wɛlɛ\x04sina" + +var bucket11 string = "" + // Size: 10124 bytes + "\x03IST6G སྤྱི་ལོ་y MMMMའི་ཚེས་d#G y ལོའི་MMMཚེས་d\x0cཟླ་༡\x0cཟླ་༢\x0cཟླ" + + "་༣\x0cཟླ་༤\x0cཟླ་༥\x0cཟླ་༦\x0cཟླ་༧\x0cཟླ་༨\x0cཟླ་༩\x0fཟླ་༡༠\x0fཟླ་༡༡" + + "\x0fཟླ་༡༢\x1eཟླ་བ་དང་པོ!ཟླ་བ་གཉིས་པ!ཟླ་བ་གསུམ་པ\x1eཟླ་བ་བཞི་པ\x1bཟླ་བ་ལྔ" + + "་པ!ཟླ་བ་དྲུག་པ!ཟླ་བ་བདུན་པ$ཟླ་བ་བརྒྱད་པ\x1eཟླ་བ་དགུ་པ\x1eཟླ་བ་བཅུ་པ-ཟླ" + + "་བ་བཅུ་གཅིག་པ-ཟླ་བ་བཅུ་གཉིས་པ!ཟླ་བ་དང་པོ་$ཟླ་བ་གཉིས་པ་$ཟླ་བ་གསུམ་པ་!ཟླ" + + "་བ་བཞི་པ་\x1eཟླ་བ་ལྔ་པ་$ཟླ་བ་དྲུག་པ་$ཟླ་བ་བདུན་པ་'ཟླ་བ་བརྒྱད་པ་!ཟླ་བ་ད" + + "གུ་པ་!ཟླ་བ་བཅུ་པ་0ཟླ་བ་བཅུ་གཅིག་པ་0ཟླ་བ་བཅུ་གཉིས་པ་\x0fཉི་མ་\x0fཟླ་བ་" + + "\x18མིག་དམར་\x12ལྷག་པ་\x15ཕུར་བུ་\x12པ་སངས་\x15སྤེན་པ་\x06ཉི\x06ཟླ\x09མི" + + "ག\x09ལྷག\x09ཕུར\x09སངས\x0cསྤེན\x1bགཟའ་ཉི་མ་\x1bགཟའ་ཟླ་བ་$གཟའ་མིག་དམར་" + + "\x1eགཟའ་ལྷག་པ་!གཟའ་ཕུར་བུ་\x1eགཟའ་པ་སངས་!གཟའ་སྤེན་པ་-དུས་ཚིགས་དང་པོ།0དུས" + + "་ཚིགས་གཉིས་པ།0དུས་ཚིགས་གསུམ་པ།-དུས་ཚིགས་བཞི་པ།\x15སྔ་དྲོ་\x18ཕྱི་དྲོ་'" + + "སྤྱི་ལོ་སྔོན་\x18སྤྱི་ལོ་\"y MMMMའི་ཚེས་d, EEEE4སྤྱི་ལོ་y MMMMའི་ཚེས་d" + + "!y ལོའི་MMMཚེས་d\x15ལོ་རིམ།\x09ལོ།\x1bགཟའ་འཁོར།\x0cཉིན།\x15ཁས་ཉིན་\x0fཁས" + + "་ས་\x15དེ་རིང་\x15སང་ཉིན་\x1bགནངས་ཉིན་'གཟའ་འཁོར་གཅིག.སྔ་དྲོ། ཕྱི་དྲོ།" + + "\x15ཆུ་ཚོད་\x12སྐར་མ།\x12སྐར་ཆ།\x18དུས་ཚོད།\x04Gen.\x07Cʼhwe.\x05Meur." + + "\x04Ebr.\x03Mae\x05Mezh.\x05Goue.\x04Eost\x05Gwen.\x04Here\x02Du\x04Kzu." + + "\x0201\x0202\x0203\x0204\x0205\x0206\x0207\x0208\x0209\x0210\x0211\x0212" + + "\x06Genver\x0aCʼhwevrer\x06Meurzh\x05Ebrel\x08Mezheven\x06Gouere\x08Gwen" + + "golo\x05Kerzu\x04Ker.\x03Sul\x03Lun\x04Meu.\x04Mer.\x04Yaou\x04Gwe.\x04S" + + "ad.\x02Su\x01L\x02Mz\x02Mc\x01Y\x01G\x02Sa\x09Mercʼher\x06Gwener\x06Sado" + + "rn\x0a1añ trim.\x082l trim.\x083e trim.\x084e trim.\x0e1añ trimiziad\x0c" + + "2l trimiziad\x0c3e trimiziad\x0c4e trimiziad\x04A.M.\x04G.M.\x02gm\x12a-" + + "raok Jezuz-Krist\x11goude Jezuz-Krist\x0ba-raok J.K.\x0agoude J.K.\x0c{1" + + "} 'da' {0}\x14a-raok Republik Sina\x0dRepublik Sina\x0ba-raok R.S.\x04R." + + "S.\x09amzervezh\x05bloaz\x07warlene\x07hevlene\x0ear bloaz a zeu\x10a-be" + + "nn {0} bloaz\x10a-benn {0} vloaz\x16a-benn {0} a vloazioù\x0c{0} bloaz z" + + "o\x0c{0} vloaz zo\x12{0} a vloazioù zo\x03bl.\x0car bl. a zeu\x0ea-benn " + + "{0} bl.\x0a{0} bl. zo\x08+{0} bl.\x08-{0} bl.\x09trimiziad\x14a-benn {0}" + + " trimiziad\x14a-benn {0} drimiziad\x14a-benn {0} zrimiziad\x19a-benn {0}" + + " a drimiziadoù\x10{0} trimiziad zo\x10{0} drimiziad zo\x10{0} zrimiziad " + + "zo\x15{0} a zrimiziadoù zo\x05trim.\x10a-benn {0} trim.\x0c{0} trim. zo" + + "\x0a+{0} trim.\x0a-{0} trim.\x03miz\x0ear miz diaraok\x0bar miz-mañ\x0ca" + + "r miz a zeu\x0ea-benn {0} miz\x0ea-benn {0} viz\x14a-benn {0} a vizioù" + + "\x0a{0} miz zo\x0a{0} viz zo\x10{0} a vizioù zo\x08+{0} miz\x08-{0} miz" + + "\x06sizhun\x11ar sizhun diaraok\x0ear sizhun-mañ\x0far sizhun a zeu\x11a" + + "-benn {0} sizhun\x17a-benn {0} a sizhunioù\x0d{0} sizhun zo\x13{0} a siz" + + "hunioù zo\x04deiz\x11dercʼhent-decʼh\x06decʼh\x05hiziv\x0bwarcʼhoazh\x0f" + + "a-benn {0} deiz\x0fa-benn {0} zeiz\x15a-benn {0} a zeizioù\x0b{0} deiz z" + + "o\x0b{0} zeiz zo\x11{0} a zeizioù zo\x0ca-benn {0} d\x08{0} d zo\x0edeiz" + + " ar sizhun\x0fDisul diwezhañ\x0bar Sul-mañ\x0bDisul a zeu\x0dSul diwezha" + + "ñ\x08Sul-mañ\x09Sul a zeu\x0cSu diwezhañ\x07Su-mañ\x08Su a zeu\x0fDilun" + + " diwezhañ\x0bal Lun-mañ\x0bDilun a zeu\x0dLun diwezhañ\x08Lun-mañ\x09Lun" + + " a zeu\x0bL diwezhañ\x06L-mañ\x07L a zeu\x12Dimeurzh diwezhañ\x0ear Meur" + + "zh-mañ\x0eDimeurzh a zeu\x0eMeu. diwezhañ\x09Meu.-mañ\x0aMeu. a zeu\x0cM" + + "z diwezhañ\x07Mz-mañ\x08Mz a zeu\x15Dimercʼher diwezhañ\x11ar Mercʼher-m" + + "añ\x11Dimercʼher a zeu\x0eMer. diwezhañ\x09Mer.-mañ\x0aMer. a zeu\x0cMc " + + "diwezhañ\x07Mc-mañ\x08Mc a zeu\x11Diriaou diwezhañ\x0car Yaou-mañ\x0dDir" + + "iaou a zeu\x0eYaou diwezhañ\x09Yaou-mañ\x0aYaou a zeu\x0bY diwezhañ\x06Y" + + "-mañ\x12Digwener diwezhañ\x0ear Gwener-mañ\x0eDigwener a zeu\x0eGwe. diw" + + "ezhañ\x09Gwe.-mañ\x0aGwe. a zeu\x0bG diwezhañ\x06G-mañ\x07G a zeu\x12Dis" + + "adorn diwezhañ\x0ear Sadorn-mañ\x0eDisadorn a zeu\x0eSad. diwezhañ\x09Sa" + + "d.-mañ\x0aSad. a zeu\x0cSa diwezhañ\x07Sa-mañ\x08Sa a zeu\x05AM/GM\x03eu" + + "r\x0ea-benn {0} eur\x14a-benn {0} a eurioù\x0a{0} eur zo\x10{0} a eurioù" + + " zo\x01e\x0ca-benn {0} e\x08{0} e zo\x05munut\x10a-benn {0} munut\x10a-b" + + "enn {0} vunut\x15a-benn {0} a vunutoù\x0c{0} munut zo\x0c{0} vunut zo" + + "\x11{0} a vunutoù zo\x03min\x0ea-benn {0} min\x0a{0} min zo\x06eilenn" + + "\x07bremañ\x11a-benn {0} eilenn\x16a-benn {0} a eilennoù\x0d{0} eilenn z" + + "o\x05brem.\x0ca-benn {0} s\x08{0} s zo\x09takad eur\x07eur {0}\x0deur ha" + + "ñv {0}\x11eur cʼhoañv {0}\x15eur hañv Breizh-Veur\x16eur cʼhoañv Iwerzh" + + "on\x0feur Afghanistan\x0feur Kreizafrika\x13eur Afrika ar Reter\x16eur c" + + "ʼhoañv Suafrika\x18eur Afrika ar Cʼhornôg\"eur cʼhoañv Afrika ar Cʼhorn" + + "ôg\x1eeur hañv Afrika ar Cʼhornôg\x0aeur Alaska\x14eur cʼhoañv Alaska" + + "\x10eur hañv Alaska\x0aeur Almaty\x14eur cʼhoañv Almaty\x10eur hañv Alma" + + "ty\x0deur an Amazon\x17eur cʼhoañv an Amazon\x13eur hañv an Amazon\x0ceu" + + "r ar Reter\x16eur cʼhoañv ar Reter\x12eur hañv ar Reter\x10eur ar Menezi" + + "où\x1aeur cʼhoañv ar Menezioù\x16eur hañv ar Menezioù\x0ceur Anadyrʼ\x16" + + "eur cʼhoañv Anadyrʼ\x12eur hañv Anadyrʼ\x08eur Apia\x12eur cʼhoañv Apia" + + "\x0eeur hañv Apia\x0aeur Arabia\x14eur cʼhoañv Arabia\x10eur hañv Arabia" + + "\x10eur Arcʼhantina\x1aeur cʼhoañv Arcʼhantina\x16eur hañv Arcʼhantina" + + "\x1eeur Arcʼhantina ar Cʼhornôg(eur cʼhoañv Arcʼhantina ar Cʼhornôg$eur " + + "hañv Arcʼhantina ar Cʼhornôg\x0beur Armenia\x15eur cʼhoañv Armenia\x11eu" + + "r hañv Armenia\x12eur Kreizaostralia\x1ceur cʼhoañv Kreizaostralia\x18eu" + + "r hañv Kreizaostralia eur Kreizaostralia ar Cʼhornôg*eur cʼhoañv Kreizao" + + "stralia ar Cʼhornôg&eur hañv Kreizaostralia ar Cʼhornôg\x16eur Aostralia" + + " ar Reter eur cʼhoañv Aostralia ar Reter\x1ceur hañv Aostralia ar Reter" + + "\x1beur Aostralia ar Cʼhornôg%eur cʼhoañv Aostralia ar Cʼhornôg!eur hañv" + + " Aostralia ar Cʼhornôg\x0feur Azerbaidjan\x19eur cʼhoañv Azerbaidjan\x15" + + "eur hañv Azerbaidjan\x0deur an Azorez\x17eur cʼhoañv an Azorez\x13eur ha" + + "ñv an Azorez\x0eeur Bangladesh\x18eur cʼhoañv Bangladesh\x14eur hañv Ba" + + "ngladesh\x0beur Bhoutan\x0beur Bolivia\x0deur Brasília\x17eur cʼhoañv Br" + + "asília\x13eur hañv Brasília\x15eur Brunei Darussalam\x12eur ar Cʼhab-Gla" + + "s\x1ceur cʼhoañv ar Cʼhab-Glas\x18eur hañv ar Cʼhab-Glas\x0beur Chatham" + + "\x15eur cʼhoañv Chatham\x11eur hañv Chatham\x09eur Chile\x13eur cʼhoañv " + + "Chile\x0feur hañv Chile\x08eur Sina\x12eur cʼhoañv Sina\x0eeur hañv Sina" + + "\x12eur Enez Christmas\x0feur Inizi Kokoz\x0ceur Kolombia\x16eur cʼhoañv" + + " Kolombia\x12eur hañv Kolombia\x0eeur Inizi Cook\x18eur cʼhoañv Inizi Co" + + "ok\x14eur hañv Inizi Cook\x08eur Kuba\x12eur cʼhoañv Kuba\x0eeur hañv Ku" + + "ba\x12eur Timor ar Reter\x0deur Enez Pask\x17eur cʼhoañv Enez Pask\x13eu" + + "r hañv Enez Pask\x0beur Ecuador\x0feur Kreizeuropa\x19eur cʼhoañv Kreize" + + "uropa\x15eur hañv Kreizeuropa\x13eur Europa ar Reter\x1deur cʼhoañv Euro" + + "pa ar Reter\x19eur hañv Europa ar Reter\x18eur Europa ar Cʼhornôg\"eur c" + + "ʼhoañv Europa ar Cʼhornôg\x1eeur hañv Europa ar Cʼhornôg\x12eur Inizi F" + + "alkland\x1ceur cʼhoañv Inizi Falkland\x18eur hañv Inizi Falkland\x09eur " + + "Fidji\x13eur cʼhoañv Fidji\x0feur hañv Fidji\x12eur Gwiana cʼhall*eur Do" + + "uaroù aostral Frañs hag Antarktika\x14eur Inizi Galápagos\x0beur Gambier" + + "\x0aeur Jorjia\x14eur cʼhoañv Jorjia\x10eur hañv Jorjia\x1cAmzer keitat " + + "Greenwich (AKG)\x16eur Greunland ar Reter eur cʼhoañv Greunland ar Reter" + + "\x1ceur hañv Greunland ar Reter\x1beur Greunland ar Cʼhornôg%eur cʼhoañv" + + " Greunland ar Cʼhornôg!eur hañv Greunland ar Cʼhornôg\x12eur cʼhoañv Gua" + + "m&eur cʼhoañv ar Pleg-mor Arab-ha-Pers\x0aeur Guyana\x0deur Hong Kong" + + "\x17eur cʼhoañv Hong Kong\x13eur hañv Hong Kong\x13eur cʼhoañv India\x0e" + + "eur Indez-Sina\x16eur Indonezia ar Reter\x1beur Indonezia ar Cʼhornôg" + + "\x08eur Iran\x12eur cʼhoañv Iran\x0eeur hañv Iran\x0beur Irkutsk\x15eur " + + "cʼhoañv Irkutsk\x11eur hañv Irkutsk\x0aeur Israel\x14eur cʼhoañv Israel" + + "\x10eur hañv Israel\x09eur Japan\x13eur cʼhoañv Japan\x0feur hañv Japan" + + "\x16eur Kazakstan ar Reter\x1beur Kazakstan ar Cʼhornôg\x09eur Korea\x13" + + "eur cʼhoañv Korea\x0feur hañv Korea\x0eeur Kyrgyzstan\x0deur Sri Lanka" + + "\x09eur Macau\x13eur cʼhoañv Macau\x0feur hañv Macau\x12eur Enez Macquar" + + "ie\x0ceur Malaysia\x0feur ar Maldivez\x10eur Inizi Markiz\x12eur Inizi M" + + "arshall\x09eur Moris\x13eur cʼhoañv Moris\x0feur hañv Moris\x15eur Gwala" + + "rn Mecʼhiko\x1feur cʼhoañv Gwalarn Mecʼhiko\x1beur hañv Gwalarn Mecʼhiko" + + "\x0feur Ulaanbaatar\x19eur cʼhoañv Ulaanbaatar\x15eur hañv Ulaanbaatar" + + "\x0aeur Moskov\x14eur cʼhoañv Moskov\x10eur hañv Moskov\x0beur Myanmar" + + "\x09eur Nauru\x09eur Nepal\x13eur Kaledonia Nevez\x1deur cʼhoañv Kaledon" + + "ia Nevez\x19eur hañv Kaledonia Nevez\x10eur Zeland-Nevez\x1aeur cʼhoañv " + + "Zeland-Nevez\x16eur hañv Zeland-Nevez\x10eur Newfoundland\x1aeur cʼhoañv" + + " Newfoundland\x16eur hañv Newfoundland\x08eur Niue\x10eur Enez Norfolk" + + "\x0feur Novosibirsk\x19eur cʼhoañv Novosibirsk\x15eur hañv Novosibirsk" + + "\x0ceur Pakistan\x16eur cʼhoañv Pakistan\x12eur hañv Pakistan\x09eur Pal" + + "au\x0ceur Paraguay\x16eur cʼhoañv Paraguay\x12eur hañv Paraguay\x09eur P" + + "erou\x13eur cʼhoañv Perou\x0feur hañv Perou\x10eur ar Filipinez\x1aeur c" + + "ʼhoañv ar Filipinez\x16eur hañv ar Filipinez\x18eur Sant-Pêr-ha-Mikelon" + + "\"eur cʼhoañv Sant-Pêr-ha-Mikelon\x1eeur hañv Sant-Pêr-ha-Mikelon\x0ceur" + + " Pitcairn\x0feur ar Reünion\x0ceur Sakhalin\x16eur cʼhoañv Sakhalin\x12e" + + "ur hañv Sakhalin\x09eur Samoa\x13eur cʼhoañv Samoa\x0feur hañv Samoa\x0c" + + "eur Sechelez\x17eur cʼhoañv Singapour\x11eur Inizi Salomon\x11eur Georgi" + + "a ar Su\x0beur Surinam\x0aeur Tahiti\x0aeur Taipei\x14eur cʼhoañv Taipei" + + "\x10eur hañv Taipei\x0feur Tadjikistan\x0beur Tokelau\x09eur Tonga\x13eu" + + "r cʼhoañv Tonga\x0feur hañv Tonga\x10eur Turkmenistan\x1aeur cʼhoañv Tur" + + "kmenistan\x16eur hañv Turkmenistan\x0aeur Tuvalu\x0beur Uruguay\x15eur c" + + "ʼhoañv Uruguay\x11eur hañv Uruguay\x0feur Ouzbekistan\x19eur cʼhoañv Ou" + + "zbekistan\x15eur hañv Ouzbekistan\x0beur Vanuatu\x15eur cʼhoañv Vanuatu" + + "\x11eur hañv Vanuatu\x0deur Venezuela\x0feur Vladivostok\x19eur cʼhoañv " + + "Vladivostok\x15eur hañv Vladivostok\x0deur Volgograd\x17eur cʼhoañv Volg" + + "ograd\x13eur hañv Volgograd\x14eur Wallis ha Futuna\x0beur Yakutsk\x15eu" + + "r cʼhoañv Yakutsk\x11eur hañv Yakutsk\x12eur Yekaterinbourg\x1ceur cʼhoa" + + "ñv Yekaterinbourg\x18eur hañv Yekaterinbourg\x04Llun\x03Maw\x03Mer\x03I" + + "au\x04Gwen\x03Sad\x02Ll\x02Ma\x02Me\x02Ia\x02Gw\x03Gwe\x02Ll\x09མིར\x09ས" + + "ངྶ\x03Lun\x03Mth\x03Mhr\x03Yow\x0210\x0211\x0212\x0213" + +var bucket12 string = "" + // Size: 20079 bytes + "\x11EEEE, MMMM d, y G\x0bMMMM d, y G\x0aMMM d, y G\x0cM/d/yy GGGGG\x18जा" + + "नुवारी\x1eफेब्रुवारी\x0fमार्स\x12एफ्रिल\x06मे\x09जुन\x0fजुलाइ\x0fआगस्थ" + + "\x1eसेबथेज्ब़र\x0fअखथबर\x18नबेज्ब़र\x1bदिसेज्ब़र\x03ज\x06फे\x06मा\x03ए" + + "\x06जु\x03आ\x06से\x03अ\x03न\x06दि\x09रबि\x06सम\x0cमंगल\x09बुद\x0fबिसथि" + + "\x0fसुखुर\x0cसुनि\x12रबिबार\x0fसमबार\x15मंगलबार\x12बुदबार\x18बिसथिबार" + + "\x18सुखुरबार\x15सुनिबार\x03र\x03स\x06मं\x06बु\x06बि\x06सुDसिथासे/खोन्दोस" + + "े/बाहागोसेAखावसे/खोन्दोनै/बाहागोनैJखावथाम/खोन्दोथाम/बाहागोथामNखावब्रै/" + + "खोन्दोब्रै/फुरा/आबुं\x09फुं\x12बेलासे\x19ईसा.पूर्व\x06सन\x0fEEEE, MMMM" + + " d, y\x09MMMM d, y\x08MMM d, y\x06M/d/yy\"बैसागो/बैसाग\x0cजेथो\x0cआसार" + + "\x0fसावुन\x0fभाद्र\x0cआसिन\x0cखाथि\x12आगाह्न\x09फुस\x0cमागो\x0fफागुन\x0c" + + "सैथो\x0fजौथाय\x0fबोसोर\x09दान\x19सबथा/हबथा\x09सान\x0cमैया\x0cदिनै\x0fग" + + "ाबोन#सप्ताह के दिन\x1cफुं/बेलासे\x0fरिंगा\x0fमिनिथ\x15सेखेन्द\x0fओनसोल" + + ",ब्रीटीश समर टाईम&आईरीश समर टाईम\x16आकर टाईम2आकर स्टैंडर्ड टाईम आकर समर " + + "टाईम>अफ़गानी स्टैंडर्ड टाईमKमध्य अफ्रीका स्टैंडर्ड टाईमQपूर्वी अफ्रीका" + + " स्टैंडर्ड टाईमQदक्षिण अफ्रीका स्टैंडर्ड टाईम5पश्चीम अफ्रीका टाईमQपश्चीम" + + " अफ्रीका स्टैंडर्ड टाईम?पश्चीम अफ्रीका समर टाईम\"अलास्का टाईम>अलास्का स्" + + "टैंडर्ड टाईम5अलास्का डेलाईट टाईम\x1fअलमाटी टाईम;अलमाटी स्टैंडर्ड टाईम)" + + "अलमाटी समर टाईम\"अमाज़ोन टाईम>अमाज़ोन स्टैंडर्ड टाईम,अमाज़ोन समर टाईम5" + + "सैंट्रल अमरिका टाईमQसैंट्रल अमरिका स्टैंडर्ड टाईमHसैंट्रल अमरिका डेलाई" + + "ट टाईम5ईस्टर्न अमरिका टाईमQईस्टर्न अमरिका स्टैंडर्ड टाईमHईस्टर्न अमरिक" + + "ा डेलाईट टाईम5अमरिका माऊन्टन टाईमQअमरिका माऊन्टन स्टैंडर्ड टाईमHअमरिका" + + " माऊन्टन डेलाईट टाईम\"पैसीफीक टाईम>पैसीफीक स्टैंडर्ड टाईम5पैसीफीक डेलाईट" + + " टाईम\x1fअनादीर टाईम;अनादीर स्टैंडर्ड टाईम)अनादीर समर टाईम\"अक़्टाऊ टाईम" + + ">अक़्टाऊ स्टैंडर्ड टाईम,अक़्टाऊ समर टाईम%अक़्टोबे टाईमAअक़्टोबे स्टैंडर्" + + "ड टाईम/अक़्टोबे समर टाईम\x19अरबी टाईम5अरबी स्टैंडर्ड टाईम,अरबी डेलाईट " + + "टाईम(अर्जनटिना टाईमDअर्जनटिना स्टैंडर्ड टाईम5अर्जण्टिना समर टाईम>पश्ची" + + "म अर्जण्टिना टाईमZपश्चीम अर्जण्टिना स्टैंडर्ड टाईमHपश्चीम अर्जण्टिना स" + + "मर टाईम\x1fआरमीनी टाईम;आरमीनी स्टैंडर्ड टाईम)आरमीनी समर टाईम%अटलांटीक " + + "टाईमAअटलांटीक स्टैंडर्ड टाईम8अटलांटीक डेलाईट टाईम.ओस्ट्रेलिया टाईमWमध्" + + "य ओस्ट्रेलिया स्टैंडर्ड टाईमNमध्य ओस्ट्रेलिया डेलाईट टाईमNमध्य-पश्चीम " + + "ओस्ट्रेलिया टाईमjमध्य-पश्चीम ओस्ट्रेलिया स्टैंडर्ड टाईमaमध्य-पश्चीम ओस" + + "्ट्रेलिया डेलाईट टाईमAपूर्वी ओस्ट्रेलिया टाईम]पूर्वी ओस्ट्रेलिया स्टैं" + + "डर्ड टाईमTपूर्वी ओस्ट्रेलिया डेलाईट टाईमAदक्षिण ओस्ट्रेलिया टाईम]दक्षि" + + "ण ओस्ट्रेलिया स्टैंडर्ड टाईमTदक्षिण ओस्ट्रेलिया डेलाईट टाईम(आज़रबैजान " + + "टाईमDआज़रबैजान स्टैंडर्ड टाईम2आज़रबैजान समर टाईम\x1cआज़ोर टाईम8आज़ोर स" + + "्टैंडर्ड टाईम&आज़ोर समर टाईम(बांगलादेश टाईमDबांगलादेश स्टैंडर्ड टाईम2ब" + + "ांगलादेश समर टाईम8भुटान स्टैंडर्ड टाईमAबोलिविया स्टैंडर्ड टाईम.ब्राज़ी" + + "लिया टाईमJब्राज़ीलिया स्टैंडर्ड टाईम8ब्राज़ीलिया समर टाईमYब्रुनेई दर उ" + + "स सलाम स्टैंडर्ड टाईम)काप वेर्दे टाईमEकाप वेर्दे स्टैंडर्ड टाईम3काप वे" + + "र्दे समर टाईम8चामरो स्टैंडर्ड टाईम\x19चैथम टाईम5चैथम स्टैंडर्ड टाईम,चै" + + "थम डेलाईट टाईम\x19चीली टाईम5चीली स्टैंडर्ड टाईम#चीली समर टाईम\x1cचाईना" + + " टाईम8चाईना स्टैंडर्ड टाईम/चाईना डेलाईट टाईम(चोईबालसान टाईमDचोईबालसान स्" + + "टैंडर्ड टाईम2चोईबालसान समर टाईम>क्रीसमस स्टैंडर्ड टाईमEकोको द्वीप स्टै" + + "ंडर्ड टाईम%कोलंबिया टाईमAकोलंबिया स्टैंडर्ड टाईम/कोलंबिया समर टाईम&कुक" + + " द्वीप टाईमBकुक द्वीप स्टैंडर्ड टाईम=कुक द्वीप अर्ध समर टाईम\x1fक्युबा ट" + + "ाईम;क्युबा स्टैंडर्ड टाईम2क्युबा डेलाईट टाईम8डेवीस स्टैंडर्ड टाईमWड्यु" + + "मों ड्युरवील स्टैंडर्ड टाईमEईस्ट टीमोर स्टैंडर्ड टाईम,ईस्टर आईलंड टाईम" + + "Hईस्टर आईलंड स्टैंडर्ड टाईम6ईस्टर आईलंड समर टाईमAएक्वाडौर स्टैंडर्ड टाईम" + + ")मध्य यूरोप टाईमEमध्य यूरोप स्टैंडर्ड टाईम3मध्य यूरोप समर टाईम2ईस्टर्न य" + + "ूरोप टाईमNईस्टर्न यूरोप स्टैंडर्ड टाईम<ईस्टर्न यूरोप समर टाईम5वेस्टर्न" + + " यूरोप टाईमQवेस्टर्न यूरोप स्टैंडर्ड टाईम?वेस्टर्न यूरोप समर टाईम.फ़ाल्क" + + "लैण्ड टाईमJफ़ाल्कलैण्ड स्टैंडर्ड टाईम8फ़ाल्कलैण्ड समर टाईम\x19फीजी टाई" + + "म5फीजी स्टैंडर्ड टाईम#फीजी समर टाईमZफ्रान्सीसी गुयाना स्टैंडर्ड टाईमZद" + + "क्षिण फ्रान्सीसी स्टैंडर्ड टाईमDगालापागोस स्टैंडर्ड टाईम>गांबिये स्टैं" + + "डर्ड टाईम%जोर्जिया टाईमAजोर्जिया स्टैंडर्ड टाईम/जोर्जिया समर टाईमNगीलब" + + "र्ट द्वीप स्टैंडर्ड टाईम>ग्रीनीच स्टैंडर्ड टाईमAग्रीनलैण्ड ईस्टर्न टाई" + + "म]ग्रीनलैण्ड ईस्टर्न स्टैंडर्ड टाईमKग्रीनलैण्ड ईस्टर्न समर टाईमDग्रीनल" + + "ैण्ड वेस्टर्न टाईम`ग्रीनलैण्ड वेस्टर्न स्टैंडर्ड टाईमNग्रीनलैण्ड वेस्ट" + + "र्न समर टाईम5गुआम स्टैंडर्ड टाईम8गल्फ़ स्टैंडर्ड टाईम;गुयाना स्टैंडर्ड" + + " टाईम&हवाई आलटन टाईमBहवाई आलटन स्टैंडर्ड टाईम9हवाई आलटन डेलाईट टाईम%हाँग" + + "कॉंग टाईमAहाँगकॉंग स्टैंडर्ड टाईम/हाँगकॉंग समर टाईम\x1cहोव्ड टाईम8होव्" + + "ड स्टैंडर्ड टाईम&होव्ड समर टाईम;भारतीय स्टैंडर्ड टाईमNभारतीय महासगर स्" + + "टैंडर्ड टाईमBईंडो चइना स्टैंडर्ड टाईमGईंडोनीशिया स्टैंडर्ड टाईम]ईस्टर्" + + "न ईंडोनीशिया स्टैंडर्ड टाईम`वेस्टर्न ईंडोनीशिया स्टैंडर्ड टाईम\x19ईरान" + + " टाईम5ईरान स्टैंडर्ड टाईम,ईरान डेलाईट टाईम.ईरकुर्त्स्क टाईमJईरकुर्त्स्क " + + "स्टैंडर्ड टाईम8ईरकुर्त्स्क समर टाईम\"ईस्राइल टाईम>ईस्राइल स्टैंडर्ड टा" + + "ईम5ईस्राइल डेलाईट टाईम\x19जपान टाईम5जपान स्टैंडर्ड टाईम,जपान डेलाईट टा" + + "ईमMपेत्रोपावलोस्क कामचटका टाईमiपेत्रोपावलोस्क कामचटका स्टैंडर्ड टाईमWप" + + "ेत्रोपावलोस्क कामचटका समर टाईम1क़ज़ाख़स्तान टाईमJवेस्टर्न क़ज़ाख़स्तान" + + " टाईम\x1fकोरिया टाईम;कोरिया स्टैंडर्ड टाईम2कोरिया डेलाईट टाईम8कोसरी स्टै" + + "ंडर्ड टाईम7क्रासनोयार्स्क टाईमSक्रासनोयार्स्क स्टैंडर्ड टाईमAक्रासनोया" + + "र्स्क समर टाईमMक़ीर्ग़स्तान स्टैंडर्ड टाईम5लंका स्टैंडर्ड टाईमEलाईन द्" + + "वीप स्टैंडर्ड टाईम)लार्ड़ होव टाईमEलार्ड़ होव स्टैंडर्ड टाईम<लार्ड़ हो" + + "व डेलाईट टाईम\x1cमाकाऊ टाईम8माकाऊ स्टैंडर्ड टाईम&माकाऊ समर टाईम\x19मगद" + + "न टाईम5मगदन स्टैंडर्ड टाईम#मगदन समर टाईम>मलेशिया स्टैंडर्ड टाईम;मालदीव" + + " स्टैंडर्ड टाईमGमार्केज़ास स्टैंडर्ड टाईमAमार्शल र्स्टैंडर्ड टाईम%मॉरिशी" + + "यस टाईमAमॉरिशीयस स्टैंडर्ड टाईम/मॉरिशीयस समर टाईम5मॉसन स्टैंडर्ड टाईम%" + + "मँगोलिया टाईमAमँगोलिया स्टैंडर्ड टाईम/मँगोलिया समर टाईम\x1fमॉस्को टाईम" + + ";मॉस्को स्टैंडर्ड टाईम)मॉस्को समर टाईमAम्यानमार स्टैंडर्ड टाईम8नाऊरु स्ट" + + "ैंडर्ड टाईम8नेपाल स्टैंडर्ड टाईम8न्यु कैलेडोनिया टाईमTन्यु कैलेडोनिया " + + "स्टैंडर्ड टाईमBन्यु कैलेडोनिया समर टाईम1न्युज़ीलैण्ड टाईमMन्युज़ीलैण्ड" + + " स्टैंडर्ड टाईमDन्युज़ीलैण्ड डेलाईट टाईम7न्युफाऊंडलैण्ड टाईमSन्युफाऊंडलै" + + "ण्ड स्टैंडर्ड टाईमJन्युफाऊंडलैण्ड डेलाईट टाईम5नीऊई स्टैंडर्ड टाईम;नॉरफ" + + "ोक स्टैंडर्ड टाईमEफेरनान्दो द नोरोन्हा टाईमaफेरनान्दो द नोरोन्हा स्टैं" + + "डर्ड टाईमOफेरनान्दो द नोरोन्हा समर टाईमNनॉर्थ मारिआना स्टैंडर्ड टाईम4न" + + "ोवोसीबीर्स्क टाईमPनोवोसीबीर्स्क स्टैंडर्ड टाईम>नोवोसीबीर्स्क समर टाईम" + + "\x1fओम्स्क टाईम;ओम्स्क स्टैंडर्ड टाईम)ओम्स्क समर टाईम(पाकिस्तान टाईमDपाक" + + "िस्तान स्टैंडर्ड टाईम2पाकिस्तान समर टाईम5पलाऊ स्टैंडर्ड टाईमRपापुआ न्य" + + "ु गीनी स्टैंडर्ड टाईम\"पारागुए टाईम>पारागुए स्टैंडर्ड टाईम,पारागुए समर" + + " टाईम\x19पेरु टाईम5पेरु स्टैंडर्ड टाईम#पेरु समर टाईम(फीलीपीन्स टाईमDफीली" + + "पीन्स स्टैंडर्ड टाईम2फीलीपीन्स समर टाईमNफीनीक्स द्वीप स्टैंडर्ड टाईमCस" + + "ेँ पीयॅर एवं मीकलों टाईम_सेँ पीयॅर एवं मीकलों स्टैंडर्ड टाईमVसेँ पीयॅर" + + " एवं मीकलों डेलाईट टाईमAपीटकैर्न स्टैंडर्ड टाईमVपोनापे (पोह्नपेई) स्टैंड" + + "र्ड टाईम1क़ीज़ीलोर्डा टाईमMक़ीज़ीलोर्डा स्टैंडर्ड टाईम;क़ीज़ीलोर्डा सम" + + "र टाईमAरियूनियन स्टैंडर्ड टाईम;रोथेरा स्टैंडर्ड टाईम\"सख़ालीन टाईम>सख़" + + "ालीन स्टैंडर्ड टाईम,सख़ालीन समर टाईम\x1cसमारा टाईम8समारा स्टैंडर्ड टाई" + + "म&समारा समर टाईम\x19समोआ टाईम5समोआ स्टैंडर्ड टाईम#समोआ समर टाईम>सेशेल्" + + "स स्टैंडर्ड टाईमAसींगापुर स्टैंडर्ड टाईम;सॉलॉमन स्टैंडर्ड टाईमNसाऊथ जॉ" + + "र्जिया स्टैंडर्ड टाईम>सुरीनाम स्टैंडर्ड टाईम8सीओवा स्टैंडर्ड टाईम;टाहि" + + "टी स्टैंडर्ड टाईमMताजीक़ीस्तान स्टैंडर्ड टाईम;टोकेलौ स्टैंडर्ड टाईम" + + "\x1cटॉंगा टाईम8टॉंगा स्टैंडर्ड टाईम&टॉंगा समर टाईम8ट्रुक स्टैंडर्ड टाईम7" + + "तुर्कमेनीस्तान टाईमSतुर्कमेनीस्तान स्टैंडर्ड टाईमAतुर्कमेनीस्तान समर ट" + + "ाईम;तुवालु स्टैंडर्ड टाईम\x1fऊरुगुए टाईम;ऊरुगुए स्टैंडर्ड टाईम)ऊरुगुए " + + "समर टाईम4ऊज़्बेकिस्तान टाईमPऊज़्बेकिस्तान स्टैंडर्ड टाईम>ऊज़्बेकिस्तान" + + " समर टाईम\x1fवनुआटु टाईम;वनुआटु स्टैंडर्ड टाईम)वनुआटु समर टाईमGवेनेज़ुएल" + + "ा स्टैंडर्ड टाईम4व्लादीवॉस्तॉक टाईमPव्लादीवॉस्तॉक स्टैंडर्ड टाईमGव्लाद" + + "ीवॉस्तॉक डेलाईट टाईम+वॉलगोग्राद टाईमGवॉलगोग्राद स्टैंडर्ड टाईम5वॉलगोग्" + + "राद समर टाईम>वॉस्तॉक स्टैंडर्ड टाईमEवाके द्वीप स्टैंडर्ड टाईमXवालीस एव" + + "ं फ़ुतुना स्टैंडर्ड टाईम(याकुट्स्क टाईमDयाकुट्स्क स्टैंडर्ड टाईम2याकुट" + + "्स्क समर टाईम:येकातेरीनाबुर्ग टाईमVयेकातेरीनाबुर्ग स्टैंडर्ड टाईमDयेका" + + "तेरीनाबुर्ग समर टाईम\x06फ़\x03म\x06जू\x06सि\x06सो\x06गु\x06शु\x03श\x06" + + "शे" + +var bucket13 string = "" + // Size: 13702 bytes + "\x09E, d.M.y.\x06d.M.y.\x13EEEE, dd. MMMM y. G\x0ddd. MMMM y. G\x0add.MM" + + ".y. G\x0edd.MM.y. GGGGG\x0b{1} 'u' {0}\x03jan\x03feb\x03mar\x03apr\x03ma" + + "j\x03jun\x03jul\x03avg\x03sep\x03okt\x03nov\x03dec\x06januar\x07februar" + + "\x04mart\x05april\x04juni\x04juli\x06avgust\x09septembar\x07oktobar\x08n" + + "ovembar\x08decembar\x03ned\x03pon\x03uto\x03sri\x04čet\x03pet\x03sub\x08" + + "nedjelja\x0bponedjeljak\x06utorak\x07srijeda\x09četvrtak\x05petak\x06sub" + + "ota\x03KV1\x03KV2\x03KV3\x03KV4\x021.\x022.\x023.\x024.\x0cPrvi kvartal" + + "\x0dDrugi kvartal\x0eTreći kvartal\x10Četvrti kvartal\x06ponoć\x0aprijep" + + "odne\x05podne\x07popodne\x06ujutro\x0cposlijepodne\x08navečer\x08po noći" + + "\x0eprije nove ere\x08nove ere\x05n. e.\x08p. n. e.\x07pr.n.e.\x02AD\x10" + + "EEEE, d. MMMM y.\x0ad. MMMM y.\x09d. MMM y.\x07d.M.yy.\x04muh.\x04saf." + + "\x06rab. i\x07rab. ii\x08džum. i\x09džum. ii\x06redž.\x04ša.\x04ram.\x04" + + "še.\x06zul-k.\x06zul-h.\x07muharem\x05safer\x08rabiʻ i\x09rabiʻ ii\x0ad" + + "žumade i\x0bdžumade ii\x07redžeb\x08šaʻban\x07ramazan\x06ševal\x08zul-k" + + "ade\x0azul-hidže\x0cprije R.O.C.\x06R.O.C.\x06godina\x0eprošle godine" + + "\x0aove godine\x10sljedeće godine\x0dza {0} godinu\x0dza {0} godine\x0dz" + + "a {0} godina\x10prije {0} godinu\x10prije {0} godine\x10prije {0} godina" + + "\x04god.\x0bza {0} god.\x0eprije {0} god.\x02g.\x09za {0} g.\x0cprije {0" + + "} g.\x07kvartal\x12posljednji kvartal\x0covaj kvartal\x11sljedeći kvarta" + + "l\x0eza {0} kvartal\x0fza {0} kvartala\x11prije {0} kvartal\x12prije {0}" + + " kvartala\x03kv.\x0aza {0} kv.\x0dprije {0} kv.\x06mjesec\x0eprošli mjes" + + "ec\x0bovaj mjesec\x10sljedeći mjesec\x0dza {0} mjesec\x0eza {0} mjeseca" + + "\x0eza {0} mjeseci\x10prije {0} mjesec\x11prije {0} mjeseca\x11prije {0}" + + " mjeseci\x03mj.\x0aza {0} mj.\x0dprije {0} mj.\x07sedmica\x0fprošle sedm" + + "ice\x0bove sedmice\x11sljedeće sedmice\x0eza {0} sedmicu\x0eza {0} sedmi" + + "ce\x0eza {0} sedmica\x11prije {0} sedmicu\x11prije {0} sedmice\x11prije " + + "{0} sedmica\x16sedmica u kojoj je {0}\x04sed.\x0bza {0} sed.\x0eprije {0" + + "} sed.\x11sedmica u mjesecu\x0ased. u mj.\x08s. u mj.\x03dan\x0aprekjuče" + + "r\x06jučer\x05danas\x05sutra\x0aprekosutra\x0aza {0} dan\x0bza {0} dana" + + "\x0dprije {0} dan\x0eprije {0} dana\x09za {0} d.\x0cprije {0} d.\x0cdan " + + "u godini\x0adan u god.\x08dan u g.\x0ddan u sedmici\x0adan u sed.\x0ddan" + + " u mjesecu\x09dan u mj.\x08d. u mj.\x10prošla nedjelja\x0cova nedjelja" + + "\x12sljedeća nedjelja\x0fza {0} nedjelju\x0fza {0} nedjelje\x0fza {0} ne" + + "djelja\x12prije {0} nedjelju\x12prije {0} nedjelje\x12prije {0} nedjelja" + + "\x0cprošla ned.\x08ova ned.\x0esljedeća ned.\x13prošli ponedjeljak\x10ov" + + "aj ponedjeljak\x15sljedeći ponedjeljak\x12za {0} ponedjeljak\x12za {0} p" + + "onedjeljka\x13za {0} ponedjeljaka\x15prije {0} ponedjeljak\x15prije {0} " + + "ponedjeljka\x16prije {0} ponedjeljaka\x0cprošli pon.\x09ovaj pon.\x0dslj" + + "edeći pon\x0esljedeći pon.\x0eprošli utorak\x0bovaj utorak\x10sljedeći u" + + "torak\x0dza {0} utorak\x0dza {0} utorka\x0eza {0} utoraka\x10prije {0} u" + + "torak\x10prije {0} utorka\x11prije {0} utoraka\x0cprošli uto.\x09ovaj ut" + + "o.\x0esljedeći uto.\x0fprošla srijeda\x0bova srijeda\x11sljedeća srijeda" + + "\x0eza {0} srijedu\x0eza {0} srijede\x0eza {0} srijeda\x11prije {0} srij" + + "edu\x11prije {0} srijede\x11prije {0} srijeda\x0cprošla sri.\x08ova sri." + + "\x0esljedeća sri.\x11prošli četvrtak\x0eovaj četvrtak\x13sljedeći četvrt" + + "ak\x10za {0} četvrtak\x10za {0} četvrtka\x11za {0} četvrtaka\x13prije {0" + + "} četvrtak\x13prije {0} četvrtka\x14prije {0} četvrtaka\x0dprošli čet." + + "\x0aovaj čet.\x0fsljedeći čet.\x0dprošli petak\x0aovaj petak\x0fsljedeći" + + " petak\x0cza {0} petak\x0cza {0} petka\x0dza {0} petaka\x0fprije {0} pet" + + "ak\x0fprije {0} petka\x10prije {0} petaka\x0cprošli pet.\x09ovaj pet." + + "\x0esljedeći pet.\x0eprošla subota\x0aova subota\x10sljedeća subota\x0dz" + + "a {0} subotu\x0dza {0} subote\x0dza {0} subota\x10prije {0} subotu\x10pr" + + "ije {0} subote\x10prije {0} subota\x0cprošla sub.\x08ova sub.\x0esljedeć" + + "a sub.\x17prijepodne/poslijepodne\x03sat\x08ovaj sat\x0aza {0} sat\x0bza" + + " {0} sata\x0bza {0} sati\x0dprije {0} sat\x0eprije {0} sata\x0eprije {0}" + + " sati\x06minuta\x0aova minuta\x0dza {0} minutu\x0dza {0} minute\x0dza {0" + + "} minuta\x10prije {0} minutu\x10prije {0} minute\x10prije {0} minuta\x0b" + + "za {0} min.\x0eprije {0} min.\x07sekunda\x04sada\x0eza {0} sekundu\x0eza" + + " {0} sekunde\x0eza {0} sekundi\x11prije {0} sekundu\x11prije {0} sekunde" + + "\x11prije {0} sekundi\x0bza {0} sek.\x0eprije {0} sek.\x0evremenska zona" + + "\x04zona\x0e+HH:mm; -HH:mm\x07GMT {0}\x03GMT\x1dKoordinirano svjetsko vr" + + "ijeme\x18Britansko ljetno vrijeme\x18Irsko standardno vrijeme\x0aAcre vr" + + "eme\x15Acre standardno vreme\x1eAcre letnje računanje vremena\x15Afganis" + + "tansko vrijeme\x19Centralnoafričko vrijeme\x18Istočnoafričko vrijeme!Juž" + + "noafričko standardno vrijeme\x17Zapadnoafričko vrijeme\"Zapadnoafričko s" + + "tandardno vrijeme\x1eZapadnoafričko ljetno vrijeme\x13Aljaskansko vrijem" + + "e\x1eAljaskansko standardno vrijeme\x1aAljaskansko ljetno vrijeme\x0cAlm" + + "atu vreme\x17Almatu standardno vreme Almatu letnje računanje vremena\x11" + + "Amazonsko vrijeme\x1cAmazonsko standardno vrijeme\x18Amazonsko ljetno vr" + + "ijeme#Sjevernoameričko centralno vrijeme.Sjevernoameričko centralno stan" + + "dardno vrijeme*Sjevernoameričko centralno ljetno vrijeme\"Sjevernoamerič" + + "ko istočno vrijeme-Sjevernoameričko istočno standardno vrijeme)Sjevernoa" + + "meričko istočno ljetno vrijeme#Sjevernoameričko planinsko vrijeme.Sjever" + + "noameričko planinsko standardno vrijeme*Sjevernoameričko planinsko ljetn" + + "o vrijeme$Sjevernoameričko pacifičko vrijeme/Sjevernoameričko pacifičko " + + "standardno vrijeme+Sjevernoameričko pacifičko ljetno vrijeme\x0cAnadir v" + + "reme\x17Anadir standardno vreme Anadir letnje računanje vremena\x0fApijs" + + "ko vrijeme\x1aApijsko standardno vrijeme\x16Apijsko ljetno vrijeme\x0cAk" + + "vtau vreme\x17Akvtau standardno vreme Akvtau letnje računanje vremena" + + "\x0dAkvtobe vreme\x18Akvtobe standardno vreme!Akvtobe letnje računanje v" + + "remena\x11Arabijsko vrijeme\x1cArabijsko standardno vrijeme\x18Arabijsko" + + " ljetno vrijeme\x13Argentinsko vrijeme\x1eArgentinsko standardno vrijeme" + + "\x1aArgentinsko ljetno vrijeme\x1aZapadnoargentinsko vrijeme%Zapadnoarge" + + "ntinsko standardno vrijeme!Zapadnoargentinsko ljetno vrijeme\x10Armensko" + + " vrijeme\x1bArmensko standardno vrijeme\x17Armensko ljetno vrijeme#Sjeve" + + "rnoameričko atlantsko vrijeme.Sjevernoameričko atlantsko standardno vrij" + + "eme*Sjevernoameričko atlantsko ljetno vrijeme\x1dCentralnoaustralijsko v" + + "rijeme(Centralnoaustralijsko standardno vrijeme$Centralnoaustralijsko lj" + + "etno vrijeme&Australijsko centralno zapadno vrijeme0Australijsko central" + + "nozapadno standardno vrijeme,Australijsko centralnozapadno ljetno vrijem" + + "e\x1cIstočnoaustralijsko vrijeme'Istočnoaustralijsko standardno vrijeme#" + + "Istočnoaustralijsko ljetno vrijeme\x1bZapadnoaustralijsko vrijeme&Zapadn" + + "oaustralijsko standardno vrijeme\"Zapadnoaustralijsko ljetno vrijeme\x17" + + "Azerbejdžansko vrijeme\"Azerbejdžansko standardno vrijeme\x1eAzerbejdžan" + + "sko ljetno vrijeme\x0fAzorsko vrijeme\x1aAzorsko standardno vrijeme\x16A" + + "zorsko ljetno vrijeme\x14Bangladeško vrijeme\x1fBangladeško standardno v" + + "rijeme\x1bBangladeško ljetno vrijeme\x10Butansko vrijeme\x12Bolivijsko v" + + "rijeme\x13Brazilijsko vrijeme\x1eBrazilijsko standardno vrijeme\x1aBrazi" + + "lijsko ljetno vrijeme\x11Brunejsko vrijeme\x13Zelenortsko vrijeme\x1eZel" + + "enortsko standardno vrijeme\x1aZelenortsko ljetno vrijeme\x1cČamorsko st" + + "andardno vrijeme\x11Čatamsko vrijeme\x1cČatamsko standardno vrijeme\x18Č" + + "atamsko ljetno vrijeme\x12Čileansko vrijeme\x1dČileansko standardno vrij" + + "eme\x19Čileansko ljetno vrijeme\x0fKinesko vrijeme\x1aKinesko standardno" + + " vrijeme\x16Kinesko ljetno vrijeme\x15Čojbalsansko vrijeme Čojbalsansko " + + "standardno vrijeme\x1cČojbalsansko ljetno vrijeme\x1cVrijeme na Božićnom" + + " Ostrvu\x19Vrijeme na Ostrvima Kokos\x13Kolumbijsko vrijeme\x1eKolumbijs" + + "ko standardno vrijeme\x1aKolumbijsko ljetno vrijeme\x1bVrijeme na Kukovi" + + "m ostrvima&Standardno vrijeme na Kukovim ostrvima&Poluljetno vrijeme na " + + "Kukovim ostrvima\x10Kubansko vrijeme\x1bKubansko standardno vrijeme\x17K" + + "ubansko ljetno vrijeme\x15Vrijeme stanice Davis\"Vrijeme stanice Dumont-" + + "d’Urville\x18Istočnotimorsko vrijeme\x19Uskršnjeostrvsko vrijeme$Uskršnj" + + "eostrvsko standardno vrijeme Uskršnjeostrvsko ljetno vrijeme\x12Ekvadors" + + "ko vrijeme\x19Centralnoevropsko vrijeme$Centralnoevropsko standardno vri" + + "jeme Centralnoevropsko ljetno vrijeme\x18Istočnoevropsko vrijeme#Istočno" + + "evropsko standardno vrijeme\x1fIstočnoevropsko ljetno vrijeme\x1eDalekoi" + + "stočnoevropsko vrijeme\x17Zapadnoevropsko vrijeme\"Zapadnoevropsko stand" + + "ardno vrijeme\x1eZapadnoevropsko ljetno vrijeme\x13Folklandsko vrijeme" + + "\x1eFolklandsko standardno vrijeme\x1aFolklandsko ljetno vrijeme\x13Vrij" + + "eme na Fidžiju\x1eStandardno vrijeme na Fidžiju\x19Fidžijsko ljetno vrij" + + "eme\x1aFrancuskogvajansko vrijeme5Vrijeme na Francuskoj Južnoj Teritorij" + + "i i Antarktiku\x13Galapagosko vrijeme\x13Gambijersko vrijeme\x11Gruzijsk" + + "o vrijeme\x1cGruzijsko standardno vrijeme\x18Gruzijsko ljetno vrijeme" + + "\x1fVrijeme na Gilbertovim ostrvima\x11Griničko vrijeme\x1bIstočnogrenla" + + "ndsko vrijeme&Istočnogrenlandsko standardno vrijeme\"Istočnogrenlandsko " + + "ljetno vrijeme\x1aZapadnogrenlandsko vrijeme%Zapadnogrenlandsko standard" + + "no vrijeme!Zapadnogrenlandsko ljetno vrijeme\x15Guam standardno vreme" + + "\x1bZalivsko standardno vrijeme\x11Gvajansko vrijeme\x1cHavajsko-aleućan" + + "sko vrijeme'Havajsko-aleućansko standardno vrijeme#Havajsko-aleućansko l" + + "jetno vrijeme\x13Hongkonško vrijeme\x1eHongkonško standardno vrijeme\x1a" + + "Hongkonško ljetno vrijeme\x0fHovdsko vrijeme\x1aHovdsko standardno vrije" + + "me\x16Hovdsko ljetno vrijeme\x1bIndijsko standardno vrijeme\x1bVrijeme n" + + "a Indijskom okeanu\x13Indokinesko vrijeme\x1dCentralnoindonezijsko vrije" + + "me\x1cIstočnoindonezijsko vrijeme\x1bZapadnoindonezijsko vrijeme\x0fIran" + + "sko vrijeme\x1aIransko standardno vrijeme\x16Iransko ljetno vrijeme\x10I" + + "rkutsko vrijeme\x1bIrkutsko standardno vrijeme\x17Irkutsko ljetno vrijem" + + "e\x11Izraelsko vrijeme\x1cIzraelsko standardno vrijeme\x18Izraelsko ljet" + + "no vrijeme\x10Japansko vrijeme\x1bJapansko standardno vrijeme\x17Japansk" + + "o ljetno vrijeme\x1ePetropavlovsk-Kamčatski vreme)Petropavlovsk-Kamčatsk" + + "i standardno vreme2Petropavlovsk-Kamčatski letnje računanje vremena\x1cI" + + "stočnokazahstansko vrijeme\x1bZapadnokazahstansko vrijeme\x10Korejsko vr" + + "ijeme\x1bKorejsko standardno vrijeme\x17Korejsko ljetno vrijeme\x18Vrije" + + "me na Ostrvu Kosrae\x14Krasnojarsko vrijeme\x1fKrasnojarsko standardno v" + + "rijeme\x1bKrasnojarsko ljetno vrijeme\x14Kirgistansko vrijeme\x0bLanka v" + + "reme\x18Vrijeme na Ostrvima Lajn\x1aVrijeme na Ostrvu Lord Hau%Standardn" + + "o vrijeme na Ostrvu Lord Hau!Ljetno vrijeme na Ostrvu Lord Hau\x0bMakao " + + "vreme\x16Makao standardno vreme\x1fMakao letnje računanje vremena\x19Vri" + + "jeme na Ostrvu Makvori\x12Magadansko vrijeme\x1dMagadansko standardno vr" + + "ijeme\x19Magadansko ljetno vrijeme\x12Malezijsko vrijeme\x11Maldivsko vr" + + "ijeme\x1aVrijeme na Ostrvima Markiz\x1fVrijeme na Maršalovim ostrvima" + + "\x13Mauricijsko vrijeme\x1eMauricijsko standardno vrijeme\x1aMauricijsko" + + " ljetno vrijeme\x16Vrijeme stanice Mawson Sjeverozapadno meksičko vrijem" + + "e+Sjeverozapadno meksičko standardno vrijeme'Sjeverozapadno meksičko lje" + + "tno vrijeme\x1cMeksičko pacifičko vrijeme'Meksičko pacifičko standardno " + + "vrijeme#Meksičko pacifičko ljetno vrijeme\x14Ulanbatorsko vrijeme\x1fUla" + + "nbatorsko standardno vrijeme\x1bUlanbatorsko ljetno vrijeme\x11Moskovsko" + + " vrijeme\x1cMoskovsko standardno vrijeme\x18Moskovsko ljetno vrijeme\x13" + + "Mijanmarsko vrijeme\x17Vrijeme na Ostrvu Nauru\x10Nepalsko vrijeme\x18No" + + "vokaledonijsko vrijeme#Novokaledonijsko standardno vrijeme\x1fNovokaledo" + + "nijsko ljetno vrijeme\x15Novozelandsko vrijeme Novozelandsko standardno " + + "vrijeme\x1cNovozelandsko ljetno vrijeme\x17Njufaundlendsko vrijeme\"Njuf" + + "aundlendsko standardno vrijeme\x1eNjufaundlendsko ljetno vrijeme\x16Vrij" + + "eme na Ostrvu Niue\x12Norfolško vrijeme%Vrijeme na ostrvu Fernando di No" + + "ronja0Standardno vrijeme na ostrvu Fernando di Noronja,Ljetno vrijeme na" + + " ostrvu Fernando di Noronja\x1fSeverna Marijanska Ostrva vreme\x14Novosi" + + "birsko vrijeme\x1fNovosibirsko standardno vrijeme\x1bNovosibirsko ljetno" + + " vrijeme\x0dOmsko vrijeme\x18Omsko standardno vrijeme\x14Omsko ljetno vr" + + "ijeme\x13Pakistansko vrijeme\x1ePakistansko standardno vrijeme\x1aPakist" + + "ansko ljetno vrijeme\x17Vrijeme na Ostrvu Palau\x1eVrijeme na Papui Novo" + + "j Gvineji\x13Paragvajsko vrijeme\x1eParagvajsko standardno vrijeme\x1aPa" + + "ragvajsko ljetno vrijeme\x11Peruansko vrijeme\x1cPeruansko standardno vr" + + "ijeme\x18Peruansko ljetno vrijeme\x12Filipinsko vrijeme\x1dFilipinsko st" + + "andardno vrijeme\x19Filipinsko ljetno vrijeme\x1aVrijeme na Ostrvima Fin" + + "iks)Vrijeme na Ostrvima Sveti Petar i Mikelon4Standardno vrijeme na Ostr" + + "vima Sveti Petar i Mikelon0Ljetno vrijeme na Ostrvima Sveti Petar i Mike" + + "lon\x1bVrijeme na Ostrvima Pitkern\x18Vrijeme na Ostrvu Ponape\x14Pjongj" + + "anško vrijeme\x0fKizilorda vreme\x1aKizilorda standardno vreme#Kizilorda" + + " letnje računanje vremena\x12Reunionsko vrijeme\x17Vrijeme stanice Rothe" + + "ra\x12Sahalinsko vrijeme\x1dSahalinsko standardno vrijeme\x19Sahalinsko " + + "ljetno vrijeme\x0cSamara vreme\x17Samara standardno vreme Samara letnje " + + "računanje vremena\x11Samoansko vrijeme\x1cSamoansko standardno vrijeme" + + "\x18Samoansko ljetno vrijeme\x12Sejšelsko vrijeme\x1eSingapursko standar" + + "dno vrijeme\x1fVrijeme na Solomonskim ostrvima\x1bJužnodžordžijsko vrije" + + "me\x12Surinamsko vrijeme\x15Vrijeme stanice Syowa\x13Tahićansko vrijeme" + + "\x11Tajpejsko vrijeme\x1cTajpejsko standardno vrijeme\x18Tajpejsko ljetn" + + "o vrijeme\x17Tadžikistansko vrijeme\x19Vrijeme na Ostrvu Tokelau\x11Tong" + + "ansko vrijeme\x1cTongansko standardno vrijeme\x18Tongansko ljetno vrijem" + + "e\x0fČučko vrijeme\x17Turkmenistansko vrijeme\"Turkmenistansko standardn" + + "o vrijeme\x1eTurkmenistansko ljetno vrijeme\x13Tuvaluansko vrijeme\x12Ur" + + "ugvajsko vrijeme\x1dUrugvajsko standardno vrijeme\x19Urugvajsko ljetno v" + + "rijeme\x15Uzbekistansko vrijeme Uzbekistansko standardno vrijeme\x1cUzbe" + + "kistansko ljetno vrijeme\x14Vanuatuansko vrijeme\x1fVanuatuansko standar" + + "dno vrijeme\x1bVanuatuansko ljetno vrijeme\x15Venecuelansko vrijeme\x16V" + + "ladivostočko vrijeme!Vladivostočko standardno vrijeme\x1dVladivostočko l" + + "jetno vrijeme\x14Volgogradsko vrijeme\x1fVolgogradsko standardno vrijeme" + + "\x1bVolgogradsko ljetno vrijeme\x16Vrijeme stanice Vostok\x16Vrijeme na " + + "Ostrvu Vejk\"Vrijeme na Ostrvima Valis i Futuna\x10Jakutsko vrijeme\x1bJ" + + "akutsko standardno vrijeme\x17Jakutsko ljetno vrijeme\x18Jekaterinburško" + + " vrijeme#Jekaterinburško standardno vrijeme\x1fJekaterinburško ljetno vr" + + "ijeme\x06reb. I\x07reb. II\x08džum. I\x09džum. II\x04red.\x05šaw.\x08zú " + + "l-k.\x08zú l-h.\x0dza {0} minuty\x0cza {0} minut\x0eza {0} sekundy\x0dza" + + " {0} sekund\x05marts\x03maj\x06august\x09september\x07oktober\x08novembe" + + "r\x08december\x03maj\x04měr\x03awg\x03now\x05měrc\x05apryl\x05junij\x05j" + + "ulij\x06awgust\x08nowember\x0eza {0} minuśe\x0eza {0} minutow\x0fza {0} " + + "sekunźe\x0fza {0} sekundow\x04aŭg\x06rab. I\x07rab. II\x06jum. I\x07jum." + + " II\x04raj.\x04sha.\x05shaw.\x09dhuʻl-q.\x09dhuʻl-h.\x04mars\x06apríl" + + "\x03mai\x06august\x09september\x08november\x08desember\x03feb\x03mar\x03" + + "apr\x03jun\x03jul\x03aug\x03sep\x03okt\x03nov\x03des\x025.\x026.\x027." + + "\x028.\x029.\x0310.\x0311.\x0312.\x0313.\x02AD\x06R.O.C.\x06GMT{0}\x03GM" + + "T\x03mej\x04meja\x0eza {0} minuće\x10za {0} sekundźe\x04saf.\x04raj.\x04" + + "ram.\x09dhuʻl-Q.\x09dhuʻl-H.\x03feb\x03mar\x03apr\x03nov\x04mars\x03mai" + + "\x04juni\x04juli\x09september\x08november\x08desember\x03mar\x03sep\x03o" + + "kt\x03nov\x03des\x09Dhuʻl-H.\x04mars\x05april\x03mai\x04juni\x04juli\x09" + + "september\x07oktober\x08november\x03fev\x03mar\x03abr\x03ago\x03set\x03o" + + "ut\x03dez\x04máj\x04jún\x04júl\x04rad.\x05šau.\x09dhú l-k.\x09dhú l-h." + + "\x05marec\x03maj\x09september\x08november\x08december\x03maj\x03shk\x03p" + + "ri\x03maj\x03qer\x04korr\x04gush\x03sht\x03tet\x04nën\x03dhj\x03maj\x03p" + + "on\x03sre\x05n. e.\x0fsledeće godine\x0aponedeljak\x06utorak\x09četvrtak" + + "\x05petak\x06subota" + +var bucket14 string = "" + // Size: 8349 bytes + "\x04БЕ\x08Таут\x08Баба\x0aХатор\x0aКиахк\x08Тоба\x0aАмшир\x10Барамхат" + + "\x10Барамуда\x0cБашанс\x0aПаона\x08Епеп\x0aМесра\x08Наси\x10Мескерем\x0c" + + "Текемт\x0aХедар\x0cТахсас\x06Тер\x0eЈекатит\x0eМегабит\x0cМиазиа\x0cГен" + + "бот\x08Сене\x0aХамле\x0cНехасе\x0eПагумен\x0cd.M.y. GGGGG\x0cјануар\x0e" + + "фебруар\x08март\x0aаприл\x06мај\x08јуни\x08јули\x0cаугуст\x12септембар" + + "\x0eоктобар\x10новембар\x10децембар\x02ј\x02ф\x02м\x02а\x02с\x02о\x02н" + + "\x02д\x06нед\x06пон\x06уто\x06сри\x06чет\x06пет\x06суб\x0eнедјеља\x14пон" + + "едјељак\x0cуторак\x0eсриједа\x10четвртак\x0aпетак\x0cсубота\x02п\x02у" + + "\x02ч\x03К1\x03К2\x03К3\x03К4\x1dПрво тромесечје\x1fДруго тромесечје\x1f" + + "Треће тромесечје#Четврто тромесечје\x11пре подне\x0eпоподне\x1aприје но" + + "ве ере\x0fнове ере\x0bп. н. е.\x07н. е.\x09п.н.е.\x06н.е.\x11EEEE, dd. " + + "MMMM y.\x0bdd. MMMM y.\x08dd.MM.y.\x0aТишри\x0cХешван\x0cКислев\x0aТевет" + + "\x0aШеват\x0aАдар I\x08Адар\x0bАдар II\x0aНисан\x08Ијар\x0aСиван\x0aТаму" + + "з\x04Ав\x08Елул\x0cЧаитра\x0eВаисака\x0eЈиаиста\x0aАсада\x0eСравана\x0a" + + "Бадра\x0cАсвина\x0eКартика\x10Аргајана\x0aПауза\x08Мага\x0eФалгуна\x08С" + + "АКА\x07Мух.\x07Саф.\x09Реб. 1\x09Реб. 2\x09Џум. 1\x09Џум. 2\x07Реџ.\x05" + + "Ша.\x07Рам.\x05Ше.\x0aЗул-к.\x0aЗул-х.\x0eМурахам\x0aСафар\x0cРабиʻ I" + + "\x0dРабиʻ II\x0eЈумада I\x0fЈумада II\x0aРађаб\x0cШаʻбан\x0eРамадан\x0aШ" + + "авал\x13Дуʻл-Киʻда\x11Дуʻл-хиђа\x0eМухарем\x0aСафер\x0aРеби 1\x0aРеби 2" + + "\x0eЏумаде 1\x0eЏумаде 2\x0aРеџеб\x0eРамазан\x0aШевал\x0fЗул-каде\x0fЗул" + + "-хиџе\x04АХ\x16Таика (645–650)\x18Хакучи (650–671)\x18Хакухо (672–686)" + + "\x14Шучо (686–701)\x16Таихо (701–704)\x16Кеиун (704–708)\x14Вадо (708–71" + + "5)\x16Реики (715–717)\x14Јоро (717–724)\x16Јинки (724–729)\x18Темпио (72" + + "9–749)!Темпио-кампо (749-749)\x1fТемпио-шохо (749-757)\x1fТемпио-хођи (7" + + "57-765)\x1fТемпо-ђинго (765-767)\x1fЂинго-кеиун (767-770)\x14Хоки (770–7" + + "80)\x13Тен-о (781-782)\x1aЕнрјаку (782–806)\x16Даидо (806–810)\x16Конин " + + "(810–824)\x16Тенчо (824–834)\x14Шова (834–848)\x14Кајо (848–851)\x14Нињу" + + " (851–854)\x16Саико (854–857)\x16Тенан (857–859)\x16Јоган (859–877)\x18Г" + + "енкеи (877–885)\x14Ниња (885–889)\x18Кампјо (889–898)\x16Шотаи (898–901" + + ")\x14Енђи (901–923)\x14Енчо (923–931)\x16Шохеи (931–938)\x18Тенгјо (938–" + + "947)\x1cТенриаку (947–957)\x1aТентоку (957–961)\x12Ова (961–964)\x14Кохо" + + " (964–968)\x12Ана (968–970)\x1aТенроку (970–973)\x15Тен-ен (973-976)\x16" + + "Јоген (976–978)\x18Тенген (978–983)\x16Еикан (983–985)\x14Кана (985–987" + + ")\x13Еи-ен (987-989)\x14Еисо (989–990)\x1aШорјаку (990–995)\x18Чотоку (9" + + "95–999)\x15Чохо (999–1004)\x18Канко (1004–1012)\x16Чова (1012–1017)\x18К" + + "анин (1017–1021)\x16Ђиан (1021–1024)\x16Мању (1024–1028)\x18Чоген (1028" + + "–1037)\x1cЧорјаку (1037–1040)\x18Чокју (1040–1044)\x1cКантоку (1044–10" + + "46)\x16Еишо (1046–1053)\x18Тенђи (1053–1058)\x18Кохеи (1058–1065)\x1cЂир" + + "јаку (1065–1069)\x18Енкју (1069–1074)\x16Шохо (1074–1077)\x1cШорјаку (1" + + "077–1081)\x16Еишо (1081–1084)\x18Отоку (1084–1087)\x18Канђи (1087–1094)" + + "\x16Кахо (1094–1096)\x16Еичо (1096–1097)\x1aШотоку (1097–1099)\x16Кова (" + + "1099–1104)\x16Чођи (1104–1106)\x16Кашо (1106–1108)\x18Тенин (1108–1110)" + + "\x17Тен-еи (1110-1113)\x18Еикју (1113–1118)\x17Ђен-еи (1118-1120)\x16Хоа" + + "н (1120–1124)\x18Тенђи (1124–1126)\x18Даиђи (1126–1131)\x18Теншо (1131–" + + "1132)\x18Чошао (1132–1135)\x16Хоен (1135–1141)\x16Еиђи (1141–1142)\x16Ко" + + "ђи (1142–1144)\x16Тењо (1144–1145)\x18Кјуан (1145–1151)\x1aНинпеи (1151" + + "–1154)\x18Кјују (1154–1156)\x18Хоген (1156–1159)\x18Хеиђи (1159–1160)" + + "\x1cЕирјаку (1160–1161)\x14Охо (1161–1163)\x18Чокан (1163–1165)\x18Еиман" + + " (1165–1166)\x17Нин-ан (1166-1169)\x14Као (1169–1171)\x16Шоан (1171–1175" + + ")\x18Анген (1175–1177)\x16Ђишо (1177–1181)\x16Јова (1181–1182)\x16Ђуеи (" + + "1182–1184)\x1eГенрјуку (1184–1185)\x18Бунђи (1185–1190)\x1aКенкју (1190–" + + "1199)\x16Шођи (1199–1201)\x18Кенин (1201–1204)\x1aГенкју (1204–1206)\x17" + + "Кен-еи (1206-1207)\x18Шоген (1207–1211)\x1eКенрјаку (1211–1213)\x18Кенп" + + "о (1213–1219)\x18Шокју (1219–1222)\x12Ђу (1222–1224)\x18Ђенин (1224–122" + + "5)\x1aКароку (1225–1227)\x18Антеи (1227–1229)\x18Канки (1229–1232)\x16Ђо" + + "еи (1232–1233)\x1cТемпуку (1233–1234)\x1eБунрјаку (1234–1235)\x18Катеи " + + "(1235–1238)\x1eРјакунин (1238–1239)\x13Ен-о (1239-1240)\x16Нињи (1240–12" + + "43)\x1aКанген (1243–1247)\x16Хођи (1247–1249)\x18Кенчо (1249–1256)\x18Ко" + + "ген (1256–1257)\x16Шока (1257–1259)\x18Шоген (1259–1260)\x15Бун-о (1260" + + "-1261)\x16Кочо (1261–1264)\x17Бун-еи (1264-1275)\x18Кенђи (1275–1278)" + + "\x16Коан (1278–1288)\x12Шу (1288–1293)\x18Еинин (1293–1299)\x16Шоан (129" + + "9–1302)\x1aКенген (1302–1303)\x18Каген (1303–1306)\x1aТокуђи (1306–1308)" + + "\x18Енкеи (1308–1311)\x14Очо (1311–1312)\x16Шова (1312–1317)\x18Бунпо (1" + + "317–1319)\x16Ђено (1319–1321)\x1aЂенкјо (1321–1324)\x16Шочу (1324–1326)" + + "\x1aКареки (1326–1329)\x1cГентоку (1329–1331)\x18Генко (1331–1334)\x16Ке" + + "му (1334–1336)\x18Енген (1336–1340)\x1aКококу (1340–1346)\x18Шохеи (134" + + "6–1370)\x1cКентоку (1370–1372)\x16Бучу (1372–1375)\x16Тењу (1375–1379)" + + "\x1cКорјаку (1379–1381)\x16Кова (1381–1384)\x18Генчу (1384–1392)\x1cМеит" + + "оку (1384–1387)\x18Какеи (1387–1389)\x12Ку (1389–1390)\x1cМеитоку (1390" + + "–1394)\x14Оеи (1394–1428)\x16Шочо (1428–1429)\x18Еикјо (1429–1441)\x1c" + + "Какитсу (1441–1444)\x17Бун-ан (1444-1449)\x1aХотоку (1449–1452)\x1cКјот" + + "оку (1452–1455)\x16Кошо (1455–1457)\x1aЧороку (1457–1460)\x18Каншо (146" + + "0–1466)\x18Буншо (1466–1467)\x16Онин (1467–1469)\x1aБунмеи (1469–1487)" + + "\x18Чокјо (1487–1489)\x1aЕнтоку (1489–1492)\x16Меио (1492–1501)\x18Бунки" + + " (1501–1504)\x16Еишо (1504–1521)\x18Таиеи (1521–1528)\x1cКјороку (1528–1" + + "532)\x1aТенмон (1532–1555)\x16Кођи (1555–1558)\x1aЕироку (1558–1570)\x18" + + "Генки (1570–1573)\x18Теншо (1573–1592)\x1cБунроку (1592–1596)\x18Кеичо " + + "(1596–1615)\x18Генва (1615–1624)\x17Кан-еи (1624-1644)\x16Шохо (1644–164" + + "8)\x18Кеиан (1648–1652)\x12Шу (1652–1655)\x1eМеирјаку (1655–1658)\x16Мањ" + + "и (1658–1661)\x1aКанбун (1661–1673)\x16Енпо (1673–1681)\x18Тенва (1681–" + + "1684)\x18Јокјо (1684–1688)\x1cГенроку (1688–1704)\x16Хоеи (1704–1711)" + + "\x1aШотоку (1711–1716)\x18Кјохо (1716–1736)\x1aГенбун (1736–1741)\x18Кан" + + "по (1741–1744)\x18Енкјо (1744–1748)\x17Кан-ен (1748-1751)\x1cХорјаку (1" + + "751–1764)\x18Меива (1764–1772)\x15Ан-еи (1772-1781)\x1aТенмеи (1781–1789" + + ")\x1aКансеи (1789–1801)\x18Кјова (1801–1804)\x18Бунка (1804–1818)\x1aБун" + + "сеи (1818–1830)\x18Тенпо (1830–1844)\x16Кока (1844–1848)\x16Каеи (1848–" + + "1854)\x18Ансеи (1854–1860)\x17Ман-ен (1860-1861)\x1aБункју (1861–1864)" + + "\x18Генђи (1864–1865)\x18Кеико (1865–1868)\x0aМеиђи\x0aТаишо\x08Шова\x0c" + + "Хаисеи\x08M/d/yy G\x12Фаравадин\x14Ордибехешт\x0cКордад\x06Тир\x0cМорда" + + "д\x10Шахривар\x08Мехр\x08Абан\x08Азар\x06Деј\x0cБахман\x0cЕсфанд\x04АП" + + "\x0bПре РК\x04РК\x19Прошле године\x13Ове године\x1bСледеће године\x15за " + + "{0} годину\x15за {0} године\x15за {0} година\x17пре {0} годину\x17пре {0" + + "} године\x17пре {0} година\x1bПрошлог месеца\x15Овог месеца\x1dСледећег " + + "месеца\x13за {0} месец\x15за {0} месеца\x15за {0} месеци\x15пре {0} мес" + + "ец\x17пре {0} месеца\x17пре {0} месеци\x0cнедеља\x19Прошле недеље\x13Ов" + + "е недеље\x1bСледеће недеље\x02о\x02в\x15за {0} години\x08март\x0aаприл" + + "\x06мај\x06јун\x06јул\x0cавгуст\x06мај\x06јун\x06јул\x06сре\x12понедељак" + + "\x0aсреда\x06н.е.\x02л\x02б\x02к\x02т\x02ж\x02г" + +var bucket15 string = "" + // Size: 33026 bytes + "\x15за {0} недељу\x15за {0} недеље\x15за {0} недеља\x17пре {0} недељу" + + "\x17пре {0} недеље\x17пре {0} недеља\x06дан\x10прекјуче\x08јуче\x0aданас" + + "\x0aсутра\x14прекосутра\x0fза {0} дан\x11за {0} дана\x11пре {0} дан\x13п" + + "ре {0} дана\x16дан у недељи пре подне/поподне\x0fза {0} сат\x11за {0} с" + + "ата\x11за {0} сати\x11пре {0} сат\x13пре {0} сата\x13пре {0} сати\x0aми" + + "нут\x13за {0} минут\x15за {0} минута\x15пре {0} минут\x17пре {0} минута" + + "\x0cсекунд\x15за {0} секунд\x17за {0} секунде\x17за {0} секунди\x17пре {" + + "0} секунд\x19пре {0} секунде\x19пре {0} секунди\x08зона\x1dВреме у земљи" + + ": {0}\x13Акре време(Акре стандардно време3Акре летње рачунање времена%Ав" + + "ганистанско време,Централно-афричко време(Источно-афричко време$Јужно-а" + + "фричко време(Западно-афричко време=Западно-афричко стандардно времеHЗап" + + "адно-афричко летње рачунање времена\x17Аљашко време,Аљашко стандардно в" + + "реме\"Аљашко летње време\x17Алмати време,Алмати стандардно време7Алмати" + + " летње рачунање времена\x17Амазон време,Амазон стандардно време7Амазон л" + + "етње рачунање времена\x1dЦентрално време2Централно стандардно време=Цен" + + "трално летње рачунање времена\x19Источно време.Источно стандардно време" + + "9Источно летње рачунање времена\x1dПланинско време2Планинско стандардно " + + "време=Планинско летње рачунање времена\x1dПацифичко време2Пацифичко ста" + + "ндардно време=Пацифичко летње рачунање времена\x17Анадир време,Анадир с" + + "тандардно време7Анадир летње рачунање времена\x19Акватау време.Акватау " + + "стандардно време9Акватау летње рачунање времена\x19Акутобе време.Акутоб" + + "е стандардно време9Акутобе летње рачунање времена\x1dАрабијско време2Ар" + + "абијско стандардно време=Арабијско летње рачунање времена\x1dАргентина " + + "време2Аргентина стандардно време=Аргентина летње рачунање времена,Запад" + + "на Аргентина времеAЗападна Аргентина стандардно времеLЗападна Аргентина" + + " летње рачунање времена\x1bАрменија време0Арменија стандардно време;Арме" + + "нија летње рачунање времена\x1bАтланско време0Атланско стандардно време" + + "9Атланско лтње рачунање времена6Аустралијско централно времеKАустралијск" + + "о централно стандардно времеVАустралијско централно летње рачунање врем" + + "енаEАустралијско централно западно времеZАустралијско централно западно" + + " стандардно времеeАустралијско централно западно летње рачунање времена2" + + "Аустралијско источно времеGАустралијско источно стандардно времеRАустра" + + "лијско источно летње рачунање времена2Аустралијско западно времеGАустра" + + "лијско западно стандардно времеRАустралијско западно летње рачунање вре" + + "мена\x1fАзербејџан време4Азербејџан стандардно време?Азербејџан летње р" + + "ачунање времена\x15Азори време*Азори стандардно време5Азори летње рачун" + + "ање времена\x1dБангладеш време2Бангладеш стандардно време=Бангладеш лет" + + "ње рачунање времена\x15Бутан време\x1bБоливија време\x1dБразилија време" + + "2Бразилија стандардно време=Бразилија летње рачунање времена*Брунеј Дару" + + "салум време!Зелениртско време6Зелениртско стандардно времеAЗеленортско " + + "летње рачунање времена\x17Чаморо време\x15Чатам време*Чатам стандардно " + + "време5Чатам летње рачунање времена\x13Чиле време(Чиле стандардно време3" + + "Чиле летње рачунање времена\x13Кина време.Кинеско стандардно време3Кина" + + " летње рачунање времена\x1dЧојбалсан време2Чојбалсан стандардно време=Чо" + + "јбалсан летње рачунање времена&Божићна острва време1Кокос (Келинг) Остр" + + "ва време\x1dКолумбија време2Колумбија стандардно време=Колумбија летње " + + "рачунање времена$Кукова острва време9Кукова острва стандардно времеMКук" + + "ова острва полу-летње рачунање времена\x13Куба време(Куба стандардно вр" + + "еме3Куба летње рачунање времена\x17Дејвис време%Димон д’Урвил време$Ист" + + "очни тимор време&Ускршња острва време;Ускршња острва стандардно времеFУ" + + "скршња острва летње рачунање времена\x19Еквадор време'Средњеевропско вр" + + "еме<Средњеевропско стандардно времеGСредњеевропско летње рачунање време" + + "на)Источноевропско време>Источноевропско стандардно времеIИсточноевропс" + + "ко летње рачунање времена)Западноевропско време>Западноевропско стандар" + + "дно времеIЗападноевропско летње рачунање времена.Фолкландска Острва вре" + + "меCФолкландска Острва стандардно времеNФолкландска Острва летње рачунањ" + + "е времена\x13Фиџи време(Фиџи стандардно време3Фиџи летње рачунање време" + + "на,Француска Гвајана времеBФранцуско јужно и антарктичко време\x1dГалап" + + "агос време\x1bГамбијер време\x19Грузија време.Грузија стандардно време9" + + "Грузија летње рачунање времена&Гилберт острва време&Гринвич средње врем" + + "е*Источни Гренланд време?Источни Гренланд стандардно времеJИсточни Грен" + + "ланд летње рачунање времена*Западни Гренланд време?Западни Гренланд ста" + + "ндардно времеJЗападни Гренланд летње рачунање времена(Гуам стандардно в" + + "реме\x15Залив време\x19Гвајана време,Хавајско-алеутско времеAХавајско-а" + + "леутско стандардно времеLХавајско-алеутско летње рачунање времена\x1cХо" + + "нг Конг време1Хонг Конг стандардно време?Хонгконшко летње рачунање врем" + + "ена\x13Ховд време(Ховд стандардно време3Ховд летње рачунање времена0Инд" + + "ијско стандардно време,Индијско океанско време\x1bИндокина време6Центра" + + "лно-индонезијско време2Источно-индонезијско време2Западно-индонезијско " + + "време\x13Иран време(Иран стандардно време3Иран летње рачунање времена" + + "\x17Иркуцк време,Иркуцк стандардно време7Иркуцк летње рачунање времена" + + "\x1dИзраелско време2Израелско стандардно време=Израелско летње рачунање " + + "времена\x1bЈапанско време0Јапанско стандардно време;Јапанско летње рачу" + + "нање времена:Петропавловско-камчатско времеOПетропавловско-камчатско ст" + + "андардно времеXПетропавловско-камчатско летње рачунање вемена2Источно-к" + + "азахстанско време2Западно-казахстанско време\x17Кореја време0Корејско с" + + "тандардно време;Корејско летње рачунање времена\x15Кошре време!Красноја" + + "рск време6Краснојарск стандардно времеAКраснојарск летње рачунање време" + + "на\x1fКиргизстан време\x1cШри Ланка време Лине Острва време\x1aЛорд Хов" + + " време/Лорд Хов стандардно време:Лорд Хов летње рачунање времена\x15Мака" + + "о време*Макао стандардно време3Макао летње рачунање вемена!Макверијско " + + "време\x19Магадан време.Магадан стандардно време7Магадан летње рачунање " + + "вемена\x1bМалезија време\x19Малдиви време\x17Маркиз време*Маршалска Ост" + + "рва време\x1fМаурицијус време4Маурицијус стандардно време?Маурицијус ле" + + "тње рачунање времена\x15Мосон време\x1eУлан Батор време3Улан Батор стан" + + "дардно време>Улан Батор летње рачунање времена\x17Москва време,Москва с" + + "тандардно време7Москва летње рачунање времена\x1bМијанмар време\x15Наур" + + "у време\x15Непал време(Нова Каледонија време=Нова Каледонија стандардно" + + " времеHНова Каледонија летње рачунање времена Нови Зеланд време5Нови Зел" + + "анд стандардно време@Нови Зеланд летње рачунање времена!Њуфаундленд вре" + + "ме6Њуфаундленд стандардно времеAЊуфаундленд летње рачунање времена\x13Н" + + "иуе време&Норфолк Острво време-Фернандо де Нороња времеBФернандо де Нор" + + "оња стандардно времеMФернандо де Нороња летње рачунање времена;Северна " + + "Маријанска Острва време!Новосибирск време6Новосибирск стандардно времеA" + + "Новосибирск летње рачунање времена\x13Омск време(Омск стандардно време3" + + "Омск летње рачунање времена\x1bПакистан време0Пакистан стандардно време" + + ";Пакистан летње рачунање времена\x15Палау време-Папуа Нова Гвинеја време" + + "\x1bПарагвај време0Парагвај стандардно време;Парагвај летње рачунање вре" + + "мена\x13Перу време(Перу стандардно време3Перу летње рачунање времена" + + "\x1bФилипини време0Филипини стандардно време;Филипини летње рачунање вре" + + "мена$Феникс острва време,Сен Пјер и Микелон времеAСен Пјер и Микелон ст" + + "андардно времеJСен Пјер и Микелон летње рачунање вемена\x19Питкерн врем" + + "е\x17Понапе време\x1dКизилорда време2Кизилорда стандардно време=Кизилор" + + "да летње рачунање времена\x19Реинион време\x17Ротера време\x19Сахалин в" + + "реме.Сахалин стандардно време9Сахалин летње рачунање времена\x17Самара " + + "време,Самара стандардно време7Самара летње рачунање времена\x15Самоа вр" + + "еме*Самоа стандардно време5Самоа летње рачунање времена\x19Сејшели врем" + + "е0Сингапур стандардно време,Соломонска Острва време$Јужна Џорџија време" + + "\x19Суринам време\x13Шова време\x17Тахити време\x17Таипеи време*Таипеи с" + + "тандардно веме7Таипеи летње рачунање времена\x1fТаџикистан време\x19Ток" + + "елау време\x15Тонга време*Тонга стандардно време5Тонга летње рачунање в" + + "ремена\x13Трук време#Туркменистан време8Туркменистан стандардно времеCТ" + + "уркменистан летње рачунање времена\x17Тувалу време\x19Уругвај време.Уру" + + "гвај стандардно време9Уругвај летње рачунање времена\x1fУзбекистан врем" + + "е4Узбекистан стандардно време?Узбекистан летње рачунање времена\x19Вану" + + "ату време.Вануату стандардно време9Вануату летње рачунање времена\x1dВе" + + "нецуела време!Владивосток време6Владивосток стандардно времеAВладивосто" + + "к летње рачунање времена\x1dВолгоград време2Волгоград стандардно време=" + + "Волгоград летње рачунање времена\x17Восток време Вејк острво време2Вали" + + "с и Футуна Острва време\x19Јакутск време.Јакутск стандардно време9Јакут" + + "ск летње рачунање времена%Јекатеринбург време:Јекатеринбург стандардно " + + "времеEЈекатеринбург летње рачунање времена\x15за {0} минути$Време во Ав" + + "ганистан+Средноафриканско време-Источноафриканско времеAВреме во Јужноа" + + "фриканска Република-Западноафриканско времеBЗападноафриканско стандардн" + + "о време\x1eВреме во Алјаска3Стандардно време во Алјаска\x1cВреме во Ама" + + "зон1Стандардно време во Амазон@Централно време во Северна АмерикаUЦентр" + + "ално стандардно време во Северна Америка\x1dАнадирско време2Анадирско с" + + "тандардно време\x1aВреме во Апија/Стандардно време во Апија\x19Арапско " + + "време.Стандардно арапско време\"Време во Аргентина7Стандардно време во " + + "Аргентина1Време во западна АргентинаFСтандардно време во западна Аргент" + + "ина Време во Ерменија5Стандардно време во Ерменија\x1dАтлантско време2А" + + "тлантско стандардно време7Време во Централна АвстралијаLСтандардно врем" + + "е во Централна АвстралијаIВреме во Централна и Западна Австралија^Станд" + + "ардно време во Централна и Западна Австралија3Време во Источна Австрали" + + "јаHСтандардно време во Источна Австралија3Време во Западна АвстралијаHС" + + "тандардно време во Западна Австралија$Време во Азербејџан9Стандардно вр" + + "еме во Азербејџан1Време на Азорските ОстровиFСтандардно време на Азорск" + + "ите Острови\"Време во Бангладеш7Стандардно време во Бангладеш\x1aВреме " + + "во Бутан Време во Боливија\"Време во Бразилија7Стандардно време во Браз" + + "илија/Време во Брунеј Дарусалам#Време на Кабо Верде8Стандардно време на" + + " Кабо Верде\x1cВреме во Чаморо\x1aВреме во Чатам/Стандардно време во Чат" + + "ам\x18Време во Чиле-Стандардно време во Чиле\x18Време во Кина-Стандардн" + + "о време во Кина\"Време во Чојбалсан7Стандардно време во Чојбалсан/Време" + + " на Божиќниот Остров3Време на Кокосовите Острови\"Време во Колумбија7Ста" + + "ндардно време во Колумбија)Време на Островите Кук>Стандардно време на О" + + "стровите Кук\x18Време во Куба-Стандардно време во Куба\x1cВреме во Дејв" + + "ис'Време во Димон Дирвил)Време во Источен Тимор7Време на Велигденскиот " + + "ОстровLСтандардно време на Велигденскиот Остров\x1eВреме во Еквадор'Сре" + + "дноевропско време<Средноевропско стандардно време'Калининградско време9" + + "Време на Фолкландските ОстровиNСтандардно време на Фолкландските Остров" + + "и\x18Време во Фиџи-Стандардно време во Фиџи1Време во Француска Гвајана" + + "\"Време во Галапагос\x1aВреме во Гамбе\x1eВреме во Грузија3Стандардно вр" + + "еме во Грузија1Време на Островите Гилберт)Средно време по Гринич/Време " + + "во Источен ГренландDСтандардно време во Источен Гренланд/Време во Запад" + + "ен ГренландDСтандардно време во Западен Гренланд5Време на Мексиканскиот" + + " Залив\x1eВреме во Гвајана<Време во Хаваи - Алеутски островиQСтандардно " + + "време во Хаваи - Алеутски острови!Време во Хонг Конг6Стандардно време в" + + "о Хонг Конг\x18Време во Ховд-Стандардно време во Ховд\x1cВреме во Индиј" + + "а)Време на Индиски океан Време во Индокина7Време во Централна Индонезиј" + + "а3Време во Источна Индонезија3Време во Западна Индонезија\x18Време во И" + + "ран-Стандардно време во Иран\x1eВреме во Иркутск3Стандардно време во Ир" + + "кутск\x1cВреме во Израел1Стандардно време во Израел Време во Јапонија5С" + + "тандардно време во Јапонија1Време во Источен Казахстан1Време во Западен" + + " Казахстан\x1cВреме во Кореја1Стандардно време во Кореја\x1aВреме во Кос" + + "ра&Време во Краснојарск;Стандардно време во Краснојарск\"Време во Кирги" + + "стан-Време во Линиски Острови\x1fВреме во Лорд Хау4Стандардно време во " + + "Лорд Хау/Време на Островот Макуари\x1eВреме во Магадан3Стандардно време" + + " во Магадан Време во Малезија\x1eВреме на Малдиви Време во Маркесас1Врем" + + "е на Маршалски Острови\"Време на Маврициус7Стандардно време на Маврициу" + + "с\x1aВреме во Мосон9Време во северозападно МексикоNСтандардно време во " + + "северозападно Мексико1Пацифичко време во МексикоFСтандардно пацифичко в" + + "реме во Мексико#Време во Улан Батор8Стандардно време во Улан Батор\x1cВ" + + "реме во Москва1Стандардно време во Москва\x1eВреме во Мјанмар\x1aВреме " + + "во Науру\x1aВреме во Непал-Време во Нова КаледонијаBСтандардно време во" + + " Нова Каледонија#Време во Нов Зеланд8Стандардно време во Нов Зеланд&Врем" + + "е на Њуфаундленд;Стандардно време на Њуфаундленд\x18Време во Ниуе1Време" + + " на Островите Норфолк2Време на Фернандо де НороњаGСтандардно време на Фе" + + "рнандо де Нороња&Време во Новосибирск;Стандардно време во Новосибирск" + + "\x18Време во Омск-Стандардно време во Омск Време во Пакистан5Стандардно " + + "време во Пакистан\x1aВреме во Палау2Време во Папуа Нова Гвинеја Време в" + + "о Парагвај5Стандардно време во Парагвај\x18Време во Перу-Стандардно вре" + + "ме во Перу Време во Филипини5Стандардно време во Филипини/Време на Остр" + + "овите Феникс8Време на на Сент Пјер и МикеланHСтандардно време на Сент П" + + "јер и Микелан\x1eВреме во Питкерн\x1cВреме во Понапе\"Време во Пјонгјан" + + "г Време на Ријунион\x1cВреме во Ротера\x1eВреме во Сакалин3Стандардно в" + + "реме во Сакалин\x1aВреме во Самоа/Стандардно време во Самоа\x1eВреме на" + + " Сејшели Време во Сингапур7Време на Соломонските острови)Време во Јужна " + + "Грузија\x1eВреме во Суринам\x1cВреме во Сајова\x1cВреме во Тахити\x1cВр" + + "еме во Тајпеј1Стандардно време во Тајпеј$Време во Таџикистан\x1eВреме в" + + "о Токелау\x1aВреме во Тонга/Стандардно време во Тонга\x18Време во Чуук(" + + "Време во Туркменистан=Стандардно време во Туркменистан\x1cВреме во Тува" + + "лу\x1eВреме во Уругвај3Стандардно време во Уругвај$Време во Узбекистан9" + + "Стандардно време во Узбекистан\x1eВреме во Вануату3Стандардно време во " + + "Вануату\"Време во Венецуела&Време во Владивосток;Стандардно време во Вл" + + "адивосток\"Време во Волгоград7Стандардно време во Волгоград\x1cВреме во" + + " Восток)Време на островот Вејк*Време во Валис и Футуна\x1eВреме во Јакут" + + "ск3Стандардно време во Јакутск(Време во Екатеринбург=Стандардно време в" + + "о Екатеринбург\x1fАвганистан време3Западно-афричко летње време\x0cАљаск" + + "а-Аљаска, стандардно време#Аљаска, летње време-Амазон, стандардно време" + + "#Амазон, летње време<Северноамеричко централно времеQСеверноамеричко цен" + + "трално стандардно времеGСеверноамеричко централно летње време8Северноам" + + "еричко источно времеMСеверноамеричко источно стандардно времеCСеверноам" + + "еричко источно летње време<Северноамеричко планинско времеQСеверноамери" + + "чко планинско стандардно времеGСеверноамеричко планинско летње време<Се" + + "верноамеричко пацифичко времеQСеверноамеричко пацифичко стандардно врем" + + "еGСеверноамеричко пацифичко летње време\x15Апија време+Апија, стандардн" + + "о време!Апија, летње време(Арабијско летње време3Аргентина, стандардно " + + "време)Аргентина, летње времеBЗападна Аргентина, стандардно време8Западн" + + "а Аргентина, летње време\x1dЈерменија време3Јерменија, стандардно време" + + ")Јерменија, летње време(Атлантско летње времеAАустралијско централно лет" + + "ње времеPАустралијско централно западно летње време=Аустралијско источн" + + "о летње време=Аустралијско западно летње време5Азербејџан, стандардно в" + + "реме+Азербејџан, летње време+Азори, стандардно време!Азори, летње време" + + "3Бангладеш, стандардно време)Бангладеш, летње време3Бразилија, стандардн" + + "о време)Бразилија, летње време.Зеленортска Острва времеDЗеленортска Ост" + + "рва, стандардно време:Зеленортска Острва, летње време+Чатам, стандардно" + + " време!Чатам, летње време)Чиле, стандардно време\x1fЧиле, летње време" + + "\x1fКина, летње време3Чојбалсан, стандардно време)Чојбалсан, летње време" + + "&Божићно острво време3Колумбија, стандардно време)Колумбија, летње време" + + ":Кукова острва, стандардно време9Кукова острва, полу-летње време\x08Куба" + + ")Куба, стандардно време\x1fКуба, летње време<Ускршња острва, стандардно " + + "време2Ускршња острва, летње време2Средњеевропско летње време4Источноевр" + + "опско летње време Даљи исток Европе4Западноевропско летње времеDФолклан" + + "дска Острва, стандардно време:Фолкландска Острва, летње време)Фиџи, ста" + + "ндардно време\x1fФиџи, летње време\x19Гамбије време/Грузија, стандардно" + + " време%Грузија, летње време+Средње време по Гриничу\x1fИсточни Гренланд@" + + "Источни Гренланд, стандардно време6Источни Гренланд, летње време\x1fЗап" + + "адни Гренланд@Западни Гренланд, стандардно време6Западни Гренланд, летњ" + + "е време\x1bЗаливско време7Хавајско-алеутско летње време2Хонг Конг, стан" + + "дардно време(Хонг Конг, летње време)Ховд, стандардно време\x1fХовд, лет" + + "ње време)Иран, стандардно време\x1fИран, летње време-Иркуцк, стандардно" + + " време#Иркуцк, летње време(Израелско летње време&Јапанско летње времеZПе" + + "тропавловско-камчатско летње рачунање времена\x1bКорејско време&Корејск" + + "о летње време7Краснојарск, стандардно време-Краснојарск, летње време" + + "\x1dКиргистан време Острва Лајн време0Лорд Хов, стандардно време&Лорд Хо" + + "в, летње време5Макао летње рачунање времена&Острво Маквери време/Магада" + + "н, стандардно време%Магадан, летње време5Маурицијус, стандардно време+М" + + "аурицијус, летње време)Северозападни МексикоJСеверозападни Мексико, ста" + + "ндардно време@Северозападни Мексико, летње време\x1fМексички Пацифик@Ме" + + "ксички Пацифик, стандардно време6Мексички Пацифик, летње време4Улан Бат" + + "ор, стандардно време*Улан Батор, летње време-Москва, стандардно време#М" + + "осква, летње време>Нова Каледонија, стандардно време4Нова Каледонија, л" + + "етње време6Нови Зеланд, стандардно време,Нови Зеланд, летње време\x16Њу" + + "фаундленд7Њуфаундленд, стандардно време-Њуфаундленд, летње времеCФернан" + + "до де Нороња, стандардно време9Фернандо де Нороња, летње време7Новосиби" + + "рск, стандардно време-Новосибирск, летње време)Омск, стандардно време" + + "\x1fОмск, летње време1Пакистан, стандардно време'Пакистан, летње време1П" + + "арагвај, стандардно време'Парагвај, летње време)Перу, стандардно време" + + "\x1fПеру, летње време1Филипини, стандардно време'Филипини, летње време!С" + + "ен Пјер и МикелонBСен Пјер и Микелон, стандардно време8Сен Пјер и Микел" + + "он, летње време\x17Понпеј време!Пјонгјаншко време/Сахалин, стандардно в" + + "реме%Сахалин, летње време+Самоа, стандардно време!Самоа, летње време1Си" + + "нгапур, стандардно време\x17Тајпеј време-Тајпеј, стандардно време#Тајпе" + + "ј, летње време+Тонга, стандардно време!Тонга, летње време\x13Чуук време" + + "9Туркменистан, стандардно време/Туркменистан, летње време/Уругвај, станд" + + "ардно време%Уругвај, летње време5Узбекистан, стандардно време+Узбекиста" + + "н, летње време/Вануату, стандардно време%Вануату, летње време7Владивост" + + "ок, стандардно време-Владивосток, летње време3Волгоград, стандардно вре" + + "ме)Волгоград, летње време/Јакутск, стандардно време%Јакутск, летње врем" + + "е;Јекатеринбург, стандардно време1Јекатеринбург, летње време" + +var bucket16 string = "" + // Size: 11683 bytes + "\x02eB\x11EEEE, dd MMMM y G\x10EEEE, dd MMMM UU\x08d MMMM U\x07d MMM U" + + "\x14EEEE d MMMM 'de' y G\x07d/M/y G\x07de gen.\x08de febr.\x08de març" + + "\x08d’abr.\x07de maig\x07de juny\x07de jul.\x07d’ag.\x07de set.\x08d’oct" + + ".\x07de nov.\x07de des.\x02GN\x02FB\x03MÇ\x02AB\x02MG\x02JN\x02JL\x02AG" + + "\x02ST\x02OC\x02NV\x02DS\x08de gener\x09de febrer\x09d’abril\x09de julio" + + "l\x09d’agost\x0bde setembre\x0bd’octubre\x0bde novembre\x0bde desembre" + + "\x04gen.\x05febr.\x05març\x04abr.\x04maig\x04juny\x04jul.\x03ag.\x04set." + + "\x04oct.\x04nov.\x04des.\x05gener\x06febrer\x05abril\x06juliol\x05agost" + + "\x08setembre\x07octubre\x08novembre\x08desembre\x03dg.\x03dl.\x03dt.\x03" + + "dc.\x03dj.\x03dv.\x03ds.\x02dg\x02dl\x02dt\x02dc\x02dj\x02dv\x02ds\x08di" + + "umenge\x07dilluns\x07dimarts\x08dimecres\x06dijous\x09divendres\x08dissa" + + "bte\x0c1r trimestre\x0c2n trimestre\x0c3r trimestre\x0c4t trimestre\x08m" + + "itjanit\x05a. m.\x05p. m.\x08matinada\x05matí\x06migdia\x05tarda\x06vesp" + + "re\x03nit\x04mat.\x02md\x0eabans de Crist\x17abans de l’Era Comuna\x11de" + + "sprés de Crist\x0aEra Comuna\x02aC\x03AEC\x02dC\x02EC\x0cAbans de ROC" + + "\x03ROC\x09dd/MM/y G\x03any\x0el’any passat\x07enguany\x0el’any que ve" + + "\x13d’aquí a {0} any\x14d’aquí a {0} anys\x0afa {0} any\x0bfa {0} anys" + + "\x13el trimestre passat\x10aquest trimestre\x13el trimestre que ve\x19d’" + + "aquí a {0} trimestre\x1ad’aquí a {0} trimestres\x10fa {0} trimestre\x11f" + + "a {0} trimestres\x0fel trim. passat\x0caquest trim.\x0fel trim. que ve" + + "\x15d’aquí a {0} trim.\x0cfa {0} trim.\x0ctrim. passat\x0ctrim. vinent" + + "\x0del mes passat\x0aaquest mes\x0del mes que ve\x13d’aquí a {0} mes\x15" + + "d’aquí a {0} mesos\x0afa {0} mes\x0cfa {0} mesos\x0ames passat\x0ames vi" + + "nent\x07setmana\x12la setmana passada\x0faquesta setmana\x11la setmana q" + + "ue ve\x17d’aquí a {0} setmana\x18d’aquí a {0} setmanes\x0efa {0} setmana" + + "\x0ffa {0} setmanes\x12la setmana del {0}\x05setm.\x10la setm. passada" + + "\x0daquesta setm.\x0fla setm. que ve\x15d’aquí a {0} setm.\x0cfa {0} set" + + "m.\x0dsetm. passada\x0csetm. vinent\x0fsetmana del mes\x0dsetm. del mes" + + "\x03dia\x0eabans-d’ahir\x04ahir\x04avui\x05demà\x0cdemà passat\x13d’aquí" + + " a {0} dia\x14d’aquí a {0} dies\x0afa {0} dia\x0bfa {0} dies\x0edia de l" + + "’any\x11dia de la setmana\x0fdia de la setm.\x19dia de la setmana del " + + "mes\x17dia de la setm. del mes\x0fdiumenge passat\x0faquest diumenge\x0f" + + "diumenge que ve\x18d’aquí a {0} diumenge\x19d’aquí a {0} diumenges\x0ffa" + + " {0} diumenge\x10fa {0} diumenges\x0adg. passat\x0aaquest dg.\x0adg. que" + + " ve\x13d’aquí a {0} dg.\x0afa {0} dg.\x0edilluns passat\x0eaquest dillun" + + "s\x0edilluns que ve\x17d’aquí a {0} dilluns\x0efa {0} dilluns\x0adl. pas" + + "sat\x0aaquest dl.\x0adl. que ve\x13d’aquí a {0} dl.\x0afa {0} dl.\x0edim" + + "arts passat\x0eaquest dimarts\x0edimarts que ve\x17d’aquí a {0} dimarts" + + "\x0efa {0} dimarts\x0adt. passat\x0aaquest dt.\x0adt. que ve\x13d’aquí a" + + " {0} dt.\x0afa {0} dt.\x0fdimecres passat\x0faquest dimecres\x0fdimecres" + + " que ve\x18d’aquí a {0} dimecres\x0ffa {0} dimecres\x0adc. passat\x0aaqu" + + "est dc.\x0adc. que ve\x13d’aquí a {0} dc.\x0afa {0} dc.\x0ddijous passat" + + "\x0daquest dijous\x0ddijous que ve\x16d’aquí a {0} dijous\x0dfa {0} dijo" + + "us\x0adj. passat\x0aaquest dj.\x0adj. que ve\x13d’aquí a {0} dj.\x0afa {" + + "0} dj.\x10divendres passat\x10aquest divendres\x10divendres que ve\x19d’" + + "aquí a {0} divendres\x10fa {0} divendres\x0adv. passat\x0aaquest dv.\x0a" + + "dv. que ve\x13d’aquí a {0} dv.\x0afa {0} dv.\x0fdissabte passat\x0faques" + + "t dissabte\x0fdissabte que ve\x18d’aquí a {0} dissabte\x19d’aquí a {0} d" + + "issabtes\x0ffa {0} dissabte\x10fa {0} dissabtes\x0ads. passat\x0aaquest " + + "ds.\x0ads. que ve\x13d’aquí a {0} ds.\x0afa {0} ds.\x0ba. m./p. m.\x0caq" + + "uesta hora\x14d’aquí a {0} hora\x15d’aquí a {0} hores\x0bfa {0} hora\x0c" + + "fa {0} hores\x11d’aquí a {0} h\x08fa {0} h\x11d‘aquí a {0} h\x05minut" + + "\x0caquest minut\x15d’aquí a {0} minut\x16d’aquí a {0} minuts\x0cfa {0} " + + "minut\x0dfa {0} minuts\x13d’aquí a {0} min\x0afa {0} min\x05segon\x15d’a" + + "quí a {0} segon\x16d’aquí a {0} segons\x0cfa {0} segon\x0dfa {0} segons" + + "\x11d’aquí a {0} s\x08fa {0} s\x0afus horari\x0cHora de: {0}\x15Horari d" + + "’estiu, {0}\x14Hora estàndard, {0}\x19Temps universal coordinat\x19Hor" + + "a d’estiu britànica\x1bHora estàndard d’Irlanda\x16Hora de l’Afganistan" + + "\x1bHora de l’Àfrica Central\x1cHora de l’Àfrica Oriental&Hora estàndard" + + " del sud de l’Àfrica\x1eHora de l’Àfrica Occidental)Hora estàndard de l’" + + "Àfrica Occidental(Hora d’estiu de l’Àfrica Occidental\x0fHora d’Alaska" + + "\x1aHora estàndard d’Alaska\x19Hora d’estiu d’Alaska\x14Hora de l’Amazon" + + "es\x1fHora estàndard de l’Amazones\x1eHora d’estiu de l’Amazones\"Hora c" + + "entral d’Amèrica del Nord-Hora estàndard central d’Amèrica del Nord,Hora" + + " d’estiu central d’Amèrica del Nord#Hora oriental d’Amèrica del Nord.Hor" + + "a estàndard oriental d’Amèrica del Nord-Hora d’estiu oriental d’Amèrica " + + "del Nord&Hora de muntanya d’Amèrica del Nord1Hora estàndard de muntanya " + + "d’Amèrica del Nord0Hora d’estiu de muntanya d’Amèrica del Nord\x11Hora d" + + "el Pacífic\x1cHora estàndard del Pacífic\x1bHora d’estiu del Pacífic\x0f" + + "Hora d’Anadyr\x1aHora estàndard d’Anadyr\x1bHorari d’estiu d’Anadyr\x0dH" + + "ora d’Apia\x18Hora estàndard d’Apia\x17Hora d’estiu d’Apia\x0aHora àrab" + + "\x15Hora estàndard àrab\x14Hora d’estiu àrab\x15Hora de l’Argentina Hora" + + " estàndard de l’Argentina\x1fHora d’estiu de l’Argentina!Hora de l’oest " + + "de l’Argentina,Hora estàndard de l’oest de l’Argentina+Hora d’estiu de l" + + "’oest de l’Argentina\x11Hora d’Armènia\x1cHora estàndard d’Armènia\x1b" + + "Hora d’estiu d’Armènia\x15Hora de l’Atlàntic Hora estàndard de l’Atlànti" + + "c\x1fHora d’estiu de l’Atlàntic\x1bHora d’Austràlia Central&Hora estànda" + + "rd d’Austràlia Central%Hora d’estiu d’Austràlia Central%Hora d’Austràlia" + + " centre-occidental0Hora estàndard d’Austràlia centre-occidental/Hora d’e" + + "stiu d’Austràlia centre-occidental\x1cHora d’Austràlia Oriental'Hora est" + + "àndard d’Austràlia Oriental&Hora d’estiu d’Austràlia Oriental\x1eHora d" + + "’Austràlia Occidental)Hora estàndard d’Austràlia Occidental(Hora d’est" + + "iu d’Austràlia Occidental\x14Hora d’Azerbaidjan\x1fHora estàndard d’Azer" + + "baidjan\x1eHora d’estiu d’Azerbaidjan\x13Hora de les Açores\x1eHora està" + + "ndard de les Açores\x1dHora d’estiu de les Açores\x13Hora de Bangla Desh" + + "\x1eHora estàndard de Bangla Desh\x1dHora d’estiu de Bangla Desh\x0eHora" + + " de Bhutan\x10Hora de Bolívia\x11Hora de Brasília\x1cHora estàndard de B" + + "rasília\x1bHora d’estiu de Brasília\x19Hora de Brunei Darussalam\x10Hora" + + " de Cap Verd\x1bHora estàndard de Cap Verd\x1aHora d’estiu de Cap Verd" + + "\x10Hora de Chamorro\x0fHora de Chatham\x1aHora estàndard de Chatham\x19" + + "Hora d’estiu de Chatham\x0cHora de Xile\x17Hora estàndard de Xile\x16Hor" + + "a d’estiu de Xile\x0fHora de la Xina\x1aHora estàndard de la Xina\x19Hor" + + "a d’estiu de la Xina\x12Hora de Choibalsan\x1dHora estàndard de Choibals" + + "an\x1cHora d’estiu de Choibalsan\x12Hora de Kiritimati\x17Hora de les il" + + "les Cocos\x11Hora de Colòmbia\x1cHora estàndard de Colòmbia\x1bHora d’es" + + "tiu de Colòmbia\x16Hora de les illes Cook!Hora estàndard de les illes Co" + + "ok#Hora de mig estiu de les illes Cook\x0cHora de Cuba\x17Hora estàndard" + + " de Cuba\x16Hora d’estiu de Cuba\x0dHora de Davis\x1aHora de Dumont-d’Ur" + + "ville\x16Hora de Timor Oriental\x1aHora de l’illa de Pasqua%Hora estànda" + + "rd de l’illa de Pasqua$Hora d’estiu de l’illa de Pasqua\x13Hora de l’Equ" + + "ador\x1aHora del Centre d’Europa%Hora estàndard del Centre d’Europa$Hora" + + " d’estiu del Centre d’Europa\x1aHora de l’Est d’Europa%Hora estàndard de" + + " l’Est d’Europa$Hora d’estiu de l’Est d’Europa!Hora de l’Extrem Orient E" + + "uropeu\x1bHora de l’Oest d’Europa&Hora estàndard de l’Oest d’Europa%Hora" + + " d’estiu de l’Oest d’Europa\x1aHora de les illes Malvines%Hora estàndard" + + " de les illes Malvines$Hora d’estiu de les illes Malvines\x0cHora de Fij" + + "i\x17Hora estàndard de Fiji\x16Hora d’estiu de Fiji\x1bHora de la Guaian" + + "a Francesa%Hora d’Antàrtida i França del Sud\x12Hora de Galápagos\x0fHor" + + "a de Gambier\x10Hora de Geòrgia\x1bHora estàndard de Geòrgia\x1aHora d’e" + + "stiu de Geòrgia\x19Hora de les illes Gilbert\x1eHora del Meridià de Gree" + + "nwich\x1eHora de l’Est de Grenlàndia)Hora estàndard de l’Est de Grenlànd" + + "ia(Hora d’estiu de l’Est de Grenlàndia\x1fHora de l’Oest de Grenlàndia*H" + + "ora estàndard de l’Oest de Grenlàndia)Hora d’estiu de l’Oest de Grenlànd" + + "ia\x0dHora del Golf\x0eHora de Guyana\x19Hora de Hawaii-Aleutianes$Hora " + + "estàndard de Hawaii-Aleutianes#Hora d’estiu de Hawaii-Aleutianes\x11Hora" + + " de Hong Kong\x1cHora estàndard de Hong Kong\x1bHora d’estiu de Hong Kon" + + "g\x0cHora de Hovd\x17Hora estàndard de Hovd\x16Hora d’estiu de Hovd\x1dH" + + "ora estàndard de l’Índia\x18Hora de l’oceà Índic\x11Hora d’Indoxina\x1bH" + + "ora central d’Indonèsia\x1eHora de l’est d’Indonèsia\x1fHora de l’oest d" + + "’Indonèsia\x0dHora d’Iran\x18Hora estàndard d’Iran\x17Hora d’estiu d’I" + + "ran\x10Hora d’Irkutsk\x1bHora estàndard d’Irkutsk\x1aHora d’estiu d’Irku" + + "tsk\x0fHora d’Israel\x1aHora estàndard d’Israel\x19Hora d’estiu d’Israel" + + "\x0eHora del Japó\x19Hora estàndard del Japó\x18Hora d’estiu del Japó" + + "\x11Hora de Kamtxatka-Hora estàndard de Petropavlovsk de Kamtxatka.Horar" + + "i d’estiu de Petropavlovsk de Kamtxatka\x1eHora de l’est del Kazakhstan" + + "\x1fHora de l’oest del Kazakhstan\x0dHora de Corea\x18Hora estàndard de " + + "Corea\x17Hora d’estiu de Corea\x0eHora de Kosrae\x13Hora de Krasnoiarsk" + + "\x1eHora estàndard de Krasnoiarsk\x1dHora d’estiu de Krasnoiarsk\x15Hora" + + " del Kirguizistan\x14Hora de Line Islands\x11Hora de Lord Howe\x1cHora e" + + "stàndard de Lord Howe\x1dHorari d’estiu de Lord Howe\x0dHora de Macau" + + "\x18Hora estàndard de Macau\x17Hora d’estiu de Macau\x11Hora de Macquari" + + "e\x0fHora de Magadan\x1aHora estàndard de Magadan\x19Hora d’estiu de Mag" + + "adan\x11Hora de Malàisia\x14Hora de les Maldives\x15Hora de les Marquese" + + "s\x1aHora de les illes Marshall\x0fHora de Maurici\x1aHora estàndard de " + + "Maurici\x19Hora d’estiu de Maurici\x0eHora de Mawson\x1cHora del nord-oe" + + "st de Mèxic'Hora estàndard del nord-oest de Mèxic&Hora d’estiu del nord-" + + "oest de Mèxic\x1bHora del Pacífic de Mèxic&Hora estàndard del Pacífic de" + + " Mèxic%Hora d’estiu del Pacífic de Mèxic\x13Hora d’Ulan Bator\x1eHora es" + + "tàndard d’Ulan Bator\x1dHora d’estiu d’Ulan Bator\x0eHora de Moscou\x19H" + + "ora estàndard de Moscou\x18Hora d’estiu de Moscou\x0fHora de Myanmar\x0d" + + "Hora de Nauru\x0eHora del Nepal\x17Hora de Nova Caledònia\"Hora estàndar" + + "d de Nova Caledònia!Hora d’estiu de Nova Caledònia\x14Hora de Nova Zelan" + + "da\x1fHora estàndard de Nova Zelanda\x1eHora d’estiu de Nova Zelanda\x11" + + "Hora de Terranova\x1cHora estàndard de Terranova\x1bHora d’estiu de Terr" + + "anova\x0cHora de Niue\x19Hora de les illes Norfolk\x1bHora de Fernando d" + + "e Noronha&Hora estàndard de Fernando de Noronha%Hora d’estiu de Fernando" + + " de Noronha\x13Hora de Novosibirsk\x1eHora estàndard de Novosibirsk\x1dH" + + "ora d’estiu de Novosibirsk\x0dHora d’Omsk\x18Hora estàndard d’Omsk\x17Ho" + + "ra d’estiu d’Omsk\x11Hora del Pakistan\x1cHora estàndard del Pakistan" + + "\x1bHora d’estiu del Pakistan\x0dHora de Palau\x19Hora de Papua Nova Gui" + + "nea\x11Hora del Paraguai\x1cHora estàndard del Paraguai\x1bHora d’estiu " + + "del Paraguai\x0eHora del Perú\x19Hora estàndard del Perú\x18Hora d’estiu" + + " del Perú\x11Hora de Filipines\x1cHora estàndard de Filipines\x1bHora d’" + + "estiu de Filipines\x19Hora de les illes Phoenix\x1fHora de Saint-Pierre " + + "i Miquelon*Hora estàndard de Saint-Pierre i Miquelon)Hora d’estiu de Sai" + + "nt-Pierre i Miquelon\x10Hora de Pitcairn\x0eHora de Ponape\x11Hora de Py" + + "ongyang\x0fHora de Reunió\x0fHora de Rothera\x10Hora de Sakhalin\x1bHora" + + " estàndard de Sakhalin\x1aHora d’estiu de Sakhalin\x0eHora de Samara\x19" + + "Hora estàndard de Samara\x18Hora d’estiu de Samara\x0dHora de Samoa\x18H" + + "ora estàndard de Samoa\x17Hora d’estiu de Samoa\x16Hora de les Seychelle" + + "s\x10Hora de Singapur\x0fHora de Salomó\x18Hora de Geòrgia del Sud\x0fHo" + + "ra de Surinam\x0dHora de Syowa\x0fHora de Tahití\x0eHora de Taipei\x19Ho" + + "ra estàndard de Taipei\x18Hora d’estiu de Taipei\x14Hora del Tadjikistan" + + "\x0fHora de Tokelau\x0dHora de Tonga\x18Hora estàndard de Tonga\x17Hora " + + "d’estiu de Tonga\x0dHora de Chuuk\x15Hora del Turkmenistan Hora estàndar" + + "d del Turkmenistan\x1fHora d’estiu del Turkmenistan\x0eHora de Tuvalu" + + "\x13Hora de l’Uruguai\x1eHora estàndard de l’Uruguai\x1dHora d’estiu de " + + "l’Uruguai\x16Hora de l’Uzbekistan!Hora estàndard de l’Uzbekistan Hora d’" + + "estiu de l’Uzbekistan\x0eHora de Vanatu\x19Hora estàndard de Vanatu\x18H" + + "ora d’estiu de Vanatu\x12Hora de Veneçuela\x13Hora de Vladivostok\x1eHor" + + "a estàndard de Vladivostok\x1dHora d’estiu de Vladivostok\x11Hora de Vol" + + "gograd\x1cHora estàndard de Volgograd\x1bHora d’estiu de Volgograd\x0eHo" + + "ra de Vostok\x0cHora de Wake\x17Hora de Wallis i Futuna\x0fHora de Iakut" + + "sk\x1aHora estàndard de Iakutsk\x19Hora d’estiu de Iakutsk\x15Hora d’Eka" + + "terinburg Hora estàndard d’Ekaterinburg\x1fHora d’estiu d’Ekaterinburg" + +var bucket17 string = "" + // Size: 36406 bytes + "\x0c𑄎𑄚𑄪\x10𑄜𑄬𑄛𑄴\x14𑄟𑄢𑄴𑄌𑄧 𑄃𑄬𑄛𑄳𑄢𑄨𑄣𑄴\x08𑄟𑄬\x10𑄎𑄪𑄚𑄴\x10𑄎𑄪𑄣𑄭\x1c𑄃𑄉𑄧𑄌𑄴𑄑𑄴0𑄥𑄬𑄛𑄴𑄑" + + "𑄬𑄟𑄴𑄝𑄧𑄢𑄴(𑄃𑄧𑄇𑄴𑄑𑄮𑄝𑄧𑄢𑄴(𑄚𑄧𑄞𑄬𑄟𑄴𑄝𑄧𑄢𑄴$𑄓𑄨𑄥𑄬𑄟𑄴𑄝𑄢𑄴\x04𑄎\x08𑄜𑄬\x04𑄟\x08𑄃𑄬\x08𑄎𑄪" + + "\x04𑄃\x08𑄥𑄬\x08𑄃𑄧\x08𑄚𑄧\x08𑄓𑄨\x18𑄎𑄚𑄪𑄠𑄢𑄨,𑄜𑄬𑄛𑄴𑄝𑄳𑄢𑄪𑄠𑄢𑄨(𑄃𑄧𑄇𑄴𑄑𑄬𑄝𑄧𑄢𑄴(𑄓𑄨𑄥𑄬𑄟𑄴𑄝𑄧𑄢" + + "𑄴\x10𑄢𑄧𑄝𑄨\x10𑄥𑄧𑄟𑄴\x1c𑄟𑄧𑄁𑄉𑄧𑄣𑄴\x10𑄝𑄪𑄖𑄴 𑄝𑄳𑄢𑄨𑄥𑄪𑄛𑄴 𑄥𑄪𑄇𑄴𑄇𑄮𑄢𑄴\x10𑄥𑄧𑄚𑄨\x08𑄢𑄧" + + "\x08𑄥𑄧\x08𑄟𑄧\x08𑄝𑄪\x10𑄝𑄳𑄢𑄨\x08𑄥𑄪\x1c𑄢𑄧𑄝𑄨𑄝𑄢𑄴\x1c𑄥𑄧𑄟𑄴𑄝𑄢𑄴(𑄟𑄧𑄁𑄉𑄧𑄣𑄴𑄝𑄢𑄴\x1c𑄝𑄪𑄖" + + "𑄴𑄝𑄢𑄴,𑄝𑄳𑄢𑄨𑄥𑄪𑄛𑄴𑄝𑄢𑄴,𑄥𑄪𑄇𑄴𑄇𑄮𑄢𑄴𑄝𑄢𑄴\x1c𑄥𑄧𑄚𑄨𑄝𑄢𑄴\x04𑄷\x04𑄸\x04𑄹\x04𑄺$𑄖𑄨𑄚𑄴𑄟𑄎𑄧𑄢𑄴" + + "J𑄘𑄨 𑄛𑄳𑄆𑄘𑄳𑄠𑄬 𑄖𑄨𑄚𑄴𑄟𑄎𑄧𑄢𑄴R𑄖𑄨𑄚𑄴 𑄛𑄳𑄆𑄘𑄳𑄠𑄬 𑄖𑄨𑄚𑄴𑄟𑄎𑄧𑄢𑄴Z𑄌𑄳𑄆𑄬𑄢𑄴 𑄛𑄳𑄆𑄘𑄳𑄠𑄬 𑄖𑄨𑄚𑄴𑄟𑄎𑄧𑄢𑄴0𑄛𑄧" + + "𑄖𑄳𑄠𑄃𑄟𑄧𑄣𑄳𑄠𑄬\x18𑄝𑄬𑄚𑄳𑄠𑄬\x1c𑄘𑄨𑄝𑄪𑄎𑄳𑄠\x18𑄝𑄬𑄣𑄳𑄠𑄬\x18𑄥𑄎𑄧𑄚𑄳𑄠\x10𑄢𑄬𑄖𑄴8𑄈𑄳𑄢𑄨𑄌𑄴𑄑𑄴𑄛" + + "𑄫𑄢𑄴𑄝𑄧D𑄈𑄳𑄢𑄨𑄌𑄴𑄑𑄴𑄛𑄫𑄢𑄴𑄝𑄛𑄴𑄘𑄧,𑄈𑄳𑄢𑄨𑄌𑄴𑄑𑄛𑄴𑄘𑄧D𑄈𑄳𑄢𑄨𑄌𑄴𑄑𑄧𑄛𑄫𑄢𑄴𑄝𑄛𑄴𑄘𑄧\x10𑄌𑄮𑄖𑄴\x18𑄝𑄮𑄎𑄬" + + "𑄇𑄴\x18𑄎𑄳𑄠𑄬𑄖𑄴\x10𑄃𑄏𑄢𑄴\x14𑄥𑄉𑄮𑄚𑄴\x0c𑄞𑄘𑄧\x14𑄃𑄏𑄨𑄚𑄴\x0c𑄇𑄘𑄨\x14𑄃𑄊𑄮𑄚𑄴\x10𑄛𑄪𑄌𑄴" + + "\x0c𑄟𑄇𑄴\x14𑄜𑄉𑄪𑄚𑄴\x04𑄻\x04𑄼\x04𑄽\x04𑄾\x04𑄿\x08𑄷𑄶\x08𑄷𑄷\x08𑄷𑄸\x0c𑄥𑄣𑄴 𑄟𑄧𑄦𑄧𑄢" + + "𑄧𑄟𑄴\x14𑄥𑄧𑄜𑄢𑄴5𑄢𑄧𑄝𑄨𑄅𑄣𑄴 𑄃𑄃𑄪𑄠𑄣𑄴)𑄢𑄧𑄝𑄨𑄅𑄥𑄴 𑄥𑄚𑄨9𑄎𑄧𑄟𑄘𑄨𑄅𑄣𑄴 𑄃𑄃𑄪𑄠𑄣𑄴-𑄎𑄧𑄟𑄘𑄨𑄅𑄌𑄴 𑄥𑄚𑄨" + + "\x18𑄢𑄧𑄎𑄧𑄝𑄴\x1c𑄥𑄳𑄃𑄝𑄧𑄚𑄴\x1c𑄢𑄧𑄟𑄴𑄎𑄚𑄴\x10𑄥𑄤𑄣𑄴 𑄎𑄨𑄣𑄴𑄇𑄧𑄘𑄴(𑄎𑄨𑄣𑄴𑄦𑄧𑄎𑄴𑄎𑄧\x10𑄡𑄪𑄇𑄴\x18" + + "𑄝𑄧𑄏𑄧𑄢𑄴1𑄉𑄬𑄣𑄳𑄠𑄬 𑄝𑄧𑄏𑄧𑄢𑄴!𑄃𑄬 𑄝𑄧𑄏𑄧𑄢𑄴)𑄎𑄬𑄢𑄧 𑄝𑄧𑄏𑄧𑄢𑄴\x1c{0} 𑄝𑄧𑄏𑄧𑄢𑄬){0} 𑄝𑄧𑄏𑄧𑄢𑄴 𑄃" + + "𑄉𑄬)𑄃𑄳𑄆𑄬 𑄝𑄧𑄏𑄧𑄢𑄴)𑄛𑄧𑄢𑄬 𑄝𑄧𑄏𑄧𑄢𑄴$𑄖𑄨𑄚𑄴𑄟𑄏𑄧𑄢𑄴=𑄉𑄬𑄣𑄳𑄠𑄬 𑄖𑄨𑄚𑄴𑄟𑄏𑄧𑄢𑄴5𑄃𑄳𑄆𑄬 𑄖𑄨𑄚𑄴𑄟𑄏𑄧𑄢𑄴5" + + "𑄛𑄧𑄢𑄬 𑄖𑄨𑄚𑄴𑄟𑄏𑄧𑄢𑄴 {0} 𑄖𑄨𑄚𑄴𑄟𑄏𑄬\x1c{0} 𑄖𑄨𑄚𑄟𑄏𑄬5{0} 𑄖𑄨𑄚𑄴𑄟𑄏𑄧𑄢𑄴 𑄃𑄉𑄬4{0}𑄖𑄨𑄚𑄴𑄟𑄏𑄧" + + "𑄢𑄴 𑄃𑄉𑄬5{0} 𑄖𑄨𑄚𑄴𑄟𑄏𑄧𑄢𑄴 𑄃𑄬𑄉\x0c𑄟𑄏𑄴%𑄉𑄬𑄣𑄧𑄘𑄬 𑄟𑄏𑄴\x1d𑄃𑄳𑄆𑄬 𑄟𑄏𑄴\x1d𑄛𑄧𑄢𑄬 𑄟𑄏𑄴" + + "\x10{0} 𑄟𑄏𑄬\x1d{0} 𑄟𑄏𑄧 𑄃𑄉𑄬%𑄉𑄬𑄣𑄧𑄉𑄬 𑄟𑄏𑄴\x1d{0} 𑄇𑄏𑄧 𑄃𑄉𑄬\x10𑄥𑄛𑄴𑄖)𑄉𑄬𑄣𑄧𑄘𑄬 𑄥𑄛𑄴𑄖" + + "!𑄃𑄳𑄆𑄬 𑄥𑄛𑄴𑄖!𑄛𑄧𑄢𑄬 𑄥𑄛𑄴𑄖\x1c{0} 𑄥𑄛𑄴𑄖𑄠𑄴!{0} 𑄥𑄛𑄴𑄖 𑄃𑄉𑄬\x14{0} 𑄥𑄛𑄴𑄖-{0} 𑄃𑄳𑄆𑄬 𑄥𑄛𑄴" + + "𑄖𑄠𑄴){0} 𑄥𑄛𑄴𑄖𑄢𑄴 𑄃𑄉𑄬\x10𑄘𑄨𑄚𑄴1𑄉𑄬𑄣𑄧𑄘𑄬 𑄛𑄧𑄢𑄴𑄥𑄪4𑄉𑄬𑄣𑄴𑄣𑄳𑄠𑄇𑄬𑄣𑄳𑄠𑄬\x1c𑄃𑄬𑄌𑄴𑄥𑄳𑄠<𑄃𑄬𑄎" + + "𑄬𑄖𑄴𑄖𑄳𑄠𑄇𑄬𑄣𑄳𑄠𑄬A𑄃𑄬𑄎𑄬𑄖𑄴𑄖𑄳𑄠𑄬 𑄛𑄧𑄢𑄴𑄥𑄪1{0} 𑄘𑄨𑄚𑄮 𑄟𑄧𑄖𑄴𑄙𑄳𑄠!{0} 𑄘𑄨𑄚𑄴 𑄃𑄉𑄬<𑄉𑄬𑄣𑄴𑄣𑄳𑄠𑄇" + + "𑄬𑄣𑄴𑄣𑄳𑄠𑄬 𑄃𑄬𑄌𑄴𑄥𑄳𑄠𑄬D𑄃𑄬𑄎𑄬𑄖𑄴𑄖𑄳𑄠𑄇𑄬𑄣𑄴𑄣𑄳𑄠𑄬]𑄃𑄬𑄎𑄬𑄖𑄴𑄖𑄳𑄠𑄇𑄬𑄣𑄴𑄣𑄳𑄠𑄬 𑄛𑄧𑄢𑄴𑄥𑄪)𑄥𑄛𑄴𑄖𑄢𑄴 𑄘𑄨" + + "𑄚𑄴5𑄉𑄬𑄣𑄧𑄘𑄬 𑄢𑄧𑄝𑄨𑄝𑄢𑄴-𑄃𑄳𑄆𑄬 𑄢𑄧𑄝𑄨𑄝𑄢𑄴-𑄛𑄧𑄢𑄬 𑄢𑄧𑄝𑄨𑄝𑄢𑄴({0} 𑄢𑄧𑄝𑄨𑄝𑄢𑄧𑄖𑄴-{0} 𑄢𑄧𑄝𑄨𑄝𑄢𑄴" + + " 𑄃𑄉𑄬5𑄉𑄬𑄣𑄧𑄘𑄬 𑄥𑄧𑄟𑄴𑄝𑄢𑄴-𑄃𑄳𑄆𑄬 𑄥𑄧𑄟𑄴𑄝𑄢𑄴-𑄛𑄧𑄢𑄬 𑄥𑄧𑄟𑄴𑄝𑄢𑄴({0} 𑄥𑄧𑄟𑄴𑄝𑄢𑄧𑄖𑄴-{0} 𑄥𑄧𑄟𑄴𑄝𑄢𑄴 " + + "𑄃𑄉𑄬A𑄉𑄬𑄣𑄧𑄘𑄬 𑄟𑄧𑄁𑄉𑄧𑄣𑄴𑄝𑄢𑄴9𑄃𑄳𑄆𑄬 𑄟𑄧𑄁𑄉𑄧𑄣𑄴𑄝𑄢𑄴9𑄛𑄧𑄢𑄬 𑄟𑄧𑄁𑄉𑄧𑄣𑄴𑄝𑄢𑄴4{0} 𑄟𑄧𑄁𑄉𑄧𑄣𑄴𑄝𑄢𑄧𑄖" + + "𑄴9{0} 𑄟𑄧𑄁𑄉𑄧𑄣𑄴𑄝𑄢𑄴 𑄃𑄉𑄬5𑄉𑄬𑄣𑄧𑄘𑄬 𑄝𑄪𑄖𑄴𑄝𑄢𑄴-𑄃𑄳𑄆𑄬 𑄝𑄪𑄖𑄴𑄝𑄢𑄴-𑄛𑄧𑄢𑄬 𑄝𑄪𑄖𑄴𑄝𑄢𑄴({0} 𑄝𑄪𑄖" + + "𑄴𑄝𑄢𑄧𑄖𑄴-{0} 𑄝𑄪𑄖𑄴𑄝𑄢𑄴 𑄃𑄉𑄬=𑄉𑄬𑄣𑄧𑄘𑄬 𑄝𑄨𑄥𑄪𑄖𑄴𑄝𑄢𑄴5𑄃𑄳𑄆𑄬 𑄝𑄨𑄥𑄪𑄖𑄴𑄝𑄢𑄴5𑄛𑄧𑄢𑄬 𑄝𑄨𑄥𑄪𑄖𑄴𑄝𑄢𑄴" + + "({0} 𑄝𑄨𑄥𑄪𑄖𑄴𑄝𑄢𑄬5{0} 𑄝𑄨𑄥𑄪𑄖𑄴𑄝𑄢𑄴 𑄃𑄉𑄬9{0} 𑄝𑄨𑄥𑄪𑄖𑄴𑄝𑄧𑄢𑄴 𑄃𑄉𑄬E𑄉𑄬𑄣𑄧𑄘𑄬 𑄥𑄪𑄇𑄴𑄇𑄮𑄢𑄴𑄝𑄢𑄴=𑄃" + + "𑄳𑄆𑄬 𑄥𑄪𑄇𑄴𑄇𑄮𑄢𑄴𑄝𑄢𑄴=𑄛𑄧𑄢𑄬 𑄥𑄪𑄇𑄴𑄇𑄮𑄢𑄴𑄝𑄢𑄴0{0} 𑄥𑄪𑄇𑄴𑄇𑄮𑄢𑄴𑄝𑄢𑄬={0} 𑄥𑄪𑄇𑄴𑄇𑄮𑄢𑄴𑄝𑄢𑄴 𑄃𑄉𑄬8" + + "{0} 𑄥𑄪𑄇𑄴𑄇𑄮𑄢𑄴𑄝𑄢𑄧𑄖𑄴5𑄉𑄬𑄣𑄧𑄘𑄬 𑄥𑄮𑄚𑄨𑄝𑄢𑄴-𑄃𑄳𑄆𑄬 𑄥𑄮𑄚𑄨𑄝𑄢𑄴-𑄛𑄧𑄢𑄬 𑄥𑄮𑄚𑄨𑄝𑄢𑄴 {0} 𑄥𑄮𑄚𑄨𑄝𑄢𑄬-{" + + "0} 𑄥𑄮𑄚𑄨𑄝𑄢𑄴 𑄃𑄉𑄬({0} 𑄥𑄮𑄚𑄨𑄝𑄢𑄧𑄖𑄴\x14𑄊𑄮𑄚𑄴𑄓-𑄃𑄳𑄆𑄬 𑄊𑄮𑄚𑄴𑄓𑄠𑄴 {0} 𑄊𑄮𑄚𑄴𑄓𑄠𑄴%{0} 𑄊𑄮𑄚𑄴𑄓" + + " 𑄃𑄉𑄬\x18𑄟𑄨𑄚𑄨𑄖𑄴)𑄃𑄳𑄆𑄬 𑄟𑄨𑄚𑄨𑄖𑄴\x1c{0} 𑄟𑄨𑄚𑄨𑄘𑄬){0} 𑄟𑄨𑄚𑄨𑄖𑄴 𑄃𑄉𑄬\x18𑄥𑄬𑄉𑄬𑄚𑄴\x1c𑄃𑄨𑄇" + + "𑄴𑄅𑄚𑄪${0} 𑄥𑄬𑄉𑄬𑄚𑄴𑄘𑄬){0} 𑄥𑄬𑄉𑄬𑄚𑄴 𑄃𑄉𑄬\x1c{0} 𑄥𑄬𑄉𑄬𑄚𑄴)𑄃𑄧𑄇𑄴𑄖𑄧𑄢𑄴 𑄎𑄉\x1c{0} 𑄃𑄧𑄇" + + "𑄴𑄖𑄧I{0} 𑄘𑄨𑄝𑄪𑄌𑄴𑄎𑄳𑄠 𑄃𑄧𑄇𑄴𑄖𑄧𑄖𑄴9{0} 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧𑄖𑄴Z𑄘𑄇𑄴𑄘𑄨𑄠 𑄛𑄨𑄖𑄴𑄗𑄨𑄟𑄨𑄢𑄴 𑄃𑄧𑄇𑄴𑄖" + + "𑄧R𑄝𑄳𑄢𑄨𑄑𑄨𑄌𑄴 𑄉𑄧𑄢𑄧𑄟𑄧 𑄃𑄧𑄇𑄴𑄖𑄧F𑄃𑄭𑄢𑄨𑄌𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧1𑄃𑄬𑄉𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧F𑄃𑄬𑄉𑄧𑄢𑄴 𑄟𑄚𑄧" + + "𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧^𑄃𑄬𑄉𑄧𑄢𑄴 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧E𑄃𑄛𑄴𑄉𑄚𑄨𑄌𑄴𑄖𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧N𑄟𑄧𑄖𑄴𑄙𑄳𑄠 𑄃𑄜𑄳𑄢𑄨𑄇" + + " 𑄃𑄧𑄇𑄴𑄖𑄧J𑄛𑄪𑄉𑄬𑄘𑄨 𑄃𑄜𑄳𑄢𑄨𑄇 𑄃𑄧𑄇𑄴𑄖𑄧_𑄘𑄧𑄉𑄨𑄚𑄴 𑄃𑄜𑄳𑄢𑄨𑄇 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧R𑄛𑄧𑄏𑄨𑄟𑄬𑄘𑄨 𑄃𑄜𑄳𑄢𑄨𑄇 " + + "𑄃𑄧𑄇𑄴𑄖𑄧g𑄛𑄧𑄏𑄨𑄟𑄬𑄘𑄨 𑄃𑄜𑄳𑄢𑄨𑄇 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧\x7f𑄛𑄧𑄏𑄨𑄟𑄬𑄘𑄨 𑄃𑄜𑄳𑄢𑄨𑄇 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧" + + "𑄇𑄴𑄖𑄧-𑄃𑄣𑄌𑄴𑄇 𑄃𑄧𑄇𑄴𑄖𑄧B𑄃𑄣𑄌𑄴𑄇 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧J𑄃𑄣𑄌𑄴𑄇 𑄘𑄨𑄚𑄮𑄃𑄣𑄮 𑄃𑄧𑄇𑄴𑄖𑄧1𑄃𑄣𑄴𑄟𑄑𑄨 𑄃𑄧𑄇𑄴" + + "𑄖𑄧F𑄃𑄣𑄴𑄟𑄑𑄨 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧V𑄃𑄣𑄴𑄟𑄑𑄨 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧 𑄃𑄧𑄇𑄴𑄖𑄧9𑄃𑄳𑄠𑄟𑄎𑄧𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧N𑄃𑄳𑄠𑄟𑄎𑄧" + + "𑄚𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧^𑄃𑄳𑄠𑄟𑄎𑄧𑄚𑄴 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧 𑄃𑄧𑄇𑄴𑄖𑄧>𑄃𑄏𑄧𑄣𑄴 𑄉𑄢𑄳𑄦 𑄃𑄧𑄇𑄴𑄖𑄧W𑄃𑄏𑄧𑄣𑄴 𑄉𑄧𑄢" + + "𑄳𑄦 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧_𑄃𑄏𑄧𑄣𑄴 𑄉𑄧𑄢𑄳𑄦 𑄘𑄨𑄚𑄮𑄃𑄣𑄮 𑄃𑄧𑄇𑄴𑄖𑄧B𑄛𑄪𑄉𑄮 𑄞𑄨𑄘𑄬𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧_𑄛𑄪𑄉𑄮 𑄞𑄨" + + "𑄘𑄬𑄢𑄴 𑄛𑄳𑄢𑄧𑄟𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧g𑄛𑄪𑄉𑄮 𑄞𑄨𑄘𑄬𑄢𑄴 𑄘𑄨𑄚𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧J𑄦𑄨𑄣𑄧𑄧𑄱 𑄞𑄨𑄘𑄬𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧" + + "g𑄦𑄨𑄣𑄧𑄧𑄱 𑄞𑄨𑄘𑄬𑄢𑄴 𑄛𑄳𑄢𑄧𑄟𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧c𑄦𑄨𑄣𑄧𑄧𑄱 𑄞𑄨𑄘𑄬𑄢𑄴 𑄘𑄨𑄚𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧\x7f𑄛𑄳𑄢𑄧𑄥𑄚𑄴𑄖𑄧 𑄟" + + "𑄧𑄦𑄥𑄉𑄧𑄢𑄧𑄢𑄴 𑄞𑄨𑄘𑄬𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧\x94𑄛𑄳𑄢𑄧𑄥𑄚𑄴𑄖𑄧 𑄟𑄧𑄦𑄥𑄉𑄧𑄢𑄧𑄢𑄴 𑄞𑄨𑄘𑄬𑄢𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧" + + "\x98𑄛𑄳𑄢𑄧𑄥𑄚𑄴𑄖𑄧 𑄟𑄧𑄦𑄥𑄉𑄧𑄢𑄧𑄢𑄴 𑄞𑄨𑄘𑄬𑄢𑄴 𑄘𑄨𑄚𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧9𑄃𑄧𑄚𑄴𑄘𑄠𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧N𑄃𑄧𑄚𑄴𑄘𑄠𑄢𑄴 𑄟" + + "𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧f𑄃𑄧𑄚𑄴𑄘𑄠𑄢𑄴 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧-𑄃𑄧𑄛𑄨𑄠 𑄃𑄧𑄇𑄴𑄖𑄧B𑄃𑄧𑄛𑄨𑄠 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴" + + "𑄖𑄧F𑄃𑄧𑄛𑄨𑄠 𑄘𑄨𑄚𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧1𑄃𑄇𑄴𑄑𑄃𑄮 𑄃𑄧𑄇𑄴𑄖𑄧F𑄃𑄇𑄴𑄑𑄃𑄮 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧^𑄃𑄇𑄴𑄑𑄃𑄮 𑄉𑄧𑄢𑄧𑄟" + + "𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧5𑄃𑄇𑄴𑄑𑄮𑄝𑄴 𑄃𑄧𑄇𑄴𑄖𑄧J𑄃𑄇𑄴𑄑𑄮𑄝𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧b𑄃𑄇𑄴𑄑𑄮𑄝𑄴 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴" + + " 𑄃𑄧𑄇𑄴𑄖𑄧-𑄃𑄢𑄧𑄝𑄨 𑄃𑄧𑄇𑄴𑄖𑄧B𑄃𑄢𑄧𑄝𑄨 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧R𑄃𑄢𑄧𑄝𑄨 𑄘𑄨𑄚𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧A𑄃𑄢𑄴𑄎𑄬𑄚𑄴𑄑𑄨" + + "𑄚 𑄃𑄧𑄇𑄴𑄖𑄧V𑄃𑄢𑄴𑄎𑄬𑄚𑄴𑄑𑄨𑄚 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧n𑄃𑄢𑄴𑄎𑄬𑄚𑄴𑄑𑄨𑄚 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧b𑄛𑄧𑄏𑄨𑄟𑄬" + + "𑄘𑄨 𑄃𑄢𑄴𑄎𑄬𑄚𑄴𑄑𑄨𑄚 𑄃𑄧𑄇𑄴𑄖𑄧\x7f𑄛𑄧𑄏𑄨𑄟𑄬𑄘𑄨 𑄃𑄢𑄴𑄎𑄬𑄚𑄴𑄑𑄨𑄚 𑄛𑄳𑄢𑄧𑄟𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧\x8f𑄛𑄧𑄏𑄨𑄟𑄬𑄘" + + "𑄨 𑄃𑄢𑄴𑄎𑄬𑄚𑄴𑄑𑄨𑄚 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧9𑄃𑄢𑄴𑄟𑄬𑄚𑄨𑄠 𑄃𑄧𑄇𑄴𑄖𑄧N𑄃𑄢𑄴𑄟𑄬𑄚𑄨𑄠 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧" + + "f𑄃𑄢𑄴𑄟𑄬𑄚𑄨𑄠 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧I𑄃𑄑𑄴𑄣𑄚𑄴𑄖𑄨𑄉𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧^𑄃𑄑𑄴𑄣𑄚𑄴𑄖𑄨𑄉𑄮𑄢𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴" + + "𑄖𑄧n𑄃𑄑𑄴𑄣𑄚𑄴𑄖𑄨𑄉𑄮𑄢𑄴 𑄘𑄨𑄚𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧{𑄃𑄏𑄧𑄣𑄴 𑄉𑄧𑄢𑄳𑄦𑄢𑄴 𑄃𑄧𑄌𑄴𑄑𑄳𑄢𑄬𑄣𑄨𑄠𑄧 𑄃𑄧𑄇𑄴𑄖𑄧" + + "\x90𑄃𑄧𑄌𑄴𑄑𑄳𑄢𑄬𑄣𑄨𑄠𑄧 𑄃𑄏𑄧𑄣𑄴 𑄉𑄧𑄢𑄳𑄦𑄢𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧\xa0𑄃𑄧𑄌𑄴𑄑𑄳𑄢𑄬𑄣𑄨𑄠𑄧 𑄃𑄏𑄧𑄣𑄴 𑄉𑄧𑄢𑄳𑄦𑄢" + + "𑄴 𑄘𑄨𑄚𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧\x9c𑄃𑄧𑄌𑄴𑄑𑄳𑄢𑄬𑄣𑄨𑄠𑄧 𑄃𑄏𑄧𑄣𑄴 𑄉𑄧𑄢𑄳𑄦𑄢𑄴 𑄛𑄧𑄏𑄨𑄟𑄬𑄘𑄨 𑄃𑄧𑄇𑄴𑄖𑄧\xb1𑄃" + + "𑄧𑄌𑄴𑄑𑄳𑄢𑄬𑄣𑄨𑄠𑄧 𑄃𑄏𑄧𑄣𑄴 𑄉𑄧𑄢𑄳𑄦𑄢𑄴 𑄛𑄧𑄏𑄨𑄟𑄬𑄘𑄨 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧\xc1𑄃𑄧𑄌𑄴𑄑𑄳𑄢𑄬𑄣𑄨𑄠𑄧 𑄃𑄏𑄧𑄣𑄴" + + " 𑄉𑄧𑄢𑄳𑄦𑄢𑄴 𑄛𑄧𑄏𑄨𑄟𑄬𑄘𑄨 𑄘𑄨𑄚𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧b𑄛𑄪𑄉𑄬𑄘𑄨 𑄃𑄧𑄌𑄴𑄑𑄳𑄢𑄬𑄣𑄨𑄠𑄧 𑄃𑄧𑄇𑄴𑄖𑄧w𑄃𑄧𑄌𑄴𑄑𑄳𑄢𑄬𑄣𑄨" + + "𑄠𑄧 𑄛𑄪𑄉𑄬𑄘𑄨 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧\x87𑄃𑄧𑄌𑄴𑄑𑄳𑄢𑄬𑄣𑄨𑄠𑄧 𑄛𑄪𑄉𑄬𑄘𑄨 𑄘𑄨𑄚𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧j𑄛𑄧𑄏𑄨𑄟𑄬" + + "𑄘𑄨 𑄃𑄧𑄌𑄴𑄑𑄳𑄢𑄬𑄣𑄨𑄠𑄧 𑄃𑄧𑄇𑄴𑄖𑄧\x7f𑄃𑄧𑄌𑄴𑄑𑄳𑄢𑄬𑄣𑄨𑄠𑄧 𑄛𑄧𑄏𑄨𑄟𑄬𑄘𑄨 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧\x8f𑄃𑄧𑄌𑄴𑄑" + + "𑄳𑄢𑄬𑄣𑄨𑄠𑄧 𑄛𑄧𑄏𑄨𑄟𑄬𑄘𑄨 𑄘𑄨𑄚𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧=𑄃𑄎𑄢𑄴𑄝𑄭𑄎𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧R𑄃𑄎𑄢𑄴𑄝𑄭𑄎𑄚𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧" + + "𑄇𑄴𑄖𑄧j𑄃𑄎𑄢𑄴𑄝𑄭𑄎𑄚𑄴 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧9𑄃𑄬𑄎𑄮𑄢𑄬𑄌𑄴 𑄃𑄧𑄇𑄴𑄖𑄧N𑄃𑄬𑄎𑄮𑄢𑄬𑄌𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴" + + "𑄖𑄧f𑄃𑄬𑄎𑄮𑄢𑄬𑄌𑄴 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧5𑄝𑄁𑄣𑄘𑄬𑄌𑄴 𑄃𑄧𑄇𑄴𑄖𑄧J𑄝𑄁𑄣𑄘𑄬𑄌𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧b𑄝𑄁" + + "𑄣𑄘𑄬𑄌𑄴 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧-𑄞𑄪𑄑𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧5𑄝𑄮𑄣𑄨𑄞𑄨𑄠 𑄃𑄧𑄇𑄴𑄖𑄧9𑄝𑄳𑄢𑄥𑄨𑄣𑄨𑄠 𑄃𑄧𑄇𑄴𑄖𑄧N" + + "𑄝𑄳𑄢𑄥𑄨𑄣𑄨𑄠 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧f𑄝𑄳𑄢𑄥𑄨𑄣𑄨𑄠 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧Z𑄝𑄳𑄢𑄪𑄚𑄬𑄭 𑄘𑄢𑄪𑄌𑄴𑄥𑄣𑄟𑄴 𑄃" + + "𑄧𑄇𑄴𑄖𑄧>𑄇𑄬𑄛𑄴 𑄞𑄢𑄴𑄘𑄴 𑄃𑄧𑄇𑄴𑄖𑄧S𑄇𑄬𑄛𑄴 𑄞𑄢𑄴𑄘𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧k𑄇𑄬𑄛𑄴 𑄞𑄢𑄴𑄘𑄴 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢" + + "𑄴 𑄃𑄧𑄇𑄴𑄖𑄧B𑄌𑄟𑄬𑄢𑄮 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧1𑄌𑄳𑄠𑄗𑄟𑄴 𑄃𑄧𑄇𑄴𑄖𑄧F𑄌𑄳𑄠𑄗𑄟𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧V𑄌𑄳𑄠𑄗𑄟𑄴 " + + "𑄘𑄨𑄚𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧)𑄌𑄨𑄣𑄨 𑄃𑄧𑄇𑄴𑄖𑄧>𑄌𑄨𑄣𑄨 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧V𑄌𑄨𑄣𑄨 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖" + + "𑄧)𑄌𑄨𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧>𑄌𑄨𑄚𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧N𑄌𑄨𑄚𑄴 𑄘𑄨𑄚𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧E𑄌𑄧𑄠𑄴𑄝𑄣𑄴𑄥𑄧𑄚𑄴 𑄃𑄧𑄇" + + "𑄴𑄖𑄧Z𑄌𑄧𑄠𑄴𑄝𑄣𑄴𑄥𑄧𑄚𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧r𑄌𑄧𑄠𑄴𑄝𑄣𑄴𑄥𑄧𑄚𑄴 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧`𑄇𑄳𑄢𑄨𑄌𑄴𑄟𑄥𑄴" + + " 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄬 𑄃𑄧𑄇𑄴𑄖𑄧l𑄇𑄮𑄇𑄮𑄌𑄴 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄬𑄉𑄪𑄚𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧=𑄇𑄧𑄣𑄧𑄟𑄴𑄝𑄨𑄠 𑄃𑄧𑄇𑄴𑄖𑄧R𑄇𑄧𑄣𑄧𑄟" + + "𑄴𑄝𑄨𑄠 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧j𑄇𑄧𑄣𑄧𑄟𑄴𑄝𑄨𑄠 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧d𑄇𑄪𑄇𑄴 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄬𑄉𑄪𑄚𑄮𑄢𑄴 " + + "𑄃𑄧𑄇𑄴𑄖𑄧y𑄇𑄪𑄇𑄴 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄬𑄉𑄪𑄚𑄮𑄢𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧\xb2𑄇𑄪𑄇𑄴 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄬𑄉𑄪𑄚𑄮𑄢𑄴 𑄃𑄧" + + "𑄖𑄴𑄙𑄬𑄇𑄴 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧5𑄇𑄨𑄃𑄪𑄝𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧B𑄇𑄨𑄃𑄪𑄝 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧R𑄇𑄨𑄃𑄪𑄝 𑄘𑄨𑄚" + + "𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧1𑄓𑄬𑄞𑄨𑄥𑄴 𑄃𑄧𑄇𑄴𑄖𑄧k𑄓𑄪𑄟𑄧𑄚𑄴𑄑𑄴-𑄘𑄳𑄠𑄧 𑄅𑄪𑄢𑄴𑄞𑄨𑄣𑄬 𑄃𑄧𑄇𑄴𑄖𑄧J𑄛𑄪𑄉𑄬𑄘𑄨 𑄑𑄨𑄟𑄪" + + "𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧X𑄃𑄨𑄥𑄴𑄑𑄢𑄴 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄬 𑄃𑄧𑄇𑄴𑄖𑄧m𑄃𑄨𑄥𑄴𑄑𑄢𑄴 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄬 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧" + + "\x85𑄃𑄨𑄥𑄴𑄑𑄢𑄴 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄬 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧A𑄃𑄨𑄇𑄪𑄠𑄬𑄓𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧^𑄟𑄧𑄖𑄴𑄙𑄳𑄠 𑄃𑄨𑄃𑄪" + + "𑄢𑄮𑄝𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧s𑄟𑄧𑄖𑄴𑄙𑄳𑄠 𑄃𑄨𑄃𑄪𑄢𑄮𑄝𑄮𑄢𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧\x8b𑄟𑄧𑄖𑄴𑄙𑄳𑄠 𑄃𑄨𑄃𑄪𑄢𑄮𑄝𑄮𑄢𑄴 𑄉" + + "𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧Z𑄛𑄪𑄉𑄬𑄘𑄨 𑄃𑄨𑄃𑄪𑄢𑄮𑄝𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧o𑄛𑄪𑄉𑄬𑄘𑄨 𑄃𑄨𑄃𑄪𑄢𑄮𑄝𑄮𑄢𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧" + + "𑄇𑄴𑄖𑄧\x87𑄛𑄪𑄉𑄬𑄘𑄨 𑄃𑄨𑄃𑄪𑄢𑄮𑄝𑄮𑄢𑄴 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧\x8b𑄃𑄬𑄇𑄴𑄉𑄮𑄙𑄳𑄆𑄬𑄣𑄴 𑄛𑄪𑄉𑄬𑄘𑄨 𑄃" + + "𑄨𑄃𑄪𑄢𑄮𑄝𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧^𑄛𑄧𑄏𑄨𑄟𑄬𑄘𑄨 𑄃𑄨𑄃𑄪𑄢𑄮𑄝𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧w𑄛𑄧𑄏𑄨𑄟𑄬𑄘𑄨 𑄃𑄨𑄃𑄪𑄢𑄮𑄝𑄮𑄢𑄴 𑄟𑄚𑄧𑄇𑄴 " + + "𑄃𑄧𑄇𑄴𑄖𑄧\x8f𑄛𑄧𑄏𑄬𑄟𑄬𑄘𑄨 𑄃𑄨𑄃𑄪𑄢𑄮𑄝𑄮𑄢𑄴 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧\x80𑄜𑄧𑄇𑄴𑄣𑄳𑄠𑄚𑄴𑄓𑄴 𑄉𑄭 𑄉𑄭" + + " 𑄞𑄨𑄘𑄬𑄉𑄪𑄚𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧\x95𑄜𑄧𑄇𑄴𑄣𑄳𑄠𑄚𑄴𑄓𑄴 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄬𑄉𑄪𑄚𑄮𑄢𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧\xad𑄜𑄧𑄇𑄴𑄣" + + "𑄳𑄠𑄚𑄴𑄓𑄴 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄬𑄉𑄪𑄚𑄮𑄢𑄴 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧)𑄜𑄨𑄎𑄨 𑄃𑄧𑄇𑄴𑄖𑄧>𑄜𑄨𑄎𑄨 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇" + + "𑄴𑄖𑄧V𑄜𑄨𑄎𑄨 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧:𑄜𑄧𑄢𑄥𑄨 𑄉𑄠𑄚 𑄃𑄧𑄇𑄴𑄖𑄧\x80𑄜𑄧𑄢𑄥𑄨 𑄘𑄧𑄉𑄨𑄚𑄴 𑄃𑄳𑄃 𑄃𑄚𑄴𑄑" + + "𑄢𑄴𑄇𑄧𑄑𑄨𑄇 𑄃𑄧𑄇𑄴𑄖𑄧5𑄉𑄣𑄛𑄉𑄮𑄌𑄴 𑄃𑄧𑄇𑄴𑄖𑄧A𑄉𑄳𑄠𑄟𑄴𑄝𑄨𑄠𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧5𑄎𑄧𑄢𑄴𑄎𑄨𑄠 𑄃𑄧𑄇𑄴𑄖𑄧J𑄎𑄧𑄢𑄴𑄎𑄨" + + "𑄠 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧b𑄎𑄧𑄢𑄴𑄎𑄨𑄠 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧h𑄉𑄨𑄣𑄴𑄝𑄢𑄴𑄑𑄴 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄬𑄢𑄴 𑄃𑄧𑄇𑄴" + + "𑄖𑄧B𑄉𑄳𑄢𑄨𑄚𑄨𑄌𑄴 𑄟𑄨𑄚𑄴 𑄑𑄬𑄟𑄴f𑄛𑄪𑄉𑄬𑄘𑄨 𑄉𑄳𑄢𑄨𑄚𑄴𑄣𑄳𑄠𑄚𑄴𑄓𑄴 𑄃𑄧𑄇𑄴𑄖𑄧{𑄛𑄪𑄉𑄬𑄘𑄨 𑄉𑄳𑄢𑄨𑄚𑄴𑄣𑄳𑄠𑄚𑄴𑄓" + + "𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧\x93𑄛𑄪𑄉𑄬𑄘𑄨 𑄉𑄳𑄢𑄨𑄚𑄴𑄣𑄳𑄠𑄚𑄴𑄓𑄴 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧n𑄛𑄨𑄏𑄬𑄟𑄴𑄘𑄨 𑄉𑄳" + + "𑄢𑄨𑄚𑄴𑄣𑄳𑄠𑄚𑄴𑄓𑄴 𑄃𑄧𑄇𑄴𑄖𑄧\x83𑄛𑄧𑄏𑄨𑄟𑄬𑄘𑄨 𑄉𑄳𑄢𑄨𑄚𑄴𑄣𑄳𑄠𑄚𑄴𑄓𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧\x9b𑄛𑄧𑄏𑄨𑄟𑄬𑄘𑄨" + + " 𑄉𑄳𑄢𑄨𑄚𑄴𑄣𑄳𑄠𑄚𑄴𑄓𑄴 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧:𑄉𑄪𑄠𑄟𑄴 𑄟𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧Z𑄃𑄪𑄛𑄧𑄥𑄉𑄧𑄢𑄨𑄠𑄧 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇" + + "𑄴𑄖𑄧)𑄉𑄪𑄠𑄚 𑄃𑄧𑄇𑄴𑄖𑄧^𑄦𑄃𑄮𑄠𑄭 𑄃𑄳𑄠𑄣𑄨𑄃𑄪𑄑𑄨𑄠𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧c𑄦𑄧𑄃𑄮𑄠𑄭-𑄃𑄣𑄬𑄃𑄪𑄖𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧" + + "s𑄦𑄧𑄃𑄮𑄠𑄭-𑄃𑄣𑄬𑄃𑄪𑄖𑄴 𑄘𑄨𑄚𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧2𑄦𑄧𑄁 𑄇𑄧𑄁 𑄃𑄧𑄇𑄴𑄖𑄧G𑄦𑄧𑄁 𑄇𑄧𑄁 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧_𑄦𑄧𑄁" + + " 𑄇𑄧𑄁 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧1𑄦𑄮𑄞𑄧𑄓𑄴 𑄃𑄧𑄇𑄴𑄖𑄧F𑄦𑄮𑄞𑄧𑄓𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧^𑄦𑄮𑄞𑄧𑄓𑄴 𑄉𑄧𑄢𑄧𑄟𑄴𑄇" + + "𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧N𑄃𑄨𑄚𑄴𑄘𑄨𑄠𑄬 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧b𑄃𑄨𑄚𑄴𑄘𑄨𑄠𑄬 𑄟𑄧𑄦𑄥𑄉𑄧𑄢𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧A𑄃𑄨𑄚𑄴𑄘𑄮𑄌𑄩" + + "𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧k𑄃𑄏𑄧𑄣𑄴 𑄉𑄢𑄳𑄦 𑄃𑄨𑄚𑄴𑄘𑄮𑄚𑄬𑄥𑄨𑄠 𑄃𑄧𑄇𑄴𑄖𑄧^𑄛𑄪𑄉𑄬𑄘𑄨 𑄃𑄨𑄚𑄴𑄘𑄮𑄚𑄬𑄥𑄨𑄠 𑄃𑄧𑄇𑄴𑄖𑄧f𑄛𑄧𑄏" + + "𑄨𑄟𑄬𑄘𑄨 𑄃𑄨𑄚𑄴𑄘𑄮𑄚𑄬𑄥𑄨𑄠 𑄃𑄧𑄇𑄴𑄖𑄧-𑄃𑄨𑄢𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧B𑄃𑄨𑄢𑄚𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧R𑄃𑄨𑄢𑄚𑄴 𑄘𑄨𑄚𑄬𑄃𑄣" + + "𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧I𑄃𑄨𑄢𑄴𑄖𑄪𑄑𑄴𑄥𑄴𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧^𑄃𑄨𑄢𑄴𑄖𑄪𑄑𑄴𑄥𑄴𑄇𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧v𑄃𑄨𑄢𑄴𑄖𑄪𑄑𑄴𑄥𑄴𑄇𑄴" + + " 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧9𑄃𑄨𑄎𑄢𑄠𑄬𑄣𑄴 𑄃𑄧𑄇𑄴𑄖𑄧R𑄃𑄨𑄎𑄴𑄢𑄠𑄬𑄣𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧b𑄃𑄨𑄎𑄴𑄢𑄠𑄬𑄣𑄴 𑄘𑄨𑄚" + + "𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧)𑄎𑄛𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧>𑄎𑄛𑄚𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧N𑄎𑄛𑄚𑄴 𑄘𑄨𑄚𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧\x9e" + + "𑄛𑄨𑄖𑄳𑄢𑄬𑄛𑄳𑄠𑄞𑄧𑄣𑄧𑄥𑄴𑄇𑄴-𑄇𑄳𑄠𑄟𑄴𑄌𑄳𑄠𑄑𑄴𑄃𑄨𑄥𑄴𑄇𑄨 𑄃𑄧𑄇𑄴𑄖𑄧\xab𑄛𑄨𑄖𑄳𑄢𑄬𑄛𑄳𑄠𑄞𑄧𑄣𑄧𑄥𑄴𑄇𑄴-𑄇𑄳𑄠𑄟𑄴𑄌" + + "𑄳𑄠𑄑𑄴𑄃𑄨𑄥𑄴𑄇𑄨 𑄟𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧\xcb𑄛𑄨𑄖𑄳𑄢𑄬𑄛𑄳𑄠𑄞𑄧𑄣𑄧𑄥𑄴𑄇𑄴-𑄇𑄳𑄠𑄟𑄴𑄌𑄳𑄠𑄑𑄴𑄃𑄨𑄥𑄴𑄇𑄨 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧" + + "𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧k𑄛𑄪𑄉𑄬𑄘𑄨 𑄇𑄎𑄇𑄴𑄥𑄳𑄖𑄚𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧s𑄛𑄧𑄏𑄨𑄟𑄬𑄘𑄨 𑄇𑄎𑄇𑄴𑄥𑄳𑄖𑄚𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴" + + "𑄖𑄧5𑄇𑄮𑄢𑄨𑄠𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧J𑄇𑄮𑄢𑄨𑄠𑄚𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧Z𑄇𑄮𑄢𑄨𑄠𑄚𑄴 𑄘𑄨𑄚𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧9𑄇𑄮𑄌𑄴𑄢" + + "𑄳𑄆𑄬 𑄃𑄧𑄇𑄴𑄖𑄧Q𑄇𑄳𑄢𑄥𑄴𑄚𑄮𑄠𑄢𑄴𑄥𑄴𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧f𑄇𑄳𑄢𑄥𑄴𑄚𑄮𑄠𑄢𑄴𑄥𑄴𑄇𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧~𑄇𑄳𑄢𑄥𑄴𑄚𑄮𑄠" + + "𑄢𑄴𑄥𑄴𑄇𑄴 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧E𑄇𑄨𑄢𑄴𑄉𑄨𑄥𑄴𑄖𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧)𑄣𑄧𑄁𑄇 𑄃𑄧𑄇𑄴𑄖𑄧d𑄣𑄭𑄚𑄴 𑄉𑄭 𑄉𑄭 𑄞" + + "𑄨𑄘𑄬𑄉𑄪𑄚𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧>𑄣𑄧𑄢𑄴𑄓𑄴 𑄦𑄤𑄬 𑄃𑄧𑄇𑄴𑄖𑄧S𑄣𑄧𑄢𑄴𑄓𑄴 𑄦𑄤𑄬 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧c𑄣𑄧𑄢𑄴𑄓𑄴 𑄦𑄤𑄬" + + " 𑄘𑄨𑄚𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧)𑄟𑄇𑄃𑄮 𑄃𑄧𑄇𑄴𑄖𑄧6𑄟𑄇𑄃𑄮 𑄟𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧V𑄟𑄇𑄃𑄮 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧\\𑄟" + + "𑄳𑄠𑄇𑄴𑄇𑄪𑄢𑄨 𑄉𑄭 𑄉𑄭 𑄞𑄬𑄘 𑄃𑄧𑄇𑄴𑄖𑄧5𑄟𑄳𑄠𑄉𑄓𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧J𑄟𑄳𑄠𑄉𑄓𑄚𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧b𑄟𑄳𑄠𑄉𑄓𑄚𑄴" + + " 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧9𑄟𑄣𑄴𑄠𑄬𑄥𑄨𑄠 𑄃𑄧𑄇𑄴𑄖𑄧5𑄟𑄣𑄴𑄘𑄨𑄛𑄴 𑄃𑄧𑄇𑄴𑄖𑄧9𑄟𑄢𑄴𑄇𑄬𑄥𑄥𑄴 𑄃𑄧𑄇𑄴𑄖𑄧l𑄟𑄢𑄴𑄥𑄣" + + "𑄴 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄬𑄉𑄪𑄚𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧5𑄟𑄧𑄢𑄨𑄥𑄥𑄴 𑄃𑄧𑄇𑄴𑄖𑄧J𑄟𑄧𑄢𑄨𑄥𑄥𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧b𑄟𑄧𑄢𑄨𑄥𑄥𑄴" + + " 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧9𑄟𑄧𑄥𑄳𑄦𑄧𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧{𑄃𑄪𑄖𑄴𑄖𑄮𑄢𑄴 𑄛𑄧𑄏𑄨𑄟𑄴 𑄟𑄬𑄇𑄴𑄥𑄨𑄇𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧" + + "\x90𑄃𑄪𑄖𑄴𑄖𑄮𑄢𑄴 𑄛𑄧𑄏𑄨𑄟𑄴 𑄟𑄬𑄇𑄴𑄥𑄨𑄇𑄮𑄢𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧\x94𑄃𑄪𑄖𑄴𑄖𑄮𑄢𑄴 𑄛𑄧𑄏𑄨𑄟𑄴 𑄟𑄬𑄇𑄴𑄥𑄨𑄇𑄮𑄢" + + "𑄴 𑄘𑄨𑄚𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧\x8b𑄟𑄬𑄇𑄴𑄥𑄨𑄇𑄚𑄴 𑄛𑄳𑄢𑄧𑄥𑄚𑄴𑄖𑄧 𑄟𑄧𑄦𑄥𑄉𑄧𑄢𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧\xa0𑄟𑄬𑄇𑄴𑄥𑄨𑄇𑄚𑄴" + + " 𑄛𑄳𑄢𑄧𑄥𑄚𑄴𑄖𑄧 𑄟𑄧𑄦𑄥𑄉𑄧𑄢𑄧𑄢𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧\xb0𑄟𑄬𑄇𑄴𑄥𑄨𑄇𑄚𑄴 𑄛𑄳𑄢𑄧𑄥𑄚𑄴𑄖𑄧 𑄟𑄧𑄦𑄥𑄉𑄧𑄢𑄧𑄢𑄴 𑄘𑄨𑄚" + + "𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧B𑄃𑄪𑄣𑄚𑄴 𑄝𑄖𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧W𑄃𑄪𑄣𑄚𑄴 𑄝𑄖𑄮𑄢𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧o𑄃𑄪𑄣𑄚𑄴 𑄝𑄖𑄮𑄢𑄴" + + " 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧1𑄟𑄧𑄥𑄴𑄇𑄮 𑄃𑄧𑄇𑄴𑄖𑄧F𑄟𑄧𑄥𑄴𑄇𑄮 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧^𑄟𑄧𑄥𑄴𑄇𑄮 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴" + + " 𑄃𑄧𑄇𑄴𑄖𑄧5𑄟𑄠𑄚𑄴𑄟𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧-𑄚𑄃𑄪𑄢𑄪 𑄃𑄧𑄇𑄴𑄖𑄧-𑄚𑄬𑄛𑄣𑄴 𑄃𑄧𑄇𑄴𑄖𑄧R𑄚𑄨𑄃𑄪 𑄃𑄳𑄠𑄣𑄬𑄓𑄮𑄚𑄨𑄠 𑄃𑄧𑄇𑄴𑄖𑄧g" + + "𑄚𑄨𑄃𑄪 𑄇𑄳𑄠𑄣𑄬𑄓𑄮𑄚𑄨𑄠 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧\x7f𑄚𑄨𑄃𑄪 𑄇𑄳𑄠𑄣𑄬𑄓𑄮𑄚𑄨𑄠 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧M𑄚𑄨" + + "𑄃𑄪𑄎𑄨𑄣𑄳𑄠𑄚𑄴𑄓𑄴 𑄃𑄧𑄇𑄴𑄖𑄧b𑄚𑄨𑄃𑄪𑄎𑄨𑄣𑄳𑄠𑄚𑄴𑄓𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧r𑄚𑄨𑄃𑄪𑄎𑄨𑄣𑄳𑄠𑄚𑄴𑄓𑄴 𑄘𑄨𑄚𑄮𑄃𑄣𑄮𑄢𑄴" + + " 𑄃𑄧𑄇𑄴𑄖𑄧Y𑄚𑄨𑄃𑄪𑄜𑄃𑄪𑄚𑄴𑄣𑄳𑄠𑄚𑄴𑄓𑄨 𑄃𑄧𑄇𑄴𑄖𑄧n𑄚𑄨𑄃𑄪𑄜𑄃𑄪𑄚𑄴𑄣𑄳𑄠𑄚𑄴𑄓𑄨 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧~𑄚𑄨𑄃𑄪𑄜𑄃𑄪𑄚𑄴𑄣" + + "𑄳𑄠𑄚𑄴𑄓𑄨 𑄘𑄨𑄚𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧1𑄚𑄨𑄃𑄪𑄃𑄨 𑄃𑄧𑄇𑄴𑄖𑄧t𑄚𑄧𑄢𑄴𑄜𑄮𑄇𑄴 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄬𑄉𑄪𑄚𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖" + + "𑄧^𑄜𑄢𑄴𑄚𑄚𑄴𑄘𑄮𑄓𑄨 𑄚𑄮𑄢𑄮𑄚𑄴𑄦 𑄃𑄧𑄇𑄴𑄖𑄧s𑄜𑄢𑄴𑄚𑄚𑄴𑄘𑄮𑄓𑄨 𑄚𑄮𑄢𑄮𑄚𑄴𑄦 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧\x8b𑄜𑄢𑄴𑄚𑄚𑄴" + + "𑄘𑄮𑄓𑄨 𑄚𑄮𑄢𑄮𑄚𑄴𑄦 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧\x8d𑄅𑄪𑄖𑄴𑄖𑄮𑄢𑄴 𑄟𑄬𑄢𑄨𑄚𑄴 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄬𑄉𑄪𑄚𑄮𑄢𑄴 𑄃" + + "𑄧𑄇𑄴𑄖𑄧Q𑄚𑄮𑄞𑄮𑄥𑄨𑄝𑄨𑄢𑄴𑄥𑄴𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧f𑄚𑄮𑄞𑄮𑄥𑄨𑄝𑄨𑄢𑄴𑄥𑄴𑄇𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧~𑄚𑄮𑄞𑄮𑄥𑄨𑄝𑄨𑄢𑄴𑄥𑄴𑄇" + + "𑄴 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧9𑄃𑄮𑄟𑄧𑄥𑄴𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧N𑄃𑄮𑄟𑄧𑄥𑄴𑄇𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧f𑄃𑄮𑄟𑄧𑄥𑄴𑄇𑄴 𑄉" + + "𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧9𑄛𑄇𑄨𑄥𑄴𑄖𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧N𑄛𑄇𑄨𑄥𑄴𑄖𑄚𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧f𑄛𑄇𑄨𑄥𑄴𑄖𑄚𑄴 𑄉𑄧𑄢𑄧" + + "𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧)𑄛𑄣𑄅𑄪 𑄃𑄧𑄇𑄴𑄖𑄧K𑄛𑄛𑄪𑄠 𑄚𑄨𑄃𑄪 𑄉𑄨𑄚𑄨 𑄃𑄧𑄇𑄴𑄖𑄧9𑄛𑄳𑄠𑄢𑄉𑄪𑄠𑄬 𑄃𑄧𑄇𑄴𑄖𑄧N𑄛𑄳𑄠𑄢" + + "𑄉𑄪𑄠𑄬 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧f𑄛𑄳𑄠𑄢𑄉𑄪𑄠𑄬 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧)𑄛𑄬𑄢𑄪 𑄃𑄧𑄇𑄴𑄖𑄧>𑄛𑄬𑄢𑄪 𑄟𑄚𑄧𑄇𑄴 " + + "𑄃𑄧𑄇𑄴𑄖𑄧V𑄛𑄬𑄢𑄪 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧9𑄜𑄨𑄣𑄨𑄛𑄭𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧N𑄜𑄨𑄣𑄨𑄛𑄭𑄚𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧f" + + "𑄜𑄨𑄣𑄨𑄛𑄭𑄚𑄴 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧t𑄜𑄮𑄚𑄨𑄇𑄴𑄥𑄴 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄬𑄉𑄪𑄚𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧t𑄥𑄬𑄚𑄴𑄑𑄴 𑄛" + + "𑄨𑄠𑄬𑄢𑄴 𑄃𑄮 𑄟𑄨𑄇𑄬𑄣𑄧𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧\x89𑄥𑄬𑄚𑄴𑄑𑄴 𑄛𑄨𑄠𑄬𑄢𑄴 𑄃𑄮 𑄟𑄨𑄇𑄬𑄣𑄧𑄚𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧" + + "\x99𑄥𑄬𑄚𑄴𑄑𑄴 𑄛𑄨𑄠𑄬𑄢𑄴 𑄃𑄮 𑄟𑄨𑄇𑄬𑄣𑄧𑄚𑄴 𑄘𑄨𑄚𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧E𑄛𑄨𑄖𑄴𑄇𑄬𑄠𑄢𑄴𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧-𑄛𑄮𑄚𑄛𑄬 " + + "𑄃𑄧𑄇𑄴𑄖𑄧>𑄛𑄨𑄠𑄧𑄁 𑄃𑄨𑄠𑄁 𑄃𑄧𑄇𑄴𑄖𑄧=𑄇𑄨𑄎𑄨𑄣𑄮𑄢𑄴𑄓 𑄃𑄧𑄇𑄴𑄖𑄧J𑄇𑄨𑄎𑄨𑄣𑄮𑄢𑄴𑄓 𑄟𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧j𑄇𑄨𑄎𑄨𑄣𑄮" + + "𑄢𑄴𑄓 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧E𑄢𑄨𑄃𑄨𑄃𑄪𑄚𑄨𑄠𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧-𑄢𑄧𑄗𑄬𑄢 𑄃𑄧𑄇𑄴𑄖𑄧1𑄥𑄈𑄣𑄨𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧F" + + "𑄥𑄈𑄣𑄨𑄚𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧^𑄥𑄈𑄣𑄨𑄚𑄴 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧%𑄥𑄟𑄢 𑄃𑄧𑄇𑄴𑄖𑄧2𑄥𑄟𑄢 𑄟𑄚𑄴 𑄃𑄧𑄇𑄴" + + "𑄖𑄧R𑄥𑄟𑄢 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧)𑄥𑄟𑄮𑄠 𑄃𑄧𑄇𑄴𑄖𑄧>𑄥𑄟𑄮𑄠 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧V𑄥𑄟𑄮𑄠 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣" + + "𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧9𑄥𑄬𑄥𑄬𑄣𑄧𑄥𑄴 𑄃𑄧𑄇𑄴𑄖𑄧J𑄥𑄨𑄁𑄉𑄛𑄪𑄢 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧t𑄥𑄧𑄣𑄮𑄟𑄧𑄚𑄴 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄬𑄉𑄪" + + "𑄚𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧N𑄘𑄧𑄉𑄨𑄚𑄴 𑄎𑄧𑄢𑄴𑄎𑄨𑄠 𑄃𑄧𑄇𑄴𑄖𑄧5𑄥𑄪𑄢𑄨𑄚𑄟𑄴 𑄃𑄧𑄇𑄴𑄖𑄧)𑄥𑄠𑄮𑄤 𑄃𑄧𑄇𑄴𑄖𑄧-𑄖𑄦𑄨𑄖𑄨 𑄃𑄧" + + "𑄇𑄴𑄖𑄧1𑄖𑄭𑄛𑄳𑄆𑄬 𑄃𑄧𑄇𑄴𑄖𑄧F𑄖𑄭𑄛𑄳𑄆𑄬 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧V𑄖𑄭𑄛𑄳𑄆𑄬 𑄘𑄨𑄚𑄮𑄃𑄣𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧9𑄖𑄎𑄈𑄥𑄴𑄖" + + "𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧5𑄑𑄮𑄇𑄬𑄣𑄃𑄪 𑄃𑄧𑄇𑄴𑄖𑄧-𑄑𑄮𑄋𑄴𑄉 𑄃𑄧𑄇𑄴𑄖𑄧B𑄑𑄮𑄋𑄴𑄉 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧Z𑄑𑄮𑄋𑄴𑄉 𑄉𑄧𑄢𑄧𑄟𑄴" + + "𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧)𑄌𑄪𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧U𑄖𑄪𑄢𑄴𑄇𑄴𑄟𑄬𑄚𑄨𑄌𑄴𑄖𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧j𑄖𑄪𑄢𑄴𑄇𑄴𑄟𑄬𑄚𑄨𑄌𑄴𑄖𑄚𑄴 𑄟𑄚𑄧𑄇𑄴" + + " 𑄃𑄧𑄇𑄴𑄖𑄧\x82𑄖𑄪𑄢𑄴𑄇𑄴𑄟𑄬𑄚𑄨𑄌𑄴𑄖𑄚𑄴 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧-𑄑𑄪𑄞𑄣𑄪 𑄃𑄧𑄇𑄴𑄖𑄧9𑄃𑄪𑄢𑄪𑄉𑄪𑄠𑄬 𑄃𑄧𑄇𑄴" + + "𑄖𑄧N𑄃𑄪𑄢𑄪𑄉𑄪𑄠𑄬 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧f𑄃𑄪𑄢𑄪𑄉𑄪𑄠𑄬 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧E𑄃𑄪𑄎𑄴𑄝𑄬𑄇𑄨𑄖𑄚𑄴 𑄃𑄧𑄇𑄴" + + "𑄖𑄧Z𑄃𑄪𑄎𑄴𑄝𑄬𑄇𑄨𑄖𑄚𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧r𑄃𑄪𑄎𑄴𑄝𑄬𑄇𑄨𑄖𑄚𑄴 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧1𑄞𑄚𑄪𑄠𑄖𑄪 𑄃𑄧𑄇" + + "𑄴𑄖𑄧F𑄞𑄚𑄪𑄠𑄖𑄪 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧^𑄞𑄚𑄪𑄠𑄖𑄪 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧=𑄞𑄬𑄚𑄬𑄎𑄪𑄠𑄬𑄣 𑄃𑄧𑄇𑄴𑄖𑄧M𑄝𑄳" + + "𑄣𑄘𑄨𑄝𑄮𑄥𑄴𑄖𑄮𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧b𑄝𑄳𑄣𑄘𑄨𑄝𑄮𑄥𑄴𑄖𑄮𑄇𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧z𑄝𑄳𑄣𑄘𑄨𑄝𑄮𑄥𑄴𑄖𑄮𑄇𑄴 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧" + + "𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧E𑄞𑄧𑄣𑄴𑄉𑄮𑄉𑄳𑄢𑄓𑄴 𑄃𑄧𑄇𑄴𑄖𑄧^𑄞𑄧𑄣𑄴𑄉𑄮𑄉𑄳𑄢𑄓𑄴 𑄟𑄧𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧r𑄞𑄧𑄣𑄴𑄉𑄮𑄉𑄳𑄢𑄓𑄴 𑄉𑄧" + + "𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧5𑄞𑄧𑄥𑄴𑄑𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧T𑄃𑄮𑄠𑄬𑄇𑄴 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄬 𑄃𑄧𑄇𑄴𑄖𑄧O𑄤𑄣𑄨𑄥𑄴 𑄃𑄳𑄃 𑄜𑄪" + + "𑄑𑄪𑄚 𑄃𑄧𑄇𑄴𑄖𑄧=𑄠𑄇𑄪𑄖𑄴𑄥𑄴𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧R𑄠𑄇𑄪𑄖𑄴𑄥𑄴𑄇𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧j𑄠𑄇𑄪𑄖𑄴𑄥𑄴𑄇𑄴 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣" + + "𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧]𑄃𑄨𑄠𑄬𑄇𑄖𑄬𑄢𑄨𑄚𑄴𑄝𑄪𑄢𑄴𑄉𑄴 𑄃𑄧𑄇𑄴𑄖𑄧r𑄃𑄨𑄠𑄬𑄇𑄖𑄬𑄢𑄨𑄚𑄴𑄝𑄪𑄢𑄴𑄉𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧" + + "\x8a𑄃𑄨𑄠𑄬𑄇𑄖𑄬𑄢𑄨𑄚𑄴𑄝𑄪𑄢𑄴𑄉𑄴 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧" + +var bucket18 string = "" + // Size: 15072 bytes + "\x06янв\x06фев\x06мар\x06апр\x06май\x06июн\x06июл\x06авг\x06сен\x06окт" + + "\x06ноя\x06дек\x02Я\x02Ф\x02М\x02А\x02И\x02С\x02О\x02Н\x02Д\x0cянварь" + + "\x0eфевраль\x08март\x0cапрель\x08июнь\x08июль\x0cавгуст\x10сентябрь\x0eо" + + "ктябрь\x0cноябрь\x0eдекабрь\x06кӀи\x04ор\x04ши\x06кха\x04еа\x06пӀе\x06ш" + + "уо\x0aкӀира\x0aоршот\x0cшинара\x0cкхаара\x08еара\x10пӀераска\x08шуот" + + "\x04кӀ\x02о\x02ш\x04кх\x02е\x04пӀ\x0e1-гӀа кв.\x0e2-гӀа кв.\x0e3-гӀа кв." + + "\x0e4-гӀа кв.\x171-гӀа квартал\x172-гӀа квартал\x173-гӀа квартал\x174-гӀ" + + "а квартал8Ӏийса пайхамар вина де кхачале\x1cвайн эра тӀеяле@Ӏийса пайха" + + "мар вина дийнахь дуьйна\x13вайн эрехь\x10в. э. тӀ. я\x06в. э\x06мур\x04" + + "шо\x1bдаханчу шарахь\x1bкарарчу шарахь\x1dрогӀерчу шарахь\x15{0} шо даь" + + "лча\x15{0} шо хьалха\x03ш.\x14{0} ш. даьлча\x14{0} ш. хьалха\x0eКвартал" + + "\x1d{0} квартал яьлча\x1f{0} квартал хьалха\x14{0} кв. яьлча\x16{0} кв. " + + "хьалха\x08бутт\x1dбаханчу баттахь\x1dкарарчу баттахь\x1fрогӀерчу баттах" + + "ь\x19{0} бутт баьлча\x19{0} бутт хьалха\x07бут.\x14{0} б. баьлча\x14{0}" + + " б. хьалха\x1fдаханчу кӀирнахь\x1fкарарчу кӀирнахь!рогӀерчу кӀирнахь\x1b" + + "{0} кӀира даьлча\x1b{0} кӀира хьалха\x09кӀир.\x1a{0} кӀир. даьлча\x1a{0}" + + " кӀир. хьалха\x04де\x0eселхана\x0cтахана\x0aкхана\x15{0} де даьлча\x15{0" + + "} де хьалха\x14{0} д. даьлча\x14{0} д. хьалха\x11де хьалха\x11кӀиран де." + + "даханчу кӀиранан дийнахь.карарчу кӀиранан дийнахь0рогӀерчу кӀиранан дий" + + "нахь#даханчу кӀиранан д.#карарчу кӀиранан д.%рогӀерчу кӀиранан д.$рогӀе" + + "рчу кӀиранан д,даханчу оршотан дийнахь,карарчу оршотан дийнахь.рогӀерчу" + + " оршотан дийнахь!даханчу оршотан д.\x1fкарара оршотан д.#рогӀерчу оршота" + + "н д.,даханчу шинарин дийнахь,карарчу шинарин дийнахь.рогӀерчу шинарин д" + + "ийнахь!даханчу шинарин д.!карарчу шинарин д.#рогӀерчу шинарин д.,даханч" + + "у кхаарин дийнахь,карарчу кхаарин дийнахь.рогӀерчу кхаарин дийнахь!даха" + + "нчу кхаарин д.!карарчу кхаарин д.#рогӀерчу кхаарин д.(даханчу еарин дий" + + "нахь(карарчу еарин дийнахь*рогӀерчу еарин дийнахь\x1dдаханчу еарин д." + + "\x1dкарарчу еарин д.\x1fрогӀерчу еарин д.0даханчу пӀераскан дийнахь0кара" + + "рчу пӀераскан дийнахь2рогӀерчу пӀераскан дийнахь%даханчу пӀераскан д.%к" + + "арарчу пӀераскан д.'рогӀерчу пӀераскан д.#даханчу шотдийнахь#карарчу шо" + + "тдийнахь%рогӀерчу шотдийнахь\x18даханчу шотд.'карарчу даханчу шотд.)рог" + + "Ӏерчу даханчу шотд.\x1bделкъал тӀехьа\x0aсахьт\x1b{0} сахьт даьлча\x1b{" + + "0} сахьт хьалха\x09сахь.\x1a{0} сахь. даьлча\x1a{0} сахь. хьалха\x0aмино" + + "т\x19{0} минот яьлча\x1b{0} минот хьалха\x07мин.\x16{0} мин. яьлча\x18{" + + "0} мин. хьалха\x1b{0} секунд яьлча\x1d{0} секунд хьалха\x07сек.\x16{0} с" + + "ек. яьлча\x18{0} сек. хьалха\x15сахьтан аса)Британин, аьхкенан хан'Ирла" + + "нди, аьхкенан хан\x15ОвхӀан мохк\x1bЮккъера Африка\x1fМалхбален Африка" + + "\x19Къилба Африка\x1fМалхбузен Африка<Малхбузен Африка, стандартан хан8М" + + "алхбузен Африка, аьхкенан хан\x0cАляска)Аляска, стандартан хан%Аляска, " + + "аьхкенан хан\x10Амазонка-Амазонка, стандартан хан)Амазонка, аьхкенан ха" + + "н\x1dЮккъера Америка:Юккъера Америка, стандартан хан6Юккъера Америка, а" + + "ьхкенан хан!Малхбален Америка>Малхбален Америка, стандартан хан:Малхбал" + + "ен Америка, аьхкенан хан Лаьмнийн хан (АЦШ)5Лаьмнийн стандартан хан (АЦ" + + "Ш)1Лаьмнийн аьхкенан хан (АЦШ) Тийна океанан хан5Тийна океанан стандарт" + + "ан хан1Тийна океанан аьхкенан хан\x1bхан Апиа, Самоа0стандартан хан Апи" + + "а, Самоа,аьхкенан хан Апиа, Самоа%СаӀудийн ӀаьрбийчоьGСаӀудийн Ӏаьрбийч" + + "оьнан стандартан ханDСаӀудийн Ӏаьрбийчоьнан, аьхкенан хан\x12Аргентина/" + + "Аргентина, стандартан хан+Аргентина, аьхкенан хан%Малхбузен АргентинаBМ" + + "алхбузен Аргентина, стандартан хан>Малхбузен Аргентина, аьхкенан хан" + + "\x14Эрмалойчоь1Эрмалойчоь, стандартан хан-Эрмалойчоь, аьхкенан хан\x1bАт" + + "лантикан хан0Атлантикан стандартан хан,Атлантикан аьхкенан хан\x1fЮккъе" + + "ра Австрали<Юккъера Австрали, стандартан хан8Юккъера Австрали, аьхкенан" + + " хан:Юккъера Австрали, малхбузен ханOЮккъера Австрали, малхбузен стандар" + + "тан ханKЮккъера Австрали, малхбузен аьхкенан хан#Малхбален Австрали@Мал" + + "хбален Австрали, стандартан хан<Малхбален Австрали, аьхкенан хан#Малхбу" + + "зен Австрали@Малхбузен Австрали, стандартан хан<Малхбузен Австрали, аьх" + + "кенан хан\x16Азербайджан3Азербайджан, стандартан хан/Азербайджан, аьхке" + + "нан хан\x1fАзоран гӀайренаш<Азоран гӀайренаш, стандартан хан8Азоран гӀа" + + "йренаш, аьхкенан хан\x12Бангладеш/Бангладеш, стандартан хан+Бангладеш, " + + "аьхкенан хан\x0aБутан\x0cБоливи\x0eБразили+Бразили, стандартан хан'Браз" + + "или, аьхкенан хан!Бруней-Даруссалам\x13Кабо-Верде0Кабо-Верде, стандарта" + + "н хан,Кабо-Верде, аьхкенан хан\x0eЧаморро\x0aЧатем'Чатем, стандартан ха" + + "н#Чатем, аьхкенан хан\x08Чили%Чили, стандартан хан!Чили, аьхкенан хан" + + "\x0aКитай'Китай, стандартан хан#Китай, аьхкенан хан\x12Чойбалсан/Чойбалс" + + "ан, стандартан хан+Чойбалсан, аьхкенан хан:Ӏийса пайхамар винчу ден гӀа" + + "йре\x1dКокосийн, гӀ-наш\x0eКолумби+Колумби, стандартан хан'Колумби, аьх" + + "кенан хан\x17Кукан, гӀ-наш4Кукан, гӀ-наш, стандартан хан0Кукан, гӀ-наш," + + " аьхкенан хан\x08Куба%Куба, стандартан хан!Куба, аьхкенан хан\x0cДейвис" + + "\x1cДюмон-д’Юрвиль\x1dМалхбален Тимор\x19Мархин гӀайре6Мархин гӀайре, ст" + + "андартан хан2Мархин гӀайре, аьхкенан хан\x0eЭквадор\x1bЮккъера Европа8Ю" + + "ккъера Европа, стандартан хан4Юккъера Европа, аьхкенан хан\x1fМалхбален" + + " Европа<Малхбален Европа, стандартан хан8Малхбален Европа, аьхкенан хан;" + + "Калининградера а, Минскера а хан\x1fМалхбузен Европа<Малхбузен Европа, " + + "стандартан хан8Малхбузен Европа, аьхкенан хан'Фолклендан гӀайренашDФолк" + + "лендан гӀайренаш, стандартан хан@Фолклендан гӀайренаш, аьхкенан хан\x0a" + + "Фиджи'Фиджи, стандартан хан#Фиджи, аьхкенан хан!Французийн ГвианаFФранц" + + "узийн къилба а, Антарктидан а хан)Галапагосан гӀайренаш\x0cГамбье\x14Гу" + + "ьржийчоь1Гуьржийчоь, стандартан хан-Гуьржийчоь, аьхкенан хан\x1fГилберт" + + "ан, гӀ-наш(Гринвичица юкъара хан%Малхбален ГренландиBМалхбален Гренланд" + + "и, стандартан хан>Малхбален Гренланди, аьхкенан хан%Малхбузен Гренланди" + + "BМалхбузен Гренланди, стандартан хан>Малхбузен Гренланди, аьхкенан хан" + + "\x1bГӀажарийн айма\x0cГайана$Гавайн-алеутийн хан9Гавайн-алеутийн стандар" + + "тан хан5Гавайн-алеутийн аьхкенан хан\x0eГонконг+Гонконг, стандартан хан" + + "'Гонконг, аьхкенан хан\x08Ховд%Ховд, стандартан хан!Ховд, аьхкенан хан" + + "\x08Инди\x15Индин океан\x12Индокитай\x1fЮккъера Индонези#Малхбален Индон" + + "ези#Малхбузен Индонези\x16ГӀажарийчоь3ГӀажарийчоь, стандартан хан/ГӀажа" + + "рийчоь, аьхкенан хан\x0eИркутск+Иркутск, стандартан хан'Иркутск, аьхкен" + + "ан хан\x0eИзраиль+Израиль, стандартан хан'Израиль, аьхкенан хан\x0aЯпон" + + "и'Япони, стандартан хан#Япони, аьхкенан хан%Малхбален Казахстан%Малхбуз" + + "ен Казахстан\x0aКорей'Корей, стандартан хан#Корей, аьхкенан хан\x0cКоср" + + "аэ\x14Красноярск1Красноярск, стандартан хан-Красноярск, аьхкенан хан" + + "\x0eКиргизи\x15Лайн, гӀ-наш\x0fЛорд-Хау,Лорд-Хау, стандартан хан(Лорд-Ха" + + "у, аьхкенан хан\x10Маккуори\x0eМагадан+Магадан, стандартан хан'Магадан," + + " аьхкенан хан\x0eМалайзи\x12Мальдиваш\x1dМаркизан, гӀ-наш\x1eМаршалан , " + + "гӀ-наш\x0eМаврики+Маврики, стандартан хан'Маврики, аьхкенан хан\x0cМоус" + + "он=Къилбаседа Американ Мексикан ханRКъилбаседа Американ Мексикан станда" + + "ртан ханNКъилбаседа Американ Мексикан аьхкенан хан1Тийна океанан Мексик" + + "ан ханFТийна океанан Мексикан стандартан ханBТийна океанан Мексикан аьх" + + "кенан хан\x13Улан-Батор0Улан-Батор, стандартан хан,Улан-Батор, аьхкенан" + + " хан\x0cМосква)Москва, стандартан хан%Москва, аьхкенан хан\x0cМьянма\x0a" + + "Науру\x0aНепал\x1bКерла Каледони8Керла Каледони, стандартан хан4Керла К" + + "аледони, аьхкенан хан\x19Керла Зеланди6Керла Зеланди, стандартан хан2Ке" + + "рла Зеланди, аьхкенан хан\x18Ньюфаундленд5Ньюфаундленд, стандартан хан1" + + "Ньюфаундленд, аьхкенан хан\x08Ниуэ\x0eНорфолк$Фернанду-ди-НороньяAФерна" + + "нду-ди-Норонья, стандартан хан=Фернанду-ди-Норонья, аьхкенан хан\x16Нов" + + "осибирск3Новосибирск, стандартан хан/Новосибирск, аьхкенан хан\x08Омск%" + + "Омск, стандартан хан!Омск, аьхкенан хан\x10Пакистан-Пакистан, стандарта" + + "н хан)Пакистан, аьхкенан хан\x0aПалау&Папуа – Керла Гвиней\x10Парагвай-" + + "Парагвай, стандартан хан)Парагвай, аьхкенан хан\x08Перу%Перу, стандарта" + + "н хан!Перу, аьхкенан хан\x14Филиппинаш1Филиппинаш, стандартан хан-Филип" + + "пинаш, аьхкенан хан\x19Феникс, гӀ-наш%Сен-Пьер а, Микелон аBСен-Пьер а," + + " Микелон а, стандартан хан>Сен-Пьер а, Микелон а, аьхкенан хан\x0eПиткэр" + + "н\x19Понапе, гӀ-наш\x0eРеюньон\x0cРотера\x0eСахалин+Сахалин, стандартан" + + " хан'Сахалин, аьхкенан хан\x0aСамоа'Самоа, стандартан хан#Самоа, аьхкена" + + "н хан#Сейшелан гӀайренаш\x10Сингапур\x1fСоломонан, гӀ-наш\x19Къилба Гео" + + "рги\x0eСуринам\x08Сёва\x17Таити, гӀ-наш\x0eТайвань+Тайвань, стандартан " + + "хан'Тайвань, аьхкенан хан\x16Таджикистан\x0eТокелау\x0aТонга'Тонга, ста" + + "ндартан хан#Тонга, аьхкенан хан\x08Чуук\x10Туркмени.Туркменин стандарта" + + "н хан*Туркменин аьхкенан хан\x0cТувалу\x0eУругвай+Уругвай, стандартан х" + + "ан'Уругвай, аьхкенан хан\x14Узбекистан4Узбекистанан стандартан хан0Узбе" + + "кистанан аьхкенан хан\x0eВануату+Вануату, стандартан хан'Вануату, аьхке" + + "нан хан\x12Венесуэла\x16Владивосток3Владивосток, стандартан хан/Владиво" + + "сток, аьхкенан хан\x12Волгоград/Волгоград, стандартан хан+Волгоград, аь" + + "хкенан хан\x0cВосток\x11Уэйк, гӀ-е Уоллис а, Футуна а\x0cЯкутск)Якутск," + + " стандартан хан%Якутск, аьхкенан хан\x18Екатеринбург5Екатеринбург, станд" + + "артан хан1Екатеринбург, аьхкенан хан\x02Ф\x02М\x02А\x02С\x02Н\x02Д\x06м" + + "ай\x02И\x02Д\x02М\x02С\x02Д\x08март\x06май\x08июнь\x08июль\x0cавгуст" + + "\x02М\x02А\x02С\x02О\x02Ч\x02П\x02Ҷ\x02Ш\x02Җ\x02Л\x02Б\x02К\x02Т\x02В" + + "\x02Ж\x02Г\x06мар\x06апр\x06май\x06авг\x06окт" + +var bucket19 string = "" + // Size: 18325 bytes + "\x03KBZ\x03KBR\x03KST\x03KKN\x03KTN\x03KMK\x03KMS\x03KMN\x03KMW\x03KKM" + + "\x03KNK\x03KNB\x0bOkwokubanza\x0aOkwakabiri\x0bOkwakashatu\x08Okwakana" + + "\x0bOkwakataana\x0bOkwamukaaga\x0cOkwamushanju\x0bOkwamunaana\x0aOkwamwe" + + "nda\x09Okwaikumi\x12Okwaikumi na kumwe\x12Okwaikumi na ibiri\x03SAN\x03O" + + "RK\x03OKB\x03OKS\x03OKN\x03OKT\x03OMK\x05Sande\x0bOrwokubanza\x0aOrwakab" + + "iri\x0bOrwakashatu\x08Orwakana\x0bOrwakataano\x0bOrwamukaaga\x07KWOTA 1" + + "\x07KWOTA 2\x07KWOTA 3\x07KWOTA 4\x13Kurisito Atakaijire\x10Kurisito Yai" + + "jire\x07Obunaku\x06Omwaka\x06Omwezi\x06Esande\x07Eizooba\x0bNyomwabazyo" + + "\x08Erizooba\x0bNyenkyakare\x14Eizooba ry’okukora\x12Nyomushana/nyekiro" + + "\x06Shaaha\x08Edakiika\x11Obucweka/Esekendi\x0bM/d/y GGGGG\x11{1} ᎤᎾᎢ {0" + + "}\x06ᎤᏃ\x06ᎧᎦ\x06ᎠᏅ\x06ᎧᏬ\x06ᎠᏂ\x06ᏕᎭ\x06ᎫᏰ\x06ᎦᎶ\x06ᏚᎵ\x06ᏚᏂ\x06ᏅᏓ\x06Ꭵ" + + "Ꮝ\x03Ꭴ\x03Ꭷ\x03Ꭰ\x03Ꮥ\x03Ꭻ\x03Ꭶ\x03Ꮪ\x03Ꮕ\x03Ꭵ\x0fᎤᏃᎸᏔᏅ\x09ᎧᎦᎵ\x09ᎠᏅᏱ" + + "\x09ᎧᏬᏂ\x0fᎠᏂᏍᎬᏘ\x0cᏕᎭᎷᏱ\x0cᎫᏰᏉᏂ\x09ᎦᎶᏂ\x0cᏚᎵᏍᏗ\x0cᏚᏂᏅᏗ\x0cᏅᏓᏕᏆ\x0cᎥᏍᎩᏱ" + + "\x09ᏆᏍᎬ\x09ᏉᏅᎯ\x09ᏔᎵᏁ\x09ᏦᎢᏁ\x09ᏅᎩᏁ\x09ᏧᎾᎩ\x09ᏈᏕᎾ\x03Ꮖ\x03Ꮙ\x03Ꮤ\x03Ꮶ" + + "\x03Ꮷ\x06ᏍᎬ\x06ᏅᎯ\x06ᏔᎵ\x06ᏦᎢ\x06ᏅᎩ\x06ᏧᎾ\x06ᏕᎾ\x15ᎤᎾᏙᏓᏆᏍᎬ\x15ᎤᎾᏙᏓᏉᏅᎯ" + + "\x0fᏔᎵᏁᎢᎦ\x0fᏦᎢᏁᎢᎦ\x0fᏅᎩᏁᎢᎦ\x12ᏧᎾᎩᎶᏍᏗ\x15ᎤᎾᏙᏓᏈᏕᎾ\x101st ᎩᏄᏙᏗ\x102nd ᎩᏄᏙᏗ" + + "\x103rd ᎩᏄᏙᏗ\x104th ᎩᏄᏙᏗ\x09ᏌᎾᎴ\x06ᎢᎦ\x12ᏒᎯᏱᎢᏗᏢ\x03Ꮜ\x03Ꭲ\x03Ꮢ)ᏧᏓᎷᎸ ᎤᎷᎯᏍ" + + "Ꮧ ᎦᎶᏁᏛ9ᏧᏓᎷᎸ ᏯᏃᏉ ᏱᎬᏍᏛᏭ ᎠᏓᎴᏂᏍᎬ\x10ᎠᏃ ᏙᎻᏂ,ᏯᏃᏉ ᏱᎬᏍᏛᏭ ᎠᏓᎴᏂᏍᎬ\x12ᏗᏓᎴᏂᏍᎬ\x18Ꭴ" + + "ᏕᏘᏴᏌᏗᏒᎢ\x10ᎡᏘ ᏥᎨᏒ\x19ᎯᎠ ᏧᏕᏘᏴᏒᏘ\x0cᎡᏘᏴᎢ#ᎾᎿ {0} ᎤᏕᏘᏴᏌᏗᏒᎢ&ᎾᎿ {0} ᎢᏧᏕᏘᏴᏌᏗᏒ" + + "Ꭲ&{0} ᎤᏕᏘᏴᏌᏗᏒᎢ ᏥᎨᏒ){0} ᎢᏧᏕᏘᏴᏌᏗᏒᎢ ᏥᎨᏒ\x07ᎤᏕ.\x12ᎾᎿ {0} ᎤᏕ.\x1cᎾᎿ {0} ᎤᏕ" + + ". ᏥᎨᏒ\x0cᎩᏄᏙᏗ\x16ᎩᏄᏙᏗ ᏥᎨᏒ\x13ᎯᎠ ᎩᏄᏙᏗ\x16ᏔᎵᏁ ᎩᏄᏙᏗ\x17ᎾᎿ {0} ᎩᏄᏙᏗ!ᎾᎿ {0} Ꭹ" + + "ᏄᏙᏗ ᏥᎨᏒ\x0aᎩᏄᏘ.\x15ᎾᎿ {0} ᎩᏄᏘ.\x1fᎾᎿ {0} ᎩᏄᏘ. ᏥᎨᏒ\x09ᎧᎸᎢ\x13ᎧᎸᎢ ᏥᎨᏒ" + + "\x10ᎯᎠ ᎧᎸᎢ\x13ᏔᎵᏁ ᎧᎸᎢ\x14ᎾᎿ {0} ᎧᎸᎢ\x17ᎾᎿ {0} ᏗᎧᎸᎢ\x1eᎾᎿ {0} ᎧᎸᎢ ᏥᎨᏒ!ᎾᎿ " + + "{0} ᏗᎧᎸᎢ ᏥᎨᏒ\x07ᎧᎸ.\x12ᎾᎿ {0} ᎧᎸ.\x1cᎾᎿ {0} ᎧᎸ. ᏥᎨᏒ\x06ᎧᎸ\x15ᏒᎾᏙᏓᏆᏍᏗ\x15" + + "ᏥᏛᎵᏱᎵᏒᎢ\x13ᎯᎠ ᎠᎵᎵᏌ\x0fᏐᏆᎴᏅᎲ ᎾᎿ {0} ᏒᎾᏙᏓᏆᏍᏗ#ᎾᎿ {0} ᎢᏳᎾᏙᏓᏆᏍᏗ*ᎾᎿ {0} ᏒᎾᏙᏓ" + + "ᏆᏍᏗ ᏥᎨᏒ-ᎾᎿ {0} ᎢᏳᎾᏙᏓᏆᏍᏗ ᏥᎨᏒ'Ꮎ ᏒᎾᏙᏓᏆᏍᏗ ᎾᏍᎩ {0}\x07ᏒᎾ.\x12ᎾᎿ {0} ᏒᎾ.\x1c" + + "ᎾᎿ {0} ᏒᎾ. ᏥᎨᏒ\x1fᏒᎾᏙᏓᏆᏍᏗ ᎧᎸᎢ\x0fᎡᎾ. ᎧᎸ.\x06ᏒᎯ\x0dᎪᎯ ᎢᎦ\x0cᏌᎾᎴᎢ\x11ᎾᎿ " + + "{0} ᎢᎦ$ᎾᎿ {0} ᎯᎸᏍᎩ ᏧᏒᎯᏛ\x14{0} ᎢᎦ ᏥᎨᏒ'{0} ᎯᎸᏍᎩ ᏧᏒᎯᏛ ᏥᎨᏒ\x1fᎢᎦ ᎤᏕᏘᏴᏌᏗᏒᎢ" + + "\x0eᎢᎦ ᎤᏕ.\x16ᎢᎦ ᏕᎨᏌᏗᏒ\x0eᎢᎦ ᏕᎨ.&ᏒᎾᏙᏓᏆᏍᏗ ᎢᎦ ᎧᎸᎢ\x16ᏒᎾ. ᎢᎦ ᎧᎸ.\x1fᎤᎾᏙᏓᏆᏍᎬ" + + " ᏥᎨᏒ\x1cᎯᎠ ᎤᎾᏙᏓᏆᏍᎬ\x1fᏔᎵᏁ ᎤᎾᏙᏓᏆᏍᎬ ᎾᎿ {0} ᎤᎾᏙᏓᏆᏍᎬ#{0} ᎤᎾᏙᏓᏆᏍᎬ ᏥᎨᏒ\x14ᏆᏍᎬ." + + " ᏥᎨᏒ\x11ᎯᎠ ᏆᏍᎬ.\x14ᏔᎵᏁ ᏆᏍᎬ.\x10ᏍᎬ ᏥᎨᏒ\x0dᎯᎠ ᏍᎬ\x10ᏔᎵᏁ ᏍᎬ\x1cᎤᎾᏙᏓᏉᏅ ᏥᎨᏒ" + + "\x19ᎯᎠ ᎤᎾᏙᏓᏉᏅ\x1cᏔᎵᏁ ᎤᎾᏙᏓᏉᏅ\x1dᎾᎿ {0} ᎤᎾᏙᏓᏉᏅ {0} ᎤᎾᏙᏓᏉᏅ ᏥᎨᏒ\x14ᏉᏅᎯ. ᏥᎨᏒ" + + "\x11ᎯᎠ ᏉᏅᎯ.\x14ᏔᎵᏁ ᏉᏅᎯ.\x0dᏉ ᏥᎨᏒ\x0aᎯᎠ Ꮙ\x0dᏔᎵᏁ Ꮙ\x1aᏔᎵᏁ ᎢᎦ ᏥᎨᏒ\x17ᎯᎠ ᏔᎵ" + + "Ꮑ ᎢᎦ\x1aᏔᎵᏁ ᏔᎵᏁ ᎢᎦ\x1bᎾᎿ {0} ᏔᎵᏁ ᎢᎦ\x1e{0} ᏔᎵᏁ ᎢᎦ ᏥᎨᏒ\x14ᏔᎵᏁ. ᏥᎨᏒ\x11Ꭿ" + + "Ꭰ ᏔᎵᏁ.\x14ᏔᎵᏁ ᏔᎵᏁ.\x10ᏔᎵ ᏥᎨᏒ\x0dᎯᎠ ᏔᎵ\x10ᏔᎵᏁ ᏔᎵ\x1aᏦᎢᏁ ᎢᎦ ᏥᎨᏒ\x17ᎯᎠ ᏦᎢ" + + "Ꮑ ᎢᎦ\x1aᏔᎵᏁ ᏦᎢᏁ ᎢᎦ\x1bᎾᎿ {0} ᏦᎢᏁ ᎢᎦ\x1e{0} ᏦᎢᏁ ᎢᎦ ᏥᎨᏒ\x14ᏦᎢᏁ. ᏥᎨᏒ\x11Ꭿ" + + "Ꭰ ᏦᎢᏁ.\x14ᏔᎵᏁ ᏦᎢᏁ.\x0dᏦ ᏥᎨᏒ\x0aᎯᎠ Ꮶ\x0dᏔᎵᏁ Ꮶ\x13ᏅᎩᏁ ᏥᎨᏒ\x17ᎯᎠ ᏅᎩᏁ ᎢᎦ" + + "\x1aᏔᎵᏁ ᏅᎩᏁ ᎢᎦ\x1bᎾᎿ {0} ᏅᎩᏁ ᎢᎦ\x1e{0} ᏅᎩᏁ ᎢᎦ ᏥᎨᏒ\x14ᏅᎩᏁ. ᏥᎨᏒ\x11ᎯᎠ ᏅᎩᏁ." + + "\x14ᏔᎵᏁ ᏅᎩᏁ.\x10ᏅᎩ ᏥᎨᏒ\x0dᎯᎠ ᏅᎩ\x10ᏔᎵᏁ ᏅᎩ\x1cᏧᎾᎩᎶᏍᏗ ᏥᎨᏒ\x19ᎯᎠ ᏧᎾᎩᎶᏍᏗ\x1c" + + "ᏔᎵᏁ ᏧᎾᎩᎶᏍᏗ$ᎾᎿ {0} ᏧᎾᎩᎶᏍᏗ ᎢᎦ {0} ᏧᎾᎩᎶᏍᏗ ᏥᎨᏒ\x14ᏧᎾᎩ. ᏥᎨᏒ\x11ᎯᎠ ᏧᎾᎩ.\x14Ꮤ" + + "ᎵᏁ ᏧᎾᎩ.\x0dᏧ ᏥᎨᏒ\x0aᎯᎠ Ꮷ\x0dᏔᎵᏁ Ꮷ\x1fᎤᎾᏙᏓᏈᏕᎾ ᏥᎨᏒ\x1cᎯᎠ ᎤᎾᏙᏓᏈᏕᎾ\x1fᏔᎵᏁ " + + "ᎤᎾᏙᏓᏈᏕᎾ'ᎾᎿ {0} ᎤᎾᏙᏓᏈᏕᎾ ᎢᎦ#{0} ᎤᎾᏙᏓᏈᎨᎾ ᏥᎨᏒ\x14ᏈᏕᎾ. ᏥᎨᏒ\x11ᎯᎠ ᏈᏕᎾ.\x14ᏔᎵ" + + "Ꮑ ᏈᏕᎾ.\x10ᏕᎾ ᏥᎨᏒ\x0dᎯᎠ ᏕᎾ\x10ᏔᎵᏁ ᏕᎾ\x13ᏌᎾᎴ/ᏒᎯᏱ\x0cᏑᏟᎶᏓ\x13ᎯᎠ ᏑᏟᎶᏓ\x17Ꮎ" + + "Ꮏ {0} ᏑᏟᎶᏓ\x1aᎾᎿ {0} ᎢᏳᏟᎶᏓ\x1a{0} ᏑᏟᎶᏓ ᏥᎨᏒ\x1d{0} ᎢᏳᏟᎶᏓ ᏥᎨᏒ\x07ᏑᏟ.\x12" + + "ᎾᎿ {0} ᏑᏟ.\x1cᎾᎿ {0} ᏑᏟ. ᏥᎨᏒ\x15ᎢᏯᏔᏬᏍᏔᏅ\x1cᎯᎠ ᎢᏯᏔᏬᏍᏔᏅ ᎾᎿ {0} ᎢᏯᏔᏬᏍᏔᏅ*Ꮎ" + + "Ꮏ {0} ᎢᏯᏔᏬᏍᏔᏅ ᏥᎨᏒ\x0aᎢᏯᏔ.\x15ᎾᎿ {0} ᎢᏯᏔ.\x1fᎾᎿ {0} ᎢᏯᏔ. ᏥᎨᏒ\x09ᎠᏎᏢ\x06" + + "ᏃᏊ\x14ᎾᎿ {0} ᎠᏎᏢ'ᎾᎿ {0} ᏓᏓᎾᏩᏍᎬ ᏥᎨᏒ\x17{0} ᎠᏎᏢ ᏥᎨᏒ {0} ᏓᏓᎾᏩᏍᎬ ᏥᎨᏒ\x0aᎠᏎ" + + "Ꮲ.\x15ᎾᎿ {0} ᎠᏎᏢ.\x18{0} ᎠᏎᏢ. ᏥᎨᏒ2ᏂᎬᎾᏛ ᏧᏓᎴᏅᏓ ᏓᏟᎢᎵᏍᏒᎢ\x1cᏂᎬᎾᏛ ᏧᏓᎴᏅᏓ\x13" + + "{0} ᎠᏟᎢᎵᏒ'{0} ᎪᎯ ᎢᎦ ᎠᏟᎢᎵᏍᏒᎩ#{0} ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ&ᎢᎩᏠᏱ ᏂᎦᏓ ᎠᏟᎢᎵᏒ ᏈᏗᏏ ᎪᎩ ᎠᏟᎢᎵᏒ)" + + "ᎨᎵᎩ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ%ᎠᏫᎨᏂᏍᏖᏂ ᎠᏟᎢᎵᏒ)ᎠᏰᏟ ᎬᎿᎨᏍᏛ ᎠᏟᎢᎵᏒ,ᏗᎧᎸᎬ ᎬᎿᎨᏍᏛ ᎠᏟᎢᎵᏒ<ᏧᎦᎾᏮ ᎬᎿ" + + "ᎨᏍᏛ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ,ᏭᏕᎵᎬ ᎬᎿᎨᏍᏛ ᎠᏟᎢᎵᏒ<ᏭᏕᎵᎬ ᎬᎿᎨᏍᏛ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ3ᏭᏕᎵᎬ ᎬᎿᎨᏍᏛ ᎪᎩ " + + "ᎠᏟᎢᎵᏒ\x1cᎠᎳᏍᎦ ᎠᏟᎢᎵᏒ,ᎠᎳᏍᎦ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ0ᎠᎳᏍᎦ ᎪᎯ ᎢᎦ ᎠᏟᎢᎵᏍᏒᎩ\x1cᎠᎺᏌᏂ ᎠᏟᎢᎵᏒ," + + "ᎠᎺᏌᏂ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ#ᎠᎺᏌᏂ ᎪᎩ ᎠᏟᎢᎵᏒ\x19ᎠᏰᏟ ᎠᏟᎢᎵᏒ)ᎠᏰᏟ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ-ᎠᏰᏟ ᎪᎯ ᎢᎦ " + + "ᎠᏟᎢᎵᏍᏒᎩ#ᏗᎧᎸᎬ ᏗᏜ ᎠᏟᎢᎵᏒ3ᏗᎧᎸᎬ ᏗᏜ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ7ᏗᎧᎸᎬ ᏗᏜ ᎪᎯ ᎢᎦ ᎠᏟᎢᎵᏍᏒᎩ\x19ᎣᏓᎸ" + + " ᎠᏟᎢᎵᏒ)ᎣᏓᎸ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ-ᎣᏓᎸ ᎪᎯ ᎢᎦ ᎠᏟᎢᎵᏍᏒᎩ\x1cᏭᏕᎵᎬ ᎠᏟᎢᎵᏒ,ᏭᏕᎵᎬ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ0" + + "ᏭᏕᎵᎬ ᎪᎯ ᎢᎦ ᎠᏟᎢᎵᏍᏒᎩ\x19ᎠᏈᎠ ᎠᏟᎢᎵᏒ)ᎠᏈᎠ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ*ᎠᏈᎠ ᎪᎯ ᎢᎦ ᎠᏟᎢᎵᏒᎩ\x1cᎠᎴ" + + "ᏈᏯ ᎠᏟᎢᎵᏒ,ᎠᎴᏈᏯ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ-ᎠᎴᏈᏯ ᎪᎯ ᎢᎦ ᎠᏟᎢᎵᏒᎩ\"ᎠᏥᏂᏘᏂᎠ ᎠᏟᎢᎵᏒ2ᎠᏥᏂᏘᏂᎠ ᎠᏟᎶᏍᏗ" + + " ᎠᏟᎢᎵᏒ)ᎠᏥᏂᏘᏂᎠ ᎪᎩ ᎠᏟᎢᎵᏒ6ᏭᏕᎵᎬ ᏗᏜ ᎠᏥᏂᏘᏂᎠ ᎠᏟᎢᎵᏒFᏭᏕᎵᎬ ᏗᏜ ᎠᏥᏂᏘᏂᎠ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒMᏭ" + + "ᏕᎵᎬ ᏗᏜ ᎠᏥᏂᏘᏂᎠ ᎪᎩ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ\x1fᎠᎵᎻᏂᎠ ᎠᏟᎢᎵᏒ/ᎠᎵᎻᏂᎠ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ&ᎠᎵᎻᏂᎠ ᎪᎩ" + + " ᎠᏟᎢᎵᏒ\x1cᏗᎧᎸᎬ ᎠᏟᎢᎵᏒ,ᏗᎧᎸᎬ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ0ᏗᎧᎸᎬ ᎪᎯ ᎢᎦ ᎠᏟᎢᎵᏍᏒᎩ&ᎠᏰᏟ ᎡᎳᏗᏜ ᎠᏟᎢᎵᏒ6" + + "ᎠᏰᏟ ᎡᎳᏗᏜ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ7ᎠᏰᏟ ᎡᎳᏗᏜ ᎪᎯ ᎢᎦ ᎠᏟᎢᎵᏒᎩ:ᎠᏰᏟ ᎡᎳᏗᏜ ᏭᏕᎵᎬ ᏗᏜ ᎠᏟᎢᎵᏒJᎠᏰᏟ " + + "ᎡᎳᏗᏜ ᏭᏕᎵᎬ ᏗᏜ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒKᎠᏰᏟ ᎡᎳᏗᏜ ᏭᏕᎵᎬ ᏗᏜ ᎪᎯ ᎢᎦ ᎠᏟᎢᎵᏒᎩ0ᎡᎳᏗᏜ ᏗᎧᎸᎬ ᏗᏜ ᎠᏟ" + + "ᎢᎵᏒ@ᎡᎳᏗᏜ ᏗᎧᎸᎬ ᏗᏜ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒAᎡᎳᏗᏜ ᏗᎧᎸᎬ ᏗᏜ ᎪᎯ ᎢᎦ ᎠᏟᎢᎵᏒᎩ0ᎡᎳᏗᏜ ᏭᏕᎵᎬ ᏗᏜ ᎠᏟ" + + "ᎢᎵᏒ@ᎡᎳᏗᏜ ᏭᏕᎵᎬ ᏗᏜ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒAᎡᎳᏗᏜ ᏭᏕᎵᎬ ᏗᏜ ᎪᎯ ᎢᎦ ᎠᏟᎢᎵᏒᎩ\"ᎠᏏᎵᏆᏌᏂ ᎠᏟᎢᎵᏒ2Ꭰ" + + "ᏏᎵᏆᏌᏂ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ)ᎠᏏᎵᏆᏌᏂ ᎪᎩ ᎠᏟᎢᎵᏒ\x1cᎠᏐᎴᏏ ᎠᏟᎢᎵᏒ,ᎠᏐᎴᏏ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ#ᎠᏐᎴᏏ " + + "ᎪᎩ ᎠᏟᎢᎵᏒ\"ᏆᏂᎦᎵᏕᏍ ᎠᏟᎢᎵᏒ2ᏆᏂᎦᎵᏕᏍ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ)ᏆᏂᎦᎵᏕᏍ ᎪᎩ ᎠᏟᎢᎵᏒ\x19ᏊᏔᏂ ᎠᏟᎢᎵᏒ" + + "\x1cᏉᎵᏫᎠ ᎠᏟᎢᎵᏒ\x1cᏆᏏᎵᏯ ᎠᏟᎢᎵᏒ,ᏆᏏᎵᏯ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ#ᏆᏏᎵᏯ ᎪᎩ ᎠᏟᎢᎵᏒ)ᏊᎾᎢ ᏓᎷᏌᎳᎻ ᎠᏟ" + + "ᎢᎵᏒ/ᎢᎬᎾᏕᎾ ᎢᏤᏳᏍᏗ ᎠᏟᎢᎵᏒ?ᎢᎬᎾᏕᎾ ᎢᏤᏳᏍᏗ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ6ᎢᎬᎾᏕᎾ ᎢᏤᏳᏍᏗ ᎪᎩ ᎠᏟᎢᎵᏒ)ᏣᎼᎶ" + + " ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ\x19ᏣᏝᎻ ᎠᏟᎢᎵᏒ)ᏣᏝᎻ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ*ᏣᏝᎻ ᎪᎯ ᎢᎦ ᎠᏟᎢᎵᏒᎩ\x16ᏥᎵ ᎠᏟᎢᎵᏒ&Ꮵ" + + "Ꮅ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ\x1dᏥᎵ ᎪᎩ ᎠᏟᎢᎵᏒ\"ᏓᎶᏂᎨᏍᏛ ᎠᏟᎢᎵᏒ2ᏓᎶᏂᎨᏍᏛ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ3ᏓᎶᏂᎨᏍᏛ Ꭺ" + + "Ꭿ ᎢᎦ ᎠᏟᎢᎵᏒᎩ\"ᏦᏱᏆᎵᏌᏂ ᎠᏟᎢᎵᏒ2ᏦᏱᏆᎵᏌᏂ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ)ᏦᏱᏆᎵᏌᏂ ᎪᎩ ᎠᏟᎢᎵᏒ5ᏓᏂᏍᏓᏲᎯᎲ Ꭴ" + + "ᎦᏚᏛᎢ ᎠᏟᎢᎵᏒ)ᎪᎪᏍ ᏚᎦᏚᏛᎢ ᎠᏟᎢᎵᏒ\"ᎪᎸᎻᏈᎢᎠ ᎠᏟᎢᎵᏒ2ᎪᎸᎻᏈᎢᎠ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ)ᎪᎸᎻᏈᎢᎠ ᎪᎩ " + + "ᎠᏟᎢᎵᏒ8ᎠᏓᏍᏓᏴᎲᏍᎩ ᏚᎦᏚᏛᎢ ᎠᏟᎢᎵᏒHᎠᏓᏍᏓᏴᎲᏍᎩ ᏚᎦᏚᏛᎢ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒIᎠᏓᏍᏓᏴᎲᏍᎩ ᏚᎦᏚᏛᎢ Ꭰ" + + "ᏰᏟ ᎪᎩ ᎠᏟᎢᎵᏒ\x16ᎫᏆ ᎠᏟᎢᎵᏒ&ᎫᏆ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ*ᎫᏆ ᎪᎯ ᎢᎦ ᎠᏟᎢᎵᏍᏒᎩ\x19ᏕᏫᏏ ᎠᏟᎢᎵᏒ/Ꮪ" + + "ᎼᎾᏘ-Ꮧ’ᎤᎵᏫᎵ ᎠᏟᎢᎵᏒ&ᏗᎧᎸᎬ ᏘᎼᎵ ᎠᏟᎢᎵᏒ5ᏥᏌᏕᎴᎯᏌᏅ ᎤᎦᏚᏛᎢ ᎠᏟᎢᎵᏒEᏥᏌᏕᎴᎯᏌᏅ ᎤᎦᏚᏛᎢ ᎠᏟᎶᏍ" + + "Ꮧ ᎠᏟᎢᎵᏒ<ᏥᏌᏕᎴᎯᏌᏅ ᎤᎦᏚᏛᎢ ᎪᎩ ᎠᏟᎢᎵᏒ\x1cᎡᏆᏙᎵ ᎠᏟᎢᎵᏒ#ᎠᏰᏟ ᏳᎳᏈ ᎠᏟᎢᎵᏒ3ᎠᏰᏟ ᏳᎳᏈ ᎠᏟᎶ" + + "ᏍᏗ ᎠᏟᎢᎵᏒ*ᎠᏰᏟ ᏳᎳᏈ ᎪᎩ ᎠᏟᎢᎵᏒ-ᏗᎧᎸᎬ ᏗᏜ ᏳᎳᏈ ᎠᏟᎢᎵᏒ=ᏗᎧᎸᎬ ᏗᏜ ᏳᎳᏈ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ4ᏗᎧ" + + "ᎸᎬ ᏗᏜ ᏳᎳᏈ ᎪᎩ ᎠᏟᎢᎵᏒ&ᏗᎧᎸᎬ ᏳᎳᏈ ᎠᏟᎢᎵᏒ-ᏭᏕᎵᎬ ᏗᏜ ᏳᎳᏈ ᎠᏟᎢᎵᏒ=ᏭᏕᎵᎬ ᏗᏜ ᏳᎳᏈ ᎠᏟᎶᏍᏗ " + + "ᎠᏟᎢᎵᏒ4ᏭᏕᎵᎬ ᏗᏜ ᏳᎳᏈ ᎪᎩ ᎠᏟᎢᎵᏒ&ᏩᎩ ᏚᎦᏚᏛᎢ ᎠᏟᎢᎵᏒ6ᏩᎩ ᏚᎦᏚᏛᎢ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ-ᏩᎩ ᏚᎦᏚᏛ" + + "Ꭲ ᎪᎩ ᎠᏟᎢᎵᏒ\x16ᏫᏥ ᎠᏟᎢᎵᏒ&ᏫᏥ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ\x1dᏫᏥ ᎪᎩ ᎠᏟᎢᎵᏒ&ᎠᏂᎦᎸ ᏈᏯᎾ ᎠᏟᎢᎵᏒCᎠᏂ" + + "ᎦᎸᏥ ᎤᎦᏃᏮ ᎠᎴ ᎤᏁᏍᏓᎶ ᎠᏟᎢᎵᏒ0ᎡᏆ ᏓᎦᏏ ᎤᎦᏚᏛᎢ ᎠᏟᎢᎵᏒ\x1cᎦᎻᏇᎵ ᎠᏟᎢᎵᏒ\x1cᏣᎠᏥᎢ ᎠᏟᎢᎵᏒ" + + ",ᏣᎠᏥᎢ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ#ᏣᎠᏥᎢ ᎪᎩ ᎠᏟᎢᎵᏒ,ᎩᎵᏇᏘ ᏚᎦᏚᏛᎢ ᎠᏟᎢᎵᏒ#ᎢᏤ ᎢᏳᏍᏗ ᎠᏟᎢᎵᏒ,ᏗᎧᎸᎬ ᎢᏤᏍᏛ" + + "Ᏹ ᎠᎵᎢᎵᏒ<ᏗᎧᎸᎬ ᎢᏤᏍᏛᏱ ᎠᏟᎶᏍᏗ ᎠᎵᎢᎵᏒ3ᏗᎧᎸᎬ ᎢᏤᏍᏛᏱ ᎪᎩ ᎠᏟᎢᎵᏒ,ᏭᏕᎵᎬ ᎢᏤᏍᏛᏱ ᎠᎵᎢᎵᏒ<ᏭᏕ" + + "ᎵᎬ ᎢᏤᏍᏛᏱ ᎠᏟᎶᏍᏗ ᎠᎵᎢᎵᏒ3ᏭᏕᎵᎬ ᎢᏤᏍᏛᏱ ᎪᎩ ᎠᏟᎢᎵᏒ/ᎡᏉᏄᎸᏗ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ\x19ᎦᏯᎾ ᎠᏟᎢᎵ" + + "Ꮢ,ᎭᏩᏱ-ᎠᎵᏳᏏᎠᏂ ᎠᏟᎢᎵᏒ<ᎭᏩᏱ-ᎠᎵᏳᏏᎠᏂ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ@ᎭᏩᏱ-ᎠᎵᏳᏏᎠᏂ ᎪᎯ ᎢᎦ ᎠᏟᎢᎵᏍᏒᎩ#ᎰᏂᎩ" + + " ᎪᏂᎩ ᎠᏟᎢᎵᏒ3ᎰᏂᎩ ᎪᏂᎩ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ*ᎰᏂᎩ ᎪᏂᎩ ᎪᎩ ᎠᏟᎢᎵᏒ\x19ᎰᏩᏗ ᎠᏟᎢᎵᏒ)ᎰᏩᏗ ᎠᏟᎶᏍᏗ Ꭰ" + + "ᏟᎢᎵᏒ ᎰᏩᏗ ᎪᎩ ᎠᏟᎢᎵᏒ/ᎢᏂᏗᎢᎠ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ,ᎠᏂᏴᏫᏯ ᎠᎺᏉᎯ ᎠᏟᎢᎵᏒ+ᎢᏂᏙᏓᎶᏂᎨᏍᏛ ᎠᏟᎢᎵᏒ,Ꭰ" + + "ᏰᏟ ᎢᏂᏙᏂᏍᏯ ᎠᏟᎢᎵᏒ6ᏗᎧᎸᎬ ᏗᏜ ᎢᏂᏙᏂᏍᏯ ᎠᏟᎢᎵᏒ6ᏭᏕᎵᎬ ᏗᏜ ᎢᏂᏙᏂᏍᏯ ᎠᏟᎢᎵᏒ\x19ᎢᎳᏂ ᎠᏟᎢᎵᏒ" + + ")ᎢᎳᏂ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ*ᎢᎳᏂ ᎪᎯ ᎢᎦ ᎠᏟᎢᎵᏒᎩ\x1cᎢᎫᏥᎧ ᎠᏟᎢᎵᏒ,ᎢᎫᏥᎧ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ#ᎢᎫᏥᎧ ᎪᎩ" + + " ᎠᏟᎢᎵᏒ\x1cᎢᏏᎵᏱ ᎠᏟᎢᎵᏒ,ᎢᏏᎵᏱ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ-ᎢᏏᎵᏱ ᎪᎯ ᎢᎦ ᎠᏟᎢᎵᏒᎩ\x1cᏣᏩᏂᏏ ᎠᏟᎢᎵᏒ,ᏣᏩ" + + "ᏂᏏ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ-ᏣᏩᏂᏏ ᎪᎯ ᎢᎦ ᎠᏟᎢᎵᏒᎩ/ᏗᎧᎸᎬ ᎧᏎᎧᏍᏕᏂ ᎠᏟᎢᎵᏒ/ᏭᏕᎵᎬ ᎧᏎᎧᏍᏕᏂ ᎠᏟᎢᎵᏒ" + + "\x1cᎪᎵᎠᏂ ᎠᏟᎢᎵᏒ,ᎪᎵᎠᏂ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ-ᎪᎵᎠᏂ ᎪᎯ ᎢᎦ ᎠᏟᎢᎵᏒᎩ\x19ᎪᏍᎴ ᎠᏟᎢᎵᏒ\"ᏝᏍᏃᏯᏍᎧ Ꭰ" + + "ᏟᎢᎵᏒ2ᏝᏍᏃᏯᏍᎧ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ)ᏝᏍᏃᏯᏍᎧ ᎪᎩ ᎠᏟᎢᎵᏒ\x1fᎩᎵᏣᎢᏍ ᎠᏟᎢᎵᏒ/ᎠᏍᏓᏅᏅ ᏚᎦᏚᏛᎢ ᎠᏟᎢ" + + "ᎵᏒ&ᎤᎬᏫᏳᎯ ᎭᏫ ᎠᏟᎢᎵᏒ6ᎤᎬᏫᏳᎯ ᎭᏫ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ7ᎤᎬᏫᏳᎯ ᎭᏫ ᎪᎯ ᎢᎦ ᎠᏟᎢᎵᏒᎩ)ᎹᏇᎵ ᎤᎦᏚᏛᎢ" + + " ᎠᏟᎢᎵᏒ\x1cᎹᎦᏓᏂ ᎠᏟᎢᎵᏒ,ᎹᎦᏓᏂ ᎠᏟᎢᎵᏒ ᎠᏟᎢᎵᏒ#ᎹᎦᏓᏂ ᎪᎩ ᎠᏟᎢᎵᏒ\x1fᎹᎴᏏᎢᎠ ᎠᏟᎢᎵᏒ\x1fᎹᎵ" + + "ᏗᏫᏍ ᎠᏟᎢᎵᏒ\x1fᎹᎵᎨᏌᏏ ᎠᏟᎢᎵᏒ)ᎹᏌᎵ ᏚᎦᏚᏛᎢ ᎠᏟᎢᎵᏒ\x1fᎼᎵᏏᎥᏍ ᎠᏟᎢᎵᏒ/ᎼᎵᏏᎥᏍ ᎠᏟᎶᏍᏗ ᎠᏟ" + + "ᎢᎵᏒ&ᎼᎵᏏᎥᏍ ᎪᎩ ᎠᏟᎢᎵᏒ\x19ᎹᏌᏂ ᎠᏟᎢᎵᏒ6ᏧᏴᏢ ᏭᏕᎵᎬ ᎠᏂᏍᏆᏂ ᎠᏟᎢᎵᏒFᏧᏴᏢ ᏭᏕᎵᎬ ᎠᏂᏍᏆᏂ ᎠᏟ" + + "ᎶᏍᏗ ᎠᏟᎢᎵᏒJᏧᏴᏢ ᏭᏕᎵᎬ ᎠᏂᏍᏆᏂ ᎪᎯ ᎢᎦ ᎠᏟᎢᎵᏍᏒᎩ,ᎠᏂᏍᏆᏂ ᏭᏕᎵᎬ ᎠᏟᎢᎵᏒ<ᎠᏂᏍᏆᏂ ᏭᏕᎵᎬ ᎠᏟᎶ" + + "ᏍᏗ ᎠᏟᎢᎵᏒ@ᎠᏂᏍᏆᏂ ᏭᏕᎵᎬ ᎪᎯ ᎢᎦ ᎠᏟᎢᎵᏍᏒᎩ#ᎤᎳᏂ ᏆᏙᎸ ᎠᏟᎢᎵᏒ3ᎤᎳᏂ ᏆᏙᎸ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ*ᎤᎳ" + + "Ꮒ ᏆᏙᎸ ᎪᎩ ᎠᏟᎢᎵᏒ\x1cᎹᏍᎦᏫ ᎠᏟᎢᎵᏒ,ᎹᏍᎦᏫ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ#ᎹᏍᎦᏫ ᎪᎩ ᎠᏟᎢᎵᏒ\x1cᎹᏯᎹᎵ ᎠᏟ" + + "ᎢᎵᏒ\x16ᎾᎷ ᎠᏟᎢᎵᏒ\x19ᏁᏆᎵ ᎠᏟᎢᎵᏒ)ᎢᏤ ᎧᎵᏙᏂᎠᏂ ᎠᏟᎢᎵᏒ9ᎢᏤ ᎧᎵᏙᏂᎠᏂ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ0ᎢᏤ " + + "ᎧᎵᏙᏂᎠᏂ ᎪᎩ ᎠᏟᎢᎵᏒ&ᎢᏤ ᏏᎢᎴᏂᏗ ᎠᏟᎢᎵᏒ6ᎢᏤ ᏏᎢᎴᏂᏗ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ7ᎢᏤ ᏏᎢᎴᏂᏗ ᎪᎯ ᎢᎦ ᎠᏟᎢ" + + "ᎵᏒᎩ.ᎢᏤᎤᏂᏩᏛᏓᎦᏙᎯ ᎠᏟᎢᎵᏒ>ᎢᏤᎤᏂᏩᏛᏓᎦᏙᎯ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒBᎢᏤᎤᏂᏩᏛᏓᎦᏙᎯ ᎪᎯ ᎢᎦ ᎠᏟᎢᎵᏍᏒᎩ" + + "\x16ᏂᏳ ᎠᏟᎢᎵᏒ/ᏃᎵᏬᎵᎩ ᎤᎦᏚᏛᎢ ᎠᏟᎢᎵᏒ-ᏪᎾᏅᏙ Ꮥ ᏃᎶᎾᎭ ᎠᏟᎢᎵᏒ=ᏪᎾᏅᏙ Ꮥ ᏃᎶᎾᎭ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ" + + "4ᏪᎾᏅᏙ Ꮥ ᏃᎶᎾᎭ ᎪᎩ ᎠᏟᎢᎵᏒ\"ᏃᏬᏏᏈᏍᎧ ᎠᏟᎢᎵᏒ2ᏃᏬᏏᏈᏍᎧ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ)ᏃᏬᏏᏈᏍᎧ ᎪᎩ ᎠᏟᎢᎵᏒ" + + "\x1cᎣᎻᏍᎧ ᎠᏟᎢᎵᏒ,ᎣᎻᏍᎧ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ#ᎣᎻᏍᎧ ᎪᎩ ᎠᏟᎢᎵᏒ\x1fᏆᎩᏍᏖᏂ ᎠᏟᎢᎵᏒ/ᏆᎩᏍᏖᏂ ᎠᏟᎶᏍᏗ" + + " ᎠᏟᎢᎵᏒ&ᏆᎩᏍᏖᏂ ᎪᎩ ᎠᏟᎢᎵᏒ\x16ᏆᎷ ᎠᏟᎢᎵᏒ'ᏆᏇ ᎢᏤ ᎩᎢᏂ ᎠᏟᎢᎵᏒ\x19ᏆᎵᏇ ᎠᏟᎢᎵᏒ)ᏆᎵᏇ ᎠᏟᎶᏍᏗ" + + " ᎠᏟᎢᎵᏒ ᏆᎵᏇ ᎪᎩ ᎠᏟᎢᎵᏒ\x16ᏇᎷ ᎠᏟᎢᎵᏒ&ᏇᎷ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ\x1dᏇᎷ ᎪᎩ ᎠᏟᎢᎵᏒ\"ᎠᏂᏈᎵᎩᏃ ᎠᏟ" + + "ᎢᎵᏒ2ᎠᏂᏈᎵᎩᏃ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ)ᎠᏂᏈᎵᎩᏃ ᎪᎩ ᎠᏟᎢᎵᏒ2ᏧᎴᎯᏌᏅᎯ ᏚᎦᏚᏛᎢ ᎠᏟᎢᎵᏒ7ᎤᏓᏅᏘ ᏈᏰ ᎠᎴ Ꮋ" + + "ᏇᎶᏂ ᎠᏟᎢᎵᏒGᎤᏓᏅᏘ ᏈᏰ ᎠᎴ ᎻᏇᎶᏂ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒHᎤᏓᏅᏘ ᏈᏰ ᎠᎴ ᎻᏇᎶᏂ ᎪᎯ ᎢᎦ ᎠᏟᎢᎵᏒᎩ\x1c" + + "ᏈᎧᎵᏂ ᎠᏟᎢᎵᏒ\x19ᏉᎾᏇ ᎠᏟᎢᎵᏒ%ᏈᏯᏂᎩᏰᏂᎩ ᎠᏟᎢᎵᏒ\x1fᎴᏳᏂᎠᏂ ᎠᏟᎢᎵᏒ\x19ᎳᏞᎳ ᎠᏟᎢᎵᏒ\x1cᏌ" + + "ᎧᎵᏂ ᎠᏟᎢᎵᏒ,ᏌᎧᎵᏂ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ#ᏌᎧᎵᏂ ᎪᎩ ᎠᏟᎢᎵᏒ\x19ᏌᎼᎠ ᎠᏟᎢᎵᏒ)ᏌᎼᎠ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ*" + + "ᏌᎼᎠ ᎪᎯ ᎢᎦ ᎠᏟᎢᎵᏒᎩ\x1cᏎᏤᎴᏏ ᎠᏟᎢᎵᏒ/ᏏᏂᎦᏉᎵ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ,ᏐᎶᎹᏂ ᏚᎦᏚᏛᎢ ᎠᏟᎢᎵᏒ)ᏧᎦᎾᏮ" + + " ᏣᎠᏥᎢ ᎠᏟᎢᎵᏒ\x1cᏒᎵᎾᎻ ᎠᏟᎢᎵᏒ\x19ᏏᏲᏩ ᎠᏟᎢᎵᏒ\x19ᏔᎯᏘ ᎠᏟᎢᎵᏒ\x19ᏔᏱᏇ ᎠᏟᎢᎵᏒ)ᏔᏱᏇ ᎠᏟᎶ" + + "ᏍᏗ ᎠᏟᎢᎵᏒ*ᏔᏱᏇ ᎪᎯ ᎢᎦ ᎠᏟᎢᎵᏒᎩ\"ᏔᏥᎩᏍᏕᏂ ᎠᏟᎢᎵᏒ\x1cᏙᎨᎳᎤ ᎠᏟᎢᎵᏒ\x19ᏙᎾᎦ ᎠᏟᎢᎵᏒ)ᏙᎾᎦ" + + " ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ ᏙᎾᎦ ᎪᎩ ᎠᏟᎢᎵᏒ\x16ᏧᎩ ᎠᏟᎢᎵᏒ(ᏛᎵᎩᎺᏂᏍᏔᏂ ᎠᏟᎢᎵᏒ8ᏛᎵᎩᎺᏂᏍᏔᏂ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵ" + + "Ꮢ/ᏛᎵᎩᎺᏂᏍᏔᏂ ᎪᎩ ᎠᏟᎢᎵᏒ\x19ᏚᏩᎷ ᎠᏟᎢᎵᏒ\x19ᏳᎷᏇ ᎠᏟᎢᎵᏒ)ᏳᎷᏇ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ ᏳᎷᏇ ᎪᎩ Ꭰ" + + "ᏟᎢᎵᏒ%ᎤᏍᏇᎩᏍᏖᏂ ᎠᏟᎢᎵᏒ5ᎤᏍᏇᎩᏍᏖᏂ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ,ᎤᏍᏇᎩᏍᏖᏂ ᎪᎩ ᎠᏟᎢᎵᏒ\x1cᏩᏄᏩᏚ ᎠᏟᎢᎵᏒ," + + "ᏩᏄᏩᏚ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ#ᏩᏄᏩᏚ ᎪᎩ ᎠᏟᎢᎵᏒ\x1fᏪᏁᏑᏪᎳ ᎠᏟᎢᎵᏒ%ᏭᎳᏗᏬᏍᏙᎩ ᎠᏟᎢᎵᏒ5ᏭᎳᏗᏬᏍᏙᎩ ᎠᏟ" + + "ᎢᎵᏒ ᎠᏟᎢᎵᏒ,ᏭᎳᏗᏬᏍᏙᎩ ᎪᎩ ᎠᏟᎢᎵᏒ\x1fᏬᎶᎪᏝᏗ ᎠᏟᎢᎵᏒ/ᏬᎶᎪᏝᏗ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ&ᏬᎶᎪᏝᏗ ᎪᎩ Ꭰ" + + "ᏟᎢᎵᏒ\x1cᏬᏍᏙᎧ ᎠᏟᎢᎵᏒ)ᎤᏰᏨ ᎤᎦᏚᏛᎢ ᎠᏟᎢᎵᏒ*ᏩᎵᏍ ᎠᎴ ᏊᏚᎾ ᎠᏟᎢᎵᏒ\x1cᏯᎫᏥᎧ ᎠᏟᎢᎵᏒ,ᏯᎫᏥᎧ" + + " ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ#ᏯᎫᏥᎧ ᎪᎩ ᎠᏟᎢᎵᏒ%ᏰᎧᏖᎵᏂᏊᎦ ᎠᏟᎢᎵᏒ5ᏰᎧᏖᎵᏂᏊᎦ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ,ᏰᎧᏖᎵᏂᏊᎦ ᎪᎩ " + + "ᎠᏟᎢᎵᏒ\x03OKT" + +var bucket20 string = "" + // Size: 14148 bytes + "\x10یەکشەممە\x10دووشەممە\x0eسێشەممە\x12چوارشەممە\x12پێنجشەممە\x0aھەینی" + + "\x0aشەممە\x02ی\x02د\x02س\x02چ\x02پ\x02ھ\x02ش\x17چارەکی یەکەم\x17چارەکی د" + + "ووەم\x15چارەکی سێەم\x19چارەکی چوارەم\x05ب.ن\x05د.ن\x0edی MMMMی y G\x19ک" + + "انوونی دووەم\x0aشوبات\x0aئازار\x0aنیسان\x0aئایار\x10حوزەیران\x0cتەمووز" + + "\x06ئاب\x0eئەیلوول\x17تشرینی یەکەم\x17تشرینی دووەم\x17کانونی یەکەم\x02ک" + + "\x02ئ\x02ن\x02ح\x02ت\x04١ش\x04٢ش\x04٣ش\x04٤ش\x04٥ش\x04چ١\x04چ٢\x04چ٣\x04" + + "چ٤\x11پێش زایین\x0cزایینی\x05پ.ن\x02ز\x0cdی MMMMی y\x10خاکەلێوە\x0eبانە" + + "مەڕ\x10جۆزەردان\x0eپووشپەڕ\x0eگەلاوێژ\x10خەرمانان\x0cڕەزبەر\x10خەزەڵوەر" + + "\x10سەرماوەز\x12بەفرانبار\x10ڕێبەندان\x0cرەشەمێ\x06ساڵ\x08مانگ\x0aھەفتە" + + "\x06ڕۆژ\x13ڕۆژی ھەفتە\x0eکاتژمێر\x0aخولەک\x08چرکە\x10EEEE d. MMMM y G" + + "\x0bd. MMMM y G\x09d. M. y G\x0edd.MM.yy GGGGG\x0dEEEE, d. M. y\x07d. M." + + " y\x04tout\x04baba\x06hatour\x05kiahk\x05touba\x06amshir\x08baramhat\x09" + + "baramouda\x07bashans\x09ba’ouna\x04abib\x05mesra\x05nasie\x0ePrvní měsíc" + + "\x0eDruhý měsíc\x0fTřetí měsíc\x10Čtvrtý měsíc\x0ePátý měsíc\x0fŠestý mě" + + "síc\x0eSedmý měsíc\x0dOsmý měsíc\x10Devátý měsíc\x10Desátý měsíc\x13Jede" + + "náctý měsíc\x12Dvanáctý měsíc\x05Krysa\x05Buvol\x04Tygr\x06Zajíc\x04Drak" + + "\x03Had\x05Kůň\x04Koza\x05Opice\x06Kohout\x03Pes\x05Vepř\x08meskerem\x07" + + "tikemet\x05hidar\x07tahesas\x03tir\x07yekatit\x07megabit\x06miyaza\x06gi" + + "nbot\x04sene\x05hamle\x06nehase\x06pagume\x03led\x04úno\x04bře\x03dub" + + "\x04kvě\x04čvn\x04čvc\x03srp\x05zář\x05říj\x03lis\x03pro\x05ledna\x06úno" + + "ra\x07března\x05dubna\x07května\x07června\x09července\x05srpna\x07září" + + "\x07října\x09listopadu\x08prosince\x05leden\x05únor\x07březen\x05duben" + + "\x07květen\x07červen\x09červenec\x05srpen\x07říjen\x08listopad\x08prosin" + + "ec\x02ne\x02po\x03út\x02st\x03čt\x03pá\x02so\x07neděle\x09pondělí\x07úte" + + "rý\x07středa\x08čtvrtek\x06pátek\x06sobota\x0e1. čtvrtletí\x0e2. čtvrtle" + + "tí\x0e3. čtvrtletí\x0e4. čtvrtletí\x06půln.\x04dop.\x04pol.\x04odp.\x02r" + + ".\x05več.\x04v n.\x05půl.\x02o.\x02v.\x02n.\x07půlnoc\x07poledne\x05ráno" + + "\x09dopoledne\x09odpoledne\x06večer\x06v noci\x03noc\x19před naším letop" + + "očtem\x0apř. n. l.\x12našeho letopočtu\x05n. l.\x08př.n.l.\x04n.l.\x0eEE" + + "EE d. MMMM y\x09d. MMMM y\x06tišri\x08chešvan\x06kislev\x05tevet\x06ševa" + + "t\x06adar I\x04adar\x07adar II\x05nisan\x04ijar\x05sivan\x05tamuz\x02av" + + "\x04elul\x07čaitra\x09vaišákh\x0adžjéšth\x08ášádh\x09šrávana\x0abhádrapa" + + "d\x07ášvin\x07kártik\x0aagrahajana\x05pauš\x05mágh\x08phálgun\x05Šaka" + + "\x08muharrem\x05safar\x11rebí’u l-awwal\x12rebí’u s-sání\x13džumádá al-ú" + + "lá\x15džumádá al-áchira\x07redžeb\x0aša’bán\x08ramadán\x07šawwal\x0dzú l" + + "-ka’da\x0fzú l-hidždža\x11EEEE, d. MMMM y G\x09farvardin\x0bordibehešt" + + "\x08chordád\x04tír\x07mordád\x0ašahrívar\x04mehr\x06ábán\x05ázar\x03dei" + + "\x06bahman\x06esfand\x09před ROC\x03ROC\x0aletopočet\x06letop.\x04let." + + "\x03rok\x0bminulý rok\x09tento rok\x0epříští rok\x0aza {0} rok\x0bza {0}" + + " roky\x0bza {0} roku\x0aza {0} let\x0fpřed {0} rokem\x0epřed {0} lety" + + "\x0epřed {0} roku\x09za {0} r.\x09za {0} l.\x0cpřed {0} r.\x0cpřed {0} l" + + ".\x0bčtvrtletí\x13minulé čtvrtletí\x10toto čtvrtletí\x16příští čtvrtletí" + + "\x12za {0} čtvrtletí\x16před {0} čtvrtletím\x17před {0} čtvrtletími\x15p" + + "řed {0} čtvrtletí\x01Q\x07měsíc\x0fminulý měsíc\x0dtento měsíc\x12příšt" + + "í měsíc\x0eza {0} měsíc\x0fza {0} měsíce\x10za {0} měsíců\x13před {0} m" + + "ěsícem\x12před {0} měsíci\x12před {0} měsíce\x05měs.\x0dminulý měs.\x0b" + + "tento měs.\x10příští měs.\x0cza {0} měs.\x0fpřed {0} měs.\x0cminuý měs." + + "\x06týden\x0eminulý týden\x0ctento týden\x11příští týden\x0dza {0} týden" + + "\x0dza {0} týdny\x0dza {0} týdne\x0eza {0} týdnů\x11před {0} týdnem\x10p" + + "řed {0} týdny\x10před {0} týdne\x0cv týdnu {0}\x05týd.\x0dminulý týd." + + "\x0btento týd.\x10příští týd.\x0cza {0} týd.\x0fpřed {0} týd.\x0bv týd. " + + "{0}\x11týden v měsíci\x0atýd. v m.\x03den\x0epředevčírem\x06včera\x04dne" + + "s\x06zítra\x0apozítří\x0aza {0} den\x0aza {0} dny\x0aza {0} dne\x0bza {0" + + "} dní\x0epřed {0} dnem\x0dpřed {0} dny\x0dpřed {0} dne\x0aden v roce\x08" + + "den v r.\x07d. v r.\x0cden v týdnu\x0bden v týd.\x0ad. v týd.\x15den týd" + + "ne v měsíci\x11den týd. v měs.\x10d. týd. v měs.\x0fminulou neděli\x0ctu" + + "to neděli\x12příští neděli\x0eza {0} neděli\x0eza {0} neděle\x0fza {0} n" + + "edělí\x12před {0} nedělí\x13před {0} nedělemi\x11před {0} neděle\x11minu" + + "lé pondělí\x0etoto pondělí\x14příští pondělí\x10za {0} pondělí\x14před {" + + "0} pondělím\x15před {0} pondělími\x13před {0} pondělí\x0fminulé úterý" + + "\x0ctoto úterý\x12příští úterý\x0eza {0} úterý\x12před {0} úterým\x13pře" + + "d {0} úterými\x11před {0} úterý\x0fminulou středu\x0ctuto středu\x12příš" + + "tí středu\x0eza {0} středu\x0eza {0} středy\x0dza {0} střed\x12před {0} " + + "středou\x13před {0} středami\x11před {0} středy\x10minulý čtvrtek\x0eten" + + "to čtvrtek\x13příští čtvrtek\x0fza {0} čtvrtek\x0fza {0} čtvrtky\x0fza {" + + "0} čtvrtku\x10za {0} čtvrtků\x13před {0} čtvrtkem\x12před {0} čtvrtky" + + "\x12před {0} čtvrtku\x0eminulý pátek\x0ctento pátek\x11příští pátek\x0dz" + + "a {0} pátek\x0dza {0} pátky\x0dza {0} pátku\x0eza {0} pátků\x11před {0} " + + "pátkem\x10před {0} pátky\x10před {0} pátku\x0eminulou sobotu\x0btuto sob" + + "otu\x11příští sobotu\x0dza {0} sobotu\x0dza {0} soboty\x0cza {0} sobot" + + "\x11před {0} sobotou\x12před {0} sobotami\x10před {0} soboty\x0ačást dne" + + "\x09část d.\x06hodina\x0btuto hodinu\x0dza {0} hodinu\x0dza {0} hodiny" + + "\x0cza {0} hodin\x11před {0} hodinou\x12před {0} hodinami\x10před {0} ho" + + "diny\x08za {0} h\x0bpřed {0} h\x0btuto minutu\x11před {0} minutou\x12pře" + + "d {0} minutami\x10před {0} minuty\x0aza {0} min\x0dpřed {0} min\x05nyní" + + "\x12před {0} sekundou\x13před {0} sekundami\x11před {0} sekundy\x08za {0" + + "} s\x0bpřed {0} s\x0fčasové pásmo\x0cčas. pásmo\x06pásmo\x0b+H:mm;-H:mm" + + "\x06GMT{0}\x03GMT\x13Časové pásmo {0}\x08{0} (+1)\x08{0} (+0)\x1cKoordin" + + "ovaný světový čas\x14Britský letní čas\x12Irský letní čas\x0eAcrejský ča" + + "s\x1aAcrejský standardní čas\x15Acrejský letní čas\x10Afghánský čas\x14S" + + "tředoafrický čas\x15Východoafrický čas\x11Jihoafrický čas\x14Západoafric" + + "ký čas Západoafrický standardní čas\x1bZápadoafrický letní čas\x0fAljašs" + + "ký čas\x1bAljašský standardní čas\x16Aljašský letní čas\x0eAlmatský čas" + + "\x1aAlmatský standardní čas\x15Almatský letní čas\x0fAmazonský čas\x1bAm" + + "azonský standardní čas\x16Amazonský letní čas Severoamerický centrální č" + + "as,Severoamerický centrální standardní čas'Severoamerický centrální letn" + + "í čas\x1fSeveroamerický východní čas+Severoamerický východní standardní" + + " čas&Severoamerický východní letní čas\x1cSeveroamerický horský čas(Seve" + + "roamerický horský standardní čas#Severoamerický horský letní čas\x1fSeve" + + "roamerický pacifický čas+Severoamerický pacifický standardní čas&Severoa" + + "merický pacifický letní čas\x0fAnadyrský čas\x1bAnadyrský standardní čas" + + "\x16Anadyrský letní čas\x0dApijský čas\x19Apijský standardní čas\x14Apij" + + "ský letní čas\x0eAktauský čas\x1aAktauský standardní čas\x15Aktauský let" + + "ní čas\x0eAktobský čas\x1aAktobský standardní čas\x15Aktobský letní čas" + + "\x0dArabský čas\x19Arabský standardní čas\x14Arabský letní čas\x11Argent" + + "inský čas\x1dArgentinský standardní čas\x18Argentinský letní čas\x18Zápa" + + "doargentinský čas$Západoargentinský standardní čas\x1fZápadoargentinský " + + "letní čas\x0fArménský čas\x1bArménský standardní čas\x16Arménský letní č" + + "as\x10Atlantický čas\x1cAtlantický standardní čas\x17Atlantický letní ča" + + "s\x17Středoaustralský čas#Středoaustralský standardní čas\x1eStředoaustr" + + "alský letní čas!Středozápadní australský čas-Středozápadní australský st" + + "andardní čas(Středozápadní australský letní čas\x18Východoaustralský čas" + + "$Východoaustralský standardní čas\x1fVýchodoaustralský letní čas\x17Zápa" + + "doaustralský čas#Západoaustralský standardní čas\x1eZápadoaustralský let" + + "ní čas\x18Ázerbájdžánský čas$Ázerbájdžánský standardní čas\x1fÁzerbájdžá" + + "nský letní čas\x0dAzorský čas\x19Azorský standardní čas\x14Azorský letní" + + " čas\x14Bangladéšský čas Bangladéšský standardní čas\x1bBangladéšský let" + + "ní čas\x11Bhútánský čas\x10Bolivijský čas\x11Brasilijský čas\x1dBrasilij" + + "ský standardní čas\x18Brasilijský letní čas\x0fBrunejský čas\x10Kapverds" + + "ký čas\x1cKapverdský standardní čas\x17Kapverdský letní čas\x14Čas Casey" + + "ho stanice\x10Chamorrský čas\x10Chathamský čas\x1cChathamský standardní " + + "čas\x17Chathamský letní čas\x0dChilský čas\x19Chilský standardní čas" + + "\x14Chilský letní čas\x0eČínský čas\x1aČínský standardní čas\x15Čínský l" + + "etní čas\x13Čojbalsanský čas\x1fČojbalsanský standardní čas\x1aČojbalsan" + + "ský letní čas\x19Čas Vánočního ostrova\x19Čas Kokosových ostrovů\x11Kolu" + + "mbijský čas\x1dKolumbijský standardní čas\x18Kolumbijský letní čas\x18Ča" + + "s Cookových ostrovů$Standardní čas Cookových ostrovů\x1fLetní čas Cookov" + + "ých ostrovů\x0fKubánský čas\x1bKubánský standardní čas\x16Kubánský letn" + + "í čas\x15Čas Davisovy stanice Čas stanice Dumonta d’Urvilla\x16Východot" + + "imorský čas\x1cČas Velikonočního ostrova(Standardní čas Velikonočního os" + + "trova#Letní čas Velikonočního ostrova\x11Ekvádorský čas\x15Středoevropsk" + + "ý čas!Středoevropský standardní čas\x1cStředoevropský letní čas\x16Vých" + + "odoevropský čas\"Východoevropský standardní čas\x1dVýchodoevropský letní" + + " čas\x1dDálněvýchodoevropský čas\x15Západoevropský čas!Západoevropský st" + + "andardní čas\x1cZápadoevropský letní čas\x11Falklandský čas\x1dFalklands" + + "ký standardní čas\x18Falklandský letní čas\x10Fidžijský čas\x1cFidžijský" + + " standardní čas\x17Fidžijský letní čas\x19Francouzskoguyanský čas6Čas Fr" + + "ancouzských jižních a antarktických území\x12Galapážský čas\x10Gambiersk" + + "ý čas\x10Gruzínský čas\x1cGruzínský standardní čas\x17Gruzínský letní č" + + "as\x1bČas Gilbertových ostrovů\x1cGreenwichský střední čas\x16Východogró" + + "nský čas\"Východogrónský standardní čas\x1dVýchodogrónský letní čas\x15Z" + + "ápadogrónský čas!Západogrónský standardní čas\x1cZápadogrónský letní ča" + + "s\x0dGuamský čas\"Standardní čas Perského zálivu\x0eGuyanský čas\x17Hava" + + "jsko-aleutský čas#Havajsko-aleutský standardní čas\x1eHavajsko-aleutský " + + "letní čas\x11Hongkongský čas\x1dHongkongský standardní čas\x18Hongkongsk" + + "ý letní čas\x0dHovdský čas\x19Hovdský standardní čas\x14Hovdský letní č" + + "as\x0dIndický čas\x16Indickooceánský čas\x12Indočínský čas\x17Středoindo" + + "néský čas\x18Východoindonéský čas\x17Západoindonéský čas\x0fÍránský čas" + + "\x1bÍránský standardní čas\x16Íránský letní čas\x0eIrkutský čas\x1aIrkut" + + "ský standardní čas\x15Irkutský letní čas\x0fIzraelský čas\x1bIzraelský s" + + "tandardní čas\x16Izraelský letní čas\x0eJaponský čas\x1aJaponský standar" + + "dní čas\x15Japonský letní čas\x1fPetropavlovsko-kamčatský čas+Petropavlo" + + "vsko-kamčatský standardní čas&Petropavlovsko-kamčatský letní čas\x1cVých" + + "odokazachstánský čas\x1bZápadokazachstánský čas\x0eKorejský čas\x1aKorej" + + "ský standardní čas\x15Korejský letní čas\x0fKosrajský čas\x12Krasnojarsk" + + "ý čas\x1eKrasnojarský standardní čas\x19Krasnojarský letní čas\x0fKyrgy" + + "zský čas\x10Srílanský čas\x1bČas Rovníkových ostrovů\x17Čas ostrova lord" + + "a Howa#Standardní čas ostrova lorda Howa\x1eLetní čas ostrova lorda Howa" + + "\x0eMacajský čas\x1aMacajský standardní čas\x15Macajský letní čas\x16Čas" + + " ostrova Macquarie\x10Magadanský čas\x1cMagadanský standardní čas\x17Mag" + + "adanský letní čas\x0eMalajský čas\x10Maledivský čas\x10Markézský čas\x1c" + + "Čas Marshallových ostrovů\x11Mauricijský čas\x1dMauricijský standardní " + + "čas\x18Mauricijský letní čas\x16Čas Mawsonovy stanice\x1dSeverozápadní " + + "mexický čas)Severozápadní mexický standardní čas$Severozápadní mexický l" + + "etní čas\x18Mexický pacifický čas$Mexický pacifický standardní čas\x1fMe" + + "xický pacifický letní čas\x14Ulánbátarský čas Ulánbátarský standardní ča" + + "s\x1bUlánbátarský letní čas\x0fMoskevský čas\x1bMoskevský standardní čas" + + "\x16Moskevský letní čas\x10Myanmarský čas\x0dNaurský čas\x0fNepálský čas" + + "\x14Novokaledonský čas Novokaledonský standardní čas\x1bNovokaledonský l" + + "etní čas\x14Novozélandský čas Novozélandský standardní čas\x1bNovozéland" + + "ský letní čas\x15Newfoundlandský čas!Newfoundlandský standardní čas\x1cN" + + "ewfoundlandský letní čas\x0eNiuejský čas\x0fNorfolský čas$Čas souostroví" + + " Fernando de Noronha0Standardní čas souostroví Fernando de Noronha+Letní" + + " čas souostroví Fernando de Noronha\x16Severomariánský čas\x12Novosibirs" + + "ký čas\x1eNovosibirský standardní čas\x19Novosibirský letní čas\x0bOmský" + + " čas\x17Omský standardní čas\x12Omský letní čas\x13Pákistánský čas\x1fPá" + + "kistánský standardní čas\x1aPákistánský letní čas\x0ePalauský čas\x17Čas" + + " Papuy-Nové Guiney\x11Paraguayský čas\x1dParaguayský standardní čas\x18P" + + "araguayský letní čas\x10Peruánský čas\x1cPeruánský standardní čas\x17Per" + + "uánský letní čas\x11Filipínský čas\x1dFilipínský standardní čas\x18Filip" + + "ínský letní čas\x1aČas Fénixových ostrovů\x18Pierre-miquelonský čas$Pie" + + "rre-miquelonský standardní čas\x1fPierre-miquelonský letní čas\x18Čas Pi" + + "tcairnova ostrova\x0ePonapský čas\x14Pchjongjangský čas\x11Kyzylordský č" + + "as\x1dKyzylordský standardní čas\x18Kyzylordský letní čas\x11Réunionský " + + "čas\x16Čas Rotherovy stanice\x11Sachalinský čas\x1dSachalinský standard" + + "ní čas\x18Sachalinský letní čas\x0eSamarský čas\x1aSamarský standardní č" + + "as\x15Samarský letní čas\x0eSamojský čas\x1aSamojský standardní čas\x15S" + + "amojský letní čas\x10Seychelský čas\x11Singapurský čas\x1dČas Šalamounov" + + "ých ostrovů\x14Čas Jižní Georgie\x10Surinamský čas\x13Čas stanice Šówa" + + "\x0eTahitský čas\x11Tchajpejský čas\x1dTchajpejský standardní čas\x18Tch" + + "ajpejský letní čas\x10Tádžický čas\x10Tokelauský čas\x0eTonžský čas\x1aT" + + "onžský standardní čas\x15Tonžský letní čas\x0eChuukský čas\x10Turkmenský" + + " čas\x1cTurkmenský standardní čas\x17Turkmenský letní čas\x0eTuvalský ča" + + "s\x10Uruguayský čas\x1cUruguayský standardní čas\x17Uruguayský letní čas" + + "\x0dUzbecký čas\x19Uzbecký standardní čas\x14Uzbecký letní čas\x0fVanuat" + + "ský čas\x1bVanuatský standardní čas\x16Vanuatský letní čas\x11Venezuelsk" + + "ý čas\x13Vladivostocký čas\x1fVladivostocký standardní čas\x1aVladivost" + + "ocký letní čas\x12Volgogradský čas\x1eVolgogradský standardní čas\x19Vol" + + "gogradský letní čas\x13Čas stanice Vostok\x11Čas ostrova Wake\x1dČas ost" + + "rovů Wallis a Futuna\x0eJakutský čas\x1aJakutský standardní čas\x15Jakut" + + "ský letní čas\x16Jekatěrinburský čas\"Jekatěrinburský standardní čas\x1d" + + "Jekatěrinburský letní čas\x06tekemt\x05hedar\x06tahsas\x03ter\x06miazia" + + "\x06genbot\x07nehasse\x07pagumen\x0bordibehesht\x07khordad\x03tir\x06mor" + + "dad\x09shahrivar\x04aban\x04azar\x03dey\x05hator\x04toba\x06amshir\x08ba" + + "ramhat\x07bashans\x05paona\x04epep\x02د\x02س\x02ج\x02ج\x02ش\x02ط\x02ش" + + "\x02آ\x02و\x02ن\x02ا\x02ث\x02ج\x02س\x02ا\x02م\x02ع\x02ق\x02د\x09šahrivar" + + "\x05bâb.\x05hât.\x04kya.\x05toub.\x05amsh.\x06barma.\x06barmo.\x05bash." + + "\x07ba’o.\x05abî.\x04mis.\x05al-n.\x06bâbâ\x07hâtour\x05kyahk\x06toubah" + + "\x07amshîr\x09barmahât\x09barmoudah\x0aba’ounah\x05abîb\x05misra\x07al-n" + + "asi\x08khordâd\x03tir\x07mordâd\x04mehr\x06âbân\x05âzar\x03dey\x03tir" + + "\x04mehr\x06âbân\x05âzar\x03dey\x04toba\x05hedar\x03ter\x02ف\x02ن\x02ژ" + + "\x02ب\x08hešvans\x08kisļevs\x06tevets\x07ševats\x081. adars\x05adars\x08" + + "2. adars\x06nisans\x05ijars\x06sivans\x06tamuzs\x03avs\x05eluls\x04baba" + + "\x03ter\x0bza {0} lata\x0aza {0} lat\x02م\x06taqemt\x03ter\x04abib\x07ta" + + "hesas\x02ut\x02st\x03št\x02pi\x02so\x06kislev\x05tevet\x06adar I\x04adar" + + "\x07adar II\x05nisan\x05sivan\x05tamuz\x02av\x04elul\x0bbudúci rok\x02sr" + + "\x03če\x02pe\x02su\x05misra\x08khordād\x07mordād\x06ābān\x05āzar" + +var bucket21 string = "" + // Size: 14023 bytes + "\x0bі҆аⷩ҇\x09феⷡ҇\x09маⷬ҇\x0bа҆пⷬ҇\x07маꙵ\x0cі҆ꙋⷩ҇\x0cі҆ꙋⷧ҇\x0dа҆́ѵⷢ҇" + + "\x09сеⷫ҇\x09ѻ҆кⷮ\x09ноеⷨ\x09деⷦ҇\x04І҆\x02Ф\x02М\x04А҆\x02С\x04Ѻ҆\x02Н" + + "\x02Д\x17і҆аннꙋа́рїа\x15феврꙋа́рїа\x0cма́рта\x14а҆прі́ллїа\x0aма́їа\x0fі" + + "҆ꙋ́нїа\x0fі҆ꙋ́лїа\x13а҆́ѵгꙋста\x16септе́мврїа\x14ѻ҆ктѡ́врїа\x12ное́мврї" + + "а\x14деке́мврїа\x17і҆аннꙋа́рїй\x15феврꙋа́рїй\x0cма́ртъ\x14а҆прі́ллїй" + + "\x0aма́їй\x0fі҆ꙋ́нїй\x0fі҆ꙋ́лїй\x13а҆́ѵгꙋстъ\x16септе́мврїй\x14ѻ҆ктѡ́врї" + + "й\x12ное́мврїй\x14деке́мврїй\x0bндⷧ҇ѧ\x09пнⷣе\x0bвтоⷬ҇\x09срⷣе\x09чеⷦ҇" + + "\x09пѧⷦ҇\x0aсꙋⷠ҇\x02П\x02В\x02Ч\x0eнедѣ́лѧ\x1aпонедѣ́льникъ\x12вто́рникъ" + + "\x0cсреда̀\x16четверто́къ\x0eпѧто́къ\x11сꙋббѡ́та\x1aа҃_ѧ че́тверть\x1aв҃" + + "_ѧ че́тверть\x1aг҃_ѧ че́тверть\x1aд҃_ѧ че́тверть\x04а҃\x04в҃\x04г҃\x04д҃" + + "\x04ДП\x04ПП\x15пре́дъ р.\u00a0х.\x0dпо р.\u00a0х.\x14пре́дъ р. х.\x0aѿ " + + "р. х.\x0bѿ р.\u00a0х.\x15EEEE, d MMMM 'л'. y.\x07y.MM.dd\x0aвѣ́къ\x0aлѣ" + + "́то\x03л.\x12че́тверть\x09чеⷡ҇\x0eмѣ́сѧцъ\x0bмцⷭ҇ъ\x10седми́ца\x07сеⷣ" + + "\x0aде́нь\x0cвчера̀\x0cдне́сь\x11наꙋ́трїе\x09деⷩ҇\x1bде́нь седми́цы\x09Д" + + "П/ПП\x0aча́съ\x09чаⷭ҇\x0fминꙋ́та\x09миⷩ҇\x11секꙋ́нда\x09сеⷦ҇\x1fпо́ѧсъ " + + "часовѡ́мъ\x12{0} (вре́мѧ)!{0} (лѣ́тнее вре́мѧ)!{0} (зи́мнее вре́мѧ)Hвсе" + + "мі́рное сѷгхронїзи́рованное вре́мѧ3среднеамерїка́нское вре́мѧBсреднеаме" + + "рїка́нское зи́мнее вре́мѧBсреднеамерїка́нское лѣ́тнее вре́мѧ7восточноам" + + "ерїка́нское вре́мѧFвосточноамерїка́нское зи́мнее вре́мѧFвосточноамерїка" + + "́нское лѣ́тнее вре́мѧ<а҆мерїка́нское наго́рнее вре́мѧKа҆мерїка́нское на" + + "го́рнее зи́мнее вре́мѧKа҆мерїка́нское наго́рнее лѣ́тнее вре́мѧ)тихоѻкеа" + + "́нское вре́мѧ8тихоѻкеа́нское зи́мнее вре́мѧ8тихоѻкеа́нское лѣ́тнее вре́" + + "мѧ+а҆тланті́ческое вре́мѧ:а҆тланті́ческое зи́мнее вре́мѧ:а҆тланті́ческо" + + "е лѣ́тнее вре́мѧ1среднеєѵрѡпе́йское вре́мѧ@среднеєѵрѡпе́йское зи́мнее в" + + "ре́мѧ@среднеєѵрѡпе́йское лѣ́тнее вре́мѧ5восточноєѵрѡпе́йское вре́мѧDвос" + + "точноєѵрѡпе́йское зи́мнее вре́мѧDвосточноєѵрѡпе́йское лѣ́тнее вре́мѧ@вр" + + "е́мѧ въ калинингра́дѣ и҆ ми́нскѣ3западноєѵрѡпе́йское вре́мѧBзападноєѵрѡ" + + "пе́йское зи́мнее вре́мѧBзападноєѵрѡпе́йское лѣ́тнее вре́мѧ7сре́днее вре" + + "́мѧ по грі́нꙋичꙋ$и҆ркꙋ́тское вре́мѧ3и҆ркꙋ́тское зи́мнее вре́мѧ3и҆ркꙋ́тс" + + "кое лѣ́тнее вре́мѧ+восто́чный казахста́нъ)за́падный казахста́нъ'красноѧ" + + "́рское вре́мѧ6красноѧ́рское зи́мнее вре́мѧ6красноѧ́рское лѣ́тнее вре́мѧ" + + "\x12кирги́зїа%магада́нское вре́мѧ4магада́нское зи́мнее вре́мѧ4магада́нск" + + "ое лѣ́тнее вре́мѧ#моско́вское вре́мѧ2моско́вское зи́мнее вре́мѧ2моско́в" + + "ское лѣ́тнее вре́мѧ)новосиби́рское вре́мѧ8новосиби́рское зи́мнее вре́мѧ" + + "8новосиби́рское лѣ́тнее вре́мѧ\x1dѻ҆́мское вре́мѧ,ѻ҆́мское зи́мнее вре́м" + + "ѧ,ѻ҆́мское лѣ́тнее вре́мѧ$вре́мѧ на сахали́нѣ3зи́мнее вре́мѧ на сахали́" + + "нѣ3лѣ́тнее вре́мѧ на сахали́нѣ+владивосто́цкое вре́мѧ:владивосто́цкое з" + + "и́мнее вре́мѧ:владивосто́цкое лѣ́тнее вре́мѧ)волгогра́дское вре́мѧ8волг" + + "огра́дское зи́мнее вре́мѧ8волгогра́дское лѣ́тнее вре́мѧ#ꙗ҆кꙋ́тское вре́" + + "мѧ2ꙗ҆кꙋ́тское зи́мнее вре́мѧ2ꙗ҆кꙋ́тское лѣ́тнее вре́мѧ2є҆катерїнбꙋ́ржск" + + "ое вре́мѧAє҆катерїнбꙋ́ржское зи́мнее вре́мѧAє҆катерїнбꙋ́ржское лѣ́тнее " + + "вре́мѧ\x0c{1} 'am' {0}\x03Ion\x05Chwef\x03Maw\x06Ebrill\x03Mai\x03Meh" + + "\x05Gorff\x04Awst\x04Medi\x03Hyd\x04Tach\x04Rhag\x06Ionawr\x08Chwefror" + + "\x06Mawrth\x07Mehefin\x0aGorffennaf\x06Hydref\x08Tachwedd\x07Rhagfyr\x03" + + "Chw\x03Ebr\x03Gor\x08Dydd Sul\x09Dydd Llun\x0bDydd Mawrth\x0cDydd Merche" + + "r\x08Dydd Iau\x0bDydd Gwener\x0bDydd Sadwrn\x03Ch1\x03Ch2\x03Ch3\x03Ch4" + + "\x0cchwarter 1af\x0c2il chwarter\x0d3ydd chwarter\x0d4ydd chwarter\x02yb" + + "\x02yh\x09canol nos\x0acanol dydd\x06y bore\x0ay prynhawn\x07yr hwyr\x09" + + "Cyn Crist\x14Cyn Cyfnod Cyffredin\x09Oed Crist\x10Cyfnod Cyffredin\x02CC" + + "\x03CCC\x02OC\x04CYCY\x01C\x01O\x08dd/MM/yy\x03oes\x08blwyddyn\x07llyned" + + "d\x05eleni\x0eblwyddyn nesaf\x11ymhen {0} mlynedd\x0eymhen blwyddyn\x11y" + + "mhen {0} flynedd\x11ymhen {0} blynedd\x18{0} o flynyddoedd yn ôl\x0fblwy" + + "ddyn yn ôl\x12{0} flynedd yn ôl\x12{0} blynedd yn ôl\x08chwarter\x0dchwa" + + "rter olaf\x0cchwarter hwn\x0echwarter nesaf\x12ymhen {0} chwarter\x16{0}" + + " o chwarteri yn ôl\x13{0} chwarter yn ôl\x04chw.\x03mis\x0cmis diwethaf" + + "\x09y mis hwn\x09mis nesaf\x0dymhen {0} mis\x09ymhen mis\x0cymhen deufis" + + "\x0e{0} mis yn ôl\x0e{0} fis yn ôl\x0ddeufis yn ôl\x07wythnos\x11wythnos" + + " ddiwethaf\x0eyr wythnos hon\x0dwythnos nesaf\x11ymhen {0} wythnos\x0dym" + + "hen wythnos\x0fymhen pythefnos\x12{0} wythnos yn ôl\x0bwythnos {0}\x10py" + + "thefnos yn ôl\x15rhif wythnos yn y mis\x0dwythnos y mis\x07diwrnod\x06ec" + + "hdoe\x04ddoe\x06heddiw\x05yfory\x08drennydd\x11ymhen {0} diwrnod\x0dymhe" + + "n diwrnod\x0eymhen deuddydd\x12{0} diwrnod yn ôl\x13{0} ddiwrnod yn ôl" + + "\x19rhif y dydd yn y flwyddyn\x14rhif y dydd yn y fl.\x0adydd y fl.\x15d" + + "iwrnod o’r wythnos\x10diwrnod yn y mis\x11dydd Sul diwethaf\x0cdydd Sul " + + "yma\x0edydd Sul nesaf\x12ymhen {0} Dydd Sul\x13{0} Dydd Sul yn ôl\x0cSul" + + " diwethaf\x07Sul yma\x09Sul nesaf\x12dydd Llun diwethaf\x0ddydd Llun yma" + + "\x0fdydd Llun nesaf\x13ymhen {0} Dydd Llun\x14{0} dydd Llun yn ôl\x0dLlu" + + "n diwethaf\x08Llun yma\x0aLlun nesaf\x14dydd Mawrth diwethaf\x0fdydd Maw" + + "rth yma\x11dydd Mawrth nesaf\x15ymhen {0} dydd Mawrth\x16{0} dydd Mawrth" + + " yn ôl\x0fMawrth diwethaf\x0aMawrth yma\x0cMawrth nesaf\x15dydd Mercher " + + "diwethaf\x10dydd Mercher yma\x12dydd Mercher nesaf\x16ymhen {0} dydd Mer" + + "cher\x17{0} dydd Mercher yn ôl\x10Mercher diwethaf\x0bMercher yma\x0dMer" + + "cher nesaf\x11dydd Iau diwethaf\x0cdydd Iau yma\x0edydd Iau nesaf\x12ymh" + + "en {0} dydd Iau\x13{0} dydd Iau yn ôl\x0cIau diwethaf\x07Iau yma\x09Iau " + + "nesaf\x14dydd Gwener diwethaf\x0fdydd Gwener yma\x11dydd Gwener nesaf" + + "\x15ymhen {0} dydd Gwener\x16{0} dydd Gwener yn ôl\x0fGwener diwethaf" + + "\x0aGwener yma\x0cGwener nesaf\x14dydd Sadwrn diwethaf\x0fdydd Sadwrn ym" + + "a\x11dydd Sadwrn nesaf\x15ymhen {0} dydd Sadwrn\x16{0} dydd Sadwrn yn ôl" + + "\x0fSadwrn diwethaf\x0aSadwrn yma\x0cSadwrn nesaf\x03awr\x0ayr awr hon" + + "\x0dymhen {0} awr\x09ymhen awr\x0e{0} awr yn ôl\x0aawr yn ôl\x05munud" + + "\x0by funud hon\x0fymhen {0} munud\x10{0} munud yn ôl\x04mun.\x0eymhen {" + + "0} mun.\x0eymhen {0} fun.\x0f{0} fun. yn ôl\x0f{0} mun. yn ôl\x06eiliad" + + "\x04nawr\x10ymhen {0} eiliad\x11{0} eiliad yn ôl\x0dcylchfa amser\x07cyl" + + "chfa\x09Amser {0}\x0dAmser Haf {0}\x11Amser Safonol {0}\x1aAmser Cyffred" + + "niol Cydlynol\x11Amser Haf Prydain\x16Amser Safonol Iwerddon\x11Amser Af" + + "ghanistan\x18Amser Canolbarth Affrica\x15Amser Dwyrain Affrica\x18Amser " + + "Safonol De Affrica\x17Amser Gorllewin Affrica\x1fAmser Safonol Gorllewin" + + " Affrica\x1bAmser Haf Gorllewin Affrica\x0cAmser Alaska\x14Amser Safonol" + + " Alaska\x10Amser Haf Alaska\x0eAmser Amazonas\x16Amser Safonol Amazonas" + + "\x12Amser Haf Amazonas Amser Canolbarth Gogledd America(Amser Safonol Ca" + + "nolbarth Gogledd America$Amser Haf Canolbarth Gogledd America\x1dAmser D" + + "wyrain Gogledd America%Amser Safonol Dwyrain Gogledd America!Amser Haf D" + + "wyrain Gogledd America Amser Mynyddoedd Gogledd America(Amser Safonol My" + + "nyddoedd Gogledd America$Amser Haf Mynyddoedd Gogledd America#Amser Cefn" + + "for Tawel Gogledd America+Amser Safonol Cefnfor Tawel Gogledd America'Am" + + "ser Haf Cefnfor Tawel Gogledd America\x0aAmser Apia\x12Amser Safonol Api" + + "a\x0eAmser Haf Apia\x0eAmser Arabaidd\x16Amser Safonol Arabaidd\x12Amser" + + " Haf Arabaidd\x11Amser yr Ariannin\x16Amser Safonol Ariannin\x12Amser Ha" + + "f Ariannin\x18Amser Gorllewin Ariannin Amser Safonol Gorllewin Ariannin" + + "\x1cAmser Haf Gorllewin Ariannin\x0dAmser Armenia\x15Amser Safonol Armen" + + "ia\x11Amser Haf Armenia\x18Amser Cefnfor yr Iwerydd Amser Safonol Cefnfo" + + "r yr Iwerydd\x1cAmser Haf Cefnfor yr Iwerydd\x1aAmser Canolbarth Awstral" + + "ia\"Amser Safonol Canolbarth Awstralia\x1eAmser Haf Canolbarth Awstralia" + + "$Amser Canolbarth Gorllewin Awstralia,Amser Safonol Canolbarth Gorllewin" + + " Awstralia(Amser Haf Canolbarth Gorllewin Awstralia\x17Amser Dwyrain Aws" + + "tralia\x1fAmser Safonol Dwyrain Awstralia\x1bAmser Haf Dwyrain Awstralia" + + "\x19Amser Gorllewin Awstralia!Amser Safonol Gorllewin Awstralia\x1dAmser" + + " Haf Gorllewin Awstralia\x10Amser Aserbaijan\x18Amser Safonol Aserbaijan" + + "\x14Amser Haf Aserbaijan\x0fAmser yr Azores\x17Amser Safonol yr Azores" + + "\x13Amser Haf yr Azores\x10Amser Bangladesh\x18Amser Safonol Bangladesh" + + "\x14Amser Haf Bangladesh\x0cAmser Bhutan\x0dAmser Bolivia\x0fAmser Brasí" + + "lia\x17Amser Safonol Brasília\x13Amser Haf Brasília\x17Amser Brunei Daru" + + "ssalam\x10Amser Cabo Verde\x18Amser Safonol Cabo Verde\x14Amser Haf Cabo" + + " Verde\x0eAmser Chamorro\x0dAmser Chatham\x15Amser Safonol Chatham\x11Am" + + "ser Haf Chatham\x0bAmser Chile\x13Amser Safonol Chile\x0fAmser Haf Chile" + + "\x0dAmser Tsieina\x15Amser Safonol Tsieina\x11Amser Haf Tsieina\x10Amser" + + " Choibalsan\x18Amser Safonol Choibalsan\x14Amser Haf Choibalsan\x14Amser" + + " Ynys Y Nadolig\x14Amser Ynysoedd Cocos\x0eAmser Colombia\x16Amser Safon" + + "ol Colombia\x12Amser Haf Colombia\x13Amser Ynysoedd Cook\x1bAmser Safono" + + "l Ynysoedd Cook\x1eAmser Hanner Haf Ynysoedd Cook\x0aAmser Cuba\x12Amser" + + " Safonol Cuba\x0eAmser Haf Cuba\x0bAmser Davis\x18Amser Dumont-d’Urville" + + "\x13Amser Dwyrain Timor\x11Amser Ynys y Pasg\x19Amser Safonol Ynys y Pas" + + "g\x15Amser Haf Ynys y Pasg\x0dAmser Ecuador\x16Amser Canolbarth Ewrop" + + "\x1eAmser Safonol Canolbarth Ewrop\x1aAmser Haf Canolbarth Ewrop\x13Amse" + + "r Dwyrain Ewrop\x1bAmser Safonol Dwyrain Ewrop\x17Amser Haf Dwyrain Ewro" + + "p\x18Amser Dwyrain Pell Ewrop\x15Amser Gorllewin Ewrop\x1dAmser Safonol " + + "Gorllewin Ewrop\x19Amser Haf Gorllewin Ewrop!Amser Ynysoedd Falklands/Ma" + + "lvinas)Amser Safonol Ynysoedd Falklands/Malvinas%Amser Haf Ynysoedd Falk" + + "lands/Malvinas\x0aAmser Fiji\x12Amser Safonol Fiji\x0eAmser Haf Fiji\x15" + + "Amser Guyane Ffrengig-Amser Tiroedd Ffrainc yn y De a’r Antarctig\x0fAms" + + "er Galapagos\x0dAmser Gambier\x0dAmser Georgia\x15Amser Safonol Georgia" + + "\x11Amser Haf Georgia\x16Amser Ynysoedd Gilbert\x17Amser Safonol Greenwi" + + "ch\x19Amser Dwyrain yr Ynys Las!Amser Safonol Dwyrain yr Ynys Las\x1dAms" + + "er Haf Dwyrain yr Ynys Las\x1bAmser Gorllewin yr Ynys Las#Amser Safonol " + + "Gorllewin yr Ynys Las\x1fAmser Haf Gorllewin yr Ynys Las\x15Amser Safono" + + "l y Gwlff\x0cAmser Guyana\x15Amser Hawaii-Aleutian\x1dAmser Safonol Hawa" + + "ii-Aleutian\x19Amser Haf Hawaii-Aleutian\x0fAmser Hong Kong\x17Amser Saf" + + "onol Hong Kong\x13Amser Haf Hong Kong\x0aAmser Hovd\x12Amser Safonol Hov" + + "d\x0eAmser Haf Hovd\x0bAmser India\x13Amser Cefnfor India\x12Amser Indo-" + + "Tsieina\x1aAmser Canolbarth Indonesia\x17Amser Dwyrain Indonesia\x19Amse" + + "r Gorllewin Indonesia\x0aAmser Iran\x12Amser Safonol Iran\x0eAmser Haf I" + + "ran\x0dAmser Irkutsk\x15Amser Safonol Irkutsk\x11Amser Haf Irkutsk\x0cAm" + + "ser Israel\x14Amser Safonol Israel\x10Amser Haf Israel\x0cAmser Siapan" + + "\x14Amser Safonol Siapan\x10Amser Haf Siapan\x18Amser Dwyrain Kazakhstan" + + "\x1aAmser Gorllewin Casachstan\x0bAmser Corea\x13Amser Safonol Corea\x0f" + + "Amser Haf Corea\x0cAmser Kosrae\x11Amser Krasnoyarsk\x19Amser Safonol Kr" + + "asnoyarsk\x15Amser Haf Krasnoyarsk\x10Amser Kyrgyzstan\x13Amser Ynysoedd" + + " Line\x16Amser yr Arglwydd Howe\x1eAmser Safonol yr Arglwydd Howe\x1aAms" + + "er Haf yr Arglwydd Howe\x14Amser Ynys Macquarie\x0dAmser Magadan\x15Amse" + + "r Safonol Magadan\x11Amser Haf Magadan\x0eAmser Malaysia\x10Amser Y Mald" + + "ives\x0fAmser Marquises\x17Amser Ynysoedd Marshall\x0fAmser Mauritius" + + "\x17Amser Safonol Mauritius\x13Amser Haf Mauritius\x0cAmser Mawson\x1eAm" + + "ser Gogledd Orllewin Mecsico&Amser Safonol Gogledd Orllewin Mecsico\"Ams" + + "er Haf Gogledd Orllewin Mecsico\x16Amser Pasiffig Mecsico\x1eAmser Safon" + + "ol Pasiffig Mecsico\x1aAmser Haf Pasiffig Mecsico\x10Amser Ulan Bator" + + "\x18Amser Safonol Ulan Bator\x14Amser Haf Ulan Bator\x0cAmser Moscfa\x14" + + "Amser Safonol Moscfa\x10Amser Haf Moscfa\x0dAmser Myanmar\x0bAmser Nauru" + + "\x0bAmser Nepal\x16Amser Caledonia Newydd\x1eAmser Safonol Caledonia New" + + "ydd\x1aAmser Haf Caledonia Newydd\x13Amser Seland Newydd\x1bAmser Safono" + + "l Seland Newydd\x17Amser Haf Seland Newydd\x12Amser Newfoundland\x1aAmse" + + "r Safonol Newfoundland\x16Amser Haf Newfoundland\x0aAmser Niue\x12Amser " + + "Ynys Norfolk\x19Amser Fernando de Noronha!Amser Safonol Fernando de Noro" + + "nha\x1dAmser Haf Fernando de Noronha\x11Amser Novosibirsk\x19Amser Safon" + + "ol Novosibirsk\x15Amser Haf Novosibirsk\x0aAmser Omsk\x12Amser Safonol O" + + "msk\x0eAmser Haf Omsk\x0eAmser Pakistan\x16Amser Safonol Pakistan\x12Ams" + + "er Haf Pakistan\x0bAmser Palau\x19Amser Papua Guinea Newydd\x0eAmser Par" + + "aguay\x16Amser Safonol Paraguay\x12Amser Haf Paraguay\x0bAmser Periw\x13" + + "Amser Safonol Periw\x0fAmser Haf Periw\x0fAmser Pilipinas\x17Amser Safon" + + "ol Pilipinas\x13Amser Haf Pilipinas\x16Amser Ynysoedd Phoenix\x1eAmser S" + + "aint-Pierre-et-Miquelon&Amser Safonol Saint-Pierre-et-Miquelon\"Amser Ha" + + "f Saint-Pierre-et-Miquelon\x0eAmser Pitcairn\x0dAmser Pohnpei\x0fAmser P" + + "yongyang\x0eAmser Réunion\x0dAmser Rothera\x0eAmser Sakhalin\x16Amser Sa" + + "fonol Sakhalin\x12Amser Haf Sakhalin\x0cAmser Samara\x14Amser Safonol Sa" + + "mara\x10Amser Haf Samara\x0bAmser Samoa\x13Amser Safonol Samoa\x0fAmser " + + "Haf Samoa\x10Amser Seychelles\x0fAmser Singapore\x16Amser Ynysoedd Solom" + + "on\x10Amser De Georgia\x0eAmser Suriname\x0bAmser Syowa\x0cAmser Tahiti" + + "\x0cAmser Taipei\x14Amser Safonol Taipei\x10Amser Haf Taipei\x10Amser Ta" + + "jicistan\x0dAmser Tokelau\x0bAmser Tonga\x13Amser Safonol Tonga\x0fAmser" + + " Haf Tonga\x0bAmser Chuuk\x12Amser Tyrcmenistan\x1aAmser Safonol Tyrcmen" + + "istan\x16Amser Haf Tyrcmenistan\x0cAmser Tuvalu\x0dAmser Uruguay\x15Amse" + + "r Safonol Uruguay\x11Amser Haf Uruguay\x10Amser Wsbecistan\x18Amser Safo" + + "nol Wsbecistan\x14Amser Haf Wsbecistan\x0dAmser Vanuatu\x15Amser Safonol" + + " Vanuatu\x11Amser Haf Vanuatu\x0fAmser Venezuela\x11Amser Vladivostok" + + "\x19Amser Safonol Vladivostok\x15Amser Haf Vladivostok\x0fAmser Volgogra" + + "d\x17Amser Safonol Volgograd\x13Amser Haf Volgograd\x0cAmser Vostok\x0fA" + + "mser Ynys Wake\x15Amser Wallis a Futuna\x0dAmser Yakutsk\x15Amser Safono" + + "l Yakutsk\x11Amser Haf Yakutsk\x13Amser Yekaterinburg\x1bAmser Safonol Y" + + "ekaterinburg\x17Amser Haf Yekaterinburg\x01V\x01J\x02Ā\x01S\x01B\x01K" + + "\x01M\x01P\x02С" + +var bucket22 string = "" + // Size: 12797 bytes + "\x03tut\x05babah\x05hatur\x06kiyahk\x05tubah\x06amshir\x08baramhat\x0aba" + + "ramundah\x07bashans\x09ba’unah\x04abib\x05misra\x04nasi\x0e0. tidsregnin" + + "g\x0e1. tidsregning\x090. tidsr.\x091. tidsr.\x050. t.\x051. t.\x0ad. MM" + + "M y G\x04jan.\x04feb.\x04mar.\x04apr.\x03maj\x04jun.\x04jul.\x04aug.\x04" + + "sep.\x04okt.\x04nov.\x04dec.\x03maj\x05søn.\x04man.\x04tir.\x04ons.\x04t" + + "or.\x04fre.\x05lør.\x03sø\x02ma\x02ti\x02on\x02to\x02fr\x03lø\x07søndag" + + "\x06mandag\x07tirsdag\x06onsdag\x07torsdag\x06fredag\x07lørdag\x04søn" + + "\x03man\x03tir\x03ons\x03tor\x03fre\x04lør\x071. kvt.\x072. kvt.\x073. k" + + "vt.\x074. kvt.\x0a1. kvartal\x0a2. kvartal\x0a3. kvartal\x0a4. kvartal" + + "\x06midnat\x0bom morgenen\x0eom formiddagen\x10om eftermiddagen\x0aom af" + + "tenen\x09om natten\x06morgen\x09formiddag\x0beftermiddag\x05aften\x03nat" + + "\x05f.Kr.\x1dfør vesterlandsk tidsregning\x05e.Kr.\x18vesterlandsk tidsr" + + "egning\x06f.v.t.\x04v.t.\x03fKr\x03fvt\x03eKr\x02vt\x14EEEE 'den' d. MMM" + + "M y\x08d. MMM y\x0dHH.mm.ss zzzz\x0aHH.mm.ss z\x08HH.mm.ss\x05HH.mm\x0d{" + + "1} 'kl'. {0}\x06tishri\x07heshvan\x06kislev\x05tevet\x06shevat\x06adar I" + + "\x04adar\x07adar II\x05nisan\x04iyar\x05sivan\x05tamuz\x02av\x04Elul\x07" + + "chaitra\x08vaisakha\x08jyaistha\x06asadha\x07sravana\x06bhadra\x06asvina" + + "\x07kartika\x0aagrahayana\x05pausa\x05magha\x08phalguna\x08muharram\x05s" + + "afar\x08rabiʻ I\x09rabiʻ II\x08jumada I\x09jumada II\x05rajab\x08shaʻban" + + "\x07ramadan\x07shawwal\x0edhuʻl-Qiʻdah\x0ddhuʻl-Hijjah\x0bfør R.O.C.\x06" + + "Minguo\x04æra\x03år\x0asidste år\x05i år\x0anæste år\x0aom {0} år\x11for" + + " {0} år siden\x0esidste kvartal\x0ddette kvartal\x0enæste kvartal\x0eom " + + "{0} kvartal\x10om {0} kvartaler\x15for {0} kvartal siden\x17for {0} kvar" + + "taler siden\x04kvt.\x0bsidste kvt.\x0adette kvt.\x0bnæste kvt.\x0bom {0}" + + " kvt.\x12for {0} kvt. siden\x06måned\x0dsidste måned\x0cdenne måned\x0dn" + + "æste måned\x0dom {0} måned\x0fom {0} måneder\x14for {0} måned siden\x16" + + "for {0} måneder siden\x0asidste md.\x09denne md.\x0anæste md.\x0aom {0} " + + "md.\x0bom {0} mdr.\x11for {0} md. siden\x12for {0} mdr. siden\x03uge\x0a" + + "sidste uge\x09denne uge\x0anæste uge\x0aom {0} uge\x0bom {0} uger\x11for" + + " {0} uge siden\x12for {0} uger siden\x0ei ugen med {0}\x0euge i måneden" + + "\x09uge i md.\x0ai forgårs\x06i går\x05i dag\x08i morgen\x0ci overmorgen" + + "\x0aom {0} dag\x0bom {0} dage\x11for {0} dag siden\x12for {0} dage siden" + + "\x0bdag i året\x06ugedag\x11ugedag i måneden\x0cugedag i md.\x0esidste s" + + "øndag\x0bpå søndag\x0enæste søndag\x0eom {0} søndag\x0fom {0} søndage" + + "\x15for {0} søndag siden\x16for {0} søndage siden\x0csidste søn.\x09på s" + + "øn.\x0cnæste søn.\x0bsidste sø.\x08på sø.\x0bnæste sø.\x0dsidste mandag" + + "\x0apå mandag\x0dnæste mandag\x0dom {0} mandag\x0eom {0} mandage\x14for " + + "{0} mandag siden\x15for {0} mandage siden\x0bsidste man.\x08på man.\x0bn" + + "æste man.\x0asidste ma.\x07på ma.\x0anæste ma.\x0esidste tirsdag\x0bpå " + + "tirsdag\x0enæste tirsdag\x0eom {0} tirsdag\x0fom {0} tirsdage\x15for {0}" + + " tirsdag siden\x16for {0} tirsdage siden\x0bsidste tir.\x08på tir.\x0bnæ" + + "ste tir.\x0asidste ti.\x07på ti.\x0anæste ti.\x0dsidste onsdag\x0apå ons" + + "dag\x0dnæste onsdag\x0dom {0} onsdag\x0eom {0} onsdage\x14for {0} onsdag" + + " siden\x15for {0} onsdage siden\x0bsidste ons.\x08på ons.\x0bnæste ons." + + "\x0asidste on.\x07på on.\x0anæste on.\x0esidste torsdag\x0bpå torsdag" + + "\x0enæste torsdag\x0eom {0} torsdag\x0fom {0} torsdage\x15for {0} torsda" + + "g siden\x16for {0} torsdage siden\x0bsidste tor.\x08på tor.\x0bnæste tor" + + ".\x0asidste to.\x07på to.\x0anæste to.\x0dsidste fredag\x0apå fredag\x0d" + + "næste fredag\x0dom {0} fredag\x0eom {0} fredage\x14for {0} fredag siden" + + "\x15for {0} fredage siden\x0bsidste fre.\x08på fre.\x0bnæste fre.\x0asid" + + "ste fr.\x07på fr.\x0anæste fr.\x0esidste lørdag\x0bpå lørdag\x0enæste lø" + + "rdag\x0eom {0} lørdag\x0fom {0} lørdage\x15for {0} lørdag siden\x16for {" + + "0} lørdage siden\x0csidste lør.\x09på lør.\x0cnæste lør.\x0bsidste lø." + + "\x08på lø.\x0bnæste lø.\x04time\x13i den kommende time\x0bom {0} time" + + "\x0com {0} timer\x12for {0} time siden\x13for {0} timer siden\x02t.\x0ad" + + "enne time\x14i det kommende minut\x0com {0} minut\x0fom {0} minutter\x13" + + "for {0} minut siden\x16for {0} minutter siden\x0adette min.\x0bom {0} mi" + + "n.\x12for {0} min. siden\x06sekund\x02nu\x0dom {0} sekund\x0fom {0} seku" + + "nder\x14for {0} sekund siden\x16for {0} sekunder siden\x0bom {0} sek." + + "\x12for {0} sek. siden\x08tidszone\x04zone\x18Koordineret universaltid" + + "\x11Britisk sommertid\x0eIrsk normaltid\x08Acre-tid\x0eAcre-normaltid" + + "\x0eAcre-sommertid\x0cAfghansk tid\x14Centralafrikansk tid\x11Østafrikan" + + "sk tid\x10Sydafrikansk tid\x11Vestafrikansk tid\x17Vestafrikansk normalt" + + "id\x17Vestafrikansk sommertid\x0aAlaska-tid\x10Alaska-normaltid\x10Alask" + + "a-sommertid\x0aAlmaty-tid\x10Almaty-normaltid\x10Almaty-sommertid\x0cAma" + + "zonas-tid\x12Amazonas-normaltid\x12Amazonas-sommertid\x0bCentral-tid\x11" + + "Central-normaltid\x11Central-sommertid\x0bEastern-tid\x11Eastern-normalt" + + "id\x11Eastern-sommertid\x0cMountain-tid\x12Mountain-normaltid\x12Mountai" + + "n-sommertid\x0bPacific-tid\x11Pacific-normaltid\x11Pacific-sommertid\x0a" + + "Anadyr-tid\x10Anadyr-normaltid\x10Anadyr-sommertid\x08Apia-tid\x0eApia-n" + + "ormaltid\x0eApia-sommertid\x09Aqtau-tid\x0fAqtau-normaltid\x0fAqtau-somm" + + "ertid\x0aAqtobe-tid\x10Aqtobe-normaltid\x10Aqtobe-sommertid\x0bArabisk t" + + "id\x11Arabisk normaltid\x11Arabisk sommertid\x0dArgentisk tid\x14Argenti" + + "nsk normaltid\x14Argentinsk sommertid\x12Vestargentinsk tid\x18Vestargen" + + "tinsk normaltid\x18Vestargentinsk sommertid\x0cArmenien-tid\x12Armenien-" + + "normaltid\x12Armenien-sommertid\x0cAtlantic-tid\x12Atlantic-normaltid" + + "\x12Atlantic-sommertid\x14Centralaustralsk tid\x1aCentralaustralsk norma" + + "ltid\x1aCentralaustralsk sommertid\x1cVestlig centralaustralsk tid\"Vest" + + "lig centralaustralsk normaltid\"Vestlig centralaustralsk sommertid\x11Øs" + + "taustralsk tid\x17Østaustralsk normaltid\x17Østaustralsk sommertid\x11Ve" + + "staustralsk tid\x17Vestaustralsk normaltid\x17Vestaustralsk sommertid" + + "\x10Aserbajdsjan-tid\x16Aserbajdsjan-normaltid\x16Aserbajdsjan-sommertid" + + "\x0cAzorerne-tid\x12Azorerne-normaltid\x12Azorerne-sommertid\x0eBanglade" + + "sh-tid\x14Bangladesh-normaltid\x14Bangladesh-sommertid\x0aBhutan-tid\x0e" + + "Boliviansk tid\x0fBrasiliansk tid\x15Brasiliansk normaltid\x15Brasilians" + + "k sommertid\x15Brunei Darussalam-tid\x0eCabo Verde-tid\x14Cabo Verde-nor" + + "maltid\x14Cabo Verde-sommertid\x0cChamorro-tid\x0bChatham-tid\x11Chatham" + + "-normaltid\x11Chatham-sommertid\x0cChilensk tid\x12Chilensk normaltid" + + "\x12Chilensk sommertid\x0cKinesisk tid\x12Kinesisk normaltid\x12Kinesisk" + + " sommertid\x0fTsjojbalsan-tid\x15Tsjojbalsan-normaltid\x15Tsjojbalsan-so" + + "mmertid\x12Juleøen-normaltid\x15Cocosøerne-normaltid\x0fColombiansk tid" + + "\x15Colombiansk normaltid\x15Colombiansk sommertid\x0eCookøerne-tid\x14C" + + "ookøerne-normaltid\x14Cookøerne-sommertid\x0bCubansk tid\x11Cubansk norm" + + "altid\x11Cubansk sommertid\x09Davis-tid\x16Dumont-d’Urville-tid\x0dØstti" + + "mor-tid\x0ePåskeøen-tid\x14Påskeøen-normaltid\x14Påskeøen-sommertid\x10E" + + "cuadoriansk tid\x15Centraleuropæisk tid\x1bCentraleuropæisk normaltid" + + "\x1bCentraleuropæisk sommertid\x12Østeuropæisk tid\x18Østeuropæisk norma" + + "ltid\x18Østeuropæisk sommertid\x17Fjernøsteuropæisk tid\x12Vesteuropæisk" + + " tid\x18Vesteuropæisk normaltid\x18Vesteuropæisk sommertid\x13Falklandsø" + + "erne-tid\x19Falklandsøerne-normaltid\x19Falklandsøerne-sommertid\x08Fiji" + + "-tid\x0eFiji-normaltid\x0eFiji-sommertid\x11Fransk Guyana-tid.Franske Sy" + + "dlige og Antarktiske Territorier-tid\x0dGalapagos-tid\x0bGambier-tid\x0c" + + "Georgien-tid\x12Georgien-normaltid\x12Georgien-sommertid\x11Gilbertøerne" + + "-tid\x03GMT\x13Østgrønlandsk tid\x19Østgrønlandsk normaltid\x19Østgrønla" + + "ndsk sommertid\x13Vestgrønlandsk tid\x19Vestgrønlandsk normaltid\x19Vest" + + "grønlandsk sommertid\x0eGuam-normaltid\x15Golflandene-normaltid\x0aGuyan" + + "a-tid\x13Hawaii-Aleutian-tid\x19Hawaii-Aleutian-normaltid\x19Hawaii-Aleu" + + "tian-sommertid\x0cHongkong-tid\x12Hongkong-normaltid\x12Hongkong-sommert" + + "id\x08Hovd-tid\x0eHovd-normaltid\x0eHovd-sommertid\x10Indien-normaltid" + + "\x17Indiske Ocean-normaltid\x0cIndokina-tid\x15Centralindonesisk tid\x12" + + "Østindonesisk tid\x12Vestindonesisk tid\x08Iran-tid\x0eIran-normaltid" + + "\x0eIran-sommertid\x0bIrkutsk-tid\x11Irkutsk-normaltid\x11Irkutsk-sommer" + + "tid\x0cIsraelsk tid\x12Israelsk normaltid\x12Israelsk sommertid\x0bJapan" + + "sk tid\x11Japansk normaltid\x11Japansk sommertid\x1cPetropavlovsk-Kamcha" + + "tski tid\"Petropavlovsk-Kamchatski normaltid\"Petropavlovsk-Kamchatski s" + + "ommertid\x14Østkasakhstansk tid\x14Vestkasakhstansk tid\x0cKoreansk tid" + + "\x12Koreansk normaltid\x12Koreansk sommertid\x0aKosrae-tid\x0fKrasnojars" + + "k-tid\x15Krasnojarsk-normaltid\x15Krasnojarsk-sommertid\x0dKirgisisk tid" + + "\x09Langa tid\x0fLinjeøerne-tid\x0dLord Howe-tid\x13Lord Howe-normaltid" + + "\x13Lord Howe-sommertid\x09Macao-tid\x0fMacao-normaltid\x0fMacao-sommert" + + "id\x0dMacquarie-tid\x0bMagadan-tid\x11Magadan-normaltid\x11Magadan-somme" + + "rtid\x0cMalaysia-tid\x0eMaldiverne-tid\x0dMarquesas-tid\x12Marshalløerne" + + "-tid\x0dMauritius-tid\x13Mauritius-normaltid\x13Mauritius-sommertid\x0aM" + + "awson-tid\x15Nordvestmexicansk tid\x1bNordvestmexicansk normaltid\x1bNor" + + "dvestmexicansk sommertid\x15Mexicansk Pacific-tid\x1bMexicansk Pacific-n" + + "ormaltid\x1bMexicansk Pacific-sommertid\x0eUlan Bator-tid\x14Ulan Bator-" + + "normaltid\x14Ulan Bator-sommertid\x0aMoskva-tid\x10Moskva-normaltid\x10M" + + "oskva-sommertid\x0bMyanmar-tid\x09Nauru-tid\x09Nepal-tid\x11Ny Kaledonie" + + "n-tid\x17Ny Kaledonien-normaltid\x17Ny Kaledonien-sommertid\x0fNew Zeala" + + "nd-tid\x15New Zealand-normaltid\x15New Zealand-sommertid\x12Newfoundland" + + "sk tid\x18Newfoundlandsk normaltid\x18Newfoundlandsk sommertid\x08Niue-t" + + "id\x12Norfolk Island-tid\x17Fernando de Noronha-tid\x1dFernando de Noron" + + "ha-normaltid\x1dFernando de Noronha-sommertid\x12Nordmarianerne-tid\x0fN" + + "ovosibirsk-tid\x15Novosibirsk-normaltid\x15Novosibirsk-sommertid\x08Omsk" + + "-tid\x0eOmsk-normaltid\x0eOmsk-sommertid\x0cPakistan-tid\x12Pakistan-nor" + + "maltid\x12Pakistan-sommertid\x0fPalau-normaltid\x13Papua Ny Guinea-tid" + + "\x10Paraguayansk tid\x16Paraguayansk normaltid\x16Paraguayansk sommertid" + + "\x0ePeruviansk tid\x14Peruviansk normaltid\x14Peruviansk sommertid\x0eFi" + + "lippinsk tid\x16Filippinerne-normaltid\x16Filippinerne-sommertid\x0fPhoe" + + "nixøen-tid\x1dSaint Pierre- og Miquelon-tid#Saint Pierre- og Miquelon-no" + + "rmaltid#Saint Pierre- og Miquelon-sommertid\x0cPitcairn-tid\x0aPonape-ti" + + "d\x0dPyongyang-tid\x0dQyzylorda-tid\x13Qyzylorda-normaltid\x13Qyzylorda-" + + "sommertid\x0bReunion-tid\x0bRothera-tid\x0cSakhalin-tid\x12Sakhalin-norm" + + "altid\x12Sakhalin-sommertid\x0aSamara-tid\x10Samara-normaltid\x10Samara-" + + "sommertid\x09Samoa-tid\x0fSamoa-normaltid\x0fSamoa-sommertid\x0fSeychell" + + "isk tid\x0dSingapore-tid\x11Salomonøerne-tid\x11South Georgia-tid\x0bSur" + + "inam-tid\x09Syowa-tid\x0aTahiti-tid\x0aTaipei-tid\x10Taipei-normaltid" + + "\x10Taipei-sommertid\x0eTadsjikisk tid\x0bTokelau-tid\x09Tonga-tid\x0fTo" + + "nga-normaltid\x0fTonga-sommertid\x09Chuuk-tid\x0dTurkmensk tid\x13Turkme" + + "nsk normaltid\x13Turkmensk sommertid\x0aTuvalu-tid\x0fUruguayansk tid" + + "\x15Uruguayansk normaltid\x15Uruguayansk sommertid\x0cUsbekisk tid\x12Us" + + "bekisk normaltid\x12Usbekisk sommertid\x0bVanuatu-tid\x11Vanuatu-normalt" + + "id\x11Vanuatu-sommertid\x10Venezuelansk tid\x0fVladivostok-tid\x15Vladiv" + + "ostok-normaltid\x15Vladivostok-sommertid\x0dVolgograd-tid\x13Volgograd-n" + + "ormaltid\x13Volgograd-sommertid\x0aVostok-tid\x0fWake Island-tid\x14Wall" + + "is og Futuna-tid\x0bYakutsk-tid\x11Yakutsk-normaltid\x11Yakutsk-sommerti" + + "d\x11Jekaterinburg-tid\x17Jekaterinburg-normaltid\x17Jekaterinburg-somme" + + "rtid\x05měr.\x04maj.\x04awg.\x04now.\x04elul\x02Av\x04Elul\x08ramadán" + + "\x0edhuʻl-qiʻdah\x0ddhuʻl-hijjah\x03pKr\x03jKr\x10rabi’ al-awwal\x10rabi" + + "’ al-akhir\x0edžumada-l-ula\x11džumada-l-akhira\x07radžab\x09ša’ban" + + "\x07šawwal\x0ddhu-l-qa’da\x0ddhu-l-hiddža\x04feb.\x04mar.\x03mai\x04jun." + + "\x04jul.\x04sep.\x04nov.\x04des.\x09vaishākh\x09jyaishtha\x09āshādha\x09" + + "shrāvana\x0abhādrapad\x07āshwin\x07kārtik\x0emārgashīrsha\x05paush\x05mā" + + "gh\x08phālgun\x05māgh\x05fév.\x04mar.\x04avr.\x03mai\x04jui.\x05juil." + + "\x05août\x05sept.\x04oct.\x04nov.\x05déc.\x05n.Kr.\x04feb.\x04mej.\x04de" + + "c.\x05febr.\x06márc.\x05ápr.\x05máj.\x05jún.\x05júl.\x06szept.\x04nov." + + "\x04mar.\x04maí\x06ágú.\x05nóv.\x04maí\x06kislev\x06adar I\x04adar\x07ad" + + "ar II\x04iyar\x05sivan\x02av\x05Nisan\x05safar\x05rajab\x07ramadan\x04ap" + + "r.\x03mai\x04aug.\x04okt.\x04nov.\x10om {0} søndager\x17for {0} søndager" + + " siden\x0fom {0} mandager\x16for {0} mandager siden\x10om {0} tirsdager" + + "\x17for {0} tirsdager siden\x0fom {0} onsdager\x16for {0} onsdager siden" + + "\x10om {0} torsdager\x17for {0} torsdager siden\x0fom {0} fredager\x16fo" + + "r {0} fredager siden\x10om {0} lørdager\x17for {0} lørdager siden\x11ves" + + "tafrikansk tid\x0calaskisk tid\x15tidssone for Amazonas&tidssone for det" + + " sentrale Nord-Amerika+tidssone for den nordamerikanske østkysten\"tidss" + + "one for Rocky Mountains (USA)1tidssone for den nordamerikanske Stillehav" + + "skysten\x14Russisk (Anadyr) tid\x11tidssone for Apia\x0barabisk tid\x0ea" + + "rgentinsk tid\x12vestargentinsk tid\x0barmensk tid3tidssone for den nord" + + "amerikanske atlanterhavskysten\x14sentralaustralsk tid\x19vest-sentralau" + + "stralsk tid\x11østaustralsk tid\x11vestaustralsk tid\x12aserbajdsjansk t" + + "id\x0basorisk tid\x11bangladeshisk tid\x15tidssone for Brasilia\x0fkappv" + + "erdisk tid\x14tidssone for Chatham\x0cchilensk tid\x0ckinesisk tid\x18ti" + + "dssone for Tsjojbalsan\x0fcolombiansk tid\x17tidssone for Cookøyene\x0bc" + + "ubansk tid\x17tidssone for Påskeøya\x14sentraleuropeisk tid\x11østeurope" + + "isk tid\x11vesteuropeisk tid\x1ctidssone for Falklandsøyene\x0cfijiansk " + + "tid\x0cgeorgisk tid\x13østgrønlandsk tid\x13vestgrønlandsk tid\x1ftidsso" + + "ne for Hawaii og Aleutene\x15tidssone for Hongkong\x12tidssone for Khovd" + + "\x0airansk tid\x14tidssone for Irkutsk\x0cisraelsk tid\x0bjapansk tid(Ru" + + "ssisk (Petropavlovsk-Kamtsjatskij) tid\x0ckoreansk tid\x18tidssone for K" + + "rasnojarsk\x1btidssone for Lord Howe-øya\x09Macau-tid\x14tidssone for Ma" + + "gadan\x0dmauritisk tid tidssone for nordvestlige Mexico-tidssone for den" + + " meksikanske Stillehavskysten\x17tidssone for Ulan Bator\x13tidssone for" + + " Moskva\x0dkaledonsk tid\x10newzealandsk tid\x19tidssone for Newfoundlan" + + "d tidssone for Fernando de Noronha\x18tidssone for Novosibirsk\x11tidsso" + + "ne for Omsk\x0epakistansk tid\x10paraguayansk tid\x0cperuansk tid\x0efil" + + "ippinsk tid%tidssone for Saint-Pierre-et-Miquelon\x15tidssone for Sakhal" + + "in\x14Russisk (Samara) tid\x0csamoansk tid\x13tidssone for Taipei\x0cton" + + "gansk tid\x0dturkmensk tid\x0furuguayansk tid\x0cusbekisk tid\x0dvanuati" + + "sk tid\x18tidssone for Vladivostok\x16tidssone for Volgograd\x14tidssone" + + " for Jakutsk\x1atidssone for Jekaterinburg\x04mrt.\x03mei\x04dec.\x03mei" + + "\x04mars\x03mai\x04juni\x04juli\x04mån\x03tys\x03lau\x0fom {0} onsdagar" + + "\x10om {0} torsdagar\x0fom {0} fredagar\x0com {0} timar\x0eom {0}\u00a0s" + + "ekund\"tidssone for sentrale Nord-Amerika*tidssone for den nordamerikans" + + "k austkysten1tidssone for den nordamerikanske stillehavskysten\x11austau" + + "stralsk tid\x0fkolombiansk tid\x17tidssone for Cookøyane\x0bkubansk tid" + + "\x11austeuropeisk tid\x1ctidssone for Falklandsøyane\x13austgrønlandsk t" + + "id\x14hongkongkinesisk tid tidssone for nordvestlege Mexico-tidssone for" + + " den meksikanske stillehavskysten\x0fnyzealandsk tid\x04feb.\x04mar.\x04" + + "apr.\x03maj\x04avg.\x04nov.\x04dec.\x03maj\x04mart\x03maj\x03jun\x03jul" + + "\x05sept.\x04mars\x04juni\x04juli\x04aug.\x04mars\x03maj\x04juni\x04juli" + + "\x05safar\x0cjumada-l-ula\x0fjumada-l-akhira\x09sha’ban\x0ddhu-l-ga’da" + + "\x0bdhu-l-hijja\x0com {0} dagar\x0eom {0} minuter" + +var bucket23 string = "" + // Size: 12097 bytes + "\x03Imb\x03Kaw\x03Kad\x03Kan\x03Kas\x03Kar\x03Mfu\x03Wun\x03Ike\x03Iku" + + "\x03Imw\x03Iwi\x10Mori ghwa imbiri\x0eMori ghwa kawi\x10Mori ghwa kadadu" + + "\x0eMori ghwa kana\x10Mori ghwa kasanu\x13Mori ghwa karandadu\x12Mori gh" + + "wa mfungade\x12Mori ghwa wunyanya\x10Mori ghwa ikenda\x0fMori ghwa ikumi" + + "\x19Mori ghwa ikumi na imweri\x16Mori ghwa ikumi na iwi\x03Jum\x03Jim" + + "\x03Ngu\x0eItuku ja jumwa\x10Kuramuka jimweri\x0dKuramuka kawi\x0fKuramu" + + "ka kadadu\x0dKuramuka kana\x0fKuramuka kasanu\x0cKifula nguwo\x0fKimu ch" + + "a imbiri\x0dKimu cha kawi\x0fKimu cha kadadu\x0dKimu cha kana\x0aLuma lw" + + "a K\x0aluma lwa p\x0fKabla ya Kristo\x0fBaada ya Kristo\x02KK\x02BK\x05N" + + "gelo\x04Mori\x04Juma\x05Ituku\x04Iguo\x05Idime\x05Kesho\x05KE/PE\x0dMaji" + + "ra ya saa\x05Ratte\x07Büffel\x05Tiger\x04Hase\x06Drache\x08Schlange\x05P" + + "ferd\x05Ziege\x04Affe\x04Hahn\x04Hund\x07Schwein\x0fEEEE, d. MMMM U\x09d" + + ". MMMM U\x07dd.MM U\x05Thout\x05Paopi\x06Hathor\x05Koiak\x04Tobi\x07Mesc" + + "hir\x08Paremhat\x09Paremoude\x08Paschons\x05Paoni\x04Epip\x06Mesori\x05N" + + "asie\x0bMäskäräm\x0aṬəqəmt\x08Ḫədar\x0aTaḫśaś\x07Ṭərr\x08Yäkatit\x08Mäga" + + "bit\x07Miyazya\x07Gənbot\x05Säne\x07Ḥamle\x07Nähase\x09Ṗagumen\x09dd.MM." + + "y G\x0c{1} 'um' {0}\x06Januar\x07Februar\x05März\x05April\x03Mai\x04Juni" + + "\x04Juli\x06August\x09September\x07Oktober\x08November\x08Dezember\x03Ma" + + "i\x07Sonntag\x06Montag\x08Dienstag\x08Mittwoch\x0aDonnerstag\x07Freitag" + + "\x07Samstag\x02So\x02Mo\x02Di\x02Mi\x02Do\x02Fr\x02Sa\x0a1. Quartal\x0a2" + + ". Quartal\x0a3. Quartal\x0a4. Quartal\x0bMitternacht\x07morgens\x0avormi" + + "ttags\x07mittags\x0bnachmittags\x06abends\x06nachts\x05vorm.\x06nachm." + + "\x06Morgen\x09Vormittag\x06Mittag\x0aNachmittag\x05Abend\x05Nacht\x07v. " + + "Chr.\x18vor unserer Zeitrechnung\x07n. Chr.\x14unserer Zeitrechnung\x08v" + + ". u. Z.\x05u. Z.\x0fEEEE, d. MMMM y\x07dd.MM.y\x07Tischri\x09Cheschwan" + + "\x06Kislew\x05Tevet\x07Schevat\x06Adar I\x04Adar\x07Adar II\x05Nisan\x05" + + "Ijjar\x05Siwan\x06Tammus\x02Aw\x04Elul\x09Farwardin\x0cOrdibehescht\x08C" + + "hordād\x03Tir\x07Mordād\x0aSchahriwar\x04Mehr\x06Ābān\x05Āsar\x04Déi\x06" + + "Bahman\x07Essfand\x17vor Volksrepublik China\x06Minguo\x0bv. VR China" + + "\x06Minguo\x06Epoche\x04Jahr\x0cletztes Jahr\x0bdieses Jahr\x0enächstes " + + "Jahr\x0bin {0} Jahr\x0din {0} Jahren\x0cvor {0} Jahr\x0evor {0} Jahren" + + "\x07Quartal\x0fletztes Quartal\x0edieses Quartal\x11nächstes Quartal\x0e" + + "in {0} Quartal\x10in {0} Quartalen\x0fvor {0} Quartal\x11vor {0} Quartal" + + "en\x06Quart.\x0din {0} Quart.\x0evor {0} Quart.\x08in {0} Q\x09vor {0} Q" + + "\x05Monat\x0dletzten Monat\x0cdiesen Monat\x0fnächsten Monat\x0cin {0} M" + + "onat\x0ein {0} Monaten\x0dvor {0} Monat\x0fvor {0} Monaten\x10vor {0}" + + "\u00a0Monaten\x0evor {0}\u00a0Monat\x05Woche\x0cletzte Woche\x0bdiese Wo" + + "che\x0enächste Woche\x0cin {0} Woche\x0din {0} Wochen\x0dvor {0} Woche" + + "\x0evor {0} Wochen\x11die Woche vom {0}\x0ain {0} Wo.\x0bvor {0} Wo.\x10" + + "Woche des Monats\x03W/M\x0eWo. des Monats\x03Tag\x0avorgestern\x07gester" + + "n\x05heute\x06morgen\x0bübermorgen\x0ain {0} Tag\x0cin {0} Tagen\x0bvor " + + "{0} Tag\x0dvor {0} Tagen\x0eTag des Jahres\x03T/J\x09Wochentag\x08Wochen" + + "t.\x02WT\x0fletzten Sonntag\x0ediesen Sonntag\x11nächsten Sonntag\x14Son" + + "ntag in {0} Woche\x15Sonntag in {0} Wochen\x15Sonntag vor {0} Woche\x16S" + + "onntag vor {0} Wochen\x0bletzten So.\x0adiesen So.\x0dnächsten So.\x10So" + + ". in {0} Woche\x11So. in {0} Wochen\x11So. vor {0} Woche\x12So. vor {0} " + + "Wochen\x0dSo. in {0} W.\x0eSo. vor {0} W.\x0eletzten Montag\x0ddiesen Mo" + + "ntag\x10nächsten Montag\x13Montag in {0} Woche\x14Montag in {0} Wochen" + + "\x14Montag vor {0} Woche\x15Montag vor {0} Wochen\x0bletzten Mo.\x0adies" + + "en Mo.\x0dnächsten Mo.\x10Mo. in {0} Woche\x11Mo. in {0} Wochen\x11Mo. v" + + "or {0} Woche\x12Mo. vor {0} Wochen\x0dMo. in {0} W.\x0eMo. vor {0} W." + + "\x10letzten Dienstag\x0fdiesen Dienstag\x12nächsten Dienstag\x15Dienstag" + + " in {0} Woche\x16Dienstag in {0} Wochen\x16Dienstag vor {0} Woche\x17Die" + + "nstag vor {0} Wochen\x0bletzten Di.\x0adiesen Di.\x0dnächsten Di.\x10Di." + + " in {0} Woche\x11Di. in {0} Wochen\x11Di. vor {0} Woche\x12Di. vor {0} W" + + "ochen\x0dDi. in {0} W.\x0eDi. vor {0} W.\x10letzten Mittwoch\x0fdiesen M" + + "ittwoch\x12nächsten Mittwoch\x15Mittwoch in {0} Woche\x16Mittwoch in {0}" + + " Wochen\x16Mittwoch vor {0} Woche\x17Mittwoch vor {0} Wochen\x0bletzten " + + "Mi.\x0adiesen Mi.\x0dnächsten Mi.\x10Mi. in {0} Woche\x11Mi. in {0} Woch" + + "en\x11Mi. vor {0} Woche\x12Mi. vor {0} Wochen\x0dMi. in {0} W.\x0eMi. vo" + + "r {0} W.\x12letzten Donnerstag\x11diesen Donnerstag\x14nächsten Donnerst" + + "ag\x17Donnerstag in {0} Woche\x18Donnerstag in {0} Wochen\x18Donnerstag " + + "vor {0} Woche\x19Donnerstag vor {0} Wochen\x0bletzten Do.\x0adiesen Do." + + "\x0dnächsten Do.\x10Do. in {0} Woche\x11Do. in {0} Wochen\x11Do. vor {0}" + + " Woche\x12Do. vor {0} Wochen\x0dDo. in {0} W.\x0eDo. vor {0} W.\x0fletzt" + + "en Freitag\x0ediesen Freitag\x11nächsten Freitag\x14Freitag in {0} Woche" + + "\x15Freitag in {0} Wochen\x15Freitag vor {0} Woche\x16Freitag vor {0} Wo" + + "chen\x0bletzten Fr.\x0adiesen Fr.\x0dnächsten Fr.\x10Fr. in {0} Woche" + + "\x11Fr. in {0} Wochen\x11Fr. vor {0} Woche\x12Fr. vor {0} Wochen\x0dFr. " + + "in {0} W.\x0eFr. vor {0} W.\x0fletzten Samstag\x0ediesen Samstag\x11näch" + + "sten Samstag\x14Samstag in {0} Woche\x15Samstag in {0} Wochen\x15Samstag" + + " vor {0} Woche\x16Samstag vor {0} Wochen\x0bletzten Sa.\x0adiesen Sa." + + "\x0dnächsten Sa.\x10Sa. in {0} Woche\x11Sa. in {0} Wochen\x11Sa. vor {0}" + + " Woche\x12Sa. vor {0} Wochen\x0dSa. in {0} W.\x0eSa. vor {0} W.\x0cTages" + + "hälfte\x07Tagesh.\x06Stunde\x10in dieser Stunde\x0din {0} Stunde\x0ein {" + + "0} Stunden\x0evor {0} Stunde\x0fvor {0} Stunden\x04Std.\x0bin {0} Std." + + "\x0cvor {0} Std.\x10in dieser Minute\x0din {0} Minute\x0ein {0} Minuten" + + "\x0evor {0} Minute\x0fvor {0} Minuten\x04Min.\x0bin {0} Min.\x0cvor {0} " + + "Min.\x08in {0} m\x09vor {0} m\x05jetzt\x0ein {0} Sekunde\x0fin {0} Sekun" + + "den\x0fvor {0} Sekunde\x10vor {0} Sekunden\x04Sek.\x0bin {0} Sek.\x0cvor" + + " {0} Sek.\x08in {0} s\x09vor {0} s\x08Zeitzone\x06Zeitz.\x08{0} Zeit\x0e" + + "{0} Sommerzeit\x0e{0} Normalzeit\x15Koordinierte Weltzeit\x14Britische S" + + "ommerzeit\x12Irische Sommerzeit\x09Acre-Zeit\x0fAcre-Normalzeit\x0fAcre-" + + "Sommerzeit\x10Afghanistan-Zeit\x18Zentralafrikanische Zeit\x14Ostafrikan" + + "ische Zeit\x15Südafrikanische Zeit\x15Westafrikanische Zeit\x1bWestafrik" + + "anische Normalzeit\x1bWestafrikanische Sommerzeit\x0bAlaska-Zeit\x11Alas" + + "ka-Normalzeit\x11Alaska-Sommerzeit\x0bAlmaty-Zeit\x11Almaty-Normalzeit" + + "\x11Almaty-Sommerzeit\x0dAmazonas-Zeit\x13Amazonas-Normalzeit\x13Amazona" + + "s-Sommerzeit\x1cNordamerikanische Inlandzeit#Nordamerikanische Inland-No" + + "rmalzeit#Nordamerikanische Inland-Sommerzeit Nordamerikanische Ostküsten" + + "zeit'Nordamerikanische Ostküsten-Normalzeit'Nordamerikanische Ostküsten-" + + "Sommerzeit\x13Rocky-Mountain-Zeit\x19Rocky Mountain-Normalzeit\x19Rocky-" + + "Mountain-Sommerzeit!Nordamerikanische Westküstenzeit(Nordamerikanische W" + + "estküsten-Normalzeit(Nordamerikanische Westküsten-Sommerzeit\x0bAnadyr Z" + + "eit\x11Anadyr Normalzeit\x11Anadyr Sommerzeit\x09Apia-Zeit\x0fApia-Norma" + + "lzeit\x0fApia-Sommerzeit\x0aAqtau-Zeit\x10Aqtau-Normalzeit\x10Aqtau-Somm" + + "erzeit\x0cAqtöbe-Zeit\x12Aqtöbe-Normalzeit\x12Aqtöbe-Sommerzeit\x0eArabi" + + "sche Zeit\x14Arabische Normalzeit\x14Arabische Sommerzeit\x12Argentinisc" + + "he Zeit\x18Argentinische Normalzeit\x18Argentinische Sommerzeit\x16Westa" + + "rgentinische Zeit\x1cWestargentinische Normalzeit\x1cWestargentinische S" + + "ommerzeit\x0fArmenische Zeit\x15Armenische Normalzeit\x15Armenische Somm" + + "erzeit\x0dAtlantik-Zeit\x13Atlantik-Normalzeit\x13Atlantik-Sommerzeit" + + "\x18Zentralaustralische Zeit\x1eZentralaustralische Normalzeit\x1eZentra" + + "laustralische Sommerzeit\x1eZentral-/Westaustralische Zeit$Zentral-/West" + + "australische Normalzeit$Zentral-/Westaustralische Sommerzeit\x14Ostaustr" + + "alische Zeit\x1aOstaustralische Normalzeit\x1aOstaustralische Sommerzeit" + + "\x15Westaustralische Zeit\x1bWestaustralische Normalzeit\x1bWestaustrali" + + "sche Sommerzeit\x17Aserbaidschanische Zeit\x1dAserbeidschanische Normalz" + + "eit\x1dAserbaidschanische Sommerzeit\x0bAzoren-Zeit\x11Azoren-Normalzeit" + + "\x11Azoren-Sommerzeit\x10Bangladesch-Zeit\x16Bangladesch-Normalzeit\x16B" + + "angladesch-Sommerzeit\x0bBhutan-Zeit\x12Bolivianische Zeit\x0eBrasília-Z" + + "eit\x14Brasília-Normalzeit\x14Brasília-Sommerzeit\x0bBrunei-Zeit\x0fCabo" + + "-Verde-Zeit\x15Cabo-Verde-Normalzeit\x15Cabo-Verde-Sommerzeit\x0aCasey-Z" + + "eit\x0dChamorro-Zeit\x0cChatham-Zeit\x12Chatham-Normalzeit\x12Chatham-So" + + "mmerzeit\x10Chilenische Zeit\x16Chilenische Normalzeit\x16Chilenische So" + + "mmerzeit\x10Chinesische Zeit\x16Chinesische Normalzeit\x16Chinesische So" + + "mmerzeit\x11Tschoibalsan-Zeit\x17Tschoibalsan-Normalzeit\x17Tschoibalsan" + + "-Sommerzeit\x14Weihnachtsinsel-Zeit\x10Kokosinseln-Zeit\x13Kolumbianisch" + + "e Zeit\x19Kolumbianische Normalzeit\x19Kolumbianische Sommerzeit\x0fCook" + + "inseln-Zeit\x15Cookinseln-Normalzeit\x15Cookinseln-Sommerzeit\x0fKubanis" + + "che Zeit\x15Kubanische Normalzeit\x15Kubanische Sommerzeit\x0aDavis-Zeit" + + "\x17Dumont-d’Urville-Zeit\x0dOsttimor-Zeit\x0fOsterinsel-Zeit\x15Osterin" + + "sel-Normalzeit\x15Osterinsel-Sommerzeit\x14Ecuadorianische Zeit\x17Mitte" + + "leuropäische Zeit\x1dMitteleuropäische Normalzeit\x1dMitteleuropäische S" + + "ommerzeit\x03MEZ\x04MESZ\x14Osteuropäische Zeit\x1aOsteuropäische Normal" + + "zeit\x1aOsteuropäische Sommerzeit\x03OEZ\x04OESZ\x12Kaliningrader Zeit" + + "\x15Westeuropäische Zeit\x1bWesteuropäische Normalzeit\x1bWesteuropäisch" + + "e Sommerzeit\x03WEZ\x04WESZ\x13Falklandinseln-Zeit\x19Falklandinseln-Nor" + + "malzeit\x19Falklandinseln-Sommerzeit\x0cFidschi-Zeit\x12Fidschi-Normalze" + + "it\x12Fidschi-Sommerzeit\x19Französisch-Guayana-Zeit-Französische Süd- u" + + "nd Antarktisgebiete-Zeit\x0eGalapagos-Zeit\x0cGambier-Zeit\x0fGeorgische" + + " Zeit\x15Georgische Normalzeit\x15Georgische Sommerzeit\x13Gilbert-Insel" + + "n-Zeit\x17Mittlere Greenwich-Zeit\x11Ostgrönland-Zeit\x17Ostgrönland-Nor" + + "malzeit\x17Ostgrönland-Sommerzeit\x12Westgrönland-Zeit\x18Westgrönland-N" + + "ormalzeit\x18Westgrönland-Sommerzeit\x09Guam-Zeit\x09Golf-Zeit\x0bGuyana" + + "-Zeit\x13Hawaii-Aleuten-Zeit\x19Hawaii-Aleuten-Normalzeit\x19Hawaii-Aleu" + + "ten-Sommerzeit\x0dHongkong-Zeit\x13Hongkong-Normalzeit\x13Hongkong-Somme" + + "rzeit\x0aChowd-Zeit\x10Chowd-Normalzeit\x10Chowd-Sommerzeit\x0dIndische " + + "Zeit\x14Indischer Ozean-Zeit\x0eIndochina-Zeit\x18Zentralindonesische Ze" + + "it\x14Ostindonesische Zeit\x15Westindonesische Zeit\x0eIranische Zeit" + + "\x14Iranische Normalzeit\x14Iranische Sommerzeit\x0cIrkutsk-Zeit\x12Irku" + + "tsk-Normalzeit\x12Irkutsk-Sommerzeit\x10Israelische Zeit\x16Israelische " + + "Normalzeit\x16Israelische Sommerzeit\x0fJapanische Zeit\x15Japanische No" + + "rmalzeit\x15Japanische Sommerzeit\x10Kamtschatka-Zeit\x16Kamtschatka-Nor" + + "malzeit\x16Kamtschatka-Sommerzeit\x13Ostkasachische Zeit\x14Westkasachis" + + "che Zeit\x10Koreanische Zeit\x16Koreanische Normalzeit\x16Koreanische So" + + "mmerzeit\x0bKosrae-Zeit\x10Krasnojarsk-Zeit\x16Krasnojarsk-Normalzeit" + + "\x16Krasnojarsk-Sommerzeit\x10Kirgisistan-Zeit\x0eSri-Lanka-Zeit\x11Lini" + + "eninseln-Zeit\x0eLord-Howe-Zeit\x14Lord-Howe-Normalzeit\x14Lord-Howe-Som" + + "merzeit\x0aMacau-Zeit\x10Macau-Normalzeit\x10Macau-Sommerzeit\x13Macquar" + + "ieinsel-Zeit\x0cMagadan-Zeit\x12Magadan-Normalzeit\x12Magadan-Sommerzeit" + + "\x10Malaysische Zeit\x0eMalediven-Zeit\x0eMarquesas-Zeit\x13Marshallinse" + + "ln-Zeit\x0eMauritius-Zeit\x14Mauritius-Normalzeit\x14Mauritius-Sommerzei" + + "t\x0bMawson-Zeit\x1eMexiko Nordwestliche Zone-Zeit$Mexiko Nordwestliche " + + "Zone-Normalzeit$Mexiko Nordwestliche Zone-Sommerzeit\x17Mexiko Pazifikzo" + + "ne-Zeit\x1dMexiko Pazifikzone-Normalzeit\x1dMexiko Pazifikzone-Sommerzei" + + "t\x10Ulaanbaatar-Zeit\x16Ulaanbaatar-Normalzeit\x16Ulaanbaatar-Sommerzei" + + "t\x0dMoskauer Zeit\x13Moskauer Normalzeit\x13Moskauer Sommerzeit\x0cMyan" + + "mar-Zeit\x0aNauru-Zeit\x11Nepalesische Zeit\x14Neukaledonische Zeit\x1aN" + + "eukaledonische Normalzeit\x1aNeukaledonische Sommerzeit\x0fNeuseeland-Ze" + + "it\x15Neuseeland-Normalzeit\x15Neuseeland-Sommerzeit\x10Neufundland-Zeit" + + "\x16Neufundland-Normalzeit\x16Neufundland-Sommerzeit\x09Niue-Zeit\x11Nor" + + "folkinsel-Zeit\x18Fernando de Noronha-Zeit\x1eFernando de Noronha-Normal" + + "zeit\x1eFernando de Noronha-Sommerzeit\x18Nördliche-Marianen-Zeit\x10Now" + + "osibirsk-Zeit\x16Nowosibirsk-Normalzeit\x16Nowosibirsk-Sommerzeit\x09Oms" + + "k-Zeit\x0fOmsk-Normalzeit\x0fOmsk-Sommerzeit\x12Pakistanische Zeit\x18Pa" + + "kistanische Normalzeit\x18Pakistanische Sommerzeit\x0aPalau-Zeit\x14Papu" + + "a-Neuguinea-Zeit\x14Paraguayanische Zeit\x1aParaguayanische Normalzeit" + + "\x1aParaguayanische Sommerzeit\x10Peruanische Zeit\x16Peruanische Normal" + + "zeit\x16Peruanische Sommerzeit\x13Philippinische Zeit\x19Philippinische " + + "Normalzeit\x19Philippinische Sommerzeit\x12Phoenixinseln-Zeit\x1eSaint-P" + + "ierre-und-Miquelon-Zeit$Saint-Pierre-und-Miquelon-Normalzeit$Saint-Pierr" + + "e-und-Miquelon-Sommerzeit\x13Pitcairninseln-Zeit\x0bPonape-Zeit\x0fPjöng" + + "jang-Zeit\x0fQuysylorda-Zeit\x15Quysylorda-Normalzeit\x14Qysylorda-Somme" + + "rzeit\x0dRéunion-Zeit\x0cRothera-Zeit\x0dSachalin-Zeit\x13Sachalin-Norma" + + "lzeit\x13Sachalin-Sommerzeit\x0bSamara-Zeit\x11Samara-Normalzeit\x11Sama" + + "ra-Sommerzeit\x0aSamoa-Zeit\x10Samoa-Normalzeit\x10Samoa-Sommerzeit\x0fS" + + "eychellen-Zeit\x0dSingapur-Zeit\x12Salomoninseln-Zeit\x13Südgeorgische Z" + + "eit\x0dSuriname-Zeit\x0aSyowa-Zeit\x0bTahiti-Zeit\x0bTaipeh-Zeit\x11Taip" + + "eh-Normalzeit\x11Taipeh-Sommerzeit\x12Tadschikistan-Zeit\x0cTokelau-Zeit" + + "\x10Tonganische Zeit\x16Tonganische Normalzeit\x16Tonganische Sommerzeit" + + "\x0aChuuk-Zeit\x11Turkmenistan-Zeit\x17Turkmenistan-Normalzeit\x17Turkme" + + "nistan-Sommerzeit\x0bTuvalu-Zeit\x13Uruguayanische Zeit\x18Uruguyanische" + + " Normalzeit\x19Uruguayanische Sommerzeit\x0fUsbekistan-Zeit\x15Usbekista" + + "n-Normalzeit\x15Usbekistan-Sommerzeit\x0cVanuatu-Zeit\x12Vanuatu-Normalz" + + "eit\x12Vanuatu-Sommerzeit\x0eVenezuela-Zeit\x10Wladiwostok-Zeit\x16Wladi" + + "wostok-Normalzeit\x16Wladiwostok-Sommerzeit\x0eWolgograd-Zeit\x14Wolgogr" + + "ad-Normalzeit\x14Wolgograd-Sommerzeit\x0bWostok-Zeit\x0fWake-Insel-Zeit" + + "\x16Wallis-und-Futuna-Zeit\x0cJakutsk-Zeit\x12Jakutsk-Normalzeit\x12Jaku" + + "tsk-Sommerzeit\x12Jekaterinburg-Zeit\x18Jekaterinburg-Normalzeit\x18Jeka" + + "terinburg-Sommerzeit\x02Fe\x02Ma\x02Ab\x02Me\x02Su\x03Sú\x02Ut\x02Se\x02" + + "Ok\x02No\x02De\x02Tu\x02We\x02Th\x02Lu\x02Ju\x02Vi\x06Teqemt\x05Hedar" + + "\x06Tahsas\x06T’er\x06Genbot\x05Hamle\x08Pagumän\x02Lu\x03Má\x03Cé\x03Dé" + + "\x02Ao\x02Sa\x02Lu\x02Ma\x03Mé\x02Xo\x02Ve\x03Sá\x07Februar\x05März\x05A" + + "pril\x03Mai\x04Juni\x04Juli\x08Auguscht\x0aSeptämber\x08Oktoober\x09Novä" + + "mber\x09Dezämber\x02Me\x02Du\x02Sa\x06Mäerz\x07Abrëll\x03Mee\x04Juni\x04" + + "Juli\x06August\x09September\x07Oktober\x08November\x08Dezember\x03Mee" + + "\x02PK\x05Hedar\x06Tahsas\x06Genbot\x05Hamle\x0bOrdibeheszt\x03Tir\x09Sz" + + "ahriwar\x04Mehr\x06Bahman\x06Esfand\x05Koiak\x06Meshir\x07Pashons\x04Epi" + + "p\x0ePi Kogi Enavot\x05Hedar\x07Tahesas\x03Ter\x07Guenbot\x06Säné\x06Ham" + + "lé\x08Nähasé\x08Pagumén\x02Mu\x03Dö\x02Fr\x03Zä\x06n. Chr" + +var bucket24 string = "" + // Size: 10880 bytes + "\x05Jän.\x04Feb.\x05März\x04Apr.\x03Mai\x04Juni\x04Juli\x04Aug.\x04Sep." + + "\x04Okt.\x04Nov.\x04Dez.\x07Jänner\x07Februar\x05April\x06August\x09Sept" + + "ember\x07Oktober\x08November\x08Dezember\x04Jän\x03Feb\x04Mär\x03Apr\x03" + + "Jun\x03Jul\x03Aug\x03Sep\x03Okt\x03Nov\x03Dez\x0eWoche im Monat\x09Wo. i" + + ". M.\x0aW. i. Mon.\x09Tag d. J.\x12Wochentag im Monat\x0fWochent. i. Mo." + + "\x10Wochent. i. Mon.\x04Žan\x03Fee\x03Mar\x03Awi\x02Me\x04Žuw\x04Žuy\x02" + + "Ut\x03Sek\x03Noo\x03Dee\x08Žanwiye\x09Feewiriye\x05Marsi\x06Awiril\x07Žu" + + "weŋ\x06Žuyye\x09Sektanbur\x08Oktoobur\x09Noowanbur\x09Deesanbur\x02Ž\x01" + + "F\x01M\x01A\x01U\x01S\x01O\x01N\x01D\x06Alhadi\x06Atinni\x08Atalaata\x06" + + "Alarba\x08Alhamisi\x06Alzuma\x06Asibti\x02A1\x02A2\x02A3\x02A4\x08Arrubu" + + " 1\x08Arrubu 2\x08Arrubu 3\x08Arrubu 4\x08Subbaahi\x0aZaarikay b\x09Isaa" + + " jine\x0cIsaa zamanoo\x02IJ\x02IZ\x05Zaman\x05Jiiri\x05Handu\x04Hebu\x05" + + "Zaari\x02Bi\x04Hõo\x04Suba\x17Subbaahi/Zaarikay banda\x05Guuru\x06Miniti" + + "\x04Miti\x08Leerazuu\x0cd.M.yy GGGGG\x07januara\x08februara\x06měrca\x06" + + "apryla\x04maja\x06junija\x06julija\x07awgusta\x09septembra\x07oktobra" + + "\x08nowembra\x08decembra\x02nj\x03pó\x02wa\x02sr\x02st\x03pě\x02so\x08nj" + + "eźela\x0bpónjeźele\x08wałtora\x06srjoda\x08stwórtk\x05pětk\x06sobota\x0a" + + "1. kwartal\x0a2. kwartal\x0a3. kwartal\x0a4. kwartal\x0adopołdnja\x0cwót" + + "połdnja\x06wótp.\x1cpśed Kristusowym naroźenim\x19pśed našym licenim cas" + + "a\x1apó Kristusowem naroźenju\x14našogo licenja casa\x0apś.Chr.n.\x0apś." + + "n.l.c.\x0apó Chr.n.\x06n.l.c.\x05d.M.y\x06epocha\x05lěto\x05łoni\x07lěto" + + "sa\x05znowa\x0cza {0} lěto\x0dza {0} lěśe\x0cza {0} lěta\x0bza {0} lět" + + "\x10pśed {0} lětom\x11pśed {0} lětoma\x11pśed {0} lětami\x02l.\x0cpśed {" + + "0} l.\x07kwartal\x0eza {0} kwartal\x0fza {0} kwartala\x0fza {0} kwartale" + + "\x10za {0} kwartalow\x13pśed {0} kwartalom\x14pśed {0} kwartaloma\x14pśe" + + "d {0} kwartalami\x06kwart.\x0dza {0} kwart.\x10pśed {0} kwart.\x0aza {0}" + + " kw.\x0dpśed {0} kw.\x06mjasec\x0eslědny mjasec\x0aten mjasec\x0fpśiducy" + + " mjasec\x0dza {0} mjasec\x0eza {0} mjaseca\x0eza {0} mjasecy\x0fza {0} m" + + "jasecow\x12pśed {0} mjasecom\x13pśed {0} mjasecoma\x13pśed {0} mjasecami" + + "\x05mjas.\x0cza {0} mjas.\x0fpśed {0} mjas.\x07tyźeń\x0fslědny tyźeń\x0b" + + "ten tyźeń\x10pśiducy tyźeń\x0eza {0} tyźeń\x0fza {0} tyźenja\x0fza {0} t" + + "yźenje\x10za {0} tyźenjow\x13pśed {0} tyźenjom\x14pśed {0} tyźenjoma\x14" + + "pśed {0} tyźenjami\x05tyź.\x0cza {0} tyź.\x0fpśed {0} tyź.\x05źeń\x04cor" + + "a\x06źinsa\x06witśe\x0cza {0} źeń\x0bza {0} dnja\x0aza {0} dny\x0cza {0}" + + " dnjow\x0fpśed {0} dnjom\x10pśed {0} dnjoma\x10pśed {0} dnjami\x0bza {0}" + + " dnj.\x0epśed {0} dnj.\x02ź\x09za {0} ź\x0bpśed {0} d\x0eźeń tyźenja\x10" + + "slědnu njeźelu\x0btu njeźelu\x11pśiducu njeźelu\x0cslědnu nje.\x07tu nje" + + ".\x0dpśiducu nje.\x0bslědnu nj.\x06tu nj.\x0cpśiducu nj.\x13slědne pónje" + + "źele\x0eto pónjeźele\x14pśiduce pónjeźele\x0eslědne pónj.\x09to pónj." + + "\x0fpśiduce pónj.\x0cslědne pó.\x07to pó.\x0dpśiduce pó.\x10slědnu wałto" + + "ru\x0btu wałtoru\x11pśiducu wałtoru\x0eslědnu wałt.\x09tu wałt.\x0fpśidu" + + "cu wałt.\x0bslědnu wa.\x06tu wa.\x0cpśiducu wa.\x0eslědnu srjodu\x09tu s" + + "rjodu\x0fpśiducu srjodu\x0cslědnu srj.\x07tu srj.\x0dpśiducu srj.\x0bslě" + + "dnu sr.\x06tu sr.\x0cpśiducu sr.\x10slědny stwórtk\x0cten stwórtk\x11pśi" + + "ducy stwórtk\x0cslědny stw.\x08ten stw.\x0dpśiducy stw.\x0bslědny st." + + "\x07ten st.\x0cpśiducy st.\x0dslědny pětk\x09ten pětk\x0epśiducy pětk" + + "\x0dslědny pět.\x09ten pět.\x0epśiducy pět.\x0cslědny pě.\x08ten pě.\x0d" + + "pśiducy pě.\x0eslědnu sobotu\x09tu sobotu\x0fpśiducu sobotu\x0cslědnu so" + + "b.\x07tu sob.\x0dpśiducu sob.\x0bslědnu so.\x06tu so.\x0cpśiducu so.\x0d" + + "połojca dnja\x08góźina\x0fza {0} góźinu\x10za {0} góźinje\x0fza {0} góźi" + + "ny\x0eza {0} góźin\x12pśed {0} góźinu\x14pśed {0} góźinoma\x14pśed {0} g" + + "óźinami\x06góź.\x0dza {0} góź.\x10pśed {0} góź.\x08za {0} g\x0bpśed {0}" + + " g\x10pśed {0} minutu\x12pśed {0} minutoma\x12pśed {0} minutami\x0epśed " + + "{0} min.\x08za {0} m\x0bpśed {0} m\x11pśed {0} sekundu\x13pśed {0} sekun" + + "doma\x13pśed {0} sekundami\x0epśed {0} sek.\x0bpśed {0} s\x0ccasowe pasm" + + "o\x10Casowe pasmo {0}\x12{0} lěśojski cas\x0e{0} zymski cas\x17Britiski " + + "lěśojski cas\x15Iriski lěśojski cas\x0eAfghaniski cas\x13Srjejźoafriski " + + "cas\x17Pódzajtšnoafriski cas\x19Pódpołdnjowoafriski cas\x17Pódwjacornoaf" + + "riski cas\"Pódwjacornoafriski standardny cas\"Pódwjacornoafriski lěśojsk" + + "i cas\x0eAlaskojski cas\x19Alaskojski standardny cas\x19Alaskojski lěśoj" + + "ski cas\x0eAmaconaski cas\x19Amaconaski standardny cas\x19Amaconaski lěś" + + "ojski cas#Pódpołnocnoameriski centralny cas.Pódpołnocnoameriski centraln" + + "y standardny cas.Pódpołnocnoameriski centralny lěśojski cas&Pódpołnocnoa" + + "meriski pódzajtšny cas1Pódpołnocnoameriski pódzajtšny standardny cas1Pód" + + "połnocnoameriski pódzajtšny lěśojski cas!Pódpołnocnoameriski górski cas," + + "Pódpołnocnoameriski górski standardny cas,Pódpołnocnoameriski górski lěś" + + "ojski cas#Pódpołnocnoameriski pacifiski cas.Pódpołnocnoameriski pacifisk" + + "i standardny cas.Pódpołnocnoameriski pacifiski lěśojski cas\x0bApiaski c" + + "as\x16Apiaski standardny cas\x16Apiaski lěśojski cas\x0cArabiski cas\x17" + + "Arabiski standardny cas\x17Arabiski lěśojski cas\x0fArgentinski cas\x1aA" + + "rgentinski standardny cas\x1aArgentinski lěśojski cas\x1bPódwjacornoarge" + + "ntinski cas&Pódwjacornoargentinski standardny cas&Pódwjacornoargentinski" + + " lěśojski cas\x0dArmeński cas\x18Armeński standardny cas\x18Armeński lěś" + + "ojski cas\x0eAtlantiski cas\x19Atlantiski standardny cas\x19Atlantiski l" + + "ěśojski cas\x16Srjejźoawstralski cas!Srjejźoawstralski standardny cas!S" + + "rjejźoawstralski lěśojski cas#Srjejźopódwjacorny awstralski cas.Srjejźop" + + "ódwjacorny awstralski standardny cas.Srjejźopódwjacorny awstralski lěśo" + + "jski cas\x1aPódzajtšnoawstralski cas%Pódzajtšnoawstralski standardny cas" + + "%Pódzajtšnoawstralski lěśojski cas\x1aPódwjacornoawstralski cas%Pódwjaco" + + "rnoawstralski standardny cas%Pódwjacornoawstralski lěśojski cas\x14Azerb" + + "ajdžaniski cas\x1fAzerbajdžaniski standardny cas\x1fAzerbajdžaniski lěśo" + + "jski cas\x0bAcorski cas\x16Acorski standardny cas\x16Acorski lěśojski ca" + + "s\x11Bangladešski cas\x1cBangladešski standardny cas\x1cBangladešski lěś" + + "ojski cas\x0eBhutański cas\x0dBoliwiski cas\x0dBrasília cas\x18Brasília " + + "standardny cas\x18Brasília lěśojski cas\x0dBruneiski cas\x0eKapverdski c" + + "as\x19Kapverdski standardny cas\x19Kapverdski lěśojski cas\x0eChamorrski" + + " cas\x0eChathamski cas\x19Chathamski standardny cas\x19Chathamski lěśojs" + + "ki cas\x0bChilski cas\x16Chilski standardny cas\x16Chilski lěśojski cas" + + "\x0bChinski cas\x16Chinski standardny cas\x16Chinski lěśojski cas\x12Cho" + + "ibalsański cas\x1dChoibalsański standardny cas\x1dChoibalsański lěśojski" + + " cas\x14cas Gódownych kupow\x14cas Kokosowych kupow\x0eKolumbiski cas" + + "\x19Kolumbiski standardny cas\x19Kolumbiski lěśojski cas\x13cas Cookowyc" + + "h kupow\x1eStandardny cas Cookowych kupow\x1elěśojski cas Cookowych kupo" + + "w\x0dKubański cas\x18Kubański standardny cas\x18Kubański lěśojski cas" + + "\x09Davis cas\x12DumontDUrville cas\x18Pódzajtšnotimorski cas\x14cas Jat" + + "šowneje kupy\x1fstandardny cas Jatšowneje kupy\x1flěśojski cas Jatšowne" + + "je kupy\x0eEkuadorski cas\x14Srjejźoeuropski cas\x1fSrjejźoeuropski stan" + + "dardny cas\x1fSrjejźoeuropski lěśojski cas\x18Pódzajtšnoeuropski cas#Pód" + + "zajtšnoeuropski standardny cas#Pódzajtšnoeuropski lěśojski cas\x12Kalini" + + "ngradski cas\x18Pódwjacornoeuropski cas#Pódwjacornoeuropski standardny c" + + "as#Pódwjacornoeuropski lěśojski cas\x0fFalklandski cas\x1aFalklandski st" + + "andardny cas\x1aFalklandski lěśojski cas\x0dFidźiski cas\x18Fidźiski sta" + + "ndardny cas\x18Fidźiski lěśojski cas\x17Francojskoguyański cas=cas franc" + + "ojskego pódpołdnjowego a antarktiskeho teritoriuma\x0fGalapagoski cas" + + "\x0eGambierski cas\x0dGeorgiski cas\x18Georgiski standardny cas\x18Georg" + + "iski lěśojski cas\x16cas Gilbertowych kupow\x10Greenwichski cas\x1cPódza" + + "jtšnogrönlandski cas'Pódzajtšnogrönlandski standardny cas'Pódzajtšnogrön" + + "landski lěśojski cas\x1cPódwjacornogrönlandski cas'Pódwjacornogrönlandsk" + + "i standardny cas'Pódwjacornogrönlandski lěśojski cas\x14cas Persiskego g" + + "olfa\x0dGuyański cas\x16Hawaiisko-aleutski cas!Hawaiisko-aleutski standa" + + "rdny cas!Hawaiisko-aleutski lěśojski cas\x0fHongkongski cas\x1aHongkongs" + + "ki standardny cas\x1aHongkongski lěśojski cas\x0cChowdski cas\x17Chowdsk" + + "i standardny cas\x17Chowdski lěśojski cas\x0bIndiski cas\x14Indiskoocean" + + "iski cas\x0fIndochinski cas\x15Srjejźoindoneski cas\x15Pódzajtšnoindones" + + "ki\x19Pódwjacornoindoneski cas\x0cIrański cas\x17Irański standardny cas" + + "\x17Irański lěśojski cas\x0cIrkutski cas\x17Irkutski standardny cas\x17I" + + "rkutski lěśojski cas\x0dIsraelski cas\x18Israelski standardny cas\x18Isr" + + "aelski lěśojski cas\x0dJapański cas\x18Japański standardny cas\x18Japańs" + + "ki lěśojski cas\x19Pódzajtšnokazachski cas\x19Pódwjacornokazachski cas" + + "\x0cKorejski cas\x17Korejski standardny cas\x17Korejski lěśojski cas\x0d" + + "Kosraeski cas\x10Krasnojarski cas\x1bKrasnojarski standardny cas\x1bKras" + + "nojarski lěśojski cas\x0cKirgiski cas\x14cas Linijowych kupow\x12cas kup" + + "y Lord-Howe\x1dStandardny cas kupy Lord-Howe\x1dlěśojski cas kupy Lord-H" + + "owe\x12cas kupy Macquarie\x0fMagadański cas\x1aMagadański standardny cas" + + "\x1aMagadański lěśojski cas\x0eMalajziski cas\x0eMalediwski cas\x0dMarqu" + + "eski cas\x17cas Marshallowych kupow\x0eMauriciski cas\x19Mauriciski stan" + + "dardny cas\x19Mauriciski lěśojski cas\x0aMawson cas\x1bMexiski dłujkowja" + + "corny cas&Mexiski dłujkowjacorny standardny cas&Mexiski dłujkowjacorny l" + + "ěśojski cas\x15Mexiski pacifiski cas Mexiski pacifiski standardny cas M" + + "exiski pacifiski lěśojski cas\x11Ulan-Batorski cas\x1cUlan-Batorski stan" + + "dardny cas\x1cUlan-Batorski lěśojski cas\x0dMoskowski cas\x18Moskowski s" + + "tandardny cas\x18Moskowski lěśojski cas\x0eMyanmarski cas\x0cNauruski ca" + + "s\x0cNepalski cas\x13Nowokaledoniski cas\x1eNowokaledoniski standardny c" + + "as\x1eNowokaledoniski lěśojski cas\x12Nowoseelandski cas\x1dNowoseelands" + + "ki standardny cas\x1dNowoseelandski lěśojski cas\x13Nowofundlandski cas" + + "\x1eNowofundlandski standardny cas\x1eNowofundlandski lěśojski cas\x0bNi" + + "ueski cas\x10cas kupy Norfolk\x17cas Fernando de Noronha\"standardny cas" + + " Fernando de Noronha\"lěśojski cas Fernando de Noronha\x10Nowosibirski c" + + "as\x1bNowosibirski standardny cas\x1bNowosibirski lěśojski cas\x09Omski " + + "cas\x14Omski standardny cas\x14Omski lěśojski cas\x10Pakistański cas\x1b" + + "Pakistański standardny cas\x1bPakistański lěśojski cas\x0cPalauski cas" + + "\x16Papua-Nowoginejski cas\x0fParaguayski cas\x1aParaguayski standardny " + + "cas\x1aParaguayski lěśojski cas\x0bPeruski cas\x16Peruski standardny cas" + + "\x16Peruski lěśojski cas\x0eFilipinski cas\x19Filipinski standardny cas" + + "\x19Filipinski lěśojski cas\x16cas Phoenixowych kupow\x1dSt.-Pierre-a-Mi" + + "queloński cas(St.-Pierre-a-Miqueloński standardny cas(St.-Pierre-a-Mique" + + "loński lěśojski cas\x17cas Pitcairnowych kupow\x0cPonapski cas\x0eReunio" + + "nski cas\x0bcas Rothera\x0fSachalinski cas\x1aSachalinski standardny cas" + + "\x1aSachalinski lěśojski cas\x0cSamoaski cas\x17Samoaski standardny cas" + + "\x17Samoaski lěśojski cas\x0eSeychelski cas\x0fSingapurski cas\x0fSalomo" + + "ński cas\x1bPódpołdnjowogeorgiski cas\x0eSurinamski cas\x09Syowa cas" + + "\x0dTahitiski cas\x0fTchajpejski cas\x1aTchajpejski standardny cas\x1aTc" + + "hajpejski lěśojski cas\x0fTadźikiski cas\x0eTokelauski cas\x0cTongaski c" + + "as\x17Tongaski standardny cas\x17Tongaski lěśojski cas\x0cChuukski cas" + + "\x0fTurkmeniski cas\x1aTurkmeniski standardny cas\x1aTurkmeniski lěśojsk" + + "i cas\x0cTuvalski cas\x0eUruguayski cas\x19Uruguayski standardny cas\x19" + + "Uruguayski lěśojski cas\x0dUzbekiski cas\x18Uzbekiski standardny cas\x18" + + "Uzbekiski lěśojski cas\x0dVanuatski cas\x18Vanuatski standardny cas\x18V" + + "anuatski lěśojski cas\x0fVenezuelski cas\x12Wladiwostokski cas\x1dWladiw" + + "ostokski standardny cas\x1dWladiwostokski lěśojski cas\x10Wolgogradski c" + + "as\x1bWolgogradski standardny cas\x1bWolgogradski lěśojski cas\x0acas Wo" + + "stok\x0dcas kupy Wake\x19cas kupow Wallis a Futuna\x0cJakutski cas\x17Ja" + + "kutski standardny cas\x17Jakutski lěśojski cas\x14Jekaterinburgski cas" + + "\x1fJekaterinburgski standardny cas\x1fJekaterinburgski lěśojski cas\x04" + + "meje\x02wu\x03št\x02pj\x02so\x0dza {0} lěće\x10za {0} kwartalej\x03Mar" + + "\x02Me\x02Ut\x03Okt\x01F\x01M\x01A\x01U\x01S\x01O\x01N\x01D\x05Atini\x07" + + "Atalata\x09Alhamiisa\x06Aljuma\x07Assabdu\x0cIsaa jamanoo\x02lu\x02ma" + + "\x03mɛ\x02ye\x02va\x02ms\x02A2\x02A5\x02A6\x02A7\x03Mar\x02Me\x03Okt\x01" + + "F\x01M\x01A\x01U\x01S\x01O\x01N\x01D\x01B\x01L\x01K\x01S\x01T\x01P\x01Y" + + "\x02NJ\x01C\x01V\x02Č\x01R\x01J\x01M\x01T\x01W\x01K\x01G\x01Z\x01L\x01I" + + "\x02Kh\x02Sh\x01Q\x02Dh\x01H\x01E\x03Mar\x03Okt\x01F\x01M\x01A\x01S\x01O" + + "\x01N\x01D\x01I\x02Ɣ\x01C\x01K\x01S\x01T\x01P\x01V\x01H\x02Ö\x01E" + +var bucket25 string = "" + // Size: 19031 bytes + "\x02di\x06ŋgɔn\x05sɔŋ\x04diɓ\x03emi\x04esɔ\x03mad\x04diŋ\x05nyɛt\x03may" + + "\x03tin\x04elá\x09dimɔ́di\x09ŋgɔndɛ\x07sɔŋɛ\x0adiɓáɓá\x08emiasele\x0desɔ" + + "pɛsɔpɛ\x13madiɓɛ́díɓɛ́\x09diŋgindi\x09nyɛtɛki\x0amayésɛ́\x08tiníní\x0bel" + + "áŋgɛ́\x03ét\x06mɔ́s\x03kwa\x03muk\x04ŋgi\x05ɗón\x03esa\x04éti\x08mɔ́sú" + + "\x06kwasú\x0amukɔ́sú\x07ŋgisú\x0aɗónɛsú\x09esaɓasú\x04ndu1\x04ndu2\x04nd" + + "u3\x04ndu4\x14ndúmbū nyá ɓosó\x1endúmbū ní lóndɛ́ íɓaá\x1endúmbū ní lónd" + + "ɛ́ ílálo\x1fndúmbū ní lóndɛ́ ínɛ́y\x06idiɓa\x07ebyámu\x16ɓoso ɓwá yáɓe " + + "lá\x14mbúsa kwédi a Yés\x05ɓ.Ys\x05mb.Ys\x07póndá\x04mbú\x07mɔ́di\x06dis" + + "ama\x07búnyá\x15kíɛlɛ nítómb́í\x0cwɛ́ŋgɛ̄\x08kíɛlɛ\x12mínyá má disama" + + "\x0fepasi a búnyá\x08ŋgandɛ\x07ndɔkɔ\x07píndí\x06Sanvie\x08Fébirie\x04Ma" + + "rs\x06Aburil\x03Mee\x05Sueŋ\x07Súuyee\x02Ut\x09Settembar\x07Oktobar\x08N" + + "ovembar\x08Disambar\x03Dim\x03Ten\x03Tal\x03Ala\x03Ara\x03Arj\x03Sib\x05" + + "Dimas\x06Teneŋ\x06Talata\x07Alarbay\x08Aramisay\x06Arjuma\x06Sibiti\x0dA" + + "riŋuu Yeesu\x0dAtooŋe Yeesu\x03ArY\x03AtY\x07Jamanay\x04Emit\x07Fuleeŋ" + + "\x08Lóokuŋ\x05Funak\x05Fucen\x04Jaat\x05Kajom\x0fBujom / Kalíim5EEEE, G " + + "སྤྱི་ལོ་y MMMM ཚེས་dd0G སྤྱི་ལོ་y MMMM ཚེས་ dd7G སྤྱི་ལོ་y ཟླ་MMM ཚེས་" + + "dd\x03༡\x03༢\x03༣\x03༤\x03༥\x03༦\x03༧\x03༨\x03༩\x06༡༠\x06༡༡\x0212\x014" + + "\x019\x06༡༢\x15ཟླ་དངཔ་\x1eཟླ་གཉིས་པ་\x1eཟླ་གསུམ་པ་\x1bཟླ་བཞི་པ་\x18ཟླ་ལྔ" + + "་པ་\x1bཟླ་དྲུག་པ\x1eཟླ་བདུན་པ་!ཟླ་བརྒྱད་པ་\x1bཟླ་དགུ་པ་\x1bཟླ་བཅུ་པ་*ཟ" + + "ླ་བཅུ་གཅིག་པ་*ཟླ་བཅུ་གཉིས་པ་$སྤྱི་ཟླ་དངཔ་-སྤྱི་ཟླ་གཉིས་པ་-སྤྱི་ཟླ་གསུམ" + + "་པ་'སྤྱི་ཟླ་བཞི་པ'སྤྱི་ཟླ་ལྔ་པ་*སྤྱི་ཟླ་དྲུག་པ-སྤྱི་ཟླ་བདུན་པ་0སྤྱི་ཟླ" + + "་བརྒྱད་པ་*སྤྱི་ཟླ་དགུ་པ་*སྤྱི་ཟླ་བཅུ་པ་9སྤྱི་ཟླ་བཅུ་གཅིག་པ་9སྤྱི་ཟླ་བཅ" + + "ུ་གཉིས་པ་\x09ཟླ་\x0cམིར་\x0cལྷག་\x0cཕུར་\x0cསངས་\x0fསྤེན་\x09ཉི་\x1bབཞ" + + "ི་དཔྱ་༡\x1bབཞི་དཔྱ་༢\x1bབཞི་དཔྱ་༣\x1bབཞི་དཔྱ་༤'བཞི་དཔྱ་དང་པ་-བཞི་དཔྱ་ག" + + "ཉིས་པ་-བཞི་དཔྱ་གསུམ་པ་*བཞི་དཔྱ་བཞི་པ་\x0fསྔ་ཆ་\x12ཕྱི་ཆ་3EEEE, སྤྱི་ལོ" + + "་y MMMM ཚེས་dd.སྤྱི་ལོ་y MMMM ཚེས་ dd5སྤྱི་ལོ་y ཟླ་MMM ཚེས་dd7ཆུ་ཚོད་ " + + "h སྐར་མ་ mm:ss a zzzz4ཆུ་ཚོད་ h སྐར་མ་ mm:ss a z\x1eཆུ་ཚོད་h:mm:ss a/ཆུ་" + + "ཚོད་ h སྐར་མ་ mm a\x18དུས་བསྐལ\x06ལོ&ལོ་འཁོར་ {0} ནང་,ལོ་འཁོར་ {0} ཧེ་" + + "མ་\x0fཟླ་ཝ་\x1aཟླཝ་ {0} ནང་ ཟླཝ་ {0} ཧེ་མ་\x18བདུན་ཕྲག)བངུན་ཕྲག་ {0} ན" + + "ང་/བངུན་ཕྲག་ {0} ཧེ་མ་\x0cཚེས་\x0fཁ་ཉིམ\x0cཁ་ཙ་\x12ད་རིས་\x12ནངས་པ་" + + "\x15གནངས་ཚེ\x1dཉིནམ་ {0} ནང་#ཉིནམ་ {0} ཧེ་མ་-བདུན་ཕྲག་གི་ཉིམ\x1fསྔ་ཆ/ཕྱི" + + "་ཆ་\x12ཆུ་ཚོད#ཆུ་ཚོད་ {0} ནང་)ཆུ་ཚོད་ {0} ཧེ་མ་\x0fསྐར་མ སྐར་མ་ {0} ནང" + + "་&སྐར་མ་ {0} ཧེ་མ་\x15སྐར་ཆཱ་ སྐར་ཆ་ {0} ནང་&སྐར་ཆ་ {0} ཧེ་མ་\x15དུས་ཀ" + + "ུལ\x1b{0}་ཆུ་ཚོད།Hབྲཱི་ཊིཤ་བྱཱར་དུས་ཆུ་ཚོདEཨཱ་ཡརིཤ་བྱཱར་དུས་ཆུ་ཚོད9ཨཕ་" + + "ག་ནི་ས྄ཏཱནཆུ་ཚོདNདབུས་ཕྱོགས་ཨཕ་རི་ཀཱ་ཆུ་ཚོདHཤར་ཕྱོགས་ཨཕ་རི་ཀཱ་ཆུ་ཚོདKལ" + + "ྷོ་ཕྱོགས་ཨཕ་རི་ཀཱ་ཆུ་ཚོདKནུབ་ཕྱོགས་ཨཕ་རི་ཀཱ་ཆུ་ཚོད`ནུབ་ཕྱོགས་ཨཕ་རི་ཀཱ་" + + "ཚད་ལྡན་ཆུ་ཚོདfནུབ་ཕྱོགས་ཨཕ་རི་ཀཱ་བྱཱར་དུས་ཆུ་ཚོད*ཨ་ལསི་ཀ་ཆུ་ཚོད?ཨ་ལསི་" + + "ཀ་ཚད་ལྡན་ཆུ་ཚོདEཨ་ལསི་ཀ་ཉིན་སྲུང་ཆུ་ཚོད0ཨེ་མ་ཛཱོན་ཆུ་ཚོདEཨེ་མ་ཛཱོན་ཚད་" + + "ལྡན་ཆུ་ཚོདKཨེ་མ་ཛཱོན་བྱཱར་དུས་ཆུ་ཚོད]བྱང་ཨ་མི་རི་ཀ་དབུས་ཕྱོགས་ཆུ་ཚོདrབ" + + "ྱང་ཨ་མི་རི་ཀ་དབུས་ཕྱོགས་ཚད་ལྡན་ཆུ་ཚོདxབྱང་ཨ་མི་རི་ཀ་དབུས་ཕྱོགས་ཉིན་སྲུ" + + "ང་ཆུ་ཚོདWབྱང་ཨ་མི་རི་ཀ་ཤར་ཕྱོགས་ཆུ་ཚོདlབྱང་ཨ་མི་རི་ཀ་ཤར་ཕྱོགས་ཚད་ལྡན་ཆ" + + "ུ་ཚོདrབྱང་ཨ་མི་རི་ཀ་ཤར་ཕྱོགས་ཉིན་སྲུང་ཆུ་ཚོདTབྱང་ཨ་མི་རི་ཀ་མའུ་ཊེན་ཆུ་" + + "ཚོདiབྱང་ཨ་མི་རི་ཀ་མའུ་ཊེན་ཚད་ལྡན་ཆུ་ཚོདoབྱང་ཨ་མི་རི་ཀ་མའུ་ཊེན་ཉིན་སྲུང" + + "་ཆུ་ཚོདZབྱང་ཨ་མི་རི་ཀ་པེ་སི་ཕིག་ཆུ་ཚོདoབྱང་ཨ་མི་རི་ཀ་པེ་སི་ཕིག་ཚད་ལྡན་" + + "ཆུ་ཚོདuབྱང་ཨ་མི་རི་ཀ་པེ་སི་ཕིག་ཉིན་སྲུང་ཆུ་ཚོད6ཨ་རེ་བྷི་ཡན་ཆུ་ཚོདKཨ་རེ" + + "་བྷི་ཡན་ཚད་ལྡན་ཆུ་ཚོདEཨ་རེ་བྷི་ཡན་སྲུང་ཆུ་ཚོད6ཨར་ཇེན་ཊི་ན་ཆུ་ཚོདKཨར་ཇེ" + + "ན་ཊི་ན་ཚད་ལྡན་ཆུ་ཚོདQཨར་ཇེན་ཊི་ན་བྱཱར་དུས་ཆུ་ཚོདTནུབ་ཕྱོགས་ཨར་ཇེན་ཊི་ན" + + "་ཆུ་ཚོདiནུབ་ཕྱོགས་ཨར་ཇེན་ཊི་ན་ཚད་ལྡན་ཆུ་ཚོདoནུབ་ཕྱོགས་ཨར་ཇེན་ཊི་ན་བྱཱར" + + "་དུས་ཆུ་ཚོད3ཨར་མི་ནི་ཡ་ཆུ་ཚོདHཨར་མི་ནི་ཡ་ཚད་ལྡན་ཆུ་ཚོདNཨར་མི་ནི་ཡ་བྱཱར" + + "་དུས་ཆུ་ཚོད6ཨེཊ་ལེན་ཊིཀ་ཆུ་ཚོདKཨེཊ་ལེན་ཊིཀ་ཚད་ལྡན་ཆུ་ཚོདQཨེཊ་ལེན་ཊིཀ་ཉ" + + "ིན་སྲུང་ཆུ་ཚོད`དབུས་ཕྱོགས་ཨཱོས་ཊྲེལ་ལི་ཡ་ཆུ་ཚོདuདབུས་ཕྱོགས་ཨཱོས་ཊྲེལ་ལ" + + "ི་ཡ་ཚད་ལྡན་ཆུ་ཚོད{དབུས་ཕྱོགས་ཨཱོས་ཊྲེལ་ལི་ཡ་ཉིན་སྲུང་ཆུ་ཚོདiབུས་ནུབ་ཕྱ" + + "ོགས་ཨཱོས་ཊྲེལ་ལི་ཡ་ཆུ་ཚོད\x81དབུས་ནུབ་ཕྱོགས་ཨཱོས་ཊྲེལ་ལི་ཡ་ཚད་ལྡན་ཆུ་ཚ" + + "ོད\x87དབུས་ནུབ་ཕྱོགས་ཨཱོས་ཊྲེལ་ལི་ཡ་ཉིན་སྲུང་ཆུ་ཚོདlཤར་ཕྱོགས་ཕྱོགས་ཨཱོ" + + "ས་ཊྲེལ་ལི་ཡ་ཆུ་ཚོད\x81ཤར་ཕྱོགས་ཕྱོགས་ཨཱོས་ཊྲེལ་ལི་ཡ་ཚད་ལྡན་ཆུ་ཚོད\x87ཤ" + + "ར་ཕྱོགས་ཕྱོགས་ཨཱོས་ཊྲེལ་ལི་ཡ་ཉིན་སྲུང་ཆུ་ཚོད]ནུབ་ཕྱོགས་ཨཱོས་ཊྲེལ་ལི་ཡ་" + + "ཆུ་ཚོདrནུབ་ཕྱོགས་ཨཱོས་ཊྲེལ་ལི་ཡ་ཚད་ལྡན་ཆུ་ཚོདxནུབ་ཕྱོགས་ཨཱོས་ཊྲེལ་ལི་ཡ" + + "་ཉིན་སྲུང་ཆུ་ཚོད<ཨ་ཛར་བྷའི་ཇཱན་ཆུ་ཚོདQཨ་ཛར་བྷའི་ཇཱན་ཚད་ལྡན་ཆུ་ཚོདWཨ་ཛར" + + "་བྷའི་ཇཱན་བྱཱར་དུས་ཆུ་ཚོད*ཨེ་ཛོརས་ཆུ་ཚོད?ཨེ་ཛོརས་ཚད་ལྡན་ཆུ་ཚོདEཨེ་ཛོརས" + + "་བྱཱར་དུས་ཆུ་ཚོད0བངྒ་ལ་དེཤ་ཆུ་ཚོདEབངྒ་ལ་དེཤ་ཚད་ལྡན་ཆུ་ཚོདKབངྒ་ལ་དེཤ་བྱ" + + "ཱར་དུས་ཆུ་ཚོད0འབྲུག་ཡུལ་ཆུ་ཚོད6བྷོ་ལི་བི་ཡ་ཆུ་ཚོད3བྲ་ཛི་ལི་ཡ་ཆུ་ཚོདHབྲ" + + "་ཛི་ལི་ཡ་ཚད་ལྡན་ཆུ་ཚོདNབྲ་ཛི་ལི་ཡ་བྱཱར་དུས་ཆུ་ཚོད*ཀེཔ་བཱཌ་ཆུ་ཚོད?ཀེཔ་བ" + + "ཱཌ་ཚད་ལྡན་ཆུ་ཚོདEཀེཔ་བཱཌ་བྱཱར་དུས་ཆུ་ཚོད$ཅི་ལི་ཆུ་ཚོད9ཅི་ལི་ཚད་ལྡན་ཆུ་" + + "ཚོད?ཅི་ལི་བྱཱར་དུས་ཆུ་ཚོད'རྒྱ་ནག་ཆུ་ཚོད<རྒྱ་ནག་ཚད་ལྡན་ཆུ་ཚོདBརྒྱ་ནག་ཉི" + + "ན་སྲུང་ཆུ་ཚོདQཁི་རིསྟ་མེས་མཚོ་གླིང་ཆུ་ཚོད9ཀོ་ལོམ་བྷི་ཡ་ཆུ་ཚོདNཀོ་ལོམ་བ" + + "ྷི་ཡ་ཚད་ལྡན་ཆུ་ཚོདTཀོ་ལོམ་བྷི་ཡ་བྱཱར་དུས་ཆུ་ཚོད*ཀིའུ་བྷ་ཆུ་ཚོད?ཀིའུ་བྷ" + + "་ཚད་ལྡན་ཆུ་ཚོདEཀིའུ་བྷ་ཉིན་སྲུང་ཆུ་ཚོདHཨིསི་ཊར་ཨཱའི་ལེནཌ་ཆུ་ཚོད]ཨིསི་ཊ" + + "ར་ཨཱའི་ལེནཌ་ཚད་ལྡན་ཆུ་ཚོདcཨིསི་ཊར་ཨཱའི་ལེནཌ་བྱཱར་དུས་ཆུ་ཚོད-ཨེ་ཀུ་ཌཽ་ཆ" + + "ུ་ཚོདQདབུས་ཕྱོགས་ཡུ་རོ་པེན་ཆུ་ཚོདfདབུས་ཕྱོགས་ཡུ་རོ་པེན་ཚད་ལྡན་ཆུ་ཚོདlད" + + "བུས་ཕྱོགས་ཡུ་རོ་པེན་བྱཱར་དུས་ཆུ་ཚོདKཤར་ཕྱོགས་ཡུ་རོ་པེན་ཆུ་ཚོད`ཤར་ཕྱོགས" + + "་ཡུ་རོ་པེན་ཚད་ལྡན་ཆུ་ཚོདfཤར་ཕྱོགས་ཡུ་རོ་པེན་བྱཱར་དུས་ཆུ་ཚོདNནུབ་ཕྱོགས་" + + "ཡུ་རོ་པེན་ཆུ་ཚོདcནུབ་ཕྱོགས་ཡུ་རོ་པེན་ཚད་ལྡན་ཆུ་ཚོདiནུབ་ཕྱོགས་ཡུ་རོ་པེན" + + "་བྱཱར་དུས་ཆུ་ཚོདNཕལཀ་ལེནཌ་ཨཱའི་ལེནཌས་ཆུ་ཚོདcཕལཀ་ལེནཌ་ཨཱའི་ལེནཌས་ཚད་ལྡན" + + "་ཆུ་ཚོདiཕལཀ་ལེནཌ་ཨཱའི་ལེནཌས་བྱཱར་དུས་ཆུ་ཚོད<ཕིརེནཅ་གི་ཡ་ན་ཆུ་ཚོད3ག་ལ་པ" + + "་གོསི་ཆུ་ཚོད$ཇཽ་ཇཱ་ཆུ་ཚོད9ཇཽ་ཇཱ་ཚད་ལྡན་ཆུ་ཚོད?ཇཽ་ཇཱ་བྱཱར་དུས་ཆུ་ཚོདQགི" + + "རིན་ཝིཆ་ལུ་ཡོད་པའི་ཆུ་ཚོདNཤར་ཕྱོགས་གིརིན་ལེནཌ་ཆུ་ཚོདcཤར་ཕྱོགས་གིརིན་ལེ" + + "ནཌ་ཚད་ལྡན་ཆུ་ཚོདiཤར་ཕྱོགས་གིརིན་ལེནཌ་བྱཱར་དུས་ཆུ་ཚོདQནུབ་ཕྱོགས་གིརིན་ལ" + + "ེནཌ་ཆུ་ཚོདfནུབ་ཕྱོགས་གིརིན་ལེནཌ་ཚད་ལྡན་ཆུ་ཚོདlནུབ་ཕྱོགས་གིརིན་ལེནཌ་བྱཱ" + + "ར་དུས་ཆུ་ཚོད$གཱལཕི་ཆུ་ཚོད'གུ་ཡ་ན་ཆུ་ཚོདIཧ་ཝའི་-ཨེ་ལིའུ་ཤེན་ཆུ་ཚོད^ཧ་ཝའ" + + "ི་-ཨེ་ལིའུ་ཤེན་ཚད་ལྡན་ཆུ་ཚོདdཧ་ཝའི་-ཨེ་ལིའུ་ཤེན་ཉིན་སྲུང་ཆུ་ཚོད'རྒྱ་གར" + + "་ཆུ་ཚོདKརྒྱ་གར་གྱི་རྒྱ་མཚོ་ཆུ་ཚོད<ཨིན་ཌོ་ཅཱའི་ན་ཆུ་ཚོད`དབུས་ཕྱོགས་ཨིན་" + + "ཌོ་ནེ་ཤི་ཡ་ཆུ་ཚོདZཤར་ཕྱོགས་ཨིན་ཌོ་ནེ་ཤི་ཡ་ཆུ་ཚོད]ནུབ་ཕྱོགས་ཨིན་ཌོ་ནེ་ཤ" + + "ི་ཡ་ཆུ་ཚོད'ཨི་རཱན་ཆུ་ཚོད<ཨི་རཱན་ཚད་ལྡན་ཆུ་ཚོདBཨི་རཱན་ཉིན་སྲུང་ཆུ་ཚོད*ཨ" + + "ར་ཀུཙི་ཆུ་ཚོད?ཨར་ཀུཙི་ཚད་ལྡན་ཆུ་ཚོདEཨར་ཀུཙི་བྱཱར་དུས་ཆུ་ཚོད*ཨིས་རེལ་ཆུ" + + "་ཚོད?ཨིས་རེལ་ཚད་ལྡན་ཆུ་ཚོདEཨིས་རེལ་ཉིན་སྲུང་ཆུ་ཚོད$ཇ་པཱན་ཆུ་ཚོད9ཇ་པཱན་" + + "ཚད་ལྡན་ཆུ་ཚོད?ཇ་པཱན་ཉིན་སྲུང་ཆུ་ཚོད*ཀོ་རི་ཡ་ཆུ་ཚོད?ཀོ་རི་ཡ་ཚད་ལྡན་ཆུ་ཚ" + + "ོདEཀོ་རི་ཡ་ཉིན་སྲུང་ཆུ་ཚོད<ཀརསི་ནོ་ཡརསཀི་ཆུ་ཚོདQཀརསི་ནོ་ཡརསཀི་ཚད་ལྡན་ཆ" + + "ུ་ཚོདWཀརསི་ནོ་ཡརསཀི་བྱཱར་དུས་ཆུ་ཚོད-མ་གྷ་དཱན་ཆུ་ཚོདBམ་གྷ་དཱན་ཚད་ལྡན་ཆུ" + + "་ཚོདHམ་གྷ་དཱན་བྱཱར་དུས་ཆུ་ཚོད-མཱལ་དིབས་ཆུ་ཚོད0མོ་རི་ཤཱས་ཆུ་ཚོདEམོ་རི་ཤ" + + "ཱས་ཚད་ལྡན་ཆུ་ཚོདKམོ་རི་ཤཱས་བྱཱར་དུས་ཆུ་ཚོད'མཽས་ཀོ་ཆུ་ཚོད<མཽས་ཀོ་ཚད་ལྡན" + + "་ཆུ་ཚོདBམཽས་ཀོ་བྱཱར་དུས་ཆུ་ཚོད'ནེ་པཱལ་ཆུ་ཚོད9ནིའུ་ཛི་ལེནཌ་ཆུ་ཚོདNནིའུ་" + + "ཛི་ལེནཌ་ཚད་ལྡན་ཆུ་ཚོདTནིའུ་ཛི་ལེནཌ་ཉིན་སྲུང་ཆུ་ཚོདBནིའུ་ཕའུནཌ་ལེནཌ་ཆུ་" + + "ཚོདWནིའུ་ཕའུནཌ་ལེནཌ་ཚད་ལྡན་ཆུ་ཚོད]ནིའུ་ཕའུནཌ་ལེནཌ་ཉིན་སྲུང་ཆུ་ཚོདYཕར་ན" + + "ེན་ཌོ་ ཌི་ ནོ་རཱོན་ཧ་ཆུ་ཚོདnཕར་ནེན་ཌོ་ ཌི་ ནོ་རཱོན་ཧ་ཚད་ལྡན་ཆུ་ཚོདtཕར་" + + "ནེན་ཌོ་ ཌི་ ནོ་རཱོན་ཧ་བྱཱར་དུས་ཆུ་ཚོདBནོ་བོ་སི་བིརསཀི་ཆུ་ཚོདWནོ་བོ་སི་" + + "བིརསཀི་ཚད་ལྡན་ཆུ་ཚོད]ནོ་བོ་སི་བིརསཀི་བྱཱར་དུས་ཆུ་ཚོད'ཨོམསཀི་ཆུ་ཚོད<ཨོམ" + + "སཀི་ཚད་ལྡན་ཆུ་ཚོདBཨོམསཀི་བྱཱར་དུས་ཆུ་ཚོད3པ་ཀི་ས྄ཏཱན་ཆུ་ཚོདHཔ་ཀི་ས྄ཏཱན་" + + "ཚད་ལྡན་ཆུ་ཚོདNཔ་ཀི་ས྄ཏཱན་བྱཱར་དུས་ཆུ་ཚོད3པ་ར་གུ་ཝའི་ཆུ་ཚོདHཔ་ར་གུ་ཝའི་" + + "ཚད་ལྡན་ཆུ་ཚོདNཔ་ར་གུ་ཝའི་བྱཱར་དུས་ཆུ་ཚོད!པ་རུ་ཆུ་ཚོད6པ་རུ་ཚད་ལྡན་ཆུ་ཚོ" + + "ད<པ་རུ་བྱཱར་དུས་ཆུ་ཚོདQཔའི་རི་དང་མི་ཀི་ལཱོན་ཆུ་ཚོདfཔའི་རི་དང་མི་ཀི་ལཱོ" + + "ན་ཚད་ལྡན་ཆུ་ཚོདlཔའི་རི་དང་མི་ཀི་ལཱོན་ཉིན་སྲུང་ཆུ་ཚོད9རི་ཡུ་ནི་ཡཱན་ཆུ་ཚ" + + "ོད*ས་ཁ་ལིན་ཆུ་ཚོད?ས་ཁ་ལིན་ཚད་ལྡན་ཆུ་ཚོདEས་ཁ་ལིན་བྱཱར་དུས་ཆུ་ཚོད*སེ་ཤཱལ" + + "ས་ཆུ་ཚོད0སུ་རི་ནཱམ་ཆུ་ཚོད<ཡུ་རུ་གུ་ཝཱའི་ཆུ་ཚོདQཡུ་རུ་གུ་ཝཱའི་ཚད་ལྡན་ཆུ" + + "་ཚོདWཡུ་རུ་གུ་ཝཱའི་བྱཱར་དུས་ཆུ་ཚོད<བེ་ནི་ཛུ་ཝེ་ལ་ཆུ་ཚོདBབ་ལ་ཌི་བོསི་ཏོ" + + "ཀ་ཆུ་ཚོདWབ་ལ་ཌི་བོསི་ཏོཀ་ཚད་ལྡན་ཆུ་ཚོད]བ་ལ་ཌི་བོསི་ཏོཀ་བྱཱར་དུས་ཆུ་ཚོད" + + "<བཱོལ་གོ་གིརེཌ་ཆུ་ཚོདQབཱོལ་གོ་གིརེཌ་ཚད་ལྡན་ཆུ་ཚོདWབཱོལ་གོ་གིརེཌ་བྱཱར་དུས" + + "་ཆུ་ཚོད-ཡ་ཀུཙིཀི་ཆུ་ཚོདBཡ་ཀུཙིཀི་ཚད་ལྡན་ཆུ་ཚོདHཡ་ཀུཙིཀི་བྱཱར་དུས་ཆུ་ཚོ" + + "དBཡེ་ཀ་ཏེ་རིན་བརག་ཆུ་ཚོདWཡེ་ཀ་ཏེ་རིན་བརག་ཚད་ལྡན་ཆུ་ཚོད]ཡེ་ཀ་ཏེ་རིན་བརག" + + "་བྱཱར་དུས་ཆུ་ཚོད\x02lu\x02ma\x02me\x03ĵa\x02ve\x02sa\x02lu\x02ma\x02je" + + "\x02sa\x03Pos\x03Pir\x03Tat\x03Nai\x03Sha\x03Sab" + +var bucket26 string = "" + // Size: 11814 bytes + "\x02BT\x03Mbe\x03Kai\x03Kat\x03Kan\x03Gat\x03Gan\x03Mug\x03Knn\x03Ken" + + "\x03Iku\x03Imw\x03Igi\x0eMweri wa mbere\x0fMweri wa kaĩri\x11Mweri wa ka" + + "thatũ\x0dMweri wa kana\x0fMweri wa gatano\x13Mweri wa gatantatũ\x12Mweri" + + " wa mũgwanja\x0fMweri wa kanana\x0eMweri wa kenda\x0fMweri wa ikũmi\x18M" + + "weri wa ikũmi na ũmwe\x1aMweri wa ikũmi na Kaĩrĩ\x03Kma\x03Tat\x03Ine" + + "\x03Tan\x03Arm\x03Maa\x03NMM\x06Kiumia\x09Njumatatu\x08Njumaine\x09Njuma" + + "tano\x08Aramithi\x06Njumaa\x0bNJumamothii\x0eKuota ya mbere\x10Kuota ya " + + "Kaĩrĩ\x10Kuota ya kathatu\x0dKuota ya kana\x02KI\x02UT\x0fMbere ya Krist" + + "o\x10Thutha wa Kristo\x02MK\x02TK\x06Ivinda\x05Mweri\x09Mũthenya\x06Ĩgor" + + "o\x0aŨmũnthĩ\x07Rũciũ\x15Mũthenya kiumia-inĩ\x05Ithaa\x08Ndagĩka\x07Gĩth" + + "aa\x03dzv\x03dzd\x03ted\x04afɔ\x03dam\x03mas\x03sia\x03dea\x03any\x03kel" + + "\x03ade\x03dzm\x05dzove\x06dzodze\x06tedoxe\x09afɔfiẽ\x05damɛ\x04masa" + + "\x08siamlɔm\x0adeasiamime\x09anyɔnyɔ\x04kele\x0dadeɛmekpɔxe\x05dzome\x15" + + "EEEE, U MMMM dd 'lia'\x0eU MMMM d 'lia'\x0dU MMM d 'lia'\x03foa\x06ƒoave" + + "\x04ƒoa\x07afɔfie\x16EEEE, MMMM d 'lia' y G\x10MMMM d 'lia' y G\x10MMM d" + + " 'lia', y G\x08afɔfĩe\x04dama\x04kɔs\x03dzo\x03bla\x04kuɖ\x03yaw\x04fiɖ" + + "\x03mem\x08kɔsiɖa\x06dzoɖa\x06blaɖa\x05kuɖa\x07yawoɖa\x05fiɖa\x08memleɖa" + + "\x02k1\x02k2\x02k3\x02k4\x0dkɔta gbãtɔ\x0ckɔta evelia\x0fkɔta etɔ̃lia" + + "\x0ckɔta enelia\x04ŋdi\x07ɣetrɔ\x07fɔŋli\x05ŋdɔ\x05fiẽ\x03zã\x02ɣ\x0cHaf" + + "i Yesu Va\x03Bŋ\x0bYesu ŋɔli\x03HYV\x03Yŋ\x03Eŋ\x02hY\x14EEEE, MMMM d 'l" + + "ia' y\x0eMMMM d 'lia' y\x0eMMM d 'lia', y\x13a 'ga' h:mm:ss zzzz\x10a 'g" + + "a' h:mm:ss z\x0ea 'ga' h:mm:ss\x0ba 'ga' h:mm\x07{0} {1}\x09dasiamime" + + "\x18EEEE, MMMM dd 'lia', G y\x11MMMM d 'lia', G y\x10MMM d 'lia', G y" + + "\x0edd-MM-GGGGG yy\x0bhafi R.O.C.\x0ddd-MM-GGGGG y\x06ŋɔli\x03ƒe\x0cƒe s" + + "i va yi\x07ƒe sia\x0eƒe si gbɔ na\x0dle ƒe {0} me\x10ƒe {0} si va yi\x13" + + "ƒe {0} si wo va yi\x16le ƒe {0} si va yi me\x17le ƒe {0} si gbɔna me" + + "\x13ƒe {0} si va yi me\x05kɔta\x1ale kɔta {0} si gbɔ na me\x15kɔta {0} s" + + "i va yi me\x19le kɔta {0} si gbɔna me\x06ɣleti\x0fɣleti si va yi\x0aɣlet" + + "i sia\x11ɣleti si gbɔ na\x10le ɣleti {0} me\x13le ɣleti {0} wo me\x13ɣle" + + "ti {0} si va yi\x16ɣleti {0} si wo va yi\x0ekɔsiɖa ɖeka\x11kɔsiɖa si va " + + "yi\x0ckɔsiɖa sia\x13kɔsiɖa si gbɔ na\x12le kɔsiɖa {0} me\x15le kɔsiɖa {0" + + "} wo me\x15kɔsiɖa {0} si va yi\x18kɔsiɖa {0} si wo va yi\x06ŋkeke\x10nyi" + + "tsɔ si va yi\x0eetsɔ si va yi\x04egbe\x0fetsɔ si gbɔna\x11nyitsɔ si gbɔn" + + "a\x10le ŋkeke {0} me\x13le ŋkeke {0} wo me\x13ŋkeke {0} si va yi\x16ŋkek" + + "e {0} si wo va yi\x12kɔsiɖa me ŋkeke\x14kɔsiɖagbe si va yi\x10kɔsiɖa sia" + + " gbe\x16kɔsiɖagbe si gbɔ na\x0fdzoɖa si va yi\x0adzoɖa sia\x11dzoɖa si g" + + "bɔ na\x0fblaɖa si va yi\x0ablaɖa sia\x11blaɖa si gbɔ na\x0ekuɖa si va yi" + + "\x09kuɖa sia\x10kuɖa si gbɔ na\x10yawoɖa si va yi\x0byawoɖa sia\x12yawoɖ" + + "a si gbɔ na\x0efiɖa si va yi\x09fiɖa sia\x10fiɖa si gbɔ na\x11memleɖa si" + + " va yi\x0cmemleɖa sia\x13memleɖa si gbɔ na\x0aŋkekea me\x08gaƒoƒo\x12le " + + "gaƒoƒo {0} me\x15le gaƒoƒo {0} wo me\x15gaƒoƒo {0} si va yi\x18gaƒoƒo {0" + + "} si wo va yi\x0caɖabaƒoƒo\x16le aɖabaƒoƒo {0} me\x19le aɖabaƒoƒo {0} wo" + + " me\x19aɖabaƒoƒo {0} si va yi\x1caɖabaƒoƒo {0} si wo va yi\x06sekend\x04" + + "fifi\x10le sekend {0} me\x13le sekend {0} wo me\x13sekend {0} si va yi" + + "\x16sekend {0} si wo va yi\x0enutomegaƒoƒo\x0f{0} gaƒoƒo me\x14{0} kele " + + "gaƒoƒo me\x16{0} nutome gaƒoƒo me\x19Xexeme gaƒoƒoɖoanyi me\x1fBritish d" + + "zomeŋɔli gaƒoƒo me\x1aIreland nutome gaƒoƒo me\x0fEker gaƒoƒome\x16Eker " + + "gaƒoƒoɖoanyime\x1bEker dzomeŋɔli gaƒoƒome\x17Afghanistan gaƒoƒo me\x1aCe" + + "ntral Africa gaƒoƒo me\x17East Africa gaƒoƒo me\x1fSouth Africa nutome g" + + "aƒoƒo me\x17West Africa gaƒoƒo me\x1eWest Africa nutome gaƒoƒo me#West A" + + "frica dzomeŋɔli gaƒoƒo me\x11Alaska gaƒoƒome\x19Alaska nutome gaƒoƒo me" + + "\x17Alaska kele gaƒoƒo me\x11Almati gaƒoƒome\x18Almati gaƒoƒoɖoanyime" + + "\x1dAlmati dzomeŋɔli gaƒoƒome\x11Amazon gaƒoƒome\x19Amazon nutome gaƒoƒo" + + " me\x1eAmazon dzomeŋɔli gaƒoƒo me\x19Titina America gaƒoƒome!Titina Amer" + + "ica nutome gaƒoƒo me\x1fTitina America kele gaƒoƒo me\x1bEastern America" + + " gaƒoƒo me\"Eastern America nutome gaƒoƒo me Eastern America kele gaƒoƒo" + + " me\x14Mountain gaƒoƒo me\x1bMountain nutome gaƒoƒo me\x19Mountain kele " + + "gaƒoƒo me\x12Pacific gaƒoƒome\x1aPacific nutome gaƒoƒo me\x18Pacific kel" + + "e gaƒoƒo me\x11Anadir gaƒoƒome\x18Anadir gaƒoƒoɖoanyime\x1aAnadir ŋkekem" + + "e gaƒoƒome\x10Apia gaƒoƒo me\x17Apia nutome gaƒoƒo me\x15Apia kele gaƒoƒ" + + "o me\x10Aktau gaƒoƒome\x17Aktau gaƒoƒoɖoanyime\x1cAktau dzomeŋɔli gaƒoƒo" + + "me\x11Aktobe gaƒoƒome\x18Aktobe gaƒoƒoɖoanyime\x12Akttobe gaƒoƒome\x12Ar" + + "abia gaƒoƒo me\x19Arabia nutome gaƒoƒo me\x1eArabia dzomeŋɔli gaƒoƒo me" + + "\x15Argentina gaƒoƒo me\x1cArgentina nutome gaƒoƒo me!Argentina dzomeŋɔl" + + "i gaƒoƒo me!Ɣetoɖoƒe Argentina gaƒoƒo me(Ɣetoɖoƒe Argentina nutome gaƒoƒ" + + "o me-Ɣetoɖoƒe Argentina dzomeŋɔli gaƒoƒo me\x13Armenia gaƒoƒo me\x1aArme" + + "nia nutome gaƒoƒo me\x1fArmenia dzomeŋɔli gaƒoƒo me\x13Atlantic gaƒoƒome" + + "\x1aAtlantic nutome gaƒoƒome\x18Atlantic kele gaƒoƒome\x1dCentral Austra" + + "lia gaƒoƒo me%Australian Central nutome gaƒoƒo me&Australian Central dzo" + + "meli gaƒoƒo me3Australian Central Australia ɣetoɖofe gaƒoƒo me-Australia" + + "n Central Western nutome gaƒoƒo me+Australian Central Western kele gaƒoƒ" + + "o me\x1dEastern Australia gaƒoƒo me%Australian Eastern nutome gaƒoƒo me#" + + "Australian Eastern kele gaƒoƒo me\x1dWestern Australia gaƒoƒo me%Austral" + + "ian Western nutome gaƒoƒo me#Australian Western kele gaƒoƒo me\x16Azerba" + + "ijan gaƒoƒo me\x1dAzerbaijan nutome gaƒoƒo me\"Azerbaijan dzomeŋɔli gaƒo" + + "ƒo me\x12Azores gaƒoƒo me\x19Azores nutome gaƒoƒo me\x1eAzores dzomeŋɔl" + + "i gaƒoƒo me\x16Bangladesh gaƒoƒo me\x1dBangladesh nutome gaƒoƒo me\"Bang" + + "ladesh dzomeŋɔli gaƒoƒo me\x12Bhutan gaƒoƒo me\x13Bolivia gaƒoƒo me\x14B" + + "rasilia gaƒoƒo me\x1bBrasilia nutome gaƒoƒo me Brasilia dzomeŋɔli gaƒoƒo" + + " me\x1dBrunei Darussalam gaƒoƒo me\x16Cape Verde gaƒoƒo me\x1dCape Verde" + + " nutome gaƒoƒo me\"Cape Verde dzomeŋɔli gaƒoƒo me\x14Chamorro gaƒoƒo me" + + "\x13Chatham gaƒoƒo me\x1aChatham nutome gaƒoƒo me\x18Chatham kele gaƒoƒo" + + " me\x11Chile gaƒoƒo me\x18Chile nutome gaƒoƒo me\x1dChile dzomeŋɔli gaƒo" + + "ƒo me\x11China gaƒoƒo me\x18China nutome gaƒoƒo me\x16China kele gaƒoƒo" + + " me\x16Choibalsan gaƒoƒo me\x1dChoibalsan nutome gaƒoƒo me\"Choibalsan d" + + "zomeŋɔli gaƒoƒo me\x1cChristmas Island gaƒoƒo me\x19Cocos Islands gaƒoƒo" + + " me\x14Colombia gaƒoƒo me\x1bColombia nutome gaƒoƒo me Colombia dzomeŋɔl" + + "i gaƒoƒo me\x18Cook Islands gaƒoƒo me\x1fCook Islands nutome gaƒoƒo me$C" + + "ook Islands dzomeŋɔli gaƒoƒo me\x0fCuba gaƒoƒome\x16Cuba nutome gaƒoƒome" + + "\x14Cuba kele gaƒoƒome\x11Davis gaƒoƒo me\x1eDumont-d’Urville gaƒoƒo me" + + "\x16East Timor gaƒoƒo me\x19Easter Island gaƒoƒo me Easter Island nutome" + + " gaƒoƒo me%Easter Island dzomeŋɔli gaƒoƒo me\x13Ecuador gaƒoƒo me\x1aCen" + + "tral Europe gaƒoƒo me!Central Europe nutome gaƒoƒo me&Central Europe dzo" + + "meŋɔli gaƒoƒo me\x1bƔedzeƒe Europe gaƒoƒome\"Ɣedzeƒe Europe gaƒoƒoɖoanyi" + + "me$Ɣedzeƒe Europe ŋkekeme gaƒoƒome\x1aWestern Europe gaƒoƒo me!Western E" + + "urope nutome gaƒoƒo me&Western Europe dzomeŋɔli gaƒoƒo me\x1cFalkland Is" + + "lands gaƒoƒo me#Falkland Islands nutome gaƒoƒo me(Falkland Islands dzome" + + "ŋɔli gaƒoƒo me\x10Fiji gaƒoƒo me\x17Fiji nutome gaƒoƒo me\x1cFiji dzome" + + "ŋɔli gaƒoƒo me\x19French Guiana gaƒoƒo me'French Southern & Antarctic g" + + "aƒoƒo me\x15Galapagos gaƒoƒo me\x13Gambier gaƒoƒo me\x13Georgia gaƒoƒo m" + + "e\x1aGeorgia nutome gaƒoƒo me\x1fGeorgia dzomeŋɔli gaƒoƒo me\x1bGilbert " + + "Islands gaƒoƒo me\x15Greenwich gaƒoƒo me\x19East Greenland gaƒoƒome!East" + + " Greenland nutome gaƒoƒo me&East Greenland dzomeŋɔli gaƒoƒo me\x1aWest G" + + "reenland gaƒoƒo me!West Greenland nutome gaƒoƒo me\x1fWest Greenland kel" + + "e gaƒoƒo me\x17Gulf nutome gaƒoƒo me\x12Guyana gaƒoƒo me\x1aHawaii-Aleut" + + "ia gaƒoƒo me!Hawaii-Aleutia nutome gaƒoƒo me\x1fHawaii-Aleutia kele gaƒo" + + "ƒo me\x15Hong Kong gaƒoƒo me\x1cHong Kong nutome gaƒoƒo me!Hong Kong dz" + + "omeŋɔli gaƒoƒo me\x10Hovd gaƒoƒo me\x17Hovd nutome gaƒoƒo me\x1cHovd dzo" + + "meŋɔli gaƒoƒo me\x11India gaƒoƒo me\x18Indian Ocean gaƒoƒo me\x15Indones" + + "ia gaƒoƒo me\x1dCentral Indonesia gaƒoƒo me\x1dEastern Indonesia gaƒoƒo " + + "me\x1dWestern Indonesia gaƒoƒo me\x10Iran gaƒoƒo me\x17Iran nutome gaƒoƒ" + + "o me\x15Iran kele gaƒoƒo me\x13Irkutsk gaƒoƒo me\x1aIrkutsk nutome gaƒoƒ" + + "o me\x1fIrkutsk dzomeŋɔli gaƒoƒo me\x12Israel gaƒoƒo me\x19Israel nutome" + + " gaƒoƒo me\x17Israel kele gaƒoƒo me\x11Japan gaƒoƒo me\x18Japan nutome g" + + "aƒoƒo me\x1dJapan dzomeŋɔli gaƒoƒo me#Petropavlovsk-Kamtsatski gaƒoƒome*" + + "Petropavlovsk-Kamtsatski gaƒoƒoɖoanyime,Petropavlovsk-Kamtsatski ŋkekeme" + + " gaƒoƒome\x1bEast Kazakhstan gaƒoƒo me\x1bWest Kazakhstan gaƒoƒo me\x11K" + + "orea gaƒoƒo me\x18Korea nutome gaƒoƒo me\x1dKorea dzomeŋɔli gaƒoƒo me" + + "\x12Kosrae gaƒoƒo me\x17Krasnoyarsk gaƒoƒo me\x1eKrasnoyarsk nutome gaƒo" + + "ƒo me#Krasnoyarsk dzomeŋɔli gaƒoƒo me\x15Kyrgystan gaƒoƒo me\x18Line Is" + + "lands gaƒoƒo me\x15Lord Howe gaƒoƒo me\x1cLord Howe nutome gaƒoƒo me\x1a" + + "Lord Howe kele gaƒoƒo me\x10Makau gaƒoƒome\x17Makau gaƒoƒoɖoanyime\x19Ma" + + "kau ŋkekeme gaƒoƒome\x1cMacquarie Island gaƒoƒo me\x13Magadan gaƒoƒo me" + + "\x1aMagadan nutome gaƒoƒo me\x1fMagadan dzomeŋɔli gaƒoƒo me\x14Malaysia " + + "gaƒoƒo me\x14Maldives gaƒoƒo me\x15Marquesas gaƒoƒo me\x1cMarshall Islan" + + "ds gaƒoƒo me\x15Mauritius gaƒoƒo me\x1cMauritius nutome gaƒoƒo me!Maurit" + + "ius dzomeŋɔli gaƒoƒo me\x12Mawson gaƒoƒo me\x1cNorthwest Mexico gaƒoƒo m" + + "e#Northwest Mexico nutome gaƒoƒo me!Northwest Mexico kele gaƒoƒo me\x1bM" + + "exican Pacific gaƒoƒo me\"Mexican Pacific nutome gaƒoƒo me\x1fMexican Pa" + + "cific kele gaƒoƒome\x16Ulan Bator gaƒoƒo me\x1dUlan Bator nutome gaƒoƒo " + + "me\"Ulan Bator dzomeŋɔli gaƒoƒo me\x12Moscow gaƒoƒo me\x19Moscow nutome " + + "gaƒoƒo me\x1eMoscow dzomeŋɔli gaƒoƒo me\x13Myanmar gaƒoƒo me\x11Nauru ga" + + "ƒoƒo me\x11Nepal gaƒoƒo me\x19New Caledonia gaƒoƒo me New Caledonia nut" + + "ome gaƒoƒo me%New Caledonia dzomeŋɔli gaƒoƒo me\x17New Zealand gaƒoƒo me" + + "\x1eNew Zealand nutome gaƒoƒo me\x1cNew Zealand kele gaƒoƒo me\x17Newfou" + + "ndland gaƒoƒome\x1eNewfoundland nutome gaƒoƒome\x1cNewfoundland kele gaƒ" + + "oƒome\x10Niue gaƒoƒo me\x1aNorfolk Island gaƒoƒo me\x1fFernando de Noron" + + "ha gaƒoƒo me&Fernando de Noronha nutome gaƒoƒo me+Fernando de Noronha dz" + + "omeŋɔli gaƒoƒo me\x17Novosibirsk gaƒoƒo me\x1eNovosibirsk nutome gaƒoƒo " + + "me#Novosibirsk dzomeŋɔli gaƒoƒo me\x10Omsk gaƒoƒo me\x17Omsk nutome gaƒo" + + "ƒo me\x1cOmsk dzomeŋɔli gaƒoƒo me\x14Pakistan gaƒoƒo me\x1bPakistan nut" + + "ome gaƒoƒo me Pakistan dzomeŋɔli gaƒoƒo me\x11Palau gaƒoƒo me\x1cPapua N" + + "ew Guinea gaƒoƒo me\x14Paraguay gaƒoƒo me\x1bParaguay nutome gaƒoƒo me P" + + "araguay dzomeŋɔli gaƒoƒo me\x10Peru gaƒoƒo me\x17Peru nutome gaƒoƒo me" + + "\x1bPeru dzomeŋɔli gaƒoƒome\x16Philippine gaƒoƒo me\x1dPhilippine nutome" + + " gaƒoƒo me\"Philippine dzomeŋɔli gaƒoƒo me\x1bPhoenix Islands gaƒoƒo me " + + "St. Pierre & Miquelon gaƒoƒome'St. Pierre & Miquelon nutome gaƒoƒome%St." + + " Pierre & Miquelon kele gaƒoƒome\x14Pitcairn gaƒoƒo me\x12Ponape gaƒoƒo " + + "me\x15Pyongyang gaƒoƒo me\x15Kizilɔrda gaƒoƒome\x1cKizilɔrda gaƒoƒoɖoany" + + "ime!Kizilɔrda dzomeŋɔli gaƒoƒome\x13Reunion gaƒoƒo me\x13Rothera gaƒoƒo " + + "me\x14Sakhalin gaƒoƒo me\x1bSakhalin nutome gaƒoƒo me Sakhalin dzomeŋɔli" + + " gaƒoƒo me\x11Samara gaƒoƒome\x18Samara gaƒoƒoɖoanyime\x1aSamara ŋkekeme" + + " gaƒoƒome\x11Samoa gaƒoƒo me\x18Samoa nutome gaƒoƒo me\x16Samoa kele gaƒ" + + "oƒo me\x16Seychelles gaƒoƒo me\x1cSingapore nutome gaƒoƒo me\x1bSolomon " + + "Islands gaƒoƒo me\x19South Georgia gaƒoƒo me\x13Suriname gaƒoƒome\x11Syo" + + "wa gaƒoƒo me\x12Tahiti gaƒoƒo me\x12Taipei gaƒoƒo me\x19Taipei nutome ga" + + "ƒoƒo me\x17Taipei kele gaƒoƒo me\x16Tajikistan gaƒoƒo me\x13Tokelau gaƒ" + + "oƒo me\x11Tonga gaƒoƒo me\x18Tonga nutome gaƒoƒo me\x1dTonga dzomeŋɔli g" + + "aƒoƒo me\x11Chuuk gaƒoƒo me\x18Turkmenistan gaƒoƒo me\x1fTurkmenistan nu" + + "tome gaƒoƒo me$Turkmenistan dzomeŋɔli gaƒoƒo me\x12Tuvalu gaƒoƒo me\x13U" + + "ruguay gaƒoƒo me\x1aUruguay nutome gaƒoƒo me\x1fUruguay dzomeŋɔli gaƒoƒo" + + " me\x16Uzbekistan gaƒoƒo me\x1dUzbekistan nutome gaƒoƒo me\"Uzbekistan d" + + "zomeŋɔli gaƒoƒo me\x13Vanuatu gaƒoƒo me\x1aVanuatu nutome gaƒoƒo me\x1fV" + + "anuatu dzomeŋɔli gaƒoƒo me\x15Venezuela gaƒoƒo me\x17Vladivostok gaƒoƒo " + + "me\x1eVladivostok nutome gaƒoƒo me#Vladivostok dzomeŋɔli gaƒoƒo me\x15Vo" + + "lgograd gaƒoƒo me\x1cVolgograd nutome gaƒoƒo me Vogograd dzomeŋɔli gaƒoƒ" + + "o me\x12Vostok gaƒoƒo me\x17Wake Island gaƒoƒo me\x1bWallis & Futuna gaƒ" + + "oƒo me\x13Yakutsk gaƒoƒo me\x1aYakutsk nutome gaƒoƒo me\x1fYakutsk dzome" + + "ŋɔli gaƒoƒo me\x19Yekaterinburg gaƒoƒo me Yekaterinburg nutome gaƒoƒo m" + + "e%Yekaterinburg dzomeŋɔli gaƒoƒo me\x03Kel\x04Ktũ\x03Ktn\x03Tha\x03Moo" + + "\x03Nya\x03Knd\x04Ĩku\x04Ĩkm\x04Ĩkl\x0aNjumatatũ\x09Njumatana\x0aNjumamo" + + "thi\x08Muramuko\x05Wairi\x07Wethatu\x04Wena\x06Wetano\x08Jumamosi\x02NK" + + "\x05Narua\x06Rũjũ" + +var bucket27 string = "" + // Size: 19259 bytes + "\x06Β.Ε.\x09{1} - {0}\x08Τουτ\x0aΜπάπα\x0cΧατούρ\x0eΚεγιάχκ\x0cΤούμπα" + + "\x0aΑμσίρ\x12Μπαραμχάτ\x14Μπαρμούντα\x0eΜπασάνς\x0eΜπαούνα\x0aΑμπίπ\x0aΜ" + + "έσρα\x08Νεσγ\x06Ιαν\x06Φεβ\x06Μαρ\x06Απρ\x06Μαΐ\x08Ιουν\x08Ιουλ\x06Αυγ" + + "\x06Σεπ\x06Οκτ\x06Νοε\x06Δεκ\x02Ι\x02Φ\x02Μ\x02Α\x02Σ\x02Ο\x02Ν\x02Δ\x14" + + "Ιανουαρίου\x16Φεβρουαρίου\x0eΜαρτίου\x10Απριλίου\x0aΜαΐου\x0eΙουνίου" + + "\x0eΙουλίου\x12Αυγούστου\x16Σεπτεμβρίου\x12Οκτωβρίου\x12Νοεμβρίου\x14Δεκ" + + "εμβρίου\x06Μάρ\x06Μάι\x08Ιούν\x08Ιούλ\x06Αύγ\x06Νοέ\x14Ιανουάριος\x16Φε" + + "βρουάριος\x0eΜάρτιος\x10Απρίλιος\x0aΜάιος\x0eΙούνιος\x0eΙούλιος\x12Αύγο" + + "υστος\x16Σεπτέμβριος\x12Οκτώβριος\x12Νοέμβριος\x14Δεκέμβριος\x06Κυρ\x06" + + "Δευ\x06Τρί\x06Τετ\x06Πέμ\x06Παρ\x06Σάβ\x02Κ\x02Τ\x02Π\x04Κυ\x04Δε\x04Τρ" + + "\x04Τε\x04Πέ\x04Πα\x04Σά\x0eΚυριακή\x0eΔευτέρα\x0aΤρίτη\x0eΤετάρτη\x0cΠέ" + + "μπτη\x12Παρασκευή\x0eΣάββατο\x03Τ1\x03Τ2\x03Τ3\x03Τ4\x121ο τρίμηνο\x122" + + "ο τρίμηνο\x123ο τρίμηνο\x124ο τρίμηνο\x06π.μ.\x06μ.μ.\x08πρωί\x0bμεσημ." + + "\x09απόγ.\x0aβράδυ\x04πμ\x04μμ\x10μεσημέρι\x10απόγευμα\x15προ Χριστού6πρ" + + "ιν από την Κοινή Χρονολογία\x17μετά Χριστόν\x1fΚοινή Χρονολογία\x06π.Χ." + + "\x09π.Κ.Χ.\x06μ.Χ.\x04ΚΧ\x0aΤισρί\x0cΧεσβάν\x0cΚισλέφ\x0aΤέβετ\x0aΣεβάτ" + + "\x0cΑντάρ I\x0aΑντάρ\x0dΑντάρ II\x0aΝισάν\x0aΙγιάρ\x0aΣιβάν\x0cΤαμούζ" + + "\x04Αβ\x0aΈλουλ\x08Σάκα\x06Ε.Ε.\x0dπρο R.O.C.\x06R.O.C.\x10περίοδος\x07π" + + "ερ.\x08έτος\x0aπέρσι\x0aφέτος\x17επόμενο έτος\x11σε {0} έτος\x0fσε {0} " + + "έτη\x1cπριν από {0} έτος\x1aπριν από {0} έτη\x05έτ.\x15{0} έτος πριν" + + "\x13{0} έτη πριν\x0eτρίμηνο%προηγούμενο τρίμηνο\x1bτρέχον τρίμηνο\x1dεπό" + + "μενο τρίμηνο\x17σε {0} τρίμηνο\x17σε {0} τρίμηνα\"πριν από {0} τρίμηνο" + + "\"πριν από {0} τρίμηνα\x09τρίμ.\x15προηγ. τρίμ.\x16τρέχον τρίμ.\x13επόμ." + + " τρίμ.\x12σε {0} τρίμ.\x1dπριν από {0} τρίμ.\x16{0} τρίμ. πριν\x0aμήνας#" + + "προηγούμενος μήνας\x17τρέχων μήνας\x1bεπόμενος μήνας\x11σε {0} μήνα\x13" + + "σε {0} μήνες\x1cπριν από {0} μήνα\x1eπριν από {0} μήνες\x07μήν.\x0cσε {" + + "0} μ.\x10{0} μ. πριν\x10εβδομάδα'προηγούμενη εβδομάδα!τρέχουσα εβδομάδα" + + "\x1fεπόμενη εβδομάδα\x19σε {0} εβδομάδα\x1bσε {0} εβδομάδες$πριν από {0}" + + " εβδομάδα&πριν από {0} εβδομάδες\x1bτην εβδομάδα {0}\x07εβδ.\x10σε {0} ε" + + "βδ.\x1bπριν από {0} εβδ.\x12την εβδ. {0}\x14{0} εβδ. πριν\x19εβδομάδα μ" + + "ήνα\x10εβδ. μήνα\x0aημέρα\x0eπροχθές\x08χθες\x0cσήμερα\x0aαύριο\x10μεθα" + + "ύριο\x13σε {0} ημέρα\x15σε {0} ημέρες\x1eπριν από {0} ημέρα πριν από {0" + + "} ημέρες\x05ημ.\x0eσε {0} ημ.\x19πριν από {0} ημ.\x12{0} ημ. πριν\x15ημέ" + + "ρα έτους\x10ημ. έτους\x14καθημερινή\x0fκαθημερ.\x1dκαθημερινή μήνα\x18κ" + + "αθημερ. μήνα%προηγούμενη Κυριακή αυτήν την Κυριακή\x1dεπόμενη Κυριακή" + + "\x17σε {0} Κυριακή\x19σε {0} Κυριακές\"πριν από {0} Κυριακή$πριν από {0}" + + " Κυριακές\x13προηγ. Κυρ.\x19αυτήν την Κυρ.\x11επόμ. Κυρ.\x10σε {0} Κυρ." + + "\x1bπριν από {0} Κυρ.\x10προηγ. Κυ\x16αυτήν την Κυ\x0eεπόμ. Κυ\x0dσε {0}" + + " Κυ\x11{0} Κυ πριν%προηγούμενη Δευτέρα\x1eαυτήν τη Δευτέρα\x1dεπόμενη Δε" + + "υτέρα\x17σε {0} Δευτέρα\x19σε {0} Δευτέρες\"πριν από {0} Δευτέρα$πριν α" + + "πό {0} Δευτέρες\x15προηγ. Δευτ.\x19αυτήν τη Δευτ.\x13επόμ. Δευτ.\x12σε " + + "{0} Δευτ.\x1dπριν από {0} Δευτ.\x10προηγ. Δε\x14αυτήν τη Δε\x0eεπόμ. Δε" + + "\x0dσε {0} Δε\x11{0} Δε πριν!προηγούμενη Τρίτη\x1cαυτήν την Τρίτη\x19επό" + + "μενη Τρίτη\x13σε {0} Τρίτη\x15σε {0} Τρίτες\x1eπριν από {0} Τρίτη πριν " + + "από {0} Τρίτες\x11προηγ. Τρ.\x17αυτήν την Τρ.\x0fεπόμ. Τρ.\x0eσε {0} Τρ" + + ".\x19πριν από {0} Τρ.\x10προηγ. Τρ\x16αυτήν την Τρ\x0eεπόμ. Τρ\x0dσε {0}" + + " Τρ\x11{0} Τρ πριν%προηγούμενη Τετάρτη αυτήν την Τετάρτη\x1dεπόμενη Τετά" + + "ρτη\x17σε {0} Τετάρτη\x19σε {0} Τετάρτες\"πριν από {0} Τετάρτη$πριν από" + + " {0} Τετάρτες\x13προηγ. Τετ.\x19αυτήν την Τετ.\x11επόμ. Τετ.\x10σε {0} Τ" + + "ετ.\x1bπριν από {0} Τετ.\x10προηγ. Τε\x16αυτήν την Τε\x0eεπόμ. Τε\x0dσε" + + " {0} Τε\x11{0} Τε πριν#προηγούμενη Πέμπτη\x1eαυτήν την Πέμπτη\x1bεπόμενη" + + " Πέμπτη\x15σε {0} Πέμπτη\x17σε {0} Πέμπτες πριν από {0} Πέμπτη\"πριν από" + + " {0} Πέμπτες\x13προηγ. Πέμ.\x19αυτήν την Πέμ.\x11επόμ. Πέμ.\x10σε {0} Πέ" + + "μ.\x1bπριν από {0} Πέμ.\x10προηγ. Πέ\x16αυτήν την Πέ\x0eεπόμ. Πέ\x0dσε " + + "{0} Πέ\x11{0} Πέ πριν)προηγούμενη Παρασκευή$αυτήν την Παρασκευή!επόμενη " + + "Παρασκευή\x1bσε {0} Παρασκευή\x1dσε {0} Παρασκευές&πριν από {0} Παρασκε" + + "υή(πριν από {0} Παρασκευές\x13προηγ. Παρ.\x19αυτήν την Παρ.\x11επόμ. Πα" + + "ρ.\x10σε {0} Παρ.\x1bπριν από {0} Παρ.\x10προηγ. Πα\x16αυτήν την Πα\x0e" + + "επόμ. Πα\x0dσε {0} Πα\x11{0} Πα πριν%προηγούμενο Σάββατο\x1cαυτό το Σάβ" + + "βατο\x1dεπόμενο Σάββατο\x17σε {0} Σάββατο\x17σε {0} Σάββατα\"πριν από {" + + "0} Σάββατο\"πριν από {0} Σάββατα\x13προηγ. Σάβ.\x15αυτό το Σάβ.\x11επόμ." + + " Σάβ.\x10σε {0} Σάβ.\x1bπριν από {0} Σάβ.\x10προηγ. Σά\x12αυτό το Σά\x0e" + + "επόμ. Σά\x0dσε {0} Σά\x11{0} Σά πριν\x09πμ/μμ\x0dπ.μ./μ.μ.\x06ώρα\x17τρ" + + "έχουσα ώρα\x0fσε {0} ώρα\x11σε {0} ώρες\x1aπριν από {0} ώρα\x1cπριν από" + + " {0} ώρες\x03ώ.\x0cσε {0} ώ.\x17πριν από {0} ώ.\x10{0} ώ. πριν\x0aλεπτό" + + "\x17τρέχον λεπτό\x13σε {0} λεπτό\x13σε {0} λεπτά\x1eπριν από {0} λεπτό" + + "\x1eπριν από {0} λεπτά\x07λεπ.\x10σε {0} λεπ.\x1bπριν από {0} λεπ.\x03λ." + + "\x0cσε {0} λ.\x10{0} λ. πριν\x18δευτερόλεπτο\x08τώρα!σε {0} δευτερόλεπτο" + + "!σε {0} δευτερόλεπτα,πριν από {0} δευτερόλεπτο,πριν από {0} δευτερόλεπτα" + + "\x09δευτ.\x12σε {0} δευτ.\x1dπριν από {0} δευτ.\x03δ.\x0cσε {0} δ.\x10{0" + + "} δ. πριν\x11ζώνη ώρας\x08ζώνη\x0cΏρα ({0})\x19Θερινή ώρα ({0})\x1fΧειμε" + + "ρινή ώρα ({0})2Συντονισμένη Παγκόσμια Ώρα&Θερινή ώρα Βρετανίας,Χειμεριν" + + "ή ώρα Ιρλανδίας\x1bΏρα Αφγανιστάν(Ώρα Κεντρικής Αφρικής*Ώρα Ανατολικής " + + "Αφρικής5Χειμερινή ώρα Νότιας Αφρικής$Ώρα Δυτικής Αφρικής7Χειμερινή ώρα " + + "Δυτικής Αφρικής1Θερινή ώρα Δυτικής Αφρικής\x15Ώρα Αλάσκας(Χειμερινή ώρα" + + " Αλάσκας\"Θερινή ώρα Αλάσκας\x19Ώρα Αμαζονίου,Χειμερινή ώρα Αμαζονίου&Θε" + + "ρινή ώρα Αμαζονίου7Κεντρική ώρα Βόρειας ΑμερικήςJΚεντρική χειμερινή ώρα" + + " Βόρειας ΑμερικήςDΚεντρική θερινή ώρα Βόρειας Αμερικής9Ανατολική ώρα Βόρ" + + "ειας ΑμερικήςLΑνατολική χειμερινή ώρα Βόρειας ΑμερικήςFΑνατολική θερινή" + + " ώρα Βόρειας Αμερικής3Ορεινή ώρα Βόρειας ΑμερικήςFΟρεινή χειμερινή ώρα Β" + + "όρειας Αμερικής@Ορεινή θερινή ώρα Βόρειας Αμερικής\x19Ώρα Ειρηνικού,Χει" + + "μερινή ώρα Ειρηνικού&Θερινή ώρα Ειρηνικού\x15Ώρα Αναντίρ(Χειμερινή ώρα " + + "Αναντίρ\"Θερινή ώρα Αναντίρ\x0fΏρα Απία\"Χειμερινή ώρα Απία\x1cΘερινή ώ" + + "ρα Απία\x15Αραβική ώρα(Αραβική χειμερινή ώρα\"Αραβική θερινή ώρα\x1bΏρα" + + " Αργεντινής.Χειμερινή ώρα Αργεντινής(Θερινή ώρα Αργεντινής*Ώρα Δυτικής Α" + + "ργεντινής=Χειμερινή ώρα Δυτικής Αργεντινής7Θερινή ώρα Δυτικής Αργεντινή" + + "ς\x17Ώρα Αρμενίας*Χειμερινή ώρα Αρμενίας$Θερινή ώρα Αρμενίας\x1bΏρα Ατλ" + + "αντικού.Χειμερινή ώρα Ατλαντικού(Θερινή ώρα Ατλαντικού.Ώρα Κεντρικής Αυ" + + "στραλίαςAΧειμερινή ώρα Κεντρικής Αυστραλίας;Θερινή ώρα Κεντρικής Αυστρα" + + "λίας6Ώρα Κεντροδυτικής ΑυστραλίαςIΧειμερινή ώρα Κεντροδυτικής Αυστραλία" + + "ςCΘερινή ώρα Κεντροδυτικής Αυστραλίας0Ώρα Ανατολικής ΑυστραλίαςCΧειμερι" + + "νή ώρα Ανατολικής Αυστραλίας=Θερινή ώρα Ανατολικής Αυστραλίας*Ώρα Δυτικ" + + "ής Αυστραλίας=Χειμερινή ώρα Δυτικής Αυστραλίας7Θερινή ώρα Δυτικής Αυστρ" + + "αλίας\x1fΏρα Αζερμπαϊτζάν2Χειμερινή ώρα Αζερμπαϊτζάν,Θερινή ώρα Αζερμπα" + + "ϊτζάν\x13Ώρα Αζορών&Χειμερινή ώρα Αζορών Θερινή ώρα Αζορών\x1fΏρα Μπανγ" + + "κλαντές2Χειμερινή ώρα Μπανγκλαντές,Θερινή ώρα Μπανγκλαντές\x15Ώρα Μπουτ" + + "άν\x17Ώρα Βολιβίας\x1bΏρα Μπραζίλιας.Χειμερινή ώρα Μπραζίλιας(Θερινή ώρ" + + "α Μπραζίλιας.Ώρα Μπρουνέι Νταρουσαλάμ,Ώρα Πράσινου Ακρωτηρίου?Χειμερινή" + + " ώρα Πράσινου Ακρωτηρίου9Θερινή ώρα Πράσινου Ακρωτηρίου\x15Ώρα Τσαμόρο" + + "\x13Ώρα Τσάταμ&Χειμερινή ώρα Τσάταμ Θερινή ώρα Τσάταμ\x11Ώρα Χιλής$Χειμε" + + "ρινή ώρα Χιλής\x1eΘερινή ώρα Χιλής\x11Ώρα Κίνας$Χειμερινή ώρα Κίνας\x1e" + + "Θερινή ώρα Κίνας\x1dΏρα Τσοϊμπαλσάν0Χειμερινή ώρα Τσοϊμπαλσάν*Θερινή ώρ" + + "α Τσοϊμπαλσάν,Ώρα Νήσου Χριστουγέννων\x1cΏρα Νήσων Κόκος\x19Ώρα Κολομβί" + + "ας,Χειμερινή ώρα Κολομβίας&Θερινή ώρα Κολομβίας\x1aΏρα Νήσων Κουκ-Χειμε" + + "ρινή ώρα Νήσων Κουκ'Θερινή ώρα Νήσων Κουκ\x13Ώρα Κούβας&Χειμερινή ώρα Κ" + + "ούβας Θερινή ώρα Κούβας\x15Ώρα Ντέιβις(Ώρα Ντιμόν ντ’ Ουρβίλ&Ώρα Ανατολ" + + "ικού Τιμόρ\x1cΏρα Νήσου Πάσχα/Χειμερινή ώρα Νήσου Πάσχα)Θερινή ώρα Νήσο" + + "υ Πάσχα\x1bΏρα Ισημερινού(Ώρα Κεντρικής Ευρώπης;Χειμερινή ώρα Κεντρικής" + + " Ευρώπης5Θερινή ώρα Κεντρικής Ευρώπης*Ώρα Ανατολικής Ευρώπης=Χειμερινή ώ" + + "ρα Ανατολικής Ευρώπης7Θερινή ώρα Ανατολικής Ευρώπης=Ώρα περαιτέρω Ανατο" + + "λικής Ευρώπης$Ώρα Δυτικής Ευρώπης7Χειμερινή ώρα Δυτικής Ευρώπης1Θερινή " + + "ώρα Δυτικής Ευρώπης Ώρα Νήσων Φόκλαντ3Χειμερινή ώρα Νήσων Φόκλαντ-Θεριν" + + "ή ώρα Νήσων Φόκλαντ\x11Ώρα Φίτζι$Χειμερινή ώρα Φίτζι\x1eΘερινή ώρα Φίτζ" + + "ι(Ώρα Γαλλικής Γουιάνας@Ώρα Γαλλικού Νότου και Ανταρκτικής\x1dΏρα Γκαλά" + + "παγκος\x17Ώρα Γκάμπιερ\x17Ώρα Γεωργίας*Χειμερινή ώρα Γεωργίας$Θερινή ώρ" + + "α Γεωργίας$Ώρα Νήσων Γκίλμπερτ$Μέση ώρα Γκρίνουιτς2Ώρα Ανατολικής Γροιλ" + + "ανδίαςEΧειμερινή ώρα Ανατολικής Γροιλανδίας?Θερινή ώρα Ανατολικής Γροιλ" + + "ανδίας,Ώρα Δυτικής Γροιλανδίας?Χειμερινή ώρα Δυτικής Γροιλανδίας9Θερινή" + + " ώρα Δυτικής Γροιλανδίας\x13Ώρα Γκουάμ\x13Ώρα Κόλπου\x17Ώρα Γουιάνας1Ώρα" + + " Χαβάης-Αλεούτιων ΝήσωνDΧειμερινή ώρα Χαβάης-Αλεούτιων Νήσων>Θερινή ώρα " + + "Χαβάης-Αλεούτιων Νήσων\x1cΏρα Χονγκ Κονγκ/Χειμερινή ώρα Χονγκ Κονγκ)Θερ" + + "ινή ώρα Χονγκ Κονγκ\x11Ώρα Χοβντ$Χειμερινή ώρα Χοβντ\x1eΘερινή ώρα Χοβν" + + "τ\x13Ώρα Ινδίας$Ώρα Ινδικού Ωκεανού\x19Ώρα Ινδοκίνας.Ώρα Κεντρικής Ινδο" + + "νησίας0Ώρα Ανατολικής Ινδονησίας*Ώρα Δυτικής Ινδονησίας\x0fΏρα Ιράν\"Χε" + + "ιμερινή ώρα Ιράν\x1cΘερινή ώρα Ιράν\x17Ώρα Ιρκούτσκ*Χειμερινή ώρα Ιρκού" + + "τσκ$Θερινή ώρα Ιρκούτσκ\x13Ώρα Ισραήλ&Χειμερινή ώρα Ισραήλ Θερινή ώρα Ι" + + "σραήλ\x17Ώρα Ιαπωνίας*Χειμερινή ώρα Ιαπωνίας$Θερινή ώρα Ιαπωνίας\x19Ώρα" + + " ΚαμτσάτκαIΧειμερινή ώρα Πετροπαβλόβσκ-ΚαμτσάτσκιCΘερινή ώρα Πετροπαβλόβ" + + "σκ-Καμτσάτσκι.Ώρα Ανατολικού Καζακστάν(Ώρα Δυτικού Καζακστάν\x13Ώρα Κορ" + + "έας&Χειμερινή ώρα Κορέας Θερινή ώρα Κορέας\x13Ώρα Κόσραϊ\x1fΏρα Κρασνογ" + + "ιάρσκ2Χειμερινή ώρα Κρασνογιάρσκ,Θερινή ώρα Κρασνογιάρσκ\x19Ώρα Κιργιστ" + + "άν\x1aΏρα Νήσων Λάιν\x1aΏρα Λορντ Χάου-Χειμερινή ώρα Λορντ Χάου'Θερινή " + + "ώρα Λορντ Χάου\x11Ώρα Μακάο$Χειμερινή ώρα Μακάο\x1eΘερινή ώρα Μακάο$Ώρα" + + " Νησιού Μακουάρι\x19Ώρα Μαγκαντάν,Χειμερινή ώρα Μαγκαντάν&Θερινή ώρα Μαγ" + + "καντάν\x19Ώρα Μαλαισίας\x17Ώρα Μαλδίβων\x17Ώρα Μαρκέζας\x1eΏρα Νήσων Μά" + + "ρσαλ\x19Ώρα Μαυρίκιου,Χειμερινή ώρα Μαυρίκιου&Θερινή ώρα Μαυρίκιου\x11Ώ" + + "ρα Μόσον0Ώρα Βορειοδυτικού ΜεξικούCΧειμερινή ώρα Βορειοδυτικού Μεξικού=" + + "Θερινή ώρα Βορειοδυτικού Μεξικού(Ώρα Ειρηνικού Μεξικού;Χειμερινή ώρα Ει" + + "ρηνικού Μεξικού5Θερινή ώρα Ειρηνικού Μεξικού\x1eΏρα Ουλάν Μπατόρ1Χειμερ" + + "ινή ώρα Ουλάν Μπατόρ+Θερινή ώρα Ουλάν Μπατόρ\x13Ώρα Μόσχας&Χειμερινή ώρ" + + "α Μόσχας Θερινή ώρα Μόσχας\x15Ώρα Μιανμάρ\x15Ώρα Ναούρου\x11Ώρα Νεπάλ$Ώ" + + "ρα Νέας Καληδονίας7Χειμερινή ώρα Νέας Καληδονίας1Θερινή ώρα Νέας Καληδο" + + "νίας\"Ώρα Νέας Ζηλανδίας5Χειμερινή ώρα Νέας Ζηλανδίας/Θερινή ώρα Νέας Ζ" + + "ηλανδίας\x16Ώρα Νέας Γης)Χειμερινή ώρα Νέας Γης#Θερινή ώρα Νέας Γης\x11" + + "Ώρα Νιούε Ώρα Νήσου Νόρφολκ/Ώρα Φερνάρντο ντε ΝορόνιαBΧειμερινή ώρα Φερ" + + "νάρντο ντε Νορόνια<Θερινή ώρα Φερνάρντο ντε Νορόνια3Ώρα Νησιών Βόρειες " + + "Μαριάνες\x1fΏρα Νοβοσιμπίρσκ2Χειμερινή ώρα Νοβοσιμπίρσκ,Θερινή ώρα Νοβο" + + "σιμπίρσκ\x0fΏρα Ομσκ\"Χειμερινή ώρα Ομσκ\x1cΘερινή ώρα Ομσκ\x17Ώρα Πακι" + + "στάν*Χειμερινή ώρα Πακιστάν$Θερινή ώρα Πακιστάν\x13Ώρα Παλάου/Ώρα Παπού" + + "ας Νέας Γουινέας\x1bΏρα Παραγουάης.Χειμερινή ώρα Παραγουάης(Θερινή ώρα " + + "Παραγουάης\x11Ώρα Περού$Χειμερινή ώρα Περού\x1eΘερινή ώρα Περού\x1bΏρα " + + "Φιλιππινών.Χειμερινή ώρα Φιλιππινών(Θερινή ώρα Φιλιππινών\x1dΏρα Νήσων " + + "Φoίνιξ,Ώρα Σεν Πιερ και Μικελόν?Χειμερινή ώρα Σεν Πιερ και Μικελόν9Θερι" + + "νή ώρα Σεν Πιερ και Μικελόν\x15Ώρα Πίτκερν\x13Ώρα Πονάπε\x1bΏρα Πιονγιά" + + "νγκ\x15Ώρα Ρεϊνιόν\x13Ώρα Ρόθερα\x19Ώρα Σαχαλίνης,Χειμερινή ώρα Σαχαλίν" + + "ης&Θερινή ώρα Σαχαλίνης\x15Ώρα Σάμαρας(Χειμερινή ώρα Σάμαρας\"Θερινή ώρ" + + "α Σαμάρας\x11Ώρα Σαμόα$Χειμερινή ώρα Σαμόα\x1eΘερινή ώρα Σαμόα\x19Ώρα Σ" + + "εϋχελλών\x1dΏρα Σιγκαπούρης&Ώρα Νήσων Σολομώντος$Ώρα Νότιας Γεωργίας" + + "\x17Ώρα Σουρινάμ\x11Ώρα Σίοβα\x13Ώρα Ταϊτής\x13Ώρα Ταϊπέι&Χειμερινή ώρα " + + "Ταϊπέι Θερινή ώρα Ταϊπέι\x1dΏρα Τατζικιστάν\x17Ώρα Τοκελάου\x13Ώρα Τόνγ" + + "κα&Χειμερινή ώρα Τόνγκα Θερινή ώρα Τόνγκα\x11Ώρα Τσουκ!Ώρα Τουρκμενιστά" + + "ν4Χειμερινή ώρα Τουρκμενιστάν.Θερινή ώρα Τουρκμενιστάν\x17Ώρα Τουβαλού" + + "\x1dΏρα Ουρουγουάης0Χειμερινή ώρα Ουρουγουάης*Θερινή ώρα Ουρουγουάης\x1f" + + "Ώρα Ουζμπεκιστάν2Χειμερινή ώρα Ουζμπεκιστάν,Θερινή ώρα Ουζμπεκιστάν\x19" + + "Ώρα Βανουάτου,Χειμερινή ώρα Βανουάτου&Θερινή ώρα Βανουάτου\x1dΏρα Βενεζ" + + "ουέλας\x1dΏρα Βλαδιβοστόκ0Χειμερινή ώρα Βλαδιβοστόκ*Θερινή ώρα Βλαδιβοσ" + + "τόκ\x1fΏρα Βόλγκογκραντ2Χειμερινή ώρα Βόλγκογκραντ,Θερινή ώρα Βόλγκογκρ" + + "αντ\x13Ώρα Βόστοκ\x1eΏρα Νήσου Γουέικ+Ώρα Ουάλις και Φουτούνα\x19Ώρα Γι" + + "ακούτσκ,Χειμερινή ώρα Γιακούτσκ&Θερινή ώρα Γιακούτσκ'Ώρα Αικατερίνμπουρ" + + "γκ:Χειμερινή ώρα Αικατερίνμπουργκ4Θερινή ώρα Αικατερίνμπουργκ" + +var bucket28 string = "" + // Size: 10441 bytes + "\x03Mo1\x03Mo2\x03Mo3\x03Mo4\x03Mo5\x03Mo6\x03Mo7\x03Mo8\x03Mo9\x04Mo10" + + "\x04Mo11\x04Mo12\x0bFirst Month\x0cSecond Month\x0bThird Month\x0cFourth" + + " Month\x0bFifth Month\x0bSixth Month\x0dSeventh Month\x0cEighth Month" + + "\x0bNinth Month\x0bTenth Month\x0eEleventh Month\x0dTwelfth Month\x03Rat" + + "\x02Ox\x05Tiger\x06Rabbit\x06Dragon\x05Snake\x05Horse\x04Goat\x06Monkey" + + "\x07Rooster\x03Dog\x03Pig\x12EEEE, MMMM d, r(U)\x0cMMMM d, r(U)\x08MMM d" + + ", r\x05M/d/r\x0c{1} 'at' {0}\x07January\x08February\x05March\x05April" + + "\x03May\x04June\x04July\x06August\x09September\x07October\x08November" + + "\x08December\x06Sunday\x06Monday\x07Tuesday\x09Wednesday\x08Thursday\x06" + + "Friday\x08Saturday\x0b1st quarter\x0b2nd quarter\x0b3rd quarter\x0b4th q" + + "uarter\x08midnight\x04noon\x0ein the morning\x10in the afternoon\x0ein t" + + "he evening\x08at night\x07morning\x09afternoon\x07evening\x05night\x0dBe" + + "fore Christ\x11Before Common Era\x0bAnno Domini\x0aCommon Era\x04year" + + "\x0bin {0} year\x0cin {0} years\x0c{0} year ago\x0d{0} years ago\x03yr." + + "\x08last yr.\x08this yr.\x08next yr.\x0ain {0} yr.\x0b{0} yr. ago\x07qua" + + "rter\x0ein {0} quarter\x0fin {0} quarters\x0f{0} quarter ago\x10{0} quar" + + "ters ago\x04qtr.\x09last qtr.\x09this qtr.\x09next qtr.\x0bin {0} qtr." + + "\x0cin {0} qtrs.\x0c{0} qtr. ago\x0d{0} qtrs. ago\x05month\x0cin {0} mon" + + "th\x0din {0} months\x0d{0} month ago\x0e{0} months ago\x03mo.\x08last mo" + + ".\x08this mo.\x08next mo.\x0ain {0} mo.\x0b{0} mo. ago\x0bin {0} week" + + "\x0cin {0} weeks\x0c{0} week ago\x0d{0} weeks ago\x08last wk.\x08this wk" + + ".\x08next wk.\x0ain {0} wk.\x0b{0} wk. ago\x0dweek of month\x0awk. of mo" + + ".\x03day\x0ain {0} day\x0bin {0} days\x0b{0} day ago\x0c{0} days ago\x0b" + + "day of year\x0aday of yr.\x0fday of the week\x0aday of wk.\x14weekday of" + + " the month\x0dwkday. of mo.\x0din {0} Sunday\x0ein {0} Sundays\x0e{0} Su" + + "nday ago\x0f{0} Sundays ago\x09last Sun.\x09this Sun.\x09next Sun.\x0bin" + + " {0} Sun.\x0c{0} Sun. ago\x07last Su\x07this Su\x07next Su\x09in {0} Su" + + "\x0a{0} Su ago\x0din {0} Monday\x0ein {0} Mondays\x0e{0} Monday ago\x0f{" + + "0} Mondays ago\x09last Mon.\x09this Mon.\x09next Mon.\x0bin {0} Mon.\x0c" + + "{0} Mon. ago\x06last M\x06this M\x06next M\x08in {0} M\x09{0} M ago\x0ei" + + "n {0} Tuesday\x0fin {0} Tuesdays\x0f{0} Tuesday ago\x10{0} Tuesdays ago" + + "\x09last Tue.\x09this Tue.\x09next Tue.\x0bin {0} Tue.\x0c{0} Tue. ago" + + "\x07last Tu\x07this Tu\x07next Tu\x09in {0} Tu\x0a{0} Tu ago\x10in {0} W" + + "ednesday\x11in {0} Wednesdays\x11{0} Wednesday ago\x12{0} Wednesdays ago" + + "\x09last Wed.\x09this Wed.\x09next Wed.\x0bin {0} Wed.\x0c{0} Wed. ago" + + "\x06last W\x06this W\x06next W\x08in {0} W\x09{0} W ago\x0fin {0} Thursd" + + "ay\x10in {0} Thursdays\x10{0} Thursday ago\x11{0} Thursdays ago\x09last " + + "Thu.\x09this Thu.\x09next Thu.\x0bin {0} Thu.\x0c{0} Thu. ago\x07last Th" + + "\x07this Th\x07next Th\x09in {0} Th\x0a{0} Th ago\x0din {0} Friday\x0ein" + + " {0} Fridays\x0e{0} Friday ago\x0f{0} Fridays ago\x09last Fri.\x09this F" + + "ri.\x09next Fri.\x0bin {0} Fri.\x0c{0} Fri. ago\x06last F\x06this F\x06n" + + "ext F\x08in {0} F\x09{0} F ago\x0fin {0} Saturday\x10in {0} Saturdays" + + "\x10{0} Saturday ago\x11{0} Saturdays ago\x09last Sat.\x09this Sat.\x09n" + + "ext Sat.\x0bin {0} Sat.\x0c{0} Sat. ago\x07last Sa\x07this Sa\x07next Sa" + + "\x09in {0} Sa\x0a{0} Sa ago\x04hour\x0bin {0} hour\x0cin {0} hours\x0c{0" + + "} hour ago\x0d{0} hours ago\x03hr.\x0ain {0} hr.\x0b{0} hr. ago\x06minut" + + "e\x0din {0} minute\x0ein {0} minutes\x0e{0} minute ago\x0f{0} minutes ag" + + "o\x0bin {0} min.\x0c{0} min. ago\x06second\x0din {0} second\x0ein {0} se" + + "conds\x0e{0} second ago\x0f{0} seconds ago\x04sec.\x0bin {0} sec.\x0c{0}" + + " sec. ago\x09time zone\x08{0} Time\x11{0} Daylight Time\x11{0} Standard " + + "Time\x1aCoordinated Universal Time\x13British Summer Time\x13Irish Stand" + + "ard Time\x09Acre Time\x12Acre Standard Time\x10Acre Summer Time\x10Afgha" + + "nistan Time\x13Central Africa Time\x10East Africa Time\x1aSouth Africa S" + + "tandard Time\x10West Africa Time\x19West Africa Standard Time\x17West Af" + + "rica Summer Time\x0bAlaska Time\x14Alaska Standard Time\x14Alaska Daylig" + + "ht Time\x0bAlmaty Time\x14Almaty Standard Time\x12Almaty Summer Time\x0b" + + "Amazon Time\x14Amazon Standard Time\x12Amazon Summer Time\x0cCentral Tim" + + "e\x15Central Standard Time\x15Central Daylight Time\x0cEastern Time\x15E" + + "astern Standard Time\x15Eastern Daylight Time\x0dMountain Time\x16Mounta" + + "in Standard Time\x16Mountain Daylight Time\x0cPacific Time\x15Pacific St" + + "andard Time\x15Pacific Daylight Time\x0bAnadyr Time\x14Anadyr Standard T" + + "ime\x12Anadyr Summer Time\x09Apia Time\x12Apia Standard Time\x12Apia Day" + + "light Time\x0aAqtau Time\x13Aqtau Standard Time\x11Aqtau Summer Time\x0b" + + "Aqtobe Time\x14Aqtobe Standard Time\x12Aqtobe Summer Time\x0cArabian Tim" + + "e\x15Arabian Standard Time\x15Arabian Daylight Time\x0eArgentina Time" + + "\x17Argentina Standard Time\x15Argentina Summer Time\x16Western Argentin" + + "a Time\x1fWestern Argentina Standard Time\x1dWestern Argentina Summer Ti" + + "me\x0cArmenia Time\x15Armenia Standard Time\x13Armenia Summer Time\x0dAt" + + "lantic Time\x16Atlantic Standard Time\x16Atlantic Daylight Time\x16Centr" + + "al Australia Time Australian Central Standard Time Australian Central Da" + + "ylight Time\x1fAustralian Central Western Time(Australian Central Wester" + + "n Standard Time(Australian Central Western Daylight Time\x16Eastern Aust" + + "ralia Time Australian Eastern Standard Time Australian Eastern Daylight " + + "Time\x16Western Australia Time Australian Western Standard Time Australi" + + "an Western Daylight Time\x0fAzerbaijan Time\x18Azerbaijan Standard Time" + + "\x16Azerbaijan Summer Time\x0bAzores Time\x14Azores Standard Time\x12Azo" + + "res Summer Time\x0fBangladesh Time\x18Bangladesh Standard Time\x16Bangla" + + "desh Summer Time\x0bBhutan Time\x0cBolivia Time\x0dBrasilia Time\x16Bras" + + "ilia Standard Time\x14Brasilia Summer Time\x16Brunei Darussalam Time\x0f" + + "Cape Verde Time\x18Cape Verde Standard Time\x16Cape Verde Summer Time" + + "\x0aCasey Time\x16Chamorro Standard Time\x0cChatham Time\x15Chatham Stan" + + "dard Time\x15Chatham Daylight Time\x0aChile Time\x13Chile Standard Time" + + "\x11Chile Summer Time\x0aChina Time\x13China Standard Time\x13China Dayl" + + "ight Time\x0fChoibalsan Time\x18Choibalsan Standard Time\x16Choibalsan S" + + "ummer Time\x15Christmas Island Time\x12Cocos Islands Time\x0dColombia Ti" + + "me\x16Colombia Standard Time\x14Colombia Summer Time\x11Cook Islands Tim" + + "e\x1aCook Islands Standard Time\x1dCook Islands Half Summer Time\x09Cuba" + + " Time\x12Cuba Standard Time\x12Cuba Daylight Time\x0aDavis Time\x17Dumon" + + "t-d’Urville Time\x0fEast Timor Time\x12Easter Island Time\x1bEaster Isla" + + "nd Standard Time\x19Easter Island Summer Time\x0cEcuador Time\x15Central" + + " European Time\x1eCentral European Standard Time\x1cCentral European Sum" + + "mer Time\x15Eastern European Time\x1eEastern European Standard Time\x1cE" + + "astern European Summer Time\x1dFurther-eastern European Time\x15Western " + + "European Time\x1eWestern European Standard Time\x1cWestern European Summ" + + "er Time\x15Falkland Islands Time\x1eFalkland Islands Standard Time\x1cFa" + + "lkland Islands Summer Time\x09Fiji Time\x12Fiji Standard Time\x10Fiji Su" + + "mmer Time\x12French Guiana Time French Southern & Antarctic Time\x0eGala" + + "pagos Time\x0cGambier Time\x0cGeorgia Time\x15Georgia Standard Time\x13G" + + "eorgia Summer Time\x14Gilbert Islands Time\x13Greenwich Mean Time\x13Eas" + + "t Greenland Time\x1cEast Greenland Standard Time\x1aEast Greenland Summe" + + "r Time\x13West Greenland Time\x1cWest Greenland Standard Time\x1aWest Gr" + + "eenland Summer Time\x12Guam Standard Time\x12Gulf Standard Time\x0bGuyan" + + "a Time\x14Hawaii-Aleutian Time\x1dHawaii-Aleutian Standard Time\x1dHawai" + + "i-Aleutian Daylight Time\x0eHong Kong Time\x17Hong Kong Standard Time" + + "\x15Hong Kong Summer Time\x09Hovd Time\x12Hovd Standard Time\x10Hovd Sum" + + "mer Time\x13India Standard Time\x11Indian Ocean Time\x0eIndochina Time" + + "\x16Central Indonesia Time\x16Eastern Indonesia Time\x16Western Indonesi" + + "a Time\x09Iran Time\x12Iran Standard Time\x12Iran Daylight Time\x0cIrkut" + + "sk Time\x15Irkutsk Standard Time\x13Irkutsk Summer Time\x0bIsrael Time" + + "\x14Israel Standard Time\x14Israel Daylight Time\x0aJapan Time\x13Japan " + + "Standard Time\x13Japan Daylight Time\x1dPetropavlovsk-Kamchatski Time&Pe" + + "tropavlovsk-Kamchatski Standard Time$Petropavlovsk-Kamchatski Summer Tim" + + "e\x14East Kazakhstan Time\x14West Kazakhstan Time\x0bKorean Time\x14Kore" + + "an Standard Time\x14Korean Daylight Time\x0bKosrae Time\x10Krasnoyarsk T" + + "ime\x19Krasnoyarsk Standard Time\x17Krasnoyarsk Summer Time\x0fKyrgyzsta" + + "n Time\x0aLanka Time\x11Line Islands Time\x0eLord Howe Time\x17Lord Howe" + + " Standard Time\x17Lord Howe Daylight Time\x0aMacau Time\x13Macau Standar" + + "d Time\x11Macau Summer Time\x15Macquarie Island Time\x0cMagadan Time\x15" + + "Magadan Standard Time\x13Magadan Summer Time\x0dMalaysia Time\x0dMaldive" + + "s Time\x0eMarquesas Time\x15Marshall Islands Time\x0eMauritius Time\x17M" + + "auritius Standard Time\x15Mauritius Summer Time\x0bMawson Time\x15Northw" + + "est Mexico Time\x1eNorthwest Mexico Standard Time\x1eNorthwest Mexico Da" + + "ylight Time\x14Mexican Pacific Time\x1dMexican Pacific Standard Time\x1d" + + "Mexican Pacific Daylight Time\x10Ulaanbaatar Time\x19Ulaanbaatar Standar" + + "d Time\x17Ulaanbaatar Summer Time\x0bMoscow Time\x14Moscow Standard Time" + + "\x12Moscow Summer Time\x0cMyanmar Time\x0aNauru Time\x0aNepal Time\x12Ne" + + "w Caledonia Time\x1bNew Caledonia Standard Time\x19New Caledonia Summer " + + "Time\x10New Zealand Time\x19New Zealand Standard Time\x19New Zealand Day" + + "light Time\x11Newfoundland Time\x1aNewfoundland Standard Time\x1aNewfoun" + + "dland Daylight Time\x09Niue Time\x13Norfolk Island Time\x18Fernando de N" + + "oronha Time!Fernando de Noronha Standard Time\x1fFernando de Noronha Sum" + + "mer Time\x1aNorth Mariana Islands Time\x10Novosibirsk Time\x19Novosibirs" + + "k Standard Time\x17Novosibirsk Summer Time\x09Omsk Time\x12Omsk Standard" + + " Time\x10Omsk Summer Time\x0dPakistan Time\x16Pakistan Standard Time\x14" + + "Pakistan Summer Time\x0aPalau Time\x15Papua New Guinea Time\x0dParaguay " + + "Time\x16Paraguay Standard Time\x14Paraguay Summer Time\x09Peru Time\x12P" + + "eru Standard Time\x10Peru Summer Time\x0fPhilippine Time\x18Philippine S" + + "tandard Time\x16Philippine Summer Time\x14Phoenix Islands Time\x1aSt. Pi" + + "erre & Miquelon Time#St. Pierre & Miquelon Standard Time#St. Pierre & Mi" + + "quelon Daylight Time\x0dPitcairn Time\x0bPonape Time\x0ePyongyang Time" + + "\x0eQyzylorda Time\x17Qyzylorda Standard Time\x15Qyzylorda Summer Time" + + "\x0cReunion Time\x0cRothera Time\x0dSakhalin Time\x16Sakhalin Standard T" + + "ime\x14Sakhalin Summer Time\x0bSamara Time\x14Samara Standard Time\x12Sa" + + "mara Summer Time\x0aSamoa Time\x13Samoa Standard Time\x13Samoa Daylight " + + "Time\x0fSeychelles Time\x17Singapore Standard Time\x14Solomon Islands Ti" + + "me\x12South Georgia Time\x0dSuriname Time\x0aSyowa Time\x0bTahiti Time" + + "\x0bTaipei Time\x14Taipei Standard Time\x14Taipei Daylight Time\x0fTajik" + + "istan Time\x0cTokelau Time\x0aTonga Time\x13Tonga Standard Time\x11Tonga" + + " Summer Time\x0aChuuk Time\x11Turkmenistan Time\x1aTurkmenistan Standard" + + " Time\x18Turkmenistan Summer Time\x0bTuvalu Time\x0cUruguay Time\x15Urug" + + "uay Standard Time\x13Uruguay Summer Time\x0fUzbekistan Time\x18Uzbekista" + + "n Standard Time\x16Uzbekistan Summer Time\x0cVanuatu Time\x15Vanuatu Sta" + + "ndard Time\x13Vanuatu Summer Time\x0eVenezuela Time\x10Vladivostok Time" + + "\x19Vladivostok Standard Time\x17Vladivostok Summer Time\x0eVolgograd Ti" + + "me\x17Volgograd Standard Time\x15Volgograd Summer Time\x0bVostok Time" + + "\x10Wake Island Time\x14Wallis & Futuna Time\x0cYakutsk Time\x15Yakutsk " + + "Standard Time\x13Yakutsk Summer Time\x12Yekaterinburg Time\x1bYekaterinb" + + "urg Standard Time\x19Yekaterinburg Summer Time\x0bin {0} mins\x0c{0} min" + + "s ago\x0bin {0} secs\x0c{0} secs ago\x0bin {0} yrs.\x0c{0} yrs. ago\x0bi" + + "n {0} mos.\x0c{0} mos. ago\x0bin {0} wks.\x0c{0} wks. ago\x0fin {0} Sun’" + + "s.\x0din {0} Su’s\x0e{0} Su’s ago\x0fin {0} Mon’s.\x10{0} Mon’s. ago\x0c" + + "in {0} M’s\x0d{0} M’s ago\x0fin {0} Tue’s.\x10{0} Tue’s. ago\x0din {0} T" + + "u’s\x0e{0} Tu’s ago\x0fin {0} Wed’s.\x10{0} Wed’s. ago\x0cin {0} W’s\x0d" + + "{0} W’s ago\x0fin {0} Thu’s.\x0f{0} Thu’s ago\x0din {0} Th’s\x0e{0} Th’s" + + " ago\x0fin {0} Fri’s.\x10{0} Fri’s. ago\x0cin {0} F’s\x0d{0} F’s ago\x0f" + + "in {0} Sat’s.\x10{0} Sat’s. ago\x0din {0} Sa’s\x0e{0} Sa’s ago\x0bin {0}" + + " hrs.\x0c{0} hrs. ago\x0cin {0} mins.\x0d{0} mins. ago\x0cin {0} secs." + + "\x0d{0} secs. ago\x0fUlan Bator Time\x19St Pierre & Miquelon Time\x04Och" + + "s\x05Tiger\x0cKannéngchen\x06Draach\x08Schlaang\x06Päerd\x05Geess\x02Af" + + "\x04Hong\x04Hond\x08Schwäin\x02Os\x06Tijger\x06Konijn\x05Draak\x05Slang" + + "\x05Paard\x04Geit\x03Aap\x04Haan\x06Varken\x0aChina Time\x13China Standa" + + "rd Time\x0aJapan Time\x13Japan Standard Time\x0aSamoa Time\x13Samoa Stan" + + "dard Time" + +var bucket29 string = "" + // Size: 8890 bytes + "\x11EEEE, d MMMM r(U)\x0bd MMMM r(U)\x07d MMM r\x07dd/MM/r\x02yr\x09in {" + + "0} yr\x0a{0} yr ago\x03qtr\x0ain {0} qtr\x0b{0} qtr ago\x02mo\x09in {0} " + + "mo\x0a{0} mo ago\x02wk\x09in {0} wk\x0a{0} wk ago\x02hr\x09in {0} hr\x0a" + + "{0} hr ago\x0ain {0} min\x0b{0} min ago\x03sec\x0ain {0} sec\x0b{0} sec " + + "ago\x09∅∅∅\x04Sun.\x04Mon.\x04Tue.\x04Wed.\x04Thu.\x04Fri.\x04Sat.\x03Su" + + ".\x02M.\x03Tu.\x02W.\x03Th.\x02F.\x03Sa.\x06midday\x0ain {0} yrs\x0b{0} " + + "yrs ago\x0bin {0} qtrs\x0c{0} qtrs ago\x0ein {0} qtr ago\x0ain {0} wks" + + "\x0b{0} wks ago\x09wk of mo.\x08wk of mo\x09day of yr\x09day of wk\x0cwk" + + "day of mo.\x0bwkday of mo\x0ain {0} hrs\x0b{0} hrs ago\x13Eastern Africa" + + " Time\x0bArabia Time\x14Arabia Standard Time\x14Arabia Daylight Time\x17" + + "Australian Central Time Australian Central Standard Time Australian Cent" + + "ral Daylight Time\x03ACT\x04ACST\x04ACDT\x04ACWT\x05ACWST\x05ACWDT\x17Au" + + "stralian Eastern Time Australian Eastern Standard Time Australian Easter" + + "n Daylight Time\x03AET\x04AEST\x04AEDT\x17Australian Western Time Austra" + + "lian Western Standard Time Australian Western Daylight Time\x03AWT\x04AW" + + "ST\x04AWDT\x0aChina Time\x13China Standard Time\x11China Summer Time\x10" + + "Cook Island Time\x19Cook Island Standard Time\x17Cook Island Summer Time" + + "\x0aJapan Time\x13Japan Standard Time\x11Japan Summer Time\x0aKorea Time" + + "\x14Korean Standard Time\x12Korean Summer Time\x03LHT\x04LHST\x04LHDT" + + "\x0bMoscow Time\x14Moscow Standard Time\x14Moscow Daylight Time\x03NZT" + + "\x04NZST\x04NZDT\x0aSamoa Time\x13Samoa Standard Time\x11Samoa Summer Ti" + + "me\x0bTaipei Time\x14Taipei Standard Time\x12Taipei Summer Time\x0add-MM" + + "M-y G\x08dd-MMM-y\x04a.m.\x04p.m.\x0ethe wk. of {0}\x09a.m./p.m.\x18{0} " + + "Daylight Saving Time\x0cH.mm.ss zzzz\x09H.mm.ss z\x07H.mm.ss\x04H.mm\x08" + + "last Sun\x08this Sun\x08next Sun\x0ain {0} Sun\x0b{0} Sun ago\x08last Mo" + + "n\x08this Mon\x08next Mon\x0ain {0} Mon\x0b{0} Mon ago\x08last Tue\x08th" + + "is Tue\x08next Tue\x0ain {0} Tue\x0b{0} Tue ago\x08last Wed\x08this Wed" + + "\x08next Wed\x0ain {0} Wed\x0b{0} Wed ago\x08last Thu\x08this Thu\x08nex" + + "t Thu\x0ain {0} Thu\x0b{0} Thu ago\x08last Fri\x08this Fri\x08next Fri" + + "\x0ain {0} Fri\x0b{0} Fri ago\x08last Sat\x08this Sat\x08next Sat\x0ain " + + "{0} Sat\x0b{0} Sat ago\x03BST\x0eKyrgystan Time\x18Ulan Bator Standard T" + + "ime\x16Ulan Bator Summer Time\"St Pierre & Miquelon Standard Time\"St Pi" + + "erre & Miquelon Daylight Time\x04ChST\x03GYT\x03HKT\x04HKST\x0cd/M/y/ GG" + + "GGG\x03MST\x03MDT\x03MYT\x08d/MM/y G\x0cd/MM/y GGGGG\x06d/MM/y\x07d/MM/y" + + "y\x04CHAT\x05CHAST\x05CHADT\x09G y-MM-dd\x07last yr\x07this yr\x07next y" + + "r\x08last qtr\x08this qtr\x08next qtr\x03mth\x08last mth\x08this mth\x08" + + "next mth\x0ain {0} mth\x0b{0} mth ago\x07last wk\x07this wk\x07next wk" + + "\x03SGT\x0dGGGGG y/MM/dd\x07y/MM/dd\x0add MMM,y G\x08dd MMM,y\x19EEEE, d" + + "-'a' 'de' MMMM y G\x0bG y-MMMM-dd\x0aG y-MMM-dd\x07januaro\x08februaro" + + "\x05marto\x06aprilo\x04majo\x05junio\x05julio\x08aŭgusto\x09septembro" + + "\x07oktobro\x08novembro\x08decembro\x08dimanĉo\x05lundo\x05mardo\x08merk" + + "redo\x07ĵaŭdo\x08vendredo\x06sabato\x0e1-a kvaronjaro\x0e2-a kvaronjaro" + + "\x0e3-a kvaronjaro\x0e4-a kvaronjaro\x03atm\x03ptm\x02aK\x12antaŭ Komuna" + + " Erao\x02pK\x0bKomuna Erao\x06a.K.E.\x04K.E.\x03aKE\x02KE\x17EEEE, d-'a'" + + " 'de' MMMM y\x09y-MMMM-dd\x08y-MMM-dd\x08yy-MM-dd\x1cH-'a' 'horo' 'kaj' " + + "m:ss zzzz\x04erao\x04jaro\x0cpasinta jaro\x09nuna jaro\x0cvenonta jaro" + + "\x0dpost {0} jaro\x0epost {0} jaroj\x0fantaŭ {0} jaro\x10antaŭ {0} jaroj" + + "\x0akvaronjaro\x13post {0} kvaronjaro\x14post {0} kvaronjaroj\x15antaŭ {" + + "0} kvaronjaro\x16antaŭ {0} kvaronjaroj\x06monato\x0epasinta monato\x0bnu" + + "na monato\x0evenonta monato\x0fpost {0} monato\x10post {0} monatoj\x11an" + + "taŭ {0} monato\x12antaŭ {0} monatoj\x07semajno\x0fpasinta semajno\x0cnun" + + "a semajno\x0fvenonta semajno\x10post {0} semajno\x11post {0} semajnoj" + + "\x12antaŭ {0} semajno\x13antaŭ {0} semajnoj\x04tago\x07hieraŭ\x07hodiaŭ" + + "\x07morgaŭ\x0dpost {0} tago\x0epost {0} tagoj\x0fantaŭ {0} tago\x10antaŭ" + + " {0} tagoj\x12tago de la semajno\x10pasinta dimanĉo\x10ĉi tiu dimanĉo" + + "\x10venonta dimanĉo\x0dpasinta lundo\x0dĉi tiu lundo\x0dvenonta lundo" + + "\x0dpasinta mardo\x0dĉi tiu mardo\x0dvenonta mardo\x10pasinta merkredo" + + "\x10ĉi tiu merkredo\x10venonta merkredo\x0fpasinta ĵaŭdo\x0fĉi tiu ĵaŭdo" + + "\x0fvenonta ĵaŭdo\x10pasinta vendredo\x10ĉi tiu vendredo\x10venonta vend" + + "redo\x0epasinta sabato\x0eĉi tiu sabato\x0evenonta sabato\x07atm/ptm\x04" + + "horo\x0dpost {0} horo\x0epost {0} horoj\x0fantaŭ {0} horo\x10antaŭ {0} h" + + "oroj\x06minuto\x0fpost {0} minuto\x10post {0} minutoj\x11antaŭ {0} minut" + + "o\x12antaŭ {0} minutoj\x07sekundo\x10post {0} sekundo\x11post {0} sekund" + + "oj\x12antaŭ {0} sekundo\x13antaŭ {0} sekundoj\x07horzono\x0f+HH:mm;−HH:m" + + "m\x06UTC{0}\x03UTC\x0ctempo de {0}\x13somera tempo de {0}\x12norma tempo" + + " de {0}\x13centra afrika tempo\x14orienta afrika tempo\x11suda afrika te" + + "mpo\x16okcidenta afrika tempo\x1cokcidenta afrika norma tempo\x1dokciden" + + "ta afrika somera tempo\x19centra nord-amerika tempo\x1fcentra nord-ameri" + + "ka norma tempo centra nord-amerika somera tempo\x1aorienta nord-amerika " + + "tempo orienta nord-amerika norma tempo!orienta nord-amerika somera tempo" + + "\x18monta nord-amerika tempo\x1emonta nord-amerika norma tempo\x1fmonta " + + "nord-amerika somera tempo\x1bpacifika nord-amerika tempo!pacifika nord-a" + + "merika norma tempo\"pacifika nord-amerika somera tempo\x0baraba tempo" + + "\x11araba norma tempo\x12araba somera tempo\x1catlantika nord-amerika te" + + "mpo\"atlantika nord-amerika norma tempo#atlantika nord-amerika somera te" + + "mpo\x17centra aŭstralia tempo\x1dcentra aŭstralia norma tempo\x1ecentra " + + "aŭstralia somera tempo\x1fcentrokcidenta aŭstralia tempo%centrokcidenta " + + "aŭstralia norma tempo¢rokcidenta aŭstralia somera tempo\x18orienta a" + + "ŭstralia tempo\x1eorienta aŭstralia norma tempo\x1forienta aŭstralia so" + + "mera tempo\x1aokcidenta aŭstralia tempo okcidenta aŭstralia norma tempo!" + + "okcidenta aŭstralia somera tempo\x0bĉina tempo\x11ĉina norma tempo\x12ĉi" + + "na somera tempo\x14centra eŭropa tempo\x1acentra eŭropa norma tempo\x1bc" + + "entra eŭropa somera tempo\x15orienta eŭropa tempo\x1borienta eŭropa norm" + + "a tempo\x1corienta eŭropa somera tempo\x17okcidenta eŭropa tempo\x1dokci" + + "denta eŭropa norma tempo\x1eokcidenta eŭropa somera tempo\x1cuniversala " + + "tempo kunordigita\x0cbarata tempo\x10hindoĉina tempo\x16centra indonezia" + + " tempo\x17orienta indonezia tempo\x19okcidenta indonezia tempo\x0disrael" + + "a tempo\x13israela norma tempo\x14israela somera tempo\x0cjapana tempo" + + "\x12japana norma tempo\x13japana somera tempo\x0bkorea tempo\x11korea no" + + "rma tempo\x12korea somera tempo\x0cmoskva tempo\x12moskva norma tempo" + + "\x13moskva somera tempo\x0bEEEE, d-M-y\x1aEEEE, d 'de' MMMM 'de' y G\x14" + + "d 'de' MMMM 'de' y G\x08d/M/yy G\x04ene.\x04feb.\x04mar.\x04abr.\x04may." + + "\x04jun.\x04jul.\x04ago.\x05sept.\x04oct.\x04nov.\x04dic.\x05enero\x07fe" + + "brero\x05marzo\x05abril\x04mayo\x06agosto\x0aseptiembre\x07octubre\x09no" + + "viembre\x09diciembre\x04dom.\x04lun.\x05mié.\x04jue.\x04vie.\x05sáb.\x02" + + "DO\x02LU\x02MA\x02MI\x02JU\x02VI\x02SA\x07domingo\x05lunes\x06martes\x0a" + + "miércoles\x06jueves\x07viernes\x07sábado\x02T1\x02T2\x02T3\x02T4\x0e1.er" + + " trimestre\x0e2.º trimestre\x0e3.er trimestre\x0e4.º trimestre\x0ddel me" + + "diodía\x0fde la madrugada\x0bde la noche\x09mediodía\x09madrugada\x05noc" + + "he\x0fantes de Cristo\x16antes de la era común\x12después de Cristo\x0ae" + + "ra común\x05a. C.\x08a. e. c.\x05d. C.\x05e. c.\x18EEEE, d 'de' MMMM 'de" + + "' y\x12d 'de' MMMM 'de' y\x0eH:mm:ss (zzzz)\x04saka\x0edd/MM/yy GGGGG" + + "\x0cantes de RDC\x06minguo\x04año\x0eel año pasado\x09este año\x10el pró" + + "ximo año\x12dentro de {0} año\x13dentro de {0} años\x0dhace {0} año\x0eh" + + "ace {0} años\x0fdentro de {0} a\x0ahace {0} a\x13el trimestre pasado\x0e" + + "este trimestre\x15el próximo trimestre\x17dentro de {0} trimestre\x18den" + + "tro de {0} trimestres\x12hace {0} trimestre\x13hace {0} trimestres\x13de" + + "ntro de {0} trim.\x0ehace {0} trim.\x0del mes pasado\x08este mes\x0fel p" + + "róximo mes\x11dentro de {0} mes\x13dentro de {0} meses\x0chace {0} mes" + + "\x0ehace {0} meses\x0fdentro de {0} m\x0ahace {0} m\x06semana\x10la sema" + + "na pasada\x0besta semana\x12la próxima semana\x14dentro de {0} semana" + + "\x15dentro de {0} semanas\x0fhace {0} semana\x10hace {0} semanas\x11la s" + + "emana del {0}\x04sem.\x12dentro de {0} sem.\x0dhace {0} sem.\x0fla sem. " + + "del {0}\x0esemana del mes\x0bsem. de mes\x08anteayer\x04ayer\x03hoy\x07m" + + "añana\x0epasado mañana\x12dentro de {0} día\x13dentro de {0} días\x0dhac" + + "e {0} día\x0ehace {0} días\x0ddía del año\x0adía del a\x11día de la sema" + + "na\x0cdía de sem.\x19día de la semana del mes\x13día de sem. de mes\x11e" + + "l domingo pasado\x0ceste domingo\x13el próximo domingo\x15dentro de {0} " + + "domingo\x16dentro de {0} domingos\x10hace {0} domingo\x11hace {0} doming" + + "os\x0eel dom. pasado\x09este dom.\x10el próximo dom.\x12dentro de {0} do" + + "m.\x0dhace {0} dom.\x0cel DO pasado\x07este DO\x0eel próximo DO\x10dentr" + + "o de {0} DO\x0bhace {0} DO\x0fel lunes pasado\x0aeste lunes\x11el próxim" + + "o lunes\x13dentro de {0} lunes\x0ehace {0} lunes\x0eel lun. pasado\x09es" + + "te lun.\x10el próximo lun.\x12dentro de {0} lun.\x0dhace {0} lun.\x0cel " + + "LU pasado\x07este LU\x0eel próximo LU\x10dentro de {0} LU\x0bhace {0} LU" + + "\x10el martes pasado\x0beste martes\x12el próximo martes\x14dentro de {0" + + "} martes\x0fhace {0} martes\x0eel mar. pasado\x09este mar.\x10el próximo" + + " mar.\x12dentro de {0} mar.\x0dhace {0} mar.\x0cel MA pasado\x07este MA" + + "\x0eel próximo MA\x10dentro de {0} MA\x0bhace {0} MA\x14el miércoles pas" + + "ado\x0feste miércoles\x16el próximo miércoles\x18dentro de {0} miércoles" + + "\x13hace {0} miércoles\x0fel mié. pasado\x0aeste mié.\x11el próximo mié." + + "\x13dentro de {0} mié.\x0ehace {0} mié.\x0cel MI pasado\x07este MI\x0eel" + + " próximo MI\x10dentro de {0} MI\x0bhace {0} MI\x10el jueves pasado\x0bes" + + "te jueves\x12el próximo jueves\x14dentro de {0} jueves\x0fhace {0} jueve" + + "s\x0eel jue. pasado\x09este jue.\x10el próximo jue.\x12dentro de {0} jue" + + ".\x0dhace {0} jue.\x0cel JU pasado\x07este JU\x0eel próximo JU\x10dentro" + + " de {0} JU\x0bhace {0} JU\x11el viernes pasado\x0ceste viernes\x13el pró" + + "ximo viernes\x04sep.\x09en {0} DO\x0den {0} martes\x09en {0} JU\x0e2.º t" + + "rimestre\x0e4.º trimestre\x0e2º. trimestre\x0d4o. trimestre\x0d4º trimes" + + "tre\x10el año próximo\x0fel mes próximo\x12la semana próxima\x13el domin" + + "go próximo\x11el lunes próximo\x12el martes próximo\x16el miércoles próx" + + "imo\x12el jueves próximo\x13el viernes próximo\x04set.\x09setiembre\x0e4" + + ".º trimestre\x04ayer\x03hoy\x07mañana\x0epasado mañana\x07GMT {0}\x03GMT" + + "\x06UTC{0}\x03UTC\x04luns\x04mar.\x05mér.\x04xov.\x04ven.\x09mércores" + + "\x05xoves\x06venres\x11despois de Cristo\x12dentro de {0} mes.\x04Mä." + + "\x03Zi.\x03Mi.\x03Du.\x03Fr.\x03Sa.\x06GMT{0}\x03GMT\x03Mo.\x03Di.\x03Me" + + ".\x06GMT{0}\x03GMT\x0dsegunda-feira\x0cterça-feira\x0cquarta-feira\x0cqu" + + "inta-feira\x0bsexta-feira\x10depois de Cristo\x03AMT\x04AMST\x03BRT\x04B" + + "RST\x07segunda\x06terça\x06quarta\x06quinta\x05sexta\x06UTC{0}\x03UTC" + + "\x06GMT{0}\x03GMT" + +var bucket30 string = "" + // Size: 9365 bytes + "\x15dentro de {0} viernes\x10hace {0} viernes\x0eel vie. pasado\x09este " + + "vie.\x10el próximo vie.\x12dentro de {0} vie.\x0dhace {0} vie.\x0cel VI " + + "pasado\x07este VI\x0eel próximo VI\x10dentro de {0} VI\x0bhace {0} VI" + + "\x11el sábado pasado\x0ceste sábado\x13el próximo sábado\x15dentro de {0" + + "} sábado\x16dentro de {0} sábados\x10hace {0} sábado\x11hace {0} sábados" + + "\x0fel sáb. pasado\x0aeste sáb.\x11el próximo sáb.\x13dentro de {0} sáb." + + "\x0ehace {0} sáb.\x0cel SA pasado\x07este SA\x0eel próximo SA\x10dentro " + + "de {0} SA\x0bhace {0} SA\x12dentro de {0} hora\x13dentro de {0} horas" + + "\x0dhace {0} hora\x0ehace {0} horas\x0fdentro de {0} h\x0ahace {0} h\x0b" + + "este minuto\x14dentro de {0} minuto\x15dentro de {0} minutos\x0fhace {0}" + + " minuto\x10hace {0} minutos\x11dentro de {0} min\x0chace {0} min\x07segu" + + "ndo\x05ahora\x15dentro de {0} segundo\x16dentro de {0} segundos\x10hace " + + "{0} segundo\x11hace {0} segundos\x0fdentro de {0} s\x0ahace {0} s\x0czon" + + "a horaria\x0bhora de {0}\x18horario de verano de {0}\x18horario estándar" + + " de {0}\x1btiempo universal coordinado\x19hora de verano británica\x19ho" + + "ra de verano de Irlanda\x0cHora de Acre\x16Hora estándar de Acre\x16Hora" + + " de verano de Acre\x13hora de Afganistán\x17hora de África central\x18ho" + + "ra de África oriental\x12hora de Sudáfrica\x1ahora de África occidental$" + + "hora estándar de África occidental$hora de verano de África occidental" + + "\x0ehora de Alaska\x18hora estándar de Alaska\x18hora de verano de Alask" + + "a\x11hora del Amazonas\x1bhora estándar del Amazonas\x1bhora de verano d" + + "el Amazonas\x0chora central\x16hora estándar central\x16hora de verano c" + + "entral\x0dhora oriental\x17hora estándar oriental\x17hora de verano orie" + + "ntal\x1dhora de las Montañas Rocosas'hora estándar de las Montañas Rocos" + + "as'hora de verano de las Montañas Rocosas\x12hora del Pacífico\x1chora e" + + "stándar del Pacífico\x1chora de verano del Pacífico\x0ehora de Anadyr" + + "\x18hora estándar de Anadyr\x18hora de verano de Anadyr\x0chora de Apia" + + "\x16hora estándar de Apia\x19horario de verano de Apia\x0dHora de Aktau" + + "\x17Hora estándar de Aktau\x17Hora de verano de Aktau\x0eHora de Aktobe" + + "\x18Hora estándar de Aktobe\x18Hora de verano de Aktobe\x0ehora de Arabi" + + "a\x18hora estándar de Arabia\x18hora de verano de Arabia\x11hora de Arge" + + "ntina\x1bhora estándar de Argentina\x1bhora de verano de Argentina\x1cho" + + "ra de Argentina occidental&hora estándar de Argentina occidental&hora de" + + " verano de Argentina occidental\x0fhora de Armenia\x19hora estándar de A" + + "rmenia\x19hora de verano de Armenia\x13hora del Atlántico\x1dhora estánd" + + "ar del Atlántico\x1dhora de verano del Atlántico\x19hora de Australia ce" + + "ntral#hora estándar de Australia central#hora de verano de Australia cen" + + "tral!hora de Australia centroccidental+hora estándar de Australia centro" + + "ccidental+hora de verano de Australia centroccidental\x1ahora de Austral" + + "ia oriental$hora estándar de Australia oriental$hora de verano de Austra" + + "lia oriental\x1chora de Australia occidental&hora estándar de Australia " + + "occidental&hora de verano de Australia occidental\x13hora de Azerbaiyán" + + "\x1dhora estándar de Azerbaiyán\x1dhora de verano de Azerbaiyán\x12hora " + + "de las Azores\x1chora estándar de las Azores\x1chora de verano de las Az" + + "ores\x12hora de Bangladés\x1chora estándar de Bangladés\x1chora de veran" + + "o de Bangladés\x0ehora de Bután\x0fhora de Bolivia\x10hora de Brasilia" + + "\x1ahora estándar de Brasilia\x1ahora de verano de Brasilia\x0fhora de B" + + "runéi\x12hora de Cabo Verde\x1chora estándar de Cabo Verde\x1chora de ve" + + "rano de Cabo Verde\x1ahora estándar de Chamorro\x0fhora de Chatham\x19ho" + + "ra estándar de Chatham\x19hora de verano de Chatham\x0dhora de Chile\x17" + + "hora estándar de Chile\x17hora de verano de Chile\x0dhora de China\x17ho" + + "ra estándar de China\x17hora de verano de China\x12hora de Choibalsan" + + "\x1chora estándar de Choibalsan\x1chora de verano de Choibalsan\x1ahora " + + "de la Isla de Navidad\x17hora de las Islas Cocos\x10hora de Colombia\x1a" + + "hora estándar de Colombia\x1ahora de verano de Colombia\x16hora de las I" + + "slas Cook hora estándar de las Islas Cook&hora de verano media de las Is" + + "las Cook\x0chora de Cuba\x16hora estándar de Cuba\x16hora de verano de C" + + "uba\x0dhora de Davis\x1ahora de Dumont-d’Urville\x16hora de Timor Orient" + + "al\x19hora de la isla de Pascua#hora estándar de la isla de Pascua#hora " + + "de verano de la isla de Pascua\x0fhora de Ecuador\x16hora de Europa cent" + + "ral hora estándar de Europa central hora de verano de Europa central\x17" + + "hora de Europa oriental!hora estándar de Europa oriental!hora de verano " + + "de Europa oriental#hora del extremo oriental de Europa\x19hora de Europa" + + " occidental#hora estándar de Europa occidental#hora de verano de Europa " + + "occidental\x1ahora de las islas Malvinas$hora estándar de las islas Malv" + + "inas$hora de verano de las islas Malvinas\x0chora de Fiyi\x16hora estánd" + + "ar de Fiyi\x16hora de verano de Fiyi\x1bhora de la Guayana Francesa5hora" + + " de las Tierras Australes y Antárticas Francesas\x12hora de Galápagos" + + "\x0fhora de Gambier\x0fhora de Georgia\x19hora estándar de Georgia\x19ho" + + "ra de verano de Georgia\x19hora de las islas Gilbert\x1fhora del meridia" + + "no de Greenwich\x1chora de Groenlandia oriental&hora estándar de Groenla" + + "ndia oriental&hora de verano de Groenlandia oriental\x1ehora de Groenlan" + + "dia occidental(hora estándar de Groenlandia occidental(hora de verano de" + + " Groenlandia occidental\x16Hora estándar de Guam\x18hora estándar del Go" + + "lfo\x0ehora de Guyana\x19hora de Hawái-Aleutianas#hora estándar de Hawái" + + "-Aleutianas#hora de verano de Hawái-Aleutianas\x11hora de Hong Kong\x1bh" + + "ora estándar de Hong Kong\x1bhora de verano de Hong Kong\x0chora de Hovd" + + "\x16hora estándar de Hovd\x16hora de verano de Hovd\x1ahora estándar de " + + "la India\x18hora del océano Índico\x11hora de Indochina\x19hora de Indon" + + "esia central\x1ahora de Indonesia oriental\x1chora de Indonesia occident" + + "al\x0dhora de Irán\x17hora estándar de Irán\x17hora de verano de Irán" + + "\x0fhora de Irkutsk\x19hora estándar de Irkutsk\x19hora de verano de Irk" + + "utsk\x0ehora de Israel\x18hora estándar de Israel\x18hora de verano de I" + + "srael\x0ehora de Japón\x18hora estándar de Japón\x18hora de verano de Ja" + + "pón\x11hora de Kamchatka\x1bhora estándar de Kamchatka\x1bhora de verano" + + " de Kamchatka\x1chora de Kazajistán oriental\x1ehora de Kazajistán occid" + + "ental\x0dhora de Corea\x17hora estándar de Corea\x17hora de verano de Co" + + "rea\x0ehora de Kosrae\x13hora de Krasnoyarsk\x1dhora estándar de Krasnoy" + + "arsk\x1dhora de verano de Krasnoyarsk\x13hora de Kirguistán\x11Hora de S" + + "ri Lanka#hora de las Espóradas Ecuatoriales\x11hora de Lord Howe\x1bhora" + + " estándar de Lord Howe\x1bhora de verano de Lord Howe\x0dHora de Macao" + + "\x17Hora estándar de Macao\x17Hora de verano de Macao\x19hora de la isla" + + " Macquarie\x10hora de Magadán\x1ahora estándar de Magadán\x1ahora de ver" + + "ano de Magadán\x0fhora de Malasia\x10hora de Maldivas\x11hora de Marques" + + "as\x1ahora de las Islas Marshall\x10hora de Mauricio\x1ahora estándar de" + + " Mauricio\x1ahora de verano de Mauricio\x0ehora de Mawson\x1chora del no" + + "roeste de México&hora estándar del noroeste de México&hora de verano del" + + " noroeste de México\x1dhora del Pacífico de México'hora estándar del Pac" + + "ífico de México'hora de verano del Pacífico de México\x13hora de Ulán B" + + "ator\x1dhora estándar de Ulán Bator\x1dhora de verano de Ulán Bator\x0eh" + + "ora de Moscú\x18hora estándar de Moscú\x18hora de verano de Moscú\x1ahor" + + "a de Myanmar (Birmania)\x0dhora de Nauru\x0dhora de Nepal\x17hora de Nue" + + "va Caledonia!hora estándar de Nueva Caledonia!hora de verano de Nueva Ca" + + "ledonia\x15hora de Nueva Zelanda\x1fhora estándar de Nueva Zelanda\x1fho" + + "ra de verano de Nueva Zelanda\x11hora de Terranova\x1bhora estándar de T" + + "erranova\x1bhora de verano de Terranova\x0chora de Niue\x17hora de la is" + + "la Norfolk\x1bhora de Fernando de Noronha%hora estándar de Fernando de N" + + "oronha%hora de verano de Fernando de Noronha$Hora de las Islas Marianas " + + "del Norte\x13hora de Novosibirsk\x1dhora estándar de Novosibirsk\x1dhora" + + " de verano de Novosibirsk\x0chora de Omsk\x16hora estándar de Omsk\x16ho" + + "ra de verano de Omsk\x11hora de Pakistán\x1bhora estándar de Pakistán" + + "\x1bhora de verano de Pakistán\x0ehora de Palaos\x1bhora de Papúa Nueva " + + "Guinea\x10hora de Paraguay\x1ahora estándar de Paraguay\x1ahora de veran" + + "o de Paraguay\x0dhora de Perú\x17hora estándar de Perú\x17hora de verano" + + " de Perú\x11hora de Filipinas\x1bhora estándar de Filipinas\x1bhora de v" + + "erano de Filipinas\x18hora de las Islas Fénix\x1dhora de San Pedro y Miq" + + "uelón'hora estándar de San Pedro y Miquelón'hora de verano de San Pedro " + + "y Miquelón\x10hora de Pitcairn\x0fhora de Pohnpei\x11hora de Pyongyang" + + "\x11Hora de Qyzylorda\x1bHora estándar de Qyzylorda\x1bHora de verano de" + + " Qyzylorda\x10hora de Reunión\x0fhora de Rothera\x10hora de Sajalín\x1ah" + + "ora estándar de Sajalín\x1ahora de verano de Sajalín\x0ehora de Samara" + + "\x18hora estándar de Samara\x18hora de verano de Samara\x0dhora de Samoa" + + "\x17hora estándar de Samoa\x17hora de verano de Samoa\x12hora de Seychel" + + "les\x10hora de Singapur\x1ahora de las Islas Salomón\x17hora de Georgia " + + "del Sur\x0fhora de Surinam\x0dhora de Syowa\x0fhora de Tahití\x0fhora de" + + " Taipéi\x19hora estándar de Taipéi\x19hora de verano de Taipéi\x13hora d" + + "e Tayikistán\x0fhora de Tokelau\x0dhora de Tonga\x17hora estándar de Ton" + + "ga\x17hora de verano de Tonga\x0dhora de Chuuk\x15hora de Turkmenistán" + + "\x1fhora estándar de Turkmenistán\x1fhora de verano de Turkmenistán\x0eh" + + "ora de Tuvalu\x0fhora de Uruguay\x19hora estándar de Uruguay\x19hora de " + + "verano de Uruguay\x13hora de Uzbekistán\x1dhora estándar de Uzbekistán" + + "\x1dhora de verano de Uzbekistán\x0fhora de Vanuatu\x19hora estándar de " + + "Vanuatu\x19hora de verano de Vanuatu\x11hora de Venezuela\x13hora de Vla" + + "divostok\x1dhora estándar de Vladivostok\x1dhora de verano de Vladivosto" + + "k\x12hora de Volgogrado\x1chora estándar de Volgogrado\x1chora de verano" + + " de Volgogrado\x0ehora de Vostok\x14hora de la isla Wake\x17hora de Wall" + + "is y Futuna\x0fhora de Yakutsk\x19hora estándar de Yakutsk\x19hora de ve" + + "rano de Yakutsk\x15hora de Ekaterimburgo\x1fhora estándar de Ekaterimbur" + + "go\x1fhora de verano de Ekaterimburgo\x0een {0} viernes\x0ben {0} vie." + + "\x13el sábado próximo\x16hora de verano de Apia\x1ahora de la isla de Na" + + "vidad\x19hora estándar de Irkutsh\x19hora de verano de Irkutsh\x10hora d" + + "e Chamorro\x18hora del Océano Índico\x1bhora de las islas Marquesas\x18h" + + "ora de las islas Fénix" + +var bucket31 string = "" + // Size: 12370 bytes + "\x13d 'de' MMM 'de' y G\x0e1.º trimestre\x0e2.º trimestre\x0e3.º trimest" + + "re\x0e4.º trimestre\x0fantes de R.O.C.\x06R.O.C.\x0csem. del mes\x13día " + + "hábil del mes\x0een {0} domingo\x0fen {0} domingos\x0cen {0} lunes\x0ben" + + " {0} lun.\x12dentro de {0} lun.\x11en {0} miércoles\x18dentro de {0} mié" + + "rcoles\x0cen {0} mié.\x09en {0} MI\x0den {0} jueves\x14dentro de {0} jue" + + "ves\x0een {0} sábado\x0fen {0} sábados\x09en {0} SA\x10dentro de {0} SA" + + "\x15hora de verano de {0}\x15hora estándar de {0}\x19Hora Universal Coor" + + "dinada\x15hora de las Montañas\x1fhora estándar de las Montañas\x1fhora " + + "de verano de las Montañas\x13hora de Islas Cocos\x16hora de las islas Co" + + "ok hora estándar de las islas Cook&hora de verano media de las islas Coo" + + "k\x19hora de la Isla de Pascua hora estándar de Isla de Pascua#hora de v" + + "erano de la Isla de Pascua\x17hora de Europa del Este!hora estándar de E" + + "uropa del Este!hora de verano de Europa del Este!horario del lejano este" + + " de Europa\x18hora de Europa del Oeste\"hora estándar de Europa del Oest" + + "e\"hora de verano de Europa del Oeste\x1ahora de las Islas Malvinas$hora" + + " estándar de las Islas Malvinas$hora de verano de las Islas Malvinas\x15" + + "hora de Islas Gilbert\x0dhora de India\x19hora de la Isla Macquarie\x16h" + + "ora de Islas Marshall\x10hora de Birmania\x17hora de la Isla Norfolk\x10" + + "hora de Pionyang\x16hora de Islas Salomón\x11hora de Isla Wake\x04seg." + + "\x12dentro de {0} seg.\x0dhace {0} seg.\x03ART\x04ARST\x04WART\x05WARST" + + "\x0cd MMM 'de' y\x03BOT\x09dd-MM-y G\x0ddd-MM-y GGGGG\x0e1.° trimestre" + + "\x0e2.° trimestre\x0e3.° trimestre\x0e4.º trimestre\x08dd-MM-yy\x03CLT" + + "\x04CLST\x0dd/MM/yy GGGGG\x03COT\x04COST\x16antes de la Era Común\x0aEra" + + " Común\x04Año\x09Trimestre\x03Mes\x06Semana\x04Día\x11Día de la semana" + + "\x06Minuto\x07Segundo\x03ECT\x1aEEEE dd 'de' MMMM 'de' y G\x15dd 'de' MM" + + "MM 'de' y G\x18EEEE dd 'de' MMMM 'de' y\x13dd 'de' MMMM 'de' y\x03ene" + + "\x03feb\x03mar\x03abr\x03may\x03jun\x03jul\x03ago\x03sep\x03oct\x03nov" + + "\x03dic\x0a1er. trim.\x0a2º. trim.\x0a3er. trim.\x094º trim.\x08en {0} a" + + "\x06-{0} a\x16dentro de {0} trimetre\x17dentro de {0} trimetres\x06+{0} " + + "T\x06-{0} T\x08en {0} m\x0ben {0} sem.\x09sem. de m\x09+{0} día\x0a+{0} " + + "días\x10el miér. pasado\x0beste miér.\x12el próximo miér.\x0fel vier. pa" + + "sado\x0aeste vier.\x11el próximo vier.\x08en {0} h\x08en {0} n\x0aen {0}" + + " min\x08en {0} s\x1bTiempo Universal Coordinado\x09MM/dd/y G\x0eMM/dd/yy" + + " GGGGG\x0e1er. trimestre\x0e2do. trimestre\x0e3er. trimestre\x07MM/dd/y" + + "\x08MM/dd/yy\x04Ene.\x04Feb.\x04Mar.\x04Abr.\x04May.\x04Jun.\x04Jul.\x04" + + "Ago.\x04Set.\x04Oct.\x04Nov.\x04Dic.\x05Enero\x07Febrero\x05Marzo\x05Abr" + + "il\x04Mayo\x05Junio\x05Julio\x06Agosto\x09Setiembre\x07Octubre\x09Noviem" + + "bre\x09Diciembre\x03PET\x04PEST\x06antier\x04ayer\x03hoy\x07mañana\x0epa" + + "sado mañana\x0eel mie. pasado\x0aeste mié.\x11el próximo mié.\x19hora un" + + "iversal coordinada\x03UYT\x04UYST\x0cel Do pasado\x07este Do\x0eel próxi" + + "mo Do\x0cel Lu pasado\x07este Lu\x0eel próximo Lu\x0cel Ma pasado\x07est" + + "e Ma\x0eel próximo Ma\x0cel Mi pasado\x07este Mi\x0eel próximo Mi\x0cel " + + "Ju pasado\x07este Ju\x0eel próximo Ju\x0cel Vi pasado\x07este Vi\x0eel p" + + "róximo Vi\x0cel Sa pasado\x07este Sa\x0eel próximo Sa\x03VET\x0besimene " + + "kuu\x09teine kuu\x0akolmas kuu\x0aneljas kuu\x09viies kuu\x09kuues kuu" + + "\x0cseitsmes kuu\x0ckaheksas kuu\x0cüheksas kuu\x0bkümnes kuu\x14üheteis" + + "tkümnes kuu\x14kaheteistkümnes kuu\x04rott\x05härg\x06tiiger\x08küülik" + + "\x07draakon\x04madu\x06hobune\x06lammas\x03ahv\x04kukk\x04koer\x04siga" + + "\x0ddd.MM.y GGGGG\x0f{1}, 'kell' {0}\x04jaan\x05veebr\x06märts\x03apr" + + "\x03mai\x05juuni\x05juuli\x03aug\x04sept\x03okt\x04dets\x07jaanuar\x08ve" + + "ebruar\x06aprill\x06august\x09september\x08oktoober\x08november\x09detse" + + "mber\x0apühapäev\x0aesmaspäev\x0ateisipäev\x0akolmapäev\x0aneljapäev\x05" + + "reede\x08laupäev\x09keskööl\x0bkeskpäeval\x08hommikul\x0epärastlõunal" + + "\x06õhtul\x07öösel\x08kesköö\x09keskpäev\x06hommik\x0dpärastlõuna\x05õht" + + "u\x04öö\x0denne Kristust\x15enne meie ajaarvamist\x10pärast Kristust\x17" + + "meie ajaarvamise järgi\x05e.m.a\x05m.a.j\x06ajastu\x05aasta\x0deelmine a" + + "asta\x0fkäesolev aasta\x0fjärgmine aasta\x11{0} aasta pärast\x0e{0} aast" + + "a eest\x0d{0} a pärast\x0a{0} a eest\x0feelmine kvartal\x11käesolev kvar" + + "tal\x11järgmine kvartal\x14{0} kvartali pärast\x11{0} kvartali eest\x02k" + + "v\x0aeelmine kv\x0ckäesolev kv\x0cjärgmine kv\x0e{0} kv pärast\x0b{0} kv" + + " eest\x03kuu\x0beelmine kuu\x0dkäesolev kuu\x0djärgmine kuu\x0f{0} kuu p" + + "ärast\x0c{0} kuu eest\x0d{0} k pärast\x0a{0} k eest\x06nädal\x0eeelmine" + + " nädal\x10käesolev nädal\x10järgmine nädal\x13{0} nädala pärast\x10{0} n" + + "ädala eest\x0a{0} nädal\x04näd\x10{0} näd pärast\x0d{0} näd eest\x08{0}" + + " näd\x0akuu nädal\x08kuu näd\x05päev\x08üleeile\x04eile\x05täna\x05homme" + + "\x09ülehomme\x12{0} päeva pärast\x0f{0} päeva eest\x0d{0} p pärast\x0a{0" + + "} p eest\x0baasta päev\x07aasta p\x0cnädalapäev\x09nädalap.\x10kuu nädal" + + "apäev\x0dkuu nädalap.\x12eelmine pühapäev\x14käesolev pühapäev\x14järgmi" + + "ne pühapäev\x17{0} pühapäeva pärast\x14{0} pühapäeva eest\x0eeelmine püh" + + "ap\x10käesolev pühap\x10järgmine pühap\x12{0} pühap pärast\x0f{0} pühap " + + "eest\x09eelmine P\x0bkäesolev P\x0bjärgmine P\x0d{0} P pärast\x0a{0} P e" + + "est\x12eelmine esmaspäev\x14käesolev esmaspäev\x14järgmine esmaspäev\x17" + + "{0} esmaspäeva pärast\x14{0} esmaspäeva eest\x0eeelmine esmasp\x10käesol" + + "ev esmasp\x10järgmine esmasp\x12{0} esmasp pärast\x0f{0} esmasp eest\x09" + + "eelmine E\x0bkäesolev E\x0bjärgmine E\x0d{0} E pärast\x0a{0} E eest\x12e" + + "elmine teisipäev\x14käesolev teisipäev\x14järgmine teisipäev\x17{0} teis" + + "ipäeva pärast\x14{0} teisipäeva eest\x0eeelmine teisip\x10käesolev teisi" + + "p\x10järgmine teisip\x12{0} teisip pärast\x0f{0} teisip eest\x09eelmine " + + "T\x0bkäesolev T\x0bjärgmine T\x0d{0} T pärast\x0a{0} T eest\x12eelmine k" + + "olmapäev\x14käesolev kolmapäev\x14järgmine kolmapäev\x17{0} kolmapäeva p" + + "ärast\x14{0} kolmapäeva eest\x0eeelmine kolmap\x10käesolev kolmap\x10jä" + + "rgmine kolmap\x12{0} kolmap pärast\x0f{0} kolmap eest\x09eelmine K\x0bkä" + + "esolev K\x0bjärgmine K\x0d{0} K pärast\x0a{0} K eest\x12eelmine neljapäe" + + "v\x14käesolev neljapäev\x14järgmine neljapäev\x17{0} neljapäeva pärast" + + "\x14{0} neljapäeva eest\x0eeelmine neljap\x10käesolev neljap\x10järgmine" + + " neljap\x12{0} neljap pärast\x0f{0} neljap eest\x09eelmine N\x0bkäesolev" + + " N\x0bjärgmine N\x0d{0} N pärast\x0a{0} N eest\x0deelmine reede\x0fkäeso" + + "lev reede\x0fjärgmine reede\x11{0} reede pärast\x0e{0} reede eest\x09eel" + + "mine R\x0bkäesolev R\x0bjärgmine R\x0d{0} R pärast\x0a{0} R eest\x10eelm" + + "ine laupäev\x12käesolev laupäev\x12järgmine laupäev\x15{0} laupäeva pära" + + "st\x12{0} laupäeva eest\x0ceelmine laup\x0ekäesolev laup\x0ejärgmine lau" + + "p\x10{0} laup pärast\x0d{0} laup eest\x09eelmine L\x0bkäesolev L\x0bjärg" + + "mine L\x0d{0} L pärast\x0a{0} L eest\x14enne/pärast lõunat\x04tund\x10pr" + + "aegusel tunnil\x11{0} tunni pärast\x0e{0} tunni eest\x0d{0} t pärast\x0a" + + "{0} t eest\x11praegusel minutil\x12{0} minuti pärast\x0f{0} minuti eest" + + "\x0f{0} min pärast\x0c{0} min eest\x06nüüd\x13{0} sekundi pärast\x10{0} " + + "sekundi eest\x03sek\x0f{0} sek pärast\x0c{0} sek eest\x0d{0} s pärast" + + "\x0a{0} s eest\x0aajavöönd\x07vöönd\x05({0})\x08{0} (+1)\x08{0} (+0)\x19" + + "Koordineeritud maailmaaeg\x0dBriti suveaeg\x0cIiri suveaeg\x08Acre aeg" + + "\x10Acre standardaeg\x0cAcre suveaeg\x0fAfganistani aeg\x10Kesk-Aafrika " + + "aeg\x0fIda-Aafrika aeg\x1aLõuna-Aafrika standardaeg\x13Lääne-Aafrika aeg" + + "\x1bLääne-Aafrika standardaeg\x17Lääne-Aafrika suveaeg\x0aAlaska aeg\x12" + + "Alaska standardaeg\x0eAlaska suveaeg\x0bAlmatõ aeg\x13Almatõ standardaeg" + + "\x0fAlmatõ suveaeg\x0dAmazonase aeg\x15Amazonase standardaeg\x11Amazonas" + + "e suveaeg\x11Kesk-Ameerika aeg\x19Kesk-Ameerika standardaeg\x15Kesk-Amee" + + "rika suveaeg\x0eIdaranniku aeg\x16Idaranniku standardaeg\x12Idaranniku s" + + "uveaeg\x15Mäestikuvööndi aeg\x1dMäestikuvööndi standardaeg\x19Mäestikuvö" + + "öndi suveaeg\x12Vaikse ookeani aeg\x1aVaikse ookeani standardaeg\x16Vai" + + "kse ookeani suveaeg\x0cAnadõri aeg\x14Anadõri standardaeg\x10Anadõri suv" + + "eaeg\x08Apia aeg\x10Apia standardaeg\x0cApia suveaeg\x09Aktau aeg\x11Akt" + + "au standardaeg\x0dAktau suveaeg\x0bAktöbe aeg\x13Aktöbe standardaeg\x0fA" + + "ktöbe suveaeg\x0bAraabia aeg\x13Araabia standardaeg\x0fAraabia suveaeg" + + "\x0dArgentina aeg\x15Argentina standardaeg\x11Argentina suveaeg\x15Lääne" + + "-Argentina aeg\x1dLääne-Argentina standardaeg\x19Lääne-Argentina suveaeg" + + "\x0cArmeenia aeg\x14Armeenia standardaeg\x10Armeenia suveaeg\x0bAtlandi " + + "aeg\x13Atlandi standardaeg\x0fAtlandi suveaeg\x13Kesk-Austraalia aeg\x1b" + + "Kesk-Austraalia standardaeg\x17Kesk-Austraalia suveaeg\x1bAustraalia Kes" + + "k-Lääne aeg#Austraalia Kesk-Lääne standardaeg\x1fAustraalia Kesk-Lääne s" + + "uveaeg\x12Ida-Austraalia aeg\x1aIda-Austraalia standardaeg\x16Ida-Austra" + + "alia suveaeg\x16Lääne-Austraalia aeg\x1eLääne-Austraalia standardaeg\x1a" + + "Lääne-Austraalia suveaeg\x12Aserbaidžaani aeg\x1aAserbaidžaani standarda" + + "eg\x16Aserbaidžaani suveaeg\x0dAssooride aeg\x15Assooride standardaeg" + + "\x11Assooride suveaeg\x0fBangladeshi aeg\x17Bangladeshi standardaeg\x13B" + + "angladeshi suveaeg\x0bBhutani aeg\x0cBoliivia aeg\x0dBrasiilia aeg\x15Br" + + "asiilia standardaeg\x11Brasiilia suveaeg\x0aBrunei aeg\x13Roheneemesaart" + + "e aeg\x1bRoheneemesaarte standardaeg\x17Roheneemesaarte suveaeg\x09Casey" + + " aeg\x15Tšamorro standardaeg\x0cChathami aeg\x14Chathami standardaeg\x10" + + "Chathami suveaeg\x0bTšiili aeg\x13Tšiili standardaeg\x0fTšiili suveaeg" + + "\x09Hiina aeg\x11Hiina standardaeg\x0dHiina suveaeg\x10Tšojbalsani aeg" + + "\x18Tšojbalsani standardaeg\x14Tšojbalsani suveaeg\x0fJõulusaare aeg\x10" + + "Kookossaarte aeg\x0cColombia aeg\x14Colombia standardaeg\x10Colombia suv" + + "eaeg\x10Cooki saarte aeg\x18Cooki saarte standardaeg\x1cCooki saarte osa" + + "line suveaeg\x09Kuuba aeg\x11Kuuba standardaeg\x0dKuuba suveaeg\x0aDavis" + + "e aeg\x1aDumont-d’Urville’i aeg\x0eIda-Timori aeg\x13Lihavõttesaare aeg" + + "\x1bLihavõttesaare standardaeg\x17Lihavõttesaare suveaeg\x0cEcuadori aeg" + + "\x10Kesk-Euroopa aeg\x18Kesk-Euroopa standardaeg\x14Kesk-Euroopa suveaeg" + + "\x0fIda-Euroopa aeg\x17Ida-Euroopa standardaeg\x13Ida-Euroopa suveaeg" + + "\x1dKaliningradi ja Valgevene aeg\x13Lääne-Euroopa aeg\x1bLääne-Euroopa " + + "standardaeg\x17Lääne-Euroopa suveaeg\x14Falklandi saarte aeg\x1cFalkland" + + "i saarte standardaeg\x18Falklandi saarte suveaeg\x0aFidži aeg\x12Fidži s" + + "tandardaeg\x0eFidži suveaeg\x16Prantsuse Guajaana aeg*Prantsuse Antarkti" + + "liste ja Lõunaalade aeg\x0eGalapagose aeg\x0eGambier’ aeg\x0bGruusia aeg" + + "\x13Gruusia standardaeg\x0fGruusia suveaeg\x13Gilberti saarte aeg\x0eGre" + + "enwichi aeg\x13Ida-Gröönimaa aeg\x1bIda-Gröönimaa standardaeg\x17Ida-Grö" + + "önimaa suveaeg\x17Lääne-Gröönimaa aeg\x1fLääne-Gröönimaa standardaeg" + + "\x1bLääne-Gröönimaa suveaeg\x11Guami standardaeg\x18Pärsia lahe standard" + + "aeg\x0aGuyana aeg\x12Hawaii-Aleuudi aeg\x1aHawaii-Aleuudi standardaeg" + + "\x16Hawaii-Aleuudi suveaeg\x0dHongkongi aeg\x15Hongkongi standardaeg\x11" + + "Hongkongi suveaeg\x09Hovdi aeg\x11Hovdi standardaeg\x0dHovdi suveaeg\x09" + + "India aeg\x11India ookeani aeg\x0dIndohiina aeg\x13Kesk-Indoneesia aeg" + + "\x12Ida-Indoneesia aeg\x16Lääne-Indoneesia aeg\x0aIraani aeg\x12Iraani s" + + "tandardaeg\x0eIraani suveaeg\x0cIrkutski aeg\x14Irkutski standardaeg\x10" + + "Irkutski suveaeg\x0cIisraeli aeg\x14Iisraeli standardaeg\x10Iisraeli suv" + + "eaeg\x0bJaapani aeg\x13Jaapani standardaeg\x0fJaapani suveaeg\x1dPetropa" + + "vlovsk-Kamtšatski aeg\x16Kamtšatka standardaeg\x12Kamtšatka suveaeg\x12I" + + "da-Kasahstani aeg\x16Lääne-Kasahstani aeg\x09Korea aeg\x11Korea standard" + + "aeg\x0dKorea suveaeg\x0aKosrae aeg\x10Krasnojarski aeg\x18Krasnojarski s" + + "tandardaeg\x14Krasnojarski suveaeg\x11Kõrgõzstani aeg\x0dSri Lanka aeg" + + "\x13Line’i saarte aeg\x11Lord Howe’i aeg\x19Lord Howe’i standardaeg\x15L" + + "ord Howe’i suveaeg\x09Macau aeg\x11Macau standardaeg\x0dMacau suveaeg" + + "\x13Macquarie saare aeg\x0cMagadani aeg\x14Magadani standardaeg\x10Magad" + + "ani suveaeg\x12Malaisia \u200b\u200baeg\x0cMaldiivi aeg\x10Markiisaarte " + + "aeg\x14Marshalli Saarte aeg\x0eMauritiuse aeg\x16Mauritiuse standardaeg" + + "\x12Mauritiuse suveaeg\x0bMawsoni aeg\x11Loode-Mehhiko aeg\x19Loode-Mehh" + + "iko standardaeg\x15Loode-Mehhiko suveaeg\x1aMehhiko Vaikse ookeani aeg\"" + + "Mehhiko Vaikse ookeani standardaeg\x1eMehhiko Vaikse ookeani suveaeg\x10" + + "Ulaanbaatari aeg\x18Ulaanbaatari standardaeg\x14Ulaanbaatari suveaeg\x0a" + + "Moskva aeg\x12Moskva standardaeg\x0eMoskva suveaeg\x09Birma aeg\x09Nauru" + + " aeg\x0aNepali aeg\x12Uus-Kaledoonia aeg\x1aUus-Kaledoonia standardaeg" + + "\x16Uus-Kaledoonia suveaeg\x0fUus-Meremaa aeg\x17Uus-Meremaa standardaeg" + + "\x13Uus-Meremaa suveaeg\x11Newfoundlandi aeg\x19Newfoundlandi standardae" + + "g\x15Newfoundlandi suveaeg\x08Niue aeg\x13Norfolki saarte aeg\x17Fernand" + + "o de Noronha aeg\x1fFernando de Noronha standardaeg\x1bFernando de Noron" + + "ha suveaeg\x13Põhja-Mariaani aeg\x10Novosibirski aeg\x18Novosibirski sta" + + "ndardaeg\x14Novosibirski suveaeg\x09Omski aeg\x11Omski standardaeg\x0dOm" + + "ski suveaeg\x0dPakistani aeg\x15Pakistani standardaeg\x11Pakistani suvea" + + "eg\x09Belau aeg\x15Paapua Uus-Guinea aeg\x0cParaguay aeg\x14Paraguay sta" + + "ndardaeg\x10Paraguay suveaeg\x09Peruu aeg\x11Peruu standardaeg\x0dPeruu " + + "suveaeg\x0dFilipiini aeg\x15Filipiini standardaeg\x11Filipiini suveaeg" + + "\x14Fööniksisaarte aeg!Saint-Pierre’i ja Miqueloni aeg)Saint-Pierre’i ja" + + " Miqueloni standardaeg%Saint-Pierre’i ja Miqueloni suveaeg\x0dPitcairni " + + "aeg\x0bPohnpei aeg\x0ePyongyangi aeg\x0fKõzõlorda aeg\x17Kõzõlorda stand" + + "ardaeg\x13Kõzõlorda suveaeg\x0dRéunioni aeg\x0bRothera aeg\x0dSahhalini " + + "aeg\x15Sahhalini standardaeg\x11Sahhalini suveaeg\x0aSamara aeg\x12Samar" + + "a standardaeg\x0eSamara suveaeg\x09Samoa aeg\x11Samoa standardaeg\x0dSam" + + "oa suveaeg\x0dSeišelli aeg\x15Singapuri standardaeg\x14Saalomoni Saarte " + + "aeg\x12Lõuna-Georgia aeg\x0cSuriname aeg\x09Syowa aeg\x0aTahiti aeg\x0aT" + + "aipei aeg\x12Taipei standardaeg\x0eTaipei suveaeg\x11Tadžikistani aeg" + + "\x0bTokelau aeg\x09Tonga aeg\x11Tonga standardaeg\x0dTonga suveaeg\x0aCh" + + "uuki aeg\x12Türkmenistani aeg\x1aTürkmenistani standardaeg\x16Türkmenist" + + "ani suveaeg\x0aTuvalu aeg\x0bUruguay aeg\x13Uruguay standardaeg\x0fUrugu" + + "ay suveaeg\x0fUsbekistani aeg\x17Usbekistani standardaeg\x13Usbekistani " + + "suveaeg\x0bVanuatu aeg\x13Vanuatu standardaeg\x0fVanuatu suveaeg\x0dVene" + + "zuela aeg\x10Vladivostoki aeg\x18Vladivostoki standardaeg\x14Vladivostok" + + "i suveaeg\x0eVolgogradi aeg\x16Volgogradi standardaeg\x12Volgogradi suve" + + "aeg\x0bVostoki aeg\x0cWake’i aeg\x15Wallise ja Futuna aeg\x0cJakutski ae" + + "g\x14Jakutski standardaeg\x10Jakutski suveaeg\x12Jakaterinburgi aeg\x1aJ" + + "ekaterinburgi standardaeg\x16Jakaterinburgi suveaeg\x07Pebrero\x05Marso" + + "\x05Hunyo\x05Hulyo\x09Setyembre\x07Oktubre\x09Nobyembre\x09Disyembre\x0e" + + "2.º trimestre\x0e4.º trimestre\x05Marzo\x05Abril\x06Agosto\x09∅∅∅\x03MYT" + + "\x03SGT" + +var bucket32 string = "" + // Size: 10537 bytes + "\x02BG#G. 'aroko' y. 'urteko' MMMM d, EEEE\x1dG. 'aroko' y. 'urteko' MMM" + + "M d\x1bG. 'aroko' y('e')'ko' MMM d\x04urt.\x04ots.\x04mar.\x04api.\x04ma" + + "i.\x04eka.\x04uzt.\x04abu.\x04ira.\x04urr.\x04aza.\x04abe.\x09urtarrila" + + "\x07otsaila\x07martxoa\x07apirila\x07maiatza\x06ekaina\x07uztaila\x07abu" + + "ztua\x06iraila\x05urria\x06azaroa\x07abendua\x07Otsaila\x07Martxoa\x07Ap" + + "irila\x07Maiatza\x06Ekaina\x07Uztaila\x07Abuztua\x06Iraila\x05Urria\x06A" + + "zaroa\x07Abendua\x03ig.\x03al.\x03ar.\x03az.\x03og.\x03or.\x03lr.\x07iga" + + "ndea\x0aastelehena\x09asteartea\x0aasteazkena\x08osteguna\x08ostirala" + + "\x09larunbata\x07Igandea\x0aAstelehena\x09Asteartea\x0aAsteazkena\x08Ost" + + "eguna\x08Ostirala\x09Larunbata\x031Hh\x032Hh\x033Hh\x034Hh\x0e1. hiruhil" + + "ekoa\x0e2. hiruhilekoa\x0e3. hiruhilekoa\x0e4. hiruhilekoa\x08gauerdia" + + "\x08goizald.\x07goizeko\x07eguerd.\x07arrats.\x07iluntz.\x06gaueko\x0ago" + + "izaldeko\x09eguerdiko\x0carratsaldeko\x09iluntzeko\x05goiz.\x05goiza\x04" + + "gaua\x09goizaldea\x08eguerdia\x0barratsaldea\x08iluntzea\x04K.a.\x15Gure" + + " aroaren aurretik\x0eKristo ondoren\x09Gure aroa\x06G.a.a.\x04K.o.\x04G." + + "a.!y('e')'ko' MMMM'ren' d('a'), EEEE\x1by('e')'ko' MMMM'ren' d('a')\x06y" + + "y/M/d\x0fHH:mm:ss (zzzz)\x0cHH:mm:ss (z)\x0fR.O.C. aurretik\x06R.O.C." + + "\x04aroa\x05urtea\x03iaz\x06aurten\x0fhurrengo urtean\x0e{0} urte barru" + + "\x0eDuela {0} urte\x0daurreko urtea\x0ehurrengo urtea\x0bhiruhilekoa\x13" + + "aurreko hiruhilekoa\x0ehiruhileko hau\x14hurrengo hiruhilekoa\x14{0} hir" + + "uhileko barru\x14Duela {0} hiruhileko\x08hiruhil.\x09hilabetea\x12aurrek" + + "o hilabetean\x10hilabete honetan\x13hurrengo hilabetean\x12{0} hilabete " + + "barru\x12Duela {0} hilabete\x04hil.\x05astea\x0eaurreko astean\x0caste h" + + "onetan\x0fhurrengo astean\x0e{0} aste barru\x0eDuela {0} aste\x09{0} ast" + + "ea\x04ast.\x0fhileko #. astea\x05eguna\x09herenegun\x04atzo\x04gaur\x05b" + + "ihar\x04etzi\x0e{0} egun barru\x0eDuela {0} egun\x03eg.\x0furteko #. egu" + + "na\x08asteguna\x12hileko #. asteguna\x10aurreko igandean\x0eigande honet" + + "an\x11hurrengo igandean\x10{0} igande barru\x10Duela {0} igande\x0baurre" + + "ko ig.\x0big. honetan\x0churrengo ig.\x14aurreko astelehenean\x11asteleh" + + "en honetan\x15hurrengo astelehenean\x13{0} astelehen barru\x13Duela {0} " + + "astelehen\x0baurreko al.\x0bal. honetan\x0churrengo al.\x0d{0} al. barru" + + "\x0dDuela {0} al.\x12aurreko asteartean\x10astearte honetan\x13hurrengo " + + "asteartean\x12{0} astearte barru\x12Duela {0} astearte\x0baurreko ar." + + "\x0bar. honetan\x0churrengo ar.\x0d{0} ar. barru\x0dDuela {0} ar.\x14aur" + + "reko asteazkenean\x11asteazken honetan\x15hurrengo asteazkenean\x13{0} a" + + "steazken barru\x13Duela {0} asteazken\x0baurreko az.\x0baz. honetan\x0ch" + + "urrengo az.\x12aurreko ostegunean\x0fostegun honetan\x13hurrengo ostegun" + + "ean\x11{0} ostegun barru\x11Duela {0} ostegun\x0baurreko og.\x0bog. hone" + + "tan\x0churrengo og.\x12aurreko ostiralean\x0fostiral honetan\x13hurrengo" + + " ostiralean\x11{0} ostiral barru\x11Duela {0} ostiral\x0baurreko or.\x0b" + + "or. honetan\x0churrengo or.\x13aurreko larunbatean\x10larunbat honetan" + + "\x14hurrengo larunbatean\x12{0} larunbat barru\x12Duela {0} larunbat\x0b" + + "aurreko lr.\x0blr. honetan\x0churrengo lr.\x05ordua\x0cordu honetan\x0e{" + + "0} ordu barru\x0eDuela {0} ordu\x07minutua\x0eminutu honetan\x10{0} minu" + + "tu barru\x10Duela {0} minutu\x08segundoa\x05orain\x11{0} segundo barru" + + "\x11Duela {0} segundo\x09ordu-zona\x10{0} aldeko ordua\x11{0} (udako ord" + + "ua)\x18{0}(e)ko ordu estandarra\x1bOrdu Unibertsal Koordinatua\x15Londre" + + "sko udako ordua\x19Irlandako ordu estandarra\x12Afganistango ordua\x19Af" + + "rikako erdialdeko ordua\x18Afrikako ekialdeko ordua\x19Afrikako hegoalde" + + "ko ordua\x1bAfrikako mendebaldeko ordua%Afrikako mendebaldeko ordu estan" + + "darra!Afrikako mendebaldeko udako ordua\x0eAlaskako ordua\x18Alaskako or" + + "du estandarra\x14Alaskako udako ordua\x10Amazoniako ordua\x1aAmazoniako " + + "ordu estandarra\x16Amazoniako udako ordua\x1fIpar Amerikako erdialdeko o" + + "rdua)Ipar Amerikako erdialdeko ordu estandarra%Ipar Amerikako erdialdeko" + + " udako ordua\x1eIpar Amerikako ekialdeko ordua(Ipar Amerikako ekialdeko " + + "ordu estandarra$Ipar Amerikako ekialdeko udako ordua Ipar Amerikako mend" + + "ialdeko ordua*Ipar Amerikako mendialdeko ordu estandarra&Ipar Amerikako " + + "mendialdeko udako ordua\x1fIpar Amerikako Pazifikoko ordua)Ipar Amerikak" + + "o Pazifikoko ordu estandarra%Ipar Amerikako Pazifikoko udako ordua\x10An" + + "adyrreko ordua\x1aAnadyrreko ordu estandarra\x16Anadyrreko udako ordua" + + "\x0cApiako ordua\x16Apiako ordu estandarra\x12Apiako udako ordua\x0eArab" + + "iako ordua\x18Arabiako ordu estandarra\x14Arabiako udako ordua\x11Argent" + + "inako ordua\x1bArgentinako ordu estandarra\x17Argentinako udako ordua" + + "\x1cArgentina mendebaldeko ordua&Argentina mendebaldeko ordu estandarra" + + "\"Argentina mendebaldeko udako ordua\x0fArmeniako ordua\x19Armeniako ord" + + "u estandarra\x15Armeniako udako ordua Ipar Amerikako Atlantikoko ordua*I" + + "par Amerikako Atlantikoko ordu estandarra&Ipar Amerikako Atlantikoko uda" + + "ko ordua\x1cAustraliako erdialdeko ordua&Australiako erdialdeko ordu est" + + "andarra\"Australiako erdialdeko udako ordua#Australiako erdi-mendebaldek" + + "o ordua-Australiako erdi-mendebaldeko ordu estandarra)Australiako erdi-m" + + "endebaldeko udako ordua\x1bAustraliako ekialdeko ordua%Australiako ekial" + + "deko ordu estandarra!Australiako ekialdeko udako ordua\x1eAustraliako me" + + "ndebaldeko ordua(Australiako mendebaldeko ordu estandarra$Australiako me" + + "ndebaldeko udako ordua\x12Azerbaijango ordua\x1cAzerbaijango ordu estand" + + "arra\x18Azerbaijango udako ordua\x10Azoreetako ordua\x1aAzoreetako ordu " + + "estandarra\x16Azoreetako udako ordua\x13Bangladesheko ordua\x1dBanglades" + + "heko ordu estandarra\x19Bangladesheko udako ordua\x0eBhutango ordua\x0fB" + + "oliviako ordua\x10Brasiliako ordua\x1aBrasiliako ordu estandarra\x16Bras" + + "iliako udako ordua\x19Brunei Darussalamgo ordua\x12Cabo Verdeko ordua" + + "\x1cCabo Verdeko ordu estandarra\x18Cabo Verdeko udako ordua\x1aChamorro" + + "ko ordu estandarra\x0fChathamgo ordua\x19Chathamgo ordu estandarra\x15Ch" + + "athamgo udako ordua\x0dTxileko ordua\x17Txileko ordu estandarra\x13Txile" + + "ko udako ordua\x0dTxinako ordua\x17Txinako ordu estandarra\x13Txinako ud" + + "ako ordua\x12Txoibalsango ordua\x1cTxoibalsango ordu estandarra\x18Txoib" + + "alsango udako ordua\x18Christmas uharteko ordua\x17Cocos uharteetako ord" + + "ua\x10Kolonbiako ordua\x1aKolonbiako ordu estandarra\x16Kolonbiako udako" + + " ordua\x16Cook uharteetako ordua Cook uharteetako ordu estandarra%Cook u" + + "harteetako uda erdialdeko ordua\x0cKubako ordua\x16Kubako ordu estandarr" + + "a\x12Kubako udako ordua\x0eDaviseko ordua\x1aDumont-d’Urvilleko ordua" + + "\x19Ekialdeko Timorreko ordua\x14Pazko uharteko ordua\x1ePazko uharteko " + + "ordu estandarra\x1aPazko uharteko udako ordua\x11Ekuadorreko ordua\x19Eu" + + "ropako erdialdeko ordua#Europako erdialdeko ordu estandarra\x1fEuropako " + + "erdialdeko udako ordua\x18Europako ekialdeko ordua\"Europako ekialdeko o" + + "rdu estandarra\x1eEuropako ekialdeko udako ordua\x1fEuropako ekialde urr" + + "uneko ordua\x1bEuropako mendebaldeko ordua%Europako mendebaldeko ordu es" + + "tandarra!Europako mendebaldeko udako ordua\x1aFalkland uharteetako ordua" + + "$Falkland uharteetako ordu estandarra Falkland uharteetako udako ordua" + + "\x0cFijiko ordua\x16Fijiko ordu estandarra\x12Fijiko udako ordua\x18Guya" + + "na Frantseseko ordua9Frantziaren lurralde austral eta antartikoetako ord" + + "utegia\x13Galapagoetako ordua\x13Gambierretako ordua\x0fGeorgiako ordua" + + "\x19Georgiako ordu estandarra\x15Georgiako udako ordua\x19Gilbert uharte" + + "etako ordua\x1fGreenwichko meridianoaren ordua\x1dGroenlandiako ekialdek" + + "o ordua'Groenlandiako ekialdeko ordu estandarra#Groenlandiako ekialdeko " + + "udako ordua Groenlandiako mendebaldeko ordua*Groenlandiako mendebaldeko " + + "ordu estandarra&Groenlandiako mendebaldeko udako ordua\x17Golkoko ordu e" + + "standarra\x0eGuyanako ordua!Hawaii-Aleutiar uharteetako ordua+Hawaii-Ale" + + "utiar uharteetako ordu estandarra'Hawaii-Aleutiar uharteetako udako ordu" + + "a\x10Hong Kongo ordua\x1aHong Kongo ordu estandarra\x16Hong Kongo udako " + + "ordua\x0eKhovdeko ordua\x18Khovdeko ordu estandarra\x14Khovdeko udako or" + + "dua\x0dIndiako ordua\x16Indiako Ozeanoko ordua\x11Indotxinako ordua\x1cI" + + "ndonesiako erdialdeko ordua\x1bIndonesiako ekialdeko ordua\x1eIndonesiak" + + "o mendebaldeko ordua\x0cIrango ordua\x16Irango ordu estandarra\x12Irango" + + " udako ordua\x10Irkutskeko ordua\x1aIrkutskeko ordu estandarra\x16Irkuts" + + "keko udako ordua\x0eIsraelgo ordua\x18Israelgo ordu estandarra\x14Israel" + + "go udako ordua\x0fJaponiako ordua\x19Japoniako ordu estandarra\x15Japoni" + + "ako udako ordua Petropavlovsk-Kamchatskiko ordua*Petropavlovsk-Kamchatsk" + + "iko ordu estandarra&Petropavlovsk-Kamchatskiko udako ordua\x1cKazakhstan" + + "go ekialdeko ordua\x1fKazakhstango mendebaldeko ordua\x0dKoreako ordua" + + "\x17Koreako ordu estandarra\x13Koreako udako ordua\x0eKosraeko ordua\x14" + + "Krasnoiarskeko ordua\x1eKrasnoiarskeko ordu estandarra\x1aKrasnoiarskeko" + + " udako ordua\x13Kirgizistango ordua\x16Line uharteetako ordua\x11Lord Ho" + + "weko ordua\x1bLord Howeko ordu estandarra\x17Lord Howeko udako ordua\x18" + + "Macquarie uharteko ordua\x0fMagadango ordua\x19Magadango ordu estandarra" + + "\x15Magadango udako ordua\x10Malaysiako ordua\x11Maldivetako ordua\x11Ma" + + "rkesetako ordua\x1aMarshall Uharteetako ordua\x10Maurizioko ordua\x1aMau" + + "rizioko ordu estandarra\x16Maurizioko udako ordua\x0fMawsoneko ordua\x1d" + + "Mexikoko ipar-ekialdeko ordua'Mexikoko ipar-ekialdeko ordu estandarra#Me" + + "xikoko ipar-ekialdeko udako ordua\x19Mexikoko Pazifikoko ordua#Mexikoko " + + "Pazifikoko ordu estandarra\x1fMexikoko Pazifikoko udako ordua\x14Ulan Ba" + + "torreko ordua\x1eUlan Batorreko ordu estandarra\x1aUlan Batorreko udako " + + "ordua\x0dMoskuko ordua\x17Moskuko ordu estandarra\x13Moskuko udako ordua" + + "\x11Myanmarreko ordua\x0dNauruko ordua\x0dNepalgo ordua\x17Kaledonia Ber" + + "riko ordua!Kaledonia Berriko ordu estandarra\x1dKaledonia Berriko udako " + + "ordua\x16Zeelanda Berriko ordua Zeelanda Berriko ordu estandarra\x1cZeel" + + "anda Berriko udako ordua\x0eTernuako ordua\x18Ternuako ordu estandarra" + + "\x14Ternuako udako ordua\x0cNiueko ordua\x19Norfolk uharteetako ordua" + + "\x1bFernando de Noronhako ordua%Fernando de Noronhako ordu estandarra!Fe" + + "rnando de Noronhako udako ordua\x14Novosibirskeko ordua\x1eNovosibirskek" + + "o ordu estandarra\x1aNovosibirskeko udako ordua\x0dOmskeko ordua\x17Omsk" + + "eko ordu estandarra\x13Omskeko udako ordua\x10Pakistango ordua\x1aPakist" + + "ango ordu estandarra\x16Pakistango udako ordua\x0dPalauko ordua\x19Papua" + + " Ginea Berriko ordua\x10Paraguaiko ordua\x1aParaguaiko ordu estandarra" + + "\x16Paraguaiko udako ordua\x0cPeruko ordua\x16Peruko ordu estandarra\x12" + + "Peruko udako ordua\x12Filipinetako ordua\x1cFilipinetako ordu estandarra" + + "\x18Filipinetako udako ordua\x19Phoenix uharteetako ordua!Saint-Pierre e" + + "ta Mikeluneko ordua+Saint-Pierre eta Mikeluneko ordu estandarra'Saint-Pi" + + "erre eta Mikeluneko udako ordua\x11Pitcairneko ordua\x0ePonapeko ordua" + + "\x12Piongiangeko ordua\x10Reunioneko ordua\x0fRotherako ordua\x10Sakhali" + + "ngo ordua\x1aSakhalingo ordu estandarra\x16Sakhalingo udako ordua\x0eSam" + + "arako ordua\x18Samarako ordu estandarra\x14Samarako udako ordua\x0dSamoa" + + "ko ordua\x17Samoako ordu estandarra\x13Samoako udako ordua\x1bSeychelle " + + "uharteetako ordua\x1cSingapurreko ordu estandarra\x19Salomon Uharteetako" + + " ordua\x1cHegoaldeko Georgietako ordua\x0fSurinamgo ordua\x0dSyowako ord" + + "ua\x0eTahitiko ordua\x0eTaipeiko ordua\x18Taipeiko ordu estandarra\x14Ta" + + "ipeiko udako ordua\x13Tadjikistango ordua\x0fTokelauko ordua\x0dTongako " + + "ordua\x17Tongako ordu estandarra\x13Tongako udako ordua\x0eChuukeko ordu" + + "a\x14Turkmenistango ordua\x1eTurkmenistango ordu estandarra\x1aTurkmenis" + + "tango udako ordua\x0eTuvaluko ordua\x0fUruguaiko ordua\x19Uruguaiko ordu" + + " estandarra\x15Uruguaiko udako ordua\x12Uzbekistango ordua\x1cUzbekistan" + + "go ordu estandarra\x18Uzbekistango udako ordua\x0fVanuatuko ordua\x19Van" + + "uatuko ordu estandarra\x15Vanuatuko udako ordua\x11Venezuelako ordua\x14" + + "Vladivostokeko ordua\x1eVladivostokeko ordu estandarra\x1aVladivostokeko" + + " udako ordua\x12Volgogradeko ordua\x1cVolgogradeko ordu estandarra\x18Vo" + + "lgogradeko udako ordua\x0fVostokeko ordua\x13Wake uharteko ordua\x1dWall" + + "is eta Futunako ordutegia\x10Jakutskeko ordua\x1aJakutskeko ordu estanda" + + "rra\x16Jakutskeko udako ordua\x16Jekaterinburgeko ordua Jekaterinburgeko" + + " ordu estandarra\x1cJekaterinburgeko udako ordua" + +var bucket33 string = "" + // Size: 14971 bytes + "\x03ngo\x03ngb\x03ngl\x03ngn\x03ngt\x03ngs\x03ngz\x03ngm\x03nge\x03nga" + + "\x04ngad\x04ngab\x0angɔn osú\x0bngɔn bɛ̌\x0bngɔn lála\x0bngɔn nyina\x0bn" + + "gɔn tána\x0dngɔn saməna\x0fngɔn zamgbála\x0angɔn mwom\x0cngɔn ebulú\x0bn" + + "gɔn awóm\x14ngɔn awóm ai dziá\x14ngɔn awóm ai bɛ̌\x06sɔ́n\x06mɔ́n\x03smb" + + "\x03sml\x03smn\x04fúl\x04sér\x09sɔ́ndɔ\x08mɔ́ndi\x1bsɔ́ndɔ məlú mə́bɛ̌" + + "\x1bsɔ́ndɔ məlú mə́lɛ́\x19sɔ́ndɔ məlú mə́nyi\x08fúladé\x08séradé\x03nno" + + "\x03nnb\x03nnl\x04nnny\x13nsámbá ngɔn asú\x14nsámbá ngɔn bɛ̌\x14nsámbá n" + + "gɔn lála\x14nsámbá ngɔn nyina\x0akíkíríg\x0cngəgógəle\x14osúsúa Yésus ki" + + "ri\x14ámvus Yésus Kirís\x03oyk\x03ayk\x05Abǒg\x06M̀bú\x05Ngɔn\x09Sɔ́ndɔ" + + "\x05Amǒs\x07Angogé\x04Aná\x07Okírí\x13Amǒs yá sɔ́ndɔ\x15Kírí / Ngəgógəle" + + "\x05Awola\x08Enútɛn\x09Akábəga\x0cNkɔŋ Awola\x17تقویم بودایی\x06موش\x06گ" + + "او\x06ببر\x0aخرگوش\x0aاژدها\x06مار\x06اسب\x04بز\x0aمیمون\x08خروس\x04سگ" + + "\x06خوک\x1dقبل از حلول مسیح\x1dبعد از حلول مسیح\x14قبل از مسیح\x12پس از " + + "مسیح\x06ق.م.\x06ب.م.\x0aمسکرم\x0aتکیمت\x0aهیدار\x0dطه\u200cساز\x04تر" + + "\x0cیکوتیت\x0cمگابیت\x0cمیازیا\x0fگین\u200cبوت\x06سنه\x08حمله\x08نحسه" + + "\x0cپاگومه\x0fG EEEE d MMMM y\x0aG d MMMM y\x07G d/M/y\x12{1}، ساعت {0}" + + "\x0c{1}،\u200f {0}\x0eژانویهٔ\x0cفوریهٔ\x08مارس\x0aآوریل\x06مهٔ\x08ژوئن" + + "\x0cژوئیهٔ\x06اوت\x0eسپتامبر\x0aاکتبر\x0cنوامبر\x0cدسامبر\x02ژ\x02ف\x02م" + + "\x02آ\x02ا\x02س\x02ن\x02د\x0cژانویه\x0aفوریه\x04مه\x0aژوئیه\x0cیکشنبه" + + "\x0cدوشنبه\x0fسه\u200cشنبه\x10چهارشنبه\x0eپنجشنبه\x08جمعه\x08شنبه\x04۱ش" + + "\x04۲ش\x04۳ش\x04۴ش\x04۵ش\x02ج\x02ش\x02ج\x02ش\x09س\u200cم۱\x09س\u200cم۲" + + "\x09س\u200cم۳\x09س\u200cم۴\x02۱\x02۲\x02۳\x02۴\x18سه\u200cماههٔ اول\x18س" + + "ه\u200cماههٔ دوم\x18سه\u200cماههٔ سوم\x1cسه\u200cماههٔ چهارم\x0fنیمه" + + "\u200cشب\x06ق.ظ.\x06ظهر\x06ب.ظ.\x06صبح\x06عصر\x04شب\x02ق\x02ظ\x02ع\x13قب" + + "ل\u200cازظهر\x10بعدازظهر\x16قبل از میلاد!قبل از دوران مشترک\x0cمیلادی" + + "\x15دوران مشترک\x08ق.د.م\x03م.\x06د.م.\x05y/M/d\x0bH:mm:ss (z)\x08تشری" + + "\x0aحشوان\x08کسلو\x06طوت\x08شباط\x08آذار\x0aواذار\x17واذار الثانی\x0aنیس" + + "ان\x08ایار\x0aسیوان\x08تموز\x04آب\x0aایلول\x13تقویم عبری\x0aچیتره\x0eوی" + + "شاکهه\x0cجییشته\x0cآشادهه\x0cشراونه\x0cبهادره\x0aآشوین\x0eکارتیکه\x0eآگ" + + "رهینه\x0aپاوشه\x0aماگهه\x10پهالگونه\x13تقویم ساکا\x11هجری قمری\x09ه" + + "\u200d.ق.\x07y/M/d G\x0eفروردین\x10اردیبهشت\x0aخرداد\x06تیر\x0aمرداد\x0c" + + "شهریور\x06مهر\x08آبان\x06آذر\x04دی\x08بهمن\x0aاسفند\x02ا\x02خ\x02ت\x02ش" + + "\x02آ\x02د\x02ب\x11هجری شمسی\x09ه\u200d.ش.\x12قبل از R.O.C.\x15تقویم مین" + + "گو\x08دوره\x06سال\x11سال گذشته\x0aامسال\x11سال آینده\x11{0} سال بعد\x11" + + "{0} سال پیش\x0fسه\u200cماهه\x1cسه\u200cماههٔ گذشته\x1cسه\u200cماههٔ کنون" + + "ی\x1cسه\u200cماههٔ آینده\x1c{0} سه\u200cماههٔ بعد\x1c{0} سه\u200cماههٔ " + + "پیش\x06ماه\x11ماه گذشته\x0dاین ماه\x11ماه آینده\x11{0} ماه بعد\x11{0} م" + + "اه پیش\x0dماه پیش\x08هفته\x15هفتهٔ گذشته\x0fاین هفته\x15هفتهٔ آینده\x13" + + "{0} هفته بعد\x13{0} هفته پیش\x0eهفتهٔ {0}\x11هفتهٔ ماه\x06روز\x0cپریروز" + + "\x0aدیروز\x0aامروز\x08فردا\x0fپس\u200cفردا\x11{0} روز بعد\x11{0} روز پیش" + + "\x0dروز سال\x0fروز هفته\x16روز کاری ماه\x19یکشنبهٔ گذشته\x13این یکشنبه" + + "\x19یکشنبهٔ آینده\x19{0} یکشنبهٔ بعد\x19{0} یکشنبهٔ پیش\x19دوشنبهٔ گذشته" + + "\x13این دوشنبه\x19دوشنبهٔ آینده\x19{0} دوشنبهٔ بعد\x19{0} دوشنبهٔ پیش" + + "\x1cسه\u200cشنبهٔ گذشته\x16این سه\u200cشنبه\x1cسه\u200cشنبهٔ آینده\x1c{0" + + "} سه\u200cشنبهٔ بعد\x1c{0} سه\u200cشنبهٔ پیش\x1dچهارشنبهٔ گذشته\x17این چ" + + "هارشنبه\x1dچهارشنبهٔ آینده\x1d{0} چهارشنبهٔ بعد\x1d{0} چهارشنبهٔ پیش" + + "\x1bپنجشنبهٔ گذشته\x15این پنجشنبه\x1bپنجشنبهٔ آینده\x1b{0} پنجشنبهٔ بعد" + + "\x1b{0} پنجشنبهٔ پیش\x15جمعهٔ گذشته\x0fاین جمعه\x15جمعهٔ آینده\x15{0} جم" + + "عهٔ بعد\x15{0} جمعهٔ پیش\x15شنبهٔ گذشته\x0fاین شنبه\x15شنبهٔ آینده\x15{" + + "0} شنبهٔ بعد\x15{0} شنبهٔ پیش\x17قبل/بعدازظهر\x08ساعت\x11همین ساعت\x13{0" + + "} ساعت بعد\x13{0} ساعت پیش\x0aدقیقه\x13همین دقیقه\x15{0} دقیقه بعد\x15{0" + + "} دقیقه پیش\x0aثانیه\x0aاکنون\x15{0} ثانیه بعد\x15{0} ثانیه پیش\x17منطقه" + + "ٔ زمانی\x15\u200e+HH:mm;\u200e−HH:mm\x12{0} گرینویچ\x0eگرینویچ\x0aوقت {" + + "0}\x1bوقت تابستانی {0}\x13وقت عادی {0} زمان هماهنگ جهانی(وقت تابستانی بر" + + "یتانیا\x1cوقت عادی ایرلند\x19وقت افغانستان\x1cوقت مرکز افریقا\x1aوقت شر" + + "ق افریقا%وقت عادی جنوب افریقا\x1aوقت غرب افریقا#وقت عادی غرب افریقا+وقت" + + " تابستانی غرب افریقا\x13وقت آلاسکا\x1cوقت عادی آلاسکا$وقت تابستانی آلاسک" + + "ا\x15وقت آلماآتا\x1eوقت عادی آلماآتا&وقت تابستانی آلماآتا\x13وقت آمازون" + + "\x1cوقت عادی آمازون$وقت تابستانی آمازون\x1cوقت مرکز امریکا%وقت عادی مرکز" + + " امریکا-وقت تابستانی مرکز امریکا\x1aوقت شرق امریکا#وقت عادی شرق امریکا+و" + + "قت تابستانی شرق امریکا$وقت کوهستانی امریکا-وقت عادی کوهستانی امریکا5وقت" + + " تابستانی کوهستانی امریکا\x1aوقت غرب امریکا#وقت عادی غرب امریکا+وقت تابس" + + "تانی غرب امریکا\x13وقت آنادیر\x1cوقت عادی آنادیر$وقت تابستانی آنادیر" + + "\x0fوقت آپیا\x18وقت عادی آپیا وقت تابستانی آپیا\x15وقت عربستان\x1eوقت عا" + + "دی عربستان&وقت تابستانی عربستان\x17وقت آرژانتین وقت عادی آرژانتین(وقت ت" + + "ابستانی آرژانتین\x1eوقت غرب آرژانتین'وقت عادی غرب آرژانتین/وقت تابستانی" + + " غرب آرژانتین\x17وقت ارمنستان وقت عادی ارمنستان(وقت تابستانی ارمنستان" + + "\x17وقت آتلانتیک وقت عادی آتلانتیک(وقت تابستانی آتلانتیک وقت مرکز استرال" + + "یا)وقت عادی مرکز استرالیا1وقت تابستانی مرکز استرالیا'وقت مرکز-غرب استرا" + + "لیا0وقت عادی مرکز-غرب استرالیا8وقت تابستانی مرکز-غرب استرالیا\x1eوقت شر" + + "ق استرالیا'وقت عادی شرق استرالیا/وقت تابستانی شرق استرالیا\x1eوقت غرب ا" + + "سترالیا'وقت عادی غرب استرالیا/وقت تابستانی غرب استرالیا&وقت جمهوری آذرب" + + "ایجان/وقت عادی جمهوری آذربایجان7وقت تابستانی جمهوری آذربایجان\x0fوقت آز" + + "ور\x18وقت عادی آزور وقت تابستانی آزور\x15وقت بنگلادش\x1eوقت عادی بنگلاد" + + "ش&وقت تابستانی بنگلادش\x11وقت بوتان\x13وقت بولیوی\x17وقت برازیلیا وقت ع" + + "ادی برازیلیا(وقت تابستانی برازیلیا&وقت برونئی دارالسلام\x16وقت کیپ" + + "\u200cورد\x1fوقت عادی کیپ\u200cورد'وقت تابستانی کیپ\u200cورد\x1cوقت عادی" + + " چامورو\x14وقت چت\u200cهام\x1dوقت عادی چت\u200cهام%وقت تابستانی چت\u200c" + + "هام\x0fوقت شیلی\x18وقت عادی شیلی وقت تابستانی شیلی\x0dوقت چین\x16وقت عا" + + "دی چین\x1eوقت تابستانی چین\x19وقت چویبالسان\"وقت عادی چویبالسان*وقت تاب" + + "ستانی چویبالسان وقت جزیرهٔ کریسمس\x1cوقت جزایر کوکوس\x13وقت کلمبیا\x1cو" + + "قت عادی کلمبیا$وقت تابستانی کلمبیا\x18وقت جزایر کوک!وقت عادی جزایر کوک)" + + "وقت تابستانی جزایر کوک\x0fوقت کوبا\x18وقت عادی کوبا وقت تابستانی کوبا" + + "\x11وقت دیویس\x1eوقت دومون دورویل\x1aوقت تیمور شرقی\x1eوقت جزیرهٔ ایستر'" + + "وقت عادی جزیرهٔ ایستر/وقت تابستانی جزیرهٔ ایستر\x15وقت اکوادور\x1aوقت م" + + "رکز اروپا#وقت عادی مرکز اروپا+وقت تابستانی مرکز اروپا\x18وقت شرق اروپا!" + + "وقت عادی شرق اروپا)وقت تابستانی شرق اروپاDوقت تابستانی مکان\u200cهای دی" + + "گر شرق اروپا\x18وقت غرب اروپا!وقت عادی غرب اروپا)وقت تابستانی غرب اروپا" + + " وقت جزایر فالکلند)وقت عادی جزایر فالکلند1وقت تابستانی جزایر فالکلند\x0f" + + "وقت فیجی\x18وقت عادی فیجی وقت تابستانی فیجی\x1eوقت گویان فرانسهFوقت سرز" + + "مین\u200cهای جنوبی و جنوبگان فرانسه\x19وقت گالاپاگوس\x13وقت گامبیه\x15و" + + "قت گرجستان\x1eوقت عادی گرجستان&وقت تابستانی گرجستان\x1eوقت جزایر گیلبرت" + + "\x15وقت گرینویچ\x1cوقت شرق گرینلند%وقت عادی شرق گرینلند-وقت تابستانی شرق" + + " گرینلند\x1cوقت غرب گرینلند%وقت عادی غرب گرینلند-وقت تابستانی غرب گرینلن" + + "د\x18وقت عادی گوام!وقت عادی خلیج فارس\x11وقت گویان وقت هاوایی‐الوشن)وقت" + + " عادی هاوایی‐الوشن1وقت تابستانی هاوایی‐الوشن\x16وقت هنگ\u200cکنگ\x1fوقت " + + "عادی هنگ\u200cکنگ'وقت تابستانی هنگ\u200cکنگ\x0fوقت خوود\x18وقت عادی خوو" + + "د وقت تابستانی خوود\x0dوقت هند\x1cوقت اقیانوس هند\x15وقت هندوچین\x1eوقت" + + " مرکز اندونزی\x1cوقت شرق اندونزی\x1cوقت غرب اندونزی\x11وقت ایران\x1aوقت " + + "عادی ایران\"وقت تابستانی ایران\x17وقت ایرکوتسک وقت عادی ایرکوتسک(وقت تا" + + "بستانی ایرکوتسک\x15وقت اسرائیل\x1eوقت عادی اسرائیل&وقت تابستانی اسرائیل" + + "\x0fوقت ژاپن\x18وقت عادی ژاپن وقت تابستانی ژاپن2وقت پتروپاولوسک‐کامچاتسک" + + "ی;وقت عادی پتروپاولوسک‐کامچاتسکیCوقت تابستانی پتروپاولوسک‐کامچاتسکی\x1e" + + "وقت شرق قزاقستان\x1eوقت غرب قزاقستان\x0dوقت کره\x16وقت عادی کره\x1eوقت " + + "تابستانی کره\x13وقت کوسرای\x1dوقت کراسنویارسک&وقت عادی کراسنویارسک.وقت " + + "تابستانی کراسنویارسک\x19وقت قرقیزستان\x11وقت لانکا\x1aوقت جزایر لاین" + + "\x11وقت لردهو\x1aوقت عادی لردهو\"وقت تابستانی لردهو\x13وقت ماکائو\x1cوقت" + + " عادی ماکائو$وقت تابستانی ماکائو وقت جزیرهٔ مکواری\x15وقت ماگادان\x1eوقت" + + " عادی ماگادان&وقت تابستانی ماگادان\x11وقت مالزی\x13وقت مالدیو\x15وقت مار" + + "کوئز\x1eوقت جزایر مارشال\x11وقت موریس\x1aوقت عادی موریس\"وقت تابستانی م" + + "وریس\x13وقت ماوسون!وقت شمال غرب مکزیک*وقت عادی شمال غرب مکزیک2وقت تابست" + + "انی شمال غرب مکزیک\x18وقت شرق مکزیک!وقت عادی شرق مکزیک)وقت تابستانی شرق" + + " مکزیک\x1eوقت اولان\u200cباتور'وقت عادی اولان\u200cباتور/وقت تابستانی او" + + "لان\u200cباتور\x0fوقت مسکو\x18وقت عادی مسکو وقت تابستانی مسکو\x15وقت می" + + "انمار\x13وقت نائورو\x0fوقت نپال\"وقت کالدونیای جدید+وقت عادی کالدونیای " + + "جدید3وقت تابستانی کالدونیای جدید\x16وقت زلاند نو\x1fوقت عادی زلاند نو'و" + + "قت تابستانی زلاند نو\x1bوقت نیوفاندلند$وقت عادی نیوفاندلند,وقت تابستانی" + + " نیوفاندلند\x11وقت نیوئه وقت جزایر نورفولک)وقت فرناندو دی نورونیا2وقت عا" + + "دی فرناندو دی نورونیا:وقت تابستانی فرناندو دی نورونیا-وقت جزایر ماریانا" + + "ی شمالی\x1bوقت نووسیبیرسک$وقت عادی نووسیبیرسک,وقت تابستانی نووسیبیرسک" + + "\x11وقت اومسک\x1aوقت عادی اومسک\"وقت تابستانی اومسک\x15وقت پاکستان\x1eوق" + + "ت عادی پاکستان&وقت تابستانی پاکستان\x13وقت پالائو!وقت پاپوا گینهٔ نو" + + "\x17وقت پاراگوئه وقت عادی پاراگوئه(وقت تابستانی پاراگوئه\x0dوقت پرو\x16و" + + "قت عادی پرو\x1eوقت تابستانی پرو\x15وقت فیلیپین\x1eوقت عادی فیلیپین&وقت " + + "تابستانی فیلیپین\x1eوقت جزایر فونیکس&وقت سنت\u200cپیر و میکلون/وقت عادی" + + " سنت\u200cپیر و میکلون7وقت تابستانی سنت\u200cپیر و میکلون\x17وقت پیتکایر" + + "ن\x13وقت پوناپه\x1cوقت پیونگ\u200cیانگ\x1eوقت قیزیل\u200cاوردا'وقت عادی" + + " قیزیل\u200cاوردا/وقت تابستانی قیزیل\u200cاوردا\x15وقت ریونیون\x11وقت رو" + + "ترا\x15وقت ساخالین\x1eوقت عادی ساخالین&وقت تابستانی ساخالین\x13وقت ساما" + + "را\x1cوقت عادی سامارا$وقت تابستانی سامارا\x11وقت ساموا\x1aوقت عادی سامو" + + "ا\"وقت تابستانی ساموا\x0fوقت سیشل\x15وقت سنگاپور\x1eوقت جزایر سلیمان وق" + + "ت جورجیای جنوبی\x15وقت سورینام\x0fوقت شووا\x13وقت تاهیتی\x11وقت تایپه" + + "\x1aوقت عادی تایپه\"وقت تابستانی تایپه\x19وقت تاجیکستان\x15وقت توکلائو" + + "\x11وقت تونگا\x1aوقت عادی تونگا\"وقت تابستانی تونگا\x11وقت چوئوک\x19وقت " + + "ترکمنستان\"وقت عادی ترکمنستان*وقت تابستانی ترکمنستان\x13وقت تووالو\x15و" + + "قت اروگوئه\x1eوقت عادی اروگوئه&وقت تابستانی اروگوئه\x17وقت ازبکستان وقت" + + " عادی ازبکستان(وقت تابستانی ازبکستان\x13وقت واناتو\x1cوقت عادی واناتو$وق" + + "ت تابستانی واناتو\x15وقت ونزوئلا\x1eوقت ولادی\u200cوستوک'وقت عادی ولادی" + + "\u200cوستوک/وقت تابستانی ولادی\u200cوستوک\x17وقت ولگاگراد وقت عادی ولگاگ" + + "راد(وقت تابستانی ولگاگراد\x11وقت وستوک\x1aوقت جزیرهٔ ویک!وقت والیس و فو" + + "تونا\x15وقت یاکوتسک\x1eوقت عادی یاکوتسک&وقت تابستانی یاکوتسک\x1dوقت یکا" + + "ترینبورگ&وقت عادی یکاترینبورگ.وقت تابستانی یکاترینبورگ\x02س\x02ن\x04lǝn" + + "\x03maa\x04mɛk\x05jǝǝ\x04júm\x03sam\x08مارس\x0cاَمروز\x0aفِردا\x03mbs" + + "\x03sas\x09mɔ́ndɔ\x15sɔ́ndɔ mafú mába\x16sɔ́ndɔ mafú málal\x15sɔ́ndɔ maf" + + "ú mána\x12mabágá má sukul\x07sásadi\x0cتیکیمت\x08ہیدر\x0aتہساس\x0cیکاتی" + + "ت\x0cمیگابت\x0cگیمبوٹ\x08سینے\x0aہیملے\x0cنیہاسے\x10پیگیومین\x08جمعه" + + "\x03م." + +var bucket34 string = "" + // Size: 13838 bytes + "\x0aجنوری\x0cفبروری\x08مارچ\x0aاپریل\x04می\x06جون\x0aجولای\x08اگست\x0cسپ" + + "تمبر\x0cاکتوبر\x0aنومبر\x0aدسمبر\x04ر۱\x04ر۲\x04ر۳\x04ر۴\x0dربع اول\x0d" + + "ربع دوم\x0dربع سوم\x11ربع چهارم\x14بعد از چاشت\x06شام\x06حمل\x06ثور\x08" + + "جوزا\x0aسرطان\x06اسد\x0cسنبلهٔ\x0aمیزان\x08عقرب\x06قوس\x06جدی\x06دلو" + + "\x06حوت\x03sii\x03col\x03mbo\x03see\x03duu\x03kor\x03mor\x03juk\x03slt" + + "\x03yar\x03jol\x03bow\x05siilo\x05colte\x05mbooy\x07seeɗto\x06duujal\x05" + + "korse\x05morso\x04juko\x06siilto\x08yarkomaa\x05jolal\x05bowte\x03dew" + + "\x04aaɓ\x03maw\x03nje\x03naa\x03mwd\x03hbi\x04dewo\x07aaɓnde\x08mawbaare" + + "\x09njeslaare\x09naasaande\x06mawnde\x0ahoore-biir\x08Termes 1\x08Termes" + + " 2\x08Termes 3\x08Termes 4\x06subaka\x08kikiiɗe\x09Hade Iisa\x0bCaggal I" + + "isa\x03H-I\x03C-I\x07Jamaanu\x08Hitaande\x05Lewru\x07Yontere\x07Ñalnde" + + "\x06Haŋki\x06Hannde\x07Jaŋngo\x0fÑalɗi yontere\x06Sahnga\x05Waktu\x06Hoƴ" + + "om\x08Majaango\x0dDiiwaan waktu\x11buddhalainen aika\x10cccc d. MMMM y G" + + "\x0acccc d.M.y\x0athoutkuuta\x0apaopikuuta\x0bhathorkuuta\x0akoiakkuuta" + + "\x09tobikuuta\x0bmeshirkuuta\x0dparemhatkuuta\x0eparemoudekuuta\x0cpasho" + + "nskuuta\x0apaonikuuta\x09epipkuuta\x0bmesorikuuta\x13pi-kogi-enavotkuuta" + + "\x05thout\x05paopi\x06hathor\x05koiak\x04toba\x06meshir\x08paremhat\x09p" + + "aremoude\x07pashons\x05paoni\x04epip\x06mesori\x0epi kogi enavot\x08thou" + + "tkuu\x08paopikuu\x09hathorkuu\x08koiakkuu\x07tobikuu\x09meshirkuu\x0bpar" + + "emhatkuu\x0cparemoudekuu\x0apashonskuu\x08paonikuu\x07epipkuu\x09mesorik" + + "uu\x11pi-kogi-enavotkuu\x10mäskärämkuuta\x0fṭəqəmtkuuta\x0dḫədarkuuta" + + "\x0ftaḫśaśkuuta\x0cṭərrkuuta\x0dyäkatitkuuta\x0dmägabitkuuta\x0cmiyazyak" + + "uuta\x0cgənbotkuuta\x0asänekuuta\x0cḥamlekuuta\x0cnähasekuuta\x0eṗagumen" + + "kuuta\x0emäskärämkuu\x0dṭəqəmtkuu\x0bḫədarkuu\x0dtaḫśaśkuu\x0aṭərrkuu" + + "\x0byäkatitkuu\x0bmägabitkuu\x0amiyazyakuu\x0agənbotkuu\x08sänekuu\x0aḥa" + + "mlekuu\x0anähasekuu\x0cṗagumenkuu\x0d{1} 'klo' {0}\x07tammik.\x07helmik." + + "\x08maalisk.\x07huhtik.\x07toukok.\x07kesäk.\x08heinäk.\x05elok.\x06syys" + + "k.\x06lokak.\x08marrask.\x07jouluk.\x0atammikuuta\x0ahelmikuuta\x0bmaali" + + "skuuta\x0ahuhtikuuta\x0atoukokuuta\x0akesäkuuta\x0bheinäkuuta\x08elokuut" + + "a\x09syyskuuta\x09lokakuuta\x0bmarraskuuta\x0ajoulukuuta\x05tammi\x05hel" + + "mi\x06maalis\x05huhti\x05touko\x05kesä\x06heinä\x03elo\x04syys\x04loka" + + "\x06marras\x05joulu\x08tammikuu\x08helmikuu\x09maaliskuu\x08huhtikuu\x08" + + "toukokuu\x08kesäkuu\x09heinäkuu\x06elokuu\x07syyskuu\x07lokakuu\x09marra" + + "skuu\x08joulukuu\x02su\x02ma\x02ti\x02ke\x02to\x02pe\x02la\x0bsunnuntain" + + "a\x0bmaanantaina\x09tiistaina\x0dkeskiviikkona\x09torstaina\x0bperjantai" + + "na\x0alauantaina\x09sunnuntai\x09maanantai\x07tiistai\x0bkeskiviikko\x07" + + "torstai\x09perjantai\x08lauantai\x081. nelj.\x082. nelj.\x083. nelj.\x08" + + "4. nelj.\x0d1. neljännes\x0d2. neljännes\x0d3. neljännes\x0d4. neljännes" + + "\x0ckeskiyöllä\x03ap.\x07keskip.\x03ip.\x07aamulla\x06aamup.\x06iltap." + + "\x07illalla\x07yöllä\x03ky.\x03kp.\x10keskipäivällä\x0faamupäivällä\x0fi" + + "ltapäivällä\x08keskiyö\x04aamu\x04ilta\x03yö\x0ckeskipäivä\x0baamupäivä" + + "\x0biltapäivä\x1bennen Kristuksen syntymää\x16ennen ajanlaskun alkua\x1d" + + "jälkeen Kristuksen syntymän\x18jälkeen ajanlaskun alun\x04eKr.\x04eaa." + + "\x04jKr.\x04jaa.\x03eaa\x03jaa\x0ecccc d. MMMM y\x07tišrí\x08hešván\x07k" + + "islév\x06tevét\x07ševát\x07adár I\x05adár\x08adár II\x06nisán\x06ijjár" + + "\x06siván\x07tammúz\x02ab\x05elúl\x0ctišríkuuta\x0dhešvánkuuta\x0ckislév" + + "kuuta\x0btevétkuuta\x0cševátkuuta\x0cadárkuuta I\x0aadárkuuta\x0dadárkuu" + + "ta II\x0bnisánkuuta\x0bijjárkuuta\x0bsivánkuuta\x0ctammúzkuuta\x07abkuut" + + "a\x0aelúlkuuta\x0atišríkuu\x0bhešvánkuu\x0akislévkuu\x09tevétkuu\x0aševá" + + "tkuu\x0aadárkuu I\x08adárkuu\x0badárkuu II\x09nisánkuu\x09ijjárkuu\x09si" + + "vánkuu\x0atammúzkuu\x05abkuu\x08elúlkuu\x0aAnno Mundi\x0cchaitrakuuta" + + "\x0dvaisakhakuuta\x0djyaisthakuuta\x0basadhakuuta\x0csravanakuuta\x0bbha" + + "drakuuta\x0basvinakuuta\x0ckartikakuuta\x0fagrahayanakuuta\x0apausakuuta" + + "\x0amaghakuuta\x0dphalgunakuuta\x0achaitrakuu\x0bvaisakhakuu\x0bjyaistha" + + "kuu\x09asadhakuu\x0asravanakuu\x09bhadrakuu\x09asvinakuu\x0akartikakuu" + + "\x0dagrahayanakuu\x08pausakuu\x08maghakuu\x0bphalgunakuu\x0fSaka-ajanlas" + + "kua\x11hidžran jälkeen\x0efarvardinkuuta\x10ordibeheštkuuta\x0ckhordadku" + + "uta\x08tirkuuta\x0bmordadkuuta\x0ešahrivarkuuta\x09mehrkuuta\x09abankuut" + + "a\x09azarkuuta\x08deykuuta\x0bbahmankuuta\x0besfandkuuta\x0cfarvardinkuu" + + "\x0eordibeheštkuu\x0akhordadkuu\x06tirkuu\x09mordadkuu\x0cšahrivarkuu" + + "\x07mehrkuu\x07abankuu\x07azarkuu\x06deykuu\x09bahmankuu\x09esfandkuu" + + "\x0cAnno Persico\x17ennen Kiinan tasavaltaa\x06Minguo\x10e. Kiinan tasav" + + ".\x09aikakausi\x05vuosi\x0cviime vuonna\x0dtänä vuonna\x0bensi vuonna" + + "\x14{0} vuoden päästä\x10{0} vuosi sitten\x11{0} vuotta sitten\x07viime " + + "v\x08tänä v\x06ensi v\x0f{0} v päästä\x0c{0} v sitten\x0fneljännesvuosi" + + "\x16viime neljännesvuonna\x17tänä neljännesvuonna\x15ensi neljännesvuonn" + + "a\x1e{0} neljännesvuoden päästä\x1a{0} neljännesvuosi sitten\x1b{0} nelj" + + "ännesvuotta sitten\x0aneljännes\x15viime neljänneksenä\x16tänä neljänne" + + "ksenä\x14ensi neljänneksenä\x1b{0} neljänneksen päästä\x15{0} neljännes " + + "sitten\x18{0} neljännestä sitten\x05nelj.\x0bviime nelj.\x0ctänä nelj." + + "\x0aensi nelj.\x13{0} nelj. päästä\x10{0} nelj. sitten\x08kuukausi\x0cvi" + + "ime kuussa\x0etässä kuussa\x0bensi kuussa\x17{0} kuukauden päästä\x13{0}" + + " kuukausi sitten\x14{0} kuukautta sitten\x02kk\x08viime kk\x0atässä kk" + + "\x07ensi kk\x10{0} kk päästä\x0d{0} kk sitten\x06viikko\x0eviime viikoll" + + "a\x10tällä viikolla\x0densi viikolla\x14{0} viikon päästä\x11{0} viikko " + + "sitten\x12{0} viikkoa sitten\x15päivän {0} viikolla\x02vk\x08viime vk" + + "\x0atällä vk\x07ensi vk\x10{0} vk päästä\x0d{0} vk sitten\x10kuukauden v" + + "iikko\x0ckuukauden vk\x07päivä\x11toissa päivänä\x05eilen\x09tänään\x08h" + + "uomenna\x0bylihuomenna\x16{0} päivän päästä\x12{0} päivä sitten\x14{0} p" + + "äivää sitten\x02pv\x08toissap.\x05huom.\x08ylihuom.\x10{0} pv päästä" + + "\x0d{0} pv sitten\x0dvuodenpäivä\x08vuodenpv\x0dviikonpäivä\x17kuukauden" + + " viikonpäivä\x14kuukauden vk päivä\x11viime sunnuntaina\x12tänä sunnunta" + + "ina\x10ensi sunnuntaina\x18{0} sunnuntain päästä\x14{0} sunnuntai sitten" + + "\x16{0} sunnuntaita sitten\x08viime su\x09tänä su\x07ensi su\x10{0} su p" + + "äästä\x0d{0} su sitten\x11viime maanantaina\x12tänä maanantaina\x10ensi" + + " maanantaina\x18{0} maanantain päästä\x14{0} maanantai sitten\x16{0} maa" + + "nantaita sitten\x08viime ma\x09tänä ma\x07ensi ma\x10{0} ma päästä\x0d{0" + + "} ma sitten\x0fviime tiistaina\x10tänä tiistaina\x0eensi tiistaina\x16{0" + + "} tiistain päästä\x12{0} tiistai sitten\x14{0} tiistaita sitten\x08viime" + + " ti\x09tänä ti\x07ensi ti\x10{0} ti päästä\x0d{0} ti sitten\x13viime kes" + + "kiviikkona\x14tänä keskiviikkona\x12ensi keskiviikkona\x19{0} keskiviiko" + + "n päästä\x16{0} keskiviikko sitten\x17{0} keskiviikkoa sitten\x08viime k" + + "e\x09tänä ke\x07ensi ke\x10{0} ke päästä\x0d{0} ke sitten\x0fviime torst" + + "aina\x10tänä torstaina\x0eensi torstaina\x16{0} torstain päästä\x12{0} t" + + "orstai sitten\x14{0} torstaita sitten\x08viime to\x09tänä to\x07ensi to" + + "\x10{0} to päästä\x0d{0} to sitten\x11viime perjantaina\x12tänä perjanta" + + "ina\x10ensi perjantaina\x18{0} perjantain päästä\x14{0} perjantai sitten" + + "\x16{0} perjantaita sitten\x08viime pe\x09tänä pe\x07ensi pe\x10{0} pe p" + + "äästä\x0d{0} pe sitten\x10viime lauantaina\x11tänä lauantaina\x0fensi l" + + "auantaina\x17{0} lauantain päästä\x13{0} lauantai sitten\x15{0} lauantai" + + "ta sitten\x08viime la\x09tänä la\x07ensi la\x10{0} la päästä\x0d{0} la s" + + "itten\x0fvuorokaudenaika\x05tunti\x15tämän tunnin aikana\x14{0} tunnin p" + + "äästä\x10{0} tunti sitten\x11{0} tuntia sitten\x10tunnin sisällä\x0f{0}" + + " t päästä\x0c{0} t sitten\x08minuutti\x17tämän minuutin aikana\x16{0} mi" + + "nuutin päästä\x13{0} minuutti sitten\x14{0} minuuttia sitten\x12minuutin" + + " sisällä\x11{0} min päästä\x0e{0} min sitten\x07sekunti\x03nyt\x16{0} se" + + "kunnin päästä\x12{0} sekunti sitten\x13{0} sekuntia sitten\x0f{0} s pääs" + + "tä\x0c{0} s sitten\x0caikavyöhyke\x0b+H.mm;-H.mm\x06UTC{0}\x03UTC\x11aik" + + "avyöhyke: {0}\x0f{0} (kesäaika)\x12{0} (normaaliaika)\x0dUTC-yleisaika" + + "\x14Britannian kesäaika\x12Irlannin kesäaika\x0aAcren aika\x12Acren norm" + + "aaliaika\x0fAcren kesäaika\x11Afganistanin aika\x12Keski-Afrikan aika" + + "\x11Itä-Afrikan aika\x13Etelä-Afrikan aika\x13Länsi-Afrikan aika\x1bLäns" + + "i-Afrikan normaaliaika\x18Länsi-Afrikan kesäaika\x0cAlaskan aika\x14Alas" + + "kan normaaliaika\x11Alaskan kesäaika\x0cAlmatyn aika\x14Almatyn normaali" + + "aika\x11Almatyn kesäaika\x0dAmazonin aika\x15Amazonin normaaliaika\x12Am" + + "azonin kesäaika\x1aYhdysvaltain keskinen aika\"Yhdysvaltain keskinen nor" + + "maaliaika\x1fYhdysvaltain keskinen kesäaika\x1aYhdysvaltain itäinen aika" + + "\"Yhdysvaltain itäinen normaaliaika\x1fYhdysvaltain itäinen kesäaika\x12" + + "Kalliovuorten aika\x1aKalliovuorten normaaliaika\x17Kalliovuorten kesäai" + + "ka\x1dYhdysvaltain Tyynenmeren aika%Yhdysvaltain Tyynenmeren normaaliaik" + + "a\"Yhdysvaltain Tyynenmeren kesäaika\x0dAnadyrin aika\x15Anadyrin normaa" + + "liaika\x12Anadyrin kesäaika\x0aApian aika\x12Apian normaaliaika\x0fApian" + + " kesäaika\x0eAqtaw’n aika\x16Aqtaw’n normaaliaika\x13Aqtaw’n kesäaika" + + "\x0dAqtöben aika\x15Aqtöben normaaliaika\x12Aqtöben kesäaika\x12Saudi-Ar" + + "abian aika\x1aSaudi-Arabian normaaliaika\x17Saudi-Arabian kesäaika\x10Ar" + + "gentiinan aika\x18Argentiinan normaaliaika\x15Argentiinan kesäaika\x17Lä" + + "nsi-Argentiinan aika\x1fLänsi-Argentiinan normaaliaika\x1cLänsi-Argentii" + + "nan kesäaika\x0dArmenian aika\x15Armenian normaaliaika\x12Armenian kesäa" + + "ika\x15Kanadan Atlantin aika\x1dKanadan Atlantin normaaliaika\x1aKanadan" + + " Atlantin kesäaika\x15Keski-Australian aika\x1dKeski-Australian normaali" + + "aika\x1aKeski-Australian kesäaika\x1fLäntisen Keski-Australian aika'Länt" + + "isen Keski-Australian normaaliaika$Läntisen Keski-Australian kesäaika" + + "\x14Itä-Australian aika\x1cItä-Australian normaaliaika\x19Itä-Australian" + + " kesäaika\x16Länsi-Australian aika\x1eLänsi-Australian normaaliaika\x1bL" + + "änsi-Australian kesäaika\x13Azerbaidžanin aika\x1bAzerbaidžanin normaal" + + "iaika\x18Azerbaidžanin kesäaika\x0cAzorien aika\x14Azorien normaaliaika" + + "\x11Azorien kesäaika\x11Bangladeshin aika\x19Bangladeshin normaaliaika" + + "\x16Bangladeshin kesäaika\x0dBhutanin aika\x0dBolivian aika\x0eBrasilian" + + " aika\x16Brasilian normaaliaika\x13Brasilian kesäaika\x0cBrunein aika" + + "\x0fKap Verden aika\x17Kap Verden normaaliaika\x14Kap Verden kesäaika" + + "\x0bCaseyn aika\x0fTšamorron aika\x0eChathamin aika\x16Chathamin normaal" + + "iaika\x13Chathamin kesäaika\x0bChilen aika\x13Chilen normaaliaika\x10Chi" + + "len kesäaika\x0bKiinan aika\x13Kiinan normaaliaika\x10Kiinan kesäaika" + + "\x10Tšoibalsan aika\x18Tšoibalsan normaaliaika\x15Tšoibalsan kesäaika" + + "\x10Joulusaaren aika\x12Kookossaarten aika\x0eKolumbian aika\x16Kolumbia" + + "n normaaliaika\x13Kolumbian kesäaika\x12Cookinsaarten aika\x1aCookinsaar" + + "ten normaaliaika\x17Cookinsaarten kesäaika\x0bKuuban aika\x13Kuuban norm" + + "aaliaika\x10Kuuban kesäaika\x0cDavisin aika\x18Dumont d’Urvillen aika" + + "\x11Itä-Timorin aika\x16Pääsiäissaaren aika\x1ePääsiäissaaren normaaliai" + + "ka\x1bPääsiäissaaren kesäaika\x0eEcuadorin aika\x13Keski-Euroopan aika" + + "\x1bKeski-Euroopan normaaliaika\x18Keski-Euroopan kesäaika\x12Itä-Euroop" + + "an aika\x1aItä-Euroopan normaaliaika\x17Itä-Euroopan kesäaika\x1aItäisem" + + "män Euroopan aika\x14Länsi-Euroopan aika\x1cLänsi-Euroopan normaaliaika" + + "\x19Länsi-Euroopan kesäaika\x16Falklandinsaarten aika\x1eFalklandinsaart" + + "en normaaliaika\x1bFalklandinsaarten kesäaika\x0cFidžin aika\x14Fidžin n" + + "ormaaliaika\x11Fidžin kesäaika\x15Ranskan Guayanan aika1Ranskan eteläist" + + "en ja antarktisten alueiden aika\x16Galápagossaarten aika\x13Gambiersaar" + + "ten aika\x0dGeorgian aika\x15Georgian normaaliaika\x12Georgian kesäaika" + + "\x13Gilbertsaarten aika\x18Greenwichin normaaliaika\x15Itä-Grönlannin ai" + + "ka\x1dItä-Grönlannin normaaliaika\x1aItä-Grönlannin kesäaika\x17Länsi-Gr" + + "önlannin aika\x1fLänsi-Grönlannin normaaliaika\x1cLänsi-Grönlannin kesä" + + "aika\x0bGuamin aika\x1fArabiemiirikuntien normaaliaika\x0cGuyanan aika" + + "\x17Havaijin-Aleuttien aika\x1fHavaijin-Aleuttien normaaliaika\x1cHavaij" + + "in-Aleuttien kesäaika\x0fHongkongin aika\x17Hongkongin normaaliaika\x14H" + + "ongkongin kesäaika\x0bHovdin aika\x13Hovdin normaaliaika\x10Hovdin kesäa" + + "ika\x0bIntian aika\x16Intian valtameren aika\x0fIndokiinan aika\x15Keski" + + "-Indonesian aika\x14Itä-Indonesian aika\x16Länsi-Indonesian aika\x0bIran" + + "in aika\x13Iranin normaaliaika\x10Iranin kesäaika\x0eIrkutskin aika\x16I" + + "rkutskin normaaliaika\x13Irkutskin kesäaika\x0dIsraelin aika\x15Israelin" + + " normaaliaika\x12Israelin kesäaika\x0cJapanin aika\x14Japanin normaaliai" + + "ka\x11Japanin kesäaika\x10Kamtšatkan aika\x18Kamtšatkan normaaliaika\x15" + + "Kamtšatkan kesäaika\x15Itä-Kazakstanin aika\x17Länsi-Kazakstanin aika" + + "\x0bKorean aika\x13Korean normaaliaika\x10Korean kesäaika\x0cKosraen aik" + + "a\x12Krasnojarskin aika\x1aKrasnojarskin normaaliaika\x17Krasnojarskin k" + + "esäaika\x0eKirgisian aika\x0fSri Lankan aika\x10Linesaarten aika\x0fLord" + + " Howen aika\x17Lord Howen normaaliaika\x14Lord Howen kesäaika\x0bMacaon " + + "aika\x13Macaon normaaliaika\x10Macaon kesäaika\x15Macquariensaaren aika" + + "\x0eMagadanin aika\x16Magadanin normaaliaika\x13Magadanin kesäaika\x0dMa" + + "lesian aika\x10Malediivien aika\x15Marquesassaarten aika\x16Marshallinsa" + + "arten aika\x11Mauritiuksen aika\x19Mauritiuksen normaaliaika\x16Mauritiu" + + "ksen kesäaika\x0dMawsonin aika\x15Luoteis-Meksikon aika\x1dLuoteis-Meksi" + + "kon normaaliaika\x1aLuoteis-Meksikon kesäaika\x19Meksikon Tyynenmeren ai" + + "ka!Meksikon Tyynenmeren normaaliaika\x1eMeksikon Tyynenmeren kesäaika" + + "\x11Ulan Batorin aika\x19Ulan Batorin normaaliaika\x16Ulan Batorin kesäa" + + "ika\x0dMoskovan aika\x15Moskovan normaaliaika\x12Moskovan kesäaika\x0eMy" + + "anmarin aika\x0bNaurun aika\x0cNepalin aika\x15Uuden-Kaledonian aika\x1d" + + "Uuden-Kaledonian normaaliaika\x1aUuden-Kaledonian kesäaika\x14Uuden-Seel" + + "annin aika\x1cUuden-Seelannin normaaliaika\x19Uuden-Seelannin kesäaika" + + "\x13Newfoundlandin aika\x1bNewfoundlandin normaaliaika\x18Newfoundlandin" + + " kesäaika\x0aNiuen aika\x14Norfolkinsaaren aika\x19Fernando de Noronhan " + + "aika!Fernando de Noronhan normaaliaika\x1eFernando de Noronhan kesäaika" + + "\x17Pohjois-Mariaanien aika\x12Novosibirskin aika\x1aNovosibirskin norma" + + "aliaika\x17Novosibirskin kesäaika\x0bOmskin aika\x13Omskin normaaliaika" + + "\x10Omskin kesäaika\x0fPakistanin aika\x17Pakistanin normaaliaika\x14Pak" + + "istanin kesäaika\x0bPalaun aika\x18Papua-Uuden-Guinean aika\x0eParaguayn" + + " aika\x16Paraguayn normaaliaika\x13Paraguayn kesäaika\x0aPerun aika\x12P" + + "erun normaaliaika\x0fPerun kesäaika\x11Filippiinien aika\x19Filippiinien" + + " normaaliaika\x16Filippiinien kesäaika\x13Phoenixsaarten aika Saint-Pier" + + "ren ja Miquelonin aika(Saint-Pierren ja Miquelonin normaaliaika%Saint-Pi" + + "erren ja Miquelonin kesäaika\x0fPitcairnin aika\x0dPohnpein aika\x10Pjon" + + "gjangin aika\x11Qızılordan aika\x19Qızılordan normaaliaika\x16Qızılordan" + + " kesäaika\x0fRéunionin aika\x0dRotheran aika\x0eSahalinin aika\x16Sahali" + + "nin normaaliaika\x13Sahalinin kesäaika\x0cSamaran aika\x14Samaran normaa" + + "liaika\x11Samaran kesäaika\x0bSamoan aika\x13Samoan normaaliaika\x10Samo" + + "an kesäaika\x10Seychellien aika\x0fSingaporen aika\x13Salomonsaarten aik" + + "a\x14Etelä-Georgian aika\x0eSurinamen aika\x0bSyowan aika\x0cTahitin aik" + + "a\x0cTaipein aika\x14Taipein normaaliaika\x11Taipein kesäaika\x13Tadžiki" + + "stanin aika\x0dTokelaun aika\x0bTongan aika\x13Tongan normaaliaika\x10To" + + "ngan kesäaika\x0cChuukin aika\x13Turkmenistanin aika\x1bTurkmenistanin n" + + "ormaaliaika\x18Turkmenistanin kesäaika\x0cTuvalun aika\x0dUruguayn aika" + + "\x15Uruguayn normaaliaika\x12Uruguayn kesäaika\x11Uzbekistanin aika\x19U" + + "zbekistanin normaaliaika\x16Uzbekistanin kesäaika\x0dVanuatun aika\x15Va" + + "nuatun normaaliaika\x12Vanuatun kesäaika\x0fVenezuelan aika\x12Vladivost" + + "okin aika\x1aVladivostokin normaaliaika\x17Vladivostokin kesäaika\x10Vol" + + "gogradin aika\x18Volgogradin normaaliaika\x15Volgogradin kesäaika\x0dVos" + + "tokin aika\x0aWaken aika\x18Wallisin ja Futunan aika\x0eJakutskin aika" + + "\x16Jakutskin normaaliaika\x13Jakutskin kesäaika\x14Jekaterinburgin aika" + + "\x1cJekaterinburgin normaaliaika\x19Jekaterinburgin kesäaika\x03má\x03tý" + + "\x02mi\x03hó\x02fr\x02le\x04pón\x03wut\x03srj\x04štw\x03pja\x03sob\x0aفر" + + "وری\x0aاپریل\x04مئ\x0cجولائی\x08اگست\x0aستمبر\x0aنومبر\x0aدسمبر\x08مارچ" + + "\x0aاپریل\x06مئی\x06جون\x08اگست\x0cاکتوبر\x0aنومبر\x0aدسمبر\x04می\x06جون" + + "\x0aجولای\x0cسپتمبر" + +var bucket35 string = "" + // Size: 11078 bytes + "\x0e{1} 'nang' {0}\x03Ene\x03Peb\x03Mar\x03Abr\x03May\x03Hun\x03Hul\x03A" + + "go\x03Set\x03Okt\x03Nob\x03Dis\x03Lin\x03Lun\x03Miy\x03Huw\x03Biy\x03Sab" + + "\x02Li\x02Lu\x02Ma\x02Mi\x02Hu\x02Bi\x02Sa\x06Linggo\x05Lunes\x06Martes" + + "\x0aMiyerkules\x07Huwebes\x08Biyernes\x06Sabado\x0dika-1 quarter\x0dika-" + + "2 quarter\x0dika-3 quarter\x10ika-4 na quarter\x0ahatinggabi\x10tanghali" + + "ng-tapat\x0anang umaga\x0dmadaling-araw\x08tanghali\x08ng hapon\x04gabi" + + "\x05umaga\x08sa hapon\x07sa gabi\x07ng gabi\x05hapon\x0eEEEE, MMMM d y" + + "\x08MMMM d y\x07MMM d y\x0fBago ang R.O.C.\x06Minguo\x07panahon\x04taon" + + "\x0enakaraang taon\x0cngayong taon\x0fsusunod na taon\x0bsa {0} taon\x10" + + "sa {0} (na) taon\x16{0} taon ang nakalipas\x1b{0} (na) taon ang nakalipa" + + "s\x11nakaraang quarter\x0fngayong quarter\x12susunod na quarter\x0esa {0" + + "} quarter\x13sa {0} (na) quarter\x19{0} quarter ang nakalipas\x1e{0} (na" + + ") quarter ang nakalipas\x05buwan\x0fnakaraang buwan\x0dngayong buwan\x10" + + "susunod na buwan\x0csa {0} buwan\x11sa {0} (na) buwan\x17{0} buwan ang n" + + "akalipas\x1c{0} (na) buwan ang nakalipas\x06linggo\x13nakalipas na lingg" + + "o\x0fsa linggong ito\x11susunod na linggo\x0dsa {0} linggo\x12sa {0} (na" + + ") linggo\x18{0} linggo ang nakalipas\x1d{0} (na) linggo ang nakalipas" + + "\x0dlinggo ng {0}\x10nakaraang linggo\x0engayong linggo\x0flinggo ng buw" + + "an\x04araw\x15Araw bago ang kahapon\x07kahapon\x0cngayong araw\x05bukas" + + "\x0aSamakalawa\x0bsa {0} araw\x10sa {0} (na) araw\x16{0} araw ang nakali" + + "pas\x1b{0} (na) araw ang nakalipas\x0caraw ng taon\x0earaw ng linggo\x18" + + "karaniwang araw ng buwan\x09sa Linggo\x11susunod na Linggo\x0dsa {0} Lin" + + "ggo\x12sa {0} (na) Linggo\x18{0} Linggo ang nakalipas\x1d{0} (na) Linggo" + + " ang nakalipas\x0enakaraang Lin.\x0cngayong Lin.\x0fsusunod na Lin.\x0fn" + + "akaraang Lunes\x0dngayong Lunes\x10susunod na Lunes\x0csa {0} Lunes\x11s" + + "a {0} (na) Lunes\x17{0} Lunes ang nakalipas\x1c{0} (na) Lunes ang nakali" + + "pas\x0enakaraang Lun.\x0cngayong Lun.\x0fsusunod na Lun.\x10nakaraang Ma" + + "rtes\x0engayong Martes\x11susunod na Martes\x0dsa {0} Martes\x12sa {0} (" + + "na) Martes\x18{0} Martes ang nakalipas\x1d{0} (na) Martes ang nakalipas" + + "\x0enakaraang Mar.\x0cngayong Mar.\x0fsusunod na Mar. sa {0} (na) Martes" + + " ang nakalipas\x14nakaraang Miyerkules\x12ngayong Miyerkules\x15susunod " + + "na Miyerkules\x11sa {0} Miyerkules\x16sa {0} (na) Miyerkules\x1c{0} Miye" + + "rkules ang nakalipas!{0} (na) Miyerkules ang nakalipas\x0enakaraang Miy." + + "\x0cngayong Miy.\x0fsusunod na Miy.\x11nakaraang Huwebes\x0fngayong Huwe" + + "bes\x12susunod na Huwebes\x0esa {0} Huwebes\x13sa {0} (na) Huwebes\x19{0" + + "} Huwebes ang nakalipas\x1e{0} (na) Huwebes ang nakalipas\x0enakaraang H" + + "uw.\x0cngayong Huw.\x0fsusunod na Huw.\x12nakaraang Biyernes\x10ngayong " + + "Biyernes\x13susunod na Biyernes\x0fsa {0} Biyernes\x14sa {0} (na) Biyern" + + "es\x1a{0} Biyernes ang nakalipas\x1f{0} (na) Biyernes ang nakalipas\x0en" + + "akaraang Biy.\x0cngayong Biy.\x0fsusunod na Biy.\x10nakaraang Sabado\x0e" + + "ngayong Sabado\x11susunod na Sabado\x0dsa {0} Sabado\x12sa {0} (na) Saba" + + "do\x18{0} Sabado ang nakalipas\x1d{0} (na) Sabado ang nakalipas\x0enakar" + + "aang Sab.\x0cngayong Sab.\x0fsusunod na Sab. sa {0} (na) Sabado ang naka" + + "lipas\x04oras\x0cngayong oras\x0bsa {0} oras\x10sa {0} (na) oras\x16{0} " + + "oras ang nakalipas\x1b{0} (na) oras ang nakalipas\x12{0} oras nakalipas" + + "\x17{0} (na) oras nakalipas\x0fsa minutong ito\x0dsa {0} minuto\x12sa {0" + + "} (na) minuto\x18{0} minuto ang nakalipas\x1d{0} (na) minuto ang nakalip" + + "as\x0bsa {0} min.\x10sa {0} (na) min.\x16{0} min. ang nakalipas\x1b{0} (" + + "na) min. ang nakalipas\x06ngayon\x0esa {0} segundo\x13sa {0} (na) segund" + + "o\x19{0} segundo ang nakalipas\x1e{0} (na) segundo ang nakalipas\x0bsa {" + + "0} seg.\x10sa {0} (na) seg.\x16{0} seg. ang nakalipas\x17{0} (na) seg. n" + + "akalipas\x12{0} seg. nakalipas\x0bOras sa {0}\x14Daylight Time ng {0}" + + "\x17Standard na Oras sa {0}\x1bOras sa Tag-init ng Britain\x1bStandard n" + + "a Oras sa Ireland\x13Oras sa Afghanistan\x16Oras sa Gitnang Africa\x18Or" + + "as sa Silangang Africa\x14Oras sa Timog Africa\x18Oras sa Kanlurang Afri" + + "ca$Standard na Oras sa Kanlurang Africa$Oras sa Tag-init ng Kanlurang Af" + + "rica\x0eOras sa Alaska\x1aStandard na Oras sa Alaska\x17Daylight Time sa" + + " Alaska\x0eOras sa Amazon\x1aStandard na Oras sa Amazon\x1aOras sa Tag-i" + + "nit ng Amazon\x0fSentral na Oras\x1aSentral na Karaniwang Oras\x18Sentra" + + "l na Daylight Time\x0cEastern Time\x1bEastern na Standard na Oras\x15Eas" + + "tern Daylight Time\x0eOras sa Bundok\x1aStandard na Oras sa Bundok\x17Da" + + "ylight Time sa Bundok\x10Oras sa Pasipiko\x1cStandard na Oras sa Pasipik" + + "o\x19Daylight Time sa Pasipiko\x0eOras sa Anadyr\x17Standard Time sa Ana" + + "dyr\x15Summer Time sa Anadyr\x0cOras sa Apia\x18Standard na Oras sa Apia" + + "\x15Daylight Time sa Apia\x0eOras sa Arabia\x1aStandard na Oras sa Arabi" + + "a\x17Daylight Time sa Arabia\x11Oras sa Argentina\x1dStandard na Oras sa" + + " Argentina\x1dOras sa Tag-init ng Argentina\x1bOras sa Kanlurang Argenti" + + "na'Standard na Oras sa Kanlurang Argentina'Oras sa Tag-init ng Kanlurang" + + " Argentina\x0fOras sa Armenia\x1bStandard na Oras sa Armenia\x1bOras sa " + + "Tag-init ng Armenia\x11Oras sa Atlantiko\x1dStandard na Oras sa Atlantik" + + "o\x1aDaylight Time sa Atlantiko\x19Oras sa Gitnang Australya%Standard na" + + " Oras sa Gitnang Australya\"Daylight Time sa Gitnang Australya%Oras ng G" + + "itnang Kanluran ng Australya.Standard Time ng Gitnang Kanluran ng Austra" + + "lya,Daylight Time sa Gitnang Kanlurang Australya\x1bOras sa Silangang Au" + + "stralya'Standard na Oras sa Silangang Australya$Daylight Time sa Silanga" + + "ng Australya\x1bOras sa Kanlurang Australya'Standard na Oras sa Kanluran" + + "g Australya$Daylight Time sa Kanlurang Australya\x12Oras sa Azerbaijan" + + "\x1eStandard na Oras sa Azerbaijan\x1eOras sa Tag-init ng Azerbaijan\x0e" + + "Oras sa Azores\x1aStandard na Oras sa Azores\x1aOras sa Tag-init ng Azor" + + "es\x12Oras sa Bangladesh\x1eStandard na Oras sa Bangladesh\x1eOras sa Ta" + + "g-init ng Bangladesh\x0eOras sa Bhutan\x0fOras sa Bolivia\x10Oras sa Bra" + + "silia\x1cStandard na Oras sa Brasilia\x1cOras sa Tag-init ng Brasilia" + + "\x19Oras sa Brunei Darussalam\x12Oras sa Cape Verde\x1eStandard na Oras " + + "sa Cape Verde\x1eOras sa Tag-init ng Cape Verde\x1cStandard na Oras sa C" + + "hamorro\x0fOras sa Chatham\x1bStandard na Oras sa Chatham\x18Daylight Ti" + + "me sa Chatham\x0dOras sa Chile\x19Standard na Oras sa Chile\x19Oras sa T" + + "ag-init ng Chile\x0dOras sa China\x19Standard na Oras sa China\x16Daylig" + + "ht Time sa China\x12Oras sa Choibalsan\x1eStandard na Oras sa Choibalsan" + + "\x1eOras sa Tag-init ng Choibalsan\x18Oras sa Christmas Island\x15Oras s" + + "a Cocos Islands\x10Oras sa Colombia\x1cStandard na Oras sa Colombia\x1cO" + + "ras sa Tag-init ng Colombia\x14Oras sa Cook Islands Standard na Oras sa " + + "Cook Islands,Oras sa Kalahati ng Tag-init ng Cook Islands\x0cOras sa Cub" + + "a\x18Standard na Oras sa Cuba\x15Daylight Time sa Cuba\x0dOras sa Davis" + + "\x1aOras sa Dumont-d’Urville\x12Oras sa East Timor\x15Oras sa Easter Isl" + + "and!Standard na Oras sa Easter Island!Oras sa Tag-init ng Easter Island" + + "\x0fOras sa Ecuador\x16Oras sa Gitnang Europe\"Standard na Oras sa Gitna" + + "ng Europe\"Oras sa Tag-init ng Gitnang Europe\x18Oras sa Silangang Europ" + + "e$Standard na Oras sa Silangang Europe$Oras sa Tag-init ng Silangang Eur" + + "ope\x1fOras sa Pinaka-silangang Europe\x18Oras sa Kanlurang Europe$Stand" + + "ard na Oras sa Kanlurang Europe$Oras sa Tag-init ng Kanlurang Europe\x18" + + "Oras sa Falkland Islands$Standard na Oras sa Falkland Islands$Oras sa Ta" + + "g-init ng Falkland Islands\x0cOras sa Fiji\x18Standard na Oras sa Fiji" + + "\x18Oras sa Tag-init ng Fiji\x15Oras sa French Guiana&Oras sa Katimugang" + + " France at Antartiko\x11Oras sa Galapagos\x0fOras sa Gambier\x0fOras sa " + + "Georgia\x1bStandard na Oras sa Georgia\x1bOras sa Tag-init ng Georgia" + + "\x17Oras sa Gilbert Islands\x13Greenwich Mean Time\x1bOras sa Silangang " + + "Greenland'Standard na Oras sa Silangang Greenland'Oras sa Tag-init ng Si" + + "langang Greenland\x1bOras sa Kanlurang Greenland'Standard na Oras sa Kan" + + "lurang Greenland'Oras sa Tag-init ng Kanlurang Greenland\x0cOras sa Gulf" + + "\x0eOras sa Guyana\x17Oras sa Hawaii-Aleutian#Standard na Oras sa Hawaii" + + "-Aleutian#Oras sa Tag-init ng Hawaii-Aleutian\x11Oras sa Hong Kong\x1dSt" + + "andard na Oras sa Hong Kong\x1dOras sa Tag-init ng Hong Kong\x0cOras sa " + + "Hovd\x18Standard na Oras sa Hovd\x18Oras sa Tag-init ng Hovd\x1aStandard" + + " na Oras sa Bhutan\x14Oras sa Indian Ocean\x11Oras sa Indochina\x19Oras " + + "sa Gitnang Indonesia\x1bOras sa Silangang Indonesia\x1bOras sa Kanlurang" + + " Indonesia\x0cOras sa Iran\x18Standard na Oras sa Iran\x15Daylight Time " + + "sa Iran\x0fOras sa Irkutsk\x1bStandard na Oras sa Irkutsk\x1bOras sa Tag" + + "-init ng Irkutsk\x0eOras sa Israel\x1aStandard na Oras sa Israel\x17Dayl" + + "ight Time sa Israel\x0dOras sa Japan\x19Standard na Oras sa Japan\x16Day" + + "light Time sa Japan Oras sa Petropavlovsk-Kamchatski)Standard Time sa Pe" + + "tropavlovsk-Kamchatski'Summer Time sa Petropavlovsk-Kamchatski\x1cOras s" + + "a Silangang Kazakhstan\x1cOras sa Kanlurang Kazakhstan\x0dOras sa Korea" + + "\x19Standard na Oras sa Korea\x16Daylight Time sa Korea\x0eOras sa Kosra" + + "e\x13Oras sa Krasnoyarsk\x1fStandard na Oras sa Krasnoyarsk\x1fOras sa T" + + "ag-init ng Krasnoyarsk\x11Oras sa Kyrgystan\x14Oras sa Line Islands\x11O" + + "ras sa Lord Howe\x1dStandard na Oras sa Lord Howe\x1bDaylight Time sa Lo" + + "rde Howe\x18Oras sa Macquarie Island\x0fOras sa Magadan\x1bStandard na O" + + "ras sa Magadan\x1bOras sa Tag-init ng Magadan\x10Oras sa Malaysia\x10Ora" + + "s sa Maldives\x11Oras sa Marquesas\x18Oras sa Marshall Islands\x11Oras s" + + "a Mauritius\x1dStandard na Oras sa Mauritius\x1dOras sa Tag-init ng Maur" + + "itius\x0eOras sa Mawson!Oras sa Hilagang-kanlurang Mexico-Standard na Or" + + "as sa Hilagang-kanlurang Mexico*Daylight Time sa Hilagang-kanlurang Mexi" + + "co\x1aOras sa Pasipiko ng Mexico&Standard na Oras sa Pasipiko ng Mexico#" + + "Daylight Time sa Pasipiko ng Mexico\x12Oras sa Ulan Bator\x1eStandard na" + + " Oras sa Ulan Bator\x1eOras sa Tag-init ng Ulan Bator\x0eOras sa Moscow" + + "\x1aStandard na Oras sa Moscow\x1aOras sa Tag-init ng Moscow\x0fOras sa " + + "Myanmar\x0dOras sa Nauru\x0dOras sa Nepal\x15Oras sa New Caledonia!Stand" + + "ard na Oras sa New Caledonia!Oras sa Tag-init ng New Caledonia\x13Oras s" + + "a New Zealand\x1fStandard na Oras sa New Zealand\x1cDaylight Time sa New" + + " Zealand\x14Oras sa Newfoundland Standard na Oras sa Newfoundland\x1dDay" + + "light Time sa Newfoundland\x0cOras sa Niue\x16Oras sa Norfolk Island\x1b" + + "Oras sa Fernando de Noronha'Standard na Oras sa Fernando de Noronha'Oras" + + " sa Tag-init ng Fernando de Noronha\x13Oras sa Novosibirsk\x1fStandard n" + + "a Oras sa Novosibirsk\x1fOras sa Tag-init ng Novosibirsk\x0cOras sa Omsk" + + "\x18Standard na Oras sa Omsk\x18Oras sa Tag-init ng Omsk\x10Oras sa Paki" + + "stan\x1cStandard na Oras sa Pakistan\x1cOras sa Tag-init ng Pakistan\x0d" + + "Oras sa Palau\x18Oras sa Papua New Guinea\x10Oras sa Paraguay\x1cStandar" + + "d na Oras sa Paraguay\x1cOras sa Tag-init ng Paraguay\x0cOras sa Peru" + + "\x18Standard na Oras sa Peru\x18Oras sa Tag-init ng Peru\x11Oras sa Pili" + + "pinas\x1dStandard na Oras sa Pilipinas\x1dOras sa Tag-init ng Pilipinas" + + "\x17Oras sa Phoenix Islands\x1fOras sa Saint Pierre & Miquelon+Standard " + + "na Oras sa Saint Pierre & Miquelon(Daylight Time sa Saint Pierre & Mique" + + "lon\x10Oras sa Pitcairn\x0eOras sa Ponape\x11Oras sa Pyongyang\x0fOras s" + + "a Reunion\x0fOras sa Rothera\x10Oras sa Sakhalin\x1cStandard na Oras sa " + + "Sakhalin\x1cOras sa Tag-init ng Sakhalin\x0eOras sa Samara\x17Standard T" + + "ime sa Samara\x0fSamara Daylight\x0dOras sa Samoa\x19Standard na Oras sa" + + " Samoa\x16Daylight Time sa Samoa\x12Oras sa Seychelles\x1dStandard na Or" + + "as sa Singapore\x17Oras sa Solomon Islands\x15Oras sa Timog Georgia\x10O" + + "ras sa Suriname\x0dOras sa Syowa\x0eOras sa Tahiti\x0eOras sa Taipei\x1a" + + "Standard na Oras sa Taipei\x17Daylight Time sa Taipei\x12Oras sa Tajikis" + + "tan\x0fOras sa Tokelau\x0dOras sa Tonga\x19Standard na Oras sa Tonga\x19" + + "Oras sa Tag-init ng Tonga\x0dOras sa Chuuk\x14Oras sa Turkmenistan Stand" + + "ard na Oras sa Turkmenistan Oras sa Tag-init ng Turkmenistan\x0eOras sa " + + "Tuvalu\x0fOras sa Uruguay\x1bStandard na Oras sa Uruguay\x1bOras sa Tag-" + + "init ng Uruguay\x12Oras sa Uzbekistan\x1eStandard na Oras sa Uzbekistan" + + "\x1eOras sa Tag-init ng Uzbekistan\x0fOras sa Vanuatu\x1bStandard na Ora" + + "s sa Vanuatu\x1bOras sa Tag-init ng Vanuatu\x11Oras sa Venezuela\x13Oras" + + " sa Vladivostok\x1fStandard na Oras sa Vladivostok\x1fOras sa Tag-init n" + + "g Vladivostok\x11Oras sa Volgograd\x1dStandard na Oras sa Volgograd\x1dO" + + "ras sa Tag-init ng Volgograd\x0eOras sa Vostok\x13Oras sa Wake Island" + + "\x17Oras sa Wallis & Futuna\x0fOras sa Yakutsk\x1bStandard na Oras sa Ya" + + "kutsk\x1bOras sa Tag-init ng Yakutsk\x15Oras sa Yekaterinburg!Standard n" + + "a Oras sa Yekaterinburg!Oras sa Tag-init ng Yekaterinburg\x04Hõo\x04Suba" + + "\x03Feb\x03Mar\x03Abr\x03May\x03Jun\x03Jul\x03Ago\x03Set\x03Oct\x03Nov" + + "\x03Dic" + +var bucket36 string = "" + // Size: 10093 bytes + "\x12EEEE, dd. MMMM y G\x04sun.\x05mán.\x05týs.\x04mik.\x05hós.\x05frí." + + "\x04ley.\x03su.\x04má.\x04tý.\x03mi.\x04hó.\x03fr.\x03le.\x0asunnudagur" + + "\x0amánadagur\x09týsdagur\x09mikudagur\x09hósdagur\x0dfríggjadagur\x0ble" + + "ygardagur\x03sun\x04mán\x04týs\x03mik\x04hós\x04frí\x03ley\x0a1. ársfj." + + "\x0a2. ársfj.\x0a3. ársfj.\x0a4. ársfj.\x131. ársfjórðingur\x132. ársfjó" + + "rðingur\x133. ársfjórðingur\x134. ársfjórðingur\x0afyri Krist\x1afyri ok" + + "kara tíðarrokning\x0beftir Krist\x15okkara tíðarrokning\x0bf.o.tíðr.\x09" + + "o.tíðr.\x03flt\x02lt\x0etíðarrokning\x03ár\x08í fjør\x06í ár\x0anæsta ár" + + "\x0aum {0} ár\x0f{0} ár síðan\x10ársfjórðingur\x17seinasta ársfjórðing" + + "\x17hendan ársfjórðingin\x15næsta ársfjórðing\x15um {0} ársfjórðing\x17u" + + "m {0} ársfjórðingar\x1a{0} ársfjórðing síðan\x1c{0} ársfjórðingar síðan" + + "\x07ársfj.\x0eum {0} ársfj.\x13{0} ársfj. síðan\x09mánaður\x10seinasta m" + + "ánað\x0fhenda mánaðin\x0enæsta mánað\x0eum {0} mánað\x10um {0} mánaðir" + + "\x13{0} mánað síðan\x15{0} mánaðir síðan\x05mnð.\x0cum {0} mnð.\x11{0} m" + + "nð. síðan\x04vika\x0dseinastu viku\x09hesu viku\x0bnæstu viku\x0bum {0} " + + "viku\x0cum {0} vikur\x10{0} vika síðan\x11{0} vikur síðan\x0fvika nummar" + + " {0}\x03vi.\x0aum {0} vi.\x0f{0} vi. síðan\x09um {0} v.\x0e{0} v. síðan" + + "\x13vika í mánaðinum\x0cvi. í mnð.\x05dagur\x0afyrradagin\x08í gjár\x06í" + + " dag\x09í morgin\x0dí ovurmorgin\x0aum {0} dag\x0cum {0} dagar\x11{0} da" + + "gur síðan\x11{0} dagar síðan\x03da.\x0aum {0} da.\x0f{0} da. síðan\x09um" + + " {0} d.\x0e{0} d. síðan\x10dagur í árinum\x0ddagur í ár.\x09vikudagur" + + "\x18vikudagur í mánaðinum\x12vikudagur í mnð.\x11seinasta sunnudag\x0fnæ" + + "sta sunnudag\x19sunnudagin í næstu viku\x0fum {0} sunnudag\x11um {0} sun" + + "nudagar\x15{0} sunnudag síðani\x17{0} sunnudagar síðani\x0dseinasta sun." + + "\x0bnæsta sun.\x13sun. í næstu viku\x0bum {0} sun.\x11{0} sun. síðani" + + "\x0cseinasta su.\x0anæsta su.\x12su. í næstu viku\x0aum {0} su.\x10{0} s" + + "u. síðani\x11seinasta mánadag\x0fnæsta mánadag\x19mánadagin í næstu viku" + + "\x0fum {0} mánadag\x11um {0} mánadagar\x15{0} mánadag síðani\x17{0} mána" + + "dagar síðani\x0eseinasta mán.\x0cnæsta mán.\x14mán. í næstu viku\x0cum {" + + "0} mán.\x12{0} mán. síðani\x0dseinasta má.\x0bnæsta má.\x13má. í næstu v" + + "iku\x0bum {0} má.\x11{0} má. síðani\x10seinasta týsdag\x0enæsta týsdag" + + "\x18týsdagin í næstu viku\x0eum {0} týsdag\x10um {0} týsdagar\x14{0} týs" + + "dag síðani\x16{0} týsdagar síðani\x0eseinasta týs.\x0cnæsta týs.\x14týs." + + " í næstu viku\x0cum {0} týs.\x12{0} týs. síðani\x0dseinasta tý.\x0bnæsta" + + " tý.\x13tý. í næstu viku\x0bum {0} tý.\x11{0} tý. síðani\x10seinasta mik" + + "udag\x0enæsta mikudag\x18mikudagin í næstu viku\x0eum {0} mikudag\x10um " + + "{0} mikudagar\x14{0} mikudag síðani\x16{0} mikudagar síðani\x0dseinasta " + + "mik.\x0bnæsta mik.\x13mik. í næstu viku\x0bum {0} mik.\x11{0} mik. síðan" + + "i\x0cseinasta mi.\x0anæsta mi.\x12mi. í næstu viku\x0aum {0} mi.\x10{0} " + + "mi. síðani\x10seinasta hósdag\x0enæsta hósdag\x18hósdagin í næstu viku" + + "\x0eum {0} hósdag\x10um {0} hósdagar\x14{0} hósdag síðani\x16{0} hósdaga" + + "r síðani\x0eseinasta hós.\x0cnæsta hós.\x14hós. í næstu viku\x0cum {0} h" + + "ós.\x12{0} hós. síðani\x0dseinasta hó.\x0bnæsta hó.\x13hó. í næstu viku" + + "\x0bum {0} hó.\x11{0} hó. síðani\x14seinasta fríggjadag\x12næsta fríggja" + + "dag\x1cfríggjadagin í næstu viku\x12um {0} fríggjadag\x14um {0} fríggjad" + + "agar\x18{0} fríggjadag síðani\x1a{0} fríggjadagar síðani\x0eseinasta frí" + + ".\x0cnæsta frí.\x14frí. í næstu viku\x0cum {0} frí.\x12{0} frí. síðani" + + "\x0cseinasta fr.\x0anæsta fr.\x12fr. í næstu viku\x0aum {0} fr.\x10{0} f" + + "r. síðani\x12seinasta leygardag\x10næsta leygardag\x1aleygardagin í næst" + + "u viku\x10um {0} leygardag\x12um {0} leygardagar\x16{0} leygardag síðani" + + "\x18{0} leygardagar síðani\x0dseinasta ley.\x0bnæsta ley.\x13ley. í næst" + + "u viku\x0bum {0} ley.\x11{0} ley. síðani\x0cseinasta le.\x0anæsta le." + + "\x12le. í næstu viku\x0aum {0} le.\x10{0} le. síðani\x05tími\x0dhendan t" + + "íman\x0cum {0} tíma\x0dum {0} tímar\x11{0} tími síðan\x12{0} tímar síða" + + "n\x09um {0} t.\x0e{0} t. síðan\x08minuttur\x0fhendan minuttin\x0dum {0} " + + "minutt\x0fum {0} minuttir\x12{0} minutt síðan\x14{0} minuttir síðan\x0bu" + + "m {0} min.\x10{0} min. síðan\x09um {0} m.\x0e{0} m. síðan\x03nú\x0dum {0" + + "} sekund\x12{0} sekund síðan\x0bum {0} sek.\x10{0} sek. síðan\x09um {0} " + + "s.\x0e{0} s. síðan\x0btíðarøki\x09{0} tíð\x0f{0} summartíð\x10{0} vanlig" + + " tíð\x15Samskipað heimstíð\x1bStóra Bretland summartíð\x12Írsk vanlig tí" + + "ð\x10Afganistan tíð\x10Miðafrika tíð\x12Eysturafrika tíð\x19Suðurafrika" + + " vanlig tíð\x12Vesturafrika tíð\x19Vesturafrika vanlig tíð\x18Vesturafri" + + "ka summartíð\x0cAlaska tíð\x13Alaska vanlig tíð\x12Alaska summartíð\x0dA" + + "masona tíð\x14Amasona vanlig tíð\x13Amasona summartíð\x0dCentral tíð\x14" + + "Central vanlig tíð\x13Central summartíð\x0dEastern tíð\x14Eastern vanlig" + + " tíð\x13Eastern summartíð\x0eMountain tíð\x15Mountain vanlig tíð\x14Moun" + + "tain summartíð\x0dPacific tíð\x14Pacific vanlig tíð\x13Pacific summartíð" + + "\x0aApia tíð\x11Apia vanlig tíð\x10Apia summartíð\x0dArabisk tíð\x14Arab" + + "isk vanlig tíð\x13Arabisk summartíð\x0fArgentina tíð\x16Argentina vanlig" + + " tíð\x15Argentina summartíð\x16Vestur Argentina tíð\x1dVestur Argentina " + + "vanlig tíð\x1cVestur Argentina summartíð\x0dArmenia tíð\x14Armenia vanli" + + "g tíð\x13Armenia summartíð\x0eAtlantic tíð\x15Atlantic vanlig tíð\x14Atl" + + "antic summartíð\x14mið Avstralia tíð\x1bmið Avstralia vanlig tíð\x1amið " + + "Avstralia summartíð\x1amiðvestur Avstralia tíð!miðvestur Avstralia vanli" + + "g tíð miðvestur Avstralia summartíð\x16eystur Avstralia tíð\x1deystur Av" + + "stralia vanlig tíð\x1ceystur Avstralia summartíð\x16vestur Avstralia tíð" + + "\x1dvestur Avstralia vanlig tíð\x1cvestur Avstralia summartíð\x10Aserbad" + + "jan tíð\x17Aserbadjan vanlig tíð\x16Aserbadjan summartíð\x0fAzorurnar tí" + + "ð\x16Azorurnar vanlig tíð\x15Azorurnar summartíð\x10Bangladesj tíð\x17B" + + "angladesj vanlig tíð\x16Bangladesj summartíð\x0bButan tíð\x0dBolivia tíð" + + "\x0eBrasilia tíð\x15Brasilia vanlig tíð\x14Brasilia summartíð\x17Brunei " + + "Darussalam tíð\x18Grønhøvdaoyggjar tíð\x1fGrønhøvdaoyggjar vanlig tíð" + + "\x1eGrønhøvdaoyggjar summartíð\x15Chamorro vanlig tíð\x0dChatham tíð\x14" + + "Chatham vanlig tíð\x13Chatham summartíð\x0aKili tíð\x11Kili vanlig tíð" + + "\x10Kili summartíð\x0aKina tíð\x11Kina vanlig tíð\x10Kina summartíð\x10C" + + "hoibalsan tíð\x17Choibalsan vanlig tíð\x16Choibalsan summartíð\x10Jólaoy" + + "ggj tíð\x12Kokosoyggjar tíð\x0eKolombia tíð\x15Kolombia vanlig tíð\x14Ko" + + "lombia summartíð\x12Cooksoyggjar tíð\x19Cooksoyggjar vanlig tíð\x18Cooks" + + "oyggjar summartíð\x0aCuba tíð\x11Cuba vanlig tíð\x10Cuba summartíð\x0bDa" + + "vis tíð\x18Dumont-d’Urville tíð\x11Eysturtimor tíð\x12Páskaoyggin tíð" + + "\x19Páskaoyggin vanlig tíð\x18Páskaoyggin summartíð\x0dEkvador tíð\x10Mi" + + "ðevropa tíð\x17Miðevropa vanlig tíð\x16Miðevropa summartíð\x12Eysturevr" + + "opa tíð\x19Eysturevropa vanlig tíð\x18Eysturevropa summartíð\x19longri E" + + "ysturevropa tíð\x12Vesturevropa tíð\x19Vesturevropa vanlig tíð\x18Vestur" + + "evropa summartíð\x16Falklandsoyggjar tíð\x1dFalklandsoyggjar vanlig tíð" + + "\x1cFalklandsoyggjar summartíð\x0aFiji tíð\x11Fiji vanlig tíð\x10Fiji su" + + "mmartíð\x14Franska Gujana tíð,Fronsku sunnaru landaøki og Antarktis tíð" + + "\x0fGalapagos tíð\x0dGambier tíð\x0dGeorgia tíð\x14Georgia vanlig tíð" + + "\x13Georgia summartíð\x14Gilbertoyggjar tíð\x14Greenwich Mean tíð\x18Eys" + + "tur grønlendsk tíð\x1fEystur grønlendsk vanlig tíð\x1eEystur grønlendsk " + + "summartíð\x18Vestur grønlendsk tíð\x1fVestur grønlendsk vanlig tíð\x1eVe" + + "stur grønlendsk summartíð\x11Gulf vanlig tíð\x0cGujana tíð\x15Hawaii-Ale" + + "utian tíð\x1cHawaii-Aleutian vanlig tíð\x1bHawaii-Aleutian summartíð\x0f" + + "Hong Kong tíð\x16Hong Kong vanlig tíð\x15Hong Kong summartíð\x0aHovd tíð" + + "\x11Hovd vanlig tíð\x10Hovd summartíð\x0bIndia tíð\x0eIndiahav tíð\x0eIn" + + "dokina tíð\x14Mið Indonesia tíð\x16Eystur Indonesia tíð\x16Vestur Indone" + + "sia tíð\x0aIran tíð\x11Iran vanlig tíð\x10Iran summartíð\x0dIrkutsk tíð" + + "\x14Irkutsk vanlig tíð\x13Irkutsk summartíð\x0dÍsrael tíð\x14Ísrael vanl" + + "ig tíð\x13Ísrael summartíð\x0bJapan tíð\x12Japan vanlig tíð\x11Japan sum" + + "martíð\x16Eystur Kasakstan tíð\x16Vestur Kasakstan tíð\x0bKorea tíð\x12K" + + "orea vanlig tíð\x11Korea summartíð\x0cKosrae tíð\x11Krasnoyarsk tíð\x18K" + + "rasnoyarsk vanlig tíð\x17Krasnoyarsk summartíð\x0eKirgisia tíð\x11Lineoy" + + "ggjar tíð\x0fLord Howe tíð\x16Lord Howe vanlig tíð\x15Lord Howe summartí" + + "ð\x15Macquariesoyggj tíð\x0dMagadan tíð\x14Magadan vanlig tíð\x13Magada" + + "n summartíð\x0eMalaisia tíð\x13Maldivoyggjar tíð\x0fMarquesas tíð\x15Mar" + + "shalloyggjar tíð\x0fMóritius tíð\x16Móritius vanlig tíð\x15Móritius summ" + + "artíð\x0cMawson tíð\x16Northwest Mexico tíð\x1dNorthwest Mexico vanlig t" + + "íð\x1cNorthwest Mexico summartíð\x15Mexican Pacific tíð\x1cMexican Paci" + + "fic vanlig tíð\x1bMexican Pacific summartíð\x10Ulan Bator tíð\x17Ulan Ba" + + "tor vanlig tíð\x16Ulan Bator summartíð\x0cMoskva tíð\x13Moskva vanlig tí" + + "ð\x12Moskva summartíð\x15Myanmar (Burma) tíð\x0bNauru tíð\x0bNepal tíð" + + "\x13Nýkaledónia tíð\x1aNýkaledónia vanlig tíð\x19Nýkaledónia summartíð" + + "\x10Nýsæland tíð\x17Nýsæland vanlig tíð\x16Nýsæland summartíð\x12Newfoun" + + "dland tíð\x19Newfoundland vanlig tíð\x18Newfoundland summartíð\x0aNiue t" + + "íð\x13Norfolksoyggj tíð\x19Fernando de Noronha tíð Fernando de Noronha " + + "vanlig tíð\x1fFernando de Noronha summartíð\x11Novosibirsk tíð\x18Novosi" + + "birsk vanlig tíð\x17Novosibirsk summartíð\x0aOmsk tíð\x11Omsk vanlig tíð" + + "\x10Omsk summartíð\x0ePakistan tíð\x15Pakistan vanlig tíð\x14Pakistan su" + + "mmartíð\x0bPalau tíð\x15Papua Nýguinea tíð\x0eParaguai tíð\x15Paraguai v" + + "anlig tíð\x14Paraguai summartíð\x0aPeru tíð\x11Peru vanlig tíð\x10Peru s" + + "ummartíð\x13Filipsoyggjar tíð\x1aFilipsoyggjar vanlig tíð\x19Filipsoyggj" + + "ar summartíð\x14Phoenixoyggjar tíð\x1bSt. Pierre & Miquelon tíð\"St. Pie" + + "rre & Miquelon vanlig tíð!St. Pierre & Miquelon summartíð\x15Pitcairnoyg" + + "gjar tíð\x0cPonape tíð\x0fPyongyang tíð\x0eRéunion tíð\x0dRothera tíð" + + "\x0eSakhalin tíð\x15Sakhalin vanlig tíð\x14Sakhalin summartíð\x0bSamoa t" + + "íð\x12Samoa vanlig tíð\x11Samoa summartíð\x15Seyskelloyggjar tíð\x0eSin" + + "gapor tíð\x14Salomonoyggjar tíð\x1aSuðurgeorgiaoyggjar tíð\x0dSurinam tí" + + "ð\x0bSyowa tíð\x0cTahiti tíð\x0cTaipei tíð\x13Taipei vanlig tíð\x12Taip" + + "ei summartíð\x12Tadsjikistan tíð\x0dTokelau tíð\x0bTonga tíð\x12Tonga va" + + "nlig tíð\x11Tonga summartíð\x0bChuuk tíð\x12Turkmenistan tíð\x19Turkmeni" + + "stan vanlig tíð\x18Turkmenistan summartíð\x0cTuvalu tíð\x0dUruguai tíð" + + "\x14Uruguai vanlig tíð\x13Uruguai summartíð\x10Usbekistan tíð\x17Usbekis" + + "tan vanlig tíð\x16Usbekistan summartíð\x0dVanuatu tíð\x14Vanuatu vanlig " + + "tíð\x13Vanuatu summartíð\x0fVenesuela tíð\x11Vladivostok tíð\x18Vladivos" + + "tok vanlig tíð\x17Vladivostok summartíð\x0fVolgograd tíð\x16Volgograd va" + + "nlig tíð\x15Volgograd summartíð\x0cVostok tíð\x0fWakeoyggj tíð\x1eWallis" + + "- og Futunaoyggjar tíð\x0dYakutsk tíð\x14Yakutsk vanlig tíð\x13Yakutsk s" + + "ummartíð\x13Yekaterinburg tíð\x1aYekaterinburg vanlig tíð\x19Yekaterinbu" + + "rg summartíð\x05þri.\x05mið.\x04fim.\x05fös.\x04lau.\x04þr.\x03fi.\x04fö" + + ".\x03la.\x0amánudagur\x0dþriðjudagur\x0dmiðvikudagur\x0bfimmtudagur\x0bf" + + "östudagur\x0blaugardagur" + +var bucket37 string = "" + // Size: 13927 bytes + "\x0fère bouddhique\x05E. B.\x051yuè\x052yuè\x053yuè\x054yuè\x055yuè\x056" + + "yuè\x057yuè\x058yuè\x059yuè\x0610yuè\x0611yuè\x0612yuè\x0azhēngyuè\x07èr" + + "yuè\x08sānyuè\x07sìyuè\x07wǔyuè\x08liùyuè\x07qīyuè\x07bāyuè\x08jiǔyuè" + + "\x08shíyuè\x0bshíyīyuè\x0eshí’èryuè\x0dEEEE d MMMM U\x11avant Dioclétien" + + "\x12après Dioclétien\x06av. D.\x06ap. D.\x05mäs.\x04teq.\x04hed.\x04tah." + + "\x03ter\x05yäk.\x05mäg.\x04miy.\x04gue.\x05sän.\x04ham.\x05näh.\x04pag." + + "\x0bmäskäräm\x06teqemt\x05hedar\x07tahesas\x08yäkatit\x08mägabit\x07miya" + + "zya\x07guenbot\x06säné\x06hamlé\x08nähasé\x08pagumén\x15avant l’Incarnat" + + "ion\x16après l’Incarnation\x08av. Inc.\x08ap. Inc.\x0c{1} 'à' {0}\x05jan" + + "v.\x06févr.\x04mars\x04avr.\x03mai\x04juin\x05juil.\x05août\x05sept.\x04" + + "oct.\x04nov.\x05déc.\x07janvier\x08février\x05avril\x07juillet\x09septem" + + "bre\x07octobre\x08novembre\x09décembre\x04dim.\x04lun.\x04mar.\x04mer." + + "\x04jeu.\x04ven.\x04sam.\x08dimanche\x05lundi\x05mardi\x08mercredi\x05je" + + "udi\x08vendredi\x06samedi\x06minuit\x04midi\x05ap.m.\x04soir\x04nuit\x08" + + "du matin\x12de l’après-midi\x07du soir\x05matin\x0baprès-midi\x13avant J" + + "ésus-Christ\x16avant l’ère commune\x14après Jésus-Christ\x13de l’ère co" + + "mmune\x09av. J.-C.\x09ap. J.-C.\x05tich.\x06hèch.\x04kis.\x05tév.\x05che" + + "v.\x04ad.I\x04adar\x05ad.II\x04nis.\x04iyar\x04siv.\x04tam.\x02av\x04él." + + "\x06tichri\x08hèchvan\x06kislev\x07téveth\x06chevat\x06adar I\x07adar II" + + "\x06nissan\x05sivan\x06tamouz\x06éloul\x05A. M.\x05chai.\x04vai.\x05jyai" + + ".\x06āsha.\x06shrā.\x05bhā.\x06āshw.\x05kār.\x05mār.\x04pau.\x05māgh\x06" + + "phāl.\x05māgh\x09ère Saka\x05mouh.\x04saf.\x08rab. aw.\x08rab. th.\x0ajo" + + "um. oul.\x0ajoum. tha.\x04raj.\x05chaa.\x04ram.\x05chaw.\x08dhou. q.\x08" + + "dhou. h.\x09mouharram\x05safar\x0drabia al awal\x0frabia ath-thani\x0fjo" + + "umada al oula\x12joumada ath-thania\x05rajab\x08chaabane\x07ramadan\x07c" + + "hawwal\x0ddhou al qi`da\x0ddhou al-hijja\x09joum. ou.\x09joum. th.\x09dh" + + "ou. qi.\x09dhou. hi.\x13ère de l’Hégire\x04far.\x04ord.\x04kho.\x03tir" + + "\x04mor.\x05šah.\x04mehr\x06âbân\x05âzar\x03dey\x04bah.\x04esf.\x03tir" + + "\x04mehr\x06âbân\x05âzar\x03dey\x05A. P.\x09avant RdC\x03RdC\x07av. RdC" + + "\x04ère\x06année\x14l’année dernière\x0ccette année\x14l’année prochaine" + + "\x0bdans {0} an\x0cdans {0} ans\x0dil y a {0} an\x0eil y a {0} ans\x02an" + + "\x0adans {0} a\x0cil y a {0} a\x06+{0} a\x14le trimestre dernier\x0cce t" + + "rimestre\x15le trimestre prochain\x12dans {0} trimestre\x13dans {0} trim" + + "estres\x14il y a {0} trimestre\x15il y a {0} trimestres\x0ele trim. dern" + + ".\x08ce trim.\x0fle trim. proch.\x0edans {0} trim.\x10il y a {0} trim." + + "\x09trim dern\x07ce trim\x0atrim proch\x04mois\x0fle mois dernier\x0ace " + + "mois-ci\x10le mois prochain\x0ddans {0} mois\x0fil y a {0} mois\x0bdans " + + "{0} m.\x0dil y a {0} m.\x07+{0} m.\x07-{0} m.\x07semaine\x14la semaine d" + + "ernière\x0dcette semaine\x14la semaine prochaine\x10dans {0} semaine\x11" + + "dans {0} semaines\x12il y a {0} semaine\x13il y a {0} semaines\x11la sem" + + "aine du {0}\x0ddans {0} sem.\x0fil y a {0} sem.\x0bsem. du {0}\x09+{0} s" + + "em.\x09-{0} sem.\x0esemaine (mois)\x09sem. (m.)\x04jour\x0aavant-hier" + + "\x04hier\x0daujourd’hui\x06demain\x0daprès-demain\x0ddans {0} jour\x0eda" + + "ns {0} jours\x0fil y a {0} jour\x10il y a {0} jours\x0bdans {0}\u00a0j" + + "\x0dil y a {0}\u00a0j\x06+{0} j\x06-{0} j\x0djour (année)\x06j (an)\x12j" + + "our de la semaine\x08j (sem.)\x0bjour (mois)\x10dimanche dernier\x0bce d" + + "imanche\x11dimanche prochain\x11dans {0} dimanche\x12dans {0} dimanches" + + "\x13il y a {0} dimanche\x14il y a {0} dimanches\x0cdim. dernier\x07ce di" + + "m.\x0ddim. prochain\x0ddans {0} dim.\x0fil y a {0} dim.\x0dlundi dernier" + + "\x08ce lundi\x0elundi prochain\x0edans {0} lundi\x0fdans {0} lundis\x10i" + + "l y a {0} lundi\x11il y a {0} lundis\x0clun. dernier\x07ce lun.\x0dlun. " + + "prochain\x0ddans {0} lun.\x0fil y a {0} lun.\x0dmardi dernier\x08ce mard" + + "i\x0emardi prochain\x0edans {0} mardi\x0fdans {0} mardis\x10il y a {0} m" + + "ardi\x11il y a {0} mardis\x0cmar. dernier\x07ce mar.\x0dmar. prochain" + + "\x0ddans {0} mar.\x0fil y a {0} mar.\x10mercredi dernier\x0bce mercredi" + + "\x11mercredi prochain\x11dans {0} mercredi\x12dans {0} mercredis\x13il y" + + " a {0} mercredi\x14il y a {0} mercredis\x0cmer. dernier\x07ce mer.\x0dme" + + "r. prochain\x0ddans {0} mer.\x0fil y a {0} mer.\x0djeudi dernier\x08ce j" + + "eudi\x0ejeudi prochain\x0edans {0} jeudi\x0fdans {0} jeudis\x10il y a {0" + + "} jeudi\x11il y a {0} jeudis\x0cjeu. dernier\x07ce jeu.\x0djeu. prochain" + + "\x0ddans {0} jeu.\x0fil y a {0} jeu.\x10vendredi dernier\x0bce vendredi" + + "\x11vendredi prochain\x11dans {0} vendredi\x12dans {0} vendredis\x13il y" + + " a {0} vendredi\x14il y a {0} vendredis\x0cven. dernier\x07ce ven.\x0dve" + + "n. prochain\x0ddans {0} ven.\x0fil y a {0} ven.\x0esamedi dernier\x09ce " + + "samedi\x0fsamedi prochain\x0fdans {0} samedi\x10dans {0} samedis\x11il y" + + " a {0} samedi\x12il y a {0} samedis\x0csam. dernier\x07ce sam.\x0dsam. p" + + "rochain\x0ddans {0} sam.\x0fil y a {0} sam.\x06cadran\x05heure\x0ecette " + + "heure-ci\x0edans {0} heure\x0fdans {0} heures\x10il y a {0} heure\x11il " + + "y a {0} heures\x07cette h\x0bdans {0}\u00a0h\x0dil y a {0}\u00a0h\x0fcet" + + "te minute-ci\x0fdans {0} minute\x10dans {0} minutes\x11il y a {0} minute" + + "\x12il y a {0} minutes\x09cette min\x0ddans {0}\u00a0min\x0fil y a {0}" + + "\u00a0min\x07seconde\x0amaintenant\x10dans {0} seconde\x11dans {0} secon" + + "des\x12il y a {0} seconde\x13il y a {0} secondes\x0bdans {0}\u00a0s\x0di" + + "l y a {0}\u00a0s\x0efuseau horaire\x0bheure : {0}\x15{0} (heure d’été)" + + "\x14{0} (heure standard)\x1aTemps universel coordonné\x1bheure d’été bri" + + "tannique\x1aheure d’été irlandaise\x11heure de l’Acre\x19heure normale d" + + "e l’Acre\x1bheure d’été de l’Acre\x18heure de l’Afghanistan\"heure norma" + + "le d’Afrique centrale$heure normale d’Afrique de l’Est&heure normale d’A" + + "frique méridionale\x1eheure d’Afrique de l’Ouest&heure normale d’Afrique" + + " de l’Ouest(heure d’été d’Afrique de l’Ouest\x13heure de l’Alaska\x1bheu" + + "re normale de l’Alaska\x1dheure d’été de l’Alaska\x03HAK\x04HNAK\x04HEAK" + + "\x12heure d’Alma Ata\x1aheure normale d’Alma Ata\x1cheure d’été d’Alma A" + + "ta\x15heure de l’Amazonie\x1dheure normale de l’Amazonie\x1fheure d’été " + + "de l’Amazonie\x1fheure du centre nord-américain'heure normale du centre " + + "nord-américain\x19heure d’été du Centre\x02HC\x03HNC\x03HEC heure de l’E" + + "st nord-américain(heure normale de l’Est nord-américain\x1aheure d’été d" + + "e l’Est\x02HE\x03HNE\x03HEE\x13heure des Rocheuses\x1bheure normale des " + + "Rocheuses\x1dheure d’été des Rocheuses\x02HR\x03HNR\x03HER\"heure du Pac" + + "ifique nord-américain*heure normale du Pacifique nord-américain\x1cheure" + + " d’été du Pacifique\x02HP\x03HNP\x03HEP\x10heure d’Anadyr\x18heure norma" + + "le d’Anadyr\x1aheure d’été d’Anadyr\x0eheure d’Apia\x16heure normale d’A" + + "pia\x18heure d’été d’Apia\x10heure d’Aktaou\x18heure normale d’Aktaou" + + "\x1aheure d’été d’Aktaou\x11heure d’Aqtöbe\x19heure normale d’Aqtöbe\x1b" + + "heure d’été d’Aqtöbe\x13heure de l’Arabie\x1bheure normale de l’Arabie" + + "\x1dheure d’été de l’Arabie\x16heure de l’Argentine\x1bheure normale d’A" + + "rgentine heure d’été de l’Argentine\x1bheure de l’Ouest argentin#heure n" + + "ormale de l’Ouest argentin%heure d’été de l’Ouest argentin\x15heure de l" + + "’Arménie\x1dheure normale de l’Arménie\x1cheure d’été d’Arménie\x17heu" + + "re de l’Atlantique\x1fheure normale de l’Atlantique!heure d’été de l’Atl" + + "antique\x02HA\x03HNA\x03HEA heure du centre de l’Australie(heure normale" + + " du centre de l’Australie*heure d’été du centre de l’Australie&heure du " + + "centre-ouest de l’Australie.heure normale du centre-ouest de l’Australie" + + "0heure d’été du centre-ouest de l’Australie!heure de l’Est de l’Australi" + + "e)heure normale de l’Est de l’Australie+heure d’été de l’Est de l’Austra" + + "lie#heure de l’Ouest de l’Australie+heure normale de l’Ouest de l’Austra" + + "lie-heure d’été de l’Ouest de l’Australie\x19heure de l’Azerbaïdjan!heur" + + "e normale de l’Azerbaïdjan heure d’été d’Azerbaïdjan\x11heure des Açores" + + "\x19heure normale des Açores\x1bheure d’été des Açores\x13heure du Bangl" + + "adesh\x1bheure normale du Bangladesh\x1dheure d’été du Bangladesh\x10heu" + + "re du Bhoutan\x10heure de Bolivie\x11heure de Brasilia\x19heure normale " + + "de Brasilia\x1bheure d’été de Brasilia\x10heure du Brunéi\x11heure du Ca" + + "p-Vert\x19heure normale du Cap-Vert\x1bheure d’été du Cap-Vert\x12heure " + + "des Chamorro\x17heure des îles Chatham\x1fheure normale des îles Chatham" + + "!heure d’été des îles Chatham\x0eheure du Chili\x16heure normale du Chil" + + "i\x18heure d’été du Chili\x11heure de la Chine\x19heure normale de la Ch" + + "ine\x18heure d’été de Chine\x13heure de Choibalsan\x1bheure normale de C" + + "hoibalsan\x1dheure d’été de Choibalsan\x1bheure de l’île Christmas\x15he" + + "ure des îles Cocos\x11heure de Colombie\x19heure normale de Colombie\x1b" + + "heure d’été de Colombie\x14heure des îles Cook\x1cheure normale des îles" + + " Cook\x1eheure d’été des îles Cook\x0dheure de Cuba\x15heure normale de " + + "Cuba\x17heure d’été de Cuba\x03HCU\x04HNCU\x04HECU\x0eheure de Davis\x1b" + + "heure de Dumont-d’Urville\x17heure du Timor oriental\x1cheure de l’île d" + + "e Pâques$heure normale de l’île de Pâques&heure d’été de l’île de Pâques" + + "\x16heure de l’Équateur\x19heure d’Europe centrale!heure normale d’Europ" + + "e centrale#heure d’été d’Europe centrale\x1bheure d’Europe de l’Est#heur" + + "e normale d’Europe de l’Est%heure d’été d’Europe de l’Est\x14heure de Ka" + + "liningrad\x1dheure d’Europe de l’Ouest%heure normale d’Europe de l’Ouest" + + "'heure d’été d’Europe de l’Ouest\x19heure des îles Malouines!heure norma" + + "le des îles Malouines#heure d’été des îles Malouines\x15heure des îles F" + + "idji\x1dheure normale des îles Fidji\x1fheure d’été des îles Fidji\x1dhe" + + "ure de la Guyane française6heure des Terres australes et antarctiques fr" + + "ançaises\x1aheure des îles Galápagos\x17heure des îles Gambier\x14heure " + + "de la Géorgie\x1cheure normale de la Géorgie\x1bheure d’été de Géorgie" + + "\x17heure des îles Gilbert\x1aheure moyenne de Greenwich\x1dheure de l’E" + + "st du Groenland%heure normale de l’Est du Groenland'heure d’été de l’Est" + + " du Groenland\x03HEG\x04HNEG\x04HEEG\x1fheure de l’Ouest du Groenland'he" + + "ure normale de l’Ouest du Groenland)heure d’été de l’Ouest du Groenland" + + "\x03HOG\x04HNOG\x04HEOG\x0dheure de Guam\x0eheure du Golfe\x0fheure du G" + + "uyana heure d’Hawaii - Aléoutiennes(heure normale d’Hawaii - Aléoutienne" + + "s*heure d’été d’Hawaii - Aléoutiennes\x03HHA\x04HNHA\x04HEHA\x12heure de" + + " Hong Kong\x1aheure normale de Hong Kong\x1cheure d’été de Hong Kong\x0d" + + "heure de Hovd\x15heure normale de Hovd\x17heure d’été de Hovd\x11heure d" + + "e l’Inde\x1aheure de l’Océan Indien\x13heure d’Indochine\x1bheure du Cen" + + "tre indonésien\x1cheure de l’Est indonésien\x1eheure de l’Ouest indonési" + + "en\x11heure de l’Iran\x16heure normale d’Iran\x18heure d’été d’Iran\x12h" + + "eure d’Irkoutsk\x1aheure normale d’Irkoutsk\x1cheure d’été d’Irkoutsk" + + "\x11heure d’Israël\x19heure normale d’Israël\x1bheure d’été d’Israël\x0e" + + "heure du Japon\x16heure normale du Japon\x18heure d’été du Japon!heure d" + + "e Petropavlovsk-Kamchatski)heure normale de Petropavlovsk-Kamchatski+heu" + + "re d’été de Petropavlovsk-Kamchatski\x1eheure de l’Est du Kazakhstan heu" + + "re de l’Ouest du Kazakhstan\x12heure de la Corée\x1aheure normale de la " + + "Corée\x19heure d’été de Corée\x0fheure de Kosrae\x15heure de Krasnoïarsk" + + "\x1dheure normale de Krasnoïarsk\x1fheure d’été de Krasnoïarsk\x15heure " + + "du Kirghizistan\x0eheure de Lanka\x1bheure des îles de la Ligne\x12heure" + + " de Lord Howe\x1aheure normale de Lord Howe\x1cheure d’été de Lord Howe" + + "\x0eheure de Macao\x16heure normale de Macao\x18heure d’été de Macao\x1b" + + "heure de l’île Macquarie\x10heure de Magadan\x18heure normale de Magadan" + + "\x1aheure d’été de Magadan\x14heure de la Malaisie\x12heure des Maldives" + + "\x19heure des îles Marquises\x18heure des îles Marshall\x10heure de Maur" + + "ice\x18heure normale de Maurice\x1aheure d’été de Maurice\x0fheure de Ma" + + "wson\x1eheure du Nord-Ouest du Mexique&heure normale du Nord-Ouest du Me" + + "xique(heure d’été du Nord-Ouest du Mexique\x05HNOMX\x06HNNOMX\x06HENOMX" + + "\x1bheure du Pacifique mexicain#heure normale du Pacifique mexicain%heur" + + "e d’été du Pacifique mexicain\x04HPMX\x05HNPMX\x05HEPMX\x15heure d’Oulan" + + "-Bator\x1dheure normale d’Oulan-Bator\x1fheure d’été d’Oulan-Bator\x0fhe" + + "ure de Moscou\x17heure normale de Moscou\x19heure d’été de Moscou\x10heu" + + "re du Myanmar\x0eheure de Nauru\x0fheure du Népal\x1fheure de la Nouvell" + + "e-Calédonie'heure normale de la Nouvelle-Calédonie&heure d’été de Nouvel" + + "le-Calédonie\x1dheure de la Nouvelle-Zélande%heure normale de la Nouvell" + + "e-Zélande'heure d’été de la Nouvelle-Zélande\x14heure de Terre-Neuve\x1c" + + "heure normale de Terre-Neuve\x1eheure d’été de Terre-Neuve\x03HTN\x04HNT" + + "N\x04HETN\x0fheure de Nioué\x19heure de l’île Norfolk\x1cheure de Fernan" + + "do de Noronha$heure normale de Fernando de Noronha&heure d’été de Fernan" + + "do de Noronha!heure des îles Mariannes du Nord\x15heure de Novossibirsk" + + "\x1dheure normale de Novossibirsk\x1fheure d’été de Novossibirsk\x0dheur" + + "e de Omsk\x15heure normale de Omsk\x17heure d’été de Omsk\x11heure du Pa" + + "kistan\x19heure normale du Pakistan\x1bheure d’été du Pakistan\x10heure " + + "des Palaos&heure de la Papouasie-Nouvelle-Guinée\x11heure du Paraguay" + + "\x19heure normale du Paraguay\x1bheure d’été du Paraguay\x0fheure du Pér" + + "ou\x17heure normale du Pérou\x19heure d’été du Pérou\x15heure des Philip" + + "pines\x1dheure normale des Philippines\x1fheure d’été des Philippines" + + "\x17heure des îles Phoenix!heure de Saint-Pierre-et-Miquelon)heure norma" + + "le de Saint-Pierre-et-Miquelon+heure d’été de Saint-Pierre-et-Miquelon" + + "\x03HPM\x04HNPM\x04HEPM\x18heure des îles Pitcairn\x1cheure de l’île de " + + "Pohnpei\x12heure de Pyongyang\x14heure de La Réunion\x10heure de Rothera" + + "\x12heure de Sakhaline\x1aheure normale de Sakhaline\x1cheure d’été de S" + + "akhaline\x0fheure de Samara\x17heure normale de Samara\x19heure d’été de" + + " Samara\x0fheure des Samoa\x17heure normale des Samoa\x19heure d’été des" + + " Samoa\x14heure des Seychelles\x12heure de Singapour\x17heure des îles S" + + "alomon\x18heure de Géorgie du Sud\x11heure du Suriname\x0eheure de Syowa" + + "\x0fheure de Tahiti\x0fheure de Taipei\x17heure normale de Taipei\x19heu" + + "re d’été de Taipei\x14heure du Tadjikistan\x10heure de Tokelau\x0fheure " + + "des Tonga\x17heure normale des Tonga\x18heure d’été de Tonga\x0eheure de" + + " Chuuk\x16heure du Turkménistan\x1eheure normale du Turkménistan heure d" + + "’été du Turkménistan\x10heure des Tuvalu\x14heure de l’Uruguay\x1cheur" + + "e normale de l’Uruguay\x1eheure d’été de l’Uruguay\x19heure de l’Ouzbéki" + + "stan!heure normale de l’Ouzbékistan#heure d’été de l’Ouzbékistan\x10heur" + + "e du Vanuatu\x18heure normale du Vanuatu\x1aheure d’été de Vanuatu\x12he" + + "ure du Venezuela\x14heure de Vladivostok\x1cheure normale de Vladivostok" + + "\x1eheure d’été de Vladivostok\x12heure de Volgograd\x1aheure normale de" + + " Volgograd\x1cheure d’été de Volgograd\x0fheure de Vostok\x16heure de l’" + + "île Wake\x19heure de Wallis-et-Futuna\x11heure de Iakoutsk\x19heure nor" + + "male de Iakoutsk\x1bheure d’été de Iakoutsk\x17heure d’Ekaterinbourg\x1f" + + "heure normale d’Ekaterinbourg!heure d’été d’Ekaterinbourg\x06juill.\x0fc" + + "e trimestre-ci\x1aheure d’Afrique centrale\x1bheure d’Afrique orientale " + + "heure normale d’Afrique du Sud\x0fheure du Centre\x17heure normale du Ce" + + "ntre\x10heure de l’Est\x18heure normale de l’Est\x12heure du Pacifique" + + "\x1aheure normale du Pacifique\x1fheure normale des Îles Chatham\x0eheur" + + "e de Chine\x16heure normale de Chine\x1aheure de Guyane française\x1eheu" + + "re d’Hawaï-Aléoutiennes&heure normale d’Hawaï-Aléoutiennes\x02HT\x03HNT" + + "\x0eheure d’Omsk\x16heure normale d’Omsk\x14heure de la Réunion\x05febr." + + "\x05marts\x04apr.\x05maijs\x05jūn.\x05jūl.\x04aug.\x05sept.\x04okt.\x04n" + + "ov.\x04dec.\x05marts\x05maijs\x05hedar\x07tahesas\x03ter" + +var bucket38 string = "" + // Size: 14156 bytes + "\x1aH 'h' mm 'min' ss 's' zzzz\x05kyakh\x0eyy-MM-dd GGGGG\x07du mat.\x1a" + + "avant l’ère chrétienne\x17de l’ère chrétienne\x1bHH 'h' mm 'min' ss 's' " + + "zzzz\x18HH 'h' mm 'min' ss 's' z\x16HH 'h' mm 'min' ss 's'\x09HH 'h' mm" + + "\x0cAnno Hegirae\x0dy-MM-dd GGGGG\x04Far.\x04Ord.\x04Kho.\x03Tir\x04Mor." + + "\x05Šah.\x04Mehr\x06Âbâ.\x05Âzar\x03Dey\x04Bah.\x04Esf.\x03Tir\x04Mehr" + + "\x05Âzar\x03Dey\x0cDans {0}\u00a0an\x0dDans {0}\u00a0ans\x0eIl y a {0}" + + "\u00a0an\x0fIl y a {0}\u00a0ans\x0fsemaine du mois\x0bsem. (mois)\x12jou" + + "r de l’année\x0fj de l’année\x0fj de la semaine\x0cjour du mois\x09j du " + + "mois\x08j (mois)\x0ddans {0}\u00a0dim\x0fil y a {0}\u00a0dim\x0ddans {0}" + + "\u00a0lun\x0fil y a {0}\u00a0lun\x0ddans {0}\u00a0mar\x0fil y a {0}" + + "\u00a0mar\x0ddans {0}\u00a0mer\x0fil y a {0}\u00a0mer\x0ddans {0}\u00a0j" + + "eu\x0fil y a {0}\u00a0jeu\x0ddans {0}\u00a0ven\x0fil y a {0}\u00a0ven" + + "\x06ce sam\x09sam proch\x0ddans {0}\u00a0sam\x0cdans {0} sam\x0fil y a {" + + "0}\u00a0sam\x07+ {0} s\x06+{0} s\x14{0} (heure avancée)\x13{0} (heure no" + + "rmale)\x1atemps universel coordonné\x1aheure avancée britannique\x19heur" + + "e avancée irlandaise\x1aheure avancée de l’Acre'heure avancée d’Afrique " + + "de l’Ouest\x1cheure avancée de l’Alaska\x1bheure avancée d’Alma Ata\x1eh" + + "eure avancée de l’Amazonie\x18heure avancée du Centre\x03HAC\x19heure av" + + "ancée de l’Est\x03HAE\x1cheure avancée des Rocheuses\x03HAR\x1bheure ava" + + "ncée du Pacifique\x03HAP\x19heure avancée d’Anadyr\x17heure avancée d’Ap" + + "ia\x19heure avancée d’Aktaou\x1aheure avancée d’Aqtöbe\x1cheure avancée " + + "de l’Arabie\x1fheure avancée de l’Argentine$heure avancée de l’Ouest arg" + + "entin\x1bheure avancée d’Arménie heure avancée de l’Atlantique)heure ava" + + "ncée du centre de l’Australie/heure avancée du centre-ouest de l’Austral" + + "ie*heure avancée de l’Est de l’Australie,heure avancée de l’Ouest de l’A" + + "ustralie\x1fheure avancée d’Azerbaïdjan\x1aheure avancée des Açores\x1ch" + + "eure avancée du Bangladesh\x1aheure avancée de Brasilia\x1aheure avancée" + + " du Cap-Vert heure avancée des Îles Chatham\x17heure avancée du Chili" + + "\x17heure avancée de Chine\x1cheure avancée de Choibalsan\x1aheure avanc" + + "ée de Colombie\x1dheure avancée des îles Cook\x16heure avancée de Cuba%" + + "heure avancée de l’île de Pâques\"heure avancée d’Europe centrale$heure " + + "avancée d’Europe de l’Est&heure avancée d’Europe de l’Ouest\"heure avanc" + + "ée des îles Malouines\x1eheure avancée des îles Fidji\x1aheure avancée " + + "de Géorgie&heure avancée de l’Est du Groenland(heure avancée de l’Ouest " + + "du Groenland'heure avancée d’Hawaï-Aléoutiennes\x1bheure avancée de Hong" + + " Kong\x16heure avancée de Hovd\x17heure avancée d’Iran\x1bheure avancée " + + "d’Irkoutsk\x1aheure avancée d’Israël\x17heure avancée du Japon*heure ava" + + "ncée de Petropavlovsk-Kamchatski\x18heure avancée de Corée\x1eheure avan" + + "cée de Krasnoïarsk\x1bheure avancée de Lord Howe\x17heure avancée de Mac" + + "ao\x19heure avancée de Magadan\x19heure avancée de Maurice'heure avancée" + + " du Nord-Ouest du Mexique$heure avancée du Pacifique mexicain\x1eheure a" + + "vancée d’Oulan-Bator\x18heure avancée de Moscou%heure avancée de Nouvell" + + "e-Calédonie&heure avancée de la Nouvelle-Zélande\x1dheure avancée de Ter" + + "re-Neuve\x03HAT%heure avancée de Fernando de Noronha\x1eheure avancée de" + + " Novossibirsk\x17heure avancée d’Omsk\x1aheure avancée du Pakistan\x1ahe" + + "ure avancée du Paraguay\x18heure avancée du Pérou\x1eheure avancée des P" + + "hilippines*heure avancée de Saint-Pierre-et-Miquelon\x1bheure avancée de" + + " Sakhaline\x18heure avancée des Samoa\x18heure avancée de Taipei\x17heur" + + "e avancée de Tonga\x1fheure avancée du Turkménistan\x1dheure avancée de " + + "l’Uruguay\"heure avancée de l’Ouzbékistan\x19heure avancée de Vanuatu" + + "\x1dheure avancée de Vladivostok\x1bheure avancée de Volgograd\x1aheure " + + "avancée de Iakoutsk heure avancée d’Ekaterinbourg\x0cde l’ap.m.\x11HH.mm" + + ":ss 'h' zzzz\x03GFT\x0ade la nuit\x03jr.\x0bdim dernier\x06ce dim\x0cdim" + + " prochain\x0blun dernier\x06ce lun\x0clun prochain\x0bmar dernier\x06ce " + + "mar\x0cmar prochain\x0bmer dernier\x06ce mer\x0cmer prochain\x0bjeu dern" + + "ier\x06ce jeu\x0cjeu prochain\x0bven dernier\x06ce ven\x0cven prochain" + + "\x0bsam dernier\x0csam prochain\x10le 1er trimestre\x12le 2ème trimestre" + + "\x12le 3ème trimestre\x12le 4ème trimestre\x1aEEEE d 'di' MMMM 'dal' y G" + + "\x15d 'di' MMMM 'dal' y G\x03Zen\x03Fev\x03Mar\x03Avr\x03Mai\x03Jug\x03L" + + "ui\x03Avo\x03Set\x03Otu\x03Nov\x03Dic\x06Zenâr\x07Fevrâr\x05Març\x06Avrî" + + "l\x04Jugn\x05Avost\x08Setembar\x06Otubar\x08Novembar\x08Dicembar\x07dome" + + "nie\x05lunis\x07martars\x07miercus\x05joibe\x06vinars\x06sabide\x0ePrin " + + "trimestri\x10Secont trimestri\x10Tierç trimestri\x0fCuart trimestri\x02a" + + ".\x02p.\x03pdC\x03ddC\x18EEEE d 'di' MMMM 'dal' y\x13d 'di' MMMM 'dal' y" + + "\x03ere\x0cca di {0} an\x0eca di {0} agns\x0e{0} an indaûr\x10{0} agns i" + + "ndaûr\x04mês\x0eca di {0} mês\x10{0} mês indaûr\x08setemane\x12ca di {0}" + + " setemane\x13ca di {0} setemanis\x14{0} setemane indaûr\x15{0} setemanis" + + " indaûr\x03dì\x0dîr l’altri\x03îr\x04vuê\x05doman\x0cpassantdoman\x11ca " + + "di {0} zornade\x12ca di {0} zornadis\x13{0} zornade indaûr\x14{0} zornad" + + "is indaûr\x0fdì de setemane\x0btoc dal dì\x03ore\x0dca di {0} ore\x0eca " + + "di {0} oris\x0f{0} ore indaûr\x10{0} oris indaûr\x06minût\x10ca di {0} m" + + "inût\x11ca di {0} minûts\x12{0} minût indaûr\x13{0} minûts indaûr\x06sec" + + "ont\x10ca di {0} secont\x11ca di {0} seconts\x12{0} secont indaûr\x13{0}" + + " seconts indaûr\x16Ore de Europe centrâl\x1fOre standard de Europe centr" + + "âl\x1dOre estive de Europe centrâl\x17Ore de Europe orientâl Ore standa" + + "rd de Europe orientâl\x1eOre estive de Europe orientâl\x18Ore de Europe " + + "ocidentâl!Ore standard de Europe ocidentâl\x1fOre estive de Europe ocide" + + "ntâl\x0dOre di Mosche\x16Ore standard di Mosche\x14Ore estive di Mosche" + + "\x0edd-MM-yy GGGGG\x15begjin fan de maitiid\x0areinwetter\x14ynsekten ûn" + + "tweitsje\x0bmaitiidpunt\x10ljocht en helder\x15begjien fan de simmer\x0a" + + "simmerpunt\x05waarm\x04hjit\x14begjin fan de hjerst\x13ein fan de hjitte" + + "ns\x0awite dauwe\x0ahjerstpunt\x0ckâlde dauwe\x0dearste froast\x14begjin" + + " fan de winter\x0blichte snie\x0bswiere snie\x0awinterpunt\x04Rôt\x04Oks" + + "e\x05Tiger\x04Knyn\x05Draak\x05Slang\x06Hynder\x04Geit\x03Aap\x06Hoanne" + + "\x04Hûn\x06Baarch\x03Tut\x05Babah\x05Hatur\x06Kiyahk\x05Tubah\x06Amshir" + + "\x08Baramhat\x0aBaramundah\x07Bashans\x09Ba’unah\x04Abib\x05Misra\x04Nas" + + "i\x0aJannewaris\x0aFebrewaris\x05Maart\x05April\x05Maaie\x04Juny\x04July" + + "\x08Augustus\x09Septimber\x07Oktober\x08Novimber\x08Desimber\x05snein" + + "\x07moandei\x07tiisdei\x08woansdei\x0atongersdei\x05freed\x05sneon\x0d1e" + + " fearnsjier\x0d2e fearnsjier\x0d3e fearnsjier\x0d4e fearnsjier\x0cFoar K" + + "ristus\x18foar gewoane jiertelling\x0bnei Kristus\x13gewoane jiertelling" + + "\x06f.g.j.\x04g.j.\x04f.K.\x03fgj\x04n.K.\x02gj\x0c{1} 'om' {0}\x07Tisjr" + + "ie\x08Chesjwan\x06Kislev\x05Tevet\x06Sjevat\x06Adar A\x04Adar\x06Adar B" + + "\x05Nisan\x04Ijar\x05Sivan\x07Tammoez\x02Av\x06Elloel\x04SAKA\x05Moeh." + + "\x04Saf.\x06Rab. I\x07Rab. II\x07Joem. I\x08Joem. II\x04Raj.\x04Sja.\x04" + + "Ram.\x05Sjaw.\x09Doe al k.\x09Doe al h.\x09Moeharram\x05Safar\x0fRabiʻa " + + "al awal\x10Rabiʻa al thani\x0fJoemadʻal awal\x10Joemadʻal thani\x05Rajab" + + "\x09Sjaʻaban\x07Ramadan\x06Sjawal\x0eDoe al kaʻaba\x0cDoe al hizja\x0eSa" + + "ʻna Hizjria\x08Tiidsrin\x04Jier\x0cfoarich jier\x08dit jier\x0dfolgjend" + + " jier\x0cOer {0} jier\x0c{0} jier lyn\x0aFearnsjier\x12foarich fearnsjie" + + "r\x0edit fearnsjier\x13folgjend fearnsjier\x12oer {0} fearnsjier\x12{0} " + + "fearnsjier lyn\x0afearnsjier\x06Moanne\x0efoarige moanne\x0cdizze moanne" + + "\x10folgjende moanne\x0eOer {0} moanne\x0fOer {0} moannen\x0e{0} moanne " + + "lyn\x0f{0} moannen lyn\x04Wike\x0cfoarige wike\x0adizze wike\x0efolgjend" + + "e wike\x0cOer {0} wike\x0dOer {0} wiken\x0c{0} wike lyn\x0d{0} wiken lyn" + + "\x0beergisteren\x08gisteren\x07vandaag\x06morgen\x09Oermorgen\x0bOer {0}" + + " dei\x0dOer {0} deien\x0b{0} dei lyn\x0d{0} deien lyn\x0fdei van de wike" + + "\x0eôfrûne snein\x0bdizze snein\x14folgjende wike snein\x10ôfrûne moande" + + "i\x0ddizze moandei\x16folgjende wike moandei\x10ôfrûne tiisdei\x0ddizze " + + "tiisdei\x16folgjende wike tiisdei\x11ôfrûne woansdei\x0edizze woansdei" + + "\x17folgjende wike woansdei\x13ôfrûne tongersdei\x10dizze tongersdei\x19" + + "folgjende wike tongersdei\x0eôfrûne freed\x0bdizze freed\x14folgjende wi" + + "ke freed\x0eôfrûne sneon\x0bdizze sneon\x14folgjende wike sneon\x04oere" + + "\x0cOer {0} oere\x0c{0} oere lyn\x06Minút\x0eOer {0} minút\x0fOer {0} mi" + + "nuten\x0e{0} minút lyn\x0f{0} minuten lyn\x07Sekonde\x0fOer {0} sekonde" + + "\x10Oer {0} sekonden\x0f{0} sekonde lyn\x10{0} sekonden lyn\x08{0}-tiid" + + "\x0dZomertiid {0}\x11Standaardtiid {0}\x11Britse simmertiid\x10Ierse sim" + + "mertiid\x09Acre-tiid\x11Acre-standerttiid\x0fAcre-simmertiid\x0fAfghaans" + + "ke tiid\x19Sintraal-Afrikaanske tiid\x15East-Afrikaanske tiid\x15Sûd-Afr" + + "ikaanske tiid\x15West-Afrikaanske tiid\x1dWest-Afrikaanske standerttiid" + + "\x1bWest-Afrikaanske simmertiid\x0bAlaska-tiid\x13Alaska-standerttiid" + + "\x11Alaska-simmertiid\x0dAlma-Ata-tiid\x15Alma-Ata-standerttiid\x13Alma-" + + "Ata-simmertiid\x0cAmazone-tiid\x14Amazone-standerttiid\x12Amazone-simmer" + + "tiid\x0cCentral-tiid\x14Central-standerttiid\x12Central-simmertiid\x0cEa" + + "stern-tiid\x14Eastern-standerttiid\x12Eastern-simmertiid\x0dMountain-tii" + + "d\x15Mountain-standerttiid\x13Mountain-simmertiid\x0cPasifik-tiid\x14Pas" + + "ifik-standerttiid\x12Pasifik-simmertiid\x0bAnadyr-tiid\x13Anadyr-stander" + + "ttiid\x11Anadyr-simmertiid\x0aAqtau-tiid\x12Aqtau-standerttiid\x10Aqtau-" + + "simmertiid\x0cAqtöbe-tiid\x14Aqtöbe-standerttiid\x12Aqtöbe-simmertiid" + + "\x0dArabyske tiid\x15Arabyske standerttiid\x13Arabyske simmertiid\x10Arg" + + "entynske tiid\x18Argentynske standerttiid\x16Argentynske simmertiid\x15W" + + "est-Argentynske tiid\x1dWest-Argentynske standerttiid\x1bWest-Argentynsk" + + "e simmertiid\x0dArmeense tiid\x15Armeense standerttiid\x13Armeense simme" + + "rtiid\x0dAtlantic-tiid\x15Atlantic-standerttiid\x13Atlantic-simmertiid" + + "\x17Midden-Australyske tiid\x1fMidden-Australyske standerttiid\x1dMidden" + + "-Australyske simmertiid\"Midden-Australyske westelijke tiid*Midden-Austr" + + "alyske westelijke standerttiid(Midden-Australyske westelijke simmertiid" + + "\x15East-Australyske tiid\x1dEast-Australyske standerttiid\x1bEast-Austr" + + "alyske simmertiid\x15West-Australyske tiid\x1dWest-Australyske standertt" + + "iid\x1bWest-Australyske simmertiid\x15Azerbeidzjaanske tiid\x1dAzerbeidz" + + "jaanske standerttiid\x1bAzerbeidzjaanske simmertiid\x0bAzoren-tiid\x13Az" + + "oren-standerttiid\x11Azoren-simmertiid\x0eBengalese tiid\x16Bengalese st" + + "anderttiid\x14Bengalese simmertiid\x0fBhutaanske tiid\x11Boliviaanske ti" + + "id\x12Brazyljaanske tiid\x1aBrazyljaanske standerttiid\x18Brazyljaanske " + + "simmertiid\x0dBruneise tiid\x11Kaapverdyske tiid\x19Kaapverdyske stander" + + "ttiid\x17Kaapverdyske simmertiid\x0dChamorro-tiid\x0cChatham tiid\x14Cha" + + "tham standerttiid\x12Chatham simmertiid\x0eSileenske tiid\x16Sileenske s" + + "tanderttiid\x14Sileenske simmertiid\x0dSineeske tiid\x15Sineeske stander" + + "ttiid\x13Sineeske simmertiid\x10Tsjojbalsan tiid\x18Tsjojbalsan standert" + + "tiid\x16Tsjojbalsan simmertiid\x13Krysteilânske tiid\x13Kokoseilânske ti" + + "id\x12Kolombiaanske tiid\x1aKolombiaanske standerttiid\x18Kolombiaanske " + + "simmertiid\x11Cookeilânse tiid\x19Cookeilânse standerttiid\x1dCookeilâns" + + "e halve simmertiid\x0eKubaanske tiid\x16Kubaanske standerttiid\x14Kubaan" + + "ske simmertiid\x0aDavis tiid\x17Dumont-d’Urville tiid\x12East-Timorese t" + + "iid\x14Peaskeeilânske tiid\x1cPeaskeeilânske standerttiid\x1aPeaskeeilân" + + "ske simmertiid\x12Ecuadoraanske tiid\x16Midden-Europeeske tiid\x1eMidden" + + "-Europeeske standerttiid\x1cMidden-Europeeske simmertiid\x14East-Europee" + + "ske tiid\x1cEast-Europeeske standerttiid\x1aEast-Europeeske simmertiid" + + "\x14West-Europeeske tiid\x1cWest-Europeeske standerttiid\x1aWest-Europee" + + "ske simmertiid\x16Falklâneilânske tiid\x1eFalklâneilânske standerttiid" + + "\x1cFalklâneilânske simmertiid\x0cFijyske tiid\x14Fijyske standerttiid" + + "\x12Fijyske simmertiid\x15Frâns-Guyaanske tiid%Frânske Súdlike en Antarc" + + "tyske tiid\x17Galapagoseilânske tiid\x15Gambiereilânske tiid\x0eGeorgysk" + + "e tiid\x16Georgyske standerttiid\x14Georgyske simmertiid\x15Gilberteilân" + + "ske tiid\x13Greenwich Mean Time\x16East-Groenlânske tiid\x1eEast-Groenlâ" + + "nske standerttiid\x1cEast-Groenlânske simmertiid\x16West-Groenlânske tii" + + "d\x1eWest-Groenlânske standerttiid\x1cWest-Groenlânske simmertiid\x14Gua" + + "mese standerttiid\x11Golf standerttiid\x0eGuyaanske tiid\x16Hawaii-Aleoe" + + "tyske tiid\x1eHawaii-Aleoetyske standerttiid\x1cHawaii-Aleoetyske simmer" + + "tiid\x0fHongkongse tiid\x17Hongkongse standerttiid\x15Hongkongse simmert" + + "iid\x09Hovd tiid\x11Hovd standerttiid\x0fHovd simmertiid\x0eYndiaaske ti" + + "id\x13Yndyske Oceaan-tiid\x10Yndochinese tiid\x19Sintraal-Yndonezyske ti" + + "id\x15East-Yndonezyske tiid\x15West-Yndonezyske tiid\x0dIraanske tiid" + + "\x15Iraanske standerttiid\x13Iraanske simmertiid\x0dIrkoetsk-tiid\x15Irk" + + "oetsk-standerttiid\x13Irkoetsk-simmertiid\x10Israëlyske tiid\x18Israëlys" + + "ke standerttiid\x16Israëlyske simmertiid\x0dJapanske tiid\x15Japanske st" + + "anderttiid\x13Japanske simmertiid\x1ePetropavlovsk-Kamtsjatski-tiid&Petr" + + "opavlovsk-Kamtsjatski-standerttiid$Petropavlovsk-Kamtsjatski-simmertiid" + + "\x12East-Kazachse tiid\x12West-Kazachse tiid\x0fKoreaanske tiid\x17Korea" + + "anske standerttiid\x15Koreaanske simmertiid\x0dKosraese tiid\x10Krasnoja" + + "rsk-tiid\x18Krasnojarsk-standerttiid\x16Krasnojarsk-simmertiid\x0fKirgiz" + + "yske tiid\x0aLanka-tiid\x13Line-eilânske tiid\x18Lord Howe-eilânske tiid" + + " Lord Howe-eilânske standerttiid\x1eLord Howe-eilânske simmertiid\x0cMac" + + "ause tiid\x14Macause standerttiid\x12Macause simmertiid\x18Macquarie-eil" + + "ânske tiid\x0cMagadan-tiid\x14Magadan-standerttiid\x12Magadan-simmertii" + + "d\x0fMaleisyske tiid\x0fMaldivyske tiid\x17Marquesaseilânske tiid\x16Mar" + + "shalleilânske tiid\x12Mauritiaanske tiid\x1aMauritiaanske standerttiid" + + "\x18Mauritiaanske simmertiid\x0bMawson tiid\x10Ulaanbaatar tiid\x18Ulaan" + + "baatar standerttiid\x16Ulaanbaatar simmertiid\x0bMoskou-tiid\x13Moskou-s" + + "tanderttiid\x11Moskou-simmertiid\x0fMyanmarese tiid\x10Nauruaanske tiid" + + "\x0dNepalese tiid\x14Nij-Kaledonyske tiid\x1cNij-Kaledonyske standerttii" + + "d\x1aNij-Kaledonyske simmertiid\x13Nij-Seelânske tiid\x1bNij-Seelânske s" + + "tanderttiid\x19Nij-Seelânske simmertiid\x14Newfoundlânske-tiid\x1cNewfou" + + "ndlânske-standerttiid\x1aNewfoundlânske-simmertiid\x0bNiuese tiid\x15Nor" + + "folkeilânske tiid\x18Fernando de Noronha-tiid Fernando de Noronha-stande" + + "rttiid\x1eFernando de Noronha-simmertiid\x19Noardlike Mariaanske tiid" + + "\x10Novosibirsk-tiid\x18Novosibirsk-standerttiid\x16Novosibirsk-simmerti" + + "id\x09Omsk-tiid\x11Omsk-standerttiid\x0fOmsk-simmertiid\x11Pakistaanske " + + "tiid\x19Pakistaanske standerttiid\x17Pakistaanske simmertiid\x0cBelause " + + "tiid\x19Papoea-Nij-Guineeske tiid\x13Paraguayaanske tiid\x1bParaguayaans" + + "ke standerttiid\x19Paraguayaanske simmertiid\x0fPeruaanske tiid\x17Perua" + + "anske standerttiid\x15Peruaanske simmertiid\x0fFilipijnse tiid\x17Filipi" + + "jnse standerttiid\x15Filipijnse simmertiid\x15Phoenixeilânske tiid\x1dSa" + + "int Pierre en Miquelon-tiid%Saint Pierre en Miquelon-standerttiid#Saint " + + "Pierre en Miquelon-simmertiid\x17Pitcairneillânske tiid\x0cPohnpei tiid" + + "\x0eQyzylorda-tiid\x16Qyzylorda-standerttiid\x14Qyzylorda-simmertiid\x0f" + + "Réunionse tiid\x0cRothera tiid\x0dSachalin-tiid\x15Sachalin-standerttiid" + + "\x13Sachalin-simmertiid\x0bSamara-tiid\x13Samara-standerttiid\x11Samara-" + + "simmertiid\x0fSamoaanske tiid\x17Samoaanske standerttiid\x15Samoaanske s" + + "immertiid\x0eSeychelse tiid\x18Singaporese standerttiid\x16Salomonseilân" + + "ske tiid\x13Sûd-Georgyske tiid\x10Surinaamske tiid\x0aSyowa tiid\x11Tahi" + + "tiaanske tiid\x0bTaipei tiid\x13Taipei standerttiid\x11Taipei simmertiid" + + "\x0fTadzjiekse tiid\x16Tokelau-eilânske tiid\x0fTongaanske tiid\x17Tonga" + + "anske standerttiid\x15Tongaanske simmertiid\x0cChuukse tiid\x0fTurkmeens" + + "e tiid\x17Turkmeense standerttiid\x15Turkmeense simmertiid\x11Tuvaluaans" + + "ke tiid\x12Uruguayaanske tiid\x1aUruguayaanske standerttiid\x18Uruguayaa" + + "nske simmertiid\x0eOezbeekse tiid\x16Oezbeekse standerttiid\x14Oezbeekse" + + " simmertiid\x12Vanuatuaanske tiid\x1aVanuatuaanske standerttiid\x18Vanua" + + "tuaanske simmertiid\x12Fenezolaanske tiid\x10Vladivostok-tiid\x18Vladivo" + + "stok-standerttiid\x16Vladivostok-simmertiid\x0eWolgograd-tiid\x16Wolgogr" + + "ad-standerttiid\x14Wolgograd-simmertiid\x0bVostok tiid\x13Wake-eilânske " + + "tiid\x17Wallis en Futunase tiid\x0dJakoetsk-tiid\x15Jakoetsk-standerttii" + + "d\x13Jakoetsk-simmertiid\x14Jekaterinenburg-tiid\x1cJekaterinenburg-stan" + + "derttiid\x1aJekaterinenburg-simmertiid\x06Amshir\x08Baramhat\x07Bashans" + + "\x06Kislev\x05Tevet\x04Adar\x05Nisan\x05Sivan\x02Av\x04Saf.\x06Rab. I" + + "\x07Rab. II\x04Raj.\x04Ram.\x05Safar\x05Rajab\x07Ramadan\x06morgen\x0aov" + + "ermorgen" + +var bucket39 string = "" + // Size: 13166 bytes + "\x02RB\x03Ean\x05Feabh\x06Márta\x03Aib\x04Beal\x05Meith\x05Iúil\x04Lún" + + "\x06MFómh\x06DFómh\x04Samh\x04Noll\x07Eanáir\x07Feabhra\x08Aibreán\x09Be" + + "altaine\x09Meitheamh\x07Lúnasa\x0eMeán Fómhair\x11Deireadh Fómhair\x07Sa" + + "mhain\x07Nollaig\x04Domh\x04Luan\x06Máirt\x05Céad\x05Déar\x05Aoine\x04Sa" + + "th\x0dDé Domhnaigh\x09Dé Luain\x0aDé Máirt\x0dDé Céadaoin\x0aDéardaoin" + + "\x0aDé hAoine\x0cDé Sathairn\x0b1ú ráithe\x0b2ú ráithe\x0b3ú ráithe\x0b4" + + "ú ráithe\x04r.n.\x04i.n.\x0eRoimh Chríost\x0fRoimh Chomh-Ré\x0bAnno Dom" + + "ini\x08Comh-Ré\x02RC\x03RCR\x02AD\x02CR\x03Ré\x03ré\x06Bliain\x08anuraid" + + "h\x0ean bhliain seo\x17an bhliain seo chugainn\x14i gceann {0} bhliain" + + "\x13i gceann {0} bliana\x14i gceann {0} mbliana\x13i gceann {0} bliain" + + "\x13{0} bhliain ó shin\x12{0} bliana ó shin\x13{0} mbliana ó shin\x12{0}" + + " bliain ó shin\x0ban bhl. seo\x14an bhl. seo chugainn\x10i gceann {0} bl" + + ".\x11i gceann {0} bhl.\x11i gceann {0} mbl.\x10{0} bhl. ó shin\x0f{0} bl" + + ". ó shin\x10{0} mbl. ó shin\x09+{0} bhl.\x08+{0} bl.\x09+{0} mbl.\x09-{0" + + "} bhl.\x08-{0} bl.\x09-{0} mbl.\x07Ráithe\x14an ráithe seo caite\x0ean r" + + "áithe seo\x17an ráithe seo chugainn\x14i gceann {0} ráithe\x13{0} ráith" + + "e ó shin\x07ráithe\x06+{0} R\x06-{0} R\x03Mí\x11an mhí seo caite\x0ban m" + + "hí seo\x14an mhí seo chugainn\x11i gceann {0} mhí\x10i gceann {0} mí\x10" + + "{0} mhí ó shin\x0f{0} mí ó shin\x03mí\x09+{0} mhí\x08+{0} mí\x09-{0} mhí" + + "\x08-{0} mí\x09Seachtain\x17an tseachtain seo caite\x11an tseachtain seo" + + "\x1aan tseachtain seo chugainn\x16i gceann {0} seachtain\x17i gceann {0}" + + " sheachtain\x17i gceann {0} seachtaine\x15{0} seachtain ó shin\x16{0} sh" + + "eachtain ó shin\x16{0} seachtaine ó shin\x0dseachtain {0}\x05scht.\x13an" + + " tscht. seo caite\x0dan tscht. seo\x16an tscht. seo chugainn\x12i gceann" + + " {0} scht.\x13i gceann {0} shcht.\x11{0} scht. ó shin\x0a+{0} scht.\x0a-" + + "{0} scht.\x12Seachtain den mhí\x0b7n den mhí\x03Lá\x0aarú inné\x05inné" + + "\x05inniu\x08amárach\x0darú amárach\x10i gceann {0} lá\x0f{0} lá ó shin" + + "\x08+{0} lá\x08-{0} lá\x0fLá den bhliain\x0clá den bhl.\x11Lá na seachta" + + "ine\x0blá den t7n\x12Lá oibre den mhí\x11lá oib. den mhí\x15an Domhnach " + + "seo caite\x0fan Domhnach seo\x18an Domhnach seo chugainn\x1a{0} seachtai" + + "n ón Domhnach\x1b{0} sheachtain ón Domhnach\x1b{0} seachtaine ón Domhnac" + + "h#Dé Domhnaigh {0} seachtain ó shin$Dé Domhnaigh {0} sheachtain ó shin$D" + + "é Domhnaigh {0} seachtaine ó shin\x12an Domh. seo caite\x0can Domh. seo" + + "\x15an Domh. seo chugainn\x17{0} seachtain ón Domh.\x18{0} sheachtain ón" + + " Domh.\x18{0} seachtaine ón Domh.\x1fDé Domh. {0} seachtain ó shin Dé Do" + + "mh. {0} sheachtain ó shin Dé Domh. {0} seachtaine ó shin\x11an Domh seo " + + "caite\x0ban Domh seo\x11an Domh seo chug.\x0a+{0} Domh.\x0b+{0} Dhomh." + + "\x0b+{0} nDomh.\x11{0} Domh. ó shin\x12{0} Dhomh. ó shin\x12{0} nDomh. ó" + + " shin\x11an Luan seo caite\x0ban Luan seo\x14an Luan seo chugainn\x16{0}" + + " seachtain ón Luan\x17{0} sheachtain ón Luan\x17{0} seachtaine ón Luan" + + "\x1fDé Luain {0} seachtain ó shin Dé Luain {0} sheachtain ó shin Dé Luai" + + "n {0} seachtaine ó shin\x11an Luan seo chug.\x09+{0} Luan\x10{0} Luan ó " + + "shin\x14an Mháirt seo caite\x0ean Mháirt seo\x17an Mháirt seo chugainn" + + "\x18{0} seachtain ón Máirt\x19{0} sheachtain ón Máirt\x19{0} seachtaine " + + "ón Máirt Dé Máirt {0} seachtain ó shin!Dé Máirt {0} sheachtain ó shin!D" + + "é Máirt {0} seachtaine ó shin\x14an Mháirt seo chug.\x0c+{0} Mháirt\x0b" + + "+{0} Máirt\x13{0} Mháirt ó shin\x12{0} Máirt ó shin\x17an Chéadaoin seo " + + "caite\x11an Chéadaoin seo\x1aan Chéadaoin seo chugainn\x1c{0} seachtain " + + "ón Chéadaoin\x1d{0} sheachtain ón Chéadaoin\x1d{0} seachtaine ón Chéada" + + "oin#Dé Céadaoin {0} seachtain ó shin$Dé Céadaoin {0} sheachtain ó shin$D" + + "é Céadaoin {0} seachtaine ó shin\x14an Chéad. seo caite\x0ean Chéad. se" + + "o\x17an Chéad. seo chugainn\x13an Chéad seo chug.\x0f+{0} Chéadaoin\x0f+" + + "{0} gCéadaoin\x0e+{0} Céadaoin\x16{0} Chéadaoin ó shin\x16{0} gCéadaoin " + + "ó shin\x15{0} Céadaoin ó shin\x17an Déardaoin seo caite\x11an Déardaoin" + + " seo\x1aan Déardaoin seo chugainn\x1c{0} seachtain ón Déardaoin\x1d{0} s" + + "heachtain ón Déardaoin\x1d{0} seachtaine ón Déardaoin Déardaoin {0} seac" + + "htain ó shin!Déardaoin {0} sheachtain ó shin!Déardaoin {0} seachtaine ó " + + "shin\x13an Déar. seo caite\x0dan Déar. seo\x16an Déar. seo chugainn\x13a" + + "n Déar. seo chug.\x0f+{0} Déardaoin\x10+{0} Dhéardaoin\x10+{0} nDéardaoi" + + "n\x16{0} Déardaoin ó shin\x17{0} Dhéardaoin ó shin\x17{0} nDéardaoin ó s" + + "hin\x12an Aoine seo caite\x0can Aoine seo\x15an Aoine seo chugainn\x17{0" + + "} seachtain ón Aoine\x18{0} sheachtain ón Aoine\x18{0} seachtaine ón Aoi" + + "ne Dé hAoine {0} seachtain ó shin!Dé hAoine {0} sheachtain ó shin!Dé hAo" + + "ine {0} seachtaine ó shin\x12an Aoine seo chug.\x0a+{0} Aoine\x11{0} Aoi" + + "ne ó shin\x14an Satharn seo caite\x0ean Satharn seo\x17an Satharn seo ch" + + "ugainn\x19{0} seachtain ón Satharn\x1a{0} sheachtain ón Satharn\x1a{0} s" + + "eachtaine ón Satharn\"Dé Sathairn {0} seachtain ó shin#Dé Sathairn {0} s" + + "heachtain ó shin#Dé Sathairn {0} seachtaine ó shin\x12an Sath. seo caite" + + "\x0can Sath. seo\x15an Sath. seo chugainn\x11an Sath seo caite\x0ban Sat" + + "h seo\x11an Sath seo chug.\x0c+{0} Satharn\x0d+{0} Shatharn\x13{0} Satha" + + "rn ó shin\x14{0} Shatharn ó shin\x04Uair\x0ban uair seo\x1bi gceann {0} " + + "uair an chloig\x1di gceann {0} huaire an chloig\x1ei gceann {0} n-uaire " + + "an chloig\x1a{0} uair an chloig ó shin\x1c{0} huaire an chloig ó shin" + + "\x1d{0} n-uaire an chloig ó shin\x04uair\x11i gceann {0} uair\x13i gcean" + + "n {0} huaire\x14i gceann {0} n-uaire\x10{0} uair ó shin\x12{0} huaire ó " + + "shin\x13{0} n-uaire ó shin\x06+{0} u\x06-{0} u\x09Nóiméad\x10an nóiméad " + + "seo\x16i gceann {0} nóiméad\x15{0} nóiméad ó shin\x06nóim.\x13i gceann {" + + "0} nóim.\x12{0} nóim. ó shin\x06+{0} n\x06-{0} n\x07Soicind\x05anois\x14" + + "i gceann {0} soicind\x15i gceann {0} shoicind\x13{0} soicind ó shin\x14{" + + "0} shoicind ó shin\x05soic.\x12i gceann {0} soic.\x13i gceann {0} shoic." + + "\x11{0} soic. ó shin\x12{0} shoic. ó shin\x09Crios Ama\x05crios\x14Am Ui" + + "líoch Lárnach\x19Am Samhraidh na Breataine\x03ASB\x1dAm Caighdéanach na " + + "hÉireann\x04ACÉ\x07Am Acre\x15Am Caighdeánach Acre\x11Am Samhraidh Acre" + + "\x14Am na hAfganastáine\x13Am Lár na hAfraice\x17Am Oirthear na hAfraice" + + "\"Am Caighdeánach na hAfraice Theas\x16Am Iarthar na hAfraice$Am Caighde" + + "ánach Iarthar na hAfraice Am Samhraidh Iarthar na hAfraice\x09Am Alasca" + + "\x17Am Caighdeánach Alasca\x13Am Samhraidh Alasca\x09Am Almaty\x17Am Cai" + + "ghdeánach Almaty\x13Am Samhraidh Almaty\x10Am na hAmasóine\x1eAm Caighde" + + "ánach na hAmasóine\x1aAm Samhraidh na hAmasóine\x0bAm Lárnach\x19Am Cai" + + "ghdeánach Lárnach\x15Am Samhraidh Lárnach\x0dAm an Oirthir\x1bAm Caighde" + + "ánach an Oirthir\x17Am Samhraidh an Oirthir\x0fAm na Sléibhte\x1dAm Cai" + + "ghdeánach na Sléibhte\x19Am Samhraidh na Sléibhte\x15Am an Aigéin Chiúin" + + "#Am Caighdeánach an Aigéin Chiúin\x1fAm Samhraidh an Aigéin Chiúin\x03AA" + + "C\x04ACAC\x04ASAC\x09Am Anadyr\x17Am Caighdeánach Anadyr\x13Am Samhraidh" + + " Anadyr\x07Am Apia\x15Am Caighdeánach Apia\x11Am Samhraidh Apia\x08Am Aq" + + "tau\x16Am Caighdeánach Aqtau\x12Am Samhraidh Aqtau\x09Am Aqtobe\x17Am Ca" + + "ighdeánach Aqtobe\x13Am Samhraidh Aqtobe\x0dAm na hAraibe\x1bAm Caighdeá" + + "nach na hAraibe\x17Am Samhraidh na hAraibe\x12Am na hAirgintíne Am Caigh" + + "deánach na hAirgintíne\x1cAm Samhraidh na hAirgintíne\x1aAm Iarthar na h" + + "Airgintíne(Am Caighdeánach Iarthar na hAirgintíne$Am Samhraidh Iarthar n" + + "a hAirgintíne\x10Am na hAirméine\x1eAm Caighdeánach na hAirméine\x1aAm S" + + "amhraidh na hAirméine\x10Am an Atlantaigh\x1eAm Caighdeánach an Atlantai" + + "gh\x1aAm Samhraidh an Atlantaigh\x15Am Lár na hAstráile#Am Caighdeánach " + + "Lár na hAstráile\x1fAm Samhraidh Lár na hAstráile\x1eAm Mheániarthar na " + + "hAstráile,Am Caighdeánach Mheániarthar na hAstráile(Am Samhraidh Mheánia" + + "rthar na hAstráile\x19Am Oirthear na hAstráile'Am Caighdeánach Oirthear " + + "na hAstráile#Am Samhraidh Oirthear na hAstráile\x18Am Iarthar na hAstrái" + + "le&Am Caighdeánach Iarthar na hAstráile\"Am Samhraidh Iarthar na hAstrái" + + "le\x15Am na hAsarbaiseáine#Am Caighdeánach na hAsarbaiseáine\x1fAm Samhr" + + "aidh na hAsarbaiseáine\x0cAm na nAsór\x1aAm Caighdeánach na nAsór\x16Am " + + "Samhraidh na nAsór\x13Am na Banglaidéise!Am Caighdeánach na Banglaidéise" + + "\x1dAm Samhraidh na Banglaidéise\x0fAm na Bútáine\x0dAm na Bolaive\x0dAm" + + " Bhrasília\x1bAm Caighdeánach Bhrasília\x17Am Samhraidh Bhrasília\x16Am " + + "Brúiné Darasalám\x0dAm Rinn Verde\x1bAm Caighdeánach Rinn Verde\x17Am Sa" + + "mhraidh Rinn Verde\x13Am Stáisiún Casey\x1bAm Caighdeánach Seamórach\x0a" + + "Am Chatham\x18Am Caighdeánach Chatham\x14Am Samhraidh Chatham\x0aAm na S" + + "ile\x18Am Caighdeánach na Sile\x14Am Samhraidh na Sile\x0bAm na Síne\x19" + + "Am Caighdeánach na Síne\x15Am Samhraidh na Síne\x0dAm Choibalsan\x1bAm C" + + "aighdeánach Choibalsan\x17Am Samhraidh Choibalsan\x14Am Oileán na Nollag" + + "\x11Am Oileáin Cocos\x0eAm na Colóime\x1cAm Caighdeánach na Colóime\x18A" + + "m Samhraidh na Colóime\x10Am Oileáin Cook\x1eAm Caighdeánach Oileáin Coo" + + "k Am Leathshamhraidh Oileáin Cook\x09Am Chúba\x17Am Caighdeánach Chúba" + + "\x13Am Samhraidh Chúba\x13Am Stáisiún Davis Am Stáisiún Dumont-d’Urville" + + "\x12Am Thíomór Thoir\x14Am Oileán na Cásca\"Am Caighdeánach Oileán na Cá" + + "sca\x1eAm Samhraidh Oileán na Cásca\x0cAm Eacuadór\x11Am Lár na hEorpa" + + "\x1fAm Caighdeánach Lár na hEorpa\x1bAm Samhraidh Lár na hEorpa\x03CET" + + "\x04CEST\x15Am Oirthear na hEorpa#Am Caighdeánach Oirthear na hEorpa\x1f" + + "Am Samhraidh Oirthear na hEorpa\x03EET\x04EEST\x1aAm Chianoirthear na hE" + + "orpa\x14Am Iarthar na hEorpa\"Am Caighdeánach Iarthar na hEorpa\x1eAm Sa" + + "mhraidh Iarthar na hEorpa\x03WET\x04WEST\x17Am Oileáin Fháclainne%Am Cai" + + "ghdeánach Oileáin Fháclainne!Am Samhraidh Oileáin Fháclainne\x0aAm Fhids" + + "í\x18Am Caighdeánach Fhidsí\x14Am Samhraidh Fhidsí\x15Am Ghuáin na Frai" + + "nce+Am Chríocha Francacha Deisceart an Domhain\x16Am Oileáin Galápagos" + + "\x0bAm Ghambier\x0eAm na Seoirsia\x1cAm Caighdeánach na Seoirsia\x18Am S" + + "amhraidh na Seoirsia\x0fAm Chireabaití\x12Meán-Am Greenwich\x03MAG\x1aAm" + + " Oirthear na Graonlainne(Am Caighdeánach Oirthear na Graonlainne$Am Samh" + + "raidh Oirthear na Graonlainne\x19Am Iarthar na Graonlainne'Am Caighdeána" + + "ch Iarthar na Graonlainne#Am Samhraidh Iarthar na Graonlainne\x16Am Caig" + + "hdeánach Ghuam\x1fAm Caighdeánach na Murascaille\x0dAm na Guáine\x13Am H" + + "aváí-Ailiúit!Am Caighdeánach Haváí-Ailiúit\x1dAm Samhraidh Haváí-Ailiúit" + + "\x0cAm Hong Cong\x1aAm Caighdeánach Hong Cong\x16Am Samhraidh Hong Cong" + + "\x07Am Hovd\x15Am Caighdeánach Hovd\x11Am Samhraidh Hovd\x1aAm Caighdeán" + + "ach na hIndia\x16Am an Aigéin Indiaigh\x10Am na hInd-Síne\x16Am Lár na h" + + "Indinéise\x1aAm Oirthear na hIndinéise\x19Am Iarthar na hIndinéise\x0fAm" + + " na hIaráine\x1dAm Caighdeánach na hIaráine\x19Am Samhraidh na hIaráine" + + "\x0aAm Irkutsk\x18Am Caighdeánach Irkutsk\x14Am Samhraidh Irkutsk\x0aAm " + + "Iosrael\x18Am Caighdeánach Iosrael\x14Am Samhraidh Iosrael\x0fAm na Seap" + + "áine\x1dAm Caighdeánach na Seapáine\x19Am Samhraidh na Seapáine\x1cAm P" + + "hetropavlovsk-Kamchatski*Am Caighdeánach Phetropavlovsk-Kamchatski&Am Sa" + + "mhraidh Phetropavlovsk-Kamchatski\x1bAm Oirthear na Casacstáine\x1aAm Ia" + + "rthar na Casacstáine\x0dAm na Cóiré\x1bAm Caighdeánach na Cóiré\x17Am Sa" + + "mhraidh na Cóiré\x09Am Kosrae\x0eAm Krasnoyarsk\x1cAm Caighdeánach Krasn" + + "oyarsk\x18Am Samhraidh Krasnoyarsk\x13Am na Cirgeastáine\x0eAm Shrí Lanc" + + "a\x14Am Oileáin na Líne\x0cAm Lord Howe\x1aAm Caighdeánach Lord Howe\x16" + + "Am Samhraidh Lord Howe\x09Am Mhacao\x17Am Caighdeánach Mhacao\x13Am Samh" + + "raidh Mhacao\x16Am Oileán Mhic Guaire\x0bAm Mhagadan\x19Am Caighdeánach " + + "Mhagadan\x15Am Samhraidh Mhagadan\x0fAm na Malaeisia\x16Am Oileáin Mhail" + + "díve\x18Am na nOileán Marcasach\x14Am Oileáin Marshall\x13Am Oileán Mhui" + + "rís!Am Caighdeánach Oileán Mhuirís\x1dAm Samhraidh Oileán Mhuirís\x14Am " + + "Stáisiún Mawson\x1cAm Iarthuaisceart Mheicsiceo*Am Caighdeánach Iarthuai" + + "sceart Mheicsiceo&Am Samhraidh Iarthuaisceart Mheicsiceo!Am Meicsiceach " + + "an Aigéin Chiúin/Am Caighdeánach Meicsiceach an Aigéin Chiúin+Am Samhrai" + + "dh Meicsiceach an Aigéin Chiúin\x0eAm Ulánbátar\x1cAm Caighdeánach Ulánb" + + "átar\x18Am Samhraidh Ulánbátar\x0aAm Mhoscó\x18Am Caighdeánach Mhoscó" + + "\x14Am Samhraidh Mhoscó\x0bAm Mhaenmar\x09Am Nárú\x0aAm Neipeal\x15Am na" + + " Nua-Chaladóine#Am Caighdeánach na Nua-Chaladóine\x1fAm Samhraidh na Nua" + + "-Chaladóine\x15Am na Nua-Shéalainne#Am Caighdeánach na Nua-Shéalainne" + + "\x1fAm Samhraidh na Nua-Shéalainne\x13Am Thalamh an Éisc!Am Caighdeánach" + + " Thalamh an Éisc\x1dAm Samhraidh Thalamh an Éisc\x07Am Niue\x12Am Oileán" + + " Norfolk\x17Am Fhernando de Noronha%Am Caighdeánach Fhernando de Noronha" + + "!Am Samhraidh Fhernando de Noronha\"Am na nOileán Máirianach Thuaidh\x0e" + + "Am Novosibirsk\x1cAm Caighdeánach Novosibirsk\x18Am Samhraidh Novosibirs" + + "k\x07Am Omsk\x15Am Caighdeánach Omsk\x11Am Samhraidh Omsk\x11Am na Pacas" + + "táine\x1fAm Caighdeánach na Pacastáine\x1bAm Samhraidh na Pacastáine\x11" + + "Am Oileáin Palau\x14Am Nua-Ghuine Phapua\x0bAm Pharagua\x19Am Caighdeána" + + "ch Pharagua\x15Am Samhraidh Pharagua\x0bAm Pheiriú\x19Am Caighdeánach Ph" + + "eiriú\x15Am Samhraidh Pheiriú\x1bAm na nOileán Filipíneach)Am Caighdeána" + + "ch na nOileán Filipíneach%Am Samhraidh na nOileán Filipíneach\x18Am Oile" + + "áin an Fhéinics\x1bAm Saint-Pierre-et-Miquelon)Am Caighdeánach Saint-Pi" + + "erre-et-Miquelon%Am Samhraidh Saint-Pierre-et-Miquelon\x13Am Oileán Pitc" + + "airn\x0bAm Phohnpei\x0cAm Pyongyang\x0cAm Qyzylorda\x1aAm Caighdeánach Q" + + "yzylorda\x16Am Samhraidh Qyzylorda\x0bAm Réunion\x15Am Stáisiún Rothera" + + "\x0cAm Shakhalin\x1aAm Caighdeánach Shakhalin\x16Am Samhraidh Shakhalin" + + "\x0aAm Shamara\x18Am Caighdeánach Shamara\x14Am Samhraidh Shamara\x09Am " + + "Shamó\x17Am Caighdeánach Shamó\x13Am Samhraidh Shamó\x0fAm na Séiséal" + + "\x1cAm Caighdeánach Shingeapór\x15Am Oileáin Sholomón\x14Am na Seoirsia " + + "Theas\x0bAm Shuranam\x13Am Stáisiún Syowa\x0dAm Thaihítí\x0aAm Thaipei" + + "\x18Am Caighdeánach Thaipei\x14Am Samhraidh Thaipei\x18Am na Táidsíceast" + + "áine\x14Am Oileáin Tócalá\x09Am Thonga\x17Am Caighdeánach Thonga\x13Am " + + "Samhraidh Thonga\x08Am Chuuk\x18Am na Tuircméanastáine&Am Caighdeánach n" + + "a Tuircméanastáine\"Am Samhraidh na Tuircméanastáine\x0aAm Thuvalu\x09Am" + + " Uragua\x17Am Caighdeánach Uragua\x13Am Samhraidh Uragua\x19Am na hÚisbé" + + "iceastáine'Am Caighdeánach na hÚisbéiceastáine#Am Samhraidh na hÚisbéice" + + "astáine\x0bAm Vanuatú\x19Am Caighdeánach Vanuatú\x15Am Samhraidh Vanuatú" + + "\x0eAm Veiniséala\x0eAm Vladivostok\x1cAm Caighdeánach Vladivostok\x18Am" + + " Samhraidh Vladivostok\x0cAm Volgograd\x1aAm Caighdeánach Volgograd\x16A" + + "m Samhraidh Volgograd\x14Am Stáisiún Vostok\x0fAm Oileán Wake\x17Am Vail" + + "ís agus Futúna\x0bAm Iacútsc\x19Am Caighdeánach Iacútsc\x15Am Samhraidh" + + " Iacútsc\x10Am Yekaterinburg\x1eAm Caighdeánach Yekaterinburg\x1aAm Samh" + + "raidh Yekaterinburg\x02AD" + +var bucket40 string = "" + // Size: 12803 bytes + "\x04Faoi\x05Gearr\x05Màrt\x04Gibl\x05Cèit\x05Ògmh\x04Iuch\x05Lùna\x04Sul" + + "t\x05Dàmh\x04Samh\x05Dùbh\x10dhen Fhaoilleach\x0ddhen Ghearran\x0bdhen M" + + "hàrt\x0ddhen Ghiblean\x0edhen Chèitean\x0ddhen Ògmhios\x0bdhen Iuchar" + + "\x0edhen Lùnastal\x0edhen t-Sultain\x0ddhen Dàmhair\x0edhen t-Samhain" + + "\x0fdhen Dùbhlachd\x0dAm Faoilleach\x0aAn Gearran\x08Am Màrt\x0aAn Gible" + + "an\x0bAn Cèitean\x0dAn t-Ògmhios\x0bAn t-Iuchar\x0cAn Lùnastal\x0cAn t-S" + + "ultain\x0bAn Dàmhair\x0cAn t-Samhain\x0dAn Dùbhlachd\x03DiD\x03DiL\x03Di" + + "M\x03DiC\x03Dia\x03Dih\x03DiS\x03Dò\x02Lu\x03Mà\x02Ci\x02Da\x02hA\x02Sa" + + "\x0cDiDòmhnaich\x07DiLuain\x08DiMàirt\x09DiCiadain\x09DiarDaoin\x08DihAo" + + "ine\x0bDiSathairne\x02C1\x02C2\x02C3\x02C4\x0c1d chairteal\x0c2na cairte" + + "al\x0b3s cairteal\x0c4mh cairteal\x0cRo Chrìosta\x13An dèidh Chrìosta" + + "\x12EEEE, d'mh' MMMM y\x0cd'mh' MMMM y\x0fRo Ph. na Sìne\x08Mínguó\x06Ro" + + " PnS\x04linn\x03li.\x08bliadhna\x0ea-bhòn-uiridh\x09an-uiridh\x0bam blia" + + "dhna\x10an ath-bhliadhna\x16an ceann {0} bhliadhna\x1ban ceann {0} bliad" + + "hnaichean\x15an ceann {0} bliadhna\x15{0} bhliadhna air ais\x1b{0} bhlia" + + "dhnaichean air ais\x14{0} bliadhna air ais\x05blia.\x0dan {0} bhlia.\x0c" + + "an {0} blia.\x0co {0} bhlia.\x0bo {0} blia.\x09a-bh-uir.\x07an-uir.\x06a" + + "m bl.\x0ban ath-bhl.\x08cairteal\x16an cairteal seo chaidh\x0fan cairtea" + + "l seo\x10an ath-chairteal\x16an ceann {0} chairteil\x17an ceann {0} cair" + + "tealan\x15an ceann {0} cairteil\x16o chionn {0} chairteil\x17o chionn {0" + + "} cairtealan\x15o chionn {0} cairteil\x06cairt.\x13an cairt. sa chaidh" + + "\x0dan cairt. seo\x0ean ath-chairt.\x0ean {0} chairt.\x0dan {0} cairt." + + "\x0do {0} chairt.\x0co {0} cairt.\x02c.\x06c. ch.\x09an c. seo\x07ath-ch" + + ".\x07+{0} c.\x07-{0} c.\x05mìos\x13am mìos seo chaidh\x0cam mìos seo\x0d" + + "an ath-mhìos\x14an ceann {0} mhìosa\x14an ceann {0} mìosan\x13an ceann {" + + "0} mìosa\x12{0} mhìos air ais\x13{0} mìosan air ais\x11{0} mìos air ais" + + "\x12am mìos sa chaidh\x0ean {0} mhìos.\x0dan {0} mìos.\x0do {0} mhìos." + + "\x0co {0} mìos.\x04mì.\x08mì. ch.\x0bam mì. seo\x09ath-mhì.\x0a+{0} mhì." + + "\x09+{0} mì.\x0a-{0} mhì.\x09-{0} mì.\x09seachdain\x19an t-seachdain seo" + + " chaidh\x12an t-seachdain seo\x11an ath-sheachdain\x16an ceann {0} seach" + + "dain\x17an ceann {0} sheachdain\x19an ceann {0} seachdainean\x15{0} seac" + + "hdain air ais\x16{0} sheachdain air ais\x18{0} seachdainean air ais\x16a" + + "n t-seachdain aig {0}\x07seachd.\x11seachd. sa chaidh\x10an t-seachd. se" + + "o\x0fan ath-sheachd.\x0fan {0} sheachd.\x0ean {0} seachd.\x0eo {0} sheac" + + "hd.\x0do {0} seachd.\x03sn.\x07sn. ch.\x0can t-sn. seo\x08ath-shn.\x08+{" + + "0} sn.\x08-{0} sn.\x15seachdain dhen mhìos\x0dseachd. mìos\x05latha\x0ca" + + "-bhòin-dè\x06an-dè\x08an-diugh\x0ba-màireach\x08an-earar\x0ban-eararais" + + "\x12an ceann {0} latha\x16an ceann {0} làithean\x11{0} latha air ais\x15" + + "{0} làithean air ais\x03là\x0aan {0} là\x0ban {0} là.\x09o {0} là\x0ao {" + + "0} là.\x08+{0} là\x08-{0} là\x12là dhen bhliadhna\x09là blia.\x07là bl." + + "\x13latha na seachdaine\x0blà seachd.\x07là sn.\x1dlà na seachdaine dhen" + + " mhìos\x11là seachd. mìos\x0dlà sn. mìos\x17DiDòmhnaich seo chaidh\x18Di" + + "Dòmhnaich seo tighinn\x19an ceann {0} DiDòmhnaich\x1aan ceann {0} DhiDòm" + + "hnaich\x19o chionn {0} DiDòmhnaich\x1ao chionn {0} DhiDòmhnaich\x0eDiD. " + + "sa chaidh\x04DiD.\x0fDiD. sa tighinn\x11an ceann {0} DiD.\x12an ceann {0" + + "} DhiD.\x11o chionn {0} DiD.\x12o chionn {0} DhiD.\x08Dò. ch.\x04Dò.\x08" + + "Dò. ti.\x0ban {0} DiD.\x0can {0} DhiD.\x0ao {0} DiD.\x0bo {0} DhiD.\x12D" + + "iLuain seo chaidh\x13DiLuain seo tighinn\x14an ceann {0} DiLuain\x15an c" + + "eann {0} DhiLuain\x14o chionn {0} DiLuain\x15o chionn {0} DhiLuain\x0eDi" + + "L. sa chaidh\x04DiL.\x0fDiL. sa tighinn\x11an ceann {0} DiL.\x12an ceann" + + " {0} DhiL.\x11o chionn {0} DiL.\x12o chionn {0} DhiL.\x07Lu. ch.\x03Lu." + + "\x07Lu. ti.\x0ban {0} DiL.\x0can {0} DhiL.\x0ao {0} DiL.\x0bo {0} DhiL." + + "\x13DiMàirt seo chaidh\x14DiMàirt seo tighinn\x15an ceann {0} DiMàirt" + + "\x16an ceann {0} DhiMàirt\x15o chionn {0} DiMàirt\x16o chionn {0} DhiMài" + + "rt\x0eDiM. sa chaidh\x04DiM.\x0fDiM. sa tighinn\x11an ceann {0} DiM.\x12" + + "an ceann {0} DhiM.\x11o chionn {0} DiM.\x12o chionn {0} DhiM.\x08Mà. ch." + + "\x04Mà.\x08Mà. ti.\x0ban {0} DiM.\x0can {0} DhiM.\x0ao {0} DiM.\x0bo {0}" + + " DhiM.\x14DiCiadain seo chaidh\x15DiCiadain seo tighinn\x16an ceann {0} " + + "DiCiadain\x17an ceann {0} DhiCiadain\x16o chionn {0} DiCiadain\x17o chio" + + "nn {0} DhiCiadain\x0eDiC. sa chaidh\x04DiC.\x0fDiC. sa tighinn\x11an cea" + + "nn {0} DiC.\x12an ceann {0} DhiC.\x11o chionn {0} DiC.\x12o chionn {0} D" + + "hiC.\x07Ci. ch.\x03Ci.\x07Ci. ti.\x0ban {0} DiC.\x0can {0} DhiC.\x0ao {0" + + "} DiC.\x0bo {0} DhiC.\x14DiarDaoin seo chaidh\x15DiarDaoin seo tighinn" + + "\x16an ceann {0} DiarDaoin\x17an ceann {0} DhiarDaoin\x16o chionn {0} Di" + + "arDaoin\x17o chionn {0} DhiarDaoin\x0eDia. sa chaidh\x04Dia.\x0fDia. sa " + + "tighinn\x11an ceann {0} Dia.\x12an ceann {0} Dhia.\x11o chionn {0} Dia." + + "\x12o chionn {0} Dhia.\x07Da. ch.\x03Da.\x07Da. ti.\x0ban {0} Dia.\x0can" + + " {0} Dhia.\x0ao {0} Dia.\x0bo {0} Dhia.\x13DihAoine seo chaidh\x14DihAoi" + + "ne seo tighinn\x15an ceann {0} DihAoine\x16an ceann {0} DhihAoine\x15o c" + + "hionn {0} DihAoine\x16o chionn {0} DhihAoine\x0eDih. sa chaidh\x04Dih." + + "\x0fDih. sa tighinn\x11an ceann {0} Dih.\x12an ceann {0} Dhih.\x11o chio" + + "nn {0} Dih.\x12o chionn {0} Dhih.\x07hA. ch.\x03hA.\x07hA. ti.\x0ban {0}" + + " Dih.\x0can {0} Dhih.\x0ao {0} Dih.\x0bo {0} Dhih.\x16DiSathairne seo ch" + + "aidh\x17DiSathairne seo tighinn\x18an ceann {0} DiSathairne\x19an ceann " + + "{0} DhiSathairne\x18o chionn {0} DiSathairne\x19o chionn {0} DhiSathairn" + + "e\x0eDiS. sa chaidh\x04DiS.\x0fDiS. sa tighinn\x11an ceann {0} DiS.\x12a" + + "n ceann {0} DhiS.\x11o chionn {0} DiS.\x12o chionn {0} DhiS.\x07Sa. ch." + + "\x03Sa.\x07Sa. ti.\x0ban {0} DiS.\x0can {0} DhiS.\x0ao {0} DiS.\x0bo {0}" + + " DhiS.\x03m/f\x0duair a thìde\x17am broinn uair a thìde\x1aan ceann {0} " + + "uair a thìde\x1dan ceann {0} uairean a thìde\x19{0} uair a thìde air ais" + + "\x1c{0} uairean a thìde air ais\x0eam broinn uair\x0ban {0} uair\x0can {" + + "0} uair.\x0ao {0} uair\x0bo {0} uair.\x08san uair\x07+{0} u.\x07-{0} u." + + "\x07mionaid\x11am broinn mionaid\x15an ceann {0} mhionaid\x17an ceann {0" + + "} mionaidean\x14an ceann {0} mionaid\x14{0} mhionaid air ais\x16{0} mion" + + "aidean air ais\x13{0} mionaid air ais\x05mion.\x0fam broinn mion.\x0dan " + + "{0} mhion.\x0can {0} mion.\x0co {0} mhion.\x0bo {0} mion.\x09sa mhion." + + "\x04diog\x0aan-dràsta\x11an ceann {0} diog\x12an ceann {0} dhiog\x13an c" + + "eann {0} diogan\x10{0} diog air ais\x11{0} dhiog air ais\x12{0} diogan a" + + "ir ais\x0ban {0} diog\x0can {0} dhiog\x0can {0} diog.\x0ao {0} diog\x0bo" + + " {0} dhiog\x0bo {0} diog.\x0broinn-tìde\x05roinn$Àm Uile-choitcheann Co-" + + "òrdanaichte\x1aTìde samhraidh Bhreatainn\x15Bun-àm na h-Èireann\x08Àm A" + + "cre\x0cBun-àm Acre\x14Tìde samhraidh Acre\x11Àm Afghanastàin\x12Àm Meadh" + + "an Afraga\x11Àm Afraga an Ear\x11Àm Afraga a Deas\x11Àm Afraga an Iar" + + "\x15Bun-àm Afraga an Iar\x1dTìde Samhraidh Afraga an Iar\x0aÀm Alaska" + + "\x0eBun-àm Alaska\x16Tìde samhraidh Alaska\x0aÀm Almaty\x0eBun-àm Almaty" + + "\x16Tìde samhraidh Almaty\x0bÀm Amasoin\x0fBun-àm Amasoin\x17Tìde samhra" + + "idh Amasoin\x1eÀm Meadhan Aimeireaga a Tuath\"Bun-àm Meadhan Aimeireaga " + + "a Tuath*Tìde samhraidh Meadhan Aimeireaga a Tuath\x1dÀm Aimeireaga a Tua" + + "th an Ear!Bun-àm Aimeireaga a Tuath an Ear)Tìde samhraidh Aimeireaga a T" + + "uath an Ear\x1dÀm Monadh Aimeireaga a Tuath!Bun-àm Monadh Aimeireaga a T" + + "uath)Tìde samhraidh Monadh Aimeireaga a Tuath\x16Àm a’ Chuain Sèimh\x1aB" + + "un-àm a’ Chuain Sèimh\"Tìde samhraidh a’ Chuain Sèimh\x0aÀm Anadyr\x0eBu" + + "n-àm Anadyr\x16Tìde samhraidh Anadyr\x08Àm Apia\x0cBun-àm Apia\x14Tìde s" + + "amhraidh Apia\x09Àm Aqtau\x0dBun-àm Aqtau\x15Tìde samhraidh Aqtau\x0aÀm " + + "Aqtobe\x0eBun-àm Aqtobe\x16Tìde samhraidh Aqtobe\x0bÀm Arabach\x0fBun-àm" + + " Arabach\x17Tìde samhraidh Arabach\x13Àm na h-Argantaine\x17Bun-àm na h-" + + "Argantaine\x1fTìde samhraidh na h-Argantaine\x1cÀm na h-Argantaine Siara" + + "ich Bun-àm na h-Argantaine Siaraich(Tìde samhraidh na h-Argantaine Siara" + + "ich\x0dÀm Airmeinia\x11Bun-àm Airmeinia\x19Tìde samhraidh Airmeinia\x14À" + + "m a’ Chuain Siar\x18Bun-àm a’ Chuain Siar Tìde samhraidh a’ Chuain Siar" + + "\x16Àm Meadhan Astràilia\x1aBun-àm Meadhan Astràilia\"Tìde samhraidh Mea" + + "dhan Astràilia\x1dÀm Meadhan Astràilia an Iar!Bun-àm Meadhan Astràilia a" + + "n Iar)Tìde samhraidh Meadhan Astràilia an Iar\x15Àm Astràilia an Ear\x19" + + "Bun-àm Astràilia an Ear!Tìde samhraidh Astràilia an Ear\x15Àm Astràilia " + + "an Iar\x19Bun-àm Astràilia an Iar!Tìde samhraidh Astràilia an Iar\x11Àm " + + "Asarbaideàin\x15Bun-àm Asarbaideàin\x1dTìde samhraidh Asarbaideàin\x18Àm" + + " nan Eileanan Asorach\x1cBun-àm nan Eileanan Asorach$Tìde samhraidh nan " + + "Eileanan Asorach\x0eÀm Bangladais\x12Bun-àm Bangladais\x1aTìde samhraidh" + + " Bangladais\x0bÀm Butàin\x0dÀm Boilibhia\x0dÀm Bhrasilia\x11Bun-àm Bhras" + + "ilia\x19Tìde samhraidh Bhrasilia\x1dÀm Bhrùnaigh Dàr as-Salàm\x13Àm a’ C" + + "hip Uaine\x17Bun-àm a’ Chip Uaine\x1fTìde samhraidh a’ Chip Uaine\x0aÀm " + + "Chasey\x0cÀm Chamorro\x0bÀm Chatham\x0fBun-àm Chatham\x17Tìde samhraidh " + + "Chatham\x0bÀm na Sile\x0fBun-àm na Sile\x17Tìde samhraidh na Sile\x0cÀm " + + "na Sìne\x10Bun-àm na Sìne\x18Tìde samhraidh na Sìne\x0eÀm Choibalsan\x12" + + "Bun-àm Choibalsan\x1aTìde samhraidh Choibalsan\x15Àm Eilean na Nollaig" + + "\x13Àm Eileanan Chocos\x0dÀm Coloimbia\x11Bun-àm Coloimbia\x19Tìde samhr" + + "aidh Coloimbia\x11Àm Eileanan Cook\x15Bun-àm Eileanan Cook#Leth-thìde sa" + + "mhraidh Eileanan Cook\x09Àm Cùba\x0dBun-àm Cùba\x15Tìde samhraidh Cùba" + + "\x0aÀm Dhavis\x16Àm Dumont-d’Urville\x13Àm Thìomor an Ear\x15Àm Eilean n" + + "a Càisge\x19Bun-àm Eilean na Càisge!Tìde samhraidh Eilean na Càisge\x0dÀ" + + "m Eacuadoir\x1bÀm Meadhan na Roinn-Eòrpa\x1fBun-àm Meadhan na Roinn-Eòrp" + + "a'Tìde samhraidh Meadhan na Roinn-Eòrpa\x1aÀm na Roinn-Eòrpa an Ear\x1eB" + + "un-àm na Roinn-Eòrpa an Ear&Tìde samhraidh na Roinn-Eòrpa an Ear\"Àm na " + + "Roinn-Eòrpa nas fhaide ear\x1aÀm na Roinn-Eòrpa an Iar\x1eBun-àm na Roin" + + "n-Eòrpa an Iar&Tìde samhraidh na Roinn-Eòrpa an Iar\x1cÀm nan Eileanan F" + + "àclannach Bun-àm nan Eileanan Fàclannach(Tìde samhraidh nan Eileanan Fà" + + "clannach\x09Àm Fìdi\x0dBun-àm Fìdi\x15Tìde samhraidh Fìdi\x19Àm Guidheàn" + + "a na Frainge)Àm Deasach agus Antartaigeach na Frainge\x0eÀm Ghalapagos" + + "\x0cÀm Ghambier\x12Àm na Cairtbheile\x16Bun-àm na Cairtbheile\x1eTìde sa" + + "mhraidh na Cairtbheile\x18Àm Eileanan Ghileabairt\x13Greenwich Mean Time" + + "\x18Àm na Graonlainn an Ear\x1cBun-àm na Graonlainn an Ear$Tìde samhraid" + + "h na Graonlainn an Ear\x18Àm na Graonlainn an Iar\x1cBun-àm na Graonlain" + + "n an Iar$Tìde samhraidh na Graonlainn an Iar\x08Àm Guam\x10Àm a’ Chamais" + + "\x0eÀm Guidheàna(Àm nan Eileanan Hawai’i ’s Aleutach,Bun-àm nan Eileanan" + + " Hawai’i ’s Aleutach4Tìde Samhraidh nan Eileanan Hawai’i ’s Aleutach\x0d" + + "Àm Hong Kong\x11Bun-àm Hong Kong\x19Tìde samhraidh Hong Kong\x08Àm Hovd" + + "\x0cBun-àm Hovd\x14Tìde samhraidh Hovd\x12Àm nan Innseachan\x17Àm Cuan n" + + "an Innseachan\x13Àm Sìn-Innseanach\x1aÀm Meadhan nan Innd-Innse\x19Àm na" + + "n Innd-Innse an Ear\x19Àm nan Innd-Innse an Iar\x0bÀm Ioràin\x0fBun-àm I" + + "oràin\x17Tìde samhraidh Ioràin\x0bÀm Irkutsk\x0fBun-àm Irkutsk\x17Tìde S" + + "amhraidh Irkutsk\x0bÀm Iosrael\x0fBun-àm Iosrael\x17Tìde samhraidh Iosra" + + "el\x0fÀm na Seapaine\x13Bun-àm na Seapaine\x1bTìde samhraidh na Seapaine" + + "\x1cÀm Petropavlovsk-Kamchatsky Bun-àm Petropavlovsk-Kamchatsky(Tìde sam" + + "hraidh Petropavlovsk-Kamchatsky\x17Àm Casachstàin an Ear\x17Àm Casachstà" + + "in an Iar\x0cÀm Choirèa\x10Bun-àm Choirèa\x18Tìde samhraidh Choirèa\x0aÀ" + + "m Kosrae\x0fÀm Krasnoyarsk\x13Bun-àm Krasnoyarsk\x1bTìde samhraidh Krasn" + + "oyarsk\x10Àm Cìorgastain\x09Àm Lanca\x14Àm Eileanan Teraina\x0dÀm Lord H" + + "owe\x11Bun-àm Lord Howe\x19Tìde samhraidh Lord Howe\x0cÀm Macàthu\x10Bun" + + "-àm Macàthu\x18Tìde samhraidh Macàthu\x15Àm Eilein MhicGuaire\x0bÀm Maga" + + "dan\x0fBun-àm Magadan\x17Tìde Samhraidh Magadan\x0fÀm Mhalaidhsea\x1bÀm " + + "nan Eileanan Mhaladaibh\x1aÀm Eileanan a’ Mharcais\x16Àm Eileanan Mharsh" + + "all\x1bÀm nan Eileanan Mhoiriseas\x1fBun-àm nan Eileanan Mhoiriseas'Tìde" + + " samhraidh nan Eileanan Mhoiriseas\x0bÀm Mhawson\x1bÀm Mheagsago an Iar-" + + "thuath\x1fBun-àm Mheagsago an Iar-thuath'Tìde samhraidh Mheagsago an Iar" + + "-thuath Àm a’ Chuain Sèimh Mheagsago$Bun-àm a’ Chuain Sèimh Mheagsago,Tì" + + "de samhraidh a’ Chuain Sèimh Mheagsago\x0eÀm Ulan Bator\x12Bun-àm Ulan B" + + "ator\x1aTìde samhraidh Ulan Bator\x0aÀm Mhosgo\x0eBun-àm Mhosgo\x16Tìde " + + "samhraidh Mhosgo\x0cÀm Miànmar\x0aÀm Nabhru\x0bÀm Neapàl\x15Àm Chaillean" + + "n Nuaidh\x19Bun-àm Chailleann Nuaidh!Tìde samhraidh Chailleann Nuaidh" + + "\x14Àm Shealainn Nuaidh\x18Bun-àm Shealainn Nuaidh Tìde samhraidh Sheala" + + "inn Nuaidh\x13Àm Talamh an Èisg\x17Bun-àm Talamh an Èisg\x1fTìde samhrai" + + "dh Talamh an Èisg\x08Àm Niue\x12Àm Eilein Norfolk\x17Àm Fernando de Noro" + + "nha\x1bBun-àm Fernando de Noronha#Tìde Samhraidh Fernando de Noronha#Àm " + + "nan Eileanan Mairianach a Tuath\x0fÀm Novosibirsk\x13Bun-àm Novosibirsk" + + "\x1bTìde samhraidh Novosibirsk\x08Àm Omsk\x0cBun-àm Omsk\x14Tìde samhrai" + + "dh Omsk\x0eÀm Pagastàin\x12Bun-àm Pagastàin\x1aTìde samhraidh Pagastàin" + + "\x0aÀm Palabh\x1bÀm Gini Nuaidh Paputhaiche\x0eÀm Paraguaidh\x12Bun-àm P" + + "araguaidh\x1aTìde samhraidh Paraguaidh\x0aÀm Pearù\x0eBun-àm Pearù\x16Tì" + + "de samhraidh Pearù\x1aÀm nan Eilean Filipineach\x1eBun-àm nan Eilean Fil" + + "ipineach&Tìde samhraidh nan Eilean Filipineach\x14Àm Eileanan Phoenix" + + "\x1eÀm Saint Pierre agus Miquelon\"Bun-àm Saint Pierre agus Miquelon*Tìd" + + "e Samhraidh Saint Pierre agus Miquelon\x15Àm Peit a’ Chàirn\x0bÀm Pohnpe" + + "i\x0eÀm Pyeongyang\x0fÀm Qızılorda\x13Bun-àm Qızılorda\x1bTìde samhraidh" + + " Qızılorda\x0bÀm Reunion\x0bÀm Rothera\x0cÀm Sakhalin\x10Bun-àm Sakhalin" + + "\x18Tìde samhraidh Sakhalin\x0aÀm Samara\x0eBun-àm Samara\x16Tìde samhra" + + "idh Samara\x0bÀm Samotha\x0fBun-àm Samotha\x17Tìde samhraidh Samotha\x1a" + + "Àm nan Eileanan Sheiseall\x0eÀm Singeapòr\x15Àm Eileanan Sholaimh\x13Àm" + + " Seòrsea a Deas\x0cÀm Suranaim\x0aÀm Shyowa\x0aÀm Tahiti\x0aÀm Taipei" + + "\x0eBun-àm Taipei\x16Tìde samhraidh Taipei\x12Àm Taidigeastàin\x0bÀm Tok" + + "elau\x09Àm Tonga\x0dBun-àm Tonga\x15Tìde samhraidh Tonga\x09Àm Chuuk\x12" + + "Àm Turcmanastàin\x16Bun-àm Turcmanastàin\x1eTìde samhraidh Turcmanastài" + + "n\x0bÀm Tubhalu\x0dÀm Uruguaidh\x11Bun-àm Uruguaidh\x19Tìde samhraidh Ur" + + "uguaidh\x0fÀm Usbagastàn\x13Bun-àm Usbagastàn\x1bTìde samhraidh Usbagast" + + "àn\x0bÀm Vanuatu\x0fBun-àm Vanuatu\x17Tìde samhraidh Vanuatu\x12Àm na B" + + "heiniseala\x0fÀm Vladivostok\x13Bun-àm Vladivostok\x1bTìde Samhraidh Vla" + + "divostok\x0dÀm Volgograd\x11Bun-àm Volgograd\x19Tìde samhraidh Volgograd" + + "\x0aÀm Vostok\x0fÀm Eilean Wake\x16Àm Uallas agus Futuna\x0bÀm Yakutsk" + + "\x0fBun-àm Yakutsk\x17Tìde samhraidh Yakutsk\x11Àm Yekaterinburg\x15Bun-" + + "àm Yekaterinburg\x1dTìde samhraidh Yekaterinburg" + +var bucket41 string = "" + // Size: 11473 bytes + "\x1acccc, d 'de' MMMM 'de' Y G\x0d{1} 'ás' {0}\x04xan.\x04feb.\x04mar." + + "\x04abr.\x04maio\x05xuño\x04xul.\x04ago.\x04set.\x04out.\x04nov.\x04dec." + + "\x02x.\x02f.\x02m.\x02a.\x02s.\x02o.\x02n.\x02d.\x07xaneiro\x08febreiro" + + "\x05marzo\x05abril\x05xullo\x06agosto\x08setembro\x07outubro\x08novembro" + + "\x08decembro\x04Xan.\x04Feb.\x04Mar.\x04Abr.\x04Maio\x05Xuño\x04Xul.\x04" + + "Ago.\x04Set.\x04Out.\x04Nov.\x04Dec.\x07Xaneiro\x08Febreiro\x05Marzo\x05" + + "Abril\x05Xullo\x06Agosto\x08Setembro\x07Outubro\x08Novembro\x08Decembro" + + "\x02l.\x02v.\x03do.\x03lu.\x03ma.\x04mé.\x03xo.\x03ve.\x04sá.\x04Dom." + + "\x04Luns\x05Mér.\x04Xov.\x04Ven.\x05Sáb.\x07Domingo\x06Martes\x09Mércore" + + "s\x05Xoves\x06Venres\x07Sábado\x08da noite\x0cda madrugada\x09da mañá" + + "\x0cdo mediodía\x08da tarde\x0amedianoite\x06mañá\x05noite\x13antes da e" + + "ra común\x0dda era común\x04a.C.\x06a.e.c.\x04d.C.\x04e.c.\x0c{0} 'do' {" + + "1}\x08{0}, {1}\x02e.\x03ano\x0co ano pasado\x08este ano\x0eo próximo ano" + + "\x11dentro de {0} ano\x12dentro de {0} anos\x0bhai {0} ano\x0chai {0} an" + + "os\x0aano pasado\x0cseguinte ano\x12o trimestre pasado\x0eeste trimestre" + + "\x14o próximo trimestre\x0ctrim. pasado\x0aeste trim.\x0etrim. seguinte" + + "\x0co mes pasado\x08este mes\x0eo próximo mes\x09m. pasado\x07este m." + + "\x0bm. seguinte\x0fa semana pasada\x0besta semana\x11a próxima semana" + + "\x0ehai {0} semana\x0fhai {0} semanas\x0fa semana do {0}\x0bsem. pasada" + + "\x09esta sem.\x0dsem. seguinte\x0chai {0} sem.\x0dsemana do mes\x0bsem. " + + "do mes\x0asem. do m.\x07antonte\x04onte\x04hoxe\x0cpasadomañá\x0bdía do " + + "ano\x08d. do a.\x0edía da semana\x0cdía da sem.\x0ad. da sem.\x10o domin" + + "go pasado\x0ceste domingo\x12o próximo domingo\x0fhai {0} domingo\x10hai" + + " {0} domingos\x0do dom. pasado\x09este dom.\x0fo próximo dom.\x0chai {0}" + + " dom.\x0bo dom. pas.\x0do próx. dom.\x0ben {0} dom.\x0do luns pasado\x09" + + "este luns\x0fo próximo luns\x12dentro de {0} luns\x0chai {0} luns\x0bo l" + + "uns pas.\x0do próx. luns\x0ben {0} luns\x0fo martes pasado\x0beste marte" + + "s\x11o próximo martes\x0do mar. pasado\x09este mar.\x0fo próximo mar." + + "\x0chai {0} mar.\x0bo mar. pas.\x0do próx. mar.\x0ben {0} mar.\x12o mérc" + + "ores pasado\x0eeste mércores\x14o próximo mércores\x17dentro de {0} mérc" + + "ores\x11hai {0} mércores\x0eo mér. pasado\x0aeste mér.\x10o próximo mér." + + "\x13dentro de {0} mér.\x0dhai {0} mér.\x0co mér. pas.\x0eo próx. mér." + + "\x0cen {0} mér.\x0eo xoves pasado\x0aeste xoves\x10o próximo xoves\x13de" + + "ntro de {0} xoves\x0dhai {0} xoves\x0do xov. pasado\x09este xov.\x0fo pr" + + "óximo xov.\x12dentro de {0} xov.\x0chai {0} xov.\x0bo xov. pas.\x0do pr" + + "óx. xov.\x0ben {0} xov.\x0fo venres pasado\x0beste venres\x11o próximo " + + "venres\x14dentro de {0} venres\x0ehai {0} venres\x0do ven. pasado\x09est" + + "e ven.\x0fo próximo ven.\x12dentro de {0} ven.\x0chai {0} ven.\x0bo ven." + + " pas.\x0do próx. ven.\x0ben {0} ven.\x10o sábado pasado\x0ceste sábado" + + "\x12o próximo sábado\x0fhai {0} sábado\x10hai {0} sábados\x0eo sáb. pasa" + + "do\x0aeste sáb.\x10o próximo sáb.\x0dhai {0} sáb.\x0co sáb. pas.\x0eo pr" + + "óx. sáb.\x0cen {0} sáb.\x09hai {0} h\x0ehai {0} minuto\x0fhai {0} minut" + + "os\x0bhai {0} min\x0fhai {0} segundo\x10hai {0} segundos\x09hai {0} s" + + "\x0cfuso horario\x04fuso\x0fHorario de: {0}\x19Horario de verán de: {0}" + + "\x19Horario estándar de: {0}\x1cHorario universal coordinado\x1cHorario " + + "de verán británico\x1bHorario estándar irlandés\x16Horario de Afganistán" + + "\x1aHorario de África Central\x1bHorario de África Oriental#Horario está" + + "ndar de África do Sur\x1dHorario de África Occidental'Horario estándar d" + + "e África Occidental'Horario de verán de África Occidental\x11Horario de " + + "Alasca\x1bHorario estándar de Alasca\x1bHorario de verán de Alasca\x13Ho" + + "rario do Amazonas\x1dHorario estándar do Amazonas\x1dHorario de verán do" + + " Amazonas\x1eHorario central, Norteamérica(Horario estándar central, Nor" + + "teamérica(Horario de verán central, Norteamérica\x1fHorario do leste, No" + + "rteamérica)Horario estándar do leste, Norteamérica)Horario de verán do l" + + "este, Norteamérica\"Horario da montaña, Norteamérica,Horario estándar da" + + " montaña, Norteamérica,Horario de verán da montaña, Norteamérica#Horario" + + " do Pacífico, Norteamérica-Horario estándar do Pacífico, Norteamérica-Ho" + + "rario de verán do Pacífico, Norteamérica\x11Horario de Anadir\x1bHorario" + + " estándar de Anadir\x1bHorario de verán de Anadir\x0fHorario de Apia\x19" + + "Horario estándar de Apia\x19Horario de verán de Apia\x0eHorario árabe" + + "\x18Horario estándar árabe\x18Horario de verán árabe\x14Horario da Arxen" + + "tina\x1eHorario estándar da Arxentina\x1eHorario de verán da Arxentina" + + "\x1fHorario da Arxentina Occidental)Horario estándar da Arxentina Occide" + + "ntal)Horario de verán da Arxentina Occidental\x12Horario de Armenia\x1cH" + + "orario estándar de Armenia\x1cHorario de verán de Armenia\x15Horario do " + + "Atlántico\x1fHorario estándar do Atlántico\x1fHorario de verán do Atlánt" + + "ico\x1cHorario de Australia Central&Horario estándar de Australia Centra" + + "l&Horario de verán de Australia Central'Horario de Australia Occidental " + + "Central1Horario estándar de Australia Occidental Central1Horario de verá" + + "n de Australia Occidental Central\x1dHorario de Australia Oriental'Horar" + + "io estándar de Australia Oriental'Horario de verán de Australia Oriental" + + "\x1fHorario de Australia Occidental)Horario estándar de Australia Occide" + + "ntal)Horario de verán de Australia Occidental\x16Horario de Acerbaixán H" + + "orario estándar de Acerbaixán Horario de verán de Acerbaixán\x12Horario " + + "das Azores\x1cHorario estándar das Azores\x1cHorario de verán das Azores" + + "\x15Horario de Bangladesh\x1fHorario estándar de Bangladesh\x1fHorario d" + + "e verán de Bangladesh\x11Horario de Bután\x12Horario de Bolivia\x13Horar" + + "io de Brasilia\x1dHorario estándar de Brasilia\x1dHorario de verán de Br" + + "asilia\x1cHorario de Brunei Darussalam\x15Horario de Cabo Verde\x1fHorar" + + "io estándar de Cabo Verde\x1fHorario de verán de Cabo Verde\x1aHorario e" + + "stándar chamorro\x12Horario de Chatham\x1cHorario estándar de Chatham" + + "\x1cHorario de verán de Chatham\x10Horario de Chile\x1aHorario estándar " + + "de Chile\x1aHorario de verán de Chile\x10Horario da China\x1aHorario est" + + "ándar da China\x1aHorario de verán da China\x15Horario de Choibalsan" + + "\x1fHorario estándar de Choibalsan\x1fHorario de verán de Choibalsan\x18" + + "Horario da Illa de Nadal\x17Horario das Illas Cocos\x13Horario de Colomb" + + "ia\x1dHorario estándar de Colombia\x1dHorario de verán de Colombia\x16Ho" + + "rario das Illas Cook Horario estándar das Illas Cook&Horario de verán me" + + "dio das Illas Cook\x0fHorario de Cuba\x19Horario estándar de Cuba\x19Hor" + + "ario de verán de Cuba\x10Horario de Davis\x1dHorario de Dumont-d’Urville" + + "\x16Horario de Timor Leste\x19Horario da Illa de Pascua#Horario estándar" + + " da Illa de Pascua#Horario de verán da Illa de Pascua\x12Horario de Ecua" + + "dor\x19Horario de Europa Central#Horario estándar de Europa Central#Hora" + + "rio de verán de Europa Central\x1aHorario de Europa Oriental$Horario est" + + "ándar de Europa Oriental$Horario de verán de Europa Oriental Horario do" + + " extremo leste europeo\x1cHorario de Europa Occidental&Horario estándar " + + "de Europa Occidental&Horario de verán de Europa Occidental\x1aHorario da" + + "s Illas Malvinas$Horario estándar das Illas Malvinas$Horario de verán da" + + "s Illas Malvinas\x10Horario de Fidxi\x1aHorario estándar de Fidxi\x1aHor" + + "ario de verán de Fidxi\x1bHorario da Güiana Francesa3Horario das Terras " + + "Austrais e Antárticas Francesas\x16Horario das Galápagos\x12Horario de G" + + "ambier\x12Horario de Xeorxia\x1cHorario estándar de Xeorxia\x1cHorario d" + + "e verán de Xeorxia\x19Horario das Illas Gilbert!Horario do meridiano de " + + "Greenwich\x1fHorario de Groenlandia Oriental)Horario estándar de Groenla" + + "ndia Oriental)Horario de verán de Groenlandia Oriental!Horario de Groenl" + + "andia Occidental+Horario estándar de Groenlandia Occidental+Horario de v" + + "erán de Groenlandia Occidental\x1aHorario estándar do Golfo\x12Horario d" + + "a Güiana\x1aHorario de Hawai-Aleutiano$Horario estándar de Hawai-Aleutia" + + "no$Horario de verán de Hawai-Aleutiano\x14Horario de Hong Kong\x1eHorari" + + "o estándar de Hong Kong\x1eHorario de verán de Hong Kong\x0fHorario de H" + + "ovd\x19Horario estándar de Hovd\x19Horario de verán de Hovd\x1aHorario e" + + "stándar da India\x1aHorario do Océano Índico\x14Horario de Indochina\x1c" + + "Horario de Indonesia Central\x1dHorario de Indonesia Oriental\x1fHorario" + + " de Indonesia Occidental\x10Horario de Irán\x1aHorario estándar de Irán" + + "\x1aHorario de verán de Irán\x12Horario de Irkutsk\x1cHorario estándar d" + + "e Irkutsk\x1cHorario de verán de Irkutsk\x11Horario de Israel\x1bHorario" + + " estándar de Israel\x1bHorario de verán de Israel\x11Horario do Xapón" + + "\x1bHorario estándar do Xapón\x1bHorario de verán do Xapón$Horario de Pe" + + "tropávlovsk-Kamchatski.Horario estándar de Petropávlovsk-Kamchatski.Hora" + + "rio de verán de Petropávlovsk-Kamchatski Horario de Casaquistán Oriental" + + "\"Horario de Casaquistán Occidental\x10Horario de Corea\x1aHorario están" + + "dar de Corea\x1aHorario de verán de Corea\x11Horario de Kosrae\x16Horari" + + "o de Krasnoyarsk Horario estándar de Krasnoyarsk Horario de verán de Kra" + + "snoyarsk\x18Horario de Kirguizistán\x1aHorario das Illas da Liña\x14Hora" + + "rio de Lord Howe\x1eHorario estándar de Lord Howe\x1eHorario de verán de" + + " Lord Howe\x19Horario da Illa Macquarie\x12Horario de Magadan\x1cHorario" + + " estándar de Magadan\x1cHorario de verán de Magadan\x13Horario de Malais" + + "ia\x14Horario das Maldivas\x15Horario das Marquesas\x1aHorario das Illas" + + " Marshall\x13Horario de Mauricio\x1dHorario estándar de Mauricio\x1dHora" + + "rio de verán de Mauricio\x11Horario de Mawson\x1eHorario do noroeste de " + + "México(Horario estándar do noroeste de México(Horario de verán do noroes" + + "te de México\x1dHorario do Pacífico mexicano'Horario estándar do Pacífic" + + "o mexicano'Horario de verán do Pacífico mexicano\x16Horario de Ulaanbaat" + + "ar Horario estándar de Ulaanbaatar Horario de verán de Ulaanbaatar\x12Ho" + + "rario de Moscova\x1cHorario estándar de Moscova\x1cHorario de verán de M" + + "oscova\x13Horario de Birmania\x10Horario de Nauru\x10Horario de Nepal" + + "\x19Horario de Nova Caledonia#Horario estándar de Nova Caledonia#Horario" + + " de verán de Nova Caledonia\x18Horario de Nova Zelandia\"Horario estánda" + + "r de Nova Zelandia\"Horario de verán de Nova Zelandia\x14Horario de Terr" + + "anova\x1eHorario estándar de Terranova\x1eHorario de verán de Terranova" + + "\x0fHorario de Niue\x19Horario das Illas Norfolk\x1eHorario de Fernando " + + "de Noronha(Horario estándar de Fernando de Noronha(Horario de verán de F" + + "ernando de Noronha\x16Horario de Novosibirsk Horario estándar de Novosib" + + "irsk Horario de verán de Novosibirsk\x0fHorario de Omsk\x19Horario están" + + "dar de Omsk\x19Horario de verán de Omsk\x15Horario de Paquistán\x1fHorar" + + "io estándar de Paquistán\x1fHorario de verán de Paquistán\x10Horario de " + + "Palau\x1dHorario de Papúa-Nova Guinea\x13Horario de Paraguai\x1dHorario " + + "estándar de Paraguai\x1dHorario de verán de Paraguai\x10Horario do Perú" + + "\x1aHorario estándar do Perú\x1aHorario de verán do Perú\x14Horario de F" + + "ilipinas\x1eHorario estándar de Filipinas\x1eHorario de verán de Filipin" + + "as\x18Horario das Illas Fénix#Horario de Saint-Pierre-et-Miquelon-Horari" + + "o estándar de Saint-Pierre-et-Miquelon-Horario de verán de Saint-Pierre-" + + "et-Miquelon\x13Horario de Pitcairn\x12Horario de Pohnpei\x14Horario de P" + + "yongyang\x13Horario de Reunión\x12Horario de Rothera\x13Horario de Sakha" + + "lin\x1eHorario estándar de Sakhalín\x1dHorario de verán de Sakhalin\x11H" + + "orario de Samara\x1bHorario estándar de Samara\x1bHorario de verán de Sa" + + "mara\x10Horario de Samoa\x1aHorario estándar de Samoa\x1aHorario de verá" + + "n de Samoa\x16Horario das Seychelles\x1dHorario estándar de Singapur\x1a" + + "Horario das Illas Salomón\x19Horario de Xeorxia do Sur\x13Horario de Sur" + + "iname\x10Horario de Syowa\x12Horario de Tahití\x11Horario de Taipei\x1bH" + + "orario estándar de Taipei\x1bHorario de verán de Taipei\x17Horario de Ta" + + "xiquistán\x12Horario de Tokelau\x10Horario de Tonga\x1aHorario estándar " + + "de Tonga\x1aHorario de verán de Tonga\x10Horario de Chuuk\x19Horario de " + + "Turcomenistán#Horario estándar de Turcomenistán#Horario de verán de Turc" + + "omenistán\x11Horario de Tuvalu\x12Horario do Uruguai\x1cHorario estándar" + + " do Uruguai\x1cHorario de verán do Uruguai\x17Horario de Uzbequistán!Hor" + + "ario estándar de Uzbequistán!Horario de verán de Uzbequistán\x12Horario " + + "de Vanuatu\x1cHorario estándar de Vanuatu\x1cHorario de verán de Vanuatu" + + "\x14Horario de Venezuela\x16Horario de Vladivostok Horario estándar de V" + + "ladivostok Horario de verán de Vladivostok\x15Horario de Volgogrado\x1fH" + + "orario estándar de Volgogrado\x1fHorario de verán de Volgogrado\x11Horar" + + "io de Vostok\x14Horario da Illa Wake\x1aHorario de Wallis e Futuna\x12Ho" + + "rario de Iakutsk\x1cHorario estándar de Iakutsk\x1cHorario de verán de I" + + "akutsk\x18Horario de Ekaterimburgo\"Horario estándar de Ekaterimburgo\"H" + + "orario de verán de Ekaterimburgo\x05Lunes\x0aMiércoles\x06Jueves\x07Vier" + + "nes" + +var bucket42 string = "" + // Size: 19769 bytes + "\x07Sunntig\x09Määntig\x09Ziischtig\x08Mittwuch\x09Dunschtig\x07Friitig" + + "\x09Samschtig\x04nam.\x08am Morge\x07zmittag\x0bam Namittag\x06zaabig" + + "\x06znacht\x0cam Vormittag\x08Namittag\x05Morge\x05Aabig\"vor der gewöhn" + + "lichen Zeitrechnung\x1eder gewöhnlichen Zeitrechnung\x08v. d. Z.\x05d. Z" + + ".\x03vdZ\x02dZ\x04Jaar\x0bletzte Jaar\x0adiese Jaar\x0dnächste Jaar\x05M" + + "onet\x0cletzte Monet\x0bdiese Monet\x0enächste Monet\x05Wuche\x0cletzte " + + "Wuche\x0bdiese Wuche\x0enächste Wuche\x0bvorgeschter\x08geschter\x04hüt" + + "\x05moorn\x0aübermoorn\x08Wuchetag\x14Sunntig letzte Wuche\x13Sunntig di" + + "ese Wuche\x16Sunntig nächste Wuche\x16Määntig letzte Wuche\x15Määntig di" + + "ese Wuche\x18Määntig nächste Wuche\x16Ziischtig letzte Wuche\x15Ziischti" + + "g diese Wuche\x18Ziischtig nächste Wuche\x15Mittwuch letzte Wuche\x14Mit" + + "twuch diese Wuche\x17Mittwuch nächste Wuche\x16Dunschtig letzte Wuche" + + "\x15Dunschtig diese Wuche\x18Dunschtig nächste Wuche\x14Friitig letzte W" + + "uche\x13Friitig diese Wuche\x16Friitig nächste Wuche\x16Samschtig letzte" + + " Wuche\x15Samschtig diese Wuche\x18Samschtig nächste Wuche\x0cTageshälft" + + "i\x07Schtund\x07Minuute\x09Acre-Ziit\x13Acre-Schtandardziit\x0fAcre-Summ" + + "erziit\x12Afghanischtan-Ziit\x18Zentralafrikanischi Ziit\x16Oschtafrikan" + + "ischi Ziit\x17Süüdafrikanischi ziit\x17Weschtafrikanischi Ziit!Weschtafr" + + "ikanischi Schtandardziit\x1dWeschtafrikanischi Summerziit\x0bAlaska-Ziit" + + "\x15Alaska-Schtandardziit\x11Alaska-Summerziit\x0bAlmaty-Ziit\x15Almaty-" + + "Schtandardziit\x11Almaty-Summerziit\x0dAmazonas-Ziit\x17Amazonas-Schtand" + + "ardziit\x13Amazonas-Summerziit\x15Amerika-Zentraal Ziit\x1fAmerika-Zentr" + + "aal Schtandardziit\x1bAmerika-Zentraal Summerziit\x17Mitteleuropäischi Z" + + "iit!Mitteleuropäischi Schtandardziit\x1dMitteleuropäischi Summerziit\x16" + + "Oschteuropäischi Ziit Oschteuropäischi Schtandardziit\x1cOschteuropäisch" + + "i Summerziit\x17Weschteuropäischi Ziit!Weschteuropäischi Schtandardziit" + + "\x1dWeschteuropäischi Summerziit\x0dMoskauer Ziit\x17Moskauer Schtandard" + + "ziit\x13Moskauer Summerziit\x09ટૉટ\x0cબાબા\x0fહેટોર\x0fકિયાક\x0cટોબા\x0f" + + "અમશિર\x18બારમ્હાટ\x18બારમુઉડા\x15બાશાન્સ\x0fપાઓના\x0cઈપેપ\x12મેસ્રા" + + "\x0fનાસીઈ\x0aએરા0\x0aએરા1\x1bમેસ્કેરેમ\x15ટેકેમ્ટ\x0fહેડાર\x12તાહસાસ\x09" + + "તેર\x15યેકાતીત\x15મેગાબીટ\x18મિયાઝિયા\x12ગેનબોટ\x0cસેને\x0fહેમલે\x18ને" + + "હાસ્સે\x15પેગુમેન\x11EEEE, d MMMM, G y\x0bd MMMM, G y\x0ad MMM, G y" + + "\x0dd-MM- GGGGG y\x12જાન્યુ\x12ફેબ્રુ\x0fમાર્ચ\x12એપ્રિલ\x06મે\x09જૂન" + + "\x0fજુલાઈ\x0fઑગસ્ટ\x0fસપ્ટે\x0fઑક્ટો\x09નવે\x0cડિસે\x06જા\x06ફે\x06મા" + + "\x03એ\x06જૂ\x06જુ\x03ઑ\x03સ\x03ન\x06ડિ\x1bજાન્યુઆરી\x1bફેબ્રુઆરી\x1bસપ્ટ" + + "ેમ્બર\x15ઑક્ટોબર\x15નવેમ્બર\x18ડિસેમ્બર\x09રવિ\x09સોમ\x0cમંગળ\x09બુધ" + + "\x0cગુરુ\x0fશુક્ર\x09શનિ\x03ર\x06સો\x06મં\x06બુ\x06ગુ\x06શુ\x03શ\x12રવિવ" + + "ાર\x12સોમવાર\x15મંગળવાર\x12બુધવાર\x15ગુરુવાર\x18શુક્રવાર\x12શનિવાર\x1d" + + "1લો ત્રિમાસ\x1d2જો ત્રિમાસ\x1d3જો ત્રિમાસ\x1d4થો ત્રિમાસ\x1eમધ્યરાત્રિ" + + "\x0fસવારે\x0fબપોરે\x0fસાંજે\x12રાત્રે\x16મ.રાત્રિ\x0cસવાર\x0cબપોર\x0cસાં" + + "જ\x12રાત્રિ%ઈસવીસન પૂર્વે/સામાન્ય યુગ પહેલા\x12ઇસવીસન\x1fસામાન્ય યુગ" + + "\x1aઈ.સ.પૂર્વે\x12સા.યુ.પ.\x08ઈ.સ.\x0eસા.યુ.\x0eઇ સ પુ\x06ઇસ\x0fhh:mm:ss" + + " a zzzz\x0chh:mm:ss a z\x0ahh:mm:ss a\x07hh:mm a\x1e{1} એ {0} વાગ્યે\x12" + + "તીશ્રી\x12હેશવાન\x15કિસ્લેવ\x0fતેવેટ\x0fશેવાત\x0eઅદાર I\x0cઅદાર\x0fઅદા" + + "ર II\x0fનિસાન\x0cઈયાર\x0fસિવાન\x0fતામુઝ\x06આવ\x0cઈલુલ\x0fચૈત્ર\x0fવૈશા" + + "ખ\x15જ્યેષ્ઠ\x0cઅષાઢ\x12શ્રાવણ\x0cભાદો\x15અસ્વિના\x15કાર્તિક\x1bઅગ્રેહ" + + "ાના\x09પોષ\x09મહા\x15ફાલ્ગુન\x0cસાકા\x0aમુહ.\x07સફ.\x08રબ.I\x0aરબ. II" + + "\x0cજુમ. I\x0dજુમ. II\x0aરાજ.\x07શા.\x0aરામ.\x0aશાવ.\x19ધુʻલ-ક્યુ.\x13ધુ" + + "ʻલ-એચ.\x15મુહર્રમ\x09સફર\x10રાબીʻ I\x11રાબીʻ II\x14જુમાદા I\x15જુમાદા I" + + "I\x09રજબ\x11શાʻબાન\x0fરમદાન\x12શાવ્વલ#ધુʻલ-ક્વીʻડાહ!ધુʻલ-હિજ્જાહ!ફાર્વાર" + + "્દિન!ઓરડીબેહેશ્ટ\x12ખોરદાદ\x09તિર\x15મોર્દાદ\x15શાહરિવર\x0cમેહર\x0cઅબા" + + "ન\x0cઅઝાર\x09ડેય\x12બાહમેન\x18એસ્ફાન્ડ%આર.ઓ.સી. પહેલાં\x12આર.ઓ.સી.\x09" + + "યુગ\x0cવર્ષ\x19ગયા વર્ષે\x13આ વર્ષે\x1cઆવતા વર્ષે\x19{0} વર્ષમાં#{0} વ" + + "ર્ષ પહેલાં\x04વ.\x1bત્રિમાસિક1છેલ્લું ત્રિમાસિક\x1fઆ ત્રિમાસિક.પછીનું " + + "ત્રિમાસિક({0} ત્રિમાસિકમાં2{0} ત્રિમાસિક પહેલાં\x16ત્રિમાસ.\x0fમહિનો" + + "\x19ગયા મહિને\x13આ મહિને\x1cઆવતા મહિને\x1c{0} મહિનામાં&{0} મહિના પહેલાં" + + "\x04મ.\x1bઅઠવાડિયું\"ગયા અઠવાડિયે\x1cઆ અઠવાડિયે%આવતા અઠવાડિયે%{0} અઠવાડિ" + + "યામાં/{0} અઠવાડિયા પહેલાં){0} નું અઠવાડિયું\x07અઠ.\x15{0} અઠ. માં\x1e{" + + "0} અઠ. પહેલાં4મહિનાનું અઠવાડિયું\x0cદિવસ\"ગયા પરમદિવસે\x12ગઈકાલે\x09આજે" + + "\x18આવતીકાલે\x18પરમદિવસે\x19{0} દિવસમાં#{0} દિવસ પહેલાં\x1fવર્ષનો દિવસ+અ" + + "ઠવાડિયાનો દિવસAમહિનાના અઠવાડિયાનો દિવસ\x1fગયા રવિવારે\x19આ રવિવારે\"આવ" + + "તા રવિવારે\x1f{0} રવિવારમાં){0} રવિવાર પહેલાં!{0} રવિ. પહેલાં\x14ગયા ર" + + "વિ.\x0dઆ રવિ\x16આવતા રવિ\x17+{0} રવિવાર\x1fગયા સોમવારે\x19આ સોમવારે\"આ" + + "વતા સોમવારે\x1f{0} સોમવારમાં){0} સોમવાર પહેલાં!{0} સોમ. પહેલાં\"ગયા મં" + + "ગળવારે\x1cઆ મંગળવારે%આવતા મંગળવારે\"{0} મંગળવારમાં,{0} મંગળવાર પહેલાં$" + + "{0} મંગળ. પહેલાં\x1fગયા બુધવારે\x19આ બુધવારે\"આવતા બુધવારે\x1f{0} બુધવાર" + + "માં){0} બુધવાર પહેલાં!{0} બુધ. પહેલાં\"ગયા ગુરુવારે\x1cઆ ગુરુવારે%આવતા" + + " ગુરુવારે\"{0} ગુરુવારમાં,{0} ગુરુવાર પહેલાં\x1a-{0} ગુરુવાર${0} ગુરુ. પ" + + "હેલાં%ગયા શુક્રવારે\x1fઆ શુક્રવારે(આવતા શુક્રવારે%{0} શુક્રવારમાં/{0} " + + "શુક્રવાર પહેલાં'{0} શુક્ર. પહેલાં\x1fગયા શનિવારે\x19આ શનિવારે\"આવતા શન" + + "િવારે\x1f{0} શનિવારમાં){0} શનિવાર પહેલાં!{0} શનિ. પહેલાં\x0cકલાક\x10આ " + + "કલાક\x19{0} કલાકમાં#{0} કલાક પહેલાં\x04ક.\x0fમિનિટ\x13આ મિનિટ\x1c{0} મ" + + "િનિટમાં&{0} મિનિટ પહેલાં\x07મિ.\x12સેકન્ડ\x0fહમણાં\x1c{0} સેકંડમાં&{0}" + + " સેકંડ પહેલાં\x07સે.\x13સમય ઝોન\x0d{0} સમય\x1a{0} દિવસ સમય\x1a{0} માનક સ" + + "મય8સંકલિત યુનિવર્સલ સમય5બ્રિટિશ ગ્રીષ્મ સમય&આઈરિશ માનક સમય\x13એકર સમય/" + + "એકર પ્રમાણભૂત સમય+અફઘાનિસ્તાન સમય,મધ્ય આફ્રિકા સમય/પૂર્વ આફ્રિકા સમય?દ" + + "ક્ષિણ આફ્રિકા માનક સમય2પશ્ચિમ આફ્રિકા સમય?પશ્ચિમ આફ્રિકા માનક સમય\x1fઅ" + + "લાસ્કા સમય,અલાસ્કા માનક સમય\x1fઅલ્માટી સમય;અલ્માટી પ્રમાણભૂત સમય\x1cએમ" + + "ેઝોન સમય)એમેઝોન માનક સમયKઉત્તર અમેરિકન કેન્દ્રીય સમયXઉત્તર અમેરિકન કેન" + + "્દ્રીય માનક સમયBઉત્તર અમેરિકન પૂર્વી સમયOઉત્તર અમેરિકન પૂર્વી માનક સમય" + + "Eઉત્તર અમેરિકન માઉન્ટન સમયRઉત્તર અમેરિકન માઉન્ટન માનક સમયEઉત્તર અમેરિકન " + + "પેસિફિક સમયRઉત્તર અમેરિકન પેસિફિક માનક સમય\x1cઅનાદિર સમય8અનાડિર પ્રમાણ" + + "ભૂત સમય\x19એપિયા સમય&એપિયા માનક સમય\x1cઅક્તાઉ સમય8અક્તાઉ પ્રમાણભૂત સમય" + + "\x1cઍક્ટોબ સમય8ઍક્ટોબ પ્રમાણભૂત સમય\x1fઅરેબિયન સમય,અરેબિયન માનક સમય+આર્જ" + + "ેન્ટીના સમય8આર્જેન્ટીના માનક સમયAપશ્ચિમી આર્જેન્ટીના સમયNપશ્ચિમી આર્જે" + + "ન્ટીના માનક સમય%આર્મેનિયા સમય2આર્મેનિયા માનક સમય%એટલાન્ટિક સમય2એટલાન્ટ" + + "િક માનક સમયGકેન્દ્રીય ઓસ્ટ્રેલિયન સમયTઓસ્ટ્રેલિયન કેન્દ્રીય માનક સમય]ઓ" + + "સ્ટ્રેલિયન કેન્દ્રીય પશ્ચિમી સમયjઓસ્ટ્રેલિયન કેન્દ્રીય પશ્ચિમી માનક સમ" + + "યAપૂર્વીય ઓસ્ટ્રેલિયા સમયNઓસ્ટ્રેલિયન પૂર્વીય માનક સમયAપશ્ચિમી ઓસ્ટ્રે" + + "લિયા સમયNઓસ્ટ્રેલિયન પશ્ચિમી માનક સમય\"અઝરબૈજાન સમય/અઝરબૈજાન માનક સમય" + + "\x1cએઝોર્સ સમય)એઝોર્સ માનક સમય(બાંગ્લાદેશ સમય5બાંગ્લાદેશ માનક સમય\x19ભૂટ" + + "ાન સમય\"બોલિવિયા સમય(બ્રાઝિલિયા સમય5બ્રાઝિલિયા માનક સમય8બ્રૂનેઈ દારુસલ" + + "ામ સમય#કૅપ વર્ડે સમય0કૅપ વર્ડે માનક સમય)કેમોરો માનક સમય\x1cચેતહામ સમય)" + + "ચેતહામ માનક સમય\x16ચિલી સમય#ચિલી માનક સમય\x13ચીન સમય ચીન માનક સમય%ચોઇબ" + + "ાલ્સન સમય2ચોઇબાલ્સન માનક સમય5ક્રિસમસ આઇલેન્ડ સમય5કોકોઝ આઇલેન્ડ્સ સમય\"" + + "કોલંબિયા સમય/કોલંબિયા માનક સમય/કુક આઇલેન્ડ્સ સમય<કુક આઇલેન્ડ્સ માનક સમ" + + "ય\x1cક્યુબા સમય)ક્યુબા માનક સમય\x19ડેવિસ સમયAડ્યુમોન્ટ-ડી‘ઉર્વિલ સમય)પ" + + "ૂર્વ તિમોર સમય/ઇસ્ટર આઇલેન્ડ સમય<ઇસ્ટર આઇલેન્ડ માનક સમય\"એક્વાડોર સમય/" + + "મધ્ય યુરોપિયન સમય<મધ્ય યુરોપિયન માનક સમય5પૂર્વી યુરોપિયન સમયBપૂર્વી યુ" + + "રોપિયન માનક સમયEસુદૂર-પૂર્વી યુરોપિયન સમય8પશ્ચિમી યુરોપિયન સમયEપશ્ચિમી" + + " યુરોપિયન માનક સમય;ફોકલૅંડ આઇલેન્ડ્સ સમયHફોકલૅંડ આઇલેન્ડ્સ માનક સમય\x16ફ" + + "ીજી સમય#ફીજી માનક સમય,ફ્રેંચ ગયાના સમયXફ્રેંચ સધર્ન અને એન્ટાર્કટિક સમ" + + "ય%ગાલાપાગોસ સમય\"ગેમ્બિયર સમય(જ્યોર્જિયા સમય5જ્યોર્જિયા માનક સમય;ગિલબર" + + "્ટ આઇલેન્ડ્સ સમય2ગ્રીનવિચ મધ્યમ સમય8પૂર્વ ગ્રીનલેન્ડ સમયEપૂર્વ ગ્રીનલે" + + "ન્ડ માનક સમય;પશ્ચિમ ગ્રીનલેન્ડ સમયHપશ્ચિમ ગ્રીનલેન્ડ માનક સમય5ગ્વામ પ્" + + "રમાણભૂત સમય#ગલ્ફ માનક સમય\x19ગયાના સમય2હવાઈ-એલ્યુશિઅન સમય?હવાઇ-એલ્યુશિ" + + "અન માનક સમય#હોંગ કોંગ સમય0હોંગ કોંગ માનક સમય\x19હોવ્ડ સમય&હોવ્ડ માનક સ" + + "મય)ભારતીય માનક સમય2ભારતીય મહાસાગર સમય(ઇન્ડોચાઇના સમય8મધ્ય ઇન્ડોનેશિયા " + + "સમયAપૂર્વીય ઇન્ડોનેશિયા સમયAપશ્ચિમી ઇન્ડોનેશિયા સમય\x16ઈરાન સમય#ઈરાન મ" + + "ાનક સમય(ઇર્કુત્સ્ક સમય5ઇર્કુત્સ્ક માનક સમય\x1cઇઝરાઇલ સમય)ઇઝરાઇલ માનક સ" + + "મય\x19જાપાન સમય&જાપાન માનક સમયVપેટ્રોપેવલોવ્સ્ક-કામચતસ્કી સમયrપેટ્રોપે" + + "વલોવ્સ્ક-કામચતસ્કી પ્રમાણભૂત સમય8પૂર્વ કઝાકિસ્તાન સમય;પશ્ચિમ કઝાકિસ્તા" + + "ન સમય\x1cકોરિયન સમય)કોરિયન માનક સમય\x19કોસરે સમય7ક્રેસ્નોયાર્સ્ક સમયDક" + + "્રેસ્નોયાર્સ્ક માનક સમય(કિર્ગિઝતાન સમય\x16લંકા સમય2લાઇન આઇલેન્ડ્સ સમય#" + + "લોર્ડ હોવ સમય0લોર્ડ હોવ માનક સમય\x16મકાઉ સમય2મકાઉ પ્રમાણભૂત સમય8મેક્વા" + + "યર આઇલેન્ડ સમય\x19મગાડન સમય&મગાડન માનક સમય\x1fમલેશિયા સમય\x1cમાલદીવ સમ" + + "ય(માર્ક્યૂસસ સમય8માર્શલ આઇલેન્ડ્સ સમય\"મોરિશિયસ સમય/મોરિશિયસ માનક સમય" + + "\x16મોસન સમયDઉત્તરપશ્ચિમ મેક્સિકો સમયQઉત્તરપશ્ચિમ મેક્સિકો માનક સમય8મેક્" + + "સિકન પેસિફિક સમયEમેક્સિકન પેસિફિક માનક સમય&ઉલાન બાટોર સમય3ઉલાન બાટોર મ" + + "ાનક સમય\x1cમોસ્કો સમય)મોસ્કો માનક સમય\"મ્યાનમાર સમય\x16નૌરુ સમય\x19નેપ" + + "ાળ સમય5ન્યુ સેલેડોનિયા સમયBન્યુ સેલેડોનિયા માનક સમય+ન્યુઝીલેન્ડ સમય8ન્" + + "યુઝીલેન્ડ માનક સમય7ન્યૂફાઉન્ડલેન્ડ સમયDન્યૂફાઉન્ડલેન્ડ માનક સમય\x16નીય" + + "ુ સમય2નોરફૉક આઇલેન્ડ સમયEફર્નાન્ડો ડી નોરોન્હા સમયRફર્નાન્ડો ડી નોરોન્" + + "હા માનક સમયDઉત્તર મારિયાના આઇલેન્ડ્સ.નોવસિબિર્સ્ક સમય;નોવસિબિર્સ્ક માન" + + "ક સમય\x1cઓમ્સ્ક સમય)ઓમ્સ્ક માનક સમય%પાકિસ્તાન સમય2પાકિસ્તાન માનક સમય" + + "\x16પલાઉ સમય3પાપુઆ ન્યુ ગિની સમય\"પેરાગ્વે સમય/પેરાગ્વે માનક સમય\x16પેરુ" + + " સમય#પેરુ માનક સમય\"ફિલિપાઇન સમય/ફિલિપાઇન માનક સમય;ફોનિક્સ આઇલેન્ડ્સ સમય" + + "Lસેંટ પીએરી અને મિક્યુલોન સમયYસેંટ પીએરી અને મિક્યુલોન માનક સમય%પિટકેયર્" + + "ન સમય\x19પોનપે સમય(પ્યોંગયાંગ સમય(કિઝિલોર્ડા સમયDકિઝિલોર્ડા પ્રમાણભૂત " + + "સમય\"રીયુનિયન સમય\x1cરોથેરા સમય\x1cસખાલિન સમય)સખાલિન માનક સમય\x19સમારા" + + " સમય5સમારા પ્રમાણભૂત સમય\x16સમોઆ સમય#સમોઆ માનક સમય\x1cસેશલ્સ સમય/સિંગાપુ" + + "ર માનક સમય8સોલોમન આઇલેન્ડ્સ સમય5સાઉથ જ્યોર્જિયા સમય\x1fસુરીનામ સમય\x1c" + + "સ્યોવા સમય\x1cતાહિતી સમય\x1cતાઇપેઇ સમય)તાઇપેઇ માનક સમય+તાજીકિસ્તાન સમય" + + "\x1cટોકલાઉ સમય\x19ટોંગા સમય&ટોંગા માનક સમય\x16ચુઉક સમય4તુર્કમેનિસ્તાન સમ" + + "યAતુર્કમેનિસ્તાન માનક સમય\x19ટવાલૂ સમય\x1fઉરુગ્વે સમય,ઉરુગ્વે માનક સમય" + + ".ઉઝ્બેકિસ્તાન સમય;ઉઝ્બેકિસ્તાન માનક સમય\x19વનાતૂ સમય&વનાતૂ માનક સમય%વેને" + + "ઝુએલા સમય1વ્લાડિવોસ્ટોક સમય>વ્લાડિવોસ્ટોક માનક સમય+વોલ્ગોગ્રેડ સમય8વોલ" + + "્ગોગ્રેડ માનક સમય\x1fવોસ્ટોક સમય)વૅક આઇલેન્ડ સમય<વૉલિસ અને ફ્યુચુના સમ" + + "ય%યાકુત્સ્ક સમય2યાકુત્સ્ક માનક સમય1યેકાટેરિનબર્ગ સમય>યેકાટેરિનબર્ગ માન" + + "ક સમય" + +var bucket43 string = "" + // Size: 8326 bytes + ")એકર ગ્રીષ્મ સમયHપશ્ચિમ આફ્રિકા ગ્રીષ્મ સમય,અલાસ્કા દિવસ સમય5અલ્માટી ગ્ર" + + "ીષ્મ સમય2એમેઝોન ગ્રીષ્મ સમયXઉત્તર અમેરિકન કેન્દ્રીય દિવસ સમયOઉત્તર અમે" + + "રિકન પૂર્વી દિવસ સમયRઉત્તર અમેરિકન માઉન્ટન દિવસ સમયRઉત્તર અમેરિકન પેસિ" + + "ફિક દિવસ સમય2અનાડિર ગ્રીષ્મ સમય&એપિયા દિવસ સમય2અક્તાઉ ગ્રીષ્મ સમય2ઍક્ટ" + + "ોબ ગ્રીષ્મ સમય,અરેબિયન દિવસ સમયAઆર્જેન્ટીના ગ્રીષ્મ સમયWપશ્ચિમી આર્જેન" + + "્ટીના ગ્રીષ્મ સમય;આર્મેનિયા ગ્રીષ્મ સમય2એટલાન્ટિક દિવસ સમયTઓસ્ટ્રેલિયન" + + " કેન્દ્રીય દિવસ સમયjઓસ્ટ્રેલિયન કેન્દ્રીય પશ્ચિમી દિવસ સમયNઓસ્ટ્રેલિયન પ" + + "ૂર્વીય દિવસ સમયNઓસ્ટ્રેલિયન પશ્ચિમી દિવસ સમય8અઝરબૈજાન ગ્રીષ્મ સમય2એઝોર" + + "્સ ગ્રીષ્મ સમય>બાંગ્લાદેશ ગ્રીષ્મ સમય>બ્રાઝિલિયા ગ્રીષ્મ સમય9કૅપ વર્ડે" + + " ગ્રીષ્મ સમય)ચેતહામ દિવસ સમય,ચિલી ગ્રીષ્મ સમય ચીન દિવસ સમય;ચોઇબાલ્સન ગ્ર" + + "ીષ્મ સમય8કોલંબિયા ગ્રીષ્મ સમયRકુક આઇલેન્ડ્સ અર્ધ ગ્રીષ્મ સમય)ક્યુબા દિ" + + "વસ સમયEઇસ્ટર આઇલેન્ડ ગ્રીષ્મ સમયEમધ્ય યુરોપિયન ગ્રીષ્મ સમયKપૂર્વી યુરો" + + "પિયન ગ્રીષ્મ સમયNપશ્ચિમી યુરોપિયન ગ્રીષ્મ સમયQફોકલૅંડ આઇલેન્ડ્સ ગ્રીષ્" + + "મ સમય,ફીજી ગ્રીષ્મ સમય>જ્યોર્જિયા ગ્રીષ્મ સમયNપૂર્વ ગ્રીનલેન્ડ ગ્રીષ્મ" + + " સમયQપશ્ચિમ ગ્રીનલેન્ડ ગ્રીષ્મ સમય?હવાઇ-એલ્યુશિઅન દિવસ સમય9હોંગ કોંગ ગ્ર" + + "ીષ્મ સમય/હોવ્ડ ગ્રીષ્મ સમય#ઈરાન દિવસ સમય>ઇર્કુત્સ્ક ગ્રીષ્મ સમય)ઇઝરાઇલ" + + " દિવસ સમય&જાપાન દિવસ સમયlપેટ્રોપેવલોવ્સ્ક-કામચતસ્કી ગ્રીષ્મ સમય)કોરિયન દ" + + "િવસ સમયMક્રેસ્નોયાર્સ્ક ગ્રીષ્મ સમય0લોર્ડ હોવ દિવસ સમય,મકાઉ ગ્રીષ્મ સમ" + + "ય/મગાડન ગ્રીષ્મ સમય8મોરિશિયસ ગ્રીષ્મ સમયQઉત્તરપશ્ચિમ મેક્સિકો દિવસ સમય" + + "Eમેક્સિકન પેસિફિક દિવસ સમય9ઉલાન બટોર ગ્રીષ્મ સમય2મોસ્કો ગ્રીષ્મ સમયKન્યુ" + + " સેલેડોનિયા ગ્રીષ્મ સમય8ન્યુઝીલેન્ડ દિવસ સમયDન્યૂફાઉન્ડલેન્ડ દિવસ સમયUફર" + + "્નાન્ડો દે નોરોહા ગ્રીષ્મ સમયDનોવસિબિર્સ્ક ગ્રીષ્મ સમય2ઓમ્સ્ક ગ્રીષ્મ " + + "સમય;પાકિસ્તાન ગ્રીષ્મ સમય8પેરાગ્વે ગ્રીષ્મ સમય,પેરુ ગ્રીષ્મ સમય8ફિલિપા" + + "ઇન ગ્રીષ્મ સમયYસેંટ પીએરી અને મિક્યુલોન દિવસ સમય>કિઝિલોર્ડા ગ્રીષ્મ સમ" + + "ય2સખાલિન ગ્રીષ્મ સમય/સમારા ગ્રીષ્મ સમય,સમોઆ ગ્રીષ્મ સમય)તાઇપેઇ દિવસ સમ" + + "ય/ટોંગા ગ્રીષ્મ સમયJતુર્કમેનિસ્તાન ગ્રીષ્મ સમય5ઉરુગ્વે ગ્રીષ્મ સમયDઉઝ્" + + "બેકિસ્તાન ગ્રીષ્મ સમય/વનાતૂ ગ્રીષ્મ સમયGવ્લાડિવોસ્ટોક ગ્રીષ્મ સમયAવોલ્" + + "ગોગ્રેડ ગ્રીષ્મ સમય;યાકુત્સ્ક ગ્રીષ્મ સમયGયેકાટેરિનબર્ગ ગ્રીષ્મ સમય" + + "\x03Can\x03Feb\x03Mac\x03Apr\x03Mei\x03Jun\x03Cul\x03Agt\x03Sep\x03Okt" + + "\x03Nob\x03Dis\x08Chanuari\x08Feburari\x05Machi\x07Apiriri\x04Juni\x06Ch" + + "ulai\x06Agosti\x08Septemba\x07Okitoba\x07Nobemba\x07Disemba\x03Cpr\x03Ct" + + "t\x03Cmn\x03Cmt\x03Ars\x03Icm\x03Est\x09Chumapiri\x09Chumatato\x08Chumai" + + "ne\x09Chumatano\x07Aramisi\x06Ichuma\x07Esabato\x02E1\x02E2\x02E3\x02E4" + + "\x12Erobo entang’ani\x0eErobo yakabere\x0eErobo yagatato\x0cErobo yakane" + + "\x06Mambia\x03Mog\x0eYeso ataiborwa\x0eYeso kaiboirwe\x02YA\x02YK\x05Ebi" + + "ro\x09Omotienyi\x08Omokubio\x06Rituko\x05Igoro\x04Rero\x10Rituko r’ewiki" + + "\x14Mambia gose Morogoba\x04Ensa\x07Edakika\x08Esekendi\x0fChinse ‘chimo" + + "\x0bMMM dd, y G\x06J-guer\x07T-arree\x06Mayrnt\x06Avrril\x07Boaldyn\x08M" + + "-souree\x08J-souree\x09Luanistyn\x08M-fouyir\x08J-fouyir\x08M-Houney\x09" + + "M-Nollick\x0dJerrey-geuree\x0fToshiaght-arree\x06Averil\x0bMean-souree" + + "\x0dJerrey-souree\x0bMean-fouyir\x0dJerrey-fouyir\x0aMee Houney\x0eMee n" + + "y Nollick\x03Jed\x03Jel\x03Jem\x04Jerc\x04Jerd\x03Jeh\x03Jes\x08Jedoonee" + + "\x07Jelhein\x07Jemayrt\x07Jercean\x07Jerdein\x08Jeheiney\x06Jesarn\x0eEE" + + "EE dd MMMM y\x09MMM dd, y\x07Janairu\x09Faburairu\x05Maris\x07Afirilu" + + "\x04Mayu\x04Yuni\x04Yuli\x06Agusta\x07Satumba\x06Oktoba\x07Nuwamba\x07Di" + + "samba\x03Lah\x03Lit\x03Tal\x03Lar\x03Alh\x03Jum\x03Asa\x02Lh\x02Li\x02Ta" + + "\x02Lr\x02Al\x02Ju\x02As\x06Lahadi\x07Litinin\x06Talata\x06Laraba\x07Alh" + + "amis\x08Jummaʼa\x06Asabar\x0eKwata na ɗaya\x0dKwata na biyu\x0cKwata na " + + "uku\x0eKwata na huɗu\x14Kafin haihuwar annab\x14Bayan haihuwar annab\x04" + + "KHAI\x04BHAI\x06Zamani\x07Shekara\x04Wata\x04Mako\x05Kwana\x04Jiya\x03Ya" + + "u\x04Gobe\x04Rana\x04Yini\x03Awa\x05Minti\x08Daƙiƙa\x05Agogo\x04Ian.\x04" + + "Pep.\x04Mal.\x05ʻAp.\x04Iun.\x04Iul.\x05ʻAu.\x04Kep.\x05ʻOk.\x04Now.\x04" + + "Kek.\x07Ianuali\x09Pepeluali\x06Malaki\x09ʻApelila\x04Iune\x05Iulai\x08ʻ" + + "Aukake\x0aKepakemapa\x09ʻOkakopa\x08Nowemapa\x08Kekemapa\x02LP\x02P1\x02" + + "P2\x02P3\x02P4\x02P5\x02P6\x07Lāpule\x09Poʻakahi\x08Poʻalua\x09Poʻakolu" + + "\x08Poʻahā\x09Poʻalima\x08Poʻaono!הספירה הבודהיסטית\x08טאוט\x06בבה\x08הט" + + "ור\x08קיאק\x08טובה\x0aאמשיר\x0aברמהט\x0cברמודה\x0aבשאנס\x0aפאונה\x08אפי" + + "פ\x08מסרה\x08נאסי\x0aעידן 0\x0aעידן 1\x0aמסקרם\x08טקמת\x06הדר\x08תהסס" + + "\x04טר\x0aיכתית\x0aמגבית\x0cמיאזיה\x0aגנבות\x08סאנה\x08המלה\x08נהסה\x0aפ" + + "גומן\x12EEEE, d בMMMM y G\x0cd בMMMM y G\x0bd בMMM y G\x10{1} בשעה {0}" + + "\x08ינו׳\x08פבר׳\x06מרץ\x08אפר׳\x06מאי\x08יוני\x08יולי\x08אוג׳\x08ספט׳" + + "\x08אוק׳\x08נוב׳\x08דצמ׳\x0aינואר\x0cפברואר\x0aאפריל\x0cאוגוסט\x0cספטמבר" + + "\x0eאוקטובר\x0cנובמבר\x0aדצמבר\x0bיום א׳\x0bיום ב׳\x0bיום ג׳\x0bיום ד׳" + + "\x0bיום ה׳\x0bיום ו׳\x06שבת\x04א׳\x04ב׳\x04ג׳\x04ד׳\x04ה׳\x04ו׳\x04ש׳" + + "\x11יום ראשון\x0dיום שני\x11יום שלישי\x11יום רביעי\x11יום חמישי\x0fיום ש" + + "ישי\x0dיום שבת\x0cרבעון 1\x0cרבעון 2\x0cרבעון 3\x0cרבעון 4\x08חצות\x0cל" + + "פנה״צ\x0aאחה״צ\x08בוקר\x0cצהריים\x15אחר הצהריים\x06ערב\x08לילה\x13לפנות" + + " בוקר\x0aבבוקר\x0eבצהריים\x08בערב\x0aבלילה\x15לפני הספירה\x0cלפנה״ס\x0cל" + + "ספירה\x02CE\x10EEEE, d בMMMM y\x0ad בMMMM y\x09d בMMM y\x08תשרי\x08חשון" + + "\x08כסלו\x06טבת\x06שבט\x0bאדר א׳\x06אדר\x0bאדר ב׳\x08ניסן\x08אייר\x08סיו" + + "ן\x08תמוז\x04אב\x08אלול\x06תש׳\x06חש׳\x06כס׳\x06טב׳\x06שב׳\x06א״א\x06אד" + + "׳\x06א״ב\x06ני׳\x06אי׳\x06סי׳\x06תמ׳\x06אל׳\x0aחשוון\x0aסיוון\x17לבריאת" + + " העולם\x0eצ׳ייטרה\x0eוייסקהה\x10ג׳יאסטהה\x0aאשדהה\x10סראוואנה\x0aבהרדה" + + "\x0eאסווינה\x0cקרטיקה\x10אגרהיאנה\x0aפאוסה\x0aמאגהה\x0cפלגונה\x0eפאלגונה" + + "\x08Phalguna\x03Ayn\x03Asn\x03Akr\x03Akw\x03Asm\x05Asḍ\x04אב\x04אב" + +var bucket44 string = "" + // Size: 14932 bytes + "\x08סאקא\x0aמוחרם\x06צפר\x0dרביע א׳\x0dרביע ב׳\x13ג׳ומאדא א׳\x13ג׳ומאדא " + + "ב׳\x08רג׳ב\x0aשעבאן\x0aרמדאן\x0aשוואל\x15ד׳ו אל־קעדה\x17ד׳ו אל־חיג׳ה" + + "\x16רביע אל-אוול\x16רביע א-ת׳אני\x1cג׳ומאדא אל-אולא\x1eג׳ומאדא א-ת׳אניה" + + "\x17רביע אל־אוול\x17רביע א־ת׳אני\x1dג׳ומאדא אל־אולא\x1fג׳ומאדא א־ת׳אניה" + + "\x13שנת היג׳רה\x0aטאיקה\x0cנינג׳ו\x0cשוטוקו\x0eפרורדין\x10ארדיבהשת\x0cח׳" + + "רדאד\x06תיר\x0aמרדאד\x0cשהריור\x06מהר\x08אבאן\x08אד׳ר\x04די\x08בהמן\x0a" + + "אספנד\x19הספירה הפרסית'לפני הרפובליקה של סין+לספירת הרפובליקה של סין" + + "\x0eלפני R.O.C\x06R.O.C.\x0aתקופה\x06שנה\x13השנה שעברה\x08השנה\x11השנה ה" + + "באה\x0fבעוד שנה\x15בעוד שנתיים\x13בעוד {0} שנה\x15בעוד {0} שנים\x0fלפני" + + " שנה\x15לפני שנתיים\x13לפני {0} שנה\x15לפני {0} שנים\x06שנ׳\x0aרבעון\x17" + + "הרבעון הקודם\x0fרבעון זה\x13הרבעון הבא\x13ברבעון הבא\x1eבעוד שני רבעוני" + + "ם\x1bבעוד {0} רבעונים\x17ברבעון הקודם\x1eלפני שני רבעונים\x1bלפני {0} ר" + + "בעונים\x08רבע׳\x11ברבע׳ הבא\x18בעוד שני רבע׳\x15בעוד {0} רבע׳\x15ברבע׳ " + + "הקודם\x18לפני שני רבע׳\x15לפני {0} רבע׳\x08חודש\x13החודש שעבר\x0aהחודש" + + "\x11החודש הבא\x11בעוד חודש\x17בעוד חודשיים\x19בעוד {0} חודשים\x11לפני חו" + + "דש\x17לפני חודשיים\x19לפני {0} חודשים\x06חו׳\x0fבעוד חו׳\x13בעוד {0} חו" + + "׳\x0fלפני חו׳\x13לפני {0} חו׳\x08שבוע\x13השבוע שעבר\x0aהשבוע\x11השבוע ה" + + "בא\x11בעוד שבוע\x17בעוד שבועיים\x19בעוד {0} שבועות\x11לפני שבוע\x17לפני" + + " שבועיים\x19לפני {0} שבועות\x0fהשבוע של\x0fבעוד שב׳\x13בעוד {0} שב׳\x0fל" + + "פני שב׳\x13לפני {0} שב׳\x13השבוע של {0}\x15השבוע בחודש\x06יום\x0aשלשום" + + "\x0aאתמול\x08היום\x06מחר\x0eמחרתיים\x13בעוד יום {0}\x15בעוד יומיים\x15בע" + + "וד {0} ימים\x13לפני יום {0}\x15לפני יומיים\x15לפני {0} ימים\x0fיום בשנה" + + "\x11יום בשבוע\x18יום חול בחודש\x11יום בחודש\x1cביום ראשון שעבר\x1aביום ר" + + "אשון הזה\x1aביום ראשון הבא\x1eבעוד יום ראשון {0}\x1eבעוד {0} ימי ראשון" + + "\x1eלפני יום ראשון {0}\x1eלפני {0} ימי ראשון\x14יום א׳ שעבר\x0bיום א׳" + + "\x12יום א׳ הבא\x16יום שני שעבר\x0dיום שני\x14יום שני הבא\x1aבעוד יום שני" + + " {0}\x1aבעוד {0} ימי שני\x1aלפני יום שני {0}\x1aלפני {0} ימי שני\x14יום " + + "ב׳ שעבר\x0bיום ב׳\x12יום ב׳ הבא\x1aיום שלישי שעבר\x11יום שלישי\x18יום ש" + + "לישי הבא\x1eבעוד יום שלישי {0}\x1eבעוד {0} ימי שלישי\x1eלפני יום שלישי " + + "{0}\x1eלפני {0} ימי שלישי\x14יום ג׳ שעבר\x0bיום ג׳\x12יום ג׳ הבא\x1aיום " + + "רביעי שעבר\x11יום רביעי\x18יום רביעי הבא\x1eבעוד יום רביעי {0}\x1eבעוד " + + "{0} ימי רביעי\x1eלפני יום רביעי {0}\x1eלפני {0} ימי רביעי\x14יום ד׳ שעבר" + + "\x0bיום ד׳\x12יום ד׳ הבא\x1aיום חמישי שעבר\x11יום חמישי\x18יום חמישי הבא" + + "\x1eבעוד יום חמישי {0}\x1eבעוד {0} ימי חמישי\x1eלפני יום חמישי {0}\x1eלפ" + + "ני {0} ימי חמישי\x14יום ה׳ שעבר\x0bיום ה׳\x12יום ה׳ הבא\x18יום שישי שעב" + + "ר\x0fיום שישי\x16יום שישי הבא\x1cבעוד יום שישי {0}\x1cבעוד {0} ימי שישי" + + "\x1cלפני יום שישי {0}\x1cלפני {0} ימי שישי\x14יום ו׳ שעבר\x0bיום ו׳\x14ב" + + "יום ו׳ הבא\x12יום ו׳ הבא\x16יום שבת שעבר\x0dיום שבת\x14יום שבת הבא\x13ב" + + "עוד שבת {0}\x17בעוד {0} שבתות\x13לפני שבת {0}\x17לפני {0} שבתות\x11שבת " + + "שעברה\x06שבת\x0fשבת הבאה\x17לפנה״צ/אחה״צ\x06שעה\x0dבשעה זו\x0fבעוד שעה" + + "\x15בעוד שעתיים\x15בעוד {0} שעות\x0fלפני שעה\x15לפני שעתיים\x15לפני {0} " + + "שעות\x13בעוד {0} שע׳\x13לפני {0} שע׳\x06שע׳\x06דקה\x0dבדקה זו\x0fבעוד ד" + + "קה\x18בעוד שתי דקות\x15בעוד {0} דקות\x0fלפני דקה\x18לפני שתי דקות\x15לפ" + + "ני {0} דקות\x06דק׳\x16בעוד שתי דק׳\x13בעוד {0} דק׳\x13לפני {0} דק׳\x16ל" + + "פני שתי דק׳\x0aשנייה\x0aעכשיו\x13בעוד שנייה\x1aבעוד שתי שניות\x17בעוד {" + + "0} שניות\x13לפני שנייה\x1aלפני שתי שניות\x17לפני {0} שניות\x0fבעוד שנ׳" + + "\x16בעוד שתי שנ׳\x13בעוד {0} שנ׳\x0fלפני שנ׳\x16לפני שתי שנ׳\x13לפני {0}" + + " שנ׳\x08אזור\x13\u200e+HH:mm;-HH:mm\u200e\x09GMT{0}\u200e\x03GMT\x0cשעון" + + " {0}\x15שעון {0} (קיץ)\x17שעון {0} (חורף)$זמן אוניברסלי מתואם\x1eשעון קי" + + "ץ בריטניה\x1cשעון קיץ אירלנד\x19שעון אפגניסטן\x1eשעון מרכז אפריקה\x1eשע" + + "ון מזרח אפריקה\x1eשעון דרום אפריקה\x1eשעון מערב אפריקה)שעון מערב אפריקה" + + " (חורף)'שעון מערב אפריקה (קיץ)\x13שעון אלסקה\x1eשעון אלסקה (חורף)\x1cשעו" + + "ן אלסקה (קיץ)\x15שעון אמזונס שעון אמזונס (חורף)\x1eשעון אמזונס (קיץ)" + + "\x1cשעון מרכז ארה״ב'שעון מרכז ארה״ב (חורף)%שעון מרכז ארה״ב (קיץ)\x1eשעון" + + " החוף המזרחי)שעון החוף המזרחי (חורף)'שעון החוף המזרחי (קיץ))שעון אזור הה" + + "רים בארה״ב4שעון אזור ההרים בארה״ב (חורף)2שעון אזור ההרים בארה״ב (קיץ)" + + "\x1cשעון מערב ארה״ב'שעון מערב ארה״ב (חורף)%שעון מערב ארה״ב (קיץ)\x13שעון" + + " אנדיר\x1cשעון רגיל אנדיר\x1aשעון קיץ אנדיר\x11שעון אפיה\x1cשעון אפיה (ח" + + "ורף)\x1aשעון אפיה (קיץ)\x1dשעון חצי האי ערב(שעון חצי האי ערב (חורף)&שעו" + + "ן חצי האי ערב (קיץ)\x19שעון ארגנטינה$שעון ארגנטינה (חורף)\"שעון ארגנטינ" + + "ה (קיץ)\"שעון מערב ארגנטינה-שעון מערב ארגנטינה (חורף)+שעון מערב ארגנטינ" + + "ה (קיץ)\x15שעון ארמניה שעון ארמניה (חורף)\x1eשעון ארמניה (קיץ)*שעון האו" + + "קיינוס האטלנטי5שעון האוקיינוס האטלנטי (חורף)3שעון האוקיינוס האטלנטי (קי" + + "ץ)\"שעון מרכז אוסטרליה-שעון מרכז אוסטרליה (חורף)+שעון מרכז אוסטרליה (קי" + + "ץ)+שעון מרכז-מערב אוסטרליה6שעון מרכז-מערב אוסטרליה (חורף)4שעון מרכז-מער" + + "ב אוסטרליה (קיץ)\"שעון מזרח אוסטרליה-שעון מזרח אוסטרליה (חורף)+שעון מזר" + + "ח אוסטרליה (קיץ)\"שעון מערב אוסטרליה-שעון מערב אוסטרליה (חורף)+שעון מער" + + "ב אוסטרליה (קיץ)\x1dשעון אזרבייג׳אן(שעון אזרבייג׳אן (חורף)&שעון אזרבייג" + + "׳אן (קיץ)$שעון האיים האזוריים/שעון האיים האזוריים (חורף)-שעון האיים האז" + + "וריים (קיץ)\x15שעון בנגלדש שעון בנגלדש (חורף)\x1eשעון בנגלדש (קיץ)\x13ש" + + "עון בהוטן\x17שעון בוליביה\x17שעון ברזיליה\"שעון ברזיליה (חורף) שעון ברז" + + "יליה (קיץ)&שעון ברוניי דארוסלאם\x16שעון כף ורדה!שעון כף ורדה (חורף)\x1f" + + "שעון כף ורדה (קיץ)\x17שעון צ׳אמורו\x15שעון צ׳טהאם שעון צ׳טהאם (חורף)" + + "\x1eשעון צ׳טהאם (קיץ)\x13שעון צ׳ילה\x1eשעון צ׳ילה (חורף)\x1cשעון צ׳ילה (" + + "קיץ)\x0fשעון סין\x1aשעון סין (חורף)\x18שעון סין (קיץ)\x19שעון צ׳ויבלסן$" + + "שעון צ׳ויבלסן (חורף)\"שעון צ׳ויבלסן (קיץ)\x1eשעון האי כריסטמס\x1aשעון א" + + "יי קוקוס\x19שעון קולומביה$שעון קולומביה (חורף)\"שעון קולומביה (קיץ)\x16" + + "שעון איי קוק!שעון איי קוק (חורף),שעון איי קוק (מחצית הקיץ)\x11שעון קובה" + + "\x1cשעון קובה (חורף)\x1aשעון קובה (קיץ)\x15שעון דיוויס&שעון דומון ד׳אורו" + + "ויל\x1cשעון מזרח טימור\x18שעון אי הפסחא#שעון אי הפסחא (חורף)!שעון אי הפ" + + "סחא (קיץ)\x17שעון אקוודור\x1eשעון מרכז אירופה)שעון מרכז אירופה (חורף)'ש" + + "עון מרכז אירופה (קיץ)\x1eשעון מזרח אירופה)שעון מזרח אירופה (חורף)'שעון " + + "מזרח אירופה (קיץ)\x13שעון מינסק\x1eשעון מערב אירופה)שעון מערב אירופה (ח" + + "ורף)'שעון מערב אירופה (קיץ)\x1cשעון איי פוקלנד'שעון איי פוקלנד (חורף)%ש" + + "עון איי פוקלנד (קיץ)\x13שעון פיג׳י\x1eשעון פיג׳י (חורף)\x1cשעון פיג׳י (" + + "קיץ)\"שעון גיאנה הצרפתיתMשעון הארצות הדרומיות והאנטארקטיות של צרפת\x1eש" + + "עון איי גלאפגוס\x1cשעון איי גמבייה\x17שעון גאורגיה\"שעון גאורגיה (חורף)" + + " שעון גאורגיה (קיץ)\x1cשעון איי גילברט\x1aשעון גריניץ׳\u200f שעון מזרח ג" + + "רינלנד+שעון מזרח גרינלנד (חורף))שעון מזרח גרינלנד (קיץ) שעון מערב גרינל" + + "נד+שעון מערב גרינלנד (חורף))שעון מערב גרינלנד (קיץ) שעון מדינות המפרץ" + + "\x13שעון גיאנה1שעון האיים האלאוטיים הוואי<שעון האיים האלאוטיים הוואי (חו" + + "רף):שעון האיים האלאוטיים הוואי (קיץ)\x1aשעון הונג קונג%שעון הונג קונג (" + + "חורף)#שעון הונג קונג (קיץ)\x11שעון חובד\x1cשעון חובד (חורף)\x1aשעון חוב" + + "ד (קיץ)\x11שעון הודו&שעון האוקיינוס ההודי\x18שעון הודו-סין$שעון מרכז אי" + + "נדונזיה$שעון מזרח אינדונזיה$שעון מערב אינדונזיה\x13שעון איראן\x1eשעון א" + + "יראן (חורף)\x1cשעון איראן (קיץ)\x19שעון אירקוטסק$שעון אירקוטסק (חורף)\"" + + "שעון אירקוסטק (קיץ)\x13שעון ישראל\x1eשעון ישראל (חורף)\x1cשעון ישראל (ק" + + "יץ)\x0fשעון יפן\x1aשעון יפן (חורף)\x18שעון יפן (קיץ)0שעון פטרופבלובסק-ק" + + "מצ׳טסקי9שעון רגיל פטרופבלובסק-קמצ׳טסקי7שעון קיץ פטרופבלובסק-קמצ׳טסקי" + + "\x1eשעון מזרח קזחסטן\x1eשעון מערב קזחסטן\x15שעון קוריאה שעון קוריאה (חור" + + "ף)\x1eשעון קוריאה (קיץ)\x15שעון קוסראה\x1dשעון קרסנויארסק(שעון קרסנויאר" + + "סק (חורף)&שעון קרסנויארסק (קיץ)\x1bשעון קירגיזסטן\x18שעון איי ליין\x1fש" + + "עון אי הלורד האו*שעון אי הלורד האו (חורף)(שעון אי הלורד האו (קיץ)\x11שע" + + "ון מקאו\x1aשעון חורף מקאו\x18שעון קיץ מקאו\x17שעון מקווארי\x11שעון מגדן" + + "\x1cשעון מגדן (חורף)\x1aשעון מגדן (קיץ)\x13שעון מלזיה&שעון האיים המלדיבי" + + "ים\x1aשעון איי מרקיז\x18שעון איי מרשל\x1bשעון מאוריציוס&שעון מאוריציוס " + + "(חורף)$שעון מאוריציוס (קיץ)\x15שעון מאוסון'שעון צפון-מערב מקסיקו2שעון צפ" + + "ון-מערב מקסיקו (חורף)0שעון צפון-מערב מקסיקו (קיץ)\x1eשעון מערב מקסיקו)ש" + + "עון מערב מקסיקו (חורף)'שעון מערב מקסיקו (קיץ)\x1aשעון אולן בטור%שעון או" + + "לן בטור (חורף)#שעון אולן בטור (קיץ)\x15שעון מוסקבה שעון מוסקבה (חורף)" + + "\x1eשעון מוסקבה (קיץ)\x15שעון מיאנמר\x13שעון נאורו\x11שעון נפאל\"שעון קל" + + "דוניה החדשה-שעון קלדוניה החדשה (חורף)+שעון קלדוניה החדשה (קיץ)\x1aשעון " + + "ניו זילנד%שעון ניו זילנד (חורף)#שעון ניו זילנד (קיץ)\x1fשעון ניופאונדלנ" + + "ד*שעון ניופאונדלנד (חורף)(שעון ניופאונדלנד (קיץ)\x13שעון ניואה\x1cשעון " + + "האי נורפוק)שעון פרננדו די נורוניה4שעון פרננדו די נורוניה (חורף)2שעון פר" + + "ננדו די נורוניה (קיץ)\x1fשעון נובוסיבירסק*שעון נובוסיבירסק (חורף)(שעון " + + "נובוסיבירסק (קיץ)\x13שעון אומסק\x1eשעון אומסק (חורף)\x1cשעון אומסק (קיץ" + + ")\x15שעון פקיסטן שעון פקיסטן (חורף)\x1eשעון פקיסטן (קיץ)\x11שעון פלאו+שע" + + "ון פפואה גיניאה החדשה\x17שעון פרגוואי\"שעון פרגוואי (חורף) שעון פרגוואי" + + " (קיץ)\x0fשעון פרו\x1aשעון פרו (חורף)\x18שעון פרו (קיץ)\x1dשעון הפיליפינ" + + "ים(שעון הפיליפינים (חורף)&שעון הפיליפינים (קיץ)\x1cשעון איי פיניקס'שעון" + + " סנט פייר ומיקלון2שעון סנט פייר ומיקלון (חורף)0שעון סנט פייר ומיקלון (קי" + + "ץ)\x15שעון פיטקרן\x15שעון פונאפי\x1bשעון פיונגיאנג\x17שעון ראוניון\x15ש" + + "עון רות׳רה\x13שעון סחלין\x1eשעון סחלין (חורף)\x1cשעון סחלין (קיץ)\x11שע" + + "ון סמרה\x1aשעון רגיל סמרה\x18שעון קיץ סמרה\x13שעון סמואה\x1eשעון סמואה " + + "(חורף)\x1cשעון סמואה (קיץ)\x1aשעון איי סיישל\x17שעון סינגפור\x18שעון איי" + + " שלמה\"שעון דרום ג׳ורג׳יה\x17שעון סורינאם\x15שעון סייווה\x13שעון טהיטי" + + "\x15שעון טאיפיי שעון טאיפיי (חורף)\x1eשעון טאיפיי (קיץ)\x1bשעון טג׳יקיסט" + + "ן\x15שעון טוקלאו\x13שעון טונגה\x1eשעון טונגה (חורף)\x1cשעון טונגה (קיץ)" + + "\x11שעון צ׳וק\x1dשעון טורקמניסטן(שעון טורקמניסטן (חורף)&שעון טורקמניסטן " + + "(קיץ)\x15שעון טובאלו\x1bשעון אורוגוואי&שעון אורוגוואי (חורף)$שעון אורוגו" + + "ואי (קיץ)\x1bשעון אוזבקיסטן&שעון אוזבקיסטן (חורף)$שעון אוזבקיסטן (קיץ)" + + "\x15שעון ונואטו שעון ונואטו (חורף)\x1eשעון ונואטו (קיץ)\x17שעון ונצואלה" + + "\x1dשעון ולדיווסטוק(שעון ולדיווסטוק (חורף)&שעון ולדיווסטוק (קיץ)\x19שעון" + + " וולגוגרד$שעון וולגוגרד (חורף)\"שעון וולגוגרד (קיץ)\x15שעון ווסטוק\x18שע" + + "ון האי וייק$שעון וואליס ופוטונה\x15שעון יקוטסק שעון יקוטסק (חורף)\x1eשע" + + "ון יקוטסק (קיץ)\x1dשעון יקטרינבורג(שעון יקטרינבורג (חורף)&שעון יקטרינבו" + + "רג (קיץ)" + +var bucket45 string = "" + // Size: 9504 bytes + "\x18मस्केरेम\x15टेकेम्ट\x0cहेदर\x0fतहसास\x06टर\x15येकाटिट\x15मेगाबिट\x1b" + + "मियाज़िया\x0fगनबोट\x09सेन\x0fहम्ले\x12नेहासे\x12पागूमन\x10G EEEE, d MM" + + "MM y\x0e{1} को {0}\x09जन॰\x0cफ़र॰\x0fमार्च\x12अप्रैल\x06मई\x09जून\x0cजुल" + + "॰\x09अग॰\x0cसित॰\x12अक्तू॰\x09नव॰\x0cदिस॰\x0fजनवरी\x12फ़रवरी\x0fजुलाई" + + "\x0fअगस्त\x12सितंबर\x15अक्तूबर\x0fनवंबर\x12दिसंबर\x09रवि\x09सोम\x0cमंगल" + + "\x09बुध\x0cगुरु\x0fशुक्र\x09शनि\x12रविवार\x12सोमवार\x15मंगलवार\x12बुधवार" + + "\x15गुरुवार\x18शुक्रवार\x12शनिवार\x07ति1\x07ति2\x07ति3\x07ति4\x1fपहली ति" + + "माही\"दूसरी तिमाही\"तीसरी तिमाही\x1fचौथी तिमाही\x1eमध्यरात्रि\x1bपूर्व" + + "ाह्न\x15अपराह्न\x0cसुबह\x09शाम\x09रात\x06पू\x0fदोपहर\x13आधी रात\x19ईसा" + + "-पूर्व\x1cईसवी पूर्व\x13ईसवी सन\x0cईसवी\x0fईस्वी\x0fचैत्र\x0fवैशाख\x15ज्" + + "येष्ठ\x0fआषाढ़\x12श्रावण\x15भाद्रपद\x12अश्विन\x15कार्तिक\x18अग्रहायण" + + "\x09पौष\x09माघ\x15फाल्गुन\x06शक\x15मुहर्रम\x09सफर\x1cराबी प्रथम\"राबी द्" + + "वितीय\"जुम्डा प्रथम(जुम्डा द्वितीय\x09रजब\x0cशावन\x0fरमजान\x12शव्व्ल" + + "\x19जिल-क्दाह\"जिल्-हिज्जाह\x1bताएका (645–650)\x1eहाकूची (650–671)\x1eहा" + + "कूहो (672–686)\x18शूचो (686–701)\x1bताहिओ (701–704)\x18केउन (704–708)" + + "\x18वाडू (708–715)\x18रैकी (715–717)\x18योरो (717–724)\x1bजिंकी (724–729" + + ")$टेम्प्यो (729–749)7टेम्प्यो-काम्पो (749–749)1टेम्प्यो-शोहो (749–757)1ट" + + "ेम्प्यो-होजी (757–765)4टेम्प्यो-जिंगो (765–767)1टेम्प्यो-किउन (767–770" + + ")\x18होकी (770–780)\x18टेनो (781–782)$इंर्याकू (782–806)\x1bडाईडू (806–8" + + "10)\x1eक़ोनिन (810–824)\x1bटेंचो (824–834)\x18शोवा (834–848)\x1eकाज्यो (" + + "848–851)\x1bनिंजू (851–854)\x1bशाईकू (854–857)\x18टेनन (857–859)\x1bजोगन" + + "् (859–877)\x1eगेंकेई (877–885)\x1eनिन्ना (885–889)$केम्प्यो (889–898)" + + "\x1bशूताई (898–901)\x18ईंगी (901–923)\x18ईंचो (923–931)\x1bशोहेई (931–93" + + "8)!टेंग्यो (938–947)'टेंर्याकू (947–957)!टेंटूकू (957–961)\x15ओवा (961–9" + + "64)\x18कोहो (964–968)\x1bअन्ना (968–970)!टेंरोकू (970–973)\x1cटेन-एन (97" + + "3–976)\x1bजोगन् (976–978)\x1eटेंगेन (978–983)\x18ईकान (983–985)\x1bकन्ना" + + " (985–987)\x16ई-एन (987–989)\x18एइसो (989–990)$शोर्याकू (990–995)\x1eचोट" + + "ूकु (995–999)\x19चोहो (999–1004)\x1aकंको (1004–1012) च्योवा (1012–1017" + + ") कन्निन (1017–1021) ज़ियान (1021–1024)\x1aमंजू (1024–1028)\x1aचोगन (102" + + "8–1037)&चोर्याकू (1037–1040) चोक्यु (1040–1044)#कांटूको (1044–1046)\x17ई" + + "शो (1046–1053)\x1dटेंगी (1053–1058)\x1dकोहैइ (1058–1065)&जिर्याकू (106" + + "5–1069) ईंक्यू (1069–1074)\x1aसोहो (1074–1077)&शोर्याकू (1077–1081)\x17ई" + + "हो (1081–1084)\x1dओटूको (1084–1087)\x1dकांजि (1087–1094)\x1aकोहो (1094" + + "–1096)\x17ईचो (1096–1097) शोटूको (1097–1099)\x1aकोवा (1099–1104)\x1aचो" + + "जी (1104–1106)\x1aकाशो (1106–1108)#टेन्निन (1108–1110)\x1bटेन-ई (1110–" + + "1113)\x1dईक्यू (1113–1118)\x1bजेन-ई (1118–1120)\x1aहोआन (1120–1124)\x1dत" + + "ेंजी (1124–1126)\x1dदाईजी (1126–1131)\x1dटेंशो (1131–1132)\x1aचोशो (11" + + "32–1135)\x1aहोएन (1135–1141)\x17ईजी (1141–1142)\x1aकोजी (1142–1144) टेन्" + + "यो (1144–1145) क्यूआन (1145–1151) निंपैई (1151–1154) क्योजो (1154–1156" + + ")\x1dहोगेन (1156–1159)\x1aहैजी (1159–1160)#ईर्याकू (1160–1161)\x17ओहो (1" + + "161–1163)\x1dचोकान (1163–1165)\x1aईमान (1165–1166)\x1eनिन-आन (1166–1169)" + + "\x17काओ (1169–1171)\x1aशोअन (1171–1175)\x1aअंजन (1175–1177)\x1aजिशो (117" + + "7–1181)\x1aयोवा (1181–1182)\x1aजूऐई (1182–1184))जेंर्याकू (1184–1185)" + + "\x1dबूंजी (1185–1190)#केंक्यू (1190–1199)\x1aशोजी (1199–1201)#केन्निन (1" + + "201–1204)#जेंक्यू (1204–1206)\x1bकेन-ई (1206–1207)\x1dशोगेन (1207–1211))" + + "केंर्याकू (1211–1213)\x1dकेंपो (1213–1219) शोक्यू (1219–1222)\x14जू (1" + + "222–1224)#जेन्निन (1224–1225) कोरोकू (1225–1227)\x1dअंटैइ (1227–1229)" + + "\x1dकांकी (1229–1232)\x1aजोएई (1232–1233)&टेम्पूकू (1233–1234))बुंर्याकू" + + " (1234–1235)\x1dकाटेई (1235–1238))र्याकूनिन (1238–1239)\x18ईन-ओ (1239–12" + + "40)\x1dनिंजी (1240–1243) कांजेन (1243–1247)\x1aहोजी (1247–1249)\x1dकेंचो" + + " (1249–1256)\x1dकोगेन (1256–1257)\x1aशोका (1257–1259)\x1dशोगेन (1259–126" + + "0)\x1bबुन-ओ (1260–1261)\x1aकोचो (1261–1264)\x1bबुन-ई (1264–1275)\x1dकेंज" + + "ी (1275–1278)\x1aकोअन (1278–1288)\x14शो (1288–1293)\x1aईनिन (1293–1299" + + ")\x1aशोअन (1299–1302) केंजेन (1302–1303)\x1dकाजेन (1303–1306) टोकूजी (13" + + "06–1308)\x1dईंकेई (1308–1311)\x17ओचो (1311–1312)\x1aशोवा (1312–1317)\x1d" + + "बुंपो (1317–1319)\x1aजेनो (1319–1321)#जेंक्यो (1321–1324)\x1aशोचू (132" + + "4–1326) कारेकी (1326–1329)#जेंटोकू (1329–1331)\x1dगेंको (1331–1334) केम्" + + "मू (1334–1336)\x1dईंजेन (1336–1340) कोकोकू (1340–1346)\x1dशोहेई (1346–" + + "1370)#केंटोकू (1370–1372)\x1dबूंचो (1372–1375)\x1dटेंजो (1375–1379)&कोर्" + + "याकू (1379–1381)\x1aकोवा (1381–1384)\x1dजेंचू (1384–1392) मेटोकू (1384" + + "–1387)\x1dकाकेई (1387–1389)\x14कू (1389–1390) मेटोकू (1390–1394)\x14ओई" + + " (1394–1428)\x1aशोचो (1428–1429)\x1dईक्यो (1429–1441)&काकीत्सू (1441–144" + + "4)\x1eबुन-अन (1444–1449) होटोकू (1449–1452)&क्योटोकू (1452–1455)\x1aकोशो" + + " (1455–1457) चोरोकू (1457–1460)\x1dकांशो (1460–1466)\x1dबुंशो (1466–1467" + + ")\x1aओनिन (1467–1469)#बुन्मेई (1469–1487) चोक्यो (1487–1489) ईंटोकू (148" + + "9–1492)\x1aमेईओ (1492–1501)\x1dबुंकी (1501–1504)\x17ईशो (1504–1521)\x1dत" + + "ाईएई (1521–1528)&क्योरोकू (1528–1532) टेन्मन (1532–1555)\x1aकोजी (1555" + + "–1558)\x1dईरोकू (1558–1570)\x1dजेंकी (1570–1573)\x1dटेंशो (1573–1592)#" + + "बुंरोकू (1592–1596)\x1dकेईचो (1596–1615)\x1dजेनवा (1615–1624)\x1eकान-ए" + + "ई (1624–1644)\x1aशोहो (1644–1648)\x1dकेईआन (1648–1652)\x14शो (1652–165" + + "5))मेईर्याकू (1655–1658)\x1dमानजी (1658–1661)\x1dकनबुन (1661–1673)\x1aईं" + + "पो (1673–1681)\x1dटेंवा (1681–1684) जोक्यो (1684–1688)#जेंरोकू (1688–1" + + "704)\x1aहोएई (1704–1711) शोटूको (1711–1716) क्योहो (1716–1736) जेंबुन (1" + + "736–1741)\x1dकांपो (1741–1744) इंक्यो (1744–1748)\x1eकान-एन (1748–1751)&" + + "होर्याकू (1751–1764)\x1dमेईवा (1764–1772)\x1bअन-एई (1772–1781) टेनमेई " + + "(1781–1789) कांसेई (1789–1801) क्योवा (1801–1804)\x1dबुंका (1804–1818) ब" + + "ुंसेई (1818–1830)\x1dटेंपो (1830–1844)\x1aकोका (1844–1848)\x1aकाईए (18" + + "48–1854)\x1dअंसेई (1854–1860)\x1eमान-ईन (1860–1861)#बुंक्यौ (1861–1864)" + + "\x1dजेंजी (1864–1865)\x1aकेईओ (1865–1868)\x0cमेजी\x0fताईशो\x0cशोवा\x12हे" + + "ईसेई\x09सोम\x0cमंगळ\x09बुध\x0cगुरु\x0fशुक्र\x15मंगळवार\x12बुधवार\x15गु" + + "रुवार\x0cआषाढ\x0fभाद्र\x12आश्विन\x1eमार्गशीर्ष\x1bफेब्रुअरी\x0fमार्च" + + "\x12अप्रिल\x06मे\x09जुन\x0fअगस्ट\x1eसेप्टेम्बर\x15अक्टोबर\x18नोभेम्बर" + + "\x18डिसेम्बर\x0fमार्च\x06मे\x09जुन\x0fमार्च\x06मे\x09जुन\x09जेठ\x0cअसार" + + "\x0cसाउन\x09भदौ\x0cअसोज\x15कात्तिक\x0fमङसिर\x09पुस\x0fफागुन\x09चैत" + +var bucket46 string = "" + // Size: 21211 bytes + "\x18फर्वादिन$ओर्दिवेहेस्ट\x18खोरर्दाद\x09टिर\x12मोरदाद\x18शाहरीवर्\x0cमे" + + "हर\x09अवन\x0cअज़र\x06डे\x0cबहमन\x18ईस्फन्द्\x09युग\x0cवर्ष\x1cपिछला वर" + + "्ष\x13इस वर्ष\x19अगला वर्ष\x1a{0} वर्ष में\x1d{0} वर्ष पहले\x12तिमाही" + + "\"अंतिम तिमाही\x19इस तिमाही\x1fअगली तिमाही {0} तिमाही में){0} तिमाहियों " + + "में#{0} तिमाही पहले,{0} तिमाहियों पहले\x17{0} ति॰ में\x1a{0} ति॰ पहले" + + "\x09माह\x19पिछला माह\x10इस माह\x16अगला माह\x17{0} माह में\x1a{0} माह पहल" + + "े\x12सप्ताह\"पिछला सप्ताह\x19इस सप्ताह\x1fअगला सप्ताह {0} सप्ताह में#{" + + "0} सप्ताह पहले\x1d{0} के सप्ताह#माह का सप्ताह\x09दिन\x0fपरसों\x06कल\x06आ" + + "ज\x17{0} दिन में\x1a{0} दिन पहले\x1dवर्ष का दिन#सप्ताह का दिन,माह के क" + + "ार्यदिवस\"पिछला रविवार\x19इस रविवार\x1fअगला रविवार {0} रविवार में&{0} " + + "रविवार पूर्व\x1cपिछला रवि॰\x13इस रवि॰\x19अगला रवि॰\x1a{0} रवि॰ में {0}" + + " रवि॰ पूर्व\"पिछला सोमवार\x19इस सोमवार\x1fअगला सोमवार {0} सोमवार में&{0}" + + " सोमवार पूर्व\x1cपिछला सोम॰\x13इस सोम॰\x19अगला सोम॰\x1a{0} सोम॰ में {0} " + + "सोम॰ पूर्व%पिछला मंगलवार\x1cइस मंगलवार\"अगला मंगलवार#{0} मंगलवार में){" + + "0} मंगलवार पूर्व\x1fपिछला मंगल॰\x16इस मंगल॰\x1cअगला मंगल॰\x1d{0} मंगल॰ म" + + "ें#{0} मंगल॰ पूर्व\"पिछला बुधवार\x19इस बुधवार\x1fअगला बुधवार {0} बुधवा" + + "र में&{0} बुधवार पूर्व\x1cपिछला बुध॰\x13इस बुध॰\x19अगला बुध॰\x1a{0} बु" + + "ध॰ में {0} बुध॰ पूर्व%पिछला गुरुवार\x1cइस गुरुवार\"अगला गुरुवार#{0} गु" + + "रुवार में){0} गुरुवार पूर्व\x1fपिछला गुरु॰\x16इस गुरु॰\x1cअगला गुरु॰" + + "\x1d{0} गुरु॰ में#{0} गुरु॰ पूर्व(पिछला शुक्रवार\x1fइस शुक्रवार%अगला शुक" + + "्रवार&{0} शुक्रवार में,{0} शुक्रवार पूर्व\"पिछला शुक्र॰\x19इस शुक्र॰" + + "\x1fअगला शुक्र॰ {0} शुक्र॰ में&{0} शुक्र॰ पूर्व\"पिछला शनिवार\x19इस शनिव" + + "ार\x1fअगला शनिवार {0} शनिवार में&{0} शनिवार पूर्व\x1cपिछला शनि॰\x13इस " + + "शनि॰\x19अगला शनि॰\x1a{0} शनि॰ में {0} शनि॰ पूर्व\x0aपू/अ1पूर्वाह्न/अपर" + + "ाह्न\x0cघंटा\x13यह घंटा\x1a{0} घंटे में\x1d{0} घंटे पहले\x09घं॰\x17{0}" + + " घं॰ में\x1a{0} घं॰ पहले\x0cमिनट\x13यह मिनट\x1a{0} मिनट में\x1d{0} मिनट " + + "पहले\x09मि॰\x17{0} मि॰ में\x1a{0} मि॰ पहले\x0fसेकंड\x06अब\x1d{0} सेकंड" + + " में {0} सेकंड पहले\x09से॰\x17{0} से॰ में\x1a{0} से॰ पहले\x1fसमय क्षेत्र" + + "\x15क्षेत्र\x0d{0} समय {0} डेलाइट समय\x1a{0} मानक समय5समन्वित वैश्विक सम" + + "यDब्रिटिश ग्रीष्मकालीन समय&आइरिश मानक समय.अफ़गानिस्तान समय/मध्य अफ़्री" + + "का समय5पूर्वी अफ़्रीका समयBदक्षिण अफ़्रीका मानक समय5पश्चिम अफ़्रीका सम" + + "यBपश्चिम अफ़्रीका मानक समयZपश्चिम अफ़्रीका ग्रीष्मकालीन समय\x1fअलास्का" + + " समय/अलास्\u200dका मानक समय5अलास्\u200dका डेलाइट समय\x1cअमेज़न समय)अमेज़" + + "न मानक समयAअमेज़न ग्रीष्मकालीन समयKउत्तरी अमेरिकी केंद्रीय समयXउत्तरी " + + "अमेरिकी केंद्रीय मानक समय^उत्तरी अमेरिकी केंद्रीय डेलाइट समयEउत्तरी अम" + + "ेरिकी पूर्वी समयRउत्तरी अमेरिकी पूर्वी मानक समयXउत्तरी अमेरिकी पूर्वी " + + "डेलाइट समयHउत्तरी अमेरिकी माउंटेन समयUउत्तरी अमेरिकी माउंटेन मानक समय[" + + "उत्तरी अमेरिकी माउंटेन डेलाइट समयHउत्तरी अमेरिकी प्रशांत समयUउत्तरी अम" + + "ेरिकी प्रशांत मानक समय[उत्तरी अमेरिकी प्रशांत डेलाइट समय\x1fएनाडीयर सम" + + "य,एनाडीयर मानक समयDएनाडीयर ग्रीष्मकालीन समय\x16एपिआ समय#एपिआ मानक समय)" + + "एपिआ डेलाइट समय\x13अरब समय अरब मानक समय&अरब डेलाइट समय(अर्जेंटीना समय5" + + "अर्जेंटीना मानक समयMअर्जेंटीना ग्रीष्मकालीन समय>पश्चिमी अर्जेंटीना समय" + + "Kपश्चिमी अर्जेंटीना मानक समयcपश्चिमी अर्जेंटीना ग्रीष्मकालीन समय%आर्मेनि" + + "या समय2आर्मेनिया मानक समयJआर्मेनिया ग्रीष्मकालीन समय\"अटलांटिक समय/अटल" + + "ांटिक मानक समय5अटलांटिक डेलाइट समय;मध्य ऑस्ट्रेलियाई समयWऑस्\u200dट्रे" + + "लियाई केंद्रीय मानक समय]ऑस्\u200dट्रेलियाई केंद्रीय डेलाइट समय`ऑस्" + + "\u200dट्रेलियाई केंद्रीय पश्चिमी समयmऑस्\u200dट्रेलियाई केंद्रीय पश्चिमी" + + " मानक समयsऑस्\u200dट्रेलियाई केंद्रीय पश्चिमी डेलाइट समय>पूर्वी ऑस्ट्रेल" + + "िया समयQऑस्\u200dट्रेलियाई पूर्वी मानक समयWऑस्\u200dट्रेलियाई पूर्वी ड" + + "ेलाइट समयAपश्चिमी ऑस्ट्रेलिया समयQऑस्ट्रेलियाई पश्चिमी मानक समयWऑस्ट्र" + + "ेलियाई पश्चिमी डेलाइट समय%अज़रबैजान समय2अज़रबैजान मानक समयJअज़रबैजान ग" + + "्रीष्मकालीन समय\x1fअज़ोरेस समय,अज़ोरेस मानक समयDअज़ोरेस ग्रीष्मकालीन स" + + "मय(बांग्लादेश समय5बांग्लादेश मानक समयMबांग्लादेश ग्रीष्मकालीन समय\x19भ" + + "ूटान समय\"बोलीविया समय+ब्राज़ीलिया समय8ब्राज़ीलिया मानक समयPब्राज़ीलिय" + + "ा ग्रीष्मकालीन समय;ब्रूनेई दारूस्सलम समय केप वर्ड समय-केप वर्ड मानक सम" + + "यEकेप वर्ड ग्रीष्मकालीन समय)चामोरो मानक समय\x16चैथम समय#चैथम मानक समय)" + + "चैथम डेलाइट समय\x16चिली समय#चिली मानक समय;चिली ग्रीष्मकालीन समय\x13चीन" + + " समय चीन मानक समय&चीन डेलाइट समय%कॉइबाल्सन समय2कॉइबाल्सन मानक समयJकॉइबाल" + + "्सन ग्रीष्मकालीन समय/क्रिसमस द्वीप समय5कोकोस द्वीपसमूह समय\"कोलंबिया स" + + "मय/कोलंबिया मानक समयGकोलंबिया ग्रीष्मकालीन समय/कुक द्वीपसमूह समय<कुक द" + + "्वीपसमूह मानक समयgकुक द्वीपसमूह अर्द्ध ग्रीष्मकालीन समय\x1cक्यूबा समय)" + + "क्यूबा मानक समय/क्यूबा डेलाइट समय\x19डेविस समय?ड्यूमोंट डी अर्विले समय" + + ",पूर्वी तिमोर समय)ईस्टर द्वीप समय6ईस्टर द्वीप मानक समयNईस्टर द्वीप ग्रीष" + + "्मकालीन समय\"इक्वाडोर समय,मध्य यूरोपीय समय9मध्य यूरोपीय मानक समयWमध्" + + "\u200dय यूरोपीय ग्रीष्\u200dमकालीन समय2पूर्वी यूरोपीय समय?पूर्वी यूरोपीय" + + " मानक समयWपूर्वी यूरोपीय ग्रीष्मकालीन समय?अग्र पूर्वी यूरोपीय समय5पश्चिम" + + "ी यूरोपीय समयBपश्चिमी यूरोपीय मानक समय]पश्चिमी यूरोपीय ग्रीष्\u200dमका" + + "लीन समय>फ़ॉकलैंड द्वीपसमूह समयKफ़ॉकलैंड द्वीपसमूह मानक समयcफ़ॉकलैंड द्" + + "वीपसमूह ग्रीष्मकालीन समय\x19फ़िजी समय&फ़िजी मानक समय>फ़िजी ग्रीष्मकाली" + + "न समय2फ़्रेंच गुयाना समय[दक्षिणी फ़्रांस और अंटार्कटिक समय,गैलापेगोस क" + + "ा समय\x1fगैंबियर समय\"जॉर्जिया समय/जॉर्जिया मानक समयGजॉर्जिया ग्रीष्मक" + + "ालीन समय>गिल्बर्ट द्वीपसमूह समय/ग्रीनविच मीन टाइम8पूर्वी ग्रीनलैंड समय" + + "Eपूर्वी ग्रीनलैंड मानक समय]पूर्वी ग्रीनलैंड ग्रीष्मकालीन समय;पश्चिमी ग्र" + + "ीनलैंड समयHपश्चिमी ग्रीनलैंड मानक समय`पश्चिमी ग्रीनलैंड ग्रीष्मकालीन स" + + "मय&खाड़ी मानक समय\x1cगुयाना समय.हवाई–आल्यूशन समय;हवाई–आल्यूशन मानक समय" + + "Aहवाई–आल्यूशन डेलाइट समय#हाँग काँग समय0हाँग काँग मानक समयHहाँग काँग ग्री" + + "ष्मकालीन समय\x19होव्ड समय&होव्ड मानक समय>होव्ड ग्रीष्मकालीन समय)भारतीय" + + " मानक समय,हिंद महासागर समय%इंडोचाइना समय5मध्य इंडोनेशिया समय;पूर्वी इंडो" + + "नेशिया समय>पश्चिमी इंडोनेशिया समय\x16ईरान समय#ईरान मानक समय)ईरान डेलाइ" + + "ट समय(इर्कुत्स्क समय5इर्कुत्स्क मानक समयMइर्कुत्स्क ग्रीष्मकालीन समय" + + "\x1fइज़राइल समय,इज़राइल मानक समय2इज़राइल डेलाइट समय\x19जापान समय&जापान म" + + "ानक समय,जापान डेलाइट समयSपेट्रोपेवलास्क-कैमचात्सकी समय`पेट्रोपेवलास्क-" + + "कैमचात्सकी मानक समयxपेट्रोपेवलास्क-कैमचात्सकी ग्रीष्मकालीन समय8पूर्व क" + + "ज़ाखस्तान समय;पश्चिम कज़ाखस्तान समय\x1fकोरियाई समय,कोरियाई मानक समय2को" + + "रियाई डेलाइट समय\x1cकोसराए समय7क्रास्नोयार्स्क समयDक्रास्नोयार्स्क मान" + + "क समय\\क्रास्नोयार्स्क ग्रीष्मकालीन समय.किर्गिस्\u200dतान समय2लाइन द्व" + + "ीपसमूह समय&लॉर्ड होवे समय3लॉर्ड होवे मानक समय9लॉर्ड होवे डेलाइट समय/मक" + + "्वारी द्वीप समय\x1fमागादान समय,मागादान मानक समयDमागादान ग्रीष्मकालीन स" + + "मय\x1fमलेशिया समय\x1cमालदीव समय\"मार्केसस समय8मार्शल द्वीपसमूह समय\x1c" + + "मॉरीशस समय)मॉरीशस मानक समयAमॉरीशस ग्रीष्मकालीन समय\x1cमाव्सन समयHउत्तर" + + " पश्चिमी मेक्सिको समयUउत्तर पश्चिमी मेक्सिको मानक समय[उत्तर पश्चिमी मेक्" + + "सिको डेलाइट समय8मेक्सिकन प्रशांत समयEमेक्सिकन प्रशांत मानक समयKमेक्सिक" + + "न प्रशांत डेलाइट समय#उलान बटोर समय0उलान बटोर मानक समयHउलान बटोर ग्रीष्" + + "मकालीन समय\x1cमॉस्को समय)मॉस्को मानक समयAमॉस्को ग्रीष्मकालीन समय\"म्या" + + "ंमार समय\x16नौरू समय\x19नेपाल समय5न्यू कैलेडोनिया समयBन्यू कैलेडोनिया " + + "मानक समयZन्यू कैलेडोनिया ग्रीष्मकालीन समय+न्यूज़ीलैंड समय8न्यूज़ीलैंड " + + "मानक समय>न्यूज़ीलैंड डेलाइट समय4न्यूफ़ाउंडलैंड समयAन्यूफ़ाउंडलैंड मानक" + + " समयGन्यूफ़ाउंडलैंड डेलाइट समय\x16नीयू समय/नॉरफ़ॉक द्वीप समयKफ़र्नांर्डो" + + " डे नोरोन्हा समयXफ़र्नांर्डो डे नोरोन्हा मानक समयpफ़र्नांर्डो डे नोरोन्ह" + + "ा ग्रीष्मकालीन समय1नोवोसिबिर्स्क समय>नोवोसिबिर्स्क मानक समयVनोवोसिबिर्" + + "स्क ग्रीष्मकालीन समय\x1cओम्स्क समय)ओम्स्क मानक समयAओम्स्क ग्रीष्मकालीन" + + " समय%पाकिस्तान समय2पाकिस्तान मानक समयJपाकिस्तान ग्रीष्मकालीन समय\x16पलाउ" + + " समय3पापुआ न्यू गिनी समय\"पैराग्वे समय/पैराग्वे मानक समयGपैराग्वे ग्रीष्" + + "मकालीन समय\x16पेरू समय#पेरू मानक समय;पेरू ग्रीष्मकालीन समय\"फ़िलिपीन स" + + "मय/फ़िलिपीन मानक समयGफ़िलिपीन ग्रीष्मकालीन समय>फ़ीनिक्स द्वीपसमूह समयI" + + "सेंट पिएरे और मिक्वेलान समयVसेंट पिएरे और मिक्वेलान मानक समय\\सेंट पिए" + + "रे और मिक्वेलान डेलाइट समय\"पिटकैर्न समय\x1cपोनापे समय(प्योंगयांग समय" + + "\"रीयूनियन समय\x1cरोथेरा समय\x1cसखालिन समय)सखालिन मानक समयAसखालिन ग्रीष्" + + "मकालीन समय\x19समारा समय&समारा मानक समय>समारा ग्रीष्मकालीन समय\x16समोआ " + + "समय#समोआ मानक समय)समोआ डेलाइट समय\x1fसेशेल्स समय\"सिंगापुर समय8सोलोमन " + + "द्वीपसमूह समय8दक्षिणी जॉर्जिया समय\x1fसूरीनाम समय\x1cस्योवा समय\x1cताह" + + "िती समय\x19ताइपे समय&ताइपे मानक समय,ताइपे डेलाइट समय+ताजिकिस्तान समय" + + "\x1fटोकेलाऊ समय\x19टोंगा समय&टोंगा मानक समय>टोंगा ग्रीष्मकालीन समय\x13चु" + + "क समय4तुर्कमेनिस्तान समयAतुर्कमेनिस्तान मानक समयYतुर्कमेनिस्तान ग्रीष्" + + "मकालीन समय\x1cतुवालू समय\x1fउरुग्वे समय,उरुग्वे मानक समयDउरुग्वे ग्रीष" + + "्मकालीन समय1उज़्बेकिस्तान समय>उज़्बेकिस्तान मानक समयVउज़्बेकिस्तान ग्र" + + "ीष्मकालीन समय\x1cवनुआतू समय)वनुआतू मानक समयAवनुआतू ग्रीष्मकालीन समय(वे" + + "नेज़ुएला समय1व्लादिवोस्तोक समय>व्लादिवोस्तोक मानक समयVव्लादिवोस्तोक ग्" + + "रीष्मकालीन समय+वोल्गोग्राड समय8वोल्गोग्राड मानक समयPवोल्गोग्राड ग्रीष्" + + "मकालीन समय\x1fवोस्तोक समय#वेक द्वीप समय<वालिस और फ़्यूचूना समय%याकुत्स" + + "्क समय2याकुत्स्क मानक समयJयाकुत्स्क ग्रीष्मकालीन समय1येकातेरिनबर्ग समय" + + ">येकातेरिनबर्ग मानक समयVयेकातेरिनबर्ग ग्रीष्मकालीन समय\x0a{0} (+१)\x0a{0" + + "} (+०)" + +var bucket47 string = "" + // Size: 14605 bytes + "\x0bE, d. M. y.\x08d. M. y.\x12EEEE, d. MMMM y. G\x0cd. MMMM y. G\x0bd. " + + "MMM y. G\x10dd. MM. y. GGGGG\x03sij\x04velj\x04ožu\x03tra\x03svi\x03lip" + + "\x03srp\x03kol\x03ruj\x03lis\x03stu\x03pro\x09siječnja\x08veljače\x07ožu" + + "jka\x07travnja\x07svibnja\x06lipnja\x06srpnja\x08kolovoza\x05rujna\x09li" + + "stopada\x09studenoga\x08prosinca\x09siječanj\x08veljača\x07ožujak\x07tra" + + "vanj\x07svibanj\x06lipanj\x06srpanj\x07kolovoz\x05rujan\x08listopad\x07s" + + "tudeni\x08prosinac\x031kv\x032kv\x033kv\x034kv\x061. kv.\x062. kv.\x063." + + " kv.\x064. kv.\x05noću\x0dposlije podne\x0cprije Krista\x0eposlije Krist" + + "a\x07pr. Kr.\x09pr. n. e.\x07po. Kr.\x05n. e.\x0add. MM. y.\x0ad. M. y. " + + "G\x0ed. M. y. GGGGG\x11Taika (645.-650.)\x13Hakuchi (650.-671.)\x13Hakuh" + + "ō (672.-686.)\x13Shuchō (686.-701.)\x12Taihō (701.-704.)\x11Keiun (704." + + "-708.)\x11Wadō (708.-715.)\x11Reiki (715.-717.)\x12Yōrō (717.-724.)\x11J" + + "inki (724.-729.)\x13Tempyō (729.-749.)\x1aTempyō-kampō (749.-749.)\x1bTe" + + "mpyō-shōhō (749.-757.)\x19Tempyō-hōji (757.-765.)\x19Temphō-jingo (765.-" + + "767.)\x17Jingo-keiun (767.-770.)\x11Hōki (770.-780.)\x12Ten-ō (781.-782." + + ")\x13Enryaku (782.-806.)\x12Daidō (806.-810.)\x12Kōnin (810.-824.)\x13Te" + + "nchō (824.-834.)\x11Jōwa (834.-848.)\x11Kajō (848.-851.)\x11Ninju (851.-" + + "854.)\x11Saiko (854.-857.)\x12Tennan (857.-859.)\x12Jōgan (859.-877.)" + + "\x12Genkei (877.-885.)\x11Ninna (885.-889.)\x13Kampyō (889.-898.)\x13Shō" + + "tai (898.-901.)\x10Engi (901.-923.)\x12Enchō (923.-931.)\x13Shōhei (931." + + "-938.)\x13Tengyō (938.-947.)\x14Tenryaku (947.-957.)\x13Tentoku (957.-96" + + "1.)\x10Ōwa (961.-964.)\x12Kōhō (964.-968.)\x10Anna (968.-970.)\x13Tenrok" + + "u (970.-973.)\x12Ten-en (973.-976.)\x12Jōgen (976.-978.)\x12Tengen (978." + + "-983.)\x11Eikan (983.-985.)\x11Kanna (985.-987.)\x11Ei-en (987.-989.)" + + "\x10Eiso (989.-990.)\x15Shōryaku (990.-995.)\x14Chōtoku (995.-999.)\x14C" + + "hōhō (999.-1004.)\x14Kankō (1004.-1012.)\x14Chōwa (1012.-1017.)\x14Kanni" + + "n (1017.-1021.)\x12Jian (1021.-1024.)\x13Manju (1024.-1028.)\x15Chōgen (" + + "1028.-1037.)\x17Chōryaku (1037.-1040.)\x16Chōkyū (1040.-1044.)\x15Kantok" + + "u (1044.-1046.)\x14Eishō (1046.-1053.)\x13Tengi (1053.-1058.)\x14Kōhei (" + + "1058.-1065.)\x15Jiryaku (1065.-1069.)\x14Enkyū (1069.-1074.)\x14Shōho (1" + + "074.-1077.)\x17Shōryaku (1077.-1081.)\x12Eiho (1081.-1084.)\x14Ōtoku (10" + + "84.-1087.)\x13Kanji (1087.-1094.)\x12Kaho (1094.-1096.)\x14Eichō (1096.-" + + "1097.)\x16Shōtoku (1097.-1099.)\x13Kōwa (1099.-1104.)\x14Chōji (1104.-11" + + "06.)\x14Kashō (1106.-1108.)\x14Tennin (1108.-1110.)\x14Ten-ei (1110.-111" + + "3.)\x14Eikyū (1113.-1118.)\x14Gen-ei (1118.-1120.)\x12Hoan (1120.-1124.)" + + "\x13Tenji (1124.-1126.)\x13Daiji (1126.-1131.)\x15Tenshō (1131.-1132.)" + + "\x16Chōshō (1132.-1135.)\x12Hoen (1135.-1141.)\x12Eiji (1141.-1142.)\x13" + + "Kōji (1142.-1144.)\x14Tenyō (1144.-1145.)\x14Kyūan (1145.-1151.)\x14Ninp" + + "ei (1151.-1154.)\x14Kyūju (1154.-1156.)\x13Hogen (1156.-1159.)\x13Heiji " + + "(1159.-1160.)\x15Eiryaku (1160.-1161.)\x12Ōho (1161.-1163.)\x15Chōkan (1" + + "163.-1165.)\x13Eiman (1165.-1166.)\x14Nin-an (1166.-1169.)\x12Kaō (1169." + + "-1171.)\x14Shōan (1171.-1175.)\x13Angen (1175.-1177.)\x14Jishō (1177.-11" + + "81.)\x13Yōwa (1181.-1182.)\x12Juei (1182.-1184.)\x16Genryuku (1184.-1185" + + ".)\x13Bunji (1185.-1190.)\x15Kenkyū (1190.-1199.)\x14Shōji (1199.-1201.)" + + "\x14Kennin (1201.-1204.)\x15Genkyū (1204.-1206.)\x14Ken-ei (1206.-1207.)" + + "\x15Shōgen (1207.-1211.)\x16Kenryaku (1211.-1213.)\x14Kenpō (1213.-1219." + + ")\x16Shōkyū (1219.-1222.)\x13Jōō (1222.-1224.)\x14Gennin (1224.-1225.)" + + "\x14Karoku (1225.-1227.)\x13Antei (1227.-1229.)\x13Kanki (1229.-1232.)" + + "\x13Jōei (1232.-1233.)\x15Tempuku (1233.-1234.)\x16Bunryaku (1234.-1235." + + ")\x13Katei (1235.-1238.)\x16Ryakunin (1238.-1239.)\x13En-ō (1239.-1240.)" + + "\x13Ninji (1240.-1243.)\x14Kangen (1243.-1247.)\x13Hōji (1247.-1249.)" + + "\x15Kenchō (1249.-1256.)\x14Kōgen (1256.-1257.)\x14Shōka (1257.-1259.)" + + "\x15Shōgen (1259.-1260.)\x14Bun-ō (1260.-1261.)\x15Kōchō (1261.-1264.)" + + "\x14Bun-ei (1264.-1275.)\x13Kenji (1275.-1278.)\x13Kōan (1278.-1288.)" + + "\x14Shōō (1288.-1293.)\x13Einin (1293.-1299.)\x14Shōan (1299.-1302.)\x14" + + "Kengen (1302.-1303.)\x13Kagen (1303.-1306.)\x14Tokuji (1306.-1308.)\x13E" + + "nkei (1308.-1311.)\x14Ōchō (1311.-1312.)\x14Shōwa (1312.-1317.)\x14Bunpō" + + " (1317.-1319.)\x13Genō (1319.-1321.)\x15Genkyō (1321.-1324.)\x16Shōchū (" + + "1324.-1326.)\x14Kareki (1326.-1329.)\x15Gentoku (1329.-1331.)\x14Genkō (" + + "1331.-1334.)\x13Kemmu (1334.-1336.)\x13Engen (1336.-1340.)\x15Kōkoku (13" + + "40.-1346.)\x15Shōhei (1346.-1370.)\x15Kentoku (1370.-1372.)\x15Bunchū (1" + + "372.-1375.)\x13Tenju (1375.-1379.)\x16Kōryaku (1379.-1381.)\x13Kōwa (138" + + "1.-1384.)\x15Genchū (1384.-1392.)\x15Meitoku (1384.-1387.)\x13Kakei (138" + + "7.-1389.)\x13Kōō (1389.-1390.)\x15Meitoku (1390.-1394.)\x12Ōei (1394.-14" + + "28.)\x16Shōchō (1428.-1429.)\x14Eikyō (1429.-1441.)\x15Kakitsu (1441.-14" + + "44.)\x14Bun-an (1444.-1449.)\x15Hōtoku (1449.-1452.)\x16Kyōtoku (1452.-1" + + "455.)\x15Kōshō (1455.-1457.)\x16Chōroku (1457.-1460.)\x15Kanshō (1460.-1" + + "466.)\x15Bunshō (1466.-1467.)\x13Ōnin (1467.-1469.)\x14Bunmei (1469.-148" + + "7.)\x16Chōkyō (1487.-1489.)\x14Entoku (1489.-1492.)\x13Meiō (1492.-1501." + + ")\x13Bunki (1501.-1504.)\x14Eishō (1504.-1521.)\x13Taiei (1521.-1528.)" + + "\x16Kyōroku (1528.-1532.)\x14Tenmon (1532.-1555.)\x13Kōji (1555.-1558.)" + + "\x14Eiroku (1558.-1570.)\x13Genki (1570.-1573.)\x15Tenshō (1573.-1592.)" + + "\x15Bunroku (1592.-1596.)\x15Keichō (1596.-1615.)\x13Genwa (1615.-1624.)" + + "\x14Kan-ei (1624.-1644.)\x14Shōho (1644.-1648.)\x13Keian (1648.-1652.)" + + "\x14Shōō (1652.-1655.)\x16Meiryaku (1655.-1658.)\x13Manji (1658.-1661.)" + + "\x14Kanbun (1661.-1673.)\x13Enpō (1673.-1681.)\x13Tenwa (1681.-1684.)" + + "\x15Jōkyō (1684.-1688.)\x15Genroku (1688.-1704.)\x13Hōei (1704.-1711.)" + + "\x16Shōtoku (1711.-1716.)\x15Kyōhō (1716.-1736.)\x14Genbun (1736.-1741.)" + + "\x14Kanpō (1741.-1744.)\x14Enkyō (1744.-1748.)\x14Kan-en (1748.-1751.)" + + "\x16Hōryaku (1751.-1764.)\x13Meiwa (1764.-1772.)\x13An-ei (1772.-1781.)" + + "\x14Tenmei (1781.-1789.)\x14Kansei (1789.-1801.)\x14Kyōwa (1801.-1804.)" + + "\x13Bunka (1804.-1818.)\x14Bunsei (1818.-1830.)\x14Tenpō (1830.-1844.)" + + "\x13Kōka (1844.-1848.)\x12Kaei (1848.-1854.)\x13Ansei (1854.-1860.)\x14M" + + "an-en (1860.-1861.)\x15Bunkyū (1861.-1864.)\x13Genji (1864.-1865.)\x13Ke" + + "iō (1865.-1868.)\x05Meiji\x07Taishō\x06Shōwa\x06Heisei\x0cprošle god." + + "\x08ove god.\x0esljedeće god.\x0aprošle g.\x06ove g.\x0csljedeće g.\x0fp" + + "rošli kvartal\x0covaj kvartal\x11sljedeći kvartal\x0bprošli kv.\x08ovaj " + + "kv.\x0dsljedeći kv.\x0bprošli mj.\x08ovaj mj.\x0dsljedeći mj.\x06tjedan" + + "\x0eprošli tjedan\x0bovaj tjedan\x10sljedeći tjedan\x0dza {0} tjedan\x0d" + + "za {0} tjedna\x0eza {0} tjedana\x10prije {0} tjedan\x10prije {0} tjedna" + + "\x11prije {0} tjedana\x0dtjedan od {0}\x03tj.\x0bprošli tj.\x08ovaj tj." + + "\x0dsljedeći tj.\x0aza {0} tj.\x0dprije {0} tj.\x10tjedan u mjesecu\x09t" + + "j. u mj.\x0dtj. u mjesecu\x08za {0} d\x0bprije {0} d\x0cdan u tjednu\x0b" + + "dan u tjed.\x09dan u tj.\x13radni dan u mjesecu\x0fradni dan u mj.\x0cr." + + " dan u mj.\x0bprije {0} h\x0dprije {0} min\x03sad\x0bprije {0} s\x1dkoor" + + "dinirano svjetsko vrijeme\x18britansko ljetno vrijeme\x18irsko standardn" + + "o vrijeme\x0cAcre vrijeme\x17Acre standardno vrijeme\x13Acre ljetno vrij" + + "eme\x15afganistansko vrijeme\x17srednjoafričko vrijeme\x18istočnoafričko" + + " vrijeme\x16južnoafričko vrijeme\x17zapadnoafričko vrijeme\"zapadnoafrič" + + "ko standardno vrijeme\x1ezapadnoafričko ljetno vrijeme\x10aljaško vrijem" + + "e\x1baljaško standardno vrijeme\x17aljaško ljetno vrijeme\x11altmajsko v" + + "rijeme\x1caltmajsko standardno vrijeme\x18altmajsko ljetno vrijeme\x11am" + + "azonsko vrijeme\x1camazonsko standardno vrijeme\x18amazonsko ljetno vrij" + + "eme\x12središnje vrijeme\x1dsredišnje standardno vrijeme\x19središnje lj" + + "etno vrijeme\x10istočno vrijeme\x1bistočno standardno vrijeme\x17istočno" + + " ljetno vrijeme\x11planinsko vrijeme\x1cplaninsko standardno vrijeme\x18" + + "planinsko ljetno vrijeme\x12pacifičko vrijeme\x1dpacifičko standardno vr" + + "ijeme\x19pacifičko ljetno vrijeme\x11anadirsko vrijeme\x1canadirsko stan" + + "dardno vrijeme\x18anadirsko ljetno vrijeme\x0dvrijeme Apije\x18standardn" + + "o vrijeme Apije\x14ljetno vrijeme Apije\x13vrijeme grada Aktau\x1estanda" + + "rdno vrijeme grada Aktau\x1aljetno vrijeme grada Aktau\x14vrijeme grada " + + "Aktobe\x1fstandardno vrijeme grada Aktobe\x1bljetno vrijeme grada Aktobe" + + "\x0farapsko vrijeme\x1aarapsko standardno vrijeme\x16arapsko ljetno vrij" + + "eme\x13argentinsko vrijeme\x1eargentinsko standardno vrijeme\x1aargentin" + + "sko ljetno vrijeme\x1azapadnoargentinsko vrijeme%zapadnoargentinsko stan" + + "dardno vrijeme!zapadnoargentinsko ljetno vrijeme\x10armensko vrijeme\x1b" + + "armensko standardno vrijeme\x17armensko ljetno vrijeme\x11atlantsko vrij" + + "eme\x1catlantsko standardno vrijeme\x18atlantsko ljetno vrijeme\x19sredn" + + "joaustralsko vrijeme$srednjoaustralsko standardno vrijeme srednjoaustral" + + "sko ljetno vrijeme%australsko središnje zapadno vrijeme0australsko sredi" + + "šnje zapadno standardno vrijeme,australsko središnje zapadno ljetno vri" + + "jeme\x1aistočnoaustralsko vrijeme%istočnoaustralsko standardno vrijeme!i" + + "stočnoaustralsko ljetno vrijeme\x19zapadnoaustralsko vrijeme$zapadnoaust" + + "ralsko standardno vrijeme zapadnoaustralsko ljetno vrijeme\x17azerbajdža" + + "nsko vrijeme\"azerbajdžansko standardno vrijeme\x1eazerbajdžansko ljetno" + + " vrijeme\x0fazorsko vrijeme\x1aazorsko standardno vrijeme\x16azorsko lje" + + "tno vrijeme\x14bangladeško vrijeme\x1fbangladeško standardno vrijeme\x1b" + + "bangladeško ljetno vrijeme\x10butansko vrijeme\x12bolivijsko vrijeme\x13" + + "brazilijsko vrijeme\x1ebrazilijsko standardno vrijeme\x1abrazilijsko lje" + + "tno vrijeme\x1cvrijeme za Brunej Darussalam\x1cvrijeme Zelenortskog otoč" + + "ja'standardno vrijeme Zelenortskog otočja#ljetno vrijeme Zelenortskog ot" + + "očja\x0fvrijeme Caseyja\x1bstandardno vrijeme Chamorra\x10vrijeme Chatha" + + "ma\x1bstandardno vrijeme Chathama\x17ljetno vrijeme Chathama\x12čileansk" + + "o vrijeme\x1dčileansko standardno vrijeme\x19čileansko ljetno vrijeme" + + "\x0fkinesko vrijeme\x1akinesko standardno vrijeme\x16kinesko ljetno vrij" + + "eme\x15choibalsansko vrijeme choibalsansko standardno vrijeme\x1cchoibal" + + "sansko ljetno vrijeme\x18vrijeme Božićnog otoka\x17vrijeme Kokosovih oto" + + "ka\x13kolumbijsko vrijeme\x1ekolumbijsko standardno vrijeme\x1akolumbijs" + + "ko ljetno vrijeme\x16vrijeme Cookovih otoka!standardno vrijeme Cookovih " + + "otoka.Cookovi otoci, polusatni pomak, ljetno vrijeme\x10kubansko vrijeme" + + "\x1bkubansko standardno vrijeme\x17kubansko ljetno vrijeme\x0evrijeme Da" + + "visa\x1bvrijeme Dumont-d’Urvillea\x18istočnotimorsko vrijeme\x18vrijeme " + + "Uskršnjeg otoka#standardno vrijeme Uskršnjeg otoka\x1fljetno vrijeme Usk" + + "ršnjeg otoka\x12ekvadorsko vrijeme\x17srednjoeuropsko vrijeme\"srednjoeu" + + "ropsko standardno vrijeme\x1esrednjoeuropsko ljetno vrijeme\x18istočnoeu" + + "ropsko vrijeme#istočnoeuropsko standardno vrijeme\x1fistočnoeuropsko lje" + + "tno vrijeme\x1fdalekoistočno europsko vrijeme\x17zapadnoeuropsko vrijeme" + + "\"zapadnoeuropsko standardno vrijeme\x1ezapadnoeuropsko ljetno vrijeme" + + "\x13falklandsko vrijeme\x1efalklandsko standardno vrijeme\x1afalklandsko" + + " ljetno vrijeme\x10vrijeme Fidžija\x1bstandardno vrijeme Fidžija\x17ljet" + + "no vrijeme Fidžija\x19vrijeme Francuske Gvajane&južnofrancusko i antarkt" + + "ičko vrijeme\x12vrijeme Galapagosa\x10vrijeme Gambiera\x11gruzijsko vrij" + + "eme\x1cgruzijsko standardno vrijeme\x18gruzijsko ljetno vrijeme\x19vrije" + + "me Gilbertovih otoka\x13univerzalno vrijeme\x1bistočnogrenlandsko vrijem" + + "e&istočnogrenlandsko standardno vrijeme\"istočnogrenlandsko ljetno vrije" + + "me\x1azapadnogrenlandsko vrijeme%zapadnogrenlandsko standardno vrijeme!z" + + "apadnogrenlandsko ljetno vrijeme\x1aguamsko standardno vrijeme\x1czaljev" + + "sko standardno vrijeme\x11gvajansko vrijeme\x19havajsko-aleutsko vrijeme" + + "$havajsko-aleutsko standardno vrijeme havajsko-aleutsko ljetno vrijeme" + + "\x13hongkonško vrijeme\x1ehongkonško standardno vrijeme\x1ahongkonško lj" + + "etno vrijeme\x0fhovdsko vrijeme\x1ahovdsko standardno vrijeme\x16hovdsko" + + " ljetno vrijeme\x10indijsko vrijeme\x18vrijeme Indijskog oceana\x13indok" + + "inesko vrijeme\x1bsrednjoindonezijsko vrijeme\x1cistočnoindonezijsko vri" + + "jeme\x1bzapadnoindonezijsko vrijeme\x0firansko vrijeme\x1airansko standa" + + "rdno vrijeme\x16iransko ljetno vrijeme\x10irkutsko vrijeme\x1birkutsko s" + + "tandardno vrijeme\x17irkutsko ljetno vrijeme\x11izraelsko vrijeme\x1cizr" + + "aelsko standardno vrijeme\x18izraelsko ljetno vrijeme\x10japansko vrijem" + + "e\x1bjapansko standardno vrijeme\x17japansko ljetno vrijeme Petropavlovs" + + "k-kamčatsko vrijeme+Petropavlovsk-kamčatsko standardno vrijeme'Petropavl" + + "ovsk-kamčatsko ljetno vrijeme\x1cistočnokazahstansko vrijeme\x1bzapadnok" + + "azahstansko vrijeme\x10korejsko vrijeme\x1bkorejsko standardno vrijeme" + + "\x17korejsko ljetno vrijeme\x0evrijeme Kosrae\x14krasnojarsko vrijeme" + + "\x1fkrasnojarsko standardno vrijeme\x1bkrasnojarsko ljetno vrijeme\x14ki" + + "rgistansko vrijeme\x11lankansko vrijeme\x12vrijeme Otoka Line\x17vrijeme" + + " otoka Lord Howe\"standardno vrijeme otoka Lord Howe\x1eljetno vrijeme o" + + "toka Lord Howe\x10makaosko vrijeme\x1bstandardno makaosko vrijeme\x17lje" + + "tno makaosko vrijeme\x17vrijeme otoka Macquarie\x12magadansko vrijeme" + + "\x1dmagadansko standardno vrijeme\x19magadansko ljetno vrijeme\x12malezi" + + "jsko vrijeme\x11maldivsko vrijeme\x14markižansko vrijeme\x19vrijeme Marš" + + "alovih Otoka\x13vrijeme Mauricijusa\x1estandardno vrijeme Mauricijusa" + + "\x1aljetno vrijeme Mauricijusa\x11mawsonsko vrijeme sjeverozapadno meksi" + + "čko vrijeme+sjeverozapadno meksičko standardno vrijeme'sjeverozapadno m" + + "eksičko ljetno vrijeme\x1cmeksičko pacifičko vrijeme'meksičko pacifičko " + + "standardno vrijeme#meksičko pacifičko ljetno vrijeme\x14ulanbatorsko vri" + + "jeme\x1fulanbatorsko standardno vrijeme\x1bulanbatorsko ljetno vrijeme" + + "\x11moskovsko vrijeme\x1cmoskovsko standardno vrijeme\x18moskovsko ljetn" + + "o vrijeme\x12mjanmarsko vrijeme\x0evrijeme Naurua\x10nepalsko vrijeme" + + "\x17vrijeme Nove Kaledonije\"standardno vrijeme Nove Kaledonije\x1eljetn" + + "o vrijeme Nove Kaledonije\x15novozelandsko vrijeme novozelandsko standar" + + "dno vrijeme\x1cnovozelandsko ljetno vrijeme\x17newfoundlandsko vrijeme\"" + + "newfoundlandsko standardno vrijeme\x1enewfoundlandsko ljetno vrijeme\x0d" + + "vrijeme Niuea\x15vrijeme Otoka Norfolk!vrijeme grada Fernando de Noronha" + + ",standardno vrijeme grada Fernando de Noronha(ljetno vrijeme grada Ferna" + + "ndo de Noronha!vrijeme Sjevernomarijanskih Otoka\x14novosibirsko vrijeme" + + "\x1fnovosibirsko standardno vrijeme\x1bnovosibirsko ljetno vrijeme\x0dom" + + "sko vrijeme\x18omsko standardno vrijeme\x14omsko ljetno vrijeme\x13pakis" + + "tansko vrijeme\x1epakistansko standardno vrijeme\x1apakistansko ljetno v" + + "rijeme\x0evrijeme Palaua\x1avrijeme Papue Nove Gvineje\x13paragvajsko vr" + + "ijeme\x1eparagvajsko standardno vrijeme\x1aparagvajsko ljetno vrijeme" + + "\x11peruansko vrijeme\x1cperuansko standardno vrijeme\x18peruansko ljetn" + + "o vrijeme\x12filipinsko vrijeme\x1dfilipinsko standardno vrijeme\x19fili" + + "pinsko ljetno vrijeme\x15vrijeme Otoka Phoenix vrijeme za Sveti Petar i " + + "Mikelon+standardno vrijeme za Sveti Petar i Mikelon'ljetno vrijeme za Sv" + + "eti Petar i Mikelon\x11vrijeme Pitcairna\x0fvrijeme Ponapea\x14pjongjanš" + + "ko vrijeme\x17vrijeme grada Kizilorde\"standardno vrijeme grada Kizilord" + + "e\x1eljetno vrijeme grada Kizilorde\x10vrijeme Reuniona\x0fvrijeme Rothe" + + "re\x12sahalinsko vrijeme\x1dsahalinsko standardno vrijeme\x19sahalinsko " + + "ljetno vrijeme\x10samarsko vrijeme\x1bsamarsko standardno vrijeme\x17sam" + + "arsko ljetno vrijeme\x11samoansko vrijeme\x1csamoansko standardno vrijem" + + "e\x18samoansko ljetno vrijeme\x12sejšelsko vrijeme\x13singapursko vrijem" + + "e\x19vrijeme Salomonskih Otoka\x17vrijeme Južne Georgije\x12surinamsko v" + + "rijeme\x0dvrijeme Syowe\x10vrijeme Tahitija\x11tajpeško vrijeme\x1ctajpe" + + "ško standardno vrijeme\x18tajpeško ljetno vrijeme\x17tadžikistansko vri" + + "jeme\x10vrijeme Tokelaua\x0dvrijeme Tonge\x18standardno vrijeme Tonge" + + "\x14ljetno vrijeme Tonge\x0evrijeme Chuuka\x17turkmenistansko vrijeme\"t" + + "urkmenistansko standardno vrijeme\x1eturkmenistansko ljetno vrijeme\x0fv" + + "rijeme Tuvalua\x12urugvajsko vrijeme\x1durugvajsko standardno vrijeme" + + "\x19urugvajsko ljetno vrijeme\x15uzbekistansko vrijeme uzbekistansko sta" + + "ndardno vrijeme\x1cuzbekistansko ljetno vrijeme\x10vrijeme Vanuatua\x1bs" + + "tandardno vrijeme Vanuatua\x17ljetno vrijeme Vanuatua\x13venezuelsko vri" + + "jeme\x16vladivostočko vrijeme!vladivostočko standardno vrijeme\x1dvladiv" + + "ostočko ljetno vrijeme\x14volgogradsko vrijeme\x1fvolgogradsko standardn" + + "o vrijeme\x1bvolgogradsko ljetno vrijeme\x11vostočko vrijeme\x12vrijeme " + + "Otoka Wake\x1dvrijeme Otoka Wallis i Futuna\x10jakutsko vrijeme\x1bjakut" + + "sko standardno vrijeme\x17jakutsko ljetno vrijeme\x17ekaterinburško vrij" + + "eme\"ekaterinburško standardno vrijeme\x1eekaterinburško ljetno vrijeme" + + "\x06po Kr.\x06po Kr.\x0dsledeće god.\x0bsledeće g." + +var bucket48 string = "" + // Size: 9289 bytes + "\x09d. M. yy.\x09njedźela\x0apóndźela\x06wutora\x06srjeda\x09štwórtk\x05" + + "pjatk\x06sobota\x0apopołdnju\x04pop.\x1dpřed Chrystowym narodźenjom\x1cp" + + "řed našim ličenjom časa\x19po Chrystowym narodźenju\x16našeho ličenja č" + + "asa\x0apř.Chr.n.\x0bpř.n.l.č.\x09po Chr.n.\x07n.l.č.\x0dH:mm 'hodź'.\x04" + + "doba\x04loni\x06lětsa\x06klětu\x10před {0} lětom\x12před {0} lětomaj\x11" + + "před {0} lětami\x13před {0} kwartalom\x15před {0} kwartalomaj\x14před {0" + + "} kwartalemi\x10před {0} kwart.\x0dpřed {0} kw.\x06měsac\x0ezašły měsac" + + "\x0dtutón měsac\x11přichodny měsac\x0dza {0} měsac\x0fza {0} měsacaj\x0e" + + "za {0} měsacy\x0fza {0} měsacow\x12před {0} měsacom\x14před {0} měsacoma" + + "j\x13před {0} měsacami\x08tydźeń\x10zašły tydźeń\x0ftutón tydźeń\x13přic" + + "hodny tydźeń\x0fza {0} tydźeń\x11za {0} tydźenjej\x10za {0} tydźenje\x11" + + "za {0} tydźenjow\x14před {0} tydźenjom\x16před {0} tydźenjomaj\x15před {" + + "0} tydźenjemi\x06tydź.\x0dza {0} tydź.\x10před {0} tydź.\x06dźeń\x06wčer" + + "a\x07dźensa\x06jutře\x0dza {0} dźeń\x0cza {0} dnjej\x0aza {0} dny\x0cza " + + "{0} dnjow\x0fpřed {0} dnjom\x11před {0} dnjomaj\x10před {0} dnjemi\x0bza" + + " {0} dnj.\x0epřed {0} dnj.\x0bpřed {0} d\x10dźeń tydźenja\x11zašłu njedź" + + "elu\x0etutu njedźelu\x14přichodnu njedźelu\x0czašłu nje.\x09tutu nje." + + "\x0fpřichodnu nje.\x0bzašłu nj.\x08tutu nj.\x0epřichodnu nj.\x12zašłu pó" + + "ndźelu\x0ftutu póndźelu\x15přichodnu póndźelu\x0dzašłu pón.\x0atutu pón." + + "\x10přichodnu pón.\x0czašłu pó.\x09tutu pó.\x0fpřichodnu pó.\x0ezašłu wu" + + "toru\x0btutu wutoru\x11přichodnu wutoru\x0czašłu wut.\x09tutu wut.\x0fpř" + + "ichodnu wut.\x0bzašłu wu.\x08tutu wu.\x0epřichodnu wu.\x0ezašłu srjedu" + + "\x0btutu srjedu\x11přichodnu srjedu\x0czašłu srj.\x09tutu srj.\x0fpřicho" + + "dnu srj.\x0bzašłu sr.\x08tutu sr.\x0epřichodnu sr.\x11zašły štwórtk\x10t" + + "utón štwórtk\x14přichodny štwórtk\x0dzašły štw.\x0ctutón štw.\x10přichod" + + "ny štw.\x0czašły št.\x0btutón št.\x0fpřichodny št.\x0dzašły pjatk\x0ctut" + + "ón pjatk\x10přichodny pjatk\x0czašły pja.\x0btutón pja.\x0fpřichodny pj" + + "a.\x0bzašły pj.\x0atutón pj.\x0epřichodny pj.\x0ezašłu sobotu\x0btutu so" + + "botu\x11přichodnu sobotu\x0czašłu sob.\x09tutu sob.\x0fpřichodnu sob." + + "\x0bzašłu so.\x08tutu so.\x0epřichodnu so.\x08hodźina\x0fza {0} hodźinu" + + "\x10za {0} hodźinje\x0fza {0} hodźiny\x0eza {0} hodźin\x12před {0} hodźi" + + "nu\x15před {0} hodźinomaj\x14před {0} hodźinami\x06hodź.\x0dza {0} hodź." + + "\x10před {0} hodź.\x10před {0} minutu\x13před {0} minutomaj\x12před {0} " + + "minutami\x0epřed {0} min.\x0bpřed {0} m\x11před {0} sekundu\x14před {0} " + + "sekundomaj\x13před {0} sekundami\x0epřed {0} sek.\x0dčasowe pasmo\x11čas" + + "owe pasmo {0}\x0f{0} lětni čas\x0f{0} zymski čas\x14Britiski lětni čas" + + "\x11Irski lětni čas\x0eafghanski čas\x15centralnoafriski čas\x13wuchodoa" + + "friski čas\x12južnoafriski čas\x12zapadoafriski čas\x1dzapadoafriski sta" + + "ndardny čas\x19zapadoafriski lětni čas\x0ealaskaski čas\x19alaskaski sta" + + "ndardny čas\x15alaskaski lětni čas\x0fAmaconaski čas\x1aAmaconaski stand" + + "ardny čas\x16Amaconaski lětni čas\x1esewjeroameriski centralny čas)sewje" + + "roameriski centralny standardny čas%sewjeroameriski centralny lětni čas" + + "\x1dsewjeroameriski wuchodny čas(sewjeroameriski wuchodny standardny čas" + + "$sewjeroameriski wuchodny lětni čas\x1csewjeroameriski hórski čas'sewjer" + + "oameriski hórski standardny čas#sewjeroameriski hórski lětni čas\x1esewj" + + "eroameriski pacifiski čas)sewjeroameriski pacifiski standardny čas%sewje" + + "roameriski pacifiski lětni čas\x0cApiaski čas\x17Apiaski standardny čas" + + "\x13Apiaski lětni čas\x0carabski čas\x17arabski standardny čas\x13arabsk" + + "i lětni čas\x10argentinski čas\x1bargentinski standardny čas\x17argentin" + + "ski lětni čas\x16zapadoargentinski čas!zapadoargentinski standardny čas" + + "\x1dzapadoargentinski lětni čas\x0darmenski čas\x18armenski standardny č" + + "as\x14armenski lětni čas\x0fatlantiski čas\x1aatlantiski standardny čas" + + "\x16atlantiski lětni čas\x17srjedźoawstralski čas\"srjedźoawstralski sta" + + "ndardny čas\x1esrjedźoawstralski lětni čas\x1fsrjedźozapadny awstralski " + + "čas*srjedźozapadny awstralski standardny čas%sjedźozapadny awstralski l" + + "ětni čas\x16wuchodoawstralski čas!wuchodoawstralski standardny čas\x1dw" + + "uchodoawstralski lětni čas\x15zapadoawstralski čas zapadoawstralski stan" + + "dardny čas\x1czapadoawstralski lětni čas\x14azerbajdźanski čas\x1fazerba" + + "jdźanski standardny čas\x1bazerbajdźanski lětni čas\x0cacorski čas\x17ac" + + "orski standardny čas\x13acorski lětni čas\x12bangladešski čas\x1dbanglad" + + "ešski standardny čas\x19bangladešski lětni čas\x0ebhutanski čas\x0eboliw" + + "iski čas\x0fBrasiliski čas\x1aBrasiliski standardny čas\x16Brasiliski lě" + + "tni čas\x0ebruneiski čas\x0fkapverdski čas\x1akapverdski standardny čas" + + "\x16kapverdski lětni čas\x10chamorroski čas\x0fchathamski čas\x1achatham" + + "ski standardny čas\x16chathamski lětni čas\x0cchilski čas\x17chilski sta" + + "ndardny čas\x13chilski lětni čas\x0cchinski čas\x17chinski standardny ča" + + "s\x13chinski lětni čas\x12Čojbalsanski čas\x1dČojbalsanski standardny ča" + + "s\x19Čojbalsanski lětni čas\x13čas Hodowneje kupy\x15čas Kokosowych kupo" + + "w\x0fkolumbiski čas\x1akolumbiski standardny čas\x16kolumbiski lětni čas" + + "\x14čas Cookowych kupow\x1fstandardny čas Cookowych kupow\x1blětni čas C" + + "ookowych kupow\x0ckubaski čas\x17kubaski standardny čas\x13kubaski lětni" + + " čas\x0cDaviski čas\x1aDumont d´ Urvilleski čas\x15wuchodnotimorski čas" + + "\x14čas Jutrowneje kupy\x1fstandardny čas Jutrowneje kupy\x1blětni čas J" + + "utrowneje kupy\x0fekwadorski čas\x15srjedźoeuropski čas srjedźoeuropski " + + "standardny čas\x1csrjedźoeuropski lětni čas\x14wuchodoeuropski čas\x1fwu" + + "chodoeuropski standardny čas\x1bwuchodoeuropski lětni čas\x13Kaliningrad" + + "ski čas\x13zapadoeuropski čas\x1ezapadoeuropski standardny čas\x1azapado" + + "europski lětni čas\x10falklandski čas\x1bfalklandski standardny čas\x17f" + + "alklandski lětni čas\x0efidźiski čas\x19fidźiski standardny čas\x15fidźi" + + "ski lětni čas\x16francoskoguyanski čas4čas Francoskeho južneho a antarkt" + + "iskeho teritorija\x10galapagoski čas\x0fgambierski čas\x0egeorgiski čas" + + "\x19georgiski standardny čas\x15georgiski lětni čas\x17čas Gilbertowych " + + "kupow\x11Greenwichski čas\x18wuchodogrönlandski čas#wuchodogrönlandski s" + + "tandardny čas\x1fwuchodogrönlandski lětni čas\x17zapadogrönlandski čas\"" + + "zapadogrönlandski standardny čas\x1ezapadogrönlandski lětni čas\x15čas P" + + "ersiskeho golfa\x0dguyanski čas\x17hawaiisko-aleutski čas\"hawaiisko-ale" + + "utski standardny čas\x1ehawaiisko-aleutski lětni čas\x10Hongkongski čas" + + "\x1bHongkongski standardny čas\x17Hongkongski lětni čas\x0dChowdski čas" + + "\x18Chowdski standardny čas\x14Chowdski lětni čas\x0cindiski čas\x14indi" + + "skooceanski čas\x10indochinski čas\x16srjedźoindoneski čas\x10wuchodoind" + + "oneski\x14zapadoindoneski čas\x0ciranski čas\x17iranski standardny čas" + + "\x13iranski lětni čas\x0dIrkutski čas\x18Irkutski standardny čas\x14Irku" + + "tski lětni čas\x0eisraelski čas\x19israelski standardny čas\x15israelski" + + " lětni čas\x0djapanski čas\x18japanski standardny čas\x14japanski lětni " + + "čas\x16wuchodnokazachski čas\x15zapadnokazachski čas\x0dkorejski čas" + + "\x18korejski standardny čas\x14korejski lětni čas\x0ekosraeski čas\x11Kr" + + "asnojarski čas\x1cKrasnojarski standardny čas\x18Krasnojarski lětni čas" + + "\x0dkirgiski čas\x15čas Linijowych kupow\x13čas kupy Lord-Howe\x1estanda" + + "rdny čas kupy Lord-Howe\x1alětni čas kupy Lord-Howe\x13čas kupy Macquari" + + "e\x0fMagadanski čas\x1aMagadanski standardny čas\x16Magadanski lětni čas" + + "\x0fmalajziski čas\x0fmalediwski čas\x10marquesaski čas\x18čas Marshallo" + + "wych kupow\x10mauritiuski čas\x1bmauritiuski standardny čas\x17mauritius" + + "ki lětni čas\x0eMawsonski čas\x1bmexiski sewjerozapadny čas&mexiski sewj" + + "erozapadny standardny čas\"mexiski sewjerozapadny lětni čas\x16mexiski p" + + "acifiski čas!mexiski pacifiski standardny čas\x1dmexiski pacifiski lětni" + + " čas\x12Ulan-Batorski čas\x1dUlan-Batorski standardny čas\x19Ulan-Bators" + + "ki lětni čas\x0eMoskowski čas\x19Moskowski standardny čas\x15Moskowski l" + + "ětni čas\x0fmyanmarski čas\x0dnauruski čas\x0dnepalski čas\x13nowokaled" + + "onski čas\x1enowokaledonski standardny čas\x1anowokaledonski lětni čas" + + "\x13nowoseelandski čas\x1enowoseelandski standardny čas\x1anowoseelandsk" + + "i lětni čas\x14nowofundlandski čas\x1fnowofundlandski standardny čas\x1b" + + "nowofundlandski lětni čas\x0cniueski čas\x11čas kupy Norfolk\x1ečas kupo" + + "w Fernando de Noronha)standardny čas kupow Fernando de Noronha%lětni čas" + + " kupow Fernando de Noronha\x11Nowosibirski čas\x1cNowosibirski standardn" + + "y čas\x18Nowosibirski lětni čas\x0aOmski čas\x15Omski standardny čas\x11" + + "Omski lětni čas\x10pakistanski čas\x1bpakistanski standardny čas\x17paki" + + "stanski lětni čas\x0dpalauski čas\x17papua-nowoginejski čas\x10Paraguays" + + "ki čas\x1bParaguayski standardny čas\x17Paraguayski lětni čas\x0cperuski" + + " čas\x17peruski standardny čas\x13peruski lětni čas\x0ffilipinski čas" + + "\x1afilipinski standardny čas\x16filipinski lětni čas\x17čas Phoenixowyc" + + "h kupow čas kupow St. Pierre a Miquelon+standardny čas kupow St. Pierre " + + "a Miquelon'lětni čas kupow St. Pierre a Miquelon\x18čas Pitcairnowych ku" + + "pow\x0eponapeski čas\x0freunionski čas\x0fRotheraski čas\x10sachalinski " + + "čas\x1bsachalinski standardny čas\x17sachalinski lětni čas\x0dsamoaski " + + "čas\x18samoaski standardny čas\x14samoaski lětni čas\x10seychellski čas" + + "\x10Singapurski čas\x17čas Salomonskich kupow\x14južnogeorgiski čas\x0fs" + + "urinamski čas\x0dSyowaski čas\x0etahitiski čas\x0eTaipehski čas\x19Taipe" + + "hski standardny čas\x15Taipehski lětni čas\x0ftadźikski čas\x0ftokelausk" + + "i čas\x0dtongaski čas\x18tongaski standardny čas\x14tongaski lětni čas" + + "\x0dchuukski čas\x0fturkmenski čas\x1aturkmenski standardny čas\x16turkm" + + "enski lětni čas\x0etuvaluski čas\x0furuguayski čas\x1auruguayski standar" + + "dny čas\x16uruguayski lětni čas\x0duzbekski čas\x18uzbekski standardny č" + + "as\x14uzbekski lětni čas\x0fvanuatuski čas\x1avanuatuski standardny čas" + + "\x16vanuatuski lětni čas\x10venezuelski čas\x13Wladiwostokski čas\x1eWla" + + "diwostokski standardny čas\x1aWladiwostokski lětni čas\x11Wolgogradski č" + + "as\x1cWolgogradski standardny čas\x18Wolgogradski lětni čas\x0eWostokski" + + " čas\x0ečas kupy Wake\x1ačas kupow Wallis a Futuna\x0dJakutski čas\x18Ja" + + "kutski standardny čas\x14Jakutski lětni čas\x15Jekaterinburgski čas Jeka" + + "terinburgski standardny čas\x1cJekaterinburgski lětni čas" + +var bucket49 string = "" + // Size: 10012 bytes + "\x04Thot\x06Paophi\x06Athür\x05Koiak\x05Tübi\x05Mehir\x0aPhamenóth\x09Ph" + + "armuthi\x09Pakhónsz\x05Pauni\x04Epip\x08Meszoré\x0ePi Kogi Enavot\x12G y" + + ". MMMM d., EEEE\x0cG y. MMMM d.\x0bG y. MMM d.\x0eGGGGG y. M. d.\x07janu" + + "ár\x08február\x08március\x08április\x06május\x07június\x07július\x09aug" + + "usztus\x0aszeptember\x08október\x08november\x08december\x09vasárnap\x07h" + + "étfő\x04kedd\x06szerda\x0ccsütörtök\x07péntek\x07szombat\x08I. n.év\x09" + + "II. n.év\x0aIII. n.év\x09IV. n.év\x02I.\x03II.\x04III.\x03IV.\x0cI. negy" + + "edév\x0dII. negyedév\x0eIII. negyedév\x0dIV. negyedév\x081. n.év\x082. n" + + ".év\x083. n.év\x084. n.év\x0c1. negyedév\x0c2. negyedév\x0c3. negyedév" + + "\x0c4. negyedév\x07éjfél\x03de.\x04dél\x03du.\x06reggel\x04este\x06éjjel" + + "\x06hajnal\x0adélelőtt\x09délután\x0fKrisztus előtt\x19időszámításunk el" + + "őtt\x1aidőszámításunk szerint\x06i. sz.\x05i. e.\x03ie.\x04isz.\x10y. M" + + "MMM d., EEEE\x0ay. MMMM d.\x09y. MMM d.\x0ay. MM. dd.\x05Tisri\x07Hesván" + + "\x08Kiszlév\x08Tévész\x05Svát\x08Ádár I\x06Ádár\x09Ádár II\x07Niszán\x05" + + "Ijár\x07Sziván\x05Tamuz\x03Áv\x04Elul\x03TÉ\x04Moh.\x04Saf.\x07Réb. 1" + + "\x07Réb. 2\x07Dsem. I\x08Dsem. II\x04Red.\x04Sab.\x04Ram.\x04Sev.\x08Dsü" + + "l k.\x08Dsül h.\x08Moharrem\x05Safar\x0eRébi el avvel\x0fRébi el accher" + + "\x11Dsemádi el avvel\x12Dsemádi el accher\x06Redseb\x06Sabán\x08Ramadán" + + "\x07Sevvál\x0aDsül kade\x0bDsül hedse\x07Rébi I\x08Rébi II\x0aDsemádi I" + + "\x0bDsemádi II\x02MF\x0aG y.MM.dd.\x0eGGGGG y.MM.dd.\x0dR.O.C. előtt\x06" + + "R.O.C.\x04éra\x03év\x0belőző év\x09ez az év\x0fkövetkező év\x0e{0} év mú" + + "lva\x13{0} évvel ezelőtt\x09negyedév\x11előző negyedév\x0eez a negyedév" + + "\x15következő negyedév\x14{0} negyedév múlva\x19{0} negyedévvel ezelőtt" + + "\x05n.év\x10{0} n.év múlva\x06hónap\x0eelőző hónap\x0bez a hónap\x12köve" + + "tkező hónap\x11{0} hónap múlva\x16{0} hónappal ezelőtt\x04hét\x0celőző h" + + "ét\x09ez a hét\x10következő hét\x0f{0} hét múlva\x14{0} héttel ezelőtt" + + "\x08{0} hete\x0bhónap hete\x03nap\x0ctegnapelőtt\x06tegnap\x02ma\x06holn" + + "ap\x0bholnapután\x0e{0} nap múlva\x13{0} nappal ezelőtt\x09{0} napja\x09" + + "év napja\x0ahét napja\x14hónap hétköznapja\x11előző vasárnap\x0eez a va" + + "sárnap\x15következő vasárnap\x14{0} vasárnap múlva\x19{0} vasárnappal ez" + + "előtt\x0felőző hétfő\x0cez a hétfő\x13következő hétfő\x12{0} hétfő múlva" + + "\x17{0} hétfővel ezelőtt\x0celőző kedd\x09ez a kedd\x10következő kedd" + + "\x0f{0} kedd múlva\x13{0} keddel ezelőtt\x0eelőző szerda\x0bez a szerda" + + "\x12következő szerda\x11{0} szerda múlva\x17{0} szerdával ezelőtt\x14elő" + + "ző csütörtök\x11ez a csütörtök\x18következő csütörtök\x17{0} csütörtök m" + + "úlva\x1c{0} csütörtökkel ezelőtt\x0felőző péntek\x0cez a péntek\x13köve" + + "tkező péntek\x12{0} péntek múlva\x17{0} péntekkel ezelőtt\x0felőző szomb" + + "at\x0cez a szombat\x13következő szombat\x12{0} szombat múlva\x17{0} szom" + + "battal ezelőtt\x07napszak\x04óra\x11ebben az órában\x0f{0} óra múlva\x15" + + "{0} órával ezelőtt\x04perc\x0febben a percben\x0f{0} perc múlva\x14{0} p" + + "erccel ezelőtt\x0amásodperc\x04most\x15{0} másodperc múlva\x1a{0} másodp" + + "erccel ezelőtt\x09időzóna\x08{0} idő\x0f{0} nyári idő\x0d{0} zónaidő#egy" + + "ezményes koordinált világidő\x10brit nyári idő\x0fír nyári idő\x09Acre i" + + "dő\x0eAcre zónaidő\x10Acre nyári idő\x12afganisztáni idő\x1aközép-afrika" + + "i téli idő\x18kelet-afrikai téli idő\x17dél-afrikai téli idő\x18nyugat-a" + + "frikai időzóna\x19nyugat-afrikai téli idő\x1anyugat-afrikai nyári idő" + + "\x0dalaszkai idő\x12alaszkai zónaidő\x14alaszkai nyári idő\x0bAlmati idő" + + "\x10Almati zónaidő\x12Almati nyári idő\x0famazóniai idő\x15amazóniai tél" + + "i idő\x16amazóniai nyári idő\x1cközépső államokbeli idő!középső államokb" + + "eli zónaidő#középső államokbeli nyári idő\x18keleti államokbeli idő\x1dk" + + "eleti államokbeli zónaidő\x1fkeleti államokbeli nyári idő\x10hegyvidéki " + + "idő\x15hegyvidéki zónaidő\x17hegyvidéki nyári idő\x15csendes-óceáni idő" + + "\x1acsendes-óceáni zónaidő\x1ccsendes-óceáni nyári idő\x0cAnadiri idő" + + "\x12Anadíri zónaidő\x14Anadíri nyári idő\x0aapiai idő\x10apiai téli idő" + + "\x11apiai nyári idő\x0bAqtaui idő\x10Aqtaui zónaidő\x12Aqtaui nyári idő" + + "\x0cAqtobei idő\x11Aqtobei zónaidő\x13Aqtobei nyári idő\x09arab idő\x0fa" + + "rab téli idő\x10arab nyári idő\x10argentínai idő\x16argentínai téli idő" + + "\x17argentínai nyári idő\x1cnyugat-argentínai időzóna\x1dnyugat-argentín" + + "ai téli idő\x1enyugat-argentínai nyári idő\x15örményországi idő\x1börmén" + + "yországi téli idő\x1cörményországi nyári idő\x15atlanti-óceáni idő\x1aat" + + "lanti-óceáni zónaidő\x1catlanti-óceáni nyári idő\x19közép-ausztráliai id" + + "ő\x1fközép-ausztráliai téli idő közép-ausztráliai nyári idő közép-nyuga" + + "t-ausztráliai idő&közép-nyugat-ausztráliai téli idő'közép-nyugat-ausztrá" + + "liai nyári idő\x17kelet-ausztráliai idő\x1dkelet-ausztráliai téli idő" + + "\x1ekelet-ausztráliai nyári idő\x18nyugat-ausztráliai idő\x1enyugat-ausz" + + "tráliai téli idő\x1fnyugat-ausztráliai nyári idő\x13azerbajdzsáni idő" + + "\x19azerbajdzsáni téli idő\x1aazerbajdzsáni nyári idő\x0fazori időzóna" + + "\x10azori téli idő\x11azori nyári idő\x0fbangladesi idő\x15bangladesi té" + + "li idő\x16bangladesi nyári idő\x0cbutáni idő\x14bolíviai téli idő\x0fbra" + + "zíliai idő\x15brazíliai téli idő\x16brazíliai nyári idő\x18Brunei Daruss" + + "alam-i idő\x1ezöld-foki-szigeteki időzóna\x1fzöld-foki-szigeteki téli id" + + "ő zöld-foki-szigeteki nyári idő\x15chamorrói téli idő\x0dchathami idő" + + "\x13chathami téli idő\x14chathami nyári idő\x10chilei időzóna\x11chilei " + + "téli idő\x12chilei nyári idő\x0bkínai idő\x11kínai téli idő\x12kínai nyá" + + "ri idő\x11csojbalszani idő\x17csojbalszani téli idő\x18csojbalszani nyár" + + "i idő\x1dkarácsony-szigeti téli idő\x1ckókusz-szigeteki téli idő\x0ekolu" + + "mbiai idő\x14kolumbiai téli idő\x15kolumbiai nyári idő\x13cook-szigeteki" + + " idő\x19cook-szigeteki téli idő\x1fcook-szigeteki fél nyári idő\x0fkubai" + + " időzóna\x10kubai téli idő\x11kubai nyári idő\x0bdavisi idő\x19dumont-d’" + + "Urville-i idő\x17kelet-timori téli idő\x1ahúsvét-szigeti időzóna\x1bhúsv" + + "ét-szigeti téli idő\x1chúsvét-szigeti nyári idő\x13ecuadori téli idő" + + "\x1aközép-európai időzóna\x1bközép-európai téli idő\x1cközép-európai nyá" + + "ri idő\x18kelet-európai időzóna\x19kelet-európai téli idő\x1akelet-európ" + + "ai nyári idő\x0cminszki idő\x19nyugat-európai időzóna\x1anyugat-európai " + + "téli idő\x1bnyugat-európai nyári idő\x17falkland-szigeteki idő\x1dfalkla" + + "nd-szigeteki téli idő\x1efalkland-szigeteki nyári idő\x0bfidzsi idő\x11f" + + "idzsi téli idő\x12fidzsi nyári idő\x14francia-guyanai idő\"francia déli " + + "és antarktiszi idő\x16galápagosi téli idő\x0dgambieri idő\x0dgrúziai id" + + "ő\x13grúziai téli idő\x14grúziai nyári idő\x16gilbert-szigeteki idő\"gr" + + "eenwichi középidő, téli idő\x1akelet-grönlandi időzóna\x1bkelet-grönland" + + "i téli idő\x1ckelet-grönlandi nyári idő\x1bnyugat-grönlandi időzóna\x1cn" + + "yugat-grönlandi téli idő\x1dnyugat-grönlandi nyári idő\x0fGuami zónaidő" + + "\x15öbölbeli téli idő\x12guyanai téli idő\x17hawaii-aleuti időzóna\x18ha" + + "waii-aleuti téli idő\x19hawaii-aleuti nyári idő\x13hongkongi időzóna\x14" + + "hongkongi téli idő\x15hongkongi nyári idő\x0ahovdi idő\x10hovdi téli idő" + + "\x11hovdi nyári idő\x11indiai téli idő\x14indiai-óceáni idő\x0findokínai" + + " idő\x18közép-indonéziai idő\x16kelet-indonéziai idő\x1dnyugat-indonézia" + + "i téli idő\x0biráni idő\x11iráni téli idő\x12iráni nyári idő\x0eirkutszk" + + "i idő\x14irkutszki téli idő\x15irkutszki nyári idő\x0cizraeli idő\x12izr" + + "aeli téli idő\x13izraeli nyári idő\x0bjapán idő\x11japán téli idő\x12jap" + + "án nyári idő\x1ePetropavlovszk-kamcsatkai idő#Petropavlovszk-kamcsatkai" + + " zónaidő%Petropavlovszk-kamcsatkai nyári idő\x17kelet-kazahsztáni idő" + + "\x18nyugat-kazahsztáni idő\x0bkoreai idő\x11koreai téli idő\x12koreai ny" + + "ári idő\x0ckosraei idő\x13krasznojarszki idő\x19krasznojarszki téli idő" + + "\x1akrasznojarszki nyári idő\x13kirgizisztáni idő\x0bLankai idő\x12sor-s" + + "zigeteki idő\x16Lord Howe-szigeti idő\x1cLord Howe-szigeti téli idő\x1dL" + + "ord Howe-szigeti nyári idő\x0bMacaui idő\x10Macaui zónaidő\x12Macaui nyá" + + "ri idő\x1cmacquarie-szigeti téli idő\x0emagadáni idő\x13magadani téli id" + + "ő\x15magadáni nyári idő\x0emalajziai idő\x16maldív-szigeteki idő\x18mar" + + "quises-szigeteki idő\x17marshall-szigeteki idő\x14mauritiusi időzóna\x15" + + "mauritiusi téli idő\x16mauritiusi nyári idő\x0cmawsoni idő\x1aészaknyuga" + + "t-mexikói idő\x1fészaknyugat-mexikói zónaidő!északnyugat-mexikói nyári i" + + "dő\x1emexikói csendes-óceáni idő#mexikói csendes-óceáni zónaidő%mexikói " + + "csendes-óceáni nyári idő\x11ulánbátori idő\x17ulánbátori téli idő\x18ulá" + + "nbátori nyári idő\x0dmoszkvai idő\x13moszkvai téli idő\x14moszkvai nyári" + + " idő\x0dmianmari idő\x0bnaurui idő\x0cnepáli idő\x14új-kaledóniai idő" + + "\x1aúj-kaledóniai téli idő\x1búj-kaledóniai nyári idő\x11új-zélandi idő" + + "\x17új-zélandi téli idő\x18új-zélandi nyári idő\x12új-fundlandi idő\x17ú" + + "j-fundlandi zónaidő\x19új-fundlandi nyári idő\x0aniuei idő\x16norfolk-sz" + + "igeteki idő\x1aFernando de Noronha-i idő Fernando de Noronha-i téli idő!" + + "Fernando de Noronha-i nyári idő\x1dÉszak-mariana-szigeteki idő\x13novosz" + + "ibirszki idő\x19novoszibirszki téli idő\x1anovoszibirszki nyári idő\x0bo" + + "mszki idő\x11omszki téli idő\x12omszki nyári idő\x10pakisztáni idő\x16pa" + + "kisztáni téli idő\x17pakisztáni nyári idő\x0bpalaui idő\x17pápua új-guin" + + "eai idő\x0eparaguayi idő\x14paraguayi téli idő\x15paraguayi nyári idő" + + "\x0aperui idő\x10perui téli idő\x11perui nyári idő\x16fülöp-szigeteki id" + + "ő\x1cfülöp-szigeteki téli idő\x1dfülöp-szigeteki nyári idő\x1cphoenix-s" + + "zigeteki téli idő Saint-Pierre és Miquelon-i idő%Saint-Pierre és Miquelo" + + "n-i zónaidő'Saint-Pierre és Miquelon-i nyári idő\x17pitcairn-szigeteki i" + + "dő\x13ponape-szigeti idő\x0dphenjani idő\x0fQyzylordai idő\x14Qyzylordai" + + " zónaidő\x16Qyzylordai nyári idő\x0eréunioni idő\x0drotherai idő\x0eszah" + + "alini idő\x14szahalini téli idő\x15szahalini nyári idő\x0dSzamarai idő" + + "\x12Szamarai zónaidő\x14Szamarai nyári idő\x0cszamoai idő\x12szamoai tél" + + "i idő\x13szamoai nyári idő\x18seychelle-szigeteki idő\x16szingapúri téli" + + " idő\x16salamon-szigeteki idő\x13déli-georgiai idő\x0fszurinámi idő\x0bs" + + "yowai idő\x0btahiti idő\x0btaipei idő\x11taipei téli idő\x12taipei nyári" + + " idő\x15tádzsikisztáni idő\x0dtokelaui idő\x0btongai idő\x11tongai téli " + + "idő\x12tongai nyári idő\x0atruki idő\x15türkmenisztáni idő\x1btürkmenisz" + + "táni téli idő\x1ctürkmenisztáni nyári idő\x0ctuvalui idő\x0duruguayi idő" + + "\x13uruguayi téli idő\x14uruguayi nyári idő\x13üzbegisztáni idő\x19üzbeg" + + "isztáni téli idő\x1aüzbegisztáni nyári idő\x0dvanuatui idő\x13vanuatui t" + + "éli idő\x14vanuatui nyári idő\x0fvenezuelai idő\x13vlagyivosztoki idő" + + "\x19vlagyivosztoki téli idő\x1avlagyivosztoki nyári idő\x10volgográdi id" + + "ő\x16volgográdi téli idő\x17volgográdi nyári idő\x0dvosztoki idő\x11wak" + + "e-szigeti idő\x18Wallis és Futuna-i idő\x0ejakutszki idő\x14jakutszki té" + + "li idő\x15jakutszki nyári idő\x14jekatyerinburgi idő\x1ajekatyerinburgi " + + "téli idő\x1bjekatyerinburgi nyári idő\x03lu.\x03ma.\x03mi.\x03joi\x03vi." + + "\x04sâ.\x03joi\x05marec\x06apríl\x04máj\x04jún\x04júl\x06august\x09septe" + + "mber\x08október\x08november\x08december" + +var bucket50 string = "" + // Size: 19363 bytes + "\x15d MMMM, y թ. G, EEEE\x10dd MMMM, y թ. G\x0fdd MMM, y թ. G\x06հնվ\x06" + + "փտվ\x06մրտ\x06ապր\x06մյս\x06հնս\x06հլս\x06օգս\x06սեպ\x06հոկ\x06նոյ\x06դ" + + "եկ\x02Հ\x02Փ\x02Մ\x02Ա\x02Օ\x02Ս\x02Ն\x02Դ\x10հունվարի\x10փետրվարի\x0aմ" + + "արտի\x0cապրիլի\x0cմայիսի\x0eհունիսի\x0eհուլիսի\x10օգոստոսի\x14սեպտեմբեր" + + "ի\x14հոկտեմբերի\x12նոյեմբերի\x14դեկտեմբերի\x0eհունվար\x0eփետրվար\x08մար" + + "տ\x0aապրիլ\x0aմայիս\x0cհունիս\x0cհուլիս\x0eօգոստոս\x12սեպտեմբեր\x12հոկտ" + + "եմբեր\x10նոյեմբեր\x12դեկտեմբեր\x06կիր\x06երկ\x06երք\x06չրք\x06հնգ\x06ու" + + "ր\x06շբթ\x02Կ\x02Ե\x02Չ\x02Ո\x02Շ\x04կր\x04եկ\x04եք\x04չք\x04հգ\x04ու" + + "\x04շբ\x0cկիրակի\x14երկուշաբթի\x12երեքշաբթի\x14չորեքշաբթի\x12հինգշաբթի" + + "\x0cուրբաթ\x0aշաբաթ\x101-ին եռմս.\x102-րդ եռմս.\x103-րդ եռմս.\x104-րդ եռ" + + "մս.\x171-ին եռամսյակ\x172-րդ եռամսյակ\x173-րդ եռամսյակ\x174-րդ եռամսյակ" + + "\x10կեսգիշեր\x04ԿԱ\x0aկեսօր\x04ԿՀ\x12առավոտյան\x0cցերեկը\x10երեկոյան\x0c" + + "գիշերը\x07կգ․\x02ա\x07կօ․\x02հ\x06առվ\x06ցրկ\x06գշր\x14կեսգիշերին\x0eկե" + + "սօրին\x0cառավոտ\x0aցերեկ\x0aերեկո\x0aգիշեր\x1bՔրիստոսից առաջ,մեր թվարկո" + + "ւթյունից առաջ\x1bՔրիստոսից հետո\x1dմեր թվարկության\x09մ.թ.ա.\x0fմ․թ․ա․" + + "\x06մ.թ.\x0aմ․թ․\x12y թ. MMMM d, EEEE\x0edd MMMM, y թ.\x0ddd MMM, y թ." + + "\x18թվարկություն\x05թ․\x08տարի\x15նախորդ տարի\x0fայս տարի\x15հաջորդ տարի" + + "\x10{0} տարուց\x15{0} տարի առաջ\x02տ\x0f{0} տ առաջ\x10եռամսյակ\x1dնախորդ" + + " եռամսյակ\x17այս եռամսյակ\x1dհաջորդ եռամսյակ\x18{0} եռամսյակից\x1d{0} եռ" + + "ամսյակ առաջ\x08եռմս\x11{0} եռմս-ից\x15{0} եռմս առաջ\x08ամիս\x15նախորդ ա" + + "միս\x0fայս ամիս\x15հաջորդ ամիս\x0e{0} ամսից\x15{0} ամիս առաջ\x06ամս\x15" + + "անցյալ ամիս\x17նախորդ շաբաթ\x11այս շաբաթ\x17հաջորդ շաբաթ\x12{0} շաբաթից" + + "\x17{0} շաբաթ առաջ\x14{0} շաբաթում\x06շաբ\x0f{0} շաբ-ից\x13{0} շաբ առաջ" + + "\x11{0} շաբ-ում\x11{0} շաբ անց\x15ամսվա շաբաթ\x11ամսվա շաբ\x0dամս շաբ" + + "\x04օր\x1fերեկ չէ առաջի օրը\x08երեկ\x0aայսօր\x08վաղը\x1fվաղը չէ մյուս օր" + + "ը\x0c{0} օրից\x11{0} օր առաջ\x0fտարվա օր\x13շաբաթվա օր\x0fամսվա օր\x0bա" + + "մս օր\x19նախորդ կիրակի\x13այս կիրակի\x19հաջորդ կիրակի\x19{0} կիրակի հետ" + + "ո\x19{0} կիրակի առաջ\x0fնխրդ կիր\x0dայս կիր\x0fհջրդ կիր\x13{0} կիր հետո" + + "\x13{0} կիր առաջ!նախորդ երկուշաբթի\x1bայս երկուշաբթի!հաջորդ երկուշաբթի!{" + + "0} երկուշաբթի հետո!{0} երկուշաբթի առաջ\x0fնխրդ երկ\x0dայս երկ\x0fհջրդ եր" + + "կ\x13{0} երկ հետո\x13{0} երկ առաջ\x1fնախորդ երեքշաբթի\x19այս երեքշաբթի" + + "\x1fհաջորդ երեքշաբթի\x1f{0} երեքշաբթի հետո\x1f{0} երեքշաբթի առաջ\x0fնխրդ" + + " երք\x0dայս երք\x0fհջրդ երք\x13{0} երք հետո\x13{0} երք առաջ!նախորդ չորեք" + + "շաբթի\x1bայս չորեքշաբթի!հաջորդ չորեքշաբթի!{0} չորեքշաբթի հետո!{0} չորեք" + + "շաբթի առաջ\x0fնխրդ չրք\x0dայս չրք\x0fհջրդ չրք\x13{0} չրք հետո\x13{0} չր" + + "ք առաջ\x1fնախորդ հինգշաբթի\x19այս հինգշաբթի\x1fհաջորդ հինգշաբթի\x1f{0} " + + "հինգշաբթի հետո\x1f{0} հինգշաբթի առաջ\x0fնխրդ հնգ\x0dայս հնգ\x0fհջրդ հնգ" + + "\x13{0} հնգ հետո\x13{0} հնգ առաջ\x19նախորդ ուրբաթ\x13այս ուրբաթ\x19հաջոր" + + "դ ուրբաթ\x19{0} ուրբաթ հետո\x19{0} ուրբաթ առաջ\x11նխրդ ուրբ\x0fայս ուրբ" + + "\x11հջրդ ուրբ\x15{0} ուրբ հետո\x15{0} ուրբ առաջ\x1eնախորդ շաբաթ օրը\x18ա" + + "յս շաբաթ օրը\x1eհաջորդ շաբաթ օրը\x1c{0} շաբաթ օր հետո\x1c{0} շաբաթ օր ա" + + "ռաջ\x0fնխրդ շբթ\x0dայս շբթ\x0fհջրդ շբթ\x13{0} շբթ հետո\x13{0} շբթ առաջ" + + "\x09ԿԱ/ԿՀ\x06ժամ\x11այս ժամին\x0e{0} ժամից\x13{0} ժամ առաջ\x02ժ\x0b{0} ժ" + + "-ից\x0f{0} ժ առաջ\x08րոպե\x13այս րոպեին\x10{0} րոպեից\x15{0} րոպե առաջ" + + "\x02ր\x0b{0} ր-ից\x0f{0} ր առաջ\x10վայրկյան\x08հիմա\x18{0} վայրկյանից" + + "\x1d{0} վայրկյան առաջ\x02վ\x0f{0} վրկ-ից\x13{0} վրկ առաջ\x0b{0} վ-ից\x0f" + + "{0} վ առաջ\x17ժամային գոտիBՀամաշխարհային կոորդինացված ժամանակ4Բրիտանական" + + " ամառային ժամանակ4Իռլանդական ստանդարտ ժամանակ#Աֆղանստանի ժամանակ6Կենտրոն" + + "ական Աֆրիկայի ժամանակ0Արևելյան Աֆրիկայի ժամանակ2Հարավային Աֆրիկայի ժամա" + + "նակ0Արևմտյան Աֆրիկայի ժամանակAԱրևմտյան Աֆրիկայի ստանդարտ ժամանակAԱրևմտյ" + + "ան Աֆրիկայի ամառային ժամանակ!Ալյասկայի ժամանակ2Ալյասկայի ստանդարտ ժաման" + + "ակ2Ալյասկայի ամառային ժամանակ!Ամազոնյան ժամանակ2Ամազոնյան ստանդարտ ժամա" + + "նակ2Ամազոնյան ամառային ժամանակ8Կենտրոնական Ամերիկայի ժամանակIԿենտրոնակա" + + "ն Ամերիկայի ստանդարտ ժամանակIԿենտրոնական Ամերիկայի ամառային ժամանակ2Արև" + + "ելյան Ամերիկայի ժամանակCԱրևելյան Ամերիկայի ստանդարտ ժամանակCԱրևելյան Ամ" + + "երիկայի ամառային ժամանակ(Լեռնային ժամանակ (ԱՄՆ)9Լեռնային ստանդարտ ժաման" + + "ակ (ԱՄՆ)9Լեռնային ամառային ժամանակ (ԱՄՆ)/Խաղաղօվկիանոսյան ժամանակ@Խաղաղ" + + "օվկիանոսյան ստանդարտ ժամանակ@Խաղաղօվկիանոսյան ամառային ժամանակ\x1bԱպիայ" + + "ի ժամանակ,Ապիայի ստանդարտ ժամանակ,Ապիայի ամառային ժամանակ0Սաուդյան Արաբ" + + "իայի ժամանակAՍաուդյան Արաբիայի ստանդարտ ժամանակAՍաուդյան Արաբիայի ամառա" + + "յին ժամանակ%Արգենտինայի ժամանակ6Արգենտինայի ստնադարտ ժամանակ6Արգենտինայ" + + "ի ամառային ժամանակ6Արևմտյան Արգենտինայի ժամանակGԱրևմտյան Արգենտինայի ստ" + + "նադարտ ժամանակGԱրևմտյան Արգենտինայի ամառային ժամանակ!Հայաստանի ժամանակ2" + + "Հայաստանի ստանդարտ ժամանակ2Հայաստանի ամառային ժամանակ!Ատլանտյան ժամանակ" + + "2Ատլանտյան ստանդարտ ժամանակ2Ատլանտյան ամառային ժամանակ<Կենտրոնական Ավստր" + + "ալիայի ժամանակMԿենտրոնական Ավստրալիայի ստանդարտ ժամանակMԿենտրոնական Ավս" + + "տրալիայի ամառային ժամանակMԿենտրոնական Ավստրալիայի արևմտյան ժամանակ^Կենտ" + + "րոնական Ավստրալիայի արևմտյան ստանդարտ ժամանակ^Կենտրոնական Ավստրալիայի ա" + + "րևմտյան ամառային ժամանակ6Արևելյան Ավստրալիայի ժամանակGԱրևելյան Ավստրալի" + + "այի ստանդարտ ժամանակGԱրևելյան Ավստրալիայի ամառային ժամանակ6Արևմտյան Ավս" + + "տրալիայի ժամանակGԱրևմտյան Ավստրալիայի ստանդարտ ժամանակGԱրևմտյան Ավստրալ" + + "իայի ամառային ժամանակ!Ադրբեջանի ժամանակ2Ադրբեջանի ստանդարտ ժամանակ2Ադրբ" + + "եջանի ամառային ժամանակ.Ազորյան կղզիների ժամանակ?Ազորյան կղզիների ստանդա" + + "րտ ժամանակ?Ազորյան կղզիների ամառային ժամանակ#Բանգլադեշի ժամանակ4Բանգլադ" + + "եշի ստանդարտ ժամանակ4Բանգլադեշի ամառային ժամանակ\x1dԲութանի ժամանակ!Բոլ" + + "իվիայի ժամանակ#Բրազիլիայի ժամանակ4Բրազիլիայի ստանդարտ ժամանակ4Բրազիլիայ" + + "ի ամառային ժամանակ\x1fԲրունեյի ժամանակ$Կաբո Վերդեի ժամանակ5Կաբո Վերդեի " + + "ստանդարտ ժամանակ5Կաբո Վերդեի ամառային ժամանակ\x1fՉամոռոյի ժամանակ$Չաթեմ" + + " կղզու ժամանակ5Չաթեմ կղզու ստանդարտ ժամանակ5Չաթեմ կղզու ամառային ժամանակ" + + "\x19Չիլիի ժամանակ*Չիլիի ստանդարտ ժամանակ*Չիլիի ամառային ժամանակ!Չինաստան" + + "ի ժամանակ2Չինաստանի ստանդարտ ժամանակ2Չինաստանի ամառային ժամանակ#Չոյբալս" + + "անի ժամանակ4Չոյբալսանի ստանդարտ ժամանակ4Չոյբալսանի ամառային ժամանակ3Սու" + + "րբ Ծննդյան կղզու ժամանակ0Կոկոսյան կղզիների ժամանակ%Կոլումբիայի ժամանակ6" + + "Կոլումբիայի ստանդարտ ժամանակ6Կոլումբիայի ամառային ժամանակ*Կուկի կղզիներ" + + "ի ժամանակ;Կուկի կղզիների ստանդարտ ժամանակCԿուկի կղզիների կիսաամառային ժ" + + "ամանակ\x1dԿուբայի ժամանակ.Կուբայի ստանդարտ ժամանակ.Կուբայի ամառային ժամ" + + "անակ\x1dԴեյվիսի ժամանակ3Դյումոն դ’Յուրվիլի ժամանակ,Արևելյան Թիմորի ժամա" + + "նակ$Զատկի կղզու ժամանակ5Զատկի կղզու ստանդարտ ժամանակ5Զատկի կղզու ամառայ" + + "ին ժամանակ\x1fԷկվադորի ժամանակ6Կենտրոնական Եվրոպայի ժամանակGԿենտրոնական" + + " Եվրոպայի ստանդարտ ժամանակGԿենտրոնական Եվրոպայի ամառային ժամանակ0Արևելյա" + + "ն Եվրոպայի ժամանակAԱրևելյան Եվրոպայի ստանդարտ ժամանակAԱրևելյան Եվրոպայի" + + " ամառային ժամանակ\x1bՄինսկի ժամանակ0Արևմտյան Եվրոպայի ժամանակAԱրևմտյան Ե" + + "վրոպայի ստանդարտ ժամանակAԱրևմտյան Եվրոպայի ամառային ժամանակ6Ֆոլքլենդյան" + + " կղզիների ժամանակGՖոլքլենդյան կղզիների ստանդարտ ժամանակGՖոլքլենդյան կղզի" + + "ների ամառային ժամանակ\x19Ֆիջիի ժամանակ*Ֆիջիի ստանդարտ ժամանակ*Ֆիջիի ամա" + + "ռային ժամանակ4Ֆրանսիական Գվիանայի ժամանակRՖրանսիական հարավային և անտարկ" + + "տիդյան ժամանակ8Գալապագոսյան կղզիների ժամանակ,Գամբյե կղզիների ժամանակ" + + "\x1fՎրաստանի ժամանակ0Վրաստանի ստանդարտ ժամանակ0Վրաստանի ամառային ժամանակ" + + "0Ջիլբերթի կղզիների ժամանակ\x1fԳրինվիչի ժամանակ8Արևելյան Գրենլանդիայի ժամ" + + "անակIԱրևելյան Գրենլանդիայի ստանդարտ ժամանակIԱրևելյան Գրենլանդիայի ամառա" + + "յին ժամանակ8Արևմտյան Գրենլանդիայի ժամանակIԱրևմտյան Գրենլանդիայի ստանդար" + + "տ ժամանակIԱրևմտյան Գրենլանդիայի ամառային ժամանակ5Պարսից ծոցի ստանդարտ ժ" + + "ամանակ\x1fԳայանայի ժամանակ0Հավայան-ալեության ժամանակAՀավայան-ալեության " + + "ստանդարտ ժամանակAՀավայան-ալեության ամառային ժամանակ\x1fՀոնկոնգի ժամանակ" + + "0Հոնկոնգի ստանդարտ ժամանակ0Հոնկոնգի ամառային ժամանակ\x19Հովդի ժամանակ*Հո" + + "վդի ստանդարտ ժամանակ*Հովդի ամառային ժամանակ4Հնդկաստանի ստանդարտ ժամանակ" + + "2Հնդկական օվկիանոսի ժամանակ'Հնդկաչինական ժամանակ<Կենտրոնական Ինդոնեզիայի" + + " ժամանակ6Արևելյան Ինդոնեզիայի ժամանակ6Արևմտյան Ինդոնեզիայի ժամանակ\x19Իր" + + "անի ժամանակ*Իրանի ստանդարտ ժամանակ*Իրանի ամառային ժամանակ!Իրկուտսկի ժամ" + + "անակ2Իրկուտսկի ստանդարտ ժամանակ2Իրկուտսկի ամառային ժամանակ\x1fԻսրայելի " + + "ժամանակ0Իսրայելի ստանդարտ ժամանակ0Իսրայելի ամառային ժամանակ!Ճապոնիայի ժ" + + "ամանակ2Ճապոնիայի ստանդարտ ժամանակ2Ճապոնիայի ամառային ժամանակ4Արևելյան Ղ" + + "ազախստանի ժամանակ4Արևմտյան Ղազախստանի ժամանակ\x1dԿորեայի ժամանակ.Կորեայ" + + "ի ստանդարտ ժամանակ.Կորեայի ամառային ժամանակ\x1fԿոսրաեյի ժամանակ'Կրասնոյ" + + "արսկի ժամանակ8Կրասնոյարսկի ստանդարտ ժամանակ8Կրասնոյարսկի ամառային ժաման" + + "ակ!Ղրղզստանի ժամանակ(Լայն կղզիների ժամանակ\"Լորդ Հաուի ժամանակ3Լորդ Հաո" + + "ւի ստանդարտ ժամանակ3Լորդ Հաուի ամառային ժամանակ,Մակկուորի կղզու ժամանակ" + + "\x1fՄագադանի ժամանակ0Մագադանի ստանդարտ ժամանակ0Մագադանի ամառային ժամանակ" + + "#Մալայզիայի ժամանակ#Մալդիվների ժամանակ2Մարկիզյան կղզիների ժամանակ2Մարշալ" + + "յան կղզիների ժամանակ#Մավրիկիոսի ժամանակ4Մավրիկիոսի ստանդարտ ժամանակ4Մավ" + + "րիկիոսի ամառային ժամանակ\x1fՄոուսոնի ժամանակ@Հյուսիսարևմտյան Մեքսիկայի " + + "ժամանակQՀյուսիսարևմտյան Մեքսիկայի ստանդարտ ժամանակQՀյուսիսարևմտյան Մեքս" + + "իկայի ամառային ժամանակBՄեքսիկայի խաղաղօվկիանոսյան ժամանակSՄեքսիկայի խաղ" + + "աղօվկիանոսյան ստանդարտ ժամանակSՄեքսիկայի խաղաղօվկիանոսյան ամառային ժամա" + + "նակ&Ուլան Բատորի ժամանակ7Ուլան Բատորի ստանդարտ ժամանակ7Ուլան Բատորի ամա" + + "ռային ժամանակ\x1fՄոսկվայի ժամանակ0Մոսկվայի ստանդարտ ժամանակ0Մոսկվայի ամ" + + "առային ժամանակ\x1fՄյանմայի ժամանակ\x1fՆաուրուի ժամանակ\x1bՆեպալի ժամանա" + + "կ,Նոր Կալեդոնիայի ժամանակ=Նոր Կալեդոնիայի ստանդարտ ժամանակ=Նոր Կալեդոնի" + + "այի ամառային ժամանակ*Նոր Զելանդիայի ժամանակ;Նոր Զելանդիայի ստանդարտ ժամ" + + "անակ;Նոր Զելանդիայի ամառային ժամանակ-Նյուֆաունդլենդի ժամանակ>Նյուֆաունդ" + + "լենդի ստանդարտ ժամանակ>Նյուֆաունդլենդի ամառային ժամանակ\x1dՆիուեյի ժամա" + + "նակ(Նորֆոլկ կղզու ժամանակ9Ֆերնանդու դի Նորոնյայի ժամանակJՖերնանդու դի Ն" + + "որոնյայի ստանդարտ ժամանակJՖերնանդու դի Նորոնյայի ամառային ժամանակ'Նովոս" + + "իբիրսկի ժամանակ8Նովոսիբիրսկի ստանդարտ ժամանակ8Նովոսիբիրսկի ամառային ժամ" + + "անակ\x19Օմսկի ժամանակ*Օմսկի ստանդարտ ժամանակ*Օմսկի ամառային ժամանակ!Պակ" + + "իստանի ժամանակ2Պակիստանի ստանդարտ ժամանակ2Պակիստանի ամառային ժամանակ" + + "\x1fՊալաույի ժամանակ3Պապուա Նոր Գվինեայի ժամանակ!Պարագվայի ժամանակ2Պարագ" + + "վայի ստանդարտ ժամանակ2Պարագվայի ամառային ժամանակ\x1bՊերուի ժամանակ,Պերո" + + "ւի ստանդարտ ժամանակ,Պերուի ամառային ժամանակ%Ֆիլիպինների ժամանակ6Ֆիլիպին" + + "ների ստանդարտ ժամանակ6Ֆիլիպինների ամառային ժամանակ,Ֆինիքս կղզիների ժամա" + + "նակ2Սեն Պիեռ և Միքելոնի ժամանակCՍեն Պիեռ և Միքելոնի ստանդարտ ժամանակCՍե" + + "ն Պիեռ և Միքելոնի ամառային ժամանակ\x1fՊիտկեռնի ժամանակ&Պոնապե կղզու ժամ" + + "անակ\x1fՓխենյանի ժամանակ#Ռեյունիոնի ժամանակ\x1fՌոտերայի ժամանակ\x1fՍախա" + + "լինի ժամանակ0Սախալինի ստանդարտ ժամանակ0Սախալինի ամառային ժամանակ\x1dՍամ" + + "ոայի ժամանակ.Սամոայի ստանդարտ ժամանակ.Սամոայի ամառային ժամանակ2Սեյշելյա" + + "ն կղզիների ժամանակ#Սինգապուրի ժամանակ0Սողոմոնի կղզիների ժամանակ2Հարավայ" + + "ին Ջորջիայի ժամանակ!Սուրինամի ժամանակ\x1dՍյովայի ժամանակ\x1bԹաիթիի ժամա" + + "նակ\x1dԹայպեյի ժամանակ.Թայպեյի ստանդարտ ժամանակ.Թայպեյի ամառային ժամանա" + + "կ#Տաջիկստանի ժամանակ#Տոկելաույի ժամանակ\x1dՏոնգայի ժամանակ.Տոնգայի ստան" + + "դարտ ժամանակ.Տոնգայի ամառային ժամանակ\x1bՏրուկի ժամանակ)Թուրքմենստանի ժ" + + "ամանակ:Թուրքմենստանի ստանդարտ ժամանակ:Թուրքմենստանի ամառային ժամանակ#Տո" + + "ւվալույի ժամանակ#Ուրուգվայի ժամանակ4Ուրուգվայի ստանդարտ ժամանակ4Ուրուգվ" + + "այի ամառային ժամանակ%Ուզբեկստանի ժամանակ6Ուզբեկստանի ստանդարտ ժամանակ6Ո" + + "ւզբեկստանի ամառային ժամանակ%Վանուատույի ժամանակ6Վանուատույի ստանդարտ ժա" + + "մանակ6Վանուատույի ամառային ժամանակ'Վենեսուելայի ժամանակ'Վլադիվոստոկի ժա" + + "մանակ8Վլադիվոստոկի ստանդարտ ժամանակ8Վլադիվոստոկի ամառային ժամանակ#Վոլգո" + + "գրադի ժամանակ4Վոլգոգրադի ստանդարտ ժամանակ4Վոլգոգրադի ամառային ժամանակ" + + "\x1dՎոստոկի ժամանակ$Ուեյք կղզու ժամանակ3Ուոլիս և Ֆուտունայի ժամանակ!Յակո" + + "ւտսկի ժամանակ2Յակուտսկի ստանդարտ ժամանակ2Յակուտսկի ամառային ժամանակ+Եկա" + + "տերինբուրգի ժամանակ<Եկատերինբուրգի ստանդարտ ժամանակ<Եկատերինբուրգի ամառ" + + "ային ժամանակ" + +var bucket51 string = "" + // Size: 11277 bytes + "\x0f{1} 'pukul' {0}\x10mulai musim semi\x09air hujan\x0fserangga bangun" + + "\x13ekuinoks musim semi\x0dhujan butiran\x11mulai musim panas\x11mulai m" + + "usim gugur\x0bakhir panas\x09white dew\x14ekuinoks musim gugur\x0cembun " + + "dingin\x10embun beku turun\x12mulai musim dingin\x11mulai turun salju" + + "\x0fEEEE, U MMMM dd\x08U MMMM d\x07U MMM d\x05y-M-d\x0bembun putih\x03Mi" + + "n\x03Sen\x03Sel\x03Rab\x03Kam\x03Jum\x03Sab\x06Minggu\x05Senin\x06Selasa" + + "\x04Rabu\x05Kamis\x05Jumat\x05Sabtu\x0cKuartal ke-1\x0cKuartal ke-2\x0cK" + + "uartal ke-3\x0cKuartal ke-4\x0ctengah malam\x0btengah hari\x04pagi\x05si" + + "ang\x04sore\x05malam\x0eSebelum Masehi\x10Sebelum Era Umum\x06Masehi\x08" + + "Era Umum\x02SM\x03SEU\x01M\x02EU\x0eSebelum R.O.C.\x06R.O.C.\x05tahun" + + "\x0atahun lalu\x09tahun ini\x0btahun depan\x0fdalam {0} tahun\x13{0} tah" + + "un yang lalu\x04thn.\x0bdlm {0} thn\x0c{0} thn lalu\x07kuartal\x0cKuarta" + + "l lalu\x0bkuartal ini\x12kuartal berikutnya\x11dalam {0} kuartal\x15{0} " + + "kuartal yang lalu\x05krtl.\x0ddlm {0} krtl.\x0e{0} krtl. lalu\x05bulan" + + "\x0abulan lalu\x09bulan ini\x10bulan berikutnya\x0fdalam {0} bulan\x13{0" + + "} bulan yang lalu\x04bln.\x0bdlm {0} bln\x0c{0} bln lalu\x06minggu\x0bmi" + + "nggu lalu\x0aminggu ini\x0cminggu depan\x10dalam {0} minggu\x14{0} mingg" + + "u yang lalu\x0dminggu ke-{0}\x04mgg.\x0bdlm {0} mgg\x0c{0} mgg lalu\x0am" + + "gg ke-{0}\x04hari\x0ckemarin dulu\x07kemarin\x08hari ini\x05besok\x04lus" + + "a\x0edalam {0} hari\x12{0} hari yang lalu\x0bdalam {0} h\x0a{0} h lalu" + + "\x12Hari dalam Setahun\x13hari dalam seminggu\x11hari dlm seminggu\x0aha" + + "ri kerja\x08hr kerja\x10hari Minggu lalu\x0fhari Minggu ini\x16hari Ming" + + "gu berikutnya\x15dalam {0} hari Minggu\x19{0} hari Minggu yang lalu\x09M" + + "in. lalu\x08Min. ini\x0fMin. berikutnya\x0cdlm {0} Min.\x0d{0} Min. lalu" + + "\x0aSenin lalu\x09Senin ini\x10Senin berikutnya\x0fdalam {0} Senin\x0e{0" + + "} Senin lalu\x09Sen. lalu\x08Sen. ini\x0fSen. berikutnya\x0cdlm {0} Sen." + + "\x0d{0} Sen. lalu\x0bSelasa lalu\x0aSelasa ini\x11Selasa berikutnya\x10d" + + "alam {0} Selasa\x0f{0} Selasa lalu\x09Sel. lalu\x08Sel. ini\x0fSel. beri" + + "kutnya\x0cdlm {0} Sel.\x0d{0} Sel. lalu\x09Rabu lalu\x08Rabu ini\x0fRabu" + + " berikutnya\x0edalam {0} Rabu\x0d{0} Rabu lalu\x09Rab. lalu\x08Rab. ini" + + "\x0fRab. berikutnya\x0cdlm {0} Rab.\x0d{0} Rab. lalu\x0aKamis lalu\x09Ka" + + "mis ini\x10Kamis berikutnya\x0fdalam {0} Kamis\x0e{0} Kamis lalu\x09Kam." + + " lalu\x08Kam. ini\x0fKam. berikutnya\x0cdlm {0} Kam.\x0d{0} Kam. lalu" + + "\x0aJumat lalu\x09Jumat ini\x10Jumat berikutnya\x0fdalam {0} Jumat\x0e{0" + + "} Jumat lalu\x09Jum. lalu\x08Jum. ini\x0fJum. berikutnya\x0cdlm {0} Jum." + + "\x0d{0} Jum. lalu\x0aSabtu lalu\x09Sabtu ini\x10Sabtu berikutnya\x0fdala" + + "m {0} Sabtu\x0e{0} Sabtu lalu\x09Sab. lalu\x08Sab. ini\x0fSab. berikutny" + + "a\x0cdlm {0} Sab.\x0d{0} Sab. lalu\x03Jam\x07jam ini\x0ddalam {0} jam" + + "\x11{0} jam yang lalu\x03jam\x0c{0} jam lalu\x05menit\x09menit ini\x0fda" + + "lam {0} menit\x13{0} menit yang lalu\x04mnt.\x0bdlm {0} mnt\x0c{0} mnt l" + + "alu\x05detik\x08sekarang\x0fdalam {0} detik\x13{0} detik yang lalu\x04dt" + + "k.\x0bdlm {0} dtk\x0c{0} dtk lalu\x0azona waktu\x08zona wkt\x09Waktu {0}" + + "\x15Waktu Musim Panas {0}\x11Waktu Standar {0}\x1dWaktu Universal Terkoo" + + "rdinasi\x19Waktu Musim Panas Inggris\x16Waktu Standar Irlandia\x0aWaktu " + + "Acre\x12Waktu Standar Acre\x16Waktu Musim Panas Acre\x10Waktu Afganistan" + + "\x13Waktu Afrika Tengah\x12Waktu Afrika Timur\x1cWaktu Standar Afrika Se" + + "latan\x12Waktu Afrika Barat\x1aWaktu Standar Afrika Barat\x1eWaktu Musim" + + " Panas Afrika Barat\x0cWaktu Alaska\x14Waktu Standar Alaska\x18Waktu Mus" + + "im Panas Alaska\x0cWaktu Almaty\x14Waktu Standar Almaty\x18Waktu Musim P" + + "anas Almaty\x0cWaktu Amazon\x14Waktu Standar Amazon\x18Waktu Musim Panas" + + " Amazon\x0cWaktu Tengah\x14Waktu Standar Tengah\x18Waktu Musim Panas Ten" + + "gah\x0bWaktu Timur\x13Waktu Standar Timur\x17Waktu Musim Panas Timur\x10" + + "Waktu Pegunungan\x18Waktu Standar Pegunungan\x1cWaktu Musim Panas Pegunu" + + "ngan\x0dWaktu Pasifik\x15Waktu Standar Pasifik\x19Waktu Musim Panas Pasi" + + "fik\x0cWaktu Anadyr\x14Waktu Standar Anadyr\x18Waktu Musim Panas Anadyr" + + "\x0aWaktu Apia\x12Waktu Standar Apia\x16Waktu Musim Panas Apia\x0bWaktu " + + "Aqtau\x13Waktu Standar Aqtau\x17Waktu Musim Panas Aqtau\x0cWaktu Aqtobe" + + "\x14Waktu Standar Aqtobe\x18Waktu Musim Panas Aqtobe\x0aWaktu Arab\x12Wa" + + "ktu Standar Arab\x16Waktu Musim Panas Arab\x0fWaktu Argentina\x17Waktu S" + + "tandar Argentina\x1bWaktu Musim Panas Argentina\x1cWaktu Argentina Bagia" + + "n Barat$Waktu Standar Argentina Bagian Barat(Waktu Musim Panas Argentina" + + " Bagian Barat\x0dWaktu Armenia\x15Waktu Standar Armenia\x19Waktu Musim P" + + "anas Armenia\x0eWaktu Atlantik\x16Waktu Standar Atlantik\x1aWaktu Musim " + + "Panas Atlantik\x16Waktu Tengah Australia\x1eWaktu Standar Tengah Austral" + + "ia\"Waktu Musim Panas Tengah Australia\x1cWaktu Barat Tengah Australia$W" + + "aktu Standar Barat Tengah Australia(Waktu Musim Panas Barat Tengah Austr" + + "alia\x15Waktu Timur Australia\x1dWaktu Standar Timur Australia!Waktu Mus" + + "im Panas Timur Australia\x15Waktu Barat Australia\x1dWaktu Standar Barat" + + " Australia!Waktu Musim Panas Barat Australia\x10Waktu Azerbaijan\x18Wakt" + + "u Standar Azerbaijan\x1cWaktu Musim Panas Azerbaijan\x0cWaktu Azores\x14" + + "Waktu Standar Azores\x18Waktu Musim Panas Azores\x10Waktu Bangladesh\x18" + + "Waktu Standar Bangladesh\x1cWaktu Musim Panas Bangladesh\x0cWaktu Bhutan" + + "\x0dWaktu Bolivia\x0cWaktu Brasil\x14Waktu Standar Brasil\x18Waktu Musim" + + " Panas Brasil\x17Waktu Brunei Darussalam\x13Waktu Tanjung Verde\x1bWaktu" + + " Standar Tanjung Verde\x1fWaktu Musim Panas Tanjung Verde\x0bWaktu Casey" + + "\x16Waktu Standar Chamorro\x0dWaktu Chatham\x15Waktu Standar Chatham\x19" + + "Waktu Musim Panas Chatham\x0aWaktu Cile\x12Waktu Standar Cile\x16Waktu M" + + "usim Panas Cile\x0eWaktu Tiongkok\x16Waktu Standar Tiongkok\x1aWaktu Mus" + + "im Panas Tiongkok\x10Waktu Choibalsan\x18Waktu Standar Choibalsan\x1cWak" + + "tu Musim Panas Choibalsan\x11Waktu Pulau Natal\x15Waktu Kepulauan Cocos" + + "\x0eWaktu Kolombia\x16Waktu Standar Kolombia\x1aWaktu Musim Panas Kolomb" + + "ia\x0fWaktu Kep. Cook\x17Waktu Standar Kep. Cook\"Waktu Tengah Musim Pan" + + "as Kep. Cook\x0aWaktu Kuba\x12Waktu Standar Kuba\x16Waktu Musim Panas Ku" + + "ba\x0bWaktu Davis\x18Waktu Dumont-d’Urville\x11Waktu Timor Leste\x12Wakt" + + "u Pulau Paskah\x1aWaktu Standar Pulau Paskah\x1eWaktu Musim Panas Pulau " + + "Paskah\x0dWaktu Ekuador\x12Waktu Eropa Tengah\x1aWaktu Standar Eropa Ten" + + "gah\x1eWaktu Musim Panas Eropa Tengah\x11Waktu Eropa Timur\x19Waktu Stan" + + "dar Eropa Timur\x1dWaktu Musim Panas Eropa Timur\x16Waktu Eropa Timur Ja" + + "uh\x11Waktu Eropa Barat\x19Waktu Standar Eropa Barat\x1dWaktu Musim Pana" + + "s Eropa Barat\x18Waktu Kepulauan Falkland Waktu Standar Kepulauan Falkla" + + "nd$Waktu Musim Panas Kepulauan Falkland\x0aWaktu Fiji\x12Waktu Standar F" + + "iji\x16Waktu Musim Panas Fiji\x14Waktu Guyana Prancis,Waktu Wilayah Sela" + + "tan dan Antarktika Prancis\x0fWaktu Galapagos\x0dWaktu Gambier\x0dWaktu " + + "Georgia\x15Waktu Standar Georgia\x19Waktu Musim Panas Georgia\x12Waktu K" + + "ep. Gilbert\x13Greenwich Mean Time\x15Waktu Greenland Timur\x1dWaktu Sta" + + "ndar Greenland Timur!Waktu Musim Panas Greenland Timur\x15Waktu Greenlan" + + "d Barat\x1dWaktu Standar Greenland Barat!Waktu Musim Panas Greenland Bar" + + "at\x0aWaktu Guam\x13Waktu Standar Teluk\x0cWaktu Guyana\x15Waktu Hawaii-" + + "Aleutian\x1dWaktu Standar Hawaii-Aleutian!Waktu Musim Panas Hawaii-Aleut" + + "ian\x0fWaktu Hong Kong\x17Waktu Standar Hong Kong\x1bWaktu Musim Panas H" + + "ong Kong\x0aWaktu Hovd\x12Waktu Standar Hovd\x16Waktu Musim Panas Hovd" + + "\x0bWaktu India\x15Waktu Samudera Hindia\x0fWaktu Indochina\x16Waktu Ind" + + "onesia Tengah\x04WITA\x15Waktu Indonesia Timur\x03WIT\x15Waktu Indonesia" + + " Barat\x03WIB\x0aWaktu Iran\x12Waktu Standar Iran\x16Waktu Musim Panas I" + + "ran\x0dWaktu Irkutsk\x15Waktu Standar Irkutsk\x19Waktu Musim Panas Irkut" + + "sk\x0cWaktu Israel\x14Waktu Standar Israel\x18Waktu Musim Panas Israel" + + "\x0cWaktu Jepang\x14Waktu Standar Jepang\x18Waktu Musim Panas Jepang\x1e" + + "Waktu Petropavlovsk-Kamchatsky&Waktu Standar Petropavlovsk-Kamchatsky*Wa" + + "ktu Musim Panas Petropavlovsk-Kamchatski\x16Waktu Kazakhstan Timur\x16Wa" + + "ktu Kazakhstan Barat\x0bWaktu Korea\x13Waktu Standar Korea\x17Waktu Musi" + + "m Panas Korea\x0cWaktu Kosrae\x11Waktu Krasnoyarsk\x19Waktu Standar Kras" + + "noyarsk\x1dWaktu Musim Panas Krasnoyarsk\x0fWaktu Kirghizia\x0bWaktu Lan" + + "ka\x0fWaktu Kep. Line\x0fWaktu Lord Howe\x17Waktu Standar Lord Howe\x1bW" + + "aktu Musim Panas Lord Howe\x0bWaktu Makau\x13Waktu Standar Makau\x17Wakt" + + "u Musim Panas Makau\x19Waktu Kepulauan Macquarie\x0dWaktu Magadan\x15Wak" + + "tu Standar Magadan\x19Waktu Musim Panas Magadan\x0eWaktu Malaysia\x0eWak" + + "tu Maladewa\x0fWaktu Marquesas\x13Waktu Kep. Marshall\x0fWaktu Mauritius" + + "\x17Waktu Standar Mauritius\x1bWaktu Musim Panas Mauritius\x0cWaktu Maws" + + "on\x18Waktu Meksiko Barat Laut Waktu Standar Meksiko Barat Laut$Waktu Mu" + + "sim Panas Meksiko Barat Laut\x15Waktu Pasifik Meksiko\x1dWaktu Standar P" + + "asifik Meksiko!Waktu Musim Panas Pasifik Meksiko\x10Waktu Ulan Bator\x18" + + "Waktu Standar Ulan Bator\x1cWaktu Musim Panas Ulan Bator\x0cWaktu Moskwa" + + "\x14Waktu Standar Moskwa\x18Waktu Musim Panas Moskwa\x0dWaktu Myanmar" + + "\x0bWaktu Nauru\x0bWaktu Nepal\x14Waktu Kaledonia Baru\x1cWaktu Standar " + + "Kaledonia Baru Waktu Musim Panas Kaledonia Baru\x13Waktu Selandia Baru" + + "\x1bWaktu Standar Selandia Baru\x1fWaktu Musim Panas Selandia Baru\x12Wa" + + "ktu Newfoundland\x1aWaktu Standar Newfoundland\x1eWaktu Musim Panas Newf" + + "oundland\x0aWaktu Niue\x17Waktu Kepulauan Norfolk\x19Waktu Fernando de N" + + "oronha!Waktu Standar Fernando de Noronha%Waktu Musim Panas Fernando de N" + + "oronha\x18Waktu Kep. Mariana Utara\x11Waktu Novosibirsk\x19Waktu Standar" + + " Novosibirsk\x1dWaktu Musim Panas Novosibirsk\x0aWaktu Omsk\x12Waktu Sta" + + "ndar Omsk\x16Waktu Musim Panas Omsk\x0eWaktu Pakistan\x16Waktu Standar P" + + "akistan\x1aWaktu Musim Panas Pakistan\x0bWaktu Palau\x12Waktu Papua Nugi" + + "ni\x0eWaktu Paraguay\x16Waktu Standar Paraguay\x1aWaktu Musim Panas Para" + + "guay\x0aWaktu Peru\x12Waktu Standar Peru\x16Waktu Musim Panas Peru\x0eWa" + + "ktu Filipina\x16Waktu Standar Filipina\x1aWaktu Musim Panas Filipina\x17" + + "Waktu Kepulauan Phoenix\x1fWaktu Saint Pierre dan Miquelon'Waktu Standar" + + " Saint Pierre dan Miquelon+Waktu Musim Panas Saint Pierre dan Miquelon" + + "\x0eWaktu Pitcairn\x0cWaktu Ponape\x0fWaktu Pyongyang\x0fWaktu Qyzylorda" + + "\x17Waktu Standar Qyzylorda\x1bWaktu Musim Panas Qyzylorda\x0dWaktu Reun" + + "ion\x0dWaktu Rothera\x0eWaktu Sakhalin\x16Waktu Standar Sakhalin\x1aWakt" + + "u Musim Panas Sakhalin\x0cWaktu Samara\x14Waktu Standar Samara\x18Waktu " + + "Musim Panas Samara\x0bWaktu Samoa\x13Waktu Standar Samoa\x17Waktu Musim " + + "Panas Samoa\x10Waktu Seychelles\x17Waktu Standar Singapura\x17Waktu Kepu" + + "lauan Solomon\x15Waktu Georgia Selatan\x0eWaktu Suriname\x0bWaktu Syowa" + + "\x0cWaktu Tahiti\x0cWaktu Taipei\x14Waktu Standar Taipei\x18Waktu Musim " + + "Panas Taipei\x10Waktu Tajikistan\x0dWaktu Tokelau\x0bWaktu Tonga\x13Wakt" + + "u Standar Tonga\x17Waktu Musim Panas Tonga\x0bWaktu Chuuk\x12Waktu Turkm" + + "enistan\x1aWaktu Standar Turkmenistan\x1eWaktu Musim Panas Turkmenistan" + + "\x0cWaktu Tuvalu\x0dWaktu Uruguay\x15Waktu Standar Uruguay\x19Waktu Musi" + + "m Panas Uruguay\x10Waktu Uzbekistan\x18Waktu Standar Uzbekistan\x1cWaktu" + + " Musim Panas Uzbekistan\x0dWaktu Vanuatu\x15Waktu Standar Vanuatu\x19Wak" + + "tu Musim Panas Vanuatu\x0fWaktu Venezuela\x11Waktu Vladivostok\x19Waktu " + + "Standar Vladivostok\x1dWaktu Musim Panas Vladivostok\x0fWaktu Volgograd" + + "\x17Waktu Standar Volgograd\x1bWaktu Musim Panas Volgograd\x0cWaktu Vost" + + "ok\x14Waktu Kepulauan Wake\x17Waktu Wallis dan Futuna\x0dWaktu Yakutsk" + + "\x15Waktu Standar Yakutsk\x19Waktu Musim Panas Yakutsk\x13Waktu Yekateri" + + "nburg\x1bWaktu Standar Yekaterinburg\x1fWaktu Musim Panas Yekaterinburg" + + "\x03Bal\x03Lw2\x03Lw3\x03Lw4\x03Lw5\x03Lw6\x0bbulan depan\x0cSelasa depa" + + "n\x0aRabu depan\x0bSabtu depan\x0fWaktu Siang {0}\x10Waktu Piawai {0}" + + "\x12Waktu Siang Alaska\x0bWaktu Pusat\x12Waktu Siang Tengah\x11Waktu Sia" + + "ng Timur\x11Waktu Pergunungan\x1cWaktu Hari Siang Pergunungan\x13Waktu S" + + "iang Pasifik\x10Waktu Siang Apia\x10Waktu Siang Arab\x15Waktu Argentina " + + "Barat!Waktu Musim Panas Argentina Barat\x14Waktu Siang Atlantik\x16Waktu" + + " Australia Tengah\x1cWaktu Siang Australia Tengah\"Waktu Siang Barat Ten" + + "gah Australia\x15Waktu Australia Timur\x1bWaktu Siang Australia Timur" + + "\x15Waktu Australia Barat\x1bWaktu Siang Australia Barat\x0eWaktu Brasil" + + "ia\x1aWaktu Musim Panas Brasilia\x13Waktu Siang Chatham\x0bWaktu Chile" + + "\x17Waktu Musim Panas Chile\x0bWaktu China\x11Waktu Siang China\x0eWaktu" + + " Colombia\x1aWaktu Musim Panas Colombia\x14Waktu Kepulauan Cook(Waktu Mu" + + "sim Panas Separuh Kepulauan Cook\x0aWaktu Cuba\x10Waktu Siang Cuba\x12Wa" + + "ktu Pulau Easter\x1eWaktu Musim Panas Pulau Easter\x13Waktu Eropah Tenga" + + "h\x1fWaktu Musim Panas Eropah Tengah\x12Waktu Eropah Timur\x1eWaktu Musi" + + "m Panas Eropah Timur\x12Waktu Eropah Barat\x1eWaktu Musim Panas Eropah B" + + "arat\x1bWaktu Siang Hawaii-Aleutian\x10Waktu Siang Iran\x12Waktu Siang I" + + "srael\x0bWaktu Jepun\x11Waktu Siang Jepun\x1eWaktu Petropavlovsk-Kamchat" + + "ski\x11Waktu Siang Korea\x15Waktu Siang Lord Howe\x17Waktu Barat Laut Me" + + "xico\x1dWaktu Siang Barat Laut Mexico\x14Waktu Pasifik Mexico\x1aWaktu S" + + "iang Pasifik Mexico\x0cWaktu Moscow\x18Waktu Musim Panas Moscow\x13Waktu" + + " New Caledonia\x1fWaktu Musim Panas New Caledonia\x11Waktu New Zealand" + + "\x17Waktu Siang New Zealand\x18Waktu Siang Newfoundland%Waktu Siang Sain" + + "t Pierre dan Miquelon\x12Waktu Siang Taipei" + +var bucket52 string = "" + // Size: 12007 bytes + "\x03Jen\x03Feb\x03Maa\x03Epr\x03Mee\x03Juu\x03Jul\x07Ọgọ\x03Sep\x05Ọkt" + + "\x03Nov\x03Dis\x0cJenụwarị\x0dFebrụwarị\x08Maachị\x05Eprel\x04Juun\x07Ju" + + "laị\x0cỌgọọst\x08Septemba\x08Ọktoba\x07Novemba\x07Disemba\x05Ụka\x05Mọn" + + "\x03Tiu\x03Wen\x07Tọọ\x06Fraị\x03Sat\x0fMbọsị Ụka\x07Mọnde\x07Tiuzdee" + + "\x08Wenezdee\x0bTọọzdee\x09Fraịdee\x09Satọdee\x04Ọ1\x04Ọ2\x04Ọ3\x04Ọ4" + + "\x09Ọkara 1\x09Ọkara 2\x09Ọkara 3\x09Ọkara 4\x04P.M.\x0bTupu Kristi\x0cA" + + "fọ Kristi\x04T.K.\x04A.K.\x04Agba\x05Afọ\x06Ọnwa\x03Izu\x0cỤbọchị\x09Nny" + + "aafụ\x05Taata\x04Echi\x10Ụbọchị izu\x1cN’ụtụtụ/N’anyasị\x07Elekere\x05Nk" + + "eji\x08Nkejinta\x0cMpaghara oge\x06ꋍꆪ\x06ꑍꆪ\x06ꌕꆪ\x06ꇖꆪ\x06ꉬꆪ\x06ꃘꆪ\x06ꏃ" + + "ꆪ\x06ꉆꆪ\x06ꈬꆪ\x06ꊰꆪ\x09ꊰꊪꆪ\x09ꊰꑋꆪ\x06ꑭꆏ\x06ꆏꋍ\x06ꆏꑍ\x06ꆏꌕ\x06ꆏꇖ\x06ꆏꉬ" + + "\x06ꆏꃘ\x03ꆏ\x03ꋍ\x03ꑍ\x03ꌕ\x03ꇖ\x03ꉬ\x03ꃘ\x09ꑭꆏꑍ\x09ꆏꊂꋍ\x09ꆏꊂꑍ\x09ꆏꊂꌕ" + + "\x09ꆏꊂꇖ\x09ꆏꊂꉬ\x09ꆏꊂꃘ\x06ꃅꑌ\x06ꃅꎸ\x06ꃅꍵ\x06ꃅꋆ\x06ꎸꄑ\x06ꁯꋒ\x09ꃅꋊꂿ\x09ꃅꋊꊂ" + + "\x06ꃅꋊ\x03ꈎ\x03ꆪ\x0cꎴꂿꋍꑍ\x09ꀋꅔꉈ\x06ꀃꑍ\x09ꃆꏂꑍ\x09ꌕꀿꑍ\x0dꎸꄑ/ꁯꋒ\x06ꄮꈉ\x03ꃏ" + + "\x03ꇙ\x0cꃅꄷꄮꈉ\x0ebúddhadagatal\x02BD\x09Tímabil0\x09Tímabil1\x07janúar" + + "\x08febrúar\x04mars\x06apríl\x04maí\x06júní\x06júlí\x07ágúst\x09septembe" + + "r\x08október\x09nóvember\x08desember\x04maí\x02F1\x02F2\x02F3\x02F4\x0f1" + + ". fjórðungur\x0f2. fjórðungur\x0f3. fjórðungur\x0f4. fjórðungur\x0amiðnæ" + + "tti\x04f.h.\x07hádegi\x04e.h.\x0aað morgni\x0asíðdegis\x0bað kvöldi\x0aa" + + "ð nóttu\x03mn.\x04mrg.\x03sd.\x07morgunn\x06kvöld\x05nótt\x03hd.\x0deft" + + "ir hádegi\x0bfyrir Krist\x17fyrir kristið tímatal\x0beftir Krist\x11kris" + + "tið tímatal\x06f.l.t.\x04l.t.\x04f.k.\x04e.k.\x0beftir Hijra\x02EH\x16fy" + + "rir lýðveldi Kína\x06Minguo\x13fyrir lýðv. Kína\x0bfyrir lv.K.\x08tímabi" + + "l\x11á síðasta ári\x0eá þessu ári\x0eá næsta ári\x0deftir {0} ár\x0efyri" + + "r {0} ári\x0ffyrir {0} árum\x10ársfjórðungur\x1asíðasti ársfjórðungur" + + "\x17þessi ársfjórðungur\x17næsti ársfjórðungur\x18eftir {0} ársfjórðung" + + "\x19eftir {0} ársfjórðunga\x19fyrir {0} ársfjórðungi\x1afyrir {0} ársfjó" + + "rðungum\x0cársfjórð.\x11síðasti ársfj.\x0eþessi ársfj.\x0enæsti ársfj." + + "\x11eftir {0} ársfj.\x11fyrir {0} ársfj.\x09mánuður\x15í síðasta mánuði" + + "\x13í þessum mánuði\x12í næsta mánuði\x11eftir {0} mánuð\x12eftir {0} má" + + "nuði\x12fyrir {0} mánuði\x13fyrir {0} mánuðum\x12í síðasta mán.\x10í þes" + + "sum mán.\x0fí næsta mán.\x0feftir {0} mán.\x0ffyrir {0} mán.\x11í síðust" + + "u viku\x10í þessari viku\x0eí næstu viku\x0eeftir {0} viku\x0feftir {0} " + + "vikur\x0efyrir {0} viku\x0ffyrir {0} vikum\x08vika {0}\x09+{0} viku\x0a+" + + "{0} vikur\x09-{0} viku\x0a-{0} vikur\x10vika í mánuði\x0bí fyrradag\x07í" + + " gær\x06í dag\x09á morgun\x0eeftir tvo daga\x0deftir {0} dag\x0eeftir {0" + + "} daga\x0efyrir {0} degi\x10fyrir {0} dögum\x08+{0} dag\x09+{0} daga\x09" + + "-{0} degi\x0b-{0} dögum\x0ddagur í ári\x06vikud.\x15vikudagur í mánuði" + + "\x0fvikud. í mán.\x12síðasta sunnudag\x11núna á sunnudag\x0fnæsta sunnud" + + "ag\x12eftir {0} sunnudag\x13eftir {0} sunnudaga\x13fyrir {0} sunnudegi" + + "\x15fyrir {0} sunnudögum\x0esíðasta sun.\x0bþessi sun.\x0bnæsta sun.\x0e" + + "eftir {0} sun.\x0efyrir {0} sun.\x0esíðasti sun.\x08nk. sun.\x12síðasta " + + "mánudag\x11núna á mánudag\x0fnæsta mánudag\x12eftir {0} mánudag\x13eftir" + + " {0} mánudaga\x13fyrir {0} mánudegi\x15fyrir {0} mánudögum\x0fsíðasta má" + + "n.\x0enúna á mán.\x0cnæsta mán.\x0fsíðasti mán.\x0cþessi mán.\x09nk. mán" + + ".\x15síðasta þriðjudag\x17núna á þriðjudaginn\x12næsta þriðjudag\x15efti" + + "r {0} þriðjudag\x16eftir {0} þriðjudaga\x16fyrir {0} þriðjudegi\x18fyrir" + + " {0} þriðjudögum\x0fsíðasti þri.\x0cþessi þri.\x12næstkomandi þri.\x0fef" + + "tir {0} þri.\x0ffyrir {0} þri.\x09nk. þri.\x15síðasta miðvikudag\x17núna" + + " á miðvikudaginn\x12næsta miðvikudag\x15eftir {0} miðvikudag\x16eftir {0" + + "} miðvikudaga\x16fyrir {0} miðvikudegi\x18fyrir {0} miðvikudögum\x0fsíða" + + "sti mið.\x0cþessi mið.\x12næstkomandi mið.\x0feftir {0} mið.\x0ffyrir {0" + + "} mið.\x09nk. mið.\x13síðasta fimmtudag\x15núna á fimmtudaginn\x10næsta " + + "fimmtudag\x13eftir {0} fimmtudag\x14eftir {0} fimmtudaga\x14fyrir {0} fi" + + "mmtudegi\x16fyrir {0} fimmtudögum\x0esíðasti fim.\x0bþessi fim.\x11næstk" + + "omandi fim.\x0eeftir {0} fim.\x0efyrir {0} fim.\x08nk. fim.\x13síðasta f" + + "östudag\x15núna á föstudaginn\x10næsta föstudag\x13eftir {0} föstudag" + + "\x14eftir {0} föstudaga\x14fyrir {0} föstudegi\x16fyrir {0} föstudögum" + + "\x0fsíðasta fös.\x08á fös.\x0cnæsta fös.\x0feftir {0} fös.\x0ffyrir {0} " + + "fös.\x13síðasta laugardag\x15núna á laugardaginn\x10næsta laugardag\x13e" + + "ftir {0} laugardag\x14eftir {0} laugardaga\x14fyrir {0} laugardegi\x16fy" + + "rir {0} laugardögum\x0esíðasta lau.\x07á lau.\x0bnæsta lau.\x0eeftir {0}" + + " lau.\x0efyrir {0} lau.\x09f.h./e.h.\x0bklukkustund\x0fþessa stundina" + + "\x15eftir {0} klukkustund\x17eftir {0} klukkustundir\x15fyrir {0} klukku" + + "stund\x17fyrir {0} klukkustundum\x05klst.\x0feftir {0} klst.\x0ffyrir {0" + + "} klst.\x0a+{0} klst.\x0a-{0} klst.\x08mínúta\x14á þessari mínútu\x12eft" + + "ir {0} mínútu\x13eftir {0} mínútur\x12fyrir {0} mínútu\x13fyrir {0} mínú" + + "tum\x05mín.\x0feftir {0} mín.\x0ffyrir {0} mín.\x0a+{0} mín.\x0a-{0} mín" + + ".\x08sekúnda\x05núna\x12eftir {0} sekúndu\x13eftir {0} sekúndur\x12fyrir" + + " {0} sekúndu\x13fyrir {0} sekúndum\x0eeftir {0} sek.\x0efyrir {0} sek." + + "\x09+{0} sek.\x09-{0} sek.\x0atímabelti\x07tímab.\x1fSamræmdur alþjóðleg" + + "ur tími\x17Sumartími í Bretlandi\x16Sumartími á Írlandi\x0fAfganistantím" + + "i\x11Mið-Afríkutími\x13Austur-Afríkutími\x13Suður-Afríkutími\x13Vestur-A" + + "fríkutími\x1eStaðaltími í Vestur-Afríku\x1cSumartími í Vestur-Afríku\x0f" + + "Tími í Alaska\x16Staðaltími í Alaska\x14Sumartími í Alaska\x0cAmasóntími" + + " Staðaltími á Amasónsvæðinu\x1eSumartími á Amasónsvæðinu+Tími í miðhluta" + + " Bandaríkjanna og Kanada2Staðaltími í miðhluta Bandaríkjanna og Kanada0S" + + "umartími í miðhluta Bandaríkjanna og Kanada-Tími í austurhluta Bandaríkj" + + "anna og Kanada4Staðaltími í austurhluta Bandaríkjanna og Kanada2Sumartím" + + "i í austurhluta Bandaríkjanna og Kanada\x17Tími í Klettafjöllum\x1eStaða" + + "ltími í Klettafjöllum\x1cSumartími í Klettafjöllum\x1bTími á Kyrrahafssv" + + "æðinu\"Staðaltími á Kyrrahafssvæðinu Sumartími á Kyrrahafssvæðinu\x0fTí" + + "mi í Anadyr\x16Staðaltími í Anadyr\x14Sumartími í Anadyr\x0eTími í Apía" + + "\x15Staðaltími í Apía\x13Sumartími í Apía\x0cArabíutími\x17Staðaltími í " + + "Arabíu\x15Sumartími í Arabíu\x0fArgentínutími\x1aStaðaltími í Argentínu" + + "\x18Sumartími í Argentínu\x16Vestur-Argentínutími!Staðaltími í Vestur-Ar" + + "gentínu\x1fSumartími í Vestur-Argentínu\x0dArmeníutími\x18Staðaltími í A" + + "rmeníu\x16Sumartími í Armeníu\x1dTími á Atlantshafssvæðinu$Staðaltími á " + + "Atlantshafssvæðinu\"Sumartími á Atlantshafssvæðinu\x18Tími í Mið-Ástralí" + + "u\x1fStaðaltími í Mið-Ástralíu\x1dSumartími í Mið-Ástralíu#Tími í miðves" + + "turhluta Ástralíu*Staðaltími í miðvesturhluta Ástralíu(Sumartími í miðve" + + "sturhluta Ástralíu\x1aTími í Austur-Ástralíu!Staðaltími í Austur-Ástralí" + + "u\x1fSumartími í Austur-Ástralíu\x1aTími í Vestur-Ástralíu!Staðaltími í " + + "Vestur-Ástralíu\x1fSumartími í Vestur-Ástralíu\x12Aserbaídsjantími\x1dSt" + + "aðaltími í Aserbaídsjan\x1bSumartími í Aserbaídsjan\x0eAsóreyjatími\x1aS" + + "taðaltími á Asóreyjum\x18Sumartími á Asóreyjum\x10Bangladess-tími\x1aSta" + + "ðaltími í Bangladess\x18Sumartími í Bangladess\x0bBútantími\x0eBólivíut" + + "ími\x0eBrasilíutími\x19Staðaltími í Brasilíu\x17Sumartími í Brasilíu" + + "\x0cBrúneitími\x15Grænhöfðaeyjatími!Staðaltími á Grænhöfðaeyjum\x1fSumar" + + "tími á Grænhöfðaeyjum\x15Chamorro-staðaltími\x0dChatham-tími\x17Staðaltí" + + "mi í Chatham\x15Sumartími í Chatham\x0aSíletími\x15Staðaltími í Síle\x13" + + "Sumartími í Síle\x0aKínatími\x15Staðaltími í Kína\x13Sumartími í Kína" + + "\x13Tími í Choibalsan\x1aStaðaltími í Choibalsan\x18Sumartími í Choibals" + + "an\x0fJólaeyjartími\x0fKókoseyjatími\x0fKólumbíutími\x1aStaðaltími í Kól" + + "umbíu\x18Sumartími í Kólumbíu\x0fCooks-eyjatími\x1bStaðaltími á Cooks-ey" + + "jum\x1eHálfsumartími á Cooks-eyjum\x0aKúbutími\x15Staðaltími á Kúbu\x13S" + + "umartími á Kúbu\x0bDavis-tími\x1bTími á Dumont-d’Urville\x17Tíminn á Tím" + + "or-Leste\x0fPáskaeyjutími\x1aStaðaltími á Páskaeyju\x18Sumartími á Páska" + + "eyju\x0cEkvadortími\x11Mið-Evróputími\x1cStaðaltími í Mið-Evrópu\x1aSuma" + + "rtími í Mið-Evrópu\x13Austur-Evróputími\x1eStaðaltími í Austur-Evrópu" + + "\x1cSumartími í Austur-Evrópu\x1aStaðartími Kalíníngrad\x13Vestur-Evrópu" + + "tími\x1eStaðaltími í Vestur-Evrópu\x1cSumartími í Vestur-Evrópu\x12Falkl" + + "andseyjatími\x1eStaðaltími á Falklandseyjum\x1cSumartími á Falklandseyju" + + "m\x10Fídjíeyjatími\x1cStaðaltími á Fídjíeyjum\x1aSumartími á Fídjíeyjum" + + "\x1aTími í Frönsku Gvæjana@Tími á frönsku suðurhafssvæðum og Suðurskauts" + + "landssvæði\x0fGalapagos-tími\x0dGambier-tími\x0dGeorgíutími\x18Staðaltím" + + "i í Georgíu\x16Sumartími í Georgíu\x16Tími á Gilbert-eyjum\x16Greenwich-" + + "staðaltími\x16Austur-Grænlandstími!Staðaltími á Austur-Grænlandi\x1fSuma" + + "rtími á Austur-Grænlandi\x16Vestur-Grænlandstími!Staðaltími á Vestur-Græ" + + "nlandi\x1fSumartími á Vestur-Grænlandi\x1cStaðaltími við Persaflóa\x0dGv" + + "æjanatími\x1aTími á Havaí og Aleúta!Staðaltími á Havaí og Aleúta\x1fSum" + + "artími á Havaí og Aleúta\x0fHong Kong-tími\x19Staðaltími í Hong Kong\x17" + + "Sumartími í Hong Kong\x0aHovd-tími\x14Staðaltími í Hovd\x12Sumartími í H" + + "ovd\x0dIndlandstími\x11Indlandshafstími\x0fIndókínatími\x15Mið-Indónesíu" + + "tími\x17Austur-Indónesíutími\x17Vestur-Indónesíutími\x0bÍranstími\x15Sta" + + "ðaltími í Íran\x13Sumartími í Íran\x10Tími í Irkutsk\x17Staðaltími í Ir" + + "kutsk\x15Sumartími í Irkutsk\x0dÍsraelstími\x17Staðaltími í Ísrael\x15Su" + + "martími í Ísrael\x0bJapanstími\x15Staðaltími í Japan\x13Sumartími í Japa" + + "n!Tími í Petropavlovsk-Kamchatski(Staðaltími í Petropavlovsk-Kamchatski&" + + "Sumartími í Petropavlovsk-Kamchatski\x19Tími í Austur-Kasakstan\x19Tími " + + "í Vestur-Kasakstan\x0bKóreutími\x16Staðaltími í Kóreu\x14Sumartími í Kó" + + "reu\x0cKosrae-tími\x14Tími í Krasnoyarsk\x1bStaðaltími í Krasnoyarsk\x19" + + "Sumartími í Krasnoyarsk\x0fKirgistan-tími\x0fLínueyja-tími\x17Tími á Lor" + + "d Howe-eyju\x1eStaðaltími á Lord Howe-eyju\x1cSumartími á Lord Howe-eyju" + + "\x14Macquarie-eyjartími\x10Tími í Magadan\x17Staðaltími í Magadan\x15Sum" + + "artími í Magadan\x0dMalasíutími\x11Maldíveyja-tími\x1dTími á Markgreifaf" + + "rúreyjum\x17Tími á Marshall-eyjum\x0fMáritíustími\x1aStaðaltími á Márití" + + "us\x18Sumartími á Máritíus\x0cMawson-tími\x1dTími í Norðvestur-Mexíkó$St" + + "aðaltími í Norðvestur-Mexíkó\"Sumartími í Norðvestur-Mexíkó\x1aKyrrahafs" + + "tími í Mexíkó.Staðaltími í Mexíkó á Kyrrahafssvæðinu,Sumartími í Mexíkó " + + "á Kyrrahafssvæðinu\x14Tími í Úlan Bator\x1bStaðaltími í Úlan Bator\x19S" + + "umartími í Úlan Bator\x0bMoskvutími\x16Staðaltími í Moskvu\x14Sumartími " + + "í Moskvu\x0dMjanmar-tími\x0cNárú-tími\x0aNepaltími\x1aTími í Nýju-Kaled" + + "óníu!Staðaltími í Nýju-Kaledóníu\x1fSumartími í Nýju-Kaledóníu\x18Tími " + + "á Nýja-Sjálandi\x1fStaðaltími á Nýja-Sjálandi\x1dSumartími á Nýja-Sjála" + + "ndi\x17Tími á Nýfundnalandi\x1eStaðaltími á Nýfundnalandi\x1cSumartími á" + + " Nýfundnalandi\x0aNiue-tími\x15Tími á Norfolk-eyju\x1cTími í Fernando de" + + " Noronha#Staðaltími í Fernando de Noronha!Sumartími í Fernando de Noronh" + + "a\x14Tími í Novosibirsk\x1bStaðaltími í Novosibirsk\x19Sumartími í Novos" + + "ibirsk\x0fTíminn í Omsk\x14Staðaltími í Omsk\x12Sumartími í Omsk\x0dPaki" + + "stantími\x18Staðaltími í Pakistan\x16Sumartími í Pakistan\x0aPalátími" + + "\x1cTími á Papúa Nýju-Gíneu\x0dParagvætími\x18Staðaltími í Paragvæ\x16Su" + + "martími í Paragvæ\x0aPerútími\x15Staðaltími í Perú\x13Sumartími í Perú" + + "\x10Filippseyjatími\x1cStaðaltími á Filippseyjum\x1aSumartími á Filippse" + + "yjum\x0fFönixeyjatími\"Tími á Sankti Pierre og Miquelon)Staðaltími á San" + + "kti Pierre og Miquelon'Sumartími á Sankti Pierre og Miquelon\x0ePitcairn" + + "-tími\x0cPonape-tími\x12Tími í Pjongjang\x0eRéunion-tími\x0dRothera-tími" + + "\x11Tími í Sakhalin\x18Staðaltími í Sakhalin\x16Sumartími í Sakhalin\x0f" + + "Tími í Samara\x16Staðaltími í Samara\x14Sumartími í Samara\x0cSamóa-tími" + + "\x16Staðaltími á Samóa\x14Sumartími á Samóa\x14Seychelles-eyjatími\x0eSi" + + "ngapúrtími\x12Salómonseyjatími\x14Suður-Georgíutími\x0dSúrinamtími\x0bSy" + + "owa-tími\x0eTahítí-tími\x0cTaipei-tími\x16Staðaltími í Taipei\x14Sumartí" + + "mi í Taipei\x13Tadsjíkistan-tími\x0eTókelá-tími\x0aTongatími\x15Staðaltí" + + "mi á Tonga\x13Sumartími á Tonga\x0bChuuk-tími\x13Túrkmenistan-tími\x1dSt" + + "aðaltími í Túrkmenistan\x1bSumartími í Túrkmenistan\x0dTúvalútími\x0eÚrú" + + "gvætími\x19Staðaltími í Úrúgvæ\x17Sumartími í Úrúgvæ\x11Úsbekistan-tími" + + "\x1bStaðaltími í Úsbekistan\x19Sumartími í Úsbekistan\x0fVanúatú-tími" + + "\x19Staðaltími á Vanúatú\x17Sumartími á Vanúatú\x0fVenesúelatími\x14Tími" + + " í Vladivostok\x1bStaðaltími í Vladivostok\x19Sumartími í Vladivostok" + + "\x12Tími í Volgograd\x19Staðaltími í Volgograd\x17Sumartími í Volgograd" + + "\x0cVostok-tími\x12Tími á Wake-eyju!Tími á Wallis- og Fútúnaeyjum\x12Tím" + + "inn í Yakutsk\x17Staðaltími í Yakutsk\x15Sumartími í Yakutsk\x16Tími í Y" + + "ekaterinburg\x1dStaðaltími í Yekaterinborg\x1bSumartími í Yekaterinburg" + + "\x03Hor\x04Mär\x03Abr\x03Mei\x04Brá\x03Hei\x04Öig\x03Her\x04Wím\x03Win" + + "\x03Chr" + +var bucket53 string = "" + // Size: 10443 bytes + "\x09dd MMMM U\x08dd MMM U\x0e{1} 'alle' {0}\x07gennaio\x08febbraio\x05ma" + + "rzo\x06aprile\x06maggio\x06giugno\x06luglio\x06agosto\x09settembre\x07ot" + + "tobre\x08novembre\x08dicembre\x08domenica\x07lunedì\x08martedì\x0amercol" + + "edì\x08giovedì\x08venerdì\x06sabato\x0d1º trimestre\x0d2º trimestre\x0d3" + + "º trimestre\x0d4º trimestre\x0amezzanotte\x0bmezzogiorno\x0adi mattina" + + "\x0edel pomeriggio\x07di sera\x08di notte\x07mattina\x0apomeriggio\x04se" + + "ra\x05notte\x0davanti Cristo\x12avanti Era Volgare\x0bdopo Cristo\x0bEra" + + " Volgare\x06a.E.V.\x04E.V.\x0fPrima di R.O.C.\x06Minguo\x04anno\x0banno " + + "scorso\x0cquest’anno\x0danno prossimo\x0ctra {0} anno\x0ctra {0} anni" + + "\x0b{0} anno fa\x0b{0} anni fa\x10trimestre scorso\x10questo trimestre" + + "\x12trimestre prossimo\x11tra {0} trimestre\x11tra {0} trimestri\x10{0} " + + "trimestre fa\x10{0} trimestri fa\x0ctrim. scorso\x0cquesto trim.\x0etrim" + + ". prossimo\x0dtra {0} trim.\x0c{0} trim. fa\x04mese\x0bmese scorso\x0bqu" + + "esto mese\x0dmese prossimo\x0ctra {0} mese\x0ctra {0} mesi\x0b{0} mese f" + + "a\x0b{0} mesi fa\x09settimana\x10settimana scorsa\x10questa settimana" + + "\x12settimana prossima\x11tra {0} settimana\x11tra {0} settimane\x10{0} " + + "settimana fa\x10{0} settimane fa\x14la settimana del {0}\x05sett.\x0dtra" + + " {0} sett.\x0c{0} sett. fa\x12settimana del mese\x0asett. mese\x06giorno" + + "\x0el’altro ieri\x04ieri\x04oggi\x06domani\x0adopodomani\x0etra {0} gior" + + "no\x0etra {0} giorni\x0d{0} giorno fa\x0d{0} giorni fa\x09tra {0} g\x0at" + + "ra {0} gg\x08{0} g fa\x09{0} gg fa\x12giorno dell’anno\x0bgiorno anno" + + "\x16giorno della settimana\x10giorno settimana\x0cgiorno sett.\x0fgiorno" + + " del mese\x0bgiorno mese\x0fdomenica scorsa\x0fquesta domenica\x11domeni" + + "ca prossima\x10tra {0} domenica\x11tra {0} domeniche\x0f{0} domenica fa" + + "\x10{0} domeniche fa\x0bdom. scorsa\x0bquesta dom.\x0ddom. prossima\x0ct" + + "ra {0} dom.\x0b{0} dom. fa\x0elunedì scorso\x0equesto lunedì\x10lunedì p" + + "rossimo\x0ftra {0} lunedì\x0e{0} lunedì fa\x0blun. scorso\x0bquesto lun." + + "\x0dlun. prossimo\x0ctra {0} lun.\x0b{0} lun. fa\x0fmartedì scorso\x0fqu" + + "esto martedì\x11martedì prossimo\x10tra {0} martedì\x0f{0} martedì fa" + + "\x0bmar. scorso\x0bquesto mar.\x0dmar. prossimo\x0ctra {0} mar.\x0b{0} m" + + "ar. fa\x11mercoledì scorso\x11questo mercoledì\x13mercoledì prossimo\x12" + + "tra {0} mercoledì\x11{0} mercoledì fa\x0bmer. scorso\x0bquesto mer.\x0dm" + + "er. prossimo\x0ctra {0} mer.\x0b{0} mer. fa\x0fgiovedì scorso\x0fquesto " + + "giovedì\x11giovedì prossimo\x10tra {0} giovedì\x0f{0} giovedì fa\x0bgio." + + " scorso\x0bquesto gio.\x0dgio. prossimo\x0ctra {0} gio.\x0b{0} gio. fa" + + "\x0fvenerdì scorso\x0fquesto venerdì\x11venerdì prossimo\x10tra {0} vene" + + "rdì\x0f{0} venerdì fa\x0bven. scorso\x0bquesto ven.\x0dven. prossimo\x0c" + + "tra {0} ven.\x0b{0} ven. fa\x0dsabato scorso\x0dquesto sabato\x0fsabato " + + "prossimo\x0etra {0} sabato\x0etra {0} sabati\x0d{0} sabato fa\x0d{0} sab" + + "ati fa\x0bsab. scorso\x0bquesto sab.\x0dsab. prossimo\x0ctra {0} sab." + + "\x0b{0} sab. fa\x03ora\x0bquest’ora\x0btra {0} ora\x0btra {0} ore\x0a{0}" + + " ora fa\x0a{0} ore fa\x09tra {0} h\x08{0} h fa\x0dquesto minuto\x0etra {" + + "0} minuto\x0etra {0} minuti\x0d{0} minuto fa\x0d{0} minuti fa\x0btra {0}" + + " min\x0a{0} min fa\x07secondo\x0ftra {0} secondo\x0ftra {0} secondi\x0e{" + + "0} secondo fa\x0e{0} secondi fa\x09tra {0} s\x0ctra {0} sec.\x08{0} s fa" + + "\x0b{0} sec. fa\x0bfuso orario\x07Ora {0}\x0fOra legale: {0}\x11Ora stan" + + "dard: {0}\x1bTempo coordinato universale\x1aOra legale del Regno Unito" + + "\x19Ora legale dell’Irlanda\x16Ora dell’Afghanistan\x1aOra dell’Africa c" + + "entrale\x1bOra dell’Africa orientale\x1dOra dell’Africa meridionale\x1dO" + + "ra dell’Africa occidentale&Ora standard dell’Africa occidentale$Ora lega" + + "le dell’Africa occidentale\x11Ora dell’Alaska\x1aOra standard dell’Alask" + + "a\x18Ora legale dell’Alaska\x14Ora dell’Amazzonia\x1dOra standard dell’A" + + "mazzonia\x1bOra legale dell’Amazzonia\x10Ora centrale USA\x19Ora standar" + + "d centrale USA\x17Ora legale centrale USA\x11Ora orientale USA\x1aOra st" + + "andard orientale USA\x18Ora legale orientale USA\x19Ora Montagne Roccios" + + "e USA\"Ora standard Montagne Rocciose USA Ora legale Montagne Rocciose U" + + "SA\x14Ora del Pacifico USA\x1dOra standard del Pacifico USA\x1bOra legal" + + "e del Pacifico USA\x0dOra di Anadyr\x16Ora standard di Anadyr\x14Ora leg" + + "ale di Anadyr\x0bOra di Apia\x14Ora standard di Apia\x12Ora legale di Ap" + + "ia\x09Ora araba\x12Ora standard araba\x10Ora legale araba\x14Ora dell’Ar" + + "gentina\x1dOra standard dell’Argentina\x1bOra legale dell’Argentina Ora " + + "dell’Argentina occidentale)Ora standard dell’Argentina occidentale'Ora l" + + "egale dell’Argentina occidentale\x12Ora dell’Armenia\x1bOra standard del" + + "l’Armenia\x19Ora legale dell’Armenia\x14Ora dell’Atlantico\x1dOra standa" + + "rd dell’Atlantico\x1bOra legale dell’Atlantico\x1dOra dell’Australia cen" + + "trale&Ora standard dell’Australia centrale$Ora legale dell’Australia cen" + + "trale%Ora dell’Australia centroccidentale.Ora standard dell’Australia ce" + + "ntroccidentale,Ora legale dell’Australia centroccidentale\x1eOra dell’Au" + + "stralia orientale'Ora standard dell’Australia orientale%Ora legale dell’" + + "Australia orientale Ora dell’Australia occidentale)Ora standard dell’Aus" + + "tralia occidentale'Ora legale dell’Australia occidentale\x16Ora dell’Aze" + + "rbaigian\x1fOra standard dell’Azerbaigian\x1dOra legale dell’Azerbaigian" + + "\x11Ora delle Azzorre\x1aOra standard delle Azzorre\x18Ora legale delle " + + "Azzorre\x12Ora del Bangladesh\x1bOra standard del Bangladesh\x19Ora lega" + + "le del Bangladesh\x0eOra del Bhutan\x11Ora della Bolivia\x0fOra di Brasi" + + "lia\x18Ora standard di Brasilia\x16Ora legale di Brasilia\x19Ora del Bru" + + "nei Darussalam\x11Ora di Capo Verde\x1aOra standard di Capo Verde\x18Ora" + + " legale di Capo Verde\x0fOra di Chamorro\x11Ora delle Chatham\x1aOra sta" + + "ndard delle Chatham\x18Ora legale delle Chatham\x0cOra del Cile\x15Ora s" + + "tandard del Cile\x13Ora legale del Cile\x0eOra della Cina\x17Ora standar" + + "d della Cina\x15Ora legale della Cina\x11Ora di Choibalsan\x1aOra standa" + + "rd di Choibalsan\x18Ora legale di Choibalsan\x1aOra dell’Isola Christmas" + + "\x15Ora delle Isole Cocos\x12Ora della Colombia\x1bOra standard della Co" + + "lombia\x19Ora legale della Colombia\x14Ora delle isole Cook\x1dOra stand" + + "ard delle isole Cook!Ora legale media delle isole Cook\x0bOra di Cuba" + + "\x14Ora standard di Cuba\x12Ora legale di Cuba\x0cOra di Davis\x19Ora di" + + " Dumont-d’Urville\x10Ora di Timor Est\x1aOra dell’Isola di Pasqua#Ora st" + + "andard dell’Isola di Pasqua!Ora legale dell’Isola di Pasqua\x12Ora dell’" + + "Ecuador\x1aOra dell’Europa centrale#Ora standard dell’Europa centrale!Or" + + "a legale dell’Europa centrale\x1bOra dell’Europa orientale$Ora standard " + + "dell’Europa orientale\"Ora legale dell’Europa orientale)Ora dell’Europa " + + "orientale (Kaliningrad)\x1dOra dell’Europa occidentale&Ora standard dell" + + "’Europa occidentale$Ora legale dell’Europa occidentale\x18Ora delle Is" + + "ole Falkland!Ora standard delle Isole Falkland\x1fOra legale delle Isole" + + " Falkland\x0eOra delle Figi\x17Ora standard delle Figi\x15Ora legale del" + + "le Figi\x19Ora della Guiana francese.Ora delle Terre australi e antartic" + + "he francesi\x13Ora delle Galapagos\x0eOra di Gambier\x11Ora della Georgi" + + "a\x1aOra standard della Georgia\x18Ora legale della Georgia\x17Ora delle" + + " isole Gilbert\x1eOra del meridiano di Greenwich\x1fOra della Groenlandi" + + "a orientale(Ora standard della Groenlandia orientale&Ora legale della Gr" + + "oenlandia orientale!Ora della Groenlandia occidentale*Ora standard della" + + " Groenlandia occidentale(Ora legale della Groenlandia occidentale\x0dOra" + + " del Golfo\x10Ora della Guyana\x1fOra delle isole Hawaii-Aleutine(Ora st" + + "andard delle Isole Hawaii-Aleutine&Ora legale delle Isole Hawaii-Aleutin" + + "e\x10Ora di Hong Kong\x19Ora standard di Hong Kong\x17Ora legale di Hong" + + " Kong\x0bOra di Hovd\x14Ora standard di Hovd\x12Ora legale di Hovd\x19Or" + + "a standard dell’India\x19Ora dell’Oceano Indiano\x13Ora dell’Indocina" + + "\x1dOra dell’Indonesia centrale\x1eOra dell’Indonesia orientale Ora dell" + + "’Indonesia occidentale\x0fOra dell’Iran\x18Ora standard dell’Iran\x16O" + + "ra legale dell’Iran\x0eOra di Irkutsk\x17Ora standard di Irkutsk\x15Ora " + + "legale di Irkutsk\x0eOra di Israele\x17Ora standard di Israele\x15Ora le" + + "gale di Israele\x10Ora del Giappone\x19Ora standard del Giappone\x17Ora " + + "legale del Giappone\x1fOra di Petropavlovsk-Kamchatski(Ora standard di P" + + "etropavlovsk-Kamchatski&Ora legale di Petropavlovsk-Kamchatski\x1cOra de" + + "l Kazakistan orientale\x1eOra del Kazakistan occidentale\x0bOra coreana" + + "\x14Ora standard coreana\x12Ora legale coreana\x0eOra del Kosrae\x12Ora " + + "di Krasnoyarsk\x1bOra standard di Krasnoyarsk\x19Ora legale di Krasnoyar" + + "sk\x14Ora del Kirghizistan\x1dOra delle Sporadi equatoriali\x10Ora di Lo" + + "rd Howe\x19Ora standard di Lord Howe\x17Ora legale di Lord Howe\x1aOra d" + + "ell’Isola Macquarie\x0eOra di Magadan\x17Ora standard di Magadan\x15Ora " + + "legale di Magadan\x11Ora della Malesia\x11Ora delle Maldive\x12Ora delle" + + " Marchesi\x18Ora delle Isole Marshall\x13Ora delle Mauritius\x1cOra stan" + + "dard delle Mauritius\x1aOra legale delle Mauritius\x0dOra di Mawson Ora " + + "del Messico nord-occidentale)Ora standard del Messico nord-occidentale'O" + + "ra legale del Messico nord-occidentale\x1aOra del Pacifico (Messico)#Ora" + + " standard del Pacifico (Messico)!Ora legale del Pacifico (Messico)\x11Or" + + "a di Ulan Bator\x1aOra standard di Ulan Bator\x18Ora legale di Ulan Bato" + + "r\x0cOra di Mosca\x15Ora standard di Mosca\x13Ora legale di Mosca\x12Ora" + + " della Birmania\x0cOra di Nauru\x0dOra del Nepal\x19Ora della Nuova Cale" + + "donia\"Ora standard della Nuova Caledonia Ora legale della Nuova Caledon" + + "ia\x17Ora della Nuova Zelanda Ora standard della Nuova Zelanda\x1eOra le" + + "gale della Nuova Zelanda\x10Ora di Terranova\x19Ora standard di Terranov" + + "a\x17Ora legale di Terranova\x0bOra di Niue\x17Ora delle Isole Norfolk" + + "\x1aOra di Fernando de Noronha#Ora standard di Fernando de Noronha!Ora l" + + "egale di Fernando de Noronha\x12Ora di Novosibirsk\x1bOra standard di No" + + "vosibirsk\x19Ora legale di Novosibirsk\x0bOra di Omsk\x14Ora standard di" + + " Omsk\x12Ora legale di Omsk\x10Ora del Pakistan\x19Ora standard del Paki" + + "stan\x17Ora legale del Pakistan\x0cOra di Palau\x1cOra della Papua Nuova" + + " Guinea\x10Ora del Paraguay\x19Ora standard del Paraguay\x17Ora legale d" + + "el Paraguay\x0dOra del Perù\x16Ora standard del Perù\x14Ora legale del P" + + "erù\x13Ora delle Filippine\x1cOra standard delle Filippine\x1aOra legale" + + " delle Filippine\x1cOra delle Isole della Fenice\x1eOra di Saint-Pierre " + + "e Miquelon'Ora standard di Saint-Pierre e Miquelon%Ora legale di Saint-P" + + "ierre e Miquelon\x12Ora delle Pitcairn\x0eOra di Pohnpei\x10Ora di Pyong" + + "yang\x0fOra di Riunione\x0eOra di Rothera\x0fOra di Sakhalin\x18Ora stan" + + "dard di Sakhalin\x16Ora legale di Sakhalin\x0dOra di Samara\x16Ora stand" + + "ard di Samara\x14Ora legale di Samara\x0cOra di Samoa\x15Ora standard di" + + " Samoa\x13Ora legale di Samoa\x14Ora delle Seychelles\x10Ora di Singapor" + + "e\x18Ora delle Isole Salomone\x19Ora della Georgia del Sud\x10Ora del Su" + + "riname\x0cOra di Syowa\x0dOra di Tahiti\x0dOra di Taipei\x16Ora standard" + + " di Taipei\x14Ora legale di Taipei\x12Ora del Tagikistan\x0eOra di Tokel" + + "au\x0cOra di Tonga\x15Ora standard di Tonga\x13Ora legale di Tonga\x0dOr" + + "a del Chuuk\x14Ora del Turkmenistan\x1dOra standard del Turkmenistan\x1b" + + "Ora legale del Turkmenistan\x0dOra di Tuvalu\x12Ora dell’Uruguay\x1bOra " + + "standard dell’Uruguay\x19Ora legale dell’Uruguay\x15Ora dell’Uzbekistan" + + "\x1eOra standard dell’Uzbekistan\x1cOra legale dell’Uzbekistan\x0fOra de" + + "l Vanuatu\x18Ora standard del Vanuatu\x16Ora legale del Vanuatu\x11Ora d" + + "el Venezuela\x12Ora di Vladivostok\x1bOra standard di Vladivostok\x19Ora" + + " legale di Vladivostok\x10Ora di Volgograd\x19Ora standard di Volgograd" + + "\x17Ora legale di Volgograd\x0dOra di Vostok\x18Ora dell’Isola di Wake" + + "\x16Ora di Wallis e Futuna\x0eOra di Yakutsk\x17Ora standard di Yakutsk" + + "\x15Ora legale di Yakutsk\x13Ora di Ekaterinburg\x1cOra standard di Ekat" + + "erinburg\x1aOra legale di Ekaterinburg" + +var bucket54 string = "" + // Size: 16832 bytes + "\x06仏暦\x14GGGGy年M月d日EEEE\x10GGGGy年M月d日\x08Gy/MM/dd\x06正月\x06二月\x06三月\x06" + + "四月\x06五月\x06六月\x06七月\x06八月\x06九月\x06十月\x09十一月\x09十二月\x03正\x03二\x03三" + + "\x03四\x03五\x03六\x03七\x03八\x03九\x03十\x06十一\x06十二\x06閏{0}\x03子\x03丑\x03寅" + + "\x03卯\x03辰\x03巳\x03午\x03未\x03申\x03酉\x03戌\x03亥\x06立春\x06雨水\x06啓蟄\x06春分" + + "\x06清明\x06穀雨\x06立夏\x06小満\x06芒種\x06夏至\x06小暑\x06大暑\x06立秋\x06処暑\x06白露\x06秋分" + + "\x06寒露\x06霜降\x06立冬\x06小雪\x06大雪\x06冬至\x06小寒\x06大寒\x06甲子\x06乙丑\x06丙寅\x06丁卯" + + "\x06戊辰\x06己巳\x06庚午\x06辛未\x06壬申\x06癸酉\x06甲戌\x06乙亥\x06丙子\x06丁丑\x06戊寅\x06己卯" + + "\x06庚辰\x06辛巳\x06壬午\x06癸未\x06甲申\x06乙酉\x06丙戌\x06丁亥\x06戊子\x06己丑\x06庚寅\x06辛卯" + + "\x06壬辰\x06癸巳\x06甲午\x06乙未\x06丙申\x06丁酉\x06戊戌\x06己亥\x06庚子\x06辛丑\x06壬寅\x06癸卯" + + "\x06甲辰\x06乙巳\x06丙午\x06丁未\x06戊申\x06己酉\x06庚戌\x06辛亥\x06壬子\x06癸丑\x06甲寅\x06乙卯" + + "\x06丙辰\x06丁巳\x06戊午\x06己未\x06庚申\x06辛酉\x06壬戌\x06癸亥\x03鼠\x03牛\x03虎\x03兎\x03" + + "竜\x03蛇\x03馬\x03羊\x03猿\x03鶏\x03犬\x03猪\x0fU年MMMd日EEEE\x0bU年MMMd日\x05U-M-" + + "d\x09トウト\x06ババ\x0cハトール\x0cキアック\x09トーバ\x0fアムシール\x12バラムハート\x0fバラモウダ\x0fバシャ" + + "ンス\x0cパオーナ\x0cエペープ\x09メスラ\x09ナシエ\x0fメスケレム\x0cテケムト\x09ヘダル\x0cターサス\x06テル" + + "\x12イェカティト\x0cメガビト\x0cミアジア\x0cゲンボト\x06セネ\x09ハムレ\x0cネハッセ\x0cパグメン\x13Gy年M月" + + "d日(EEEE)\x0dGy年M月d日\x06Gy/M/d\x041月\x042月\x043月\x044月\x045月\x046月\x047月" + + "\x048月\x049月\x0510月\x0511月\x0512月\x03日\x03月\x03火\x03水\x03木\x03金\x03土\x09" + + "日曜日\x09月曜日\x09火曜日\x09水曜日\x09木曜日\x09金曜日\x09土曜日\x0d第1四半期\x0d第2四半期\x0d第3四" + + "半期\x0d第4四半期\x09真夜中\x06午前\x06正午\x06午後\x03朝\x03昼\x06夕方\x03夜\x06夜中\x09紀元前" + + "\x0f西暦紀元前\x06西暦\x0c西暦紀元\x10y年M月d日EEEE\x0cy年M月d日\x13H時mm分ss秒 zzzz\x0cティスレ" + + "\x0cへシボン\x0cキスレブ\x0cテベット\x0cシバット\x0bアダル I\x09アダル\x0cアダル II\x09ニサン\x09イヤル" + + "\x09シバン\x09タムズ\x06アヴ\x09エルル\x11Gy年M月d日EEEE\x0cカイトラ\x0fヴァイサカ\x0fジャイスタ\x0c" + + "アーサダ\x0cスラバナ\x0cバードラ\x0cアスビナ\x0fカルディカ\x12アヴラハヤナ\x09パウサ\x09マーガ\x0cパルグナ" + + "\x06サカ\x0fムハッラム\x0cサフアル!ラビー・ウル・アウワル!ラビー・ウッ・サーニー!ジュマーダル・アウワル\x1eジュマーダッサーニ" + + "ー\x0cラジャブ\x12シャアバーン\x0fラマダーン\x12シャウワール\x12ズル・カイダ\x15ズル・ヒッジャ\x06大化\x06白" + + "雉\x06白鳳\x06朱鳥\x06大宝\x06慶雲\x06和銅\x06霊亀\x06養老\x06神亀\x06天平\x0c天平感宝\x0c天平勝" + + "宝\x0c天平宝字\x0c天平神護\x0c神護景雲\x06宝亀\x06天応\x06延暦\x06大同\x06弘仁\x06天長\x06承和" + + "\x06嘉祥\x06仁寿\x06斉衡\x06天安\x06貞観\x06元慶\x06仁和\x06寛平\x06昌泰\x06延喜\x06延長\x06承平" + + "\x06天慶\x06天暦\x06天徳\x06応和\x06康保\x06安和\x06天禄\x06天延\x06貞元\x06天元\x06永観\x06寛和" + + "\x06永延\x06永祚\x06正暦\x06長徳\x06長保\x06寛弘\x06長和\x06寛仁\x06治安\x06万寿\x06長元\x06長暦" + + "\x06長久\x06寛徳\x06永承\x06天喜\x06康平\x06治暦\x06延久\x06承保\x06承暦\x06永保\x06応徳\x06寛治" + + "\x06嘉保\x06永長\x06承徳\x06康和\x06長治\x06嘉承\x06天仁\x06天永\x06永久\x06元永\x06保安\x06天治" + + "\x06大治\x06天承\x06長承\x06保延\x06永治\x06康治\x06天養\x06久安\x06仁平\x06久寿\x06保元\x06平治" + + "\x06永暦\x06応保\x06長寛\x06永万\x06仁安\x06嘉応\x06承安\x06安元\x06治承\x06養和\x06寿永\x06元暦" + + "\x06文治\x06建久\x06正治\x06建仁\x06元久\x06建永\x06承元\x06建暦\x06建保\x06承久\x06貞応\x06元仁" + + "\x06嘉禄\x06安貞\x06寛喜\x06貞永\x06天福\x06文暦\x06嘉禎\x06暦仁\x06延応\x06仁治\x06寛元\x06宝治" + + "\x06建長\x06康元\x06正嘉\x06正元\x06文応\x06弘長\x06文永\x06建治\x06弘安\x06正応\x06永仁\x06正安" + + "\x06乾元\x06嘉元\x06徳治\x06延慶\x06応長\x06正和\x06文保\x06元応\x06元亨\x06正中\x06嘉暦\x06元徳" + + "\x06元弘\x06建武\x06延元\x06興国\x06正平\x06建徳\x06文中\x06天授\x06康暦\x06弘和\x06元中\x06至徳" + + "\x06嘉慶\x06康応\x06明徳\x06応永\x06正長\x06永享\x06嘉吉\x06文安\x06宝徳\x06享徳\x06康正\x06長禄" + + "\x06寛正\x06文正\x06応仁\x06文明\x06長享\x06延徳\x06明応\x06文亀\x06永正\x06大永\x06享禄\x06天文" + + "\x06弘治\x06永禄\x06元亀\x06天正\x06文禄\x06慶長\x06元和\x06寛永\x06正保\x06慶安\x06承応\x06明暦" + + "\x06万治\x06寛文\x06延宝\x06天和\x06貞享\x06元禄\x06宝永\x06正徳\x06享保\x06元文\x06寛保\x06延享" + + "\x06寛延\x06宝暦\x06明和\x06安永\x06天明\x06寛政\x06享和\x06文化\x06文政\x06天保\x06弘化\x06嘉永" + + "\x06安政\x06万延\x06文久\x06元治\x06慶応\x06明治\x06大正\x06昭和\x06平成\x01M\x01T\x01S" + + "\x01H\x0aGGGGGy/M/d\x1eファルヴァルディーン\x1eオルディーベヘシュト\x0fホルダード\x0cティール\x0fモルダー" + + "ド\x18シャハリーヴァル\x09メフル\x0fアーバーン\x0cアーザル\x06デイ\x0cバフマン\x12エスファンド\x09民国前" + + "\x06民国\x06時代\x03年\x06昨年\x06今年\x06翌年\x0a{0} 年後\x0a{0} 年前\x09{0}年後\x09{0}年" + + "前\x09四半期\x0c前四半期\x0c今四半期\x0c翌四半期\x10{0} 四半期後\x10{0} 四半期前\x0f{0}四半期後" + + "\x0f{0}四半期前\x06先月\x06今月\x06翌月\x0d{0} か月後\x0d{0} か月前\x0c{0}か月後\x0c{0}か月前" + + "\x03週\x06先週\x06今週\x06翌週\x0d{0} 週間後\x0d{0} 週間前\x0d{0} 日の週\x0c{0}週間後\x0c{0" + + "}週間前\x0c{0}日の週\x0f月の週番号\x09一昨日\x06昨日\x06今日\x06明日\x09明後日\x0a{0} 日後\x0a{0}" + + " 日前\x09{0}日後\x09{0}日前\x0c年の通日\x06通日\x06曜日\x12月の曜日番号\x12先週の日曜日\x12今週の日曜日" + + "\x12来週の日曜日\x16{0} 個後の日曜日\x16{0} 個前の日曜日\x0f先週の日曜\x0f今週の日曜\x0f来週の日曜\x13{0}" + + " 個後の日曜\x13{0} 個前の日曜\x12{0}個後の日曜\x12{0}個前の日曜\x12先週の月曜日\x12今週の月曜日\x12来週の月曜" + + "日\x16{0} 個後の月曜日\x16{0} 個前の月曜日\x0f先週の月曜\x0f今週の月曜\x0f来週の月曜\x13{0} 個後の月曜" + + "\x13{0} 個前の月曜\x12{0}個後の月曜\x12{0}個前の月曜\x12先週の火曜日\x12今週の火曜日\x12来週の火曜日\x16{" + + "0} 個後の火曜日\x16{0} 個前の火曜日\x0f先週の火曜\x0f今週の火曜\x0f来週の火曜\x13{0} 個後の火曜\x13{0} 個" + + "前の火曜\x12{0}個後の火曜\x12{0}個前の火曜\x12先週の水曜日\x12今週の水曜日\x12来週の水曜日\x16{0} 個後の水" + + "曜日\x16{0} 個前の水曜日\x0f先週の水曜\x0f今週の水曜\x0f来週の水曜\x13{0} 個後の水曜\x13{0} 個前の水曜" + + "\x12{0}個後の水曜\x12{0}個前の水曜\x12先週の木曜日\x12今週の木曜日\x12来週の木曜日\x16{0} 個後の木曜日\x16" + + "{0} 個前の木曜日\x0f先週の木曜\x0f今週の木曜\x0f来週の木曜\x13{0} 個後の木曜\x13{0} 個前の木曜\x12{0}個後" + + "の木曜\x12{0}個前の木曜\x12先週の金曜日\x12今週の金曜日\x12来週の金曜日\x16{0} 個後の金曜日\x16{0} 個前の" + + "金曜日\x0f先週の金曜\x0f今週の金曜\x0f来週の金曜\x13{0} 個後の金曜\x13{0} 個前の金曜\x12{0}個後の金曜" + + "\x12{0}個前の金曜\x12先週の土曜日\x12今週の土曜日\x12来週の土曜日\x16{0} 個後の土曜日\x16{0} 個前の土曜日" + + "\x0f先週の土曜\x0f今週の土曜\x0f来週の土曜\x13{0} 個後の土曜\x13{0} 個前の土曜\x12{0}個後の土曜\x12{0}" + + "個前の土曜\x0d午前/午後\x03時\x0e1 時間以内\x0d{0} 時間後\x0d{0} 時間前\x0c{0}時間後\x0c{0}時間" + + "前\x03分\x0b1 分以内\x0a{0} 分後\x0a{0} 分前\x09{0}分後\x09{0}分前\x03秒\x03今\x0a{0}" + + " 秒後\x0a{0} 秒前\x09{0}秒後\x09{0}秒前\x12タイムゾーン\x09{0}時間\x0c{0}夏時間\x0c{0}標準時" + + "\x0f協定世界時\x0f英国夏時間\x1bアイルランド標準時\x0fアクレ時間\x12アクレ標準時\x12アクレ夏時間\x1bアフガニスタン時" + + "間\x18中央アフリカ時間\x15東アフリカ時間\x18南アフリカ標準時\x15西アフリカ時間\x18西アフリカ標準時\x18西アフリカ夏時" + + "間\x12アラスカ時間\x15アラスカ標準時\x15アラスカ夏時間\x15アルトマイ時間\x18アルトマイ標準時\x18アルマトイ夏時間" + + "\x12アマゾン時間\x15アマゾン標準時\x15アマゾン夏時間\x18アメリカ中部時間\x1bアメリカ中部標準時\x1bアメリカ中部夏時間" + + "\x18アメリカ東部時間\x1bアメリカ東部標準時\x1bアメリカ東部夏時間\x18アメリカ山地時間\x1bアメリカ山地標準時\x1bアメリカ山" + + "地夏時間\x1bアメリカ太平洋時間\x1eアメリカ太平洋標準時\x1eアメリカ太平洋夏時間\x15アナディリ時間\x18アナディリ標準時" + + "\x18アナディリ夏時間\x0fアピア時間\x12アピア標準時\x12アピア夏時間\x12アクタウ時間\x15アクタウ標準時\x15アクタウ夏時" + + "間\x12アクトベ時間\x15アクトベ標準時\x15アクトベ夏時間\x12アラビア時間\x15アラビア標準時\x15アラビア夏時間\x18ア" + + "ルゼンチン時間\x1bアルゼンチン標準時\x1bアルゼンチン夏時間\x1e西部アルゼンチン時間!西部アルゼンチン標準時!西部アルゼンチン夏時" + + "間\x15アルメニア時間\x18アルメニア標準時\x18アルメニア夏時間\x0f大西洋時間\x12大西洋標準時\x12大西洋夏時間!オースト" + + "ラリア中部時間$オーストラリア中部標準時$オーストラリア中部夏時間$オーストラリア中西部時間'オーストラリア中西部標準時'オーストラリア中西" + + "部夏時間!オーストラリア東部時間$オーストラリア東部標準時$オーストラリア東部夏時間!オーストラリア西部時間$オーストラリア西部標準時$オー" + + "ストラリア西部夏時間\x1eアゼルバイジャン時間!アゼルバイジャン標準時!アゼルバイジャン夏時間\x12アゾレス時間\x15アゾレス標準時" + + "\x15アゾレス夏時間\x1bバングラデシュ時間\x1eバングラデシュ標準時\x1eバングラデシュ夏時間\x12ブータン時間\x12ボリビア時間" + + "\x15ブラジリア時間\x18ブラジリア標準時\x18ブラジリア夏時間'ブルネイ・ダルサラーム時間\x18カーボベルデ時間\x1bカーボベルデ標" + + "準時\x1bカーボベルデ夏時間\x18ケイシー基地時間\x12チャモロ時間\x12チャタム時間\x15チャタム標準時\x15チャタム夏時間" + + "\x0cチリ時間\x0fチリ標準時\x0fチリ夏時間\x0c中国時間\x0f中国標準時\x0f中国夏時間\x1bチョイバルサン時間\x1eチョイ" + + "バルサン標準時\x1eチョイバルサン夏時間\x18クリスマス島時間\x15ココス諸島時間\x15コロンビア時間\x18コロンビア標準時" + + "\x18コロンビア夏時間\x15クック諸島時間\x18クック諸島標準時\x18クック諸島夏時間\x12キューバ時間\x15キューバ標準時\x15" + + "キューバ夏時間\x18デービス基地時間-デュモン・デュルヴィル基地時間\x18東ティモール時間\x18イースター島時間\x1bイースター島標" + + "準時\x1bイースター島夏時間\x15エクアドル時間\x1b中央ヨーロッパ時間\x1e中央ヨーロッパ標準時\x1e中央ヨーロッパ夏時間" + + "\x18東ヨーロッパ時間\x1b東ヨーロッパ標準時\x1b東ヨーロッパ夏時間\x1b極東ヨーロッパ時間\x18西ヨーロッパ時間\x1b西ヨーロッ" + + "パ標準時\x1b西ヨーロッパ夏時間!フォークランド諸島時間$フォークランド諸島標準時$フォークランド諸島夏時間\x12フィジー時間\x15フ" + + "ィジー標準時\x15フィジー夏時間\x15仏領ギアナ時間\x18仏領南方南極時間\x15ガラパゴス時間\x18ガンビエ諸島時間\x15ジョー" + + "ジア時間\x18ジョージア標準時\x18ジョージア夏時間\x1bギルバート諸島時間\x18グリニッジ標準時!グリーンランド東部時間$グリーン" + + "ランド東部標準時$グリーンランド東部夏時間!グリーンランド西部時間$グリーンランド西部標準時$グリーンランド西部夏時間\x0fグアム時間" + + "\x0f湾岸標準時\x12ガイアナ時間'ハワイ・アリューシャン時間*ハワイ・アリューシャン標準時*ハワイ・アリューシャン夏時間\x0c香港時間" + + "\x0f香港標準時\x0f香港夏時間\x0fホブド時間\x12ホブド標準時\x12ホブド夏時間\x12インド標準時\x12インド洋時間\x15イ" + + "ンドシナ時間\x1eインドネシア中部時間\x1eインドネシア東部時間\x1eインドネシア西部時間\x0fイラン時間\x12イラン標準時" + + "\x12イラン夏時間\x18イルクーツク時間\x1bイルクーツク標準時\x1bイルクーツク夏時間\x15イスラエル時間\x18イスラエル標準時" + + "\x18イスラエル夏時間\x0c日本時間\x0f日本標準時\x0f日本夏時間9ペトロパブロフスク・カムチャツキー時間<ペトロパブロフスク・カムチ" + + "ャツキー標準時<ペトロパブロフスク・カムチャツキー夏時間\x1b東カザフスタン時間\x1b西カザフスタン時間\x0c韓国時間\x0f韓国標準" + + "時\x0f韓国夏時間\x12コスラエ時間\x1eクラスノヤルスク時間!クラスノヤルスク標準時!クラスノヤルスク夏時間\x12キルギス時間" + + "\x0fランカ時間\x15ライン諸島時間\x15ロードハウ時間\x18ロードハウ標準時\x18ロードハウ夏時間\x0fマカオ時間\x12マカオ標" + + "準時\x12マカオ夏時間\x1bマッコーリー島時間\x12マガダン時間\x15マガダン標準時\x15マガダン夏時間\x15マレーシア時間" + + "\x15モルディブ時間\x15マルキーズ時間\x1bマーシャル諸島時間\x18モーリシャス時間\x1bモーリシャス標準時\x1bモーリシャス夏時" + + "間\x18モーソン基地時間\x1bメキシコ北西部時間\x1eメキシコ北西部標準時\x1eメキシコ北西部夏時間\x1bメキシコ太平洋時間" + + "\x1eメキシコ太平洋標準時\x1eメキシコ太平洋夏時間\x1bウランバートル時間\x1eウランバートル標準時\x1eウランバートル夏時間" + + "\x12モスクワ時間\x15モスクワ標準時\x15モスクワ夏時間\x15ミャンマー時間\x0fナウル時間\x12ネパール時間\x1eニューカレド" + + "ニア時間!ニューカレドニア標準時!ニューカレドニア夏時間\x1eニュージーランド時間!ニュージーランド標準時!ニュージーランド夏時間$ニュー" + + "ファンドランド時間'ニューファンドランド標準時'ニューファンドランド夏時間\x0fニウエ時間\x1bノーフォーク島時間0フェルナンド・デ・ノ" + + "ローニャ時間3フェルナンド・デ・ノローニャ標準時3フェルナンド・デ・ノローニャ夏時間\x1b北マリアナ諸島時間\x1eノヴォシビルスク時間!" + + "ノヴォシビルスク標準時!ノヴォシビルスク夏時間\x12オムスク時間\x15オムスク標準時\x15オムスク夏時間\x15パキスタン時間\x18" + + "パキスタン標準時\x18パキスタン夏時間\x0fパラオ時間!パプアニューギニア時間\x15パラグアイ時間\x18パラグアイ標準時\x18パラ" + + "グアイ夏時間\x0fペルー時間\x12ペルー標準時\x12ペルー夏時間\x15フィリピン時間\x18フィリピン標準時\x18フィリピン夏時間" + + "\x1eフェニックス諸島時間'サンピエール・ミクロン時間*サンピエール・ミクロン標準時*サンピエール・ミクロン夏時間\x15ピトケアン時間" + + "\x0fポナペ時間\x0c平壌時間\x15クズロルダ時間\x18クズロルダ標準時\x18クズロルダ夏時間\x15レユニオン時間\x15ロゼラ基地" + + "時間\x12サハリン時間\x15サハリン標準時\x15サハリン夏時間\x0fサマラ時間\x12サマラ標準時\x12サマラ夏時間\x0fサモア" + + "時間\x12サモア標準時\x12サモア夏時間\x15セーシェル時間\x1bシンガポール標準時\x18ソロモン諸島時間\x1eサウスジョージア" + + "時間\x12スリナム時間\x12昭和基地時間\x0fタヒチ時間\x0c台北時間\x0f台北標準時\x0f台北夏時間\x18タジキスタン時間" + + "\x12トケラウ時間\x0fトンガ時間\x12トンガ標準時\x12トンガ夏時間\x12チューク時間\x1eトルクメニスタン時間!トルクメニスタン" + + "標準時!トルクメニスタン夏時間\x0fツバル時間\x15ウルグアイ時間\x18ウルグアイ標準時\x18ウルグアイ夏時間\x1bウズベキスタン" + + "時間\x1eウズベキスタン標準時\x1eウズベキスタン夏時間\x12バヌアツ時間\x15バヌアツ標準時\x15バヌアツ夏時間\x15ベネズエ" + + "ラ時間\x1bウラジオストク時間\x1eウラジオストク標準時\x1eウラジオストク夏時間\x1bボルゴグラード時間\x1eボルゴグラード標準" + + "時\x1eボルゴグラード夏時間\x1bボストーク基地時間\x15ウェーク島時間\x1eウォリス・フツナ時間\x15ヤクーツク時間\x18ヤク" + + "ーツク標準時\x18ヤクーツク夏時間\x1eエカテリンブルグ時間!エカテリンブルグ標準時!エカテリンブルグ夏時間\x06冬月\x06臘月" + + "\x03冬\x03臘\x06驚蟄\x06小滿\x06處暑\x03兔\x03龍\x03猴\x03雞\x03狗\x03豬\x0513月\x03一" + + "\x06大寶\x06靈龜\x06神龜\x0c天平感寶\x0c天平勝寶\x0c天平寶字\x06寶龜\x06天應\x06延曆\x06仁壽\x06齊衡" + + "\x06貞觀\x06寬平\x06天曆\x06天德\x06應和\x06天祿\x06永觀\x06寬和\x06正曆\x06長德\x06寬弘\x06寬仁" + + "\x06萬壽\x06長曆\x06寬德\x06治曆\x06承曆\x06應德\x06寬治\x06承德\x06久壽\x06永曆\x06應保\x06長寬" + + "\x06永萬\x06嘉應\x06壽永\x06元曆\x06建曆\x06貞應\x06嘉祿\x06寬喜\x06文曆\x06曆仁\x06延應\x06寬元" + + "\x06寶治\x06文應\x06正應\x06德治\x06應長\x06元應\x06嘉曆\x06元德\x06興國\x06建德\x06康曆\x06至德" + + "\x06康應\x06明德\x06應永\x06寶德\x06享德\x06長祿\x06寬正\x06應仁\x06延德\x06明應\x06文龜\x06享祿" + + "\x06永祿\x06元龜\x06文祿\x06寬永\x06承應\x06明曆\x06萬治\x06寬文\x06延寶\x06元祿\x06寶永\x06正德" + + "\x06寬保\x06寬延\x06寶曆\x06寬政\x06萬延\x06慶應\x0f{0}夏令時間\x0f{0}標準時間\x06腊月\x03腊" + + "\x06惊蛰\x06谷雨\x06小满\x06芒种\x06处暑\x03龙\x03马\x03鸡\x06白凤\x06朱鸟\x06庆云\x06和铜" + + "\x06灵龟\x06养老\x06神龟\x0c天平胜宝\x0c天平神护\x0c神护景云\x06宝龟\x06天应\x06延历\x06天长\x06齐衡" + + "\x06贞观\x06元庆\x06宽平\x06延长\x06天庆\x06天历\x06应和\x06贞元\x06永观\x06宽和\x06正历\x06长德" + + "\x06长保\x06宽弘\x06长和\x06宽仁\x06长元\x06长历\x06长久\x06宽德\x06治历\x06承历\x06应德\x06宽治" + + "\x06永长\x06长治\x06长承\x06天养\x06永历\x06应保\x06长宽\x06嘉应\x06养和\x06元历\x06建历\x06贞应" + + "\x06安贞\x06宽喜\x06贞永\x06文历\x06嘉祯\x06历仁\x06延应\x06宽元\x06建长\x06文应\x06弘长\x06正应" + + "\x06干元\x06延庆\x06应长\x06元应\x06嘉历\x06兴国\x06康历\x06嘉庆\x06康应\x06应永\x06正长\x06宝德" + + "\x06长禄\x06宽正\x06应仁\x06长享\x06明应\x06文龟\x06元龟\x06庆长\x06宽永\x06庆安\x06承应\x06明历" + + "\x06宽文\x06贞享\x06宽保\x06宽延\x06宝历\x06宽政\x06庆应\x06二月\x06三月\x06四月\x06五月\x06六月" + + "\x06七月\x06八月\x06九月\x06十月\x09十一月\x07闰7月\x06二月\x06三月\x06四月\x06五月\x06六月\x06" + + "七月\x06八月\x06九月\x06十月\x09十一月\x09十二月\x06明治\x06大正\x06昭和\x06平成\x08{0} (+1)" + + "\x08{0} (+0)" + +var bucket55 string = "" + // Size: 26893 bytes + "\x03JST\x03JDT\x0dNduŋmbi Saŋ\x10Pɛsaŋ Pɛ́pá\x11Pɛsaŋ Pɛ́tát\x15Pɛsaŋ Pɛ" + + "́nɛ́kwa\x0dPɛsaŋ Pataa\x19Pɛsaŋ Pɛ́nɛ́ntúkú\x0fPɛsaŋ Saambá\x16Pɛsaŋ Pɛ" + + "́nɛ́fɔm\x1bPɛsaŋ Pɛ́nɛ́pfúꞋú\x11Pɛsaŋ Nɛgɛ́m\x15Pɛsaŋ Ntsɔ̌pmɔ́\x13Pɛsa" + + "ŋ Ntsɔ̌ppá\x08Sɔ́ndi\x08Mɔ́ndi\x0eÁpta Mɔ́ndi\x0eWɛ́nɛsɛdɛ\x0bTɔ́sɛdɛ" + + "\x0cFɛlâyɛdɛ\x08Sásidɛ\x05Sɔ́\x05Mɔ́\x03ÁM\x05Wɛ́\x05Tɔ́\x03Fɛ\x03Sá\x0c" + + "mbaꞌmbaꞌ\x10ŋka mbɔ́t nji>tsɛttsɛt mɛŋguꞌ mi ɛ́ lɛɛnɛ Kɛlísɛtɔ gɔ ńɔ́=ts" + + "ɛttsɛt mɛŋguꞌ mi ɛ́ fúnɛ Kɛlísɛtɔ tɔ́ mɔ́\x10Nǔu ŋguꞋ {0}\x1bƐ́gɛ́ mɔ́ " + + "ŋguꞋ {0}\x0dNǔu {0} saŋ\x1cɛ́ gɛ́ mɔ́ pɛsaŋ {0}\x12Nǔu ŋgap-mbi {0}\x1c" + + "Ɛ́ gɛ́ mɔ {0} ŋgap-mbi\x11Nǔu lɛ́Ꞌ {0}\x1dƐ́ gɛ́ mɔ́ lɛ́Ꞌ {0}\x0enǔu há" + + "wa {0}\x18ɛ́ gɛ mɔ́ {0} háwa\x0fnǔu {0} minút\x1bɛ́ gɛ́ mɔ́ minút {0}" + + "\x09Jumapilyi\x09Jumatatuu\x07Jumanne\x08Jumatanu\x08Alhamisi\x06Ijumaa" + + "\x08Jumamosi\x05utuko\x09kyiukonyi\x0fKabla ya Kristu\x0fBaada ya Kristu" + + "\x05Kacha\x04Maka\x06Wiikyi\x05Mfiri\x04Ukou\x03Inu\x05Ngama\x0cMfiri o " + + "siku\x07Dakyika\x0bMfiri o saa\x12EEEE, dd MMMM, y G\x09იან\x09თებ\x09მა" + + "რ\x09აპრ\x09მაი\x09ივნ\x09ივლ\x09აგვ\x09სექ\x09ოქტ\x09ნოე\x09დეკ\x03ი" + + "\x03თ\x03მ\x03ა\x03ს\x03ო\x03ნ\x03დ\x15იანვარი\x1bთებერვალი\x0fმარტი\x12" + + "აპრილი\x0fმაისი\x12ივნისი\x12ივლისი\x15აგვისტო\x1eსექტემბერი\x1bოქტომბ" + + "ერი\x18ნოემბერი\x1bდეკემბერი\x09კვი\x09ორშ\x09სამ\x09ოთხ\x09ხუთ\x09პარ" + + "\x09შაბ\x03კ\x03ხ\x03პ\x03შ\x06კვ\x06ორ\x06სმ\x06ოთ\x06ხთ\x06პრ\x06შბ" + + "\x0fკვირა\x18ორშაბათი\x1bსამშაბათი\x1bოთხშაბათი\x1bხუთშაბათი\x1bპარასკევ" + + "ი\x12შაბათი\x09I კვ.\x0aII კვ.\x0bIII კვ.\x0aIV კვ.\x1aI კვარტალი\x1bI" + + "I კვარტალი\x1cIII კვარტალი\x1bIV კვარტალი\x18შუაღამეს\x10შუადღ.\x0aდილ." + + "\x16ნაშუადღ.\x0aსაღ.\x0aღამ.\x15შუადღეს\x0fდილით\x1eნაშუადღევს\x15საღამო" + + "ს\x0fღამით\x15შუაღამე\x12შუადღე\x0cდილა\x1eნაშუადღევი\x12საღამო\x0cღამ" + + "ე#შუადღ. შემდეგ7ძველი წელთაღრიცხვით\"ჩვენს ერამდე7ახალი წელთაღრიცხვით" + + "\x19ჩვენი ერა\x0cძვ. წ.\x1aჩვ. ერამდე\x0cახ. წ.\x11ჩვ. ერა\x10EEEE, dd M" + + "MMM, y\x08d MMM. y\x12თიშრეი\x15ხეშვანი\x15ქისლევი\x12ტევეთი\x0fშვატი" + + "\x11ადარი I\x0fადარი\x12ადარი II\x12ნისანი\x0cიარი\x12სივანი\x12თამუზი" + + "\x09ავი\x0fელული\x0aმუჰ.\x0aსაფ.\x0cრაბ. I\x0dრაბ. II\x0cჯუმ. I\x0dჯუმ. " + + "II\x0aრაჯ.\x0aშაბ.\x0aრამ.\x0aშავ.\x0eზულ-კ.\x0eზულ-ჰ.\x18მუჰარამი\x12სა" + + "ფარი#რაბი ულ-ავალი#რაბი ულ-ახირი)ჯუმადა ულ-ავალი)ჯუმადა ულ-ახირი\x12რა" + + "ჯაბი\x12შაბანი\x18რამადანი\x12შავალი\x19ზულ-კაადა\x16ზულ-ჰიჯა\x1eფარვა" + + "რდინი!ორდიბეჰეშთი\x15ხორდადი\x0cთირი\x15მორდადი\x1bშაჰრივარი\x0fმეჰრი" + + "\x0fაბანი\x0fაზარი\x09დეი\x15ბაჰმანი\x15ესფანდი\x0fეპოქა\x0cწელი\x1cგასუ" + + "ლ წელს\x13ამ წელს\"მომავალ წელს\x1f{0} წელიწადში\x1a{0} წლის წინ\x04წ." + + "\x13{0} წელში\x18კვარტალი+გასულ კვარტალში\"ამ კვარტალში.შემდეგ კვარტალში" + + "\x1f{0} კვარტალში){0} კვარტალის წინ\x10კვარტ.\x1e{0} კვარტ. წინ\x09თვე" + + "\x1cგასულ თვეს\x16ამ თვეში\"მომავალ თვეს\x13{0} თვეში\x1a{0} თვის წინ%გა" + + "სულ კვირაში\x1cამ კვირაში+მომავალ კვირაში\x19{0} კვირაში {0} კვირის წი" + + "ნ {0}-ის კვირაში\x07კვ.\x15{0} კვ. წინ\x1cთვის კვირა\x17თვ. კვირა\x09დ" + + "ღე\x18გუშინწინ\x0fგუშინ\x0cდღეს\x0cხვალ\x09ზეგ\x13{0} დღეში\x1a{0} დღი" + + "ს წინ\x16წლის დღე\x11წლ. დღე\x1cკვირის დღე\x11კვ. დღე,კვირის დღე თვეში" + + "!კვ. დღე თვეში\"გასულ კვირას\x19ამ კვირას(მომავალ კვირას\x1d{0} კვირი წი" + + "ნ(გასულ ორშაბათს\x1fამ ორშაბათს.მომავალ ორშაბათს\x1f{0} ორშაბათში){0} " + + "ორშაბათის წინ\x17წინა ორშ.\x11ამ ორშ.\x15მომ. ორშ.\x12გას. ორ.\x0eამ ო" + + "რ.\x12მომ. ორ.+გასულ სამშაბათს\"ამ სამშაბათს1მომავალ სამშაბათს\"{0} სა" + + "მშაბათში,{0} სამშაბათის წინ\x17წინა სამ.\x11ამ სამ.\x15მომ. სამ.\x11წი" + + "ნ სა.\x0eამ სა.\x14მომმ სა.+გასულ ოთხშაბათს\"ამ ოთხშაბათს1მომავალ ოთხშ" + + "აბათს\"{0} ოთხშაბათში,{0} ოთხშაბათის წინ\x17წინა ოთხ.\x11ამ ოთხ.\x15მო" + + "მ. ოთხ.\x14წინა ოთ.\x0eამ ოთ.\x12მომ. ოთ.+გასულ ხუთშაბათს\"ამ ხუთშაბათ" + + "ს1მომავალ ხუთშაბათს\"{0} ხუთშაბათში,{0} ხუთშაბათის წინ\x17წინა ხუთ." + + "\x11ამ ხუთ.\x15მომ. ხუთ.\x14წინა ხთ.\x0eამ ხთ.\x12მომ. ხთ.+გასულ პარასკე" + + "ვს\"ამ პარასკევს1მომავალ პარასკევს\"{0} პარასკევში,{0} პარასკევის წინ" + + "\x17წინა პარ.\x11ამ პარ.\x15მომ. პარ.\x14წინა პა.\x0eამ პა.\x12მომ. პა." + + "\"გასულ შაბათს\x19ამ შაბათს(მომავალ შაბათს\x19{0} შაბათში#{0} შაბათის წი" + + "ნ\x17წინა შაბ.\x11ამ შაბ.\x15მომ. შაბ.\x14წინა შბ.\x0eამ შა.\x12მომ. შ" + + "ბ. დღ. ნახევარი%დღის ნახევარი\x0fსაათი\x19ამ საათში\x16{0} საათში {0} " + + "საათის წინ\x07სთ.\x14{0} სთ წინ\x0cწუთი\x16ამ წუთში\x13{0} წუთში\x1d{0" + + "} წუთის წინ\x07წთ.\x14{0} წთ წინ\x0cწამი\x0cახლა\x13{0} წამში\x1d{0} წამ" + + "ის წინ\x07წმ.\x14{0} წმ წინ(დროის სარტყელი დროის სარტყ.\x0eდრო: {0}&{0" + + "} ზაფხულის დრო/{0} სტანდარტული დროJმსოფლიო კოორდინირებული დროAბრიტანეთის" + + " ზაფხულის დროGირლანდიის სტანდარტული დრო%ავღანეთის დრო>ცენტრალური აფრიკის" + + " დრო>აღმოსავლეთ აფრიკის დრო5სამხრეთ აფრიკის დრო8დასავლეთ აფრიკის დროZდას" + + "ავლეთ აფრიკის სტანდარტული დროQდასავლეთ აფრიკის ზაფხულის დრო\x1fალასკის" + + " დროAალასკის სტანდარტული დრო8ალასკის ზაფხულის დრო%ამაზონიის დროGამაზონიი" + + "ს სტანდარტული დრო>ამაზონიის ზაფხულის დროZჩრდილოეთ ამერიკის ცენტრალური " + + "დრო|ჩრდილოეთ ამერიკის ცენტრალური სტანდარტული დროsჩრდილოეთ ამერიკის ცენ" + + "ტრალური ზაფხულის დრო`ჩრდილოეთ ამერიკის აღმოსავლეთის დრო\x82ჩრდილოეთ ამ" + + "ერიკის აღმოსავლეთის სტანდარტული დროyჩრდილოეთ ამერიკის აღმოსავლეთის ზაფ" + + "ხულის დროWჩრდილოეთ ამერიკის მაუნთინის დროyჩრდილოეთ ამერიკის მაუნთინის " + + "სტანდარტული დროpჩრდილოეთ ამერიკის მაუნთინის ზაფხულის დროdჩრდილოეთ ამერ" + + "იკის წყნარი ოკეანის დრო\x86ჩრდილოეთ ამერიკის წყნარი ოკეანის სტანდარტულ" + + "ი დრო}ჩრდილოეთ ამერიკის წყნარი ოკეანის ზაფხულის დრო\x19აპიას დრო;აპიას" + + " სტანდარტული დრო2აპიას ზაფხულის დრო\"არაბეთის დროDარაბეთის სტანდარტული დ" + + "რო;არაბეთის ზაფხულის დრო(არგენტინის დროJარგენტინის სტანდარტული დროAარგ" + + "ენტინის ზაფხულის დროAდასავლეთ არგენტინის დროcდასავლეთ არგენტინის სტანდ" + + "არტული დროZდასავლეთ არგენტინის ზაფხულის დრო\"სომხეთის დროDსომხეთის სტა" + + "ნდარტული დრო;სომხეთის ზაფხულის დრო>ატლანტიკის ოკეანის დრო`ატლანტიკის ო" + + "კეანის სტანდარტული დროWატლანტიკის ოკეანის ზაფხულის დროGცენტრალური ავსტ" + + "რალიის დროiავსტრალიის ცენტრალური სტანდარტული დრო`ავსტრალიის ცენტრალური" + + " ზაფხულის დროgცენტრალური და დასავლეთ ავსტრალიის დრო\x89ცენტრალური და დას" + + "ავლეთ ავსტრალიის სტანდარტული დრო\x80ცენტრალური და დასავლეთ ავსტრალიის " + + "ზაფხულის დროGაღმოსავლეთ ავსტრალიის დროiაღმოსავლეთ ავსტრალიის სტანდარტუ" + + "ლი დრო`აღმოსავლეთ ავსტრალიის ზაფხულის დროAდასავლეთ ავსტრალიის დროcდასა" + + "ვლეთ ავსტრალიის სტანდარტული დროZდასავლეთ ავსტრალიის ზაფხულის დრო.აზერბ" + + "აიჯანის დროPაზერბაიჯანის სტანდარტული დროGაზერბაიჯანის ზაფხულის დრო;აზო" + + "რის კუნძულების დრო]აზორის კუნძულების სტანდარტული დროTაზორის კუნძულების" + + " ზაფხულის დრო+ბანგლადეშის დროMბანგლადეშის სტანდარტული დროDბანგლადეშის ზა" + + "ფხულის დრო\x1fბუტანის დრო\"ბოლივიის დრო%ბრაზილიის დროGბრაზილიის სტანდა" + + "რტული დრო>ბრაზილიის ზაფხულის დრო>ბრუნეი-დარუსალამის დრო)კაბო-ვერდეს დრ" + + "ოKკაბო-ვერდეს სტანდარტული დროBკაბო-ვერდეს ზაფხულის დრო\x1fჩამოროს დრო" + + "\x1fჩატემის დროAჩატემის სტანდარტული დრო8ჩატემის ზაფხულის დრო\x19ჩილეს დრ" + + "ო;ჩილეს სტანდარტული დრო2ჩილეს ზაფხულის დრო\x1fჩინეთის დროAჩინეთის სტან" + + "დარტული დრო>ჩინეთის დროის სარტყელი+ჩოიბალსანის დროMჩოიბალსანის სტანდარ" + + "ტული დროDჩოიბალსანის ზაფხულის დრო2შობის კუნძულის დრო>ქოქოსის კუნძულები" + + "ს დრო%კოლუმბიის დროGკოლუმბიის სტანდარტული დრო>კოლუმბიის ზაფხულის დრო8კ" + + "უკის კუნძულების დროZკუკის კუნძულების სტანდარტული დროjკუკის კუნძულების " + + "ნახევრად ზაფხულის დრო\x19კუბის დრო;კუბის სტანდარტული დრო2კუბის ზაფხული" + + "ს დრო\x1fდევისის დრო2დუმონ-დურვილის დრო>აღმოსავლეთ ტიმორის დრო;აღდგომი" + + "ს კუნძულის დრო]აღდგომის კუნძულის სტანდარტული დროTაღდგომის კუნძულის ზაფ" + + "ხულის დრო%ეკვადორის დრო>ცენტრალური ევროპის დრო`ცენტრალური ევროპის სტან" + + "დარტული დროWცენტრალური ევროპის ზაფხულის დრო>აღმოსავლეთ ევროპის დრო`აღმ" + + "ოსავლეთ ევროპის სტანდარტული დროWაღმოსავლეთ ევროპის ზაფხულის დროTშორეულ" + + "ი აღმოსავლეთ ევროპის დრო8დასავლეთ ევროპის დროZდასავლეთ ევროპის სტანდარ" + + "ტული დროQდასავლეთ ევროპის ზაფხულის დროGფოლკლენდის კუნძულების დროiფოლკლ" + + "ენდის კუნძულების სტანდარტული დრო`ფოლკლენდის კუნძულების ზაფხულის დრო" + + "\x19ფიჯის დრო;ფიჯის სტანდარტული დრო2ფიჯის ზაფხულის დროAსაფრანგეთის გვიან" + + "ის დროgფრანგული სამხრეთის და ანტარქტიკის დრო+გალაპაგოსის დრო%გამბიერის" + + " დრო+საქართველოს დროMსაქართველოს სტანდარტული დროDსაქართველოს ზაფხულის დრ" + + "ოDგილბერტის კუნძულების დრო;გრინვიჩის საშუალო დროJაღმოსავლეთ გრენლანდიი" + + "ს დროlაღმოსავლეთ გრენლანდიის სტანდარტული დროcაღმოსავლეთ გრენლანდიის ზა" + + "ფხულის დროDდასავლეთ გრენლანდიის დროfდასავლეთ გრენლანდიის სტანდარტული დ" + + "რო]დასავლეთ გრენლანდიის ზაფხულის დროWსპარსეთის ყურის სტანდარტული დრო" + + "\x1fგაიანის დრო<ჰავაისა და ალეუტის დრო^ჰავაისა და ალეუტის სტანდარტული დრ" + + "ოUჰავაისა და ალეუტის ზაფხულის დრო%ჰონკონგის დროGჰონკონგის სტანდარტული " + + "დრო>ჰონკონგის ზაფხულის დრო\x1cჰოვდის დრო>ჰოვდის სტანდარტული დრო5ჰოვდის" + + " ზაფხულის დრო\"ინდოეთის დროWინდოეთის ოკეანის კუნძულების დრო+ინდოჩინეთის " + + "დროGცენტრალური ინდონეზიის დროGაღმოსავლეთ ინდონეზიის დროAდასავლეთ ინდონ" + + "ეზიის დრო\x1cირანის დრო>ირანის სტანდარტული დრო;ირანის დროის სარტყელი%ი" + + "რკუტსკის დროGირკუტსკის სტანდარტული დრო>ირკუტსკის ზაფხულის დრო\"ისრაელი" + + "ს დროDისრაელის სტანდარტული დრო;ისრაელის ზაფხულის დრო\"იაპონიის დროDიაპ" + + "ონიის სტანდარტული დრო;იაპონიის ზაფხულის დროDაღმოსავლეთ ყაზახეთის დრო>დ" + + "ასავლეთ ყაზახეთის დრო\x1cკორეის დრო>კორეის სტანდარტული დრო5კორეის ზაფხ" + + "ულის დრო\x1cკოსრეს დრო1კრასნოიარსკის დროSკრასნოიარსკის სტანდარტული დრო" + + "Jკრასნოიარსკის ზაფხულის დრო(ყირგიზეთის დრო;ლაინის კუნძულების დრო#ლორდ-ჰა" + + "უს დროEლორდ-ჰაუს სტანდარტული დრო<ლორდ-ჰაუს ზაფხულის დრო>მაქკუორის კუნძ" + + "ულის დრო%მაგადანის დროGმაგადანის სტანდარტული დრო>მაგადანის ზაფხულის დრ" + + "ო%მალაიზიის დრო(მალდივების დროAმარკიზის კუნძულების დროAმარშალის კუნძულ" + + "ების დრო\"მავრიკის დროDმავრიკის სტანდარტული დრო;მავრიკის ზაფხულის დრო" + + "\"მოუსონის დროTჩრდილო-აღმოსავლეთ მექსიკის დროNჩრდილო-დასავლეთ მექსიკის დ" + + "როgჩრდილო-დასავლეთ მექსიკის ზაფხულის დროKმექსიკის წყნარი ოკეანის დროmმ" + + "ექსიკის წყნარი ოკეანის სტანდარტული დროdმექსიკის წყნარი ოკეანის ზაფხული" + + "ს დრო,ულან-ბატორის დროNულან-ბატორის სტანდარტული დროEულან-ბატორის ზაფხუ" + + "ლის დრო\"მოსკოვის დროDმოსკოვის სტანდარტული დრო;მოსკოვის ზაფხულის დრო%მ" + + "იანმარის დრო\x1cნაურუს დრო\x1fნეპალის დრო8ახალი კალედონიის დროZახალი კ" + + "ალედონიის სტანდარტული დროQახალი კალედონიის ზაფხულის დრო5ახალი ზელანდიი" + + "ს დროWახალი ზელანდიის სტანდარტული დროNახალი ზელანდიის ზაფხულის დრო4ნიუ" + + "ფაუნდლენდის დროVნიუფაუნდლენდის სტანდარტული დროMნიუფაუნდლენდის ზაფხულის" + + " დრო\x19ნიუეს დრო>ნორფოლკის კუნძულის დროBფერნანდო-დე-ნორონიას დროdფერნან" + + "დო-დე-ნორონიას სტანდარტული დრო[ფერნანდო-დე-ნორონიას ზაფხულის დრო1ნოვოს" + + "იბირსკის დროSნოვოსიბირსკის სტანდარტული დროJნოვოსიბირსკის ზაფხულის დრო" + + "\x1cომსკის დრო>ომსკის სტანდარტული დრო5ომსკის ზაფხულის დრო(პაკისტანის დრო" + + "Jპაკისტანის სტანდარტული დროAპაკისტანის ზაფხულის დრო\x1cპალაუს დრო?პაპუა-" + + "ახალი გვინეის დრო%პარაგვაის დროGპარაგვაის სტანდარტული დრო>პარაგვაის ზა" + + "ფხულის დრო\x19პერუს დრო;პერუს სტანდარტული დრო2პერუს ზაფხულის დრო+ფილიპ" + + "ინების დროMფილიპინების სტანდარტული დროDფილიპინების ზაფხულის დროAფენიქს" + + "ის კუნძულების დროIსენ-პიერის და მიკელონის დროkსენ-პიერის და მიკელონის " + + "სტანდარტული დროbსენ-პიერის და მიკელონის ზაფხულის დრო%პიტკერნის დრო\x1f" + + "პონაპეს დრო%ფხენიანის დრო(რეიუნიონის დრო\x1fროთერის დრო%სახალინის დროG" + + "სახალინის სტანდარტული დრო>სახალინის ზაფხულის დრო\x1cსამოას დრო>სამოას " + + "სტანდარტული დრო5სამოას ზაფხულის დროAსეიშელის კუნძულების დრო(სინგაპურის" + + " დროDსოლომონის კუნძულების დრო8სამხრეთ გეორგიის დრო%სურინამის დრო\x1cსიოვ" + + "ას დრო\x1cტაიტის დრო\x1fტაიბეის დროAტაიბეის სტანდარტული დრო8ტაიბეის ზა" + + "ფხულის დრო%ტაჯიკეთის დრო\"ტოკელაუს დრო\x1cტონგის დრო>ტონგის სტანდარტულ" + + "ი დრო5ტონგის ზაფხულის დრო\x1cჩუუკის დრო+თურქმენეთის დროMთურქმენეთის სტ" + + "ანდარტული დროDთურქმენეთის ზაფხულის დრო\x1fტუვალუს დრო\"ურუგვაის დროDურ" + + "უგვაის სტანდარტული დრო;ურუგვაის ზაფხულის დრო%უზბეკეთის დროGუზბეკეთის ს" + + "ტანდარტული დრო>უზბეკეთის ზაფხულის დრო\"ვანუატუს დროDვანუატუს სტანდარტუ" + + "ლი დრო;ვანუატუს ზაფხულის დრო(ვენესუელის დრო1ვლადივოსტოკის დროSვლადივოს" + + "ტოკის სტანდარტული დროJვლადივოსტოკის ზაფხულის დრო+ვოლგოგრადის დროMვოლგო" + + "გრადის სტანდარტული დროDვოლგოგრადის ზაფხულის დრო\"ვოსტოკის დრო5ვეიკის კ" + + "უნძულის დრო9ვოლისი და ფუტუნას დრო%იაკუტსკის დროGიაკუტსკის სტანდარტული " + + "დრო>იაკუტსკის ზაფხულის დრო4ეკატერინბურგის დროVეკატერინბურგის სტანდარტუ" + + "ლი დროMეკატერინბურგის ზაფხულის დრო\x07Jumanne\x08Alhamisi\x06Ijumaa" + + "\x08Jumamosi\x07Jumanne\x08Alhamisi\x06Ijumaa\x08Jumamosi" + +var bucket56 string = "" + // Size: 10010 bytes + "\x0c{1} 'af' {0}\x03Yen\x03Fur\x04Meɣ\x03Yeb\x03May\x03Yun\x03Yul\x04Ɣuc" + + "\x03Cte\x03Tub\x03Nun\x04Duǧ\x08Yennayer\x07Fuṛar\x07Meɣres\x06Yebrir" + + "\x05Mayyu\x05Yunyu\x05Yulyu\x05Ɣuct\x09Ctembeṛ\x07Tubeṛ\x0aNunembeṛ\x0bD" + + "uǧembeṛ\x03Wam\x03Duj\x08Wambeṛ\x0aDujembeṛ\x03Yan\x03San\x06Kraḍ\x05Kuẓ" + + "\x03Sam\x06Sḍis\x03Say\x02Cr\x02Ri\x02Ra\x02Hd\x02Mh\x02Sm\x02Sd\x06Yana" + + "ss\x06Sanass\x09Kraḍass\x08Kuẓass\x06Samass\x09Sḍisass\x06Sayass\x03Ace" + + "\x03Ari\x03Ara\x03Aha\x03Amh\x03Sem\x03Sed\x02Md\x04Acer\x04Arim\x04Aram" + + "\x04Ahad\x05Amhad\x06Kḍg1\x06Kḍg2\x06Kḍg3\x06Kḍg4\x13akraḍaggur amenzu" + + "\x14akraḍaggur wis-sin\x17akraḍaggur wis-kraḍ\x16akraḍaggur wis-kuẓ\x04K" + + "yr1\x04Kyr2\x04Kyr3\x04Kyr4\x14Akraḍyur wis-yiwen\x12akraḍyur wis-sin" + + "\x14Akraḍyur wis-kuẓ\x07n tufat\x09n tmeddit\x02FT\x02MD\x14send talalit" + + " n Ɛisa\x14send tallit tamagnut\x14seld talalit n Ɛisa\x0fTallit tamagnu" + + "t\x09snd. T.Ɛ\x04NTƐ\x09sld. T.Ɛ\x04LTƐ\x06Tallit\x07Aseggas\x0daseggas " + + "izrin\x0baseggas-agi\x11aseggas d-iteddun\x11deg {0} n useggas\x13deg {0" + + "} n iseggasen\x11{0} n useggas aya\x13{0} n iseggasen aya\x04sgs.\x0bdeg" + + " {0} sg.\x0b{0} sg. aya\x0aakraḍyur\x10akraḍyur izrin\x0eakraḍyur-agi" + + "\x14akraḍyur d-iteddun\x14deg {0} n ukraḍyur\x16deg {0} n ikraḍyuren\x14" + + "{0} n ukraḍyur aya\x14{0} n ikradyuren aya\x04kyr.\x0cdeg {0} kyr.\x0dde" + + "g {0} kyrn.\x0c{0} kyr. aya\x0d{0} kyrn. aya\x05Aggur\x0bayyur izrin\x09" + + "ayyur-agi\x0fayyur d-iteddun\x10deg {0} n wayyur\x12deg {0} n wayyuren" + + "\x10{0} n wayyur aya\x12{0} n wayyuren aya\x0bdeg {0} yr.\x0b{0} yr. aya" + + "\x05Ddurt\x0camalas izrin\x0aamalas-agi\x10deg {0} n umalas\x12deg {0} n" + + " imalasen\x10{0} n umalas aya\x12{0} n imalasen aya\x0camalas n {0}\x04m" + + "ls.\x0cdeg {0} mls.\x0c{0} mls. aya\x0fAmalas n wayyur\x0bmls. n yyr." + + "\x03Ass\x08Iḍelli\x05Ass-a\x06Azekka\x0edeg {0} n wass\x10deg {0} n wuss" + + "an\x0e{0} n wass aya\x10{0} n wussan aya\x0dass n useggas\x0aass n sgs." + + "\x0dUssan n ddurt\x0aass n mls.\x15Ass n umalas n wayyur\x0fass. mls. n " + + "yr.\x0aAcer izrin\x08Acer-agi\x0eAcer d-iteddun\x0edeg {0} n Acer\x0e{0}" + + " n Acer aya\x0aAce. izrin\x08Ace. agi\x0eAce. d-iteddun\x0edeg {0} n Ace" + + ".\x0e{0} n Ace. aya\x09Cr. izrin\x07Cr. agi\x0dCr. d-iteddun\x0bdeg {0} " + + "Cr.\x0b{0} Cr. aya\x0bArim yezrin\x08Arim-agi\x0eArim d-iteddun\x0edeg {" + + "0} n Arim\x0e{0} n Arim aya\x0aRi. yezrin\x07Ri. agi\x0cRi d-iteddun\x0d" + + "deg {0} n Ri.\x0d{0} n Ri. aya\x0aAram izrin\x08Aram-agi\x0eAram d-itedd" + + "un\x0cdeg {0} Aram\x0e{0} n Aram aya\x0aAhad izrin\x08Ahad-agi\x0eAhad d" + + "-iteddun\x0edeg {0} n Ahad\x0edeg {0} n ahad\x0e{0} n Ahad aya\x0e{0} n " + + "ahad aya\x0bAmhad izrin\x09Amhad-agi\x0fAmhad d-iteddun\x0fdeg {0} n Amh" + + "ad\x0f{0} n Amhad aya\x09Sem izrin\x07Sem-agi\x0dSem d-iteddun\x0bDeg {0" + + "} Sem\x0d{0} n Sem aya\x09Sm. izrin\x07Sm. agi\x0dSm. d-iteddun\x0bDeg {" + + "0} Sm.\x0d{0} n Sm. aya\x09sed izrin\x07sed-agi\x0dsed d-iteddun\x0cdi {" + + "0} n sed\x0d{0} n Sed aya\x0dSed d-iteddun\x08Sd izrin\x06Sd agi\x0cSd d" + + "-iteddun\x0cdeg {0} n Sd\x0d{0} n Sd. aya\x0c{0} n Sd aya\x05TF/MD\x13n " + + "tufat / n tmeddit\x06Tamert\x09asrag-agi\x0fdeg {0} n usrag\x11deg {0} n" + + " isragen\x0f{0} n usrag aya\x11{0} n isragen aya\x03sr.\x0bdeg {0} sr." + + "\x0b{0} sr. aya\x07Tamrect\x0atasdat-agi\x10deg {0} n tesdat\x12deg {0} " + + "n tesdatin\x10{0} n tesdat aya\x12{0} n tesdatin aya\x04tsd.\x0cdeg {0} " + + "tsd.\x0c{0} tsd. aya\x06Tasint\x04tura\x10deg {0} n tasint\x11deg {0} n " + + "tasinin\x10{0} n tasint aya\x11{0} n tasinin aya\x04tsn.\x0cdeg {0} tsn." + + "\x0c{0} tsn. aya\x0fAseglem asergan\x06iẓdi\x06Iẓdi\x09akud: {0}\x13{0} " + + "(akud n unebdu)\x11{0} (akud amagnu)\x18Akud Agraɣlan Imyuddsen\x18Akud " + + "n Unebdu n Britanya\x14Agud Amagnu n Irland\x12Akud n Afɣanistan\x18Akud" + + " n tefriqt talemmast\x18Akud n tefriqt n usammar\x1fAkud amagnu n tefriq" + + "t n unẓul\x16Akud n tefriqt n umalu\x1dAkud amagnu n tefriqt n umalu\x1f" + + "Akud n unebdu n tefriqt n umalu\x0dAkud n Alaska\x14Akud Amagnu n Alaska" + + "\x16Akud n Unebdu n Alaska\x0fAkud n Amaẓun\x16Akud Amagnu n Amaẓun\x18A" + + "kud n Unebdu n Amaẓun\x19Akud n Tlemmast n Marikan Akud Amagnu n Tlemmas" + + "t n Marikan\"Akud n Unebdu n Tlemmast n Marikan\x1eAkud n Usammar Agafa " + + "n Marikan%Akud Amagnu n Usammar Agafa n Marikan'Akud n Unebdu n Usammar " + + "Agafa n Marikan\x17Akud n Idurar n Marikan\x1eAkud Amagnu n Idurar n Mar" + + "ikan Akud n Unebdu n Idurar n Marikan\x1dAkud Amelwi n Marikan n Ugafa$A" + + "kud Amelwi Amagnu n Marikan n Ugafa&Akud Amelwi n Unebdu n Marikan n Uga" + + "fa\x0bAkud n Alpa\x12Akud Amagnu n Alpa\x14Akud n Unebdu n Alpa\x0bAkud " + + "Aɛrab\x12Akud Amagnu Aɛrab\x14Akud Aɛrab n Unebdu\x0fAkud n Arjuntin\x16" + + "Akud Amagnu n Arjuntin\x18Akud n Unebdu n Arjuntin\x19Akud n Arjuntin n " + + "Usammar Akud Amagnu n Arjuntin n Usammar\"Akud n Unebdu n Arjuntin n Usa" + + "mmar\x10Akud n Aṛminya\x17Akud Amagnu n Aṛminya\x19Akud n Unebdu n Aṛmin" + + "ya\x0eAkud Aṭlasan\x15Akud Amagnu Aṭlasan\x17Akud Aṭlasan n Unebdu\x19Ak" + + "ud n Ustralya Talemmast Akud Amagnu n Ustralya Talemmast\"Akud n Unebdu " + + "n Ustralya Talemmast$Akud n Tlemmast n Umalu n Ustṛalya+Akud Amagnu n Tl" + + "emmast n Umalu n Ustṛalya-Akud n Unebdu n Tlemmast n Umalu n Ustṛalya" + + "\x1bAkud n Ustṛalya n Usammar\"Akud Amagnu n Ustṛalya n Usammar$Akud n U" + + "nebdu n Ustṛalya n Usammar\x19Akud n Ustṛalya n Umalu Akud Amagnu n Ustṛ" + + "alya n Umalu Akud n Unebdu Ustṛalya n Umalu\x13Akud n Aziṛbiǧan\x1aAkud " + + "Amagnu n Aziṛbiǧan\x1cAkud n Unebdu n Aziṛbiǧan\x0fAkud n Aẓuris\x16Akud" + + " amagnu n Aẓuris\x18Akud n unebdu n Aẓuris\x10Akud n Bingladic\x17Akud A" + + "magnu n Bingladic\x19Akud n Unebdu n Bingladic\x0cAkud n Butan\x0dAkud n" + + " Bulivi\x11Akud n Bṛazilya\x18Akud Amagnu n Bṛazilya\x1aAkud n Unebdu n " + + "Bṛazilya\x17Akud n Brunay Dar Salam\x10Akud n Kap Viṛ\x17Akud amagnu n K" + + "ap Viṛ\x19Akud n unebdu n Kap Viṛ\x19Akud Amagnu n Camuṛṛu\x0dAkud n Cat" + + "ham\x14Akud Amagnu n Catham\x14Akud n Unebdu Catham\x0bAkud n Cili\x12Ak" + + "ud Amagnu n Cili\x14Akud n Unebdu n Cili\x0aAkud n Cin\x11Akud Amagnu n " + + "Cin\x13Akud n Unebdu n Cin\x10Akud n Kwabalsan\x17Akud Amagnu n Kwabalsa" + + "n\x19Akud n Unebdu n Kwabalsan\x1aAkud n Tegzirin n Kristmas\x16Akud n T" + + "egzirin n Kuku\x0fAkud n Kulumbya\x16Akud Amagnu n Kulumbya\x18Akud n Un" + + "ebdu n Kulumbya\x15Akud n Tegzirin n Kuk\x1cAkud Amagnu n Tegzirin n Kuk" + + "\x1eAkud n Unebdu n Tegzirin n Kuk\x0bAkud n Kuba\x12Akud Amagnu n Kuba" + + "\x14Akud n Unebdu n Kuba\x0cAkud n Davis\x19Akud n Dumont-d’Urville\x18A" + + "kud n Timuṛ n Usammar\x17Akud n Island n Usammar\x1eAkud Amagnu n Island" + + " n Usammar Akud n Unebdu n Island n Usammar\x10Akud n Ikwaṭur\x17Akud n " + + "Turuft Talemmast\x1eAkud amagnu n Turuft Talemmast Akud n unebdu n Turuf" + + "t Talemmast\x17Akud n Turuft n Usammar\x1eAkud amagnu n Turuft n Usammar" + + " Akud n unebdu n Turuft n Usammar Akud nniḍen n Turuft n Usammar\x15Akud" + + " n turuft n umalu\x1cAkud amagnu n turuft n umalu\x1cAkud n unebdu turuf" + + "t n umalu\x1aAkud n Tegzirin n Falkland!Akud Amagnu n Tegzirin n Falklan" + + "d!Akud n Unebdu Tegzirin n Falkland\x0bAkud n Fiji\x12Akud Amagnu n Fiji" + + "\x14Akud n Unebdu n Fiji\x1aAkud n Gwiyan Tafṛansist/Akud n Wakal n Unẓu" + + "l d Antaṛktik n Fṛansa\x12Akud n Gapapaguṣ\x17Akud n Tegzirin Gambier" + + "\x10Akud n Jyuṛjya\x17Akud Amagnu n Jyuṛjya\x19Akud n Unebdu n Jyuṛjya" + + "\x18Akud n Tegzirin Jilbiṛ\x18Akud alemmas n Greenwich\x19Akud n Grinlan" + + "d n Usammar Akud Amagnu n Grinland n Usammar\"Akud n Unebdu n Grinland n" + + " Usammar\x17Akud n Grinland n Umalu\x1eAkud Amagnu n Grinland n Umalu Ak" + + "ud n Unebdu n Grinland n Umalu\x12Akud Amagnu n Gulf\x0dAkud n Gwiyan" + + "\x15Akud n Haway-Aliwsyan\x1cAkud Amagnu n Haway-Aliwsyan\x1dAkud n Uneb" + + "u n Haway-Aliwsyan\x10Akud n Hung Kung\x17Akud Amagnu n Hung Kung\x19Aku" + + "d n Unebdu n Hung Kung\x0bAkud n Hovd\x12Akud Amagnu n Hovd\x14Akud n Un" + + "ebdu n Hovd\x12Akud Amagnu n Hend\x14Akud n Ugaraw Ahendi\x0eAkud n Indu" + + "cin\x1bAkud n Tlemmast n Indunisya\x1aAkud n Usammar n Indunisya\x18Akud" + + " n Umalu n Indunisya\x0bAkud n Iran\x12Akud Amagnu n Iran\x12Akud n Uneb" + + "du Iran\x0eAkud n Irkutsk\x15Akud Amagnu n Irkutsk\x17Akud n Unebdu n Ir" + + "kutsk\x0eAkud n Izrayil\x15Akud Amagnu n Izrayil\x17Akud n Unebdu n Izra" + + "yil\x0cAkud n Japun\x13Akud Amagnu n Japun\x15Akud n Unebdu n Japun\x1bA" + + "kud n Kazaxistan n Usammar\x19Akud n Kazaxistan n Umalu\x0cAkud n Kurya" + + "\x13Akud Amagnu n Kurya\x15Akud n Unebdu n Kurya\x0dAkud n Kosrae\x12Aku" + + "d n Krasnoyarsk\x19Akud amagnu n Krasnoyarsk\x1bAkud n unebdu n Krasnoya" + + "rsk\x11Akud n Kirigistan\x14Akud n Tegzirin Line\x10Akud n Lord Howe\x17" + + "Akud Amagnu n Lord Howe\x19Akud n Unebdu n Lord Howe\x0eAkud n Markari" + + "\x0eAkud n Magadan\x15Akud Amagnu n Magadan\x17Akud n Unebdu n Magadan" + + "\x0eAkud n Malizya\x0dAkud n Maldiv\x16Akud n Tegzirin Markiz\x18Akud n " + + "Tegzirin Maṛcal\x0cAkud n Muris\x13Akud amagnu n Muris\x15Akud n unebdu " + + "n Muris\x0dAkud n Mawsun\x1bAkud n Ugafa Amalu n Miksik\"Akud Amagnu n U" + + "gafa Amalu n Miksik$Akud n Unebdu n Ugafa Amalu n Miksik\x14Akud Amelwi " + + "n Miksik\x1bAkud amagnu Amelwi n Miksik\x1dAkud Amelwi n Unebdu n Miksik" + + "\x11Akud n Ulan Bator\x18Akud Amagnu n Ulan Bator\x1aAkud n Unebdu n Ula" + + "n Bator\x0dAkud n Moscow\x14Akud Amagnu n Moscow\x16Akud n Unebdu n Mosc" + + "ow\x0eAkud n Myanmar\x0bAkud n Nuru\x0cAkud n Nipal\x19Akud n Kalidunya " + + "Tamaynut Akud Amagnu n Kalidunya Tamaynut\"Akud n Unebdu n Kalidunya Tam" + + "aynut\x16Akud n Ziland Tamaynut\x1dAkud Amagnu n Ziland Tamaynut\x1dAkud" + + " n Unebdu Ziland Tamaynut\x14Akud n Wakal Amaynut\x1bAkud Amagnu n Wakal" + + " Amaynut\x1dAkud n Unebdu n Wakal Amaynut\x0bAkud n Niyu\x1aAkud n Tigzi" + + "rt n Nuṛfulk\x19Akud n Firnandu n Nurunha Akud Amagnu n Firnandu n Nurun" + + "ha\"Akud n Unebdu n Firnandu n Nurunha\x12Akud n Novosibirsk\x19Akud Ama" + + "gnu n Novosibirsk\x1bAkud n Unebdu n Novosibirsk\x0bAkud n Omsk\x12Akud " + + "Amagnu n Omsk\x14Akud n Unebdu n Omsk\x0fAkud n Pakistan\x16Akud Amagnu " + + "n Pakistan\x18Akud n Unebdu n Pakistan\x0cAkud n Palau Akud n Papwazi n " + + "Ɣinya Tamaynut\x11Akud n Paṛagway\x18Akud Amagnu n Paṛagway\x1aAkud n U" + + "nebdu n Paṛagway\x0bAkud n Piru\x12Akud Amagnu n Piru\x14Akud n Unebdu n" + + " Piru\x0eAkud n Filipin\x15Akud Amagnu n Filipin\x17Akud n Unebdu n Fili" + + "pin\x18Akud n Tegzirin n Finiks\x18Akud n San Pyir & Miklun\x1fAkud Amag" + + "nu n San Pyir & Miklun!Akud n Unebdu n San Pyir & Miklun\x10Akud n Pitka" + + "ṛn\x0dAkud n Ponape\x10Akud n Pyungyung\x0fAkud n Riyunyun\x0eAkud n R" + + "othera\x0fAkud n Sakhalin\x16Akud Amagnu n Sakhalin\x18Akud n Unebdu n S" + + "akhalin\x0eAkud n Ṣamwa\x15Akud Amagnu n Ṣamwa\x17Akud n Unebdu n Ṣamwa" + + "\x0dAkud n Saycal\x16Akud Amagnu n Sangapur\x17Akud n Tegzirin Salumun" + + "\x1aAkud n Jyuṛjya n Unẓul\x0eAkud n Surinam\x0cAkud n Syuwa\x0cAkud n T" + + "ayti\x0fAkud n Ṭaypay\x16Akud Amagnu n Ṭaypay\x18Akud n Unebdu n Ṭaypay" + + "\x13Akud n Ṭajikistan\x10Akud n Ṭukilaw\x0eAkud n Ṭunga\x15Akud Amagnu n" + + " Ṭunga\x17Akud n Unebdu n Ṭunga\x0cAkud n Chuuk\x15Akud n Ṭurkmanistan" + + "\x1cAkud Amagnu n Ṭurkmanistan\x1eAkud n Unebdu n Ṭurkmanistan\x0dAkud n" + + " Tuvalu\x0eAkud n Urugway\x15Akud amagnu n Urugway\x17Akud n Unebdu n Ur" + + "ugway\x11Akud n Uzbikistan\x18Akud Amagnu n Uzbikistan\x1aAkud n Unebdu " + + "n Uzbikistan\x0fAkud n Vanuyatu\x16Akud Amagnu n Vanuyatu\x18Akud n Uneb" + + "du n Vanuyatu\x10Akud n Vinizwila\x12Akud n Vladivostok\x19Akud Amagnu n" + + " Vladivostok\x1bAkud n Unebdu n Vladivostok\x10Akud n Volgograd\x17Akud " + + "Amagnu n Volgograd\x19Akud n Unebdu n Volgograd\x0dAkud n Vostok\x16Akud" + + " n Tegzirin n Wake\x1aAkud n Wallis akked Futuna\x0eAkud n Yakutsk\x15Ak" + + "ud Amagnu n Yakutsk\x17Akud n Unebdu n Yakutsk\x14Akud n Yekaterinburg" + + "\x1bAkud Amagnu n Yekaterinburg\x1dAkud n Unebdu n Yekaterinburg\x05Isni" + + "n\x06Selasa\x04Rabu\x06Khamis\x06Jumaat\x05Sabtu\x03Mar\x03Ibr\x03May" + + "\x03Cut\x05Kṭu\x03Nwa\x08Yebrayer\x04Mars\x05Ibrir\x06Yulyuz\x08Cutanbir" + + "\x08Kṭuber\x07Nwanbir\x08Dujanbir\x03Fev\x03Apr\x03Iyn\x03Iyl\x03Avg\x03" + + "Sen\x03Okt\x03Noy\x03Dek" + +var bucket57 string = "" + // Size: 8285 bytes + "\x0cMwai wa mbee\x0dMwai wa kelĩ\x0fMwai wa katatũ\x0cMwai wa kana\x0eMw" + + "ai wa katano\x12Mwai wa thanthatũ\x0eMwai wa muonza\x0fMwai wa nyaanya" + + "\x0dMwai wa kenda\x0eMwai wa ĩkumi\x17Mwai wa ĩkumi na ĩmwe\x16Mwai wa ĩ" + + "kumi na ilĩ\x03Wky\x03Wkw\x03Wkl\x04Wtũ\x03Wkn\x03Wtn\x03Wth\x09Wa kyumw" + + "a\x10Wa kwambĩlĩlya\x08Wa kelĩ\x0aWa katatũ\x07Wa kana\x09Wa katano\x0dW" + + "a thanthatũ\x0cLovo ya mbee\x0dLovo ya kelĩ\x0fLovo ya katatũ\x0cLovo ya" + + " kana\x0aĨyakwakya\x09Ĩyawĩoo\x0dMbee wa Yesũ\x0fĨtina wa Yesũ\x02MY\x02" + + "IY\x07Ĩvinda\x04Mwai\x06Kyumwa\x05Ĩyoo\x0aŨmũnthĩ\x05Ũnĩ\x09Kyumwanĩ\x14" + + "Ĩyakwakya/Ĩyawĩoo\x08Ndatĩka\x10Kĩsio kya ĩsaa\x0cMwedi Ntandi\x0dMwedi" + + " wa Pili\x0dMwedi wa Tatu\x10Mwedi wa Nchechi\x0fMwedi wa Nnyano\x16Mwed" + + "i wa Nnyano na Umo\x19Mwedi wa Nnyano na Mivili\x19Mwedi wa Nnyano na Mi" + + "tatu\x1aMwedi wa Nnyano na Nchechi\x19Mwedi wa Nnyano na Nnyano\x1eMwedi" + + " wa Nnyano na Nnyano na U\x1eMwedi wa Nnyano na Nnyano na M\x03Ll2\x03Ll" + + "3\x03Ll4\x03Ll5\x03Ll6\x03Ll7\x03Ll1\x0eLiduva lyapili\x0eLiduva lyatatu" + + "\x11Liduva lyanchechi\x10Liduva lyannyano\x19Liduva lyannyano na linji" + + "\x1aLiduva lyannyano na mavili\x0eLiduva litandi\x04Muhi\x05Chilo\x0eAka" + + "napawa Yesu\x0dNankuida Yesu\x02AY\x02NY\x06Mahiku\x05Mwedi\x06Lijuma" + + "\x06Lihiku\x04Lido\x04Nelo\x05Nundu\x11Disiku dya lijuma\x0aMuhi/Chilo" + + "\x0eNpanda wa muda\x1aEEEE, d 'di' MMMM 'di' y G\x14d 'di' MMMM 'di' y G" + + "\x06Janeru\x07Febreru\x05Marsu\x05Abril\x04Maiu\x05Junhu\x05Julhu\x06Ago" + + "stu\x08Setenbru\x06Otubru\x08Nuvenbru\x08Dizenbru\x02du\x02si\x02te\x02k" + + "u\x02ki\x02se\x02sa\x07dumingu\x0csigunda-fera\x0atersa-fera\x0bkuarta-f" + + "era\x0akinta-fera\x0asesta-fera\x06sabadu\x07sábadu\x0d1º trimestri\x0d2" + + "º trimestri\x0d3º trimestri\x0d4º trimestri\x0fAntis di Kristu\x12Antis" + + " di Era Kumun\x10Dispos di Kristu\x09Era Kumun\x03AEK\x02EK\x18EEEE, d '" + + "di' MMMM 'di' y\x12d 'di' MMMM 'di' y\x03Anu\x0aanu pasadu\x09es anu li" + + "\x0cprósimu anu\x0ddi li {0} anu\x0da ten {0} anu\x03anu\x09Trimestri" + + "\x13di li {0} trimestri\x13a ten {0} trimestri\x0fdi li {0} trim.\x0fa t" + + "en {0} trim.\x0ames pasadu\x09es mes li\x0cprósimu mes\x0ddi li {0} mes" + + "\x0da ten {0} mes\x06Simana\x0dsimana pasadu\x0ces simana li\x0fprósimu " + + "simana\x10di li {0} simana\x10a ten {0} simana\x04sim.\x0edi li {0} sim." + + "\x0ea ten {0} sim.\x04onti\x03oji\x05manha\x0ddi li {0} dia\x0da ten {0}" + + " dia\x0dDia di simana\x0edumingu pasadu\x0des dumingu li\x10prósimu dumi" + + "ngu\x0bdum. pasadu\x0aes dum. li\x0dprósimu dum.\x13sigunda-fera pasadu" + + "\x12es sigunda-fera li\x15prósimu sigunda-fera\x0bsig. pasadu\x0aes sig." + + " li\x0dprósimu sig.\x11tersa-fera pasadu\x10es tersa-fera li\x13prósimu " + + "tersa-fera\x0bter. pasadu\x0aes ter. li\x0dprósimu ter.\x12kuarta-fera p" + + "asadu\x11es kuarta-fera li\x14prósimu kuarta-fera\x0bkua. pasadu\x0aes k" + + "ua. li\x0dprósimu kua.\x11kinta-fera pasadu\x10es kinta-fera li\x13prósi" + + "mu kinta-fera\x0bkin. pasadu\x0aes kin. li\x0dprósimu kin.\x11sesta-fera" + + " pasadu\x10es sesta-fera li\x13prósimu sesta-fera\x0bses. pasadu\x0aes s" + + "es. li\x0dprósimu ses.\x0dsabadu pasadu\x0ces sabadu li\x0fprósimu sabad" + + "u\x0bsab. pasadu\x0aes sab. li\x0dprósimu sab.\x03Ora\x0ddi li {0} ora" + + "\x0da ten {0} ora\x06Minutu\x10di li {0} minutu\x10a ten {0} minutu\x0dd" + + "i li {0} min\x0da ten {0} min\x0bdi li {0} m\x0ba ten {0} m\x07Sigundu" + + "\x11di li {0} sigundu\x11a ten {0} sigundu\x0ddi li {0} sig\x0da ten {0}" + + " sig\x0bdi li {0} s\x0ba ten {0} s\x09Ora lokal\x0aOra di {0}\x13Ora di " + + "{0} (verãu)\x13Ora di {0} (normal)\x15Ora di Afrika Sentral\x16Ora di Af" + + "rika Oriental\x14Ora di Sul di Afrika\x17Ora di Afrika Osidental\x1fOra " + + "Padrãu di Afrika Osidental!Ora di Verão di Afrika Osidental\x0bOra Sentr" + + "al\x13Ora Sentral Padrãu\x15Ora Sentral di Verãu\x0cOra Oriental\x14Ora " + + "Oriental Padrãu\x16Ora Oriental di Verãu\x0fOra di Montanha\x17Ora di Mo" + + "ntanha Padrãu\x19Ora di Verãu di Montanha\x0fOra di Pasifiku\x17Ora di P" + + "asifiku Padrãu\x19Ora di Pasifiku di Verãu\x10Ora di Atlantiku\x18Ora Pa" + + "drãu di Atlantiku\x1aOra di Verãu di Atlantiku\x18Ora di Australia Sentr" + + "al Ora Padrãu di Australia Sentral\"Ora di Verãu di Australia Sentral Or" + + "a di Autralia Sentru-Osidental)Ora Padrãu di Australia Sentru-Osidental+" + + "Ora di Verãu di Australia Sentru-Osidental\x19Ora di Australia Oriental!" + + "Ora Padrãu di Australia Oriental#Ora di Verãu di Australia Oriental\x1aO" + + "ra di Australia Osidental\"Ora Padrãu di Australia Osidental$Ora di Verã" + + "u di Australia Osidental\x15Ora di Europa Sentral\x1dOra Padrãu di Europ" + + "a Sentral\x1fOra di Verãu di Europa Sentral\x16Ora di Europa Oriental" + + "\x1eOra Padrãu di Europa Oriental Ora di Verãu di Europa Oriental\x17Ora" + + " di Europa Osidental\x1fOra Padrãu di Europa Osidental!Ora di Verãu di E" + + "uropa Osidental\x06Adduha\x06Aluula\x05Jaari\x12Adduha wala Aluula\x03JE" + + "N\x03WKR\x03WGT\x03WKN\x03WTN\x03WTD\x03WMJ\x03WNN\x03WKD\x03WIK\x03WMW" + + "\x03DIT\x09Njenuarĩ\x0eMwere wa kerĩ\x10Mwere wa gatatũ\x0dMwere wa kana" + + "\x0fMwere wa gatano\x13Mwere wa gatandatũ\x12Mwere wa mũgwanja\x0fMwere " + + "wa kanana\x0eMwere wa kenda\x0fMwere wa ikũmi\x18Mwere wa ikũmi na ũmwe" + + "\x09Ndithemba\x03KMA\x03NTT\x03NMN\x03NMT\x03ART\x03NMA\x03NMM\x0dRobo y" + + "a mbere\x0dRobo ya kerĩ\x0fRobo ya gatatũ\x0cRobo ya kana\x06Kiroko\x0aH" + + "waĩ-inĩ\x08Kĩhinda\x03Ira\x09Ũmũthĩ\x07Rũciũ\x12Mũcooro wa mathaa\x16G y" + + " 'ж'. d MMMM, EEEE\x10G y 'ж'. d MMMM\x09G dd.MM.y\x07қаң.\x07ақп.\x07на" + + "у.\x07сәу.\x07мам.\x07мау.\x07шіл.\x07там.\x07қыр.\x07қаз.\x07қар.\x07ж" + + "ел.\x02Қ\x02А\x02Н\x02С\x02М\x02Ш\x02Т\x02Ж\x0cқаңтар\x0aақпан\x0cнауры" + + "з\x0aсәуір\x0aмамыр\x0cмаусым\x0aшілде\x0aтамыз\x10қыркүйек\x0aқазан" + + "\x0cқараша\x12желтоқсан\x07Қаң.\x07Ақп.\x07Нау.\x07Сәу.\x07Мам.\x07Мау." + + "\x07Шіл.\x07Там.\x07Қыр.\x07Қаз.\x07Қар.\x07Жел.\x0cҚаңтар\x0aАқпан\x0cН" + + "аурыз\x0aСәуір\x0aМамыр\x0cМаусым\x0aШілде\x0aТамыз\x10Қыркүйек\x0aҚаза" + + "н\x0cҚараша\x12Желтоқсан\x04Жс\x04Дс\x04Сс\x04Ср\x04Бс\x04Жм\x04Сб\x02Д" + + "\x02Б\x10жексенбі\x10дүйсенбі\x10сейсенбі\x10сәрсенбі\x10бейсенбі\x08жұм" + + "а\x0aсенбі\x10Жексенбі\x10Дүйсенбі\x10Сейсенбі\x10Сәрсенбі\x10Бейсенбі" + + "\x08Жұма\x0aСенбі\x0aІ тқс.\x0cІІ тқс.\x0eІІІ тқс.\x0aIV тқс.\x0fІ тоқса" + + "н\x11ІІ тоқсан\x13ІІІ тоқсан\x0fIV тоқсан\x13түн жарымы\x0aтүскі\x0aтаң" + + "ғы\x1bтүстен кейінгі\x0aкешкі\x0aтүнгі\x0cталтүс\x06таң\x17түстен кейін" + + "\x06кеш\x06түн.Біздің заманымызға дейін.біздің заманымызға дейін\x1fбізд" + + "ің заманымыз\x09б.з.д.\x06б.з.\x14y 'ж'. d MMMM, EEEE\x0ey 'ж'. d MMMM" + + "\x0ey 'ж'. dd MMM\x0aдәуір\x06жыл\x17былтырғы жыл\x13биылғы жыл\x13келес" + + "і жыл\x1b{0} жылдан кейін\x15{0} жыл бұрын\x03ж.\x12{0} ж. кейін\x12{0}" + + " ж. бұрын\x0aширек\x17өткен тоқсан\x13осы тоқсан\x19келесі тоқсан!{0} то" + + "қсаннан кейін\x1b{0} тоқсан бұрын\x16{0} тқс. кейін\x16{0} тқс. бұрын" + + "\x04ай\x0fөткен ай\x0bосы ай\x11келесі ай\x19{0} айдан кейін\x13{0} ай б" + + "ұрын\x08апта\x13өткен апта\x0fосы апта\x15келесі апта\x1d{0} аптадан ке" + + "йін\x17{0} апта бұрын\x10{0} аптасы\x05ап.\x14{0} ап. кейін\x14{0} ап. " + + "бұрын\x15айдағы апта\x06күн\x12алдыңгүні\x08кеше\x0aбүгін\x0aертең\x12б" + + "үрсігүні\x1b{0} күннен кейін\x15{0} күн бұрын\x17алдыңғы күні\x15жылдағ" + + "ы күн\x11апта күні\x1eайдағы апта күні\x1bайдағы ап. күні\x1bөткен жекс" + + "енбі\x17осы жексенбі\x1dкелесі жексенбі%{0} жексенбіден кейін\x1f{0} же" + + "ксенбі бұрын\x12өткен жек.\x0eосы жек.\x14келесі жек.\x16{0} жек. кейін" + + "\x16{0} жек. бұрын\x0fөткен жс\x0bосы жс\x11келесі жс\x13{0} жс кейін" + + "\x13{0} жс бұрын\x1bөткен дүйсенбі\x17осы дүйсенбі\x1dкелесі дүйсенбі%{0" + + "} дүйсенбіден кейін\x1f{0} дүйсенбі бұрын\x12өткен дүй.\x0eосы дүй.\x14к" + + "елесі дүй.\x16{0} дүй. кейін\x16{0} дүй. бұрын\x0fөткен дс\x0bосы дс" + + "\x11келесі дс\x13{0} дс кейін\x13{0} дс бұрын\x1bөткен сейсенбі\x17осы с" + + "ейсенбі\x1dкелесі сейсенбі%{0} сейсенбіден кейін\x1f{0} сейсенбі бұрын" + + "\x12өткен сей.\x0eосы сей.\x14келесі сей.\x16{0} сей. кейін\x16{0} сей. " + + "бұрын\x0fөткен сс\x0bосы сс\x11келесі сс\x13{0} сс кейін\x13{0} сс бұры" + + "н\x1bөткен сәрсенбі\x17осы сәрсенбі\x1dкелесі сәрсенбі%{0} сәрсенбіден " + + "кейін\x1f{0} сәрсенбі бұрын\x12өткен сәр.\x0eосы сәр.\x14келесі сәр." + + "\x16{0} сәр. кейін\x16{0} сәр. бұрын\x0fөткен ср\x0bосы ср\x11келесі ср" + + "\x13{0} ср кейін\x13{0} ср бұрын\x1bөткен бейсенбі\x17осы бейсенбі\x1dке" + + "лесі бейсенбі%{0} бейсенбіден кейін\x1f{0} бейсенбі бұрын\x12өткен бей." + + "\x0eосы бей.\x14келесі бей.\x16{0} бей. кейін\x16{0} бей. бұрын\x0fөткен" + + " бс\x0bосы бс\x11келесі бс\x02Д\x02И\x02EY\x03ƐY\x03gli\x02ma\x02me\x03g" + + "ie\x02ve\x02so\x02О\x02К\x02М\x02Ы\x02А\x02С\x02Ч\x03má\x02di\x02ga\x02b" + + "e\x03lá" + +var bucket58 string = "" + // Size: 14438 bytes + "\x13{0} бс кейін\x13{0} бс бұрын\x13өткен жұма\x0fосы жұма\x15келесі жұм" + + "а\x1d{0} жұмадан кейін\x17{0} жұма бұрын\x12өткен жұм.\x0eосы жұм.\x14к" + + "елесі жұм.\x16{0} жұм. кейін\x16{0} жұм. бұрын\x0fөткен жм\x0bосы жм" + + "\x11келесі жм\x13{0} жм кейін\x13{0} жм бұрын\x15өткен сенбі\x11осы сенб" + + "і\x17келесі сенбі\x1f{0} сенбіден кейін\x19{0} сенбі бұрын\x12өткен сен" + + ".\x0eосы сен.\x14келесі сен.\x16{0} сен. кейін\x16{0} сен. бұрын\x0fөтке" + + "н сб\x0bосы сб\x11келесі сб\x13{0} сб кейін\x13{0} сб бұрын\x09АМ/РМ" + + "\x0aсағат\x11осы сағат\x1f{0} сағаттан кейін\x19{0} сағат бұрын\x06сағ" + + "\x16{0} сағ. кейін\x16{0} сағ. бұрын\x11осы минут\x1f{0} минуттан кейін" + + "\x19{0} минут бұрын\x16{0} мин. кейін\x16{0} мин. бұрын\x0aқазір!{0} сек" + + "ундтан кейін\x1b{0} секунд бұрын\x16{0} сек. кейін\x16{0} сек. бұрын" + + "\x19уақыт белдеуі\x16уақ. белдеуі\x10{0} уақыты\x1b{0} жазғы уақыты%{0} " + + "стандартты уақыты>Дүниежүзілік үйлестірілген уақыт.Ұлыбритания жазғы уа" + + "қыты(Ирландия жазғы уақыты\x1fАуғанстан уақыты(Орталық Африка уақыты$Шы" + + "ғыс Африка уақыты*Оңтүстік Африка уақыты$Батыс Африка уақыты9Батыс Афри" + + "ка стандартты уақыты/Батыс Африка жазғы уақыты\x19Аляска уақыты.Аляска " + + "стандартты уақыты$Аляска жазғы уақыты\x1dАмазонка уақыты2Амазонка станд" + + "артты уақыты(Амазонка жазғы уақыты=Солтүстік Америка орталық уақытыRСол" + + "түстік Америка стандартты орталық уақытыHСолтүстік Америка жазғы орталы" + + "қ уақыты9Солтүстік Америка шығыс уақытыNСолтүстік Америка стандартты шы" + + "ғыс уақытыDСолтүстік Америка жазғы шығыс уақыты5Солтүстік Америка тау у" + + "ақытыJСолтүстік Америка стандартты тау уақыты@Солтүстік Америка жазғы т" + + "ау уақытыFСолтүстік Америка Тынық мұхиты уақыты[Солтүстік Америка станд" + + "артты Тынық мұхиты уақытыQСолтүстік Америка жазғы Тынық мұхиты уақыты" + + "\x15Апиа уақыты*Апиа стандартты уақыты Апиа жазғы уақыты&Сауд Арабиясы у" + + "ақыты;Сауд Арабиясы стандартты уақыты1Сауд Арабиясы жазғы уақыты\x1fАрг" + + "ентина уақыты4Аргентина стандартты уақыты*Аргентина жазғы уақыты*Батыс " + + "Аргентина уақыты?Батыс Аргентина стандартты уақыты5Батыс Аргентина жазғ" + + "ы уақыты\x1bАрмения уақыты0Армения стандартты уақыты&Армения жазғы уақы" + + "ты\x1fАтлантика уақыты4Атлантика стандартты уақыты*Атлантика жазғы уақы" + + "ты.Австралия орталық уақытыCАвстралия стандартты орталық уақыты9Австрал" + + "ия жазғы орталық уақыты9Австралия орталық-батыс уақытыNАвстралия станда" + + "ртты орталық-батыс уақытыDАвстралия жазғы орталық-батыс уақыты*Австрали" + + "я шығыс уақыты?Австралия стандартты шығыс уақыты5Австралия жазғы шығыс " + + "уақыты*Австралия батыс уақыты?Австралия стандартты батыс уақыты5Австрал" + + "ия жазғы батыс уақыты!Әзірбайжан уақыты6Әзірбайжан стандартты уақыты,Әз" + + "ірбайжан жазғы уақыты&Азор аралдары уақыты;Азор аралдары стандартты уақ" + + "ыты1Азор аралдары жазғы уақыты\x1fБангладеш уақыты4Бангладеш стандартты" + + " уақыты*Бангладеш жазғы уақыты\x17Бутан уақыты\x1bБоливия уақыты\x1dБраз" + + "илия уақыты2Бразилия стандартты уақыты(Бразилия жазғы уақыты.Бруней-Дар" + + "уссалам уақыты Кабо-Верде уақыты5Кабо-Верде стандартты уақыты+Кабо-Верд" + + "е жазғы уақыты0Чаморро стандартты уақыты\x17Чатем уақыты,Чатем стандарт" + + "ты уақыты\"Чатем жазғы уақыты\x15Чили уақыты*Чили стандартты уақыты Чил" + + "и жазғы уақыты\x17Қытай уақыты,Қытай стандартты уақыты\"Қытай жазғы уақ" + + "ыты\x1fЧойбалсан уақыты4Чойбалсан стандартты уақыты*Чойбалсан жазғы уақ" + + "ыты0Рождество аралының уақыты.Кокос аралдарының уақыты\x1dКолумбия уақы" + + "ты2Колумбия стандартты уақыты(Колумбия жазғы уақыты*Кук аралдарының уақ" + + "ыты?Кук аралдарының стандартты уақытыFКук аралдарының жартылай жазғы уа" + + "қыты\x15Куба уақыты*Куба стандартты уақыты Куба жазғы уақыты\x19Дейвис " + + "уақыты)Дюмон-д’Юрвиль уақыты\"Шығыс Тимор уақыты\"Пасха аралы уақыты7Па" + + "сха аралы стандартты уақыты-Пасха аралы жазғы уақыты\x1bЭквадор уақыты(" + + "Орталық Еуропа уақыты=Орталық Еуропа стандартты уақыты3Орталық Еуропа ж" + + "азғы уақыты$Шығыс Еуропа уақыты9Шығыс Еуропа стандартты уақыты/Шығыс Еу" + + "ропа жазғы уақыты-Қиыр Шығыс Еуропа уақыты$Батыс Еуропа уақыты9Батыс Еу" + + "ропа стандартты уақыты/Батыс Еуропа жазғы уақыты.Фолкленд аралдары уақы" + + "тыCФолкленд аралдары стандартты уақыты9Фолкленд аралдары жазғы уақыты" + + "\x17Фиджи уақыты,Фиджи стандартты уақыты\"Фиджи жазғы уақыты,Француз Гви" + + "анасы уақыты]Францияның оңтүстік аймағы және Антарктика уақыты\x1fГалап" + + "агос уақыты\x19Гамбье уақыты\x19Грузия уақыты.Грузия стандартты уақыты$" + + "Грузия жазғы уақыты2Гилберт аралдарының уақыты\x1bГринвич уақыты,Шығыс " + + "Гренландия уақытыAШығыс Гренландия стандартты уақыты7Шығыс Гренландия ж" + + "азғы уақыты,Батыс Гренландия уақытыAБатыс Гренландия стандартты уақыты7" + + "Батыс Гренландия жазғы уақыты(Парсы шығанағы уақыты\x19Гайана уақыты<Га" + + "вай және Алеут аралдары уақытыQГавай және Алеут аралдары стандартты уақ" + + "ытыGГавай және Алеут аралдары жазғы уақыты\x1bГонконг уақыты0Гонконг ст" + + "андартты уақыты&Гонконг жазғы уақыты\x15Ховд уақыты*Ховд стандартты уақ" + + "ыты Ховд жазғы уақыты2Үндістан стандартты уақыты\"Үнді мұхиты уақыты" + + "\x1fҮндіқытай уақыты.Орталық Индонезия уақыты*Шығыс Индонезия уақыты*Бат" + + "ыс Индонезия уақыты\x15Иран уақыты*Иран стандартты уақыты Иран жазғы уа" + + "қыты\x1bИркутск уақыты0Иркутск стандартты уақыты&Иркутск жазғы уақыты" + + "\x1bИзраиль уақыты0Израиль стандартты уақыты&Израиль жазғы уақыты\x1bЖап" + + "ония уақыты0Жапония стандартты уақыты&Жапония жазғы уақыты*Шығыс Қазақс" + + "тан уақыты*Батыс Қазақстан уақыты\x17Корея уақыты,Корея стандартты уақы" + + "ты\"Корея жазғы уақыты\x19Кусаие уақыты!Красноярск уақыты6Красноярск ст" + + "андартты уақыты,Красноярск жазғы уақыты!Қырғызстан уақыты&Лайн аралдары" + + " уақыты\x1cЛорд-Хау уақыты1Лорд-Хау стандартты уақыты'Лорд-Хау жазғы уақ" + + "ыты(Маккуори аралы уақыты\x1bМагадан уақыты0Магадан стандартты уақыты&М" + + "агадан жазғы уақыты\x1dМалайзия уақыты,Мальдив аралдары уақыты*Маркиз а" + + "ралдары уақыты,Маршалл аралдары уақыты\x1dМаврикий уақыты2Маврикий стан" + + "дартты уақыты(Маврикий жазғы уақыты\x19Моусон уақыты9Солтүстік-батыс Ме" + + "ксика уақытыNСолтүстік-батыс Мексика стандартты уақытыDСолтүстік-батыс " + + "Мексика жазғы уақыты1Мексика Тынық мұхит уақытыFМексика стандартты Тыны" + + "қ мұхит уақыты<Мексика жазғы Тынық мұхит уақыты\x1fҰланбатыр уақыты4Ұла" + + "нбатыр стандартты уақыты*Ұланбатыр жазғы уақыты\x19Мәскеу уақыты.Мәскеу" + + " стандартты уақыты$Мәскеу жазғы уақыты\x19Мьянма уақыты\x17Науру уақыты" + + "\x17Непал уақыты(Жаңа Каледония уақыты=Жаңа Каледония стандартты уақыты3" + + "Жаңа Каледония жазғы уақыты&Жаңа Зеландия уақыты;Жаңа Зеландия стандарт" + + "ты уақыты1Жаңа Зеландия жазғы уақыты%Ньюфаундленд уақыты:Ньюфаундленд с" + + "тандартты уақыты0Ньюфаундленд жазғы уақыты\x15Ниуэ уақыты&Норфолк аралы" + + " уақыты1Фернанду-ди-Норонья уақытыFФернанду-ди-Норонья стандартты уақыты" + + "<Фернанду-ди-Норонья жазғы уақыты\x1fНовосібір уақыты4Новосібір стандарт" + + "ты уақыты*Новосібір жазғы уақыты\x15Омбы уақыты*Омбы стандартты уақыты " + + "Омбы жазғы уақыты\x1dПәкістан уақыты2Пәкістан стандартты уақыты(Пәкіста" + + "н жазғы уақыты\x17Палау уақыты1Папуа – Жаңа Гвинея уақыты\x1dПарагвай у" + + "ақыты2Парагвай стандартты уақыты(Парагвай жазғы уақыты\x15Перу уақыты*П" + + "еру стандартты уақыты Перу жазғы уақыты.Филиппин аралдары уақытыCФилипп" + + "ин аралдары стандартты уақыты9Филиппин аралдары жазғы уақыты*Феникс ара" + + "лдары уақыты4Сен-Пьер және Микелон уақытыIСен-Пьер және Микелон стандар" + + "тты уақыты?Сен-Пьер және Микелон жазғы уақыты\x1bПиткэрн уақыты\x19Понп" + + "еи уақыты\x1bПхеньян уақыты\x1bРеюньон уақыты\x19Ротера уақыты\x1bСахал" + + "ин уақыты0Сахалин стандартты уақыты&Сахалин жазғы уақыты\x17Самоа уақыт" + + "ы,Самоа стандартты уақыты\"Самоа жазғы уақыты,Сейшель аралдары уақыты2С" + + "ингапур стандартты уақыты,Соломон аралдары уақыты,Оңтүстік Георгия уақы" + + "ты\x1bСуринам уақыты\x15Сёва уақыты\x17Таити уақыты\x19Тайбэй уақыты.Та" + + "йбэй стандартты уақыты$Тайбэй жазғы уақыты\x1fТәжікстан уақыты\x1bТокел" + + "ау уақыты\x17Тонга уақыты,Тонга стандартты уақыты\"Тонга жазғы уақыты" + + "\x15Трук уақыты%Түрікменстан уақыты:Түрікменстан стандартты уақыты0Түрік" + + "менстан жазғы уақыты\x19Тувалу уақыты\x1bУругвай уақыты0Уругвай стандар" + + "тты уақыты&Уругвай жазғы уақыты\x1fӨзбекстан уақыты4Өзбекстан стандартт" + + "ы уақыты*Өзбекстан жазғы уақыты\x1bВануату уақыты0Вануату стандартты уа" + + "қыты&Вануату жазғы уақыты\x1fВенесуэла уақыты#Владивосток уақыты8Владив" + + "осток стандартты уақыты.Владивосток жазғы уақыты\x1fВолгоград уақыты4Во" + + "лгоград стандартты уақыты*Волгоград жазғы уақыты\x19Восток уақыты Уэйк " + + "аралы уақыты/Уоллис және Футуна уақыты\x19Якутск уақыты.Якутск стандарт" + + "ты уақыты$Якутск жазғы уақыты%Екатеринбург уақыты:Екатеринбург стандарт" + + "ты уақыты0Екатеринбург жазғы уақыты" + +var bucket59 string = "" + // Size: 29953 bytes + "\x0ddd/MM y GGGGG\x05pamba\x05wanja\x12mbiyɔ mɛndoŋgɔ\x10Nyɔlɔmbɔŋgɔ\x0f" + + "Mɔnɔ ŋgbanja\x12Nyaŋgwɛ ŋgbanja\x08kuŋgwɛ\x03fɛ\x05njapi\x06nyukul\x0211" + + "\x0aɓulɓusɛ\x06sɔndi\x05lundi\x05mardi\x0cmɛrkɛrɛdi\x04yedi\x0cvaŋdɛrɛdi" + + "\x0dmɔnɔ sɔndi\x07dd/MM y\x04kwey\x04muka\x09nɛmɛnɔ\x07januari\x08februa" + + "ri\x06martsi\x06aprili\x04maji\x04juni\x04juli\x09augustusi\x0aseptember" + + "i\x08oktoberi\x09novemberi\x09decemberi\x06sabaat\x0eataasinngorneq\x0dm" + + "arlunngorneq\x0fpingasunngorneq\x0esisamanngorneq\x0ftallimanngorneq\x0e" + + "arfininngorneq\x02S1\x02S2\x02S3\x02S4\x18ukiup sisamararterutaa 1\x18uk" + + "iup sisamararterutaa 2\x18ukiup sisamararterutaa 3\x18ukiup sisamararter" + + "utaa 4\x04u.t.\x04u.k.\x12ulloqeqqata-tungaa\x14ulloqeqqata-kingorna\"Kr" + + "istusip inunngornerata siornagut$Kristusip inunngornerata kingornagut" + + "\x09Kr.in.si.\x0bKr.in.king.\x05Kr.s.\x05Kr.k.\x05ukioq\x0fkingulleq uki" + + "oq\x0bmanna ukioq\x0ctulleq ukioq\x0com {0} ukioq\x13for {0} ukioq siden" + + "\x07qaammat\x11kingulleq qaammat\x0dmanna qaammat\x0etulleq qaammat\x0eo" + + "m {0} qaammat\x15for {0} qaammat siden\x11sapaatip-akunnera\x1bkingulleq" + + " sapaatip-akunnera\x17manna sapaatip-akunnera\x18tulleq sapaatip-akunner" + + "a\x18om {0} sapaatip-akunnera\x1ffor {0} sapaatip-akunnera siden\x05ullo" + + "q\x0aippassaani\x08ippassaq\x06ullumi\x05aqagu\x08aqaguagu\x15om {0} ull" + + "oq unnuarlu\x1cfor {0} ulloq unnuarlu siden\x19sapaatip akunnerata ullui" + + "\"sapaat kingulleq sapaatip-akunnera\x1esapaat manna sapaatip-akunnera" + + "\x1fsapaat tulleq sapaatip-akunnera*ataasinngorneq kingulleq sapaatip-ak" + + "unnera&ataasinngorneq manna sapaatip-akunnera'ataasinngorneq tulleq sapa" + + "atip-akunnera)marlunngorneq kingulleq sapaatip-akunnera%marlunngorneq ma" + + "nna sapaatip-akunnera&marlunngorneq tulleq sapaatip-akunnera+pingasunngo" + + "rneq kingulleq sapaatip-akunnera'pingasunngorneq manna sapaatip-akunnera" + + "(pingasunngorneq tulleq sapaatip-akunnera*sisamanngorneq kingulleq sapaa" + + "tip-akunnera&sisamanngorneq manna sapaatip-akunnera'sisamanngorneq tulle" + + "q sapaatip-akunnera+tallimanngorneq kingulleq sapaatip-akunnera'talliman" + + "ngorneq manna sapaatip-akunnera(tallimanngorneq tulleq sapaatip-akunnera" + + "*arfininngorneq kingulleq sapaatip-akunnera&arfininngorneq manna sapaati" + + "p-akunnera'arfininngorneq tulleq sapaatip-akunnera\x0fpiffissaq ulloq" + + "\x16nalunaaquttap-akunnera\x1dom {0} nalunaaquttap-akunnera$for {0} nalu" + + "naaquttap-akunnera siden\x07minutsi\x0eom {0} minutsi\x15for {0} minutsi" + + " siden\x07sekundi\x0buisoriinnaq\x0eom {0} sekundi\x15for {0} sekundi si" + + "den\x18nalunaaqutaqaqatigiissut\x06Mulgul\x0cNg’atyaato\x08Kiptaamo\x09I" + + "wootkuut\x06Mamuut\x05Paagi\x0bNg’eiyeet\x07Rooptui\x06Bureet\x06Epeeso" + + "\x11Kipsuunde ne taai\x16Kipsuunde nebo aeng’\x03Kts\x03Kot\x03Koo\x03Ko" + + "s\x03Koa\x03Kom\x03Kol\x07Kotisap\x06Kotaai\x09Koaeng’\x07Kosomok\x0bKoa" + + "ng’wan\x06Komuut\x04Kolo\x0aRobo netai\x11Robo nebo aeng’\x0fRobo nebo s" + + "omok\x13Robo nebo ang’wan\x03krn\x05koosk\x06karoon\x0akooskoliny\x11Ama" + + "it kesich Jesu\x0fKokakesich Jesu\x06Ibinta\x06Kenyit\x06Arawet\x05Wikit" + + "\x05Betut\x04Amut\x05Raini\x05Mutai\x0dBetutab wikit\x05BE/KE\x04Sait" + + "\x07Minitit\x08Sekondit\x0cSaitab sonit\x08ព.ស.\x1d{1} នៅ\u200bម៉ោង {0}" + + "\x0cមករា\x12កុម្ភៈ\x0cមីនា\x0cមេសា\x0cឧសភា\x12មិថុនា\x12កក្កដា\x0cសីហា" + + "\x0fកញ្ញា\x0cតុលា\x18វិច្ឆិកា\x0cធ្នូ\x03ម\x03ក\x03ឧ\x03ស\x03ត\x03វ\x03ធ" + + "\x15អាទិត្យ\x0fច័ន្ទ\x12អង្គារ\x09ពុធ\x1eព្រហស្បតិ៍\x0fសុក្រ\x0cសៅរ៍\x03" + + "អ\x03ច\x03ព\x06អា\x06ពុ\x09ព្រ\x06សុ\x1dត្រីមាសទី 1\x1dត្រីមាសទី 2\x1d" + + "ត្រីមាសទី 3\x1dត្រីមាសទី 4\x18អធ្រាត្រ\x1bថ្ងៃត្រង់\x0fព្រឹក\x0cរសៀល" + + "\x0fល្ងាច\x09យប់\x1eថ្ងៃ\u200bត្រង់0មុន\u200bគ្រិស្តសករាជ$គ្រិស្តសករាជ" + + "\x12មុន គ.ស.\x08គ.ស.\x0fសករាជ\x0fឆ្នាំ\x1bឆ្នាំ\u200bមុន\x1bឆ្នាំ\u200bន" + + "េះ!ឆ្នាំ\u200bក្រោយ\x1c{0} ឆ្នាំទៀត\x1f{0} ឆ្នាំ\u200bមុន\x15ត្រីមាស!ត" + + "្រីមាស\u200bមុន!ត្រីមាស\u200bនេះ'ត្រីមាស\u200bក្រោយ\"{0} ត្រីមាសទៀត%{0" + + "} ត្រីមាស\u200bមុន\x06ខែ\x12ខែ\u200bមុន\x12ខែ\u200bនេះ\x18ខែ\u200bក្រោយ" + + "\x13{0} ខែទៀត\x13{0} ខែមុន\x15សប្ដាហ៍!សប្ដាហ៍\u200bមុន!សប្ដាហ៍\u200bនេះ'" + + "សប្ដាហ៍\u200bក្រោយ\"{0} សប្ដាហ៍ទៀត%{0} សប្ដាហ៍\u200bមុន\x1fសប្តាហ៍នៃ {" + + "0}!សប្ដាហ៍នៃខែ\x0cថ្ងៃ!ម្សិល\u200bម៉្ងៃ\x18ម្សិលមិញ\x18ថ្ងៃ\u200bនេះ\x1e" + + "ថ្ងៃ\u200bស្អែក\x1e\u200bខាន\u200bស្អែក\x19{0} ថ្ងៃទៀត\x1c{0} ថ្ងៃ" + + "\u200bមុន\x1bថ្ងៃស្អែក\x1f{0} ថ្ងៃ\u200b\u200bមុន!ថ្ងៃនៃឆ្នាំ-ថ្ងៃ\u200b" + + "នៃ\u200bសប្ដាហ៍-ថ្ងៃសប្ដាហ៍នៃខែ0ថ្ងៃ\u200bអាទិត្យ\u200bមុន0ថ្ងៃ\u200bអ" + + "ាទិត្យ\u200bនេះ6ថ្ងៃ\u200bអាទិត្យ\u200bក្រោយDថ្ងៃអាទិត្យ {0} សប្តាហ៍ទៀ" + + "តDថ្ងៃអាទិត្យ {0} សប្តាហ៍មុនGក្នុងពេល {0} ថ្ងៃអាទិត្យទៀត>កាលពី {0} ថ្ង" + + "ៃអាទិត្យមុន!ថ្ងៃចន្ទមុន!ថ្ងៃចន្ទនេះ'ថ្ងៃចន្ទក្រោយ>ក្នុងពេល {0} ថ្ងៃចន្" + + "ទទៀត5កាលពី {0} ថ្ងៃចន្ទមុន-ថ្ងៃ\u200bអង្គារ\u200bមុន-ថ្ងៃ\u200bអង្គារ" + + "\u200bនេះ3ថ្ងៃ\u200bអង្គារ\u200bក្រោយDក្នុងពេល {0} ថ្ងៃអង្គារទៀត;កាលពី {" + + "0} ថ្ងៃអង្គារមុន$ថ្ងៃ\u200bពុធ\u200bមុន$ថ្ងៃ\u200bពុធ\u200bនេះ*ថ្ងៃ" + + "\u200bពុធ\u200bក្រោយ;ក្នុងពេល {0} ថ្ងៃពុធទៀត2កាលពី {0} ថ្ងៃពុធមុន9ថ្ងៃ" + + "\u200bព្រហស្បតិ៍\u200bមុន9ថ្ងៃ\u200bព្រហស្បតិ៍\u200bនេះ?ថ្ងៃ\u200bព្រហស្" + + "បតិ៍\u200bក្រោយPក្នុងពេល {0} ថ្ងៃព្រហស្បតិ៍ទៀតGកាលពី {0} ថ្ងៃព្រហស្បតិ" + + "៍មុន*ថ្ងៃ\u200bសុក្រ\u200bមុន*ថ្ងៃ\u200bសុក្រ\u200bនេះ0ថ្ងៃ\u200bសុក្រ" + + "\u200bក្រោយAក្នុងពេល {0} ថ្ងៃសុក្រទៀត8កាលពី {0} ថ្ងៃសុក្រមុន'ថ្ងៃ\u200bស" + + "ៅរ៍\u200bមុន'ថ្ងៃ\u200bសៅរ៍\u200bនេះ-ថ្ងៃ\u200bសៅរ៍\u200bក្រោយ?ក្នុងពេ" + + "ល {0} ថ្ងៃសៅរ៍ ទៀត6កាលពី {0} ថ្ងៃសៅរ៍ មុន\x1fព្រឹក/ល្ងាច\x0cម៉ោង\x15ម៉" + + "ោងនេះ8ក្នុង\u200bរយៈ\u200bពេល {0} ម៉ោង\x1c{0} ម៉ោង\u200bមុន\x19{0} ម៉ោ" + + "ងទៀត\x0cនាទី\x15នាទីនេះ\x19{0} នាទីទៀត\x1c{0} នាទី\u200bមុន\x1f{0} នាទ" + + "ី\u200b\u200bមុន\x12វិនាទី\x0cឥឡូវ\x1f{0} វិនាទីទៀត\"{0} វិនាទី\u200bម" + + "ុន\x1bល្វែងម៉ោង\x1cម៉ោង\u200bនៅ\u200b {0}7ម៉ោង\u200bពេល\u200bថ្ងៃ" + + "\u200bនៅ\u200b {0}7ម៉ោង\u200bស្តង់ដារ\u200bនៅ \u200b{0}Bម៉ោងសកលដែលមានការ" + + "សម្រួលfម៉ោង\u200bរដូវ\u200bក្ដៅ\u200b\u200bនៅ\u200bចក្រភព\u200bអង់គ្លេ" + + "សKម៉ោង\u200bរដូវ\u200bក្ដៅ\u200bនៅ\u200bអៀរឡង់\u200bHម៉ោង\u200bនៅ" + + "\u200bអាហ្វហ្គានីស្ថានHម៉ោង\u200bនៅ\u200bអាហ្វ្រិក\u200bកណ្ដាលKម៉ោង" + + "\u200bនៅ\u200bអាហ្វ្រិក\u200bខាង\u200bកើតQម៉ោង\u200bនៅ\u200bអាហ្វ្រិក" + + "\u200bខាង\u200bត្បូងKម៉ោង\u200bនៅ\u200bអាហ្វ្រិក\u200bខាង\u200bលិចfម៉ោង" + + "\u200bស្តង់ដារ\u200bនៅ\u200bអាហ្វ្រិក\u200bខាង\u200bលិចuម៉ោងនៅ\u200bអាហ្" + + "វ្រិក\u200b\u200b\u200bខាងលិច\u200b\u200bនារដូវ\u200bក្ដៅ\u200b0ម៉ោង" + + "\u200bនៅ\u200bអាឡាស្កាKម៉ោង\u200bស្តង់ដារ\u200bនៅ\u200bអាឡាស្កាNម៉ោង" + + "\u200bពេល\u200bថ្ងៃ\u200bនៅ\u200b\u200bអាឡាស្កា6ម៉ោង\u200bនៅ\u200bអាម៉ាហ" + + "្សូនNម៉ោងស្តង់ដារ\u200bនៅ\u200bអាម៉ាហ្សូនTម៉ោង\u200bនៅ\u200bអាម៉ាហ្សូន" + + "នារដូវក្តៅrម៉ោង\u200b\u200bនៅ\u200bទ្វីបអាមេរិក\u200bខាង\u200bជើងភាគកណ" + + "្តាល\x8aម៉ោង\u200b\u200bស្តង់ដារនៅ\u200bទ្វីបអាមេរិក\u200bខាង\u200bជើង" + + "ភាគកណ្តាល\x87ម៉ោង\u200b\u200bពេលថ្ងៃនៅ\u200bទ្វីបអាមេរិក\u200bខាង" + + "\u200bជើងភាគកណ្តាល`ម៉ោងនៅទ្វីបអាមរិកខាងជើងភាគខាងកើត{ម៉ោងស្តង់ដារនៅទ្វីបអ" + + "ាមេរិកខាងជើងភាគខាងកើតxម៉ោងពេលថ្ងៃនៅទ្វីបអាមេរិកខាងជើងភាគខាងកើត{ម៉ោង" + + "\u200bនៅតំបន់ភ្នំនៃទ្វីប\u200bអាមេរិក\u200b\u200b\u200bខាង\u200bជើង\x93ម" + + "៉ោងស្តង់ដារ\u200bនៅតំបន់ភ្នំនៃទ្វីប\u200bអាមេរិក\u200b\u200b\u200bខាង" + + "\u200bជើង\x90ម៉ោង\u200bពេលថ្ងៃនៅតំបន់ភ្នំនៃទ្វីប\u200bអាមេរិក\u200b" + + "\u200b\u200bខាង\u200bជើងoម៉ោង\u200b\u200bនៅទ្វីប\u200bអាមរិក\u200bខាង" + + "\u200bជើងភាគខាងលិច\x8aម៉ោងស្តង់ដារ\u200b\u200b\u200bនៅទ្វីប\u200bអាមរិក" + + "\u200bខាង\u200bជើងភាគខាងលិច\x84ម៉ោង\u200b\u200bពេលថ្ងៃនៅទ្វីប\u200bអាមរិ" + + "ក\u200bខាង\u200bជើងភាគខាងលិច*ម៉ោង\u200bនៅ\u200bអាប្យាBម៉ោង\u200bស្តង់ដ" + + "ា\u200bនៅ\u200bអាប្យាEម៉ោង\u200bពេល\u200bថ្ងៃ\u200bនៅ\u200bអាប្យា-ម៉ោង" + + "\u200bនៅ\u200bអារ៉ាប់Hម៉ោង\u200bស្តង់ដារ\u200bនៅ\u200bអារ៉ាប់Hម៉ោង\u200b" + + "ពេល\u200bថ្ងៃ\u200bនៅ\u200bអារ៉ាប់6ម៉ោង\u200bនៅ\u200bអាហ្សង់ទីនNម៉ោងស្" + + "តង់ដារ\u200bនៅ\u200bអាហ្សង់ទីនTម៉ោង\u200bនៅ\u200bអាហ្សង់ទីននារដូវក្តៅQ" + + "ម៉ោង\u200bនៅ\u200bអាហ្សង់ទីនភាគខាងលិចiម៉ោងស្តង់ដារ\u200bនៅ\u200bអាហ្សង" + + "់ទីនភាគខាងលិចoម៉ោង\u200bនៅ\u200bអាហ្សង់ទីនភាគខាងលិចនារដូវក្តៅ*ម៉ោង" + + "\u200bនៅ\u200bអាមេនីEម៉ោង\u200bស្ដង់ដារ\u200bនៅ\u200bអាមេនីNម៉ោង\u200bនៅ" + + "\u200bអាមេនីនារដូវ\u200bក្ដៅ\u200b6ម៉ោង\u200bនៅ\u200bអាត្លង់ទិកQម៉ោង" + + "\u200bស្តង់ដារ\u200bនៅ\u200bអាត្លង់ទិកQម៉ោង\u200bពេល\u200bថ្ងៃ\u200bនៅ" + + "\u200bអាត្លង់ទិកHម៉ោង\u200bនៅអូស្ត្រាលី\u200bកណ្ដាលfម៉ោង\u200bស្តង់ដារ" + + "\u200bនៅ\u200bអូស្ត្រាលី\u200bកណ្ដាលlម៉ោង\u200bពេលថ្ងៃ\u200b\u200b\u200b" + + "\u200bនៅ\u200bអូស្ត្រាលី\u200bកណ្ដាល~ម៉ោង\u200bនៅ\u200b\u200b\u200bភាគ" + + "\u200bខាង\u200bលិច\u200bនៅ\u200bអូស្ត្រាលី\u200bកណ្ដាល\x93ម៉ោង\u200bស្តង" + + "់ដារ\u200bនៅ\u200bភាគ\u200bខាង\u200bលិច\u200bនៃ\u200bអូស្ត្រាលី\u200bក" + + "ណ្ដាល\x96ម៉ោង\u200bពេល\u200bថ្ងៃ\u200bនៅ\u200b\u200bភាគ\u200bខាង\u200b" + + "លិច\u200bនៃ\u200bអូស្ត្រាលី\u200bកណ្ដាលNម៉ោង\u200bនៅ\u200bអូស្ត្រាលី" + + "\u200bខាង\u200bកើតiម៉ោង\u200bស្តង់ដារ\u200bនៅ\u200bអូស្ត្រាលី\u200bខាង" + + "\u200bកើតiម៉ោង\u200bពេល\u200bថ្ងៃ\u200bនៅ\u200bអូស្ត្រាលី\u200bខាង\u200b" + + "កើតTម៉ោង\u200b\u200b\u200bនៅ\u200bអូស្ត្រាលី\u200bខាង\u200bលិចlម៉ោង" + + "\u200b\u200bស្តង់ដារ\u200bនៅ\u200bអូស្ត្រាលី\u200bខាង\u200bលិចiម៉ោង" + + "\u200bពេល\u200bថ្ងៃ\u200bនៅ\u200bអូស្ត្រាលី\u200bខាង\u200bលិច<ម៉ោង\u200b" + + "នៅ\u200bអាស៊ែបៃហ្សង់Wម៉ោង\u200bស្តង់ដារ\u200bនៅ\u200bអាស៊ែបៃហ្សង់`ម៉ោង" + + "\u200b\u200bនៅ\u200bអាស៊ែបៃហ្សង់នារដូវ\u200bក្ដៅ*ម៉ោង\u200bនៅ\u200bអេហ្ស" + + "សEម៉ោង\u200bស្តង់ដារ\u200bនៅ\u200bអេហ្សសNម៉ោង\u200b\u200bនៅ\u200bអេហ្ស" + + "សនារដូវ\u200bក្ដៅ6ម៉ោង\u200bនៅ\u200bបង់ក្លាដែសQម៉ោង\u200bស្ដង់ដារ" + + "\u200bនៅ\u200bបង់ក្លាដែសZម៉ោង\u200b\u200bនៅ\u200bបង់ក្លាដែសនារដូវ\u200bក" + + "្ដៅ$ម៉ោងនៅប៊ូតង់*ម៉ោង\u200bនៅ\u200bបូលីវី<ម៉ោង\u200bនៅ\u200bប្រាស៊ីលីយ" + + "៉ាWម៉ោង\u200bស្តង់ដារ\u200bនៅ\u200bប្រាស៊ីលីយ៉ាcម៉ោង\u200bនៅ\u200bប្រា" + + "ស៊ីលីយ៉ានា\u200b\u200bរដូវ\u200bក្ដៅBម៉ោងនៅព្រុយណេដារូសាឡឹម-ម៉ោង\u200b" + + "នៅ\u200bកាប់វែរHម៉ោង\u200bស្តង់ដារ\u200bនៅ\u200bកាប់វែរQម៉ោង\u200b" + + "\u200bនៅ\u200bកាប់វែរនារដូវ\u200bក្ដៅKម៉ោង\u200bស្តង់ដារនៅ\u200bចាំម៉ូរ៉" + + "ូ'ម៉ោង\u200bនៅ\u200bចាថាំBម៉ោង\u200bស្តង់ដារ\u200bនៅ\u200bចាថាំBម៉ោង" + + "\u200bពេល\u200bថ្ងៃ\u200bនៅ\u200bចាថាំ!ម៉ោងនៅស៊ីលី9ម៉ោងស្តង់ដារនៅស៊ីលី?ម" + + "៉ោងនៅស៊ីលីនារដូវក្តៅ!ម៉ោង\u200bនៅ\u200bចិន<ម៉ោង\u200bស្តង់ដារ\u200bនៅ" + + "\u200bចិន<ម៉ោង\u200bពេល\u200bថ្ងៃ\u200bនៅ\u200bចិន3ម៉ោង\u200bនៅ\u200bឆូប" + + "ាល់សានNម៉ោង\u200bស្តង់ដារ\u200bនៅ\u200bឆូបាល់សានWម៉ោង\u200bនៅ\u200bឆូប" + + "ាល់សាននារដូវ\u200bក្ដៅ\u200b?ម៉ោង\u200bនៅ\u200bកោះ\u200bគ្រីស្មាសEម៉ោង" + + "\u200bនៅ\u200bប្រជុំកោះ\u200bកូកូស0ម៉ោង\u200bនៅ\u200bកូឡុំប៊ីKម៉ោង\u200b" + + "ស្តង់ដារ\u200bនៅ\u200bកូឡុំប៊ីTម៉ោង\u200bនៅ\u200bកូឡុំប៊ីនា\u200bរដូវ" + + "\u200bក្ដៅ?ម៉ោង\u200bនៅប្រជុំ\u200bកោះ\u200bខូកZម៉ោង\u200bស្តង់ដារ\u200b" + + "នៅ\u200bប្រជុំកោះ\u200bខូក\x87ម៉ោង\u200bនៅប្រជុំ\u200bកោះ\u200bខូកនាពា" + + "ក់កណ្ដាល\u200bរដូវ\u200b\u200b\u200bក្ដៅ'ម៉ោង\u200bនៅ\u200bគុយបាBម៉ោង" + + "\u200bស្តង់ដារ\u200bនៅ\u200bគុយបាBម៉ោង\u200bពេល\u200bថ្ងៃ\u200bនៅ\u200bគ" + + "ុយបា'ម៉ោង\u200bនៅ\u200bដាវីសHម៉ោង\u200bនៅ\u200bឌុយម៉ុងដឺអ៊ុយវីលBម៉ោង" + + "\u200bនៅ\u200b\u200bទីម័រ\u200bខាង\u200bកើត3ម៉ោងនៅកោះអ៊ីស្ទ័រKម៉ោងស្តង់ដ" + + "ារនៅកោះអ៊ីស្ទ័រQម៉ោងនៅកោះអ៊ីស្ទ័រនារដូវក្តៅ3ម៉ោង\u200bនៅ\u200bអេក្វាទ័" + + "រ?ម៉ោង\u200bនៅ\u200bអឺរ៉ុប\u200bកណ្ដាលZម៉ោង\u200bស្តង់ដារ\u200bនៅ" + + "\u200bអឺរ៉ុប\u200bកណ្ដាលcម៉ោង\u200bនៅ\u200bអឺរ៉ុប\u200bកណ្ដាលនា\u200bរដូ" + + "វ\u200bក្ដៅHម៉ោង\u200bនៅ\u200bអឺរ៉ុប\u200b\u200bខាង\u200bកើត\u200bfម៉ោ" + + "ង\u200bស្តង់ដារ\u200b\u200bនៅ\u200bអឺរ៉ុប\u200b\u200bខាង\u200bកើត" + + "\u200blម៉ោង\u200bនៅ\u200bអឺរ៉ុប\u200b\u200bខាង\u200bកើត\u200bនា\u200bរដូ" + + "វ\u200bក្ដៅ]ម៉ោង\u200bនៅ\u200bចុងបូព៌ានៃទ្វីប\u200bអឺរ៉ុប\u200bBម៉ោង" + + "\u200bនៅ\u200bអឺរ៉ុប\u200bខាង\u200bលិច]ម៉ោង\u200bស្តង់ដារ\u200bនៅ\u200bអ" + + "ឺរ៉ុប\u200bខាង\u200bលិចfម៉ោង\u200bនៅ\u200bអឺរ៉ុប\u200bខាង\u200bលិចនារដ" + + "ូវ\u200bក្ដៅ\u200bNម៉ោង\u200bនៅ\u200bប្រជុំកោះ\u200bហ្វក់ឡែនiម៉ោង" + + "\u200bស្តង់ដារ\u200bនៅប្រជុំ\u200bកោះ\u200bហ្វក់ឡែនrម៉ោង\u200b\u200bនៅប្" + + "រជុំ\u200bកោះ\u200bហ្វក់ឡែននារដូវ\u200bក្ដៅ*ម៉ោង\u200bនៅ\u200bហ្វីជីEម" + + "៉ោង\u200bស្តង់ដារ\u200bនៅ\u200bហ្វីជីTម៉ោង\u200bនៅ\u200b\u200bហ្វីជីនា" + + "\u200b\u200bរដូវ\u200bក្ដៅEម៉ោង\u200bនៅ\u200bហ្គីយ៉ាន\u200bបារាំងjម៉ោងនៅ" + + "បារាំងខាងត្បូង និងនៅអង់តាំងទិក6ម៉ោង\u200bនៅ\u200bកាឡាប៉ាកូស'ម៉ោង\u200b" + + "នៅ\u200bកាំបៀ3ម៉ោង\u200bនៅ\u200bហ្សកហ្ស៊ីNម៉ោង\u200bស្តង់ដារ\u200bនៅ" + + "\u200bហ្សកហ្ស៊ីZម៉ោង\u200bនៅ\u200bហ្សកហ្ស៊ីនា\u200b\u200bរដូវ\u200bក្ដៅ6" + + "ម៉ោង\u200bនៅ\u200bកោះ\u200bកីប៊ឺត*ម៉ោងនៅគ្រីនវិចQម៉ោង\u200b\u200bនៅ" + + "\u200bហ្គ្រីនលែន\u200bខាង\u200bកើតrម៉ោង\u200b\u200b\u200bស្តង់ដារ\u200bន" + + "ៅ\u200b\u200bហ្គ្រីនលែន\u200bខាង\u200bកើតoម៉ោង\u200bនៅ\u200bហ្គ្រីនលែន" + + "ខាង\u200bកើតនា\u200bរដូវ\u200bក្ដៅBម៉ោងនៅហ្គ្រីនលែនខាងលិចZម៉ោងស្តង់ដារ" + + "នៅហ្គ្រីនលែនខាងលិច`ម៉ោងនៅហ្គ្រីនលែនខាងលិចនារដូវក្តៅ<ម៉ោង\u200bស្តង់ដា" + + "\u200bនៅ\u200bកាល់0ម៉ោង\u200bនៅ\u200bហ្គីយ៉ានIម៉ោង\u200b\u200bនៅ\u200bហា" + + "វៃ-អាល់ដ្យូសិនdម៉ោង\u200bស្តង់ដារ\u200b\u200bនៅ\u200bហាវៃ-អាល់ដ្យូសិនa" + + "ម៉ោង\u200bពេល\u200bថ្ងៃ\u200bនៅ\u200bហាវៃ-អាល់ដ្យូសិន*ម៉ោង\u200bនៅ" + + "\u200bហុងកុងEម៉ោង\u200bស្តង់ដារ\u200bនៅ\u200bហុងកុងNម៉ោងនៅ\u200bហុងកុងនា" + + "\u200bរដូវ\u200bក្ដៅ\u200b!ម៉ោង\u200bនៅ\u200bហូវ9ម៉ោង\u200bស្តង់ដារ" + + "\u200bនៅហូវEម៉ោងនៅ\u200bហូវនា\u200bរដូវ\u200bក្ដៅ\u200b?ម៉ោង\u200bស្តង់ដ" + + "ារនៅ\u200bឥណ្ឌាEម៉ោង\u200bនៅ\u200bមហាសមុទ្រ\u200bឥណ្ឌា0ម៉ោង\u200bនៅ" + + "\u200bឥណ្ឌូចិនQម៉ោង\u200bនៅ\u200bឥណ្ឌូណេស៊ី\u200b\u200b\u200bកណ្ដាលQម៉ោង" + + "\u200bនៅ\u200bឥណ្ឌូណេស៊ី\u200b\u200bខាង\u200bកើតQម៉ោង\u200bនៅ\u200bឥណ្ឌូ" + + "ណេស៊ី\u200b\u200bខាង\u200bលិច-ម៉ោង\u200bនៅ\u200bអ៊ីរ៉ង់Hម៉ោង\u200bស្តង" + + "់ដារ\u200bនៅ\u200bអ៊ីរ៉ង់Hម៉ោង\u200bពេល\u200bថ្ងៃ\u200bនៅ\u200bអ៊ីរ៉ង់" + + "3ម៉ោងនៅអៀរគុតស្កិ៍Kម៉ោងស្តង់ដារនៅអៀរគុតស្កិ៍Qម៉ោងនៅអៀរគុតស្កិ៍នារដូវក្តៅ" + + "6ម៉ោង\u200bនៅ\u200bអ៊ីស្រាអែលQម៉ោង\u200bស្តង់ដារ\u200bនៅ\u200bអ៊ីស្រាអែល" + + "Qម៉ោង\u200bពេល\u200bថ្ងៃ\u200bនៅ\u200bអ៊ីស្រាអែល'ម៉ោង\u200bនៅ\u200bជប៉ុន" + + "Bម៉ោង\u200bស្តង់ដារ\u200bនៅ\u200bជប៉ុន?ម៉ោង\u200bពេល\u200bថ្ងៃ\u200bនៅជប" + + "៉ុនQម៉ោង\u200bកាហ្សាក់ស្ថាន\u200b\u200bខាង\u200bកើត]ម៉ោង\u200bនៅ\u200b" + + "កាហ្សាក់ស្ថាន\u200bខាង\u200b\u200b\u200bលិច'ម៉ោង\u200bនៅ\u200bកូរ៉េBម៉" + + "ោង\u200bស្តង់ដារ\u200bនៅ\u200bកូរ៉េBម៉ោង\u200bពេល\u200bថ្ងៃ\u200bនៅ" + + "\u200bកូរ៉េ*ម៉ោង\u200bនៅ\u200bកូស្រៃ6ម៉ោង\u200bនៅ\u200bក្រាណូយ៉ាសQម៉ោង" + + "\u200bស្តង់ដារ\u200bនៅ\u200bក្រាណូយ៉ាសZម៉ោង\u200bនៅ\u200bក្រាណូយ៉ាសនា" + + "\u200bរដូវ\u200bក្ដៅ?ម៉ោងនៅកៀហ្ស៊ីស៊ីស្ថាន-ម៉ោង\u200bនៅ\u200bកោះ\u200bឡា" + + "ញ$ម៉ោង\u200bនៅ\u200bឡតហៅBម៉ោង\u200bស្តង់ដារ\u200bនៅ\u200bឡត\u200bហៅ?ម៉" + + "ោង\u200bពេល\u200bថ្ងៃ\u200bនៅ\u200bឡតហៅ<ម៉ោង\u200bនៅ\u200bកោះ\u200bម៉ា" + + "កគែរី6ម៉ោង\u200bនៅ\u200bម៉ាហ្កាដានQម៉ោង\u200bស្តង់ដារ\u200bនៅ\u200bម៉ា" + + "ហ្កាដានZម៉ោង\u200bនៅ\u200bម៉ាហ្កាដាន\u200bនារដូវ\u200bក្ដៅ0ម៉ោង\u200bន" + + "ៅ\u200bម៉ាឡេស៊ី0ម៉ោង\u200bនៅ\u200bម៉ាល់ឌីវ?ម៉ោង\u200bនៅ\u200bកោះ\u200b" + + "ម៉ាគឺសាស់*ម៉ោង\u200bនៅ\u200bម៉ាសាល*ម៉ោង\u200bនៅ\u200bម៉ូរីសEម៉ោង\u200b" + + "ស្តង់ដារ\u200bនៅ\u200bម៉ូរីសHម៉ោង\u200b\u200bរដូវ\u200bក្ដៅនៅ\u200bម៉ូ" + + "រីស0ម៉ោង\u200bនៅ\u200bម៉ៅ\u200bសាន់Kម៉ោង\u200bនៅ\u200bម៉ិកស៊ិកភាគពាយព្" + + "យcម៉ោង\u200bស្តង់ដារនៅ\u200bម៉ិកស៊ិកភាគពាយព្យfម៉ោង\u200bពេល\u200bថ្ងៃ" + + "\u200bនៅ\u200bម៉ិកស៊ិកភាគពាយព្យTម៉ោង\u200bនៅ\u200bប៉ាស៊ីហ្វិក\u200bម៉ិកស" + + "៊ិកlម៉ោង\u200bស្តង់ដា\u200bនៅ\u200bប៉ាស៊ីហ្វិក\u200bម៉ិកស៊ិកoម៉ោង" + + "\u200bពេល\u200bថ្ងៃ\u200bនៅ\u200bប៉ាស៊ីហ្វិក\u200bម៉ិកស៊ិក9ម៉ោង\u200bនៅ" + + "\u200bអ៊ូឡាន\u200bបាទូTម៉ោង\u200bស្តង់ដារ\u200bនៅ\u200bអ៊ូឡាន\u200bបាទូ]" + + "ម៉ោងនៅ\u200bអ៊ូឡាន\u200bបាទូនា\u200bរដូវ\u200bក្ដៅ\u200b*ម៉ោង\u200bនៅ" + + "\u200bមូស្គូEម៉ោង\u200bស្តង់ដារ\u200bនៅ\u200bមូស្គូNម៉ោង\u200bនៅ\u200bមូ" + + "ស្គូ\u200bនារដូវ\u200bក្ដៅ6ម៉ោង\u200bនៅ\u200bមីយ៉ាន់ម៉ា$ម៉ោង\u200bនៅ" + + "\u200bណូរូ'ម៉ោងនៅនេប៉ាល់?ម៉ោង\u200bនៅណូវ៉ែលកាឡេដូនៀWម៉ោងស្តង់ដារ\u200bនៅ" + + "ណូវ៉ែលកាឡេដូនៀ]ម៉ោង\u200bនៅណូវ៉ែលកាឡេដូនៀនារដូវក្តៅ6ម៉ោង\u200bនៅ\u200b" + + "នូវែលសេឡង់Qម៉ោង\u200bស្តង់ដារ\u200bនៅ\u200bនូវែលសេឡង់Qម៉ោង\u200bពេល" + + "\u200bថ្ងៃ\u200bនៅ\u200bនូវែលសេឡង់9ម៉ោង\u200b\u200bនៅញូវហ្វោនឡែនZម៉ោង" + + "\u200b\u200bស្តង់ដារ\u200b\u200bនៅ\u200bញូវហ្វោនឡែនQម៉ោង\u200bពេលថ្ងៃ" + + "\u200bនៅ\u200bញូវហ្វោនឡែន$ម៉ោងនៅ\u200bនីវ៉េ<ម៉ោង\u200bនៅ\u200bកោះ\u200bន" + + "័រហ្វក់Wម៉ោង\u200bនៅហ្វ៊ែណាន់ដូ\u200bដឺណូរ៉ូញ៉ាoម៉ោង\u200bស្តង់ដារនៅហ្" + + "វ៊ែណាន់ដូ\u200bដឺណូរ៉ូញ៉ាuម៉ោង\u200bនៅហ្វ៊ែណាន់ដូ\u200bដឺណូរ៉ូញ៉ានារដូ" + + "វក្តៅ<ម៉ោង\u200bនៅ\u200bណូវ៉ូស៊ីប៊ីកWម៉ោង\u200bស្តង់ដារ\u200bនៅ\u200bណ" + + "ូវ៉ូស៊ីប៊ីក`ម៉ោង\u200bនៅ\u200bណូវ៉ូស៊ីប៊ីកនា\u200bរដូវ\u200bក្ដៅ!ម៉ោង" + + "\u200bនៅ\u200bអូម<ម៉ោង\u200bស្តង់ដារ\u200bនៅ\u200bអូមEម៉ោង\u200bនៅ\u200b" + + "អូមនា\u200bរដូវ\u200bក្ដៅ6ម៉ោង\u200bនៅ\u200bប៉ាគីស្ថានQម៉ោង\u200bស្ដង់" + + "ដារ\u200bនៅ\u200bប៉ាគីស្ថានZម៉ោងនៅ\u200bប៉ាគីស្ថាននា\u200bរដូវ\u200bក្" + + "ដៅ\u200b$ម៉ោង\u200bនៅ\u200bផាឡៅUម៉ោង\u200bនៅប៉ាពូអាស៊ី នូវែលហ្គីណេ9ម៉ោ" + + "ង\u200bនៅ\u200bប៉ារ៉ាហ្គាយTម៉ោង\u200bស្តង់ដារ\u200bនៅ\u200bប៉ារ៉ាហ្គាយ" + + "Zម៉ោង\u200bនៅប៉ារ៉ាហ្គាយនា\u200bរដូវ\u200bក្ដៅ'ម៉ោង\u200bនៅ\u200bប៉េរូBម" + + "៉ោង\u200bស្តង់ដារ\u200bនៅ\u200bប៉េរូKម៉ោង\u200b\u200bនៅ\u200bប៉េរូនារដ" + + "ូវ\u200bក្ដៅ3ម៉ោង\u200bនៅ\u200bហ្វីលីពីនNម៉ោង\u200bស្តង់ដារ\u200bនៅ" + + "\u200bហ្វីលីពីនZម៉ោង\u200b\u200bនៅ\u200bហ្វីលីពីននា\u200bរដូវ\u200bក្ដៅ3" + + "ម៉ោង\u200bនៅ\u200bកោះ\u200bផូនីក[ម៉ោង\u200b\u200b\u200bនៅសង់\u200bព្យែ" + + "រ និង\u200bមីគុយឡុងpម៉ោង\u200bស្តង់ដារ\u200bនៅសង់\u200bព្យែរ និង\u200b" + + "មីគុយឡុងpម៉ោង\u200bពេល\u200bថ្ងៃ\u200bនៅសង់\u200bព្យែរ និង\u200bមីគុយឡ" + + "ុង'ម៉ោង\u200bនៅ\u200bភីឃឺន-ម៉ោង\u200bនៅ\u200bប៉ូណាប់-ម៉ោងនៅព្យុងយ៉ាង-ម" + + "៉ោងនៅរេអ៊ុយ៉ុង0ម៉ោង\u200bនៅ\u200bរ៉ូធឺរ៉ា3ម៉ោង\u200bនៅ\u200bសាក់ខាលីនN" + + "ម៉ោង\u200bស្តង់ដារ\u200bនៅ\u200bសាក់ខាលីនWម៉ោង\u200bនៅ\u200bសាក់ខាលីនន" + + "ា\u200bរដូវ\u200bក្ដៅ'ម៉ោង\u200bនៅ\u200bសាម័រ?ម៉ោង\u200bស្តង់ដារនៅ" + + "\u200bសាម័រEម៉ោង\u200bនៅ\u200bសាម័រនារដូវក្តៅ-ម៉ោង\u200bនៅ\u200bសីស្ហែល3" + + "ម៉ោង\u200bនៅ\u200bសិង្ហបូរី<ម៉ោង\u200bនៅ\u200bកោះ\u200bសូឡូម៉ុន?ម៉ោង" + + "\u200bនៅ\u200bកោះ\u200bហ្សកហ្ស៊ី-ម៉ោង\u200bនៅ\u200bសូរីណាម0ម៉ោង\u200bនៅ" + + "\u200bស៊ីអូវ៉ា*ម៉ោង\u200bនៅ\u200bតាហិទី'ម៉ោង\u200bនៅ\u200bតៃប៉ិBម៉ោង" + + "\u200bស្តង់ដារ\u200bនៅ\u200bតៃប៉ិBម៉ោង\u200bពេល\u200bថ្ងៃ\u200bនៅ\u200bត" + + "ៃប៉ិ3ម៉ោងនៅតាជីគីស្ថាន*ម៉ោង\u200bនៅ\u200bតូខេឡៅ-ម៉ោង\u200bនៅ\u200bតុងហ" + + "្គាKម៉ោង\u200bស្តង់ដារ\u200b\u200bនៅ\u200bតុងហ្គាQម៉ោង\u200b\u200bនៅ" + + "\u200bតុងហ្គានារដូវ\u200bក្ដៅ'ម៉ោង\u200bនៅ\u200bចូអុក?ម៉ោង\u200bនៅ\u200b" + + "តួកម៉េនីស្ថានWម៉ោង\u200bស្តង់ដារ\u200bនៅតួកម៉េនីស្ថាន`ម៉ោង\u200bរដូវ" + + "\u200bក្ដៅ\u200bនៅ\u200bតួកម៉េនីស្ថាន\u200b0ម៉ោង\u200bនៅ\u200bទុយវ៉ាលូ9ម" + + "៉ោង\u200bនៅ\u200bអ៊ុយរូហ្គាយTម៉ោង\u200bស្តង់ដារ\u200bនៅ\u200bអ៊ុយរូហ្គ" + + "ាយ`ម៉ោង\u200bនៅ\u200bអ៊ុយរូហ្គាយនា\u200b\u200bរដូវ\u200bក្ដៅ?ម៉ោង" + + "\u200bនៅ\u200bអ៊ូសបេគីស្ថានZម៉ោង\u200bស្តង់ដារ\u200bនៅ\u200bអ៊ូសបេគីស្ថា" + + "នcម៉ោង\u200bនៅ\u200bអ៊ូសបេគីស្ថាននារដូវ\u200bក្ដៅ\u200b-ម៉ោង\u200bនៅ" + + "\u200bវ៉ានូទូKម៉ោង\u200b\u200bស្តង់ដារ\u200bនៅ\u200bវ៉ានូទូQម៉ោង\u200bនៅ" + + "\u200bវ៉ានូទូនារដូវ\u200bក្ដៅ\u200b?ម៉ោង\u200bនៅ\u200bវ៉េណេស៊ុយអេឡាEម៉ោង" + + "\u200bនៅ\u200bវ៉្លាឌីវ៉ូស្តុក`ម៉ោង\u200bស្តង់ដារ\u200bនៅ\u200bវ៉្លាឌីវ៉ូ" + + "ស្តុកiម៉ោង\u200bនៅ\u200bវ៉្លាឌីវ៉ូស្តុកនា\u200bរដូវ\u200bក្ដៅ<ម៉ោង" + + "\u200bនៅ\u200bវ៉ូហ្កោក្រាដWម៉ោង\u200bស្តង់ដារ\u200bនៅ\u200bវ៉ូហ្កោក្រាដ`" + + "ម៉ោង\u200bនៅ\u200bវ៉ូហ្កោក្រាដនា\u200bរដូវ\u200bក្ដៅ0ម៉ោង\u200bនៅ" + + "\u200bវ័រស្តុក*ម៉ោង\u200bនៅ\u200bកោះវេកOម៉ោង\u200bនៅ\u200bវ៉ាលីស និងហ្វ៊" + + "ុទូណា9ម៉ោង\u200bនៅ\u200bយ៉ាគុតស្កិ៍Tម៉ោង\u200bស្តង់ដារ\u200bនៅ\u200bយ៉" + + "ាគុតស្កិ៍]ម៉ោង\u200bនៅ\u200bយ៉ាគុតស្កិ៍នា\u200bរដូវ\u200bក្ដៅBម៉ោង" + + "\u200bនៅ\u200bអ៊ិខាធឺរីនប៊័ក]ម៉ោង\u200bស្តង់ដារ\u200bនៅ\u200bអ៊ិខាធឺរីនប" + + "៊័កiម៉ោង\u200bនៅ\u200bអ៊ិខាធឺរីនប៊័កនា\u200bរដូវ\u200b\u200bក្ដៅ\x05ma" + + "art\x05april\x03mei\x04juni\x04juli\x08augustus\x09september\x07oktober" + + "\x08november\x08december\x03mei\x04mars\x05april\x03maj\x04juni\x04juli" + + "\x07augusti\x09september\x07oktober\x08november\x08december\x04mars\x03m" + + "aj\x04juni\x04juli" + +var bucket60 string = "" + // Size: 25698 bytes + "\x0cಟೌಟ್\x0cಬಾಬಾ\x15ಹ್ಯಾಟರ್\x18ಕಿಯಾಹ್ಕ್\x09ತೋಬ\x18ಅಮ್\u200cಶೀರ್\x18ಬರಮ್" + + "\u200cಹಟ್\x12ಬರಾಮೌಡ\x1bಬ್ಯಾಷನ್ಸ್\x0cಪವೋನ\x0fಎಪೆಪ್\x12ಮೆಸ್ರಾ\x0cನಾಸಿ\x1bಮ" + + "ೆಸ್ಕರೆಮ್\x18ಟೆಕೆಮ್ಟ್\x0fಹೆದರ್\x1bತೆಹ್\u200cಸಾಸ್\x0cಟೆರ್\x15ಯೆಕಟಿಟ್\x18" + + "ಮೆಗಾಬಿಟ್\x12ಮೈಝಿಯಾ\x1bಜೆನ್\u200cಬಾಟ್\x0cಸೆನೆ\x18ಹ್ಯಾಮ್ಲೆ\x18ನಿಹಾಸ್ಸೆ" + + "\x1eಪೆಗ್ಯುಮೆನ್\x16{1} {0}ದಲ್ಲಿ\x0fಜನವರಿ\x18ಫೆಬ್ರವರಿ\x12ಮಾರ್ಚ್\x0fಏಪ್ರಿ" + + "\x06ಮೇ\x0cಜೂನ್\x0cಜುಲೈ\x06ಆಗ\x15ಸೆಪ್ಟೆಂ\x0fಅಕ್ಟೋ\x0cನವೆಂ\x0fಡಿಸೆಂ\x03ಜ" + + "\x06ಫೆ\x06ಮಾ\x03ಏ\x06ಜೂ\x06ಜು\x03ಆ\x06ಸೆ\x03ಅ\x03ನ\x06ಡಿ\x15ಏಪ್ರಿಲ್\x12ಆ" + + "ಗಸ್ಟ್\x1eಸೆಪ್ಟೆಂಬರ್\x18ಅಕ್ಟೋಬರ್\x15ನವೆಂಬರ್\x18ಡಿಸೆಂಬರ್\x06ಜನ\x0fಫೆಬ್ರ" + + "\x0cಭಾನು\x09ಸೋಮ\x0cಮಂಗಳ\x09ಬುಧ\x0cಗುರು\x0fಶುಕ್ರ\x09ಶನಿ\x06ಭಾ\x06ಸೋ\x06ಮಂ" + + "\x06ಬು\x06ಗು\x06ಶು\x03ಶ\x15ಭಾನುವಾರ\x12ಸೋಮವಾರ\x15ಮಂಗಳವಾರ\x12ಬುಧವಾರ\x15ಗುರ" + + "ುವಾರ\x18ಶುಕ್ರವಾರ\x12ಶನಿವಾರ\x0eತ್ರೈ 1\x0eತ್ರೈ 2\x0eತ್ರೈ 3\x0eತ್ರೈ 4#1ನೇ" + + " ತ್ರೈಮಾಸಿಕ#2ನೇ ತ್ರೈಮಾಸಿಕ#3ನೇ ತ್ರೈಮಾಸಿಕ#4ನೇ ತ್ರೈಮಾಸಿಕ\x1fಮಧ್ಯ ರಾತ್ರಿ\x1bಪ" + + "ೂರ್ವಾಹ್ನ\x15ಅಪರಾಹ್ನ\x15ಬೆಳಗ್ಗೆ\x18ಮಧ್ಯಾಹ್ನ\x0cಸಂಜೆ\x12ರಾತ್ರಿ\x1eಮಧ್ಯರಾ" + + "ತ್ರಿ\x06ಪೂ%ಕ್ರಿಸ್ತ ಪೂರ್ವ\x1dಕ್ರಿ.ಪೂ.ಕಾಲ\x1cಕ್ರಿಸ್ತ ಶಕ\x1cಪ್ರಸಕ್ತ ಶಕ" + + "\x13ಕ್ರಿ.ಪೂ\x10ಕ್ರಿ.ಶ\x12ಟಿಶ್ರಿ\x1bಹೆಶ್\u200cವಾನ್\x18ಕಿಸ್ಲೆವ್\x12ಟೆವೆಟ್" + + "\x0fಶೆವತ್\x11ಅದಾರ್ I\x0fಅದಾರ್\x12ಅದಾರ್ II\x12ನಿಸಾನ್\x0cಇಯರ್\x0fಸಿವನ್\x0f" + + "ತಮುಜ್\x09ಎವಿ\x0fಎಲುಲ್\x0fಚೈತ್ರ\x0fವೈಶಾಖ\x15ಜ್ಯೇಷ್ಠ\x0cಆಶಾಢ\x12ಶ್ರಾವಣ" + + "\x0fಭಾದ್ರ\x12ಆಶ್ವೀನ\x15ಕಾರ್ತೀಕ\x18ಅಗ್ರಹಯಾನ\x0fಪುಷ್ಯ\x09ಮಾಘ\x15ಫಾಲ್ಗುಣ" + + "\x06ಶಕ\x0dಮುಹ್.\x0aಸಫಾ.\x0eರಬಿ‘ I\x0fರಬಿ‘ II\x0fಜುಮ್. I\x10ಜುಮ್. II\x0aರ" + + "ಜ್.\x04ಶ.\x0aರಮ್.\x0aಶವ್.\x17ಧು‘ಲ್-ಕಿ.\x14ಧು‘ಲ್-ಹ.\x12ಮುಹರಮ್\x0fಸಫಾರ್" + + "\x14ಜುಮಾದಾ I\x15ಜುಮಾದಾ II\x0cರಜಬ್\x12ಶ’ಬಾನ್\x12ರಮದಾನ್\x15ಶವ್ವಾಲ್%ಧು‘ಲ್-ಕ" + + "ಿ‘ಡಾಹ್\"ಧು‘ಲ್-ಹಿಜಾಹ್\x1eಫರ್ವರ್ದಿನ್'ಓರ್ದಿಬೆಹೆಶ್ಟ್\x18ಖೋರ್ಡಾದ್\x0cಟಿರ್" + + "\x18ಮೊರ್ದಾದ್\x18ಶಹರಿವಾರ್\x12ಮೆಹ್ರ್\x0cಅಬನ್\x0cಅಝರ್\x06ಡೇ\x12ಬಹ್ಮನ್\x18ಎಸ" + + "್ಫಾಂಡ್+ಆರ್.ಓ.ಸಿ.ಗೆ ಮುಂಚೆ\x0fಮಿಂಗೋ\x09ಯುಗ\x0cವರ್ಷ\x1fಹಿಂದಿನ ವರ್ಷ\x10ಈ ವ" + + "ರ್ಷ\x1fಮುಂದಿನ ವರ್ಷ\x1f{0} ವರ್ಷದಲ್ಲಿ\"{0} ವರ್ಷಗಳಲ್ಲಿ#{0} ವರ್ಷದ ಹಿಂದೆ&{0" + + "} ವರ್ಷಗಳ ಹಿಂದೆ\x19ಕಳೆದ ವರ್ಷ\x1bತ್ರೈಮಾಸಿಕ.ಹಿಂದಿನ ತ್ರೈಮಾಸಿಕ\x1fಈ ತ್ರೈಮಾಸಿಕ" + + ".ಮುಂದಿನ ತ್ರೈಮಾಸಿಕ.{0} ತ್ರೈಮಾಸಿಕದಲ್ಲಿ1{0} ತ್ರೈಮಾಸಿಕಗಳಲ್ಲಿ2{0} ತ್ರೈಮಾಸಿಕದ " + + "ಹಿಂದೆ5{0} ತ್ರೈಮಾಸಿಕಗಳ ಹಿಂದೆ(ಕಳೆದ ತ್ರೈಮಾಸಿಕ'{0} ತ್ರೈ.ಮಾ.ದಲ್ಲಿ({0} ತ್ರೈ." + + "ಮಾ. ಹಿಂದೆ\x12ತಿಂಗಳು\x1fಕಳೆದ ತಿಂಗಳು\x16ಈ ತಿಂಗಳು%ಮುಂದಿನ ತಿಂಗಳು\x1f{0} ತಿ" + + "ಂಗಳಲ್ಲಿ({0} ತಿಂಗಳುಗಳಲ್ಲಿ#{0} ತಿಂಗಳ ಹಿಂದೆ,{0} ತಿಂಗಳುಗಳ ಹಿಂದೆ&{0} ತಿಂಗಳು" + + " ಹಿಂದೆ\x09ವಾರ\x16ಕಳೆದ ವಾರ\x0dಈ ವಾರ\x1cಮುಂದಿನ ವಾರ\x1c{0} ವಾರದಲ್ಲಿ\x1f{0} " + + "ವಾರಗಳಲ್ಲಿ {0} ವಾರದ ಹಿಂದೆ#{0} ವಾರಗಳ ಹಿಂದೆ\x0d{0} ವಾರ\x19ತಿಂಗಳ ವಾರ\x09ದಿ" + + "ನ\x12ಮೊನ್ನೆ\x12ನಿನ್ನೆ\x0cಇಂದು\x0cನಾಳೆ\x18ನಾಡಿದ್ದು\x1c{0} ದಿನದಲ್ಲಿ\x1f{" + + "0} ದಿನಗಳಲ್ಲಿ {0} ದಿನದ ಹಿಂದೆ#{0} ದಿನಗಳ ಹಿಂದೆ\x19ವರ್ಷದ ದಿನ\x16ವಾರದ ದಿನ&ತಿಂ" + + "ಗಳ ವಾರದ ದಿನ\"ಕಳೆದ ಭಾನುವಾರ\x19ಈ ಭಾನುವಾರ(ಮುಂದಿನ ಭಾನುವಾರ%{0} ಭಾನುವಾರದಂದು(" + + "{0} ಭಾನುವಾರಗಳಂದು,{0} ಭಾನುವಾರದ ಹಿಂದೆ/{0} ಭಾನುವಾರಗಳ ಹಿಂದೆ\x1fಕಳೆದ ಸೋಮವಾರ" + + "\x16ಈ ಸೋಮವಾರ%ಮುಂದಿನ ಸೋಮವಾರ\"{0} ಸೋಮವಾರದಂದು%{0} ಸೋಮವಾರಗಳಂದು){0} ಸೋಮವಾರದ ಹ" + + "ಿಂದೆ,{0} ಸೋಮವಾರಗಳ ಹಿಂದೆ\"ಕಳೆದ ಮಂಗಳವಾರ\x19ಈ ಮಂಗಳವಾರ(ಮುಂದಿನ ಮಂಗಳವಾರ%{0} " + + "ಮಂಗಳವಾರದಂದು({0} ಮಂಗಳವಾರಗಳಂದು,{0} ಮಂಗಳವಾರದ ಹಿಂದೆ/{0} ಮಂಗಳವಾರಗಳ ಹಿಂದೆ" + + "\x1fಕಳೆದ ಬುಧವಾರ\x16ಈ ಬುಧವಾರ%ಮುಂದಿನ ಬುಧವಾರ\"{0} ಬುಧವಾರದಂದು%{0} ಬುಧವಾರಗಳಂದ" + + "ು){0} ಬುಧವಾರದ ಹಿಂದೆ,{0} ಬುಧವಾರಗಳ ಹಿಂದೆ\"ಕಳೆದ ಗುರುವಾರ\x19ಈ ಗುರುವಾರ(ಮುಂದ" + + "ಿನ ಗುರುವಾರ%{0} ಗುರುವಾರದಂದು({0} ಗುರುವಾರಗಳಂದು,{0} ಗುರುವಾರದ ಹಿಂದೆ/{0} ಗುರ" + + "ುವಾರಗಳ ಹಿಂದೆ%ಕಳೆದ ಶುಕ್ರವಾರ\x1cಈ ಶುಕ್ರವಾರ+ಮುಂದಿನ ಶುಕ್ರವಾರ({0} ಶುಕ್ರವಾರದ" + + "ಂದು.{0} ಶುಕ್ರವಾರಗಳಲ್ಲಿ/{0} ಶುಕ್ರವಾರದ ಹಿಂದೆ2{0} ಶುಕ್ರವಾರಗಳ ಹಿಂದೆ\x1fಕಳೆ" + + "ದ ಶನಿವಾರ\x16ಈ ಶನಿವಾರ%ಮುಂದಿನ ಶನಿವಾರ\"{0} ಶನಿವಾರದಂದು%{0} ಶನಿವಾರಗಳಂದು){0}" + + " ಶನಿವಾರದ ಹಿಂದೆ,{0} ಶನಿವಾರಗಳ ಹಿಂದೆ1ಪೂರ್ವಾಹ್ನ/ಅಪರಾಹ್ನ\x0cಗಂಟೆ\x10ಈ ಗಂಟೆ" + + "\x1f{0} ಗಂಟೆಯಲ್ಲಿ\"{0} ಗಂಟೆಗಳಲ್ಲಿ {0} ಗಂಟೆ ಹಿಂದೆ&{0} ಗಂಟೆಗಳ ಹಿಂದೆ\x0fನಿಮ" + + "ಿಷ\x13ಈ ನಿಮಿಷ\"{0} ನಿಮಿಷದಲ್ಲಿ%{0} ನಿಮಿಷಗಳಲ್ಲಿ&{0} ನಿಮಿಷದ ಹಿಂದೆ){0} ನಿಮ" + + "ಿಷಗಳ ಹಿಂದೆ\x15ಸೆಕೆಂಡ್\x06ಈಗ+{0} ಸೆಕೆಂಡ್\u200cನಲ್ಲಿ.{0} ಸೆಕೆಂಡ್\u200cಗಳ" + + "ಲ್ಲಿ){0} ಸೆಕೆಂಡ್ ಹಿಂದೆ/{0} ಸೆಕೆಂಡುಗಳ ಹಿಂದೆ\x13ಸಮಯ ವಲಯ\x09ವಲಯ\x0d{0} ಸಮ" + + "ಯ\x1a{0} ದಿನದ ಸಮಯ&{0} ಪ್ರಮಾಣಿತ ಸಮಯ;ಸಂಘಟಿತ ಸಾರ್ವತ್ರಿಕ ಸಮಯ5ಬ್ರಿಟಿಷ್ ಬೇಸಿ" + + "ಗೆ ಸಮಯ2ಐರಿಷ್ ಪ್ರಮಾಣಿತ ಸಮಯ\x16ಏಕರ್ ಸಮಯ/ಏಕರ್ ಪ್ರಮಾಣಿತ ಸಮಯ)ಏಕರ್ ಬೇಸಿಗೆ ಸಮ" + + "ಯ+ಅಫಘಾನಿಸ್ತಾನ ಸಮಯ,ಮಧ್ಯ ಆಫ್ರಿಕಾ ಸಮಯ/ಪೂರ್ವ ಆಫ್ರಿಕಾ ಸಮಯKದಕ್ಷಿಣ ಆಫ್ರಿಕಾ ಪ್" + + "ರಮಾಣಿತ ಸಮಯ2ಪಶ್ಚಿಮ ಆಫ್ರಿಕಾ ಸಮಯKಪಶ್ಚಿಮ ಆಫ್ರಿಕಾ ಪ್ರಮಾಣಿತ ಸಮಯEಪಶ್ಚಿಮ ಆಫ್ರಿ" + + "ಕಾ ಬೇಸಿಗೆ ಸಮಯ\x1fಅಲಾಸ್ಕಾ ಸಮಯ5ಅಲಸ್ಕಾ ಪ್ರಮಾಣಿತ ಸಮಯ/\u200cಅಲಾಸ್ಕಾ ಹಗಲು ಸಮ" + + "ಯ\x1fಆಲ್ಮೇಟಿ ಸಮಯ8ಆಲ್ಮೇಟಿ ಪ್ರಮಾಣಿತ ಸಮಯ2ಆಲ್ಮೇಟಿ ಬೇಸಿಗೆ ಸಮಯ\x1fಅಮೆಜಾನ್ ಸಮ" + + "ಯ8ಅಮೆಜಾನ್ ಪ್ರಮಾಣಿತ ಸಮಯ2ಅಮೆಜಾನ್ ಬೇಸಿಗೆ ಸಮಯBಉತ್ತರ ಅಮೆರಿಕದ ಕೇಂದ್ರ ಸಮಯ[ಉತ್" + + "ತರ ಅಮೆರಿಕದ ಕೇಂದ್ರ ಪ್ರಮಾಣಿತ ಸಮಯUಉತ್ತರ ಅಮೆರಿಕದ ಕೇಂದ್ರೀಯ ದಿನದ ಸಮಯBಉತ್ತರ ಅ" + + "ಮೆರಿಕದ ಪೂರ್ವದ ಸಮಯ[ಉತ್ತರ ಅಮೆರಿಕದ ಪೂರ್ವದ ಪ್ರಮಾಣಿತ ಸಮಯOಉತ್ತರ ಅಮೆರಿಕದ ಪೂರ್" + + "ವದ ದಿನದ ಸಮಯ?ಉತ್ತರ ಅಮೆರಿಕದ ಪರ್ವತ ಸಮಯXಉತ್ತರ ಅಮೆರಿಕದ ಪರ್ವತ ಪ್ರಮಾಣಿತ ಸಮಯLಉ" + + "ತ್ತರ ಅಮೆರಿಕದ ಪರ್ವತ ದಿನದ ಸಮಯHಉತ್ತರ ಅಮೆರಿಕದ ಪೆಸಿಫಿಕ್ ಸಮಯaಉತ್ತರ ಅಮೆರಿಕದ ಪ" + + "ೆಸಿಫಿಕ್ ಪ್ರಮಾಣಿತ ಸಮಯUಉತ್ತರ ಅಮೆರಿಕದ ಪೆಸಿಫಿಕ್ ದಿನದ ಸಮಯ\x1fಅನಡೀರ್\u200c ಸ" + + "ಮಯ8ಅನಡೀರ್\u200c ಪ್ರಮಾಣಿತ ಸಮಯ,ಅನಡೀರ್\u200c ಹಗಲು ಸಮಯ\x19ಅಪಿಯಾ ಸಮಯ2ಅಪಿಯಾ " + + "ಪ್ರಮಾಣಿತ ಸಮಯ&ಅಪಿಯಾ ಹಗಲು ಸಮಯ\x19ಅಕ್ಟೌ ಸಮಯ2ಅಕ್ಟೌ ಪ್ರಮಾಣಿತ ಸಮಯ,ಅಕ್ಟೌ ಬೇಸಿ" + + "ಗೆ ಸಮಯ\x1fಅಕ್ಟೋಬೆ ಸಮಯ8ಅಕ್ಟೋಬೆ ಪ್ರಮಾಣಿತ ಸಮಯ2ಅಕ್ಟೋಬೆ ಬೇಸಿಗೆ ಸಮಯ\"ಅರೇಬಿಯನ" + + "್ ಸಮಯ;ಅರೇಬಿಯನ್ ಪ್ರಮಾಣಿತ ಸಮಯ/ಅರೇಬಿಯನ್ ಹಗಲು ಸಮಯ(ಅರ್ಜೆಂಟಿನಾ ಸಮಯAಅರ್ಜೆಂಟೀನ" + + "ಾ ಪ್ರಮಾಣಿತ ಸಮಯ;ಅರ್ಜೆಂಟಿನಾ ಬೇಸಿಗೆ ಸಮಯ;ಪಶ್ಚಿಮ ಅರ್ಜೆಂಟೀನಾ ಸಮಯTಪಶ್ಚಿಮ ಅರ್ಜ" + + "ೆಂಟೀನಾ ಪ್ರಮಾಣಿತ ಸಮಯNಪಶ್ಚಿಮ ಅರ್ಜೆಂಟೀನಾ ಬೇಸಿಗೆ ಸಮಯ\"ಅರ್ಮೇನಿಯ ಸಮಯ;ಅರ್ಮೇನಿ" + + "ಯ ಪ್ರಮಾಣಿತ ಸಮಯ5ಅರ್ಮೇನಿಯ ಬೇಸಿಗೆ ಸಮಯ(ಅಟ್ಲಾಂಟಿಕ್ ಸಮಯAಅಟ್ಲಾಂಟಿಕ್ ಪ್ರಮಾಣಿತ " + + "ಸಮಯ5ಅಟ್ಲಾಂಟಿಕ್ ದಿನದ ಸಮಯ>ಕೇಂದ್ರ ಆಸ್ಟ್ರೇಲಿಯಾ ಸಮಯZಆಸ್ಟ್ರೇಲಿಯಾದ ಕೇಂದ್ರ ಪ್ರ" + + "ಮಾಣಿತ ಸಮಯNಆಸ್ಟ್ರೇಲಿಯಾದ ಕೇಂದ್ರ ಹಗಲು ಸಮಯTಆಸ್ಟ್ರೇಲಿಯಾದ ಕೇಂದ್ರ ಪಶ್ಚಿಮ ಸಮಯm" + + "ಆಸ್ಟ್ರೇಲಿಯಾದ ಕೇಂದ್ರ ಪಶ್ಚಿಮ ಪ್ರಮಾಣಿತ ಸಮಯaಆಸ್ಟ್ರೇಲಿಯಾದ ಕೇಂದ್ರ ಪಶ್ಚಿಮ ಹಗಲ" + + "ು ಸಮಯ;ಪೂರ್ವ ಆಸ್ಟ್ರೇಲಿಯಾ ಸಮಯWಆಸ್ಟ್ರೇಲಿಯಾದ ಪೂರ್ವ ಪ್ರಮಾಣಿತ ಸಮಯKಪೂರ್ವ ಆಸ್ಟ" + + "್ರೇಲಿಯಾದ ಹಗಲು ಸಮಯ>ಪಶ್ಚಿಮ ಆಸ್ಟ್ರೇಲಿಯಾ ಸಮಯZಆಸ್ಟ್ರೇಲಿಯಾದ ಪಶ್ಚಿಮ ಪ್ರಮಾಣಿತ " + + "ಸಮಯNಆಸ್ಟ್ರೇಲಿಯಾದ ಪಶ್ಚಿಮ ಹಗಲು ಸಮಯ(ಅಜರ್ಬೈಜಾನ್ ಸಮಯAಅಜರ್ಬೈಜಾನ್ ಪ್ರಮಾಣಿತ ಸಮ" + + "ಯ;ಅಜರ್ಬೈಜಾನ್ ಬೇಸಿಗೆ ಸಮಯ\x1cಅಜೋರಸ್ ಸಮಯ5ಅಜೋರಸ್ ಪ್ರಮಾಣಿತ ಸಮಯ/ಅಜೋರಸ್ ಬೇಸಿಗ" + + "ೆ ಸಮಯ(ಬಾಂಗ್ಲಾದೇಶ ಸಮಯAಬಾಂಗ್ಲಾದೇಶ ಪ್ರಮಾಣಿತ ಸಮಯ;ಬಾಂಗ್ಲಾದೇಶ ಬೇಸಿಗೆ ಸಮಯ\x1c" + + "ಭೂತಾನ್ ಸಮಯ\"ಬೊಲಿವಿಯಾ ಸಮಯ+ಬ್ರೆಸಿಲಿಯಾದ ಸಮಯAಬ್ರೆಸಿಲಿಯಾ ಪ್ರಮಾಣಿತ ಸಮಯ;ಬ್ರೆಸ" + + "ಿಲಿಯಾ ಬೇಸಿಗೆ ಸಮಯ8ಬ್ರೂನಿ ದಾರುಸಲೆಮ್ ಸಮಯ&ಕೇಪ್ ವರ್ಡ್ ಸಮಯ?ಕೇಪ್ ವರ್ಡ್ ಪ್ರಮಾಣ" + + "ಿತ ಸಮಯ9ಕೇಪ್ ವರ್ಡ್ ಬೇಸಿಗೆ ಸಮಯ2ಚಮೋರೋ ಪ್ರಮಾಣಿತ ಸಮಯ\x19ಚಥಾಮ್ ಸಮಯ2ಚಥಾಮ್ ಪ್ರ" + + "ಮಾಣಿತ ಸಮಯ&ಚಥಾಮ್ ಹಗಲು ಸಮಯ\x16ಚಿಲಿ ಸಮಯ/ಚಿಲಿ ಪ್ರಮಾಣಿತ ಸಮಯ)ಚಿಲಿ ಬೇಸಿಗೆ ಸಮಯ" + + "\x16ಚೀನಾ ಸಮಯ/ಚೀನಾ ಪ್ರಮಾಣಿತ ಸಮಯ#ಚೀನಾ ಹಗಲು ಸಮಯ.ಚೊಯ್\u200cಬಲ್ಸಾನ್ ಸಮಯMಚೊಯ್" + + "\u200c\u200cಬಲ್ಸಾನ್\u200c ಪ್ರಮಾಣಿತ ಸಮಯAಚೊಯ್\u200cಬಲ್ಸಾನ್ ಬೇಸಿಗೆ ಸಮಯ5ಕ್ರಿ" + + "ಸ್ಮಸ್ ದ್ವೀಪ ಸಮಯ2ಕೋಕೋಸ್ ದ್ವೀಪಗಳ ಸಮಯ\"ಕೊಲಂಬಿಯಾ ಸಮಯ;ಕೊಲಂಬಿಯಾ ಪ್ರಮಾಣಿತ ಸಮಯ" + + "5ಕೊಲಂಬಿಯಾ ಬೇಸಿಗೆ ಸಮಯ,ಕುಕ್ ದ್ವೀಪಗಳ ಸಮಯEಕುಕ್ ದ್ವೀಪಗಳ ಪ್ರಮಾಣಿತ ಸಮಯ[ಕುಕ್ ದ್ವ" + + "ೀಪಗಳ ಮಧ್ಯಕಾಲೀನ ಬೇಸಿಗೆ ಸಮಯ\x1cಕ್ಯೂಬಾ ಸಮಯ5ಕ್ಯೂಬಾ ಪ್ರಮಾಣಿತ ಸಮಯ)ಕ್ಯೂಬಾ ದಿನ" + + "ದ ಸಮಯ\x1cಡೇವಿಸ್ ಸಮಯ9ಡುಮಂಟ್-ಡಿ ಉರ್ವಿಲೆ ಸಮಯ,ಪೂರ್ವ ಟಿಮೋರ್ ಸಮಯ,ಈಸ್ಟರ್ ದ್ವೀ" + + "ಪ ಸಮಯEಈಸ್ಟರ್ ದ್ವೀಪ ಪ್ರಮಾಣಿತ ಸಮಯ?ಈಸ್ಟರ್ ದ್ವೀಪ ಬೇಸಿಗೆ ಸಮಯ%ಈಕ್ವೆಡಾರ್ ಸಮಯ2" + + "ಮಧ್ಯ ಯುರೋಪಿಯನ್ ಸಮಯKಮಧ್ಯ ಯುರೋಪಿಯನ್ ಪ್ರಮಾಣಿತ ಸಮಯEಮಧ್ಯ ಯುರೋಪಿಯನ್ ಬೇಸಿಗೆ ಸ" + + "ಮಯ5ಪೂರ್ವ ಯುರೋಪಿಯನ್ ಸಮಯNಪೂರ್ವ ಯುರೋಪಿಯನ್ ಪ್ರಮಾಣಿತ ಸಮಯHಪೂರ್ವ ಯುರೋಪಿಯನ್ ಬೇ" + + "ಸಿಗೆ ಸಮಯNಮತ್ತಷ್ಟು-ಪೂರ್ವ ಯುರೋಪಿಯನ್ ಸಮಯ8ಪಶ್ಚಿಮ ಯುರೋಪಿಯನ್ ಸಮಯQಪಶ್ಚಿಮ ಯುರೋ" + + "ಪಿಯನ್ ಪ್ರಮಾಣಿತ ಸಮಯKಪಶ್ಚಿಮ ಯುರೋಪಿಯನ್ ಬೇಸಿಗೆ ಸಮಯJಫಾಲ್ಕ್\u200cಲ್ಯಾಂಡ್ ದ್ವ" + + "ೀಪಗಳ ಸಮಯcಫಾಲ್ಕ್\u200cಲ್ಯಾಂಡ್ ದ್ವೀಪಗಳ ಪ್ರಮಾಣಿತ ಸಮಯ]ಫಾಲ್ಕ್\u200cಲ್ಯಾಂಡ್ " + + "ದ್ವೀಪಗಳ ಬೇಸಿಗೆ ಸಮಯ\x16ಫಿಜಿ ಸಮಯ/ಫಿಜಿ ಪ್ರಮಾಣಿತ ಸಮಯ)ಫಿಜಿ ಬೇಸಿಗೆ ಸಮಯ/ಫ್ರೆಂ" + + "ಚ್ ಗಯಾನಾ ಸಮಯaದಕ್ಷಿಣ ಫ್ರೆಂಚ್ ಮತ್ತು ಅಂಟಾರ್ಟಿಕಾ ಸಮಯ(ಗಾಲಾಪಾಗೋಸ್ ಸಮಯ(ಗ್ಯಾಂಬ" + + "ಿಯರ್ ಸಮಯ\"ಜಾರ್ಜಿಯಾ ಸಮಯ;ಜಾರ್ಜಿಯಾ ಪ್ರಮಾಣಿತ ಸಮಯ5ಜಾರ್ಜಿಯಾ ಬೇಸಿಗೆ ಸಮಯ;ಗಿಲ್ಬ" + + "ರ್ಟ್ ದ್ವೀಪಗಳ ಸಮಯGಗ್ರೀನ್\u200cವಿಚ್ ಸರಾಸರಿ ಕಾಲಮಾನDಪೂರ್ವ ಗ್ರೀನ್\u200cಲ್ಯಾ" + + "ಂಡ್ ಸಮಯ]ಪೂರ್ವ ಗ್ರೀನ್\u200cಲ್ಯಾಂಡ್ ಪ್ರಮಾಣಿತ ಸಮಯWಪೂರ್ವ ಗ್ರೀನ್\u200cಲ್ಯಾಂ" + + "ಡ್ ಬೇಸಿಗೆ ಸಮಯGಪಶ್ಚಿಮ ಗ್ರೀನ್\u200cಲ್ಯಾಂಡ್ ಸಮಯ`ಪಶ್ಚಿಮ ಗ್ರೀನ್\u200cಲ್ಯಾಂಡ" + + "್ ಪ್ರಮಾಣಿತ ಸಮಯZಪಶ್ಚಿಮ ಗ್ರೀನ್\u200cಲ್ಯಾಂಡ್ ಬೇಸಿಗೆ ಸಮಯ5ಗುವಾಮ್ ಪ್ರಮಾಣಿತ ಸ" + + "ಮಯ2ಗಲ್ಫ್ ಪ್ರಮಾಣಿತ ಸಮಯ\x19ಗಯಾನಾ ಸಮಯ8ಹವಾಯಿ-ಅಲ್ಯುಟಿಯನ್ ಸಮಯQಹವಾಯಿ-ಅಲ್ಯುಟಿಯ" + + "ನ್ ಪ್ರಮಾಣಿತ ಸಮಯEಹವಾಯಿ-ಅಲ್ಯುಟಿಯನ್ ಹಗಲು ಸಮಯ)ಹಾಂಗ್ ಕಾಂಗ್ ಸಮಯBಹಾಂಗ್ ಕಾಂಗ್ " + + "ಪ್ರಮಾಣಿತ ಸಮಯ<ಹಾಂಗ್ ಕಾಂಗ್ ಬೇಸಿಗೆ ಸಮಯ\x19ಹವ್ಡ್ ಸಮಯ2ಹವ್ಡ್ ಪ್ರಮಾಣಿತ ಸಮಯ,ಹವ" + + "್ಡ್ ಬೇಸಿಗೆ ಸಮಯ5ಭಾರತೀಯ ಪ್ರಮಾಣಿತ ಸಮಯ/ಹಿಂದೂ ಮಹಾಸಾಗರ ಸಮಯ\"ಇಂಡೊಚೈನಾ ಸಮಯ5ಮಧ್" + + "ಯ ಇಂಡೋನೇಷಿಯಾ ಸಮಯ8ಪೂರ್ವ ಇಂಡೋನೇಷಿಯಾ ಸಮಯ8ಪಶ್ಚಿಮ ಇಂಡೋನೇಷಿಯ ಸಮಯ\x19ಇರಾನ್ ಸಮ" + + "ಯ2ಇರಾನ್ ಪ್ರಮಾಣಿತ ಸಮಯ&ಇರಾನ್ ಹಗಲು ಸಮಯ+ಇರ್\u200cಕುಟಸ್ಕ್ ಸಮಯDಇರ್\u200cಕುಟಸ" + + "್ಕ್ ಪ್ರಮಾಣಿತ ಸಮಯ>ಇರ್\u200cಕುಟಸ್ಕ್ ಬೇಸಿಗೆ ಸಮಯ\x1fಇಸ್ರೇಲ್ ಸಮಯ8ಇಸ್ರೇಲ್ ಪ್" + + "ರಮಾಣಿತ ಸಮಯ,ಇಸ್ರೇಲ್ ಹಗಲು ಸಮಯ\x19ಜಪಾನ್ ಸಮಯ2ಜಪಾನ್ ಪ್ರಮಾಣಿತ ಸಮಯ&ಜಪಾನ್ ಹಗಲು" + + " ಸಮಯbಪೆತ್ರೋಪಾವ್ಲೋಸ್ಕ್\u200c\u200c-ಕಮ್ಚತ್ಸ್\u200cಕೀ ಸಮಯ{ಪೆತ್ರೋಪಾವ್ಲೋಸ್ಕ್" + + "\u200c\u200c-ಕಮ್ಚತ್ಸ್\u200cಕೀ ಪ್ರಮಾಣಿತ ಸಮಯuಪೆತ್ರೋಪಾವ್ಲೋಸ್ಕ್\u200c\u200c-" + + "ಕಮ್ಚತ್ಸ್\u200cಕೀ ಬೇಸಿಗೆ ಸಮಯ8ಪೂರ್ವ ಕಜಕಿಸ್ತಾನ್ ಸಮಯ;ಪಶ್ಚಿಮ ಕಜಕಿಸ್ತಾನ್ ಸಮಯ" + + "\x1fಕೊರಿಯನ್ ಸಮಯ8ಕೊರಿಯನ್ ಪ್ರಮಾಣಿತ ಸಮಯ,ಕೊರಿಯನ್ ಹಗಲು ಸಮಯ\x19ಕೊಸರೆ ಸಮಯ=ಕ್ರಾಸ" + + "್\u200cನೊಯಾರ್ಸ್ಕ್ ಸಮಯVಕ್ರಾಸ್\u200cನೊಯಾರ್ಸ್ಕ್ ಪ್ರಮಾಣಿತ ಸಮಯPಕ್ರಾಸ್\u200c" + + "ನೊಯಾರ್ಸ್ಕ್ ಬೇಸಿಗೆ ಸಮಯ.ಕಿರ್ಗಿಸ್ತಾನ್ ಸಮಯ\x16ಲಂಕಾ ಸಮಯ,ಲೈನ್ ದ್ವೀಪಗಳ ಸಮಯ)ಲಾ" + + "ರ್ಡ್ ಹೋವ್ ಸಮಯBಲಾರ್ಡ್ ಹೋವ್ ಪ್ರಮಾಣಿತ ಸಮಯ<ಲಾರ್ಡ್ ಹೋವ್ ಬೆಳಗಿನ ಸಮಯ\x19ಮಕಾವ್" + + " ಸಮಯ2ಮಕಾವ್ ಪ್ರಮಾಣಿತ ಸಮಯ,ಮಕಾವ್ ಬೇಸಿಗೆ ಸಮಯAಮ್ಯಾಕ್\u200cಕ್ಯುರೈ ದ್ವೀಪ ಸಮಯ" + + "\x1cಮಗಡಾನ್ ಸಮಯ5ಮಗಡಾನ್ ಪ್ರಮಾಣಿತ ಸಮಯ/ಮಗಡಾನ್ ಬೇಸಿಗೆ ಸಮಯ\x1fಮಲೇಷಿಯಾ ಸಮಯ(ಮಾಲ್" + + "ಡೀವ್ಸ್ ಸಮಯ+ಮಾರ್ಕ್ಯುಸಸ್ ಸಮಯ5ಮಾರ್ಷಲ್ ದ್ವೀಪಗಳ ಸಮಯ\x1fಮಾರಿಷಸ್ ಸಮಯ8ಮಾರಿಷಸ್ " + + "ಪ್ರಮಾಣಿತ ಸಮಯ2ಮಾರಿಷಸ್ ಬೇಸಿಗೆ ಸಮಯ\"ಮಾವ್\u200cಸನ್ ಸಮಯ5ವಾಯವ್ಯ ಮೆಕ್ಸಿಕೊ ಸಮಯ" + + "Nವಾಯವ್ಯ ಮೆಕ್ಸಿಕೊ ಪ್ರಮಾಣಿತ ಸಮಯBವಾಯವ್ಯ ಮೆಕ್ಸಿಕೊ ಹಗಲು ಸಮಯ>ಮೆಕ್ಸಿಕನ್ ಪೆಸಿಫಿಕ" + + "್ ಸಮಯWಮೆಕ್ಸಿಕನ್ ಪೆಸಿಫಿಕ್ ಪ್ರಮಾಣಿತ ಸಮಯKಮೆಕ್ಸಿಕನ್ ಪೆಸಿಫಿಕ್ ಹಗಲು ಸಮಯ,ಉಲನ್" + + " ಬ್ಯಾಟರ್ ಸಮಯEಉಲನ್ ಬ್ಯಾಟರ್ ಪ್ರಮಾಣಿತ ಸಮಯ?ಉಲನ್ ಬ್ಯಾಟರ್ ಬೇಸಿಗೆ ಸಮಯ\x1cಮಾಸ್ಕೋ" + + " ಸಮಯ5ಮಾಸ್ಕೋ ಪ್ರಮಾಣಿತ ಸಮಯ/ಮಾಸ್ಕೋ ಬೇಸಿಗೆ ಸಮಯ(ಮ್ಯಾನ್ಮಾರ್ ಸಮಯ\x16ನೌರು ಸಮಯ" + + "\x19ನೇಪಾಳ ಸಮಯ8ಹೊಸ ಕ್ಯಾಲೆಡೋನಿಯಾ ಸಮಯQಹೊಸ ಕ್ಯಾಲೆಡೋನಿಯಾ ಪ್ರಮಾಣಿತ ಸಮಯNಹೊಸ ಕ್ಯ" + + "ಾಲೆಡೋನಿಯಾ ಬೇಸಿಗೆಯ ಸಮಯ1ನ್ಯೂಜಿಲ್ಯಾಂಡ್ ಸಮಯJನ್ಯೂಜಿಲ್ಯಾಂಡ್ ಪ್ರಮಾಣಿತ ಸಮಯ>ನ್ಯ" + + "ೂಜಿಲ್ಯಾಂಡ್ ಹಗಲು ಸಮಯ=ನ್ಯೂಫೌಂಡ್\u200cಲ್ಯಾಂಡ್ ಸಮಯVನ್ಯೂಫೌಂಡ್\u200cಲ್ಯಾಂಡ್ " + + "ಪ್ರಮಾಣಿತ ಸಮಯJನ್ಯೂಫೌಂಡ್\u200cಲ್ಯಾಂಡ್ ದಿನದ ಸಮಯ\x16ನಿಯು ಸಮಯ2ನಾರ್ಫೋಕ್ ದ್ವೀ" + + "ಪ ಸಮಯEಫೆರ್ನಾಂಡೋ ಡೆ ನೊರೊನ್ಹಾ ಸಮಯ^ಫೆರ್ನಾಂಡೋ ಡೆ ನೊರೊನ್ಹಾ ಪ್ರಮಾಣಿತ ಸಮಯUಫರ್" + + "ನಾಂಡೋ ದೆ ನೊರೊನ್ಹಾ ಬೇಸಿಗೆ ಸಮಯEಉತ್ತರ ಮರಿಯಾನಾ ದ್ವೀಪಗಳ ಸಮಯ7ನೊವೊಸಿಬಿರ್" + + "\u200cಸ್ಕ್ ಸಮಯPನೊವೊಸಿಬಿರ್\u200cಸ್ಕ್ ಪ್ರಮಾಣಿತ ಸಮಯJನೊವೊಸಿಬಿರ್\u200cಸ್ಕ್ ಬೇ" + + "ಸಿಗೆ ಸಮಯ\x1fಒಮಾಸ್ಕ್ ಸಮಯ8ಒಮಾಸ್ಕ್ ಪ್ರಮಾಣಿತ ಸಮಯ2ಒಮಾಸ್ಕ್ ಬೇಸಿಗೆ ಸಮಯ%ಪಾಕಿಸ್" + + "ತಾನ ಸಮಯ>ಪಾಕಿಸ್ತಾನ ಪ್ರಮಾಣಿತ ಸಮಯ8ಪಾಕಿಸ್ತಾನ ಬೇಸಿಗೆ ಸಮಯ\x1cಪಾಲಾವ್ ಸಮಯ9ಪಪುವ" + + "ಾ ನ್ಯೂ ಗಿನಿಯಾ ಸಮಯ\x1fಪರಾಗ್ವೇ ಸಮಯ8ಪರಾಗ್ವೇ ಪ್ರಮಾಣಿತ ಸಮಯ2ಪರಾಗ್ವೇ ಬೇಸಿಗೆ ಸ" + + "ಮಯ\x16ಪೆರು ಸಮಯ/ಪೆರು ಪ್ರಮಾಣಿತ ಸಮಯ)ಪೆರು ಬೇಸಿಗೆ ಸಮಯ\"ಫಿಲಿಫೈನ್ ಸಮಯ;ಫಿಲಿಫೈನ" + + "್ ಪ್ರಮಾಣಿತ ಸಮಯ5ಫಿಲಿಫೈನ್ ಬೇಸಿಗೆ ಸಮಯ8ಫಿನಿಕ್ಸ್ ದ್ವೀಪಗಳ ಸಮಯUಸೇಂಟ್ ಪಿಯರ್ ಮತ" + + "್ತು ಮಿಕ್ವೆಲನ್ ಸಮಯnಸೇಂಟ್ ಪಿಯರ್ ಮತ್ತು ಮಿಕ್ವೆಲನ್ ಪ್ರಮಾಣಿತ ಸಮಯbಸೇಂಟ್ ಪಿಯರ್" + + " ಮತ್ತು ಮಿಕ್ವೆಲನ್ ಹಗಲು ಸಮಯ+ಪಿಟ್\u200cಕೈರ್ನ್ ಸಮಯ\x1cಪೊನಾಪೆ ಸಮಯ.ಪ್ಯೊಂಗ್ಯಾಂಗ" + + "್ ಸಮಯ(ಕೋಜಿಲೋರ್ಡಾ ಸಮಯAಕೋಜಿಲೋರ್ಡಾ ಪ್ರಮಾಣಿತ ಸಮಯ;ಕೋಜಿಲೋರ್ಡಾ ಬೇಸಿಗೆ ಸಮಯ%ರಿಯ" + + "ೂನಿಯನ್ ಸಮಯ\x1cರೊತೇರಾ ಸಮಯ.ಸ್ಯಾಕ್\u200cಹಲಿನ್ ಸಮಯGಸ್ಯಾಕ್\u200cಹಲಿನ್ ಪ್ರಮಾ" + + "ಣಿತ ಸಮಯAಸ್ಯಾಕ್\u200cಹಲಿನ್ ಬೇಸಿಗೆ ಸಮಯ\x13ಸಮರ ಸಮಯ,ಸಮರ ಪ್ರಮಾಣಿತ ಸಮಯ&ಸಮರ ಬ" + + "ೇಸಿಗೆ ಸಮಯ\x19ಸಮೋವಾ ಸಮಯ2ಸಮೋವಾ ಪ್ರಮಾಣಿತ ಸಮಯ,ಸಮೋವಾ ಬೇಸಿಗೆ ಸಮಯ\"ಸೀಷೆಲ್ಸ್ ಸ" + + "ಮಯ>ಸಿಂಗಾಪುರ್ ಪ್ರಮಾಣಿತ ಸಮಯ2ಸಾಲಮನ್ ದ್ವೀಪಗಳ ಸಮಯ5ದಕ್ಷಿಣ ಜಾರ್ಜಿಯಾ ಸಮಯ\"ಸುರಿ" + + "ನೇಮ್ ಸಮಯ\x1cಸ್ಯೊವಾ ಸಮಯ\x1cತಾಹಿತಿ ಸಮಯ\x16ತೈಪೆ ಸಮಯ/ತೈಪೆ ಪ್ರಮಾಣಿತ ಸಮಯ#ತೈಪ" + + "ೆ ಹಗಲು ಸಮಯ(ತಝಕಿಸ್ತಾನ್ ಸಮಯ\"ಟೊಕೆಲಾವ್ ಸಮಯ\x19ಟೊಂಗಾ ಸಮಯ2ಟೊಂಗಾ ಪ್ರಮಾಣಿತ ಸಮ" + + "ಯ,ಟೊಂಗಾ ಬೇಸಿಗೆ ಸಮಯ\x16ಚುಕ್ ಸಮಯ=ತುರ್ಕ್\u200cಮೇನಿಸ್ತಾನ್ ಸಮಯVತುರ್ಕ್\u200c" + + "ಮೇನಿಸ್ತಾನ್ ಪ್ರಮಾಣಿತ ಸಮಯPತುರ್ಕ್\u200cಮೇನಿಸ್ತಾನ್ ಬೇಸಿಗೆ ಸಮಯ\x1cತುವಾಲು ಸಮ" + + "ಯ\x1fಉರುಗ್ವೇ ಸಮಯ8ಉರುಗ್ವೇ ಪ್ರಮಾಣಿತ ಸಮಯ2ಉರುಗ್ವೇ ಬೇಸಿಗೆ ಸಮಯ1ಉಜ್ಬೇಕಿಸ್ತಾನ್" + + " ಸಮಯJಉಜ್ಬೇಕಿಸ್ತಾನ್ ಪ್ರಮಾಣಿತ ಸಮಯDಉಜ್ಬೇಕಿಸ್ತಾನ್ ಬೇಸಿಗೆ ಸಮಯ\x19ವನೌತು ಸಮಯ2ವನ" + + "ೌತು ಪ್ರಮಾಣಿತ ಸಮಯ,ವನೌತು ಬೇಸಿಗೆ ಸಮಯ(ವೆನಿಜುವೆಲಾ ಸಮಯ4ವ್ಲಾಡಿವೋಸ್ಟೋಕ್ ಸಮಯMವ್" + + "ಲಾಡಿವೋಸ್ಟೋಕ್ ಪ್ರಮಾಣಿತ ಸಮಯGವ್ಲಾಡಿವೋಸ್ಟೋಕ್ ಬೇಸಿಗೆ ಸಮಯ.ವೋಲ್ಗೋಗಾರ್ಡ್ ಸಮಯGವ" + + "ೋಲ್ಗೋಗಾರ್ಡ್ ಪ್ರಮಾಣಿತ ಸಮಯAವೋಲ್ಗೋಗಾರ್ಡ್ ಬೇಸಿಗೆ ಸಮಯ\"ವೋಸ್ಟೊಕ್ ಸಮಯ&ವೇಕ್ ದ್" + + "ವೀಪ ಸಮಯKವ್ಯಾಲೀಸ್ ಮತ್ತು ಫ್ಯುಟುನಾ ಸಮಯ%ಯಾಕುಟ್ಸಕ್ ಸಮಯ>ಯಾಕುಟ್ಸಕ್ ಪ್ರಮಾಣಿತ ಸ" + + "ಮಯ8ಯಾಕುಟ್ಸಕ್ ಬೇಸಿಗೆ ಸಮಯ4ಯೇಕಟರಿನ್\u200cಬರ್ಗ್ ಸಮಯMಯೇಕಟರಿನ್\u200cಬರ್ಗ್ ಪ್" + + "ರಮಾಣಿತ ಸಮಯJಯೇಕೇಟರಿನ್\u200dಬರ್ಗ್ ಬೇಸಿಗೆ ಸಮಯ" + +var bucket61 string = "" + // Size: 8184 bytes + "\x06불기\x041월\x042월\x043월\x044월\x045월\x046월\x047월\x048월\x049월\x0510월\x051" + + "1월\x0512월\x06윤{0}\x06입춘\x06우수\x06경칩\x06춘분\x06청명\x06곡우\x06입하\x06소만\x06망종" + + "\x06하지\x06소서\x06대서\x06입추\x06처서\x06백로\x06추분\x06한로\x06상강\x06입동\x06소설\x06대설" + + "\x06동지\x06소한\x06대한\x06갑자\x06을축\x06병인\x06정묘\x06무진\x06기사\x06경오\x06신미\x06임신" + + "\x06계유\x06갑술\x06을해\x06병자\x06정축\x06무인\x06기묘\x06경진\x06신사\x06임오\x06계미\x06갑신" + + "\x06을유\x06병술\x06정해\x06무자\x06기축\x06경인\x06신묘\x06임진\x06계사\x06갑오\x06을미\x06병신" + + "\x06정유\x06무술\x06기해\x06경자\x06신축\x06임인\x06계묘\x06갑진\x06을사\x06병오\x06정미\x06무신" + + "\x06기유\x06경술\x06신해\x06임자\x06계축\x06갑인\x06을묘\x06병진\x06정사\x06무오\x06기미\x06경신" + + "\x06신유\x06임술\x06계해\x12U년 MMM d일 EEEE\x0dU년 MMM d일\x08y. M. d.\x06투트\x09바" + + "바흐\x09하투르\x0c키야흐크\x09투바흐\x09암쉬르\x0c바라마트\x0f바라문다흐\x09바샨스\x0c바우나흐\x09아비브" + + "\x09미스라\x06나시\x03자\x03축\x03인\x03묘\x03진\x03사\x03오\x03미\x03신\x03유\x03술\x03" + + "해\x0c매스캐램\x09테켐트\x09헤다르\x0c타흐사스\x06테르\x0c얘카티트\x0c매가비트\x0c미야지야\x09겐보트" + + "\x06새네\x06함레\x09내하세\x09파구맨\x15G y년 M월 d일 EEEE\x10G y년 M월 d일\x0aG y. M. d" + + ".\x03일\x03월\x03화\x03수\x03목\x03금\x03토\x09일요일\x09월요일\x09화요일\x09수요일\x09목요일" + + "\x09금요일\x09토요일\x071분기\x072분기\x073분기\x074분기\x0d제 1/4분기\x0d제 2/4분기\x0d제 3/" + + "4분기\x0d제 4/4분기\x06자정\x06정오\x06새벽\x06오전\x06오후\x06저녁\x03밤\x09기원전\x06서기\x13" + + "y년 M월 d일 EEEE\x0ey년 M월 d일\x09yy. M. d.\x15a h시 m분 s초 zzzz\x12a h시 m분 s초 " + + "z\x09a h:mm:ss\x06a h:mm\x09디스리\x09말케스\x09기슬르\x06데벳\x06스밧\x08아달 1\x06아달" + + "\x08아달 2\x06닛산\x09이야르\x06시완\x09담무르\x03압\x06엘룰\x0c디스리월\x0c말케스월\x0c기슬르월" + + "\x09데벳월\x09스밧월\x0b아달월 1\x09아달월\x0b아달월 2\x09닛산월\x0c이야르월\x09시완월\x0c담무르월" + + "\x06압월\x09엘룰월\x09유대력\x09무하람\x09사파르\x11라비 알 아왈\x11라비 알 쎄니\x14주마다 알 아왈\x14" + + "주마다 알 쎄니\x06라잡\x09쉐아반\x09라마단\x06쉐왈\x0e듀 알 까다\x0e듀 알 히자\x0c히즈라력\x15다이카 " + + "(645 ~ 650)\x15하쿠치 (650 ~ 671)\x15하쿠호 (672 ~ 686)\x12슈초 (686 ~ 701)\x15다" + + "이호 (701 ~ 704)\x15게이운 (704 ~ 708)\x12와도 (708 ~ 715)\x15레이키 (715 ~ 717)" + + "\x12요로 (717 ~ 724)\x12진키 (724 ~ 729)\x12덴표 (729 ~ 749)\x18덴표칸포 (749 ~ 74" + + "9)\x18덴표쇼호 (749 ~ 757)\x18덴표호지 (757 ~ 765)\x18덴표진고 (765 ~ 767)\x1b진고케이운 " + + "(767 ~ 770)\x12호키 (770 ~ 780)\x12덴오 (781 ~ 782)\x15엔랴쿠 (782 ~ 806)\x15다이" + + "도 (806 ~ 810)\x12고닌 (810 ~ 824)\x12덴초 (824 ~ 834)\x12조와 (834 ~ 848)" + + "\x12가쇼 (848 ~ 851)\x12닌주 (851 ~ 854)\x15사이코 (854 ~ 857)\x12덴난 (857 ~ 859" + + ")\x12조간 (859 ~ 877)\x12간교 (877 ~ 885)\x12닌나 (885 ~ 889)\x12간표 (889 ~ 898" + + ")\x15쇼타이 (898 ~ 901)\x12엔기 (901 ~ 923)\x12엔초 (923 ~ 931)\x15조헤이 (931 ~ 9" + + "38)\x12덴교 (938 ~ 947)\x15덴랴쿠 (947 ~ 957)\x15덴토쿠 (957 ~ 961)\x12오와 (961 ~" + + " 964)\x12고호 (964 ~ 968)\x12안나 (968 ~ 970)\x15덴로쿠 (970 ~ 973)\x12덴엔 (973 " + + "~ 976)\x12조겐 (976 ~ 978)\x12덴겐 (978 ~ 983)\x15에이간 (983 ~ 985)\x12간나 (985" + + " ~ 987)\x15에이엔 (987 ~ 989)\x15에이소 (989 ~ 990)\x15쇼랴쿠 (990 ~ 995)\x15조토쿠 " + + "(995 ~ 999)\x13조호 (999 ~ 1004)\x14간코 (1004 ~ 1012)\x14조와 (1012 ~ 1017)" + + "\x14간닌 (1017 ~ 1021)\x14지안 (1021 ~ 1024)\x14만주 (1024 ~ 1028)\x14조겐 (1028" + + " ~ 1037)\x17조랴쿠 (1037 ~ 1040)\x14조큐 (1040 ~ 1044)\x17간토쿠 (1044 ~ 1046)" + + "\x17에이쇼 (1046 ~ 1053)\x14덴기 (1053 ~ 1058)\x17고헤이 (1058 ~ 1065)\x17지랴쿠 (1" + + "065 ~ 1069)\x14엔큐 (1069 ~ 1074)\x14조호 (1074 ~ 1077)\x17쇼랴쿠 (1077 ~ 1081)" + + "\x17에이호 (1081 ~ 1084)\x17오토쿠 (1084 ~ 1087)\x14간지 (1087 ~ 1094)\x14가호 (10" + + "94 ~ 1096)\x17에이초 (1096 ~ 1097)\x17조토쿠 (1097 ~ 1099)\x14고와 (1099 ~ 1104)" + + "\x14조지 (1104 ~ 1106)\x14가쇼 (1106 ~ 1108)\x14덴닌 (1108 ~ 1110)\x17덴에이 (111" + + "0 ~ 1113)\x17에이큐 (1113 ~ 1118)\x17겐에이 (1118 ~ 1120)\x14호안 (1120 ~ 1124)" + + "\x14덴지 (1124 ~ 1126)\x17다이지 (1126 ~ 1131)\x14덴쇼 (1131 ~ 1132)\x14조쇼 (113" + + "2 ~ 1135)\x14호엔 (1135 ~ 1141)\x17에이지 (1141 ~ 1142)\x14고지 (1142 ~ 1144)" + + "\x14덴요 (1144 ~ 1145)\x14규안 (1145 ~ 1151)\x17닌페이 (1151 ~ 1154)\x14규주 (115" + + "4 ~ 1156)\x14호겐 (1156 ~ 1159)\x17헤이지 (1159 ~ 1160)\x1a에이랴쿠 (1160 ~ 1161)" + + "\x14오호 (1161 ~ 1163)\x14조칸 (1163 ~ 1165)\x17에이만 (1165 ~ 1166)\x14닌난 (116" + + "6 ~ 1169)\x14가오 (1169 ~ 1171)\x14조안 (1171 ~ 1175)\x14안겐 (1175 ~ 1177)" + + "\x14지쇼 (1177 ~ 1181)\x14요와 (1181 ~ 1182)\x17주에이 (1182 ~ 1184)\x17겐랴쿠 (11" + + "84 ~ 1185)\x14분지 (1185 ~ 1190)\x14겐큐 (1190 ~ 1199)\x14쇼지 (1199 ~ 1201)" + + "\x14겐닌 (1201 ~ 1204)\x14겐큐 (1204 ~ 1206)\x17겐에이 (1206 ~ 1207)\x14조겐 (120" + + "7 ~ 1211)\x17겐랴쿠 (1211 ~ 1213)\x14겐포 (1213 ~ 1219)\x14조큐 (1219 ~ 1222)" + + "\x14조오 (1222 ~ 1224)\x14겐닌 (1224 ~ 1225)\x17가로쿠 (1225 ~ 1227)\x17안테이 (12" + + "27 ~ 1229)\x14간키 (1229 ~ 1232)\x17조에이 (1232 ~ 1233)\x17덴푸쿠 (1233 ~ 1234)" + + "\x17분랴쿠 (1234 ~ 1235)\x17가테이 (1235 ~ 1238)\x17랴쿠닌 (1238 ~ 1239)\x14엔오 (1" + + "239 ~ 1240)\x14닌지 (1240 ~ 1243)\x14간겐 (1243 ~ 1247)\x14호지 (1247 ~ 1249)" + + "\x14겐초 (1249 ~ 1256)\x14고겐 (1256 ~ 1257)\x14쇼카 (1257 ~ 1259)\x14쇼겐 (1259" + + " ~ 1260)\x14분오 (1260 ~ 1261)\x14고초 (1261 ~ 1264)\x17분에이 (1264 ~ 1275)" + + "\x14겐지 (1275 ~ 1278)\x14고안 (1278 ~ 1288)\x14쇼오 (1288 ~ 1293)\x17에이닌 (129" + + "3 ~ 1299)\x14쇼안 (1299 ~ 1302)\x14겐겐 (1302 ~ 1303)\x14가겐 (1303 ~ 1306)" + + "\x17도쿠지 (1306 ~ 1308)\x14엔쿄 (1308 ~ 1311)\x14오초 (1311 ~ 1312)\x14쇼와 (131" + + "2 ~ 1317)\x14분포 (1317 ~ 1319)\x14겐오 (1319 ~ 1321)\x14겐코 (1321 ~ 1324)" + + "\x14쇼추 (1324 ~ 1326)\x17가랴쿠 (1326 ~ 1329)\x17겐토쿠 (1329 ~ 1331)\x14겐코 (13" + + "31 ~ 1334)\x14겐무 (1334 ~ 1336)\x14엔겐 (1336 ~ 1340)\x17고코쿠 (1340 ~ 1346)" + + "\x17쇼헤이 (1346 ~ 1370)\x17겐토쿠 (1370 ~ 1372)\x14분추 (1372 ~ 1375)\x14덴주 (13" + + "75 ~ 1379)\x17고랴쿠 (1379 ~ 1381)\x14고와 (1381 ~ 1384)\x14겐추 (1384 ~ 1392)" + + "\x1a메이토쿠 (1384 ~ 1387)\x14가쿄 (1387 ~ 1389)\x14고오 (1389 ~ 1390)\x1a메이토쿠 (" + + "1390 ~ 1394)\x17오에이 (1394 ~ 1428)\x14쇼초 (1428 ~ 1429)\x17에이쿄 (1429 ~ 144" + + "1)\x17가키쓰 (1441 ~ 1444)\x14분안 (1444 ~ 1449)\x17호토쿠 (1449 ~ 1452)\x17교토쿠 " + + "(1452 ~ 1455)\x14고쇼 (1455 ~ 1457)\x17조로쿠 (1457 ~ 1460)\x14간쇼 (1460 ~ 146" + + "6)\x14분쇼 (1466 ~ 1467)\x14오닌 (1467 ~ 1469)\x17분메이 (1469 ~ 1487)\x15조쿄 (1" + + "487 ~ 1489)<\x17엔토쿠 (1489 ~ 1492)\x17메이오 (1492 ~ 1501)\x14분키 (1501 ~ 150" + + "4)\x17에이쇼 (1504 ~ 1521)\x1a다이에이 (1521 ~ 1528)\x17교로쿠 (1528 ~ 1532)\x14덴분" + + " (1532 ~ 1555)\x14고지 (1555 ~ 1558)\x1a에이로쿠 (1558 ~ 1570)\x14겐키 (1570 ~ 1" + + "573)\x14덴쇼 (1573 ~ 1592)\x17분로쿠 (1592 ~ 1596)\x17게이초 (1596 ~ 1615)\x14겐나" + + " (1615 ~ 1624)\x17간에이 (1624 ~ 1644)\x14쇼호 (1644 ~ 1648)\x17게이안 (1648 ~ 1" + + "652)\x14조오 (1652 ~ 1655)\x1a메이레키 (1655 ~ 1658)\x14만지 (1658 ~ 1661)\x14간분" + + " (1661 ~ 1673)\x14엔포 (1673 ~ 1681)\x14덴나 (1681 ~ 1684)\x14조쿄 (1684 ~ 168" + + "8)\x17겐로쿠 (1688 ~ 1704)\x17호에이 (1704 ~ 1711)\x17쇼토쿠 (1711 ~ 1716)\x14교호 " + + "(1716 ~ 1736)\x14겐분 (1736 ~ 1741)\x14간포 (1741 ~ 1744)\x14엔쿄 (1744 ~ 1748" + + ")\x14간엔 (1748 ~ 1751)\x17호레키 (1751 ~ 1764)\x17메이와 (1764 ~ 1772)\x17안에이 (" + + "1772 ~ 1781)\x17덴메이 (1781 ~ 1789)\x17간세이 (1789 ~ 1801)\x14교와 (1801 ~ 180" + + "4)\x14분카 (1804 ~ 1818)\x17분세이 (1818 ~ 1830)\x14덴포 (1830 ~ 1844)\x14고카 (1" + + "844 ~ 1848)\x17가에이 (1848 ~ 1854)\x17안세이 (1854 ~ 1860)\x14만엔 (1860 ~ 1861" + + ")\x14분큐 (1861 ~ 1864)\x14겐지 (1864 ~ 1865)\x17게이오 (1865 ~ 1868)\x09메이지" + + "\x09다이쇼\x06쇼와\x0c헤이세이\x0c화르바딘\x15오르디베헤쉬트\x0c호르다드\x06티르\x0c모르다드\x0f샤흐리바르" + + "\x09메흐르\x06아반\x09아자르\x06다이\x09바흐만\x0c에스판드\x0f중화민국전\x0c중화민국\x06연호\x03년" + + "\x06작년\x06올해\x06내년\x0a{0}년 후\x0a{0}년 전\x06분기\x0d지난 분기\x0d이번 분기\x0d다음 분기" + + "\x0d{0}분기 후\x0d{0}분기 전\x09지난달\x0a이번 달\x0a다음 달\x0d{0}개월 후\x0d{0}개월 전\x03주" + + "\x09지난주\x0a이번 주\x0a다음 주\x0a{0}주 후\x0a{0}주 전\x0d{0}번째 주\x0a월의 주\x09그저께" + + "\x06어제\x06오늘\x06내일\x06모레\x0a{0}일 후\x0a{0}일 전\x0a년의 일\x06요일\x0d월의 평일\x10지" + + "난 일요일\x10이번 일요일\x10다음 일요일\x14{0}주 후 일요일\x14{0}주 전 일요일\x10지난 월요일\x10이번 " + + "월요일\x10다음 월요일\x14{0}주 후 월요일\x14{0}주 전 월요일\x10지난 화요일\x10이번 화요일\x10다음 화요" + + "일\x14{0}주 후 화요일\x14{0}주 전 화요일\x10지난 수요일\x10이번 수요일\x10다음 수요일\x14{0}주 후 " + + "수요일\x14{0}주 전 수요일\x10지난 목요일\x10이번 목요일\x10다음 목요일\x14{0}주 후 목요일\x14{0}주 " + + "전 목요일\x10지난 금요일\x10이번 금요일\x10다음 금요일\x14{0}주 후 금요일\x14{0}주 전 금요일\x10지난 " + + "토요일\x10이번 토요일\x10다음 토요일\x14{0}주 후 토요일" + +var bucket62 string = "" + // Size: 8623 bytes + "\x14{0}주 전 토요일\x0d오전/오후\x03시\x0d현재 시간\x0d{0}시간 후\x0d{0}시간 전\x03분\x0a현재 분" + + "\x0a{0}분 후\x0a{0}분 전\x03초\x06지금\x0a{0}초 후\x0a{0}초 전\x09시간대\x0a{0} 시간\x14" + + "{0} 하계 표준시\x0d{0} 표준시\x10협정 세계시\x17영국 하계 표준시\x16아일랜드 표준시\x10아크레 시간\x13아크" + + "레 표준시\x1a아크레 하계 표준시\x19아프가니스탄 시간\x19중앙아프리카 시간\x16동아프리카 시간\x16남아프리카 시간" + + "\x16서아프리카 시간\x19서아프리카 표준시 서아프리카 하계 표준시\x13알래스카 시간\x16알래스카 표준시\x1d알래스카 하계" + + " 표준시\x17알마티 표준 시간\x1a알마티 표준 표준시\x1a알마티 하계 표준시\x10아마존 시간\x13아마존 표준시\x1a아마" + + "존 하계 표준시\x11미 중부 시간\x14미 중부 표준시\x1b미 중부 하계 표준시\x11미 동부 시간\x14미 동부 표준시" + + "\x1b미 동부 하계 표준시\x11미 산지 시간\x14미 산악 표준시\x1b미 산지 하계 표준시\x14미 태평양 시간\x17미 태" + + "평양 표준시\x1e미 태평양 하계 표준시\x13아나디리 시간\x16아나디리 표준시\x1d아나디리 하계 표준시\x10아피아 시간" + + "\x13아피아 표준시\x1a아피아 하계 표준시\x17악타우 표준 시간\x1a악타우 표준 표준시\x1a악타우 하계 표준시\x17악퇴" + + "베 표준 시간\x1a악퇴베 표준 표준시\x1a악퇴베 하계 표준시\x13아라비아 시간\x16아라비아 표준시\x1d아라비아 하계 " + + "표준시\x16아르헨티나 시간\x19아르헨티나 표준시 아르헨티나 하계 표준시\x1d아르헨티나 서부 시간 아르헨티나 서부 표준시'" + + "아르헨티나 서부 하계 표준시\x16아르메니아 시간\x19아르메니아 표준시 아르메니아 하계 표준시\x10대서양 시간\x13대서양" + + " 표준시\x1e미 대서양 하계 표준시#오스트레일리아 중부 시간&오스트레일리아 중부 표준시-오스트레일리아 중부 하계 표준시&오스트레" + + "일리아 중서부 시간)오스트레일리아 중서부 표준시0오스트레일리아 중서부 하계 표준시#오스트레일리아 동부 시간&오스트레일리아 동부" + + " 표준시-오스트레일리아 동부 하계 표준시#오스트레일리아 서부 시간&오스트레일리아 서부 표준시-오스트레일리아 서부 하계 표준시" + + "\x19아제르바이잔 시간\x1c아제르바이잔 표준시#아제르바이잔 하계 표준시\x13아조레스 시간\x16아조레스 표준시\x1d아조레스" + + " 하계 표준시\x16방글라데시 시간\x19방글라데시 표준시 방글라데시 하계 표준시\x0d부탄 시간\x13볼리비아 시간\x16브라질" + + "리아 시간\x19브라질리아 표준시 브라질리아 하계 표준시\x13브루나이 시간\x17카보 베르데 시간\x1a카보 베르데 표준시!" + + "카보 베르데 하계 표준시\x10케이시 시간\x10차모로 시간\x0d채텀 시간\x10채텀 표준시\x17채텀 하계 표준시\x0d칠" + + "레 시간\x10칠레 표준시\x17칠레 하계 표준시\x0d중국 시간\x10중국 표준시\x17중국 하계 표준시\x13초이발산 시간" + + "\x16초이발산 표준시\x1d초이발산 하계 표준시\x19크리스마스섬 시간\x17코코스 제도 시간\x13콜롬비아 시간\x16콜롬비아" + + " 표준시\x1d콜롬비아 하계 표준시\x11쿡 제도 시간\x14쿡 제도 표준시\"쿡 제도 절반 하계 표준시\x0d쿠바 시간\x10쿠" + + "바 표준시\x17쿠바 하계 표준시\x13데이비스 시간\x16뒤몽뒤르빌 시간\x13동티모르 시간\x13이스터섬 시간\x16이스터" + + "섬 표준시\x1d이스터섬 하계 표준시\x13에콰도르 시간\x14중부 유럽 시간\x17중부 유럽 표준시\x1e중부 유럽 하계 표" + + "준시\x10동유럽 시간\x13동유럽 표준시\x1a동유럽 하계 표준시\x17극동 유럽 표준시\x10서유럽 시간\x13서유럽 표준" + + "시\x1a서유럽 하계 표준시\x1a포클랜드 제도 시간\x1d포클랜드 제도 표준시$포클랜드 제도 하계 표준시\x0d피지 시간" + + "\x10피지 표준시\x17피지 하계 표준시 프랑스령 가이아나 시간/프랑스령 남부 식민지 및 남극 시간\x16갈라파고스 시간\x10" + + "감비에 시간\x10조지아 시간\x13조지아 표준시\x1a조지아 하계 표준시\x17길버트 제도 시간\x16그리니치 표준시\x1a" + + "그린란드 동부 시간\x1d그린란드 동부 표준시$그린란드 동부 하계 표준시\x1a그린란드 서부 시간\x1d그린란드 서부 표준시$" + + "그린란드 서부 하계 표준시\x11괌 표준 시간\x13걸프만 표준시\x13가이아나 시간\x1a하와이 알류샨 시간\x1d하와이 알" + + "류샨 표준시$하와이 알류샨 하계 표준시\x0d홍콩 시간\x10홍콩 표준시\x17홍콩 하계 표준시\x10호브드 시간\x13호브드" + + " 표준시\x1a호브드 하계 표준시\x10인도 표준시\x10인도양 시간\x16인도차이나 시간\x1d중부 인도네시아 시간\x1d동부 " + + "인도네시아 시간\x1d서부 인도네시아 시간\x0d이란 시간\x10이란 표준시\x17이란 하계 표준시\x16이르쿠츠크 시간" + + "\x19이르쿠츠크 표준시 이르쿠츠크 하계 표준시\x13이스라엘 시간\x16이스라엘 표준시\x1d이스라엘 하계 표준시\x0d일본 시" + + "간\x10일본 표준시\x17일본 하계 표준시,페트로파블롭스크-캄차츠키 시간/페트로파블롭스크-캄차츠키 표준시6페트로파블롭스크-캄" + + "차츠키 하계 표준시\x1d동부 카자흐스탄 시간\x1d서부 카자흐스탄 시간\x13대한민국 시간\x16대한민국 표준시\x1d대한민" + + "국 하계 표준시\x16코스라에섬 시간\x1f크라스노야르스크 시간\"크라스노야르스크 표준시)크라스노야르스크 하계 표준시\x19키" + + "르기스스탄 시간\x14랑카 표준 시간\x14라인 제도 시간\x14로드 하우 시간\x17로드 하우 표준시\x1e로드 하우 하계 " + + "표준시\x10마카오 시간\x17마카오 표준 시간\x1a마카오 하계 표준시\x13매쿼리섬 시간\x10마가단 시간\x13마가단 표" + + "준시\x1a마가단 하계 표준시\x16말레이시아 시간\x10몰디브 시간\x1a마르키즈 제도 시간\x14마셜 제도 시간\x13모리" + + "셔스 시간\x16모리셔스 표준시\x1d모리셔스 하계 표준시\x0d모슨 시간\x1a멕시코 북서부 시간\x1d멕시코 북서부 표준시" + + "$멕시코 북서부 하계 표준시\x1a멕시코 태평양 시간\x1d멕시코 태평양 표준시$멕시코 태평양 하계 표준시\x16울란바토르 시간" + + "\x19울란바토르 표준시 울란바토르 하계 표준시\x13모스크바 시간\x16모스크바 표준시\x1d모스크바 하계 표준시\x10미얀마 " + + "시간\x10나우루 시간\x0d네팔 시간\x19뉴칼레도니아 시간\x1c뉴칼레도니아 표준시#뉴칼레도니아 하계 표준시\x13뉴질랜드" + + " 시간\x16뉴질랜드 표준시\x1d뉴질랜드 하계 표준시\x16뉴펀들랜드 시간\x19뉴펀들랜드 표준시 뉴펀들랜드 하계 표준시\x10" + + "니우에 시간\x10노퍽섬 시간!페르난도 데 노로냐 시간$페르난도 데 노로냐 표준시+페르난도 데 노로냐 하계 표준시$북마리아나 " + + "제도 표준 시간\x1c노보시비르스크 시간\x1f노보시비르스크 표준시&노보시비르스크 하계 표준시\x10옴스크 시간\x13옴스크 " + + "표준시\x1a옴스크 하계 표준시\x13파키스탄 시간\x16파키스탄 표준시\x1d파키스탄 하계 표준시\x10팔라우 시간\x19파" + + "푸아뉴기니 시간\x13파라과이 시간\x16파라과이 표준시\x1d파라과이 하계 표준시\x0d페루 시간\x10페루 표준시\x17페" + + "루 하계 표준시\x10필리핀 시간\x13필리핀 표준시\x1a필리핀 하계 표준시\x17피닉스 제도 시간#세인트피에르 미클롱 시간" + + "&세인트피에르 미클롱 표준시-세인트피에르 미클롱 하계 표준시\x10핏케언 시간\x10포나페 시간\x0d평양 시간\x16키질로르다 " + + "시간\x1d키질로르다 표준 시간 키질로르다 하계 표준시\x13레위니옹 시간\x10로데라 시간\x10사할린 시간\x13사할린 표" + + "준시\x1a사할린 하계 표준시\x10사마라 시간\x13사마라 표준시\x1a사마라 하계 표준시\x10사모아 시간\x13사모아 표" + + "준시\x1a사모아 하계 표준시\x10세이셸 시간\x16싱가포르 표준시\x17솔로몬 제도 시간\x1a사우스 조지아 시간\x10수" + + "리남 시간\x0d쇼와 시간\x10타히티 시간\x0d대만 시간\x10대만 표준시\x17대만 하계 표준시\x16타지키스탄 시간" + + "\x13토켈라우 시간\x0d통가 시간\x10통가 표준시\x17통가 하계 표준시\x0d추크 시간\x1c투르크메니스탄 시간\x1f투르" + + "크메니스탄 표준시&투르크메니스탄 하계 표준시\x10투발루 시간\x13우루과이 시간\x16우루과이 표준시\x1d우루과이 하계 표" + + "준시\x19우즈베키스탄 시간\x1c우즈베키스탄 표준시#우즈베키스탄 하계 표준시\x13바누아투 시간\x16바누아투 표준시\x1d" + + "바누아투 하계 표준시\x16베네수엘라 시간\x1c블라디보스토크 시간\x1f블라디보스토크 표준시&블라디보스토크 하계 표준시" + + "\x16볼고그라드 시간\x19볼고그라드 표준시 볼고그라드 하계 표준시\x10보스톡 시간\x13웨이크섬 시간 월리스푸투나 제도 시간" + + "\x13야쿠츠크 시간\x16야쿠츠크 표준시\x1d야쿠츠크 하계 표준시\x1c예카테린부르크 시간\x1f예카테린부르크 표준시&예카테린" + + "부르크 하계 표준시" + +var bucket63 string = "" + // Size: 17387 bytes + "\x0d조선 시간\x10조선 표준시\x17조선 하계 표준시\x0bd-M-y GGGGG\x18जानेवारी\x1eफेब्रुवार" + + "ी\x0fमार्च\x12एप्रिल\x06मे\x09जून\x0fजुलाय\x12आगोस्त\x18सप्टेंबर\x15ऑक" + + "्टोबर\x1bनोव्हेंबर\x15डिसेंबर\x0fआयतार\x0fसोमार\x12मंगळार\x12बुधवार" + + "\x15गुरुवार\x15शुक्रार\x12शेनवार\x06आय\x09सोम\x0cमंगळ\x09बुध\x0cगुरु\x0f" + + "शुक्र\x09शेन\x0bम.पू.\x0bम.नं.$क्रिस्तपूर्व\x1eक्रिस्तशखा\x06d-M-yy" + + "\x0cवर्स\x1fफाटलें वर्स\x16हें वर्स\x1fफुडलें वर्स\x1f{0} वर्सांनीं#{0} " + + "वर्सां आदीं\x1d{0} वर्स आदीं\x1bत्रैमासीक+फाटलो त्रैमासीक\"हो त्रैमासी" + + "क+फुडलो त्रैमासीक({0} त्रैमासीकांत2{0} त्रैमासीकां आदीं\x12म्हयनो\"फाट" + + "लो म्हयनो\x19हो म्हयनो\"फुडलो म्हयनो%{0} म्हयन्यानीं,{0} म्हयन्यां आदी" + + "ं\x0fसप्तक\"निमाणो सप्तक\x16हो सप्तक\x1fफुडलो सप्तक\"{0} सप्तकांनीं&{0" + + "} सप्तकां आदीं\x1a{0} चो सप्तक\x11{0} सप्त.\x1e{0} सप्त. आदीं1म्हयन्यातल" + + "ो सप्तक\x09दीस\x09काल\x09आयज\x15फाल्यां\x19{0} दिसानीं\x1a{0} दीस आदीं" + + "\x1fवर्साचो दीस\"सप्तकाचो दीसAम्हयन्यातलो सप्तकीय दीस\"निमाणो आयतार\x16ह" + + "ो आयतार\x1fफुडलो आयतार\x1f{0} आयतारानीं&{0} आयतारां आदीं\"निमाणो सोमार" + + "\x16हो सोमार\x1fफुडलो सोमार\x1f{0} सोमारानीं&{0} सोमारां आदीं\x1dनिमाणो " + + "सोम.\x11हो सोम.\x1aफुडलो सोम.\x1aनिमाणो सो.\x0eहो सो.\x17फुडलो सो.%निम" + + "ाणो मंगळार\x19हो मंगळार\"फुडलो मंगळार\"{0} मंगळारानीं){0} मंगळारां आदी" + + "ं निमाणो मंगळ.\x14हो मंगळ.\x1dफुडलो मंगळ.\x1aनिमाणो मं.\x0eहो मं.\x17फ" + + "ुडलो मं.%निमाणो बुधवार\x19हो बुधवार\"फुडलो बुधवार\"{0} बुधवारानीं){0} " + + "बुधवारां आदीं\x1dनिमाणो बुध.\x11हो बुध.\x1aफुडलो बुध.\x1aनिमाणो बु." + + "\x0eहो बु.\x17फुडलो बु.(निमाणो गुरुवार\x1cहो गुरुवार%फुडलो गुरुवार%{0} ग" + + "ुरुवारानीं,{0} गुरुवारां आदीं निमाणो गुरु.\x14हो गुरु.\x1dफुडलो गुरु." + + "\x1aनिमाणो गु.\x0eहो गु.\x17फुडलो गु.(निमाणो शुक्रार\x1cहो शुक्रार%फुडलो" + + " शुक्रार%{0} शुक्रारानीं,{0} शुक्रारां आदीं#निमाणो शुक्र.\x17हो शुक्र. फ" + + "ुडलो शुक्र.\x1aनिमाणो शु.\x0eहो शु.\x17फुडलो शु.%निमाणो शेनवार\x19हो श" + + "ेनवार\"फुडलो शेनवार\"{0} शेनवारानीं){0} शेनवारां आदीं\x1dनिमाणो शेन." + + "\x11हो शेन.\x1aफुडलो शेन.\x1aनिमाणो शे.\x0eहो शे.\x17फुडलो शे.'दिसाचोकाल" + + "ावधी\x06वर\x10हें वर\x19{0} वरांनीं\x1a{0} वरा आदीं\x0fमिनीट\x19हें मि" + + "नीट\x19{0} मिन्टां&{0} मिन्टां आदीं\x0fसेकंद\x0cआतां\x1f{0} सेकंदानीं " + + "{0} सेकंद आदीं\x18{0} से. आदीं\x09झोन5समन्वित वैश्विक वेळ5ब्रिटिश ग्रीष्" + + "म वेळ2आयरिश प्रमाणित वेळ\x1cभारतीय समय\x10EEEE, MMMM d, Gy\x0aMMMM d, " + + "Gy\x09MMM d, Gy\x06M/d/Gy\x0aجنؤری\x0aفرؤری\x0aمارٕچ\x0aاپریل\x06میٔ\x08" + + "جوٗن\x0eجوٗلایی\x08اگست\x0aستمبر\x0eاکتوٗبر\x0aنومبر\x0aدسمبر\x0cآتھوار" + + "\x14ژٔنٛدٕروار\x0eبوٚموار\x0cبودوار\x12برٛٮ۪سوار\x08جُمہ\x0aبٹوار\x0eاَت" + + "ھوار\x16ژٔنٛدرٕروار\x0aژۄباگ\x17دوٚیِم ژۄباگ\x17ترٛیِم ژۄباگ\x17ژوٗرِم " + + "ژۄباگ\x19گۄڑنیُک ژۄباگ\x13قبٕل مسیٖح\x15عیٖسوی سنہٕ\x09بی سی\x09اے ڈی" + + "\x06دور\x06ؤری\x0aرٮ۪تھ\x0aہفتہٕ\x06دۄہ\x08راتھ\x06اَز\x08پگاہ\x11ہفتُک " + + "دۄہ\x0dصبح/رات\x0eگٲنٛٹہٕ\x0aمِنَٹ\x0eسٮ۪کَنڑ\x06زون$برطٲنوی سَمَر ٹایِ" + + "م\"اَیرِش سَمَر ٹایِم\x17اٮ۪کرے ٹایِم&اٮ۪کرے سٹینڑاڑ ٹایِم\"اٮ۪کرے سَمَ" + + "ر ٹایِم\x1fافغانِستان ٹایِم$مرکزی افریٖقا ٹایِم$مشرقی افریٖقا ٹایِم$جنو" + + "ٗبی افریقا ٹایِم$مغربی افریٖقا ٹایِم3مغربی افریٖقا سٹینڑاڑ ٹایِم/مغربی " + + "افریٖقا سَمَر ٹایِم\x1bاٮ۪لاسکا ٹایِم*اٮ۪لاسکا سٹینڑاڑ ٹایِم,اٮ۪لاسکا ڈ" + + "ےلایِٔٹ ٹایِم\x1dاٮ۪لمٮ۪ٹی ٹایِم,اٮ۪لمٮ۪ٹی سٹینڑاڑ ٹایِم(اٮ۪لمٮ۪ٹی سَمَ" + + "ر ٹایِم\x1bاٮ۪مَزَن ٹایِم*اٮ۪مَزَن سٹینڑاڑ ٹایِم&اٮ۪مَزَن سَمَر ٹایِم" + + "\x15مرکزی ٹایِم$مرکزی سٹینڑاڑ ٹایِم&مرکزی ڈےلایِٔٹ ٹایِم\x15مشرقی ٹایِم$" + + "مشرقی سٹینڑاڑ ٹایِم&مشرقی ڈےلایِٔٹ ٹایِم\x19ماونٹین ٹایِم(ماونٹین سٹینڑ" + + "اڑ ٹایِم*ماونٹین ڈےلایِٔٹ ٹایِم\x19پیسِفِک ٹایِم(پیسِفِک سٹینڑاڑ ٹایِم*" + + "پیسِفِک ڈےلایِٔٹ ٹایِم\x1dاٮ۪نَڑیٖر ٹایِم,اٮ۪نَڑیٖر سٹینڑاڑ ٹایِم&اٮ۪نڑ" + + "یٖر سَمَر ٹایِم\x19اٮ۪کٹاؤ ٹایِم(اٮ۪کٹاؤ سٹینڑاڑ ٹایِم$اٮ۪کٹاؤ سَمَر ٹا" + + "یِم\x19اٮ۪کٹوب ٹایِم(اٮ۪کٹوب سٹینڑاڑ ٹایِم$اٮ۪کٹوب سَمَر ٹایِم\x1dارٮ۪ب" + + "ِیَن ٹایِم,ارٮ۪بِیَن سٹینڑاڑ ٹایِم.ارٮ۪بِیَن ڈےلایِٔٹ ٹایِم!ارجٮ۪نٹیٖنا" + + " ٹایِم0ارجٮ۪نٹیٖنا سٹینڑاڑ ٹایِم,ارجٮ۪نٹیٖنا سَمَر ٹایِم,مغربی ارجٮ۪نٹیٖ" + + "نا ٹایِم;مغربی ارجٮ۪نٹیٖنا سٹینڑاڑ ٹایِم7مغربی ارجٮ۪نٹیٖنا سَمَر ٹایِم" + + "\x1dارمیٖنِیا ٹایِم,ارمیٖنِیا سٹینڑاڑ ٹایِم(ارمیٖنِیا سَمَر ٹایِم\x1fاٮ۪" + + "ٹلانٹِک ٹایِم.اٮ۪ٹلانٹِک سٹینڑاڑ ٹایِم0اٮ۪ٹلانٹِک ڈےلایِٔٹ ٹایِم*مرکزی " + + "آسٹریلِیَن ٹایِم9آسٹریلِیَن مرکزی سٹینڑاڑ ٹایِم;آسٹریلِیَن مرکزی ڈےلایِ" + + "ٔٹ ٹایِم5آسٹریلِیَن مرکزی مغربی ٹایِمDآسٹریلِیَن مرکزی مغربی سٹینڑاڑ ٹا" + + "یِمFآسٹریلِیَن مرکزی مغربی ڈےلایِٔٹ ٹایِم*مشرِقی آسٹریلِیا ٹایِم9آسٹریل" + + "ِیَن مشرقی سٹینڑاڑ ٹایِم;آسٹریلِیَن مشرقی ڈےلایِٔٹ ٹایِم*مغرِبی آسٹریلِ" + + "یا ٹایِم;آسٹریلِیَن مغرِبی سٹینڑاڑ ٹایِم=آسٹریلِیَن مغرِبیٖ ڈےلایٔٹ ٹای" + + "ِم\x1fاَزَربیجان ٹایِم.اَزَربیجان سٹینڑاڑ ٹایِم*اَزَربیجان سَمَر ٹایِم" + + "\x1bاٮ۪زورٕس ٹایِم*اٮ۪زورٕس سٹینڑاڑ ٹایِم\x1eاٮ۪زورٕس سَمَر ٹ\x1fبَنٛگلا" + + "دیش ٹایِم.بَنٛگلادیش سٹینڑاڑ ٹایِم*بَنٛگلادیش سَمَر ٹایِم\x17بوٗٹان ٹای" + + "ِم\x1bبولِوِیا ٹایِم\x1fبرٮ۪سِلِیا ٹایِم.برٮ۪سِلِیا سٹینڑاڑ ٹایِم*برٮ۪س" + + "ِلِیا سَمَر ٹایِم0برٛوٗنَے دَروٗسَلَم ٹایِم\x1aکیپ ؤرڑو ٹایِم)کیپ ؤرڑو " + + "سٹینڑاڑ ٹایِم\x1cکیپ سَمَر ٹایِم(کٮ۪مورو سٹینڑاڑ ٹایِم\x19کٮ۪تھَم ٹایِم" + + "(کٮ۪تھَم سٹینڑاڑ ٹایِم$چٮ۪تھَم سَمَر ٹایِم\x13چِلی ٹایِم\"چِلی سٹینڑاڑ ٹ" + + "ایِم\x1eچِلی سَمَر ٹایِم\x15چَینا ٹایِم$چَینا سٹینڑاڑ ٹایِم&چَینا ڈےلای" + + "ِٔٹ ٹایِم\x1fکوےبٮ۪لسَن ٹایِم.کوےبٮ۪لسَن سٹینڑاڑ ٹایِم*کوےبٮ۪لسَن سَمَر" + + " ٹایِم\x19کرٛسمَس ٹایِم&کوکوز اَیلینڑز ٹایِم\x1dکولومبِیا ٹایِم,کولومبِی" + + "ا سٹینڑاڑ ٹایِم(کولومبِیا سَمَر ٹایِم\"کُک اَیلینڑز ٹایِم1کُک اَیلینڑز " + + "سٹینڑاڑ ٹایِم4کُک اَیلینڑز حاف سَمَر ٹایِم\x17کیوٗبا ٹایِم&کیوٗبا سٹینڑ" + + "اڑ ٹایِم(کیوٗبا ڈےلایِٔٹ ٹایِم\x15ڑیوِس ٹایِم)ڑمانٹ ڈی اُرویٖل ٹایِم\"ا" + + "یٖسٹ ٹیٖمَر ٹایِم\x19ایٖسٹَر ٹایِم(ایٖسٹَر سٹینڑاڑ ٹایِم$ایٖسٹَر سَمَر " + + "ٹایِم\x1bاِکویڑَر ٹایِم\"مرکزی یوٗرپی ٹایِم1مرکزی یوٗرپی سٹینڑاڑ ٹایِم-" + + "مرکزی یوٗرپی سَمَر ٹایِم\"مشرقی یوٗرپی ٹایِم1مشرقی یوٗرپی سٹینڑاڑ ٹایِم" + + "-مشرقی یوٗرپی سَمَر ٹایِم$مغرِبی یوٗرپی ٹایِم3مغرِبی یوٗرپی سٹینڑاڑ ٹایِ" + + "م1مغرِبی یوٗرِپی سَمَر ٹایِم\x19فاکلینڑ ٹایِم(فاکلینڑ سٹینڑاڑ ٹایِم$فاک" + + "لینڑ سَمَر ٹایِم\x15فیٖجی ٹایِم$فیٖجی سٹینڑاڑ ٹایِم فیٖجی سَمَر ٹایِم,ف" + + "رٛٮ۪نٛچ گیوٗٮ۪نا ٹایِم&جنوٗبی فرٮ۪نٛچ ٹایِم#گٮ۪لٮ۪پیٚگوز ٹایِم\x1dگٮ۪مب" + + "ِیَر ٹایِم\x1fجورجِیاہُک ٹایِم.جورجِیاہُک سٹینڑاڑ ٹایِم*جورجِیاہُک سَمَ" + + "ر ٹایِم&گِلبٲٹ ججیٖرُک ٹایِم'گرٛیٖن وِچ میٖن ٹایِم/مشرِقی گریٖن لینڑُک " + + "ٹایِم>مشرِقی گریٖن لینڑُک سٹینڑاڑ ٹایِم:مشرِقی گریٖن لینڑُک سَمَر ٹایِم" + + "/مغرِبی گریٖن لینڑُک ٹایِم>مغرِبی گریٖن لینڑُک سٹینڑاڑ ٹایِم:مغرِبی گریٖ" + + "ن لینڑُک سَمَر ٹایِم\x17گُوٮ۪م ٹایِم\"گَلف سٹینڑاڑ ٹایِم\x17گُیَنا ٹایِ" + + "م.حَواے اٮ۪لیوٗٹِیَن ٹایِم=حَواے اٮ۪لیوٗٹِیَن سٹینڑاڑ ٹایِم9حَواے اٮ۪لی" + + "وٗٹِیَن سَمَر ٹایِم\x1eحانگ کانٛگ ٹایِم-حانگ کانٛگ سٹینڑاڑ ٹایِم+حانٛگ " + + "کانٛگ سَمَر ٹایِم\x13حووڑ ٹایِم\"حووڑ سٹینڑاڑ ٹایِم\x1eحووڑ سَمَر ٹایِم" + + "\x14ہِنٛدوستان*ہِندوستٲنۍ اوشَن ٹایِن\x1fاِنڑوچَینا ٹایِم,مرکزی اِنڑونیش" + + "ِیا ٹایِم.مشرِقی اِنڑونیشِیا ٹایِم.مغرِبی اِنڑونیشِیا ٹایِم\x1bاِیٖرٲنۍ" + + " ٹایِم*اِیٖرٲنۍ سٹینڑاڑ ٹایِم&اِیٖرٲنی سَمَر ٹایِم\x1bاِرکُٹسک ٹایِم*اِر" + + "کُٹسک سٹینڑاڑ ٹایِم&اِرکُٹسک سَمَر ٹایِم\x1dاِسرٲیِلی ٹایِم,اِسرٲیِلی س" + + "ٹینڑاڑ ٹایِم.اِسرٲیِلی ڑےلایِٔٹ ٹایِم\x17جاپٲنۍ ٹایِم&جاپٲنۍ سٹینڑاڑ ٹا" + + "یِم(جاپٲنۍ ڑےلایِٔٹ ٹایِم\x1bکَمچَٹکا ٹایِم*کَمچَٹکا سٹینڑاڑ ٹایِم&کَمچ" + + "َٹکا سَمَر ٹایِم.مشرِقی کَزاکھِستان ٹایِم.مغرِبی کَزاکھِستان ٹایِم\x17ک" + + "ورِیا ٹایِم&کورِیا سٹینڑاڑ ٹایِم(کورِیا ڑےلایِٔٹ ٹایِم\x17کورسَے ٹایِم%" + + "کرٮ۪سنوےیارسک ٹایِم4کرٮ۪سنوےیارسک سٹینڑاڑ ٹایِم0کرٮ۪سنوےیارسک سَمَر ٹای" + + "ِم\x1dکِرگِستان ٹایِم\x17لَنٛکا ٹایِم&لایِٔن ججیٖرُک ٹایِم\x1cلعاڑ حووے" + + " ٹایِم+لعاڑ حووے سٹینڑاڑ ٹایِم\"لعاڑ ڑےلایٔٹ ٹایِم\x19مَکَعوٗ ٹایِم(مَکَ" + + "عوٗ سٹینڑاڑ ٹایِم$مَکَعوٗ سَمَر ٹایِم\x19مَگَدَن ٹایِم(مَگَدَن سٹینڑاڑ " + + "ٹایِم$مَگَدَن سَمَر ٹایِم\x1bمَلیشِیا ٹایِم\x1dمالدیٖوٕز ٹایِم\x1fمارقی" + + "وٗسَس ٹایِم&مارشَل ججیٖرُک ٹایِم\x19مورِشَس ٹایِم(مورِشَس سٹینڑاڑ ٹایِم" + + "$مورِشَس سَمَر ٹایِم\x15ماسَن ٹایِم\x1dمونگولِیا ٹایِم,مونگولِیا سٹینڑاڑ" + + " ٹایِم(مونگولِیا سَمَر ٹایِم\x17ماسکَو ٹایِم$ماسکو سٹینڑاڑ ٹایِم ماسکو س" + + "َمَر ٹایِم\x1bمِیانمَر ٹایِم\x1bنَعوٗروٗ ٹایِم\x19نٮ۪پٲلۍ ٹایِم(نِو کیل" + + "ٮ۪ڑونِیا ٹایِم7نِو کیلٮ۪ڑونِیا سٹینڑاڑ ٹایِم3نِو کیلٮ۪ڑونِیس سَمَر ٹایِ" + + "م\x1dنِوزِلینڑ ٹایِم,نِوزِلینڑ سٹینڑاڑ ٹایِم,نِوزِلینڑ ڑےلایٔٹ ٹایِم&نی" + + "وٗ فاونڑلینڑ ٹایِم5نیوٗ فاونڑلینڑ سٹینڑاڑ ٹایِم8نیوٗ فاونڑ لینڑ ڑےلایِٔ" + + "ٹ ٹایِم\x15نِیوٗ ٹایِم\x19نورفعاک ٹایِم\x19نورونہا ٹایِم(نورونہا سٹینڑا" + + "ڑ ٹایِم$نورونہا سَمَر ٹایِم(شُمٲلی مَرِیانا ٹایِم!نۄوۄسِبٔرسک ٹایِم0نۄو" + + "ۄسِبٔرسک سٹینڑاڑ ٹایِم,نۄوۄسِبٔرسک سَمَر ٹایِم\x15اۄمسک ٹایِم$اۄمسک سٹی" + + "نڑاڑ ٹایِم اۄمسک سَمَر ٹایِم\x1bپاکِستان ٹایِم*پاکِستان سٹینڑاڑ ٹایِم&پ" + + "اکِستان سَمَر ٹایِم\x15پَلاو ٹایِم+پاپُعا نیوٗ گٮ۪نی ٹایِم\x1bپیرٮ۪گوے " + + "ٹایِم*پیرٮ۪گوے سٹینڑاڑ ٹایِم&پیرٮ۪گوے سَمَر ٹایِم\x15پٔروٗ ٹایِم$پٔروٗ " + + "سٹینڑاڑ ٹایِم پٔروٗ سَمَر ٹایِم\x1fپھِلِپایِن ٹایِم.پھِلِپایِن سٹینڑاڑ " + + "ٹایِم*پھِلِپایِن سَمَر ٹایِم(پھونِکس ججیٖرُک ٹایِم3سینٛٹ پَیری مِقیوٗلَ" + + "ن ٹایِمBسینٛٹ پَیری مِقیوٗلَن سٹینڑاڑ ٹایِمDسینٛٹ پَیری مِقیوٗلَن ڑےلای" + + "ِٔٹ ٹایِم\x1bپِٹکیرٕن ٹایِم\x15پونیپ ٹایِم\x19قِزلوڑا ٹایِم(قِزلوڑا سٹی" + + "نڑاڑ ٹایِم$قِزلوڑا سَمَر ٹایِم\x1fرِیوٗنِیَن ٹایِم\x1bروتھٮ۪را ٹایِم" + + "\x1dسَکھٮ۪لِن ٹایِم,سَکھٮ۪لِن سٹینڑاڑ ٹایِم(سَکھٮ۪لِن سَمَر ٹایِم\x17سمٮ" + + "۪را ٹایِم&سمٮ۪را سٹینڑاڑ ٹایِم\"سمٮ۪را سَمَر ٹایِم\x17سٮ۪موآ ٹایِم&سٮ۪م" + + "وآ سٹینڑاڑ ٹایِم\"سٮ۪موآ سَمَر ٹایِم\x1bسیشٮ۪لٕز ٹایِم\x1fسِنٛگاپوٗر ٹا" + + "یِم3سولومَن ججیٖرَن ہُنٛد ٹایِم&شُمٲلی جورجِیا ٹایِم\x19سُرِنام ٹایِم" + + "\x15سیووا ٹایِم\x17ٹاہِٹی ٹایِم\x1fتازِکِستان ٹایِم\x19ٹوکٮ۪لو ٹایِم\x19" + + "ٹعانٛگا ٹایِم(ٹعانٛگا سٹینڑاڑ ٹایِم$ٹعانٛگا سَمَر ٹایِم\x13ٹٔرک ٹایِم%ت" + + "ُرکمٮ۪نِستان ٹایِم4تُرکمٮ۪نِستان سٹینڑاڑ ٹایِم0تُرکمٮ۪نِستان سَمَر ٹایِ" + + "م\x1bٹوٗوَلوٗ ٹایِم\x1fیوٗرٮ۪گوَے ٹایِم.یوٗرٮ۪گوَے سٹینڑاڑ ٹایِم*یوٗرٮ۪" + + "گوَے سَمَر ٹایِم!اُزبیکِستان ٹایِم0اُزبیکِستان سٹینڑاڑ ٹایِم0اُزبیکِستا" + + "نُک سَمَر ٹایِم\x1fوَنوٗاَٹوٗ ٹایِم.وَنوٗاَٹوٗ سٹینڑاڑ ٹایِم*وَنوٗاَٹوٗ" + + " سَمَر ٹایِم#وٮ۪نٮ۪زیوٗلا ٹایِم!ولاڑِووسٹوک ٹایِم0ولاڑِووسٹوک سٹینڑاڑ ٹا" + + "یِم,ولاڑِووسٹوک سَمَر ٹایِم\x1dوولگوگریڑ ٹایِم,وولگوگریڑ سٹینڑاڑ ٹایِم(" + + "وولگوگریڑ سَمَر ٹایِم\x17ووسٹوک ٹایِم ویک ججیٖرُک ٹایِم1والِس تہٕ فیوٗٹ" + + "یوٗنا ٹایِم\x19یَکُٹسک ٹایِم(یَکُٹسک سٹینڑاڑ ٹایِم&یَکُٹُسک سَمَر ٹایِم" + + "'یٮ۪کَٹٔرِنبٔرگ ٹایِم6یٮ۪کَٹٔرِنبٔرگ سٹینڑاڑ ٹایِم0یٮ۪کَٹرِنبٔرگ سَمَر ٹ" + + "ایِم\x0fमार्च\x06मे\x09जून\x0cजुलै\x0fऑगस्ट\x0fमार्च\x06मे\x09जून\x0cजु" + + "लै\x06आज\x0fउद्या" + +var bucket64 string = "" + // Size: 8448 bytes + "\x07Januali\x08Febluali\x05Machi\x06Aplili\x03Mei\x04Juni\x05Julai\x06Ag" + + "osti\x08Septemba\x06Oktoba\x07Novemba\x07Desemba\x08Jumaapii\x09Jumaatat" + + "u\x07Jumaane\x09Jumaatano\x08Alhamisi\x06Ijumaa\x09Jumaamosi\x0cLobo ya " + + "bosi\x0cLobo ya mbii\x11Lobo ya nnd’atu\x0bLobo ya nne\x05makeo\x08nyiag" + + "huo\x0fKabla ya Klisto\x0fBaada ya Klisto\x05Mishi\x09Ng’waka\x08Ng’ezi" + + "\x04Niki\x04Siku\x04Ghuo\x06Evi eo\x05Keloi\x0fMwesiku za wiki\x07Namshi" + + "i\x06Majila\x03ŋ1\x03ŋ2\x03ŋ3\x03ŋ4\x03ŋ5\x03ŋ6\x03ŋ7\x03ŋ8\x03ŋ9\x04ŋ10" + + "\x04ŋ11\x04ŋ12\x14ŋwíí a ntɔ́ntɔ\x14ŋwíí akǝ bɛ́ɛ\x12ŋwíí akǝ ráá\x10ŋwí" + + "í akǝ nin\x12ŋwíí akǝ táan\x15ŋwíí akǝ táafɔk\x16ŋwíí akǝ táabɛɛ\x14ŋwí" + + "í akǝ táaraa\x14ŋwíí akǝ táanin\x12ŋwíí akǝ ntɛk\x1cŋwíí akǝ ntɛk di bɔ" + + "́k\x1dŋwíí akǝ ntɛk di bɛ́ɛ\x09sɔ́ndǝ\x07lǝndí\x06maadí\x0amɛkrɛdí\x08j" + + "ǝǝdí\x07júmbá\x06samdí\x02i1\x02i2\x02i3\x02i4\"id́ɛ́n kǝbǝk kǝ ntɔ́ntɔ" + + "́\x1eidɛ́n kǝbǝk kǝ kǝbɛ́ɛ\x1cidɛ́n kǝbǝk kǝ kǝráá\x1aidɛ́n kǝbǝk kǝ kǝ" + + "nin\x09sárúwá\x0acɛɛ́nko\x17di Yɛ́sus aká yálɛ\x19cámɛɛn kǝ kǝbɔpka Y" + + "\x04d.Y.\x04k.Y.\x0aByámɛɛn\x04Bǝk\x07Ŋwíí\x09Sɔ́ndǝ\x06Ŋwós\x0aRinkɔɔ́" + + "\x0aGɛ́ɛnǝ\x0aRidúrǝ́\x14Mǝrú mǝ sɔ́ndǝ\x16Sárúwá / Cɛɛ́nko\x09Cámɛɛn" + + "\x07Mǝnít\x04Háu\x05Wáas\x17EEEE, 'dä' d. MMMM y G\x0bd. MMM. y G\x0dd. " + + "M. y GGGGG\x07Jannewa\x08Fäbrowa\x06Määz\x06Aprell\x03Mai\x05Juuni\x05Ju" + + "uli\x06Oujoß\x0aSeptämber\x08Oktohber\x09Novämber\x09Dezämber\x09Sunndaa" + + "ch\x09Mohndaach\x0aDinnsdaach\x07Metwoch\x0cDunnersdaach\x09Friidaach" + + "\x09Samsdaach\x041.Q.\x042.Q.\x043.Q.\x044.Q.\x0b1. Quattahl\x0b2. Quatt" + + "ahl\x0b3. Quattahl\x0b4. Quattahl\x021Q\x022Q\x023Q\x024Q\x04v.M.\x04n.M" + + ".\x11Uhr vörmiddaachs\x10Uhr nommendaachs\x0cVörmeddaach\x0bNommendaach" + + "\x0cvür Krestos%vür de jewöhnlejje Ziggrääschnong\x0bnoh Krestos#en de j" + + "ewöhnlejje Ziggrääschnong\x06v. Kr.\x05n. K.\x02vC\x02nC\x15EEEE, 'dä' d" + + ". MMMM y\x09d. MMM. y\x05Ähra\x04Johr\x09läz Johr\x09diß Johr\x09näx Joh" + + "r\x0een keinem Johr\x0ben {0} Johr\x0cen {0} Johre\x11vör keijnem Johr" + + "\x0dvör {0} Johr\x0evör {0} Johre\x02J.\x08Quattahl\x02Q.\x05Mohnd\x0dlä" + + "tzde Mohnd\x0bdiese Mohnd\x0enächste Mohnd\x04Woch\x09läz Woch\x07di Woc" + + "h\x0enächste Woche\x05Daach\x0bvörjestere\x07jestere\x05hück\x05morje" + + "\x0bövvermorje\x02D.\x0aWochedaach\x16Sunndaach letzte Woche\x15Sunndaac" + + "h diese Woche\x18Sunndaach nächste Woche\x16Moondaach letzte Woche\x15Mo" + + "ondaach diese Woche\x18Moondaach nächste Woche\x17Dinnsdaach letzte Woch" + + "e\x16Dinnsdaach diese Woche\x19Dinnsdaach nächste Woche\x14Metwoch letzt" + + "e Woche\x13Metwoch diese Woche\x16Metwoch nächste Woche\x19Dunnersdaach " + + "letzte Woche\x18Dunnersdaach diese Woche\x1bDunnersdaach nächste Woche" + + "\x16Friidaach letzte Woche\x15Friidaach diese Woche\x18Friidaach nächste" + + " Woche\x16Samsdaach letzte Woche\x15Samsdaach diese Woche\x18Samsdaach n" + + "ächste Woche\x09Daachteil\x02S.\x06Menutt\x06Sekond\x08Zickzohn\x0cZick" + + " vun {0}\x12Summerzick vun {0}\x16Schtandattzick vun {0}\x1fJrußbretanni" + + "je sing Summerzick\x16Irland sing Summerzick\x1cZentraal-Affrekaanesche " + + "Zigg\x17Oß-Affrekaanesche Zigg\x18Söd-Affrekaanesche Zigg\x19Wäß-Affreka" + + "anesche Zigg&Jewöhnlijje Wäß-Affrekaanesche Zigg\x1fWäß-Affrekaanesche S" + + "ommerzigg\x11de Azore ier Zick\x1ede Azore ier jewöhnlijje Zick\x17de Az" + + "ore ier Summerzick\x16Kapvärdejaansche Zigg#Jewöhnlijje Kapvärdejaansche" + + " Zigg\x1cKapvärdejaansche Sommerzigg\x18Meddel-Europpa sing Zick%Meddel-" + + "Europpa sing jewöhnlijje Zick\x1eMeddel-Europpa sing Summerzick\x15Oß-Eu" + + "roppa sing Zick\"Oß-Europpa sing jewöhnlijje Zick\x1bOß-Europpa sing Sum" + + "merzick\x16Weß-Europpa sing Zick#Weß-Europpa sing jewöhnlijje Zick\x1cWe" + + "ß-Europpa sing Summerzick\x1bGreenwich sing Standat-Zick\x1ddem Indisch" + + "e Ozejan sing Zick\x12Zigg vun Mauritius\x1fJewöhnlijje Zigg vun Mauriti" + + "us\x18Summerzigg vun Mauritius\x10Zigg vun Reunion\x17Zigg vun de Seisch" + + "älle\x03Gen\x03Hwe\x03Meu\x03Ebr\x02Me\x03Met\x03Gor\x03Est\x03Gwn\x03H" + + "ed\x02Du\x03Kev\x0amis Genver\x0bmis Hwevrer\x0amis Meurth\x09mis Ebrel" + + "\x06mis Me\x0cmis Metheven\x0dmis Gortheren\x07mis Est\x0dmis Gwynngala" + + "\x09mis Hedra\x06mis Du\x0cmis Kevardhu\x06dy Sul\x06dy Lun\x09dy Meurth" + + "\x09dy Merher\x06dy Yow\x09dy Gwener\x09dy Sadorn\x07Bledhen\x03Mis\x07S" + + "eythun\x04Dedh\x0fDedh an seythun\x03Eur\x16EEEE, G d-MMMM y-'ж'.\x10d-M" + + "MMM G y-'ж'.\x07янв.\x07фев.\x07мар.\x07апр.\x06май\x07июн.\x07июл.\x07а" + + "вг.\x07сен.\x07окт.\x07ноя.\x07дек.\x06Янв\x06Фев\x06Мар\x06Апр\x06Май" + + "\x06Июн\x06Июл\x06Авг\x06Сен\x06Окт\x06Ноя\x06Дек\x0cЯнварь\x0eФевраль" + + "\x08Март\x0cАпрель\x08Июнь\x08Июль\x0cАвгуст\x10Сентябрь\x0eОктябрь\x0cН" + + "оябрь\x0eДекабрь\x07жек.\x07дүй.\x09шейш.\x09шарш.\x09бейш.\x08жума\x07" + + "ишм.\x10жекшемби\x10дүйшөмбү\x10шейшемби\x10шаршемби\x10бейшемби\x0cише" + + "мби\x04жк\x05дш.\x05шш.\x05шр.\x05бш.\x05жм.\x05иш.\x091-чей.\x092-чей." + + "\x093-чей.\x094-чей.\x0e1-чейрек\x0e2-чейрек\x0e3-чейрек\x0e4-чейрек\x05" + + "1-ч.\x052-ч.\x053-ч.\x054-ч.\x13түн ортосу\x04тң\x0dчак түш\x04тк\x15эрт" + + "ең менен\x17түштөн кийин\x0eкечинде\x13түн ичинде\x0dтүн орт\x0dэртң мн" + + "\x0fтүшт кйн\x08кечк\x0aтаңкы\x1bтүштөн кийинки\x10кечкурун&биздин заман" + + "га чейин\x09б.з.ч.\x17биздин заман\x06б.з.\x15y-'ж'., d-MMMM, EEEE\x0fy" + + "-'ж'., d-MMMM\x0ey-'ж'., d-MMM\x0aзаман\x0cбылтыр\x0aбыйыл\x15эмдиги жыл" + + "ы\x1b{0} жылдан кийин\x15{0} жыл мурун\x16{0} жыл. кийин\x0cчейрек\x19а" + + "кыркы чейрек\x13бул чейрек\x1bкийинки чейрек!{0} чейректен кийин\x1b{0}" + + " чейрек мурун\x09чейр.\x16акыркы чейр.\x10бул чейр.\x18кийинки чейр.\x18" + + "{0} чейр. мурун\x18{0} чейр. кийин\x13өткөн айда\x0fбул айда\x15эмдиги а" + + "йда\x19{0} айдан кийин\x13{0} ай мурун\x16{0} айд. кийин\x14{0} айд. ки" + + "йн\x11{0} ай мурн\x17өткөн аптада\x15ушул аптада\x1bкелерки аптада\x1d{" + + "0} аптадан кийин\x17{0} апта мурун\x19{0} апта ичинде\x06апт\x12өткөн ап" + + "т.\x10ушул апт.\x16келерки апт.\x16{0} апт. кийин\x16{0} апт. мурун\x17" + + "айдын жумасы\x17мурдагы күнү\x0aкечээ\x0aбүгүн\x0aэртеӊ\x12бүрсүгүнү" + + "\x1b{0} күндөн кийин\x15{0} күн мурун\x16{0} күн. кийин\x15жылдын күнү" + + "\x17аптанын күнү\x1eайдын жумуш күнү\x1fөткөн жекшембиде\x1dушул жекшемб" + + "иде#келерки жекшембиде%{0} жекшембиден кийин\x1f{0} жекшемби мурун\x14ө" + + "ткөн жекш.\x12ушул жекш.\x18келерки жекш.\x1c{0} жекшемб. кийн\x1c{0} ж" + + "екшемб. мурн\x1fөткөн дүйшөмбүдө\x1dушул дүйшөмбүдө#келерки дүйшөмбүдө%" + + "{0} дүйшөмбүдөн кийин\x1f{0} дүйшөмбү мурун\x14өткөн дүйш.\x12ушул дүйш." + + "\x18келерки дүйш.\x16{0} дүйш. кийн\x16{0} дүйш. мурн\x10өткөн дш.\x0eуш" + + "ул дш.\x14келерки дш.\x12{0} дш. кийн\x12{0} дш. мурн\x1fөткөн шейшемби" + + "де\x1dушул шейшембиде#келерки шейшембиде%{0} шейшембиден кийин\x1f{0} ш" + + "ейшемби мурун\x14өткөн шейш.\x12ушул шейш.\x18келерки шейш.\x16{0} шейш" + + ". кийн\x16{0} шейш. мурн\x1fөткөн шаршембиде\x1dушул шаршембиде#келерки " + + "шаршембиде%{0} шаршембиден кийин\x1f{0} шаршемби мурун\x14өткөн шарш." + + "\x12ушул шарш.\x18келерки шарш.\x16{0} шарш. кийн\x16{0} шарш. мурн\x10ө" + + "ткөн шр.\x0eушул шр.\x14келерки шр.\x12{0} шр. кийн\x12{0} шр. мурн\x1f" + + "өткөн бейшембиде\x1dушул бейшембиде#келерки бейшембиде%{0} бейшембиден " + + "кийин\x1f{0} бейшемби мурун\x14өткөн бейш.\x12ушул бейш.\x18келерки бей" + + "ш.\x18{0} бейш. кийин\x18{0} бейш. мурун\x10өткөн бш.\x0eушул бш.\x14ке" + + "лерки бш.\x12{0} бш. кийн\x12{0} бш. мурн\x1cөткөн жума күнү\x1aушул жу" + + "ма күнү келерки жума күнү\x1d{0} жумадан кийин\x17{0} жума мурун\x10өтк" + + "өн жм.\x14келерки жм.\x13{0} жм кийин\x11{0} жм мурн\x0fөткөн жм\x0dушу" + + "л жм\x13келерки жм\x11{0} жм кийн\x1bөткөн ишембиде\x19ушул ишембиде" + + "\x1fкелерки ишембиде!{0} ишембиден кийин\x1b{0} ишемби мурун\x12өткөн иш" + + "м.\x10ушул ишм.\x16келерки ишм.\x16{0} ишм. кийин\x14{0} ишм. мурн\x09Т" + + "Ч/ТК\x08саат\x15ушул саатта\x1d{0} сааттан кийин\x17{0} саат мурун\x04с" + + "т\x18{0} саат. кийин\x18{0} саат. мурун\x10{0} с. кийн\x10{0} с. мурн" + + "\x0aмүнөт\x17ушул мүнөттө\x1f{0} мүнөттөн кийин\x07фев.\x07мар.\x07апр." + + "\x08майы\x08июны\x08июлы\x07авг.\x07окт.\x07дек.\x0cМартъи\x06Май\x08Июн" + + "ь\x08Июль\x02Lu\x02Ma\x02Mi\x02Jo\x02Vi\x03Sâ\x02Ma\x02Mi\x09февр.\x06м" + + "ая\x09сент.\x09нояб.\x08март\x06май\x08июнь\x08июль\x06Май\x06Июн\x06Ию" + + "л\x06Май\x06Июн\x06Июл\x05+J.C." + +var bucket65 string = "" + // Size: 13573 bytes + "\x19{0} мүнөт мурун\x07мүн.\x16{0} мүн. кийин\x16{0} мүн. мурун\x03м." + + "\x14{0} мүн. кийн\x14{0} мүн. мурн\x08азыр!{0} секунддан кийин\x1b{0} се" + + "кунд мурун\x16{0} сек. кийин\x16{0} сек. мурун\x14{0} сек. кийн\x14{0} " + + "сек. мурн\x19убакыт алкагы\x14{0} убактысы\x08{0} (+1)\x08{0} (+0)0Бирд" + + "иктүү дүйнөлүк убакыт,Британия жайкы убактысы*Ирландия кышкы убакыты%Аф" + + "ганистан убактысы0Борбордук Африка убактысы(Чыгыш Африка убактысы*Түштү" + + "к Африка убактысы(Батыш Африка убактысы1Батыш Африка кышкы убакыты3Баты" + + "ш Африка жайкы убактысы\x1dАляска убактысы(Аляска кышкы убактысы(Аляска" + + " жайкы убактысы\x1dАмазон убактысы(Амазон кышкы убактысы(Амазон жайкы уб" + + "актысы<Түндүк Америка, борбордук убакытKТүндүк Америка, борбордук кышкы" + + " убактысыGТүндүк Америка, борбордук жайкы убакыт8Түндүк Америка, чыгыш у" + + "бактысыCТүндүк Америка, чыгыш кышкы убактысыCТүндүк Америка, чыгыш жайк" + + "ы убактысы4Түндүк Америка, тоо убактысы?Түндүк Америка, тоо кышкы убакт" + + "ысы?Түндүк Америка, тоо жайкы убактысыAТүндүк Америка, Тынч океан убакт" + + "ысыLТүндүк Америка, Тынч океан кышкы убактысыLТүндүк Америка, Тынч океа" + + "н жайкы убактысы\x19Апиа убактысы\"Апиа кышкы убакыты$Апиа жайкы убакты" + + "сы\x1dАрабия убактысы&Арабия кышкы убакыты&Арабия жайкы убакыты#Аргенти" + + "на убактысы.Аргентина кышкы убактысы.Аргентина жайкы убактысы.Батыш Арг" + + "ентина убактысы9Батыш Аргентина кышкы убактысы9Батыш Аргентина жайкы уб" + + "актысы\x1fАрмения убактысы(Армения кышкы убакыты*Армения жайкы убактысы" + + "#Атлантика убактысы.Атлантика кышкы убактысы.Атлантика жайкы убактысы6Ав" + + "стралия борбордук убактысы?Австралия борбордук кышкы убакытыAАвстралия " + + "борбордук жайкы убактысыAАвстралия борбордук батыш убактысыJАвстралия б" + + "орбордук батыш кышкы убакытыLАвстралия борбордук чыгыш жайкы убактысы.А" + + "встралия чыгыш убактысы7Австралия чыгыш кышкы убакыты9Австралия чыгыш ж" + + "айкы убактысы.Австралия батыш убактысы7Австралия батыш кышкы убакыты9Ав" + + "стралия батыш жайкы убактысы%Азербайжан убактысы.Азербайжан кышкы убакы" + + "ты0Азербайжан жайкы убактысы\x19Азор убактысы\"Азор кышкы убакыты&Азорс" + + " жайкы убактысы#Бангладеш убактысы,Бангладеш кышкы убакыты.Бангладеш жай" + + "кы убактысы\x1bБутан убактысы\x1fБоливия убактысы!Бразилия убактысы,Бра" + + "зилия кышкы убактысы,Бразилия жайкы убактысы2Бруней Даруссалам убактысы" + + "$Капе Верде убактысы-Капе Верде кышкы убакыты/Капе Верде жайкы убактысы" + + "\x1fЧаморро убактысы\x1bЧатам убактысы\"Чатам кышкы убакыт&Чатам жайкы у" + + "бактысы\x19Чили убактысы$Чили кышкы убактысы$Чили жайкы убактысы\x1bКыт" + + "ай убактысы$Кытай кышкы убакыты$Кытай жайкы убакыты#Чойбалсан убактысы," + + "Чойбалсан кышкы убакыты.Чойбалсан жайкы убактысы0Крисмас аралынын убакт" + + "ысы2Кокос аралдарынын убактысы!Колумбия убактысы,Колумбия кышкы убактыс" + + "ы,Колумбия жайкы убактысы.Кук аралдарынын убактысы7Кук аралдарынын кышк" + + "ы убакытыDКук аралдарынын жарым жайкы убактысы\x19Куба убактысы$Куба кы" + + "шкы убактысы$Куба жайкы убактысы\x1bДэвис убактысы)Дюмон-д-Урвил убакты" + + "сы&Чыгыш Тимор убактысы,Истер аралынын убактысы5Истер аралынын кышкы уб" + + "акыты5Истер аралынын жайкы убакыты\x1fЭкуадор убактысы0Борбордук Европа" + + " убактысы9Борбордук Европа кышкы убакыты;Борбордук Европа жайкы убактысы" + + "(Чыгыш Европа убактысы1Чыгыш Европа кышкы убакыты3Чыгыш Европа жайкы уба" + + "ктысы;Калининград жана Минск убактысы(Батыш Европа убактысы1Батыш Европ" + + "а кышкы убакыты3Батыш Европа жайкы убактысы8Фолкленд аралдарынын убакты" + + "сыAФолкленд аралдарынын кышкы убакытыCФолкленд аралдарынын жайкы убакты" + + "сы\x19Фижи убактысы\"Фижи кышкы убакыты$Фижи жайкы убактысы,Француз Гви" + + "ана убактысыLФранцуз Түштүгү жана Антарктика убактысы#Галапагос убактыс" + + "ы\x1dГамбие убактысы\x1dГрузия убактысы&Грузия кышкы убакыты(Грузия жай" + + "кы убактысы\x1fГилберт убактысы\x1eGMT, кышкы убакыты0Чыгыш Гренландия " + + "убактысы;Чыгыш Гренландия кышкы убактысы;Чыгыш Гренландия жайкы убактыс" + + "ы0Батыш Гренландия убактысы;Батыш Гренландия кышкы убактысы;Батыш Гренл" + + "андия жайкы убактысы9Персия булуңунун жайкы убакыты\x1dГвиана убактысы(" + + "Гавайи-Алеут убактысы3Гавайи-Алеут кышкы убактысы3Гавайи-Алеут жайкы уб" + + "актысы\x1fГонконг убактысы(Гонконг кышкы убакыты*Гонконг жайкы убактысы" + + "\x19Ховд убактысы\"Ховд кышкы убакыты$Ховд жайкы убактысы\x1bИндия убакт" + + "ысы$Инди океан убактысы#Индокытай убактысы6Борбордук Индонезия убактысы" + + ".Чыгыш Индонезия убактысы.Батыш Индонезия убактысы\x19Иран убактысы\"Ира" + + "н кышкы убакыты*Иран күндүзгү убактысы\x1fИркутск убактысы(Иркутск кышк" + + "ы убакыты(Иркутск жайкы убакыты\x1dИзраиль убакыты(Израиль кышкы убакыт" + + "ы(Израиль жайкы убакыты\x1bЖапон убактысы$Жапон кышкы убакыты&Жапон жай" + + "кы убактысы.Чыгыш Казакстан убактысы.Батыш Казакстан убактысы\x1bКорея " + + "убактысы$Корея кышкы убакыты$Корея жайкы убакыты\x1dКосрае убактысы%Кра" + + "сноярск убактысы.Красноярск кышкы убакыты0Красноярск жайкы убактысы%Кыр" + + "гызстан убактысы0Лайн аралдарынын убактысы Лорд Хау убактысы)Лорд Хау к" + + "ышкы убакыты+Лорд Хау жайкы убактысы\x1fМакуари убактысы\x1fМагадан уба" + + "ктысы(Магадан кышкы убакыты*Магадан жайкы убактысы!Малайзия убактысы" + + "\x1fМальдив убактысы!Маркезас убактысы6Маршалл аралдарынын убактысы!Мавр" + + "икий убактысы*Маврикий кышкы убакыты,Маврикий жайкы убактысы\x1dМоусон " + + "убактысы7Түндүк-чыгыш Мексика убактысыBТүндүк-чыгыш Мексика кышкы убакт" + + "ысыBТүндүк-чыгыш Мексика жайкы убактысы4Мексика, Тынч океан убактысы?Ме" + + "ксика, Тынч океан кышкы убактысы?Мексика, Тынч океан жайкы убактысы$Ула" + + "н Батор убактысы-Улан Батор кышкы убакыты/Улан Батор жайкы убактысы\x1d" + + "Москва убактысы&Москва кышкы убакыты(Москва жайкы убактысы\x1fМйанмар у" + + "бактысы\x1bНауру убактысы\x1bНепал убактысы,Жаӊы Каледония убактысы5Жаӊ" + + "ы Каледония кышкы убакыты7Жаӊы Каледония жайкы убактысы*Жаӊы Зеландия у" + + "бактысы3Жаӊы Зеландия кышкы убакыты3Жаңы Зеландия жайкы убакыты'Нюфаунд" + + "лэнд убактысы2Нюфаундлэнд кышкы убактысы2Нюфаундлэнд жайкы убактысы\x19" + + "Ниуэ убактысы\x1fНорфолк убактысы5Фернандо де Норонья убактысы@Фернандо" + + " де Норонья кышкы убактысы@Фернандо де Норонья жайкы убактысы'Новосибирс" + + "к убактысы0Новосибирск кышкы убакыты2Новосибирск жайкы убактысы\x19Омск" + + " убактысы\"Омск кышкы убакыты$Омск жайкы убактысы!Пакистан убактысы*Паки" + + "стан кышкы убакыты,Пакистан жайкы убактысы\x1bПалау убактысы1Папуа-Жаңы" + + " Гвинея убактысы!Парагвай убактысы,Парагвай кышкы убактысы,Парагвай жайк" + + "ы убактысы\x19Перу убактысы$Перу кышкы убактысы$Перу жайкы убактысы8Фил" + + "иппин аралдарынын убактысыCФилиппин аралдарынын кышкы убактысыCФилиппин" + + " аралдарынын жайкы убактысы4Феникс аралдарынын убактысы8Сен Пьер жана Ми" + + "келон убактысыCСен Пьер жана Микелон кышкы убактысыCСен Пьер жана Микел" + + "он жайкы убактысы!Питкэрнг убактысы\x1dПонапе убактысы\x1dПхеньян убакы" + + "ты\x1fРеюнион убактысы\x1dРотера убактысы\x1fСахалин убактысы(Сахалин к" + + "ышкы убакыты*Сахалин жайкы убактысы\x1bСамоа убактысы$Самоа кышкы убакы" + + "ты&Самоа жайкы убактысы\x1dСейшел убактысы!Сингапур убактысы6Соломон ар" + + "алдарынын убактысы*Түштүк Жоржия убактысы!Суринаме убактысы\x19Саоа уба" + + "ктысы\x1bТаити убактысы\x1dТайпей убактысы&Тайпей кышкы убакыты&Тайпей " + + "жайкы убакыты#Тажикстан убактысы\x1fТокелау убактысы\x1bТонга убактысы$" + + "Тонга кышкы убакыты&Тонга жайкы убактысы\x19Чуук убактысы'Түркмөнстан у" + + "бактысы0Түркмөнстан кышкы убакыты2Түркмөнстан жайкы убактысы\x1dТувалу " + + "убактысы\x1fУругвай убактысы*Уругвай кышкы убактысы*Уругвай жайкы убакт" + + "ысы#Өзбекстан убактысы,Өзбекстан кышкы убакыты.Өзбекстан жайкы убактысы" + + "\x1fВануату убактысы(Вануату кышкы убакыты*Вануату жайкы убактысы#Венесу" + + "эла убактысы'Владивосток убактысы0Владивосток кышкы убакыты2Владивосток" + + " жайкы убактысы#Волгоград убактысы,Волгоград кышкы убакыты.Волгоград жай" + + "кы убактысы\x1dВосток убактысы0Уейк аралдарынын убактысы1Уолис жана Фут" + + "уна убактысы\x1dЯкутск убактысы&Якутск кышкы убакыты(Якутск жайкы убакт" + + "ысы)Екатеринбург убактысы2Екатеринбург кышкы убакыты4Екатеринбург жайкы" + + " убактысы" + +var bucket66 string = "" + // Size: 9765 bytes + "\x09Fúngatɨ\x06Naanɨ\x06Keenda\x06Ikúmi\x09Inyambala\x07Idwaata\x0aMʉʉnc" + + "hɨ\x08Vɨɨrɨ\x06Saatʉ\x04Inyi\x05Saano\x07Sasatʉ\x0cKʉfúngatɨ\x09Kʉnaanɨ" + + "\x09Kʉkeenda\x08Kwiikumi\x0dKwiinyambála\x0aKwiidwaata\x0dKʉmʉʉnchɨ\x0bK" + + "ʉvɨɨrɨ\x09Kʉsaatʉ\x07Kwiinyi\x08Kʉsaano\x0aKʉsasatʉ\x06Píili\x06Táatu" + + "\x04Íne\x06Táano\x03Alh\x03Ijm\x06Móosi\x0aJumapíiri\x09Jumatátu\x08Juma" + + "íne\x0aJumatáano\x09Alamíisi\x07Ijumáa\x0aJumamóosi\x06Ncho 1\x06Ncho 2" + + "\x06Ncho 3\x06Ncho 4\x0bNcholo ya 1\x0bNcholo ya 2\x0bNcholo ya 3\x0bNch" + + "olo ya 4\x03TOO\x03MUU\x18Kɨrɨsitʉ sɨ anavyaal\x16Kɨrɨsitʉ akavyaalwe" + + "\x03KSA\x02KA\x0aMpɨɨndɨ\x07Mwaáka\x07Mweéri\x06Wíiki\x05Sikʉ\x05Niijo" + + "\x06Isikʉ\x0bLamʉtoondo\x0eSikʉ ya júma\x13Mpɨɨndɨ ja sikʉ\x04Sáa\x07Dak" + + "íka\x09Sekúunde\x16Mpɨɨndɨ ja mɨɨtʉ\x04Son.\x05Méi.\x05Dën.\x05Mët.\x04" + + "Don.\x04Fre.\x04Sam.\x07Sonndeg\x08Méindeg\x0aDënschdeg\x09Mëttwoch\x0bD" + + "onneschdeg\x07Freideg\x09Samschdeg\x03Son\x04Méi\x04Dën\x04Mët\x03Don" + + "\x03Fre\x03Sam\x05moies\x09nomëttes\x06nomë.\x08v. e. Z.\x08n. e. Z.\x05" + + "Epoch\x04Joer\x0blescht Joer\x0adëst Joer\x0cnächst Joer\x0ban {0} Joer" + + "\x0da(n) {0} Joer\x0evirun {0} Joer\x10viru(n) {0} Joer\x09an {0} J.\x0b" + + "a(n) {0} J.\x0cvirun {0} J.\x0eviru(n) {0} J.\x07+{0} J.\x07-{0} J.\x0ea" + + "n {0} Quartal\x12a(n) {0} Quartaler\x11virun {0} Quartal\x15viru(n) {0} " + + "Quartaler\x09an {0} Q.\x0ba(n) {0} Q.\x0cvirun {0} Q.\x0eviru(n) {0} Q." + + "\x07+{0} Q.\x07-{0} Q.\x05Mount\x0dleschte Mount\x0bdëse Mount\x0enächst" + + "e Mount\x0can {0} Mount\x0fa(n) {0} Méint\x0fvirun {0} Mount\x12viru(n) " + + "{0} Méint\x09an {0} M.\x0ba(n) {0} M.\x0cvirun {0} M.\x0eviru(n) {0} M." + + "\x07+{0} M.\x07-{0} M.\x0blescht Woch\x09dës Woch\x0cnächst Woch\x0ban {" + + "0} Woch\x0fa(n) {0} Wochen\x0evirun {0} Woch\x12viru(n) {0} Wochen\x09an" + + " {0} W.\x0ba(n) {0} W.\x0cvirun {0} W.\x0eviru(n) {0} W.\x07+{0} W.\x07-" + + "{0} W.\x03Dag\x09gëschter\x04haut\x04muer\x0aan {0} Dag\x0da(n) {0} Deeg" + + "\x0dvirun {0} Dag\x10viru(n) {0} Deeg\x09an {0} D.\x0ba(n) {0} D.\x0cvir" + + "un {0} D.\x0eviru(n) {0} D.\x07+{0} D.\x07-{0} D.\x09Wochendag\x0flescht" + + "e Sonndeg\x0ddëse Sonndeg\x10nächste Sonndeg\x0cleschte Son.\x0adëse Son" + + ".\x0dnächste Son.\x0bleschte So.\x09dëse So.\x0cnächste So.\x10leschte M" + + "éindeg\x0edëse Méindeg\x11nächste Méindeg\x0dleschte Méi.\x0bdëse Méi." + + "\x0enächste Méi.\x0cleschte Mé.\x0adëse Mé.\x0dnächste Mé.\x13leschten D" + + "ënschdeg\x11dësen Dënschdeg\x14nächsten Dënschdeg\x0dleschten Dë.\x0bdë" + + "sen Dë.\x0enächsten Dë.\x11leschte Mëttwoch\x0fdëse Mëttwoch\x12nächste " + + "Mëttwoch\x0dleschte Mët.\x0bdëse Mët.\x0enächste Mët.\x0cleschte Më.\x0a" + + "dëse Më.\x0dnächste Më.\x14leschten Donneschdeg\x12dësen Donneschdeg\x15" + + "nächsten Donneschdeg\x0dleschten Don.\x0bdësen Don.\x0enächsten Don.\x0c" + + "leschten Do.\x0adësen Do.\x0dnächsten Do.\x0fleschte Freideg\x0ddëse Fre" + + "ideg\x10nächste Freideg\x0cleschte Fre.\x0adëse Fre.\x0dnächste Fre.\x0b" + + "leschte Fr.\x09dëse Fr.\x0cnächste Fr.\x11leschte Samschdeg\x0fdëse Sams" + + "chdeg\x12nächste Samschdeg\x0cleschte Sam.\x0adëse Sam.\x0dnächste Sam." + + "\x0bleschte Sa.\x09dëse Sa.\x0cnächste Sa.\x0fDageshallschent\x05Stonn" + + "\x0can {0} Stonn\x10a(n) {0} Stonnen\x0fvirun {0} Stonn\x13viru(n) {0} S" + + "tonnen\x03St.\x0aan {0} St.\x0ca(n) {0} St.\x0dvirun {0} St.\x0fviru(n) " + + "{0} St.\x08+{0} St.\x08-{0} St.\x06Minutt\x0dan {0} Minutt\x11a(n) {0} M" + + "inutten\x10virun {0} Minutt\x14viru(n) {0} Minutten\x0ban {0} Min.\x0da(" + + "n) {0} Min.\x0evirun {0} Min.\x10viru(n) {0} Min.\x09+{0} Min.\x09-{0} M" + + "in.\x06Sekonn\x0dan {0} Sekonn\x11a(n) {0} Sekonnen\x10virun {0} Sekonn" + + "\x14viru(n) {0} Sekonnen\x0ban {0} Sek.\x0da(n) {0} Sek.\x0evirun {0} Se" + + "k.\x10viru(n) {0} Sek.\x09+{0} Sek.\x09-{0} Sek.\x08Zäitzon\x09{0} Zäit" + + "\x0f{0} Summerzäit\x0f{0} Normalzäit\x14Britesch Summerzäit\x12Iresch Su" + + "mmerzäit\x0aAcre-Zäit\x10Acre-Normalzäit\x10Acre-Summerzäit\x11Afghanist" + + "an-Zäit\x18Zentralafrikanesch Zäit\x14Ostafrikanesch Zäit\x15Südafrikane" + + "sch Zäit\x15Westafrikanesch Zäit\x1bWestafrikanesch Normalzäit\x1bWestaf" + + "rikanesch Summerzäit\x0cAlaska-Zäit\x12Alaska-Normalzäit\x12Alaska-Summe" + + "rzäit\x0cAlmaty-Zäit\x12Almaty-Normalzäit\x12Almaty-Summerzäit\x0eAmazon" + + "as-Zäit\x14Amazonas-Normalzäit\x14Amazonas-Summerzäit\x1cNordamerikanesc" + + "h Inlandzäit#Nordamerikanesch Inland-Normalzäit#Nordamerikanesch Inland-" + + "Summerzäit Nordamerikanesch Ostküstenzäit'Nordamerikanesch Ostküsten-Nor" + + "malzäit'Nordamerikanesch Ostküsten-Summerzäit\x14Rocky-Mountain-Zäit\x1a" + + "Rocky-Mountain-Normalzäit\x1aRocky-Mountain-Summerzäit!Nordamerikanesch " + + "Westküstenzäit(Nordamerikanesch Westküsten-Normalzäit(Nordamerikanesch W" + + "estküsten-Summerzäit\x0cAnadyr-Zäit\x12Anadyr-Normalzäit\x12Anadyr-Summe" + + "rzäit\x0eArabesch Zäit\x14Arabesch Normalzäit\x14Arabesch Summerzäit\x12" + + "Argentinesch Zäit\x18Argentinesch Normalzäit\x18Argentinesch Summerzäit" + + "\x16Westargentinesch Zäit\x1cWestargentinesch Normalzäit\x1cWestargentin" + + "esch Summerzäit\x0fArmenesch Zäit\x15Armenesch Normalzäit\x15Armenesch S" + + "ummerzäit\x0eAtlantik-Zäit\x14Atlantik-Normalzäit\x14Atlantik-Summerzäit" + + "\x18Zentralaustralesch Zäit\x1eZentralaustralesch Normalzäit\x1eZentrala" + + "ustralesch Summerzäit\x1eZentral-/Westaustralesch Zäit$Zentral-/Westaust" + + "ralesch Normalzäit$Zentral-/Westaustralesch Summerzäit\x14Ostaustralesch" + + " Zäit\x1aOstaustralesch Normalzäit\x1aOstaustralesch Summerzäit\x15Westa" + + "ustralesch Zäit\x1bWestaustralesch Normalzäit\x1bWestaustralesch Summerz" + + "äit\x17Aserbaidschanesch Zäit\x1dAserbeidschanesch Normalzäit\x1dAserba" + + "idschanesch Summerzäit\x0cAzoren-Zäit\x12Azoren-Normalzäit\x12Azoren-Sum" + + "merzäit\x11Bangladesch-Zäit\x17Bangladesch-Normalzäit\x17Bangladesch-Sum" + + "merzäit\x0cBhutan-Zäit\x12Bolivianesch Zäit\x0fBrasília-Zäit\x15Brasília" + + "-Normalzäit\x15Brasília-Summerzäit\x0cBrunei-Zäit\x0fKap-Verde-Zäit\x15K" + + "ap-Verde-Normalzäit\x15Kap-Verde-Summerzäit\x0eChamorro-Zäit\x0dChatham-" + + "Zäit\x13Chatham-Normalzäit\x13Chatham-Summerzäit\x10Chilenesch Zäit\x16C" + + "hilenesch Normalzäit\x16Chilenesch Summerzäit\x10Chinesesch Zäit\x16Chin" + + "esesch Normalzäit\x16Chinesesch Summerzäit\x10Choibalsan-Zäit\x16Choibal" + + "san-Normalzäit\x16Choibalsan-Summerzäit\x18Chrëschtdagsinsel-Zäit\x12Kok" + + "osinselen-Zäit\x13Kolumbianesch Zäit\x19Kolumbianesch Normalzäit\x19Kolu" + + "mbianesch Summerzäit\x11Cookinselen-Zäit\x17Cookinselen-Normalzäit\x17Co" + + "okinselen-Summerzäit\x0fKubanesch Zäit\x15Kubanesch Normalzäit\x15Kubane" + + "sch Summerzäit\x0bDavis-Zäit\x18Dumont-d’Urville-Zäit\x0eOsttimor-Zäit" + + "\x13Ouschterinsel-Zäit\x19Ouschterinsel-Normalzäit\x19Ouschterinsel-Summ" + + "erzäit\x14Ecuadorianesch Zäit\x18Mëtteleuropäesch Zäit\x1eMëtteleuropäes" + + "ch Normalzäit\x1eMëtteleuropäesch Summerzäit\x14Osteuropäesch Zäit\x1aOs" + + "teuropäesch Normalzäit\x1aOsteuropäesch Summerzäit\x15Westeuropäesch Zäi" + + "t\x1bWesteuropäesch Normalzäit\x1bWesteuropäesch Summerzäit\x15Falklandi" + + "nselen-Zäit\x1bFalklandinselen-Normalzäit\x1bFalklandinselen-Summerzäit" + + "\x0dFidschi-Zäit\x13Fidschi-Normalzäit\x13Fidschi-Summerzäit\x19Franséis" + + "ch-Guayane-Zäit,Franséisch Süd- an Antarktisgebidder-Zäit\x0fGalapagos-Z" + + "äit\x0dGambier-Zäit\x0fGeorgesch Zäit\x15Georgesch Normalzäit\x15George" + + "sch Summerzäit\x15Gilbert-Inselen-Zäit\x18Mëttler Greenwich-Zäit\x12Ostg" + + "rönland-Zäit\x18Ostgrönland-Normalzäit\x18Ostgrönland-Summerzäit\x13West" + + "grönland-Zäit\x19Westgrönland-Normalzäit\x19Westgrönland-Summerzäit\x0aG" + + "uam-Zäit\x0aGolf-Zäit\x0cGuyana-Zäit\x14Hawaii-Aleuten-Zäit\x1aHawaii-Al" + + "euten-Normalzäit\x1aHawaii-Aleuten-Summerzäit\x0fHong-Kong-Zäit\x15Hong-" + + "Kong-Normalzäit\x15Hong-Kong-Summerzäit\x0aHovd-Zäit\x10Hovd-Normalzäit" + + "\x10Hovd-Summerzäit\x0dIndesch Zäit\x15Indeschen Ozean-Zäit\x0fIndochina" + + "-Zäit\x18Zentralindonesesch Zäit\x14Ostindonesesch Zäit\x15Westindoneses" + + "ch Zäit\x0eIranesch Zäit\x14Iranesch Normalzäit\x14Iranesch Summerzäit" + + "\x0dIrkutsk-Zäit\x13Irkutsk-Normalzäit\x13Irkutsk-Summerzäit\x10Israeles" + + "ch Zäit\x16Israelesch Normalzäit\x16Israelesch Summerzäit\x0fJapanesch Z" + + "äit\x15Japanesch Normalzäit\x15Japanesch Summerzäit\x11Kamtschatka-Zäit" + + "\x17Kamtschatka-Normalzäit\x17Kamtschatka-Summerzäit\x13Ostkasachesch Zä" + + "it\x14Westkasachesch Zäit\x10Koreanesch Zäit\x16Koreanesch Normalzäit" + + "\x16Koreanesch Summerzäit\x0cKosrae-Zäit\x11Krasnojarsk-Zäit\x17Krasnoja" + + "rsk-Normalzäit\x17Krasnojarsk-Summerzäit\x11Kirgisistan-Zäit\x13Linnenin" + + "selen-Zäit\x0fLord-Howe-Zäit\x15Lord-Howe-Normalzäit\x15Lord-Howe-Summer" + + "zäit\x14Macquarieinsel-Zäit\x0dMagadan-Zäit\x13Magadan-Normalzäit\x13Mag" + + "adan-Summerzäit\x10Malaysesch Zäit\x0eMaldiven-Zäit\x0fMarquesas-Zäit" + + "\x15Marshallinselen-Zäit\x0fMauritius-Zäit\x15Mauritius-Normalzäit\x15Ma" + + "uritius-Summerzäit\x0cMawson-Zäit\x15Nordwest-Mexiko-Zäit\x1bNordwest-Me" + + "xiko-Normalzäit\x1bNordwest-Mexiko-Summerzäit\x18Mexikanesch Pazifikzäit" + + "\x1fMexikanesch Pazifik-Normalzäit\x1fMexikanesch Pazifik-Summerzäit\x11" + + "Ulaanbaatar-Zäit\x17Ulaanbaatar-Normalzäit\x17Ulaanbaatar-Summerzäit\x0e" + + "Moskauer Zäit\x14Moskauer Normalzäit\x14Moskauer Summerzäit\x0dMyanmar-Z" + + "äit\x0bNauru-Zäit\x11Nepalesesch Zäit\x14Neikaledonesch Zäit\x1aNeikale" + + "donesch Normalzäit\x1aNeikaledonesch Summerzäit\x11Neiséiland-Zäit\x17Ne" + + "iséiland-Normalzäit\x17Neiséiland-Summerzäit\x11Neifundland-Zäit\x17Neif" + + "undland-Normalzäit\x17Neifundland-Summerzäit\x0aNiue-Zäit\x14Norfolkinse" + + "len-Zäit\x19Fernando-de-Noronha-Zäit\x1fFernando-de-Noronha-Normalzäit" + + "\x1fFernando-de-Noronha-Summerzäit\x11Nowosibirsk-Zäit\x17Nowosibirsk-No" + + "rmalzäit\x17Nowosibirsk-Summerzäit\x0aOmsk-Zäit\x10Omsk-Normalzäit\x10Om" + + "sk-Summerzäit\x12Pakistanesch Zäit\x18Pakistanesch Normalzäit\x18Pakista" + + "nesch Summerzäit\x0bPalau-Zäit\x15Papua-Neiguinea-Zäit\x14Paraguayanesch" + + " Zäit\x1aParaguayanesch Normalzäit\x1aParaguayanesch Summerzäit\x10Perua" + + "nesch Zäit\x16Peruanesch Normalzäit\x16Peruanesch Summerzäit\x14Philippi" + + "nnesch Zäit\x1aPhilippinnesch Normalzäit\x1aPhilippinnesch Summerzäit" + + "\x14Phoenixinselen-Zäit\x1dSaint-Pierre-a-Miquelon-Zäit#Saint-Pierre-a-M" + + "iquelon-Normalzäit#Saint-Pierre-a-Miquelon-Summerzäit\x15Pitcairninselen" + + "-Zäit\x0cPonape-Zäit\x0eRéunion-Zäit\x0dRothera-Zäit\x0eSakhalin-Zäit" + + "\x14Sakhalin-Normalzäit\x14Sakhalin-Summerzäit\x0cSamara-Zäit\x12Samara-" + + "Normalzäit\x12Samara-Summerzäit\x0bSamoa-Zäit\x11Samoa-Normalzäit\x11Sam" + + "oa-Summerzäit\x10Seychellen-Zäit\x16Singapur-Standardzäit\x14Salomoninse" + + "len-Zäit\x13Südgeorgesch Zäit\x0eSuriname-Zäit\x0bSyowa-Zäit\x0cTahiti-Z" + + "äit\x0cTaipei-Zäit\x12Taipei-Normalzäit\x12Taipei-Summerzäit\x13Tadschi" + + "kistan-Zäit\x0dTokelau-Zäit\x10Tonganesch Zäit\x16Tonganesch Normalzäit" + + "\x16Tonganesch Summerzäit\x0bChuuk-Zäit\x12Turkmenistan-Zäit\x18Turkmeni" + + "stan-Normalzäit\x18Turkmenistan-Summerzäit\x0cTuvalu-Zäit\x13Uruguayanes" + + "ch Zäit\x18Uruguyanesch Normalzäit\x19Uruguayanesch Summerzäit\x10Usbeki" + + "stan-Zäit\x16Usbekistan-Normalzäit\x16Usbekistan-Summerzäit\x0dVanuatu-Z" + + "äit\x13Vanuatu-Normalzäit\x13Vanuatu-Summerzäit\x0fVenezuela-Zäit\x11Wl" + + "adiwostok-Zäit\x17Wladiwostok-Normalzäit\x17Wladiwostok-Summerzäit\x0fWo" + + "lgograd-Zäit\x15Wolgograd-Normalzäit\x15Wolgograd-Summerzäit\x0cWostok-Z" + + "äit\x10Wake-Insel-Zäit\x15Wallis-a-Futuna-Zäit\x0dJakutsk-Zäit\x13Jakut" + + "sk-Normalzäit\x13Jakutsk-Summerzäit\x14Jekaterinbuerg-Zäit\x1aJekaterinb" + + "uerg-Normalzäit\x1aJekaterinbuerg-Summerzäit\x02Ma\x02De\x02Wu\x02Do\x02" + + "Fr\x03Sat\x03Mvu\x03Sib\x03Sit\x03Sin\x03Sih\x03Mgq\x03Mso\x03Bil\x03Tha" + + "\x03Hla" + +var bucket67 string = "" + // Size: 14732 bytes + "\x09Janwaliyo\x09Febwaliyo\x06Marisi\x05Apuli\x05Maayi\x05Juuni\x07Julaa" + + "yi\x07Agusito\x0aSebuttemba\x08Okitobba\x07Novemba\x07Desemba\x08Sabbiit" + + "i\x06Balaza\x09Lwakubiri\x09Lwakusatu\x07Lwakuna\x0aLwakutaano\x0aLwamuk" + + "aaga\x04Kya1\x04Kya2\x04Kya3\x04Kya4\x09Kyakuna 1\x09Kyakuna 2\x09Kyakun" + + "a 3\x09Kyakuna 4\x14Kulisito nga tannaza\x14Bukya Kulisito Azaal\x07Mule" + + "mbe\x05Mwezi\x06Lunaku\x05Ggulo\x08Lwaleero\x04Nkya\x18Lunaku lw’omu sab" + + "biiti\x05Saawa\x07Dakiika\x09Kasikonda\x0aSsaawa za:\x10Wiótheȟika Wí" + + "\x13Thiyóȟeyuŋka Wí\x16Ištáwičhayazaŋ Wí\x10Pȟežítȟo Wí\x13Čhaŋwápetȟo W" + + "í\x17Wípazukȟa-wašté Wí\x13Čhaŋpȟásapa Wí\x0fWasútȟuŋ Wí\x12Čhaŋwápeǧi " + + "Wí\x16Čhaŋwápe-kasná Wí\x0dWaníyetu Wí\x13Tȟahékapšuŋ Wí\x10Aŋpétuwakȟaŋ" + + "\x0fAŋpétuwaŋži\x0eAŋpétunuŋpa\x0dAŋpétuyamni\x0cAŋpétutopa\x0fAŋpétuzap" + + "taŋ\x11Owáŋgyužažapi\x08Ómakȟa\x17Ómakȟa kʼuŋ héhaŋ\x11Lé ómakȟa kiŋ\x1c" + + "Tȟokáta ómakȟa kiŋháŋ\"Letáŋhaŋ ómakȟa {0} kiŋháŋ\"Hékta ómakȟa {0} kʼuŋ" + + " héhaŋ\x03Wí\x12Wí kʼuŋ héhaŋ\x0cLé wí kiŋ\x17Tȟokáta wí kiŋháŋ#Letáŋhaŋ" + + " wíyawapi {0} kiŋháŋ#Hékta wíyawapi {0} kʼuŋ héhaŋ\x04Okó\x13Okó kʼuŋ hé" + + "haŋ\x0dLé okó kiŋ\x18Tȟokáta okó kiŋháŋ\x1eLetáŋhaŋ okó {0} kiŋháŋ\x1eHé" + + "kta okó {0} kʼuŋ héhaŋ\x08Aŋpétu\x0bȞtálehaŋ\x11Lé aŋpétu kiŋ\x15Híŋhaŋn" + + "i kiŋháŋ!Letáŋhaŋ {0}-čháŋ kiŋháŋ\"Hékta {0}-čháŋ k’uŋ héhaŋ\x0dOkó-aŋpé" + + "tu Aŋpétuwakȟáŋ kʼuŋ héhaŋ\x1aAŋpétuwakȟáŋ kiŋ lé\x1bAŋpétuwakȟáŋ kiŋháŋ" + + "\x1fAŋpétutȟokahe kʼuŋ héhaŋ\x19Aŋpétutȟokahe kiŋ lé\x1aAŋpétutȟokahe ki" + + "ŋháŋ\x1dAŋpétunuŋpa kʼuŋ héhaŋ\x17Aŋpétunuŋpa kiŋ lé\x18Aŋpétunuŋpa kiŋ" + + "háŋ\x1cAŋpétuyamni kʼuŋ héhaŋ\x16Aŋpétuyamni kiŋ lé\x17Aŋpétuyamni kiŋhá" + + "ŋ\x1bAŋpétutopa kʼuŋ héhaŋ\x15Aŋpétutopa kiŋ lé\x16Aŋpétutopa kiŋháŋ Aŋ" + + "pétuzaŋptaŋ kʼuŋ héhaŋ\x16Apétuzaptaŋ kiŋ lé\x19Aŋpétuzaptaŋ kiŋháŋ!Owáŋ" + + "kayužažapi kʼuŋ héhaŋ\x1bOwáŋkayužažapi kiŋ lé\x1cOwáŋkayužažapi kiŋháŋ" + + "\x08Owápȟe\"Letáŋhaŋ owápȟe {0} kiŋháŋ\"Hékta owápȟe {0} kʼuŋ héhaŋ\x16O" + + "wápȟe oȟʼáŋkȟo(Letáŋhaŋ oȟ’áŋkȟo {0} kiŋháŋ)Hékta oȟ’áŋkȟo {0} k’uŋ héha" + + "ŋ\x05Okpí\x1fLetáŋhaŋ okpí {0} kiŋháŋ Hékta okpí {0} k’uŋ héhaŋ\x10sánz" + + "á ya yambo\x13sánzá ya míbalé\x13sánzá ya mísáto\x11sánzá ya mínei\x13s" + + "ánzá ya mítáno\x13sánzá ya motóbá\x11sánzá ya nsambo\x11sánzá ya mwambe" + + "\x10sánzá ya libwa\x10sánzá ya zómi\x1esánzá ya zómi na mɔ̌kɔ́\x1csánzá " + + "ya zómi na míbalé\x03eye\x03ybo\x03mbl\x03mst\x03min\x03mtn\x03mps\x06ey" + + "enga\x12mokɔlɔ mwa yambo\x15mokɔlɔ mwa míbalé\x15mokɔlɔ mwa mísáto\x13mo" + + "kɔlɔ ya mínéi\x14mokɔlɔ ya mítáno\x09mpɔ́sɔ\x03SM1\x03SM2\x03SM3\x03SM4" + + "\x19sánzá mísáto ya yambo\x1csánzá mísáto ya míbalé\x1csánzá mísáto ya m" + + "ísáto\x1asánzá mísáto ya mínei\x0cntɔ́ngɔ́\x07mpókwa\x14Yambo ya Yézu K" + + "rís\x14Nsima ya Yézu Krís\x0alibóso ya\x0ansima ya Y\x07Ntángo\x05Mobú" + + "\x07Sánzá\x08Pɔ́sɔ\x08Mokɔlɔ\x0dLóbi elékí\x08Lɛlɔ́\x0cLóbi ekoyâ\x14Mok" + + "ɔlɔ ya pɔ́sɔ\x11Eleko ya mokɔlɔ\x06Ngonga\x07Monúti\x0cSɛkɔ́ndɛ\x11Nták" + + "á ya ngonga\x0dNgonga ya {0}\x15Ntángo ya Lubumbashi\x1eNtángo ya Afrík" + + "a ya Ɛ́sita\x1aNtángo ya Afríka ya Sidi\x12Ntángo ya Londoni\x12Ntángo y" + + "a Seyshel\x08ພ.ສ.\x06ຊີ\x06ຊູ\x09ຢິນ\x0cເມົາ\x0cເຊັນ\x09ຊື່\x06ວູ\x0cເວີ" + + "ຍ\x0fເຊິ່ນ\x06ຢູ\x09ຊູ່\x06ໄຮ\x10ເຈຍ-ຊິ\x0dຢີ-ຊູ\x13ບິງ-ຢິນ\x16ດິງ-ເມົ" + + "າ\x13ວູ-ເຊັນ\x0dຈີ-ຊິ\x10ແກງ-ວູ\x16ຊິນ-ເວີຍ\x13ເຣນ-ເຊນ\x10ກຸຍ-ຢູ\x0dໄຈ" + + "-ຊູ\x0dຢີ-ໄຮ\x10ບິງ-ຊີ\x10ດິງ-ຊູ\x10ວູ-ຢິນ\x13ຈີ-ເມົາ\x13ແກງ-ເຊນ\x10ຊິນ-" + + "ຊິ\x10ເຣນ-ວູ\x16ກຸຍ-ເວີຍ\x13ເຈຍ-ເຊນ\x0dຢີ-ຢູ\x10ບິງ-ຊູ\x10ດິງ-ໄຫ\x0dວູ" + + "-ຊິ\x0dຈີ-ຊູ\x13ເກງ-ຢິນ\x16ຊິນ-ເມົາ\x18ເຣນເຊິ່ນ\x10ກຸຍ-ຊິ\x0dໄຈ-ວູ\x13ຢີ" + + "-ເວີຍ\x13ບິງ-ເຊນ\x10ດິງ-ຢູ\x0dວູ-ຊູ\x0dຈີ-ໄຫ\x10ເກງ-ຊິ\x10ຊິນ-ຊູ\x13ເຣຍ-" + + "ຢິນ\x16ກຸຍ-ເມົາ\x10ໄຈ-ເຊນ\x0dຢີ-ຊິ\x10ບິງ-ວູ\x16ດິງ-ເວີຍ\x10ວູ-ເກນ\x0d" + + "ຈີ-ຢູ\x10ເກງ-ຊູ\x10ຊິນ-ໄຫ\x10ເຣນ-ຊິ\x10ກຸຍ-ຊູ\x13ເຈຍ-ຢິນ\x13ຢິ-ເມົາ" + + "\x18ບິງເຊິ່ນ\x10ດິງ-ຊິ\x0dວູ-ວູ\x13ຈີ-ເວີຍ\x13ເກງ-ເຊນ\x10ຊິນ-ຢູ\x10ເຣນ-ຊ" + + "ູ\x15ກຸຍຮ່າຍ\x06ໜູ\x12ງົວຜູ້\x0cເສືອ\x12ກະຕ່າຍ\x12ມັງກອນ\x06ງູ\x09ມ້າ" + + "\x09ແກະ\x09ລິງ\x12ໄກ່ຜູ້\x06ໝາ\x06ໝູ\x0cເທົາ\x0cບາບາ\x0cຮາໂຕ\x09ເຄຍ\x0cໂ" + + "ທບາ\x0fອຳເຊີ\x15ບາລຳຮາດ\x18ບາລາມູດາ\x12ບາສຮານ\x12ເປົານາ\x0fອີແປບ\x0fມາ" + + "ສລາ\x0fນາຊິວ\x0fອາເຊີ\x0fນາຊີວ\x1bແມສເຄີແຣມ\x0fເຕເກມ\x0cເຮດາ\x0fທາຊັສ" + + "\x09ເທີ\x15ເຍຄາທິດ\x15ເມກາບິດ\x12ເມຍເຊຍ\x12ເຈນບອດ\x0cເຊເນ\x0cຮຳເລ\x12ເນແ" + + "ຮສ໌\x15ພາກູເມນ\x15EEEEທີ d MMMM y G\x08ມ.ກ.\x08ກ.ພ.\x08ມ.ນ.\x08ມ.ສ." + + "\x08ພ.ພ.\x0bມິ.ຖ.\x08ກ.ລ.\x08ສ.ຫ.\x08ກ.ຍ.\x08ຕ.ລ.\x08ພ.ຈ.\x08ທ.ວ.\x0fກຸມ" + + "ພາ\x0cມີນາ\x0cເມສາ\x15ພຶດສະພາ\x12ມິຖຸນາ\x15ກໍລະກົດ\x0fສິງຫາ\x0fກັນຍາ" + + "\x0cຕຸລາ\x0fພະຈິກ\x0fທັນວາ\x0fອາທິດ\x09ຈັນ\x12ອັງຄານ\x09ພຸດ\x0fພະຫັດ\x09" + + "ສຸກ\x0cເສົາ\x06ອາ\x03ຈ\x03ອ\x03ພ\x06ພຫ\x06ສຸ\x03ສ\x07ອາ.\x04ຈ.\x04ອ." + + "\x04ພ.\x07ພຫ.\x07ສຸ.\x04ສ.\x18ວັນອາທິດ\x12ວັນຈັນ\x1bວັນອັງຄານ\x12ວັນພຸດ" + + "\x18ວັນພະຫັດ\x12ວັນສຸກ\x15ວັນເສົາ\x07ຕມ1\x07ຕມ2\x07ຕມ3\x07ຕມ4\x14ໄຕຣມາດ " + + "1\x14ໄຕຣມາດ 2\x14ໄຕຣມາດ 3\x14ໄຕຣມາດ 4\x04ຕ1\x04ຕ2\x04ຕ3\x04ຕ4\x15ທ່ຽງຄືນ" + + "\x18ກ່ອນທ່ຽງ\x15ຕອນທ່ຽງ\x18ຫຼັງທ່ຽງ\x18ຕອນເຊົ້າ\x15ຕອນບ່າຍ\x12ຕອນແລງ\x12" + + "ກາງຄືນ\x06ທຄ\x06ກທ\x03ທ\x09ຫຼທ\x1bຕອນກາງຄືນ\x18ທ່ຽງ\u200bຄືນ\x0cທ່ຽງ" + + "\x12\u200bເຊົ້າ\x09ສວຍ\x09ແລງ\x18\u200bກາງ\u200bຄືນ\x03ຊ\x03ລ\x06ກຄ0ກ່ອນ" + + "ຄຣິດສັກກະລາດ3ກ່ອນສາກົນສັກກະລາດ$ຄຣິດສັກກະລາດ'ສາກົນສັກກະລາດ\x15ກ່ອນ ຄ.ສ." + + "\x1dກ່ອນຍຸກ ຄ.ສ\x08ຄ.ສ.\x11ຍຸກ ຄ.ສ\x16EEEE ທີ d MMMM G y5H ໂມງ m ນາທີ ss" + + " ວິນາທີ zzzz2H ໂມງ m ນາທີ ss ວິນາທີ z\x12ທຣິດຣີ\x0fເຮວານ\x12ກິດເລບ\x0fເຕ" + + "ເວດ\x0fຊີວັດ\x0eອາດາ I\x0cອາດາ\x0fອາດາ II\x12ນິດຊານ\x0fອີຍາຣ\x0fສີວານ" + + "\x0cຕາມູ\x09ເອບ\x0cອີລູ\x0fຈິຕຣາ\x12ວິສາຂະ\x0fເຊດຖາ\x0fອັດສາ\x18ສາຣາວານາ" + + "\x0fພະຕຣາ\x15ອັສວິຊາ\x15ການຕິກາ!ອັກຣາຮາຢານາ\x0cປຸສາ\x0cມາຄະ\x15ຜາລກຸນີ" + + "\x12ປຸສະຍາ\x0fມຸຮັດ\x0cເຄາະ\x11ຮອດບີ 1\x11ຮອກບີ 2\x0eນຸມາ 1\x0eນຸມາ 2" + + "\x0cເຮາະ\x0cຊະອ໌\x12ເຮາະມະ\x0cເຊົາ\x15ຊຸລກິອຸ\x12ຊຸລຫິຈ\x15ມຸຣະຮອມ\x0fຊາ" + + "ຟາຣ\x11ຮອດບີ 2\x14ຈຸມາດາ 1\x14ຈຸມາດາ 2\x0fຮາຈັບ\x0fຊະບານ\x15ຮາມາດອນ" + + "\x15ເຊົາວັດ\x1bດຸອັດກິດະ\x1bດຸອັດກິຈະ\x11ຮອກບີ 1\x06ຊາ\x1eທະອິກະ (645–65" + + "0)\x1eຮາກູຊິ (650–671)\x1eຮາກູໂຮ (672–686)\x18ຊູໂຊ (686–701)\x1eທາອິໂຮ (" + + "701–704)\x1bເຄອຸງ (704–708)\x18ວະໂດ (708–715)\x1eເຣອິກິ (715–717)\x18ໂຢໂ" + + "ຣ (717–724)\x1bຈິງກິ (724–729)!ເທັມປຽວ (729–749)1ເທັມປຽວ-ຄໍາໂປ (749–74" + + "9).ເທັມປຽວ-ໂຊໂຮ (749–757).ເທັມປຽວ-ໂຮຈິ (757–765)4ເທັມປຽວ-ຈິງໂງະ (765–767" + + ").ຈິງໂງະ-ເຄອຸງ (767–770)\x18ໂຮກິ (770–780)\x1fເທັນ-ໂອ (781–782)'ເອັນຣຢາກ" + + "ຸ (782–806)\x1eດາອິໂດ (806–810)\x1bໂກນິນ (810–824)\x1eເທັນໂຊ (824–834)" + + "\x18ໂຊວະ (834–848)\x18ກະໂຈ (848–851)\x1bນິນຈູ (851–854)!ສະອິໂກະ (854–857" + + ")!ເທັນນານ (857–859)\x1bໂຈງານ (859–877)\x1eເກັນເກ (877–885)\x1bນິນນາ (885" + + "–889)\x1eກໍາປຽວ (889–898)\x1eໂຊຕາອິ (898–901)\x1eເອັນງິ (901–923)\x1eເ" + + "ອັນໂຊ (923–931)\x18ໂຊເຮ (931–938)!ເທັນງຽວ (938–947)'ເທັນຣຢາກູ (947–957" + + ")'ເທັນໂຕະກຸ (957–961)\x18ໂອວະ (961–964)\x18ໂກໂຮ (964–968)\x18ອານະ (968–9" + + "70)'ເທັນໂຣະກຸ (970–973)%ເທັນ-ເອັນ (973–976)\x1eໂຈເງັນ (976–978)$ເທັນເງັນ" + + " (978–983)\x1bເອການ (983–985)\x1bການນະ (985–987)\x1fເອ-ເອັນ (987–989)" + + "\x18ເອໂຊ (989–990)!ໂຊຣຢະກຸ (990–995)!ໂຊໂຕະກຸ (995–999)\x19ໂຊໂຮ (999–1004" + + ")\x1dການໂກ (1004–1012)\x1dໂຊຫວະ (1012–1017) ການນິງ (1017–1021)\x1dຈິອານ " + + "(1021–1024)\x1dມານຈຸ (1024–1028) ໂຊເງັນ (1028–1037)&ໂຊເຣຢະກຸ (1037–1040)" + + "\x1dໂຊຄິວ (1040–1044)&ການໂຕະກຸ (1044–1046)\x1dເອະໂຊ (1046–1053) ເທັນງິ (" + + "1053–1058)\x1aໂກເຮ (1058–1065)&ຈິເຣຢະກຸ (1065–1069)#ເອັນຄິວ (1069–1074)" + + "\x1dໂຊະໂຮ (1074–1077))ໂຊະເຣຢະກຸ (1077–1081)\x1dເອໂຊະ (1081–1084)#ໂອໂຕະກຸ" + + " (1084–1087)\x1dການຈິ (1087–1094)\x1aກາໂຊ (1094–1096) ເອະໂຊະ (1096–1097)" + + "&ໂຊະໂຕະກຸ (1097–1099)\x1dໂກະວະ (1099–1104)\x1dໂຊະຈິ (1104–1106)\x1dກາໂຊະ" + + " (1106–1108)#ເທັນນິນ (1108–1110)!ເທັນ-ອິ (1110–1113)\x1dເອກິວ (1113–1118" + + ")!ເຄັນ-ເອ (1118–1120) ໂຮະອານ (1120–1124) ເທັນຈິ (1124–1126) ດາອິຈິ (1126" + + "–1131)#ເທັນໂຊະ (1131–1132) ໂຊະໂຊະ (1132–1135) ໂຮເອັນ (1135–1141)\x1aເອ" + + "ຈິ (1141–1142)\x1dໂກະຈິ (1142–1144)#ເທັນໂຢະ (1144–1145) ຄິວອານ (1145–1" + + "151)\x1dນິນເປ (1151–1154)\x1dຄິວຈຸ (1154–1156) ໂຮເຄັນ (1156–1159)\x1aເຮຈ" + + "ິ (1159–1160)&ເອເຣຢະກຸ (1160–1161)\x1aໂອໂຊ (1161–1163) ໂຊະການ (1163–11" + + "65)\x1dເອມານ (1165–1166)!ນິນ-ອານ (1166–1169)\x1aກະໂອ (1169–1171) ໂຊະອານ " + + "(1171–1175)#ອານເຄັນ (1175–1177)\x1dຈິໂຊະ (1177–1181)\x1dໂຢະວະ (1181–1182" + + ")\x1dຈຸເອະ (1182–1184),ເຄັນເຣຢຸກິ (1184–1185)\x1dບັນຈິ (1185–1190)#ເກັນຄ" + + "ິວ (1190–1199)\x1aໂຊຈິ (1199–1201)#ເກັນນິນ (1201–1204)#ເຄັນກິວ (1204–1" + + "206)$ເກັນ-ເອະ (1206–1207)#ໂຊະເຄັນ (1207–1211),ເກັນເຣຢະກຸ (1211–1213)#ເກັ" + + "ນໂປະ (1213–1219) ໂຊະກິວ (1219–1222) ໂຈະໂອະ (1222–1224)#ເຄັນນິນ (1224–1" + + "225) ກາໂຮກຸ (1225–1227) ອານເຕະ (1227–1229)\x1dການກິ (1229–1232) ໂຈະເອະ (" + + "1232–1233)&ເທັມປຸກຸ (1233–1234))ບັນເຣຢະກຸ (1234–1235)\x1dກາເຕະ (1235–123" + + "8))ເຣຢະກຸນິນ (1238–1239)!ເອັນ-ໂອ (1239–1240)\x1dນິນຈີ (1240–1243) ຄານເຈນ" + + " (1243–1247)\x1aໂຫຈີ (1247–1249)\x1dເຄນໂຊ (1249–1256)\x1dໂຄເຈນ (1256–125" + + "7)\x1aໂຊກາ (1257–1259)\x1dໂຊເກນ (1259–1260)\x1eບຸນ-ໂອ (1260–1261)\x1aໂຄໂ" + + "ຊ (1261–1264)\x1eບຸນ-ອີ (1264–1275)\x1dເຄນຈີ (1275–1278)\x1aເຄິນ (1278" + + "–1288)\x14ໂຊ (1288–1293) ອິນນິນ (1293–1299)\x1aເຊີນ (1299–1302) ເຄນເຈນ" + + " (1302–1303)\x1dຄາເຈນ (1303–1306) ໂຕກູຈິ (1306–1308)\x1dອິນກິ (1308–1311" + + ")\x1aໂອໂຊ (1300–1312)\x1aໂຊວາ (1312–1317)\x1dບຸນໂປ (1317–1319)\x1aຈີໂນ (" + + "1319–1321) ເຈນກຽວ (1321–1324)\x1aໂຊຊິ (1324–1326) ຄາຣາກິ (1326–1329)#ເຈນ" + + "ໂຕກູ (1329–1331)\x1dເຈນໂກ (1331–1334) ເກັມມຸ (1334–1336)&ເອັນເຈັນ (133" + + "6–1340) ໂກໂກກຸ (1340–1346)\x1aໂຊຊິ (1346–1370)#ເຄນໂຕກຸ (1370–1372)\x1dບຸ" + + "ນຊຸ (1372–1375) ເທັນຈຸ (1375–1379) ຄໍຢາກຸ (1379–1381)\x1aໂກວາ (1381–13" + + "84) ເຈັນຊຸ (1384–1392) ມີໂຕກຸ (1384–1387)\x1aກາກິ (1387–1389)\x14ຄູ (138" + + "9–1390) ມິໂຕກຸ (1390–1394)\x1aໂອອິ (1394–1428)\x1aໂຊໂຊ (1428–1429)\x1dອິ" + + "ກຽວ (1429–1441) ກາກິຊຸ (1441–1444)!ບຸນ-ອານ (1444–1449) ໂຫໂຕກຸ (1449–14" + + "52)#ກຽວໂຕກຸ (1452–1455)\x1aເກໂຊ (1455–1457) ໂຊໂຣກຸ (1457–1460)\x1dຄານໂຊ " + + "(1460–1466)\x1dບຸນໂຊ (1466–1467)\x1dໂອນິນ (1467–1469)\x1dບຸນມິ (1469–148" + + "7)\x1dໂຊກຽວ (1487–1489)&ເອັນໂຕກຸ (1489–1492)\x1aມິໂອ (1492–1501)\x1dບຸນກ" + + "ິ (1501–1504)\x1aອິໂຊ (1504–1521)\x1aໄຕອິ (1521–1528)#ກຽວໂຣກຸ (1528–15" + + "32)#ເທັນມອນ (1532–1555)\x1aໂກຈິ (1555–1558) ອິໂຣກຸ (1558–1570) ເຈັນກິ (1" + + "570–1573) ເທັນໂຊ (1573–1592)#ບຸນໂຣກຸ (1592–1596)\x1aຄິໂຊ (1596–1615) ເກັ" + + "ນວາ (1615–1624)\x1eຄານ-ອິ (1624–1644)\x1aໂຊໂຊ (1644–1648)\x17ຄຽນ (1648" + + "–1652)\x14ຊຸ (1652–1655)#ເມຍຢາກຸ (1655–1658)\x1dແມນຈິ (1658–1661) ການບ" + + "ຸນ (1661–1673) ເອັນໂປ (1673–1681) ເທັນວາ (1681–1684)\x1dໂຈກຽວ (1684–16" + + "88)&ເຈັນໂຣກຸ (1688–1704)\x1aໂຫອິ (1704–1711) ຊຸຕຸກຸ (1711–1716)\x1dກຽວຫຸ" + + " (1716–1736)#ເຈັນບຸນ (1736–1741)\x1dຄານໂປ (1741–1744)#ເອັນກຽວ (1744–1748" + + ")!ຄານ-ອິນ (1748–1751) ໂຫຢາກຸ (1751–1764)\x1dເມຍວາ (1764–1772)!ເອັນ-ອິ (1" + + "772–1781) ເທັນມິ (1781–1789)\x1dຄານຊິ (1789–1801)\x1dກຽວວາ (1801–1804)" + + "\x1dບຸນກາ (1804–1818)\x1dບຸນຊິ (1818–1830) ເທັນໂປ (1830–1844)\x1aກຸກາ (1" + + "844–1848)\x1aກາອິ (1848–1854) ແອັນຊິ (1854–1860)'ແມັນ-ເອັນ (1860–1861)" + + "\x1dບຸນກຸ (1861–1864)\x1dເຈນຈີ (1864–1865)\x1aຄີໂອ (1865–1868)\x0cມີຈີ" + + "\x0cໄຕໂຊ\x0cໂຊວາ\x0cຮີຊີ\x07Novemba\x07Desemba" + +var bucket68 string = "" + // Size: 24333 bytes + "\x18ຟາຣວາດິນ!ອໍຣດີບີເຫຣດ\x12ຄໍຣເດດ\x09ແຕຣ\x12ມໍຣເດດ\x15ຊາຣຫິວາ\x09ເມີ" + + "\x0fອາບານ\x0cອາຊາ\x09ດີຣ\x12ບຣາມານ\x12ເອສຟານ\x18ຟຣາວາດິນ\x0fອາຊາຣ\x12ບຣາ" + + "ແມນ!ອໍຣດີບີເຫຮດ\x15ຊາຣລິວາ\x18ປີເປີເຊຍ\x13ກ່ອນ R.O.C.\x0cສະໄໝ\x06ປີ" + + "\x0fປີກາຍ\x0fປີນີ້\x0fປີໜ້າ\x1aໃນອີກ {0} ປີ\x16{0} ປີກ່ອນ\x12ໄຕຣມາດ'ໄຕຣມ" + + "າດກ່ອນໜ້າ\x1bໄຕຣມາດນີ້\x1bໄຕຣມາດໜ້າ&ໃນອີກ {0} ໄຕຣມາດ\"{0} ໄຕຣມາດກ່ອນ" + + "\x07ຕມ.\x12ໃນ {0} ຕມ.\x18{0} ຕມ. ກ່ອນ\x0fເດືອນ\x1bເດືອນແລ້ວ\x18ເດືອນນີ້" + + "\x18ເດືອນໜ້າ#ໃນອີກ {0} ເດືອນ\x1f{0} ເດືອນກ່ອນ\x04ດ.\x18ໃນອີກ {0} ດ.\x15{" + + "0} ດ. ກ່ອນ\x1bອາທິດແລ້ວ\x18ອາທິດນີ້\x18ອາທິດໜ້າ#ໃນອີກ {0} ອາທິດ\x1f{0} ອ" + + "າທິດກ່ອນ\x19ອາທິດທີ {0}\x1bໃນອີກ {0} ອທ.\x18{0} ອທ. ກ່ອນ'ອາທິດຂອງເດືອນ" + + "\x14ອທ ຂອງ ດ\x09ມື້\x15ມື້ກ່ອນ\x12ມື້ວານ\x12ມື້ນີ້\x15ມື້ອື່ນ\x0fມື້ຮື" + + "\x1dໃນອີກ {0} ມື້\x19{0} ມື້ກ່ອນ\x18ມື້ຂອງປີ!ມື້ຂອງອາທິດ6ມື້ເຮັດວຽກຂອງເດ" + + "ືອນ\x17ມຮວ ຂອງ ດ$ວັນອາທິດແລ້ວ!ວັນອາທິດນີ້!ວັນອາທິດໜ້າ#ໃນ {0} ວັນອາທິດ(" + + "{0} ວັນອາທິດກ່ອນ\x1eວັນທິດແລ້ວ\x1bວັນທິດນີ້\x1bວັນທິດໜ້າ\x14ອາ. ແລ້ວ\x11" + + "ອາ. ນີ້\x11ອາ. ໜ້າ\x1eວັນຈັນແລ້ວ\x1bວັນຈັນນີ້\x1bວັນຈັນໜ້າ\x1dໃນ {0} ວ" + + "ັນຈັນ\"{0} ວັນຈັນກ່ອນ\x15ຈັນແລ້ວ\x12ຈັນນີ້\x12ຈັນໜ້າ\x11ຈ. ແລ້ວ\x0eຈ. " + + "ນີ້\x0eຈ. ໜ້າ'ວັນອັງຄານແລ້ວ$ວັນອັງຄານນີ້$ວັນອັງຄານໜ້າ&ໃນ {0} ວັນອັງຄານ" + + "+{0} ວັນອັງຄານກ່ອນ\x1eອັງຄານແລ້ວ\x1bອັງຄານນີ້\x1bອັງຄານໜ້າ\x1eວັນພຸດແລ້ວ" + + "\x1bວັນພຸດນີ້\x1bວັນພຸດໜ້າ\x1dໃນ {0} ວັນພຸດ\"{0} ວັນພຸດກ່ອນ\x15ພຸດແລ້ວ" + + "\x12ພຸດນີ້\x12ພຸດໜ້າ\x14ພຸ. ແລ້ວ\x11ພຸ. ນີ້\x11ພຸ. ໜ້າ$ວັນພະຫັດແລ້ວ!ວັນພ" + + "ະຫັດນີ້!ວັນພະຫັດໜ້າ#ໃນ {0} ວັນພະຫັດ({0} ວັນພະຫັດກ່ອນ\x1bພະຫັດແລ້ວ\x18ພ" + + "ະຫັດນີ້\x18ພະຫັດໜ້າ\x14ພຫ. ແລ້ວ\x11ພຫ. ນີ້\x11ພຫ. ໜ້າ\x1eວັນສຸກແລ້ວ" + + "\x1bວັນສຸກນີ້\x1bວັນສຸກໜ້າ&ໃນອີກ {0} ວັນສຸກ\"{0} ວັນສຸກກ່ອນ\x15ສຸກແລ້ວ" + + "\x12ສຸກນີ້\x12ສຸກໜ້າ\x14ສຸ. ແລ້ວ\x11ສຸ. ນີ້\x11ສຸ. ໜ້າ!ວັນເສົາແລ້ວ\x1eວັ" + + "ນເສົານີ້\x1eວັນເສົາໜ້າ ໃນ {0} ວັນເສົາ%{0} ວັນເສົາກ່ອນ\x18ເສົາແລ້ວ\x15ເ" + + "ສົານີ້\x15ເສົາໜ້າ\x11ສ. ແລ້ວ\x0eສ. ນີ້\x0eສ. ໜ້າ1ກ່ອນທ່ຽງ/ຫຼັງທ່ຽງ\x15" + + "ຊົ່ວໂມງ\x1eຊົ່ວໂມງນີ້)ໃນອີກ {0} ຊົ່ວໂມງ%{0} ຊົ່ວໂມງກ່ອນ\x07ຊມ.\x1bໃນອີ" + + "ກ {0} ຊມ.\x18{0} ຊມ. ກ່ອນ\x0cນາທີ\x15ນາທີນີ້\"{0} ໃນອີກ 0 ນາທີ\x1c{0} " + + "ນາທີກ່ອນ\x07ນທ.\x12ໃນ {0} ນທ.\x18{0} ນທ. ກ່ອນ\x12ວິນາທີ\x12ຕອນນີ້&ໃນອີ" + + "ກ {0} ວິນາທີ\"{0} ວິນາທີກ່ອນ\x07ວິ.\x12ໃນ {0} ວິ.\x18{0} ວິ. ກ່ອນ\x15ເ" + + "ຂດເວລາ\x10ເວລາ {0}%ເວລາກາງເວັນ {0}(ເວລາມາດຕະຖານ {0}6ເວລາສາກົນເຊີງພິກັດ" + + "Hເວ\u200bລາ\u200bລະ\u200bດູ\u200bຮ້ອນ\u200bອັງ\u200bກິດHເວ\u200bລາ\u200b" + + "ມາດ\u200bຕະ\u200bຖານ\u200bໄອ\u200bຣິ\u200bຊ$ເວລາຂອງອາເກຣ<ເວລາມາດຕະຖານຂ" + + "ອງອາເກຣ<ເວລາລະດູຮ້ອນຂອງອາເກຣ.ເວລາ ອັຟການິສຖານ9ເວ\u200bລາ\u200bອາ\u200b" + + "ຟຣິ\u200bກາ\u200bກາງQເວ\u200bລາ\u200bອາ\u200bຟຣິ\u200bກາ\u200bຕາ\u200b" + + "ເວັນ\u200bອອກ9ເວ\u200bລາ\u200bອາ\u200bຟຣິ\u200bກາ\u200bໃຕ້Qເວ\u200bລາ" + + "\u200bອາ\u200bຟຣິ\u200bກາ\u200bຕາ\u200bເວັນ\u200bຕົກrເວ\u200bລາ\u200bມາດ" + + "\u200bຕະ\u200bຖານ\u200bອາ\u200bຟຣິ\u200bກາ\u200bຕາ\u200bເວັນ\u200bຕົກrເວ" + + "\u200bລາ\u200bລະ\u200bດູ\u200bຮ້ອນ\u200bອາ\u200bຟຣິ\u200bກາ\u200bຕາ" + + "\u200bເວັນ\u200bຕົກ!ເວລາອະແລສກາ9ເວລາມາດຕະຖານອະແລສກາ6ເວລາກາງເວັນອະແລສກາ" + + "\x1eເວລາອໍມາຕີ6ເວລາມາດຕະຖານອໍມາຕີ6ເວລາລະດູຮ້ອນອໍມາຕີ3ເວລາຕາມເຂດອາເມຊອນKເ" + + "ວ\u200bລາ\u200bມາດ\u200bຕະ\u200bຖານອາ\u200bເມ\u200bຊອນKເວ\u200bລາ" + + "\u200bລະ\u200bດູ\u200bຮ້ອນອາ\u200bເມ\u200bຊອນ\x15ເວລາກາງ-ເວລາມາດຕະຖານກາງ" + + "*ເວລາກາງເວັນກາງ'ເວລາຕາເວັນອອກ?ເວລາມາດຕະຖານຕາເວັນອອກ<ເວລາກາງເວັນຕາເວັນອອກ" + + "'ເວລາແຖບພູເຂົາ?ເວລາມາດຕະຖານແຖບພູເຂົາ<ເວລາກາງເວັນແຖບພູເຂົາ!ເວລາແປຊິຟິກ9ເວ" + + "ລາມາດຕະຖານແປຊິຟິກ6ເວລາກາງເວັນແປຊິຟິກ\x1bເວລາເອເພຍ3ເວລາມາດຕະຖານເອເພຍ0ເວ" + + "ລາກາງເວັນອາເພຍ!ເວລາອັດຕາອູ9ເວລາມາດຕະຖານອັດຕາອູ9ເວລາລະດູຮ້ອນອັດຕາອູ!ເວລ" + + "າອັດໂຕເບ9ເວລາມາດຕະຖານອັດໂຕເບ9ເວລາລະດູຮ້ອນອັດໂຕເບ-ເວ\u200bລາ\u200bອາ" + + "\u200bຣາ\u200bບຽນKເວ\u200bລາ\u200bມາດ\u200bຕະ\u200bຖານອາ\u200bຣາ\u200bບຽ" + + "ນ6ເວລາກາງເວັນອາຣາບຽນ3ເວ\u200bລາ\u200bອາ\u200bເຈ\u200bທິ\u200bນາW\u200b" + + "ເວ\u200bລາ\u200bມາດ\u200bຕະ\u200bຖານອາ\u200bເຈນ\u200bທິ\u200bນາZ\u200b" + + "ເວ\u200bລາ\u200bລະ\u200bດູ\u200bຮ້ອນ\u200bອາ\u200bເຈນ\u200bທິ\u200bນາQ" + + "ເວ\u200bລາ\u200bເວ\u200bສ\u200bເທິນອາ\u200bເຈນ\u200bທິ\u200bນາoເວ" + + "\u200bລາ\u200bມາດ\u200bຕະ\u200bຖານເວ\u200bສ\u200bເທິນອາ\u200bເຈນ\u200bທິ" + + "\u200bນາoເວ\u200bລາ\u200bລະ\u200bດູ\u200bຮ້ອນເວ\u200bສ\u200bເທິນອາ\u200b" + + "ເຈນ\u200bທິ\u200bນາ!ເວລາອາເມເນຍ9ເວລາມາດຕະຖານອາເມເນຍ9ເວລາລະດູຮ້ອນອາເມເນ" + + "ຍ-ເວລາຂອງອາແລນຕິກEເວລາມາດຕະຖານຂອງອາແລນຕິກBເວລາກາງເວັນຂອງອາແລນຕິກ?ເວ" + + "\u200bລາອອ\u200bສ\u200bເຕຣ\u200bເລຍ\u200bກາງ`ເວ\u200bລາມາດ\u200bຕະ\u200b" + + "ຖານອອ\u200bສ\u200bເຕຣ\u200bເລຍ\u200bກ\u200bາງZເວ\u200bລາ\u200bຕອນ" + + "\u200bທ່ຽງ\u200bອອສ\u200bເຕຣ\u200bເລຍ\u200bກາງ`ເວ\u200bລາອອສ\u200bເຕຣ" + + "\u200bລຽນ\u200bກາງ\u200bຕາ\u200bເວັນ\u200bຕົກ\x81ເວ\u200bລາ\u200bມາດ" + + "\u200bຕະ\u200bຖານອອສ\u200bເຕຣ\u200bລຽນ\u200bກາງ\u200bຕາ\u200bເວັນ\u200bຕ" + + "ົກ~ເວ\u200bລາ\u200bຕອນ\u200bທ່ຽງ\u200bອອສ\u200bເຕຣ\u200bລຽນ\u200bກາງ" + + "\u200bຕາ\u200bເວັນ\u200bຕົກTເວ\u200bລາອອສ\u200bເຕຣ\u200bລຽນ\u200bຕາ" + + "\u200bເວັນ\u200bອອກxເວ\u200bລາ\u200bມາດຕະຖານ\u200b\u200b\u200bອອສ\u200bເ" + + "ຕຣ\u200bລຽນ\u200bຕາ\u200bເວັນ\u200bອອກrເວ\u200bລາ\u200bຕອນ\u200bທ່ຽງ" + + "\u200bອອສ\u200bເຕຣ\u200bລຽນ\u200bຕາ\u200bເວັນ\u200bອອກWເວ\u200bລາ\u200bອ" + + "ອສ\u200bເຕຣ\u200bເລຍ\u200bຕາ\u200bເວັນ\u200bຕົກxເວ\u200bລາ\u200bມາ" + + "\u200bດ\u200bຕະ\u200bຖານອອສ\u200bເຕຣ\u200bລຽນ\u200bຕາ\u200bເວັນ\u200bຕົກ" + + "rເວ\u200bລາ\u200bຕອນ\u200bທ່ຽງ\u200bອອສ\u200bເຕຣ\u200bລຽນ\u200bຕາ\u200bເ" + + "ວັນ\u200bຕົກ-ເວລາອັສເຊີໄບຈັນEເວລາມາດຕະຖານອັສເຊີໄບຈັນEເວລາລະດູຮ້ອນອັສເຊ" + + "ີໄບຈັນ0ເວ\u200bລາ\u200bອາ\u200bໂຊ\u200bເຣ\u200bສNເວ\u200bລາ\u200bມາດ" + + "\u200bຕະ\u200bຖານອາ\u200bໂຊ\u200bເຣ\u200bສNເວ\u200bລາ\u200bລະ\u200bດູ" + + "\u200bຮ້ອນອາ\u200bໂຊ\u200bເຣ\u200bສ+ເວລາ ບັງກະລາເທດCເວລາມາດຕະຖານ ບັງກະລາ" + + "ເທດDເວລາ ລະດູຮ້ອນ ບັງກະລາເທດ$ເວ\u200bລາ\u200bພູ\u200bຖານ-ເວ\u200bລາ" + + "\u200bໂບ\u200bລິ\u200bເວຍ6ເວລາຕາມເຂດບຣາຊິເລຍ<ເວລາມາດຕາຖານເບຣຊີເລຍ`ເວລາຕາ" + + "ມເຂດລະດູຮ້ອນຕາມເຂດບຣາຊີເລຍK\u200bເວ\u200bລາບຣູ\u200bໄນດາ\u200bຣຸສ" + + "\u200bຊາ\u200bລາມ*ເວ\u200bລາ\u200bເຄບ\u200bເວີດN\u200bເວ\u200bລາ\u200bມາ" + + "ດ\u200bຕະ\u200bຖານ\u200bເຄບ\u200bເວີດKເວ\u200bລາ\u200bລະ\u200bດູ\u200b" + + "ຮ້ອນ\u200bເຄບ\u200bເວີດ\x18ເວລາເຄຊີ*ເວ\u200bລາ\u200bຈາ\u200bໂມ\u200bໂຣ" + + "$ເວ\u200bລາ\u200bຊາ\u200bທາມEເວ\u200bລາ\u200bມາດ\u200bຕະ\u200bຖານ\u200bຊ" + + "າ\u200bທາມ?ເວ\u200bລາ\u200bຕອນ\u200bທ່ຽງ\u200bຊາ\u200bທາມ!ເວ\u200bລາ" + + "\u200bຊິ\u200bລີ?ເວ\u200bລາ\u200bມາດ\u200bຕະ\u200bຖານຊິ\u200bລີ?ເວ\u200b" + + "ລາ\u200bລະ\u200bດູ\u200bຮ້ອນຊິ\u200bລີ\x1bເວ\u200bລາ\u200bຈີນ-ເວລາມາດຕ" + + "ະຖານຈີນ9\u200bເວ\u200bລາ\u200bຕອນ\u200bທ່ຽງ\u200bຈີນ0ເວ\u200bລາ\u200bໂ" + + "ຊຍ\u200bບາ\u200bຊັນ<ເວລາມາດຕະຖານໂຊຍບາຊັນBເວລາລະ\u200bດູ\u200bຮ້ອນໂຊຍບາ" + + "ຊັນ<ເວ\u200bລາ\u200bເກາະ\u200bຄ\u200bຣິສ\u200bມາສ3ເວລາຫມູ່ເກາະໂກໂກສ$ເວ" + + "ລາໂຄລໍາເບຍ9ເວລາມາດຕະຖານໂຄລຳເບຍ<ເວລາລະດູຮ້ອນໂຄລໍາເບຍ-ເວລາຫມູ່ເກາະຄຸກEເວ" + + "ລາມາດຕະຖານຫມູ່ເກາະຄຸກiເວ\u200bລາ\u200bເຄິ່ງ\u200bລະ\u200bດູ\u200bຮ້ອນ" + + "\u200bໝູ່\u200bເກາະ\u200bຄຸກ\x1bເວລາຄິວບາ<ເວລາມາດຕະຖານຂອງຄິວບາ0ເວລາກາງເວ" + + "ັນຄິວບາ\x1bເວລາເດວິດ*ເວລາດູມອງດູວິລ3ເວລາຕີມໍຕາເວັນອອກ9ເວ\u200bລາ\u200b" + + "ເກາະ\u200bອີ\u200bສ\u200bເຕີWເວ\u200bລາ\u200bມາດ\u200bຕະ\u200bຖານເກາະ" + + "\u200bອີ\u200bສ\u200bເຕີWເວ\u200bລາ\u200bລະ\u200bດູ\u200bຮ້ອນເກາະ\u200bອ" + + "ີ\u200bສ\u200bເຕີ-ເວ\u200bລາ\u200bເອ\u200bກົວ\u200bດໍ0ເວ\u200bລາ\u200b" + + "ຢູ\u200bໂຣບ\u200bກາງNເວ\u200bລາ\u200bມາດ\u200bຕະ\u200bຖານ\u200bຢູ" + + "\u200bໂຣບກາງT\u200bເວ\u200bລາ\u200bລະ\u200bດູ\u200bຮ້ອນ\u200bຢູ\u200bໂຣບ" + + "\u200bກາງHເວ\u200bລາ\u200bຢູ\u200bໂຣບ\u200bຕາ\u200bເວັນ\u200bອອກlເວ" + + "\u200bລາ\u200bມາ\u200bດ\u200bຕະ\u200bຖານ\u200bຢູ\u200bໂຣບ\u200bຕາ\u200bເ" + + "ວັນ\u200bອອກfເວ\u200bລາ\u200bລະ\u200bດູ\u200bຮ້ອນຢູ\u200bໂຣບ\u200bຕາ" + + "\u200bເວັນ\u200bອອກ]ເວ\u200bລາ\u200b\u200bຢູ\u200bໂຣ\u200bປຽນ\u200bຕາ" + + "\u200bເວັນ\u200bອອກ\u200bໄກHເວ\u200bລາ\u200bຢູ\u200bໂຣບ\u200bຕາ\u200bເວັ" + + "ນ\u200bຕົກfເວ\u200bລາ\u200bມາດ\u200bຕະ\u200bຖານຢູ\u200bໂຣບ\u200bຕາ" + + "\u200bເວັນ\u200bຕົກfເວ\u200bລາ\u200bລະ\u200bດູ\u200bຮ້ອນຢູ\u200bໂຣບ" + + "\u200bຕາ\u200bເວັນ\u200bຕົກN\u200bເວ\u200bລາ\u200bໝູ່\u200bເກາະ\u200bຟອ" + + "\u200bລ໌ກ\u200bແລນl\u200bເວ\u200bລາ\u200bມາດ\u200bຕະ\u200bຖານໝູ່\u200bເກ" + + "າະ\u200bຟອ\u200bລ໌ກ\u200bແລນl\u200bເວ\u200bລາ\u200bລະ\u200bດູ\u200bຮ້ອ" + + "ນໝູ່\u200bເກາະ\u200bຟອ\u200bລ໌ກ\u200bແລນ\x18ເວລາຟິຈິ0ເວລາມາດຕະຖານຟິຈິ0" + + "ເວລາລະດູຮ້ອນຟິຈິ?ເວ\u200bລາ\u200bເຟ\u200bຣນ\u200bຊ໌\u200bເກຍ\u200bນາSເ" + + "ວລາຝຣັ່ງຕອນໃຕ້ ແລະ ແອນຕາກຕິກ9ເວ\u200bລາ\u200bກາ\u200bລາ\u200bປາ\u200bກ" + + "ອ\u200bສ\x1eເວລາແກມເບຍ\x1bເວລາຈໍເຈຍ3ເວລາມາດຕະຖານຈໍເຈຍ3ເວລາລະດູຮ້ອນຈໍເຈ" + + "ຍ9ເວລາຫມູ່ເກາະກິລເບີດ*ເວ\u200bລາກຣີນ\u200bວິ\u200bຊEເວລາຕາເວັນອອກຂອງກຣ" + + "ີນແລນTເວລາມາດຕະຖານຕາເວັນອອກກຣີນແລນTເວລາລະດູຮ້ອນກຣີນແລນຕາເວັນອອກ<ເວລາກຣ" + + "ີນແລນຕາເວັນຕົກTເວລາມາດຕະຖານກຣີນແລນຕາເວັນຕົກQເວລາຕອນທ່ຽງກຣີນແລນຕາເວັນຕົ" + + "ກ\x15ເວລາກວມ'ເວ\u200bລາ\u200bກູ\u200bລ\u200b໌ຟ!ເວລາກາຍອານາ1ເວລາຮາວາຍ-ເ" + + "ອລູທຽນIເວລາມາດຕະຖານຮາວາຍ-ເອລູທຽນFເວລາຕອນທ່ຽງຮາວາຍ-ເອລູທຽນ'ເວ\u200bລາ" + + "\u200bຮອງ\u200bກົງHເວ\u200bລາ\u200bມາດ\u200bຕະ\u200bຖານ\u200bຮອງ\u200bກົ" + + "ງK\u200bເວ\u200bລາ\u200bລະ\u200bດູ\u200bຮ້ອນ\u200bຮອງ\u200bກົງ$ເວ" + + "\u200bລາ\u200bຮອບ\u200bດ໌H\u200bເວ\u200bລາ\u200bມາດ\u200bຕະ\u200bຖານ" + + "\u200bຮອບ\u200bດ໌H\u200bເວ\u200bລາ\u200bລະ\u200bດູ\u200bຮ້ອນ\u200bຮອບ" + + "\u200bດ໌\x1fເວລາ ອິນເດຍ?ເວລາຫມະຫາສະຫມຸດອິນເດຍ$ເວລາອິນດູຈີນEເວ\u200bລາ" + + "\u200bອິນ\u200bໂດ\u200bເນ\u200bເຊຍ\u200bກາງ]ເວ\u200bລາ\u200bອິນ\u200bໂດ" + + "\u200bເນ\u200bເຊຍ\u200bຕາ\u200bເວັນ\u200bອອກ]ເວ\u200bລາ\u200bອິນ\u200bໂດ" + + "\u200bເນ\u200bເຊຍ\u200bຕາ\u200bເວັນ\u200bຕົກ$ເວ\u200bລາ\u200bອີ\u200bຣານ" + + "Bເວ\u200bລາ\u200bມາດ\u200bຕະ\u200bຖານອີ\u200bຣານBເວ\u200bລາ\u200bຕອນ" + + "\u200bທ່ຽງ\u200bອີ\u200bຣາ\u200bນ3ເວ\u200bລ\u200bາອີ\u200bຄຸດ\u200bສ" + + "\u200bຄ໌Nເວ\u200bລາມາດ\u200bຕະ\u200bຖານອີ\u200bຄຸດ\u200bສ\u200bຄ໌Nເວ" + + "\u200bລາລະ\u200bດູ\u200bຮ້ອນອີ\u200bຄຸດ\u200bສ\u200bຄ໌3ເວ\u200bລາ\u200bອ" + + "ິ\u200bສ\u200bຣາ\u200bເອວQເວ\u200bລາ\u200bມາດ\u200bຕະ\u200bຖານອິ\u200b" + + "ສ\u200bຣາ\u200bເອວ9ເວລາກາງເວັນອິສຣາເອວ*ເວ\u200bລາ\u200bຍີ່\u200bປຸ່ນKເ" + + "ວ\u200bລາ\u200bມາດ\u200bຕະ\u200bຖານ\u200bຍີ່\u200bປຸ່ນEເວ\u200bລາ" + + "\u200bຕອນ\u200bທ່ຽງ\u200bຍີ່\u200bປຸ່ນZເວ\u200bລາ\u200bຄາ\u200bຊັກ\u200b" + + "ສ\u200bຖານ\u200bຕາ\u200bເວັນ\u200bອອກZເວ\u200bລາ\u200bຄາ\u200bຊັກ" + + "\u200bສ\u200bຖານ\u200bຕາ\u200bເວັນ\u200bຕົກ!ເວລາເກົາຫຼີKເວ\u200bລາ\u200b" + + "ມາດ\u200bຕະ\u200bຖານ\u200bເກົາ\u200bຫລີEເວ\u200bລາ\u200bຕອນ\u200bທ່ຽງ" + + "\u200bເກົາ\u200bຫລີ\x1bເວລາຄອສແຣ?ເວ\u200bລາ\u200bຄຣັສ\u200bໂນ\u200bຢາ" + + "\u200bສ\u200bຄ໌]ເວ\u200bລາ\u200bມາດ\u200bຕະ\u200bຖານຄຣັສ\u200bໂນ\u200bຢາ" + + "\u200bສ\u200bຄ໌]ເວ\u200bລາ\u200bລະ\u200bດູ\u200bຮ້ອນຄຣັສ\u200bໂນ\u200bຢາ" + + "\u200bສ\u200bຄ໌'ເວລາເຄຍກິສຖານ\x1bເວລາລັງກາ6ເວ\u200bລາ\u200bໝູ່\u200bເກາະ" + + "\u200bລາຍ*ເວ\u200bລາ\u200bລອດ\u200bເຮົາKເວ\u200bລາ\u200bມາດ\u200bຕະ" + + "\u200bຖານ\u200bລອດ\u200bເຮົາT\u200bເວ\u200bລ\u200bສາ\u200bຕອນ\u200b" + + "\u200bທ່ຽງ\u200bລອດ\u200bເຮົາ\u200b\x1eເວລາມາເກົາ6ເວລາມາດຕະຖານມາເກົາ6ເວລ" + + "າລະດູຮ້ອນມາເກົາBເວ\u200bລາ\u200bເກາະ\u200bແມັກ\u200bຄົວ\u200bຣີ'ເວລາເມ" + + "ັກກາເດນ?ເວລາມາດຕະຖານເມັກກາເດນ?ເວລາລະດູຮ້ອນເມັກກາເດນ-ເວ\u200bລາ\u200bມາ" + + "\u200bເລ\u200bເຊຍ\x1eເວລາມັນດີຟ$ເວລາມາເຄີຊັສ?ເວ\u200bລາ\u200bໝູ່\u200bເກ" + + "າະ\u200bມາ\u200bແຊວ6ເວ\u200bລາ\u200bເມົາ\u200bຣິ\u200bທຽ\u200bສTເວ" + + "\u200bລາ\u200bມາດ\u200bຕະ\u200bຖານເມົາ\u200bຣິ\u200bທຽ\u200bສZ\u200bເວ" + + "\u200bລາ\u200bລະ\u200bດູ\u200bຮ້ອນ\u200bເມົາ\u200bຣິ\u200bທຽ\u200bສ\x1bເ" + + "ວລາມໍສັນN\u200bເວ\u200bລາ\u200bນອດ\u200bເວ\u200bສ\u200bເມັກ\u200bຊິ" + + "\u200bໂກl\u200bເວ\u200bລາ\u200bມາດ\u200bຕະ\u200bຖານນອດ\u200bເວ\u200bສ" + + "\u200bເມັກ\u200bຊິ\u200bໂກNເວລາກາງເວັນເມັກຊິກັນນອດເວສ<ເວລາແປຊິຟິກເມັກຊິກ" + + "ັນTເວລາມາດຕະຖານແປຊິຟິກເມັກຊິກັນQເວລາກາງເວັນແປຊິຟິກເມັກຊິກັນ+ເວລາ ອູລານ" + + "ບາເຕີCເວລາມາດຕະຖານ ອູລານບາເຕີBເວລາລະດູຮ້ອນອູລານບາເຕີ'ເວ\u200bລາ\u200bມ" + + "ອ\u200bສ\u200bໂຄEເວ\u200bລາ\u200bມາດ\u200bຕະ\u200bຖານມອ\u200bສ\u200bໂຄ" + + "Eເວ\u200bລາ\u200bລະ\u200bດູ\u200bຮ້ອນມອ\u200bສ\u200bໂຄ\x1bເວລາມຽນມາ*ເວ" + + "\u200bລາ\u200bນາ\u200bອູ\u200bຣຸ'\u200bເວ\u200bລາ\u200bເນ\u200bປານ0ເວລານ" + + "ິວແຄລິໂດເນຍHເວລາມາດຕະຖານນິວແຄລິໂດເນຍHເວລາລະດູຮ້ອນນິວແຄລິໂດເນຍ0ເວ\u200b" + + "ລາ\u200bນິວ\u200bຊີ\u200bແລນNເວ\u200bລາ\u200bມາດ\u200bຕະ\u200bຖານນິວ" + + "\u200bຊີ\u200bແລນKເວ\u200bລາ\u200bຕອນ\u200bທ່ຽງ\u200bນິວ\u200bຊີ\u200bແລ" + + "ນ3ເວ\u200bລາ\u200bນິວ\u200bຟາວ\u200bແລນTເວ\u200bລາ\u200bມາດ\u200bຕະ" + + "\u200bຖານ\u200bນິວ\u200bຟາວ\u200bແລນ<ເວລາກາງເວັນນິວຟາວແລນ\x1eເວລານິອູເອ<" + + "ເວ\u200bລາ\u200bເກາະ\u200bນໍ\u200bຟອ\u200bລ໌ກ<ເວລາເຟນັນໂດເດໂນຮອນຮາTເວລ" + + "າມາດຕະຖານເຟນັນໂດເດໂນຮອນຮາTເວລາລະດູຮ້ອນເຟນັນໂດເດໂນຮອນຮາHເວລາຫມູ່ເກາະມາເ" + + "ຣຍນາເຫນືອBເວ\u200bລາ\u200bໂນ\u200bໂບ\u200bຊິ\u200bບິ\u200bສ\u200bຄ໌`ເວ" + + "\u200bລາ\u200bມາດ\u200bຕະ\u200bຖານໂນ\u200bໂບ\u200bຊິ\u200bບິ\u200bສ" + + "\u200bຄ໌`ເວ\u200bລາ\u200bລະ\u200bດູ\u200bຮ້ອນໂນ\u200bໂບ\u200bຊິ\u200bບິ" + + "\u200bສ\u200bຄ໌*\u200bເວ\u200bລາອອມ\u200bສ\u200bຄ໌Hເວ\u200bລາ\u200bມາດ" + + "\u200bຕະ\u200bຖານອອມ\u200bສ\u200bຄ໌Hເວ\u200bລາ\u200bລະ\u200bດູ\u200bຮ້ອນ" + + "ອອມ\u200bສ\u200bຄ໌-ເວ\u200bລາ\u200bປາ\u200bກີສຖານNເວ\u200bລາ\u200bມາດ" + + "\u200bຕະ\u200bຖານ\u200bປາ\u200bກີສຖານTເວ\u200bລາ\u200bລະ\u200bດູ\u200bຮ້" + + "ອນ\u200bປາ\u200bກີ\u200bສ\u200bຖານ\x1eເວລາປາເລົາ'ເວລາປາປົວກິນີ-ເວ" + + "\u200bລາ\u200bປາ\u200bຣາ\u200bກວຍNເວ\u200bລາ\u200bມາດ\u200bຕະ\u200bຖານ" + + "\u200bປາ\u200bຣາ\u200bກວຍNເວ\u200bລາ\u200bລະ\u200bດູ\u200bຮ້ອນ\u200bປາ" + + "\u200bຣາ\u200bກວຍ!ເວ\u200bລາ\u200bເປ\u200bຣູEເວ\u200bລາ\u200b\u200bມາ" + + "\u200bດ\u200bຕະ\u200bຖານເປ\u200bຣູBເວ\u200bລາ\u200bລະ\u200bດູ\u200bຮ້ອນ" + + "\u200bເປ\u200bຣູ3\u200bເວ\u200bລາ\u200bຟິ\u200bລິບ\u200bປິນQເວ\u200bລາ" + + "\u200bມາດ\u200bຕະ\u200bຖານ\u200bຟິ\u200bລິບ\u200bປິນQເວ\u200bລາ\u200bລະ" + + "\u200bດູ\u200bຮ້ອນ\u200bຟິ\u200bລິບ\u200bປິນ3ເວລາຫມູ່ເກາະຟີນິກX\u200bເວ" + + "\u200bລາເຊນ\u200bປີ\u200bແອ ແລະ\u200bມິ\u200bກົວ\u200bລອນv\u200bເວ\u200b" + + "ລາມາດ\u200bຕະ\u200bຖານເຊນ\u200bປີ\u200bແອ ແລະ\u200bມິ\u200bກົວ\u200bລອ" + + "ນp\u200bເວ\u200bລາຕອນ\u200bທ່ຽງເຊນ\u200bປີ\u200bແອ ແລະ\u200bມິ\u200bກົ" + + "ວ\u200bລອນ$ເວລາພິດແຄຣ໌ນ\x1bເວລາໂປເນບ\x1eເວລາປຽງຢາງ!ເວລາຄີວລໍດາ9ເວລາມາດ" + + "ຕະຖານຄີວລໍດາ9ເວລາລະດູຮ້ອນຄີວລໍດາ6ເວ\u200bລາ\u200bເຣ\u200bອູ\u200bນິ" + + "\u200bຢົງ\x1fເວລາ ໂຣທີຕາ-ເວ\u200bລາ\u200bຊາ\u200bຮາ\u200bລິນKເວ\u200bລາ" + + "\u200bມາດ\u200bຕະ\u200bຖານຊາ\u200bຮາ\u200bລິນKເວ\u200bລາ\u200bລະ\u200bດູ" + + "\u200bຮ້ອນຊາ\u200bຮາ\u200bລິນ\x1bເວລາຊາມົວ3ເວລາມາດຕະຖານຊາມົວ3ເວລາລະດູຮ້ອ" + + "ນຊາມົວ0ເວ\u200bລາ\u200bເຊ\u200bເຊ\u200bລ\u200bສ໌-ເວ\u200bລາ\u200bສິງ" + + "\u200bກະ\u200bໂປ9ເວລາຫມູ່ເກາະໂຊໂລມອນ$ເວລາຈໍເຈຍໃຕ້-ເວ\u200bລາ\u200bຊຸ" + + "\u200bຣິ\u200bນາມ\x19ເວລາ ໂຊວາ\x1eເວລາທາຮິຕິ!ເວ\u200bລາ\u200bໄທ\u200bເປB" + + "ເວ\u200bລາ\u200bມາດ\u200bຕະ\u200bຖານ\u200bໄທ\u200bເປ?ເວ\u200bລາ\u200bຕ" + + "ອນ\u200bທ່\u200bຽງ\u200bໄທ\u200bເປ*ເວລາທາຈິກິສຖານ$ເວລາໂຕເກເລົາ\x1bເວລາ" + + "ຕອງກາ3ເວລາມາດຕະຖານຕອງກາ3ເວລາລະດູຮ້ອນຕອງກາ\x15ເວລາຊຸກ-ເວລາຕວກເມນິສຖານEເ" + + "ວລາມາດຕະຖານຕວກເມນິສຖານEເວລາລະດູຮ້ອນຕວກເມນິສຖານ\x1eເວລາຕູວາລູ0\u200bເວ" + + "\u200bລາ\u200bອູ\u200bຣູ\u200bກວຍNເວ\u200bລາ\u200bມາດ\u200bຕະ\u200bຖານ" + + "\u200bອູ\u200bຣູ\u200bກວຍNເວ\u200bລາ\u200bລະ\u200bດູ\u200bຮ້ອນ\u200bອູ" + + "\u200bຣູ\u200bກວຍ3ເວລາອຸສເບກິດສະຖານKເວລາມາດຕະຖານອຸສເບກິດສະຖານKເວລາລະດູຮ້" + + "ອນອຸສເບກິດສະຖານ$ເວລາວານູອາຕູ<ເວລາມາດຕະຖານວານູອາຕູ<ເວລາລະດູຮ້ອນວານູອາຕູ" + + "<ເວ\u200bລາ\u200bເວ\u200bເນ\u200bຊູ\u200bເອ\u200bລາ*ເວລາລາດີໂວສຕົກBເວລາມ" + + "າດຕະຖານລາດີໂວສຕົກBເວລາລະດູຮ້ອນລາດີໂວສຕົກ$ເວລາໂວໂກກຣາດ<ເວລາມາດຕະຖານໂວໂກ" + + "ກຣາດ<ເວລາລະດູຮ້ອນໂວໂກກຣາດ\x1fເວລາ ວອສໂຕກ!ເວລາເກາະເວກ;ເວລາວາລລິສ ແລະ ຟູ" + + "ຕູນາ\x1eເວລາຢາກູດສ6ເວລາມາດຕະຖານຢາກູດສ6ເວລາລະດູຮ້ອນຢາກູດສ3ເວລາເຢກາເຕລິນ" + + "ເບີກKເວລາມາດຕະຖານເຢກາເຕລິນເບີກKເວລາລະດູຮ້ອນເຢກາເຕລິນເບີກ" + +var bucket69 string = "" + // Size: 13447 bytes + "\x0cجانڤیە\x0cفئڤریە\x08مارس\x0aآڤریل\x06مئی\x0aجوٙأن\x0aجوٙلا\x0aآگوست" + + "\x0eسئپتامر\x0eئوکتوڤر\x0cنوڤامر\x0cدئسامر\x13چارأک أڤأل\x02Q2\x02Q3\x02" + + "Q4\x15چارأک دویوم\x15چارأک سئیوم\x15چارأک چاروم\x08سأرۉ\x0aچارأک\x04ما" + + "\x0aھأفتە\x08روٙز\x0cدیروٙز\x0aأمروٙ\x0cشوٙصوٙ\x13روٙز ھأفتە\x0fگات روٙز" + + "\x08ساأت\x0aدئیقە\x0aثانیە\x0cراساگە\x19گاٛت مینجاٛیی0گاٛت مینجاٛیی ئستا" + + "ٛنداٛرد(روٙشنایی نئهادار روٙز\x12pavasario pradžia\x0elietaus vanduo" + + "\x14vabzdžių pabudimas\x15pavasario lygiadienis\x07šviesu\x0dlietus java" + + "ms\x10vasaros pradžia\x07liūtys\x13varpų formavimasis\x15vasaros saulėgr" + + "įža\x12nedidelis karštis\x10didelis karštis\x0frudens pradžia\x12karšči" + + "ų pabaiga\x0ašerkšnas\x12rudens lygiadienis\x0bšalta rasa\x07šalnos\x10" + + "žiemos pradžia\x12nesmarkus snigimas\x10smarkus snigimas\x15žiemos saul" + + "ėgrįža\x11nedidelis šaltis\x0fdidelis šaltis\x08Žiurkė\x06Jautis\x06Tig" + + "ras\x08Triušis\x08Drakonas\x07Gyvatė\x06Arklys\x05Ožka\x0cBeždžionė\x06G" + + "aidys\x04Šuo\x07Kiaulė\x0eU MMMM d, EEEE\x10y MMMM d G, EEEE\x0ay MMMM d" + + " G\x09y MMM d G\x09y-MM-dd G\x05saus.\x04vas.\x04kov.\x04bal.\x04geg." + + "\x06birž.\x05liep.\x05rugp.\x05rugs.\x05spal.\x06lapkr.\x06gruod.\x06sau" + + "sio\x07vasario\x04kovo\x0abalandžio\x09gegužės\x09birželio\x06liepos\x0b" + + "rugpjūčio\x08rugsėjo\x06spalio\x0alapkričio\x09gruodžio\x06sausis\x07vas" + + "aris\x05kovas\x08balandis\x08gegužė\x09birželis\x05liepa\x0arugpjūtis" + + "\x09rugsėjis\x06spalis\x09lapkritis\x07gruodis\x02sk\x02pr\x02an\x02tr" + + "\x02kt\x02pn\x03št\x02Sk\x02Pr\x02An\x02Tr\x02Kt\x02Pn\x03Št\x0bsekmadie" + + "nis\x0bpirmadienis\x0bantradienis\x0dtrečiadienis\x0eketvirtadienis\x0cp" + + "enktadienis\x0dšeštadienis\x04I k.\x05II k.\x06III k.\x05IV k.\x0bI ketv" + + "irtis\x0cII ketvirtis\x0dIII ketvirtis\x0cIV ketvirtis\x07I ketv.\x08II " + + "ketv.\x09III ketv.\x08IV ketv.\x0bvidurnaktis\x0apriešpiet\x07perpiet" + + "\x06popiet\x05rytas\x08popietė\x07vakaras\x06naktis\x06pr. p.\x0bvidurdi" + + "enis\x05diena\x0eprieš Kristų\x12prieš mūsų erą\x0bpo Kristaus\x0cmūsų e" + + "roje\x09pr. m. e.\x04prme\x04pome\x18y 'm'. MMMM d 'd'., EEEE\x12y 'm'. " + + "MMMM d 'd'.\x0dPrieš R.O.C.\x06R.O.C.\x05metai\x13praėjusiais metais\x0d" + + "šiais metais\x0dkitais metais\x0cpo {0} metų\x10prieš {0} metus\x10prie" + + "š {0} metų\x09po {0} m.\x0dprieš {0} m.\x09ketvirtis\x13praėjęs ketvirt" + + "is\x0ešis ketvirtis\x0fkitas ketvirtis\x11po {0} ketvirčio\x12po {0} ket" + + "virčių\x14prieš {0} ketvirtį\x16prieš {0} ketvirčius\x15prieš {0} ketvir" + + "čio\x16prieš {0} ketvirčių\x05ketv.\x0cpo {0} ketv.\x10prieš {0} ketv." + + "\x06mėnuo\x13praėjusį mėnesį\x0dšį mėnesį\x0ekitą mėnesį\x0fpo {0} mėnes" + + "io\x10po {0} mėnesių\x13prieš {0} mėnesį\x14prieš {0} mėnesius\x13prieš " + + "{0} mėnesio\x14prieš {0} mėnesių\x05mėn.\x0cpo {0} mėn.\x10prieš {0} mėn" + + ".\x08savaitė\x14praėjusią savaitę\x0ešią savaitę\x0ekitą savaitę\x10po {" + + "0} savaitės\x11po {0} savaičių\x13prieš {0} savaitę\x13prieš {0} savaite" + + "s\x14prieš {0} savaitės\x15prieš {0} savaičių\x0c{0} savaitę\x04sav.\x0b" + + "po {0} sav.\x0fprieš {0} sav.\x11mėnesio savaitė\x08užvakar\x05vakar\x09" + + "šiandien\x05rytoj\x05poryt\x0dpo {0} dienos\x0dpo {0} dienų\x11prieš {0" + + "} dieną\x11prieš {0} dienas\x11prieš {0} dienos\x11prieš {0} dienų\x09po" + + " {0} d.\x0dprieš {0} d.\x0bmetų diena\x0fsavaitės diena\x16mėnesio šioki" + + "adienis\x16praėjusį sekmadienį\x10šį sekmadienį\x11kitą sekmadienį\x12po" + + " {0} sekmadienio\x13po {0} sekmadienių\x16prieš {0} sekmadienį\x17prieš " + + "{0} sekmadienius\x16prieš {0} sekmadienio\x17prieš {0} sekmadienių\x10pr" + + "aėjusį sekm.\x0ašį sekm.\x0bkitą sekm.\x0cpo {0} sekm.\x10prieš {0} sekm" + + ".\x16praėjusį pirmadienį\x10šį pirmadienį\x11kitą pirmadienį\x12po {0} p" + + "irmadienio\x13po {0} pirmadienių\x16prieš {0} pirmadienį\x17prieš {0} pi" + + "rmadienius\x16prieš {0} pirmadienio\x17prieš {0} pirmadienių\x10praėjusį" + + " pirm.\x0ašį pirm.\x0bkitą pirm.\x0cpo {0} pirm.\x10prieš {0} pirm.\x16p" + + "raėjusį antradienį\x10šį antradienį\x11kitą antradienį\x12po {0} antradi" + + "enio\x13po {0} antradienių\x16prieš {0} antradienį\x17prieš {0} antradie" + + "nius\x16prieš {0} antradienio\x17prieš {0} antradienių\x10praėjusį antr." + + "\x0ašį antr.\x0bkitą antr.\x0cpo {0} antr.\x10prieš {0} antr.\x18praėjus" + + "į trečiadienį\x12šį trečiadienį\x13kitą trečiadienį\x14po {0} trečiadie" + + "nio\x15po {0} trečiadienių\x18prieš {0} trečiadienį\x19prieš {0} trečiad" + + "ienius\x18prieš {0} trečiadienio\x19prieš {0} trečiadienių\x11praėjusį t" + + "reč.\x0bšį treč.\x0ckitą treč.\x0dpo {0} treč.\x11prieš {0} treč.\x19pra" + + "ėjusį ketvirtadienį\x13šį ketvirtadienį\x14kitą ketvirtadienį\x15po {0}" + + " ketvirtadienio\x16po {0} ketvirtadienių\x19prieš {0} ketvirtadienį\x1ap" + + "rieš {0} ketvirtadienius\x19prieš {0} ketvirtadienio\x1aprieš {0} ketvir" + + "tadienių\x10praėjusį ketv.\x0ašį ketv.\x0bkitą ketv.\x17praėjusį penktad" + + "ienį\x11šį penktadienį\x12kitą penktadienį\x13po {0} penktadienio\x14po " + + "{0} penktadienių\x17prieš {0} penktadienį\x18prieš {0} penktadienius\x17" + + "prieš {0} penktadienio\x18prieš {0} penktadienių\x11praėjusį penkt.\x0bš" + + "į penkt.\x0ckitą penkt.\x0dpo {0} penkt.\x11prieš {0} penkt.\x18praėjus" + + "į šeštadienį\x12šį šeštadienį\x13kitą šeštadienį\x14po {0} šeštadienio" + + "\x15po {0} šeštadienių\x18prieš {0} šeštadienį\x19prieš {0} šeštadienius" + + "\x18prieš {0} šeštadienio\x19prieš {0} šeštadienių\x12praėjusį šešt.\x0c" + + "šį šešt.\x0dkitą šešt.\x0epo {0} šešt.\x12prieš {0} šešt.\x16iki pietų " + + "/ po pietų\x07valanda\x0ešią valandą\x0fpo {0} valandos\x0fpo {0} valand" + + "ų\x13prieš {0} valandą\x13prieš {0} valandas\x13prieš {0} valandos\x13p" + + "rieš {0} valandų\x04val.\x0bpo {0} val.\x0fprieš {0} val.\x07minutė\x0dš" + + "ią minutę\x0fpo {0} minutės\x10po {0} minučių\x12prieš {0} minutę\x12pri" + + "eš {0} minutes\x13prieš {0} minutės\x14prieš {0} minučių\x0bpo {0} min." + + "\x0fprieš {0} min.\x08sekundė\x05dabar\x10po {0} sekundės\x12po {0} seku" + + "ndžių\x13prieš {0} sekundę\x13prieš {0} sekundes\x14prieš {0} sekundės" + + "\x16prieš {0} sekundžių\x0bpo {0} sek.\x0fprieš {0} sek.\x08po {0} s\x0c" + + "prieš {0} s\x0claiko juosta\x0bLaikas: {0}\x13Vasaros laikas: {0}\x13Žie" + + "mos laikas: {0}\x1cpasaulio suderintasis laikas\x19Britanijos vasaros la" + + "ikas\x16Airijos vasaros laikas\x0aAko laikas\x17Ako standartinis laikas" + + "\x12Ako vasaros laikas\x12Afganistano laikas\x19Centrinės Afrikos laikas" + + "\x14Rytų Afrikos laikas\x15Pietų Afrikos laikas\x16Vakarų Afrikos laikas" + + "\x1eVakarų Afrikos žiemos laikas\x1eVakarų Afrikos vasaros laikas\x0fAli" + + "askos laikas\x17Aliaskos žiemos laikas\x17Aliaskos vasaros laikas\x0eAlm" + + "atos laikas\x16Almatos žiemos laikas\x16Almatos vasaros laikas\x10Amazon" + + "ės laikas\x18Amazonės žiemos laikas\x18Amazonės vasaros laikas Šiaurės " + + "Amerikos centro laikas(Šiaurės Amerikos centro žiemos laikas(Šiaurės Ame" + + "rikos centro vasaros laikas\x1fŠiaurės Amerikos rytų laikas'Šiaurės Amer" + + "ikos rytų žiemos laikas'Šiaurės Amerikos rytų vasaros laikas Šiaurės Ame" + + "rikos kalnų laikas(Šiaurės Amerikos kalnų žiemos laikas(Šiaurės Amerikos" + + " kalnų vasaros laikas+Šiaurės Amerikos Ramiojo vandenyno laikas3Šiaurės " + + "Amerikos Ramiojo vandenyno žiemos laikas3Šiaurės Amerikos Ramiojo vanden" + + "yno vasaros laikas\x10Anadyrės laikas\x18Anadyrės žiemos laikas\x18Anady" + + "rės vasaros laikas\x0dApijos laikas\x15Apijos žiemos laikas\x15Apijos va" + + "saros laikas\x0cAktau laikas\x14Aktau žiemos laikas\x14Aktau vasaros lai" + + "kas\x0fAktobės laikas\x17Aktobės žiemos laikas\x17Aktobės vasaros laikas" + + "\x0fArabijos laikas\x17Arabijos žiemos laikas\x17Arabijos vasaros laikas" + + "\x11Argentinos laikas\x19Argentinos žiemos laikas\x19Argentinos vasaros " + + "laikas\x19Vakarų Argentinos laikas!Vakarų Argentinos žiemos laikas!Vakar" + + "ų Argentinos vasaros laikas\x11Armėnijos laikas\x19Armėnijos žiemos lai" + + "kas\x19Armėnijos vasaros laikas\x0eAtlanto laikas\x16Atlanto žiemos laik" + + "as\x16Atlanto vasaros laikas\x1dCentrinės Australijos laikas%Centrinės A" + + "ustralijos žiemos laikas%Centrinės Australijos vasaros laikas%Centrinės " + + "vakarų Australijos laikas-Centrinės vakarų Australijos žiemos laikas-Cen" + + "trinės vakarų Australijos vasaros laikas\x18Rytų Australijos laikas Rytų" + + " Australijos žiemos laikas Rytų Australijos vasaros laikas\x1aVakarų Aus" + + "tralijos laikas\"Vakarų Australijos žiemos laikas\"Vakarų Australijos va" + + "saros laikas\x14Azerbaidžano laikas\x1cAzerbaidžano žiemos laikas\x1cAze" + + "rbaidžano vasaros laikas\x13Azorų Salų laikas\x1bAzorų Salų žiemos laika" + + "s\x1bAzorų Salų vasaros laikas\x12Bangladešo laikas\x1aBangladešo žiemos" + + " laikas\x1aBangladešo vasaros laikas\x0dButano laikas\x10Bolivijos laika" + + "s\x11Brazilijos laikas\x19Brazilijos žiemos laikas\x19Brazilijos vasaros" + + " laikas\x1cBrunėjaus Darusalamo laikas\x18Žaliojo Kyšulio laikas Žaliojo" + + " Kyšulio žiemos laikas Žaliojo Kyšulio vasaros laikas\x0dKeisio laikas" + + "\x0eČamoro laikas\x0eČatamo laikas\x16Čatamo žiemos laikas\x16Čatamo vas" + + "aros laikas\x0eČilės laikas\x16Čilės žiemos laikas\x16Čilės vasaros laik" + + "as\x0eKinijos laikas\x16Kinijos žiemos laikas\x16Kinijos vasaros laikas" + + "\x12Čoibalsano laikas\x1aČoibalsano žiemos laikas\x1aČoibalsano vasaros " + + "laikas\x15Kalėdų Salos laikas\x14Kokosų Salų laikas\x11Kolumbijos laikas" + + "\x19Kolumbijos žiemos laikas\x19Kolumbijos vasaros laikas\x11Kuko Salų l" + + "aikas\x19Kuko Salų žiemos laikas Kuko Salų pusės vasaros laikas\x0cKubos" + + " laikas\x14Kubos žiemos laikas\x14Kubos vasaros laikas\x0eDeiviso laikas" + + "\x1aDiumono d’Urvilio laikas\x13Rytų Timoro laikas\x14Velykų Salos laika" + + "s\x1cVelykų salos žiemos laikas\x1cVelykų Salos vasaros laikas\x0fEkvado" + + "ro laikas\x16Vidurio Europos laikas\x1eVidurio Europos žiemos laikas\x1e" + + "Vidurio Europos vasaros laikas\x14Rytų Europos laikas\x1cRytų Europos ži" + + "emos laikas\x1cRytų Europos vasaros laikas\x1fTolimųjų rytų Europos laik" + + "as\x16Vakarų Europos laikas\x1eVakarų Europos žiemos laikas\x1eVakarų Eu" + + "ropos vasaros laikas\x16Folklando Salų laikas\x1fFolklandų Salų žiemos l" + + "aikas\x1eFolklando Salų vasaros laikas\x0eFidžio laikas\x16Fidžio žiemos" + + " laikas\x16Fidžio vasaros laikas\x1bPrancūzijos Gvianos laikas)Pietų Pra" + + "ncūzijos ir antarktinis laikas\x10Galapagų laikas\x0eGambyro laikas\x0fG" + + "ruzijos laikas\x17Gruzijos žiemos laikas\x17Gruzijos vasaros laikas\x15G" + + "ilberto Salų laikas\x10Grinvičo laikas\x19Grenlandijos rytų laikas!Grenl" + + "andijos rytų žiemos laikas!Grenlandijos rytų vasaros laikas\x1bGrenlandi" + + "jos vakarų laikas#Grenlandijos vakarų žiemos laikas#Grenlandijos vakarų " + + "vasaros laikas\x0cGuamo laikas\x18Persijos įlankos laikas\x0eGajanos lai" + + "kas\x16Havajų-Aleutų laikas Havajų–Aleutų žiemos laikas Havajų–Aleutų va" + + "saros laikas\x0fHonkongo laikas\x17Honkongo žiemos laikas\x17Honkongo va" + + "saros laikas\x0cHovdo laikas\x14Hovdo žiemos laikas\x14Hovdo vasaros lai" + + "kas\x0eIndijos laikas\x18Indijos vandenyno laikas\x12Indokinijos laikas" + + "\x1dCentrinės Indonezijos laikas\x18Rytų Indonezijos laikas\x1aVakarų In" + + "donezijos laikas\x0cIrano laikas\x14Irano žiemos laikas\x14Irano vasaros" + + " laikas\x0fIrkutsko laikas\x17Irkutsko žiemos laikas\x17Irkutsko vasaros" + + " laikas\x0fIzraelio laikas\x17Izraelio žiemos laikas\x17Izraelio vasaros" + + " laikas\x10Japonijos laikas\x18Japonijos žiemos laikas\x18Japonijos vasa" + + "ros laikas!Kamčiatkos Petropavlovsko laikas)Kamčiatkos Petropavlovsko ži" + + "emos laikas)Kamčiatkos Petropavlovsko vasaros laikas\x18Rytų Kazachstano" + + " laikas\x1aVakarų Kazachstano laikas\x0fKorėjos laikas\x17Korėjos žiemos" + + " laikas\x17Korėjos vasaros laikas\x0fKosrajė laikas\x13Krasnojarsko laik" + + "as\x1bKrasnojarsko žiemos laikas\x1bKrasnojarsko vasaros laikas\x11Kirgi" + + "stano laikas\x0dLankos laikas\x12Laino Salų laikas\x10Lordo Hau laikas" + + "\x18Lordo Hau žiemos laikas\x18Lordo Hau vasaros laikas\x0cMakau laikas" + + "\x14Makau žiemos laikas\x14Makau vasaros laikas\x15Makvorio Salos laikas" + + "\x0fMagadano laikas\x17Magadano žiemos laikas\x17Magadano vasaros laikas" + + "\x11Malaizijos laikas\x0fMaldyvų laikas\x14Markizo Salų laikas\x15Maršal" + + "o Salų laikas\x12Mauricijaus laikas\x1aMauricijaus žiemos laikas\x1aMaur" + + "icijaus vasaros laikas\x0dMosono laikas!Šiaurės Vakarų Meksikos laikas)Š" + + "iaurės Vakarų Meksikos žiemos laikas)Šiaurės Vakarų Meksikos vasaros lai" + + "kas!Meksikos Ramiojo vandenyno laikas)Meksikos Ramiojo vandenyno žiemos " + + "laikas)Meksikos Ramiojo vandenyno vasaros laikas\x12Ulan Batoro laikas" + + "\x1aUlan Batoro žiemos laikas\x1aUlan Batoro vasaros laikas\x0eMaskvos l" + + "aikas\x16Maskvos žiemos laikas\x16Maskvos vasaros laikas\x0fMianmaro lai" + + "kas\x0cNauru laikas\x0dNepalo laikas\x1cNaujosios Kaledonijos laikas$Nau" + + "josios Kaledonijos žiemos laikas$Naujosios Kaledonijos vasaros laikas" + + "\x1bNaujosios Zelandijos laikas#Naujosios Zelandijos žiemos laikas#Naujo" + + "sios Zelandijos vasaros laikas\x14Niufaundlendo laikas\x1cNiufaundlendo " + + "žiemos laikas\x1cNiufaundlendo vasaros laikas\x0dNiujė laikas\x15Norfol" + + "ko Salų laikas\x1bFernando de Noronjos laikas#Fernando de Noronjos žiemo" + + "s laikas#Fernando de Noronjos vasaros laikas\x1fŠiaurės Marianos Salų la" + + "ikas\x13Novosibirsko laikas\x1bNovosibirsko žiemos laikas\x1bNovosibirsk" + + "o vasaros laikas\x0cOmsko laikas\x14Omsko žiemos laikas\x14Omsko vasaros" + + " laikas\x10Pakistano laikas\x18Pakistano žiemos laikas\x18Pakistano vasa" + + "ros laikas\x0cPalau laikas Papua Naujosios Gvinėjos laikas\x12Paragvajau" + + "s laikas\x1aParagvajaus žiemos laikas\x1aParagvajaus vasaros laikas\x0bP" + + "eru laikas\x13Peru žiemos laikas\x13Peru vasaros laikas\x10Filipinų laik" + + "as\x18Filipinų žiemos laikas\x18Filipinų vasaros laikas\x14Fenikso Salų " + + "laikas\x1cSen Pjero ir Mikelono laikas$Sen Pjero ir Mikelono žiemos laik" + + "as$Sen Pjero ir Mikelono vasaros laikas\x0fPitkerno laikas\x0fPonapės la" + + "ikas\x10Pchenjano laikas\x11Kyzylordos laikas\x19Kyzylordos žiemos laika" + + "s\x19Kyzylordos vasaros laikas\x0fReunjono laikas\x0eRoteros laikas\x10S" + + "achalino laikas\x18Sachalino žiemos laikas\x18Sachalino vasaros laikas" + + "\x0eSamaros laikas\x16Samaros žiemos laikas\x16Samaros vasaros laikas" + + "\x0cSamoa laikas\x14Samoa žiemos laikas\x14Samoa vasaros laikas\x11Seiše" + + "lių laikas\x11Singapūro laikas\x16Saliamono Salų laikas\x1aPietų Džordži" + + "jos laikas\x0fSurinamo laikas\x0dSiovos laikas\x0fTahičio laikas\x11Taip" + + "ėjaus laikas\x19Taipėjaus žiemos laikas\x19Taipėjaus vasaros laikas\x14" + + "Tadžikistano laikas\x0eTokelau laikas\x0dTongos laikas\x15Tongos žiemos " + + "laikas\x15Tongos vasaros laikas\x0cČuko laikas\x15Turkmėnistano laikas" + + "\x1dTurkmėnistano žiemos laikas\x1dTurkmėnistano vasaros laikas\x0dTuval" + + "u laikas\x11Urugvajaus laikas\x19Urugvajaus žiemos laikas\x19Urugvajaus " + + "vasaros laikas\x12Uzbekistano laikas\x1aUzbekistano žiemos laikas\x1aUzb" + + "ekistano vasaros laikas\x0eVanuatu laikas\x16Vanuatu žiemos laikas\x16Va" + + "nuatu vasaros laikas\x11Venesuelos laikas\x13Vladivostoko laikas\x1bVlad" + + "ivostoko žiemos laikas\x1bVladivostoko vasaros laikas\x11Volgogrado laik" + + "as\x19Volgogrado žiemos laikas\x19Volgogrado vasaros laikas\x0eVostoko l" + + "aikas\x12Veiko Salos laikas\x19Voliso ir Futūnos laikas\x0fJakutsko laik" + + "as\x17Jakutsko žiemos laikas\x17Jakutsko vasaros laikas\x15Jekaterinburg" + + "o laikas\x1dJekaterinburgo žiemos laikas\x1dJekaterinburgo vasaros laika" + + "s" + +var bucket70 string = "" + // Size: 13439 bytes + "\x03Cio\x03Lui\x03Lus\x03Muu\x03Lum\x03Luf\x03Kab\x04Lush\x03Lut\x03Lun" + + "\x03Kas\x03Cis\x06Ciongo\x07Lùishi\x07Lusòlo\x07Mùuyà\x0cLumùngùlù\x07Lu" + + "fuimi\x0fKabàlàshìpù\x0aLùshìkà\x09Lutongolo\x08Lungùdi\x0cKaswèkèsè\x06" + + "Ciswà\x03Nko\x03Ndy\x03Ndg\x03Njw\x03Ngv\x03Lub\x07Lumingu\x06Nkodya\x08" + + "Ndàayà\x07Ndangù\x06Njòwa\x07Ngòvya\x07Lubingu\x02M1\x02M2\x02M3\x02M4" + + "\x07Mueji 1\x07Mueji 2\x07Mueji 3\x07Mueji 4\x05Dinda\x06Dilolo\x14Kumpa" + + "la kwa Yezu Kli\x14Kunyima kwa Yezu Kli\x09kmp. Y.K.\x0akny. Y. K.\x09Ts" + + "hipungu\x08Tshidimu\x06Ngondo\x06Dituku\x08Makelela\x04Lelu\x06Malaba" + + "\x12Dituku dia lubingu\x11Mutantshi wa diba\x04Diba\x07Kasunsu\x0bKasuns" + + "ukusu\x06Nzeepu\x03DAC\x03DAR\x03DAD\x03DAN\x03DAH\x03DAU\x03DAO\x03DAB" + + "\x03DOC\x03DAP\x03DGI\x03DAG\x0eDwe mar Achiel\x0dDwe mar Ariyo\x0cDwe m" + + "ar Adek\x11Dwe mar Ang’wen\x0dDwe mar Abich\x0fDwe mar Auchiel\x0fDwe ma" + + "r Abiriyo\x0dDwe mar Aboro\x0eDwe mar Ochiko\x0cDwe mar Apar\x11Dwe mar " + + "gi achiel\x15Dwe mar Apar gi ariyo\x03JMP\x03WUT\x03TAR\x03TAD\x03TAN" + + "\x03TAB\x03NGS\x07Jumapil\x09Wuok Tich\x0aTich Ariyo\x09Tich Adek\x0eTic" + + "h Ang’wen\x0aTich Abich\x05Ngeso\x04NMN1\x04NMN2\x04NMN3\x04NMN4\x0dnus " + + "mar nus 1\x0dnus mar nus 2\x0dnus mar nus 3\x0dnus mar nus 4\x02OD\x02OT" + + "\x12Kapok Kristo obiro\x11Ka Kristo osebiro\x05ndalo\x04higa\x03dwe\x09c" + + "hieng’\x05nyoro\x07kawuono\x04kiny\x0endalo mar juma\x15odieochieng’/oti" + + "eno\x03saa\x06dakika\x0fnyiriri mar saa\x07kar saa\x02J2\x02J3\x02J4\x02" + + "J5\x02Al\x02Ij\x02J1\x08Jumapiri\x08Jumatatu\x07Jumanne\x08Jumatano\x0eM" + + "urwa wa Kanne\x0fMurwa wa Katano\x08Jumamosi\x0cRobo ya Kala\x0eRobo ya " + + "Kaviri\x0eRobo ya Kavaga\x0dRobo ya Kanne\x13Imberi ya Kuuza Kwa\x13Muhi" + + "ga Kuvita Kuuza\x07Rimenya\x06Muhiga\x06Risiza\x06Ridiku\x07Mgorova\x04L" + + "ero\x06Mgamba\x07Mrisiza\x0bVuche/Vwira\x04Isaa\x07Idagika\x07Havundu" + + "\x0cbudistu ēra\x04tots\x04baba\x06haturs\x06kihaks\x04tuba\x08amšīrs" + + "\x09baramhats\x07barmuda\x08bašnass\x05bauna\x05abibs\x05misra\x05nasī" + + "\x12pirms Diokletiāna\x11pēc Diokletiāna\x0cpirms Diokl.\x0bpēc Diokl." + + "\x09meskerems\x07tekemts\x06hedars\x07tahsass\x04ters\x09jakatīts\x08mag" + + "abits\x08miāzija\x07genbots\x05senē\x06hamlē\x07nahasē\x09epagomens\x1cp" + + "irms Kristus iemiesošanās\x1bpēc Kristus iemiesošanās\x0dpirms Kristus" + + "\x0cpēc Kristus\x19EEEE, y. 'gada' d. MMMM G\x13y. 'gada' d. MMMM G\x12y" + + ". 'gada' d. MMM G\x10{1} 'plkst'. {0}\x09janvāris\x0afebruāris\x05marts" + + "\x08aprīlis\x05maijs\x07jūnijs\x07jūlijs\x07augusts\x0aseptembris\x08okt" + + "obris\x09novembris\x09decembris\x05marts\x05maijs\x07svētd.\x06pirmd." + + "\x05otrd.\x07trešd.\x08ceturtd.\x07piektd.\x06sestd.\x02Sv\x02Pr\x02Ot" + + "\x02Tr\x02Ce\x02Pk\x02Se\x0asvētdiena\x09pirmdiena\x08otrdiena\x0atrešdi" + + "ena\x0bceturtdiena\x0apiektdiena\x09sestdiena\x07Svētd.\x06Pirmd.\x05Otr" + + "d.\x07Trešd.\x08Ceturtd.\x07Piektd.\x06Sestd.\x0aSvētdiena\x09Pirmdiena" + + "\x08Otrdiena\x0aTrešdiena\x0bCeturtdiena\x0aPiektdiena\x09Sestdiena\x081" + + ".\u00a0cet.\x082.\u00a0cet.\x083.\u00a0cet.\x084.\u00a0cet.\x0d1. ceturk" + + "snis\x0d2. ceturksnis\x0d3. ceturksnis\x0d4. ceturksnis\x09pusnaktī\x09p" + + "riekšp.\x05pusd.\x06pēcp.\x08no rīta\x09pēcpusd.\x07vakarā\x06naktī\x10p" + + "riekšpusdienā\x0dpusdienlaikā\x0dpēcpusdienā\x08pusnakts\x05rīts\x0cpēcp" + + "usdiena\x06vakars\x05nakts\x0fpriekšpusdiena\x0cpusdienlaiks\x11pirms mū" + + "su ēras\x0bmūsu ērā\x07p.m.ē.\x05m.ē.\x04pmē\x03mē\x17EEEE, y. 'gada' d." + + " MMMM\x11y. 'gada' d. MMMM\x10y. 'gada' d. MMM\x1akopš pasaules radīšana" + + "s\x07Čaitra\x0aVaišākha\x0bDžjēštha\x09Āšādha\x09Šrāvana\x0bBhadrapāda" + + "\x08Āšvina\x08Kārtika\x0eMārgašīrša\x06Pauša\x06Māgha\x09Phālguna\x08muh" + + "arams\x06safars\x081. rabī\x082. rabī\x0d1. džumādā\x0d2. džumādā\x08rad" + + "žabs\x07šabans\x09ramadāns\x08šauvals\x0bdu al-kidā\x0ddu al-hidžā\x0dp" + + "ēc hidžras\x0bfarvardīns\x0cordibehešts\x08hordāds\x05tīrs\x08mordāds" + + "\x0bšahrivērs\x05mehrs\x05abans\x05azers\x04dejs\x07bahmans\x07esfands" + + "\x0epersiešu gads\x0apers. gads&pirms Ķīnas Republikas dibināšanas\x06Mi" + + "ņgo\x10pirms republikas\x0apirms rep.\x04ēra\x04gads\x13pagājušajā gadā" + + "\x0cšajā gadā\x10nākamajā gadā\x0fpēc {0} gadiem\x0dpēc {0} gada\x10pirm" + + "s {0} gadiem\x0epirms {0} gada\x0bpēc {0} g.\x0cpirms {0} g.\x0aceturksn" + + "is\x15pēdējais ceturksnis\x0fšis ceturksnis\x14nākamais ceturksnis\x17pē" + + "c {0}\u00a0ceturkšņiem\x15pēc {0}\u00a0ceturkšņa\x18pirms {0}\u00a0cetur" + + "kšņiem\x16pirms {0}\u00a0ceturkšņa\x04cet.\x0epēc {0}\u00a0cet.\x0fpirms" + + " {0}\u00a0cet.\x08mēnesis\x16pagājušajā mēnesī\x0fšajā mēnesī\x13nākamaj" + + "ā mēnesī\x13pēc {0} mēnešiem\x11pēc {0} mēneša\x14pirms {0} mēnešiem" + + "\x12pirms {0} mēneša\x05mēn.\x0epēc {0} mēn.\x0fpirms {0} mēn.\x08nedēļa" + + "\x17pagājušajā nedēļā\x10šajā nedēļā\x14nākamajā nedēļā\x13pēc {0} nedēļ" + + "ām\x12pēc {0} nedēļas\x14pirms {0} nedēļām\x13pirms {0} nedēļas\x0d{0}." + + " nedēļa\x04ned.\x0dpēc {0} ned.\x0epirms {0} ned.\x09{0}. ned.\x11mēneša" + + " nedēļa\x0dmēneša ned.\x08aizvakar\x05vakar\x07šodien\x04rīt\x06parīt" + + "\x10pēc {0} dienām\x0fpēc {0} dienas\x11pirms {0} dienām\x10pirms {0} di" + + "enas\x0bpēc {0} d.\x0cpēc {0}\u00a0d.\x0cpirms {0} d.\x0dpirms {0}\u00a0" + + "d.\x0agada diena\x0fnedēļas diena\x18mēneša nedēļas diena\x13mēneša ned." + + " diena\x19pagājušajā svētdienā\x12šajā svētdienā\x16nākamajā svētdienā" + + "\x15pēc {0} svētdienām\x14pēc {0} svētdienas\x16pirms {0} svētdienām\x15" + + "pirms {0} svētdienas\x0cpag. svētd.\x0ešajā svētd.\x0dnāk. svētd.\x18pag" + + "ājušajā pirmdienā\x11šajā pirmdienā\x15nākamajā pirmdienā\x14pēc {0} pi" + + "rmdienām\x13pēc {0} pirmdienas\x15pirms {0} pirmdienām\x14pirms {0} pirm" + + "dienas\x0bpag. pirmd.\x0dšajā pirmd.\x0cnāk. pirmd.\x17pagājušajā otrdie" + + "nā\x10šajā otrdienā\x14nākamajā otrdienā\x13pēc {0} otrdienām\x12pēc {0}" + + " otrdienas\x14pirms {0} otrdienām\x13pirms {0} otrdienas\x0apag. otrd." + + "\x0cšajā otrd.\x0bnāk. otrd.\x19pagājušajā trešdienā\x12šajā trešdienā" + + "\x16nākamajā trešdienā\x15pēc {0} trešdienām\x14pēc {0} trešdienas\x16pi" + + "rms {0} trešdienām\x15pirms {0} trešdienas\x0cpag. trešd.\x0ešajā trešd." + + "\x0dnāk. trešd.\x1apagājušajā ceturtdienā\x13šajā ceturtdienā\x17nākamaj" + + "ā ceturtdienā\x16pēc {0} ceturtdienām\x15pēc {0} ceturtdienas\x17pirms " + + "{0} ceturtdienām\x16pirms {0} ceturtdienas\x0dpag. ceturtd.\x0fšajā cetu" + + "rtd.\x0enāk. ceturtd.\x19pagājušajā piektdienā\x12šajā piektdienā\x16nāk" + + "amajā piektdienā\x15pēc {0} piektdienām\x14pēc {0} piektdienas\x16pirms " + + "{0} piektdienām\x15pirms {0} piektdienas\x0cpag. piektd.\x0ešajā piektd." + + "\x0dnāk. piektd.\x18pagājušajā sestdienā\x11šajā sestdienā\x15nākamajā s" + + "estdienā\x14pēc {0} sestdienām\x13pēc {0} sestdienas\x15pirms {0} sestdi" + + "enām\x14pirms {0} sestdienas\x0bpag. sestd.\x0dšajā sestd.\x0cnāk. sestd" + + ".\x16priekšpusd./pēcpusd.\x1epriekšpusdienā/pēcpusdienā\x07stundas\x0eša" + + "jā stundā\x11pēc {0} stundām\x10pēc {0} stundas\x12pirms {0} stundām\x11" + + "pirms {0} stundas\x03st.\x0dpēc {0}\u00a0st.\x0epirms {0}\u00a0st.\x0apē" + + "c {0} h\x0bpirms {0} h\x08minūtes\x0fšajā minūtē\x12pēc {0} minūtēm\x11p" + + "ēc {0} minūtes\x13pirms {0} minūtēm\x12pirms {0} minūtes\x0dpēc {0} min" + + ".\x0epirms {0} min.\x0cpēc {0} min\x0dpēc {0}\u00a0min\x0epirms {0}" + + "\u00a0min\x08sekundes\x05tagad\x12pēc {0} sekundēm\x11pēc {0} sekundes" + + "\x13pirms {0} sekundēm\x12pirms {0} sekundes\x0dpēc {0} sek.\x0epirms {0" + + "} sek.\x0bpēc {0}\u00a0s\x0cpirms {0}\u00a0s\x0bpirms {0} s\x0blaika jos" + + "la\x10Laika josla: {0}\x12{0}: vasaras laiks\x14{0}: standarta laiks!Uni" + + "versālais koordinētais laiks\x1dLielbritānijas vasaras laiks\x14Īrijas z" + + "iemas laiks\x13Afganistānas laiks\x16Centrālāfrikas laiks\x15Austrumāfri" + + "kas laiks\x1cDienvidāfrikas ziemas laiks\x14Rietumāfrikas laiks\x1bRietu" + + "māfrikas ziemas laiks\x1cRietumāfrikas vasaras laiks\x0eAļaskas laiks" + + "\x15Aļaskas ziemas laiks\x16Aļaskas vasaras laiks\x0eAmazones laiks\x15A" + + "mazones ziemas laiks\x16Amazones vasaras laiks\x11Centrālais laiks\x18Ce" + + "ntrālais ziemas laiks\x19Centrālais vasaras laiks\x0eAustrumu laiks\x15A" + + "ustrumu ziemas laiks\x16Austrumu vasaras laiks\x0bKalnu laiks\x12Kalnu z" + + "iemas laiks\x13Kalnu vasaras laiks\x14Klusā okeāna laiks\x1bKlusā okeāna" + + " ziemas laiks\x1cKlusā okeāna vasaras laiks\x0eAnadiras laiks\x15Anadira" + + "s ziemas laiks\x16Anadiras vasaras laiks\x0cApijas laiks\x13Apijas ziema" + + "s laiks\x14Apijas vasaras laiks\x18Arābijas pussalas laiks\x1fArābijas p" + + "ussalas ziemas laiks Arābijas pussalas vasaras laiks\x11Argentīnas laiks" + + "\x18Argentīnas ziemas laiks\x19Argentīnas vasaras laiks\x17Rietumargentī" + + "nas laiks\x1eRietumargentīnas ziemas laiks\x1fRietumargentīnas vasaras l" + + "aiks\x10Armēnijas laiks\x17Armēnijas ziemas laiks\x18Armēnijas vasaras l" + + "aiks\x10Atlantijas laiks\x17Atlantijas ziemas laiks\x18Atlantijas vasara" + + "s laiks\x1eAustrālijas centrālais laiks%Austrālijas centrālais ziemas la" + + "iks&Austrālijas centrālais vasaras laiks&Austrālijas centrālais rietumu " + + "laiks-Austrālijas centrālais rietumu ziemas laiks.Austrālijas centrālais" + + " rietumu vasaras laiks\x1bAustrālijas austrumu laiks\"Austrālijas austru" + + "mu ziemas laiks#Austrālijas austrumu vasaras laiks\x1aAustrālijas rietum" + + "u laiks!Austrālijas rietumu ziemas laiks\"Austrālijas rietumu vasaras la" + + "iks\x15Azerbaidžānas laiks\x1cAzerbaidžānas ziemas laiks\x1dAzerbaidžāna" + + "s vasaras laiks\x10Azoru salu laiks\x17Azoru salu ziemas laiks\x18Azoru " + + "salu vasaras laiks\x12Bangladešas laiks\x19Bangladešas ziemas laiks\x1aB" + + "angladešas vasaras laiks\x0eButānas laiks\x10Bolīvijas laiks\x11Brazīlij" + + "as laiks\x18Brazīlijas ziemas laiks\x19Brazīlijas vasaras laiks\x1aBrune" + + "jas Darusalamas laiks\x10Kaboverdes laiks\x17Kaboverdes ziemas laiks\x18" + + "Kaboverdes vasaras laiks\x15Čamorra ziemas laiks\x0eČetemas laiks\x15Čet" + + "emas ziemas laiks\x16Četemas vasaras laiks\x0dČīles laiks\x14Čīles ziema" + + "s laiks\x15Čīles vasaras laiks\x0dĶīnas laiks\x14Ķīnas ziemas laiks\x15Ķ" + + "īnas vasaras laiks\x12Čoibalsanas laiks\x19Čoibalsanas ziemas laiks\x1a" + + "Čoibalsanas vasaras laiks\x17Ziemsvētku salas laiks\x1cKokosu (Kīlinga)" + + " salu laiks\x10Kolumbijas laiks\x17Kolumbijas ziemas laiks\x18Kolumbijas" + + " vasaras laiks\x0fKuka salu laiks\x16Kuka salu ziemas laiks\x17Kuka salu" + + " vasaras laiks\x0bKubas laiks\x12Kubas ziemas laiks\x13Kubas vasaras lai" + + "ks\x0eDeivisas laiks\x13Dimondirvilas laiks\x14Austrumtimoras laiks\x15L" + + "ieldienu salas laiks\x1cLieldienu salas ziemas laiks\x1dLieldienu salas " + + "vasaras laiks\x0fEkvadoras laiks\x15Centrāleiropas laiks\x1cCentrāleirop" + + "as ziemas laiks\x1dCentrāleiropas vasaras laiks\x14Austrumeiropas laiks" + + "\x1bAustrumeiropas ziemas laiks\x1cAustrumeiropas vasaras laiks Austrume" + + "iropas laika josla (FET)\x13Rietumeiropas laiks\x1aRietumeiropas ziemas " + + "laiks\x1bRietumeiropas vasaras laiks\x1eFolklenda (Malvinu) salu laiks%F" + + "olklenda (Malvinu) salu ziemas laiks&Folklenda (Malvinu) salu vasaras la" + + "iks\x0cFidži laiks\x13Fidži ziemas laiks\x14Fidži vasaras laiks\x18Franc" + + "ijas Gviānas laiks7Francijas Dienvidjūru un Antarktikas teritorijas laik" + + "s\x0eGalapagu laiks\x12Gambjē salu laiks\x0eGruzijas laiks\x15Gruzijas z" + + "iemas laiks\x16Gruzijas vasaras laiks\x13Gilberta salu laiks\x0fGriničas" + + " laiks\x17Austrumgrenlandes laiks\x1eAustrumgrenlandes ziemas laiks\x1fA" + + "ustrumgrenlandes vasaras laiks\x16Rietumgrenlandes laiks\x1dRietumgrenla" + + "ndes ziemas laiks\x1eRietumgrenlandes vasaras laiks\x15Persijas līča lai" + + "ks\x0eGajānas laiks\x15Havaju–Aleutu laiks\x1cHavaju–Aleutu ziemas laiks" + + "\x1dHavaju–Aleutu vasaras laiks\x0fHonkongas laiks\x16Honkongas ziemas l" + + "aiks\x17Honkongas vasaras laiks\x0cHovdas laiks\x13Hovdas ziemas laiks" + + "\x14Hovdas vasaras laiks\x14Indijas ziemas laiks\x15Indijas okeāna laiks" + + "\x11Indoķīnas laiks\x1aCentrālindonēzijas laiks\x19Austrumindonēzijas la" + + "iks\x18Rietumindonēzijas laiks\x0dIrānas laiks\x14Irānas ziemas laiks" + + "\x15Irānas vasaras laiks\x0fIrkutskas laiks\x16Irkutskas ziemas laiks" + + "\x17Irkutskas vasaras laiks\x0fIzraēlas laiks\x16Izraēlas ziemas laiks" + + "\x17Izraēlas vasaras laiks\x0eJapānas laiks\x15Japānas ziemas laiks\x16J" + + "apānas vasaras laiks!Petropavlovskas-Kamčatskas laiks(Petropavlovskas-Ka" + + "mčatskas ziemas laiks)Petropavlovskas-Kamčatskas vasaras laiks\x19Austru" + + "mkazahstānas laiks\x18Rietumkazahstānas laiks\x0dKorejas laiks\x14Koreja" + + "s ziemas laiks\x15Korejas vasaras laiks\x0cKosrae laiks\x13Krasnojarskas" + + " laiks\x1aKrasnojarskas ziemas laiks\x1bKrasnojarskas vasaras laiks\x13K" + + "irgizstānas laiks\x11Lainas salu laiks\x16Lorda Hava salas laiks\x1dLord" + + "a Hava salas ziemas laiks\x1eLorda Hava salas vasaras laiks\x15Makvorija" + + " salas laiks\x0fMagadanas laiks\x16Magadanas ziemas laiks\x17Magadanas v" + + "asaras laiks\x10Malaizijas laiks\x11Maldīvijas laiks\x14Marķīza salu lai" + + "ks\x14Māršala salu laiks\x11Maurīcijas laiks\x18Maurīcijas ziemas laiks" + + "\x19Maurīcijas vasaras laiks\x0dMosonas laiks\x1dZiemeļrietumu Meksikas " + + "laiks$Ziemeļrietumu Meksikas ziemas laiks%Ziemeļrietumu Meksikas vasaras" + + " laiks(Meksikas Klusā okeāna piekrastes laiks/Meksikas Klusā okeāna piek" + + "rastes ziemas laiks0Meksikas Klusā okeāna piekrastes vasaras laiks\x11Ul" + + "anbatoras laiks\x18Ulanbatoras ziemas laiks\x19Ulanbatoras vasaras laiks" + + "\x0eMaskavas laiks\x15Maskavas ziemas laiks\x16Maskavas vasaras laiks" + + "\x0dMjanmas laiks\x0bNauru laiks\x0eNepālas laiks\x15Jaunkaledonijas lai" + + "ks\x1cJaunkaledonijas ziemas laiks\x1dJaunkaledonijas vasaras laiks\x13J" + + "aunzēlandes laiks\x1aJaunzēlandes ziemas laiks\x1bJaunzēlandes vasaras l" + + "aiks\x15Ņūfaundlendas laiks\x1cŅūfaundlendas ziemas laiks\x1dŅūfaundlend" + + "as vasaras laiks\x0bNiues laiks\x15Norfolkas salas laiks\x1aFernandu di " + + "Noroņas laiks!Fernandu di Noroņas ziemas laiks\"Fernandu di Noroņas vasa" + + "ras laiks\x13Novosibirskas laiks\x1aNovosibirskas ziemas laiks\x1bNovosi" + + "birskas vasaras laiks\x0cOmskas laiks\x13Omskas ziemas laiks\x14Omskas v" + + "asaras laiks\x11Pakistānas laiks\x18Pakistānas ziemas laiks\x19Pakistāna" + + "s vasaras laiks\x0bPalau laiks\x18Papua-Jaungvinejas laiks\x10Paragvajas" + + " laiks\x17Paragvajas ziemas laiks\x18Paragvajas vasaras laiks\x0aPeru la" + + "iks\x11Peru ziemas laiks\x12Peru vasaras laiks\x0fFilipīnu laiks\x16Fili" + + "pīnu ziemas laiks\x17Filipīnu vasaras laiks\x13Fēniksa salu laiks\x1dSen" + + "pjēras un Mikelonas laiks$Senpjēras un Mikelonas ziemas laiks%Senpjēras " + + "un Mikelonas vasaras laiks\x10Pitkērnas laiks\x0dPonapē laiks\x0fPhenjan" + + "as laiks\x0fReinjonas laiks\x0dRoteras laiks\x10Sahalīnas laiks\x17Sahal" + + "īnas ziemas laiks\x18Sahalīnas vasaras laiks\x0dSamaras laiks\x14Samara" + + "s ziemas laiks\x15Samaras vasaras laiks\x0bSamoa laiks\x12Samoa ziemas l" + + "aiks\x13Samoa vasaras laiks\x14Seišeļu salu laiks\x11Singapūras laiks" + + "\x14Zālamana salu laiks\x19Dienviddžordžijas laiks\x0fSurinamas laiks" + + "\x0cŠovas laiks\x0bTaiti laiks\x0cTaibei laiks\x13Taibei ziemas laiks" + + "\x14Taibei vasaras laiks\x15Tadžikistānas laiks\x0dTokelau laiks\x0cTong" + + "as laiks\x13Tongas ziemas laiks\x14Tongas vasaras laiks\x0dČūkas laiks" + + "\x15Turkmenistānas laiks\x1cTurkmenistānas ziemas laiks\x1dTurkmenistāna" + + "s vasaras laiks\x0cTuvalu laiks\x0fUrugvajas laiks\x16Urugvajas ziemas l" + + "aiks\x17Urugvajas vasaras laiks\x13Uzbekistānas laiks\x1aUzbekistānas zi" + + "emas laiks\x1bUzbekistānas vasaras laiks\x0dVanuatu laiks\x14Vanuatu zie" + + "mas laiks\x15Vanuatu vasaras laiks\x11Venecuēlas laiks\x13Vladivostokas " + + "laiks\x1aVladivostokas ziemas laiks\x1bVladivostokas vasaras laiks\x11Vo" + + "lgogradas laiks\x18Volgogradas ziemas laiks\x19Volgogradas vasaras laiks" + + "\x0eVostokas laiks\x11Veika salas laiks\x18Volisas un Futunas laiks\x0fJ" + + "akutskas laiks\x16Jakutskas ziemas laiks\x17Jakutskas vasaras laiks\x15J" + + "ekaterinburgas laiks\x1cJekaterinburgas ziemas laiks\x1dJekaterinburgas " + + "vasaras laiks\x02A2\x02N4\x02F5\x02I6\x02A7\x02I8\x02K9\x0210\x0211\x021" + + "2\x02M5\x02M6\x02M7\x02M8\x02M9\x03M10\x03M11\x03M12\x04pon.\x04tor.\x04" + + "sre.\x05čet.\x04pet.\x04sob.\x02Mu\x02Cp\x02Ct\x02Cn\x02Cs\x02Mg\x07Vais" + + "aka\x07Jiaista\x05Asada\x07Sravana\x05Badra\x06Asvina\x07Kartika\x08Arga" + + "jana\x05Pauza\x04Maga\x07Falguna\x03ut.\x03sr.\x04sub." + +var bucket71 string = "" + // Size: 8632 bytes + "\x03Dal\x04Ará\x05Ɔɛn\x03Doy\x04Lép\x03Rok\x04Sás\x06Bɔ́r\x04Kús\x04Gís" + + "\x06Shʉ́\x06Ntʉ́\x0aOladalʉ́\x05Arát\x12Ɔɛnɨ́ɔɨŋɔk\x1aOlodoyíóríê inkókú" + + "â\x1bOloilépūnyīē inkókúâ\x0cKújúɔrɔk\x0bMórusásin\x16Ɔlɔ́ɨ́bɔ́rárɛ\x08" + + "Kúshîn\x08Olgísan\x0bPʉshʉ́ka\x0dNtʉ́ŋʉ́s\x0aJumapílí\x09Jumatátu\x06Jum" + + "ane\x0aJumatánɔ\x09Alaámisi\x06Jumáa\x09Jumamósi\x07Erobo 1\x07Erobo 2" + + "\x07Erobo 3\x07Erobo 4\x0cƐnkakɛnyá\x09Ɛndámâ\x10Meínō Yɛ́sʉ\x0fEínō Yɛ́" + + "sʉ\x09Ɛnkátá\x08Ɔlárì\x08Ɔlápà\x07Ewíkî\x0dƐnkɔlɔ́ŋ\x06Ŋolé\x07Táatá\x0c" + + "Tááisérè\x15Ɛnkɔ́lɔŋ ewíkî\x16Ɛnkakɛnyá/Ɛndámâ\x09Ɛ́sáâ\x0bOldákikaè\x14" + + "Ɛ́sáâ o inkuapí\x03JAN\x03FEB\x03MAC\x04ĨPU\x05MĨĨ\x03NJU\x03NJR\x03AGA" + + "\x03SPT\x03OKT\x03NOV\x03DEC\x08Januarĩ\x0aFeburuarĩ\x05Machi\x07Ĩpurũ" + + "\x05Mĩĩ\x05Njuni\x07Njuraĩ\x06Agasti\x08Septemba\x07Oktũba\x07Novemba" + + "\x07Dicemba\x03KIU\x03MRA\x03WAI\x03WET\x03WEN\x03WTN\x03JUM\x11Ĩmwe kĩr" + + "ĩ inya\x13Ijĩrĩ kĩrĩ inya\x13Ithatũ kĩrĩ inya\x10Inya kĩrĩ inya\x03RŨ" + + "\x03ŨG\x10Mbere ya Kristũ\x10Nyuma ya Kristũ\x06Ĩgita\x06Ntukũ\x11Ntukũ " + + "ya ngũgĩ\x06Ĩthaa\x07Ndagika\x10Gũntũ kwa thaa\x06zanvie\x07fevriye\x04m" + + "ars\x05avril\x02me\x03zin\x05zilye\x03out\x06septam\x05oktob\x05novam" + + "\x05desam\x03dim\x03lin\x03mar\x03mer\x02ze\x03van\x03sam\x06dimans\x05l" + + "indi\x05mardi\x08merkredi\x04zedi\x08vandredi\x05samdi\x091e trimes\x0a2" + + "em trimes\x0a3em trimes\x0a4em trimes\x0favan Zezi-Krist\x0fapre Zezi-Kr" + + "ist\x07av. Z-K\x07ap. Z-K\x05Lepok\x04Lane\x03Mwa\x06Semenn\x04Zour\x03Y" + + "er\x05Zordi\x05Demin\x0dZour lasemenn\x13Peryod dan lazourne\x03Ler\x05M" + + "init\x06Segonn\x0cPeryod letan\x07Janoary\x08Febroary\x06Martsa\x06April" + + "y\x03Mey\x04Jona\x05Jolay\x09Aogositra\x09Septambra\x07Oktobra\x08Novamb" + + "ra\x08Desambra\x03Mey\x04Alah\x05Alats\x03Tal\x04Alar\x04Alak\x03Zom\x04" + + "Asab\x07Alahady\x0bAlatsinainy\x06Talata\x08Alarobia\x09Alakamisy\x04Zom" + + "a\x08Asabotsy\x14Telovolana voalohany\x12Telovolana faharoa\x13Telovolan" + + "a fahatelo\x14Telovolana fahefatra\x0dAlohan’i JK\x0dAorian’i JK\x05Taon" + + "a\x06Volana\x0aHerinandro\x05Andro\x05Omaly\x04Anio\x0aRahampitso\x07Min" + + "itra\x08Segondra\x03Kwa\x03Una\x03Rar\x03Che\x03Tha\x03Moc\x03Sab\x03Nan" + + "\x03Tis\x03Kum\x03Moj\x03Yel\x0fMweri wo kwanza\x10Mweri wo unayeli\x10M" + + "weri wo uneraru\x12Mweri wo unecheshe\x11Mweri wo unethanu\x17Mweri wo t" + + "hanu na mocha\x0dMweri wo saba\x0dMweri wo nane\x0dMweri wo tisa\x0dMwer" + + "i wo kumi\x15Mweri wo kumi na moja\x19Mweri wo kumi na yel’li\x03Jtt\x03" + + "Jnn\x03Jtn\x03Ara\x03Iju\x03Jmo\x06Sabato\x08Jumatatu\x07Jumanne\x08Juma" + + "tano\x09Arahamisi\x06Ijumaa\x08Jumamosi\x08wichishu\x0cmchochil’l\x0dHin" + + "apiya yesu\x0aYopia yesu\x02HY\x02YY\x09kal’lai\x04yaka\x05mweri\x0biwik" + + "i mocha\x06nihuku\x09n’chana\x08lel’lo\x08me’llo\x18nihuku no mwisho wa " + + "wiki\x04isaa\x07idakika\x08isekunde\x07mbegtug\x0dimeg àbùbì\x10imeg mbə" + + "ŋchubi\x0eiməg ngwə̀t\x09iməg fog\x0fiməg ichiibɔd\x13iməg àdùmbə̀ŋ\x0c" + + "iməg ichika\x09iməg kud\x0eiməg tèsiʼe\x09iməg zò\x0diməg krizmed\x0dimə" + + "g mbegtug\x06Aneg 1\x06Aneg 2\x06Aneg 3\x06Aneg 4\x06Aneg 5\x06Aneg 6" + + "\x06Aneg 7\x06fituʼ\x05iməg\x04nkap\x05anəg\x06ikwiri\x0btèchɔ̀ŋ\x03isu" + + "\x07isu ywi\x0eanəg agu nkap\x17EEEE, dd MMMM y 'г'. G\x11dd MMMM y 'г'." + + " G\x08dd.M.y G\x0cdd.M.y GGGGG\x06тут\x08баба\x0aхатор\x0aкијак\x08тоба" + + "\x0aамшир\x10барамхат\x10барамуда\x0cбашанс\x0aпаона\x08епеп\x0aмесра" + + "\x08наси\x07ЕРА0\x07ЕРА1\x10мескерем\x0cтекемт\x0aхедар\x0cтахсас\x06тер" + + "\x0eјекатит\x0eмегабит\x0cмиазиа\x0cгенбот\x08сене\x0aхамле\x0cнехасе" + + "\x0eпагумен\x07јан.\x07фев.\x07мар.\x07апр.\x06мај\x07јун.\x07јул.\x07ав" + + "г.\x09септ.\x07окт.\x09ноем.\x07дек.\x0eјануари\x10февруари\x08март\x0a" + + "април\x08јуни\x08јули\x0cавгуст\x12септември\x10октомври\x0eноември\x10" + + "декември\x07нед.\x07пон.\x05вт.\x07сре.\x07чет.\x07пет.\x07саб.\x07вто." + + "\x0cнедела\x14понеделник\x0eвторник\x0aсреда\x10четврток\x0aпеток\x0cсаб" + + "ота\x0dјан-мар\x0dапр-јун\x0dјул-сеп\x0dокт-дек\x1dпрво тромесечје\x1fв" + + "торо тромесечје\x1fтрето тромесечје#четврто тромесечје\x0cполноќ\x0dпре" + + "тпл.\x10напладне\x09попл.\x0cнаутро\x0eнавечер\x08ноќе\x09полн.\x09напл" + + ".\x08утро\x07веч.\x14претпладне\x10попладне\x11по полноќ\x0cпладне\x11на" + + " полноќ\x1cпред нашата ера\x0cпр. н.е.\x18од нашата ера\x13нашата ера" + + "\x06dd.M.y\x07dd.M.yy\x0cчаитра\x0eвајсака\x0cјаиста\x0aасада\x0eсравана" + + "\x0aбадра\x0cасвина\x0eкартика\x14аграхајана\x0aпауса\x08мага\x0eфалгуна" + + "\x08Сака\x07мух.\x07саф.\x09раб. I\x0aраб. II\x09џум. I\x0aџум. II\x07ра" + + "џ.\x07шаб.\x07рам.\x07шав.\x09дулк.\x09дулх.\x0eмухарем\x0aсафар\x0aраб" + + "и I\x0bраби II\x0eџумада I\x0fџумада II\x0aраџаб\x0aшабан\x0eрамадан" + + "\x0aшавал\x0eдулкида\x0eдулхиџа\x12фарвардин\x14ордибехешт\x0cкордад\x06" + + "тир\x0cмордад\x10шахривар\x06мер\x08абан\x08азар\x06деј\x0cбахман\x0cес" + + "фанд\x0fпред Р.К.\x0cмингуо\x0cпр. Р.К.\x1dминатата година\x15оваа годи" + + "на\x1dследната година\x19пред {0} година\x19пред {0} години\x07год.\x10" + + "за {0} год.\x14пред {0} год.\x14тромесечје)последното тромесечје\x1bова" + + " тромесечје%следното тромесечје\x1dза {0} тромесечје\x1dза {0} тромесечј" + + "а!пред {0} тромесечје!пред {0} тромесечја\x0dтромес.\x16за {0} тромес." + + "\x1aпред {0} тромес.\x1bминатиот месец\x13овој месец\x1bследниот месец" + + "\x17пред {0} месец\x19пред {0} месеци\x1fминатата седмица\x17оваа седмиц" + + "а\x1fследната седмица\x17за {0} седмица\x17за {0} седмици\x1bпред {0} с" + + "едмица\x1bпред {0} седмици\x12{0} седмица\x07сед.\"седмица од месецот" + + "\x0eзавчера\x0aвчера\x0aденес\x08утре\x0eзадутре\x0fза {0} ден\x11за {0}" + + " дена\x13пред {0} ден\x15пред {0} дена\x1cден од годината\x13ден од год." + + "\x1cден од неделата\x1cден во неделата\x1aден од месецот\x13ден од мес." + + "\x1dминатата недела\x15оваа недела\x1dследната недела\x15за {0} недела" + + "\x15за {0} недели\x19пред {0} недела\x19пред {0} недели\x18минатата нед." + + "\x10оваа нед.\x18следната нед.\x10за {0} нед.\x14пред {0} нед.%минатиот " + + "понеделник\x1dовој понеделник%следниот понеделник\x1dза {0} понеделник" + + "\x1fза {0} понеделници!пред {0} понеделник#пред {0} понеделници\x18минат" + + "иот пон.\x10овој пон.\x18следниот пон.\x10за {0} пон.\x14пред {0} пон." + + "\x1fминатиот вторник\x17овој вторник\x1fследниот вторник\x17за {0} вторн" + + "ик\x19за {0} вторници\x1bпред {0} вторник\x1dпред {0} вторници\x18минат" + + "иот вто.\x10овој вто.\x18следниот вто.\x10за {0} вто.\x14пред {0} вто." + + "\x1bминатата среда\x13оваа среда\x1bследната среда\x13за {0} среда\x13за" + + " {0} среди\x17пред {0} среда\x17пред {0} среди\x18минатата сре.\x10оваа " + + "сре.\x18следната сре.\x10за {0} сре.\x14пред {0} сре.!минатиот четврток" + + "\x19овој четврток!следниот четврток\x19за {0} четврток\x1bза {0} четврто" + + "ци\x1dпред {0} четврток\x1fпред {0} четвртоци\x18минатиот чет.\x10овој " + + "чет.\x18следниот чет.\x10за {0} чет.\x14пред {0} чет.\x1bминатиот петок" + + "\x13овој петок\x1bследниот петок\x13за {0} петок\x15за {0} петоци\x17пре" + + "д {0} петок\x19пред {0} петоци\x18минатиот пет.\x10овој пет.\x18следнио" + + "т пет.\x10за {0} пет.\x14пред {0} пет.\x1dминатата сабота\x15оваа сабот" + + "а\x1dследната сабота\x15за {0} сабота\x15за {0} саботи\x19пред {0} сабо" + + "та\x19пред {0} саботи\x18минатата саб.\x10оваа саб.\x18следната саб." + + "\x10за {0} саб.\x14пред {0} саб.%претпладне/попладне\x0aчасов\x0fза {0} " + + "час\x11за {0} часа\x13пред {0} час\x15пред {0} часа\x03ч.\x15оваа минут" + + "а\x19пред {0} минута\x19пред {0} минути\x10за {0} мин.\x14пред {0} мин." + + "\x17за {0} секунда\x17за {0} секунди\x1bпред {0} секунда\x1bпред {0} сек" + + "унди\x10за {0} сек.\x14пред {0} сек.\x1bвременска зона\x13Време во {0}" + + "\x08{0} (+1)\x08{0} (+0):Координирано универзално време(Британско летно " + + "време*Ирско стандардно време\x0cякатит\x0eмагабит\x0cмиазия\x08сэнэ\x0a" + + "хамлэ\x0cнахасэ\x10эпагомен\x0bджум. I\x0cджум. II\x09радж.\x09шааб." + + "\x0cзуль-к.\x0cзуль-х.\x0cхордад\x10шахривер\x08мехр\x08азер\x06дей\x0cэ" + + "сфанд\x07феб.\x08март\x07апр.\x06мај\x06јун\x06јул\x07авг.\x07окт.\x07н" + + "ов.\x07дец.\x05ут.\x05ср.\x07суб.\x03Muk\x03Dun\x03Mar\x03Mod\x03Jol" + + "\x03Ped\x03Sok\x03Tib\x03Lab\x03Poo\x0aрабі I\x0bрабі II\x07дав.\x0dзу-л" + + "ь-к.\x0dзу-ль-х." + +var bucket72 string = "" + // Size: 8272 bytes + "6Акре летно сметање на времетоPЗападноафриканско летно сметање на времет" + + "оAЛетно сметање на времето во Алјаска?Летно сметање на времето во Амазо" + + "н@Централно летно сметање на времето<Источно летно сметање на времето@П" + + "ланинско летно сметање на времето@Пацифичко летно сметање на времето(Ан" + + "адирско летно време%Летно време во Апија<Арапско летно сметање на време" + + "тоEЛетно сметање на времето во АргентинаTЛетно сметање на времето во за" + + "падна Аргентина+Летно време во Ерменија@Атлантско летно сметање на врем" + + "етоZЛетно сметање на времето во Централна АвстралијаlЛетно сметање на в" + + "ремето во Централна и Западна АвстралијаVЛетно сметање на времето во Ис" + + "точна АвстралијаVЛетно сметање на времето во Западна Австралија/Летно в" + + "реме во Азербејџан<Летно време на Азорските Острови-Летно време во Банг" + + "ладешEЛетно сметање на времето во БразилијаFЛетно сметање на времето на" + + " Кабо Верде=Летно сметање на времето во Чатам;Летно сметање на времето в" + + "о Чиле;Летно сметање на времето во Кина-Летно време во ЧојбалсанEЛетно " + + "сметање на времето во Колумбија4Летно време на Островите Кук;Летно смет" + + "ање на времето во КубаBЛетно време на Велигденскиот Остров2Средноевропс" + + "ко летно време4Источноевропско летно време4Западноевропско летно време" + + "\\Летно сметање на времето на Фолкландските Острови#Летно време во Фиџи)" + + "Летно време во ГрузијаRЛетно сметање на времето во Источен ГренландRЛет" + + "но сметање на времето во Западен Гренланд_Летно сметање на времето во Х" + + "аваи - Алеутски острови,Летно време во Хонг Конг#Летно време во Ховд;Ле" + + "тно сметање на времето во Иран)Летно време во Иркутск?Летно сметање на " + + "времето во ИзраелCЛетно сметање на времето во Јапонија?Летно сметање на" + + " времето во Кореја1Летно време во КраснојарскBЛетно сметање на времето в" + + "о Лорд Хау)Летно време во МагаданEЛетно сметање на времето на Маврициус" + + "\\Летно сметање на времето во северозападно Мексико<Летно пацифичко врем" + + "е во Мексико.Летно време во Улан Батор?Летно сметање на времето во Моск" + + "ва8Летно време во Нова КаледонијаFЛетно сметање на времето во Нов Зелан" + + "дIЛетно сметање на времето на ЊуфаундлендUЛетно сметање на времето на Ф" + + "ернандо де Нороња1Летно време во Новосибирск#Летно време во Омск+Летно " + + "време во ПакистанCЛетно сметање на времето во Парагвај;Летно сметање на" + + " времето во Перу+Летно време во ФилипиниVЛетно сметање на времето на Сен" + + "т Пјер и Микелан)Летно време во Сакалин:Самара летно сметање на времето" + + "%Летно време во Самоа?Летно сметање на времето во Тајпеј%Летно време во " + + "Тонга3Летно време во ТуркменистанAЛетно сметање на времето во Уругвај/Л" + + "етно време во Узбекистан)Летно време во Вануату1Летно време во Владивос" + + "токEЛетно сметање на времето во Волгоград)Летно време во Јакутск3Летно " + + "време во Екатеринбург\x12ടൗട്ട്\x09ബാബ\x12ഹാറ്റർ\x18കിയാക്ക്\x09ടോബ\x0f" + + "ആംഷിർ\x1eബാരംഹാത്ത്\x12ബാരമൗഡ\x12ബാഷൻസ്\x0cപവോണ\x0fഈപെപ്\x0fമെസ്ര\x09ന" + + "സീ\x07ടൗ.\x07ബാ.\x07ഹാ.\x07കി.\x07ടോ.\x07ആം.\x04പ.\x04ഈ.\x07മെ.\x04ന." + + "\x19കാലഘട്ടം0\x19കാലഘട്ടം1\x1eമെസ്\u200cകെരെം!ടെക്കെംറ്റ്\x0cഹേദർ\x18തഹ്" + + "\u200cസാസ്\x09ടെർ*യെക്കാറ്റിറ്റ്\x1eമെഗാബിറ്റ്\x15മിയാസിയ\x1bഗെൻബോട്ട്" + + "\x0cസെനെ\x0fഹാംലെ\x12നെഹാസെ\x15പാഗുമെൻ\x07ടെ.\x07ഹേ.\x04ത.\x07യെ.\x07മി." + + "\x07ഗെ.\x07സെ.\x09ഹാം\x07നെ.\x07പാ.\x11G y, MMMM d, EEEE\x0bG y, MMMM d" + + "\x0aG y, MMM d\x09ജനു\x12ഫെബ്രു\x09മാർ\x0fഏപ്രി\x0cമേയ്\x09ജൂൺ\x0cജൂലൈ" + + "\x06ഓഗ\x18സെപ്റ്റം\x0fഒക്ടോ\x09നവം\x0cഡിസം\x03ജ\x06ഫെ\x06മാ\x03ഏ\x06മെ" + + "\x06ജൂ\x03ഓ\x06സെ\x03ഒ\x03ന\x06ഡി\x12ജനുവരി\x1bഫെബ്രുവരി\x15മാർച്ച്\x12ഏ" + + "പ്രിൽ\x18ഓഗസ്റ്റ്\x1eസെപ്റ്റംബർ\x18ഒക്\u200cടോബർ\x0fനവംബർ\x12ഡിസംബർ" + + "\x0cഞായർ\x12തിങ്കൾ\x0fചൊവ്വ\x0cബുധൻ\x12വ്യാഴം\x12വെള്ളി\x09ശനി\x03ഞ\x06ത" + + "ി\x06ചൊ\x06ബു\x0cവ്യാ\x06വെ\x03ശ\x06ഞാ\x1bഞായറാഴ്\u200cച!തിങ്കളാഴ്" + + "\u200cച\x1bചൊവ്വാഴ്ച\x1bബുധനാഴ്\u200cച\x1eവ്യാഴാഴ്\u200cച$വെള്ളിയാഴ്" + + "\u200cച\x1bശനിയാഴ്\u200cച\x1eചൊവ്വാഴ്\u200cച\x1fഒന്നാം പാദം\x1fരണ്ടാം പാ" + + "ദം\"മൂന്നാം പാദം\x1cനാലാം പാദം!അർദ്ധരാത്രി\x0cഉച്ച\x18പുലർച്ചെ\x12രാവി" + + "ലെ\x1eഉച്ചയ്ക്ക്$ഉച്ചതിരിഞ്ഞ്\x1eവൈകുന്നേരം\x12സന്ധ്യ\x12രാത്രി\x03അ:ക" + + "്രിസ്\u200cതുവിന് മുമ്പ്\x12ബി.സി.ഇ.\"ആന്നോ ഡൊമിനി\x0bസി.ഇ.\x14ക്രി.മു" + + ".\x0fബിസിഇ\x09എഡി\x09സിഇ\x0fy, MMMM d, EEEE\x09y, MMMM d\x08y, MMM d\x12" + + "തിഷ്റി\x15ഹെഷ്\u200cവൻ\x1bകിസ്\u200cലെവ്\x18ടിവെറ്റ്\x18സീബാറ്റ്\x0eഅദ" + + "ാർ I\x0cഅദാർ\x0fഅദാർ II\x0fനിസാൻ\x0cഇയാർ\x0fസിവാൻ\x12താമൂസ്\x09അബ്\x0c" + + "ഏലുൾ\x07തി.\x07ഹെ.\x07ടി.\x07സീ.\x05അ I\x04അ.\x06അ II\x07നി.\x04ഇ.\x07" + + "സി.\x07താ.\x04ഏ.\x12ചൈത്രം\x12വൈശാഖം\x18ജ്യേഷ്ഠം\x0fആഷാഢം\x15ശ്രാവണം" + + "\x1bഭാദ്രപാദം\x15ആശ്വിനം\x1bകാർത്തികം\x1bമാർഗശീർഷം\x0cപൗഷം\x0cമാഘം\x12ഫൽ" + + "ഗുനം\x06ചൈ\x06വൈ\x0cജ്യേ\x03ആ\x0cശ്രാ\x06ഭാ\x06കാ\x06പൗ\x03ഫ\x06ശക\x0a" + + "മുഹ.\x07സഫ. റബീഹുൽ അവ്വ.\x1dറബീഹുൽ ആഖി. ജമാദുൽ അവ്വ.\x1dജമാദുൽ ആഖി." + + "\x07റജ.\x0dശഹബാ.\x0dറമദാ.\x10ശവ്വാ.\x11ദുൽ ഖഹ.\x11ദുൽ ഹി.\x06മു\x03സ\x03" + + "റ\x06ദു\x0fമുഹറം\x09സഫർ\"റബീഹുൽ അവ്വൽ\x1fറബീഹുൽ ആഖിർ\"ജമാദുൽ അവ്വൽ\x1f" + + "ജമാദുൽ ആഖിർ\x0cറജബ്\x0fശഹബാൻ\x0fറമളാൻ\x12ശവ്വാൽ\x16ദുൽ ഖഹദ്\x19ദുൽ ഹിജ" + + "്ജ\x0fറമദാൻ" + +var bucket73 string = "" + // Size: 26297 bytes + "\x0cഹിജറ\x18ഫർവാർദിൻ-ഓർഡിബെഹെഷ്\u200cറ്റ്\x15ഖോർദാദ്\x09ടിർ\x15മോർദാദ്" + + "\x1bഷഹ്\u200cരിവാർ\x0cമെഹർ\x0cഅബാൻ\x09അസർ\x0cഡെയ്\x15ബഹ്\u200cമാൻ\x1bഎസ്" + + "\u200cഫാൻഡ്\x04ഫ.\x04ഓ.\x06ഖോ\x07ടി.\x07മോ.\x04ഷ.\x07മെ.\x04അ.\x07ഡെ." + + "\x04ബ.\x04എ..R.O.C-യ്\u200cക്ക് മുമ്പ്\x15മിംഗ്വോ#R.O.C-യ്\u200cക്ക് മു." + + "\x18കാലഘട്ടം\x0cവർഷം\x1fകഴിഞ്ഞ വർഷം\x13ഈ വർ\u200cഷം\x1eഅടുത്തവർഷം\x1c{0}" + + " വർഷത്തിൽ#{0} വർഷം മുമ്പ്\x04വ.\x0cപാദം\x1fകഴിഞ്ഞ പാദം\x10ഈ പാദം\x1fഅടുത" + + "്ത പാദം\x1c{0} പാദത്തിൽ#{0} പാദം മുമ്പ്\x0cമാസം\x1fകഴിഞ്ഞ മാസം\x10ഈ മാ" + + "സം\x1fഅടുത്ത മാസം\x1c{0} മാസത്തിൽ#{0} മാസം മുമ്പ്\x07മാ.\x0cആഴ്ച\"കഴിഞ" + + "്ഞ ആഴ്\u200cച\x10ഈ ആഴ്ച\x1fഅടുത്ത ആഴ്ച\x19{0} ആഴ്ചയിൽ#{0} ആഴ്ച മുമ്പ്#" + + "{0} വരുന്ന ആഴ്ച\x04ആ.+മാസത്തിലെ ആഴ്\u200cച\x1aമാസ. ആഴ്\u200cച\x0fദിവസം$മ" + + "ിനിഞ്ഞാന്ന്\x12ഇന്നലെ\x0fഇന്ന്\x0cനാളെ\x1bമറ്റന്നാൾ\x1f{0} ദിവസത്തിൽ&{" + + "0} ദിവസം മുമ്പ്+വർഷത്തിലെ ദിവസം\x1aവർഷ. ദിവസം(ആഴ്ചയിലെ ദിവസം ആഴ്\u200cച." + + " ദിവസംCമാസത്തിലെ പ്രവർത്തിദിനം2മാസ. പ്രവർത്തിദിനം+കഴിഞ്ഞ ഞായറാഴ്ച\x1cഈ ഞ" + + "ായറാഴ്ച+അടുത്ത ഞായറാഴ്ച%{0} ഞായറാഴ്ചയിൽ/{0} ഞായറാഴ്ച മുമ്പ്\x1fകഴിഞ്ഞ " + + "ഞായർ\x10ഈ ഞായർ\x1fഅടുത്ത ഞായർ1കഴിഞ്ഞ തിങ്കളാഴ്ച\"ഈ തിങ്കളാഴ്ച1അടുത്ത ത" + + "ിങ്കളാഴ്ച+{0} തിങ്കളാഴ്ചയിൽ5{0} തിങ്കളാഴ്ച മുമ്പ്%കഴിഞ്ഞ തിങ്കൾ\x16ഈ ത" + + "ിങ്കൾ%അടുത്ത തിങ്കൾ.കഴിഞ്ഞ ചൊവ്വാഴ്ച\x1fഈ ചൊവ്വാഴ്ച.അടുത്ത ചൊവ്വാഴ്ച({" + + "0} ചൊവ്വാഴ്ചയിൽ2{0} ചൊവ്വാഴ്ച മുമ്പ്\"കഴിഞ്ഞ ചൊവ്വ\x13ഈ ചൊവ്വ\"അടുത്ത ചൊ" + + "വ്വ+കഴിഞ്ഞ ബുധനാഴ്ച\x1cഈ ബുധനാഴ്ച+അടുത്ത ബുധനാഴ്ച%{0} ബുധനാഴ്ചയിൽ/{0} " + + "ബുധനാഴ്ച മുമ്പ്\x1fകഴിഞ്ഞ ബുധൻ\x10ഈ ബുധൻ\x1fഅടുത്ത ബുധൻ.കഴിഞ്ഞ വ്യാഴാഴ" + + "്ച\x1fഈ വ്യാഴാഴ്ച.അടുത്ത വ്യാഴാഴ്ച({0} വ്യാഴാഴ്ചയിൽ2{0} വ്യാഴാഴ്ച മുമ്" + + "പ്%കഴിഞ്ഞ വ്യാഴം\x16ഈ വ്യാഴം%അടുത്ത വ്യാഴം4കഴിഞ്ഞ വെള്ളിയാഴ്ച%ഈ വെള്ളി" + + "യാഴ്ച4അടുത്ത വെള്ളിയാഴ്ച.{0} വെള്ളിയാഴ്ചയിൽ8{0} വെള്ളിയാഴ്ച മുമ്പ്%കഴി" + + "ഞ്ഞ വെള്ളി\x16ഈ വെള്ളി%അടുത്ത വെള്ളി+കഴിഞ്ഞ ശനിയാഴ്ച\x1cഈ ശനിയാഴ്ച+അടു" + + "ത്ത ശനിയാഴ്ച%{0} ശനിയാഴ്ചയിൽ/{0} ശനിയാഴ്ച മുമ്പ്\x1cകഴിഞ്ഞ ശനി\x0dഈ ശന" + + "ി\x1cഅടുത്ത ശനി\x18മണിക്കൂർ\"ഈ മണിക്കൂറിൽ\"{0} മണിക്കൂറിൽ/{0} മണിക്കൂർ" + + " മുമ്പ്\x04മ.\x18മിനിറ്റ്\x1fഈ മിനിറ്റിൽ\x1f{0} മിനിറ്റിൽ/{0} മിനിറ്റ് മ" + + "ുമ്പ്\x18സെക്കൻഡ്\x12ഇപ്പോൾ\x1f{0} സെക്കൻഡിൽ/{0} സെക്കൻഡ് മുമ്പ്\x16സമ" + + "യ മേഖല\x10{0} സമയം){0} ഡേലൈറ്റ് സമയം5{0} സ്റ്റാൻഡേർഡ് സമയംPകോർഡിനേറ്റഡ" + + "് യൂണിവേഴ്\u200cസൽ ടൈംMബ്രിട്ടീഷ് ഗ്രീഷ്\u200cമകാല സമയംAഐറിഷ് സ്റ്റാൻഡ" + + "േർഡ് സമയം\"എയ്ക്കർ സമയംGഎയ്ക്കർ സ്റ്റാൻഡേർഡ് സമയം>എയ്ക്കർ വേനൽക്കാല സമ" + + "യം4അഫ്\u200cഗാനിസ്ഥാൻ സമയം2മധ്യ ആഫ്രിക്ക സമയം;കിഴക്കൻ ആഫ്രിക്ക സമയം\\ദ" + + "ക്ഷിണാഫ്രിക്ക സ്റ്റാൻഡേർഡ് സമയംAപടിഞ്ഞാറൻ ആഫ്രിക്ക സമയംfപടിഞ്ഞാറൻ ആഫ്ര" + + "ിക്ക സ്റ്റാൻഡേർഡ് സമയംcപടിഞ്ഞാറൻ ആഫ്രിക്ക ഗ്രീഷ്\u200cമകാല സമയം\"അലാസ്" + + "\u200cക സമയംDഅലാസ്ക സ്റ്റാൻഡേർഡ് സമയം;അലാസ്\u200cക ഡേലൈറ്റ് സമയം\x1cഅൽമത" + + "ി സമയംAഅൽമതി സ്റ്റാൻഡേർഡ് സമയം8അൽമതി വേനൽക്കാല സമയം\x1cആമസോൺ സമയംAആമസോ" + + "ൺ സ്റ്റാൻഡേർഡ് സമയം>ആമസോൺ ഗ്രീഷ്\u200cമകാല സമയംQവടക്കെ അമേരിക്കൻ സെൻട്" + + "രൽ സമയംvവടക്കെ അമേരിക്കൻ സെൻട്രൽ സ്റ്റാൻഡേർഡ് സമയംjവടക്കെ അമേരിക്കൻ സെ" + + "ൻട്രൽ ഡേലൈറ്റ് സമയംQവടക്കെ അമേരിക്കൻ കിഴക്കൻ സമയംvവടക്കെ അമേരിക്കൻ കിഴ" + + "ക്കൻ സ്റ്റാൻഡേർഡ് സമയംjവടക്കെ അമേരിക്കൻ കിഴക്കൻ ഡേലൈറ്റ് സമയംNവടക്കെ അ" + + "മേരിക്കൻ മൌണ്ടൻ സമയംsവടക്കെ അമേരിക്കൻ മൗണ്ടൻ സ്റ്റാൻഡേർഡ് സമയംgവടക്കെ " + + "അമേരിക്കൻ മൗണ്ടൻ ഡേലൈറ്റ് സമയംNവടക്കെ അമേരിക്കൻ പസഫിക് സമയംsവടക്കെ അമേ" + + "രിക്കൻ പസഫിക് സ്റ്റാൻഡേർഡ് സമയംgവടക്കെ അമേരിക്കൻ പസഫിക് ഡേലൈറ്റ് സമയം" + + "\x1fഅനാഡിർ സമയംDഅനാഡിർ സ്റ്റാൻഡേർഡ് സമയം;അനാഡിർ വേനൽക്കാല സമയം\x19അപിയ സ" + + "മയം>അപിയ സ്റ്റാൻഡേർഡ് സമയം2അപിയ ഡേലൈറ്റ് സമയം\x1cഅഖ്തൌ സമയംAഅഖ്തൌ സ്റ്" + + "റാൻഡേർഡ് സമയം8അഖ്തൌ വേനൽക്കാല സമയം\"അഖ്തോബ് സമയംGഅഖ്തോബ് സ്റ്റാൻഡേർഡ് " + + "സമയം>അഖ്തോബ് വേനൽക്കാല സമയം\"അറേബ്യൻ സമയംGഅറേബ്യൻ സ്റ്റാൻഡേർഡ് സമയം;അറ" + + "േബ്യൻ ഡേലൈറ്റ് സമയം%അർജന്റീന സമയംJഅർജന്റീന സ്റ്റാൻഡേർഡ് സമയംGഅർജന്റീന " + + "ഗ്രീഷ്\u200cമകാല സമയംAപടിഞ്ഞാറൻ അർജന്റീന സമയംfപടിഞ്ഞാറൻ അർജന്റീന സ്റ്റ" + + "ാൻഡേർഡ് സമയംcപടിഞ്ഞാറൻ അർജന്റീന ഗ്രീഷ്\u200cമകാല സമയം\"അർമേനിയ സമയംGഅർ" + + "മേനിയ സ്റ്റാൻഡേർഡ് സമയംDഅർമേനിയ ഗ്രീഷ്\u200cമകാല സമയം7അറ്റ്\u200cലാന്റ" + + "ിക് സമയം\\അറ്റ്\u200cലാന്റിക് സ്റ്റാൻഡേർഡ് സമയംPഅറ്റ്\u200cലാന്റിക് ഡേ" + + "ലൈറ്റ് സമയംAസെൻട്രൽ ഓസ്ട്രേലിയ സമയംiഓസ്ട്രേലിയൻ സെൻട്രൽ സ്റ്റാൻഡേർഡ് സ" + + "മയം]ഓസ്ട്രേലിയൻ സെൻട്രൽ ഡേലൈറ്റ് സമയം`ഓസ്ട്രേലിയൻ സെൻട്രൽ പടിഞ്ഞാറൻ സമ" + + "യം\x85ഓസ്ട്രേലിയൻ സെൻട്രൽ പടിഞ്ഞാറൻ സ്റ്റാൻഡേർഡ് സമയംyഓസ്ട്രേലിയൻ സെൻട" + + "്രൽ പടിഞ്ഞാറൻ ഡേലൈറ്റ് സമയംDകിഴക്കൻ ഓസ്\u200cട്രേലിയ സമയംlഓസ്\u200cട്ര" + + "േലിയൻ കിഴക്കൻ സ്റ്റാൻഡേർഡ് സമയം`ഓസ്\u200cട്രേലിയൻ കിഴക്കൻ ഡേലൈറ്റ് സമയ" + + "ംJപടിഞ്ഞാറൻ ഓസ്\u200cട്രേലിയ സമയംrഓസ്\u200cട്രേലിയൻ പടിഞ്ഞാറൻ സ്റ്റാൻഡ" + + "േർഡ് സമയംfഓസ്\u200cട്രേലിയൻ പടിഞ്ഞാറൻ ഡേലൈറ്റ് സമയം%അസർബൈജാൻ സമയംJഅസർബ" + + "ൈജാൻ സ്റ്റാൻഡേർഡ് സമയംGഅസർബൈജാൻ ഗ്രീഷ്\u200cമകാല സമയം\x1fഅസോർസ് സമയംDഅ" + + "സോർസ് സ്റ്റാൻഡേർഡ് സമയംAഅസോർസ് ഗ്രീഷ്\u200cമകാല സമയം+ബംഗ്ലാദേശ് സമയംPബ" + + "ംഗ്ലാദേശ് സ്റ്റാൻഡേർഡ് സമയംMബംഗ്ലാദേശ് ഗ്രീഷ്\u200cമകാല സമയം\"ഭൂട്ടാൻ " + + "സമയം\"ബൊളീവിയ സമയം%ബ്രസീലിയ സമയംJബ്രസീലിയ സ്റ്റാൻഡേർഡ് സമയംGബ്രസീലിയ ഗ" + + "്രീഷ്\u200cമകാല സമയം>ബ്രൂണൈ ദാറുസ്സലാം സമയം)കേപ് വെർദെ സമയംNകേപ് വെർദെ" + + " സ്റ്റാൻഡേർഡ് സമയംKകേപ് വെർദെ ഗ്രീഷ്\u200cമകാല സമയംAചമോറോ സ്റ്റാൻഡേർഡ് സ" + + "മയം\x1fചാത്തം സമയംDചാത്തം സ്റ്റാൻഡേർഡ് സമയംAചാത്തം ഗ്രീഷ്\u200cമകാല സമ" + + "യം\x19ചിലി സമയം>ചിലി സ്റ്റാൻഡേർഡ് സമയം;ചിലി ഗ്രീഷ്\u200cമകാല സമയം\x16ച" + + "ൈന സമയം;ചൈന സ്റ്റാൻഡേർഡ് സമയം/ചൈന ഡേലൈറ്റ് സമയം+ചോയി\u200dബൽസാൻ സമയംPച" + + "ോയ്\u200cബൽസാൻ സ്റ്റാൻഡേർഡ് സമയംJചോയിബൽസാൻ ഗ്രീഷ്\u200cമകാല സമയം>ക്രിസ" + + "്\u200cമസ് ദ്വീപ് സമയം>കൊക്കോസ് ദ്വീപുകൾ സമയം\"കൊളംബിയ സമയംGകൊളംബിയ സ്" + + "റ്റാൻഡേർഡ് സമയംDകൊളംബിയ ഗ്രീഷ്\u200cമകാല സമയം8കുക്ക് ദ്വീപുകൾ സമയം]കുക" + + "്ക് ദ്വീപുകൾ സ്റ്റാൻഡേർഡ് സമയംjകുക്ക് ദ്വീപുകൾ അർദ്ധ ഗ്രീഷ്\u200cമകാല " + + "സമയം\x1cക്യൂബ സമയംAക്യൂബ സ്റ്റാൻഡേർഡ് സമയം5ക്യൂബ ഡേലൈറ്റ് സമയം\x1fഡേവി" + + "സ് സമയംEഡുമോണ്ട് ഡി ഉർവില്ലെ സമയം2കിഴക്കൻ തിമോർ സമയം5ഈസ്റ്റർ ദ്വീപ് സമ" + + "യംZഈസ്റ്റർ ദ്വീപ് സ്റ്റാൻഡേർഡ് സമയംWഈസ്റ്റർ ദ്വീപ് ഗ്രീഷ്\u200cമകാല സമ" + + "യം\"ഇക്വഡോർ സമയം;സെൻട്രൽ യൂറോപ്യൻ സമയം`സെൻട്രൽ യൂറോപ്യൻ സ്റ്റാൻഡേർഡ് സ" + + "മയംZസെൻട്രൽ യൂറോപ്യൻ ഗ്രീഷ്മകാല സമയം;കിഴക്കൻ യൂറോപ്യൻ സമയം`കിഴക്കൻ യൂറ" + + "ോപ്യൻ സ്റ്റാൻഡേർഡ് സമയംZകിഴക്കൻ യൂറോപ്യൻ ഗ്രീഷ്മകാല സമയംSകിഴക്കേയറ്റത്" + + "തെ യൂറോപ്യൻ സമയംAപടിഞ്ഞാറൻ യൂറോപ്യൻ സമയംfപടിഞ്ഞാറൻ യൂറോപ്യൻ സ്റ്റാൻഡേർ" + + "ഡ് സമയംcപടിഞ്ഞാറൻ യൂറോപ്യൻ ഗ്രീഷ്\u200cമകാല സമയംJഫാക്ക്\u200cലാൻഡ് ദ്വ" + + "ീപുകൾ സമയംoഫാക്ക്\u200cലാൻഡ് ദ്വീപുകൾ സ്റ്റാൻഡേർഡ് സമയംlഫാക്ക്\u200cലാ" + + "ൻഡ് ദ്വീപുകൾ ഗ്രീഷ്\u200cമകാല സമയം\x19ഫിജി സമയം>ഫിജി സ്റ്റാൻഡേർഡ് സമയം" + + ";ഫിജി ഗ്രീഷ്\u200cമകാല സമയം/ഫ്രഞ്ച് ഗയാന സമയംUഫ്രഞ്ച് സതേൺ, അന്റാർട്ടിക്" + + " സമയം+ഗാലപ്പഗോസ് സമയം%ഗാമ്പിയർ സമയം%ജോർജ്ജിയ സമയംJജോർജ്ജിയ സ്റ്റാൻഡേർഡ് " + + "സമയംGജോർജ്ജിയ ഗ്രീഷ്\u200cമകാല സമയംDഗിൽബേർട്ട് ദ്വീപുകൾ സമയം8ഗ്രീൻവിച്" + + "ച് മീൻ സമയംAകിഴക്കൻ ഗ്രീൻലാൻഡ് സമയംfകിഴക്കൻ ഗ്രീൻലാൻഡ് സ്റ്റാൻഡേർഡ് സമ" + + "യംcകിഴക്കൻ ഗ്രീൻലാൻഡ് ഗ്രീഷ്\u200cമകാല സമയംGപടിഞ്ഞാറൻ ഗ്രീൻലാൻഡ് സമയംl" + + "പടിഞ്ഞാറൻ ഗ്രീൻലാൻഡ് സ്റ്റാൻഡേർഡ് സമയംiപടിഞ്ഞാറൻ ഗ്രീൻലാൻഡ് ഗ്രീഷ്" + + "\u200cമകാല സമയംAഗ്വാം സ്റ്റാൻഡേർഡ് സമയം>ഗൾഫ് സ്റ്റാൻഡേർഡ് സമയം\x19ഗയാന സ" + + "മയം2ഹവായ്-അലൂഷ്യൻ സമയംWഹവായ്-അലൂഷ്യൻ സ്റ്റാൻഡേർഡ് സമയംKഹവായ്-അലൂഷ്യൻ ഡ" + + "േലൈറ്റ് സമയം+ഹോങ്കോങ്ങ് സമയംPഹോങ്കോങ്ങ് സ്റ്റാൻഡേർഡ് സമയംMഹോങ്കോങ്ങ് ഗ" + + "്രീഷ്\u200cമകാല സമയം\x19ഹോഡ് സമയം>ഹോഡ് സ്റ്റാൻഡേർഡ് സമയം;ഹോഡ് ഗ്രീഷ്" + + "\u200cമകാല സമയംGഇന്ത്യൻ സ്റ്റാൻഡേർഡ് സമയം>ഇന്ത്യൻ മഹാസമുദ്ര സമയം\"ഇൻഡോചൈ" + + "ന സമയം8മധ്യ ഇന്തോനേഷ്യ സമയംAകിഴക്കൻ ഇന്തോനേഷ്യ സമയംGപടിഞ്ഞാറൻ ഇന്തോനേഷ" + + "്യ സമയം\x19ഇറാൻ സമയം>ഇറാൻ സ്റ്റാൻഡേർഡ് സമയം2ഇറാൻ ഡേലൈറ്റ് സമയം\"ഇർകസ്ക" + + "് സമയംGഇർകസ്ക് സ്റ്റാൻഡേർഡ് സമയംGഇർകസ്\u200cക് ഗ്രീഷ്\u200cമകാല സമയം%ഇ" + + "സ്രായേൽ സമയംJഇസ്രായേൽ സ്റ്റാൻഡേർഡ് സമയം>ഇസ്രായേൽ ഡേലൈറ്റ് സമയം\x1fജപ്പ" + + "ാൻ സമയംDജപ്പാൻ സ്റ്റാൻഡേർഡ് സമയം8ജപ്പാൻ ഡേലൈറ്റ് സമയംYപെട്രോപാവ്\u200c" + + "ലോസ്ക് കംചാസ്കി സമയം~പെട്രോപാവ്\u200cലോസ്ക് കംചാസ്കി സ്റ്റാൻഡേർഡ് സമയം" + + "uപെട്രോപാവ്\u200cലോസ്ക് കംചാസ്കി വേനൽക്കാല സമയംAകിഴക്കൻ കസാഖിസ്ഥാൻ സമയംG" + + "പടിഞ്ഞാറൻ കസാഖിസ്ഥാൻ സമയം\x1fകൊറിയൻ സമയംDകൊറിയൻ സ്റ്റാൻഡേർഡ് സമയം8കൊറി" + + "യൻ ഡേലൈറ്റ് സമയം\x1cകൊസ്ര സമയം@ക്രാസ്\u200cനോയാർസ്\u200cക് സമയംeക്രാസ്" + + "\u200cനോയാർസ്\u200cക് സ്റ്റാൻഡേർഡ് സമയംbക്രാസ്\u200cനോയാർസ്\u200cക് ഗ്രീ" + + "ഷ്\u200cമകാല സമയം+കിർഗിസ്ഥാൻ സമയം\x19ലങ്ക സമയം/ലൈൻ ദ്വീപുകൾ സമയം)ലോർഡ്" + + " ഹോവ് സമയംNലോർഡ് ഹോവ് സ്റ്റാൻഡേർഡ് സമയംBലോർഡ് ഹോവ് ഡേലൈറ്റ് സമയം\x16മകൌ " + + "സമയം;മകൌ സ്റ്റാൻഡേർഡ് സമയം2മകൌ വേനൽക്കാല സമയം5മക്വാറി ദ്വീപ് സമയം\x1cമ" + + "ഗാദൻ സമയംAമഗാദൻ സ്റ്റാൻഡേർഡ് സമയം>മഗാദൻ ഗ്രീഷ്\u200cമകാല സമയം\x1fമലേഷ്" + + "യ സമയം1മാലിദ്വീപുകൾ സമയം%മർക്കസസ് സമയം5മാർഷൽ ദ്വീപുകൾ സമയം(മൗറീഷ്യസ് സ" + + "മയംMമൗറീഷ്യസ് സ്റ്റാൻഡേർഡ് സമയംJമൗറീഷ്യസ് ഗ്രീഷ്\u200cമകാല സമയം\x19മാസ" + + "ൺ സമയംYവടക്കുപടിഞ്ഞാറൻ മെക്സിക്കൻ സമയം\x81വടക്കുപടിഞ്ഞാറൻ മെക്\u200cസി" + + "ക്കൻ സ്റ്റാൻഡേർഡ് സമയംrവടക്കുപടിഞ്ഞാറൻ മെക്സിക്കൻ ഡേലൈറ്റ് സമയം>മെക്സി" + + "ക്കൻ പസഫിക് സമയംfമെക്\u200cസിക്കൻ പസഫിക് സ്റ്റാൻഡേർഡ് സമയംWമെക്സിക്കൻ " + + "പസഫിക് ഡേലൈറ്റ് സമയം&ഉലൻ ബറ്റർ സമയംKഉലൻ ബറ്റർ സ്റ്റാൻഡേർഡ് സമയംHഉലൻ ബറ" + + "്റർ ഗ്രീഷ്\u200cമകാല സമയം\x1fമോസ്കോ സമയംDമോസ്കോ സ്റ്റാൻഡേർഡ് സമയംDമോസ്" + + "\u200cകോ ഗ്രീഷ്\u200cമകാല സമയം%മ്യാൻമാർ സമയം\x19നൗറു സമയം\"നേപ്പാൾ സമയം5" + + "ന്യൂ കാലിഡോണിയ സമയംZന്യൂ കാലിഡോണിയ സ്റ്റാൻഡേർഡ് സമയംWന്യൂ കാലിഡോണിയ ഗ്" + + "രീഷ്\u200cമകാല സമയം.ന്യൂസിലാൻഡ് സമയംSന്യൂസിലാൻഡ് സ്റ്റാൻഡേർഡ് സമയംGന്യ" + + "ൂസിലാൻഡ് ഡേലൈറ്റ് സമയം@ന്യൂഫൗണ്ട്\u200cലാന്റ് സമയംeന്യൂഫൗണ്ട്\u200cലാന" + + "്റ് സ്റ്റാൻഡേർഡ് സമയംYന്യൂഫൗണ്ട്\u200cലാന്റ് ഡേലൈറ്റ് സമയം\x1fന്യൂയി സ" + + "മയംAനോർഫാക്ക് ദ്വീപുകൾ സമയം<ഫെർണാഡോ ഡി നൊറോൻഹ സമയംaഫെർണാഡോ ഡി നൊറോൻഹ സ" + + "്റ്റാൻഡേർഡ് സമയം^ഫെർണാഡോ ഡി നൊറോൻഹ ഗ്രീഷ്\u200cമകാല സമയംQനോർത്ത് മറിയാ" + + "നാ ദ്വീപുകൾ സമയം7നോവോസിബിർസ്\u200cക് സമയംYനോവോസിബിർസ്ക് സ്റ്റാൻഡേർഡ് സ" + + "മയംYനോവോസിബിർസ്\u200cക് ഗ്രീഷ്\u200cമകാല സമയം(ഓംസ്\u200cക്ക് സമയംMഓംസ്" + + "\u200cക്ക് സ്റ്റാൻഡേർഡ് സമയംJഓംസ്\u200cക്ക് ഗ്രീഷ്\u200cമകാല സമയം.പാക്കി" + + "സ്ഥാൻ സമയംSപാക്കിസ്ഥാൻ സ്റ്റാൻഡേർഡ് സമയംPപാക്കിസ്ഥാൻ ഗ്രീഷ്\u200cമകാല " + + "സമയം\x1cപലാവു സമയം?പാപ്പുവ ന്യൂ ഗിനിയ സമയം\"പരാഗ്വേ സമയംGപരാഗ്വേ സ്റ്റ" + + "ാൻഡേർഡ് സമയംDപരാഗ്വേ ഗ്രീഷ്\u200cമകാല സമയം\x19പെറു സമയം>പെറു സ്റ്റാൻഡേ" + + "ർഡ് സമയം;പെറു ഗ്രീഷ്\u200cമകാല സമയം(ഫിലിപ്പൈൻ സമയംMഫിലിപ്പൈൻ സ്റ്റാൻഡേ" + + "ർഡ് സമയംJഫിലിപ്പൈൻ ഗ്രീഷ്\u200cമകാല സമയംAഫിനിക്\u200cസ് ദ്വീപുകൾ സമയംR" + + "സെന്റ് പിയറി ആൻഡ് മിക്വലൻ സമയംwസെന്റ് പിയറി ആൻഡ് മിക്വലൻ സ്റ്റാൻഡേർഡ് " + + "സമയംkസെന്റ് പിയറി ആൻഡ് മിക്വലൻ ഡേലൈറ്റ് സമയം(പിറ്റ്കേൻ സമയം%പൊനാപ്പ് സ" + + "മയം4പ്യോംഗ്\u200cയാംഗ് സമയം%ഖിസിലോർഡ സമയംJഖിസിലോർഡ സ്റ്റാൻഡേർഡ് സമയംAഖ" + + "ിസിലോർഡ വേനൽക്കാല സമയം%റീയൂണിയൻ സമയം\x1cറോഥെറ സമയം\x1fസഖാലിൻ സമയംDസഖാല" + + "ിൻ സ്റ്റാൻഡേർഡ് സമയംAസഖാലിൻ ഗ്രീഷ്\u200cമകാല സമയം\x19സമാര സമയം>സമാറ സ്" + + "റ്റാൻഡേർഡ് സമയം5സമാറ വേനൽക്കാല സമയം\x19സമോവ സമയം>സമോവ സ്റ്റാൻഡേർഡ് സമയ" + + "ം>സമോവാ ഗ്രീഷ്\u200cമകാല സമയം\"സീഷെൽസ് സമയംMസിംഗപ്പൂർ സ്റ്റാൻഡേർഡ് സമയ" + + "ം5സോളമൻ ദ്വീപുകൾ സമയം;ദക്ഷിണ ജോർജ്ജിയൻ സമയം(സുരിനെയിം സമയം\x19സയോവ സമയ" + + "ം\x1fതാഹിതി സമയം(തായ്\u200cപെയ് സമയംMതായ്\u200cപെയ് സ്റ്റാൻഡേർഡ് സമയംA" + + "തായ്\u200cപെയ് ഡേലൈറ്റ് സമയം4താജിക്കിസ്ഥാൻ സമയം%ടോക്കെലൂ സമയം\x19ടോംഗ " + + "സമയം>ടോംഗ സ്റ്റാൻഡേർഡ് സമയം;ടോംഗ ഗ്രീഷ്\u200cമകാല സമയം\x1fചൂക്ക് സമയം@" + + "തുർക്ക്\u200cമെനിസ്ഥാൻ സമയംeതുർക്ക്\u200cമെനിസ്ഥാൻ സ്റ്റാൻഡേർഡ് സമയംbത" + + "ുർക്ക്\u200cമെനിസ്ഥാൻ ഗ്രീഷ്\u200cമകാല സമയം\x1fടുവാലു സമയം\"ഉറുഗ്വേ സമ" + + "യംGഉറുഗ്വേ സ്റ്റാൻഡേർഡ് സമയംDഉറുഗ്വേ ഗ്രീഷ്\u200cമകാല സമയം:ഉസ്\u200cബെ" + + "ക്കിസ്ഥാൻ സമയം_ഉസ്\u200cബെക്കിസ്ഥാൻ സ്റ്റാൻഡേർഡ് സമയം\\ഉസ്\u200cബെക്കി" + + "സ്ഥാൻ ഗ്രീഷ്\u200cമകാല സമയം\"വന്വാതു സമയംGവന്വാതു സ്റ്റാൻഡേർഡ് സമയംDവന" + + "്വാതു ഗ്രീഷ്\u200cമകാല സമയം(വെനിസ്വേല സമയം=വ്ലാഡിവോസ്റ്റോക് സമയംbവ്ലാഡ" + + "ിവോസ്റ്റോക് സ്റ്റാൻഡേർഡ് സമയം_വ്ലാഡിവോസ്റ്റോക് ഗ്രീഷ്\u200cമകാല സമയം.വ" + + "ോൾഗോഗ്രാഡ് സമയംSവോൾഗോഗ്രാഡ് സ്റ്റാൻഡേർഡ് സമയംPവോൾഗോഗ്രാഡ് ഗ്രീഷ്\u200c" + + "മകാല സമയം+വോസ്റ്റോക് സമയം2വേക്ക് ദ്വീപ് സമയംKവാലിസ് ആന്റ് ഫ്യൂച്യുന സമ" + + "യം+യാകസ്\u200cക്ക് സമയംPയാകസ്\u200cക്ക് സ്റ്റാൻഡേർഡ് സമയംMയാകസ്\u200cക" + + "്ക് ഗ്രീഷ്\u200cമകാല സമയം=യെക്കാറ്റരിൻബർഗ് സമയംbയെക്കാറ്റരിൻബർഗ് സ്റ്റ" + + "ാൻഡേർഡ് സമയം_യെക്കാറ്റരിൻബർഗ് ഗ്രീഷ്\u200cമകാല സമയം" + +var bucket74 string = "" + // Size: 15242 bytes + "#EEEE, y 'оны' MM 'сарын' dd\x1dy 'оны' MM 'сарын' dd\x06y MM d\x0b1-р с" + + "ар\x0b2-р сар\x0b3-р сар\x0b4-р сар\x0b5-р сар\x0b6-р сар\x0b7-р сар" + + "\x0b8-р сар\x0b9-р сар\x0c10-р сар\x0c11-р сар\x0c12-р сар\x19Нэгдүгээр " + + "сар\x1bХоёрдугаар сар\x1dГуравдугаар сар\x1dДөрөвдүгээр сар\x19Тавдугаа" + + "р сар\x1fЗургаадугаар сар\x19Долдугаар сар\x1bНаймдугаар сар\x17Есдүгээ" + + "р сар\x1bАравдугаар сар$Арван нэгдүгээр сар&Арван хоёрдугаар сар\x04Ня" + + "\x04Да\x04Мя\x04Лх\x04Пү\x04Ба\x04Бя\x06ням\x0aдаваа\x0cмягмар\x0cлхагва" + + "\x0aпүрэв\x0cбаасан\x0aбямба\x0eI улирал\x0fII улирал\x10III улирал\x0fI" + + "V улирал\x111-р улирал\x112-р улирал\x113-р улирал\x114-р улирал\x11шөнө" + + " дунд\x04ҮӨ\x0dүд дунд\x04ҮХ\x0aөглөө\x08өдөр\x08орой\x08шөнө\x04үө\x04ү" + + "х\x05ү.ө\x05ү.х\"манай эриний өмнөх\x06НТӨ\x17манай эриний\x04НТ\x06МЭӨ" + + "\x04МЭ*y 'оны' MMM'ын' d. EEEE 'гараг'.\x16y 'оны' MMM'ын' d\x08эрин\x06" + + "жил\x17өнгөрсөн жил\x0dэнэ жил\x0fирэх жил\x1b{0} жилийн дотор\x19{0} ж" + + "илийн өмнө\x0d+{0} жилд\x17-{0} жил.н өмнө\x0cулирал\x1dөнгөрсөн улирал" + + "\x13энэ улирал\x1fдараагийн улирал\x12{0} улиралд\x1b{0} улирлын өмнө" + + "\x06сар\x17өнгөрсөн сар\x0dэнэ сар\x0fирэх сар\x0c{0} сард\x17{0} сарын " + + "өмнө\x0d+{0} сард\x15долоо хоног&өнгөрсөн долоо хоног\x1cэнэ долоо хоно" + + "г\x1eирэх долоо хоног\x12{0} 7 хоногт\x1f{0} 7 хоногийн өмнө {0} дэх до" + + "лоо хоног\x037х Сарын долоо хоног\x10уржигдар\x0eөчигдөр\x0eөнөөдөр\x0e" + + "маргааш\x10нөгөөдөр\x0e{0} өдөрт\x19{0} өдрийн өмнө\x15Жилийн өдөр\x0aг" + + "араг\x13Ажлын өдөр\"өнгөрсөн ням гараг\x18энэ ням гараг\x1aирэх ням гар" + + "аг\x17{0} ням гарагт${0} ням гарагийн өмнө\x18өнгөрсөн ням.\x0eэнэ ням." + + "\x10ирэх ням.\x0dэнэ ням&өнгөрсөн даваа гараг\x1cэнэ даваа гараг\x1eирэх" + + " даваа гараг\x1b{0} даваа гарагт({0} даваа гарагийн өмнө\x1bөнгөрсөн дав" + + "аа\x11энэ даваа\x13ирэх даваа(өнгөрсөн мягмар гараг\x1eэнэ мягмар гараг" + + " ирэх мягмар гараг\x1d{0} мягмар гарагт*{0} мягмар гарагийн өмнө\x1dөнгө" + + "рсөн мягмар\x13энэ мягмар\x15ирэх мягмар(өнгөрсөн лхагва гараг\x1eэнэ л" + + "хагва гараг ирэх лхагва гараг\x1d{0} лхагва гарагт*{0} лхагва гарагийн " + + "өмнө\x1dөнгөрсөн лхагва\x13энэ лхагва\x15ирэх лхагва\x17өнгөрсөн лха" + + "\x0dэнэ лха\x0fирэх лха&өнгөрсөн пүрэв гараг\x1cэнэ пүрэв гараг\x1eирэх " + + "пүрэв гараг\x1b{0} пүрэв гарагт({0} пүрэв гарагийн өмнө\x1bөнгөрсөн пүр" + + "эв\x11энэ пүрэв\x13ирэх пүрэв\x15өнгөрсөн пү\x0bэнэ пү\x0dирэх пү(өнгөр" + + "сөн баасан гараг\x1eэнэ баасан гараг ирэх баасан гараг\x1d{0} баасан га" + + "рагт*{0} баасан гарагийн өмнө&өнгөрсөн бямба гараг\x1cэнэ бямба гараг" + + "\x1eирэх бямба гараг\x1b{0} бямба гарагт({0} бямба гарагийн өмнө\x1bөнгө" + + "рсөн бямба\x11энэ бямба\x13ирэх бямба\x0dү.ө./ү.х.\x06цаг\x0dэнэ цаг" + + "\x0c{0} цагт\x19{0} цагийн өмнө\x03ц.\x10{0} ц. өмнө\x11энэ минут\x1d{0}" + + " минутын дотор\x1b{0} минутын өмнө\x16{0} мин. дотор\x14{0} мин. өмнө" + + "\x08одоо\x1f{0} секундын дотор\x1d{0} секундын өмнө\x16{0} сек. дотор" + + "\x14{0} сек. өмнө\x13цагийн бүс\x0a{0} цаг\x13{0} зуны цаг\x1b{0} станда" + + "рт цаг7Олон улсын зохицуулалттай цаг\"Британийн зуны цаг(Ирландын станд" + + "арт цаг\x1dАфганистаны цаг\x1eТөв Африкийн цаг Зүүн Африкийн цаг3Өмнөд " + + "Африкийн стандарт цаг$Баруун Африкийн цаг5Баруун Африкийн стандарт цаг-" + + "Баруун Африкийн зуны цаг\x17Аляскийн цаг(Аляскийн стандарт цаг Аляскийн" + + " зуны цаг\x15Амазоны цаг&Амазоны стандарт цаг\x1eАмазоны зуны цаг\x0dТөв" + + " цаг\x1eТөв стандарт цаг\x16Төв зуны цаг\x1cЗүүн эргийн цаг-Зүүн эргийн " + + "стандарт цаг%Зүүн эргийн зуны цаг\x11Уулын цаг\"Уулын стандарт цаг\x1aУ" + + "улын зуны цаг Номхон далайн цаг1Номхон далайн стандарт цаг)Номхон далай" + + "н зуны цаг\x17Апиагийн цаг(Апиагийн стандарт цаг Апиагийн зуны цаг\x13А" + + "рабын цаг$Арабын стандарт цаг\x1cАрабын зуны цаг\x19Аргентины цаг*Арген" + + "тины стандарт цаг\"Аргентины зуны цаг&Баруун Аргентины цаг7Баруун Арген" + + "тины стандарт цаг/Баруун Аргентины зуны цаг\x17Арменийн цаг(Арменийн ст" + + "андарт цаг Арменийн зуны цаг\x17Атлантын цаг(Атлантын стандарт цаг Атла" + + "нтын зуны цаг\"Төв Австралийн цаг3Төв Австралийн стандарт цаг+Төв Австр" + + "алийн зуны цаг<Австралийн төв баруун эргийн цагMАвстралийн төв баруун э" + + "ргийн стандарт цагEАвстралийн төв баруун эргийн зуны цаг$Зүүн Австралий" + + "н цагBАвстралийн зүүн эргийн стандарт цаг:Австралийн зүүн эргийн зуны ц" + + "аг(Баруун Австралийн цагFАвстралийн баруун эргийн стандарт цаг>Австрали" + + "йн баруун эргийн зуны цаг\x1dАзербайжаны цаг.Азербайжаны стандарт цаг&А" + + "зербайжаны зуны цаг\x13Азорын цаг$Азорын стандарт цаг\x1cАзорын зуны ца" + + "г\x1fБангладешийн цаг0Бангладешийн стандарт цаг(Бангладешийн зуны цаг" + + "\x13Бутаны цаг\x17Боливийн цаг\x19Бразилийн цаг*Бразилийн стандарт цаг\"" + + "Бразилийн зуны цаг,Бруней Даруссаламын цаг\x1eКабо Вердийн цаг/Кабо Вер" + + "дийн стандарт цаг'Кабо Вердийн зуны цаг\x1dЧаморрогийн цаг\x15Чатемын ц" + + "аг&Чатемын стандарт цаг\x1eЧатемын зуны цаг\x13Чилийн цаг$Чилийн станда" + + "рт цаг\x1cЧилийн зуны цаг\x15Хятадын цаг&Хятадын стандарт цаг\x1eХятады" + + "н зуны цаг!Чойбалсангийн цаг2Чойбалсангийн стандарт цаг*Чойбалсангийн з" + + "уны цаг Крисмас арлын цаг\x1cКокос арлын цаг\x17Колумбын цаг(Колумбын с" + + "тандарт цаг Колумбын зуны цаг\x1aКүүк арлын цаг+Күүк арлын стандарт цаг" + + ".Күүк арлын хагас зуны цаг\x11Кубын цаг\"Кубын стандарт цаг\x1aКубын зун" + + "ы цаг\x17Дэвисийн цаг'Дюмон д’Юрвилийн цаг\x1eЗүүн Тиморын цаг Зүүн Исл" + + "андын цаг1Зүүн Исландын стандарт цаг)Зүүн Исландын зуны цаг\x19Эквадоры" + + "н цаг\x1cТөв Европын цаг-Төв Европын стандарт цаг%Төв Европын зуны цаг" + + "\x1eЗүүн Европын цаг/Зүүн Европын стандарт цаг'Зүүн Европын зуны цаг)Алс" + + " дорнод Европын цаг\"Баруун Европын цаг3Баруун Европын стандарт цаг+Бару" + + "ун Европын зуны цаг.Фолклендийн арлуудын цаг?Фолклендийн арлуудын станд" + + "арт цаг7Фолклендийн арлуудын зуны цаг\x17Фижигийн цаг(Фижигийн стандарт" + + " цаг Фижигийн зуны цаг*Францын Гвианагийн цаг>Францын Өмнөд ба Антарктид" + + "ийн цаг\x1dГалапагосын цаг\x1bГамбьегийн цаг\x15Гүржийн цаг&Гүржийн ста" + + "ндарт цаг\x1eГүржийн зуны цаг Жильбер арлын цаг\x1bГринвичийн цаг$Зүүн " + + "Гринландын цаг5Зүүн Гринландын стандарт цаг-Зүүн Гринландын зуны цаг(Ба" + + "руун Гринландын цаг9Баруун Гринландын стандарт цаг1Баруун Гринландын зу" + + "ны цаг&Галфийн стандарт цаг\x1bГайанагийн цаг Хавай-Алеутын цаг1Хавай-А" + + "леутын стандарт цаг)Хавай-Алеутын зуны цаг\x1eХонг Конгийн цаг/Хонг Кон" + + "гийн стандарт цаг'Хонг Конгийн зуны цаг\x13Ховдын цаг$Ховдын стандарт ц" + + "аг\x1cХовдын зуны цаг\x1bЭнэтхэгийн цаг(Энэтхэгийн далайн цаг3Энэтхэг-Х" + + "ятадын хойгийн цаг\"Төв Индонезийн цаг$Зүүн Индонезийн цаг(Баруун Индон" + + "езийн цаг\x11Ираны цаг\"Ираны стандарт цаг\x1aИраны зуны цаг\x19Эрхүүги" + + "йн цаг*Эрхүүгийн стандарт цаг\"Эрхүүгийн зуны цаг\x19Израилийн цаг*Изра" + + "илийн стандарт цаг\"Израилийн зуны цаг\x11Японы цаг\"Японы стандарт цаг" + + "\x1aЯпоны зуны цаг$Зүүн Казахстаны цаг(Баруун Казахстаны цаг\x1bСолонгос" + + "ын цаг,Солонгосын стандарт цаг$Солонгосын зуны цаг\x19Косрэгийн цаг!Кра" + + "сноярскийн цаг2Красноярскийн стандарт цаг*Красноярскийн зуны цаг\x19Кир" + + "гизийн цаг\x1aЛайн арлын цаг\x1eЛорд Хоугийн цаг/Лорд Хоугийн стандарт " + + "цаг'Лорд Хоугийн зуны цаг\"Маккуори Арлын цаг\x17Магаданы цаг(Магаданы " + + "стандарт цаг Магаданы зуны цаг\x17Малайзын цаг\x1bМальдивийн цаг\x1bМар" + + "кесасын цаг$Маршаллын арлын цаг\x19Маврикийн цаг*Маврикийн стандарт цаг" + + "\"Маврикийн зуны цаг\x15Моусоны цаг/Баруун хойд Мексикийн цаг@Баруун хой" + + "д Мексикийн стандарт цаг8Баруун хойд Мексикийн зуны цаг-Мексик-Номхон д" + + "алайн цаг>Мексик-Номхон далайн стандарт цаг6Мексик-Номхон далайн зуны ц" + + "аг!Улаанбаатарын цаг2Улаанбаатарын стандарт цаг*Улаанбаатарын зуны цаг" + + "\x1bМосквагийн цаг,Москвагийн стандарт цаг$Москвагийн зуны цаг\x19Мьянма" + + "рын цаг\x19Науругийн цаг\x13Балбын цаг$Шинэ Каледонийн цаг5Шинэ Каледон" + + "ийн стандарт цаг-Шинэ Каледонийн зуны цаг Шинэ Зеландын цаг1Шинэ Зеланд" + + "ын стандарт цаг)Шинэ Зеландын зуны цаг$Нью-Фаундлендын цаг5Нью-Фаундлен" + + "дын стандарт цаг-Нью-Фаундлендын зуны цаг\x17Ниуэгийн цаг Норфолк арлын" + + " цаг1Фернандо де Норонагийн цагBФернандо де Норонагийн стандарт цаг:Ферн" + + "андо де Норонагийн зуны цаг#Новосибирскийн цаг4Новосибирскийн стандарт " + + "цаг,Новосибирскийн зуны цаг\x15Омскийн цаг&Омскийн стандарт цаг\x1eОмск" + + "ийн зуны цаг\x19Пакистаны цаг*Пакистаны стандарт цаг\"Пакистаны зуны ца" + + "г\x19Палаугийн цаг)Папуа Шинэ Гвинейн цаг\x19Парагвайн цаг*Парагвайн ст" + + "андарт цаг\"Парагвайн зуны цаг\x17Перугийн цаг(Перугийн стандарт цаг Пе" + + "ругийн зуны цаг\x1bФилиппиний цаг,Филиппиний стандарт цаг$Филиппиний зу" + + "ны цаг\x1eФеникс арлын цаг,Сен-Пьер ба Микелоны цаг=Сен-Пьер ба Микелон" + + "ы стандарт цаг5Сен-Пьер ба Микелоны зуны цаг\x1bПиткернийн цаг\x1bПонап" + + "егийн цаг\x15Пёньяны цаг\x17Реюнионы цаг\x1bРотерагийн цаг\x17Сахалины " + + "цаг(Сахалины стандарт цаг Сахалины зуны цаг\x19Самоагийн цаг*Самоагийн " + + "стандарт цаг\"Самоагийн зуны цаг*Сейшелийн арлуудын цаг\x1bСингапурын ц" + + "аг(Соломоны арлуудын цаг Өмнөд Жоржийн цаг\x19Суринамын цаг\x17Сёвагийн" + + " цаг\x19Таитигийн цаг\x15Тайпейн цаг&Тайпейн стандарт цаг\x1eТайпейн зун" + + "ы цаг\x1dТажикистаны цаг\x1dТокелаугийн цаг\x19Тонгагийн цаг*Тонгагийн " + + "стандарт цаг\"Тонгагийн зуны цаг\x15Чүүкийн цаг!Туркменистаны цаг2Туркм" + + "енистаны стандарт цаг*Туркменистаны зуны цаг\x1bТувалугийн цаг\x17Уругв" + + "айн цаг(Уругвайн стандарт цаг Уругвайн зуны цаг\x1dУзбекистаны цаг.Узбе" + + "кистаны стандарт цаг&Узбекистаны зуны цаг\x1dВануатугийн цаг.Вануатугий" + + "н стандарт цаг&Вануатугийн зуны цаг\x1dВенесуэлийн цаг#Владивостокийн ц" + + "аг4Владивостокийн стандарт цаг,Владивостокийн зуны цаг\x1dВолгоградын ц" + + "аг.Волгоградын стандарт цаг&Волгоградын зуны цаг\x19Востокийн цаг\x1aВе" + + "йк арлын цаг-Уоллис ба Футунагийн цаг\x13Якутын цаг$Якутын стандарт цаг" + + "\x1cЯкутын зуны цаг%Екатеринбургийн цаг6Екатеринбургийн стандарт цаг.Ека" + + "теринбургийн зуны цаг" + +var bucket75 string = "" + // Size: 8198 bytes + "\"इसवीसन पूर्व\x0dइसपू.\x09तौत\x0cबाबा\x0fहातोर\x12कियाहक\x0cतोबा\x0fऍमश" + + "िर\x15बरामहाट\x15बरामउदा\x12बशान्स\x0fपाओना\x0cइपिप\x12मेस्रा\x0cनासी" + + "\x03१\x03२\x03३\x03४\x03५\x03६\x03७\x03८\x03९\x06१०\x06११\x06१२\x06१३" + + "\x0aयुग0\x0aयुग1\x18मेसकेरेम\x15तेकेम्त\x0fहेदार\x12ताहसास\x09तेर\x15येक" + + "ातित\x15मेगाबित\x18मियाझिया\x12गेनबोत\x0cसेने\x12हाम्ले\x18नेहास्से" + + "\x15पागुमेन\x17{1} {0} वाजता\x0cजाने\x12फेब्रु\x0fमार्च\x0fएप्रि\x06मे" + + "\x09जून\x0cजुलै\x06ऑग\x12सप्टें\x0fऑक्टो\x15नोव्हें\x0fडिसें\x06जा\x06फे" + + "\x06मा\x03ए\x06जू\x06जु\x03ऑ\x03स\x06नो\x06डि\x0fमार्च\x06मे\x09जून\x0cज" + + "ुलै\x09ति१\x09ति२\x09ति३\x09ति४\"प्रथम तिमाही(द्वितीय तिमाही\"तृतीय ति" + + "माही%चतुर्थ तिमाही\x1bमध्यरात्र\x18मध्यान्ह\x08म.उ.\x0cपहाट\x0cसकाळ" + + "\x0fदुपार\x1bसंध्याकाळ\x15सायंकाळ\x0fरात्र\x0bम.रा.\x06दु\x06सं\x03प\x06" + + "सा\x06रा!ईसवीसनपूर्व\"ईसापूर्व युग\x12ईसवीसन\x1eख्रिस्तयुग\x11इ. स. पू" + + ".\x1bइ. स. पू. युग\x09इ. स.\x15ख्रि. यु.\x14{1} रोजी {0}\x0fतिशरी\x12हेश" + + "वान\x15किस्लेव\x0fतेवेत\x0fशेवात\x0eअदार I\x0cअदार\x0fअदार II\x0fनिसान" + + "\x0cइयार\x0fसिवान\x0fतामुझ\x06अव\x0cइलुल\x1fऍन्नो मुंडी\x0aमोह.\x07सफ." + + "\x0eराबी I\x0fराबी II\x0fजुमा. I\x10जुमा. II\x0aरझा.\x0dशाबा.\x07रम.\x10" + + "शव्वा.\x11धुल-की.\x11धुल-हि.\x0fमोहरम\x09सफर\x14जुमादा I\x15जुमादा II" + + "\x0cरझाब\x0fशाबान\x0fरमजान\x12शव्वाल\x19धुल-कीदाह\x19धुल-हिजाह\x1cहिजरी " + + "वर्ष\x0bहि.व.\x15फरवरदिन$ओर्दिबेहेश्त\x12खोरदाद\x09तिर\x12मोरदाद\x18शा" + + "हरीवार\x0fमेहेर\x0cअबान\x0cअझार\x06दे\x12बाहमान\x12एसफांद\x1cआर.ओ.सी. " + + "आधी\x0fमिंगू\x1cमागील वर्ष\x13हे वर्ष\x1cपुढील वर्ष5येत्या {0} वर्षामध" + + "्ये8येत्या {0} वर्षांमध्ये%{0} वर्षापूर्वी({0} वर्षांपूर्वी\"{0} वर्षा" + + "मध्ये%{0} वर्षांमध्ये\"मागील तिमाही\x19ही तिमाही\"पुढील तिमाही%{0} तिम" + + "ाहीमध्ये({0} तिमाहींमध्ये({0} तिमाहीपूर्वी+{0} तिमाहींपूर्वी8येत्या {0" + + "} तिमाहीमध्ये;येत्या {0} तिमाहींमध्ये\x0fमहिना\x1fमागील महिना\x16हा महिन" + + "ा\x1fपुढील महिना;येत्या {0} महिन्यामध्ये>येत्या {0} महिन्यांमध्ये+{0} " + + "महिन्यापूर्वी.{0} महिन्यांपूर्वी({0} महिन्यामध्ये+{0} महिन्यांमध्ये" + + "\x0fआठवडा\x1fमागील आठवडा\x16हा आठवडा\x1fपुढील आठवडा({0} आठवड्यामध्ये+{0}" + + " आठवड्यांमध्ये+{0} आठवड्यापूर्वी.{0} आठवड्यांपूर्वी\x1a{0} चा आठवडा;येत्" + + "या {0} आठवड्यामध्ये>येत्या {0} आठवड्यांमध्ये+महिन्याचा आठवडा#महिन्याचा" + + " आठ.\x0cदिवस5येत्या {0} दिवसामध्ये8येत्या {0} दिवसांमध्ये%{0} दिवसापूर्व" + + "ी({0} दिवसांपूर्वी\"{0} दिवसामध्ये%{0} दिवसांमध्ये%वर्षातील दिवस(आठवड्" + + "याचा दिवसGमहिन्यातील साप्ताहिक दिवस?महिन्यातील साप्ता. दिवस\"मागील रवि" + + "वार\x19हा रविवार\"पुढील रविवार,येत्या {0} रविवारी({0} रविवारपूर्वी.{0}" + + " रविवारांपूर्वी\x1aमागील रवि.\x11हा रवि.\x1aपुढील रवि.\x13मागील र\x0aहा " + + "र\x13पुढील र\"मागील सोमवार\x19हा सोमवार\"पुढील सोमवार,येत्या {0} सोमवा" + + "री({0} सोमवारपूर्वी.{0} सोमवारांपूर्वी\x1aमागील सोम.\x11हा सोम.\x1aपुढ" + + "ील सोम.+{0} सोमवारापूर्वी\x16मागील सो\x0dहा सो\x16पुढील सो%मागील मंगळव" + + "ार\x1cहा मंगळवार%पुढील मंगळवार/येत्या {0} मंगळवारी+{0} मंगळवारपूर्वी1{" + + "0} मंगळवारांपूर्वी\x1dमागील मंगळ.\x14हा मंगळ.\x1dपुढील मंगळ..{0} मंगळवार" + + "ापूर्वी\x16मागील मं\x0dहा मं\x16पुढील मं\"मागील बुधवार\x19हा बुधवार\"प" + + "ुढील बुधवार,येत्या {0} बुधवारी({0} बुधवारपूर्वी.{0} बुधवारांपूर्वी\x1a" + + "मागील बुध.\x11हा बुध.\x1aपुढील बुध.)येत्या {0} बुधवार\x16मागील बु\x0dह" + + "ा बु\x16पुढील बु%मागील गुरुवार\x1cहा गुरुवार%पुढील गुरुवार/येत्या {0} " + + "गुरूवारी+{0} गुरूवारपूर्वी1{0} गुरूवारांपूर्वी\x1dमागील गुरू.\x14हा गु" + + "रू.\x1dपुढील गुरू.\x16मागील गु\x0dहा गु\x16पुढील गु(मागील शुक्रवार\x1f" + + "हा शुक्रवार(पुढील शुक्रवार2येत्या {0} शुक्रवारी.{0} शुक्रवारपूर्वी4{0}" + + " शुक्रवारांपूर्वी मागील शुक्र.\x17हा शुक्र. पुढील शुक्र.\"मागील शनिवार" + + "\x19हा शनिवार\"पुढील शनिवार,येत्या {0} शनिवारी({0} शनिवारपूर्वी.{0} शनिव" + + "ारांपूर्वी\x1aमागील शनि.\x11हा शनि.\x1aपुढील शनि.\x16[म.पू./म.उ.]\x09त" + + "ास\x0fतासात\x1f{0} तासामध्ये\"{0} तासांमध्ये\"{0} तासापूर्वी%{0} तासां" + + "पूर्वी2येत्या {0} तासामध्ये5येत्या {0} तासांमध्ये\x0fमिनिट\x1cया मिनिट" + + "ात%{0} मिनिटामध्ये({0} मिनिटांमध्ये({0} मिनिटापूर्वी+{0} मिनिटांपूर्वी" + + "\x07मि.!{0} मिनि. मध्ये${0} मिनि. पूर्वी\x0fआत्ता%{0} सेकंदामध्ये({0} से" + + "कंदांमध्ये({0} सेकंदापूर्वी+{0} सेकंदांपूर्वी\x07से.\x1b{0} से. मध्ये" + + "\x1e{0} से. पूर्वी.येत्या {0} से. मध्ये\x1fवेळ क्षेत्र\x0d{0} वेळ/{0} सू" + + "र्यप्रकाश वेळ {0} प्रमाण वेळ" + +var bucket76 string = "" + // Size: 17247 bytes + "5ब्रिटिश उन्हाळी वेळ,आयरिश प्रमाण वेळ\x13एकर वेळ%एकर प्रमाणवेळ)ऐकर ग्रीष" + + "्म वेळ+अफगाणिस्तान वेळ/मध्\u200dय आफ्रिका वेळ/पूर्व आफ्रिका वेळEदक्षिण" + + " आफ्रिका प्रमाण वेळ2पश्चिम आफ्रिका वेळEपश्चिम आफ्रिका प्रमाण वेळHपश्चिम " + + "आफ्रिका उन्हाळी वेळ\x1fअलास्का वेळ2अलास्का प्रमाण वेळAअलास्का सूर्यप्र" + + "काश वेळ\x1fअल्माटी वेळ1अल्माटी प्रमाणवेळDअल्माटी ग्रीष्मकालीन वेळ\x1fअ" + + "ॅमेझॉन वेळ5अ\u200dॅमेझॉन प्रमाण वेळ8अ\u200dॅमेझॉन उन्हाळी वेळ\"केंद्री" + + "य वेळ5केंद्रीय प्रमाण वेळDकेंद्रीय सूर्यप्रकाश वेळ%पौर्वात्य वेळ8पौर्व" + + "ात्य प्रमाण वेळGपौर्वात्य सूर्यप्रकाश वेळ\x1fपर्वतीय वेळ2पर्वतीय प्रमा" + + "ण वेळAपर्वतीय सूर्यप्रकाश वेळ\x1fपॅसिफिक वेळ2पॅसिफिक प्रमाण वेळAपॅसिफि" + + "क सूर्यप्रकाश वेळ\x1fएनाडीयर वेळ.अनादीर प्रमाणवेळAअनादीर ग्रीष्मकालीन " + + "वेळ\x19एपिया वेळ,एपिया प्रमाण वेळ;एपिया सूर्यप्रकाश वेळ\"अ\u200dॅक्ताउ" + + " वेळ4अ\u200dॅक्ताउ प्रमाणवेळGअ\u200dॅक्ताउ ग्रीष्मकालीन वेळ%अ\u200dॅक्टो" + + "बे वेळ7अ\u200dॅक्टोबे प्रमाणवेळJअ\u200dॅक्टोबे ग्रीष्मकालीन वेळ\x1fअरे" + + "बियन वेळ2अरेबियन प्रमाण वेळAअरेबियन सूर्यप्रकाश वेळ(अर्जेंटिना वेळ;अर्" + + "जेंटिना प्रमाण वेळ>अर्जेंटिना उन्हाळी वेळ>पश्चिमी अर्जेंटिना वेळQपश्चि" + + "मी अर्जेंटिना प्रमाण वेळTपश्चिमी अर्जेंटिना उन्हाळी वेळ%आर्मेनिया वेळ8" + + "आर्मेनिया प्रमाण वेळ;आर्मेनिया उन्हाळी वेळ\"अटलांटिक वेळ5अटलांटिक प्रम" + + "ाण वेळDअटलांटिक सूर्यप्रकाश वेळ8मध्य ऑस्ट्रेलिया वेळKऑस्ट्रेलियन मध्य " + + "प्रमाण वेळZऑस्ट्रेलियन मध्य सूर्यप्रकाश वेळKऑस्ट्रेलियन मध्य-पश्चिम वे" + + "ळ^ऑस्ट्रेलियन मध्य-पश्चिम प्रमाण वेळmऑस्ट्रेलियन मध्य-पश्चिम सूर्यप्रक" + + "ाश वेळ;पूर्व ऑस्ट्रेलिया वेळNऑस्ट्रेलियन पूर्व प्रमाण वेळ]ऑस्ट्रेलियन " + + "पूर्व सूर्यप्रकाश वेळ>पश्चिम ऑस्ट्रेलिया वेळQऑस्ट्रेलियन पश्चिम प्रमाण" + + " वेळ`ऑस्ट्रेलियन पश्चिम सूर्यप्रकाश वेळ\"अझरबैजान वेळ5अझरबैजान प्रमाण वे" + + "ळ8अझरबैजान उन्हाळी वेळ\"अ\u200dॅझोरेस वेळ5अ\u200dॅझोरेस प्रमाण वेळ8अ" + + "\u200dॅझोरेस उन्हाळी वेळ%बांगलादेश वेळ8बांगलादेश प्रमाण वेळ;बांगलादेश उन" + + "्हाळी वेळ\x19भूतान वेळ(बोलिव्हिया वेळ(ब्राझिलिया वेळ;ब्राझिलिया प्रमाण" + + " वेळ>ब्राझिलिया उन्हाळी वेळ8ब्रुनेई दारूसलाम वेळ)केप व्हर्डे वेळ<केप व्ह" + + "र्डे प्रमाण वेळ?केप व्हर्डे उन्हाळी वेळ/चामोरो प्रमाण वेळ\x16चॅथम वेळ)" + + "चॅथम प्रमाण वेळ8चॅथम सूर्यप्रकाश वेळ\x16चिली वेळ)चिली प्रमाण वेळ,चिली " + + "उन्हाळी वेळ\x16चीनी वेळ)चीनी प्रमाण वेळ8चीनी सूर्यप्रकाश वेळ%चोईबाल्सन" + + " वेळ8चोईबाल्सन प्रमाण वेळ;चोईबाल्सन उन्हाळी वेळ)ख्रिसमस बेट वेळ&कॉकोस बे" + + "टे वेळ\"कोलंबिया वेळ5कोलंबिया प्रमाण वेळ8कोलंबिया उन्हाळी वेळ कुक बेटे" + + " वेळ3कुक बेटे प्रमाण वेळCकुक बेटे अर्ध उन्हाळी वेळ\x1cक्यूबा वेळ/क्यूबा " + + "प्रमाण वेळ>क्यूबा सूर्यप्रकाश वेळ\x1fडेव्हिस वेळAड्युमॉन्ट-ड्युर्विल व" + + "ेळ)पूर्व तिमोर वेळ#इस्टर बेट वेळ6इस्टर बेट प्रमाण वेळ9इस्टर बेट उन्हाळ" + + "ी वेळ\"इक्वेडोर वेळ2मध्\u200dय युरोपियन वेळEमध्\u200dय युरोपियन प्रमाण" + + " वेळHमध्\u200dय युरोपियन उन्हाळी वेळ2पूर्व युरोपियन वेळEपूर्व युरोपियन प" + + "्रमाण वेळHपूर्व युरोपियन उन्हाळी वेळKअग्र-पौर्वात्य यूरोपीयन वेळ5पश्चि" + + "म युरोपियन वेळHपश्चिम युरोपियन प्रमाण वेळKपश्चिम युरोपियन उन्हाळी वेळ)" + + "फॉकलंड बेटे वेळ<फॉकलंड बेटे प्रमाण वेळ?फॉकलंड बेटे उन्हाळी वेळ\x16फिजी" + + " वेळ)फिजी प्रमाण वेळ,फिजी उन्हाळी वेळ,फ्रेंच गयाना वेळ[फ्रेंच दक्षिण आणि" + + " अंटार्क्टिक वेळ%गॅलापागोस वेळ\"गॅम्बियर वेळ\"जॉर्जिया वेळ5जॉर्जिया प्रम" + + "ाण वेळ8जॉर्जिया उन्हाळी वेळ/गिल्बर्ट बेटे वेळ2ग्रीनिच प्रमाण वेळ2पूर्व" + + " ग्रीनलँड वेळEपूर्व ग्रीनलँड प्रमाण वेळHपूर्व ग्रीनलँड उन्हाळी वेळ5पश्चि" + + "म ग्रीनलँड वेळHपश्चिम ग्रीनलँड प्रमाण वेळKपश्चिम ग्रीनलँड उन्हाळी वेळ(" + + "गुआम प्रमाणवेळ)खाडी प्रमाण वेळ\x19गयाना वेळ&हवाई-अलूशन वेळ9हवाई-अलूशन " + + "प्रमाण वेळHहवाई-अलूशन सूर्यप्रकाश वेळ#हाँग काँग वेळ6हाँग काँग प्रमाण व" + + "ेळ9हाँग काँग उन्हाळी वेळ\x1fहोव्ह्ड वेळ2होव्ह्ड प्रमाण वेळ5होव्ह्ड उन्" + + "हाळी वेळ/भारतीय प्रमाण वेळ+हिंदमहासागर वेळ%इंडोचायना वेळ8मध्\u200dय इं" + + "डोनेशिया वेळDपौर्वात्य इंडोनेशिया वेळ>पश्चिमी इंडोनेशिया वेळ\x16इराण व" + + "ेळ)इराण प्रमाण वेळ8इराण सूर्यप्रकाश वेळ%इर्कुत्सक वेळ8इर्कुत्सक प्रमाण" + + " वेळ;इर्कुत्सक उन्हाळी वेळ\x15इस्रायल2इस्रायल प्रमाण वेळAइस्रायल सूर्यप्" + + "रकाश वेळ\x16जपान वेळ)जपान प्रमाण वेळ8जपान सूर्यप्रकाश वेळ]पेट्रोपाव्हल" + + "ोस्क- कामचाट्स्की वेळoपेट्रोपाव्हलोस्क- कामचाट्स्की प्रमाणवेळ\x82पेट्र" + + "ोपाव्हलोस्क- कामचाट्स्की ग्रीष्मकालीन वेळ5पूर्व कझाकस्तान वेळ8पश्चिम क" + + "झाकस्तान वेळ\x1cकोरियन वेळ/कोरियन प्रमाण वेळ>कोरियन सूर्यप्रकाश वेळ" + + "\x1fकोस्राई वेळ7क्रास्नोयार्स्क वेळJक्रास्नोयार्स्क प्रमाण वेळMक्रास्नोय" + + "ार्क्स उन्हाळी वेळ(किरगिस्तान वेळ\x16लंका वेळ#लाइन बेटे वेळ&लॉर्ड होवे" + + " वेळ9लॉर्ड होवे प्रमाण वेळHलॉर्ड होवे सूर्यप्रकाश वेळ\x16मकाऊ वेळ(मकाऊ प" + + "्रमाणवेळ;मकाऊ ग्रीष्मकालीन वेळ,मॅक्वेरी बेट वेळ\x1cमॅगाडन वेळ/मॅगाडन प" + + "्रमाण वेळ2मॅगाडन उन्हाळी वेळ\x1fमलेशिया वेळ\x1cमालदिव वेळ+मार्क्वेसास " + + "वेळ)मार्शल बेटे वेळ\x1cमॉरीशस वेळ/मॉरीशस प्रमाण वेळ2मॉरीशस उन्हाळी वेळ" + + "\x16मॉसन वेळ5वायव्य मेक्सिको वेळHवायव्य मेक्सिको प्रमाण वेळWवायव्य मेक्स" + + "िको सूर्यप्रकाश वेळ8मेक्सिको पॅसिफिक वेळKमेक्सिको पॅसिफिक प्रमाण वेळZम" + + "ेक्सिको पॅसिफिक सूर्यप्रकाश वेळ&उलान बाटोर वेळ9उलान बाटोर प्रमाण वेळ<उ" + + "लान बाटोर उन्हाळी वेळ\x1cमॉस्को वेळ/मॉस्को प्रमाण वेळ2मॉस्को उन्हाळी व" + + "ेळ\"म्यानमार वेळ\x16नउरु वेळ\x19नेपाळ वेळ5न्यू कॅलेडोनिया वेळHन्यू कॅल" + + "ेडोनिया प्रमाण वेळKन्यू कॅलेडोनिया उन्हाळी वेळ%न्यूझीलंड वेळ8न्यूझीलंड" + + " प्रमाण वेळGन्यूझीलंड सूर्यप्रकाश वेळ/न्यू फाउंडलंड वेळBन्यू फाउंडलंड प्" + + "रमाण वेळQन्यू फाउंडलंड सूर्यप्रकाश वेळ\x19न्युए वेळ&नॉरफोक बेट वेळBफर्" + + "नांडो दी नोरोन्हा वेळUफर्नांडो दी नोरोन्हा प्रमाण वेळXफर्नांडो दी नोरो" + + "न्हा उन्हाळी वेळ6उत्तर मरिना बेटे वेळ1नोवोसिबिर्स्क वेळDनोवोसिबिर्स्क " + + "प्रमाण वेळGनोवोसिबिर्स्क उन्हाळी वेळ\x1cओम्स्क वेळ/ओम्स्क प्रमाण वेळ2ओ" + + "म्स्क उन्हाळी वेळ%पाकिस्तान वेळ8पाकिस्तान प्रमाण वेळ;पाकिस्तान उन्हाळी" + + " वेळ\x16पलाऊ वेळ3पापुआ न्यू गिनी वेळ\"पॅराग्वे वेळ5पॅराग्वे प्रमाण वेळ8प" + + "ॅराग्वे उन्हाळी वेळ\x16पेरु वेळ)पेरु प्रमाण वेळ,पेरु उन्हाळी वेळ\"फिलि" + + "पाइन वेळ5फिलिपाइन प्रमाण वेळ8फिलिपाइन उन्हाळी वेळ/\u200dफोनिक्स बेटे व" + + "ेळIसेंट पियर आणि मिक्वेलोन वेळ_सेंट पियरे आणि मिक्वेलोन प्रमाण वेळnसें" + + "ट पियरे आणि मिक्वेलोन सूर्यप्रकाश वेळ\"पिटकैर्न वेळ\x1cपोनॅपे वेळ(प्यो" + + "ंगयांग वेळ+क़िझीलोर्डा वेळ=क़िझीलोर्डा प्रमाणवेळPक़िझीलोर्डा ग्रीष्मका" + + "लीन वेळ\"रियुनियन वेळ\x1cरोथेरा वेळ\x19सखलिन वेळ,सखलिन प्रमाण वेळ/सखलि" + + "न उन्हाळी वेळ\x19समारा वेळ+सामरा प्रमाणवेळ>सामरा ग्रीष्मकालीन वेळ\x19स" + + "ामोआ वेळ,सामोआ प्रमाण वेळ;सामोआ सूर्यप्रकाश वेळ\x1fसेशेल्स वेळ5सिंगापू" + + "र प्रमाण वेळ,सोलोमॉन बेटे वेळ5दक्षिण जॉर्जिया वेळ\x1fसुरिनाम वेळ\x1cस्" + + "योवा वेळ\x1cताहिती वेळ\x19तैपेई वेळ,तैपेई प्रमाण वेळ;तैपेई सूर्यप्रकाश" + + " वेळ+ताजिकिस्तान वेळ\x1fटोकेलाऊ वेळ\x19टोंगा वेळ,टोंगा प्रमाण वेळ/टोंगा " + + "उन्हाळी वेळ\x13चूक वेळ4तुर्कमेनिस्तान वेळGतुर्कमेनिस्तान प्रमाण वेळJतु" + + "र्कमेनिस्तान उन्हाळी वेळ\x1cतुवालू वेळ\x1fउरुग्वे वेळ2उरुग्वे प्रमाण व" + + "ेळ5उरुग्वे उन्हाळी वेळ+उझबेकिस्तान वेळ>उझबेकिस्तान प्रमाण वेळAउझबेकिस्" + + "तान उन्हाळी वेळ\x1fवानुआतु वेळ2वानुआतु प्रमाण वेळ5वानुआतु उन्हाळी वेळ+" + + "व्हेनेझुएला वेळ1व्लादिवोस्तोक वेळDव्लादिवोस्तोक प्रमाण वेळGव्लादिवोस्त" + + "ोक उन्हाळी वेळ1व्होल्गोग्राड वेळDव्होल्गोग्राड प्रमाण वेळGव्होल्गोग्रा" + + "ड उन्हाळी वेळ%व्होस्टॉक वेळ\x1dवेक बेट वेळ6वॉलिस आणि फुटुना वेळ\"याकुत" + + "्सक वेळ5याकुत्सक प्रमाण वेळ8याकुत्सक उन्हाळी वेळ+येकतरिनबर्ग वेळ>येकतर" + + "िनबर्ग प्रमाण वेळAयेकतरिनबर्ग उन्हाळी वेळ" + +var bucket77 string = "" + // Size: 8234 bytes + "\x02Jn\x02Fb\x02Mc\x02Ap\x02Me\x02Ju\x02Jl\x02Og\x02Sp\x02Ok\x02Nv\x02Ds" + + "\x02Fe\x03Ahd\x03Isn\x03Sel\x03Rab\x03Kha\x03Jum\x03Sab\x02Ah\x02Is\x02S" + + "e\x02Ra\x02Kh\x02Sa\x0cSuku pertama\x09Suku Ke-2\x09Suku Ke-3\x09Suku Ke" + + "-4\x02PG\x03PTG\x06petang\x04S.M.\x02TM\x0dSebelum R.O.C\x06R.O.C.\x0aSb" + + "lm R.O.C\x06R.O.C.\x0e{0} tahun lalu\x03thn\x09thn lepas\x07thn ini\x09t" + + "hn depan\x0ddalam {0} thn\x0asuku tahun\x0fsuku tahun lalu\x0esuku tahun" + + " ini\x15suku tahun seterusnya\x14dalam {0} suku tahun\x13{0} suku tahun " + + "lalu\x04suku\x0asuku lepas\x08suku ini\x0fsuku seterusnya\x10dlm {0} suk" + + "u thn\x11{0} suku thn lalu\x0e{0} bulan lalu\x03bln\x08bln lalu\x07bln i" + + "ni\x09bln depan\x0f{0} minggu lalu\x03mgu\x09mng lepas\x07mng ini\x09mng" + + " depan\x0bdlm {0} mgu\x0c{0} mgu lalu\x08kelmarin\x07semalam\x08hari ini" + + "\x04esok\x04lusa\x0d{0} hari lalu\x05semlm\x0cdlm {0} hari\x11Hari dalam" + + " Minggu\x09Ahad lalu\x08Ahad ini\x0aAhad depan\x0dpada {0} Ahad\x0d{0} A" + + "had lalu\x08Ahd lalu\x07Ahd ini\x09Ahd depan\x0cpada {0} Ahd\x0c{0} Ahd " + + "lalu\x0apd {0} Ahd\x0aIsnin lalu\x09Isnin ini\x0bIsnin depan\x0epada {0}" + + " Isnin\x0e{0} Isnin lalu\x08Isn lalu\x07Isn ini\x09Isn depan\x0cpada {0}" + + " Isn\x0c{0} Isn lalu\x0apd {0} Isn\x0fpada {0} Selasa\x08Sel lalu\x07Sel" + + " ini\x09Sel depan\x0cpada {0} Sel\x0c{0} Sel lalu\x0dpada {0} Rabu\x08Ra" + + "b lalu\x07Rab ini\x09Rab depan\x0cpada {0} Rab\x0c{0} Rab lalu\x0apd {0}" + + " Rab\x0bKhamis lalu\x0aKhamis ini\x0cKhamis depan\x0fpada {0} Khamis\x0f" + + "{0} Khamis lalu\x08Kha lalu\x07Kha ini\x09Kha depan\x0cpada {0} Kha\x0c{" + + "0} Kha lalu\x0bJumaat lalu\x0aJumaat ini\x0cJumaat depan\x0fpada {0} Jum" + + "aat\x0f{0} Jumaat lalu\x08Jum lalu\x07Jum ini\x09Jum depan\x0cpada {0} J" + + "um\x0c{0} Jum lalu\x0apd {0} Jum\x0epada {0} Sabtu\x08Sab lalu\x07Sab in" + + "i\x09Sab depan\x0cpada {0} Sab\x0c{0} Sab lalu\x06PG/PTG\x0bdlm {0} jam" + + "\x05minit\x0epada minit ini\x0fdalam {0} minit\x0e{0} minit lalu\x0bdlm " + + "{0} min\x0c{0} min lalu\x0edalam {0} saat\x0d{0} saat lalu\x0cdlm {0} sa" + + "at\x09zon waktu\x03zon\x17Waktu Universal Selaras\x19Waktu Musim Panas B" + + "ritish\x14Waktu Piawai Ireland\x11Waktu Afghanistan\x13Waktu Afrika Teng" + + "ah\x12Waktu Afrika Timur\x1bWaktu Piawai Afrika Selatan\x19Waktu Piawai " + + "Afrika Barat\x13Waktu Piawai Alaska\x13Waktu Piawai Amazon\x12Waktu Piaw" + + "ai Pusat\x12Waktu Piawai Timur\x18Waktu Piawai Pergunungan\x14Waktu Piaw" + + "ai Pasifik\x13Waktu Piawai Anadyr\x11Waktu Piawai Apia\x11Waktu Piawai A" + + "rab\x16Waktu Piawai Argentina\x1cWaktu Piawai Argentina Barat\x14Waktu P" + + "iawai Armenia\x15Waktu Piawai Atlantik\x1dWaktu Piawai Australia Tengah#" + + "Waktu Piawai Barat Tengah Australia\x1cWaktu Piawai Timur Australia\x1cW" + + "aktu Piawai Australia Barat\x17Waktu Piawai Azerbaijan\x13Waktu Piawai A" + + "zores\x17Waktu Piawai Bangladesh\x0cWaktu Bhutan\x0dWaktu Bolivia\x15Wak" + + "tu Piawai Brasilia\x17Waktu Brunei Darussalam\x1aWaktu Piawai Tanjung Ve" + + "rde\x15Waktu Piawai Chamorro\x14Waktu Piawai Chatham\x12Waktu Piawai Chi" + + "le\x12Waktu Piawai China\x17Waktu Piawai Choibalsan\x15Waktu Pulau Chris" + + "tmas\x15Waktu Kepulauan Cocos\x15Waktu Piawai Colombia\x1bWaktu Piawai K" + + "epulauan Cook\x11Waktu Piawai Cuba\x0bWaktu Davis\x18Waktu Dumont-d’Urvi" + + "lle\x11Waktu Timor Timur\x19Waktu Piawai Pulau Easter\x0dWaktu Ecuador" + + "\x1aWaktu Piawai Eropah Tengah\x19Waktu Piawai Eropah Timur\x18Waktu Ero" + + "pah ceruk timur\x19Waktu Piawai Eropah Barat\x1fWaktu Piawai Kepulauan F" + + "alkland\x11Waktu Piawai Fiji\x15Waktu Guyana Perancis$Waktu Perancis Sel" + + "atan dan Antartika\x0fWaktu Galapagos\x0dWaktu Gambier\x14Waktu Piawai G" + + "eorgia\x17Waktu Kepulauan Gilbert\x13Waktu Min Greenwich\x1cWaktu Piawai" + + " Greenland Timur\x1cWaktu Piawai Greenland Barat\x12Waktu Piawai Teluk" + + "\x0cWaktu Guyana\x1cWaktu Piawai Hawaii-Aleutian\x16Waktu Piawai Hong Ko" + + "ng\x11Waktu Piawai Hovd\x12Waktu Piawai India\x12Waktu Lautan Hindi\x0fW" + + "aktu Indochina\x16Waktu Indonesia Tengah\x15Waktu Indonesia Timur\x15Wak" + + "tu Indonesia Barat\x11Waktu Piawai Iran\x14Waktu Piawai Irkutsk\x13Waktu" + + " Piawai Israel\x12Waktu Piawai Jepun%Waktu Piawai Petropavlovsk-Kamchats" + + "ki\x16Waktu Kazakhstan Timur\x16Waktu Kazakhstan Barat\x12Waktu Piawai K" + + "orea\x0cWaktu Kosrae\x18Waktu Piawai Krasnoyarsk\x0fWaktu Kyrgystan\x14W" + + "aktu Kepulauan Line\x16Waktu Piawai Lord Howe\x15Waktu Pulau Macquarie" + + "\x14Waktu Piawai Magadan\x0eWaktu Malaysia\x0eWaktu Maldives\x0fWaktu Ma" + + "rquesas\x18Waktu Kepulauan Marshall\x16Waktu Piawai Mauritius\x0cWaktu M" + + "awson\x1eWaktu Piawai Barat Laut Mexico\x1bWaktu Piawai Pasifik Mexico" + + "\x17Waktu Piawai Ulan Bator\x13Waktu Piawai Moscow\x0dWaktu Myanmar\x0bW" + + "aktu Nauru\x0bWaktu Nepal\x1aWaktu Piawai New Caledonia\x18Waktu Piawai " + + "New Zealand\x19Waktu Piawai Newfoundland\x0aWaktu Niue\x17Waktu Kepulaua" + + "n Norfolk Waktu Piawai Fernando de Noronha\x18Waktu Piawai Novosibirsk" + + "\x11Waktu Piawai Omsk\x15Waktu Piawai Pakistan\x0bWaktu Palau\x16Waktu P" + + "apua New Guinea\x15Waktu Piawai Paraguay\x11Waktu Piawai Peru\x15Waktu P" + + "iawai Filipina\x17Waktu Kepulauan Phoenix&Waktu Piawai Saint Pierre dan " + + "Miquelon\x0eWaktu Pitcairn\x0cWaktu Ponape\x0fWaktu Pyongyang\x0dWaktu R" + + "eunion\x0dWaktu Rothera\x15Waktu Piawai Sakhalin\x13Waktu Piawai Samara" + + "\x12Waktu Piawai Samoa\x10Waktu Seychelles\x16Waktu Piawai Singapura\x17" + + "Waktu Kepulauan Solomon\x15Waktu Georgia Selatan\x0eWaktu Suriname\x0bWa" + + "ktu Syowa\x0cWaktu Tahiti\x13Waktu Piawai Taipei\x10Waktu Tajikistan\x0d" + + "Waktu Tokelau\x12Waktu Piawai Tonga\x0bWaktu Chuuk\x19Waktu Piawai Turkm" + + "enistan\x0cWaktu Tuvalu\x14Waktu Piawai Uruguay\x17Waktu Piawai Uzbekist" + + "an\x14Waktu Piawai Vanuatu\x0fWaktu Venezuela\x18Waktu Piawai Vladivosto" + + "k\x16Waktu Piawai Volgograd\x0cWaktu Vostok\x10Waktu Pulau Wake\x17Waktu" + + " Wallis dan Futuna\x14Waktu Piawai Yakutsk\x1aWaktu Piawai Yekaterinburg" + + "\x18EEEE, d 'ta'’ MMMM y G\x12d 'ta'’ MMMM y G\x06Jannar\x04Frar\x05Marz" + + "u\x05April\x05Mejju\x06Ġunju\x05Lulju\x07Awwissu\x09Settembru\x07Ottubru" + + "\x08Novembru\x09Diċembru\x02Fr\x02Mz\x02Mj\x03Ġn\x02Lj\x02Aw\x02St\x02Ob" + + "\x03Dċ\x04Ħad\x03Tne\x03Tli\x03Erb\x04Ħam\x04Ġim\x03Sib\x03Ħd\x01T\x02Tl" + + "\x02Er\x03Ħm\x03Ġm\x02Sb\x08Il-Ħadd\x08It-Tnejn\x09It-Tlieta\x09L-Erbgħa" + + "\x09Il-Ħamis\x0bIl-Ġimgħa\x07Is-Sibt\x02Tn\x091el kwart\x092ni kwart\x09" + + "3et kwart\x0c4ba’ kwart\x0cQabel Kristu\x0bWara Kristu\x02QK\x03QEK\x02W" + + "K\x02EK\x16EEEE, d 'ta'’ MMMM y\x10d 'ta'’ MMMM y\x05Epoka\x04Sena\x14Is" + + "-sena li għaddiet\x0bdin is-sena\x11Is-sena d-dieħla\x0c{0} sena ilu\x0c" + + "{0} snin ilu\x05Xahar\x13Ix-xahar li għadda\x0cDan ix-xahar\x13Ix-xahar " + + "id-dieħel\x08Ġimgħa\x18Il-ġimgħa li għaddiet\x0fDin il-ġimgħa\x15Il-ġimg" + + "ħa d-dieħla\x09Ilbieraħ\x05Illum\x06Għada\x10Jum tal-Ġimgħa\x13Il-Ħadd " + + "li għadda\x0cDan il-Ħadd\x10Il-Ħadd li ġej\x13It-Tnejn li għadda\x0cDan " + + "It-Tnejn\x10It-Tnejn li ġej\x05QN/WN\x07Siegħa\x06Minuta\x07Sekonda\x05Ż" + + "ona\x0eĦin ta’ {0}\x08{0} (+1)\x11{0} Ħin Standard\x16Ħin Ċentrali Ewrop" + + "ew\x1fĦin Ċentrali Ewropew Standard\x1fĦin Ċentrali Ewropew tas-Sajf\x03" + + "FLO\x03CLA\x03CKI\x03FMF\x03MAD\x03MBI\x03MLI\x03MAM\x03FDE\x03FMU\x03FG" + + "W\x03FYU\x08Fĩi Loo\x0dCokcwaklaŋne\x0aCokcwaklii\x0bFĩi Marfoo\x12Madǝǝ" + + "uutǝbijaŋ\x12Mamǝŋgwãafahbii\x0fMamǝŋgwãalii\x09Madǝmbii\x0dFĩi Dǝɓlii" + + "\x0cFĩi Mundaŋ\x0cFĩi Gwahlle\x09Fĩi Yuru\x03Cya\x03Cla\x03Czi\x03Cko" + + "\x03Cka\x03Cga\x03Cze\x0bCom’yakke\x0aComlaaɗii\x0bComzyiiɗii\x08Comkoll" + + "e\x0eComkaldǝɓlii\x09Comgaisuu\x0bComzyeɓsuu\x1cTai fĩi sai ma tǝn kee z" + + "ah Tai fĩi sai zah lǝn gwa ma kee Tai fĩi sai zah lǝn sai ma kee!Tai fĩi" + + " sai ma coo kee zah ‘na\x05comme\x05lilli\x0dKǝPel Kristu\x0aPel Kristu" + + "\x0cSyii ma tãa\x04Syii\x04Fĩi\x04Luma\x11Zah’nane/ Comme\x06Tǝsoo\x0bTǝ" + + "’nahko\x0aTǝ’nane\x0cKǝsyil luma\x09Cok comme\x13Cok comme ma laŋne" + + "\x1aCok comme ma laŋ tǝ biŋ\x0eWaŋ cok comme\x10EEEE G dd MMMM y\x0bG dd" + + " MMMM y\x0eGGGGG dd-MM-yy\x09ဇန်\x06ဖေ\x09မတ်\x03ဧ\x06မေ\x0cဇွန်\x06ဇူ" + + "\x03ဩ\x09စက်\x0fအောက်\x09နို\x06ဒီ\x03ဇ\x03ဖ\x03မ\x03စ\x03အ\x03န\x03ဒ" + + "\x18ဇန်နဝါရီ\x1eဖေဖော်ဝါရီ\x0cဧပြီ\x15ဇူလိုင်\x0fဩဂုတ်\x18စက်တင်ဘာ\x1eအေ" + + "ာက်တိုဘာ\x18နိုဝင်ဘာ\x15ဒီဇင်ဘာ\x1bတနင်္ဂနွေ\x15တနင်္လာ\x12အင်္ဂါ\x18ဗ" + + "ုဒ္ဓဟူး\x18ကြာသပတေး\x12သောကြာ\x09စနေ\x03တ\x03ဗ\x03က\x03သ\"ပထမ သုံးလပတ်" + + "(ဒုတိယ သုံးလပတ်%တတိယ သုံးလပတ်+စတုတ္ထ သုံးလပတ်\x03ပ\x06ဒု!သန်းခေါင်ယံ\x0f" + + "နံနက်\x1bမွန်းတည့်\x09ညနေ\x12နေ့လယ်\x03ည:ခရစ်တော် မပေါ်မီနှစ်.ဘုံခေတ် " + + "မတိုင်မီ\x18ခရစ်နှစ်\x15ဘုံခေတ်\x0cဘီစီ\x15ဘီစီအီး\x0cအေဒီ\x0fစီအီး" + + "\x13y၊ MMMM d၊ EEEE\x0by၊ d MMMM\x0ay၊ MMM d\x0dzzzz HH:mm:ss\x0az HH:mm" + + ":ss\x0aB HH:mm:ss\x06B H:mm\x0cခေတ်\x0cနှစ်\x18ယမန်နှစ်\x15ယခုနှစ်\x1eလာ" + + "မည့်နှစ်\"{0} နှစ်အတွင်း2ပြီးခဲ့သည့် {0} နှစ်\x18သုံးလပတ်:ပြီးခဲ့သည့် " + + "သုံးလပတ်\"ယခု သုံးလပတ်+လာမည့် သုံးလပတ်8သုံးလပတ်ကာလ {0} အတွင်း`ပြီးခဲ့သ" + + "ည့် သုံးလပတ်ကာလ {0} ခုအတွင်း6ပြီးခဲ့သောသုံးလပတ်!ယခုသုံးလပတ်9နောက်လာမည့" + + "်သုံးလပတ်>သုံးလပတ်ကာလ {0} ခုအတွင်း\x03လ$ပြီးခဲ့သည့်လ\x0cယခုလ\x15လာမည့်" + + "လ\x03Bar\x03Aar\x03Uni\x03Ung\x03Kan\x03Sab" + +var bucket78 string = "" + // Size: 23065 bytes + "\x19{0} လအတွင်း)ပြီးခဲ့သည့် {0} လ\x09ပတ်=ပြီးခဲ့သည့် သီတင်းပတ်%ယခု သီတင်" + + "းပတ်.လာမည့် သီတင်းပတ်\x1f{0} ပတ်အတွင်း/ပြီးခဲ့သည့် {0} ပတ်;{0} ပတ်မြော" + + "က် သီတင်းပတ်Bတစ်လအတွင်းရှိသီတင်းပတ်\x09ရက်\x15တစ်နေ့က\x0fမနေ့က\x0cယနေ့" + + "\x18မနက်ဖြန်\x18သန်ဘက်ခါ\x1f{0} ရက်အတွင်း/ပြီးခဲ့သည့် {0} ရက်Lတစ်နှစ်အတွ" + + "င်း ရက်ရေတွက်ပုံ\x09နေ့?တစ်လအတွင်းရှိအလုပ်ရက်Fပြီးခဲ့သည့် တနင်္ဂနွေနေ့" + + "'ဤတနင်္ဂနွေနေ့7လာမည့် တနင်္ဂနွေနေ့;တနင်္ဂနွေ {0} ပတ်အတွင်းKပြီးခဲ့သည့် တ" + + "နင်္ဂနွေ {0} ပတ်@ပြီးခဲ့သည့် တနင်္လာနေ့!ဤတနင်္လာနေ့1လာမည့် တနင်္လာနေ့5" + + "တနင်္လာ {0} ပတ်အတွင်းEပြီးခဲ့သည့် တနင်္လာ {0} ပတ်=ပြီးခဲ့သည့် အင်္ဂါနေ" + + "့\x1eဤအင်္ဂါနေ့.လာမည့် အင်္ဂါနေ့2အင်္ဂါ {0} ပတ်အတွင်းBပြီးခဲ့သည့် အင်္" + + "ဂါ {0} ပတ်Cပြီးခဲ့သည့် ဗုဒ္ဓဟူးနေ့$ဤဗုဒ္ဓဟူးနေ့4လာမည့် ဗုဒ္ဓဟူးနေ့8ဗုဒ" + + "္ဓဟူး {0} ပတ်အတွင်းHပြီးခဲ့သည့် ဗုဒ္ဓဟူး {0} ပတ်Cပြီးခဲ့သည့် ကြာသပတေးန" + + "ေ့$ဤကြာသပတေးနေ့4လာမည့် ကြာသပတေးနေ့8ကြာသပတေး {0} ပတ်အတွင်းHပြီးခဲ့သည့် " + + "ကြာသပတေး {0} ပတ်=ပြီးခဲ့သည့် သောကြာနေ့\x1eဤသောကြာနေ့.လာမည့် သောကြာနေ့2" + + "သောကြာ {0} ပတ်အတွင်းTပြီးခဲ့သည့် သောကြာ {0} ပတ်အတွင်း4ပြီးခဲ့သည့် စနေန" + + "ေ့\x15ဤစနေနေ့%လာမည့် စနေနေ့)စနေ {0} ပတ်အတွင်းKပြီးခဲ့သည့် စနေ {0} ပတ်အ" + + "တွင်း\x19နံနက်/ညနေ\x0cနာရီ\x15ဤအချိန်\"{0} နာရီအတွင်း2ပြီးခဲ့သည့် {0} " + + "နာရီ\x0fမိနစ်\x12ဤမိနစ်%{0} မိနစ်အတွင်း5ပြီးခဲ့သည့် {0} မိနစ်\x15စက္ကန" + + "့်\x09ယခု+{0} စက္ကန့်အတွင်း;ပြီးခဲ့သည့် {0} စက္ကန့်\x0cဇုန်\x16{0} အချ" + + "ိန်;{0} နွေရာသီ စံတော်ချိန်%{0} စံတော်ချိန်Sညှိထားသည့် ကမ္ဘာ့ စံတော်ချ" + + "ိန်>ဗြိတိန် နွေရာသီ အချိန်Fအိုင်းရစ်ရှ် စံတော်ချိန်:အာဖဂန်နစ္စတန် အချိ" + + "န်1အလယ်အာဖရိက အချိန်4အရှေ့အာဖရိက အချိန်4တောင်အာဖရိက အချိန်7အနောက်အာဖရိ" + + "က အချိန်Fအနောက်အာဖရိက စံတော်ချိန်Mအနောက်အာဖရိက နွေရာသီ အချိန်%အလာစကာ အ" + + "ချိန်4အလာစကာ စံတော်ချိန်Jအလာစကာ နွေရာသီ စံတော်ချိန်%အမေဇုံ အချိန်4အမေဇ" + + "ုံ စံတော်ချိန်:အမေဇုံ နွေရာသီအချိန်Uမြောက်အမေရိက အလယ်ပိုင်းအချိန်dမြော" + + "က်အမေရိက အလယ်ပိုင်းစံတော်ချိန်zမြောက်အမေရိက အလယ်ပိုင်း နွေရာသီစံတော်ချ" + + "ိန်Xမြောက်အမေရိက အရှေ့ပိုင်းအချိန်gမြောက်အမေရိက အရှေ့ပိုင်းစံတော်ချိန်" + + "}မြောက်အမေရိက အရှေ့ပိုင်း နွေရာသီစံတော်ချိန်[မြောက်အမေရိက တောင်တန်းဒေသအခ" + + "ျိန်jမြောက်အမေရိက တောင်တန်းဒေသစံတော်ချိန်\x80မြောက်အမေရိက တောင်တန်းဒေသ" + + " နွေရာသီစံတော်ချိန်Lမြောက်အမေရိက ပစိဖိတ်အချိန်[မြောက်အမေရိက ပစိဖိတ်စံတော" + + "်ချိန်qမြောက်အမေရိက ပစိဖိတ် နွေရာသီစံတော်ချိန်\"အပီယာ အချိန်1အပီယာ စံတ" + + "ော်ချိန်8အပီယာ နွေရာသီ အချိန်%အာရေဗျ အချိန်4အာရေဗျ စံတော်ချိန်;အာရေဗျ " + + "နွေရာသီ အချိန်7အာဂျင်တီးနား အချိန်Fအာဂျင်တီးနား စံတော်ချိန်Lအာဂျင်တီးန" + + "ား နွေရာသီအချိန်Jအနောက် အာဂျင်တီးနား အချိန်Yအနောက် အာဂျင်တီးနား စံတော်" + + "ချိန်`အနောက် အာဂျင်တီးနား နွေရာသီ အချိန်4အာမေးနီးယား အချိန်Cအာမေးနီးယာ" + + "း စံတော်ချိန်Jအာမေးနီးယား နွေရာသီ အချိန်1အတ္တလန်တစ် အချိန်@အတ္တလန်တစ် " + + "စံတော်ချိန်Vအတ္တလန်တစ် နွေရာသီ စံတော်ချိန်Jဩစတြေးလျ အလယ်ပိုင်း အချိန်Y" + + "ဩစတြေးလျ အလယ်ပိုင်း စံတော်ချိန်`ဩစတြေးလျ အလယ်ပိုင်း နွေရာသီ အချိန်eသြစ" + + "တြေးလျား အနောက်အလယ်ပိုင်း အချိန်tသြစတြေးလျား အနောက်အလယ်ပိုင်း စံတော်ချ" + + "ိန်{သြစတြေးလျား အနောက်အလယ်ပိုင်း နွေရာသီ အချိန်:အရှေ့ဩစတြေးလျ အချိန်Iအ" + + "ရှေ့ဩစတြေးလျ စံတော်ချိန်Pအရှေ့ဩစတြေးလျ နွေရာသီ အချိန်=အနောက်ဩစတြေးလျ အ" + + "ချိန်Lအနောက်ဩစတြေးလျ စံတော်ချိန်Aဩစတြေးလျ နွေရာသီ အချိန်7အဇာဘိုင်ဂျန် " + + "အချိန်Fအဇာဘိုင်ဂျန် စံတော်ချိန်Mအဇာဘိုင်ဂျန် နွေရာသီ အချိန်4အေဇိုးရီးစ" + + "် အချိန်Cအေဇိုးရီးစ် စံတော်ချိန်Jအေဇိုးရီးစ် နွေရာသီ အချိန်=ဘင်္ဂလားဒေ" + + "့ရှ် အချိန်Lဘင်္ဂလားဒေ့ရှ် စံတော်ချိန်Sဘင်္ဂလားဒေ့ရှ် နွေရာသီ အချိန်\"" + + "ဘူတန် အချိန်7ဘိုလီးဘီးယား အချိန်%ဘရာဇီး အချိန်4ဘရာဇီး စံတော်ချိန်;ဘရာဇ" + + "ီး နွေရာသီ အချိန်=ဘရူနိုင်း စံတော်ချိန်2ကိတ်ပ် ဗာဒီ အချိန်Aကိတ်ပ် ဗာဒီ" + + " စံတော်ချိန်Hကိတ်ပ် ဗာဒီ နွေရာသီ အချိန်.ချာမိုရို အချိန်'ချားသမ်အချိန်6ခ" + + "ျားသမ်စံတော်ချိန်;ချာသမ် နွေရာသီ အချိန်\"ချီလီ အချိန်1ချီလီ စံတော်ချိန" + + "်8ချီလီ နွေရာသီ အချိန်\"တရုတ် အချိန်1တရုတ် စံတော်ချိန်8တရုတ် နွေရာသီ အ" + + "ချိန်7ချွဲဘော်ဆန်း အချိန်Fချွဲဘော်ဆန်း စံတော်ချိန်Mချွဲဘော်ဆန်း နွေရာသ" + + "ီ အချိန်=ခရစ်စမတ်ကျွန်း အချိန်:ကိုကိုးကျွန်း အချိန်.ကိုလံဘီယာ အချိန်=က" + + "ိုလံဘီယာ စံတော်ချိန်Dကိုလံဘီယာ နွေရာသီ အချိန်=ကွတ်ခ်ကျွန်းစု အချိန်Lကွ" + + "တ်ခ်ကျွန်းစု စံတော်ချိန်Sကွတ်က်ကျွန်းစု နွေရာသီ အချိန်(ကျူးဘား အချိန်7" + + "ကျူးဘား စံတော်ချိန်Mကျူးဘား နွေရာသီ စံတော်ချိန်%ဒေးဗစ် အချိန်Jဒူးမော့တ" + + "် ဒါရ်ဗီးလ် အချိန်1အရှေ့တီမော အချိန်3အီစတာကျွန်းအချိန်Bအီစတာကျွန်းစံတေ" + + "ာ်ချိန်Hအီစတာကျွန်းနွေရာသီအချိန်+အီကွေဒေါ အချိန်@ဥရောပအလယ်ပိုင်း အချိန" + + "်Oဥရောပအလယ်ပိုင်း စံတော်ချိန်Vဥရောပအလယ်ပိုင်း နွေရာသီ အချိန်1အရှေ့ဥရော" + + "ပ အချိန်@အရှေ့ဥရောပ စံတော်ချိန်Gအရှေ့ဥရောပ နွေရာသီ အချိန်Gအရှေ့ဖျား ဥရ" + + "ောပဒေသ အချိန်4အနောက်ဥရောပ အချိန်Cအနောက်ဥရောပ စံတော်ချိန်Jအနောက်ဥရောပ န" + + "ွေရာသီ အချိန်Cဖော့ကလန်ကျွန်းစု အချိန်Rဖော့ကလန်ကျွန်းစု စံတော်ချိန်Yဖော" + + "့ကလန်ကျွန်းစု နွေရာသီ အချိန်\"ဖီဂျီ အချိန်1ဖီဂျီ စံတော်ချိန်8ဖီဂျီ နွေ" + + "ရာသီ အချိန်Aပြင်သစ် ဂီအားနား အချိန်tပြင်သစ်တောင်ပိုင်းနှင့် အန္တာတိတ် " + + "အချိန်9ဂါလားပါဂိုးစ်အချိန်(ဂမ်ဘီယာ အချိန်1ဂျော်ဂျီယာ အချိန်@ဂျော်ဂျီယာ" + + " စံတော်ချိန်Gဂျော်ဂျီယာ နွေရာသီ အချိန်@ဂီလ်ဘတ်ကျွန်းစု အချိန်:ဂရင်းနစ် စ" + + "ံတော်ချိန်=အရှေ့ဂရင်းလန်း အချိန်Lအရှေ့ဂရင်းလန်း စံတော်ချိန်_အရှေ့ဂရင်း" + + "လန် နွေရာသီ စံတော်ချိန်Aအနောက် ဂရင်းလန်း အချိန်Pအနောက် ဂရင်းလန်း စံတော" + + "်ချိန်cအနောက် ဂရင်းလန် နွေရာသီ စံတော်ချိန်1ပင်လယ်ကွေ့ အချိန်.ဂိုင်ယာနာ" + + " အချိန်Pဟာဝိုင်ယီ အယ်လူးရှန်း အချိန်_ဟာဝိုင်ယီ အယ်လူးရှန်း စံတော်ချိန်uဟ" + + "ာဝိုင်ယီ အယ်လူးရှန်း နွေရာသီ စံတော်ချိန်1ဟောင်ကောင် အချိန်@ဟောင်ကောင် " + + "စံတော်ချိန်Gဟောင်ကောင် နွေရာသီ အချိန်%ဟိုးဗ် အချိန်4ဟိုးဗ် စံတော်ချိန်" + + ";ဟိုးဗ် နွေရာသီ အချိန်7အိန္ဒိယ စံတော်ချိန်@အိန္ဒိယသမုဒ္ဒရာ အချိန်Cအင်ဒို" + + "ချိုင်းနား အချိန်Yအလယ်ပိုင်း အင်ဒိုနီးရှား အချိန်\\အရှေ့ပိုင်း အင်ဒိုန" + + "ီးရှား အချိန်_အနောက်ပိုင်း အင်ဒိုနီးရှား အချိန်\"အီရန် အချိန်1အီရန် စံ" + + "တော်ချိန်8အီရန် နွေရာသီ အချိန်+အီရူခူတ် အချိန်:အီရူခူတ် စံတော်ချိန်Aအီ" + + "ရူခူတ် နွေရာသီ အချိန်(အစ္စရေး အချိန်7အစ္စရေး စံတော်ချိန်>အစ္စရေး နွေရာ" + + "သီ အချိန်\"ဂျပန် အချိန်1ဂျပန် စံတော်ချိန်8ဂျပန် နွေရာသီ အချိန်=အရှေ့ကာ" + + "ဇက်စတန် အချိန်@အနောက်ကာဇက်စတန် အချိန်.ကိုရီးယား အချိန်=ကိုရီးယား စံတော" + + "်ချိန်Dကိုရီးယား နွေရာသီ အချိန်1ခိုစ်ရိုင် အချိန်:ခရာ့စ်နိုရာစ် အချိန်" + + "Iခရာ့စ်နိုရာစ် စံတော်ချိန်Pခရာ့စ်နိုရာစ် နွေရာသီ အချိန်1ကာဂျစ္စတန် အချိန" + + "်1သီရိလင်္ကာ အချိန်=လိုင်းကျွန်းစု အချိန်4လော့ဒ်ဟောင် အချိန်Cလော့ဒ်ဟော" + + "င် စံတော်ချိန်Jလော့ဒ်ဟောင် နွေရာသီ အချိန်%မကာအို အချိန်4မကာအို စံတော်ခ" + + "ျိန်;မကာအို နွေရာသီ အချိန်@မက်ကွယ်ရီကျွန်း အချိန်+မာဂါဒန်း အချိန်:မာဂါ" + + "ဒန်း စံတော်ချိန်Aမာဂါဒန်း နွေရာသီ အချိန်+မလေးရှား အချိန်1မော်လဒိုက် အခ" + + "ျိန်1မာခေးအပ်စ် အချိန်=မာရှယ်ကျွန်းစု အချိန်.မောရစ်ရှ် အချိန်=မောရစ်ရှ" + + "် စံတော်ချိန်Dမောရစ်ရှ် နွေရာသီ အချိန်+မော်စွန် အချိန်Pအနောက်တောင် မက္" + + "ကဆီကို အချိန်_အနောက်တောင် မက္ကဆီကို စံတော်ချိန်uအနောက်တောင် မက္ကစီကို " + + "နွေရာသီ စံတော်ချိန်Dမက္ကဆီကန် ပစိဖိတ် အချိန်Sမက္ကဆီကန် ပစိဖိတ် စံတော်ခ" + + "ျိန်iမက္ကစီကန် ပစိဖိတ် နွေရာသီ စံတော်ချိန်.ဥလန်ဘာတော အချိန်=ဥလန်ဘာတော " + + "စံတော်ချိန်Dဥလန်ဘာတော နွေရာသီ အချိန်+မော်စကို အချိန်:မော်စကို စံတော်ချ" + + "ိန်Aမော်စကို နွေရာသီ အချိန်%မြန်မာ အချိန်%နာဥူရူ အချိန်\"နီပေါ အချိန်L" + + "နယူးကယ်လီဒိုးနီးယား အချိန်Xနယူးကာလီဒိုးနီးယား စံတော်ချိန်_နယူးကာလီဒိုး" + + "နီးယား နွေရာသီ အချိန်.နယူးဇီလန် အချိန်=နယူးဇီလန် စံတော်ချိန်Dနယူးဇီလန်" + + " နွေရာသီ အချိန်7နယူးဖောင်လန် အချိန်Fနယူးဖောင်လန် စံတော်ချိန်\\နယူးဖောင်လ" + + "န် နွေရာသီ စံတော်ချိန်%နီဦးအေ အချိန်?နောဖော့ခ်ကျွန်းအချိန်Rဖာနန်ဒိုးဒီ" + + "နိုးရိုးညာ အချိန်aဖာနန်ဒိုးဒီနိုးရိုးညာ စံတော်ချိန်gဖာနန်ဒိုးဒီနိုးရို" + + "းညာ နွေရာသီအချိန်Cနိုဗိုစဲဘီအဲယ်စ် အချိန်Rနိုဗိုစဲဘီအဲယ်စ် စံတော်ချိန်" + + "Yနိုဗိုစဲဘီအဲယ်စ် နွေရာသီ အချိန်.အွမ်းစ်ခ် အချိန်=အွမ်းစ်ခ် စံတော်ချိန်D" + + "အွမ်းစ်ခ် နွေရာသီ အချိန်.ပါကစ္စတန် အချိန်=ပါကစ္စတန် စံတော်ချိန်Dပါကစ္စ" + + "တန် နွေရာသီ အချိန်%ပလာအို အချိန်=ပါပူအာနယူးဂီနီ အချိန်+ပါရာဂွေး အချိန်" + + ":ပါရာဂွေး စံတော်ချိန်Aပါရာဂွေး နွေရာသီ အချိန်\"ပီရူး အချိန်1ပီရူး စံတော်" + + "ချိန်8ပီရူး နွေရာသီ အချိန်1ဖိလစ်ပိုင် အချိန်@ဖိလစ်ပိုင် စံတော်ချိန်Gဖိ" + + "လစ်ပိုင် နွေရာသီ အချိန်=ဖီးနစ်ကျွန်းစု အချိန်Wစိန့်ပီအဲနှင့်မီခွီလွန်အ" + + "ချိန်fစိန့်ပီအဲနှင့်မီခွီလွန်စံတော်ချိန်~စိန့်ပီအဲနှင့် မီခွီလွန် နွေရ" + + "ာသီ စံတော်ချိန်1ပါတ်ကယ်ရင် အချိန်.ဖိုနာဖဲအ် အချိန်+ပြုံယန်း အချိန်+ရီယ" + + "ူနီယံ အချိန်(ရိုသီရာ အချိန်(ဆာခါလင် အချိန်7ဆာခါလင် စံတော်ချိန်>ဆာခါလင်" + + " နွေရာသီ အချိန်%ဆမိုအာ အချိန်4ဆမိုအာ စံတော်ချိန်Aဆမိုးအား နွေရာသီ အချိန်" + + "%ဆေးရှဲ အချိန်+စင်္ကာပူ အချိန်Fဆော်လမွန်ကျွန်းစု အချိန်@တောင်ဂျော်ဂျီယာ " + + "အချိန်-စူးရီနာမ်အချိန်%ရှိုဝါ အချိန်\"တဟီတီ အချိန်(ထိုင်ပေ အချိန်7ထိုင" + + "်ပေ စံတော်ချိန်>ထိုင်ပေ နွေရာသီ အချိန်:တာဂျစ်ကစ္စတန် အချိန်+တိုကီလာဥ အ" + + "ချိန်%တွန်ဂါ အချိန်4တွန်ဂါ စံတော်ချိန်;တွန်ဂါ နွေရာသီ အချိန်\"ချုခ် အခ" + + "ျိန်@တာ့ခ်မင်နစ္စတန် အချိန်Oတာ့ခ်မင်နစ္စတန် စံတော်ချိန်Vတာ့ခ်မင်နစ္စတန" + + "် နွေရာသီ အချိန်(တူဗားလူ အချိန်(ဥရုဂွေး အချိန်7ဥရုဂွေး စံတော်ချိန်>ဥရု" + + "ဂွေး နွေရာသီ အချိန်7ဥဇဘက်ကစ္စတန် အချိန်Fဥဇဘက်ကစ္စတန် စံတော်ချိန်Mဥဇဘက်" + + "ကစ္စတန် နွေရာသီ အချိန်(ဗနွားတူ အချိန်7ဗနွားတူ စံတော်ချိန်>ဗနွားတူ နွေရ" + + "ာသီ အချိန်4ဗင်နီဇွဲလား အချိန်Cဗလာဒီဗော့စတော့ခ် အချိန်Rဗလာဒီဗော့စတော့ခ်" + + " စံတော်ချိန်Yဗလာဒီဗော့စတော့ခ် နွေရာသီ အချိန်7ဗိုလ်ဂိုဂရက် အချိန်Fဗိုလ်ဂိ" + + "ုဂရက် စံတော်ချိန်Gဗိုဂိုဂရက် နွေရာသီ အချိန်1ဗိုစ်တိုခ် အချိန်7ဝိတ်ခ်ကျ" + + "ွန်း အချိန်Mဝေါလီစ်နှင့် ဖူကျူနာ အချိန်.ယူခူးတ်စ် အချိန်=ယူခူးတ်စ် စံတ" + + "ော်ချိန်Dယူခူးတ်စ် နွေရာသီ အချိန်Cရယ်ခါးတီရင်ဘားခ် အချိန်Rရယ်ခါးတီရင်ဘ" + + "ားခ် စံတော်ချိန်Vရယ်ခါးတီရင်ဘာခ် နွေရာသီ အချိန်" + +var bucket79 string = "" + // Size: 11080 bytes + "\x11قبل میلاد\x1eقبل میلادی تقویم\x11بعد میلاد\x0cمیلادی\x05پ.م\x06پ.م." + + "\x03م.\x02م\x0aتقویم\x0cپارسال\x0aامسال\x0fسال دیگه\x11{0} سال دله\x06رب" + + "ع\x11{0} ربع دله\x11{0} ربع پیش\x0dماه قبل\x0dاین ماه\x0fماه ِبعد\x11{0" + + "} ماه دله\x11قبلی هفته\x0fاین هفته\x11بعدی هفته\x13{0} هفته دله\x11{0} ر" + + "وز دله\x16هفته\u200cی ِروز\x15قبلی یکشنبه\x13این یکشنبه\x15بعدی یکشنبه" + + "\x13یکشنبه قبل\x13یکشنبه بعد\x15قبلی دِشنبه\x13این دِشنبه\x15بعدی دِشنبه" + + "\x18قبلی سه\u200cشنبه\x16این سه\u200cشنبه\x18بعدی سه\u200cشنبه\x17قبلی چ" + + "ارشنبه\x15این چارشنبه\x17بعدی چارشنبه\x17قبلی پنجشنبه\x15این پنجشنبه" + + "\x17بعدی پنجشنبه\x11قبلی جومه\x0fاین جومه\x11بعدی جومه\x11قبلی شنبه\x0fا" + + "ین شنبه\x11بعدی شنبه\x11صواحی/ظُر\x0aساعِت\x15{0} ساعِت دله\x15{0} ساعِ" + + "ت پیش\x13{0} ساعت دله\x15{0} دقیقه دله\x13{0} دَقه پیش\x08دَقه\x13{0} د" + + "َقه دله\x15{0} ثانیه دله\x15زمونی منقطه\x08ǃKhanni\x0dǃKhanǀgôab\x0dǀKh" + + "uuǁkhâb\x0dǃHôaǂkhaib\x0bǃKhaitsâb\x09Gamaǀaeb\x0aǂKhoesaob\x12Aoǁkhuumû" + + "ǁkhâb\x14Taraǀkhuumûǁkhâb\x0eǂNûǁnâiseb\x0bǀHooǂgaeb\x0fHôasoreǁkhâb" + + "\x0bSontaxtsees\x0bMantaxtsees\x0cDenstaxtsees\x0cWunstaxtsees\x0eDonder" + + "taxtsees\x0cFraitaxtsees\x0dSatertaxtsees\x03KW1\x03KW2\x03KW3\x03KW4" + + "\x0c1ro kwartals\x0e2ǁî kwartals\x0e3ǁî kwartals\x0e4ǁî kwartals\x08ǁgoa" + + "gas\x06ǃuias\x0eXristub aiǃâ\x11Xristub khaoǃgâ\x0aǁAeǃgâs\x05Kurib\x07ǁ" + + "Khâb\x06Wekheb\x05Tsees\x0cWekheb tsees\x0cǁgoas/ǃuis\x04Iiri\x04Haib" + + "\x07ǀGâub\x0dǁAeb ǀharib\x09vårstart\x08regnvann\x10insekter våkner\x0dv" + + "årjevndøgn\x0dlyst og klart\x08kornregn\x0bsommerstart\x0atidl. korn" + + "\x0akorn i aks\x0dsommersolverv\x0bliten varme\x0astor varme\x0ahøststar" + + "t\x0avarmeslutt\x09hvit dugg\x0ehøstjevndøgn\x08kalddugg\x0dførste frost" + + "\x0bvinterstart\x09litt snø\x08mye snø\x0dvintersolverv\x0bliten kulde" + + "\x0astor kulde\x11EEEE d. MMMM r(U)\x0cd. MMMM r(U)\x08d. MMM r\x05d.M.r" + + "\x0c0. tidsalder\x0c1. tidsalder\x070. t.a.\x071. t.a.\x03TA0\x03TA1\x04" + + "sø.\x03ma.\x03ti.\x03on.\x03to.\x03fr.\x04lø.\x05midn.\x05morg.\x05form." + + "\x07etterm.\x05kveld\x04natt\x03mg.\x03fm.\x03em.\x03nt.\x07midnatt\x08m" + + "orgenen\x0bformiddagen\x0dettermiddagen\x07kvelden\x06natten\x0bettermid" + + "dag\x0cfør Kristus\x15før vår tidsregning\x0detter Kristus\x16etter vår " + + "tidsregning\x04fvt.\x04evt.\x03vt.\x07d.M y G\x0bFør R.O.C.\x06Minguo" + + "\x08Før ROC\x09tidsalder\x06i fjor\x05i år\x09neste år\x08+{0} år\x0a–{0" + + "} år\x0fforrige kvartal\x0fdette kvartalet\x0dneste kvartal\x0bforrige k" + + "v.\x09dette kv.\x09neste kv.\x0aom {0} kv.\x11for {0} kv. siden\x08+{0} " + + "kv.\x0a–{0} kv.\x0eforrige måned\x0edenne måneden\x0cneste måned\x04mnd." + + "\x0bforrige md.\x09denne md.\x09neste md.\x08+{0} md.\x08-{0} md.\x03uke" + + "\x0bforrige uke\x0adenne uken\x09neste uke\x0aom {0} uke\x0bom {0} uker" + + "\x11for {0} uke siden\x12for {0} uker siden\x17uken som inneholder {0}" + + "\x09om {0} u.\x10for {0} u. siden\x0cuken med {0}\x06u. {0}\x0euke i mån" + + "eden\x0auke i mnd.\x09uke i md.\x0com {0} døgn\x13for {0} døgn siden\x09" + + "om {0} d.\x10for {0} d. siden\x05-2 d.\x06i går\x05i dag\x08i morgen\x05" + + "+2 d.\x07+{0} d.\x07-{0} d.\x0ad. i året\x06ukedag\x05uked.\x11ukedag i " + + "måneden\x0cuked. i mnd.\x0buked. i md.\x0fforrige søndag\x07søndag\x0dne" + + "ste søndag\x0asist søn.\x0bdenne søn.\x0bneste søn.\x0com {0} søn.\x13fo" + + "r {0} søn. siden\x09sist sø.\x0adenne sø.\x0aneste sø.\x0bom {0} sø.\x12" + + "for {0} sø. siden\x0eforrige mandag\x06mandag\x0cneste mandag\x09sist ma" + + "n.\x0adenne man.\x0aneste man.\x0bom {0} man.\x12for {0} man. siden\x08s" + + "ist ma.\x09denne ma.\x09neste ma.\x0aom {0} ma.\x11for {0} ma. siden\x0f" + + "forrige tirsdag\x07tirsdag\x0dneste tirsdag\x09sist tir.\x0adenne tir." + + "\x0aneste tir.\x0bom {0} tir.\x12for {0} tir. siden\x08sist ti.\x09denne" + + " ti.\x09neste ti.\x0aom {0} ti.\x11for {0} ti. siden\x0eforrige onsdag" + + "\x06onsdag\x0cneste onsdag\x09sist ons.\x0adenne ons.\x0aneste ons.\x0bo" + + "m {0} ons.\x12for {0} ons. siden\x08sist on.\x09denne on.\x09neste on." + + "\x0aom {0} on.\x11for {0} on. siden\x0fforrige torsdag\x07torsdag\x0dnes" + + "te torsdag\x09sist tor.\x0adenne tor.\x0aneste tor.\x0bom {0} tor.\x12fo" + + "r {0} tor. siden\x08sist to.\x09denne to.\x09neste to.\x0aom {0} to.\x11" + + "for {0} to. siden\x0eforrige fredag\x06fredag\x0cneste fredag\x09sist fr" + + "e.\x0adenne fre.\x0aneste fre.\x0bom {0} fre.\x12for {0} fre. siden\x08s" + + "ist fr.\x09denne fr.\x09neste fr.\x0aom {0} fr.\x11for {0} fr. siden\x0f" + + "forrige lørdag\x07lørdag\x0dneste lørdag\x0asist lør.\x0bdenne lør.\x0bn" + + "este lør.\x0com {0} lør.\x13for {0} lør. siden\x09sist lø.\x0adenne lø." + + "\x0aneste lø.\x0bom {0} lø.\x12for {0} lø. siden\x0bdenne timen\x08om {0" + + "} t\x0ffor {0} t siden\x06+{0} t\x06-{0} t\x06minutt\x0edette minuttet" + + "\x0dom {0} minutt\x0fom {0} minutter\x14for {0} minutt siden\x16for {0} " + + "minutter siden\x0aom {0} min\x11for {0} min siden\x03nå\x0aom {0} sek" + + "\x11for {0} sek siden\x08tidssone\x10tidssone for {0}\x11sommertid – {0}" + + "\x11normaltid – {0}\x17koordinert universaltid\x11britisk sommertid\x0ei" + + "rsk sommertid\x0eAcre normaltid\x0eAcre sommertid\x0cafghansk tid\x14sen" + + "tralafrikansk tid\x11østafrikansk tid\x11sørafrikansk tid\x17vestafrikan" + + "sk normaltid\x17vestafrikansk sommertid\x12alaskisk normaltid\x12alaskis" + + "k sommertid\x13Almaty, standardtid\x11Almaty, sommertid\x16normaltid for" + + " Amazonas\x16sommertid for Amazonas'normaltid for det sentrale Nord-Amer" + + "ika'sommertid for det sentrale Nord-Amerika,normaltid for den nordamerik" + + "anske østkysten,sommertid for den nordamerikanske østkysten#normaltid fo" + + "r Rocky Mountains (USA)#sommertid for Rocky Mountains (USA)2normaltid fo" + + "r den nordamerikanske Stillehavskysten2sommertid for den nordamerikanske" + + " Stillehavskysten\x1aRussisk (Anadyr) normaltid\x1aRussisk (Anadyr) somm" + + "ertid\x12normaltid for Apia\x12sommertid for Apia\x12Aqtau, standardtid" + + "\x10Aqtau, sommertid\x13Aqtobe, standardtid\x11Aqtobe, sommertid\x13arab" + + "isk standardtid\x11arabisk sommertid\x14argentinsk normaltid\x14argentin" + + "sk sommertid\x18vestargentinsk normaltid\x18vestargentinsk sommertid\x11" + + "armensk normaltid\x11armensk sommertid4normaltid for den nordamerikanske" + + " atlanterhavskysten4sommertid for den nordamerikanske atlanterhavskysten" + + "\x1asentralaustralsk normaltid\x1asentralaustralsk sommertid\x1fvest-sen" + + "tralaustralsk normaltid\x1fvest-sentralaustralsk sommertid\x17østaustral" + + "sk normaltid\x17østaustralsk sommertid\x17vestaustralsk normaltid\x17ves" + + "taustralsk sommertid\x18aserbajdsjansk normaltid\x18aserbajdsjansk somme" + + "rtid\x11asorisk normaltid\x11asorisk sommertid\x17bangladeshisk normalti" + + "d\x17bangladeshisk sommertid\x0cbhutansk tid\x0eboliviansk tid\x16normal" + + "tid for Brasilia\x16sommertid for Brasilia\x1etidssone for Brunei Daruss" + + "alam\x15kappverdisk normaltid\x15kappverdisk sommertid\x09Casey-tid\x15t" + + "idssone for Chamorro\x15normaltid for Chatham\x15sommertid for Chatham" + + "\x12chilensk normaltid\x12chilensk sommertid\x12kinesisk normaltid\x12ki" + + "nesisk sommertid\x19normaltid for Tsjojbalsan\x19sommertid for Tsjojbals" + + "an\x1atidssone for Christmasøya\x18tidssone for Kokosøyene\x15colombians" + + "k normaltid\x15colombiansk sommertid\x18normaltid for Cookøyene\x1dhalv " + + "sommertid for Cookøyene\x11cubansk normaltid\x11cubansk sommertid\x12tid" + + "ssone for Davis\x1ftidssone for Dumont d’Urville\x12østtimoresisk tid" + + "\x18normaltid for Påskeøya\x18sommertid for Påskeøya\x10ecuadoriansk tid" + + "\x1asentraleuropeisk normaltid\x1asentraleuropeisk sommertid\x17østeurop" + + "eisk normaltid\x17østeuropeisk sommertid\x17fjern-østeuropeisk tid\x17ve" + + "steuropeisk normaltid\x17vesteuropeisk sommertid\x1dnormaltid for Falkla" + + "ndsøyene\x1dsommertid for Falklandsøyene\x12fijiansk normaltid\x12fijian" + + "sk sommertid\x1atidssone for Fransk Guyana'tidssone for De franske sørte" + + "rritorier\x1dtidssone for Galápagosøyene\x14tidssone for Gambier\x12geor" + + "gisk normaltid\x12georgisk sommertid\x1atidssone for Gilbertøyene\x13Gre" + + "enwich middeltid\x19østgrønlandsk normaltid\x19østgrønlandsk sommertid" + + "\x19vestgrønlandsk normaltid\x19vestgrønlandsk sommertid\x08Guam-tid\x18" + + "tidssone for Persiabukta\x0bguyansk tid normaltid for Hawaii og Aleutene" + + " sommertid for Hawaii og Aleutene\x16normaltid for Hongkong\x16sommertid" + + " for Hongkong\x13normaltid for Khovd\x13sommertid for Khovd\x0aindisk ti" + + "d\x17tidssone for Indiahavet\x10indokinesisk tid\x15sentralindonesisk ti" + + "d\x12østindonesisk tid\x12vestindonesisk tid\x10iransk normaltid\x10iran" + + "sk sommertid\x15normaltid for Irkutsk\x15sommertid for Irkutsk\x12israel" + + "sk normaltid\x12israelsk sommertid\x11japansk normaltid\x11japansk somme" + + "rtid.Russisk (Petropavlovsk-Kamtsjatskij) normaltid.Russisk (Petropavlov" + + "sk-Kamtsjatskij) sommertid\x14østkasakhstansk tid\x14vestkasakhstansk ti" + + "d\x12koreansk normaltid\x12koreansk sommertid\x13tidssone for Kosrae\x19" + + "normaltid for Krasnojarsk\x19sommertid for Krasnojarsk\x0dkirgisisk tid" + + "\x09Lanka-tid\x18tidssone for Linjeøyene\x1cnormaltid for Lord Howe-øya" + + "\x1csommertid for Lord Howe-øya\x12Macau, standardtid\x10Macau, sommerti" + + "d\x1atidssone for Macquarieøya\x15normaltid for Magadan\x15sommertid for" + + " Magadan\x0dmalaysisk tid\x0dmaldivisk tid\x1ctidssone for Marquesasøyen" + + "e\x11marshallesisk tid\x13mauritisk normaltid\x13mauritisk sommertid\x13" + + "tidssone for Mawson!normaltid for nordvestlige Mexico!sommertid for nord" + + "vestlige Mexico.normaltid for den meksikanske Stillehavskysten.sommertid" + + " for den meksikanske Stillehavskysten\x18normaltid for Ulan Bator\x18som" + + "mertid for Ulan Bator\x14normaltid for Moskva\x14sommertid for Moskva" + + "\x0dmyanmarsk tid\x0bnaurisk tid\x0bnepalsk tid\x13kaledonsk normaltid" + + "\x13kaledonsk sommertid\x16newzealandsk normaltid\x16newzealandsk sommer" + + "tid\x1anormaltid for Newfoundland\x1asommertid for Newfoundland\x11tidss" + + "one for Niue\x18tidssone for Norfolkøya!normaltid for Fernando de Noronh" + + "a!sommertid for Fernando de Noronha\x12Nord-Marianene-tid\x19normaltid f" + + "or Novosibirsk\x19sommertid for Novosibirsk\x12normaltid for Omsk\x12som" + + "mertid for Omsk\x14pakistansk normaltid\x14pakistansk sommertid\x0cpalau" + + "isk tid\x0cpapuansk tid\x16paraguayansk normaltid\x16paraguayansk sommer" + + "tid\x12peruansk normaltid\x12peruansk sommertid\x14filippinsk normaltid" + + "\x14filippinsk sommertid\x1atidssone for Phoenixøyene&normaltid for Sain" + + "t-Pierre-et-Miquelon&sommertid for Saint-Pierre-et-Miquelon\x15tidssone " + + "for Pitcairn\x14tidssone for Pohnpei\x16tidssone for Pyongyang\x16Qyzylo" + + "rda, standardtid\x14Qyzylorda, sommertid\x15tidssone for Réunion\x14tids" + + "sone for Rothera\x16normaltid for Sakhalin\x16sommertid for Sakhalin\x1a" + + "Russisk (Samara) normaltid\x1aRussisk (Samara) sommertid\x12samoansk nor" + + "maltid\x12samoansk sommertid\x0fseychellisk tid\x0esingaporsk tid\x0dsal" + + "omonsk tid\x19tidssone for Sør-Georgia\x0dsurinamsk tid\x12tidssone for " + + "Syowa\x0ctahitisk tid\x14normaltid for Taipei\x14sommertid for Taipei" + + "\x0etadsjikisk tid\x14tidssone for Tokelau\x12tongansk normaltid\x12tong" + + "ansk sommertid\x18tidssone for Chuukøyene\x13turkmensk normaltid\x13turk" + + "mensk sommertid\x0btuvalsk tid\x15uruguayansk normaltid\x15uruguayansk s" + + "ommertid\x12usbekisk normaltid\x12usbekisk sommertid\x13vanuatisk normal" + + "tid\x13vanuatisk sommertid\x10venezuelansk tid\x19normaltid for Vladivos" + + "tok\x19sommertid for Vladivostok\x17normaltid for Volgograd\x17sommertid" + + " for Volgograd\x13tidssone for Vostok\x18tidssone for Wake Island$tidsso" + + "ne for Wallis- og Futunaøyene\x15normaltid for Jakutsk\x15sommertid for " + + "Jakutsk\x1bnormaltid for Jekaterinburg\x1bsommertid for Jekaterinburg" + + "\x04må.\x03ty.\x03la.\x07måndag\x06tysdag\x07laurdag\x10sumartid – {0}" + + "\x11austafrikansk tid\x19vestafrikansk standardtid#normaltid for sentral" + + "e Nord-Amerika+normaltid for den nordamerikansk austkysten2normaltid for" + + " den nordamerikanske stillehavskysten\x11arabisk normaltid\x1csentralaus" + + "tralsk standardtid!vest-sentralaustralsk standardtid\x19austaustralsk st" + + "andardtid\x19vestaustralsk standardtid\x18tidssone for Kokosøyane\x15kol" + + "ombiansk normaltid\x18normaltid for Cookøyane\x11kubansk normaltid\x1fti" + + "dssone for Dumont-d’Urville\x12austtimoresisk tid\x1csentraleuropeisk st" + + "andardtid\x19austeuropeisk standardtid\x17fjern-austeuropeisk tid\x19ves" + + "teuropeisk standardtid\x1dnormaltid for Falklandsøyane'tidssone for Dei " + + "franske sørterritoria\x1dtidssone for Galápagosøyane\x1atidssone for Gil" + + "bertøyane\x19austgrønlandsk normaltid\x1ahongkongkinesisk normaltid\x12a" + + "ustindonesisk tid\x14austkasakhstansk tid\x17tidssone for Lineøyane\x1ct" + + "idssone for Marquesasøyane!normaltid for nordvestlege Mexico.normaltid f" + + "or den meksikanske stillehavskysten\x15nyzealandsk normaltid\x1atidssone" + + " for Phoenixøyane\x18tidssone for Chuukøyane$tidssone for Wallis- og Fut" + + "unaøyane" + +var bucket80 string = "" + // Size: 22556 bytes + "\x03Zib\x04Nhlo\x03Mbi\x03Mab\x03Nkw\x04Nhla\x03Ntu\x03Ncw\x04Mpan\x03Mf" + + "u\x03Lwe\x04Mpal\x0aZibandlela\x09Nhlolanja\x09Mbimbitho\x06Mabasa\x0aNk" + + "wenkwezi\x09Nhlangula\x09Ntulikazi\x0aNcwabakazi\x08Mpandula\x06Mfumfu" + + "\x05Lwezi\x09Mpalakazi\x05Sonto\x05Mvulo\x06Sibili\x08Sithathu\x04Sine" + + "\x07Sihlanu\x08Mgqibelo\x06Kota 1\x06Kota 2\x06Kota 3\x06Kota 4\x12UKris" + + "to angakabuyi\x0fUkristo ebuyile\x07Umnyaka\x0bInyangacale\x05Iviki\x06I" + + "langa\x05Izolo\x07Lamuhla\x06Kusasa\x0dIlanga leviki\x05Ihola\x07Umuzuzu" + + "\x08Isekendi\x09Isikhathi\x16EEEE, 'de' d. MMMM y G\x0dd.MM.yy GGGGG\x07" + + "Januaar\x08Februaar\x05März\x05April\x03Mai\x04Juni\x04Juli\x06August" + + "\x09September\x07Oktover\x08November\x08Dezember\x05März\x03Mai\x04Juni" + + "\x04Juli\x04Sü.\x03Ma.\x03Di.\x03Mi.\x03Du.\x03Fr.\x03Sa.\x08Sünndag\x07" + + "Maandag\x08Dingsdag\x0aMiddeweken\x0aDunnersdag\x07Freedag\x0aSünnavend" + + "\x03Q.1\x03Q.2\x03Q.3\x03Q.4\x0b1. Quartaal\x0b2. Quartaal\x0b3. Quartaa" + + "l\x0b4. Quartaal\x04Q. I\x05Q. II\x06Q. III\x05Q. IV\x02vm\x02nm\x0dvör " + + "Christus\x0dvör uns Tiet\x0bna Christus\x0fbinnen uns Tiet\x06v.Chr.\x06" + + "v.u.T.\x06n.Chr.\x06b.u.T.\x03vuT\x03buT\x14EEEE, 'de' d. MMMM y\x16'Klo" + + "ck' H.mm:ss (zzzz)\x13'Klock' H.mm:ss (z)\x0f'Klock' H.mm:ss\x0a'Kl'. H." + + "mm\x04Ära\x0dverleden Johr\x08dit Johr\x0cnakamen Jahr\x08Quartaal\x05Ma" + + "and\x0everleden Maand\x0bdisse Maand\x0dnakamen Maand\x0dverleden Week" + + "\x0adisse Week\x0cnakamen Week\x03Wk.\x08güstern\x07vundaag\x06morgen" + + "\x08Wekendag\x07Halvdag\x06Stünn\x06Minuut\x06Sekunn\x0aTietrebeet\x08{0" + + "}-Tiet\x0e{0}-Summertiet\x10{0}-Standardtiet\x18Zentraalafrikaansch Tiet" + + "\x14Oostafrikaansch Tiet\x16Söödafrikaansch Tiet\x14Westafrikaansch Tiet" + + "\x1cWestafrikaansch Standardtiet\x1aWestafrikaansch Summertiet\x1eNoorda" + + "merikaansch Zentraaltiet'Noordamerikaansch zentraal Standardtiet%Noordam" + + "erikaansch zentraal Summertiet\x1dNoordamerikaansch oosten Tiet%Noordame" + + "rikaansch oosten Standardtiet#Noordamerikaansch oosten Summertiet\x1aNoo" + + "rdamerikaansch Bargtiet#Noordamerikaansch Barg-Standardtiet!Noordamerika" + + "ansch Barg-Summertiet\x1dNoordamerikaansch Pazifiktiet&Noordamerikaansch" + + " Pazifik-Standardtiet$Noordamerikaansch Pazifik-Summertiet\x0dAraabsch T" + + "iet\x15Araabsch Standardtiet\x13Araabsch Summertiet\x1eNoordamerikaansch" + + " Atlantiktiet'Noordamerikaansch Atlantik-Standardtiet%Noordamerikaansch " + + "Atlantik-Summertiet\x18Zentraalaustraalsch Tiet Zentraalaustraalsch Stan" + + "dardtiet\x1eZentraalaustraalsch Summertiet\x1cWestzentraalaustraalsch Ti" + + "et$Westzentraalaustraalsch Standardtiet\"Westzentraalaustraalsch Summert" + + "iet\x14Oostaustraalsch Tiet\x1cOostaustraalsch Standardtiet\x1aOostaustr" + + "aalsch Summertiet\x14Westaustraalsch Tiet\x1cWestaustraalsch Standardtie" + + "t\x1aWestaustraalsch Summertiet\x0aChina-Tiet\x12China-Standardtiet\x10C" + + "hina-Summertiet\x19Zentraaleuropääsch Tiet!Zentraaleuropääsch Standardti" + + "et\x1fZentraaleuropääsch Summertiet\x15Oosteuropääsch Tiet\x1dOosteuropä" + + "äsch Standardtiet\x1bOosteuropääsch Summertiet\x15Westeuropääsch Tiet" + + "\x1dWesteuropääsch Standardtiet\x1bWesteuropääsch Summertiet\x15Gröönwis" + + "ch-Welttiet\x0bIndien-Tiet\x18Söödoostasiaatsch Tiet\x17Indoneesch Zentr" + + "aaltiet\x13Oostindoneesch Tiet\x13Westindoneesch Tiet\x0bIsrael-Tiet\x13" + + "Israel-Standardtiet\x11Israel-Summertiet\x0eJapaansch Tiet\x16Japaansch " + + "Standardtiet\x14Japaansch Summertiet\x0fKoreaansch Tiet\x17Koreaansch St" + + "andardtiet\x15Koreaansch Summertiet\x0bMoskau-Tiet\x13Moskau-Standardtie" + + "t\x11Moskau-Summertiet\x0c{1}{0}मा\x07{1},{0}\x06जन\x09फेब\x0fमार्च\x0cअ" + + "प्र\x06मे\x09जुन\x09जुल\x06अग\x09सेप\x0fअक्टो\x0cनोभे\x0cडिसे\x0cफेेब" + + "\x0fमार्च\x06मे\x09जुन\x09आइत\x09सोम\x0fमङ्गल\x09बुध\x0cबिहि\x0fशुक्र" + + "\x09शनि\x12आइतबार\x12सोमबार\x18मङ्गलबार\x12बुधबार\x15बिहिबार\x18शुक्रबार" + + "\x12शनिबार\x1cपहिलो सत्र\x1fदोस्रो सत्र\x1fतेस्रो सत्र\x19चौथो सत्र\x15म" + + "ध्यरात\x0fबिहान\x15अपरान्ह\x0cसाँझ\x12बेलुकी\x19ईसा पूर्व\x1eइस्वीपूर्" + + "व\x09सन्\x13ईसा काल\x13गत वर्ष\x13यो वर्ष\x1cआगामी वर्ष\x16{0} वर्षमा" + + "\x1a{0} वर्ष अघि\x0cसत्र\"अघिल्लो सत्र\x13यो सत्र\x1cअर्को सत्र\x17+{0} " + + "सत्रमा\x15{0}सत्रमा\x19{0}सत्र अघि\x16गत महिना\x16यो महिना\x1fअर्को मह" + + "िना\x19{0} महिनामा#{0} महिना पहिले\x0fहप्ता\x16गत हप्ता\x16यो हप्ता" + + "\x1cआउने हप्ता\x19{0} हप्तामा#{0} हप्ता पहिले\x19{0}को हप्ता\x1a{0} को ह" + + "प्ता%महिनाको हप्ता\x09बार\x0fअस्ति\x0cहिजो\x06आज\x0cभोलि\x0fपर्सि\x13{" + + "0} दिनमा\x1d{0} दिन पहिले\x1cवर्षको बार\x1fहप्ताको बार.महिनाको हप्तादिन" + + "\x19गत आइतबार\x19यो आइतबार\"अर्को आइतबार\x1c{0} आइतबारमा%{0} आइतबारहरूमा" + + "%{0}आइतबार पहिले/{0} आइतबारहरू पहिले\x19गत सोमबार\x19यो सोमबार\"अर्को सो" + + "मबार%{0} सोमबारहरूमा&{0} सोमबार पहिले/{0} सोमबारहरू पहिले.{0}सोमबारहरू" + + " पहिले\x1cगत मंगलबार\x1cयो मंगलबार%अर्को मंगलबार\x1f{0} मंगलबारमा({0} मं" + + "गलबारहरूमा){0} मंगलबार पहिले2{0} मंगलबारहरू पहिले\x19गत बुधबार\x19यो ब" + + "ुधबार\"अर्को बुधबार\x1c{0} बुधबारमा+{0} बुधबारमाहरूमा&{0} बुधबार पहिले" + + "/{0} बुधबारहरू पहिले\x1cगत बिहिबार\x1cयो बिहिबार%अर्को बिहिबार\x1f{0} बि" + + "हिबारमा({0} बिहिबारहरूमा){0} बिहिबार पहिले2{0} बिहिबारहरू पहिले\x1fगत " + + "शुक्रबार\x1fयो शुक्रबार(अर्को शुक्रबार\"{0} शुक्रबारमा+{0} शुक्रबारहरू" + + "मा,{0} शुक्रबार पहिले5{0} शुक्रबारहरू पहिले\x19गत शनिबार\x19यो शनिबार" + + "\"अर्को शनिबार\x1c{0} शनिबारमा%{0} शनिबारहरूमा&{0} शनिबार पहिले/{0} शनिब" + + "ारहरू पहिले3पूर्वाह्न / अपराह्न\x0fघण्टा\x16यस घडीमा\x19{0} घण्टामा#{0" + + "} घण्टा पहिले\x0fमिनेट\x1fयही मिनेटमा\x19{0} मिनेटमा#{0} मिनेट पहिले\x15" + + "सेकेन्ड\x0fअहिले\x1f{0} सेकेन्डमा){0} सेकेन्ड पहिले/समन्वित विश्व समयD" + + "बेलायती ग्रीष्मकालीन समय&आइरिश मानक समय+अफगानिस्तान समय;केन्द्रीय अफ्र" + + "िकी समय2पूर्वी अफ्रिकी समय2दक्षिण अफ्रिकी समय2पश्चिम अफ्रिकी समय?पश्चि" + + "म अफ्रिकी मानक समयWपश्चिम अफ्रिकी ग्रीष्मकालीन समय\"अलस्काको समय/अलस्क" + + "ाको मानक समय/अलस्काको दिवा समय\x1cएमाजोन समय)एमाजोन मानक समयAएमाजोन ग्" + + "रीष्मकालीन समय%केन्द्रीय समय2केन्द्रीय मानक समय2केन्द्रीय दिवा समय\x1c" + + "पूर्वी समय)पूर्वी मानक समय)पूर्वी दिवा समय\x1cहिमाली समय)हिमाली मानक स" + + "मय)हिमाली दिवा समय%प्यासिफिक समय2प्यासिफिक मानक समय2प्यासिफिक दिवा समय" + + "\x19आपिया समय&आपिया मानक समय&आपिया दिवा समय\x16अरबी समय#अरबी मानक समय#अर" + + "बी दिवा समय(अर्जेनटिनी समय5अर्जेनटिनी मानक समयMअर्जेनटिनी ग्रीष्मकालीन" + + " समय>पश्चिमी अर्जेनटिनी समयKपश्चिमी अर्जेनटिनी मानक समयcपश्चिमी अर्जेनटि" + + "नी ग्रीष्मकालीन समय%अर्मेनिया समय2अर्मेनिया मानक समयJअर्मेनिया ग्रीष्म" + + "कालीन समय(एट्लान्टिक समय5एट्लान्टिक मानक समय5एट्लान्टिक दिवा समयGकेन्द" + + "्रीय अस्ट्रेलिया समयTकेन्द्रीय अस्ट्रेलिया मानक समयTकेन्द्रीय अस्ट्रेल" + + "िया दिवा समय]केन्द्रीय पश्चिमी अस्ट्रेलिया समयjकेन्द्रीय पश्चिमी अस्ट्" + + "रेलिया मानक समयjकेन्द्रीय पश्चिमी अस्ट्रेलिया दिवा समय>पूर्वी अस्ट्रेल" + + "िया समयKपूर्वी अस्ट्रेलिया मानक समयKपूर्वी अस्ट्रेलिया दिवा समयAपश्चिम" + + "ी अस्ट्रेलिया समयNपश्चिमी अस्ट्रेलिया मानक समयNपश्चिमी अस्ट्रेलिया दिव" + + "ा समय\"अजरबैजान समय/अजरबैजान मानक समयGअजरबैजान ग्रीष्मकालीन समय\x1fएजो" + + "रेस् समय,एजोरेस् मानक समयDएजोरेस् ग्रीष्मकालीन समय%बंगलादेशी समय2बंगला" + + "देशी मानक समयJबंगलादेशी ग्रीष्मकालीन समय\x1cभुटानी समय\"बोलिभिया समय(ब" + + "्राजिलीया समय5ब्राजिलिया मानक समयMब्राजिलीया ग्रीष्मकालीन समय;ब्रुनाइ " + + "दारूस्सलम समय#केप भर्दे समय0केप भर्दे मानक समयHकेप भर्दे ग्रीष्मकालीन " + + "समय/चामोर्रो मानक समय\x19चाथाम समय&चाथाम मानक समय&चाथाम दिवा समय\x16चि" + + "ली समय#चिली मानक समय;चिली ग्रीष्मकालीन समय\x13चीन समय चीन मानक समय चीन" + + " दिवा समय%चोइबाल्सन समय2चोइबाल्सन मानक समयJचोइबाल्सन ग्रीष्मकालीन समय/क्" + + "रिस्मस टापु समय&कोकोस टापु समय+कोलम्बियाली समय8कोलम्बियाली मानक समयPको" + + "लम्बियाली ग्रीष्मकालीन समय कुक टापु समय-कुक टापु मानक समयOकुक टापु आधा" + + " ग्रीष्मकालीन समय\"क्यूबाको समय/क्यूबाको मानक समय/क्यूबाको दिवा समय\x19ड" + + "ेभिस समय?डुमोन्ट-डी‘ उर्भिले समय,पूर्वी टिमोर समय&इस्टर टापू समय3इस्टर" + + " टापू मानक समय<इस्टर टापू ग्रीष्म समय\"ईक्वोडोर समय>केन्द्रीय युरोपेली स" + + "मयKकेन्द्रीय युरोपेली मानक समयcकेन्द्रीय युरोपेली ग्रीष्मकालीन समय5पूर" + + "्वी युरोपेली समयBपूर्वी युरोपेली मानक समयZपूर्वी युरोपेली ग्रीष्मकालीन" + + " समय<थप-पूर्वी युरोपेली समय8पश्चिमी युरोपेली समयEपश्चिमी युरोपेली मानक स" + + "मयGयुरोपेली ग्रीष्मकालीन समय8फल्कल्यान्ड टापू समयEफल्कल्यान्ड टापू मान" + + "क समय]फल्कल्यान्ड टापू ग्रीष्मकालीन समय\x16फिजी समय#फिजी मानक समय;फिजी" + + " ग्रीष्मकालीन समय2फ्रेन्च ग्वाना समयXफ्रेन्च दक्षिणी र अन्टार्टिक समय(गा" + + "लापागोस् समय(ग्याम्बियर समय\x1fजर्जिया समय,जर्जिया मानक समयDजर्जिया ग्" + + "रीष्मकालीन समय/गिल्बर्ट टापु समय,ग्रीनविच मिन समयGपूर्वी ग्रीनल्यान्डक" + + "ो समयTपूर्वी ग्रीनल्यान्डको मानक समयlपूर्वी ग्रीनल्यान्डको ग्रीष्मकाली" + + "न समयJपश्चिमी ग्रीनल्यान्डको समयWपश्चिमी ग्रीनल्यान्डको मानक समयoपश्चि" + + "मी ग्रीनल्यान्डको ग्रीष्मकालीन समय#खाडी मानक समय\x1cगुयाना समय,हवाई-एल" + + "ुटियन समय9हवाई-एलुटियन मानक समय9हवाई-एलुटियन दिवा समय\x16हङकङ समय#हङकङ" + + " मानक समय;हङकङ ग्रीष्मकालीन समय\x19होब्ड समय&होब्ड मानक समय>होब्ड ग्रीष्" + + "मकालीन समय)भारतीय मानक समय/हिन्द महासागर समय(इन्डोचाइना समयGकेन्द्रीय " + + "इन्डोनेशिया समय>पूर्वी इन्डोनेशिया समयAपश्चिमी इन्डोनेशिया समय\x19इरान" + + "ी समय&इरानी मानक समय&इरानी दिवा समय(ईर्कुट्स्क समय5ईर्कुट्स्क मानक समय" + + "Mईर्कुट्स्क ग्रीष्मकालीन समय\x1cइजरायल समय)इजरायल मानक समय)इजरायल दिवा स" + + "मय\x19जापान समय&जापान मानक समय&जापान दिवा समय8पूर्वी काजकस्तान समय8पश्" + + "चिम काजकस्तान समय\"कोरियाली समय/कोरियाली मानक समय/कोरियाली दिवा समय" + + "\x1cकोसराए समय.क्रासनोयार्क समय;क्रासनोयार्क मानक समयSक्रासनोयार्क ग्रीष" + + "्मकालीन समय+किर्गिस्तान समय#लाइन टापु समय#लर्ड हावे समय0लर्ड हावे मानक" + + " समय0लर्ड हावे दिवा समय/माक्वेरी टापु समय\x1fमागादान समय,मागादान मानक सम" + + "यDमागादान ग्रीष्मकालीन समय\x1fमलेसिया समय%माल्दिभ्स समय\"मार्किसस समय)" + + "मार्शल टापु समय\x1cमउरिटस समय)मउरिटस मानक समयAमउरिटस ग्रीष्मकालीन समय" + + "\x19म्वसन समयEउत्तर पश्चिम मेक्सिको समयXउत्तर पश्चिम मेक्सिकोको मानक समय" + + "Xउत्तर पश्चिम मेक्सिकोको दिवा समय>मेक्सिकन प्यासिफिक समयKमेक्सिकन प्यासि" + + "फिक मानक समयKमेक्सिकन प्यासिफिक दिवा समय&उलान बाटोर समय3उलान बाटोर मान" + + "क समयKउलान बाटोर ग्रीष्मकालीन समय\x19मस्को समय&मस्को मानक समय>मस्को ग्" + + "रीष्मकालीन समय\"म्यानमार समय\x19नाउरु समय\x1cनेपाली समय5नयाँ कालेदोनिय" + + "ा समयBनयाँ कालेदोनिया मानक समयZनयाँ कालेदोनिया ग्रीष्मकालीन समय1न्यूजि" + + "ल्यान्ड समय>न्यूजिल्यान्ड मानक समय>न्यूजिल्यान्ड दिवा समयCन्यूफाउन्डल्" + + "यान्डको समयMन्यूफाउनडल्यान्डको मानक समयJन्यूफाउनल्यान्डको दिवा समय\x16" + + "निउए समय/नोर्फल्क टापू समयEफर्नान्डो डे नोरोन्हा समयRफर्नान्डो डे नोरो" + + "न्हा मानक समयjफर्नान्डो डे नोरोन्हा ग्रीष्मकालीन समय1नोभोसिविर्स्क समय" + + ">नोभोसिविर्स्क मानक समयVनोभोसिविर्स्क ग्रीष्मकालीन समय\x1cओम्स्क समय)ओम्" + + "स्क मानक समयAओम्स्क ग्रीष्मकालीन समय(पाकिस्तानी समय5पाकिस्तानी मानक सम" + + "यMपाकिस्तानी ग्रीष्मकालीन समय\x19पालाउ समय3पपूवा न्यू गिनी समय\"पाराग्" + + "वे समय/पाराग्वे मानक समयGपाराग्वे ग्रीष्मकालीन समय\x16पेरु समय#पेरू मा" + + "नक समय;पेरु ग्रीष्मकालीन समय\"फिलिपिनी समय/फिलिपिनी मानक समयGफिलिपिनी " + + "ग्रीष्मकालीन समय,फिनिक्स टापु समयUसेन्ट पियर्रे र मिक्युलोनको समयbसेन्" + + "ट पियर्रे र मिक्युलोनको मानक समयbसेन्ट पियर्रे र मिक्युलोनको दिवा समय" + + "\x1fपिटकैरण समय\x1cपोनापे समय\"प्योङयाङ समय\"रियुनियन समय\x1cरोथेरा समय" + + "\x1fसाखालिन समय,साखालिन मानक समयDसाखालिन ग्रीष्मकालीन समय\x19सामोअ समय&स" + + "ामोअ मानक समय&सामोअ दिवा समय(सेयेचेलास् समय/सिंगापुर मानक समय,सोलोमोन " + + "टापु समय2दक्षिण जर्जिया समय\"सुरिनामा समय\x1cस्योवा समय\x1cताहिती समय" + + "\x1cताइपेइ समय)ताइपेइ मानक समय)ताइपेइ दिवा समय(ताजिकस्तान समय\x1fतोकेलाउ" + + " समय\x19टोंगा समय&टोंगा मानक समय>टोंगा ग्रीष्मकालीन समय\x16चुउक समय4तुर्" + + "कमेनिस्तान समयAतुर्कमेनिस्तान मानक समयfतुर्कमेनिस्तान ग्रीष्मकालीन मान" + + "क समय\x1cटुभालु समय\x1fउरुग्वे समय,उरूग्वे मानक समयDउरुग्वे ग्रीष्मकाल" + + "ीन समय.उज्बेकिस्तान समय;उज्बेकिस्तान मानक समयSउज्बेकिस्तान ग्रीष्मकाली" + + "न समय\x1fभानुआतु समय,भानुआतु मानक समयDभानुआतु ग्रीष्मकालीन समय+भेनेज्य" + + "ुएला समय1भ्लादिभास्टोक समय>भ्लादिभास्टोक मानक समयVभ्लादिभास्टोक ग्रीष्" + + "मकालीन समय+भोल्गाग्राड समय8भोल्गाग्राद मानक समयPभोल्गाग्राद ग्रीष्मकाल" + + "ीन समय\x1fभास्टोक समय वेक टापु समय3वालिस् र फुटुना समय\x1fयाकुस्ट समय," + + "याकुस्ट मानक समयDयाकुस्ट ग्रीष्मकालीन समय1येकाटेरिनबर्ग समय>येकाटेरिनब" + + "र्ग मानक समयVयेकाटेरिनबर्ग ग्रीष्मकालीन समय" + +var bucket81 string = "" + // Size: 10833 bytes + "\x05mnd 1\x05mnd 2\x05mnd 3\x05mnd 4\x05mnd 5\x05mnd 6\x05mnd 7\x05mnd 8" + + "\x05mnd 9\x06mnd 10\x06mnd 11\x06mnd 12\x07maand 1\x07maand 2\x07maand 3" + + "\x07maand 4\x07maand 5\x07maand 6\x07maand 7\x07maand 8\x07maand 9\x08ma" + + "and 10\x08maand 11\x08maand 12\x12begin van de lente\x0aregenwater\x11in" + + "secten ontwaken\x09lentepunt\x0flicht en helder\x09nat graan\x12begin va" + + "n de zomer\x09vol graan\x0boogst graan\x09zomerpunt\x04warm\x04heet\x13b" + + "egin van de herfst\x12einde van de hitte\x0awitte dauw\x0aherfstpunt\x0a" + + "koude dauw\x0ceerste vorst\x13begin van de winter\x0dlichte sneeuw\x0czw" + + "are sneeuw\x0awinterpunt\x04koel\x04koud\x0atijdperk 0\x0atijdperk 1\x05" + + "era 0\x05era 1\x02zo\x02ma\x02di\x02wo\x02do\x02vr\x02za\x06zondag\x07ma" + + "andag\x07dinsdag\x08woensdag\x09donderdag\x07vrijdag\x08zaterdag\x0b1e k" + + "wartaal\x0b2e kwartaal\x0b3e kwartaal\x0b4e kwartaal\x0bmiddernacht\x0d‘" + + "s ochtends\x0c‘s middags\x0b‘s avonds\x0b‘s nachts\x07ochtend\x05avond" + + "\x05nacht\x19vóór gewone jaartelling\x12gewone jaartelling\x0bvoor R.O.C" + + ".\x06Minguo\x08tijdperk\x0avorig jaar\x08dit jaar\x0cvolgend jaar\x0dove" + + "r {0} jaar\x10{0} jaar geleden\x02jr\x0evorig kwartaal\x0cdit kwartaal" + + "\x10volgend kwartaal\x11over {0} kwartaal\x12over {0} kwartalen\x14{0} k" + + "wartaal geleden\x15{0} kwartalen geleden\x0cover {0} kw.\x0cvorige maand" + + "\x0adeze maand\x0evolgende maand\x0eover {0} maand\x10over {0} maanden" + + "\x11{0} maand geleden\x13{0} maanden geleden\x03mnd\x0bvorige week\x09de" + + "ze week\x0dvolgende week\x0dover {0} week\x0eover {0} weken\x10{0} week " + + "geleden\x11{0} weken geleden\x0fde week van {0}\x11week van de maand\x0d" + + "wk van de mnd\x0bwk v.d. mnd\x0cover {0} dag\x0eover {0} dagen\x0f{0} da" + + "g geleden\x11{0} dagen geleden\x0cover {0} dgn\x0f{0} dgn geleden\x10dag" + + " van het jaar\x0edag van het jr\x0bdag v.h. jr\x0fdag van de week\x0ddag" + + " van de wk\x0bdag v.d. wk\x14weekdag van de maand\x10wkdag van de mnd" + + "\x0ewkdag v.d. mnd\x10afgelopen zondag\x0bdeze zondag\x14volgende week z" + + "ondag\x0fover {0} zondag\x11over {0} zondagen\x12{0} zondag geleden\x14{" + + "0} zondagen geleden\x0eafgelopen zon.\x09deze zon.\x12volgende week zon." + + "\x0dover {0} zon.\x10{0} zon. geleden\x0cafgelopen zo\x07deze zo\x10volg" + + "ende week zo\x0bover {0} zo\x0e{0} zo geleden\x11afgelopen maandag\x0cde" + + "ze maandag\x15volgende week maandag\x10over {0} maandag\x12over {0} maan" + + "dagen\x13{0} maandag geleden\x15{0} maandagen geleden\x0fafgelopen maan." + + "\x0adeze maan.\x13volgende week maan.\x0eover {0} maan.\x11{0} maan. gel" + + "eden\x0cafgelopen ma\x07deze ma\x10volgende week ma\x0bover {0} ma\x0e{0" + + "} ma geleden\x11afgelopen dinsdag\x0cdeze dinsdag\x15volgende week dinsd" + + "ag\x10over {0} dinsdag\x12over {0} dinsdagen\x13{0} dinsdag geleden\x15{" + + "0} dinsdagen geleden\x0fafgelopen dins.\x0adeze dins.\x13volgende week d" + + "ins.\x0eover {0} dins.\x11{0} dins. geleden\x0cafgelopen di\x07deze di" + + "\x10volgende week di\x0bover {0} di\x0e{0} di geleden\x12afgelopen woens" + + "dag\x0ddeze woensdag\x16volgende week woensdag\x11over {0} woensdag\x13o" + + "ver {0} woensdagen\x14{0} woensdag geleden\x16{0} woensdagen geleden\x10" + + "afgelopen woens.\x0bdeze woens.\x14volgende week woens.\x0fover {0} woen" + + "s.\x12{0} woens. geleden\x0cafgelopen wo\x07deze wo\x10volgende week wo" + + "\x0bover {0} wo\x0e{0} wo geleden\x13afgelopen donderdag\x0edeze donderd" + + "ag\x17volgende week donderdag\x12over {0} donderdag\x14over {0} donderda" + + "gen\x15{0} donderdag geleden\x17{0} donderdagen geleden\x11afgelopen don" + + "der.\x0cdeze donder.\x15volgende week donder.\x10over {0} donder.\x13{0}" + + " donder. geleden\x0cafgelopen do\x07deze do\x10volgende week do\x0bover " + + "{0} do\x0e{0} do geleden\x11afgelopen vrijdag\x0cdeze vrijdag\x15volgend" + + "e week vrijdag\x10over {0} vrijdag\x12over {0} vrijdagen\x13{0} vrijdag " + + "geleden\x15{0} vrijdagen geleden\x0fafgelopen vrij.\x0adeze vrij.\x13vol" + + "gende week vrij.\x0eover {0} vrij.\x11{0} vrij. geleden\x0cafgelopen vr" + + "\x07deze vr\x10volgende week vr\x0bover {0} vr\x0e{0} vr geleden\x12afge" + + "lopen zaterdag\x0ddeze zaterdag\x16volgende week zaterdag\x11over {0} za" + + "terdag\x13over {0} zaterdagen\x14{0} zaterdag geleden\x16{0} zaterdagen " + + "geleden\x10afgelopen zater.\x0bdeze zater.\x14volgende week zater.\x0fov" + + "er {0} zater.\x12{0} zater. geleden\x0cafgelopen za\x07deze za\x10volgen" + + "de week za\x0bover {0} za\x0e{0} za geleden\x0ebinnen een uur\x0cover {0" + + "} uur\x0f{0} uur geleden\x11binnen een minuut\x0fover {0} minuut\x10over" + + " {0} minuten\x12{0} minuut geleden\x13{0} minuten geleden\x0dover {0} mi" + + "n.\x10{0} min. geleden\x10over {0} seconde\x11over {0} seconden\x13{0} s" + + "econde geleden\x14{0} seconden geleden\x0dover {0} sec.\x10{0} sec. gele" + + "den\x08tijdzone\x08{0}-tijd\x0dzomertijd {0}\x11standaardtijd {0}\x1aGec" + + "oördineerde wereldtijd\x10Britse zomertijd\x13Ierse standaardtijd\x09Acr" + + "e-tijd\x12Acre-standaardtijd\x0eAcre-zomertijd\x0eAfghaanse tijd\x18Cent" + + "raal-Afrikaanse tijd\x14Oost-Afrikaanse tijd\x14Zuid-Afrikaanse tijd\x14" + + "West-Afrikaanse tijd\x1dWest-Afrikaanse standaardtijd\x19West-Afrikaanse" + + " zomertijd\x0bAlaska-tijd\x14Alaska-standaardtijd\x10Alaska-zomertijd" + + "\x0dAlma-Ata-tijd\x16Alma-Ata-standaardtijd\x12Alma-Ata-zomertijd\x0cAma" + + "zone-tijd\x15Amazone-standaardtijd\x11Amazone-zomertijd\x0cCentral-tijd" + + "\x15Central-standaardtijd\x11Central-zomertijd\x0cEastern-tijd\x15Easter" + + "n-standaardtijd\x11Eastern-zomertijd\x0dMountain-tijd\x16Mountain-standa" + + "ardtijd\x12Mountain-zomertijd\x0cPacific-tijd\x15Pacific-standaardtijd" + + "\x11Pacific-zomertijd\x0bAnadyr-tijd\x14Anadyr-standaardtijd\x10Anadyr-z" + + "omertijd\x09Apia-tijd\x12Apia-standaardtijd\x0eApia-zomertijd\x0aAqtau-t" + + "ijd\x13Aqtau-standaardtijd\x0fAqtau-zomertijd\x0cAqtöbe-tijd\x15Aqtöbe-s" + + "tandaardtijd\x11Aqtöbe-zomertijd\x0eArabische tijd\x17Arabische standaar" + + "dtijd\x13Arabische zomertijd\x10Argentijnse tijd\x19Argentijnse standaar" + + "dtijd\x15Argentijnse zomertijd\x15West-Argentijnse tijd\x1eWest-Argentij" + + "nse standaardtijd\x1aWest-Argentijnse zomertijd\x0dArmeense tijd\x16Arme" + + "ense standaardtijd\x12Armeense zomertijd\x0dAtlantic-tijd\x16Atlantic-st" + + "andaardtijd\x12Atlantic-zomertijd\x18Midden-Australische tijd!Midden-Aus" + + "tralische standaardtijd\x1dMidden-Australische zomertijd#Midden-Australi" + + "sche westelijke tijd,Midden-Australische westelijke standaardtijd(Midden" + + "-Australische westelijke zomertijd\x16Oost-Australische tijd\x1fOost-Aus" + + "tralische standaardtijd\x1bOost-Australische zomertijd\x16West-Australis" + + "che tijd\x1fWest-Australische standaardtijd\x1bWest-Australische zomerti" + + "jd\x14Azerbeidzjaanse tijd\x1dAzerbeidzjaanse standaardtijd\x19Azerbeidz" + + "jaanse zomertijd\x0bAzoren-tijd\x14Azoren-standaardtijd\x10Azoren-zomert" + + "ijd\x0eBengalese tijd\x17Bengalese standaardtijd\x13Bengalese zomertijd" + + "\x0eBhutaanse tijd\x10Boliviaanse tijd\x11Braziliaanse tijd\x1aBraziliaa" + + "nse standaardtijd\x16Braziliaanse zomertijd\x0dBruneise tijd\x12Kaapverd" + + "ische tijd\x1bKaapverdische standaardtijd\x17Kaapverdische zomertijd\x0a" + + "Casey tijd\x0dChamorro-tijd\x0cChatham-tijd\x15Chatham-standaardtijd\x11" + + "Chatham-zomertijd\x0eChileense tijd\x17Chileense standaardtijd\x13Chilee" + + "nse zomertijd\x0cChinese tijd\x15Chinese standaardtijd\x11Chinese zomert" + + "ijd\x10Tsjojbalsan-tijd\x19Tsjojbalsan-standaardtijd\x15Tsjojbalsan-zome" + + "rtijd\x16Christmaseilandse tijd\x12Cocoseilandse tijd\x11Colombiaanse ti" + + "jd\x1aColombiaanse standaardtijd\x16Colombiaanse zomertijd\x11Cookeiland" + + "se tijd\x1aCookeilandse standaardtijd\x1cCookeilandse halve zomertijd" + + "\x0dCubaanse tijd\x16Cubaanse standaardtijd\x12Cubaanse zomertijd\x0aDav" + + "is-tijd\x17Dumont-d’Urville-tijd\x12Oost-Timorese tijd\x11Paaseilandse t" + + "ijd\x1aPaaseilandse standaardtijd\x16Paaseilandse zomertijd\x11Ecuadoraa" + + "nse tijd\x14Midden-Europese tijd\x1dMidden-Europese standaardtijd\x19Mid" + + "den-Europese zomertijd\x12Oost-Europese tijd\x1bOost-Europese standaardt" + + "ijd\x17Oost-Europese zomertijd\x1eVerder-oostelijk-Europese tijd\x12West" + + "-Europese tijd\x1bWest-Europese standaardtijd\x17West-Europese zomertijd" + + "\x15Falklandeilandse tijd\x1eFalklandeilandse standaardtijd\x1aFalklande" + + "ilandse zomertijd\x0dFijische tijd\x16Fijische standaardtijd\x12Fijische" + + " zomertijd\x13Frans-Guyaanse tijd&Franse zuidelijke en Antarctische tijd" + + "\x1fGalapagoseilandse standaardtijd\x14Gambiereilandse tijd\x0fGeorgisch" + + "e tijd\x18Georgische standaardtijd\x14Georgische zomertijd\x14Gilberteil" + + "andse tijd\x13Greenwich Mean Time\x15Oost-Groenlandse tijd\x1eOost-Groen" + + "landse standaardtijd\x1aOost-Groenlandse zomertijd\x15West-Groenlandse t" + + "ijd\x1eWest-Groenlandse standaardtijd\x1aWest-Groenlandse zomertijd\x15G" + + "uamese standaardtijd\x12Golf-standaardtijd\x0dGuyaanse tijd\x17Hawaii-Al" + + "eoetische tijd Hawaii-Aleoetische standaardtijd\x1cHawaii-Aleoetische zo" + + "mertijd\x0fHongkongse tijd\x18Hongkongse standaardtijd\x14Hongkongse zom" + + "ertijd\x09Hovd-tijd\x12Hovd-standaardtijd\x0eHovd-zomertijd\x0cIndiase t" + + "ijd\x14Indische Oceaan-tijd\x10Indochinese tijd\x1aCentraal-Indonesische" + + " tijd\x16Oost-Indonesische tijd\x16West-Indonesische tijd\x0cIraanse tij" + + "d\x15Iraanse standaardtijd\x11Iraanse zomertijd\x0dIrkoetsk-tijd\x16Irko" + + "etsk-standaardtijd\x12Irkoetsk-zomertijd\x11Israëlische tijd\x1aIsraëlis" + + "che standaardtijd\x16Israëlische zomertijd\x0cJapanse tijd\x15Japanse st" + + "andaardtijd\x11Japanse zomertijd\x1ePetropavlovsk-Kamtsjatski-tijd'Petro" + + "pavlovsk-Kamtsjatski-standaardtijd#Petropavlovsk-Kamtsjatski-zomertijd" + + "\x12Oost-Kazachse tijd\x12West-Kazachse tijd\x0eKoreaanse tijd\x17Koreaa" + + "nse standaardtijd\x13Koreaanse zomertijd\x0dKosraese tijd\x10Krasnojarsk" + + "-tijd\x19Krasnojarsk-standaardtijd\x15Krasnojarsk-zomertijd\x10Kirgizisc" + + "he tijd\x0aLanka-tijd\x12Line-eilandse tijd\x17Lord Howe-eilandse tijd L" + + "ord Howe-eilandse standaardtijd\x1cLord Howe-eilandse zomertijd\x0cMacau" + + "se tijd\x15Macause standaardtijd\x11Macause zomertijd\x17Macquarie-eilan" + + "dse tijd\x0cMagadan-tijd\x15Magadan-standaardtijd\x11Magadan-zomertijd" + + "\x10Maleisische tijd\x10Maldivische tijd\x16Marquesaseilandse tijd\x15Ma" + + "rshalleilandse tijd\x11Mauritiaanse tijd\x1aMauritiaanse standaardtijd" + + "\x16Mauritiaanse zomertijd\x0bMawson-tijd\x19Noordwest-Mexicaanse tijd\"" + + "Noordwest-Mexicaanse standaardtijd\x1eNoordwest-Mexicaanse zomertijd\x17" + + "Mexicaanse Pacific-tijd Mexicaanse Pacific-standaardtijd\x1cMexicaanse P" + + "acific-zomertijd\x10Ulaanbaatar-tijd\x19Ulaanbaatar-standaardtijd\x15Ula" + + "anbaatar-zomertijd\x0bMoskou-tijd\x14Moskou-standaardtijd\x10Moskou-zome" + + "rtijd\x0fMyanmarese tijd\x0fNauruaanse tijd\x0dNepalese tijd\x17Nieuw-Ca" + + "ledonische tijd Nieuw-Caledonische standaardtijd\x1cNieuw-Caledonische z" + + "omertijd\x14Nieuw-Zeelandse tijd\x1dNieuw-Zeelandse standaardtijd\x19Nie" + + "uw-Zeelandse zomertijd\x11Newfoundland-tijd\x1aNewfoundland-standaardtij" + + "d\x16Newfoundland-zomertijd\x0bNiuese tijd\x14Norfolkeilandse tijd\x18Fe" + + "rnando de Noronha-tijd!Fernando de Noronha-standaardtijd\x1dFernando de " + + "Noronha-zomertijd\x19Noordelijk Mariaanse tijd\x10Novosibirsk-tijd\x19No" + + "vosibirsk-standaardtijd\x15Novosibirsk-zomertijd\x09Omsk-tijd\x12Omsk-st" + + "andaardtijd\x0eOmsk-zomertijd\x10Pakistaanse tijd\x19Pakistaanse standaa" + + "rdtijd\x15Pakistaanse zomertijd\x0cBelause tijd\x1aPapoea-Nieuw-Guineese" + + " tijd\x12Paraguayaanse tijd\x1bParaguayaanse standaardtijd\x17Paraguayaa" + + "nse zomertijd\x0ePeruaanse tijd\x17Peruaanse standaardtijd\x13Peruaanse " + + "zomertijd\x0fFilipijnse tijd\x18Filipijnse standaardtijd\x14Filipijnse z" + + "omertijd\x14Phoenixeilandse tijd\x1dSaint Pierre en Miquelon-tijd&Saint " + + "Pierre en Miquelon-standaardtijd\"Saint Pierre en Miquelon-zomertijd\x15" + + "Pitcairneilandse tijd\x0cPohnpei-tijd\x0ePyongyang-tijd\x0eQyzylorda-tij" + + "d\x17Qyzylorda-standaardtijd\x13Qyzylorda-zomertijd\x0fRéunionse tijd" + + "\x0cRothera-tijd\x0dSachalin-tijd\x16Sachalin-standaardtijd\x12Sachalin-" + + "zomertijd\x0bSamara-tijd\x14Samara-standaardtijd\x10Samara-zomertijd\x0e" + + "Samoaanse tijd\x17Samoaanse standaardtijd\x13Samoaanse zomertijd\x0eSeyc" + + "helse tijd\x19Singaporese standaardtijd\x15Salomonseilandse tijd\x14Zuid" + + "-Georgische tijd\x0fSurinaamse tijd\x0aSyowa-tijd\x10Tahitiaanse tijd" + + "\x0bTaipei-tijd\x14Taipei-standaardtijd\x10Taipei-zomertijd\x0fTadzjieks" + + "e tijd\x15Tokelau-eilandse tijd\x0eTongaanse tijd\x17Tongaanse standaard" + + "tijd\x13Tongaanse zomertijd\x0cChuukse tijd\x0fTurkmeense tijd\x18Turkme" + + "ense standaardtijd\x14Turkmeense zomertijd\x10Tuvaluaanse tijd\x11Urugua" + + "yaanse tijd\x1aUruguayaanse standaardtijd\x16Uruguayaanse zomertijd\x0eO" + + "ezbeekse tijd\x17Oezbeekse standaardtijd\x13Oezbeekse zomertijd\x11Vanua" + + "tuaanse tijd\x1aVanuatuaanse standaardtijd\x16Vanuatuaanse zomertijd\x11" + + "Venezolaanse tijd\x10Vladivostok-tijd\x19Vladivostok-standaardtijd\x15Vl" + + "adivostok-zomertijd\x0eWolgograd-tijd\x17Wolgograd-standaardtijd\x13Wolg" + + "ograd-zomertijd\x0bVostok-tijd\x12Wake-eilandse tijd\x17Wallis en Futuna" + + "se tijd\x0dJakoetsk-tijd\x16Jakoetsk-standaardtijd\x12Jakoetsk-zomertijd" + + "\x14Jekaterinenburg-tijd\x1dJekaterinenburg-standaardtijd\x19Jekaterinen" + + "burg-zomertijd" + +var bucket82 string = "" + // Size: 8213 bytes + "\x03SRT\x03ng1\x03ng2\x03ng3\x03ng4\x03ng5\x03ng6\x03ng7\x03ng8\x03ng9" + + "\x04ng10\x04ng11\x04kris\x0fngwɛn matáhra\x0cngwɛn ńmba\x0cngwɛn ńlal" + + "\x0bngwɛn ńna\x0cngwɛn ńtan\x0dngwɛn ńtuó\x12ngwɛn hɛmbuɛrí\x0dngwɛn lɔm" + + "bi\x0fngwɛn rɛbvuâ\x0angwɛn wum\x11ngwɛn wum navǔr\x09krísimin\x0cTindɛ " + + "nvúr\x0cTindɛ ńmba\x0cTindɛ ńlal\x0bTindɛ ńna\x05maná\x05kugú\x0cBó Lahl" + + "ɛ̄\x0bPfiɛ Burī\x02BL\x02PB\x0dPīl/Lahlɛ̄\x04Mbvu\x06Ngwɛn\x04Duö\x07Na" + + "kugú\x04Dɔl\x08Namáná\x19Máná, Muó, Kugú, Bvul\x05Wulā\x07Mpálâ\x06Nyiɛl" + + "\x0dNkɛ̌l wulā\x04f.m.\x04e.m.\x13'kl'. HH:mm:ss zzzz\x13'kl'. HH.mm.ss " + + "zzzz\x11for {0} år sidan\x0eførre kvartal\x0fdette kvartalet\x0dneste kv" + + "artal\x15for {0} kvartal sidan\x11for {0} kv. sidan\x06månad\x0dførre må" + + "nad\x0edenne månaden\x0cneste månad\x0dom {0} månad\x0fom {0} månadar" + + "\x14for {0} månad sidan\x16for {0} månadar sidan\x11for {0} md. sidan" + + "\x0a–{0} md.\x04veke\x0bførre veke\x0adenne veka\x0aneste veke\x0bom {0}" + + " veke\x0com {0} veker\x12for {0} veke sidan\x13for {0} veker sidan\x15ve" + + "ka som inneheld {0}\x09om {0} v.\x10for {0} v. sidan\x0cveka med {0}\x07" + + "+{0} v.\x09–{0} v.\x09v. m. {0}\x0fveke i månaden\x0bveke i mnd.\x0aveke" + + " i md.\x0ai førgår\x06i går\x05i dag\x08i morgon\x0ci overmorgon\x13for " + + "{0} døgn sidan\x10for {0} d. sidan\x09–{0} d.\x07vekedag\x06veked.\x12ve" + + "kedag i månaden\x0dveked. i mnd.\x0cveked. i md.\x0dførre sundag\x06sund" + + "ag\x0cneste sundag\x0dom {0} sundag\x0fom {0} sundagar\x14for {0} sundag" + + " sidan\x16for {0} sundagar sidan\x0bførre sun.\x04sun.\x0aneste sun.\x0b" + + "om {0} sun.\x12for {0} sun. sidan\x0aførre su.\x03su.\x09neste su.\x0aom" + + " {0} su.\x11for {0} su. sidan\x0eførre måndag\x07måndag\x0dneste måndag" + + "\x0eom {0} måndag\x10om {0} måndagar\x15for {0} måndag sidan\x17for {0} " + + "måndagar sidan\x0cførre mån.\x05mån.\x0bneste mån.\x0com {0} mån.\x13for" + + " {0} mån. sidan\x0bom {0} må.\x12for {0} må. sidan\x0dførre tysdag\x06ty" + + "sdag\x0cneste tysdag\x0dom {0} tysdag\x0fom {0} tysdagar\x14for {0} tysd" + + "ag sidan\x16for {0} tysdagar sidan\x0bførre tys.\x04tys.\x0aneste tys." + + "\x0bom {0} tys.\x12for {0} tys. sidan\x0aførre ty.\x03ty.\x09neste ty." + + "\x0aom {0} ty.\x11for {0} ty. sidan\x0dførre onsdag\x06onsdag\x0cneste o" + + "nsdag\x14for {0} onsdag sidan\x16for {0} onsdagar sidan\x0bførre ons." + + "\x04ons.\x0aneste ons.\x12for {0} ons. sidan\x0aførre on.\x03on.\x09nest" + + "e on.\x11for {0} on. sidan\x0eførre torsdag\x07torsdag\x0dneste torsdag" + + "\x15for {0} torsdag sidan\x17for {0} torsdagar sidan\x0bførre tor.\x04to" + + "r.\x0aneste tor.\x12for {0} tor. sidan\x0aførre to.\x03to.\x09neste to." + + "\x11for {0} to. sidan\x0dførre fredag\x06fredag\x0cneste fredag\x14for {" + + "0} fredag sidan\x16for {0} fredagar sidan\x0bførre fre.\x04fre.\x0aneste" + + " fre.\x12for {0} fre. sidan\x0aførre fr.\x03fr.\x09neste fr.\x11for {0} " + + "fr. sidan\x0eførre laurdag\x07laurdag\x0dneste laurdag\x0eom {0} laurdag" + + "\x10om {0} laurdagar\x15for {0} laurdag sidan\x17for {0} laurdagar sidan" + + "\x0bførre lau.\x04lau.\x0aneste lau.\x0bom {0} lau.\x12for {0} lau. sida" + + "n\x13for {0}\u00a0lau. sidan\x0aførre la.\x03la.\x09neste la.\x0aom {0} " + + "la.\x11for {0} la. sidan\x09f.m./e.m.\x12for {0} time sidan\x13for {0} t" + + "imar sidan\x0ffor {0} t sidan\x08–{0} t\x14for {0} minutt sidan\x11for {" + + "0} min sidan\x0a–{0} min\x02no\x14for {0} sekund sidan\x0bom {0}\u00a0se" + + "k\x11for {0} sek sidan\x08–{0} s\x09–{0}\u00a0s\x10britisk sumartid\x0di" + + "rsk sumartid\x17vestafrikansk sommartid\x11alaskisk sumartid\x15sumartid" + + " for Amazonas\"sumartid for sentrale Nord-Amerika*sumartid for den norda" + + "merikansk austkysten\"sumartid for Rocky Mountains (USA)1sumartid for de" + + "n nordamerikanske stillehavskysten\x11sumartid for Apia\x10arabisk sumar" + + "tid\x13argentinsk sumartid\x17vestargentinsk sumartid\x10armensk sumarti" + + "d3sumartid for den nordamerikanske atlanterhavskysten\x1asentralaustrals" + + "k sommartid\x1fvest-sentralaustralsk sommartid\x17austaustralsk sommarti" + + "d\x17vestaustralsk sommartid\x17aserbajdsjansk sumartid\x10asorisk sumar" + + "tid\x16bangladeshisk sumartid\x15sumartid for Brasilia\x14kappverdisk su" + + "martid\x14sumartid for Chatham\x11chilensk sumartid\x11kinesisk sumartid" + + "\x18sumartid for Tsjojbalsan\x14kolombiansk sumartid\x17sumartid for Coo" + + "køyane\x10kubansk sumartid\x17sumartid for Påskeøya\x1asentraleuropeisk " + + "sommartid\x17austeuropeisk sommartid\x17vesteuropeisk sommartid\x1csumar" + + "tid for Falklandsøyane\x11fijiansk sumartid\x11georgisk sumartid\x18aust" + + "grønlandsk sumartid\x18vestgrønlandsk sumartid\x1fsumartid for Hawaii og" + + " Aleutene\x19hongkongkinesisk sumartid\x12sumartid for Khovd\x0firansk s" + + "umartid\x14sumartid for Irkutsk\x11israelsk sumartid\x10japansk sumartid" + + "\x11koreansk sumartid\x18sumartid for Krasnojarsk\x1bsumartid for Lord H" + + "owe-øya\x14sumartid for Magadan\x12mauritisk sumartid sumartid for nordv" + + "estlege Mexico-sumartid for den meksikanske stillehavskysten\x08sumartid" + + "\x13sumartid for Moskva\x12kaledonsk sumartid\x14nyzealandsk sumartid" + + "\x19sumartid for Newfoundland sumartid for Fernando de Noronha\x18sumart" + + "id for Novosibirsk\x11sumartid for Omsk\x13pakistansk sumartid\x15paragu" + + "ayansk sumartid\x11peruansk sumartid\x13filippinsk sumartid%sumartid for" + + " Saint-Pierre-et-Miquelon\x15sumartid for Sakhalin\x11samoansk sumartid" + + "\x13sumartid for Taipei\x11tongansk sumartid\x12turkmensk sumartid\x14ur" + + "uguayansk sumartid\x11usbekisk sumartid\x12vanuatisk sumartid\x18sumarti" + + "d for Vladivostok\x16sumartid for Volgograd\x14sumartid for Jakutsk\x1as" + + "umartid for Jekaterinburg\"EEEE , 'lyɛ'̌ʼ d 'na' MMMM, y G\x1b'lyɛ'̌ʼ d " + + "'na' MMMM, y G\x15saŋ tsetsɛ̀ɛ lùm\x11saŋ kàg ngwóŋ\x11saŋ lepyè shúm" + + "\x0asaŋ cÿó\x13saŋ tsɛ̀ɛ cÿó\x0fsaŋ njÿoláʼ\x1dsaŋ tyɛ̀b tyɛ̀b mbʉ̀ŋ\x0d" + + "saŋ mbʉ̀ŋ\x15saŋ ngwɔ̀ʼ mbÿɛ\x15saŋ tàŋa tsetsáʼ\x0esaŋ mejwoŋó\x09saŋ l" + + "ùm\x16lyɛʼɛ́ sẅíŋtè\x0emvfò lyɛ̌ʼ\x1bmbɔ́ɔntè mvfò lyɛ̌ʼ\x15tsètsɛ̀ɛ ly" + + "ɛ̌ʼ!mbɔ́ɔntè tsetsɛ̀ɛ lyɛ̌ʼ\x14mvfò màga lyɛ̌ʼ\x0emàga lyɛ̌ʼ\x0cmbaʼámb" + + "aʼ\x0ancwònzém\x0fmé zyé Yěsô\x16mé gÿo ńzyé Yěsô\x06m.z.Y.\x08m.g.n.Y. " + + "EEEE , 'lyɛ'̌ʼ d 'na' MMMM, y\x19'lyɛ'̌ʼ d 'na' MMMM, y\x0etsɔ́ fʉ̀ʼ\x06" + + "ngùʼ\x08lyɛ̌ʼ\x19jǔɔ gẅie à ka tɔ̌g\x0dlyɛ̌ʼɔɔn\x18jǔɔ gẅie à ne ntóo" + + "\x0cngàba láʼ\x0cfʉ̀ʼ nèm\x04Tiop\x04Pɛt\x0aDuɔ̱ɔ̱\x04Guak\x04Duä\x03Kor" + + "\x03Pay\x04Thoo\x05Tɛɛ\x03Laa\x03Kur\x03Tid\x0eTiop thar pɛt\x0cDuɔ̱ɔ̱ŋ" + + "\x05Duät\x08Kornyoot\x0cPay yie̱tni\x09Tho̱o̱r\x06Tɛɛr\x05Laath\x12Tio̱p" + + " in di̱i̱t\x05Cäŋ\x04Jiec\x04Rɛw\x07Diɔ̱k\x06Ŋuaan\x06Dhieec\x07Bäkɛl" + + "\x0cCäŋ kuɔth\x0aJiec la̱t\x0bRɛw lätni\x0eDiɔ̱k lätni\x0dŊuaan lätni" + + "\x0dDhieec lätni\x0eBäkɛl lätni\x15Päth diɔk tin nhiam\x16Päth diɔk tin " + + "guurɛ\x1ePäth diɔk tin wä kɔɔriɛn\x1bPäth diɔk tin jiɔakdiɛn\x02RW\x03TŊ" + + "\x13A ka̱n Yecu ni dap\x0eƐ ca Yecu dap\x0ezzzz h:mm:ss a\x0bz h:mm:ss a" + + "\x10Gua̱a̱th Ruëc\x07Ruɔ̱n\x05Jiɔk\x03Pan\x05Walɛ\x04Ruun\x0bNi̱n jokä" + + "\x05Thaak\x09Thɛkɛni\x0aEshaaha za\x03Ama\x03Gur\x03Bit\x03Elb\x03Cam" + + "\x03Wax\x03Ado\x03Hag\x03Ful\x03Onk\x03Sad\x03Mud\x07Amajjii\x0bGuraandh" + + "ala\x0bBitooteessa\x04Elba\x06Caamsa\x0aWaxabajjii\x0aAdooleessa\x07Haga" + + "yya\x08Fuulbana\x0cOnkololeessa\x07Sadaasa\x06Muddee\x03Dil\x03Wix\x03Qi" + + "b\x03Rob\x03Kam\x03Jim\x03San\x07Dilbata\x07Wiixata\x07Qibxata\x06Roobii" + + "\x07Kamiisa\x07Jimaata\x07Sanbata\x0aKurmaana 1\x0aKurmaana 2\x0aKurmaan" + + "a 3\x0aKurmaana 4\x02WD\x02WB\x10Dheengadda Jeesu\x02KD\x0e{1} ରେ {0}" + + "\x15ଜାନୁଆରୀ\x15ଫେବୃଆରୀ\x15ମାର୍ଚ୍ଚ\x12ଅପ୍ରେଲ\x06ମଇ\x09ଜୁନ\x0fଜୁଲାଇ\x0fଅଗଷ" + + "୍ଟ\x1eସେପ୍ଟେମ୍ବର\x15ଅକ୍ଟୋବର\x15ନଭେମ୍ବର\x18ଡିସେମ୍ବର\x06ଜା\x06ଫେ\x06ମା" + + "\x03ଅ\x06ଜୁ\x06ସେ\x03ନ\x06ଡି\x09ରବି\x09ସୋମ\x0fମଙ୍ଗଳ\x09ବୁଧ\x0cଗୁରୁ\x0fଶୁ" + + "କ୍ର\x09ଶନି\x03ର\x06ସୋ\x03ମ\x06ବୁ\x06ଗୁ\x06ଶୁ\x03ଶ\x12ରବିବାର\x12ସୋମବାର" + + "\x18ମଙ୍ଗଳବାର\x12ବୁଧବାର\x15ଗୁରୁବାର\x18ଶୁକ୍ରବାର\x12ଶନିବାର\x1a1ମ ତ୍ରୟମାସ" + + "\x1a2ୟ ତ୍ରୟମାସ\x1a3ୟ ତ୍ରୟମାସ 4ର୍ଥ ତ୍ରୟମାସ\x06ପୂ\x1bପୂର୍ବାହ୍ନ\x15ଅପରାହ୍ନ$" + + "ଖ୍ରୀଷ୍ଟପୂର୍ବ>ସାମ୍ପ୍ରତିକ ଯୁଗ ପୂର୍ବରୁ!ଖ୍ରୀଷ୍ଟାବ୍ଦ(ସାମ୍ପ୍ରତିକ ଯୁଗ\x14{0} " + + "ଠାରେ {1}\x09ଯୁଗ\x0cବର୍ଷ\x13ଗତ ବର୍ଷ\x16ଏହି ବର୍ଷ\x1cଆଗାମୀ ବର୍ଷ\x16{0} ବର" + + "୍ଷରେ#{0} ବର୍ଷ ପୂର୍ବେ\x04ବ.\x0f{0} ବ. ରେ\x1b{0} ବ. ପୂର୍ବେ\x15ତ୍ରୟମାସ" + + "\x1cଗତ ତ୍ରୟମାସ%ଆଗାମୀ ତ୍ରୟମାସ\x1f{0} ତ୍ରୟମାସରେ,{0} ତ୍ରୟମାସ ପୂର୍ବେ\x0dତ୍ରୟ" + + ".\x18{0} ତ୍ରୟ. ରେ${0} ତ୍ରୟ. ପୂର୍ବେ\x09ମାସ\x10ଗତ ମାସ\x13ଏହି ମାସ\x19ଆଗାମୀ " + + "ମାସ\x13{0} ମାସରେ {0} ମାସ ପୂର୍ବେ\x07ମା.\x12{0} ମା. ରେ\x1e{0} ମା. ପୂର୍ବେ" + + "\x12ସପ୍ତାହ\x19ଗତ ସପ୍ତାହ\x1cଏହି ସପ୍ତାହ\"ଆଗାମୀ ସପ୍ତାହ\x1c{0} ସପ୍ତାହରେ){0} " + + "ସପ୍ତାହ ପୂର୍ବେ\x1a{0} ର ସପ୍ତାହ\x04ସ.\x1b{0} ସପ୍ତା. ରେ'{0} ସପ୍ତା. ପୂର୍ବେ" + + "\x1fମାସର ସପ୍ତାହ\x10ମା. ର ସ.\x09ଦିନ\x12ଗତକାଲି\x09ଆଜି\x1eଆସନ୍ତାକାଲି\x13{0}" + + " ଦିନରେ {0} ଦିନ ପୂର୍ବେ\x0fom {0} månader\x03mu.\x03tu.\x03ve.\x04dö.\x04z" + + "ä." + +var bucket83 string = "" + // Size: 19942 bytes + "\x19ବର୍ଷର ଦିନ\x12ବ. ର ଦିନ\x12ସ. ର ଦିନ2ସାପ୍ତାହିକ ଦିନର ମାସ\x1cସା. ଦିନର ମା." + + "\x19ଗତ ରବିବାର\x1cଏହି ରବିବାର\"ଆଗାମୀ ରବିବାର\x1c{0} ରବିବାରରେ){0} ରବିବାର ପୂର" + + "୍ବେ\x11ଗତ ରବି.\x14ଏହି ରବି.\x1aଆଗାମୀ ରବି.\x15{0} ରବି. ରେ!{0} ରବି. ପୂର୍ବ" + + "େ\x19ଗତ ସୋମବାର\x1cଏହି ସୋମବାର%ଆସନ୍ତା ସୋମବାର\x1c{0} ସୋମବାରରେ){0} ସୋମବାର " + + "ପୂର୍ବେ\x11ଗତ ସୋମ.\x14ଏହି ସୋମ.\x1dଆସନ୍ତା ସୋମ.\x15{0} ସୋମ. ରେ!{0} ସୋମ. ପ" + + "ୂର୍ବେ\x0dଗତ ସୋ\x10ଏହି ସୋ\x19ଆସନ୍ତା ସୋ\x11{0} ସୋ ରେ\x1d{0} ସୋ ପୂର୍ବେ" + + "\x1fଗତ ମଙ୍ଗଳବାର\"ଏହି ମଙ୍ଗଳବାର(ଆଗାମୀ ମଙ୍ଗଳବାର\"{0} ମଙ୍ଗଳବାରରେ/{0} ମଙ୍ଗଳବା" + + "ର ପୂର୍ବେ\x17ଗତ ମଙ୍ଗଳ.\x1aଏହି ମଙ୍ଗଳ. ଆଗାମୀ ମଙ୍ଗଳ.\x1b{0} ମଙ୍ଗଳ. ରେ'{0} " + + "ମଙ୍ଗଳ. ପୂର୍ବେ\x19ଗତ ବୁଧବାର\x1cଏହି ବୁଧବାର%ଆସନ୍ତା ବୁଧବାର\x1c{0} ବୁଧବାରରେ" + + "){0} ବୁଧବାର ପୂର୍ବେ\x11ଗତ ବୁଧ.\x14ଏହି ବୁଧ.\x1dଆସନ୍ତା ବୁଧ.\x15{0} ବୁଧ. ରେ!" + + "{0} ବୁଧ. ପୂର୍ବେ\x10ଗତ ବୁଧ\x13ଏହି ବୁଧ\x1cଆସନ୍ତା ବୁଧ\x1cଗତ ଗୁରୁବାର\x1fଏହି " + + "ଗୁରୁବାର%ଆଗାମୀ ଗୁରୁବାର\x1f{0} ଗୁରୁବାରରେ,{0} ଗୁରୁବାର ପୂର୍ବେ\x14ଗତ ଗୁରୁ." + + "\x17ଏହି ଗୁରୁ.\x1dଆଗାମୀ ଗୁରୁ.\x18{0} ଗୁରୁ. ରେ${0} ଗୁରୁ. ପୂର୍ବେ\x1fଗତ ଶୁକ୍" + + "ରବାର\"ଏହି ଶୁକ୍ରବାର(ଆଗାମୀ ଶୁକ୍ରବାର\"{0} ଶୁକ୍ରବାରରେ/{0} ଶୁକ୍ରବାର ପୂର୍ବେ" + + "\x17ଗତ ଶୁକ୍ର.\x1aଏହି ଶୁକ୍ର. ଆଗାମୀ ଶୁକ୍ର.\x1b{0} ଶୁକ୍ର. ରେ'{0} ଶୁକ୍ର. ପୂର" + + "୍ବେ\x1e{0} ଶୁ. ପୂର୍ବେ\x19ଗତ ଶନିବାର\x1cଏହି ଶନିବାର\"ଆଗାମୀ ଶନିବାର\x1c{0} " + + "ଶନିବାରରେ){0} ଶନିବାର ପୂର୍ବେ\x11ଗତ ଶନି.\x14ଏହି ଶନି.\x1aଆଗାମୀ ଶନି.\x15{0}" + + " ଶନି. ରେ!{0} ଶନି. ପୂର୍ବେ1ପୂର୍ବାହ୍ନ/ଅପରାହ୍ନ\x0fଘଣ୍ଟା\x19ଏହି ଘଣ୍ଟା\x19{0} " + + "ଘଣ୍ଟାରେ&{0} ଘଣ୍ଟା ପୂର୍ବେ\x04ଘ.\x0f{0} ଘ. ରେ\x1b{0} ଘ. ପୂର୍ବେ\x12ମିନିଟ୍" + + "\x1cଏହି ମିନିଟ୍\"{0} ମିନିଟ୍\u200c\u200cରେ){0} ମିନିଟ୍ ପୂର୍ବେ\x07ମି.\x12{0}" + + " ମି. ରେ\x1e{0} ମି. ପୂର୍ବେ\x18ସେକେଣ୍ଡ୍\x1bବର୍ତ୍ତମାନ\x1f{0} ସେକେଣ୍ଡରେ,{0} " + + "ସେକେଣ୍ଡ ପୂର୍ବେ\x12{0} ସେ. ରେ\x1e{0} ସେ. ପୂର୍ବେ\x07ସେ.\x1fସମୟ କ୍ଷେତ୍ର" + + "\x15କ୍ଷେତ୍ର\x0d{0} ସମୟ#{0} ଦିବାଲୋକ ସମୟ#{0} ମାନାଙ୍କ ସମୟ;ସମନ୍ୱିତ ସାର୍ବଜନୀନ" + + " ସମୟ;ବ୍ରିଟିଶ୍\u200c ମାନାଙ୍କ ସମୟ5ଆଇରିଶ୍\u200c ମାନାଙ୍କ ସମୟ+ଆଫଗାନିସ୍ତାନ ସମୟ" + + ",ମଧ୍ୟ ଆଫ୍ରିକା ସମୟ/ପୂର୍ବ ଆଫ୍ରିକା ସମୟHଦକ୍ଷିଣ ଆଫ୍ରିକା ମାନାଙ୍କ ସମୟ2ପଶ୍ଚିମ ଆଫ" + + "୍ରିକା ସମୟHପଶ୍ଚିମ ଆଫ୍ରିକା ମାନାଙ୍କ ସମୟEପଶ୍ଚିମ ଆଫ୍ରିକା ଖରାଦିନ ସମୟ\x1fଆଲାସ" + + "୍କା ସମୟ5ଆଲାସ୍କା ମାନାଙ୍କ ସମୟ5ଆଲାସ୍କା ଦିବାଲୋକ ସମୟ\x1cଆମାଜାନ ସମୟ2ଆମାଜାନ ମ" + + "ାନାଙ୍କ ସମୟ;ଆମାଜାନ ଗ୍ରୀଷ୍ମକାଳ ସମୟ%କେନ୍ଦ୍ରୀୟ ସମୟ;କେନ୍ଦ୍ରୀୟ ମାନାଙ୍କ ସମୟ;କ" + + "େନ୍ଦ୍ରୀୟ ଦିବାଲୋକ ସମୟ(ପୂର୍ବାଞ୍ଚଳ ସମୟ>ପୂର୍ବାଞ୍ଚଳ ମାନାଙ୍କ ସମୟ>ପୂର୍ବାଞ୍ଚଳ " + + "ଦିବାଲୋକ ସମୟ\"ପାର୍ବତ୍ୟ ସମୟ8ପାର୍ବତ୍ୟ ମାନାଙ୍କ ସମୟ8ପାର୍ବତ୍ୟ ଦିବାଲୋକ ସମୟ\"ପ" + + "ାସିଫିକ୍ ସମୟ8ପାସିଫିକ୍ ମାନାଙ୍କ ସମୟ8ପାସିଫିକ୍ ଦିବାଲୋକ ସମୟ\x16ଆପିଆ ସମୟ,ଆପିଆ" + + " ମାନାଙ୍କ ସମୟ,ଆପିଆ ଦିବାଲୋକ ସମୟ\x19ଆରବୀୟ ସମୟ/ଆରବୀୟ ମାନାଙ୍କ ସମୟ/ଆରବୀୟ ଦିବାଲ" + + "ୋକ ସମୟ+ଆର୍ଜେଣ୍ଟିନା ସମୟAଆର୍ଜେଣ୍ଟିନା ମାନାଙ୍କ ସମୟJଆର୍ଜେଣ୍ଟିନା ଗ୍ରୀଷ୍ମକାଳ " + + "ସମୟ>ପଶ୍ଚିମ ଆର୍ଜେଣ୍ଟିନା ସମୟTପଶ୍ଚିମ ଆର୍ଜେଣ୍ଟିନା ମାନାଙ୍କ ସମୟ]ପଶ୍ଚିମ ଆର୍ଜେ" + + "ଣ୍ଟିନା ଗ୍ରୀଷ୍ମକାଳ ସମୟ\"ଆର୍ମେନିଆ ସମୟ8ଆର୍ମେନିଆ ମାନାଙ୍କ ସମୟ5ଆର୍ମେନିଆ ଖରାଦ" + + "ିନ ସମୟ(ଆଟଲାଣ୍ଟିକ୍ ସମୟ>ଆଟଲାଣ୍ଟିକ୍ ମାନାଙ୍କ ସମୟ>ଆଟଲାଣ୍ଟିକ୍ ଦିବାଲୋକ ସମୟ5ମଧ" + + "୍ୟ ଅଷ୍ଟ୍ରେଲିଆ ସମୟKଅଷ୍ଟ୍ରେଲିୟ ମଧ୍ୟ ମାନାଙ୍କ ସମୟKଅଷ୍ଟ୍ରେଲିୟ ମଧ୍ୟ ଦିବାଲୋକ " + + "ସମୟHଅଷ୍ଟ୍ରେଲିୟ ମଧ୍ୟ ପଶ୍ଚିମ ସମୟ^ଅଷ୍ଟ୍ରେଲିୟ ମଧ୍ୟ ପଶ୍ଚିମ ମାନାଙ୍କ ସମୟ^ଅଷ୍ଟ" + + "୍ରେଲିୟ ମଧ୍ୟ ପଶ୍ଚିମ ଦିବାଲୋକ ସମୟ8ପୂର୍ବ ଅଷ୍ଟ୍ରେଲିଆ ସମୟNଅଷ୍ଟ୍ରେଲିୟ ପୂର୍ବ ମ" + + "ାନାଙ୍କ ସମୟNଅଷ୍ଟ୍ରେଲିୟ ପୂର୍ବ ଦିବାଲୋକ ସମୟ;ପଶ୍ଚିମ ଅଷ୍ଟ୍ରେଲିଆ ସମୟQଅଷ୍ଟ୍ରେଲ" + + "ିୟ ପଶ୍ଚିମ ମାନାଙ୍କ ସମୟQଅଷ୍ଟ୍ରେଲିୟ ପଶ୍ଚିମ ଦିବାଲୋକ ସମୟ(ଆଜେରବାଇଜାନ ସମୟ;ଆଜେ" + + "ରବାଇଜାନ ମାନଙ୍କ ସମୟ;ଆଜେରବାଇଜାନ ଖରାଦିନ ସମୟ\x1fଆଜୋରେସ୍ ସମୟ5ଆଜୋରେସ୍ ମାନାଙ୍" + + "କ ସମୟ>ଆଜୋରେସ୍ ଗ୍ରୀଷ୍ମକାଳ ସମୟ\"ବାଂଲାଦେଶ ସମୟ8ବାଂଲାଦେଶ ମାନାଙ୍କ ସମୟAବାଂଲାଦ" + + "େଶ ଗ୍ରୀଷ୍ମକାଳ ସମୟ\x19ଭୁଟାନ ସମୟ\x1cବଲିଭିଆ ସମୟ%ବ୍ରାସିଲିଆ ସମୟ;ବ୍ରାସିଲିଆ ମ" + + "ାନାଙ୍କ ସମୟDବ୍ରାସିଲିଆ ଗ୍ରୀଷ୍ମକାଳ ସମୟ;ବ୍ରୁନେଇ ଡାରୁସାଲାମ ସମୟ)କେପ୍\u200c ଭ" + + "ର୍ଦେ ସମୟ?କେପ୍\u200c ଭର୍ଦେ ମାନାଙ୍କ ସମୟ<କେପ୍\u200c ଭର୍ଦେ ଖରାଦିନ ସମୟ2ଚାମୋ" + + "ରୋ ମାନାଙ୍କ ସମୟ\x1fଚାଥାମ୍\u200c ସମୟ5ଚାଥାମ୍\u200c ମାନାଙ୍କ ସମୟ5ଚାଥାମ୍" + + "\u200c ଦିବାଲୋକ ସମୟ\x16ଚିଲି ସମୟ,ଚିଲି ମାନାଙ୍କ ସମୟ5ଚିଲି ଗ୍ରୀଷ୍ମକାଳ ସମୟ\x13ଚ" + + "ୀନ ସମୟ)ଚୀନ ମାନାଙ୍କ ସମୟ)ଚୀନ ଦିବାଲୋକ ସମୟ%ଚୋଇବାଲସାନ ସମୟ;ଚୋଇବାଲସାନ ମାନାଙ୍କ" + + " ସମୟDଚୋଇବାଲସାନ ଗ୍ରୀଷ୍ମକାଳ ସମୟ8ଖ୍ରୀଷ୍ଟମାସ ଦ୍ୱୀପ ସମୟ>କୋକୋସ୍\u200c ଦ୍ୱୀପପୁଞ" + + "୍ଜ ସମୟ\x1fକଲମ୍ବିଆ ସମୟ5କଲମ୍ବିଆ ମାନାଙ୍କ ସମୟ>କଲମ୍ବିଆ ଗ୍ରୀଷ୍ମକାଳ ସମୟ8କୁକ୍" + + "\u200c ଦ୍ୱୀପପୁଞ୍ଜ ସମୟNକୁକ୍\u200c ଦ୍ୱୀପପୁଞ୍ଜ ମାନାଙ୍କ ସମୟaକୁକ୍\u200c ଦ୍ୱୀପ" + + "ପୁଞ୍ଜ ଅଧା ଗ୍ରୀଷ୍ମକାଳ ସମୟ\x1cକ୍ୟୁବା ସମୟ2କ୍ୟୁବା ମାନାଙ୍କ ସମୟ2କ୍ୟୁବା ଦିବାଲ" + + "ୋକ ସମୟ\x1fଡେଭିସ୍\u200c ସମୟAଡୁମୋଣ୍ଟ-ଡି‘ଉରଭିଲ୍ଲେ ସମୟ/ପୂର୍ବ ତିମୋର୍\u200c " + + "ସମୟ;ଇଷ୍ଟର୍\u200c ଆଇଲ୍ୟାଣ୍ଡ ସମୟQଇଷ୍ଟର୍\u200c ଆଇଲ୍ୟାଣ୍ଡ ମାନାଙ୍କ ସମୟZଇଷ୍ଟ" + + "ର୍\u200c ଆଇଲ୍ୟାଣ୍ଡ ଗ୍ରୀଷ୍ମକାଳ ସମୟ\x1fଇକ୍ୱେଡର ସମୟ;କେନ୍ଦ୍ରୀୟ ୟୁରୋପୀୟ ସମୟ" + + "Qକେନ୍ଦ୍ରୀୟ ୟୁରୋପୀୟ ମାନାଙ୍କ ସମୟZକେନ୍ଦ୍ରୀୟ ୟୁରୋପୀୟ ଗ୍ରୀଷ୍ମକାଳ ସମୟ>ପୂର୍ବାଞ୍" + + "ଚଳ ୟୁରୋପୀୟ ସମୟTପୂର୍ବାଞ୍ଚଳ ୟୁରୋପୀୟ ମାନାଙ୍କ ସମୟ]ପୂର୍ବାଞ୍ଚଳ ୟୁରୋପୀୟ ଗ୍ରୀଷ" + + "୍ମକାଳ ସମୟZପରବର୍ତ୍ତୀ-ପୂର୍ବାଞ୍ଚଳ ୟୁରୋପୀୟ ସମୟAପଶ୍ଚିମାଞ୍ଚଳ ୟୁରୋପୀୟ ସମୟWପଶ୍" + + "ଚିମାଞ୍ଚଳ ୟୁରୋପୀୟ ମାନାଙ୍କ ସମୟ`ପଶ୍ଚିମାଞ୍ଚଳ ୟୁରୋପୀୟ ଗ୍ରୀଷ୍ମକାଳ ସମୟDଫକଲ୍ୟା" + + "ଣ୍ଡ ଦ୍ୱୀପପୁଞ୍ଜ ସମୟZଫକଲ୍ୟାଣ୍ଡ ଦ୍ୱୀପପୁଞ୍ଜ ମାନାଙ୍କ ସମୟcଫକଲ୍ୟାଣ୍ଡ ଦ୍ୱୀପପୁଞ" + + "୍ଜ ଗ୍ରୀଷ୍ମକାଳ ସମୟ\x16ଫିଜି ସମୟ,ଫିଜି ମାନାଙ୍କ ସମୟ5ଫିଜି ଗ୍ରୀଷ୍ମକାଳ ସମୟ/ଫ୍ର" + + "େଞ୍ଚ ଗୁଆନା ସମୟgଫ୍ରେଞ୍ଚ ଦକ୍ଷିଣ ଏବଂ ଆଣ୍ଟାର୍କାଟିକ୍\u200c ସମୟ(ଗାଲାପାଗୋସ୍ ସ" + + "ମୟ%ଗାମ୍ବିୟର୍ ସମୟ\x1cଜର୍ଜିଆ ସମୟ2ଜର୍ଜିଆ ମାନାଙ୍କ ସମୟ/ଜର୍ଜିଆ ଖରାଦିନ ସମୟDଗି" + + "ଲବର୍ଟ୍\u200c ଦ୍ୱୀପପୁଞ୍ଜ ସମୟ2ଗ୍ରୀନୱିଚ୍ ମିନ୍ ସମୟAପୂର୍ବ ଗ୍ରୀନଲ୍ୟାଣ୍ଡ୍ ସମୟ" + + "Wପୂର୍ବ ଗ୍ରୀନଲ୍ୟାଣ୍ଡ୍ ମାନାଙ୍କ ସମୟ`ପୂର୍ବ ଗ୍ରୀନଲ୍ୟାଣ୍ଡ୍ ଗ୍ରୀଷ୍ମକାଳ ସମୟDପଶ୍ଚ" + + "ିମ ଗ୍ରୀନଲ୍ୟାଣ୍ଡ୍ ସମୟZପଶ୍ଚିମ ଗ୍ରୀନଲ୍ୟାଣ୍ଡ୍ ମାନାଙ୍କ ସମୟZପଶ୍ଚିମ ଗ୍ରୀନଲ୍ୟା" + + "ଣ୍ଡ୍ ଗ୍ରୀଷ୍ମ ସମୟ,ଗଲ୍ଫ ମାନାଙ୍କ ସମୟ\x19ଗୁଏନା ସମୟ,ହୱାଇ-ଆଲେଉଟିୟ ସମୟBହୱାଇ-ଆ" + + "ଲେଉଟିୟ ମାନାଙ୍କ ସମୟBହୱାଇ-ଆଲେଉଟିୟ ଦିବାଲୋକ ସମୟ\x17ହଂ କଂ ସମୟ-ହଂ କଂ ମାନାଙ୍କ" + + " ସମୟ6ହଂ କଂ ଗ୍ରୀଷ୍ମକାଳ ସମୟ\x1cହୋଭଡ୍\u200c ସମୟ2ହୋଭଡ୍\u200c ମାନାଙ୍କ ସମୟ;ହୋଭ" + + "ଡ୍\u200c ଗ୍ରୀଷ୍ମକାଳ ସମୟ,ଭାରତ ମାନାଙ୍କ ସମୟ/ଭାରତ ମାହାସାଗର ସମୟ(ଇଣ୍ଡୋଚାଇନା " + + "ସମୟ5ମଧ୍ୟ ଇଣ୍ଡୋନେସିଆ ସମୟ8ପୂର୍ବ ଇଣ୍ଡୋନେସିଆ ସମୟ;ପଶ୍ଚିମ ଇଣ୍ଡୋନେସିଆ ସମୟ\x16" + + "ଇରାନ ସମୟ,ଇରାନ ମାନାଙ୍କ ସମୟ,ଇରାନ ଦିବାଲୋକ ସମୟ%ଇଅରକୁଟସ୍କ ସମୟ;ଇଅରକୁଟସ୍କ ମାନ" + + "ାଙ୍କ ସମୟDଇଅରକୁଟସ୍କ ଗ୍ରୀଷ୍ମକାଳ ସମୟ\x1fଇସ୍ରାଏଲ ସମୟ5ଇସ୍ରାଏଲ ମାନାଙ୍କ ସମୟ5ଇ" + + "ସ୍ରାଏଲ ଦିବାଲୋକ ସମୟ\x19ଜାପାନ ସମୟ/ଜାପାନ ମାନାଙ୍କ ସମୟ/ଜାପାନ ଦିବାଲୋକ ସମୟ(କା" + + "ଜାକସ୍ତାନ ସମୟ;ପଶ୍ଚିମ କାଜାକସ୍ତାନ ସମୟ\x19କୋରିୟ ସମୟ/କୋରିୟ ମାନାଙ୍କ ସମୟ/କୋରି" + + "ୟ ଦିବାଲୋକ ସମୟ\x1cକୋସରେଇ ସମୟ1କ୍ରାସନୋୟାରସ୍କ ସମୟGକ୍ରାସନୋୟାରସ୍କ ମାନାଙ୍କ ସମ" + + "ୟPକ୍ରାସନୋୟାରସ୍କ ଗ୍ରୀଷ୍ମକାଳ ସମୟ+କିର୍ଗିସ୍ତାନ ସମୟ;ଲାଇନ୍\u200c ଦ୍ୱୀପପୁଞ୍ଜ " + + "ସମୟ#ଲର୍ଡ ହୋୱେ ସମୟ9ଲର୍ଡ ହୋୱେ ମାନାଙ୍କ ସମୟ9ଲର୍ଡ ହୋୱେ ଦିବାଲୋକ ସମୟ2ମାକ୍ୱେରୀ" + + " ଦ୍ୱୀପ ସମୟ\"ମାଗାଡାନ୍ ସମୟ8ମାଗାଡାନ୍ ମାନାଙ୍କ ସମୟAମାଗାଡାନ୍ ଗ୍ରୀଷ୍ମକାଳ ସମୟ" + + "\x1fମାଲେସିଆ ସମୟ\"ମାଳଦ୍ୱୀପ ସମୟ1ମାର୍କ୍ୱେସାସ୍\u200c ସମୟDମାର୍ଶାଲ୍\u200c ଦ୍ୱୀ" + + "ପପୁଞ୍ଜ ସମୟ\"ମୌରିସସ୍\u200c ସମୟ8ମୌରିସସ୍\u200c ମାନାଙ୍କ ସମୟ5ମୌରିସସ୍\u200c " + + "ଖରାଦିନ ସମୟ\x1fମାୱସନ୍\u200c ସମୟDଉତ୍ତରପଶ୍ଚିମ ମେକ୍ସିକୋ ସମୟZଉତ୍ତରପଶ୍ଚିମ ମେ" + + "କ୍ସିକୋ ମାନାଙ୍କ ସମୟZଉତ୍ତରପଶ୍ଚିମ ମେକ୍ସିକୋ ଦିବାଲୋକ ସମୟ;ମେକ୍ସିକୋ ପାସିଫିକ୍ " + + "ସମୟQମେକ୍ସିକୋ ପାସିଫିକ୍ ମାନାଙ୍କ ସମୟQମେକ୍ସିକୋ ପାସିଫିକ୍ ଦିବାଲୋକ ସମୟ,ଉଲାନ୍ " + + "ବାଟର୍\u200c ସମୟEଉଲାନ୍\u200c ବାଟର୍\u200c ମାନାଙ୍କ ସମୟNଉଲାନ୍\u200c ବାଟର୍" + + "\u200c ଗ୍ରୀଷ୍ମକାଳ ସମୟ\x19ମସ୍କୋ ସମୟ/ମସ୍କୋ ମାନାଙ୍କ ସମୟ8ମସ୍କୋ ଗ୍ରୀଷ୍ମକାଳ ସମ" + + "ୟ%ମିଆଁମାର୍\u200c ସମୟ\x19ନାଉରୁ ସମୟ\x19ନେପାଳ ସମୟ2ନ୍ୟୁ କାଲେଡୋନିଆ ସମୟHନ୍ୟୁ" + + " କାଲେଡୋନିଆ ମାନାଙ୍କ ସମୟQନ୍ୟୁ କାଲେଡୋନିଆ ଗ୍ରୀଷ୍ମକାଳ ସମୟ+ନ୍ୟୁଜିଲାଣ୍ଡ ସମୟAନ୍ୟ" + + "ୁଜିଲାଣ୍ଡ ମାନାଙ୍କ ସମୟAନ୍ୟୁଜିଲାଣ୍ଡ ଦିବାଲୋକ ସମୟ@ନ୍ୟୁଫାଉଣ୍ଡଲ୍ୟାଣ୍ଡ୍ ସମୟVନ୍" + + "ୟୁଫାଉଣ୍ଡଲ୍ୟାଣ୍ଡ୍ ମାନାଙ୍କ ସମୟVନ୍ୟୁଫାଉଣ୍ଡଲ୍ୟାଣ୍ଡ୍ ଦିବାଲୋକ ସମୟ\x16ନିୟୁ ସମ" + + "ୟ/ନରଫୋକ୍\u200c ଦ୍ୱୀପ ସମୟKଫର୍ଣ୍ଣାଣ୍ଡୋ ଡି ନୋରୋନ୍ନା ସମୟaଫର୍ଣ୍ଣାଣ୍ଡୋ ଡି ନୋ" + + "ରୋନ୍ନା ମାନାଙ୍କ ସମୟjଫର୍ଣ୍ଣାଣ୍ଡୋ ଡି ନୋରୋନ୍ନା ଗ୍ରୀଷ୍ମକାଳ ସମୟ.ନୋଭୋସିବିରସ୍କ" + + " ସମୟDନୋଭୋସିବିରସ୍କ ମାନାଙ୍କ ସମୟMନୋଭୋସିବିରସ୍କ ଗ୍ରୀଷ୍ମକାଳ ସମୟ\x19ଓମସ୍କ ସମୟ/ଓ" + + "ମସ୍କ ମାନାଙ୍କ ସମୟ8ଓମସ୍କ ଗ୍ରୀଷ୍ମକାଳ ସମୟ%ପାକିସ୍ତାନ ସମୟ;ପାକିସ୍ତାନ ମାନାଙ୍କ " + + "ସମୟDପାକିସ୍ତାନ ଗ୍ରୀଷ୍ମକାଳ ସମୟ\x19ପାଲାଉ ସମୟ3ପପୁଆ ନ୍ୟୁ ଗୁନିଆ ସମୟ\x1fପାରାଗ" + + "ୁଏ ସମୟ5ପାରାଗୁଏ ମାନାଙ୍କ ସମୟ>ପାରାଗୁଏ ଗ୍ରୀଷ୍ମକାଳ ସମୟ\x16ପେରୁ ସମୟ,ପେରୁ ମାନ" + + "ାଙ୍କ ସମୟ5ପେରୁ ଗ୍ରୀଷ୍ମକାଳ ସମୟ(ଫିଲିପାଇନ୍\u200c ସମୟ>ଫିଲିପାଇନ୍\u200c ମାନାଙ" + + "୍କ ସମୟGଫିଲିପାଇନ୍\u200c ଗ୍ରୀଷ୍ମକାଳ ସମୟ>ଫୋନିକ୍ସ ଦ୍ୱୀପପୁଞ୍ଜ ସମୟSସେଣ୍ଟ. ପି" + + "ଏରେ ଏବଂ ମିକ୍ୟୁଲୋନ୍ ସମୟiସେଣ୍ଟ. ପିଏରେ ଏବଂ ମିକ୍ୟୁଲୋନ୍ ମାନାଙ୍କ ସମୟiସେଣ୍ଟ. " + + "ପିଏରେ ଏବଂ ମିକ୍ୟୁଲୋନ୍ ଦିବାଲୋକ ସମୟ(ପିଟକାରିନ୍\u200c ସମୟ\x1cପୋନାପେ ସମୟ+ପୋୟ" + + "ଙ୍ଗୟାଙ୍ଗ ସମୟ(ରିୟୁନିଅନ୍\u200c ସମୟ\x1cରୋଥେରା ସମୟ\x1fସଖାଲିନ୍ ସମୟ5ସଖାଲିନ୍ " + + "ମାନାଙ୍କ ସମୟ>ସଖାଲିନ୍ ଗ୍ରୀଷ୍ମକାଳ ସମୟ\x19ସାମୋଆ ସମୟ/ସାମୋଆ ମାନାଙ୍କ ସମୟ/ସାମୋ" + + "ଆ ଦିବାଲୋକ ସମୟ+ସେଚେଲ୍ଲେସ୍\u200c ସମୟAସିଙ୍ଗାପୁର୍\u200c ମାନାଙ୍କ ସମୟ;ସୋଲୋମନ" + + " ଦ୍ୱୀପପୁଞ୍ଜ ସମୟ/ଦକ୍ଷିଣ ଜର୍ଜିଆ ସମୟ%ସୁରିନେମ୍\u200c ସମୟ\x16ସୋୱା ସମୟ\x1cତାହି" + + "ତି ସମୟ\x1cତାଇପେଇ ସମୟ2ତାଇପେଇ ମାନାଙ୍କ ସମୟ2ତାଇପେଇ ଦିବାଲୋକ ସମୟ+ତାଜିକିସ୍ତାନ" + + " ସମୟ\x1fଟୋକେଲାଉ ସମୟ\x1cଟୋଙ୍ଗା ସମୟ2ଟୋଙ୍ଗା ମାନାଙ୍କ ସମୟ;ଟୋଙ୍ଗା ଗ୍ରୀଷ୍ମକାଳ ସ" + + "ମୟ\x19ଚୂକ୍\u200c ସମୟ4ତୁର୍କମେନିସ୍ତାନ ସମୟJତୁର୍କମେନିସ୍ତାନ ମାନାଙ୍କ ସମୟGତୁର" + + "୍କମେନିସ୍ତାନ ଖରାଦିନ ସମୟ\x1cତୁଭାଲୁ ସମୟ\x1cଉରୁଗୁଏ ସମୟ2ଉରୁଗୁଏ ମାନାଙ୍କ ସମୟ;" + + "ଉରୁଗୁଏ ଗ୍ରୀଷ୍ମକାଳ ସମୟ+ଉଜବେକିସ୍ତାନ ସମୟAଉଜବେକିସ୍ତାନ ମାନାଙ୍କ ସମୟ>ଉଜବେକିସ୍" + + "ତାନ ଖରାଦିନ ସମୟ\x1fଭାନୁଆଟୁ ସମୟ5ଭାନୁଆଟୁ ମାନାଙ୍କ ସମୟ2ଭାନୁଆଟୁ ଖରାଦିନ ସମୟ%ଭ" + + "େନିଜୁଏଲା ସମୟ4ଭ୍ଲାଡିଭୋଷ୍ଟୋକ୍ ସମୟJଭ୍ଲାଡିଭୋଷ୍ଟୋକ୍ ମାନାଙ୍କ ସମୟSଭ୍ଲାଡିଭୋଷ୍ଟ" + + "ୋକ୍ ଗ୍ରୀଷ୍ମକାଳ ସମୟ+ଭୋଲଗୋଗ୍ରାଡ୍ ସମୟAଭୋଲଗୋଗ୍ରାଡ୍ ମାନାଙ୍କ ସମୟJଭୋଲଗୋଗ୍ରାଡ୍" + + " ଗ୍ରୀଷ୍ମକାଳ ସମୟ%ଭୋଷ୍ଟୋକ୍\u200c ସମୟ)ୱେକ୍\u200c ଦ୍ୱୀପ ସମୟ<ୱାଲିସ୍\u200c ଏବଂ" + + " ଫୁଟୁନା ସମୟ\"ୟାକୁଟସ୍କ ସମୟ8ୟାକୁଟସ୍କ ମାନାଙ୍କ ସମୟAୟାକୁଟସ୍କ ଗ୍ରୀଷ୍ମକାଳ ସମୟ4ୟ" + + "େକାଟେରିନବର୍ଗ୍ ସମୟJୟେକାଟେରିନବର୍ଗ୍ ମାନାଙ୍କ ସମୟSୟେକାଟେରିନବର୍ଗ୍ ଗ୍ରୀଷ୍ମକାଳ" + + " ସମୟ" + +var bucket84 string = "" + // Size: 8217 bytes + "\x18EEEE, d MMMM, y 'аз' G\x12d MMMM, y 'аз' G\x11dd MMM y 'аз' G\x0cянв" + + "ары\x0eфевралы\x10мартъийы\x0cапрелы\x08майы\x08июны\x08июлы\x0eавгусты" + + "\x10сентябры\x0eоктябры\x0cноябры\x0eдекабры\x07Янв.\x09Февр.\x09Март." + + "\x07Апр.\x06Май\x08Июнь\x08Июль\x07Авг.\x09Сент.\x07Окт.\x09Нояб.\x07Дек" + + ".\x06хцб\x06крс\x06дцг\x06ӕрт\x06цпр\x06мрб\x06сбт\x02Х\x02К\x02Д\x02Ӕ" + + "\x02Ц\x02М\x02С\x12хуыцаубон\x12къуырисӕр\x0cдыццӕг\x10ӕртыццӕг\x10цыппӕ" + + "рӕм\x12майрӕмбон\x0aсабат\x06Хцб\x06Крс\x06Дцг\x06Ӕрт\x06Цпр\x06Мрб\x06" + + "Сбт\x12Хуыцаубон\x12Къуырисӕр\x0cДыццӕг\x10Ӕртыццӕг\x10Цыппӕрӕм\x12Майр" + + "ӕмбон\x0aСабат\x0c1-аг кв.\x0c2-аг кв.\x0c3-аг кв.\x0c4-ӕм кв.\x151-аг " + + "квартал\x152-аг квартал\x153-аг квартал\x154-ӕм квартал\x1dӕмбисбоны ра" + + "змӕ\x1dӕмбисбоны фӕстӕ\x09н.д.а.\x06н.д.\x16EEEE, d MMMM, y 'аз'\x10d M" + + "MMM, y 'аз'\x0fdd MMM y 'аз'\x06Дуг\x04Аз\x06Мӕй\x0cКъуыри\x06Бон\x12Ӕнд" + + "ӕрӕбон\x08Знон\x08Абон\x06Сом\x0eИннӕбон\x17{0} боны фӕстӕ\x17{0} бон р" + + "аздӕр\x17{0} боны размӕ\x17Къуырийы бон\x15Боны период\x0aСахат\x1b{0} " + + "сахаты фӕстӕ\x1b{0} сахаты размӕ\x0aМинут\x0cСекунд\x19Рӕстӕджы зонӕ" + + "\x10{0} рӕстӕг2Астӕуккаг Европӕйаг рӕстӕгGАстӕуккаг Европӕйаг стандартон" + + " рӕстӕгCАстӕуккаг Европӕйаг сӕрдыгон рӕстӕг,Скӕсӕн Европӕйаг рӕстӕгAСкӕс" + + "ӕн Европӕйаг стандартон рӕстӕг=Скӕсӕн Европӕйаг сӕрдыгон рӕстӕг2Ныгъуыл" + + "ӕн Европӕйаг рӕстӕгGНыгъуылӕн Европӕйаг стандартон рӕстӕгCНыгъуылӕн Евр" + + "опӕйаг сӕрдыгон рӕстӕг%Гуырдзыстоны рӕстӕг:Гуырдзыстоны стандартон рӕст" + + "ӕг6Гуырдзыстоны сӕрдыгон рӕстӕг0Гринвичы рӕстӕмбис рӕстӕг\x1dМӕскуыйы р" + + "ӕстӕг2Мӕскуыйы стандартон рӕстӕг.Мӕскуыйы сӕрдыгон рӕстӕг\x19ਈਸਵੀ ਪੂਰਵ" + + "\x0cਈ. ਪੂ.\x14{0} ਵਿਖੇ {1}\x0cਟੋਉਟ\x0cਬਾਬਾ\x0cਹੇਟਰ\x0cਕੀਅਕ\x0cਤੋਬਾ\x12ਅਮ" + + "ਸ਼ੀਰ\x15ਬ੍ਰਾਮਹਟ\x18ਬਾਰਾਮੂਡਾ\x12ਬਾਸ਼ਨਸ\x0fਪਾਓਨਾ\x0cਅਪੈਪ\x0fਮੈਸਰਾ\x0fਨੇਜ" + + "਼ੀ\x0aਕਾਲ0\x0aਕਾਲ1\x18ਮੇਸਕੇਰੇਮ\x12ਟੇਕੇਮਟ\x0cਹੈਡਰ\x0fਤਾਹਸਸ\x06ਟਰ\x12ਯਕੇ" + + "ਟਿਤ\x15ਮੇਗਾਬਿਟ\x12ਮਿਆਜਿਆ\x12ਜੇਨਬੋਟ\x09ਸੀਨ\x0cਹਮਲੇ\x12ਨੇਹਾਸੇ\x15ਪਾਗੂਮੇਨ" + + "\x07Pagumen\x06ਜਨ\x09ਫ਼ਰ\x0cਮਾਰਚ\x0fਅਪ੍ਰੈ\x06ਮਈ\x09ਜੂਨ\x0cਜੁਲਾ\x06ਅਗ\x09" + + "ਸਤੰ\x0cਅਕਤੂ\x09ਨਵੰ\x09ਦਸੰ\x03ਜ\x06ਫ਼\x06ਮਾ\x03ਅ\x03ਮ\x06ਜੂ\x06ਜੁ\x03ਸ" + + "\x03ਨ\x03ਦ\x0fਜਨਵਰੀ\x12ਫ਼ਰਵਰੀ\x12ਅਪ੍ਰੈਲ\x0fਜੁਲਾਈ\x0cਅਗਸਤ\x0fਸਤੰਬਰ\x12ਅਕਤ" + + "ੂਬਰ\x0fਨਵੰਬਰ\x0fਦਸੰਬਰ\x06ਐਤ\x09ਸੋਮ\x0cਮੰਗਲ\x0cਬੁੱਧ\x09ਵੀਰ\x12ਸ਼ੁੱਕਰ" + + "\x15ਸ਼ਨਿੱਚਰ\x03ਐ\x06ਸੋ\x06ਮੰ\x09ਬੁੱ\x06ਵੀ\x0cਸ਼ੁੱ\x06ਸ਼\x09ਮੰਗ\x0fਸ਼ੁੱਕ" + + "\x0fਸ਼ਨਿੱ\x0fਐਤਵਾਰ\x12ਸੋਮਵਾਰ\x15ਮੰਗਲਵਾਰ\x15ਬੁੱਧਵਾਰ\x12ਵੀਰਵਾਰ\x1bਸ਼ੁੱਕਰਵਾ" + + "ਰ\x1eਸ਼ਨਿੱਚਰਵਾਰ\x13ਤਿਮਾਹੀ1\x13ਤਿਮਾਹੀ2\x13ਤਿਮਾਹੀ3\x13ਤਿਮਾਹੀ4\"ਪਹਿਲੀ ਤਿਮ" + + "ਾਹੀ\x1fਦੂਜੀ ਤਿਮਾਹੀ\x1fਤੀਜੀ ਤਿਮਾਹੀ\x1fਚੌਥੀ ਤਿਮਾਹੀ\x16ਅੱਧੀ ਰਾਤ\x0eਪੂ.ਦੁ." + + "\x0eਬਾ.ਦੁ.\x0fਸਵੇਰੇ\x15ਦੁਪਹਿਰੇ\x12ਸ਼ਾਮੀਂ\x0fਰਾਤੀਂ\x04ਸ.\x07ਸ਼.\x0cਸ਼ਾਮ" + + "\x09ਰਾਤ&ਈਸਵੀ ਪੂਰਵ ਯੁੱਗ\x16ਈਸਵੀ ਸੰਨ\x19ਈਸਵੀ ਯੁੱਗ\x14ਈ. ਪੂ. ਸੰ.\x09ਸੰਨ\x0c" + + "ਈ. ਸੰ.\x0bਈ.ਪੂ.\x12ਈ.ਪੂ.ਸੰ.\x0bਈ.ਸੰ.\x12ਤਿਸ਼ਰੀ\x12ਹੇਸ਼ਵਨ\x12ਕਿਸਲੇਵ\x0c" + + "ਟੇਵਟ\x0fਸ਼ੇਵਟ\x0bਅਦਰ I\x09ਅਦਰ\x0cਅਦਰ II\x0fਨਿਸਾਨ\x0cਅਇਯਰ\x0fਸਿਵਾਨ\x12ਤ" + + "ਾਮੁਜ਼\x06ਅਵ\x0cਏਲੁਲ\x02Av\x04Elul\x09ਚੇਤ\x0fਵੈਸਾਖ\x09ਜੇਠ\x09ਹਾੜ\x0cਸਾਉ" + + "ਣ\x0fਭਾਦੋਂ\x0cਅੱਸੂ\x0cਕੱਤਕ\x0cਮੱਘਰ\x09ਪੋਹ\x09ਮਾਘ\x0cਫੱਗਣ\x03੧\x03੨\x03" + + "੩\x03੪\x03੫\x03੬\x03੭\x03੮\x03੯\x06੧੦\x06੧੧\x06੧੨\x0cਸਾਕਾ\x0dਮੁਹੱ.\x07" + + "ਸਫ.\x09ਰਬ. I\x0aਰਬ. II\x0cਜੁਮ. I\x0dਜੁਮ. II\x0aਰਾਜ.\x0aਸ਼ਾ.\x0aਰਾਮ." + + "\x0aਸ਼ਅ.\x15ਦੂ-ਅਲ-ਕੀ.\x15ਦੂ-ਅਲ-ਹਿ.\x12ਮੁਹੱਰਮ\x09ਸਫਰ\x0eਰਬੀ ʻ I\x0fਰਬੀ ʻ " + + "II\x14ਜੁਮਾਦਾ I\x15ਜੁਮਾਦਾ II\x09ਰਜਬ\x0fਸ਼ਬਾਨ\x12ਰਮਜ਼ਾਨ\x0fਸ਼ਵਾਲ\x1dਦੂ-ਅਲ-" + + "ਕੀਦਾਹ ਦੂ-ਅਲ-ਹਿਜ੍ਹਾ\x0dਰਬੀʻ I\x0eਰਬੀʻ II\x18ਫਾਰਵਰਡੀਨ!ਔਰਡਾਈਬਹੈਸ਼ਟ\x0fਖੋਡ" + + "ਰਡ\x09ਟਿਰ\x12ਮੋਰਡਾਦ\x15ਸ਼ਰਾਇਵਰ\x0cਮੇਹਰ\x0cਅਬਾਨ\x0fਅਜ਼ਾਰ\x09ਡੇਅ\x0fਬਾਹਮ" + + "ਨ\x0fਐਸਫੰਡ=ਚੀਨ ਦੇ ਗਣਰਾਜ ਤੋਂ ਪਹਿਲਾਂ\x0cਮਿੰਗ.ਆਰ.ਓ.ਸੀ ਤੋਂ ਪਹਿਲਾਂ\x0cਸੰਮਤ" + + "\x09ਸਾਲ\x19ਪਿਛਲਾ ਸਾਲ\x10ਇਹ ਸਾਲ\x16ਅਗਲਾ ਸਾਲ\x1a{0} ਸਾਲ ਵਿੱਚ {0} ਸਾਲਾਂ ਵਿੱ" + + "ਚ {0} ਸਾਲ ਪਹਿਲਾਂ\x12ਤਿਮਾਹੀ\"ਪਿਛਲੀ ਤਿਮਾਹੀ\x19ਇਸ ਤਿਮਾਹੀ\x1fਅਗਲੀ ਤਿਮਾਹੀ#{" + + "0} ਤਿਮਾਹੀ ਵਿੱਚ){0} ਤਿਮਾਹੀਆਂ ਵਿੱਚ){0} ਤਿਮਾਹੀ ਪਹਿਲਾਂ/{0} ਤਿਮਾਹੀਆਂ ਪਹਿਲਾਂ" + + "\x19ਇਹ ਤਿਮਾਹੀ\x0fਮਹੀਨਾ\x1fਪਿਛਲਾ ਮਹੀਨਾ\x16ਇਹ ਮਹੀਨਾ\x1cਅਗਲਾ ਮਹੀਨਾ {0} ਮਹੀਨ" + + "ੇ ਵਿੱਚ&{0} ਮਹੀਨਿਆਂ ਵਿੱਚ&{0} ਮਹੀਨਾ ਪਹਿਲਾਂ&{0} ਮਹੀਨੇ ਪਹਿਲਾਂ\x0fਹਫ਼ਤਾ\x1f" + + "ਪਿਛਲਾ ਹਫ਼ਤਾ\x16ਇਹ ਹਫ਼ਤਾ\x1cਅਗਲਾ ਹਫ਼ਤਾ {0} ਹਫ਼ਤੇ ਵਿੱਚ&{0} ਹਫ਼ਤਿਆਂ ਵਿੱਚ&" + + "{0} ਹਫ਼ਤਾ ਪਹਿਲਾਂ&{0} ਹਫ਼ਤੇ ਪਹਿਲਾਂ\x1a{0} ਦਾ ਹਫ਼ਤਾ&ਮਹੀਨੇ ਦਾ ਹਫ਼ਤਾ\x09ਦਿਨ" + + "\x1fਬੀਤਿਆ ਕੱਲ੍ਹ\x09ਅੱਜ\x0cਭਲਕੇ\x1a{0} ਦਿਨ ਵਿੱਚ {0} ਦਿਨਾਂ ਵਿੱਚ {0} ਦਿਨ ਪਹ" + + "ਿਲਾਂ\x1aਸਾਲ ਦਾ ਦਿਨ ਹਫ਼ਤੇ ਦਾ ਦਿਨ7ਮਹੀਨੇ ਦਾ ਹਫ਼ਤੇ ਦਾ ਦਿਨ\x1fਪਿਛਲਾ ਐਤਵਾਰ" + + "\x16ਇਸ ਐਤਵਾਰ\x1cਅਗਲਾ ਐਤਵਾਰ {0} ਐਤਵਾਰ ਵਿੱਚ&{0} ਐਤਵਾਰਾਂ ਵਿੱਚ&{0} ਐਤਵਾਰ ਪਹਿ" + + "ਲਾਂ\x16ਪਿਛਲਾ ਐਤ\x0dਇਹ ਐਤ\x13ਅਗਲਾ ਐਤ\"ਪਿਛਲਾ ਸੋਮਵਾਰ\x19ਇਸ ਸੋਮਵਾਰ\x1fਅਗਲਾ" + + " ਸੋਮਵਾਰ#{0} ਸੋਮਵਾਰ ਵਿੱਚ){0} ਸੋਮਵਾਰਾਂ ਵਿੱਚ){0} ਸੋਮਵਾਰ ਪਹਿਲਾਂ\x19ਪਿਛਲਾ ਸੋਮ" + + "\x10ਇਸ ਸੋਮ\x16ਅਗਲਾ ਸੋਮ%ਪਿਛਲਾ ਮੰਗਲਵਾਰ\x1cਇਹ ਮੰਗਲਵਾਰ\"ਅਗਲਾ ਮੰਗਲਵਾਰ&{0} ਮੰਗ" + + "ਲਵਾਰ ਵਿੱਚ,{0} ਮੰਗਲਵਾਰਾਂ ਵਿੱਚ,{0} ਮੰਗਲਵਾਰ ਪਹਿਲਾਂ\x1cਪਿਛਲਾ ਮੰਗਲ\x13ਇਹ ਮੰ" + + "ਗਲ\x19ਅਗਲਾ ਮੰਗਲ%ਪਿਛਲਾ ਬੁੱਧਵਾਰ\x1cਇਹ ਬੁੱਧਵਾਰ\"ਅਗਲਾ ਬੁੱਧਵਾਰ&{0} ਬੁੱਧਵਾਰ " + + "ਵਿੱਚ,{0} ਬੁੱਧਵਾਰਾਂ ਵਿੱਚ,{0} ਬੁੱਧਵਾਰ ਪਹਿਲਾਂ\x1cਪਿਛਲਾ ਬੁੱਧ\x13ਇਹ ਬੁੱਧ" + + "\x19ਅਗਲਾ ਬੁੱਧ\"ਪਿਛਲਾ ਵੀਰਵਾਰ\x19ਇਹ ਵੀਰਵਾਰ\x1fਅਗਲਾ ਵੀਰਵਾਰ#{0} ਵੀਰਵਾਰ ਵਿੱਚ)" + + "{0} ਵੀਰਵਾਰਾਂ ਵਿੱਚ){0} ਵੀਰਵਾਰ ਪਹਿਲਾਂ\x19ਪਿਛਲਾ ਵੀਰ\x10ਇਹ ਵੀਰ\x16ਅਗਲਾ ਵੀਰ+ਪ" + + "ਿਛਲਾ ਸ਼ੁੱਕਰਵਾਰ\"ਇਹ ਸ਼ੁੱਕਰਵਾਰ(ਅਗਲਾ ਸ਼ੁੱਕਰਵਾਰ,{0} ਸ਼ੁੱਕਰਵਾਰ ਵਿੱਚ2{0} ਸ਼ੁ" + + "ੱਕਰਵਾਰਾਂ ਵਿੱਚ2{0} ਸ਼ੁੱਕਰਵਾਰ ਪਹਿਲਾਂ\"ਪਿਛਲਾ ਸ਼ੁੱਕਰ\x19ਇਹ ਸ਼ੁੱਕਰ\x1fਅਗਲਾ " + + "ਸ਼ੁੱਕਰ" + +var bucket85 string = "" + // Size: 17935 bytes + "\x1cਪਿਛਲਾ ਸ਼ੁੱ\x13ਇਹ ਸ਼ੁੱ\x19ਅਗਲਾ ਸ਼ੁੱ.ਪਿਛਲਾ ਸ਼ਨਿੱਚਰਵਾਰ%ਇਹ ਸ਼ਨਿੱਚਰਵਾਰ+ਅਗ" + + "ਲਾ ਸ਼ਨਿੱਚਰਵਾਰ/{0} ਸ਼ਨਿੱਚਰਵਾਰ ਵਿੱਚ5{0} ਸ਼ਨਿੱਚਰਵਾਰਾਂ ਵਿੱਚ5{0} ਸ਼ਨਿੱਚਰਵਾਰ" + + " ਪਹਿਲਾਂ%ਪਿਛਲਾ ਸ਼ਨਿੱਚਰ\x1cਇਹ ਸ਼ਨਿੱਚਰ\"ਅਗਲਾ ਸ਼ਨਿੱਚਰ\x1fਪਿਛਲਾ ਸ਼ਨਿੱ\x16ਇਹ ਸ" + + "਼ਨਿੱ\x1cਅਗਲਾ ਸ਼ਨਿੱ\x1dਪੂ.ਦੁ./ਬਾ.ਦੁ.\x0cਘੰਟਾ\x13ਇਸ ਘੰਟੇ\x1d{0} ਘੰਟੇ ਵਿੱ" + + "ਚ#{0} ਘੰਟਿਆਂ ਵਿੱਚ#{0} ਘੰਟਾ ਪਹਿਲਾਂ#{0} ਘੰਟੇ ਪਹਿਲਾਂ\x06ਘੰ\x0cਮਿੰਟ\x13ਇਸ " + + "ਮਿੰਟ\x1d{0} ਮਿੰਟ ਵਿੱਚ#{0} ਮਿੰਟਾਂ ਵਿੱਚ#{0} ਮਿੰਟ ਪਹਿਲਾਂ\x0fਸਕਿੰਟ\x09ਹੁਣ " + + "{0} ਸਕਿੰਟ ਵਿੱਚ&{0} ਸਕਿੰਟਾਂ ਵਿੱਚ&{0} ਸਕਿੰਟ ਪਹਿਲਾਂ\x1fਇਲਾਕਾਈ ਵੇਲਾ\x10{0} ਵ" + + "ੇਲਾ&{0} ਪ੍ਰਕਾਸ਼ ਵੇਲਾ {0} ਮਿਆਰੀ ਵੇਲਾ>ਕੋਔਰਡੀਨੇਟੇਡ ਵਿਆਪਕ ਵੇਲਾ?ਬ੍ਰਿਟਿਸ਼ ਗਰ" + + "ਮੀਆਂ ਦਾ ਵੇਲਾ/ਆਇਰਿਸ਼ ਮਿਆਰੀ ਵੇਲਾ.ਅਫ਼ਗਾਨਿਸਤਾਨ ਵੇਲਾ2ਕੇਂਦਰੀ ਅਫਰੀਕਾ ਵੇਲਾ/ਪੂਰ" + + "ਬੀ ਅਫਰੀਕਾ ਵੇਲਾBਦੱਖਣੀ ਅਫ਼ਰੀਕਾ ਮਿਆਰੀ ਵੇਲਾ/ਪੱਛਮੀ ਅਫਰੀਕਾ ਵੇਲਾ?ਪੱਛਮੀ ਅਫਰੀਕਾ" + + " ਮਿਆਰੀ ਵੇਲਾIਪੱਛਮੀ ਅਫਰੀਕਾ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ\x1fਅਲਾਸਕਾ ਵੇਲਾ/ਅਲਾਸਕਾ ਮਿਆਰੀ ਵੇਲਾ" + + "5ਅਲਾਸਕਾ ਪ੍ਰਕਾਸ਼ ਵੇਲਾ\x1fਅਲਮਾਟੀ ਸਮਾਂ/ਅਲਮਾਟੀ ਮਿਆਰੀ ਸਮਾਂ9ਅਲਮਾਟੀ ਗਰਮੀ-ਰੁੱਤ ਸ" + + "ਮਾਂ\x1fਅਮੇਜ਼ਨ ਵੇਲਾ/ਅਮੇਜ਼ਨ ਮਿਆਰੀ ਵੇਲਾ9ਅਮੇਜ਼ਨ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾBਉੱਤਰੀ ਅਮਰੀਕ" + + "ੀ ਕੇਂਦਰੀ ਵੇਲਾRਉੱਤਰੀ ਅਮਰੀਕੀ ਕੇਂਦਰੀ ਮਿਆਰੀ ਵੇਲਾXਉੱਤਰੀ ਅਮਰੀਕੀ ਕੇਂਦਰੀ ਪ੍ਰਕਾ" + + "ਸ਼ ਵੇਲਾ?ਉੱਤਰੀ ਅਮਰੀਕੀ ਪੂਰਬੀ ਵੇਲਾOਉੱਤਰੀ ਅਮਰੀਕੀ ਪੂਰਬੀ ਮਿਆਰੀ ਵੇਲਾUਉੱਤਰੀ ਅਮ" + + "ਰੀਕੀ ਪੂਰਬੀ ਪ੍ਰਕਾਸ਼ ਵੇਲਾEਉੱਤਰੀ ਅਮਰੀਕੀ ਮਾਉਂਟੇਨ ਵੇਲਾUਉੱਤਰੀ ਅਮਰੀਕੀ ਮਾਉਂਟੇਨ" + + " ਮਿਆਰੀ ਵੇਲਾ[ਉੱਤਰੀ ਅਮਰੀਕੀ ਮਾਉਂਟੇਨ ਪ੍ਰਕਾਸ਼ ਵੇਲਾEਉੱਤਰੀ ਅਮਰੀਕੀ ਪੈਸਿਫਿਕ ਵੇਲਾU" + + "ਉੱਤਰੀ ਅਮਰੀਕੀ ਪੈਸਿਫਿਕ ਮਿਆਰੀ ਵੇਲਾ[ਉੱਤਰੀ ਅਮਰੀਕੀ ਪੈਸਿਫਿਕ ਪ੍ਰਕਾਸ਼ ਵੇਲਾ\x19ਐ" + + "ਪੀਆ ਵੇਲਾ)ਐਪੀਆ ਮਿਆਰੀ ਵੇਲਾ/ਐਪੀਆ ਪ੍ਰਕਾਸ਼ ਵੇਲਾ\x1cਅਕਤਾਉ ਸਮਾਂ,ਅਕਤਾਉ ਮਿਆਰੀ ਸ" + + "ਮਾਂ6ਅਕਤਾਉ ਗਰਮੀ-ਰੁੱਤ ਸਮਾਂ\x1cਅਕਤੋਬ ਸਮਾਂ,ਅਕਤੋਬ ਮਿਆਰੀ ਸਮਾਂ6ਅਕਤੋਬ ਗਰਮੀ-ਰੁੱ" + + "ਤ ਸਮਾਂ\x19ਅਰਬੀ ਵੇਲਾ)ਅਰਬੀ ਮਿਆਰੀ ਵੇਲਾ/ਅਰਬੀ ਪ੍ਰਕਾਸ਼ ਵੇਲਾ%ਅਰਜਨਟੀਨਾ ਵੇਲਾ5ਅਰ" + + "ਜਨਟੀਨਾ ਮਿਆਰੀ ਵੇਲਾ?ਅਰਜਨਟੀਨਾ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ5ਪੱਛਮੀ ਅਰਜਨਟੀਨਾ ਵੇਲਾEਪੱਛਮੀ ਅਰ" + + "ਜਨਟੀਨਾ ਮਿਆਰੀ ਵੇਲਾOਪੱਛਮੀ ਅਰਜਨਟੀਨਾ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ\"ਅਰਮੀਨੀਆ ਵੇਲਾ2ਅਰਮੀਨੀਆ " + + "ਮਿਆਰੀ ਵੇਲਾ<ਅਰਮੀਨੀਆ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ%ਅਟਲਾਂਟਿਕ ਵੇਲਾ5ਅਟਲਾਂਟਿਕ ਮਿਆਰੀ ਵੇਲਾ;ਅਟ" + + "ਲਾਂਟਿਕ ਪ੍ਰਕਾਸ਼ ਵੇਲਾ>ਕੇਂਦਰੀ ਆਸਟ੍ਰੇਲੀਆਈ ਵੇਲਾNਆਸਟ੍ਰੇਲੀਆਈ ਕੇਂਦਰੀ ਮਿਆਰੀ ਵੇਲ" + + "ਾTਆਸਟ੍ਰੇਲੀਆਈ ਕੇਂਦਰੀ ਪ੍ਰਕਾਸ਼ ਵੇਲਾNਆਸਟ੍ਰੇਲੀਆਈ ਕੇਂਦਰੀ ਪੱਛਮੀ ਵੇਲਾ^ਆਸਟ੍ਰੇਲੀ" + + "ਆਈ ਕੇਂਦਰੀ ਪੱਛਮੀ ਮਿਆਰੀ ਵੇਲਾdਆਸਟ੍ਰੇਲੀਆਈ ਕੇਂਦਰੀ ਪੱਛਮੀ ਪ੍ਰਕਾਸ਼ ਵੇਲਾ;ਪੂਰਬੀ " + + "ਆਸਟ੍ਰੇਲੀਆਈ ਵੇਲਾKਆਸਟ੍ਰੇਲੀਆਈ ਪੂਰਬੀ ਮਿਆਰੀ ਵੇਲਾQਆਸਟ੍ਰੇਲੀਆਈ ਪੂਰਬੀ ਪ੍ਰਕਾਸ਼ ਵ" + + "ੇਲਾ;ਪੱਛਮੀ ਆਸਟ੍ਰੇਲੀਆਈ ਵੇਲਾKਆਸਟ੍ਰੇਲੀਆਈ ਪੱਛਮੀ ਮਿਆਰੀ ਵੇਲਾQਆਸਟ੍ਰੇਲੀਆਈ ਪੱਛਮੀ" + + " ਪ੍ਰਕਾਸ਼ ਵੇਲਾ+ਅਜ਼ਰਬਾਈਜਾਨ ਵੇਲਾ;ਅਜ਼ਰਬਾਈਜਾਨ ਮਿਆਰੀ ਵੇਲਾEਅਜ਼ਰਬਾਈਜਾਨ ਗਰਮੀਆਂ ਦਾ" + + " ਵੇਲਾ\x1fਅਜੋਰੇਸ ਵੇਲਾ/ਅਜੋਰੇਸ ਮਿਆਰੀ ਵੇਲਾ9ਅਜੋਰੇਸ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ(ਬੰਗਲਾਦੇਸ਼ ਵ" + + "ੇਲਾ8ਬੰਗਲਾਦੇਸ਼ ਮਿਆਰੀ ਵੇਲਾBਬੰਗਲਾਦੇਸ਼ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ\x1cਭੂਟਾਨ ਵੇਲਾ\"ਬੋਲੀਵ" + + "ੀਆ ਵੇਲਾ+ਬ੍ਰਾਜ਼ੀਲੀਆ ਵੇਲਾ;ਬ੍ਰਾਜ਼ੀਲੀਆ ਮਿਆਰੀ ਵੇਲਾEਬ੍ਰਾਜ਼ੀਲੀਆ ਗਰਮੀਆਂ ਦਾ ਵੇਲ" + + "ਾ8ਬਰੂਨੇਈ ਦਾਰੂਸਲਾਮ ਵੇਲਾ ਕੇਪ ਵਰਡ ਵੇਲਾ0ਕੇਪ ਵਰਡ ਮਿਆਰੀ ਵੇਲਾ:ਕੇਪ ਵਰਡ ਗਰਮੀਆਂ " + + "ਦਾ ਵੇਲਾ\x19ਕੇਸੀ ਸਮਾਂ/ਚਾਮੋਰੋ ਮਿਆਰੀ ਵੇਲਾ\x19ਚੈਥਮ ਵੇਲਾ)ਚੈਥਮ ਮਿਆਰੀ ਵੇਲਾ/ਚੈ" + + "ਥਮ ਪ੍ਰਕਾਸ਼ ਵੇਲਾ\x19ਚਿਲੀ ਵੇਲਾ)ਚਿਲੀ ਮਿਆਰੀ ਵੇਲਾ3ਚਿਲੀ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ\x16ਚੀ" + + "ਨ ਵੇਲਾ&ਚੀਨ ਮਿਆਰੀ ਵੇਲਾ,ਚੀਨ ਪ੍ਰਕਾਸ਼ ਵੇਲਾ%ਚੌਇਬਾਲਸਨ ਵੇਲਾ5ਚੌਇਬਾਲਸਨ ਮਿਆਰੀ ਵੇ" + + "ਲਾ?ਚੌਇਬਾਲਸਨ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ5ਕ੍ਰਿਸਮਸ ਆਈਲੈਂਡ ਵੇਲਾ,ਕੋਕਸ ਆਈਲੈਂਡ ਵੇਲਾ\"ਕੋਲੰਬ" + + "ੀਆ ਵੇਲਾ2ਕੋਲੰਬੀਆ ਮਿਆਰੀ ਵੇਲਾ<ਕੋਲੰਬੀਆ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ,ਕੁੱਕ ਆਈਲੈਂਡ ਵੇਲਾ<ਕੁੱ" + + "ਕ ਆਈਲੈਂਡ ਮਿਆਰੀ ਵੇਲਾPਕੁੱਕ ਆਈਲੈਂਡ ਅੱਧ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ\x1cਕਿਊਬਾ ਵੇਲਾ,ਕਿਊਬਾ" + + " ਮਿਆਰੀ ਵੇਲਾ2ਕਿਊਬਾ ਪ੍ਰਕਾਸ਼ ਵੇਲਾ\x1cਡੇਵਿਸ ਵੇਲਾ;ਡਿਉਮੋਂਟ ਡਿਉਰਵਿਲੇ ਵੇਲਾ,ਪੂਰਬੀ" + + " ਤਿਮੂਰ ਵੇਲਾ,ਈਸਟਰ ਆਈਲੈਂਡ ਵੇਲਾ<ਈਸਟਰ ਆਈਲੈਂਡ ਮਿਆਰੀ ਵੇਲਾFਈਸਟਰ ਆਈਲੈਂਡ ਗਰਮੀਆਂ ਦ" + + "ਾ ਵੇਲਾ\"ਇਕਵੇਡੋਰ ਵੇਲਾ&ਮੱਧ ਯੂਰਪੀ ਵੇਲਾ6ਮੱਧ ਯੂਰਪੀ ਮਿਆਰੀ ਵੇਲਾ@ਮੱਧ ਯੂਰਪੀ ਗਰਮ" + + "ੀਆਂ ਦਾ ਵੇਲਾ,ਪੂਰਬੀ ਯੂਰਪੀ ਵੇਲਾ<ਪੂਰਬੀ ਯੂਰਪੀ ਮਿਆਰੀ ਵੇਲਾFਪੂਰਬੀ ਯੂਰਪੀ ਗਰਮੀਆਂ" + + " ਦਾ ਵੇਲਾ6ਹੋਰ-ਪੂਰਬੀ ਯੂਰਪੀ ਵੇਲਾ,ਪੱਛਮੀ ਯੂਰਪੀ ਵੇਲਾ<ਪੱਛਮੀ ਯੂਰਪੀ ਮਿਆਰੀ ਵੇਲਾFਪੱ" + + "ਛਮੀ ਯੂਰਪੀ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ;ਫ਼ਾਕਲੈਂਡ ਆਈਲੈਂਡਸ ਵੇਲਾKਫ਼ਾਕਲੈਂਡ ਆਈਲੈਂਡਸ ਮਿਆਰੀ " + + "ਵੇਲਾUਫ਼ਾਕਲੈਂਡ ਆਈਲੈਂਡਸ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ\x1fਫ਼ਿਜ਼ੀ ਵੇਲਾ/ਫ਼ਿਜ਼ੀ ਮਿਆਰੀ ਵੇਲਾ9" + + "ਫ਼ਿਜ਼ੀ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ/ਫ੍ਰੈਂਚ ਗੁਏਨਾ ਵੇਲਾRਫ੍ਰੈਂਚ ਦੱਖਣੀ ਅਤੇ ਐਂਟਾਰਟਿਕ ਵੇਲਾ" + + "%ਗਲਾਪਾਗੋਸ ਵੇਲਾ\"ਗੈਂਬੀਅਰ ਵੇਲਾ\x1fਜਾਰਜੀਆ ਵੇਲਾ/ਜਾਰਜੀਆ ਮਿਆਰੀ ਵੇਲਾ9ਜਾਰਜੀਆ ਗਰਮ" + + "ੀਆਂ ਦਾ ਵੇਲਾ2ਗਿਲਬਰਟ ਆਈਲੈਂਡ ਵੇਲਾ/ਗ੍ਰੀਨਵਿਚ ਮੀਨ ਵੇਲਾ8ਪੂਰਬੀ ਗ੍ਰੀਨਲੈਂਡ ਵੇਲਾH" + + "ਪੂਰਬੀ ਗ੍ਰੀਨਲੈਂਡ ਮਿਆਰੀ ਵੇਲਾRਪੂਰਬੀ ਗ੍ਰੀਨਲੈਂਡ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ8ਪੱਛਮੀ ਗ੍ਰੀਨਲ" + + "ੈਂਡ ਵੇਲਾHਪੱਛਮੀ ਗ੍ਰੀਨਲੈਂਡ ਮਿਆਰੀ ਵੇਲਾRਪੱਛਮੀ ਗ੍ਰੀਨਲੈਂਡ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ\x19" + + "ਗੁਆਮ ਸਮਾਂ)ਖਾੜੀ ਮਿਆਰੀ ਵੇਲਾ\x1fਗੁਯਾਨਾ ਵੇਲਾ8ਹਵਾਈ-ਅਲੇਯੂਸ਼ਿਅਨ ਵੇਲਾHਹਵਾਈ-ਅਲੇ" + + "ਯੂਸ਼ਿਅਨ ਮਿਆਰੀ ਵੇਲਾNਹਵਾਈ-ਅਲੇਯੂਸ਼ਿਅਨ ਪ੍ਰਕਾਸ਼ ਵੇਲਾ&ਹਾਂਗ ਕਾਂਗ ਵੇਲਾ6ਹਾਂਗ ਕਾ" + + "ਂਗ ਮਿਆਰੀ ਵੇਲਾ@ਹਾਂਗ ਕਾਂਗ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ\x19ਹੋਵਡ ਵੇਲਾ)ਹੋਵਡ ਮਿਆਰੀ ਵੇਲਾ3ਹੋ" + + "ਵਡ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ,ਭਾਰਤੀ ਮਿਆਰੀ ਵੇਲਾ2ਹਿੰਦ ਮਹਾਂਸਾਗਰ ਵੇਲਾ(ਇੰਡੋਚਾਈਨਾ ਵੇਲਾ8ਮ" + + "ੱਧ ਇੰਡੋਨੇਸ਼ੀਆਈ ਵੇਲਾ;ਪੂਰਬੀ ਇੰਡੋਨੇਸ਼ੀਆ ਵੇਲਾ;ਪੱਛਮੀ ਇੰਡੋਨੇਸ਼ੀਆ ਵੇਲਾ\x19ਈਰਾ" + + "ਨ ਵੇਲਾ)ਈਰਾਨ ਮਿਆਰੀ ਵੇਲਾ/ਈਰਾਨ ਪ੍ਰਕਾਸ਼ ਵੇਲਾ\"ਇਰਕੁਤਸਕ ਵੇਲਾ2ਇਰਕੁਤਸਕ ਮਿਆਰੀ ਵ" + + "ੇਲਾ<ਇਰਕੁਤਸਕ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ\"ਇਜ਼ਰਾਈਲ ਵੇਲਾ2ਇਜ਼ਰਾਈਲ ਮਿਆਰੀ ਵੇਲਾ8ਇਜ਼ਰਾਈਲ ਪ੍" + + "ਰਕਾਸ਼ ਵੇਲਾ\x19ਜਪਾਨ ਵੇਲਾ)ਜਪਾਨ ਮਿਆਰੀ ਵੇਲਾ/ਜਪਾਨ ਪ੍ਰਕਾਸ਼ ਵੇਲਾ;ਪੂਰਬੀ ਕਜ਼ਾਖ਼" + + "ਸਤਾਨ ਵੇਲਾ;ਪੱਛਮੀ ਕਜ਼ਾਖ਼ਸਤਾਨ ਵੇਲਾ\x1fਕੋਰੀਆਈ ਵੇਲਾ/ਕੋਰੀਆਈ ਮਿਆਰੀ ਵੇਲਾ5ਕੋਰੀਆ" + + "ਈ ਪ੍ਰਕਾਸ਼ ਵੇਲਾ\x1cਕੋਸਰੇ ਵੇਲਾ1ਕ੍ਰਾਸਨੋਯਾਰਸਕ ਵੇਲਾAਕ੍ਰਾਸਨੋਯਾਰਸਕ ਮਿਆਰੀ ਵੇਲਾ" + + "Kਕ੍ਰਾਸਨੋਯਾਰਸਕ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ(ਕਿਰਗਿਸਤਾਨ ਵੇਲਾ\x19ਲੰਕਾ ਸਮਾਂ,ਲਾਈਨ ਆਈਲੈਂਡ ਵੇਲ" + + "ਾ&ਲੌਰਡ ਹੋਵੇ ਵੇਲਾ6ਲੌਰਡ ਹੋਵੇ ਮਿਆਰੀ ਵੇਲਾ<ਲੌਰਡ ਹੋਵੇ ਪ੍ਰਕਾਸ਼ ਵੇਲਾ\x19ਮਕਾਉ ਸ" + + "ਮਾਂ)ਮਕਾਉ ਮਿਆਰੀ ਸਮਾਂ3ਮਕਾਉ ਗਰਮੀ-ਰੁੱਤ ਸਮਾਂ8ਮੈਕਕਵੇਰੀ ਆਈਲੈਂਡ ਵੇਲਾ\x1fਮੈਗੇਡਨ" + + " ਵੇਲਾ/ਮੈਗੇਡਨ ਮਿਆਰੀ ਵੇਲਾ9ਮੈਗੇਡਨ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ\"ਮਲੇਸ਼ੀਆ ਵੇਲਾ\x1fਮਾਲਦੀਵ ਵੇ" + + "ਲਾ%ਮਾਰਕਿਸਾਸ ਵੇਲਾ2ਮਾਰਸ਼ਲ ਆਈਲੈਂਡ ਵੇਲਾ\"ਮੌਰਿਸ਼ਸ ਵੇਲਾ2ਮੌਰਿਸ਼ਸ ਮਿਆਰੀ ਵੇਲਾ<ਮ" + + "ੌਰਿਸ਼ਸ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ\x19ਮੌਸਨ ਵੇਲਾ?ਉੱਤਰ ਪੱਛਮੀ ਮੈਕਸੀਕੋ ਵੇਲਾOਉੱਤਰ ਪੱਛਮੀ " + + "ਮੈਕਸੀਕੋ ਮਿਆਰੀ ਵੇਲਾUਉੱਤਰ ਪੱਛਮੀ ਮੈਕਸੀਕੋ ਪ੍ਰਕਾਸ਼ ਵੇਲਾ8ਮੈਕਸੀਕਨ ਪੈਸਿਫਿਕ ਵੇਲ" + + "ਾHਮੈਕਸੀਕਨ ਪੈਸਿਫਿਕ ਮਿਆਰੀ ਵੇਲਾNਮੈਕਸੀਕਨ ਪੈਸਿਫਿਕ ਪ੍ਰਕਾਸ਼ ਵੇਲਾ#ਉਲਨ ਬਟੋਰ ਵੇਲ" + + "ਾ3ਉਲਨ ਬਟੋਰ ਮਿਆਰੀ ਵੇਲਾ=ਉਲਨ ਬਟੋਰ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ\x1cਮਾਸਕੋ ਵੇਲਾ,ਮਾਸਕੋ ਮਿਆਰ" + + "ੀ ਵੇਲਾ6ਮਾਸਕੋ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ\"ਮਿਆਂਮਾਰ ਵੇਲਾ\x1cਨਾਉਰੂ ਵੇਲਾ\x1cਨੇਪਾਲ ਵੇਲਾ2" + + "ਨਿਊ ਕੈਲੇਡੋਨੀਆ ਵੇਲਾBਨਿਊ ਕੈਲੇਡੋਨੀਆ ਮਿਆਰੀ ਵੇਲਾLਨਿਊ ਕੈਲੇਡੋਨੀਆ ਗਰਮੀਆਂ ਦਾ ਵੇ" + + "ਲਾ+ਨਿਊਜ਼ੀਲੈਂਡ ਵੇਲਾ;ਨਿਊਜ਼ੀਲੈਂਡ ਮਿਆਰੀ ਵੇਲਾAਨਿਊਜ਼ੀਲੈਂਡ ਪ੍ਰਕਾਸ਼ ਵੇਲਾ1ਨਿਊਫਾ" + + "ਉਂਡਲੈਂਡ ਵੇਲਾAਨਿਊਫਾਉਂਡਲੈਂਡ ਮਿਆਰੀ ਵੇਲਾGਨਿਊਫਾਉਂਡਲੈਂਡ ਪ੍ਰਕਾਸ਼ ਵੇਲਾ\x16ਨੀਊ " + + "ਵੇਲਾ2ਨੋਰਫੌਕ ਆਈਲੈਂਡ ਵੇਲਾ?ਫਰਨਾਂਡੋ ਡੇ ਨੋਰੋਨਹਾ ਵੇਲਾOਫਰਨਾਂਡੋ ਡੇ ਨੋਰੋਨਹਾ ਮਿਆ" + + "ਰੀ ਵੇਲਾYਫਰਨਾਂਡੋ ਡੇ ਨੋਰੋਨਹਾ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾBਉੱਤਰੀ ਮਰਿਆਨਾ ਆਈਲੈਂਡ ਸਮਾਂ.ਨੌਵ" + + "ੋਸਿਬੀਰਸਕ ਵੇਲਾ>ਨੌਵੋਸਿਬੀਰਸਕ ਮਿਆਰੀ ਵੇਲਾHਨੌਵੋਸਿਬੀਰਸਕ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ\x19ਓਮਸ" + + "ਕ ਵੇਲਾ)ਓਮਸਕ ਮਿਆਰੀ ਵੇਲਾ3ਓਮਸਕ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ%ਪਾਕਿਸਤਾਨ ਵੇਲਾ5ਪਾਕਿਸਤਾਨ ਮਿਆਰ" + + "ੀ ਵੇਲਾ?ਪਾਕਿਸਤਾਨ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ\x19ਪਲਾਉ ਵੇਲਾ3ਪਾਪੂਆ ਨਿਊ ਗਿਨੀ ਵੇਲਾ\"ਪੈਰਾਗ" + + "ਵੇ ਵੇਲਾ2ਪੈਰਾਗਵੇ ਮਿਆਰੀ ਵੇਲਾ<ਪੈਰਾਗਵੇ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ\x19ਪੇਰੂ ਵੇਲਾ)ਪੇਰੂ ਮਿ" + + "ਆਰੀ ਵੇਲਾ3ਪੇਰੂ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ%ਫਿਲਿਪੀਨੀ ਵੇਲਾ5ਫਿਲਿਪੀਨੀ ਮਿਆਰੀ ਵੇਲਾ?ਫਿਲਿਪੀਨ" + + "ੀ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ2ਫਿਨਿਕਸ ਆਈਲੈਂਡ ਵੇਲਾFਸੈਂਟ ਪੀਅਰੇ ਅਤੇ ਮਿਕੇਲਨ ਵੇਲਾVਸੈਂਟ ਪੀ" + + "ਅਰੇ ਅਤੇ ਮਿਕੇਲਨ ਮਿਆਰੀ ਵੇਲਾ\\ਸੈਂਟ ਪੀਅਰੇ ਅਤੇ ਮਿਕੇਲਨ ਪ੍ਰਕਾਸ਼ ਵੇਲਾ\"ਪਿਟਕੈਰਨ" + + " ਵੇਲਾ\x1fਪੋਨਾਪੇ ਵੇਲਾ(ਪਯੋਂਗਯਾਂਗ ਵੇਲਾ(ਕਿਜ਼ਲੋਰਡਾ ਸਮਾਂ8ਕਿਜ਼ਲੋਰਡਾ ਮਿਆਰੀ ਸਮਾਂB" + + "ਕਿਜ਼ਲੋਰਡਾ ਗਰਮੀ-ਰੁੱਤ ਸਮਾਂ%ਰਿਯੂਨੀਅਨ ਵੇਲਾ\x1fਰੋਥੇਰਾ ਵੇਲਾ\x1cਸਖਲੀਨ ਵੇਲਾ,ਸਖ" + + "ਲੀਨ ਮਿਆਰੀ ਵੇਲਾ6ਸਖਲੀਨ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ\x1cਸਾਮੋਆ ਵੇਲਾ,ਸਾਮੋਆ ਮਿਆਰੀ ਵੇਲਾ2ਸਾਮ" + + "ੋਆ ਪ੍ਰਕਾਸ਼ ਵੇਲਾ\x1fਸੇਸ਼ਲਸ ਵੇਲਾ5ਸਿੰਗਾਪੁਰ ਮਿਆਰੀ ਵੇਲਾ5ਸੋਲੋਮਨ ਆਈਲੈਂਡਸ ਵੇਲਾ" + + "/ਦੱਖਣੀ ਜਾਰਜੀਆ ਵੇਲਾ\"ਸੂਰੀਨਾਮ ਵੇਲਾ\x1cਸਿਓਵਾ ਵੇਲਾ\x1fਤਾਹੀਤੀ ਵੇਲਾ\x19ਤੈਪਈ ਵੇ" + + "ਲਾ)ਤੈਪਈ ਮਿਆਰੀ ਵੇਲਾ/ਤੈਪਈ ਪ੍ਰਕਾਸ਼ ਵੇਲਾ+ਤਾਜਿਕਿਸਤਾਨ ਵੇਲਾ\"ਟੋਕੇਲਾਉ ਵੇਲਾ\x1c" + + "ਟੋਂਗਾ ਵੇਲਾ,ਟੋਂਗਾ ਮਿਆਰੀ ਵੇਲਾ6ਟੋਂਗਾ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ\x16ਚੂਕ ਵੇਲਾ1ਤੁਰਕਮੇਨਿਸ" + + "ਤਾਨ ਵੇਲਾAਤੁਰਕਮੇਨਿਸਤਾਨ ਮਿਆਰੀ ਵੇਲਾKਤੁਰਕਮੇਨਿਸਤਾਨ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ\x1fਟੁਵਾਲੂ" + + " ਵੇਲਾ\x1fਉਰੂਗਵੇ ਵੇਲਾ/ਉਰੂਗਵੇ ਮਿਆਰੀ ਵੇਲਾ9ਉਰੂਗਵੇ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ.ਉਜ਼ਬੇਕਿਸਤਾਨ" + + " ਵੇਲਾ>ਉਜ਼ਬੇਕਿਸਤਾਨ ਮਿਆਰੀ ਵੇਲਾHਉਜ਼ਬੇਕਿਸਤਾਨ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ\"ਵਾਨੂਆਟੂ ਵੇਲਾ2ਵਾ" + + "ਨੂਆਟੂ ਮਿਆਰੀ ਵੇਲਾ<ਵਾਨੂਆਟੂ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ+ਵੈਨੇਜ਼ੂਏਲਾ ਵੇਲਾ+ਵਲਾਦੀਵੋਸਤਕ ਵੇਲ" + + "ਾ;ਵਲਾਦੀਵੋਸਤਕ ਮਿਆਰੀ ਵੇਲਾEਵਲਾਦੀਵੋਸਤਕ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ+ਵੋਲਗੋਗ੍ਰੇਡ ਵੇਲਾ;ਵੋਲਗ" + + "ੋਗ੍ਰੇਡ ਮਿਆਰੀ ਵੇਲਾEਵੋਲਗੋਗ੍ਰੇਡ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ\x1fਵੋਸਟੋਕ ਵੇਲਾ)ਵੇਕ ਆਈਲੈਂਡ " + + "ਵੇਲਾ9ਵਾਲਿਸ ਅਤੇ ਫੁਟੂਨਾ ਵੇਲਾ\x1fਯਕੁਤਸਕ ਵੇਲਾ/ਯਕੁਤਸਕ ਮਿਆਰੀ ਵੇਲਾ9ਯਕੁਤਸਕ ਗਰਮ" + + "ੀਆਂ ਦਾ ਵੇਲਾ+ਯਕੇਤਰਿਨਬਰਗ ਵੇਲਾ;ਯਕੇਤਰਿਨਬਰਗ ਮਿਆਰੀ ਵੇਲਾEਯਕੇਤਰਿਨਬਰਗ ਗਰਮੀਆਂ ਦਾ" + + " ਵੇਲਾ" + +var bucket86 string = "" + // Size: 10702 bytes + "\x0aاتوار\x06پیر\x08منگل\x08بُدھ\x0cجمعرات\x08جمعہ\x08ہفتہ\x17چوتھاي پہل" + + "اں\x15چوتھاي دوجا\x15چوتھاي تيجا\x17چوتھاي چوتھا\x10ايساپورو\x04سں\x08و" + + "رھا\x0aمہينا\x06دئن\x12ہفتے دا دن\x0aگھنٹا\x06منٹ\x06ٹپہ\x04e.b.\x0eEEE" + + "E, d MMMM U\x03sty\x03lut\x03mar\x03kwi\x03maj\x03cze\x03lip\x03sie\x03w" + + "rz\x04paź\x03lis\x03gru\x08stycznia\x06lutego\x05marca\x08kwietnia\x04ma" + + "ja\x07czerwca\x05lipca\x08sierpnia\x09września\x0dpaździernika\x09listop" + + "ada\x07grudnia\x08styczeń\x04luty\x06marzec\x09kwiecień\x08czerwiec\x06l" + + "ipiec\x09sierpień\x09wrzesień\x0cpaździernik\x08listopad\x09grudzień\x06" + + "niedz.\x04pon.\x03wt.\x04śr.\x04czw.\x03pt.\x04sob.\x03nie\x03pon\x03wto" + + "\x04śro\x03czw\x04pią\x03sob\x09niedziela\x0dponiedziałek\x06wtorek\x06ś" + + "roda\x08czwartek\x07piątek\x06sobota\x05I kw.\x06II kw.\x07III kw.\x06IV" + + " kw.\x0aI kwartał\x0bII kwartał\x0cIII kwartał\x0bIV kwartał\x0bo północ" + + "y\x0bw południe\x04rano\x10przed południem\x0cpo południu\x09wieczorem" + + "\x06w nocy\x09o półn.\x07w poł.\x0bprzed poł.\x08po poł.\x06wiecz.\x08pó" + + "łnoc\x09południe\x0eprzedpołudnie\x0bpopołudnie\x08wieczór\x07półn.\x05" + + "poł.\x0aprzedpoł.\x07popoł.\x11przed naszą erą\x06p.n.e.\x0anaszej ery" + + "\x04n.e.\x06Tiszri\x08Cheszwan\x06Kislew\x05Tewet\x05Szwat\x06Adar I\x04" + + "Adar\x07Adar II\x05Nisan\x04Ijar\x05Siwan\x05Tamuz\x02Aw\x04Elul\x07Ćajt" + + "ra\x09Wajśakha\x0aDźjesztha\x07Aszadha\x08Śrawana\x0aBhadrapada\x07Aświn" + + "a\x08Karttika\x17Margaśirsza-Agrahayana\x06Pausza\x05Magha\x08Phalguna" + + "\x09przed ROC\x03ROC\x09Przed ROC\x0fw zeszłym roku\x0aw tym roku\x11w p" + + "rzyszłym roku\x0c{0} rok temu\x0d{0} lata temu\x0c{0} lat temu\x0d{0} ro" + + "ku temu\x08kwartał\x13w zeszłym kwartale\x0ew tym kwartale\x15w przyszły" + + "m kwartale\x0fza {0} kwartał\x10za {0} kwartały\x12za {0} kwartałów\x10z" + + "a {0} kwartału\x11{0} kwartał temu\x12{0} kwartały temu\x14{0} kwartałów" + + " temu\x12{0} kwartału temu\x0c{0} kw. temu\x08miesiąc\x14w zeszłym miesi" + + "ącu\x0fw tym miesiącu\x16w przyszłym miesiącu\x0fza {0} miesiąc\x10za {" + + "0} miesiące\x10za {0} miesięcy\x10za {0} miesiąca\x11{0} miesiąc temu" + + "\x12{0} miesiące temu\x12{0} miesięcy temu\x12{0} miesiąca temu\x05mies." + + "\x0cza {0} mies.\x0e{0} mies. temu\x02mc\x08tydzień\x13w zeszłym tygodni" + + "u\x0ew tym tygodniu\x15w przyszłym tygodniu\x0fza {0} tydzień\x0fza {0} " + + "tygodnie\x0eza {0} tygodni\x0fza {0} tygodnia\x11{0} tydzień temu\x11{0}" + + " tygodnie temu\x10{0} tygodni temu\x11{0} tygodnia temu\x0ctydzień {0}" + + "\x05tydz.\x0cza {0} tydz.\x0bza {0} tyg.\x0e{0} tydz. temu\x0d{0} tyg. t" + + "emu\x12tydzień miesiąca\x0btydz. mies.\x06dzień\x0cprzedwczoraj\x07wczor" + + "aj\x07dzisiaj\x05jutro\x08pojutrze\x0dza {0} dzień\x0aza {0} dni\x0bza {" + + "0} dnia\x0f{0} dzień temu\x0c{0} dni temu\x0d{0} dnia temu\x0bdzień roku" + + "\x08dz. roku\x06dz. r.\x0fdzień tygodnia\x0bdzień tyg.\x10dzień miesiąca" + + "\x0cdzień mies.\x15w zeszłą niedzielę\x10w tę niedzielę\x17w przyszłą ni" + + "edzielę\x11za {0} niedzielę\x10za {0} niedziele\x0fza {0} niedziel\x10za" + + " {0} niedzieli\x13{0} niedzielę temu\x12{0} niedziele temu\x11{0} niedzi" + + "el temu\x12{0} niedzieli temu\x17w zeszły poniedziałek\x13w ten poniedzi" + + "ałek\x19w przyszły poniedziałek\x14za {0} poniedziałek\x14za {0} poniedz" + + "iałki\x16za {0} poniedziałków\x14za {0} poniedziałku\x16{0} poniedziałek" + + " temu\x16{0} poniedziałki temu\x18{0} poniedziałków temu\x16{0} poniedzi" + + "ałku temu\x10w zeszły wtorek\x0cw ten wtorek\x12w przyszły wtorek\x0dza " + + "{0} wtorek\x0dza {0} wtorki\x0fza {0} wtorków\x0dza {0} wtorku\x0f{0} wt" + + "orek temu\x0f{0} wtorki temu\x11{0} wtorków temu\x0f{0} wtorku temu\x12w" + + " zeszłą środę\x0dw tę środę\x14w przyszłą środę\x0eza {0} środę\x0dza {0" + + "} środy\x0dza {0} śród\x10{0} środę temu\x0f{0} środy temu\x0f{0} śród t" + + "emu\x12w zeszły czwartek\x0ew ten czwartek\x14w przyszły czwartek\x0fza " + + "{0} czwartek\x0fza {0} czwartki\x11za {0} czwartków\x0fza {0} czwartku" + + "\x11{0} czwartek temu\x11{0} czwartki temu\x13{0} czwartków temu\x11{0} " + + "czwartku temu\x11w zeszły piątek\x0dw ten piątek\x13w przyszły piątek" + + "\x0eza {0} piątek\x0eza {0} piątki\x10za {0} piątków\x0eza {0} piątku" + + "\x10{0} piątek temu\x10{0} piątki temu\x12{0} piątków temu\x10{0} piątku" + + " temu\x12w zeszłą sobotę\x0dw tę sobotę\x14w przyszłą sobotę\x0eza {0} s" + + "obotę\x0dza {0} soboty\x0dza {0} sobót\x10{0} sobotę temu\x0f{0} soboty " + + "temu\x0f{0} sobót temu\x1frano / po południu / wieczorem\x18rano / po po" + + "ł. / wiecz.\x07godzina\x0ata godzina\x0fza {0} godzinę\x0eza {0} godzin" + + "y\x0dza {0} godzin\x11{0} godzinę temu\x10{0} godziny temu\x0f{0} godzin" + + " temu\x05godz.\x0cza {0} godz.\x0e{0} godz. temu\x0b{0} g. temu\x09ta mi" + + "nuta\x0eza {0} minutę\x0dza {0} minuty\x0cza {0} minut\x10{0} minutę tem" + + "u\x0f{0} minuty temu\x0e{0} minut temu\x0c{0} min temu\x05teraz\x0fza {0" + + "} sekundę\x0eza {0} sekundy\x0dza {0} sekund\x11{0} sekundę temu\x10{0} " + + "sekundy temu\x0f{0} sekund temu\x0d{0} sek. temu\x0a{0} s temu\x0estrefa" + + " czasowa\x0cstr. czasowa\x0astr. czas.\x09czas: {0}\x10{0} (czas letni)" + + "\x16{0} (czas standardowy)\x1duniwersalny czas koordynowany\x14Brytyjski" + + " czas letni\x15Irlandia (czas letni)\x0aAfganistan\x19czas środkowoafryk" + + "ański\x19czas wschodnioafrykański\x1bczas południowoafrykański\x19czas z" + + "achodnioafrykański%czas zachodnioafrykański standardowy\x1fczas zachodni" + + "oafrykański letni\x06Alaska\x19Alaska (czas standardowy)\x13Alaska (czas" + + " letni)\x0fczas amazoński\x1bczas amazoński standardowy\x15czas amazońsk" + + "i letni\x1aczas środkowoamerykański&czas środkowoamerykański standardowy" + + " czas środkowoamerykański letni\x1aczas wschodnioamerykański&czas wschod" + + "nioamerykański standardowy czas wschodnioamerykański letni\x0cczas górsk" + + "i\x18czas górski standardowy\x12czas górski letni\x0fczas pacyficzny\x1b" + + "czas pacyficzny standardowy\x15czas pacyficzny letni\x0bczas Anadyr\x17c" + + "zas standardowy Anadyr\x11czas Anadyr letni\x04Apia\x17Apia (czas standa" + + "rdowy)\x11Apia (czas letni)\x12Półwysep Arabski%Półwysep Arabski (czas s" + + "tandardowy)\x1fPółwysep Arabski (czas letni)\x09Argentyna\x1cArgentyna (" + + "czas standardowy)\x16Argentyna (czas letni)\x13Argentyna Zachodnia&Argen" + + "tyna Zachodnia (czas standardowy) Argentyna Zachodnia (czas letni)\x07Ar" + + "menia\x1aArmenia (czas standardowy)\x14Armenia (czas letni)\x0fczas atla" + + "ntycki\x1bczas atlantycki standardowy\x15czas atlantycki letni\x1aczas ś" + + "rodkowoaustralijski&czas środkowoaustralijski standardowy czas środkowoa" + + "ustralijski letni$czas środkowo-zachodnioaustralijski0czas środkowo-zach" + + "odnioaustralijski standardowy*czas środkowo-zachodnioaustralijski letni" + + "\x1aczas wschodnioaustralijski&czas wschodnioaustralijski standardowy cz" + + "as wschodnioaustralijski letni\x1aczas zachodnioaustralijski&czas zachod" + + "nioaustralijski standardowy czas zachodnioaustralijski letni\x0cAzerbejd" + + "żan\x1fAzerbejdżan (czas standardowy)\x19Azerbejdżan (czas letni)\x05Az" + + "ory\x18Azory (czas standardowy)\x12Azory (czas letni)\x0aBangladesz\x1dB" + + "angladesz (czas standardowy)\x17Bangladesz (czas letni)\x06Bhutan\x07Bol" + + "iwia\x09Brasília\x1cBrasília (czas standardowy)\x16Brasília (czas letni)" + + "\x06Brunei\x1aWyspy Zielonego Przylądka-Wyspy Zielonego Przylądka (czas " + + "standardowy)'Wyspy Zielonego Przylądka (czas letni)\x08Czamorro\x07Chath" + + "am\x1aChatham (czas standardowy)\x14Chatham (czas letni)\x05Chile\x18Chi" + + "le (czas standardowy)\x12Chile (czas letni)\x05Chiny\x18Chiny (czas stan" + + "dardowy)\x12Chiny (czas letni)\x0aCzojbalsan\x1dCzojbalsan (czas standar" + + "dowy)\x17Czojbalsan (czas letni)\x18Wyspa Bożego Narodzenia\x0eWyspy Kok" + + "osowe\x08Kolumbia\x1bKolumbia (czas standardowy)\x15Kolumbia (czas letni" + + ")\x0bWyspy Cooka\x1eWyspy Cooka (czas standardowy)\x18Wyspy Cooka (czas " + + "letni)\x04Kuba\x17Kuba (czas standardowy)\x11Kuba (czas letni)\x05Davis" + + "\x12Dumont-d’Urville\x0eTimor Wschodni\x11Wyspa Wielkanocna$Wyspa Wielka" + + "nocna (czas standardowy)\x1eWyspa Wielkanocna (czas letni)\x07Ekwador" + + "\x18czas środkowoeuropejski$czas środkowoeuropejski standardowy\x1eczas " + + "środkowoeuropejski letni\x18czas wschodnioeuropejski$czas wschodnioeuro" + + "pejski standardowy\x1eczas wschodnioeuropejski letni\x1fczas wschodnioeu" + + "ropejski dalszy\x18czas zachodnioeuropejski$czas zachodnioeuropejski sta" + + "ndardowy\x1eczas zachodnioeuropejski letni\x09Falklandy\x1cFalklandy (cz" + + "as standardowy)\x16Falklandy (czas letni)\x06Fidżi\x19Fidżi (czas standa" + + "rdowy)\x13Fidżi (czas letni)\x10Gujana Francuska/Francuskie Terytoria Po" + + "łudniowe i Antarktyczne\x09Galapagos\x0eWyspy Gambiera\x06Gruzja\x19Gru" + + "zja (czas standardowy)\x13Gruzja (czas letni)\x0eWyspy Gilberta\x10czas " + + "uniwersalny\x14Grenlandia Wschodnia'Grenlandia Wschodnia (czas standardo" + + "wy)!Grenlandia Wschodnia (czas letni)\x14Grenlandia Zachodnia'Grenlandia" + + " Zachodnia (czas standardowy)!Grenlandia Zachodnia (czas letni)\x0dZatok" + + "a Perska\x06Gujana\x0dHawaje-Aleuty Hawaje-Aleuty (czas standardowy)\x1a" + + "Hawaje-Aleuty (czas letni)\x08Hongkong\x1bHongkong (czas standardowy)" + + "\x15Hongkong (czas letni)\x05Kobdo\x18Kobdo (czas standardowy)\x12Kobdo " + + "(czas letni)\x0dczas indyjski\x0eOcean Indyjski\x11czas indochiński\x13I" + + "ndonezja Środkowa\x13Indonezja Wschodnia\x13Indonezja Zachodnia\x04Iran" + + "\x17Iran (czas standardowy)\x11Iran (czas letni)\x06Irkuck\x19Irkuck (cz" + + "as standardowy)\x13Irkuck (czas letni)\x06Izrael\x19Izrael (czas standar" + + "dowy)\x13Izrael (czas letni)\x07Japonia\x1aJaponia (czas standardowy)" + + "\x14Japonia (czas letni)\x1eczas Pietropawłowsk Kamczacki*czas standardo" + + "wy Pietropawłowsk Kamczacki$czas Pietropawłowsk Kamczacki letni\x13Kazac" + + "hstan Wschodni\x13Kazachstan Zachodni\x05Korea\x18Korea (czas standardow" + + "y)\x12Korea (czas letni)\x06Kosrae\x0bKrasnojarsk\x1eKrasnojarsk (czas s" + + "tandardowy)\x18Krasnojarsk (czas letni)\x09Kirgistan\x0cLine Islands\x09" + + "Lord Howe\x1cLord Howe (czas standardowy)\x16Lord Howe (czas letni)\x09M" + + "acquarie\x07Magadan\x1aMagadan (czas standardowy)\x14Magadan (czas letni" + + ")\x07Malezja\x08Malediwy\x07Markizy\x0fWyspy Marshalla\x09Mauritius\x1cM" + + "auritius (czas standardowy)\x16Mauritius (czas letni)\x06Mawson\x1aMeksy" + + "k Północno-Zachodni-Meksyk Północno-Zachodni (czas standardowy)'Meksyk P" + + "ółnocno-Zachodni (czas letni)\x18Meksyk (czas pacyficzny)$Meksyk (czas " + + "pacyficzny standardowy)\x1eMeksyk (czas pacyficzny letni)\x0bUłan Bator" + + "\x1eUłan Bator (czas standardowy)\x18Ułan Bator (czas letni)\x0fczas mos" + + "kiewski\x1bczas moskiewski standardowy\x15czas moskiewski letni\x06Mjanm" + + "a\x05Nauru\x05Nepal\x0eNowa Kaledonia!Nowa Kaledonia (czas standardowy)" + + "\x1bNowa Kaledonia (czas letni)\x0dNowa Zelandia Nowa Zelandia (czas sta" + + "ndardowy)\x1aNowa Zelandia (czas letni)\x0fNowa Fundlandia\"Nowa Fundlan" + + "dia (czas standardowy)\x1cNowa Fundlandia (czas letni)\x04Niue\x07Norfol" + + "k\x13Fernando de Noronha&Fernando de Noronha (czas standardowy) Fernando" + + " de Noronha (czas letni)\x0bNowosybirsk\x1eNowosybirsk (czas standardowy" + + ")\x18Nowosybirsk (czas letni)\x04Omsk\x17Omsk (czas standardowy)\x11Omsk" + + " (czas letni)\x08Pakistan\x1bPakistan (czas standardowy)\x15Pakistan (cz" + + "as letni)\x05Palau\x11Papua-Nowa Gwinea\x08Paragwaj\x1bParagwaj (czas st" + + "andardowy)\x15Paragwaj (czas letni)\x04Peru\x17Peru (czas standardowy)" + + "\x11Peru (czas letni)\x08Filipiny\x1bFilipiny (czas standardowy)\x15Fili" + + "piny (czas letni)\x06Feniks\x17Saint-Pierre i Miquelon*Saint-Pierre i Mi" + + "quelon (czas standardowy)$Saint-Pierre i Miquelon (czas letni)\x08Pitcai" + + "rn\x07Pohnpei\x09Pjongjang\x07Reunion\x07Rothera\x08Sachalin\x1bSachalin" + + " (czas standardowy)\x15Sachalin (czas letni)\x0bczas Samara\x17czas stan" + + "dardowy Samara\x11czas Samara letni\x05Samoa\x18Samoa (czas standardowy)" + + "\x12Samoa (czas letni)\x07Seszele\x08Singapur\x0eWyspy Salomona\x13Georg" + + "ia Południowa\x07Surinam\x05Syowa\x06Tahiti\x06Tajpej\x19Tajpej (czas st" + + "andardowy)\x13Tajpej (czas letni)\x0cTadżykistan\x07Tokelau\x05Tonga\x18" + + "Tonga (czas standardowy)\x12Tonga (czas letni)\x05Chuuk\x0cTurkmenistan" + + "\x1fTurkmenistan (czas standardowy)\x19Turkmenistan (czas letni)\x06Tuva" + + "lu\x07Urugwaj\x1aUrugwaj (czas standardowy)\x14Urugwaj (czas letni)\x0aU" + + "zbekistan\x1dUzbekistan (czas standardowy)\x17Uzbekistan (czas letni)" + + "\x07Vanuatu\x1aVanuatu (czas standardowy)\x14Vanuatu (czas letni)\x09Wen" + + "ezuela\x0cWładywostok\x1fWładywostok (czas standardowy)\x19Władywostok (" + + "czas letni)\x0aWołgograd\x1dWołgograd (czas standardowy)\x17Wołgograd (c" + + "zas letni)\x06Wostok\x04Wake\x0fWallis i Futuna\x06Jakuck\x19Jakuck (cza" + + "s standardowy)\x13Jakuck (czas letni)\x0dJekaterynburg Jekaterynburg (cz" + + "as standardowy)\x1aJekaterynburg (czas letni)\x0dza {0} minuta\x06بدھ" + +var bucket87 string = "" + // Size: 12627 bytes + "\x1aEEEE, y 'mettas' d. MMMM G\x14y 'mettas' d. MMMM G\x0fdd.MM 'st'. y " + + "G\x03rag\x03was\x04pūl\x03sak\x03zal\x04sīm\x04līp\x03dag\x03sil\x03spa" + + "\x03lap\x03sal\x04rags\x09wassarins\x06pūlis\x06sakkis\x07zallaws\x08sīm" + + "enis\x05līpa\x06daggis\x07sillins\x08spallins\x0alapkrūtis\x07sallaws" + + "\x03nad\x03pan\x03wis\x03pus\x03ket\x04pēn\x03sab\x07nadīli\x09panadīli" + + "\x0awisasīdis\x0cpussisawaiti\x0aketwirtiks\x09pēntniks\x09sabattika\x05" + + "1. k.\x052. k.\x053. k.\x054. k.\x0b1. ketwirts\x0b2. ketwirts\x0b3. ket" + + "wirts\x0b4. ketwirts\x081. ketw.\x082. ketw.\x083. ketw.\x084. ketw.\x0b" + + "ankstāinan\x0epa pussideinan\x18EEEE, y 'mettas' d. MMMM\x12y 'mettas' d" + + ". MMMM\x0ddd.MM 'st'. y\x06mettan\x11panzdauman mettan\x09this year\x09n" + + "ext year\x08ketwirts\x05ketw.\x06mīnss\x04mī.\x08sawaīti\x04saw.\x06dein" + + "ā\x06bītan\x0bšandēinan\x10sawaītis deinā\x1cankstāinan / pa pussideina" + + "n\x07stūndi\x07minūti\x08sekūndi\x0bkerdaszōni\x0bKerdā: {0}\x12Daggas k" + + "erdā: {0}\x13Zēimas kerdā: {0}\x1bCentrālas Amērikas kerdā#Centrālas Amē" + + "rikas zēimas kerdā\"Centrālas Amērikas daggas kerdā\x1bDēiniskas Amērika" + + "s kerdā#Dēiniskas Amērikas zēimas kerdā\"Dēiniskas Amērikas daggas kerdā" + + "\x18Amērikas gārban kerdā Amērikas gārban zēimas kerdā\x1fAmērikas gārba" + + "n daggas kerdā\x1cPacīfiskas Amērikas kerdā$Pacīfiskas Amērikas zēimas k" + + "erdā#Pacīfiskas Amērikas daggas kerdā\x12Atlāntiska kerdā\x1aAtlāntiska " + + "zēimas kerdā\x19Atlāntiska daggas kerdā\x1aCentrālas Eurōpas kerdā\"Cent" + + "rālas Eurōpas zēimas kerdā!Centrālas Eurōpas daggas kerdā\x1aDēiniskas E" + + "urōpas kerdā\"Dēiniskas Eurōpas zēimas kerdā!Dēiniskas Eurōpas daggas ke" + + "rdā\x1bWakkariskas Eurōpas kerdā#Wakkariskas Eurōpas zēimas kerdā\"Wakka" + + "riskas Eurōpas daggas kerdā\x10Greenwich kerdā\x15EEEE د G y د MMMM d" + + "\x10د G y د MMMM d\x0bGGGGG y/M/d\x0aجنوري\x0cفبروري\x08مارچ\x0aاپریل" + + "\x04مۍ\x06جون\x0aجولای\x08اگست\x0eسېپتمبر\x0cاکتوبر\x0aنومبر\x0aدسمبر" + + "\x0cسپتمبر\x0eفېبروري\x08يونۍ\x08دونۍ\x0aدرېنۍ\x0aڅلرنۍ\x0cپينځنۍ\x08جمع" + + "ه\x08اونۍ\x13لومړۍ ربعه\x0f۲مه ربعه\x0f۳مه ربعه\x0f۴مه ربعه\x06غ.م.\x06" + + "غ.و.#له میلاد څخه وړاندې\x1bله عام پېر دمخه#له میلاد څخه وروسته\x02CE" + + "\x1cله میلاد وړاندې\x03م.\x13EEEE د y د MMMM d\x0eد y د MMMM d\x0aچيترا" + + "\x0cويساکا\x0cجياستا\x0cاسادها\x0eسراوانا\x0cبهادرا\x0cاسوينا\x0eکارتيکا" + + "\x14اگراهايانا\x0aپاوسا\x08مگها\x10پهالگونا\x08ساکا\x06وری\x08غویی\x0eغب" + + "رگولی\x0aچنگاښ\x08زمری\x06وږی\x06تله\x06لړم\x0aلیندۍ\x0cمرغومی\x0cسلواغ" + + "ه\x04کب\x06پېر\x06کال\x10پروسږکال\x0aسږکال\x0bبل کال\x14په {0} کال کې" + + "\x1aپه {0} کالونو کې\x13{0} کال مخکې\x15{0} کاله مخکې\x0aمياشت\x18د مياش" + + "تې اونۍ\x06ورځ\x10د کال ورځ\x12د اونۍ ورځ\x1fد مياشتې اونۍ ورځ\x0fورځ ش" + + "ېبه\x0aدقيقه\x0aثانيه\x0fوخت سيمه\x12د {0} په وخت\x18{0} رڼا ورځ وخت" + + "\x17{0} معیاری وخت\"همغږۍ نړیواله موده!د انګلستان سمر وخت\x1eایراني معیا" + + "ري وخ\x19افغانستان وخت\x1eمنځنی افريقا وخت\x1cختيځ افريقا وخت+جنوبي افر" + + "يقا معياري وخت لوېديځ افريقا وخت1لویدیځ افریقایي معیاري وخت0د افریقا اف" + + "ریقا لویدیځ وخت\x13الاسکا وخت الاسکا معياري وخت/د الاسکا د ورځې روښانه " + + "کول\x18الماتا په وخت\x09∅∅∅\x15ایمیزون وخت\"ایمیزون معیاری وخت\x1eایمیز" + + "ون اوړي وخت\x11مرکزي وخت\x1eمرکزي معياري وخت!مرکزي رڼا ورځې وخت\x0fختیځ" + + " وخت\x1cختيځ معياري وخت\"ختيځ د رڼا ورځې وخت\x13د غره د وخت\x1dد غره معي" + + "اري وخت#د غره د رڼا ورځې وخت\x11پیسفک وخت!د پیسفک معياري وخت$پیسفک د رڼ" + + "ا ورځې وخت\x12د اپیا وخت\x1fد اپیا معياري وخت\x1eد اپیا د ورځې وخت\x0fع" + + "ربي وخت\x1cعربي معیاري وخت!د عربي ورځپاڼې وخت\x17ارجنټاین وخت$ارجنټاین " + + "معیاری وخت ارجنټاین اوړي وخت غربي ارجنټاین وخت-غربي ارجنټاین معیاری وخت" + + ")غربي ارجنټاین اوړي وخت\x17ارمنستان وخت$ارمنستان معياري وخت\x1eارمنستان " + + "سمر وخت\x1aاتلانتیک د وخت$اتلانتیک معياري وخت*اتلانتیک د رڼا ورځې وخت" + + "\x1dد مرکزي آسټر وخت4د اسټرالیا مرکزي مرکزي معیار0د آسټرالیا مرکزي مرکزی" + + " ورځ2د آسټرالیا مرکزی لویدیځ وخت?د آسټرالیا مرکزي لویدیځ معیاري وختGد آس" + + "ټرالیا مرکزي مرکزی لویدیځ د وخت وخت\x1bد ختیځ آسټر وخت0د آسټرالیا ختیځ " + + "معیاري وخت5د اسټرالیا ختیځ ختیځ ورځی وخت'د لویدیځ آسټرالیا وخت+د اسټرال" + + "یا لویدیز معیار3د اسټرالیا لویدیځ د ورځې وخت\x1cد آذربايجان وخت&آذربايج" + + "ان معياري وخت%د اذرباییجان سمر وخت\x0bAzores Time\x1aAzores معياري وخت" + + "\x14Azores سمر وخت\x18بنگله دېش وخت'د بنګلادیش معیاري وخت%د بنگله دیش د " + + "سمر وخت\x14د بوتان وخت\x15بولیویا وخت\x13برسلیا وخت برسلیا معیاری وخت" + + "\x1cبرسلیا اوړي وخت!د بروني درسلام وخت\x16کیپ وردډ وخت#کیپ وردډ معياري و" + + "خت\x1dکیپ وردډ سمر وخت\x1eچمارو معياري وخت\x11چامام وخت\x1fد چمتم معيار" + + "ي وخت\x1bد چتام ورځی وخت\x0dچلی وخت\x1aچلی معیاری وخت\x16چلی اوړي وخت" + + "\x0dچين وخت\x1aچین معیاري وخت#د چين د رڼا ورځې وخت\x19چوئیبیلسن وخت&چوئی" + + "بیلسن معیاری وخت\"چوئیبیلسن اوړي وخت\x1dد کریسټ ټاپو وخت\x1fد کوکوز ټاپ" + + "وز وخت\x15کولمبیا وخت\"کولمبیا معیاری وخت\x1eکولمبیا اوړي وخت\x1bد کوک " + + "ټاپوز وخت(د کوک ټاپوز معياري وخت)د کوک ټاپو نیمه سمر وخت\x14کیوبا د وخت" + + "\x1eکیوبا معياري وخت$کیوبا د رڼا ورځې وخت\x0fدیوس وخت\"ډومونټ-ډیریلوی وخ" + + "ت#ختیځ ختیځ تیمور وخت\x1aايستر ټاپو وخت'ايستر ټاپو معياري وخت#ايستر ټاپ" + + "و اوړي وخت\x18د اکوادور وخت\x1cمنځنۍ اروپا وخت,د مرکزي اروپا معیاري وخت" + + "+د مرکزي اروپا د اوړي وخت\x15Eastern European Time\x1eEastern European S" + + "tandard Time\x1cEastern European Summer Time*نور ختیځ ختیځ اروپا وخت لوې" + + "ديزې اروپا وخت.د لودیځې اروپا معیاري وخت-د لودیځې اورپا د اوړي وخت\x1fد" + + " فوکلنډ ټاپو وخت,د فوکلنډ ټاپو معیاری وخت(د فوکلنډ ټاپو اوړي وخت\x0dفجی " + + "وخت\x1dد فجی معياري وخت\x17د فجی سمر وخت!د فرانسوي ګانا وخت5د فرانسې سو" + + "یل او انټارټيک وخت\x15ګالپګوس وخت\x18د ګیمبریر وخت\x13جورجیا وخت جورجیا" + + " معیاري وخت د جورجیا د سمر وخت!د ګیلبرټ جزیره وخت\x15گرينويچ وخت#د ختیځ " + + "ګرینلینډ وخت0د ختیځ ګرینلینډ معياري وخت,د ختیځ ګرینلینډ اوړي وخت$لویدیځ" + + " ګرینلینډ وخت1لویدیځ ګرینلینډ معياري وخت-لویدیځ ګرینلینډ اوړي وخت\x1fد خ" + + "لیج معياري وخت\x18د ګوانانا وخت هوایی الیوتین وخت-هوایی الیوتین معیاری " + + "وخت0هوایی الیوتین رڼا ورځې وخت\x1eد هانګ کانګ د وخت(د هانګ کانګ معياري " + + "وخت$د هانګ کانګ اوړي وخت\x0fهاوډ وخت\x1cهاوډ معیاری وخت\x18هاوډ اوړي وخ" + + "ت\x1dد هند معیاري وخت\x1bد هند سمندر وخت\x1aد اندوچینا وخت'د اندونیزیا " + + "مرکزي وخت\x1cد اندونیزیا وخت)د لویدیځ اندونیزیا وخت\x14د ایران وخت!د ای" + + "ران معياري وخت د ایران د ورځې وخت\x16د ارکوټس وخت#د ارکوټس معياري وخت" + + "\x1fد ایککوټس سمر وخت\x18د اسراییل وخت%د اسراییل معياري وخت&د اسراییلو د" + + " ورځې وخت\x14جاپان د وخت!د جاپان معياري وخت$جاپان د رڼا ورځې وخت&ختیځ د " + + "قزاقستان د وخت$لویدیځ قزاقستان وخت\x11کوريا وخت\x1eکوريا معياري وخت,د ک" + + "وریا د ورځې د ورځې وخت\x13کوسیرا وخت\x1dکریسایویسسک وخت,کریسایویارسک مع" + + "یاري وخت&کریسایویارسک سمر وخت\x19کرغیزستان وخت\x1fد کرښې ټاټوبي وخت\x12" + + "رب های وخت\x1fرب های معیاري وخت(رب هاو د ورځې د رڼا وخت\x1fد مکاکري ټاپ" + + "و وخت\x14د مګدان وخت میګډان معياري وخت\x19د مګمان سمر وخ\x17ملائیشیا وخ" + + "ت\x13مالديف وخت\x13مارکسس وخت\x1cمارشیل ټاپو وخت\x15ماریسیس وخت\"ماریشی" + + "س معياري وخت\x1cماریسیس سمر وخت\x13دسونسن وخت,د شمال لویدیځ مکسیکو وخت9" + + "د شمال لویدیځ مکسیکو معیاري وخت<د شمال لویدیځ مکسیکو رڼا ورځې وخت\x1eمک" + + "سیکن پیسفک وخت+مکسیکن پیسفک معیاری وخت.مکسیکن پیسفک رڼا ورځې وخت\x19دلا" + + "نانباټ وخت%اولان بټر معیاري وخت\x1fدلان بیتر سمر وخت\x11ماسکو وخت\x1eما" + + "سکو معياري وخت\x18ماسکو سمر وخت\x18د میانمار وخت\x11ناورو وخت\x11نیپال " + + "وخت#د نیو کالیډونیا وخت-نوی کالیډونیا معياري وخت*د نیو کالیډونیا سمر وخ" + + "ت\x1dد نیوزی لینڈ وخت*د نیوزی لینڈ معیاري وخت3د نیوزی لینڈ د ورځې د رڼا" + + " وخت!د نوي فیلډلینډ وخت.د نوي فیلډلینډ معیاری وخت1د نوي فیلډلینډ رڼا ورځ" + + "ې وخت\x0fنییو وخت!د نورفکاس ټاپو وخت)فرنانڈو دي نورونها وخت6فرنانڈو دي " + + "نورونها معیاری وخت2فرنانڈو دي نورونھا اوړي وخت\x1eد نووسوسبیرک وخت+د نو" + + "وسوسبیرک معياري وخت\"نووسوسبیرک سمر وخت\x0fاوزک وخت\x1fد اوزک معياري وخ" + + "ت\x18اوسمک سمر وخت\x18د پاکستان وخت%د پاکستان معیاري وخت\x1fد پاکستان س" + + "مر وخت\x11پالاو وخت\x1fپاپوا نیو ګنی وخت\x1aپاراګوای د وخت$پیراګوای معي" + + "اري وخت پاراګوای اوړي وخت\x0fپیرو وخت\x1cپیرو معياري وخت\x18پیرو اوړي و" + + "خت\x14د فلپین وخت\x1eفلپین معياري وخت\x1bد فلپین سمر وخت\x1dد فینکس ټاپ" + + "و وخت*سینټ پییرا و ميکلين وخت7سینټ پییرا و ميکلين معیاری وخت:سینټ پییرا" + + " و ميکلين رڼا ورځې وخت\x0fPitcairn وخت\x11پونپپ وخت\x17پیونگګنګ وخت\x16د" + + " غبرګون وخت\x16د رورېټا وخت\x14د سخنین وخت\x1eسخلین معياري وخت\x1bد سخلی" + + "ن سمر وخت\x0fسموا وخت\x1cسموډ معياري وخت+د سموا د ورځې روښانه کول\x13سی" + + "چیلس وخت%د سنګاپور معیاري وخت'د سليمان سلیمان ټایمز\x1fد سویل جورجیا وخ" + + "ت\x15سورینام وخت\x0fسیوا وخت\x13ټیټيټي وخت\x0fتاپي وخت\x1cتاپي معياري و" + + "خت%تاپي د ورځې د رڼا وخت\x1aتاجکستان د وخت\x15توکیلاو وخت\x11ټونګا وخت" + + "\x1fد ټونګ معياري وخت\x19د ټونګ سمر وخت\x12د چوکو وخت\x1bترکمانستان وخت&" + + "ترکمنستان معياري وخت\"ترکمنستان اوړي وخت\x13توولول وخت\x17یوروګوای وخت$" + + "یوروګوای معياري وخت یوروګوای اوړي وخت\x1aد ازبکستان وخت$ازبکستان معياري" + + " وخت ازبکستان اوړي وخت\x14د وناتو وخت!د وناتو معياري وخت\x1aوانوات سمر و" + + "خت\x17وینزویلا وخت\x1bولادیوستاک وخت(ولادیوستکو معياري وخت ولادیوستک سم" + + "ر وخت\x18د ولګاجرا وخت\"دګګراډر معياري وخت\x1fد ولگګراډ سمر وخت\x16د وا" + + "ستوک وخت\x14دک ټاپو وخت#والیس او فوتونا وخت\x13داککوس وخت\"داککوسک معيا" + + "ري وخت\x1cداککوسک سمر وخت د یاراتینګینګ وخت3د یاراتینګینبرین معياري وخت" + + ")د یاراتینګینګ ګرم موسم\x04AZOT\x05AZOST\x03CET\x04CEST\x03EET\x04EEST" + + "\x03WET\x04WEST\x03GMT\x0eفيبروري\x0aاپريل\x06مئي\x0cجولاءِ\x08آگسٽ\x0eس" + + "يپٽمبر\x0cآڪٽوبر\x0aڊسمبر\x03GMT\x03GMT\x03GMT\x03GMT" + +var bucket88 string = "" + // Size: 11985 bytes + "\x06Mês 1\x06Mês 2\x06Mês 3\x06Mês 4\x06Mês 5\x06Mês 6\x06Mês 7\x06Mês 8" + + "\x06Mês 9\x07Mês 10\x07Mês 11\x07Mês 12\x18EEEE, d 'de' MMMM 'de' U\x12d" + + " 'de' MMMM 'de' U\x07dd/MM U\x07janeiro\x09fevereiro\x06março\x05abril" + + "\x04maio\x05junho\x05julho\x06agosto\x08setembro\x07outubro\x08novembro" + + "\x08dezembro\x0ameia-noite\x08meio-dia\x09da manhã\x06manhã\x12antes da " + + "Era Comum\x09Era Comum\x11d 'de' MMM 'de' y\x0dAntes da R.C.\x06Minguo" + + "\x0bano passado\x08este ano\x0cpróximo ano\x0aem {0} ano\x0bem {0} anos" + + "\x0e{0} ano atrás\x0f{0} anos atrás\x11último trimestre\x0eeste trimestr" + + "e\x12próximo trimestre\x10em {0} trimestre\x11em {0} trimestres\x14{0} t" + + "rimestre atrás\x15{0} trimestres atrás\x0cem {0} trim.\x10{0} trim. atrá" + + "s\x0cmês passado\x09este mês\x0dpróximo mês\x0bem {0} mês\x0cem {0} mese" + + "s\x0f{0} mês atrás\x10{0} meses atrás\x0esemana passada\x0besta semana" + + "\x0fpróxima semana\x0dem {0} semana\x0eem {0} semanas\x11{0} semana atrá" + + "s\x12{0} semanas atrás\x0fa semana de {0}\x0bem {0} sem.\x0f{0} sem. atr" + + "ás\x0esemana do mês\x0csem. do mês\x09anteontem\x05ontem\x04hoje\x07ama" + + "nhã\x11depois de amanhã\x0aem {0} dia\x0bem {0} dias\x0e{0} dia atrás" + + "\x0f{0} dias atrás\x0adia do ano\x0ddia da semana\x0bdia da sem.\x15dia " + + "da semana do mês\x13dia da sem. do mês\x0fdomingo passado\x0ceste doming" + + "o\x10próximo domingo\x0eem {0} domingo\x0fem {0} domingos\x12{0} domingo" + + " atrás\x13{0} domingos atrás\x0cdom. passado\x09este dom.\x0dpróximo dom" + + ".\x0bem {0} dom.\x0f{0} dom. atrás\x15segunda-feira passada\x12esta segu" + + "nda-feira\x16próxima segunda-feira\x14em {0} segunda-feira\x16em {0} seg" + + "undas-feiras\x18{0} segunda-feira atrás\x1b{{0} segundas-feiras atrás" + + "\x0cseg. passada\x09esta seg.\x0dpróxima seg.\x0bem {0} seg.\x0f{0} seg." + + " atrás\x17há {0} segundas-feiras\x14terça-feira passada\x11esta terça-fe" + + "ira\x15próxima terça-feira\x13em {0} terça-feira\x15em {0} terças-feiras" + + "\x14há {0} terça-feira\x16há {0} terças-feiras\x0cter. passada\x09esta t" + + "er.\x0dpróxima ter.\x14quarta-feira passada\x11esta quarta-feira\x15próx" + + "ima quarta-feira\x15em {0} quartas-feiras\x16há {0} quartas-feiras\x0cqu" + + "a. passada\x09esta qua.\x0dpróxima qua.\x14quinta-feira passada\x11esta " + + "quinta-feira\x15próxima quinta-feira\x15em {0} quintas-feiras\x16há {0} " + + "quintas-feiras\x0cqui. passada\x09esta qui.\x0apróx. qui\x13sexta-feira " + + "passada\x10esta sexta-feira\x14próxima sexta-feira\x14em {0} sextas-feir" + + "as\x15há {0} sextas-feiras\x0csex. passada\x09esta sex.\x0dpróxima sex." + + "\x0fsábado passado\x0ceste sábado\x10próximo sábado\x0eem {0} sábado\x0f" + + "em {0} sábados\x12{0} sábado atrás\x13{0} sábados atrás\x0dsáb. passado" + + "\x0aeste sáb.\x0epróximo sáb.\x0cem {0} sáb.\x10{0} sáb. atrás\x0bem {0}" + + " hora\x0cem {0} horas\x0f{0} hora atrás\x10{0} horas atrás\x08em {0} h" + + "\x0c{0} h atrás\x0dem {0} minuto\x0eem {0} minutos\x11{0} minuto atrás" + + "\x12{0} minutos atrás\x0bem {0} min.\x0f{0} min. atrás\x0eem {0} segundo" + + "\x0fem {0} segundos\x12{0} segundo atrás\x13{0} segundos atrás\x0dfuso h" + + "orário\x0cHorário {0}\x17Horário de Verão: {0}\x15Horário Padrão: {0}" + + "\x1dHorário Universal Coordenado\x1dHorário de Verão Britânico\x1bHorári" + + "o Padrão da Irlanda\x10Horário do Acre\x18Horário Padrão do Acre\x1aHorá" + + "rio de Verão do Acre\x18Horário do Afeganistão\x1bHorário da África Cent" + + "ral\x1cHorário da África Oriental\x1aHorário da África do Sul\x1dHorário" + + " da África Ocidental%Horário Padrão da África Ocidental'Horário de Verão" + + " da África Ocidental\x12Horário do Alasca\x1aHorário Padrão do Alasca" + + "\x1cHorário de Verão do Alasca\x12Horário do Almaty\x1aHorário Padrão do" + + " Almaty\x1cHorário de Verão do Almaty\x14Horário do Amazonas\x1cHorário " + + "Padrão do Amazonas\x1eHorário de Verão do Amazonas\x10Horário Central" + + "\x18Horário Padrão Central\x1aHorário de Verão Central\x11Horário do Les" + + "te\x19Horário Padrão do Leste\x1bHorário de Verão do Leste\x16Horário da" + + "s Montanhas\x1eHorário Padrão das Montanhas Horário de Verão das Montanh" + + "as\x15Horário do Pacífico\x1dHorário Padrão do Pacífico\x1fHorário de Ve" + + "rão do Pacífico\x12Horário de Anadyr\x1aHorário Padrão do Anadyr\x1cHorá" + + "rio de Verão do Anadyr\x10Horário de Apia\x18Horário Padrão de Apia\x1aH" + + "orário de Verão de Apia\x11Horário do Aqtau\x19Horário Padrão do Aqtau" + + "\x1bHorário de Verão do Aqtau\x12Horário do Aqtobe\x1aHorário Padrão do " + + "Aqtobe\x1cHorário de Verão do Aqtobe\x13Horário da Arábia\x1bHorário Pad" + + "rão da Arábia\x1dHorário de Verão da Arábia\x15Horário da Argentina\x1dH" + + "orário Padrão da Argentina\x1fHorário de Verão da Argentina\x1fHorário d" + + "a Argentina Ocidental'Horário Padrão da Argentina Ocidental)Horário de V" + + "erão da Argentina Ocidental\x14Horário da Armênia\x1cHorário Padrão da A" + + "rmênia\x1eHorário de Verão da Armênia\x16Horário do Atlântico\x1eHorário" + + " Padrão do Atlântico Horário de Verão do Atlântico\x1eHorário da Austrál" + + "ia Central&Horário Padrão da Austrália Central(Horário de Verão da Austr" + + "ália Central'Horário da Austrália Centro-Ocidental/Horário Padrão da Au" + + "strália Centro-Ocidental1Horário de Verão da Austrália Centro-Ocidental" + + "\x1fHorário da Austrália Oriental'Horário Padrão da Austrália Oriental)H" + + "orário de Verão da Austrália Oriental Horário da Austrália Ocidental(Hor" + + "ário Padrão da Austrália Ocidental*Horário de Verão da Austrália Ociden" + + "tal\x18Horário do Arzeibaijão Horário Padrão do Arzeibaijão\"Horário de " + + "Verão do Arzeibaijão\x14Horário dos Açores\x1cHorário Padrão dos Açores" + + "\x1eHorário de Verão dos Açores\x16Horário de Bangladesh\x1eHorário Padr" + + "ão de Bangladesh Horário de Verão de Bangladesh\x12Horário do Butão\x14" + + "Horário da Bolívia\x15Horário de Brasília\x1dHorário Padrão de Brasília" + + "\x1fHorário de Verão de Brasília\x1dHorário de Brunei Darussalam\x16Horá" + + "rio de Cabo Verde\x1eHorário Padrão de Cabo Verde Horário de Verão de Ca" + + "bo Verde\x14Horário de Chamorro\x13Horário de Chatham\x1bHorário Padrão " + + "de Chatham\x1dHorário de Verão de Chatham\x11Horário do Chile\x19Horário" + + " Padrão do Chile\x1bHorário de Verão do Chile\x11Horário da China\x19Hor" + + "ário Padrão da China\x1bHorário de Verão da China\x16Horário de Choibal" + + "san\x1eHorário Padrão de Choibalsan Horário de Verão de Choibalsan\x1aHo" + + "rário da Ilha Christmas\x17Horário das Ilhas Coco\x15Horário da Colômbia" + + "\x1dHorário Padrão da Colômbia\x1fHorário de Verão da Colômbia\x17Horári" + + "o das Ilhas Cook\x1fHorário Padrão das Ilhas Cook&Meio Horário de Verão " + + "das Ilhas Cook\x10Horário de Cuba\x18Horário Padrão de Cuba\x1aHorário d" + + "e Verão de Cuba\x11Horário de Davis\x1eHorário de Dumont-d’Urville\x17Ho" + + "rário do Timor-Leste\x1bHorário da Ilha de Páscoa#Horário Padrão da Ilha" + + " de Páscoa%Horário de Verão da Ilha de Páscoa\x13Horário do Equador\x1aH" + + "orário da Europa Central\"Horário Padrão da Europa Central$Horário de Ve" + + "rão da Europa Central\x1bHorário da Europa Oriental#Horário Padrão da Eu" + + "ropa Oriental%Horário de Verão da Europa Oriental!Horário do Extremo Les" + + "te Europeu\x1cHorário da Europa Ocidental$Horário Padrão da Europa Ocide" + + "ntal&Horário de Verão da Europa Ocidental\x1bHorário das Ilhas Malvinas#" + + "Horário Padrão das Ilhas Malvinas%Horário de Verão das Ilhas Malvinas" + + "\x10Horário de Fiji\x18Horário Padrão de Fiji\x1aHorário de Verão de Fij" + + "i\x1bHorário da Guiana Francesa*Horário da Antártida e do Sul da França" + + "\x16Horário de Galápagos\x13Horário de Gambier\x14Horário da Geórgia\x1c" + + "Horário Padrão da Geórgia\x1eHorário de Verão da Geórgia\x1bHorário das " + + "Ilhas Gilberto\"Horário do Meridiano de Greenwich Horário da Groelândia " + + "Oriental(Horário Padrão da Groelândia Oriental*Horário de Verão da Groel" + + "ândia Oriental\"Horário da Groenlândia Ocidental*Horário Padrão da Groe" + + "nlândia Ocidental,Horário de Verão da Groenlândia Ocidental\x18Horário P" + + "adrão de Guam\x11Horário do Golfo\x12Horário da Guiana\"Horário do Havaí" + + " e Ilhas Aleutas*Horário Padrão do Havaí e Ilhas Aleutas,Horário de Verã" + + "o do Havaí e Ilhas Aleutas\x15Horário de Hong Kong\x1dHorário Padrão de " + + "Hong Kong\x1fHorário de Verão de Hong Kong\x10Horário de Hovd\x18Horário" + + " Padrão de Hovd\x1aHorário de Verão de Hovd\x1aHorário Padrão da Índia" + + "\x1aHorário do Oceano Índico\x15Horário da Indochina\x1eHorário da Indon" + + "ésia Central\x1fHorário da Indonésia Oriental Horário da Indonésia Ocid" + + "ental\x10Horário do Irã\x18Horário Padrão do Irã\x1aHorário de Verão do " + + "Irã\x13Horário de Irkutsk\x1bHorário Padrão de Irkutsk\x1dHorário de Ver" + + "ão de Irkutsk\x12Horário de Israel\x1aHorário Padrão de Israel\x1cHorár" + + "io de Verão de Israel\x12Horário do Japão\x1aHorário Padrão do Japão\x1c" + + "Horário de Verão do Japão$Horário de Petropavlovsk-Kamchatski,Horário Pa" + + "drão de Petropavlovsk-Kamchatski.Horário de Verão de Petropavlovsk-Kamch" + + "atski!Horário do Casaquistão Oriental\"Horário do Casaquistão Ocidental" + + "\x12Horário da Coreia\x1aHorário Padrão da Coreia\x1cHorário de Verão da" + + " Coreia\x12Horário de Kosrae\x17Horário de Krasnoyarsk\x1fHorário Padrão" + + " de Krasnoyarsk!Horário de Verão de Krasnoyarsk\x18Horário do Quirguistã" + + "o\x11Horário de Lanka\x17Horário das Ilhas Line\x15Horário de Lord Howe" + + "\x1dHorário Padrão de Lord Howe\x1fHorário de Verão de Lord Howe\x11Horá" + + "rio de Macau\x19Horário Padrão de Macau\x1bHorário de Verão de Macau\x1a" + + "Horário da Ilha Macquarie\x13Horário de Magadan\x1bHorário Padrão de Mag" + + "adan\x1dHorário de Verão de Magadan\x14Horário da Malásia\x1bHorário das" + + " Ilhas Maldivas\x16Horário das Marquesas\x1bHorário das Ilhas Marshall" + + "\x15Horário de Maurício\x1dHorário Padrão de Maurício\x1fHorário de Verã" + + "o de Maurício\x12Horário de Mawson\x1fHorário do Noroeste do México'Horá" + + "rio Padrão do Noroeste do México)Horário de Verão do Noroeste do México" + + "\x1eHorário do Pacífico Mexicano&Horário Padrão do Pacífico Mexicano(Hor" + + "ário de Verão do Pacífico Mexicano\x16Horário de Ulan Bator\x1eHorário " + + "Padrão de Ulan Bator Horário de Verão de Ulan Bator\x12Horário de Moscou" + + "\x1aHorário Padrão de Moscou\x1cHorário de Verão de Moscou\x13Horário de" + + " Mianmar\x11Horário de Nauru\x11Horário do Nepal\x1bHorário da Nova Cale" + + "dônia#Horário Padrão da Nova Caledônia%Horário de Verão da Nova Caledôni" + + "a\x1aHorário da Nova Zelândia\"Horário Padrão da Nova Zelândia$Horário d" + + "e Verão da Nova Zelândia\x16Horário da Terra Nova\x1eHorário Padrão da T" + + "erra Nova Horário de Verão da Terra Nova\x10Horário de Niue\x18Horário d" + + "a Ilha Norfolk\x1fHorário de Fernando de Noronha'Horário Padrão de Ferna" + + "ndo de Noronha)Horário de Verão de Fernando de Noronha#Horário das Ilhas" + + " Mariana do Norte\x17Horário de Novosibirsk\x1fHorário Padrão de Novosib" + + "irsk!Horário de Verão de Novosibirsk\x10Horário de Omsk\x18Horário Padrã" + + "o de Omsk\x1aHorário de Verão de Omsk\x16Horário do Paquistão\x1eHorário" + + " Padrão do Paquistão Horário de Verão do Paquistão\x11Horário de Palau" + + "\x1dHorário de Papua Nova Guiné\x14Horário do Paraguai\x1cHorário Padrão" + + " do Paraguai\x1eHorário de Verão do Paraguai\x10Horário do Peru\x18Horár" + + "io Padrão do Peru\x1aHorário de Verão do Peru\x16Horário das Filipinas" + + "\x1eHorário Padrão das Filipinas Horário de Verão das Filipinas\x19Horár" + + "io das Ilhas Fênix#Horário de Saint Pierre e Miquelon+Horário Padrão de " + + "Saint Pierre e Miquelon-Horário de Verão de Saint Pierre e Miquelon\x14H" + + "orário de Pitcairn\x12Horário de Ponape\x15Horário de Pyongyang\x15Horár" + + "io de Qyzylorda\x1dHorário Padrão de Qyzylorda\x1fHorário de Verão de Qy" + + "zylorda\x14Horário de Reunião\x13Horário de Rothera\x14Horário de Sacali" + + "na\x1cHorário Padrão de Sacalina\x1eHorário de Verão de Sacalina\x12Horá" + + "rio de Samara\x1aHorário Padrão de Samara\x1cHorário de Verão de Samara" + + "\x11Horário de Samoa\x19Horário Padrão de Samoa\x1bHorário de Verão de S" + + "amoa\x15Horário de Seicheles\x1dHorário Padrão de Cingapura\x1bHorário d" + + "as Ilhas Salomão\x1bHorário da Geórgia do Sul\x14Horário do Suriname\x11" + + "Horário de Syowa\x11Horário do Taiti\x12Horário de Taipei\x1aHorário Pad" + + "rão de Taipei\x1cHorário de Verão de Taipei\x18Horário do Tajiquistão" + + "\x13Horário de Tokelau\x11Horário de Tonga\x19Horário Padrão de Tonga" + + "\x1bHorário de Verão de Tonga\x11Horário de Chuuk\x1aHorário do Turcomen" + + "istão\"Horário Padrão do Turcomenistão$Horário de Verão do Turcomenistão" + + "\x12Horário de Tuvalu\x13Horário do Uruguai\x1bHorário Padrão do Uruguai" + + "\x1dHorário de Verão do Uruguai\x18Horário do Uzbequistão Horário Padrão" + + " do Uzbequistão\"Horário de Verão do Uzbequistão\x13Horário de Vanuatu" + + "\x1bHorário Padrão de Vanuatu\x1dHorário de Verão de Vanuatu\x15Horário " + + "da Venezuela\x17Horário de Vladivostok\x1fHorário Padrão de Vladivostok!" + + "Horário de Verão de Vladivostok\x16Horário de Volgogrado\x1eHorário Padr" + + "ão de Volgogrado Horário de Verão de Volgogrado\x12Horário de Vostok" + + "\x17Horário das Ilhas Wake\x1bHorário de Wallis e Futuna\x13Horário de Y" + + "akutsk\x1bHorário Padrão de Yakutsk\x1dHorário de Verão de Yakutsk\x19Ho" + + "rário de Ecaterimburgo!Horário Padrão de Ecaterimburgo#Horário de Verão " + + "de Ecaterimburgo\x0dpróxima qui." + +var bucket89 string = "" + // Size: 9914 bytes + "\x11d 'de' MMM 'de' U\x0d{1} 'às' {0}\x06a.E.C.\x04E.C.\x0bhá {0} ano" + + "\x0chá {0} anos\x08+{0} ano\x09+{0} anos\x08-{0} ano\x09-{0} anos\x11tri" + + "mestre passado\x0eeste trimestre\x12próximo trimestre\x11há {0} trimestr" + + "e\x12há {0} trimestres\x0dtrim. passado\x0aeste trim.\x0epróximo trim." + + "\x0dhá {0} trim.\x12dentro de {0} mês\x13dentro de {0} meses\x0chá {0} m" + + "ês\x0dhá {0} meses\x09+{0} mês\x0a+{0} meses\x09-{0} mês\x0a-{0} meses" + + "\x0ehá {0} semana\x0fhá {0} semanas\x0chá {0} sem.\x0da sem. de {0}\x11d" + + "entro de {0} dia\x12dentro de {0} dias\x0bhá {0} dia\x0chá {0} dias\x08+" + + "{0} dia\x09+{0} dias\x0fhá {0} domingo\x10há {0} domingos\x0chá {0} dom." + + "\x1bdentro de {0} segunda-feira\x1ddentro de {0} segundas-feiras\x0fsegu" + + "nda passada\x0cesta segunda\x10próxima segunda\x15dentro de {0} segunda" + + "\x16dentro de {0} segundas\x0fhá {0} segunda\x10há {0} segundas\x0chá {0" + + "} seg.\x1adentro de {0} terça-feira\x1cdentro de {0} terças-feiras\x0ete" + + "rça passada\x0besta terça\x0fpróxima terça\x14dentro de {0} terça\x15den" + + "tro de {0} terças\x0ehá {0} terça\x0fhá {0} terças\x12dentro de {0} ter." + + "\x0chá {0} ter.\x1adentro de {0} quarta-feira\x1cdentro de {0} quartas-f" + + "eiras\x14há {0} quarta-feira\x16há {0} quartas-feiras\x0equarta passada" + + "\x0besta quarta\x0fpróxima quarta\x14dentro de {0} quarta\x15dentro de {" + + "0} quartas\x0ehá {0} quarta\x0fhá {0} quartas\x12dentro de {0} qua.\x0ch" + + "á {0} qua.\x1adentro de {0} quinta-feira\x1cdentro de {0} quintas-feira" + + "s\x14há {0} quinta-feira\x16há {0} quintas-feiras\x0equinta passada\x0be" + + "sta quinta\x0fpróxima quinta\x14dentro de {0} quinta\x15dentro de {0} qu" + + "intas\x0ehá {0} quinta\x0fhá {0} quintas\x12dentro de {0} qui.\x0chá {0}" + + " qui.\x19dentro de {0} sexta-feira\x1bdentro de {0} sextas-feiras\x13há " + + "{0} sexta-feira\x15há {0} sextas-feiras\x0dsexta passada\x0aesta sexta" + + "\x0epróxima sexta\x13dentro de {0} sexta\x14dentro de {0} sextas\x0dhá {" + + "0} sexta\x0ehá {0} sextas\x12dentro de {0} sex.\x0chá {0} sex.\x0fhá {0}" + + " sábado\x10há {0} sábados\x0dhá {0} sáb.\x0chá {0} hora\x0dhá {0} horas" + + "\x09há {0} h\x0ehá {0} minuto\x0fhá {0} minutos\x0bhá {0} min\x0fhá {0} " + + "segundo\x10há {0} segundos\x09há {0} s\x19Hora Coordenada Universal\x19H" + + "ora de verão Britânica\x19Hora de verão da Irlanda\x0cHora do Acre\x14Ho" + + "ra padrão do Acre\x16Hora de verão do Acre\x14Hora do Afeganistão\x17Hor" + + "a da África Central\x18Hora da África Oriental\x16Hora da África do Sul" + + "\x19Hora da África Ocidental!Hora padrão da África Ocidental#Hora de ver" + + "ão da África Ocidental\x0eHora do Alasca\x16Hora padrão do Alasca\x18Ho" + + "ra de verão do Alasca\x0eHora de Almaty\x16Hora padrão de Almaty\x18Hora" + + " de verão de Almaty\x10Hora do Amazonas\x18Hora padrão do Amazonas\x1aHo" + + "ra de verão do Amazonas\x0cHora Central\x14Hora padrão Central\x16Hora d" + + "e verão Central\x0dHora Oriental\x15Hora padrão Oriental\x17Hora de verã" + + "o Oriental\x10Hora de Montanha\x18Hora padrão da Montanha\x1aHora de ver" + + "ão da Montanha\x11Hora do Pacífico\x19Hora padrão do Pacífico\x1bHora d" + + "e verão do Pacífico\x0eHora de Anadyr\x16Hora padrão de Anadyr\x18Hora d" + + "e verão de Anadyr\x0cHora de Apia\x14Hora padrão de Apia\x16Hora de verã" + + "o de Apia\x0dHora de Aqtau\x15Hora padrão de Aqtau\x17Hora de verão de A" + + "qtau\x0eHora de Aqtobe\x16Hora padrão de Aqtobe\x18Hora de verão de Aqto" + + "be\x0fHora da Arábia\x17Hora padrão da Arábia\x19Hora de verão da Arábia" + + "\x11Hora da Argentina\x19Hora padrão da Argentina\x1bHora de verão da Ar" + + "gentina\x1bHora da Argentina Ocidental#Hora padrão da Argentina Ocidenta" + + "l%Hora de verão da Argentina Ocidental\x10Hora da Arménia\x18Hora padrão" + + " da Arménia\x1aHora de verão da Arménia\x12Hora do Atlântico\x1aHora pad" + + "rão do Atlântico\x1cHora de verão do Atlântico\x1aHora da Austrália Cent" + + "ral\"Hora padrão da Austrália Central$Hora de verão da Austrália Central" + + "$Hora da Austrália Central Ocidental,Hora padrão da Austrália Central Oc" + + "idental.Hora de verão da Austrália Central Ocidental\x1bHora da Austráli" + + "a Oriental#Hora padrão da Austrália Oriental%Hora de verão da Austrália " + + "Oriental\x1cHora da Austrália Ocidental$Hora padrão da Austrália Ocident" + + "al&Hora de verão da Austrália Ocidental\x13Hora do Azerbaijão\x1bHora pa" + + "drão do Azerbaijão\x1dHora de verão do Azerbaijão\x10Hora dos Açores\x18" + + "Hora padrão dos Açores\x1aHora de verão dos Açores\x12Hora do Bangladesh" + + "\x1aHora padrão do Bangladesh\x1cHora de verão do Bangladesh\x0eHora do " + + "Butão\x10Hora da Bolívia\x11Hora de Brasília\x19Hora padrão de Brasília" + + "\x1bHora de verão de Brasília\x19Hora do Brunei Darussalam\x12Hora de Ca" + + "bo Verde\x1aHora padrão de Cabo Verde\x1cHora de verão de Cabo Verde\x18" + + "Hora padrão de Chamorro\x0fHora de Chatham\x17Hora padrão de Chatham\x19" + + "Hora de verão de Chatham\x0dHora do Chile\x15Hora padrão do Chile\x17Hor" + + "a de verão do Chile\x0dHora da China\x15Hora padrão da China\x17Hora de " + + "verão da China\x12Hora de Choibalsan\x1aHora padrão de Choibalsan\x1cHor" + + "a de verão de Choibalsan\x15Hora da Ilha do Natal\x14Hora das Ilhas Coco" + + "s\x11Hora da Colômbia\x19Hora padrão da Colômbia\x1bHora de verão da Col" + + "ômbia\x13Hora das Ilhas Cook\x1bHora padrão das Ilhas Cook\x1dHora de v" + + "erão das Ilhas Cook\x0cHora de Cuba\x14Hora padrão de Cuba\x16Hora de ve" + + "rão de Cuba\x0dHora de Davis\x1aHora de Dumont-d’Urville\x13Hora de Timo" + + "r Leste\x17Hora da Ilha da Páscoa\x1fHora padrão da Ilha da Páscoa!Hora " + + "de verão da Ilha da Páscoa\x0fHora do Equador\x16Hora da Europa Central" + + "\x1eHora padrão da Europa Central Hora de verão da Europa Central\x17Hor" + + "a da Europa Oriental\x1fHora padrão da Europa Oriental!Hora de verão da " + + "Europa Oriental\x1fHora do Extremo Leste da Europa\x18Hora da Europa Oci" + + "dental Hora padrão da Europa Ocidental\"Hora de verão da Europa Ocidenta" + + "l\x17Hora das Ilhas Falkland\x1fHora padrão das Ilhas Falkland!Hora de v" + + "erão das Ilhas Falkland\x0cHora de Fiji\x14Hora padrão de Fiji\x16Hora d" + + "e verão de Fiji\x17Hora da Guiana Francesa1Hora das Terras Austrais e An" + + "tárcticas Francesas\x13Hora das Galápagos\x0fHora de Gambier\x10Hora da " + + "Geórgia\x18Hora padrão da Geórgia\x1aHora de verão da Geórgia\x16Hora da" + + "s Ilhas Gilbert\x11Hora de Greenwich\x1dHora da Gronelândia Oriental%Hor" + + "a padrão da Gronelândia Oriental'Hora de verão da Gronelândia Oriental" + + "\x1eHora da Gronelândia Ocidental&Hora padrão da Gronelândia Ocidental(H" + + "ora de verão da Gronelândia Ocidental\x14Hora padrão de Guam\x15Hora pad" + + "rão do Golfo\x0eHora da Guiana\x17Hora do Havai e Aleutas\x1fHora padrão" + + " do Havai e Aleutas!Hora de verão do Havai e Aleutas\x11Hora de Hong Kon" + + "g\x19Hora padrão de Hong Kong\x1bHora de verão de Hong Kong\x0cHora de H" + + "ovd\x14Hora padrão de Hovd\x16Hora de verão de Hovd\x16Hora padrão da Ín" + + "dia\x16Hora do Oceano Índico\x11Hora da Indochina\x1aHora da Indonésia C" + + "entral\x1bHora da Indonésia Oriental\x1cHora da Indonésia Ocidental\x0dH" + + "ora do Irão\x15Hora padrão do Irão\x17Hora de verão do Irão\x0fHora de I" + + "rkutsk\x17Hora padrão de Irkutsk\x19Hora de verão de Irkutsk\x0eHora de " + + "Israel\x16Hora padrão de Israel\x18Hora de verão de Israel\x0eHora do Ja" + + "pão\x16Hora padrão do Japão\x18Hora de verão do Japão Hora de Petropavlo" + + "vsk-Kamchatski(Hora padrão de Petropavlovsk-Kamchatski*Hora de verão de " + + "Petropavlovsk-Kamchatski\x1dHora do Cazaquistão Oriental\x1eHora do Caza" + + "quistão Ocidental\x0eHora da Coreia\x16Hora padrão da Coreia\x18Hora de " + + "verão da Coreia\x0eHora de Kosrae\x13Hora de Krasnoyarsk\x1bHora padrão " + + "de Krasnoyarsk\x1dHora de verão de Krasnoyarsk\x14Hora do Quirguistão" + + "\x11Hora do Sri Lanka\x13Hora das Ilhas Line\x11Hora de Lord Howe\x19Hor" + + "a padrão de Lord Howe\x1bHora de verão de Lord Howe\x0dHora de Macau\x15" + + "Hora padrão de Macau\x17Hora de verão de Macau\x16Hora da Ilha Macquarie" + + "\x0fHora de Magadan\x17Hora padrão de Magadan\x19Hora de verão de Magada" + + "n\x10Hora da Malásia\x11Hora das Maldivas\x18Hora das Ilhas Marquesas" + + "\x17Hora das Ilhas Marshall\x11Hora da Maurícia\x19Hora padrão da Mauríc" + + "ia\x1bHora de verão da Maurícia\x0eHora de Mawson\x1bHora do Noroeste do" + + " México#Hora padrão do Noroeste do México%Hora de verão do Noroeste do M" + + "éxico\x1aHora do Pacífico Mexicano\"Hora padrão do Pacífico Mexicano$Ho" + + "ra de verão do Pacífico Mexicano\x12Hora de Ulan Bator\x1aHora padrão de" + + " Ulan Bator\x1cHora de verão de Ulan Bator\x0fHora de Moscovo\x17Hora pa" + + "drão de Moscovo\x19Hora de verão de Moscovo\x0fHora de Mianmar\x0dHora d" + + "e Nauru\x0dHora do Nepal\x17Hora da Nova Caledónia\x1fHora padrão da Nov" + + "a Caledónia!Hora de verão da Nova Caledónia\x16Hora da Nova Zelândia\x1e" + + "Hora padrão da Nova Zelândia Hora de verão da Nova Zelândia\x12Hora da T" + + "erra Nova\x1aHora padrão da Terra Nova\x1cHora de verão da Terra Nova" + + "\x0dHora de Niuê\x14Hora da Ilha Norfolk\x1bHora de Fernando de Noronha#" + + "Hora padrão de Fernando de Noronha%Hora de verão de Fernando de Noronha" + + "\x1fHora das Ilhas Mariana do Norte\x13Hora de Novosibirsk\x1bHora padrã" + + "o de Novosibirsk\x1dHora de verão de Novosibirsk\x0cHora de Omsk\x14Hora" + + " padrão de Omsk\x16Hora de verão de Omsk\x12Hora do Paquistão\x1aHora pa" + + "drão do Paquistão\x1cHora de verão do Paquistão\x0dHora de Palau\x19Hora" + + " de Papua Nova Guiné\x10Hora do Paraguai\x18Hora padrão do Paraguai\x1aH" + + "ora de verão do Paraguai\x0cHora do Peru\x14Hora padrão do Peru\x16Hora " + + "de verão do Peru\x12Hora das Filipinas\x1aHora padrão das Filipinas\x1cH" + + "ora de verão das Filipinas\x15Hora das Ilhas Fénix\x1eHora de São Pedro " + + "e Miquelão&Hora padrão de São Pedro e Miquelão(Hora de verão de São Pedr" + + "o e Miquelão\x10Hora de Pitcairn\x0eHora de Ponape\x11Hora de Pyongyang" + + "\x11Hora de Qyzylorda\x19Hora padrão de Qyzylorda\x1bHora de verão de Qy" + + "zylorda\x10Hora de Reunião\x0fHora de Rothera\x10Hora de Sacalina\x18Hor" + + "a padrão de Sacalina\x1aHora de verão de Sacalina\x0eHora de Samara\x16H" + + "ora padrão de Samara\x18Hora de verão de Samara\x0dHora de Samoa\x15Hora" + + " padrão de Samoa\x17Hora de verão de Samoa\x12Hora das Seicheles\x19Hora" + + " padrão de Singapura\x17Hora das Ilhas Salomão\x17Hora da Geórgia do Sul" + + "\x10Hora do Suriname\x0dHora de Syowa\x0dHora do Taiti\x0eHora de Taipé" + + "\x16Hora padrão de Taipé\x18Hora de verão de Taipé\x14Hora do Tajiquistã" + + "o\x0fHora de Tokelau\x0dHora de Tonga\x15Hora padrão de Tonga\x17Hora de" + + " verão de Tonga\x0dHora de Chuuk\x17Hora do Turquemenistão\x1fHora padrã" + + "o do Turquemenistão!Hora de verão do Turquemenistão\x0eHora de Tuvalu" + + "\x0fHora do Uruguai\x17Hora padrão do Uruguai\x19Hora de verão do Urugua" + + "i\x14Hora do Uzbequistão\x1cHora padrão do Uzbequistão\x1eHora de verão " + + "do Uzbequistão\x0fHora do Vanuatu\x17Hora padrão do Vanuatu\x19Hora de v" + + "erão do Vanuatu\x11Hora da Venezuela\x13Hora de Vladivostok\x1bHora padr" + + "ão de Vladivostok\x1dHora de verão de Vladivostok\x12Hora de Volgogrado" + + "\x1aHora padrão de Volgogrado\x1cHora de verão de Volgogrado\x0eHora de " + + "Vostok\x11Hora da Ilha Wake\x17Hora de Wallis e Futuna\x0fHora de Yakuts" + + "k\x17Hora padrão de Yakutsk\x19Hora de verão de Yakutsk\x15Hora de Ecate" + + "rimburgo\x1dHora padrão de Ecaterimburgo\x1fHora de verão de Ecaterimbur" + + "go" + +var bucket90 string = "" + // Size: 14336 bytes + "\x03Dom\x03Lun\x03Mar\x04Mié\x03Jue\x03Vie\x03Sab\x1bEEEE, 'ils' d 'da' " + + "MMMM y G\x0fd 'da' MMMM y G\x06schan.\x05favr.\x04mars\x04avr.\x04matg" + + "\x06zercl.\x04fan.\x05avust\x05sett.\x04oct.\x04nov.\x04dec.\x07schaner" + + "\x06favrer\x06avrigl\x09zercladur\x07fanadur\x09settember\x07october\x08" + + "november\x08december\x08dumengia\x09glindesdi\x05mardi\x07mesemna\x07gie" + + "vgia\x08venderdi\x05sonda\x0a1. quartal\x0a2. quartal\x0a3. quartal\x0a4" + + ". quartal\x0davant Cristus\x0fsuenter Cristus\x07av. Cr.\x06s. Cr.\x19EE" + + "EE, 'ils' d 'da' MMMM y\x0dd 'da' MMMM y\x05epoca\x03onn\x04mais\x04emna" + + "\x07stersas\x03ier\x02oz\x06damaun\x09puschmaun\x0edi da l’emna\x0emesad" + + "ad dal di\x03ura\x07secunda\x0ezona d’urari\x04Mut.\x04Gas.\x04Wer.\x04M" + + "at.\x04Gic.\x04Kam.\x04Nya.\x04Kan.\x04Nze.\x04Ukw.\x04Ugu.\x04Uku.\x05N" + + "zero\x08Ruhuhuma\x09Ntwarante\x09Ndamukiza\x06Rusama\x07Ruheshi\x08Mukak" + + "aro\x0aNyandagaro\x08Nyakanga\x08Gitugutu\x08Munyonyo\x08Kigarama\x03cu." + + "\x04mbe.\x04kab.\x04gtu.\x04kan.\x04gnu.\x04gnd.\x0cKu w’indwi\x0bKu wa " + + "mbere\x0cKu wa kabiri\x0cKu wa gatatu\x0aKu wa kane\x0cKu wa gatanu\x0fK" + + "u wa gatandatu\x02I1\x02I2\x02I3\x02I4\x19Igice ca mbere c’umwaka\x1aIgi" + + "ce ca kabiri c’umwaka\x1aIgice ca gatatu c’umwaka\x18Igice ca kane c’umw" + + "aka\x05Z.MU.\x05Z.MW.\x0dMbere ya Yezu\x0dNyuma ya Yezu\x05Mb.Y.\x04Ny.Y" + + "\x05Igihe\x06Ukwezi\x0dIndwi, Iyinga\x05Umusi\x0cEjo (haheze)\x08Uyu mus" + + "i\x0cEjo (hazoza)\x11Iminsi y’iyinga\x07M.s/N.s\x05Isaha\x07Umunota\x08I" + + "segonda\x11Isaha yo mukarere\x0cera budistă\x19înainte de Anno Martyrum" + + "\x13după Anno Martyrum\x07î.A.M.\x04A.M.\x16înainte de Întrupare\x10după" + + " Întrupare\x09î.Într.\x08d.Într.\x0c{1} 'la' {0}\x04ian.\x04feb.\x04mar." + + "\x04apr.\x03mai\x04iun.\x04iul.\x04aug.\x05sept.\x08ianuarie\x09februari" + + "e\x06martie\x07aprilie\x05iunie\x05iulie\x06august\x0aseptembrie\x09octo" + + "mbrie\x09noiembrie\x09decembrie\x04dum.\x04lun.\x04mie.\x03joi\x04vin." + + "\x05sâm.\x09duminică\x04luni\x06marți\x08miercuri\x03joi\x06vineri\x0asâ" + + "mbătă\x03joi\x07trim. I\x08trim. II\x09trim. III\x08trim. IV\x0ctrimestr" + + "ul I\x14trimestrul al II-lea\x15trimestrul al III-lea\x14trimestrul al I" + + "V-lea\x0emiezul nopții\x07amiază\x0adimineața\x0cdupă-amiaza\x05seara" + + "\x07noaptea\x0ala amiază\x11la miezul nopții\x13înainte de Hristos\x16în" + + "aintea erei noastre\x0ddupă Hristos\x0cera noastră\x06î.Hr.\x06î.e.n\x05" + + "d.Hr.\x04e.n.\x07Tișrei\x07Heșvan\x06Kislev\x05Tevet\x06Șevat\x06Adar I" + + "\x04Adar\x07Adar II\x05Nisan\x04Iyar\x05Sivan\x06Tammuz\x02Av\x04Elul" + + "\x04A.H.\x04A.P.\x1bînainte de Republica China\x0fRepublica China\x07î.R" + + ".C.\x04R.C.\x04eră\x0banul trecut\x0banul acesta\x0banul viitor\x0cpeste" + + " {0} an\x0dpeste {0} ani\x10peste {0} de ani\x0bacum {0} an\x0cacum {0} " + + "ani\x0facum {0} de ani\x07+{0} an\x08+{0} ani\x07-{0} an\x08-{0} ani\x09" + + "trimestru\x11trimestrul trecut\x11trimestrul acesta\x11trimestrul viitor" + + "\x13peste {0} trimestru\x13peste {0} trimestre\x16peste {0} de trimestre" + + "\x12acum {0} trimestru\x12acum {0} trimestre\x15acum {0} de trimestre" + + "\x0ctrim. trecut\x0ctrim. acesta\x0ctrim. viitor\x0fpeste {0} trim.\x0ea" + + "cum {0} trim.\x05lună\x0dluna trecută\x0cluna aceasta\x0dluna viitoare" + + "\x0fpeste {0} lună\x0epeste {0} luni\x11peste {0} de luni\x0eacum {0} lu" + + "nă\x0dacum {0} luni\x10acum {0} de luni\x0a+{0} lună\x09+{0} luni\x0a-{0" + + "} lună\x09-{0} luni\x0dsăptămână\x15săptămâna trecută\x14săptămâna aceas" + + "ta\x15săptămâna viitoare\x17peste {0} săptămână\x16peste {0} săptămâni" + + "\x19peste {0} de săptămâni\x16acum {0} săptămână\x15acum {0} săptămâni" + + "\x18acum {0} de săptămâni\x13săptămâna cu {0}\x06săpt.\x10peste {0} săpt" + + ".\x0facum {0} săpt.\x0dsăpt. cu {0}\x0b+{0} săpt.\x0b-{0} săpt.\x16săptă" + + "mâna din lună\x10săpt. din lună\x0balaltăieri\x04ieri\x03azi\x06mâine" + + "\x09poimâine\x0cpeste {0} zi\x0epeste {0} zile\x11peste {0} de zile\x0ba" + + "cum {0} zi\x0dacum {0} zile\x10acum {0} de zile\x07+{0} zi\x09+{0} zile" + + "\x07-{0} zi\x09-{0} zile\x0bziua din an\x16ziua din săptămână\x0fziua di" + + "n săpt.\x1cziua săptămânii din lună\x15ziua săpt. din lună\x11duminica t" + + "recută\x10duminica aceasta\x11duminica viitoare\"duminică, peste {0} săp" + + "tămână!duminică, peste {0} săptămâni$duminică, peste {0} de săptămâni!du" + + "minică, acum {0} săptămână duminică, acum {0} săptămâni#duminică, acum {" + + "0} de săptămâni\x0ddum. trecută\x0cdum. aceasta\x0ddum. viitoare\x1bdumi" + + "nică, peste {0} săpt.\x1aduminică, acum {0} săpt.\x0cdu. trecută\x0bdu. " + + "aceasta\x0cdu. viitoare\x0fdu. +{0} săpt.\x0fdu. -{0} săpt.\x0elunea tre" + + "cută\x0dlunea aceasta\x0elunea viitoare\x1dluni, peste {0} săptămână\x1c" + + "luni, peste {0} săptămâni\x1fluni, peste {0} de săptămâni\x1cluni, acum " + + "{0} săptămână\x1bluni, acum {0} săptămâni\x1eluni, acum {0} de săptămâni" + + "\x0dlun. trecută\x0clun. aceasta\x0dlun. viitoare\x16luni, peste {0} săp" + + "t.\x15luni, acum {0} săpt.\x0clu. trecută\x0blu. aceasta\x0clu. viitoare" + + "\x0flu. +{0} săpt.\x0flu. -{0} săpt.\x10marțea trecută\x0fmarțea aceasta" + + "\x10marțea viitoare\x1fmarți, peste {0} săptămână\x1emarți, peste {0} să" + + "ptămâni!marți, peste {0} de săptămâni\x1emarți, acum {0} săptămână\x1dma" + + "rți, acum {0} săptămâni marți, acum {0} de săptămâni\x0dmar. trecută\x0c" + + "mar. aceasta\x0dmar. viitoare\x18marți, peste {0} săpt.\x17marți, acum {" + + "0} săpt.\x0cma. trecută\x0bma. aceasta\x0cma. viitoare\x0fma. +{0} săpt." + + "\x0fma. -{0} săpt.\x12miercurea trecută\x11miercurea aceasta\x12miercure" + + "a viitoare!miercuri, peste {0} săptămână miercuri, peste {0} săptămâni#m" + + "iercuri, peste {0} de săptămâni miercuri, acum {0} săptămână\x1fmiercuri" + + ", acum {0} săptămâni\"miercuri, acum {0} de săptămâni\x0dmie. trecută" + + "\x0cmie. aceasta\x0dmie. viitoare\x1amiercuri, peste {0} săpt.\x19miercu" + + "ri, acum {0} săpt.\x0cmi. trecută\x0bmi. aceasta\x0cmi. viitoare\x0fmi. " + + "+{0} săpt.\x0fmi. -{0} săpt.\x0djoia trecută\x0cjoia aceasta\x0djoia vii" + + "toare\x1cjoi, peste {0} săptămână\x1bjoi, peste {0} săptămâni\x1ejoi, pe" + + "ste {0} de săptămâni\x1bjoi, acum {0} săptămână\x1ajoi, acum {0} săptămâ" + + "ni\x1djoi, acum {0} de săptămâni\x15joi, peste {0} săpt.\x14joi, acum {0" + + "} săpt.\x0cjo. trecută\x0bjo. aceasta\x0cjo. viitoare\x0fjo. +{0} săpt." + + "\x0fjo. -{0} săpt.\x10vinerea trecută\x0fvinerea aceasta\x10vinerea viit" + + "oare\x1fvineri, peste {0} săptămână\x1evineri, peste {0} săptămâni!viner" + + "i, peste {0} de săptămâni\x1evineri, acum {0} săptămână\x1dvineri, acum " + + "{0} săptămâni vineri, acum {0} de săptămâni\x0dvin. trecută\x0cvin. acea" + + "sta\x0dvin. viitoare\x18vineri, peste {0} săpt.\x17vineri, acum {0} săpt" + + ".\x0cvi. trecută\x0bvi. aceasta\x0cvi. viitoare\x0fvi. +{0} săpt.\x0fvi." + + " -{0} săpt.\x12sâmbăta trecută\x11sâmbăta aceasta\x12sâmbăta viitoare#sâ" + + "mbătă, peste {0} săptămână\"sâmbătă, peste {0} săptămâni%sâmbătă, peste " + + "{0} de săptămâni\"sâmbătă, acum {0} săptămână!sâmbătă, acum {0} săptămân" + + "i$sâmbătă, acum de {0} săptămâni\x0esâm. trecută\x0dsâm. aceasta\x0esâm." + + " viitoare\x1csâmbătă, peste {0} săpt.\x1bsâmbătă, acum {0} săpt.\x0dsâ. " + + "trecută\x0csâ. aceasta\x0dsâ. viitoare\x10sâ. +{0} săpt.\x10sâ. -{0} săp" + + "t.\x08a.m/p.m.\x04oră\x0bora aceasta\x0epeste {0} oră\x0dpeste {0} ore" + + "\x10peste {0} de ore\x0dacum {0} oră\x0cacum {0} ore\x0facum {0} de ore" + + "\x0bpeste {0} h\x0aacum {0} h\x0eminutul acesta\x0fpeste {0} minut\x10pe" + + "ste {0} minute\x13peste {0} de minute\x0eacum {0} minut\x0facum {0} minu" + + "te\x12acum {0} de minute\x0epeste {0} min.\x0dacum {0} min.\x08secundă" + + "\x04acum\x12peste {0} secundă\x11peste {0} secunde\x14peste {0} de secun" + + "de\x11acum {0} secundă\x10acum {0} secunde\x13acum {0} de secunde\x0epes" + + "te {0} sec.\x0dacum {0} sec.\x08fus orar\x03fus\x0bOra din {0}\x14Ora de" + + " vară din {0}\x14Ora standard din {0}\x1aTimpul universal coordonat\x17O" + + "ra de vară britanică\x17Ora de vară a Irlandei\x08Ora Acre\x11Ora standa" + + "rd Acre\x11Ora de vară Acre\x12Ora Afganistanului\x14Ora Africii Central" + + "e\x15Ora Africii Orientale\x17Ora Africii Meridionale\x17Ora Africii Occ" + + "identale\"Ora standard a Africii Occidentale\"Ora de vară a Africii Occi" + + "dentale\x0eOra din Alaska\x17Ora standard din Alaska\x17Ora de vară din " + + "Alaska\x0aOra Almaty\x13Ora standard Almaty\x13Ora de vară Almaty\x0eOra" + + " Amazonului\x19Ora standard a Amazonului\x19Ora de vară a Amazonului\x1d" + + "Ora centrală nord-americană&Ora standard centrală nord-americană&Ora de " + + "vară centrală nord-americană\x1eOra orientală nord-americană'Ora standar" + + "d orientală nord-americană'Ora de vară orientală nord-americană Ora zone" + + "i montane nord-americane.Ora standard în zona montană nord-americană.Ora" + + " de vară în zona montană nord-americană Ora zonei Pacific nord-americane" + + "-Ora standard în zona Pacific nord-americană-Ora de vară în zona Pacific" + + " nord-americană\x0eOra din Anadyr\x17Ora standard din Anadyr\x17Ora de v" + + "ară din Anadyr\x0cOra din Apia\x15Ora standard din Apia\x15Ora de vară d" + + "in Apia\x09Ora Aqtau\x12Ora standard Aqtau\x1aOra de vară a zonei Aqtau" + + "\x0aOra Aqtobe\x13Ora standard Aqtobe\x1bOra de vară a zonei Aqtobe\x0aO" + + "ra arabă\x13Ora standard arabă\x13Ora de vară arabă\x0eOra Argentinei" + + "\x19Ora standard a Argentinei\x19Ora de vară a Argentinei\x1aOra Argenti" + + "nei Occidentale%Ora standard a Argentinei Occidentale%Ora de vară a Arge" + + "ntinei Occidentale\x0cOra Armeniei\x17Ora standard a Armeniei\x17Ora de " + + "vară a Armeniei!Ora zonei Atlantic nord-americane.Ora standard în zona A" + + "tlantic nord-americană.Ora de vară în zona Atlantic nord-americană\x17Or" + + "a Australiei Centrale\"Ora standard a Australiei Centrale\"Ora de vară a" + + " Australiei Centrale\"Ora Australiei Central Occidentale-Ora standard a " + + "Australiei Central Occidentale-Ora de vară a Australiei Central Occident" + + "ale\x18Ora Australiei Orientale#Ora standard a Australiei Orientale#Ora " + + "de vară a Australiei Orientale\x1aOra Australiei Occidentale%Ora standar" + + "d a Australiei Occidentale%Ora de vară a Australiei Occidentale\x13Ora A" + + "zerbaidjanului\x1eOra standard a Azerbaidjanului\x1eOra de vară a Azerba" + + "idjanului\x0dOra din Azore\x16Ora standard din Azore\x16Ora de vară din " + + "Azore\x12Ora din Bangladesh\x1bOra standard din Bangladesh\x1bOra de var" + + "ă din Bangladesh\x0eOra Bhutanului\x0cOra Boliviei\x0dOra Brasiliei\x18" + + "Ora standard a Brasiliei\x18Ora de vară a Brasiliei\x19Ora din Brunei Da" + + "russalam\x13Ora din Capul Verde\x1cOra standard din Capul Verde\x1cOra d" + + "e vară din Capul Verde\x10Ora din Chamorro\x0fOra din Chatham\x18Ora sta" + + "ndard din Chatham\x18Ora de vară din Chatham\x0dOra din Chile\x16Ora sta" + + "ndard din Chile\x16Ora de vară din Chile\x0aOra Chinei\x15Ora standard a" + + " Chinei\x15Ora de vară a Chinei\x12Ora din Choibalsan\x1bOra standard di" + + "n Choibalsan\x1bOra de vară din Choibalsan\x18Ora din Insula Christmas" + + "\x13Ora Insulelor Cocos\x0dOra Columbiei\x18Ora standard a Columbiei\x18" + + "Ora de vară a Columbiei\x12Ora Insulelor Cook\x1dOra standard a Insulelo" + + "r Cook\x1dOra de vară a Insulelor Cook\x09Ora Cubei\x14Ora standard a Cu" + + "bei\x14Ora de vară a Cubei\x0dOra din Davis\x1aOra din Dumont-d’Urville" + + "\x14Ora Timorului de Est\x18Ora din Insula Paștelui!Ora standard din Ins" + + "ula Paștelui!Ora de vară din Insula Paștelui\x0fOra Ecuadorului\x14Ora E" + + "uropei Centrale\x1fOra standard a Europei Centrale\x1fOra de vară a Euro" + + "pei Centrale\x12Ora Europei de Est\x1dOra standard a Europei de Est\x1dO" + + "ra de vară a Europei de Est Ora Europei de Est îndepărtate\x13Ora Europe" + + "i de Vest\x1eOra standard a Europei de Vest\x1eOra de vară a Europei de " + + "Vest\x19Ora din Insulele Falkland\"Ora standard din Insulele Falkland\"O" + + "ra de vară din Insulele Falkland\x0cOra din Fiji\x15Ora standard din Fij" + + "i\x15Ora de vară din Fiji\x18Ora din Guyana Franceză4Ora din Teritoriile" + + " Australe și Antarctice Franceze\x11Ora din Galapagos\x0fOra din Gambier" + + "\x0cOra Georgiei\x17Ora standard a Georgiei\x17Ora de vară a Georgiei" + + "\x15Ora Insulelor Gilbert\x11Ora de Greenwhich\x19Ora Groenlandei orient" + + "ale$Ora standard a Groenlandei orientale$Ora de vară a Groenlandei orien" + + "tale\x1bOra Groenlandei occidentale&Ora standard a Groenlandei occidenta" + + "le&Ora de vară a Groenlandei occidentale\x17Ora standard a Golfului\x0eO" + + "ra din Guyana\x17Ora din Hawaii-Aleutine Ora standard din Hawaii-Aleutin" + + "e Ora de vară din Hawaii-Aleutine\x11Ora din Hong Kong\x1aOra standard d" + + "in Hong Kong\x1aOra de vară din Hong Kong\x0cOra din Hovd\x15Ora standar" + + "d din Hovd\x15Ora de vară din Hovd\x0aOra Indiei\x14Ora Oceanului Indian" + + "\x0eOra Indochinei\x17Ora Indoneziei Centrale\x15Ora Indoneziei de Est" + + "\x16Ora Indoneziei de Vest\x0cOra Iranului\x17Ora standard a Iranului" + + "\x17Ora de vară a Iranului\x0fOra din Irkuțk\x18Ora standard din Irkuțk" + + "\x18Ora de vară din Irkuțk\x0eOra Israelului\x19Ora standard a Israelulu" + + "i\x19Ora de vară a Israelului\x0cOra Japoniei\x17Ora standard a Japoniei" + + "\x17Ora de vară a Japoniei Ora din Petropavlovsk-Kamciațki)Ora standard " + + "din Petropavlovsk-Kamciațki)Ora de vară din Petropavlovsk-Kamciațki\x1aO" + + "ra din Kazahstanul de Est\x1bOra din Kazahstanul de Vest\x0aOra Coreei" + + "\x15Ora standard a Coreei\x15Ora de vară a Coreei\x0eOra din Kosrae\x13O" + + "ra din Krasnoiarsk\x1cOra standard din Krasnoiarsk\x1cOra de vară din Kr" + + "asnoiarsk\x14Ora din Kârgâzstan\x15Ora din Insulele Line\x11Ora din Lord" + + " Howe\x1aOra standard din Lord Howe\x1aOra de vară din Lord Howe\x11Ora " + + "din Macquarie\x0fOra din Magadan\x18Ora standard din Magadan\x18Ora de v" + + "ară din Magadan\x10Ora din Malaysia\x0fOra din Maldive\x16Ora Insulelor " + + "Marchize\x16Ora Insulelor Marshall\x11Ora din Mauritius\x1aOra standard " + + "din Mauritius\x1aOra de vară din Mauritius\x0eOra din Mawson\x1aOra Mexi" + + "cului de nord-vest%Ora standard a Mexicului de nord-vest%Ora de vară a M" + + "exicului de nord-vest\x1aOra zonei Pacific mexicane%Ora standard a zonei" + + " Pacific mexicane%Ora de vară a zonei Pacific mexicane\x12Ora din Ulan B" + + "ator\x1bOra standard din Ulan Bator\x1bOra de vară din Ulan Bator\x0cOra" + + " Moscovei\x17Ora standard a Moscovei\x17Ora de vară a Moscovei\x0fOra My" + + "anmarului\x0dOra din Nauru\x0dOra Nepalului\x12Ora Noii Caledonii\x1dOra" + + " standard a Noii Caledonii\x1dOra de vară a Noii Caledonii\x11Ora Noii Z" + + "eelande\x1cOra standard a Noii Zeelande\x1cOra de vară a Noii Zeelande" + + "\x14Ora din Newfoundland\x1dOra standard din Newfoundland\x1dOra de vară" + + " din Newfoundland\x0cOra din Niue\x15Ora Insulelor Norfolk\x1bOra din Fe" + + "rnando de Noronha$Ora standard din Fernando de Noronha$Ora de vară din F" + + "ernando de Noronha\x13Ora din Novosibirsk\x1cOra standard din Novosibirs" + + "k\x1cOra de vară din Novosibirsk\x0cOra din Omsk\x15Ora standard din Oms" + + "k\x15Ora de vară din Omsk\x10Ora Pakistanului\x1bOra standard a Pakistan" + + "ului\x1bOra de vară a Pakistanului\x0dOra din Palau\x19Ora din Papua Nou" + + "a Guinee\x10Ora din Paraguay\x19Ora standard din Paraguay\x19Ora de vară" + + " din Paraguay\x0cOra din Peru\x15Ora standard din Peru\x15Ora de vară di" + + "n Peru\x10Ora din Filipine\x19Ora standard din Filipine\x19Ora de vară d" + + "in Filipine\x15Ora Insulelor Phoenix!Ora din Saint-Pierre și Miquelon*Or" + + "a standard din Saint-Pierre și Miquelon*Ora de vară din Saint-Pierre și " + + "Miquelon\x10Ora din Pitcairn\x0eOra din Ponape\x11Ora din Pyongyang\x0fO" + + "ra din Reunion\x0fOra din Rothera\x0fOra din Sahalin\x18Ora standard din" + + " Sahalin\x18Ora de vară din Sahalin\x0eOra din Samara\x17Ora standard di" + + "n Samara\x17Ora de vară din Samara\x0dOra din Samoa\x16Ora standard din " + + "Samoa\x16Ora de vară din Samoa\x12Ora din Seychelles\x11Ora din Singapor" + + "e\x15Ora Insulelor Solomon\x13Ora Georgiei de Sud\x0fOra Surinamului\x0d" + + "Ora din Syowa\x0eOra din Tahiti\x0eOra din Taipei\x17Ora standard din Ta" + + "ipei\x17Ora de vară din Taipei\x13Ora din Tadjikistan\x0fOra din Tokelau" + + "\x0dOra din Tonga\x16Ora standard din Tonga\x16Ora de vară din Tonga\x0d" + + "Ora din Chuuk\x14Ora din Turkmenistan\x1dOra standard din Turkmenistan" + + "\x1dOra de vară din Turkmenistan\x0eOra din Tuvalu\x0fOra Uruguayului" + + "\x1aOra standard a Uruguayului\x1aOra de vară a Uruguayului\x12Ora din U" + + "zbekistan\x1bOra standard din Uzbekistan\x1bOra de vară din Uzbekistan" + + "\x0fOra din Vanuatu\x18Ora standard din Vanuatu\x18Ora de vară din Vanua" + + "tu\x0eOra Venezuelei\x13Ora din Vladivostok\x1cOra standard din Vladivos" + + "tok\x1cOra de vară din Vladivostok\x11Ora din Volgograd\x1aOra standard " + + "din Volgograd\x1aOra de vară din Volgograd\x0eOra din Vostok\x10Ora Insu" + + "lei Wake\x19Ora din Wallis și Futuna\x0fOra din Iakuțk\x18Ora standard d" + + "in Iakuțk\x18Ora de vară din Iakuțk\x14Ora din Ekaterinburg\x1dOra stand" + + "ard din Ekaterinburg\x1dOra de vară din Ekaterinburg" + +var bucket91 string = "" + // Size: 11061 bytes + "\x03Dum\x03Lun\x03Mar\x03Mie\x03Joi\x03Vin\x04Sâm\x07trim. 1\x07trim. 2" + + "\x07trim. 3\x07trim. 4\x0ctrimestrul 1\x0ctrimestrul 2\x0ctrimestrul 3" + + "\x0ctrimestrul 4\x07Trim. 1\x07Trim. 2\x07Trim. 3\x07Trim. 4\x0cTrimestr" + + "ul 1\x0cTrimestrul 2\x0cTrimestrul 3\x0cTrimestrul 4\x0bdimineață\x0ddup" + + "ă-amiază\x06seară\x06noapte\x07î.e.n.\x0fMweri wa kwanza\x0eMweri wa ka" + + "ili\x0fMweri wa katatu\x0eMweri wa kaana\x0dMweri wa tanu\x0dMweri wa si" + + "ta\x0dMweri wa saba\x0dMweri wa nane\x0dMweri wa tisa\x0eMweri wa ikumi" + + "\x16Mweri wa ikumi na moja\x17Mweri wa ikumi na mbili\x03Ijp\x03Ijt\x03I" + + "jn\x04Ijtn\x03Alh\x03Iju\x03Ijm\x09Ijumapili\x09Ijumatatu\x08Ijumanne" + + "\x09Ijumatano\x08Alhamisi\x06Ijumaa\x09Ijumamosi\x0eRobo ya kwanza\x0dRo" + + "bo ya kaili\x0eRobo ya katatu\x0dRobo ya kaana\x0akang’ama\x07kingoto" + + "\x0fKabla ya Mayesu\x0fBaada ya Mayesu\x05Muaka\x05Iwiki\x04Hiyo\x04Linu" + + "\x08Ng’ama\x0dMfiri a iwiki\x06Nkwaya\x1bбуддийская эра\x04бэ\x06тот\x08" + + "бабэ\x0aхатур\x0aкихак\x08тубэ\x0aамшир\x10барамхат\x0eбармуда\x0cбашна" + + "с\x0aбауна\x08абиб\x0aмисра\x08наси\x1bдо Диоклетиана\x1bот Диоклетиана" + + "\x10до Диокл.\x10от Диокл.&до воплощения Христа&от воплощения Христа\x11" + + "до Христа\x11от Христа\x0fd MMM y 'г'. G\x0cянваря\x0eфевраля\x0aмарта" + + "\x0cапреля\x06мая\x08июня\x08июля\x0eавгуста\x10сентября\x0eоктября\x0cн" + + "оября\x0eдекабря\x04вс\x04пн\x04вт\x04ср\x04чт\x04пт\x04сб\x16воскресен" + + "ье\x16понедельник\x0eвторник\x0aсреда\x0eчетверг\x0eпятница\x0eсуббота" + + "\x0a1-й кв.\x0a2-й кв.\x0a3-й кв.\x0a4-й кв.\x131-й квартал\x132-й кварт" + + "ал\x133-й квартал\x134-й квартал\x09полд.\x08утра\x06дня\x0cвечера\x08н" + + "очи\x0eполночь\x0eполдень\x08день\x08ночь\x0aвечер(до Рождества Христов" + + "а\x16до нашей эры(от Рождества Христова\x11нашей эры\x0cдо н. э.\x07н. " + + "э.\x0bдо н.э.\x06н.э.\x0dd MMM y 'г'.\x0cтишрей\x0cхешван\x0cкислев\x0a" + + "тевет\x0aшеват\x0aадар I\x08адар\x0bадар II\x0aнисан\x06ияр\x0aсиван" + + "\x0cтаммуз\x04ав\x08элул\"от сотворения мира\x10мухаррам\x0aсафар\x1cраб" + + "и-уль-авваль\x18раби-уль-ахир джумад-уль-авваль\x1cджумад-уль-ахир\x0cр" + + "аджаб\x0cшаабан\x0eрамадан\x0eшавваль\x13зуль-каада\x15зуль-хиджжа\x17п" + + "осле хиджры!Эпоха Тайка (645–650)#Эпоха Хакути (650–671)#Эпоха Хакухо (" + + "672–686)\x1fЭпоха Сючё (686–701)!Эпоха Тайхо (701–704)\x1fЭпоха Кёюн (70" + + "4–708)\x1fЭпоха Вадо (708–715)!Эпоха Рэйки (715–717)\x1dЭпоха Ёро (717–7" + + "24)#Эпоха Дзинки (724–729)#Эпоха Темпьё (729–749)#Эпоха Темпьё (749–749)" + + ",Эпоха Темпьё-Сьохо (749-757),Эпоха Темпьё-Ходзи (757-765),Эпоха Темпьё-" + + "Ходзи (765-767)*Эпоха Джинго-Кёюн (767-770)\x1fЭпоха Хоки (770–780)!Эпо" + + "ха Теньё (781–782)#Эпоха Енряку (782–806)!Эпоха Дайдо (806–810)!Эпоха К" + + "онин (810–824)#Эпоха Тентьо (824–834)\x1fЭпоха Шова (834–848)\x1fЭпоха " + + "Кайо (848–851)#Эпоха Ниндзю (851–854)!Эпоха Сайко (854–857)#Эпоха Тенна" + + "н (857–859)!Эпоха Йоган (859–877)#Эпоха Генкей (877–885)!Эпоха Нинна (8" + + "85–889)#Эпоха Кампьё (889–898)#Эпоха Сьотай (898–901)\x1fЭпоха Энги (901" + + "–923)!Эпоха Ентьо (923–931)#Эпоха Сьёхэй (931–938)#Эпоха Тенгьо (938–9" + + "47)'Эпоха Тенрияку (947–957)%Эпоха Тентоку (957–961)\x1dЭпоха Ова (961–9" + + "64)\x1fЭпоха Кохо (964–968)\x1fЭпоха Анна (968–970)%Эпоха Тенроку (970–9" + + "73)#Эпоха Теньен (973–976)%Эпоха Дзьоген (976–978)#Эпоха Тенген (978–983" + + ")!Эпоха Ейкан (983–985)!Эпоха Канна (985–987)\x1fЭпоха Ейен (987–989)" + + "\x1fЭпоха Ейсо (989–990)#Эпоха Сёряку (990–995)#Эпоха Тётоку (995–999) Э" + + "поха Тёхо (999–1004)#Эпоха Канко (1004–1012)!Эпоха Тёва (1012–1017)%Эпо" + + "ха Каннин (1017–1021)#Эпоха Дзиан (1021–1024)%Эпоха Мандзю (1024–1028)#" + + "Эпоха Тёгэн (1028–1037)%Эпоха Тёряку (1037–1040)!Эпоха Тёкю (1040–1044)" + + "%Эпоха Катоку (1044–1046)!Эпоха Эйсо (1046–1053)#Эпоха Тэнги (1053–1058)" + + "#Эпоха Кохэй (1058–1065)'Эпоха Дзиряку (1065–1069)!Эпоха Энкю (1069–1074" + + ")!Эпоха Сёхо (1074–1077)%Эпоха Сёряку (1077–1081)!Эпоха Эйхо (1081–1084)" + + "#Эпоха Отоку (1084–1087)%Эпоха Кандзи (1087–1094)!Эпоха Кахо (1094–1096)" + + "!Эпоха Эйтё (1096–1097)%Эпоха Сётоку (1097–1099)!Эпоха Кова (1099–1104)#" + + "Эпоха Тёдзи (1104–1106)!Эпоха Касё (1106–1108)%Эпоха Тэннин (1108–1110)" + + "%Эпоха Тэнъэй (1110–1113)!Эпоха Эйкю (1113–1118)%Эпоха Гэнъэй (1118–1120" + + ")!Эпоха Хоан (1120–1124)%Эпоха Тэндзи (1124–1126)%Эпоха Дайдзи (1126–113" + + "1)#Эпоха Тэнсё (1131–1132)!Эпоха Тёсё (1132–1135)!Эпоха Хоэн (1135–1141)" + + "#Эпоха Эйдзи (1141–1142)#Эпоха Кодзи (1142–1144)!Эпоха Тэнё (1144–1145)!" + + "Эпоха Кюан (1145–1151)%Эпоха Нимпэй (1151–1154)#Эпоха Кюдзю (1154–1156)" + + "#Эпоха Хогэн (1156–1159)%Эпоха Хэйдзи (1159–1160)%Эпоха Эйряку (1160–116" + + "1)\x1fЭпоха Охо (1161–1163)#Эпоха Тёкан (1163–1165)#Эпоха Эйман (1165–11" + + "66)%Эпоха Нинъан (1166–1169)\x1fЭпоха Као (1169–1171)!Эпоха Сёан (1171–1" + + "175)#Эпоха Ангэн (1175–1177)#Эпоха Дзисё (1177–1181)\x1fЭпоха Ёва (1181–" + + "1182)#Эпоха Дзюэй (1182–1184)'Эпоха Гэнрюку (1184–1185)%Эпоха Бундзи (11" + + "85–1190)#Эпоха Кэнкю (1190–1199)#Эпоха Сёдзи (1199–1201)%Эпоха Кэннин (1" + + "201–1204)#Эпоха Гэнкю (1204–1206)%Эпоха Кэнъэй (1206–1207)#Эпоха Сёгэн (" + + "1207–1211)'Эпоха Кэнряку (1211–1213)#Эпоха Кэмпо (1213–1219)!Эпоха Сёкю " + + "(1219–1222)!Эпоха Дзёо (1222–1224)%Эпоха Гэннин (1224–1225)%Эпоха Кароку" + + " (1225–1227)#Эпоха Антэй (1227–1229)#Эпоха Канки (1229–1232)#Эпоха Дзёэй" + + " (1232–1233)'Эпоха Тэмпуку (1233–1234)'Эпоха Бунряку (1234–1235)#Эпоха К" + + "атэй (1235–1238)'Эпоха Рякунин (1238–1239)!Эпоха Энъо (1239–1240)%Эпоха" + + " Ниндзи (1240–1243)%Эпоха Кангэн (1243–1247)#Эпоха Ходзи (1247–1249)#Эпо" + + "ха Кэнтё (1249–1256)#Эпоха Когэн (1256–1257)!Эпоха Сёка (1257–1259)#Эпо" + + "ха Сёгэн (1259–1260)#Эпоха Бунъо (1260–1261)!Эпоха Котё (1261–1264)%Эпо" + + "ха Бунъэй (1264–1275)%Эпоха Кэндзи (1275–1278)!Эпоха Коан (1278–1288)" + + "\x1fЭпоха Сёо (1288–1293)#Эпоха Эйнин (1293–1299)!Эпоха Сёан (1299–1302)" + + "%Эпоха Кэнгэн (1302–1303)#Эпоха Кагэн (1303–1306)'Эпоха Токудзи (1306–13" + + "08)#Эпоха Энкэй (1308–1311)\x1fЭпоха Отё (1311–1312)!Эпоха Сёва (1312–13" + + "17)#Эпоха Бумпо (1317–1319)!Эпоха Гэно (1319–1321)#Эпоха Гэнкё (1321–132" + + "4)!Эпоха Сётю (1324–1326)%Эпоха Карэки (1326–1329)'Эпоха Гэнтоку (1329–1" + + "331)#Эпоха Гэнко (1331–1334)#Эпоха Кэмму (1334–1336)#Эпоха Энгэн (1336–1" + + "340)%Эпоха Кококу (1340–1346)#Эпоха Сёхэй (1346–1370)'Эпоха Кэнтоку (137" + + "0–1372)#Эпоха Бунтю (1372–1375)%Эпоха Иэндзю (1375–1379)%Эпоха Коряку (1" + + "379–1381)!Эпоха Кова (1381–1384)#Эпоха Гэнтю (1384–1392)'Эпоха Мэйтоку (" + + "1384–1387)#Эпоха Какэй (1387–1389)\x1fЭпоха Коо (1389–1390)'Эпоха Мэйток" + + "у (1390–1394)\x1fЭпоха Оэй (1394–1428)!Эпоха Сётё (1428–1429)!Эпоха Эйк" + + "ё (1429–1441)%Эпоха Какицу (1441–1444)%Эпоха Банъан (1444–1449)%Эпоха Х" + + "отоку (1449–1452)%Эпоха Кётоку (1452–1455)!Эпоха Косё (1455–1457)%Эпоха" + + " Тёроку (1457–1460)#Эпоха Кансё (1460–1466)#Эпоха Бунсё (1466–1467)!Эпох" + + "а Онин (1467–1469)%Эпоха Буммэй (1469–1487)!Эпоха Тёкё (1487–1489)%Эпох" + + "а Энтоку (1489–1492)!Эпоха Мэйо (1492–1501)#Эпоха Бунки (1501–1504)!Эпо" + + "ха Эйсё (1504–1521)#Эпоха Тайэй (1521–1528)%Эпоха Кёроку (1528–1532)%Эп" + + "оха Тэммон (1532–1555)#Эпоха Кодзи (1555–1558)%Эпоха Эйроку (1558–1570)" + + "#Эпоха Гэнки (1570–1573)#Эпоха Тэнсё (1573–1592)'Эпоха Бунроку (1592–159" + + "6)#Эпоха Кэйтё (1596–1615)#Эпоха Гэнва (1615–1624)%Эпоха Канъэй (1624–16" + + "44)!Эпоха Сёхо (1644–1648)#Эпоха Кэйан (1648–1652)\x1dЭпоха Сё (1652–165" + + "5)'Эпоха Мэйряку (1655–1658)%Эпоха Мандзи (1658–1661)%Эпоха Камбун (1661" + + "–1673)!Эпоха Эмпо (1673–1681)#Эпоха Тэнва (1681–1684)#Эпоха Дзёкё (168" + + "4–1688)'Эпоха Гэнроку (1688–1704)!Эпоха Хоэй (1704–1711)%Эпоха Сётоку (1" + + "711–1716)!Эпоха Кёхо (1716–1736)%Эпоха Гэмбун (1736–1741)#Эпоха Кампо (1" + + "741–1744)!Эпоха Энкё (1744–1748)%Эпоха Канъэн (1748–1751)%Эпоха Хоряку (" + + "1751–1764)#Эпоха Мэйва (1764–1772)#Эпоха Анъэй (1772–1781)%Эпоха Тэммэй " + + "(1781–1789)%Эпоха Кансэй (1789–1801)!Эпоха Кёва (1801–1804)#Эпоха Бунка " + + "(1804–1818)%Эпоха Бунсэй (1818–1830)#Эпоха Тэмпо (1830–1844)!Эпоха Кока " + + "(1844–1848)!Эпоха Каэй (1848–1854)#Эпоха Ансэй (1854–1860)%Эпоха Манъэн " + + "(1860–1861)#Эпоха Бункю (1861–1864)%Эпоха Гендзи (1864–1865)!Эпоха Кейо " + + "(1865–1868)\x17Эпоха Мэйдзи\x17Эпоха Тайсьо\x0aСьова\x17Эпоха Хэйсэй\x07" + + "баб.\x07хат.\x07кіх.\x07тоб.\x07амш.\x0bбарам.\x09барм.\x07баш.\x09баун" + + ".\x05аб.\x07мис.\x07нас.\x08бабе\x0aкіхак\x08тобе\x08абіб\x08насі\x06баб" + + "\x06хат\x06кіх\x06тоб\x06амш\x0aбарам\x08барм\x06баш\x08баун\x04аб\x06ми" + + "с\x06нас\x0aрабі I\x0bрабі II\x10джумада I\x11джумада II\x0cдаввал\x14з" + + "у-ль-каада\x14зу-ль-хіджа\x0aрабі I\x0bрабі II" + +var bucket92 string = "" + // Size: 19291 bytes + "\x1bперсидский год\x10перс. год?до основания Китайской республики\x0cМин" + + "ьго\x0eдо респ.\x1aв прошлом году\x14в этом году\x1eв следующем году" + + "\x15через {0} год\x17через {0} года\x15через {0} лет\x15{0} год назад" + + "\x17{0} года назад\x15{0} лет назад\x15в прошлом г.\x0fв этом г.\x10в сл" + + "ед. г.\x12через {0} г.\x12через {0} л.\x12{0} г. назад\x12{0} л. назад" + + "\x0cв пр. г.\x0cв эт. г.\x0cв сл. г.\x08+{0} г.\x08+{0} л.\x08-{0} г." + + "\x08-{0} л.\"в прошлом квартале\"в текущем квартале&в следующем квартале" + + "\x1dчерез {0} квартал\x1fчерез {0} квартала!через {0} кварталов\x1d{0} к" + + "вартал назад\x1f{0} квартала назад!{0} кварталов назад\x18последний кв." + + "\x14текущий кв.\x18следующий кв.\x14через {0} кв.\x14{0} кв. назад\x0fпо" + + "сл. кв.\x0dтек. кв.\x0fслед. кв.\x0a+{0} кв.\x0a-{0} кв.\x1eв прошлом м" + + "есяце\x18в этом месяце\"в следующем месяце\x19через {0} месяц\x1bчерез " + + "{0} месяца\x1dчерез {0} месяцев\x19{0} месяц назад\x1b{0} месяца назад" + + "\x1d{0} месяцев назад\x19в прошлом мес.\x13в этом мес.\x1dв следующем ме" + + "с.\x16через {0} мес.\x16{0} мес. назад\x10в пр. мес.\x10в эт. мес.\x14в" + + " след. мес.\x0c+{0} мес.\x0c-{0} мес. на прошлой неделе\x1aна этой недел" + + "е$на следующей неделе\x1bчерез {0} неделю\x1bчерез {0} недели\x1bчерез " + + "{0} недель\x1b{0} неделю назад\x1b{0} недели назад\x1b{0} недель назад" + + "\x15на неделе {0}\x1bна прошлой нед.\x15на этой нед.\x1fна следующей нед" + + ".\x16через {0} нед.\x16{0} нед. назад\x10на нед. {0}\x12на пр. нед.\x12н" + + "а эт. нед.\x1bна след. неделе\x0c+{0} нед.\x0c-{0} нед.\x19неделя месяц" + + "а\x14нед. месяца\x0fнед. мес.\x12позавчера\x0aвчера\x0eсегодня\x0cзавтр" + + "а\x16послезавтра\x17через {0} день\x15через {0} дня\x17через {0} дней" + + "\x17{0} день назад\x15{0} дня назад\x17{0} дней назад\x05дн.\x14через {0" + + "} дн.\x14{0} дн. назад\x0a+{0} дн.\x0a-{0} дн.\x11день года\x0eдн. года" + + "\x15день недели\x12дн. недели\x0dдн. нед.%день недели в месяце\x1dдн. не" + + "д. в месяце\x18дн. нед. в мес.(в прошлое воскресенье в это воскресенье," + + "в следующее воскресенье%через {0} воскресенье%через {0} воскресенья%чер" + + "ез {0} воскресений%{0} воскресенье назад%{0} воскресенья назад%{0} воск" + + "ресений назад\x12в прош. вс.\x0fв это вс.\x12в след. вс.\x14через {0} в" + + "с.\x14{0} вс. назад\x0a+{0} вс.\x0a-{0} вс.(в прошлый понедельник\"в эт" + + "от понедельник,в следующий понедельник%через {0} понедельник'через {0} " + + "понедельника)через {0} понедельников%{0} понедельник назад'{0} понедель" + + "ника назад){0} понедельников назад\x12в прош. пн.\x11в этот пн.\x12в сл" + + "ед. пн.\x14через {0} пн.\x14{0} пн. назад\x0a+{0} пн.\x0a-{0} пн. в про" + + "шлый вторник\x1aв этот вторник$в следующий вторник\x1dчерез {0} вторник" + + "\x1fчерез {0} вторника!через {0} вторников\x1d{0} вторник назад\x1f{0} в" + + "торника назад!{0} вторников назад\x12в прош. вт.\x11в этот вт.\x12в сле" + + "д. вт.\x14через {0} вт.\x14{0} вт. назад\x0a+{0} вт.\x0a-{0} вт.\x1cв п" + + "рошлую среду\x14в эту среду в следующую среду\x19через {0} среду\x19чер" + + "ез {0} среды\x17через {0} сред\x19{0} среду назад\x19{0} среды назад" + + "\x17{0} сред назад\x12в прош. ср.\x0fв эту ср.\x12в след. ср.\x14через {" + + "0} ср.\x14{0} ср. назад\x0a+{0} ср.\x0a-{0} ср. в прошлый четверг\x1aв э" + + "тот четверг$в следующий четверг\x1dчерез {0} четверг\x1fчерез {0} четве" + + "рга!через {0} четвергов\x1d{0} четверг назад\x1f{0} четверга назад!{0} " + + "четвергов назад\x12в прош. чт.\x11в этот чт.\x12в след. чт.\x14через {0" + + "} чт.\x14{0} чт. назад\x0a+{0} чт.\x0a-{0} чт. в прошлую пятницу\x18в эт" + + "у пятницу$в следующую пятницу\x1dчерез {0} пятницу\x1dчерез {0} пятницы" + + "\x1bчерез {0} пятниц\x1d{0} пятницу назад\x1d{0} пятницы назад\x1b{0} пя" + + "тниц назад\x12в прош. пт.\x0fв эту пт.\x12в след. пт.\x14через {0} пт." + + "\x14{0} пт. назад\x0a+{0} пт.\x0a-{0} пт. в прошлую субботу\x18в эту суб" + + "боту$в следующую субботу\x1dчерез {0} субботу\x1dчерез {0} субботы\x1bч" + + "ерез {0} суббот\x1d{0} субботу назад\x1d{0} субботы назад\x1b{0} суббот" + + " назад\x12в прош. сб.\x0fв эту сб.\x12в след. сб.\x14через {0} сб.\x14{0" + + "} сб. назад\x0a+{0} сб.\x0a-{0} сб.\x12в этот час\x15через {0} час\x17че" + + "рез {0} часа\x19через {0} часов\x15{0} час назад\x17{0} часа назад\x19{" + + "0} часов назад\x13через {0}\u00a0ч.\x12через {0} ч.\x13{0}\u00a0ч. назад" + + "\x12{0} ч. назад\x08+{0} ч.\x08-{0} ч.\x16в эту минуту\x1bчерез {0} мину" + + "ту\x1bчерез {0} минуты\x19через {0} минут\x1b{0} минуту назад\x1b{0} ми" + + "нуты назад\x19{0} минут назад\x16через {0} мин.\x16{0} мин. назад\x0c+{" + + "0} мин.\x0c-{0} мин.\x0cсейчас\x1dчерез {0} секунду\x1dчерез {0} секунды" + + "\x1bчерез {0} секунд\x1d{0} секунду назад\x1d{0} секунды назад\x1b{0} се" + + "кунд назад\x17через {0}\u00a0сек.\x16{0} сек. назад\x07+{0} с\x07-{0} с" + + "\x17часовой пояс\x10час. пояс>Всемирное координированное время5Великобри" + + "тания, летнее время3Ирландия, стандартное время\x13Акри время*Акри стан" + + "дартное время Акри летнее время\x14Афганистан#Центральная Африка\x1fВос" + + "точная Африка\x17Южная Африка\x1dЗападная Африка@Западная Африка, станд" + + "артное время6Западная Африка, летнее время\x0cАляска/Аляска, стандартно" + + "е время%Аляска, летнее время\x1aАлма-Ата время1Алма-Ата стандартное вре" + + "мя'Алма-Ата летнее время\x10Амазонка3Амазонка, стандартное время)Амазон" + + "ка, летнее время%Центральная АмерикаHЦентральная Америка, стандартное в" + + "ремя>Центральная Америка, летнее время!Восточная АмерикаDВосточная Амер" + + "ика, стандартное время:Восточная Америка, летнее время9Горное время (Се" + + "верная Америка)PСтандартное горное время (Северная Америка)FЛетнее горн" + + "ое время (Северная Америка)%Тихоокеанское время<Тихоокеанское стандартн" + + "ое время2Тихоокеанское летнее время\x1eВремя по Анадырю0Анадырь стандар" + + "тное время&Анадырь летнее время\x08Апиа+Апиа, стандартное время!Апиа, л" + + "етнее время\x15Актау время-Актау, стандартное время\"Актау летнее время" + + "\x17Актобе время.Актобе стандартное время$Актобе летнее время!Саудовская" + + " АравияDСаудовская Аравия, стандартное время:Саудовская Аравия, летнее в" + + "ремя\x12Аргентина5Аргентина, стандартное время+Аргентина, летнее время#" + + "Западная АргентинаFЗападная Аргентина, стандартное время<Западная Арген" + + "тина, летнее время\x0eАрмения1Армения, стандартное время'Армения, летне" + + "е время%Атлантическое время<Атлантическое стандартное время2Атлантическ" + + "ое летнее время)Центральная АвстралияLЦентральная Австралия, стандартно" + + "е времяBЦентральная Австралия, летнее времяFЦентральная Австралия, запа" + + "дное время]Центральная Австралия, западное стандартное времяSЦентральна" + + "я Австралия, западное летнее время%Восточная АвстралияHВосточная Австра" + + "лия, стандартное время>Восточная Австралия, летнее время#Западная Австр" + + "алияFЗападная Австралия, стандартное время<Западная Австралия, летнее в" + + "ремя\x16Азербайджан9Азербайджан, стандартное время/Азербайджан, летнее " + + "время\x18Азорские о-ва;Азорские о-ва, стандартное время1Азорские о-ва, " + + "летнее время\x12Бангладеш5Бангладеш, стандартное время+Бангладеш, летне" + + "е время\x0aБутан\x0eБоливия\x10Бразилия3Бразилия, стандартное время)Бра" + + "зилия, летнее время!Бруней-Даруссалам\x13Кабо-Верде6Кабо-Верде, стандар" + + "тное время,Кабо-Верде, летнее время\x0aКейси\x0eЧаморро\x0aЧатем-Чатем," + + " стандартное время#Чатем, летнее время\x08Чили+Чили, стандартное время!Ч" + + "или, летнее время\x0aКитай-Китай, стандартное время#Китай, летнее время" + + "\x12Чойбалсан5Чойбалсан, стандартное время+Чойбалсан, летнее время\x18о-" + + "в Рождества\x1aКокосовые о-ва\x10Колумбия3Колумбия, стандартное время)К" + + "олумбия, летнее время\x17Острова Кука:Острова Кука, стандартное время8О" + + "строва Кука, полулетнее время\x08Куба+Куба, стандартное время!Куба, лет" + + "нее время\x0cДейвис\x1cДюмон-д’Юрвиль\x1dВосточный Тимор\x10О-в Пасхи3О" + + "-в Пасхи, стандартное время)О-в Пасхи, летнее время\x0eЭквадор#Центральн" + + "ая ЕвропаFЦентральная Европа, стандартное время<Центральная Европа, лет" + + "нее время\x1fВосточная ЕвропаBВосточная Европа, стандартное время8Восто" + + "чная Европа, летнее время\x19Минское время\x1dЗападная Европа@Западная " + + "Европа, стандартное время6Западная Европа, летнее время Фолклендские о-" + + "ваCФолклендские о-ва, стандартное время9Фолклендские о-ва, летнее время" + + "\x0aФиджи-Фиджи, стандартное время#Фиджи, летнее время#Французская Гвиан" + + "аVФранцузские Южные и Антарктические территории\"Галапагосские о-ва\x0c" + + "Гамбье\x0cГрузия/Грузия, стандартное время%Грузия, летнее время\x18о-ва" + + " Гилберта/Среднее время по Гринвичу'Восточная ГренландияHВосточная Гренл" + + "андия, стандарное время@Восточная Гренландия, летнее время%Западная Гре" + + "нландияHЗападная Гренландия, стандартное время>Западная Гренландия, лет" + + "нее время\x08Гуам\x1fПерсидский залив\x0cГайана.Гавайско-алеутское врем" + + "яEГавайско-алеутское стандартное время;Гавайско-алеутское летнее время" + + "\x0eГонконг1Гонконг, стандартное время'Гонконг, летнее время\x08Ховд+Хов" + + "д, стандартное время!Ховд, летнее время\x0aИндия\x1dИндийский океан\x12" + + "Индокитай)Центральная Индонезия%Восточная Индонезия#Западная Индонезия" + + "\x08Иран+Иран, стандартное время!Иран, летнее время\x0eИркутск1Иркутск, " + + "стандартное время'Иркутск, летнее время\x0eИзраиль1Израиль, стандартное" + + " время'Израиль, летнее время\x0cЯпония/Япония, стандартное время%Япония," + + " летнее время/Петропавловск-КамчатскийRПетропавловск-Камчатский, стандар" + + "тное времяHПетропавловск-Камчатский, летнее время%Восточный Казахстан#З" + + "ападный Казахстан\x0aКорея-Корея, стандартное время#Корея, летнее время" + + "\x0cКосрае\x14Красноярск7Красноярск, стандартное время-Красноярск, летне" + + "е время\x10Киргизия\x11Шри-Ланка\x10о-ва Лайн\x0fЛорд-Хау2Лорд-Хау, ста" + + "ндартное время(Лорд-Хау, летнее время\x0aМакао-Макао, стандартное время" + + "#Макао, летнее время\x10Маккуори\x0eМагадан1Магадан, стандартное время'М" + + "агадан, летнее время\x10Малайзия\x10Мальдивы\x1cМаркизские о-ва#Маршалл" + + "овы Острова\x10Маврикий3Маврикий, стандартное время)Маврикий, летнее вр" + + "емя\x0cМоусонAСеверо-западное мексиканское времяXСеверо-западное мексик" + + "анское стандартное времяNСеверо-западное мексиканское летнее время>Тихо" + + "океанское мексиканское времяUТихоокеанское мексиканское стандартное вре" + + "мяKТихоокеанское мексиканское летнее время\x13Улан-Батор6Улан-Батор, ст" + + "андартное время,Улан-Батор, летнее время\x0cМосква/Москва, стандартное " + + "время%Москва, летнее время\x0cМьянма\x0aНауру\x0aНепал\x1dНовая Каледон" + + "ия@Новая Каледония, стандартное время6Новая Каледония, летнее время\x1b" + + "Новая Зеландия>Новая Зеландия, стандартное время4Новая Зеландия, летнее" + + " время\x18Ньюфаундленд;Ньюфаундленд, стандартное время1Ньюфаундленд, лет" + + "нее время\x08Ниуэ\x0eНорфолк$Фернанду-ди-НороньяGФернанду-ди-Норонья, с" + + "тандартное время=Фернанду-ди-Норонья, летнее время-Северные Марианские " + + "о-ва\x16Новосибирск9Новосибирск, стандартное время/Новосибирск, летнее " + + "время\x08Омск+Омск, стандартное время!Омск, летнее время\x10Пакистан3Па" + + "кистан, стандартное время)Пакистан, летнее время\x0aПалау&Папуа – Новая" + + " Гвинея\x10Парагвай3Парагвай, стандартное время)Парагвай, летнее время" + + "\x08Перу+Перу, стандартное время!Перу, летнее время\x12Филиппины5Филиппи" + + "ны, стандартное время+Филиппины, летнее время\x14о-ва Феникс!Сен-Пьер и" + + " МикелонDСен-Пьер и Микелон, стандартное время:Сен-Пьер и Микелон, летне" + + "е время\x0eПиткэрн\x0cПонпеи\x0eПхеньян\x13Кызылорда*6Кызылорда, станда" + + "ртное время*,Кызылорда, летнее время*\x0eРеюньон\x0cРотера\x0eСахалин1С" + + "ахалин, стандартное время'Сахалин, летнее время\x1aВремя в Самаре4Самар" + + "ское стандартное время*Самарское летнее время\x0aСамоа-Самоа, стандартн" + + "ое время#Самоа, летнее время%Сейшельские острова\x10Сингапур#Соломоновы" + + " острова\x19Южная Георгия\x0eСуринам\x08Сёва\x0aТаити\x0eТайвань1Тайвань" + + ", стандартное время'Тайвань, летнее время\x16Таджикистан\x0eТокелау\x0aТ" + + "онга-Тонга, стандартное время#Тонга, летнее время\x08Трук\x12Туркмения5" + + "Туркмения, стандартное время+Туркмения, летнее время\x0cТувалу\x0eУругв" + + "ай1Уругвай, стандартное время'Уругвай, летнее время\x14Узбекистан7Узбек" + + "истан, стандартное время-Узбекистан, летнее время\x0eВануату1Вануату, с" + + "тандартное время'Вануату, летнее время\x12Венесуэла\x16Владивосток9Влад" + + "ивосток, стандартное время/Владивосток, летнее время\x12Волгоград5Волго" + + "град, стандартное время+Волгоград, летнее время\x0cВосток\x08Уэйк\x1cУо" + + "ллис и Футуна\x0cЯкутск/Якутск, стандартное время%Якутск, летнее время" + + "\x18Екатеринбург;Екатеринбург, стандартное время1Екатеринбург, летнее вр" + + "емя\x1fчерез {0} квартали!через {0} кварталів\x1fчерез {0} кварталу\x15" + + "через {0} дні\x17через {0} днів\x1dчерез {0} секунди" + +var bucket93 string = "" + // Size: 8237 bytes + "\x04mut.\x04gas.\x04wer.\x04mat.\x04gic.\x04kam.\x04nya.\x04kan.\x04nze." + + "\x04ukw.\x04ugu.\x04uku.\x08Mutarama\x0bGashyantare\x07Werurwe\x04Mata" + + "\x09Gicuransi\x06Kamena\x08Nyakanga\x06Kanama\x05Nzeli\x08Ukwakira\x0aUg" + + "ushyingo\x07Ukuboza\x04cyu.\x04mbe.\x04kab.\x04gtu.\x04gnu.\x04gnd.\x0bK" + + "u cyumweru\x0aKuwa mbere\x0bKuwa kabiri\x0bKuwa gatatu\x09Kuwa kane\x0bK" + + "uwa gatanu\x0eKuwa gatandatu\x13igihembwe cya mbere\x14igihembwe cya kab" + + "iri\x14igihembwe cya gatatu\x12igihembwe cya kane$G y 'сыл' MMMM d 'күнэ" + + "', EEEE\x0cGGGGG yy/M/d\x08Тохс\x08Олун\x06Клн\x06Мсу\x06Ыам\x06Бэс\x06О" + + "тй\x06Атр\x06Блҕ\x06Алт\x06Сэт\x06Ахс\x12Тохсунньу\x0eОлунньу\x15Кулун " + + "тутар\x13Муус устар\x0fЫам ыйын\x0fБэс ыйын\x0dОт ыйын\x19Атырдьых ыйын" + + "\x17Балаҕан ыйын\x10Алтынньы\x10Сэтинньи\x10ахсынньы\x12тохсунньу\x0eолу" + + "нньу\x15кулун тутар\x13муус устар\x0dыам ыйа\x0dбэс ыйа\x0bот ыйа\x17ат" + + "ырдьых ыйа\x15балаҕан ыйа\x10алтынньы\x10сэтинньи\x04бс\x04бн\x04оп\x04" + + "сэ\x04чп\x04бэ\x04сб\x18баскыһыанньа\x18бэнидиэнньик\x18оптуорунньук" + + "\x0cсэрэдэ\x0eчэппиэр\x10Бээтиҥсэ\x0eсубуота\x0b1-кы кб\x092-с кб\x093-с" + + " кб\x094-с кб\x191-кы кыбаартал\x172-с кыбаартал\x173-с кыбаартал\x174-с" + + " кыбаартал\x04ЭИ\x04ЭК\x0bб. э. и.(биһиги ээрэбит иннинэ\x06б. э\x1bбиһи" + + "ги ээрэбит\"y 'сыл' MMMM d 'күнэ', EEEE\x08Ээрэ\x06Сыл\x10Былырыын\x0aб" + + "ыйыл\x0aэһиил\x12{0} сылынан&{0} сыл ынараа өттүгэр\x0eЧиэппэр\x1fааспы" + + "т кыбаартал\x17бу кыбаартал\x1dкэлэр кыбаартал\x1e{0} кыбаарталынан2{0}" + + " кыбаартал анараа өттүгэр\x07чпр.'{0} кыб. анараа өттүгэр\x04Ый\x11ааспы" + + "т ый\x09бу ый\x15аныгыскы ый\x10{0} ыйынан${0} ый ынараа өттүгэр\x0eНэд" + + "иэлэ\x1bааспыт нэдиэлэ\x13бу нэдиэлэ\x19кэлэр нэдиэлэ\x1a{0} нэдиэлэннэ" + + "н.{0} нэдиэлэ анараа өттүгэр\x16{0} нэдиэлэтэ\x06Күн\x15Иллэрээ күн\x0e" + + "Бэҕэһээ\x0aБүгүн\x0cСарсын\x0aӨйүүн\x12{0} күнүнэн&{0} күн ынараа өттүг" + + "эр\x17Нэдиэлэ күнэ%ааспыт баскыһыанньа\x1dбу баскыһыанньа#кэлэр баскыһы" + + "анньа\"{0} баскыһыанньанан8{0} баскыһыанньа анараа өттүгэр\x12ааспыт бс" + + ".\x0aбу бс.\x10кэлэр бс.%{0} бс. анараа өттүгэр%ааспыт бэнидиэнньик\x1dб" + + "у бэнидиэнньик#кэлэр бэнидиэнньик${0} бэнидиэнньигинэн8{0} бэнидиэнньик" + + " анараа өттүгэр\x12ааспыт бн.\x0aбу бн.\x10кэлэр бн.%{0} бн. анараа өттү" + + "гэр%ааспыт оптуорунньук\x1dбу оптуорунньук#кэлэр оптуорунньук${0} оптуо" + + "рунньугунан8{0} оптуорунньук анараа өттүгэр\x12ааспыт оп.\x0aбу оп.\x10" + + "кэлэр оп.%{0} оп. анараа өттүгэр\x19ааспыт сэрэдэ\x11бу сэрэдэ\x17кэлэр" + + " сэрэдэ\x16{0} сэрэдэнэн,{0} сэрэдэ анараа өттүгэр\x12ааспыт сэ.\x0aбу с" + + "э.\x10кэлэр сэ.%{0} сэ. анараа өттүгэр\x1bааспыт чэппиэр\x13бу чэппиэр" + + "\x19кэлэр чэппиэр\x1a{0} чэппиэринэн.{0} чэппиэр анараа өттүгэр\x12ааспы" + + "т чп.\x0aбу чп.\x10кэлэр чп.%{0} чп. анараа өттүгэр\x1dааспыт бээтиҥсэ" + + "\x15бу бээтиҥсэ\x1bкэлэр бээтиҥсэ\x1a{0} бээтиҥсэнэн0{0} бээтиҥсэ анараа" + + " өттүгэр\x12ааспыт бэ.\x0aбу бэ.\x10кэлэр бэ.%{0} бэ. анараа өттүгэр\x1b" + + "ааспыт субуота\x13бу субуота\x19кэлэр субуота\x18{0} субуотанан.{0} суб" + + "уота анараа өттүгэр\x12ааспыт сб.\x0aбу сб.\x10кэлэр сб.%{0} сб. анараа" + + " өттүгэр\x09ЭИ/ЭК\x08Чаас\x11бу чааска\x14{0} чааһынан({0} чаас ынараа ө" + + "ттүгэр\x0eМүнүүтэ\x17бу мүнүүтэҕэ\x1a{0} мүнүүтэннэн.{0} мүнүүтэ ынараа" + + " өттүгэр\x10Сөкүүндэ\x0eбилигин\x1c{0} сөкүүндэннэн0{0} сөкүүндэ ынараа " + + "өттүгэр'{0} сөк. анараа өттүгэр\x17Кэм балаһата\x13Арааб кэмэ\x1eАрааб " + + "сүрүн кэмэ\"Арааб сайыҥҥы кэмэ\x15Эрмээн кэмэ Эрмээн сүрүн кэмэ$Эрмээн " + + "сайыҥҥы кэмэ$Киин Австралия кэмэ/Киин Австралия сүрүн кэмэ3Киин Австрал" + + "ия сайыҥҥы кэмэ$Илин Австралия кэмэ/Илин Австралия сүрүн кэмэ3Илин Авст" + + "ралия сайыҥҥы кэмэ&Арҕаа Австралия кэмэ1Арҕаа Австралия сүрүн кэмэ5Арҕа" + + "а Австралия сайыҥҥы кэмэ\x13Кытай кэмэ\x1eКытай сүрүн кэмэ\"Кытай сайыҥ" + + "ҥы кэмэ\x1bЧойбалсан кэмэ&Чойбалсан сүрүн кэмэ*Чойбалсан сайыҥҥы кэмэ" + + "\x19Курусуун кэмэ$Курусуун сүрүн кэмэ(Курусуун сайыҥҥы кэмэ\"Ииндийэ сүр" + + "үн кэмэ\x13Ираан кэмэ\x1eИраан сүрүн кэмэ\"Ыраан сайыҥҥы кэмэ\x19Дьоппу" + + "он кэмэ$Дьоппуон сүрүн кэмэ(Дьоппуон сайыҥҥы кэмэ&Илин Казахстаан кэмэ(" + + "Арҕаа Казахстаан кэмэ\x15Кэриэй кэмэ Кэриэй сүрүн кэмэ$Кэриэй сайыҥҥы к" + + "эмэ!Красноярскай кэмэ,Красноярскай сүрүн кэмэ0Красноярскай сайыҥҥы кэмэ" + + "\x1dКыргыстаан кэмэ\x19Магадаан кэмэ$Магадаан сүрүн кэмэ(Магадаан сайыҥҥ" + + "ы кэмэ\x1eУлан Баатар кэмэ)Улан Баатар сүрүн кэмэ-Улан Баатар сайыҥҥы к" + + "эмэ\x17Москуба кэмэ\"Москуба сүрүн кэмэ&Москуба сайыҥҥы кэмэ\"Саҥа Зела" + + "ндия кэмэ+Саҥа Сэйлэнд сүрүн кэмэ/Саҥа Сэйлэнд сайыҥҥы кэмэ#Новосибирск" + + "ай кэмэ.Новосибирскай сүрүн кэмэ2Новосибирскай сайыҥҥы кэмэ\x15Омскай к" + + "эмэ Омскай сүрүн кэмэ$Омскай сайыҥҥы кэмэ\x1bПакистаан кэмэ&Пакистаан с" + + "үрүн кэмэ*Пакистаан сайыҥҥы кэмэ\x19Сахалиин кэмэ$Сахалыын сүрүн кэмэ(С" + + "ахалыын сайыҥҥы кэмэ\x1fВладивосток кэмэ0Быладьыбастыак сүрүн кэмэ4Была" + + "дьыбастыак сайыҥҥы кэмэ\x1bВолгоград кэмэ&Волгоград сүрүн кэмэ*Волгогра" + + "д сайыҥҥы кэмэ\x1dДьокуускай кэмэ(Дьокуускай сүрүн кэмэ,Дьокуускай сайы" + + "ҥҥы кэмэ!Екатеринбург кэмэ,Екатеринбуур сүрүн кэмэ0Екатеринбуур сайыҥҥы" + + " кэмэ\x03Obo\x03Waa\x03Oku\x03Ong\x03Ime\x03Ile\x03Sap\x03Isi\x03Saa\x03" + + "Tom\x03Tob\x03Tow\x0bLapa le obo\x0dLapa le waare\x0dLapa le okuni\x11La" + + "pa le ong’wan\x0cLapa le imet\x0bLapa le ile\x0cLapa le sapa\x0dLapa le " + + "isiet\x0cLapa le saal\x0dLapa le tomon\x11Lapa le tomon obo\x13Lapa le t" + + "omon waare\x03Are\x03Kun\x03Ine\x03Kwe\x0dMderot ee are\x0eMderot ee kun" + + "i\x13Mderot ee ong’wan\x0eMderot ee inet\x0dMderot ee ile\x0eMderot ee s" + + "apa\x0dMderot ee kwe\x07Tesiran\x05Teipa\x10Kabla ya Christo\x10Baada ya" + + " Christo\x07Nyamata\x04Lari\x04Lapa\x0aSaipa napo\x05Mpari\x08Ng’ole\x03" + + "Duo\x07Taisere\x05TS/TP\x04Saai\x07Idakika\x08Isekondi\x03Mup\x03Mwi\x03" + + "Msh\x03Mun\x03Mag\x03Muj\x03Msp\x03Mpg\x03Mye\x03Mok\x03Mus\x03Muh\x0cMu" + + "palangulwa\x07Mwitope\x08Mushende\x05Munyi\x0fMushende Magali\x07Mujimbi" + + "\x09Mushipepo\x08Mupuguto\x08Munyense\x05Mokhu\x0eMusongandembwe\x07Muha" + + "ano\x07Mulungu\x08Jumatatu\x07Jumanne\x08Jumatano\x09Alahamisi\x06Ijumaa" + + "\x08Jumamosi\x09Lwamilawu\x09Pashamihe\x12Ashanali uKilisito\x13Pamwandi" + + " ya Kilisto\x0cUluhaavi lwa\x06Mwakha\x05Mwesi\x07Ilijuma\x06Lusiku\x05I" + + "mehe\x0bIneng’uni\x09Pamulaawu\x12Ulusiku lwa Lijuma\x13Uluhaavi lwa lus" + + "iku\x07Ilisala\x08Isekunde\x12Uluhaavi lwa lisaa\x06آچر\x08سومر\x0aاڱارو" + + "\x08اربع\x08خميس\x08جمعو\x08ڇنڇر\x04سو\x04خم\x04آچ\x04اڱ\x04ار\x04جم\x04" + + "ڇن\x18پهرين ٽي ماهي\x14ٻين ٽي ماهي\x14ٽين ٽي ماهي\x18چوٿين ٽي ماهي" + +var bucket94 string = "" + // Size: 13263 bytes + "\x15صبح، منجهند\x15شام، منجهند\x15منجهند، شام\x14مسيح کان اڳ\x1fعام دور " + + "کان پهرين\x1cعيسوي کان پهرين\x0dعام دور\x11پويون سال\x0f{0} سالن ۾\x15{" + + "0} سال پهرين\x0dٽي ماهي\x18پوئين ٽي ماهي\x12هن ٽي ماهي\x16اڳين ٽي ماهي" + + "\x14{0} ٽي ماهي ۾\x1c{0} ٽي ماهي پهرين\x0aمهينو\x15پوئين مهيني\x0fهن مهي" + + "ني\x13اڳين مهيني\x11{0} مهينن ۾\x19{0} مهينا پهرين\x08هفتو\x13پوئين هفت" + + "ي\x0dهن هفتي\x11اڳين هفتي\x0f{0} هفتن ۾\x17{0} هفتا پهرين\x11{0} جي هفت" + + "ي\x18مهيني جي هفتي\x0aڏينهن\x04ڪل\x04اڄ\x0aسڀاڻي\x11{0} ڏينهن ۾\x19{0} " + + "ڏينهن پهرين\x16سال جو ڏينهن\x18هفتي جو ڏينهن(مهيني جي موڪل جو ڏينهن\x11" + + "پوئين آچر\x0bهن آچر\x0fاڳين آچر\x0f{0} آچرن ۾\x15{0} آچر پهرين\x13پوئين" + + " سومر\x0dهن سومر\x11اڳين سومر\x11{0} سومرن ۾\x17{0} سومر پهرين\x15پوئين " + + "اڱاري\x0fهن اڱاري\x13اڳين اڱاري\x11{0} اڱارن ۾\x19{0} اڱارا پهرين\x13پو" + + "ئين اربع\x0dهن اربع\x11اڳين اربع\x11{0} اربعن ۾\x19{0} اربعا پهرين\x13پ" + + "وئين خميس\x0dهن خميس\x11اڳين خميس\x11{0} خميسن ۾\x17{0} خميس پهرين\x13پ" + + "وئين جمعي\x0dهن جمعي\x11اڳين جمعي\x0f{0} جمعن ۾\x17{0} جمعا پهرين\x13پو" + + "ئين ڇنڇر\x0dهن ڇنڇر\x11اڳين ڇنڇر\x11{0} ڇنڇرن ۾\x17{0} ڇنڇر پهرين+صبح، " + + "منجهند/منجهند، شام\x08ڪلاڪ\x0bهن ڪلڪ\x0f{0} ڪلاڪ ۾\x17{0} ڪلاڪ پهرين" + + "\x06منٽ\x0bهن منٽ\x0f{0} منٽن ۾\x08+{0} min\x15{0} منٽ پهرين\x0aسيڪنڊ" + + "\x08هاڻي\x13{0} سيڪنڊن ۾\x19{0} سيڪنڊ پهرين\x11ٽائيم زون\x0a{0} وقت\x08{" + + "0} (+1)\x08{0} (+0)\x1cگڏيل دنياوي وقت.برطانيا جي اونهاري جو وقت!آئرش جو" + + " معياري وقت\x1eافغانستان جو وقت#مرڪزي آفريقا جو وقت!اوڀر آفريڪا جو وقت,ڏ" + + "کڻ آفريڪا جو معياري وقت#اولهه آفريقا جو وقت0اولهه آفريقا جو معياري وقت7" + + "اولهه آفريقا جي اونهاري جو وقت\x18الاسڪا جو وقت%الاسڪا جو معياري وقت(ال" + + "اسڪا جي ڏينهن جو وقت\x1aايميزون جو وقت'ايميزون جو معياري وقت.ايميزون جي" + + " اونهاري جو وقت\x11مرڪزي وقت\x1eمرڪزي معياري وقت!مرڪزي ڏينهن جو وقت\x11م" + + "شرقي وقت\x1eمشرقي معياري وقت!مشرقي ڏينهن جو وقت\x11پهاڙي وقت\x1eپهاڙي م" + + "عياري وقت!پهاڙي ڏينهن جو وقت\x13پيسيفڪ وقت پيسيفڪ معياري وقت#پيسيفڪ ڏين" + + "هن جو وقت\x14اپيا جو وقت!اپيا جو معياري وقت$اپيا جي ڏينهن جو وقت\x16عرب" + + "ين جو وقت#عربين جو معياري وقت&عربين جي ڏينهن جو وقت\x17ارجنٽائن وقت$ارج" + + "نٽائن معياري وقت0ارجنٽائن جي اونهاري جو وقت\"مغربي ارجنٽائن وقت4مغربي ا" + + "رجنٽائن جو معياري وقت;مغربي ارجنٽائن جي اونهاري جو وقت\x1aآرمينيا جو وق" + + "ت'آرمينيا جو معياري وقت.آرمينيا جي اونهاري جو وقت\x1cايٽلانٽڪ جو وقت)اي" + + "ٽلانٽڪ جو معياري وقت,ايٽلانٽڪ جي ڏينهن جو وقت'مرڪزي آسٽريليا جو وقت4آسٽ" + + "ريليا جو مرڪزي معياري وقت7آسٽريليا جو مرڪزي ڏينهن جو وقت2آسٽريليا جو مر" + + "ڪزي مغربي وقت?آسٽريليا جو مرڪزي مغربي معياري وقتBآسٽريليا جو مرڪزي مغرب" + + "ي ڏينهن جو وقت%اوڀر آسٽريليا جو وقت4آسٽريليا جو مشرقي معياري وقت7آسٽريل" + + "يا جو مشرقي ڏينهن جو وقت'مغربي آسٽريليا جو وقت4آسٽريليا جو مغربي معياري" + + " وقت7آسٽريليا جو مغربي ڏينهن جو وقت آذربائيجان جو وقت-آذربائيجان جو معيا" + + "ري وقت4آذربائيجان جي اونهاري جو وقت\x16ازورز جو وقت#ازورز جو معياري وقت" + + "*ازورز جي اونهاري جو وقت\x1cبنگلاديش جو وقت)بنگلاديش جو معياري وقت0بنگلا" + + "ديش جي اونهاري جو وقت\x16ڀوٽان جو وقت\x1aبولیویا جو وقت\x1cبراسیلیا جو " + + "وقت)براسيليا جو معياري وقت0براسيليا جي اونهاري جو وقت/برونائي داروالسلا" + + "م جو وقت\x19ڪيپ ورڊ جو وقت&ڪيپ ورڊ جو معياري وقت-ڪيپ ورڊ جي اونهاري جو " + + "وقت#چمورو جو معياري وقت\x14چئٿم جو وقت!چئٿم جو معياري وقت$چئٿم جي ڏينهن" + + " جو وقت\x12چلي جو وقت\x1fچلي جو معياري وقت&چلي جي اونهاري جو وقت\x16چائن" + + "ا جو وقت#چائنا جو معياري وقت&چائنا جي ڏينهن جو وقت\x1fچوئي بيلسن جو وقت" + + ",چوئي بيلسن جو معياري وقت3چوئي بيلسن جي اونهاري جو وقت&ڪرسمس آئي لينڊ جو" + + " وقت&ڪوڪوس آئي لينڊ جو وقت\x1aڪولمبيا جو وقت'ڪولمبيا جو معياري وقت.ڪولمب" + + "يا جي اونهاري جو وقت\"ڪوڪ آئي لينڊ جو وقت/ڪوڪ آئي لينڊ جو معياري وقت;ڪو" + + "ڪ آئي لينڊ جي اڌ اونهاري جو وقت\x16ڪيوبا جو وقت#ڪيوبا جو معياري وقت&ڪيو" + + "با جي ڏينهن جو وقت\x14ڊيوس جو وقت%ڊومانٽ درويئل جو وقت\x1fاوڀر تيمور جو" + + " وقت&ايسٽر آئي لينڊ جو وقت3ايسٽر آئي لينڊ جو معياري وقت:ايسٽر آئي لينڊ ج" + + "ي اونهاري جو وقت\x1cايڪواڊور جو وقت\x1cمرڪزي يورپي وقت)مرڪزي يورپي معيا" + + "ري وقت0مرڪزي يورپي اونهاري جو وقت\x1cمشرقي يورپي وقت)مشرقي يورپي معياري" + + " وقت0مشرقي يورپي اونهاري جو وقت%وڌيڪ مشرقي يورپي وقت\x1cمغربي يورپي وقت)" + + "مغربي يورپي معياري وقت,مغربي يورپي ڏينهن جو وقت+فاڪ لينڊ آئي لينڊ جو وق" + + "ت8فاڪ لينڊ آئي لينڊ جو معياري وقت?فاڪ لينڊ آئي لينڊ جي اونهاري جو وقت" + + "\x12فجي جو وقت\x1fفجي جو معياري وقت&فجي جي اونهاري جو وقت'فرانسيسي گيانا" + + " جو وقت;فرانسيسي ڏاکڻي ۽ انٽارڪٽڪ جو وقت\x1eگالاپاگوز جو وقت\x1aگيمبيئر " + + "جو وقت\x18جارجيا جو وقت%جارجيا جو معياري وقت,جارجيا جي اونهاري جو وقت&گ" + + "لبرٽ آئي لينڊ جو وقت\x1fگرين وچ مين ٽائيم(مشرقي گرين لينڊ جو وقت5مشرقي " + + "گرين لينڊ جو معياري وقت<مشرقي گرين لينڊ جي اونهاري جو وقت(مغربي گرين لي" + + "نڊ جو وقت5مغربي گرين لينڊ جو معياري وقت<مغربي گرين لينڊ جي اونهاري جو و" + + "قت\x1aخلج معياري وقت\x16گیانا جو وقت%هوائي اليوٽين جو وقت2هوائي اليوٽين" + + " جو معياري وقت5هوائي اليوٽين جي ڏينهن جو وقت\x1dهانگ ڪانگ جو وقت*هانگ ڪا" + + "نگ جو معياري وقت1هانگ ڪانگ جي اونهاري جو وقت\x14هووڊ جو وقت!هووڊ جو معي" + + "اري وقت(هووڊ جي اونهاري جو وقت!ڀارت جو معياري وقت\x1bهند سمنڊ جو وقت" + + "\x1fانڊو چائنا جو وقت)مرڪزي انڊونيشيا جو وقت'اوڀر انڊونيشيا جو وقت)اولهه" + + " انڊونيشيا جو وقت\x16ايران جو وقت#ايران جو معياري وقت&ايران جي ڏينهن جو " + + "وقت\x18ارڪتسڪ جو وقت%ارڪتسڪ جو معياري وقت(ارڪتسڪ جي ڏينهن جو وقت\x1aاسر" + + "ائيل جو وقت'اسرائيل جو معياري وقت*اسرائيل جي ڏينهن جو وقت\x16جاپان جو و" + + "قت#جاپان جو معياري وقت&جاپان جي ڏينهن جو وقت%اوڀر قزاقستان جو وقت'اولهه" + + " قزاقستان جو وقت\x16ڪوريا جو وقت#ڪوريا جو معياري وقت&ڪوريا جي ڏينهن جو و" + + "قت\x1aڪوسرائي جو وقت\"ڪریسنویارسڪ جو وقت/ڪریسنویارسڪ جو معياري وقت2ڪریس" + + "نویارسڪ جي ڏينهن جو وقت\x1cڪرگزستان جو وقت$لائن آئي لينڊ جو وقت\x1dلورڊ" + + " هووي جو وقت*لورڊ هووي جو معياري وقت-لورڊ هووي جي ڏينهن جو وقت*مڪوائري آ" + + "ئي لينڊ جو وقت\x18مگادان جو وقت%مگادان جو معياري وقت(مگادان جي ڏينهن جي" + + " وقت\x1cملائيشيا جو وقت\x18مالديپ جو وقت\x1aمرڪيوسس جو وقت&مارشل آئي لين" + + "ڊ جو وقت\x1aموريشيس جو وقت'موريشيس جو معياري وقت.موريشيس جي اونهاري جو " + + "وقت\x18مائوسن جو وقت0شمالي مغربي ميڪسيڪو جو وقت=شمالي مغربي ميڪسيڪو جو " + + "معياري وقت@شمالي مغربي ميڪسيڪو جي ڏينهن جو وقت\"ميڪسيڪن پيسيفڪ وقت4ميڪس" + + "يڪن پيسيفڪ جو معياري وقت7ميڪسيڪن پيسيفڪ جي ڏينهن جو وقت\x1fاولان باتر ج" + + "و وقت,اولان باتر جو معياري وقت3اولان باتر جي اونهاري جو وقت\x16ماسڪو جو" + + " وقت#ماسڪو جو معياري وقت&ماسڪو جي ڏينهن جي وقت\x1aميانمار جو وقت\x18نائو" + + "رو جو وقت\x16نيپال جو وقت%نيو ڪيليڊونيا جو وقت2نيو ڪيليڊونيا جو معياري " + + "وقت9نيو ڪيليڊونيا جي اونهاري جو وقت\x1eنيوزيلينڊ جو وقت+نيوزيلينڊ جو مع" + + "ياري وقت.نيوزيلينڊ جي ڏينهن جو وقت(نيو فائونڊ لينڊ جو وقت5نيو فائونڊ لي" + + "نڊ جو معياري وقت8نيو فائونڊ لينڊ جي ڏينهن جو وقت\x16نيووي جو وقت)نار فو" + + "ڪ آئي لينڊ جو وقت.فرنانڊو دي نورونها جو وقت;فرنانڊو دي نورونها جو معيار" + + "ي وقت=فرنانڊو دي نورونها جي اونهاري وقت\"نوواسبئيرسڪ جو وقت/نوواسبئيرسڪ" + + " جو معياري وقت2نوواسبئيرسڪ جي ڏينهن جو وقت\x16اومسڪ جو وقت#اومسڪ جو معيا" + + "ري وقت&اومسڪ جي ڏينهن جو وقت\x1aپاڪستان جو وقت'پاڪستان جو معياري وقت.پا" + + "ڪستان جي اونهاري جو وقت\x16پلائو جو وقت$پاپوا نيو گني جو وقت\x1cپيراگوئ" + + "ي جو وقت)پيراگوئي جو معياري وقت0پيراگوئي جي اونهاري جو وقت\x14پيرو جو و" + + "قت!پيرو جو معياري وقت(پيرو جي اونهاري جو وقت\x18فلپائن جو وقت%فلپائن جو" + + " معياري وقت,فلپائن جي اونهاري جو وقت(فونيڪس آئي لينڊ جو وقت3سینٽ پیئر و " + + "میڪوئیلون جو وقت@سینٽ پیئر و میڪوئیلون جو معياري وقتCسینٽ پیئر و میڪوئی" + + "لون جي ڏينهن جو وقت\x18پٽڪيرن جو وقت\x18پوناپي جو وقت\x1fشيانگ يانگ جو " + + "وقت\x1bري يونين جو وقت\x18روٿيرا جو وقت\x18سخالين جو وقت%سخالين جو معيا" + + "ري وقت(سخالين جي ڏينهن جو وقت\x16ساموا جو وقت#ساموا جو معياري وقت&ساموا" + + " جي ڏينهن جو وقت\x17شي شلز جو وقت'سنگاپور جو معياري وقت(سولومن آئي لينڊ " + + "جو وقت\x1fڏکڻ جارجيا جو وقت\x1bسوري نام جو وقت\x18سائيوا جو وقت\x18تاهي" + + "ٽي جو وقت\x16تائپي جو وقت#تائپي جو معياري وقت&تائپي جي ڏينهن جو وقت\x1c" + + "تاجڪستان جو وقت\x1cٽوڪيلائو جو وقت\x16ٽونگا جو وقت#ٽونگا جو معياري وقت*" + + "ٽونگا جي اونهاري جو وقت\x14چيوڪ جو وقت ترڪمانستان جو وقت-ترڪمانستان جو " + + "معياري وقت4ترڪمانستان جي اونهاري جو وقت\x18تووالو جو وقت\x1cيوروگائي جو" + + " وقت)يوروگائي جو معياري وقت0يوروگائي جي اونهاري جو وقت\x1cازبڪستان جو وق" + + "ت)ازبڪستان جو معياري وقت0ازبڪستان جي اونهاري جو وقت\x1aوانواتو جو وقت'و" + + "انواتو جو معياري وقت*وانواتو جي ڏينهن جو وقت\x1cوينزويلا جو وقت ولادووس" + + "توڪ جو وقت-ولادووستوڪ جو معياري وقت2اولادووستوڪ جي ڏينهن جو وقت\x1eوولگ" + + "وگراد جو وقت+وولگوگراد جو معياري وقت.وولگوگراد جي ڏينهن جو وقت\x18ووسٽو" + + "ڪ جو وقت\"ويڪ آئي لينڊ جو وقت\"ويلس ۽ فتونا جو وقت\x18ياڪتسڪ جو وقت%ياڪ" + + "تسڪ جو معياري وقت(ياڪتسڪ جي ڏينهن جو وقت يڪاٽيرنبرگ جو وقت-يڪاٽيرنبرگ ج" + + "و معياري وقت0يڪاٽيرنبرگ جي ڏينهن جو وقت\x08{0} (+1)\x08{0} (+0)" + +var bucket95 string = "" + // Size: 10602 bytes + "\x06ođđj\x04guov\x04njuk\x03cuo\x04mies\x04geas\x04suoi\x04borg\x06čakč" + + "\x04golg\x05skáb\x04juov\x10ođđajagemánnu\x0cguovvamánnu\x0dnjukčamánnu" + + "\x0ccuoŋománnu\x0cmiessemánnu\x0cgeassemánnu\x0dsuoidnemánnu\x0bborgemán" + + "nu\x0dčakčamánnu\x0dgolggotmánnu\x0dskábmamánnu\x0cjuovlamánnu\x04sotn" + + "\x04vuos\x04maŋ\x04gask\x04duor\x04bear\x04láv\x0bsotnabeaivi\x0avuossár" + + "ga\x0dmaŋŋebárga\x0bgaskavahkku\x09duorasdat\x09bearjadat\x0alávvardat" + + "\x04i.b.\x0ciđitbeaivet\x0deahketbeaivet\x0biđitbeaivi\x0ceahketbeaivi" + + "\x0fovdal Kristtusa\x12maŋŋel Kristtusa\x05o.Kr.\x05m.Kr.\x04ooá\x03oá" + + "\x06jáhki\x14{0} jahki maŋŋilit\x15{0} jahkki maŋŋilit\x0f{0} jahki árat" + + "\x10{0} jahkki árat\x06mánnu\x1a{0} mánotbadji maŋŋilit\x15{0} mánotbadj" + + "i árat\x07váhkku\x14{0} vahku maŋŋilit\x15{0} vahkku maŋŋilit\x0f{0} vah" + + "ku árat\x10{0} vahkku árat\x06beaivi\x0coovdebpeivvi\x04ikte\x04odne\x06" + + "ihttin\x0epaijeelittáá\x16{0} jándor maŋŋilit\x17{0} jándor amaŋŋilit" + + "\x17{0} jándora maŋŋilit\x11{0} jándor árat\x12{0} jándora árat\x0dváhkk" + + "ubeaivi\x13beaivi ráidodássi\x06diibmu\x15{0} diibmu maŋŋilit\x16{0} dii" + + "bmur maŋŋilit\x10{0} diibmu árat\x11{0} diibmur árat\x08minuhtta\x16{0} " + + "minuhta maŋŋilit\x17{0} minuhtta maŋŋilit\x11{0} minuhta árat\x12{0} min" + + "uhtta árat\x02na\x16{0} sekunda maŋŋilit\x17{0} sekundda maŋŋilit\x11{0}" + + " sekunda árat\x12{0} sekundda árat\x0cáigeavádat\x09{0} áigi\x0f{0} geas" + + "siáigi\x13{0} dábálašáigi\x14gaska-Eurohpá áigi\x1egaska-Eurohpá dábálaš" + + "áigi\x1agaska-Eurohpá geassiáigi\x15nuorti-Eurohpá áigi\x1fnuorti-Euroh" + + "pá dábálašáigi\x1bnuorti-Eurohpá geassiáigi\x14oarje-Eurohpá áigi\x1eoar" + + "je-Eurohpá dábálašáigi\x1aoarje-Eurohpá geassiáigi\x16Greenwich gaskka á" + + "igi\x0cMoskva-áigi\x16Moskva-dábálašáigi\x12Moskva-geassiáigi\x05cuoŋ" + + "\x09mánnodat\x06disdat\x09duorastat\x0alávvordat\x0e1. njealjádas\x0e2. " + + "njealjádas\x0e3. njealjádas\x0e4. njealjádas\x02ib\x02eb\x01i\x0eovdal K" + + "ristusa\x0fovdal áigelogu\x11maŋŋel Kristusa\x0aáigelohku\x04oKr.\x06oáá" + + ".\x04mKr.\x05áá.\x08áigodat\x05áig.\x05jahki\x07diibmá\x09dán jagi\x0cbo" + + "ahtte jagi\x0e{0} jagi siste\x0bovddet jagi\x13{0} jagi dás ovdal\x0c{0}" + + " j. siste\x11{0} j. dás ovdal\x10njealjádasjahki\x16mannan njealjádasjag" + + "i\x14dán njealjádasjagi\x17boahtte njealjádasjagi\x1fčuovvovaš {0} njeal" + + "jádasjagi\x1f-{0} njealjádasjagi dás ovdal\x09njealj.j.\x15boahtte {0} n" + + "jealj.j.\x1bboahtte {0} njealjádasjagi\x18{0} njealj.j. dás ovdal\x1e{0}" + + " njealjádasjagi dás ovdal\x10jahkenjealjádas\x0cmannan mánu\x0adán mánu" + + "\x0dboahtte mánu\x0f{0} mánu siste\x15{0} mánnu dás ovdal\x14{0} mánu dá" + + "s ovdal\x12{0} mánu geahčen\x06vahkku\x0cmannan vahku\x0adán vahku\x0dbo" + + "ahtte vahku\x12{0} vahku geahčen\x15{0} vahkku dás ovdal\x14{0} vahku dá" + + "s ovdal\x0a{0} vahkku\x04v(k)\x0e{0} v(k) siste\x0f{0} vahku siste\x13{0" + + "} v(k) dás ovdal\x11{0} v(k) geahčen\x0cmánu vahkku\x07m. v(k)\x0eovddet" + + " beaivvi\x0bdon beaivve\x11{0} beaivve siste\x0eovddet beaivve\x16{0} be" + + "aivve dás ovdal\x02b.\x0bjagi beaivi\x09j. beaivi\x0cvahkkobeaivi\x0bv(k" + + ") beaivi\x12mánu vahkkobeaivi\x09m. v(k)b.\x13mannan sotnabeaivve\x11dán" + + " sotnabeaivve\x14boahtte sotnabeaivve\x18boahtte {0} sotnabeaivve\x13ovd" + + "det sotnabeaivve\x1b{0} sotnabeaivve dás ovdal\x0aboahtte so\x13maŋit so" + + "tnabeaivve\x0e{0} boahtte so\x09mannan so\x11{0} so dás ovdal\x11mannan " + + "mánnodaga\x0fdán mánnodaga\x12boahtte mánnodaga\x16{0} boahtte mánnodaga" + + "\x16boahtte {0} mánnodaga\x11ovddet mánnodaga\x19{0} mánnodaga dás ovdal" + + "\x0f{0} boahtte má\x0amannan má\x0aovddet má\x12{0} má dás ovdal\x0emann" + + "an disdaga\x0cdán disdaga\x0fboahtte disdaga\x13{0} boahtte disdaga\x0eo" + + "vddet disdaga\x16{0} disdaga dás ovdal\x0aboahtte di\x0e{0} boahtte di" + + "\x09mannan di\x11{0} di dás ovdal\x11mannan gaskavahku\x0fdán gaskavahku" + + "\x12boahtte gaskavahku\x16{0} boahtte gaskavahku\x11ovddet gaskavahku" + + "\x19{0} gaskavahku dás ovdal\x0aboahtte ga\x0e{0} boahtte ga\x09mannan g" + + "a\x11{0} ga dás ovdal\x11mannan duorastaga\x0fdán duorastaga\x12boahtte " + + "duorastaga\x17+{0} boahtte duorastaga\x11ovddet duorastaga\x19{0} duoras" + + "taga dás ovdal\x0aboahtte du\x0f+{0} boahtte du\x09mannan du\x11{0} du d" + + "ás ovdal\x11mannan bearjadaga\x0fdán bearjadaga\x12boahtte bearjadaga" + + "\x16boahtte {0} bearjadaga\x11ovddet bearjadaga\x1a-{0} bearjadaga dás o" + + "vdal\x0aboahtte be\x0eboahtte {0} be\x09mannan be\x12-{0} be dás ovdal" + + "\x12mannan lávvordaga\x10dán lávvordaga\x13boahtte lávvordaga\x17{0} boa" + + "htte lávvordaga\x17boahtte {0} lávvordaga\x12ovddet lávvordaga\x1b-{0} l" + + "ávvordaga dás ovdal\x10+{0} boahtte lá\x0fboahtte {0} lá\x0amannan lá" + + "\x0aovddet lá\x13-{0} lá dás ovdal\x05ib/eb\x0bdán diimmu\x10{0} diimmu " + + "siste\x10{0} diibmu áigi\x10{0} diimmu áigi\x03dmu\x0d{0} dmu siste\x0d{" + + "0} dmu áigi\x0cdán minuhta\x11{0} minuhta siste\x12{0} minuhtta áigi\x11" + + "{0} minuhta áigi\x0e{0} min. siste\x0e{0} min. áigi\x04dál\x12{0} sekund" + + "da siste\x11{0} sekunda áigi\x12{0} sekundda áigi\x0e{0} sek. siste\x0e{" + + "0} sek. áigi\x06á.av.\x0f{0} geasseáigi\x0f{0} dálveáigi\x1fkoordinereju" + + "vvon oktasaš áigi\x16Brihtalaš geasseáigi\x19Irlánddalaš dálveáigi\x12Af" + + "ganisthana áigi\x14Gaska-Afrihká áigi\x15Nuorta-Afrihká áigi\x1aLulli-Af" + + "rihká dálveáigi\x14Oarje-Afrihká áigi\x1aOarje-Afrihká dálveáigi\x1aOarj" + + "e-Afrihká geasseáigi\x0cAlaska áigi\x12Alaska dálveáigi\x12Alaska geasse" + + "áigi\x0dAmazona áigi\x13Amazona dálveáigi\x13Amazona geasseáigi\x0fdábá" + + "lašáigi\x16dábálaš dálveáigi\x16dábálaš geasseáigi\x0dáigi nuortan\x13dá" + + "lveáigi nuortan\x13geasseáigi nuortan\x0cduottaráigi\x12dálveduottaráigi" + + "\x12geasseduottaráigi\x10Jaskesábi áigi\x16Jaskesábi dálveáigi\x16Jaskes" + + "ábi geasseáigi\x0aApia áigi\x10Apia dálveáigi\x10Apia geasseáigi\x0dArá" + + "bia áigi\x13Arábia dálveáigi\x13Arábia geasseáigi\x0fArgentina áigi\x15A" + + "rgentina dálveáigi\x15Argentina geasseáigi\x15Oarje-Argentina áigi\x1bOa" + + "rje-Argentina dálveáigi\x1bOarje-Argentina geasseáigi\x0dArmenia áigi" + + "\x13Armenia dálveáigi\x13Armenia geasseáigi\x12atlántalaš áigi\x18atlánt" + + "alaš dálveáigi\x18atlántalaš geasseáigi\x16Gaska-Austrália áigi\x1cGaska" + + "-Austrália dálveáigi\x1cGaska-Austrália geasseáigi\"Gaska-Austrália oarj" + + "jabeali áigi(Gaska-Austrália oarjjabeali dálveáigi(Gaska-Austrália oarjj" + + "abeali geasseáigi\x17Nuorta-Austrália áigi\x1dNuorta-Austrália dálveáigi" + + "\x1dNuorta-Austrália geasseáigi\x16Oarje-Austrália áigi\x1cOarje-Austrál" + + "ia dálveáigi\x1cOarje-Austrália geasseáigi\x12Aserbaižana áigi\x18Aserba" + + "ižana dálveáigi\x18Aserbaižana geasseáigi\x0dAzoraid áigi\x13Azoraid dál" + + "veáigi\x13Azoraid geasseáigi\x11Bangladesha áigi\x17Bangladesha dálveáig" + + "i\x17Bangladesha geasseáigi\x0dBhutana áigi\x0dBolivia áigi\x0eBrasilia " + + "áigi\x14Brasilia dálveáigi\x14Brasilia geasseáigi\x18Brunei Darussalama" + + " áigi\x0fKap Verde áigi\x15Kap Verde dálveáigi\x15Kap Verde geasseáigi" + + "\x14Čamorro dálveáigi\x0eChathama áigi\x14Chathama dálveáigi\x14Chathama" + + " geasseáigi\x0bChile áigi\x11Chile dálveáigi\x11Chile geasseáigi\x0dKiin" + + "ná áigi\x13Kiinná dálveáigi\x13Kiinná geasseáigi\x11Choibolsana áigi\x17" + + "Choibolsana dálveáigi\x17Choibolsana geasseáigi\x11Juovlasullo áigi\x12K" + + "okossulloid áigi\x0eColombia áigi\x14Colombia dálveáigi\x14Colombia geas" + + "seáigi\x11Cooksulloid áigi\x17Cooksulloid dálveáigi#Cooksulloid geasi be" + + "allemuttu áigi\x0aCuba áigi\x10Cuba dálveáigi\x10Cuba geasseáigi\x0cDavi" + + "sa áigi\x18Dumont-d’Urville áigi\x13Nuorta-Timora áigi\x14Beassášsullo á" + + "igi\x1aBeassášsullo dálveáigi\x1aBeassášsullo geasseáigi\x0eEcuadora áig" + + "i\x14Gaska-Eurohpá áigi\x1aGaska-Eurohpá dálveáigi\x1aGaska-Eurohpá geas" + + "seáigi\x14Nuorta-Eurohpa áigi\x1aNuorta-Eurohpa dálveáigi\x1aNuorta-Euro" + + "hpa geasseáigi\"Gáiddus-Nuortti eurohpalaš áigi\x14Oarje-Eurohpá áigi" + + "\x1aOarje-Eurohpá dálveáigi\x1aOarje-Eurohpá geasseáigi\x15Falklandsullu" + + "id áigi\x1bFalklandsulluid dálveáigi\x1bFalklandsulluid geasseáigi\x0aFi" + + "ji áigi\x10Fiji dálveáigi\x10Fiji geasseáigi\x18Frankriikka Guyana áigi%" + + "Frankriikka lulli & antárktisa áigi\x10Galapagosa áigi\x0eGambiera áigi" + + "\x0dGeorgia áigi\x13Georgia dálveáigi\x13Georgia geasseáigi\x14Gilbertsu" + + "lloid áigi\x10Greenwicha áigi\x1aNuorta-Ruonáeatnama áigi Nuorta-Ruonáea" + + "tnama dálveáigi Nuorta-Ruonáeatnama geasseáigi\x19Oarje-Ruonáeatnama áig" + + "i\x1fOarje-Ruonáeatnama dálveáigi\x1fOarje-Ruonáeatnama geasseáigi\x11Go" + + "lfa dálveáigi\x0cGuyana áigi\x18Hawaii-aleuhtalaš áigi\x1eHawaii-aleuhta" + + "laš dálveáigi\x1eHawaii-aleuhtalaš geasseáigi\x10Hong Konga áigi\x16Hong" + + " Konga dálveáigi\x16Hong Konga geasseáigi\x0bHovda áigi\x11Hovda dálveái" + + "gi\x11Hovda geasseáigi\x11India dálveáigi\x0fIndiaábi áigi\x11Indokiinná" + + " áigi\x15Gaska-Indonesia áigi\x16Nuorta-Indonesia áigi\x15Oarje-Indonesi" + + "a áigi\x0bIrana áigi\x11Irana dálveáigi\x11Irana geasseáigi\x0dIrkucka á" + + "igi\x13Irkucka dálveáigi\x13Irkucka geasseáigi\x0dIsraela áigi\x13Israel" + + "a dálveáigi\x13Israela geasseáigi\x0dJapána áigi\x13Japána dálveáigi\x13" + + "Japána geasseáigi\x17Nuorta-Kasakstana áigi\x16Oarje-Kasakstana áigi\x0b" + + "Korea áigi\x11Korea dálveáigi\x11Korea geasseáigi\x0dKosraea áigi\x12Kra" + + "snojarska áigi\x18Krasnojarska dálveáigi\x18Krasnojarska geasseáigi\x0eK" + + "irgisia áigi\x11Linesulloid áigi\x0fLord Howe áigi\x15Lord Howe dálveáig" + + "i\x15Lord Howe geasseáigi\x15MacQuarie sullo áigi\x0eMagadana áigi\x14Ma" + + "gadana dálveáigi\x14Magadana geasseáigi\x0dMalesia áigi\x12Malediivvaid " + + "áigi\x12Marquesasiid áigi\x15Marshallsulloid áigi\x10Mauritiusa áigi" + + "\x16Mauritiusa dálveáigi\x16Mauritiusa geasseáigi\x0dMawsona áigi\x18Oar" + + "jedavvi-Meksiko áigi\x1eOarjedavvi-Meksiko dálveáigi\x1eOarjedavvi-Meksi" + + "ko geasseáigi\x19Meksiko Jáskesábi áigi\x1fMeksiko Jáskesábi dálveáigi" + + "\x1fMeksiko Jáskesábi geasseáigi\x11Ulan-Batora áigi\x17Ulan-Batora dálv" + + "eáigi\x17Ulan-Batora geasseáigi\x0cMoskva áigi\x12Moskva dálveáigi\x12Mo" + + "skva geasseáigi\x0eMyanmara áigi\x0bNauru áigi\x0cNepala áigi\x16Ođđa-Ka" + + "ledonia áigi\x1cOđđa-Kaledonia dálveáigi\x1cOđđa-Kaledonia geasseáigi" + + "\x15Ođđa-Selánda áigi\x1bOđđa-Selánda dálveáigi\x1bOđđa-Selánda geasseái" + + "gi\x13Newfoundlanda áigi\x19Newfoundlanda dálveáigi\x19Newfoundlanda gea" + + "sseáigi\x0bNiuea áigi\x12Norfolksullo áigi\x19Fernando de Noronha áigi" + + "\x1fFernando de Noronha dálveáigi\x1fFernando de Noronha geasseáigi\x12N" + + "ovosibirska áigi\x18Novosibirska dálveáigi\x18Novosibirska geasseáigi" + + "\x0bOmska áigi\x11Omska dálveáigi\x11Omska geasseáigi\x0fPakistana áigi" + + "\x15Pakistana dálveáigi\x15Pakistana geasseáigi\x0cPalaua áigi\x19Papua " + + "Ođđa-Guinea áigi\x0fParaguaya áigi\x15Paraguaya dálveáigi\x15Paraguaya g" + + "easseáigi\x0aPeru áigi\x10Peru dálveáigi\x10Peru geasseáigi\x13Filippiin" + + "naid áigi\x19Filippiinnaid dálveáigi\x19Filippiinnaid geasseáigi\x14Phoe" + + "nixsulloid áigi\x1aSt. Pierre & Miquelo áigi St. Pierre & Miquelo dálveá" + + "igi St. Pierre & Miquelo geasseáigi\x15Pitcairnsulloid áigi\x0cPonape ái" + + "gi\x10Pyongyanga áigi\x0eReuniona áigi\x0dRothera áigi\x0eSahalina áigi" + + "\x14Sahalina dálveáigi\x14Sahalina geasseáigi\x0bSamoa áigi\x11Samoa dál" + + "veáigi\x11Samoa geasseáigi\x11Seychellaid áigi\x15Singapore dálveáigi" + + "\x14Salomonsulloid áigi\x13Lulli-Georgia áigi\x0eSuriname áigi\x0bSyowa " + + "áigi\x0cTahiti áigi\x0dTaipeia áigi\x13Taipeia dálveáigi\x13Taipeia gea" + + "sseáigi\x12Tažikistana áigi\x0eTokelaua áigi\x0bTonga áigi\x11Tonga dálv" + + "eáigi\x11Tonga geasseáigi\x0cChuuka áigi\x13Turkmenistana áigi\x19Turkme" + + "nistana dálveáigi\x19Turkmenistana geasseáigi\x0cTuvalu áigi\x0eUruguaya" + + " áigi\x14Uruguaya dálveáigi\x14Uruguaya geasseáigi\x11Usbekistana áigi" + + "\x17Usbekistana dálveáigi\x17Usbekistana geasseáigi\x0dVanuatu áigi\x13V" + + "anuatu dálveáigi\x13Vanuatu geasseáigi\x0fVenezuela áigi\x12Vladivostoka" + + " áigi\x18Vladivostoka dálveáigi\x18Vladivostoka geasseáigi\x10Volgograda" + + " áigi\x16Volgograda dálveáigi\x16Volgograda geasseáigi\x0dVostoka áigi" + + "\x0fWakesullo áigi\x17Wallis- ja Futuna áigi\x0dJakucka áigi\x13Jakucka " + + "dálveáigi\x13Jakucka geasseáigi\x14Jekaterinburga áigi\x1aJekaterinburga" + + " dálveáigi\x1aJekaterinburga geasseáigi\x01b\x01m\x01y\x02ɣ\x01c\x01k" + + "\x01n\x01d" + +var bucket96 string = "" + // Size: 16354 bytes + "\x07Janeiro\x08Fevreiro\x05Marco\x05Abril\x04Maio\x05Junho\x05Julho\x07A" + + "ugusto\x08Setembro\x06Otubro\x08Novembro\x08Decembro\x07Dimingu\x07Chipo" + + "si\x07Chipiri\x07Chitatu\x06Chinai\x08Chishanu\x06Sabudu\x0fAntes de Cri" + + "sto\x0bAnno Domini\x02AC\x02AD\x05Chaka\x06Ntsiku\x04Zuro\x04Lero\x08Man" + + "guana\x04Hora\x03Nye\x03Ful\x04Mbä\x03Ngu\x04Bêl\x04Fön\x03Len\x04Kük" + + "\x03Mvu\x03Ngb\x03Nab\x03Kak\x06Nyenye\x0aFulundïgi\x08Mbängü\x07Ngubùe" + + "\x09Bêläwü\x06Föndo\x06Lengua\x09Kükürü\x05Mvuka\x08Ngberere\x0bNabändür" + + "u\x07Kakauka\x03Bk1\x03Bk2\x03Bk3\x03Bk4\x03Bk5\x04Lâp\x04Lây\x0aBikua-ô" + + "ko\x0bBïkua-ûse\x0bBïkua-ptâ\x0dBïkua-usïö\x0bBïkua-okü\x09Lâpôsö\x08Lây" + + "enga\x06F4–1\x06F4–2\x06F4–3\x06F4–4\x11Fângbisïö ôko\x11Fângbisïö ûse" + + "\x11Fângbisïö otâ\x13Fângbisïö usïö\x02ND\x02LK\x10Kôzo na Krîstu\x14Na " + + "pekô tî Krîstu\x03KnK\x03NpK\x0aKùotângo\x04Ngû\x03Nze\x07Dimâsi\x03Lâ" + + "\x06Bîrï\x06Lâsô\x0aKêkerêke\x06Bïkua\x06Na lâ\x07Ngbonga\x0eNdurü ngbon" + + "ga\x0eNzîna ngbonga\x0bZukangbonga\x09ⵉⵏⵏ\x09ⴱⵕⴰ\x09ⵎⴰⵕ\x09ⵉⴱⵔ\x09ⵎⴰⵢ" + + "\x09ⵢⵓⵏ\x09ⵢⵓⵍ\x09ⵖⵓⵛ\x09ⵛⵓⵜ\x09ⴽⵜⵓ\x09ⵏⵓⵡ\x09ⴷⵓⵊ\x12ⵉⵏⵏⴰⵢⵔ\x0fⴱⵕⴰⵢⵕ\x0c" + + "ⵎⴰⵕⵚ\x0fⵉⴱⵔⵉⵔ\x0fⵎⴰⵢⵢⵓ\x0fⵢⵓⵏⵢⵓ\x12ⵢⵓⵍⵢⵓⵣ\x0cⵖⵓⵛⵜ\x18ⵛⵓⵜⴰⵏⴱⵉⵔ\x0fⴽⵜⵓⴱⵔ" + + "\x18ⵏⵓⵡⴰⵏⴱⵉⵔ\x18ⴷⵓⵊⴰⵏⴱⵉⵔ\x03ⵉ\x03ⴱ\x03ⵎ\x03ⵢ\x03ⵖ\x03ⵛ\x03ⴽ\x03ⵏ\x03ⴷ" + + "\x09ⴰⵙⴰ\x09ⴰⵢⵏ\x09ⴰⵙⵉ\x09ⴰⴽⵕ\x09ⴰⴽⵡ\x0cⴰⵙⵉⵎ\x0cⴰⵙⵉⴹ\x12ⴰⵙⴰⵎⴰⵙ\x0fⴰⵢⵏⴰⵙ" + + "\x12ⴰⵙⵉⵏⴰⵙ\x0fⴰⴽⵕⴰⵙ\x0fⴰⴽⵡⴰⵙ\x12ⵙⵉⵎⵡⴰⵙ\x15ⴰⵙⵉⴹⵢⴰⵙ\x08ⴰⴽ 1\x08ⴰⴽ 2\x08ⴰⴽ " + + "3\x08ⴰⴽ 4\x1aⴰⴽⵕⴰⴹⵢⵓⵔ 1\x1aⴰⴽⵕⴰⴹⵢⵓⵔ 2\x1aⴰⴽⵕⴰⴹⵢⵓⵔ 3\x1aⴰⴽⵕⴰⴹⵢⵓⵔ 4\x12ⵜⵉⴼ" + + "ⴰⵡⵜ\x18ⵜⴰⴷⴳⴳⵯⴰⵜ\x1aⴷⴰⵜ ⵏ ⵄⵉⵙⴰ ⴷⴼⴼⵉⵔ ⵏ ⵄⵉⵙⴰ\x09ⴷⴰⵄ\x09ⴷⴼⵄ\x0fⵜⴰⵙⵓⵜ\x15ⴰ" + + "ⵙⴳⴳⵯⴰⵙ\x0fⴰⵢⵢⵓⵔ\x15ⵉⵎⴰⵍⴰⵙⵙ\x09ⴰⵙⵙ\x0fⵉⴹⵍⵍⵉ\x0cⴰⵙⵙⴰ\x0fⴰⵙⴽⴽⴰ#ⴰⵙⵙ ⴳ ⵉⵎⴰⵍ" + + "ⴰⵙⵙJⵜⵉⵣⵉ ⴳ ⵡⴰⵙⵙ: ⵜⵉⴼⴰⵡⵜ/ⵜⴰⴷⴳⴳⵯⴰⵜ\x15ⵜⴰⵙⵔⴰⴳⵜ\x15ⵜⵓⵙⴷⵉⴷⵜ\x12ⵜⴰⵙⵉⵏⵜ#ⴰⴽⵓⴷ " + + "ⵏ ⵓⴳⵎⵎⴰⴹ\x03inn\x05bṛa\x05maṛ\x03ibr\x03may\x03yun\x03yul\x04ɣuc\x03cu" + + "t\x03ktu\x03nuw\x03duj\x06innayr\x09bṛayṛ\x08maṛṣ\x05ibrir\x05mayyu\x05y" + + "unyu\x06yulyuz\x05ɣuct\x08cutanbir\x05ktubr\x08nuwanbir\x08dujanbir\x03a" + + "sa\x03ayn\x03asi\x05akṛ\x03akw\x04asim\x06asiḍ\x06asamas\x05aynas\x06asi" + + "nas\x07akṛas\x05akwas\x07asimwas\x09asiḍyas\x04ak 1\x04ak 2\x04ak 3\x04a" + + "k 4\x0eakṛaḍyur 1\x0eakṛaḍyur 2\x0eakṛaḍyur 3\x0eakṛaḍyur 4\x06tifawt" + + "\x09tadggʷat\x0bdat n ɛisa\x0ddffir n ɛisa\x04daɛ\x04dfɛ\x05tasut\x08asg" + + "gʷas\x05ayyur\x07imalass\x03ass\x07iḍlli\x04assa\x05askka\x0dass g imala" + + "ss\x1ftizi g wass: tifawt / tadggʷat\x07tasragt\x07tusdidt\x06tasint\x0f" + + "akud n ugmmaḍ\x06ජන\x09පෙබ\x12මාර්තු\x18අප්\u200dරේල්\x0cමැයි\x0cජූනි" + + "\x0cජූලි\x09අගෝ\x0cසැප්\x09ඔක්\x0cනොවැ\x0cදෙසැ\x03ජ\x06පෙ\x06මා\x03අ\x06" + + "මැ\x06ජූ\x06සැ\x03ඔ\x06නෙ\x06දෙ\x12ජනවාරි\x18පෙබරවාරි\x15අගෝස්තු!සැප්ත" + + "ැම්බර්\x18ඔක්තෝබර්\x1bනොවැම්බර්\x1bදෙසැම්බර්\x0cමාර්\x0fඉරිදා\x0fසඳුදා" + + "\x09අඟහ\x0fබදාදා\x15බ්\u200dරහස්\x0cසිකු\x09සෙන\x03ඉ\x03ස\x03බ\x0cබ්" + + "\u200dර\x06සි\x06සෙ\x09ඉරි\x09සඳු\x06අඟ\x09බදා\x0fබ්\u200dරහ\x1bඅඟහරුවාද" + + "ා*බ්\u200dරහස්පතින්දා\x18සිකුරාදා\x1bසෙනසුරාදා\x0eකාර්:1\x0eකාර්:2\x0e" + + "කාර්:3\x0eකාර්:4\x1e1 වන කාර්තුව\x1e2 වන කාර්තුව\x1e3 වන කාර්තුව\x1e4 " + + "වන කාර්තුව\x12මැදියම\x0bපෙ.ව.\x1eමධ්\u200dයාහ්නය\x08ප.ව.\x12පාන්දර\x09" + + "උදේ\x0cදවල්\x09හවස\x06රෑ\x1fමැදියමට පසු\x03ම\x03ප\x06පා\x03උ\x03ද\x03හ" + + "+ක්\u200dරිස්තු පූර්ව&පොදු යුගයට පෙර(ක්\u200dරිස්තු වර්ෂ\x19පොදු යුගය" + + "\x17ක්\u200dරි.පූ.\x0cපොපෙ\x14ක්\u200dරි.ව.\x0dපො.යු\x0cයුගය\x0fවර්ෂය" + + "\x1cපසුගිය වසර\x13මෙම වසර\x13ඊළඟ වසර\x19වසර {0}කින්\x1dවසර {0}කට පෙර\x0a" + + "වර්.\x15කාර්තුව(පසුගිය කාර්තුව\x1fමෙම කාර්තුව\x1fඊළඟ කාර්තුව\"කාර්තු {" + + "0}කින්&කාර්තු {0}කට පෙර\x0dකාර්. පසුගිය කාර්.\x17මෙම කාර්.\x17ඊළඟ කාර්." + + "\x1dකාර්. {0}කින්!කාර්. {0}කට පෙර\x0cමාසය\x1fපසුගිය මාසය\x16මෙම මාසය\x16" + + "ඊළඟ මාසය\x19මාස {0}කින්\x1dමාස {0}කට පෙර\x0aමාස.\x1dපසුගිය මාස.\x14මෙම" + + " මාස.\x14ඊළඟ මාස.\x0cසතිය\x1fපසුගිය සතිය\x16මෙම සතිය\x16ඊළඟ සතිය\x19සති " + + "{0}කින්\x1dසති {0}කට පෙර\x1d{0} වෙනි සතිය\x0aසති.\x1dපසුගිය සති.\x14මෙම " + + "සති.\x14ඊළඟ සති.\x1cමාසයේ සතිය\x0cදිනය\x12පෙරේදා\x09ඊයේ\x06අද\x09හෙට" + + "\x15අනිද්දා\x13දින {0}න්\x1dදින {0}කට පෙර\x19වසරේ දිනය\x1cසතියේ දිනය,මාස" + + "යේ සතියේ දිනය\"පසුගිය ඉරිදා\x16මේ ඉරිදා\x19ඊළඟ ඉරිදා\"{0} ඉරිදාවකින්)ඉ" + + "රිදාවන් {0} කින්&{0} ඉරිදාවකට පෙර-ඉරිදාවන් {0} කට පෙර\"පසුගිය සඳුදා" + + "\x16මේ සඳුදා\x19ඊළඟ සඳුදා\"{0} සඳුදාවකින්)සඳුදාවන් {0} කින්&{0} සඳුදාවකට" + + " පෙර-සඳුදාවන් {0} කට පෙර.පසුගිය අඟහරුවාදා\"මේ අඟහරුවාදා%ඊළඟ අඟහරුවාදා.{0" + + "} අඟහරුවාදාවකින්5අඟහරුවාදාවන් {0} කින්2{0} අඟහරුවාදාවකට පෙර9අඟහරුවාදාවන්" + + " {0} කට පෙර\"පසුගිය බදාදා\x16මේ බදාදා\x19ඊළඟ බදාදා\"{0} බදාදාවකින්)බදාදා" + + "වන් {0} කින්&{0} බදාදාවකට පෙර-බදාදාවන් {0} කට පෙර=පසුගිය බ්\u200dරහස්ප" + + "තින්දා1මේ බ්\u200dරහස්පතින්දා4ඊළඟ බ්\u200dරහස්පතින්දා={0} බ්\u200dරහස්" + + "පතින්දාවකින්Dබ්\u200dරහස්පතින්දාවන් {0} කින්A{0} බ්\u200dරහස්පතින්දාවක" + + "ට පෙරHබ්\u200dරහස්පතින්දාවන් {0} කට පෙර+පසුගිය සිකුරාදා\x1fමේ සිකුරාදා" + + "\"ඊළඟ සිකුරාදා)+{0} සිකුරදාවකින්0සිකුරදාවන් +{0} කින්,{0} සිකුරදාවකට පෙර" + + "3සිකුරදාවන් {0} කට පෙර.පසුගිය සෙනසුරාදා\"මේ සෙනසුරාදා%ඊළඟ සෙනසුරාදා-සෙනස" + + "ුරාදා +{0} කින්6සෙනසුරාදාවන් +{0} කින්0සෙනසුරාදා {0} කට පෙර9සෙනසුරාදාව" + + "න් {0} කට පෙර\x12පෙ.ව/ප.ව\x09පැය\x13මෙම පැය\x19පැය {0}කින්\x1dපැය {0}ක" + + "ට පෙර\x1bමිනිත්තුව%මෙම මිනිත්තුව(මිනිත්තු {0}කින්,මිනිත්තු {0}කට පෙර" + + "\x0dමිනි.\x12තත්පරය\x0cදැන්\x1fතත්පර {0}කින්#තත්පර {0}කට පෙර\x0aතත්.\x1c" + + "වේලා කලාපය\x0fකලාපය\x13{0} වේලාව,{0} දිවාආලෝක වේලාව#{0} සම්මත වේලාව2සම" + + "කක්ෂ සාර්ව වේලාවGබ්\u200dරිතාන්\u200dය ගිම්හාන වේලාව8අයර්ලන්ත සම්මත වේ" + + "ලාව1ඇෆ්ගනිස්ථාන වේලාවAමධ්\u200dයම අප්\u200dරිකානු වේලාවGනැගෙනහිර අප්" + + "\u200dරිකානු වේලාව>දකුණු අප්\u200dරිකානු වේලාවNබටහිර අප්\u200dරිකානු සම්" + + "මත වේලාව2ඇලස්කා සම්මත වේලාව5ඇමර්සන් සම්මත වේලාව[උතුරු ඇමරිකානු මධ්" + + "\u200dයම සම්මත වේලාවaඋතුරු ඇමරිකානු නැගෙනහිර සම්මත වේලාවXඋතුරු ඇමරිකානු " + + "කඳුකර සම්මත වේලාවaඋතුරු ඇමරිකානු පැසිෆික් සම්මත වේලාව/අපියා සම්මත වේලා" + + "ව/අරාබි සම්මත වේලාව>ආර්ජන්ටිනා සම්මත වේලාවNබටහිර ආර්ජන්ටිනා සම්මත වේලා" + + "ව;ආමේනියානු සම්මත වේලාවAඅත්ලාන්තික් සම්මත වේලාවJඕස්ට්\u200dරේලියානු සම" + + "්මත වේලාවmමධ්\u200dයම බටහිර ඔස්ට්\u200dරේලියානු සම්මත වේලාවcනැගෙනහිර ඕ" + + "ස්ට්\u200dරේලියානු සම්මත වේලාවZබටහිර ඕස්ට්\u200dරේලියානු සම්මත වේලාවAඅ" + + "සර්බයිජාන් සම්මත වේලාව5ඇසොර්ස් සම්මත වේලාව8බංගලාදේශ සම්මත වේලාව\x1fභුත" + + "ාන වේලාව(බොලිවියා වේලාව5බ්\u200dරසීල සම්මත වේලාවAබෘනායි දරුස්සලාම් වේල" + + "ාව8කේප්වේඩ් සම්මත වේලාව\x1fචමොරෝ වේලාව/චැතම් සම්මත වේලාව,චිලී සම්මත වේ" + + "ලාව)චීන සම්මත වේලාවAචොයිබල්සාන් සම්මත වේලාව>ක්\u200dරිස්මස් දුපත් වේලා" + + "ව2කොකෝස් දුපත් වේලාව>කොලොම්බියා සම්මත වේලාව<කුක් දුපත් සම්මත වේලාව8කිය" + + "ුබානු සම්මත වේලාව\"ඩාවිස් වේලාවDදුමොන්ත්-ඩ්උර්විල් වේලාව;නැගෙනහිර ටිමෝ" + + "ර් වේලාවBඊස්ටර් දූපත් සම්මත වේලාව(ඉක්වදෝර් වේලාවHමධ්\u200dයම යුරෝපීය ස" + + "ම්මත වේලාවNනැගෙනහිර යුරෝපීය සම්මත වේලාවKතවත්-නැගෙනහිර යුරෝපීය වේලාවEබට" + + "හිර යුරෝපීය සම්මත වේලාවKෆෝක්ලන්ඩ් දූපත් සම්මත වේලාව,ෆිජි සම්මත වේලාව/ප" + + "්\u200dරංශ ගයනා වේලාවjප්\u200dරංශ දකුණුදිග සහ ඇන්ටාර්ක්ටික් වේලාව%ගලපග" + + "ොස් වේලාව+ගැම්බියර් වේලාව>ජෝර්ජියානු සම්මත වේලාව;ගිල්බර්ට් දුපත් වේලාව" + + ">ග්\u200dරිනිච් මධ්\u200dයම වේලාවZනැගෙනහිර ග්\u200dරීන්ලන්ත සම්මත වේලාවQ" + + "බටහිර ග්\u200dරීන්ලන්ත සම්මත වේලාව\x1fගල්ෆ් වේලාව\x1cගයනා වේලාවQහවායි-" + + "අලෙයුතියාන් සම්මත වේලාව2හොංකොං සම්මත වේලාව2හොව්ඩ් සම්මත වේලාව+ඉන්දියාන" + + "ු වේලාව5ඉන්දියන් සාගර වේලාව(ඉන්දුචීන වේලාවJමධ්\u200dයම ඉන්දුනීසියානු ව" + + "ේලාවPනැගෙනහිර ඉන්දුනීසියානු වේලාවGබටහිර ඉන්දුනීසියානු වේලාව,ඉරාන සම්මත" + + " වේලාවAඉර්කුට්ස්ක් සම්මත වේලාව8ඊශ්\u200dරායල සම්මත වේලාව,ජපාන සම්මත වේලා" + + "වAනැගෙනහිර කසකස්තාන වේලාව8බටහිර කසකස්තාන වේලාව8කොරියානු සම්මත වේලාව\"ක" + + "ොස්රේ වේලාවPක්\u200dරස්නොයාර්ස්ක් සම්මත වේලාව1කිර්ගිස්තාන වේලාව,ශ්" + + "\u200dරී ලංකා වේලාව/ලයින් දුපත් වේලාව?ලෝර්ඩ් හෝව් සම්මත වේලාව;මැක්කුඅරි " + + "දුපත් වේලාව2මෙගඩන් සම්මත වේලාව.මැලේසියානු වේලාව.මාලදිවයින් වේලාව1මාර්ක" + + "ුඑසාස් වේලාව5මාර්ෂල් දුපත් වේලාව2මුරුසි සම්මත වේලාව%මොව්සන් වේලාවBවයඹ " + + "මෙක්සිකෝ සම්මත වේලාවQමෙක්සිකෝ පැසිෆික් සම්මත වේලාව?උලාන් බාටර් සම්මත ව" + + "ේලාව5මොස්කව් සම්මත වේලාව+මියන්මාර් වේලාව\"නාවුරු වේලාව\x1fනේපාල වේලාවH" + + "නව සෙලඩොනියානු සම්මත වේලාව8නවසීලන්ත සම්මත වේලාවGනිව්ෆවුන්ලන්ත සම්මත වේ" + + "ලාව\x1cනියු වේලාව8නොෆොල්ක් දුපත් වේලාව[ෆර්නැන්ඩෝ ඩි නොරොන්හා සම්මත වේල" + + "ාවGනොවසිබිර්ස්ක් සම්මත වේලාව5ඔම්ස්ක් සම්මත වේලාව;පාකිස්ථාන සම්මත වේලාව" + + "\x1fපලාවු වේලාවBපැපුවා නිව් ගිනීයා වේලාව5පැරගුවේ සම්මත වේලාව,පේරු සම්මත " + + "වේලාව5පිලිපීන සම්මත වේලාව8ෆීනික්ස් දුපත් වේලාව\\ශාන්ත පියරේ සහ මැකෝලන්" + + " සම්මත වේලාව.පිට්කෙයාන් වේලාව\x1fපොනපේ වේලාව1ප්යොන්ග්යන් වේලාව+රියුනියන්" + + " වේලාව\"රොතෙරා වේලාව2සඛලින් සම්මත වේලාව2සැමෝවා සම්මත වේලාව(සීෂෙල්ස් වේලා" + + "ව.සිංගප්පුරු වේලාව5සොලොමන් දූපත් වේලාව2දකුණු ජෝජියා වේලාව%සුරිනාම වේලා" + + "ව\"ස්යෝවා වේලාව\"ටාහිටි වේලාව2තායිපේ සම්මත වේලාව.ටජිකිස්තාන වේලාව(ටොකෙ" + + "ලාවු වේලාව/ටොංගා සම්මත වේලාව\x1cචුක් වේලාවJටර්ක්මෙනිස්තාන සම්මත වේලාව" + + "\"ටුවාලු වේලාව5උරුගුවේ සම්මත වේලාවDඋස්බෙකිස්තාන සම්මත වේලාව2වනුආටු සම්මත" + + " වේලාව.වෙනිසියුලා වේලාවGව්ලදිවෝස්ටෝක් සම්මත වේලාවGවොල්ගොග්\u200dරාඩ් සම්" + + "මත වේලාව(වොස්ටොක් වේලාව,වේක් දූපත් වේලාව<වැලිස් සහ ෆුටුනා වේලාව;යකුට්ස" + + "්ක් සම්මත වේලාවJයෙකටෙරින්බර්ග් සම්මත වේලාව\x15ⴰⵙⵉⵎⵡⴰⵙ" + +var bucket97 string = "" + // Size: 9376 bytes + ">බටහිර අප්\u200dරිකානු වේලාවTබටහිර අප්\u200dරිකානු ග්\u200dරීෂ්ම කාලය\"ඇ" + + "ලස්කා වේලාව;ඇලස්කා දිවාආලෝක වේලාව%ඇමර්සන් වේලාව;ඇමර්සන් ග්\u200dරීෂ්ම " + + "කාලයKඋතුරු ඇමරිකානු මධ්\u200dයම වේලාවdඋතුරු ඇමරිකානු මධ්\u200dයම දිවාආ" + + "ලෝක වේලාවQඋතුරු ඇමරිකානු නැගෙනහිර වේලාවjඋතුරු ඇමරිකානු නැගෙනහිර දිවාආල" + + "ෝක වේලාවHඋතුරු ඇමරිකානු කඳුකර වේලාවaඋතුරු ඇමරිකානු කඳුකර දිවාආලෝක වේලා" + + "වQඋතුරු ඇමරිකානු පැසිෆික් වේලාවjඋතුරු ඇමරිකානු පැසිෆික් දිවාආලෝක වේලාව" + + "\x1fඅපියා වේලාව,අපියා දිවා වේලාව\x1fඅරාබි වේලාව/අරාබි දහවල් වේලාව.ආර්ජන්" + + "ටිනා වේලාවDආර්ජන්ටිනා ග්\u200dරීෂ්ම කාලය>බටහිර ආර්ජන්ටිනා වේලාවTබටහිර " + + "ආර්ජන්ටිනා ග්\u200dරීෂ්ම කාලය+ආමේනියානු වේලාවDආමේනියානු ග්\u200dරීෂ්ම " + + "වේලාව1අත්ලාන්තික් වේලාවJඅත්ලාන්තික් දිවාආලෝක වේලාවMමධ්\u200dයම ඕස්ට්" + + "\u200dරේලියානු වේලාව]මධ්\u200dයම ඔස්ට්\u200dරේලියානු දහවල් වේලාව]මධ්" + + "\u200dයම බටහිර ඔස්ට්\u200dරේලියානු වේලාවmමධ්\u200dයම බටහිර ඔස්ට්\u200dරේ" + + "ලියානු දහවල් වේලාවSනැගෙනහිර ඕස්ට්\u200dරේලියානු වේලාවcනැඟෙනහිර ඕස්ට්" + + "\u200dරේලියානු දහවල් වේලාවJබටහිර ඕස්ට්\u200dරේලියානු වේලාවZබටහිර ඔස්ට්" + + "\u200dරේලියානු දහවල් වේලාව1අසර්බයිජාන් වේලාවJඅසර්බයිජාන් ග්\u200dරීෂ්ම ව" + + "ේලාව%ඇසොර්ස් වේලාව>ඇසොර්ස් ග්\u200dරීෂ්ම වේලාව(බංගලාදේශ වේලාව>බංගලාදේශ" + + " ග්\u200dරීෂ්ම කාලය%බ්\u200dරසීල වේලාව;බ්\u200dරසීල ග්\u200dරීෂ්ම කාලය(ක" + + "ේප්වේඩ් වේලාව>කේප්වේඩ් ග්\u200dරීෂ්ම කාලය\x1fචැතම් වේලාව,චැතම් දිවා වේ" + + "ලාව\x1cචිලී වේලාව2චිලී ග්\u200dරීෂ්ම කාලය\x19චීන වේලාව)චීන දහවල් වේලාව" + + "1චොයිබල්සාන් වේලාවJචොයිබල්සාන් ග්\u200dරීෂ්ම වේලාව.කොලොම්බියා වේලාවDකොලො" + + "ම්බියා ග්\u200dරීෂ්ම කාලය,කුක් දුපත් වේලාවOකුක් දුපත් භාග ග්\u200dරීෂ්" + + "ම වේලාව(කියුබානු වේලාවAකියුබානු දිවාආලෝක වේලාව2ඊස්ටර් දූපත් වේලාවHඊස්ට" + + "ර් දූපත් ග්\u200dරීෂ්ම කාලය8මධ්\u200dයම යුරෝපීය වේලාවQමධ්\u200dයම යුරෝ" + + "පීය ග්\u200dරීෂ්ම වේලාව>නැගෙනහිර යුරෝපීය වේලාවWනැගෙනහිර යුරෝපීය ග්" + + "\u200dරීෂ්ම වේලාව5බටහිර යුරෝපීය වේලාවNබටහිර යුරෝපීය ග්\u200dරීෂ්ම වේලාව;" + + "ෆෝක්ලන්ඩ් දූපත් වේලාවQෆෝක්ලන්ඩ් දූපත් ග්\u200dරීෂ්ම කාලය\x1cෆිජි වේලාව" + + "5ෆිජි ග්\u200dරීෂ්ම වේලාව.ජෝර්ජියානු වේලාවGජෝර්ජියානු ග්\u200dරීෂ්ම වේලා" + + "වJනැගෙනහිර ග්\u200dරීන්ලන්ත වේලාව`නැගෙනහිර ග්\u200dරීන්ලන්ත ග්\u200dරී" + + "ෂ්ම කාලයAබටහිර ග්\u200dරීන්ලන්ත වේලාවWබටහිර ග්\u200dරීන්ලන්ත ග්\u200dර" + + "ීෂ්ම කාලයAහවායි-අලෙයුතියාන් වේලාවZහවායි-අලෙයුතියාන් දිවාආලෝක වේලාව\"හො" + + "ංකොං වේලාව;හොංකොං ග්\u200dරීෂ්ම වේලාව\"හොව්ඩ් වේලාව;හොව්ඩ් ග්\u200dරීෂ" + + "්ම වේලාව\x1cඉරාන වේලාව&ඉරාන දිවා කාලය1ඉර්කුට්ස්ක් වේලාවJඉර්කුට්ස්ක් ග්" + + "\u200dරීෂ්ම වේලාව(ඊශ්\u200dරායල වේලාව8ඊශ්\u200dරායල දහවල් වේලාව\x1cජපාන " + + "වේලාව,ජපාන දහවල් වේලාව(කොරියානු වේලාව8කොරියානු දහවල් වේලාව@ක්\u200dරස්" + + "නොයාර්ස්ක් වේලාවYක්\u200dරස්නොයාර්ස්ක් ග්\u200dරීෂ්ම වේලාව/ලෝර්ඩ් හෝව්" + + " වේලාව<ලෝර්ඩ් හෝව් දිවා වේලාව\"මෙගඩන් වේලාව;මෙගඩන් ග්\u200dරීෂ්ම වේලාව\"" + + "මුරුසි වේලාව8මුරුසි ග්\u200dරීෂ්ම කාලය2වයඹ මෙක්සිකෝ වේලාවKවයඹ මෙක්සිකෝ" + + " දිවාආලෝක වේලාවAමෙක්සිකෝ පැසිෆික් වේලාවZමෙක්සිකෝ පැසිෆික් දිවාආලෝක වේලාව" + + "/උලාන් බාටර් වේලාවHඋලාන් බාටර් ග්\u200dරීෂ්ම වේලාව%මොස්කව් වේලාව>මොස්කව්" + + " ග්\u200dරීෂ්ම වේලාව8නව සෙලඩොනියානු වේලාවQනව සෙලඩොනියානු ග්\u200dරීෂ්ම ව" + + "ේලාව(නවසීලන්ත වේලාව5නවසීලන්ත දිවා වේලාව7නිව්ෆවුන්ලන්ත වේලාවPනිව්ෆවුන්ල" + + "න්ත දිවාආලෝක වේලාවKෆර්නැන්ඩෝ ඩි නොරොන්හා වේලාවaෆර්නැන්ඩෝ ඩි නොරොන්හා ග" + + "්\u200dරීෂ්ම කාලය7නොවසිබිර්ස්ක් වේලාවPනොවසිබිර්ස්ක් ග්\u200dරීෂ්ම වේලා" + + "ව%ඔම්ස්ක් වේලාව>ඔම්ස්ක් ග්\u200dරීෂ්ම වේලාව+පාකිස්ථාන වේලාවAපාකිස්ථාන " + + "ග්\u200dරීෂ්ම කාලය%පැරගුවේ වේලාව;පැරගුවේ ග්\u200dරීෂ්ම කාලය\x1cපේරු වේ" + + "ලාව2පේරු ග්\u200dරීෂ්ම කාලය%පිලිපීන වේලාව>පිලිපීන ග්\u200dරීෂ්ම වේලාවL" + + "ශාන්ත පියරේ සහ මැකෝලන් වේලාවeශාන්ත පියරේ සහ මැකෝලන් දිවාආලෝක වේලාව\"සඛ" + + "ලින් වේලාව;සඛලින් ග්\u200dරීෂ්ම වේලාව\"සැමෝවා වේලාව;සැමෝවා ග්\u200dරීෂ" + + "්ම වේලාව\"තායිපේ වේලාව2තායිපේ දහවල් වේලාව\x1fටොංගා වේලාව8ටොංගා ග්" + + "\u200dරීෂ්ම වේලාව:ටර්ක්මෙනිස්තාන වේලාවSටර්ක්මෙනිස්තාන ග්\u200dරීෂ්ම වේලා" + + "ව%උරුගුවේ වේලාව;උරුගුවේ ග්\u200dරීෂ්ම කාලය4උස්බෙකිස්තාන වේලාවMඋස්බෙකිස" + + "්තාන ග්\u200dරීෂ්ම වේලාව\"වනුආටු වේලාව8වනුආටු ගිම්හාන වේලාව7ව්ලදිවෝස්ට" + + "ෝක් වේලාවPව්ලදිවෝස්ටෝක් ග්\u200dරීෂ්ම වේලාව7වොල්ගොග්\u200dරාඩ් වේලාවPව" + + "ොල්ගොග්\u200dරාඩ් ග්\u200dරීෂ්ම වේලාව+යකුට්ස්ක් වේලාවDයකුට්ස්ක් ග්" + + "\u200dරීෂ්ම වේලාව:යෙකටෙරින්බර්ග් වේලාවSයෙකටෙරින්බර්ග් ග්\u200dරීෂ්ම වේලා" + + "ව" + +var bucket98 string = "" + // Size: 12270 bytes + "\x0fEEEE, d. M. y G\x08januára\x09februára\x05marca\x07apríla\x05mája" + + "\x05júna\x05júla\x07augusta\x09septembra\x08októbra\x08novembra\x08decem" + + "bra\x07nedeľa\x08pondelok\x06utorok\x06streda\x08štvrtok\x06piatok\x06so" + + "bota\x0d1. štvrťrok\x0d2. štvrťrok\x0d3. štvrťrok\x0d4. štvrťrok\x07o po" + + "ln.\x06napol.\x06dopol.\x06popol.\x04nap.\x09o polnoci\x0anapoludnie\x0a" + + "dopoludnia\x0apopoludní\x05poln.\x06polnoc\x08poludnie\x0adopoludnie\x0a" + + "popoludnie\x0cpred Kristom\x18pred naším letopočtom\x0bpo Kristovi\x12ná" + + "šho letopočtu\x08pred Kr.\x0apred n. l.\x06po Kr.\x05n. l.\x0bal-muharr" + + "am\x05safar\x10rabí´ al-avval\x12rabí´ath-thání\x12džumádá l-úlá\x14džum" + + "ádá l-áchira\x07radžab\x0aša´ bán\x08ramadán\x08šauvál\x0edhú l-ka´ da" + + "\x10dhú l-hidždža\x08pred ROC\x03ROC\x09o {0} rok\x0ao {0} roky\x0ao {0}" + + " roka\x0bo {0} rokov\x0epred {0} rokom\x0epred {0} rokmi\x0dpred {0} rok" + + "a\x08o {0} r.\x0bpred {0} r.\x0aštvrťrok\x12minulý štvrťrok\x10tento štv" + + "rťrok\x12budúci štvrťrok\x10o {0} štvrťrok\x11o {0} štvrťroky\x11o {0} š" + + "tvrťroka\x12o {0} štvrťrokov\x15pred {0} štvrťrokom\x15pred {0} štvrťrok" + + "mi\x14pred {0} štvrťroka\x11minulý štvrťr.\x0ftento štvrťr.\x11budúci št" + + "vrťr.\x0fo {0} štvrťr.\x12pred {0} štvrťr.\x06mesiac\x0eminulý mesiac" + + "\x0ctento mesiac\x0ebudúci mesiac\x0co {0} mesiac\x0do {0} mesiace\x0do " + + "{0} mesiaca\x0eo {0} mesiacov\x11pred {0} mesiacom\x11pred {0} mesiacmi" + + "\x10pred {0} mesiaca\x04mes.\x0cminulý mes.\x0atento mes.\x0cbudúci mes." + + "\x0ao {0} mes.\x0dpred {0} mes.\x09týždeň\x11minulý týždeň\x0ftento týžd" + + "eň\x11budúci týždeň\x0fo {0} týždeň\x0eo {0} týždne\x0fo {0} týždňa\x10o" + + " {0} týždňov\x13pred {0} týždňom\x14pred {0} týždňami\x12pred {0} týždňa" + + "\x12týždeň dňa {0}\x06týž.\x0eminulý týž.\x0ctento týž.\x0ebudúci týž." + + "\x0co {0} týž.\x0fpred {0} týž.\x0ftýž. dňa {0}\x11týždeň mesiaca\x0btýž" + + ". mes.\x04deň\x0bpredvčerom\x06včera\x04dnes\x06zajtra\x08pozajtra\x0ao " + + "{0} deň\x09o {0} dni\x0ao {0} dňa\x0ao {0} dní\x0epred {0} dňom\x0fpred " + + "{0} dňami\x0dpred {0} dňa\x08o {0} d.\x0bpred {0} d.\x09deň roka\x07deň " + + "r.\x0edeň týždňa\x0bdeň týž.\x19deň týždňa v\u00a0mesiaci\x13d. \u00a0tý" + + "ž. v\u00a0mes.\x0fminulú nedeľu\x0dtúto nedeľu\x0fbudúcu nedeľu\x0do {0" + + "} nedeľu\x0co {0} nedele\x0do {0} nedieľ\x11pred {0} nedeľou\x12pred {0}" + + " nedeľami\x0fpred {0} nedele\x0cminulú ned.\x0atúto ned.\x0cbudúcu ned." + + "\x0ao {0} ned.\x0dpred {0} ned.\x0bminulú ne.\x09túto ne.\x0bbudúcu ne." + + "\x09o {0} ne.\x0cpred {0} ne.\x10minulý pondelok\x0etento pondelok\x10bu" + + "dúci pondelok\x0eo {0} pondelok\x0eo {0} pondelky\x0eo {0} pondelka\x0fo" + + " {0} pondelkov\x12pred {0} pondelkom\x13pred {0} pondelkami\x11pred {0} " + + "pondelka\x0dminulý pond.\x0btento pond.\x0dbudúci pond.\x0bo {0} pond." + + "\x0epred {0} pond.\x0bminulý po.\x09tento po.\x0bbudúci po.\x09o {0} po." + + "\x0cpred {0} po.\x0eminulý utorok\x0ctento utorok\x0ebudúci utorok\x0co " + + "{0} utorok\x0co {0} utorky\x0co {0} utorka\x0do {0} utorkov\x10pred {0} " + + "utorkom\x11pred {0} utorkami\x0fpred {0} utorka\x0dminulý utor.\x0btento" + + " utor.\x0dbudúci utor.\x0bo {0} utor.\x0epred {0} utor.\x0bminulý ut." + + "\x09tento ut.\x0bbudúci ut.\x09o {0} ut.\x0cpred {0} ut.\x0eminulú stred" + + "u\x0ctúto stredu\x0ebudúcu stredu\x0co {0} stredu\x0co {0} stredy\x0co {" + + "0} stried\x10pred {0} stredou\x11pred {0} stredami\x0fpred {0} stredy" + + "\x0cminulú str.\x0atúto str.\x0cbudúcu str.\x0ao {0} str.\x0dpred {0} st" + + "r.\x0bminulú st.\x09túto st.\x0bbudúcu st.\x09o {0} st.\x0cpred {0} st." + + "\x10minulý štvrtok\x0etento štvrtok\x10budúci štvrtok\x0eo {0} štvrtok" + + "\x0eo {0} štvrtky\x0eo {0} štvrtka\x0fo {0} štvrtkov\x12pred {0} štvrtko" + + "m\x13pred {0} štvrtkami\x11pred {0} štvrtka\x0cminulý št.\x0atento št." + + "\x0cbudúci št.\x0ao {0} št.\x0dpred {0} št.\x0eminulý piatok\x0ctento pi" + + "atok\x0ebudúci piatok\x0co {0} piatok\x0co {0} piatky\x0co {0} piatka" + + "\x0do {0} piatkov\x10pred {0} piatkom\x11pred {0} piatkami\x0fpred {0} p" + + "iatka\x0bminulý pi.\x09tento pi.\x0bbudúci pi.\x09o {0} pi.\x0cpred {0} " + + "pi.\x0eminulú sobotu\x0ctúto sobotu\x0ebudúcu sobotu\x0co {0} sobotu\x0c" + + "o {0} soboty\x0co {0} sobôt\x10pred {0} sobotou\x11pred {0} sobotami\x0f" + + "pred {0} soboty\x0bminulú so.\x09túto so.\x0bbudúcu so.\x09o {0} so.\x0c" + + "pred {0} so.\x0ev tejto hodine\x0co {0} hodinu\x0co {0} hodiny\x0co {0} " + + "hodín\x10pred {0} hodinou\x11pred {0} hodinami\x07o {0} h\x0apred {0} h" + + "\x07minúta\x0fv tejto minúte\x0do {0} minútu\x0do {0} minúty\x0co {0} mi" + + "nút\x11pred {0} minútou\x12pred {0} minútami\x10pred {0} minúty\x09o {0}" + + " min\x0cpred {0} min\x0do {0} sekundu\x0do {0} sekundy\x0do {0} sekúnd" + + "\x11pred {0} sekundou\x12pred {0} sekundami\x10pred {0} sekundy\x07o {0}" + + " s\x0apred {0} s\x13časové pásmo {0}\x08{0} (+1)\x08{0} (+0)\x1bkoordino" + + "vaný svetový čas\x14britský letný čas\x18írsky štandardný čas\x0eacrejsk" + + "ý čas\x1bacrejský štandardný čas\x15acrejský letný čas\x0eafganský čas" + + "\x13stredoafrický čas\x15východoafrický čas\x11juhoafrický čas\x14západo" + + "africký čas!západoafrický štandardný čas\x1bzápadoafrický letný čas\x0fa" + + "ljašský čas\x1caljašský štandardný čas\x16aljašský letný čas\x0falmaatsk" + + "ý čas\x1calmaatský štandardný čas\x16almaatský letný čas\x0famazonský č" + + "as\x1camazonský štandardný čas\x16amazonský letný čas\x1fseveroamerický " + + "centrálny čas,severoamerický centrálny štandardný čas&severoamerický cen" + + "trálny letný čas\x1fseveroamerický východný čas,severoamerický východný " + + "štandardný čas&severoamerický východný letný čas\x1cseveroamerický hors" + + "ký čas)severoamerický horský štandardný čas#severoamerický horský letný " + + "čas!severoamerický tichomorský čas.severoamerický tichomorský štandardn" + + "ý čas(severoamerický tichomorský letný čas\x0fAnadyrský čas\x1cAnadyrsk" + + "ý štandardný čas\x16Anadyrský letný čas\x0dapijský čas\x1aapijský štand" + + "ardný čas\x14apijský letný čas\x0eaktauský čas\x1baktauský štandardný ča" + + "s\x15aktauský letný čas\x0eaktobský čas\x1baktobský štandardný čas\x15ak" + + "tobský letný čas\x0darabský čas\x1aarabský štandardný čas\x14arabský let" + + "ný čas\x11argentínsky čas\x1eargentínsky štandardný čas\x18argentínsky l" + + "etný čas\x18západoargentínsky čas%západoargentínsky štandardný čas\x1fzá" + + "padoargentínsky letný čas\x0earménsky čas\x1barménsky štandardný čas\x15" + + "arménsky letný čas\x10atlantický čas\x1datlantický štandardný čas\x17atl" + + "antický letný čas\x16stredoaustrálsky čas#stredoaustrálsky štandardný ča" + + "s\x1dstredoaustrálsky letný čas stredozápadný austrálsky čas-stredozápad" + + "ný austrálsky štandardný čas'stredozápadný austrálsky letný čas\x18výcho" + + "doaustrálsky čas%východoaustrálsky štandardný čas\x1fvýchodoaustrálsky l" + + "etný čas\x17západoaustrálsky čas$západoaustrálsky štandardný čas\x1ezápa" + + "doaustrálsky letný čas\x15azerbajdžanský čas\"azerbajdžanský štandardný " + + "čas\x1cazerbajdžanský letný čas\x0dazorský čas\x1aazorský štandardný ča" + + "s\x14azorský letný čas\x13bangladéšsky čas bangladéšsky štandardný čas" + + "\x1abangladéšsky letný čas\x0fbhutánsky čas\x11bolívijský čas\x0fbrazíls" + + "ky čas\x1cbrazílsky štandardný čas\x16brazílsky letný čas\x0fbrunejský č" + + "as\x10kapverdský čas\x1dkapverdský štandardný čas\x17kapverdský letný ča" + + "s\x14čas Caseyho stanice\x10chamorrský čas\x10chathamský čas\x1dchathams" + + "ký štandardný čas\x17chathamský letný čas\x0dčilský čas\x1ačilský štanda" + + "rdný čas\x14čilský letný čas\x0dčínsky čas\x1ačínsky štandardný čas\x14č" + + "ínsky letný čas\x13čojbalsanský čas čojbalsanský štandardný čas\x1ačojb" + + "alsanský letný čas\x19čas Vianočného ostrova\x19čas Kokosových ostrovov" + + "\x11kolumbijský čas\x1ekolumbijský štandardný čas\x18kolumbijský letný č" + + "as\x18čas Cookových ostrovov%štandardný čas Cookových ostrovov\x1fletný " + + "čas Cookových ostrovov\x0ekubánsky čas\x1bkubánsky štandardný čas\x15ku" + + "bánsky letný čas\x16čas Davisovej stanice!čas stanice Dumonta d’Urvillea" + + "\x16východotimorský čas\x1cčas Veľkonočného ostrova)štandardný čas Veľko" + + "nočného ostrova#letný čas Veľkonočného ostrova\x11ekvádorský čas\x14stre" + + "doeurópsky čas!stredoeurópsky štandardný čas\x1bstredoeurópsky letný čas" + + "\x16východoeurópsky čas#východoeurópsky štandardný čas\x1dvýchodoeurópsk" + + "y letný čas\x0cminský čas\x15západoeurópsky čas\"západoeurópsky štandard" + + "ný čas\x1czápadoeurópsky letný čas\x11falklandský čas\x1efalklandský šta" + + "ndardný čas\x18falklandský letný čas\x10fidžijský čas\x1dfidžijský štand" + + "ardný čas\x17fidžijský letný čas\x19francúzskoguyanský čas5čas Francúzsk" + + "ych južných a antarktických území\x10galapágsky čas\x10gambierský čas" + + "\x0fgruzínsky čas\x1cgruzínsky štandardný čas\x16gruzínsky letný čas\x1b" + + "čas Gilbertových ostrovov\x12greenwichský čas\x15východogrónsky čas\"vý" + + "chodogrónsky štandardný čas\x1cvýchodogrónsky letný čas\x14západogrónsky" + + " čas!západogrónsky štandardný čas\x1bzápadogrónsky letný čas\x0dguamský " + + "čas$štandardný čas Perzského zálivu\x0eguyanský čas\x17havajsko-aleutsk" + + "ý čas$havajsko-aleutský štandardný čas\x1ehavajsko-aleutský letný čas" + + "\x10hongkonský čas\x1dhongkonský štandardný čas\x17hongkonský letný čas" + + "\x0echovdský čas\x1bchovdský štandardný čas\x15chovdský letný čas\x0dind" + + "ický čas\x15indickooceánsky čas\x11indočínsky čas\x16stredoindonézsky ča" + + "s\x18východoindonézsky čas\x17západoindonézsky čas\x0diránsky čas\x1airá" + + "nsky štandardný čas\x14iránsky letný čas\x0eirkutský čas\x1birkutský šta" + + "ndardný čas\x15irkutský letný čas\x0fizraelský čas\x1cizraelský štandard" + + "ný čas\x16izraelský letný čas\x0ejaponský čas\x1bjaponský štandardný čas" + + "\x15japonský letný čas\x1ePetropavlovsk-Kamčatský čas+Petropavlovsk-Kamč" + + "atský štandardný čas)Petropavlovsk-Kamčatskijský letný čas\x1bvýchodokaz" + + "achstanský čas\x1azápadokazachstanský čas\x0fkórejský čas\x1ckórejský št" + + "andardný čas\x16kórejský letný čas\x0fkosrajský čas\x12krasnojarský čas" + + "\x1fkrasnojarský štandardný čas\x19krasnojarský letný čas\x0fkirgizský č" + + "as\x10srílanský čas\x1bčas Rovníkových ostrovov\x17čas ostrova lorda How" + + "a$štandardný čas ostrova lorda Howa\x1eletný čas ostrova lorda Howa\x0em" + + "acajský čas\x1bmacajský štandardný čas\x15macajský letný čas\x16čas ostr" + + "ova Macquarie\x10magadanský čas\x1dmagadanský štandardný čas\x17magadans" + + "ký letný čas\x11malajzijský čas\x0fmaldivský čas\x0fmarkézsky čas\x1cčas" + + " Marshallových ostrovov\x12maurícijský čas\x1fmaurícijský štandardný čas" + + "\x19maurícijský letný čas\x17čas Mawsonovej stanice\x1dseverozápadný mex" + + "ický čas*severozápadný mexický štandardný čas$severozápadný mexický letn" + + "ý čas\x1amexický tichomorský čas'mexický tichomorský štandardný čas!mex" + + "ický tichomorský letný čas\x13ulanbátarský čas ulanbátarský štandardný č" + + "as\x1aulanbátarský letný čas\x0fmoskovský čas\x1cmoskovský štandardný ča" + + "s\x16moskovský letný čas\x10mjanmarský čas\x0enauruský čas\x0enepálsky č" + + "as\x14novokaledónsky čas!novokaledónsky štandardný čas\x1bnovokaledónsky" + + " letný čas\x14novozélandský čas!novozélandský štandardný čas\x1bnovozéla" + + "ndský letný čas\x15newfoundlandský čas\"newfoundlandský štandardný čas" + + "\x1cnewfoundlandský letný čas\x0eniuejský čas\x0fnorfolský čas$čas súost" + + "rovia Fernando de Noronha1štandardný čas súostrovia Fernando de Noronha+" + + "letný čas súostrovia Fernando de Noronha\x15severomariánsky čas\x12novos" + + "ibirský čas\x1fnovosibirský štandardný čas\x19novosibirský letný čas\x0b" + + "omský čas\x18omský štandardný čas\x12omský letný čas\x11pakistanský čas" + + "\x1epakistanský štandardný čas\x18pakistanský letný čas\x0epalauský čas" + + "\x17čas Papuy-Novej Guiney\x11paraguajský čas\x1eparaguajský štandardný " + + "čas\x18paraguajský letný čas\x0fperuánsky čas\x1cperuánsky štandardný č" + + "as\x16peruánsky letný čas\x10filipínsky čas\x1dfilipínsky štandardný čas" + + "\x17filipínsky letný čas\x1ačas Fénixových ostrovov\x18pierre-miquelonsk" + + "ý čas%pierre-miquelonský štandardný čas\x1fpierre-miquelonský letný čas" + + "\x1cčas Pitcairnových ostrovov\x0eponapský čas\x13pchjongjanský čas\x11k" + + "yzylordský čas\x1ekyzylordský štandardný čas\x18kyzylordský letný čas" + + "\x11réunionský čas\x17čas Rotherovej stanice\x11sachalinský čas\x1esacha" + + "linský štandardný čas\x18sachalinský letný čas\x0eSamarský čas\x1bSamars" + + "ký štandardný čas\x15Samarský letný čas\x0esamojský čas\x1bsamojský štan" + + "dardný čas\x15samojský letný čas\x10seychelský čas\x1esingapurský štanda" + + "rdný čas\x1dčas Šalamúnových ostrovov\x14čas Južnej Georgie\x10surinamsk" + + "ý čas\x13čas stanice Šówa\x0etahitský čas\x11tchajpejský čas\x1etchajpe" + + "jský štandardný čas\x18tchajpejský letný čas\x0ftadžický čas\x10tokelaus" + + "ký čas\x0etonžský čas\x1btonžský štandardný čas\x15tonžský letný čas\x0e" + + "chuukský čas\x10turkménsky čas\x1dturkménsky štandardný čas\x17turkménsk" + + "y letný čas\x0etuvalský čas\x10uruguajský čas\x1duruguajský štandardný č" + + "as\x17uruguajský letný čas\x0duzbecký čas\x1auzbecký štandardný čas\x14u" + + "zbecký letný čas\x0fvanuatský čas\x1cvanuatský štandardný čas\x16vanuats" + + "ký letný čas\x11venezuelský čas\x13vladivostocký čas vladivostocký štand" + + "ardný čas\x1avladivostocký letný čas\x12volgogradský čas\x1fvolgogradský" + + " štandardný čas\x19volgogradský letný čas\x13čas stanice Vostok\x11čas o" + + "strova Wake\x1dčas ostrovov Wallis a Futuna\x0ejakutský čas\x1bjakutský " + + "štandardný čas\x15jakutský letný čas\x15jekaterinburský čas\"jekaterinb" + + "urský štandardný čas\x1cjekaterinburský letný čas" + +var bucket99 string = "" + // Size: 11143 bytes + "\x13budistični koledar\x09bud. kol.\x0cdd. MMMM y G\x0fd. MM. yy GGGGG" + + "\x07nedelja\x0aponedeljek\x05torek\x05sreda\x08četrtek\x05petek\x06sobot" + + "a\x081. čet.\x082. čet.\x083. čet.\x084. čet.\x0e1. četrtletje\x0e2. čet" + + "rtletje\x0e3. četrtletje\x0e4. četrtletje\x06opoln.\x06opold.\x05zjut." + + "\x06zveč.\x07ponoči\x0524.00\x0512.00\x02zj\x02zv\x09opolnoči\x07opoldne" + + "\x07zjutraj\x08dopoldan\x08popoldan\x07zvečer\x05pold.\x04jut.\x04noč" + + "\x07polnoč\x08dopoldne\x06poldne\x08popoldne\x0epred Kristusom\x14pred n" + + "ašim štetjem\x0bpo Kristusu\x11po našem štetju\x0bpr. n. št.\x0apo n. št" + + ".\x10EEEE, dd. MMMM y\x0add. MMMM y\x09d. MM. yy\x07pred RK\x0eMinguo ko" + + "ledar\x04leto\x04lani\x05letos\x0enaslednje leto\x0dčez {0} leto\x0dčez " + + "{0} leti\x0dčez {0} leta\x0cčez {0} let\x0epred {0} letom\x0fpred {0} le" + + "toma\x0dpred {0} leti\x0bčetrtletje\x12zadnje četrtletje\x0eto četrtletj" + + "e\x15naslednje četrtletje\x14čez {0} četrtletje\x14čez {0} četrtletji" + + "\x14čez {0} četrtletja\x14čez {0} četrtletij\x15pred {0} četrtletjem\x16" + + "pred {0} četrtletjema\x14pred {0} četrtletji\x08četrtl.\x11čez {0} četrt" + + "l.\x11pred {0} četrtl.\x06četr.\x0fčez {0} četr.\x0fpred {0} četr.\x05me" + + "sec\x0fprejšnji mesec\x08ta mesec\x0fnaslednji mesec\x0ečez {0} mesec" + + "\x0fčez {0} meseca\x0fčez {0} mesece\x10čez {0} mesecev\x10pred {0} mese" + + "cem\x11pred {0} mesecema\x0fpred {0} meseci\x0dčez {0} mes.\x05teden\x0f" + + "prejšnji teden\x08ta teden\x0fnaslednji teden\x0ečez {0} teden\x0ečez {0" + + "} tedna\x0ečez {0} tedne\x0fčez {0} tednov\x0fpred {0} tednom\x10pred {0" + + "} tednoma\x0epred {0} tedni\x0bv tednu {0}\x04ted.\x0dčez {0} ted.\x0dpr" + + "ed {0} ted.\x0cteden meseca\x0bted. v mes.\x11predvčerajšnjim\x07včeraj" + + "\x05danes\x05jutri\x0dpojutrišnjem\x0cčez {0} dan\x0ečez {0} dneva\x0cče" + + "z {0} dni\x0fpred {0} dnevom\x10pred {0} dnevoma\x0epred {0} dnevi\x08da" + + "n leta\x0bdan v tednu\x0adan meseca\x0adan v mes.\x11prejšnjo nedeljo" + + "\x0ato nedeljo\x11naslednjo nedeljo\x10čez {0} nedeljo\x10čez {0} nedelj" + + "i\x0fčez {0} nedelj\x10pred {0} nedeljo\x12pred {0} nedeljama\x12pred {0" + + "} nedeljami\x0eprejšnjo ned.\x07to ned.\x0enaslednjo ned.\x10čez {0} ned" + + "elje\x0cprejš. ned.\x0anasl. ned.\x0dčez {0} ned.\x14prejšnji ponedeljek" + + "\x0dta ponedeljek\x14naslednji ponedeljek\x13čez {0} ponedeljek\x13čez {" + + "0} ponedeljka\x13čez {0} ponedeljke\x14čez {0} ponedeljkov\x14pred {0} p" + + "onedeljkom\x15pred {0} ponedeljkoma\x13pred {0} ponedeljki\x0eprejšnji p" + + "on.\x07ta pon.\x0enaslednji pon.\x0dčez {0} pon.\x0dpred {0} pon.\x0cpre" + + "jš. pon.\x0anasl. pon.\x0fprejšnji torek\x08ta torek\x0fnaslednji torek" + + "\x0ečez {0} torek\x0ečez {0} torka\x0ečez {0} torke\x0fčez {0} torkov" + + "\x0fpred {0} torkom\x10pred {0} torkoma\x0epred {0} torki\x0eprejšnji to" + + "r.\x07ta tor.\x0enaslednji tor.\x0dčez {0} tor.\x0dpred {0} tor.\x0cprej" + + "š. tor.\x0anasl. tor.\x0fprejšnjo sredo\x08to sredo\x0fnaslednjo sredo" + + "\x0ečez {0} sredo\x0ečez {0} sredi\x0ečez {0} srede\x0dčez {0} sred\x0ep" + + "red {0} sredo\x10pred {0} sredama\x10pred {0} sredami\x0eprejšnjo sre." + + "\x07to sre.\x0enaslednjo sre.\x0dčez {0} sre.\x0dpred {0} sre.\x0cprejš." + + " sre.\x0anasl. sre.\x12prejšnji četrtek\x0bta četrtek\x12naslednji četrt" + + "ek\x11čez {0} četrtek\x11čez {0} četrtka\x11čez {0} četrtke\x12čez {0} č" + + "etrtkov\x12pred {0} četrtkom\x13pred {0} četrtkoma\x11pred {0} četrtki" + + "\x0fprejšnji čet.\x08ta čet.\x0fnaslednji čet.\x0ečez {0} čet.\x0epred {" + + "0} čet.\x0dprejš. čet.\x0bnasl. čet.\x0fprejšnji petek\x08ta petek\x0fna" + + "slednji petek\x0ečez {0} petek\x0ečez {0} petka\x0ečez {0} petke\x0fčez " + + "{0} petkov\x0fpred {0} petkom\x10pred {0} petkoma\x0epred {0} petki\x0ep" + + "rejšnji pet.\x07ta pet.\x0enaslednji pet.\x0dčez {0} pet.\x0dpred {0} pe" + + "t.\x0cprejš. pet.\x0anasl. pet.\x10prejšnjo soboto\x09to soboto\x10nasle" + + "dnjo soboto\x0fčez {0} soboto\x0fčez {0} soboti\x0fčez {0} sobote\x0ečez" + + " {0} sobot\x0fpred {0} soboto\x11pred {0} sobotama\x11pred {0} sobotami" + + "\x0eprejšnjo sob.\x07to sob.\x0enaslednjo sob.\x0dčez {0} sob.\x0dpred {" + + "0} sob.\x0cprejš. sob.\x0anasl. sob.\x07dop/pop\x09v tej uri\x0cčez {0} " + + "uro\x0cčez {0} uri\x0cčez {0} ure\x0bčez {0} ur\x0cpred {0} uro\x0epred " + + "{0} urama\x0epred {0} urami\x0ačez {0} h\x09to minuto\x0fčez {0} minuto" + + "\x0fčez {0} minuti\x0fčez {0} minute\x0ečez {0} minut\x0fpred {0} minuto" + + "\x11pred {0} minutama\x11pred {0} minutami\x0dčez {0} min.\x0dpred {0} m" + + "in.\x0cčez {0} min\x04zdaj\x10čez {0} sekundo\x10čez {0} sekundi\x10čez " + + "{0} sekunde\x0fčez {0} sekund\x10pred {0} sekundo\x12pred {0} sekundama" + + "\x12pred {0} sekundami\x0ačez {0} s\x0cčasovni pas\x08{0} čas\x10{0} pol" + + "etni čas\x13{0} standardni čas\x1dUniverzalni koordinirani čas\x16britan" + + "ski poletni čas\x15irski standardni čas\x12Afganistanski čas\x16Centraln" + + "oafriški čas\x14Vzhodnoafriški čas\x13Južnoafriški čas\x14Zahodnoafriški" + + " čas\x1fZahodnoafriški standardni čas\x1cZahodnoafriški poletni čas\x0dA" + + "ljaški čas\x18Aljaški standardni čas\x15Aljaški poletni čas\x0eAmazonski" + + " čas\x19Amazonski standardni čas\x16Amazonski poletni čas\x0eCentralni č" + + "as\x19Centralni standardni čas\x16Centralni poletni čas\x0cVzhodni čas" + + "\x17Vzhodni standardni čas\x14Vzhodni poletni čas\x0bGorski čas\x16Gorsk" + + "i standardni čas\x13Gorski poletni čas\x0fPacifiški čas\x1aPacifiški sta" + + "ndardni čas\x17Pacifiški poletni čas\x0eAnadirski čas\x19Anadirski stand" + + "ardni čas\x16Anadirski poletni čas\x0aČas: Apia\x15Standardni čas: Apia" + + "\x12Poletni čas: Apia\x0cArabski čas\x17Arabski standardni čas\x14Arabsk" + + "i poletni čas\x10Argentinski čas\x1bArgentinski standardni čas\x18Argent" + + "inski poletni čas\x18Argentinski zahodni čas#Argentinski zahodni standar" + + "dni čas Argentinski zahodni poletni čas\x0dArmenski čas\x18Armenski stan" + + "dardni čas\x15Armenski poletni čas\x0eAtlantski čas\x19Atlantski standar" + + "dni čas\x16Atlantski poletni čas\x19Avstralski centralni čas$Avstralski " + + "centralni standardni čas!Avstralski centralni poletni čas!Avstralski cen" + + "tralni zahodni čas,Avstralski centralni zahodni standardni čas)Avstralsk" + + "i centralni zahodni poletni čas\x17Avstralski vzhodni čas\"Avstralski vz" + + "hodni standardni čas\x1fAvstralski vzhodni poletni čas\x17Avstralski zah" + + "odni čas\"Avstralski zahodni standardni čas\x1fAvstralski zahodni poletn" + + "i čas\x14Azerbajdžanski čas\x1fAzerbajdžanski standardni čas\x1cAzerbajd" + + "žanski poletni čas\x0cAzorski čas\x17Azorski standardni čas\x14Azorski " + + "poletni čas\x11Bangladeški čas\x1cBangladeški standardni čas\x19Banglade" + + "ški poletni čas\x0dButanski čas\x0fBolivijski čas\x0eBrasilski čas\x19B" + + "rasilski standardni čas\x16Brasilski poletni čas\x0eBrunejski čas\x0fKap" + + "verdski čas\x1aKapverdski standardni čas\x17Kapverdski poletni čas\x19Ča" + + "morski standardni čas\x0eČatamski čas\x19Čatamski standardni čas\x16Čata" + + "mski poletni čas\x0cČilski čas\x17Čilski standardni čas\x14Čilski poletn" + + "i čas\x0dKitajski čas\x18Kitajski standardni čas\x15Kitajski poletni čas" + + "\x12Čojbalsanski čas\x1dČojbalsanski standardni čas\x1aČojbalsanski pole" + + "tni čas\x15Božičnootoški čas\x14Čas: Kokosovi otoki\x10Kolumbijski čas" + + "\x1bKolumbijski standardni čas\x18Kolumbijski poletni čas\x13Cookovootoš" + + "ki čas\x1eCookovootoški standardni čas\"Cookovootoški srednjepoletni čas" + + "\x0dKubanski čas\x18Kubanski standardni čas\x15Kubanski poletni čas\x0bČ" + + "as: Davis\x18Čas: Dumont-d’Urville\x14Vzhodnotimorski čas\x17Čas: Veliko" + + "nočni otok\"Standardni čas: Velikonočni otok\x1fPoletni čas: Velikonočni" + + " otok\x0fEkvadorski čas\x14Srednjeevropski čas\x1fSrednjeevropski standa" + + "rdni čas\x1cSrednjeevropski poletni čas\x14Vzhodnoevropski čas\x1fVzhodn" + + "oevropski standardni čas\x1cVzhodnoevropski poletni čas\x1cDodatni vzhod" + + "noevropski čas\x14Zahodnoevropski čas\x1fZahodnoevropski standardni čas" + + "\x1cZahodnoevropski poletni čas\x19Čas: Falklandsko otočje$Standardni ča" + + "s: Falklandsko otočje!Poletni čas: Falklandsko otočje\x0fFidžijski čas" + + "\x1aFidžijski standardni čas\x17Fidžijski poletni čas\x17Čas: Francoska " + + "Gvajana%Francoski južni in antarktični čas\x0fGalapaški čas\x0fGambiersk" + + "i čas\x0eGruzijski čas\x19Gruzijski standardni čas\x16Gruzijski poletni " + + "čas\x16Čas: Gilbertovi otoki\x18Greenwiški srednji čas\x17Vzhodnogrenla" + + "ndski čas\"Vzhodnogrenlandski standardni čas\x1fVzhodnogrenlandski polet" + + "ni čas\x17Zahodnogrenlandski čas\"Zahodnogrenlandski standardni čas\x1fZ" + + "ahodnogrenlandski poletni čas\x18Zalivski standardni čas\x0eGvajanski ča" + + "s\x16Havajski aleutski čas!Havajski aleutski standardni čas\x1eHavajski " + + "aleutski poletni čas\x10Hongkonški čas\x1bHongkonški standardni čas\x18H" + + "ongkonški poletni čas\x0cHovdski čas\x17Hovdski standardni čas\x14Hovdsk" + + "i poletni čas\x18Indijski standardni čas\x15Indijskooceanski čas\x11Indo" + + "kitajski čas\x1aIndonezijski osrednji čas\x19Indonezijski vzhodni čas" + + "\x19Indonezijski zahodni čas\x0cIranski čas\x17Iranski standardni čas" + + "\x14Iranski poletni čas\x0dIrkutski čas\x18Irkutski standardni čas\x15Ir" + + "kutski poletni čas\x0eIzraelski čas\x19Izraelski standardni čas\x16Izrae" + + "lski poletni čas\x0dJaponski čas\x18Japonski standardni čas\x15Japonski " + + "poletni čas\x1dPetropavlovsk-Kamčatski čas(Petropavlovsk-Kamčatski stand" + + "ardni čas%Petropavlovsk-Kamčatski poletni čas\x19Vzhodni kazahstanski ča" + + "s\x19Zahodni kazahstanski čas\x0dKorejski čas\x18Korejski standardni čas" + + "\x15Korejski poletni čas\x0fKosrajški čas\x11Krasnojarski čas\x1cKrasnoj" + + "arski standardni čas\x19Krasnojarski poletni čas\x13Kirgizistanski čas" + + "\x16Ekvatorski otoki: Čas\x14Čas otoka Lord Howe\x1fStandardni čas otoka" + + " Lord Howe\x1cPoletni čas otoka Lord Howe\x11Macquarieski čas\x0fMagadan" + + "ski čas\x1aMagadanski standardni čas\x17Magadanski poletni čas\x0fMalezi" + + "jski čas\x0eMaldivski čas\x14Čas: Markizni otoki\x17Čas: Marshallovi oto" + + "ki\x10Mauricijski čas\x1bMauricijski standardni čas\x18Mauricijski polet" + + "ni čas\x0eMawsonski čas\x1bMehiški severozahodni čas&Mehiški severozahod" + + "ni standardni čas#Mehiški severozahodni poletni čas\x18Mehiški pacifiški" + + " čas#Mehiški pacifiški standardni čas Mehiški pacifiški poletni čas\x11U" + + "lanbatorski čas\x1cUlanbatorski standardni čas\x19Ulanbatorski poletni č" + + "as\x0eMoskovski čas\x19Moskovski standardni čas\x16Moskovski poletni čas" + + "\x0fMjanmarski čas\x0eNaurujski čas\x0dNepalski čas\x15Novokaledonijski " + + "čas Novokaledonijski standardni čas\x1dNovokaledonijski poletni čas\x12" + + "Novozelandski čas\x1dNovozelandski standardni čas\x1aNovozelandski polet" + + "ni čas\x14Novofundlandski čas\x1fNovofundlandski standardni čas\x1cNovof" + + "undlandski poletni čas\x0dNiuejski čas\x16Čas: Norfolški otoki\x1aFernan" + + "do de Noronški čas%Fernando de Noronški standardni čas\"Fernando de Noro" + + "nški poletni čas\x11Novosibirski čas\x1cNovosibirski standardni čas\x19N" + + "ovosibirski poletni čas\x0aOmski čas\x15Omski standardni čas\x12Omski po" + + "letni čas\x10Pakistanski čas\x1bPakistanski standardni čas\x18Pakistansk" + + "i poletni čas\x0dPalavski čas\x0ePapuanski čas\x10Paragvajski čas\x1bPar" + + "agvajski standardni čas\x18Paragvajski poletni čas\x0dPerujski čas\x18Pe" + + "rujski standardni čas\x15Perujski poletni čas\x0fFilipinski čas\x1aFilip" + + "inski standardni čas\x17Filipinski poletni čas\x14Čas: Otočje Feniks\x1e" + + "Čas: Saint Pierre in Miquelon)Standardni čas: Saint Pierre in Miquelon&" + + "Poletni čas: Saint Pierre in Miquelon\x10Pitcairnski čas\x0dPonapski čas" + + "\x11Pjongjanški čas\x0fReunionski čas\x0eRotherski čas\x0fSahalinski čas" + + "\x1aSahalinski standardni čas\x17Sahalinski poletni čas\x0dSamarski čas" + + "\x18Samarski standardni čas\x15Samarski poletni čas\x0eSamoanski čas\x19" + + "Samoanski standardni čas\x16Samoanski poletni čas\x0fSejšelski čas\x1bSi" + + "ngapurski standardni čas\x16Salomonovootoški čas\x15Južnogeorgijski čas" + + "\x0fSurinamski čas\x0bČas: Syowa\x0fTahitijski čas\x0eTajpejski čas\x19T" + + "ajpejski standardni čas\x16Tajpejski poletni čas\x14Tadžikistanski čas" + + "\x0fTokelavski čas\x0eTongovski čas\x19Tongovski standardni čas\x16Tongo" + + "vski poletni čas\x10Čas: Otok Chuuk\x14Turkmenistanski čas\x1fTurkmenist" + + "anski standardni čas\x1cTurkmenistanski poletni čas\x0fTuvalujski čas" + + "\x0fUrugvajski čas\x1aUrugvajski standardni čas\x17Urugvajski poletni ča" + + "s\x12Uzbekistanski čas\x1dUzbekistanski standardni čas\x1aUzbekistanski " + + "poletni čas\x10Vanuatujski čas\x1bVanuatujski standardni čas\x18Vanuatuj" + + "ski poletni čas\x10Venezuelski čas\x13Vladivostoški čas\x1eVladivostoški" + + " standardni čas\x1bVladivostoški poletni čas\x11Volgograjski čas\x1cVolg" + + "ograjski standardni čas\x19Volgograjski poletni čas\x0eVostoški čas\x0fČ" + + "as: Otok Wake\x16Čas: Wallis in Futuna\x0dJakutski čas\x18Jakutski stand" + + "ardni čas\x15Jakutski poletni čas\x15Jekaterinburški čas Jekaterinburški" + + " standardni čas\x1dJekaterinburški poletni čas\x0aponedeljak\x06utorak" + + "\x09četvrtak\x05petak\x06subota" + +var bucket100 string = "" + // Size: 12837 bytes + "\x10cccc MMMM d. y G\x0bMMMM d. y G\x0d{1} 'tme' {0}\x05uđiv\x06kuovâ" + + "\x08njuhčâ\x08cuáŋui\x05vyesi\x04kesi\x06syeini\x05porge\x08čohčâ\x08roo" + + "vvâd\x07skammâ\x07juovlâ\x11uđđâivemáánu\x0dkuovâmáánu\x0fnjuhčâmáánu" + + "\x0fcuáŋuimáánu\x0cvyesimáánu\x0bkesimáánu\x0dsyeinimáánu\x0cporgemáánu" + + "\x0fčohčâmáánu\x0froovvâdmáánu\x0eskammâmáánu\x0ejuovlâmáánu\x03pas\x03v" + + "uo\x03maj\x03kos\x03tuo\x04vás\x04láv\x02pa\x02vu\x02ma\x02ko\x02tu\x03v" + + "á\x03lá\x0apasepeeivi\x0bvuossaargâ\x0bmajebaargâ\x07koskoho\x0atuorâst" + + "uv\x0dvástuppeeivi\x09lávurduv\x09pasepeivi\x0avuossargâ\x0amajebargâ" + + "\x08koskokko\x0btuorâstâh\x0cvástuppeivi\x0alávurdâh\x0a1. niälj.\x0a2. " + + "niälj.\x0a3. niälj.\x0a4. niälj.\x0f1. niäljádâs\x0f2. niäljádâs\x0f3. n" + + "iäljádâs\x0f4. niäljádâs\x03ep.\x16Ovdil Kristus šoddâm\x1eOvdil ääigire" + + "kinistem älgim\x16maŋa Kristus šoddâm\x1emaŋa ääigirekinistem älgim\x06o" + + "ää.\x06mää.\x0fcccc, MMMM d. y\x09MMMM d. y\x08MMM d. y\x03Ndi\x03Kuk" + + "\x03Kur\x03Kub\x03Chv\x03Chk\x03Chg\x03Nya\x03Gun\x03Gum\x03Mbu\x03Zvi" + + "\x05Ndira\x07Kukadzi\x06Kurume\x08Kubvumbi\x08Chivabvu\x07Chikumi\x0aChi" + + "kunguru\x0bNyamavhuvhu\x07Gunyana\x08Gumiguru\x06Mbudzi\x05Zvita\x03Svo" + + "\x03Muv\x03Chp\x03Cht\x03Chn\x03Chs\x03Mug\x06Svondo\x07Muvhuro\x07Chipi" + + "ri\x07Chitatu\x05China\x08Chishanu\x08Mugovera\x11Kristo asati auya\x13m" + + "ugore ramambo vedu\x06Mukore\x04Gore\x05Vhiki\x04Zuva\x06Nezuro\x05Nhasi" + + "\x08Mangwana\x0cZuva revhiki\x05Nguva\x12EEEE, MMMM dd, y G\x03Kob\x03La" + + "b\x03Sad\x03Afr\x03Sha\x03Lix\x03Tod\x03Sid\x03Sag\x03Tob\x03KIT\x03LIT" + + "\x0dBisha Koobaad\x0cBisha Labaad\x0fBisha Saddexaad\x0cBisha Afraad\x0d" + + "Bisha Shanaad\x0cBisha Lixaad\x0eBisha Todobaad\x0fBisha Sideedaad\x0fBi" + + "sha Sagaalaad\x0dBisha Tobnaad\x15Bisha Kow iyo Tobnaad\x16Bisha Laba iy" + + "o Tobnaad\x03Axd\x03Isn\x03Tal\x03Arb\x03Kha\x03Jim\x03Sab\x04Axad\x06Is" + + "niin\x07Talaado\x06Arbaco\x07Khamiis\x05Jimco\x05Sabti\x0bRubaca 1aad" + + "\x0bRubaca 2aad\x0bRubaca 3aad\x0bRubaca 4aad\x03gn.\x02CK\x02CD\x10EEEE" + + ", MMMM dd, y\x06Shalay\x06Maanta\x05Berri\x11Waqtiga Kolambiya!Waqtiyada" + + " Caadiga ah ee kolambiya\x1bWaqtiyada Xagaaga Kolambiya\x11Waqtiga Galab" + + "agos\x0fEEEE, d MMM y G\x0d{1} 'në' {0}\x05janar\x06shkurt\x04mars\x05pr" + + "ill\x03maj\x07qershor\x06korrik\x05gusht\x07shtator\x05tetor\x07nëntor" + + "\x07dhjetor\x05Janar\x06Shkurt\x04Mars\x05Prill\x03Maj\x07Qershor\x06Kor" + + "rik\x05Gusht\x07Shtator\x05Tetor\x07Nëntor\x07Dhjetor\x03Die\x04Hën\x03M" + + "ar\x04Mër\x03Enj\x03Pre\x03Sht\x06e diel\x08e hënë\x08e martë\x0be mërku" + + "rë\x07e enjte\x08e premte\x09e shtunë\x06E diel\x08E hënë\x08E martë\x0b" + + "E mërkurë\x07E enjte\x08E premte\x09E shtunë\x0btremujori I\x0ctremujori" + + " II\x0dtremujori III\x0ctremujori IV\x11tremujori i parë\x11tremujori i " + + "dytë\x12tremujori i tretë\x13tremujori i katërt\x0bTremujori I\x0cTremuj" + + "ori II\x0dTremujori III\x0cTremujori IV\x11Tremujori i 1-rë\x11Tremujori" + + " i 2-të\x11Tremujori i 3-të\x0fTremujori i 4-t\x0be mesnatës\x0be paradi" + + "tes\x0be mesditës\x0ae pasdites\x0ce mëngjesit\x0be mbrëmjes\x08e natës" + + "\x08mesnatë\x08paradite\x08mesditë\x07pasdite\x08mëngjes\x08mbrëmje\x05n" + + "atë\x0dpara Krishtit\x10para erës sonë\x0dmbas Krishtit\x0berës sonë\x04" + + "p.K.\x06p.e.s.\x05mb.K.\x04e.s.\x0fh:mm:ss a, zzzz\x0ch:mm:ss a, z\x04er" + + "ë\x03vit\x0evitin e kaluar\x0akëtë vit\x11vitin e ardhshëm\x0cpas {0} v" + + "iti\x10pas {0} vjetësh\x11{0} vit më parë\x12{0} vjet më parë\x08tremujo" + + "r\x13tremujorin e kaluar\x0fkëtë tremujor\x16tremujorin e ardhshëm\x11pa" + + "s {0} tremujori\x14pas {0} tremujorësh\x16{0} tremujor më parë\x18{0} tr" + + "emujorë më parë\x04muaj\x0fmuajin e kaluar\x0bkëtë muaj\x12muajin e ardh" + + "shëm\x0dpas {0} muaji\x0epas {0} muajsh\x12{0} muaj më parë\x05javë\x0fj" + + "avën e kaluar\x0ckëtë javë\x11javën e ardhshme\x0cpas {0} jave\x0fpas {0" + + "} javësh\x13{0} javë më parë\x0ajava e {0}\x0ejavë e muajit\x05ditë\x03d" + + "je\x03sot\x06nesër\x0cpas {0} dite\x0fpas {0} ditësh\x13{0} ditë më parë" + + "\x0dditë e vitit\x0editë e javës\x13ditë pune e muajit\x14të dielën e ka" + + "luar\x0fkëtë të diel\x16të dielën e ardhshme\x11pas {0} të diele\x13pas " + + "{0} të dielash\x18{0} të dielë më parë\x17{0} të diela më parë\x14të hën" + + "ën e kaluar\x11këtë të hënë\x16të hënën e ardhshme\x11pas {0} të hëne" + + "\x13pas {0} të hënash\x18{0} të hënë më parë\x17{0} të hëna më parë\x14t" + + "ë martën e kaluar\x11këtë të martë\x16të martën e ardhshme\x11pas {0} t" + + "ë marte\x13pas {0} të martash\x18{0} të martë më parë\x17{0} të marta m" + + "ë parë\x17të mërkurën e kaluar\x14këtë të mërkurë\x19të mërkurën e ardh" + + "shme\x14pas {0} të mërkure\x16pas {0} të mërkurash\x1b{0} të mërkurë më " + + "parë\x1a{0} të mërkura më parë\x13të enjten e kaluar\x10këtë të enjte" + + "\x15të enjten e ardhshme\x11pas {0} të enjte\x13pas {0} të enjtesh\x17{0" + + "} të enjte më parë\x14të premten e kaluar\x11këtë të premte\x16të premte" + + "n e ardhshme\x12pas {0} të premte\x14pas {0} të premtesh\x18{0} të premt" + + "e më parë\x15të shtunën e kaluar\x12këtë të shtunë\x17të shtunën e ardhs" + + "hme\x12pas {0} të shtune\x14pas {0} të shtunash\x19{0} të shtunë më parë" + + "\x18{0} të shtuna më parë\x10paradite/pasdite\x04orë\x0bkëtë orë\x0bpas " + + "{0} ore\x0epas {0} orësh\x12{0} orë më parë\x07minutë\x0ekëtë minutë\x0e" + + "pas {0} minute\x10pas {0} minutash\x15{0} minutë më parë\x14{0} minuta m" + + "ë parë\x0cpas {0} min.\x12{0} min. më parë\x08sekondë\x04tani\x0fpas {0" + + "} sekonde\x11pas {0} sekondash\x16{0} sekondë më parë\x15{0} sekonda më " + + "parë\x0cpas {0} sek.\x12{0} sek. më parë\x0abrezi orar\x08Ora: {0}\x0fOr" + + "a verore: {0}\x12Ora standarde: {0}\x1bOra universale e koordinuar\x14Or" + + "a verore britanike\x1aOra strandarde e Irlandës\x12Ora e Ejkrit [Ako]" + + "\x1cOra standarde e Ejkrit [Ako]\x19Ora verore e Ejkrit [Ako]\x12Ora e A" + + "fganistanit\x17Ora e Afrikës Qendrore\x16Ora e Afrikës Lindore\x1fOra st" + + "andarde e Afrikës Jugore\x1bOra e Afrikës Perëndimore%Ora standarde e Af" + + "rikës Perëndimore\"Ora verore e Afrikës Perëndimore\x0eOra e Alaskës\x18" + + "Ora standarde e Alaskës\x16Ora verore e Alsaskës\x0dOra e Almatit\x17Ora" + + " standarde e Almatit\x14Ora verore e Almatit\x0fOra e Amazonës\x19Ora st" + + "andarde e Amazonës\x16Ora verore e Amazonës\x17Ora e SHBA-së Qendrore!Or" + + "a standarde e SHBA-së Qendrore\x1eOra verore e SHBA-së Qendrore\x16Ora e" + + " SHBA-së Lindore Ora standarde e SHBA-së Lindore\x1dOra verore e SHBA-së" + + " Lindore,Ora e Territoreve Amerikane të Brezit Malor6Ora standarde e Ter" + + "ritoreve Amerikane të Brezit Malor3Ora verore e Territoreve Amerikane të" + + " Brezit Malor5Ora e Territoreve Amerikane të Bregut të Paqësorit?Ora sta" + + "ndarde e Territoreve Amerikane të Bregut të Paqësorit{0} காலாண்டுகளுக்கு முன்\x0dகாலா.(இறுதி காலாண்டு\x11{0} " + + "காலா.\x1e{0} காலா. முன்\x0b{0} கா.\x18{0} கா. முன்\x0fமாதம்\x1fகடந்த ம" + + "ாதம்\x1cஇந்த மாதம்\"அடுத்த மாதம்\x1f{0} மாதத்தில்\"{0} மாதங்களில்2{0} " + + "மாதத்துக்கு முன்5{0} மாதங்களுக்கு முன்\x0aமாத.\x0e{0} மாத.\x1b{0} மாத." + + " முன்\x0b{0} மா.\x18{0} மா. முன்\x0fவாரம்\x1fகடந்த வாரம்\x1cஇந்த வாரம்\"" + + "அடுத்த வாரம்\x1f{0} வாரத்தில்\"{0} வாரங்களில்2{0} வாரத்திற்கு முன்5{0}" + + " வாரங்களுக்கு முன்\x1e{0} -இன் வாரம்\x0e{0} வார.\x1b{0} வார. முன்\x07வா." + + "\x0b{0} வா.\x18{0} வா. முன்+மாதத்தின் வாரம்\x1aமாத. வாரம்\x0cநாள்/நேற்று" + + " முன் தினம்\x12நேற்று\x0fஇன்று\x0cநாளை\"நாளை மறுநாள்\x16{0} நாளில்\x1f{0" + + "} நாட்களில்){0} நாளுக்கு முன்2{0} நாட்களுக்கு முன்\x07நா.\x0b{0} நா.\x18" + + "{0} நா. முன்+வருடத்தின் நாள்\x1aவருட. நாள்(வாரத்தின் நாள்\x17வார. நாள்1ம" + + "ாதத்தின் வாரநாள் மாத. வாரநாள்\"கடந்த ஞாயிறு\x1fஇந்த ஞாயிறு%அடுத்த ஞாயி" + + "று\x1c{0} ஞாயிறில்%{0} ஞாயிறுகளில்5{0} ஞாயிறுக்கு முன்பு>{0} ஞாயிறுகளு" + + "க்கு முன்பு\x1dகடந்த ஞாயி.\x1aஇந்த ஞாயி. அடுத்த ஞாயி.\x11{0} ஞாயி.\x1e" + + "{0} ஞாயி. முன்\x17கடந்த ஞா.\x14இந்த ஞா.\x1aஅடுத்த ஞா.\x0b{0} ஞா.\x18{0} " + + "ஞா. முன்%கடந்த திங்கள்\"இந்த திங்கள்(அடுத்த திங்கள்\x1f{0} திங்களில்({" + + "0} திங்கள்களில்2{0} திங்களுக்கு முன்;{0} திங்கள்களுக்கு முன்\x1dகடந்த தி" + + "ங்.\x1aஇந்த திங். அடுத்த திங்.\x11{0} திங்.\x1e{0} திங். முன்(கடந்த செ" + + "வ்வாய்%இந்த செவ்வாய்+அடுத்த செவ்வாய்\"{0} செவ்வாயில்+{0} செவ்வாய்களில்" + + "/{0} செவ்வாய் முன்பு8{0} செவ்வாய்கள் முன்பு\x1dகடந்த செவ்.\x1aஇந்த செவ்." + + " அடுத்த செவ்.\x11{0} செவ்.>{0} செவ்வாய்களுக்கு முன்${0} செவ். முன்பு\x1f" + + "கடந்த புதன்\x1cஇந்த புதன்\"அடுத்த புதன்\x19{0} புதனில்\"{0} புதன்களில்" + + ",{0} புதனுக்கு முன்5{0} புதன்களுக்கு முன்\x1aகடந்த புத.\x17இந்த புத.\x1d" + + "அடுத்த புத.\x0e{0} புத." + +var bucket105 string = "" + // Size: 22064 bytes + "\x1b{0} புத. முன்%கடந்த வியாழன்\"இந்த வியாழன்(அடுத்த வியாழன்\x1f{0} வியா" + + "ழனில்({0} வியாழன்களில்2{0} வியாழனுக்கு முன்;{0} வியாழன்களுக்கு முன்" + + "\x1dகடந்த வியா.\x1aஇந்த வியா. அடுத்த வியா.\x11{0} வியா.\x1e{0} வியா. முன" + + "்\"கடந்த வெள்ளி\x1fஇந்த வெள்ளி%அடுத்த வெள்ளி\"{0} வெள்ளியில்%{0} வெள்ள" + + "ிகளில்/{0} வெள்ளிக்கு முன்8{0} வெள்ளிகளுக்கு முன்\x1dகடந்த வெள்.\x1aஇந" + + "்த வெள். அடுத்த வெள்.\x11{0} வெள்.\x1e{0} வெள். முன்\x19கடந்த சனி\x16இ" + + "ந்த சனி\x1cஅடுத்த சனி\x19{0} சனியில்\x1c{0} சனிகளில்&{0} சனிக்கு முன்/" + + "{0} சனிகளுக்கு முன்\x0e{0} சனி.\x1b{0} சனி. முன்\x1bமுற்./பிற்.1முற்பகல்" + + "/பிற்பகல்\x09மணி;இந்த ஒரு மணிநேரத்தில்({0} மணிநேரத்தில்){0} மணிநேரம் முன" + + "்\x0aமணி.\x0e{0} மணி.\x1b{0} மணி. முன்\x04ம.\x08{0} ம.\x15{0} ம. முன்" + + "\x15நிமிடம்8இந்த ஒரு நிமிடத்தில்%{0} நிமிடத்தில்({0} நிமிடங்களில்8{0} நி" + + "மிடத்திற்கு முன்;{0} நிமிடங்களுக்கு முன்\x0dநிமி.\x11{0} நிமி.\x1e{0} " + + "நிமி. முன்\x0b{0} நி.\x18{0} நி. முன்\x12விநாடி\x15இப்போது\"{0} விநாடி" + + "யில்%{0} விநாடிகளில்/{0} விநாடிக்கு முன்8{0} விநாடிகளுக்கு முன்\x0dவிந" + + "ா.\x11{0} விநா.\x1e{0} விநா. முன்\x07வி.\x0b{0} வி.\x18{0} வி. முன்" + + "\x1fநேர மண்டலம்\x15மண்டலம்\x13{0} நேரம்&{0} பகலொளி நேரம்){0} நிலையான நேர" + + "ம்Jஒருங்கிணைந்த சர்வதேச நேரம்;பிரிட்டிஷ் கோடை நேரம்5ஐரிஷ் நிலையான நேரம" + + "்\x1fஅக்ரே நேரம்&அக்ரே தர நேரம்,அக்ரே கோடை நேரம்:ஆஃப்கானிஸ்தான் நேரம்A" + + "மத்திய ஆப்பிரிக்க நேரம்Dகிழக்கு ஆப்பிரிக்க நேரம்Qதென் ஆப்பிரிக்க நிலைய" + + "ான நேரம்Aமேற்கு ஆப்பிரிக்க நேரம்Wமேற்கு ஆப்பிரிக்க நிலையான நேரம்Nமேற்க" + + "ு ஆப்பிரிக்க கோடை நேரம்%அலாஸ்கா நேரம்;அலாஸ்கா நிலையான நேரம்8அலாஸ்கா பக" + + "லொளி நேரம்%அல்மாடி நேரம்,அல்மாடி தர நேரம்2அல்மாடி கோடை நேரம்%அமேசான் ந" + + "ேரம்;அமேசான் நிலையான நேரம்2அமேசான் கோடை நேரம்\"மத்திய நேரம்8மத்திய நில" + + "ையான நேரம்5மத்திய பகலொளி நேரம்1கிழக்கத்திய நேரம்Gகிழக்கத்திய நிலையான ந" + + "ேரம்Dகிழக்கத்திய பகலொளி நேரம்+மவுன்டைன் நேரம்Aமவுன்டைன் நிலையான நேரம்>" + + "மவுன்டைன் பகலொளி நேரம்%பசிபிக் நேரம்;பசிபிக் நிலையான நேரம்8பசிபிக் பகல" + + "ொளி நேரம்\"அனடீர் நேரம்/அனாடையர் தர நேரம்5அனாடையர் கோடை நேரம்\x1fஏபியா" + + " நேரம்5ஏபியா நிலையான நேரம்2ஏபியா பகலொளி நேரம்\x1fஅட்டௌ நேரம்&அட்டௌ தர நே" + + "ரம்,அட்டௌ கோடை நேரம்%அட்டோபே நேரம்,அட்டோபே தர நேரம்2அட்டோபே கோடை நேரம்" + + "\"அரேபிய நேரம்8அரேபிய நிலையான நேரம்5அரேபிய பகலொளி நேரம்1அர்ஜென்டினா நேரம" + + "்Gஅர்ஜென்டினா நிலையான நேரம்>அர்ஜென்டினா கோடை நேரம்Pமேற்கத்திய அர்ஜென்ட" + + "ினா நேரம்fமேற்கத்திய அர்ஜென்டினா நிலையான நேரம்]மேற்கத்திய அர்ஜென்டினா " + + "கோடை நேரம்(ஆர்மேனிய நேரம்>ஆர்மேனிய நிலையான நேரம்5ஆர்மேனிய கோடை நேரம்1அ" + + "ட்லாண்டிக் நேரம்Gஅட்லாண்டிக் நிலையான நேரம்Dஅட்லாண்டிக் பகலொளி நேரம்Aமத" + + "்திய ஆஸ்திரேலிய நேரம்]ஆஸ்திரேலியன் மத்திய நிலையான நேரம்Zஆஸ்திரேலியன் ம" + + "த்திய பகலொளி நேரம்fஆஸ்திரேலியன் மத்திய மேற்கத்திய நேரம்|ஆஸ்திரேலியன் ம" + + "த்திய மேற்கத்திய நிலையான நேரம்yஆஸ்திரேலியன் மத்திய மேற்கத்திய பகலொளி ந" + + "ேரம்Pகிழக்கத்திய ஆஸ்திரேலிய நேரம்lஆஸ்திரேலியன் கிழக்கத்திய நிலையான நேர" + + "ம்iஆஸ்திரேலியன் கிழக்கத்திய பகலொளி நேரம்Mமேற்கத்திய ஆஸ்திரேலிய நேரம்iஆ" + + "ஸ்திரேலியன் மேற்கத்திய நிலையான நேரம்fஆஸ்திரேலியன் மேற்கத்திய பகலொளி நே" + + "ரம்.அசர்பைஜான் நேரம்Dஅசர்பைஜான் நிலையான நேரம்;அசர்பைஜான் கோடை நேரம்\"அ" + + "சோரஸ் நேரம்8அசோரஸ் நிலையான நேரம்2அசோர்ஸ் கோடை நேரம்%வங்கதேச நேரம்;வங்க" + + "தேச நிலையான நேரம்2வங்கதேச கோடை நேரம்\"பூடான் நேரம்(பொலிவியா நேரம்.பிரே" + + "சிலியா நேரம்Dபிரேசிலியா நிலையான நேரம்;பிரேசிலியா கோடை நேரம்Aபுருனே டரு" + + "ஸ்ஸலாம் நேரம்/கேப் வெர்டே நேரம்Eகேப் வெர்டே நிலையான நேரம்<கேப் வெர்டே " + + "கோடை நேரம்8சாமோரோ நிலையான நேரம்%சத்தாம் நேரம்;சத்தாம் நிலையான நேரம்8சத" + + "்தாம் பகலொளி நேரம்\x1cசிலி நேரம்2சிலி நிலையான நேரம்)சிலி கோடை நேரம்" + + "\x19சீன நேரம்/சீன நிலையான நேரம்,சீன பகலொளி நேரம்1சோய்பால்சன் நேரம்Gசோய்ப" + + "ால்சன் நிலையான நேரம்>சோய்பால்சன் கோடை நேரம்>கிறிஸ்துமஸ் தீவு நேரம்8கோக" + + "ோஸ் தீவுகள் நேரம்+கொலம்பியா நேரம்Aகொலம்பியா நிலையான நேரம்8கொலம்பியா கோ" + + "டை நேரம்2குக் தீவுகள் நேரம்Hகுக் தீவுகள் நிலையான நேரம்Iகுக் தீவுகள் அர" + + "ை கோடை நேரம்\"கியூபா நேரம்8கியூபா நிலையான நேரம்5கியூபா பகலொளி நேரம்\"ட" + + "ேவிஸ் நேரம்Kடுமோண்ட்-டி உர்வில்லே நேரம்8கிழக்கு திமோர் நேரம்/ஈஸ்டர் தீ" + + "வு நேரம்Eஈஸ்டர் தீவு நிலையான நேரம்<ஈஸ்டர் தீவு கோடை நேரம்(ஈக்வடார் நேர" + + "ம்;மத்திய ஐரோப்பிய நேரம்Qமத்திய ஐரோப்பிய நிலையான நேரம்Hமத்திய ஐரோப்பிய" + + " கோடை நேரம்Jகிழக்கத்திய ஐரோப்பிய நேரம்`கிழக்கத்திய ஐரோப்பிய நிலையான நேரம" + + "்Wகிழக்கத்திய ஐரோப்பிய கோடை நேரம்Hதூர-கிழக்கு ஐரோப்பிய நேரம்Gமேற்கத்தி" + + "ய ஐரோப்பிய நேரம்]மேற்கத்திய ஐரோப்பிய நிலையான நேரம்Tமேற்கத்திய ஐரோப்பிய" + + " கோடை நேரம்Gஃபாக்லாந்து தீவுகள் நேரம்]ஃபாக்லாந்து தீவுகள் நிலையான நேரம்T" + + "ஃபாக்லாந்து தீவுகள் கோடை நேரம்\x1fஃபிஜி நேரம்5ஃபிஜி நிலையான நேரம்,ஃபிஜ" + + "ி கோடை நேரம்8ஃபிரஞ்சு கயானா நேரம்kபிரெஞ்சு தெற்கத்திய & அண்டார்டிக் நே" + + "ரம்%கலபகோஸ் நேரம்+கேம்பியர் நேரம்(ஜார்ஜியா நேரம்>ஜார்ஜியா நிலையான நேரம" + + "்5ஜார்ஜியா கோடை நேரம்Aகில்பர்ட் தீவுகள் நேரம்Aகிரீன்விச் சராசரி நேரம்J" + + "கிழக்கு கிரீன்லாந்து நேரம்`கிழக்கு கிரீன்லாந்து நிலையான நேரம்Wகிழக்கு " + + "கிரீன்லாந்து கோடை நேரம்Gமேற்கு கிரீன்லாந்து நேரம்]மேற்கு கிரீன்லாந்து " + + "நிலையான நேரம்Tமேற்கு கிரீன்லாந்து கோடை நேரம் கம் தர நேரம்;வளைகுடா நிலை" + + "யான நேரம்\x1fகயானா நேரம்8ஹவாய்-அலேஷியன் நேரம்Nஹவாய்-அலேஷியன் நிலையான ந" + + "ேரம்Kஹவாய்-அலேஷியன் பகலொளி நேரம்(ஹாங்காங் நேரம்>ஹாங்காங் நிலையான நேரம்" + + "5ஹாங்காங் கோடை நேரம்\"ஹோவ்த் நேரம்8ஹோவ்த் நிலையான நேரம்/ஹோவ்த் கோடை நேரம" + + "்8இந்திய நிலையான நேரம்Gஇந்தியப் பெருங்கடல் நேரம்(இந்தோசீன நேரம்Aமத்திய" + + " இந்தோனேசிய நேரம்Pகிழக்கத்திய இந்தோனேசிய நேரம்Mமேற்கத்திய இந்தோனேசிய நேர" + + "ம்\x1fஈரான் நேரம்5ஈரான் நிலையான நேரம்2ஈரான் பகலொளி நேரம்1இர்குட்ஸ்க் ந" + + "ேரம்Gஇர்குட்ஸ்க் நிலையான நேரம்>இர்குட்ஸ்க் கோடை நேரம்%இஸ்ரேல் நேரம்;இஸ" + + "்ரேல் நிலையான நேரம்8இஸ்ரேல் பகலொளி நேரம்%ஜப்பான் நேரம்;ஜப்பான் நிலையான" + + " நேரம்8ஜப்பான் பகலொளி நேரம்bபெட்ரோபவ்லோவ்ஸ்க் கம்சட்ஸ்கி நேரம்iபெட்ரோபவ்" + + "லோவ்ஸ்க் கம்சட்ஸ்கி தர நேரம்oபெட்ரோபவ்லோவ்ஸ்க் கம்சட்ஸ்கி கோடை நேரம்Aக" + + "ிழக்கு கஜகஸ்தான் நேரம்>மேற்கு கஜகஸ்தான் நேரம்\x1fகொரிய நேரம்5கொரிய நில" + + "ையான நேரம்2கொரிய பகலொளி நேரம்\"கோஸ்ரே நேரம்=க்ரஸ்னோயார்ஸ்க் நேரம்Sக்ரஸ" + + "்னோயார்ஸ்க் நிலையான நேரம்Jக்ரஸ்னோயார்ஸ்க் கோடை நேரம்4கிர்கிஸ்தான் நேரம" + + "்\x1fலங்கா நேரம்2லைன் தீவுகள் நேரம்/லார்ட் ஹோவ் நேரம்Eலார்ட் ஹோவ் நிலை" + + "யான நேரம்Bலார்ட் ஹோவ் பகலொளி நேரம்%மக்காவ் நேரம்,மக்காவ் தர நேரம்2மக்க" + + "ாவ் கோடை நேரம்;மாக்கியூரி தீவு நேரம்\x1fமகதன் நேரம்5மகதன் நிலையான நேரம" + + "்,மகதன் கோடை நேரம்\"மலேஷிய நேரம்4மாலத்தீவுகள் நேரம்4மார்கியூசாஸ் நேரம்" + + ";மார்ஷல் தீவுகள் நேரம்+மொரிஷியஸ் நேரம்Aமொரிஷியஸ் நிலையான நேரம்8மொரிஷியஸ்" + + " கோடை நேரம்\x1fமாசன் நேரம்Aவடமேற்கு மெக்ஸிகோ நேரம்Wவடமேற்கு மெக்ஸிகோ நில" + + "ையான நேரம்Tவடமேற்கு மெக்ஸிகோ பகலொளி நேரம்Aமெக்ஸிகன் பசிபிக் நேரம்Wமெக்" + + "ஸிகன் பசிபிக் நிலையான நேரம்Tமெக்ஸிகன் பசிபிக் பகலொளி நேரம்,உலன் பாடர் " + + "நேரம்Bஉலன் பாடர் நிலையான நேரம்9உலன் பாடர் கோடை நேரம்\"மாஸ்கோ நேரம்8மாஸ" + + "்கோ நிலையான நேரம்/மாஸ்கோ கோடை நேரம்+மியான்மர் நேரம்\x1fநவ்ரூ நேரம்\x1f" + + "நேபாள நேரம்8நியூ கலிடோனியா நேரம்Nநியூ கலிடோனியா நிலையான நேரம்Eநியூ கலி" + + "டோனியா கோடை நேரம்4நியூசிலாந்து நேரம்Jநியூசிலாந்து நிலையான நேரம்Gநியூசி" + + "லாந்து பகலொளி நேரம்Fநியூஃபவுண்ட்லாந்து நேரம்\\நியூஃபவுண்ட்லாந்து நிலைய" + + "ான நேரம்Yநியூஃபவுண்ட்லாந்து பகலொளி நேரம்\x1cநியு நேரம்8நார்ஃபோக் தீவு " + + "நேரம்Kபெர்னாண்டோ டி நோரன்ஹா நேரம்dபெர்னான்டோ டி நோரோன்ஹா நிலையான நேரம்" + + "[பெர்னான்டோ டி நோரோன்ஹா கோடை நேரம்Hவடக்கு மரினா தீவுகள் நேரம்:நோவோசிபிரி" + + "ஸ்க் நேரம்Pநோவோசிபிரிஸ்க் நிலையான நேரம்Gநோவோசிபிரிஸ்க் கோடை நேரம்%ஓம்ஸ" + + "்க் நேரம்;ஓம்ஸ்க் நிலையான நேரம்2ஓம்ஸ்க் கோடை நேரம்.பாகிஸ்தான் நேரம்Dபா" + + "கிஸ்தான் நிலையான நேரம்;பாகிஸ்தான் கோடை நேரம்\x1fபாலவ் நேரம்?பபுவா நியூ" + + " கினியா நேரம்%பராகுவே நேரம்;பராகுவே நிலையான நேரம்2பராகுவே கோடை நேரம்\x1c" + + "பெரு நேரம்2பெரு நிலையான நேரம்)பெரு கோடை நேரம்.பிலிப்பைன் நேரம்Dபிலிப்ப" + + "ைன் நிலையான நேரம்;பிலிப்பைன் கோடை நேரம்Aஃபோனிக்ஸ் தீவுகள் நேரம்_செயின்" + + "ட் பியரி & மிக்குயிலான் நேரம்uசெயின்ட் பியரி & மிக்குயிலான் நிலையான நே" + + "ரம்rசெயின்ட் பியரி & மிக்குயிலான் பகலொளி நேரம்4பிட்கெய்ர்ன் நேரம்\"போன" + + "ாபே நேரம்.பியாங்யாங் நேரம்.கைஜைலோர்டா நேரம்5கைஜைலோர்டா தர நேரம்;கைஜைலோ" + + "ர்டா கோடை நேரம்+ரீயூனியன் நேரம்\"ரோதேரா நேரம்\"சகலின் நேரம்8சகலின் நில" + + "ையான நேரம்/சகலின் கோடை நேரம்\x1cசமரா நேரம்#சமரா தர நேரம்)சமரா கோடை நேர" + + "ம்\x1fசமோவா நேரம்5சமோவா நிலையான நேரம்2சமோவா பகலொளி நேரம்(சீசெல்ஸ் நேரம" + + "்Gசிங்கப்பூர் நிலையான நேரம்8சாலமன் தீவுகள் நேரம்;தெற்கு ஜார்ஜியா நேரம்" + + "(சுரினாம் நேரம்\"ஸ்யோவா நேரம்\x1fதஹிதி நேரம்\"தாய்பே நேரம்8தாய்பே நிலையா" + + "ன நேரம்5தாய்பே பகலொளி நேரம்1தஜிகிஸ்தான் நேரம்.டோக்கெலாவ் நேரம்\"டோங்கா" + + " நேரம்8டோங்கா நிலையான நேரம்/டோங்கா கோடை நேரம்\x1cசுக் நேரம்@துர்க்மெனிஸ்" + + "தான் நேரம்Vதுர்க்மெனிஸ்தான் நிலையான நேரம்Mதுர்க்மெனிஸ்தான் கோடை நேரம்" + + "\"துவாலு நேரம்%உருகுவே நேரம்;உருகுவே நிலையான நேரம்2உருகுவே கோடை நேரம்7உஸ" + + "்பெகிஸ்தான் நேரம்Mஉஸ்பெகிஸ்தான் நிலையான நேரம்Dஉஸ்பெகிஸ்தான் கோடை நேரம்" + + "+வனுவாட்டு நேரம்Aவனுவாட்டு நிலையான நேரம்8வனுவாட்டு கோடை நேரம்(வெனிசுலா ந" + + "ேரம்:விளாடிவோஸ்டோக் நேரம்Pவிளாடிவோஸ்டோக் நிலையான நேரம்Gவிளாடிவோஸ்டோக் " + + "கோடை நேரம்4வோல்கோக்ராட் நேரம்Jவோல்கோக்ராட் நிலையான நேரம்Aவோல்கோக்ராட் " + + "கோடை நேரம்(வோஸ்டோக் நேரம்)வேக் தீவு நேரம்Tவாலிஸ் மற்றும் ஃப்யூடுனா நேர" + + "ம்+யகுட்ஸ்க் நேரம்Aயகுட்ஸ்க் நிலையான நேரம்8யகுட்ஸ்க் கோடை நேரம்=யேகாடெ" + + "ரின்பர்க் நேரம்Sயேகாடெரின்பர்க் நிலையான நேரம்Jயேகாடெரின்பர்க் கோடை நேர" + + "ம்" + +var bucket106 string = "" + // Size: 8184 bytes + "\x0cటౌట్\x0cబాబా\x0fహాటర్\x0fకిహఖ్\x0cతోబా\x15అమ్షిర్\x1bబారామ్హట్\x18బా" + + "రామౌదా\x15బషాన్స్\x0cపఓనా\x0fఇపెప్\x12మెస్రా\x0cనైసే\x1eమెస్క్\u200cరమ" + + "్\x15టెకెమట్\x0fహెదర్\x12తహసాస్\x09టర్\x18యెకాటిట్\x18మెగాబిట్\x12మియజ" + + "ియ\x1bగెన్\u200cబోట్\x0cసెనె\x0fహమ్లె\x15నెహస్సె\x15పగుమెన్\x06జన\x0fఫ" + + "ిబ్ర\x12మార్చి\x0fఏప్రి\x06మే\x0cజూన్\x0cజులై\x06ఆగ\x15సెప్టెం\x0fఅక్ట" + + "ో\x09నవం\x0fడిసెం\x03జ\x06ఫి\x06మా\x03ఏ\x06జూ\x06జు\x03ఆ\x06సె\x03అ" + + "\x03న\x06డి\x0fజనవరి\x18ఫిబ్రవరి\x15ఏప్రిల్\x12ఆగస్టు\x1eసెప్టెంబర్\x18అ" + + "క్టోబర్\x12నవంబర్\x18డిసెంబర్\x09ఆది\x09సోమ\x0cమంగళ\x09బుధ\x0cగురు\x0f" + + "శుక్ర\x09శని\x06సో\x03మ\x06బు\x06గు\x06శు\x03శ\x06మం\x15ఆదివారం\x15సోమ" + + "వారం\x18మంగళవారం\x15బుధవారం\x18గురువారం\x1bశుక్రవారం\x15శనివారం\x0dత్ర" + + "ై1\x0dత్రై2\x0dత్రై3\x0dత్రై4#1వ త్రైమాసికం#2వ త్రైమాసికం#3వ త్రైమాసిక" + + "ం#4వ త్రైమాసికం\x1eఅర్ధరాత్రి\x0cఉదయం\x1bమధ్యాహ్నం\x18సాయంత్రం\x12రాత్" + + "రి\x03ఉ\x06సా+క్రీస్తు పూర్వంAప్రస్తుత శకానికి పూర్వం\"క్రీస్తు శకం\"ప" + + "్రస్తుత శకం\x12క్రీపూ\x0fక్రీశ\x0fd, MMMM y, EEEE\x0d{1} {0}కి\x12టిశ్" + + "రీ\x1bహేష్\u200cవాన్\x18కిస్లెవ్\x12టెవెట్\x12షెవాట్\x0eఅదర్ I\x0cఅదర్" + + "\x0fఅదర్ II\x12నిసాన్\x0cఐయర్\x12సివాన్\x0fతముజ్\x06అవ\x0fఇలుల్\x12చైత్ర" + + "ం\x12వైశాఖం\x18జ్యేష్ఠం\x0fఆషాఢం\x15శ్రావణం\x18భాద్రపదం\x18ఆశ్వయుజం" + + "\x18కార్తీకం\x1bమార్గశిరం\x12పుష్యం\x0cమాఘం\x15ఫల్గుణం\x06శక\x0aముహ.\x07" + + "సఫ.\x06ర. I\x07ర. II\x0cజుమ. I\x0dజుమ. II\x07రజ.\x0aషబా.\x0dరంజా.\x10ష" + + "వ్వా.\x14ధుల్-కి.\x14ధుల్-హి.\x15ముహర్రం\x0cసఫర్\x0bరబీ I\x0cరబీ II" + + "\x11జుమదా I\x12జుమదా II\x0cరజబ్\x0fషబాన్\x12రంజాన్\x15షవ్వాల్ ధుల్-కి దా" + + "హ్%ధుల్-హిజ్జాహ్\x1bఫావర్డిన్\x1bఊడాబహష్ట్\x18ఖోర్డాడ్\x0cటిర్\x18మెర్" + + "డాడ్\x12శశివర్\x0fమెహర్\x0cఅబన్\x0cఅజర్\x06డే\x1bబాహ్\u200cమాన్\x1bఎస్" + + "\u200cఫాండ్\x19R.O.C. పూర్వం\x06R.O.C.\x0cయుగం\x18సంవత్సరం\x1fగత సంవత్సర" + + "ం\x1cఈ సంవత్సరం+తదుపరి సంవత్సరం\"{0} సంవత్సరంలో({0} సంవత్సరాల్లో/{0} స" + + "ంవత్సరం క్రితం2{0} సంవత్సరాల క్రితం\x07సం.\x11{0} సం.లో\x17{0} సం.ల్లో" + + "\x1e{0} సం. క్రితం\x1eత్రైమాసికం%గత త్రైమాసికం\"ఈ త్రైమాసికం1తదుపరి త్రై" + + "మాసికం({0} త్రైమాసికంలో.{0} త్రైమాసికాల్లో5{0} త్రైమాసికం క్రితం8{0} త" + + "్రైమాసికాల క్రితం\x0dత్రై.\x1d{0} త్రైమా.లో#{0} త్రైమా.ల్లో*{0} త్రైమా" + + ". క్రితం\x09నెల\x10గత నెల\x0dఈ నెల\x1cతదుపరి నెల\x13{0} నెలలో\x19{0} నెల" + + "ల్లో {0} నెల క్రితం#{0} నెలల క్రితం\x06నె\x0fవారము\x13గత వారం\x10ఈ వార" + + "ం\x1fతదుపరి వారం\x16{0} వారంలో\x1c{0} వారాల్లో#{0} వారం క్రితం&{0} వార" + + "ాల క్రితం\x10{0} వారం\x06వా\x16{0}లో వారం\x1cనెలలో వారం\x0cదినం\x0fమొన" + + "్న\x0fనిన్న\x10ఈ రోజు\x0cరేపు\x18ఎల్లుండి\x16{0} రోజులో\x1c{0} రోజుల్ల" + + "ో#{0} రోజు క్రితం&{0} రోజుల క్రితం\x0cరోజు+సంవత్సరంలో దినం\x1fవారంలో ర" + + "ోజు%నెలలో పనిదినం\x1cగత ఆదివారం\x19ఈ ఆదివారం(తదుపరి ఆదివారం\x1f{0} ఆది" + + "వారంలో%{0} ఆదివారాల్లో,{0} ఆదివారం క్రితం/{0} ఆదివారాల క్రితం\x11గత ఆద" + + "ి.\x0eఈ ఆది.\x1dతదుపరి ఆది.\x14{0} ఆది.లో\x1a{0} ఆది.ల్లో!{0} ఆది. క్ర" + + "ితం\x1cగత సోమవారం\x19ఈ సోమవారం(తదుపరి సోమవారం\x1f{0} సోమవారంలో\"{0} సో" + + "మవారాలలో,{0} సోమవారం క్రితం/{0} సోమవారాల క్రితం\x11గత సోమ.\x0eఈ సోమ." + + "\x1dతదుపరి సోమ.\x14{0} సోమ.లో!{0} సోమ. క్రితం\x1fగత మంగళవారం\x1cఈ మంగళవా" + + "రం+తదుపరి మంగళవారం\"{0} మంగళవారంలో%{0} మంగళవారాలలో/{0} మంగళవారం క్రితం" + + "2{0} మంగళవారాల క్రితం\x14గత మంగళ.\x11ఈ మంగళ. తదుపరి మంగళ.\x17{0} మంగళ.లో" + + "${0} మంగళ. క్రితం\x11{0} మం.లో\x1cగత బుధవారం\x19ఈ బుధవారం(తదుపరి బుధవారం" + + "\x1f{0} బుధవారంలో\"{0} బుధవారాలలో,{0} బుధవారం క్రితం/{0} బుధవారాల క్రితం" + + "\x11గత బుధ.\x0eఈ బుధ.\x1dతదుపరి బుధ.\x14{0} బుధ.లో!{0} బుధ. క్రితం\x1fగత" + + " గురువారం\x1cఈ గురువారం+తదుపరి గురువారం\"{0} గురువారంలో%{0} గురువారాలలో/" + + "{0} గురువారం క్రితం2{0} గురువారాల క్రితం\x14గత గురు.\x11ఈ గురు. తదుపరి గ" + + "ురు.\x17{0} గురు.లో${0} గురు. క్రితం\x11{0} గు.లో\"గత శుక్రవారం\x1fఈ శ" + + "ుక్రవారం.తదుపరి శుక్రవారం%{0} శుక్రవారంలో({0} శుక్రవారాలలో2{0} శుక్రవా" + + "రం క్రితం5{0} శుక్రవారాల క్రితం\x17గత శుక్ర.\x14ఈ శుక్ర.#తదుపరి శుక్ర." + + "\x1a{0} శుక్ర.లో'{0} శుక్ర. క్రితం\x11{0} శు.లో\x1cగత శనివారం\x19ఈ శనివా" + + "రం(తదుపరి శనివారం\x1f{0} శనివారంలో\"{0} శనివారాలలో,{0} శనివారం క్రితం/" + + "{0} శనివారాల క్రితం\x11గత శని.\x0eఈ శని.\x1dతదుపరి శని.\x14{0} శని.లో!{0" + + "} శని. క్రితం\x0e{0} శ.లో\x09గంట\x0dఈ గంట\x13{0} గంటలో\x19{0} గంటల్లో {0" + + "} గంట క్రితం#{0} గంటల క్రితం\x07గం.\x11{0} గం.లో\x1e{0} గం. క్రితం\x06గం" + + "\x15నిమిషము\x16ఈ నిమిషం\x1c{0} నిమిషంలో\"{0} నిమిషాల్లో){0} నిమిషం క్రిత" + + "ం,{0} నిమిషాల క్రితం\x0dనిమి.\x17{0} నిమి.లో${0} నిమి. క్రితం\x06ని" + + "\x0fసెకను\x1bప్రస్తుతం\x19{0} సెకనులో\x1c{0} సెకన్లలో&{0} సెకను క్రితం){" + + "0} సెకన్ల క్రితం\x0aసెక." + +var bucket107 string = "" + // Size: 19926 bytes + "!{0} సెక. క్రితం\x14{0} సెక.లో\x15{0} సెక. లో\x19సమయ మండలి\x10{0} సమయం6{" + + "0} పగటి వెలుతురు సమయం,{0} ప్రామాణిక సమయం;సమన్వయ సార్వజనీన సమయం5బ్రిటీష్ " + + "వేసవి సమయం8ఐరిష్ ప్రామాణిక సమయం\x19ఏకర్ సమయం5ఏకర్ ప్రామాణిక సమయం)ఏకర్ " + + "వేసవి సమయం1ఆఫ్ఘనిస్తాన్ సమయం;సెంట్రల్ ఆఫ్రికా సమయం5తూర్పు ఆఫ్రికా సమయం" + + "Qదక్షిణ ఆఫ్రికా ప్రామాణిక సమయం5పశ్చిమ ఆఫ్రికా సమయంQపశ్చిమ ఆఫ్రికా ప్రామా" + + "ణిక సమయంEపశ్చిమ ఆఫ్రికా వేసవి సమయం\"అలాస్కా సమయం>అలాస్కా ప్రామాణిక సమయ" + + "ంHఅలాస్కా పగటి వెలుతురు సమయం\"అల్మాటి సమయం>అల్మాటి ప్రామాణిక సమయం2అల్మ" + + "ాటి వేసవి సమయం\"అమెజాన్ సమయం>అమెజాన్ ప్రామాణిక సమయం2అమెజాన్ వేసవి సమయం" + + "\x1cమధ్యమ సమయం8మధ్యమ ప్రామాణిక సమయంBమధ్యమ పగటి వెలుతురు సమయం\x1fతూర్పు స" + + "మయం;తూర్పు ప్రామాణిక సమయంEతూర్పు పగటి వెలుతురు సమయం(మౌంటెయిన్ సమయంDమౌం" + + "టెయిన్ ప్రామాణిక సమయంNమౌంటెయిన్ పగటి వెలుతురు సమయం\"పసిఫిక్ సమయం>పసిఫి" + + "క్ ప్రామాణిక సమయంHపసిఫిక్ పగటి వెలుతురు సమయం\x1fఅనడైర్ సమయంDఅనాన్డ్రి " + + "ప్రామాణిక సమయం8అనాన్డ్రి వేసవి సమయం\x1cఏపియా సమయం8ఏపియా ప్రామాణిక సమయం" + + ")ఏపియా పగటి సమయం\"అక్వాటు సమయం>అక్వాటు ప్రామాణిక సమయం2అక్వాటు వేసవి సమయం" + + "\"అక్టోబె సమయం>అక్టోబె ప్రామాణిక సమయం2అక్టోబె వేసవి సమయం%అరేబియన్ సమయంAఅ" + + "రేబియన్ ప్రామాణిక సమయంKఅరేబియన్ పగటి వెలుతురు సమయం+అర్జెంటీనా సమయంGఅర్" + + "జెంటీనా ప్రామాణిక సమయం;ఆర్జెంటీనా వేసవి సమయం>పశ్చిమ అర్జెంటీనా సమయంZపశ" + + "్చిమ అర్జెంటీనా ప్రామాణిక సమయంNపశ్చిమ అర్జెంటీనా వేసవి సమయం(ఆర్మేనియా " + + "సమయంDఆర్మేనియా ప్రామాణిక సమయం8ఆర్మేనియా వేసవి సమయం+అట్లాంటిక్ సమయంGఅట్" + + "లాంటిక్ ప్రామాణిక సమయంQఅట్లాంటిక్ పగటి వెలుతురు సమయం>ఆస్ట్రేలియా మధ్యమ" + + " సమయంZఆస్ట్రేలియా మధ్యమ ప్రామాణిక సమయంdఆస్ట్రేలియా మధ్యమ పగటి వెలుతురు స" + + "మయంQఆస్ట్రేలియా మధ్యమ పశ్చిమ సమయంpమధ్యమ ఆస్ట్రేలియన్ పశ్చిమ ప్రామాణిక " + + "సమయంwఆస్ట్రేలియా మధ్యమ పశ్చిమ పగటి వెలుతురు సమయంAతూర్పు ఆస్ట్రేలియా సమ" + + "యం`ఆస్ట్రేలియన్ తూర్పు ప్రామాణిక సమయంjఆస్ట్రేలియన్ తూర్పు పగటి వెలుతుర" + + "ు సమయంAపశ్చిమ ఆస్ట్రేలియా సమయం`ఆస్ట్రేలియన్ పశ్చిమ ప్రామాణిక సమయంjఆస్ట" + + "్రేలియన్ పశ్చిమ పగటి వెలుతురు సమయం+అజర్బైజాన్ సమయంGఅజర్బైజాన్ ప్రామాణి" + + "క సమయం;అజర్బైజాన్ వేసవి సమయం\"అజోర్స్ సమయం>అజోర్స్ ప్రామాణిక సమయం2అజోర" + + "్స్ వేసవి సమయం+బంగ్లాదేశ్ సమయంGబంగ్లాదేశ్ ప్రామాణిక సమయం;బంగ్లాదేశ్ వే" + + "సవి సమయం\x1fభూటాన్ సమయం%బొలీవియా సమయం+బ్రెజిలియా సమయంGబ్రెజిలియా ప్రామ" + + "ాణిక సమయం;బ్రెజిలియా వేసవి సమయం8బ్రూనే దరుసలామ్ సమయం,కేప్ వెర్డె సమయంH" + + "కేప్ వెర్డె ప్రామాణిక సమయం<కేప్ వెర్డె వేసవి సమయం>చామర్రో ప్రామాణిక సమ" + + "యం\x1cచాథమ్ సమయం8చాథమ్ ప్రామాణిక సమయంBచాథమ్ పగటి వెలుతురు సమయం\x19చిలీ" + + " సమయం5చిలీ ప్రామాణిక సమయం)చిలీ వేసవి సమయం\x19చైనా సమయం5చైనా ప్రామాణిక సమ" + + "యం?చైనా పగటి వెలుతురు సమయం.చోయిబల్సాన్ సమయంJచోయిబల్సాన్ ప్రామాణిక సమయం" + + ">చోయిబల్సాన్ వేసవి సమయం5క్రిస్మస్ దీవి సమయం/కోకోస్ దీవుల సమయం%కొలంబియా స" + + "మయంAకొలంబియా ప్రామాణిక సమయం5కొలంబియా వేసవి సమయం)కుక్ దీవుల సమయంEకుక్ ద" + + "ీవుల ప్రామాణిక సమయంFకుక్ దీవుల అర్ధ వేసవి సమయం\x1fక్యూబా సమయం;క్యూబా ప" + + "్రామాణిక సమయంEక్యూబా పగటి వెలుతురు సమయం\x1fడేవిస్ సమయంMడ్యూమాంట్-డి’ఉర" + + "్విల్లే సమయం2తూర్పు తైమూర్ సమయం,ఈస్టర్ దీవి సమయంHఈస్టర్ దీవి ప్రామాణిక" + + " సమయం<ఈస్టర్ దీవి వేసవి సమయం%ఈక్వడార్ సమయంAసెంట్రల్ యూరోపియన్ సమయం]సెంట్" + + "రల్ యూరోపియన్ ప్రామాణిక సమయంQసెంట్రల్ యూరోపియన్ వేసవి సమయం;తూర్పు యూరో" + + "పియన్ సమయంWతూర్పు యూరోపియన్ ప్రామాణిక సమయంKతూర్పు యూరోపియన్ వేసవి సమయం" + + "Kసుదూర-తూర్పు యూరోపియన్ సమయం;పశ్చిమ యూరోపియన్ సమయంWపశ్చిమ యూరోపియన్ ప్రా" + + "మాణిక సమయంKపశ్చిమ యూరోపియన్ వేసవి సమయంAఫాక్\u200cల్యాండ్ దీవుల సమయం]ఫా" + + "క్\u200cల్యాండ్ దీవుల ప్రామాణిక సమయంQఫాక్\u200cల్యాండ్ దీవుల వేసవి సమయ" + + "ం\x19ఫిజీ సమయం5ఫిజీ ప్రామాణిక సమయం)ఫిజీ వేసవి సమయం2ఫ్రెంచ్ గయానా సమయంj" + + "ఫ్రెంచ్ దక్షిణ మరియు అంటార్కిటిక్ సమయం+గాలాపాగోస్ సమయం%గాంబియర్ సమయం%జ" + + "ార్జియా సమయంAజార్జియా ప్రామాణిక సమయం5జార్జియా వేసవి సమయం8గిల్బర్ట్ దీవ" + + "ుల సమయం;గ్రీన్\u200cవిచ్ సగటు సమయంJతూర్పు గ్రీన్\u200cల్యాండ్ సమయంfతూర" + + "్పు గ్రీన్\u200cల్యాండ్ ప్రామాణిక సమయంZతూర్పు గ్రీన్\u200cల్యాండ్ వేసవ" + + "ి సమయంJపశ్చిమ గ్రీన్\u200cల్యాండ్ సమయంfపశ్చిమ గ్రీన్\u200cల్యాండ్ ప్రా" + + "మాణిక సమయంZపశ్చిమ గ్రీన్\u200cల్యాండ్ వేసవి సమయం;గ్వామ్ ప్రామాణిక సమయం" + + "8గల్ఫ్ ప్రామాణిక సమయం\x1cగయానా సమయం;హవాయ్-అల్యూషియన్ సమయంWహవాయ్-అల్యూషియ" + + "న్ ప్రామాణిక సమయంaహవాయ్-అల్యూషియన్ పగటి వెలుతురు సమయం%హాంకాంగ్ సమయంAహా" + + "ంకాంగ్ ప్రామాణిక సమయం5హాంకాంగ్ వేసవి సమయం\x1fహోవ్డ్ సమయం;హోవ్డ్ ప్రామా" + + "ణిక సమయం/హోవ్డ్ వేసవి సమయం\"భారతదేశ సమయం9హిందూ మహా సముద్ర సమయం%ఇండోచైన" + + "ా సమయంDసెంట్రల్ ఇండోనేషియా సమయం>తూర్పు ఇండోనేషియా సమయం>పశ్చిమ ఇండోనేషి" + + "యా సమయం\x1cఇరాన్ సమయం8ఇరాన్ ప్రామాణిక సమయంBఇరాన్ పగటి వెలుతురు సమయం.ఇర" + + "్కుట్స్క్ సమయంJఇర్కుట్స్క్ ప్రామాణిక సమయం>ఇర్కుట్స్క్ వేసవి సమయం(ఇజ్రా" + + "యిల్ సమయంDఇజ్రాయిల్ ప్రామాణిక సమయంNఇజ్రాయిల్ పగటి వెలుతురు సమయం\x1cజపా" + + "న్ సమయం8జపాన్ ప్రామాణిక సమయంBజపాన్ పగటి వెలుతురు సమయంhపెట్రోపావ్లోవ్స్" + + "క్-కామ్ఛాట్స్కి సమయం\x84పెట్రోపావ్లోవ్స్క్-కామ్ఛాట్స్కి ప్రామాణిక సమయం" + + "xపెట్రోపావ్లోవ్స్క్-కామ్ఛాట్స్కి వేసవి సమయంAతూర్పు కజకి\u200cస్తాన్ సమయం" + + ">పశ్చిమ కజకిస్తాన్ సమయం\"కొరియన్ సమయం>కొరియన్ ప్రామాణిక సమయంHకొరియన్ పగట" + + "ి వెలుతురు సమయం%కోస్రాయి సమయం=క్రాస్నోయార్స్క్ సమయంYక్రాస్నోయార్స్క్ ప" + + "్రామాణిక సమయంMక్రాస్నోయార్స్క్ వేసవి సమయం1కిర్గిస్తాన్ సమయం\x19లంకా సమ" + + "యం)లైన్ దీవుల సమయం,లార్డ్ హోవ్ సమయంHలార్డ్ హోవ్ ప్రామాణిక సమయం9లార్డ్ " + + "హోవ్ పగటి సమయం\x1cమకావ్ సమయం8మకావ్ ప్రామాణిక సమయం,మకావ్ వేసవి సమయం8మాక" + + "్క్వారీ దీవి సమయం\x1fమగడాన్ సమయం;మగడాన్ ప్రామాణిక సమయం/మగడాన్ వేసవి సమ" + + "యం\"మలేషియా సమయం(మాల్దీవుల సమయం1మార్క్వేసాస్ సమయం2మార్షల్ దీవుల సమయం\"" + + "మారిషస్ సమయం>మారిషస్ ప్రామాణిక సమయం2మారిషస్ వేసవి సమయం\x1cమాసన్ సమయం;వ" + + "ాయువ్య మెక్సికో సమయంWవాయువ్య మెక్సికో ప్రామాణిక సమయంaవాయువ్య మెక్సికో " + + "పగటి వెలుతురు సమయం>మెక్సికన్ పసిఫిక్ సమయంZమెక్సికన్ పసిఫిక్ ప్రామాణిక " + + "సమయంdమెక్సికన్ పసిఫిక్ పగటి వెలుతురు సమయం)ఉలన్ బతోర్ సమయంEఉలన్ బతోర్ ప" + + "్రామాణిక సమయం9ఉలన్ బతోర్ వేసవి సమయం\x1fమాస్కో సమయం;మాస్కో ప్రామాణిక సమ" + + "యం/మాస్కో వేసవి సమయం%మయన్మార్ సమయం\x19నౌరు సమయం\x1fనేపాల్ సమయం8న్యూ కా" + + "లెడోనియా సమయంTన్యూ కాలెడోనియా ప్రామాణిక సమయంHన్యూ కాలెడోనియా వేసవి సమయ" + + "ం4న్యూజిల్యాండ్ సమయంPన్యూజిల్యాండ్ ప్రామాణిక సమయంZన్యూజిల్యాండ్ పగటి వ" + + "ెలుతురు సమయం@న్యూఫౌండ్\u200cల్యాండ్ సమయం\\న్యూఫౌండ్\u200cల్యాండ్ ప్రామ" + + "ాణిక సమయంfన్యూఫౌండ్\u200cల్యాండ్ పగటి వెలుతురు సమయం\x19నియూ సమయం2నార్ఫ" + + "ోక్ దీవి సమయంHఫెర్నాండో డి నొరోన్హా సమయంdఫెర్నాండో డి నొరోన్హా ప్రామాణ" + + "ిక సమయంXఫెర్నాండో డి నొరోన్హా వేసవి సమయంEఉత్తర మారియానా దీవుల సమయం7నోవ" + + "ోసిబిర్స్క్ సమయంSనోవోసిబిర్క్స్ ప్రామాణిక సమయంGనోవోసిబిర్స్క్ వేసవి సమ" + + "యం\"ఓమ్స్క్ సమయం>ఓమ్స్క్ ప్రామాణిక సమయం2ఓమ్స్క్ వేసవి సమయం+పాకిస్తాన్ " + + "సమయంGపాకిస్తాన్ ప్రామాణిక సమయం;పాకిస్తాన్ వేసవి సమయం\x1fపాలావ్ సమయం?పా" + + "పువా న్యూ గినియా సమయం\"పరాగ్వే సమయం>పరాగ్వే ప్రామాణిక సమయం2పరాగ్వే వేస" + + "వి సమయం\x19పెరూ సమయం5పెరూ ప్రామాణిక సమయం)పెరూ వేసవి సమయం+ఫిలిప్పైన్ సమ" + + "యంGఫిలిప్పైన్ ప్రామాణిక సమయం;ఫిలిప్పైన్ వేసవి సమయం5ఫినిక్స్ దీవుల సమయం" + + "dసెయింట్ పియెర్ మరియు మిక్వెలాన్ సమయం\x80సెయింట్ పియెర్ మరియు మిక్వెలాన్" + + " ప్రామాణిక సమయం\x87సెయింట్ పియర్ మరియు మిక్వెలాన్ పగటి వెలుతురు సమయం.పిట" + + "్\u200cకైర్న్ సమయం\x1fపొనేప్ సమయం+ప్యోంగాంగ్ సమయం+కిజిలోర్డా సమయంGకిజి" + + "లోర్డా ప్రామాణిక సమయం;కిజిలోర్డా వేసవి సమయం(రీయూనియన్ సమయం\x1fరొతేరా స" + + "మయం\"సఖాలిన్ సమయం>సఖాలిన్ ప్రామాణిక సమయం2సఖాలిన్ వేసవి సమయం\x1cసమారా స" + + "మయం8సమారా ప్రామాణిక సమయం,సమారా వేసవి సమయం\x1cసమోవా సమయం8సమోవా ప్రామాణి" + + "క సమయంBసమోవా పగటి వెలుతురు సమయం%సీషెల్స్ సమయంAసింగపూర్ ప్రామాణిక సమయం/" + + "సోలమన్ దీవుల సమయం8దక్షిణ జార్జియా సమయం%సూరినామ్ సమయం\x1fస్యోవా సమయం" + + "\x1cతహితి సమయం\x19తైపీ సమయం5తైపీ ప్రామాణిక సమయం?తైపీ పగటి వెలుతురు సమయం." + + "తజికిస్తాన్ సమయం%టోకెలావ్ సమయం\x1cటాంగా సమయం8టాంగా ప్రామాణిక సమయం,టాంగ" + + "ా వేసవి సమయం\x16చక్ సమయం@తుర్క్\u200cమెనిస్తాన్ సమయం\\తుర్క్\u200cమెని" + + "స్తాన్ ప్రామాణిక సమయంPతుర్క్\u200cమెనిస్తాన్ వేసవి సమయం\x1fతువాలు సమయం" + + "\"ఉరుగ్వే సమయం>ఉరుగ్వే ప్రామాణిక సమయం2ఉరుగ్వే వేసవి సమయం4ఉజ్బెకిస్తాన్ స" + + "మయంPఉజ్బెకిస్తాన్ ప్రామాణిక సమయంDఉజ్బెకిస్తాన్ వేసవి సమయం\x1cవనౌటు సమయ" + + "ం8వనౌటు ప్రామాణిక సమయం,వనౌటు వేసవి సమయం%వెనిజులా సమయం7వ్లాడివోస్టోక్ స" + + "మయంSవ్లాడివోస్టోక్ ప్రామాణిక సమయంGవ్లాడివోస్టోక్ వేసవి సమయం1వోల్గోగ్రా" + + "డ్ సమయంMవోల్గోగ్రాడ్ ప్రామాణిక సమయంAవోల్గోగ్రాడ్ వేసవి సమయం%వోస్టోక్ స" + + "మయం&వేక్ దీవి సమయంBవాలీస్ మరియు ఫుటునా సమయం+యాకుట్స్క్ సమయంGయాకుట్స్క్" + + " ప్రామాణిక సమయం;యాకుట్స్క్ వేసవి సమయం:యెకటెరిన్\u200cబర్గ్ సమయంVయెకటెరిన" + + "్\u200cబర్గ్ ప్రామాణిక సమయంJయెకటెరిన్\u200cబర్గ్ వేసవి సమయం" + +var bucket108 string = "" + // Size: 14447 bytes + "\x05Orara\x04Omuk\x09Okwamg’\x0aOdung’el\x06Omaruk\x12Omodok’king’ol\x05" + + "Ojola\x06Opedel\x0bOsokosokoma\x06Otibar\x06Olabor\x04Opoo\x09Nakaejuma" + + "\x0bNakaebarasa\x07Nakaare\x07Nakauni\x0cNakaung’on\x08Nakakany\x0aNakas" + + "abiti\x0aAkwota abe\x0bAkwota Aane\x0bAkwota auni\x10Akwota Aung’on\x09T" + + "aparachu\x06Ebongi\x04Enzi\x04Ekan\x04Elap\x05Ewiki\x06Aparan\x04Jaan" + + "\x04Lolo\x03Moi\x05TA/EB\x04Esaa\x08Isekonde\x0aЯнвар\x0cФеврал\x08Март" + + "\x0aАпрел\x06Май\x06Июн\x06Июл\x0cАвгуст\x0eСентябр\x0cОктябр\x0aНоябр" + + "\x0cДекабр\x06Май\x06Июн\x06Июл\x06Яшб\x06Дшб\x06Сшб\x06Чшб\x06Пшб\x06Ҷм" + + "ъ\x06Шнб\x0eЯкшанбе\x0eДушанбе\x0eСешанбе\x10Чоршанбе\x12Панҷшанбе\x0aҶ" + + "умъа\x0aШанбе\x03Ч1\x03Ч2\x03Ч3\x03Ч4\x0bпе. чо.\x0bпа. чо.\x16Пеш аз м" + + "илод\x06ПаМ\x06ПеМ\x19мабдаи таърих\x06сол\x0aчоряк\x05чр.\x06моҳ\x0aҳа" + + "фта\x03ҳ.\x06рӯз\x0aдирӯз\x0aимрӯз\x0aфардо\x13рӯзи ҳафта\x17пе. чо./па" + + ". чо.\x08соат\x05ст.\x0cдақиқа\x07дақ.\x0aсония\x07сон.\x19минтақаи вақт" + + "2Вақти ҷаҳонии ҳамоҳангсозӣ\x19Вақти марказӣ.Вақти стандартии марказӣ(Ва" + + "қти рӯзонаи марказӣ\x15Вақти шарқӣ*Вақти стандартии шарқӣ$Вақти рӯзонаи" + + " шарқӣ\x13Вақти кӯҳӣ(Вақти стандартии кӯҳӣ\"Вақти рӯзонаи кӯҳӣ Вақти Уён" + + "уси Ором7Вақти стандартии Уқёнуси Ором1Вақти рӯзонаи Уқёнуси Ором\x1dВа" + + "қти атлантикӣ2Вақти стандартии атлантикӣ,Вақти рӯзонаи атлантикӣ*Вақти " + + "аврупоии марказӣ?Вақти стандартии аврупоии марказӣ?Вақти тобистонаи авр" + + "упоии марказӣ&Вақти аврупоии шарқӣ;Вақти стандартии аврупоии шарқӣ;Вақт" + + "и тобистонаи аврупоии шарқӣ&Вақти аврупоии ғарбӣ;Вақти стандартии авруп" + + "оии ғарбӣ;Вақти тобистонаи аврупоии ғарбӣ\x1eБа вақти Гринвич\x1eพุทธศั" + + "กราช\x08พ.ศ.\x18EEEEที่ d MMMM G y\x0cจื่อ\x0cโฉ่ว\x0cอิ๋น\x0fเหม่า" + + "\x0cเฉิน\x0cซื่อ\x09อู้\x0cเว่ย\x0cเซิน\x0fโหย่ว\x06ซู\x0cฮ่าย\x12ลี่ชุน" + + "\x1bเจี่ยจื่อ\x15อี๋โฉ่ว\x18ปิ่งอิ๋น\x18ติงเหม่า\x15อู้เฉิน\x15จี่ซื่อ" + + "\x15เกิงอู้\x15ซินเว่ย\x1bเหรินเซิน\x1eกุ๋่ยโหย่ว\x15เจ่ียซู\x15อี๋ฮ่าย" + + "\x1eปิ๋ิ่งจื่อ\x15ติงโฉ่ว\x15อู้อิ๋น\x18จี๋เหม่า\x18เกิงเฉิน\x15ซินซื่อ" + + "\x18เหรินอู้\x18กุ่ยเว่ย\x1bเจี่ยเซิน\x18อี๋โหย่ว\x12ปิ่งซู\x15ติงฮ่าย" + + "\x15อู้จื่อ\x15จี๋โฉ่ว\x18เกิงอิ๋น\x18ซินเหม่า\x1bเหรินเฉิน\x15กุ่ยซ่อ" + + "\x18เจ่ียอู้\x15อี่เว่ย\x18ป่ิงเซิน\x18ติงโหย่ว\x0fอู้ซู\x15จี่ฮ่าย\x18เ" + + "กิงจื่อ\x15ซินโฉ่ว\x1bเหรินอิ๋น\x1bกุ๋ยเหม่า\x1bเจี่ยเฉิน\x15อี่ซ่ือ" + + "\x15ป่ิงอู้\x15ติงเว่ย\x15อู้เซิน\x18จี๋โหย่ว\x12เกิงซู\x15ซินฮ่าย\x1bเห" + + "รินจ่ือ\x1bกุ๋่ยโฉ่ว\x1bเจี่ยอิ๋น\x18อ๋ีเหม่า\x18ปิ่งเฉิน\x15ติงซื่อ" + + "\x12อู้อู้\x15จ่ีเว่ย\x18เกิงเซิน\x18ซินโหย่ว\x15เหรินซู\x18กุ่ยฮ่าย\x09" + + "หนู\x09วัว\x0cเสือ\x15กระต่าย\x0fมังกร\x06งู\x09ม้า\x09แพะ\x09ลิง\x1bไ" + + "ก่ตัวผู้\x0fสุนัข\x09หมู\x0eEEEE, U MMMM d\x0fเทาท์\x0cบาบา\x15ฮาเทอร์" + + "\x0fเคียฟ\x0cโทบา\x18อัมเชอร์\x18บารัมฮัท\x1bบาราเมาดา\x15บาชันส์\x12พาโ" + + "อนา\x0fอีเปป\x0fเมสรา\x0cนาซี\x1bเมสเคอเรม\x12เตเกมท\x12เฮดาร์\x15ทาฮ์" + + "ซัส\x0fเทอร์\x15เยคาทิท\x15เมกาบิต\x18เมียเซีย\x12เจนบอต\x0cเซเน\x0fฮั" + + "มเล\x0fเนแฮซ\x15พากูเมน\x0ad MMMM G y\x09d MMM G y\x08ม.ค.\x08ก.พ.\x0b" + + "มี.ค.\x0bเม.ย.\x08พ.ค.\x0bมิ.ย.\x08ก.ค.\x08ส.ค.\x08ก.ย.\x08ต.ค.\x08พ.ย" + + ".\x08ธ.ค.\x12มกราคม\x1eกุมภาพันธ์\x12มีนาคม\x12เมษายน\x15พฤษภาคม\x18มิถุ" + + "นายน\x15กรกฎาคม\x15สิงหาคม\x15กันยายน\x12ตุลาคม\x1bพฤศจิกายน\x15ธันวาค" + + "ม\x07อา.\x04จ.\x04อ.\x04พ.\x07พฤ.\x04ศ.\x04ส.\x06อา\x03จ\x03อ\x03พ\x06" + + "พฤ\x03ศ\x03ส\x1eวันอาทิตย์\x1bวันจันทร์\x1bวันอังคาร\x12วันพุธ!วันพฤหั" + + "สบดี\x18วันศุกร์\x18วันเสาร์\x14ไตรมาส 1\x14ไตรมาส 2\x14ไตรมาส 3\x14ไต" + + "รมาส 4\x1bเที่ยงคืน\x1eก่อนเที่ยง\x12เที่ยง\x1eหลังเที่ยง\x1bในตอนเช้า" + + "\x1bในตอนบ่าย\x0cบ่าย\x1bในตอนเย็น\x09ค่ำ\x15กลางคืน\x0cเช้า\x0cเย็น\x1e" + + "ช่วงเที่ยง6ปีก่อนคริสต์ศักราช-ก่อนสามัญศักราช$คริสต์ศักราช!สามัญศักราช" + + "\x1bปีก่อน ค.ศ.\x0cก.ส.ศ.\x08ค.ศ.\x08ส.ศ.\x15ก่อน ค.ศ.?H นาฬิกา mm นาที " + + "ss วินาที zzzzТөньяк Америка гадәти үзәк вакыты<Төн" + + "ьяк Америка җәйге үзәк вакыты9Төньяк Америка көнчыгыш вакытыFТөньяк Аме" + + "рика гадәти көнчыгыш вакытыDТөньяк Америка җәйге көнчыгыш вакыты/Төньяк" + + " Америка тау вакыты<Төньяк Америка гадәти тау вакыты:Төньяк Америка җәйг" + + "е тау вакыты:Төньяк Америка Тын океан вакытыGТөньяк Америка гадәти Тын " + + "океан вакытыEТөньяк Америка җәйге Тын океан вакыты9Төньяк Америка атлан" + + "тик вакытыFТөньяк Америка гадәти атлантик вакытыDТөньяк Америка җәйге а" + + "тлантик вакыты\"Үзәк Европа вакыты/гадәти Үзәк Европа вакыты-җәйге Үзәк" + + " Европа вакыты*Көнчыгыш Европа вакыты7гадәти Көнчыгыш Европа вакыты5җәйг" + + "е Көнчыгыш Европа вакыты*Көнбатыш Европа вакыты7гадәти Көнбатыш Европа " + + "вакыты5җәйге Көнбатыш Европа вакыты(Гринвич уртача вакыты\x06Asamas\x05" + + "Aynas\x06Asinas\x05Akras\x05Akwas\x07Asimwas\x09Asiḍyas\x03IA1\x03IA2" + + "\x03IA3\x03IA4\x0eImir adamsan 1\x0eImir adamsan 2\x0eImir adamsan 3\x0e" + + "Imir adamsan 4\x09Zdat azal\x0cḌeffir aza\x11Zdat Ɛisa (TAƔ)\x15Ḍeffir Ɛ" + + "isa (TAƔ)\x03ZƐ\x05ḌƐ\x08Asseggas\x04Ayur\x07Imalass\x09Assenaṭ\x04Assa" + + "\x06Asekka\x0dAss n Imalass\x15Zdat azal/Deffir azal\x07Tasragt\x06Tusda" + + "t\x06Tusnat\x1dبۇددا يىلنامەسى\x06Month1\x06Month2\x06Month3\x06Month4" + + "\x06Month5\x06Month6\x06Month7\x06Month8\x06Month9\x07Month10\x07Month11" + + "\x07Month12\x0cچاشقان\x08كالا\x0cيولۋاس\x0cتوشقان\x0eئەجدىھا\x0aيىلان" + + "\x06ئات\x06قوي\x0cمايمۇن\x08توخۇ\x06ئىت\x0aچوشقا\x11EEEE، MMMM d، U\x0aM" + + "MMM d، U\x09MMM d، U\x13EEEE، MMMM d، y G\x0cMMMM d، y G\x0bMMM d، y G" + + "\x09{1}، {0}\x0cيانۋار\x0cفېۋرال\x08مارت\x0cئاپرېل\x06ماي\x0aئىيۇن\x0aئى" + + "يۇل\x0eئاۋغۇست\x10سېنتەبىر\x10ئۆكتەبىر\x0eنويابىر\x0eدېكابىر\x04يە\x04د" + + "ۈ\x04سە\x04چا\x04پە\x04جۈ\x04شە\x10يەكشەنبە\x0eدۈشەنبە\x10سەيشەنبە\x10چ" + + "ارشەنبە\x10پەيشەنبە\x08جۈمە\x0aشەنبە\x0c1-پەسىل\x0c2-پەسىل\x0c3-پەسىل" + + "\x0c4-پەسىل\x19بىرىنچى پەسىل\x1bئىككىنچى پەسىل\x19ئۈچىنچى پەسىل\x19تۆتىن" + + "چى پەسىل\x05چ.ب\x05چ.ك\x17چۈشتىن بۇرۇن\x17چۈشتىن كېيىن!مىلادىيەدىن بۇرۇ" + + "ن\x10مىلادىيە\x0fy d-MMMM، EEEE\x0ad-MMMM، y\x09d-MMM، y\x10مۇھەررەم" + + "\x0aسەپەر\x1aرەبىئۇلئەۋۋەل\x18رەبىئۇلئاخىر\x1eجەمادىيەلئەۋۋەل\x1cجەمادىي" + + "ەلئاخىر\x0aرەجەب\x0cشەئبان\x0eرامىزان\x0cشەۋۋال\x10زۇلقەئدە\x10زۇلھەججە" + + "\x0eھىجرىيە\x13EEEE، d MMMM، y G\x0cd MMMM، y G\x0bd MMM، y G\x12EEEE, M" + + "MMM d، y G(جۇڭخۇا مىنگودىن بۇرۇن\x0aمىنگو\x06يىل\x13ئۆتكەن يىل\x0bبۇ يىل" + + "\x11كېلەر يىل\x1b{0} يىلدىن كېيىن\x19{0} يىل ئىلگىرى\x06ئاي\x13ئۆتكەن ئا" + + "ي\x0bبۇ ئاي\x11كېلەر ئاي\x1b{0} ئايدىن كېيىن\x19{0} ئاي ئىلگىرى\x0aھەپت" + + "ە\x17ئۆتكەن ھەپتە\x0fبۇ ھەپتە\x15كېلەر ھەپتە\x1f{0} ھەپتىدىن كېيىن\x1d{" + + "0} ھەپتە ئىلگىرى\x06كۈن\x0eتۈنۈگۈن\x0aبۈگۈن\x08ئەتە\x1b{0} كۈندىن كېيىن" + + "\x19{0} كۈن ئىلگىرى\x19ھەپتە كۈنلىرى\x1dئۆتكەن يەكشەنبە\x15بۇ يەكشەنبە" + + "\x1bكېلەر يەكشەنبە\x1bئۆتكەن دۈشەنبە\x13بۇ دۈشەنبە\x19كېلەر دۈشەنبە\x1dئ" + + "ۆتكەن سەيشەنبە\x15بۇ سەيشەنبە\x1bكېلەر سەيشەنبە\x1dئۆتكەن چارشەنبە\x15ب" + + "ۇ چارشەنبە\x1bكېلەر چارشەنبە\x1dئۆتكەن پەيشەنبە\x15بۇ پەيشەنبە\x1bكېلەر" + + " پەيشەنبە\x15ئۆتكەن جۈمە\x0dبۇ جۈمە\x13كېلەر جۈمە\x17ئۆتكەن شەنبە\x0fبۇ " + + "شەنبە\x15كېلەر شەنبە/چۈشتىن بۇرۇن/چۈشتىن كېيىن\x0aسائەت\x1f{0} سائەتتىن" + + " كېيىن\x1d{0} سائەت ئىلگىرى\x0aمىنۇت\x1f{0} مىنۇتتىن كېيىن\x1d{0} مىنۇت " + + "ئىلگىرى\x0cسېكۇنت!{0} سېكۇنتتىن كېيىن\x1f{0} سېكۇنت ئىلگىرى\x17ۋاقىت را" + + "يونى\x0e{0} ۋاقتى\x1b{0} يازلىق ۋاقتى!{0} ئۆلچەملىك ۋاقتى(ئەنگلىيە يازل" + + "ىق ۋاقتى(ئىرېلاند يازلىق ۋاقتى\x15ئاكرې ۋاقتى(ئاكرې ئۆلچەملىك ۋاقتى\"ئا" + + "كرى يازلىق ۋاقتى!ئافغانىستان ۋاقتى(ئوتتۇرا ئافرىقا ۋاقتى&شەرقىي ئافرىقا" + + " ۋاقتى;جەنۇبىي ئافرىقا ئۆلچەملىك ۋاقتى&غەربىي ئافرىقا ۋاقتى9غەربىي ئافرى" + + "قا ئۆلچەملىك ۋاقتى3غەربىي ئافرىقا يازلىق ۋاقتى\x1bئالياسكا ۋاقتى.ئالياس" + + "كا ئۆلچەملىك ۋاقتى(ئالياسكا يازلىق ۋاقتى\x19ئالمۇتا ۋاقتى,ئالمۇتا ئۆلچە" + + "ملىك ۋاقتى&ئالمۇتا يازلىق ۋاقتى\x19ئامازون ۋاقتى,ئامازون ئۆلچەملىك ۋاقت" + + "ى&ئامازون يازلىق ۋاقتى$ئوتتۇرا قىسىم ۋاقتى7ئوتتۇرا قىسىم ئۆلچەملىك ۋاقت" + + "ى1ئوتتۇرا قىسىم يازلىق ۋاقتى\"شەرقىي قىسىم ۋاقتى5شەرقىي قىسىم ئۆلچەملىك" + + " ۋاقتى/شەرقىي قىسىم يازلىق ۋاقتى\x11تاغ ۋاقتى$تاغ ئۆلچەملىك ۋاقتى\x1eتاغ" + + " يازلىق ۋاقتى تىنچ ئوكيان ۋاقتى3تىنچ ئوكيان ئۆلچەملىك ۋاقتى-تىنچ ئوكيان " + + "يازلىق ۋاقتى\x19ئانادىر ۋاقتى,ئانادىر ئۆلچەملىك ۋاقتى&ئانادىر يازلىق ۋا" + + "قتى\x17ئاقتاي ۋاقتى*ئاقتاي ئۆلچەملىك ۋاقتى$ئاقتاي يازلىق ۋاقتى\x19ئاقتۆ" + + "بە ۋاقتى,ئاقتۆبە ئۆلچەملىك ۋاقتى&ئاقتۆبە يازلىق ۋاقتى\x15ئەرەب ۋاقتى(ئە" + + "رەب ئۆلچەملىك ۋاقتى\"ئەرەب يازلىق ۋاقتى\x1fئارگېنتىنا ۋاقتى2ئارگېنتىنا " + + "ئۆلچەملىك ۋاقتى,ئارگېنتىنا يازلىق ۋاقتى,غەربىي ئارگېنتىنا ۋاقتى?غەربىي " + + "ئارگېنتىنا ئۆلچەملىك ۋاقتى9غەربىي ئارگېنتىنا يازلىق ۋاقتى\x1dئەرمېنىيە " + + "ۋاقتى0ئەرمېنىيە ئۆلچەملىك ۋاقتى*ئەرمېنىيە يازلىق ۋاقتى*ئاتلانتىك ئوكيان" + + " ۋاقتى=ئاتلانتىك ئوكيان ئۆلچەملىك ۋاقتى7ئاتلانتىك ئوكيان يازلىق ۋاقتى;ئا" + + "ۋسترالىيە ئوتتۇرا قىسىم ۋاقتىNئاۋسترالىيە ئوتتۇرا قىسىم ئۆلچەملىك ۋاقتى" + + "Hئاۋسترالىيە ئوتتۇرا قىسىم يازلىق ۋاقتىHئاۋسترالىيە ئوتتۇرا غەربىي قىسىم" + + " ۋاقتى]ئاۋستىرالىيە ئوتتۇرا غەربىي قىسىم ئۆلچەملىك ۋاقتىUئاۋسترالىيە ئوت" + + "تۇرا غەربىي قىسىم يازلىق ۋاقتى9ئاۋسترالىيە شەرقىي قىسىم ۋاقتىLئاۋسترالى" + + "يە شەرقىي قىسىم ئۆلچەملىك ۋاقتىFئاۋسترالىيە شەرقىي قىسىم يازلىق ۋاقتى9ئ" + + "اۋسترالىيە غەربىي قىسىم ۋاقتىLئاۋسترالىيە غەربىي قىسىم ئۆلچەملىك ۋاقتىF" + + "ئاۋسترالىيە غەربىي قىسىم يازلىق ۋاقتى!ئەزەربەيجان ۋاقتى4ئەزەربەيجان ئۆل" + + "چەملىك ۋاقتى.ئەزەربەيجان يازلىق ۋاقتى\x15ئازور ۋاقتى(ئازور ئۆلچەملىك ۋا" + + "قتى\"ئازور يازلىق ۋاقتى\x1bباڭلادىش ۋاقتى.باڭلادىش ئۆلچەملىك ۋاقتى(باڭل" + + "ادىش يازلىق ۋاقتى\x15بۇتان ۋاقتى\x1bبولىۋىيە ۋاقتى\x1fبىرازىلىيە ۋاقتى2" + + "بىرازىلىيە ئۆلچەملىك ۋاقتى,بىرازىلىيە يازلىق ۋاقتى.بىرۇنىي دارۇسسالام ۋ" + + "اقتى\"يېشىل تۇمشۇق ۋاقتى5يېشىل تۇمشۇق ئۆلچەملىك ۋاقتى/يېشىل تۇمشۇق يازل" + + "ىق ۋاقتى\x15كاسېي ۋاقتى,چاموررو ئۆلچەملىك ۋاقتى\x15چاتام ۋاقتى(چاتام ئۆ" + + "لچەملىك ۋاقتى\"چاتام يازلىق ۋاقتى\x13چىلى ۋاقتى&چىلى ئۆلچەملىك ۋاقتى چى" + + "لى يازلىق ۋاقتى\x15جۇڭگو ۋاقتى(جۇڭگو ئۆلچەملىك ۋاقتى\"جۇڭگو يازلىق ۋاقت" + + "ى\x1dچويبالسان ۋاقتى0چويبالسان ئۆلچەملىك ۋاقتى*چويبالسان يازلىق ۋاقتى*ر" + + "وژدېستۋو ئارىلى ۋاقتى\"كوكۇس ئارىلى ۋاقتى\x1dكولومبىيە ۋاقتى0كولومبىيە " + + "ئۆلچەملىك ۋاقتى*كولومبىيە يازلىق ۋاقتى$كۇك ئاراللىرى ۋاقتى7كۇك ئاراللىر" + + "ى ئۆلچەملىك ۋاقتى<كۇك ئاراللىرى يېرىم يازلىق ۋاقتى\x13كۇبا ۋاقتى&كۇبا ئ" + + "ۆلچەملىك ۋاقتى كۇبا يازلىق ۋاقتى\x15داۋىس ۋاقتى$دۇمونت-دۇرۋىل ۋاقتى\"شە" + + "رقىي تىمور ۋاقتى$ئېستېر ئارىلى ۋاقتى;پاسكاليا ئارىلى ئۆلچەملىك ۋاقتى1ئې" + + "ستېر ئارىلى يازلىق ۋاقتى\x1bئېكۋادور ۋاقتى(ئوتتۇرا ياۋروپا ۋاقتى;ئوتتۇر" + + "ا ياۋروپا ئۆلچەملىك ۋاقتى5ئوتتۇرا ياۋروپا يازلىق ۋاقتى&شەرقىي ياۋروپا ۋ" + + "اقتى9شەرقىي ياۋروپا ئۆلچەملىك ۋاقتى3شەرقىي ياۋروپا يازلىق ۋاقتى&غەربىي " + + "ياۋروپا ۋاقتى9غەربىي ياۋروپا ئۆلچەملىك ۋاقتى3غەربىي ياۋروپا يازلىق ۋاقت" + + "ى.فالكلاند ئاراللىرى ۋاقتىAفالكلاند ئاراللىرى ئۆلچەملىك ۋاقتى;فالكلاند " + + "ئاراللىرى يازلىق ۋاقتى\x13فىجى ۋاقتى&فىجى ئۆلچەملىك ۋاقتى فىجى يازلىق ۋ" + + "اقتىCفىرانسىيەگە قاراشلىق گىۋىيانا ۋاقتى]فىرانسىيەگە قاراشلىق جەنۇبىي ۋ" + + "ە ئانتاركتىكا ۋاقتى\x1dگالاپاگوس ۋاقتى\x1bگامبىيېر ۋاقتى\x1bگىرۇزىيە ۋا" + + "قتى.گىرۇزىيە ئۆلچەملىك ۋاقتى(گىرۇزىيە يازلىق ۋاقتى,گىلبېرت ئاراللىرى ۋا" + + "قتى\x1bگىرىنۋىچ ۋاقتى*شەرقىي گىرېنلاند ۋاقتى=شەرقىي گىرېنلاند ئۆلچەملىك" + + " ۋاقتى7شەرقىي گىرېنلاند يازلىق ۋاقتى*غەربىي گىرېنلاند ۋاقتى=غەربىي گىرېن" + + "لاند ئۆلچەملىك ۋاقتى7غەربىي گىرېنلاند يازلىق ۋاقتى(گۇئام ئۆلچەملىك ۋاقت" + + "ى&گۇلف ئۆلچەملىك ۋاقتى\x1bگىۋىيانا ۋاقتى$ھاۋاي-ئالېيۇت ۋاقتى7ھاۋاي-ئالې" + + "يۇت ئۆلچەملىك ۋاقتى1ھاۋاي-ئالېيۇت يازلىق ۋاقتى\x19شياڭگاڭ ۋاقتى,شياڭگاڭ" + + " ئۆلچەملىك ۋاقتى&شياڭگاڭ يازلىق ۋاقتى\x13خوۋد ۋاقتى&خوۋد ئۆلچەملىك ۋاقتى" + + " خوۋد يازلىق ۋاقتى0ھىندىستان ئۆلچەملىك ۋاقتى\"ھىندى ئوكيان ۋاقتى\x1eھىند" + + "ى چىنى ۋاقتى0ئوتتۇرا ھىندونېزىيە ۋاقتى.شەرقىي ھىندونېزىيە ۋاقتى.غەربىي " + + "ھىندونېزىيە ۋاقتى\x15ئىران ۋاقتى(ئىران ئۆلچەملىك ۋاقتى\"ئىران يازلىق ۋا" + + "قتى\x1bئىركۇتسك ۋاقتى.ئىركۇتسك ئۆلچەملىك ۋاقتى(ئىركۇتسك يازلىق ۋاقتى!ئى" + + "سرائىلىيە ۋاقتى4ئىسرائىلىيە ئۆلچەملىك ۋاقتى.ئىسرائىلىيە يازلىق ۋاقتى" + + "\x1bياپونىيە ۋاقتى.ياپونىيە ئۆلچەملىك ۋاقتى(ياپونىيە يازلىق ۋاقتى:پېتروپ" + + "اۋلوۋسك-كامچاتكسكى ۋاقتىMپېتروپاۋلوۋسك-كامچاتكسكى ئۆلچەملىك ۋاقتىGپېترو" + + "پاۋلوۋسك-كامچاتكسكى يازلىق ۋاقتى,شەرقىي قازاقىستان ۋاقتى,غەربىي قازاقىس" + + "تان ۋاقتى\x17كورىيە ۋاقتى*كورىيە ئۆلچەملىك ۋاقتى$كورىيە يازلىق ۋاقتى" + + "\x19كوسرائې ۋاقتى#كىراسنويارسك ۋاقتى6كىراسنويارسك ئۆلچەملىك ۋاقتى0كىراسن" + + "ويارسك يازلىق ۋاقتى!قىرغىزىستان ۋاقتى\x1eسىرى لانكا ۋاقتى&لاين ئاراللىر" + + "ى ۋاقتى\x1aلورد-خاي ۋاقتى-لورد-خاي ئۆلچەملىك ۋاقتى'لورد-خاي يازلىق ۋاقت" + + "ى\x17ئاۋمېن ۋاقتى*ئاۋمېن ئۆلچەملىك ۋاقتى$ئاۋمېن يازلىق ۋاقتى0ماككۇۋارى " + + "ئاراللىرى ۋاقتى\x19ماگادان ۋاقتى,ماگادان ئۆلچەملىك ۋاقتى&ماگادان يازلىق" + + " ۋاقتى\x1dمالايشىيا ۋاقتى\x19مالدىۋې ۋاقتى\x17ماركىز ۋاقتى*مارشال ئارالل" + + "ىرى ۋاقتى\x1fماۋرىتىئۇس ۋاقتى2ماۋرىتىئۇس ئۆلچەملىك ۋاقتى,ماۋرىتىئۇس ياز" + + "لىق ۋاقتى\x17ماۋسون ۋاقتى@مېكسىكا غەربىي شىمالىي قىسىم ۋاقتىSمېكسىكا غە" + + "ربىي شىمالىي قىسىم ئۆلچەملىك ۋاقتىMمېكسىكا غەربىي شىمالىي قىسىم يازلىق " + + "ۋاقتى/مېكسىكا تىنچ ئوكيان ۋاقتىBمېكسىكا تىنچ ئوكيان ئۆلچەملىك ۋاقتى<مېك" + + "سىكا تىنچ ئوكيان يازلىق ۋاقتى\x1fئۇلانباتور ۋاقتى2ئۇلانباتور ئۆلچەملىك " + + "ۋاقتى,ئۇلانباتور يازلىق ۋاقتى\x17موسكۋا ۋاقتى*موسكۋا ئۆلچەملىك ۋاقتى$مو" + + "سكۋا يازلىق ۋاقتى\x15بىرما ۋاقتى\x15ناۋرۇ ۋاقتى\x15نېپال ۋاقتى(يېڭى كال" + + "ېدونىيە ۋاقتى;يېڭى كالېدونىيە ئۆلچەملىك ۋاقتى5يېڭى كالېدونىيە يازلىق ۋا" + + "قتى&يېڭى زېلاندىيە ۋاقتى9يېڭى زېلاندىيە ئۆلچەملىك ۋاقتى3يېڭى زېلاندىيە " + + "يازلىق ۋاقتى#نىۋفوئۇنلاند ۋاقتى6نىۋفوئۇنلاند ئۆلچەملىك ۋاقتى0نىۋفوئۇنلا" + + "ند يازلىق ۋاقتى\x17نىيۇئې ۋاقتى,نورفولك ئاراللىرى ۋاقتى*فېرناندو-نورونخ" + + "ا ۋاقتى=فېرناندو-نورونخا ئۆلچەملىك ۋاقتى7فېرناندو-نورونخا يازلىق ۋاقتى=" + + "شىمالىي مارىيانا ئاراللىرى ۋاقتى!نوۋوسىبىرسك ۋاقتى4نوۋوسىبىرسك ئۆلچەملى" + + "ك ۋاقتى.نوۋوسىبىرسك يازلىق ۋاقتى\x15ئومسك ۋاقتى(ئومسك ئۆلچەملىك ۋاقتى\"" + + "ئومسك يازلىق ۋاقتى\x1bپاكىستان ۋاقتى.پاكىستان ئۆلچەملىك ۋاقتى(پاكىستان " + + "يازلىق ۋاقتى\x15پالاۋ ۋاقتى5پاپۇئا يېڭى گىۋىنېيەسى ۋاقتى\x1bپاراگۋاي ۋا" + + "قتى.پاراگۋاي ئۆلچەملىك ۋاقتى(پاراگۋاي يازلىق ۋاقتى\x13پېرۇ ۋاقتى&پېرۇ ئ" + + "ۆلچەملىك ۋاقتى پېرۇ يازلىق ۋاقتى\x1bفىلىپپىن ۋاقتى.فىلىپپىن ئۆلچەملىك ۋ" + + "اقتى(فىلىپپىن يازلىق ۋاقتى*فېنىكس ئاراللىرى ۋاقتى6ساينىت پىئېر ۋە مىكېل" + + "ون ۋاقتىIساينىت پىئېر ۋە مىكېلون ئۆلچەملىك ۋاقتىCساينىت پىئېر ۋە مىكېلو" + + "ن يازلىق ۋاقتى\x19پىتكاير ۋاقتى\x17پونپېي ۋاقتى\x1fقىزىلئوردا ۋاقتى2قىز" + + "ىلئوردا ئۆلچەملىك ۋاقتى,قىزىلئوردا يازلىق ۋاقتى\x1dرېئونىيون ۋاقتى\x17ر" + + "وتېرا ۋاقتى\x19ساخارىن ۋاقتى,ساخارىن ئۆلچەملىك ۋاقتى&ساخارىن يازلىق ۋاق" + + "تى\x17سامارا ۋاقتى*سامارا ئۆلچەملىك ۋاقتى$سامارا يازلىق ۋاقتى\x17ساموئا" + + " ۋاقتى*ساموئا ئۆلچەملىك ۋاقتى*سەمەرقەنت يازلىق ۋاقتى\x17سېيشېل ۋاقتى\x1b" + + "سىنگاپور ۋاقتى,سولومون ئاراللىرى ۋاقتى(جەنۇبىي جورجىيە ۋاقتى\x19سۇرىنام" + + " ۋاقتى\x13شوۋا ۋاقتى\x15تايتى ۋاقتى\x17تەيبېي ۋاقتى*تەيبېي ئۆلچەملىك ۋاق" + + "تى$تەيبېي يازلىق ۋاقتى\x1fتاجىكىستان ۋاقتى\x19توكېلاۋ ۋاقتى\x15تونگا ۋا" + + "قتى(تونگا ئۆلچەملىك ۋاقتى\"تونگا يازلىق ۋاقتى\x11چۇك ۋاقتى#تۈركمەنىستان" + + " ۋاقتى6تۈركمەنىستان ئۆلچەملىك ۋاقتى0تۈركمەنىستان يازلىق ۋاقتى\x17تۇۋالۇ " + + "ۋاقتى\x1bئۇرۇگۋاي ۋاقتى.ئۇرۇگۋاي ئۆلچەملىك ۋاقتى(ئۇرۇگۋاي يازلىق ۋاقتى!" + + "ئۆزبېكىستان ۋاقتى4ئۆزبېكىستان ئۆلچەملىك ۋاقتى.ئۆزبېكىستان يازلىق ۋاقتى" + + "\x1bۋانۇئاتۇ ۋاقتى.ۋانۇئاتۇ ئۆلچەملىك ۋاقتى(ۋانۇئاتۇ يازلىق ۋاقتى\x1fۋېن" + + "ېزۇئېلا ۋاقتى#ۋىلادىۋوستوك ۋاقتى6ۋىلادىۋوستوك ئۆلچەملىك ۋاقتى0ۋىلادىۋوس" + + "توك يازلىق ۋاقتى\x1dۋولگاگراد ۋاقتى0ۋولگاگراد ئۆلچەملىك ۋاقتى*ۋولگاگراد" + + " يازلىق ۋاقتى\x17ۋوستوك ۋاقتى ۋېيك ئارىلى ۋاقتى)ۋاللىس ۋە فۇتۇنا ۋاقتى" + + "\x19ياكۇتسك ۋاقتى,ياكۇتسك ئۆلچەملىك ۋاقتى&ياكۇتسك يازلىق ۋاقتى%يېكاتېرىن" + + "بۇرگ ۋاقتى8يېكاتېرىنبۇرگ ئۆلچەملىك ۋاقتى2يېكاتېرىنبۇرگ يازلىق ۋاقتى" + +var bucket114 string = "" + // Size: 8203 bytes + "\x07б. е.\x12мескерема\x0eтекемта\x0cхедара\x0eтахсаса\x08тера\x0eєкатіт" + + "а\x10мегабіта\x0cміязія\x0eгенбота\x08сене\x0aхамле\x0cнехасе\x10пагуме" + + "на\x0cтекемт\x16EEEE, d MMMM y 'р'. G\x10d MMMM y 'р'. G\x0c{1} 'о' {0}" + + "\x07січ.\x07лют.\x07бер.\x09квіт.\x09трав.\x09черв.\x07лип.\x09серп.\x07" + + "вер.\x09жовт.\x09лист.\x09груд.\x0aсічня\x0cлютого\x0eберезня\x0cквітня" + + "\x0cтравня\x0cчервня\x0aлипня\x0cсерпня\x0eвересня\x0cжовтня\x12листопад" + + "а\x0cгрудня\x06січ\x06лют\x06бер\x06кві\x06тра\x06чер\x06лип\x06сер\x06" + + "вер\x06жов\x06лис\x06гру\x0cсічень\x0aлютий\x10березень\x0eквітень\x0eт" + + "равень\x0eчервень\x0cлипень\x0eсерпень\x10вересень\x0eжовтень\x10листоп" + + "ад\x0eгрудень\x0cнеділя\x12понеділок\x10вівторок\x0cсереда\x0cчетвер" + + "\x10пʼятниця\x0cсубота\x10опівночі\x04дп\x12пополудні\x04пп\x0aранку\x0c" + + "вечора\x08ночі\x0cпівніч\x10полудень\x0aранок\x0aвечір\x06ніч\x16до наш" + + "ої ери\x16до нової ери\x11нашої ери\x11нової ери\x0cдо н. е.\x07н. е." + + "\x0bдо н.е.\x06н.е.\x14EEEE, d MMMM y 'р'.\x0ed MMMM y 'р'.\x0dd MMM y '" + + "р'.\x0aтішри\x12марчешван\x0eчисльов\x0aтебет\x0aшеват\x0aадар I\x08ада" + + "р\x0bадар II\x0aнісан\x06іар\x0aсиван\x0cтаммуз\x04аб\x08елул\x0cхешван" + + "\x0cкіслев\x0aтевет\x08шват\x06іяр\x04ав\x09чайт.\x09вайс.\x09джай.\x09а" + + "сад.\x09шрав.\x09бхад.\x07асв.\x07кар.\x07агр.\x09паус.\x07маг.\x09фаль" + + ".\x06мух\x06саф\x0aрабі I\x0bрабі II\x0aджум I\x0bджум II\x08радж\x08шаа" + + "б\x06рам\x06дав\x0cзу-ль-к\x0cзу-ль-х\x16Тайка (645–650)\x18Хакуті (650" + + "–671)\x18Хакухо (672–686)\x16Сютьо (686–701)\x16Тайхо (701–704)\x16Кей" + + "ун (704–708)\x14Вадо (708–715)\x16Рейкі (715–717)\x14Йоро (717–724)\x18" + + "Дзінгі (724–729)\x18Темпьо (729–749)#Темпьо-кампо (749–749)#Темпьо-сьох" + + "о (749–757)#Темпьо-ходзі (757–765)%Темпьо-дзінго (765–767)#Дзінго кейун" + + " (767–770)\x14Хокі (770–780)\x17Тен’о (781–782)\x18Енряку (782–806)\x16Д" + + "айдо (806–810)\x16Конін (810–824)\x18Тентьо (824–834)\x16Сьова (834–848" + + ")\x18Кадзьо (848–851)\x18Ніндзю (851–854)\x16Сайко (854–857)\x18Теннан (" + + "857–859)\x1aДзьоган (859–877)\x18Генкей (877–885)\x16Нінна (885–889)\x18" + + "Кампьо (889–898)\x18Сьотай (898–901)\x14Енгі (901–923)\x16Ентьо (923–93" + + "1)\x18Сьохей (931–938)\x18Тенгьо (938–947)\x1aТенряку (947–957)\x1aТенто" + + "ку (957–961)\x12Ова (961–964)\x14Кохо (964–968)\x14Анна (968–970)\x1aТе" + + "нроку (970–973)\x19Тен’ен (973–976)\x1aДзьоген (976–978)\x18Тенген (978" + + "–983)\x16Ейкан (983–985)\x16Канна (985–987)\x14Ейен (987–989)\x14Ейсо " + + "(989–990)\x1aСьоряку (990–995)\x1aТьотоку (995–999)\x17Тьохо (999–1004)" + + "\x18Канко (1004–1012)\x18Тьова (1012–1017)\x1aКаннін (1017–1021)\x18Дзіа" + + "н (1021–1024)\x1aМандзю (1024–1028)\x1aТьоген (1028–1037)\x1cТьоряку (1" + + "037–1040)\x18Тьокю (1040–1044)\x1cКантоку (1044–1046)\x18Ейсьо (1046–105" + + "3)\x18Тенгі (1053–1058)\x18Кохей (1058–1065)\x1cДзіряку (1065–1069)\x16Е" + + "нкю (1069–1074)\x18Сьохо (1074–1077)\x1cСьоряку (1077–1081)\x16Ейхо (10" + + "81–1084)\x18Отоку (1084–1087)\x1aКандзі (1087–1094)\x16Кахо (1094–1096)" + + "\x18Ейсьо (1096–1097)\x1cСьотоку (1097–1099)\x16Кова (1099–1104)\x1aТьод" + + "зі (1104–1106)\x1aКадзьо (1106–1108)\x1aТеннін (1108–1110)\x1bТен’ей (1" + + "110–1113)\x16Ейкю (1113–1118)\x1bГен’ей (1118–1120)\x16Хоан (1120–1124)" + + "\x1aТендзі (1124–1126)\x1aДайдзі (1126–1131)\x1aТенсьо (1131–1132)\x1aТь" + + "осьо (1132–1135)\x16Хоен (1135–1141)\x18Ейдзі (1141–1142)\x18Кодзі (114" + + "2–1144)\x18Теньо (1144–1145)\x16Кюан (1145–1151)\x1aНімпей (1151–1154)" + + "\x18Кюдзю (1154–1156)\x18Хоген (1156–1159)\x1aХейдзі (1159–1160)\x1aЕйря" + + "ку (1160–1161)\x14Охо (1161–1163)\x1aТьокан (1163–1165)\x18Ейман (1165–" + + "1166)\x1bНін’ан (1166–1169)\x14Као (1169–1171)\x18Сьоан (1171–1175)\x18А" + + "нген (1175–1177)\x1aДзісьо (1177–1181)\x16Йова (1181–1182)\x18Дзюей (11" + + "82–1184)\x1cГенряку (1184–1185)\x1aБундзі (1185–1190)\x18Кенкю (1190–119" + + "9)\x1aСьодзі (1199–1201)\x1aКеннін (1201–1204)\x18Генкю (1204–1206)\x1bК" + + "ен’ей (1206–1207)\x1aСьоген (1207–1211)\x1cКенряку (1211–1213)\x18Кенпо" + + " (1213–1219)\x1aДзьокю (1219–1222)\x18Дзьоо (1222–1224)\x1aГеннін (1224–" + + "1225)\x1aКароку (1225–1227)\x18Антей (1227–1229)\x18Канкі (1229–1232)" + + "\x18Дзюей (1232–1233)\x1cТемпуку (1233–1234)\x1cБунряку (1234–1235)\x18К" + + "атей (1235–1238)\x1cРякунін (1238–1239)\x17Ен’о (1239–1240)\x1aНіндзі (" + + "1240–1243)\x1aКанген (1243–1247)\x1aХейдзі (1247–1249)\x1aКентьо (1249–1" + + "256)\x18Коген (1256–1257)\x18Сьока (1257–1259)\x1aСьоген (1259–1260)\x19" + + "Бун’о (1260–1261)\x18Котьо (1261–1264)\x1bБун’ей (1264–1275)\x1aКендзі " + + "(1275–1278)\x16Коан (1278–1288)\x16Сьоо (1288–1293)\x18Ейнін (1293–1299)" + + "\x18Сьоан (1299–1302)\x1aКенген (1302–1303)\x18Каген (1303–1306)\x1cТоку" + + "дзі (1306–1308)\x18Енкей (1308–1311)\x16Отьо (1311–1312)\x18Сьова (1312" + + "–1317)\x18Бумпо (1317–1319)\x19Ген’о (1319–1321)\x1aГенкьо (1321–1324)" + + "\x18Сьотю (1324–1326)\x1aКарекі (1326–1329)\x1cГентоку (1329–1331)\x18Ге" + + "нко (1331–1334)\x18Кемму (1334–1336)\x18Ейген (1336–1340)\x1aКококу (13" + + "40–1346)\x1aСьохей (1346–1370)\x1cКентоку (1370–1372)\x18Бунтю (1372–137" + + "5)\x1aТендзю (1375–1379)\x1aКоряку (1379–1381)\x16Кова (1381–1384)\x18Ге" + + "нтю (1384–1392)\x1cМейтоку (1384–1387)\x18Какей (1387–1389)\x14Коо (138" + + "9–1390)\x1cМейтоку (1390–1394)\x14Оей (1394–1428)\x1aСьотьо (1428–1429)" + + "\x18Ейкьо (1429–1441)\x1aКакіцу (1441–1444)\x1aБуннан (1444–1449)\x1aХот" + + "оку (1449–1452)\x1cКьотоку (1452–1455)\x18Косьо (1455–1457)\x1cТьороку " + + "(1457–1460)\x1aКансьо (1460–1466)\x1aБунсьо (1466–1467)\x16Онін (1467–14" + + "69)\x1aБуммей (1469–1487)\x1aТьокьо (1487–1489)\x1aЕнтоку (1489–1492)" + + "\x16Мейо (1492–1501)\x18Бункі (1501–1504)\x18Ейсьо (1504–1521)\x18Тайей " + + "(1521–1528)\x1cКьороку (1528–1532)\x1aТеммон (1532–1555)\x18Кодзі (1555–" + + "1558)\x1aЕйроку (1558–1570)\x18Генкі (1570–1573)\x1aТенсьо (1573–1592)" + + "\x1cБунроку (1592–1596)\x1aКейтьо (1596–1615)\x18Генна (1615–1624)\x1bКа" + + "н’ей (1624–1644)\x18Сьохо (1644–1648)\x18Кейан (1648–1652)\x16Сьоо (165" + + "2–1655)\x1cМейряку (1655–1658)\x1aМандзі (1658–1661)\x1aКамбун (1661–167" + + "3)\x16Емпо (1673–1681)\x18Тенва (1681–1684)\x1cДзьокьо (1684–1688)\x1cГе" + + "нроку (1688–1704)\x16Хоей (1704–1711)\x1cСьотоку (1711–1716)\x18Кьохо (" + + "1716–1736)\x1aГембун (1736–1741)\x18Канпо (1741–1744)\x18Енкьо (1744–174" + + "8)\x1bКан’ен (1748–1751)\x1aХоряку (1751–1764)\x18Мейва (1764–1772)\x19А" + + "н’ей (1772–1781)\x1aТеммей (1781–1789)\x1aКансей (1789–1801)\x18Кьова (" + + "1801–1804)\x18Бунка (1804–1818)\x1aБунсей (1818–1830)\x18Тенпо (1830–184" + + "4)\x16Кока (1844–1848)\x16Каей (1848–1854)\x18Ансей (1854–1860)\x1bМан’е" + + "н (1860–1861)\x18Бункю (1861–1864)\x1aГендзі (1864–1865)\x16Кейо (1865–" + + "1868)\x0cМейдзі\x0cТайсьо\x0aСьова\x0cХейсей\x07фар.\x07орд.\x07хор.\x06" + + "тір\x07мор.\x07шах.\x07мех.\x08абан\x08азер\x06дей\x07бах.\x07есф.\x12ф" + + "арвардін\x14ордібехешт\x0cхордад\x0cмордад\x10шахрівер\x08мехр\x0cбахма" + + "н\x0cесфанд\x06фар\x06орд\x06хор\x06мор\x06шах\x06мех\x06бах\x06есф\x03" + + "е.\x06рік\x0aторік\x13цього року\x1dнаступного року\x15через {0} рік" + + "\x17через {0} роки\x19через {0} років\x17через {0} року\x13{0} рік тому" + + "\x15{0} роки тому\x17{0} років тому\x15{0} року тому" + +var bucket115 string = "" + // Size: 23031 bytes + "\x03р.\x12через {0} р.\x10{0} р. тому\x0cза {0} р.!минулого кварталу\x1b" + + "цього кварталу%наступного кварталу\x1b{0} квартал тому\x1d{0} квартали " + + "тому\x1f{0} кварталів тому\x1d{0} кварталу тому\x16минулого кв.\x10цьог" + + "о кв.\x1aнаступного кв.\x12{0} кв. тому\x0cмісяць\x1dминулого місяця" + + "\x17цього місяця!наступного місяця\x1bчерез {0} місяць\x1bчерез {0} міся" + + "ці\x1dчерез {0} місяців\x1bчерез {0} місяця\x19{0} місяць тому\x19{0} м" + + "ісяці тому\x1b{0} місяців тому\x19{0} місяця тому\x07міс.\x16через {0} " + + "міс.\x14{0} міс. тому\x10за {0} міс.\x0eтиждень\x1bминулого тижня\x15ць" + + "ого тижня\x1fнаступного тижня\x1dчерез {0} тиждень\x19через {0} тижні" + + "\x1bчерез {0} тижнів\x19через {0} тижня\x1b{0} тиждень тому\x17{0} тижні" + + " тому\x19{0} тижнів тому\x17{0} тижня тому\x15тиждень з {0}\x07тиж.\x16ч" + + "ерез {0} тиж.\x14{0} тиж. тому\x10за {0} тиж.\x1bтиждень місяця\x14тиж." + + " місяця\x12позавчора\x0aучора\x10сьогодні\x0cзавтра\x16післязавтра\x15{0" + + "} день тому\x13{0} дні тому\x15{0} днів тому\x13{0} дня тому\x12{0} дн. " + + "тому\x10{0} д. тому\x0a-{0} дн.\x11день року\x13день тижня\x15день міся" + + "ця\x1bминулої неділі\x15цієї неділі\x1fнаступної неділі\x1bчерез {0} не" + + "ділю\x1bчерез {0} неділі\x1bчерез {0} неділь\x19{0} неділю тому\x19{0} " + + "неділі тому\x19{0} неділь тому\x13минулої нд\x0dцієї нд\x17наступної нд" + + "\x0cмин. нд\x0eнаст. нд#минулого понеділка\x1dцього понеділка'наступного" + + " понеділка!через {0} понеділок!через {0} понеділки#через {0} понеділків!" + + "через {0} понеділка\x1f{0} понеділок тому\x1f{0} понеділки тому!{0} пон" + + "еділків тому\x1f{0} понеділка тому\x15минулого пн\x0fцього пн\x19наступ" + + "ного пн\x0cмин. пн\x0eнаст. пн!минулого вівторка\x1bцього вівторка%наст" + + "упного вівторка\x1fчерез {0} вівторок\x1fчерез {0} вівторки!через {0} в" + + "івторків\x1fчерез {0} вівторка\x1d{0} вівторок тому\x1d{0} вівторки том" + + "у\x1f{0} вівторків тому\x1d{0} вівторка тому\x15минулого вт\x0fцього вт" + + "\x19наступного вт\x0cмин. вт\x0eнаст. вт\x1bминулої середи\x15цієї серед" + + "и\x1fнаступної середи\x1bчерез {0} середу\x1bчерез {0} середи\x19через " + + "{0} серед\x19{0} середу тому\x19{0} середи тому\x17{0} серед тому\x13мин" + + "улої ср\x0dцієї ср\x17наступної ср\x0cмин. ср\x0eнаст. ср!минулого четв" + + "ерга\x1bцього четверга%наступного четверга\x1bчерез {0} четвер\x1fчерез" + + " {0} четверги!через {0} четвергів\x1fчерез {0} четверга\x19{0} четвер то" + + "му\x1d{0} четверги тому\x1f{0} четвергів тому\x1d{0} четверга тому\x15м" + + "инулого чт\x0fцього чт\x19наступного чт\x0cмин. чт\x0eнаст. чт\x1fминул" + + "ої пʼятниці\x19цієї пʼятниці#наступної пʼятниці\x1fчерез {0} пʼятницю" + + "\x1fчерез {0} пʼятниці\x1fчерез {0} пʼятниць\x1d{0} пʼятницю тому\x1d{0}" + + " пʼятниці тому\x1d{0} пʼятниць тому\x13минулої пт\x0dцієї пт\x17наступно" + + "ї пт\x0cмин. пт\x0eнаст. пт\x1bминулої суботи\x15цієї суботи\x1fнаступн" + + "ої суботи\x1bчерез {0} суботу\x1bчерез {0} суботи\x19через {0} субот" + + "\x19{0} суботу тому\x19{0} суботи тому\x17{0} субот тому\x13минулої сб" + + "\x0dцієї сб\x17наступної сб\x0cмин. сб\x0eнаст. сб\x09дп/пп\x15цієї годи" + + "ни\x1bчерез {0} годину\x1bчерез {0} години\x19через {0} годин\x19{0} го" + + "дину тому\x19{0} години тому\x17{0} годин тому\x13{0} год тому\x0fза {0" + + "} год\x0eхвилина\x17цієї хвилини\x1dчерез {0} хвилину\x1dчерез {0} хвили" + + "ни\x1bчерез {0} хвилин\x1b{0} хвилину тому\x1b{0} хвилини тому\x19{0} х" + + "вилин тому\x13через {0} хв\x11{0} хв тому\x0dза {0} хв\x0aзараз\x1b{0} " + + "секунду тому\x1b{0} секунди тому\x19{0} секунд тому\x11через {0} с\x0f{" + + "0} с тому\x0bза {0} с\x17часовий пояс\x0bчас: {0}\x19час: {0}, літній#ча" + + "с: {0}, стандартний?за всесвітнім координованим часом?за літнім часом у" + + " Великій Британії0за літнім часом в Ірландії\x10час: Акрі(час: Акрі, ста" + + "ндартний\x1eчас: Акрі, літній)за часом в Афганістані<за центральноафрик" + + "анським часом4за східноафриканським часом8за південноафриканським часом" + + "6за західноафриканським часомMза західноафриканським стандартним часомCз" + + "а західноафриканським літнім часом!за часом на Алясці8за стандартним ча" + + "сом на Алясці.за літнім часом на Алясці%за часом на Амазонці<за стандар" + + "тним часом на Амазонці2за літнім часом на АмазонціQза північноамериканс" + + "ьким центральним часомhза північноамериканським центральним стандартним" + + " часом^за північноамериканським центральним літнім часомIза північноамер" + + "иканським східним часом`за північноамериканським східним стандартним ча" + + "сомVза північноамериканським східним літнім часомKза північноамерикансь" + + "ким гірським часомbза північноамериканським гірським стандартним часомX" + + "за північноамериканським гірським літнім часомWза північноамериканським" + + " тихоокеанським часомnза північноамериканським тихоокеанським стандартни" + + "м часомdза північноамериканським тихоокеанським літнім часом\x14час: Ан" + + "адир,час: Анадир, стандартний\"час: Анадир, літній\x1bза часом в Апіа2з" + + "а стандартним часом в Апіа(за літнім часом в Апіа\"за арабським часом9з" + + "а арабським стандартним часом/за арабським літнім часом*за аргентинськи" + + "м часомAза стандартним аргентинським часом7за літнім аргентинським часо" + + "м8за західноаргентинським часомOза стандартним західноаргентинським час" + + "омJза літнім за західноаргентинським часом&за вірменським часом=за вірм" + + "енським стандартним часом3за вірменським літнім часом&за атлантичним ча" + + "сом=за атлантичним стандартним часом3за атлантичним літнім часом@за цен" + + "тральноавстралійським часомWза стандартним центральноавстралійським час" + + "омMза літнім центральноавстралійським часомQза центральнозахідним австр" + + "алійським часомhза стандартним центральнозахідним австралійським часом^" + + "за літнім центральнозахідним австралійським часом8за східноавстралійськ" + + "им часомOза стандартним східноавстралійським часомEза літнім східноавст" + + "ралійським часом:за західноавстралійським часомQза стандартним західноа" + + "встралійським часомGза літнім західноавстралійським часом+за часом в Аз" + + "ербайджаніBза стандартним часом в Азербайджані8за літнім часом в Азерба" + + "йджані8за часом на Азорських ОстровахOза стандартним часом на Азорських" + + " ОстровахEза літнім часом на Азорських Островах%за часом у Бангладеш<за " + + "стандартним часом у Бангладеш2за літнім часом у Бангладеш\x1fза часом у" + + " Бутані(за болівійським часом(за бразильським часом?за стандартним брази" + + "льським часом5за літнім бразильським часом\x1fза часом у Брунеї9за часо" + + "м на островах Кабо-ВердеPза стандартним часом на островах Кабо-ВердеFза" + + " літнім часом на островах Кабо-ВердеOза часом на Північних Маріанських о" + + "стровах4за часом на архіпелазі ЧатемKза стандартним часом на архіпелазі" + + " ЧатемAза літнім часом на архіпелазі Чатем$за чилійським часом;за станда" + + "ртним чилійським часом1за літнім чилійським часом$за китайським часом;з" + + "а китайським стандартним часом1за китайським літнім часом'за часом у Чо" + + "йбалсані>за стандартним часом у Чойбалсані4за літнім часом у Чойбалсані" + + "0за часом на острові Різдва8за часом на Кокосових Островах*за колумбійсь" + + "ким часомAза стандартним колумбійським часом7за літнім колумбійським ча" + + "сом.за часом на Островах КукаEза стандартним часом на Островах Кука;за " + + "літнім часом на Островах Кука\x1dза часом на Кубі4за стандартним часом " + + "на Кубі*за літнім часом на Кубі\x1dза часом у Девіс.за часом у Дюмон дʼ" + + "Юрвіль0за часом у Східному Тиморі.за часом на острові ПасхиEза стандарт" + + "ним часом на острові Пасхи;за літнім часом на острові Пасхи#за часом в " + + "Еквадорі<за центральноєвропейським часомSза центральноєвропейським стан" + + "дартним часомIза центральноєвропейським літнім часом4за східноєвропейсь" + + "ким часомKза східноєвропейським стандартним часомAза східноєвропейським" + + " літнім часомCза далекосхідним європейським часом6за західноєвропейським" + + " часомMза західноєвропейським стандартним часомCза західноєвропейським л" + + "ітнім часом@за часом на Фолклендських ОстровахWза стандартним часом на " + + "Фолклендських ОстровахMза літнім часом на Фолклендських Островах\x1fза " + + "часом на Фіджі6за стандартним часом на Фіджі,за літнім часом на Фіджі3з" + + "а часом Французької Гвіаниoза часом на Французьких Південних і Антаркти" + + "чних територіях$за часом Ґалапаґосу0за часом на острові Ґамбʼє\x1fза ча" + + "сом у Грузії6за стандартним часом у Грузії,за літнім часом у Грузії6за " + + "часом на островах Гілберта\x17за Ґрінвічем6за східним часом у Ґренланді" + + "їMза стандартним східним часом у ҐренландіїCза літнім східним часом у Ґ" + + "ренландії8за західним часом у ҐренландіїOза стандартним західним часом " + + "у ҐренландіїEза літнім західним часом у Ґренландії,за часом на острові " + + "Гуам-за часом Перської затоки\x1dза часом у Ґаяні7за гавайсько-алеутськ" + + "им часомNза стандартним гавайсько-алеутським часомDза літнім гавайсько-" + + "алеутським часом#за часом у Гонконзі:за стандартним часом у Гонконзі0за" + + " літнім часом у Гонконзі\x1dза часом у Ховді4за стандартним часом у Ховд" + + "і*за літнім часом у Ховді;за індійським стандартним часом6за часом в Ін" + + "дійському Океані%за часом в Індокитаї@за центральноіндонезійським часом" + + "8за східноіндонезійським часом:за західноіндонезійським часом\"за ірансь" + + "ким часом9за іранським стандартним часом/за іранським літнім часом$за і" + + "ркутським часом;за іркутським стандартним часом1за іркутським літнім ча" + + "сом(за ізраїльським часом?за ізраїльським стандартним часом5за ізраїльс" + + "ьким літнім часом\"за японським часом9за японським стандартним часом/за" + + " японським літнім часом&за камчатським часом=за камчатським стандартним " + + "часом3за камчатським літнім часом6за східним часом у Казахстані8за захі" + + "дним часом у Казахстані$за корейським часом;за корейським стандартним ч" + + "асом1за корейським літнім часом0за часом на острові Косрае*за красноярс" + + "ьким часомAза красноярським стандартним часом7за красноярським літнім ч" + + "асом)за часом у Киргизстані\x12час: Ланка,за часом на острові Лайн3за ч" + + "асом на острові Лорд-ХауJза стандартним часом на острові Лорд-Хау@за лі" + + "тнім часом на острові Лорд-Хау4за часом на острові Маккуорі(за магаданс" + + "ьким часом?за магаданським стандартним часом5за магаданським літнім час" + + "ом#за часом у Малайзії'за часом на Мальдівах:за часом на Маркізьких ост" + + "ровах<за часом на Маршаллових Островах4за часом на острові МаврікійKза " + + "стандартним часом на острові МаврікійAза літнім часом на острові Маврік" + + "ій0за часом на станції МоусонBза північнозахідним часом у МексиціYза ст" + + "андартним північнозахідним часом у МексиціOза літнім північнозахідним ч" + + "асом у Мексиці>за тихоокеанським часом у МексиціUза стандартним тихооке" + + "анським часом у МексиціKза літнім тихоокеанським часом у Мексиці(за час" + + "ом в Улан-Баторі?за стандартним часом в Улан-Баторі5за літнім часом в У" + + "лан-Баторі&за московським часом=за московським стандартним часом3за мос" + + "ковським літнім часом\x1fза часом у Мʼянмі.за часом на острові Науру" + + "\x1fза часом у НепаліCза часом на островах Нової КаледоніїZза стандартни" + + "м часом на островах Нової КаледоніїPза літнім часом на островах Нової К" + + "аледонії.за часом у Новій ЗеландіїEза стандартним часом у Новій Зеланді" + + "ї;за літнім часом у Новій Зеландії<за часом на острові НьюфаундлендSза " + + "стандартним часом на острові Ньюфаундленд8за літнім часом у Ньюфаундлен" + + "д,за часом на острові Ніуе2за часом на острові НорфолкNза часом на архі" + + "пелазі Фернанду-ді-Нороньяeза стандартним часом на архіпелазі Фернанду-" + + "ді-Норонья[за літнім часом на архіпелазі Фернанду-ді-Норонья,за новосиб" + + "ірським часомCза новосибірським стандартним часом9за новосибірським літ" + + "нім часом\x1eза омським часом5за омським стандартним часом+за омським л" + + "ітнім часом%за часом у Пакистані<за стандартним часом у Пакистані2за лі" + + "тнім часом у Пакистані.за часом на острові ПалауFза часом на островах П" + + "апуа-Нова Ґвінея*за параґвайським часомAза стандартним параґвайським ча" + + "сом7за літнім параґвайським часом\x1bза часом у Перу2за стандартним час" + + "ом у Перу(за літнім часом у Перу)за часом на Філіппінах@за стандартним " + + "часом на Філіппінах6за літнім часом на Філіппінах2за часом на островах " + + "ФеніксHза часом на островах Сен-П’єр і Мікелон_за стандартним часом на " + + "островах Сен-П’єр і МікелонUза літнім часом на островах Сен-П’єр і Міке" + + "лон4за часом на островах Піткерн0за часом на острові Понапе#за часом у " + + "Пхеньяні\x1aчас: Кизилорда2час: Кизилорда, стандартний(час: Кизилорда, " + + "літній4за часом на острові Реюньйон0за часом на станції Ротера(за сахал" + + "інським часом?за сахалінським стандартним часом5за сахалінським літнім " + + "часом$за самарським часом;за самарським стандартним часом1за самарським" + + " літнім часом.за часом на острові СамоаEза стандартним часом на острові " + + "Самоа;за літнім часом на острові Самоа>за часом на Сейшельських Острова" + + "х%за часом у Сінґапурі<за часом на Соломонових островахEза часом на ост" + + "рові Південна Джорджія#за часом у Суринамі,за часом на станції Сева.за " + + "часом на острові Таїті\x1fза часом у Тайбеї6за стандартним часом у Тайб" + + "еї,за літнім часом у Тайбеї+за часом у Таджикистані4за часом на острова" + + "х Токелау0за часом на островах ТонґаGза стандартним часом на островах Т" + + "онґа=за літнім часом на островах Тонґа.за часом на островах Чуук-за час" + + "ом у ТуркменістаніDза стандартним часом у Туркменістані:за літнім часом" + + " у Туркменістані2за часом на островах Тувалу!за часом в Уруґваї8за станд" + + "артним часом в Уруґваї.за літнім часом в Уруґваї)за часом в Узбекистані" + + "@за стандартним часом в Узбекистані6за літнім часом в Узбекистані4за час" + + "ом на островах ВануатуKза стандартним часом на островах ВануатуAза літн" + + "ім часом на островах Вануату%за часом у Венесуелі.за владивостоцьким ча" + + "сомEза владивостоцьким стандартним часом;за владивостоцьким літнім часо" + + "м,за волгоградським часомCза волгоградським стандартним часом9за волгог" + + "радським літнім часом0за часом на станції Восток,за часом на острові Ве" + + "йкBза часом на островах Уолліс і Футуна\"за якутським часом9за якутськи" + + "м стандартним часом/за якутським літнім часом0за єкатеринбурзьким часом" + + "Gза єкатеринбурзьким стандартним часом=за єкатеринбурзьким літнім часом" + +var bucket116 string = "" + // Size: 14117 bytes + "\x08ٹاؤٹ\x08بابا\x08ہیٹر\x0aکیاہک\x08توبا\x0aامشیر\x0cبرمہات\x0cبرموڈا" + + "\x0aبشانس\x0aپاؤنا\x08ایپپ\x0aمیسرا\x08ناسی\x07دور0\x07دور1\x16پہلی سہ م" + + "اہی\x18دوسری سہ ماہی\x18تیسری سہ ماہی\x18چوتهی سہ ماہی\x0fآدھی رات\x0aد" + + "وپہر\x0bسہ پہر\x06رات\x0dصبح میں\x11دوپہر میں\x0dشام میں\x0dرات میں\x0f" + + "قبل مسیح\x19عام دور سے قبل\x0aعیسوی\x0dعام دور\x08ٹشری\x0cهےشوان\x0aکسل" + + "یو\x0aتیویت\x08شیوت\x0fآدر اوّل\x06آدر\x0fآدر دوّم\x08نسان\x08ایئر\x08س" + + "یون\x08تموز\x04او\x0bای لول\x0aچتررا\x0eویساکھا\x0eجیہائشہ\x0aاسدھا\x0c" + + "سراؤنا\x0aبھدرا\x0cاسوینا\x0eکارتیکا\x10اگراہانا\x08پوسا\x08میگا\x0eپھا" + + "لگنا\x08ہجری\x0cفروردن\x0eآرڈبائش\x0cخداداد\x06تیر\x0aمرداد\x0eشہریوار" + + "\x06مہر\x08ابان\x06آزر\x04ڈے\x08بہمن\x0aاسفند!قبل از جمہوریہ چین\x15جمہو" + + "ریہ چین\x06عہد\x11گزشتہ سال\x0bاس سال\x0fاگلے سال\x11{0} سال میں\x13{0}" + + " سال پہلے\x0dسہ ماہی\x18گزشتہ سہ ماہی\x12اس سہ ماہی\x16اگلے سہ ماہی\x18{" + + "0} سہ ماہی میں\x1a{0} سہ ماہی پہلے\x18{0} سہ ماہی قبل\x0aمہینہ\x15پچھلا " + + "مہینہ\x0fاس مہینہ\x13اگلا مہینہ\x15{0} مہینہ میں\x15{0} مہینے میں\x17{0" + + "} مہینہ پہلے\x17{0} مہینے پہلے\x06ماہ\x15پچھلے مہینہ\x13اگلے مہینہ\x11{0" + + "} ماہ میں\x11{0} ماہ قبل\x13{0} ماہ پہلے\x13پچھلے ہفتہ\x0dاس ہفتہ\x11اگل" + + "ے ہفتہ\x13{0} ہفتہ میں\x13{0} ہفتے میں\x15{0} ہفتہ پہلے\x15{0} ہفتے پہل" + + "ے\x11{0} کے ہفتے\x18مہینے کا ہفتہ\x04دن\x15گزشتہ پرسوں\x0fگزشتہ کل\x04آ" + + "ج\x0fآئندہ کل\x1aآنے والا پرسوں\x0f{0} دن میں\x13{0} دنوں میں\x11{0} دن" + + " پہلے\x15{0} دنوں پہلے\x0dیوم سال\x12ہفتے کا دن\x1fمہینے کا یوم ہفتہ\x15" + + "گزشتہ اتوار\x0fاس اتوار\x13اگلے اتوار\x15{0} اتوار میں\x15{0} اتوار قبل" + + "\x11گزشتہ پیر\x0bاس پیر\x0fاگلے پیر\x11{0} پیر میں\x11{0} پیر قبل\x13گزش" + + "تہ منگل\x0dاس منگل\x11اگلے منگل\x13{0} منگل میں\x13{0} منگل قبل\x11گزشت" + + "ہ بدھ\x0bاس بدھ\x0fاگلے بدھ\x11{0} بدھ میں\x11{0} بدھ قبل\x17گزشتہ جمعر" + + "ات\x11اس جمعرات\x15اگلے جمعرات\x17{0} جمعرات میں\x17{0} جمعرات قبل\x15ا" + + "گلی جمعرات\x13گزشتہ جمعہ\x0dاس جمعہ\x11اگلے جمعہ\x13{0} جمعہ میں\x13{0}" + + " جمعہ قبل\x15گزشتہ سنیچر\x0fاس سنیچر\x13اگلے سنیچر\x15{0} سنیچر میں\x15{" + + "0} سنیچر قبل#قبل دوپہر/بعد دوپہر\x0aگھنٹہ\x0fاس گھنٹے\x15{0} گھنٹے میں" + + "\x17{0} گھنٹہ پہلے\x17{0} گھنٹے پہلے\x15{0} گھنٹہ میں\x17{0} گھنٹوں میں" + + "\x0bاس منٹ\x11{0} منٹ میں\x13{0} منٹ پہلے\x0aسیکنڈ\x04اب\x15{0} سیکنڈ می" + + "ں\x17{0} سیکنڈ پہلے\x11منطقۂ وقت.کوآرڈینیٹڈ یونیورسل ٹائم\x18برٹش سمر ٹ" + + "ائم\"آئرش اسٹینڈرڈ ٹائم\x1eافغانستان کا وقت\x1eوسطی افریقہ ٹائم مشرقی ا" + + "فریقہ ٹائم/جنوبی افریقہ سٹینڈرڈ ٹائم مغربی افریقہ ٹائم/مغربی افریقہ سٹی" + + "نڈرڈ ٹائم'مغربی افریقہ سمر ٹائم\x15الاسکا ٹائم&الاسکا اسٹینڈرڈ ٹائم#الا" + + "سکا ڈے لائٹ ٹائم\x15امیزون ٹائم&ایمیزون سٹینڈرڈ ٹائم/امیزون کا موسم گرم" + + "ا کا وقت\x13سنٹرل ٹائم$سنٹرل اسٹینڈرڈ ٹائم!سنٹرل ڈے لائٹ ٹائم\x15ایسٹرن" + + " ٹائم&ایسٹرن اسٹینڈرڈ ٹائم#ایسٹرن ڈے لائٹ ٹائم\x17ماؤنٹین ٹائم(ماؤنٹین ا" + + "سٹینڈرڈ ٹائم%ماؤنٹین ڈے لائٹ ٹائم\x13پیسفک ٹائم$پیسفک اسٹینڈرڈ ٹائم!پیس" + + "فک ڈے لائٹ ٹائم\x13انیدر ٹائم$انیدر اسٹینڈرڈ ٹائم\x1aانیدر سمر ٹائم\x13" + + "ایپیا ٹائم\"ایپیا سٹینڈرڈ ٹائم!ایپیا ڈے لائٹ ٹائم\x12عرب کا وقت\x1fعرب " + + "کا معیاری وقت\x1dعرب ڈے لائٹ ٹائم\x19ارجنٹینا ٹائم(ارجنٹینا سٹینڈرڈ ٹائ" + + "م ارجنٹینا سمر ٹائم'مغربی ارجنٹینا کا وقت4مغربی ارجنٹینا کا معیاری وقت>" + + "مغربی ارجنٹینا کا موسم گرما کا وقت\x1aآرمینیا کا وقت'آرمینیا کا معیاری " + + "وقت1آرمینیا کا موسم گرما کا وقت\x17اٹلانٹک ٹائم(اٹلانٹک اسٹینڈرڈ ٹائم%ا" + + "ٹلانٹک ڈے لائٹ ٹائم$سنٹرل آسٹریلیا ٹائم5آسٹریلین سنٹرل اسٹینڈرڈ ٹائم2آس" + + "ٹریلین سنٹرل ڈے لائٹ ٹائم1آسٹریلین سنٹرل ویسٹرن ٹائمBآسٹریلین سنٹرل ویس" + + "ٹرن اسٹینڈرڈ ٹائم?آسٹریلین سنٹرل ویسٹرن ڈے لائٹ ٹائم&ایسٹرن آسٹریلیا ٹا" + + "ئم7آسٹریلین ایسٹرن اسٹینڈرڈ ٹائم4آسٹریلین ایسٹرن ڈے لائٹ ٹائم&ویسٹرن آس" + + "ٹریلیا ٹائم7آسٹریلیا ویسٹرن اسٹینڈرڈ ٹائم4آسٹریلین ویسٹرن ڈے لائٹ ٹائم " + + "آذربائیجان کا وقت-آذربائیجان کا معیاری وقت7آذربائیجان کا موسم گرما کا و" + + "قت\x18ازوریس کا وقت%ازوریس کا معیاری وقت/ازوریس کا موسم گرما کا وقت\x1d" + + "بنگلہ دیش کا وقت*بنگلہ دیش کا معیاری وقت4بنگلہ دیش کا موسم گرما کا وقت" + + "\x18بھوٹان کا وقت\x1aبولیویا کا وقت\x19برازیلیا ٹائم*برازیلیا اسٹینڈرڈ ٹ" + + "ائم برازیلیا سمر ٹائم(برونئی دارالسلام ٹائم\x18کیپ ورڈی ٹائم'کیپ ورڈی س" + + "ٹینڈرڈ ٹائم\x1fکیپ ورڈی سمر ٹائم$چامورو سٹینڈرڈ ٹائم\x13چیتھم ٹائم$چیتھ" + + "م اسٹینڈرڈ ٹائم!چیتھم ڈے لائٹ ٹائم\x12چلی کا وقت\x1fچلی کا معیاری وقت)چ" + + "لی کا موسم گرما کا وقت\x0fچین ٹائم\x1eچین سٹینڈرڈ ٹائم\x1fچینی ڈے لائٹ " + + "ٹائم\x19کوئبلسان ٹائم(کوئبلسان سٹینڈرڈ ٹائم\"کوائبلسان سمر ٹائم کرسمس آ" + + "ئلینڈ ٹائم\"کوکوس آئلینڈز ٹائم\x17کولمبیا ٹائم'کولمبیا کا معیاری وقت1کو" + + "لمبیا کا موسم گرما کا وقت\x1cکک آئلینڈز ٹائم+کک آئلینڈز سٹینڈرڈ ٹائم*کک" + + " آئلینڈز نصف سمر ٹائم\x13کیوبا ٹائم$کیوبا اسٹینڈرڈ ٹائم!کیوبا ڈے لائٹ ٹا" + + "ئم\x11ڈیوس ٹائم)ڈومونٹ-ڈی’ارویلے ٹائم\x1eمشرقی تیمور ٹائم#ایسٹر آئلینڈ " + + "کا وقت0ایسٹر آئلینڈ کا معیاری وقت:ایسٹر آئلینڈ کا موسم گرما کا وقت\x1cا" + + "یکواڈور کا وقت\x1bوسط یورپ کا وقت*وسطی یورپ کا معیاری وقت4وسطی یورپ کا " + + "موسم گرما کا وقت\x1fمشرقی یورپ کا وقت,مشرقی یورپ کا معیاری وقت6مشرقی یو" + + "رپ کا موسم گرما کا وقت%بعید مشرقی یورپی وقت\x1fمغربی یورپ کا وقت,مغربی " + + "یورپ کا معیاری وقت6مغربی یورپ کا موسم گرما کا وقت*فاک لینڈ آئلینڈز کا و" + + "قت7فاک لینڈ آئلینڈز کا معیاری وقتAفاک لینڈ آئلینڈز کا موسم گرما کا وقت" + + "\x0fفجی ٹائم\x1eفجی سٹینڈرڈ ٹائم\x16فجی سمر ٹائم!فرینچ گیانا کا وقت6فرین" + + "چ جنوبی اور انٹارکٹک ٹائم\x1eگالاپاگوز کا وقت\x17گیمبیئر ٹائم\x18جارجیا" + + " کا وقت%جارجیا کا معیاری وقت/جارجیا کا موسم گرما کا وقت\"جلبرٹ آئلینڈز ٹ" + + "ائم گرین وچ کا اصل وقت%مشرقی گرین لینڈ ٹائم6مشرقی گرین لینڈ اسٹینڈرڈ ٹا" + + "ئم?مشرقی گرین لینڈ کا موسم گرما کا وقت%مغربی گرین لینڈ ٹائم6مغربی گرین " + + "لینڈ اسٹینڈرڈ ٹائم?مغربی گرین لینڈ کا موسم گرما کا وقت!خلیج کا معیاری و" + + "قت\x16گیانا کا وقت$ہوائی الیوٹیئن ٹائم5ہوائی الیوٹیئن اسٹینڈرڈ ٹائم2ہوا" + + "ئی الیوٹیئن ڈے لائٹ ٹائم\x1aہانگ کانگ ٹائم)ہانگ کانگ سٹینڈرڈ ٹائم!ہانگ " + + "کانگ سمر ٹائم\x11ہووڈ ٹائم ہووڈ سٹینڈرڈ ٹائم\x18ہووڈ سمر ٹائم)ہندوستان " + + "کا معیاری وقت\x16بحر ہند ٹائم\x16ہند چین ٹائم$وسطی انڈونیشیا ٹائم&مشرقی" + + " انڈونیشیا ٹائم&مغربی انڈونیشیا ٹائم\x16ایران کا وقت#ایران کا معیاری وقت" + + "!ایران ڈے لائٹ ٹائم\x15ارکتسک ٹائم$ارکتسک سٹینڈرڈ ٹائم\x1cارکتسک سمر ٹائ" + + "م\x1aاسرائیل کا وقت'اسرائیل کا معیاری وقت%اسرائیل ڈے لائٹ ٹائم\x13جاپان" + + " ٹائم\"جاپان سٹینڈرڈ ٹائم!جاپان ڈے لائٹ ٹائم2پیٹروپاؤلووسک-کیمچسکی ٹائمC" + + "پیٹروپاؤلووسک-کیمچسکی اسٹینڈرڈ ٹائم9پیٹروپاؤلووسک-کیمچسکی سمر ٹائم'مشرق" + + "ی قزاخستان کا وقت'مغربی قزاخستان کا وقت\x13کوریا ٹائم\"کوریا سٹینڈرڈ ٹا" + + "ئم!کوریا ڈے لائٹ ٹائم\x13کوسرے ٹائم\x1fکریسنویارسک ٹائم,کرسنویارسک سٹین" + + "ڈرڈ ٹائم&کریسنویارسک سمر ٹائم\x1aکرغستان کا وقت لائن آئلینڈز ٹائم\x1aلا" + + "رڈ ہووے ٹائم+لارڈ ہووے اسٹینڈرڈ ٹائم(لارڈ ہووے ڈے لائٹ ٹائم%مکوآری آئلی" + + "نڈ کا وقت\x15میگیدن ٹائم&مگادان اسٹینڈرڈ ٹائم\x1cمیگیدن سمر ٹائم\x15ملی" + + "شیا ٹائم\x18مالدیپ کا وقت\x17مارکیسس ٹائم\"مارشل آئلینڈز ٹائم\x15ماریشس" + + " ٹائم$ماریشس سٹینڈرڈ ٹائم\x1cماریشس سمر ٹائم\x13ماؤسن ٹائم+شمال مغربی می" + + "کسیکو ٹائم<شمال مغربی میکسیکو اسٹینڈرڈ ٹائم9شمال مغربی میکسیکو ڈے لائٹ " + + "ٹائم\"میکسیکن پیسفک ٹائم3میکسیکن پیسفک اسٹینڈرڈ ٹائم0میکسیکن پیسفک ڈے ل" + + "ائٹ ٹائم\x1eیولان بیتور ٹائم-یولان بیتور سٹینڈرڈ ٹائم%یولان بیتور سمر ٹ" + + "ائم\x13ماسکو ٹائم$ماسکو اسٹینڈرڈ ٹائم\x1aماسکو سمر ٹائم\x17میانمار ٹائم" + + "\x13ناؤرو ٹائم\x16نیپال کا وقت\"نیو کیلیڈونیا ٹائم1نیو کیلیڈونیا سٹینڈرڈ" + + " ٹائم)نیو کیلیڈونیا سمر ٹائم\x1fنیوزی لینڈ کا وقت,نیوزی لینڈ کا معیاری و" + + "قت*نیوزی لینڈ ڈے لائٹ ٹائم#نیو فاؤنڈ لینڈ ٹائم4نیو فاؤنڈ لینڈ اسٹینڈرڈ " + + "ٹائم1نیو فاؤنڈ لینڈ ڈے لائٹ ٹائم\x11نیئو ٹائم%نارفوک آئلینڈ کا وقت,فرنا" + + "نڈو ڈی نورنہا کا وقت9فرنانڈو ڈی نورنہا کا معیاری وقت2فرنانڈو ڈی نورونہا" + + " سمر ٹائم\x1dنوووسیبرسک ٹائم,نوووسیبرسک سٹینڈرڈ ٹائم$نوووسیبرسک سمر ٹائم" + + "\x13اومسک ٹائم\"اومسک سٹینڈرڈ ٹائم\x1aاومسک سمر ٹائم\x1aپاکستان کا وقت'پ" + + "اکستان کا معیاری وقت1پاکستان کا موسم گرما کا وقت\x11پلاؤ ٹائم!پاپوآ نیو" + + " گنی ٹائم\x1cپیراگوئے کا وقت)پیراگوئے کا معیاری وقت3پیراگوئے کا موسم گرم" + + "ا کا وقت\x14پیرو کا وقت!پیرو کا معیاری وقت+پیرو کا موسم گرما کا وقت\x15" + + "فلپائن ٹائم$فلپائن سٹینڈرڈ ٹائم\x1cفلپائن سمر ٹائم\"فینکس آئلینڈز ٹائم0" + + "سینٹ پیئر اور مکلیئون ٹائمAسینٹ پیئر اور مکلیئون اسٹینڈرڈ ٹائم>سینٹ پیئ" + + "ر اور مکلیئون ڈے لائٹ ٹائم\x17پٹکائرن ٹائم\x15پوناپے ٹائم\x1aپیانگ یانگ" + + " وقت\x18ری یونین ٹائم\x1aروتھیرا کا وقت\x15سخالین ٹائم$سخالین سٹینڈرڈ ٹا" + + "ئم\x1cسخالین سمر ٹائم\x13سمارا ٹائم$سمارا اسٹینڈرڈ ٹائم\x1aسمارا سمر ٹا" + + "ئم\x13ساموآ ٹائم\"ساموآ سٹینڈرڈ ٹائم!ساموآ ڈے لائٹ ٹائم\x15سیشلیز ٹائم&" + + "سنگاپور سٹینڈرڈ ٹائم\"سولمن آئلینڈز ٹائم جنوبی جارجیا ٹائم\x1aسورینام ک" + + "ا وقت\x13سیووا ٹائم\x15تاہیتی ٹائم\x1aتائی پیئی ٹائم+تائی پیئی اسٹینڈرڈ" + + " ٹائم&تئی پیئی ڈے لائٹ ٹائم\x1cتاجکستان کا وقت\x17ٹوکیلاؤ ٹائم\x13ٹونگا " + + "ٹائم\"ٹونگا سٹینڈرڈ ٹائم\x1aٹونگا سمر ٹائم\x0fچوک ٹائم ترکمانستان کا وق" + + "ت-ترکمانستان کا معیاری وقت7ترکمانستان کا موسم گرما کا وقت\x13ٹوالو ٹائم" + + "\x1cیوروگوئے کا وقت)یوروگوئے کا معیاری وقت3یوروگوئے کا موسم گرما کا وقت" + + "\x1cازبکستان کا وقت)ازبکستان کا معیاری وقت3ازبکستان کا موسم گرما کا وقت" + + "\x17وانوآٹو ٹائم&وانوآٹو سٹینڈرڈ ٹائم\x1eوانوآٹو سمر ٹائم\x1eوینزوئیلا ک" + + "ا وقت\x1eولادی ووستک ٹائم-ولادی ووستک سٹینڈرڈ ٹائم%ولادی ووستک سمر ٹائم" + + "\x1bوولگوگراد ٹائم,وولگوگراد اسٹینڈرڈ ٹائم\"وولگوگراد سمر ٹائم\x18ووسٹاک" + + " کا وقت\x1cویک آئلینڈ ٹائم%والیز اور فٹونا ٹائم\x15یکوتسک ٹائم&یکوتسک اس" + + "ٹینڈرڈ ٹائم\x1cیکوتسک سمر ٹائم\x1fیکاٹیرِنبرگ ٹائم0یکاٹیرِنبرگ اسٹینڈرڈ" + + " ٹائم&یکاٹیرِنبرگ سمر ٹائم\x15{0} سالوں میں\x17{0} سالوں پہلے\x15{0} ہفت" + + "وں میں" + +var bucket117 string = "" + // Size: 11876 bytes + "\x11گزشتہ ماہ\x0bاس ماہ\x0fاگلے ماہ\x13گزشتہ ہفتہ\x0dاس ہفتہ\x11اگلے ہفت" + + "ہ\x13{0} ہفتہ قبل\x13{0} ہفتے قبل\x0f{0} دن قبل\x17پچھلے سوموار\x11اس س" + + "وموار\x15اگلے سوموار\x13پچھلے منگل\x0dاس منگل\x11اگلے منگل\x11پچھلے بدھ" + + "\x0bاس بدھ\x0fاگلے بدھ\x17پچھلے جمعرات\x11اس جمعرات\x15اگلے جمعرات\x13پچ" + + "ھلے جمعہ\x0dاس جمعہ\x11اگلے جمعہ\x15{0} گھنٹے قبل\x15{0} گھنٹہ قبل\x11{" + + "0} منٹ قبل\x15{0} سیکنڈ قبل\x14{0} دن کا وقت\x17{0} معیاری وقت\x1bافغانس" + + "تان ٹائم\x17ایمیزون ٹائم&ایمیزون سٹینڈرڈ ٹائم\x1eایمیزون سمر ٹائم\x0fعر" + + "ب ٹائم\x1eعرب سٹینڈرڈ ٹائم\x1dعرب ڈے لائٹ ٹائم$مغربی ارجنٹینا ٹائم3مغرب" + + "ی ارجنٹینا سٹینڈرڈ ٹائم+مغربی ارجنٹینا سمر ٹائم\x17آرمینیا ٹائم&آرمینیا" + + " سٹینڈرڈ ٹائم\x1eآرمینیا سمر ٹائم\x1dآذربائیجان ٹائم,آذربائیجان سٹینڈرڈ " + + "ٹائم$آذربائیجان سمر ٹائم\x1aبنگلہ دیش ٹائم)بنگلہ دیش سٹینڈرڈ ٹائم!بنگلہ" + + " دیش سمر ٹائم\x15بھوٹان ٹائم\x17بولیویا ٹائم\x19برازیلیا ٹائم(برازیلیا س" + + "ٹینڈرڈ ٹائم برازیلیا سمر ٹائم\x0fچلی ٹائم\x1eچلی سٹینڈرڈ ٹائم\x16چلی سم" + + "ر ٹائم\x17کولمبیا ٹائم&کولمبیا سٹینڈرڈ ٹائم\x1eکولمبیا سمر ٹائم ایسٹر آ" + + "ئلینڈ ٹائم/ایسٹر آئلینڈ سٹینڈرڈ ٹائم'ایسٹر آئلینڈ سمر ٹائم\x19ایکواڈور " + + "ٹائم\x1dوسطی یورپ کا وقت*وسطی یورپ کا معیاری وقت4وسطی یورپ کا موسم گرما" + + " کا وقت'فاک لینڈ آئلینڈز ٹائم6فاک لینڈ آئلینڈز سٹینڈرڈ ٹائم.فاک لینڈ آئل" + + "ینڈز سمر ٹائم\x1eفرینچ گیانا ٹائم\x1bگالاپاگوز ٹائم\x15جارجیا ٹائم$جارج" + + "یا سٹینڈرڈ ٹائم\x1cجارجیا سمر ٹائم\x1dگرین وچ مین ٹائم خلیج سٹینڈرڈ ٹائ" + + "م\x13گیانا ٹائم\"انڈیا سٹینڈرڈ ٹائم\x13ایران ٹائم\"ایران سٹینڈرڈ ٹائم!ا" + + "یران ڈے لائٹ ٹائم\x17اسرائیل ٹائم&اسرائیل سٹینڈرڈ ٹائم%اسرائیل ڈے لائٹ " + + "ٹائم$مشرقی قزاخستان ٹائم$مغربی قزاخستان ٹائم\x17کرغستان ٹائم\"مکوآری آئ" + + "لینڈ ٹائم\x15مالدیپ ٹائم\x13نیپال ٹائم\x1cنیوزی لینڈ ٹائم+نیوزی لینڈ سٹ" + + "ینڈرڈ ٹائم*نیوزی لینڈ ڈے لائٹ ٹائم)فرنانڈو ڈی نورنہا ٹائم8فرنانڈو ڈی نو" + + "رنہا سٹینڈرڈ ٹائم2فرنانڈو ڈی نورونہا سمر ٹائم\x17پاکستان ٹائم&پاکستان س" + + "ٹینڈرڈ ٹائم\x1eپاکستان سمر ٹائم\x19پیراگوئے ٹائم(پیراگوئے سٹینڈرڈ ٹائم " + + "پیراگوئے سمر ٹائم\x11پیرو ٹائم پیرو سٹینڈرڈ ٹائم\x18پیرو سمر ٹائم\x17رو" + + "تھیرا ٹائم\x17سورینام ٹائم\x19تاجکستان ٹائم\x1dترکمانستان ٹائم,ترکمانست" + + "ان سٹینڈرڈ ٹائم$ترکمانستان سمر ٹائم\x19یوروگوئے ٹائم(یوروگوئے سٹینڈرڈ ٹ" + + "ائم یوروگوئے سمر ٹائم\x19ازبکستان ٹائم(ازبکستان سٹینڈرڈ ٹائم ازبکستان س" + + "مر ٹائم\x1bوینزوئیلا ٹائم\x15ووسٹاک ٹائم\x13EEEE, d-MMMM, y (G)\x0dd-MM" + + "MM, y (G)\x0cd-MMM, y (G)\x0fdd.MM.y (GGGGG)\x03Yak\x04Dush\x04Sesh\x04C" + + "hor\x03Pay\x03Jum\x04Shan\x02Ya\x02Du\x02Se\x02Ch\x02Pa\x02Ju\x02Sh\x09y" + + "akshanba\x08dushanba\x08seshanba\x0achorshanba\x09payshanba\x04juma\x06s" + + "hanba\x041-ch\x042-ch\x043-ch\x044-ch\x081-chorak\x082-chorak\x083-chora" + + "k\x084-chorak\x09yarim tun\x02TO\x0atush payti\x07ertalab\x07kunduzi\x09" + + "kechqurun\x07kechasi\x10miloddan avvalgi\x11eramizdan avvalgi\x07milodiy" + + "\x04mil.\x04m.a.\x04e.a.\x0fEEEE, d-MMMM, y\x09d-MMMM, y\x08d-MMM, y\x03" + + "yil\x0co‘tgan yil\x07shu yil\x0bkeyingi yil\x10{0} yildan keyin\x0d{0} y" + + "il oldin\x0boʻtgan yil\x06bu yil\x06chorak\x0fo‘tgan chorak\x0ashu chora" + + "k\x0ekeyingi chorak\x13{0} chorakdan keyin\x10{0} chorak oldin\x02ch\x02" + + "oy\x0bo‘tgan oy\x06shu oy\x0akeyingi oy\x0f{0} oydan keyin\x0c{0} oy old" + + "in\x0eo‘tgan hafta\x09shu hafta\x0dkeyingi hafta\x12{0} haftadan keyin" + + "\x0f{0} hafta oldin\x09{0}-hafta\x0eoyning haftasi\x03kun\x05kecha\x05bu" + + "gun\x06ertaga\x10{0} kundan keyin\x0d{0} kun oldin\x08yil kuni\x0ahafta " + + "kuni\x11oyning hafta kuni\x12o‘tgan yakshanba\x0dshu yakshanba\x11keying" + + "i yakshanba\x19{0} ta yakshanbadan keyin\x16{0} ta yakshanba oldin\x11o‘" + + "tgan dushanba\x0cshu dushanba\x10keyingi dushanba\x18{0} ta dushanbadan " + + "keyin\x15{0} ta dushanba oldin\x11o‘tgan seshanba\x0cshu seshanba\x10key" + + "ingi seshanba\x18{0} ta seshanbadan keyin\x15{0} ta seshanba oldin\x13o‘" + + "tgan chorshanba\x0eshu chorshanba\x12keyingi chorshanba\x1a{0} ta chorsh" + + "anbadan keyin\x17{0} ta chorshanba oldin\x12o‘tgan payshanba\x0dshu pays" + + "hanba\x11keyingi payshanba\x19{0} ta payshanbadan keyin\x16{0} ta paysha" + + "nba oldin\x0do‘tgan juma\x08shu juma\x0ckeyingi juma\x14{0} ta jumadan k" + + "eyin\x11{0} ta juma oldin\x0fo‘tgan shanba\x0ashu shanba\x0ekeyingi shan" + + "ba\x16{0} ta shanbadan keyin\x13{0} ta shanba oldin\x05TO/TK\x04soat\x0a" + + "shu soatda\x11{0} soatdan keyin\x0e{0} soat oldin\x06daqiqa\x0cshu daqiq" + + "ada\x13{0} daqiqadan keyin\x10{0} daqiqa oldin\x04daq.\x06soniya\x05hozi" + + "r\x13{0} soniyadan keyin\x10{0} soniya oldin\x04son.\x0evaqt mintaqasi" + + "\x1bKoordinatali universal vaqt\x15Britaniya yozgi vaqti\x15Irlandiya yo" + + "zgi vaqti\x12Afgʻoniston vaqti\x15Markaziy Afrika vaqti\x14Sharqiy Afrik" + + "a vaqti\x1dJanubiy Afrika standart vaqti\x15Gʻarbiy Afrika vaqti\x1eGʻar" + + "biy Afrika standart vaqti\x1bGʻarbiy Afrika yozgi vaqti\x0dAlyaska vaqti" + + "\x16Alyaska standart vaqti\x13Alyaska yozgi vaqti\x0eAmazonka vaqti\x17A" + + "mazonka standart vaqti\x14Amazonka yozgi vaqti\x16Markaziy Amerika vaqti" + + "\x1fMarkaziy Amerika standart vaqti\x1cMarkaziy Amerika yozgi vaqti\x15S" + + "harqiy Amerika vaqti\x1eSharqiy Amerika standart vaqti\x1bSharqiy Amerik" + + "a yozgi vaqti\x13Tog‘ vaqti (AQSH)\x1cTog‘ standart vaqti (AQSH)\x19Tog‘" + + " yozgi vaqti (AQSH)\x12Tinch okeani vaqti\x1bTinch okeani standart vaqti" + + "\x18Tinch okeani yozgi vaqti\x0aApia vaqti\x13Apia standart vaqti\x10Api" + + "a yozgi vaqti\x18Saudiya Arabistoni vaqti!Saudiya Arabistoni standart va" + + "qti\x1eSaudiya Arabistoni yozgi vaqti\x0fArgentina vaqti\x18Argentina st" + + "andart vaqti\x15Argentina yozgi vaqti\x18Gʻarbiy Argentina vaqti!Gʻarbiy" + + " Argentina standart vaqti\x1eGʻarbiy Argentina yozgi vaqti\x10Armaniston" + + " vaqti\x19Armaniston standart vaqti\x16Armaniston yozgi vaqti\x0fAtlanti" + + "ka vaqti\x18Atlantika standart vaqti\x15Atlantika yozgi vaqti\x19Markazi" + + "y Avstraliya vaqti\"Markaziy Avstraliya standart vaqti\x1fMarkaziy Avstr" + + "aliya yozgi vaqti#Markaziy Avstraliya g‘arbiy vaqti,Markaziy Avstraliya " + + "g‘arbiy standart vaqti)Markaziy Avstraliya g‘arbiy yozgi vaqti\x18Sharqi" + + "y Avstraliya vaqti!Sharqiy Avstraliya standart vaqti\x1eSharqiy Avstrali" + + "ya yozgi vaqti\x1aG‘arbiy Avstraliya vaqti#G‘arbiy Avstraliya standart v" + + "aqti G‘arbiy Avstraliya yozgi vaqti\x10Ozarbayjon vaqti\x19Ozarbayjon st" + + "andart vaqti\x16Ozarbayjon yozgi vaqti\x13Azor orollari vaqti\x1cAzor or" + + "ollari standart vaqti\x19Azor orollari yozgi vaqti\x10Bangladesh vaqti" + + "\x19Bangladesh standart vaqti\x16Bangladesh yozgi vaqti\x0bButan vaqti" + + "\x0eBoliviya vaqti\x0fBraziliya vaqti\x18Braziliya standart vaqti\x15Bra" + + "ziliya yozgi vaqti\x17Bruney-Dorussalom vaqti\x10Kabo-Verde vaqti\x19Kab" + + "o-Verde standart vaqti\x16Kabo-Verde yozgi vaqti\x17Chamorro standart va" + + "qti\x0cChatem vaqti\x15Chatem standart vaqti\x12Chatem yozgi vaqti\x0bCh" + + "ili vaqti\x14Chili standart vaqti\x11Chili yozgi vaqti\x0bXitoy vaqti" + + "\x14Xitoy standart vaqti\x11Xitoy yozgi vaqti\x10Choybalsan vaqti\x19Cho" + + "ybalsan standart vaqti\x16Choybalsan yozgi vaqti\x15Rojdestvo oroli vaqt" + + "i\x14Kokos orollari vaqti\x0fKolumbiya vaqti\x18Kolumbiya standart vaqti" + + "\x15Kolumbiya yozgi vaqti\x12Kuk orollari vaqti\x1bKuk orollari standart" + + " vaqti\x1eKuk orollari yarim yozgi vaqti\x0aKuba vaqti\x13Kuba standart " + + "vaqti\x10Kuba yozgi vaqti\x0cDeyvis vaqti\x17Dyumon-d’Yurvil vaqti\x13Sh" + + "arqiy Timor vaqti\x11Pasxa oroli vaqti\x1aPasxa oroli standart vaqti\x17" + + "Pasxa oroli yozgi vaqti\x0dEkvador vaqti\x16Markaziy Yevropa vaqti\x1fMa" + + "rkaziy Yevropa standart vaqti\x1cMarkaziy Yevropa yozgi vaqti\x15Sharqiy" + + " Yevropa vaqti\x1eSharqiy Yevropa standart vaqti\x1bSharqiy Yevropa yozg" + + "i vaqti\x1aKaliningrad va Minsk vaqti\x17G‘arbiy Yevropa vaqti G‘arbiy Y" + + "evropa standart vaqti\x1dG‘arbiy Yevropa yozgi vaqti\x17Folklend orollar" + + "i vaqti Folklend orollari standart vaqti\x1dFolklend orollari yozgi vaqt" + + "i\x0aFiji vaqti\x13Fiji standart vaqti\x10Fiji yozgi vaqti\x16Fransuz Gv" + + "ianasi vaqti-Fransuz Janubiy hududlari va Antarktika vaqti\x0fGalapagos " + + "vaqti\x0cGambye vaqti\x0dGruziya vaqti\x16Gruziya standart vaqti\x13Gruz" + + "iya yozgi vaqti\x16Gilbert orollari vaqti\x19Grinvich o‘rtacha vaqti\x19" + + "Sharqiy Grenlandiya vaqti\"Sharqiy Grenlandiya standart vaqti\x1fSharqiy" + + " Grenlandiya yozgi vaqti\x1bG‘arbiy Grenlandiya vaqti$G‘arbiy Grenlandiy" + + "a standart vaqti!G‘arbiy Grenlandiya yozgi vaqti\x1eFors ko‘rfazi standa" + + "rt vaqti\x0cGayana vaqti\x12Gavayi-aleut vaqti\x1bGavayi-aleut standart " + + "vaqti\x18Gavayi-aleut yozgi vaqti\x0dGonkong vaqti\x16Gonkong standart v" + + "aqti\x13Gonkong yozgi vaqti\x0aXovd vaqti\x13Xovd standart vaqti\x10Xovd" + + " yozgi vaqti\x18Hindiston standart vaqti\x11Hind okeani vaqti\x10Hindixi" + + "toy vaqti\x19Markaziy Indoneziya vaqti\x18Sharqiy Indoneziya vaqti\x19Gʻ" + + "arbiy Indoneziya vaqti\x0aEron vaqti\x13Eron standart vaqti\x10Eron yozg" + + "i vaqti\x0dIrkutsk vaqti\x16Irkutsk standart vaqti\x13Irkutsk yozgi vaqt" + + "i\x0cIsroil vaqti\x15Isroil standart vaqti\x12Isroil yozgi vaqti\x0eYapo" + + "niya vaqti\x17Yaponiya standart vaqti\x14Yaponiya yozgi vaqti\x1aSharqiy" + + " Qozogʻiston vaqti\x1bGʻarbiy Qozogʻiston vaqti\x0cKoreya vaqti\x15Korey" + + "a standart vaqti\x12Koreya yozgi vaqti\x0cKosrae vaqti\x11Krasnoyarsk va" + + "qti\x1aKrasnoyarsk standart vaqti\x17Krasnoyarsk yozgi vaqti\x13Qirgʻizi" + + "ston vaqti\x13Layn orollari vaqti\x0eLord-Xau vaqti\x17Lord-Xau standart" + + " vaqti\x14Lord-Xau yozgi vaqti\x14Makkuori oroli vaqti\x0dMagadan vaqti" + + "\x16Magadan standart vaqti\x13Magadan yozgi vaqti\x0fMalayziya vaqti\x15" + + "Maldiv orollari vaqti\x15Markiz orollari vaqti\x17Marshall orollari vaqt" + + "i\x0eMavrikiy vaqti\x17Mavrikiy standart vaqti\x14Mavrikiy yozgi vaqti" + + "\x0cMouson vaqti\x1fShimoli-g‘arbiy Meksika vaqti(Shimoli-g‘arbiy Meksik" + + "a standart vaqti%Shimoli-g‘arbiy Meksika yozgi vaqti\x1aMeksika Tinch ok" + + "eani vaqti#Meksika Tinch okeani standart vaqti Meksika Tinch okeani yozg" + + "i vaqti\x10Ulan-Bator vaqti\x19Ulan-Bator standart vaqti\x16Ulan-Bator y" + + "ozgi vaqti\x0cMoskva vaqti\x15Moskva standart vaqti\x12Moskva yozgi vaqt" + + "i\x0cMyanma vaqti\x0bNauru vaqti\x0bNepal vaqti\x16Yangi Kaledoniya vaqt" + + "i\x1fYangi Kaledoniya standart vaqti\x1cYangi Kaledoniya yozgi vaqti\x15" + + "Yangi Zelandiya vaqti\x1eYangi Zelandiya standart vaqti\x1bYangi Zelandi" + + "ya yozgi vaqti\x12Nyufaundlend vaqti\x1bNyufaundlend standart vaqti\x18N" + + "yufaundlend yozgi vaqti\x0bNiuye vaqti\x13Norfolk oroli vaqti\x19Fernand" + + "u-di-Noronya vaqti\"Fernandu-di-Noronya standart vaqti\x1fFernandu-di-No" + + "ronya yozgi vaqti\x11Novosibirsk vaqti\x1aNovosibirsk standart vaqti\x17" + + "Novosibirsk yozgi vaqti\x0aOmsk vaqti\x13Omsk standart vaqti\x10Omsk yoz" + + "gi vaqti\x0ePokiston vaqti\x17Pokiston standart vaqti\x14Pokiston yozgi " + + "vaqti\x0bPalau vaqti\x19Papua-Yangi Gvineya vaqti\x0eParagvay vaqti\x17P" + + "aragvay standart vaqti\x14Paragvay yozgi vaqti\x0aPeru vaqti\x13Peru sta" + + "ndart vaqti\x10Peru yozgi vaqti\x0eFilippin vaqti\x17Filippin standart v" + + "aqti\x14Filippin yozgi vaqti\x15Feniks orollari vaqti\x19Sen-Pyer va Mik" + + "elon vaqti\"Sen-Pyer va Mikelon standart vaqti\x1fSen-Pyer va Mikelon yo" + + "zgi vaqti\x0dPitkern vaqti\x0cPonape vaqti\x0dPxenyan vaqti\x0eReyunion " + + "vaqti\x0cRotera vaqti\x0dSaxalin vaqti\x16Saxalin standart vaqti\x13Saxa" + + "lin yozgi vaqti\x0bSamoa vaqti\x14Samoa standart vaqti\x11Samoa yozgi va" + + "qti\x16Seyshel orollari vaqti\x0eSingapur vaqti\x16Solomon orollari vaqt" + + "i\x16Janubiy Georgiya vaqti\x0dSurinam vaqti\x0bSyova vaqti\x0bTaiti vaq" + + "ti\x0cTayvan vaqti\x15Tayvan standart vaqti\x12Tayvan yozgi vaqti\x10Toj" + + "ikiston vaqti\x0dTokelau vaqti\x0bTonga vaqti\x14Tonga standart vaqti" + + "\x11Tonga yozgi vaqti\x0bChuuk vaqti\x12Turkmaniston vaqti\x1bTurkmanist" + + "on standart vaqti\x18Turkmaniston yozgi vaqti\x0cTuvalu vaqti\x0dUrugvay" + + " vaqti\x16Urugvay standart vaqti\x13Urugvay yozgi vaqti\x13O‘zbekiston v" + + "aqti\x1cO‘zbekiston standart vaqti\x19O‘zbekiston yozgi vaqti\x0dVanuatu" + + " vaqti\x16Vanuatu standart vaqti\x13Vanuatu yozgi vaqti\x0fVenesuela vaq" + + "ti\x11Vladivostok vaqti\x1aVladivostok standart vaqti\x17Vladivostok yoz" + + "gi vaqti\x0fVolgograd vaqti\x18Volgograd standart vaqti\x15Volgograd yoz" + + "gi vaqti\x0cVostok vaqti\x10Ueyk oroli vaqti\x16Uollis va Futuna vaqti" + + "\x0dYakutsk vaqti\x16Yakutsk standart vaqti\x13Yakutsk yozgi vaqti\x13Ye" + + "katerinburg vaqti\x1cYekaterinburg standart vaqti\x19Yekaterinburg yozgi" + + " vaqti" + +var bucket118 string = "" + // Size: 13897 bytes + "-G y نچی ییل d نچی MMMM EEEE کونی\x11d نچی MMMM y G\x03ی.\x03د.\x03س." + + "\x03چ.\x03پ.\x03ج.\x03ش.+y نچی ییل d نچی MMMM EEEE کونی\x0fd نچی MMMM y" + + "\x1bافغانستان وقتی\x0aянвар\x0cфеврал\x08март\x0aапрел\x06май\x06июн\x06" + + "июл\x0cавгуст\x0eсентябр\x0cоктябр\x0aноябр\x0cдекабр\x06якш\x06душ\x06" + + "сеш\x06чор\x06пай\x06жум\x06шан\x04Як\x04Ду\x04Се\x04Чо\x04Па\x04Жу\x04" + + "Ша\x0eякшанба\x0eдушанба\x0eсешанба\x10чоршанба\x10пайшанба\x08жума\x0a" + + "шанба\x06Якш\x06Душ\x06Сеш\x06Чор\x06Пай\x06Жум\x06Шан\x0eЯкшанба\x0eДу" + + "шанба\x0eСешанба\x10Чоршанба\x10Пайшанба\x08Жума\x0aШанба\x041-ч\x042-ч" + + "\x043-ч\x044-ч\x0c1-чорак\x0c2-чорак\x0c3-чорак\x0c4-чорак\x0fярим тун" + + "\x04ТО\x11туш пайти\x04ТК\x0eэрталаб\x0eкундузи\x10кечқурун\x0cкечаси" + + "\x1fмилоддан аввалги!эрамиздан аввалги\x0eмилодий\x06м.а.\x06э.а.\x10Муҳ" + + "аррам\x0aСафар\x17Рабиул-аввал\x15Рабиул-охир\x17Жумодиул-уло\x19Жумоди" + + "ул-ухро\x0aРажаб\x0cШаъбон\x0eРамазон\x0cШаввол\x11Зил-қаъда\x11Зил-ҳиж" + + "жа\x06Эра\x06Йил\x11ўтган йил\x0bбу йил\x15кейинги йил\x19{0} йилдан сў" + + "нг\x15{0} йил аввал\x04Ой\x0fўтган ой\x09бу ой\x13кейинги ой\x17{0} ойд" + + "ан сўнг\x13{0} ой аввал\x0aҲафта\x15ўтган ҳафта\x0fбу ҳафта\x19кейинги " + + "ҳафта\x1d{0} ҳафтадан сўнг\x19{0} ҳафта олдин\x06Кун\x08кеча\x0aбугун" + + "\x0cэртага\x19{0} кундан сўнг\x15{0} кун олдин\x13Ҳафта куни\x19ўтган як" + + "шанба\x13бу якшанба\x1dкейинги якшанба\x19ўтган душанба\x13бу душанба" + + "\x1dкейинги душанба\x19ўтган сешанба\x13бу сешанба\x1dкейинги сешанба" + + "\x1bўтган чоршанба\x0ethis Wednesday\x1fкейинги чоршанба\x1bўтган пайшан" + + "ба\x15бу пайшанба\x1fкейинги пайшанба\x13ўтган жума\x0dбу жума\x17кейин" + + "ги жума\x15ўтган шанба\x0fбу шанба\x19кейинги шанба\x11Кун вақти\x08Соа" + + "т\x1b{0} соатдан сўнг\x17{0} соат олдин\x0cДақиқа\x1f{0} дақиқадан сўнг" + + "\x1b{0} дақиқа олдин\x0aСония\x0aҳозир\x1d{0} сониядан сўнг\x19{0} сония" + + " олдин\x0eМинтақа\x0e{0} вақти\x1f{0} кундузги вақти\x1f{0} стандарт вақ" + + "ти$Британия ёзги вақти$Ирландия ёзги вақти\x1fАфғонистон вақти(Марказий" + + " Африка вақти$Шарқий Африка вақти&Жанубий Африка вақти$Ғарбий Африка вақ" + + "ти5Ғарбий Африка стандарт вақти-Ғарбий Африка ёзги вақти\x17Аляска вақт" + + "и(Аляска стандарт вақти(Аляска кундузги вақти\x1bАмазонка вақти,Амазонк" + + "а стандарт вақти$Амазонка ёзги вақти\x1dШимолий АмерикаJШимолий Америка" + + " марказий стандарт вақтиJШимолий Америка марказий кундузги вақти5Шимолий" + + " Америка шарқий вақтиFШимолий Америка шарқий стандарт вақтиFШимолий Амер" + + "ика шарқий кундузги вақти/Шимолий Америка тоғ вақти@Шимолий Америка тоғ" + + " стандарт вақти@Шимолий Америка тоғ кундузги вақти>Шимолий Америка тинч " + + "океани вақтиOШимолий Америка тинч океани стандарт вақтиOШимолий Америка" + + " тинч океани кундузги вақти\x1dАрабистон вақти.Арабистон стандарт вақти." + + "Арабистон кундузги вақти\x1dАргентина вақти.Аргентина стандарт вақти&Ар" + + "гентина ёзги вақти*Ғарбий Аргентина вақти;Ғарбий Аргентина стандарт вақ" + + "ти3Ғарбий Аргентина ёзги вақти\x1fАрамнистон вақти0Арманистон стандарт " + + "вақти(Арманистон ёзги вақти\x1dАтлантика вақти.Атлантика стандарт вақти" + + ".Атлантика кундузги вақти.Марказий Австралия вақти?Марказий Австралия ст" + + "андарт вақти?Марказий Австралия кундузги вақти;Марказий Австралия Ғарби" + + "й вақтиLМарказий Австралия Ғарбий стандарт вақтиLМарказий Австралия Ғар" + + "бий кундузги вақти*Шарқий Австралия вақти;Шарқий Австралия стандарт вақ" + + "ти;Шарқий Австралия кундузги вақти*Ғарбий Австралия вақти;Ғарбий Австра" + + "лия стандарт вақти;Ғарбий Австралия кундузги вақти\x1fОзарбайжон вақти0" + + "Озарбайжон стандарт вақти(Озарбайжон ёзги вақти\x13Азор вақти$Азор стан" + + "дарт вақти\x1cАзор ёзги вақти\x1dБангладеш вақти.Бангладеш стандарт вақ" + + "ти&Бангладеш ёзги вақти\x15Бутан вақти\x19Боливия вақти\x1bБразилия вақ" + + "ти,Бразилия стандарт вақти$Бразилия ёзги вақти,Бруней Даруссалом вақти" + + "\x1eКабо-Верде вақти/Кабо-Верде стандарт вақти'Кабо-Верде ёзги вақти\x19" + + "Каморро вақти\x17Чатхам вақти(Чатхам стандарт вақти(Чатхам кундузги вақ" + + "ти\x13Чили вақти$Чили стандарт вақти\x1cЧили ёзги вақти\x15Хитой вақти&" + + "Хитой стандарт вақти&Хитой кундузги вақти\x1dЧойбалсан вақти.Чойбалсан " + + "стандарт вақти&Чойбалсан ёзги вақти(Рождество ороли вақти&Кокос ороллар" + + "и вақти\x1bКолумбия вақти,Колумбия стандарт вақти$Колумбия ёзги вақти\"" + + "Кук ороллари вақти3Кук ороллари стандарт вақти4Кук ороллари ярим ёзги в" + + "ақти\x13Куба вақти$Куба стандарт вақти$Куба кундузги вақти\x15Дэвис вақ" + + "ти%Думонт-д-Урвил вақти\"Шарқий Тимор вақти Пасхи Ороли вақти1Пасхи оро" + + "ли стандарт вақти)Пасхи ороли ёзги вақти\x19Эквадор вақти(Марказий Евро" + + "па вақти9Марказий Европа стандарт вақти1Марказий Европа ёзги вақти$Шарқ" + + "ий Европа вақти5Шарқий Европа стандарт вақти-Шарқий Европа ёзги вақти$Ғ" + + "арбий Европа вақти5Ғарбий Европа стандарт вақти-Ғарбий Европа ёзги вақт" + + "и.Фолькленд ороллари вақти?Фолькленд ороллари стандарт вақти7Фолькленд " + + "ороллари ёзги вақти\x13Фижи вақти$Фижи стандарт вақти\x1cФижи ёзги вақт" + + "и*Француз Гвианаси вақтиBФранцуз жанубий ва Антарктика вақти\x1dГалапаг" + + "ос вақти\x19Гамбиер вақти\x17Грузия вақти(Грузия стандарт вақти Грузия " + + "ёзги вақти*Гилберт ороллари вақти\x19Гринвич вақти,Шарқий Гренландия ва" + + "қти=Шарқий Гренландия стандарт вақти5Шарқий Гренландия ёзги вақти,Ғарби" + + "й Гренландия вақти=Ғарбий Гренландия стандарт вақти5Ғарбий Гренландия ё" + + "зги вақти\x17Кўрфаз вақти\x17Гайана вақти\"Гавайи-алеут вақти3Гавайи-ал" + + "еут стандарт вақти3Гавайи-алеут кундузги вақти\x19Гонконг вақти*Гонконг" + + " стандарт вақти\"Гонконг ёзги вақти\x13Ховд вақти$Ховд стандарт вақти" + + "\x1cХовд ёзги вақти\x1dҲиндистон вақти Ҳинд океани вақти\x1eҲинд-Хитой в" + + "ақти.Марказий Индонезия вақти*Шарқий Индонезия вақти*Ғарбий Индонезия в" + + "ақти\x13Эрон вақти$Эрон стандарт вақти$Эрон кундузги вақти\x19Иркутск в" + + "ақти*Иркутск стандарт вақти\"Иркутск ёзги вақти\x17Исроил вақти(Исроил " + + "стандарт вақти(Исроил кундузги вақти\x17Япония вақти(Япония стандарт ва" + + "қти(Япония кундузги вақти,Шарқий Қозоғистон вақти,Ғарбий Қозоғистон вақ" + + "ти\x15Корея вақти&Корея стандарт вақти&Корея кундузги вақти\x17Косрае в" + + "ақти\x1fКрасноярск вақти0Красноярск стандарт вақти(Красноярск ёзги вақт" + + "и!Қирғизистон вақти$Лайн ороллари вақти\x1cЛорд Хове вақти-Лорд Хове ст" + + "андарт вақти-Лорд Хове кундузги вақти$Маквари ороли вақти\x19Магадан ва" + + "қти*Магадан стандарт вақти\"Магадан ёзги вақти\x1bМалайзия вақти\x1dМал" + + "ьдив ороллар\x1bМаркезас вақти*Маршалл ороллари вақти\x1bМаврикий вақти" + + ",Маврикий стандарт вақти$Маврикий ёзги вақти\x19Моувсон вақти\x1eУлан-Ба" + + "тор вақти/Улан-Батор стандарт вақти'Улан-Батор ёзги вақти\x17Москва вақ" + + "ти(Москва стандарт вақти Москва ёзги вақти\x17Мьянма вақти\x15Науру вақ" + + "ти\x15Непал вақти&Янги Каледония вақти7Янги Каледония стандарт вақти/Ян" + + "ги Каледония ёзги вақти$Янги Зеландия вақти5Янги Зеландия стандарт вақт" + + "и5Янги Зеландия кундузги вақти#Ньюфаундленд вақти4Ньюфаундленд стандарт" + + " вақти4Ньюфаундленд кундузги вақти\x13Ниуе вақти$Норфолк ороли вақти/Фер" + + "нандо де Норонья вақти@Фернандо де Норонья стандарт вақти8Фернандо де Н" + + "оронья ёзги вақти!Новосибирск вақти2Новосибирск стандарт вақти*Новосиби" + + "рск ёзги вақти\x13Омск вақти$Омск стандарт вақти\x1cОмск ёзги вақти\x1b" + + "Покистон вақти,Покистон стандарт вақти$Покистон ёзги вақти\x15Палау вақ" + + "ти+Папуа-Янги Гвинея вақти\x1bПарагвай вақти,Парагвай стандарт вақти$Па" + + "рагвай ёзги вақти\x13Перу вақти$Перу стандарт вақти\x1cПеру ёзги вақти" + + "\x1bФилиппин вақти,Филиппин стандарт вақти$Филиппин ёзги вақти(Феникс ор" + + "оллари вақти0Сент-Пьер ва Микелон вақтиAСент-Пьер ва Микелон стандарт в" + + "ақтиAСент-Пьер ва Микелон кундузги вақти\x19Питкерн вақти\x17Понапе вақ" + + "ти\x19Реюньон вақти\x17Ротера вақти\x19Сахалин вақти*Сахалин стандарт в" + + "ақти\"Сахалин ёзги вақти\x15Самоа вақти&Самоа стандарт вақти&Самоа кунд" + + "узги вақти(Сейшел ороллари вақти\x1bСингапур вақти*Соломон ороллари вақ" + + "ти*Жанубий Джорджия вақти\x19Суринам вақти\x15Сьова вақти\x15Таити вақт" + + "и\x17Тайпей вақти(Тайпей стандарт вақти(Тайпей кундузги вақти\x1fТожики" + + "стон вақти\x19Токелау вақти\x15Тонга вақти&Тонга стандарт вақти\x1eТонг" + + "а ёзги вақти\x13Чуук вақти#Туркманистон вақти4Туркманистон стандарт вақ" + + "ти,Туркманистон ёзги вақти\x17Тувалу вақти\x19Уругвай вақти*Уругвай ста" + + "ндарт вақти\"Уругвай ёзги вақти\x1fЎзбекистон вақти0Ўзбекистон стандарт" + + " вақти(Ўзбекистон ёзги вақти\x19Вануату вақти*Вануату стандарт вақти\"Ва" + + "нуату ёзги вақти\x1dВенесуэла вақти!Владивосток вақти2Владивосток станд" + + "арт вақти*Владивосток ёзги вақти\x1dВолгоград вақти.Волгоград стандарт " + + "вақти&Волгоград ёзги вақти\x17Восток вақти\x1eУэйк ороли вақти)Уэллис в" + + "а Футуна вақти\x17Якутск вақти(Якутск стандарт вақти Якутск ёзги вақти#" + + "Екатеринбург вақти4Екатеринбург стандарт вақти,Екатеринбург ёзги вақти" + +var bucket119 string = "" + // Size: 11533 bytes + "\x09ꖨꕪꖃ\x06ꕒꕡ\x06ꕾꖺ\x06ꖢꖕ\x06ꖑꕱ\x06ꖱꘋ\x06ꖱꕞ\x06ꗛꔕ\x06ꕢꕌ\x06ꕭꖃ\x06ꔞꘋ\x09ꖨ" + + "ꕪꕱ\x10ꖨꕪꖃ ꔞꕮ\x0cꕒꕡꖝꖕ\x09ꖱꕞꔤ\x16ꔞꘋꕔꕿ ꕸꖃꗏ\x10ꖨꕪꕱ ꗏꕮ\x09ꕞꕌꔵ\x09ꗳꗡꘉ\x09ꕚꕞꕚ" + + "\x09ꕉꕞꕒ\x0cꕉꔤꕆꕢ\x0cꕉꔤꕀꕮ\x09ꔻꔬꔳ\x06ꕢꘋ\x06ꕪꖃ\x09ꔨꔤꕃ\x06ꔎꔒ\x06ꖴꖸ\x06ꗦꗷ\x06ꔻ" + + "ꕯ\x10ꔨꕃꕮ ꔎꔒ\x06ꕌꕎ\x06ꕆꕇ\x0cꕧꕃꕧꕪ\x0cluukao kemã\x09ɓandaɓu\x05vɔɔ\x04fu" + + "lu\x03goo\x016\x017\x06kɔnde\x04saah\x04galo\x11kenpkato ɓololɔ\x0cluuka" + + "o lɔma\x06lahadi\x0atɛɛnɛɛ\x06talata\x05alaba\x06aimisa\x06aijima\x07siɓ" + + "iti\x04saŋ\x04tele\x0ewikiyɛma tele\x04hawa\x04mini\x09jaki-jaka EEEE, '" + + "ngày' dd MMMM 'năm' y G\x0b{0} Nhuận\x03Tý\x05Sửu\x05Dần\x04Mão\x05Thìn" + + "\x04Tỵ\x05Ngọ\x04Mùi\x05Thân\x05Dậu\x06Tuất\x05Hợi\x0bLập Xuân\x0aVũ Thủ" + + "y\x0bKinh Trập\x0bXuân Phân\x0aThanh Minh\x09Cốc Vũ\x0aLập Hạ\x0bTiểu Mã" + + "n\x0cMang Chủng\x09Hạ Chí\x0cTiểu Thử\x0cĐại Thử\x09Lập Thu\x0aXử Thử" + + "\x0bBạch Lộ\x09Thu Phân\x09Hàn Lộ\x0eSương Giáng\x0cLập Đông\x0eTiểu Tuy" + + "ết\x0eĐại Tuyết\x0bĐông Chí\x0bTiểu Hàn\x0bĐại Hàn\x09Giáp Tý\x0aẤt Sử" + + "u\x0bBính Dần\x0aĐinh Mão\x0bMậu Thìn\x09Kỷ Tỵ\x0aCanh Ngọ\x09Tân Mùi" + + "\x0bNhâm Thân\x0aQuý Dậu\x0cGiáp Tuất\x0aẤt Hợi\x09Bính Tý\x0bĐinh Sửu" + + "\x0bMậu Dần\x09Kỷ Mão\x0aCanh Thìn\x09Tân Tỵ\x0bNhâm Ngọ\x09Quý Mùi\x0bG" + + "iáp Thân\x0aẤt Dậu\x0cBính Tuất\x0bĐinh Hợi\x09Mậu Tý\x0aKỷ Sửu\x0aCanh " + + "Dần\x09Tân Mão\x0bNhâm Thìn\x09Quý Tỵ\x0bGiáp Ngọ\x09Ất Mùi\x0bBính Thân" + + "\x0bĐinh Dậu\x0cMậu Tuất\x0aKỷ Hợi\x08Canh Tý\x0aTân Sửu\x0bNhâm Dần\x09" + + "Quý Mão\x0bGiáp Thìn\x09Ất Tỵ\x0bBính Ngọ\x0aĐinh Mùi\x0bMậu Thân\x0aKỷ " + + "Dậu\x0bCanh Tuất\x0aTân Hợi\x09Nhâm Tý\x0aQuý Sửu\x0bGiáp Dần\x09Ất Mão" + + "\x0bBính Thìn\x0aĐinh Tỵ\x0bMậu Ngọ\x09Kỷ Mùi\x0aCanh Thân\x0aTân Dậu" + + "\x0cNhâm Tuất\x0aQuý Hợi\x1eEEEE, 'ngày' dd MMMM 'năm' U\x1e'Ngày' dd 't" + + "háng' M 'năm' U\x07dd-MM U'EEEE, 'ngày' dd 'tháng' MM 'năm' y G 'Ngày' d" + + "d 'tháng' M 'năm' y G\x0e{1} 'lúc' {0}\x05thg 1\x05thg 2\x05thg 3\x05thg" + + " 4\x05thg 5\x05thg 6\x05thg 7\x05thg 8\x05thg 9\x06thg 10\x06thg 11\x06t" + + "hg 12\x08tháng 1\x08tháng 2\x08tháng 3\x08tháng 4\x08tháng 5\x08tháng 6" + + "\x08tháng 7\x08tháng 8\x08tháng 9\x09tháng 10\x09tháng 11\x09tháng 12" + + "\x05Thg 1\x05Thg 2\x05Thg 3\x05Thg 4\x05Thg 5\x05Thg 6\x05Thg 7\x05Thg 8" + + "\x05Thg 9\x06Thg 10\x06Thg 11\x06Thg 12\x08Tháng 1\x08Tháng 2\x08Tháng 3" + + "\x08Tháng 4\x08Tháng 5\x08Tháng 6\x08Tháng 7\x08Tháng 8\x08Tháng 9\x09Th" + + "áng 10\x09Tháng 11\x09Tháng 12\x02CN\x04Th 2\x04Th 3\x04Th 4\x04Th 5" + + "\x04Th 6\x04Th 7\x02T2\x02T3\x02T4\x02T5\x02T6\x02T7\x0cChủ Nhật\x09Thứ " + + "Hai\x08Thứ Ba\x09Thứ Tư\x0aThứ Năm\x0aThứ Sáu\x0bThứ Bảy\x06Quý 1\x06Quý" + + " 2\x06Quý 3\x06Quý 4\x06quý 1\x06quý 2\x06quý 3\x06quý 4\x0bnửa đêm\x02T" + + "R\x02CH\x05sáng\x07chiều\x05tối\x05đêm\x05trưa\x0bTrước CN\x06sau CN\x06" + + "tr. CN\x0eTrước R.O.C\x06R.O.C.\x0dthời đại\x04Năm\x0bnăm ngoái\x08năm n" + + "ay\x08năm sau\x12sau {0} năm nữa\x11{0} năm trước\x04Quý\x0dquý trước" + + "\x09quý này\x08quý sau\x12sau {0} quý nữa\x11{0} quý trước\x06Tháng\x0ft" + + "háng trước\x0btháng này\x0atháng sau\x14sau {0} tháng nữa\x13{0} tháng t" + + "rước\x06Tuần\x0ftuần trước\x0btuần này\x0atuần sau\x14sau {0} tuần nữa" + + "\x13{0} tuần trước\x0atuần {0}\x13tuần trong tháng\x05Ngày\x08Hôm kia" + + "\x08Hôm qua\x08Hôm nay\x09Ngày mai\x09Ngày kia\x13sau {0} ngày nữa\x12{0" + + "} ngày trước\x10ngày trong năm\x12ngày trong tuần\x1cngày thường trong t" + + "háng\x1cChủ Nhật tuần trước\x18Chủ Nhật tuần này\x17Chủ Nhật tuần sau" + + "\x1asau {0} Chủ Nhật nữa\x19{0} Chủ Nhật trước\x19Thứ Hai tuần trước\x15" + + "Thứ Hai tuần này\x14Thứ Hai tuần sau\x17sau {0} Thứ Hai nữa\x16{0} Thứ H" + + "ai trước\x18Thứ Ba tuần trước\x14Thứ Ba tuần này\x13Thứ Ba tuần sau\x16s" + + "au {0} Thứ Ba nữa\x15{0} Thứ Ba trước\x19Thứ Tư tuần trước\x15Thứ Tư tuầ" + + "n này\x14Thứ Tư tuần sau\x17sau {0} Thứ Tư nữa\x16{0} Thứ Tư trước\x1aTh" + + "ứ Năm tuần trước\x16Thứ Năm tuần này\x15Thứ Năm tuần sau\x18sau {0} Th" + + "ứ Năm nữa\x17{0} Thứ Năm trước\x1aThứ Sáu tuần trước\x16Thứ Sáu tuần n" + + "ày\x15Thứ Sáu tuần sau\x18sau {0} Thứ Sáu nữa\x17{0} Thứ Sáu trước\x1bT" + + "hứ Bảy tuần trước\x17Thứ Bảy tuần này\x16Thứ Bảy tuần sau\x19sau {0} Thứ" + + " Bảy nữa\x18{0} Thứ Bảy trước\x05SA/CH\x05Giờ\x0agiờ này\x13sau {0} giờ " + + "nữa\x12{0} giờ trước\x05Phút\x0aphút này\x13sau {0} phút nữa\x12{0} phút" + + " trước\x05Giây\x0abây giờ\x13sau {0} giây nữa\x12{0} giây trước\x0aMúi g" + + "iờ\x09Giờ {0}\x12Giờ mùa hè {0}\x11Giờ chuẩn {0}\x1eGiờ Phối hợp Quốc tế" + + "\x12Giờ Mùa Hè Anh\x14Giờ chuẩn Ai-len\x0aGiờ Acre\x12Giờ Chuẩn Acre\x13" + + "Giờ Mùa Hè Acre\x11Giờ Afghanistan\x0fGiờ Trung Phi\x10Giờ Đông Phi\x15G" + + "iờ Chuẩn Nam Phi\x0eGiờ Tây Phi\x16Giờ Chuẩn Tây Phi\x17Giờ Mùa Hè Tây P" + + "hi\x0cGiờ Alaska\x14Giờ Chuẩn Alaska\x15Giờ Mùa Hè Alaska\x0cGiờ Almaty" + + "\x14Giờ Chuẩn Almaty\x15Giờ Mùa Hè Almaty\x0cGiờ Amazon\x14Giờ Chuẩn Ama" + + "zon\x15Giờ Mùa Hè Amazon\x12Giờ miền Trung\x1aGiờ chuẩn miền Trung\x1bGi" + + "ờ mùa hè miền Trung\x13Giờ miền Đông\x1bGiờ chuẩn miền Đông\x1cGiờ mùa" + + " hè miền Đông\x11Giờ miền núi\x19Giờ chuẩn miền núi\x1aGiờ mùa hè miền n" + + "úi\x19Giờ Thái Bình Dương!Giờ chuẩn Thái Bình Dương\"Giờ mùa hè Thái Bì" + + "nh Dương\x0cGiờ Anadyr\x14Giờ Chuẩn Anadyr\x15Giờ mùa hè Anadyr\x0aGiờ A" + + "pia\x12Giờ Chuẩn Apia\x13Giờ Mùa Hè Apia\x0bGiờ Aqtau\x13Giờ Chuẩn Aqtau" + + "\x14Giờ Mùa Hè Aqtau\x0cGiờ Aqtobe\x14Giờ Chuẩn Aqtobe\x15Giờ Mùa Hè Aqt" + + "obe\x0fGiờ Ả Rập\x17Giờ chuẩn Ả Rập\x18Giờ Mùa Hè Ả Rập\x0fGiờ Argentina" + + "\x17Giờ Chuẩn Argentina\x18Giờ Mùa Hè Argentina\x1bGiờ miền tây Argentin" + + "a#Giờ chuẩn miền tây Argentina$Giờ mùa hè miền tây Argentina\x0dGiờ Arme" + + "nia\x15Giờ Chuẩn Armenia\x16Giờ Mùa Hè Armenia\x19Giờ Đại Tây Dương!Giờ " + + "Chuẩn Đại Tây Dương\"Giờ mùa hè Đại Tây Dương\x1cGiờ Miền Trung Australi" + + "a$Giờ Chuẩn Miền Trung Australia%Giờ Mùa Hè Miền Trung Australia!Giờ Miề" + + "n Trung Tây Australia)Giờ Chuẩn Miền Trung Tây Australia*Giờ Mùa Hè Miền" + + " Trung Tây Australia\x1dGiờ Miền Đông Australia%Giờ Chuẩn Miền Đông Aust" + + "ralia&Giờ Mùa Hè Miền Đông Australia\x1bGiờ Miền Tây Australia#Giờ Chuẩn" + + " Miền Tây Australia$Giờ Mùa Hè Miền Tây Australia\x10Giờ Azerbaijan\x18G" + + "iờ Chuẩn Azerbaijan\x19Giờ Mùa Hè Azerbaijan\x0cGiờ Azores\x14Giờ Chuẩn " + + "Azores\x15Giờ Mùa Hè Azores\x10Giờ Bangladesh\x18Giờ Chuẩn Bangladesh" + + "\x19Giờ Mùa Hè Bangladesh\x0cGiờ Bhutan\x0dGiờ Bolivia\x0eGiờ Brasilia" + + "\x16Giờ Chuẩn Brasilia\x17Giờ Mùa Hè Brasilia\x17Giờ Brunei Darussalam" + + "\x10Giờ Cape Verde\x18Giờ Chuẩn Cape Verde\x19Giờ Mùa Hè Cape Verde\x0eG" + + "iờ Chamorro\x0dGiờ Chatham\x15Giờ Chuẩn Chatham\x16Giờ Mùa Hè Chatham" + + "\x0bGiờ Chile\x13Giờ Chuẩn Chile\x14Giờ Mùa Hè Chile\x12Giờ Trung Quốc" + + "\x1aGiờ Chuẩn Trung Quốc\x1bGiờ Mùa Hè Trung Quốc\x10Giờ Choibalsan\x18G" + + "iờ Chuẩn Choibalsan\x19Giờ Mùa Hè Choibalsan\x16Giờ Đảo Christmas\x19Giờ" + + " Quần Đảo Cocos\x0eGiờ Colombia\x16Giờ Chuẩn Colombia\x17Giờ Mùa Hè Colo" + + "mbia\x18Giờ Quần Đảo Cook Giờ Chuẩn Quần Đảo Cook'Giờ Nửa Mùa Hè Quần Đả" + + "o Cook\x0aGiờ Cuba\x12Giờ Chuẩn Cuba\x13Giờ Mùa Hè Cuba\x0bGiờ Davis\x18" + + "Giờ Dumont-d’Urville\x12Giờ Đông Timor\x18Giờ Đảo Phục Sinh Giờ Chuẩn Đả" + + "o Phục Sinh!Giờ Mùa Hè Đảo Phục Sinh\x0dGiờ Ecuador\x0fGiờ Trung Âu\x17G" + + "iờ chuẩn Trung Âu\x18Giờ mùa hè Trung Âu\x10Giờ Đông Âu\x18Giờ chuẩn Đôn" + + "g Âu\x19Giờ mùa hè Đông Âu\x1dGiờ Châu Âu Viễn Đông\x0eGiờ Tây Âu\x16Giờ" + + " Chuẩn Tây Âu\x17Giờ mùa hè Tây Âu\x1cGiờ Quần Đảo Falkland$Giờ Chuẩn Qu" + + "ần Đảo Falkland%Giờ Mùa Hè Quần Đảo Falkland\x0aGiờ Fiji\x12Giờ Chuẩn " + + "Fiji\x13Giờ Mùa Hè Fiji\x1aGiờ Guiana thuộc Pháp%Giờ Nam Cực và Nam Nước" + + " Pháp\x0fGiờ Galapagos\x0dGiờ Gambier\x0cGiờ Gruzia\x14Giờ Chuẩn Gruzia" + + "\x15Giờ Mùa Hè Gruzia\x1bGiờ Quần Đảo Gilbert\x1bGiờ Trung bình Greenwic" + + "h\x1dGiờ Miền Đông Greenland%Giờ Chuẩn Miền Đông Greenland&Giờ Mùa Hè Mi" + + "ền Đông Greenland\x1bGiờ Miền Tây Greenland#Giờ Chuẩn Miền Tây Greenla" + + "nd$Giờ Mùa Hè Miền Tây Greenland\x12Giờ Chuẩn Guam\x1aGiờ Chuẩn Vùng Vịn" + + "h\x0cGiờ Guyana\x12Giờ Hawaii-Aleut\x1aGiờ Chuẩn Hawaii-Aleut\x1bGiờ Mùa" + + " Hè Hawaii-Aleut\x12Giờ Hồng Kông\x1aGiờ Chuẩn Hồng Kông\x1bGiờ Mùa Hè H" + + "ồng Kông\x0aGiờ Hovd\x12Giờ Chuẩn Hovd\x13Giờ Mùa Hè Hovd\x18Giờ Chuẩn" + + " Ấn Độ\x18Giờ Ấn Độ Dương\x14Giờ Đông Dương\x1cGiờ Miền Trung Indonesia" + + "\x1dGiờ Miền Đông Indonesia\x1bGiờ Miền Tây Indonesia\x0aGiờ Iran\x12Giờ" + + " Chuẩn Iran\x13Giờ Mùa Hè Iran\x0dGiờ Irkutsk\x15Giờ Chuẩn Irkutsk\x16Gi" + + "ờ Mùa Hè Irkutsk\x0cGiờ Israel\x14Giờ Chuẩn Israel\x15Giờ Mùa Hè Israe" + + "l\x12Giờ Nhật Bản\x1aGiờ Chuẩn Nhật Bản\x1bGiờ Mùa Hè Nhật Bản\x1eGiờ Pe" + + "tropavlovsk-Kamchatski&Giờ chuẩn Petropavlovsk-Kamchatski'Giờ mùa hè Pet" + + "ropavlovsk-Kamchatski\x1eGiờ Miền Đông Kazakhstan\x1cGiờ Miền Tây Kazakh" + + "stan\x11Giờ Hàn Quốc\x19Giờ Chuẩn Hàn Quốc\x1aGiờ Mùa Hè Hàn Quốc\x0cGiờ" + + " Kosrae\x11Giờ Krasnoyarsk\x19Giờ Chuẩn Krasnoyarsk\x1aGiờ Mùa Hè Krasno" + + "yarsk\x0fGiờ Kyrgystan\x0bGiờ Lanka\x18Giờ Quần Đảo Line\x0fGiờ Lord How" + + "e\x17Giờ Chuẩn Lord Howe\x18Giờ Mùa Hè Lord Howe\x0cGiờ Ma Cao\x14Giờ Ch" + + "uẩn Ma Cao\x15Giờ Mùa Hè Ma Cao\x16Giờ đảo Macquarie\x0dGiờ Magadan\x15G" + + "iờ Chuẩn Magadan\x16Giờ mùa hè Magadan\x0eGiờ Malaysia\x0eGiờ Maldives" + + "\x0fGiờ Marquesas\x1cGiờ Quần Đảo Marshall\x0fGiờ Mauritius\x17Giờ Chuẩn" + + " Mauritius\x18Giờ Mùa Hè Mauritius\x0cGiờ Mawson\x17Giờ Tây Bắc Mexico" + + "\x1fGiờ Chuẩn Tây Bắc Mexico Giờ Mùa Hè Tây Bắc Mexico Giờ Thái Bình Dươ" + + "ng Mexico(Giờ Chuẩn Thái Bình Dương Mexico)Giờ Mùa Hè Thái Bình Dương Me" + + "xico\x10Giờ Ulan Bator\x18Giờ chuẩn Ulan Bator\x19Giờ mùa hè Ulan Bator" + + "\x0fGiờ Matxcơva\x17Giờ Chuẩn Matxcơva\x18Giờ Mùa Hè Matxcơva\x0dGiờ Mya" + + "nmar\x0bGiờ Nauru\x0bGiờ Nepal\x13Giờ New Caledonia\x1bGiờ Chuẩn New Cal" + + "edonia\x1cGiờ Mùa Hè New Caledonia\x11Giờ New Zealand\x19Giờ Chuẩn New Z" + + "ealand\x1aGiờ Mùa Hè New Zealand\x12Giờ Newfoundland\x1aGiờ Chuẩn Newfou" + + "ndland\x1bGiờ Mùa Hè Newfoundland\x0aGiờ Niue\x14Giờ đảo Norfolk\x19Giờ " + + "Fernando de Noronha!Giờ Chuẩn Fernando de Noronha\"Giờ Mùa Hè Fernando d" + + "e Noronha!Giờ Quần Đảo Bắc Mariana\x11Giờ Novosibirsk\x19Giờ chuẩn Novos" + + "ibirsk\x1aGiờ mùa hè Novosibirsk\x0aGiờ Omsk\x12Giờ chuẩn Omsk\x13Giờ mù" + + "a hè Omsk\x0eGiờ Pakistan\x16Giờ Chuẩn Pakistan\x17Giờ Mùa Hè Pakistan" + + "\x0bGiờ Palau\x16Giờ Papua New Guinea\x0eGiờ Paraguay\x16Giờ Chuẩn Parag" + + "uay\x17Giờ Mùa Hè Paraguay\x0aGiờ Peru\x12Giờ Chuẩn Peru\x13Giờ Mùa Hè P" + + "eru\x0fGiờ Philippin\x17Giờ Chuẩn Philippin\x18Giờ Mùa Hè Philippin\x1bG" + + "iờ Quần Đảo Phoenix\x1dGiờ St. Pierre và Miquelon%Giờ Chuẩn St. Pierre v" + + "à Miquelon(Giờ Mùa Hè Saint Pierre và Miquelon\x0eGiờ Pitcairn\x0cGiờ P" + + "onape\x15Giờ Bình Nhưỡng\x0fGiờ Qyzylorda\x17Giờ Chuẩn Qyzylorda\x18Giờ " + + "Mùa Hè Qyzylorda\x0dGiờ Reunion\x0dGiờ Rothera\x0eGiờ Sakhalin\x16Giờ Ch" + + "uẩn Sakhalin\x17Giờ mùa hè Sakhalin\x0cGiờ Samara\x14Giờ Chuẩn Samara" + + "\x15Giờ mùa hè Samara\x0bGiờ Samoa\x13Giờ Chuẩn Samoa\x15Giờ ban ngày Sa" + + "moa\x10Giờ Seychelles\x0fGiờ Singapore\x1bGiờ Quần Đảo Solomon\x11Giờ Na" + + "m Georgia\x0eGiờ Suriname\x0bGiờ Syowa\x0cGiờ Tahiti\x11Giờ Đài Bắc\x19G" + + "iờ Chuẩn Đài Bắc\x1aGiờ Mùa Hè Đài Bắc\x10Giờ Tajikistan\x0dGiờ Tokelau" + + "\x0bGiờ Tonga\x13Giờ Chuẩn Tonga\x14Giờ Mùa Hè Tonga\x0bGiờ Chuuk\x12Giờ" + + " Turkmenistan\x1aGiờ Chuẩn Turkmenistan\x1bGiờ Mùa Hè Turkmenistan\x0cGi" + + "ờ Tuvalu\x0dGiờ Uruguay\x15Giờ Chuẩn Uruguay\x16Giờ Mùa Hè Uruguay\x10" + + "Giờ Uzbekistan\x18Giờ Chuẩn Uzbekistan\x19Giờ Mùa Hè Uzbekistan\x0dGiờ V" + + "anuatu\x15Giờ Chuẩn Vanuatu\x16Giờ Mùa Hè Vanuatu\x0fGiờ Venezuela\x11Gi" + + "ờ Vladivostok\x19Giờ Chuẩn Vladivostok\x1aGiờ mùa hè Vladivostok\x0fGi" + + "ờ Volgograd\x17Giờ Chuẩn Volgograd\x18Giờ Mùa Hè Volgograd\x0cGiờ Vost" + + "ok\x11Giờ Đảo Wake\x17Giờ Wallis và Futuna\x0dGiờ Yakutsk\x15Giờ Chuẩn Y" + + "akutsk\x16Giờ mùa hè Yakutsk\x13Giờ Yekaterinburg\x1bGiờ Chuẩn Yekaterin" + + "burg\x1cGiờ mùa hè Yekaterinburg" + +var bucket120 string = "" + // Size: 15604 bytes + "\x16G y MMMM'a' 'd'. d'id'\x0aG y MMM. d\x05yanul\x05febul\x06mäzul\x06p" + + "rilul\x05mayul\x05yunul\x05yulul\x06gustul\x05setul\x05tobul\x05novul" + + "\x05dekul\x05sudel\x05mudel\x05tudel\x05vedel\x06dödel\x06fridel\x06zäde" + + "l\x03Yf1\x03Yf2\x03Yf3\x03Yf4\x0e1id yelafoldil\x0e2id yelafoldil\x0e3id" + + " yelafoldil\x0e4id yelafoldil\x09b. t. kr.\x09p. t. kr.\x14y MMMM'a' 'd'" + + ". d'id'\x08y MMM. d\x03yel\x06äyelo\x05ayelo\x05oyelo\x03mul\x06ämulo" + + "\x05amulo\x05omulo\x03vig\x06ävigo\x05avigo\x05ovigo\x05edelo\x06ädelo" + + "\x05adelo\x05odelo\x05udelo\x07vodabel\x07delalaf\x04düp\x05sekun\x06Jen" + + "ner\x06Hornig\x06Märze\x07Abrille\x05Meije\x08Bráčet\x06Heiwet\x08Öigšte" + + "\x0dHerbštmánet\x09Wímánet\x0cWintermánet\x0dChrištmánet\x07Sunntag\x07M" + + "äntag\x07Zištag\x08Mittwuč\x08Fróntag\x06Fritag\x08Samštag\x06Epoča\x04" + + "Jár\x0aI {0} jár\x0cvor {0} jár\x0ccor {0} jár\x06Mánet\x0cI {0} mánet" + + "\x0evor {0} mánet\x05Wuča\x0bi {0} wuča\x0ci {0} wučä\x0dvor {0} wuča" + + "\x0ecor {0} wučä\x0aVorgešter\x07Gešter\x05Hitte\x05Móre\x09Ubermóre\x09" + + "i {0} tag\x0ai {0} täg\x0bvor {0} tag\x0cvor {0} täg\x08Wučetag\x0bi {0}" + + " stund\x0ci {0} stunde\x0dvor {0} stund\x0evor {0} stunde\x09Mínütta\x0d" + + "i {0} minüta\x0di {0} minüte\x0fvor {0} minüta\x0fvor {0} minüte\x07Seku" + + "nda\x0ci {0} sekund\x0di {0} sekunde\x0evor {0} sekund\x0fvor {0} sekund" + + "e\x08Zitzóna\x07{0} zit\x0eAtlantiši Zit\x16Atlantiši Standardzit\x14Atl" + + "antiši Summerzit\x15Mitteleuropäiši Zit\x1dMitteleuropäiši Standardzit" + + "\x1bMitteleuropäiši Summerzit\x13Ošteuropäiši Zit\x1bOšteuropäiši Standa" + + "rdzit\x19Ošteuropäiši Summerzit\x14Wešteuropäiši Zit\x1cWešteuropäiši St" + + "andardzit\x1aWešteuropäiši Summerzit\x10EEEE, d MMM, y G\x0c{1} 'ci' {0}" + + "\x08Samwiyee\x08Fewriyee\x04Mars\x05Awril\x03Mee\x04Suwe\x05Sulet\x02Ut" + + "\x0aSàttumbar\x08Oktoobar\x09Nowàmbar\x09Desàmbar\x03Mee\x02Ut\x03Dib" + + "\x03Alt\x03Tal\x04Àla\x03Alx\x04Àjj\x03Ase\x07Dibéer\x06Altine\x07Talaat" + + "a\x07Àlarba\x07Alxamis\x07Àjjuma\x05Aseer\x071er Tri\x062e Tri\x063e Tri" + + "\x064e Tri\x0d1er Trimestar\x0c2e Trimestar\x0c3e Trimestar\x0c4e Trimes" + + "tar\x03Sub\x03Ngo\x06av. JC\x02AD\x02JC\x0eEEEE, d MMM, y\x06jamono\x02a" + + "t\x03at.\x0cñeenti-weer\x04ñw.\x04weer\x03we.\x07ayu-bis\x06ayu-b.\x03fa" + + "n\x05démb\x03tay\x04suba\x0cbisu ayu-bis\x07Sub/Ngo\x05waxtu\x04wxt.\x06" + + "simili\x04saa.\x0agoxu waxtu CUT (waxtu iniwelsel yuñ boole)\x14CT (waxt" + + "u sàntaral)\"CST (waxtu estàndaaru sàntaraal)\x1fCDT (waxtu bëccëgu sànt" + + "araal\x0eET waxtu penku\x1dEST (waxtu estàndaaru penku)\x1bEDT (waxtu bë" + + "ccëgu penku)\x10MT (waxtu tundu)\x1dMST (waxtu estàndaaru tundu)\x1bMDT " + + "(waxtu bëccëgu tundu)\x12PT (waxtu pasifik)\x1fPST (waxtu estàndaaru pas" + + "ifik)\x1dPDT (waxtu bëccëgu pasifik)\x14AT (waxtu atlàntik)\x1dAST (waxt" + + "u estàndaaru penku)\x1fADT (waxtu bëccëgu atlàntik)\x1dCTE (waxtu ëroop " + + "sàntaraal)*CEST (waxtu estàndaaru ëroop sàntaraal)%CEST (waxtu ete wu ër" + + "oop sàntaraal)\x1aEET (waxtu ëroop u penku)'EEST (waxtu estàndaaru ëroop" + + " u penku)\"EEST (waxtu ete wu ëroop u penku)\x1eWET (waxtu ëroop u sowwu" + + "-jant,WEST (waxtu estàndaaru ëroop u sowwu-jant)'WEST (waxtu ete wu ëroo" + + "p u sowwu-jant)\x15GMT (waxtu Greenwich)\x04Sabi\x04Bala\x04Kubi\x04Kusa" + + "\x04Kuna\x04Kuta\x04Muka\x07Sabiiti\x06Balaza\x09Owokubili\x09Owokusatu" + + "\x07Olokuna\x0aOlokutaanu\x0aOlomukaaga\x19Ebisera ebyomwaka ebisoka\x1c" + + "Ebisera ebyomwaka ebyokubiri\x1cEbisera ebyomwaka ebyokusatu\x1aEbisera " + + "ebyomwaka ebyokuna\x06Munkyo\x06Eigulo\x13Kulisto nga azilawo\x12Kulisto" + + " nga affile\x02AZ\x02AF\x08Emulembe\x08Esabiiti\x07Olunaku\x04Edho\x11Ol" + + "waleelo (leelo)\x05Enkyo\x13Olunaka lwa sabiiti\x0dmunkyo/Eigulo\x06Essa" + + "wa\x0bObutikitiki\x0bEssawa edha\x03o.1\x03o.2\x03o.3\x03o.4\x03o.5\x03o" + + ".6\x03o.7\x03o.8\x03o.9\x04o.10\x04o.11\x04o.12!pikítíkítie, oólí ú kutú" + + "an\x1dsiɛyɛ́, oóli ú kándíɛ!ɔnsúmbɔl, oóli ú kátátúɛ\x17mesiŋ, oóli ú ké" + + "nie\x1aensil, oóli ú kátánuɛ\x06ɔsɔn\x05efute\x07pisuyú\x0eimɛŋ i puɔs!i" + + "mɛŋ i putúk,oóli ú kátíɛ\x0amakandikɛ\x0bpilɔndɔ́\x02sd\x02md\x02mw\x02e" + + "t\x02kl\x02fl\x02ss\x0asɔ́ndiɛ\x07móndie\x11muányáŋmóndie\x0emetúkpíápɛ" + + "\x14kúpélimetúkpiapɛ\x07feléte\x08séselé\x0bndátúɛ 1\x0bndátúɛ 2\x0bndát" + + "úɛ 3\x0bndátúɛ 4\x0ckiɛmɛ́ɛm\x0bkisɛ́ndɛ\x13katikupíen Yésuse\x16ékélém" + + "kúnupíén n\x0akipéŋén\x07yɔɔŋ\x05oóli\x0bpuɔ́sɛ́\x07púyoó\x06ínaan\x09na" + + "kinyám\x16metúk mɔ́sɔ́ndiɛ\x18kiɛmɛ́ɛm,kisɛ́ndɛ\x09kisikɛl,\x06minít\x07" + + "síkɛn\x1dkinúki kisikɛl ɔ́ pitɔŋ\x10יאַנואַר\x12פֿעברואַר\x08מערץ\x0eאַפ" + + "ּריל\x06מיי\x08יוני\x08יולי\x0eאויגוסט\x14סעפּטעמבער\x0eאקטאבער\x12נאוו" + + "עמבער\x10דעצעמבער\x08יאַנ\x08פֿעב\x0aאַפּר\x08אויג\x08סעפּ\x06אקט\x08נא" + + "וו\x06דעצ\x0cזונטיק\x0eמאָנטיק\x0eדינסטיק\x0eמיטוואך\x12דאנערשטיק\x10פֿ" + + "רײַטיק\x06שבת\x16פֿאַרמיטאָג\x14נאָכמיטאָג\x12EEEE, dטן MMMM y\x0cdטן M" + + "MMM y\x0bdטן MMM y\x04תש\x04חש\x04כס\x04טב\x04שב\x04אא\x04אד\x03א2\x04ני" + + "\x04אי\x04סי\x04תמ\x04אב\x04אל\x04אב\x0aלבה״ע\x0cתקופֿה\x08יאָר\x16פֿאַר" + + "אַיאָר\x0fהײַ יאָר\x16איבער א יאָר\x17איבער {0} יאָר\x17פֿאַר {0} יאָר" + + "\x0cמאנאַט#פֿאַרגאנגענעם חודש\x0fדעם חודש\x1bקומענדיקן חודש\x17איבער {0}" + + " חודש\x19איבער {0} חדשים\x17פֿאַר {0} חודש\x19פֿאַר {0} חדשים\x08וואך" + + "\x08טאָג\x0aנעכטן\x0aהיינט\x0aמארגן\x1eאין {0} טאָג אַרום\x1cאין {0} טעג" + + " אַרום\x1fטאָג אין דער וואך\x0aמינוט\x0eסעקונדע\x10צײַטזאנע\x0eṢẹ́rẹ́" + + "\x08Èrèlè\x0cẸrẹ̀nà\x06Ìgbé\x09Ẹ̀bibi\x07Òkúdu\x09Agẹmọ\x06Ògún\x05Owewe" + + "\x0bỌ̀wàrà\x06Bélú\x0bỌ̀pẹ̀\x15Oṣù Ṣẹ́rẹ́\x0fOṣù Èrèlè\x13Oṣù Ẹrẹ̀nà\x0d" + + "Oṣù Ìgbé\x10Oṣù Ẹ̀bibi\x0eOṣù Òkúdu\x10Oṣù Agẹmọ\x0dOṣù Ògún\x0cOṣù Owew" + + "e\x12Oṣù Ọ̀wàrà\x0dOṣù Bélú\x12Oṣù Ọ̀pẹ̀\x07Àìkú\x04Ajé\x0bÌsẹ́gun\x0cỌj" + + "ọ́rú\x0dỌjọ́bọ\x06Ẹtì\x0dÀbámẹ́ta\x11Ọjọ́ Àìkú\x0eỌjọ́ Ajé\x15Ọjọ́ Ìsẹ" + + "́gun\x10Ọjọ́ Ẹtì\x17Ọjọ́ Àbámẹ́ta\x11Kọ́tà Kínní\x0fKọ́tà Kejì\x0dKọ́à " + + "Keta\x11Kọ́tà Kẹrin\x0aÀárọ̀\x09Ọ̀sán\x0bSaju Kristi\x0cLehin Kristi\x06" + + "Ìgbà\x07Ọdún\x04Osù\x08Ọ̀sè\x09Ọjọ́\x08íjẹta\x05Àná\x05Òní\x07Ọ̀la\x0aò" + + "túùnla\x15Ọjọ́ Ọ̀sẹ̀\x14Àárọ̀/ọ̀sán\x09wákàtí\x0bÌsẹ́jú\x13Ìsẹ́jú Ààyá" + + "\x16Ibi Àkókò Àgbáyé\x0bShɛ́rɛ́\x0aƐrɛ̀nà\x08Ɛ̀bibi\x07Agɛmɔ\x0aƆ̀wàrà" + + "\x09Ɔ̀pɛ̀\x11Oshù Shɛ́rɛ́\x0eOshù Èrèlè\x10Oshù Ɛrɛ̀nà\x0cOshù Ìgbé\x0eO" + + "shù Ɛ̀bibi\x0dOshù Òkúdu\x0dOshù Agɛmɔ\x0cOshù Ògún\x0bOshù Owewe\x10Osh" + + "ù Ɔ̀wàrà\x0cOshù Bélú\x0fOshù Ɔ̀pɛ̀\x0aÌsɛ́gun\x0aƆjɔ́rú\x0aƆjɔ́bɔ\x05Ɛ" + + "tì\x0cÀbámɛ́ta\x0fƆjɔ́ Àìkú\x0cƆjɔ́ Ajé\x12Ɔjɔ́ Ìsɛ́gun\x0dƆjɔ́ Ɛtì\x14Ɔ" + + "jɔ́ Àbámɛ́ta\x10Kɔ́tà Kínní\x0eKɔ́tà Kejì\x0cKɔ́à Keta\x0fKɔ́tà Kɛrin" + + "\x09Àárɔ̀\x08Ɔ̀sán\x06Ɔdún\x07Ɔ̀sè\x07Ɔjɔ́\x07íjɛta\x06Ɔ̀la\x11Ɔjɔ́ Ɔ̀sɛ" + + "̀\x12Àárɔ̀/ɔ̀sán\x0aÌsɛ́jú\x12Ìsɛ́jú Ààyá\x06佛曆\x11U (r) 年MMMdEEEE\x0dU" + + " (r) 年MMMd\x08r年MMMd\x05r/M/d\x05U/M/d\x13G y年M月d日 EEEE\x0eG y年M月d日\x07G" + + " y/M/d\x06{1}{0}\x09星期日\x09星期一\x09星期二\x09星期三\x09星期四\x09星期五\x09星期六\x07第1季" + + "\x07第2季\x07第3季\x07第4季\x06午夜\x06上午\x06下午\x06清晨\x06朝早\x06中午\x06下晝\x06夜晚" + + "\x06凌晨\x09西元前\x09公元前\x06西元\x06公元\x11y年M月d日 EEEE\x0fah:mm:ss [zzzz]\x0cah" + + ":mm:ss [z]\x08ah:mm:ss\x05ah:mm\x0c提斯利月\x0c瑪西班月\x0c基斯流月\x09提別月\x0c細罷特月" + + "\x0b亞達月 I\x09亞達月\x0c亞達月 II\x09尼散月\x09以珥月\x09西彎月\x0c搭模斯月\x09埃波月\x09以祿月" + + "\x0c創世紀元\x0c制檀邏月\x0c吠舍佉月\x0c逝瑟吒月\x0c頞沙荼月\x0f室羅伐拏月\x0f婆羅鉢陀月\x12頞涇縛庚闍月\x0f" + + "迦剌底迦月\x0f末伽始羅月\x09報沙月\x09磨祛月\x0f頗勒窶拏月\x09印度曆\x0f穆哈蘭姆月\x0c色法爾月\x0b賴比月 I" + + "\x0c賴比月 II\x0e主馬達月 I\x0f主馬達月 II\x0c賴哲卜月\x0c舍爾邦月\x0c賴買丹月\x0c閃瓦魯月\x12都爾喀爾德" + + "月\x0f都爾黑哲月\x0c伊斯蘭曆\x09波斯曆\x09民國前\x06民國\x12Gy年M月d日 EEEE\x06年代\x06舊年\x06" + + "今年\x06下年\x03季\x09上一季\x06今季\x09下一季\x0a{0} 季後\x0a{0} 季前\x06上季\x06下季\x09上" + + "個月\x09今個月\x09下個月\x0d{0} 個月後\x0d{0} 個月前\x09上星期\x0c今個星期\x09下星期\x10{0} 個星" + + "期後\x10{0} 個星期前\x0c{0}嘅星期\x06月週\x06前天\x06尋日\x06今日\x06聽日\x06後天\x06年日\x06" + + "週天\x09月平日\x0c上星期日\x0f今個星期日\x0c下星期日\x13{0} 個星期日後\x13{0} 個星期日前\x0c上星期一" + + "\x0f今個星期一\x0c下星期一\x13{0} 個星期一後\x13{0} 個星期一前\x0c上星期二\x0f今個星期二\x0c下星期二\x13" + + "{0} 個星期二後\x13{0} 個星期二前\x0c上星期三\x0f今個星期三\x0c下星期三\x13{0} 個星期三後\x13{0} 個星期三" + + "前\x0c上星期四\x0f今個星期四\x0c下星期四\x13{0} 個星期四後\x13{0} 個星期四前\x0c上星期五\x0f今個星期五" + + "\x0c下星期五\x13{0} 個星期五後\x13{0} 個星期五前\x0c上星期六\x0f今個星期六\x0c下星期六\x13{0} 個星期六後" + + "\x13{0} 個星期六前\x0d上午/下午\x06小時\x0c呢個小時\x0d{0} 小時後\x0d{0} 小時前\x06分鐘\x09呢分鐘" + + "\x0d{0} 分鐘後\x0d{0} 分鐘前\x06宜家\x06時區\x12協調世界時間\x12英國夏令時間\x15愛爾蘭標準時間\x0c艾克時" + + "間\x12艾克標準時間\x12艾克夏令時間\x0f阿富汗時間\x0c中非時間\x0c東非時間\x12南非標準時間\x0c西非時間\x12西非" + + "標準時間\x12西非夏令時間\x12阿拉斯加時間\x18阿拉斯加標準時間\x18阿拉斯加夏令時間\x12阿拉木圖時間\x18阿拉木圖標準時間" + + "\x18阿拉木圖夏令時間\x0f亞馬遜時間\x15亞馬遜標準時間\x15亞馬遜夏令時間\x0c中部時間\x12中部標準時間\x12中部夏令時間" + + "\x0c東部時間\x12東部標準時間\x12東部夏令時間\x0c山區時間\x12山區標準時間\x12山區夏令時間\x0f太平洋時間\x15太平洋" + + "標準時間\x15太平洋夏令時間\x12阿納德爾時間\x18阿那底河標準時間\x18阿那底河夏令時間\x0f阿皮亞時間\x15阿皮亞標準時間" + + "\x15阿皮亞夏令時間\x0f阿克陶時間\x15阿克陶標準時間\x15阿克陶夏令時間\x12阿克托比時間\x18阿克托比標準時間\x18阿克托比" + + "夏令時間\x0f阿拉伯時間\x15阿拉伯標準時間\x15阿拉伯夏令時間\x0f阿根廷時間\x15阿根廷標準時間\x15阿根廷夏令時間\x15" + + "阿根廷西部時間\x1b阿根廷西部標準時間\x1b阿根廷西部夏令時間\x12亞美尼亞時間\x18亞美尼亞標準時間\x18亞美尼亞夏令時間" + + "\x0f大西洋時間\x15大西洋標準時間\x15大西洋夏令時間\x12澳洲中部時間\x18澳洲中部標準時間\x18澳洲中部夏令時間\x15澳洲中" + + "西部時間\x1b澳洲中西部標準時間\x1b澳洲中西部夏令時間\x12澳洲東部時間\x18澳洲東部標準時間\x18澳洲東部夏令時間\x12澳洲" + + "西部時間\x18澳洲西部標準時間\x18澳洲西部夏令時間\x12亞塞拜然時間\x18亞塞拜然標準時間\x18亞塞拜然夏令時間\x15亞速爾群" + + "島時間\x1b亞速爾群島標準時間\x1b亞速爾群島夏令時間\x0f孟加拉時間\x15孟加拉標準時間\x15孟加拉夏令時間\x0c不丹時間" + + "\x12玻利維亞時間\x12巴西利亞時間\x18巴西利亞標準時間\x18巴西利亞夏令時間\x0c汶萊時間\x0f維德角時間\x15維德角標準時間" + + "\x15維德角夏令時間\x0f凱西站時間\x0f查莫洛時間\x12查坦群島時間\x18查坦群島標準時間\x18查坦群島夏令時間\x0c智利時間" + + "\x12智利標準時間\x12智利夏令時間\x0c中國時間\x12中國標準時間\x12中國夏令時間\x0f喬巴山時間\x15喬巴山標準時間\x15" + + "喬巴山夏令時間\x0f聖誕島時間\x15科科斯群島時間\x12哥倫比亞時間\x18哥倫比亞標準時間\x18哥倫比亞夏令時間\x12庫克群島時" + + "間\x18庫克群島標準時間\x1b庫克群島半夏令時間\x0c古巴時間\x12古巴標準時間\x12古巴夏令時間\x0f戴維斯時間\x15杜蒙杜" + + "比爾時間\x0f東帝汶時間\x12復活節島時間\x18復活節島標準時間\x18復活節島夏令時間\x0f厄瓜多時間\x0c中歐時間\x12中歐" + + "標準時間\x12中歐夏令時間\x0c東歐時間\x12東歐標準時間\x12東歐夏令時間\x12歐洲遠東時間\x0c西歐時間\x12西歐標準時間" + + "\x12西歐夏令時間\x15福克蘭群島時間\x1b福克蘭群島標準時間\x1b福克蘭群島夏令時間\x0c斐濟時間\x12斐濟標準時間\x12斐濟夏" + + "令時間\x15法屬圭亞那時間\x1b法國南方及南極時間\x18加拉巴哥群島時間\x15甘比爾群島時間\x0f喬治亞時間\x15喬治亞標準時間" + + "\x15喬治亞夏令時間\x18吉爾伯特群島時間\x18格林威治標準時間\x15格陵蘭東部時間\x1b格陵蘭東部標準時間\x1b格陵蘭東部夏令時間" + + "\x15格陵蘭西部時間\x1b格陵蘭西部標準時間\x1b格陵蘭西部夏令時間\x12關島標準時間\x1b波斯灣海域標準時間\x0f蓋亞那時間" + + "\x19夏威夷-阿留申時間\x1f夏威夷-阿留申標準時間\x1f夏威夷-阿留申夏令時間\x0c香港時間\x12香港標準時間\x12香港夏令時間" + + "\x0f科布多時間\x15科布多標準時間\x15科布多夏令時間\x12印度標準時間\x0f印度洋時間\x12印度支那時間\x12印尼中部時間" + + "\x12印尼東部時間\x12印尼西部時間\x0c伊朗時間\x12伊朗標準時間\x12伊朗夏令時間\x15伊爾庫次克時間\x1b伊爾庫次克標準時間" + + "\x1b伊爾庫次克夏令時間\x0f以色列時間\x15以色列標準時間\x15以色列夏令時間\x0c日本時間\x12日本標準時間\x12日本夏令時間" + + "!彼得羅巴甫洛夫斯克時間'彼得羅巴甫洛夫斯克標準時間-彼得羅巴甫洛夫斯克日光節約時間\x12東哈薩克時間\x12西哈薩克時間\x0c韓國時間" + + "\x12韓國標準時間\x12韓國夏令時間\x0f科斯瑞時間\x1e克拉斯諾亞爾斯克時間$克拉斯諾亞爾斯克標準時間$克拉斯諾亞爾斯克夏令時間" + + "\x12吉爾吉斯時間\x0c蘭卡時間\x12萊恩群島時間\x12豪勳爵島時間\x18豪勳爵島標準時間\x18豪勳爵島夏令時間\x0c澳門時間" + + "\x12澳門標準時間\x12澳門夏令時間\x0f麥覺理時間\x0f馬加丹時間\x15馬加丹標準時間\x15馬加丹夏令時間\x12馬來西亞時間" + + "\x12馬爾地夫時間\x12馬可薩斯時間\x15馬紹爾群島時間\x12模里西斯時間\x18模里西斯標準時間\x18模里西斯夏令時間\x0c莫森時" + + "間\x18墨西哥西北部時間\x1e墨西哥西北部標準時間\x1e墨西哥西北部夏令時間\x18墨西哥太平洋時間\x1e墨西哥太平洋標準時間" + + "\x1e墨西哥太平洋夏令時間\x12烏蘭巴托時間\x18烏蘭巴托標準時間\x18烏蘭巴托夏令時間\x0f莫斯科時間\x15莫斯科標準時間\x15" + + "莫斯科夏令時間\x0c緬甸時間\x0c諾魯時間\x0f尼泊爾時間\x18新喀里多尼亞時間\x1e新喀里多尼亞標準時間$新喀里多尼亞群島夏令時" + + "間\x0f紐西蘭時間\x15紐西蘭標準時間\x15紐西蘭夏令時間\x0f紐芬蘭時間\x15紐芬蘭標準時間\x15紐芬蘭夏令時間\x0f紐埃島" + + "時間\x12諾福克島時間$費爾南多 - 迪諾羅尼亞時間*費爾南多 - 迪諾羅尼亞標準時間*費爾南多 - 迪諾羅尼亞夏令時間\x1b北馬里亞納" + + "群島時間\x15新西伯利亞時間\x1b新西伯利亞標準時間\x1b新西伯利亞夏令時間\x12鄂木斯克時間\x18鄂木斯克標準時間\x18鄂木斯" + + "克夏令時間\x12巴基斯坦時間\x18巴基斯坦標準時間\x18巴基斯坦夏令時間\x0c帛琉時間\x1b巴布亞紐幾內亞時間\x0f巴拉圭時間" + + "\x15巴拉圭標準時間\x15巴拉圭夏令時間\x0c秘魯時間\x12秘魯標準時間\x12秘魯夏令時間\x0f菲律賓時間\x15菲律賓標準時間" + + "\x15菲律賓夏令時間\x12鳳凰群島時間$聖皮埃爾和密克隆群島時間*聖皮埃爾和密克隆群島標準時間*聖皮埃爾和密克隆群島夏令時間\x0f皮特肯時" + + "間\x0f波納佩時間\x0c平壤時間\x18克孜勒奧爾達時間\x1e克孜勒奧爾達標準時間\x1e克孜勒奧爾達夏令時間\x0f留尼旺時間" + + "\x0f羅瑟拉時間\x0f庫頁島時間\x15庫頁島標準時間\x15庫頁島夏令時間\x0f薩馬拉時間\x15薩馬拉標準時間\x15薩馬拉夏令時間" + + "\x0f薩摩亞時間\x15薩摩亞標準時間\x15薩摩亞夏令時間\x0f塞席爾時間\x15新加坡標準時間\x15索羅門群島時間\x12南喬治亞時間" + + "\x0f蘇利南時間\x12昭和基地時間\x0f大溪地時間\x0c台北時間\x12台北標準時間\x12台北夏令時間\x0f塔吉克時間\x15托克勞" + + "群島時間\x0c東加時間\x12東加標準時間\x12東加夏令時間\x0f楚克島時間\x0f土庫曼時間\x15土庫曼標準時間\x15土庫曼夏令" + + "時間\x0f吐瓦魯時間\x0f烏拉圭時間\x15烏拉圭標準時間\x15烏拉圭夏令時間\x12烏茲別克時間\x18烏茲別克標準時間\x18烏茲" + + "別克夏令時間\x0f萬那杜時間\x15萬那杜標準時間\x15萬那杜夏令時間\x12委內瑞拉時間\x0f海參崴時間\x15海參崴標準時間" + + "\x15海參崴夏令時間\x15伏爾加格勒時間\x1b伏爾加格勒標準時間\x1b伏爾加格勒夏令時間\x12沃斯托克時間\x0f威克島時間!瓦利斯和" + + "富圖納群島時間\x12雅庫次克時間\x18雅庫次克標準時間\x18雅庫次克夏令時間\x15葉卡捷琳堡時間\x1b葉卡捷琳堡標準時間\x1b葉" + + "卡捷琳堡夏令時間\x0c玛西班月\x09提别月\x0c细罢特月\x0b亚达月 I\x09亚达月\x0c亚达月 II\x09西弯月\x09以禄" + + "月\x0c今个星期\x06寻日\x06听日\x06后天\x0f今个星期日\x0f今个星期一\x0f今个星期二\x0f今个星期三\x0f今个星" + + "期四\x0f今个星期五\x0f今个星期六\x06昨天\x06今天\x06明天\x0c吠舍佉月\x0c頞沙荼月\x0f迦剌底迦月\x09磨祛月" + + "\x09這一季\x06本月!聖皮埃與密克隆群島時間'聖皮埃與密克隆群島標準時間'聖皮埃與密克隆群島夏令時間\x09本星期\x0c本星期日\x0c" + + "本星期一\x0c本星期二\x0c本星期三\x0c本星期四\x0c本星期五\x0c本星期六" + +var bucket121 string = "" + // Size: 8488 bytes + "\x06佛历\x06Gy-M-d\x06闰{0}\x0drU年MMMdEEEE\x09rU年MMMd\x12Gy年MM月d日EEEE\x0eGy" + + "年MM月d日\x06一月\x06二月\x06三月\x06四月\x06五月\x06六月\x06七月\x06八月\x06九月\x06十月\x09" + + "十一月\x09十二月\x06周日\x06周一\x06周二\x06周三\x06周四\x06周五\x06周六\x06下昼\x0dzzzz ah:" + + "mm:ss\x0az ah:mm:ss\x0c创世纪元\x0c制檀逻月\x0c吠舍佉月\x0c逝瑟咤月\x0c頞沙荼月\x0f室罗伐拏月\x0f" + + "婆罗钵陀月\x12頞泾缚庚阇月\x0f迦剌底迦月\x0f末伽始罗月\x09报沙月\x09磨祛月\x0f颇勒窭拏月\x09印度历\x0f穆哈兰" + + "姆月\x0c色法尔月\x0b赖比月 I\x0c赖比月 II\x0e主马达月 I\x0f主马达月 II\x0c赖哲卜月\x0c舍尔邦月\x0c" + + "赖买丹月\x0c闪瓦鲁月\x12都尔喀尔德月\x0f都尔黑哲月\x0c伊斯兰历\x09Gyy-MM-dd\x09波斯历\x07Gyy/M/d" + + "\x06旧年\x06今年\x06下年\x0a{0} 年后\x0a{0} 季后\x09上个月\x09今个月\x09下个月\x0d{0} 个月后" + + "\x0d{0} 个月前\x03周\x10{0} 个星期后\x10{0} 个星期前\x06月周\x0a{0} 日后\x06周天\x13{0} 个星" + + "期日后\x13{0} 个星期日前\x13{0} 个星期一后\x13{0} 个星期一前\x13{0} 个星期二后\x13{0} 个星期二前" + + "\x13{0} 个星期三后\x13{0} 个星期三前\x13{0} 个星期四后\x13{0} 个星期四前\x13{0} 个星期五后\x13{0}" + + " 个星期五前\x13{0} 个星期六后\x13{0} 个星期六前\x06小时\x0c呢个小时\x0d{0} 小时后\x0d{0} 小时前\x06" + + "分钟\x09呢分钟\x0d{0} 分钟后\x0d{0} 分钟前\x0a{0} 秒后\x06时区\x09{0}时间\x08{0} (+1)" + + "\x08{0} (+0)\x12协调世界时间\x12英国夏令时间\x15爱尔兰标准时间\x0c艾克时间\x12艾克标准时间\x12艾克夏令时间" + + "\x0f阿富汗时间\x0c中非时间\x0c东非时间\x12南非标准时间\x0c西非时间\x12西非标准时间\x12西非夏令时间\x12阿拉斯加时" + + "间\x18阿拉斯加标准时间\x18阿拉斯加夏令时间\x12阿拉木图时间\x18阿拉木图标准时间\x18阿拉木图夏令时间\x0f亚马逊时间" + + "\x15亚马逊标准时间\x15亚马逊夏令时间\x0c中部时间\x12中部标准时间\x12中部夏令时间\x0c东部时间\x12东部标准时间\x12" + + "东部夏令时间\x0c山区时间\x12山区标准时间\x12山区夏令时间\x0f太平洋时间\x15太平洋标准时间\x15太平洋夏令时间\x12阿" + + "纳德尔时间\x18阿那底河标准时间\x18阿那底河夏令时间\x0f阿皮亚时间\x15阿皮亚标准时间\x15阿皮亚夏令时间\x0f阿克陶时间" + + "\x15阿克陶标准时间\x15阿克陶夏令时间\x12阿克托比时间\x18阿克托比标准时间\x18阿克托比夏令时间\x0f阿拉伯时间\x15阿拉伯" + + "标准时间\x15阿拉伯夏令时间\x0f阿根廷时间\x15阿根廷标准时间\x15阿根廷夏令时间\x15阿根廷西部时间\x1b阿根廷西部标准时间" + + "\x1b阿根廷西部夏令时间\x12亚美尼亚时间\x18亚美尼亚标准时间\x18亚美尼亚夏令时间\x0f大西洋时间\x15大西洋标准时间\x15大" + + "西洋夏令时间\x12澳洲中部时间\x18澳洲中部标准时间\x18澳洲中部夏令时间\x15澳洲中西部时间\x1b澳洲中西部标准时间\x1b澳洲" + + "中西部夏令时间\x12澳洲东部时间\x18澳洲东部标准时间\x18澳洲东部夏令时间\x12澳洲西部时间\x18澳洲西部标准时间\x18澳洲西" + + "部夏令时间\x12亚塞拜然时间\x18亚塞拜然标准时间\x18亚塞拜然夏令时间\x15亚速尔群岛时间\x1b亚速尔群岛标准时间\x1b亚速尔" + + "群岛夏令时间\x0f孟加拉时间\x15孟加拉标准时间\x15孟加拉夏令时间\x0c不丹时间\x12玻利维亚时间\x12巴西利亚时间\x18巴" + + "西利亚标准时间\x18巴西利亚夏令时间\x0c汶莱时间\x0f维德角时间\x15维德角标准时间\x15维德角夏令时间\x0f凯西站时间" + + "\x0f查莫洛时间\x12查坦群岛时间\x18查坦群岛标准时间\x18查坦群岛夏令时间\x0c智利时间\x12智利标准时间\x12智利夏令时间" + + "\x0c中国时间\x12中国标准时间\x12中国夏令时间\x0f乔巴山时间\x15乔巴山标准时间\x15乔巴山夏令时间\x0f圣诞岛时间\x15" + + "科科斯群岛时间\x12哥伦比亚时间\x18哥伦比亚标准时间\x18哥伦比亚夏令时间\x12库克群岛时间\x18库克群岛标准时间\x1b库克群" + + "岛半夏令时间\x0c古巴时间\x12古巴标准时间\x12古巴夏令时间\x0f戴维斯时间\x15杜蒙杜比尔时间\x0f东帝汶时间\x12复活节" + + "岛时间\x18复活节岛标准时间\x18复活节岛夏令时间\x0f厄瓜多时间\x0c中欧时间\x12中欧标准时间\x12中欧夏令时间\x0c东欧" + + "时间\x12东欧标准时间\x12东欧夏令时间\x12欧洲远东时间\x0c西欧时间\x12西欧标准时间\x12西欧夏令时间\x15福克兰群岛时" + + "间\x1b福克兰群岛标准时间\x1b福克兰群岛夏令时间\x0c斐济时间\x12斐济标准时间\x12斐济夏令时间\x15法属圭亚那时间\x1b" + + "法国南方及南极时间\x18加拉巴哥群岛时间\x15甘比尔群岛时间\x0f乔治亚时间\x15乔治亚标准时间\x15乔治亚夏令时间\x18吉尔伯" + + "特群岛时间\x18格林威治标准时间\x15格陵兰东部时间\x1b格陵兰东部标准时间\x1b格陵兰东部夏令时间\x15格陵兰西部时间\x1b格" + + "陵兰西部标准时间\x1b格陵兰西部夏令时间\x12关岛标准时间\x1b波斯湾海域标准时间\x0f盖亚那时间\x19夏威夷-阿留申时间\x1f" + + "夏威夷-阿留申标准时间\x1f夏威夷-阿留申夏令时间\x0c香港时间\x12香港标准时间\x12香港夏令时间\x0f科布多时间\x15科布多" + + "标准时间\x15科布多夏令时间\x12印度标准时间\x0f印度洋时间\x12印度支那时间\x12印尼中部时间\x12印尼东部时间\x12印尼" + + "西部时间\x0c伊朗时间\x12伊朗标准时间\x12伊朗夏令时间\x15伊尔库次克时间\x1b伊尔库次克标准时间\x1b伊尔库次克夏令时间" + + "\x0f以色列时间\x15以色列标准时间\x15以色列夏令时间\x0c日本时间\x12日本标准时间\x12日本夏令时间!彼得罗巴甫洛夫斯克时间'" + + "彼得罗巴甫洛夫斯克标准时间-彼得罗巴甫洛夫斯克日光节约时间\x12东哈萨克时间\x12西哈萨克时间\x0c韩国时间\x12韩国标准时间" + + "\x12韩国夏令时间\x0f科斯瑞时间\x1e克拉斯诺亚尔斯克时间$克拉斯诺亚尔斯克标准时间$克拉斯诺亚尔斯克夏令时间\x12吉尔吉斯时间" + + "\x0c兰卡时间\x12莱恩群岛时间\x12豪勋爵岛时间\x18豪勋爵岛标准时间\x18豪勋爵岛夏令时间\x0c澳门时间\x12澳门标准时间" + + "\x12澳门夏令时间\x0f麦觉理时间\x0f马加丹时间\x15马加丹标准时间\x15马加丹夏令时间\x12马来西亚时间\x12马尔地夫时间" + + "\x12马可萨斯时间\x15马绍尔群岛时间\x12模里西斯时间\x18模里西斯标准时间\x18模里西斯夏令时间\x0c莫森时间\x18墨西哥西北" + + "部时间\x1e墨西哥西北部标准时间\x1e墨西哥西北部夏令时间\x18墨西哥太平洋时间\x1e墨西哥太平洋标准时间\x1e墨西哥太平洋夏令时" + + "间\x12乌兰巴托时间\x18乌兰巴托标准时间\x18乌兰巴托夏令时间\x0f莫斯科时间\x15莫斯科标准时间\x15莫斯科夏令时间\x0c" + + "缅甸时间\x0c诺鲁时间\x0f尼泊尔时间\x18新喀里多尼亚时间\x1e新喀里多尼亚标准时间$新喀里多尼亚群岛夏令时间\x0f纽西兰时间" + + "\x15纽西兰标准时间\x15纽西兰夏令时间\x0f纽芬兰时间\x15纽芬兰标准时间\x15纽芬兰夏令时间\x0f纽埃岛时间\x12诺福克岛时间" + + "$费尔南多 - 迪诺罗尼亚时间*费尔南多 - 迪诺罗尼亚标准时间*费尔南多 - 迪诺罗尼亚夏令时间\x1b北马里亚纳群岛时间\x15新西伯利亚时" + + "间\x1b新西伯利亚标准时间\x1b新西伯利亚夏令时间\x12鄂木斯克时间\x18鄂木斯克标准时间\x18鄂木斯克夏令时间\x12巴基斯坦时" + + "间\x18巴基斯坦标准时间\x18巴基斯坦夏令时间\x0c帛琉时间\x1b巴布亚纽几内亚时间\x0f巴拉圭时间\x15巴拉圭标准时间\x15" + + "巴拉圭夏令时间\x0c秘鲁时间\x12秘鲁标准时间\x12秘鲁夏令时间\x0f菲律宾时间\x15菲律宾标准时间\x15菲律宾夏令时间\x12" + + "凤凰群岛时间$圣皮埃尔和密克隆群岛时间*圣皮埃尔和密克隆群岛标准时间*圣皮埃尔和密克隆群岛夏令时间\x0f皮特肯时间\x0f波纳佩时间" + + "\x0c平壤时间\x18克孜勒奥尔达时间\x1e克孜勒奥尔达标准时间\x1e克孜勒奥尔达夏令时间\x0f留尼旺时间\x0f罗瑟拉时间\x0f库页" + + "岛时间\x15库页岛标准时间\x15库页岛夏令时间\x0f萨马拉时间\x15萨马拉标准时间\x15萨马拉夏令时间\x0f萨摩亚时间\x15萨" + + "摩亚标准时间\x15萨摩亚夏令时间\x0f塞席尔时间\x15新加坡标准时间\x15索罗门群岛时间\x12南乔治亚时间\x0f苏利南时间" + + "\x12昭和基地时间\x0f大溪地时间\x0c台北时间\x12台北标准时间\x12台北夏令时间\x0f塔吉克时间\x15托克劳群岛时间\x0c东" + + "加时间\x12东加标准时间\x12东加夏令时间\x0f楚克岛时间\x0f土库曼时间\x15土库曼标准时间\x15土库曼夏令时间\x0f吐瓦鲁" + + "时间\x0f乌拉圭时间\x15乌拉圭标准时间\x15乌拉圭夏令时间\x12乌兹别克时间\x18乌兹别克标准时间\x18乌兹别克夏令时间" + + "\x0f万那杜时间\x15万那杜标准时间\x15万那杜夏令时间\x12委内瑞拉时间\x0f海参崴时间\x15海参崴标准时间\x15海参崴夏令时间" + + "\x15伏尔加格勒时间\x1b伏尔加格勒标准时间\x1b伏尔加格勒夏令时间\x12沃斯托克时间\x0f威克岛时间!瓦利斯和富图纳群岛时间\x12" + + "雅库次克时间\x18雅库次克标准时间\x18雅库次克夏令时间\x15叶卡捷琳堡时间\x1b叶卡捷琳堡标准时间\x1b叶卡捷琳堡夏令时间" + + "\x06二月\x06三月\x06四月\x06五月\x06六月\x06七月\x06八月\x06九月\x06十月\x09十一月\x09十三月\x09" + + "闰七月\x06本月\x0f{0}夏令时间\x0f{0}标准时间" + +var bucket122 string = "" + // Size: 8232 bytes + "\x0f科普特历前\x0c科普特历\x15埃塞俄比亚历前\x12埃塞俄比亚历$埃塞俄比亚阿米特阿莱姆历\x071季度\x072季度\x073季度" + + "\x074季度\x0c第一季度\x0c第二季度\x0c第三季度\x0c第四季度\x06早上\x06晚上\x0c希伯来历\x12大化 (645–6" + + "50)\x12白雉 (650–671)\x12白凤 (672–686)\x12朱鸟 (686–701)\x12大宝 (701–704)\x12庆" + + "云 (704–708)\x12和铜 (708–715)\x12灵龟 (715–717)\x12养老 (717–724)\x12神龟 (724" + + "–729)\x12天平 (729–749)\x18天平感宝 (749–749)\x18天平胜宝 (749–757)\x18天平宝字 (757" + + "–765)\x18天平神护 (765–767)\x18神护景云 (767–770)\x12宝龟 (770–780)\x12天应 (781–7" + + "82)\x12延历 (782–806)\x12大同 (806–810)\x12弘仁 (810–824)\x12天长 (824–834)\x12承" + + "和 (834–848)\x12嘉祥 (848–851)\x12仁寿 (851–854)\x12齐衡 (854–857)\x12天安 (857" + + "–859)\x12贞观 (859–877)\x12元庆 (877–885)\x12仁和 (885–889)\x12宽平 (889–898)" + + "\x12昌泰 (898–901)\x12延喜 (901–923)\x12延长 (923–931)\x12承平 (931–938)\x12天庆 (" + + "938–947)\x12天历 (947–957)\x12天德 (957–961)\x12应和 (961–964)\x12康保 (964–968)" + + "\x12安和 (968–970)\x12天禄 (970–973)\x12天延 (973–976)\x12贞元 (976–978)\x12天元 (" + + "978–983)\x12永观 (983–985)\x12宽和 (985–987)\x12永延 (987–989)\x12永祚 (989–990)" + + "\x12正历 (990–995)\x12长德 (995–999)\x13长保 (999–1004)\x14宽弘 (1004–1012)\x14长" + + "和 (1012–1017)\x14宽仁 (1017–1021)\x14治安 (1021–1024)\x14万寿 (1024–1028)" + + "\x14长元 (1028–1037)\x14长历 (1037–1040)\x14长久 (1040–1044)\x14宽德 (1044–1046)" + + "\x14永承 (1046–1053)\x14天喜 (1053–1058)\x14康平 (1058–1065)\x14治历 (1065–1069)" + + "\x14延久 (1069–1074)\x14承保 (1074–1077)\x14正历 (1077–1081)\x14永保 (1081–1084)" + + "\x14应德 (1084–1087)\x14宽治 (1087–1094)\x14嘉保 (1094–1096)\x14永长 (1096–1097)" + + "\x14承德 (1097–1099)\x14康和 (1099–1104)\x14长治 (1104–1106)\x14嘉承 (1106–1108)" + + "\x14天仁 (1108–1110)\x14天永 (1110–1113)\x14永久 (1113–1118)\x14元永 (1118–1120)" + + "\x14保安 (1120–1124)\x14天治 (1124–1126)\x14大治 (1126–1131)\x14天承 (1131–1132)" + + "\x14长承 (1132–1135)\x14保延 (1135–1141)\x14永治 (1141–1142)\x14康治 (1142–1144)" + + "\x14天养 (1144–1145)\x14久安 (1145–1151)\x14仁平 (1151–1154)\x14久寿 (1154–1156)" + + "\x14保元 (1156–1159)\x14平治 (1159–1160)\x14永历 (1160–1161)\x14应保 (1161–1163)" + + "\x14长宽 (1163–1165)\x14永万 (1165–1166)\x14仁安 (1166–1169)\x14嘉应 (1169–1171)" + + "\x14承安 (1171–1175)\x14安元 (1175–1177)\x14治承 (1177–1181)\x14养和 (1181–1182)" + + "\x14寿永 (1182–1184)\x14元历 (1184–1185)\x14文治 (1185–1190)\x14建久 (1190–1199)" + + "\x14正治 (1199–1201)\x14建仁 (1201–1204)\x14元久 (1204–1206)\x14建永 (1206–1207)" + + "\x14承元 (1207–1211)\x14建历 (1211–1213)\x14建保 (1213–1219)\x14承久 (1219–1222)" + + "\x14贞应 (1222–1224)\x14元仁 (1224–1225)\x14嘉禄 (1225–1227)\x14安贞 (1227–1229)" + + "\x14宽喜 (1229–1232)\x14贞永 (1232–1233)\x14天福 (1233–1234)\x14文历 (1234–1235)" + + "\x14嘉祯 (1235–1238)\x14历仁 (1238–1239)\x14延应 (1239–1240)\x14仁治 (1240–1243)" + + "\x14宽元 (1243–1247)\x14宝治 (1247–1249)\x14建长 (1249–1256)\x14康元 (1256–1257)" + + "\x14正嘉 (1257–1259)\x14正元 (1259–1260)\x14文应 (1260–1261)\x14弘长 (1261–1264)" + + "\x14文永 (1264–1275)\x14建治 (1275–1278)\x14弘安 (1278–1288)\x14正应 (1288–1293)" + + "\x14永仁 (1293–1299)\x14正安 (1299–1302)\x14干元 (1302–1303)\x14嘉元 (1303–1306)" + + "\x14德治 (1306–1308)\x14延庆 (1308–1311)\x14应长 (1311–1312)\x14正和 (1312–1317)" + + "\x14文保 (1317–1319)\x14元应 (1319–1321)\x14元亨 (1321–1324)\x14正中 (1324–1326)" + + "\x14嘉历 (1326–1329)\x14元德 (1329–1331)\x14元弘 (1331–1334)\x14建武 (1334–1336)" + + "\x14延元 (1336–1340)\x14兴国 (1340–1346)\x14正平 (1346–1370)\x14建德 (1370–1372)" + + "\x14文中 (1372–1375)\x14天授 (1375–1379)\x14康历 (1379–1381)\x14弘和 (1381–1384)" + + "\x14元中 (1384–1392)\x14至德 (1384–1387)\x14嘉庆 (1387–1389)\x14康应 (1389–1390)" + + "\x14明德 (1390–1394)\x14应永 (1394–1428)\x14正长 (1428–1429)\x14永享 (1429–1441)" + + "\x14嘉吉 (1441–1444)\x14文安 (1444–1449)\x14宝德 (1449–1452)\x14享德 (1452–1455)" + + "\x14康正 (1455–1457)\x14长禄 (1457–1460)\x14宽正 (1460–1466)\x14文正 (1466–1467)" + + "\x14应仁 (1467–1469)\x14文明 (1469–1487)\x14长享 (1487–1489)\x14延德 (1489–1492)" + + "\x14明应 (1492–1501)\x14文龟 (1501–1504)\x14永正 (1504–1521)\x14大永 (1521–1528)" + + "\x14享禄 (1528–1532)\x14天文 (1532–1555)\x14弘治 (1555–1558)\x14永禄 (1558–1570)" + + "\x14元龟 (1570–1573)\x14天正 (1573–1592)\x14文禄 (1592–1596)\x14庆长 (1596–1615)" + + "\x14元和 (1615–1624)\x14宽永 (1624–1644)\x14正保 (1644–1648)\x14庆安 (1648–1652)" + + "\x14承应 (1652–1655)\x14明历 (1655–1658)\x14万治 (1658–1661)\x14宽文 (1661–1673)" + + "\x14延宝 (1673–1681)\x14天和 (1681–1684)\x14贞享 (1684–1688)\x14元禄 (1688–1704)" + + "\x14宝永 (1704–1711)\x14正德 (1711–1716)\x14享保 (1716–1736)\x14元文 (1736–1741)" + + "\x14宽保 (1741–1744)\x14延享 (1744–1748)\x14宽延 (1748–1751)\x14宝历 (1751–1764)" + + "\x14明和 (1764–1772)\x14安永 (1772–1781)\x14天明 (1781–1789)\x14宽政 (1789–1801)" + + "\x14享和 (1801–1804)\x14文化 (1804–1818)\x14文政 (1818–1830)\x14天保 (1830–1844)" + + "\x14弘化 (1844–1848)\x14嘉永 (1848–1854)\x14安政 (1854–1860)\x14万延 (1860–1861)" + + "\x14文久 (1861–1864)\x14元治 (1864–1865)\x14庆应 (1865–1868)\x06明治\x06大正\x06昭和" + + "\x06平成\x11大化(645–650)\x11白雉(650–671)\x11白凤(672–686)\x11朱鸟(686–701)\x11大宝" + + "(701–704)\x11庆云(704–708)\x11和铜(708–715)\x11灵龟(715–717)\x11养老(717–724)" + + "\x11神龟(724–729)\x11天平(729–749)\x17天平感宝(749–749)\x17天平胜宝(749–757)\x17天平宝字" + + "(757–765)\x17天平神护(765–767)\x17神护景云(767–770)\x11宝龟(770–780)\x11天应(781–782" + + ")\x11延历(782–806)\x11大同(806–810)\x11弘仁(810–824)\x11天长(824–834)\x11承和(834–" + + "848)\x11嘉祥(848–851)\x11仁寿(851–854)\x11齐衡(854–857)\x11天安(857–859)\x11贞观(8" + + "59–877)\x11元庆(877–885)\x11仁和(885–889)\x11宽平(889–898)\x11昌泰(898–901)\x11延" + + "喜(901–923)\x11延长(923–931)\x11承平(931–938)\x11天庆(938–947)\x11天历(947–957)" + + "\x11天德(957–961)\x11应和(961–964)\x11康保(964–968)\x11安和(968–970)\x11天禄(970–9" + + "73)\x11天延(973–976)\x11贞元(976–978)\x11天元(978–983)\x11永观(983–985)\x11宽和(98" + + "5–987)\x11永延(987–989)\x11永祚(989–990)\x11正历(990–995)\x11长德(995–999)\x12长保" + + "(999–1004)\x13宽弘(1004–1012)\x13长和(1012–1017)\x13宽仁(1017–1021)\x13治安(1021" + + "–1024)\x13万寿(1024–1028)\x13长元(1028–1037)\x13长历(1037–1040)\x13长久(1040–1" + + "044)\x13宽德(1044–1046)\x13永承(1046–1053)\x13天喜(1053–1058)\x13康平(1058–1065)" + + "\x13治历(1065–1069)\x13延久(1069–1074)\x13承保(1074–1077)\x13承历(1077–1081)\x13" + + "永保(1081–1084)\x13应德(1084–1087)\x13宽治(1087–1094)\x13嘉保(1094–1096)\x13永长" + + "(1096–1097)\x13承德(1097–1099)\x13康和(1099–1104)\x13长治(1104–1106)\x13嘉承(110" + + "6–1108)\x13天仁(1108–1110)\x13天永(1110–1113)\x13永久(1113–1118)\x13元永(1118–11" + + "20)\x13保安(1120–1124)\x13天治(1124–1126)\x13大治(1126–1131)\x13天承(1131–1132)" + + "\x13长承(1132–1135)\x13保延(1135–1141)\x13永治(1141–1142)\x13康治(1142–1144)\x13" + + "天养(1144–1145)\x13久安(1145–1151)\x13仁平(1151–1154)\x13久寿(1154–1156)\x13保元" + + "(1156–1159)\x13平治(1159–1160)\x13永历(1160–1161)\x13应保(1161–1163)\x13长宽(116" + + "3–1165)\x13永万(1165–1166)\x13仁安(1166–1169)\x13嘉应(1169–1171)\x13承安(1171–11" + + "75)\x13安元(1175–1177)\x13治承(1177–1181)\x13养和(1181–1182)\x13寿永(1182–1184)" + + "\x13元历(1184–1185)\x13文治(1185–1190)\x13建久(1190–1199)\x13正治(1199–1201)\x13" + + "建仁(1201–1204)\x13元久(1204–1206)\x13建永(1206–1207)\x13承元(1207–1211)\x13建历" + + "(1211–1213)\x13建保(1213–1219)\x13承久(1219–1222)\x13贞应(1222–1224)\x13元仁(122" + + "4–1225)\x13嘉禄(1225–1227)\x13安贞(1227–1229)\x13宽喜(1229–1232)\x13贞永(1232–12" + + "33)\x13天福(1233–1234)\x13文历(1234–1235)\x13嘉祯(1235–1238)\x13历仁(1238–1239)" + + "\x13延应(1239–1240)\x13仁治(1240–1243)\x13宽元(1243–1247)\x13宝治(1247–1249)\x13" + + "建长(1249–1256)\x13康元(1256–1257)\x13正嘉(1257–1259)\x13正元(1259–1260)\x13文应" + + "(1260–1261)\x13弘长(1261–1264)\x13文永(1264–1275)\x13建治(1275–1278)\x13弘安(127" + + "8–1288)\x13正应(1288–1293)\x13永仁(1293–1299)\x13正安(1299–1302)\x13乾元(1302–13" + + "03)\x13嘉元(1303–1306)\x13德治(1306–1308)\x13延庆(1308–1311)\x13应长(1311–1312)" + + "\x13正和(1312–1317)\x13文保(1317–1319)\x13元应(1319–1321)\x13元亨(1321–1324)\x13" + + "正中(1324–1326)\x13嘉历(1326–1329)\x13元德(1329–1331)\x13元弘(1331–1334)\x13建武" + + "(1334–1336)\x13延元(1336–1340)\x13兴国(1340–1346)\x13正平(1346–1370)\x13建德(137" + + "0–1372)\x13文中(1372–1375)\x13天授(1375–1379)" + +var bucket123 string = "" + // Size: 8186 bytes + "\x06纪元\x06去年\x06今年\x06明年\x09{0}年后\x06季度\x09上季度\x09本季度\x09下季度\x0f{0}个季度后" + + "\x0f{0}个季度前\x0c{0}个月后\x0c{0}个月前\x06上周\x06本周\x06下周\x09{0}周后\x09{0}周前\x09{" + + "0}这周\x09月中周\x09{0}天后\x09{0}天前\x09年中日\x09工作日\x09月中日\x09上周日\x09本周日\x09下周日" + + "\x0f{0}个周日后\x0f{0}个周日前\x09上周一\x09本周一\x09下周一\x0f{0}个周一后\x0f{0}个周一前\x09上周二" + + "\x09本周二\x09下周二\x0f{0}个周二后\x0f{0}个周二前\x09上周三\x09本周三\x09下周三\x0f{0}个周三后\x0f" + + "{0}个周三前\x09上周四\x09本周四\x09下周四\x0f{0}个周四后\x0f{0}个周四前\x09上周五\x09本周五\x09下周五" + + "\x0f{0}个周五后\x0f{0}个周五前\x09上周六\x09本周六\x09下周六\x0f{0}个周六后\x0f{0}个周六前\x15这一时" + + "间 / 此时\x0c{0}小时后\x0c{0}小时前\x06此刻\x0c{0}分钟后\x0c{0}分钟前\x06现在\x0c{0}秒钟后" + + "\x0c{0}秒钟前\x09{0}秒后\x0f协调世界时\x0f阿克里时间\x15阿克里标准时间\x15阿克里夏令时间\x0f阿富汗时间\x12" + + "中部非洲时间\x12东部非洲时间\x12南非标准时间\x12西部非洲时间\x18西部非洲标准时间\x18西部非洲夏令时间\x12阿拉斯加时间" + + "\x18阿拉斯加标准时间\x18阿拉斯加夏令时间\x12阿拉木图时间\x18阿拉木图标准时间\x18阿拉木图夏令时间\x0f亚马逊时间\x15亚" + + "马逊标准时间\x15亚马逊夏令时间\x12北美中部时间\x18北美中部标准时间\x18北美中部夏令时间\x12北美东部时间\x18北美东部标" + + "准时间\x18北美东部夏令时间\x12北美山区时间\x18北美山区标准时间\x18北美山区夏令时间\x15北美太平洋时间\x1b北美太平洋标" + + "准时间\x1b北美太平洋夏令时间\x12阿纳德尔时间\x18阿纳德尔标准时间\x18阿纳德尔夏令时间\x0f阿皮亚时间\x15阿皮亚标准时间" + + "\x15阿皮亚夏令时间\x0f阿克套时间\x15阿克套标准时间\x15阿克套夏令时间\x12阿克托别时间\x18阿克托别标准时间\x18阿克托别" + + "夏令时间\x0f阿拉伯时间\x15阿拉伯标准时间\x15阿拉伯夏令时间\x0f阿根廷时间\x15阿根廷标准时间\x15阿根廷夏令时间\x15" + + "阿根廷西部时间\x1b阿根廷西部标准时间\x1b阿根廷西部夏令时间\x12亚美尼亚时间\x18亚美尼亚标准时间\x18亚美尼亚夏令时间" + + "\x0f大西洋时间\x15大西洋标准时间\x15大西洋夏令时间\x18澳大利亚中部时间\x1e澳大利亚中部标准时间\x1e澳大利亚中部夏令时间" + + "\x1b澳大利亚中西部时间!澳大利亚中西部标准时间!澳大利亚中西部夏令时间\x18澳大利亚东部时间\x1e澳大利亚东部标准时间\x1e澳大利亚东" + + "部夏令时间\x18澳大利亚西部时间\x1e澳大利亚西部标准时间\x1e澳大利亚西部夏令时间\x12阿塞拜疆时间\x18阿塞拜疆标准时间" + + "\x18阿塞拜疆夏令时间\x15亚速尔群岛时间\x1b亚速尔群岛标准时间\x1b亚速尔群岛夏令时间\x0f孟加拉时间\x15孟加拉标准时间" + + "\x15孟加拉夏令时间\x0c不丹时间\x18玻利维亚标准时间\x12巴西利亚时间\x18巴西利亚标准时间\x18巴西利亚夏令时间\x18文莱达" + + "鲁萨兰时间\x0f佛得角时间\x15佛得角标准时间\x15佛得角夏令时间\x0c凯西时间\x0f查莫罗时间\x0c查坦时间\x12查坦标准时" + + "间\x12查坦夏令时间\x0c智利时间\x12智利标准时间\x12智利夏令时间\x0c中国时间\x12中国标准时间\x12中国夏令时间" + + "\x0f乔巴山时间\x15乔巴山标准时间\x15乔巴山夏令时间\x0f圣诞岛时间\x15科科斯群岛时间\x12哥伦比亚时间\x18哥伦比亚标准时" + + "间\x18哥伦比亚夏令时间\x12库克群岛时间\x18库克群岛标准时间\x18库克群岛仲夏时间\x0c古巴时间\x12古巴标准时间\x12古" + + "巴夏令时间\x0f戴维斯时间\x18迪蒙迪尔维尔时间\x0f东帝汶时间\x12复活节岛时间\x18复活节岛标准时间\x18复活节岛夏令时间" + + "\x18厄瓜多尔标准时间\x0c中欧时间\x12中欧标准时间\x12中欧夏令时间\x0c东欧时间\x12东欧标准时间\x12东欧夏令时间\x12" + + "远东标准时间\x0c西欧时间\x12西欧标准时间\x12西欧夏令时间\x15福克兰群岛时间\x1b福克兰群岛标准时间\x1b福克兰群岛夏令时" + + "间\x0c斐济时间\x12斐济标准时间\x12斐济夏令时间\x1b法属圭亚那标准时间!法属南方和南极领地时间\x15加拉帕戈斯时间\x0f甘" + + "比尔时间\x12格鲁吉亚时间\x18格鲁吉亚标准时间\x18格鲁吉亚夏令时间\x18吉尔伯特群岛时间\x18格林尼治标准时间\x18格陵兰岛" + + "东部时间\x1e格陵兰岛东部标准时间\x1e格陵兰岛东部夏令时间\x18格陵兰岛西部时间\x1e格陵兰岛西部标准时间\x1e格陵兰岛西部夏令" + + "时间\x0c关岛时间\x12海湾标准时间\x0f圭亚那时间\x19夏威夷-阿留申时间\x1f夏威夷-阿留申标准时间\x1f夏威夷-阿留申夏令" + + "时间\x0c香港时间\x12香港标准时间\x12香港夏令时间\x0f科布多时间\x15科布多标准时间\x15科布多夏令时间\x0c印度时间" + + "\x0f印度洋时间\x12印度支那时间\x1b印度尼西亚中部时间\x1b印度尼西亚东部时间\x1b印度尼西亚西部时间\x0c伊朗时间\x12伊朗" + + "标准时间\x12伊朗夏令时间\x15伊尔库茨克时间\x1b伊尔库茨克标准时间\x1b伊尔库茨克夏令时间\x0f以色列时间\x15以色列标准时" + + "间\x15以色列夏令时间\x0c日本时间\x12日本标准时间\x12日本夏令时间+彼得罗巴甫洛夫斯克-堪察加时间1彼得罗巴甫洛夫斯克-堪察加" + + "标准时间1彼得罗巴甫洛夫斯克-堪察加夏令时间\x1b哈萨克斯坦东部时间\x1b哈萨克斯坦西部时间\x0c韩国时间\x12韩国标准时间\x12" + + "韩国夏令时间\x0f科斯雷时间\x1e克拉斯诺亚尔斯克时间$克拉斯诺亚尔斯克标准时间$克拉斯诺亚尔斯克夏令时间\x18吉尔吉斯斯坦时间" + + "\x0c兰卡时间\x12莱恩群岛时间\x12豪勋爵岛时间\x18豪勋爵岛标准时间\x18豪勋爵岛夏令时间\x0c澳门时间\x12澳门标准时间" + + "\x12澳门夏令时间\x12麦夸里岛时间\x0f马加丹时间\x15马加丹标准时间\x15马加丹夏令时间\x12马来西亚时间\x12马尔代夫时间" + + "\x18马克萨斯群岛时间\x15马绍尔群岛时间\x12毛里求斯时间\x18毛里求斯标准时间\x18毛里求斯夏令时间\x0c莫森时间\x18墨西哥" + + "西北部时间\x1e墨西哥西北部标准时间\x1e墨西哥西北部夏令时间\x18墨西哥太平洋时间\x1e墨西哥太平洋标准时间\x1e墨西哥太平洋夏" + + "令时间\x12乌兰巴托时间\x18乌兰巴托标准时间\x18乌兰巴托夏令时间\x0f莫斯科时间\x15莫斯科标准时间\x15莫斯科夏令时间" + + "\x0c缅甸时间\x0c瑙鲁时间\x0f尼泊尔时间\x18新喀里多尼亚时间\x1e新喀里多尼亚标准时间\x1e新喀里多尼亚夏令时间\x0f新西兰" + + "时间\x15新西兰标准时间\x15新西兰夏令时间\x0f纽芬兰时间\x15纽芬兰标准时间\x15纽芬兰夏令时间\x0c纽埃时间\x12诺福克" + + "岛时间%费尔南多-迪诺罗尼亚岛时间+费尔南多-迪诺罗尼亚岛标准时间+费尔南多-迪诺罗尼亚岛夏令时间\x1b北马里亚纳群岛时间\x15新西伯利" + + "亚时间\x1b新西伯利亚标准时间\x1b新西伯利亚夏令时间\x12鄂木斯克时间\x18鄂木斯克标准时间\x18鄂木斯克夏令时间\x12巴基斯" + + "坦时间\x18巴基斯坦标准时间\x18巴基斯坦夏令时间\x0c帕劳时间\x1b巴布亚新几内亚时间\x0f巴拉圭时间\x15巴拉圭标准时间" + + "\x15巴拉圭夏令时间\x0c秘鲁时间\x12秘鲁标准时间\x12秘鲁夏令时间\x0f菲律宾时间\x15菲律宾标准时间\x15菲律宾夏令时间" + + "\x18菲尼克斯群岛时间$圣皮埃尔和密克隆群岛时间*圣皮埃尔和密克隆群岛标准时间*圣皮埃尔和密克隆群岛夏令时间\x12皮特凯恩时间\x0f波纳佩" + + "时间\x0c平壤时间\x15克孜洛尔达时间\x1b克孜洛尔达标准时间\x1b克孜洛尔达夏令时间\x0f留尼汪时间\x0f罗瑟拉时间\x0f库" + + "页岛时间\x15库页岛标准时间\x15库页岛夏令时间\x0f萨马拉时间\x15萨马拉标准时间\x15萨马拉夏令时间\x0f萨摩亚时间\x15" + + "萨摩亚标准时间\x15萨摩亚夏令时间\x0f塞舌尔时间\x15新加坡标准时间\x15所罗门群岛时间\x15南乔治亚岛时间\x0f苏里南时间" + + "\x0c昭和时间\x12塔希提岛时间\x0c台北时间\x12台北标准时间\x12台北夏令时间\x15塔吉克斯坦时间\x0f托克劳时间\x0c汤加" + + "时间\x12汤加标准时间\x12汤加夏令时间\x0c楚克时间\x15土库曼斯坦时间\x1b土库曼斯坦标准时间\x1b土库曼斯坦夏令时间" + + "\x0f图瓦卢时间\x0f乌拉圭时间\x15乌拉圭标准时间\x15乌拉圭夏令时间\x18乌兹别克斯坦时间\x1e乌兹别克斯坦标准时间\x1e乌兹" + + "别克斯坦夏令时间\x12瓦努阿图时间\x18瓦努阿图标准时间\x18瓦努阿图夏令时间\x12委内瑞拉时间\x0f海参崴时间\x15海参崴标准" + + "时间\x15海参崴夏令时间\x15伏尔加格勒时间\x1b伏尔加格勒标准时间\x1b伏尔加格勒夏令时间\x12沃斯托克时间\x0f威克岛时间" + + "\x1b瓦利斯和富图纳时间\x12雅库茨克时间\x18雅库茨克标准时间\x18雅库茨克夏令时间\x15叶卡捷琳堡时间\x1b叶卡捷琳堡标准时间" + + "\x1b叶卡捷琳堡夏令时间" + +var bucket124 string = "" + // Size: 15178 bytes + "\x07Gd/M/yy\x0bd/M/yyGGGGG\x0ddd/MM/yyGGGGG\x0erU年MMMd EEEE\x06週日\x06週一" + + "\x06週二\x06週三\x06週四\x06週五\x06週六\x06上週\x06本週\x06下週\x0a{0} 週後\x0a{0} 週前\x0a" + + "{0} 當週\x0a{0} 天後\x0a{0} 天前\x06年天\x0c每月平日\x09上週日\x09本週日\x09下週日\x10{0} 個週日" + + "後\x10{0} 個週日前\x09上週一\x09本週一\x09下週一\x10{0} 個週一後\x10{0} 個週一前\x09上週二\x09本" + + "週二\x09下週二\x10{0} 個週二後\x10{0} 個週二前\x09上週三\x09本週三\x09下週三\x10{0} 個週三後\x10" + + "{0} 個週三前\x09上週四\x09本週四\x09下週四\x10{0} 個週四後\x10{0} 個週四前\x09上週五\x09本週五\x09下" + + "週五\x10{0} 個週五後\x10{0} 個週五前\x09上週六\x09本週六\x09下週六\x10{0} 個週六後\x10{0} 個週六" + + "前\x0c這一小時\x0c這一分鐘\x06現在\x12世界標準時間\x13U(r)年MMMdEEEE\x0fU(r)年MMMd\x08U年M" + + "MMd\x06上年\x06今年\x06下年\x05+{0}Q\x05-{0}Q\x0c{0}個月後\x0c{0}個月前\x06星期\x0d{0}" + + " 星期後\x0d{0} 星期前\x0c{0}星期後\x0c{0}星期前\x06前日\x06昨日\x06今日\x06明日\x06後日\x09星期幾" + + "\x0c這個小時\x0c{0}小時後\x0c{0}小時前\x09這分鐘\x0c南非時間\x12北美中部時間\x18北美中部標準時間\x18北美中" + + "部夏令時間\x12北美東部時間\x18北美東部標準時間\x18北美東部夏令時間\x12北美山區時間\x18北美山區標準時間\x18北美山區夏" + + "令時間\x15北美太平洋時間\x1b北美太平洋標準時間\x1b北美太平洋夏令時間\x12亞塞拜疆時間\x18亞塞拜疆標準時間\x18亞塞拜疆" + + "夏令時間\x0f佛得角時間\x15佛得角標準時間\x15佛得角夏令時間\x15可可斯群島時間\x15迪蒙迪維爾時間\x12厄瓜多爾時間" + + "\x18加拉帕戈群島時間\x12格魯吉亞時間\x18格魯吉亞標準時間\x18格魯吉亞夏令時間\x15波斯灣海域時間\x0f圭亞那時間\x0c印度" + + "時間\x12中南半島時間\x15伊爾庫茨克時間\x1b伊爾庫茨克標準時間\x1b伊爾庫茨克夏令時間\x0f科斯雷時間\x15麥夸里群島時間" + + "\x12馬爾代夫時間\x12馬克薩斯時間\x12毛里裘斯時間\x18毛里裘斯標準時間\x18毛里裘斯夏令時間\x0c瑙魯時間\x18新喀里多尼亞" + + "時間\x1e新喀里多尼亞標準時間\x1e新喀里多尼亞夏令時間!費爾南多迪諾羅尼亞時間'費爾南多迪諾羅尼亞標準時間'費爾南多迪諾羅尼亞夏令時間" + + "\x1b巴布亞新畿內亞時間\x0f皮特康時間\x0f塞舌爾時間\x0f新加坡時間\x15所羅門群島時間\x0f蘇里南時間\x0c湯加時間\x12" + + "湯加標準時間\x12湯加夏令時間\x0f圖瓦盧時間\x12瓦努阿圖時間\x18瓦努阿圖標準時間\x18瓦努阿圖夏令時間\x12雅庫茨克時間" + + "\x18雅庫茨克標準時間\x18雅庫茨克夏令時間\x08Januwari\x09Februwari\x05Mashi\x07Ephreli" + + "\x04Meyi\x04Juni\x06Julayi\x06Agasti\x09Septhemba\x07Okthoba\x07Novemba" + + "\x07Disemba\x06ISonto\x0bUMsombuluko\x0aULwesibili\x0cULwesithathu\x08UL" + + "wesine\x0bULwesihlanu\x09UMgqibelo\x0cikota yesi-1\x0cikota yesi-2\x0cik" + + "ota yesi-3\x0cikota yesi-4\x0bentathakusa\x07ekuseni\x05emini\x08ntambam" + + "a\x07ebusuku\x06Unyaka\x0fonyakeni odlule\x0akulo nyaka\x0cunyaka ozayo" + + "\x17onyakeni ongu-{0} ozayo\x19eminyakeni engu-{0} ezayo\x11{0} unyaka o" + + "dlule\x13{0} iminyaka edlule\x05Ikota\x0cikota edlule\x07le kota\x0bikot" + + "a ezayo\x16kwikota engu-{0} ezayo\x17kumakota angu-{0} ezayo\x10{0} ikot" + + "a edlule\x12{0} amakota adlule\x12{0} amakota edlule\x11kumakota angu-{0" + + "}\x07Inyanga\x0einyanga edlule\x09le nyanga\x0dinyanga ezayo\x12enyangen" + + "i engu-{0}\x1eezinyangeni ezingu-{0} ezizayo\x12{0} inyanga edlule\x16{0" + + "} izinyanga ezedlule\x18enyangeni engu-{0} ezayo\x0eiviki eledlule\x09le" + + "li viki\x0diviki elizayo\x12evikini elingu-{0}\x12emavikini angu-{0}\x1b" + + "evikini elingu-{0} eledlule\x17amaviki angu-{0} edlule\x0eevikini le-{0}" + + "\x1aevikini elingu-{0} elizayo\x18emavikini angu-{0} ezayo\x0eIviki leNy" + + "anga\x05Usuku\x1cusuku olwandulela olwayizolo\x05izolo\x09namhlanje\x06k" + + "usasa\x1busuku olulandela olwakusasa\x1bosukwini olungu-{0} oluzayo\x1ee" + + "zinsukwini ezingu-{0} ezizayo\x1dosukwini olungu-{0} olwedlule ezinsukwi" + + "ni ezingu-{0} ezedlule.\x13{0} usuku olwedlule\x15{0} izinsuku ezedlule" + + "\x0dusuku lonyaka\x0dUsuku evikini\x0fusuku lwenyanga\x0fiSonto eledlule" + + "\x0ckuleli Sonto\x0eiSonto elizayo\x13kwiSonto elingu-{0}\x12kumaSonto a" + + "ngu-{0}\x13{0} iSonto eledlule\x13{0} amaSonto edlule\x12uMsombuluko odl" + + "ule\x0fkulo Msombuluko\x11uMsombuluko ozayo\x13ngoMsombuluko o-{0}\x14ng" + + "eMisombuluko e-{0}\x1angoMsombuluko o-{0} odlule\x1angeMsombuluko e-{0} " + + "edlule\x13uLwesibili oludlule\x0ekulo Lwesibili\x12uLwesibili oluzayo" + + "\x14ngoLwesibili olu-{0}\x17ngoLwezibili abangu-{0}\x1engoLwesibili ongu" + + "-{0} owedlule ngoLwezibili abangu-{0} abedlule\x10{0} ngoLwezibili\x1a{0" + + "} ngoLwezibili olwedlule\x15uLwesithathu oludlule\x10kulo Lwesithathu" + + "\x14uLwesithathu oluzayo\x14ngoLwesithathu o-{0}\x19ngoLwezithathu abang" + + "u-{0}#ngoLwesithathu olungu-{0} olwedlule\"ngoLwezithathu abangu-{0} abe" + + "dlule\x11uLwesine oludlule\x0ckulo Lwesine\x10uLwesine oluzayo\x12ngoLwe" + + "sine olu-{0}\x15ngoLwezine abangu-{0}\x1cngoLwesine olu-{0} olwedlule" + + "\x1engoLwezine abangu-{0} abedlule\x12uLwesine olwedlule\x14uLwesihlanu " + + "oludlule\x0fkulo Lwesihlanu\x13uLwesihlanu oluzayo\x12ngo {0} Lwesihlanu" + + "\x12ngo {0} Lwezihlanu\x17{0} Lwesihlanu oludlule\x17{0} Lwezihlanu olud" + + "lule\x10uMgqibelo odlule\x0dkulo Mgqibelo\x0fuMgqibelo ozayo\x11ngoMgqib" + + "elo o-{0}\x14ngeMgqibelo engu-{0}\x18ngoMgqibelo o-{0} odlule\x1bngeMgqi" + + "belo engu-{0} edlule\x05Ihora\x09leli hora\x1aehoreni elingu-{0} elizayo" + + "\x18emahoreni angu-{0} ezayo\x12{0} ihora eledlule\x19emahoreni angu-{0}" + + " edlule\x12{0} amahora edlule\x08Iminithi\x0cleli minithi\x1ckuminithi e" + + "lingu-{0} elizayo\x1akumaminithi angu-{0} ezayo\x15{0} iminithi eledlule" + + "\x15{0} amaminithi edlule\x09Isekhondi\x05manje\x1dkusekhondi elingu-{0}" + + " elizayo\x1bkumasekhondi angu-{0} ezayo\x16{0} isekhondi eledlule\x16{0}" + + " amasekhondi edlule\x11Isikhathi sendawo\x12Isikhathi sase-{0}\x16{0} Is" + + "ikhathi sasemini\x17{0} isikhathi esivamile\x1fisikhathi somhlaba esidid" + + "iyelwe isikhathi sase-British sasehlobo\x1eisikhathi sase-Irish esivamil" + + "e\x1aIsikhathi sase-Afghanistan\x1dIsikhathi sase-Central Africa\x1fIsik" + + "hathi saseMpumalanga Afrika-Isikhathi esijwayelekile saseNingizimu Afrik" + + "a!Isikhathi saseNtshonalanga Afrika0Isikhathi esijwayelekile saseNtshona" + + "langa Afrika+Isikhathi sasehlobo saseNtshonalanga Afrika\x15Isikhathi sa" + + "se-Alaska$Isikhathi sase-Alaska esijwayelekile\x1eIsikhathi sase-Alaska " + + "sasemini\x15Isikhathi sase-Amazon$Isikhathi sase-Amazon esijwayelekile" + + "\x1fIsikhathi sase-Amazon sasehlobo%Isikhathi sase-North American Centra" + + "l4Isikhathi sase-North American Central esijwayelekile.Isikhathi sase-No" + + "rth American Central sasemini\"Isikhathi sase-North American East1Isikha" + + "thi sase-North American East esijwayelekile+Isikhathi sase-North America" + + "n East sasemini&Isikhathi sase-North American Mountain5Isikhathi sase-No" + + "rth American Mountain esijwayelekile/Isikhathi sase-North American Mount" + + "ain sasemini%Isikhathi sase-North American Pacific4Isikhathi sase-North " + + "American Pacific esijwayelekile.Isikhathi sase-North American Pacific sa" + + "semini\x11esase-Anadyr Time\x1aesase-Anadyr Standard Time\x18esase-Anady" + + "r Summer Time\x13Isikhathi sase-Apia\x1dIsikhathi sase-Apia esivamile" + + "\x1cIsikhathi sase-Apia sasemini\x16Isikhathi sase-Arabian Isikhathi esi" + + "vamile sase-Arabian\x1dIsikhathi semini sase-Arabian\x18Isikhathi sase-A" + + "rgentina'Isikhathi sase-Argentina esijwayelekile\"Isikhathi sase-Argenti" + + "na sasehlobo#Isikhathi saseNyakatho ne-Argentina2Isikhathi saseNyakatho " + + "ne-Argentina esijwayelekile-Isikhathi saseNyakatho ne-Argentina sasehlob" + + "o\x15Isikhathi saseArmenia!Isikhathi esezingeni sase-Armenia\x1eIsikhath" + + "i sehlobo sase-Armenia\x17Isikhathi sase-Atlantic&Isikhathi sase-Atlanti" + + "c esijwayelekile Isikhathi sase-Atlantic sasemini Isikhathi sase-Central" + + " Australia+Isikhathi sase-Australian Central esivamile*Isikhathi sase-Au" + + "stralian Central sasemini&Isikhathi sase-Australian Central West0Isikhat" + + "hi sase-Australian Central West esivamile/Isikhathi sasemini sase-Austra" + + "lian Central West Isikhathi sase-Eastern Australia(Isikhathi esivamile s" + + "ase-Australian East'Isikhathi sasemini sase-Australian East Isikhathi sa" + + "se-Western Australia+Isikhathi sase-Australian Western esivamile*Isikhat" + + "hi sase-Australian Western sasemini\x19Isikhathi sase-Azerbaijan#Isikhat" + + "hi esivamile sase-Azerbaijan!Isikhathi sehlobo sase-Azerbaijan\x15Isikha" + + "thi sase-Azores$Isikhathi esijwayelekile sase-Azores\x1fIsikhathi sasehl" + + "obo sase-Azores\x19Isikhathi sase-Bangladesh#Isikhathi sase-Bangladesh e" + + "sivamile#Isikhathi sase-Bangladesh sasehlobo\x15Isikhathi sase-Bhutan" + + "\x16Isikhathi sase-Bolivia\x17Isikhathi sase-Brasilia&Isikhathi sase-Bra" + + "silia esijwayelekile!Isikhathi sase-Brasilia sasehlobo Isikhathi sase-Br" + + "unei Darussalam\x19Isikhathi sase-Cape Verde$Isikhathi esezingeni sase-C" + + "ape Verde!Isikhathi sehlobo sase-Cape Verde&Isikhathi esijwayelekile sas" + + "e-Chamorro\x16Isikhathi sase-Chatham Isikhathi esivamile sase-Chatham" + + "\x1fIsikhathi sasemini sase-Chatham\x14Isikhathi sase-Chile#Isikhathi sa" + + "se-Chile esijwayelekile\x1eIsikhathi sase-Chile sasehlobo\x14Isikhathi s" + + "ase-China\x1eIsikhathi esivamile sase-China\x1bIsikhathi semini sase-Chi" + + "na\x19Isikhathi sase-Choibalsan#Isikhathi Esimisiwe sase-Choibalsan\x1eI" + + "sikhathi sehlobo e-Choibalsan\x1fIsikhathi sase-Christmas Island\x1cIsik" + + "hathi sase-Cocos Islands\x17Isikhathi sase-Colombia&Isikhathi sase-Colom" + + "bia esijwayelekile!Isikhathi sase-Colombia sasehlobo\x1bIsikhathi sase-C" + + "ook Islands%Isikhathi esivamile sase-Cook Islands2Isikhathi esiyingxenye" + + " yasehlobo sase-Cook Islands\x13Isikhathi sase-Cuba\"Isikhathi sase-Cuba" + + " esijwayelekile\x1cIsikhathi sase-Cuba sasemini\x14Isikhathi sase-Davis!" + + "Isikhathi sase-Dumont-d’Urville\x19Isikhathi sase-East Timor\x1cIsikhath" + + "i sase-Easter Island+Isikhathi sase-Easter Island esijwayelekile&Isikhat" + + "hi sase-Easter Island sasehlobo\x16Isikhathi sase-Ecuador\x1dIsikhathi s" + + "ase-Central Europe,Isikhathi esijwayelekile sase-Central Europe'Isikhath" + + "i sasehlobo sase-Central Europe\x1dIsikhathi sase-Eastern Europe,Isikhat" + + "hi esijwayelekile sase-Eastern Europe'Isikhathi sasehlobo sase-Eastern E" + + "urope%Isikhathi sase-Further-eastern Europe\x1dIsikhathi sase-Western Eu" + + "rope,Isikhathi esijwayelekile sase-Western Europe'Isikhathi sasehlobo sa" + + "se-Western Europe\x1fIsikhathi sase-Falkland Islands.Isikhathi sase-Falk" + + "land Islands esijwayelekile)Isikhathi sase-Falkland Islands sasehlobo" + + "\x13Isikhathi sase-Fiji\x1dIsikhathi esivamile sase-Fiji\x1bIsikhathi se" + + "hlobo sase-Fiji\x1cIsikhathi sase-French Guiana-Isikhathi sase-French So" + + "uthern nase-Antarctic\x18Isikhathi sase-Galapagos\x16Isikhathi sase-Gamb" + + "ier\x16Isikhathi sase-Georgia Isikhathi esivamile sase-Georgia\x1eIsikha" + + "thi sehlobo sase-Georgia\x1eIsikhathi sase-Gilbert Islands\x1dIsikhathi " + + "sase-Greenwich Mean\x1dIsikhathi sase-East Greenland,Isikhathi sase-East" + + " Greenland esijwayelekile&Isikhathi sase-East Greenland sasemini\x1dIsik" + + "hathi sase-West Greenland,Isikhathi sase-West Greenland esijwayelekile'I" + + "sikhathi sase-West Greenland sasehlobo\x1dIsikhathi esivamile sase-Gulf" + + "\x15Isikhathi sase-Guyana\x1dIsikhathi sase-Hawaii-Aleutia,Isikhathi sas" + + "e-Hawaii-Aleutia esijwayelekile&Isikhathi sase-Hawaii-Aleutia sasemini" + + "\x18Isikhathi sase-Hong Kong\"Isikhathi esivamile sase-Hong Kong Isikhat" + + "hi sehlobo sase-Hong Kong\x13Isikhathi sase-Hovd\x1dIsikhathi Esimisiwe " + + "sase-Hovd\x18Isikhathi sehlobo e-Hovd\x1eIsikhathi sase-India esivamile" + + "\x1bIsikhathi sase-Indian Ocean\x18Isikhathi sase-Indochina Isikhathi sa" + + "se-Central Indonesia Isikhathi sase-Eastern Indonesia Isikhathi sase-Wes" + + "tern Indonesia\x13Isikhathi sase-Iran\x1dIsikhathi sase-Iran esivamile" + + "\x1cIsikhathi sase-Iran sasemini\x16Isikhathi sase-Irkutsk Isikhathi Esi" + + "misiwe sase-Irkutsk\x1dIsikhathi sasehlobo e-Irkutsk\x15Isikhathi sase-I" + + "srael\x1fIsikhathi esivamile sase-Israel\x1fIsikhathi sasemini sakwa-Isr" + + "ael\x14Isikhathi sase-Japan\x1eIsikhathi esivamile sase-Japan\x1bIsikhat" + + "hi semini sase-Japan#esase-Petropavlovsk-Kamchatski Time,esase-Petropavl" + + "ovsk-Kamchatski Standard Time*esase-Petropavlovsk-Kamchatski Summer Time" + + "'Isikhathi sase-Mpumalanga ne-Kazakhstan(Isikhathi saseNtshonalanga ne-K" + + "azakhstan\x14Isikhathi sase-Korea!Isikhathi esisezengeni sase-Korea\x1bI" + + "sikhathi semini sase-Korea\x15Isikhathi sase-Kosrae\x1aIsikhathi sase-Kr" + + "asnoyarsk$Isikhathi Esimisiwe sase-Krasnoyarsk!Isikhathi sasehlobo e-Kra" + + "snoyarsk\x18Isikhathi sase-Kyrgystan\x1bIsikhathi sase-Line Islands\x18I" + + "sikhathi sase-Lord Howe\"Isikhathi sase-Lord Howe esivamile!Isikhathi sa" + + "se-Lord Howe sasemini\x1fIsikhathi sase-Macquarie Island\x16Isikhathi sa" + + "se-Magadan Isikhathi Esimisiwe sase-Magadan\x1dIsikhathi sasehlobo e-Mag" + + "adan\x17Isikhathi sase-Malaysia\x17Isikhathi sase-Maldives\x18Isikhathi " + + "sase-Marquesas\x1fIsikhathi sase-Marshall Islands\x18Isikhathi sase-Maur" + + "itius\"Isikhathi esivamile sase-Mauritius Isikhathi sehlobo sase-Mauriti" + + "us\x15Isikhathi sase-Mawson\x1fIsikhathi sase-Northwest Mexico.Isikhathi" + + " sase-Northwest Mexico esijwayelekile(Isikhathi sase-Northwest Mexico sa" + + "semini\x1eIsikhathi sase-Mexican Pacific-Isikhathi sase-Mexican Pacific " + + "esijwayelekile'Isikhathi sase-Mexican Pacific sasemini\x19Isikhathi sase" + + "-Ulan Bator#Isikhathi Esimisiwe sase-Ulan Bator\x1eIsikhathi sehlobo e-U" + + "lan Bator\x15Isikhathi sase-Moscow$Isikhathi sase-Moscow esijwayelekile" + + "\x1cIsikhathi sasehlobo e-Moscow\x16Isikhathi sase-Myanmar\x14Isikhathi " + + "sase-Nauru\x14Isikhathi sase-Nepal\x1cIsikhathi sase-New Caledonia+Isikh" + + "athi sase-New Caledonia esijwayelekile&Isikhathi sase-New Caledonia sase" + + "hlobo\x1aIsikhathi sase-New Zealand$Isikhathi esivamile sase-New Zealand" + + "#Isikhathi sasemini sase-New Zealand\x1bIsikhathi sase-Newfoundland*Isik" + + "hathi sase-Newfoundland esijwayelekile$Isikhathi sase-Newfoundland sasem" + + "ini\x13Isikhathi sase-Niue\x1eIsikhathi sase-Norfolk Islands\"Isikhathi " + + "sase-Fernando de Noronha1Isikhathi sase-Fernando de Noronha esijwayeleki" + + "le,Isikhathi sase-Fernando de Noronha sasehlobo\x1aIsikhathi sase-Novosi" + + "birsk$Isikhathi Esimisiwe sase-Novosibirsk$Isikhathi sasehlobo sase-Novo" + + "sibirsk\x13Isikhathi sase-Omsk\x1dIsikhathi Esimisiwe sase-Omsk\x1dIsikh" + + "athi sasehlobo sase-Omsk\x17Isikhathi sase-Pakistan!Isikhathi sase-Pakis" + + "tan esivamile!Isikhathi sase-Pakistan sasehlobo\x14Isikhathi sase-Palau" + + "\x1fIsikhathi sase-Papua New Guinea\x17Isikhathi sase-Paraguay&Isikhathi" + + " sase-Paraguay esijwayelekile!Isikhathi sase-Paraguay sasehlobo\x13Isikh" + + "athi sase-Peru\"Isikhathi sase-Peru esijwayelekile\x1dIsikhathi sase-Per" + + "u sasehlobo\x19Isikhathi sase-Philippine#Isikhathi esivamile sase-Philip" + + "pine!Isikhathi sehlobo sase-Philippine\x1eIsikhathi sase-Phoenix Islands" + + ")Isikhathi sase-Saint Pierre nase-Miquelon7Iikhathi sase-Saint Pierre na" + + "se-Miquelon esijwayelekile2Isikhathi sase-Saint Pierre nase-Miquelon sas" + + "emini\x17Isikhathi sase-Pitcairn\x15Isikhathi sase-Ponape\x18Isikhathi s" + + "ase-Pyongyang\x16Isikhathi sase-Reunion\x16Isikhathi sase-Rothera\x17Isi" + + "khathi sase-Sakhalin!Isikhathi Esimisiwe sase-Sakhalin\x1eIsikhathi sase" + + "hlobo e-Sakhalin\x11esase-Samara Time\x1aesase-Samara Standard Time\x18e" + + "sase-Samara Summer Time\x14Isikhathi sase-Samoa#Isikhathi sase-Samoa esi" + + "jwayelekile\x1dIsikhathi sase-Samoa sasemini\x19Isikhathi sase-Seychelle" + + "s\"Isikhathi esivamile sase-Singapore\x1eIsikhathi sase-Solomon Islands" + + "\x1cIsikhathi sase-South Georgia\x17Isikhathi sase-Suriname\x14Isikhathi" + + " sase-Syowa\x15Isikhathi sase-Tahiti\x15Isikhathi sase-Taipei\x1fIsikhat" + + "hi esivamile sase-Taipei\x1cIsikhathi semini sase-Taipei\x19Isikhathi sa" + + "se-Tajikistan\x16Isikhathi sase-Tokelau\x14Isikhathi sase-Tonga#Isikhath" + + "i sase-Tonga esijwayelekile\x1eIsikhathi sase-Tonga sasehlobo\x14Isikhat" + + "hi sase-Chuuk\x1bIsikhathi sase-Turkmenistan%Isikhathi esivamile sase-Tu" + + "rkmenistan#Isikhathi sehlobo sase-Turkmenistan\x15Isikhathi sase-Tuvalu" + + "\x16Isikhathi sase-Uruguay%Isikhathi sase-Uruguay esijwayelekile Isikhat" + + "hi sase-Uruguay sasehlobo\x19Isikhathi sase-Uzbekistan#Isikhathi esivami" + + "le sase-Uzbekistan!Isikhathi sehlobo sase-Uzbekistan\x16Isikhathi sase-V" + + "anuatu%Isikhathi sase-Vanuatu esijwayelekile Isikhathi sase-Vanuatu sase" + + "hlobo\x18Isikhathi sase-Venezuela\x1aIsikhathi sase-Vladivostok$Isikhath" + + "i Esimisiwe sase-Vladivostok!Isikhathi sasehlobo e-Vladivostok\x18Isikha" + + "thi sase-Volgograd\"Isikhathi Esimisiwe sase-Volgograd\"Isikhathi sase-V" + + "olgograd sasehlobo\x15Isikhathi sase-Vostok\x1aIsikhathi sase-Wake Islan" + + "d!Isikhathi sase-Wallis nase-Futuna\x16Isikhathi sase-Yakutsk Isikhathi " + + "Esimisiwe sase-Yakutsk\x1dIsikhathi sasehlobo e-Yakutsk\x1cIsikhathi sas" + + "e-Yekaterinburg&Isikhathi Esimisiwe sase-Yekaterinburg#Isikhathi sasehlo" + + "bo e-Yekaterinburg" + +// CLDRVersion is the CLDR version from which the tables in this package are derived. +const CLDRVersion = "32" + +// Total table size 2569523 bytes (2509KiB); checksum: 812A9F61 diff --git a/vendor/golang.org/x/text/doc.go b/vendor/golang.org/x/text/doc.go index a48e284..2e19a41 100644 --- a/vendor/golang.org/x/text/doc.go +++ b/vendor/golang.org/x/text/doc.go @@ -7,6 +7,9 @@ // text is a repository of text-related packages related to internationalization // (i18n) and localization (l10n), such as character encodings, text // transformations, and locale-specific text handling. +// +// There is a 30 minute video, recorded on 2017-11-30, on the "State of +// golang.org/x/text" at https://www.youtube.com/watch?v=uYrDrMEGu58 package text // TODO: more documentation on general concepts, such as Transformers, use diff --git a/vendor/golang.org/x/text/encoding/htmlindex/gen.go b/vendor/golang.org/x/text/encoding/htmlindex/gen.go index 80a52f0..ac6b4a7 100644 --- a/vendor/golang.org/x/text/encoding/htmlindex/gen.go +++ b/vendor/golang.org/x/text/encoding/htmlindex/gen.go @@ -133,7 +133,10 @@ var consts = map[string]string{ // locales is taken from // https://html.spec.whatwg.org/multipage/syntax.html#encoding-sniffing-algorithm. var locales = []struct{ tag, name string }{ - {"und", "windows-1252"}, // The default value. + // The default value. Explicitly state latin to benefit from the exact + // script option, while still making 1252 the default encoding for languages + // written in Latin script. + {"und_Latn", "windows-1252"}, {"ar", "windows-1256"}, {"ba", "windows-1251"}, {"be", "windows-1251"}, diff --git a/vendor/golang.org/x/text/encoding/htmlindex/htmlindex.go b/vendor/golang.org/x/text/encoding/htmlindex/htmlindex.go index 70f2ac4..bdc7d15 100644 --- a/vendor/golang.org/x/text/encoding/htmlindex/htmlindex.go +++ b/vendor/golang.org/x/text/encoding/htmlindex/htmlindex.go @@ -50,7 +50,7 @@ func LanguageDefault(tag language.Tag) string { for _, t := range strings.Split(locales, " ") { tags = append(tags, language.MustParse(t)) } - matcher = language.NewMatcher(tags) + matcher = language.NewMatcher(tags, language.PreferSameScript(true)) }) _, i, _ := matcher.Match(tag) return canonical[localeMap[i]] // Default is Windows-1252. diff --git a/vendor/golang.org/x/text/encoding/htmlindex/tables.go b/vendor/golang.org/x/text/encoding/htmlindex/tables.go index cbf4ba9..9d6b431 100644 --- a/vendor/golang.org/x/text/encoding/htmlindex/tables.go +++ b/vendor/golang.org/x/text/encoding/htmlindex/tables.go @@ -313,7 +313,7 @@ var nameMap = map[string]htmlEncoding{ } var localeMap = []htmlEncoding{ - windows1252, // und + windows1252, // und_Latn windows1256, // ar windows1251, // ba windows1251, // be @@ -349,4 +349,4 @@ var localeMap = []htmlEncoding{ big5, // zh-hant } -const locales = "und ar ba be bg cs el et fa he hr hu ja kk ko ku ky lt lv mk pl ru sah sk sl sr tg th tr tt uk vi zh-hans zh-hant" +const locales = "und_Latn ar ba be bg cs el et fa he hr hu ja kk ko ku ky lt lv mk pl ru sah sk sl sr tg th tr tt uk vi zh-hans zh-hant" diff --git a/vendor/golang.org/x/text/feature/plural/data_test.go b/vendor/golang.org/x/text/feature/plural/data_test.go index 1efe9e1..bd4c240 100644 --- a/vendor/golang.org/x/text/feature/plural/data_test.go +++ b/vendor/golang.org/x/text/feature/plural/data_test.go @@ -9,8 +9,8 @@ type pluralTest struct { decimal []string } -var ordinalTests = []pluralTest{ // 59 elements - 0: {locales: "af am ar bg bs ce cs da de dsb el es et eu fa fi fy gl he hr hsb id in is iw ja km kn ko ky lt lv ml mn my nb nl pa pl prg pt root ru sh si sk sl sr sw ta te th tr ur uz yue zh zu", form: 0, integer: []string{"0~15", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, +var ordinalTests = []pluralTest{ // 66 elements + 0: {locales: "af am ar bg bs ce cs da de dsb el es et eu fa fi fy gl gsw he hr hsb id in is iw ja km kn ko ky lt lv ml mn my nb nl pa pl prg ps pt root ru sd sh si sk sl sr sw ta te th tr ur uz yue zh zu", form: 0, integer: []string{"0~15", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, 1: {locales: "sv", form: 2, integer: []string{"1", "2", "21", "22", "31", "32", "41", "42", "51", "52", "61", "62", "71", "72", "81", "82", "101", "1001"}, decimal: []string(nil)}, 2: {locales: "sv", form: 0, integer: []string{"0", "3~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, 3: {locales: "fil fr ga hy lo mo ms ro tl vi", form: 2, integer: []string{"1"}, decimal: []string(nil)}, @@ -23,170 +23,175 @@ var ordinalTests = []pluralTest{ // 59 elements 10: {locales: "be", form: 0, integer: []string{"0", "1", "4~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, 11: {locales: "uk", form: 4, integer: []string{"3", "23", "33", "43", "53", "63", "73", "83", "103", "1003"}, decimal: []string(nil)}, 12: {locales: "uk", form: 0, integer: []string{"0~2", "4~16", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, - 13: {locales: "kk", form: 5, integer: []string{"6", "9", "10", "16", "19", "20", "26", "29", "30", "36", "39", "40", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, - 14: {locales: "kk", form: 0, integer: []string{"0~5", "7", "8", "11~15", "17", "18", "21", "101", "1001"}, decimal: []string(nil)}, - 15: {locales: "it", form: 5, integer: []string{"8", "11", "80", "800"}, decimal: []string(nil)}, - 16: {locales: "it", form: 0, integer: []string{"0~7", "9", "10", "12~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, - 17: {locales: "ka", form: 2, integer: []string{"1"}, decimal: []string(nil)}, - 18: {locales: "ka", form: 5, integer: []string{"0", "2~16", "102", "1002"}, decimal: []string(nil)}, - 19: {locales: "ka", form: 0, integer: []string{"21~36", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, - 20: {locales: "sq", form: 2, integer: []string{"1"}, decimal: []string(nil)}, - 21: {locales: "sq", form: 5, integer: []string{"4", "24", "34", "44", "54", "64", "74", "84", "104", "1004"}, decimal: []string(nil)}, - 22: {locales: "sq", form: 0, integer: []string{"0", "2", "3", "5~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, - 23: {locales: "en", form: 2, integer: []string{"1", "21", "31", "41", "51", "61", "71", "81", "101", "1001"}, decimal: []string(nil)}, - 24: {locales: "en", form: 3, integer: []string{"2", "22", "32", "42", "52", "62", "72", "82", "102", "1002"}, decimal: []string(nil)}, - 25: {locales: "en", form: 4, integer: []string{"3", "23", "33", "43", "53", "63", "73", "83", "103", "1003"}, decimal: []string(nil)}, - 26: {locales: "en", form: 0, integer: []string{"0", "4~18", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, - 27: {locales: "mr", form: 2, integer: []string{"1"}, decimal: []string(nil)}, - 28: {locales: "mr", form: 3, integer: []string{"2", "3"}, decimal: []string(nil)}, - 29: {locales: "mr", form: 4, integer: []string{"4"}, decimal: []string(nil)}, - 30: {locales: "mr", form: 0, integer: []string{"0", "5~19", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, - 31: {locales: "ca", form: 2, integer: []string{"1", "3"}, decimal: []string(nil)}, - 32: {locales: "ca", form: 3, integer: []string{"2"}, decimal: []string(nil)}, - 33: {locales: "ca", form: 4, integer: []string{"4"}, decimal: []string(nil)}, - 34: {locales: "ca", form: 0, integer: []string{"0", "5~19", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, - 35: {locales: "mk", form: 2, integer: []string{"1", "21", "31", "41", "51", "61", "71", "81", "101", "1001"}, decimal: []string(nil)}, - 36: {locales: "mk", form: 3, integer: []string{"2", "22", "32", "42", "52", "62", "72", "82", "102", "1002"}, decimal: []string(nil)}, - 37: {locales: "mk", form: 5, integer: []string{"7", "8", "27", "28", "37", "38", "47", "48", "57", "58", "67", "68", "77", "78", "87", "88", "107", "1007"}, decimal: []string(nil)}, - 38: {locales: "mk", form: 0, integer: []string{"0", "3~6", "9~19", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, - 39: {locales: "az", form: 2, integer: []string{"1", "2", "5", "7", "8", "11", "12", "15", "17", "18", "20~22", "25", "101", "1001"}, decimal: []string(nil)}, - 40: {locales: "az", form: 4, integer: []string{"3", "4", "13", "14", "23", "24", "33", "34", "43", "44", "53", "54", "63", "64", "73", "74", "100", "1003"}, decimal: []string(nil)}, - 41: {locales: "az", form: 5, integer: []string{"0", "6", "16", "26", "36", "40", "46", "56", "106", "1006"}, decimal: []string(nil)}, - 42: {locales: "az", form: 0, integer: []string{"9", "10", "19", "29", "30", "39", "49", "59", "69", "79", "109", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, - 43: {locales: "gu hi", form: 2, integer: []string{"1"}, decimal: []string(nil)}, - 44: {locales: "gu hi", form: 3, integer: []string{"2", "3"}, decimal: []string(nil)}, - 45: {locales: "gu hi", form: 4, integer: []string{"4"}, decimal: []string(nil)}, - 46: {locales: "gu hi", form: 5, integer: []string{"6"}, decimal: []string(nil)}, - 47: {locales: "gu hi", form: 0, integer: []string{"0", "5", "7~20", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, - 48: {locales: "as bn", form: 2, integer: []string{"1", "5", "7~10"}, decimal: []string(nil)}, - 49: {locales: "as bn", form: 3, integer: []string{"2", "3"}, decimal: []string(nil)}, - 50: {locales: "as bn", form: 4, integer: []string{"4"}, decimal: []string(nil)}, - 51: {locales: "as bn", form: 5, integer: []string{"6"}, decimal: []string(nil)}, - 52: {locales: "as bn", form: 0, integer: []string{"0", "11~25", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, - 53: {locales: "cy", form: 1, integer: []string{"0", "7~9"}, decimal: []string(nil)}, - 54: {locales: "cy", form: 2, integer: []string{"1"}, decimal: []string(nil)}, - 55: {locales: "cy", form: 3, integer: []string{"2"}, decimal: []string(nil)}, - 56: {locales: "cy", form: 4, integer: []string{"3", "4"}, decimal: []string(nil)}, - 57: {locales: "cy", form: 5, integer: []string{"5", "6"}, decimal: []string(nil)}, - 58: {locales: "cy", form: 0, integer: []string{"10~25", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, -} // Size: 4272 bytes + 13: {locales: "tk", form: 4, integer: []string{"6", "9", "10", "16", "19", "26", "29", "36", "39", "106", "1006"}, decimal: []string(nil)}, + 14: {locales: "tk", form: 0, integer: []string{"0~5", "7", "8", "11~15", "17", "18", "20", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 15: {locales: "kk", form: 5, integer: []string{"6", "9", "10", "16", "19", "20", "26", "29", "30", "36", "39", "40", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 16: {locales: "kk", form: 0, integer: []string{"0~5", "7", "8", "11~15", "17", "18", "21", "101", "1001"}, decimal: []string(nil)}, + 17: {locales: "it", form: 5, integer: []string{"8", "11", "80", "800"}, decimal: []string(nil)}, + 18: {locales: "it", form: 0, integer: []string{"0~7", "9", "10", "12~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 19: {locales: "ka", form: 2, integer: []string{"1"}, decimal: []string(nil)}, + 20: {locales: "ka", form: 5, integer: []string{"0", "2~16", "102", "1002"}, decimal: []string(nil)}, + 21: {locales: "ka", form: 0, integer: []string{"21~36", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 22: {locales: "sq", form: 2, integer: []string{"1"}, decimal: []string(nil)}, + 23: {locales: "sq", form: 5, integer: []string{"4", "24", "34", "44", "54", "64", "74", "84", "104", "1004"}, decimal: []string(nil)}, + 24: {locales: "sq", form: 0, integer: []string{"0", "2", "3", "5~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 25: {locales: "en", form: 2, integer: []string{"1", "21", "31", "41", "51", "61", "71", "81", "101", "1001"}, decimal: []string(nil)}, + 26: {locales: "en", form: 3, integer: []string{"2", "22", "32", "42", "52", "62", "72", "82", "102", "1002"}, decimal: []string(nil)}, + 27: {locales: "en", form: 4, integer: []string{"3", "23", "33", "43", "53", "63", "73", "83", "103", "1003"}, decimal: []string(nil)}, + 28: {locales: "en", form: 0, integer: []string{"0", "4~18", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 29: {locales: "mr", form: 2, integer: []string{"1"}, decimal: []string(nil)}, + 30: {locales: "mr", form: 3, integer: []string{"2", "3"}, decimal: []string(nil)}, + 31: {locales: "mr", form: 4, integer: []string{"4"}, decimal: []string(nil)}, + 32: {locales: "mr", form: 0, integer: []string{"0", "5~19", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 33: {locales: "ca", form: 2, integer: []string{"1", "3"}, decimal: []string(nil)}, + 34: {locales: "ca", form: 3, integer: []string{"2"}, decimal: []string(nil)}, + 35: {locales: "ca", form: 4, integer: []string{"4"}, decimal: []string(nil)}, + 36: {locales: "ca", form: 0, integer: []string{"0", "5~19", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 37: {locales: "mk", form: 2, integer: []string{"1", "21", "31", "41", "51", "61", "71", "81", "101", "1001"}, decimal: []string(nil)}, + 38: {locales: "mk", form: 3, integer: []string{"2", "22", "32", "42", "52", "62", "72", "82", "102", "1002"}, decimal: []string(nil)}, + 39: {locales: "mk", form: 5, integer: []string{"7", "8", "27", "28", "37", "38", "47", "48", "57", "58", "67", "68", "77", "78", "87", "88", "107", "1007"}, decimal: []string(nil)}, + 40: {locales: "mk", form: 0, integer: []string{"0", "3~6", "9~19", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 41: {locales: "az", form: 2, integer: []string{"1", "2", "5", "7", "8", "11", "12", "15", "17", "18", "20~22", "25", "101", "1001"}, decimal: []string(nil)}, + 42: {locales: "az", form: 4, integer: []string{"3", "4", "13", "14", "23", "24", "33", "34", "43", "44", "53", "54", "63", "64", "73", "74", "100", "1003"}, decimal: []string(nil)}, + 43: {locales: "az", form: 5, integer: []string{"0", "6", "16", "26", "36", "40", "46", "56", "106", "1006"}, decimal: []string(nil)}, + 44: {locales: "az", form: 0, integer: []string{"9", "10", "19", "29", "30", "39", "49", "59", "69", "79", "109", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 45: {locales: "gu hi", form: 2, integer: []string{"1"}, decimal: []string(nil)}, + 46: {locales: "gu hi", form: 3, integer: []string{"2", "3"}, decimal: []string(nil)}, + 47: {locales: "gu hi", form: 4, integer: []string{"4"}, decimal: []string(nil)}, + 48: {locales: "gu hi", form: 5, integer: []string{"6"}, decimal: []string(nil)}, + 49: {locales: "gu hi", form: 0, integer: []string{"0", "5", "7~20", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 50: {locales: "as bn", form: 2, integer: []string{"1", "5", "7~10"}, decimal: []string(nil)}, + 51: {locales: "as bn", form: 3, integer: []string{"2", "3"}, decimal: []string(nil)}, + 52: {locales: "as bn", form: 4, integer: []string{"4"}, decimal: []string(nil)}, + 53: {locales: "as bn", form: 5, integer: []string{"6"}, decimal: []string(nil)}, + 54: {locales: "as bn", form: 0, integer: []string{"0", "11~25", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 55: {locales: "or", form: 2, integer: []string{"1", "5", "7~9"}, decimal: []string(nil)}, + 56: {locales: "or", form: 3, integer: []string{"2", "3"}, decimal: []string(nil)}, + 57: {locales: "or", form: 4, integer: []string{"4"}, decimal: []string(nil)}, + 58: {locales: "or", form: 5, integer: []string{"6"}, decimal: []string(nil)}, + 59: {locales: "or", form: 0, integer: []string{"0", "10~24", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 60: {locales: "cy", form: 1, integer: []string{"0", "7~9"}, decimal: []string(nil)}, + 61: {locales: "cy", form: 2, integer: []string{"1"}, decimal: []string(nil)}, + 62: {locales: "cy", form: 3, integer: []string{"2"}, decimal: []string(nil)}, + 63: {locales: "cy", form: 4, integer: []string{"3", "4"}, decimal: []string(nil)}, + 64: {locales: "cy", form: 5, integer: []string{"5", "6"}, decimal: []string(nil)}, + 65: {locales: "cy", form: 0, integer: []string{"10~25", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, +} // Size: 4776 bytes -var cardinalTests = []pluralTest{ // 115 elements +var cardinalTests = []pluralTest{ // 113 elements 0: {locales: "bm bo dz id ig ii in ja jbo jv jw kde kea km ko lkt lo ms my nqo root sah ses sg th to vi wo yo yue zh", form: 0, integer: []string{"0~15", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0~1.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, 1: {locales: "am as bn fa gu hi kn mr zu", form: 2, integer: []string{"0", "1"}, decimal: []string{"0.0~1.0", "0.00~0.04"}}, 2: {locales: "am as bn fa gu hi kn mr zu", form: 0, integer: []string{"2~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"1.1~2.6", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, 3: {locales: "ff fr hy kab", form: 2, integer: []string{"0", "1"}, decimal: []string{"0.0~1.5"}}, 4: {locales: "ff fr hy kab", form: 0, integer: []string{"2~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"2.0~3.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, - 5: {locales: "ast ca de en et fi fy gl it ji nl sv sw ur yi", form: 2, integer: []string{"1"}, decimal: []string(nil)}, - 6: {locales: "ast ca de en et fi fy gl it ji nl sv sw ur yi", form: 0, integer: []string{"0", "2~16", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0~1.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, - 7: {locales: "si", form: 2, integer: []string{"0", "1"}, decimal: []string{"0.0", "0.1", "1.0", "0.00", "0.01", "1.00", "0.000", "0.001", "1.000", "0.0000", "0.0001", "1.0000"}}, - 8: {locales: "si", form: 0, integer: []string{"2~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.2~0.9", "1.1~1.8", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, - 9: {locales: "ak bh guw ln mg nso pa ti wa", form: 2, integer: []string{"0", "1"}, decimal: []string{"0.0", "1.0", "0.00", "1.00", "0.000", "1.000", "0.0000", "1.0000"}}, - 10: {locales: "ak bh guw ln mg nso pa ti wa", form: 0, integer: []string{"2~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.1~0.9", "1.1~1.7", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, - 11: {locales: "tzm", form: 2, integer: []string{"0", "1", "11~24"}, decimal: []string{"0.0", "1.0", "11.0", "12.0", "13.0", "14.0", "15.0", "16.0", "17.0", "18.0", "19.0", "20.0", "21.0", "22.0", "23.0", "24.0"}}, - 12: {locales: "tzm", form: 0, integer: []string{"2~10", "100~106", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.1~0.9", "1.1~1.7", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, - 13: {locales: "pt", form: 2, integer: []string{"0", "1"}, decimal: []string{"0.0", "1.0", "0.00", "1.00", "0.000", "1.000", "0.0000", "1.0000"}}, - 14: {locales: "pt", form: 0, integer: []string{"2~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.1~0.9", "1.1~1.7", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, - 15: {locales: "af asa az bem bez bg brx ce cgg chr ckb dv ee el eo es eu fo fur gsw ha haw hu jgo jmc ka kaj kcg kk kkj kl ks ksb ku ky lb lg mas mgo ml mn nah nb nd ne nn nnh no nr ny nyn om or os pap ps rm rof rwk saq sdh seh sn so sq ss ssy st syr ta te teo tig tk tn tr ts ug uz ve vo vun wae xh xog", form: 2, integer: []string{"1"}, decimal: []string{"1.0", "1.00", "1.000", "1.0000"}}, - 16: {locales: "af asa az bem bez bg brx ce cgg chr ckb dv ee el eo es eu fo fur gsw ha haw hu jgo jmc ka kaj kcg kk kkj kl ks ksb ku ky lb lg mas mgo ml mn nah nb nd ne nn nnh no nr ny nyn om or os pap ps rm rof rwk saq sdh seh sn so sq ss ssy st syr ta te teo tig tk tn tr ts ug uz ve vo vun wae xh xog", form: 0, integer: []string{"0", "2~16", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0~0.9", "1.1~1.6", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, - 17: {locales: "pt_PT", form: 2, integer: []string{"1"}, decimal: []string(nil)}, - 18: {locales: "pt_PT", form: 0, integer: []string{"0", "2~16", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0~1.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, - 19: {locales: "da", form: 2, integer: []string{"1"}, decimal: []string{"0.1~1.6"}}, - 20: {locales: "da", form: 0, integer: []string{"0", "2~16", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0", "2.0~3.4", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, - 21: {locales: "is", form: 2, integer: []string{"1", "21", "31", "41", "51", "61", "71", "81", "101", "1001"}, decimal: []string{"0.1~1.6", "10.1", "100.1", "1000.1"}}, - 22: {locales: "is", form: 0, integer: []string{"0", "2~16", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0", "2.0", "3.0", "4.0", "5.0", "6.0", "7.0", "8.0", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, - 23: {locales: "mk", form: 2, integer: []string{"1", "11", "21", "31", "41", "51", "61", "71", "101", "1001"}, decimal: []string{"0.1", "1.1", "2.1", "3.1", "4.1", "5.1", "6.1", "7.1", "10.1", "100.1", "1000.1"}}, - 24: {locales: "mk", form: 0, integer: []string{"0", "2~10", "12~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0", "0.2~1.0", "1.2~1.7", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, - 25: {locales: "fil tl", form: 2, integer: []string{"0~3", "5", "7", "8", "10~13", "15", "17", "18", "20", "21", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0~0.3", "0.5", "0.7", "0.8", "1.0~1.3", "1.5", "1.7", "1.8", "2.0", "2.1", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, - 26: {locales: "fil tl", form: 0, integer: []string{"4", "6", "9", "14", "16", "19", "24", "26", "104", "1004"}, decimal: []string{"0.4", "0.6", "0.9", "1.4", "1.6", "1.9", "2.4", "2.6", "10.4", "100.4", "1000.4"}}, - 27: {locales: "lv prg", form: 1, integer: []string{"0", "10~20", "30", "40", "50", "60", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0", "10.0", "11.0", "12.0", "13.0", "14.0", "15.0", "16.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, - 28: {locales: "lv prg", form: 2, integer: []string{"1", "21", "31", "41", "51", "61", "71", "81", "101", "1001"}, decimal: []string{"0.1", "1.0", "1.1", "2.1", "3.1", "4.1", "5.1", "6.1", "7.1", "10.1", "100.1", "1000.1"}}, - 29: {locales: "lv prg", form: 0, integer: []string{"2~9", "22~29", "102", "1002"}, decimal: []string{"0.2~0.9", "1.2~1.9", "10.2", "100.2", "1000.2"}}, - 30: {locales: "lag", form: 1, integer: []string{"0"}, decimal: []string{"0.0", "0.00", "0.000", "0.0000"}}, - 31: {locales: "lag", form: 2, integer: []string{"1"}, decimal: []string{"0.1~1.6"}}, - 32: {locales: "lag", form: 0, integer: []string{"2~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"2.0~3.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, - 33: {locales: "ksh", form: 1, integer: []string{"0"}, decimal: []string{"0.0", "0.00", "0.000", "0.0000"}}, - 34: {locales: "ksh", form: 2, integer: []string{"1"}, decimal: []string{"1.0", "1.00", "1.000", "1.0000"}}, - 35: {locales: "ksh", form: 0, integer: []string{"2~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.1~0.9", "1.1~1.7", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, - 36: {locales: "iu kw naq se sma smi smj smn sms", form: 2, integer: []string{"1"}, decimal: []string{"1.0", "1.00", "1.000", "1.0000"}}, - 37: {locales: "iu kw naq se sma smi smj smn sms", form: 3, integer: []string{"2"}, decimal: []string{"2.0", "2.00", "2.000", "2.0000"}}, - 38: {locales: "iu kw naq se sma smi smj smn sms", form: 0, integer: []string{"0", "3~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0~0.9", "1.1~1.6", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, - 39: {locales: "shi", form: 2, integer: []string{"0", "1"}, decimal: []string{"0.0~1.0", "0.00~0.04"}}, - 40: {locales: "shi", form: 4, integer: []string{"2~10"}, decimal: []string{"2.0", "3.0", "4.0", "5.0", "6.0", "7.0", "8.0", "9.0", "10.0", "2.00", "3.00", "4.00", "5.00", "6.00", "7.00", "8.00"}}, - 41: {locales: "shi", form: 0, integer: []string{"11~26", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"1.1~1.9", "2.1~2.7", "10.1", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, - 42: {locales: "mo ro", form: 2, integer: []string{"1"}, decimal: []string(nil)}, - 43: {locales: "mo ro", form: 4, integer: []string{"0", "2~16", "101", "1001"}, decimal: []string{"0.0~1.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, - 44: {locales: "mo ro", form: 0, integer: []string{"20~35", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, - 45: {locales: "bs hr sh sr", form: 2, integer: []string{"1", "21", "31", "41", "51", "61", "71", "81", "101", "1001"}, decimal: []string{"0.1", "1.1", "2.1", "3.1", "4.1", "5.1", "6.1", "7.1", "10.1", "100.1", "1000.1"}}, - 46: {locales: "bs hr sh sr", form: 4, integer: []string{"2~4", "22~24", "32~34", "42~44", "52~54", "62", "102", "1002"}, decimal: []string{"0.2~0.4", "1.2~1.4", "2.2~2.4", "3.2~3.4", "4.2~4.4", "5.2", "10.2", "100.2", "1000.2"}}, - 47: {locales: "bs hr sh sr", form: 0, integer: []string{"0", "5~19", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0", "0.5~1.0", "1.5~2.0", "2.5~2.7", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, - 48: {locales: "gd", form: 2, integer: []string{"1", "11"}, decimal: []string{"1.0", "11.0", "1.00", "11.00", "1.000", "11.000", "1.0000"}}, - 49: {locales: "gd", form: 3, integer: []string{"2", "12"}, decimal: []string{"2.0", "12.0", "2.00", "12.00", "2.000", "12.000", "2.0000"}}, - 50: {locales: "gd", form: 4, integer: []string{"3~10", "13~19"}, decimal: []string{"3.0", "4.0", "5.0", "6.0", "7.0", "8.0", "9.0", "10.0", "13.0", "14.0", "15.0", "16.0", "17.0", "18.0", "19.0", "3.00"}}, - 51: {locales: "gd", form: 0, integer: []string{"0", "20~34", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0~0.9", "1.1~1.6", "10.1", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, - 52: {locales: "sl", form: 2, integer: []string{"1", "101", "201", "301", "401", "501", "601", "701", "1001"}, decimal: []string(nil)}, - 53: {locales: "sl", form: 3, integer: []string{"2", "102", "202", "302", "402", "502", "602", "702", "1002"}, decimal: []string(nil)}, - 54: {locales: "sl", form: 4, integer: []string{"3", "4", "103", "104", "203", "204", "303", "304", "403", "404", "503", "504", "603", "604", "703", "704", "1003"}, decimal: []string{"0.0~1.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, - 55: {locales: "sl", form: 0, integer: []string{"0", "5~19", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, - 56: {locales: "dsb hsb", form: 2, integer: []string{"1", "101", "201", "301", "401", "501", "601", "701", "1001"}, decimal: []string{"0.1", "1.1", "2.1", "3.1", "4.1", "5.1", "6.1", "7.1", "10.1", "100.1", "1000.1"}}, - 57: {locales: "dsb hsb", form: 3, integer: []string{"2", "102", "202", "302", "402", "502", "602", "702", "1002"}, decimal: []string{"0.2", "1.2", "2.2", "3.2", "4.2", "5.2", "6.2", "7.2", "10.2", "100.2", "1000.2"}}, - 58: {locales: "dsb hsb", form: 4, integer: []string{"3", "4", "103", "104", "203", "204", "303", "304", "403", "404", "503", "504", "603", "604", "703", "704", "1003"}, decimal: []string{"0.3", "0.4", "1.3", "1.4", "2.3", "2.4", "3.3", "3.4", "4.3", "4.4", "5.3", "5.4", "6.3", "6.4", "7.3", "7.4", "10.3", "100.3", "1000.3"}}, - 59: {locales: "dsb hsb", form: 0, integer: []string{"0", "5~19", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0", "0.5~1.0", "1.5~2.0", "2.5~2.7", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, - 60: {locales: "he iw", form: 2, integer: []string{"1"}, decimal: []string(nil)}, - 61: {locales: "he iw", form: 3, integer: []string{"2"}, decimal: []string(nil)}, - 62: {locales: "he iw", form: 5, integer: []string{"20", "30", "40", "50", "60", "70", "80", "90", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, - 63: {locales: "he iw", form: 0, integer: []string{"0", "3~17", "101", "1001"}, decimal: []string{"0.0~1.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, - 64: {locales: "cs sk", form: 2, integer: []string{"1"}, decimal: []string(nil)}, - 65: {locales: "cs sk", form: 4, integer: []string{"2~4"}, decimal: []string(nil)}, - 66: {locales: "cs sk", form: 5, integer: []string(nil), decimal: []string{"0.0~1.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, - 67: {locales: "cs sk", form: 0, integer: []string{"0", "5~19", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, - 68: {locales: "pl", form: 2, integer: []string{"1"}, decimal: []string(nil)}, - 69: {locales: "pl", form: 4, integer: []string{"2~4", "22~24", "32~34", "42~44", "52~54", "62", "102", "1002"}, decimal: []string(nil)}, - 70: {locales: "pl", form: 5, integer: []string{"0", "5~19", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, - 71: {locales: "pl", form: 0, integer: []string(nil), decimal: []string{"0.0~1.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, - 72: {locales: "be", form: 2, integer: []string{"1", "21", "31", "41", "51", "61", "71", "81", "101", "1001"}, decimal: []string{"1.0", "21.0", "31.0", "41.0", "51.0", "61.0", "71.0", "81.0", "101.0", "1001.0"}}, - 73: {locales: "be", form: 4, integer: []string{"2~4", "22~24", "32~34", "42~44", "52~54", "62", "102", "1002"}, decimal: []string{"2.0", "3.0", "4.0", "22.0", "23.0", "24.0", "32.0", "33.0", "102.0", "1002.0"}}, - 74: {locales: "be", form: 5, integer: []string{"0", "5~19", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0", "5.0", "6.0", "7.0", "8.0", "9.0", "10.0", "11.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, - 75: {locales: "be", form: 0, integer: []string(nil), decimal: []string{"0.1~0.9", "1.1~1.7", "10.1", "100.1", "1000.1"}}, - 76: {locales: "lt", form: 2, integer: []string{"1", "21", "31", "41", "51", "61", "71", "81", "101", "1001"}, decimal: []string{"1.0", "21.0", "31.0", "41.0", "51.0", "61.0", "71.0", "81.0", "101.0", "1001.0"}}, - 77: {locales: "lt", form: 4, integer: []string{"2~9", "22~29", "102", "1002"}, decimal: []string{"2.0", "3.0", "4.0", "5.0", "6.0", "7.0", "8.0", "9.0", "22.0", "102.0", "1002.0"}}, - 78: {locales: "lt", form: 5, integer: []string(nil), decimal: []string{"0.1~0.9", "1.1~1.7", "10.1", "100.1", "1000.1"}}, - 79: {locales: "lt", form: 0, integer: []string{"0", "10~20", "30", "40", "50", "60", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0", "10.0", "11.0", "12.0", "13.0", "14.0", "15.0", "16.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, - 80: {locales: "mt", form: 2, integer: []string{"1"}, decimal: []string{"1.0", "1.00", "1.000", "1.0000"}}, - 81: {locales: "mt", form: 4, integer: []string{"0", "2~10", "102~107", "1002"}, decimal: []string{"0.0", "2.0", "3.0", "4.0", "5.0", "6.0", "7.0", "8.0", "10.0", "102.0", "1002.0"}}, - 82: {locales: "mt", form: 5, integer: []string{"11~19", "111~117", "1011"}, decimal: []string{"11.0", "12.0", "13.0", "14.0", "15.0", "16.0", "17.0", "18.0", "111.0", "1011.0"}}, - 83: {locales: "mt", form: 0, integer: []string{"20~35", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.1~0.9", "1.1~1.7", "10.1", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, - 84: {locales: "ru uk", form: 2, integer: []string{"1", "21", "31", "41", "51", "61", "71", "81", "101", "1001"}, decimal: []string(nil)}, - 85: {locales: "ru uk", form: 4, integer: []string{"2~4", "22~24", "32~34", "42~44", "52~54", "62", "102", "1002"}, decimal: []string(nil)}, - 86: {locales: "ru uk", form: 5, integer: []string{"0", "5~19", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, - 87: {locales: "ru uk", form: 0, integer: []string(nil), decimal: []string{"0.0~1.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, - 88: {locales: "br", form: 2, integer: []string{"1", "21", "31", "41", "51", "61", "81", "101", "1001"}, decimal: []string{"1.0", "21.0", "31.0", "41.0", "51.0", "61.0", "81.0", "101.0", "1001.0"}}, - 89: {locales: "br", form: 3, integer: []string{"2", "22", "32", "42", "52", "62", "82", "102", "1002"}, decimal: []string{"2.0", "22.0", "32.0", "42.0", "52.0", "62.0", "82.0", "102.0", "1002.0"}}, - 90: {locales: "br", form: 4, integer: []string{"3", "4", "9", "23", "24", "29", "33", "34", "39", "43", "44", "49", "103", "1003"}, decimal: []string{"3.0", "4.0", "9.0", "23.0", "24.0", "29.0", "33.0", "34.0", "103.0", "1003.0"}}, - 91: {locales: "br", form: 5, integer: []string{"1000000"}, decimal: []string{"1000000.0", "1000000.00", "1000000.000"}}, - 92: {locales: "br", form: 0, integer: []string{"0", "5~8", "10~20", "100", "1000", "10000", "100000"}, decimal: []string{"0.0~0.9", "1.1~1.6", "10.0", "100.0", "1000.0", "10000.0", "100000.0"}}, - 93: {locales: "ga", form: 2, integer: []string{"1"}, decimal: []string{"1.0", "1.00", "1.000", "1.0000"}}, - 94: {locales: "ga", form: 3, integer: []string{"2"}, decimal: []string{"2.0", "2.00", "2.000", "2.0000"}}, - 95: {locales: "ga", form: 4, integer: []string{"3~6"}, decimal: []string{"3.0", "4.0", "5.0", "6.0", "3.00", "4.00", "5.00", "6.00", "3.000", "4.000", "5.000", "6.000", "3.0000", "4.0000", "5.0000", "6.0000"}}, - 96: {locales: "ga", form: 5, integer: []string{"7~10"}, decimal: []string{"7.0", "8.0", "9.0", "10.0", "7.00", "8.00", "9.00", "10.00", "7.000", "8.000", "9.000", "10.000", "7.0000", "8.0000", "9.0000", "10.0000"}}, - 97: {locales: "ga", form: 0, integer: []string{"0", "11~25", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0~0.9", "1.1~1.6", "10.1", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, - 98: {locales: "gv", form: 2, integer: []string{"1", "11", "21", "31", "41", "51", "61", "71", "101", "1001"}, decimal: []string(nil)}, - 99: {locales: "gv", form: 3, integer: []string{"2", "12", "22", "32", "42", "52", "62", "72", "102", "1002"}, decimal: []string(nil)}, - 100: {locales: "gv", form: 4, integer: []string{"0", "20", "40", "60", "80", "100", "120", "140", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, - 101: {locales: "gv", form: 5, integer: []string(nil), decimal: []string{"0.0~1.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, - 102: {locales: "gv", form: 0, integer: []string{"3~10", "13~19", "23", "103", "1003"}, decimal: []string(nil)}, - 103: {locales: "ar ars", form: 1, integer: []string{"0"}, decimal: []string{"0.0", "0.00", "0.000", "0.0000"}}, - 104: {locales: "ar ars", form: 2, integer: []string{"1"}, decimal: []string{"1.0", "1.00", "1.000", "1.0000"}}, - 105: {locales: "ar ars", form: 3, integer: []string{"2"}, decimal: []string{"2.0", "2.00", "2.000", "2.0000"}}, - 106: {locales: "ar ars", form: 4, integer: []string{"3~10", "103~110", "1003"}, decimal: []string{"3.0", "4.0", "5.0", "6.0", "7.0", "8.0", "9.0", "10.0", "103.0", "1003.0"}}, - 107: {locales: "ar ars", form: 5, integer: []string{"11~26", "111", "1011"}, decimal: []string{"11.0", "12.0", "13.0", "14.0", "15.0", "16.0", "17.0", "18.0", "111.0", "1011.0"}}, - 108: {locales: "ar ars", form: 0, integer: []string{"100~102", "200~202", "300~302", "400~402", "500~502", "600", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.1~0.9", "1.1~1.7", "10.1", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, - 109: {locales: "cy", form: 1, integer: []string{"0"}, decimal: []string{"0.0", "0.00", "0.000", "0.0000"}}, - 110: {locales: "cy", form: 2, integer: []string{"1"}, decimal: []string{"1.0", "1.00", "1.000", "1.0000"}}, - 111: {locales: "cy", form: 3, integer: []string{"2"}, decimal: []string{"2.0", "2.00", "2.000", "2.0000"}}, - 112: {locales: "cy", form: 4, integer: []string{"3"}, decimal: []string{"3.0", "3.00", "3.000", "3.0000"}}, - 113: {locales: "cy", form: 5, integer: []string{"6"}, decimal: []string{"6.0", "6.00", "6.000", "6.0000"}}, - 114: {locales: "cy", form: 0, integer: []string{"4", "5", "7~20", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.1~0.9", "1.1~1.7", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, -} // Size: 8304 bytes + 5: {locales: "pt", form: 2, integer: []string{"0", "1"}, decimal: []string{"0.0~1.5"}}, + 6: {locales: "pt", form: 0, integer: []string{"2~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"2.0~3.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 7: {locales: "ast ca de en et fi fy gl io it ji nl pt_PT sv sw ur yi", form: 2, integer: []string{"1"}, decimal: []string(nil)}, + 8: {locales: "ast ca de en et fi fy gl io it ji nl pt_PT sv sw ur yi", form: 0, integer: []string{"0", "2~16", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0~1.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 9: {locales: "si", form: 2, integer: []string{"0", "1"}, decimal: []string{"0.0", "0.1", "1.0", "0.00", "0.01", "1.00", "0.000", "0.001", "1.000", "0.0000", "0.0001", "1.0000"}}, + 10: {locales: "si", form: 0, integer: []string{"2~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.2~0.9", "1.1~1.8", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 11: {locales: "ak bh guw ln mg nso pa ti wa", form: 2, integer: []string{"0", "1"}, decimal: []string{"0.0", "1.0", "0.00", "1.00", "0.000", "1.000", "0.0000", "1.0000"}}, + 12: {locales: "ak bh guw ln mg nso pa ti wa", form: 0, integer: []string{"2~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.1~0.9", "1.1~1.7", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 13: {locales: "tzm", form: 2, integer: []string{"0", "1", "11~24"}, decimal: []string{"0.0", "1.0", "11.0", "12.0", "13.0", "14.0", "15.0", "16.0", "17.0", "18.0", "19.0", "20.0", "21.0", "22.0", "23.0", "24.0"}}, + 14: {locales: "tzm", form: 0, integer: []string{"2~10", "100~106", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.1~0.9", "1.1~1.7", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 15: {locales: "af asa az bem bez bg brx ce cgg chr ckb dv ee el eo es eu fo fur gsw ha haw hu jgo jmc ka kaj kcg kk kkj kl ks ksb ku ky lb lg mas mgo ml mn nah nb nd ne nn nnh no nr ny nyn om or os pap ps rm rof rwk saq sd sdh seh sn so sq ss ssy st syr ta te teo tig tk tn tr ts ug uz ve vo vun wae xh xog", form: 2, integer: []string{"1"}, decimal: []string{"1.0", "1.00", "1.000", "1.0000"}}, + 16: {locales: "af asa az bem bez bg brx ce cgg chr ckb dv ee el eo es eu fo fur gsw ha haw hu jgo jmc ka kaj kcg kk kkj kl ks ksb ku ky lb lg mas mgo ml mn nah nb nd ne nn nnh no nr ny nyn om or os pap ps rm rof rwk saq sd sdh seh sn so sq ss ssy st syr ta te teo tig tk tn tr ts ug uz ve vo vun wae xh xog", form: 0, integer: []string{"0", "2~16", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0~0.9", "1.1~1.6", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 17: {locales: "da", form: 2, integer: []string{"1"}, decimal: []string{"0.1~1.6"}}, + 18: {locales: "da", form: 0, integer: []string{"0", "2~16", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0", "2.0~3.4", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 19: {locales: "is", form: 2, integer: []string{"1", "21", "31", "41", "51", "61", "71", "81", "101", "1001"}, decimal: []string{"0.1~1.6", "10.1", "100.1", "1000.1"}}, + 20: {locales: "is", form: 0, integer: []string{"0", "2~16", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0", "2.0", "3.0", "4.0", "5.0", "6.0", "7.0", "8.0", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 21: {locales: "mk", form: 2, integer: []string{"1", "11", "21", "31", "41", "51", "61", "71", "101", "1001"}, decimal: []string{"0.1", "1.1", "2.1", "3.1", "4.1", "5.1", "6.1", "7.1", "10.1", "100.1", "1000.1"}}, + 22: {locales: "mk", form: 0, integer: []string{"0", "2~10", "12~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0", "0.2~1.0", "1.2~1.7", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 23: {locales: "fil tl", form: 2, integer: []string{"0~3", "5", "7", "8", "10~13", "15", "17", "18", "20", "21", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0~0.3", "0.5", "0.7", "0.8", "1.0~1.3", "1.5", "1.7", "1.8", "2.0", "2.1", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 24: {locales: "fil tl", form: 0, integer: []string{"4", "6", "9", "14", "16", "19", "24", "26", "104", "1004"}, decimal: []string{"0.4", "0.6", "0.9", "1.4", "1.6", "1.9", "2.4", "2.6", "10.4", "100.4", "1000.4"}}, + 25: {locales: "lv prg", form: 1, integer: []string{"0", "10~20", "30", "40", "50", "60", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0", "10.0", "11.0", "12.0", "13.0", "14.0", "15.0", "16.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 26: {locales: "lv prg", form: 2, integer: []string{"1", "21", "31", "41", "51", "61", "71", "81", "101", "1001"}, decimal: []string{"0.1", "1.0", "1.1", "2.1", "3.1", "4.1", "5.1", "6.1", "7.1", "10.1", "100.1", "1000.1"}}, + 27: {locales: "lv prg", form: 0, integer: []string{"2~9", "22~29", "102", "1002"}, decimal: []string{"0.2~0.9", "1.2~1.9", "10.2", "100.2", "1000.2"}}, + 28: {locales: "lag", form: 1, integer: []string{"0"}, decimal: []string{"0.0", "0.00", "0.000", "0.0000"}}, + 29: {locales: "lag", form: 2, integer: []string{"1"}, decimal: []string{"0.1~1.6"}}, + 30: {locales: "lag", form: 0, integer: []string{"2~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"2.0~3.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 31: {locales: "ksh", form: 1, integer: []string{"0"}, decimal: []string{"0.0", "0.00", "0.000", "0.0000"}}, + 32: {locales: "ksh", form: 2, integer: []string{"1"}, decimal: []string{"1.0", "1.00", "1.000", "1.0000"}}, + 33: {locales: "ksh", form: 0, integer: []string{"2~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.1~0.9", "1.1~1.7", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 34: {locales: "iu kw naq se sma smi smj smn sms", form: 2, integer: []string{"1"}, decimal: []string{"1.0", "1.00", "1.000", "1.0000"}}, + 35: {locales: "iu kw naq se sma smi smj smn sms", form: 3, integer: []string{"2"}, decimal: []string{"2.0", "2.00", "2.000", "2.0000"}}, + 36: {locales: "iu kw naq se sma smi smj smn sms", form: 0, integer: []string{"0", "3~17", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0~0.9", "1.1~1.6", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 37: {locales: "shi", form: 2, integer: []string{"0", "1"}, decimal: []string{"0.0~1.0", "0.00~0.04"}}, + 38: {locales: "shi", form: 4, integer: []string{"2~10"}, decimal: []string{"2.0", "3.0", "4.0", "5.0", "6.0", "7.0", "8.0", "9.0", "10.0", "2.00", "3.00", "4.00", "5.00", "6.00", "7.00", "8.00"}}, + 39: {locales: "shi", form: 0, integer: []string{"11~26", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"1.1~1.9", "2.1~2.7", "10.1", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 40: {locales: "mo ro", form: 2, integer: []string{"1"}, decimal: []string(nil)}, + 41: {locales: "mo ro", form: 4, integer: []string{"0", "2~16", "101", "1001"}, decimal: []string{"0.0~1.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 42: {locales: "mo ro", form: 0, integer: []string{"20~35", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 43: {locales: "bs hr sh sr", form: 2, integer: []string{"1", "21", "31", "41", "51", "61", "71", "81", "101", "1001"}, decimal: []string{"0.1", "1.1", "2.1", "3.1", "4.1", "5.1", "6.1", "7.1", "10.1", "100.1", "1000.1"}}, + 44: {locales: "bs hr sh sr", form: 4, integer: []string{"2~4", "22~24", "32~34", "42~44", "52~54", "62", "102", "1002"}, decimal: []string{"0.2~0.4", "1.2~1.4", "2.2~2.4", "3.2~3.4", "4.2~4.4", "5.2", "10.2", "100.2", "1000.2"}}, + 45: {locales: "bs hr sh sr", form: 0, integer: []string{"0", "5~19", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0", "0.5~1.0", "1.5~2.0", "2.5~2.7", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 46: {locales: "gd", form: 2, integer: []string{"1", "11"}, decimal: []string{"1.0", "11.0", "1.00", "11.00", "1.000", "11.000", "1.0000"}}, + 47: {locales: "gd", form: 3, integer: []string{"2", "12"}, decimal: []string{"2.0", "12.0", "2.00", "12.00", "2.000", "12.000", "2.0000"}}, + 48: {locales: "gd", form: 4, integer: []string{"3~10", "13~19"}, decimal: []string{"3.0", "4.0", "5.0", "6.0", "7.0", "8.0", "9.0", "10.0", "13.0", "14.0", "15.0", "16.0", "17.0", "18.0", "19.0", "3.00"}}, + 49: {locales: "gd", form: 0, integer: []string{"0", "20~34", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0~0.9", "1.1~1.6", "10.1", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 50: {locales: "sl", form: 2, integer: []string{"1", "101", "201", "301", "401", "501", "601", "701", "1001"}, decimal: []string(nil)}, + 51: {locales: "sl", form: 3, integer: []string{"2", "102", "202", "302", "402", "502", "602", "702", "1002"}, decimal: []string(nil)}, + 52: {locales: "sl", form: 4, integer: []string{"3", "4", "103", "104", "203", "204", "303", "304", "403", "404", "503", "504", "603", "604", "703", "704", "1003"}, decimal: []string{"0.0~1.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 53: {locales: "sl", form: 0, integer: []string{"0", "5~19", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 54: {locales: "dsb hsb", form: 2, integer: []string{"1", "101", "201", "301", "401", "501", "601", "701", "1001"}, decimal: []string{"0.1", "1.1", "2.1", "3.1", "4.1", "5.1", "6.1", "7.1", "10.1", "100.1", "1000.1"}}, + 55: {locales: "dsb hsb", form: 3, integer: []string{"2", "102", "202", "302", "402", "502", "602", "702", "1002"}, decimal: []string{"0.2", "1.2", "2.2", "3.2", "4.2", "5.2", "6.2", "7.2", "10.2", "100.2", "1000.2"}}, + 56: {locales: "dsb hsb", form: 4, integer: []string{"3", "4", "103", "104", "203", "204", "303", "304", "403", "404", "503", "504", "603", "604", "703", "704", "1003"}, decimal: []string{"0.3", "0.4", "1.3", "1.4", "2.3", "2.4", "3.3", "3.4", "4.3", "4.4", "5.3", "5.4", "6.3", "6.4", "7.3", "7.4", "10.3", "100.3", "1000.3"}}, + 57: {locales: "dsb hsb", form: 0, integer: []string{"0", "5~19", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0", "0.5~1.0", "1.5~2.0", "2.5~2.7", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 58: {locales: "he iw", form: 2, integer: []string{"1"}, decimal: []string(nil)}, + 59: {locales: "he iw", form: 3, integer: []string{"2"}, decimal: []string(nil)}, + 60: {locales: "he iw", form: 5, integer: []string{"20", "30", "40", "50", "60", "70", "80", "90", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 61: {locales: "he iw", form: 0, integer: []string{"0", "3~17", "101", "1001"}, decimal: []string{"0.0~1.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 62: {locales: "cs sk", form: 2, integer: []string{"1"}, decimal: []string(nil)}, + 63: {locales: "cs sk", form: 4, integer: []string{"2~4"}, decimal: []string(nil)}, + 64: {locales: "cs sk", form: 5, integer: []string(nil), decimal: []string{"0.0~1.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 65: {locales: "cs sk", form: 0, integer: []string{"0", "5~19", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 66: {locales: "pl", form: 2, integer: []string{"1"}, decimal: []string(nil)}, + 67: {locales: "pl", form: 4, integer: []string{"2~4", "22~24", "32~34", "42~44", "52~54", "62", "102", "1002"}, decimal: []string(nil)}, + 68: {locales: "pl", form: 5, integer: []string{"0", "5~19", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 69: {locales: "pl", form: 0, integer: []string(nil), decimal: []string{"0.0~1.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 70: {locales: "be", form: 2, integer: []string{"1", "21", "31", "41", "51", "61", "71", "81", "101", "1001"}, decimal: []string{"1.0", "21.0", "31.0", "41.0", "51.0", "61.0", "71.0", "81.0", "101.0", "1001.0"}}, + 71: {locales: "be", form: 4, integer: []string{"2~4", "22~24", "32~34", "42~44", "52~54", "62", "102", "1002"}, decimal: []string{"2.0", "3.0", "4.0", "22.0", "23.0", "24.0", "32.0", "33.0", "102.0", "1002.0"}}, + 72: {locales: "be", form: 5, integer: []string{"0", "5~19", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0", "5.0", "6.0", "7.0", "8.0", "9.0", "10.0", "11.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 73: {locales: "be", form: 0, integer: []string(nil), decimal: []string{"0.1~0.9", "1.1~1.7", "10.1", "100.1", "1000.1"}}, + 74: {locales: "lt", form: 2, integer: []string{"1", "21", "31", "41", "51", "61", "71", "81", "101", "1001"}, decimal: []string{"1.0", "21.0", "31.0", "41.0", "51.0", "61.0", "71.0", "81.0", "101.0", "1001.0"}}, + 75: {locales: "lt", form: 4, integer: []string{"2~9", "22~29", "102", "1002"}, decimal: []string{"2.0", "3.0", "4.0", "5.0", "6.0", "7.0", "8.0", "9.0", "22.0", "102.0", "1002.0"}}, + 76: {locales: "lt", form: 5, integer: []string(nil), decimal: []string{"0.1~0.9", "1.1~1.7", "10.1", "100.1", "1000.1"}}, + 77: {locales: "lt", form: 0, integer: []string{"0", "10~20", "30", "40", "50", "60", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0", "10.0", "11.0", "12.0", "13.0", "14.0", "15.0", "16.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 78: {locales: "mt", form: 2, integer: []string{"1"}, decimal: []string{"1.0", "1.00", "1.000", "1.0000"}}, + 79: {locales: "mt", form: 4, integer: []string{"0", "2~10", "102~107", "1002"}, decimal: []string{"0.0", "2.0", "3.0", "4.0", "5.0", "6.0", "7.0", "8.0", "10.0", "102.0", "1002.0"}}, + 80: {locales: "mt", form: 5, integer: []string{"11~19", "111~117", "1011"}, decimal: []string{"11.0", "12.0", "13.0", "14.0", "15.0", "16.0", "17.0", "18.0", "111.0", "1011.0"}}, + 81: {locales: "mt", form: 0, integer: []string{"20~35", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.1~0.9", "1.1~1.7", "10.1", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 82: {locales: "ru uk", form: 2, integer: []string{"1", "21", "31", "41", "51", "61", "71", "81", "101", "1001"}, decimal: []string(nil)}, + 83: {locales: "ru uk", form: 4, integer: []string{"2~4", "22~24", "32~34", "42~44", "52~54", "62", "102", "1002"}, decimal: []string(nil)}, + 84: {locales: "ru uk", form: 5, integer: []string{"0", "5~19", "100", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 85: {locales: "ru uk", form: 0, integer: []string(nil), decimal: []string{"0.0~1.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 86: {locales: "br", form: 2, integer: []string{"1", "21", "31", "41", "51", "61", "81", "101", "1001"}, decimal: []string{"1.0", "21.0", "31.0", "41.0", "51.0", "61.0", "81.0", "101.0", "1001.0"}}, + 87: {locales: "br", form: 3, integer: []string{"2", "22", "32", "42", "52", "62", "82", "102", "1002"}, decimal: []string{"2.0", "22.0", "32.0", "42.0", "52.0", "62.0", "82.0", "102.0", "1002.0"}}, + 88: {locales: "br", form: 4, integer: []string{"3", "4", "9", "23", "24", "29", "33", "34", "39", "43", "44", "49", "103", "1003"}, decimal: []string{"3.0", "4.0", "9.0", "23.0", "24.0", "29.0", "33.0", "34.0", "103.0", "1003.0"}}, + 89: {locales: "br", form: 5, integer: []string{"1000000"}, decimal: []string{"1000000.0", "1000000.00", "1000000.000"}}, + 90: {locales: "br", form: 0, integer: []string{"0", "5~8", "10~20", "100", "1000", "10000", "100000"}, decimal: []string{"0.0~0.9", "1.1~1.6", "10.0", "100.0", "1000.0", "10000.0", "100000.0"}}, + 91: {locales: "ga", form: 2, integer: []string{"1"}, decimal: []string{"1.0", "1.00", "1.000", "1.0000"}}, + 92: {locales: "ga", form: 3, integer: []string{"2"}, decimal: []string{"2.0", "2.00", "2.000", "2.0000"}}, + 93: {locales: "ga", form: 4, integer: []string{"3~6"}, decimal: []string{"3.0", "4.0", "5.0", "6.0", "3.00", "4.00", "5.00", "6.00", "3.000", "4.000", "5.000", "6.000", "3.0000", "4.0000", "5.0000", "6.0000"}}, + 94: {locales: "ga", form: 5, integer: []string{"7~10"}, decimal: []string{"7.0", "8.0", "9.0", "10.0", "7.00", "8.00", "9.00", "10.00", "7.000", "8.000", "9.000", "10.000", "7.0000", "8.0000", "9.0000", "10.0000"}}, + 95: {locales: "ga", form: 0, integer: []string{"0", "11~25", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.0~0.9", "1.1~1.6", "10.1", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 96: {locales: "gv", form: 2, integer: []string{"1", "11", "21", "31", "41", "51", "61", "71", "101", "1001"}, decimal: []string(nil)}, + 97: {locales: "gv", form: 3, integer: []string{"2", "12", "22", "32", "42", "52", "62", "72", "102", "1002"}, decimal: []string(nil)}, + 98: {locales: "gv", form: 4, integer: []string{"0", "20", "40", "60", "80", "100", "120", "140", "1000", "10000", "100000", "1000000"}, decimal: []string(nil)}, + 99: {locales: "gv", form: 5, integer: []string(nil), decimal: []string{"0.0~1.5", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 100: {locales: "gv", form: 0, integer: []string{"3~10", "13~19", "23", "103", "1003"}, decimal: []string(nil)}, + 101: {locales: "ar ars", form: 1, integer: []string{"0"}, decimal: []string{"0.0", "0.00", "0.000", "0.0000"}}, + 102: {locales: "ar ars", form: 2, integer: []string{"1"}, decimal: []string{"1.0", "1.00", "1.000", "1.0000"}}, + 103: {locales: "ar ars", form: 3, integer: []string{"2"}, decimal: []string{"2.0", "2.00", "2.000", "2.0000"}}, + 104: {locales: "ar ars", form: 4, integer: []string{"3~10", "103~110", "1003"}, decimal: []string{"3.0", "4.0", "5.0", "6.0", "7.0", "8.0", "9.0", "10.0", "103.0", "1003.0"}}, + 105: {locales: "ar ars", form: 5, integer: []string{"11~26", "111", "1011"}, decimal: []string{"11.0", "12.0", "13.0", "14.0", "15.0", "16.0", "17.0", "18.0", "111.0", "1011.0"}}, + 106: {locales: "ar ars", form: 0, integer: []string{"100~102", "200~202", "300~302", "400~402", "500~502", "600", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.1~0.9", "1.1~1.7", "10.1", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, + 107: {locales: "cy", form: 1, integer: []string{"0"}, decimal: []string{"0.0", "0.00", "0.000", "0.0000"}}, + 108: {locales: "cy", form: 2, integer: []string{"1"}, decimal: []string{"1.0", "1.00", "1.000", "1.0000"}}, + 109: {locales: "cy", form: 3, integer: []string{"2"}, decimal: []string{"2.0", "2.00", "2.000", "2.0000"}}, + 110: {locales: "cy", form: 4, integer: []string{"3"}, decimal: []string{"3.0", "3.00", "3.000", "3.0000"}}, + 111: {locales: "cy", form: 5, integer: []string{"6"}, decimal: []string{"6.0", "6.00", "6.000", "6.0000"}}, + 112: {locales: "cy", form: 0, integer: []string{"4", "5", "7~20", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.1~0.9", "1.1~1.7", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}}, +} // Size: 8160 bytes -// Total table size 12576 bytes (12KiB); checksum: 166DAB75 +// Total table size 12936 bytes (12KiB); checksum: 8456DC5D diff --git a/vendor/golang.org/x/text/feature/plural/example_test.go b/vendor/golang.org/x/text/feature/plural/example_test.go new file mode 100644 index 0000000..c75408c --- /dev/null +++ b/vendor/golang.org/x/text/feature/plural/example_test.go @@ -0,0 +1,46 @@ +// Copyright 2017 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. + +package plural_test + +import ( + "golang.org/x/text/feature/plural" + "golang.org/x/text/language" + "golang.org/x/text/message" +) + +func ExampleSelect() { + // Manually set some translations. This is typically done programmatically. + message.Set(language.English, "%d files remaining", + plural.Selectf(1, "%d", + "=0", "done!", + plural.One, "one file remaining", + plural.Other, "%[1]d files remaining", + )) + message.Set(language.Dutch, "%d files remaining", + plural.Selectf(1, "%d", + "=0", "klaar!", + // One can also use a string instead of a Kind + "one", "nog één bestand te gaan", + "other", "nog %[1]d bestanden te gaan", + )) + + p := message.NewPrinter(language.English) + p.Printf("%d files remaining", 5) + p.Println() + p.Printf("%d files remaining", 1) + p.Println() + + p = message.NewPrinter(language.Dutch) + p.Printf("%d files remaining", 1) + p.Println() + p.Printf("%d files remaining", 0) + p.Println() + + // Output: + // 5 files remaining + // one file remaining + // nog één bestand te gaan + // klaar! +} diff --git a/vendor/golang.org/x/text/feature/plural/gen.go b/vendor/golang.org/x/text/feature/plural/gen.go index a0de986..104986a 100644 --- a/vendor/golang.org/x/text/feature/plural/gen.go +++ b/vendor/golang.org/x/text/feature/plural/gen.go @@ -63,9 +63,9 @@ import ( "strconv" "strings" - "golang.org/x/text/internal" "golang.org/x/text/internal/gen" - "golang.org/x/text/language" + "golang.org/x/text/internal/language" + "golang.org/x/text/internal/language/compact" "golang.org/x/text/unicode/cldr" ) @@ -198,7 +198,7 @@ func genPlurals(w *gen.CodeWriter, data *cldr.CLDR) { rules := []pluralCheck{} index := []byte{0} - langMap := map[int]byte{0: 0} // From compact language index to index + langMap := map[compact.ID]byte{0: 0} for _, pRules := range plurals.PluralRules { // Parse the rules. @@ -251,7 +251,7 @@ func genPlurals(w *gen.CodeWriter, data *cldr.CLDR) { if strings.TrimSpace(loc) == "" { continue } - lang, ok := language.CompactIndex(language.MustParse(loc)) + lang, ok := compact.FromTag(language.MustParse(loc)) if !ok { log.Printf("No compact index for locale %q", loc) } @@ -261,16 +261,28 @@ func genPlurals(w *gen.CodeWriter, data *cldr.CLDR) { } w.WriteVar(plurals.Type+"Rules", rules) w.WriteVar(plurals.Type+"Index", index) - // Expand the values. - langToIndex := make([]byte, language.NumCompactTags) + // Expand the values: first by using the parent relationship. + langToIndex := make([]byte, compact.NumCompactTags) for i := range langToIndex { - for p := i; ; p = int(internal.Parent[p]) { + for p := compact.ID(i); ; p = p.Parent() { if x, ok := langMap[p]; ok { langToIndex[i] = x break } } } + // Now expand by including entries with identical languages for which + // one isn't set. + for i, v := range langToIndex { + if v == 0 { + id, _ := compact.FromTag(language.Tag{ + LangID: compact.ID(i).Tag().LangID, + }) + if p := langToIndex[id]; p != 0 { + langToIndex[i] = p + } + } + } w.WriteVar(plurals.Type+"LangToIndex", langToIndex) // Need to convert array to slice because of golang.org/issue/7651. // This will allow tables to be dropped when unused. This is especially diff --git a/vendor/golang.org/x/text/feature/plural/message.go b/vendor/golang.org/x/text/feature/plural/message.go new file mode 100644 index 0000000..f931f8a --- /dev/null +++ b/vendor/golang.org/x/text/feature/plural/message.go @@ -0,0 +1,244 @@ +// Copyright 2017 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. + +package plural + +import ( + "fmt" + "io/ioutil" + "reflect" + "strconv" + + "golang.org/x/text/internal/catmsg" + "golang.org/x/text/internal/number" + "golang.org/x/text/language" + "golang.org/x/text/message/catalog" +) + +// TODO: consider deleting this interface. Maybe VisibleDigits is always +// sufficient and practical. + +// Interface is used for types that can determine their own plural form. +type Interface interface { + // PluralForm reports the plural form for the given language of the + // underlying value. It also returns the integer value. If the integer value + // is larger than fits in n, PluralForm may return a value modulo + // 10,000,000. + PluralForm(t language.Tag, scale int) (f Form, n int) +} + +// Selectf returns the first case for which its selector is a match for the +// arg-th substitution argument to a formatting call, formatting it as indicated +// by format. +// +// The cases argument are pairs of selectors and messages. Selectors are of type +// string or Form. Messages are of type string or catalog.Message. A selector +// matches an argument if: +// - it is "other" or Other +// - it matches the plural form of the argument: "zero", "one", "two", "few", +// or "many", or the equivalent Form +// - it is of the form "=x" where x is an integer that matches the value of +// the argument. +// - it is of the form " kindDefault { + e.EncodeUint(uint64(m.scale)) + } + + forms := validForms(cardinal, e.Language()) + + for i := 0; i < len(m.cases); { + if err := compileSelector(e, forms, m.cases[i]); err != nil { + return err + } + if i++; i >= len(m.cases) { + return fmt.Errorf("plural: no message defined for selector %v", m.cases[i-1]) + } + var msg catalog.Message + switch x := m.cases[i].(type) { + case string: + msg = catalog.String(x) + case catalog.Message: + msg = x + default: + return fmt.Errorf("plural: message of type %T; must be string or catalog.Message", x) + } + if err := e.EncodeMessage(msg); err != nil { + return err + } + i++ + } + return nil +} + +func compileSelector(e *catmsg.Encoder, valid []Form, selector interface{}) error { + form := Other + switch x := selector.(type) { + case string: + if x == "" { + return fmt.Errorf("plural: empty selector") + } + if c := x[0]; c == '=' || c == '<' { + val, err := strconv.ParseUint(x[1:], 10, 16) + if err != nil { + return fmt.Errorf("plural: invalid number in selector %q: %v", selector, err) + } + e.EncodeUint(uint64(c)) + e.EncodeUint(val) + return nil + } + var ok bool + form, ok = countMap[x] + if !ok { + return fmt.Errorf("plural: invalid plural form %q", selector) + } + case Form: + form = x + default: + return fmt.Errorf("plural: selector of type %T; want string or Form", selector) + } + + ok := false + for _, f := range valid { + if f == form { + ok = true + break + } + } + if !ok { + return fmt.Errorf("plural: form %q not supported for language %q", selector, e.Language()) + } + e.EncodeUint(uint64(form)) + return nil +} + +func execute(d *catmsg.Decoder) bool { + lang := d.Language() + argN := int(d.DecodeUint()) + kind := int(d.DecodeUint()) + scale := -1 // default + if kind > kindDefault { + scale = int(d.DecodeUint()) + } + form := Other + n := -1 + if arg := d.Arg(argN); arg == nil { + // Default to Other. + } else if x, ok := arg.(number.VisibleDigits); ok { + d := x.Digits(nil, lang, scale) + form, n = cardinal.matchDisplayDigits(lang, &d) + } else if x, ok := arg.(Interface); ok { + // This covers lists and formatters from the number package. + form, n = x.PluralForm(lang, scale) + } else { + var f number.Formatter + switch kind { + case kindScale: + f.InitDecimal(lang) + f.SetScale(scale) + case kindScientific: + f.InitScientific(lang) + f.SetScale(scale) + case kindPrecision: + f.InitDecimal(lang) + f.SetPrecision(scale) + case kindDefault: + // sensible default + f.InitDecimal(lang) + if k := reflect.TypeOf(arg).Kind(); reflect.Int <= k && k <= reflect.Uintptr { + f.SetScale(0) + } else { + f.SetScale(2) + } + } + var dec number.Decimal // TODO: buffer in Printer + dec.Convert(f.RoundingContext, arg) + v := number.FormatDigits(&dec, f.RoundingContext) + if !v.NaN && !v.Inf { + form, n = cardinal.matchDisplayDigits(d.Language(), &v) + } + } + for !d.Done() { + f := d.DecodeUint() + if (f == '=' && n == int(d.DecodeUint())) || + (f == '<' && 0 <= n && n < int(d.DecodeUint())) || + form == Form(f) || + Other == Form(f) { + return d.ExecuteMessage() + } + d.SkipMessage() + } + return false +} diff --git a/vendor/golang.org/x/text/feature/plural/message_test.go b/vendor/golang.org/x/text/feature/plural/message_test.go new file mode 100644 index 0000000..b5bc47e --- /dev/null +++ b/vendor/golang.org/x/text/feature/plural/message_test.go @@ -0,0 +1,197 @@ +// Copyright 2017 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. + +package plural + +import ( + "fmt" + "strings" + "testing" + + "golang.org/x/text/internal/catmsg" + "golang.org/x/text/language" + "golang.org/x/text/message/catalog" +) + +func TestSelect(t *testing.T) { + lang := language.English + type test struct { + arg interface{} + result string + err string + } + testCases := []struct { + desc string + msg catalog.Message + err string + tests []test + }{{ + desc: "basic", + msg: Selectf(1, "%d", "one", "foo", "other", "bar"), + tests: []test{ + {arg: 0, result: "bar"}, + {arg: 1, result: "foo"}, + {arg: 2, result: "bar"}, + {arg: opposite(1), result: "bar"}, + {arg: opposite(2), result: "foo"}, + {arg: "unknown", result: "bar"}, // other + }, + }, { + desc: "comparisons", + msg: Selectf(1, "%d", + "=0", "zero", + "=1", "one", + "one", "cannot match", // never matches + "<5", "<5", // never matches + "=5", "=5", + Other, "other"), + tests: []test{ + {arg: 0, result: "zero"}, + {arg: 1, result: "one"}, + {arg: 2, result: "<5"}, + {arg: 4, result: "<5"}, + {arg: 5, result: "=5"}, + {arg: 6, result: "other"}, + {arg: "unknown", result: "other"}, + }, + }, { + desc: "fractions", + msg: Selectf(1, "%.2f", "one", "foo", "other", "bar"), + tests: []test{ + // fractions are always plural in english + {arg: 0, result: "bar"}, + {arg: 1, result: "bar"}, + }, + }, { + desc: "decimal without fractions", + msg: Selectf(1, "%.0f", "one", "foo", "other", "bar"), + tests: []test{ + // fractions are always plural in english + {arg: 0, result: "bar"}, + {arg: 1, result: "foo"}, + }, + }, { + desc: "scientific", + msg: Selectf(1, "%.0e", "one", "foo", "other", "bar"), + tests: []test{ + {arg: 0, result: "bar"}, + {arg: 1, result: "foo"}, + }, + }, { + desc: "variable", + msg: Selectf(1, "%.1g", "one", "foo", "other", "bar"), + tests: []test{ + // fractions are always plural in english + {arg: 0, result: "bar"}, + {arg: 1, result: "foo"}, + {arg: 2, result: "bar"}, + }, + }, { + desc: "default", + msg: Selectf(1, "", "one", "foo", "other", "bar"), + tests: []test{ + {arg: 0, result: "bar"}, + {arg: 1, result: "foo"}, + {arg: 2, result: "bar"}, + {arg: 1.0, result: "bar"}, + }, + }, { + desc: "nested", + msg: Selectf(1, "", "other", Selectf(2, "", "one", "foo", "other", "bar")), + tests: []test{ + {arg: 0, result: "bar"}, + {arg: 1, result: "foo"}, + {arg: 2, result: "bar"}, + }, + }, { + desc: "arg unavailable", + msg: Selectf(100, "%.2f", "one", "foo", "other", "bar"), + tests: []test{{arg: 1, result: "bar"}}, + }, { + desc: "no match", + msg: Selectf(1, "%.2f", "one", "foo"), + tests: []test{{arg: 0, result: "bar", err: catmsg.ErrNoMatch.Error()}}, + }, { + desc: "error invalid form", + err: `invalid plural form "excessive"`, + msg: Selectf(1, "%d", "excessive", "foo"), + }, { + desc: "error form not used by language", + err: `form "many" not supported for language "en"`, + msg: Selectf(1, "%d", "many", "foo"), + }, { + desc: "error invalid selector", + err: `selector of type int; want string or Form`, + msg: Selectf(1, "%d", 1, "foo"), + }, { + desc: "error missing message", + err: `no message defined for selector one`, + msg: Selectf(1, "%d", "one"), + }, { + desc: "error invalid number", + err: `invalid number in selector "<1.00"`, + msg: Selectf(1, "%d", "<1.00"), + }, { + desc: "error empty selector", + err: `empty selector`, + msg: Selectf(1, "%d", "", "foo"), + }, { + desc: "error invalid message", + err: `message of type int; must be string or catalog.Message`, + msg: Selectf(1, "%d", "one", 3), + }, { + desc: "nested error", + err: `empty selector`, + msg: Selectf(1, "", "other", Selectf(2, "", "")), + }} + for _, tc := range testCases { + t.Run(tc.desc, func(t *testing.T) { + data, err := catmsg.Compile(lang, nil, tc.msg) + chkError(t, err, tc.err) + for _, tx := range tc.tests { + t.Run(fmt.Sprint(tx.arg), func(t *testing.T) { + r := renderer{arg: tx.arg} + d := catmsg.NewDecoder(lang, &r, nil) + err := d.Execute(data) + chkError(t, err, tx.err) + if r.result != tx.result { + t.Errorf("got %q; want %q", r.result, tx.result) + } + }) + } + }) + } +} + +func chkError(t *testing.T, got error, want string) { + if (got == nil && want != "") || + (got != nil && (want == "" || !strings.Contains(got.Error(), want))) { + t.Fatalf("got %v; want %v", got, want) + } + if got != nil { + t.SkipNow() + } +} + +type renderer struct { + arg interface{} + result string +} + +func (r *renderer) Render(s string) { r.result += s } +func (r *renderer) Arg(i int) interface{} { + if i > 10 { // Allow testing "arg unavailable" path + return nil + } + return r.arg +} + +type opposite int + +func (o opposite) PluralForm(lang language.Tag, scale int) (Form, int) { + if o == 1 { + return Other, 1 + } + return One, int(o) +} diff --git a/vendor/golang.org/x/text/feature/plural/plural.go b/vendor/golang.org/x/text/feature/plural/plural.go index 2b4cfe3..517a628 100644 --- a/vendor/golang.org/x/text/feature/plural/plural.go +++ b/vendor/golang.org/x/text/feature/plural/plural.go @@ -13,6 +13,8 @@ package plural import ( + "golang.org/x/text/internal/language/compact" + "golang.org/x/text/internal/number" "golang.org/x/text/language" ) @@ -109,24 +111,27 @@ func getIntApprox(digits []byte, start, end, nMod, big int) (n int) { // 123 []byte{1, 2, 3} 3 0 // 123.4 []byte{1, 2, 3, 4} 3 1 // 123.40 []byte{1, 2, 3, 4} 3 2 -// 100000 []byte{1} 6......0 -// 100000.00 []byte{1} 6......3 +// 100000 []byte{1} 6 0 +// 100000.00 []byte{1} 6 3 func (p *Rules) MatchDigits(t language.Tag, digits []byte, exp, scale int) Form { - index, _ := language.CompactIndex(t) - endN := len(digits) + exp + index := tagToID(t) // Differentiate up to including mod 1000000 for the integer part. - n := getIntApprox(digits, 0, endN, 6, 1000000) + n := getIntApprox(digits, 0, exp, 6, 1000000) // Differentiate up to including mod 100 for the fractional part. - f := getIntApprox(digits, endN, endN+scale, 2, 100) + f := getIntApprox(digits, exp, exp+scale, 2, 100) return matchPlural(p, index, n, f, scale) } +func (p *Rules) matchDisplayDigits(t language.Tag, d *number.Digits) (Form, int) { + n := getIntApprox(d.Digits, 0, int(d.Exp), 6, 1000000) + return p.MatchDigits(t, d.Digits, int(d.Exp), d.NumFracDigits()), n +} + func validForms(p *Rules, t language.Tag) (forms []Form) { - index, _ := language.CompactIndex(t) - offset := p.langToIndex[index] + offset := p.langToIndex[tagToID(t)] rules := p.rules[p.index[offset]:p.index[offset+1]] forms = append(forms, Other) @@ -141,11 +146,28 @@ func validForms(p *Rules, t language.Tag) (forms []Form) { } func (p *Rules) matchComponents(t language.Tag, n, f, scale int) Form { - index, _ := language.CompactIndex(t) - return matchPlural(p, index, n, f, scale) + return matchPlural(p, tagToID(t), n, f, scale) } -func matchPlural(p *Rules, index int, n, f, v int) Form { +// MatchPlural returns the plural form for the given language and plural +// operands (as defined in +// http://unicode.org/reports/tr35/tr35-numbers.html#Language_Plural_Rules): +// where +// n absolute value of the source number (integer and decimals) +// input +// i integer digits of n. +// v number of visible fraction digits in n, with trailing zeros. +// w number of visible fraction digits in n, without trailing zeros. +// f visible fractional digits in n, with trailing zeros (f = t * 10^(v-w)) +// t visible fractional digits in n, without trailing zeros. +// +// If any of the operand values is too large to fit in an int, it is okay to +// pass the value modulo 10,000,000. +func (p *Rules) MatchPlural(lang language.Tag, i, v, w, f, t int) Form { + return matchPlural(p, tagToID(lang), i, f, v) +} + +func matchPlural(p *Rules, index compact.ID, n, f, v int) Form { nMask := p.inclusionMasks[n%maxMod] // Compute the fMask inline in the rules below, as it is relatively rare. // fMask := p.inclusionMasks[f%maxMod] @@ -232,3 +254,8 @@ func matchPlural(p *Rules, index int, n, f, v int) Form { } return Other } + +func tagToID(t language.Tag) compact.ID { + id, _ := compact.RegionalID(compact.Tag(t)) + return id +} diff --git a/vendor/golang.org/x/text/feature/plural/plural_test.go b/vendor/golang.org/x/text/feature/plural/plural_test.go index e5524c5..feee4f0 100644 --- a/vendor/golang.org/x/text/feature/plural/plural_test.go +++ b/vendor/golang.org/x/text/feature/plural/plural_test.go @@ -28,6 +28,8 @@ func TestGetIntApprox(t *testing.T) { {"123", 0, 2, 2, 12}, {"123", 3, 4, 2, 0}, {"12345", 3, 4, 2, 4}, + {"40", 0, 1, 2, 4}, + {"1", 0, 7, 2, big}, {"123", 0, 5, 2, big}, {"123", 0, 5, 3, big}, @@ -114,7 +116,7 @@ func testPlurals(t *testing.T, p *Rules, testCases []pluralTest) { for i := range digits { digits[i] -= '0' } - if f := p.MatchDigits(tag, digits, 0, 0); f != Form(tc.form) { + if f := p.MatchDigits(tag, digits, len(digits), 0); f != Form(tc.form) { t.Errorf("MatchDigits: got %v; want %v", f, Form(tc.form)) } }) @@ -139,14 +141,25 @@ func testPlurals(t *testing.T, p *Rules, testCases []pluralTest) { num := fmt.Sprintf("%[1]d.%0[3]*[2]d", n/m, n%m, scale) name := fmt.Sprintf("%s:dec(%s)", loc, num) t.Run(name, func(t *testing.T) { + ff := n % m + tt := ff + w := scale + for tt > 0 && tt%10 == 0 { + w-- + tt /= 10 + } + if f := p.MatchPlural(tag, n/m, scale, w, ff, tt); f != Form(tc.form) { + t.Errorf("MatchPlural: got %v; want %v", f, Form(tc.form)) + } if f := p.matchComponents(tag, n/m, n%m, scale); f != Form(tc.form) { t.Errorf("matchComponents: got %v; want %v", f, Form(tc.form)) } + exp := strings.IndexByte(num, '.') digits := []byte(strings.Replace(num, ".", "", 1)) for i := range digits { digits[i] -= '0' } - if f := p.MatchDigits(tag, digits, -scale, scale); f != Form(tc.form) { + if f := p.MatchDigits(tag, digits, exp, scale); f != Form(tc.form) { t.Errorf("MatchDigits: got %v; want %v", f, Form(tc.form)) } }) @@ -176,8 +189,8 @@ func parseFixedPoint(t *testing.T, s string) (val, scale int) { func BenchmarkPluralSimpleCases(b *testing.B) { p := Cardinal - en, _ := language.CompactIndex(language.English) - zh, _ := language.CompactIndex(language.Chinese) + en := tagToID(language.English) + zh := tagToID(language.Chinese) for i := 0; i < b.N; i++ { matchPlural(p, en, 0, 0, 0) // 0 matchPlural(p, en, 1, 0, 0) // 1 @@ -190,8 +203,8 @@ func BenchmarkPluralSimpleCases(b *testing.B) { func BenchmarkPluralComplexCases(b *testing.B) { p := Cardinal - ar, _ := language.CompactIndex(language.Arabic) - lv, _ := language.CompactIndex(language.Latvian) + ar := tagToID(language.Arabic) + lv := tagToID(language.Latvian) for i := 0; i < b.N; i++ { matchPlural(p, lv, 0, 19, 2) // 0.19 matchPlural(p, lv, 11, 0, 3) // 11.000 diff --git a/vendor/golang.org/x/text/feature/plural/tables.go b/vendor/golang.org/x/text/feature/plural/tables.go index c5f4913..59ae9f2 100644 --- a/vendor/golang.org/x/text/feature/plural/tables.go +++ b/vendor/golang.org/x/text/feature/plural/tables.go @@ -3,9 +3,9 @@ package plural // CLDRVersion is the CLDR version from which the tables in this package are derived. -const CLDRVersion = "30" +const CLDRVersion = "32" -var ordinalRules = []pluralCheck{ // 58 elements +var ordinalRules = []pluralCheck{ // 64 elements 0: {cat: 0x2f, setID: 0x4}, 1: {cat: 0x3a, setID: 0x5}, 2: {cat: 0x22, setID: 0x1}, @@ -15,527 +15,538 @@ var ordinalRules = []pluralCheck{ // 58 elements 6: {cat: 0x3c, setID: 0x9}, 7: {cat: 0x2f, setID: 0xa}, 8: {cat: 0x3c, setID: 0xb}, - 9: {cat: 0x2d, setID: 0xc}, - 10: {cat: 0x2d, setID: 0xd}, - 11: {cat: 0x2f, setID: 0xe}, - 12: {cat: 0x35, setID: 0x3}, - 13: {cat: 0xc5, setID: 0xf}, - 14: {cat: 0x2, setID: 0x1}, - 15: {cat: 0x5, setID: 0x3}, - 16: {cat: 0xd, setID: 0x10}, - 17: {cat: 0x22, setID: 0x1}, - 18: {cat: 0x2f, setID: 0x11}, - 19: {cat: 0x3d, setID: 0x12}, + 9: {cat: 0x2c, setID: 0xc}, + 10: {cat: 0x24, setID: 0xd}, + 11: {cat: 0x2d, setID: 0xe}, + 12: {cat: 0x2d, setID: 0xf}, + 13: {cat: 0x2f, setID: 0x10}, + 14: {cat: 0x35, setID: 0x3}, + 15: {cat: 0xc5, setID: 0x11}, + 16: {cat: 0x2, setID: 0x1}, + 17: {cat: 0x5, setID: 0x3}, + 18: {cat: 0xd, setID: 0x12}, + 19: {cat: 0x22, setID: 0x1}, 20: {cat: 0x2f, setID: 0x13}, - 21: {cat: 0x3a, setID: 0x14}, + 21: {cat: 0x3d, setID: 0x14}, 22: {cat: 0x2f, setID: 0x15}, - 23: {cat: 0x3b, setID: 0x16}, - 24: {cat: 0x2f, setID: 0xa}, - 25: {cat: 0x3c, setID: 0xb}, - 26: {cat: 0x22, setID: 0x1}, - 27: {cat: 0x23, setID: 0x17}, - 28: {cat: 0x24, setID: 0x18}, - 29: {cat: 0x22, setID: 0x19}, - 30: {cat: 0x23, setID: 0x2}, - 31: {cat: 0x24, setID: 0x18}, - 32: {cat: 0xf, setID: 0x13}, - 33: {cat: 0x1a, setID: 0x14}, + 23: {cat: 0x3a, setID: 0x16}, + 24: {cat: 0x2f, setID: 0x17}, + 25: {cat: 0x3b, setID: 0x18}, + 26: {cat: 0x2f, setID: 0xa}, + 27: {cat: 0x3c, setID: 0xb}, + 28: {cat: 0x22, setID: 0x1}, + 29: {cat: 0x23, setID: 0x19}, + 30: {cat: 0x24, setID: 0x1a}, + 31: {cat: 0x22, setID: 0x1b}, + 32: {cat: 0x23, setID: 0x2}, + 33: {cat: 0x24, setID: 0x1a}, 34: {cat: 0xf, setID: 0x15}, - 35: {cat: 0x1b, setID: 0x16}, - 36: {cat: 0xf, setID: 0x1a}, - 37: {cat: 0x1d, setID: 0x1b}, - 38: {cat: 0xa, setID: 0x1c}, - 39: {cat: 0xa, setID: 0x1d}, - 40: {cat: 0xc, setID: 0x1e}, - 41: {cat: 0xe4, setID: 0x0}, - 42: {cat: 0x5, setID: 0x3}, - 43: {cat: 0xd, setID: 0xc}, - 44: {cat: 0xd, setID: 0x1f}, - 45: {cat: 0x22, setID: 0x1}, - 46: {cat: 0x23, setID: 0x17}, - 47: {cat: 0x24, setID: 0x18}, - 48: {cat: 0x25, setID: 0x20}, - 49: {cat: 0x22, setID: 0x21}, - 50: {cat: 0x23, setID: 0x17}, - 51: {cat: 0x24, setID: 0x18}, - 52: {cat: 0x25, setID: 0x20}, - 53: {cat: 0x21, setID: 0x22}, - 54: {cat: 0x22, setID: 0x1}, - 55: {cat: 0x23, setID: 0x2}, - 56: {cat: 0x24, setID: 0x23}, - 57: {cat: 0x25, setID: 0x24}, -} // Size: 140 bytes + 35: {cat: 0x1a, setID: 0x16}, + 36: {cat: 0xf, setID: 0x17}, + 37: {cat: 0x1b, setID: 0x18}, + 38: {cat: 0xf, setID: 0x1c}, + 39: {cat: 0x1d, setID: 0x1d}, + 40: {cat: 0xa, setID: 0x1e}, + 41: {cat: 0xa, setID: 0x1f}, + 42: {cat: 0xc, setID: 0x20}, + 43: {cat: 0xe4, setID: 0x0}, + 44: {cat: 0x5, setID: 0x3}, + 45: {cat: 0xd, setID: 0xe}, + 46: {cat: 0xd, setID: 0x21}, + 47: {cat: 0x22, setID: 0x1}, + 48: {cat: 0x23, setID: 0x19}, + 49: {cat: 0x24, setID: 0x1a}, + 50: {cat: 0x25, setID: 0x22}, + 51: {cat: 0x22, setID: 0x23}, + 52: {cat: 0x23, setID: 0x19}, + 53: {cat: 0x24, setID: 0x1a}, + 54: {cat: 0x25, setID: 0x22}, + 55: {cat: 0x22, setID: 0x24}, + 56: {cat: 0x23, setID: 0x19}, + 57: {cat: 0x24, setID: 0x1a}, + 58: {cat: 0x25, setID: 0x22}, + 59: {cat: 0x21, setID: 0x25}, + 60: {cat: 0x22, setID: 0x1}, + 61: {cat: 0x23, setID: 0x2}, + 62: {cat: 0x24, setID: 0x26}, + 63: {cat: 0x25, setID: 0x27}, +} // Size: 152 bytes -var ordinalIndex = []uint8{ // 20 elements +var ordinalIndex = []uint8{ // 22 elements 0x00, 0x00, 0x02, 0x03, 0x04, 0x05, 0x07, 0x09, - 0x0d, 0x0e, 0x11, 0x14, 0x1a, 0x1d, 0x20, 0x26, - 0x2d, 0x31, 0x35, 0x3a, -} // Size: 44 bytes + 0x0b, 0x0f, 0x10, 0x13, 0x16, 0x1c, 0x1f, 0x22, + 0x28, 0x2f, 0x33, 0x37, 0x3b, 0x40, +} // Size: 46 bytes -var ordinalLangToIndex = []uint8{ // 752 elements +var ordinalLangToIndex = []uint8{ // 775 elements // Entry 0 - 3F - 0x00, 0x0d, 0x0b, 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, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x05, - 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - // Entry 40 - 7F - 0x00, 0x00, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x00, 0x00, + 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x00, 0x00, 0x05, 0x05, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // Entry 40 - 7F + 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, + 0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x12, 0x12, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x14, 0x14, 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 80 - BF - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, // Entry C0 - FF - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x00, 0x00, + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Entry 100 - 13F 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, 0x02, 0x02, 0x00, 0x00, - 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, + 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, // Entry 140 - 17F 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x02, + 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, + 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, + 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Entry 180 - 1BF - 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x09, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 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 1C0 - 1FF 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x02, 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, 0x0e, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x0c, 0x0c, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 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, 0x0f, 0x0f, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x0d, 0x0d, 0x02, 0x02, 0x02, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Entry 200 - 23F - 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 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, 0x13, 0x13, 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, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x02, 0x02, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, // Entry 280 - 2BF - 0x0a, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x0b, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, + 0x01, 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, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, // Entry 2C0 - 2FF 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 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, -} // Size: 776 bytes + // Entry 300 - 33F + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x0c, +} // Size: 799 bytes var ordinalInclusionMasks = []uint64{ // 100 elements // Entry 0 - 1F - 0x0000000400004009, 0x00000002120800d3, 0x0000000010a10195, 0x0000000842810581, - 0x0000000841030081, 0x0000001210010041, 0x0000001100011001, 0x0000000614010001, - 0x0000000614018001, 0x0000000600012001, 0x0000000200014001, 0x0000000010198031, - 0x0000000010610331, 0x0000000040010f01, 0x0000000040070001, 0x0000000010010001, - 0x0000000000011001, 0x000000001c010001, 0x000000001c010001, 0x0000000000012001, - 0x0000000020014001, 0x0000000010080011, 0x0000000010200111, 0x0000000040000501, - 0x0000000040020001, 0x0000000010000001, 0x0000000000001001, 0x0000000014000001, - 0x0000000014000001, 0x0000000000002001, 0x0000000000004001, 0x0000000010080011, + 0x0000002000010009, 0x00000018482000d3, 0x0000000042840195, 0x000000410a040581, + 0x00000041040c0081, 0x0000009840040041, 0x0000008400045001, 0x0000003850040001, + 0x0000003850060001, 0x0000003800049001, 0x0000000800052001, 0x0000000040660031, + 0x0000000041840331, 0x0000000100040f01, 0x00000001001c0001, 0x0000000040040001, + 0x0000000000045001, 0x0000000070040001, 0x0000000070040001, 0x0000000000049001, + 0x0000000080050001, 0x0000000040200011, 0x0000000040800111, 0x0000000100000501, + 0x0000000100080001, 0x0000000040000001, 0x0000000000005001, 0x0000000050000001, + 0x0000000050000001, 0x0000000000009001, 0x0000000000010001, 0x0000000040200011, // Entry 20 - 3F - 0x0000000010200111, 0x0000000040000501, 0x0000000040020001, 0x0000000010000001, - 0x0000000000001001, 0x0000000014000001, 0x0000000014000001, 0x0000000000002001, - 0x0000000080014001, 0x0000000010080011, 0x0000000010200111, 0x0000000040000501, - 0x0000000040020001, 0x0000000010000001, 0x0000000000001001, 0x0000000014000001, - 0x0000000014000001, 0x0000000000002001, 0x0000000020004001, 0x0000000010080011, - 0x0000000010200111, 0x0000000040000501, 0x0000000040020001, 0x0000000010000001, - 0x0000000000001001, 0x0000000014000001, 0x0000000014000001, 0x0000000000002001, - 0x0000000080014001, 0x0000000010080011, 0x0000000010200111, 0x0000000040000501, + 0x0000000040800111, 0x0000000100000501, 0x0000000100080001, 0x0000000040000001, + 0x0000000000005001, 0x0000000050000001, 0x0000000050000001, 0x0000000000009001, + 0x0000000200050001, 0x0000000040200011, 0x0000000040800111, 0x0000000100000501, + 0x0000000100080001, 0x0000000040000001, 0x0000000000005001, 0x0000000050000001, + 0x0000000050000001, 0x0000000000009001, 0x0000000080010001, 0x0000000040200011, + 0x0000000040800111, 0x0000000100000501, 0x0000000100080001, 0x0000000040000001, + 0x0000000000005001, 0x0000000050000001, 0x0000000050000001, 0x0000000000009001, + 0x0000000200050001, 0x0000000040200011, 0x0000000040800111, 0x0000000100000501, // Entry 40 - 5F - 0x0000000040020001, 0x0000000010000001, 0x0000000000001001, 0x0000000014000001, - 0x0000000014000001, 0x0000000000002001, 0x0000000020004001, 0x0000000010080011, - 0x0000000010200111, 0x0000000040000501, 0x0000000040020001, 0x0000000010000001, - 0x0000000000001001, 0x0000000014000001, 0x0000000014000001, 0x0000000000002001, - 0x000000002001c001, 0x0000000010080011, 0x0000000010200111, 0x0000000040000501, - 0x0000000040020001, 0x0000000010000001, 0x0000000000001001, 0x0000000014000001, - 0x0000000014000001, 0x0000000000002001, 0x0000000080004001, 0x0000000010080011, - 0x0000000010200111, 0x0000000040000501, 0x0000000040020001, 0x0000000010000001, + 0x0000000100080001, 0x0000000040000001, 0x0000000000005001, 0x0000000050000001, + 0x0000000050000001, 0x0000000000009001, 0x0000000080010001, 0x0000000040200011, + 0x0000000040800111, 0x0000000100000501, 0x0000000100080001, 0x0000000040000001, + 0x0000000000005001, 0x0000000050000001, 0x0000000050000001, 0x0000000000009001, + 0x0000000080070001, 0x0000000040200011, 0x0000000040800111, 0x0000000100000501, + 0x0000000100080001, 0x0000000040000001, 0x0000000000005001, 0x0000000050000001, + 0x0000000050000001, 0x0000000000009001, 0x0000000200010001, 0x0000000040200011, + 0x0000000040800111, 0x0000000100000501, 0x0000000100080001, 0x0000000040000001, // Entry 60 - 7F - 0x0000000000001001, 0x0000000014000001, 0x0000000014000001, 0x0000000000002001, + 0x0000000000005001, 0x0000000050000001, 0x0000000050000001, 0x0000000000009001, } // Size: 824 bytes -// Slots used for ordinal: 3A of 0xFF rules; 14 of 0xFF indexes; 37 of 64 sets +// Slots used for ordinal: 40 of 0xFF rules; 16 of 0xFF indexes; 40 of 64 sets -var cardinalRules = []pluralCheck{ // 169 elements +var cardinalRules = []pluralCheck{ // 166 elements 0: {cat: 0x2, setID: 0x3}, 1: {cat: 0x22, setID: 0x1}, 2: {cat: 0x2, setID: 0x4}, - 3: {cat: 0x7, setID: 0x1}, - 4: {cat: 0x62, setID: 0x3}, - 5: {cat: 0x22, setID: 0x4}, - 6: {cat: 0x7, setID: 0x3}, - 7: {cat: 0x42, setID: 0x1}, - 8: {cat: 0x22, setID: 0x4}, + 3: {cat: 0x2, setID: 0x4}, + 4: {cat: 0x7, setID: 0x1}, + 5: {cat: 0x62, setID: 0x3}, + 6: {cat: 0x22, setID: 0x4}, + 7: {cat: 0x7, setID: 0x3}, + 8: {cat: 0x42, setID: 0x1}, 9: {cat: 0x22, setID: 0x4}, - 10: {cat: 0x22, setID: 0x5}, - 11: {cat: 0x27, setID: 0x6}, - 12: {cat: 0x32, setID: 0x2}, + 10: {cat: 0x22, setID: 0x4}, + 11: {cat: 0x22, setID: 0x5}, + 12: {cat: 0x22, setID: 0x1}, 13: {cat: 0x22, setID: 0x1}, - 14: {cat: 0x27, setID: 0x1}, - 15: {cat: 0x62, setID: 0x3}, - 16: {cat: 0x22, setID: 0x1}, - 17: {cat: 0x7, setID: 0x4}, - 18: {cat: 0x92, setID: 0x3}, - 19: {cat: 0xf, setID: 0x7}, - 20: {cat: 0x1f, setID: 0x8}, - 21: {cat: 0x82, setID: 0x3}, - 22: {cat: 0x92, setID: 0x3}, - 23: {cat: 0xf, setID: 0x7}, + 14: {cat: 0x7, setID: 0x4}, + 15: {cat: 0x92, setID: 0x3}, + 16: {cat: 0xf, setID: 0x6}, + 17: {cat: 0x1f, setID: 0x7}, + 18: {cat: 0x82, setID: 0x3}, + 19: {cat: 0x92, setID: 0x3}, + 20: {cat: 0xf, setID: 0x6}, + 21: {cat: 0x62, setID: 0x3}, + 22: {cat: 0x4a, setID: 0x6}, + 23: {cat: 0x7, setID: 0x8}, 24: {cat: 0x62, setID: 0x3}, - 25: {cat: 0x4a, setID: 0x7}, - 26: {cat: 0x7, setID: 0x9}, - 27: {cat: 0x62, setID: 0x3}, - 28: {cat: 0x1f, setID: 0xa}, - 29: {cat: 0x62, setID: 0x3}, - 30: {cat: 0x5f, setID: 0xa}, - 31: {cat: 0x72, setID: 0x3}, - 32: {cat: 0x29, setID: 0xb}, - 33: {cat: 0x29, setID: 0xc}, - 34: {cat: 0x4f, setID: 0xc}, - 35: {cat: 0x61, setID: 0x2}, - 36: {cat: 0x2f, setID: 0x7}, - 37: {cat: 0x3a, setID: 0x8}, - 38: {cat: 0x4f, setID: 0x7}, - 39: {cat: 0x5f, setID: 0x8}, - 40: {cat: 0x62, setID: 0x2}, - 41: {cat: 0x4f, setID: 0x7}, - 42: {cat: 0x72, setID: 0x2}, + 25: {cat: 0x1f, setID: 0x9}, + 26: {cat: 0x62, setID: 0x3}, + 27: {cat: 0x5f, setID: 0x9}, + 28: {cat: 0x72, setID: 0x3}, + 29: {cat: 0x29, setID: 0xa}, + 30: {cat: 0x29, setID: 0xb}, + 31: {cat: 0x4f, setID: 0xb}, + 32: {cat: 0x61, setID: 0x2}, + 33: {cat: 0x2f, setID: 0x6}, + 34: {cat: 0x3a, setID: 0x7}, + 35: {cat: 0x4f, setID: 0x6}, + 36: {cat: 0x5f, setID: 0x7}, + 37: {cat: 0x62, setID: 0x2}, + 38: {cat: 0x4f, setID: 0x6}, + 39: {cat: 0x72, setID: 0x2}, + 40: {cat: 0x21, setID: 0x3}, + 41: {cat: 0x7, setID: 0x4}, + 42: {cat: 0x32, setID: 0x3}, 43: {cat: 0x21, setID: 0x3}, - 44: {cat: 0x7, setID: 0x4}, - 45: {cat: 0x32, setID: 0x3}, - 46: {cat: 0x21, setID: 0x3}, - 47: {cat: 0x22, setID: 0x1}, + 44: {cat: 0x22, setID: 0x1}, + 45: {cat: 0x22, setID: 0x1}, + 46: {cat: 0x23, setID: 0x2}, + 47: {cat: 0x2, setID: 0x3}, 48: {cat: 0x22, setID: 0x1}, - 49: {cat: 0x23, setID: 0x2}, - 50: {cat: 0x2, setID: 0x3}, - 51: {cat: 0x22, setID: 0x1}, - 52: {cat: 0x24, setID: 0xd}, - 53: {cat: 0x7, setID: 0x1}, - 54: {cat: 0x62, setID: 0x3}, - 55: {cat: 0x74, setID: 0x3}, - 56: {cat: 0x24, setID: 0x3}, - 57: {cat: 0x2f, setID: 0xe}, - 58: {cat: 0x34, setID: 0x1}, - 59: {cat: 0xf, setID: 0x7}, - 60: {cat: 0x1f, setID: 0x8}, - 61: {cat: 0x62, setID: 0x3}, - 62: {cat: 0x4f, setID: 0x7}, - 63: {cat: 0x5a, setID: 0x8}, - 64: {cat: 0xf, setID: 0xf}, - 65: {cat: 0x1f, setID: 0x10}, - 66: {cat: 0x64, setID: 0x3}, - 67: {cat: 0x4f, setID: 0xf}, - 68: {cat: 0x5c, setID: 0x10}, - 69: {cat: 0x22, setID: 0x11}, - 70: {cat: 0x23, setID: 0x12}, - 71: {cat: 0x24, setID: 0x13}, - 72: {cat: 0xf, setID: 0x1}, - 73: {cat: 0x62, setID: 0x3}, - 74: {cat: 0xf, setID: 0x2}, - 75: {cat: 0x63, setID: 0x3}, - 76: {cat: 0xf, setID: 0x14}, - 77: {cat: 0x64, setID: 0x3}, - 78: {cat: 0x74, setID: 0x3}, - 79: {cat: 0xf, setID: 0x1}, - 80: {cat: 0x62, setID: 0x3}, - 81: {cat: 0x4a, setID: 0x1}, - 82: {cat: 0xf, setID: 0x2}, - 83: {cat: 0x63, setID: 0x3}, - 84: {cat: 0x4b, setID: 0x2}, - 85: {cat: 0xf, setID: 0x14}, - 86: {cat: 0x64, setID: 0x3}, - 87: {cat: 0x4c, setID: 0x14}, - 88: {cat: 0x7, setID: 0x1}, - 89: {cat: 0x62, setID: 0x3}, - 90: {cat: 0x7, setID: 0x2}, - 91: {cat: 0x63, setID: 0x3}, - 92: {cat: 0x2f, setID: 0xb}, - 93: {cat: 0x37, setID: 0x15}, - 94: {cat: 0x65, setID: 0x3}, - 95: {cat: 0x7, setID: 0x1}, - 96: {cat: 0x62, setID: 0x3}, - 97: {cat: 0x7, setID: 0x16}, - 98: {cat: 0x64, setID: 0x3}, - 99: {cat: 0x75, setID: 0x3}, - 100: {cat: 0x7, setID: 0x1}, - 101: {cat: 0x62, setID: 0x3}, - 102: {cat: 0xf, setID: 0xf}, - 103: {cat: 0x1f, setID: 0x10}, - 104: {cat: 0x64, setID: 0x3}, + 49: {cat: 0x24, setID: 0xc}, + 50: {cat: 0x7, setID: 0x1}, + 51: {cat: 0x62, setID: 0x3}, + 52: {cat: 0x74, setID: 0x3}, + 53: {cat: 0x24, setID: 0x3}, + 54: {cat: 0x2f, setID: 0xd}, + 55: {cat: 0x34, setID: 0x1}, + 56: {cat: 0xf, setID: 0x6}, + 57: {cat: 0x1f, setID: 0x7}, + 58: {cat: 0x62, setID: 0x3}, + 59: {cat: 0x4f, setID: 0x6}, + 60: {cat: 0x5a, setID: 0x7}, + 61: {cat: 0xf, setID: 0xe}, + 62: {cat: 0x1f, setID: 0xf}, + 63: {cat: 0x64, setID: 0x3}, + 64: {cat: 0x4f, setID: 0xe}, + 65: {cat: 0x5c, setID: 0xf}, + 66: {cat: 0x22, setID: 0x10}, + 67: {cat: 0x23, setID: 0x11}, + 68: {cat: 0x24, setID: 0x12}, + 69: {cat: 0xf, setID: 0x1}, + 70: {cat: 0x62, setID: 0x3}, + 71: {cat: 0xf, setID: 0x2}, + 72: {cat: 0x63, setID: 0x3}, + 73: {cat: 0xf, setID: 0x13}, + 74: {cat: 0x64, setID: 0x3}, + 75: {cat: 0x74, setID: 0x3}, + 76: {cat: 0xf, setID: 0x1}, + 77: {cat: 0x62, setID: 0x3}, + 78: {cat: 0x4a, setID: 0x1}, + 79: {cat: 0xf, setID: 0x2}, + 80: {cat: 0x63, setID: 0x3}, + 81: {cat: 0x4b, setID: 0x2}, + 82: {cat: 0xf, setID: 0x13}, + 83: {cat: 0x64, setID: 0x3}, + 84: {cat: 0x4c, setID: 0x13}, + 85: {cat: 0x7, setID: 0x1}, + 86: {cat: 0x62, setID: 0x3}, + 87: {cat: 0x7, setID: 0x2}, + 88: {cat: 0x63, setID: 0x3}, + 89: {cat: 0x2f, setID: 0xa}, + 90: {cat: 0x37, setID: 0x14}, + 91: {cat: 0x65, setID: 0x3}, + 92: {cat: 0x7, setID: 0x1}, + 93: {cat: 0x62, setID: 0x3}, + 94: {cat: 0x7, setID: 0x15}, + 95: {cat: 0x64, setID: 0x3}, + 96: {cat: 0x75, setID: 0x3}, + 97: {cat: 0x7, setID: 0x1}, + 98: {cat: 0x62, setID: 0x3}, + 99: {cat: 0xf, setID: 0xe}, + 100: {cat: 0x1f, setID: 0xf}, + 101: {cat: 0x64, setID: 0x3}, + 102: {cat: 0xf, setID: 0x16}, + 103: {cat: 0x17, setID: 0x1}, + 104: {cat: 0x65, setID: 0x3}, 105: {cat: 0xf, setID: 0x17}, - 106: {cat: 0x17, setID: 0x1}, - 107: {cat: 0x65, setID: 0x3}, - 108: {cat: 0xf, setID: 0x18}, - 109: {cat: 0x65, setID: 0x3}, - 110: {cat: 0xf, setID: 0x10}, - 111: {cat: 0x65, setID: 0x3}, - 112: {cat: 0x2f, setID: 0x7}, - 113: {cat: 0x3a, setID: 0x8}, - 114: {cat: 0x2f, setID: 0xf}, - 115: {cat: 0x3c, setID: 0x10}, - 116: {cat: 0x2d, setID: 0xb}, - 117: {cat: 0x2d, setID: 0x18}, - 118: {cat: 0x2d, setID: 0x19}, - 119: {cat: 0x2f, setID: 0x7}, - 120: {cat: 0x3a, setID: 0xc}, - 121: {cat: 0x2f, setID: 0x1a}, - 122: {cat: 0x3c, setID: 0xc}, - 123: {cat: 0x55, setID: 0x3}, - 124: {cat: 0x22, setID: 0x1}, - 125: {cat: 0x24, setID: 0x3}, - 126: {cat: 0x2c, setID: 0xd}, - 127: {cat: 0x2d, setID: 0xc}, - 128: {cat: 0xf, setID: 0x7}, - 129: {cat: 0x1f, setID: 0x8}, - 130: {cat: 0x62, setID: 0x3}, - 131: {cat: 0xf, setID: 0xf}, - 132: {cat: 0x1f, setID: 0x10}, - 133: {cat: 0x64, setID: 0x3}, - 134: {cat: 0xf, setID: 0xb}, - 135: {cat: 0x65, setID: 0x3}, - 136: {cat: 0xf, setID: 0x18}, - 137: {cat: 0x65, setID: 0x3}, - 138: {cat: 0xf, setID: 0x19}, - 139: {cat: 0x65, setID: 0x3}, - 140: {cat: 0x2f, setID: 0x7}, - 141: {cat: 0x3a, setID: 0x1b}, - 142: {cat: 0x2f, setID: 0x1c}, - 143: {cat: 0x3b, setID: 0x1d}, - 144: {cat: 0x2f, setID: 0x1e}, - 145: {cat: 0x3c, setID: 0x1f}, - 146: {cat: 0x37, setID: 0x3}, - 147: {cat: 0xa5, setID: 0x0}, - 148: {cat: 0x22, setID: 0x1}, - 149: {cat: 0x23, setID: 0x2}, - 150: {cat: 0x24, setID: 0x20}, - 151: {cat: 0x25, setID: 0x21}, - 152: {cat: 0xf, setID: 0x7}, - 153: {cat: 0x62, setID: 0x3}, - 154: {cat: 0xf, setID: 0x1c}, - 155: {cat: 0x63, setID: 0x3}, - 156: {cat: 0xf, setID: 0x22}, - 157: {cat: 0x64, setID: 0x3}, - 158: {cat: 0x75, setID: 0x3}, - 159: {cat: 0x21, setID: 0x3}, - 160: {cat: 0x22, setID: 0x1}, - 161: {cat: 0x23, setID: 0x2}, - 162: {cat: 0x2c, setID: 0x23}, - 163: {cat: 0x2d, setID: 0x5}, - 164: {cat: 0x21, setID: 0x3}, - 165: {cat: 0x22, setID: 0x1}, - 166: {cat: 0x23, setID: 0x2}, - 167: {cat: 0x24, setID: 0x24}, - 168: {cat: 0x25, setID: 0x25}, -} // Size: 362 bytes + 106: {cat: 0x65, setID: 0x3}, + 107: {cat: 0xf, setID: 0xf}, + 108: {cat: 0x65, setID: 0x3}, + 109: {cat: 0x2f, setID: 0x6}, + 110: {cat: 0x3a, setID: 0x7}, + 111: {cat: 0x2f, setID: 0xe}, + 112: {cat: 0x3c, setID: 0xf}, + 113: {cat: 0x2d, setID: 0xa}, + 114: {cat: 0x2d, setID: 0x17}, + 115: {cat: 0x2d, setID: 0x18}, + 116: {cat: 0x2f, setID: 0x6}, + 117: {cat: 0x3a, setID: 0xb}, + 118: {cat: 0x2f, setID: 0x19}, + 119: {cat: 0x3c, setID: 0xb}, + 120: {cat: 0x55, setID: 0x3}, + 121: {cat: 0x22, setID: 0x1}, + 122: {cat: 0x24, setID: 0x3}, + 123: {cat: 0x2c, setID: 0xc}, + 124: {cat: 0x2d, setID: 0xb}, + 125: {cat: 0xf, setID: 0x6}, + 126: {cat: 0x1f, setID: 0x7}, + 127: {cat: 0x62, setID: 0x3}, + 128: {cat: 0xf, setID: 0xe}, + 129: {cat: 0x1f, setID: 0xf}, + 130: {cat: 0x64, setID: 0x3}, + 131: {cat: 0xf, setID: 0xa}, + 132: {cat: 0x65, setID: 0x3}, + 133: {cat: 0xf, setID: 0x17}, + 134: {cat: 0x65, setID: 0x3}, + 135: {cat: 0xf, setID: 0x18}, + 136: {cat: 0x65, setID: 0x3}, + 137: {cat: 0x2f, setID: 0x6}, + 138: {cat: 0x3a, setID: 0x1a}, + 139: {cat: 0x2f, setID: 0x1b}, + 140: {cat: 0x3b, setID: 0x1c}, + 141: {cat: 0x2f, setID: 0x1d}, + 142: {cat: 0x3c, setID: 0x1e}, + 143: {cat: 0x37, setID: 0x3}, + 144: {cat: 0xa5, setID: 0x0}, + 145: {cat: 0x22, setID: 0x1}, + 146: {cat: 0x23, setID: 0x2}, + 147: {cat: 0x24, setID: 0x1f}, + 148: {cat: 0x25, setID: 0x20}, + 149: {cat: 0xf, setID: 0x6}, + 150: {cat: 0x62, setID: 0x3}, + 151: {cat: 0xf, setID: 0x1b}, + 152: {cat: 0x63, setID: 0x3}, + 153: {cat: 0xf, setID: 0x21}, + 154: {cat: 0x64, setID: 0x3}, + 155: {cat: 0x75, setID: 0x3}, + 156: {cat: 0x21, setID: 0x3}, + 157: {cat: 0x22, setID: 0x1}, + 158: {cat: 0x23, setID: 0x2}, + 159: {cat: 0x2c, setID: 0x22}, + 160: {cat: 0x2d, setID: 0x5}, + 161: {cat: 0x21, setID: 0x3}, + 162: {cat: 0x22, setID: 0x1}, + 163: {cat: 0x23, setID: 0x2}, + 164: {cat: 0x24, setID: 0x23}, + 165: {cat: 0x25, setID: 0x24}, +} // Size: 356 bytes -var cardinalIndex = []uint8{ // 37 elements - 0x00, 0x00, 0x02, 0x03, 0x05, 0x08, 0x09, 0x0b, - 0x0d, 0x0e, 0x10, 0x13, 0x17, 0x1a, 0x20, 0x2b, - 0x2e, 0x30, 0x32, 0x35, 0x3b, 0x45, 0x48, 0x4f, - 0x58, 0x5f, 0x64, 0x70, 0x77, 0x7c, 0x80, 0x8c, - 0x94, 0x98, 0x9f, 0xa4, 0xa9, -} // Size: 61 bytes +var cardinalIndex = []uint8{ // 36 elements + 0x00, 0x00, 0x02, 0x03, 0x04, 0x06, 0x09, 0x0a, + 0x0c, 0x0d, 0x10, 0x14, 0x17, 0x1d, 0x28, 0x2b, + 0x2d, 0x2f, 0x32, 0x38, 0x42, 0x45, 0x4c, 0x55, + 0x5c, 0x61, 0x6d, 0x74, 0x79, 0x7d, 0x89, 0x91, + 0x95, 0x9c, 0xa1, 0xa6, +} // Size: 60 bytes -var cardinalLangToIndex = []uint8{ // 752 elements +var cardinalLangToIndex = []uint8{ // 775 elements // Entry 0 - 3F - 0x00, 0x03, 0x03, 0x08, 0x08, 0x08, 0x00, 0x00, - 0x05, 0x05, 0x01, 0x01, 0x22, 0x22, 0x22, 0x22, - 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, - 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, - 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, - 0x22, 0x22, 0x01, 0x01, 0x08, 0x08, 0x03, 0x03, - 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x1b, - 0x1b, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x05, + 0x00, 0x08, 0x08, 0x08, 0x00, 0x00, 0x06, 0x06, + 0x01, 0x01, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, + 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, + 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, + 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, + 0x01, 0x01, 0x08, 0x08, 0x04, 0x04, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x00, 0x00, 0x1a, 0x1a, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x06, 0x00, 0x00, // Entry 40 - 7F - 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, - 0x1f, 0x1f, 0x08, 0x08, 0x14, 0x00, 0x00, 0x14, - 0x14, 0x03, 0x03, 0x03, 0x03, 0x03, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x19, - 0x19, 0x00, 0x00, 0x23, 0x23, 0x0a, 0x0a, 0x0a, - 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x00, 0x00, 0x17, 0x17, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x1e, 0x1e, + 0x08, 0x08, 0x13, 0x13, 0x13, 0x13, 0x13, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x18, 0x18, 0x00, 0x00, 0x22, 0x22, 0x09, 0x09, + 0x09, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x00, 0x00, 0x16, 0x16, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Entry 80 - BF - 0x08, 0x08, 0x08, 0x08, 0x08, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, // Entry C0 - FF - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x08, 0x08, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, // Entry 100 - 13F 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x03, 0x03, 0x08, 0x08, - 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x03, 0x03, 0x0d, 0x0d, 0x08, 0x08, - 0x08, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, + 0x08, 0x08, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x04, 0x04, 0x0c, 0x0c, + 0x08, 0x08, 0x08, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, // Entry 140 - 17F 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x08, 0x08, 0x03, 0x03, 0x20, 0x20, 0x15, 0x15, - 0x03, 0x03, 0x08, 0x08, 0x08, 0x08, 0x01, 0x01, - 0x05, 0x00, 0x00, 0x21, 0x21, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x18, 0x18, 0x01, 0x01, 0x14, - 0x14, 0x14, 0x17, 0x17, 0x08, 0x08, 0x02, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x02, 0x02, 0x08, 0x08, 0x04, 0x04, 0x1f, 0x1f, + 0x14, 0x14, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, + 0x01, 0x01, 0x06, 0x00, 0x00, 0x20, 0x20, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x17, 0x17, 0x01, + 0x01, 0x13, 0x13, 0x13, 0x16, 0x16, 0x08, 0x08, + 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Entry 180 - 1BF - 0x03, 0x03, 0x03, 0x03, 0x11, 0x00, 0x00, 0x00, - 0x08, 0x08, 0x08, 0x08, 0x00, 0x08, 0x08, 0x02, + 0x00, 0x04, 0x0a, 0x0a, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x10, 0x17, 0x00, 0x00, 0x00, 0x08, 0x08, + 0x04, 0x08, 0x08, 0x00, 0x00, 0x08, 0x08, 0x02, 0x02, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, - 0x08, 0x08, 0x00, 0x00, 0x10, 0x10, 0x08, 0x11, - 0x11, 0x08, 0x08, 0x0f, 0x0f, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x00, 0x00, 0x0f, 0x0f, 0x08, 0x10, // Entry 1C0 - 1FF - 0x08, 0x00, 0x00, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x1c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x0e, 0x08, - 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, - 0x00, 0x00, 0x08, 0x08, 0x0c, 0x0c, 0x08, 0x08, - 0x08, 0x08, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x1d, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x11, 0x11, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x10, 0x08, 0x08, 0x0e, 0x0e, 0x08, 0x08, 0x08, + 0x08, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x1b, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x0d, 0x08, + 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, + 0x00, 0x00, 0x08, 0x08, 0x0b, 0x0b, 0x08, 0x08, + 0x08, 0x08, 0x12, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, // Entry 200 - 23F - 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x08, 0x05, - 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x05, 0x00, 0x00, - 0x05, 0x05, 0x08, 0x1a, 0x1a, 0x0e, 0x0e, 0x08, - 0x08, 0x07, 0x09, 0x07, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x00, 0x00, + 0x00, 0x08, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, + 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x08, + 0x06, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x08, 0x19, 0x19, 0x0d, 0x0d, + 0x08, 0x08, 0x03, 0x04, 0x03, 0x04, 0x04, 0x04, // Entry 240 - 27F - 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x13, 0x13, - 0x13, 0x08, 0x08, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, - 0x1e, 0x1e, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x00, 0x08, 0x11, 0x11, 0x11, - 0x11, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x12, - 0x00, 0x00, 0x12, 0x12, 0x04, 0x04, 0x19, 0x19, - 0x16, 0x16, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x12, + 0x12, 0x12, 0x08, 0x08, 0x1d, 0x1d, 0x1d, 0x1d, + 0x1d, 0x1d, 0x1d, 0x00, 0x00, 0x08, 0x08, 0x00, + 0x00, 0x08, 0x08, 0x00, 0x00, 0x08, 0x08, 0x08, + 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x13, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x05, 0x05, 0x18, 0x18, 0x15, 0x15, 0x10, 0x10, // Entry 280 - 2BF - 0x08, 0x08, 0x08, 0x14, 0x14, 0x14, 0x14, 0x14, - 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x08, 0x08, - 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x05, - 0x05, 0x05, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, - 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x06, 0x06, - 0x08, 0x08, 0x1e, 0x1e, 0x03, 0x03, 0x03, 0x08, + 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x13, + 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, + 0x13, 0x13, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, + 0x08, 0x08, 0x08, 0x0c, 0x08, 0x00, 0x00, 0x08, // Entry 2C0 - 2FF - 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x08, - 0x08, 0x08, 0x05, 0x08, 0x08, 0x00, 0x08, 0x08, - 0x08, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, + 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x07, + 0x07, 0x08, 0x08, 0x1d, 0x1d, 0x04, 0x04, 0x04, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, + 0x08, 0x08, 0x08, 0x06, 0x08, 0x08, 0x00, 0x00, + 0x08, 0x08, 0x08, 0x00, 0x00, 0x04, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, -} // Size: 776 bytes + // Entry 300 - 33F + 0x00, 0x00, 0x00, 0x01, 0x01, 0x04, 0x04, +} // Size: 799 bytes var cardinalInclusionMasks = []uint64{ // 100 elements // Entry 0 - 1F - 0x0000000400a00859, 0x0000000000a242d3, 0x000000001464e245, 0x000000194478e201, - 0x000000094478e401, 0x0000000905286001, 0x0000002905286401, 0x0000000a05286001, - 0x0000000a05286001, 0x0000000a45286401, 0x0000000a80a86801, 0x000000008a8251a1, - 0x00000000b605d021, 0x00000000c609d021, 0x00000000c609d421, 0x0000000085085021, - 0x0000000085085421, 0x0000000085085021, 0x0000000085085021, 0x00000000c5085421, - 0x0000000400800821, 0x00000000008000a1, 0x0000000014008021, 0x0000000044008021, - 0x0000000044008421, 0x0000000005000021, 0x0000000005000421, 0x0000000005000021, - 0x0000000005000021, 0x0000000045000421, 0x0000000000800821, 0x00000000008000a1, + 0x0000000200500419, 0x0000000000512153, 0x000000000a327105, 0x0000000ca23c7101, + 0x00000004a23c7201, 0x0000000482943001, 0x0000001482943201, 0x0000000502943001, + 0x0000000502943001, 0x0000000522943201, 0x0000000540543401, 0x00000000454128e1, + 0x000000005b02e821, 0x000000006304e821, 0x000000006304ea21, 0x0000000042842821, + 0x0000000042842a21, 0x0000000042842821, 0x0000000042842821, 0x0000000062842a21, + 0x0000000200400421, 0x0000000000400061, 0x000000000a004021, 0x0000000022004021, + 0x0000000022004221, 0x0000000002800021, 0x0000000002800221, 0x0000000002800021, + 0x0000000002800021, 0x0000000022800221, 0x0000000000400421, 0x0000000000400061, // Entry 20 - 3F - 0x0000000014008021, 0x0000000044008021, 0x0000000044008421, 0x0000000005000021, - 0x0000000005000421, 0x0000000005000021, 0x0000000005000021, 0x0000000045000421, - 0x0000000400800821, 0x00000000008000a1, 0x0000000014008021, 0x0000000044008021, - 0x0000000044008421, 0x0000000005000021, 0x0000000005000421, 0x0000000005000021, - 0x0000000005000021, 0x0000000045000421, 0x0000000000800821, 0x00000000008000a1, - 0x0000000014008021, 0x0000000044008021, 0x0000000044008421, 0x0000000005000021, - 0x0000000005000421, 0x0000000005000021, 0x0000000005000021, 0x0000000045000421, - 0x0000000400800821, 0x00000000008000a1, 0x0000000014008021, 0x0000000044008021, + 0x000000000a004021, 0x0000000022004021, 0x0000000022004221, 0x0000000002800021, + 0x0000000002800221, 0x0000000002800021, 0x0000000002800021, 0x0000000022800221, + 0x0000000200400421, 0x0000000000400061, 0x000000000a004021, 0x0000000022004021, + 0x0000000022004221, 0x0000000002800021, 0x0000000002800221, 0x0000000002800021, + 0x0000000002800021, 0x0000000022800221, 0x0000000000400421, 0x0000000000400061, + 0x000000000a004021, 0x0000000022004021, 0x0000000022004221, 0x0000000002800021, + 0x0000000002800221, 0x0000000002800021, 0x0000000002800021, 0x0000000022800221, + 0x0000000200400421, 0x0000000000400061, 0x000000000a004021, 0x0000000022004021, // Entry 40 - 5F - 0x0000000044008421, 0x0000000005000021, 0x0000000005000421, 0x0000000005000021, - 0x0000000005000021, 0x0000000045000421, 0x0000000080800821, 0x00000000888000a1, - 0x00000000b4008021, 0x00000000c4008021, 0x00000000c4008421, 0x0000000085000021, - 0x0000000085000421, 0x0000000085000021, 0x0000000085000021, 0x00000000c5000421, - 0x0000000400800821, 0x00000000008000a1, 0x0000000014008021, 0x0000000044008021, - 0x0000000044008421, 0x0000000005000021, 0x0000000005000421, 0x0000000005000021, - 0x0000000005000021, 0x0000000045000421, 0x0000000080800821, 0x00000000888000a1, - 0x00000000b4008021, 0x00000000c4008021, 0x00000000c4008421, 0x0000000085000021, + 0x0000000022004221, 0x0000000002800021, 0x0000000002800221, 0x0000000002800021, + 0x0000000002800021, 0x0000000022800221, 0x0000000040400421, 0x0000000044400061, + 0x000000005a004021, 0x0000000062004021, 0x0000000062004221, 0x0000000042800021, + 0x0000000042800221, 0x0000000042800021, 0x0000000042800021, 0x0000000062800221, + 0x0000000200400421, 0x0000000000400061, 0x000000000a004021, 0x0000000022004021, + 0x0000000022004221, 0x0000000002800021, 0x0000000002800221, 0x0000000002800021, + 0x0000000002800021, 0x0000000022800221, 0x0000000040400421, 0x0000000044400061, + 0x000000005a004021, 0x0000000062004021, 0x0000000062004221, 0x0000000042800021, // Entry 60 - 7F - 0x0000000085000421, 0x0000000085000021, 0x0000000085000021, 0x00000000c5000421, + 0x0000000042800221, 0x0000000042800021, 0x0000000042800021, 0x0000000062800221, } // Size: 824 bytes -// Slots used for cardinal: A9 of 0xFF rules; 25 of 0xFF indexes; 38 of 64 sets +// Slots used for cardinal: A6 of 0xFF rules; 24 of 0xFF indexes; 37 of 64 sets -// Total table size 3807 bytes (3KiB); checksum: A9B90899 +// Total table size 3860 bytes (3KiB); checksum: 4E56F7B1 diff --git a/vendor/golang.org/x/text/gen.go b/vendor/golang.org/x/text/gen.go index 79af97e..3131edd 100644 --- a/vendor/golang.org/x/text/gen.go +++ b/vendor/golang.org/x/text/gen.go @@ -25,7 +25,9 @@ import ( "sync" "unicode" + "golang.org/x/text/collate" "golang.org/x/text/internal/gen" + "golang.org/x/text/language" ) var ( @@ -72,14 +74,24 @@ func main() { fmt.Printf("Requested Unicode version %s; core unicode version is %s.\n", gen.UnicodeVersion(), unicode.Version) - // TODO: use collate to compare. Simple comparison will work, though, - // until Unicode reaches version 10. To avoid circular dependencies, we - // could use the NumericWeighter without using package collate using a - // trivial Weighter implementation. - if gen.UnicodeVersion() < unicode.Version && !*force { + c := collate.New(language.Und, collate.Numeric) + if c.CompareString(gen.UnicodeVersion(), unicode.Version) < 0 && !*force { os.Exit(2) } updateCore = true + goroot := os.Getenv("GOROOT") + appendToFile( + filepath.Join(goroot, "api", "except.txt"), + fmt.Sprintf("pkg unicode, const Version = %q\n", unicode.Version), + ) + const lines = `pkg unicode, const Version = %q +// TODO: add a new line of the following form for each new script and property. +pkg unicode, var *RangeTable +` + appendToFile( + filepath.Join(goroot, "api", "next.txt"), + fmt.Sprintf(lines, gen.UnicodeVersion()), + ) } var unicode = &dependency{} @@ -97,7 +109,8 @@ func main() { var ( cldr = generate("./unicode/cldr", unicode) - language = generate("./language", cldr) + compact = generate("./internal/language/compact", cldr) + language = generate("./language", cldr, compact) internal = generate("./internal", unicode, language) norm = generate("./unicode/norm", unicode) rangetable = generate("./unicode/rangetable", unicode) @@ -105,16 +118,19 @@ func main() { width = generate("./width", unicode) bidi = generate("./unicode/bidi", unicode, norm, rangetable) mib = generate("./encoding/internal/identifier", unicode) + number = generate("./internal/number", unicode, cldr, language, internal) + cldrtree = generate("./internal/cldrtree", language, internal) + _ = generate("./unicode/runenames", unicode) _ = generate("./encoding/htmlindex", unicode, language, mib) _ = generate("./encoding/ianaindex", unicode, language, mib) _ = generate("./secure/precis", unicode, norm, rangetable, cases, width, bidi) - _ = generate("./currency", unicode, cldr, language, internal) - _ = generate("./internal/number", unicode, cldr, language, internal) - _ = generate("./feature/plural", unicode, cldr, language, internal) + _ = generate("./currency", unicode, cldr, language, internal, number) + _ = generate("./feature/plural", unicode, cldr, language, internal, number) _ = generate("./internal/export/idna", unicode, bidi, norm) - _ = generate("./language/display", unicode, cldr, language, internal) + _ = generate("./language/display", unicode, cldr, language, internal, number) _ = generate("./collate", unicode, norm, cldr, language, rangetable) _ = generate("./search", unicode, norm, cldr, language, rangetable) + _ = generate("./date", cldr, language, cldrtree) ) all.Wait() @@ -132,6 +148,20 @@ func main() { vprintf("SUCCESS\n") } +func appendToFile(file, text string) { + fmt.Println("Augmenting", file) + w, err := os.OpenFile(file, os.O_APPEND|os.O_WRONLY, 0600) + if err != nil { + fmt.Println("Failed to open file:", err) + os.Exit(1) + } + defer w.Close() + if _, err := w.WriteString(text); err != nil { + fmt.Println("Failed to write to file:", err) + os.Exit(1) + } +} + var ( all sync.WaitGroup hasErrors bool @@ -244,7 +274,7 @@ func copyPackage(dirSrc, dirDst, search, replace string) { base := filepath.Base(file) if err != nil || info.IsDir() || !strings.HasSuffix(base, ".go") || - strings.HasSuffix(base, "_test.go") && !strings.HasPrefix(base, "example") || + strings.HasSuffix(base, "_test.go") || // Don't process subdirectories. filepath.Dir(file) != dirSrc { return nil diff --git a/vendor/golang.org/x/text/internal/catmsg/catmsg.go b/vendor/golang.org/x/text/internal/catmsg/catmsg.go index 1013b43..c0bf86f 100644 --- a/vendor/golang.org/x/text/internal/catmsg/catmsg.go +++ b/vendor/golang.org/x/text/internal/catmsg/catmsg.go @@ -41,9 +41,8 @@ // message.Set(language.English, "You are %d minute(s) late.", // catalog.Var("minutes", plural.Select(1, "one", "minute")), // catalog.String("You are %[1]d ${minutes} late.")) - -// p := message.NewPrinter(language.English) // +// p := message.NewPrinter(language.English) // p.Printf("You are %d minute(s) late.", 5) // always 5 minutes late. // // To evaluate the Printf, package message wraps the arguments in a Renderer @@ -75,13 +74,6 @@ import ( // A Handle refers to a registered message type. type Handle int -// First is used as a Handle to EncodeMessageType, followed by a series of calls -// to EncodeMessage, to implement selecting the first matching Message. -// -// TODO: this can be removed once we either can use type aliases or if the -// internals of this package are merged with the catalog package. -var First Handle = msgFirst - // A Handler decodes and evaluates data compiled by a Message and sends the // result to the Decoder. The output may depend on the value of the substitution // arguments, accessible by the Decoder's Arg method. The Handler returns false @@ -112,20 +104,24 @@ const ( msgFirst msgRaw msgString - numFixed + msgAffix + // Leave some arbitrary room for future expansion: 20 should suffice. + numInternal = 20 ) const prefix = "golang.org/x/text/internal/catmsg." var ( + // TODO: find a more stable way to link handles to message types. mutex sync.Mutex names = map[string]Handle{ prefix + "Vars": msgVars, prefix + "First": msgFirst, prefix + "Raw": msgRaw, prefix + "String": msgString, + prefix + "Affix": msgAffix, } - handlers = make([]Handler, numFixed) + handlers = make([]Handler, numInternal) ) func init() { @@ -169,6 +165,20 @@ func init() { } return true } + + handlers[msgAffix] = func(d *Decoder) bool { + // TODO: use an alternative method for common cases. + prefix := d.DecodeString() + suffix := d.DecodeString() + if prefix != "" { + d.Render(prefix) + } + ret := d.ExecuteMessage() + if suffix != "" { + d.Render(suffix) + } + return ret + } } var ( @@ -237,6 +247,23 @@ func Compile(tag language.Tag, macros Dictionary, m Message) (data string, err e return string(buf), err } +// FirstOf is a message type that prints the first message in the sequence that +// resolves to a match for the given substitution arguments. +type FirstOf []Message + +// Compile implements Message. +func (s FirstOf) Compile(e *Encoder) error { + e.EncodeMessageType(msgFirst) + err := ErrIncomplete + for i, m := range s { + if err == nil { + return fmt.Errorf("catalog: message argument %d is complete and blocks subsequent messages", i-1) + } + err = e.EncodeMessage(m) + } + return err +} + // Var defines a message that can be substituted for a placeholder of the same // name. If an expression does not result in a string after evaluation, Name is // used as the substitution. For example: @@ -295,7 +322,7 @@ func (r Raw) Compile(e *Encoder) (err error) { // d.Arg(1) // d.Render(resultOfInvites) // d.Render(" %[2]v to ") -// d.Arg(1) +// d.Arg(2) // d.Render(resultOfTheir) // d.Render(" party.") // where the messages for "invites" and "their" both use a plural.Select @@ -365,3 +392,24 @@ func (s String) Compile(e *Encoder) (err error) { } return err } + +// Affix is a message that adds a prefix and suffix to another message. +// This is mostly used add back whitespace to a translation that was stripped +// before sending it out. +type Affix struct { + Message Message + Prefix string + Suffix string +} + +// Compile implements Message. +func (a Affix) Compile(e *Encoder) (err error) { + // TODO: consider adding a special message type that just adds a single + // return. This is probably common enough to handle the majority of cases. + // Get some stats first, though. + e.EncodeMessageType(msgAffix) + e.EncodeString(a.Prefix) + e.EncodeString(a.Suffix) + e.EncodeMessage(a.Message) + return nil +} diff --git a/vendor/golang.org/x/text/internal/catmsg/catmsg_test.go b/vendor/golang.org/x/text/internal/catmsg/catmsg_test.go index d06502b..b2a7a9e 100644 --- a/vendor/golang.org/x/text/internal/catmsg/catmsg_test.go +++ b/vendor/golang.org/x/text/internal/catmsg/catmsg_test.go @@ -70,6 +70,10 @@ func TestCodec(t *testing.T) { desc: "simple string", m: String("foo"), tests: single("foo", ""), + }, { + desc: "affix", + m: &Affix{String("foo"), "\t", "\n"}, + tests: single("\t|foo|\n", ""), }, { desc: "missing var", m: String("foo${bar}"), @@ -100,6 +104,13 @@ func TestCodec(t *testing.T) { String("foo${bar}"), }, tests: single("foo|baz", ""), + }, { + desc: "affix with substitution", + m: &Affix{seq{ + &Var{"bar", String("baz")}, + String("foo${bar}"), + }, "\t", "\n"}, + tests: single("\t|foo|baz|\n", ""), }, { desc: "shadowed variable", m: seq{ @@ -110,6 +121,10 @@ func TestCodec(t *testing.T) { }, }, tests: single("foo|BAZ", ""), + }, { + desc: "nested value", + m: nestedLang{nestedLang{empty{}}}, + tests: single("nl|nl", ""), }, { desc: "not shadowed variable", m: seq{ @@ -136,7 +151,7 @@ func TestCodec(t *testing.T) { &Var{"bar", incomplete{}}, String("${bar}"), }, - enc: "\x00\t\b\x01\x01\x04\x04\x02bar\x03\x00\x00\x00", + enc: "\x00\t\b\x01\x01\x14\x04\x02bar\x03\x00\x00\x00", // TODO: recognize that it is cheaper to substitute bar. tests: single("bar", ""), }, { @@ -207,8 +222,9 @@ func TestCodec(t *testing.T) { dec := NewDecoder(language.Und, r, macros) for _, tc := range testCases { t.Run(tc.desc, func(t *testing.T) { - - data, err := Compile(language.Und, macros, tc.m) + // Use a language other than Und so that we can test + // passing the language to nested values. + data, err := Compile(language.Dutch, macros, tc.m) if failErr(err, tc.encErr) { t.Errorf("encoding error: got %+q; want %+q", err, tc.encErr) } @@ -241,7 +257,7 @@ type seq []Message func (s seq) Compile(e *Encoder) (err error) { err = ErrIncomplete - e.EncodeMessageType(First) + e.EncodeMessageType(msgFirst) for _, m := range s { // Pass only the last error, but allow erroneous or complete messages // here to allow testing different scenarios. @@ -265,6 +281,23 @@ func (incomplete) Compile(e *Encoder) (err error) { return ErrIncomplete } +var msgNested = Register( + "golang.org/x/text/internal/catmsg.nested", + func(d *Decoder) bool { + d.Render(d.DecodeString()) + d.ExecuteMessage() + return true + }) + +type nestedLang struct{ Message } + +func (n nestedLang) Compile(e *Encoder) (err error) { + e.EncodeMessageType(msgNested) + e.EncodeString(e.Language().String()) + e.EncodeMessage(n.Message) + return nil +} + type errorCompileMsg struct{} var errCompileTest = errors.New("catmsg: compile error test") diff --git a/vendor/golang.org/x/text/internal/catmsg/codec.go b/vendor/golang.org/x/text/internal/catmsg/codec.go old mode 100755 new mode 100644 index e959b08..49c9fc9 --- a/vendor/golang.org/x/text/internal/catmsg/codec.go +++ b/vendor/golang.org/x/text/internal/catmsg/codec.go @@ -99,7 +99,7 @@ func (e *Encoder) EncodeMessageType(h Handle) { // EncodeMessage serializes the given message inline at the current position. func (e *Encoder) EncodeMessage(m Message) error { - e = &Encoder{root: e.root, parent: e} + e = &Encoder{root: e.root, parent: e, tag: e.tag} err := m.Compile(e) if _, ok := m.(*Var); !ok { e.flushTo(e.parent) @@ -169,7 +169,7 @@ func (e *Encoder) addVar(key string, m Message) error { case err == ErrIncomplete: if Handle(e.buf[0]) != msgFirst { seq := &Encoder{root: e.root, parent: e} - seq.EncodeMessageType(First) + seq.EncodeMessageType(msgFirst) e.flushTo(seq) e = seq } diff --git a/vendor/golang.org/x/text/internal/catmsg/varint_test.go b/vendor/golang.org/x/text/internal/catmsg/varint_test.go index a079c77..04d881d 100644 --- a/vendor/golang.org/x/text/internal/catmsg/varint_test.go +++ b/vendor/golang.org/x/text/internal/catmsg/varint_test.go @@ -109,7 +109,7 @@ func TestDecodeUint(t *testing.T) { t.Run(fmt.Sprintf("%s:%q", f.name, tc.enc), func(t *testing.T) { x, size, err := f.decode(tc.enc) if err != tc.err { - t.Error("err = %q; want %q", err, tc.err) + t.Errorf("err = %q; want %q", err, tc.err) } if size != tc.size { t.Errorf("size = %d; want %d", size, tc.size) diff --git a/vendor/golang.org/x/text/internal/cldrtree/cldrtree.go b/vendor/golang.org/x/text/internal/cldrtree/cldrtree.go new file mode 100644 index 0000000..7530831 --- /dev/null +++ b/vendor/golang.org/x/text/internal/cldrtree/cldrtree.go @@ -0,0 +1,353 @@ +// Copyright 2017 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. + +// Package cldrtree builds and generates a CLDR index file, including all +// inheritance. +// +package cldrtree + +//go:generate go test -gen + +// cldrtree stores CLDR data in a tree-like structure called Tree. In the CLDR +// data each branch in the tree is indicated by either an element name or an +// attribute value. A Tree does not distinguish between these two cases, but +// rather assumes that all branches can be accessed by an enum with a compact +// range of positive integer values starting from 0. +// +// Each Tree consists of three parts: +// - a slice mapping compact language identifiers to an offset into a set of +// indices, +// - a set of indices, stored as a large blob of uint16 values that encode +// the actual tree structure of data, and +// - a set of buckets that each holds a collection of strings. +// each of which is explained in more detail below. +// +// +// Tree lookup +// A tree lookup is done by providing a locale and a "path", which is a +// sequence of enum values. The search starts with getting the index for the +// given locale and then incrementally jumping into the index using the path +// values. If an element cannot be found in the index, the search starts anew +// for the locale's parent locale. The path may change during lookup by means +// of aliasing, described below. +// +// Buckets +// Buckets hold the actual string data of the leaf values of the CLDR tree. +// This data is stored in buckets, rather than one large string, for multiple +// reasons: +// - it allows representing leaf values more compactly, by storing all leaf +// values in a single bucket and then needing only needing a uint16 to index +// into this bucket for all leaf values, +// - (TBD) allow multiple trees to share subsets of buckets, mostly to allow +// linking in a smaller amount of data if only a subset of the buckets is +// needed, +// - to be nice to go fmt and the compiler. +// +// indices +// An index is a slice of uint16 for which the values are interpreted in one of +// two ways: as a node or a set of leaf values. +// A set of leaf values has the following form: +// , , ... +// max_size indicates the maximum enum value for which an offset is defined. +// An offset value of 0xFFFF (missingValue) also indicates an undefined value. +// If defined offset indicates the offset within the given bucket of the string. +// A node value has the following form: +// , ... +// max_size indicates the maximum value for which an offset is defined. +// A missing offset may also be indicated with 0. If the high bit (0x8000, or +// inheritMask) is not set, the offset points to the offset within the index +// for the current locale. +// An offset with high bit set is an alias. In this case the uint16 has the form +// bits: +// 15: 1 +// 14-12: negative offset into path relative to current position +// 0-11: new enum value for path element. +// On encountering an alias, the path is modified accordingly and the lookup is +// restarted for the given locale. + +import ( + "fmt" + "reflect" + "regexp" + "strings" + "unicode/utf8" + + "golang.org/x/text/internal/gen" + "golang.org/x/text/language" + "golang.org/x/text/unicode/cldr" +) + +// TODO: +// - allow two Trees to share the same set of buckets. + +// A Builder allows storing CLDR data in compact form. +type Builder struct { + table []string + + rootMeta *metaData + locales []locale + strToBucket map[string]stringInfo + buckets [][]byte + enums []*enum + err error + + // Stats + size int + sizeAll int + bucketWaste int +} + +const ( + maxBucketSize = 8 * 1024 // 8K + maxStrlen = 254 // allow 0xFF sentinel +) + +func (b *Builder) setError(err error) { + if b.err == nil { + b.err = err + } +} + +func (b *Builder) addString(data string) stringInfo { + data = b.makeString(data) + info, ok := b.strToBucket[data] + if !ok { + b.size += len(data) + x := len(b.buckets) - 1 + bucket := b.buckets[x] + if len(bucket)+len(data) < maxBucketSize { + info.bucket = uint16(x) + info.bucketPos = uint16(len(bucket)) + b.buckets[x] = append(bucket, data...) + } else { + info.bucket = uint16(len(b.buckets)) + info.bucketPos = 0 + b.buckets = append(b.buckets, []byte(data)) + } + b.strToBucket[data] = info + } + return info +} + +func (b *Builder) addStringToBucket(data string, bucket uint16) stringInfo { + data = b.makeString(data) + info, ok := b.strToBucket[data] + if !ok || info.bucket != bucket { + if ok { + b.bucketWaste += len(data) + } + b.size += len(data) + bk := b.buckets[bucket] + info.bucket = bucket + info.bucketPos = uint16(len(bk)) + b.buckets[bucket] = append(bk, data...) + b.strToBucket[data] = info + } + return info +} + +func (b *Builder) makeString(data string) string { + if len(data) > maxStrlen { + b.setError(fmt.Errorf("string %q exceeds maximum length of %d", data, maxStrlen)) + data = data[:maxStrlen] + for i := len(data) - 1; i > len(data)-4; i-- { + if utf8.RuneStart(data[i]) { + data = data[:i] + break + } + } + } + data = string([]byte{byte(len(data))}) + data + b.sizeAll += len(data) + return data +} + +type stringInfo struct { + bufferPos uint32 + bucket uint16 + bucketPos uint16 +} + +// New creates a new Builder. +func New(tableName string) *Builder { + b := &Builder{ + strToBucket: map[string]stringInfo{}, + buckets: [][]byte{nil}, // initialize with first bucket. + } + b.rootMeta = &metaData{ + b: b, + typeInfo: &typeInfo{}, + } + return b +} + +// Gen writes all the tables and types for the collected data. +func (b *Builder) Gen(w *gen.CodeWriter) error { + t, err := build(b) + if err != nil { + return err + } + return generate(b, t, w) +} + +// GenTestData generates tables useful for testing data generated with Gen. +func (b *Builder) GenTestData(w *gen.CodeWriter) error { + return generateTestData(b, w) +} + +type locale struct { + tag language.Tag + root *Index +} + +// Locale creates an index for the given locale. +func (b *Builder) Locale(t language.Tag) *Index { + index := &Index{ + meta: b.rootMeta, + } + b.locales = append(b.locales, locale{tag: t, root: index}) + return index +} + +// An Index holds a map of either leaf values or other indices. +type Index struct { + meta *metaData + + subIndex []*Index + values []keyValue +} + +func (i *Index) setError(err error) { i.meta.b.setError(err) } + +type keyValue struct { + key enumIndex + value stringInfo +} + +// Element is a CLDR XML element. +type Element interface { + GetCommon() *cldr.Common +} + +// Index creates a subindex where the type and enum values are not shared +// with siblings by default. The name is derived from the elem. If elem is +// an alias reference, the alias will be resolved and linked. If elem is nil +// Index returns nil. +func (i *Index) Index(elem Element, opt ...Option) *Index { + if elem == nil || reflect.ValueOf(elem).IsNil() { + return nil + } + c := elem.GetCommon() + o := &options{ + parent: i, + name: c.GetCommon().Element(), + } + o.fill(opt) + o.setAlias(elem) + return i.subIndexForKey(o) +} + +// IndexWithName is like Section but derives the name from the given name. +func (i *Index) IndexWithName(name string, opt ...Option) *Index { + o := &options{parent: i, name: name} + o.fill(opt) + return i.subIndexForKey(o) +} + +// IndexFromType creates a subindex the value of tye type attribute as key. It +// will also configure the Index to share the enumeration values with all +// sibling values. If elem is an alias, it will be resolved and linked. +func (i *Index) IndexFromType(elem Element, opts ...Option) *Index { + o := &options{ + parent: i, + name: elem.GetCommon().Type, + } + o.fill(opts) + o.setAlias(elem) + useSharedType()(o) + return i.subIndexForKey(o) +} + +// IndexFromAlt creates a subindex the value of tye alt attribute as key. It +// will also configure the Index to share the enumeration values with all +// sibling values. If elem is an alias, it will be resolved and linked. +func (i *Index) IndexFromAlt(elem Element, opts ...Option) *Index { + o := &options{ + parent: i, + name: elem.GetCommon().Alt, + } + o.fill(opts) + o.setAlias(elem) + useSharedType()(o) + return i.subIndexForKey(o) +} + +func (i *Index) subIndexForKey(opts *options) *Index { + key := opts.name + if len(i.values) > 0 { + panic(fmt.Errorf("cldrtree: adding Index for %q when value already exists", key)) + } + meta := i.meta.sub(key, opts) + for _, x := range i.subIndex { + if x.meta == meta { + return x + } + } + if alias := opts.alias; alias != nil { + if a := alias.GetCommon().Alias; a != nil { + if a.Source != "locale" { + i.setError(fmt.Errorf("cldrtree: non-locale alias not supported %v", a.Path)) + } + if meta.inheritOffset < 0 { + i.setError(fmt.Errorf("cldrtree: alias was already set %v", a.Path)) + } + path := a.Path + for ; strings.HasPrefix(path, "../"); path = path[len("../"):] { + meta.inheritOffset-- + } + m := aliasRe.FindStringSubmatch(path) + if m == nil { + i.setError(fmt.Errorf("cldrtree: could not parse alias %q", a.Path)) + } else { + key := m[4] + if key == "" { + key = m[1] + } + meta.inheritIndex = key + } + } + } + x := &Index{meta: meta} + i.subIndex = append(i.subIndex, x) + return x +} + +var aliasRe = regexp.MustCompile(`^([a-zA-Z]+)(\[@([a-zA-Z-]+)='([a-zA-Z-]+)'\])?`) + +// SetValue sets the value, the data from a CLDR XML element, for the given key. +func (i *Index) SetValue(key string, value Element, opt ...Option) { + if len(i.subIndex) > 0 { + panic(fmt.Errorf("adding value for key %q when index already exists", key)) + } + o := &options{parent: i} + o.fill(opt) + c := value.GetCommon() + if c.Alias != nil { + i.setError(fmt.Errorf("cldrtree: alias not supported for SetValue %v", c.Alias.Path)) + } + i.setValue(key, c.Data(), o) +} + +func (i *Index) setValue(key, data string, o *options) { + index, _ := i.meta.typeInfo.lookupSubtype(key, o) + kv := keyValue{key: index} + if len(i.values) > 0 { + // Add string to the same bucket as the other values. + bucket := i.values[0].value.bucket + kv.value = i.meta.b.addStringToBucket(data, bucket) + } else { + kv.value = i.meta.b.addString(data) + } + i.values = append(i.values, kv) +} diff --git a/vendor/golang.org/x/text/internal/cldrtree/cldrtree_test.go b/vendor/golang.org/x/text/internal/cldrtree/cldrtree_test.go new file mode 100644 index 0000000..15960c8 --- /dev/null +++ b/vendor/golang.org/x/text/internal/cldrtree/cldrtree_test.go @@ -0,0 +1,457 @@ +// Copyright 2017 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. + +package cldrtree + +import ( + "bytes" + "flag" + "io/ioutil" + "log" + "math/rand" + "path/filepath" + "reflect" + "regexp" + "strconv" + "strings" + "testing" + + "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/language/compact" + "golang.org/x/text/language" + "golang.org/x/text/unicode/cldr" +) + +var genOutput = flag.Bool("gen", false, "generate output files") + +func TestAliasRegexp(t *testing.T) { + testCases := []struct { + alias string + want []string + }{{ + alias: "miscPatterns[@numberSystem='latn']", + want: []string{ + "miscPatterns[@numberSystem='latn']", + "miscPatterns", + "[@numberSystem='latn']", + "numberSystem", + "latn", + }, + }, { + alias: `calendar[@type='greg-foo']/days/`, + want: []string{ + "calendar[@type='greg-foo']", + "calendar", + "[@type='greg-foo']", + "type", + "greg-foo", + }, + }, { + alias: "eraAbbr", + want: []string{ + "eraAbbr", + "eraAbbr", + "", + "", + "", + }, + }, { + // match must be anchored at beginning. + alias: `../calendar[@type='gregorian']/days/`, + }} + for _, tc := range testCases { + t.Run(tc.alias, func(t *testing.T) { + got := aliasRe.FindStringSubmatch(tc.alias) + if !reflect.DeepEqual(got, tc.want) { + t.Errorf("got %v; want %v", got, tc.want) + } + }) + } +} + +func TestBuild(t *testing.T) { + tree1, _ := loadTestdata(t, "test1") + tree2, _ := loadTestdata(t, "test2") + + // Constants for second test test + const ( + calendar = iota + field + ) + const ( + month = iota + era + filler + cyclicNameSet + ) + const ( + abbreviated = iota + narrow + wide + ) + + testCases := []struct { + desc string + tree *Tree + locale string + path []uint16 + isFeature bool + result string + }{{ + desc: "und/chinese month format wide m1", + tree: tree1, + locale: "und", + path: path(calendar, 0, month, 0, wide, 1), + result: "cM01", + }, { + desc: "und/chinese month format wide m12", + tree: tree1, + locale: "und", + path: path(calendar, 0, month, 0, wide, 12), + result: "cM12", + }, { + desc: "und/non-existing value", + tree: tree1, + locale: "und", + path: path(calendar, 0, month, 0, wide, 13), + result: "", + }, { + desc: "und/dangi:chinese month format wide", + tree: tree1, + locale: "und", + path: path(calendar, 1, month, 0, wide, 1), + result: "cM01", + }, { + desc: "und/chinese month format abbreviated:wide", + tree: tree1, + locale: "und", + path: path(calendar, 0, month, 0, abbreviated, 1), + result: "cM01", + }, { + desc: "und/chinese month format narrow:wide", + tree: tree1, + locale: "und", + path: path(calendar, 0, month, 0, narrow, 1), + result: "cM01", + }, { + desc: "und/gregorian month format wide", + tree: tree1, + locale: "und", + path: path(calendar, 2, month, 0, wide, 2), + result: "gM02", + }, { + desc: "und/gregorian month format:stand-alone narrow", + tree: tree1, + locale: "und", + path: path(calendar, 2, month, 0, narrow, 1), + result: "1", + }, { + desc: "und/gregorian month stand-alone:format abbreviated", + tree: tree1, + locale: "und", + path: path(calendar, 2, month, 1, abbreviated, 1), + result: "gM01", + }, { + desc: "und/gregorian month stand-alone:format wide ", + tree: tree1, + locale: "und", + path: path(calendar, 2, month, 1, abbreviated, 1), + result: "gM01", + }, { + desc: "und/dangi:chinese month format narrow:wide ", + tree: tree1, + locale: "und", + path: path(calendar, 1, month, 0, narrow, 4), + result: "cM04", + }, { + desc: "und/field era displayname 0", + tree: tree2, + locale: "und", + path: path(field, 0, 0, 0), + result: "Era", + }, { + desc: "en/field era displayname 0", + tree: tree2, + locale: "en", + path: path(field, 0, 0, 0), + result: "era", + }, { + desc: "und/calendar hebrew format wide 7-leap", + tree: tree2, + locale: "und", + path: path(calendar, 7, month, 0, wide, 0), + result: "Adar II", + }, { + desc: "en-GB:en-001:en:und/calendar hebrew format wide 7-leap", + tree: tree2, + locale: "en-GB", + path: path(calendar, 7, month, 0, wide, 0), + result: "Adar II", + }, { + desc: "und/buddhist month format wide 11", + tree: tree2, + locale: "und", + path: path(calendar, 0, month, 0, wide, 12), + result: "genWideM12", + }, { + desc: "en-GB/gregorian month stand-alone narrow 2", + tree: tree2, + locale: "en-GB", + path: path(calendar, 6, month, 1, narrow, 3), + result: "gbNarrowM3", + }, { + desc: "en-GB/gregorian month format narrow 3/missing in en-GB", + tree: tree2, + locale: "en-GB", + path: path(calendar, 6, month, 0, narrow, 4), + result: "enNarrowM4", + }, { + desc: "en-GB/gregorian month format narrow 3/missing in en and en-GB", + tree: tree2, + locale: "en-GB", + path: path(calendar, 6, month, 0, narrow, 7), + result: "gregNarrowM7", + }, { + desc: "en-GB/gregorian month format narrow 3/missing in en and en-GB", + tree: tree2, + locale: "en-GB", + path: path(calendar, 6, month, 0, narrow, 7), + result: "gregNarrowM7", + }, { + desc: "en-GB/gregorian era narrow", + tree: tree2, + locale: "en-GB", + path: path(calendar, 6, era, abbreviated, 0, 1), + isFeature: true, + result: "AD", + }, { + desc: "en-GB/gregorian era narrow", + tree: tree2, + locale: "en-GB", + path: path(calendar, 6, era, narrow, 0, 0), + isFeature: true, + result: "BC", + }, { + desc: "en-GB/gregorian era narrow", + tree: tree2, + locale: "en-GB", + path: path(calendar, 6, era, wide, 1, 0), + isFeature: true, + result: "Before Common Era", + }, { + desc: "en-GB/dangi:chinese cyclicName, months, format, narrow:abbreviated 2", + tree: tree2, + locale: "en-GB", + path: path(calendar, 1, cyclicNameSet, 3, 0, 1, 2), + isFeature: true, + result: "year2", + }, { + desc: "en-GB/field era-narrow ", + tree: tree2, + locale: "en-GB", + path: path(field, 2, 0, 0), + result: "era", + }, { + desc: "en-GB/field month-narrow relativeTime future one", + tree: tree2, + locale: "en-GB", + path: path(field, 5, 2, 0, 1), + isFeature: true, + result: "001NarrowFutMOne", + }, { + // Don't fall back to the one of "en". + desc: "en-GB/field month-short relativeTime past one:other", + tree: tree2, + locale: "en-GB", + path: path(field, 4, 2, 1, 1), + isFeature: true, + result: "001ShortPastMOther", + }, { + desc: "en-GB/field month relativeTime future two:other", + tree: tree2, + locale: "en-GB", + path: path(field, 3, 2, 0, 2), + isFeature: true, + result: "enFutMOther", + }} + + for _, tc := range testCases { + t.Run(tc.desc, func(t *testing.T) { + tag, _ := compact.RegionalID(compact.Tag(language.MustParse(tc.locale))) + s := tc.tree.lookup(tag, tc.isFeature, tc.path...) + if s != tc.result { + t.Errorf("got %q; want %q", s, tc.result) + } + }) + } +} + +func path(e ...uint16) []uint16 { return e } + +func TestGen(t *testing.T) { + testCases := []string{"test1", "test2"} + for _, tc := range testCases { + t.Run(tc, func(t *testing.T) { + _, got := loadTestdata(t, tc) + + // Remove sizes that may vary per architecture. + re := regexp.MustCompile("// Size: [0-9]*") + got = re.ReplaceAllLiteral(got, []byte("// Size: xxxx")) + re = regexp.MustCompile("// Total table size [0-9]*") + got = re.ReplaceAllLiteral(got, []byte("// Total table size: xxxx")) + + file := filepath.Join("testdata", tc, "output.go") + if *genOutput { + ioutil.WriteFile(file, got, 0700) + t.SkipNow() + } + + b, err := ioutil.ReadFile(file) + if err != nil { + t.Fatalf("failed to open file: %v", err) + } + if want := string(b); string(got) != want { + t.Log(string(got)) + t.Errorf("files differ") + } + }) + } +} + +func loadTestdata(t *testing.T, test string) (tree *Tree, file []byte) { + b := New("test") + + var d cldr.Decoder + + data, err := d.DecodePath(filepath.Join("testdata", test)) + if err != nil { + t.Fatalf("error decoding testdata: %v", err) + } + + context := Enum("context") + widthMap := func(s string) string { + // Align era with width values. + if r, ok := map[string]string{ + "eraAbbr": "abbreviated", + "eraNarrow": "narrow", + "eraNames": "wide", + }[s]; ok { + s = r + } + return "w" + strings.Title(s) + } + width := EnumFunc("width", widthMap, "abbreviated", "narrow", "wide") + month := Enum("month", "leap7") + relative := EnumFunc("relative", func(s string) string { + x, err := strconv.ParseInt(s, 10, 8) + if err != nil { + log.Fatal("Invalid number:", err) + } + return []string{ + "before1", + "current", + "after1", + }[x+1] + }) + cycleType := EnumFunc("cycleType", func(s string) string { + return "cyc" + strings.Title(s) + }) + r := rand.New(rand.NewSource(0)) + + for _, loc := range data.Locales() { + ldml := data.RawLDML(loc) + x := b.Locale(language.Make(loc)) + + if x := x.Index(ldml.Dates.Calendars); x != nil { + for _, cal := range ldml.Dates.Calendars.Calendar { + x := x.IndexFromType(cal) + if x := x.Index(cal.Months); x != nil { + for _, mc := range cal.Months.MonthContext { + x := x.IndexFromType(mc, context) + for _, mw := range mc.MonthWidth { + x := x.IndexFromType(mw, width) + for _, m := range mw.Month { + x.SetValue(m.Yeartype+m.Type, m, month) + } + } + } + } + if x := x.Index(cal.CyclicNameSets); x != nil { + for _, cns := range cal.CyclicNameSets.CyclicNameSet { + x := x.IndexFromType(cns, cycleType) + for _, cc := range cns.CyclicNameContext { + x := x.IndexFromType(cc, context) + for _, cw := range cc.CyclicNameWidth { + x := x.IndexFromType(cw, width) + for _, c := range cw.CyclicName { + x.SetValue(c.Type, c) + } + } + } + } + } + if x := x.Index(cal.Eras); x != nil { + opts := []Option{width, SharedType()} + if x := x.Index(cal.Eras.EraNames, opts...); x != nil { + for _, e := range cal.Eras.EraNames.Era { + x.IndexFromAlt(e).SetValue(e.Type, e) + } + } + if x := x.Index(cal.Eras.EraAbbr, opts...); x != nil { + for _, e := range cal.Eras.EraAbbr.Era { + x.IndexFromAlt(e).SetValue(e.Type, e) + } + } + if x := x.Index(cal.Eras.EraNarrow, opts...); x != nil { + for _, e := range cal.Eras.EraNarrow.Era { + x.IndexFromAlt(e).SetValue(e.Type, e) + } + } + } + { + // Ensure having more than 2 buckets. + f := x.IndexWithName("filler") + b := make([]byte, maxStrlen) + opt := &options{parent: x} + r.Read(b) + f.setValue("0", string(b), opt) + } + } + } + if x := x.Index(ldml.Dates.Fields); x != nil { + for _, f := range ldml.Dates.Fields.Field { + x := x.IndexFromType(f) + for _, d := range f.DisplayName { + x.Index(d).SetValue("", d) + } + for _, r := range f.Relative { + x.Index(r).SetValue(r.Type, r, relative) + } + for _, rt := range f.RelativeTime { + x := x.Index(rt).IndexFromType(rt) + for _, p := range rt.RelativeTimePattern { + x.SetValue(p.Count, p) + } + } + for _, rp := range f.RelativePeriod { + x.Index(rp).SetValue("", rp) + } + } + } + } + + tree, err = build(b) + if err != nil { + t.Fatal("error building tree:", err) + } + w := gen.NewCodeWriter() + generate(b, tree, w) + generateTestData(b, w) + buf := &bytes.Buffer{} + if _, err = w.WriteGo(buf, "test", ""); err != nil { + t.Log(buf.String()) + t.Fatal("error generating code:", err) + } + return tree, buf.Bytes() +} diff --git a/vendor/golang.org/x/text/internal/cldrtree/generate.go b/vendor/golang.org/x/text/internal/cldrtree/generate.go new file mode 100644 index 0000000..0f0b5f3 --- /dev/null +++ b/vendor/golang.org/x/text/internal/cldrtree/generate.go @@ -0,0 +1,208 @@ +// Copyright 2017 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. + +package cldrtree + +import ( + "bytes" + "fmt" + "io" + "reflect" + "strconv" + "strings" + + "golang.org/x/text/internal/gen" +) + +func generate(b *Builder, t *Tree, w *gen.CodeWriter) error { + fmt.Fprintln(w, `import "golang.org/x/text/internal/cldrtree"`) + fmt.Fprintln(w) + + fmt.Fprintf(w, "var tree = &cldrtree.Tree{locales, indices, buckets}\n\n") + + w.WriteComment("Path values:\n" + b.stats()) + fmt.Fprintln(w) + + // Generate enum types. + for _, e := range b.enums { + // Build enum types. + w.WriteComment("%s specifies a property of a CLDR field.", e.name) + fmt.Fprintf(w, "type %s uint16\n", e.name) + } + + d, err := getEnumData(b) + if err != nil { + return err + } + fmt.Fprintln(w, "const (") + for i, k := range d.keys { + fmt.Fprintf(w, "%s %s = %d // %s\n", toCamel(k), d.enums[i], d.m[k], k) + } + fmt.Fprintln(w, ")") + + w.WriteVar("locales", t.Locales) + w.WriteVar("indices", t.Indices) + + // Generate string buckets. + fmt.Fprintln(w, "var buckets = []string{") + for i := range t.Buckets { + fmt.Fprintf(w, "bucket%d,\n", i) + } + fmt.Fprint(w, "}\n\n") + w.Size += int(reflect.TypeOf("").Size()) * len(t.Buckets) + + // Generate string buckets. + for i, bucket := range t.Buckets { + w.WriteVar(fmt.Sprint("bucket", i), bucket) + } + return nil +} + +func generateTestData(b *Builder, w *gen.CodeWriter) error { + d, err := getEnumData(b) + if err != nil { + return err + } + + fmt.Fprintln(w) + fmt.Fprintln(w, "var enumMap = map[string]uint16{") + fmt.Fprintln(w, `"": 0,`) + for _, k := range d.keys { + fmt.Fprintf(w, "%q: %d,\n", k, d.m[k]) + } + fmt.Fprintln(w, "}") + return nil +} + +func toCamel(s string) string { + p := strings.Split(s, "-") + for i, s := range p[1:] { + p[i+1] = strings.Title(s) + } + return strings.Replace(strings.Join(p, ""), "/", "", -1) +} + +func (b *Builder) stats() string { + w := &bytes.Buffer{} + + b.rootMeta.validate() + for _, es := range b.enums { + fmt.Fprintf(w, "<%s>\n", es.name) + printEnumValues(w, es, 1, nil) + } + fmt.Fprintln(w) + printEnums(w, b.rootMeta.typeInfo, 0) + fmt.Fprintln(w) + fmt.Fprintln(w, "Nr elem: ", len(b.strToBucket)) + fmt.Fprintln(w, "uniqued size: ", b.size) + fmt.Fprintln(w, "total string size: ", b.sizeAll) + fmt.Fprintln(w, "bucket waste: ", b.bucketWaste) + + return w.String() +} + +func printEnums(w io.Writer, s *typeInfo, indent int) { + idStr := strings.Repeat(" ", indent) + "- " + e := s.enum + if e == nil { + if len(s.entries) > 0 { + panic(fmt.Errorf("has entries but no enum values: %#v", s.entries)) + } + return + } + if e.name != "" { + fmt.Fprintf(w, "%s<%s>\n", idStr, e.name) + } else { + printEnumValues(w, e, indent, s) + } + if s.sharedKeys() { + for _, v := range s.entries { + printEnums(w, v, indent+1) + break + } + } +} + +func printEnumValues(w io.Writer, e *enum, indent int, info *typeInfo) { + idStr := strings.Repeat(" ", indent) + "- " + for i := 0; i < len(e.keys); i++ { + fmt.Fprint(w, idStr) + k := e.keys[i] + if u, err := strconv.ParseUint(k, 10, 16); err == nil { + fmt.Fprintf(w, "%s", k) + // Skip contiguous integers + var v, last uint64 + for i++; i < len(e.keys); i++ { + k = e.keys[i] + if v, err = strconv.ParseUint(k, 10, 16); err != nil { + break + } + last = v + } + if u < last { + fmt.Fprintf(w, `..%d`, last) + } + fmt.Fprintln(w) + if err != nil { + fmt.Fprintf(w, "%s%s\n", idStr, k) + } + } else if k == "" { + fmt.Fprintln(w, `""`) + } else { + fmt.Fprintf(w, "%s\n", k) + } + if info != nil && !info.sharedKeys() { + if e := info.entries[enumIndex(i)]; e != nil { + printEnums(w, e, indent+1) + } + } + } +} + +func getEnumData(b *Builder) (*enumData, error) { + d := &enumData{m: map[string]int{}} + if errStr := d.insert(b.rootMeta.typeInfo); errStr != "" { + // TODO: consider returning the error. + return nil, fmt.Errorf("cldrtree: %s", errStr) + } + return d, nil +} + +type enumData struct { + m map[string]int + keys []string + enums []string +} + +func (d *enumData) insert(t *typeInfo) (errStr string) { + e := t.enum + if e == nil { + return "" + } + for i, k := range e.keys { + if _, err := strconv.ParseUint(k, 10, 16); err == nil { + // We don't include any enum that has integer values. + break + } + if v, ok := d.m[k]; ok { + if v != i { + return fmt.Sprintf("%q has value %d and %d", k, i, v) + } + } else { + d.m[k] = i + if k != "" { + d.keys = append(d.keys, k) + d.enums = append(d.enums, e.name) + } + } + } + for i := range t.enum.keys { + if e := t.entries[enumIndex(i)]; e != nil { + if errStr := d.insert(e); errStr != "" { + return fmt.Sprintf("%q>%v", t.enum.keys[i], errStr) + } + } + } + return "" +} diff --git a/vendor/golang.org/x/text/internal/cldrtree/option.go b/vendor/golang.org/x/text/internal/cldrtree/option.go new file mode 100644 index 0000000..f91e250 --- /dev/null +++ b/vendor/golang.org/x/text/internal/cldrtree/option.go @@ -0,0 +1,86 @@ +// Copyright 2017 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. + +package cldrtree + +import ( + "reflect" + + "golang.org/x/text/unicode/cldr" +) + +// An Option configures an Index. +type Option func(*options) + +type options struct { + parent *Index + + name string + alias *cldr.Common + + sharedType *typeInfo + sharedEnums *enum +} + +func (o *options) fill(opt []Option) { + for _, f := range opt { + f(o) + } +} + +// aliasOpt sets an alias from the given node, if the node defines one. +func (o *options) setAlias(n Element) { + if n != nil && !reflect.ValueOf(n).IsNil() { + o.alias = n.GetCommon() + } +} + +// Enum defines a enumeration type. The resulting option may be passed for the +// construction of multiple Indexes, which they will share the same enum values. +// Calling Gen on a Builder will generate the Enum for the given name. The +// optional values fix the values for the given identifier to the argument +// position (starting at 0). Other values may still be added and will be +// assigned to subsequent values. +func Enum(name string, value ...string) Option { + return EnumFunc(name, nil, value...) +} + +// EnumFunc is like Enum but also takes a function that allows rewriting keys. +func EnumFunc(name string, rename func(string) string, value ...string) Option { + enum := &enum{name: name, rename: rename, keyMap: map[string]enumIndex{}} + for _, e := range value { + enum.lookup(e) + } + return func(o *options) { + found := false + for _, e := range o.parent.meta.b.enums { + if e.name == enum.name { + found = true + break + } + } + if !found { + o.parent.meta.b.enums = append(o.parent.meta.b.enums, enum) + } + o.sharedEnums = enum + } +} + +// SharedType returns an option which causes all Indexes to which this option is +// passed to have the same type. +func SharedType() Option { + info := &typeInfo{} + return func(o *options) { o.sharedType = info } +} + +func useSharedType() Option { + return func(o *options) { + sub := o.parent.meta.typeInfo.keyTypeInfo + if sub == nil { + sub = &typeInfo{} + o.parent.meta.typeInfo.keyTypeInfo = sub + } + o.sharedType = sub + } +} diff --git a/vendor/golang.org/x/text/internal/cldrtree/testdata/test1/common/main/root.xml b/vendor/golang.org/x/text/internal/cldrtree/testdata/test1/common/main/root.xml new file mode 100644 index 0000000..f9d3b5d --- /dev/null +++ b/vendor/golang.org/x/text/internal/cldrtree/testdata/test1/common/main/root.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + cM01 + cM02 + cM03 + cM04 + cM05 + cM06 + cM07 + cM08 + cM09 + cM10 + cM11 + cM12 + + + + + + + + + + + + + + + + + + + + gM01 + gM02 + gM03 + gM04 + gM05 + gM06 + gM07 + gM08 + gM09 + gM10 + gM11 + gM12 + + + + + + + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + + + + + + + + + + diff --git a/vendor/golang.org/x/text/internal/cldrtree/testdata/test1/output.go b/vendor/golang.org/x/text/internal/cldrtree/testdata/test1/output.go new file mode 100644 index 0000000..367fc70 --- /dev/null +++ b/vendor/golang.org/x/text/internal/cldrtree/testdata/test1/output.go @@ -0,0 +1,353 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package test + +import "golang.org/x/text/internal/cldrtree" + +var tree = &cldrtree.Tree{locales, indices, buckets} + +// Path values: +// +// - format +// - stand-alone +// +// - wAbbreviated +// - wNarrow +// - wWide +// +// - leap7 +// - 1..12 +// +// - calendars +// - chinese +// - dangi +// - gregorian +// - months +// - +// - +// - +// - filler +// - 0 +// +// Nr elem: 39 +// uniqued size: 912 +// total string size: 912 +// bucket waste: 0 + +// context specifies a property of a CLDR field. +type context uint16 + +// width specifies a property of a CLDR field. +type width uint16 + +// month specifies a property of a CLDR field. +type month uint16 + +const ( + calendars = 0 // calendars + chinese = 0 // chinese + dangi = 1 // dangi + gregorian = 2 // gregorian + months = 0 // months + filler = 1 // filler + format context = 0 // format + standAlone context = 1 // stand-alone + wAbbreviated width = 0 // wAbbreviated + wNarrow width = 1 // wNarrow + wWide width = 2 // wWide + leap7 month = 0 // leap7 +) + +var locales = []uint32{ // 775 elements + // Entry 0 - 1F + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 20 - 3F + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 40 - 5F + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 60 - 7F + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 80 - 9F + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry A0 - BF + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry C0 - DF + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry E0 - FF + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 100 - 11F + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 120 - 13F + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 140 - 15F + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 160 - 17F + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 180 - 19F + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 1A0 - 1BF + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 1C0 - 1DF + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 1E0 - 1FF + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 200 - 21F + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 220 - 23F + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 240 - 25F + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 260 - 27F + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 280 - 29F + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 2A0 - 2BF + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 2C0 - 2DF + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 2E0 - 2FF + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 300 - 31F + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, +} // Size: xxxx bytes + +var indices = []uint16{ // 86 elements + // Entry 0 - 3F + 0x0001, 0x0002, 0x0003, 0x0006, 0x0021, 0x0027, 0x0002, 0x0009, + 0x001e, 0x0001, 0x000b, 0x0003, 0x8002, 0x8002, 0x000f, 0x000d, + 0x0000, 0xffff, 0x0000, 0x0005, 0x000a, 0x000f, 0x0014, 0x0019, + 0x001e, 0x0023, 0x0028, 0x002d, 0x0032, 0x0037, 0x0001, 0x0000, + 0x003c, 0x0002, 0x9000, 0x0024, 0x0001, 0x0000, 0x013b, 0x0002, + 0x002a, 0x0053, 0x0002, 0x002d, 0x0040, 0x0003, 0x8002, 0x9001, + 0x0031, 0x000d, 0x0000, 0xffff, 0x023a, 0x023f, 0x0244, 0x0249, + 0x024e, 0x0253, 0x0258, 0x025d, 0x0262, 0x0267, 0x026c, 0x0271, + // Entry 40 - 7F + 0x0003, 0x9000, 0x0044, 0x9000, 0x000d, 0x0000, 0xffff, 0x0276, + 0x0278, 0x027a, 0x027c, 0x027e, 0x0280, 0x0282, 0x0284, 0x0286, + 0x0288, 0x028b, 0x028e, 0x0001, 0x0000, 0x0291, +} // Size: xxxx bytes + +var buckets = []string{ + bucket0, +} + +var bucket0 string = "" + // Size: xxxx bytes + "\x04cM01\x04cM02\x04cM03\x04cM04\x04cM05\x04cM06\x04cM07\x04cM08\x04cM09" + + "\x04cM10\x04cM11\x04cM12\xfe\x01\x94\xfd\xc2\xfa/\xfc\xc0A\xd3\xff\x12" + + "\x04[s\xc8nO\xf9_\xf6b\xa5\xee\xe8*\xbd\xf4J-\x0bu\xfb\x18\x0d\xafH\xa7" + + "\x9e\xe0\xb1\x0d9FQ\x85\x0fԡx\x89.\xe2\x85\xec\xe1Q\x14Ux\x08u\xd6N\xe2" + + "\xd3\xd0\xd0\xdek\xf8\xf9\xb4L\xe8_\xf0DƱ\xf8;\x8e\x88;\xbf\x85z\xab\x99" + + "ŲR\xc7B\x9c2\U000e8bb7\x9e\xf8V\xf6Y\xc1\x8f\x0d\xce\xccw\xc7^z\x81\xbf" + + "\xde'_g\xcf\xe2B\xcf<\xc3T\xf3\xed\xe2־\xccN\xa3\xae^\x88Rj\x9fJW\x8b˞" + + "\xf2ԦS\x14v\x8dm)\x97a\xea\x9eOZ\xa6\xae\xc3\xfcxƪ\xe0\x81\xac\x81 \xc7 " + + "\xef\xcdlꄶ\x92^`{\xe0cqo\x96\xdd\xcd\xd0\x1du\x04\\?\x00\x0f\x8ayk\xcelQ" + + ",8\x01\xaa\xca\xee߭[Pfd\xe8\xc0\xe4\xa7q\xecื\xc1\x96]\x91\x81%\x1b|\x9c" + + "\x9c\xa5 Z\xfc\x16\xa26\xa2\xef\xcd\xd2\xd1-*y\xd0\xfet\xa8(\x0a\xe9C" + + "\x9e\xb0֮\xca\x08#\xae\x02\xd6}\x86j\xc2\xc4\xfeJrPS\xda\x11\x9b\x9dOQQ@" + + "\xa2\xd7#\x9c@\xb4ZÕ\x0d\x94\x1f\xc4\xfe\x1c\x0c\xb9j\xd3\x22\xd6\x22" + + "\x82)_\xbf\xe1\x1e&\xa43\x07m\xb5\xc1DL:4\xd3*\\J\x7f\xfb\xe8с\xf7\xed;" + + "\x8c\xfe\x90O\x93\xf8\xf0m)\xbc\xd9\xed\x84{\x18.\x04d\x10\xf4Kİ\xf3\xf0" + + ":\x0d\x06\x82\x0a0\xf2W\xf8\x11A0g\x8a\xc0E\x86\xc1\xe3\xc94,\x8b\x80U" + + "\xc4f؆D\x1d%\x99\x06͉֚K\x96\x8a\xe9\xf0띖\\\xe6\xa4i + + + + + + + BE + + + + + + + + + + + + + + + + + chineseWideM01 + chineseWideM02 + chineseWideM03 + chineseWideM04 + chineseWideM05 + chineseWideM06 + chineseWideM07 + chineseWideM08 + chineseWideM09 + chineseWideM10 + chineseWideM11 + chineseWideM12 + + + + + + + + chineseNarrowM1 + chineseNarrowM2 + chineseNarrowM3 + chineseNarrowM4 + chineseNarrowM5 + chineseNarrowM6 + chineseNarrowM7 + chineseNarrowM8 + chineseNarrowM9 + chineseNarrowM10 + chineseNarrowM11 + chineseNarrowM12 + + + + + + + + + + + + dpAbbr1 + dpAbbr2 + dpAbbr3 + dpAbbr4 + dpAbbr5 + dpAbbr6 + dpAbbr7 + dpAbbr8 + dpAbbr9 + dpAbbr10 + dpAbbr11 + dpAbbr12 + + + + + + + + + + + + + + + + + + + year1 + year2 + year3 + year4 + year5 + year6 + year7 + year8 + year9 + year10 + year11 + year12 + year13 + year14 + year15 + year16 + year17 + year18 + year19 + year20 + year21 + year22 + year23 + year24 + year25 + year26 + year27 + year28 + year29 + year30 + year31 + year32 + year33 + year34 + year35 + year36 + year37 + year38 + year39 + year40 + year41 + year42 + year43 + year44 + year45 + year46 + year47 + year48 + year49 + year50 + year51 + year52 + year53 + year54 + year55 + year56 + year57 + year58 + year59 + year60 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Meskerem + Tekemt + Hedar + Tahsas + Ter + Yekatit + Megabit + Miazia + Genbot + Sene + Hamle + Nehasse + Pagumen + + + + + + + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + + + + + + + + + + + + ERA0 + ERA1 + + + + + + + + + + + + + + + + ERA0 + + + + + + + + + + + + + + + + + genWideM01 + genWideM02 + genWideM03 + genWideM04 + genWideM05 + genWideM06 + genWideM07 + genWideM08 + genWideM09 + genWideM10 + genWideM11 + genWideM12 + + + + + + + + genNarrowM1 + genNarrowM2 + genNarrowM3 + genNarrowM4 + genNarrowM5 + genNarrowM6 + genNarrowM7 + genNarrowM8 + genNarrowM9 + genNarrowM10 + genNarrowM11 + genNarrowM12 + + + + + + + + + + + + ERA0 + ERA1 + + + + + + + + + + + + + + + + + gregWideM01 + gregWideM02 + gregWideM03 + gregWideM04 + gregWideM05 + gregWideM06 + gregWideM07 + gregWideM08 + gregWideM09 + gregWideM10 + gregWideM11 + gregWideM12 + + + + + + + + gregNarrowM1 + gregNarrowM2 + gregNarrowM3 + gregNarrowM4 + gregNarrowM5 + gregNarrowM6 + gregNarrowM7 + gregNarrowM8 + gregNarrowM9 + gregNarrowM10 + gregNarrowM11 + gregNarrowM12 + + + + + + + + + + + + BCE + CE + + + + + + + + + + + + + + + + + Tishri + Heshvan + Kislev + Tevet + Shevat + Adar I + Adar + Adar II + Nisan + Iyar + Sivan + Tamuz + Av + Elul + + + + + + + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + + + + + + + + + + + + AM + + + + + + + + + + + + islAbbr1 + islAbbr2 + islAbbr3 + islAbbr4 + islAbbr5 + islAbbr6 + islAbbr7 + islAbbr8 + islAbbr9 + islAbbr10 + islAbbr11 + islAbbr12 + + + + + + islWide1 + islWide2 + islWide3 + islWide4 + islWide5 + islWide6 + islWide7 + islWide8 + islWide9 + islWide10 + islWide11 + islWide12 + + + + + + + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + + + + + + + + + + + + AH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Farvardin + Ordibehesht + Khordad + Tir + Mordad + Shahrivar + Mehr + Aban + Azar + Dey + Bahman + Esfand + + + + + + + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + + + + + + + + + + + + AP + + + + + + + + + + Era + + + + + + + + + Month + last month + this month + next month + + +{0} m + + + -{0} m + + + + + + + + + + + diff --git a/vendor/golang.org/x/text/internal/cldrtree/testdata/test2/output.go b/vendor/golang.org/x/text/internal/cldrtree/testdata/test2/output.go new file mode 100644 index 0000000..63d6d96 --- /dev/null +++ b/vendor/golang.org/x/text/internal/cldrtree/testdata/test2/output.go @@ -0,0 +1,892 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package test + +import "golang.org/x/text/internal/cldrtree" + +var tree = &cldrtree.Tree{locales, indices, buckets} + +// Path values: +// +// - wAbbreviated +// - wNarrow +// - wWide +// +// - format +// - stand-alone +// +// - leap7 +// - 1..13 +// +// - cycDayParts +// - cycDays +// - cycMonths +// - cycYears +// - cycZodiacs +// +// - before1 +// - current +// - after1 +// +// - calendars +// - buddhist +// - chinese +// - dangi +// - ethiopic +// - ethiopic-amete-alem +// - generic +// - gregorian +// - hebrew +// - islamic +// - islamic-civil +// - islamic-rgsa +// - islamic-tbla +// - islamic-umalqura +// - persian +// - months +// - +// - +// - +// - eras +// - +// - "" +// - variant +// - 0..1 +// - filler +// - 0 +// - cyclicNameSets +// - +// - +// - +// - 0..60 +// - fields +// - era +// - era-short +// - era-narrow +// - month +// - month-short +// - month-narrow +// - displayName +// - "" +// - relative +// - +// - relativeTime +// - future +// - past +// - other +// - one +// - two +// +// Nr elem: 394 +// uniqued size: 9778 +// total string size: 9931 +// bucket waste: 0 + +// width specifies a property of a CLDR field. +type width uint16 + +// context specifies a property of a CLDR field. +type context uint16 + +// month specifies a property of a CLDR field. +type month uint16 + +// cycleType specifies a property of a CLDR field. +type cycleType uint16 + +// relative specifies a property of a CLDR field. +type relative uint16 + +const ( + calendars = 0 // calendars + fields = 1 // fields + buddhist = 0 // buddhist + chinese = 1 // chinese + dangi = 2 // dangi + ethiopic = 3 // ethiopic + ethiopicAmeteAlem = 4 // ethiopic-amete-alem + generic = 5 // generic + gregorian = 6 // gregorian + hebrew = 7 // hebrew + islamic = 8 // islamic + islamicCivil = 9 // islamic-civil + islamicRgsa = 10 // islamic-rgsa + islamicTbla = 11 // islamic-tbla + islamicUmalqura = 12 // islamic-umalqura + persian = 13 // persian + months = 0 // months + eras = 1 // eras + filler = 2 // filler + cyclicNameSets = 3 // cyclicNameSets + format context = 0 // format + standAlone context = 1 // stand-alone + wAbbreviated width = 0 // wAbbreviated + wNarrow width = 1 // wNarrow + wWide width = 2 // wWide + leap7 month = 0 // leap7 + variant = 1 // variant + cycDayParts cycleType = 0 // cycDayParts + cycDays cycleType = 1 // cycDays + cycMonths cycleType = 2 // cycMonths + cycYears cycleType = 3 // cycYears + cycZodiacs cycleType = 4 // cycZodiacs + era = 0 // era + eraShort = 1 // era-short + eraNarrow = 2 // era-narrow + month = 3 // month + monthShort = 4 // month-short + monthNarrow = 5 // month-narrow + displayName = 0 // displayName + relative = 1 // relative + relativeTime = 2 // relativeTime + before1 relative = 0 // before1 + current relative = 1 // current + after1 relative = 2 // after1 + future = 0 // future + past = 1 // past + other = 0 // other + one = 1 // one + two = 2 // two +) + +var locales = []uint32{ // 775 elements + // Entry 0 - 1F + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 20 - 3F + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 40 - 5F + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 60 - 7F + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 80 - 9F + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x0000027a, 0x0000037f, + 0x0000037f, 0x0000037f, 0x0000037f, 0x0000027a, + 0x0000037f, 0x0000037f, 0x0000037f, 0x0000037f, + 0x0000027a, 0x0000037f, 0x0000037f, 0x0000037f, + 0x0000037f, 0x0000037f, 0x0000037f, 0x0000037f, + 0x0000037f, 0x0000037f, 0x0000037f, 0x0000037f, + 0x0000037f, 0x0000037f, 0x0000037f, 0x0000037f, + // Entry A0 - BF + 0x0000037f, 0x0000037f, 0x0000037f, 0x0000037f, + 0x0000037f, 0x000003dd, 0x0000037f, 0x0000037f, + 0x0000037f, 0x0000037f, 0x0000037f, 0x0000027a, + 0x0000037f, 0x0000037f, 0x0000037f, 0x0000037f, + 0x0000037f, 0x0000037f, 0x0000037f, 0x0000037f, + 0x0000037f, 0x0000037f, 0x0000037f, 0x0000037f, + 0x0000037f, 0x0000037f, 0x0000037f, 0x0000037f, + 0x0000037f, 0x0000027a, 0x0000037f, 0x0000027a, + // Entry C0 - DF + 0x0000037f, 0x0000037f, 0x0000037f, 0x0000037f, + 0x0000037f, 0x0000037f, 0x0000037f, 0x0000037f, + 0x0000037f, 0x0000037f, 0x0000037f, 0x0000037f, + 0x0000037f, 0x0000037f, 0x0000037f, 0x0000037f, + 0x0000027a, 0x0000037f, 0x0000037f, 0x0000037f, + 0x0000037f, 0x0000037f, 0x0000037f, 0x0000037f, + 0x0000037f, 0x0000037f, 0x0000037f, 0x0000037f, + 0x0000037f, 0x0000037f, 0x0000037f, 0x0000037f, + // Entry E0 - FF + 0x0000037f, 0x0000037f, 0x0000037f, 0x0000037f, + 0x0000037f, 0x0000027a, 0x0000027a, 0x0000037f, + 0x0000037f, 0x0000027a, 0x0000037f, 0x0000037f, + 0x0000037f, 0x0000037f, 0x0000037f, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 100 - 11F + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 120 - 13F + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 140 - 15F + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 160 - 17F + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 180 - 19F + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 1A0 - 1BF + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 1C0 - 1DF + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 1E0 - 1FF + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 200 - 21F + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 220 - 23F + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 240 - 25F + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 260 - 27F + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 280 - 29F + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 2A0 - 2BF + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 2C0 - 2DF + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 2E0 - 2FF + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + // Entry 300 - 31F + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x0000027a, +} // Size: xxxx bytes + +var indices = []uint16{ // 1070 elements + // Entry 0 - 3F + 0x0002, 0x0003, 0x0259, 0x000e, 0x0012, 0x0022, 0x00b9, 0x00c1, + 0x00fd, 0x010d, 0x0147, 0x0181, 0x01bc, 0x0204, 0x020b, 0x0212, + 0x0219, 0x0220, 0x0003, 0x9005, 0x0016, 0x001f, 0x0003, 0x001a, + 0x8000, 0x8000, 0x0001, 0x001c, 0x0001, 0x0000, 0x0000, 0x0001, + 0x0000, 0x0003, 0x0004, 0x0027, 0x0000, 0x00b6, 0x0050, 0x0002, + 0x002a, 0x003d, 0x0003, 0x8002, 0x9001, 0x002e, 0x000d, 0x0000, + 0xffff, 0x0102, 0x0111, 0x0120, 0x012f, 0x013e, 0x014d, 0x015c, + 0x016b, 0x017a, 0x0189, 0x0198, 0x01a7, 0x0003, 0x9000, 0x0041, + // Entry 40 - 7F + 0x9000, 0x000d, 0x0000, 0xffff, 0x01b6, 0x01c6, 0x01d6, 0x01e6, + 0x01f6, 0x0206, 0x0216, 0x0226, 0x0236, 0x0246, 0x0257, 0x0268, + 0x0005, 0x0056, 0x8003, 0x8003, 0x006b, 0x00b0, 0x0001, 0x0058, + 0x0003, 0x005c, 0x8000, 0x8000, 0x000d, 0x0000, 0xffff, 0x0279, + 0x0281, 0x0289, 0x0291, 0x0299, 0x02a1, 0x02a9, 0x02b1, 0x02b9, + 0x02c1, 0x02ca, 0x02d3, 0x0001, 0x006d, 0x0003, 0x0071, 0x8000, + 0x8000, 0x003d, 0x0000, 0xffff, 0x02dc, 0x02e2, 0x02e8, 0x02ee, + 0x02f4, 0x02fa, 0x0300, 0x0306, 0x030c, 0x0312, 0x0319, 0x0320, + // Entry 80 - BF + 0x0327, 0x032e, 0x0335, 0x033c, 0x0343, 0x034a, 0x0351, 0x0358, + 0x035f, 0x0366, 0x036d, 0x0374, 0x037b, 0x0382, 0x0389, 0x0390, + 0x0397, 0x039e, 0x03a5, 0x03ac, 0x03b3, 0x03ba, 0x03c1, 0x03c8, + 0x03cf, 0x03d6, 0x03dd, 0x03e4, 0x03eb, 0x03f2, 0x03f9, 0x0400, + 0x0407, 0x040e, 0x0415, 0x041c, 0x0423, 0x042a, 0x0431, 0x0438, + 0x043f, 0x0446, 0x044d, 0x0454, 0x045b, 0x0462, 0x0469, 0x0470, + 0x0001, 0x00b2, 0x0003, 0xa000, 0x8000, 0x8000, 0x0001, 0x0000, + 0x0477, 0x0004, 0x9001, 0x0000, 0x00be, 0x9001, 0x0001, 0x0000, + // Entry C0 - FF + 0x0576, 0x0003, 0x00c5, 0x00f0, 0x00fa, 0x0002, 0x00c8, 0x00dc, + 0x0003, 0x8002, 0x9001, 0x00cc, 0x000e, 0x0000, 0xffff, 0x0675, + 0x067e, 0x0685, 0x068b, 0x0692, 0x0696, 0x069e, 0x06a6, 0x06ad, + 0x06b4, 0x06b9, 0x06bf, 0x06c7, 0x0003, 0x9000, 0x00e0, 0x9000, + 0x000e, 0x0000, 0xffff, 0x06cf, 0x06d1, 0x06d3, 0x06d5, 0x06d7, + 0x06d9, 0x06db, 0x06dd, 0x06df, 0x06e1, 0x06e4, 0x06e7, 0x06ea, + 0x0003, 0x00f4, 0x8000, 0x8000, 0x0001, 0x00f6, 0x0002, 0x0000, + 0x06ed, 0x06f2, 0x0001, 0x0000, 0x06f7, 0x0003, 0x9003, 0x0101, + // Entry 100 - 13F + 0x010a, 0x0003, 0x0105, 0x8000, 0x8000, 0x0001, 0x0107, 0x0001, + 0x0000, 0x06ed, 0x0001, 0x0000, 0x07f6, 0x0003, 0x0111, 0x013a, + 0x0144, 0x0002, 0x0114, 0x0127, 0x0003, 0x8002, 0x9001, 0x0118, + 0x000d, 0x0000, 0xffff, 0x08f5, 0x0900, 0x090b, 0x0916, 0x0921, + 0x092c, 0x0937, 0x0942, 0x094d, 0x0958, 0x0963, 0x096e, 0x0003, + 0x9000, 0x012b, 0x9000, 0x000d, 0x0000, 0xffff, 0x0979, 0x0985, + 0x0991, 0x099d, 0x09a9, 0x09b5, 0x09c1, 0x09cd, 0x09d9, 0x09e5, + 0x09f2, 0x09ff, 0x0003, 0x013e, 0x8000, 0x8000, 0x0001, 0x0140, + // Entry 140 - 17F + 0x0002, 0x0000, 0x06ed, 0x06f2, 0x0001, 0x0000, 0x0a0c, 0x0003, + 0x014b, 0x0174, 0x017e, 0x0002, 0x014e, 0x0161, 0x0003, 0x8002, + 0x9001, 0x0152, 0x000d, 0x0000, 0xffff, 0x0b0b, 0x0b17, 0x0b23, + 0x0b2f, 0x0b3b, 0x0b47, 0x0b53, 0x0b5f, 0x0b6b, 0x0b77, 0x0b83, + 0x0b8f, 0x0003, 0x9000, 0x0165, 0x9000, 0x000d, 0x0000, 0xffff, + 0x0b9b, 0x0ba8, 0x0bb5, 0x0bc2, 0x0bcf, 0x0bdc, 0x0be9, 0x0bf6, + 0x0c03, 0x0c10, 0x0c1e, 0x0c2c, 0x0003, 0x0178, 0x8000, 0x8000, + 0x0001, 0x017a, 0x0002, 0x0000, 0x0c3a, 0x0c3e, 0x0001, 0x0000, + // Entry 180 - 1BF + 0x0c41, 0x0003, 0x0185, 0x01b0, 0x01b9, 0x0002, 0x0188, 0x019c, + 0x0003, 0x8002, 0x9001, 0x018c, 0x000e, 0x0000, 0x0d6f, 0x0d40, + 0x0d47, 0x0d4f, 0x0d56, 0x0d5c, 0x0d63, 0x0d6a, 0x0d77, 0x0d7d, + 0x0d82, 0x0d88, 0x0d8e, 0x0d91, 0x0003, 0x9000, 0x01a0, 0x9000, + 0x000e, 0x0000, 0x06db, 0x06cf, 0x06d1, 0x06d3, 0x06d5, 0x06d7, + 0x06d9, 0x06db, 0x06dd, 0x06df, 0x06e1, 0x06e4, 0x06e7, 0x06ea, + 0x0003, 0x01b4, 0x8000, 0x8000, 0x0001, 0x01b6, 0x0001, 0x0000, + 0x0d96, 0x0001, 0x0000, 0x0d99, 0x0003, 0x01c0, 0x01f8, 0x0201, + // Entry 1C0 - 1FF + 0x0002, 0x01c3, 0x01e5, 0x0003, 0x01c7, 0x9001, 0x01d6, 0x000d, + 0x0000, 0xffff, 0x0e98, 0x0ea1, 0x0eaa, 0x0eb3, 0x0ebc, 0x0ec5, + 0x0ece, 0x0ed7, 0x0ee0, 0x0ee9, 0x0ef3, 0x0efd, 0x000d, 0x0000, + 0xffff, 0x0f07, 0x0f10, 0x0f19, 0x0f22, 0x0f2b, 0x0f34, 0x0f3d, + 0x0f46, 0x0f4f, 0x0f58, 0x0f62, 0x0f6c, 0x0003, 0x9000, 0x01e9, + 0x9000, 0x000d, 0x0000, 0xffff, 0x06cf, 0x06d1, 0x06d3, 0x06d5, + 0x06d7, 0x06d9, 0x06db, 0x06dd, 0x06df, 0x06e1, 0x06e4, 0x06e7, + 0x0003, 0x01fc, 0x8000, 0x8000, 0x0001, 0x01fe, 0x0001, 0x0000, + // Entry 200 - 23F + 0x0f76, 0x0001, 0x0000, 0x0f79, 0x0003, 0x9008, 0x9008, 0x0208, + 0x0001, 0x0000, 0x1078, 0x0003, 0x9008, 0x9008, 0x020f, 0x0001, + 0x0000, 0x1177, 0x0003, 0x9008, 0x0000, 0x0216, 0x0001, 0x0000, + 0x1276, 0x0003, 0x9008, 0x0000, 0x021d, 0x0001, 0x0000, 0x1375, + 0x0003, 0x0224, 0x024d, 0x0256, 0x0002, 0x0227, 0x023a, 0x0003, + 0x8002, 0x9001, 0x022b, 0x000d, 0x0000, 0xffff, 0x1474, 0x147e, + 0x148a, 0x1492, 0x1496, 0x149d, 0x14a7, 0x14ac, 0x14b1, 0x14b6, + 0x14ba, 0x14c1, 0x0003, 0x9000, 0x023e, 0x9000, 0x000d, 0x0000, + // Entry 240 - 27F + 0xffff, 0x06cf, 0x06d1, 0x06d3, 0x06d5, 0x06d7, 0x06d9, 0x06db, + 0x06dd, 0x06df, 0x06e1, 0x06e4, 0x06e7, 0x0003, 0x0251, 0x8000, + 0x8000, 0x0001, 0x0253, 0x0001, 0x0000, 0x14c8, 0x0001, 0x0000, + 0x14cb, 0x0006, 0x0260, 0x8000, 0x8001, 0x0265, 0x8003, 0x8004, + 0x0001, 0x0262, 0x0001, 0x0000, 0x15ca, 0x0003, 0x0269, 0x026c, + 0x0271, 0x0001, 0x0000, 0x15ce, 0x0003, 0x0000, 0x15d4, 0x15df, + 0x15ea, 0x0002, 0x0274, 0x0277, 0x0001, 0x0000, 0x15f5, 0x0001, + 0x0000, 0x15fc, 0x0002, 0x0003, 0x00cc, 0x0009, 0x000d, 0x001b, + // Entry 280 - 2BF + 0x0000, 0x0000, 0x0000, 0x0060, 0x0067, 0x00b0, 0x00be, 0x0003, + 0x0000, 0x0011, 0x0018, 0x0001, 0x0013, 0x0001, 0x0015, 0x0001, + 0x0000, 0x0000, 0x0001, 0x0000, 0x1603, 0x0004, 0x0020, 0x0000, + 0x005d, 0x0044, 0x0001, 0x0022, 0x0003, 0x0026, 0x0000, 0x0035, + 0x000d, 0x0000, 0xffff, 0x1702, 0x1706, 0x170a, 0x170e, 0x1712, + 0x1716, 0x171a, 0x171e, 0x1722, 0x1726, 0x172b, 0x1730, 0x000d, + 0x0000, 0xffff, 0x1735, 0x1741, 0x174e, 0x175a, 0x1767, 0x1773, + 0x177f, 0x178d, 0x179a, 0x17a6, 0x17b2, 0x17c1, 0x0005, 0x0000, + // Entry 2C0 - 2FF + 0x0000, 0x0000, 0x0000, 0x004a, 0x0001, 0x004c, 0x0001, 0x004e, + 0x000d, 0x0000, 0xffff, 0x17cf, 0x17d3, 0x17d6, 0x17dc, 0x17e3, + 0x17ea, 0x17f0, 0x17f6, 0x17fb, 0x1802, 0x180a, 0x180e, 0x0001, + 0x0000, 0x1812, 0x0003, 0x0000, 0x0000, 0x0064, 0x0001, 0x0000, + 0x1911, 0x0003, 0x006b, 0x0093, 0x00ad, 0x0002, 0x006e, 0x0081, + 0x0003, 0x0000, 0x0000, 0x0072, 0x000d, 0x0000, 0xffff, 0x1a10, + 0x1a19, 0x1a22, 0x1a2b, 0x1a34, 0x1a3d, 0x1a46, 0x1a4f, 0x1a58, + 0x1a61, 0x1a6b, 0x1a75, 0x0002, 0x0000, 0x0084, 0x000d, 0x0000, + // Entry 300 - 33F + 0xffff, 0x1a7f, 0x1a8a, 0x1a95, 0x1aa0, 0x1aab, 0x1ab6, 0xffff, + 0x1ac1, 0x1acc, 0x1ad7, 0x1ae3, 0x1aef, 0x0003, 0x00a2, 0x0000, + 0x0097, 0x0002, 0x009a, 0x009e, 0x0002, 0x0000, 0x1afb, 0x1b1b, + 0x0002, 0x0000, 0x1b09, 0x1b27, 0x0002, 0x00a5, 0x00a9, 0x0002, + 0x0000, 0x1b32, 0x1b35, 0x0002, 0x0000, 0x0c3a, 0x0c3e, 0x0001, + 0x0000, 0x1b38, 0x0003, 0x0000, 0x00b4, 0x00bb, 0x0001, 0x00b6, + 0x0001, 0x00b8, 0x0001, 0x0000, 0x0d96, 0x0001, 0x0000, 0x1c37, + 0x0003, 0x0000, 0x00c2, 0x00c9, 0x0001, 0x00c4, 0x0001, 0x00c6, + // Entry 340 - 37F + 0x0001, 0x0000, 0x0f76, 0x0001, 0x0000, 0x1d36, 0x0005, 0x00d2, + 0x0000, 0x0000, 0x00d7, 0x00ee, 0x0001, 0x00d4, 0x0001, 0x0000, + 0x1e35, 0x0003, 0x00db, 0x00de, 0x00e3, 0x0001, 0x0000, 0x1e39, + 0x0003, 0x0000, 0x15d4, 0x15df, 0x15ea, 0x0002, 0x00e6, 0x00ea, + 0x0002, 0x0000, 0x1e49, 0x1e3f, 0x0002, 0x0000, 0x1e60, 0x1e55, + 0x0003, 0x00f2, 0x00f5, 0x00fa, 0x0001, 0x0000, 0x1e6d, 0x0003, + 0x0000, 0x1e71, 0x1e7a, 0x1e83, 0x0002, 0x00fd, 0x0101, 0x0002, + 0x0000, 0x1e9b, 0x1e8c, 0x0002, 0x0000, 0x1ebc, 0x1eac, 0x0002, + // Entry 380 - 3BF + 0x0003, 0x0033, 0x0007, 0x0000, 0x000b, 0x0000, 0x0000, 0x0000, + 0x0025, 0x002c, 0x0003, 0x000f, 0x0000, 0x0022, 0x0001, 0x0011, + 0x0001, 0x0013, 0x000d, 0x0000, 0xffff, 0x1ece, 0x1ed9, 0x1ee4, + 0x1eef, 0x1efa, 0x1f05, 0x1f10, 0x1f1b, 0x1f26, 0x1f31, 0x1f3d, + 0x1f49, 0x0001, 0x0001, 0x0000, 0x0003, 0x0000, 0x0000, 0x0029, + 0x0001, 0x0001, 0x00ff, 0x0003, 0x0000, 0x0000, 0x0030, 0x0001, + 0x0001, 0x01fe, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x003a, + 0x004b, 0x0003, 0x003e, 0x0000, 0x0041, 0x0001, 0x0001, 0x02fd, + // Entry 3C0 - 3FF + 0x0002, 0x0044, 0x0048, 0x0002, 0x0001, 0x0310, 0x0300, 0x0001, + 0x0001, 0x0322, 0x0003, 0x004f, 0x0000, 0x0052, 0x0001, 0x0001, + 0x02fd, 0x0002, 0x0055, 0x005a, 0x0003, 0x0001, 0x0357, 0x0335, + 0x0346, 0x0002, 0x0001, 0x037c, 0x036a, 0x0001, 0x0002, 0x0009, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0000, + 0x004a, 0x0003, 0x0010, 0x0000, 0x0047, 0x0002, 0x0013, 0x0035, + 0x0003, 0x0017, 0x0000, 0x0026, 0x000d, 0x0001, 0xffff, 0x0390, + 0x0399, 0x03a2, 0x03ab, 0x03b4, 0x03bd, 0x03c6, 0x03cf, 0x03d8, + // Entry 400 - 43F + 0x03e1, 0x03eb, 0x03f5, 0x000d, 0x0001, 0xffff, 0x03ff, 0x0408, + 0x0411, 0x041a, 0x0423, 0x042c, 0x0435, 0x043e, 0x0447, 0x0450, + 0x045a, 0x0464, 0x0002, 0x0000, 0x0038, 0x000d, 0x0001, 0xffff, + 0x046e, 0x0479, 0x0484, 0xffff, 0x048f, 0x049a, 0xffff, 0x04a5, + 0x04b0, 0x04bb, 0x04c7, 0x04d3, 0x0001, 0x0001, 0x04df, 0x0003, + 0x0000, 0x0000, 0x004e, 0x0001, 0x0001, 0x05de, +} // Size: xxxx bytes + +var buckets = []string{ + bucket0, + bucket1, +} + +var bucket0 string = "" + // Size: xxxx bytes + "\x02BE\xfe\x01\x94\xfd\xc2\xfa/\xfc\xc0A\xd3\xff\x12\x04[s\xc8nO\xf9_" + + "\xf6b\xa5\xee\xe8*\xbd\xf4J-\x0bu\xfb\x18\x0d\xafH\xa7\x9e\xe0\xb1\x0d9F" + + "Q\x85\x0fԡx\x89.\xe2\x85\xec\xe1Q\x14Ux\x08u\xd6N\xe2\xd3\xd0\xd0\xdek" + + "\xf8\xf9\xb4L\xe8_\xf0DƱ\xf8;\x8e\x88;\xbf\x85z\xab\x99ŲR\xc7B\x9c2" + + "\U000e8bb7\x9e\xf8V\xf6Y\xc1\x8f\x0d\xce\xccw\xc7^z\x81\xbf\xde'_g\xcf" + + "\xe2B\xcf<\xc3T\xf3\xed\xe2־\xccN\xa3\xae^\x88Rj\x9fJW\x8b˞\xf2ԦS\x14v" + + "\x8dm)\x97a\xea\x9eOZ\xa6\xae\xc3\xfcxƪ\xe0\x81\xac\x81 \xc7 \xef\xcdlꄶ" + + "\x92^`{\xe0cqo\x96\xdd\xcd\xd0\x1du\x04\\?\x00\x0f\x8ayk\xcelQ,8\x01\xaa" + + "\xca\xee߭[Pfd\xe8\xc0\xe4\xa7q\xecื\xc1\x96]\x91\x81%\x1b|\x9c\x9c\xa5 Z" + + "\xfc\x16\xa26\xa2\xef\xcd\xd2\xd1-*y\xd0\x0echineseWideM01\x0echineseWid" + + "eM02\x0echineseWideM03\x0echineseWideM04\x0echineseWideM05\x0echineseWid" + + "eM06\x0echineseWideM07\x0echineseWideM08\x0echineseWideM09\x0echineseWid" + + "eM10\x0echineseWideM11\x0echineseWideM12\x0fchineseNarrowM1\x0fchineseNa" + + "rrowM2\x0fchineseNarrowM3\x0fchineseNarrowM4\x0fchineseNarrowM5\x0fchine" + + "seNarrowM6\x0fchineseNarrowM7\x0fchineseNarrowM8\x0fchineseNarrowM9\x10c" + + "hineseNarrowM10\x10chineseNarrowM11\x10chineseNarrowM12\x07dpAbbr1\x07dp" + + "Abbr2\x07dpAbbr3\x07dpAbbr4\x07dpAbbr5\x07dpAbbr6\x07dpAbbr7\x07dpAbbr8" + + "\x07dpAbbr9\x08dpAbbr10\x08dpAbbr11\x08dpAbbr12\x05year1\x05year2\x05yea" + + "r3\x05year4\x05year5\x05year6\x05year7\x05year8\x05year9\x06year10\x06ye" + + "ar11\x06year12\x06year13\x06year14\x06year15\x06year16\x06year17\x06year" + + "18\x06year19\x06year20\x06year21\x06year22\x06year23\x06year24\x06year25" + + "\x06year26\x06year27\x06year28\x06year29\x06year30\x06year31\x06year32" + + "\x06year33\x06year34\x06year35\x06year36\x06year37\x06year38\x06year39" + + "\x06year40\x06year41\x06year42\x06year43\x06year44\x06year45\x06year46" + + "\x06year47\x06year48\x06year49\x06year50\x06year51\x06year52\x06year53" + + "\x06year54\x06year55\x06year56\x06year57\x06year58\x06year59\x06year60" + + "\xfet\xa8(\x0a\xe9C\x9e\xb0֮\xca\x08#\xae\x02\xd6}\x86j\xc2\xc4\xfeJrPS" + + "\xda\x11\x9b\x9dOQQ@\xa2\xd7#\x9c@\xb4ZÕ\x0d\x94\x1f\xc4\xfe\x1c\x0c\xb9" + + "j\xd3\x22\xd6\x22\x82)_\xbf\xe1\x1e&\xa43\x07m\xb5\xc1DL:4\xd3*\\J\x7f" + + "\xfb\xe8с\xf7\xed;\x8c\xfe\x90O\x93\xf8\xf0m)\xbc\xd9\xed\x84{\x18.\x04d" + + "\x10\xf4Kİ\xf3\xf0:\x0d\x06\x82\x0a0\xf2W\xf8\x11A0g\x8a\xc0E\x86\xc1" + + "\xe3\xc94,\x8b\x80U\xc4f؆D\x1d%\x99\x06͉֚K\x96\x8a\xe9\xf0띖\\\xe6\xa4i\x86Nm\xac" + + "\x1a\xac\xb8\x87\xbd\x03\x01裑:\xact%\xd2٦\xf6\xee+T\x93\xac\xb09\xac(E" + + "\xeb\x0e\xfa.\xdd\x0a<\xf9k\xa9z\xd7\x1d\xae\x00U`\xab\xa2\xa2\x00z\x0f" + + "\xa0Hc\xcbiF\x9f\x94\xa3n\x89\x1e9\xad\xcb̛^4\xca(\x13\xd1\xd7CZ\xc8\xfc" + + "\xacv\xa8\x96T<}\xcdn\xd0F\x01\x1f3\x0b\xcc\xe8H\x0d4&\x8eg$\x02q\xe3M" + + "\xd9\x13\xd5\xfd\xe1d\xa1\xe0\x14\xc9\x17ދ\xd4q\xb8\xe7\x0bww\x0b\x05h" + + "\x022k8?n:\x11^\xc9\\\xb3\x01\xc7y2\x1d9\x1a\x140\xdaR\x8d,\xfe\xf0;po" + + "\x9d\x12T\x96\x90\x9b\xa8\xeex\x04\xc1\x98L,C\xb6\x89\xb53\xddƇVZ\xf5i" + + "\xfcg7\x9e\xac\xb2F9\xeczw*\x17N Y\x8fg\xbc\xb5\xebfn\xef\xcd\xe0ʇ'\xad" + + "\xfa\xb2WB\x8a\x8f2\xa8˄l\xff\xe5:-\xe15\xb4\xfe/\x0di^+\xc6\xe7\x07\xc0" + + "\xafi\x17\x88\x10\xcay\xf4.x@!LxF\x06\xab\x9b_!\xf3N\x9d\xae\x83Z?\xa8" + + "\x01\xf0{錒'>\xc6D\x7fW\xe7\x89\x18r_/X\xfd\x9d\x04\x07\x14L\xce*^}kz\xae" + + "\x1b\x9cPg\x89\x0e\x05toS\xf5g\xd4VlA\xdb\xc1:\x092\x88\xf5\xd0\xe6\x00" + + "\x1dp\x90m\x80x\x9ek:\xf6e\xa9\x12\xb8\xfb\xbfx\xf6\x86\x1dm\xb48g\x97#" + + "\xf3\xf1\xc5s\x1e\xfeh\xce\x19Cӽ\x8b\xe3\x08\xac\xd4D0\xf6}\xfbj\xfd\xf5" + + "\x22{\x8f\xf1\x0d\x87\xcf~\xeb\x0e\xbc\x03\x1d\xf9\x1c\xbcE\xad\xc6gz" + + "\x971\x11+j\xe9\x85\xe0\xfe\xc5FУ\x8d\xe1=~p\x9e1(\x89\x89\xc7l\xbd\x90" + + "\xd2h\xb35\xf0\xd2A\xf7o@KT}\xc4^=`\xe4\xa1\\\x00nNK\x86&j`\x95)\x88\xf6" + + "\xb1O\xde\x11\x92\x9e\xe5\x9b S\xcfV\x04\xdf\x09hf4\xf26\xac\x14\x16&d" + + "\x0b\xe0\x9dL\xf9\xa7\xb6\xc90'\x95j\xef\xef[b\x9e̺u\x97\xb2o\xe2\x8e" + + "\xc0\xae\xa3\xf42\xd5&\x02:\xb1b\x89\x00\xd6Y\xe0IE\x16F\xba\xfb\xbcm" + + "\x14s\x84\x91\x08\xf9\xa3\xd4:\x8b\x0f\xb7&_o\x0d\xd4X\x7fX\x90\x1b\xb4" + + "\xa3^<\\\xc8X\x1f\xb8+\x1b\xa1J\xaf\x11\xaaL8C\xb3l\xa9\x13\xa7\xb8h7" + + "\x97\xed\xa5\xb6\x90\x14~o\xe5}o\x8f\x05\xbd%.\xc2\xe1\xcf(\x1dO\x89u" + + "\xdc\xff!\xaf\xe4\x11\x99\x97yj\x88?\xb1\x1eY\xe40\\I8\x22h\xe8\xbda\xe4" + + "\x19\xf2m\x15nޕ\x98>d\xf3y*X&\xa2\xfe:r\x15\x22\xa4\xb16\x0dyw\x09\x98" + + "\x9d,\xfe\x93\x98 {\xb1u\xf0\x1e\x8b\xea2\xa8\xfc\xe3\xc1\xf0b\x9f\xe6" + + "\x08\xf9\xe8\xf1OÒ\x18r\x0cK\xb1\x88\x82\xa4܈\x95\x0b\x99a\x89\xa9&\xfb" + + "\xd6p\x814\xbf\x96\xfe\x0c\xce\x12mhI\x8f\xbf\x9f2B\xaa\x8a1|\xe3\xb4" + + "\xf5\xfdD\x0fl\x10\x8d㕄\xab\xa34Dž\xf8\x8d\x16\xd46\x1f\x04m1߭\xe7MA\x93" + + "\xd1G\xeeǐ\xd2[2$\x09\xcbA\xdb\x0dVd\xc7\x05\xb1W\xf88%)%\xa0#\xaa\xd5" + + "\xe7+:Ly+\x0a\xa7Ytئ\xc4jj\xd1x\x22\xd5\x14\x94\xebYHc\xd6&\xfb.\xfab" + + "\x0e\xa4=\xd14X\x22m\x22.\x22\xb4E\x9f\xef\x7f\xff7\xebP\xb6\xcf\xe4\xa7" + + "{վ\xa6\xfe\xc6\xe5\xf4\x02\x10\xf3\x9dØMI`\xce\xe8*\xd0\x0ac=\xe0um\x13w" + + "\xfd*\xa4\x11\xf7_$\xbfb\xf57>\x91\\J%`\x12\x10\x91\x02}\x06#\xb5\xcb%" + + "\x1d=,\x01\x95\xc0\xb1\x8b*\xdb\x10۸\x17\xc8\xe3\xfeo\xb0\xdeZ\xb1\x8e" + + "\xad\x0e\u0557!s\xb8M`\xa2u\xee>o\\\x0c*d\x81\xe7zf`\xce\xf5\x84\x11\x05" + + "\x1d\xfdů\x89\xc1\xa0\x14k\x05\x9a\x08\x9c\xbe\x0c\xa3\xc3s\x83_h\x85" + + "\xeb\x0a\xf6\u0090\xac\x1e\xf4A\x02\xe2\x8c^\xb0sS\x08\xcf_|\xee۱\xcaji." + + "4ň\xb5\x96w\x91A~\xfc\xe1:$^\x92\xd3p\xbf\xe7_\x0b\xb8]Z\x85\xbbF\x95x" + + "\xbe\x83D\x14\x01R\x18\x15R\xa2\xf0\xb0\x0b\xe3\x9d\xc9J kU\x00\x04\x97R" + + "o\xae\xd4ct\xb7\x8aeX\xe5$\xe8\x10\x0f\x1eTV\xfe\xa9vAU\xedw\x06~`\xd6" + + "\xc2\xefhƹ>\xd1k\x0f9(\x9c6\xa3-<ù\xde\x0dп]\x92-\x02\xd9i\xc7Oܭ\x82\x0c" + + "\x992\x9c6K\xec\xb6kI\xd6\xecZ+j\xff\x92\xd4?pVP\xa9\xe1\x03g\xb4\xb1" + + "\xf6d\x85!XqTu\xd1\xe5w~\xec\x91u\xe1\xcau\x99^!\x12\xf7N\x17\xac\xfa" + + "\xeb\x1e\x09Farvardin\x0bOrdibehesht\x07Khordad\x03Tir\x06Mordad\x09Shah" + + "rivar\x04Mehr\x04Aban\x04Azar\x03Dey\x06Bahman\x06Esfand\x02AP\xfeo4E" + + "\xf1\xca6\xd8\xc0>\xf0x\x90Գ\x09\xfe\xf7\x01\xaf\xd1Y7x\x89\x0e\xe4/\xb9" + + "\x8f{@\xdb@\xa1~\xf4\x83T\xc9D\xb5\xb1;\x1fe\xe2F\x8a|P\xe0\xf2\xb9\xdc." + + "9\xf2\x88\x17\xb5\xf8\xb6(\xb1\xa34\x94\xd6\xcd1\xa9_&\xdbñҎ\x01\xf0\xce" + + "yX\xd5\xffY\xe9*sBR\xb4\xa7\x92uh\xd14gn H\xab\x09\x86*\x11\x91j\xb5\xb1" + + "\x00\x95\x93f?\x17\xdc\x03\x06\xc1\xb1\xe8n\x1d\xf7\xdaw\xdat\xa5%\xaa:b" + + "'\x81\x977B;M=\x1c\xeb\x8a\xfa\xac\xcf\xf5f\x0c;+\x98\xb0ꅴ\xf37L\xa5\x93" + + "(\x08sG\x06\xf8\xbe\x0d\xfd\x1f\x18\x87\x12ݷ\x0d\x05\xe1w\xb3t\xb4e ka" + + "\x8dD\xa4-\xeaP\u05f7\x8d\xcbU2`WV\xf1\xc3G\xfd\x95Y;\x22\x8f\x8a\x0c;" + + "\xcdp֙\xf7.1o\xd2\u0590\xa1\xe7cla\xfcJ\x99\xbd>\xc73]r\x8eCk!\x95Jo\xd5" + + "\xe7W\xd1\xc3\x03Era\x05Month\x0alast month\x0athis month\x0anext month" + + "\x06+{0} m\x06-{0} m\xfeQHs\xc6\xd4tx*\xf5b\xe27\xdaT\xee\x1a\xb1\x84" + + "\x14\xb1\xd2E\x95R=\x9d\x00u\xe5u\x7fT\xd5\x14\xe0\xdf\xd5\x18\xe5q\x8e" + + "\xb4\x15S\x0c\x94\u05ff\xd3.vE\xacn\x99\xb1\xf9(ƃ\xcc\xef\xeej32y\xc0" + + "\xc1\x03X\xf4\x02\xc2\x084\x9b\xa3;\xaf\xb0X1æ\xe68\x8f\xa9E8=U\xefӐB4" + + "\xff\xc4O\xc9R\xab\xafN\x05H\xc9\x1d\xa2\x15U\x80\x9c\xd0\xc8\x1ay\xbb*r" + + "f\x9cW\x16^\xa4\xaf_/\xbc\xf2\xe7\xf68\xcf\xdc\xd8q\xcaRE\x00Yp06\x9a" + + "\xc90\xa3\x08\xce\x19Y\xff\x22H\x83\xbf\x00`\x94\x06r\x85\x965\xc9\x0d^J" + + "{Ks,\xe3o\xed(\x1f$\x10ݱ\x9a\xbf{J^3\xf5_\x9a\x1d\xb6\xd4m\x1a2P\xafR`" + + "\xbeTB+\xb9\x1b<\x08&\xa8\x8a\x18\xf8\x8cy\xc0\xcb\xed\xf1@}\x0b\xbf\xac" + + "H\x048\xf9\x0co\x92\xfa!$\x9b6\xabnY\xc05\x0cݷ\xf3\xa5\x0dE\x97\x03Mo1" + + "\x03Mo2\x03Mo3\x03Mo4\x03Mo5\x03Mo6\x03Mo7\x03Mo8\x03Mo9\x04Mo10\x04Mo11" + + "\x04Mo12\x0bFirst Month\x0cSecond Month\x0bThird Month\x0cFourth Month" + + "\x0bFifth Month\x0bSixth Month\x0dSeventh Month\x0cEighth Month\x0bNinth" + + " Month\x0bTenth Month\x0eEleventh Month\x0dTwelfth Month\x03Rat\x02Ox" + + "\x05Tiger\x06Rabbit\x06Dragon\x05Snake\x05Horse\x04Goat\x06Monkey\x07Roo" + + "ster\x03Dog\x03Pig\xfeѝ\xe0T\xfc\x12\xac\xf3cD\xd0<\xe5Wu\xa5\xc45\x0b" + + "\x9al\x9f?ium\xfc\x96\xb4\xf4\x7f\xfb\xc6\xf1\xff\x9e\x22\xe2\xc9m\x8f" + + "\xd25rg\x87L\x15Y\x10\x80\xd2t\xb5\xe5\x90\x08xH7\xfa\xdb\x02\xf70\x1fИJ" + + "\x88G\x99\xd6\x1a\x83\xb8\xbdz<\xf1\xc9t\U000953c1\xa5N\xa8\x0e\xbe\x05." + + "n\x87R\xf1\xbf\xc8>m%O?@4\xd4\xe8\xf1\x04Y\xb1_\x11\x1b\xb3\x17\xc8R\xed" + + "EHn\xa5\xf7>\xaf9:1?\x9eG\x0cg\xd0M \xbc\xcf+)\x86A\xd2qo\xbd\x18\x12N" + + "\xe4`:\x8fk|?\x8d/\x90\x8c\xe7d\xe4\x08\x9e\x8dO\x15L\x92@\xa5w}F\x7f" + + "\x84r7u\x10\x12/AΞ\xc0\xf9\x89\xb57\x1ct\xbe\x9e&\x9e\xfba\x85;\u05cb" + + "\xc2S\xc0\x97\xe3\x81]\xedg\xf6\xf6t\xd2\xfc\x1ezM\xf0\x08\x87\xeb\x12" + + "\x8f\xffd\x8a>\x09\xa5\xaa\x9ag&?\x0d\xadV\x93x!Xi{\x99\x04\xf4A r\xfeho" + + "\xd1\xffQ\x8f\xd4\xc1\xe1\x83i\x88\x9a\xfe\xfc<\x14\xd3G\x10\x94GA|\x17M" + + "2\x13\x22W@\x07\x8c-F\x81A\xe1\xb4y$S\xf18\x87v)\x07\x9b\x13R\x02\xf7<" + + "\x86\x1eD,3\xf6\xc9̳\xc3\xc3)HYX\xfbmI\x86\x93^\xe5\xa9\xe9\x12!\x82Y" + + "\xcf}a*-y\xf3\x1e6&\x91N\xe2\xec\x14\x95\x16,\x80\x1e=[E\x80\xca\xc9]." + + "\xed\x0fH:X\xd1lN}\x1d\xe0\xf1\xba'\xd6\x04\xf6u\x06\xc2\xdf\xd1g\x032" + + "\xabp55Yu'\xef\x1e>\x7f\x07\x92\xa7\x0eg\x12\xbb\xdaX\xe0p\x9c;\xd82." + + "\xa4\xc9w\xfa!\xfb\x9eD\xdd\xe7\xb7\xe2\xfa\xb9\xd8ٽ\xf4mB\x9a\xa1\xafo" + + "\x83ˣŷ#m<\x86WU\x8e\xea\xa5p:\xd4e_ܜ\xd2\xcf\x1e\u07fb$W\x96i\xa0\xc1" + + "\x00\x15o\xf8\x10\xb6h\xc2ײ:\x80\xfdO\xf5\xed\xf0\xcf4\x8d!L\x03Dc\xf2&" + + "\x8c\xcf\x15\xf6\xe3\xc3L\xbak\x08enWideM1\x08enWideM2\x08enWideM3\x08en" + + "WideM4\x08enWideM5\x08enWideM6\x08enWideM7\x08enWideM8\x08enWideM9\x09en" + + "WideM10\x09enWideM11\x09enWideM12\x0aenNarrowM1\x0aenNarrowM2\x0aenNarro" + + "wM3\x0aenNarrowM4\x0aenNarrowM5\x0aenNarrowM6\x0aenNarrowM8\x0aenNarrowM" + + "9\x0benNarrowM10\x0benNarrowM11\x0benNarrowM12\x0dBefore Christ\x11Befor" + + "e Common Era\x0bAnno Domini\x0aCommon Era\x02BC\x02AD\xfe\xfe\x1f8{\x91g" + + "\xb7\xd7\xcd\xde#Xk\xe6\x85\xd8Ì\x8e\xf7g\xf0\x10\xd02\xbdJN\x8f\xf8\x15" + + "A\xad\xfd\xcae\xac\xb6\xf7\xe1$9\xb9\xa2 \xb5\x8a\xf1f\x1d/N\xd0\xff\xb2" + + "_\xaaC͑Y\x1d\xcd$ua[\xaa\x1e\x01I\xf0\xbc\xb7\x0b\xc426\x15Ș\x19\x88\x94" + + "\x8b\xd5\xf7\xb0\xa4\xbd\\\xdb=\xafZ\x98A\xa9\xbc'\xdc\xec\xa9wCB\xaf" + + "\xe0\xdb\xf3\xb9\x03\xa2\xa0\x1ad\x98ـ-\xb4C\xa45K\xb5\xa6\x15\x87\xa9" + + "\xe9\x94j?\xb1\x9e\x10\xdf\x0dv\x7f\x1ai \x087\xe5\x17\xd2!y\x93M[\xa7ܳ" + + "\xfa\xae1ר\xe5\xfe\xe9y\xb9\xfc\x80F}Zje\xed\xbc\xc8Y.h\xfb\xb5 * S\xba" + + "\xba\xa8\xce\u07be\x03\xa6\x05\xcf\xe7,\x16i\x0ap\xbd\x16\xd6\xda$\xaf}0" + + "\xf1&\x0bCT\x19\x82x\xd5\x0c\xc7\x13\xf8\xa2R&~\x0b\xa5F\x8f\xa6\x8cݺ\\_" + + "\x06\xf8\xfc$\xbc\xda\xc1H\xe2\xf4\x7f\x84}L\x83\xfb{\xfe@\x09\xa8HF\xaf" + + "\xedRx\x9f\xbd\x0c\x0d\x06\xa5b\xebm\x9e#\xebwI\xfeDp}K\xc1\xd7\xe0\x86#" + + "\x1c;\x0f\xed\x0e`\x05\x9b\x86EI5w\xd9\x05\xfe\xb0zx\xc7T0v֚?S\xaf\xb2" + + "\x9b\x1a\x86\x12ꔚg\x14FB\xe8\x8fKvͫ\xfaz\x9c\x82\x87e\x08\x1f\x9c\x97" + + "\xc3\xc2 \x7f\x1a\xd2M#\x1f\xc2B\xcdJ\x05\xf5\x22\x94ʸ\x11\x05\xf9̄PA" + + "\x15\x8f\x0e5\xf3\xa6v\\ll\xd89y\x06\x08\x01!~\x06\xe3\x04_\xa3\x97j\xec" + + "\xeamZ\xb0\x10\x13\xdaW\x18pN\x1a\xab!\xf2k<\xea\xca\xe9%\x19\xf1\xb9" + + "\x0a\x84\xc1\x06\x84\xcb\x08\xe4\xe2\x037\xf2\x92ǭ\xd4\x0c\xf3;4b<\xc5.%" + + "\xc2!\x079\x8b\x9dG\xc9U\x86\xe6\\22\xf6\xee\xb5lʆ%\xbd\x9e\xfeQV\xf3u" + + "\xa7\xd4r \xecV\xc8V\xb1\x96\xb4\x9f2D\x88m\x13\x94\xa6X瘳\xc9\xcc\xe8K[y" + + "\xa4L\x01'IPP\xfe\xaaI+\xef)l\x86lE\xb8\xd4=\x81\x0f\x0b9렭\xf7_H\xaa\xf1" + + "\x0c\x17\xcf6\xa4\x02\xe1T\xf9\x14\xe9\x0e\xd5WmE}\xa5)\xe7s\xfc\x0c16" + + "\xd4U\xaa\x8d\xc9\xe0m\xd6\x0a\x0e\xf5ȷ9\xfen_\x02=U&vcX\x80EY U\x93\x02" + + "9\x02A\x86\xe5HGX\xf4\xed\x9ckFx(\xa2?\xfa7\x17\x8eCce\xb9\x0f5\xac\xbc" + + "\xf4\xa6\xe2C5\xdd\x08{\x1e\xd9c\x96>K\xc3\xf83\xaaܾ%\xf3\x91\x1b\xf8U" + + "\x1f\xfa<\xfd\xefв\x1b̹\x19f\xb2O\x81>f渃@\xf47l\xc9k\x13F\x1a\xa3\x84" + + "\xad\xa0\xda=_z\xf1́\x13l\xf6J\xd0\xdb\xe6\xed\x9d^ݹ\x19\x0fK\xa1H\x0b-" + + "\x7f\xed\xa8\xde&V\xbc\x9ak\xb8\x15\xc2\x12bWU\x08N1#\xe1W9ޗӬ\xacG\x80" + + "\xb2\x83ozH\xcd?\xd0T\x04ϭ\x03\xccfi\x05\xec\x02k\x9ej\x94\xa9S\xf2\xd4" + + "\xf8\x16r\x03era\x05month\x09enFutMOne\x0benFutMOther\x0aenPastMOne\x0ce" + + "nPastMOther\x03mo.\x08last mo.\x08this mo.\x08next mo.\x0eenShortFutMOne" + + "\x10enShortFutMOther\x0fenShortPastMOne\x11enShortPastMOther\x0a001AbbrM" + + "o1\x0a001AbbrMo2\x0a001AbbrMo3\x0a001AbbrMo4\x0a001AbbrMo5\x0a001AbbrMo6" + + "\x0a001AbbrMo7\x0a001AbbrMo8\x0a001AbbrMo9\x0b001AbbrMo10\x0b001AbbrMo11" + + "\x0b001AbbrMo12" + +var bucket1 string = "" + // Size: xxxx bytes + "\xfe\x99ҧ\xa2ݭ\x8a\xb6\xc7&\xe6\xbe.\xca:\xec\xeb4\x0f\xd7;\xfc\x09xhhkw" + + "'\x1f\x0fb\xfb8\xe3UU^S%0XxD\x83Zg\xff\xe7\x1ds\x97n\xef\xf95\xd3k\xbf$:" + + "\x99\xbbnU\xba:n\xdeM.\xa4st\xa6E\x0eG\xf5\xf0\xd6.Q-\x1e8\x87\x11X\xf2" + + "\x19\xc1J\xacI57\xdc\x07\xf0\x87\xc1cMc\x9e\xdc\x0a\xb3%\xff\x03\xe2aR" + + "\x06,\xbf!4J\x8b]4ΙWš\x1dY2\x88:\xb9Q\x16\xfc\xb5r\xf7\xc5d^\x97\x08\xce" + + "\x04EG@\u05fa\x88\x885\x08\x8c/\x83r\x92\xb8\x96\xd4\xfa\x8d\x18\x0fF" + + "\xfd\xa2\x01\xfb\xb0\xa0ڐӔ\xca\xcd\xf7@=\xe2\x96\x03\x87\x8aH\xfa\xc3L" + + "\xa2\xe90H\x93\xf6\x80\x8ck\x05)u{d\xa4\x19D\xd4{\xfd\xb8\xc5\xc0)\xea" + + "\x01\x9b\xcb&\x12\x87y\xf6{\xbb\xcdm\x0az/\xcb\xce#\x1c\x86R\xccy\xdbC" + + "\x7f\xa2\x96\x94\xc2\x22O/\xe4t\xfe\xba4 \xc3\xf1Hdy{܃L\x9aG\xa3\xa9\xea" + + "!LmW\x05\x9d$\x01\xe5wp\x8a'<\xc1\xcao\x8d\x1b\x8d\xd8h\xccX\xdc\xe4\xfd" + + "j\xf6\x0b\xa5'\xad\xe2\x1a\x16\x8fD\xde5\x0d\xaeL\xeft\xe1\x1f/\xd8\xec" + + "\xc9\xc0\xc6C#\x18\xfa\x93\x11Wt\x82\xfc\xa7\x1c\x82\x1b\xfd\x95`\xbd" + + "\x9f;[\xb3\x9e'\xe8DmA/^Ŭ]\x15-\xf9ـb\xea\xe9\x1f\xd9̂\x92\xc8\xddL%\xaf" + + "\xd0\xcc\xc7\x02L\xbb:P3\x22\xbfU\x81\U000d06a1\xa2\xf9q\x96\xbc2\x8e" + + "\x8f\xb4\x80\xbe\x06`\x8b\x0b\xaf\xd2\xd2J\xccV>\xc7d\xf5\xfd\x1c?\xbc7⏟" + + "\xb9%\xf0\xc4\xfe\xf3P\xed\x13Vܦ\xd7FR\x9b7\xabPu\xaa\xcf" + + "\xfca;k\xb2+\xe0zXKL\xbd\xce\xde.&\xf5ԛ\xbck\x1b\xd4F\x84\xac\x08#\x02mo" + + "\x0f001ShortFutMOne\x11001ShortFutMOther\x12001ShortPastMOther\x10001Nar" + + "rowFutMOne\x10001NarrowFutMTwo\x12001NarrowFutMOther\x11001NarrowPastMOn" + + "e\x13001NarrowPastMOther\x08gbAbbrM1\x08gbAbbrM2\x08gbAbbrM3\x08gbAbbrM4" + + "\x08gbAbbrM5\x08gbAbbrM6\x08gbAbbrM7\x08gbAbbrM8\x08gbAbbrM9\x09gbAbbrM1" + + "0\x09gbAbbrM11\x09gbAbbrM12\x08gbWideM1\x08gbWideM2\x08gbWideM3\x08gbWid" + + "eM4\x08gbWideM5\x08gbWideM6\x08gbWideM7\x08gbWideM8\x08gbWideM9\x09gbWid" + + "eM10\x09gbWideM11\x09gbWideM12\x0agbNarrowM1\x0agbNarrowM2\x0agbNarrowM3" + + "\x0agbNarrowM5\x0agbNarrowM6\x0agbNarrowM8\x0agbNarrowM9\x0bgbNarrowM10" + + "\x0bgbNarrowM11\x0bgbNarrowM12\xfeG*:*\x8e\xf9f̷\xb2p\xaa\xb9\x12{и\xf7c" + + "\u0088\xdb\x0ce\xfd\xd7\xfc_T\x0f\x05\xf9\xf1\xc1(\x80\xa2)H\x09\x02\x15" + + "\xe8Y!\xc2\xc8\xc3뿓d\x03vԧi%\xb5\xc0\x8c\x05m\x87\x0d\x02y\xe9F\xa9\xe1" + + "\xe1!e\xbc\x1a\x8d\xa0\x93q\x8b\x0c߮\xcdF\xd1Kpx\x87/is\xcc\xdd\xe0\xafʍ" + + "~\xfeҜl\xc2B\xc5\x1a\xa4#ث,kF\xe89\xec\xe6~\xaa\x12\xbf\x1a\xf6L\x0a\xba" + + "\xa9\x96n\xf1\x03Ӊ<\xf5\x03\x84dp\x98\xe1d\xf7'\x94\xe6\x97\x1a4/\x05" + + "\x99\x8f.\x7foH@\xe9\x1a\xda6`MQ\xad\x0d\x08\x99؟+\xe53\xbf\x97\x88~\xe6" + + "eh\xb7\xaf\xaf<\xe1|\xb9\x0cF\xe0\xda\xf2\xbd\xff\x19\xaa\x95\x9b\x81" + + "\xc3\x04\xe3\x1f\xd5o]$\xf5\x0f\xbbzU\xf2a\xb0\x92[\xfeX\x03\x1f\xdc\x0c" + + "\xd5I\xc0a_\xbd\xd8\xde\u009a\x1a@t\x1e\x7f\x8f&\x0c\x8d\xfeM\xd7ڟX\x90" + + "\x97\xfe%\xa3'\x88\x81\xb5\x14l\x0bL\xd9>\x8d\x99\xe2=ƭu,\x9aT \x06\xc1y" + + "\\\x01wf\xdcx\xab\xa1\xee\xec\x82\x1e8\xb09$\x88\xfe<\xb5\x13g\x95\x15NS" + + "\x83`vx\xb9\xb7\xd8h\xc7 \x9e\x9fL\x06\x9a\xadtV\xc9\x13\x85\x0d8\xc15R" + + "\xe5\xadEL\xf0\x0f\x8b:\xf6\x90\x16i۰W\x9dv\xee\xb6B\x80`Ωb\xc7w\x11\xa3" + + "N\x17\xee\xb7\xe0\xbf\xd4a\x0a\x8a\x18g\xb82\x8e\xaaVCG\xc3Ip\xc0^6\xa8N" + + "\xf1\xebt\xa6\xa4\x0cO\xd9c\x97\x8f\xfa\x11)\x1bHY\xa2ӄ\x1bLc\xd6\x08" + + "\x06\xbfj`?3s\x89\xb8\x82(\xaf\xef\x84\xdfz\xc3\x12\xf1b\xd4\xf7ir\xe8," + + "\x8apœ\x00F\xa6b+\xfa}\x03\x14..\xcb1l\xac\x93\xee\x19\x12\xaa\xbbo\x95" + + "\xf3?ݔ7\x84\xb2b\x0c4\x81\x17\xf2K@\xde\x18\x99Q\x17n\xe5?\xdao\xc6(\xfc" + + "\x9b\xees\xc6V\x91\x0dْ\x1d\x06g9o" + +var enumMap = map[string]uint16{ + "": 0, + "calendars": 0, + "fields": 1, + "buddhist": 0, + "chinese": 1, + "dangi": 2, + "ethiopic": 3, + "ethiopic-amete-alem": 4, + "generic": 5, + "gregorian": 6, + "hebrew": 7, + "islamic": 8, + "islamic-civil": 9, + "islamic-rgsa": 10, + "islamic-tbla": 11, + "islamic-umalqura": 12, + "persian": 13, + "months": 0, + "eras": 1, + "filler": 2, + "cyclicNameSets": 3, + "format": 0, + "stand-alone": 1, + "wAbbreviated": 0, + "wNarrow": 1, + "wWide": 2, + "leap7": 0, + "variant": 1, + "cycDayParts": 0, + "cycDays": 1, + "cycMonths": 2, + "cycYears": 3, + "cycZodiacs": 4, + "era": 0, + "era-short": 1, + "era-narrow": 2, + "month": 3, + "month-short": 4, + "month-narrow": 5, + "displayName": 0, + "relative": 1, + "relativeTime": 2, + "before1": 0, + "current": 1, + "after1": 2, + "future": 0, + "past": 1, + "other": 0, + "one": 1, + "two": 2, +} + +// Total table size: xxxx bytes (14KiB); checksum: 4A3B660 diff --git a/vendor/golang.org/x/text/internal/cldrtree/tree.go b/vendor/golang.org/x/text/internal/cldrtree/tree.go new file mode 100644 index 0000000..9321947 --- /dev/null +++ b/vendor/golang.org/x/text/internal/cldrtree/tree.go @@ -0,0 +1,181 @@ +// Copyright 2017 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. + +package cldrtree + +import ( + "golang.org/x/text/internal/language/compact" + "golang.org/x/text/language" +) + +const ( + inheritOffsetShift = 12 + inheritMask uint16 = 0x8000 + inheritValueMask uint16 = 0x0FFF + + missingValue uint16 = 0xFFFF +) + +// Tree holds a tree of CLDR data. +type Tree struct { + Locales []uint32 + Indices []uint16 + Buckets []string +} + +// Lookup looks up CLDR data for the given path. The lookup adheres to the alias +// and locale inheritance rules as defined in CLDR. +// +// Each subsequent element in path indicates which subtree to select data from. +// The last element of the path must select a leaf node. All other elements +// of the path select a subindex. +func (t *Tree) Lookup(tag compact.ID, path ...uint16) string { + return t.lookup(tag, false, path...) +} + +// LookupFeature is like Lookup, but will first check whether a value of "other" +// as a fallback before traversing the inheritance chain. +func (t *Tree) LookupFeature(tag compact.ID, path ...uint16) string { + return t.lookup(tag, true, path...) +} + +func (t *Tree) lookup(tag compact.ID, isFeature bool, path ...uint16) string { + origLang := tag +outer: + for { + index := t.Indices[t.Locales[tag]:] + + k := uint16(0) + for i := range path { + max := index[k] + if i < len(path)-1 { + // index (non-leaf) + if path[i] >= max { + break + } + k = index[k+1+path[i]] + if k == 0 { + break + } + if v := k &^ inheritMask; k != v { + offset := v >> inheritOffsetShift + value := v & inheritValueMask + path[uint16(i)-offset] = value + tag = origLang + continue outer + } + } else { + // leaf value + offset := missingValue + if path[i] < max { + offset = index[k+2+path[i]] + } + if offset == missingValue { + if !isFeature { + break + } + // "other" feature must exist + offset = index[k+2] + } + data := t.Buckets[index[k+1]] + n := uint16(data[offset]) + return data[offset+1 : offset+n+1] + } + } + if tag == 0 { + break + } + tag = tag.Parent() + } + return "" +} + +func build(b *Builder) (*Tree, error) { + var t Tree + + t.Locales = make([]uint32, language.NumCompactTags) + + for _, loc := range b.locales { + tag, _ := language.CompactIndex(loc.tag) + t.Locales[tag] = uint32(len(t.Indices)) + var x indexBuilder + x.add(loc.root) + t.Indices = append(t.Indices, x.index...) + } + // Set locales for which we don't have data to the parent's data. + for i, v := range t.Locales { + p := compact.ID(i) + for v == 0 && p != 0 { + p = p.Parent() + v = t.Locales[p] + } + t.Locales[i] = v + } + + for _, b := range b.buckets { + t.Buckets = append(t.Buckets, string(b)) + } + if b.err != nil { + return nil, b.err + } + return &t, nil +} + +type indexBuilder struct { + index []uint16 +} + +func (b *indexBuilder) add(i *Index) uint16 { + offset := len(b.index) + + max := enumIndex(0) + switch { + case len(i.values) > 0: + for _, v := range i.values { + if v.key > max { + max = v.key + } + } + b.index = append(b.index, make([]uint16, max+3)...) + + b.index[offset] = uint16(max) + 1 + + b.index[offset+1] = i.values[0].value.bucket + for i := offset + 2; i < len(b.index); i++ { + b.index[i] = missingValue + } + for _, v := range i.values { + b.index[offset+2+int(v.key)] = v.value.bucketPos + } + return uint16(offset) + + case len(i.subIndex) > 0: + for _, s := range i.subIndex { + if s.meta.index > max { + max = s.meta.index + } + } + b.index = append(b.index, make([]uint16, max+2)...) + + b.index[offset] = uint16(max) + 1 + + for _, s := range i.subIndex { + x := b.add(s) + b.index[offset+int(s.meta.index)+1] = x + } + return uint16(offset) + + case i.meta.inheritOffset < 0: + v := uint16(-(i.meta.inheritOffset + 1)) << inheritOffsetShift + p := i.meta + for k := i.meta.inheritOffset; k < 0; k++ { + p = p.parent + } + v += uint16(p.typeInfo.enum.lookup(i.meta.inheritIndex)) + v |= inheritMask + return v + } + + return 0 +} diff --git a/vendor/golang.org/x/text/internal/cldrtree/type.go b/vendor/golang.org/x/text/internal/cldrtree/type.go new file mode 100644 index 0000000..65f9b46 --- /dev/null +++ b/vendor/golang.org/x/text/internal/cldrtree/type.go @@ -0,0 +1,139 @@ +// Copyright 2017 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. + +package cldrtree + +import ( + "log" + "strconv" +) + +// enumIndex is the numerical value of an enum value. +type enumIndex int + +// An enum is a collection of enum values. +type enum struct { + name string // the Go type of the enum + rename func(string) string + keyMap map[string]enumIndex + keys []string +} + +// lookup returns the index for the enum corresponding to the string. If s +// currently does not exist it will add the entry. +func (e *enum) lookup(s string) enumIndex { + if e.rename != nil { + s = e.rename(s) + } + x, ok := e.keyMap[s] + if !ok { + if e.keyMap == nil { + e.keyMap = map[string]enumIndex{} + } + u, err := strconv.ParseUint(s, 10, 32) + if err == nil { + for len(e.keys) <= int(u) { + x := enumIndex(len(e.keys)) + s := strconv.Itoa(int(x)) + e.keyMap[s] = x + e.keys = append(e.keys, s) + } + if e.keyMap[s] != enumIndex(u) { + // TODO: handle more gracefully. + log.Fatalf("cldrtree: mix of integer and non-integer for %q %v", s, e.keys) + } + return enumIndex(u) + } + x = enumIndex(len(e.keys)) + e.keyMap[s] = x + e.keys = append(e.keys, s) + } + return x +} + +// A typeInfo indicates the set of possible enum values and a mapping from +// these values to subtypes. +type typeInfo struct { + enum *enum + entries map[enumIndex]*typeInfo + keyTypeInfo *typeInfo + shareKeys bool +} + +func (t *typeInfo) sharedKeys() bool { + return t.shareKeys +} + +func (t *typeInfo) lookupSubtype(s string, opts *options) (x enumIndex, sub *typeInfo) { + if t.enum == nil { + if t.enum = opts.sharedEnums; t.enum == nil { + t.enum = &enum{} + } + } + if opts.sharedEnums != nil && t.enum != opts.sharedEnums { + panic("incompatible enums defined") + } + x = t.enum.lookup(s) + if t.entries == nil { + t.entries = map[enumIndex]*typeInfo{} + } + sub, ok := t.entries[x] + if !ok { + sub = opts.sharedType + if sub == nil { + sub = &typeInfo{} + } + t.entries[x] = sub + } + t.shareKeys = opts.sharedType != nil // For analysis purposes. + return x, sub +} + +// metaData includes information about subtypes, possibly sharing commonality +// with sibling branches, and information about inheritance, which may differ +// per branch. +type metaData struct { + b *Builder + + parent *metaData + + index enumIndex // index into the parent's subtype index + key string + elem string // XML element corresponding to this type. + typeInfo *typeInfo + + lookup map[enumIndex]*metaData + subs []*metaData + + inheritOffset int // always negative when applicable + inheritIndex string // new value for field indicated by inheritOffset + // inheritType *metaData +} + +func (m *metaData) sub(key string, opts *options) *metaData { + if m.lookup == nil { + m.lookup = map[enumIndex]*metaData{} + } + enum, info := m.typeInfo.lookupSubtype(key, opts) + sub := m.lookup[enum] + if sub == nil { + sub = &metaData{ + b: m.b, + parent: m, + + index: enum, + key: key, + typeInfo: info, + } + m.lookup[enum] = sub + m.subs = append(m.subs, sub) + } + return sub +} + +func (m *metaData) validate() { + for _, s := range m.subs { + s.validate() + } +} diff --git a/vendor/golang.org/x/text/internal/colltab/collelem.go b/vendor/golang.org/x/text/internal/colltab/collelem.go index 880952c..2855589 100644 --- a/vendor/golang.org/x/text/internal/colltab/collelem.go +++ b/vendor/golang.org/x/text/internal/colltab/collelem.go @@ -87,7 +87,7 @@ func (ce Elem) ctype() ceType { // - t* is the tertiary collation value // 100ttttt cccccccc pppppppp pppppppp // - t* is the tertiar collation value -// - c* is the cannonical combining class +// - c* is the canonical combining class // - p* is the primary collation value // Collation elements with a secondary value are of the form // 1010cccc ccccssss ssssssss tttttttt, where diff --git a/vendor/golang.org/x/text/internal/colltab/colltab_test.go b/vendor/golang.org/x/text/internal/colltab/colltab_test.go index c403ac3..36943f0 100644 --- a/vendor/golang.org/x/text/internal/colltab/colltab_test.go +++ b/vendor/golang.org/x/text/internal/colltab/colltab_test.go @@ -57,8 +57,10 @@ func TestMatchLang(t *testing.T) { {0, language.MustParse("und-Jpan-BR")}, // Infers "ja", so no match. {0, language.MustParse("zu")}, // No match past index. } { - if x := MatchLang(tc.t, tags); x != tc.x { - t.Errorf("%d: MatchLang(%q, tags) = %d; want %d", i, tc.t, x, tc.x) - } + t.Run(tc.t.String(), func(t *testing.T) { + if x := MatchLang(tc.t, tags); x != tc.x { + t.Errorf("%d: MatchLang(%q, tags) = %d; want %d", i, tc.t, x, tc.x) + } + }) } } diff --git a/vendor/golang.org/x/text/internal/export/idna/gen.go b/vendor/golang.org/x/text/internal/export/idna/gen.go index 27a5e1c..4ad9804 100644 --- a/vendor/golang.org/x/text/internal/export/idna/gen.go +++ b/vendor/golang.org/x/text/internal/export/idna/gen.go @@ -21,6 +21,7 @@ import ( "golang.org/x/text/internal/gen" "golang.org/x/text/internal/triegen" "golang.org/x/text/internal/ucd" + "golang.org/x/text/unicode/bidi" ) func main() { @@ -35,6 +36,12 @@ var runes = map[rune]info{} func genTables() { t := triegen.NewTrie("idna") + ucd.Parse(gen.OpenUCDFile("DerivedNormalizationProps.txt"), func(p *ucd.Parser) { + r := p.Rune(0) + if p.String(1) == "NFC_QC" { // p.String(2) is "N" or "M" + runes[r] = mayNeedNorm + } + }) ucd.Parse(gen.OpenUCDFile("UnicodeData.txt"), func(p *ucd.Parser) { r := p.Rune(0) @@ -44,7 +51,17 @@ func genTables() { } switch { case unicode.In(r, unicode.Mark): - runes[r] |= modifier + runes[r] |= modifier | mayNeedNorm + } + // TODO: by using UnicodeData.txt we don't mark undefined codepoints + // that are earmarked as RTL properly. However, an undefined cp will + // always fail, so there is no need to store this info. + switch p, _ := bidi.LookupRune(r); p.Class() { + case bidi.R, bidi.AL, bidi.AN: + if x := runes[r]; x != 0 && x != mayNeedNorm { + log.Fatalf("%U: rune both modifier and RTL letter/number", r) + } + runes[r] = rtl } }) @@ -83,7 +100,7 @@ func genTables() { }) w := gen.NewCodeWriter() - defer w.WriteGoFile("tables.go", "idna") + defer w.WriteVersionedGoFile("tables.go", "idna") gen.WriteUnicodeVersion(w) diff --git a/vendor/golang.org/x/text/internal/export/idna/gen10.0.0_test.go b/vendor/golang.org/x/text/internal/export/idna/gen10.0.0_test.go new file mode 100644 index 0000000..c5dfdde --- /dev/null +++ b/vendor/golang.org/x/text/internal/export/idna/gen10.0.0_test.go @@ -0,0 +1,93 @@ +// Copyright 2016 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 go1.10 + +package idna + +import ( + "testing" + "unicode" + + "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/testtext" + "golang.org/x/text/internal/ucd" +) + +func TestTables(t *testing.T) { + testtext.SkipIfNotLong(t) + + lookup := func(r rune) info { + v, _ := trie.lookupString(string(r)) + return info(v) + } + + ucd.Parse(gen.OpenUnicodeFile("idna", "", "IdnaMappingTable.txt"), func(p *ucd.Parser) { + r := p.Rune(0) + x := lookup(r) + if got, want := x.category(), catFromEntry(p); got != want { + t.Errorf("%U:category: got %x; want %x", r, got, want) + } + + mapped := false + switch p.String(1) { + case "mapped", "disallowed_STD3_mapped", "deviation": + mapped = true + } + if x.isMapped() != mapped { + t.Errorf("%U:isMapped: got %v; want %v", r, x.isMapped(), mapped) + } + if !mapped { + return + } + want := string(p.Runes(2)) + got := string(x.appendMapping(nil, string(r))) + if got != want { + t.Errorf("%U:mapping: got %+q; want %+q", r, got, want) + } + + if x.isMapped() { + return + } + wantMark := unicode.In(r, unicode.Mark) + gotMark := x.isModifier() + if gotMark != wantMark { + t.Errorf("IsMark(%U) = %v; want %v", r, gotMark, wantMark) + } + }) + + ucd.Parse(gen.OpenUCDFile("UnicodeData.txt"), func(p *ucd.Parser) { + r := p.Rune(0) + x := lookup(r) + got := x.isViramaModifier() + + const cccVirama = 9 + want := p.Int(ucd.CanonicalCombiningClass) == cccVirama + if got != want { + t.Errorf("IsVirama(%U) = %v; want %v", r, got, want) + } + + rtl := false + switch p.String(ucd.BidiClass) { + case "R", "AL", "AN": + rtl = true + } + if got := x.isBidi("A"); got != rtl && !x.isMapped() { + t.Errorf("IsBidi(%U) = %v; want %v", r, got, rtl) + } + }) + + ucd.Parse(gen.OpenUCDFile("extracted/DerivedJoiningType.txt"), func(p *ucd.Parser) { + r := p.Rune(0) + x := lookup(r) + if x.isMapped() { + return + } + got := x.joinType() + want := joinType[p.String(1)] + if got != want { + t.Errorf("JoinType(%U) = %x; want %x", r, got, want) + } + }) +} diff --git a/vendor/golang.org/x/text/internal/export/idna/gen9.0.0_test.go b/vendor/golang.org/x/text/internal/export/idna/gen9.0.0_test.go new file mode 100644 index 0000000..0e66f0b --- /dev/null +++ b/vendor/golang.org/x/text/internal/export/idna/gen9.0.0_test.go @@ -0,0 +1,84 @@ +// Copyright 2016 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 !go1.10 + +package idna + +import ( + "testing" + "unicode" + + "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/testtext" + "golang.org/x/text/internal/ucd" +) + +func TestTables(t *testing.T) { + testtext.SkipIfNotLong(t) + + lookup := func(r rune) info { + v, _ := trie.lookupString(string(r)) + return info(v) + } + + ucd.Parse(gen.OpenUnicodeFile("idna", "", "IdnaMappingTable.txt"), func(p *ucd.Parser) { + r := p.Rune(0) + x := lookup(r) + if got, want := x.category(), catFromEntry(p); got != want { + t.Errorf("%U:category: got %x; want %x", r, got, want) + } + + mapped := false + switch p.String(1) { + case "mapped", "disallowed_STD3_mapped", "deviation": + mapped = true + } + if x.isMapped() != mapped { + t.Errorf("%U:isMapped: got %v; want %v", r, x.isMapped(), mapped) + } + if !mapped { + return + } + want := string(p.Runes(2)) + got := string(x.appendMapping(nil, string(r))) + if got != want { + t.Errorf("%U:mapping: got %+q; want %+q", r, got, want) + } + + if x.isMapped() { + return + } + wantMark := unicode.In(r, unicode.Mark) + gotMark := x.isModifier() + if gotMark != wantMark { + t.Errorf("IsMark(%U) = %v; want %v", r, gotMark, wantMark) + } + }) + + ucd.Parse(gen.OpenUCDFile("UnicodeData.txt"), func(p *ucd.Parser) { + r := p.Rune(0) + x := lookup(r) + got := x.isViramaModifier() + + const cccVirama = 9 + want := p.Int(ucd.CanonicalCombiningClass) == cccVirama + if got != want { + t.Errorf("IsVirama(%U) = %v; want %v", r, got, want) + } + }) + + ucd.Parse(gen.OpenUCDFile("extracted/DerivedJoiningType.txt"), func(p *ucd.Parser) { + r := p.Rune(0) + x := lookup(r) + if x.isMapped() { + return + } + got := x.joinType() + want := joinType[p.String(1)] + if got != want { + t.Errorf("JoinType(%U) = %x; want %x", r, got, want) + } + }) +} diff --git a/vendor/golang.org/x/text/internal/export/idna/gen_test.go b/vendor/golang.org/x/text/internal/export/idna/gen_test.go deleted file mode 100644 index 60602ec..0000000 --- a/vendor/golang.org/x/text/internal/export/idna/gen_test.go +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright 2016 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. - -package idna - -import ( - "testing" - "unicode" - - "golang.org/x/text/internal/gen" - "golang.org/x/text/internal/testtext" - "golang.org/x/text/internal/ucd" -) - -func TestTables(t *testing.T) { - testtext.SkipIfNotLong(t) - - lookup := func(r rune) info { - v, _ := trie.lookupString(string(r)) - return info(v) - } - - ucd.Parse(gen.OpenUnicodeFile("idna", "", "IdnaMappingTable.txt"), func(p *ucd.Parser) { - r := p.Rune(0) - x := lookup(r) - if got, want := x.category(), catFromEntry(p); got != want { - t.Errorf("%U:category: got %x; want %x", r, got, want) - } - - mapped := false - switch p.String(1) { - case "mapped", "disallowed_STD3_mapped", "deviation": - mapped = true - } - if x.isMapped() != mapped { - t.Errorf("%U:isMapped: got %v; want %v", r, x.isMapped(), mapped) - } - if !mapped { - return - } - want := string(p.Runes(2)) - got := string(x.appendMapping(nil, string(r))) - if got != want { - t.Errorf("%U:mapping: got %+q; want %+q", r, got, want) - } - - if x.isMapped() { - return - } - wantMark := unicode.In(r, unicode.Mark) - gotMark := x.isModifier() - if gotMark != wantMark { - t.Errorf("IsMark(%U) = %v; want %v", r, gotMark, wantMark) - } - }) - - ucd.Parse(gen.OpenUCDFile("UnicodeData.txt"), func(p *ucd.Parser) { - r := p.Rune(0) - x := lookup(r) - got := x.isViramaModifier() - - const cccVirama = 9 - want := p.Int(ucd.CanonicalCombiningClass) == cccVirama - if got != want { - t.Errorf("IsVirama(%U) = %v; want %v", r, got, want) - } - }) - - ucd.Parse(gen.OpenUCDFile("extracted/DerivedJoiningType.txt"), func(p *ucd.Parser) { - r := p.Rune(0) - x := lookup(r) - if x.isMapped() { - return - } - got := x.joinType() - want := joinType[p.String(1)] - if got != want { - t.Errorf("JoinType(%U) = %x; want %x", r, got, want) - } - }) -} diff --git a/vendor/golang.org/x/text/internal/export/idna/gen_trieval.go b/vendor/golang.org/x/text/internal/export/idna/gen_trieval.go index 3a32296..0de99b0 100644 --- a/vendor/golang.org/x/text/internal/export/idna/gen_trieval.go +++ b/vendor/golang.org/x/text/internal/export/idna/gen_trieval.go @@ -30,9 +30,9 @@ package main // 15..3 index into xor or mapping table // } // } else { -// 15..13 unused -// 12 modifier (including virama) -// 11 virama modifier +// 15..14 unused +// 13 mayNeedNorm +// 12..11 attributes // 10..8 joining type // 7..3 category type // } @@ -53,15 +53,20 @@ const ( joinShift = 8 joinMask = 0x07 - viramaModifier = 0x0800 + // Attributes + attributesMask = 0x1800 + viramaModifier = 0x1800 modifier = 0x1000 + rtl = 0x0800 + + mayNeedNorm = 0x2000 ) // A category corresponds to a category defined in the IDNA mapping table. type category uint16 const ( - unknown category = 0 // not defined currently in unicode. + unknown category = 0 // not currently defined in unicode. mapped category = 1 disallowedSTD3Mapped category = 2 deviation category = 3 @@ -114,5 +119,5 @@ func (c info) isModifier() bool { } func (c info) isViramaModifier() bool { - return c&(viramaModifier|catSmallMask) == viramaModifier + return c&(attributesMask|catSmallMask) == viramaModifier } diff --git a/vendor/golang.org/x/text/internal/export/idna/idna.go b/vendor/golang.org/x/text/internal/export/idna/idna.go deleted file mode 100644 index 3184fbb..0000000 --- a/vendor/golang.org/x/text/internal/export/idna/idna.go +++ /dev/null @@ -1,665 +0,0 @@ -// Copyright 2016 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. - -//go:generate go run gen.go gen_trieval.go gen_common.go - -// Package idna implements IDNA2008 using the compatibility processing -// defined by UTS (Unicode Technical Standard) #46, which defines a standard to -// deal with the transition from IDNA2003. -// -// IDNA2008 (Internationalized Domain Names for Applications), is defined in RFC -// 5890, RFC 5891, RFC 5892, RFC 5893 and RFC 5894. -// UTS #46 is defined in http://www.unicode.org/reports/tr46. -// See http://unicode.org/cldr/utility/idna.jsp for a visualization of the -// differences between these two standards. -package idna // import "golang.org/x/text/internal/export/idna" - -import ( - "fmt" - "strings" - "unicode/utf8" - - "golang.org/x/text/secure/bidirule" - "golang.org/x/text/unicode/norm" -) - -// NOTE: Unlike common practice in Go APIs, the functions will return a -// sanitized domain name in case of errors. Browsers sometimes use a partially -// evaluated string as lookup. -// TODO: the current error handling is, in my opinion, the least opinionated. -// Other strategies are also viable, though: -// Option 1) Return an empty string in case of error, but allow the user to -// specify explicitly which errors to ignore. -// Option 2) Return the partially evaluated string if it is itself a valid -// string, otherwise return the empty string in case of error. -// Option 3) Option 1 and 2. -// Option 4) Always return an empty string for now and implement Option 1 as -// needed, and document that the return string may not be empty in case of -// error in the future. -// I think Option 1 is best, but it is quite opinionated. - -// ToASCII is a wrapper for Punycode.ToASCII. -func ToASCII(s string) (string, error) { - return Punycode.process(s, true) -} - -// ToUnicode is a wrapper for Punycode.ToUnicode. -func ToUnicode(s string) (string, error) { - return Punycode.process(s, false) -} - -// An Option configures a Profile at creation time. -type Option func(*options) - -// Transitional sets a Profile to use the Transitional mapping as defined in UTS -// #46. This will cause, for example, "ß" to be mapped to "ss". Using the -// transitional mapping provides a compromise between IDNA2003 and IDNA2008 -// compatibility. It is used by most browsers when resolving domain names. This -// option is only meaningful if combined with MapForLookup. -func Transitional(transitional bool) Option { - return func(o *options) { o.transitional = true } -} - -// VerifyDNSLength sets whether a Profile should fail if any of the IDN parts -// are longer than allowed by the RFC. -func VerifyDNSLength(verify bool) Option { - return func(o *options) { o.verifyDNSLength = verify } -} - -// ValidateLabels sets whether to check the mandatory label validation criteria -// as defined in Section 5.4 of RFC 5891. This includes testing for correct use -// of hyphens ('-'), normalization, validity of runes, and the context rules. -func ValidateLabels(enable bool) Option { - return func(o *options) { - // Don't override existing mappings, but set one that at least checks - // normalization if it is not set. - if o.mapping == nil && enable { - o.mapping = normalize - } - o.trie = trie - o.validateLabels = enable - o.fromPuny = validateFromPunycode - } -} - -// StrictDomainName limits the set of permissable ASCII characters to those -// allowed in domain names as defined in RFC 1034 (A-Z, a-z, 0-9 and the -// hyphen). This is set by default for MapForLookup and ValidateForRegistration. -// -// This option is useful, for instance, for browsers that allow characters -// outside this range, for example a '_' (U+005F LOW LINE). See -// http://www.rfc-editor.org/std/std3.txt for more details This option -// corresponds to the UseSTD3ASCIIRules option in UTS #46. -func StrictDomainName(use bool) Option { - return func(o *options) { - o.trie = trie - o.useSTD3Rules = use - o.fromPuny = validateFromPunycode - } -} - -// NOTE: the following options pull in tables. The tables should not be linked -// in as long as the options are not used. - -// BidiRule enables the Bidi rule as defined in RFC 5893. Any application -// that relies on proper validation of labels should include this rule. -func BidiRule() Option { - return func(o *options) { o.bidirule = bidirule.ValidString } -} - -// ValidateForRegistration sets validation options to verify that a given IDN is -// properly formatted for registration as defined by Section 4 of RFC 5891. -func ValidateForRegistration() Option { - return func(o *options) { - o.mapping = validateRegistration - StrictDomainName(true)(o) - ValidateLabels(true)(o) - VerifyDNSLength(true)(o) - BidiRule()(o) - } -} - -// MapForLookup sets validation and mapping options such that a given IDN is -// transformed for domain name lookup according to the requirements set out in -// Section 5 of RFC 5891. The mappings follow the recommendations of RFC 5894, -// RFC 5895 and UTS 46. It does not add the Bidi Rule. Use the BidiRule option -// to add this check. -// -// The mappings include normalization and mapping case, width and other -// compatibility mappings. -func MapForLookup() Option { - return func(o *options) { - o.mapping = validateAndMap - StrictDomainName(true)(o) - ValidateLabels(true)(o) - } -} - -type options struct { - transitional bool - useSTD3Rules bool - validateLabels bool - verifyDNSLength bool - - trie *idnaTrie - - // fromPuny calls validation rules when converting A-labels to U-labels. - fromPuny func(p *Profile, s string) error - - // mapping implements a validation and mapping step as defined in RFC 5895 - // or UTS 46, tailored to, for example, domain registration or lookup. - mapping func(p *Profile, s string) (string, error) - - // bidirule, if specified, checks whether s conforms to the Bidi Rule - // defined in RFC 5893. - bidirule func(s string) bool -} - -// A Profile defines the configuration of a IDNA mapper. -type Profile struct { - options -} - -func apply(o *options, opts []Option) { - for _, f := range opts { - f(o) - } -} - -// New creates a new Profile. -// -// With no options, the returned Profile is the most permissive and equals the -// Punycode Profile. Options can be passed to further restrict the Profile. The -// MapForLookup and ValidateForRegistration options set a collection of options, -// for lookup and registration purposes respectively, which can be tailored by -// adding more fine-grained options, where later options override earlier -// options. -func New(o ...Option) *Profile { - p := &Profile{} - apply(&p.options, o) - return p -} - -// ToASCII converts a domain or domain label to its ASCII form. For example, -// ToASCII("bücher.example.com") is "xn--bcher-kva.example.com", and -// ToASCII("golang") is "golang". If an error is encountered it will return -// an error and a (partially) processed result. -func (p *Profile) ToASCII(s string) (string, error) { - return p.process(s, true) -} - -// ToUnicode converts a domain or domain label to its Unicode form. For example, -// ToUnicode("xn--bcher-kva.example.com") is "bücher.example.com", and -// ToUnicode("golang") is "golang". If an error is encountered it will return -// an error and a (partially) processed result. -func (p *Profile) ToUnicode(s string) (string, error) { - pp := *p - pp.transitional = false - return pp.process(s, false) -} - -// String reports a string with a description of the profile for debugging -// purposes. The string format may change with different versions. -func (p *Profile) String() string { - s := "" - if p.transitional { - s = "Transitional" - } else { - s = "NonTransitional" - } - if p.useSTD3Rules { - s += ":UseSTD3Rules" - } - if p.validateLabels { - s += ":ValidateLabels" - } - if p.verifyDNSLength { - s += ":VerifyDNSLength" - } - return s -} - -var ( - // Punycode is a Profile that does raw punycode processing with a minimum - // of validation. - Punycode *Profile = punycode - - // Lookup is the recommended profile for looking up domain names, according - // to Section 5 of RFC 5891. The exact configuration of this profile may - // change over time. - Lookup *Profile = lookup - - // Display is the recommended profile for displaying domain names. - // The configuration of this profile may change over time. - Display *Profile = display - - // Registration is the recommended profile for checking whether a given - // IDN is valid for registration, according to Section 4 of RFC 5891. - Registration *Profile = registration - - punycode = &Profile{} - lookup = &Profile{options{ - transitional: true, - useSTD3Rules: true, - validateLabels: true, - trie: trie, - fromPuny: validateFromPunycode, - mapping: validateAndMap, - bidirule: bidirule.ValidString, - }} - display = &Profile{options{ - useSTD3Rules: true, - validateLabels: true, - trie: trie, - fromPuny: validateFromPunycode, - mapping: validateAndMap, - bidirule: bidirule.ValidString, - }} - registration = &Profile{options{ - useSTD3Rules: true, - validateLabels: true, - verifyDNSLength: true, - trie: trie, - fromPuny: validateFromPunycode, - mapping: validateRegistration, - bidirule: bidirule.ValidString, - }} - - // TODO: profiles - // Register: recommended for approving domain names: don't do any mappings - // but rather reject on invalid input. Bundle or block deviation characters. -) - -type labelError struct{ label, code_ string } - -func (e labelError) code() string { return e.code_ } -func (e labelError) Error() string { - return fmt.Sprintf("idna: invalid label %q", e.label) -} - -type runeError rune - -func (e runeError) code() string { return "P1" } -func (e runeError) Error() string { - return fmt.Sprintf("idna: disallowed rune %U", e) -} - -// process implements the algorithm described in section 4 of UTS #46, -// see http://www.unicode.org/reports/tr46. -func (p *Profile) process(s string, toASCII bool) (string, error) { - var err error - if p.mapping != nil { - s, err = p.mapping(p, s) - } - // Remove leading empty labels. - for ; len(s) > 0 && s[0] == '.'; s = s[1:] { - } - // It seems like we should only create this error on ToASCII, but the - // UTS 46 conformance tests suggests we should always check this. - if err == nil && p.verifyDNSLength && s == "" { - err = &labelError{s, "A4"} - } - labels := labelIter{orig: s} - for ; !labels.done(); labels.next() { - label := labels.label() - if label == "" { - // Empty labels are not okay. The label iterator skips the last - // label if it is empty. - if err == nil && p.verifyDNSLength { - err = &labelError{s, "A4"} - } - continue - } - if strings.HasPrefix(label, acePrefix) { - u, err2 := decode(label[len(acePrefix):]) - if err2 != nil { - if err == nil { - err = err2 - } - // Spec says keep the old label. - continue - } - labels.set(u) - if err == nil && p.validateLabels { - err = p.fromPuny(p, u) - } - if err == nil { - // This should be called on NonTransitional, according to the - // spec, but that currently does not have any effect. Use the - // original profile to preserve options. - err = p.validateLabel(u) - } - } else if err == nil { - err = p.validateLabel(label) - } - } - if toASCII { - for labels.reset(); !labels.done(); labels.next() { - label := labels.label() - if !ascii(label) { - a, err2 := encode(acePrefix, label) - if err == nil { - err = err2 - } - label = a - labels.set(a) - } - n := len(label) - if p.verifyDNSLength && err == nil && (n == 0 || n > 63) { - err = &labelError{label, "A4"} - } - } - } - s = labels.result() - if toASCII && p.verifyDNSLength && err == nil { - // Compute the length of the domain name minus the root label and its dot. - n := len(s) - if n > 0 && s[n-1] == '.' { - n-- - } - if len(s) < 1 || n > 253 { - err = &labelError{s, "A4"} - } - } - return s, err -} - -func normalize(p *Profile, s string) (string, error) { - return norm.NFC.String(s), nil -} - -func validateRegistration(p *Profile, s string) (string, error) { - if !norm.NFC.IsNormalString(s) { - return s, &labelError{s, "V1"} - } - for i := 0; i < len(s); { - v, sz := trie.lookupString(s[i:]) - // Copy bytes not copied so far. - switch p.simplify(info(v).category()) { - // TODO: handle the NV8 defined in the Unicode idna data set to allow - // for strict conformance to IDNA2008. - case valid, deviation: - case disallowed, mapped, unknown, ignored: - r, _ := utf8.DecodeRuneInString(s[i:]) - return s, runeError(r) - } - i += sz - } - return s, nil -} - -func validateAndMap(p *Profile, s string) (string, error) { - var ( - err error - b []byte - k int - ) - for i := 0; i < len(s); { - v, sz := trie.lookupString(s[i:]) - start := i - i += sz - // Copy bytes not copied so far. - switch p.simplify(info(v).category()) { - case valid: - continue - case disallowed: - if err == nil { - r, _ := utf8.DecodeRuneInString(s[start:]) - err = runeError(r) - } - continue - case mapped, deviation: - b = append(b, s[k:start]...) - b = info(v).appendMapping(b, s[start:i]) - case ignored: - b = append(b, s[k:start]...) - // drop the rune - case unknown: - b = append(b, s[k:start]...) - b = append(b, "\ufffd"...) - } - k = i - } - if k == 0 { - // No changes so far. - s = norm.NFC.String(s) - } else { - b = append(b, s[k:]...) - if norm.NFC.QuickSpan(b) != len(b) { - b = norm.NFC.Bytes(b) - } - // TODO: the punycode converters require strings as input. - s = string(b) - } - return s, err -} - -// A labelIter allows iterating over domain name labels. -type labelIter struct { - orig string - slice []string - curStart int - curEnd int - i int -} - -func (l *labelIter) reset() { - l.curStart = 0 - l.curEnd = 0 - l.i = 0 -} - -func (l *labelIter) done() bool { - return l.curStart >= len(l.orig) -} - -func (l *labelIter) result() string { - if l.slice != nil { - return strings.Join(l.slice, ".") - } - return l.orig -} - -func (l *labelIter) label() string { - if l.slice != nil { - return l.slice[l.i] - } - p := strings.IndexByte(l.orig[l.curStart:], '.') - l.curEnd = l.curStart + p - if p == -1 { - l.curEnd = len(l.orig) - } - return l.orig[l.curStart:l.curEnd] -} - -// next sets the value to the next label. It skips the last label if it is empty. -func (l *labelIter) next() { - l.i++ - if l.slice != nil { - if l.i >= len(l.slice) || l.i == len(l.slice)-1 && l.slice[l.i] == "" { - l.curStart = len(l.orig) - } - } else { - l.curStart = l.curEnd + 1 - if l.curStart == len(l.orig)-1 && l.orig[l.curStart] == '.' { - l.curStart = len(l.orig) - } - } -} - -func (l *labelIter) set(s string) { - if l.slice == nil { - l.slice = strings.Split(l.orig, ".") - } - l.slice[l.i] = s -} - -// acePrefix is the ASCII Compatible Encoding prefix. -const acePrefix = "xn--" - -func (p *Profile) simplify(cat category) category { - switch cat { - case disallowedSTD3Mapped: - if p.useSTD3Rules { - cat = disallowed - } else { - cat = mapped - } - case disallowedSTD3Valid: - if p.useSTD3Rules { - cat = disallowed - } else { - cat = valid - } - case deviation: - if !p.transitional { - cat = valid - } - case validNV8, validXV8: - // TODO: handle V2008 - cat = valid - } - return cat -} - -func validateFromPunycode(p *Profile, s string) error { - if !norm.NFC.IsNormalString(s) { - return &labelError{s, "V1"} - } - for i := 0; i < len(s); { - v, sz := trie.lookupString(s[i:]) - if c := p.simplify(info(v).category()); c != valid && c != deviation { - return &labelError{s, "V6"} - } - i += sz - } - return nil -} - -const ( - zwnj = "\u200c" - zwj = "\u200d" -) - -type joinState int8 - -const ( - stateStart joinState = iota - stateVirama - stateBefore - stateBeforeVirama - stateAfter - stateFAIL -) - -var joinStates = [][numJoinTypes]joinState{ - stateStart: { - joiningL: stateBefore, - joiningD: stateBefore, - joinZWNJ: stateFAIL, - joinZWJ: stateFAIL, - joinVirama: stateVirama, - }, - stateVirama: { - joiningL: stateBefore, - joiningD: stateBefore, - }, - stateBefore: { - joiningL: stateBefore, - joiningD: stateBefore, - joiningT: stateBefore, - joinZWNJ: stateAfter, - joinZWJ: stateFAIL, - joinVirama: stateBeforeVirama, - }, - stateBeforeVirama: { - joiningL: stateBefore, - joiningD: stateBefore, - joiningT: stateBefore, - }, - stateAfter: { - joiningL: stateFAIL, - joiningD: stateBefore, - joiningT: stateAfter, - joiningR: stateStart, - joinZWNJ: stateFAIL, - joinZWJ: stateFAIL, - joinVirama: stateAfter, // no-op as we can't accept joiners here - }, - stateFAIL: { - 0: stateFAIL, - joiningL: stateFAIL, - joiningD: stateFAIL, - joiningT: stateFAIL, - joiningR: stateFAIL, - joinZWNJ: stateFAIL, - joinZWJ: stateFAIL, - joinVirama: stateFAIL, - }, -} - -// validateLabel validates the criteria from Section 4.1. Item 1, 4, and 6 are -// already implicitly satisfied by the overall implementation. -func (p *Profile) validateLabel(s string) error { - if s == "" { - if p.verifyDNSLength { - return &labelError{s, "A4"} - } - return nil - } - if p.bidirule != nil && !p.bidirule(s) { - return &labelError{s, "B"} - } - if !p.validateLabels { - return nil - } - trie := p.trie // p.validateLabels is only set if trie is set. - if len(s) > 4 && s[2] == '-' && s[3] == '-' { - return &labelError{s, "V2"} - } - if s[0] == '-' || s[len(s)-1] == '-' { - return &labelError{s, "V3"} - } - // TODO: merge the use of this in the trie. - v, sz := trie.lookupString(s) - x := info(v) - if x.isModifier() { - return &labelError{s, "V5"} - } - // Quickly return in the absence of zero-width (non) joiners. - if strings.Index(s, zwj) == -1 && strings.Index(s, zwnj) == -1 { - return nil - } - st := stateStart - for i := 0; ; { - jt := x.joinType() - if s[i:i+sz] == zwj { - jt = joinZWJ - } else if s[i:i+sz] == zwnj { - jt = joinZWNJ - } - st = joinStates[st][jt] - if x.isViramaModifier() { - st = joinStates[st][joinVirama] - } - if i += sz; i == len(s) { - break - } - v, sz = trie.lookupString(s[i:]) - x = info(v) - } - if st == stateFAIL || st == stateAfter { - return &labelError{s, "C"} - } - return nil -} - -func ascii(s string) bool { - for i := 0; i < len(s); i++ { - if s[i] >= utf8.RuneSelf { - return false - } - } - return true -} diff --git a/vendor/golang.org/x/text/internal/export/idna/idna10.0.0.go b/vendor/golang.org/x/text/internal/export/idna/idna10.0.0.go new file mode 100644 index 0000000..92b4a39 --- /dev/null +++ b/vendor/golang.org/x/text/internal/export/idna/idna10.0.0.go @@ -0,0 +1,733 @@ +// Copyright 2016 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 go1.10 +//go:generate go run gen.go gen_trieval.go gen_common.go + +// Package idna implements IDNA2008 using the compatibility processing +// defined by UTS (Unicode Technical Standard) #46, which defines a standard to +// deal with the transition from IDNA2003. +// +// IDNA2008 (Internationalized Domain Names for Applications), is defined in RFC +// 5890, RFC 5891, RFC 5892, RFC 5893 and RFC 5894. +// UTS #46 is defined in http://www.unicode.org/reports/tr46. +// See http://unicode.org/cldr/utility/idna.jsp for a visualization of the +// differences between these two standards. +package idna // import "golang.org/x/text/internal/export/idna" + +import ( + "fmt" + "strings" + "unicode/utf8" + + "golang.org/x/text/secure/bidirule" + "golang.org/x/text/unicode/bidi" + "golang.org/x/text/unicode/norm" +) + +// NOTE: Unlike common practice in Go APIs, the functions will return a +// sanitized domain name in case of errors. Browsers sometimes use a partially +// evaluated string as lookup. +// TODO: the current error handling is, in my opinion, the least opinionated. +// Other strategies are also viable, though: +// Option 1) Return an empty string in case of error, but allow the user to +// specify explicitly which errors to ignore. +// Option 2) Return the partially evaluated string if it is itself a valid +// string, otherwise return the empty string in case of error. +// Option 3) Option 1 and 2. +// Option 4) Always return an empty string for now and implement Option 1 as +// needed, and document that the return string may not be empty in case of +// error in the future. +// I think Option 1 is best, but it is quite opinionated. + +// ToASCII is a wrapper for Punycode.ToASCII. +func ToASCII(s string) (string, error) { + return Punycode.process(s, true) +} + +// ToUnicode is a wrapper for Punycode.ToUnicode. +func ToUnicode(s string) (string, error) { + return Punycode.process(s, false) +} + +// An Option configures a Profile at creation time. +type Option func(*options) + +// Transitional sets a Profile to use the Transitional mapping as defined in UTS +// #46. This will cause, for example, "ß" to be mapped to "ss". Using the +// transitional mapping provides a compromise between IDNA2003 and IDNA2008 +// compatibility. It is used by most browsers when resolving domain names. This +// option is only meaningful if combined with MapForLookup. +func Transitional(transitional bool) Option { + return func(o *options) { o.transitional = true } +} + +// VerifyDNSLength sets whether a Profile should fail if any of the IDN parts +// are longer than allowed by the RFC. +func VerifyDNSLength(verify bool) Option { + return func(o *options) { o.verifyDNSLength = verify } +} + +// RemoveLeadingDots removes leading label separators. Leading runes that map to +// dots, such as U+3002 IDEOGRAPHIC FULL STOP, are removed as well. +// +// This is the behavior suggested by the UTS #46 and is adopted by some +// browsers. +func RemoveLeadingDots(remove bool) Option { + return func(o *options) { o.removeLeadingDots = remove } +} + +// ValidateLabels sets whether to check the mandatory label validation criteria +// as defined in Section 5.4 of RFC 5891. This includes testing for correct use +// of hyphens ('-'), normalization, validity of runes, and the context rules. +func ValidateLabels(enable bool) Option { + return func(o *options) { + // Don't override existing mappings, but set one that at least checks + // normalization if it is not set. + if o.mapping == nil && enable { + o.mapping = normalize + } + o.trie = trie + o.validateLabels = enable + o.fromPuny = validateFromPunycode + } +} + +// StrictDomainName limits the set of permissible ASCII characters to those +// allowed in domain names as defined in RFC 1034 (A-Z, a-z, 0-9 and the +// hyphen). This is set by default for MapForLookup and ValidateForRegistration. +// +// This option is useful, for instance, for browsers that allow characters +// outside this range, for example a '_' (U+005F LOW LINE). See +// http://www.rfc-editor.org/std/std3.txt for more details This option +// corresponds to the UseSTD3ASCIIRules option in UTS #46. +func StrictDomainName(use bool) Option { + return func(o *options) { + o.trie = trie + o.useSTD3Rules = use + o.fromPuny = validateFromPunycode + } +} + +// NOTE: the following options pull in tables. The tables should not be linked +// in as long as the options are not used. + +// BidiRule enables the Bidi rule as defined in RFC 5893. Any application +// that relies on proper validation of labels should include this rule. +func BidiRule() Option { + return func(o *options) { o.bidirule = bidirule.ValidString } +} + +// ValidateForRegistration sets validation options to verify that a given IDN is +// properly formatted for registration as defined by Section 4 of RFC 5891. +func ValidateForRegistration() Option { + return func(o *options) { + o.mapping = validateRegistration + StrictDomainName(true)(o) + ValidateLabels(true)(o) + VerifyDNSLength(true)(o) + BidiRule()(o) + } +} + +// MapForLookup sets validation and mapping options such that a given IDN is +// transformed for domain name lookup according to the requirements set out in +// Section 5 of RFC 5891. The mappings follow the recommendations of RFC 5894, +// RFC 5895 and UTS 46. It does not add the Bidi Rule. Use the BidiRule option +// to add this check. +// +// The mappings include normalization and mapping case, width and other +// compatibility mappings. +func MapForLookup() Option { + return func(o *options) { + o.mapping = validateAndMap + StrictDomainName(true)(o) + ValidateLabels(true)(o) + } +} + +type options struct { + transitional bool + useSTD3Rules bool + validateLabels bool + verifyDNSLength bool + removeLeadingDots bool + + trie *idnaTrie + + // fromPuny calls validation rules when converting A-labels to U-labels. + fromPuny func(p *Profile, s string) error + + // mapping implements a validation and mapping step as defined in RFC 5895 + // or UTS 46, tailored to, for example, domain registration or lookup. + mapping func(p *Profile, s string) (mapped string, isBidi bool, err error) + + // bidirule, if specified, checks whether s conforms to the Bidi Rule + // defined in RFC 5893. + bidirule func(s string) bool +} + +// A Profile defines the configuration of an IDNA mapper. +type Profile struct { + options +} + +func apply(o *options, opts []Option) { + for _, f := range opts { + f(o) + } +} + +// New creates a new Profile. +// +// With no options, the returned Profile is the most permissive and equals the +// Punycode Profile. Options can be passed to further restrict the Profile. The +// MapForLookup and ValidateForRegistration options set a collection of options, +// for lookup and registration purposes respectively, which can be tailored by +// adding more fine-grained options, where later options override earlier +// options. +func New(o ...Option) *Profile { + p := &Profile{} + apply(&p.options, o) + return p +} + +// ToASCII converts a domain or domain label to its ASCII form. For example, +// ToASCII("bücher.example.com") is "xn--bcher-kva.example.com", and +// ToASCII("golang") is "golang". If an error is encountered it will return +// an error and a (partially) processed result. +func (p *Profile) ToASCII(s string) (string, error) { + return p.process(s, true) +} + +// ToUnicode converts a domain or domain label to its Unicode form. For example, +// ToUnicode("xn--bcher-kva.example.com") is "bücher.example.com", and +// ToUnicode("golang") is "golang". If an error is encountered it will return +// an error and a (partially) processed result. +func (p *Profile) ToUnicode(s string) (string, error) { + pp := *p + pp.transitional = false + return pp.process(s, false) +} + +// String reports a string with a description of the profile for debugging +// purposes. The string format may change with different versions. +func (p *Profile) String() string { + s := "" + if p.transitional { + s = "Transitional" + } else { + s = "NonTransitional" + } + if p.useSTD3Rules { + s += ":UseSTD3Rules" + } + if p.validateLabels { + s += ":ValidateLabels" + } + if p.verifyDNSLength { + s += ":VerifyDNSLength" + } + return s +} + +var ( + // Punycode is a Profile that does raw punycode processing with a minimum + // of validation. + Punycode *Profile = punycode + + // Lookup is the recommended profile for looking up domain names, according + // to Section 5 of RFC 5891. The exact configuration of this profile may + // change over time. + Lookup *Profile = lookup + + // Display is the recommended profile for displaying domain names. + // The configuration of this profile may change over time. + Display *Profile = display + + // Registration is the recommended profile for checking whether a given + // IDN is valid for registration, according to Section 4 of RFC 5891. + Registration *Profile = registration + + punycode = &Profile{} + lookup = &Profile{options{ + transitional: true, + useSTD3Rules: true, + validateLabels: true, + trie: trie, + fromPuny: validateFromPunycode, + mapping: validateAndMap, + bidirule: bidirule.ValidString, + }} + display = &Profile{options{ + useSTD3Rules: true, + validateLabels: true, + trie: trie, + fromPuny: validateFromPunycode, + mapping: validateAndMap, + bidirule: bidirule.ValidString, + }} + registration = &Profile{options{ + useSTD3Rules: true, + validateLabels: true, + verifyDNSLength: true, + trie: trie, + fromPuny: validateFromPunycode, + mapping: validateRegistration, + bidirule: bidirule.ValidString, + }} + + // TODO: profiles + // Register: recommended for approving domain names: don't do any mappings + // but rather reject on invalid input. Bundle or block deviation characters. +) + +type labelError struct{ label, code_ string } + +func (e labelError) code() string { return e.code_ } +func (e labelError) Error() string { + return fmt.Sprintf("idna: invalid label %q", e.label) +} + +type runeError rune + +func (e runeError) code() string { return "P1" } +func (e runeError) Error() string { + return fmt.Sprintf("idna: disallowed rune %U", e) +} + +// process implements the algorithm described in section 4 of UTS #46, +// see http://www.unicode.org/reports/tr46. +func (p *Profile) process(s string, toASCII bool) (string, error) { + var err error + var isBidi bool + if p.mapping != nil { + s, isBidi, err = p.mapping(p, s) + } + // Remove leading empty labels. + if p.removeLeadingDots { + for ; len(s) > 0 && s[0] == '.'; s = s[1:] { + } + } + // TODO: allow for a quick check of the tables data. + // It seems like we should only create this error on ToASCII, but the + // UTS 46 conformance tests suggests we should always check this. + if err == nil && p.verifyDNSLength && s == "" { + err = &labelError{s, "A4"} + } + labels := labelIter{orig: s} + for ; !labels.done(); labels.next() { + label := labels.label() + if label == "" { + // Empty labels are not okay. The label iterator skips the last + // label if it is empty. + if err == nil && p.verifyDNSLength { + err = &labelError{s, "A4"} + } + continue + } + if strings.HasPrefix(label, acePrefix) { + u, err2 := decode(label[len(acePrefix):]) + if err2 != nil { + if err == nil { + err = err2 + } + // Spec says keep the old label. + continue + } + isBidi = isBidi || bidirule.DirectionString(u) != bidi.LeftToRight + labels.set(u) + if err == nil && p.validateLabels { + err = p.fromPuny(p, u) + } + if err == nil { + // This should be called on NonTransitional, according to the + // spec, but that currently does not have any effect. Use the + // original profile to preserve options. + err = p.validateLabel(u) + } + } else if err == nil { + err = p.validateLabel(label) + } + } + if isBidi && p.bidirule != nil && err == nil { + for labels.reset(); !labels.done(); labels.next() { + if !p.bidirule(labels.label()) { + err = &labelError{s, "B"} + break + } + } + } + if toASCII { + for labels.reset(); !labels.done(); labels.next() { + label := labels.label() + if !ascii(label) { + a, err2 := encode(acePrefix, label) + if err == nil { + err = err2 + } + label = a + labels.set(a) + } + n := len(label) + if p.verifyDNSLength && err == nil && (n == 0 || n > 63) { + err = &labelError{label, "A4"} + } + } + } + s = labels.result() + if toASCII && p.verifyDNSLength && err == nil { + // Compute the length of the domain name minus the root label and its dot. + n := len(s) + if n > 0 && s[n-1] == '.' { + n-- + } + if len(s) < 1 || n > 253 { + err = &labelError{s, "A4"} + } + } + return s, err +} + +func normalize(p *Profile, s string) (mapped string, isBidi bool, err error) { + // TODO: consider first doing a quick check to see if any of these checks + // need to be done. This will make it slower in the general case, but + // faster in the common case. + mapped = norm.NFC.String(s) + isBidi = bidirule.DirectionString(mapped) == bidi.RightToLeft + return mapped, isBidi, nil +} + +func validateRegistration(p *Profile, s string) (idem string, bidi bool, err error) { + // TODO: filter need for normalization in loop below. + if !norm.NFC.IsNormalString(s) { + return s, false, &labelError{s, "V1"} + } + for i := 0; i < len(s); { + v, sz := trie.lookupString(s[i:]) + if sz == 0 { + return s, bidi, runeError(utf8.RuneError) + } + bidi = bidi || info(v).isBidi(s[i:]) + // Copy bytes not copied so far. + switch p.simplify(info(v).category()) { + // TODO: handle the NV8 defined in the Unicode idna data set to allow + // for strict conformance to IDNA2008. + case valid, deviation: + case disallowed, mapped, unknown, ignored: + r, _ := utf8.DecodeRuneInString(s[i:]) + return s, bidi, runeError(r) + } + i += sz + } + return s, bidi, nil +} + +func (c info) isBidi(s string) bool { + if !c.isMapped() { + return c&attributesMask == rtl + } + // TODO: also store bidi info for mapped data. This is possible, but a bit + // cumbersome and not for the common case. + p, _ := bidi.LookupString(s) + switch p.Class() { + case bidi.R, bidi.AL, bidi.AN: + return true + } + return false +} + +func validateAndMap(p *Profile, s string) (vm string, bidi bool, err error) { + var ( + b []byte + k int + ) + // combinedInfoBits contains the or-ed bits of all runes. We use this + // to derive the mayNeedNorm bit later. This may trigger normalization + // overeagerly, but it will not do so in the common case. The end result + // is another 10% saving on BenchmarkProfile for the common case. + var combinedInfoBits info + for i := 0; i < len(s); { + v, sz := trie.lookupString(s[i:]) + if sz == 0 { + b = append(b, s[k:i]...) + b = append(b, "\ufffd"...) + k = len(s) + if err == nil { + err = runeError(utf8.RuneError) + } + break + } + combinedInfoBits |= info(v) + bidi = bidi || info(v).isBidi(s[i:]) + start := i + i += sz + // Copy bytes not copied so far. + switch p.simplify(info(v).category()) { + case valid: + continue + case disallowed: + if err == nil { + r, _ := utf8.DecodeRuneInString(s[start:]) + err = runeError(r) + } + continue + case mapped, deviation: + b = append(b, s[k:start]...) + b = info(v).appendMapping(b, s[start:i]) + case ignored: + b = append(b, s[k:start]...) + // drop the rune + case unknown: + b = append(b, s[k:start]...) + b = append(b, "\ufffd"...) + } + k = i + } + if k == 0 { + // No changes so far. + if combinedInfoBits&mayNeedNorm != 0 { + s = norm.NFC.String(s) + } + } else { + b = append(b, s[k:]...) + if norm.NFC.QuickSpan(b) != len(b) { + b = norm.NFC.Bytes(b) + } + // TODO: the punycode converters require strings as input. + s = string(b) + } + return s, bidi, err +} + +// A labelIter allows iterating over domain name labels. +type labelIter struct { + orig string + slice []string + curStart int + curEnd int + i int +} + +func (l *labelIter) reset() { + l.curStart = 0 + l.curEnd = 0 + l.i = 0 +} + +func (l *labelIter) done() bool { + return l.curStart >= len(l.orig) +} + +func (l *labelIter) result() string { + if l.slice != nil { + return strings.Join(l.slice, ".") + } + return l.orig +} + +func (l *labelIter) label() string { + if l.slice != nil { + return l.slice[l.i] + } + p := strings.IndexByte(l.orig[l.curStart:], '.') + l.curEnd = l.curStart + p + if p == -1 { + l.curEnd = len(l.orig) + } + return l.orig[l.curStart:l.curEnd] +} + +// next sets the value to the next label. It skips the last label if it is empty. +func (l *labelIter) next() { + l.i++ + if l.slice != nil { + if l.i >= len(l.slice) || l.i == len(l.slice)-1 && l.slice[l.i] == "" { + l.curStart = len(l.orig) + } + } else { + l.curStart = l.curEnd + 1 + if l.curStart == len(l.orig)-1 && l.orig[l.curStart] == '.' { + l.curStart = len(l.orig) + } + } +} + +func (l *labelIter) set(s string) { + if l.slice == nil { + l.slice = strings.Split(l.orig, ".") + } + l.slice[l.i] = s +} + +// acePrefix is the ASCII Compatible Encoding prefix. +const acePrefix = "xn--" + +func (p *Profile) simplify(cat category) category { + switch cat { + case disallowedSTD3Mapped: + if p.useSTD3Rules { + cat = disallowed + } else { + cat = mapped + } + case disallowedSTD3Valid: + if p.useSTD3Rules { + cat = disallowed + } else { + cat = valid + } + case deviation: + if !p.transitional { + cat = valid + } + case validNV8, validXV8: + // TODO: handle V2008 + cat = valid + } + return cat +} + +func validateFromPunycode(p *Profile, s string) error { + if !norm.NFC.IsNormalString(s) { + return &labelError{s, "V1"} + } + // TODO: detect whether string may have to be normalized in the following + // loop. + for i := 0; i < len(s); { + v, sz := trie.lookupString(s[i:]) + if sz == 0 { + return runeError(utf8.RuneError) + } + if c := p.simplify(info(v).category()); c != valid && c != deviation { + return &labelError{s, "V6"} + } + i += sz + } + return nil +} + +const ( + zwnj = "\u200c" + zwj = "\u200d" +) + +type joinState int8 + +const ( + stateStart joinState = iota + stateVirama + stateBefore + stateBeforeVirama + stateAfter + stateFAIL +) + +var joinStates = [][numJoinTypes]joinState{ + stateStart: { + joiningL: stateBefore, + joiningD: stateBefore, + joinZWNJ: stateFAIL, + joinZWJ: stateFAIL, + joinVirama: stateVirama, + }, + stateVirama: { + joiningL: stateBefore, + joiningD: stateBefore, + }, + stateBefore: { + joiningL: stateBefore, + joiningD: stateBefore, + joiningT: stateBefore, + joinZWNJ: stateAfter, + joinZWJ: stateFAIL, + joinVirama: stateBeforeVirama, + }, + stateBeforeVirama: { + joiningL: stateBefore, + joiningD: stateBefore, + joiningT: stateBefore, + }, + stateAfter: { + joiningL: stateFAIL, + joiningD: stateBefore, + joiningT: stateAfter, + joiningR: stateStart, + joinZWNJ: stateFAIL, + joinZWJ: stateFAIL, + joinVirama: stateAfter, // no-op as we can't accept joiners here + }, + stateFAIL: { + 0: stateFAIL, + joiningL: stateFAIL, + joiningD: stateFAIL, + joiningT: stateFAIL, + joiningR: stateFAIL, + joinZWNJ: stateFAIL, + joinZWJ: stateFAIL, + joinVirama: stateFAIL, + }, +} + +// validateLabel validates the criteria from Section 4.1. Item 1, 4, and 6 are +// already implicitly satisfied by the overall implementation. +func (p *Profile) validateLabel(s string) (err error) { + if s == "" { + if p.verifyDNSLength { + return &labelError{s, "A4"} + } + return nil + } + if !p.validateLabels { + return nil + } + trie := p.trie // p.validateLabels is only set if trie is set. + if len(s) > 4 && s[2] == '-' && s[3] == '-' { + return &labelError{s, "V2"} + } + if s[0] == '-' || s[len(s)-1] == '-' { + return &labelError{s, "V3"} + } + // TODO: merge the use of this in the trie. + v, sz := trie.lookupString(s) + x := info(v) + if x.isModifier() { + return &labelError{s, "V5"} + } + // Quickly return in the absence of zero-width (non) joiners. + if strings.Index(s, zwj) == -1 && strings.Index(s, zwnj) == -1 { + return nil + } + st := stateStart + for i := 0; ; { + jt := x.joinType() + if s[i:i+sz] == zwj { + jt = joinZWJ + } else if s[i:i+sz] == zwnj { + jt = joinZWNJ + } + st = joinStates[st][jt] + if x.isViramaModifier() { + st = joinStates[st][joinVirama] + } + if i += sz; i == len(s) { + break + } + v, sz = trie.lookupString(s[i:]) + x = info(v) + } + if st == stateFAIL || st == stateAfter { + return &labelError{s, "C"} + } + return nil +} + +func ascii(s string) bool { + for i := 0; i < len(s); i++ { + if s[i] >= utf8.RuneSelf { + return false + } + } + return true +} diff --git a/vendor/golang.org/x/text/internal/export/idna/idna10.0.0_test.go b/vendor/golang.org/x/text/internal/export/idna/idna10.0.0_test.go new file mode 100644 index 0000000..d039091 --- /dev/null +++ b/vendor/golang.org/x/text/internal/export/idna/idna10.0.0_test.go @@ -0,0 +1,140 @@ +// Copyright 2016 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 go1.10 + +package idna + +import "testing" + +// TestLabelErrors tests strings returned in case of error. All results should +// be identical to the reference implementation and can be verified at +// http://unicode.org/cldr/utility/idna.jsp. The reference implementation, +// however, seems to not display Bidi and ContextJ errors. +// +// In some cases the behavior of browsers is added as a comment. In all cases, +// whenever a resolve search returns an error here, Chrome will treat the input +// string as a search string (including those for Bidi and Context J errors), +// unless noted otherwise. +func TestLabelErrors(t *testing.T) { + encode := func(s string) string { s, _ = encode(acePrefix, s); return s } + type kind struct { + name string + f func(string) (string, error) + } + punyA := kind{"PunycodeA", punycode.ToASCII} + resolve := kind{"ResolveA", Lookup.ToASCII} + display := kind{"ToUnicode", Display.ToUnicode} + p := New(VerifyDNSLength(true), MapForLookup(), BidiRule()) + lengthU := kind{"CheckLengthU", p.ToUnicode} + lengthA := kind{"CheckLengthA", p.ToASCII} + p = New(MapForLookup(), StrictDomainName(false)) + std3 := kind{"STD3", p.ToASCII} + + testCases := []struct { + kind + input string + want string + wantErr string + }{ + {lengthU, "", "", "A4"}, // From UTS 46 conformance test. + {lengthA, "", "", "A4"}, + + {lengthU, "xn--", "", "A4"}, + {lengthU, "foo.xn--", "foo.", "A4"}, // TODO: is dropping xn-- correct? + {lengthU, "xn--.foo", ".foo", "A4"}, + {lengthU, "foo.xn--.bar", "foo..bar", "A4"}, + + {display, "xn--", "", ""}, + {display, "foo.xn--", "foo.", ""}, // TODO: is dropping xn-- correct? + {display, "xn--.foo", ".foo", ""}, + {display, "foo.xn--.bar", "foo..bar", ""}, + + {lengthA, "a..b", "a..b", "A4"}, + {punyA, ".b", ".b", ""}, + // For backwards compatibility, the Punycode profile does not map runes. + {punyA, "\u3002b", "xn--b-83t", ""}, + {punyA, "..b", "..b", ""}, + + {lengthA, ".b", ".b", "A4"}, + {lengthA, "\u3002b", ".b", "A4"}, + {lengthA, "..b", "..b", "A4"}, + {lengthA, "b..", "b..", ""}, + + // Sharpened Bidi rules for Unicode 10.0.0. Apply for ALL labels in ANY + // of the labels is RTL. + {lengthA, "\ufe05\u3002\u3002\U0002603e\u1ce0", "..xn--t6f5138v", "A4"}, + {lengthA, "FAX\u2a77\U0001d186\u3002\U0001e942\U000e0181\u180c", "", "B6"}, + + {resolve, "a..b", "a..b", ""}, + // Note that leading dots are not stripped. This is to be consistent + // with the Punycode profile as well as the conformance test. + {resolve, ".b", ".b", ""}, + {resolve, "\u3002b", ".b", ""}, + {resolve, "..b", "..b", ""}, + {resolve, "b..", "b..", ""}, + {resolve, "\xed", "", "P1"}, + + // Raw punycode + {punyA, "", "", ""}, + {punyA, "*.foo.com", "*.foo.com", ""}, + {punyA, "Foo.com", "Foo.com", ""}, + + // STD3 rules + {display, "*.foo.com", "*.foo.com", "P1"}, + {std3, "*.foo.com", "*.foo.com", ""}, + + // Don't map U+2490 (DIGIT NINE FULL STOP). This is the behavior of + // Chrome, Safari, and IE. Firefox will first map ⒐ to 9. and return + // lab9.be. + {resolve, "lab⒐be", "xn--labbe-zh9b", "P1"}, // encode("lab⒐be") + {display, "lab⒐be", "lab⒐be", "P1"}, + + {resolve, "plan⒐faß.de", "xn--planfass-c31e.de", "P1"}, // encode("plan⒐fass") + ".de" + {display, "Plan⒐faß.de", "plan⒐faß.de", "P1"}, + + // Chrome 54.0 recognizes the error and treats this input verbatim as a + // search string. + // Safari 10.0 (non-conform spec) decomposes "⒈" and computes the + // punycode on the result using transitional mapping. + // Firefox 49.0.1 goes haywire on this string and prints a bunch of what + // seems to be nested punycode encodings. + {resolve, "日本⒈co.ßßß.de", "xn--co-wuw5954azlb.ssssss.de", "P1"}, + {display, "日本⒈co.ßßß.de", "日本⒈co.ßßß.de", "P1"}, + + {resolve, "a\u200Cb", "ab", ""}, + {display, "a\u200Cb", "a\u200Cb", "C"}, + + {resolve, encode("a\u200Cb"), encode("a\u200Cb"), "C"}, + {display, "a\u200Cb", "a\u200Cb", "C"}, + + {resolve, "grﻋﺮﺑﻲ.de", "xn--gr-gtd9a1b0g.de", "B"}, + { + // Notice how the string gets transformed, even with an error. + // Chrome will use the original string if it finds an error, so not + // the transformed one. + display, + "gr\ufecb\ufeae\ufe91\ufef2.de", + "gr\u0639\u0631\u0628\u064a.de", + "B", + }, + + {resolve, "\u0671.\u03c3\u07dc", "xn--qib.xn--4xa21s", "B"}, // ٱ.σߜ + {display, "\u0671.\u03c3\u07dc", "\u0671.\u03c3\u07dc", "B"}, + + // normalize input + {resolve, "a\u0323\u0322", "xn--jta191l", ""}, // ạ̢ + {display, "a\u0323\u0322", "\u1ea1\u0322", ""}, + + // Non-normalized strings are not normalized when they originate from + // punycode. Despite the error, Chrome, Safari and Firefox will attempt + // to look up the input punycode. + {resolve, encode("a\u0323\u0322") + ".com", "xn--a-tdbc.com", "V1"}, + {display, encode("a\u0323\u0322") + ".com", "a\u0323\u0322.com", "V1"}, + } + + for _, tc := range testCases { + doTest(t, tc.f, tc.name, tc.input, tc.want, tc.wantErr) + } +} diff --git a/vendor/golang.org/x/text/internal/export/idna/idna9.0.0.go b/vendor/golang.org/x/text/internal/export/idna/idna9.0.0.go new file mode 100644 index 0000000..c7d06c8 --- /dev/null +++ b/vendor/golang.org/x/text/internal/export/idna/idna9.0.0.go @@ -0,0 +1,681 @@ +// Copyright 2016 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 !go1.10 +//go:generate go run gen.go gen_trieval.go gen_common.go + +// Package idna implements IDNA2008 using the compatibility processing +// defined by UTS (Unicode Technical Standard) #46, which defines a standard to +// deal with the transition from IDNA2003. +// +// IDNA2008 (Internationalized Domain Names for Applications), is defined in RFC +// 5890, RFC 5891, RFC 5892, RFC 5893 and RFC 5894. +// UTS #46 is defined in http://www.unicode.org/reports/tr46. +// See http://unicode.org/cldr/utility/idna.jsp for a visualization of the +// differences between these two standards. +package idna // import "golang.org/x/text/internal/export/idna" + +import ( + "fmt" + "strings" + "unicode/utf8" + + "golang.org/x/text/secure/bidirule" + "golang.org/x/text/unicode/norm" +) + +// NOTE: Unlike common practice in Go APIs, the functions will return a +// sanitized domain name in case of errors. Browsers sometimes use a partially +// evaluated string as lookup. +// TODO: the current error handling is, in my opinion, the least opinionated. +// Other strategies are also viable, though: +// Option 1) Return an empty string in case of error, but allow the user to +// specify explicitly which errors to ignore. +// Option 2) Return the partially evaluated string if it is itself a valid +// string, otherwise return the empty string in case of error. +// Option 3) Option 1 and 2. +// Option 4) Always return an empty string for now and implement Option 1 as +// needed, and document that the return string may not be empty in case of +// error in the future. +// I think Option 1 is best, but it is quite opinionated. + +// ToASCII is a wrapper for Punycode.ToASCII. +func ToASCII(s string) (string, error) { + return Punycode.process(s, true) +} + +// ToUnicode is a wrapper for Punycode.ToUnicode. +func ToUnicode(s string) (string, error) { + return Punycode.process(s, false) +} + +// An Option configures a Profile at creation time. +type Option func(*options) + +// Transitional sets a Profile to use the Transitional mapping as defined in UTS +// #46. This will cause, for example, "ß" to be mapped to "ss". Using the +// transitional mapping provides a compromise between IDNA2003 and IDNA2008 +// compatibility. It is used by most browsers when resolving domain names. This +// option is only meaningful if combined with MapForLookup. +func Transitional(transitional bool) Option { + return func(o *options) { o.transitional = true } +} + +// VerifyDNSLength sets whether a Profile should fail if any of the IDN parts +// are longer than allowed by the RFC. +func VerifyDNSLength(verify bool) Option { + return func(o *options) { o.verifyDNSLength = verify } +} + +// RemoveLeadingDots removes leading label separators. Leading runes that map to +// dots, such as U+3002 IDEOGRAPHIC FULL STOP, are removed as well. +// +// This is the behavior suggested by the UTS #46 and is adopted by some +// browsers. +func RemoveLeadingDots(remove bool) Option { + return func(o *options) { o.removeLeadingDots = remove } +} + +// ValidateLabels sets whether to check the mandatory label validation criteria +// as defined in Section 5.4 of RFC 5891. This includes testing for correct use +// of hyphens ('-'), normalization, validity of runes, and the context rules. +func ValidateLabels(enable bool) Option { + return func(o *options) { + // Don't override existing mappings, but set one that at least checks + // normalization if it is not set. + if o.mapping == nil && enable { + o.mapping = normalize + } + o.trie = trie + o.validateLabels = enable + o.fromPuny = validateFromPunycode + } +} + +// StrictDomainName limits the set of permissable ASCII characters to those +// allowed in domain names as defined in RFC 1034 (A-Z, a-z, 0-9 and the +// hyphen). This is set by default for MapForLookup and ValidateForRegistration. +// +// This option is useful, for instance, for browsers that allow characters +// outside this range, for example a '_' (U+005F LOW LINE). See +// http://www.rfc-editor.org/std/std3.txt for more details This option +// corresponds to the UseSTD3ASCIIRules option in UTS #46. +func StrictDomainName(use bool) Option { + return func(o *options) { + o.trie = trie + o.useSTD3Rules = use + o.fromPuny = validateFromPunycode + } +} + +// NOTE: the following options pull in tables. The tables should not be linked +// in as long as the options are not used. + +// BidiRule enables the Bidi rule as defined in RFC 5893. Any application +// that relies on proper validation of labels should include this rule. +func BidiRule() Option { + return func(o *options) { o.bidirule = bidirule.ValidString } +} + +// ValidateForRegistration sets validation options to verify that a given IDN is +// properly formatted for registration as defined by Section 4 of RFC 5891. +func ValidateForRegistration() Option { + return func(o *options) { + o.mapping = validateRegistration + StrictDomainName(true)(o) + ValidateLabels(true)(o) + VerifyDNSLength(true)(o) + BidiRule()(o) + } +} + +// MapForLookup sets validation and mapping options such that a given IDN is +// transformed for domain name lookup according to the requirements set out in +// Section 5 of RFC 5891. The mappings follow the recommendations of RFC 5894, +// RFC 5895 and UTS 46. It does not add the Bidi Rule. Use the BidiRule option +// to add this check. +// +// The mappings include normalization and mapping case, width and other +// compatibility mappings. +func MapForLookup() Option { + return func(o *options) { + o.mapping = validateAndMap + StrictDomainName(true)(o) + ValidateLabels(true)(o) + RemoveLeadingDots(true)(o) + } +} + +type options struct { + transitional bool + useSTD3Rules bool + validateLabels bool + verifyDNSLength bool + removeLeadingDots bool + + trie *idnaTrie + + // fromPuny calls validation rules when converting A-labels to U-labels. + fromPuny func(p *Profile, s string) error + + // mapping implements a validation and mapping step as defined in RFC 5895 + // or UTS 46, tailored to, for example, domain registration or lookup. + mapping func(p *Profile, s string) (string, error) + + // bidirule, if specified, checks whether s conforms to the Bidi Rule + // defined in RFC 5893. + bidirule func(s string) bool +} + +// A Profile defines the configuration of a IDNA mapper. +type Profile struct { + options +} + +func apply(o *options, opts []Option) { + for _, f := range opts { + f(o) + } +} + +// New creates a new Profile. +// +// With no options, the returned Profile is the most permissive and equals the +// Punycode Profile. Options can be passed to further restrict the Profile. The +// MapForLookup and ValidateForRegistration options set a collection of options, +// for lookup and registration purposes respectively, which can be tailored by +// adding more fine-grained options, where later options override earlier +// options. +func New(o ...Option) *Profile { + p := &Profile{} + apply(&p.options, o) + return p +} + +// ToASCII converts a domain or domain label to its ASCII form. For example, +// ToASCII("bücher.example.com") is "xn--bcher-kva.example.com", and +// ToASCII("golang") is "golang". If an error is encountered it will return +// an error and a (partially) processed result. +func (p *Profile) ToASCII(s string) (string, error) { + return p.process(s, true) +} + +// ToUnicode converts a domain or domain label to its Unicode form. For example, +// ToUnicode("xn--bcher-kva.example.com") is "bücher.example.com", and +// ToUnicode("golang") is "golang". If an error is encountered it will return +// an error and a (partially) processed result. +func (p *Profile) ToUnicode(s string) (string, error) { + pp := *p + pp.transitional = false + return pp.process(s, false) +} + +// String reports a string with a description of the profile for debugging +// purposes. The string format may change with different versions. +func (p *Profile) String() string { + s := "" + if p.transitional { + s = "Transitional" + } else { + s = "NonTransitional" + } + if p.useSTD3Rules { + s += ":UseSTD3Rules" + } + if p.validateLabels { + s += ":ValidateLabels" + } + if p.verifyDNSLength { + s += ":VerifyDNSLength" + } + return s +} + +var ( + // Punycode is a Profile that does raw punycode processing with a minimum + // of validation. + Punycode *Profile = punycode + + // Lookup is the recommended profile for looking up domain names, according + // to Section 5 of RFC 5891. The exact configuration of this profile may + // change over time. + Lookup *Profile = lookup + + // Display is the recommended profile for displaying domain names. + // The configuration of this profile may change over time. + Display *Profile = display + + // Registration is the recommended profile for checking whether a given + // IDN is valid for registration, according to Section 4 of RFC 5891. + Registration *Profile = registration + + punycode = &Profile{} + lookup = &Profile{options{ + transitional: true, + useSTD3Rules: true, + validateLabels: true, + removeLeadingDots: true, + trie: trie, + fromPuny: validateFromPunycode, + mapping: validateAndMap, + bidirule: bidirule.ValidString, + }} + display = &Profile{options{ + useSTD3Rules: true, + validateLabels: true, + removeLeadingDots: true, + trie: trie, + fromPuny: validateFromPunycode, + mapping: validateAndMap, + bidirule: bidirule.ValidString, + }} + registration = &Profile{options{ + useSTD3Rules: true, + validateLabels: true, + verifyDNSLength: true, + trie: trie, + fromPuny: validateFromPunycode, + mapping: validateRegistration, + bidirule: bidirule.ValidString, + }} + + // TODO: profiles + // Register: recommended for approving domain names: don't do any mappings + // but rather reject on invalid input. Bundle or block deviation characters. +) + +type labelError struct{ label, code_ string } + +func (e labelError) code() string { return e.code_ } +func (e labelError) Error() string { + return fmt.Sprintf("idna: invalid label %q", e.label) +} + +type runeError rune + +func (e runeError) code() string { return "P1" } +func (e runeError) Error() string { + return fmt.Sprintf("idna: disallowed rune %U", e) +} + +// process implements the algorithm described in section 4 of UTS #46, +// see http://www.unicode.org/reports/tr46. +func (p *Profile) process(s string, toASCII bool) (string, error) { + var err error + if p.mapping != nil { + s, err = p.mapping(p, s) + } + // Remove leading empty labels. + if p.removeLeadingDots { + for ; len(s) > 0 && s[0] == '.'; s = s[1:] { + } + } + // It seems like we should only create this error on ToASCII, but the + // UTS 46 conformance tests suggests we should always check this. + if err == nil && p.verifyDNSLength && s == "" { + err = &labelError{s, "A4"} + } + labels := labelIter{orig: s} + for ; !labels.done(); labels.next() { + label := labels.label() + if label == "" { + // Empty labels are not okay. The label iterator skips the last + // label if it is empty. + if err == nil && p.verifyDNSLength { + err = &labelError{s, "A4"} + } + continue + } + if strings.HasPrefix(label, acePrefix) { + u, err2 := decode(label[len(acePrefix):]) + if err2 != nil { + if err == nil { + err = err2 + } + // Spec says keep the old label. + continue + } + labels.set(u) + if err == nil && p.validateLabels { + err = p.fromPuny(p, u) + } + if err == nil { + // This should be called on NonTransitional, according to the + // spec, but that currently does not have any effect. Use the + // original profile to preserve options. + err = p.validateLabel(u) + } + } else if err == nil { + err = p.validateLabel(label) + } + } + if toASCII { + for labels.reset(); !labels.done(); labels.next() { + label := labels.label() + if !ascii(label) { + a, err2 := encode(acePrefix, label) + if err == nil { + err = err2 + } + label = a + labels.set(a) + } + n := len(label) + if p.verifyDNSLength && err == nil && (n == 0 || n > 63) { + err = &labelError{label, "A4"} + } + } + } + s = labels.result() + if toASCII && p.verifyDNSLength && err == nil { + // Compute the length of the domain name minus the root label and its dot. + n := len(s) + if n > 0 && s[n-1] == '.' { + n-- + } + if len(s) < 1 || n > 253 { + err = &labelError{s, "A4"} + } + } + return s, err +} + +func normalize(p *Profile, s string) (string, error) { + return norm.NFC.String(s), nil +} + +func validateRegistration(p *Profile, s string) (string, error) { + if !norm.NFC.IsNormalString(s) { + return s, &labelError{s, "V1"} + } + for i := 0; i < len(s); { + v, sz := trie.lookupString(s[i:]) + // Copy bytes not copied so far. + switch p.simplify(info(v).category()) { + // TODO: handle the NV8 defined in the Unicode idna data set to allow + // for strict conformance to IDNA2008. + case valid, deviation: + case disallowed, mapped, unknown, ignored: + r, _ := utf8.DecodeRuneInString(s[i:]) + return s, runeError(r) + } + i += sz + } + return s, nil +} + +func validateAndMap(p *Profile, s string) (string, error) { + var ( + err error + b []byte + k int + ) + for i := 0; i < len(s); { + v, sz := trie.lookupString(s[i:]) + start := i + i += sz + // Copy bytes not copied so far. + switch p.simplify(info(v).category()) { + case valid: + continue + case disallowed: + if err == nil { + r, _ := utf8.DecodeRuneInString(s[start:]) + err = runeError(r) + } + continue + case mapped, deviation: + b = append(b, s[k:start]...) + b = info(v).appendMapping(b, s[start:i]) + case ignored: + b = append(b, s[k:start]...) + // drop the rune + case unknown: + b = append(b, s[k:start]...) + b = append(b, "\ufffd"...) + } + k = i + } + if k == 0 { + // No changes so far. + s = norm.NFC.String(s) + } else { + b = append(b, s[k:]...) + if norm.NFC.QuickSpan(b) != len(b) { + b = norm.NFC.Bytes(b) + } + // TODO: the punycode converters require strings as input. + s = string(b) + } + return s, err +} + +// A labelIter allows iterating over domain name labels. +type labelIter struct { + orig string + slice []string + curStart int + curEnd int + i int +} + +func (l *labelIter) reset() { + l.curStart = 0 + l.curEnd = 0 + l.i = 0 +} + +func (l *labelIter) done() bool { + return l.curStart >= len(l.orig) +} + +func (l *labelIter) result() string { + if l.slice != nil { + return strings.Join(l.slice, ".") + } + return l.orig +} + +func (l *labelIter) label() string { + if l.slice != nil { + return l.slice[l.i] + } + p := strings.IndexByte(l.orig[l.curStart:], '.') + l.curEnd = l.curStart + p + if p == -1 { + l.curEnd = len(l.orig) + } + return l.orig[l.curStart:l.curEnd] +} + +// next sets the value to the next label. It skips the last label if it is empty. +func (l *labelIter) next() { + l.i++ + if l.slice != nil { + if l.i >= len(l.slice) || l.i == len(l.slice)-1 && l.slice[l.i] == "" { + l.curStart = len(l.orig) + } + } else { + l.curStart = l.curEnd + 1 + if l.curStart == len(l.orig)-1 && l.orig[l.curStart] == '.' { + l.curStart = len(l.orig) + } + } +} + +func (l *labelIter) set(s string) { + if l.slice == nil { + l.slice = strings.Split(l.orig, ".") + } + l.slice[l.i] = s +} + +// acePrefix is the ASCII Compatible Encoding prefix. +const acePrefix = "xn--" + +func (p *Profile) simplify(cat category) category { + switch cat { + case disallowedSTD3Mapped: + if p.useSTD3Rules { + cat = disallowed + } else { + cat = mapped + } + case disallowedSTD3Valid: + if p.useSTD3Rules { + cat = disallowed + } else { + cat = valid + } + case deviation: + if !p.transitional { + cat = valid + } + case validNV8, validXV8: + // TODO: handle V2008 + cat = valid + } + return cat +} + +func validateFromPunycode(p *Profile, s string) error { + if !norm.NFC.IsNormalString(s) { + return &labelError{s, "V1"} + } + for i := 0; i < len(s); { + v, sz := trie.lookupString(s[i:]) + if c := p.simplify(info(v).category()); c != valid && c != deviation { + return &labelError{s, "V6"} + } + i += sz + } + return nil +} + +const ( + zwnj = "\u200c" + zwj = "\u200d" +) + +type joinState int8 + +const ( + stateStart joinState = iota + stateVirama + stateBefore + stateBeforeVirama + stateAfter + stateFAIL +) + +var joinStates = [][numJoinTypes]joinState{ + stateStart: { + joiningL: stateBefore, + joiningD: stateBefore, + joinZWNJ: stateFAIL, + joinZWJ: stateFAIL, + joinVirama: stateVirama, + }, + stateVirama: { + joiningL: stateBefore, + joiningD: stateBefore, + }, + stateBefore: { + joiningL: stateBefore, + joiningD: stateBefore, + joiningT: stateBefore, + joinZWNJ: stateAfter, + joinZWJ: stateFAIL, + joinVirama: stateBeforeVirama, + }, + stateBeforeVirama: { + joiningL: stateBefore, + joiningD: stateBefore, + joiningT: stateBefore, + }, + stateAfter: { + joiningL: stateFAIL, + joiningD: stateBefore, + joiningT: stateAfter, + joiningR: stateStart, + joinZWNJ: stateFAIL, + joinZWJ: stateFAIL, + joinVirama: stateAfter, // no-op as we can't accept joiners here + }, + stateFAIL: { + 0: stateFAIL, + joiningL: stateFAIL, + joiningD: stateFAIL, + joiningT: stateFAIL, + joiningR: stateFAIL, + joinZWNJ: stateFAIL, + joinZWJ: stateFAIL, + joinVirama: stateFAIL, + }, +} + +// validateLabel validates the criteria from Section 4.1. Item 1, 4, and 6 are +// already implicitly satisfied by the overall implementation. +func (p *Profile) validateLabel(s string) error { + if s == "" { + if p.verifyDNSLength { + return &labelError{s, "A4"} + } + return nil + } + if p.bidirule != nil && !p.bidirule(s) { + return &labelError{s, "B"} + } + if !p.validateLabels { + return nil + } + trie := p.trie // p.validateLabels is only set if trie is set. + if len(s) > 4 && s[2] == '-' && s[3] == '-' { + return &labelError{s, "V2"} + } + if s[0] == '-' || s[len(s)-1] == '-' { + return &labelError{s, "V3"} + } + // TODO: merge the use of this in the trie. + v, sz := trie.lookupString(s) + x := info(v) + if x.isModifier() { + return &labelError{s, "V5"} + } + // Quickly return in the absence of zero-width (non) joiners. + if strings.Index(s, zwj) == -1 && strings.Index(s, zwnj) == -1 { + return nil + } + st := stateStart + for i := 0; ; { + jt := x.joinType() + if s[i:i+sz] == zwj { + jt = joinZWJ + } else if s[i:i+sz] == zwnj { + jt = joinZWNJ + } + st = joinStates[st][jt] + if x.isViramaModifier() { + st = joinStates[st][joinVirama] + } + if i += sz; i == len(s) { + break + } + v, sz = trie.lookupString(s[i:]) + x = info(v) + } + if st == stateFAIL || st == stateAfter { + return &labelError{s, "C"} + } + return nil +} + +func ascii(s string) bool { + for i := 0; i < len(s); i++ { + if s[i] >= utf8.RuneSelf { + return false + } + } + return true +} diff --git a/vendor/golang.org/x/text/internal/export/idna/idna9.0.0_test.go b/vendor/golang.org/x/text/internal/export/idna/idna9.0.0_test.go new file mode 100644 index 0000000..d60394c --- /dev/null +++ b/vendor/golang.org/x/text/internal/export/idna/idna9.0.0_test.go @@ -0,0 +1,136 @@ +// Copyright 2016 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 !go1.10 + +package idna + +import "testing" + +// TestLabelErrors tests strings returned in case of error. All results should +// be identical to the reference implementation and can be verified at +// http://unicode.org/cldr/utility/idna.jsp. The reference implementation, +// however, seems to not display Bidi and ContextJ errors. +// +// In some cases the behavior of browsers is added as a comment. In all cases, +// whenever a resolve search returns an error here, Chrome will treat the input +// string as a search string (including those for Bidi and Context J errors), +// unless noted otherwise. +func TestLabelErrors(t *testing.T) { + encode := func(s string) string { s, _ = encode(acePrefix, s); return s } + type kind struct { + name string + f func(string) (string, error) + } + punyA := kind{"PunycodeA", punycode.ToASCII} + resolve := kind{"ResolveA", Lookup.ToASCII} + display := kind{"ToUnicode", Display.ToUnicode} + p := New(VerifyDNSLength(true), MapForLookup(), BidiRule()) + lengthU := kind{"CheckLengthU", p.ToUnicode} + lengthA := kind{"CheckLengthA", p.ToASCII} + p = New(MapForLookup(), StrictDomainName(false)) + std3 := kind{"STD3", p.ToASCII} + + testCases := []struct { + kind + input string + want string + wantErr string + }{ + {lengthU, "", "", "A4"}, // From UTS 46 conformance test. + {lengthA, "", "", "A4"}, + + {lengthU, "xn--", "", "A4"}, + {lengthU, "foo.xn--", "foo.", "A4"}, // TODO: is dropping xn-- correct? + {lengthU, "xn--.foo", ".foo", "A4"}, + {lengthU, "foo.xn--.bar", "foo..bar", "A4"}, + + {display, "xn--", "", ""}, + {display, "foo.xn--", "foo.", ""}, // TODO: is dropping xn-- correct? + {display, "xn--.foo", ".foo", ""}, + {display, "foo.xn--.bar", "foo..bar", ""}, + + {lengthA, "a..b", "a..b", "A4"}, + {punyA, ".b", ".b", ""}, + // For backwards compatibility, the Punycode profile does not map runes. + {punyA, "\u3002b", "xn--b-83t", ""}, + {punyA, "..b", "..b", ""}, + // Only strip leading empty labels for certain profiles. Stripping + // leading empty labels here but not for "empty" punycode above seems + // inconsistent, but seems to be applied by both the conformance test + // and Chrome. So we turn it off by default, support it as an option, + // and enable it in profiles where it seems commonplace. + {lengthA, ".b", "b", ""}, + {lengthA, "\u3002b", "b", ""}, + {lengthA, "..b", "b", ""}, + {lengthA, "b..", "b..", ""}, + + {resolve, "a..b", "a..b", ""}, + {resolve, ".b", "b", ""}, + {resolve, "\u3002b", "b", ""}, + {resolve, "..b", "b", ""}, + {resolve, "b..", "b..", ""}, + + // Raw punycode + {punyA, "", "", ""}, + {punyA, "*.foo.com", "*.foo.com", ""}, + {punyA, "Foo.com", "Foo.com", ""}, + + // STD3 rules + {display, "*.foo.com", "*.foo.com", "P1"}, + {std3, "*.foo.com", "*.foo.com", ""}, + + // Don't map U+2490 (DIGIT NINE FULL STOP). This is the behavior of + // Chrome, Safari, and IE. Firefox will first map ⒐ to 9. and return + // lab9.be. + {resolve, "lab⒐be", "xn--labbe-zh9b", "P1"}, // encode("lab⒐be") + {display, "lab⒐be", "lab⒐be", "P1"}, + + {resolve, "plan⒐faß.de", "xn--planfass-c31e.de", "P1"}, // encode("plan⒐fass") + ".de" + {display, "Plan⒐faß.de", "plan⒐faß.de", "P1"}, + + // Chrome 54.0 recognizes the error and treats this input verbatim as a + // search string. + // Safari 10.0 (non-conform spec) decomposes "⒈" and computes the + // punycode on the result using transitional mapping. + // Firefox 49.0.1 goes haywire on this string and prints a bunch of what + // seems to be nested punycode encodings. + {resolve, "日本⒈co.ßßß.de", "xn--co-wuw5954azlb.ssssss.de", "P1"}, + {display, "日本⒈co.ßßß.de", "日本⒈co.ßßß.de", "P1"}, + + {resolve, "a\u200Cb", "ab", ""}, + {display, "a\u200Cb", "a\u200Cb", "C"}, + + {resolve, encode("a\u200Cb"), encode("a\u200Cb"), "C"}, + {display, "a\u200Cb", "a\u200Cb", "C"}, + + {resolve, "grﻋﺮﺑﻲ.de", "xn--gr-gtd9a1b0g.de", "B"}, + { + // Notice how the string gets transformed, even with an error. + // Chrome will use the original string if it finds an error, so not + // the transformed one. + display, + "gr\ufecb\ufeae\ufe91\ufef2.de", + "gr\u0639\u0631\u0628\u064a.de", + "B", + }, + + {resolve, "\u0671.\u03c3\u07dc", "xn--qib.xn--4xa21s", "B"}, // ٱ.σߜ + {display, "\u0671.\u03c3\u07dc", "\u0671.\u03c3\u07dc", "B"}, + + // normalize input + {resolve, "a\u0323\u0322", "xn--jta191l", ""}, // ạ̢ + {display, "a\u0323\u0322", "\u1ea1\u0322", ""}, + + // Non-normalized strings are not normalized when they originate from + // punycode. Despite the error, Chrome, Safari and Firefox will attempt + // to look up the input punycode. + {resolve, encode("a\u0323\u0322") + ".com", "xn--a-tdbc.com", "V1"}, + {display, encode("a\u0323\u0322") + ".com", "a\u0323\u0322.com", "V1"}, + } + + for _, tc := range testCases { + doTest(t, tc.f, tc.name, tc.input, tc.want, tc.wantErr) + } +} diff --git a/vendor/golang.org/x/text/internal/export/idna/idna_test.go b/vendor/golang.org/x/text/internal/export/idna/idna_test.go index 01fd50b..f9dadc0 100644 --- a/vendor/golang.org/x/text/internal/export/idna/idna_test.go +++ b/vendor/golang.org/x/text/internal/export/idna/idna_test.go @@ -101,124 +101,6 @@ func doTest(t *testing.T, f func(string) (string, error), name, input, want, err }) } -// TestLabelErrors tests strings returned in case of error. All results should -// be identical to the reference implementation and can be verified at -// http://unicode.org/cldr/utility/idna.jsp. The reference implementation, -// however, seems to not display Bidi and ContextJ errors. -// -// In some cases the behavior of browsers is added as a comment. In all cases, -// whenever a resolve search returns an error here, Chrome will treat the input -// string as a search string (including those for Bidi and Context J errors), -// unless noted otherwise. -func TestLabelErrors(t *testing.T) { - encode := func(s string) string { s, _ = encode(acePrefix, s); return s } - type kind struct { - name string - f func(string) (string, error) - } - punyA := kind{"PunycodeA", punycode.ToASCII} - resolve := kind{"ToASCII", Lookup.ToASCII} - display := kind{"ToUnicode", Display.ToUnicode} - p := New(VerifyDNSLength(true), MapForLookup(), BidiRule()) - lengthU := kind{"CheckLengthU", p.ToUnicode} - lengthA := kind{"CheckLengthA", p.ToASCII} - p = New(MapForLookup(), StrictDomainName(false)) - std3 := kind{"STD3", p.ToASCII} - - testCases := []struct { - kind - input string - want string - wantErr string - }{ - {lengthU, "", "", "A4"}, // From UTS 46 conformance test. - {lengthA, "", "", "A4"}, - - {lengthU, "xn--", "", "A4"}, - {lengthU, "foo.xn--", "foo.", "A4"}, // TODO: is dropping xn-- correct? - {lengthU, "xn--.foo", ".foo", "A4"}, - {lengthU, "foo.xn--.bar", "foo..bar", "A4"}, - - {display, "xn--", "", ""}, - {display, "foo.xn--", "foo.", ""}, // TODO: is dropping xn-- correct? - {display, "xn--.foo", ".foo", ""}, - {display, "foo.xn--.bar", "foo..bar", ""}, - - {lengthA, "a..b", "a..b", "A4"}, - // Stripping leading empty labels here but not for "empty" punycode - // above seems inconsistent, but seems to be applied by both the - // conformance test and Chrome. Different interpretations would be - // possible, though. - {lengthA, "..b", "b", ""}, - {lengthA, "b..", "b..", ""}, // TODO: remove trailing dots? - - {resolve, "a..b", "a..b", ""}, - {resolve, "..b", "b", ""}, - {resolve, "b..", "b..", ""}, // TODO: remove trailing dots? - - // Raw punycode - {punyA, "", "", ""}, - {punyA, "*.foo.com", "*.foo.com", ""}, - {punyA, "Foo.com", "Foo.com", ""}, - - // STD3 rules - {display, "*.foo.com", "*.foo.com", "P1"}, - {std3, "*.foo.com", "*.foo.com", ""}, - - // Don't map U+2490 (DIGIT NINE FULL STOP). This is the behavior of - // Chrome, Safari, and IE. Firefox will first map ⒐ to 9. and return - // lab9.be. - {resolve, "lab⒐be", "xn--labbe-zh9b", "P1"}, // encode("lab⒐be") - {display, "lab⒐be", "lab⒐be", "P1"}, - - {resolve, "plan⒐faß.de", "xn--planfass-c31e.de", "P1"}, // encode("plan⒐fass") + ".de" - {display, "Plan⒐faß.de", "plan⒐faß.de", "P1"}, - - // Chrome 54.0 recognizes the error and treats this input verbatim as a - // search string. - // Safari 10.0 (non-conform spec) decomposes "⒈" and computes the - // punycode on the result using transitional mapping. - // Firefox 49.0.1 goes haywire on this string and prints a bunch of what - // seems to be nested punycode encodings. - {resolve, "日本⒈co.ßßß.de", "xn--co-wuw5954azlb.ssssss.de", "P1"}, - {display, "日本⒈co.ßßß.de", "日本⒈co.ßßß.de", "P1"}, - - {resolve, "a\u200Cb", "ab", ""}, - {display, "a\u200Cb", "a\u200Cb", "C"}, - - {resolve, encode("a\u200Cb"), encode("a\u200Cb"), "C"}, - {display, "a\u200Cb", "a\u200Cb", "C"}, - - {resolve, "grﻋﺮﺑﻲ.de", "xn--gr-gtd9a1b0g.de", "B"}, - { - // Notice how the string gets transformed, even with an error. - // Chrome will use the original string if it finds an error, so not - // the transformed one. - display, - "gr\ufecb\ufeae\ufe91\ufef2.de", - "gr\u0639\u0631\u0628\u064a.de", - "B", - }, - - {resolve, "\u0671.\u03c3\u07dc", "xn--qib.xn--4xa21s", "B"}, // ٱ.σߜ - {display, "\u0671.\u03c3\u07dc", "\u0671.\u03c3\u07dc", "B"}, - - // normalize input - {resolve, "a\u0323\u0322", "xn--jta191l", ""}, // ạ̢ - {display, "a\u0323\u0322", "\u1ea1\u0322", ""}, - - // Non-normalized strings are not normalized when they originate from - // punycode. Despite the error, Chrome, Safari and Firefox will attempt - // to look up the input punycode. - {resolve, encode("a\u0323\u0322") + ".com", "xn--a-tdbc.com", "V1"}, - {display, encode("a\u0323\u0322") + ".com", "a\u0323\u0322.com", "V1"}, - } - - for _, tc := range testCases { - doTest(t, tc.f, tc.name, tc.input, tc.want, tc.wantErr) - } -} - func TestConformance(t *testing.T) { testtext.SkipIfNotLong(t) @@ -288,3 +170,9 @@ func unescape(s string) string { } return s } + +func BenchmarkProfile(b *testing.B) { + for i := 0; i < b.N; i++ { + Lookup.ToASCII("www.yahoogle.com") + } +} diff --git a/vendor/golang.org/x/text/internal/export/idna/tables.go b/vendor/golang.org/x/text/internal/export/idna/tables.go deleted file mode 100644 index d281934..0000000 --- a/vendor/golang.org/x/text/internal/export/idna/tables.go +++ /dev/null @@ -1,4477 +0,0 @@ -// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. - -package idna - -// UnicodeVersion is the Unicode version from which the tables in this package are derived. -const UnicodeVersion = "9.0.0" - -var mappings string = "" + // Size: 8176 bytes - "\x00\x01 \x03 ̈\x01a\x03 ̄\x012\x013\x03 ́\x03 ̧\x011\x01o\x051⁄4\x051⁄2" + - "\x053⁄4\x03i̇\x03l·\x03ʼn\x01s\x03dž\x03ⱥ\x03ⱦ\x01h\x01j\x01r\x01w\x01y" + - "\x03 ̆\x03 ̇\x03 ̊\x03 ̨\x03 ̃\x03 ̋\x01l\x01x\x04̈́\x03 ι\x01;\x05 ̈́" + - "\x04եւ\x04اٴ\x04وٴ\x04ۇٴ\x04يٴ\x06क़\x06ख़\x06ग़\x06ज़\x06ड़\x06ढ़\x06फ़" + - "\x06य़\x06ড়\x06ঢ়\x06য়\x06ਲ਼\x06ਸ਼\x06ਖ਼\x06ਗ਼\x06ਜ਼\x06ਫ਼\x06ଡ଼\x06ଢ଼" + - "\x06ํา\x06ໍາ\x06ຫນ\x06ຫມ\x06གྷ\x06ཌྷ\x06དྷ\x06བྷ\x06ཛྷ\x06ཀྵ\x06ཱི\x06ཱུ" + - "\x06ྲྀ\x09ྲཱྀ\x06ླྀ\x09ླཱྀ\x06ཱྀ\x06ྒྷ\x06ྜྷ\x06ྡྷ\x06ྦྷ\x06ྫྷ\x06ྐྵ\x02" + - "в\x02д\x02о\x02с\x02т\x02ъ\x02ѣ\x02æ\x01b\x01d\x01e\x02ǝ\x01g\x01i\x01k" + - "\x01m\x01n\x02ȣ\x01p\x01t\x01u\x02ɐ\x02ɑ\x02ə\x02ɛ\x02ɜ\x02ŋ\x02ɔ\x02ɯ" + - "\x01v\x02β\x02γ\x02δ\x02φ\x02χ\x02ρ\x02н\x02ɒ\x01c\x02ɕ\x02ð\x01f\x02ɟ" + - "\x02ɡ\x02ɥ\x02ɨ\x02ɩ\x02ɪ\x02ʝ\x02ɭ\x02ʟ\x02ɱ\x02ɰ\x02ɲ\x02ɳ\x02ɴ\x02ɵ" + - "\x02ɸ\x02ʂ\x02ʃ\x02ƫ\x02ʉ\x02ʊ\x02ʋ\x02ʌ\x01z\x02ʐ\x02ʑ\x02ʒ\x02θ\x02ss" + - "\x02ά\x02έ\x02ή\x02ί\x02ό\x02ύ\x02ώ\x05ἀι\x05ἁι\x05ἂι\x05ἃι\x05ἄι\x05ἅι" + - "\x05ἆι\x05ἇι\x05ἠι\x05ἡι\x05ἢι\x05ἣι\x05ἤι\x05ἥι\x05ἦι\x05ἧι\x05ὠι\x05ὡι" + - "\x05ὢι\x05ὣι\x05ὤι\x05ὥι\x05ὦι\x05ὧι\x05ὰι\x04αι\x04άι\x05ᾶι\x02ι\x05 ̈͂" + - "\x05ὴι\x04ηι\x04ήι\x05ῆι\x05 ̓̀\x05 ̓́\x05 ̓͂\x02ΐ\x05 ̔̀\x05 ̔́\x05 ̔͂" + - "\x02ΰ\x05 ̈̀\x01`\x05ὼι\x04ωι\x04ώι\x05ῶι\x06′′\x09′′′\x06‵‵\x09‵‵‵\x02!" + - "!\x02??\x02?!\x02!?\x0c′′′′\x010\x014\x015\x016\x017\x018\x019\x01+\x01=" + - "\x01(\x01)\x02rs\x02ħ\x02no\x01q\x02sm\x02tm\x02ω\x02å\x02א\x02ב\x02ג" + - "\x02ד\x02π\x051⁄7\x051⁄9\x061⁄10\x051⁄3\x052⁄3\x051⁄5\x052⁄5\x053⁄5\x054" + - "⁄5\x051⁄6\x055⁄6\x051⁄8\x053⁄8\x055⁄8\x057⁄8\x041⁄\x02ii\x02iv\x02vi" + - "\x04viii\x02ix\x02xi\x050⁄3\x06∫∫\x09∫∫∫\x06∮∮\x09∮∮∮\x0210\x0211\x0212" + - "\x0213\x0214\x0215\x0216\x0217\x0218\x0219\x0220\x04(10)\x04(11)\x04(12)" + - "\x04(13)\x04(14)\x04(15)\x04(16)\x04(17)\x04(18)\x04(19)\x04(20)\x0c∫∫∫∫" + - "\x02==\x05⫝̸\x02ɫ\x02ɽ\x02ȿ\x02ɀ\x01.\x04 ゙\x04 ゚\x06より\x06コト\x05(ᄀ)\x05" + - "(ᄂ)\x05(ᄃ)\x05(ᄅ)\x05(ᄆ)\x05(ᄇ)\x05(ᄉ)\x05(ᄋ)\x05(ᄌ)\x05(ᄎ)\x05(ᄏ)\x05(ᄐ" + - ")\x05(ᄑ)\x05(ᄒ)\x05(가)\x05(나)\x05(다)\x05(라)\x05(마)\x05(바)\x05(사)\x05(아)" + - "\x05(자)\x05(차)\x05(카)\x05(타)\x05(파)\x05(하)\x05(주)\x08(오전)\x08(오후)\x05(一)" + - "\x05(二)\x05(三)\x05(四)\x05(五)\x05(六)\x05(七)\x05(八)\x05(九)\x05(十)\x05(月)" + - "\x05(火)\x05(水)\x05(木)\x05(金)\x05(土)\x05(日)\x05(株)\x05(有)\x05(社)\x05(名)" + - "\x05(特)\x05(財)\x05(祝)\x05(労)\x05(代)\x05(呼)\x05(学)\x05(監)\x05(企)\x05(資)" + - "\x05(協)\x05(祭)\x05(休)\x05(自)\x05(至)\x0221\x0222\x0223\x0224\x0225\x0226" + - "\x0227\x0228\x0229\x0230\x0231\x0232\x0233\x0234\x0235\x06참고\x06주의\x0236" + - "\x0237\x0238\x0239\x0240\x0241\x0242\x0243\x0244\x0245\x0246\x0247\x0248" + - "\x0249\x0250\x041月\x042月\x043月\x044月\x045月\x046月\x047月\x048月\x049月\x0510" + - "月\x0511月\x0512月\x02hg\x02ev\x0cアパート\x0cアルファ\x0cアンペア\x09アール\x0cイニング\x09" + - "インチ\x09ウォン\x0fエスクード\x0cエーカー\x09オンス\x09オーム\x09カイリ\x0cカラット\x0cカロリー\x09ガロ" + - "ン\x09ガンマ\x06ギガ\x09ギニー\x0cキュリー\x0cギルダー\x06キロ\x0fキログラム\x12キロメートル\x0fキロワッ" + - "ト\x09グラム\x0fグラムトン\x0fクルゼイロ\x0cクローネ\x09ケース\x09コルナ\x09コーポ\x0cサイクル\x0fサンチ" + - "ーム\x0cシリング\x09センチ\x09セント\x09ダース\x06デシ\x06ドル\x06トン\x06ナノ\x09ノット\x09ハイツ" + - "\x0fパーセント\x09パーツ\x0cバーレル\x0fピアストル\x09ピクル\x06ピコ\x06ビル\x0fファラッド\x0cフィート" + - "\x0fブッシェル\x09フラン\x0fヘクタール\x06ペソ\x09ペニヒ\x09ヘルツ\x09ペンス\x09ページ\x09ベータ\x0cポイ" + - "ント\x09ボルト\x06ホン\x09ポンド\x09ホール\x09ホーン\x0cマイクロ\x09マイル\x09マッハ\x09マルク\x0fマ" + - "ンション\x0cミクロン\x06ミリ\x0fミリバール\x06メガ\x0cメガトン\x0cメートル\x09ヤード\x09ヤール\x09ユアン" + - "\x0cリットル\x06リラ\x09ルピー\x0cルーブル\x06レム\x0fレントゲン\x09ワット\x040点\x041点\x042点" + - "\x043点\x044点\x045点\x046点\x047点\x048点\x049点\x0510点\x0511点\x0512点\x0513点" + - "\x0514点\x0515点\x0516点\x0517点\x0518点\x0519点\x0520点\x0521点\x0522点\x0523点" + - "\x0524点\x02da\x02au\x02ov\x02pc\x02dm\x02iu\x06平成\x06昭和\x06大正\x06明治\x0c株" + - "式会社\x02pa\x02na\x02ma\x02ka\x02kb\x02mb\x02gb\x04kcal\x02pf\x02nf\x02m" + - "g\x02kg\x02hz\x02ml\x02dl\x02kl\x02fm\x02nm\x02mm\x02cm\x02km\x02m2\x02m" + - "3\x05m∕s\x06m∕s2\x07rad∕s\x08rad∕s2\x02ps\x02ns\x02ms\x02pv\x02nv\x02mv" + - "\x02kv\x02pw\x02nw\x02mw\x02kw\x02bq\x02cc\x02cd\x06c∕kg\x02db\x02gy\x02" + - "ha\x02hp\x02in\x02kk\x02kt\x02lm\x02ln\x02lx\x02ph\x02pr\x02sr\x02sv\x02" + - "wb\x05v∕m\x05a∕m\x041日\x042日\x043日\x044日\x045日\x046日\x047日\x048日\x049日" + - "\x0510日\x0511日\x0512日\x0513日\x0514日\x0515日\x0516日\x0517日\x0518日\x0519日" + - "\x0520日\x0521日\x0522日\x0523日\x0524日\x0525日\x0526日\x0527日\x0528日\x0529日" + - "\x0530日\x0531日\x02ь\x02ɦ\x02ɬ\x02ʞ\x02ʇ\x02œ\x04𤋮\x04𢡊\x04𢡄\x04𣏕\x04𥉉" + - "\x04𥳐\x04𧻓\x02ff\x02fi\x02fl\x02st\x04մն\x04մե\x04մի\x04վն\x04մխ\x04יִ" + - "\x04ײַ\x02ע\x02ה\x02כ\x02ל\x02ם\x02ר\x02ת\x04שׁ\x04שׂ\x06שּׁ\x06שּׂ\x04א" + - "ַ\x04אָ\x04אּ\x04בּ\x04גּ\x04דּ\x04הּ\x04וּ\x04זּ\x04טּ\x04יּ\x04ךּ\x04" + - "כּ\x04לּ\x04מּ\x04נּ\x04סּ\x04ףּ\x04פּ\x04צּ\x04קּ\x04רּ\x04שּ\x04תּ" + - "\x04וֹ\x04בֿ\x04כֿ\x04פֿ\x04אל\x02ٱ\x02ٻ\x02پ\x02ڀ\x02ٺ\x02ٿ\x02ٹ\x02ڤ" + - "\x02ڦ\x02ڄ\x02ڃ\x02چ\x02ڇ\x02ڍ\x02ڌ\x02ڎ\x02ڈ\x02ژ\x02ڑ\x02ک\x02گ\x02ڳ" + - "\x02ڱ\x02ں\x02ڻ\x02ۀ\x02ہ\x02ھ\x02ے\x02ۓ\x02ڭ\x02ۇ\x02ۆ\x02ۈ\x02ۋ\x02ۅ" + - "\x02ۉ\x02ې\x02ى\x04ئا\x04ئە\x04ئو\x04ئۇ\x04ئۆ\x04ئۈ\x04ئې\x04ئى\x02ی\x04" + - "ئج\x04ئح\x04ئم\x04ئي\x04بج\x04بح\x04بخ\x04بم\x04بى\x04بي\x04تج\x04تح" + - "\x04تخ\x04تم\x04تى\x04تي\x04ثج\x04ثم\x04ثى\x04ثي\x04جح\x04جم\x04حج\x04حم" + - "\x04خج\x04خح\x04خم\x04سج\x04سح\x04سخ\x04سم\x04صح\x04صم\x04ضج\x04ضح\x04ضخ" + - "\x04ضم\x04طح\x04طم\x04ظم\x04عج\x04عم\x04غج\x04غم\x04فج\x04فح\x04فخ\x04فم" + - "\x04فى\x04في\x04قح\x04قم\x04قى\x04قي\x04كا\x04كج\x04كح\x04كخ\x04كل\x04كم" + - "\x04كى\x04كي\x04لج\x04لح\x04لخ\x04لم\x04لى\x04لي\x04مج\x04مح\x04مخ\x04مم" + - "\x04مى\x04مي\x04نج\x04نح\x04نخ\x04نم\x04نى\x04ني\x04هج\x04هم\x04هى\x04هي" + - "\x04يج\x04يح\x04يخ\x04يم\x04يى\x04يي\x04ذٰ\x04رٰ\x04ىٰ\x05 ٌّ\x05 ٍّ\x05" + - " َّ\x05 ُّ\x05 ِّ\x05 ّٰ\x04ئر\x04ئز\x04ئن\x04بر\x04بز\x04بن\x04تر\x04تز" + - "\x04تن\x04ثر\x04ثز\x04ثن\x04ما\x04نر\x04نز\x04نن\x04ير\x04يز\x04ين\x04ئخ" + - "\x04ئه\x04به\x04ته\x04صخ\x04له\x04نه\x04هٰ\x04يه\x04ثه\x04سه\x04شم\x04شه" + - "\x06ـَّ\x06ـُّ\x06ـِّ\x04طى\x04طي\x04عى\x04عي\x04غى\x04غي\x04سى\x04سي" + - "\x04شى\x04شي\x04حى\x04حي\x04جى\x04جي\x04خى\x04خي\x04صى\x04صي\x04ضى\x04ضي" + - "\x04شج\x04شح\x04شخ\x04شر\x04سر\x04صر\x04ضر\x04اً\x06تجم\x06تحج\x06تحم" + - "\x06تخم\x06تمج\x06تمح\x06تمخ\x06جمح\x06حمي\x06حمى\x06سحج\x06سجح\x06سجى" + - "\x06سمح\x06سمج\x06سمم\x06صحح\x06صمم\x06شحم\x06شجي\x06شمخ\x06شمم\x06ضحى" + - "\x06ضخم\x06طمح\x06طمم\x06طمي\x06عجم\x06عمم\x06عمى\x06غمم\x06غمي\x06غمى" + - "\x06فخم\x06قمح\x06قمم\x06لحم\x06لحي\x06لحى\x06لجج\x06لخم\x06لمح\x06محج" + - "\x06محم\x06محي\x06مجح\x06مجم\x06مخج\x06مخم\x06مجخ\x06همج\x06همم\x06نحم" + - "\x06نحى\x06نجم\x06نجى\x06نمي\x06نمى\x06يمم\x06بخي\x06تجي\x06تجى\x06تخي" + - "\x06تخى\x06تمي\x06تمى\x06جمي\x06جحى\x06جمى\x06سخى\x06صحي\x06شحي\x06ضحي" + - "\x06لجي\x06لمي\x06يحي\x06يجي\x06يمي\x06ممي\x06قمي\x06نحي\x06عمي\x06كمي" + - "\x06نجح\x06مخي\x06لجم\x06كمم\x06جحي\x06حجي\x06مجي\x06فمي\x06بحي\x06سخي" + - "\x06نجي\x06صلے\x06قلے\x08الله\x08اكبر\x08محمد\x08صلعم\x08رسول\x08عليه" + - "\x08وسلم\x06صلى!صلى الله عليه وسلم\x0fجل جلاله\x08ریال\x01,\x01:\x01!" + - "\x01?\x01_\x01{\x01}\x01[\x01]\x01#\x01&\x01*\x01-\x01<\x01>\x01\\\x01$" + - "\x01%\x01@\x04ـً\x04ـَ\x04ـُ\x04ـِ\x04ـّ\x04ـْ\x02ء\x02آ\x02أ\x02ؤ\x02إ" + - "\x02ئ\x02ا\x02ب\x02ة\x02ت\x02ث\x02ج\x02ح\x02خ\x02د\x02ذ\x02ر\x02ز\x02س" + - "\x02ش\x02ص\x02ض\x02ط\x02ظ\x02ع\x02غ\x02ف\x02ق\x02ك\x02ل\x02م\x02ن\x02ه" + - "\x02و\x02ي\x04لآ\x04لأ\x04لإ\x04لا\x01\x22\x01'\x01/\x01^\x01|\x01~\x02¢" + - "\x02£\x02¬\x02¦\x02¥\x08𝅗𝅥\x08𝅘𝅥\x0c𝅘𝅥𝅮\x0c𝅘𝅥𝅯\x0c𝅘𝅥𝅰\x0c𝅘𝅥𝅱\x0c𝅘𝅥𝅲\x08𝆹" + - "𝅥\x08𝆺𝅥\x0c𝆹𝅥𝅮\x0c𝆺𝅥𝅮\x0c𝆹𝅥𝅯\x0c𝆺𝅥𝅯\x02ı\x02ȷ\x02α\x02ε\x02ζ\x02η\x02" + - "κ\x02λ\x02μ\x02ν\x02ξ\x02ο\x02σ\x02τ\x02υ\x02ψ\x03∇\x03∂\x02ϝ\x02ٮ\x02ڡ" + - "\x02ٯ\x020,\x021,\x022,\x023,\x024,\x025,\x026,\x027,\x028,\x029,\x03(a)" + - "\x03(b)\x03(c)\x03(d)\x03(e)\x03(f)\x03(g)\x03(h)\x03(i)\x03(j)\x03(k)" + - "\x03(l)\x03(m)\x03(n)\x03(o)\x03(p)\x03(q)\x03(r)\x03(s)\x03(t)\x03(u)" + - "\x03(v)\x03(w)\x03(x)\x03(y)\x03(z)\x07〔s〕\x02wz\x02hv\x02sd\x03ppv\x02w" + - "c\x02mc\x02md\x02dj\x06ほか\x06ココ\x03サ\x03手\x03字\x03双\x03デ\x03二\x03多\x03解" + - "\x03天\x03交\x03映\x03無\x03料\x03前\x03後\x03再\x03新\x03初\x03終\x03生\x03販\x03声" + - "\x03吹\x03演\x03投\x03捕\x03一\x03三\x03遊\x03左\x03中\x03右\x03指\x03走\x03打\x03禁" + - "\x03空\x03合\x03満\x03有\x03月\x03申\x03割\x03営\x03配\x09〔本〕\x09〔三〕\x09〔二〕\x09〔安" + - "〕\x09〔点〕\x09〔打〕\x09〔盗〕\x09〔勝〕\x09〔敗〕\x03得\x03可\x03丽\x03丸\x03乁\x03你\x03" + - "侮\x03侻\x03倂\x03偺\x03備\x03僧\x03像\x03㒞\x03免\x03兔\x03兤\x03具\x03㒹\x03內\x03" + - "冗\x03冤\x03仌\x03冬\x03况\x03凵\x03刃\x03㓟\x03刻\x03剆\x03剷\x03㔕\x03勇\x03勉\x03" + - "勤\x03勺\x03包\x03匆\x03北\x03卉\x03卑\x03博\x03即\x03卽\x03卿\x03灰\x03及\x03叟\x03" + - "叫\x03叱\x03吆\x03咞\x03吸\x03呈\x03周\x03咢\x03哶\x03唐\x03啓\x03啣\x03善\x03喙\x03" + - "喫\x03喳\x03嗂\x03圖\x03嘆\x03圗\x03噑\x03噴\x03切\x03壮\x03城\x03埴\x03堍\x03型\x03" + - "堲\x03報\x03墬\x03売\x03壷\x03夆\x03夢\x03奢\x03姬\x03娛\x03娧\x03姘\x03婦\x03㛮\x03" + - "嬈\x03嬾\x03寃\x03寘\x03寧\x03寳\x03寿\x03将\x03尢\x03㞁\x03屠\x03屮\x03峀\x03岍\x03" + - "嵃\x03嵮\x03嵫\x03嵼\x03巡\x03巢\x03㠯\x03巽\x03帨\x03帽\x03幩\x03㡢\x03㡼\x03庰\x03" + - "庳\x03庶\x03廊\x03廾\x03舁\x03弢\x03㣇\x03形\x03彫\x03㣣\x03徚\x03忍\x03志\x03忹\x03" + - "悁\x03㤺\x03㤜\x03悔\x03惇\x03慈\x03慌\x03慎\x03慺\x03憎\x03憲\x03憤\x03憯\x03懞\x03" + - "懲\x03懶\x03成\x03戛\x03扝\x03抱\x03拔\x03捐\x03挽\x03拼\x03捨\x03掃\x03揤\x03搢\x03" + - "揅\x03掩\x03㨮\x03摩\x03摾\x03撝\x03摷\x03㩬\x03敏\x03敬\x03旣\x03書\x03晉\x03㬙\x03" + - "暑\x03㬈\x03㫤\x03冒\x03冕\x03最\x03暜\x03肭\x03䏙\x03朗\x03望\x03朡\x03杞\x03杓\x03" + - "㭉\x03柺\x03枅\x03桒\x03梅\x03梎\x03栟\x03椔\x03㮝\x03楂\x03榣\x03槪\x03檨\x03櫛\x03" + - "㰘\x03次\x03歔\x03㱎\x03歲\x03殟\x03殺\x03殻\x03汎\x03沿\x03泍\x03汧\x03洖\x03派\x03" + - "海\x03流\x03浩\x03浸\x03涅\x03洴\x03港\x03湮\x03㴳\x03滋\x03滇\x03淹\x03潮\x03濆\x03" + - "瀹\x03瀞\x03瀛\x03㶖\x03灊\x03災\x03灷\x03炭\x03煅\x03熜\x03爨\x03爵\x03牐\x03犀\x03" + - "犕\x03獺\x03王\x03㺬\x03玥\x03㺸\x03瑇\x03瑜\x03瑱\x03璅\x03瓊\x03㼛\x03甤\x03甾\x03" + - "異\x03瘐\x03㿼\x03䀈\x03直\x03眞\x03真\x03睊\x03䀹\x03瞋\x03䁆\x03䂖\x03硎\x03碌\x03" + - "磌\x03䃣\x03祖\x03福\x03秫\x03䄯\x03穀\x03穊\x03穏\x03䈂\x03篆\x03築\x03䈧\x03糒\x03" + - "䊠\x03糨\x03糣\x03紀\x03絣\x03䌁\x03緇\x03縂\x03繅\x03䌴\x03䍙\x03罺\x03羕\x03翺\x03" + - "者\x03聠\x03聰\x03䏕\x03育\x03脃\x03䐋\x03脾\x03媵\x03舄\x03辞\x03䑫\x03芑\x03芋\x03" + - "芝\x03劳\x03花\x03芳\x03芽\x03苦\x03若\x03茝\x03荣\x03莭\x03茣\x03莽\x03菧\x03著\x03" + - "荓\x03菊\x03菌\x03菜\x03䔫\x03蓱\x03蓳\x03蔖\x03蕤\x03䕝\x03䕡\x03䕫\x03虐\x03虜\x03" + - "虧\x03虩\x03蚩\x03蚈\x03蜎\x03蛢\x03蝹\x03蜨\x03蝫\x03螆\x03蟡\x03蠁\x03䗹\x03衠\x03" + - "衣\x03裗\x03裞\x03䘵\x03裺\x03㒻\x03䚾\x03䛇\x03誠\x03諭\x03變\x03豕\x03貫\x03賁\x03" + - "贛\x03起\x03跋\x03趼\x03跰\x03軔\x03輸\x03邔\x03郱\x03鄑\x03鄛\x03鈸\x03鋗\x03鋘\x03" + - "鉼\x03鏹\x03鐕\x03開\x03䦕\x03閷\x03䧦\x03雃\x03嶲\x03霣\x03䩮\x03䩶\x03韠\x03䪲\x03" + - "頋\x03頩\x03飢\x03䬳\x03餩\x03馧\x03駂\x03駾\x03䯎\x03鬒\x03鱀\x03鳽\x03䳎\x03䳭\x03" + - "鵧\x03䳸\x03麻\x03䵖\x03黹\x03黾\x03鼅\x03鼏\x03鼖\x03鼻" - -var xorData string = "" + // Size: 4855 bytes - "\x02\x0c\x09\x02\xb0\xec\x02\xad\xd8\x02\xad\xd9\x02\x06\x07\x02\x0f\x12" + - "\x02\x0f\x1f\x02\x0f\x1d\x02\x01\x13\x02\x0f\x16\x02\x0f\x0b\x02\x0f3" + - "\x02\x0f7\x02\x0f?\x02\x0f/\x02\x0f*\x02\x0c&\x02\x0c*\x02\x0c;\x02\x0c9" + - "\x02\x0c%\x02\xab\xed\x02\xab\xe2\x02\xab\xe3\x02\xa9\xe0\x02\xa9\xe1" + - "\x02\xa9\xe6\x02\xa3\xcb\x02\xa3\xc8\x02\xa3\xc9\x02\x01#\x02\x01\x08" + - "\x02\x0e>\x02\x0e'\x02\x0f\x03\x02\x03\x0d\x02\x03\x09\x02\x03\x17\x02" + - "\x03\x0e\x02\x02\x03\x02\x011\x02\x01\x00\x02\x01\x10\x02\x03<\x02\x07" + - "\x0d\x02\x02\x0c\x02\x0c0\x02\x01\x03\x02\x01\x01\x02\x01 \x02\x01\x22" + - "\x02\x01)\x02\x01\x0a\x02\x01\x0c\x02\x02\x06\x02\x02\x02\x02\x03\x10" + - "\x03\x037 \x03\x0b+\x03\x02\x01\x04\x02\x01\x02\x02\x019\x02\x03\x1c\x02" + - "\x02$\x03\x80p$\x02\x03:\x02\x03\x0a\x03\xc1r.\x03\xc1r,\x03\xc1r\x02" + - "\x02\x02:\x02\x02>\x02\x02,\x02\x02\x10\x02\x02\x00\x03\xc1s<\x03\xc1s*" + - "\x03\xc2L$\x03\xc2L;\x02\x09)\x02\x0a\x19\x03\x83\xab\xe3\x03\x83\xab" + - "\xf2\x03 4\xe0\x03\x81\xab\xea\x03\x81\xab\xf3\x03 4\xef\x03\x96\xe1\xcd" + - "\x03\x84\xe5\xc3\x02\x0d\x11\x03\x8b\xec\xcb\x03\x94\xec\xcf\x03\x9a\xec" + - "\xc2\x03\x8b\xec\xdb\x03\x94\xec\xdf\x03\x9a\xec\xd2\x03\x01\x0c!\x03" + - "\x01\x0c#\x03ʠ\x9d\x03ʣ\x9c\x03ʢ\x9f\x03ʥ\x9e\x03ʤ\x91\x03ʧ\x90\x03ʦ\x93" + - "\x03ʩ\x92\x03ʨ\x95\x03\xca\xf3\xb5\x03\xca\xf0\xb4\x03\xca\xf1\xb7\x03" + - "\xca\xf6\xb6\x03\xca\xf7\x89\x03\xca\xf4\x88\x03\xca\xf5\x8b\x03\xca\xfa" + - "\x8a\x03\xca\xfb\x8d\x03\xca\xf8\x8c\x03\xca\xf9\x8f\x03\xca\xfe\x8e\x03" + - "\xca\xff\x81\x03\xca\xfc\x80\x03\xca\xfd\x83\x03\xca\xe2\x82\x03\xca\xe3" + - "\x85\x03\xca\xe0\x84\x03\xca\xe1\x87\x03\xca\xe6\x86\x03\xca\xe7\x99\x03" + - "\xca\xe4\x98\x03\xca\xe5\x9b\x03\xca\xea\x9a\x03\xca\xeb\x9d\x03\xca\xe8" + - "\x9c\x03ؓ\x89\x03ߔ\x8b\x02\x010\x03\x03\x04\x1e\x03\x04\x15\x12\x03\x0b" + - "\x05,\x03\x06\x04\x00\x03\x06\x04)\x03\x06\x044\x03\x06\x04<\x03\x06\x05" + - "\x1d\x03\x06\x06\x00\x03\x06\x06\x0a\x03\x06\x06'\x03\x06\x062\x03\x0786" + - "\x03\x079/\x03\x079 \x03\x07:\x0e\x03\x07:\x1b\x03\x07:%\x03\x07;/\x03" + - "\x07;%\x03\x074\x11\x03\x076\x09\x03\x077*\x03\x070\x01\x03\x070\x0f\x03" + - "\x070.\x03\x071\x16\x03\x071\x04\x03\x0710\x03\x072\x18\x03\x072-\x03" + - "\x073\x14\x03\x073>\x03\x07'\x09\x03\x07 \x00\x03\x07\x1f\x0b\x03\x07" + - "\x18#\x03\x07\x18(\x03\x07\x186\x03\x07\x18\x03\x03\x07\x19\x16\x03\x07" + - "\x116\x03\x07\x12'\x03\x07\x13\x10\x03\x07\x0c&\x03\x07\x0c\x08\x03\x07" + - "\x0c\x13\x03\x07\x0d\x02\x03\x07\x0d\x1c\x03\x07\x0b5\x03\x07\x0b\x0a" + - "\x03\x07\x0b\x01\x03\x07\x0b\x0f\x03\x07\x05\x00\x03\x07\x05\x09\x03\x07" + - "\x05\x0b\x03\x07\x07\x01\x03\x07\x07\x08\x03\x07\x00<\x03\x07\x00+\x03" + - "\x07\x01)\x03\x07\x01\x1b\x03\x07\x01\x08\x03\x07\x03?\x03\x0445\x03\x04" + - "4\x08\x03\x0454\x03\x04)/\x03\x04)5\x03\x04+\x05\x03\x04+\x14\x03\x04+ " + - "\x03\x04+<\x03\x04*&\x03\x04*\x22\x03\x04&8\x03\x04!\x01\x03\x04!\x22" + - "\x03\x04\x11+\x03\x04\x10.\x03\x04\x104\x03\x04\x13=\x03\x04\x12\x04\x03" + - "\x04\x12\x0a\x03\x04\x0d\x1d\x03\x04\x0d\x07\x03\x04\x0d \x03\x05<>\x03" + - "\x055<\x03\x055!\x03\x055#\x03\x055&\x03\x054\x1d\x03\x054\x02\x03\x054" + - "\x07\x03\x0571\x03\x053\x1a\x03\x053\x16\x03\x05.<\x03\x05.\x07\x03\x05)" + - ":\x03\x05)<\x03\x05)\x0c\x03\x05)\x15\x03\x05+-\x03\x05+5\x03\x05$\x1e" + - "\x03\x05$\x14\x03\x05'\x04\x03\x05'\x14\x03\x05&\x02\x03\x05\x226\x03" + - "\x05\x22\x0c\x03\x05\x22\x1c\x03\x05\x19\x0a\x03\x05\x1b\x09\x03\x05\x1b" + - "\x0c\x03\x05\x14\x07\x03\x05\x16?\x03\x05\x16\x0c\x03\x05\x0c\x05\x03" + - "\x05\x0e\x0f\x03\x05\x01\x0e\x03\x05\x00(\x03\x05\x030\x03\x05\x03\x06" + - "\x03\x0a==\x03\x0a=1\x03\x0a=,\x03\x0a=\x0c\x03\x0a??\x03\x0a<\x08\x03" + - "\x0a9!\x03\x0a9)\x03\x0a97\x03\x0a99\x03\x0a6\x0a\x03\x0a6\x1c\x03\x0a6" + - "\x17\x03\x0a7'\x03\x0a78\x03\x0a73\x03\x0a'\x01\x03\x0a'&\x03\x0a\x1f" + - "\x0e\x03\x0a\x1f\x03\x03\x0a\x1f3\x03\x0a\x1b/\x03\x0a\x18\x19\x03\x0a" + - "\x19\x01\x03\x0a\x16\x14\x03\x0a\x0e\x22\x03\x0a\x0f\x10\x03\x0a\x0f\x02" + - "\x03\x0a\x0f \x03\x0a\x0c\x04\x03\x0a\x0b>\x03\x0a\x0b+\x03\x0a\x08/\x03" + - "\x0a\x046\x03\x0a\x05\x14\x03\x0a\x00\x04\x03\x0a\x00\x10\x03\x0a\x00" + - "\x14\x03\x0b<3\x03\x0b;*\x03\x0b9\x22\x03\x0b9)\x03\x0b97\x03\x0b+\x10" + - "\x03\x0b((\x03\x0b&5\x03\x0b$\x1c\x03\x0b$\x12\x03\x0b%\x04\x03\x0b#<" + - "\x03\x0b#0\x03\x0b#\x0d\x03\x0b#\x19\x03\x0b!:\x03\x0b!\x1f\x03\x0b!\x00" + - "\x03\x0b\x1e5\x03\x0b\x1c\x1d\x03\x0b\x1d-\x03\x0b\x1d(\x03\x0b\x18.\x03" + - "\x0b\x18 \x03\x0b\x18\x16\x03\x0b\x14\x13\x03\x0b\x15$\x03\x0b\x15\x22" + - "\x03\x0b\x12\x1b\x03\x0b\x12\x10\x03\x0b\x132\x03\x0b\x13=\x03\x0b\x12" + - "\x18\x03\x0b\x0c&\x03\x0b\x061\x03\x0b\x06:\x03\x0b\x05#\x03\x0b\x05<" + - "\x03\x0b\x04\x0b\x03\x0b\x04\x04\x03\x0b\x04\x1b\x03\x0b\x042\x03\x0b" + - "\x041\x03\x0b\x03\x03\x03\x0b\x03\x1d\x03\x0b\x03/\x03\x0b\x03+\x03\x0b" + - "\x02\x1b\x03\x0b\x02\x00\x03\x0b\x01\x1e\x03\x0b\x01\x08\x03\x0b\x015" + - "\x03\x06\x0d9\x03\x06\x0d=\x03\x06\x0d?\x03\x02\x001\x03\x02\x003\x03" + - "\x02\x02\x19\x03\x02\x006\x03\x02\x02\x1b\x03\x02\x004\x03\x02\x00<\x03" + - "\x02\x02\x0a\x03\x02\x02\x0e\x03\x02\x01\x1a\x03\x02\x01\x07\x03\x02\x01" + - "\x05\x03\x02\x01\x0b\x03\x02\x01%\x03\x02\x01\x0c\x03\x02\x01\x04\x03" + - "\x02\x01\x1c\x03\x02\x00.\x03\x02\x002\x03\x02\x00>\x03\x02\x00\x12\x03" + - "\x02\x00\x16\x03\x02\x011\x03\x02\x013\x03\x02\x02 \x03\x02\x02%\x03\x02" + - "\x02$\x03\x02\x028\x03\x02\x02;\x03\x02\x024\x03\x02\x012\x03\x02\x022" + - "\x03\x02\x02/\x03\x02\x01,\x03\x02\x01\x13\x03\x02\x01\x16\x03\x02\x01" + - "\x11\x03\x02\x01\x1e\x03\x02\x01\x15\x03\x02\x01\x17\x03\x02\x01\x0f\x03" + - "\x02\x01\x08\x03\x02\x00?\x03\x02\x03\x07\x03\x02\x03\x0d\x03\x02\x03" + - "\x13\x03\x02\x03\x1d\x03\x02\x03\x1f\x03\x02\x00\x03\x03\x02\x00\x0d\x03" + - "\x02\x00\x01\x03\x02\x00\x1b\x03\x02\x00\x19\x03\x02\x00\x18\x03\x02\x00" + - "\x13\x03\x02\x00/\x03\x07>\x12\x03\x07<\x1f\x03\x07>\x1d\x03\x06\x1d\x0e" + - "\x03\x07>\x1c\x03\x07>:\x03\x07>\x13\x03\x04\x12+\x03\x07?\x03\x03\x07>" + - "\x02\x03\x06\x224\x03\x06\x1a.\x03\x07<%\x03\x06\x1c\x0b\x03\x0609\x03" + - "\x05\x1f\x01\x03\x04'\x08\x03\x93\xfd\xf5\x03\x02\x0d \x03\x02\x0d#\x03" + - "\x02\x0d!\x03\x02\x0d&\x03\x02\x0d\x22\x03\x02\x0d/\x03\x02\x0d,\x03\x02" + - "\x0d$\x03\x02\x0d'\x03\x02\x0d%\x03\x02\x0d;\x03\x02\x0d=\x03\x02\x0d?" + - "\x03\x099.\x03\x08\x0b7\x03\x08\x02\x14\x03\x08\x14\x0d\x03\x08.:\x03" + - "\x089'\x03\x0f\x0b\x18\x03\x0f\x1c1\x03\x0f\x17&\x03\x0f9\x1f\x03\x0f0" + - "\x0c\x03\x0e\x0a9\x03\x0e\x056\x03\x0e\x1c#\x03\x0f\x13\x0e\x03\x072\x00" + - "\x03\x070\x0d\x03\x072\x0b\x03\x06\x11\x18\x03\x070\x10\x03\x06\x0f(\x03" + - "\x072\x05\x03\x06\x0f,\x03\x073\x15\x03\x06\x07\x08\x03\x05\x16\x02\x03" + - "\x04\x0b \x03\x05:8\x03\x05\x16%\x03\x0a\x0d\x1f\x03\x06\x16\x10\x03\x05" + - "\x1d5\x03\x05*;\x03\x05\x16\x1b\x03\x04.-\x03\x06\x1a\x19\x03\x04\x03," + - "\x03\x0b87\x03\x04/\x0a\x03\x06\x00,\x03\x04-\x01\x03\x04\x1e-\x03\x06/(" + - "\x03\x0a\x0b5\x03\x06\x0e7\x03\x06\x07.\x03\x0597\x03\x0a*%\x03\x0760" + - "\x03\x06\x0c;\x03\x05'\x00\x03\x072.\x03\x072\x08\x03\x06=\x01\x03\x06" + - "\x05\x1b\x03\x06\x06\x12\x03\x06$=\x03\x06'\x0d\x03\x04\x11\x0f\x03\x076" + - ",\x03\x06\x07;\x03\x06.,\x03\x86\xf9\xea\x03\x8f\xff\xeb\x02\x092\x02" + - "\x095\x02\x094\x02\x09;\x02\x09>\x02\x098\x02\x09*\x02\x09/\x02\x09,\x02" + - "\x09%\x02\x09&\x02\x09#\x02\x09 \x02\x08!\x02\x08%\x02\x08$\x02\x08+\x02" + - "\x08.\x02\x08*\x02\x08&\x02\x088\x02\x08>\x02\x084\x02\x086\x02\x080\x02" + - "\x08\x10\x02\x08\x17\x02\x08\x12\x02\x08\x1d\x02\x08\x1f\x02\x08\x13\x02" + - "\x08\x15\x02\x08\x14\x02\x08\x0c\x03\x8b\xfd\xd0\x03\x81\xec\xc6\x03\x87" + - "\xe0\x8a\x03-2\xe3\x03\x80\xef\xe4\x03-2\xea\x03\x88\xe6\xeb\x03\x8e\xe6" + - "\xe8\x03\x84\xe6\xe9\x03\x97\xe6\xee\x03-2\xf9\x03-2\xf6\x03\x8e\xe3\xad" + - "\x03\x80\xe3\x92\x03\x88\xe3\x90\x03\x8e\xe3\x90\x03\x80\xe3\x97\x03\x88" + - "\xe3\x95\x03\x88\xfe\xcb\x03\x8e\xfe\xca\x03\x84\xfe\xcd\x03\x91\xef\xc9" + - "\x03-2\xc1\x03-2\xc0\x03-2\xcb\x03\x88@\x09\x03\x8e@\x08\x03\x8f\xe0\xf5" + - "\x03\x8e\xe6\xf9\x03\x8e\xe0\xfa\x03\x93\xff\xf4\x03\x84\xee\xd3\x03\x0b" + - "(\x04\x023 \x021;\x02\x01*\x03\x0b#\x10\x03\x0b 0\x03\x0b!\x10\x03\x0b!0" + - "\x03\x07\x15\x08\x03\x09?5\x03\x07\x1f\x08\x03\x07\x17\x0b\x03\x09\x1f" + - "\x15\x03\x0b\x1c7\x03\x0a+#\x03\x06\x1a\x1b\x03\x06\x1a\x14\x03\x0a\x01" + - "\x18\x03\x06#\x1b\x03\x0a2\x0c\x03\x0a\x01\x04\x03\x09#;\x03\x08='\x03" + - "\x08\x1a\x0a\x03\x07\x03\x0a\x111\x03\x09\x1b\x09\x03\x073.\x03\x07\x01\x00" + - "\x03\x09/,\x03\x07#>\x03\x07\x048\x03\x0a\x1f\x22\x03\x098>\x03\x09\x11" + - "\x00\x03\x08/\x17\x03\x06'\x22\x03\x0b\x1a+\x03\x0a\x22\x19\x03\x0a/1" + - "\x03\x0974\x03\x09\x0f\x22\x03\x08,\x22\x03\x08?\x14\x03\x07$5\x03\x07<3" + - "\x03\x07=*\x03\x07\x13\x18\x03\x068\x0a\x03\x06\x09\x16\x03\x06\x13\x00" + - "\x03\x08\x067\x03\x08\x01\x03\x03\x08\x12\x1d\x03\x07+7\x03\x06(;\x03" + - "\x06\x1c?\x03\x07\x0e\x17\x03\x0a\x06\x1d\x03\x0a\x19\x07\x03\x08\x14$" + - "\x03\x07$;\x03\x08,$\x03\x08\x06\x0d\x03\x07\x16\x0a\x03\x06>>\x03\x0a" + - "\x06\x12\x03\x0a\x14)\x03\x09\x0d\x1f\x03\x09\x12\x17\x03\x09\x19\x01" + - "\x03\x08\x11 \x03\x08\x1d'\x03\x06<\x1a\x03\x0a.\x00\x03\x07'\x18\x03" + - "\x0a\x22\x08\x03\x08\x0d\x0a\x03\x08\x13)\x03\x07*)\x03\x06<,\x03\x07" + - "\x0b\x1a\x03\x09.\x14\x03\x09\x0d\x1e\x03\x07\x0e#\x03\x0b\x1d'\x03\x0a" + - "\x0a8\x03\x09%2\x03\x08+&\x03\x080\x12\x03\x0a)4\x03\x08\x06\x1f\x03\x0b" + - "\x1b\x1a\x03\x0a\x1b\x0f\x03\x0b\x1d*\x03\x09\x16$\x03\x090\x11\x03\x08" + - "\x11\x08\x03\x0a*(\x03\x0a\x042\x03\x089,\x03\x074'\x03\x07\x0f\x05\x03" + - "\x09\x0b\x0a\x03\x07\x1b\x01\x03\x09\x17:\x03\x09.\x0d\x03\x07.\x11\x03" + - "\x09+\x15\x03\x080\x13\x03\x0b\x1f\x19\x03\x0a \x11\x03\x0a\x220\x03\x09" + - "\x07;\x03\x08\x16\x1c\x03\x07,\x13\x03\x07\x0e/\x03\x06\x221\x03\x0a." + - "\x0a\x03\x0a7\x02\x03\x0a\x032\x03\x0a\x1d.\x03\x091\x06\x03\x09\x19:" + - "\x03\x08\x02/\x03\x060+\x03\x06\x0f-\x03\x06\x1c\x1f\x03\x06\x1d\x07\x03" + - "\x0a,\x11\x03\x09=\x0d\x03\x09\x0b;\x03\x07\x1b/\x03\x0a\x1f:\x03\x09 " + - "\x1f\x03\x09.\x10\x03\x094\x0b\x03\x09\x1a1\x03\x08#\x1a\x03\x084\x1d" + - "\x03\x08\x01\x1f\x03\x08\x11\x22\x03\x07'8\x03\x07\x1a>\x03\x0757\x03" + - "\x06&9\x03\x06+\x11\x03\x0a.\x0b\x03\x0a,>\x03\x0a4#\x03\x08%\x17\x03" + - "\x07\x05\x22\x03\x07\x0c\x0b\x03\x0a\x1d+\x03\x0a\x19\x16\x03\x09+\x1f" + - "\x03\x09\x08\x0b\x03\x08\x16\x18\x03\x08+\x12\x03\x0b\x1d\x0c\x03\x0a=" + - "\x10\x03\x0a\x09\x0d\x03\x0a\x10\x11\x03\x09&0\x03\x08(\x1f\x03\x087\x07" + - "\x03\x08\x185\x03\x07'6\x03\x06.\x05\x03\x06=\x04\x03\x06;;\x03\x06\x06," + - "\x03\x0b\x18>\x03\x08\x00\x18\x03\x06 \x03\x03\x06<\x00\x03\x09%\x18\x03" + - "\x0b\x1c<\x03\x0a%!\x03\x0a\x09\x12\x03\x0a\x16\x02\x03\x090'\x03\x09" + - "\x0e=\x03\x08 \x0e\x03\x08>\x03\x03\x074>\x03\x06&?\x03\x06\x19\x09\x03" + - "\x06?(\x03\x0a-\x0e\x03\x09:3\x03\x098:\x03\x09\x12\x0b\x03\x09\x1d\x17" + - "\x03\x087\x05\x03\x082\x14\x03\x08\x06%\x03\x08\x13\x1f\x03\x06\x06\x0e" + - "\x03\x0a\x22<\x03\x09/<\x03\x06>+\x03\x0a'?\x03\x0a\x13\x0c\x03\x09\x10<" + - "\x03\x07\x1b=\x03\x0a\x19\x13\x03\x09\x22\x1d\x03\x09\x07\x0d\x03\x08)" + - "\x1c\x03\x06=\x1a\x03\x0a/4\x03\x0a7\x11\x03\x0a\x16:\x03\x09?3\x03\x09:" + - "/\x03\x09\x05\x0a\x03\x09\x14\x06\x03\x087\x22\x03\x080\x07\x03\x08\x1a" + - "\x1f\x03\x07\x04(\x03\x07\x04\x09\x03\x06 %\x03\x06<\x08\x03\x0a+\x14" + - "\x03\x09\x1d\x16\x03\x0a70\x03\x08 >\x03\x0857\x03\x070\x0a\x03\x06=\x12" + - "\x03\x06\x16%\x03\x06\x1d,\x03\x099#\x03\x09\x10>\x03\x07 \x1e\x03\x08" + - "\x0c<\x03\x08\x0b\x18\x03\x08\x15+\x03\x08,:\x03\x08%\x22\x03\x07\x0a$" + - "\x03\x0b\x1c=\x03\x07+\x08\x03\x0a/\x05\x03\x0a \x07\x03\x0a\x12'\x03" + - "\x09#\x11\x03\x08\x1b\x15\x03\x0a\x06\x01\x03\x09\x1c\x1b\x03\x0922\x03" + - "\x07\x14<\x03\x07\x09\x04\x03\x061\x04\x03\x07\x0e\x01\x03\x0a\x13\x18" + - "\x03\x0a-\x0c\x03\x0a?\x0d\x03\x0a\x09\x0a\x03\x091&\x03\x0a/\x0b\x03" + - "\x08$<\x03\x083\x1d\x03\x08\x0c$\x03\x08\x0d\x07\x03\x08\x0d?\x03\x08" + - "\x0e\x14\x03\x065\x0a\x03\x08\x1a#\x03\x08\x16#\x03\x0702\x03\x07\x03" + - "\x1a\x03\x06(\x1d\x03\x06+\x1b\x03\x06\x0b\x05\x03\x06\x0b\x17\x03\x06" + - "\x0c\x04\x03\x06\x1e\x19\x03\x06+0\x03\x062\x18\x03\x0b\x16\x1e\x03\x0a+" + - "\x16\x03\x0a-?\x03\x0a#:\x03\x0a#\x10\x03\x0a%$\x03\x0a>+\x03\x0a01\x03" + - "\x0a1\x10\x03\x0a\x099\x03\x0a\x0a\x12\x03\x0a\x19\x1f\x03\x0a\x19\x12" + - "\x03\x09*)\x03\x09-\x16\x03\x09.1\x03\x09.2\x03\x09<\x0e\x03\x09> \x03" + - "\x093\x12\x03\x09\x0b\x01\x03\x09\x1c2\x03\x09\x11\x1c\x03\x09\x15%\x03" + - "\x08,&\x03\x08!\x22\x03\x089(\x03\x08\x0b\x1a\x03\x08\x0d2\x03\x08\x0c" + - "\x04\x03\x08\x0c\x06\x03\x08\x0c\x1f\x03\x08\x0c\x0c\x03\x08\x0f\x1f\x03" + - "\x08\x0f\x1d\x03\x08\x00\x14\x03\x08\x03\x14\x03\x08\x06\x16\x03\x08\x1e" + - "#\x03\x08\x11\x11\x03\x08\x10\x18\x03\x08\x14(\x03\x07)\x1e\x03\x07.1" + - "\x03\x07 $\x03\x07 '\x03\x078\x08\x03\x07\x0d0\x03\x07\x0f7\x03\x07\x05#" + - "\x03\x07\x05\x1a\x03\x07\x1a7\x03\x07\x1d-\x03\x07\x17\x10\x03\x06)\x1f" + - "\x03\x062\x0b\x03\x066\x16\x03\x06\x09\x11\x03\x09(\x1e\x03\x07!5\x03" + - "\x0b\x11\x16\x03\x0a/\x04\x03\x0a,\x1a\x03\x0b\x173\x03\x0a,1\x03\x0a/5" + - "\x03\x0a\x221\x03\x0a\x22\x0d\x03\x0a?%\x03\x0a<,\x03\x0a?#\x03\x0a>\x19" + - "\x03\x0a\x08&\x03\x0a\x0b\x0e\x03\x0a\x0c:\x03\x0a\x0c+\x03\x0a\x03\x22" + - "\x03\x0a\x06)\x03\x0a\x11\x10\x03\x0a\x11\x1a\x03\x0a\x17-\x03\x0a\x14(" + - "\x03\x09)\x1e\x03\x09/\x09\x03\x09.\x00\x03\x09,\x07\x03\x09/*\x03\x09-9" + - "\x03\x09\x228\x03\x09%\x09\x03\x09:\x12\x03\x09;\x1d\x03\x09?\x06\x03" + - "\x093%\x03\x096\x05\x03\x096\x08\x03\x097\x02\x03\x09\x07,\x03\x09\x04," + - "\x03\x09\x1f\x16\x03\x09\x11\x03\x03\x09\x11\x12\x03\x09\x168\x03\x08*" + - "\x05\x03\x08/2\x03\x084:\x03\x08\x22+\x03\x08 0\x03\x08&\x0a\x03\x08;" + - "\x10\x03\x08>$\x03\x08>\x18\x03\x0829\x03\x082:\x03\x081,\x03\x081<\x03" + - "\x081\x1c\x03\x087#\x03\x087*\x03\x08\x09'\x03\x08\x00\x1d\x03\x08\x05-" + - "\x03\x08\x1f4\x03\x08\x1d\x04\x03\x08\x16\x0f\x03\x07*7\x03\x07'!\x03" + - "\x07%\x1b\x03\x077\x0c\x03\x07\x0c1\x03\x07\x0c.\x03\x07\x00\x06\x03\x07" + - "\x01\x02\x03\x07\x010\x03\x07\x06=\x03\x07\x01\x03\x03\x07\x01\x13\x03" + - "\x07\x06\x06\x03\x07\x05\x0a\x03\x07\x1f\x09\x03\x07\x17:\x03\x06*1\x03" + - "\x06-\x1d\x03\x06\x223\x03\x062:\x03\x060$\x03\x066\x1e\x03\x064\x12\x03" + - "\x0645\x03\x06\x0b\x00\x03\x06\x0b7\x03\x06\x07\x1f\x03\x06\x15\x12\x03" + - "\x0c\x05\x0f\x03\x0b+\x0b\x03\x0b+-\x03\x06\x16\x1b\x03\x06\x15\x17\x03" + - "\x89\xca\xea\x03\x89\xca\xe8\x03\x0c8\x10\x03\x0c8\x01\x03\x0c8\x0f\x03" + - "\x0d8%\x03\x0d8!\x03\x0c8-\x03\x0c8/\x03\x0c8+\x03\x0c87\x03\x0c85\x03" + - "\x0c9\x09\x03\x0c9\x0d\x03\x0c9\x0f\x03\x0c9\x0b\x03\xcfu\x0c\x03\xcfu" + - "\x0f\x03\xcfu\x0e\x03\xcfu\x09\x03\x0c9\x10\x03\x0d9\x0c\x03\xcf`;\x03" + - "\xcf`>\x03\xcf`9\x03\xcf`8\x03\xcf`7\x03\xcf`*\x03\xcf`-\x03\xcf`,\x03" + - "\x0d\x1b\x1a\x03\x0d\x1b&\x03\x0c=.\x03\x0c=%\x03\x0c>\x1e\x03\x0c>\x14" + - "\x03\x0c?\x06\x03\x0c?\x0b\x03\x0c?\x0c\x03\x0c?\x0d\x03\x0c?\x02\x03" + - "\x0c>\x0f\x03\x0c>\x08\x03\x0c>\x09\x03\x0c>,\x03\x0c>\x0c\x03\x0c?\x13" + - "\x03\x0c?\x16\x03\x0c?\x15\x03\x0c?\x1c\x03\x0c?\x1f\x03\x0c?\x1d\x03" + - "\x0c?\x1a\x03\x0c?\x17\x03\x0c?\x08\x03\x0c?\x09\x03\x0c?\x0e\x03\x0c?" + - "\x04\x03\x0c?\x05\x03\x0c" + - "\x03\x0c=2\x03\x0c=6\x03\x0c<\x07\x03\x0c<\x05\x03\x0e:!\x03\x0e:#\x03" + - "\x0e8\x09\x03\x0e:&\x03\x0e8\x0b\x03\x0e:$\x03\x0e:,\x03\x0e8\x1a\x03" + - "\x0e8\x1e\x03\x0e:*\x03\x0e:7\x03\x0e:5\x03\x0e:;\x03\x0e:\x15\x03\x0e:<" + - "\x03\x0e:4\x03\x0e:'\x03\x0e:-\x03\x0e:%\x03\x0e:?\x03\x0e:=\x03\x0e:)" + - "\x03\x0e:/\x03\xcfs'\x03\x0d=\x0f\x03\x0d+*\x03\x0d99\x03\x0d9;\x03\x0d9" + - "?\x03\x0d)\x0d\x03\x0d(%\x02\x01\x18\x02\x01(\x02\x01\x1e\x03\x0f$!\x03" + - "\x0f87\x03\x0f4\x0e\x03\x0f5\x1d\x03\x06'\x03\x03\x0f\x08\x18\x03\x0f" + - "\x0d\x1b\x03\x0e2=\x03\x0e;\x08\x03\x0e:\x0b\x03\x0e\x06$\x03\x0e\x0d)" + - "\x03\x0e\x16\x1f\x03\x0e\x16\x1b\x03\x0d$\x0a\x03\x05,\x1d\x03\x0d. \x03" + - "\x0d.#\x03\x0c(/\x03\x09%\x02\x03\x0d90\x03\x0d\x0e4\x03\x0d\x0d\x0f\x03" + - "\x0c#\x00\x03\x0c,\x1e\x03\x0c2\x0e\x03\x0c\x01\x17\x03\x0c\x09:\x03\x0e" + - "\x173\x03\x0c\x08\x03\x03\x0c\x11\x07\x03\x0c\x10\x18\x03\x0c\x1f\x1c" + - "\x03\x0c\x19\x0e\x03\x0c\x1a\x1f\x03\x0f0>\x03\x0b->\x03\x0b<+\x03\x0b8" + - "\x13\x03\x0b\x043\x03\x0b\x14\x03\x03\x0b\x16%\x03\x0d\x22&\x03\x0b\x1a" + - "\x1a\x03\x0b\x1a\x04\x03\x0a%9\x03\x0a&2\x03\x0a&0\x03\x0a!\x1a\x03\x0a!" + - "7\x03\x0a5\x10\x03\x0a=4\x03\x0a?\x0e\x03\x0a>\x10\x03\x0a\x00 \x03\x0a" + - "\x0f:\x03\x0a\x0f9\x03\x0a\x0b\x0a\x03\x0a\x17%\x03\x0a\x1b-\x03\x09-" + - "\x1a\x03\x09,4\x03\x09.,\x03\x09)\x09\x03\x096!\x03\x091\x1f\x03\x093" + - "\x16\x03\x0c+\x1f\x03\x098 \x03\x098=\x03\x0c(\x1a\x03\x0c(\x16\x03\x09" + - "\x0a+\x03\x09\x16\x12\x03\x09\x13\x0e\x03\x09\x153\x03\x08)!\x03\x09\x1a" + - "\x01\x03\x09\x18\x01\x03\x08%#\x03\x08>\x22\x03\x08\x05%\x03\x08\x02*" + - "\x03\x08\x15;\x03\x08\x1b7\x03\x0f\x07\x1d\x03\x0f\x04\x03\x03\x070\x0c" + - "\x03\x07;\x0b\x03\x07\x08\x17\x03\x07\x12\x06\x03\x06/-\x03\x0671\x03" + - "\x065+\x03\x06>7\x03\x06\x049\x03\x05+\x1e\x03\x05,\x17\x03\x05 \x1d\x03" + - "\x05\x22\x05\x03\x050\x1d" - -// 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 *idnaTrie) lookup(s []byte) (v uint16, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return idnaValues[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 := idnaIndex[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 := idnaIndex[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 = idnaIndex[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 := idnaIndex[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 = idnaIndex[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 = idnaIndex[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 *idnaTrie) lookupUnsafe(s []byte) uint16 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return idnaValues[c0] - } - i := idnaIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = idnaIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = idnaIndex[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 *idnaTrie) lookupString(s string) (v uint16, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return idnaValues[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 := idnaIndex[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 := idnaIndex[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 = idnaIndex[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 := idnaIndex[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 = idnaIndex[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 = idnaIndex[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 *idnaTrie) lookupStringUnsafe(s string) uint16 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return idnaValues[c0] - } - i := idnaIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = idnaIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = idnaIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// idnaTrie. Total size: 28496 bytes (27.83 KiB). Checksum: 43288b883596640e. -type idnaTrie struct{} - -func newIdnaTrie(i int) *idnaTrie { - return &idnaTrie{} -} - -// lookupValue determines the type of block n and looks up the value for b. -func (t *idnaTrie) lookupValue(n uint32, b byte) uint16 { - switch { - case n < 123: - return uint16(idnaValues[n<<6+uint32(b)]) - default: - n -= 123 - return uint16(idnaSparse.lookup(n, b)) - } -} - -// idnaValues: 125 blocks, 8000 entries, 16000 bytes -// The third block is the zero block. -var idnaValues = [8000]uint16{ - // Block 0x0, offset 0x0 - 0x00: 0x0080, 0x01: 0x0080, 0x02: 0x0080, 0x03: 0x0080, 0x04: 0x0080, 0x05: 0x0080, - 0x06: 0x0080, 0x07: 0x0080, 0x08: 0x0080, 0x09: 0x0080, 0x0a: 0x0080, 0x0b: 0x0080, - 0x0c: 0x0080, 0x0d: 0x0080, 0x0e: 0x0080, 0x0f: 0x0080, 0x10: 0x0080, 0x11: 0x0080, - 0x12: 0x0080, 0x13: 0x0080, 0x14: 0x0080, 0x15: 0x0080, 0x16: 0x0080, 0x17: 0x0080, - 0x18: 0x0080, 0x19: 0x0080, 0x1a: 0x0080, 0x1b: 0x0080, 0x1c: 0x0080, 0x1d: 0x0080, - 0x1e: 0x0080, 0x1f: 0x0080, 0x20: 0x0080, 0x21: 0x0080, 0x22: 0x0080, 0x23: 0x0080, - 0x24: 0x0080, 0x25: 0x0080, 0x26: 0x0080, 0x27: 0x0080, 0x28: 0x0080, 0x29: 0x0080, - 0x2a: 0x0080, 0x2b: 0x0080, 0x2c: 0x0080, 0x2d: 0x0008, 0x2e: 0x0008, 0x2f: 0x0080, - 0x30: 0x0008, 0x31: 0x0008, 0x32: 0x0008, 0x33: 0x0008, 0x34: 0x0008, 0x35: 0x0008, - 0x36: 0x0008, 0x37: 0x0008, 0x38: 0x0008, 0x39: 0x0008, 0x3a: 0x0080, 0x3b: 0x0080, - 0x3c: 0x0080, 0x3d: 0x0080, 0x3e: 0x0080, 0x3f: 0x0080, - // Block 0x1, offset 0x40 - 0x40: 0x0080, 0x41: 0xe105, 0x42: 0xe105, 0x43: 0xe105, 0x44: 0xe105, 0x45: 0xe105, - 0x46: 0xe105, 0x47: 0xe105, 0x48: 0xe105, 0x49: 0xe105, 0x4a: 0xe105, 0x4b: 0xe105, - 0x4c: 0xe105, 0x4d: 0xe105, 0x4e: 0xe105, 0x4f: 0xe105, 0x50: 0xe105, 0x51: 0xe105, - 0x52: 0xe105, 0x53: 0xe105, 0x54: 0xe105, 0x55: 0xe105, 0x56: 0xe105, 0x57: 0xe105, - 0x58: 0xe105, 0x59: 0xe105, 0x5a: 0xe105, 0x5b: 0x0080, 0x5c: 0x0080, 0x5d: 0x0080, - 0x5e: 0x0080, 0x5f: 0x0080, 0x60: 0x0080, 0x61: 0x0008, 0x62: 0x0008, 0x63: 0x0008, - 0x64: 0x0008, 0x65: 0x0008, 0x66: 0x0008, 0x67: 0x0008, 0x68: 0x0008, 0x69: 0x0008, - 0x6a: 0x0008, 0x6b: 0x0008, 0x6c: 0x0008, 0x6d: 0x0008, 0x6e: 0x0008, 0x6f: 0x0008, - 0x70: 0x0008, 0x71: 0x0008, 0x72: 0x0008, 0x73: 0x0008, 0x74: 0x0008, 0x75: 0x0008, - 0x76: 0x0008, 0x77: 0x0008, 0x78: 0x0008, 0x79: 0x0008, 0x7a: 0x0008, 0x7b: 0x0080, - 0x7c: 0x0080, 0x7d: 0x0080, 0x7e: 0x0080, 0x7f: 0x0080, - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc0: 0x0040, 0xc1: 0x0040, 0xc2: 0x0040, 0xc3: 0x0040, 0xc4: 0x0040, 0xc5: 0x0040, - 0xc6: 0x0040, 0xc7: 0x0040, 0xc8: 0x0040, 0xc9: 0x0040, 0xca: 0x0040, 0xcb: 0x0040, - 0xcc: 0x0040, 0xcd: 0x0040, 0xce: 0x0040, 0xcf: 0x0040, 0xd0: 0x0040, 0xd1: 0x0040, - 0xd2: 0x0040, 0xd3: 0x0040, 0xd4: 0x0040, 0xd5: 0x0040, 0xd6: 0x0040, 0xd7: 0x0040, - 0xd8: 0x0040, 0xd9: 0x0040, 0xda: 0x0040, 0xdb: 0x0040, 0xdc: 0x0040, 0xdd: 0x0040, - 0xde: 0x0040, 0xdf: 0x0040, 0xe0: 0x000a, 0xe1: 0x0018, 0xe2: 0x0018, 0xe3: 0x0018, - 0xe4: 0x0018, 0xe5: 0x0018, 0xe6: 0x0018, 0xe7: 0x0018, 0xe8: 0x001a, 0xe9: 0x0018, - 0xea: 0x0039, 0xeb: 0x0018, 0xec: 0x0018, 0xed: 0x03c0, 0xee: 0x0018, 0xef: 0x004a, - 0xf0: 0x0018, 0xf1: 0x0018, 0xf2: 0x0069, 0xf3: 0x0079, 0xf4: 0x008a, 0xf5: 0x0005, - 0xf6: 0x0018, 0xf7: 0x0008, 0xf8: 0x00aa, 0xf9: 0x00c9, 0xfa: 0x00d9, 0xfb: 0x0018, - 0xfc: 0x00e9, 0xfd: 0x0119, 0xfe: 0x0149, 0xff: 0x0018, - // Block 0x4, offset 0x100 - 0x100: 0xe00d, 0x101: 0x0008, 0x102: 0xe00d, 0x103: 0x0008, 0x104: 0xe00d, 0x105: 0x0008, - 0x106: 0xe00d, 0x107: 0x0008, 0x108: 0xe00d, 0x109: 0x0008, 0x10a: 0xe00d, 0x10b: 0x0008, - 0x10c: 0xe00d, 0x10d: 0x0008, 0x10e: 0xe00d, 0x10f: 0x0008, 0x110: 0xe00d, 0x111: 0x0008, - 0x112: 0xe00d, 0x113: 0x0008, 0x114: 0xe00d, 0x115: 0x0008, 0x116: 0xe00d, 0x117: 0x0008, - 0x118: 0xe00d, 0x119: 0x0008, 0x11a: 0xe00d, 0x11b: 0x0008, 0x11c: 0xe00d, 0x11d: 0x0008, - 0x11e: 0xe00d, 0x11f: 0x0008, 0x120: 0xe00d, 0x121: 0x0008, 0x122: 0xe00d, 0x123: 0x0008, - 0x124: 0xe00d, 0x125: 0x0008, 0x126: 0xe00d, 0x127: 0x0008, 0x128: 0xe00d, 0x129: 0x0008, - 0x12a: 0xe00d, 0x12b: 0x0008, 0x12c: 0xe00d, 0x12d: 0x0008, 0x12e: 0xe00d, 0x12f: 0x0008, - 0x130: 0x0179, 0x131: 0x0008, 0x132: 0x0035, 0x133: 0x004d, 0x134: 0xe00d, 0x135: 0x0008, - 0x136: 0xe00d, 0x137: 0x0008, 0x138: 0x0008, 0x139: 0xe01d, 0x13a: 0x0008, 0x13b: 0xe03d, - 0x13c: 0x0008, 0x13d: 0xe01d, 0x13e: 0x0008, 0x13f: 0x0199, - // Block 0x5, offset 0x140 - 0x140: 0x0199, 0x141: 0xe01d, 0x142: 0x0008, 0x143: 0xe03d, 0x144: 0x0008, 0x145: 0xe01d, - 0x146: 0x0008, 0x147: 0xe07d, 0x148: 0x0008, 0x149: 0x01b9, 0x14a: 0xe00d, 0x14b: 0x0008, - 0x14c: 0xe00d, 0x14d: 0x0008, 0x14e: 0xe00d, 0x14f: 0x0008, 0x150: 0xe00d, 0x151: 0x0008, - 0x152: 0xe00d, 0x153: 0x0008, 0x154: 0xe00d, 0x155: 0x0008, 0x156: 0xe00d, 0x157: 0x0008, - 0x158: 0xe00d, 0x159: 0x0008, 0x15a: 0xe00d, 0x15b: 0x0008, 0x15c: 0xe00d, 0x15d: 0x0008, - 0x15e: 0xe00d, 0x15f: 0x0008, 0x160: 0xe00d, 0x161: 0x0008, 0x162: 0xe00d, 0x163: 0x0008, - 0x164: 0xe00d, 0x165: 0x0008, 0x166: 0xe00d, 0x167: 0x0008, 0x168: 0xe00d, 0x169: 0x0008, - 0x16a: 0xe00d, 0x16b: 0x0008, 0x16c: 0xe00d, 0x16d: 0x0008, 0x16e: 0xe00d, 0x16f: 0x0008, - 0x170: 0xe00d, 0x171: 0x0008, 0x172: 0xe00d, 0x173: 0x0008, 0x174: 0xe00d, 0x175: 0x0008, - 0x176: 0xe00d, 0x177: 0x0008, 0x178: 0x0065, 0x179: 0xe01d, 0x17a: 0x0008, 0x17b: 0xe03d, - 0x17c: 0x0008, 0x17d: 0xe01d, 0x17e: 0x0008, 0x17f: 0x01d9, - // Block 0x6, offset 0x180 - 0x180: 0x0008, 0x181: 0x007d, 0x182: 0xe00d, 0x183: 0x0008, 0x184: 0xe00d, 0x185: 0x0008, - 0x186: 0x007d, 0x187: 0xe07d, 0x188: 0x0008, 0x189: 0x0095, 0x18a: 0x00ad, 0x18b: 0xe03d, - 0x18c: 0x0008, 0x18d: 0x0008, 0x18e: 0x00c5, 0x18f: 0x00dd, 0x190: 0x00f5, 0x191: 0xe01d, - 0x192: 0x0008, 0x193: 0x010d, 0x194: 0x0125, 0x195: 0x0008, 0x196: 0x013d, 0x197: 0x013d, - 0x198: 0xe00d, 0x199: 0x0008, 0x19a: 0x0008, 0x19b: 0x0008, 0x19c: 0x010d, 0x19d: 0x0155, - 0x19e: 0x0008, 0x19f: 0x016d, 0x1a0: 0xe00d, 0x1a1: 0x0008, 0x1a2: 0xe00d, 0x1a3: 0x0008, - 0x1a4: 0xe00d, 0x1a5: 0x0008, 0x1a6: 0x0185, 0x1a7: 0xe07d, 0x1a8: 0x0008, 0x1a9: 0x019d, - 0x1aa: 0x0008, 0x1ab: 0x0008, 0x1ac: 0xe00d, 0x1ad: 0x0008, 0x1ae: 0x0185, 0x1af: 0xe0fd, - 0x1b0: 0x0008, 0x1b1: 0x01b5, 0x1b2: 0x01cd, 0x1b3: 0xe03d, 0x1b4: 0x0008, 0x1b5: 0xe01d, - 0x1b6: 0x0008, 0x1b7: 0x01e5, 0x1b8: 0xe00d, 0x1b9: 0x0008, 0x1ba: 0x0008, 0x1bb: 0x0008, - 0x1bc: 0xe00d, 0x1bd: 0x0008, 0x1be: 0x0008, 0x1bf: 0x0008, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x0008, 0x1c1: 0x0008, 0x1c2: 0x0008, 0x1c3: 0x0008, 0x1c4: 0x01e9, 0x1c5: 0x01e9, - 0x1c6: 0x01e9, 0x1c7: 0x01fd, 0x1c8: 0x0215, 0x1c9: 0x022d, 0x1ca: 0x0245, 0x1cb: 0x025d, - 0x1cc: 0x0275, 0x1cd: 0xe01d, 0x1ce: 0x0008, 0x1cf: 0xe0fd, 0x1d0: 0x0008, 0x1d1: 0xe01d, - 0x1d2: 0x0008, 0x1d3: 0xe03d, 0x1d4: 0x0008, 0x1d5: 0xe01d, 0x1d6: 0x0008, 0x1d7: 0xe07d, - 0x1d8: 0x0008, 0x1d9: 0xe01d, 0x1da: 0x0008, 0x1db: 0xe03d, 0x1dc: 0x0008, 0x1dd: 0x0008, - 0x1de: 0xe00d, 0x1df: 0x0008, 0x1e0: 0xe00d, 0x1e1: 0x0008, 0x1e2: 0xe00d, 0x1e3: 0x0008, - 0x1e4: 0xe00d, 0x1e5: 0x0008, 0x1e6: 0xe00d, 0x1e7: 0x0008, 0x1e8: 0xe00d, 0x1e9: 0x0008, - 0x1ea: 0xe00d, 0x1eb: 0x0008, 0x1ec: 0xe00d, 0x1ed: 0x0008, 0x1ee: 0xe00d, 0x1ef: 0x0008, - 0x1f0: 0x0008, 0x1f1: 0x028d, 0x1f2: 0x02a5, 0x1f3: 0x02bd, 0x1f4: 0xe00d, 0x1f5: 0x0008, - 0x1f6: 0x02d5, 0x1f7: 0x02ed, 0x1f8: 0xe00d, 0x1f9: 0x0008, 0x1fa: 0xe00d, 0x1fb: 0x0008, - 0x1fc: 0xe00d, 0x1fd: 0x0008, 0x1fe: 0xe00d, 0x1ff: 0x0008, - // Block 0x8, offset 0x200 - 0x200: 0xe00d, 0x201: 0x0008, 0x202: 0xe00d, 0x203: 0x0008, 0x204: 0xe00d, 0x205: 0x0008, - 0x206: 0xe00d, 0x207: 0x0008, 0x208: 0xe00d, 0x209: 0x0008, 0x20a: 0xe00d, 0x20b: 0x0008, - 0x20c: 0xe00d, 0x20d: 0x0008, 0x20e: 0xe00d, 0x20f: 0x0008, 0x210: 0xe00d, 0x211: 0x0008, - 0x212: 0xe00d, 0x213: 0x0008, 0x214: 0xe00d, 0x215: 0x0008, 0x216: 0xe00d, 0x217: 0x0008, - 0x218: 0xe00d, 0x219: 0x0008, 0x21a: 0xe00d, 0x21b: 0x0008, 0x21c: 0xe00d, 0x21d: 0x0008, - 0x21e: 0xe00d, 0x21f: 0x0008, 0x220: 0x0305, 0x221: 0x0008, 0x222: 0xe00d, 0x223: 0x0008, - 0x224: 0xe00d, 0x225: 0x0008, 0x226: 0xe00d, 0x227: 0x0008, 0x228: 0xe00d, 0x229: 0x0008, - 0x22a: 0xe00d, 0x22b: 0x0008, 0x22c: 0xe00d, 0x22d: 0x0008, 0x22e: 0xe00d, 0x22f: 0x0008, - 0x230: 0xe00d, 0x231: 0x0008, 0x232: 0xe00d, 0x233: 0x0008, 0x234: 0x0008, 0x235: 0x0008, - 0x236: 0x0008, 0x237: 0x0008, 0x238: 0x0008, 0x239: 0x0008, 0x23a: 0x0209, 0x23b: 0xe03d, - 0x23c: 0x0008, 0x23d: 0x031d, 0x23e: 0x0229, 0x23f: 0x0008, - // Block 0x9, offset 0x240 - 0x240: 0x0008, 0x241: 0x0008, 0x242: 0x0018, 0x243: 0x0018, 0x244: 0x0018, 0x245: 0x0018, - 0x246: 0x0008, 0x247: 0x0008, 0x248: 0x0008, 0x249: 0x0008, 0x24a: 0x0008, 0x24b: 0x0008, - 0x24c: 0x0008, 0x24d: 0x0008, 0x24e: 0x0008, 0x24f: 0x0008, 0x250: 0x0008, 0x251: 0x0008, - 0x252: 0x0018, 0x253: 0x0018, 0x254: 0x0018, 0x255: 0x0018, 0x256: 0x0018, 0x257: 0x0018, - 0x258: 0x029a, 0x259: 0x02ba, 0x25a: 0x02da, 0x25b: 0x02fa, 0x25c: 0x031a, 0x25d: 0x033a, - 0x25e: 0x0018, 0x25f: 0x0018, 0x260: 0x03ad, 0x261: 0x0359, 0x262: 0x01d9, 0x263: 0x0369, - 0x264: 0x03c5, 0x265: 0x0018, 0x266: 0x0018, 0x267: 0x0018, 0x268: 0x0018, 0x269: 0x0018, - 0x26a: 0x0018, 0x26b: 0x0018, 0x26c: 0x0008, 0x26d: 0x0018, 0x26e: 0x0008, 0x26f: 0x0018, - 0x270: 0x0018, 0x271: 0x0018, 0x272: 0x0018, 0x273: 0x0018, 0x274: 0x0018, 0x275: 0x0018, - 0x276: 0x0018, 0x277: 0x0018, 0x278: 0x0018, 0x279: 0x0018, 0x27a: 0x0018, 0x27b: 0x0018, - 0x27c: 0x0018, 0x27d: 0x0018, 0x27e: 0x0018, 0x27f: 0x0018, - // Block 0xa, offset 0x280 - 0x280: 0x03dd, 0x281: 0x03dd, 0x282: 0x1308, 0x283: 0x03f5, 0x284: 0x0379, 0x285: 0x040d, - 0x286: 0x1308, 0x287: 0x1308, 0x288: 0x1308, 0x289: 0x1308, 0x28a: 0x1308, 0x28b: 0x1308, - 0x28c: 0x1308, 0x28d: 0x1308, 0x28e: 0x1308, 0x28f: 0x13c0, 0x290: 0x1308, 0x291: 0x1308, - 0x292: 0x1308, 0x293: 0x1308, 0x294: 0x1308, 0x295: 0x1308, 0x296: 0x1308, 0x297: 0x1308, - 0x298: 0x1308, 0x299: 0x1308, 0x29a: 0x1308, 0x29b: 0x1308, 0x29c: 0x1308, 0x29d: 0x1308, - 0x29e: 0x1308, 0x29f: 0x1308, 0x2a0: 0x1308, 0x2a1: 0x1308, 0x2a2: 0x1308, 0x2a3: 0x1308, - 0x2a4: 0x1308, 0x2a5: 0x1308, 0x2a6: 0x1308, 0x2a7: 0x1308, 0x2a8: 0x1308, 0x2a9: 0x1308, - 0x2aa: 0x1308, 0x2ab: 0x1308, 0x2ac: 0x1308, 0x2ad: 0x1308, 0x2ae: 0x1308, 0x2af: 0x1308, - 0x2b0: 0xe00d, 0x2b1: 0x0008, 0x2b2: 0xe00d, 0x2b3: 0x0008, 0x2b4: 0x0425, 0x2b5: 0x0008, - 0x2b6: 0xe00d, 0x2b7: 0x0008, 0x2b8: 0x0040, 0x2b9: 0x0040, 0x2ba: 0x03a2, 0x2bb: 0x0008, - 0x2bc: 0x0008, 0x2bd: 0x0008, 0x2be: 0x03c2, 0x2bf: 0x043d, - // Block 0xb, offset 0x2c0 - 0x2c0: 0x0040, 0x2c1: 0x0040, 0x2c2: 0x0040, 0x2c3: 0x0040, 0x2c4: 0x008a, 0x2c5: 0x03d2, - 0x2c6: 0xe155, 0x2c7: 0x0455, 0x2c8: 0xe12d, 0x2c9: 0xe13d, 0x2ca: 0xe12d, 0x2cb: 0x0040, - 0x2cc: 0x03dd, 0x2cd: 0x0040, 0x2ce: 0x046d, 0x2cf: 0x0485, 0x2d0: 0x0008, 0x2d1: 0xe105, - 0x2d2: 0xe105, 0x2d3: 0xe105, 0x2d4: 0xe105, 0x2d5: 0xe105, 0x2d6: 0xe105, 0x2d7: 0xe105, - 0x2d8: 0xe105, 0x2d9: 0xe105, 0x2da: 0xe105, 0x2db: 0xe105, 0x2dc: 0xe105, 0x2dd: 0xe105, - 0x2de: 0xe105, 0x2df: 0xe105, 0x2e0: 0x049d, 0x2e1: 0x049d, 0x2e2: 0x0040, 0x2e3: 0x049d, - 0x2e4: 0x049d, 0x2e5: 0x049d, 0x2e6: 0x049d, 0x2e7: 0x049d, 0x2e8: 0x049d, 0x2e9: 0x049d, - 0x2ea: 0x049d, 0x2eb: 0x049d, 0x2ec: 0x0008, 0x2ed: 0x0008, 0x2ee: 0x0008, 0x2ef: 0x0008, - 0x2f0: 0x0008, 0x2f1: 0x0008, 0x2f2: 0x0008, 0x2f3: 0x0008, 0x2f4: 0x0008, 0x2f5: 0x0008, - 0x2f6: 0x0008, 0x2f7: 0x0008, 0x2f8: 0x0008, 0x2f9: 0x0008, 0x2fa: 0x0008, 0x2fb: 0x0008, - 0x2fc: 0x0008, 0x2fd: 0x0008, 0x2fe: 0x0008, 0x2ff: 0x0008, - // Block 0xc, offset 0x300 - 0x300: 0x0008, 0x301: 0x0008, 0x302: 0xe00f, 0x303: 0x0008, 0x304: 0x0008, 0x305: 0x0008, - 0x306: 0x0008, 0x307: 0x0008, 0x308: 0x0008, 0x309: 0x0008, 0x30a: 0x0008, 0x30b: 0x0008, - 0x30c: 0x0008, 0x30d: 0x0008, 0x30e: 0x0008, 0x30f: 0xe0c5, 0x310: 0x04b5, 0x311: 0x04cd, - 0x312: 0xe0bd, 0x313: 0xe0f5, 0x314: 0xe0fd, 0x315: 0xe09d, 0x316: 0xe0b5, 0x317: 0x0008, - 0x318: 0xe00d, 0x319: 0x0008, 0x31a: 0xe00d, 0x31b: 0x0008, 0x31c: 0xe00d, 0x31d: 0x0008, - 0x31e: 0xe00d, 0x31f: 0x0008, 0x320: 0xe00d, 0x321: 0x0008, 0x322: 0xe00d, 0x323: 0x0008, - 0x324: 0xe00d, 0x325: 0x0008, 0x326: 0xe00d, 0x327: 0x0008, 0x328: 0xe00d, 0x329: 0x0008, - 0x32a: 0xe00d, 0x32b: 0x0008, 0x32c: 0xe00d, 0x32d: 0x0008, 0x32e: 0xe00d, 0x32f: 0x0008, - 0x330: 0x04e5, 0x331: 0xe185, 0x332: 0xe18d, 0x333: 0x0008, 0x334: 0x04fd, 0x335: 0x03dd, - 0x336: 0x0018, 0x337: 0xe07d, 0x338: 0x0008, 0x339: 0xe1d5, 0x33a: 0xe00d, 0x33b: 0x0008, - 0x33c: 0x0008, 0x33d: 0x0515, 0x33e: 0x052d, 0x33f: 0x052d, - // Block 0xd, offset 0x340 - 0x340: 0x0008, 0x341: 0x0008, 0x342: 0x0008, 0x343: 0x0008, 0x344: 0x0008, 0x345: 0x0008, - 0x346: 0x0008, 0x347: 0x0008, 0x348: 0x0008, 0x349: 0x0008, 0x34a: 0x0008, 0x34b: 0x0008, - 0x34c: 0x0008, 0x34d: 0x0008, 0x34e: 0x0008, 0x34f: 0x0008, 0x350: 0x0008, 0x351: 0x0008, - 0x352: 0x0008, 0x353: 0x0008, 0x354: 0x0008, 0x355: 0x0008, 0x356: 0x0008, 0x357: 0x0008, - 0x358: 0x0008, 0x359: 0x0008, 0x35a: 0x0008, 0x35b: 0x0008, 0x35c: 0x0008, 0x35d: 0x0008, - 0x35e: 0x0008, 0x35f: 0x0008, 0x360: 0xe00d, 0x361: 0x0008, 0x362: 0xe00d, 0x363: 0x0008, - 0x364: 0xe00d, 0x365: 0x0008, 0x366: 0xe00d, 0x367: 0x0008, 0x368: 0xe00d, 0x369: 0x0008, - 0x36a: 0xe00d, 0x36b: 0x0008, 0x36c: 0xe00d, 0x36d: 0x0008, 0x36e: 0xe00d, 0x36f: 0x0008, - 0x370: 0xe00d, 0x371: 0x0008, 0x372: 0xe00d, 0x373: 0x0008, 0x374: 0xe00d, 0x375: 0x0008, - 0x376: 0xe00d, 0x377: 0x0008, 0x378: 0xe00d, 0x379: 0x0008, 0x37a: 0xe00d, 0x37b: 0x0008, - 0x37c: 0xe00d, 0x37d: 0x0008, 0x37e: 0xe00d, 0x37f: 0x0008, - // Block 0xe, offset 0x380 - 0x380: 0xe00d, 0x381: 0x0008, 0x382: 0x0018, 0x383: 0x1308, 0x384: 0x1308, 0x385: 0x1308, - 0x386: 0x1308, 0x387: 0x1308, 0x388: 0x1318, 0x389: 0x1318, 0x38a: 0xe00d, 0x38b: 0x0008, - 0x38c: 0xe00d, 0x38d: 0x0008, 0x38e: 0xe00d, 0x38f: 0x0008, 0x390: 0xe00d, 0x391: 0x0008, - 0x392: 0xe00d, 0x393: 0x0008, 0x394: 0xe00d, 0x395: 0x0008, 0x396: 0xe00d, 0x397: 0x0008, - 0x398: 0xe00d, 0x399: 0x0008, 0x39a: 0xe00d, 0x39b: 0x0008, 0x39c: 0xe00d, 0x39d: 0x0008, - 0x39e: 0xe00d, 0x39f: 0x0008, 0x3a0: 0xe00d, 0x3a1: 0x0008, 0x3a2: 0xe00d, 0x3a3: 0x0008, - 0x3a4: 0xe00d, 0x3a5: 0x0008, 0x3a6: 0xe00d, 0x3a7: 0x0008, 0x3a8: 0xe00d, 0x3a9: 0x0008, - 0x3aa: 0xe00d, 0x3ab: 0x0008, 0x3ac: 0xe00d, 0x3ad: 0x0008, 0x3ae: 0xe00d, 0x3af: 0x0008, - 0x3b0: 0xe00d, 0x3b1: 0x0008, 0x3b2: 0xe00d, 0x3b3: 0x0008, 0x3b4: 0xe00d, 0x3b5: 0x0008, - 0x3b6: 0xe00d, 0x3b7: 0x0008, 0x3b8: 0xe00d, 0x3b9: 0x0008, 0x3ba: 0xe00d, 0x3bb: 0x0008, - 0x3bc: 0xe00d, 0x3bd: 0x0008, 0x3be: 0xe00d, 0x3bf: 0x0008, - // Block 0xf, offset 0x3c0 - 0x3c0: 0x0040, 0x3c1: 0xe01d, 0x3c2: 0x0008, 0x3c3: 0xe03d, 0x3c4: 0x0008, 0x3c5: 0xe01d, - 0x3c6: 0x0008, 0x3c7: 0xe07d, 0x3c8: 0x0008, 0x3c9: 0xe01d, 0x3ca: 0x0008, 0x3cb: 0xe03d, - 0x3cc: 0x0008, 0x3cd: 0xe01d, 0x3ce: 0x0008, 0x3cf: 0x0008, 0x3d0: 0xe00d, 0x3d1: 0x0008, - 0x3d2: 0xe00d, 0x3d3: 0x0008, 0x3d4: 0xe00d, 0x3d5: 0x0008, 0x3d6: 0xe00d, 0x3d7: 0x0008, - 0x3d8: 0xe00d, 0x3d9: 0x0008, 0x3da: 0xe00d, 0x3db: 0x0008, 0x3dc: 0xe00d, 0x3dd: 0x0008, - 0x3de: 0xe00d, 0x3df: 0x0008, 0x3e0: 0xe00d, 0x3e1: 0x0008, 0x3e2: 0xe00d, 0x3e3: 0x0008, - 0x3e4: 0xe00d, 0x3e5: 0x0008, 0x3e6: 0xe00d, 0x3e7: 0x0008, 0x3e8: 0xe00d, 0x3e9: 0x0008, - 0x3ea: 0xe00d, 0x3eb: 0x0008, 0x3ec: 0xe00d, 0x3ed: 0x0008, 0x3ee: 0xe00d, 0x3ef: 0x0008, - 0x3f0: 0xe00d, 0x3f1: 0x0008, 0x3f2: 0xe00d, 0x3f3: 0x0008, 0x3f4: 0xe00d, 0x3f5: 0x0008, - 0x3f6: 0xe00d, 0x3f7: 0x0008, 0x3f8: 0xe00d, 0x3f9: 0x0008, 0x3fa: 0xe00d, 0x3fb: 0x0008, - 0x3fc: 0xe00d, 0x3fd: 0x0008, 0x3fe: 0xe00d, 0x3ff: 0x0008, - // Block 0x10, offset 0x400 - 0x400: 0xe00d, 0x401: 0x0008, 0x402: 0xe00d, 0x403: 0x0008, 0x404: 0xe00d, 0x405: 0x0008, - 0x406: 0xe00d, 0x407: 0x0008, 0x408: 0xe00d, 0x409: 0x0008, 0x40a: 0xe00d, 0x40b: 0x0008, - 0x40c: 0xe00d, 0x40d: 0x0008, 0x40e: 0xe00d, 0x40f: 0x0008, 0x410: 0xe00d, 0x411: 0x0008, - 0x412: 0xe00d, 0x413: 0x0008, 0x414: 0xe00d, 0x415: 0x0008, 0x416: 0xe00d, 0x417: 0x0008, - 0x418: 0xe00d, 0x419: 0x0008, 0x41a: 0xe00d, 0x41b: 0x0008, 0x41c: 0xe00d, 0x41d: 0x0008, - 0x41e: 0xe00d, 0x41f: 0x0008, 0x420: 0xe00d, 0x421: 0x0008, 0x422: 0xe00d, 0x423: 0x0008, - 0x424: 0xe00d, 0x425: 0x0008, 0x426: 0xe00d, 0x427: 0x0008, 0x428: 0xe00d, 0x429: 0x0008, - 0x42a: 0xe00d, 0x42b: 0x0008, 0x42c: 0xe00d, 0x42d: 0x0008, 0x42e: 0xe00d, 0x42f: 0x0008, - 0x430: 0x0040, 0x431: 0x03f5, 0x432: 0x03f5, 0x433: 0x03f5, 0x434: 0x03f5, 0x435: 0x03f5, - 0x436: 0x03f5, 0x437: 0x03f5, 0x438: 0x03f5, 0x439: 0x03f5, 0x43a: 0x03f5, 0x43b: 0x03f5, - 0x43c: 0x03f5, 0x43d: 0x03f5, 0x43e: 0x03f5, 0x43f: 0x03f5, - // Block 0x11, offset 0x440 - 0x440: 0x0040, 0x441: 0x0040, 0x442: 0x0040, 0x443: 0x0040, 0x444: 0x0040, 0x445: 0x0040, - 0x446: 0x0018, 0x447: 0x0018, 0x448: 0x0018, 0x449: 0x0018, 0x44a: 0x0018, 0x44b: 0x0018, - 0x44c: 0x0018, 0x44d: 0x0018, 0x44e: 0x0018, 0x44f: 0x0018, 0x450: 0x1308, 0x451: 0x1308, - 0x452: 0x1308, 0x453: 0x1308, 0x454: 0x1308, 0x455: 0x1308, 0x456: 0x1308, 0x457: 0x1308, - 0x458: 0x1308, 0x459: 0x1308, 0x45a: 0x1308, 0x45b: 0x0018, 0x45c: 0x0340, 0x45d: 0x0040, - 0x45e: 0x0018, 0x45f: 0x0018, 0x460: 0x0208, 0x461: 0x0008, 0x462: 0x0408, 0x463: 0x0408, - 0x464: 0x0408, 0x465: 0x0408, 0x466: 0x0208, 0x467: 0x0408, 0x468: 0x0208, 0x469: 0x0408, - 0x46a: 0x0208, 0x46b: 0x0208, 0x46c: 0x0208, 0x46d: 0x0208, 0x46e: 0x0208, 0x46f: 0x0408, - 0x470: 0x0408, 0x471: 0x0408, 0x472: 0x0408, 0x473: 0x0208, 0x474: 0x0208, 0x475: 0x0208, - 0x476: 0x0208, 0x477: 0x0208, 0x478: 0x0208, 0x479: 0x0208, 0x47a: 0x0208, 0x47b: 0x0208, - 0x47c: 0x0208, 0x47d: 0x0208, 0x47e: 0x0208, 0x47f: 0x0208, - // Block 0x12, offset 0x480 - 0x480: 0x0408, 0x481: 0x0208, 0x482: 0x0208, 0x483: 0x0408, 0x484: 0x0408, 0x485: 0x0408, - 0x486: 0x0408, 0x487: 0x0408, 0x488: 0x0408, 0x489: 0x0408, 0x48a: 0x0408, 0x48b: 0x0408, - 0x48c: 0x0208, 0x48d: 0x0408, 0x48e: 0x0208, 0x48f: 0x0408, 0x490: 0x0208, 0x491: 0x0208, - 0x492: 0x0408, 0x493: 0x0408, 0x494: 0x0018, 0x495: 0x0408, 0x496: 0x1308, 0x497: 0x1308, - 0x498: 0x1308, 0x499: 0x1308, 0x49a: 0x1308, 0x49b: 0x1308, 0x49c: 0x1308, 0x49d: 0x0040, - 0x49e: 0x0018, 0x49f: 0x1308, 0x4a0: 0x1308, 0x4a1: 0x1308, 0x4a2: 0x1308, 0x4a3: 0x1308, - 0x4a4: 0x1308, 0x4a5: 0x0008, 0x4a6: 0x0008, 0x4a7: 0x1308, 0x4a8: 0x1308, 0x4a9: 0x0018, - 0x4aa: 0x1308, 0x4ab: 0x1308, 0x4ac: 0x1308, 0x4ad: 0x1308, 0x4ae: 0x0408, 0x4af: 0x0408, - 0x4b0: 0x0008, 0x4b1: 0x0008, 0x4b2: 0x0008, 0x4b3: 0x0008, 0x4b4: 0x0008, 0x4b5: 0x0008, - 0x4b6: 0x0008, 0x4b7: 0x0008, 0x4b8: 0x0008, 0x4b9: 0x0008, 0x4ba: 0x0208, 0x4bb: 0x0208, - 0x4bc: 0x0208, 0x4bd: 0x0008, 0x4be: 0x0008, 0x4bf: 0x0208, - // Block 0x13, offset 0x4c0 - 0x4c0: 0x0018, 0x4c1: 0x0018, 0x4c2: 0x0018, 0x4c3: 0x0018, 0x4c4: 0x0018, 0x4c5: 0x0018, - 0x4c6: 0x0018, 0x4c7: 0x0018, 0x4c8: 0x0018, 0x4c9: 0x0018, 0x4ca: 0x0018, 0x4cb: 0x0018, - 0x4cc: 0x0018, 0x4cd: 0x0018, 0x4ce: 0x0040, 0x4cf: 0x0340, 0x4d0: 0x0408, 0x4d1: 0x1308, - 0x4d2: 0x0208, 0x4d3: 0x0208, 0x4d4: 0x0208, 0x4d5: 0x0408, 0x4d6: 0x0408, 0x4d7: 0x0408, - 0x4d8: 0x0408, 0x4d9: 0x0408, 0x4da: 0x0208, 0x4db: 0x0208, 0x4dc: 0x0208, 0x4dd: 0x0208, - 0x4de: 0x0408, 0x4df: 0x0208, 0x4e0: 0x0208, 0x4e1: 0x0208, 0x4e2: 0x0208, 0x4e3: 0x0208, - 0x4e4: 0x0208, 0x4e5: 0x0208, 0x4e6: 0x0208, 0x4e7: 0x0208, 0x4e8: 0x0408, 0x4e9: 0x0208, - 0x4ea: 0x0408, 0x4eb: 0x0208, 0x4ec: 0x0408, 0x4ed: 0x0208, 0x4ee: 0x0208, 0x4ef: 0x0408, - 0x4f0: 0x1308, 0x4f1: 0x1308, 0x4f2: 0x1308, 0x4f3: 0x1308, 0x4f4: 0x1308, 0x4f5: 0x1308, - 0x4f6: 0x1308, 0x4f7: 0x1308, 0x4f8: 0x1308, 0x4f9: 0x1308, 0x4fa: 0x1308, 0x4fb: 0x1308, - 0x4fc: 0x1308, 0x4fd: 0x1308, 0x4fe: 0x1308, 0x4ff: 0x1308, - // Block 0x14, offset 0x500 - 0x500: 0x1008, 0x501: 0x1308, 0x502: 0x1308, 0x503: 0x1308, 0x504: 0x1308, 0x505: 0x1308, - 0x506: 0x1308, 0x507: 0x1308, 0x508: 0x1308, 0x509: 0x1008, 0x50a: 0x1008, 0x50b: 0x1008, - 0x50c: 0x1008, 0x50d: 0x1b08, 0x50e: 0x1008, 0x50f: 0x1008, 0x510: 0x0008, 0x511: 0x1308, - 0x512: 0x1308, 0x513: 0x1308, 0x514: 0x1308, 0x515: 0x1308, 0x516: 0x1308, 0x517: 0x1308, - 0x518: 0x04c9, 0x519: 0x0501, 0x51a: 0x0539, 0x51b: 0x0571, 0x51c: 0x05a9, 0x51d: 0x05e1, - 0x51e: 0x0619, 0x51f: 0x0651, 0x520: 0x0008, 0x521: 0x0008, 0x522: 0x1308, 0x523: 0x1308, - 0x524: 0x0018, 0x525: 0x0018, 0x526: 0x0008, 0x527: 0x0008, 0x528: 0x0008, 0x529: 0x0008, - 0x52a: 0x0008, 0x52b: 0x0008, 0x52c: 0x0008, 0x52d: 0x0008, 0x52e: 0x0008, 0x52f: 0x0008, - 0x530: 0x0018, 0x531: 0x0008, 0x532: 0x0008, 0x533: 0x0008, 0x534: 0x0008, 0x535: 0x0008, - 0x536: 0x0008, 0x537: 0x0008, 0x538: 0x0008, 0x539: 0x0008, 0x53a: 0x0008, 0x53b: 0x0008, - 0x53c: 0x0008, 0x53d: 0x0008, 0x53e: 0x0008, 0x53f: 0x0008, - // Block 0x15, offset 0x540 - 0x540: 0x0008, 0x541: 0x1308, 0x542: 0x1008, 0x543: 0x1008, 0x544: 0x0040, 0x545: 0x0008, - 0x546: 0x0008, 0x547: 0x0008, 0x548: 0x0008, 0x549: 0x0008, 0x54a: 0x0008, 0x54b: 0x0008, - 0x54c: 0x0008, 0x54d: 0x0040, 0x54e: 0x0040, 0x54f: 0x0008, 0x550: 0x0008, 0x551: 0x0040, - 0x552: 0x0040, 0x553: 0x0008, 0x554: 0x0008, 0x555: 0x0008, 0x556: 0x0008, 0x557: 0x0008, - 0x558: 0x0008, 0x559: 0x0008, 0x55a: 0x0008, 0x55b: 0x0008, 0x55c: 0x0008, 0x55d: 0x0008, - 0x55e: 0x0008, 0x55f: 0x0008, 0x560: 0x0008, 0x561: 0x0008, 0x562: 0x0008, 0x563: 0x0008, - 0x564: 0x0008, 0x565: 0x0008, 0x566: 0x0008, 0x567: 0x0008, 0x568: 0x0008, 0x569: 0x0040, - 0x56a: 0x0008, 0x56b: 0x0008, 0x56c: 0x0008, 0x56d: 0x0008, 0x56e: 0x0008, 0x56f: 0x0008, - 0x570: 0x0008, 0x571: 0x0040, 0x572: 0x0008, 0x573: 0x0040, 0x574: 0x0040, 0x575: 0x0040, - 0x576: 0x0008, 0x577: 0x0008, 0x578: 0x0008, 0x579: 0x0008, 0x57a: 0x0040, 0x57b: 0x0040, - 0x57c: 0x1308, 0x57d: 0x0008, 0x57e: 0x1008, 0x57f: 0x1008, - // Block 0x16, offset 0x580 - 0x580: 0x1008, 0x581: 0x1308, 0x582: 0x1308, 0x583: 0x1308, 0x584: 0x1308, 0x585: 0x0040, - 0x586: 0x0040, 0x587: 0x1008, 0x588: 0x1008, 0x589: 0x0040, 0x58a: 0x0040, 0x58b: 0x1008, - 0x58c: 0x1008, 0x58d: 0x1b08, 0x58e: 0x0008, 0x58f: 0x0040, 0x590: 0x0040, 0x591: 0x0040, - 0x592: 0x0040, 0x593: 0x0040, 0x594: 0x0040, 0x595: 0x0040, 0x596: 0x0040, 0x597: 0x1008, - 0x598: 0x0040, 0x599: 0x0040, 0x59a: 0x0040, 0x59b: 0x0040, 0x59c: 0x0689, 0x59d: 0x06c1, - 0x59e: 0x0040, 0x59f: 0x06f9, 0x5a0: 0x0008, 0x5a1: 0x0008, 0x5a2: 0x1308, 0x5a3: 0x1308, - 0x5a4: 0x0040, 0x5a5: 0x0040, 0x5a6: 0x0008, 0x5a7: 0x0008, 0x5a8: 0x0008, 0x5a9: 0x0008, - 0x5aa: 0x0008, 0x5ab: 0x0008, 0x5ac: 0x0008, 0x5ad: 0x0008, 0x5ae: 0x0008, 0x5af: 0x0008, - 0x5b0: 0x0008, 0x5b1: 0x0008, 0x5b2: 0x0018, 0x5b3: 0x0018, 0x5b4: 0x0018, 0x5b5: 0x0018, - 0x5b6: 0x0018, 0x5b7: 0x0018, 0x5b8: 0x0018, 0x5b9: 0x0018, 0x5ba: 0x0018, 0x5bb: 0x0018, - 0x5bc: 0x0040, 0x5bd: 0x0040, 0x5be: 0x0040, 0x5bf: 0x0040, - // Block 0x17, offset 0x5c0 - 0x5c0: 0x0040, 0x5c1: 0x1308, 0x5c2: 0x1308, 0x5c3: 0x1008, 0x5c4: 0x0040, 0x5c5: 0x0008, - 0x5c6: 0x0008, 0x5c7: 0x0008, 0x5c8: 0x0008, 0x5c9: 0x0008, 0x5ca: 0x0008, 0x5cb: 0x0040, - 0x5cc: 0x0040, 0x5cd: 0x0040, 0x5ce: 0x0040, 0x5cf: 0x0008, 0x5d0: 0x0008, 0x5d1: 0x0040, - 0x5d2: 0x0040, 0x5d3: 0x0008, 0x5d4: 0x0008, 0x5d5: 0x0008, 0x5d6: 0x0008, 0x5d7: 0x0008, - 0x5d8: 0x0008, 0x5d9: 0x0008, 0x5da: 0x0008, 0x5db: 0x0008, 0x5dc: 0x0008, 0x5dd: 0x0008, - 0x5de: 0x0008, 0x5df: 0x0008, 0x5e0: 0x0008, 0x5e1: 0x0008, 0x5e2: 0x0008, 0x5e3: 0x0008, - 0x5e4: 0x0008, 0x5e5: 0x0008, 0x5e6: 0x0008, 0x5e7: 0x0008, 0x5e8: 0x0008, 0x5e9: 0x0040, - 0x5ea: 0x0008, 0x5eb: 0x0008, 0x5ec: 0x0008, 0x5ed: 0x0008, 0x5ee: 0x0008, 0x5ef: 0x0008, - 0x5f0: 0x0008, 0x5f1: 0x0040, 0x5f2: 0x0008, 0x5f3: 0x0731, 0x5f4: 0x0040, 0x5f5: 0x0008, - 0x5f6: 0x0769, 0x5f7: 0x0040, 0x5f8: 0x0008, 0x5f9: 0x0008, 0x5fa: 0x0040, 0x5fb: 0x0040, - 0x5fc: 0x1308, 0x5fd: 0x0040, 0x5fe: 0x1008, 0x5ff: 0x1008, - // Block 0x18, offset 0x600 - 0x600: 0x1008, 0x601: 0x1308, 0x602: 0x1308, 0x603: 0x0040, 0x604: 0x0040, 0x605: 0x0040, - 0x606: 0x0040, 0x607: 0x1308, 0x608: 0x1308, 0x609: 0x0040, 0x60a: 0x0040, 0x60b: 0x1308, - 0x60c: 0x1308, 0x60d: 0x1b08, 0x60e: 0x0040, 0x60f: 0x0040, 0x610: 0x0040, 0x611: 0x1308, - 0x612: 0x0040, 0x613: 0x0040, 0x614: 0x0040, 0x615: 0x0040, 0x616: 0x0040, 0x617: 0x0040, - 0x618: 0x0040, 0x619: 0x07a1, 0x61a: 0x07d9, 0x61b: 0x0811, 0x61c: 0x0008, 0x61d: 0x0040, - 0x61e: 0x0849, 0x61f: 0x0040, 0x620: 0x0040, 0x621: 0x0040, 0x622: 0x0040, 0x623: 0x0040, - 0x624: 0x0040, 0x625: 0x0040, 0x626: 0x0008, 0x627: 0x0008, 0x628: 0x0008, 0x629: 0x0008, - 0x62a: 0x0008, 0x62b: 0x0008, 0x62c: 0x0008, 0x62d: 0x0008, 0x62e: 0x0008, 0x62f: 0x0008, - 0x630: 0x1308, 0x631: 0x1308, 0x632: 0x0008, 0x633: 0x0008, 0x634: 0x0008, 0x635: 0x1308, - 0x636: 0x0040, 0x637: 0x0040, 0x638: 0x0040, 0x639: 0x0040, 0x63a: 0x0040, 0x63b: 0x0040, - 0x63c: 0x0040, 0x63d: 0x0040, 0x63e: 0x0040, 0x63f: 0x0040, - // Block 0x19, offset 0x640 - 0x640: 0x0040, 0x641: 0x1308, 0x642: 0x1308, 0x643: 0x1008, 0x644: 0x0040, 0x645: 0x0008, - 0x646: 0x0008, 0x647: 0x0008, 0x648: 0x0008, 0x649: 0x0008, 0x64a: 0x0008, 0x64b: 0x0008, - 0x64c: 0x0008, 0x64d: 0x0008, 0x64e: 0x0040, 0x64f: 0x0008, 0x650: 0x0008, 0x651: 0x0008, - 0x652: 0x0040, 0x653: 0x0008, 0x654: 0x0008, 0x655: 0x0008, 0x656: 0x0008, 0x657: 0x0008, - 0x658: 0x0008, 0x659: 0x0008, 0x65a: 0x0008, 0x65b: 0x0008, 0x65c: 0x0008, 0x65d: 0x0008, - 0x65e: 0x0008, 0x65f: 0x0008, 0x660: 0x0008, 0x661: 0x0008, 0x662: 0x0008, 0x663: 0x0008, - 0x664: 0x0008, 0x665: 0x0008, 0x666: 0x0008, 0x667: 0x0008, 0x668: 0x0008, 0x669: 0x0040, - 0x66a: 0x0008, 0x66b: 0x0008, 0x66c: 0x0008, 0x66d: 0x0008, 0x66e: 0x0008, 0x66f: 0x0008, - 0x670: 0x0008, 0x671: 0x0040, 0x672: 0x0008, 0x673: 0x0008, 0x674: 0x0040, 0x675: 0x0008, - 0x676: 0x0008, 0x677: 0x0008, 0x678: 0x0008, 0x679: 0x0008, 0x67a: 0x0040, 0x67b: 0x0040, - 0x67c: 0x1308, 0x67d: 0x0008, 0x67e: 0x1008, 0x67f: 0x1008, - // Block 0x1a, offset 0x680 - 0x680: 0x1008, 0x681: 0x1308, 0x682: 0x1308, 0x683: 0x1308, 0x684: 0x1308, 0x685: 0x1308, - 0x686: 0x0040, 0x687: 0x1308, 0x688: 0x1308, 0x689: 0x1008, 0x68a: 0x0040, 0x68b: 0x1008, - 0x68c: 0x1008, 0x68d: 0x1b08, 0x68e: 0x0040, 0x68f: 0x0040, 0x690: 0x0008, 0x691: 0x0040, - 0x692: 0x0040, 0x693: 0x0040, 0x694: 0x0040, 0x695: 0x0040, 0x696: 0x0040, 0x697: 0x0040, - 0x698: 0x0040, 0x699: 0x0040, 0x69a: 0x0040, 0x69b: 0x0040, 0x69c: 0x0040, 0x69d: 0x0040, - 0x69e: 0x0040, 0x69f: 0x0040, 0x6a0: 0x0008, 0x6a1: 0x0008, 0x6a2: 0x1308, 0x6a3: 0x1308, - 0x6a4: 0x0040, 0x6a5: 0x0040, 0x6a6: 0x0008, 0x6a7: 0x0008, 0x6a8: 0x0008, 0x6a9: 0x0008, - 0x6aa: 0x0008, 0x6ab: 0x0008, 0x6ac: 0x0008, 0x6ad: 0x0008, 0x6ae: 0x0008, 0x6af: 0x0008, - 0x6b0: 0x0018, 0x6b1: 0x0018, 0x6b2: 0x0040, 0x6b3: 0x0040, 0x6b4: 0x0040, 0x6b5: 0x0040, - 0x6b6: 0x0040, 0x6b7: 0x0040, 0x6b8: 0x0040, 0x6b9: 0x0008, 0x6ba: 0x0040, 0x6bb: 0x0040, - 0x6bc: 0x0040, 0x6bd: 0x0040, 0x6be: 0x0040, 0x6bf: 0x0040, - // Block 0x1b, offset 0x6c0 - 0x6c0: 0x0040, 0x6c1: 0x1308, 0x6c2: 0x1008, 0x6c3: 0x1008, 0x6c4: 0x0040, 0x6c5: 0x0008, - 0x6c6: 0x0008, 0x6c7: 0x0008, 0x6c8: 0x0008, 0x6c9: 0x0008, 0x6ca: 0x0008, 0x6cb: 0x0008, - 0x6cc: 0x0008, 0x6cd: 0x0040, 0x6ce: 0x0040, 0x6cf: 0x0008, 0x6d0: 0x0008, 0x6d1: 0x0040, - 0x6d2: 0x0040, 0x6d3: 0x0008, 0x6d4: 0x0008, 0x6d5: 0x0008, 0x6d6: 0x0008, 0x6d7: 0x0008, - 0x6d8: 0x0008, 0x6d9: 0x0008, 0x6da: 0x0008, 0x6db: 0x0008, 0x6dc: 0x0008, 0x6dd: 0x0008, - 0x6de: 0x0008, 0x6df: 0x0008, 0x6e0: 0x0008, 0x6e1: 0x0008, 0x6e2: 0x0008, 0x6e3: 0x0008, - 0x6e4: 0x0008, 0x6e5: 0x0008, 0x6e6: 0x0008, 0x6e7: 0x0008, 0x6e8: 0x0008, 0x6e9: 0x0040, - 0x6ea: 0x0008, 0x6eb: 0x0008, 0x6ec: 0x0008, 0x6ed: 0x0008, 0x6ee: 0x0008, 0x6ef: 0x0008, - 0x6f0: 0x0008, 0x6f1: 0x0040, 0x6f2: 0x0008, 0x6f3: 0x0008, 0x6f4: 0x0040, 0x6f5: 0x0008, - 0x6f6: 0x0008, 0x6f7: 0x0008, 0x6f8: 0x0008, 0x6f9: 0x0008, 0x6fa: 0x0040, 0x6fb: 0x0040, - 0x6fc: 0x1308, 0x6fd: 0x0008, 0x6fe: 0x1008, 0x6ff: 0x1308, - // Block 0x1c, offset 0x700 - 0x700: 0x1008, 0x701: 0x1308, 0x702: 0x1308, 0x703: 0x1308, 0x704: 0x1308, 0x705: 0x0040, - 0x706: 0x0040, 0x707: 0x1008, 0x708: 0x1008, 0x709: 0x0040, 0x70a: 0x0040, 0x70b: 0x1008, - 0x70c: 0x1008, 0x70d: 0x1b08, 0x70e: 0x0040, 0x70f: 0x0040, 0x710: 0x0040, 0x711: 0x0040, - 0x712: 0x0040, 0x713: 0x0040, 0x714: 0x0040, 0x715: 0x0040, 0x716: 0x1308, 0x717: 0x1008, - 0x718: 0x0040, 0x719: 0x0040, 0x71a: 0x0040, 0x71b: 0x0040, 0x71c: 0x0881, 0x71d: 0x08b9, - 0x71e: 0x0040, 0x71f: 0x0008, 0x720: 0x0008, 0x721: 0x0008, 0x722: 0x1308, 0x723: 0x1308, - 0x724: 0x0040, 0x725: 0x0040, 0x726: 0x0008, 0x727: 0x0008, 0x728: 0x0008, 0x729: 0x0008, - 0x72a: 0x0008, 0x72b: 0x0008, 0x72c: 0x0008, 0x72d: 0x0008, 0x72e: 0x0008, 0x72f: 0x0008, - 0x730: 0x0018, 0x731: 0x0008, 0x732: 0x0018, 0x733: 0x0018, 0x734: 0x0018, 0x735: 0x0018, - 0x736: 0x0018, 0x737: 0x0018, 0x738: 0x0040, 0x739: 0x0040, 0x73a: 0x0040, 0x73b: 0x0040, - 0x73c: 0x0040, 0x73d: 0x0040, 0x73e: 0x0040, 0x73f: 0x0040, - // Block 0x1d, offset 0x740 - 0x740: 0x0040, 0x741: 0x0040, 0x742: 0x1308, 0x743: 0x0008, 0x744: 0x0040, 0x745: 0x0008, - 0x746: 0x0008, 0x747: 0x0008, 0x748: 0x0008, 0x749: 0x0008, 0x74a: 0x0008, 0x74b: 0x0040, - 0x74c: 0x0040, 0x74d: 0x0040, 0x74e: 0x0008, 0x74f: 0x0008, 0x750: 0x0008, 0x751: 0x0040, - 0x752: 0x0008, 0x753: 0x0008, 0x754: 0x0008, 0x755: 0x0008, 0x756: 0x0040, 0x757: 0x0040, - 0x758: 0x0040, 0x759: 0x0008, 0x75a: 0x0008, 0x75b: 0x0040, 0x75c: 0x0008, 0x75d: 0x0040, - 0x75e: 0x0008, 0x75f: 0x0008, 0x760: 0x0040, 0x761: 0x0040, 0x762: 0x0040, 0x763: 0x0008, - 0x764: 0x0008, 0x765: 0x0040, 0x766: 0x0040, 0x767: 0x0040, 0x768: 0x0008, 0x769: 0x0008, - 0x76a: 0x0008, 0x76b: 0x0040, 0x76c: 0x0040, 0x76d: 0x0040, 0x76e: 0x0008, 0x76f: 0x0008, - 0x770: 0x0008, 0x771: 0x0008, 0x772: 0x0008, 0x773: 0x0008, 0x774: 0x0008, 0x775: 0x0008, - 0x776: 0x0008, 0x777: 0x0008, 0x778: 0x0008, 0x779: 0x0008, 0x77a: 0x0040, 0x77b: 0x0040, - 0x77c: 0x0040, 0x77d: 0x0040, 0x77e: 0x1008, 0x77f: 0x1008, - // Block 0x1e, offset 0x780 - 0x780: 0x1308, 0x781: 0x1008, 0x782: 0x1008, 0x783: 0x1008, 0x784: 0x1008, 0x785: 0x0040, - 0x786: 0x1308, 0x787: 0x1308, 0x788: 0x1308, 0x789: 0x0040, 0x78a: 0x1308, 0x78b: 0x1308, - 0x78c: 0x1308, 0x78d: 0x1b08, 0x78e: 0x0040, 0x78f: 0x0040, 0x790: 0x0040, 0x791: 0x0040, - 0x792: 0x0040, 0x793: 0x0040, 0x794: 0x0040, 0x795: 0x1308, 0x796: 0x1308, 0x797: 0x0040, - 0x798: 0x0008, 0x799: 0x0008, 0x79a: 0x0008, 0x79b: 0x0040, 0x79c: 0x0040, 0x79d: 0x0040, - 0x79e: 0x0040, 0x79f: 0x0040, 0x7a0: 0x0008, 0x7a1: 0x0008, 0x7a2: 0x1308, 0x7a3: 0x1308, - 0x7a4: 0x0040, 0x7a5: 0x0040, 0x7a6: 0x0008, 0x7a7: 0x0008, 0x7a8: 0x0008, 0x7a9: 0x0008, - 0x7aa: 0x0008, 0x7ab: 0x0008, 0x7ac: 0x0008, 0x7ad: 0x0008, 0x7ae: 0x0008, 0x7af: 0x0008, - 0x7b0: 0x0040, 0x7b1: 0x0040, 0x7b2: 0x0040, 0x7b3: 0x0040, 0x7b4: 0x0040, 0x7b5: 0x0040, - 0x7b6: 0x0040, 0x7b7: 0x0040, 0x7b8: 0x0018, 0x7b9: 0x0018, 0x7ba: 0x0018, 0x7bb: 0x0018, - 0x7bc: 0x0018, 0x7bd: 0x0018, 0x7be: 0x0018, 0x7bf: 0x0018, - // Block 0x1f, offset 0x7c0 - 0x7c0: 0x0008, 0x7c1: 0x1308, 0x7c2: 0x1008, 0x7c3: 0x1008, 0x7c4: 0x0040, 0x7c5: 0x0008, - 0x7c6: 0x0008, 0x7c7: 0x0008, 0x7c8: 0x0008, 0x7c9: 0x0008, 0x7ca: 0x0008, 0x7cb: 0x0008, - 0x7cc: 0x0008, 0x7cd: 0x0040, 0x7ce: 0x0008, 0x7cf: 0x0008, 0x7d0: 0x0008, 0x7d1: 0x0040, - 0x7d2: 0x0008, 0x7d3: 0x0008, 0x7d4: 0x0008, 0x7d5: 0x0008, 0x7d6: 0x0008, 0x7d7: 0x0008, - 0x7d8: 0x0008, 0x7d9: 0x0008, 0x7da: 0x0008, 0x7db: 0x0008, 0x7dc: 0x0008, 0x7dd: 0x0008, - 0x7de: 0x0008, 0x7df: 0x0008, 0x7e0: 0x0008, 0x7e1: 0x0008, 0x7e2: 0x0008, 0x7e3: 0x0008, - 0x7e4: 0x0008, 0x7e5: 0x0008, 0x7e6: 0x0008, 0x7e7: 0x0008, 0x7e8: 0x0008, 0x7e9: 0x0040, - 0x7ea: 0x0008, 0x7eb: 0x0008, 0x7ec: 0x0008, 0x7ed: 0x0008, 0x7ee: 0x0008, 0x7ef: 0x0008, - 0x7f0: 0x0008, 0x7f1: 0x0008, 0x7f2: 0x0008, 0x7f3: 0x0008, 0x7f4: 0x0040, 0x7f5: 0x0008, - 0x7f6: 0x0008, 0x7f7: 0x0008, 0x7f8: 0x0008, 0x7f9: 0x0008, 0x7fa: 0x0040, 0x7fb: 0x0040, - 0x7fc: 0x1308, 0x7fd: 0x0008, 0x7fe: 0x1008, 0x7ff: 0x1308, - // Block 0x20, offset 0x800 - 0x800: 0x1008, 0x801: 0x1008, 0x802: 0x1008, 0x803: 0x1008, 0x804: 0x1008, 0x805: 0x0040, - 0x806: 0x1308, 0x807: 0x1008, 0x808: 0x1008, 0x809: 0x0040, 0x80a: 0x1008, 0x80b: 0x1008, - 0x80c: 0x1308, 0x80d: 0x1b08, 0x80e: 0x0040, 0x80f: 0x0040, 0x810: 0x0040, 0x811: 0x0040, - 0x812: 0x0040, 0x813: 0x0040, 0x814: 0x0040, 0x815: 0x1008, 0x816: 0x1008, 0x817: 0x0040, - 0x818: 0x0040, 0x819: 0x0040, 0x81a: 0x0040, 0x81b: 0x0040, 0x81c: 0x0040, 0x81d: 0x0040, - 0x81e: 0x0008, 0x81f: 0x0040, 0x820: 0x0008, 0x821: 0x0008, 0x822: 0x1308, 0x823: 0x1308, - 0x824: 0x0040, 0x825: 0x0040, 0x826: 0x0008, 0x827: 0x0008, 0x828: 0x0008, 0x829: 0x0008, - 0x82a: 0x0008, 0x82b: 0x0008, 0x82c: 0x0008, 0x82d: 0x0008, 0x82e: 0x0008, 0x82f: 0x0008, - 0x830: 0x0040, 0x831: 0x0008, 0x832: 0x0008, 0x833: 0x0040, 0x834: 0x0040, 0x835: 0x0040, - 0x836: 0x0040, 0x837: 0x0040, 0x838: 0x0040, 0x839: 0x0040, 0x83a: 0x0040, 0x83b: 0x0040, - 0x83c: 0x0040, 0x83d: 0x0040, 0x83e: 0x0040, 0x83f: 0x0040, - // Block 0x21, offset 0x840 - 0x840: 0x1008, 0x841: 0x1308, 0x842: 0x1308, 0x843: 0x1308, 0x844: 0x1308, 0x845: 0x0040, - 0x846: 0x1008, 0x847: 0x1008, 0x848: 0x1008, 0x849: 0x0040, 0x84a: 0x1008, 0x84b: 0x1008, - 0x84c: 0x1008, 0x84d: 0x1b08, 0x84e: 0x0008, 0x84f: 0x0018, 0x850: 0x0040, 0x851: 0x0040, - 0x852: 0x0040, 0x853: 0x0040, 0x854: 0x0008, 0x855: 0x0008, 0x856: 0x0008, 0x857: 0x1008, - 0x858: 0x0018, 0x859: 0x0018, 0x85a: 0x0018, 0x85b: 0x0018, 0x85c: 0x0018, 0x85d: 0x0018, - 0x85e: 0x0018, 0x85f: 0x0008, 0x860: 0x0008, 0x861: 0x0008, 0x862: 0x1308, 0x863: 0x1308, - 0x864: 0x0040, 0x865: 0x0040, 0x866: 0x0008, 0x867: 0x0008, 0x868: 0x0008, 0x869: 0x0008, - 0x86a: 0x0008, 0x86b: 0x0008, 0x86c: 0x0008, 0x86d: 0x0008, 0x86e: 0x0008, 0x86f: 0x0008, - 0x870: 0x0018, 0x871: 0x0018, 0x872: 0x0018, 0x873: 0x0018, 0x874: 0x0018, 0x875: 0x0018, - 0x876: 0x0018, 0x877: 0x0018, 0x878: 0x0018, 0x879: 0x0018, 0x87a: 0x0008, 0x87b: 0x0008, - 0x87c: 0x0008, 0x87d: 0x0008, 0x87e: 0x0008, 0x87f: 0x0008, - // Block 0x22, offset 0x880 - 0x880: 0x0040, 0x881: 0x0008, 0x882: 0x0008, 0x883: 0x0040, 0x884: 0x0008, 0x885: 0x0040, - 0x886: 0x0040, 0x887: 0x0008, 0x888: 0x0008, 0x889: 0x0040, 0x88a: 0x0008, 0x88b: 0x0040, - 0x88c: 0x0040, 0x88d: 0x0008, 0x88e: 0x0040, 0x88f: 0x0040, 0x890: 0x0040, 0x891: 0x0040, - 0x892: 0x0040, 0x893: 0x0040, 0x894: 0x0008, 0x895: 0x0008, 0x896: 0x0008, 0x897: 0x0008, - 0x898: 0x0040, 0x899: 0x0008, 0x89a: 0x0008, 0x89b: 0x0008, 0x89c: 0x0008, 0x89d: 0x0008, - 0x89e: 0x0008, 0x89f: 0x0008, 0x8a0: 0x0040, 0x8a1: 0x0008, 0x8a2: 0x0008, 0x8a3: 0x0008, - 0x8a4: 0x0040, 0x8a5: 0x0008, 0x8a6: 0x0040, 0x8a7: 0x0008, 0x8a8: 0x0040, 0x8a9: 0x0040, - 0x8aa: 0x0008, 0x8ab: 0x0008, 0x8ac: 0x0040, 0x8ad: 0x0008, 0x8ae: 0x0008, 0x8af: 0x0008, - 0x8b0: 0x0008, 0x8b1: 0x1308, 0x8b2: 0x0008, 0x8b3: 0x0929, 0x8b4: 0x1308, 0x8b5: 0x1308, - 0x8b6: 0x1308, 0x8b7: 0x1308, 0x8b8: 0x1308, 0x8b9: 0x1308, 0x8ba: 0x0040, 0x8bb: 0x1308, - 0x8bc: 0x1308, 0x8bd: 0x0008, 0x8be: 0x0040, 0x8bf: 0x0040, - // Block 0x23, offset 0x8c0 - 0x8c0: 0x0008, 0x8c1: 0x0008, 0x8c2: 0x0008, 0x8c3: 0x09d1, 0x8c4: 0x0008, 0x8c5: 0x0008, - 0x8c6: 0x0008, 0x8c7: 0x0008, 0x8c8: 0x0040, 0x8c9: 0x0008, 0x8ca: 0x0008, 0x8cb: 0x0008, - 0x8cc: 0x0008, 0x8cd: 0x0a09, 0x8ce: 0x0008, 0x8cf: 0x0008, 0x8d0: 0x0008, 0x8d1: 0x0008, - 0x8d2: 0x0a41, 0x8d3: 0x0008, 0x8d4: 0x0008, 0x8d5: 0x0008, 0x8d6: 0x0008, 0x8d7: 0x0a79, - 0x8d8: 0x0008, 0x8d9: 0x0008, 0x8da: 0x0008, 0x8db: 0x0008, 0x8dc: 0x0ab1, 0x8dd: 0x0008, - 0x8de: 0x0008, 0x8df: 0x0008, 0x8e0: 0x0008, 0x8e1: 0x0008, 0x8e2: 0x0008, 0x8e3: 0x0008, - 0x8e4: 0x0008, 0x8e5: 0x0008, 0x8e6: 0x0008, 0x8e7: 0x0008, 0x8e8: 0x0008, 0x8e9: 0x0ae9, - 0x8ea: 0x0008, 0x8eb: 0x0008, 0x8ec: 0x0008, 0x8ed: 0x0040, 0x8ee: 0x0040, 0x8ef: 0x0040, - 0x8f0: 0x0040, 0x8f1: 0x1308, 0x8f2: 0x1308, 0x8f3: 0x0b21, 0x8f4: 0x1308, 0x8f5: 0x0b59, - 0x8f6: 0x0b91, 0x8f7: 0x0bc9, 0x8f8: 0x0c19, 0x8f9: 0x0c51, 0x8fa: 0x1308, 0x8fb: 0x1308, - 0x8fc: 0x1308, 0x8fd: 0x1308, 0x8fe: 0x1308, 0x8ff: 0x1008, - // Block 0x24, offset 0x900 - 0x900: 0x1308, 0x901: 0x0ca1, 0x902: 0x1308, 0x903: 0x1308, 0x904: 0x1b08, 0x905: 0x0018, - 0x906: 0x1308, 0x907: 0x1308, 0x908: 0x0008, 0x909: 0x0008, 0x90a: 0x0008, 0x90b: 0x0008, - 0x90c: 0x0008, 0x90d: 0x1308, 0x90e: 0x1308, 0x90f: 0x1308, 0x910: 0x1308, 0x911: 0x1308, - 0x912: 0x1308, 0x913: 0x0cd9, 0x914: 0x1308, 0x915: 0x1308, 0x916: 0x1308, 0x917: 0x1308, - 0x918: 0x0040, 0x919: 0x1308, 0x91a: 0x1308, 0x91b: 0x1308, 0x91c: 0x1308, 0x91d: 0x0d11, - 0x91e: 0x1308, 0x91f: 0x1308, 0x920: 0x1308, 0x921: 0x1308, 0x922: 0x0d49, 0x923: 0x1308, - 0x924: 0x1308, 0x925: 0x1308, 0x926: 0x1308, 0x927: 0x0d81, 0x928: 0x1308, 0x929: 0x1308, - 0x92a: 0x1308, 0x92b: 0x1308, 0x92c: 0x0db9, 0x92d: 0x1308, 0x92e: 0x1308, 0x92f: 0x1308, - 0x930: 0x1308, 0x931: 0x1308, 0x932: 0x1308, 0x933: 0x1308, 0x934: 0x1308, 0x935: 0x1308, - 0x936: 0x1308, 0x937: 0x1308, 0x938: 0x1308, 0x939: 0x0df1, 0x93a: 0x1308, 0x93b: 0x1308, - 0x93c: 0x1308, 0x93d: 0x0040, 0x93e: 0x0018, 0x93f: 0x0018, - // Block 0x25, offset 0x940 - 0x940: 0x0008, 0x941: 0x0008, 0x942: 0x0008, 0x943: 0x0008, 0x944: 0x0008, 0x945: 0x0008, - 0x946: 0x0008, 0x947: 0x0008, 0x948: 0x0008, 0x949: 0x0008, 0x94a: 0x0008, 0x94b: 0x0008, - 0x94c: 0x0008, 0x94d: 0x0008, 0x94e: 0x0008, 0x94f: 0x0008, 0x950: 0x0008, 0x951: 0x0008, - 0x952: 0x0008, 0x953: 0x0008, 0x954: 0x0008, 0x955: 0x0008, 0x956: 0x0008, 0x957: 0x0008, - 0x958: 0x0008, 0x959: 0x0008, 0x95a: 0x0008, 0x95b: 0x0008, 0x95c: 0x0008, 0x95d: 0x0008, - 0x95e: 0x0008, 0x95f: 0x0008, 0x960: 0x0008, 0x961: 0x0008, 0x962: 0x0008, 0x963: 0x0008, - 0x964: 0x0008, 0x965: 0x0008, 0x966: 0x0008, 0x967: 0x0008, 0x968: 0x0008, 0x969: 0x0008, - 0x96a: 0x0008, 0x96b: 0x0008, 0x96c: 0x0039, 0x96d: 0x0ed1, 0x96e: 0x0ee9, 0x96f: 0x0008, - 0x970: 0x0ef9, 0x971: 0x0f09, 0x972: 0x0f19, 0x973: 0x0f31, 0x974: 0x0249, 0x975: 0x0f41, - 0x976: 0x0259, 0x977: 0x0f51, 0x978: 0x0359, 0x979: 0x0f61, 0x97a: 0x0f71, 0x97b: 0x0008, - 0x97c: 0x00d9, 0x97d: 0x0f81, 0x97e: 0x0f99, 0x97f: 0x0269, - // Block 0x26, offset 0x980 - 0x980: 0x0fa9, 0x981: 0x0fb9, 0x982: 0x0279, 0x983: 0x0039, 0x984: 0x0fc9, 0x985: 0x0fe1, - 0x986: 0x059d, 0x987: 0x0ee9, 0x988: 0x0ef9, 0x989: 0x0f09, 0x98a: 0x0ff9, 0x98b: 0x1011, - 0x98c: 0x1029, 0x98d: 0x0f31, 0x98e: 0x0008, 0x98f: 0x0f51, 0x990: 0x0f61, 0x991: 0x1041, - 0x992: 0x00d9, 0x993: 0x1059, 0x994: 0x05b5, 0x995: 0x05b5, 0x996: 0x0f99, 0x997: 0x0fa9, - 0x998: 0x0fb9, 0x999: 0x059d, 0x99a: 0x1071, 0x99b: 0x1089, 0x99c: 0x05cd, 0x99d: 0x1099, - 0x99e: 0x10b1, 0x99f: 0x10c9, 0x9a0: 0x10e1, 0x9a1: 0x10f9, 0x9a2: 0x0f41, 0x9a3: 0x0269, - 0x9a4: 0x0fb9, 0x9a5: 0x1089, 0x9a6: 0x1099, 0x9a7: 0x10b1, 0x9a8: 0x1111, 0x9a9: 0x10e1, - 0x9aa: 0x10f9, 0x9ab: 0x0008, 0x9ac: 0x0008, 0x9ad: 0x0008, 0x9ae: 0x0008, 0x9af: 0x0008, - 0x9b0: 0x0008, 0x9b1: 0x0008, 0x9b2: 0x0008, 0x9b3: 0x0008, 0x9b4: 0x0008, 0x9b5: 0x0008, - 0x9b6: 0x0008, 0x9b7: 0x0008, 0x9b8: 0x1129, 0x9b9: 0x0008, 0x9ba: 0x0008, 0x9bb: 0x0008, - 0x9bc: 0x0008, 0x9bd: 0x0008, 0x9be: 0x0008, 0x9bf: 0x0008, - // Block 0x27, offset 0x9c0 - 0x9c0: 0x0008, 0x9c1: 0x0008, 0x9c2: 0x0008, 0x9c3: 0x0008, 0x9c4: 0x0008, 0x9c5: 0x0008, - 0x9c6: 0x0008, 0x9c7: 0x0008, 0x9c8: 0x0008, 0x9c9: 0x0008, 0x9ca: 0x0008, 0x9cb: 0x0008, - 0x9cc: 0x0008, 0x9cd: 0x0008, 0x9ce: 0x0008, 0x9cf: 0x0008, 0x9d0: 0x0008, 0x9d1: 0x0008, - 0x9d2: 0x0008, 0x9d3: 0x0008, 0x9d4: 0x0008, 0x9d5: 0x0008, 0x9d6: 0x0008, 0x9d7: 0x0008, - 0x9d8: 0x0008, 0x9d9: 0x0008, 0x9da: 0x0008, 0x9db: 0x1141, 0x9dc: 0x1159, 0x9dd: 0x1169, - 0x9de: 0x1181, 0x9df: 0x1029, 0x9e0: 0x1199, 0x9e1: 0x11a9, 0x9e2: 0x11c1, 0x9e3: 0x11d9, - 0x9e4: 0x11f1, 0x9e5: 0x1209, 0x9e6: 0x1221, 0x9e7: 0x05e5, 0x9e8: 0x1239, 0x9e9: 0x1251, - 0x9ea: 0xe17d, 0x9eb: 0x1269, 0x9ec: 0x1281, 0x9ed: 0x1299, 0x9ee: 0x12b1, 0x9ef: 0x12c9, - 0x9f0: 0x12e1, 0x9f1: 0x12f9, 0x9f2: 0x1311, 0x9f3: 0x1329, 0x9f4: 0x1341, 0x9f5: 0x1359, - 0x9f6: 0x1371, 0x9f7: 0x1389, 0x9f8: 0x05fd, 0x9f9: 0x13a1, 0x9fa: 0x13b9, 0x9fb: 0x13d1, - 0x9fc: 0x13e1, 0x9fd: 0x13f9, 0x9fe: 0x1411, 0x9ff: 0x1429, - // Block 0x28, offset 0xa00 - 0xa00: 0xe00d, 0xa01: 0x0008, 0xa02: 0xe00d, 0xa03: 0x0008, 0xa04: 0xe00d, 0xa05: 0x0008, - 0xa06: 0xe00d, 0xa07: 0x0008, 0xa08: 0xe00d, 0xa09: 0x0008, 0xa0a: 0xe00d, 0xa0b: 0x0008, - 0xa0c: 0xe00d, 0xa0d: 0x0008, 0xa0e: 0xe00d, 0xa0f: 0x0008, 0xa10: 0xe00d, 0xa11: 0x0008, - 0xa12: 0xe00d, 0xa13: 0x0008, 0xa14: 0xe00d, 0xa15: 0x0008, 0xa16: 0xe00d, 0xa17: 0x0008, - 0xa18: 0xe00d, 0xa19: 0x0008, 0xa1a: 0xe00d, 0xa1b: 0x0008, 0xa1c: 0xe00d, 0xa1d: 0x0008, - 0xa1e: 0xe00d, 0xa1f: 0x0008, 0xa20: 0xe00d, 0xa21: 0x0008, 0xa22: 0xe00d, 0xa23: 0x0008, - 0xa24: 0xe00d, 0xa25: 0x0008, 0xa26: 0xe00d, 0xa27: 0x0008, 0xa28: 0xe00d, 0xa29: 0x0008, - 0xa2a: 0xe00d, 0xa2b: 0x0008, 0xa2c: 0xe00d, 0xa2d: 0x0008, 0xa2e: 0xe00d, 0xa2f: 0x0008, - 0xa30: 0xe00d, 0xa31: 0x0008, 0xa32: 0xe00d, 0xa33: 0x0008, 0xa34: 0xe00d, 0xa35: 0x0008, - 0xa36: 0xe00d, 0xa37: 0x0008, 0xa38: 0xe00d, 0xa39: 0x0008, 0xa3a: 0xe00d, 0xa3b: 0x0008, - 0xa3c: 0xe00d, 0xa3d: 0x0008, 0xa3e: 0xe00d, 0xa3f: 0x0008, - // Block 0x29, offset 0xa40 - 0xa40: 0xe00d, 0xa41: 0x0008, 0xa42: 0xe00d, 0xa43: 0x0008, 0xa44: 0xe00d, 0xa45: 0x0008, - 0xa46: 0xe00d, 0xa47: 0x0008, 0xa48: 0xe00d, 0xa49: 0x0008, 0xa4a: 0xe00d, 0xa4b: 0x0008, - 0xa4c: 0xe00d, 0xa4d: 0x0008, 0xa4e: 0xe00d, 0xa4f: 0x0008, 0xa50: 0xe00d, 0xa51: 0x0008, - 0xa52: 0xe00d, 0xa53: 0x0008, 0xa54: 0xe00d, 0xa55: 0x0008, 0xa56: 0x0008, 0xa57: 0x0008, - 0xa58: 0x0008, 0xa59: 0x0008, 0xa5a: 0x0615, 0xa5b: 0x0635, 0xa5c: 0x0008, 0xa5d: 0x0008, - 0xa5e: 0x1441, 0xa5f: 0x0008, 0xa60: 0xe00d, 0xa61: 0x0008, 0xa62: 0xe00d, 0xa63: 0x0008, - 0xa64: 0xe00d, 0xa65: 0x0008, 0xa66: 0xe00d, 0xa67: 0x0008, 0xa68: 0xe00d, 0xa69: 0x0008, - 0xa6a: 0xe00d, 0xa6b: 0x0008, 0xa6c: 0xe00d, 0xa6d: 0x0008, 0xa6e: 0xe00d, 0xa6f: 0x0008, - 0xa70: 0xe00d, 0xa71: 0x0008, 0xa72: 0xe00d, 0xa73: 0x0008, 0xa74: 0xe00d, 0xa75: 0x0008, - 0xa76: 0xe00d, 0xa77: 0x0008, 0xa78: 0xe00d, 0xa79: 0x0008, 0xa7a: 0xe00d, 0xa7b: 0x0008, - 0xa7c: 0xe00d, 0xa7d: 0x0008, 0xa7e: 0xe00d, 0xa7f: 0x0008, - // Block 0x2a, offset 0xa80 - 0xa80: 0x0008, 0xa81: 0x0008, 0xa82: 0x0008, 0xa83: 0x0008, 0xa84: 0x0008, 0xa85: 0x0008, - 0xa86: 0x0040, 0xa87: 0x0040, 0xa88: 0xe045, 0xa89: 0xe045, 0xa8a: 0xe045, 0xa8b: 0xe045, - 0xa8c: 0xe045, 0xa8d: 0xe045, 0xa8e: 0x0040, 0xa8f: 0x0040, 0xa90: 0x0008, 0xa91: 0x0008, - 0xa92: 0x0008, 0xa93: 0x0008, 0xa94: 0x0008, 0xa95: 0x0008, 0xa96: 0x0008, 0xa97: 0x0008, - 0xa98: 0x0040, 0xa99: 0xe045, 0xa9a: 0x0040, 0xa9b: 0xe045, 0xa9c: 0x0040, 0xa9d: 0xe045, - 0xa9e: 0x0040, 0xa9f: 0xe045, 0xaa0: 0x0008, 0xaa1: 0x0008, 0xaa2: 0x0008, 0xaa3: 0x0008, - 0xaa4: 0x0008, 0xaa5: 0x0008, 0xaa6: 0x0008, 0xaa7: 0x0008, 0xaa8: 0xe045, 0xaa9: 0xe045, - 0xaaa: 0xe045, 0xaab: 0xe045, 0xaac: 0xe045, 0xaad: 0xe045, 0xaae: 0xe045, 0xaaf: 0xe045, - 0xab0: 0x0008, 0xab1: 0x1459, 0xab2: 0x0008, 0xab3: 0x1471, 0xab4: 0x0008, 0xab5: 0x1489, - 0xab6: 0x0008, 0xab7: 0x14a1, 0xab8: 0x0008, 0xab9: 0x14b9, 0xaba: 0x0008, 0xabb: 0x14d1, - 0xabc: 0x0008, 0xabd: 0x14e9, 0xabe: 0x0040, 0xabf: 0x0040, - // Block 0x2b, offset 0xac0 - 0xac0: 0x1501, 0xac1: 0x1531, 0xac2: 0x1561, 0xac3: 0x1591, 0xac4: 0x15c1, 0xac5: 0x15f1, - 0xac6: 0x1621, 0xac7: 0x1651, 0xac8: 0x1501, 0xac9: 0x1531, 0xaca: 0x1561, 0xacb: 0x1591, - 0xacc: 0x15c1, 0xacd: 0x15f1, 0xace: 0x1621, 0xacf: 0x1651, 0xad0: 0x1681, 0xad1: 0x16b1, - 0xad2: 0x16e1, 0xad3: 0x1711, 0xad4: 0x1741, 0xad5: 0x1771, 0xad6: 0x17a1, 0xad7: 0x17d1, - 0xad8: 0x1681, 0xad9: 0x16b1, 0xada: 0x16e1, 0xadb: 0x1711, 0xadc: 0x1741, 0xadd: 0x1771, - 0xade: 0x17a1, 0xadf: 0x17d1, 0xae0: 0x1801, 0xae1: 0x1831, 0xae2: 0x1861, 0xae3: 0x1891, - 0xae4: 0x18c1, 0xae5: 0x18f1, 0xae6: 0x1921, 0xae7: 0x1951, 0xae8: 0x1801, 0xae9: 0x1831, - 0xaea: 0x1861, 0xaeb: 0x1891, 0xaec: 0x18c1, 0xaed: 0x18f1, 0xaee: 0x1921, 0xaef: 0x1951, - 0xaf0: 0x0008, 0xaf1: 0x0008, 0xaf2: 0x1981, 0xaf3: 0x19b1, 0xaf4: 0x19d9, 0xaf5: 0x0040, - 0xaf6: 0x0008, 0xaf7: 0x1a01, 0xaf8: 0xe045, 0xaf9: 0xe045, 0xafa: 0x064d, 0xafb: 0x1459, - 0xafc: 0x19b1, 0xafd: 0x0666, 0xafe: 0x1a31, 0xaff: 0x0686, - // Block 0x2c, offset 0xb00 - 0xb00: 0x06a6, 0xb01: 0x1a4a, 0xb02: 0x1a79, 0xb03: 0x1aa9, 0xb04: 0x1ad1, 0xb05: 0x0040, - 0xb06: 0x0008, 0xb07: 0x1af9, 0xb08: 0x06c5, 0xb09: 0x1471, 0xb0a: 0x06dd, 0xb0b: 0x1489, - 0xb0c: 0x1aa9, 0xb0d: 0x1b2a, 0xb0e: 0x1b5a, 0xb0f: 0x1b8a, 0xb10: 0x0008, 0xb11: 0x0008, - 0xb12: 0x0008, 0xb13: 0x1bb9, 0xb14: 0x0040, 0xb15: 0x0040, 0xb16: 0x0008, 0xb17: 0x0008, - 0xb18: 0xe045, 0xb19: 0xe045, 0xb1a: 0x06f5, 0xb1b: 0x14a1, 0xb1c: 0x0040, 0xb1d: 0x1bd2, - 0xb1e: 0x1c02, 0xb1f: 0x1c32, 0xb20: 0x0008, 0xb21: 0x0008, 0xb22: 0x0008, 0xb23: 0x1c61, - 0xb24: 0x0008, 0xb25: 0x0008, 0xb26: 0x0008, 0xb27: 0x0008, 0xb28: 0xe045, 0xb29: 0xe045, - 0xb2a: 0x070d, 0xb2b: 0x14d1, 0xb2c: 0xe04d, 0xb2d: 0x1c7a, 0xb2e: 0x03d2, 0xb2f: 0x1caa, - 0xb30: 0x0040, 0xb31: 0x0040, 0xb32: 0x1cb9, 0xb33: 0x1ce9, 0xb34: 0x1d11, 0xb35: 0x0040, - 0xb36: 0x0008, 0xb37: 0x1d39, 0xb38: 0x0725, 0xb39: 0x14b9, 0xb3a: 0x0515, 0xb3b: 0x14e9, - 0xb3c: 0x1ce9, 0xb3d: 0x073e, 0xb3e: 0x075e, 0xb3f: 0x0040, - // Block 0x2d, offset 0xb40 - 0xb40: 0x000a, 0xb41: 0x000a, 0xb42: 0x000a, 0xb43: 0x000a, 0xb44: 0x000a, 0xb45: 0x000a, - 0xb46: 0x000a, 0xb47: 0x000a, 0xb48: 0x000a, 0xb49: 0x000a, 0xb4a: 0x000a, 0xb4b: 0x03c0, - 0xb4c: 0x0003, 0xb4d: 0x0003, 0xb4e: 0x0340, 0xb4f: 0x0340, 0xb50: 0x0018, 0xb51: 0xe00d, - 0xb52: 0x0018, 0xb53: 0x0018, 0xb54: 0x0018, 0xb55: 0x0018, 0xb56: 0x0018, 0xb57: 0x077e, - 0xb58: 0x0018, 0xb59: 0x0018, 0xb5a: 0x0018, 0xb5b: 0x0018, 0xb5c: 0x0018, 0xb5d: 0x0018, - 0xb5e: 0x0018, 0xb5f: 0x0018, 0xb60: 0x0018, 0xb61: 0x0018, 0xb62: 0x0018, 0xb63: 0x0018, - 0xb64: 0x0040, 0xb65: 0x0040, 0xb66: 0x0040, 0xb67: 0x0018, 0xb68: 0x0040, 0xb69: 0x0040, - 0xb6a: 0x0340, 0xb6b: 0x0340, 0xb6c: 0x0340, 0xb6d: 0x0340, 0xb6e: 0x0340, 0xb6f: 0x000a, - 0xb70: 0x0018, 0xb71: 0x0018, 0xb72: 0x0018, 0xb73: 0x1d69, 0xb74: 0x1da1, 0xb75: 0x0018, - 0xb76: 0x1df1, 0xb77: 0x1e29, 0xb78: 0x0018, 0xb79: 0x0018, 0xb7a: 0x0018, 0xb7b: 0x0018, - 0xb7c: 0x1e7a, 0xb7d: 0x0018, 0xb7e: 0x079e, 0xb7f: 0x0018, - // Block 0x2e, offset 0xb80 - 0xb80: 0x0018, 0xb81: 0x0018, 0xb82: 0x0018, 0xb83: 0x0018, 0xb84: 0x0018, 0xb85: 0x0018, - 0xb86: 0x0018, 0xb87: 0x1e92, 0xb88: 0x1eaa, 0xb89: 0x1ec2, 0xb8a: 0x0018, 0xb8b: 0x0018, - 0xb8c: 0x0018, 0xb8d: 0x0018, 0xb8e: 0x0018, 0xb8f: 0x0018, 0xb90: 0x0018, 0xb91: 0x0018, - 0xb92: 0x0018, 0xb93: 0x0018, 0xb94: 0x0018, 0xb95: 0x0018, 0xb96: 0x0018, 0xb97: 0x1ed9, - 0xb98: 0x0018, 0xb99: 0x0018, 0xb9a: 0x0018, 0xb9b: 0x0018, 0xb9c: 0x0018, 0xb9d: 0x0018, - 0xb9e: 0x0018, 0xb9f: 0x000a, 0xba0: 0x03c0, 0xba1: 0x0340, 0xba2: 0x0340, 0xba3: 0x0340, - 0xba4: 0x03c0, 0xba5: 0x0040, 0xba6: 0x0040, 0xba7: 0x0040, 0xba8: 0x0040, 0xba9: 0x0040, - 0xbaa: 0x0340, 0xbab: 0x0340, 0xbac: 0x0340, 0xbad: 0x0340, 0xbae: 0x0340, 0xbaf: 0x0340, - 0xbb0: 0x1f41, 0xbb1: 0x0f41, 0xbb2: 0x0040, 0xbb3: 0x0040, 0xbb4: 0x1f51, 0xbb5: 0x1f61, - 0xbb6: 0x1f71, 0xbb7: 0x1f81, 0xbb8: 0x1f91, 0xbb9: 0x1fa1, 0xbba: 0x1fb2, 0xbbb: 0x07bd, - 0xbbc: 0x1fc2, 0xbbd: 0x1fd2, 0xbbe: 0x1fe2, 0xbbf: 0x0f71, - // Block 0x2f, offset 0xbc0 - 0xbc0: 0x1f41, 0xbc1: 0x00c9, 0xbc2: 0x0069, 0xbc3: 0x0079, 0xbc4: 0x1f51, 0xbc5: 0x1f61, - 0xbc6: 0x1f71, 0xbc7: 0x1f81, 0xbc8: 0x1f91, 0xbc9: 0x1fa1, 0xbca: 0x1fb2, 0xbcb: 0x07d5, - 0xbcc: 0x1fc2, 0xbcd: 0x1fd2, 0xbce: 0x1fe2, 0xbcf: 0x0040, 0xbd0: 0x0039, 0xbd1: 0x0f09, - 0xbd2: 0x00d9, 0xbd3: 0x0369, 0xbd4: 0x0ff9, 0xbd5: 0x0249, 0xbd6: 0x0f51, 0xbd7: 0x0359, - 0xbd8: 0x0f61, 0xbd9: 0x0f71, 0xbda: 0x0f99, 0xbdb: 0x01d9, 0xbdc: 0x0fa9, 0xbdd: 0x0040, - 0xbde: 0x0040, 0xbdf: 0x0040, 0xbe0: 0x0018, 0xbe1: 0x0018, 0xbe2: 0x0018, 0xbe3: 0x0018, - 0xbe4: 0x0018, 0xbe5: 0x0018, 0xbe6: 0x0018, 0xbe7: 0x0018, 0xbe8: 0x1ff1, 0xbe9: 0x0018, - 0xbea: 0x0018, 0xbeb: 0x0018, 0xbec: 0x0018, 0xbed: 0x0018, 0xbee: 0x0018, 0xbef: 0x0018, - 0xbf0: 0x0018, 0xbf1: 0x0018, 0xbf2: 0x0018, 0xbf3: 0x0018, 0xbf4: 0x0018, 0xbf5: 0x0018, - 0xbf6: 0x0018, 0xbf7: 0x0018, 0xbf8: 0x0018, 0xbf9: 0x0018, 0xbfa: 0x0018, 0xbfb: 0x0018, - 0xbfc: 0x0018, 0xbfd: 0x0018, 0xbfe: 0x0018, 0xbff: 0x0040, - // Block 0x30, offset 0xc00 - 0xc00: 0x07ee, 0xc01: 0x080e, 0xc02: 0x1159, 0xc03: 0x082d, 0xc04: 0x0018, 0xc05: 0x084e, - 0xc06: 0x086e, 0xc07: 0x1011, 0xc08: 0x0018, 0xc09: 0x088d, 0xc0a: 0x0f31, 0xc0b: 0x0249, - 0xc0c: 0x0249, 0xc0d: 0x0249, 0xc0e: 0x0249, 0xc0f: 0x2009, 0xc10: 0x0f41, 0xc11: 0x0f41, - 0xc12: 0x0359, 0xc13: 0x0359, 0xc14: 0x0018, 0xc15: 0x0f71, 0xc16: 0x2021, 0xc17: 0x0018, - 0xc18: 0x0018, 0xc19: 0x0f99, 0xc1a: 0x2039, 0xc1b: 0x0269, 0xc1c: 0x0269, 0xc1d: 0x0269, - 0xc1e: 0x0018, 0xc1f: 0x0018, 0xc20: 0x2049, 0xc21: 0x08ad, 0xc22: 0x2061, 0xc23: 0x0018, - 0xc24: 0x13d1, 0xc25: 0x0018, 0xc26: 0x2079, 0xc27: 0x0018, 0xc28: 0x13d1, 0xc29: 0x0018, - 0xc2a: 0x0f51, 0xc2b: 0x2091, 0xc2c: 0x0ee9, 0xc2d: 0x1159, 0xc2e: 0x0018, 0xc2f: 0x0f09, - 0xc30: 0x0f09, 0xc31: 0x1199, 0xc32: 0x0040, 0xc33: 0x0f61, 0xc34: 0x00d9, 0xc35: 0x20a9, - 0xc36: 0x20c1, 0xc37: 0x20d9, 0xc38: 0x20f1, 0xc39: 0x0f41, 0xc3a: 0x0018, 0xc3b: 0x08cd, - 0xc3c: 0x2109, 0xc3d: 0x10b1, 0xc3e: 0x10b1, 0xc3f: 0x2109, - // Block 0x31, offset 0xc40 - 0xc40: 0x08ed, 0xc41: 0x0018, 0xc42: 0x0018, 0xc43: 0x0018, 0xc44: 0x0018, 0xc45: 0x0ef9, - 0xc46: 0x0ef9, 0xc47: 0x0f09, 0xc48: 0x0f41, 0xc49: 0x0259, 0xc4a: 0x0018, 0xc4b: 0x0018, - 0xc4c: 0x0018, 0xc4d: 0x0018, 0xc4e: 0x0008, 0xc4f: 0x0018, 0xc50: 0x2121, 0xc51: 0x2151, - 0xc52: 0x2181, 0xc53: 0x21b9, 0xc54: 0x21e9, 0xc55: 0x2219, 0xc56: 0x2249, 0xc57: 0x2279, - 0xc58: 0x22a9, 0xc59: 0x22d9, 0xc5a: 0x2309, 0xc5b: 0x2339, 0xc5c: 0x2369, 0xc5d: 0x2399, - 0xc5e: 0x23c9, 0xc5f: 0x23f9, 0xc60: 0x0f41, 0xc61: 0x2421, 0xc62: 0x0905, 0xc63: 0x2439, - 0xc64: 0x1089, 0xc65: 0x2451, 0xc66: 0x0925, 0xc67: 0x2469, 0xc68: 0x2491, 0xc69: 0x0369, - 0xc6a: 0x24a9, 0xc6b: 0x0945, 0xc6c: 0x0359, 0xc6d: 0x1159, 0xc6e: 0x0ef9, 0xc6f: 0x0f61, - 0xc70: 0x0f41, 0xc71: 0x2421, 0xc72: 0x0965, 0xc73: 0x2439, 0xc74: 0x1089, 0xc75: 0x2451, - 0xc76: 0x0985, 0xc77: 0x2469, 0xc78: 0x2491, 0xc79: 0x0369, 0xc7a: 0x24a9, 0xc7b: 0x09a5, - 0xc7c: 0x0359, 0xc7d: 0x1159, 0xc7e: 0x0ef9, 0xc7f: 0x0f61, - // Block 0x32, offset 0xc80 - 0xc80: 0x0018, 0xc81: 0x0018, 0xc82: 0x0018, 0xc83: 0x0018, 0xc84: 0x0018, 0xc85: 0x0018, - 0xc86: 0x0018, 0xc87: 0x0018, 0xc88: 0x0018, 0xc89: 0x0018, 0xc8a: 0x0018, 0xc8b: 0x0040, - 0xc8c: 0x0040, 0xc8d: 0x0040, 0xc8e: 0x0040, 0xc8f: 0x0040, 0xc90: 0x0040, 0xc91: 0x0040, - 0xc92: 0x0040, 0xc93: 0x0040, 0xc94: 0x0040, 0xc95: 0x0040, 0xc96: 0x0040, 0xc97: 0x0040, - 0xc98: 0x0040, 0xc99: 0x0040, 0xc9a: 0x0040, 0xc9b: 0x0040, 0xc9c: 0x0040, 0xc9d: 0x0040, - 0xc9e: 0x0040, 0xc9f: 0x0040, 0xca0: 0x00c9, 0xca1: 0x0069, 0xca2: 0x0079, 0xca3: 0x1f51, - 0xca4: 0x1f61, 0xca5: 0x1f71, 0xca6: 0x1f81, 0xca7: 0x1f91, 0xca8: 0x1fa1, 0xca9: 0x2601, - 0xcaa: 0x2619, 0xcab: 0x2631, 0xcac: 0x2649, 0xcad: 0x2661, 0xcae: 0x2679, 0xcaf: 0x2691, - 0xcb0: 0x26a9, 0xcb1: 0x26c1, 0xcb2: 0x26d9, 0xcb3: 0x26f1, 0xcb4: 0x0a06, 0xcb5: 0x0a26, - 0xcb6: 0x0a46, 0xcb7: 0x0a66, 0xcb8: 0x0a86, 0xcb9: 0x0aa6, 0xcba: 0x0ac6, 0xcbb: 0x0ae6, - 0xcbc: 0x0b06, 0xcbd: 0x270a, 0xcbe: 0x2732, 0xcbf: 0x275a, - // Block 0x33, offset 0xcc0 - 0xcc0: 0x2782, 0xcc1: 0x27aa, 0xcc2: 0x27d2, 0xcc3: 0x27fa, 0xcc4: 0x2822, 0xcc5: 0x284a, - 0xcc6: 0x2872, 0xcc7: 0x289a, 0xcc8: 0x0040, 0xcc9: 0x0040, 0xcca: 0x0040, 0xccb: 0x0040, - 0xccc: 0x0040, 0xccd: 0x0040, 0xcce: 0x0040, 0xccf: 0x0040, 0xcd0: 0x0040, 0xcd1: 0x0040, - 0xcd2: 0x0040, 0xcd3: 0x0040, 0xcd4: 0x0040, 0xcd5: 0x0040, 0xcd6: 0x0040, 0xcd7: 0x0040, - 0xcd8: 0x0040, 0xcd9: 0x0040, 0xcda: 0x0040, 0xcdb: 0x0040, 0xcdc: 0x0b26, 0xcdd: 0x0b46, - 0xcde: 0x0b66, 0xcdf: 0x0b86, 0xce0: 0x0ba6, 0xce1: 0x0bc6, 0xce2: 0x0be6, 0xce3: 0x0c06, - 0xce4: 0x0c26, 0xce5: 0x0c46, 0xce6: 0x0c66, 0xce7: 0x0c86, 0xce8: 0x0ca6, 0xce9: 0x0cc6, - 0xcea: 0x0ce6, 0xceb: 0x0d06, 0xcec: 0x0d26, 0xced: 0x0d46, 0xcee: 0x0d66, 0xcef: 0x0d86, - 0xcf0: 0x0da6, 0xcf1: 0x0dc6, 0xcf2: 0x0de6, 0xcf3: 0x0e06, 0xcf4: 0x0e26, 0xcf5: 0x0e46, - 0xcf6: 0x0039, 0xcf7: 0x0ee9, 0xcf8: 0x1159, 0xcf9: 0x0ef9, 0xcfa: 0x0f09, 0xcfb: 0x1199, - 0xcfc: 0x0f31, 0xcfd: 0x0249, 0xcfe: 0x0f41, 0xcff: 0x0259, - // Block 0x34, offset 0xd00 - 0xd00: 0x0f51, 0xd01: 0x0359, 0xd02: 0x0f61, 0xd03: 0x0f71, 0xd04: 0x00d9, 0xd05: 0x0f99, - 0xd06: 0x2039, 0xd07: 0x0269, 0xd08: 0x01d9, 0xd09: 0x0fa9, 0xd0a: 0x0fb9, 0xd0b: 0x1089, - 0xd0c: 0x0279, 0xd0d: 0x0369, 0xd0e: 0x0289, 0xd0f: 0x13d1, 0xd10: 0x0039, 0xd11: 0x0ee9, - 0xd12: 0x1159, 0xd13: 0x0ef9, 0xd14: 0x0f09, 0xd15: 0x1199, 0xd16: 0x0f31, 0xd17: 0x0249, - 0xd18: 0x0f41, 0xd19: 0x0259, 0xd1a: 0x0f51, 0xd1b: 0x0359, 0xd1c: 0x0f61, 0xd1d: 0x0f71, - 0xd1e: 0x00d9, 0xd1f: 0x0f99, 0xd20: 0x2039, 0xd21: 0x0269, 0xd22: 0x01d9, 0xd23: 0x0fa9, - 0xd24: 0x0fb9, 0xd25: 0x1089, 0xd26: 0x0279, 0xd27: 0x0369, 0xd28: 0x0289, 0xd29: 0x13d1, - 0xd2a: 0x1f41, 0xd2b: 0x0018, 0xd2c: 0x0018, 0xd2d: 0x0018, 0xd2e: 0x0018, 0xd2f: 0x0018, - 0xd30: 0x0018, 0xd31: 0x0018, 0xd32: 0x0018, 0xd33: 0x0018, 0xd34: 0x0018, 0xd35: 0x0018, - 0xd36: 0x0018, 0xd37: 0x0018, 0xd38: 0x0018, 0xd39: 0x0018, 0xd3a: 0x0018, 0xd3b: 0x0018, - 0xd3c: 0x0018, 0xd3d: 0x0018, 0xd3e: 0x0018, 0xd3f: 0x0018, - // Block 0x35, offset 0xd40 - 0xd40: 0x0008, 0xd41: 0x0008, 0xd42: 0x0008, 0xd43: 0x0008, 0xd44: 0x0008, 0xd45: 0x0008, - 0xd46: 0x0008, 0xd47: 0x0008, 0xd48: 0x0008, 0xd49: 0x0008, 0xd4a: 0x0008, 0xd4b: 0x0008, - 0xd4c: 0x0008, 0xd4d: 0x0008, 0xd4e: 0x0008, 0xd4f: 0x0008, 0xd50: 0x0008, 0xd51: 0x0008, - 0xd52: 0x0008, 0xd53: 0x0008, 0xd54: 0x0008, 0xd55: 0x0008, 0xd56: 0x0008, 0xd57: 0x0008, - 0xd58: 0x0008, 0xd59: 0x0008, 0xd5a: 0x0008, 0xd5b: 0x0008, 0xd5c: 0x0008, 0xd5d: 0x0008, - 0xd5e: 0x0008, 0xd5f: 0x0040, 0xd60: 0xe00d, 0xd61: 0x0008, 0xd62: 0x2971, 0xd63: 0x0ebd, - 0xd64: 0x2989, 0xd65: 0x0008, 0xd66: 0x0008, 0xd67: 0xe07d, 0xd68: 0x0008, 0xd69: 0xe01d, - 0xd6a: 0x0008, 0xd6b: 0xe03d, 0xd6c: 0x0008, 0xd6d: 0x0fe1, 0xd6e: 0x1281, 0xd6f: 0x0fc9, - 0xd70: 0x1141, 0xd71: 0x0008, 0xd72: 0xe00d, 0xd73: 0x0008, 0xd74: 0x0008, 0xd75: 0xe01d, - 0xd76: 0x0008, 0xd77: 0x0008, 0xd78: 0x0008, 0xd79: 0x0008, 0xd7a: 0x0008, 0xd7b: 0x0008, - 0xd7c: 0x0259, 0xd7d: 0x1089, 0xd7e: 0x29a1, 0xd7f: 0x29b9, - // Block 0x36, offset 0xd80 - 0xd80: 0xe00d, 0xd81: 0x0008, 0xd82: 0xe00d, 0xd83: 0x0008, 0xd84: 0xe00d, 0xd85: 0x0008, - 0xd86: 0xe00d, 0xd87: 0x0008, 0xd88: 0xe00d, 0xd89: 0x0008, 0xd8a: 0xe00d, 0xd8b: 0x0008, - 0xd8c: 0xe00d, 0xd8d: 0x0008, 0xd8e: 0xe00d, 0xd8f: 0x0008, 0xd90: 0xe00d, 0xd91: 0x0008, - 0xd92: 0xe00d, 0xd93: 0x0008, 0xd94: 0xe00d, 0xd95: 0x0008, 0xd96: 0xe00d, 0xd97: 0x0008, - 0xd98: 0xe00d, 0xd99: 0x0008, 0xd9a: 0xe00d, 0xd9b: 0x0008, 0xd9c: 0xe00d, 0xd9d: 0x0008, - 0xd9e: 0xe00d, 0xd9f: 0x0008, 0xda0: 0xe00d, 0xda1: 0x0008, 0xda2: 0xe00d, 0xda3: 0x0008, - 0xda4: 0x0008, 0xda5: 0x0018, 0xda6: 0x0018, 0xda7: 0x0018, 0xda8: 0x0018, 0xda9: 0x0018, - 0xdaa: 0x0018, 0xdab: 0xe03d, 0xdac: 0x0008, 0xdad: 0xe01d, 0xdae: 0x0008, 0xdaf: 0x1308, - 0xdb0: 0x1308, 0xdb1: 0x1308, 0xdb2: 0xe00d, 0xdb3: 0x0008, 0xdb4: 0x0040, 0xdb5: 0x0040, - 0xdb6: 0x0040, 0xdb7: 0x0040, 0xdb8: 0x0040, 0xdb9: 0x0018, 0xdba: 0x0018, 0xdbb: 0x0018, - 0xdbc: 0x0018, 0xdbd: 0x0018, 0xdbe: 0x0018, 0xdbf: 0x0018, - // Block 0x37, offset 0xdc0 - 0xdc0: 0x26fd, 0xdc1: 0x271d, 0xdc2: 0x273d, 0xdc3: 0x275d, 0xdc4: 0x277d, 0xdc5: 0x279d, - 0xdc6: 0x27bd, 0xdc7: 0x27dd, 0xdc8: 0x27fd, 0xdc9: 0x281d, 0xdca: 0x283d, 0xdcb: 0x285d, - 0xdcc: 0x287d, 0xdcd: 0x289d, 0xdce: 0x28bd, 0xdcf: 0x28dd, 0xdd0: 0x28fd, 0xdd1: 0x291d, - 0xdd2: 0x293d, 0xdd3: 0x295d, 0xdd4: 0x297d, 0xdd5: 0x299d, 0xdd6: 0x0040, 0xdd7: 0x0040, - 0xdd8: 0x0040, 0xdd9: 0x0040, 0xdda: 0x0040, 0xddb: 0x0040, 0xddc: 0x0040, 0xddd: 0x0040, - 0xdde: 0x0040, 0xddf: 0x0040, 0xde0: 0x0040, 0xde1: 0x0040, 0xde2: 0x0040, 0xde3: 0x0040, - 0xde4: 0x0040, 0xde5: 0x0040, 0xde6: 0x0040, 0xde7: 0x0040, 0xde8: 0x0040, 0xde9: 0x0040, - 0xdea: 0x0040, 0xdeb: 0x0040, 0xdec: 0x0040, 0xded: 0x0040, 0xdee: 0x0040, 0xdef: 0x0040, - 0xdf0: 0x0040, 0xdf1: 0x0040, 0xdf2: 0x0040, 0xdf3: 0x0040, 0xdf4: 0x0040, 0xdf5: 0x0040, - 0xdf6: 0x0040, 0xdf7: 0x0040, 0xdf8: 0x0040, 0xdf9: 0x0040, 0xdfa: 0x0040, 0xdfb: 0x0040, - 0xdfc: 0x0040, 0xdfd: 0x0040, 0xdfe: 0x0040, 0xdff: 0x0040, - // Block 0x38, offset 0xe00 - 0xe00: 0x000a, 0xe01: 0x0018, 0xe02: 0x29d1, 0xe03: 0x0018, 0xe04: 0x0018, 0xe05: 0x0008, - 0xe06: 0x0008, 0xe07: 0x0008, 0xe08: 0x0018, 0xe09: 0x0018, 0xe0a: 0x0018, 0xe0b: 0x0018, - 0xe0c: 0x0018, 0xe0d: 0x0018, 0xe0e: 0x0018, 0xe0f: 0x0018, 0xe10: 0x0018, 0xe11: 0x0018, - 0xe12: 0x0018, 0xe13: 0x0018, 0xe14: 0x0018, 0xe15: 0x0018, 0xe16: 0x0018, 0xe17: 0x0018, - 0xe18: 0x0018, 0xe19: 0x0018, 0xe1a: 0x0018, 0xe1b: 0x0018, 0xe1c: 0x0018, 0xe1d: 0x0018, - 0xe1e: 0x0018, 0xe1f: 0x0018, 0xe20: 0x0018, 0xe21: 0x0018, 0xe22: 0x0018, 0xe23: 0x0018, - 0xe24: 0x0018, 0xe25: 0x0018, 0xe26: 0x0018, 0xe27: 0x0018, 0xe28: 0x0018, 0xe29: 0x0018, - 0xe2a: 0x1308, 0xe2b: 0x1308, 0xe2c: 0x1308, 0xe2d: 0x1308, 0xe2e: 0x1018, 0xe2f: 0x1018, - 0xe30: 0x0018, 0xe31: 0x0018, 0xe32: 0x0018, 0xe33: 0x0018, 0xe34: 0x0018, 0xe35: 0x0018, - 0xe36: 0xe125, 0xe37: 0x0018, 0xe38: 0x29bd, 0xe39: 0x29dd, 0xe3a: 0x29fd, 0xe3b: 0x0018, - 0xe3c: 0x0008, 0xe3d: 0x0018, 0xe3e: 0x0018, 0xe3f: 0x0018, - // Block 0x39, offset 0xe40 - 0xe40: 0x2b3d, 0xe41: 0x2b5d, 0xe42: 0x2b7d, 0xe43: 0x2b9d, 0xe44: 0x2bbd, 0xe45: 0x2bdd, - 0xe46: 0x2bdd, 0xe47: 0x2bdd, 0xe48: 0x2bfd, 0xe49: 0x2bfd, 0xe4a: 0x2bfd, 0xe4b: 0x2bfd, - 0xe4c: 0x2c1d, 0xe4d: 0x2c1d, 0xe4e: 0x2c1d, 0xe4f: 0x2c3d, 0xe50: 0x2c5d, 0xe51: 0x2c5d, - 0xe52: 0x2a7d, 0xe53: 0x2a7d, 0xe54: 0x2c5d, 0xe55: 0x2c5d, 0xe56: 0x2c7d, 0xe57: 0x2c7d, - 0xe58: 0x2c5d, 0xe59: 0x2c5d, 0xe5a: 0x2a7d, 0xe5b: 0x2a7d, 0xe5c: 0x2c5d, 0xe5d: 0x2c5d, - 0xe5e: 0x2c3d, 0xe5f: 0x2c3d, 0xe60: 0x2c9d, 0xe61: 0x2c9d, 0xe62: 0x2cbd, 0xe63: 0x2cbd, - 0xe64: 0x0040, 0xe65: 0x2cdd, 0xe66: 0x2cfd, 0xe67: 0x2d1d, 0xe68: 0x2d1d, 0xe69: 0x2d3d, - 0xe6a: 0x2d5d, 0xe6b: 0x2d7d, 0xe6c: 0x2d9d, 0xe6d: 0x2dbd, 0xe6e: 0x2ddd, 0xe6f: 0x2dfd, - 0xe70: 0x2e1d, 0xe71: 0x2e3d, 0xe72: 0x2e3d, 0xe73: 0x2e5d, 0xe74: 0x2e7d, 0xe75: 0x2e7d, - 0xe76: 0x2e9d, 0xe77: 0x2ebd, 0xe78: 0x2e5d, 0xe79: 0x2edd, 0xe7a: 0x2efd, 0xe7b: 0x2edd, - 0xe7c: 0x2e5d, 0xe7d: 0x2f1d, 0xe7e: 0x2f3d, 0xe7f: 0x2f5d, - // Block 0x3a, offset 0xe80 - 0xe80: 0x2f7d, 0xe81: 0x2f9d, 0xe82: 0x2cfd, 0xe83: 0x2cdd, 0xe84: 0x2fbd, 0xe85: 0x2fdd, - 0xe86: 0x2ffd, 0xe87: 0x301d, 0xe88: 0x303d, 0xe89: 0x305d, 0xe8a: 0x307d, 0xe8b: 0x309d, - 0xe8c: 0x30bd, 0xe8d: 0x30dd, 0xe8e: 0x30fd, 0xe8f: 0x0040, 0xe90: 0x0018, 0xe91: 0x0018, - 0xe92: 0x311d, 0xe93: 0x313d, 0xe94: 0x315d, 0xe95: 0x317d, 0xe96: 0x319d, 0xe97: 0x31bd, - 0xe98: 0x31dd, 0xe99: 0x31fd, 0xe9a: 0x321d, 0xe9b: 0x323d, 0xe9c: 0x315d, 0xe9d: 0x325d, - 0xe9e: 0x327d, 0xe9f: 0x329d, 0xea0: 0x0008, 0xea1: 0x0008, 0xea2: 0x0008, 0xea3: 0x0008, - 0xea4: 0x0008, 0xea5: 0x0008, 0xea6: 0x0008, 0xea7: 0x0008, 0xea8: 0x0008, 0xea9: 0x0008, - 0xeaa: 0x0008, 0xeab: 0x0008, 0xeac: 0x0008, 0xead: 0x0008, 0xeae: 0x0008, 0xeaf: 0x0008, - 0xeb0: 0x0008, 0xeb1: 0x0008, 0xeb2: 0x0008, 0xeb3: 0x0008, 0xeb4: 0x0008, 0xeb5: 0x0008, - 0xeb6: 0x0008, 0xeb7: 0x0008, 0xeb8: 0x0008, 0xeb9: 0x0008, 0xeba: 0x0008, 0xebb: 0x0040, - 0xebc: 0x0040, 0xebd: 0x0040, 0xebe: 0x0040, 0xebf: 0x0040, - // Block 0x3b, offset 0xec0 - 0xec0: 0x36a2, 0xec1: 0x36d2, 0xec2: 0x3702, 0xec3: 0x3732, 0xec4: 0x32bd, 0xec5: 0x32dd, - 0xec6: 0x32fd, 0xec7: 0x331d, 0xec8: 0x0018, 0xec9: 0x0018, 0xeca: 0x0018, 0xecb: 0x0018, - 0xecc: 0x0018, 0xecd: 0x0018, 0xece: 0x0018, 0xecf: 0x0018, 0xed0: 0x333d, 0xed1: 0x3761, - 0xed2: 0x3779, 0xed3: 0x3791, 0xed4: 0x37a9, 0xed5: 0x37c1, 0xed6: 0x37d9, 0xed7: 0x37f1, - 0xed8: 0x3809, 0xed9: 0x3821, 0xeda: 0x3839, 0xedb: 0x3851, 0xedc: 0x3869, 0xedd: 0x3881, - 0xede: 0x3899, 0xedf: 0x38b1, 0xee0: 0x335d, 0xee1: 0x337d, 0xee2: 0x339d, 0xee3: 0x33bd, - 0xee4: 0x33dd, 0xee5: 0x33dd, 0xee6: 0x33fd, 0xee7: 0x341d, 0xee8: 0x343d, 0xee9: 0x345d, - 0xeea: 0x347d, 0xeeb: 0x349d, 0xeec: 0x34bd, 0xeed: 0x34dd, 0xeee: 0x34fd, 0xeef: 0x351d, - 0xef0: 0x353d, 0xef1: 0x355d, 0xef2: 0x357d, 0xef3: 0x359d, 0xef4: 0x35bd, 0xef5: 0x35dd, - 0xef6: 0x35fd, 0xef7: 0x361d, 0xef8: 0x363d, 0xef9: 0x365d, 0xefa: 0x367d, 0xefb: 0x369d, - 0xefc: 0x38c9, 0xefd: 0x3901, 0xefe: 0x36bd, 0xeff: 0x0018, - // Block 0x3c, offset 0xf00 - 0xf00: 0x36dd, 0xf01: 0x36fd, 0xf02: 0x371d, 0xf03: 0x373d, 0xf04: 0x375d, 0xf05: 0x377d, - 0xf06: 0x379d, 0xf07: 0x37bd, 0xf08: 0x37dd, 0xf09: 0x37fd, 0xf0a: 0x381d, 0xf0b: 0x383d, - 0xf0c: 0x385d, 0xf0d: 0x387d, 0xf0e: 0x389d, 0xf0f: 0x38bd, 0xf10: 0x38dd, 0xf11: 0x38fd, - 0xf12: 0x391d, 0xf13: 0x393d, 0xf14: 0x395d, 0xf15: 0x397d, 0xf16: 0x399d, 0xf17: 0x39bd, - 0xf18: 0x39dd, 0xf19: 0x39fd, 0xf1a: 0x3a1d, 0xf1b: 0x3a3d, 0xf1c: 0x3a5d, 0xf1d: 0x3a7d, - 0xf1e: 0x3a9d, 0xf1f: 0x3abd, 0xf20: 0x3add, 0xf21: 0x3afd, 0xf22: 0x3b1d, 0xf23: 0x3b3d, - 0xf24: 0x3b5d, 0xf25: 0x3b7d, 0xf26: 0x127d, 0xf27: 0x3b9d, 0xf28: 0x3bbd, 0xf29: 0x3bdd, - 0xf2a: 0x3bfd, 0xf2b: 0x3c1d, 0xf2c: 0x3c3d, 0xf2d: 0x3c5d, 0xf2e: 0x239d, 0xf2f: 0x3c7d, - 0xf30: 0x3c9d, 0xf31: 0x3939, 0xf32: 0x3951, 0xf33: 0x3969, 0xf34: 0x3981, 0xf35: 0x3999, - 0xf36: 0x39b1, 0xf37: 0x39c9, 0xf38: 0x39e1, 0xf39: 0x39f9, 0xf3a: 0x3a11, 0xf3b: 0x3a29, - 0xf3c: 0x3a41, 0xf3d: 0x3a59, 0xf3e: 0x3a71, 0xf3f: 0x3a89, - // Block 0x3d, offset 0xf40 - 0xf40: 0x3aa1, 0xf41: 0x3ac9, 0xf42: 0x3af1, 0xf43: 0x3b19, 0xf44: 0x3b41, 0xf45: 0x3b69, - 0xf46: 0x3b91, 0xf47: 0x3bb9, 0xf48: 0x3be1, 0xf49: 0x3c09, 0xf4a: 0x3c39, 0xf4b: 0x3c69, - 0xf4c: 0x3c99, 0xf4d: 0x3cbd, 0xf4e: 0x3cb1, 0xf4f: 0x3cdd, 0xf50: 0x3cfd, 0xf51: 0x3d15, - 0xf52: 0x3d2d, 0xf53: 0x3d45, 0xf54: 0x3d5d, 0xf55: 0x3d5d, 0xf56: 0x3d45, 0xf57: 0x3d75, - 0xf58: 0x07bd, 0xf59: 0x3d8d, 0xf5a: 0x3da5, 0xf5b: 0x3dbd, 0xf5c: 0x3dd5, 0xf5d: 0x3ded, - 0xf5e: 0x3e05, 0xf5f: 0x3e1d, 0xf60: 0x3e35, 0xf61: 0x3e4d, 0xf62: 0x3e65, 0xf63: 0x3e7d, - 0xf64: 0x3e95, 0xf65: 0x3e95, 0xf66: 0x3ead, 0xf67: 0x3ead, 0xf68: 0x3ec5, 0xf69: 0x3ec5, - 0xf6a: 0x3edd, 0xf6b: 0x3ef5, 0xf6c: 0x3f0d, 0xf6d: 0x3f25, 0xf6e: 0x3f3d, 0xf6f: 0x3f3d, - 0xf70: 0x3f55, 0xf71: 0x3f55, 0xf72: 0x3f55, 0xf73: 0x3f6d, 0xf74: 0x3f85, 0xf75: 0x3f9d, - 0xf76: 0x3fb5, 0xf77: 0x3f9d, 0xf78: 0x3fcd, 0xf79: 0x3fe5, 0xf7a: 0x3f6d, 0xf7b: 0x3ffd, - 0xf7c: 0x4015, 0xf7d: 0x4015, 0xf7e: 0x4015, 0xf7f: 0x0040, - // Block 0x3e, offset 0xf80 - 0xf80: 0x3cc9, 0xf81: 0x3d31, 0xf82: 0x3d99, 0xf83: 0x3e01, 0xf84: 0x3e51, 0xf85: 0x3eb9, - 0xf86: 0x3f09, 0xf87: 0x3f59, 0xf88: 0x3fd9, 0xf89: 0x4041, 0xf8a: 0x4091, 0xf8b: 0x40e1, - 0xf8c: 0x4131, 0xf8d: 0x4199, 0xf8e: 0x4201, 0xf8f: 0x4251, 0xf90: 0x42a1, 0xf91: 0x42d9, - 0xf92: 0x4329, 0xf93: 0x4391, 0xf94: 0x43f9, 0xf95: 0x4431, 0xf96: 0x44b1, 0xf97: 0x4549, - 0xf98: 0x45c9, 0xf99: 0x4619, 0xf9a: 0x4699, 0xf9b: 0x4719, 0xf9c: 0x4781, 0xf9d: 0x47d1, - 0xf9e: 0x4821, 0xf9f: 0x4871, 0xfa0: 0x48d9, 0xfa1: 0x4959, 0xfa2: 0x49c1, 0xfa3: 0x4a11, - 0xfa4: 0x4a61, 0xfa5: 0x4ab1, 0xfa6: 0x4ae9, 0xfa7: 0x4b21, 0xfa8: 0x4b59, 0xfa9: 0x4b91, - 0xfaa: 0x4be1, 0xfab: 0x4c31, 0xfac: 0x4cb1, 0xfad: 0x4d01, 0xfae: 0x4d69, 0xfaf: 0x4de9, - 0xfb0: 0x4e39, 0xfb1: 0x4e71, 0xfb2: 0x4ea9, 0xfb3: 0x4f29, 0xfb4: 0x4f91, 0xfb5: 0x5011, - 0xfb6: 0x5061, 0xfb7: 0x50e1, 0xfb8: 0x5119, 0xfb9: 0x5169, 0xfba: 0x51b9, 0xfbb: 0x5209, - 0xfbc: 0x5259, 0xfbd: 0x52a9, 0xfbe: 0x5311, 0xfbf: 0x5361, - // Block 0x3f, offset 0xfc0 - 0xfc0: 0x5399, 0xfc1: 0x53e9, 0xfc2: 0x5439, 0xfc3: 0x5489, 0xfc4: 0x54f1, 0xfc5: 0x5541, - 0xfc6: 0x5591, 0xfc7: 0x55e1, 0xfc8: 0x5661, 0xfc9: 0x56c9, 0xfca: 0x5701, 0xfcb: 0x5781, - 0xfcc: 0x57b9, 0xfcd: 0x5821, 0xfce: 0x5889, 0xfcf: 0x58d9, 0xfd0: 0x5929, 0xfd1: 0x5979, - 0xfd2: 0x59e1, 0xfd3: 0x5a19, 0xfd4: 0x5a69, 0xfd5: 0x5ad1, 0xfd6: 0x5b09, 0xfd7: 0x5b89, - 0xfd8: 0x5bd9, 0xfd9: 0x5c01, 0xfda: 0x5c29, 0xfdb: 0x5c51, 0xfdc: 0x5c79, 0xfdd: 0x5ca1, - 0xfde: 0x5cc9, 0xfdf: 0x5cf1, 0xfe0: 0x5d19, 0xfe1: 0x5d41, 0xfe2: 0x5d69, 0xfe3: 0x5d99, - 0xfe4: 0x5dc9, 0xfe5: 0x5df9, 0xfe6: 0x5e29, 0xfe7: 0x5e59, 0xfe8: 0x5e89, 0xfe9: 0x5eb9, - 0xfea: 0x5ee9, 0xfeb: 0x5f19, 0xfec: 0x5f49, 0xfed: 0x5f79, 0xfee: 0x5fa9, 0xfef: 0x5fd9, - 0xff0: 0x6009, 0xff1: 0x402d, 0xff2: 0x6039, 0xff3: 0x6051, 0xff4: 0x404d, 0xff5: 0x6069, - 0xff6: 0x6081, 0xff7: 0x6099, 0xff8: 0x406d, 0xff9: 0x406d, 0xffa: 0x60b1, 0xffb: 0x60c9, - 0xffc: 0x6101, 0xffd: 0x6139, 0xffe: 0x6171, 0xfff: 0x61a9, - // Block 0x40, offset 0x1000 - 0x1000: 0x6211, 0x1001: 0x6229, 0x1002: 0x408d, 0x1003: 0x6241, 0x1004: 0x6259, 0x1005: 0x6271, - 0x1006: 0x6289, 0x1007: 0x62a1, 0x1008: 0x40ad, 0x1009: 0x62b9, 0x100a: 0x62e1, 0x100b: 0x62f9, - 0x100c: 0x40cd, 0x100d: 0x40cd, 0x100e: 0x6311, 0x100f: 0x6329, 0x1010: 0x6341, 0x1011: 0x40ed, - 0x1012: 0x410d, 0x1013: 0x412d, 0x1014: 0x414d, 0x1015: 0x416d, 0x1016: 0x6359, 0x1017: 0x6371, - 0x1018: 0x6389, 0x1019: 0x63a1, 0x101a: 0x63b9, 0x101b: 0x418d, 0x101c: 0x63d1, 0x101d: 0x63e9, - 0x101e: 0x6401, 0x101f: 0x41ad, 0x1020: 0x41cd, 0x1021: 0x6419, 0x1022: 0x41ed, 0x1023: 0x420d, - 0x1024: 0x422d, 0x1025: 0x6431, 0x1026: 0x424d, 0x1027: 0x6449, 0x1028: 0x6479, 0x1029: 0x6211, - 0x102a: 0x426d, 0x102b: 0x428d, 0x102c: 0x42ad, 0x102d: 0x42cd, 0x102e: 0x64b1, 0x102f: 0x64f1, - 0x1030: 0x6539, 0x1031: 0x6551, 0x1032: 0x42ed, 0x1033: 0x6569, 0x1034: 0x6581, 0x1035: 0x6599, - 0x1036: 0x430d, 0x1037: 0x65b1, 0x1038: 0x65c9, 0x1039: 0x65b1, 0x103a: 0x65e1, 0x103b: 0x65f9, - 0x103c: 0x432d, 0x103d: 0x6611, 0x103e: 0x6629, 0x103f: 0x6611, - // Block 0x41, offset 0x1040 - 0x1040: 0x434d, 0x1041: 0x436d, 0x1042: 0x0040, 0x1043: 0x6641, 0x1044: 0x6659, 0x1045: 0x6671, - 0x1046: 0x6689, 0x1047: 0x0040, 0x1048: 0x66c1, 0x1049: 0x66d9, 0x104a: 0x66f1, 0x104b: 0x6709, - 0x104c: 0x6721, 0x104d: 0x6739, 0x104e: 0x6401, 0x104f: 0x6751, 0x1050: 0x6769, 0x1051: 0x6781, - 0x1052: 0x438d, 0x1053: 0x6799, 0x1054: 0x6289, 0x1055: 0x43ad, 0x1056: 0x43cd, 0x1057: 0x67b1, - 0x1058: 0x0040, 0x1059: 0x43ed, 0x105a: 0x67c9, 0x105b: 0x67e1, 0x105c: 0x67f9, 0x105d: 0x6811, - 0x105e: 0x6829, 0x105f: 0x6859, 0x1060: 0x6889, 0x1061: 0x68b1, 0x1062: 0x68d9, 0x1063: 0x6901, - 0x1064: 0x6929, 0x1065: 0x6951, 0x1066: 0x6979, 0x1067: 0x69a1, 0x1068: 0x69c9, 0x1069: 0x69f1, - 0x106a: 0x6a21, 0x106b: 0x6a51, 0x106c: 0x6a81, 0x106d: 0x6ab1, 0x106e: 0x6ae1, 0x106f: 0x6b11, - 0x1070: 0x6b41, 0x1071: 0x6b71, 0x1072: 0x6ba1, 0x1073: 0x6bd1, 0x1074: 0x6c01, 0x1075: 0x6c31, - 0x1076: 0x6c61, 0x1077: 0x6c91, 0x1078: 0x6cc1, 0x1079: 0x6cf1, 0x107a: 0x6d21, 0x107b: 0x6d51, - 0x107c: 0x6d81, 0x107d: 0x6db1, 0x107e: 0x6de1, 0x107f: 0x440d, - // Block 0x42, offset 0x1080 - 0x1080: 0xe00d, 0x1081: 0x0008, 0x1082: 0xe00d, 0x1083: 0x0008, 0x1084: 0xe00d, 0x1085: 0x0008, - 0x1086: 0xe00d, 0x1087: 0x0008, 0x1088: 0xe00d, 0x1089: 0x0008, 0x108a: 0xe00d, 0x108b: 0x0008, - 0x108c: 0xe00d, 0x108d: 0x0008, 0x108e: 0xe00d, 0x108f: 0x0008, 0x1090: 0xe00d, 0x1091: 0x0008, - 0x1092: 0xe00d, 0x1093: 0x0008, 0x1094: 0xe00d, 0x1095: 0x0008, 0x1096: 0xe00d, 0x1097: 0x0008, - 0x1098: 0xe00d, 0x1099: 0x0008, 0x109a: 0xe00d, 0x109b: 0x0008, 0x109c: 0xe00d, 0x109d: 0x0008, - 0x109e: 0xe00d, 0x109f: 0x0008, 0x10a0: 0xe00d, 0x10a1: 0x0008, 0x10a2: 0xe00d, 0x10a3: 0x0008, - 0x10a4: 0xe00d, 0x10a5: 0x0008, 0x10a6: 0xe00d, 0x10a7: 0x0008, 0x10a8: 0xe00d, 0x10a9: 0x0008, - 0x10aa: 0xe00d, 0x10ab: 0x0008, 0x10ac: 0xe00d, 0x10ad: 0x0008, 0x10ae: 0x0008, 0x10af: 0x1308, - 0x10b0: 0x1318, 0x10b1: 0x1318, 0x10b2: 0x1318, 0x10b3: 0x0018, 0x10b4: 0x1308, 0x10b5: 0x1308, - 0x10b6: 0x1308, 0x10b7: 0x1308, 0x10b8: 0x1308, 0x10b9: 0x1308, 0x10ba: 0x1308, 0x10bb: 0x1308, - 0x10bc: 0x1308, 0x10bd: 0x1308, 0x10be: 0x0018, 0x10bf: 0x0008, - // Block 0x43, offset 0x10c0 - 0x10c0: 0xe00d, 0x10c1: 0x0008, 0x10c2: 0xe00d, 0x10c3: 0x0008, 0x10c4: 0xe00d, 0x10c5: 0x0008, - 0x10c6: 0xe00d, 0x10c7: 0x0008, 0x10c8: 0xe00d, 0x10c9: 0x0008, 0x10ca: 0xe00d, 0x10cb: 0x0008, - 0x10cc: 0xe00d, 0x10cd: 0x0008, 0x10ce: 0xe00d, 0x10cf: 0x0008, 0x10d0: 0xe00d, 0x10d1: 0x0008, - 0x10d2: 0xe00d, 0x10d3: 0x0008, 0x10d4: 0xe00d, 0x10d5: 0x0008, 0x10d6: 0xe00d, 0x10d7: 0x0008, - 0x10d8: 0xe00d, 0x10d9: 0x0008, 0x10da: 0xe00d, 0x10db: 0x0008, 0x10dc: 0x0ea1, 0x10dd: 0x6e11, - 0x10de: 0x1308, 0x10df: 0x1308, 0x10e0: 0x0008, 0x10e1: 0x0008, 0x10e2: 0x0008, 0x10e3: 0x0008, - 0x10e4: 0x0008, 0x10e5: 0x0008, 0x10e6: 0x0008, 0x10e7: 0x0008, 0x10e8: 0x0008, 0x10e9: 0x0008, - 0x10ea: 0x0008, 0x10eb: 0x0008, 0x10ec: 0x0008, 0x10ed: 0x0008, 0x10ee: 0x0008, 0x10ef: 0x0008, - 0x10f0: 0x0008, 0x10f1: 0x0008, 0x10f2: 0x0008, 0x10f3: 0x0008, 0x10f4: 0x0008, 0x10f5: 0x0008, - 0x10f6: 0x0008, 0x10f7: 0x0008, 0x10f8: 0x0008, 0x10f9: 0x0008, 0x10fa: 0x0008, 0x10fb: 0x0008, - 0x10fc: 0x0008, 0x10fd: 0x0008, 0x10fe: 0x0008, 0x10ff: 0x0008, - // Block 0x44, offset 0x1100 - 0x1100: 0x0018, 0x1101: 0x0018, 0x1102: 0x0018, 0x1103: 0x0018, 0x1104: 0x0018, 0x1105: 0x0018, - 0x1106: 0x0018, 0x1107: 0x0018, 0x1108: 0x0018, 0x1109: 0x0018, 0x110a: 0x0018, 0x110b: 0x0018, - 0x110c: 0x0018, 0x110d: 0x0018, 0x110e: 0x0018, 0x110f: 0x0018, 0x1110: 0x0018, 0x1111: 0x0018, - 0x1112: 0x0018, 0x1113: 0x0018, 0x1114: 0x0018, 0x1115: 0x0018, 0x1116: 0x0018, 0x1117: 0x0008, - 0x1118: 0x0008, 0x1119: 0x0008, 0x111a: 0x0008, 0x111b: 0x0008, 0x111c: 0x0008, 0x111d: 0x0008, - 0x111e: 0x0008, 0x111f: 0x0008, 0x1120: 0x0018, 0x1121: 0x0018, 0x1122: 0xe00d, 0x1123: 0x0008, - 0x1124: 0xe00d, 0x1125: 0x0008, 0x1126: 0xe00d, 0x1127: 0x0008, 0x1128: 0xe00d, 0x1129: 0x0008, - 0x112a: 0xe00d, 0x112b: 0x0008, 0x112c: 0xe00d, 0x112d: 0x0008, 0x112e: 0xe00d, 0x112f: 0x0008, - 0x1130: 0x0008, 0x1131: 0x0008, 0x1132: 0xe00d, 0x1133: 0x0008, 0x1134: 0xe00d, 0x1135: 0x0008, - 0x1136: 0xe00d, 0x1137: 0x0008, 0x1138: 0xe00d, 0x1139: 0x0008, 0x113a: 0xe00d, 0x113b: 0x0008, - 0x113c: 0xe00d, 0x113d: 0x0008, 0x113e: 0xe00d, 0x113f: 0x0008, - // Block 0x45, offset 0x1140 - 0x1140: 0xe00d, 0x1141: 0x0008, 0x1142: 0xe00d, 0x1143: 0x0008, 0x1144: 0xe00d, 0x1145: 0x0008, - 0x1146: 0xe00d, 0x1147: 0x0008, 0x1148: 0xe00d, 0x1149: 0x0008, 0x114a: 0xe00d, 0x114b: 0x0008, - 0x114c: 0xe00d, 0x114d: 0x0008, 0x114e: 0xe00d, 0x114f: 0x0008, 0x1150: 0xe00d, 0x1151: 0x0008, - 0x1152: 0xe00d, 0x1153: 0x0008, 0x1154: 0xe00d, 0x1155: 0x0008, 0x1156: 0xe00d, 0x1157: 0x0008, - 0x1158: 0xe00d, 0x1159: 0x0008, 0x115a: 0xe00d, 0x115b: 0x0008, 0x115c: 0xe00d, 0x115d: 0x0008, - 0x115e: 0xe00d, 0x115f: 0x0008, 0x1160: 0xe00d, 0x1161: 0x0008, 0x1162: 0xe00d, 0x1163: 0x0008, - 0x1164: 0xe00d, 0x1165: 0x0008, 0x1166: 0xe00d, 0x1167: 0x0008, 0x1168: 0xe00d, 0x1169: 0x0008, - 0x116a: 0xe00d, 0x116b: 0x0008, 0x116c: 0xe00d, 0x116d: 0x0008, 0x116e: 0xe00d, 0x116f: 0x0008, - 0x1170: 0xe0fd, 0x1171: 0x0008, 0x1172: 0x0008, 0x1173: 0x0008, 0x1174: 0x0008, 0x1175: 0x0008, - 0x1176: 0x0008, 0x1177: 0x0008, 0x1178: 0x0008, 0x1179: 0xe01d, 0x117a: 0x0008, 0x117b: 0xe03d, - 0x117c: 0x0008, 0x117d: 0x442d, 0x117e: 0xe00d, 0x117f: 0x0008, - // Block 0x46, offset 0x1180 - 0x1180: 0xe00d, 0x1181: 0x0008, 0x1182: 0xe00d, 0x1183: 0x0008, 0x1184: 0xe00d, 0x1185: 0x0008, - 0x1186: 0xe00d, 0x1187: 0x0008, 0x1188: 0x0008, 0x1189: 0x0018, 0x118a: 0x0018, 0x118b: 0xe03d, - 0x118c: 0x0008, 0x118d: 0x11d9, 0x118e: 0x0008, 0x118f: 0x0008, 0x1190: 0xe00d, 0x1191: 0x0008, - 0x1192: 0xe00d, 0x1193: 0x0008, 0x1194: 0x0008, 0x1195: 0x0008, 0x1196: 0xe00d, 0x1197: 0x0008, - 0x1198: 0xe00d, 0x1199: 0x0008, 0x119a: 0xe00d, 0x119b: 0x0008, 0x119c: 0xe00d, 0x119d: 0x0008, - 0x119e: 0xe00d, 0x119f: 0x0008, 0x11a0: 0xe00d, 0x11a1: 0x0008, 0x11a2: 0xe00d, 0x11a3: 0x0008, - 0x11a4: 0xe00d, 0x11a5: 0x0008, 0x11a6: 0xe00d, 0x11a7: 0x0008, 0x11a8: 0xe00d, 0x11a9: 0x0008, - 0x11aa: 0x6e29, 0x11ab: 0x1029, 0x11ac: 0x11c1, 0x11ad: 0x6e41, 0x11ae: 0x1221, 0x11af: 0x0040, - 0x11b0: 0x6e59, 0x11b1: 0x6e71, 0x11b2: 0x1239, 0x11b3: 0x444d, 0x11b4: 0xe00d, 0x11b5: 0x0008, - 0x11b6: 0xe00d, 0x11b7: 0x0008, 0x11b8: 0x0040, 0x11b9: 0x0040, 0x11ba: 0x0040, 0x11bb: 0x0040, - 0x11bc: 0x0040, 0x11bd: 0x0040, 0x11be: 0x0040, 0x11bf: 0x0040, - // Block 0x47, offset 0x11c0 - 0x11c0: 0x64d5, 0x11c1: 0x64f5, 0x11c2: 0x6515, 0x11c3: 0x6535, 0x11c4: 0x6555, 0x11c5: 0x6575, - 0x11c6: 0x6595, 0x11c7: 0x65b5, 0x11c8: 0x65d5, 0x11c9: 0x65f5, 0x11ca: 0x6615, 0x11cb: 0x6635, - 0x11cc: 0x6655, 0x11cd: 0x6675, 0x11ce: 0x0008, 0x11cf: 0x0008, 0x11d0: 0x6695, 0x11d1: 0x0008, - 0x11d2: 0x66b5, 0x11d3: 0x0008, 0x11d4: 0x0008, 0x11d5: 0x66d5, 0x11d6: 0x66f5, 0x11d7: 0x6715, - 0x11d8: 0x6735, 0x11d9: 0x6755, 0x11da: 0x6775, 0x11db: 0x6795, 0x11dc: 0x67b5, 0x11dd: 0x67d5, - 0x11de: 0x67f5, 0x11df: 0x0008, 0x11e0: 0x6815, 0x11e1: 0x0008, 0x11e2: 0x6835, 0x11e3: 0x0008, - 0x11e4: 0x0008, 0x11e5: 0x6855, 0x11e6: 0x6875, 0x11e7: 0x0008, 0x11e8: 0x0008, 0x11e9: 0x0008, - 0x11ea: 0x6895, 0x11eb: 0x68b5, 0x11ec: 0x68d5, 0x11ed: 0x68f5, 0x11ee: 0x6915, 0x11ef: 0x6935, - 0x11f0: 0x6955, 0x11f1: 0x6975, 0x11f2: 0x6995, 0x11f3: 0x69b5, 0x11f4: 0x69d5, 0x11f5: 0x69f5, - 0x11f6: 0x6a15, 0x11f7: 0x6a35, 0x11f8: 0x6a55, 0x11f9: 0x6a75, 0x11fa: 0x6a95, 0x11fb: 0x6ab5, - 0x11fc: 0x6ad5, 0x11fd: 0x6af5, 0x11fe: 0x6b15, 0x11ff: 0x6b35, - // Block 0x48, offset 0x1200 - 0x1200: 0x7a95, 0x1201: 0x7ab5, 0x1202: 0x7ad5, 0x1203: 0x7af5, 0x1204: 0x7b15, 0x1205: 0x7b35, - 0x1206: 0x7b55, 0x1207: 0x7b75, 0x1208: 0x7b95, 0x1209: 0x7bb5, 0x120a: 0x7bd5, 0x120b: 0x7bf5, - 0x120c: 0x7c15, 0x120d: 0x7c35, 0x120e: 0x7c55, 0x120f: 0x6ec9, 0x1210: 0x6ef1, 0x1211: 0x6f19, - 0x1212: 0x7c75, 0x1213: 0x7c95, 0x1214: 0x7cb5, 0x1215: 0x6f41, 0x1216: 0x6f69, 0x1217: 0x6f91, - 0x1218: 0x7cd5, 0x1219: 0x7cf5, 0x121a: 0x0040, 0x121b: 0x0040, 0x121c: 0x0040, 0x121d: 0x0040, - 0x121e: 0x0040, 0x121f: 0x0040, 0x1220: 0x0040, 0x1221: 0x0040, 0x1222: 0x0040, 0x1223: 0x0040, - 0x1224: 0x0040, 0x1225: 0x0040, 0x1226: 0x0040, 0x1227: 0x0040, 0x1228: 0x0040, 0x1229: 0x0040, - 0x122a: 0x0040, 0x122b: 0x0040, 0x122c: 0x0040, 0x122d: 0x0040, 0x122e: 0x0040, 0x122f: 0x0040, - 0x1230: 0x0040, 0x1231: 0x0040, 0x1232: 0x0040, 0x1233: 0x0040, 0x1234: 0x0040, 0x1235: 0x0040, - 0x1236: 0x0040, 0x1237: 0x0040, 0x1238: 0x0040, 0x1239: 0x0040, 0x123a: 0x0040, 0x123b: 0x0040, - 0x123c: 0x0040, 0x123d: 0x0040, 0x123e: 0x0040, 0x123f: 0x0040, - // Block 0x49, offset 0x1240 - 0x1240: 0x6fb9, 0x1241: 0x6fd1, 0x1242: 0x6fe9, 0x1243: 0x7d15, 0x1244: 0x7d35, 0x1245: 0x7001, - 0x1246: 0x7001, 0x1247: 0x0040, 0x1248: 0x0040, 0x1249: 0x0040, 0x124a: 0x0040, 0x124b: 0x0040, - 0x124c: 0x0040, 0x124d: 0x0040, 0x124e: 0x0040, 0x124f: 0x0040, 0x1250: 0x0040, 0x1251: 0x0040, - 0x1252: 0x0040, 0x1253: 0x7019, 0x1254: 0x7041, 0x1255: 0x7069, 0x1256: 0x7091, 0x1257: 0x70b9, - 0x1258: 0x0040, 0x1259: 0x0040, 0x125a: 0x0040, 0x125b: 0x0040, 0x125c: 0x0040, 0x125d: 0x70e1, - 0x125e: 0x1308, 0x125f: 0x7109, 0x1260: 0x7131, 0x1261: 0x20a9, 0x1262: 0x20f1, 0x1263: 0x7149, - 0x1264: 0x7161, 0x1265: 0x7179, 0x1266: 0x7191, 0x1267: 0x71a9, 0x1268: 0x71c1, 0x1269: 0x1fb2, - 0x126a: 0x71d9, 0x126b: 0x7201, 0x126c: 0x7229, 0x126d: 0x7261, 0x126e: 0x7299, 0x126f: 0x72c1, - 0x1270: 0x72e9, 0x1271: 0x7311, 0x1272: 0x7339, 0x1273: 0x7361, 0x1274: 0x7389, 0x1275: 0x73b1, - 0x1276: 0x73d9, 0x1277: 0x0040, 0x1278: 0x7401, 0x1279: 0x7429, 0x127a: 0x7451, 0x127b: 0x7479, - 0x127c: 0x74a1, 0x127d: 0x0040, 0x127e: 0x74c9, 0x127f: 0x0040, - // Block 0x4a, offset 0x1280 - 0x1280: 0x74f1, 0x1281: 0x7519, 0x1282: 0x0040, 0x1283: 0x7541, 0x1284: 0x7569, 0x1285: 0x0040, - 0x1286: 0x7591, 0x1287: 0x75b9, 0x1288: 0x75e1, 0x1289: 0x7609, 0x128a: 0x7631, 0x128b: 0x7659, - 0x128c: 0x7681, 0x128d: 0x76a9, 0x128e: 0x76d1, 0x128f: 0x76f9, 0x1290: 0x7721, 0x1291: 0x7721, - 0x1292: 0x7739, 0x1293: 0x7739, 0x1294: 0x7739, 0x1295: 0x7739, 0x1296: 0x7751, 0x1297: 0x7751, - 0x1298: 0x7751, 0x1299: 0x7751, 0x129a: 0x7769, 0x129b: 0x7769, 0x129c: 0x7769, 0x129d: 0x7769, - 0x129e: 0x7781, 0x129f: 0x7781, 0x12a0: 0x7781, 0x12a1: 0x7781, 0x12a2: 0x7799, 0x12a3: 0x7799, - 0x12a4: 0x7799, 0x12a5: 0x7799, 0x12a6: 0x77b1, 0x12a7: 0x77b1, 0x12a8: 0x77b1, 0x12a9: 0x77b1, - 0x12aa: 0x77c9, 0x12ab: 0x77c9, 0x12ac: 0x77c9, 0x12ad: 0x77c9, 0x12ae: 0x77e1, 0x12af: 0x77e1, - 0x12b0: 0x77e1, 0x12b1: 0x77e1, 0x12b2: 0x77f9, 0x12b3: 0x77f9, 0x12b4: 0x77f9, 0x12b5: 0x77f9, - 0x12b6: 0x7811, 0x12b7: 0x7811, 0x12b8: 0x7811, 0x12b9: 0x7811, 0x12ba: 0x7829, 0x12bb: 0x7829, - 0x12bc: 0x7829, 0x12bd: 0x7829, 0x12be: 0x7841, 0x12bf: 0x7841, - // Block 0x4b, offset 0x12c0 - 0x12c0: 0x7841, 0x12c1: 0x7841, 0x12c2: 0x7859, 0x12c3: 0x7859, 0x12c4: 0x7871, 0x12c5: 0x7871, - 0x12c6: 0x7889, 0x12c7: 0x7889, 0x12c8: 0x78a1, 0x12c9: 0x78a1, 0x12ca: 0x78b9, 0x12cb: 0x78b9, - 0x12cc: 0x78d1, 0x12cd: 0x78d1, 0x12ce: 0x78e9, 0x12cf: 0x78e9, 0x12d0: 0x78e9, 0x12d1: 0x78e9, - 0x12d2: 0x7901, 0x12d3: 0x7901, 0x12d4: 0x7901, 0x12d5: 0x7901, 0x12d6: 0x7919, 0x12d7: 0x7919, - 0x12d8: 0x7919, 0x12d9: 0x7919, 0x12da: 0x7931, 0x12db: 0x7931, 0x12dc: 0x7931, 0x12dd: 0x7931, - 0x12de: 0x7949, 0x12df: 0x7949, 0x12e0: 0x7961, 0x12e1: 0x7961, 0x12e2: 0x7961, 0x12e3: 0x7961, - 0x12e4: 0x7979, 0x12e5: 0x7979, 0x12e6: 0x7991, 0x12e7: 0x7991, 0x12e8: 0x7991, 0x12e9: 0x7991, - 0x12ea: 0x79a9, 0x12eb: 0x79a9, 0x12ec: 0x79a9, 0x12ed: 0x79a9, 0x12ee: 0x79c1, 0x12ef: 0x79c1, - 0x12f0: 0x79d9, 0x12f1: 0x79d9, 0x12f2: 0x0018, 0x12f3: 0x0018, 0x12f4: 0x0018, 0x12f5: 0x0018, - 0x12f6: 0x0018, 0x12f7: 0x0018, 0x12f8: 0x0018, 0x12f9: 0x0018, 0x12fa: 0x0018, 0x12fb: 0x0018, - 0x12fc: 0x0018, 0x12fd: 0x0018, 0x12fe: 0x0018, 0x12ff: 0x0018, - // Block 0x4c, offset 0x1300 - 0x1300: 0x0018, 0x1301: 0x0018, 0x1302: 0x0040, 0x1303: 0x0040, 0x1304: 0x0040, 0x1305: 0x0040, - 0x1306: 0x0040, 0x1307: 0x0040, 0x1308: 0x0040, 0x1309: 0x0040, 0x130a: 0x0040, 0x130b: 0x0040, - 0x130c: 0x0040, 0x130d: 0x0040, 0x130e: 0x0040, 0x130f: 0x0040, 0x1310: 0x0040, 0x1311: 0x0040, - 0x1312: 0x0040, 0x1313: 0x79f1, 0x1314: 0x79f1, 0x1315: 0x79f1, 0x1316: 0x79f1, 0x1317: 0x7a09, - 0x1318: 0x7a09, 0x1319: 0x7a21, 0x131a: 0x7a21, 0x131b: 0x7a39, 0x131c: 0x7a39, 0x131d: 0x0479, - 0x131e: 0x7a51, 0x131f: 0x7a51, 0x1320: 0x7a69, 0x1321: 0x7a69, 0x1322: 0x7a81, 0x1323: 0x7a81, - 0x1324: 0x7a99, 0x1325: 0x7a99, 0x1326: 0x7a99, 0x1327: 0x7a99, 0x1328: 0x7ab1, 0x1329: 0x7ab1, - 0x132a: 0x7ac9, 0x132b: 0x7ac9, 0x132c: 0x7af1, 0x132d: 0x7af1, 0x132e: 0x7b19, 0x132f: 0x7b19, - 0x1330: 0x7b41, 0x1331: 0x7b41, 0x1332: 0x7b69, 0x1333: 0x7b69, 0x1334: 0x7b91, 0x1335: 0x7b91, - 0x1336: 0x7bb9, 0x1337: 0x7bb9, 0x1338: 0x7bb9, 0x1339: 0x7be1, 0x133a: 0x7be1, 0x133b: 0x7be1, - 0x133c: 0x7c09, 0x133d: 0x7c09, 0x133e: 0x7c09, 0x133f: 0x7c09, - // Block 0x4d, offset 0x1340 - 0x1340: 0x85f9, 0x1341: 0x8621, 0x1342: 0x8649, 0x1343: 0x8671, 0x1344: 0x8699, 0x1345: 0x86c1, - 0x1346: 0x86e9, 0x1347: 0x8711, 0x1348: 0x8739, 0x1349: 0x8761, 0x134a: 0x8789, 0x134b: 0x87b1, - 0x134c: 0x87d9, 0x134d: 0x8801, 0x134e: 0x8829, 0x134f: 0x8851, 0x1350: 0x8879, 0x1351: 0x88a1, - 0x1352: 0x88c9, 0x1353: 0x88f1, 0x1354: 0x8919, 0x1355: 0x8941, 0x1356: 0x8969, 0x1357: 0x8991, - 0x1358: 0x89b9, 0x1359: 0x89e1, 0x135a: 0x8a09, 0x135b: 0x8a31, 0x135c: 0x8a59, 0x135d: 0x8a81, - 0x135e: 0x8aaa, 0x135f: 0x8ada, 0x1360: 0x8b0a, 0x1361: 0x8b3a, 0x1362: 0x8b6a, 0x1363: 0x8b9a, - 0x1364: 0x8bc9, 0x1365: 0x8bf1, 0x1366: 0x7c71, 0x1367: 0x8c19, 0x1368: 0x7be1, 0x1369: 0x7c99, - 0x136a: 0x8c41, 0x136b: 0x8c69, 0x136c: 0x7d39, 0x136d: 0x8c91, 0x136e: 0x7d61, 0x136f: 0x7d89, - 0x1370: 0x8cb9, 0x1371: 0x8ce1, 0x1372: 0x7e29, 0x1373: 0x8d09, 0x1374: 0x7e51, 0x1375: 0x7e79, - 0x1376: 0x8d31, 0x1377: 0x8d59, 0x1378: 0x7ec9, 0x1379: 0x8d81, 0x137a: 0x7ef1, 0x137b: 0x7f19, - 0x137c: 0x83a1, 0x137d: 0x83c9, 0x137e: 0x8441, 0x137f: 0x8469, - // Block 0x4e, offset 0x1380 - 0x1380: 0x8491, 0x1381: 0x8531, 0x1382: 0x8559, 0x1383: 0x8581, 0x1384: 0x85a9, 0x1385: 0x8649, - 0x1386: 0x8671, 0x1387: 0x8699, 0x1388: 0x8da9, 0x1389: 0x8739, 0x138a: 0x8dd1, 0x138b: 0x8df9, - 0x138c: 0x8829, 0x138d: 0x8e21, 0x138e: 0x8851, 0x138f: 0x8879, 0x1390: 0x8a81, 0x1391: 0x8e49, - 0x1392: 0x8e71, 0x1393: 0x89b9, 0x1394: 0x8e99, 0x1395: 0x89e1, 0x1396: 0x8a09, 0x1397: 0x7c21, - 0x1398: 0x7c49, 0x1399: 0x8ec1, 0x139a: 0x7c71, 0x139b: 0x8ee9, 0x139c: 0x7cc1, 0x139d: 0x7ce9, - 0x139e: 0x7d11, 0x139f: 0x7d39, 0x13a0: 0x8f11, 0x13a1: 0x7db1, 0x13a2: 0x7dd9, 0x13a3: 0x7e01, - 0x13a4: 0x7e29, 0x13a5: 0x8f39, 0x13a6: 0x7ec9, 0x13a7: 0x7f41, 0x13a8: 0x7f69, 0x13a9: 0x7f91, - 0x13aa: 0x7fb9, 0x13ab: 0x7fe1, 0x13ac: 0x8031, 0x13ad: 0x8059, 0x13ae: 0x8081, 0x13af: 0x80a9, - 0x13b0: 0x80d1, 0x13b1: 0x80f9, 0x13b2: 0x8f61, 0x13b3: 0x8121, 0x13b4: 0x8149, 0x13b5: 0x8171, - 0x13b6: 0x8199, 0x13b7: 0x81c1, 0x13b8: 0x81e9, 0x13b9: 0x8239, 0x13ba: 0x8261, 0x13bb: 0x8289, - 0x13bc: 0x82b1, 0x13bd: 0x82d9, 0x13be: 0x8301, 0x13bf: 0x8329, - // Block 0x4f, offset 0x13c0 - 0x13c0: 0x8351, 0x13c1: 0x8379, 0x13c2: 0x83f1, 0x13c3: 0x8419, 0x13c4: 0x84b9, 0x13c5: 0x84e1, - 0x13c6: 0x8509, 0x13c7: 0x8531, 0x13c8: 0x8559, 0x13c9: 0x85d1, 0x13ca: 0x85f9, 0x13cb: 0x8621, - 0x13cc: 0x8649, 0x13cd: 0x8f89, 0x13ce: 0x86c1, 0x13cf: 0x86e9, 0x13d0: 0x8711, 0x13d1: 0x8739, - 0x13d2: 0x87b1, 0x13d3: 0x87d9, 0x13d4: 0x8801, 0x13d5: 0x8829, 0x13d6: 0x8fb1, 0x13d7: 0x88a1, - 0x13d8: 0x88c9, 0x13d9: 0x8fd9, 0x13da: 0x8941, 0x13db: 0x8969, 0x13dc: 0x8991, 0x13dd: 0x89b9, - 0x13de: 0x9001, 0x13df: 0x7c71, 0x13e0: 0x8ee9, 0x13e1: 0x7d39, 0x13e2: 0x8f11, 0x13e3: 0x7e29, - 0x13e4: 0x8f39, 0x13e5: 0x7ec9, 0x13e6: 0x9029, 0x13e7: 0x80d1, 0x13e8: 0x9051, 0x13e9: 0x9079, - 0x13ea: 0x90a1, 0x13eb: 0x8531, 0x13ec: 0x8559, 0x13ed: 0x8649, 0x13ee: 0x8829, 0x13ef: 0x8fb1, - 0x13f0: 0x89b9, 0x13f1: 0x9001, 0x13f2: 0x90c9, 0x13f3: 0x9101, 0x13f4: 0x9139, 0x13f5: 0x9171, - 0x13f6: 0x9199, 0x13f7: 0x91c1, 0x13f8: 0x91e9, 0x13f9: 0x9211, 0x13fa: 0x9239, 0x13fb: 0x9261, - 0x13fc: 0x9289, 0x13fd: 0x92b1, 0x13fe: 0x92d9, 0x13ff: 0x9301, - // Block 0x50, offset 0x1400 - 0x1400: 0x9329, 0x1401: 0x9351, 0x1402: 0x9379, 0x1403: 0x93a1, 0x1404: 0x93c9, 0x1405: 0x93f1, - 0x1406: 0x9419, 0x1407: 0x9441, 0x1408: 0x9469, 0x1409: 0x9491, 0x140a: 0x94b9, 0x140b: 0x94e1, - 0x140c: 0x9079, 0x140d: 0x9509, 0x140e: 0x9531, 0x140f: 0x9559, 0x1410: 0x9581, 0x1411: 0x9171, - 0x1412: 0x9199, 0x1413: 0x91c1, 0x1414: 0x91e9, 0x1415: 0x9211, 0x1416: 0x9239, 0x1417: 0x9261, - 0x1418: 0x9289, 0x1419: 0x92b1, 0x141a: 0x92d9, 0x141b: 0x9301, 0x141c: 0x9329, 0x141d: 0x9351, - 0x141e: 0x9379, 0x141f: 0x93a1, 0x1420: 0x93c9, 0x1421: 0x93f1, 0x1422: 0x9419, 0x1423: 0x9441, - 0x1424: 0x9469, 0x1425: 0x9491, 0x1426: 0x94b9, 0x1427: 0x94e1, 0x1428: 0x9079, 0x1429: 0x9509, - 0x142a: 0x9531, 0x142b: 0x9559, 0x142c: 0x9581, 0x142d: 0x9491, 0x142e: 0x94b9, 0x142f: 0x94e1, - 0x1430: 0x9079, 0x1431: 0x9051, 0x1432: 0x90a1, 0x1433: 0x8211, 0x1434: 0x8059, 0x1435: 0x8081, - 0x1436: 0x80a9, 0x1437: 0x9491, 0x1438: 0x94b9, 0x1439: 0x94e1, 0x143a: 0x8211, 0x143b: 0x8239, - 0x143c: 0x95a9, 0x143d: 0x95a9, 0x143e: 0x0018, 0x143f: 0x0018, - // Block 0x51, offset 0x1440 - 0x1440: 0x0040, 0x1441: 0x0040, 0x1442: 0x0040, 0x1443: 0x0040, 0x1444: 0x0040, 0x1445: 0x0040, - 0x1446: 0x0040, 0x1447: 0x0040, 0x1448: 0x0040, 0x1449: 0x0040, 0x144a: 0x0040, 0x144b: 0x0040, - 0x144c: 0x0040, 0x144d: 0x0040, 0x144e: 0x0040, 0x144f: 0x0040, 0x1450: 0x95d1, 0x1451: 0x9609, - 0x1452: 0x9609, 0x1453: 0x9641, 0x1454: 0x9679, 0x1455: 0x96b1, 0x1456: 0x96e9, 0x1457: 0x9721, - 0x1458: 0x9759, 0x1459: 0x9759, 0x145a: 0x9791, 0x145b: 0x97c9, 0x145c: 0x9801, 0x145d: 0x9839, - 0x145e: 0x9871, 0x145f: 0x98a9, 0x1460: 0x98a9, 0x1461: 0x98e1, 0x1462: 0x9919, 0x1463: 0x9919, - 0x1464: 0x9951, 0x1465: 0x9951, 0x1466: 0x9989, 0x1467: 0x99c1, 0x1468: 0x99c1, 0x1469: 0x99f9, - 0x146a: 0x9a31, 0x146b: 0x9a31, 0x146c: 0x9a69, 0x146d: 0x9a69, 0x146e: 0x9aa1, 0x146f: 0x9ad9, - 0x1470: 0x9ad9, 0x1471: 0x9b11, 0x1472: 0x9b11, 0x1473: 0x9b49, 0x1474: 0x9b81, 0x1475: 0x9bb9, - 0x1476: 0x9bf1, 0x1477: 0x9bf1, 0x1478: 0x9c29, 0x1479: 0x9c61, 0x147a: 0x9c99, 0x147b: 0x9cd1, - 0x147c: 0x9d09, 0x147d: 0x9d09, 0x147e: 0x9d41, 0x147f: 0x9d79, - // Block 0x52, offset 0x1480 - 0x1480: 0xa949, 0x1481: 0xa981, 0x1482: 0xa9b9, 0x1483: 0xa8a1, 0x1484: 0x9bb9, 0x1485: 0x9989, - 0x1486: 0xa9f1, 0x1487: 0xaa29, 0x1488: 0x0040, 0x1489: 0x0040, 0x148a: 0x0040, 0x148b: 0x0040, - 0x148c: 0x0040, 0x148d: 0x0040, 0x148e: 0x0040, 0x148f: 0x0040, 0x1490: 0x0040, 0x1491: 0x0040, - 0x1492: 0x0040, 0x1493: 0x0040, 0x1494: 0x0040, 0x1495: 0x0040, 0x1496: 0x0040, 0x1497: 0x0040, - 0x1498: 0x0040, 0x1499: 0x0040, 0x149a: 0x0040, 0x149b: 0x0040, 0x149c: 0x0040, 0x149d: 0x0040, - 0x149e: 0x0040, 0x149f: 0x0040, 0x14a0: 0x0040, 0x14a1: 0x0040, 0x14a2: 0x0040, 0x14a3: 0x0040, - 0x14a4: 0x0040, 0x14a5: 0x0040, 0x14a6: 0x0040, 0x14a7: 0x0040, 0x14a8: 0x0040, 0x14a9: 0x0040, - 0x14aa: 0x0040, 0x14ab: 0x0040, 0x14ac: 0x0040, 0x14ad: 0x0040, 0x14ae: 0x0040, 0x14af: 0x0040, - 0x14b0: 0xaa61, 0x14b1: 0xaa99, 0x14b2: 0xaad1, 0x14b3: 0xab19, 0x14b4: 0xab61, 0x14b5: 0xaba9, - 0x14b6: 0xabf1, 0x14b7: 0xac39, 0x14b8: 0xac81, 0x14b9: 0xacc9, 0x14ba: 0xad02, 0x14bb: 0xae12, - 0x14bc: 0xae91, 0x14bd: 0x0018, 0x14be: 0x0040, 0x14bf: 0x0040, - // Block 0x53, offset 0x14c0 - 0x14c0: 0x13c0, 0x14c1: 0x13c0, 0x14c2: 0x13c0, 0x14c3: 0x13c0, 0x14c4: 0x13c0, 0x14c5: 0x13c0, - 0x14c6: 0x13c0, 0x14c7: 0x13c0, 0x14c8: 0x13c0, 0x14c9: 0x13c0, 0x14ca: 0x13c0, 0x14cb: 0x13c0, - 0x14cc: 0x13c0, 0x14cd: 0x13c0, 0x14ce: 0x13c0, 0x14cf: 0x13c0, 0x14d0: 0xaeda, 0x14d1: 0x7d55, - 0x14d2: 0x0040, 0x14d3: 0xaeea, 0x14d4: 0x03c2, 0x14d5: 0xaefa, 0x14d6: 0xaf0a, 0x14d7: 0x7d75, - 0x14d8: 0x7d95, 0x14d9: 0x0040, 0x14da: 0x0040, 0x14db: 0x0040, 0x14dc: 0x0040, 0x14dd: 0x0040, - 0x14de: 0x0040, 0x14df: 0x0040, 0x14e0: 0x1308, 0x14e1: 0x1308, 0x14e2: 0x1308, 0x14e3: 0x1308, - 0x14e4: 0x1308, 0x14e5: 0x1308, 0x14e6: 0x1308, 0x14e7: 0x1308, 0x14e8: 0x1308, 0x14e9: 0x1308, - 0x14ea: 0x1308, 0x14eb: 0x1308, 0x14ec: 0x1308, 0x14ed: 0x1308, 0x14ee: 0x1308, 0x14ef: 0x1308, - 0x14f0: 0x0040, 0x14f1: 0x7db5, 0x14f2: 0x7dd5, 0x14f3: 0xaf1a, 0x14f4: 0xaf1a, 0x14f5: 0x1fd2, - 0x14f6: 0x1fe2, 0x14f7: 0xaf2a, 0x14f8: 0xaf3a, 0x14f9: 0x7df5, 0x14fa: 0x7e15, 0x14fb: 0x7e35, - 0x14fc: 0x7df5, 0x14fd: 0x7e55, 0x14fe: 0x7e75, 0x14ff: 0x7e55, - // Block 0x54, offset 0x1500 - 0x1500: 0x7e95, 0x1501: 0x7eb5, 0x1502: 0x7ed5, 0x1503: 0x7eb5, 0x1504: 0x7ef5, 0x1505: 0x0018, - 0x1506: 0x0018, 0x1507: 0xaf4a, 0x1508: 0xaf5a, 0x1509: 0x7f16, 0x150a: 0x7f36, 0x150b: 0x7f56, - 0x150c: 0x7f76, 0x150d: 0xaf1a, 0x150e: 0xaf1a, 0x150f: 0xaf1a, 0x1510: 0xaeda, 0x1511: 0x7f95, - 0x1512: 0x0040, 0x1513: 0x0040, 0x1514: 0x03c2, 0x1515: 0xaeea, 0x1516: 0xaf0a, 0x1517: 0xaefa, - 0x1518: 0x7fb5, 0x1519: 0x1fd2, 0x151a: 0x1fe2, 0x151b: 0xaf2a, 0x151c: 0xaf3a, 0x151d: 0x7e95, - 0x151e: 0x7ef5, 0x151f: 0xaf6a, 0x1520: 0xaf7a, 0x1521: 0xaf8a, 0x1522: 0x1fb2, 0x1523: 0xaf99, - 0x1524: 0xafaa, 0x1525: 0xafba, 0x1526: 0x1fc2, 0x1527: 0x0040, 0x1528: 0xafca, 0x1529: 0xafda, - 0x152a: 0xafea, 0x152b: 0xaffa, 0x152c: 0x0040, 0x152d: 0x0040, 0x152e: 0x0040, 0x152f: 0x0040, - 0x1530: 0x7fd6, 0x1531: 0xb009, 0x1532: 0x7ff6, 0x1533: 0x0008, 0x1534: 0x8016, 0x1535: 0x0040, - 0x1536: 0x8036, 0x1537: 0xb031, 0x1538: 0x8056, 0x1539: 0xb059, 0x153a: 0x8076, 0x153b: 0xb081, - 0x153c: 0x8096, 0x153d: 0xb0a9, 0x153e: 0x80b6, 0x153f: 0xb0d1, - // Block 0x55, offset 0x1540 - 0x1540: 0xb0f9, 0x1541: 0xb111, 0x1542: 0xb111, 0x1543: 0xb129, 0x1544: 0xb129, 0x1545: 0xb141, - 0x1546: 0xb141, 0x1547: 0xb159, 0x1548: 0xb159, 0x1549: 0xb171, 0x154a: 0xb171, 0x154b: 0xb171, - 0x154c: 0xb171, 0x154d: 0xb189, 0x154e: 0xb189, 0x154f: 0xb1a1, 0x1550: 0xb1a1, 0x1551: 0xb1a1, - 0x1552: 0xb1a1, 0x1553: 0xb1b9, 0x1554: 0xb1b9, 0x1555: 0xb1d1, 0x1556: 0xb1d1, 0x1557: 0xb1d1, - 0x1558: 0xb1d1, 0x1559: 0xb1e9, 0x155a: 0xb1e9, 0x155b: 0xb1e9, 0x155c: 0xb1e9, 0x155d: 0xb201, - 0x155e: 0xb201, 0x155f: 0xb201, 0x1560: 0xb201, 0x1561: 0xb219, 0x1562: 0xb219, 0x1563: 0xb219, - 0x1564: 0xb219, 0x1565: 0xb231, 0x1566: 0xb231, 0x1567: 0xb231, 0x1568: 0xb231, 0x1569: 0xb249, - 0x156a: 0xb249, 0x156b: 0xb261, 0x156c: 0xb261, 0x156d: 0xb279, 0x156e: 0xb279, 0x156f: 0xb291, - 0x1570: 0xb291, 0x1571: 0xb2a9, 0x1572: 0xb2a9, 0x1573: 0xb2a9, 0x1574: 0xb2a9, 0x1575: 0xb2c1, - 0x1576: 0xb2c1, 0x1577: 0xb2c1, 0x1578: 0xb2c1, 0x1579: 0xb2d9, 0x157a: 0xb2d9, 0x157b: 0xb2d9, - 0x157c: 0xb2d9, 0x157d: 0xb2f1, 0x157e: 0xb2f1, 0x157f: 0xb2f1, - // Block 0x56, offset 0x1580 - 0x1580: 0xb2f1, 0x1581: 0xb309, 0x1582: 0xb309, 0x1583: 0xb309, 0x1584: 0xb309, 0x1585: 0xb321, - 0x1586: 0xb321, 0x1587: 0xb321, 0x1588: 0xb321, 0x1589: 0xb339, 0x158a: 0xb339, 0x158b: 0xb339, - 0x158c: 0xb339, 0x158d: 0xb351, 0x158e: 0xb351, 0x158f: 0xb351, 0x1590: 0xb351, 0x1591: 0xb369, - 0x1592: 0xb369, 0x1593: 0xb369, 0x1594: 0xb369, 0x1595: 0xb381, 0x1596: 0xb381, 0x1597: 0xb381, - 0x1598: 0xb381, 0x1599: 0xb399, 0x159a: 0xb399, 0x159b: 0xb399, 0x159c: 0xb399, 0x159d: 0xb3b1, - 0x159e: 0xb3b1, 0x159f: 0xb3b1, 0x15a0: 0xb3b1, 0x15a1: 0xb3c9, 0x15a2: 0xb3c9, 0x15a3: 0xb3c9, - 0x15a4: 0xb3c9, 0x15a5: 0xb3e1, 0x15a6: 0xb3e1, 0x15a7: 0xb3e1, 0x15a8: 0xb3e1, 0x15a9: 0xb3f9, - 0x15aa: 0xb3f9, 0x15ab: 0xb3f9, 0x15ac: 0xb3f9, 0x15ad: 0xb411, 0x15ae: 0xb411, 0x15af: 0x7ab1, - 0x15b0: 0x7ab1, 0x15b1: 0xb429, 0x15b2: 0xb429, 0x15b3: 0xb429, 0x15b4: 0xb429, 0x15b5: 0xb441, - 0x15b6: 0xb441, 0x15b7: 0xb469, 0x15b8: 0xb469, 0x15b9: 0xb491, 0x15ba: 0xb491, 0x15bb: 0xb4b9, - 0x15bc: 0xb4b9, 0x15bd: 0x0040, 0x15be: 0x0040, 0x15bf: 0x03c0, - // Block 0x57, offset 0x15c0 - 0x15c0: 0x0040, 0x15c1: 0xaefa, 0x15c2: 0xb4e2, 0x15c3: 0xaf6a, 0x15c4: 0xafda, 0x15c5: 0xafea, - 0x15c6: 0xaf7a, 0x15c7: 0xb4f2, 0x15c8: 0x1fd2, 0x15c9: 0x1fe2, 0x15ca: 0xaf8a, 0x15cb: 0x1fb2, - 0x15cc: 0xaeda, 0x15cd: 0xaf99, 0x15ce: 0x29d1, 0x15cf: 0xb502, 0x15d0: 0x1f41, 0x15d1: 0x00c9, - 0x15d2: 0x0069, 0x15d3: 0x0079, 0x15d4: 0x1f51, 0x15d5: 0x1f61, 0x15d6: 0x1f71, 0x15d7: 0x1f81, - 0x15d8: 0x1f91, 0x15d9: 0x1fa1, 0x15da: 0xaeea, 0x15db: 0x03c2, 0x15dc: 0xafaa, 0x15dd: 0x1fc2, - 0x15de: 0xafba, 0x15df: 0xaf0a, 0x15e0: 0xaffa, 0x15e1: 0x0039, 0x15e2: 0x0ee9, 0x15e3: 0x1159, - 0x15e4: 0x0ef9, 0x15e5: 0x0f09, 0x15e6: 0x1199, 0x15e7: 0x0f31, 0x15e8: 0x0249, 0x15e9: 0x0f41, - 0x15ea: 0x0259, 0x15eb: 0x0f51, 0x15ec: 0x0359, 0x15ed: 0x0f61, 0x15ee: 0x0f71, 0x15ef: 0x00d9, - 0x15f0: 0x0f99, 0x15f1: 0x2039, 0x15f2: 0x0269, 0x15f3: 0x01d9, 0x15f4: 0x0fa9, 0x15f5: 0x0fb9, - 0x15f6: 0x1089, 0x15f7: 0x0279, 0x15f8: 0x0369, 0x15f9: 0x0289, 0x15fa: 0x13d1, 0x15fb: 0xaf4a, - 0x15fc: 0xafca, 0x15fd: 0xaf5a, 0x15fe: 0xb512, 0x15ff: 0xaf1a, - // Block 0x58, offset 0x1600 - 0x1600: 0x1caa, 0x1601: 0x0039, 0x1602: 0x0ee9, 0x1603: 0x1159, 0x1604: 0x0ef9, 0x1605: 0x0f09, - 0x1606: 0x1199, 0x1607: 0x0f31, 0x1608: 0x0249, 0x1609: 0x0f41, 0x160a: 0x0259, 0x160b: 0x0f51, - 0x160c: 0x0359, 0x160d: 0x0f61, 0x160e: 0x0f71, 0x160f: 0x00d9, 0x1610: 0x0f99, 0x1611: 0x2039, - 0x1612: 0x0269, 0x1613: 0x01d9, 0x1614: 0x0fa9, 0x1615: 0x0fb9, 0x1616: 0x1089, 0x1617: 0x0279, - 0x1618: 0x0369, 0x1619: 0x0289, 0x161a: 0x13d1, 0x161b: 0xaf2a, 0x161c: 0xb522, 0x161d: 0xaf3a, - 0x161e: 0xb532, 0x161f: 0x80d5, 0x1620: 0x80f5, 0x1621: 0x29d1, 0x1622: 0x8115, 0x1623: 0x8115, - 0x1624: 0x8135, 0x1625: 0x8155, 0x1626: 0x8175, 0x1627: 0x8195, 0x1628: 0x81b5, 0x1629: 0x81d5, - 0x162a: 0x81f5, 0x162b: 0x8215, 0x162c: 0x8235, 0x162d: 0x8255, 0x162e: 0x8275, 0x162f: 0x8295, - 0x1630: 0x82b5, 0x1631: 0x82d5, 0x1632: 0x82f5, 0x1633: 0x8315, 0x1634: 0x8335, 0x1635: 0x8355, - 0x1636: 0x8375, 0x1637: 0x8395, 0x1638: 0x83b5, 0x1639: 0x83d5, 0x163a: 0x83f5, 0x163b: 0x8415, - 0x163c: 0x81b5, 0x163d: 0x8435, 0x163e: 0x8455, 0x163f: 0x8215, - // Block 0x59, offset 0x1640 - 0x1640: 0x8475, 0x1641: 0x8495, 0x1642: 0x84b5, 0x1643: 0x84d5, 0x1644: 0x84f5, 0x1645: 0x8515, - 0x1646: 0x8535, 0x1647: 0x8555, 0x1648: 0x84d5, 0x1649: 0x8575, 0x164a: 0x84d5, 0x164b: 0x8595, - 0x164c: 0x8595, 0x164d: 0x85b5, 0x164e: 0x85b5, 0x164f: 0x85d5, 0x1650: 0x8515, 0x1651: 0x85f5, - 0x1652: 0x8615, 0x1653: 0x85f5, 0x1654: 0x8635, 0x1655: 0x8615, 0x1656: 0x8655, 0x1657: 0x8655, - 0x1658: 0x8675, 0x1659: 0x8675, 0x165a: 0x8695, 0x165b: 0x8695, 0x165c: 0x8615, 0x165d: 0x8115, - 0x165e: 0x86b5, 0x165f: 0x86d5, 0x1660: 0x0040, 0x1661: 0x86f5, 0x1662: 0x8715, 0x1663: 0x8735, - 0x1664: 0x8755, 0x1665: 0x8735, 0x1666: 0x8775, 0x1667: 0x8795, 0x1668: 0x87b5, 0x1669: 0x87b5, - 0x166a: 0x87d5, 0x166b: 0x87d5, 0x166c: 0x87f5, 0x166d: 0x87f5, 0x166e: 0x87d5, 0x166f: 0x87d5, - 0x1670: 0x8815, 0x1671: 0x8835, 0x1672: 0x8855, 0x1673: 0x8875, 0x1674: 0x8895, 0x1675: 0x88b5, - 0x1676: 0x88b5, 0x1677: 0x88b5, 0x1678: 0x88d5, 0x1679: 0x88d5, 0x167a: 0x88d5, 0x167b: 0x88d5, - 0x167c: 0x87b5, 0x167d: 0x87b5, 0x167e: 0x87b5, 0x167f: 0x0040, - // Block 0x5a, offset 0x1680 - 0x1680: 0x0040, 0x1681: 0x0040, 0x1682: 0x8715, 0x1683: 0x86f5, 0x1684: 0x88f5, 0x1685: 0x86f5, - 0x1686: 0x8715, 0x1687: 0x86f5, 0x1688: 0x0040, 0x1689: 0x0040, 0x168a: 0x8915, 0x168b: 0x8715, - 0x168c: 0x8935, 0x168d: 0x88f5, 0x168e: 0x8935, 0x168f: 0x8715, 0x1690: 0x0040, 0x1691: 0x0040, - 0x1692: 0x8955, 0x1693: 0x8975, 0x1694: 0x8875, 0x1695: 0x8935, 0x1696: 0x88f5, 0x1697: 0x8935, - 0x1698: 0x0040, 0x1699: 0x0040, 0x169a: 0x8995, 0x169b: 0x89b5, 0x169c: 0x8995, 0x169d: 0x0040, - 0x169e: 0x0040, 0x169f: 0x0040, 0x16a0: 0xb541, 0x16a1: 0xb559, 0x16a2: 0xb571, 0x16a3: 0x89d6, - 0x16a4: 0xb589, 0x16a5: 0xb5a1, 0x16a6: 0x89f5, 0x16a7: 0x0040, 0x16a8: 0x8a15, 0x16a9: 0x8a35, - 0x16aa: 0x8a55, 0x16ab: 0x8a35, 0x16ac: 0x8a75, 0x16ad: 0x8a95, 0x16ae: 0x8ab5, 0x16af: 0x0040, - 0x16b0: 0x0040, 0x16b1: 0x0040, 0x16b2: 0x0040, 0x16b3: 0x0040, 0x16b4: 0x0040, 0x16b5: 0x0040, - 0x16b6: 0x0040, 0x16b7: 0x0040, 0x16b8: 0x0040, 0x16b9: 0x0340, 0x16ba: 0x0340, 0x16bb: 0x0340, - 0x16bc: 0x0040, 0x16bd: 0x0040, 0x16be: 0x0040, 0x16bf: 0x0040, - // Block 0x5b, offset 0x16c0 - 0x16c0: 0x0208, 0x16c1: 0x0208, 0x16c2: 0x0208, 0x16c3: 0x0208, 0x16c4: 0x0208, 0x16c5: 0x0408, - 0x16c6: 0x0008, 0x16c7: 0x0408, 0x16c8: 0x0018, 0x16c9: 0x0408, 0x16ca: 0x0408, 0x16cb: 0x0008, - 0x16cc: 0x0008, 0x16cd: 0x0108, 0x16ce: 0x0408, 0x16cf: 0x0408, 0x16d0: 0x0408, 0x16d1: 0x0408, - 0x16d2: 0x0408, 0x16d3: 0x0208, 0x16d4: 0x0208, 0x16d5: 0x0208, 0x16d6: 0x0208, 0x16d7: 0x0108, - 0x16d8: 0x0208, 0x16d9: 0x0208, 0x16da: 0x0208, 0x16db: 0x0208, 0x16dc: 0x0208, 0x16dd: 0x0408, - 0x16de: 0x0208, 0x16df: 0x0208, 0x16e0: 0x0208, 0x16e1: 0x0408, 0x16e2: 0x0008, 0x16e3: 0x0008, - 0x16e4: 0x0408, 0x16e5: 0x1308, 0x16e6: 0x1308, 0x16e7: 0x0040, 0x16e8: 0x0040, 0x16e9: 0x0040, - 0x16ea: 0x0040, 0x16eb: 0x0218, 0x16ec: 0x0218, 0x16ed: 0x0218, 0x16ee: 0x0218, 0x16ef: 0x0418, - 0x16f0: 0x0018, 0x16f1: 0x0018, 0x16f2: 0x0018, 0x16f3: 0x0018, 0x16f4: 0x0018, 0x16f5: 0x0018, - 0x16f6: 0x0018, 0x16f7: 0x0040, 0x16f8: 0x0040, 0x16f9: 0x0040, 0x16fa: 0x0040, 0x16fb: 0x0040, - 0x16fc: 0x0040, 0x16fd: 0x0040, 0x16fe: 0x0040, 0x16ff: 0x0040, - // Block 0x5c, offset 0x1700 - 0x1700: 0x0208, 0x1701: 0x0408, 0x1702: 0x0208, 0x1703: 0x0408, 0x1704: 0x0408, 0x1705: 0x0408, - 0x1706: 0x0208, 0x1707: 0x0208, 0x1708: 0x0208, 0x1709: 0x0408, 0x170a: 0x0208, 0x170b: 0x0208, - 0x170c: 0x0408, 0x170d: 0x0208, 0x170e: 0x0408, 0x170f: 0x0408, 0x1710: 0x0208, 0x1711: 0x0408, - 0x1712: 0x0040, 0x1713: 0x0040, 0x1714: 0x0040, 0x1715: 0x0040, 0x1716: 0x0040, 0x1717: 0x0040, - 0x1718: 0x0040, 0x1719: 0x0018, 0x171a: 0x0018, 0x171b: 0x0018, 0x171c: 0x0018, 0x171d: 0x0040, - 0x171e: 0x0040, 0x171f: 0x0040, 0x1720: 0x0040, 0x1721: 0x0040, 0x1722: 0x0040, 0x1723: 0x0040, - 0x1724: 0x0040, 0x1725: 0x0040, 0x1726: 0x0040, 0x1727: 0x0040, 0x1728: 0x0040, 0x1729: 0x0418, - 0x172a: 0x0418, 0x172b: 0x0418, 0x172c: 0x0418, 0x172d: 0x0218, 0x172e: 0x0218, 0x172f: 0x0018, - 0x1730: 0x0040, 0x1731: 0x0040, 0x1732: 0x0040, 0x1733: 0x0040, 0x1734: 0x0040, 0x1735: 0x0040, - 0x1736: 0x0040, 0x1737: 0x0040, 0x1738: 0x0040, 0x1739: 0x0040, 0x173a: 0x0040, 0x173b: 0x0040, - 0x173c: 0x0040, 0x173d: 0x0040, 0x173e: 0x0040, 0x173f: 0x0040, - // Block 0x5d, offset 0x1740 - 0x1740: 0x1308, 0x1741: 0x1308, 0x1742: 0x1008, 0x1743: 0x1008, 0x1744: 0x0040, 0x1745: 0x0008, - 0x1746: 0x0008, 0x1747: 0x0008, 0x1748: 0x0008, 0x1749: 0x0008, 0x174a: 0x0008, 0x174b: 0x0008, - 0x174c: 0x0008, 0x174d: 0x0040, 0x174e: 0x0040, 0x174f: 0x0008, 0x1750: 0x0008, 0x1751: 0x0040, - 0x1752: 0x0040, 0x1753: 0x0008, 0x1754: 0x0008, 0x1755: 0x0008, 0x1756: 0x0008, 0x1757: 0x0008, - 0x1758: 0x0008, 0x1759: 0x0008, 0x175a: 0x0008, 0x175b: 0x0008, 0x175c: 0x0008, 0x175d: 0x0008, - 0x175e: 0x0008, 0x175f: 0x0008, 0x1760: 0x0008, 0x1761: 0x0008, 0x1762: 0x0008, 0x1763: 0x0008, - 0x1764: 0x0008, 0x1765: 0x0008, 0x1766: 0x0008, 0x1767: 0x0008, 0x1768: 0x0008, 0x1769: 0x0040, - 0x176a: 0x0008, 0x176b: 0x0008, 0x176c: 0x0008, 0x176d: 0x0008, 0x176e: 0x0008, 0x176f: 0x0008, - 0x1770: 0x0008, 0x1771: 0x0040, 0x1772: 0x0008, 0x1773: 0x0008, 0x1774: 0x0040, 0x1775: 0x0008, - 0x1776: 0x0008, 0x1777: 0x0008, 0x1778: 0x0008, 0x1779: 0x0008, 0x177a: 0x0040, 0x177b: 0x0040, - 0x177c: 0x1308, 0x177d: 0x0008, 0x177e: 0x1008, 0x177f: 0x1008, - // Block 0x5e, offset 0x1780 - 0x1780: 0x1308, 0x1781: 0x1008, 0x1782: 0x1008, 0x1783: 0x1008, 0x1784: 0x1008, 0x1785: 0x0040, - 0x1786: 0x0040, 0x1787: 0x1008, 0x1788: 0x1008, 0x1789: 0x0040, 0x178a: 0x0040, 0x178b: 0x1008, - 0x178c: 0x1008, 0x178d: 0x1808, 0x178e: 0x0040, 0x178f: 0x0040, 0x1790: 0x0008, 0x1791: 0x0040, - 0x1792: 0x0040, 0x1793: 0x0040, 0x1794: 0x0040, 0x1795: 0x0040, 0x1796: 0x0040, 0x1797: 0x1008, - 0x1798: 0x0040, 0x1799: 0x0040, 0x179a: 0x0040, 0x179b: 0x0040, 0x179c: 0x0040, 0x179d: 0x0008, - 0x179e: 0x0008, 0x179f: 0x0008, 0x17a0: 0x0008, 0x17a1: 0x0008, 0x17a2: 0x1008, 0x17a3: 0x1008, - 0x17a4: 0x0040, 0x17a5: 0x0040, 0x17a6: 0x1308, 0x17a7: 0x1308, 0x17a8: 0x1308, 0x17a9: 0x1308, - 0x17aa: 0x1308, 0x17ab: 0x1308, 0x17ac: 0x1308, 0x17ad: 0x0040, 0x17ae: 0x0040, 0x17af: 0x0040, - 0x17b0: 0x1308, 0x17b1: 0x1308, 0x17b2: 0x1308, 0x17b3: 0x1308, 0x17b4: 0x1308, 0x17b5: 0x0040, - 0x17b6: 0x0040, 0x17b7: 0x0040, 0x17b8: 0x0040, 0x17b9: 0x0040, 0x17ba: 0x0040, 0x17bb: 0x0040, - 0x17bc: 0x0040, 0x17bd: 0x0040, 0x17be: 0x0040, 0x17bf: 0x0040, - // Block 0x5f, offset 0x17c0 - 0x17c0: 0x0039, 0x17c1: 0x0ee9, 0x17c2: 0x1159, 0x17c3: 0x0ef9, 0x17c4: 0x0f09, 0x17c5: 0x1199, - 0x17c6: 0x0f31, 0x17c7: 0x0249, 0x17c8: 0x0f41, 0x17c9: 0x0259, 0x17ca: 0x0f51, 0x17cb: 0x0359, - 0x17cc: 0x0f61, 0x17cd: 0x0f71, 0x17ce: 0x00d9, 0x17cf: 0x0f99, 0x17d0: 0x2039, 0x17d1: 0x0269, - 0x17d2: 0x01d9, 0x17d3: 0x0fa9, 0x17d4: 0x0fb9, 0x17d5: 0x1089, 0x17d6: 0x0279, 0x17d7: 0x0369, - 0x17d8: 0x0289, 0x17d9: 0x13d1, 0x17da: 0x0039, 0x17db: 0x0ee9, 0x17dc: 0x1159, 0x17dd: 0x0ef9, - 0x17de: 0x0f09, 0x17df: 0x1199, 0x17e0: 0x0f31, 0x17e1: 0x0249, 0x17e2: 0x0f41, 0x17e3: 0x0259, - 0x17e4: 0x0f51, 0x17e5: 0x0359, 0x17e6: 0x0f61, 0x17e7: 0x0f71, 0x17e8: 0x00d9, 0x17e9: 0x0f99, - 0x17ea: 0x2039, 0x17eb: 0x0269, 0x17ec: 0x01d9, 0x17ed: 0x0fa9, 0x17ee: 0x0fb9, 0x17ef: 0x1089, - 0x17f0: 0x0279, 0x17f1: 0x0369, 0x17f2: 0x0289, 0x17f3: 0x13d1, 0x17f4: 0x0039, 0x17f5: 0x0ee9, - 0x17f6: 0x1159, 0x17f7: 0x0ef9, 0x17f8: 0x0f09, 0x17f9: 0x1199, 0x17fa: 0x0f31, 0x17fb: 0x0249, - 0x17fc: 0x0f41, 0x17fd: 0x0259, 0x17fe: 0x0f51, 0x17ff: 0x0359, - // Block 0x60, offset 0x1800 - 0x1800: 0x0f61, 0x1801: 0x0f71, 0x1802: 0x00d9, 0x1803: 0x0f99, 0x1804: 0x2039, 0x1805: 0x0269, - 0x1806: 0x01d9, 0x1807: 0x0fa9, 0x1808: 0x0fb9, 0x1809: 0x1089, 0x180a: 0x0279, 0x180b: 0x0369, - 0x180c: 0x0289, 0x180d: 0x13d1, 0x180e: 0x0039, 0x180f: 0x0ee9, 0x1810: 0x1159, 0x1811: 0x0ef9, - 0x1812: 0x0f09, 0x1813: 0x1199, 0x1814: 0x0f31, 0x1815: 0x0040, 0x1816: 0x0f41, 0x1817: 0x0259, - 0x1818: 0x0f51, 0x1819: 0x0359, 0x181a: 0x0f61, 0x181b: 0x0f71, 0x181c: 0x00d9, 0x181d: 0x0f99, - 0x181e: 0x2039, 0x181f: 0x0269, 0x1820: 0x01d9, 0x1821: 0x0fa9, 0x1822: 0x0fb9, 0x1823: 0x1089, - 0x1824: 0x0279, 0x1825: 0x0369, 0x1826: 0x0289, 0x1827: 0x13d1, 0x1828: 0x0039, 0x1829: 0x0ee9, - 0x182a: 0x1159, 0x182b: 0x0ef9, 0x182c: 0x0f09, 0x182d: 0x1199, 0x182e: 0x0f31, 0x182f: 0x0249, - 0x1830: 0x0f41, 0x1831: 0x0259, 0x1832: 0x0f51, 0x1833: 0x0359, 0x1834: 0x0f61, 0x1835: 0x0f71, - 0x1836: 0x00d9, 0x1837: 0x0f99, 0x1838: 0x2039, 0x1839: 0x0269, 0x183a: 0x01d9, 0x183b: 0x0fa9, - 0x183c: 0x0fb9, 0x183d: 0x1089, 0x183e: 0x0279, 0x183f: 0x0369, - // Block 0x61, offset 0x1840 - 0x1840: 0x0289, 0x1841: 0x13d1, 0x1842: 0x0039, 0x1843: 0x0ee9, 0x1844: 0x1159, 0x1845: 0x0ef9, - 0x1846: 0x0f09, 0x1847: 0x1199, 0x1848: 0x0f31, 0x1849: 0x0249, 0x184a: 0x0f41, 0x184b: 0x0259, - 0x184c: 0x0f51, 0x184d: 0x0359, 0x184e: 0x0f61, 0x184f: 0x0f71, 0x1850: 0x00d9, 0x1851: 0x0f99, - 0x1852: 0x2039, 0x1853: 0x0269, 0x1854: 0x01d9, 0x1855: 0x0fa9, 0x1856: 0x0fb9, 0x1857: 0x1089, - 0x1858: 0x0279, 0x1859: 0x0369, 0x185a: 0x0289, 0x185b: 0x13d1, 0x185c: 0x0039, 0x185d: 0x0040, - 0x185e: 0x1159, 0x185f: 0x0ef9, 0x1860: 0x0040, 0x1861: 0x0040, 0x1862: 0x0f31, 0x1863: 0x0040, - 0x1864: 0x0040, 0x1865: 0x0259, 0x1866: 0x0f51, 0x1867: 0x0040, 0x1868: 0x0040, 0x1869: 0x0f71, - 0x186a: 0x00d9, 0x186b: 0x0f99, 0x186c: 0x2039, 0x186d: 0x0040, 0x186e: 0x01d9, 0x186f: 0x0fa9, - 0x1870: 0x0fb9, 0x1871: 0x1089, 0x1872: 0x0279, 0x1873: 0x0369, 0x1874: 0x0289, 0x1875: 0x13d1, - 0x1876: 0x0039, 0x1877: 0x0ee9, 0x1878: 0x1159, 0x1879: 0x0ef9, 0x187a: 0x0040, 0x187b: 0x1199, - 0x187c: 0x0040, 0x187d: 0x0249, 0x187e: 0x0f41, 0x187f: 0x0259, - // Block 0x62, offset 0x1880 - 0x1880: 0x0f51, 0x1881: 0x0359, 0x1882: 0x0f61, 0x1883: 0x0f71, 0x1884: 0x0040, 0x1885: 0x0f99, - 0x1886: 0x2039, 0x1887: 0x0269, 0x1888: 0x01d9, 0x1889: 0x0fa9, 0x188a: 0x0fb9, 0x188b: 0x1089, - 0x188c: 0x0279, 0x188d: 0x0369, 0x188e: 0x0289, 0x188f: 0x13d1, 0x1890: 0x0039, 0x1891: 0x0ee9, - 0x1892: 0x1159, 0x1893: 0x0ef9, 0x1894: 0x0f09, 0x1895: 0x1199, 0x1896: 0x0f31, 0x1897: 0x0249, - 0x1898: 0x0f41, 0x1899: 0x0259, 0x189a: 0x0f51, 0x189b: 0x0359, 0x189c: 0x0f61, 0x189d: 0x0f71, - 0x189e: 0x00d9, 0x189f: 0x0f99, 0x18a0: 0x2039, 0x18a1: 0x0269, 0x18a2: 0x01d9, 0x18a3: 0x0fa9, - 0x18a4: 0x0fb9, 0x18a5: 0x1089, 0x18a6: 0x0279, 0x18a7: 0x0369, 0x18a8: 0x0289, 0x18a9: 0x13d1, - 0x18aa: 0x0039, 0x18ab: 0x0ee9, 0x18ac: 0x1159, 0x18ad: 0x0ef9, 0x18ae: 0x0f09, 0x18af: 0x1199, - 0x18b0: 0x0f31, 0x18b1: 0x0249, 0x18b2: 0x0f41, 0x18b3: 0x0259, 0x18b4: 0x0f51, 0x18b5: 0x0359, - 0x18b6: 0x0f61, 0x18b7: 0x0f71, 0x18b8: 0x00d9, 0x18b9: 0x0f99, 0x18ba: 0x2039, 0x18bb: 0x0269, - 0x18bc: 0x01d9, 0x18bd: 0x0fa9, 0x18be: 0x0fb9, 0x18bf: 0x1089, - // Block 0x63, offset 0x18c0 - 0x18c0: 0x0279, 0x18c1: 0x0369, 0x18c2: 0x0289, 0x18c3: 0x13d1, 0x18c4: 0x0039, 0x18c5: 0x0ee9, - 0x18c6: 0x0040, 0x18c7: 0x0ef9, 0x18c8: 0x0f09, 0x18c9: 0x1199, 0x18ca: 0x0f31, 0x18cb: 0x0040, - 0x18cc: 0x0040, 0x18cd: 0x0259, 0x18ce: 0x0f51, 0x18cf: 0x0359, 0x18d0: 0x0f61, 0x18d1: 0x0f71, - 0x18d2: 0x00d9, 0x18d3: 0x0f99, 0x18d4: 0x2039, 0x18d5: 0x0040, 0x18d6: 0x01d9, 0x18d7: 0x0fa9, - 0x18d8: 0x0fb9, 0x18d9: 0x1089, 0x18da: 0x0279, 0x18db: 0x0369, 0x18dc: 0x0289, 0x18dd: 0x0040, - 0x18de: 0x0039, 0x18df: 0x0ee9, 0x18e0: 0x1159, 0x18e1: 0x0ef9, 0x18e2: 0x0f09, 0x18e3: 0x1199, - 0x18e4: 0x0f31, 0x18e5: 0x0249, 0x18e6: 0x0f41, 0x18e7: 0x0259, 0x18e8: 0x0f51, 0x18e9: 0x0359, - 0x18ea: 0x0f61, 0x18eb: 0x0f71, 0x18ec: 0x00d9, 0x18ed: 0x0f99, 0x18ee: 0x2039, 0x18ef: 0x0269, - 0x18f0: 0x01d9, 0x18f1: 0x0fa9, 0x18f2: 0x0fb9, 0x18f3: 0x1089, 0x18f4: 0x0279, 0x18f5: 0x0369, - 0x18f6: 0x0289, 0x18f7: 0x13d1, 0x18f8: 0x0039, 0x18f9: 0x0ee9, 0x18fa: 0x0040, 0x18fb: 0x0ef9, - 0x18fc: 0x0f09, 0x18fd: 0x1199, 0x18fe: 0x0f31, 0x18ff: 0x0040, - // Block 0x64, offset 0x1900 - 0x1900: 0x0f41, 0x1901: 0x0259, 0x1902: 0x0f51, 0x1903: 0x0359, 0x1904: 0x0f61, 0x1905: 0x0040, - 0x1906: 0x00d9, 0x1907: 0x0040, 0x1908: 0x0040, 0x1909: 0x0040, 0x190a: 0x01d9, 0x190b: 0x0fa9, - 0x190c: 0x0fb9, 0x190d: 0x1089, 0x190e: 0x0279, 0x190f: 0x0369, 0x1910: 0x0289, 0x1911: 0x0040, - 0x1912: 0x0039, 0x1913: 0x0ee9, 0x1914: 0x1159, 0x1915: 0x0ef9, 0x1916: 0x0f09, 0x1917: 0x1199, - 0x1918: 0x0f31, 0x1919: 0x0249, 0x191a: 0x0f41, 0x191b: 0x0259, 0x191c: 0x0f51, 0x191d: 0x0359, - 0x191e: 0x0f61, 0x191f: 0x0f71, 0x1920: 0x00d9, 0x1921: 0x0f99, 0x1922: 0x2039, 0x1923: 0x0269, - 0x1924: 0x01d9, 0x1925: 0x0fa9, 0x1926: 0x0fb9, 0x1927: 0x1089, 0x1928: 0x0279, 0x1929: 0x0369, - 0x192a: 0x0289, 0x192b: 0x13d1, 0x192c: 0x0039, 0x192d: 0x0ee9, 0x192e: 0x1159, 0x192f: 0x0ef9, - 0x1930: 0x0f09, 0x1931: 0x1199, 0x1932: 0x0f31, 0x1933: 0x0249, 0x1934: 0x0f41, 0x1935: 0x0259, - 0x1936: 0x0f51, 0x1937: 0x0359, 0x1938: 0x0f61, 0x1939: 0x0f71, 0x193a: 0x00d9, 0x193b: 0x0f99, - 0x193c: 0x2039, 0x193d: 0x0269, 0x193e: 0x01d9, 0x193f: 0x0fa9, - // Block 0x65, offset 0x1940 - 0x1940: 0x0fb9, 0x1941: 0x1089, 0x1942: 0x0279, 0x1943: 0x0369, 0x1944: 0x0289, 0x1945: 0x13d1, - 0x1946: 0x0039, 0x1947: 0x0ee9, 0x1948: 0x1159, 0x1949: 0x0ef9, 0x194a: 0x0f09, 0x194b: 0x1199, - 0x194c: 0x0f31, 0x194d: 0x0249, 0x194e: 0x0f41, 0x194f: 0x0259, 0x1950: 0x0f51, 0x1951: 0x0359, - 0x1952: 0x0f61, 0x1953: 0x0f71, 0x1954: 0x00d9, 0x1955: 0x0f99, 0x1956: 0x2039, 0x1957: 0x0269, - 0x1958: 0x01d9, 0x1959: 0x0fa9, 0x195a: 0x0fb9, 0x195b: 0x1089, 0x195c: 0x0279, 0x195d: 0x0369, - 0x195e: 0x0289, 0x195f: 0x13d1, 0x1960: 0x0039, 0x1961: 0x0ee9, 0x1962: 0x1159, 0x1963: 0x0ef9, - 0x1964: 0x0f09, 0x1965: 0x1199, 0x1966: 0x0f31, 0x1967: 0x0249, 0x1968: 0x0f41, 0x1969: 0x0259, - 0x196a: 0x0f51, 0x196b: 0x0359, 0x196c: 0x0f61, 0x196d: 0x0f71, 0x196e: 0x00d9, 0x196f: 0x0f99, - 0x1970: 0x2039, 0x1971: 0x0269, 0x1972: 0x01d9, 0x1973: 0x0fa9, 0x1974: 0x0fb9, 0x1975: 0x1089, - 0x1976: 0x0279, 0x1977: 0x0369, 0x1978: 0x0289, 0x1979: 0x13d1, 0x197a: 0x0039, 0x197b: 0x0ee9, - 0x197c: 0x1159, 0x197d: 0x0ef9, 0x197e: 0x0f09, 0x197f: 0x1199, - // Block 0x66, offset 0x1980 - 0x1980: 0x0f31, 0x1981: 0x0249, 0x1982: 0x0f41, 0x1983: 0x0259, 0x1984: 0x0f51, 0x1985: 0x0359, - 0x1986: 0x0f61, 0x1987: 0x0f71, 0x1988: 0x00d9, 0x1989: 0x0f99, 0x198a: 0x2039, 0x198b: 0x0269, - 0x198c: 0x01d9, 0x198d: 0x0fa9, 0x198e: 0x0fb9, 0x198f: 0x1089, 0x1990: 0x0279, 0x1991: 0x0369, - 0x1992: 0x0289, 0x1993: 0x13d1, 0x1994: 0x0039, 0x1995: 0x0ee9, 0x1996: 0x1159, 0x1997: 0x0ef9, - 0x1998: 0x0f09, 0x1999: 0x1199, 0x199a: 0x0f31, 0x199b: 0x0249, 0x199c: 0x0f41, 0x199d: 0x0259, - 0x199e: 0x0f51, 0x199f: 0x0359, 0x19a0: 0x0f61, 0x19a1: 0x0f71, 0x19a2: 0x00d9, 0x19a3: 0x0f99, - 0x19a4: 0x2039, 0x19a5: 0x0269, 0x19a6: 0x01d9, 0x19a7: 0x0fa9, 0x19a8: 0x0fb9, 0x19a9: 0x1089, - 0x19aa: 0x0279, 0x19ab: 0x0369, 0x19ac: 0x0289, 0x19ad: 0x13d1, 0x19ae: 0x0039, 0x19af: 0x0ee9, - 0x19b0: 0x1159, 0x19b1: 0x0ef9, 0x19b2: 0x0f09, 0x19b3: 0x1199, 0x19b4: 0x0f31, 0x19b5: 0x0249, - 0x19b6: 0x0f41, 0x19b7: 0x0259, 0x19b8: 0x0f51, 0x19b9: 0x0359, 0x19ba: 0x0f61, 0x19bb: 0x0f71, - 0x19bc: 0x00d9, 0x19bd: 0x0f99, 0x19be: 0x2039, 0x19bf: 0x0269, - // Block 0x67, offset 0x19c0 - 0x19c0: 0x01d9, 0x19c1: 0x0fa9, 0x19c2: 0x0fb9, 0x19c3: 0x1089, 0x19c4: 0x0279, 0x19c5: 0x0369, - 0x19c6: 0x0289, 0x19c7: 0x13d1, 0x19c8: 0x0039, 0x19c9: 0x0ee9, 0x19ca: 0x1159, 0x19cb: 0x0ef9, - 0x19cc: 0x0f09, 0x19cd: 0x1199, 0x19ce: 0x0f31, 0x19cf: 0x0249, 0x19d0: 0x0f41, 0x19d1: 0x0259, - 0x19d2: 0x0f51, 0x19d3: 0x0359, 0x19d4: 0x0f61, 0x19d5: 0x0f71, 0x19d6: 0x00d9, 0x19d7: 0x0f99, - 0x19d8: 0x2039, 0x19d9: 0x0269, 0x19da: 0x01d9, 0x19db: 0x0fa9, 0x19dc: 0x0fb9, 0x19dd: 0x1089, - 0x19de: 0x0279, 0x19df: 0x0369, 0x19e0: 0x0289, 0x19e1: 0x13d1, 0x19e2: 0x0039, 0x19e3: 0x0ee9, - 0x19e4: 0x1159, 0x19e5: 0x0ef9, 0x19e6: 0x0f09, 0x19e7: 0x1199, 0x19e8: 0x0f31, 0x19e9: 0x0249, - 0x19ea: 0x0f41, 0x19eb: 0x0259, 0x19ec: 0x0f51, 0x19ed: 0x0359, 0x19ee: 0x0f61, 0x19ef: 0x0f71, - 0x19f0: 0x00d9, 0x19f1: 0x0f99, 0x19f2: 0x2039, 0x19f3: 0x0269, 0x19f4: 0x01d9, 0x19f5: 0x0fa9, - 0x19f6: 0x0fb9, 0x19f7: 0x1089, 0x19f8: 0x0279, 0x19f9: 0x0369, 0x19fa: 0x0289, 0x19fb: 0x13d1, - 0x19fc: 0x0039, 0x19fd: 0x0ee9, 0x19fe: 0x1159, 0x19ff: 0x0ef9, - // Block 0x68, offset 0x1a00 - 0x1a00: 0x0f09, 0x1a01: 0x1199, 0x1a02: 0x0f31, 0x1a03: 0x0249, 0x1a04: 0x0f41, 0x1a05: 0x0259, - 0x1a06: 0x0f51, 0x1a07: 0x0359, 0x1a08: 0x0f61, 0x1a09: 0x0f71, 0x1a0a: 0x00d9, 0x1a0b: 0x0f99, - 0x1a0c: 0x2039, 0x1a0d: 0x0269, 0x1a0e: 0x01d9, 0x1a0f: 0x0fa9, 0x1a10: 0x0fb9, 0x1a11: 0x1089, - 0x1a12: 0x0279, 0x1a13: 0x0369, 0x1a14: 0x0289, 0x1a15: 0x13d1, 0x1a16: 0x0039, 0x1a17: 0x0ee9, - 0x1a18: 0x1159, 0x1a19: 0x0ef9, 0x1a1a: 0x0f09, 0x1a1b: 0x1199, 0x1a1c: 0x0f31, 0x1a1d: 0x0249, - 0x1a1e: 0x0f41, 0x1a1f: 0x0259, 0x1a20: 0x0f51, 0x1a21: 0x0359, 0x1a22: 0x0f61, 0x1a23: 0x0f71, - 0x1a24: 0x00d9, 0x1a25: 0x0f99, 0x1a26: 0x2039, 0x1a27: 0x0269, 0x1a28: 0x01d9, 0x1a29: 0x0fa9, - 0x1a2a: 0x0fb9, 0x1a2b: 0x1089, 0x1a2c: 0x0279, 0x1a2d: 0x0369, 0x1a2e: 0x0289, 0x1a2f: 0x13d1, - 0x1a30: 0x0039, 0x1a31: 0x0ee9, 0x1a32: 0x1159, 0x1a33: 0x0ef9, 0x1a34: 0x0f09, 0x1a35: 0x1199, - 0x1a36: 0x0f31, 0x1a37: 0x0249, 0x1a38: 0x0f41, 0x1a39: 0x0259, 0x1a3a: 0x0f51, 0x1a3b: 0x0359, - 0x1a3c: 0x0f61, 0x1a3d: 0x0f71, 0x1a3e: 0x00d9, 0x1a3f: 0x0f99, - // Block 0x69, offset 0x1a40 - 0x1a40: 0x2039, 0x1a41: 0x0269, 0x1a42: 0x01d9, 0x1a43: 0x0fa9, 0x1a44: 0x0fb9, 0x1a45: 0x1089, - 0x1a46: 0x0279, 0x1a47: 0x0369, 0x1a48: 0x0289, 0x1a49: 0x13d1, 0x1a4a: 0x0039, 0x1a4b: 0x0ee9, - 0x1a4c: 0x1159, 0x1a4d: 0x0ef9, 0x1a4e: 0x0f09, 0x1a4f: 0x1199, 0x1a50: 0x0f31, 0x1a51: 0x0249, - 0x1a52: 0x0f41, 0x1a53: 0x0259, 0x1a54: 0x0f51, 0x1a55: 0x0359, 0x1a56: 0x0f61, 0x1a57: 0x0f71, - 0x1a58: 0x00d9, 0x1a59: 0x0f99, 0x1a5a: 0x2039, 0x1a5b: 0x0269, 0x1a5c: 0x01d9, 0x1a5d: 0x0fa9, - 0x1a5e: 0x0fb9, 0x1a5f: 0x1089, 0x1a60: 0x0279, 0x1a61: 0x0369, 0x1a62: 0x0289, 0x1a63: 0x13d1, - 0x1a64: 0xba81, 0x1a65: 0xba99, 0x1a66: 0x0040, 0x1a67: 0x0040, 0x1a68: 0xbab1, 0x1a69: 0x1099, - 0x1a6a: 0x10b1, 0x1a6b: 0x10c9, 0x1a6c: 0xbac9, 0x1a6d: 0xbae1, 0x1a6e: 0xbaf9, 0x1a6f: 0x1429, - 0x1a70: 0x1a31, 0x1a71: 0xbb11, 0x1a72: 0xbb29, 0x1a73: 0xbb41, 0x1a74: 0xbb59, 0x1a75: 0xbb71, - 0x1a76: 0xbb89, 0x1a77: 0x2109, 0x1a78: 0x1111, 0x1a79: 0x1429, 0x1a7a: 0xbba1, 0x1a7b: 0xbbb9, - 0x1a7c: 0xbbd1, 0x1a7d: 0x10e1, 0x1a7e: 0x10f9, 0x1a7f: 0xbbe9, - // Block 0x6a, offset 0x1a80 - 0x1a80: 0x2079, 0x1a81: 0xbc01, 0x1a82: 0xbab1, 0x1a83: 0x1099, 0x1a84: 0x10b1, 0x1a85: 0x10c9, - 0x1a86: 0xbac9, 0x1a87: 0xbae1, 0x1a88: 0xbaf9, 0x1a89: 0x1429, 0x1a8a: 0x1a31, 0x1a8b: 0xbb11, - 0x1a8c: 0xbb29, 0x1a8d: 0xbb41, 0x1a8e: 0xbb59, 0x1a8f: 0xbb71, 0x1a90: 0xbb89, 0x1a91: 0x2109, - 0x1a92: 0x1111, 0x1a93: 0xbba1, 0x1a94: 0xbba1, 0x1a95: 0xbbb9, 0x1a96: 0xbbd1, 0x1a97: 0x10e1, - 0x1a98: 0x10f9, 0x1a99: 0xbbe9, 0x1a9a: 0x2079, 0x1a9b: 0xbc21, 0x1a9c: 0xbac9, 0x1a9d: 0x1429, - 0x1a9e: 0xbb11, 0x1a9f: 0x10e1, 0x1aa0: 0x1111, 0x1aa1: 0x2109, 0x1aa2: 0xbab1, 0x1aa3: 0x1099, - 0x1aa4: 0x10b1, 0x1aa5: 0x10c9, 0x1aa6: 0xbac9, 0x1aa7: 0xbae1, 0x1aa8: 0xbaf9, 0x1aa9: 0x1429, - 0x1aaa: 0x1a31, 0x1aab: 0xbb11, 0x1aac: 0xbb29, 0x1aad: 0xbb41, 0x1aae: 0xbb59, 0x1aaf: 0xbb71, - 0x1ab0: 0xbb89, 0x1ab1: 0x2109, 0x1ab2: 0x1111, 0x1ab3: 0x1429, 0x1ab4: 0xbba1, 0x1ab5: 0xbbb9, - 0x1ab6: 0xbbd1, 0x1ab7: 0x10e1, 0x1ab8: 0x10f9, 0x1ab9: 0xbbe9, 0x1aba: 0x2079, 0x1abb: 0xbc01, - 0x1abc: 0xbab1, 0x1abd: 0x1099, 0x1abe: 0x10b1, 0x1abf: 0x10c9, - // Block 0x6b, offset 0x1ac0 - 0x1ac0: 0xbac9, 0x1ac1: 0xbae1, 0x1ac2: 0xbaf9, 0x1ac3: 0x1429, 0x1ac4: 0x1a31, 0x1ac5: 0xbb11, - 0x1ac6: 0xbb29, 0x1ac7: 0xbb41, 0x1ac8: 0xbb59, 0x1ac9: 0xbb71, 0x1aca: 0xbb89, 0x1acb: 0x2109, - 0x1acc: 0x1111, 0x1acd: 0xbba1, 0x1ace: 0xbba1, 0x1acf: 0xbbb9, 0x1ad0: 0xbbd1, 0x1ad1: 0x10e1, - 0x1ad2: 0x10f9, 0x1ad3: 0xbbe9, 0x1ad4: 0x2079, 0x1ad5: 0xbc21, 0x1ad6: 0xbac9, 0x1ad7: 0x1429, - 0x1ad8: 0xbb11, 0x1ad9: 0x10e1, 0x1ada: 0x1111, 0x1adb: 0x2109, 0x1adc: 0xbab1, 0x1add: 0x1099, - 0x1ade: 0x10b1, 0x1adf: 0x10c9, 0x1ae0: 0xbac9, 0x1ae1: 0xbae1, 0x1ae2: 0xbaf9, 0x1ae3: 0x1429, - 0x1ae4: 0x1a31, 0x1ae5: 0xbb11, 0x1ae6: 0xbb29, 0x1ae7: 0xbb41, 0x1ae8: 0xbb59, 0x1ae9: 0xbb71, - 0x1aea: 0xbb89, 0x1aeb: 0x2109, 0x1aec: 0x1111, 0x1aed: 0x1429, 0x1aee: 0xbba1, 0x1aef: 0xbbb9, - 0x1af0: 0xbbd1, 0x1af1: 0x10e1, 0x1af2: 0x10f9, 0x1af3: 0xbbe9, 0x1af4: 0x2079, 0x1af5: 0xbc01, - 0x1af6: 0xbab1, 0x1af7: 0x1099, 0x1af8: 0x10b1, 0x1af9: 0x10c9, 0x1afa: 0xbac9, 0x1afb: 0xbae1, - 0x1afc: 0xbaf9, 0x1afd: 0x1429, 0x1afe: 0x1a31, 0x1aff: 0xbb11, - // Block 0x6c, offset 0x1b00 - 0x1b00: 0xbb29, 0x1b01: 0xbb41, 0x1b02: 0xbb59, 0x1b03: 0xbb71, 0x1b04: 0xbb89, 0x1b05: 0x2109, - 0x1b06: 0x1111, 0x1b07: 0xbba1, 0x1b08: 0xbba1, 0x1b09: 0xbbb9, 0x1b0a: 0xbbd1, 0x1b0b: 0x10e1, - 0x1b0c: 0x10f9, 0x1b0d: 0xbbe9, 0x1b0e: 0x2079, 0x1b0f: 0xbc21, 0x1b10: 0xbac9, 0x1b11: 0x1429, - 0x1b12: 0xbb11, 0x1b13: 0x10e1, 0x1b14: 0x1111, 0x1b15: 0x2109, 0x1b16: 0xbab1, 0x1b17: 0x1099, - 0x1b18: 0x10b1, 0x1b19: 0x10c9, 0x1b1a: 0xbac9, 0x1b1b: 0xbae1, 0x1b1c: 0xbaf9, 0x1b1d: 0x1429, - 0x1b1e: 0x1a31, 0x1b1f: 0xbb11, 0x1b20: 0xbb29, 0x1b21: 0xbb41, 0x1b22: 0xbb59, 0x1b23: 0xbb71, - 0x1b24: 0xbb89, 0x1b25: 0x2109, 0x1b26: 0x1111, 0x1b27: 0x1429, 0x1b28: 0xbba1, 0x1b29: 0xbbb9, - 0x1b2a: 0xbbd1, 0x1b2b: 0x10e1, 0x1b2c: 0x10f9, 0x1b2d: 0xbbe9, 0x1b2e: 0x2079, 0x1b2f: 0xbc01, - 0x1b30: 0xbab1, 0x1b31: 0x1099, 0x1b32: 0x10b1, 0x1b33: 0x10c9, 0x1b34: 0xbac9, 0x1b35: 0xbae1, - 0x1b36: 0xbaf9, 0x1b37: 0x1429, 0x1b38: 0x1a31, 0x1b39: 0xbb11, 0x1b3a: 0xbb29, 0x1b3b: 0xbb41, - 0x1b3c: 0xbb59, 0x1b3d: 0xbb71, 0x1b3e: 0xbb89, 0x1b3f: 0x2109, - // Block 0x6d, offset 0x1b40 - 0x1b40: 0x1111, 0x1b41: 0xbba1, 0x1b42: 0xbba1, 0x1b43: 0xbbb9, 0x1b44: 0xbbd1, 0x1b45: 0x10e1, - 0x1b46: 0x10f9, 0x1b47: 0xbbe9, 0x1b48: 0x2079, 0x1b49: 0xbc21, 0x1b4a: 0xbac9, 0x1b4b: 0x1429, - 0x1b4c: 0xbb11, 0x1b4d: 0x10e1, 0x1b4e: 0x1111, 0x1b4f: 0x2109, 0x1b50: 0xbab1, 0x1b51: 0x1099, - 0x1b52: 0x10b1, 0x1b53: 0x10c9, 0x1b54: 0xbac9, 0x1b55: 0xbae1, 0x1b56: 0xbaf9, 0x1b57: 0x1429, - 0x1b58: 0x1a31, 0x1b59: 0xbb11, 0x1b5a: 0xbb29, 0x1b5b: 0xbb41, 0x1b5c: 0xbb59, 0x1b5d: 0xbb71, - 0x1b5e: 0xbb89, 0x1b5f: 0x2109, 0x1b60: 0x1111, 0x1b61: 0x1429, 0x1b62: 0xbba1, 0x1b63: 0xbbb9, - 0x1b64: 0xbbd1, 0x1b65: 0x10e1, 0x1b66: 0x10f9, 0x1b67: 0xbbe9, 0x1b68: 0x2079, 0x1b69: 0xbc01, - 0x1b6a: 0xbab1, 0x1b6b: 0x1099, 0x1b6c: 0x10b1, 0x1b6d: 0x10c9, 0x1b6e: 0xbac9, 0x1b6f: 0xbae1, - 0x1b70: 0xbaf9, 0x1b71: 0x1429, 0x1b72: 0x1a31, 0x1b73: 0xbb11, 0x1b74: 0xbb29, 0x1b75: 0xbb41, - 0x1b76: 0xbb59, 0x1b77: 0xbb71, 0x1b78: 0xbb89, 0x1b79: 0x2109, 0x1b7a: 0x1111, 0x1b7b: 0xbba1, - 0x1b7c: 0xbba1, 0x1b7d: 0xbbb9, 0x1b7e: 0xbbd1, 0x1b7f: 0x10e1, - // Block 0x6e, offset 0x1b80 - 0x1b80: 0x10f9, 0x1b81: 0xbbe9, 0x1b82: 0x2079, 0x1b83: 0xbc21, 0x1b84: 0xbac9, 0x1b85: 0x1429, - 0x1b86: 0xbb11, 0x1b87: 0x10e1, 0x1b88: 0x1111, 0x1b89: 0x2109, 0x1b8a: 0xbc41, 0x1b8b: 0xbc41, - 0x1b8c: 0x0040, 0x1b8d: 0x0040, 0x1b8e: 0x1f41, 0x1b8f: 0x00c9, 0x1b90: 0x0069, 0x1b91: 0x0079, - 0x1b92: 0x1f51, 0x1b93: 0x1f61, 0x1b94: 0x1f71, 0x1b95: 0x1f81, 0x1b96: 0x1f91, 0x1b97: 0x1fa1, - 0x1b98: 0x1f41, 0x1b99: 0x00c9, 0x1b9a: 0x0069, 0x1b9b: 0x0079, 0x1b9c: 0x1f51, 0x1b9d: 0x1f61, - 0x1b9e: 0x1f71, 0x1b9f: 0x1f81, 0x1ba0: 0x1f91, 0x1ba1: 0x1fa1, 0x1ba2: 0x1f41, 0x1ba3: 0x00c9, - 0x1ba4: 0x0069, 0x1ba5: 0x0079, 0x1ba6: 0x1f51, 0x1ba7: 0x1f61, 0x1ba8: 0x1f71, 0x1ba9: 0x1f81, - 0x1baa: 0x1f91, 0x1bab: 0x1fa1, 0x1bac: 0x1f41, 0x1bad: 0x00c9, 0x1bae: 0x0069, 0x1baf: 0x0079, - 0x1bb0: 0x1f51, 0x1bb1: 0x1f61, 0x1bb2: 0x1f71, 0x1bb3: 0x1f81, 0x1bb4: 0x1f91, 0x1bb5: 0x1fa1, - 0x1bb6: 0x1f41, 0x1bb7: 0x00c9, 0x1bb8: 0x0069, 0x1bb9: 0x0079, 0x1bba: 0x1f51, 0x1bbb: 0x1f61, - 0x1bbc: 0x1f71, 0x1bbd: 0x1f81, 0x1bbe: 0x1f91, 0x1bbf: 0x1fa1, - // Block 0x6f, offset 0x1bc0 - 0x1bc0: 0xe115, 0x1bc1: 0xe115, 0x1bc2: 0xe135, 0x1bc3: 0xe135, 0x1bc4: 0xe115, 0x1bc5: 0xe115, - 0x1bc6: 0xe175, 0x1bc7: 0xe175, 0x1bc8: 0xe115, 0x1bc9: 0xe115, 0x1bca: 0xe135, 0x1bcb: 0xe135, - 0x1bcc: 0xe115, 0x1bcd: 0xe115, 0x1bce: 0xe1f5, 0x1bcf: 0xe1f5, 0x1bd0: 0xe115, 0x1bd1: 0xe115, - 0x1bd2: 0xe135, 0x1bd3: 0xe135, 0x1bd4: 0xe115, 0x1bd5: 0xe115, 0x1bd6: 0xe175, 0x1bd7: 0xe175, - 0x1bd8: 0xe115, 0x1bd9: 0xe115, 0x1bda: 0xe135, 0x1bdb: 0xe135, 0x1bdc: 0xe115, 0x1bdd: 0xe115, - 0x1bde: 0x8b05, 0x1bdf: 0x8b05, 0x1be0: 0x04b5, 0x1be1: 0x04b5, 0x1be2: 0x0208, 0x1be3: 0x0208, - 0x1be4: 0x0208, 0x1be5: 0x0208, 0x1be6: 0x0208, 0x1be7: 0x0208, 0x1be8: 0x0208, 0x1be9: 0x0208, - 0x1bea: 0x0208, 0x1beb: 0x0208, 0x1bec: 0x0208, 0x1bed: 0x0208, 0x1bee: 0x0208, 0x1bef: 0x0208, - 0x1bf0: 0x0208, 0x1bf1: 0x0208, 0x1bf2: 0x0208, 0x1bf3: 0x0208, 0x1bf4: 0x0208, 0x1bf5: 0x0208, - 0x1bf6: 0x0208, 0x1bf7: 0x0208, 0x1bf8: 0x0208, 0x1bf9: 0x0208, 0x1bfa: 0x0208, 0x1bfb: 0x0208, - 0x1bfc: 0x0208, 0x1bfd: 0x0208, 0x1bfe: 0x0208, 0x1bff: 0x0208, - // Block 0x70, offset 0x1c00 - 0x1c00: 0xb189, 0x1c01: 0xb1a1, 0x1c02: 0xb201, 0x1c03: 0xb249, 0x1c04: 0x0040, 0x1c05: 0xb411, - 0x1c06: 0xb291, 0x1c07: 0xb219, 0x1c08: 0xb309, 0x1c09: 0xb429, 0x1c0a: 0xb399, 0x1c0b: 0xb3b1, - 0x1c0c: 0xb3c9, 0x1c0d: 0xb3e1, 0x1c0e: 0xb2a9, 0x1c0f: 0xb339, 0x1c10: 0xb369, 0x1c11: 0xb2d9, - 0x1c12: 0xb381, 0x1c13: 0xb279, 0x1c14: 0xb2c1, 0x1c15: 0xb1d1, 0x1c16: 0xb1e9, 0x1c17: 0xb231, - 0x1c18: 0xb261, 0x1c19: 0xb2f1, 0x1c1a: 0xb321, 0x1c1b: 0xb351, 0x1c1c: 0xbc59, 0x1c1d: 0x7949, - 0x1c1e: 0xbc71, 0x1c1f: 0xbc89, 0x1c20: 0x0040, 0x1c21: 0xb1a1, 0x1c22: 0xb201, 0x1c23: 0x0040, - 0x1c24: 0xb3f9, 0x1c25: 0x0040, 0x1c26: 0x0040, 0x1c27: 0xb219, 0x1c28: 0x0040, 0x1c29: 0xb429, - 0x1c2a: 0xb399, 0x1c2b: 0xb3b1, 0x1c2c: 0xb3c9, 0x1c2d: 0xb3e1, 0x1c2e: 0xb2a9, 0x1c2f: 0xb339, - 0x1c30: 0xb369, 0x1c31: 0xb2d9, 0x1c32: 0xb381, 0x1c33: 0x0040, 0x1c34: 0xb2c1, 0x1c35: 0xb1d1, - 0x1c36: 0xb1e9, 0x1c37: 0xb231, 0x1c38: 0x0040, 0x1c39: 0xb2f1, 0x1c3a: 0x0040, 0x1c3b: 0xb351, - 0x1c3c: 0x0040, 0x1c3d: 0x0040, 0x1c3e: 0x0040, 0x1c3f: 0x0040, - // Block 0x71, offset 0x1c40 - 0x1c40: 0x0040, 0x1c41: 0x0040, 0x1c42: 0xb201, 0x1c43: 0x0040, 0x1c44: 0x0040, 0x1c45: 0x0040, - 0x1c46: 0x0040, 0x1c47: 0xb219, 0x1c48: 0x0040, 0x1c49: 0xb429, 0x1c4a: 0x0040, 0x1c4b: 0xb3b1, - 0x1c4c: 0x0040, 0x1c4d: 0xb3e1, 0x1c4e: 0xb2a9, 0x1c4f: 0xb339, 0x1c50: 0x0040, 0x1c51: 0xb2d9, - 0x1c52: 0xb381, 0x1c53: 0x0040, 0x1c54: 0xb2c1, 0x1c55: 0x0040, 0x1c56: 0x0040, 0x1c57: 0xb231, - 0x1c58: 0x0040, 0x1c59: 0xb2f1, 0x1c5a: 0x0040, 0x1c5b: 0xb351, 0x1c5c: 0x0040, 0x1c5d: 0x7949, - 0x1c5e: 0x0040, 0x1c5f: 0xbc89, 0x1c60: 0x0040, 0x1c61: 0xb1a1, 0x1c62: 0xb201, 0x1c63: 0x0040, - 0x1c64: 0xb3f9, 0x1c65: 0x0040, 0x1c66: 0x0040, 0x1c67: 0xb219, 0x1c68: 0xb309, 0x1c69: 0xb429, - 0x1c6a: 0xb399, 0x1c6b: 0x0040, 0x1c6c: 0xb3c9, 0x1c6d: 0xb3e1, 0x1c6e: 0xb2a9, 0x1c6f: 0xb339, - 0x1c70: 0xb369, 0x1c71: 0xb2d9, 0x1c72: 0xb381, 0x1c73: 0x0040, 0x1c74: 0xb2c1, 0x1c75: 0xb1d1, - 0x1c76: 0xb1e9, 0x1c77: 0xb231, 0x1c78: 0x0040, 0x1c79: 0xb2f1, 0x1c7a: 0xb321, 0x1c7b: 0xb351, - 0x1c7c: 0xbc59, 0x1c7d: 0x0040, 0x1c7e: 0xbc71, 0x1c7f: 0x0040, - // Block 0x72, offset 0x1c80 - 0x1c80: 0xb189, 0x1c81: 0xb1a1, 0x1c82: 0xb201, 0x1c83: 0xb249, 0x1c84: 0xb3f9, 0x1c85: 0xb411, - 0x1c86: 0xb291, 0x1c87: 0xb219, 0x1c88: 0xb309, 0x1c89: 0xb429, 0x1c8a: 0x0040, 0x1c8b: 0xb3b1, - 0x1c8c: 0xb3c9, 0x1c8d: 0xb3e1, 0x1c8e: 0xb2a9, 0x1c8f: 0xb339, 0x1c90: 0xb369, 0x1c91: 0xb2d9, - 0x1c92: 0xb381, 0x1c93: 0xb279, 0x1c94: 0xb2c1, 0x1c95: 0xb1d1, 0x1c96: 0xb1e9, 0x1c97: 0xb231, - 0x1c98: 0xb261, 0x1c99: 0xb2f1, 0x1c9a: 0xb321, 0x1c9b: 0xb351, 0x1c9c: 0x0040, 0x1c9d: 0x0040, - 0x1c9e: 0x0040, 0x1c9f: 0x0040, 0x1ca0: 0x0040, 0x1ca1: 0xb1a1, 0x1ca2: 0xb201, 0x1ca3: 0xb249, - 0x1ca4: 0x0040, 0x1ca5: 0xb411, 0x1ca6: 0xb291, 0x1ca7: 0xb219, 0x1ca8: 0xb309, 0x1ca9: 0xb429, - 0x1caa: 0x0040, 0x1cab: 0xb3b1, 0x1cac: 0xb3c9, 0x1cad: 0xb3e1, 0x1cae: 0xb2a9, 0x1caf: 0xb339, - 0x1cb0: 0xb369, 0x1cb1: 0xb2d9, 0x1cb2: 0xb381, 0x1cb3: 0xb279, 0x1cb4: 0xb2c1, 0x1cb5: 0xb1d1, - 0x1cb6: 0xb1e9, 0x1cb7: 0xb231, 0x1cb8: 0xb261, 0x1cb9: 0xb2f1, 0x1cba: 0xb321, 0x1cbb: 0xb351, - 0x1cbc: 0x0040, 0x1cbd: 0x0040, 0x1cbe: 0x0040, 0x1cbf: 0x0040, - // Block 0x73, offset 0x1cc0 - 0x1cc0: 0x0040, 0x1cc1: 0xbca2, 0x1cc2: 0xbcba, 0x1cc3: 0xbcd2, 0x1cc4: 0xbcea, 0x1cc5: 0xbd02, - 0x1cc6: 0xbd1a, 0x1cc7: 0xbd32, 0x1cc8: 0xbd4a, 0x1cc9: 0xbd62, 0x1cca: 0xbd7a, 0x1ccb: 0x0018, - 0x1ccc: 0x0018, 0x1ccd: 0x0040, 0x1cce: 0x0040, 0x1ccf: 0x0040, 0x1cd0: 0xbd92, 0x1cd1: 0xbdb2, - 0x1cd2: 0xbdd2, 0x1cd3: 0xbdf2, 0x1cd4: 0xbe12, 0x1cd5: 0xbe32, 0x1cd6: 0xbe52, 0x1cd7: 0xbe72, - 0x1cd8: 0xbe92, 0x1cd9: 0xbeb2, 0x1cda: 0xbed2, 0x1cdb: 0xbef2, 0x1cdc: 0xbf12, 0x1cdd: 0xbf32, - 0x1cde: 0xbf52, 0x1cdf: 0xbf72, 0x1ce0: 0xbf92, 0x1ce1: 0xbfb2, 0x1ce2: 0xbfd2, 0x1ce3: 0xbff2, - 0x1ce4: 0xc012, 0x1ce5: 0xc032, 0x1ce6: 0xc052, 0x1ce7: 0xc072, 0x1ce8: 0xc092, 0x1ce9: 0xc0b2, - 0x1cea: 0xc0d1, 0x1ceb: 0x1159, 0x1cec: 0x0269, 0x1ced: 0x6671, 0x1cee: 0xc111, 0x1cef: 0x0040, - 0x1cf0: 0x0039, 0x1cf1: 0x0ee9, 0x1cf2: 0x1159, 0x1cf3: 0x0ef9, 0x1cf4: 0x0f09, 0x1cf5: 0x1199, - 0x1cf6: 0x0f31, 0x1cf7: 0x0249, 0x1cf8: 0x0f41, 0x1cf9: 0x0259, 0x1cfa: 0x0f51, 0x1cfb: 0x0359, - 0x1cfc: 0x0f61, 0x1cfd: 0x0f71, 0x1cfe: 0x00d9, 0x1cff: 0x0f99, - // Block 0x74, offset 0x1d00 - 0x1d00: 0x2039, 0x1d01: 0x0269, 0x1d02: 0x01d9, 0x1d03: 0x0fa9, 0x1d04: 0x0fb9, 0x1d05: 0x1089, - 0x1d06: 0x0279, 0x1d07: 0x0369, 0x1d08: 0x0289, 0x1d09: 0x13d1, 0x1d0a: 0xc129, 0x1d0b: 0x65b1, - 0x1d0c: 0xc141, 0x1d0d: 0x1441, 0x1d0e: 0xc159, 0x1d0f: 0xc179, 0x1d10: 0x0018, 0x1d11: 0x0018, - 0x1d12: 0x0018, 0x1d13: 0x0018, 0x1d14: 0x0018, 0x1d15: 0x0018, 0x1d16: 0x0018, 0x1d17: 0x0018, - 0x1d18: 0x0018, 0x1d19: 0x0018, 0x1d1a: 0x0018, 0x1d1b: 0x0018, 0x1d1c: 0x0018, 0x1d1d: 0x0018, - 0x1d1e: 0x0018, 0x1d1f: 0x0018, 0x1d20: 0x0018, 0x1d21: 0x0018, 0x1d22: 0x0018, 0x1d23: 0x0018, - 0x1d24: 0x0018, 0x1d25: 0x0018, 0x1d26: 0x0018, 0x1d27: 0x0018, 0x1d28: 0x0018, 0x1d29: 0x0018, - 0x1d2a: 0xc191, 0x1d2b: 0xc1a9, 0x1d2c: 0x0040, 0x1d2d: 0x0040, 0x1d2e: 0x0040, 0x1d2f: 0x0040, - 0x1d30: 0x0018, 0x1d31: 0x0018, 0x1d32: 0x0018, 0x1d33: 0x0018, 0x1d34: 0x0018, 0x1d35: 0x0018, - 0x1d36: 0x0018, 0x1d37: 0x0018, 0x1d38: 0x0018, 0x1d39: 0x0018, 0x1d3a: 0x0018, 0x1d3b: 0x0018, - 0x1d3c: 0x0018, 0x1d3d: 0x0018, 0x1d3e: 0x0018, 0x1d3f: 0x0018, - // Block 0x75, offset 0x1d40 - 0x1d40: 0xc1d9, 0x1d41: 0xc211, 0x1d42: 0xc249, 0x1d43: 0x0040, 0x1d44: 0x0040, 0x1d45: 0x0040, - 0x1d46: 0x0040, 0x1d47: 0x0040, 0x1d48: 0x0040, 0x1d49: 0x0040, 0x1d4a: 0x0040, 0x1d4b: 0x0040, - 0x1d4c: 0x0040, 0x1d4d: 0x0040, 0x1d4e: 0x0040, 0x1d4f: 0x0040, 0x1d50: 0xc269, 0x1d51: 0xc289, - 0x1d52: 0xc2a9, 0x1d53: 0xc2c9, 0x1d54: 0xc2e9, 0x1d55: 0xc309, 0x1d56: 0xc329, 0x1d57: 0xc349, - 0x1d58: 0xc369, 0x1d59: 0xc389, 0x1d5a: 0xc3a9, 0x1d5b: 0xc3c9, 0x1d5c: 0xc3e9, 0x1d5d: 0xc409, - 0x1d5e: 0xc429, 0x1d5f: 0xc449, 0x1d60: 0xc469, 0x1d61: 0xc489, 0x1d62: 0xc4a9, 0x1d63: 0xc4c9, - 0x1d64: 0xc4e9, 0x1d65: 0xc509, 0x1d66: 0xc529, 0x1d67: 0xc549, 0x1d68: 0xc569, 0x1d69: 0xc589, - 0x1d6a: 0xc5a9, 0x1d6b: 0xc5c9, 0x1d6c: 0xc5e9, 0x1d6d: 0xc609, 0x1d6e: 0xc629, 0x1d6f: 0xc649, - 0x1d70: 0xc669, 0x1d71: 0xc689, 0x1d72: 0xc6a9, 0x1d73: 0xc6c9, 0x1d74: 0xc6e9, 0x1d75: 0xc709, - 0x1d76: 0xc729, 0x1d77: 0xc749, 0x1d78: 0xc769, 0x1d79: 0xc789, 0x1d7a: 0xc7a9, 0x1d7b: 0xc7c9, - 0x1d7c: 0x0040, 0x1d7d: 0x0040, 0x1d7e: 0x0040, 0x1d7f: 0x0040, - // Block 0x76, offset 0x1d80 - 0x1d80: 0xcaf9, 0x1d81: 0xcb19, 0x1d82: 0xcb39, 0x1d83: 0x8b1d, 0x1d84: 0xcb59, 0x1d85: 0xcb79, - 0x1d86: 0xcb99, 0x1d87: 0xcbb9, 0x1d88: 0xcbd9, 0x1d89: 0xcbf9, 0x1d8a: 0xcc19, 0x1d8b: 0xcc39, - 0x1d8c: 0xcc59, 0x1d8d: 0x8b3d, 0x1d8e: 0xcc79, 0x1d8f: 0xcc99, 0x1d90: 0xccb9, 0x1d91: 0xccd9, - 0x1d92: 0x8b5d, 0x1d93: 0xccf9, 0x1d94: 0xcd19, 0x1d95: 0xc429, 0x1d96: 0x8b7d, 0x1d97: 0xcd39, - 0x1d98: 0xcd59, 0x1d99: 0xcd79, 0x1d9a: 0xcd99, 0x1d9b: 0xcdb9, 0x1d9c: 0x8b9d, 0x1d9d: 0xcdd9, - 0x1d9e: 0xcdf9, 0x1d9f: 0xce19, 0x1da0: 0xce39, 0x1da1: 0xce59, 0x1da2: 0xc789, 0x1da3: 0xce79, - 0x1da4: 0xce99, 0x1da5: 0xceb9, 0x1da6: 0xced9, 0x1da7: 0xcef9, 0x1da8: 0xcf19, 0x1da9: 0xcf39, - 0x1daa: 0xcf59, 0x1dab: 0xcf79, 0x1dac: 0xcf99, 0x1dad: 0xcfb9, 0x1dae: 0xcfd9, 0x1daf: 0xcff9, - 0x1db0: 0xd019, 0x1db1: 0xd039, 0x1db2: 0xd039, 0x1db3: 0xd039, 0x1db4: 0x8bbd, 0x1db5: 0xd059, - 0x1db6: 0xd079, 0x1db7: 0xd099, 0x1db8: 0x8bdd, 0x1db9: 0xd0b9, 0x1dba: 0xd0d9, 0x1dbb: 0xd0f9, - 0x1dbc: 0xd119, 0x1dbd: 0xd139, 0x1dbe: 0xd159, 0x1dbf: 0xd179, - // Block 0x77, offset 0x1dc0 - 0x1dc0: 0xd199, 0x1dc1: 0xd1b9, 0x1dc2: 0xd1d9, 0x1dc3: 0xd1f9, 0x1dc4: 0xd219, 0x1dc5: 0xd239, - 0x1dc6: 0xd239, 0x1dc7: 0xd259, 0x1dc8: 0xd279, 0x1dc9: 0xd299, 0x1dca: 0xd2b9, 0x1dcb: 0xd2d9, - 0x1dcc: 0xd2f9, 0x1dcd: 0xd319, 0x1dce: 0xd339, 0x1dcf: 0xd359, 0x1dd0: 0xd379, 0x1dd1: 0xd399, - 0x1dd2: 0xd3b9, 0x1dd3: 0xd3d9, 0x1dd4: 0xd3f9, 0x1dd5: 0xd419, 0x1dd6: 0xd439, 0x1dd7: 0xd459, - 0x1dd8: 0xd479, 0x1dd9: 0x8bfd, 0x1dda: 0xd499, 0x1ddb: 0xd4b9, 0x1ddc: 0xd4d9, 0x1ddd: 0xc309, - 0x1dde: 0xd4f9, 0x1ddf: 0xd519, 0x1de0: 0x8c1d, 0x1de1: 0x8c3d, 0x1de2: 0xd539, 0x1de3: 0xd559, - 0x1de4: 0xd579, 0x1de5: 0xd599, 0x1de6: 0xd5b9, 0x1de7: 0xd5d9, 0x1de8: 0x0040, 0x1de9: 0xd5f9, - 0x1dea: 0xd619, 0x1deb: 0xd619, 0x1dec: 0x8c5d, 0x1ded: 0xd639, 0x1dee: 0xd659, 0x1def: 0xd679, - 0x1df0: 0xd699, 0x1df1: 0x8c7d, 0x1df2: 0xd6b9, 0x1df3: 0xd6d9, 0x1df4: 0x0040, 0x1df5: 0xd6f9, - 0x1df6: 0xd719, 0x1df7: 0xd739, 0x1df8: 0xd759, 0x1df9: 0xd779, 0x1dfa: 0xd799, 0x1dfb: 0x8c9d, - 0x1dfc: 0xd7b9, 0x1dfd: 0x8cbd, 0x1dfe: 0xd7d9, 0x1dff: 0xd7f9, - // Block 0x78, offset 0x1e00 - 0x1e00: 0xd819, 0x1e01: 0xd839, 0x1e02: 0xd859, 0x1e03: 0xd879, 0x1e04: 0xd899, 0x1e05: 0xd8b9, - 0x1e06: 0xd8d9, 0x1e07: 0xd8f9, 0x1e08: 0xd919, 0x1e09: 0x8cdd, 0x1e0a: 0xd939, 0x1e0b: 0xd959, - 0x1e0c: 0xd979, 0x1e0d: 0xd999, 0x1e0e: 0xd9b9, 0x1e0f: 0x8cfd, 0x1e10: 0xd9d9, 0x1e11: 0x8d1d, - 0x1e12: 0x8d3d, 0x1e13: 0xd9f9, 0x1e14: 0xda19, 0x1e15: 0xda19, 0x1e16: 0xda39, 0x1e17: 0x8d5d, - 0x1e18: 0x8d7d, 0x1e19: 0xda59, 0x1e1a: 0xda79, 0x1e1b: 0xda99, 0x1e1c: 0xdab9, 0x1e1d: 0xdad9, - 0x1e1e: 0xdaf9, 0x1e1f: 0xdb19, 0x1e20: 0xdb39, 0x1e21: 0xdb59, 0x1e22: 0xdb79, 0x1e23: 0xdb99, - 0x1e24: 0x8d9d, 0x1e25: 0xdbb9, 0x1e26: 0xdbd9, 0x1e27: 0xdbf9, 0x1e28: 0xdc19, 0x1e29: 0xdbf9, - 0x1e2a: 0xdc39, 0x1e2b: 0xdc59, 0x1e2c: 0xdc79, 0x1e2d: 0xdc99, 0x1e2e: 0xdcb9, 0x1e2f: 0xdcd9, - 0x1e30: 0xdcf9, 0x1e31: 0xdd19, 0x1e32: 0xdd39, 0x1e33: 0xdd59, 0x1e34: 0xdd79, 0x1e35: 0xdd99, - 0x1e36: 0xddb9, 0x1e37: 0xddd9, 0x1e38: 0x8dbd, 0x1e39: 0xddf9, 0x1e3a: 0xde19, 0x1e3b: 0xde39, - 0x1e3c: 0xde59, 0x1e3d: 0xde79, 0x1e3e: 0x8ddd, 0x1e3f: 0xde99, - // Block 0x79, offset 0x1e40 - 0x1e40: 0xe599, 0x1e41: 0xe5b9, 0x1e42: 0xe5d9, 0x1e43: 0xe5f9, 0x1e44: 0xe619, 0x1e45: 0xe639, - 0x1e46: 0x8efd, 0x1e47: 0xe659, 0x1e48: 0xe679, 0x1e49: 0xe699, 0x1e4a: 0xe6b9, 0x1e4b: 0xe6d9, - 0x1e4c: 0xe6f9, 0x1e4d: 0x8f1d, 0x1e4e: 0xe719, 0x1e4f: 0xe739, 0x1e50: 0x8f3d, 0x1e51: 0x8f5d, - 0x1e52: 0xe759, 0x1e53: 0xe779, 0x1e54: 0xe799, 0x1e55: 0xe7b9, 0x1e56: 0xe7d9, 0x1e57: 0xe7f9, - 0x1e58: 0xe819, 0x1e59: 0xe839, 0x1e5a: 0xe859, 0x1e5b: 0x8f7d, 0x1e5c: 0xe879, 0x1e5d: 0x8f9d, - 0x1e5e: 0xe899, 0x1e5f: 0x0040, 0x1e60: 0xe8b9, 0x1e61: 0xe8d9, 0x1e62: 0xe8f9, 0x1e63: 0x8fbd, - 0x1e64: 0xe919, 0x1e65: 0xe939, 0x1e66: 0x8fdd, 0x1e67: 0x8ffd, 0x1e68: 0xe959, 0x1e69: 0xe979, - 0x1e6a: 0xe999, 0x1e6b: 0xe9b9, 0x1e6c: 0xe9d9, 0x1e6d: 0xe9d9, 0x1e6e: 0xe9f9, 0x1e6f: 0xea19, - 0x1e70: 0xea39, 0x1e71: 0xea59, 0x1e72: 0xea79, 0x1e73: 0xea99, 0x1e74: 0xeab9, 0x1e75: 0x901d, - 0x1e76: 0xead9, 0x1e77: 0x903d, 0x1e78: 0xeaf9, 0x1e79: 0x905d, 0x1e7a: 0xeb19, 0x1e7b: 0x907d, - 0x1e7c: 0x909d, 0x1e7d: 0x90bd, 0x1e7e: 0xeb39, 0x1e7f: 0xeb59, - // Block 0x7a, offset 0x1e80 - 0x1e80: 0xeb79, 0x1e81: 0x90dd, 0x1e82: 0x90fd, 0x1e83: 0x911d, 0x1e84: 0x913d, 0x1e85: 0xeb99, - 0x1e86: 0xebb9, 0x1e87: 0xebb9, 0x1e88: 0xebd9, 0x1e89: 0xebf9, 0x1e8a: 0xec19, 0x1e8b: 0xec39, - 0x1e8c: 0xec59, 0x1e8d: 0x915d, 0x1e8e: 0xec79, 0x1e8f: 0xec99, 0x1e90: 0xecb9, 0x1e91: 0xecd9, - 0x1e92: 0x917d, 0x1e93: 0xecf9, 0x1e94: 0x919d, 0x1e95: 0x91bd, 0x1e96: 0xed19, 0x1e97: 0xed39, - 0x1e98: 0xed59, 0x1e99: 0xed79, 0x1e9a: 0xed99, 0x1e9b: 0xedb9, 0x1e9c: 0x91dd, 0x1e9d: 0x91fd, - 0x1e9e: 0x921d, 0x1e9f: 0x0040, 0x1ea0: 0xedd9, 0x1ea1: 0x923d, 0x1ea2: 0xedf9, 0x1ea3: 0xee19, - 0x1ea4: 0xee39, 0x1ea5: 0x925d, 0x1ea6: 0xee59, 0x1ea7: 0xee79, 0x1ea8: 0xee99, 0x1ea9: 0xeeb9, - 0x1eaa: 0xeed9, 0x1eab: 0x927d, 0x1eac: 0xeef9, 0x1ead: 0xef19, 0x1eae: 0xef39, 0x1eaf: 0xef59, - 0x1eb0: 0xef79, 0x1eb1: 0xef99, 0x1eb2: 0x929d, 0x1eb3: 0x92bd, 0x1eb4: 0xefb9, 0x1eb5: 0x92dd, - 0x1eb6: 0xefd9, 0x1eb7: 0x92fd, 0x1eb8: 0xeff9, 0x1eb9: 0xf019, 0x1eba: 0xf039, 0x1ebb: 0x931d, - 0x1ebc: 0x933d, 0x1ebd: 0xf059, 0x1ebe: 0x935d, 0x1ebf: 0xf079, - // Block 0x7b, offset 0x1ec0 - 0x1ec0: 0xf6b9, 0x1ec1: 0xf6d9, 0x1ec2: 0xf6f9, 0x1ec3: 0xf719, 0x1ec4: 0xf739, 0x1ec5: 0x951d, - 0x1ec6: 0xf759, 0x1ec7: 0xf779, 0x1ec8: 0xf799, 0x1ec9: 0xf7b9, 0x1eca: 0xf7d9, 0x1ecb: 0x953d, - 0x1ecc: 0x955d, 0x1ecd: 0xf7f9, 0x1ece: 0xf819, 0x1ecf: 0xf839, 0x1ed0: 0xf859, 0x1ed1: 0xf879, - 0x1ed2: 0xf899, 0x1ed3: 0x957d, 0x1ed4: 0xf8b9, 0x1ed5: 0xf8d9, 0x1ed6: 0xf8f9, 0x1ed7: 0xf919, - 0x1ed8: 0x959d, 0x1ed9: 0x95bd, 0x1eda: 0xf939, 0x1edb: 0xf959, 0x1edc: 0xf979, 0x1edd: 0x95dd, - 0x1ede: 0xf999, 0x1edf: 0xf9b9, 0x1ee0: 0x6815, 0x1ee1: 0x95fd, 0x1ee2: 0xf9d9, 0x1ee3: 0xf9f9, - 0x1ee4: 0xfa19, 0x1ee5: 0x961d, 0x1ee6: 0xfa39, 0x1ee7: 0xfa59, 0x1ee8: 0xfa79, 0x1ee9: 0xfa99, - 0x1eea: 0xfab9, 0x1eeb: 0xfad9, 0x1eec: 0xfaf9, 0x1eed: 0x963d, 0x1eee: 0xfb19, 0x1eef: 0xfb39, - 0x1ef0: 0xfb59, 0x1ef1: 0x965d, 0x1ef2: 0xfb79, 0x1ef3: 0xfb99, 0x1ef4: 0xfbb9, 0x1ef5: 0xfbd9, - 0x1ef6: 0x7b35, 0x1ef7: 0x967d, 0x1ef8: 0xfbf9, 0x1ef9: 0xfc19, 0x1efa: 0xfc39, 0x1efb: 0x969d, - 0x1efc: 0xfc59, 0x1efd: 0x96bd, 0x1efe: 0xfc79, 0x1eff: 0xfc79, - // Block 0x7c, offset 0x1f00 - 0x1f00: 0xfc99, 0x1f01: 0x96dd, 0x1f02: 0xfcb9, 0x1f03: 0xfcd9, 0x1f04: 0xfcf9, 0x1f05: 0xfd19, - 0x1f06: 0xfd39, 0x1f07: 0xfd59, 0x1f08: 0xfd79, 0x1f09: 0x96fd, 0x1f0a: 0xfd99, 0x1f0b: 0xfdb9, - 0x1f0c: 0xfdd9, 0x1f0d: 0xfdf9, 0x1f0e: 0xfe19, 0x1f0f: 0xfe39, 0x1f10: 0x971d, 0x1f11: 0xfe59, - 0x1f12: 0x973d, 0x1f13: 0x975d, 0x1f14: 0x977d, 0x1f15: 0xfe79, 0x1f16: 0xfe99, 0x1f17: 0xfeb9, - 0x1f18: 0xfed9, 0x1f19: 0xfef9, 0x1f1a: 0xff19, 0x1f1b: 0xff39, 0x1f1c: 0xff59, 0x1f1d: 0x979d, - 0x1f1e: 0x0040, 0x1f1f: 0x0040, 0x1f20: 0x0040, 0x1f21: 0x0040, 0x1f22: 0x0040, 0x1f23: 0x0040, - 0x1f24: 0x0040, 0x1f25: 0x0040, 0x1f26: 0x0040, 0x1f27: 0x0040, 0x1f28: 0x0040, 0x1f29: 0x0040, - 0x1f2a: 0x0040, 0x1f2b: 0x0040, 0x1f2c: 0x0040, 0x1f2d: 0x0040, 0x1f2e: 0x0040, 0x1f2f: 0x0040, - 0x1f30: 0x0040, 0x1f31: 0x0040, 0x1f32: 0x0040, 0x1f33: 0x0040, 0x1f34: 0x0040, 0x1f35: 0x0040, - 0x1f36: 0x0040, 0x1f37: 0x0040, 0x1f38: 0x0040, 0x1f39: 0x0040, 0x1f3a: 0x0040, 0x1f3b: 0x0040, - 0x1f3c: 0x0040, 0x1f3d: 0x0040, 0x1f3e: 0x0040, 0x1f3f: 0x0040, -} - -// idnaIndex: 35 blocks, 2240 entries, 4480 bytes -// Block 0 is the zero block. -var idnaIndex = [2240]uint16{ - // Block 0x0, offset 0x0 - // Block 0x1, offset 0x40 - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc2: 0x01, 0xc3: 0x7b, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x04, 0xc7: 0x05, - 0xc8: 0x06, 0xc9: 0x7c, 0xca: 0x7d, 0xcb: 0x07, 0xcc: 0x7e, 0xcd: 0x08, 0xce: 0x09, 0xcf: 0x0a, - 0xd0: 0x7f, 0xd1: 0x0b, 0xd2: 0x0c, 0xd3: 0x0d, 0xd4: 0x0e, 0xd5: 0x80, 0xd6: 0x81, 0xd7: 0x82, - 0xd8: 0x0f, 0xd9: 0x83, 0xda: 0x84, 0xdb: 0x10, 0xdc: 0x11, 0xdd: 0x85, 0xde: 0x86, 0xdf: 0x87, - 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, 0xe5: 0x07, 0xe6: 0x07, 0xe7: 0x07, - 0xe8: 0x07, 0xe9: 0x08, 0xea: 0x09, 0xeb: 0x07, 0xec: 0x07, 0xed: 0x0a, 0xee: 0x0b, 0xef: 0x0c, - 0xf0: 0x1c, 0xf1: 0x1d, 0xf2: 0x1d, 0xf3: 0x1f, 0xf4: 0x20, - // Block 0x4, offset 0x100 - 0x120: 0x88, 0x121: 0x89, 0x122: 0x8a, 0x123: 0x8b, 0x124: 0x8c, 0x125: 0x12, 0x126: 0x13, 0x127: 0x14, - 0x128: 0x15, 0x129: 0x16, 0x12a: 0x17, 0x12b: 0x18, 0x12c: 0x19, 0x12d: 0x1a, 0x12e: 0x1b, 0x12f: 0x8d, - 0x130: 0x8e, 0x131: 0x1c, 0x132: 0x1d, 0x133: 0x1e, 0x134: 0x8f, 0x135: 0x1f, 0x136: 0x90, 0x137: 0x91, - 0x138: 0x92, 0x139: 0x93, 0x13a: 0x20, 0x13b: 0x94, 0x13c: 0x95, 0x13d: 0x21, 0x13e: 0x22, 0x13f: 0x96, - // Block 0x5, offset 0x140 - 0x140: 0x97, 0x141: 0x98, 0x142: 0x99, 0x143: 0x9a, 0x144: 0x9b, 0x145: 0x9c, 0x146: 0x9b, 0x147: 0x9b, - 0x148: 0x9d, 0x149: 0x9e, 0x14a: 0x9f, 0x14b: 0xa0, 0x14c: 0xa1, 0x14d: 0xa2, 0x14e: 0xa3, 0x14f: 0xa4, - 0x150: 0xa5, 0x151: 0x9d, 0x152: 0x9d, 0x153: 0x9d, 0x154: 0x9d, 0x155: 0x9d, 0x156: 0x9d, 0x157: 0x9d, - 0x158: 0x9d, 0x159: 0xa6, 0x15a: 0xa7, 0x15b: 0xa8, 0x15c: 0xa9, 0x15d: 0xaa, 0x15e: 0xab, 0x15f: 0xac, - 0x160: 0xad, 0x161: 0xae, 0x162: 0xaf, 0x163: 0xb0, 0x164: 0xb1, 0x165: 0xb2, 0x166: 0xb3, 0x167: 0xb4, - 0x168: 0xb5, 0x169: 0xb6, 0x16a: 0xb7, 0x16b: 0xb8, 0x16c: 0xb9, 0x16d: 0xba, 0x16e: 0xbb, 0x16f: 0xbc, - 0x170: 0xbd, 0x171: 0xbe, 0x172: 0xbf, 0x173: 0xc0, 0x174: 0x23, 0x175: 0x24, 0x176: 0x25, 0x177: 0xc1, - 0x178: 0x26, 0x179: 0x26, 0x17a: 0x27, 0x17b: 0x26, 0x17c: 0xc2, 0x17d: 0x28, 0x17e: 0x29, 0x17f: 0x2a, - // Block 0x6, offset 0x180 - 0x180: 0x2b, 0x181: 0x2c, 0x182: 0x2d, 0x183: 0xc3, 0x184: 0x2e, 0x185: 0x2f, 0x186: 0xc4, 0x187: 0x9b, - 0x188: 0xc5, 0x189: 0xc6, 0x18a: 0x9b, 0x18b: 0x9b, 0x18c: 0xc7, 0x18d: 0x9b, 0x18e: 0x9b, 0x18f: 0xc8, - 0x190: 0xc9, 0x191: 0x30, 0x192: 0x31, 0x193: 0x32, 0x194: 0x9b, 0x195: 0x9b, 0x196: 0x9b, 0x197: 0x9b, - 0x198: 0x9b, 0x199: 0x9b, 0x19a: 0x9b, 0x19b: 0x9b, 0x19c: 0x9b, 0x19d: 0x9b, 0x19e: 0x9b, 0x19f: 0x9b, - 0x1a0: 0x9b, 0x1a1: 0x9b, 0x1a2: 0x9b, 0x1a3: 0x9b, 0x1a4: 0x9b, 0x1a5: 0x9b, 0x1a6: 0x9b, 0x1a7: 0x9b, - 0x1a8: 0xca, 0x1a9: 0xcb, 0x1aa: 0x9b, 0x1ab: 0xcc, 0x1ac: 0x9b, 0x1ad: 0xcd, 0x1ae: 0xce, 0x1af: 0xcf, - 0x1b0: 0xd0, 0x1b1: 0x33, 0x1b2: 0x26, 0x1b3: 0x34, 0x1b4: 0xd1, 0x1b5: 0xd2, 0x1b6: 0xd3, 0x1b7: 0xd4, - 0x1b8: 0xd5, 0x1b9: 0xd6, 0x1ba: 0xd7, 0x1bb: 0xd8, 0x1bc: 0xd9, 0x1bd: 0xda, 0x1be: 0xdb, 0x1bf: 0x35, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x36, 0x1c1: 0xdc, 0x1c2: 0xdd, 0x1c3: 0xde, 0x1c4: 0xdf, 0x1c5: 0x37, 0x1c6: 0x38, 0x1c7: 0xe0, - 0x1c8: 0xe1, 0x1c9: 0x39, 0x1ca: 0x3a, 0x1cb: 0x3b, 0x1cc: 0x3c, 0x1cd: 0x3d, 0x1ce: 0x3e, 0x1cf: 0x3f, - 0x1d0: 0x9d, 0x1d1: 0x9d, 0x1d2: 0x9d, 0x1d3: 0x9d, 0x1d4: 0x9d, 0x1d5: 0x9d, 0x1d6: 0x9d, 0x1d7: 0x9d, - 0x1d8: 0x9d, 0x1d9: 0x9d, 0x1da: 0x9d, 0x1db: 0x9d, 0x1dc: 0x9d, 0x1dd: 0x9d, 0x1de: 0x9d, 0x1df: 0x9d, - 0x1e0: 0x9d, 0x1e1: 0x9d, 0x1e2: 0x9d, 0x1e3: 0x9d, 0x1e4: 0x9d, 0x1e5: 0x9d, 0x1e6: 0x9d, 0x1e7: 0x9d, - 0x1e8: 0x9d, 0x1e9: 0x9d, 0x1ea: 0x9d, 0x1eb: 0x9d, 0x1ec: 0x9d, 0x1ed: 0x9d, 0x1ee: 0x9d, 0x1ef: 0x9d, - 0x1f0: 0x9d, 0x1f1: 0x9d, 0x1f2: 0x9d, 0x1f3: 0x9d, 0x1f4: 0x9d, 0x1f5: 0x9d, 0x1f6: 0x9d, 0x1f7: 0x9d, - 0x1f8: 0x9d, 0x1f9: 0x9d, 0x1fa: 0x9d, 0x1fb: 0x9d, 0x1fc: 0x9d, 0x1fd: 0x9d, 0x1fe: 0x9d, 0x1ff: 0x9d, - // Block 0x8, offset 0x200 - 0x200: 0x9d, 0x201: 0x9d, 0x202: 0x9d, 0x203: 0x9d, 0x204: 0x9d, 0x205: 0x9d, 0x206: 0x9d, 0x207: 0x9d, - 0x208: 0x9d, 0x209: 0x9d, 0x20a: 0x9d, 0x20b: 0x9d, 0x20c: 0x9d, 0x20d: 0x9d, 0x20e: 0x9d, 0x20f: 0x9d, - 0x210: 0x9d, 0x211: 0x9d, 0x212: 0x9d, 0x213: 0x9d, 0x214: 0x9d, 0x215: 0x9d, 0x216: 0x9d, 0x217: 0x9d, - 0x218: 0x9d, 0x219: 0x9d, 0x21a: 0x9d, 0x21b: 0x9d, 0x21c: 0x9d, 0x21d: 0x9d, 0x21e: 0x9d, 0x21f: 0x9d, - 0x220: 0x9d, 0x221: 0x9d, 0x222: 0x9d, 0x223: 0x9d, 0x224: 0x9d, 0x225: 0x9d, 0x226: 0x9d, 0x227: 0x9d, - 0x228: 0x9d, 0x229: 0x9d, 0x22a: 0x9d, 0x22b: 0x9d, 0x22c: 0x9d, 0x22d: 0x9d, 0x22e: 0x9d, 0x22f: 0x9d, - 0x230: 0x9d, 0x231: 0x9d, 0x232: 0x9d, 0x233: 0x9d, 0x234: 0x9d, 0x235: 0x9d, 0x236: 0xb0, 0x237: 0x9b, - 0x238: 0x9d, 0x239: 0x9d, 0x23a: 0x9d, 0x23b: 0x9d, 0x23c: 0x9d, 0x23d: 0x9d, 0x23e: 0x9d, 0x23f: 0x9d, - // Block 0x9, offset 0x240 - 0x240: 0x9d, 0x241: 0x9d, 0x242: 0x9d, 0x243: 0x9d, 0x244: 0x9d, 0x245: 0x9d, 0x246: 0x9d, 0x247: 0x9d, - 0x248: 0x9d, 0x249: 0x9d, 0x24a: 0x9d, 0x24b: 0x9d, 0x24c: 0x9d, 0x24d: 0x9d, 0x24e: 0x9d, 0x24f: 0x9d, - 0x250: 0x9d, 0x251: 0x9d, 0x252: 0x9d, 0x253: 0x9d, 0x254: 0x9d, 0x255: 0x9d, 0x256: 0x9d, 0x257: 0x9d, - 0x258: 0x9d, 0x259: 0x9d, 0x25a: 0x9d, 0x25b: 0x9d, 0x25c: 0x9d, 0x25d: 0x9d, 0x25e: 0x9d, 0x25f: 0x9d, - 0x260: 0x9d, 0x261: 0x9d, 0x262: 0x9d, 0x263: 0x9d, 0x264: 0x9d, 0x265: 0x9d, 0x266: 0x9d, 0x267: 0x9d, - 0x268: 0x9d, 0x269: 0x9d, 0x26a: 0x9d, 0x26b: 0x9d, 0x26c: 0x9d, 0x26d: 0x9d, 0x26e: 0x9d, 0x26f: 0x9d, - 0x270: 0x9d, 0x271: 0x9d, 0x272: 0x9d, 0x273: 0x9d, 0x274: 0x9d, 0x275: 0x9d, 0x276: 0x9d, 0x277: 0x9d, - 0x278: 0x9d, 0x279: 0x9d, 0x27a: 0x9d, 0x27b: 0x9d, 0x27c: 0x9d, 0x27d: 0x9d, 0x27e: 0x9d, 0x27f: 0x9d, - // Block 0xa, offset 0x280 - 0x280: 0x9d, 0x281: 0x9d, 0x282: 0x9d, 0x283: 0x9d, 0x284: 0x9d, 0x285: 0x9d, 0x286: 0x9d, 0x287: 0x9d, - 0x288: 0x9d, 0x289: 0x9d, 0x28a: 0x9d, 0x28b: 0x9d, 0x28c: 0x9d, 0x28d: 0x9d, 0x28e: 0x9d, 0x28f: 0x9d, - 0x290: 0x9d, 0x291: 0x9d, 0x292: 0x9d, 0x293: 0x9d, 0x294: 0x9d, 0x295: 0x9d, 0x296: 0x9d, 0x297: 0x9d, - 0x298: 0x9d, 0x299: 0x9d, 0x29a: 0x9d, 0x29b: 0x9d, 0x29c: 0x9d, 0x29d: 0x9d, 0x29e: 0x9d, 0x29f: 0x9d, - 0x2a0: 0x9d, 0x2a1: 0x9d, 0x2a2: 0x9d, 0x2a3: 0x9d, 0x2a4: 0x9d, 0x2a5: 0x9d, 0x2a6: 0x9d, 0x2a7: 0x9d, - 0x2a8: 0x9d, 0x2a9: 0x9d, 0x2aa: 0x9d, 0x2ab: 0x9d, 0x2ac: 0x9d, 0x2ad: 0x9d, 0x2ae: 0x9d, 0x2af: 0x9d, - 0x2b0: 0x9d, 0x2b1: 0x9d, 0x2b2: 0x9d, 0x2b3: 0x9d, 0x2b4: 0x9d, 0x2b5: 0x9d, 0x2b6: 0x9d, 0x2b7: 0x9d, - 0x2b8: 0x9d, 0x2b9: 0x9d, 0x2ba: 0x9d, 0x2bb: 0x9d, 0x2bc: 0x9d, 0x2bd: 0x9d, 0x2be: 0x9d, 0x2bf: 0xe2, - // Block 0xb, offset 0x2c0 - 0x2c0: 0x9d, 0x2c1: 0x9d, 0x2c2: 0x9d, 0x2c3: 0x9d, 0x2c4: 0x9d, 0x2c5: 0x9d, 0x2c6: 0x9d, 0x2c7: 0x9d, - 0x2c8: 0x9d, 0x2c9: 0x9d, 0x2ca: 0x9d, 0x2cb: 0x9d, 0x2cc: 0x9d, 0x2cd: 0x9d, 0x2ce: 0x9d, 0x2cf: 0x9d, - 0x2d0: 0x9d, 0x2d1: 0x9d, 0x2d2: 0xe3, 0x2d3: 0xe4, 0x2d4: 0x9d, 0x2d5: 0x9d, 0x2d6: 0x9d, 0x2d7: 0x9d, - 0x2d8: 0xe5, 0x2d9: 0x40, 0x2da: 0x41, 0x2db: 0xe6, 0x2dc: 0x42, 0x2dd: 0x43, 0x2de: 0x44, 0x2df: 0xe7, - 0x2e0: 0xe8, 0x2e1: 0xe9, 0x2e2: 0xea, 0x2e3: 0xeb, 0x2e4: 0xec, 0x2e5: 0xed, 0x2e6: 0xee, 0x2e7: 0xef, - 0x2e8: 0xf0, 0x2e9: 0xf1, 0x2ea: 0xf2, 0x2eb: 0xf3, 0x2ec: 0xf4, 0x2ed: 0xf5, 0x2ee: 0xf6, 0x2ef: 0xf7, - 0x2f0: 0x9d, 0x2f1: 0x9d, 0x2f2: 0x9d, 0x2f3: 0x9d, 0x2f4: 0x9d, 0x2f5: 0x9d, 0x2f6: 0x9d, 0x2f7: 0x9d, - 0x2f8: 0x9d, 0x2f9: 0x9d, 0x2fa: 0x9d, 0x2fb: 0x9d, 0x2fc: 0x9d, 0x2fd: 0x9d, 0x2fe: 0x9d, 0x2ff: 0x9d, - // Block 0xc, offset 0x300 - 0x300: 0x9d, 0x301: 0x9d, 0x302: 0x9d, 0x303: 0x9d, 0x304: 0x9d, 0x305: 0x9d, 0x306: 0x9d, 0x307: 0x9d, - 0x308: 0x9d, 0x309: 0x9d, 0x30a: 0x9d, 0x30b: 0x9d, 0x30c: 0x9d, 0x30d: 0x9d, 0x30e: 0x9d, 0x30f: 0x9d, - 0x310: 0x9d, 0x311: 0x9d, 0x312: 0x9d, 0x313: 0x9d, 0x314: 0x9d, 0x315: 0x9d, 0x316: 0x9d, 0x317: 0x9d, - 0x318: 0x9d, 0x319: 0x9d, 0x31a: 0x9d, 0x31b: 0x9d, 0x31c: 0x9d, 0x31d: 0x9d, 0x31e: 0xf8, 0x31f: 0xf9, - // Block 0xd, offset 0x340 - 0x340: 0xb8, 0x341: 0xb8, 0x342: 0xb8, 0x343: 0xb8, 0x344: 0xb8, 0x345: 0xb8, 0x346: 0xb8, 0x347: 0xb8, - 0x348: 0xb8, 0x349: 0xb8, 0x34a: 0xb8, 0x34b: 0xb8, 0x34c: 0xb8, 0x34d: 0xb8, 0x34e: 0xb8, 0x34f: 0xb8, - 0x350: 0xb8, 0x351: 0xb8, 0x352: 0xb8, 0x353: 0xb8, 0x354: 0xb8, 0x355: 0xb8, 0x356: 0xb8, 0x357: 0xb8, - 0x358: 0xb8, 0x359: 0xb8, 0x35a: 0xb8, 0x35b: 0xb8, 0x35c: 0xb8, 0x35d: 0xb8, 0x35e: 0xb8, 0x35f: 0xb8, - 0x360: 0xb8, 0x361: 0xb8, 0x362: 0xb8, 0x363: 0xb8, 0x364: 0xb8, 0x365: 0xb8, 0x366: 0xb8, 0x367: 0xb8, - 0x368: 0xb8, 0x369: 0xb8, 0x36a: 0xb8, 0x36b: 0xb8, 0x36c: 0xb8, 0x36d: 0xb8, 0x36e: 0xb8, 0x36f: 0xb8, - 0x370: 0xb8, 0x371: 0xb8, 0x372: 0xb8, 0x373: 0xb8, 0x374: 0xb8, 0x375: 0xb8, 0x376: 0xb8, 0x377: 0xb8, - 0x378: 0xb8, 0x379: 0xb8, 0x37a: 0xb8, 0x37b: 0xb8, 0x37c: 0xb8, 0x37d: 0xb8, 0x37e: 0xb8, 0x37f: 0xb8, - // Block 0xe, offset 0x380 - 0x380: 0xb8, 0x381: 0xb8, 0x382: 0xb8, 0x383: 0xb8, 0x384: 0xb8, 0x385: 0xb8, 0x386: 0xb8, 0x387: 0xb8, - 0x388: 0xb8, 0x389: 0xb8, 0x38a: 0xb8, 0x38b: 0xb8, 0x38c: 0xb8, 0x38d: 0xb8, 0x38e: 0xb8, 0x38f: 0xb8, - 0x390: 0xb8, 0x391: 0xb8, 0x392: 0xb8, 0x393: 0xb8, 0x394: 0xb8, 0x395: 0xb8, 0x396: 0xb8, 0x397: 0xb8, - 0x398: 0xb8, 0x399: 0xb8, 0x39a: 0xb8, 0x39b: 0xb8, 0x39c: 0xb8, 0x39d: 0xb8, 0x39e: 0xb8, 0x39f: 0xb8, - 0x3a0: 0xb8, 0x3a1: 0xb8, 0x3a2: 0xb8, 0x3a3: 0xb8, 0x3a4: 0xfa, 0x3a5: 0xfb, 0x3a6: 0xfc, 0x3a7: 0xfd, - 0x3a8: 0x45, 0x3a9: 0xfe, 0x3aa: 0xff, 0x3ab: 0x46, 0x3ac: 0x47, 0x3ad: 0x48, 0x3ae: 0x49, 0x3af: 0x4a, - 0x3b0: 0x100, 0x3b1: 0x4b, 0x3b2: 0x4c, 0x3b3: 0x4d, 0x3b4: 0x4e, 0x3b5: 0x4f, 0x3b6: 0x101, 0x3b7: 0x50, - 0x3b8: 0x51, 0x3b9: 0x52, 0x3ba: 0x53, 0x3bb: 0x54, 0x3bc: 0x55, 0x3bd: 0x56, 0x3be: 0x57, 0x3bf: 0x58, - // Block 0xf, offset 0x3c0 - 0x3c0: 0x102, 0x3c1: 0x103, 0x3c2: 0x9d, 0x3c3: 0x104, 0x3c4: 0x105, 0x3c5: 0x9b, 0x3c6: 0x106, 0x3c7: 0x107, - 0x3c8: 0xb8, 0x3c9: 0xb8, 0x3ca: 0x108, 0x3cb: 0x109, 0x3cc: 0x10a, 0x3cd: 0x10b, 0x3ce: 0x10c, 0x3cf: 0x10d, - 0x3d0: 0x10e, 0x3d1: 0x9d, 0x3d2: 0x10f, 0x3d3: 0x110, 0x3d4: 0x111, 0x3d5: 0x112, 0x3d6: 0xb8, 0x3d7: 0xb8, - 0x3d8: 0x9d, 0x3d9: 0x9d, 0x3da: 0x9d, 0x3db: 0x9d, 0x3dc: 0x113, 0x3dd: 0x114, 0x3de: 0xb8, 0x3df: 0xb8, - 0x3e0: 0x115, 0x3e1: 0x116, 0x3e2: 0x117, 0x3e3: 0x118, 0x3e4: 0x119, 0x3e5: 0xb8, 0x3e6: 0x11a, 0x3e7: 0x11b, - 0x3e8: 0x11c, 0x3e9: 0x11d, 0x3ea: 0x11e, 0x3eb: 0x59, 0x3ec: 0x11f, 0x3ed: 0x120, 0x3ee: 0x5a, 0x3ef: 0xb8, - 0x3f0: 0x9d, 0x3f1: 0x121, 0x3f2: 0x122, 0x3f3: 0x123, 0x3f4: 0xb8, 0x3f5: 0xb8, 0x3f6: 0xb8, 0x3f7: 0xb8, - 0x3f8: 0xb8, 0x3f9: 0x124, 0x3fa: 0xb8, 0x3fb: 0xb8, 0x3fc: 0xb8, 0x3fd: 0xb8, 0x3fe: 0xb8, 0x3ff: 0xb8, - // Block 0x10, offset 0x400 - 0x400: 0x125, 0x401: 0x126, 0x402: 0x127, 0x403: 0x128, 0x404: 0x129, 0x405: 0x12a, 0x406: 0x12b, 0x407: 0x12c, - 0x408: 0x12d, 0x409: 0xb8, 0x40a: 0x12e, 0x40b: 0x12f, 0x40c: 0x5b, 0x40d: 0x5c, 0x40e: 0xb8, 0x40f: 0xb8, - 0x410: 0x130, 0x411: 0x131, 0x412: 0x132, 0x413: 0x133, 0x414: 0xb8, 0x415: 0xb8, 0x416: 0x134, 0x417: 0x135, - 0x418: 0x136, 0x419: 0x137, 0x41a: 0x138, 0x41b: 0x139, 0x41c: 0x13a, 0x41d: 0xb8, 0x41e: 0xb8, 0x41f: 0xb8, - 0x420: 0xb8, 0x421: 0xb8, 0x422: 0x13b, 0x423: 0x13c, 0x424: 0xb8, 0x425: 0xb8, 0x426: 0xb8, 0x427: 0xb8, - 0x428: 0xb8, 0x429: 0xb8, 0x42a: 0xb8, 0x42b: 0x13d, 0x42c: 0xb8, 0x42d: 0xb8, 0x42e: 0xb8, 0x42f: 0xb8, - 0x430: 0x13e, 0x431: 0x13f, 0x432: 0x140, 0x433: 0xb8, 0x434: 0xb8, 0x435: 0xb8, 0x436: 0xb8, 0x437: 0xb8, - 0x438: 0xb8, 0x439: 0xb8, 0x43a: 0xb8, 0x43b: 0xb8, 0x43c: 0xb8, 0x43d: 0xb8, 0x43e: 0xb8, 0x43f: 0xb8, - // Block 0x11, offset 0x440 - 0x440: 0x9d, 0x441: 0x9d, 0x442: 0x9d, 0x443: 0x9d, 0x444: 0x9d, 0x445: 0x9d, 0x446: 0x9d, 0x447: 0x9d, - 0x448: 0x9d, 0x449: 0x9d, 0x44a: 0x9d, 0x44b: 0x9d, 0x44c: 0x9d, 0x44d: 0x9d, 0x44e: 0x141, 0x44f: 0xb8, - 0x450: 0x9b, 0x451: 0x142, 0x452: 0x9d, 0x453: 0x9d, 0x454: 0x9d, 0x455: 0x143, 0x456: 0xb8, 0x457: 0xb8, - 0x458: 0xb8, 0x459: 0xb8, 0x45a: 0xb8, 0x45b: 0xb8, 0x45c: 0xb8, 0x45d: 0xb8, 0x45e: 0xb8, 0x45f: 0xb8, - 0x460: 0xb8, 0x461: 0xb8, 0x462: 0xb8, 0x463: 0xb8, 0x464: 0xb8, 0x465: 0xb8, 0x466: 0xb8, 0x467: 0xb8, - 0x468: 0xb8, 0x469: 0xb8, 0x46a: 0xb8, 0x46b: 0xb8, 0x46c: 0xb8, 0x46d: 0xb8, 0x46e: 0xb8, 0x46f: 0xb8, - 0x470: 0xb8, 0x471: 0xb8, 0x472: 0xb8, 0x473: 0xb8, 0x474: 0xb8, 0x475: 0xb8, 0x476: 0xb8, 0x477: 0xb8, - 0x478: 0xb8, 0x479: 0xb8, 0x47a: 0xb8, 0x47b: 0xb8, 0x47c: 0xb8, 0x47d: 0xb8, 0x47e: 0xb8, 0x47f: 0xb8, - // Block 0x12, offset 0x480 - 0x480: 0x9d, 0x481: 0x9d, 0x482: 0x9d, 0x483: 0x9d, 0x484: 0x9d, 0x485: 0x9d, 0x486: 0x9d, 0x487: 0x9d, - 0x488: 0x9d, 0x489: 0x9d, 0x48a: 0x9d, 0x48b: 0x9d, 0x48c: 0x9d, 0x48d: 0x9d, 0x48e: 0x9d, 0x48f: 0x9d, - 0x490: 0x144, 0x491: 0xb8, 0x492: 0xb8, 0x493: 0xb8, 0x494: 0xb8, 0x495: 0xb8, 0x496: 0xb8, 0x497: 0xb8, - 0x498: 0xb8, 0x499: 0xb8, 0x49a: 0xb8, 0x49b: 0xb8, 0x49c: 0xb8, 0x49d: 0xb8, 0x49e: 0xb8, 0x49f: 0xb8, - 0x4a0: 0xb8, 0x4a1: 0xb8, 0x4a2: 0xb8, 0x4a3: 0xb8, 0x4a4: 0xb8, 0x4a5: 0xb8, 0x4a6: 0xb8, 0x4a7: 0xb8, - 0x4a8: 0xb8, 0x4a9: 0xb8, 0x4aa: 0xb8, 0x4ab: 0xb8, 0x4ac: 0xb8, 0x4ad: 0xb8, 0x4ae: 0xb8, 0x4af: 0xb8, - 0x4b0: 0xb8, 0x4b1: 0xb8, 0x4b2: 0xb8, 0x4b3: 0xb8, 0x4b4: 0xb8, 0x4b5: 0xb8, 0x4b6: 0xb8, 0x4b7: 0xb8, - 0x4b8: 0xb8, 0x4b9: 0xb8, 0x4ba: 0xb8, 0x4bb: 0xb8, 0x4bc: 0xb8, 0x4bd: 0xb8, 0x4be: 0xb8, 0x4bf: 0xb8, - // Block 0x13, offset 0x4c0 - 0x4c0: 0xb8, 0x4c1: 0xb8, 0x4c2: 0xb8, 0x4c3: 0xb8, 0x4c4: 0xb8, 0x4c5: 0xb8, 0x4c6: 0xb8, 0x4c7: 0xb8, - 0x4c8: 0xb8, 0x4c9: 0xb8, 0x4ca: 0xb8, 0x4cb: 0xb8, 0x4cc: 0xb8, 0x4cd: 0xb8, 0x4ce: 0xb8, 0x4cf: 0xb8, - 0x4d0: 0x9d, 0x4d1: 0x9d, 0x4d2: 0x9d, 0x4d3: 0x9d, 0x4d4: 0x9d, 0x4d5: 0x9d, 0x4d6: 0x9d, 0x4d7: 0x9d, - 0x4d8: 0x9d, 0x4d9: 0x145, 0x4da: 0xb8, 0x4db: 0xb8, 0x4dc: 0xb8, 0x4dd: 0xb8, 0x4de: 0xb8, 0x4df: 0xb8, - 0x4e0: 0xb8, 0x4e1: 0xb8, 0x4e2: 0xb8, 0x4e3: 0xb8, 0x4e4: 0xb8, 0x4e5: 0xb8, 0x4e6: 0xb8, 0x4e7: 0xb8, - 0x4e8: 0xb8, 0x4e9: 0xb8, 0x4ea: 0xb8, 0x4eb: 0xb8, 0x4ec: 0xb8, 0x4ed: 0xb8, 0x4ee: 0xb8, 0x4ef: 0xb8, - 0x4f0: 0xb8, 0x4f1: 0xb8, 0x4f2: 0xb8, 0x4f3: 0xb8, 0x4f4: 0xb8, 0x4f5: 0xb8, 0x4f6: 0xb8, 0x4f7: 0xb8, - 0x4f8: 0xb8, 0x4f9: 0xb8, 0x4fa: 0xb8, 0x4fb: 0xb8, 0x4fc: 0xb8, 0x4fd: 0xb8, 0x4fe: 0xb8, 0x4ff: 0xb8, - // Block 0x14, offset 0x500 - 0x500: 0xb8, 0x501: 0xb8, 0x502: 0xb8, 0x503: 0xb8, 0x504: 0xb8, 0x505: 0xb8, 0x506: 0xb8, 0x507: 0xb8, - 0x508: 0xb8, 0x509: 0xb8, 0x50a: 0xb8, 0x50b: 0xb8, 0x50c: 0xb8, 0x50d: 0xb8, 0x50e: 0xb8, 0x50f: 0xb8, - 0x510: 0xb8, 0x511: 0xb8, 0x512: 0xb8, 0x513: 0xb8, 0x514: 0xb8, 0x515: 0xb8, 0x516: 0xb8, 0x517: 0xb8, - 0x518: 0xb8, 0x519: 0xb8, 0x51a: 0xb8, 0x51b: 0xb8, 0x51c: 0xb8, 0x51d: 0xb8, 0x51e: 0xb8, 0x51f: 0xb8, - 0x520: 0x9d, 0x521: 0x9d, 0x522: 0x9d, 0x523: 0x9d, 0x524: 0x9d, 0x525: 0x9d, 0x526: 0x9d, 0x527: 0x9d, - 0x528: 0x13d, 0x529: 0x146, 0x52a: 0xb8, 0x52b: 0x147, 0x52c: 0x148, 0x52d: 0x149, 0x52e: 0x14a, 0x52f: 0xb8, - 0x530: 0xb8, 0x531: 0xb8, 0x532: 0xb8, 0x533: 0xb8, 0x534: 0xb8, 0x535: 0xb8, 0x536: 0xb8, 0x537: 0xb8, - 0x538: 0xb8, 0x539: 0xb8, 0x53a: 0xb8, 0x53b: 0xb8, 0x53c: 0x9d, 0x53d: 0x14b, 0x53e: 0x14c, 0x53f: 0x14d, - // Block 0x15, offset 0x540 - 0x540: 0x9d, 0x541: 0x9d, 0x542: 0x9d, 0x543: 0x9d, 0x544: 0x9d, 0x545: 0x9d, 0x546: 0x9d, 0x547: 0x9d, - 0x548: 0x9d, 0x549: 0x9d, 0x54a: 0x9d, 0x54b: 0x9d, 0x54c: 0x9d, 0x54d: 0x9d, 0x54e: 0x9d, 0x54f: 0x9d, - 0x550: 0x9d, 0x551: 0x9d, 0x552: 0x9d, 0x553: 0x9d, 0x554: 0x9d, 0x555: 0x9d, 0x556: 0x9d, 0x557: 0x9d, - 0x558: 0x9d, 0x559: 0x9d, 0x55a: 0x9d, 0x55b: 0x9d, 0x55c: 0x9d, 0x55d: 0x9d, 0x55e: 0x9d, 0x55f: 0x14e, - 0x560: 0x9d, 0x561: 0x9d, 0x562: 0x9d, 0x563: 0x9d, 0x564: 0x9d, 0x565: 0x9d, 0x566: 0x9d, 0x567: 0x9d, - 0x568: 0x9d, 0x569: 0x9d, 0x56a: 0x9d, 0x56b: 0x14f, 0x56c: 0xb8, 0x56d: 0xb8, 0x56e: 0xb8, 0x56f: 0xb8, - 0x570: 0xb8, 0x571: 0xb8, 0x572: 0xb8, 0x573: 0xb8, 0x574: 0xb8, 0x575: 0xb8, 0x576: 0xb8, 0x577: 0xb8, - 0x578: 0xb8, 0x579: 0xb8, 0x57a: 0xb8, 0x57b: 0xb8, 0x57c: 0xb8, 0x57d: 0xb8, 0x57e: 0xb8, 0x57f: 0xb8, - // Block 0x16, offset 0x580 - 0x580: 0x150, 0x581: 0xb8, 0x582: 0xb8, 0x583: 0xb8, 0x584: 0xb8, 0x585: 0xb8, 0x586: 0xb8, 0x587: 0xb8, - 0x588: 0xb8, 0x589: 0xb8, 0x58a: 0xb8, 0x58b: 0xb8, 0x58c: 0xb8, 0x58d: 0xb8, 0x58e: 0xb8, 0x58f: 0xb8, - 0x590: 0xb8, 0x591: 0xb8, 0x592: 0xb8, 0x593: 0xb8, 0x594: 0xb8, 0x595: 0xb8, 0x596: 0xb8, 0x597: 0xb8, - 0x598: 0xb8, 0x599: 0xb8, 0x59a: 0xb8, 0x59b: 0xb8, 0x59c: 0xb8, 0x59d: 0xb8, 0x59e: 0xb8, 0x59f: 0xb8, - 0x5a0: 0xb8, 0x5a1: 0xb8, 0x5a2: 0xb8, 0x5a3: 0xb8, 0x5a4: 0xb8, 0x5a5: 0xb8, 0x5a6: 0xb8, 0x5a7: 0xb8, - 0x5a8: 0xb8, 0x5a9: 0xb8, 0x5aa: 0xb8, 0x5ab: 0xb8, 0x5ac: 0xb8, 0x5ad: 0xb8, 0x5ae: 0xb8, 0x5af: 0xb8, - 0x5b0: 0x9d, 0x5b1: 0x151, 0x5b2: 0x152, 0x5b3: 0xb8, 0x5b4: 0xb8, 0x5b5: 0xb8, 0x5b6: 0xb8, 0x5b7: 0xb8, - 0x5b8: 0xb8, 0x5b9: 0xb8, 0x5ba: 0xb8, 0x5bb: 0xb8, 0x5bc: 0xb8, 0x5bd: 0xb8, 0x5be: 0xb8, 0x5bf: 0xb8, - // Block 0x17, offset 0x5c0 - 0x5c0: 0x9b, 0x5c1: 0x9b, 0x5c2: 0x9b, 0x5c3: 0x153, 0x5c4: 0x154, 0x5c5: 0x155, 0x5c6: 0x156, 0x5c7: 0x157, - 0x5c8: 0x9b, 0x5c9: 0x158, 0x5ca: 0xb8, 0x5cb: 0xb8, 0x5cc: 0x9b, 0x5cd: 0x159, 0x5ce: 0xb8, 0x5cf: 0xb8, - 0x5d0: 0x5d, 0x5d1: 0x5e, 0x5d2: 0x5f, 0x5d3: 0x60, 0x5d4: 0x61, 0x5d5: 0x62, 0x5d6: 0x63, 0x5d7: 0x64, - 0x5d8: 0x65, 0x5d9: 0x66, 0x5da: 0x67, 0x5db: 0x68, 0x5dc: 0x69, 0x5dd: 0x6a, 0x5de: 0x6b, 0x5df: 0x6c, - 0x5e0: 0x9b, 0x5e1: 0x9b, 0x5e2: 0x9b, 0x5e3: 0x9b, 0x5e4: 0x9b, 0x5e5: 0x9b, 0x5e6: 0x9b, 0x5e7: 0x9b, - 0x5e8: 0x15a, 0x5e9: 0x15b, 0x5ea: 0x15c, 0x5eb: 0xb8, 0x5ec: 0xb8, 0x5ed: 0xb8, 0x5ee: 0xb8, 0x5ef: 0xb8, - 0x5f0: 0xb8, 0x5f1: 0xb8, 0x5f2: 0xb8, 0x5f3: 0xb8, 0x5f4: 0xb8, 0x5f5: 0xb8, 0x5f6: 0xb8, 0x5f7: 0xb8, - 0x5f8: 0xb8, 0x5f9: 0xb8, 0x5fa: 0xb8, 0x5fb: 0xb8, 0x5fc: 0xb8, 0x5fd: 0xb8, 0x5fe: 0xb8, 0x5ff: 0xb8, - // Block 0x18, offset 0x600 - 0x600: 0x15d, 0x601: 0xb8, 0x602: 0xb8, 0x603: 0xb8, 0x604: 0xb8, 0x605: 0xb8, 0x606: 0xb8, 0x607: 0xb8, - 0x608: 0xb8, 0x609: 0xb8, 0x60a: 0xb8, 0x60b: 0xb8, 0x60c: 0xb8, 0x60d: 0xb8, 0x60e: 0xb8, 0x60f: 0xb8, - 0x610: 0xb8, 0x611: 0xb8, 0x612: 0xb8, 0x613: 0xb8, 0x614: 0xb8, 0x615: 0xb8, 0x616: 0xb8, 0x617: 0xb8, - 0x618: 0xb8, 0x619: 0xb8, 0x61a: 0xb8, 0x61b: 0xb8, 0x61c: 0xb8, 0x61d: 0xb8, 0x61e: 0xb8, 0x61f: 0xb8, - 0x620: 0x9d, 0x621: 0x9d, 0x622: 0x9d, 0x623: 0x15e, 0x624: 0x6d, 0x625: 0x15f, 0x626: 0xb8, 0x627: 0xb8, - 0x628: 0xb8, 0x629: 0xb8, 0x62a: 0xb8, 0x62b: 0xb8, 0x62c: 0xb8, 0x62d: 0xb8, 0x62e: 0xb8, 0x62f: 0xb8, - 0x630: 0xb8, 0x631: 0xb8, 0x632: 0xb8, 0x633: 0xb8, 0x634: 0xb8, 0x635: 0xb8, 0x636: 0xb8, 0x637: 0xb8, - 0x638: 0x6e, 0x639: 0x6f, 0x63a: 0x70, 0x63b: 0x160, 0x63c: 0xb8, 0x63d: 0xb8, 0x63e: 0xb8, 0x63f: 0xb8, - // Block 0x19, offset 0x640 - 0x640: 0x161, 0x641: 0x9b, 0x642: 0x162, 0x643: 0x163, 0x644: 0x71, 0x645: 0x72, 0x646: 0x164, 0x647: 0x165, - 0x648: 0x73, 0x649: 0x166, 0x64a: 0xb8, 0x64b: 0xb8, 0x64c: 0x9b, 0x64d: 0x9b, 0x64e: 0x9b, 0x64f: 0x9b, - 0x650: 0x9b, 0x651: 0x9b, 0x652: 0x9b, 0x653: 0x9b, 0x654: 0x9b, 0x655: 0x9b, 0x656: 0x9b, 0x657: 0x9b, - 0x658: 0x9b, 0x659: 0x9b, 0x65a: 0x9b, 0x65b: 0x167, 0x65c: 0x9b, 0x65d: 0x168, 0x65e: 0x9b, 0x65f: 0x169, - 0x660: 0x16a, 0x661: 0x16b, 0x662: 0x16c, 0x663: 0xb8, 0x664: 0x16d, 0x665: 0x16e, 0x666: 0x16f, 0x667: 0x170, - 0x668: 0xb8, 0x669: 0xb8, 0x66a: 0xb8, 0x66b: 0xb8, 0x66c: 0xb8, 0x66d: 0xb8, 0x66e: 0xb8, 0x66f: 0xb8, - 0x670: 0xb8, 0x671: 0xb8, 0x672: 0xb8, 0x673: 0xb8, 0x674: 0xb8, 0x675: 0xb8, 0x676: 0xb8, 0x677: 0xb8, - 0x678: 0xb8, 0x679: 0xb8, 0x67a: 0xb8, 0x67b: 0xb8, 0x67c: 0xb8, 0x67d: 0xb8, 0x67e: 0xb8, 0x67f: 0xb8, - // Block 0x1a, offset 0x680 - 0x680: 0x9d, 0x681: 0x9d, 0x682: 0x9d, 0x683: 0x9d, 0x684: 0x9d, 0x685: 0x9d, 0x686: 0x9d, 0x687: 0x9d, - 0x688: 0x9d, 0x689: 0x9d, 0x68a: 0x9d, 0x68b: 0x9d, 0x68c: 0x9d, 0x68d: 0x9d, 0x68e: 0x9d, 0x68f: 0x9d, - 0x690: 0x9d, 0x691: 0x9d, 0x692: 0x9d, 0x693: 0x9d, 0x694: 0x9d, 0x695: 0x9d, 0x696: 0x9d, 0x697: 0x9d, - 0x698: 0x9d, 0x699: 0x9d, 0x69a: 0x9d, 0x69b: 0x171, 0x69c: 0x9d, 0x69d: 0x9d, 0x69e: 0x9d, 0x69f: 0x9d, - 0x6a0: 0x9d, 0x6a1: 0x9d, 0x6a2: 0x9d, 0x6a3: 0x9d, 0x6a4: 0x9d, 0x6a5: 0x9d, 0x6a6: 0x9d, 0x6a7: 0x9d, - 0x6a8: 0x9d, 0x6a9: 0x9d, 0x6aa: 0x9d, 0x6ab: 0x9d, 0x6ac: 0x9d, 0x6ad: 0x9d, 0x6ae: 0x9d, 0x6af: 0x9d, - 0x6b0: 0x9d, 0x6b1: 0x9d, 0x6b2: 0x9d, 0x6b3: 0x9d, 0x6b4: 0x9d, 0x6b5: 0x9d, 0x6b6: 0x9d, 0x6b7: 0x9d, - 0x6b8: 0x9d, 0x6b9: 0x9d, 0x6ba: 0x9d, 0x6bb: 0x9d, 0x6bc: 0x9d, 0x6bd: 0x9d, 0x6be: 0x9d, 0x6bf: 0x9d, - // Block 0x1b, offset 0x6c0 - 0x6c0: 0x9d, 0x6c1: 0x9d, 0x6c2: 0x9d, 0x6c3: 0x9d, 0x6c4: 0x9d, 0x6c5: 0x9d, 0x6c6: 0x9d, 0x6c7: 0x9d, - 0x6c8: 0x9d, 0x6c9: 0x9d, 0x6ca: 0x9d, 0x6cb: 0x9d, 0x6cc: 0x9d, 0x6cd: 0x9d, 0x6ce: 0x9d, 0x6cf: 0x9d, - 0x6d0: 0x9d, 0x6d1: 0x9d, 0x6d2: 0x9d, 0x6d3: 0x9d, 0x6d4: 0x9d, 0x6d5: 0x9d, 0x6d6: 0x9d, 0x6d7: 0x9d, - 0x6d8: 0x9d, 0x6d9: 0x9d, 0x6da: 0x9d, 0x6db: 0x9d, 0x6dc: 0x172, 0x6dd: 0x9d, 0x6de: 0x9d, 0x6df: 0x9d, - 0x6e0: 0x173, 0x6e1: 0x9d, 0x6e2: 0x9d, 0x6e3: 0x9d, 0x6e4: 0x9d, 0x6e5: 0x9d, 0x6e6: 0x9d, 0x6e7: 0x9d, - 0x6e8: 0x9d, 0x6e9: 0x9d, 0x6ea: 0x9d, 0x6eb: 0x9d, 0x6ec: 0x9d, 0x6ed: 0x9d, 0x6ee: 0x9d, 0x6ef: 0x9d, - 0x6f0: 0x9d, 0x6f1: 0x9d, 0x6f2: 0x9d, 0x6f3: 0x9d, 0x6f4: 0x9d, 0x6f5: 0x9d, 0x6f6: 0x9d, 0x6f7: 0x9d, - 0x6f8: 0x9d, 0x6f9: 0x9d, 0x6fa: 0x9d, 0x6fb: 0x9d, 0x6fc: 0x9d, 0x6fd: 0x9d, 0x6fe: 0x9d, 0x6ff: 0x9d, - // Block 0x1c, offset 0x700 - 0x700: 0x9d, 0x701: 0x9d, 0x702: 0x9d, 0x703: 0x9d, 0x704: 0x9d, 0x705: 0x9d, 0x706: 0x9d, 0x707: 0x9d, - 0x708: 0x9d, 0x709: 0x9d, 0x70a: 0x9d, 0x70b: 0x9d, 0x70c: 0x9d, 0x70d: 0x9d, 0x70e: 0x9d, 0x70f: 0x9d, - 0x710: 0x9d, 0x711: 0x9d, 0x712: 0x9d, 0x713: 0x9d, 0x714: 0x9d, 0x715: 0x9d, 0x716: 0x9d, 0x717: 0x9d, - 0x718: 0x9d, 0x719: 0x9d, 0x71a: 0x9d, 0x71b: 0x9d, 0x71c: 0x9d, 0x71d: 0x9d, 0x71e: 0x9d, 0x71f: 0x9d, - 0x720: 0x9d, 0x721: 0x9d, 0x722: 0x9d, 0x723: 0x9d, 0x724: 0x9d, 0x725: 0x9d, 0x726: 0x9d, 0x727: 0x9d, - 0x728: 0x9d, 0x729: 0x9d, 0x72a: 0x9d, 0x72b: 0x9d, 0x72c: 0x9d, 0x72d: 0x9d, 0x72e: 0x9d, 0x72f: 0x9d, - 0x730: 0x9d, 0x731: 0x9d, 0x732: 0x9d, 0x733: 0x9d, 0x734: 0x9d, 0x735: 0x9d, 0x736: 0x9d, 0x737: 0x9d, - 0x738: 0x9d, 0x739: 0x9d, 0x73a: 0x174, 0x73b: 0xb8, 0x73c: 0xb8, 0x73d: 0xb8, 0x73e: 0xb8, 0x73f: 0xb8, - // Block 0x1d, offset 0x740 - 0x740: 0xb8, 0x741: 0xb8, 0x742: 0xb8, 0x743: 0xb8, 0x744: 0xb8, 0x745: 0xb8, 0x746: 0xb8, 0x747: 0xb8, - 0x748: 0xb8, 0x749: 0xb8, 0x74a: 0xb8, 0x74b: 0xb8, 0x74c: 0xb8, 0x74d: 0xb8, 0x74e: 0xb8, 0x74f: 0xb8, - 0x750: 0xb8, 0x751: 0xb8, 0x752: 0xb8, 0x753: 0xb8, 0x754: 0xb8, 0x755: 0xb8, 0x756: 0xb8, 0x757: 0xb8, - 0x758: 0xb8, 0x759: 0xb8, 0x75a: 0xb8, 0x75b: 0xb8, 0x75c: 0xb8, 0x75d: 0xb8, 0x75e: 0xb8, 0x75f: 0xb8, - 0x760: 0x74, 0x761: 0x75, 0x762: 0x76, 0x763: 0x175, 0x764: 0x77, 0x765: 0x78, 0x766: 0x176, 0x767: 0x79, - 0x768: 0x7a, 0x769: 0xb8, 0x76a: 0xb8, 0x76b: 0xb8, 0x76c: 0xb8, 0x76d: 0xb8, 0x76e: 0xb8, 0x76f: 0xb8, - 0x770: 0xb8, 0x771: 0xb8, 0x772: 0xb8, 0x773: 0xb8, 0x774: 0xb8, 0x775: 0xb8, 0x776: 0xb8, 0x777: 0xb8, - 0x778: 0xb8, 0x779: 0xb8, 0x77a: 0xb8, 0x77b: 0xb8, 0x77c: 0xb8, 0x77d: 0xb8, 0x77e: 0xb8, 0x77f: 0xb8, - // Block 0x1e, offset 0x780 - 0x790: 0x0d, 0x791: 0x0e, 0x792: 0x0f, 0x793: 0x10, 0x794: 0x11, 0x795: 0x0b, 0x796: 0x12, 0x797: 0x07, - 0x798: 0x13, 0x799: 0x0b, 0x79a: 0x0b, 0x79b: 0x14, 0x79c: 0x0b, 0x79d: 0x15, 0x79e: 0x16, 0x79f: 0x17, - 0x7a0: 0x07, 0x7a1: 0x07, 0x7a2: 0x07, 0x7a3: 0x07, 0x7a4: 0x07, 0x7a5: 0x07, 0x7a6: 0x07, 0x7a7: 0x07, - 0x7a8: 0x07, 0x7a9: 0x07, 0x7aa: 0x18, 0x7ab: 0x19, 0x7ac: 0x1a, 0x7ad: 0x0b, 0x7ae: 0x0b, 0x7af: 0x1b, - 0x7b0: 0x0b, 0x7b1: 0x0b, 0x7b2: 0x0b, 0x7b3: 0x0b, 0x7b4: 0x0b, 0x7b5: 0x0b, 0x7b6: 0x0b, 0x7b7: 0x0b, - 0x7b8: 0x0b, 0x7b9: 0x0b, 0x7ba: 0x0b, 0x7bb: 0x0b, 0x7bc: 0x0b, 0x7bd: 0x0b, 0x7be: 0x0b, 0x7bf: 0x0b, - // Block 0x1f, offset 0x7c0 - 0x7c0: 0x0b, 0x7c1: 0x0b, 0x7c2: 0x0b, 0x7c3: 0x0b, 0x7c4: 0x0b, 0x7c5: 0x0b, 0x7c6: 0x0b, 0x7c7: 0x0b, - 0x7c8: 0x0b, 0x7c9: 0x0b, 0x7ca: 0x0b, 0x7cb: 0x0b, 0x7cc: 0x0b, 0x7cd: 0x0b, 0x7ce: 0x0b, 0x7cf: 0x0b, - 0x7d0: 0x0b, 0x7d1: 0x0b, 0x7d2: 0x0b, 0x7d3: 0x0b, 0x7d4: 0x0b, 0x7d5: 0x0b, 0x7d6: 0x0b, 0x7d7: 0x0b, - 0x7d8: 0x0b, 0x7d9: 0x0b, 0x7da: 0x0b, 0x7db: 0x0b, 0x7dc: 0x0b, 0x7dd: 0x0b, 0x7de: 0x0b, 0x7df: 0x0b, - 0x7e0: 0x0b, 0x7e1: 0x0b, 0x7e2: 0x0b, 0x7e3: 0x0b, 0x7e4: 0x0b, 0x7e5: 0x0b, 0x7e6: 0x0b, 0x7e7: 0x0b, - 0x7e8: 0x0b, 0x7e9: 0x0b, 0x7ea: 0x0b, 0x7eb: 0x0b, 0x7ec: 0x0b, 0x7ed: 0x0b, 0x7ee: 0x0b, 0x7ef: 0x0b, - 0x7f0: 0x0b, 0x7f1: 0x0b, 0x7f2: 0x0b, 0x7f3: 0x0b, 0x7f4: 0x0b, 0x7f5: 0x0b, 0x7f6: 0x0b, 0x7f7: 0x0b, - 0x7f8: 0x0b, 0x7f9: 0x0b, 0x7fa: 0x0b, 0x7fb: 0x0b, 0x7fc: 0x0b, 0x7fd: 0x0b, 0x7fe: 0x0b, 0x7ff: 0x0b, - // Block 0x20, offset 0x800 - 0x800: 0x177, 0x801: 0x178, 0x802: 0xb8, 0x803: 0xb8, 0x804: 0x179, 0x805: 0x179, 0x806: 0x179, 0x807: 0x17a, - 0x808: 0xb8, 0x809: 0xb8, 0x80a: 0xb8, 0x80b: 0xb8, 0x80c: 0xb8, 0x80d: 0xb8, 0x80e: 0xb8, 0x80f: 0xb8, - 0x810: 0xb8, 0x811: 0xb8, 0x812: 0xb8, 0x813: 0xb8, 0x814: 0xb8, 0x815: 0xb8, 0x816: 0xb8, 0x817: 0xb8, - 0x818: 0xb8, 0x819: 0xb8, 0x81a: 0xb8, 0x81b: 0xb8, 0x81c: 0xb8, 0x81d: 0xb8, 0x81e: 0xb8, 0x81f: 0xb8, - 0x820: 0xb8, 0x821: 0xb8, 0x822: 0xb8, 0x823: 0xb8, 0x824: 0xb8, 0x825: 0xb8, 0x826: 0xb8, 0x827: 0xb8, - 0x828: 0xb8, 0x829: 0xb8, 0x82a: 0xb8, 0x82b: 0xb8, 0x82c: 0xb8, 0x82d: 0xb8, 0x82e: 0xb8, 0x82f: 0xb8, - 0x830: 0xb8, 0x831: 0xb8, 0x832: 0xb8, 0x833: 0xb8, 0x834: 0xb8, 0x835: 0xb8, 0x836: 0xb8, 0x837: 0xb8, - 0x838: 0xb8, 0x839: 0xb8, 0x83a: 0xb8, 0x83b: 0xb8, 0x83c: 0xb8, 0x83d: 0xb8, 0x83e: 0xb8, 0x83f: 0xb8, - // Block 0x21, offset 0x840 - 0x840: 0x0b, 0x841: 0x0b, 0x842: 0x0b, 0x843: 0x0b, 0x844: 0x0b, 0x845: 0x0b, 0x846: 0x0b, 0x847: 0x0b, - 0x848: 0x0b, 0x849: 0x0b, 0x84a: 0x0b, 0x84b: 0x0b, 0x84c: 0x0b, 0x84d: 0x0b, 0x84e: 0x0b, 0x84f: 0x0b, - 0x850: 0x0b, 0x851: 0x0b, 0x852: 0x0b, 0x853: 0x0b, 0x854: 0x0b, 0x855: 0x0b, 0x856: 0x0b, 0x857: 0x0b, - 0x858: 0x0b, 0x859: 0x0b, 0x85a: 0x0b, 0x85b: 0x0b, 0x85c: 0x0b, 0x85d: 0x0b, 0x85e: 0x0b, 0x85f: 0x0b, - 0x860: 0x1e, 0x861: 0x0b, 0x862: 0x0b, 0x863: 0x0b, 0x864: 0x0b, 0x865: 0x0b, 0x866: 0x0b, 0x867: 0x0b, - 0x868: 0x0b, 0x869: 0x0b, 0x86a: 0x0b, 0x86b: 0x0b, 0x86c: 0x0b, 0x86d: 0x0b, 0x86e: 0x0b, 0x86f: 0x0b, - 0x870: 0x0b, 0x871: 0x0b, 0x872: 0x0b, 0x873: 0x0b, 0x874: 0x0b, 0x875: 0x0b, 0x876: 0x0b, 0x877: 0x0b, - 0x878: 0x0b, 0x879: 0x0b, 0x87a: 0x0b, 0x87b: 0x0b, 0x87c: 0x0b, 0x87d: 0x0b, 0x87e: 0x0b, 0x87f: 0x0b, - // Block 0x22, offset 0x880 - 0x880: 0x0b, 0x881: 0x0b, 0x882: 0x0b, 0x883: 0x0b, 0x884: 0x0b, 0x885: 0x0b, 0x886: 0x0b, 0x887: 0x0b, - 0x888: 0x0b, 0x889: 0x0b, 0x88a: 0x0b, 0x88b: 0x0b, 0x88c: 0x0b, 0x88d: 0x0b, 0x88e: 0x0b, 0x88f: 0x0b, -} - -// idnaSparseOffset: 256 entries, 512 bytes -var idnaSparseOffset = []uint16{0x0, 0x8, 0x19, 0x25, 0x27, 0x2c, 0x34, 0x3f, 0x4b, 0x5c, 0x60, 0x6f, 0x74, 0x7b, 0x87, 0x95, 0xa3, 0xa8, 0xb1, 0xc1, 0xcf, 0xdc, 0xe8, 0xf9, 0x103, 0x10a, 0x117, 0x128, 0x12f, 0x13a, 0x149, 0x157, 0x161, 0x163, 0x167, 0x169, 0x175, 0x180, 0x188, 0x18e, 0x194, 0x199, 0x19e, 0x1a1, 0x1a5, 0x1ab, 0x1b0, 0x1bc, 0x1c6, 0x1cc, 0x1dd, 0x1e7, 0x1ea, 0x1f2, 0x1f5, 0x202, 0x20a, 0x20e, 0x215, 0x21d, 0x22d, 0x239, 0x23b, 0x245, 0x251, 0x25d, 0x269, 0x271, 0x276, 0x280, 0x291, 0x295, 0x2a0, 0x2a4, 0x2ad, 0x2b5, 0x2bb, 0x2c0, 0x2c3, 0x2c6, 0x2ca, 0x2d0, 0x2d4, 0x2d8, 0x2de, 0x2e5, 0x2eb, 0x2f3, 0x2fa, 0x305, 0x30f, 0x313, 0x316, 0x31c, 0x320, 0x322, 0x325, 0x327, 0x32a, 0x334, 0x337, 0x346, 0x34a, 0x34f, 0x352, 0x356, 0x35b, 0x360, 0x366, 0x36c, 0x37b, 0x381, 0x385, 0x394, 0x399, 0x3a1, 0x3ab, 0x3b6, 0x3be, 0x3cf, 0x3d8, 0x3e8, 0x3f5, 0x3ff, 0x404, 0x411, 0x415, 0x41a, 0x41c, 0x420, 0x422, 0x426, 0x42f, 0x435, 0x439, 0x449, 0x453, 0x458, 0x45b, 0x461, 0x468, 0x46d, 0x471, 0x477, 0x47c, 0x485, 0x48a, 0x490, 0x497, 0x49e, 0x4a5, 0x4a9, 0x4ae, 0x4b1, 0x4b6, 0x4c2, 0x4c8, 0x4cd, 0x4d4, 0x4dc, 0x4e1, 0x4e5, 0x4f5, 0x4fc, 0x500, 0x504, 0x50b, 0x50e, 0x511, 0x515, 0x519, 0x51f, 0x528, 0x534, 0x53b, 0x544, 0x54c, 0x553, 0x561, 0x56e, 0x57b, 0x584, 0x588, 0x596, 0x59e, 0x5a9, 0x5b2, 0x5b8, 0x5c0, 0x5c9, 0x5d3, 0x5d6, 0x5e2, 0x5e5, 0x5ea, 0x5ed, 0x5f7, 0x600, 0x60c, 0x60f, 0x614, 0x617, 0x61a, 0x61d, 0x624, 0x62b, 0x62f, 0x63a, 0x63d, 0x643, 0x648, 0x64c, 0x64f, 0x652, 0x655, 0x65a, 0x664, 0x667, 0x66b, 0x67a, 0x686, 0x68a, 0x68f, 0x694, 0x698, 0x69d, 0x6a6, 0x6b1, 0x6b7, 0x6bf, 0x6c3, 0x6c7, 0x6cd, 0x6d3, 0x6d8, 0x6db, 0x6e9, 0x6f0, 0x6f3, 0x6f6, 0x6fa, 0x700, 0x705, 0x70f, 0x714, 0x717, 0x71a, 0x71d, 0x720, 0x724, 0x727, 0x737, 0x748, 0x74d, 0x74f, 0x751} - -// idnaSparseValues: 1876 entries, 7504 bytes -var idnaSparseValues = [1876]valueRange{ - // Block 0x0, offset 0x0 - {value: 0x0000, lo: 0x07}, - {value: 0xe105, lo: 0x80, hi: 0x96}, - {value: 0x0018, lo: 0x97, hi: 0x97}, - {value: 0xe105, lo: 0x98, hi: 0x9e}, - {value: 0x001f, lo: 0x9f, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xb6}, - {value: 0x0018, lo: 0xb7, hi: 0xb7}, - {value: 0x0008, lo: 0xb8, hi: 0xbf}, - // Block 0x1, offset 0x8 - {value: 0x0000, lo: 0x10}, - {value: 0x0008, lo: 0x80, hi: 0x80}, - {value: 0xe01d, lo: 0x81, hi: 0x81}, - {value: 0x0008, lo: 0x82, hi: 0x82}, - {value: 0x0335, lo: 0x83, hi: 0x83}, - {value: 0x034d, lo: 0x84, hi: 0x84}, - {value: 0x0365, lo: 0x85, hi: 0x85}, - {value: 0xe00d, lo: 0x86, hi: 0x86}, - {value: 0x0008, lo: 0x87, hi: 0x87}, - {value: 0xe00d, lo: 0x88, hi: 0x88}, - {value: 0x0008, lo: 0x89, hi: 0x89}, - {value: 0xe00d, lo: 0x8a, hi: 0x8a}, - {value: 0x0008, lo: 0x8b, hi: 0x8b}, - {value: 0xe00d, lo: 0x8c, hi: 0x8c}, - {value: 0x0008, lo: 0x8d, hi: 0x8d}, - {value: 0xe00d, lo: 0x8e, hi: 0x8e}, - {value: 0x0008, lo: 0x8f, hi: 0xbf}, - // Block 0x2, offset 0x19 - {value: 0x0000, lo: 0x0b}, - {value: 0x0008, lo: 0x80, hi: 0xaf}, - {value: 0x0249, lo: 0xb0, hi: 0xb0}, - {value: 0x037d, lo: 0xb1, hi: 0xb1}, - {value: 0x0259, lo: 0xb2, hi: 0xb2}, - {value: 0x0269, lo: 0xb3, hi: 0xb3}, - {value: 0x034d, lo: 0xb4, hi: 0xb4}, - {value: 0x0395, lo: 0xb5, hi: 0xb5}, - {value: 0xe1bd, lo: 0xb6, hi: 0xb6}, - {value: 0x0279, lo: 0xb7, hi: 0xb7}, - {value: 0x0289, lo: 0xb8, hi: 0xb8}, - {value: 0x0008, lo: 0xb9, hi: 0xbf}, - // Block 0x3, offset 0x25 - {value: 0x0000, lo: 0x01}, - {value: 0x1308, lo: 0x80, hi: 0xbf}, - // Block 0x4, offset 0x27 - {value: 0x0000, lo: 0x04}, - {value: 0x03f5, lo: 0x80, hi: 0x8f}, - {value: 0xe105, lo: 0x90, hi: 0x9f}, - {value: 0x049d, lo: 0xa0, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0x5, offset 0x2c - {value: 0x0000, lo: 0x07}, - {value: 0xe185, lo: 0x80, hi: 0x8f}, - {value: 0x0545, lo: 0x90, hi: 0x96}, - {value: 0x0040, lo: 0x97, hi: 0x98}, - {value: 0x0008, lo: 0x99, hi: 0x99}, - {value: 0x0018, lo: 0x9a, hi: 0x9f}, - {value: 0x0040, lo: 0xa0, hi: 0xa0}, - {value: 0x0008, lo: 0xa1, hi: 0xbf}, - // Block 0x6, offset 0x34 - {value: 0x0000, lo: 0x0a}, - {value: 0x0008, lo: 0x80, hi: 0x86}, - {value: 0x0401, lo: 0x87, hi: 0x87}, - {value: 0x0040, lo: 0x88, hi: 0x88}, - {value: 0x0018, lo: 0x89, hi: 0x8a}, - {value: 0x0040, lo: 0x8b, hi: 0x8c}, - {value: 0x0018, lo: 0x8d, hi: 0x8f}, - {value: 0x0040, lo: 0x90, hi: 0x90}, - {value: 0x1308, lo: 0x91, hi: 0xbd}, - {value: 0x0018, lo: 0xbe, hi: 0xbe}, - {value: 0x1308, lo: 0xbf, hi: 0xbf}, - // Block 0x7, offset 0x3f - {value: 0x0000, lo: 0x0b}, - {value: 0x0018, lo: 0x80, hi: 0x80}, - {value: 0x1308, lo: 0x81, hi: 0x82}, - {value: 0x0018, lo: 0x83, hi: 0x83}, - {value: 0x1308, lo: 0x84, hi: 0x85}, - {value: 0x0018, lo: 0x86, hi: 0x86}, - {value: 0x1308, lo: 0x87, hi: 0x87}, - {value: 0x0040, lo: 0x88, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0xaa}, - {value: 0x0040, lo: 0xab, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xb4}, - {value: 0x0040, lo: 0xb5, hi: 0xbf}, - // Block 0x8, offset 0x4b - {value: 0x0000, lo: 0x10}, - {value: 0x0018, lo: 0x80, hi: 0x80}, - {value: 0x0208, lo: 0x81, hi: 0x87}, - {value: 0x0408, lo: 0x88, hi: 0x88}, - {value: 0x0208, lo: 0x89, hi: 0x8a}, - {value: 0x1308, lo: 0x8b, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xa9}, - {value: 0x0018, lo: 0xaa, hi: 0xad}, - {value: 0x0208, lo: 0xae, hi: 0xaf}, - {value: 0x1308, lo: 0xb0, hi: 0xb0}, - {value: 0x0408, lo: 0xb1, hi: 0xb3}, - {value: 0x0008, lo: 0xb4, hi: 0xb4}, - {value: 0x0429, lo: 0xb5, hi: 0xb5}, - {value: 0x0451, lo: 0xb6, hi: 0xb6}, - {value: 0x0479, lo: 0xb7, hi: 0xb7}, - {value: 0x04a1, lo: 0xb8, hi: 0xb8}, - {value: 0x0208, lo: 0xb9, hi: 0xbf}, - // Block 0x9, offset 0x5c - {value: 0x0000, lo: 0x03}, - {value: 0x0208, lo: 0x80, hi: 0x87}, - {value: 0x0408, lo: 0x88, hi: 0x99}, - {value: 0x0208, lo: 0x9a, hi: 0xbf}, - // Block 0xa, offset 0x60 - {value: 0x0000, lo: 0x0e}, - {value: 0x1308, lo: 0x80, hi: 0x8a}, - {value: 0x0040, lo: 0x8b, hi: 0x8c}, - {value: 0x0408, lo: 0x8d, hi: 0x8d}, - {value: 0x0208, lo: 0x8e, hi: 0x98}, - {value: 0x0408, lo: 0x99, hi: 0x9b}, - {value: 0x0208, lo: 0x9c, hi: 0xaa}, - {value: 0x0408, lo: 0xab, hi: 0xac}, - {value: 0x0208, lo: 0xad, hi: 0xb0}, - {value: 0x0408, lo: 0xb1, hi: 0xb1}, - {value: 0x0208, lo: 0xb2, hi: 0xb2}, - {value: 0x0408, lo: 0xb3, hi: 0xb4}, - {value: 0x0208, lo: 0xb5, hi: 0xb7}, - {value: 0x0408, lo: 0xb8, hi: 0xb9}, - {value: 0x0208, lo: 0xba, hi: 0xbf}, - // Block 0xb, offset 0x6f - {value: 0x0000, lo: 0x04}, - {value: 0x0008, lo: 0x80, hi: 0xa5}, - {value: 0x1308, lo: 0xa6, hi: 0xb0}, - {value: 0x0008, lo: 0xb1, hi: 0xb1}, - {value: 0x0040, lo: 0xb2, hi: 0xbf}, - // Block 0xc, offset 0x74 - {value: 0x0000, lo: 0x06}, - {value: 0x0008, lo: 0x80, hi: 0x89}, - {value: 0x0208, lo: 0x8a, hi: 0xaa}, - {value: 0x1308, lo: 0xab, hi: 0xb3}, - {value: 0x0008, lo: 0xb4, hi: 0xb5}, - {value: 0x0018, lo: 0xb6, hi: 0xba}, - {value: 0x0040, lo: 0xbb, hi: 0xbf}, - // Block 0xd, offset 0x7b - {value: 0x0000, lo: 0x0b}, - {value: 0x0008, lo: 0x80, hi: 0x95}, - {value: 0x1308, lo: 0x96, hi: 0x99}, - {value: 0x0008, lo: 0x9a, hi: 0x9a}, - {value: 0x1308, lo: 0x9b, hi: 0xa3}, - {value: 0x0008, lo: 0xa4, hi: 0xa4}, - {value: 0x1308, lo: 0xa5, hi: 0xa7}, - {value: 0x0008, lo: 0xa8, hi: 0xa8}, - {value: 0x1308, lo: 0xa9, hi: 0xad}, - {value: 0x0040, lo: 0xae, hi: 0xaf}, - {value: 0x0018, lo: 0xb0, hi: 0xbe}, - {value: 0x0040, lo: 0xbf, hi: 0xbf}, - // Block 0xe, offset 0x87 - {value: 0x0000, lo: 0x0d}, - {value: 0x0408, lo: 0x80, hi: 0x80}, - {value: 0x0208, lo: 0x81, hi: 0x85}, - {value: 0x0408, lo: 0x86, hi: 0x87}, - {value: 0x0208, lo: 0x88, hi: 0x88}, - {value: 0x0408, lo: 0x89, hi: 0x89}, - {value: 0x0208, lo: 0x8a, hi: 0x93}, - {value: 0x0408, lo: 0x94, hi: 0x94}, - {value: 0x0208, lo: 0x95, hi: 0x95}, - {value: 0x0008, lo: 0x96, hi: 0x98}, - {value: 0x1308, lo: 0x99, hi: 0x9b}, - {value: 0x0040, lo: 0x9c, hi: 0x9d}, - {value: 0x0018, lo: 0x9e, hi: 0x9e}, - {value: 0x0040, lo: 0x9f, hi: 0xbf}, - // Block 0xf, offset 0x95 - {value: 0x0000, lo: 0x0d}, - {value: 0x0040, lo: 0x80, hi: 0x9f}, - {value: 0x0208, lo: 0xa0, hi: 0xa9}, - {value: 0x0408, lo: 0xaa, hi: 0xac}, - {value: 0x0008, lo: 0xad, hi: 0xad}, - {value: 0x0408, lo: 0xae, hi: 0xae}, - {value: 0x0208, lo: 0xaf, hi: 0xb0}, - {value: 0x0408, lo: 0xb1, hi: 0xb2}, - {value: 0x0208, lo: 0xb3, hi: 0xb4}, - {value: 0x0040, lo: 0xb5, hi: 0xb5}, - {value: 0x0208, lo: 0xb6, hi: 0xb8}, - {value: 0x0408, lo: 0xb9, hi: 0xb9}, - {value: 0x0208, lo: 0xba, hi: 0xbd}, - {value: 0x0040, lo: 0xbe, hi: 0xbf}, - // Block 0x10, offset 0xa3 - {value: 0x0000, lo: 0x04}, - {value: 0x0040, lo: 0x80, hi: 0x93}, - {value: 0x1308, lo: 0x94, hi: 0xa1}, - {value: 0x0040, lo: 0xa2, hi: 0xa2}, - {value: 0x1308, lo: 0xa3, hi: 0xbf}, - // Block 0x11, offset 0xa8 - {value: 0x0000, lo: 0x08}, - {value: 0x1308, lo: 0x80, hi: 0x82}, - {value: 0x1008, lo: 0x83, hi: 0x83}, - {value: 0x0008, lo: 0x84, hi: 0xb9}, - {value: 0x1308, lo: 0xba, hi: 0xba}, - {value: 0x1008, lo: 0xbb, hi: 0xbb}, - {value: 0x1308, lo: 0xbc, hi: 0xbc}, - {value: 0x0008, lo: 0xbd, hi: 0xbd}, - {value: 0x1008, lo: 0xbe, hi: 0xbf}, - // Block 0x12, offset 0xb1 - {value: 0x0000, lo: 0x0f}, - {value: 0x1308, lo: 0x80, hi: 0x80}, - {value: 0x1008, lo: 0x81, hi: 0x82}, - {value: 0x0040, lo: 0x83, hi: 0x85}, - {value: 0x1008, lo: 0x86, hi: 0x88}, - {value: 0x0040, lo: 0x89, hi: 0x89}, - {value: 0x1008, lo: 0x8a, hi: 0x8c}, - {value: 0x1b08, lo: 0x8d, hi: 0x8d}, - {value: 0x0040, lo: 0x8e, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x90}, - {value: 0x0040, lo: 0x91, hi: 0x96}, - {value: 0x1008, lo: 0x97, hi: 0x97}, - {value: 0x0040, lo: 0x98, hi: 0xa5}, - {value: 0x0008, lo: 0xa6, hi: 0xaf}, - {value: 0x0018, lo: 0xb0, hi: 0xba}, - {value: 0x0040, lo: 0xbb, hi: 0xbf}, - // Block 0x13, offset 0xc1 - {value: 0x0000, lo: 0x0d}, - {value: 0x1308, lo: 0x80, hi: 0x80}, - {value: 0x1008, lo: 0x81, hi: 0x83}, - {value: 0x0040, lo: 0x84, hi: 0x84}, - {value: 0x0008, lo: 0x85, hi: 0x8c}, - {value: 0x0040, lo: 0x8d, hi: 0x8d}, - {value: 0x0008, lo: 0x8e, hi: 0x90}, - {value: 0x0040, lo: 0x91, hi: 0x91}, - {value: 0x0008, lo: 0x92, hi: 0xa8}, - {value: 0x0040, lo: 0xa9, hi: 0xa9}, - {value: 0x0008, lo: 0xaa, hi: 0xb9}, - {value: 0x0040, lo: 0xba, hi: 0xbc}, - {value: 0x0008, lo: 0xbd, hi: 0xbd}, - {value: 0x1308, lo: 0xbe, hi: 0xbf}, - // Block 0x14, offset 0xcf - {value: 0x0000, lo: 0x0c}, - {value: 0x0040, lo: 0x80, hi: 0x80}, - {value: 0x1308, lo: 0x81, hi: 0x81}, - {value: 0x1008, lo: 0x82, hi: 0x83}, - {value: 0x0040, lo: 0x84, hi: 0x84}, - {value: 0x0008, lo: 0x85, hi: 0x8c}, - {value: 0x0040, lo: 0x8d, hi: 0x8d}, - {value: 0x0008, lo: 0x8e, hi: 0x90}, - {value: 0x0040, lo: 0x91, hi: 0x91}, - {value: 0x0008, lo: 0x92, hi: 0xba}, - {value: 0x0040, lo: 0xbb, hi: 0xbc}, - {value: 0x0008, lo: 0xbd, hi: 0xbd}, - {value: 0x1008, lo: 0xbe, hi: 0xbf}, - // Block 0x15, offset 0xdc - {value: 0x0000, lo: 0x0b}, - {value: 0x0040, lo: 0x80, hi: 0x81}, - {value: 0x1008, lo: 0x82, hi: 0x83}, - {value: 0x0040, lo: 0x84, hi: 0x84}, - {value: 0x0008, lo: 0x85, hi: 0x96}, - {value: 0x0040, lo: 0x97, hi: 0x99}, - {value: 0x0008, lo: 0x9a, hi: 0xb1}, - {value: 0x0040, lo: 0xb2, hi: 0xb2}, - {value: 0x0008, lo: 0xb3, hi: 0xbb}, - {value: 0x0040, lo: 0xbc, hi: 0xbc}, - {value: 0x0008, lo: 0xbd, hi: 0xbd}, - {value: 0x0040, lo: 0xbe, hi: 0xbf}, - // Block 0x16, offset 0xe8 - {value: 0x0000, lo: 0x10}, - {value: 0x0008, lo: 0x80, hi: 0x86}, - {value: 0x0040, lo: 0x87, hi: 0x89}, - {value: 0x1b08, lo: 0x8a, hi: 0x8a}, - {value: 0x0040, lo: 0x8b, hi: 0x8e}, - {value: 0x1008, lo: 0x8f, hi: 0x91}, - {value: 0x1308, lo: 0x92, hi: 0x94}, - {value: 0x0040, lo: 0x95, hi: 0x95}, - {value: 0x1308, lo: 0x96, hi: 0x96}, - {value: 0x0040, lo: 0x97, hi: 0x97}, - {value: 0x1008, lo: 0x98, hi: 0x9f}, - {value: 0x0040, lo: 0xa0, hi: 0xa5}, - {value: 0x0008, lo: 0xa6, hi: 0xaf}, - {value: 0x0040, lo: 0xb0, hi: 0xb1}, - {value: 0x1008, lo: 0xb2, hi: 0xb3}, - {value: 0x0018, lo: 0xb4, hi: 0xb4}, - {value: 0x0040, lo: 0xb5, hi: 0xbf}, - // Block 0x17, offset 0xf9 - {value: 0x0000, lo: 0x09}, - {value: 0x0040, lo: 0x80, hi: 0x80}, - {value: 0x0008, lo: 0x81, hi: 0xb0}, - {value: 0x1308, lo: 0xb1, hi: 0xb1}, - {value: 0x0008, lo: 0xb2, hi: 0xb2}, - {value: 0x08f1, lo: 0xb3, hi: 0xb3}, - {value: 0x1308, lo: 0xb4, hi: 0xb9}, - {value: 0x1b08, lo: 0xba, hi: 0xba}, - {value: 0x0040, lo: 0xbb, hi: 0xbe}, - {value: 0x0018, lo: 0xbf, hi: 0xbf}, - // Block 0x18, offset 0x103 - {value: 0x0000, lo: 0x06}, - {value: 0x0008, lo: 0x80, hi: 0x86}, - {value: 0x1308, lo: 0x87, hi: 0x8e}, - {value: 0x0018, lo: 0x8f, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x99}, - {value: 0x0018, lo: 0x9a, hi: 0x9b}, - {value: 0x0040, lo: 0x9c, hi: 0xbf}, - // Block 0x19, offset 0x10a - {value: 0x0000, lo: 0x0c}, - {value: 0x0008, lo: 0x80, hi: 0x84}, - {value: 0x0040, lo: 0x85, hi: 0x85}, - {value: 0x0008, lo: 0x86, hi: 0x86}, - {value: 0x0040, lo: 0x87, hi: 0x87}, - {value: 0x1308, lo: 0x88, hi: 0x8d}, - {value: 0x0040, lo: 0x8e, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x99}, - {value: 0x0040, lo: 0x9a, hi: 0x9b}, - {value: 0x0961, lo: 0x9c, hi: 0x9c}, - {value: 0x0999, lo: 0x9d, hi: 0x9d}, - {value: 0x0008, lo: 0x9e, hi: 0x9f}, - {value: 0x0040, lo: 0xa0, hi: 0xbf}, - // Block 0x1a, offset 0x117 - {value: 0x0000, lo: 0x10}, - {value: 0x0008, lo: 0x80, hi: 0x80}, - {value: 0x0018, lo: 0x81, hi: 0x8a}, - {value: 0x0008, lo: 0x8b, hi: 0x8b}, - {value: 0xe03d, lo: 0x8c, hi: 0x8c}, - {value: 0x0018, lo: 0x8d, hi: 0x97}, - {value: 0x1308, lo: 0x98, hi: 0x99}, - {value: 0x0018, lo: 0x9a, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xa9}, - {value: 0x0018, lo: 0xaa, hi: 0xb4}, - {value: 0x1308, lo: 0xb5, hi: 0xb5}, - {value: 0x0018, lo: 0xb6, hi: 0xb6}, - {value: 0x1308, lo: 0xb7, hi: 0xb7}, - {value: 0x0018, lo: 0xb8, hi: 0xb8}, - {value: 0x1308, lo: 0xb9, hi: 0xb9}, - {value: 0x0018, lo: 0xba, hi: 0xbd}, - {value: 0x1008, lo: 0xbe, hi: 0xbf}, - // Block 0x1b, offset 0x128 - {value: 0x0000, lo: 0x06}, - {value: 0x0018, lo: 0x80, hi: 0x85}, - {value: 0x1308, lo: 0x86, hi: 0x86}, - {value: 0x0018, lo: 0x87, hi: 0x8c}, - {value: 0x0040, lo: 0x8d, hi: 0x8d}, - {value: 0x0018, lo: 0x8e, hi: 0x9a}, - {value: 0x0040, lo: 0x9b, hi: 0xbf}, - // Block 0x1c, offset 0x12f - {value: 0x0000, lo: 0x0a}, - {value: 0x0008, lo: 0x80, hi: 0xaa}, - {value: 0x1008, lo: 0xab, hi: 0xac}, - {value: 0x1308, lo: 0xad, hi: 0xb0}, - {value: 0x1008, lo: 0xb1, hi: 0xb1}, - {value: 0x1308, lo: 0xb2, hi: 0xb7}, - {value: 0x1008, lo: 0xb8, hi: 0xb8}, - {value: 0x1b08, lo: 0xb9, hi: 0xba}, - {value: 0x1008, lo: 0xbb, hi: 0xbc}, - {value: 0x1308, lo: 0xbd, hi: 0xbe}, - {value: 0x0008, lo: 0xbf, hi: 0xbf}, - // Block 0x1d, offset 0x13a - {value: 0x0000, lo: 0x0e}, - {value: 0x0008, lo: 0x80, hi: 0x89}, - {value: 0x0018, lo: 0x8a, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x95}, - {value: 0x1008, lo: 0x96, hi: 0x97}, - {value: 0x1308, lo: 0x98, hi: 0x99}, - {value: 0x0008, lo: 0x9a, hi: 0x9d}, - {value: 0x1308, lo: 0x9e, hi: 0xa0}, - {value: 0x0008, lo: 0xa1, hi: 0xa1}, - {value: 0x1008, lo: 0xa2, hi: 0xa4}, - {value: 0x0008, lo: 0xa5, hi: 0xa6}, - {value: 0x1008, lo: 0xa7, hi: 0xad}, - {value: 0x0008, lo: 0xae, hi: 0xb0}, - {value: 0x1308, lo: 0xb1, hi: 0xb4}, - {value: 0x0008, lo: 0xb5, hi: 0xbf}, - // Block 0x1e, offset 0x149 - {value: 0x0000, lo: 0x0d}, - {value: 0x0008, lo: 0x80, hi: 0x81}, - {value: 0x1308, lo: 0x82, hi: 0x82}, - {value: 0x1008, lo: 0x83, hi: 0x84}, - {value: 0x1308, lo: 0x85, hi: 0x86}, - {value: 0x1008, lo: 0x87, hi: 0x8c}, - {value: 0x1308, lo: 0x8d, hi: 0x8d}, - {value: 0x0008, lo: 0x8e, hi: 0x8e}, - {value: 0x1008, lo: 0x8f, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x99}, - {value: 0x1008, lo: 0x9a, hi: 0x9c}, - {value: 0x1308, lo: 0x9d, hi: 0x9d}, - {value: 0x0018, lo: 0x9e, hi: 0x9f}, - {value: 0x0040, lo: 0xa0, hi: 0xbf}, - // Block 0x1f, offset 0x157 - {value: 0x0000, lo: 0x09}, - {value: 0x0040, lo: 0x80, hi: 0x86}, - {value: 0x055d, lo: 0x87, hi: 0x87}, - {value: 0x0040, lo: 0x88, hi: 0x8c}, - {value: 0x055d, lo: 0x8d, hi: 0x8d}, - {value: 0x0040, lo: 0x8e, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0xba}, - {value: 0x0018, lo: 0xbb, hi: 0xbb}, - {value: 0xe105, lo: 0xbc, hi: 0xbc}, - {value: 0x0008, lo: 0xbd, hi: 0xbf}, - // Block 0x20, offset 0x161 - {value: 0x0000, lo: 0x01}, - {value: 0x0018, lo: 0x80, hi: 0xbf}, - // Block 0x21, offset 0x163 - {value: 0x0000, lo: 0x03}, - {value: 0x0018, lo: 0x80, hi: 0x9e}, - {value: 0x0040, lo: 0x9f, hi: 0xa0}, - {value: 0x0018, lo: 0xa1, hi: 0xbf}, - // Block 0x22, offset 0x167 - {value: 0x0000, lo: 0x01}, - {value: 0x0008, lo: 0x80, hi: 0xbf}, - // Block 0x23, offset 0x169 - {value: 0x0000, lo: 0x0b}, - {value: 0x0008, lo: 0x80, hi: 0x88}, - {value: 0x0040, lo: 0x89, hi: 0x89}, - {value: 0x0008, lo: 0x8a, hi: 0x8d}, - {value: 0x0040, lo: 0x8e, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x96}, - {value: 0x0040, lo: 0x97, hi: 0x97}, - {value: 0x0008, lo: 0x98, hi: 0x98}, - {value: 0x0040, lo: 0x99, hi: 0x99}, - {value: 0x0008, lo: 0x9a, hi: 0x9d}, - {value: 0x0040, lo: 0x9e, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xbf}, - // Block 0x24, offset 0x175 - {value: 0x0000, lo: 0x0a}, - {value: 0x0008, lo: 0x80, hi: 0x88}, - {value: 0x0040, lo: 0x89, hi: 0x89}, - {value: 0x0008, lo: 0x8a, hi: 0x8d}, - {value: 0x0040, lo: 0x8e, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0xb0}, - {value: 0x0040, lo: 0xb1, hi: 0xb1}, - {value: 0x0008, lo: 0xb2, hi: 0xb5}, - {value: 0x0040, lo: 0xb6, hi: 0xb7}, - {value: 0x0008, lo: 0xb8, hi: 0xbe}, - {value: 0x0040, lo: 0xbf, hi: 0xbf}, - // Block 0x25, offset 0x180 - {value: 0x0000, lo: 0x07}, - {value: 0x0008, lo: 0x80, hi: 0x80}, - {value: 0x0040, lo: 0x81, hi: 0x81}, - {value: 0x0008, lo: 0x82, hi: 0x85}, - {value: 0x0040, lo: 0x86, hi: 0x87}, - {value: 0x0008, lo: 0x88, hi: 0x96}, - {value: 0x0040, lo: 0x97, hi: 0x97}, - {value: 0x0008, lo: 0x98, hi: 0xbf}, - // Block 0x26, offset 0x188 - {value: 0x0000, lo: 0x05}, - {value: 0x0008, lo: 0x80, hi: 0x90}, - {value: 0x0040, lo: 0x91, hi: 0x91}, - {value: 0x0008, lo: 0x92, hi: 0x95}, - {value: 0x0040, lo: 0x96, hi: 0x97}, - {value: 0x0008, lo: 0x98, hi: 0xbf}, - // Block 0x27, offset 0x18e - {value: 0x0000, lo: 0x05}, - {value: 0x0008, lo: 0x80, hi: 0x9a}, - {value: 0x0040, lo: 0x9b, hi: 0x9c}, - {value: 0x1308, lo: 0x9d, hi: 0x9f}, - {value: 0x0018, lo: 0xa0, hi: 0xbc}, - {value: 0x0040, lo: 0xbd, hi: 0xbf}, - // Block 0x28, offset 0x194 - {value: 0x0000, lo: 0x04}, - {value: 0x0008, lo: 0x80, hi: 0x8f}, - {value: 0x0018, lo: 0x90, hi: 0x99}, - {value: 0x0040, lo: 0x9a, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xbf}, - // Block 0x29, offset 0x199 - {value: 0x0000, lo: 0x04}, - {value: 0x0008, lo: 0x80, hi: 0xb5}, - {value: 0x0040, lo: 0xb6, hi: 0xb7}, - {value: 0xe045, lo: 0xb8, hi: 0xbd}, - {value: 0x0040, lo: 0xbe, hi: 0xbf}, - // Block 0x2a, offset 0x19e - {value: 0x0000, lo: 0x02}, - {value: 0x0018, lo: 0x80, hi: 0x80}, - {value: 0x0008, lo: 0x81, hi: 0xbf}, - // Block 0x2b, offset 0x1a1 - {value: 0x0000, lo: 0x03}, - {value: 0x0008, lo: 0x80, hi: 0xac}, - {value: 0x0018, lo: 0xad, hi: 0xae}, - {value: 0x0008, lo: 0xaf, hi: 0xbf}, - // Block 0x2c, offset 0x1a5 - {value: 0x0000, lo: 0x05}, - {value: 0x0040, lo: 0x80, hi: 0x80}, - {value: 0x0008, lo: 0x81, hi: 0x9a}, - {value: 0x0018, lo: 0x9b, hi: 0x9c}, - {value: 0x0040, lo: 0x9d, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xbf}, - // Block 0x2d, offset 0x1ab - {value: 0x0000, lo: 0x04}, - {value: 0x0008, lo: 0x80, hi: 0xaa}, - {value: 0x0018, lo: 0xab, hi: 0xb0}, - {value: 0x0008, lo: 0xb1, hi: 0xb8}, - {value: 0x0040, lo: 0xb9, hi: 0xbf}, - // Block 0x2e, offset 0x1b0 - {value: 0x0000, lo: 0x0b}, - {value: 0x0008, lo: 0x80, hi: 0x8c}, - {value: 0x0040, lo: 0x8d, hi: 0x8d}, - {value: 0x0008, lo: 0x8e, hi: 0x91}, - {value: 0x1308, lo: 0x92, hi: 0x93}, - {value: 0x1b08, lo: 0x94, hi: 0x94}, - {value: 0x0040, lo: 0x95, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xb1}, - {value: 0x1308, lo: 0xb2, hi: 0xb3}, - {value: 0x1b08, lo: 0xb4, hi: 0xb4}, - {value: 0x0018, lo: 0xb5, hi: 0xb6}, - {value: 0x0040, lo: 0xb7, hi: 0xbf}, - // Block 0x2f, offset 0x1bc - {value: 0x0000, lo: 0x09}, - {value: 0x0008, lo: 0x80, hi: 0x91}, - {value: 0x1308, lo: 0x92, hi: 0x93}, - {value: 0x0040, lo: 0x94, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xac}, - {value: 0x0040, lo: 0xad, hi: 0xad}, - {value: 0x0008, lo: 0xae, hi: 0xb0}, - {value: 0x0040, lo: 0xb1, hi: 0xb1}, - {value: 0x1308, lo: 0xb2, hi: 0xb3}, - {value: 0x0040, lo: 0xb4, hi: 0xbf}, - // Block 0x30, offset 0x1c6 - {value: 0x0000, lo: 0x05}, - {value: 0x0008, lo: 0x80, hi: 0xb3}, - {value: 0x1340, lo: 0xb4, hi: 0xb5}, - {value: 0x1008, lo: 0xb6, hi: 0xb6}, - {value: 0x1308, lo: 0xb7, hi: 0xbd}, - {value: 0x1008, lo: 0xbe, hi: 0xbf}, - // Block 0x31, offset 0x1cc - {value: 0x0000, lo: 0x10}, - {value: 0x1008, lo: 0x80, hi: 0x85}, - {value: 0x1308, lo: 0x86, hi: 0x86}, - {value: 0x1008, lo: 0x87, hi: 0x88}, - {value: 0x1308, lo: 0x89, hi: 0x91}, - {value: 0x1b08, lo: 0x92, hi: 0x92}, - {value: 0x1308, lo: 0x93, hi: 0x93}, - {value: 0x0018, lo: 0x94, hi: 0x96}, - {value: 0x0008, lo: 0x97, hi: 0x97}, - {value: 0x0018, lo: 0x98, hi: 0x9b}, - {value: 0x0008, lo: 0x9c, hi: 0x9c}, - {value: 0x1308, lo: 0x9d, hi: 0x9d}, - {value: 0x0040, lo: 0x9e, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xa9}, - {value: 0x0040, lo: 0xaa, hi: 0xaf}, - {value: 0x0018, lo: 0xb0, hi: 0xb9}, - {value: 0x0040, lo: 0xba, hi: 0xbf}, - // Block 0x32, offset 0x1dd - {value: 0x0000, lo: 0x09}, - {value: 0x0018, lo: 0x80, hi: 0x85}, - {value: 0x0040, lo: 0x86, hi: 0x86}, - {value: 0x0218, lo: 0x87, hi: 0x87}, - {value: 0x0018, lo: 0x88, hi: 0x8a}, - {value: 0x13c0, lo: 0x8b, hi: 0x8d}, - {value: 0x0040, lo: 0x8e, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x99}, - {value: 0x0040, lo: 0x9a, hi: 0x9f}, - {value: 0x0208, lo: 0xa0, hi: 0xbf}, - // Block 0x33, offset 0x1e7 - {value: 0x0000, lo: 0x02}, - {value: 0x0208, lo: 0x80, hi: 0xb7}, - {value: 0x0040, lo: 0xb8, hi: 0xbf}, - // Block 0x34, offset 0x1ea - {value: 0x0000, lo: 0x07}, - {value: 0x0008, lo: 0x80, hi: 0x84}, - {value: 0x1308, lo: 0x85, hi: 0x86}, - {value: 0x0208, lo: 0x87, hi: 0xa8}, - {value: 0x1308, lo: 0xa9, hi: 0xa9}, - {value: 0x0208, lo: 0xaa, hi: 0xaa}, - {value: 0x0040, lo: 0xab, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0x35, offset 0x1f2 - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0xb5}, - {value: 0x0040, lo: 0xb6, hi: 0xbf}, - // Block 0x36, offset 0x1f5 - {value: 0x0000, lo: 0x0c}, - {value: 0x0008, lo: 0x80, hi: 0x9e}, - {value: 0x0040, lo: 0x9f, hi: 0x9f}, - {value: 0x1308, lo: 0xa0, hi: 0xa2}, - {value: 0x1008, lo: 0xa3, hi: 0xa6}, - {value: 0x1308, lo: 0xa7, hi: 0xa8}, - {value: 0x1008, lo: 0xa9, hi: 0xab}, - {value: 0x0040, lo: 0xac, hi: 0xaf}, - {value: 0x1008, lo: 0xb0, hi: 0xb1}, - {value: 0x1308, lo: 0xb2, hi: 0xb2}, - {value: 0x1008, lo: 0xb3, hi: 0xb8}, - {value: 0x1308, lo: 0xb9, hi: 0xbb}, - {value: 0x0040, lo: 0xbc, hi: 0xbf}, - // Block 0x37, offset 0x202 - {value: 0x0000, lo: 0x07}, - {value: 0x0018, lo: 0x80, hi: 0x80}, - {value: 0x0040, lo: 0x81, hi: 0x83}, - {value: 0x0018, lo: 0x84, hi: 0x85}, - {value: 0x0008, lo: 0x86, hi: 0xad}, - {value: 0x0040, lo: 0xae, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xb4}, - {value: 0x0040, lo: 0xb5, hi: 0xbf}, - // Block 0x38, offset 0x20a - {value: 0x0000, lo: 0x03}, - {value: 0x0008, lo: 0x80, hi: 0xab}, - {value: 0x0040, lo: 0xac, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0x39, offset 0x20e - {value: 0x0000, lo: 0x06}, - {value: 0x0008, lo: 0x80, hi: 0x89}, - {value: 0x0040, lo: 0x8a, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x99}, - {value: 0x0028, lo: 0x9a, hi: 0x9a}, - {value: 0x0040, lo: 0x9b, hi: 0x9d}, - {value: 0x0018, lo: 0x9e, hi: 0xbf}, - // Block 0x3a, offset 0x215 - {value: 0x0000, lo: 0x07}, - {value: 0x0008, lo: 0x80, hi: 0x96}, - {value: 0x1308, lo: 0x97, hi: 0x98}, - {value: 0x1008, lo: 0x99, hi: 0x9a}, - {value: 0x1308, lo: 0x9b, hi: 0x9b}, - {value: 0x0040, lo: 0x9c, hi: 0x9d}, - {value: 0x0018, lo: 0x9e, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xbf}, - // Block 0x3b, offset 0x21d - {value: 0x0000, lo: 0x0f}, - {value: 0x0008, lo: 0x80, hi: 0x94}, - {value: 0x1008, lo: 0x95, hi: 0x95}, - {value: 0x1308, lo: 0x96, hi: 0x96}, - {value: 0x1008, lo: 0x97, hi: 0x97}, - {value: 0x1308, lo: 0x98, hi: 0x9e}, - {value: 0x0040, lo: 0x9f, hi: 0x9f}, - {value: 0x1b08, lo: 0xa0, hi: 0xa0}, - {value: 0x1008, lo: 0xa1, hi: 0xa1}, - {value: 0x1308, lo: 0xa2, hi: 0xa2}, - {value: 0x1008, lo: 0xa3, hi: 0xa4}, - {value: 0x1308, lo: 0xa5, hi: 0xac}, - {value: 0x1008, lo: 0xad, hi: 0xb2}, - {value: 0x1308, lo: 0xb3, hi: 0xbc}, - {value: 0x0040, lo: 0xbd, hi: 0xbe}, - {value: 0x1308, lo: 0xbf, hi: 0xbf}, - // Block 0x3c, offset 0x22d - {value: 0x0000, lo: 0x0b}, - {value: 0x0008, lo: 0x80, hi: 0x89}, - {value: 0x0040, lo: 0x8a, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x99}, - {value: 0x0040, lo: 0x9a, hi: 0x9f}, - {value: 0x0018, lo: 0xa0, hi: 0xa6}, - {value: 0x0008, lo: 0xa7, hi: 0xa7}, - {value: 0x0018, lo: 0xa8, hi: 0xad}, - {value: 0x0040, lo: 0xae, hi: 0xaf}, - {value: 0x1308, lo: 0xb0, hi: 0xbd}, - {value: 0x1318, lo: 0xbe, hi: 0xbe}, - {value: 0x0040, lo: 0xbf, hi: 0xbf}, - // Block 0x3d, offset 0x239 - {value: 0x0000, lo: 0x01}, - {value: 0x0040, lo: 0x80, hi: 0xbf}, - // Block 0x3e, offset 0x23b - {value: 0x0000, lo: 0x09}, - {value: 0x1308, lo: 0x80, hi: 0x83}, - {value: 0x1008, lo: 0x84, hi: 0x84}, - {value: 0x0008, lo: 0x85, hi: 0xb3}, - {value: 0x1308, lo: 0xb4, hi: 0xb4}, - {value: 0x1008, lo: 0xb5, hi: 0xb5}, - {value: 0x1308, lo: 0xb6, hi: 0xba}, - {value: 0x1008, lo: 0xbb, hi: 0xbb}, - {value: 0x1308, lo: 0xbc, hi: 0xbc}, - {value: 0x1008, lo: 0xbd, hi: 0xbf}, - // Block 0x3f, offset 0x245 - {value: 0x0000, lo: 0x0b}, - {value: 0x1008, lo: 0x80, hi: 0x81}, - {value: 0x1308, lo: 0x82, hi: 0x82}, - {value: 0x1008, lo: 0x83, hi: 0x83}, - {value: 0x1808, lo: 0x84, hi: 0x84}, - {value: 0x0008, lo: 0x85, hi: 0x8b}, - {value: 0x0040, lo: 0x8c, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x99}, - {value: 0x0018, lo: 0x9a, hi: 0xaa}, - {value: 0x1308, lo: 0xab, hi: 0xb3}, - {value: 0x0018, lo: 0xb4, hi: 0xbc}, - {value: 0x0040, lo: 0xbd, hi: 0xbf}, - // Block 0x40, offset 0x251 - {value: 0x0000, lo: 0x0b}, - {value: 0x1308, lo: 0x80, hi: 0x81}, - {value: 0x1008, lo: 0x82, hi: 0x82}, - {value: 0x0008, lo: 0x83, hi: 0xa0}, - {value: 0x1008, lo: 0xa1, hi: 0xa1}, - {value: 0x1308, lo: 0xa2, hi: 0xa5}, - {value: 0x1008, lo: 0xa6, hi: 0xa7}, - {value: 0x1308, lo: 0xa8, hi: 0xa9}, - {value: 0x1808, lo: 0xaa, hi: 0xaa}, - {value: 0x1b08, lo: 0xab, hi: 0xab}, - {value: 0x1308, lo: 0xac, hi: 0xad}, - {value: 0x0008, lo: 0xae, hi: 0xbf}, - // Block 0x41, offset 0x25d - {value: 0x0000, lo: 0x0b}, - {value: 0x0008, lo: 0x80, hi: 0xa5}, - {value: 0x1308, lo: 0xa6, hi: 0xa6}, - {value: 0x1008, lo: 0xa7, hi: 0xa7}, - {value: 0x1308, lo: 0xa8, hi: 0xa9}, - {value: 0x1008, lo: 0xaa, hi: 0xac}, - {value: 0x1308, lo: 0xad, hi: 0xad}, - {value: 0x1008, lo: 0xae, hi: 0xae}, - {value: 0x1308, lo: 0xaf, hi: 0xb1}, - {value: 0x1808, lo: 0xb2, hi: 0xb3}, - {value: 0x0040, lo: 0xb4, hi: 0xbb}, - {value: 0x0018, lo: 0xbc, hi: 0xbf}, - // Block 0x42, offset 0x269 - {value: 0x0000, lo: 0x07}, - {value: 0x0008, lo: 0x80, hi: 0xa3}, - {value: 0x1008, lo: 0xa4, hi: 0xab}, - {value: 0x1308, lo: 0xac, hi: 0xb3}, - {value: 0x1008, lo: 0xb4, hi: 0xb5}, - {value: 0x1308, lo: 0xb6, hi: 0xb7}, - {value: 0x0040, lo: 0xb8, hi: 0xba}, - {value: 0x0018, lo: 0xbb, hi: 0xbf}, - // Block 0x43, offset 0x271 - {value: 0x0000, lo: 0x04}, - {value: 0x0008, lo: 0x80, hi: 0x89}, - {value: 0x0040, lo: 0x8a, hi: 0x8c}, - {value: 0x0008, lo: 0x8d, hi: 0xbd}, - {value: 0x0018, lo: 0xbe, hi: 0xbf}, - // Block 0x44, offset 0x276 - {value: 0x0000, lo: 0x09}, - {value: 0x0e29, lo: 0x80, hi: 0x80}, - {value: 0x0e41, lo: 0x81, hi: 0x81}, - {value: 0x0e59, lo: 0x82, hi: 0x82}, - {value: 0x0e71, lo: 0x83, hi: 0x83}, - {value: 0x0e89, lo: 0x84, hi: 0x85}, - {value: 0x0ea1, lo: 0x86, hi: 0x86}, - {value: 0x0eb9, lo: 0x87, hi: 0x87}, - {value: 0x057d, lo: 0x88, hi: 0x88}, - {value: 0x0040, lo: 0x89, hi: 0xbf}, - // Block 0x45, offset 0x280 - {value: 0x0000, lo: 0x10}, - {value: 0x0018, lo: 0x80, hi: 0x87}, - {value: 0x0040, lo: 0x88, hi: 0x8f}, - {value: 0x1308, lo: 0x90, hi: 0x92}, - {value: 0x0018, lo: 0x93, hi: 0x93}, - {value: 0x1308, lo: 0x94, hi: 0xa0}, - {value: 0x1008, lo: 0xa1, hi: 0xa1}, - {value: 0x1308, lo: 0xa2, hi: 0xa8}, - {value: 0x0008, lo: 0xa9, hi: 0xac}, - {value: 0x1308, lo: 0xad, hi: 0xad}, - {value: 0x0008, lo: 0xae, hi: 0xb1}, - {value: 0x1008, lo: 0xb2, hi: 0xb3}, - {value: 0x1308, lo: 0xb4, hi: 0xb4}, - {value: 0x0008, lo: 0xb5, hi: 0xb6}, - {value: 0x0040, lo: 0xb7, hi: 0xb7}, - {value: 0x1308, lo: 0xb8, hi: 0xb9}, - {value: 0x0040, lo: 0xba, hi: 0xbf}, - // Block 0x46, offset 0x291 - {value: 0x0000, lo: 0x03}, - {value: 0x1308, lo: 0x80, hi: 0xb5}, - {value: 0x0040, lo: 0xb6, hi: 0xba}, - {value: 0x1308, lo: 0xbb, hi: 0xbf}, - // Block 0x47, offset 0x295 - {value: 0x0000, lo: 0x0a}, - {value: 0x0008, lo: 0x80, hi: 0x87}, - {value: 0xe045, lo: 0x88, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x95}, - {value: 0x0040, lo: 0x96, hi: 0x97}, - {value: 0xe045, lo: 0x98, hi: 0x9d}, - {value: 0x0040, lo: 0x9e, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xa7}, - {value: 0xe045, lo: 0xa8, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xb7}, - {value: 0xe045, lo: 0xb8, hi: 0xbf}, - // Block 0x48, offset 0x2a0 - {value: 0x0000, lo: 0x03}, - {value: 0x0040, lo: 0x80, hi: 0x8f}, - {value: 0x1318, lo: 0x90, hi: 0xb0}, - {value: 0x0040, lo: 0xb1, hi: 0xbf}, - // Block 0x49, offset 0x2a4 - {value: 0x0000, lo: 0x08}, - {value: 0x0018, lo: 0x80, hi: 0x82}, - {value: 0x0040, lo: 0x83, hi: 0x83}, - {value: 0x0008, lo: 0x84, hi: 0x84}, - {value: 0x0018, lo: 0x85, hi: 0x88}, - {value: 0x24c1, lo: 0x89, hi: 0x89}, - {value: 0x0018, lo: 0x8a, hi: 0x8b}, - {value: 0x0040, lo: 0x8c, hi: 0x8f}, - {value: 0x0018, lo: 0x90, hi: 0xbf}, - // Block 0x4a, offset 0x2ad - {value: 0x0000, lo: 0x07}, - {value: 0x0018, lo: 0x80, hi: 0xab}, - {value: 0x24f1, lo: 0xac, hi: 0xac}, - {value: 0x2529, lo: 0xad, hi: 0xad}, - {value: 0x0018, lo: 0xae, hi: 0xae}, - {value: 0x2579, lo: 0xaf, hi: 0xaf}, - {value: 0x25b1, lo: 0xb0, hi: 0xb0}, - {value: 0x0018, lo: 0xb1, hi: 0xbf}, - // Block 0x4b, offset 0x2b5 - {value: 0x0000, lo: 0x05}, - {value: 0x0018, lo: 0x80, hi: 0x9f}, - {value: 0x0080, lo: 0xa0, hi: 0xa0}, - {value: 0x0018, lo: 0xa1, hi: 0xad}, - {value: 0x0080, lo: 0xae, hi: 0xaf}, - {value: 0x0018, lo: 0xb0, hi: 0xbf}, - // Block 0x4c, offset 0x2bb - {value: 0x0000, lo: 0x04}, - {value: 0x0018, lo: 0x80, hi: 0xa8}, - {value: 0x09c5, lo: 0xa9, hi: 0xa9}, - {value: 0x09e5, lo: 0xaa, hi: 0xaa}, - {value: 0x0018, lo: 0xab, hi: 0xbf}, - // Block 0x4d, offset 0x2c0 - {value: 0x0000, lo: 0x02}, - {value: 0x0018, lo: 0x80, hi: 0xbe}, - {value: 0x0040, lo: 0xbf, hi: 0xbf}, - // Block 0x4e, offset 0x2c3 - {value: 0x0000, lo: 0x02}, - {value: 0x0018, lo: 0x80, hi: 0xa6}, - {value: 0x0040, lo: 0xa7, hi: 0xbf}, - // Block 0x4f, offset 0x2c6 - {value: 0x0000, lo: 0x03}, - {value: 0x0018, lo: 0x80, hi: 0x8b}, - {value: 0x28c1, lo: 0x8c, hi: 0x8c}, - {value: 0x0018, lo: 0x8d, hi: 0xbf}, - // Block 0x50, offset 0x2ca - {value: 0x0000, lo: 0x05}, - {value: 0x0018, lo: 0x80, hi: 0xb3}, - {value: 0x0e66, lo: 0xb4, hi: 0xb4}, - {value: 0x292a, lo: 0xb5, hi: 0xb5}, - {value: 0x0e86, lo: 0xb6, hi: 0xb6}, - {value: 0x0018, lo: 0xb7, hi: 0xbf}, - // Block 0x51, offset 0x2d0 - {value: 0x0000, lo: 0x03}, - {value: 0x0018, lo: 0x80, hi: 0x9b}, - {value: 0x2941, lo: 0x9c, hi: 0x9c}, - {value: 0x0018, lo: 0x9d, hi: 0xbf}, - // Block 0x52, offset 0x2d4 - {value: 0x0000, lo: 0x03}, - {value: 0x0018, lo: 0x80, hi: 0xb3}, - {value: 0x0040, lo: 0xb4, hi: 0xb5}, - {value: 0x0018, lo: 0xb6, hi: 0xbf}, - // Block 0x53, offset 0x2d8 - {value: 0x0000, lo: 0x05}, - {value: 0x0018, lo: 0x80, hi: 0x95}, - {value: 0x0040, lo: 0x96, hi: 0x97}, - {value: 0x0018, lo: 0x98, hi: 0xb9}, - {value: 0x0040, lo: 0xba, hi: 0xbc}, - {value: 0x0018, lo: 0xbd, hi: 0xbf}, - // Block 0x54, offset 0x2de - {value: 0x0000, lo: 0x06}, - {value: 0x0018, lo: 0x80, hi: 0x88}, - {value: 0x0040, lo: 0x89, hi: 0x89}, - {value: 0x0018, lo: 0x8a, hi: 0x91}, - {value: 0x0040, lo: 0x92, hi: 0xab}, - {value: 0x0018, lo: 0xac, hi: 0xaf}, - {value: 0x0040, lo: 0xb0, hi: 0xbf}, - // Block 0x55, offset 0x2e5 - {value: 0x0000, lo: 0x05}, - {value: 0xe185, lo: 0x80, hi: 0x8f}, - {value: 0x03f5, lo: 0x90, hi: 0x9f}, - {value: 0x0ea5, lo: 0xa0, hi: 0xae}, - {value: 0x0040, lo: 0xaf, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0x56, offset 0x2eb - {value: 0x0000, lo: 0x07}, - {value: 0x0008, lo: 0x80, hi: 0xa5}, - {value: 0x0040, lo: 0xa6, hi: 0xa6}, - {value: 0x0008, lo: 0xa7, hi: 0xa7}, - {value: 0x0040, lo: 0xa8, hi: 0xac}, - {value: 0x0008, lo: 0xad, hi: 0xad}, - {value: 0x0040, lo: 0xae, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0x57, offset 0x2f3 - {value: 0x0000, lo: 0x06}, - {value: 0x0008, lo: 0x80, hi: 0xa7}, - {value: 0x0040, lo: 0xa8, hi: 0xae}, - {value: 0xe075, lo: 0xaf, hi: 0xaf}, - {value: 0x0018, lo: 0xb0, hi: 0xb0}, - {value: 0x0040, lo: 0xb1, hi: 0xbe}, - {value: 0x1b08, lo: 0xbf, hi: 0xbf}, - // Block 0x58, offset 0x2fa - {value: 0x0000, lo: 0x0a}, - {value: 0x0008, lo: 0x80, hi: 0x96}, - {value: 0x0040, lo: 0x97, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xa6}, - {value: 0x0040, lo: 0xa7, hi: 0xa7}, - {value: 0x0008, lo: 0xa8, hi: 0xae}, - {value: 0x0040, lo: 0xaf, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xb6}, - {value: 0x0040, lo: 0xb7, hi: 0xb7}, - {value: 0x0008, lo: 0xb8, hi: 0xbe}, - {value: 0x0040, lo: 0xbf, hi: 0xbf}, - // Block 0x59, offset 0x305 - {value: 0x0000, lo: 0x09}, - {value: 0x0008, lo: 0x80, hi: 0x86}, - {value: 0x0040, lo: 0x87, hi: 0x87}, - {value: 0x0008, lo: 0x88, hi: 0x8e}, - {value: 0x0040, lo: 0x8f, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x96}, - {value: 0x0040, lo: 0x97, hi: 0x97}, - {value: 0x0008, lo: 0x98, hi: 0x9e}, - {value: 0x0040, lo: 0x9f, hi: 0x9f}, - {value: 0x1308, lo: 0xa0, hi: 0xbf}, - // Block 0x5a, offset 0x30f - {value: 0x0000, lo: 0x03}, - {value: 0x0018, lo: 0x80, hi: 0xae}, - {value: 0x0008, lo: 0xaf, hi: 0xaf}, - {value: 0x0018, lo: 0xb0, hi: 0xbf}, - // Block 0x5b, offset 0x313 - {value: 0x0000, lo: 0x02}, - {value: 0x0018, lo: 0x80, hi: 0x84}, - {value: 0x0040, lo: 0x85, hi: 0xbf}, - // Block 0x5c, offset 0x316 - {value: 0x0000, lo: 0x05}, - {value: 0x0018, lo: 0x80, hi: 0x99}, - {value: 0x0040, lo: 0x9a, hi: 0x9a}, - {value: 0x0018, lo: 0x9b, hi: 0x9e}, - {value: 0x0edd, lo: 0x9f, hi: 0x9f}, - {value: 0x0018, lo: 0xa0, hi: 0xbf}, - // Block 0x5d, offset 0x31c - {value: 0x0000, lo: 0x03}, - {value: 0x0018, lo: 0x80, hi: 0xb2}, - {value: 0x0efd, lo: 0xb3, hi: 0xb3}, - {value: 0x0040, lo: 0xb4, hi: 0xbf}, - // Block 0x5e, offset 0x320 - {value: 0x0020, lo: 0x01}, - {value: 0x0f1d, lo: 0x80, hi: 0xbf}, - // Block 0x5f, offset 0x322 - {value: 0x0020, lo: 0x02}, - {value: 0x171d, lo: 0x80, hi: 0x8f}, - {value: 0x18fd, lo: 0x90, hi: 0xbf}, - // Block 0x60, offset 0x325 - {value: 0x0020, lo: 0x01}, - {value: 0x1efd, lo: 0x80, hi: 0xbf}, - // Block 0x61, offset 0x327 - {value: 0x0000, lo: 0x02}, - {value: 0x0040, lo: 0x80, hi: 0x80}, - {value: 0x0008, lo: 0x81, hi: 0xbf}, - // Block 0x62, offset 0x32a - {value: 0x0000, lo: 0x09}, - {value: 0x0008, lo: 0x80, hi: 0x96}, - {value: 0x0040, lo: 0x97, hi: 0x98}, - {value: 0x1308, lo: 0x99, hi: 0x9a}, - {value: 0x29e2, lo: 0x9b, hi: 0x9b}, - {value: 0x2a0a, lo: 0x9c, hi: 0x9c}, - {value: 0x0008, lo: 0x9d, hi: 0x9e}, - {value: 0x2a31, lo: 0x9f, hi: 0x9f}, - {value: 0x0018, lo: 0xa0, hi: 0xa0}, - {value: 0x0008, lo: 0xa1, hi: 0xbf}, - // Block 0x63, offset 0x334 - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0xbe}, - {value: 0x2a69, lo: 0xbf, hi: 0xbf}, - // Block 0x64, offset 0x337 - {value: 0x0000, lo: 0x0e}, - {value: 0x0040, lo: 0x80, hi: 0x84}, - {value: 0x0008, lo: 0x85, hi: 0xad}, - {value: 0x0040, lo: 0xae, hi: 0xb0}, - {value: 0x2a1d, lo: 0xb1, hi: 0xb1}, - {value: 0x2a3d, lo: 0xb2, hi: 0xb2}, - {value: 0x2a5d, lo: 0xb3, hi: 0xb3}, - {value: 0x2a7d, lo: 0xb4, hi: 0xb4}, - {value: 0x2a5d, lo: 0xb5, hi: 0xb5}, - {value: 0x2a9d, lo: 0xb6, hi: 0xb6}, - {value: 0x2abd, lo: 0xb7, hi: 0xb7}, - {value: 0x2add, lo: 0xb8, hi: 0xb9}, - {value: 0x2afd, lo: 0xba, hi: 0xbb}, - {value: 0x2b1d, lo: 0xbc, hi: 0xbd}, - {value: 0x2afd, lo: 0xbe, hi: 0xbf}, - // Block 0x65, offset 0x346 - {value: 0x0000, lo: 0x03}, - {value: 0x0018, lo: 0x80, hi: 0xa3}, - {value: 0x0040, lo: 0xa4, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0x66, offset 0x34a - {value: 0x0030, lo: 0x04}, - {value: 0x2aa2, lo: 0x80, hi: 0x9d}, - {value: 0x305a, lo: 0x9e, hi: 0x9e}, - {value: 0x0040, lo: 0x9f, hi: 0x9f}, - {value: 0x30a2, lo: 0xa0, hi: 0xbf}, - // Block 0x67, offset 0x34f - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0x95}, - {value: 0x0040, lo: 0x96, hi: 0xbf}, - // Block 0x68, offset 0x352 - {value: 0x0000, lo: 0x03}, - {value: 0x0008, lo: 0x80, hi: 0x8c}, - {value: 0x0040, lo: 0x8d, hi: 0x8f}, - {value: 0x0018, lo: 0x90, hi: 0xbf}, - // Block 0x69, offset 0x356 - {value: 0x0000, lo: 0x04}, - {value: 0x0018, lo: 0x80, hi: 0x86}, - {value: 0x0040, lo: 0x87, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0xbd}, - {value: 0x0018, lo: 0xbe, hi: 0xbf}, - // Block 0x6a, offset 0x35b - {value: 0x0000, lo: 0x04}, - {value: 0x0008, lo: 0x80, hi: 0x8c}, - {value: 0x0018, lo: 0x8d, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0xab}, - {value: 0x0040, lo: 0xac, hi: 0xbf}, - // Block 0x6b, offset 0x360 - {value: 0x0000, lo: 0x05}, - {value: 0x0008, lo: 0x80, hi: 0xa5}, - {value: 0x0018, lo: 0xa6, hi: 0xaf}, - {value: 0x1308, lo: 0xb0, hi: 0xb1}, - {value: 0x0018, lo: 0xb2, hi: 0xb7}, - {value: 0x0040, lo: 0xb8, hi: 0xbf}, - // Block 0x6c, offset 0x366 - {value: 0x0000, lo: 0x05}, - {value: 0x0040, lo: 0x80, hi: 0xb6}, - {value: 0x0008, lo: 0xb7, hi: 0xb7}, - {value: 0x2009, lo: 0xb8, hi: 0xb8}, - {value: 0x6e89, lo: 0xb9, hi: 0xb9}, - {value: 0x0008, lo: 0xba, hi: 0xbf}, - // Block 0x6d, offset 0x36c - {value: 0x0000, lo: 0x0e}, - {value: 0x0008, lo: 0x80, hi: 0x81}, - {value: 0x1308, lo: 0x82, hi: 0x82}, - {value: 0x0008, lo: 0x83, hi: 0x85}, - {value: 0x1b08, lo: 0x86, hi: 0x86}, - {value: 0x0008, lo: 0x87, hi: 0x8a}, - {value: 0x1308, lo: 0x8b, hi: 0x8b}, - {value: 0x0008, lo: 0x8c, hi: 0xa2}, - {value: 0x1008, lo: 0xa3, hi: 0xa4}, - {value: 0x1308, lo: 0xa5, hi: 0xa6}, - {value: 0x1008, lo: 0xa7, hi: 0xa7}, - {value: 0x0018, lo: 0xa8, hi: 0xab}, - {value: 0x0040, lo: 0xac, hi: 0xaf}, - {value: 0x0018, lo: 0xb0, hi: 0xb9}, - {value: 0x0040, lo: 0xba, hi: 0xbf}, - // Block 0x6e, offset 0x37b - {value: 0x0000, lo: 0x05}, - {value: 0x0208, lo: 0x80, hi: 0xb1}, - {value: 0x0108, lo: 0xb2, hi: 0xb2}, - {value: 0x0008, lo: 0xb3, hi: 0xb3}, - {value: 0x0018, lo: 0xb4, hi: 0xb7}, - {value: 0x0040, lo: 0xb8, hi: 0xbf}, - // Block 0x6f, offset 0x381 - {value: 0x0000, lo: 0x03}, - {value: 0x1008, lo: 0x80, hi: 0x81}, - {value: 0x0008, lo: 0x82, hi: 0xb3}, - {value: 0x1008, lo: 0xb4, hi: 0xbf}, - // Block 0x70, offset 0x385 - {value: 0x0000, lo: 0x0e}, - {value: 0x1008, lo: 0x80, hi: 0x83}, - {value: 0x1b08, lo: 0x84, hi: 0x84}, - {value: 0x1308, lo: 0x85, hi: 0x85}, - {value: 0x0040, lo: 0x86, hi: 0x8d}, - {value: 0x0018, lo: 0x8e, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x99}, - {value: 0x0040, lo: 0x9a, hi: 0x9f}, - {value: 0x1308, lo: 0xa0, hi: 0xb1}, - {value: 0x0008, lo: 0xb2, hi: 0xb7}, - {value: 0x0018, lo: 0xb8, hi: 0xba}, - {value: 0x0008, lo: 0xbb, hi: 0xbb}, - {value: 0x0018, lo: 0xbc, hi: 0xbc}, - {value: 0x0008, lo: 0xbd, hi: 0xbd}, - {value: 0x0040, lo: 0xbe, hi: 0xbf}, - // Block 0x71, offset 0x394 - {value: 0x0000, lo: 0x04}, - {value: 0x0008, lo: 0x80, hi: 0xa5}, - {value: 0x1308, lo: 0xa6, hi: 0xad}, - {value: 0x0018, lo: 0xae, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0x72, offset 0x399 - {value: 0x0000, lo: 0x07}, - {value: 0x0008, lo: 0x80, hi: 0x86}, - {value: 0x1308, lo: 0x87, hi: 0x91}, - {value: 0x1008, lo: 0x92, hi: 0x92}, - {value: 0x1808, lo: 0x93, hi: 0x93}, - {value: 0x0040, lo: 0x94, hi: 0x9e}, - {value: 0x0018, lo: 0x9f, hi: 0xbc}, - {value: 0x0040, lo: 0xbd, hi: 0xbf}, - // Block 0x73, offset 0x3a1 - {value: 0x0000, lo: 0x09}, - {value: 0x1308, lo: 0x80, hi: 0x82}, - {value: 0x1008, lo: 0x83, hi: 0x83}, - {value: 0x0008, lo: 0x84, hi: 0xb2}, - {value: 0x1308, lo: 0xb3, hi: 0xb3}, - {value: 0x1008, lo: 0xb4, hi: 0xb5}, - {value: 0x1308, lo: 0xb6, hi: 0xb9}, - {value: 0x1008, lo: 0xba, hi: 0xbb}, - {value: 0x1308, lo: 0xbc, hi: 0xbc}, - {value: 0x1008, lo: 0xbd, hi: 0xbf}, - // Block 0x74, offset 0x3ab - {value: 0x0000, lo: 0x0a}, - {value: 0x1808, lo: 0x80, hi: 0x80}, - {value: 0x0018, lo: 0x81, hi: 0x8d}, - {value: 0x0040, lo: 0x8e, hi: 0x8e}, - {value: 0x0008, lo: 0x8f, hi: 0x99}, - {value: 0x0040, lo: 0x9a, hi: 0x9d}, - {value: 0x0018, lo: 0x9e, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xa4}, - {value: 0x1308, lo: 0xa5, hi: 0xa5}, - {value: 0x0008, lo: 0xa6, hi: 0xbe}, - {value: 0x0040, lo: 0xbf, hi: 0xbf}, - // Block 0x75, offset 0x3b6 - {value: 0x0000, lo: 0x07}, - {value: 0x0008, lo: 0x80, hi: 0xa8}, - {value: 0x1308, lo: 0xa9, hi: 0xae}, - {value: 0x1008, lo: 0xaf, hi: 0xb0}, - {value: 0x1308, lo: 0xb1, hi: 0xb2}, - {value: 0x1008, lo: 0xb3, hi: 0xb4}, - {value: 0x1308, lo: 0xb5, hi: 0xb6}, - {value: 0x0040, lo: 0xb7, hi: 0xbf}, - // Block 0x76, offset 0x3be - {value: 0x0000, lo: 0x10}, - {value: 0x0008, lo: 0x80, hi: 0x82}, - {value: 0x1308, lo: 0x83, hi: 0x83}, - {value: 0x0008, lo: 0x84, hi: 0x8b}, - {value: 0x1308, lo: 0x8c, hi: 0x8c}, - {value: 0x1008, lo: 0x8d, hi: 0x8d}, - {value: 0x0040, lo: 0x8e, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x99}, - {value: 0x0040, lo: 0x9a, hi: 0x9b}, - {value: 0x0018, lo: 0x9c, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xb6}, - {value: 0x0018, lo: 0xb7, hi: 0xb9}, - {value: 0x0008, lo: 0xba, hi: 0xba}, - {value: 0x1008, lo: 0xbb, hi: 0xbb}, - {value: 0x1308, lo: 0xbc, hi: 0xbc}, - {value: 0x1008, lo: 0xbd, hi: 0xbd}, - {value: 0x0008, lo: 0xbe, hi: 0xbf}, - // Block 0x77, offset 0x3cf - {value: 0x0000, lo: 0x08}, - {value: 0x0008, lo: 0x80, hi: 0xaf}, - {value: 0x1308, lo: 0xb0, hi: 0xb0}, - {value: 0x0008, lo: 0xb1, hi: 0xb1}, - {value: 0x1308, lo: 0xb2, hi: 0xb4}, - {value: 0x0008, lo: 0xb5, hi: 0xb6}, - {value: 0x1308, lo: 0xb7, hi: 0xb8}, - {value: 0x0008, lo: 0xb9, hi: 0xbd}, - {value: 0x1308, lo: 0xbe, hi: 0xbf}, - // Block 0x78, offset 0x3d8 - {value: 0x0000, lo: 0x0f}, - {value: 0x0008, lo: 0x80, hi: 0x80}, - {value: 0x1308, lo: 0x81, hi: 0x81}, - {value: 0x0008, lo: 0x82, hi: 0x82}, - {value: 0x0040, lo: 0x83, hi: 0x9a}, - {value: 0x0008, lo: 0x9b, hi: 0x9d}, - {value: 0x0018, lo: 0x9e, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xaa}, - {value: 0x1008, lo: 0xab, hi: 0xab}, - {value: 0x1308, lo: 0xac, hi: 0xad}, - {value: 0x1008, lo: 0xae, hi: 0xaf}, - {value: 0x0018, lo: 0xb0, hi: 0xb1}, - {value: 0x0008, lo: 0xb2, hi: 0xb4}, - {value: 0x1008, lo: 0xb5, hi: 0xb5}, - {value: 0x1b08, lo: 0xb6, hi: 0xb6}, - {value: 0x0040, lo: 0xb7, hi: 0xbf}, - // Block 0x79, offset 0x3e8 - {value: 0x0000, lo: 0x0c}, - {value: 0x0040, lo: 0x80, hi: 0x80}, - {value: 0x0008, lo: 0x81, hi: 0x86}, - {value: 0x0040, lo: 0x87, hi: 0x88}, - {value: 0x0008, lo: 0x89, hi: 0x8e}, - {value: 0x0040, lo: 0x8f, hi: 0x90}, - {value: 0x0008, lo: 0x91, hi: 0x96}, - {value: 0x0040, lo: 0x97, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xa6}, - {value: 0x0040, lo: 0xa7, hi: 0xa7}, - {value: 0x0008, lo: 0xa8, hi: 0xae}, - {value: 0x0040, lo: 0xaf, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0x7a, offset 0x3f5 - {value: 0x0000, lo: 0x09}, - {value: 0x0008, lo: 0x80, hi: 0x9a}, - {value: 0x0018, lo: 0x9b, hi: 0x9b}, - {value: 0x4465, lo: 0x9c, hi: 0x9c}, - {value: 0x447d, lo: 0x9d, hi: 0x9d}, - {value: 0x2971, lo: 0x9e, hi: 0x9e}, - {value: 0xe06d, lo: 0x9f, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xa5}, - {value: 0x0040, lo: 0xa6, hi: 0xaf}, - {value: 0x4495, lo: 0xb0, hi: 0xbf}, - // Block 0x7b, offset 0x3ff - {value: 0x0000, lo: 0x04}, - {value: 0x44b5, lo: 0x80, hi: 0x8f}, - {value: 0x44d5, lo: 0x90, hi: 0x9f}, - {value: 0x44f5, lo: 0xa0, hi: 0xaf}, - {value: 0x44d5, lo: 0xb0, hi: 0xbf}, - // Block 0x7c, offset 0x404 - {value: 0x0000, lo: 0x0c}, - {value: 0x0008, lo: 0x80, hi: 0xa2}, - {value: 0x1008, lo: 0xa3, hi: 0xa4}, - {value: 0x1308, lo: 0xa5, hi: 0xa5}, - {value: 0x1008, lo: 0xa6, hi: 0xa7}, - {value: 0x1308, lo: 0xa8, hi: 0xa8}, - {value: 0x1008, lo: 0xa9, hi: 0xaa}, - {value: 0x0018, lo: 0xab, hi: 0xab}, - {value: 0x1008, lo: 0xac, hi: 0xac}, - {value: 0x1b08, lo: 0xad, hi: 0xad}, - {value: 0x0040, lo: 0xae, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xb9}, - {value: 0x0040, lo: 0xba, hi: 0xbf}, - // Block 0x7d, offset 0x411 - {value: 0x0000, lo: 0x03}, - {value: 0x0008, lo: 0x80, hi: 0xa3}, - {value: 0x0040, lo: 0xa4, hi: 0xaf}, - {value: 0x0018, lo: 0xb0, hi: 0xbf}, - // Block 0x7e, offset 0x415 - {value: 0x0000, lo: 0x04}, - {value: 0x0018, lo: 0x80, hi: 0x86}, - {value: 0x0040, lo: 0x87, hi: 0x8a}, - {value: 0x0018, lo: 0x8b, hi: 0xbb}, - {value: 0x0040, lo: 0xbc, hi: 0xbf}, - // Block 0x7f, offset 0x41a - {value: 0x0020, lo: 0x01}, - {value: 0x4515, lo: 0x80, hi: 0xbf}, - // Block 0x80, offset 0x41c - {value: 0x0020, lo: 0x03}, - {value: 0x4d15, lo: 0x80, hi: 0x94}, - {value: 0x4ad5, lo: 0x95, hi: 0x95}, - {value: 0x4fb5, lo: 0x96, hi: 0xbf}, - // Block 0x81, offset 0x420 - {value: 0x0020, lo: 0x01}, - {value: 0x54f5, lo: 0x80, hi: 0xbf}, - // Block 0x82, offset 0x422 - {value: 0x0020, lo: 0x03}, - {value: 0x5cf5, lo: 0x80, hi: 0x84}, - {value: 0x5655, lo: 0x85, hi: 0x85}, - {value: 0x5d95, lo: 0x86, hi: 0xbf}, - // Block 0x83, offset 0x426 - {value: 0x0020, lo: 0x08}, - {value: 0x6b55, lo: 0x80, hi: 0x8f}, - {value: 0x6d15, lo: 0x90, hi: 0x90}, - {value: 0x6d55, lo: 0x91, hi: 0xab}, - {value: 0x6ea1, lo: 0xac, hi: 0xac}, - {value: 0x70b5, lo: 0xad, hi: 0xad}, - {value: 0x0040, lo: 0xae, hi: 0xae}, - {value: 0x0040, lo: 0xaf, hi: 0xaf}, - {value: 0x70d5, lo: 0xb0, hi: 0xbf}, - // Block 0x84, offset 0x42f - {value: 0x0020, lo: 0x05}, - {value: 0x72d5, lo: 0x80, hi: 0xad}, - {value: 0x6535, lo: 0xae, hi: 0xae}, - {value: 0x7895, lo: 0xaf, hi: 0xb5}, - {value: 0x6f55, lo: 0xb6, hi: 0xb6}, - {value: 0x7975, lo: 0xb7, hi: 0xbf}, - // Block 0x85, offset 0x435 - {value: 0x0028, lo: 0x03}, - {value: 0x7c21, lo: 0x80, hi: 0x82}, - {value: 0x7be1, lo: 0x83, hi: 0x83}, - {value: 0x7c99, lo: 0x84, hi: 0xbf}, - // Block 0x86, offset 0x439 - {value: 0x0038, lo: 0x0f}, - {value: 0x9db1, lo: 0x80, hi: 0x83}, - {value: 0x9e59, lo: 0x84, hi: 0x85}, - {value: 0x9e91, lo: 0x86, hi: 0x87}, - {value: 0x9ec9, lo: 0x88, hi: 0x8f}, - {value: 0x0040, lo: 0x90, hi: 0x90}, - {value: 0x0040, lo: 0x91, hi: 0x91}, - {value: 0xa089, lo: 0x92, hi: 0x97}, - {value: 0xa1a1, lo: 0x98, hi: 0x9c}, - {value: 0xa281, lo: 0x9d, hi: 0xb3}, - {value: 0x9d41, lo: 0xb4, hi: 0xb4}, - {value: 0x9db1, lo: 0xb5, hi: 0xb5}, - {value: 0xa789, lo: 0xb6, hi: 0xbb}, - {value: 0xa869, lo: 0xbc, hi: 0xbc}, - {value: 0xa7f9, lo: 0xbd, hi: 0xbd}, - {value: 0xa8d9, lo: 0xbe, hi: 0xbf}, - // Block 0x87, offset 0x449 - {value: 0x0000, lo: 0x09}, - {value: 0x0008, lo: 0x80, hi: 0x8b}, - {value: 0x0040, lo: 0x8c, hi: 0x8c}, - {value: 0x0008, lo: 0x8d, hi: 0xa6}, - {value: 0x0040, lo: 0xa7, hi: 0xa7}, - {value: 0x0008, lo: 0xa8, hi: 0xba}, - {value: 0x0040, lo: 0xbb, hi: 0xbb}, - {value: 0x0008, lo: 0xbc, hi: 0xbd}, - {value: 0x0040, lo: 0xbe, hi: 0xbe}, - {value: 0x0008, lo: 0xbf, hi: 0xbf}, - // Block 0x88, offset 0x453 - {value: 0x0000, lo: 0x04}, - {value: 0x0008, lo: 0x80, hi: 0x8d}, - {value: 0x0040, lo: 0x8e, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x9d}, - {value: 0x0040, lo: 0x9e, hi: 0xbf}, - // Block 0x89, offset 0x458 - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0xba}, - {value: 0x0040, lo: 0xbb, hi: 0xbf}, - // Block 0x8a, offset 0x45b - {value: 0x0000, lo: 0x05}, - {value: 0x0018, lo: 0x80, hi: 0x82}, - {value: 0x0040, lo: 0x83, hi: 0x86}, - {value: 0x0018, lo: 0x87, hi: 0xb3}, - {value: 0x0040, lo: 0xb4, hi: 0xb6}, - {value: 0x0018, lo: 0xb7, hi: 0xbf}, - // Block 0x8b, offset 0x461 - {value: 0x0000, lo: 0x06}, - {value: 0x0018, lo: 0x80, hi: 0x8e}, - {value: 0x0040, lo: 0x8f, hi: 0x8f}, - {value: 0x0018, lo: 0x90, hi: 0x9b}, - {value: 0x0040, lo: 0x9c, hi: 0x9f}, - {value: 0x0018, lo: 0xa0, hi: 0xa0}, - {value: 0x0040, lo: 0xa1, hi: 0xbf}, - // Block 0x8c, offset 0x468 - {value: 0x0000, lo: 0x04}, - {value: 0x0040, lo: 0x80, hi: 0x8f}, - {value: 0x0018, lo: 0x90, hi: 0xbc}, - {value: 0x1308, lo: 0xbd, hi: 0xbd}, - {value: 0x0040, lo: 0xbe, hi: 0xbf}, - // Block 0x8d, offset 0x46d - {value: 0x0000, lo: 0x03}, - {value: 0x0008, lo: 0x80, hi: 0x9c}, - {value: 0x0040, lo: 0x9d, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xbf}, - // Block 0x8e, offset 0x471 - {value: 0x0000, lo: 0x05}, - {value: 0x0008, lo: 0x80, hi: 0x90}, - {value: 0x0040, lo: 0x91, hi: 0x9f}, - {value: 0x1308, lo: 0xa0, hi: 0xa0}, - {value: 0x0018, lo: 0xa1, hi: 0xbb}, - {value: 0x0040, lo: 0xbc, hi: 0xbf}, - // Block 0x8f, offset 0x477 - {value: 0x0000, lo: 0x04}, - {value: 0x0008, lo: 0x80, hi: 0x9f}, - {value: 0x0018, lo: 0xa0, hi: 0xa3}, - {value: 0x0040, lo: 0xa4, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0x90, offset 0x47c - {value: 0x0000, lo: 0x08}, - {value: 0x0008, lo: 0x80, hi: 0x80}, - {value: 0x0018, lo: 0x81, hi: 0x81}, - {value: 0x0008, lo: 0x82, hi: 0x89}, - {value: 0x0018, lo: 0x8a, hi: 0x8a}, - {value: 0x0040, lo: 0x8b, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0xb5}, - {value: 0x1308, lo: 0xb6, hi: 0xba}, - {value: 0x0040, lo: 0xbb, hi: 0xbf}, - // Block 0x91, offset 0x485 - {value: 0x0000, lo: 0x04}, - {value: 0x0008, lo: 0x80, hi: 0x9d}, - {value: 0x0040, lo: 0x9e, hi: 0x9e}, - {value: 0x0018, lo: 0x9f, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xbf}, - // Block 0x92, offset 0x48a - {value: 0x0000, lo: 0x05}, - {value: 0x0008, lo: 0x80, hi: 0x83}, - {value: 0x0040, lo: 0x84, hi: 0x87}, - {value: 0x0008, lo: 0x88, hi: 0x8f}, - {value: 0x0018, lo: 0x90, hi: 0x95}, - {value: 0x0040, lo: 0x96, hi: 0xbf}, - // Block 0x93, offset 0x490 - {value: 0x0000, lo: 0x06}, - {value: 0xe145, lo: 0x80, hi: 0x87}, - {value: 0xe1c5, lo: 0x88, hi: 0x8f}, - {value: 0xe145, lo: 0x90, hi: 0x97}, - {value: 0x8ad5, lo: 0x98, hi: 0x9f}, - {value: 0x8aed, lo: 0xa0, hi: 0xa7}, - {value: 0x0008, lo: 0xa8, hi: 0xbf}, - // Block 0x94, offset 0x497 - {value: 0x0000, lo: 0x06}, - {value: 0x0008, lo: 0x80, hi: 0x9d}, - {value: 0x0040, lo: 0x9e, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xa9}, - {value: 0x0040, lo: 0xaa, hi: 0xaf}, - {value: 0x8aed, lo: 0xb0, hi: 0xb7}, - {value: 0x8ad5, lo: 0xb8, hi: 0xbf}, - // Block 0x95, offset 0x49e - {value: 0x0000, lo: 0x06}, - {value: 0xe145, lo: 0x80, hi: 0x87}, - {value: 0xe1c5, lo: 0x88, hi: 0x8f}, - {value: 0xe145, lo: 0x90, hi: 0x93}, - {value: 0x0040, lo: 0x94, hi: 0x97}, - {value: 0x0008, lo: 0x98, hi: 0xbb}, - {value: 0x0040, lo: 0xbc, hi: 0xbf}, - // Block 0x96, offset 0x4a5 - {value: 0x0000, lo: 0x03}, - {value: 0x0008, lo: 0x80, hi: 0xa7}, - {value: 0x0040, lo: 0xa8, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0x97, offset 0x4a9 - {value: 0x0000, lo: 0x04}, - {value: 0x0008, lo: 0x80, hi: 0xa3}, - {value: 0x0040, lo: 0xa4, hi: 0xae}, - {value: 0x0018, lo: 0xaf, hi: 0xaf}, - {value: 0x0040, lo: 0xb0, hi: 0xbf}, - // Block 0x98, offset 0x4ae - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0xb6}, - {value: 0x0040, lo: 0xb7, hi: 0xbf}, - // Block 0x99, offset 0x4b1 - {value: 0x0000, lo: 0x04}, - {value: 0x0008, lo: 0x80, hi: 0x95}, - {value: 0x0040, lo: 0x96, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xa7}, - {value: 0x0040, lo: 0xa8, hi: 0xbf}, - // Block 0x9a, offset 0x4b6 - {value: 0x0000, lo: 0x0b}, - {value: 0x0008, lo: 0x80, hi: 0x85}, - {value: 0x0040, lo: 0x86, hi: 0x87}, - {value: 0x0008, lo: 0x88, hi: 0x88}, - {value: 0x0040, lo: 0x89, hi: 0x89}, - {value: 0x0008, lo: 0x8a, hi: 0xb5}, - {value: 0x0040, lo: 0xb6, hi: 0xb6}, - {value: 0x0008, lo: 0xb7, hi: 0xb8}, - {value: 0x0040, lo: 0xb9, hi: 0xbb}, - {value: 0x0008, lo: 0xbc, hi: 0xbc}, - {value: 0x0040, lo: 0xbd, hi: 0xbe}, - {value: 0x0008, lo: 0xbf, hi: 0xbf}, - // Block 0x9b, offset 0x4c2 - {value: 0x0000, lo: 0x05}, - {value: 0x0008, lo: 0x80, hi: 0x95}, - {value: 0x0040, lo: 0x96, hi: 0x96}, - {value: 0x0018, lo: 0x97, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xb6}, - {value: 0x0018, lo: 0xb7, hi: 0xbf}, - // Block 0x9c, offset 0x4c8 - {value: 0x0000, lo: 0x04}, - {value: 0x0008, lo: 0x80, hi: 0x9e}, - {value: 0x0040, lo: 0x9f, hi: 0xa6}, - {value: 0x0018, lo: 0xa7, hi: 0xaf}, - {value: 0x0040, lo: 0xb0, hi: 0xbf}, - // Block 0x9d, offset 0x4cd - {value: 0x0000, lo: 0x06}, - {value: 0x0040, lo: 0x80, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xb2}, - {value: 0x0040, lo: 0xb3, hi: 0xb3}, - {value: 0x0008, lo: 0xb4, hi: 0xb5}, - {value: 0x0040, lo: 0xb6, hi: 0xba}, - {value: 0x0018, lo: 0xbb, hi: 0xbf}, - // Block 0x9e, offset 0x4d4 - {value: 0x0000, lo: 0x07}, - {value: 0x0008, lo: 0x80, hi: 0x95}, - {value: 0x0018, lo: 0x96, hi: 0x9b}, - {value: 0x0040, lo: 0x9c, hi: 0x9e}, - {value: 0x0018, lo: 0x9f, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xb9}, - {value: 0x0040, lo: 0xba, hi: 0xbe}, - {value: 0x0018, lo: 0xbf, hi: 0xbf}, - // Block 0x9f, offset 0x4dc - {value: 0x0000, lo: 0x04}, - {value: 0x0008, lo: 0x80, hi: 0xb7}, - {value: 0x0040, lo: 0xb8, hi: 0xbb}, - {value: 0x0018, lo: 0xbc, hi: 0xbd}, - {value: 0x0008, lo: 0xbe, hi: 0xbf}, - // Block 0xa0, offset 0x4e1 - {value: 0x0000, lo: 0x03}, - {value: 0x0018, lo: 0x80, hi: 0x8f}, - {value: 0x0040, lo: 0x90, hi: 0x91}, - {value: 0x0018, lo: 0x92, hi: 0xbf}, - // Block 0xa1, offset 0x4e5 - {value: 0x0000, lo: 0x0f}, - {value: 0x0008, lo: 0x80, hi: 0x80}, - {value: 0x1308, lo: 0x81, hi: 0x83}, - {value: 0x0040, lo: 0x84, hi: 0x84}, - {value: 0x1308, lo: 0x85, hi: 0x86}, - {value: 0x0040, lo: 0x87, hi: 0x8b}, - {value: 0x1308, lo: 0x8c, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x93}, - {value: 0x0040, lo: 0x94, hi: 0x94}, - {value: 0x0008, lo: 0x95, hi: 0x97}, - {value: 0x0040, lo: 0x98, hi: 0x98}, - {value: 0x0008, lo: 0x99, hi: 0xb3}, - {value: 0x0040, lo: 0xb4, hi: 0xb7}, - {value: 0x1308, lo: 0xb8, hi: 0xba}, - {value: 0x0040, lo: 0xbb, hi: 0xbe}, - {value: 0x1b08, lo: 0xbf, hi: 0xbf}, - // Block 0xa2, offset 0x4f5 - {value: 0x0000, lo: 0x06}, - {value: 0x0018, lo: 0x80, hi: 0x87}, - {value: 0x0040, lo: 0x88, hi: 0x8f}, - {value: 0x0018, lo: 0x90, hi: 0x98}, - {value: 0x0040, lo: 0x99, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xbc}, - {value: 0x0018, lo: 0xbd, hi: 0xbf}, - // Block 0xa3, offset 0x4fc - {value: 0x0000, lo: 0x03}, - {value: 0x0008, lo: 0x80, hi: 0x9c}, - {value: 0x0018, lo: 0x9d, hi: 0x9f}, - {value: 0x0040, lo: 0xa0, hi: 0xbf}, - // Block 0xa4, offset 0x500 - {value: 0x0000, lo: 0x03}, - {value: 0x0008, lo: 0x80, hi: 0xb5}, - {value: 0x0040, lo: 0xb6, hi: 0xb8}, - {value: 0x0018, lo: 0xb9, hi: 0xbf}, - // Block 0xa5, offset 0x504 - {value: 0x0000, lo: 0x06}, - {value: 0x0008, lo: 0x80, hi: 0x95}, - {value: 0x0040, lo: 0x96, hi: 0x97}, - {value: 0x0018, lo: 0x98, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xb2}, - {value: 0x0040, lo: 0xb3, hi: 0xb7}, - {value: 0x0018, lo: 0xb8, hi: 0xbf}, - // Block 0xa6, offset 0x50b - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0x88}, - {value: 0x0040, lo: 0x89, hi: 0xbf}, - // Block 0xa7, offset 0x50e - {value: 0x0000, lo: 0x02}, - {value: 0x03dd, lo: 0x80, hi: 0xb2}, - {value: 0x0040, lo: 0xb3, hi: 0xbf}, - // Block 0xa8, offset 0x511 - {value: 0x0000, lo: 0x03}, - {value: 0x0008, lo: 0x80, hi: 0xb2}, - {value: 0x0040, lo: 0xb3, hi: 0xb9}, - {value: 0x0018, lo: 0xba, hi: 0xbf}, - // Block 0xa9, offset 0x515 - {value: 0x0000, lo: 0x03}, - {value: 0x0040, lo: 0x80, hi: 0x9f}, - {value: 0x0018, lo: 0xa0, hi: 0xbe}, - {value: 0x0040, lo: 0xbf, hi: 0xbf}, - // Block 0xaa, offset 0x519 - {value: 0x0000, lo: 0x05}, - {value: 0x1008, lo: 0x80, hi: 0x80}, - {value: 0x1308, lo: 0x81, hi: 0x81}, - {value: 0x1008, lo: 0x82, hi: 0x82}, - {value: 0x0008, lo: 0x83, hi: 0xb7}, - {value: 0x1308, lo: 0xb8, hi: 0xbf}, - // Block 0xab, offset 0x51f - {value: 0x0000, lo: 0x08}, - {value: 0x1308, lo: 0x80, hi: 0x85}, - {value: 0x1b08, lo: 0x86, hi: 0x86}, - {value: 0x0018, lo: 0x87, hi: 0x8d}, - {value: 0x0040, lo: 0x8e, hi: 0x91}, - {value: 0x0018, lo: 0x92, hi: 0xa5}, - {value: 0x0008, lo: 0xa6, hi: 0xaf}, - {value: 0x0040, lo: 0xb0, hi: 0xbe}, - {value: 0x1b08, lo: 0xbf, hi: 0xbf}, - // Block 0xac, offset 0x528 - {value: 0x0000, lo: 0x0b}, - {value: 0x1308, lo: 0x80, hi: 0x81}, - {value: 0x1008, lo: 0x82, hi: 0x82}, - {value: 0x0008, lo: 0x83, hi: 0xaf}, - {value: 0x1008, lo: 0xb0, hi: 0xb2}, - {value: 0x1308, lo: 0xb3, hi: 0xb6}, - {value: 0x1008, lo: 0xb7, hi: 0xb8}, - {value: 0x1b08, lo: 0xb9, hi: 0xb9}, - {value: 0x1308, lo: 0xba, hi: 0xba}, - {value: 0x0018, lo: 0xbb, hi: 0xbc}, - {value: 0x0340, lo: 0xbd, hi: 0xbd}, - {value: 0x0018, lo: 0xbe, hi: 0xbf}, - // Block 0xad, offset 0x534 - {value: 0x0000, lo: 0x06}, - {value: 0x0018, lo: 0x80, hi: 0x81}, - {value: 0x0040, lo: 0x82, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0xa8}, - {value: 0x0040, lo: 0xa9, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xb9}, - {value: 0x0040, lo: 0xba, hi: 0xbf}, - // Block 0xae, offset 0x53b - {value: 0x0000, lo: 0x08}, - {value: 0x1308, lo: 0x80, hi: 0x82}, - {value: 0x0008, lo: 0x83, hi: 0xa6}, - {value: 0x1308, lo: 0xa7, hi: 0xab}, - {value: 0x1008, lo: 0xac, hi: 0xac}, - {value: 0x1308, lo: 0xad, hi: 0xb2}, - {value: 0x1b08, lo: 0xb3, hi: 0xb4}, - {value: 0x0040, lo: 0xb5, hi: 0xb5}, - {value: 0x0008, lo: 0xb6, hi: 0xbf}, - // Block 0xaf, offset 0x544 - {value: 0x0000, lo: 0x07}, - {value: 0x0018, lo: 0x80, hi: 0x83}, - {value: 0x0040, lo: 0x84, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0xb2}, - {value: 0x1308, lo: 0xb3, hi: 0xb3}, - {value: 0x0018, lo: 0xb4, hi: 0xb5}, - {value: 0x0008, lo: 0xb6, hi: 0xb6}, - {value: 0x0040, lo: 0xb7, hi: 0xbf}, - // Block 0xb0, offset 0x54c - {value: 0x0000, lo: 0x06}, - {value: 0x1308, lo: 0x80, hi: 0x81}, - {value: 0x1008, lo: 0x82, hi: 0x82}, - {value: 0x0008, lo: 0x83, hi: 0xb2}, - {value: 0x1008, lo: 0xb3, hi: 0xb5}, - {value: 0x1308, lo: 0xb6, hi: 0xbe}, - {value: 0x1008, lo: 0xbf, hi: 0xbf}, - // Block 0xb1, offset 0x553 - {value: 0x0000, lo: 0x0d}, - {value: 0x1808, lo: 0x80, hi: 0x80}, - {value: 0x0008, lo: 0x81, hi: 0x84}, - {value: 0x0018, lo: 0x85, hi: 0x89}, - {value: 0x1308, lo: 0x8a, hi: 0x8c}, - {value: 0x0018, lo: 0x8d, hi: 0x8d}, - {value: 0x0040, lo: 0x8e, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x9a}, - {value: 0x0018, lo: 0x9b, hi: 0x9b}, - {value: 0x0008, lo: 0x9c, hi: 0x9c}, - {value: 0x0018, lo: 0x9d, hi: 0x9f}, - {value: 0x0040, lo: 0xa0, hi: 0xa0}, - {value: 0x0018, lo: 0xa1, hi: 0xb4}, - {value: 0x0040, lo: 0xb5, hi: 0xbf}, - // Block 0xb2, offset 0x561 - {value: 0x0000, lo: 0x0c}, - {value: 0x0008, lo: 0x80, hi: 0x91}, - {value: 0x0040, lo: 0x92, hi: 0x92}, - {value: 0x0008, lo: 0x93, hi: 0xab}, - {value: 0x1008, lo: 0xac, hi: 0xae}, - {value: 0x1308, lo: 0xaf, hi: 0xb1}, - {value: 0x1008, lo: 0xb2, hi: 0xb3}, - {value: 0x1308, lo: 0xb4, hi: 0xb4}, - {value: 0x1808, lo: 0xb5, hi: 0xb5}, - {value: 0x1308, lo: 0xb6, hi: 0xb7}, - {value: 0x0018, lo: 0xb8, hi: 0xbd}, - {value: 0x1308, lo: 0xbe, hi: 0xbe}, - {value: 0x0040, lo: 0xbf, hi: 0xbf}, - // Block 0xb3, offset 0x56e - {value: 0x0000, lo: 0x0c}, - {value: 0x0008, lo: 0x80, hi: 0x86}, - {value: 0x0040, lo: 0x87, hi: 0x87}, - {value: 0x0008, lo: 0x88, hi: 0x88}, - {value: 0x0040, lo: 0x89, hi: 0x89}, - {value: 0x0008, lo: 0x8a, hi: 0x8d}, - {value: 0x0040, lo: 0x8e, hi: 0x8e}, - {value: 0x0008, lo: 0x8f, hi: 0x9d}, - {value: 0x0040, lo: 0x9e, hi: 0x9e}, - {value: 0x0008, lo: 0x9f, hi: 0xa8}, - {value: 0x0018, lo: 0xa9, hi: 0xa9}, - {value: 0x0040, lo: 0xaa, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xbf}, - // Block 0xb4, offset 0x57b - {value: 0x0000, lo: 0x08}, - {value: 0x0008, lo: 0x80, hi: 0x9e}, - {value: 0x1308, lo: 0x9f, hi: 0x9f}, - {value: 0x1008, lo: 0xa0, hi: 0xa2}, - {value: 0x1308, lo: 0xa3, hi: 0xa9}, - {value: 0x1b08, lo: 0xaa, hi: 0xaa}, - {value: 0x0040, lo: 0xab, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xb9}, - {value: 0x0040, lo: 0xba, hi: 0xbf}, - // Block 0xb5, offset 0x584 - {value: 0x0000, lo: 0x03}, - {value: 0x0008, lo: 0x80, hi: 0xb4}, - {value: 0x1008, lo: 0xb5, hi: 0xb7}, - {value: 0x1308, lo: 0xb8, hi: 0xbf}, - // Block 0xb6, offset 0x588 - {value: 0x0000, lo: 0x0d}, - {value: 0x1008, lo: 0x80, hi: 0x81}, - {value: 0x1b08, lo: 0x82, hi: 0x82}, - {value: 0x1308, lo: 0x83, hi: 0x84}, - {value: 0x1008, lo: 0x85, hi: 0x85}, - {value: 0x1308, lo: 0x86, hi: 0x86}, - {value: 0x0008, lo: 0x87, hi: 0x8a}, - {value: 0x0018, lo: 0x8b, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x99}, - {value: 0x0040, lo: 0x9a, hi: 0x9a}, - {value: 0x0018, lo: 0x9b, hi: 0x9b}, - {value: 0x0040, lo: 0x9c, hi: 0x9c}, - {value: 0x0018, lo: 0x9d, hi: 0x9d}, - {value: 0x0040, lo: 0x9e, hi: 0xbf}, - // Block 0xb7, offset 0x596 - {value: 0x0000, lo: 0x07}, - {value: 0x0008, lo: 0x80, hi: 0xaf}, - {value: 0x1008, lo: 0xb0, hi: 0xb2}, - {value: 0x1308, lo: 0xb3, hi: 0xb8}, - {value: 0x1008, lo: 0xb9, hi: 0xb9}, - {value: 0x1308, lo: 0xba, hi: 0xba}, - {value: 0x1008, lo: 0xbb, hi: 0xbe}, - {value: 0x1308, lo: 0xbf, hi: 0xbf}, - // Block 0xb8, offset 0x59e - {value: 0x0000, lo: 0x0a}, - {value: 0x1308, lo: 0x80, hi: 0x80}, - {value: 0x1008, lo: 0x81, hi: 0x81}, - {value: 0x1b08, lo: 0x82, hi: 0x82}, - {value: 0x1308, lo: 0x83, hi: 0x83}, - {value: 0x0008, lo: 0x84, hi: 0x85}, - {value: 0x0018, lo: 0x86, hi: 0x86}, - {value: 0x0008, lo: 0x87, hi: 0x87}, - {value: 0x0040, lo: 0x88, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x99}, - {value: 0x0040, lo: 0x9a, hi: 0xbf}, - // Block 0xb9, offset 0x5a9 - {value: 0x0000, lo: 0x08}, - {value: 0x0008, lo: 0x80, hi: 0xae}, - {value: 0x1008, lo: 0xaf, hi: 0xb1}, - {value: 0x1308, lo: 0xb2, hi: 0xb5}, - {value: 0x0040, lo: 0xb6, hi: 0xb7}, - {value: 0x1008, lo: 0xb8, hi: 0xbb}, - {value: 0x1308, lo: 0xbc, hi: 0xbd}, - {value: 0x1008, lo: 0xbe, hi: 0xbe}, - {value: 0x1b08, lo: 0xbf, hi: 0xbf}, - // Block 0xba, offset 0x5b2 - {value: 0x0000, lo: 0x05}, - {value: 0x1308, lo: 0x80, hi: 0x80}, - {value: 0x0018, lo: 0x81, hi: 0x97}, - {value: 0x0008, lo: 0x98, hi: 0x9b}, - {value: 0x1308, lo: 0x9c, hi: 0x9d}, - {value: 0x0040, lo: 0x9e, hi: 0xbf}, - // Block 0xbb, offset 0x5b8 - {value: 0x0000, lo: 0x07}, - {value: 0x0008, lo: 0x80, hi: 0xaf}, - {value: 0x1008, lo: 0xb0, hi: 0xb2}, - {value: 0x1308, lo: 0xb3, hi: 0xba}, - {value: 0x1008, lo: 0xbb, hi: 0xbc}, - {value: 0x1308, lo: 0xbd, hi: 0xbd}, - {value: 0x1008, lo: 0xbe, hi: 0xbe}, - {value: 0x1b08, lo: 0xbf, hi: 0xbf}, - // Block 0xbc, offset 0x5c0 - {value: 0x0000, lo: 0x08}, - {value: 0x1308, lo: 0x80, hi: 0x80}, - {value: 0x0018, lo: 0x81, hi: 0x83}, - {value: 0x0008, lo: 0x84, hi: 0x84}, - {value: 0x0040, lo: 0x85, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x99}, - {value: 0x0040, lo: 0x9a, hi: 0x9f}, - {value: 0x0018, lo: 0xa0, hi: 0xac}, - {value: 0x0040, lo: 0xad, hi: 0xbf}, - // Block 0xbd, offset 0x5c9 - {value: 0x0000, lo: 0x09}, - {value: 0x0008, lo: 0x80, hi: 0xaa}, - {value: 0x1308, lo: 0xab, hi: 0xab}, - {value: 0x1008, lo: 0xac, hi: 0xac}, - {value: 0x1308, lo: 0xad, hi: 0xad}, - {value: 0x1008, lo: 0xae, hi: 0xaf}, - {value: 0x1308, lo: 0xb0, hi: 0xb5}, - {value: 0x1808, lo: 0xb6, hi: 0xb6}, - {value: 0x1308, lo: 0xb7, hi: 0xb7}, - {value: 0x0040, lo: 0xb8, hi: 0xbf}, - // Block 0xbe, offset 0x5d3 - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0x89}, - {value: 0x0040, lo: 0x8a, hi: 0xbf}, - // Block 0xbf, offset 0x5d6 - {value: 0x0000, lo: 0x0b}, - {value: 0x0008, lo: 0x80, hi: 0x99}, - {value: 0x0040, lo: 0x9a, hi: 0x9c}, - {value: 0x1308, lo: 0x9d, hi: 0x9f}, - {value: 0x1008, lo: 0xa0, hi: 0xa1}, - {value: 0x1308, lo: 0xa2, hi: 0xa5}, - {value: 0x1008, lo: 0xa6, hi: 0xa6}, - {value: 0x1308, lo: 0xa7, hi: 0xaa}, - {value: 0x1b08, lo: 0xab, hi: 0xab}, - {value: 0x0040, lo: 0xac, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xb9}, - {value: 0x0018, lo: 0xba, hi: 0xbf}, - // Block 0xc0, offset 0x5e2 - {value: 0x0000, lo: 0x02}, - {value: 0x0040, lo: 0x80, hi: 0x9f}, - {value: 0x049d, lo: 0xa0, hi: 0xbf}, - // Block 0xc1, offset 0x5e5 - {value: 0x0000, lo: 0x04}, - {value: 0x0008, lo: 0x80, hi: 0xa9}, - {value: 0x0018, lo: 0xaa, hi: 0xb2}, - {value: 0x0040, lo: 0xb3, hi: 0xbe}, - {value: 0x0008, lo: 0xbf, hi: 0xbf}, - // Block 0xc2, offset 0x5ea - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0xb8}, - {value: 0x0040, lo: 0xb9, hi: 0xbf}, - // Block 0xc3, offset 0x5ed - {value: 0x0000, lo: 0x09}, - {value: 0x0008, lo: 0x80, hi: 0x88}, - {value: 0x0040, lo: 0x89, hi: 0x89}, - {value: 0x0008, lo: 0x8a, hi: 0xae}, - {value: 0x1008, lo: 0xaf, hi: 0xaf}, - {value: 0x1308, lo: 0xb0, hi: 0xb6}, - {value: 0x0040, lo: 0xb7, hi: 0xb7}, - {value: 0x1308, lo: 0xb8, hi: 0xbd}, - {value: 0x1008, lo: 0xbe, hi: 0xbe}, - {value: 0x1b08, lo: 0xbf, hi: 0xbf}, - // Block 0xc4, offset 0x5f7 - {value: 0x0000, lo: 0x08}, - {value: 0x0008, lo: 0x80, hi: 0x80}, - {value: 0x0018, lo: 0x81, hi: 0x85}, - {value: 0x0040, lo: 0x86, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x99}, - {value: 0x0018, lo: 0x9a, hi: 0xac}, - {value: 0x0040, lo: 0xad, hi: 0xaf}, - {value: 0x0018, lo: 0xb0, hi: 0xb1}, - {value: 0x0008, lo: 0xb2, hi: 0xbf}, - // Block 0xc5, offset 0x600 - {value: 0x0000, lo: 0x0b}, - {value: 0x0008, lo: 0x80, hi: 0x8f}, - {value: 0x0040, lo: 0x90, hi: 0x91}, - {value: 0x1308, lo: 0x92, hi: 0xa7}, - {value: 0x0040, lo: 0xa8, hi: 0xa8}, - {value: 0x1008, lo: 0xa9, hi: 0xa9}, - {value: 0x1308, lo: 0xaa, hi: 0xb0}, - {value: 0x1008, lo: 0xb1, hi: 0xb1}, - {value: 0x1308, lo: 0xb2, hi: 0xb3}, - {value: 0x1008, lo: 0xb4, hi: 0xb4}, - {value: 0x1308, lo: 0xb5, hi: 0xb6}, - {value: 0x0040, lo: 0xb7, hi: 0xbf}, - // Block 0xc6, offset 0x60c - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0x99}, - {value: 0x0040, lo: 0x9a, hi: 0xbf}, - // Block 0xc7, offset 0x60f - {value: 0x0000, lo: 0x04}, - {value: 0x0018, lo: 0x80, hi: 0xae}, - {value: 0x0040, lo: 0xaf, hi: 0xaf}, - {value: 0x0018, lo: 0xb0, hi: 0xb4}, - {value: 0x0040, lo: 0xb5, hi: 0xbf}, - // Block 0xc8, offset 0x614 - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0x83}, - {value: 0x0040, lo: 0x84, hi: 0xbf}, - // Block 0xc9, offset 0x617 - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0xae}, - {value: 0x0040, lo: 0xaf, hi: 0xbf}, - // Block 0xca, offset 0x61a - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0x86}, - {value: 0x0040, lo: 0x87, hi: 0xbf}, - // Block 0xcb, offset 0x61d - {value: 0x0000, lo: 0x06}, - {value: 0x0008, lo: 0x80, hi: 0x9e}, - {value: 0x0040, lo: 0x9f, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xa9}, - {value: 0x0040, lo: 0xaa, hi: 0xad}, - {value: 0x0018, lo: 0xae, hi: 0xaf}, - {value: 0x0040, lo: 0xb0, hi: 0xbf}, - // Block 0xcc, offset 0x624 - {value: 0x0000, lo: 0x06}, - {value: 0x0040, lo: 0x80, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0xad}, - {value: 0x0040, lo: 0xae, hi: 0xaf}, - {value: 0x1308, lo: 0xb0, hi: 0xb4}, - {value: 0x0018, lo: 0xb5, hi: 0xb5}, - {value: 0x0040, lo: 0xb6, hi: 0xbf}, - // Block 0xcd, offset 0x62b - {value: 0x0000, lo: 0x03}, - {value: 0x0008, lo: 0x80, hi: 0xaf}, - {value: 0x1308, lo: 0xb0, hi: 0xb6}, - {value: 0x0018, lo: 0xb7, hi: 0xbf}, - // Block 0xce, offset 0x62f - {value: 0x0000, lo: 0x0a}, - {value: 0x0008, lo: 0x80, hi: 0x83}, - {value: 0x0018, lo: 0x84, hi: 0x85}, - {value: 0x0040, lo: 0x86, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x99}, - {value: 0x0040, lo: 0x9a, hi: 0x9a}, - {value: 0x0018, lo: 0x9b, hi: 0xa1}, - {value: 0x0040, lo: 0xa2, hi: 0xa2}, - {value: 0x0008, lo: 0xa3, hi: 0xb7}, - {value: 0x0040, lo: 0xb8, hi: 0xbc}, - {value: 0x0008, lo: 0xbd, hi: 0xbf}, - // Block 0xcf, offset 0x63a - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0x8f}, - {value: 0x0040, lo: 0x90, hi: 0xbf}, - // Block 0xd0, offset 0x63d - {value: 0x0000, lo: 0x05}, - {value: 0x0008, lo: 0x80, hi: 0x84}, - {value: 0x0040, lo: 0x85, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x90}, - {value: 0x1008, lo: 0x91, hi: 0xbe}, - {value: 0x0040, lo: 0xbf, hi: 0xbf}, - // Block 0xd1, offset 0x643 - {value: 0x0000, lo: 0x04}, - {value: 0x0040, lo: 0x80, hi: 0x8e}, - {value: 0x1308, lo: 0x8f, hi: 0x92}, - {value: 0x0008, lo: 0x93, hi: 0x9f}, - {value: 0x0040, lo: 0xa0, hi: 0xbf}, - // Block 0xd2, offset 0x648 - {value: 0x0000, lo: 0x03}, - {value: 0x0040, lo: 0x80, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xa0}, - {value: 0x0040, lo: 0xa1, hi: 0xbf}, - // Block 0xd3, offset 0x64c - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0xac}, - {value: 0x0040, lo: 0xad, hi: 0xbf}, - // Block 0xd4, offset 0x64f - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0xb2}, - {value: 0x0040, lo: 0xb3, hi: 0xbf}, - // Block 0xd5, offset 0x652 - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0x81}, - {value: 0x0040, lo: 0x82, hi: 0xbf}, - // Block 0xd6, offset 0x655 - {value: 0x0000, lo: 0x04}, - {value: 0x0008, lo: 0x80, hi: 0xaa}, - {value: 0x0040, lo: 0xab, hi: 0xaf}, - {value: 0x0008, lo: 0xb0, hi: 0xbc}, - {value: 0x0040, lo: 0xbd, hi: 0xbf}, - // Block 0xd7, offset 0x65a - {value: 0x0000, lo: 0x09}, - {value: 0x0008, lo: 0x80, hi: 0x88}, - {value: 0x0040, lo: 0x89, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x99}, - {value: 0x0040, lo: 0x9a, hi: 0x9b}, - {value: 0x0018, lo: 0x9c, hi: 0x9c}, - {value: 0x1308, lo: 0x9d, hi: 0x9e}, - {value: 0x0018, lo: 0x9f, hi: 0x9f}, - {value: 0x03c0, lo: 0xa0, hi: 0xa3}, - {value: 0x0040, lo: 0xa4, hi: 0xbf}, - // Block 0xd8, offset 0x664 - {value: 0x0000, lo: 0x02}, - {value: 0x0018, lo: 0x80, hi: 0xb5}, - {value: 0x0040, lo: 0xb6, hi: 0xbf}, - // Block 0xd9, offset 0x667 - {value: 0x0000, lo: 0x03}, - {value: 0x0018, lo: 0x80, hi: 0xa6}, - {value: 0x0040, lo: 0xa7, hi: 0xa8}, - {value: 0x0018, lo: 0xa9, hi: 0xbf}, - // Block 0xda, offset 0x66b - {value: 0x0000, lo: 0x0e}, - {value: 0x0018, lo: 0x80, hi: 0x9d}, - {value: 0xb5b9, lo: 0x9e, hi: 0x9e}, - {value: 0xb601, lo: 0x9f, hi: 0x9f}, - {value: 0xb649, lo: 0xa0, hi: 0xa0}, - {value: 0xb6b1, lo: 0xa1, hi: 0xa1}, - {value: 0xb719, lo: 0xa2, hi: 0xa2}, - {value: 0xb781, lo: 0xa3, hi: 0xa3}, - {value: 0xb7e9, lo: 0xa4, hi: 0xa4}, - {value: 0x1018, lo: 0xa5, hi: 0xa6}, - {value: 0x1318, lo: 0xa7, hi: 0xa9}, - {value: 0x0018, lo: 0xaa, hi: 0xac}, - {value: 0x1018, lo: 0xad, hi: 0xb2}, - {value: 0x0340, lo: 0xb3, hi: 0xba}, - {value: 0x1318, lo: 0xbb, hi: 0xbf}, - // Block 0xdb, offset 0x67a - {value: 0x0000, lo: 0x0b}, - {value: 0x1318, lo: 0x80, hi: 0x82}, - {value: 0x0018, lo: 0x83, hi: 0x84}, - {value: 0x1318, lo: 0x85, hi: 0x8b}, - {value: 0x0018, lo: 0x8c, hi: 0xa9}, - {value: 0x1318, lo: 0xaa, hi: 0xad}, - {value: 0x0018, lo: 0xae, hi: 0xba}, - {value: 0xb851, lo: 0xbb, hi: 0xbb}, - {value: 0xb899, lo: 0xbc, hi: 0xbc}, - {value: 0xb8e1, lo: 0xbd, hi: 0xbd}, - {value: 0xb949, lo: 0xbe, hi: 0xbe}, - {value: 0xb9b1, lo: 0xbf, hi: 0xbf}, - // Block 0xdc, offset 0x686 - {value: 0x0000, lo: 0x03}, - {value: 0xba19, lo: 0x80, hi: 0x80}, - {value: 0x0018, lo: 0x81, hi: 0xa8}, - {value: 0x0040, lo: 0xa9, hi: 0xbf}, - // Block 0xdd, offset 0x68a - {value: 0x0000, lo: 0x04}, - {value: 0x0018, lo: 0x80, hi: 0x81}, - {value: 0x1318, lo: 0x82, hi: 0x84}, - {value: 0x0018, lo: 0x85, hi: 0x85}, - {value: 0x0040, lo: 0x86, hi: 0xbf}, - // Block 0xde, offset 0x68f - {value: 0x0000, lo: 0x04}, - {value: 0x0018, lo: 0x80, hi: 0x96}, - {value: 0x0040, lo: 0x97, hi: 0x9f}, - {value: 0x0018, lo: 0xa0, hi: 0xb1}, - {value: 0x0040, lo: 0xb2, hi: 0xbf}, - // Block 0xdf, offset 0x694 - {value: 0x0000, lo: 0x03}, - {value: 0x1308, lo: 0x80, hi: 0xb6}, - {value: 0x0018, lo: 0xb7, hi: 0xba}, - {value: 0x1308, lo: 0xbb, hi: 0xbf}, - // Block 0xe0, offset 0x698 - {value: 0x0000, lo: 0x04}, - {value: 0x1308, lo: 0x80, hi: 0xac}, - {value: 0x0018, lo: 0xad, hi: 0xb4}, - {value: 0x1308, lo: 0xb5, hi: 0xb5}, - {value: 0x0018, lo: 0xb6, hi: 0xbf}, - // Block 0xe1, offset 0x69d - {value: 0x0000, lo: 0x08}, - {value: 0x0018, lo: 0x80, hi: 0x83}, - {value: 0x1308, lo: 0x84, hi: 0x84}, - {value: 0x0018, lo: 0x85, hi: 0x8b}, - {value: 0x0040, lo: 0x8c, hi: 0x9a}, - {value: 0x1308, lo: 0x9b, hi: 0x9f}, - {value: 0x0040, lo: 0xa0, hi: 0xa0}, - {value: 0x1308, lo: 0xa1, hi: 0xaf}, - {value: 0x0040, lo: 0xb0, hi: 0xbf}, - // Block 0xe2, offset 0x6a6 - {value: 0x0000, lo: 0x0a}, - {value: 0x1308, lo: 0x80, hi: 0x86}, - {value: 0x0040, lo: 0x87, hi: 0x87}, - {value: 0x1308, lo: 0x88, hi: 0x98}, - {value: 0x0040, lo: 0x99, hi: 0x9a}, - {value: 0x1308, lo: 0x9b, hi: 0xa1}, - {value: 0x0040, lo: 0xa2, hi: 0xa2}, - {value: 0x1308, lo: 0xa3, hi: 0xa4}, - {value: 0x0040, lo: 0xa5, hi: 0xa5}, - {value: 0x1308, lo: 0xa6, hi: 0xaa}, - {value: 0x0040, lo: 0xab, hi: 0xbf}, - // Block 0xe3, offset 0x6b1 - {value: 0x0000, lo: 0x05}, - {value: 0x0008, lo: 0x80, hi: 0x84}, - {value: 0x0040, lo: 0x85, hi: 0x86}, - {value: 0x0018, lo: 0x87, hi: 0x8f}, - {value: 0x1308, lo: 0x90, hi: 0x96}, - {value: 0x0040, lo: 0x97, hi: 0xbf}, - // Block 0xe4, offset 0x6b7 - {value: 0x0000, lo: 0x07}, - {value: 0x0208, lo: 0x80, hi: 0x83}, - {value: 0x1308, lo: 0x84, hi: 0x8a}, - {value: 0x0040, lo: 0x8b, hi: 0x8f}, - {value: 0x0008, lo: 0x90, hi: 0x99}, - {value: 0x0040, lo: 0x9a, hi: 0x9d}, - {value: 0x0018, lo: 0x9e, hi: 0x9f}, - {value: 0x0040, lo: 0xa0, hi: 0xbf}, - // Block 0xe5, offset 0x6bf - {value: 0x0000, lo: 0x03}, - {value: 0x0040, lo: 0x80, hi: 0xaf}, - {value: 0x0018, lo: 0xb0, hi: 0xb1}, - {value: 0x0040, lo: 0xb2, hi: 0xbf}, - // Block 0xe6, offset 0x6c3 - {value: 0x0000, lo: 0x03}, - {value: 0x0018, lo: 0x80, hi: 0xab}, - {value: 0x0040, lo: 0xac, hi: 0xaf}, - {value: 0x0018, lo: 0xb0, hi: 0xbf}, - // Block 0xe7, offset 0x6c7 - {value: 0x0000, lo: 0x05}, - {value: 0x0018, lo: 0x80, hi: 0x93}, - {value: 0x0040, lo: 0x94, hi: 0x9f}, - {value: 0x0018, lo: 0xa0, hi: 0xae}, - {value: 0x0040, lo: 0xaf, hi: 0xb0}, - {value: 0x0018, lo: 0xb1, hi: 0xbf}, - // Block 0xe8, offset 0x6cd - {value: 0x0000, lo: 0x05}, - {value: 0x0040, lo: 0x80, hi: 0x80}, - {value: 0x0018, lo: 0x81, hi: 0x8f}, - {value: 0x0040, lo: 0x90, hi: 0x90}, - {value: 0x0018, lo: 0x91, hi: 0xb5}, - {value: 0x0040, lo: 0xb6, hi: 0xbf}, - // Block 0xe9, offset 0x6d3 - {value: 0x0000, lo: 0x04}, - {value: 0x0018, lo: 0x80, hi: 0x8f}, - {value: 0xc1c1, lo: 0x90, hi: 0x90}, - {value: 0x0018, lo: 0x91, hi: 0xac}, - {value: 0x0040, lo: 0xad, hi: 0xbf}, - // Block 0xea, offset 0x6d8 - {value: 0x0000, lo: 0x02}, - {value: 0x0040, lo: 0x80, hi: 0xa5}, - {value: 0x0018, lo: 0xa6, hi: 0xbf}, - // Block 0xeb, offset 0x6db - {value: 0x0000, lo: 0x0d}, - {value: 0xc7e9, lo: 0x80, hi: 0x80}, - {value: 0xc839, lo: 0x81, hi: 0x81}, - {value: 0xc889, lo: 0x82, hi: 0x82}, - {value: 0xc8d9, lo: 0x83, hi: 0x83}, - {value: 0xc929, lo: 0x84, hi: 0x84}, - {value: 0xc979, lo: 0x85, hi: 0x85}, - {value: 0xc9c9, lo: 0x86, hi: 0x86}, - {value: 0xca19, lo: 0x87, hi: 0x87}, - {value: 0xca69, lo: 0x88, hi: 0x88}, - {value: 0x0040, lo: 0x89, hi: 0x8f}, - {value: 0xcab9, lo: 0x90, hi: 0x90}, - {value: 0xcad9, lo: 0x91, hi: 0x91}, - {value: 0x0040, lo: 0x92, hi: 0xbf}, - // Block 0xec, offset 0x6e9 - {value: 0x0000, lo: 0x06}, - {value: 0x0018, lo: 0x80, hi: 0x92}, - {value: 0x0040, lo: 0x93, hi: 0x9f}, - {value: 0x0018, lo: 0xa0, hi: 0xac}, - {value: 0x0040, lo: 0xad, hi: 0xaf}, - {value: 0x0018, lo: 0xb0, hi: 0xb6}, - {value: 0x0040, lo: 0xb7, hi: 0xbf}, - // Block 0xed, offset 0x6f0 - {value: 0x0000, lo: 0x02}, - {value: 0x0018, lo: 0x80, hi: 0xb3}, - {value: 0x0040, lo: 0xb4, hi: 0xbf}, - // Block 0xee, offset 0x6f3 - {value: 0x0000, lo: 0x02}, - {value: 0x0018, lo: 0x80, hi: 0x94}, - {value: 0x0040, lo: 0x95, hi: 0xbf}, - // Block 0xef, offset 0x6f6 - {value: 0x0000, lo: 0x03}, - {value: 0x0018, lo: 0x80, hi: 0x8b}, - {value: 0x0040, lo: 0x8c, hi: 0x8f}, - {value: 0x0018, lo: 0x90, hi: 0xbf}, - // Block 0xf0, offset 0x6fa - {value: 0x0000, lo: 0x05}, - {value: 0x0018, lo: 0x80, hi: 0x87}, - {value: 0x0040, lo: 0x88, hi: 0x8f}, - {value: 0x0018, lo: 0x90, hi: 0x99}, - {value: 0x0040, lo: 0x9a, hi: 0x9f}, - {value: 0x0018, lo: 0xa0, hi: 0xbf}, - // Block 0xf1, offset 0x700 - {value: 0x0000, lo: 0x04}, - {value: 0x0018, lo: 0x80, hi: 0x87}, - {value: 0x0040, lo: 0x88, hi: 0x8f}, - {value: 0x0018, lo: 0x90, hi: 0xad}, - {value: 0x0040, lo: 0xae, hi: 0xbf}, - // Block 0xf2, offset 0x705 - {value: 0x0000, lo: 0x09}, - {value: 0x0040, lo: 0x80, hi: 0x8f}, - {value: 0x0018, lo: 0x90, hi: 0x9e}, - {value: 0x0040, lo: 0x9f, hi: 0x9f}, - {value: 0x0018, lo: 0xa0, hi: 0xa7}, - {value: 0x0040, lo: 0xa8, hi: 0xaf}, - {value: 0x0018, lo: 0xb0, hi: 0xb0}, - {value: 0x0040, lo: 0xb1, hi: 0xb2}, - {value: 0x0018, lo: 0xb3, hi: 0xbe}, - {value: 0x0040, lo: 0xbf, hi: 0xbf}, - // Block 0xf3, offset 0x70f - {value: 0x0000, lo: 0x04}, - {value: 0x0018, lo: 0x80, hi: 0x8b}, - {value: 0x0040, lo: 0x8c, hi: 0x8f}, - {value: 0x0018, lo: 0x90, hi: 0x9e}, - {value: 0x0040, lo: 0x9f, hi: 0xbf}, - // Block 0xf4, offset 0x714 - {value: 0x0000, lo: 0x02}, - {value: 0x0018, lo: 0x80, hi: 0x91}, - {value: 0x0040, lo: 0x92, hi: 0xbf}, - // Block 0xf5, offset 0x717 - {value: 0x0000, lo: 0x02}, - {value: 0x0018, lo: 0x80, hi: 0x80}, - {value: 0x0040, lo: 0x81, hi: 0xbf}, - // Block 0xf6, offset 0x71a - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0x96}, - {value: 0x0040, lo: 0x97, hi: 0xbf}, - // Block 0xf7, offset 0x71d - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0xb4}, - {value: 0x0040, lo: 0xb5, hi: 0xbf}, - // Block 0xf8, offset 0x720 - {value: 0x0000, lo: 0x03}, - {value: 0x0008, lo: 0x80, hi: 0x9d}, - {value: 0x0040, lo: 0x9e, hi: 0x9f}, - {value: 0x0008, lo: 0xa0, hi: 0xbf}, - // Block 0xf9, offset 0x724 - {value: 0x0000, lo: 0x02}, - {value: 0x0008, lo: 0x80, hi: 0xa1}, - {value: 0x0040, lo: 0xa2, hi: 0xbf}, - // Block 0xfa, offset 0x727 - {value: 0x0020, lo: 0x0f}, - {value: 0xdeb9, lo: 0x80, hi: 0x89}, - {value: 0x8dfd, lo: 0x8a, hi: 0x8a}, - {value: 0xdff9, lo: 0x8b, hi: 0x9c}, - {value: 0x8e1d, lo: 0x9d, hi: 0x9d}, - {value: 0xe239, lo: 0x9e, hi: 0xa2}, - {value: 0x8e3d, lo: 0xa3, hi: 0xa3}, - {value: 0xe2d9, lo: 0xa4, hi: 0xab}, - {value: 0x7ed5, lo: 0xac, hi: 0xac}, - {value: 0xe3d9, lo: 0xad, hi: 0xaf}, - {value: 0x8e5d, lo: 0xb0, hi: 0xb0}, - {value: 0xe439, lo: 0xb1, hi: 0xb6}, - {value: 0x8e7d, lo: 0xb7, hi: 0xb9}, - {value: 0xe4f9, lo: 0xba, hi: 0xba}, - {value: 0x8edd, lo: 0xbb, hi: 0xbb}, - {value: 0xe519, lo: 0xbc, hi: 0xbf}, - // Block 0xfb, offset 0x737 - {value: 0x0020, lo: 0x10}, - {value: 0x937d, lo: 0x80, hi: 0x80}, - {value: 0xf099, lo: 0x81, hi: 0x86}, - {value: 0x939d, lo: 0x87, hi: 0x8a}, - {value: 0xd9f9, lo: 0x8b, hi: 0x8b}, - {value: 0xf159, lo: 0x8c, hi: 0x96}, - {value: 0x941d, lo: 0x97, hi: 0x97}, - {value: 0xf2b9, lo: 0x98, hi: 0xa3}, - {value: 0x943d, lo: 0xa4, hi: 0xa6}, - {value: 0xf439, lo: 0xa7, hi: 0xaa}, - {value: 0x949d, lo: 0xab, hi: 0xab}, - {value: 0xf4b9, lo: 0xac, hi: 0xac}, - {value: 0x94bd, lo: 0xad, hi: 0xad}, - {value: 0xf4d9, lo: 0xae, hi: 0xaf}, - {value: 0x94dd, lo: 0xb0, hi: 0xb1}, - {value: 0xf519, lo: 0xb2, hi: 0xbe}, - {value: 0x0040, lo: 0xbf, hi: 0xbf}, - // Block 0xfc, offset 0x748 - {value: 0x0000, lo: 0x04}, - {value: 0x0040, lo: 0x80, hi: 0x80}, - {value: 0x0340, lo: 0x81, hi: 0x81}, - {value: 0x0040, lo: 0x82, hi: 0x9f}, - {value: 0x0340, lo: 0xa0, hi: 0xbf}, - // Block 0xfd, offset 0x74d - {value: 0x0000, lo: 0x01}, - {value: 0x0340, lo: 0x80, hi: 0xbf}, - // Block 0xfe, offset 0x74f - {value: 0x0000, lo: 0x01}, - {value: 0x13c0, lo: 0x80, hi: 0xbf}, - // Block 0xff, offset 0x751 - {value: 0x0000, lo: 0x02}, - {value: 0x13c0, lo: 0x80, hi: 0xaf}, - {value: 0x0040, lo: 0xb0, hi: 0xbf}, -} - -// Total table size 41559 bytes (40KiB); checksum: F4A1FA4E diff --git a/vendor/golang.org/x/text/internal/export/idna/tables10.0.0.go b/vendor/golang.org/x/text/internal/export/idna/tables10.0.0.go new file mode 100644 index 0000000..d8f5926 --- /dev/null +++ b/vendor/golang.org/x/text/internal/export/idna/tables10.0.0.go @@ -0,0 +1,4559 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// +build go1.10 + +package idna + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "10.0.0" + +var mappings string = "" + // Size: 8175 bytes + "\x00\x01 \x03 ̈\x01a\x03 ̄\x012\x013\x03 ́\x03 ̧\x011\x01o\x051⁄4\x051⁄2" + + "\x053⁄4\x03i̇\x03l·\x03ʼn\x01s\x03dž\x03ⱥ\x03ⱦ\x01h\x01j\x01r\x01w\x01y" + + "\x03 ̆\x03 ̇\x03 ̊\x03 ̨\x03 ̃\x03 ̋\x01l\x01x\x04̈́\x03 ι\x01;\x05 ̈́" + + "\x04եւ\x04اٴ\x04وٴ\x04ۇٴ\x04يٴ\x06क़\x06ख़\x06ग़\x06ज़\x06ड़\x06ढ़\x06फ़" + + "\x06य़\x06ড়\x06ঢ়\x06য়\x06ਲ਼\x06ਸ਼\x06ਖ਼\x06ਗ਼\x06ਜ਼\x06ਫ਼\x06ଡ଼\x06ଢ଼" + + "\x06ํา\x06ໍາ\x06ຫນ\x06ຫມ\x06གྷ\x06ཌྷ\x06དྷ\x06བྷ\x06ཛྷ\x06ཀྵ\x06ཱི\x06ཱུ" + + "\x06ྲྀ\x09ྲཱྀ\x06ླྀ\x09ླཱྀ\x06ཱྀ\x06ྒྷ\x06ྜྷ\x06ྡྷ\x06ྦྷ\x06ྫྷ\x06ྐྵ\x02" + + "в\x02д\x02о\x02с\x02т\x02ъ\x02ѣ\x02æ\x01b\x01d\x01e\x02ǝ\x01g\x01i\x01k" + + "\x01m\x01n\x02ȣ\x01p\x01t\x01u\x02ɐ\x02ɑ\x02ə\x02ɛ\x02ɜ\x02ŋ\x02ɔ\x02ɯ" + + "\x01v\x02β\x02γ\x02δ\x02φ\x02χ\x02ρ\x02н\x02ɒ\x01c\x02ɕ\x02ð\x01f\x02ɟ" + + "\x02ɡ\x02ɥ\x02ɨ\x02ɩ\x02ɪ\x02ʝ\x02ɭ\x02ʟ\x02ɱ\x02ɰ\x02ɲ\x02ɳ\x02ɴ\x02ɵ" + + "\x02ɸ\x02ʂ\x02ʃ\x02ƫ\x02ʉ\x02ʊ\x02ʋ\x02ʌ\x01z\x02ʐ\x02ʑ\x02ʒ\x02θ\x02ss" + + "\x02ά\x02έ\x02ή\x02ί\x02ό\x02ύ\x02ώ\x05ἀι\x05ἁι\x05ἂι\x05ἃι\x05ἄι\x05ἅι" + + "\x05ἆι\x05ἇι\x05ἠι\x05ἡι\x05ἢι\x05ἣι\x05ἤι\x05ἥι\x05ἦι\x05ἧι\x05ὠι\x05ὡι" + + "\x05ὢι\x05ὣι\x05ὤι\x05ὥι\x05ὦι\x05ὧι\x05ὰι\x04αι\x04άι\x05ᾶι\x02ι\x05 ̈͂" + + "\x05ὴι\x04ηι\x04ήι\x05ῆι\x05 ̓̀\x05 ̓́\x05 ̓͂\x02ΐ\x05 ̔̀\x05 ̔́\x05 ̔͂" + + "\x02ΰ\x05 ̈̀\x01`\x05ὼι\x04ωι\x04ώι\x05ῶι\x06′′\x09′′′\x06‵‵\x09‵‵‵\x02!" + + "!\x02??\x02?!\x02!?\x0c′′′′\x010\x014\x015\x016\x017\x018\x019\x01+\x01=" + + "\x01(\x01)\x02rs\x02ħ\x02no\x01q\x02sm\x02tm\x02ω\x02å\x02א\x02ב\x02ג" + + "\x02ד\x02π\x051⁄7\x051⁄9\x061⁄10\x051⁄3\x052⁄3\x051⁄5\x052⁄5\x053⁄5\x054" + + "⁄5\x051⁄6\x055⁄6\x051⁄8\x053⁄8\x055⁄8\x057⁄8\x041⁄\x02ii\x02iv\x02vi" + + "\x04viii\x02ix\x02xi\x050⁄3\x06∫∫\x09∫∫∫\x06∮∮\x09∮∮∮\x0210\x0211\x0212" + + "\x0213\x0214\x0215\x0216\x0217\x0218\x0219\x0220\x04(10)\x04(11)\x04(12)" + + "\x04(13)\x04(14)\x04(15)\x04(16)\x04(17)\x04(18)\x04(19)\x04(20)\x0c∫∫∫∫" + + "\x02==\x05⫝̸\x02ɫ\x02ɽ\x02ȿ\x02ɀ\x01.\x04 ゙\x04 ゚\x06より\x06コト\x05(ᄀ)\x05" + + "(ᄂ)\x05(ᄃ)\x05(ᄅ)\x05(ᄆ)\x05(ᄇ)\x05(ᄉ)\x05(ᄋ)\x05(ᄌ)\x05(ᄎ)\x05(ᄏ)\x05(ᄐ" + + ")\x05(ᄑ)\x05(ᄒ)\x05(가)\x05(나)\x05(다)\x05(라)\x05(마)\x05(바)\x05(사)\x05(아)" + + "\x05(자)\x05(차)\x05(카)\x05(타)\x05(파)\x05(하)\x05(주)\x08(오전)\x08(오후)\x05(一)" + + "\x05(二)\x05(三)\x05(四)\x05(五)\x05(六)\x05(七)\x05(八)\x05(九)\x05(十)\x05(月)" + + "\x05(火)\x05(水)\x05(木)\x05(金)\x05(土)\x05(日)\x05(株)\x05(有)\x05(社)\x05(名)" + + "\x05(特)\x05(財)\x05(祝)\x05(労)\x05(代)\x05(呼)\x05(学)\x05(監)\x05(企)\x05(資)" + + "\x05(協)\x05(祭)\x05(休)\x05(自)\x05(至)\x0221\x0222\x0223\x0224\x0225\x0226" + + "\x0227\x0228\x0229\x0230\x0231\x0232\x0233\x0234\x0235\x06참고\x06주의\x0236" + + "\x0237\x0238\x0239\x0240\x0241\x0242\x0243\x0244\x0245\x0246\x0247\x0248" + + "\x0249\x0250\x041月\x042月\x043月\x044月\x045月\x046月\x047月\x048月\x049月\x0510" + + "月\x0511月\x0512月\x02hg\x02ev\x0cアパート\x0cアルファ\x0cアンペア\x09アール\x0cイニング\x09" + + "インチ\x09ウォン\x0fエスクード\x0cエーカー\x09オンス\x09オーム\x09カイリ\x0cカラット\x0cカロリー\x09ガロ" + + "ン\x09ガンマ\x06ギガ\x09ギニー\x0cキュリー\x0cギルダー\x06キロ\x0fキログラム\x12キロメートル\x0fキロワッ" + + "ト\x09グラム\x0fグラムトン\x0fクルゼイロ\x0cクローネ\x09ケース\x09コルナ\x09コーポ\x0cサイクル\x0fサンチ" + + "ーム\x0cシリング\x09センチ\x09セント\x09ダース\x06デシ\x06ドル\x06トン\x06ナノ\x09ノット\x09ハイツ" + + "\x0fパーセント\x09パーツ\x0cバーレル\x0fピアストル\x09ピクル\x06ピコ\x06ビル\x0fファラッド\x0cフィート" + + "\x0fブッシェル\x09フラン\x0fヘクタール\x06ペソ\x09ペニヒ\x09ヘルツ\x09ペンス\x09ページ\x09ベータ\x0cポイ" + + "ント\x09ボルト\x06ホン\x09ポンド\x09ホール\x09ホーン\x0cマイクロ\x09マイル\x09マッハ\x09マルク\x0fマ" + + "ンション\x0cミクロン\x06ミリ\x0fミリバール\x06メガ\x0cメガトン\x0cメートル\x09ヤード\x09ヤール\x09ユアン" + + "\x0cリットル\x06リラ\x09ルピー\x0cルーブル\x06レム\x0fレントゲン\x09ワット\x040点\x041点\x042点" + + "\x043点\x044点\x045点\x046点\x047点\x048点\x049点\x0510点\x0511点\x0512点\x0513点" + + "\x0514点\x0515点\x0516点\x0517点\x0518点\x0519点\x0520点\x0521点\x0522点\x0523点" + + "\x0524点\x02da\x02au\x02ov\x02pc\x02dm\x02iu\x06平成\x06昭和\x06大正\x06明治\x0c株" + + "式会社\x02pa\x02na\x02ma\x02ka\x02kb\x02mb\x02gb\x04kcal\x02pf\x02nf\x02m" + + "g\x02kg\x02hz\x02ml\x02dl\x02kl\x02fm\x02nm\x02mm\x02cm\x02km\x02m2\x02m" + + "3\x05m∕s\x06m∕s2\x07rad∕s\x08rad∕s2\x02ps\x02ns\x02ms\x02pv\x02nv\x02mv" + + "\x02kv\x02pw\x02nw\x02mw\x02kw\x02bq\x02cc\x02cd\x06c∕kg\x02db\x02gy\x02" + + "ha\x02hp\x02in\x02kk\x02kt\x02lm\x02ln\x02lx\x02ph\x02pr\x02sr\x02sv\x02" + + "wb\x05v∕m\x05a∕m\x041日\x042日\x043日\x044日\x045日\x046日\x047日\x048日\x049日" + + "\x0510日\x0511日\x0512日\x0513日\x0514日\x0515日\x0516日\x0517日\x0518日\x0519日" + + "\x0520日\x0521日\x0522日\x0523日\x0524日\x0525日\x0526日\x0527日\x0528日\x0529日" + + "\x0530日\x0531日\x02ь\x02ɦ\x02ɬ\x02ʞ\x02ʇ\x02œ\x04𤋮\x04𢡊\x04𢡄\x04𣏕\x04𥉉" + + "\x04𥳐\x04𧻓\x02ff\x02fi\x02fl\x02st\x04մն\x04մե\x04մի\x04վն\x04մխ\x04יִ" + + "\x04ײַ\x02ע\x02ה\x02כ\x02ל\x02ם\x02ר\x02ת\x04שׁ\x04שׂ\x06שּׁ\x06שּׂ\x04א" + + "ַ\x04אָ\x04אּ\x04בּ\x04גּ\x04דּ\x04הּ\x04וּ\x04זּ\x04טּ\x04יּ\x04ךּ\x04" + + "כּ\x04לּ\x04מּ\x04נּ\x04סּ\x04ףּ\x04פּ\x04צּ\x04קּ\x04רּ\x04שּ\x04תּ" + + "\x04וֹ\x04בֿ\x04כֿ\x04פֿ\x04אל\x02ٱ\x02ٻ\x02پ\x02ڀ\x02ٺ\x02ٿ\x02ٹ\x02ڤ" + + "\x02ڦ\x02ڄ\x02ڃ\x02چ\x02ڇ\x02ڍ\x02ڌ\x02ڎ\x02ڈ\x02ژ\x02ڑ\x02ک\x02گ\x02ڳ" + + "\x02ڱ\x02ں\x02ڻ\x02ۀ\x02ہ\x02ھ\x02ے\x02ۓ\x02ڭ\x02ۇ\x02ۆ\x02ۈ\x02ۋ\x02ۅ" + + "\x02ۉ\x02ې\x02ى\x04ئا\x04ئە\x04ئو\x04ئۇ\x04ئۆ\x04ئۈ\x04ئې\x04ئى\x02ی\x04" + + "ئج\x04ئح\x04ئم\x04ئي\x04بج\x04بح\x04بخ\x04بم\x04بى\x04بي\x04تج\x04تح" + + "\x04تخ\x04تم\x04تى\x04تي\x04ثج\x04ثم\x04ثى\x04ثي\x04جح\x04جم\x04حج\x04حم" + + "\x04خج\x04خح\x04خم\x04سج\x04سح\x04سخ\x04سم\x04صح\x04صم\x04ضج\x04ضح\x04ضخ" + + "\x04ضم\x04طح\x04طم\x04ظم\x04عج\x04عم\x04غج\x04غم\x04فج\x04فح\x04فخ\x04فم" + + "\x04فى\x04في\x04قح\x04قم\x04قى\x04قي\x04كا\x04كج\x04كح\x04كخ\x04كل\x04كم" + + "\x04كى\x04كي\x04لج\x04لح\x04لخ\x04لم\x04لى\x04لي\x04مج\x04مح\x04مخ\x04مم" + + "\x04مى\x04مي\x04نج\x04نح\x04نخ\x04نم\x04نى\x04ني\x04هج\x04هم\x04هى\x04هي" + + "\x04يج\x04يح\x04يخ\x04يم\x04يى\x04يي\x04ذٰ\x04رٰ\x04ىٰ\x05 ٌّ\x05 ٍّ\x05" + + " َّ\x05 ُّ\x05 ِّ\x05 ّٰ\x04ئر\x04ئز\x04ئن\x04بر\x04بز\x04بن\x04تر\x04تز" + + "\x04تن\x04ثر\x04ثز\x04ثن\x04ما\x04نر\x04نز\x04نن\x04ير\x04يز\x04ين\x04ئخ" + + "\x04ئه\x04به\x04ته\x04صخ\x04له\x04نه\x04هٰ\x04يه\x04ثه\x04سه\x04شم\x04شه" + + "\x06ـَّ\x06ـُّ\x06ـِّ\x04طى\x04طي\x04عى\x04عي\x04غى\x04غي\x04سى\x04سي" + + "\x04شى\x04شي\x04حى\x04حي\x04جى\x04جي\x04خى\x04خي\x04صى\x04صي\x04ضى\x04ضي" + + "\x04شج\x04شح\x04شخ\x04شر\x04سر\x04صر\x04ضر\x04اً\x06تجم\x06تحج\x06تحم" + + "\x06تخم\x06تمج\x06تمح\x06تمخ\x06جمح\x06حمي\x06حمى\x06سحج\x06سجح\x06سجى" + + "\x06سمح\x06سمج\x06سمم\x06صحح\x06صمم\x06شحم\x06شجي\x06شمخ\x06شمم\x06ضحى" + + "\x06ضخم\x06طمح\x06طمم\x06طمي\x06عجم\x06عمم\x06عمى\x06غمم\x06غمي\x06غمى" + + "\x06فخم\x06قمح\x06قمم\x06لحم\x06لحي\x06لحى\x06لجج\x06لخم\x06لمح\x06محج" + + "\x06محم\x06محي\x06مجح\x06مجم\x06مخج\x06مخم\x06مجخ\x06همج\x06همم\x06نحم" + + "\x06نحى\x06نجم\x06نجى\x06نمي\x06نمى\x06يمم\x06بخي\x06تجي\x06تجى\x06تخي" + + "\x06تخى\x06تمي\x06تمى\x06جمي\x06جحى\x06جمى\x06سخى\x06صحي\x06شحي\x06ضحي" + + "\x06لجي\x06لمي\x06يحي\x06يجي\x06يمي\x06ممي\x06قمي\x06نحي\x06عمي\x06كمي" + + "\x06نجح\x06مخي\x06لجم\x06كمم\x06جحي\x06حجي\x06مجي\x06فمي\x06بحي\x06سخي" + + "\x06نجي\x06صلے\x06قلے\x08الله\x08اكبر\x08محمد\x08صلعم\x08رسول\x08عليه" + + "\x08وسلم\x06صلى!صلى الله عليه وسلم\x0fجل جلاله\x08ریال\x01,\x01:\x01!" + + "\x01?\x01_\x01{\x01}\x01[\x01]\x01#\x01&\x01*\x01-\x01<\x01>\x01\\\x01$" + + "\x01%\x01@\x04ـً\x04ـَ\x04ـُ\x04ـِ\x04ـّ\x04ـْ\x02ء\x02آ\x02أ\x02ؤ\x02إ" + + "\x02ئ\x02ا\x02ب\x02ة\x02ت\x02ث\x02ج\x02ح\x02خ\x02د\x02ذ\x02ر\x02ز\x02س" + + "\x02ش\x02ص\x02ض\x02ط\x02ظ\x02ع\x02غ\x02ف\x02ق\x02ك\x02ل\x02م\x02ن\x02ه" + + "\x02و\x02ي\x04لآ\x04لأ\x04لإ\x04لا\x01\x22\x01'\x01/\x01^\x01|\x01~\x02¢" + + "\x02£\x02¬\x02¦\x02¥\x08𝅗𝅥\x08𝅘𝅥\x0c𝅘𝅥𝅮\x0c𝅘𝅥𝅯\x0c𝅘𝅥𝅰\x0c𝅘𝅥𝅱\x0c𝅘𝅥𝅲\x08𝆹" + + "𝅥\x08𝆺𝅥\x0c𝆹𝅥𝅮\x0c𝆺𝅥𝅮\x0c𝆹𝅥𝅯\x0c𝆺𝅥𝅯\x02ı\x02ȷ\x02α\x02ε\x02ζ\x02η\x02" + + "κ\x02λ\x02μ\x02ν\x02ξ\x02ο\x02σ\x02τ\x02υ\x02ψ\x03∇\x03∂\x02ϝ\x02ٮ\x02ڡ" + + "\x02ٯ\x020,\x021,\x022,\x023,\x024,\x025,\x026,\x027,\x028,\x029,\x03(a)" + + "\x03(b)\x03(c)\x03(d)\x03(e)\x03(f)\x03(g)\x03(h)\x03(i)\x03(j)\x03(k)" + + "\x03(l)\x03(m)\x03(n)\x03(o)\x03(p)\x03(q)\x03(r)\x03(s)\x03(t)\x03(u)" + + "\x03(v)\x03(w)\x03(x)\x03(y)\x03(z)\x07〔s〕\x02wz\x02hv\x02sd\x03ppv\x02w" + + "c\x02mc\x02md\x02dj\x06ほか\x06ココ\x03サ\x03手\x03字\x03双\x03デ\x03二\x03多\x03解" + + "\x03天\x03交\x03映\x03無\x03料\x03前\x03後\x03再\x03新\x03初\x03終\x03生\x03販\x03声" + + "\x03吹\x03演\x03投\x03捕\x03一\x03三\x03遊\x03左\x03中\x03右\x03指\x03走\x03打\x03禁" + + "\x03空\x03合\x03満\x03有\x03月\x03申\x03割\x03営\x03配\x09〔本〕\x09〔三〕\x09〔二〕\x09〔安" + + "〕\x09〔点〕\x09〔打〕\x09〔盗〕\x09〔勝〕\x09〔敗〕\x03得\x03可\x03丽\x03丸\x03乁\x03你\x03" + + "侮\x03侻\x03倂\x03偺\x03備\x03僧\x03像\x03㒞\x03免\x03兔\x03兤\x03具\x03㒹\x03內\x03" + + "冗\x03冤\x03仌\x03冬\x03况\x03凵\x03刃\x03㓟\x03刻\x03剆\x03剷\x03㔕\x03勇\x03勉\x03" + + "勤\x03勺\x03包\x03匆\x03北\x03卉\x03卑\x03博\x03即\x03卽\x03卿\x03灰\x03及\x03叟\x03" + + "叫\x03叱\x03吆\x03咞\x03吸\x03呈\x03周\x03咢\x03哶\x03唐\x03啓\x03啣\x03善\x03喙\x03" + + "喫\x03喳\x03嗂\x03圖\x03嘆\x03圗\x03噑\x03噴\x03切\x03壮\x03城\x03埴\x03堍\x03型\x03" + + "堲\x03報\x03墬\x03売\x03壷\x03夆\x03夢\x03奢\x03姬\x03娛\x03娧\x03姘\x03婦\x03㛮\x03" + + "嬈\x03嬾\x03寃\x03寘\x03寧\x03寳\x03寿\x03将\x03尢\x03㞁\x03屠\x03屮\x03峀\x03岍\x03" + + "嵃\x03嵮\x03嵫\x03嵼\x03巡\x03巢\x03㠯\x03巽\x03帨\x03帽\x03幩\x03㡢\x03㡼\x03庰\x03" + + "庳\x03庶\x03廊\x03廾\x03舁\x03弢\x03㣇\x03形\x03彫\x03㣣\x03徚\x03忍\x03志\x03忹\x03" + + "悁\x03㤺\x03㤜\x03悔\x03惇\x03慈\x03慌\x03慎\x03慺\x03憎\x03憲\x03憤\x03憯\x03懞\x03" + + "懲\x03懶\x03成\x03戛\x03扝\x03抱\x03拔\x03捐\x03挽\x03拼\x03捨\x03掃\x03揤\x03搢\x03" + + "揅\x03掩\x03㨮\x03摩\x03摾\x03撝\x03摷\x03㩬\x03敏\x03敬\x03旣\x03書\x03晉\x03㬙\x03" + + "暑\x03㬈\x03㫤\x03冒\x03冕\x03最\x03暜\x03肭\x03䏙\x03朗\x03望\x03朡\x03杞\x03杓\x03" + + "㭉\x03柺\x03枅\x03桒\x03梅\x03梎\x03栟\x03椔\x03㮝\x03楂\x03榣\x03槪\x03檨\x03櫛\x03" + + "㰘\x03次\x03歔\x03㱎\x03歲\x03殟\x03殺\x03殻\x03汎\x03沿\x03泍\x03汧\x03洖\x03派\x03" + + "海\x03流\x03浩\x03浸\x03涅\x03洴\x03港\x03湮\x03㴳\x03滋\x03滇\x03淹\x03潮\x03濆\x03" + + "瀹\x03瀞\x03瀛\x03㶖\x03灊\x03災\x03灷\x03炭\x03煅\x03熜\x03爨\x03爵\x03牐\x03犀\x03" + + "犕\x03獺\x03王\x03㺬\x03玥\x03㺸\x03瑇\x03瑜\x03瑱\x03璅\x03瓊\x03㼛\x03甤\x03甾\x03" + + "異\x03瘐\x03㿼\x03䀈\x03直\x03眞\x03真\x03睊\x03䀹\x03瞋\x03䁆\x03䂖\x03硎\x03碌\x03" + + "磌\x03䃣\x03祖\x03福\x03秫\x03䄯\x03穀\x03穊\x03穏\x03䈂\x03篆\x03築\x03䈧\x03糒\x03" + + "䊠\x03糨\x03糣\x03紀\x03絣\x03䌁\x03緇\x03縂\x03繅\x03䌴\x03䍙\x03罺\x03羕\x03翺\x03" + + "者\x03聠\x03聰\x03䏕\x03育\x03脃\x03䐋\x03脾\x03媵\x03舄\x03辞\x03䑫\x03芑\x03芋\x03" + + "芝\x03劳\x03花\x03芳\x03芽\x03苦\x03若\x03茝\x03荣\x03莭\x03茣\x03莽\x03菧\x03著\x03" + + "荓\x03菊\x03菌\x03菜\x03䔫\x03蓱\x03蓳\x03蔖\x03蕤\x03䕝\x03䕡\x03䕫\x03虐\x03虜\x03" + + "虧\x03虩\x03蚩\x03蚈\x03蜎\x03蛢\x03蝹\x03蜨\x03蝫\x03螆\x03蟡\x03蠁\x03䗹\x03衠\x03" + + "衣\x03裗\x03裞\x03䘵\x03裺\x03㒻\x03䚾\x03䛇\x03誠\x03諭\x03變\x03豕\x03貫\x03賁\x03" + + "贛\x03起\x03跋\x03趼\x03跰\x03軔\x03輸\x03邔\x03郱\x03鄑\x03鄛\x03鈸\x03鋗\x03鋘\x03" + + "鉼\x03鏹\x03鐕\x03開\x03䦕\x03閷\x03䧦\x03雃\x03嶲\x03霣\x03䩮\x03䩶\x03韠\x03䪲\x03" + + "頋\x03頩\x03飢\x03䬳\x03餩\x03馧\x03駂\x03駾\x03䯎\x03鬒\x03鱀\x03鳽\x03䳎\x03䳭\x03" + + "鵧\x03䳸\x03麻\x03䵖\x03黹\x03黾\x03鼅\x03鼏\x03鼖\x03鼻" + +var xorData string = "" + // Size: 4855 bytes + "\x02\x0c\x09\x02\xb0\xec\x02\xad\xd8\x02\xad\xd9\x02\x06\x07\x02\x0f\x12" + + "\x02\x0f\x1f\x02\x0f\x1d\x02\x01\x13\x02\x0f\x16\x02\x0f\x0b\x02\x0f3" + + "\x02\x0f7\x02\x0f?\x02\x0f/\x02\x0f*\x02\x0c&\x02\x0c*\x02\x0c;\x02\x0c9" + + "\x02\x0c%\x02\xab\xed\x02\xab\xe2\x02\xab\xe3\x02\xa9\xe0\x02\xa9\xe1" + + "\x02\xa9\xe6\x02\xa3\xcb\x02\xa3\xc8\x02\xa3\xc9\x02\x01#\x02\x01\x08" + + "\x02\x0e>\x02\x0e'\x02\x0f\x03\x02\x03\x0d\x02\x03\x09\x02\x03\x17\x02" + + "\x03\x0e\x02\x02\x03\x02\x011\x02\x01\x00\x02\x01\x10\x02\x03<\x02\x07" + + "\x0d\x02\x02\x0c\x02\x0c0\x02\x01\x03\x02\x01\x01\x02\x01 \x02\x01\x22" + + "\x02\x01)\x02\x01\x0a\x02\x01\x0c\x02\x02\x06\x02\x02\x02\x02\x03\x10" + + "\x03\x037 \x03\x0b+\x03\x02\x01\x04\x02\x01\x02\x02\x019\x02\x03\x1c\x02" + + "\x02$\x03\x80p$\x02\x03:\x02\x03\x0a\x03\xc1r.\x03\xc1r,\x03\xc1r\x02" + + "\x02\x02:\x02\x02>\x02\x02,\x02\x02\x10\x02\x02\x00\x03\xc1s<\x03\xc1s*" + + "\x03\xc2L$\x03\xc2L;\x02\x09)\x02\x0a\x19\x03\x83\xab\xe3\x03\x83\xab" + + "\xf2\x03 4\xe0\x03\x81\xab\xea\x03\x81\xab\xf3\x03 4\xef\x03\x96\xe1\xcd" + + "\x03\x84\xe5\xc3\x02\x0d\x11\x03\x8b\xec\xcb\x03\x94\xec\xcf\x03\x9a\xec" + + "\xc2\x03\x8b\xec\xdb\x03\x94\xec\xdf\x03\x9a\xec\xd2\x03\x01\x0c!\x03" + + "\x01\x0c#\x03ʠ\x9d\x03ʣ\x9c\x03ʢ\x9f\x03ʥ\x9e\x03ʤ\x91\x03ʧ\x90\x03ʦ\x93" + + "\x03ʩ\x92\x03ʨ\x95\x03\xca\xf3\xb5\x03\xca\xf0\xb4\x03\xca\xf1\xb7\x03" + + "\xca\xf6\xb6\x03\xca\xf7\x89\x03\xca\xf4\x88\x03\xca\xf5\x8b\x03\xca\xfa" + + "\x8a\x03\xca\xfb\x8d\x03\xca\xf8\x8c\x03\xca\xf9\x8f\x03\xca\xfe\x8e\x03" + + "\xca\xff\x81\x03\xca\xfc\x80\x03\xca\xfd\x83\x03\xca\xe2\x82\x03\xca\xe3" + + "\x85\x03\xca\xe0\x84\x03\xca\xe1\x87\x03\xca\xe6\x86\x03\xca\xe7\x99\x03" + + "\xca\xe4\x98\x03\xca\xe5\x9b\x03\xca\xea\x9a\x03\xca\xeb\x9d\x03\xca\xe8" + + "\x9c\x03ؓ\x89\x03ߔ\x8b\x02\x010\x03\x03\x04\x1e\x03\x04\x15\x12\x03\x0b" + + "\x05,\x03\x06\x04\x00\x03\x06\x04)\x03\x06\x044\x03\x06\x04<\x03\x06\x05" + + "\x1d\x03\x06\x06\x00\x03\x06\x06\x0a\x03\x06\x06'\x03\x06\x062\x03\x0786" + + "\x03\x079/\x03\x079 \x03\x07:\x0e\x03\x07:\x1b\x03\x07:%\x03\x07;/\x03" + + "\x07;%\x03\x074\x11\x03\x076\x09\x03\x077*\x03\x070\x01\x03\x070\x0f\x03" + + "\x070.\x03\x071\x16\x03\x071\x04\x03\x0710\x03\x072\x18\x03\x072-\x03" + + "\x073\x14\x03\x073>\x03\x07'\x09\x03\x07 \x00\x03\x07\x1f\x0b\x03\x07" + + "\x18#\x03\x07\x18(\x03\x07\x186\x03\x07\x18\x03\x03\x07\x19\x16\x03\x07" + + "\x116\x03\x07\x12'\x03\x07\x13\x10\x03\x07\x0c&\x03\x07\x0c\x08\x03\x07" + + "\x0c\x13\x03\x07\x0d\x02\x03\x07\x0d\x1c\x03\x07\x0b5\x03\x07\x0b\x0a" + + "\x03\x07\x0b\x01\x03\x07\x0b\x0f\x03\x07\x05\x00\x03\x07\x05\x09\x03\x07" + + "\x05\x0b\x03\x07\x07\x01\x03\x07\x07\x08\x03\x07\x00<\x03\x07\x00+\x03" + + "\x07\x01)\x03\x07\x01\x1b\x03\x07\x01\x08\x03\x07\x03?\x03\x0445\x03\x04" + + "4\x08\x03\x0454\x03\x04)/\x03\x04)5\x03\x04+\x05\x03\x04+\x14\x03\x04+ " + + "\x03\x04+<\x03\x04*&\x03\x04*\x22\x03\x04&8\x03\x04!\x01\x03\x04!\x22" + + "\x03\x04\x11+\x03\x04\x10.\x03\x04\x104\x03\x04\x13=\x03\x04\x12\x04\x03" + + "\x04\x12\x0a\x03\x04\x0d\x1d\x03\x04\x0d\x07\x03\x04\x0d \x03\x05<>\x03" + + "\x055<\x03\x055!\x03\x055#\x03\x055&\x03\x054\x1d\x03\x054\x02\x03\x054" + + "\x07\x03\x0571\x03\x053\x1a\x03\x053\x16\x03\x05.<\x03\x05.\x07\x03\x05)" + + ":\x03\x05)<\x03\x05)\x0c\x03\x05)\x15\x03\x05+-\x03\x05+5\x03\x05$\x1e" + + "\x03\x05$\x14\x03\x05'\x04\x03\x05'\x14\x03\x05&\x02\x03\x05\x226\x03" + + "\x05\x22\x0c\x03\x05\x22\x1c\x03\x05\x19\x0a\x03\x05\x1b\x09\x03\x05\x1b" + + "\x0c\x03\x05\x14\x07\x03\x05\x16?\x03\x05\x16\x0c\x03\x05\x0c\x05\x03" + + "\x05\x0e\x0f\x03\x05\x01\x0e\x03\x05\x00(\x03\x05\x030\x03\x05\x03\x06" + + "\x03\x0a==\x03\x0a=1\x03\x0a=,\x03\x0a=\x0c\x03\x0a??\x03\x0a<\x08\x03" + + "\x0a9!\x03\x0a9)\x03\x0a97\x03\x0a99\x03\x0a6\x0a\x03\x0a6\x1c\x03\x0a6" + + "\x17\x03\x0a7'\x03\x0a78\x03\x0a73\x03\x0a'\x01\x03\x0a'&\x03\x0a\x1f" + + "\x0e\x03\x0a\x1f\x03\x03\x0a\x1f3\x03\x0a\x1b/\x03\x0a\x18\x19\x03\x0a" + + "\x19\x01\x03\x0a\x16\x14\x03\x0a\x0e\x22\x03\x0a\x0f\x10\x03\x0a\x0f\x02" + + "\x03\x0a\x0f \x03\x0a\x0c\x04\x03\x0a\x0b>\x03\x0a\x0b+\x03\x0a\x08/\x03" + + "\x0a\x046\x03\x0a\x05\x14\x03\x0a\x00\x04\x03\x0a\x00\x10\x03\x0a\x00" + + "\x14\x03\x0b<3\x03\x0b;*\x03\x0b9\x22\x03\x0b9)\x03\x0b97\x03\x0b+\x10" + + "\x03\x0b((\x03\x0b&5\x03\x0b$\x1c\x03\x0b$\x12\x03\x0b%\x04\x03\x0b#<" + + "\x03\x0b#0\x03\x0b#\x0d\x03\x0b#\x19\x03\x0b!:\x03\x0b!\x1f\x03\x0b!\x00" + + "\x03\x0b\x1e5\x03\x0b\x1c\x1d\x03\x0b\x1d-\x03\x0b\x1d(\x03\x0b\x18.\x03" + + "\x0b\x18 \x03\x0b\x18\x16\x03\x0b\x14\x13\x03\x0b\x15$\x03\x0b\x15\x22" + + "\x03\x0b\x12\x1b\x03\x0b\x12\x10\x03\x0b\x132\x03\x0b\x13=\x03\x0b\x12" + + "\x18\x03\x0b\x0c&\x03\x0b\x061\x03\x0b\x06:\x03\x0b\x05#\x03\x0b\x05<" + + "\x03\x0b\x04\x0b\x03\x0b\x04\x04\x03\x0b\x04\x1b\x03\x0b\x042\x03\x0b" + + "\x041\x03\x0b\x03\x03\x03\x0b\x03\x1d\x03\x0b\x03/\x03\x0b\x03+\x03\x0b" + + "\x02\x1b\x03\x0b\x02\x00\x03\x0b\x01\x1e\x03\x0b\x01\x08\x03\x0b\x015" + + "\x03\x06\x0d9\x03\x06\x0d=\x03\x06\x0d?\x03\x02\x001\x03\x02\x003\x03" + + "\x02\x02\x19\x03\x02\x006\x03\x02\x02\x1b\x03\x02\x004\x03\x02\x00<\x03" + + "\x02\x02\x0a\x03\x02\x02\x0e\x03\x02\x01\x1a\x03\x02\x01\x07\x03\x02\x01" + + "\x05\x03\x02\x01\x0b\x03\x02\x01%\x03\x02\x01\x0c\x03\x02\x01\x04\x03" + + "\x02\x01\x1c\x03\x02\x00.\x03\x02\x002\x03\x02\x00>\x03\x02\x00\x12\x03" + + "\x02\x00\x16\x03\x02\x011\x03\x02\x013\x03\x02\x02 \x03\x02\x02%\x03\x02" + + "\x02$\x03\x02\x028\x03\x02\x02;\x03\x02\x024\x03\x02\x012\x03\x02\x022" + + "\x03\x02\x02/\x03\x02\x01,\x03\x02\x01\x13\x03\x02\x01\x16\x03\x02\x01" + + "\x11\x03\x02\x01\x1e\x03\x02\x01\x15\x03\x02\x01\x17\x03\x02\x01\x0f\x03" + + "\x02\x01\x08\x03\x02\x00?\x03\x02\x03\x07\x03\x02\x03\x0d\x03\x02\x03" + + "\x13\x03\x02\x03\x1d\x03\x02\x03\x1f\x03\x02\x00\x03\x03\x02\x00\x0d\x03" + + "\x02\x00\x01\x03\x02\x00\x1b\x03\x02\x00\x19\x03\x02\x00\x18\x03\x02\x00" + + "\x13\x03\x02\x00/\x03\x07>\x12\x03\x07<\x1f\x03\x07>\x1d\x03\x06\x1d\x0e" + + "\x03\x07>\x1c\x03\x07>:\x03\x07>\x13\x03\x04\x12+\x03\x07?\x03\x03\x07>" + + "\x02\x03\x06\x224\x03\x06\x1a.\x03\x07<%\x03\x06\x1c\x0b\x03\x0609\x03" + + "\x05\x1f\x01\x03\x04'\x08\x03\x93\xfd\xf5\x03\x02\x0d \x03\x02\x0d#\x03" + + "\x02\x0d!\x03\x02\x0d&\x03\x02\x0d\x22\x03\x02\x0d/\x03\x02\x0d,\x03\x02" + + "\x0d$\x03\x02\x0d'\x03\x02\x0d%\x03\x02\x0d;\x03\x02\x0d=\x03\x02\x0d?" + + "\x03\x099.\x03\x08\x0b7\x03\x08\x02\x14\x03\x08\x14\x0d\x03\x08.:\x03" + + "\x089'\x03\x0f\x0b\x18\x03\x0f\x1c1\x03\x0f\x17&\x03\x0f9\x1f\x03\x0f0" + + "\x0c\x03\x0e\x0a9\x03\x0e\x056\x03\x0e\x1c#\x03\x0f\x13\x0e\x03\x072\x00" + + "\x03\x070\x0d\x03\x072\x0b\x03\x06\x11\x18\x03\x070\x10\x03\x06\x0f(\x03" + + "\x072\x05\x03\x06\x0f,\x03\x073\x15\x03\x06\x07\x08\x03\x05\x16\x02\x03" + + "\x04\x0b \x03\x05:8\x03\x05\x16%\x03\x0a\x0d\x1f\x03\x06\x16\x10\x03\x05" + + "\x1d5\x03\x05*;\x03\x05\x16\x1b\x03\x04.-\x03\x06\x1a\x19\x03\x04\x03," + + "\x03\x0b87\x03\x04/\x0a\x03\x06\x00,\x03\x04-\x01\x03\x04\x1e-\x03\x06/(" + + "\x03\x0a\x0b5\x03\x06\x0e7\x03\x06\x07.\x03\x0597\x03\x0a*%\x03\x0760" + + "\x03\x06\x0c;\x03\x05'\x00\x03\x072.\x03\x072\x08\x03\x06=\x01\x03\x06" + + "\x05\x1b\x03\x06\x06\x12\x03\x06$=\x03\x06'\x0d\x03\x04\x11\x0f\x03\x076" + + ",\x03\x06\x07;\x03\x06.,\x03\x86\xf9\xea\x03\x8f\xff\xeb\x02\x092\x02" + + "\x095\x02\x094\x02\x09;\x02\x09>\x02\x098\x02\x09*\x02\x09/\x02\x09,\x02" + + "\x09%\x02\x09&\x02\x09#\x02\x09 \x02\x08!\x02\x08%\x02\x08$\x02\x08+\x02" + + "\x08.\x02\x08*\x02\x08&\x02\x088\x02\x08>\x02\x084\x02\x086\x02\x080\x02" + + "\x08\x10\x02\x08\x17\x02\x08\x12\x02\x08\x1d\x02\x08\x1f\x02\x08\x13\x02" + + "\x08\x15\x02\x08\x14\x02\x08\x0c\x03\x8b\xfd\xd0\x03\x81\xec\xc6\x03\x87" + + "\xe0\x8a\x03-2\xe3\x03\x80\xef\xe4\x03-2\xea\x03\x88\xe6\xeb\x03\x8e\xe6" + + "\xe8\x03\x84\xe6\xe9\x03\x97\xe6\xee\x03-2\xf9\x03-2\xf6\x03\x8e\xe3\xad" + + "\x03\x80\xe3\x92\x03\x88\xe3\x90\x03\x8e\xe3\x90\x03\x80\xe3\x97\x03\x88" + + "\xe3\x95\x03\x88\xfe\xcb\x03\x8e\xfe\xca\x03\x84\xfe\xcd\x03\x91\xef\xc9" + + "\x03-2\xc1\x03-2\xc0\x03-2\xcb\x03\x88@\x09\x03\x8e@\x08\x03\x8f\xe0\xf5" + + "\x03\x8e\xe6\xf9\x03\x8e\xe0\xfa\x03\x93\xff\xf4\x03\x84\xee\xd3\x03\x0b" + + "(\x04\x023 \x021;\x02\x01*\x03\x0b#\x10\x03\x0b 0\x03\x0b!\x10\x03\x0b!0" + + "\x03\x07\x15\x08\x03\x09?5\x03\x07\x1f\x08\x03\x07\x17\x0b\x03\x09\x1f" + + "\x15\x03\x0b\x1c7\x03\x0a+#\x03\x06\x1a\x1b\x03\x06\x1a\x14\x03\x0a\x01" + + "\x18\x03\x06#\x1b\x03\x0a2\x0c\x03\x0a\x01\x04\x03\x09#;\x03\x08='\x03" + + "\x08\x1a\x0a\x03\x07\x03\x0a\x111\x03\x09\x1b\x09\x03\x073.\x03\x07\x01\x00" + + "\x03\x09/,\x03\x07#>\x03\x07\x048\x03\x0a\x1f\x22\x03\x098>\x03\x09\x11" + + "\x00\x03\x08/\x17\x03\x06'\x22\x03\x0b\x1a+\x03\x0a\x22\x19\x03\x0a/1" + + "\x03\x0974\x03\x09\x0f\x22\x03\x08,\x22\x03\x08?\x14\x03\x07$5\x03\x07<3" + + "\x03\x07=*\x03\x07\x13\x18\x03\x068\x0a\x03\x06\x09\x16\x03\x06\x13\x00" + + "\x03\x08\x067\x03\x08\x01\x03\x03\x08\x12\x1d\x03\x07+7\x03\x06(;\x03" + + "\x06\x1c?\x03\x07\x0e\x17\x03\x0a\x06\x1d\x03\x0a\x19\x07\x03\x08\x14$" + + "\x03\x07$;\x03\x08,$\x03\x08\x06\x0d\x03\x07\x16\x0a\x03\x06>>\x03\x0a" + + "\x06\x12\x03\x0a\x14)\x03\x09\x0d\x1f\x03\x09\x12\x17\x03\x09\x19\x01" + + "\x03\x08\x11 \x03\x08\x1d'\x03\x06<\x1a\x03\x0a.\x00\x03\x07'\x18\x03" + + "\x0a\x22\x08\x03\x08\x0d\x0a\x03\x08\x13)\x03\x07*)\x03\x06<,\x03\x07" + + "\x0b\x1a\x03\x09.\x14\x03\x09\x0d\x1e\x03\x07\x0e#\x03\x0b\x1d'\x03\x0a" + + "\x0a8\x03\x09%2\x03\x08+&\x03\x080\x12\x03\x0a)4\x03\x08\x06\x1f\x03\x0b" + + "\x1b\x1a\x03\x0a\x1b\x0f\x03\x0b\x1d*\x03\x09\x16$\x03\x090\x11\x03\x08" + + "\x11\x08\x03\x0a*(\x03\x0a\x042\x03\x089,\x03\x074'\x03\x07\x0f\x05\x03" + + "\x09\x0b\x0a\x03\x07\x1b\x01\x03\x09\x17:\x03\x09.\x0d\x03\x07.\x11\x03" + + "\x09+\x15\x03\x080\x13\x03\x0b\x1f\x19\x03\x0a \x11\x03\x0a\x220\x03\x09" + + "\x07;\x03\x08\x16\x1c\x03\x07,\x13\x03\x07\x0e/\x03\x06\x221\x03\x0a." + + "\x0a\x03\x0a7\x02\x03\x0a\x032\x03\x0a\x1d.\x03\x091\x06\x03\x09\x19:" + + "\x03\x08\x02/\x03\x060+\x03\x06\x0f-\x03\x06\x1c\x1f\x03\x06\x1d\x07\x03" + + "\x0a,\x11\x03\x09=\x0d\x03\x09\x0b;\x03\x07\x1b/\x03\x0a\x1f:\x03\x09 " + + "\x1f\x03\x09.\x10\x03\x094\x0b\x03\x09\x1a1\x03\x08#\x1a\x03\x084\x1d" + + "\x03\x08\x01\x1f\x03\x08\x11\x22\x03\x07'8\x03\x07\x1a>\x03\x0757\x03" + + "\x06&9\x03\x06+\x11\x03\x0a.\x0b\x03\x0a,>\x03\x0a4#\x03\x08%\x17\x03" + + "\x07\x05\x22\x03\x07\x0c\x0b\x03\x0a\x1d+\x03\x0a\x19\x16\x03\x09+\x1f" + + "\x03\x09\x08\x0b\x03\x08\x16\x18\x03\x08+\x12\x03\x0b\x1d\x0c\x03\x0a=" + + "\x10\x03\x0a\x09\x0d\x03\x0a\x10\x11\x03\x09&0\x03\x08(\x1f\x03\x087\x07" + + "\x03\x08\x185\x03\x07'6\x03\x06.\x05\x03\x06=\x04\x03\x06;;\x03\x06\x06," + + "\x03\x0b\x18>\x03\x08\x00\x18\x03\x06 \x03\x03\x06<\x00\x03\x09%\x18\x03" + + "\x0b\x1c<\x03\x0a%!\x03\x0a\x09\x12\x03\x0a\x16\x02\x03\x090'\x03\x09" + + "\x0e=\x03\x08 \x0e\x03\x08>\x03\x03\x074>\x03\x06&?\x03\x06\x19\x09\x03" + + "\x06?(\x03\x0a-\x0e\x03\x09:3\x03\x098:\x03\x09\x12\x0b\x03\x09\x1d\x17" + + "\x03\x087\x05\x03\x082\x14\x03\x08\x06%\x03\x08\x13\x1f\x03\x06\x06\x0e" + + "\x03\x0a\x22<\x03\x09/<\x03\x06>+\x03\x0a'?\x03\x0a\x13\x0c\x03\x09\x10<" + + "\x03\x07\x1b=\x03\x0a\x19\x13\x03\x09\x22\x1d\x03\x09\x07\x0d\x03\x08)" + + "\x1c\x03\x06=\x1a\x03\x0a/4\x03\x0a7\x11\x03\x0a\x16:\x03\x09?3\x03\x09:" + + "/\x03\x09\x05\x0a\x03\x09\x14\x06\x03\x087\x22\x03\x080\x07\x03\x08\x1a" + + "\x1f\x03\x07\x04(\x03\x07\x04\x09\x03\x06 %\x03\x06<\x08\x03\x0a+\x14" + + "\x03\x09\x1d\x16\x03\x0a70\x03\x08 >\x03\x0857\x03\x070\x0a\x03\x06=\x12" + + "\x03\x06\x16%\x03\x06\x1d,\x03\x099#\x03\x09\x10>\x03\x07 \x1e\x03\x08" + + "\x0c<\x03\x08\x0b\x18\x03\x08\x15+\x03\x08,:\x03\x08%\x22\x03\x07\x0a$" + + "\x03\x0b\x1c=\x03\x07+\x08\x03\x0a/\x05\x03\x0a \x07\x03\x0a\x12'\x03" + + "\x09#\x11\x03\x08\x1b\x15\x03\x0a\x06\x01\x03\x09\x1c\x1b\x03\x0922\x03" + + "\x07\x14<\x03\x07\x09\x04\x03\x061\x04\x03\x07\x0e\x01\x03\x0a\x13\x18" + + "\x03\x0a-\x0c\x03\x0a?\x0d\x03\x0a\x09\x0a\x03\x091&\x03\x0a/\x0b\x03" + + "\x08$<\x03\x083\x1d\x03\x08\x0c$\x03\x08\x0d\x07\x03\x08\x0d?\x03\x08" + + "\x0e\x14\x03\x065\x0a\x03\x08\x1a#\x03\x08\x16#\x03\x0702\x03\x07\x03" + + "\x1a\x03\x06(\x1d\x03\x06+\x1b\x03\x06\x0b\x05\x03\x06\x0b\x17\x03\x06" + + "\x0c\x04\x03\x06\x1e\x19\x03\x06+0\x03\x062\x18\x03\x0b\x16\x1e\x03\x0a+" + + "\x16\x03\x0a-?\x03\x0a#:\x03\x0a#\x10\x03\x0a%$\x03\x0a>+\x03\x0a01\x03" + + "\x0a1\x10\x03\x0a\x099\x03\x0a\x0a\x12\x03\x0a\x19\x1f\x03\x0a\x19\x12" + + "\x03\x09*)\x03\x09-\x16\x03\x09.1\x03\x09.2\x03\x09<\x0e\x03\x09> \x03" + + "\x093\x12\x03\x09\x0b\x01\x03\x09\x1c2\x03\x09\x11\x1c\x03\x09\x15%\x03" + + "\x08,&\x03\x08!\x22\x03\x089(\x03\x08\x0b\x1a\x03\x08\x0d2\x03\x08\x0c" + + "\x04\x03\x08\x0c\x06\x03\x08\x0c\x1f\x03\x08\x0c\x0c\x03\x08\x0f\x1f\x03" + + "\x08\x0f\x1d\x03\x08\x00\x14\x03\x08\x03\x14\x03\x08\x06\x16\x03\x08\x1e" + + "#\x03\x08\x11\x11\x03\x08\x10\x18\x03\x08\x14(\x03\x07)\x1e\x03\x07.1" + + "\x03\x07 $\x03\x07 '\x03\x078\x08\x03\x07\x0d0\x03\x07\x0f7\x03\x07\x05#" + + "\x03\x07\x05\x1a\x03\x07\x1a7\x03\x07\x1d-\x03\x07\x17\x10\x03\x06)\x1f" + + "\x03\x062\x0b\x03\x066\x16\x03\x06\x09\x11\x03\x09(\x1e\x03\x07!5\x03" + + "\x0b\x11\x16\x03\x0a/\x04\x03\x0a,\x1a\x03\x0b\x173\x03\x0a,1\x03\x0a/5" + + "\x03\x0a\x221\x03\x0a\x22\x0d\x03\x0a?%\x03\x0a<,\x03\x0a?#\x03\x0a>\x19" + + "\x03\x0a\x08&\x03\x0a\x0b\x0e\x03\x0a\x0c:\x03\x0a\x0c+\x03\x0a\x03\x22" + + "\x03\x0a\x06)\x03\x0a\x11\x10\x03\x0a\x11\x1a\x03\x0a\x17-\x03\x0a\x14(" + + "\x03\x09)\x1e\x03\x09/\x09\x03\x09.\x00\x03\x09,\x07\x03\x09/*\x03\x09-9" + + "\x03\x09\x228\x03\x09%\x09\x03\x09:\x12\x03\x09;\x1d\x03\x09?\x06\x03" + + "\x093%\x03\x096\x05\x03\x096\x08\x03\x097\x02\x03\x09\x07,\x03\x09\x04," + + "\x03\x09\x1f\x16\x03\x09\x11\x03\x03\x09\x11\x12\x03\x09\x168\x03\x08*" + + "\x05\x03\x08/2\x03\x084:\x03\x08\x22+\x03\x08 0\x03\x08&\x0a\x03\x08;" + + "\x10\x03\x08>$\x03\x08>\x18\x03\x0829\x03\x082:\x03\x081,\x03\x081<\x03" + + "\x081\x1c\x03\x087#\x03\x087*\x03\x08\x09'\x03\x08\x00\x1d\x03\x08\x05-" + + "\x03\x08\x1f4\x03\x08\x1d\x04\x03\x08\x16\x0f\x03\x07*7\x03\x07'!\x03" + + "\x07%\x1b\x03\x077\x0c\x03\x07\x0c1\x03\x07\x0c.\x03\x07\x00\x06\x03\x07" + + "\x01\x02\x03\x07\x010\x03\x07\x06=\x03\x07\x01\x03\x03\x07\x01\x13\x03" + + "\x07\x06\x06\x03\x07\x05\x0a\x03\x07\x1f\x09\x03\x07\x17:\x03\x06*1\x03" + + "\x06-\x1d\x03\x06\x223\x03\x062:\x03\x060$\x03\x066\x1e\x03\x064\x12\x03" + + "\x0645\x03\x06\x0b\x00\x03\x06\x0b7\x03\x06\x07\x1f\x03\x06\x15\x12\x03" + + "\x0c\x05\x0f\x03\x0b+\x0b\x03\x0b+-\x03\x06\x16\x1b\x03\x06\x15\x17\x03" + + "\x89\xca\xea\x03\x89\xca\xe8\x03\x0c8\x10\x03\x0c8\x01\x03\x0c8\x0f\x03" + + "\x0d8%\x03\x0d8!\x03\x0c8-\x03\x0c8/\x03\x0c8+\x03\x0c87\x03\x0c85\x03" + + "\x0c9\x09\x03\x0c9\x0d\x03\x0c9\x0f\x03\x0c9\x0b\x03\xcfu\x0c\x03\xcfu" + + "\x0f\x03\xcfu\x0e\x03\xcfu\x09\x03\x0c9\x10\x03\x0d9\x0c\x03\xcf`;\x03" + + "\xcf`>\x03\xcf`9\x03\xcf`8\x03\xcf`7\x03\xcf`*\x03\xcf`-\x03\xcf`,\x03" + + "\x0d\x1b\x1a\x03\x0d\x1b&\x03\x0c=.\x03\x0c=%\x03\x0c>\x1e\x03\x0c>\x14" + + "\x03\x0c?\x06\x03\x0c?\x0b\x03\x0c?\x0c\x03\x0c?\x0d\x03\x0c?\x02\x03" + + "\x0c>\x0f\x03\x0c>\x08\x03\x0c>\x09\x03\x0c>,\x03\x0c>\x0c\x03\x0c?\x13" + + "\x03\x0c?\x16\x03\x0c?\x15\x03\x0c?\x1c\x03\x0c?\x1f\x03\x0c?\x1d\x03" + + "\x0c?\x1a\x03\x0c?\x17\x03\x0c?\x08\x03\x0c?\x09\x03\x0c?\x0e\x03\x0c?" + + "\x04\x03\x0c?\x05\x03\x0c" + + "\x03\x0c=2\x03\x0c=6\x03\x0c<\x07\x03\x0c<\x05\x03\x0e:!\x03\x0e:#\x03" + + "\x0e8\x09\x03\x0e:&\x03\x0e8\x0b\x03\x0e:$\x03\x0e:,\x03\x0e8\x1a\x03" + + "\x0e8\x1e\x03\x0e:*\x03\x0e:7\x03\x0e:5\x03\x0e:;\x03\x0e:\x15\x03\x0e:<" + + "\x03\x0e:4\x03\x0e:'\x03\x0e:-\x03\x0e:%\x03\x0e:?\x03\x0e:=\x03\x0e:)" + + "\x03\x0e:/\x03\xcfs'\x03\x0d=\x0f\x03\x0d+*\x03\x0d99\x03\x0d9;\x03\x0d9" + + "?\x03\x0d)\x0d\x03\x0d(%\x02\x01\x18\x02\x01(\x02\x01\x1e\x03\x0f$!\x03" + + "\x0f87\x03\x0f4\x0e\x03\x0f5\x1d\x03\x06'\x03\x03\x0f\x08\x18\x03\x0f" + + "\x0d\x1b\x03\x0e2=\x03\x0e;\x08\x03\x0e:\x0b\x03\x0e\x06$\x03\x0e\x0d)" + + "\x03\x0e\x16\x1f\x03\x0e\x16\x1b\x03\x0d$\x0a\x03\x05,\x1d\x03\x0d. \x03" + + "\x0d.#\x03\x0c(/\x03\x09%\x02\x03\x0d90\x03\x0d\x0e4\x03\x0d\x0d\x0f\x03" + + "\x0c#\x00\x03\x0c,\x1e\x03\x0c2\x0e\x03\x0c\x01\x17\x03\x0c\x09:\x03\x0e" + + "\x173\x03\x0c\x08\x03\x03\x0c\x11\x07\x03\x0c\x10\x18\x03\x0c\x1f\x1c" + + "\x03\x0c\x19\x0e\x03\x0c\x1a\x1f\x03\x0f0>\x03\x0b->\x03\x0b<+\x03\x0b8" + + "\x13\x03\x0b\x043\x03\x0b\x14\x03\x03\x0b\x16%\x03\x0d\x22&\x03\x0b\x1a" + + "\x1a\x03\x0b\x1a\x04\x03\x0a%9\x03\x0a&2\x03\x0a&0\x03\x0a!\x1a\x03\x0a!" + + "7\x03\x0a5\x10\x03\x0a=4\x03\x0a?\x0e\x03\x0a>\x10\x03\x0a\x00 \x03\x0a" + + "\x0f:\x03\x0a\x0f9\x03\x0a\x0b\x0a\x03\x0a\x17%\x03\x0a\x1b-\x03\x09-" + + "\x1a\x03\x09,4\x03\x09.,\x03\x09)\x09\x03\x096!\x03\x091\x1f\x03\x093" + + "\x16\x03\x0c+\x1f\x03\x098 \x03\x098=\x03\x0c(\x1a\x03\x0c(\x16\x03\x09" + + "\x0a+\x03\x09\x16\x12\x03\x09\x13\x0e\x03\x09\x153\x03\x08)!\x03\x09\x1a" + + "\x01\x03\x09\x18\x01\x03\x08%#\x03\x08>\x22\x03\x08\x05%\x03\x08\x02*" + + "\x03\x08\x15;\x03\x08\x1b7\x03\x0f\x07\x1d\x03\x0f\x04\x03\x03\x070\x0c" + + "\x03\x07;\x0b\x03\x07\x08\x17\x03\x07\x12\x06\x03\x06/-\x03\x0671\x03" + + "\x065+\x03\x06>7\x03\x06\x049\x03\x05+\x1e\x03\x05,\x17\x03\x05 \x1d\x03" + + "\x05\x22\x05\x03\x050\x1d" + +// 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 *idnaTrie) lookup(s []byte) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return idnaValues[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 := idnaIndex[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 := idnaIndex[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 = idnaIndex[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 := idnaIndex[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 = idnaIndex[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 = idnaIndex[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 *idnaTrie) lookupUnsafe(s []byte) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return idnaValues[c0] + } + i := idnaIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = idnaIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = idnaIndex[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 *idnaTrie) lookupString(s string) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return idnaValues[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 := idnaIndex[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 := idnaIndex[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 = idnaIndex[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 := idnaIndex[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 = idnaIndex[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 = idnaIndex[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 *idnaTrie) lookupStringUnsafe(s string) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return idnaValues[c0] + } + i := idnaIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = idnaIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = idnaIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// idnaTrie. Total size: 29052 bytes (28.37 KiB). Checksum: ef06e7ecc26f36dd. +type idnaTrie struct{} + +func newIdnaTrie(i int) *idnaTrie { + return &idnaTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *idnaTrie) lookupValue(n uint32, b byte) uint16 { + switch { + case n < 125: + return uint16(idnaValues[n<<6+uint32(b)]) + default: + n -= 125 + return uint16(idnaSparse.lookup(n, b)) + } +} + +// idnaValues: 127 blocks, 8128 entries, 16256 bytes +// The third block is the zero block. +var idnaValues = [8128]uint16{ + // Block 0x0, offset 0x0 + 0x00: 0x0080, 0x01: 0x0080, 0x02: 0x0080, 0x03: 0x0080, 0x04: 0x0080, 0x05: 0x0080, + 0x06: 0x0080, 0x07: 0x0080, 0x08: 0x0080, 0x09: 0x0080, 0x0a: 0x0080, 0x0b: 0x0080, + 0x0c: 0x0080, 0x0d: 0x0080, 0x0e: 0x0080, 0x0f: 0x0080, 0x10: 0x0080, 0x11: 0x0080, + 0x12: 0x0080, 0x13: 0x0080, 0x14: 0x0080, 0x15: 0x0080, 0x16: 0x0080, 0x17: 0x0080, + 0x18: 0x0080, 0x19: 0x0080, 0x1a: 0x0080, 0x1b: 0x0080, 0x1c: 0x0080, 0x1d: 0x0080, + 0x1e: 0x0080, 0x1f: 0x0080, 0x20: 0x0080, 0x21: 0x0080, 0x22: 0x0080, 0x23: 0x0080, + 0x24: 0x0080, 0x25: 0x0080, 0x26: 0x0080, 0x27: 0x0080, 0x28: 0x0080, 0x29: 0x0080, + 0x2a: 0x0080, 0x2b: 0x0080, 0x2c: 0x0080, 0x2d: 0x0008, 0x2e: 0x0008, 0x2f: 0x0080, + 0x30: 0x0008, 0x31: 0x0008, 0x32: 0x0008, 0x33: 0x0008, 0x34: 0x0008, 0x35: 0x0008, + 0x36: 0x0008, 0x37: 0x0008, 0x38: 0x0008, 0x39: 0x0008, 0x3a: 0x0080, 0x3b: 0x0080, + 0x3c: 0x0080, 0x3d: 0x0080, 0x3e: 0x0080, 0x3f: 0x0080, + // Block 0x1, offset 0x40 + 0x40: 0x0080, 0x41: 0xe105, 0x42: 0xe105, 0x43: 0xe105, 0x44: 0xe105, 0x45: 0xe105, + 0x46: 0xe105, 0x47: 0xe105, 0x48: 0xe105, 0x49: 0xe105, 0x4a: 0xe105, 0x4b: 0xe105, + 0x4c: 0xe105, 0x4d: 0xe105, 0x4e: 0xe105, 0x4f: 0xe105, 0x50: 0xe105, 0x51: 0xe105, + 0x52: 0xe105, 0x53: 0xe105, 0x54: 0xe105, 0x55: 0xe105, 0x56: 0xe105, 0x57: 0xe105, + 0x58: 0xe105, 0x59: 0xe105, 0x5a: 0xe105, 0x5b: 0x0080, 0x5c: 0x0080, 0x5d: 0x0080, + 0x5e: 0x0080, 0x5f: 0x0080, 0x60: 0x0080, 0x61: 0x0008, 0x62: 0x0008, 0x63: 0x0008, + 0x64: 0x0008, 0x65: 0x0008, 0x66: 0x0008, 0x67: 0x0008, 0x68: 0x0008, 0x69: 0x0008, + 0x6a: 0x0008, 0x6b: 0x0008, 0x6c: 0x0008, 0x6d: 0x0008, 0x6e: 0x0008, 0x6f: 0x0008, + 0x70: 0x0008, 0x71: 0x0008, 0x72: 0x0008, 0x73: 0x0008, 0x74: 0x0008, 0x75: 0x0008, + 0x76: 0x0008, 0x77: 0x0008, 0x78: 0x0008, 0x79: 0x0008, 0x7a: 0x0008, 0x7b: 0x0080, + 0x7c: 0x0080, 0x7d: 0x0080, 0x7e: 0x0080, 0x7f: 0x0080, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc0: 0x0040, 0xc1: 0x0040, 0xc2: 0x0040, 0xc3: 0x0040, 0xc4: 0x0040, 0xc5: 0x0040, + 0xc6: 0x0040, 0xc7: 0x0040, 0xc8: 0x0040, 0xc9: 0x0040, 0xca: 0x0040, 0xcb: 0x0040, + 0xcc: 0x0040, 0xcd: 0x0040, 0xce: 0x0040, 0xcf: 0x0040, 0xd0: 0x0040, 0xd1: 0x0040, + 0xd2: 0x0040, 0xd3: 0x0040, 0xd4: 0x0040, 0xd5: 0x0040, 0xd6: 0x0040, 0xd7: 0x0040, + 0xd8: 0x0040, 0xd9: 0x0040, 0xda: 0x0040, 0xdb: 0x0040, 0xdc: 0x0040, 0xdd: 0x0040, + 0xde: 0x0040, 0xdf: 0x0040, 0xe0: 0x000a, 0xe1: 0x0018, 0xe2: 0x0018, 0xe3: 0x0018, + 0xe4: 0x0018, 0xe5: 0x0018, 0xe6: 0x0018, 0xe7: 0x0018, 0xe8: 0x001a, 0xe9: 0x0018, + 0xea: 0x0039, 0xeb: 0x0018, 0xec: 0x0018, 0xed: 0x03c0, 0xee: 0x0018, 0xef: 0x004a, + 0xf0: 0x0018, 0xf1: 0x0018, 0xf2: 0x0069, 0xf3: 0x0079, 0xf4: 0x008a, 0xf5: 0x0005, + 0xf6: 0x0018, 0xf7: 0x0008, 0xf8: 0x00aa, 0xf9: 0x00c9, 0xfa: 0x00d9, 0xfb: 0x0018, + 0xfc: 0x00e9, 0xfd: 0x0119, 0xfe: 0x0149, 0xff: 0x0018, + // Block 0x4, offset 0x100 + 0x100: 0xe00d, 0x101: 0x0008, 0x102: 0xe00d, 0x103: 0x0008, 0x104: 0xe00d, 0x105: 0x0008, + 0x106: 0xe00d, 0x107: 0x0008, 0x108: 0xe00d, 0x109: 0x0008, 0x10a: 0xe00d, 0x10b: 0x0008, + 0x10c: 0xe00d, 0x10d: 0x0008, 0x10e: 0xe00d, 0x10f: 0x0008, 0x110: 0xe00d, 0x111: 0x0008, + 0x112: 0xe00d, 0x113: 0x0008, 0x114: 0xe00d, 0x115: 0x0008, 0x116: 0xe00d, 0x117: 0x0008, + 0x118: 0xe00d, 0x119: 0x0008, 0x11a: 0xe00d, 0x11b: 0x0008, 0x11c: 0xe00d, 0x11d: 0x0008, + 0x11e: 0xe00d, 0x11f: 0x0008, 0x120: 0xe00d, 0x121: 0x0008, 0x122: 0xe00d, 0x123: 0x0008, + 0x124: 0xe00d, 0x125: 0x0008, 0x126: 0xe00d, 0x127: 0x0008, 0x128: 0xe00d, 0x129: 0x0008, + 0x12a: 0xe00d, 0x12b: 0x0008, 0x12c: 0xe00d, 0x12d: 0x0008, 0x12e: 0xe00d, 0x12f: 0x0008, + 0x130: 0x0179, 0x131: 0x0008, 0x132: 0x0035, 0x133: 0x004d, 0x134: 0xe00d, 0x135: 0x0008, + 0x136: 0xe00d, 0x137: 0x0008, 0x138: 0x0008, 0x139: 0xe01d, 0x13a: 0x0008, 0x13b: 0xe03d, + 0x13c: 0x0008, 0x13d: 0xe01d, 0x13e: 0x0008, 0x13f: 0x0199, + // Block 0x5, offset 0x140 + 0x140: 0x0199, 0x141: 0xe01d, 0x142: 0x0008, 0x143: 0xe03d, 0x144: 0x0008, 0x145: 0xe01d, + 0x146: 0x0008, 0x147: 0xe07d, 0x148: 0x0008, 0x149: 0x01b9, 0x14a: 0xe00d, 0x14b: 0x0008, + 0x14c: 0xe00d, 0x14d: 0x0008, 0x14e: 0xe00d, 0x14f: 0x0008, 0x150: 0xe00d, 0x151: 0x0008, + 0x152: 0xe00d, 0x153: 0x0008, 0x154: 0xe00d, 0x155: 0x0008, 0x156: 0xe00d, 0x157: 0x0008, + 0x158: 0xe00d, 0x159: 0x0008, 0x15a: 0xe00d, 0x15b: 0x0008, 0x15c: 0xe00d, 0x15d: 0x0008, + 0x15e: 0xe00d, 0x15f: 0x0008, 0x160: 0xe00d, 0x161: 0x0008, 0x162: 0xe00d, 0x163: 0x0008, + 0x164: 0xe00d, 0x165: 0x0008, 0x166: 0xe00d, 0x167: 0x0008, 0x168: 0xe00d, 0x169: 0x0008, + 0x16a: 0xe00d, 0x16b: 0x0008, 0x16c: 0xe00d, 0x16d: 0x0008, 0x16e: 0xe00d, 0x16f: 0x0008, + 0x170: 0xe00d, 0x171: 0x0008, 0x172: 0xe00d, 0x173: 0x0008, 0x174: 0xe00d, 0x175: 0x0008, + 0x176: 0xe00d, 0x177: 0x0008, 0x178: 0x0065, 0x179: 0xe01d, 0x17a: 0x0008, 0x17b: 0xe03d, + 0x17c: 0x0008, 0x17d: 0xe01d, 0x17e: 0x0008, 0x17f: 0x01d9, + // Block 0x6, offset 0x180 + 0x180: 0x0008, 0x181: 0x007d, 0x182: 0xe00d, 0x183: 0x0008, 0x184: 0xe00d, 0x185: 0x0008, + 0x186: 0x007d, 0x187: 0xe07d, 0x188: 0x0008, 0x189: 0x0095, 0x18a: 0x00ad, 0x18b: 0xe03d, + 0x18c: 0x0008, 0x18d: 0x0008, 0x18e: 0x00c5, 0x18f: 0x00dd, 0x190: 0x00f5, 0x191: 0xe01d, + 0x192: 0x0008, 0x193: 0x010d, 0x194: 0x0125, 0x195: 0x0008, 0x196: 0x013d, 0x197: 0x013d, + 0x198: 0xe00d, 0x199: 0x0008, 0x19a: 0x0008, 0x19b: 0x0008, 0x19c: 0x010d, 0x19d: 0x0155, + 0x19e: 0x0008, 0x19f: 0x016d, 0x1a0: 0xe00d, 0x1a1: 0x0008, 0x1a2: 0xe00d, 0x1a3: 0x0008, + 0x1a4: 0xe00d, 0x1a5: 0x0008, 0x1a6: 0x0185, 0x1a7: 0xe07d, 0x1a8: 0x0008, 0x1a9: 0x019d, + 0x1aa: 0x0008, 0x1ab: 0x0008, 0x1ac: 0xe00d, 0x1ad: 0x0008, 0x1ae: 0x0185, 0x1af: 0xe0fd, + 0x1b0: 0x0008, 0x1b1: 0x01b5, 0x1b2: 0x01cd, 0x1b3: 0xe03d, 0x1b4: 0x0008, 0x1b5: 0xe01d, + 0x1b6: 0x0008, 0x1b7: 0x01e5, 0x1b8: 0xe00d, 0x1b9: 0x0008, 0x1ba: 0x0008, 0x1bb: 0x0008, + 0x1bc: 0xe00d, 0x1bd: 0x0008, 0x1be: 0x0008, 0x1bf: 0x0008, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x0008, 0x1c1: 0x0008, 0x1c2: 0x0008, 0x1c3: 0x0008, 0x1c4: 0x01e9, 0x1c5: 0x01e9, + 0x1c6: 0x01e9, 0x1c7: 0x01fd, 0x1c8: 0x0215, 0x1c9: 0x022d, 0x1ca: 0x0245, 0x1cb: 0x025d, + 0x1cc: 0x0275, 0x1cd: 0xe01d, 0x1ce: 0x0008, 0x1cf: 0xe0fd, 0x1d0: 0x0008, 0x1d1: 0xe01d, + 0x1d2: 0x0008, 0x1d3: 0xe03d, 0x1d4: 0x0008, 0x1d5: 0xe01d, 0x1d6: 0x0008, 0x1d7: 0xe07d, + 0x1d8: 0x0008, 0x1d9: 0xe01d, 0x1da: 0x0008, 0x1db: 0xe03d, 0x1dc: 0x0008, 0x1dd: 0x0008, + 0x1de: 0xe00d, 0x1df: 0x0008, 0x1e0: 0xe00d, 0x1e1: 0x0008, 0x1e2: 0xe00d, 0x1e3: 0x0008, + 0x1e4: 0xe00d, 0x1e5: 0x0008, 0x1e6: 0xe00d, 0x1e7: 0x0008, 0x1e8: 0xe00d, 0x1e9: 0x0008, + 0x1ea: 0xe00d, 0x1eb: 0x0008, 0x1ec: 0xe00d, 0x1ed: 0x0008, 0x1ee: 0xe00d, 0x1ef: 0x0008, + 0x1f0: 0x0008, 0x1f1: 0x028d, 0x1f2: 0x02a5, 0x1f3: 0x02bd, 0x1f4: 0xe00d, 0x1f5: 0x0008, + 0x1f6: 0x02d5, 0x1f7: 0x02ed, 0x1f8: 0xe00d, 0x1f9: 0x0008, 0x1fa: 0xe00d, 0x1fb: 0x0008, + 0x1fc: 0xe00d, 0x1fd: 0x0008, 0x1fe: 0xe00d, 0x1ff: 0x0008, + // Block 0x8, offset 0x200 + 0x200: 0xe00d, 0x201: 0x0008, 0x202: 0xe00d, 0x203: 0x0008, 0x204: 0xe00d, 0x205: 0x0008, + 0x206: 0xe00d, 0x207: 0x0008, 0x208: 0xe00d, 0x209: 0x0008, 0x20a: 0xe00d, 0x20b: 0x0008, + 0x20c: 0xe00d, 0x20d: 0x0008, 0x20e: 0xe00d, 0x20f: 0x0008, 0x210: 0xe00d, 0x211: 0x0008, + 0x212: 0xe00d, 0x213: 0x0008, 0x214: 0xe00d, 0x215: 0x0008, 0x216: 0xe00d, 0x217: 0x0008, + 0x218: 0xe00d, 0x219: 0x0008, 0x21a: 0xe00d, 0x21b: 0x0008, 0x21c: 0xe00d, 0x21d: 0x0008, + 0x21e: 0xe00d, 0x21f: 0x0008, 0x220: 0x0305, 0x221: 0x0008, 0x222: 0xe00d, 0x223: 0x0008, + 0x224: 0xe00d, 0x225: 0x0008, 0x226: 0xe00d, 0x227: 0x0008, 0x228: 0xe00d, 0x229: 0x0008, + 0x22a: 0xe00d, 0x22b: 0x0008, 0x22c: 0xe00d, 0x22d: 0x0008, 0x22e: 0xe00d, 0x22f: 0x0008, + 0x230: 0xe00d, 0x231: 0x0008, 0x232: 0xe00d, 0x233: 0x0008, 0x234: 0x0008, 0x235: 0x0008, + 0x236: 0x0008, 0x237: 0x0008, 0x238: 0x0008, 0x239: 0x0008, 0x23a: 0x0209, 0x23b: 0xe03d, + 0x23c: 0x0008, 0x23d: 0x031d, 0x23e: 0x0229, 0x23f: 0x0008, + // Block 0x9, offset 0x240 + 0x240: 0x0008, 0x241: 0x0008, 0x242: 0x0018, 0x243: 0x0018, 0x244: 0x0018, 0x245: 0x0018, + 0x246: 0x0008, 0x247: 0x0008, 0x248: 0x0008, 0x249: 0x0008, 0x24a: 0x0008, 0x24b: 0x0008, + 0x24c: 0x0008, 0x24d: 0x0008, 0x24e: 0x0008, 0x24f: 0x0008, 0x250: 0x0008, 0x251: 0x0008, + 0x252: 0x0018, 0x253: 0x0018, 0x254: 0x0018, 0x255: 0x0018, 0x256: 0x0018, 0x257: 0x0018, + 0x258: 0x029a, 0x259: 0x02ba, 0x25a: 0x02da, 0x25b: 0x02fa, 0x25c: 0x031a, 0x25d: 0x033a, + 0x25e: 0x0018, 0x25f: 0x0018, 0x260: 0x03ad, 0x261: 0x0359, 0x262: 0x01d9, 0x263: 0x0369, + 0x264: 0x03c5, 0x265: 0x0018, 0x266: 0x0018, 0x267: 0x0018, 0x268: 0x0018, 0x269: 0x0018, + 0x26a: 0x0018, 0x26b: 0x0018, 0x26c: 0x0008, 0x26d: 0x0018, 0x26e: 0x0008, 0x26f: 0x0018, + 0x270: 0x0018, 0x271: 0x0018, 0x272: 0x0018, 0x273: 0x0018, 0x274: 0x0018, 0x275: 0x0018, + 0x276: 0x0018, 0x277: 0x0018, 0x278: 0x0018, 0x279: 0x0018, 0x27a: 0x0018, 0x27b: 0x0018, + 0x27c: 0x0018, 0x27d: 0x0018, 0x27e: 0x0018, 0x27f: 0x0018, + // Block 0xa, offset 0x280 + 0x280: 0x03dd, 0x281: 0x03dd, 0x282: 0x3308, 0x283: 0x03f5, 0x284: 0x0379, 0x285: 0x040d, + 0x286: 0x3308, 0x287: 0x3308, 0x288: 0x3308, 0x289: 0x3308, 0x28a: 0x3308, 0x28b: 0x3308, + 0x28c: 0x3308, 0x28d: 0x3308, 0x28e: 0x3308, 0x28f: 0x33c0, 0x290: 0x3308, 0x291: 0x3308, + 0x292: 0x3308, 0x293: 0x3308, 0x294: 0x3308, 0x295: 0x3308, 0x296: 0x3308, 0x297: 0x3308, + 0x298: 0x3308, 0x299: 0x3308, 0x29a: 0x3308, 0x29b: 0x3308, 0x29c: 0x3308, 0x29d: 0x3308, + 0x29e: 0x3308, 0x29f: 0x3308, 0x2a0: 0x3308, 0x2a1: 0x3308, 0x2a2: 0x3308, 0x2a3: 0x3308, + 0x2a4: 0x3308, 0x2a5: 0x3308, 0x2a6: 0x3308, 0x2a7: 0x3308, 0x2a8: 0x3308, 0x2a9: 0x3308, + 0x2aa: 0x3308, 0x2ab: 0x3308, 0x2ac: 0x3308, 0x2ad: 0x3308, 0x2ae: 0x3308, 0x2af: 0x3308, + 0x2b0: 0xe00d, 0x2b1: 0x0008, 0x2b2: 0xe00d, 0x2b3: 0x0008, 0x2b4: 0x0425, 0x2b5: 0x0008, + 0x2b6: 0xe00d, 0x2b7: 0x0008, 0x2b8: 0x0040, 0x2b9: 0x0040, 0x2ba: 0x03a2, 0x2bb: 0x0008, + 0x2bc: 0x0008, 0x2bd: 0x0008, 0x2be: 0x03c2, 0x2bf: 0x043d, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x0040, 0x2c1: 0x0040, 0x2c2: 0x0040, 0x2c3: 0x0040, 0x2c4: 0x008a, 0x2c5: 0x03d2, + 0x2c6: 0xe155, 0x2c7: 0x0455, 0x2c8: 0xe12d, 0x2c9: 0xe13d, 0x2ca: 0xe12d, 0x2cb: 0x0040, + 0x2cc: 0x03dd, 0x2cd: 0x0040, 0x2ce: 0x046d, 0x2cf: 0x0485, 0x2d0: 0x0008, 0x2d1: 0xe105, + 0x2d2: 0xe105, 0x2d3: 0xe105, 0x2d4: 0xe105, 0x2d5: 0xe105, 0x2d6: 0xe105, 0x2d7: 0xe105, + 0x2d8: 0xe105, 0x2d9: 0xe105, 0x2da: 0xe105, 0x2db: 0xe105, 0x2dc: 0xe105, 0x2dd: 0xe105, + 0x2de: 0xe105, 0x2df: 0xe105, 0x2e0: 0x049d, 0x2e1: 0x049d, 0x2e2: 0x0040, 0x2e3: 0x049d, + 0x2e4: 0x049d, 0x2e5: 0x049d, 0x2e6: 0x049d, 0x2e7: 0x049d, 0x2e8: 0x049d, 0x2e9: 0x049d, + 0x2ea: 0x049d, 0x2eb: 0x049d, 0x2ec: 0x0008, 0x2ed: 0x0008, 0x2ee: 0x0008, 0x2ef: 0x0008, + 0x2f0: 0x0008, 0x2f1: 0x0008, 0x2f2: 0x0008, 0x2f3: 0x0008, 0x2f4: 0x0008, 0x2f5: 0x0008, + 0x2f6: 0x0008, 0x2f7: 0x0008, 0x2f8: 0x0008, 0x2f9: 0x0008, 0x2fa: 0x0008, 0x2fb: 0x0008, + 0x2fc: 0x0008, 0x2fd: 0x0008, 0x2fe: 0x0008, 0x2ff: 0x0008, + // Block 0xc, offset 0x300 + 0x300: 0x0008, 0x301: 0x0008, 0x302: 0xe00f, 0x303: 0x0008, 0x304: 0x0008, 0x305: 0x0008, + 0x306: 0x0008, 0x307: 0x0008, 0x308: 0x0008, 0x309: 0x0008, 0x30a: 0x0008, 0x30b: 0x0008, + 0x30c: 0x0008, 0x30d: 0x0008, 0x30e: 0x0008, 0x30f: 0xe0c5, 0x310: 0x04b5, 0x311: 0x04cd, + 0x312: 0xe0bd, 0x313: 0xe0f5, 0x314: 0xe0fd, 0x315: 0xe09d, 0x316: 0xe0b5, 0x317: 0x0008, + 0x318: 0xe00d, 0x319: 0x0008, 0x31a: 0xe00d, 0x31b: 0x0008, 0x31c: 0xe00d, 0x31d: 0x0008, + 0x31e: 0xe00d, 0x31f: 0x0008, 0x320: 0xe00d, 0x321: 0x0008, 0x322: 0xe00d, 0x323: 0x0008, + 0x324: 0xe00d, 0x325: 0x0008, 0x326: 0xe00d, 0x327: 0x0008, 0x328: 0xe00d, 0x329: 0x0008, + 0x32a: 0xe00d, 0x32b: 0x0008, 0x32c: 0xe00d, 0x32d: 0x0008, 0x32e: 0xe00d, 0x32f: 0x0008, + 0x330: 0x04e5, 0x331: 0xe185, 0x332: 0xe18d, 0x333: 0x0008, 0x334: 0x04fd, 0x335: 0x03dd, + 0x336: 0x0018, 0x337: 0xe07d, 0x338: 0x0008, 0x339: 0xe1d5, 0x33a: 0xe00d, 0x33b: 0x0008, + 0x33c: 0x0008, 0x33d: 0x0515, 0x33e: 0x052d, 0x33f: 0x052d, + // Block 0xd, offset 0x340 + 0x340: 0x0008, 0x341: 0x0008, 0x342: 0x0008, 0x343: 0x0008, 0x344: 0x0008, 0x345: 0x0008, + 0x346: 0x0008, 0x347: 0x0008, 0x348: 0x0008, 0x349: 0x0008, 0x34a: 0x0008, 0x34b: 0x0008, + 0x34c: 0x0008, 0x34d: 0x0008, 0x34e: 0x0008, 0x34f: 0x0008, 0x350: 0x0008, 0x351: 0x0008, + 0x352: 0x0008, 0x353: 0x0008, 0x354: 0x0008, 0x355: 0x0008, 0x356: 0x0008, 0x357: 0x0008, + 0x358: 0x0008, 0x359: 0x0008, 0x35a: 0x0008, 0x35b: 0x0008, 0x35c: 0x0008, 0x35d: 0x0008, + 0x35e: 0x0008, 0x35f: 0x0008, 0x360: 0xe00d, 0x361: 0x0008, 0x362: 0xe00d, 0x363: 0x0008, + 0x364: 0xe00d, 0x365: 0x0008, 0x366: 0xe00d, 0x367: 0x0008, 0x368: 0xe00d, 0x369: 0x0008, + 0x36a: 0xe00d, 0x36b: 0x0008, 0x36c: 0xe00d, 0x36d: 0x0008, 0x36e: 0xe00d, 0x36f: 0x0008, + 0x370: 0xe00d, 0x371: 0x0008, 0x372: 0xe00d, 0x373: 0x0008, 0x374: 0xe00d, 0x375: 0x0008, + 0x376: 0xe00d, 0x377: 0x0008, 0x378: 0xe00d, 0x379: 0x0008, 0x37a: 0xe00d, 0x37b: 0x0008, + 0x37c: 0xe00d, 0x37d: 0x0008, 0x37e: 0xe00d, 0x37f: 0x0008, + // Block 0xe, offset 0x380 + 0x380: 0xe00d, 0x381: 0x0008, 0x382: 0x0018, 0x383: 0x3308, 0x384: 0x3308, 0x385: 0x3308, + 0x386: 0x3308, 0x387: 0x3308, 0x388: 0x3318, 0x389: 0x3318, 0x38a: 0xe00d, 0x38b: 0x0008, + 0x38c: 0xe00d, 0x38d: 0x0008, 0x38e: 0xe00d, 0x38f: 0x0008, 0x390: 0xe00d, 0x391: 0x0008, + 0x392: 0xe00d, 0x393: 0x0008, 0x394: 0xe00d, 0x395: 0x0008, 0x396: 0xe00d, 0x397: 0x0008, + 0x398: 0xe00d, 0x399: 0x0008, 0x39a: 0xe00d, 0x39b: 0x0008, 0x39c: 0xe00d, 0x39d: 0x0008, + 0x39e: 0xe00d, 0x39f: 0x0008, 0x3a0: 0xe00d, 0x3a1: 0x0008, 0x3a2: 0xe00d, 0x3a3: 0x0008, + 0x3a4: 0xe00d, 0x3a5: 0x0008, 0x3a6: 0xe00d, 0x3a7: 0x0008, 0x3a8: 0xe00d, 0x3a9: 0x0008, + 0x3aa: 0xe00d, 0x3ab: 0x0008, 0x3ac: 0xe00d, 0x3ad: 0x0008, 0x3ae: 0xe00d, 0x3af: 0x0008, + 0x3b0: 0xe00d, 0x3b1: 0x0008, 0x3b2: 0xe00d, 0x3b3: 0x0008, 0x3b4: 0xe00d, 0x3b5: 0x0008, + 0x3b6: 0xe00d, 0x3b7: 0x0008, 0x3b8: 0xe00d, 0x3b9: 0x0008, 0x3ba: 0xe00d, 0x3bb: 0x0008, + 0x3bc: 0xe00d, 0x3bd: 0x0008, 0x3be: 0xe00d, 0x3bf: 0x0008, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x0040, 0x3c1: 0xe01d, 0x3c2: 0x0008, 0x3c3: 0xe03d, 0x3c4: 0x0008, 0x3c5: 0xe01d, + 0x3c6: 0x0008, 0x3c7: 0xe07d, 0x3c8: 0x0008, 0x3c9: 0xe01d, 0x3ca: 0x0008, 0x3cb: 0xe03d, + 0x3cc: 0x0008, 0x3cd: 0xe01d, 0x3ce: 0x0008, 0x3cf: 0x0008, 0x3d0: 0xe00d, 0x3d1: 0x0008, + 0x3d2: 0xe00d, 0x3d3: 0x0008, 0x3d4: 0xe00d, 0x3d5: 0x0008, 0x3d6: 0xe00d, 0x3d7: 0x0008, + 0x3d8: 0xe00d, 0x3d9: 0x0008, 0x3da: 0xe00d, 0x3db: 0x0008, 0x3dc: 0xe00d, 0x3dd: 0x0008, + 0x3de: 0xe00d, 0x3df: 0x0008, 0x3e0: 0xe00d, 0x3e1: 0x0008, 0x3e2: 0xe00d, 0x3e3: 0x0008, + 0x3e4: 0xe00d, 0x3e5: 0x0008, 0x3e6: 0xe00d, 0x3e7: 0x0008, 0x3e8: 0xe00d, 0x3e9: 0x0008, + 0x3ea: 0xe00d, 0x3eb: 0x0008, 0x3ec: 0xe00d, 0x3ed: 0x0008, 0x3ee: 0xe00d, 0x3ef: 0x0008, + 0x3f0: 0xe00d, 0x3f1: 0x0008, 0x3f2: 0xe00d, 0x3f3: 0x0008, 0x3f4: 0xe00d, 0x3f5: 0x0008, + 0x3f6: 0xe00d, 0x3f7: 0x0008, 0x3f8: 0xe00d, 0x3f9: 0x0008, 0x3fa: 0xe00d, 0x3fb: 0x0008, + 0x3fc: 0xe00d, 0x3fd: 0x0008, 0x3fe: 0xe00d, 0x3ff: 0x0008, + // Block 0x10, offset 0x400 + 0x400: 0xe00d, 0x401: 0x0008, 0x402: 0xe00d, 0x403: 0x0008, 0x404: 0xe00d, 0x405: 0x0008, + 0x406: 0xe00d, 0x407: 0x0008, 0x408: 0xe00d, 0x409: 0x0008, 0x40a: 0xe00d, 0x40b: 0x0008, + 0x40c: 0xe00d, 0x40d: 0x0008, 0x40e: 0xe00d, 0x40f: 0x0008, 0x410: 0xe00d, 0x411: 0x0008, + 0x412: 0xe00d, 0x413: 0x0008, 0x414: 0xe00d, 0x415: 0x0008, 0x416: 0xe00d, 0x417: 0x0008, + 0x418: 0xe00d, 0x419: 0x0008, 0x41a: 0xe00d, 0x41b: 0x0008, 0x41c: 0xe00d, 0x41d: 0x0008, + 0x41e: 0xe00d, 0x41f: 0x0008, 0x420: 0xe00d, 0x421: 0x0008, 0x422: 0xe00d, 0x423: 0x0008, + 0x424: 0xe00d, 0x425: 0x0008, 0x426: 0xe00d, 0x427: 0x0008, 0x428: 0xe00d, 0x429: 0x0008, + 0x42a: 0xe00d, 0x42b: 0x0008, 0x42c: 0xe00d, 0x42d: 0x0008, 0x42e: 0xe00d, 0x42f: 0x0008, + 0x430: 0x0040, 0x431: 0x03f5, 0x432: 0x03f5, 0x433: 0x03f5, 0x434: 0x03f5, 0x435: 0x03f5, + 0x436: 0x03f5, 0x437: 0x03f5, 0x438: 0x03f5, 0x439: 0x03f5, 0x43a: 0x03f5, 0x43b: 0x03f5, + 0x43c: 0x03f5, 0x43d: 0x03f5, 0x43e: 0x03f5, 0x43f: 0x03f5, + // Block 0x11, offset 0x440 + 0x440: 0x0840, 0x441: 0x0840, 0x442: 0x0840, 0x443: 0x0840, 0x444: 0x0840, 0x445: 0x0840, + 0x446: 0x0018, 0x447: 0x0018, 0x448: 0x0818, 0x449: 0x0018, 0x44a: 0x0018, 0x44b: 0x0818, + 0x44c: 0x0018, 0x44d: 0x0818, 0x44e: 0x0018, 0x44f: 0x0018, 0x450: 0x3308, 0x451: 0x3308, + 0x452: 0x3308, 0x453: 0x3308, 0x454: 0x3308, 0x455: 0x3308, 0x456: 0x3308, 0x457: 0x3308, + 0x458: 0x3308, 0x459: 0x3308, 0x45a: 0x3308, 0x45b: 0x0818, 0x45c: 0x0b40, 0x45d: 0x0040, + 0x45e: 0x0818, 0x45f: 0x0818, 0x460: 0x0a08, 0x461: 0x0808, 0x462: 0x0c08, 0x463: 0x0c08, + 0x464: 0x0c08, 0x465: 0x0c08, 0x466: 0x0a08, 0x467: 0x0c08, 0x468: 0x0a08, 0x469: 0x0c08, + 0x46a: 0x0a08, 0x46b: 0x0a08, 0x46c: 0x0a08, 0x46d: 0x0a08, 0x46e: 0x0a08, 0x46f: 0x0c08, + 0x470: 0x0c08, 0x471: 0x0c08, 0x472: 0x0c08, 0x473: 0x0a08, 0x474: 0x0a08, 0x475: 0x0a08, + 0x476: 0x0a08, 0x477: 0x0a08, 0x478: 0x0a08, 0x479: 0x0a08, 0x47a: 0x0a08, 0x47b: 0x0a08, + 0x47c: 0x0a08, 0x47d: 0x0a08, 0x47e: 0x0a08, 0x47f: 0x0a08, + // Block 0x12, offset 0x480 + 0x480: 0x0818, 0x481: 0x0a08, 0x482: 0x0a08, 0x483: 0x0a08, 0x484: 0x0a08, 0x485: 0x0a08, + 0x486: 0x0a08, 0x487: 0x0a08, 0x488: 0x0c08, 0x489: 0x0a08, 0x48a: 0x0a08, 0x48b: 0x3308, + 0x48c: 0x3308, 0x48d: 0x3308, 0x48e: 0x3308, 0x48f: 0x3308, 0x490: 0x3308, 0x491: 0x3308, + 0x492: 0x3308, 0x493: 0x3308, 0x494: 0x3308, 0x495: 0x3308, 0x496: 0x3308, 0x497: 0x3308, + 0x498: 0x3308, 0x499: 0x3308, 0x49a: 0x3308, 0x49b: 0x3308, 0x49c: 0x3308, 0x49d: 0x3308, + 0x49e: 0x3308, 0x49f: 0x3308, 0x4a0: 0x0808, 0x4a1: 0x0808, 0x4a2: 0x0808, 0x4a3: 0x0808, + 0x4a4: 0x0808, 0x4a5: 0x0808, 0x4a6: 0x0808, 0x4a7: 0x0808, 0x4a8: 0x0808, 0x4a9: 0x0808, + 0x4aa: 0x0018, 0x4ab: 0x0818, 0x4ac: 0x0818, 0x4ad: 0x0818, 0x4ae: 0x0a08, 0x4af: 0x0a08, + 0x4b0: 0x3308, 0x4b1: 0x0c08, 0x4b2: 0x0c08, 0x4b3: 0x0c08, 0x4b4: 0x0808, 0x4b5: 0x0429, + 0x4b6: 0x0451, 0x4b7: 0x0479, 0x4b8: 0x04a1, 0x4b9: 0x0a08, 0x4ba: 0x0a08, 0x4bb: 0x0a08, + 0x4bc: 0x0a08, 0x4bd: 0x0a08, 0x4be: 0x0a08, 0x4bf: 0x0a08, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x0c08, 0x4c1: 0x0a08, 0x4c2: 0x0a08, 0x4c3: 0x0c08, 0x4c4: 0x0c08, 0x4c5: 0x0c08, + 0x4c6: 0x0c08, 0x4c7: 0x0c08, 0x4c8: 0x0c08, 0x4c9: 0x0c08, 0x4ca: 0x0c08, 0x4cb: 0x0c08, + 0x4cc: 0x0a08, 0x4cd: 0x0c08, 0x4ce: 0x0a08, 0x4cf: 0x0c08, 0x4d0: 0x0a08, 0x4d1: 0x0a08, + 0x4d2: 0x0c08, 0x4d3: 0x0c08, 0x4d4: 0x0818, 0x4d5: 0x0c08, 0x4d6: 0x3308, 0x4d7: 0x3308, + 0x4d8: 0x3308, 0x4d9: 0x3308, 0x4da: 0x3308, 0x4db: 0x3308, 0x4dc: 0x3308, 0x4dd: 0x0840, + 0x4de: 0x0018, 0x4df: 0x3308, 0x4e0: 0x3308, 0x4e1: 0x3308, 0x4e2: 0x3308, 0x4e3: 0x3308, + 0x4e4: 0x3308, 0x4e5: 0x0808, 0x4e6: 0x0808, 0x4e7: 0x3308, 0x4e8: 0x3308, 0x4e9: 0x0018, + 0x4ea: 0x3308, 0x4eb: 0x3308, 0x4ec: 0x3308, 0x4ed: 0x3308, 0x4ee: 0x0c08, 0x4ef: 0x0c08, + 0x4f0: 0x0008, 0x4f1: 0x0008, 0x4f2: 0x0008, 0x4f3: 0x0008, 0x4f4: 0x0008, 0x4f5: 0x0008, + 0x4f6: 0x0008, 0x4f7: 0x0008, 0x4f8: 0x0008, 0x4f9: 0x0008, 0x4fa: 0x0a08, 0x4fb: 0x0a08, + 0x4fc: 0x0a08, 0x4fd: 0x0808, 0x4fe: 0x0808, 0x4ff: 0x0a08, + // Block 0x14, offset 0x500 + 0x500: 0x0818, 0x501: 0x0818, 0x502: 0x0818, 0x503: 0x0818, 0x504: 0x0818, 0x505: 0x0818, + 0x506: 0x0818, 0x507: 0x0818, 0x508: 0x0818, 0x509: 0x0818, 0x50a: 0x0818, 0x50b: 0x0818, + 0x50c: 0x0818, 0x50d: 0x0818, 0x50e: 0x0040, 0x50f: 0x0b40, 0x510: 0x0c08, 0x511: 0x3308, + 0x512: 0x0a08, 0x513: 0x0a08, 0x514: 0x0a08, 0x515: 0x0c08, 0x516: 0x0c08, 0x517: 0x0c08, + 0x518: 0x0c08, 0x519: 0x0c08, 0x51a: 0x0a08, 0x51b: 0x0a08, 0x51c: 0x0a08, 0x51d: 0x0a08, + 0x51e: 0x0c08, 0x51f: 0x0a08, 0x520: 0x0a08, 0x521: 0x0a08, 0x522: 0x0a08, 0x523: 0x0a08, + 0x524: 0x0a08, 0x525: 0x0a08, 0x526: 0x0a08, 0x527: 0x0a08, 0x528: 0x0c08, 0x529: 0x0a08, + 0x52a: 0x0c08, 0x52b: 0x0a08, 0x52c: 0x0c08, 0x52d: 0x0a08, 0x52e: 0x0a08, 0x52f: 0x0c08, + 0x530: 0x3308, 0x531: 0x3308, 0x532: 0x3308, 0x533: 0x3308, 0x534: 0x3308, 0x535: 0x3308, + 0x536: 0x3308, 0x537: 0x3308, 0x538: 0x3308, 0x539: 0x3308, 0x53a: 0x3308, 0x53b: 0x3308, + 0x53c: 0x3308, 0x53d: 0x3308, 0x53e: 0x3308, 0x53f: 0x3308, + // Block 0x15, offset 0x540 + 0x540: 0x0c08, 0x541: 0x0a08, 0x542: 0x0a08, 0x543: 0x0a08, 0x544: 0x0a08, 0x545: 0x0a08, + 0x546: 0x0c08, 0x547: 0x0c08, 0x548: 0x0a08, 0x549: 0x0c08, 0x54a: 0x0a08, 0x54b: 0x0a08, + 0x54c: 0x0a08, 0x54d: 0x0a08, 0x54e: 0x0a08, 0x54f: 0x0a08, 0x550: 0x0a08, 0x551: 0x0a08, + 0x552: 0x0a08, 0x553: 0x0a08, 0x554: 0x0c08, 0x555: 0x0a08, 0x556: 0x0808, 0x557: 0x0808, + 0x558: 0x0808, 0x559: 0x3308, 0x55a: 0x3308, 0x55b: 0x3308, 0x55c: 0x0040, 0x55d: 0x0040, + 0x55e: 0x0818, 0x55f: 0x0040, 0x560: 0x0a08, 0x561: 0x0808, 0x562: 0x0a08, 0x563: 0x0a08, + 0x564: 0x0a08, 0x565: 0x0a08, 0x566: 0x0808, 0x567: 0x0c08, 0x568: 0x0a08, 0x569: 0x0c08, + 0x56a: 0x0c08, 0x56b: 0x0040, 0x56c: 0x0040, 0x56d: 0x0040, 0x56e: 0x0040, 0x56f: 0x0040, + 0x570: 0x0040, 0x571: 0x0040, 0x572: 0x0040, 0x573: 0x0040, 0x574: 0x0040, 0x575: 0x0040, + 0x576: 0x0040, 0x577: 0x0040, 0x578: 0x0040, 0x579: 0x0040, 0x57a: 0x0040, 0x57b: 0x0040, + 0x57c: 0x0040, 0x57d: 0x0040, 0x57e: 0x0040, 0x57f: 0x0040, + // Block 0x16, offset 0x580 + 0x580: 0x3008, 0x581: 0x3308, 0x582: 0x3308, 0x583: 0x3308, 0x584: 0x3308, 0x585: 0x3308, + 0x586: 0x3308, 0x587: 0x3308, 0x588: 0x3308, 0x589: 0x3008, 0x58a: 0x3008, 0x58b: 0x3008, + 0x58c: 0x3008, 0x58d: 0x3b08, 0x58e: 0x3008, 0x58f: 0x3008, 0x590: 0x0008, 0x591: 0x3308, + 0x592: 0x3308, 0x593: 0x3308, 0x594: 0x3308, 0x595: 0x3308, 0x596: 0x3308, 0x597: 0x3308, + 0x598: 0x04c9, 0x599: 0x0501, 0x59a: 0x0539, 0x59b: 0x0571, 0x59c: 0x05a9, 0x59d: 0x05e1, + 0x59e: 0x0619, 0x59f: 0x0651, 0x5a0: 0x0008, 0x5a1: 0x0008, 0x5a2: 0x3308, 0x5a3: 0x3308, + 0x5a4: 0x0018, 0x5a5: 0x0018, 0x5a6: 0x0008, 0x5a7: 0x0008, 0x5a8: 0x0008, 0x5a9: 0x0008, + 0x5aa: 0x0008, 0x5ab: 0x0008, 0x5ac: 0x0008, 0x5ad: 0x0008, 0x5ae: 0x0008, 0x5af: 0x0008, + 0x5b0: 0x0018, 0x5b1: 0x0008, 0x5b2: 0x0008, 0x5b3: 0x0008, 0x5b4: 0x0008, 0x5b5: 0x0008, + 0x5b6: 0x0008, 0x5b7: 0x0008, 0x5b8: 0x0008, 0x5b9: 0x0008, 0x5ba: 0x0008, 0x5bb: 0x0008, + 0x5bc: 0x0008, 0x5bd: 0x0008, 0x5be: 0x0008, 0x5bf: 0x0008, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x0008, 0x5c1: 0x3308, 0x5c2: 0x3008, 0x5c3: 0x3008, 0x5c4: 0x0040, 0x5c5: 0x0008, + 0x5c6: 0x0008, 0x5c7: 0x0008, 0x5c8: 0x0008, 0x5c9: 0x0008, 0x5ca: 0x0008, 0x5cb: 0x0008, + 0x5cc: 0x0008, 0x5cd: 0x0040, 0x5ce: 0x0040, 0x5cf: 0x0008, 0x5d0: 0x0008, 0x5d1: 0x0040, + 0x5d2: 0x0040, 0x5d3: 0x0008, 0x5d4: 0x0008, 0x5d5: 0x0008, 0x5d6: 0x0008, 0x5d7: 0x0008, + 0x5d8: 0x0008, 0x5d9: 0x0008, 0x5da: 0x0008, 0x5db: 0x0008, 0x5dc: 0x0008, 0x5dd: 0x0008, + 0x5de: 0x0008, 0x5df: 0x0008, 0x5e0: 0x0008, 0x5e1: 0x0008, 0x5e2: 0x0008, 0x5e3: 0x0008, + 0x5e4: 0x0008, 0x5e5: 0x0008, 0x5e6: 0x0008, 0x5e7: 0x0008, 0x5e8: 0x0008, 0x5e9: 0x0040, + 0x5ea: 0x0008, 0x5eb: 0x0008, 0x5ec: 0x0008, 0x5ed: 0x0008, 0x5ee: 0x0008, 0x5ef: 0x0008, + 0x5f0: 0x0008, 0x5f1: 0x0040, 0x5f2: 0x0008, 0x5f3: 0x0040, 0x5f4: 0x0040, 0x5f5: 0x0040, + 0x5f6: 0x0008, 0x5f7: 0x0008, 0x5f8: 0x0008, 0x5f9: 0x0008, 0x5fa: 0x0040, 0x5fb: 0x0040, + 0x5fc: 0x3308, 0x5fd: 0x0008, 0x5fe: 0x3008, 0x5ff: 0x3008, + // Block 0x18, offset 0x600 + 0x600: 0x3008, 0x601: 0x3308, 0x602: 0x3308, 0x603: 0x3308, 0x604: 0x3308, 0x605: 0x0040, + 0x606: 0x0040, 0x607: 0x3008, 0x608: 0x3008, 0x609: 0x0040, 0x60a: 0x0040, 0x60b: 0x3008, + 0x60c: 0x3008, 0x60d: 0x3b08, 0x60e: 0x0008, 0x60f: 0x0040, 0x610: 0x0040, 0x611: 0x0040, + 0x612: 0x0040, 0x613: 0x0040, 0x614: 0x0040, 0x615: 0x0040, 0x616: 0x0040, 0x617: 0x3008, + 0x618: 0x0040, 0x619: 0x0040, 0x61a: 0x0040, 0x61b: 0x0040, 0x61c: 0x0689, 0x61d: 0x06c1, + 0x61e: 0x0040, 0x61f: 0x06f9, 0x620: 0x0008, 0x621: 0x0008, 0x622: 0x3308, 0x623: 0x3308, + 0x624: 0x0040, 0x625: 0x0040, 0x626: 0x0008, 0x627: 0x0008, 0x628: 0x0008, 0x629: 0x0008, + 0x62a: 0x0008, 0x62b: 0x0008, 0x62c: 0x0008, 0x62d: 0x0008, 0x62e: 0x0008, 0x62f: 0x0008, + 0x630: 0x0008, 0x631: 0x0008, 0x632: 0x0018, 0x633: 0x0018, 0x634: 0x0018, 0x635: 0x0018, + 0x636: 0x0018, 0x637: 0x0018, 0x638: 0x0018, 0x639: 0x0018, 0x63a: 0x0018, 0x63b: 0x0018, + 0x63c: 0x0008, 0x63d: 0x0018, 0x63e: 0x0040, 0x63f: 0x0040, + // Block 0x19, offset 0x640 + 0x640: 0x0040, 0x641: 0x3308, 0x642: 0x3308, 0x643: 0x3008, 0x644: 0x0040, 0x645: 0x0008, + 0x646: 0x0008, 0x647: 0x0008, 0x648: 0x0008, 0x649: 0x0008, 0x64a: 0x0008, 0x64b: 0x0040, + 0x64c: 0x0040, 0x64d: 0x0040, 0x64e: 0x0040, 0x64f: 0x0008, 0x650: 0x0008, 0x651: 0x0040, + 0x652: 0x0040, 0x653: 0x0008, 0x654: 0x0008, 0x655: 0x0008, 0x656: 0x0008, 0x657: 0x0008, + 0x658: 0x0008, 0x659: 0x0008, 0x65a: 0x0008, 0x65b: 0x0008, 0x65c: 0x0008, 0x65d: 0x0008, + 0x65e: 0x0008, 0x65f: 0x0008, 0x660: 0x0008, 0x661: 0x0008, 0x662: 0x0008, 0x663: 0x0008, + 0x664: 0x0008, 0x665: 0x0008, 0x666: 0x0008, 0x667: 0x0008, 0x668: 0x0008, 0x669: 0x0040, + 0x66a: 0x0008, 0x66b: 0x0008, 0x66c: 0x0008, 0x66d: 0x0008, 0x66e: 0x0008, 0x66f: 0x0008, + 0x670: 0x0008, 0x671: 0x0040, 0x672: 0x0008, 0x673: 0x0731, 0x674: 0x0040, 0x675: 0x0008, + 0x676: 0x0769, 0x677: 0x0040, 0x678: 0x0008, 0x679: 0x0008, 0x67a: 0x0040, 0x67b: 0x0040, + 0x67c: 0x3308, 0x67d: 0x0040, 0x67e: 0x3008, 0x67f: 0x3008, + // Block 0x1a, offset 0x680 + 0x680: 0x3008, 0x681: 0x3308, 0x682: 0x3308, 0x683: 0x0040, 0x684: 0x0040, 0x685: 0x0040, + 0x686: 0x0040, 0x687: 0x3308, 0x688: 0x3308, 0x689: 0x0040, 0x68a: 0x0040, 0x68b: 0x3308, + 0x68c: 0x3308, 0x68d: 0x3b08, 0x68e: 0x0040, 0x68f: 0x0040, 0x690: 0x0040, 0x691: 0x3308, + 0x692: 0x0040, 0x693: 0x0040, 0x694: 0x0040, 0x695: 0x0040, 0x696: 0x0040, 0x697: 0x0040, + 0x698: 0x0040, 0x699: 0x07a1, 0x69a: 0x07d9, 0x69b: 0x0811, 0x69c: 0x0008, 0x69d: 0x0040, + 0x69e: 0x0849, 0x69f: 0x0040, 0x6a0: 0x0040, 0x6a1: 0x0040, 0x6a2: 0x0040, 0x6a3: 0x0040, + 0x6a4: 0x0040, 0x6a5: 0x0040, 0x6a6: 0x0008, 0x6a7: 0x0008, 0x6a8: 0x0008, 0x6a9: 0x0008, + 0x6aa: 0x0008, 0x6ab: 0x0008, 0x6ac: 0x0008, 0x6ad: 0x0008, 0x6ae: 0x0008, 0x6af: 0x0008, + 0x6b0: 0x3308, 0x6b1: 0x3308, 0x6b2: 0x0008, 0x6b3: 0x0008, 0x6b4: 0x0008, 0x6b5: 0x3308, + 0x6b6: 0x0040, 0x6b7: 0x0040, 0x6b8: 0x0040, 0x6b9: 0x0040, 0x6ba: 0x0040, 0x6bb: 0x0040, + 0x6bc: 0x0040, 0x6bd: 0x0040, 0x6be: 0x0040, 0x6bf: 0x0040, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x0040, 0x6c1: 0x3308, 0x6c2: 0x3308, 0x6c3: 0x3008, 0x6c4: 0x0040, 0x6c5: 0x0008, + 0x6c6: 0x0008, 0x6c7: 0x0008, 0x6c8: 0x0008, 0x6c9: 0x0008, 0x6ca: 0x0008, 0x6cb: 0x0008, + 0x6cc: 0x0008, 0x6cd: 0x0008, 0x6ce: 0x0040, 0x6cf: 0x0008, 0x6d0: 0x0008, 0x6d1: 0x0008, + 0x6d2: 0x0040, 0x6d3: 0x0008, 0x6d4: 0x0008, 0x6d5: 0x0008, 0x6d6: 0x0008, 0x6d7: 0x0008, + 0x6d8: 0x0008, 0x6d9: 0x0008, 0x6da: 0x0008, 0x6db: 0x0008, 0x6dc: 0x0008, 0x6dd: 0x0008, + 0x6de: 0x0008, 0x6df: 0x0008, 0x6e0: 0x0008, 0x6e1: 0x0008, 0x6e2: 0x0008, 0x6e3: 0x0008, + 0x6e4: 0x0008, 0x6e5: 0x0008, 0x6e6: 0x0008, 0x6e7: 0x0008, 0x6e8: 0x0008, 0x6e9: 0x0040, + 0x6ea: 0x0008, 0x6eb: 0x0008, 0x6ec: 0x0008, 0x6ed: 0x0008, 0x6ee: 0x0008, 0x6ef: 0x0008, + 0x6f0: 0x0008, 0x6f1: 0x0040, 0x6f2: 0x0008, 0x6f3: 0x0008, 0x6f4: 0x0040, 0x6f5: 0x0008, + 0x6f6: 0x0008, 0x6f7: 0x0008, 0x6f8: 0x0008, 0x6f9: 0x0008, 0x6fa: 0x0040, 0x6fb: 0x0040, + 0x6fc: 0x3308, 0x6fd: 0x0008, 0x6fe: 0x3008, 0x6ff: 0x3008, + // Block 0x1c, offset 0x700 + 0x700: 0x3008, 0x701: 0x3308, 0x702: 0x3308, 0x703: 0x3308, 0x704: 0x3308, 0x705: 0x3308, + 0x706: 0x0040, 0x707: 0x3308, 0x708: 0x3308, 0x709: 0x3008, 0x70a: 0x0040, 0x70b: 0x3008, + 0x70c: 0x3008, 0x70d: 0x3b08, 0x70e: 0x0040, 0x70f: 0x0040, 0x710: 0x0008, 0x711: 0x0040, + 0x712: 0x0040, 0x713: 0x0040, 0x714: 0x0040, 0x715: 0x0040, 0x716: 0x0040, 0x717: 0x0040, + 0x718: 0x0040, 0x719: 0x0040, 0x71a: 0x0040, 0x71b: 0x0040, 0x71c: 0x0040, 0x71d: 0x0040, + 0x71e: 0x0040, 0x71f: 0x0040, 0x720: 0x0008, 0x721: 0x0008, 0x722: 0x3308, 0x723: 0x3308, + 0x724: 0x0040, 0x725: 0x0040, 0x726: 0x0008, 0x727: 0x0008, 0x728: 0x0008, 0x729: 0x0008, + 0x72a: 0x0008, 0x72b: 0x0008, 0x72c: 0x0008, 0x72d: 0x0008, 0x72e: 0x0008, 0x72f: 0x0008, + 0x730: 0x0018, 0x731: 0x0018, 0x732: 0x0040, 0x733: 0x0040, 0x734: 0x0040, 0x735: 0x0040, + 0x736: 0x0040, 0x737: 0x0040, 0x738: 0x0040, 0x739: 0x0008, 0x73a: 0x3308, 0x73b: 0x3308, + 0x73c: 0x3308, 0x73d: 0x3308, 0x73e: 0x3308, 0x73f: 0x3308, + // Block 0x1d, offset 0x740 + 0x740: 0x0040, 0x741: 0x3308, 0x742: 0x3008, 0x743: 0x3008, 0x744: 0x0040, 0x745: 0x0008, + 0x746: 0x0008, 0x747: 0x0008, 0x748: 0x0008, 0x749: 0x0008, 0x74a: 0x0008, 0x74b: 0x0008, + 0x74c: 0x0008, 0x74d: 0x0040, 0x74e: 0x0040, 0x74f: 0x0008, 0x750: 0x0008, 0x751: 0x0040, + 0x752: 0x0040, 0x753: 0x0008, 0x754: 0x0008, 0x755: 0x0008, 0x756: 0x0008, 0x757: 0x0008, + 0x758: 0x0008, 0x759: 0x0008, 0x75a: 0x0008, 0x75b: 0x0008, 0x75c: 0x0008, 0x75d: 0x0008, + 0x75e: 0x0008, 0x75f: 0x0008, 0x760: 0x0008, 0x761: 0x0008, 0x762: 0x0008, 0x763: 0x0008, + 0x764: 0x0008, 0x765: 0x0008, 0x766: 0x0008, 0x767: 0x0008, 0x768: 0x0008, 0x769: 0x0040, + 0x76a: 0x0008, 0x76b: 0x0008, 0x76c: 0x0008, 0x76d: 0x0008, 0x76e: 0x0008, 0x76f: 0x0008, + 0x770: 0x0008, 0x771: 0x0040, 0x772: 0x0008, 0x773: 0x0008, 0x774: 0x0040, 0x775: 0x0008, + 0x776: 0x0008, 0x777: 0x0008, 0x778: 0x0008, 0x779: 0x0008, 0x77a: 0x0040, 0x77b: 0x0040, + 0x77c: 0x3308, 0x77d: 0x0008, 0x77e: 0x3008, 0x77f: 0x3308, + // Block 0x1e, offset 0x780 + 0x780: 0x3008, 0x781: 0x3308, 0x782: 0x3308, 0x783: 0x3308, 0x784: 0x3308, 0x785: 0x0040, + 0x786: 0x0040, 0x787: 0x3008, 0x788: 0x3008, 0x789: 0x0040, 0x78a: 0x0040, 0x78b: 0x3008, + 0x78c: 0x3008, 0x78d: 0x3b08, 0x78e: 0x0040, 0x78f: 0x0040, 0x790: 0x0040, 0x791: 0x0040, + 0x792: 0x0040, 0x793: 0x0040, 0x794: 0x0040, 0x795: 0x0040, 0x796: 0x3308, 0x797: 0x3008, + 0x798: 0x0040, 0x799: 0x0040, 0x79a: 0x0040, 0x79b: 0x0040, 0x79c: 0x0881, 0x79d: 0x08b9, + 0x79e: 0x0040, 0x79f: 0x0008, 0x7a0: 0x0008, 0x7a1: 0x0008, 0x7a2: 0x3308, 0x7a3: 0x3308, + 0x7a4: 0x0040, 0x7a5: 0x0040, 0x7a6: 0x0008, 0x7a7: 0x0008, 0x7a8: 0x0008, 0x7a9: 0x0008, + 0x7aa: 0x0008, 0x7ab: 0x0008, 0x7ac: 0x0008, 0x7ad: 0x0008, 0x7ae: 0x0008, 0x7af: 0x0008, + 0x7b0: 0x0018, 0x7b1: 0x0008, 0x7b2: 0x0018, 0x7b3: 0x0018, 0x7b4: 0x0018, 0x7b5: 0x0018, + 0x7b6: 0x0018, 0x7b7: 0x0018, 0x7b8: 0x0040, 0x7b9: 0x0040, 0x7ba: 0x0040, 0x7bb: 0x0040, + 0x7bc: 0x0040, 0x7bd: 0x0040, 0x7be: 0x0040, 0x7bf: 0x0040, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x0040, 0x7c1: 0x0040, 0x7c2: 0x3308, 0x7c3: 0x0008, 0x7c4: 0x0040, 0x7c5: 0x0008, + 0x7c6: 0x0008, 0x7c7: 0x0008, 0x7c8: 0x0008, 0x7c9: 0x0008, 0x7ca: 0x0008, 0x7cb: 0x0040, + 0x7cc: 0x0040, 0x7cd: 0x0040, 0x7ce: 0x0008, 0x7cf: 0x0008, 0x7d0: 0x0008, 0x7d1: 0x0040, + 0x7d2: 0x0008, 0x7d3: 0x0008, 0x7d4: 0x0008, 0x7d5: 0x0008, 0x7d6: 0x0040, 0x7d7: 0x0040, + 0x7d8: 0x0040, 0x7d9: 0x0008, 0x7da: 0x0008, 0x7db: 0x0040, 0x7dc: 0x0008, 0x7dd: 0x0040, + 0x7de: 0x0008, 0x7df: 0x0008, 0x7e0: 0x0040, 0x7e1: 0x0040, 0x7e2: 0x0040, 0x7e3: 0x0008, + 0x7e4: 0x0008, 0x7e5: 0x0040, 0x7e6: 0x0040, 0x7e7: 0x0040, 0x7e8: 0x0008, 0x7e9: 0x0008, + 0x7ea: 0x0008, 0x7eb: 0x0040, 0x7ec: 0x0040, 0x7ed: 0x0040, 0x7ee: 0x0008, 0x7ef: 0x0008, + 0x7f0: 0x0008, 0x7f1: 0x0008, 0x7f2: 0x0008, 0x7f3: 0x0008, 0x7f4: 0x0008, 0x7f5: 0x0008, + 0x7f6: 0x0008, 0x7f7: 0x0008, 0x7f8: 0x0008, 0x7f9: 0x0008, 0x7fa: 0x0040, 0x7fb: 0x0040, + 0x7fc: 0x0040, 0x7fd: 0x0040, 0x7fe: 0x3008, 0x7ff: 0x3008, + // Block 0x20, offset 0x800 + 0x800: 0x3308, 0x801: 0x3008, 0x802: 0x3008, 0x803: 0x3008, 0x804: 0x3008, 0x805: 0x0040, + 0x806: 0x3308, 0x807: 0x3308, 0x808: 0x3308, 0x809: 0x0040, 0x80a: 0x3308, 0x80b: 0x3308, + 0x80c: 0x3308, 0x80d: 0x3b08, 0x80e: 0x0040, 0x80f: 0x0040, 0x810: 0x0040, 0x811: 0x0040, + 0x812: 0x0040, 0x813: 0x0040, 0x814: 0x0040, 0x815: 0x3308, 0x816: 0x3308, 0x817: 0x0040, + 0x818: 0x0008, 0x819: 0x0008, 0x81a: 0x0008, 0x81b: 0x0040, 0x81c: 0x0040, 0x81d: 0x0040, + 0x81e: 0x0040, 0x81f: 0x0040, 0x820: 0x0008, 0x821: 0x0008, 0x822: 0x3308, 0x823: 0x3308, + 0x824: 0x0040, 0x825: 0x0040, 0x826: 0x0008, 0x827: 0x0008, 0x828: 0x0008, 0x829: 0x0008, + 0x82a: 0x0008, 0x82b: 0x0008, 0x82c: 0x0008, 0x82d: 0x0008, 0x82e: 0x0008, 0x82f: 0x0008, + 0x830: 0x0040, 0x831: 0x0040, 0x832: 0x0040, 0x833: 0x0040, 0x834: 0x0040, 0x835: 0x0040, + 0x836: 0x0040, 0x837: 0x0040, 0x838: 0x0018, 0x839: 0x0018, 0x83a: 0x0018, 0x83b: 0x0018, + 0x83c: 0x0018, 0x83d: 0x0018, 0x83e: 0x0018, 0x83f: 0x0018, + // Block 0x21, offset 0x840 + 0x840: 0x0008, 0x841: 0x3308, 0x842: 0x3008, 0x843: 0x3008, 0x844: 0x0040, 0x845: 0x0008, + 0x846: 0x0008, 0x847: 0x0008, 0x848: 0x0008, 0x849: 0x0008, 0x84a: 0x0008, 0x84b: 0x0008, + 0x84c: 0x0008, 0x84d: 0x0040, 0x84e: 0x0008, 0x84f: 0x0008, 0x850: 0x0008, 0x851: 0x0040, + 0x852: 0x0008, 0x853: 0x0008, 0x854: 0x0008, 0x855: 0x0008, 0x856: 0x0008, 0x857: 0x0008, + 0x858: 0x0008, 0x859: 0x0008, 0x85a: 0x0008, 0x85b: 0x0008, 0x85c: 0x0008, 0x85d: 0x0008, + 0x85e: 0x0008, 0x85f: 0x0008, 0x860: 0x0008, 0x861: 0x0008, 0x862: 0x0008, 0x863: 0x0008, + 0x864: 0x0008, 0x865: 0x0008, 0x866: 0x0008, 0x867: 0x0008, 0x868: 0x0008, 0x869: 0x0040, + 0x86a: 0x0008, 0x86b: 0x0008, 0x86c: 0x0008, 0x86d: 0x0008, 0x86e: 0x0008, 0x86f: 0x0008, + 0x870: 0x0008, 0x871: 0x0008, 0x872: 0x0008, 0x873: 0x0008, 0x874: 0x0040, 0x875: 0x0008, + 0x876: 0x0008, 0x877: 0x0008, 0x878: 0x0008, 0x879: 0x0008, 0x87a: 0x0040, 0x87b: 0x0040, + 0x87c: 0x3308, 0x87d: 0x0008, 0x87e: 0x3008, 0x87f: 0x3308, + // Block 0x22, offset 0x880 + 0x880: 0x3008, 0x881: 0x3008, 0x882: 0x3008, 0x883: 0x3008, 0x884: 0x3008, 0x885: 0x0040, + 0x886: 0x3308, 0x887: 0x3008, 0x888: 0x3008, 0x889: 0x0040, 0x88a: 0x3008, 0x88b: 0x3008, + 0x88c: 0x3308, 0x88d: 0x3b08, 0x88e: 0x0040, 0x88f: 0x0040, 0x890: 0x0040, 0x891: 0x0040, + 0x892: 0x0040, 0x893: 0x0040, 0x894: 0x0040, 0x895: 0x3008, 0x896: 0x3008, 0x897: 0x0040, + 0x898: 0x0040, 0x899: 0x0040, 0x89a: 0x0040, 0x89b: 0x0040, 0x89c: 0x0040, 0x89d: 0x0040, + 0x89e: 0x0008, 0x89f: 0x0040, 0x8a0: 0x0008, 0x8a1: 0x0008, 0x8a2: 0x3308, 0x8a3: 0x3308, + 0x8a4: 0x0040, 0x8a5: 0x0040, 0x8a6: 0x0008, 0x8a7: 0x0008, 0x8a8: 0x0008, 0x8a9: 0x0008, + 0x8aa: 0x0008, 0x8ab: 0x0008, 0x8ac: 0x0008, 0x8ad: 0x0008, 0x8ae: 0x0008, 0x8af: 0x0008, + 0x8b0: 0x0040, 0x8b1: 0x0008, 0x8b2: 0x0008, 0x8b3: 0x0040, 0x8b4: 0x0040, 0x8b5: 0x0040, + 0x8b6: 0x0040, 0x8b7: 0x0040, 0x8b8: 0x0040, 0x8b9: 0x0040, 0x8ba: 0x0040, 0x8bb: 0x0040, + 0x8bc: 0x0040, 0x8bd: 0x0040, 0x8be: 0x0040, 0x8bf: 0x0040, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x3008, 0x8c1: 0x3308, 0x8c2: 0x3308, 0x8c3: 0x3308, 0x8c4: 0x3308, 0x8c5: 0x0040, + 0x8c6: 0x3008, 0x8c7: 0x3008, 0x8c8: 0x3008, 0x8c9: 0x0040, 0x8ca: 0x3008, 0x8cb: 0x3008, + 0x8cc: 0x3008, 0x8cd: 0x3b08, 0x8ce: 0x0008, 0x8cf: 0x0018, 0x8d0: 0x0040, 0x8d1: 0x0040, + 0x8d2: 0x0040, 0x8d3: 0x0040, 0x8d4: 0x0008, 0x8d5: 0x0008, 0x8d6: 0x0008, 0x8d7: 0x3008, + 0x8d8: 0x0018, 0x8d9: 0x0018, 0x8da: 0x0018, 0x8db: 0x0018, 0x8dc: 0x0018, 0x8dd: 0x0018, + 0x8de: 0x0018, 0x8df: 0x0008, 0x8e0: 0x0008, 0x8e1: 0x0008, 0x8e2: 0x3308, 0x8e3: 0x3308, + 0x8e4: 0x0040, 0x8e5: 0x0040, 0x8e6: 0x0008, 0x8e7: 0x0008, 0x8e8: 0x0008, 0x8e9: 0x0008, + 0x8ea: 0x0008, 0x8eb: 0x0008, 0x8ec: 0x0008, 0x8ed: 0x0008, 0x8ee: 0x0008, 0x8ef: 0x0008, + 0x8f0: 0x0018, 0x8f1: 0x0018, 0x8f2: 0x0018, 0x8f3: 0x0018, 0x8f4: 0x0018, 0x8f5: 0x0018, + 0x8f6: 0x0018, 0x8f7: 0x0018, 0x8f8: 0x0018, 0x8f9: 0x0018, 0x8fa: 0x0008, 0x8fb: 0x0008, + 0x8fc: 0x0008, 0x8fd: 0x0008, 0x8fe: 0x0008, 0x8ff: 0x0008, + // Block 0x24, offset 0x900 + 0x900: 0x0040, 0x901: 0x0008, 0x902: 0x0008, 0x903: 0x0040, 0x904: 0x0008, 0x905: 0x0040, + 0x906: 0x0040, 0x907: 0x0008, 0x908: 0x0008, 0x909: 0x0040, 0x90a: 0x0008, 0x90b: 0x0040, + 0x90c: 0x0040, 0x90d: 0x0008, 0x90e: 0x0040, 0x90f: 0x0040, 0x910: 0x0040, 0x911: 0x0040, + 0x912: 0x0040, 0x913: 0x0040, 0x914: 0x0008, 0x915: 0x0008, 0x916: 0x0008, 0x917: 0x0008, + 0x918: 0x0040, 0x919: 0x0008, 0x91a: 0x0008, 0x91b: 0x0008, 0x91c: 0x0008, 0x91d: 0x0008, + 0x91e: 0x0008, 0x91f: 0x0008, 0x920: 0x0040, 0x921: 0x0008, 0x922: 0x0008, 0x923: 0x0008, + 0x924: 0x0040, 0x925: 0x0008, 0x926: 0x0040, 0x927: 0x0008, 0x928: 0x0040, 0x929: 0x0040, + 0x92a: 0x0008, 0x92b: 0x0008, 0x92c: 0x0040, 0x92d: 0x0008, 0x92e: 0x0008, 0x92f: 0x0008, + 0x930: 0x0008, 0x931: 0x3308, 0x932: 0x0008, 0x933: 0x0929, 0x934: 0x3308, 0x935: 0x3308, + 0x936: 0x3308, 0x937: 0x3308, 0x938: 0x3308, 0x939: 0x3308, 0x93a: 0x0040, 0x93b: 0x3308, + 0x93c: 0x3308, 0x93d: 0x0008, 0x93e: 0x0040, 0x93f: 0x0040, + // Block 0x25, offset 0x940 + 0x940: 0x0008, 0x941: 0x0008, 0x942: 0x0008, 0x943: 0x09d1, 0x944: 0x0008, 0x945: 0x0008, + 0x946: 0x0008, 0x947: 0x0008, 0x948: 0x0040, 0x949: 0x0008, 0x94a: 0x0008, 0x94b: 0x0008, + 0x94c: 0x0008, 0x94d: 0x0a09, 0x94e: 0x0008, 0x94f: 0x0008, 0x950: 0x0008, 0x951: 0x0008, + 0x952: 0x0a41, 0x953: 0x0008, 0x954: 0x0008, 0x955: 0x0008, 0x956: 0x0008, 0x957: 0x0a79, + 0x958: 0x0008, 0x959: 0x0008, 0x95a: 0x0008, 0x95b: 0x0008, 0x95c: 0x0ab1, 0x95d: 0x0008, + 0x95e: 0x0008, 0x95f: 0x0008, 0x960: 0x0008, 0x961: 0x0008, 0x962: 0x0008, 0x963: 0x0008, + 0x964: 0x0008, 0x965: 0x0008, 0x966: 0x0008, 0x967: 0x0008, 0x968: 0x0008, 0x969: 0x0ae9, + 0x96a: 0x0008, 0x96b: 0x0008, 0x96c: 0x0008, 0x96d: 0x0040, 0x96e: 0x0040, 0x96f: 0x0040, + 0x970: 0x0040, 0x971: 0x3308, 0x972: 0x3308, 0x973: 0x0b21, 0x974: 0x3308, 0x975: 0x0b59, + 0x976: 0x0b91, 0x977: 0x0bc9, 0x978: 0x0c19, 0x979: 0x0c51, 0x97a: 0x3308, 0x97b: 0x3308, + 0x97c: 0x3308, 0x97d: 0x3308, 0x97e: 0x3308, 0x97f: 0x3008, + // Block 0x26, offset 0x980 + 0x980: 0x3308, 0x981: 0x0ca1, 0x982: 0x3308, 0x983: 0x3308, 0x984: 0x3b08, 0x985: 0x0018, + 0x986: 0x3308, 0x987: 0x3308, 0x988: 0x0008, 0x989: 0x0008, 0x98a: 0x0008, 0x98b: 0x0008, + 0x98c: 0x0008, 0x98d: 0x3308, 0x98e: 0x3308, 0x98f: 0x3308, 0x990: 0x3308, 0x991: 0x3308, + 0x992: 0x3308, 0x993: 0x0cd9, 0x994: 0x3308, 0x995: 0x3308, 0x996: 0x3308, 0x997: 0x3308, + 0x998: 0x0040, 0x999: 0x3308, 0x99a: 0x3308, 0x99b: 0x3308, 0x99c: 0x3308, 0x99d: 0x0d11, + 0x99e: 0x3308, 0x99f: 0x3308, 0x9a0: 0x3308, 0x9a1: 0x3308, 0x9a2: 0x0d49, 0x9a3: 0x3308, + 0x9a4: 0x3308, 0x9a5: 0x3308, 0x9a6: 0x3308, 0x9a7: 0x0d81, 0x9a8: 0x3308, 0x9a9: 0x3308, + 0x9aa: 0x3308, 0x9ab: 0x3308, 0x9ac: 0x0db9, 0x9ad: 0x3308, 0x9ae: 0x3308, 0x9af: 0x3308, + 0x9b0: 0x3308, 0x9b1: 0x3308, 0x9b2: 0x3308, 0x9b3: 0x3308, 0x9b4: 0x3308, 0x9b5: 0x3308, + 0x9b6: 0x3308, 0x9b7: 0x3308, 0x9b8: 0x3308, 0x9b9: 0x0df1, 0x9ba: 0x3308, 0x9bb: 0x3308, + 0x9bc: 0x3308, 0x9bd: 0x0040, 0x9be: 0x0018, 0x9bf: 0x0018, + // Block 0x27, offset 0x9c0 + 0x9c0: 0x0008, 0x9c1: 0x0008, 0x9c2: 0x0008, 0x9c3: 0x0008, 0x9c4: 0x0008, 0x9c5: 0x0008, + 0x9c6: 0x0008, 0x9c7: 0x0008, 0x9c8: 0x0008, 0x9c9: 0x0008, 0x9ca: 0x0008, 0x9cb: 0x0008, + 0x9cc: 0x0008, 0x9cd: 0x0008, 0x9ce: 0x0008, 0x9cf: 0x0008, 0x9d0: 0x0008, 0x9d1: 0x0008, + 0x9d2: 0x0008, 0x9d3: 0x0008, 0x9d4: 0x0008, 0x9d5: 0x0008, 0x9d6: 0x0008, 0x9d7: 0x0008, + 0x9d8: 0x0008, 0x9d9: 0x0008, 0x9da: 0x0008, 0x9db: 0x0008, 0x9dc: 0x0008, 0x9dd: 0x0008, + 0x9de: 0x0008, 0x9df: 0x0008, 0x9e0: 0x0008, 0x9e1: 0x0008, 0x9e2: 0x0008, 0x9e3: 0x0008, + 0x9e4: 0x0008, 0x9e5: 0x0008, 0x9e6: 0x0008, 0x9e7: 0x0008, 0x9e8: 0x0008, 0x9e9: 0x0008, + 0x9ea: 0x0008, 0x9eb: 0x0008, 0x9ec: 0x0039, 0x9ed: 0x0ed1, 0x9ee: 0x0ee9, 0x9ef: 0x0008, + 0x9f0: 0x0ef9, 0x9f1: 0x0f09, 0x9f2: 0x0f19, 0x9f3: 0x0f31, 0x9f4: 0x0249, 0x9f5: 0x0f41, + 0x9f6: 0x0259, 0x9f7: 0x0f51, 0x9f8: 0x0359, 0x9f9: 0x0f61, 0x9fa: 0x0f71, 0x9fb: 0x0008, + 0x9fc: 0x00d9, 0x9fd: 0x0f81, 0x9fe: 0x0f99, 0x9ff: 0x0269, + // Block 0x28, offset 0xa00 + 0xa00: 0x0fa9, 0xa01: 0x0fb9, 0xa02: 0x0279, 0xa03: 0x0039, 0xa04: 0x0fc9, 0xa05: 0x0fe1, + 0xa06: 0x059d, 0xa07: 0x0ee9, 0xa08: 0x0ef9, 0xa09: 0x0f09, 0xa0a: 0x0ff9, 0xa0b: 0x1011, + 0xa0c: 0x1029, 0xa0d: 0x0f31, 0xa0e: 0x0008, 0xa0f: 0x0f51, 0xa10: 0x0f61, 0xa11: 0x1041, + 0xa12: 0x00d9, 0xa13: 0x1059, 0xa14: 0x05b5, 0xa15: 0x05b5, 0xa16: 0x0f99, 0xa17: 0x0fa9, + 0xa18: 0x0fb9, 0xa19: 0x059d, 0xa1a: 0x1071, 0xa1b: 0x1089, 0xa1c: 0x05cd, 0xa1d: 0x1099, + 0xa1e: 0x10b1, 0xa1f: 0x10c9, 0xa20: 0x10e1, 0xa21: 0x10f9, 0xa22: 0x0f41, 0xa23: 0x0269, + 0xa24: 0x0fb9, 0xa25: 0x1089, 0xa26: 0x1099, 0xa27: 0x10b1, 0xa28: 0x1111, 0xa29: 0x10e1, + 0xa2a: 0x10f9, 0xa2b: 0x0008, 0xa2c: 0x0008, 0xa2d: 0x0008, 0xa2e: 0x0008, 0xa2f: 0x0008, + 0xa30: 0x0008, 0xa31: 0x0008, 0xa32: 0x0008, 0xa33: 0x0008, 0xa34: 0x0008, 0xa35: 0x0008, + 0xa36: 0x0008, 0xa37: 0x0008, 0xa38: 0x1129, 0xa39: 0x0008, 0xa3a: 0x0008, 0xa3b: 0x0008, + 0xa3c: 0x0008, 0xa3d: 0x0008, 0xa3e: 0x0008, 0xa3f: 0x0008, + // Block 0x29, offset 0xa40 + 0xa40: 0x0008, 0xa41: 0x0008, 0xa42: 0x0008, 0xa43: 0x0008, 0xa44: 0x0008, 0xa45: 0x0008, + 0xa46: 0x0008, 0xa47: 0x0008, 0xa48: 0x0008, 0xa49: 0x0008, 0xa4a: 0x0008, 0xa4b: 0x0008, + 0xa4c: 0x0008, 0xa4d: 0x0008, 0xa4e: 0x0008, 0xa4f: 0x0008, 0xa50: 0x0008, 0xa51: 0x0008, + 0xa52: 0x0008, 0xa53: 0x0008, 0xa54: 0x0008, 0xa55: 0x0008, 0xa56: 0x0008, 0xa57: 0x0008, + 0xa58: 0x0008, 0xa59: 0x0008, 0xa5a: 0x0008, 0xa5b: 0x1141, 0xa5c: 0x1159, 0xa5d: 0x1169, + 0xa5e: 0x1181, 0xa5f: 0x1029, 0xa60: 0x1199, 0xa61: 0x11a9, 0xa62: 0x11c1, 0xa63: 0x11d9, + 0xa64: 0x11f1, 0xa65: 0x1209, 0xa66: 0x1221, 0xa67: 0x05e5, 0xa68: 0x1239, 0xa69: 0x1251, + 0xa6a: 0xe17d, 0xa6b: 0x1269, 0xa6c: 0x1281, 0xa6d: 0x1299, 0xa6e: 0x12b1, 0xa6f: 0x12c9, + 0xa70: 0x12e1, 0xa71: 0x12f9, 0xa72: 0x1311, 0xa73: 0x1329, 0xa74: 0x1341, 0xa75: 0x1359, + 0xa76: 0x1371, 0xa77: 0x1389, 0xa78: 0x05fd, 0xa79: 0x13a1, 0xa7a: 0x13b9, 0xa7b: 0x13d1, + 0xa7c: 0x13e1, 0xa7d: 0x13f9, 0xa7e: 0x1411, 0xa7f: 0x1429, + // Block 0x2a, offset 0xa80 + 0xa80: 0xe00d, 0xa81: 0x0008, 0xa82: 0xe00d, 0xa83: 0x0008, 0xa84: 0xe00d, 0xa85: 0x0008, + 0xa86: 0xe00d, 0xa87: 0x0008, 0xa88: 0xe00d, 0xa89: 0x0008, 0xa8a: 0xe00d, 0xa8b: 0x0008, + 0xa8c: 0xe00d, 0xa8d: 0x0008, 0xa8e: 0xe00d, 0xa8f: 0x0008, 0xa90: 0xe00d, 0xa91: 0x0008, + 0xa92: 0xe00d, 0xa93: 0x0008, 0xa94: 0xe00d, 0xa95: 0x0008, 0xa96: 0xe00d, 0xa97: 0x0008, + 0xa98: 0xe00d, 0xa99: 0x0008, 0xa9a: 0xe00d, 0xa9b: 0x0008, 0xa9c: 0xe00d, 0xa9d: 0x0008, + 0xa9e: 0xe00d, 0xa9f: 0x0008, 0xaa0: 0xe00d, 0xaa1: 0x0008, 0xaa2: 0xe00d, 0xaa3: 0x0008, + 0xaa4: 0xe00d, 0xaa5: 0x0008, 0xaa6: 0xe00d, 0xaa7: 0x0008, 0xaa8: 0xe00d, 0xaa9: 0x0008, + 0xaaa: 0xe00d, 0xaab: 0x0008, 0xaac: 0xe00d, 0xaad: 0x0008, 0xaae: 0xe00d, 0xaaf: 0x0008, + 0xab0: 0xe00d, 0xab1: 0x0008, 0xab2: 0xe00d, 0xab3: 0x0008, 0xab4: 0xe00d, 0xab5: 0x0008, + 0xab6: 0xe00d, 0xab7: 0x0008, 0xab8: 0xe00d, 0xab9: 0x0008, 0xaba: 0xe00d, 0xabb: 0x0008, + 0xabc: 0xe00d, 0xabd: 0x0008, 0xabe: 0xe00d, 0xabf: 0x0008, + // Block 0x2b, offset 0xac0 + 0xac0: 0xe00d, 0xac1: 0x0008, 0xac2: 0xe00d, 0xac3: 0x0008, 0xac4: 0xe00d, 0xac5: 0x0008, + 0xac6: 0xe00d, 0xac7: 0x0008, 0xac8: 0xe00d, 0xac9: 0x0008, 0xaca: 0xe00d, 0xacb: 0x0008, + 0xacc: 0xe00d, 0xacd: 0x0008, 0xace: 0xe00d, 0xacf: 0x0008, 0xad0: 0xe00d, 0xad1: 0x0008, + 0xad2: 0xe00d, 0xad3: 0x0008, 0xad4: 0xe00d, 0xad5: 0x0008, 0xad6: 0x0008, 0xad7: 0x0008, + 0xad8: 0x0008, 0xad9: 0x0008, 0xada: 0x0615, 0xadb: 0x0635, 0xadc: 0x0008, 0xadd: 0x0008, + 0xade: 0x1441, 0xadf: 0x0008, 0xae0: 0xe00d, 0xae1: 0x0008, 0xae2: 0xe00d, 0xae3: 0x0008, + 0xae4: 0xe00d, 0xae5: 0x0008, 0xae6: 0xe00d, 0xae7: 0x0008, 0xae8: 0xe00d, 0xae9: 0x0008, + 0xaea: 0xe00d, 0xaeb: 0x0008, 0xaec: 0xe00d, 0xaed: 0x0008, 0xaee: 0xe00d, 0xaef: 0x0008, + 0xaf0: 0xe00d, 0xaf1: 0x0008, 0xaf2: 0xe00d, 0xaf3: 0x0008, 0xaf4: 0xe00d, 0xaf5: 0x0008, + 0xaf6: 0xe00d, 0xaf7: 0x0008, 0xaf8: 0xe00d, 0xaf9: 0x0008, 0xafa: 0xe00d, 0xafb: 0x0008, + 0xafc: 0xe00d, 0xafd: 0x0008, 0xafe: 0xe00d, 0xaff: 0x0008, + // Block 0x2c, offset 0xb00 + 0xb00: 0x0008, 0xb01: 0x0008, 0xb02: 0x0008, 0xb03: 0x0008, 0xb04: 0x0008, 0xb05: 0x0008, + 0xb06: 0x0040, 0xb07: 0x0040, 0xb08: 0xe045, 0xb09: 0xe045, 0xb0a: 0xe045, 0xb0b: 0xe045, + 0xb0c: 0xe045, 0xb0d: 0xe045, 0xb0e: 0x0040, 0xb0f: 0x0040, 0xb10: 0x0008, 0xb11: 0x0008, + 0xb12: 0x0008, 0xb13: 0x0008, 0xb14: 0x0008, 0xb15: 0x0008, 0xb16: 0x0008, 0xb17: 0x0008, + 0xb18: 0x0040, 0xb19: 0xe045, 0xb1a: 0x0040, 0xb1b: 0xe045, 0xb1c: 0x0040, 0xb1d: 0xe045, + 0xb1e: 0x0040, 0xb1f: 0xe045, 0xb20: 0x0008, 0xb21: 0x0008, 0xb22: 0x0008, 0xb23: 0x0008, + 0xb24: 0x0008, 0xb25: 0x0008, 0xb26: 0x0008, 0xb27: 0x0008, 0xb28: 0xe045, 0xb29: 0xe045, + 0xb2a: 0xe045, 0xb2b: 0xe045, 0xb2c: 0xe045, 0xb2d: 0xe045, 0xb2e: 0xe045, 0xb2f: 0xe045, + 0xb30: 0x0008, 0xb31: 0x1459, 0xb32: 0x0008, 0xb33: 0x1471, 0xb34: 0x0008, 0xb35: 0x1489, + 0xb36: 0x0008, 0xb37: 0x14a1, 0xb38: 0x0008, 0xb39: 0x14b9, 0xb3a: 0x0008, 0xb3b: 0x14d1, + 0xb3c: 0x0008, 0xb3d: 0x14e9, 0xb3e: 0x0040, 0xb3f: 0x0040, + // Block 0x2d, offset 0xb40 + 0xb40: 0x1501, 0xb41: 0x1531, 0xb42: 0x1561, 0xb43: 0x1591, 0xb44: 0x15c1, 0xb45: 0x15f1, + 0xb46: 0x1621, 0xb47: 0x1651, 0xb48: 0x1501, 0xb49: 0x1531, 0xb4a: 0x1561, 0xb4b: 0x1591, + 0xb4c: 0x15c1, 0xb4d: 0x15f1, 0xb4e: 0x1621, 0xb4f: 0x1651, 0xb50: 0x1681, 0xb51: 0x16b1, + 0xb52: 0x16e1, 0xb53: 0x1711, 0xb54: 0x1741, 0xb55: 0x1771, 0xb56: 0x17a1, 0xb57: 0x17d1, + 0xb58: 0x1681, 0xb59: 0x16b1, 0xb5a: 0x16e1, 0xb5b: 0x1711, 0xb5c: 0x1741, 0xb5d: 0x1771, + 0xb5e: 0x17a1, 0xb5f: 0x17d1, 0xb60: 0x1801, 0xb61: 0x1831, 0xb62: 0x1861, 0xb63: 0x1891, + 0xb64: 0x18c1, 0xb65: 0x18f1, 0xb66: 0x1921, 0xb67: 0x1951, 0xb68: 0x1801, 0xb69: 0x1831, + 0xb6a: 0x1861, 0xb6b: 0x1891, 0xb6c: 0x18c1, 0xb6d: 0x18f1, 0xb6e: 0x1921, 0xb6f: 0x1951, + 0xb70: 0x0008, 0xb71: 0x0008, 0xb72: 0x1981, 0xb73: 0x19b1, 0xb74: 0x19d9, 0xb75: 0x0040, + 0xb76: 0x0008, 0xb77: 0x1a01, 0xb78: 0xe045, 0xb79: 0xe045, 0xb7a: 0x064d, 0xb7b: 0x1459, + 0xb7c: 0x19b1, 0xb7d: 0x0666, 0xb7e: 0x1a31, 0xb7f: 0x0686, + // Block 0x2e, offset 0xb80 + 0xb80: 0x06a6, 0xb81: 0x1a4a, 0xb82: 0x1a79, 0xb83: 0x1aa9, 0xb84: 0x1ad1, 0xb85: 0x0040, + 0xb86: 0x0008, 0xb87: 0x1af9, 0xb88: 0x06c5, 0xb89: 0x1471, 0xb8a: 0x06dd, 0xb8b: 0x1489, + 0xb8c: 0x1aa9, 0xb8d: 0x1b2a, 0xb8e: 0x1b5a, 0xb8f: 0x1b8a, 0xb90: 0x0008, 0xb91: 0x0008, + 0xb92: 0x0008, 0xb93: 0x1bb9, 0xb94: 0x0040, 0xb95: 0x0040, 0xb96: 0x0008, 0xb97: 0x0008, + 0xb98: 0xe045, 0xb99: 0xe045, 0xb9a: 0x06f5, 0xb9b: 0x14a1, 0xb9c: 0x0040, 0xb9d: 0x1bd2, + 0xb9e: 0x1c02, 0xb9f: 0x1c32, 0xba0: 0x0008, 0xba1: 0x0008, 0xba2: 0x0008, 0xba3: 0x1c61, + 0xba4: 0x0008, 0xba5: 0x0008, 0xba6: 0x0008, 0xba7: 0x0008, 0xba8: 0xe045, 0xba9: 0xe045, + 0xbaa: 0x070d, 0xbab: 0x14d1, 0xbac: 0xe04d, 0xbad: 0x1c7a, 0xbae: 0x03d2, 0xbaf: 0x1caa, + 0xbb0: 0x0040, 0xbb1: 0x0040, 0xbb2: 0x1cb9, 0xbb3: 0x1ce9, 0xbb4: 0x1d11, 0xbb5: 0x0040, + 0xbb6: 0x0008, 0xbb7: 0x1d39, 0xbb8: 0x0725, 0xbb9: 0x14b9, 0xbba: 0x0515, 0xbbb: 0x14e9, + 0xbbc: 0x1ce9, 0xbbd: 0x073e, 0xbbe: 0x075e, 0xbbf: 0x0040, + // Block 0x2f, offset 0xbc0 + 0xbc0: 0x000a, 0xbc1: 0x000a, 0xbc2: 0x000a, 0xbc3: 0x000a, 0xbc4: 0x000a, 0xbc5: 0x000a, + 0xbc6: 0x000a, 0xbc7: 0x000a, 0xbc8: 0x000a, 0xbc9: 0x000a, 0xbca: 0x000a, 0xbcb: 0x03c0, + 0xbcc: 0x0003, 0xbcd: 0x0003, 0xbce: 0x0340, 0xbcf: 0x0b40, 0xbd0: 0x0018, 0xbd1: 0xe00d, + 0xbd2: 0x0018, 0xbd3: 0x0018, 0xbd4: 0x0018, 0xbd5: 0x0018, 0xbd6: 0x0018, 0xbd7: 0x077e, + 0xbd8: 0x0018, 0xbd9: 0x0018, 0xbda: 0x0018, 0xbdb: 0x0018, 0xbdc: 0x0018, 0xbdd: 0x0018, + 0xbde: 0x0018, 0xbdf: 0x0018, 0xbe0: 0x0018, 0xbe1: 0x0018, 0xbe2: 0x0018, 0xbe3: 0x0018, + 0xbe4: 0x0040, 0xbe5: 0x0040, 0xbe6: 0x0040, 0xbe7: 0x0018, 0xbe8: 0x0040, 0xbe9: 0x0040, + 0xbea: 0x0340, 0xbeb: 0x0340, 0xbec: 0x0340, 0xbed: 0x0340, 0xbee: 0x0340, 0xbef: 0x000a, + 0xbf0: 0x0018, 0xbf1: 0x0018, 0xbf2: 0x0018, 0xbf3: 0x1d69, 0xbf4: 0x1da1, 0xbf5: 0x0018, + 0xbf6: 0x1df1, 0xbf7: 0x1e29, 0xbf8: 0x0018, 0xbf9: 0x0018, 0xbfa: 0x0018, 0xbfb: 0x0018, + 0xbfc: 0x1e7a, 0xbfd: 0x0018, 0xbfe: 0x079e, 0xbff: 0x0018, + // Block 0x30, offset 0xc00 + 0xc00: 0x0018, 0xc01: 0x0018, 0xc02: 0x0018, 0xc03: 0x0018, 0xc04: 0x0018, 0xc05: 0x0018, + 0xc06: 0x0018, 0xc07: 0x1e92, 0xc08: 0x1eaa, 0xc09: 0x1ec2, 0xc0a: 0x0018, 0xc0b: 0x0018, + 0xc0c: 0x0018, 0xc0d: 0x0018, 0xc0e: 0x0018, 0xc0f: 0x0018, 0xc10: 0x0018, 0xc11: 0x0018, + 0xc12: 0x0018, 0xc13: 0x0018, 0xc14: 0x0018, 0xc15: 0x0018, 0xc16: 0x0018, 0xc17: 0x1ed9, + 0xc18: 0x0018, 0xc19: 0x0018, 0xc1a: 0x0018, 0xc1b: 0x0018, 0xc1c: 0x0018, 0xc1d: 0x0018, + 0xc1e: 0x0018, 0xc1f: 0x000a, 0xc20: 0x03c0, 0xc21: 0x0340, 0xc22: 0x0340, 0xc23: 0x0340, + 0xc24: 0x03c0, 0xc25: 0x0040, 0xc26: 0x0040, 0xc27: 0x0040, 0xc28: 0x0040, 0xc29: 0x0040, + 0xc2a: 0x0340, 0xc2b: 0x0340, 0xc2c: 0x0340, 0xc2d: 0x0340, 0xc2e: 0x0340, 0xc2f: 0x0340, + 0xc30: 0x1f41, 0xc31: 0x0f41, 0xc32: 0x0040, 0xc33: 0x0040, 0xc34: 0x1f51, 0xc35: 0x1f61, + 0xc36: 0x1f71, 0xc37: 0x1f81, 0xc38: 0x1f91, 0xc39: 0x1fa1, 0xc3a: 0x1fb2, 0xc3b: 0x07bd, + 0xc3c: 0x1fc2, 0xc3d: 0x1fd2, 0xc3e: 0x1fe2, 0xc3f: 0x0f71, + // Block 0x31, offset 0xc40 + 0xc40: 0x1f41, 0xc41: 0x00c9, 0xc42: 0x0069, 0xc43: 0x0079, 0xc44: 0x1f51, 0xc45: 0x1f61, + 0xc46: 0x1f71, 0xc47: 0x1f81, 0xc48: 0x1f91, 0xc49: 0x1fa1, 0xc4a: 0x1fb2, 0xc4b: 0x07d5, + 0xc4c: 0x1fc2, 0xc4d: 0x1fd2, 0xc4e: 0x1fe2, 0xc4f: 0x0040, 0xc50: 0x0039, 0xc51: 0x0f09, + 0xc52: 0x00d9, 0xc53: 0x0369, 0xc54: 0x0ff9, 0xc55: 0x0249, 0xc56: 0x0f51, 0xc57: 0x0359, + 0xc58: 0x0f61, 0xc59: 0x0f71, 0xc5a: 0x0f99, 0xc5b: 0x01d9, 0xc5c: 0x0fa9, 0xc5d: 0x0040, + 0xc5e: 0x0040, 0xc5f: 0x0040, 0xc60: 0x0018, 0xc61: 0x0018, 0xc62: 0x0018, 0xc63: 0x0018, + 0xc64: 0x0018, 0xc65: 0x0018, 0xc66: 0x0018, 0xc67: 0x0018, 0xc68: 0x1ff1, 0xc69: 0x0018, + 0xc6a: 0x0018, 0xc6b: 0x0018, 0xc6c: 0x0018, 0xc6d: 0x0018, 0xc6e: 0x0018, 0xc6f: 0x0018, + 0xc70: 0x0018, 0xc71: 0x0018, 0xc72: 0x0018, 0xc73: 0x0018, 0xc74: 0x0018, 0xc75: 0x0018, + 0xc76: 0x0018, 0xc77: 0x0018, 0xc78: 0x0018, 0xc79: 0x0018, 0xc7a: 0x0018, 0xc7b: 0x0018, + 0xc7c: 0x0018, 0xc7d: 0x0018, 0xc7e: 0x0018, 0xc7f: 0x0018, + // Block 0x32, offset 0xc80 + 0xc80: 0x07ee, 0xc81: 0x080e, 0xc82: 0x1159, 0xc83: 0x082d, 0xc84: 0x0018, 0xc85: 0x084e, + 0xc86: 0x086e, 0xc87: 0x1011, 0xc88: 0x0018, 0xc89: 0x088d, 0xc8a: 0x0f31, 0xc8b: 0x0249, + 0xc8c: 0x0249, 0xc8d: 0x0249, 0xc8e: 0x0249, 0xc8f: 0x2009, 0xc90: 0x0f41, 0xc91: 0x0f41, + 0xc92: 0x0359, 0xc93: 0x0359, 0xc94: 0x0018, 0xc95: 0x0f71, 0xc96: 0x2021, 0xc97: 0x0018, + 0xc98: 0x0018, 0xc99: 0x0f99, 0xc9a: 0x2039, 0xc9b: 0x0269, 0xc9c: 0x0269, 0xc9d: 0x0269, + 0xc9e: 0x0018, 0xc9f: 0x0018, 0xca0: 0x2049, 0xca1: 0x08ad, 0xca2: 0x2061, 0xca3: 0x0018, + 0xca4: 0x13d1, 0xca5: 0x0018, 0xca6: 0x2079, 0xca7: 0x0018, 0xca8: 0x13d1, 0xca9: 0x0018, + 0xcaa: 0x0f51, 0xcab: 0x2091, 0xcac: 0x0ee9, 0xcad: 0x1159, 0xcae: 0x0018, 0xcaf: 0x0f09, + 0xcb0: 0x0f09, 0xcb1: 0x1199, 0xcb2: 0x0040, 0xcb3: 0x0f61, 0xcb4: 0x00d9, 0xcb5: 0x20a9, + 0xcb6: 0x20c1, 0xcb7: 0x20d9, 0xcb8: 0x20f1, 0xcb9: 0x0f41, 0xcba: 0x0018, 0xcbb: 0x08cd, + 0xcbc: 0x2109, 0xcbd: 0x10b1, 0xcbe: 0x10b1, 0xcbf: 0x2109, + // Block 0x33, offset 0xcc0 + 0xcc0: 0x08ed, 0xcc1: 0x0018, 0xcc2: 0x0018, 0xcc3: 0x0018, 0xcc4: 0x0018, 0xcc5: 0x0ef9, + 0xcc6: 0x0ef9, 0xcc7: 0x0f09, 0xcc8: 0x0f41, 0xcc9: 0x0259, 0xcca: 0x0018, 0xccb: 0x0018, + 0xccc: 0x0018, 0xccd: 0x0018, 0xcce: 0x0008, 0xccf: 0x0018, 0xcd0: 0x2121, 0xcd1: 0x2151, + 0xcd2: 0x2181, 0xcd3: 0x21b9, 0xcd4: 0x21e9, 0xcd5: 0x2219, 0xcd6: 0x2249, 0xcd7: 0x2279, + 0xcd8: 0x22a9, 0xcd9: 0x22d9, 0xcda: 0x2309, 0xcdb: 0x2339, 0xcdc: 0x2369, 0xcdd: 0x2399, + 0xcde: 0x23c9, 0xcdf: 0x23f9, 0xce0: 0x0f41, 0xce1: 0x2421, 0xce2: 0x0905, 0xce3: 0x2439, + 0xce4: 0x1089, 0xce5: 0x2451, 0xce6: 0x0925, 0xce7: 0x2469, 0xce8: 0x2491, 0xce9: 0x0369, + 0xcea: 0x24a9, 0xceb: 0x0945, 0xcec: 0x0359, 0xced: 0x1159, 0xcee: 0x0ef9, 0xcef: 0x0f61, + 0xcf0: 0x0f41, 0xcf1: 0x2421, 0xcf2: 0x0965, 0xcf3: 0x2439, 0xcf4: 0x1089, 0xcf5: 0x2451, + 0xcf6: 0x0985, 0xcf7: 0x2469, 0xcf8: 0x2491, 0xcf9: 0x0369, 0xcfa: 0x24a9, 0xcfb: 0x09a5, + 0xcfc: 0x0359, 0xcfd: 0x1159, 0xcfe: 0x0ef9, 0xcff: 0x0f61, + // Block 0x34, offset 0xd00 + 0xd00: 0x0018, 0xd01: 0x0018, 0xd02: 0x0018, 0xd03: 0x0018, 0xd04: 0x0018, 0xd05: 0x0018, + 0xd06: 0x0018, 0xd07: 0x0018, 0xd08: 0x0018, 0xd09: 0x0018, 0xd0a: 0x0018, 0xd0b: 0x0040, + 0xd0c: 0x0040, 0xd0d: 0x0040, 0xd0e: 0x0040, 0xd0f: 0x0040, 0xd10: 0x0040, 0xd11: 0x0040, + 0xd12: 0x0040, 0xd13: 0x0040, 0xd14: 0x0040, 0xd15: 0x0040, 0xd16: 0x0040, 0xd17: 0x0040, + 0xd18: 0x0040, 0xd19: 0x0040, 0xd1a: 0x0040, 0xd1b: 0x0040, 0xd1c: 0x0040, 0xd1d: 0x0040, + 0xd1e: 0x0040, 0xd1f: 0x0040, 0xd20: 0x00c9, 0xd21: 0x0069, 0xd22: 0x0079, 0xd23: 0x1f51, + 0xd24: 0x1f61, 0xd25: 0x1f71, 0xd26: 0x1f81, 0xd27: 0x1f91, 0xd28: 0x1fa1, 0xd29: 0x2601, + 0xd2a: 0x2619, 0xd2b: 0x2631, 0xd2c: 0x2649, 0xd2d: 0x2661, 0xd2e: 0x2679, 0xd2f: 0x2691, + 0xd30: 0x26a9, 0xd31: 0x26c1, 0xd32: 0x26d9, 0xd33: 0x26f1, 0xd34: 0x0a06, 0xd35: 0x0a26, + 0xd36: 0x0a46, 0xd37: 0x0a66, 0xd38: 0x0a86, 0xd39: 0x0aa6, 0xd3a: 0x0ac6, 0xd3b: 0x0ae6, + 0xd3c: 0x0b06, 0xd3d: 0x270a, 0xd3e: 0x2732, 0xd3f: 0x275a, + // Block 0x35, offset 0xd40 + 0xd40: 0x2782, 0xd41: 0x27aa, 0xd42: 0x27d2, 0xd43: 0x27fa, 0xd44: 0x2822, 0xd45: 0x284a, + 0xd46: 0x2872, 0xd47: 0x289a, 0xd48: 0x0040, 0xd49: 0x0040, 0xd4a: 0x0040, 0xd4b: 0x0040, + 0xd4c: 0x0040, 0xd4d: 0x0040, 0xd4e: 0x0040, 0xd4f: 0x0040, 0xd50: 0x0040, 0xd51: 0x0040, + 0xd52: 0x0040, 0xd53: 0x0040, 0xd54: 0x0040, 0xd55: 0x0040, 0xd56: 0x0040, 0xd57: 0x0040, + 0xd58: 0x0040, 0xd59: 0x0040, 0xd5a: 0x0040, 0xd5b: 0x0040, 0xd5c: 0x0b26, 0xd5d: 0x0b46, + 0xd5e: 0x0b66, 0xd5f: 0x0b86, 0xd60: 0x0ba6, 0xd61: 0x0bc6, 0xd62: 0x0be6, 0xd63: 0x0c06, + 0xd64: 0x0c26, 0xd65: 0x0c46, 0xd66: 0x0c66, 0xd67: 0x0c86, 0xd68: 0x0ca6, 0xd69: 0x0cc6, + 0xd6a: 0x0ce6, 0xd6b: 0x0d06, 0xd6c: 0x0d26, 0xd6d: 0x0d46, 0xd6e: 0x0d66, 0xd6f: 0x0d86, + 0xd70: 0x0da6, 0xd71: 0x0dc6, 0xd72: 0x0de6, 0xd73: 0x0e06, 0xd74: 0x0e26, 0xd75: 0x0e46, + 0xd76: 0x0039, 0xd77: 0x0ee9, 0xd78: 0x1159, 0xd79: 0x0ef9, 0xd7a: 0x0f09, 0xd7b: 0x1199, + 0xd7c: 0x0f31, 0xd7d: 0x0249, 0xd7e: 0x0f41, 0xd7f: 0x0259, + // Block 0x36, offset 0xd80 + 0xd80: 0x0f51, 0xd81: 0x0359, 0xd82: 0x0f61, 0xd83: 0x0f71, 0xd84: 0x00d9, 0xd85: 0x0f99, + 0xd86: 0x2039, 0xd87: 0x0269, 0xd88: 0x01d9, 0xd89: 0x0fa9, 0xd8a: 0x0fb9, 0xd8b: 0x1089, + 0xd8c: 0x0279, 0xd8d: 0x0369, 0xd8e: 0x0289, 0xd8f: 0x13d1, 0xd90: 0x0039, 0xd91: 0x0ee9, + 0xd92: 0x1159, 0xd93: 0x0ef9, 0xd94: 0x0f09, 0xd95: 0x1199, 0xd96: 0x0f31, 0xd97: 0x0249, + 0xd98: 0x0f41, 0xd99: 0x0259, 0xd9a: 0x0f51, 0xd9b: 0x0359, 0xd9c: 0x0f61, 0xd9d: 0x0f71, + 0xd9e: 0x00d9, 0xd9f: 0x0f99, 0xda0: 0x2039, 0xda1: 0x0269, 0xda2: 0x01d9, 0xda3: 0x0fa9, + 0xda4: 0x0fb9, 0xda5: 0x1089, 0xda6: 0x0279, 0xda7: 0x0369, 0xda8: 0x0289, 0xda9: 0x13d1, + 0xdaa: 0x1f41, 0xdab: 0x0018, 0xdac: 0x0018, 0xdad: 0x0018, 0xdae: 0x0018, 0xdaf: 0x0018, + 0xdb0: 0x0018, 0xdb1: 0x0018, 0xdb2: 0x0018, 0xdb3: 0x0018, 0xdb4: 0x0018, 0xdb5: 0x0018, + 0xdb6: 0x0018, 0xdb7: 0x0018, 0xdb8: 0x0018, 0xdb9: 0x0018, 0xdba: 0x0018, 0xdbb: 0x0018, + 0xdbc: 0x0018, 0xdbd: 0x0018, 0xdbe: 0x0018, 0xdbf: 0x0018, + // Block 0x37, offset 0xdc0 + 0xdc0: 0x0008, 0xdc1: 0x0008, 0xdc2: 0x0008, 0xdc3: 0x0008, 0xdc4: 0x0008, 0xdc5: 0x0008, + 0xdc6: 0x0008, 0xdc7: 0x0008, 0xdc8: 0x0008, 0xdc9: 0x0008, 0xdca: 0x0008, 0xdcb: 0x0008, + 0xdcc: 0x0008, 0xdcd: 0x0008, 0xdce: 0x0008, 0xdcf: 0x0008, 0xdd0: 0x0008, 0xdd1: 0x0008, + 0xdd2: 0x0008, 0xdd3: 0x0008, 0xdd4: 0x0008, 0xdd5: 0x0008, 0xdd6: 0x0008, 0xdd7: 0x0008, + 0xdd8: 0x0008, 0xdd9: 0x0008, 0xdda: 0x0008, 0xddb: 0x0008, 0xddc: 0x0008, 0xddd: 0x0008, + 0xdde: 0x0008, 0xddf: 0x0040, 0xde0: 0xe00d, 0xde1: 0x0008, 0xde2: 0x2971, 0xde3: 0x0ebd, + 0xde4: 0x2989, 0xde5: 0x0008, 0xde6: 0x0008, 0xde7: 0xe07d, 0xde8: 0x0008, 0xde9: 0xe01d, + 0xdea: 0x0008, 0xdeb: 0xe03d, 0xdec: 0x0008, 0xded: 0x0fe1, 0xdee: 0x1281, 0xdef: 0x0fc9, + 0xdf0: 0x1141, 0xdf1: 0x0008, 0xdf2: 0xe00d, 0xdf3: 0x0008, 0xdf4: 0x0008, 0xdf5: 0xe01d, + 0xdf6: 0x0008, 0xdf7: 0x0008, 0xdf8: 0x0008, 0xdf9: 0x0008, 0xdfa: 0x0008, 0xdfb: 0x0008, + 0xdfc: 0x0259, 0xdfd: 0x1089, 0xdfe: 0x29a1, 0xdff: 0x29b9, + // Block 0x38, offset 0xe00 + 0xe00: 0xe00d, 0xe01: 0x0008, 0xe02: 0xe00d, 0xe03: 0x0008, 0xe04: 0xe00d, 0xe05: 0x0008, + 0xe06: 0xe00d, 0xe07: 0x0008, 0xe08: 0xe00d, 0xe09: 0x0008, 0xe0a: 0xe00d, 0xe0b: 0x0008, + 0xe0c: 0xe00d, 0xe0d: 0x0008, 0xe0e: 0xe00d, 0xe0f: 0x0008, 0xe10: 0xe00d, 0xe11: 0x0008, + 0xe12: 0xe00d, 0xe13: 0x0008, 0xe14: 0xe00d, 0xe15: 0x0008, 0xe16: 0xe00d, 0xe17: 0x0008, + 0xe18: 0xe00d, 0xe19: 0x0008, 0xe1a: 0xe00d, 0xe1b: 0x0008, 0xe1c: 0xe00d, 0xe1d: 0x0008, + 0xe1e: 0xe00d, 0xe1f: 0x0008, 0xe20: 0xe00d, 0xe21: 0x0008, 0xe22: 0xe00d, 0xe23: 0x0008, + 0xe24: 0x0008, 0xe25: 0x0018, 0xe26: 0x0018, 0xe27: 0x0018, 0xe28: 0x0018, 0xe29: 0x0018, + 0xe2a: 0x0018, 0xe2b: 0xe03d, 0xe2c: 0x0008, 0xe2d: 0xe01d, 0xe2e: 0x0008, 0xe2f: 0x3308, + 0xe30: 0x3308, 0xe31: 0x3308, 0xe32: 0xe00d, 0xe33: 0x0008, 0xe34: 0x0040, 0xe35: 0x0040, + 0xe36: 0x0040, 0xe37: 0x0040, 0xe38: 0x0040, 0xe39: 0x0018, 0xe3a: 0x0018, 0xe3b: 0x0018, + 0xe3c: 0x0018, 0xe3d: 0x0018, 0xe3e: 0x0018, 0xe3f: 0x0018, + // Block 0x39, offset 0xe40 + 0xe40: 0x26fd, 0xe41: 0x271d, 0xe42: 0x273d, 0xe43: 0x275d, 0xe44: 0x277d, 0xe45: 0x279d, + 0xe46: 0x27bd, 0xe47: 0x27dd, 0xe48: 0x27fd, 0xe49: 0x281d, 0xe4a: 0x283d, 0xe4b: 0x285d, + 0xe4c: 0x287d, 0xe4d: 0x289d, 0xe4e: 0x28bd, 0xe4f: 0x28dd, 0xe50: 0x28fd, 0xe51: 0x291d, + 0xe52: 0x293d, 0xe53: 0x295d, 0xe54: 0x297d, 0xe55: 0x299d, 0xe56: 0x0040, 0xe57: 0x0040, + 0xe58: 0x0040, 0xe59: 0x0040, 0xe5a: 0x0040, 0xe5b: 0x0040, 0xe5c: 0x0040, 0xe5d: 0x0040, + 0xe5e: 0x0040, 0xe5f: 0x0040, 0xe60: 0x0040, 0xe61: 0x0040, 0xe62: 0x0040, 0xe63: 0x0040, + 0xe64: 0x0040, 0xe65: 0x0040, 0xe66: 0x0040, 0xe67: 0x0040, 0xe68: 0x0040, 0xe69: 0x0040, + 0xe6a: 0x0040, 0xe6b: 0x0040, 0xe6c: 0x0040, 0xe6d: 0x0040, 0xe6e: 0x0040, 0xe6f: 0x0040, + 0xe70: 0x0040, 0xe71: 0x0040, 0xe72: 0x0040, 0xe73: 0x0040, 0xe74: 0x0040, 0xe75: 0x0040, + 0xe76: 0x0040, 0xe77: 0x0040, 0xe78: 0x0040, 0xe79: 0x0040, 0xe7a: 0x0040, 0xe7b: 0x0040, + 0xe7c: 0x0040, 0xe7d: 0x0040, 0xe7e: 0x0040, 0xe7f: 0x0040, + // Block 0x3a, offset 0xe80 + 0xe80: 0x000a, 0xe81: 0x0018, 0xe82: 0x29d1, 0xe83: 0x0018, 0xe84: 0x0018, 0xe85: 0x0008, + 0xe86: 0x0008, 0xe87: 0x0008, 0xe88: 0x0018, 0xe89: 0x0018, 0xe8a: 0x0018, 0xe8b: 0x0018, + 0xe8c: 0x0018, 0xe8d: 0x0018, 0xe8e: 0x0018, 0xe8f: 0x0018, 0xe90: 0x0018, 0xe91: 0x0018, + 0xe92: 0x0018, 0xe93: 0x0018, 0xe94: 0x0018, 0xe95: 0x0018, 0xe96: 0x0018, 0xe97: 0x0018, + 0xe98: 0x0018, 0xe99: 0x0018, 0xe9a: 0x0018, 0xe9b: 0x0018, 0xe9c: 0x0018, 0xe9d: 0x0018, + 0xe9e: 0x0018, 0xe9f: 0x0018, 0xea0: 0x0018, 0xea1: 0x0018, 0xea2: 0x0018, 0xea3: 0x0018, + 0xea4: 0x0018, 0xea5: 0x0018, 0xea6: 0x0018, 0xea7: 0x0018, 0xea8: 0x0018, 0xea9: 0x0018, + 0xeaa: 0x3308, 0xeab: 0x3308, 0xeac: 0x3308, 0xead: 0x3308, 0xeae: 0x3018, 0xeaf: 0x3018, + 0xeb0: 0x0018, 0xeb1: 0x0018, 0xeb2: 0x0018, 0xeb3: 0x0018, 0xeb4: 0x0018, 0xeb5: 0x0018, + 0xeb6: 0xe125, 0xeb7: 0x0018, 0xeb8: 0x29bd, 0xeb9: 0x29dd, 0xeba: 0x29fd, 0xebb: 0x0018, + 0xebc: 0x0008, 0xebd: 0x0018, 0xebe: 0x0018, 0xebf: 0x0018, + // Block 0x3b, offset 0xec0 + 0xec0: 0x2b3d, 0xec1: 0x2b5d, 0xec2: 0x2b7d, 0xec3: 0x2b9d, 0xec4: 0x2bbd, 0xec5: 0x2bdd, + 0xec6: 0x2bdd, 0xec7: 0x2bdd, 0xec8: 0x2bfd, 0xec9: 0x2bfd, 0xeca: 0x2bfd, 0xecb: 0x2bfd, + 0xecc: 0x2c1d, 0xecd: 0x2c1d, 0xece: 0x2c1d, 0xecf: 0x2c3d, 0xed0: 0x2c5d, 0xed1: 0x2c5d, + 0xed2: 0x2a7d, 0xed3: 0x2a7d, 0xed4: 0x2c5d, 0xed5: 0x2c5d, 0xed6: 0x2c7d, 0xed7: 0x2c7d, + 0xed8: 0x2c5d, 0xed9: 0x2c5d, 0xeda: 0x2a7d, 0xedb: 0x2a7d, 0xedc: 0x2c5d, 0xedd: 0x2c5d, + 0xede: 0x2c3d, 0xedf: 0x2c3d, 0xee0: 0x2c9d, 0xee1: 0x2c9d, 0xee2: 0x2cbd, 0xee3: 0x2cbd, + 0xee4: 0x0040, 0xee5: 0x2cdd, 0xee6: 0x2cfd, 0xee7: 0x2d1d, 0xee8: 0x2d1d, 0xee9: 0x2d3d, + 0xeea: 0x2d5d, 0xeeb: 0x2d7d, 0xeec: 0x2d9d, 0xeed: 0x2dbd, 0xeee: 0x2ddd, 0xeef: 0x2dfd, + 0xef0: 0x2e1d, 0xef1: 0x2e3d, 0xef2: 0x2e3d, 0xef3: 0x2e5d, 0xef4: 0x2e7d, 0xef5: 0x2e7d, + 0xef6: 0x2e9d, 0xef7: 0x2ebd, 0xef8: 0x2e5d, 0xef9: 0x2edd, 0xefa: 0x2efd, 0xefb: 0x2edd, + 0xefc: 0x2e5d, 0xefd: 0x2f1d, 0xefe: 0x2f3d, 0xeff: 0x2f5d, + // Block 0x3c, offset 0xf00 + 0xf00: 0x2f7d, 0xf01: 0x2f9d, 0xf02: 0x2cfd, 0xf03: 0x2cdd, 0xf04: 0x2fbd, 0xf05: 0x2fdd, + 0xf06: 0x2ffd, 0xf07: 0x301d, 0xf08: 0x303d, 0xf09: 0x305d, 0xf0a: 0x307d, 0xf0b: 0x309d, + 0xf0c: 0x30bd, 0xf0d: 0x30dd, 0xf0e: 0x30fd, 0xf0f: 0x0040, 0xf10: 0x0018, 0xf11: 0x0018, + 0xf12: 0x311d, 0xf13: 0x313d, 0xf14: 0x315d, 0xf15: 0x317d, 0xf16: 0x319d, 0xf17: 0x31bd, + 0xf18: 0x31dd, 0xf19: 0x31fd, 0xf1a: 0x321d, 0xf1b: 0x323d, 0xf1c: 0x315d, 0xf1d: 0x325d, + 0xf1e: 0x327d, 0xf1f: 0x329d, 0xf20: 0x0008, 0xf21: 0x0008, 0xf22: 0x0008, 0xf23: 0x0008, + 0xf24: 0x0008, 0xf25: 0x0008, 0xf26: 0x0008, 0xf27: 0x0008, 0xf28: 0x0008, 0xf29: 0x0008, + 0xf2a: 0x0008, 0xf2b: 0x0008, 0xf2c: 0x0008, 0xf2d: 0x0008, 0xf2e: 0x0008, 0xf2f: 0x0008, + 0xf30: 0x0008, 0xf31: 0x0008, 0xf32: 0x0008, 0xf33: 0x0008, 0xf34: 0x0008, 0xf35: 0x0008, + 0xf36: 0x0008, 0xf37: 0x0008, 0xf38: 0x0008, 0xf39: 0x0008, 0xf3a: 0x0008, 0xf3b: 0x0040, + 0xf3c: 0x0040, 0xf3d: 0x0040, 0xf3e: 0x0040, 0xf3f: 0x0040, + // Block 0x3d, offset 0xf40 + 0xf40: 0x36a2, 0xf41: 0x36d2, 0xf42: 0x3702, 0xf43: 0x3732, 0xf44: 0x32bd, 0xf45: 0x32dd, + 0xf46: 0x32fd, 0xf47: 0x331d, 0xf48: 0x0018, 0xf49: 0x0018, 0xf4a: 0x0018, 0xf4b: 0x0018, + 0xf4c: 0x0018, 0xf4d: 0x0018, 0xf4e: 0x0018, 0xf4f: 0x0018, 0xf50: 0x333d, 0xf51: 0x3761, + 0xf52: 0x3779, 0xf53: 0x3791, 0xf54: 0x37a9, 0xf55: 0x37c1, 0xf56: 0x37d9, 0xf57: 0x37f1, + 0xf58: 0x3809, 0xf59: 0x3821, 0xf5a: 0x3839, 0xf5b: 0x3851, 0xf5c: 0x3869, 0xf5d: 0x3881, + 0xf5e: 0x3899, 0xf5f: 0x38b1, 0xf60: 0x335d, 0xf61: 0x337d, 0xf62: 0x339d, 0xf63: 0x33bd, + 0xf64: 0x33dd, 0xf65: 0x33dd, 0xf66: 0x33fd, 0xf67: 0x341d, 0xf68: 0x343d, 0xf69: 0x345d, + 0xf6a: 0x347d, 0xf6b: 0x349d, 0xf6c: 0x34bd, 0xf6d: 0x34dd, 0xf6e: 0x34fd, 0xf6f: 0x351d, + 0xf70: 0x353d, 0xf71: 0x355d, 0xf72: 0x357d, 0xf73: 0x359d, 0xf74: 0x35bd, 0xf75: 0x35dd, + 0xf76: 0x35fd, 0xf77: 0x361d, 0xf78: 0x363d, 0xf79: 0x365d, 0xf7a: 0x367d, 0xf7b: 0x369d, + 0xf7c: 0x38c9, 0xf7d: 0x3901, 0xf7e: 0x36bd, 0xf7f: 0x0018, + // Block 0x3e, offset 0xf80 + 0xf80: 0x36dd, 0xf81: 0x36fd, 0xf82: 0x371d, 0xf83: 0x373d, 0xf84: 0x375d, 0xf85: 0x377d, + 0xf86: 0x379d, 0xf87: 0x37bd, 0xf88: 0x37dd, 0xf89: 0x37fd, 0xf8a: 0x381d, 0xf8b: 0x383d, + 0xf8c: 0x385d, 0xf8d: 0x387d, 0xf8e: 0x389d, 0xf8f: 0x38bd, 0xf90: 0x38dd, 0xf91: 0x38fd, + 0xf92: 0x391d, 0xf93: 0x393d, 0xf94: 0x395d, 0xf95: 0x397d, 0xf96: 0x399d, 0xf97: 0x39bd, + 0xf98: 0x39dd, 0xf99: 0x39fd, 0xf9a: 0x3a1d, 0xf9b: 0x3a3d, 0xf9c: 0x3a5d, 0xf9d: 0x3a7d, + 0xf9e: 0x3a9d, 0xf9f: 0x3abd, 0xfa0: 0x3add, 0xfa1: 0x3afd, 0xfa2: 0x3b1d, 0xfa3: 0x3b3d, + 0xfa4: 0x3b5d, 0xfa5: 0x3b7d, 0xfa6: 0x127d, 0xfa7: 0x3b9d, 0xfa8: 0x3bbd, 0xfa9: 0x3bdd, + 0xfaa: 0x3bfd, 0xfab: 0x3c1d, 0xfac: 0x3c3d, 0xfad: 0x3c5d, 0xfae: 0x239d, 0xfaf: 0x3c7d, + 0xfb0: 0x3c9d, 0xfb1: 0x3939, 0xfb2: 0x3951, 0xfb3: 0x3969, 0xfb4: 0x3981, 0xfb5: 0x3999, + 0xfb6: 0x39b1, 0xfb7: 0x39c9, 0xfb8: 0x39e1, 0xfb9: 0x39f9, 0xfba: 0x3a11, 0xfbb: 0x3a29, + 0xfbc: 0x3a41, 0xfbd: 0x3a59, 0xfbe: 0x3a71, 0xfbf: 0x3a89, + // Block 0x3f, offset 0xfc0 + 0xfc0: 0x3aa1, 0xfc1: 0x3ac9, 0xfc2: 0x3af1, 0xfc3: 0x3b19, 0xfc4: 0x3b41, 0xfc5: 0x3b69, + 0xfc6: 0x3b91, 0xfc7: 0x3bb9, 0xfc8: 0x3be1, 0xfc9: 0x3c09, 0xfca: 0x3c39, 0xfcb: 0x3c69, + 0xfcc: 0x3c99, 0xfcd: 0x3cbd, 0xfce: 0x3cb1, 0xfcf: 0x3cdd, 0xfd0: 0x3cfd, 0xfd1: 0x3d15, + 0xfd2: 0x3d2d, 0xfd3: 0x3d45, 0xfd4: 0x3d5d, 0xfd5: 0x3d5d, 0xfd6: 0x3d45, 0xfd7: 0x3d75, + 0xfd8: 0x07bd, 0xfd9: 0x3d8d, 0xfda: 0x3da5, 0xfdb: 0x3dbd, 0xfdc: 0x3dd5, 0xfdd: 0x3ded, + 0xfde: 0x3e05, 0xfdf: 0x3e1d, 0xfe0: 0x3e35, 0xfe1: 0x3e4d, 0xfe2: 0x3e65, 0xfe3: 0x3e7d, + 0xfe4: 0x3e95, 0xfe5: 0x3e95, 0xfe6: 0x3ead, 0xfe7: 0x3ead, 0xfe8: 0x3ec5, 0xfe9: 0x3ec5, + 0xfea: 0x3edd, 0xfeb: 0x3ef5, 0xfec: 0x3f0d, 0xfed: 0x3f25, 0xfee: 0x3f3d, 0xfef: 0x3f3d, + 0xff0: 0x3f55, 0xff1: 0x3f55, 0xff2: 0x3f55, 0xff3: 0x3f6d, 0xff4: 0x3f85, 0xff5: 0x3f9d, + 0xff6: 0x3fb5, 0xff7: 0x3f9d, 0xff8: 0x3fcd, 0xff9: 0x3fe5, 0xffa: 0x3f6d, 0xffb: 0x3ffd, + 0xffc: 0x4015, 0xffd: 0x4015, 0xffe: 0x4015, 0xfff: 0x0040, + // Block 0x40, offset 0x1000 + 0x1000: 0x3cc9, 0x1001: 0x3d31, 0x1002: 0x3d99, 0x1003: 0x3e01, 0x1004: 0x3e51, 0x1005: 0x3eb9, + 0x1006: 0x3f09, 0x1007: 0x3f59, 0x1008: 0x3fd9, 0x1009: 0x4041, 0x100a: 0x4091, 0x100b: 0x40e1, + 0x100c: 0x4131, 0x100d: 0x4199, 0x100e: 0x4201, 0x100f: 0x4251, 0x1010: 0x42a1, 0x1011: 0x42d9, + 0x1012: 0x4329, 0x1013: 0x4391, 0x1014: 0x43f9, 0x1015: 0x4431, 0x1016: 0x44b1, 0x1017: 0x4549, + 0x1018: 0x45c9, 0x1019: 0x4619, 0x101a: 0x4699, 0x101b: 0x4719, 0x101c: 0x4781, 0x101d: 0x47d1, + 0x101e: 0x4821, 0x101f: 0x4871, 0x1020: 0x48d9, 0x1021: 0x4959, 0x1022: 0x49c1, 0x1023: 0x4a11, + 0x1024: 0x4a61, 0x1025: 0x4ab1, 0x1026: 0x4ae9, 0x1027: 0x4b21, 0x1028: 0x4b59, 0x1029: 0x4b91, + 0x102a: 0x4be1, 0x102b: 0x4c31, 0x102c: 0x4cb1, 0x102d: 0x4d01, 0x102e: 0x4d69, 0x102f: 0x4de9, + 0x1030: 0x4e39, 0x1031: 0x4e71, 0x1032: 0x4ea9, 0x1033: 0x4f29, 0x1034: 0x4f91, 0x1035: 0x5011, + 0x1036: 0x5061, 0x1037: 0x50e1, 0x1038: 0x5119, 0x1039: 0x5169, 0x103a: 0x51b9, 0x103b: 0x5209, + 0x103c: 0x5259, 0x103d: 0x52a9, 0x103e: 0x5311, 0x103f: 0x5361, + // Block 0x41, offset 0x1040 + 0x1040: 0x5399, 0x1041: 0x53e9, 0x1042: 0x5439, 0x1043: 0x5489, 0x1044: 0x54f1, 0x1045: 0x5541, + 0x1046: 0x5591, 0x1047: 0x55e1, 0x1048: 0x5661, 0x1049: 0x56c9, 0x104a: 0x5701, 0x104b: 0x5781, + 0x104c: 0x57b9, 0x104d: 0x5821, 0x104e: 0x5889, 0x104f: 0x58d9, 0x1050: 0x5929, 0x1051: 0x5979, + 0x1052: 0x59e1, 0x1053: 0x5a19, 0x1054: 0x5a69, 0x1055: 0x5ad1, 0x1056: 0x5b09, 0x1057: 0x5b89, + 0x1058: 0x5bd9, 0x1059: 0x5c01, 0x105a: 0x5c29, 0x105b: 0x5c51, 0x105c: 0x5c79, 0x105d: 0x5ca1, + 0x105e: 0x5cc9, 0x105f: 0x5cf1, 0x1060: 0x5d19, 0x1061: 0x5d41, 0x1062: 0x5d69, 0x1063: 0x5d99, + 0x1064: 0x5dc9, 0x1065: 0x5df9, 0x1066: 0x5e29, 0x1067: 0x5e59, 0x1068: 0x5e89, 0x1069: 0x5eb9, + 0x106a: 0x5ee9, 0x106b: 0x5f19, 0x106c: 0x5f49, 0x106d: 0x5f79, 0x106e: 0x5fa9, 0x106f: 0x5fd9, + 0x1070: 0x6009, 0x1071: 0x402d, 0x1072: 0x6039, 0x1073: 0x6051, 0x1074: 0x404d, 0x1075: 0x6069, + 0x1076: 0x6081, 0x1077: 0x6099, 0x1078: 0x406d, 0x1079: 0x406d, 0x107a: 0x60b1, 0x107b: 0x60c9, + 0x107c: 0x6101, 0x107d: 0x6139, 0x107e: 0x6171, 0x107f: 0x61a9, + // Block 0x42, offset 0x1080 + 0x1080: 0x6211, 0x1081: 0x6229, 0x1082: 0x408d, 0x1083: 0x6241, 0x1084: 0x6259, 0x1085: 0x6271, + 0x1086: 0x6289, 0x1087: 0x62a1, 0x1088: 0x40ad, 0x1089: 0x62b9, 0x108a: 0x62e1, 0x108b: 0x62f9, + 0x108c: 0x40cd, 0x108d: 0x40cd, 0x108e: 0x6311, 0x108f: 0x6329, 0x1090: 0x6341, 0x1091: 0x40ed, + 0x1092: 0x410d, 0x1093: 0x412d, 0x1094: 0x414d, 0x1095: 0x416d, 0x1096: 0x6359, 0x1097: 0x6371, + 0x1098: 0x6389, 0x1099: 0x63a1, 0x109a: 0x63b9, 0x109b: 0x418d, 0x109c: 0x63d1, 0x109d: 0x63e9, + 0x109e: 0x6401, 0x109f: 0x41ad, 0x10a0: 0x41cd, 0x10a1: 0x6419, 0x10a2: 0x41ed, 0x10a3: 0x420d, + 0x10a4: 0x422d, 0x10a5: 0x6431, 0x10a6: 0x424d, 0x10a7: 0x6449, 0x10a8: 0x6479, 0x10a9: 0x6211, + 0x10aa: 0x426d, 0x10ab: 0x428d, 0x10ac: 0x42ad, 0x10ad: 0x42cd, 0x10ae: 0x64b1, 0x10af: 0x64f1, + 0x10b0: 0x6539, 0x10b1: 0x6551, 0x10b2: 0x42ed, 0x10b3: 0x6569, 0x10b4: 0x6581, 0x10b5: 0x6599, + 0x10b6: 0x430d, 0x10b7: 0x65b1, 0x10b8: 0x65c9, 0x10b9: 0x65b1, 0x10ba: 0x65e1, 0x10bb: 0x65f9, + 0x10bc: 0x432d, 0x10bd: 0x6611, 0x10be: 0x6629, 0x10bf: 0x6611, + // Block 0x43, offset 0x10c0 + 0x10c0: 0x434d, 0x10c1: 0x436d, 0x10c2: 0x0040, 0x10c3: 0x6641, 0x10c4: 0x6659, 0x10c5: 0x6671, + 0x10c6: 0x6689, 0x10c7: 0x0040, 0x10c8: 0x66c1, 0x10c9: 0x66d9, 0x10ca: 0x66f1, 0x10cb: 0x6709, + 0x10cc: 0x6721, 0x10cd: 0x6739, 0x10ce: 0x6401, 0x10cf: 0x6751, 0x10d0: 0x6769, 0x10d1: 0x6781, + 0x10d2: 0x438d, 0x10d3: 0x6799, 0x10d4: 0x6289, 0x10d5: 0x43ad, 0x10d6: 0x43cd, 0x10d7: 0x67b1, + 0x10d8: 0x0040, 0x10d9: 0x43ed, 0x10da: 0x67c9, 0x10db: 0x67e1, 0x10dc: 0x67f9, 0x10dd: 0x6811, + 0x10de: 0x6829, 0x10df: 0x6859, 0x10e0: 0x6889, 0x10e1: 0x68b1, 0x10e2: 0x68d9, 0x10e3: 0x6901, + 0x10e4: 0x6929, 0x10e5: 0x6951, 0x10e6: 0x6979, 0x10e7: 0x69a1, 0x10e8: 0x69c9, 0x10e9: 0x69f1, + 0x10ea: 0x6a21, 0x10eb: 0x6a51, 0x10ec: 0x6a81, 0x10ed: 0x6ab1, 0x10ee: 0x6ae1, 0x10ef: 0x6b11, + 0x10f0: 0x6b41, 0x10f1: 0x6b71, 0x10f2: 0x6ba1, 0x10f3: 0x6bd1, 0x10f4: 0x6c01, 0x10f5: 0x6c31, + 0x10f6: 0x6c61, 0x10f7: 0x6c91, 0x10f8: 0x6cc1, 0x10f9: 0x6cf1, 0x10fa: 0x6d21, 0x10fb: 0x6d51, + 0x10fc: 0x6d81, 0x10fd: 0x6db1, 0x10fe: 0x6de1, 0x10ff: 0x440d, + // Block 0x44, offset 0x1100 + 0x1100: 0xe00d, 0x1101: 0x0008, 0x1102: 0xe00d, 0x1103: 0x0008, 0x1104: 0xe00d, 0x1105: 0x0008, + 0x1106: 0xe00d, 0x1107: 0x0008, 0x1108: 0xe00d, 0x1109: 0x0008, 0x110a: 0xe00d, 0x110b: 0x0008, + 0x110c: 0xe00d, 0x110d: 0x0008, 0x110e: 0xe00d, 0x110f: 0x0008, 0x1110: 0xe00d, 0x1111: 0x0008, + 0x1112: 0xe00d, 0x1113: 0x0008, 0x1114: 0xe00d, 0x1115: 0x0008, 0x1116: 0xe00d, 0x1117: 0x0008, + 0x1118: 0xe00d, 0x1119: 0x0008, 0x111a: 0xe00d, 0x111b: 0x0008, 0x111c: 0xe00d, 0x111d: 0x0008, + 0x111e: 0xe00d, 0x111f: 0x0008, 0x1120: 0xe00d, 0x1121: 0x0008, 0x1122: 0xe00d, 0x1123: 0x0008, + 0x1124: 0xe00d, 0x1125: 0x0008, 0x1126: 0xe00d, 0x1127: 0x0008, 0x1128: 0xe00d, 0x1129: 0x0008, + 0x112a: 0xe00d, 0x112b: 0x0008, 0x112c: 0xe00d, 0x112d: 0x0008, 0x112e: 0x0008, 0x112f: 0x3308, + 0x1130: 0x3318, 0x1131: 0x3318, 0x1132: 0x3318, 0x1133: 0x0018, 0x1134: 0x3308, 0x1135: 0x3308, + 0x1136: 0x3308, 0x1137: 0x3308, 0x1138: 0x3308, 0x1139: 0x3308, 0x113a: 0x3308, 0x113b: 0x3308, + 0x113c: 0x3308, 0x113d: 0x3308, 0x113e: 0x0018, 0x113f: 0x0008, + // Block 0x45, offset 0x1140 + 0x1140: 0xe00d, 0x1141: 0x0008, 0x1142: 0xe00d, 0x1143: 0x0008, 0x1144: 0xe00d, 0x1145: 0x0008, + 0x1146: 0xe00d, 0x1147: 0x0008, 0x1148: 0xe00d, 0x1149: 0x0008, 0x114a: 0xe00d, 0x114b: 0x0008, + 0x114c: 0xe00d, 0x114d: 0x0008, 0x114e: 0xe00d, 0x114f: 0x0008, 0x1150: 0xe00d, 0x1151: 0x0008, + 0x1152: 0xe00d, 0x1153: 0x0008, 0x1154: 0xe00d, 0x1155: 0x0008, 0x1156: 0xe00d, 0x1157: 0x0008, + 0x1158: 0xe00d, 0x1159: 0x0008, 0x115a: 0xe00d, 0x115b: 0x0008, 0x115c: 0x0ea1, 0x115d: 0x6e11, + 0x115e: 0x3308, 0x115f: 0x3308, 0x1160: 0x0008, 0x1161: 0x0008, 0x1162: 0x0008, 0x1163: 0x0008, + 0x1164: 0x0008, 0x1165: 0x0008, 0x1166: 0x0008, 0x1167: 0x0008, 0x1168: 0x0008, 0x1169: 0x0008, + 0x116a: 0x0008, 0x116b: 0x0008, 0x116c: 0x0008, 0x116d: 0x0008, 0x116e: 0x0008, 0x116f: 0x0008, + 0x1170: 0x0008, 0x1171: 0x0008, 0x1172: 0x0008, 0x1173: 0x0008, 0x1174: 0x0008, 0x1175: 0x0008, + 0x1176: 0x0008, 0x1177: 0x0008, 0x1178: 0x0008, 0x1179: 0x0008, 0x117a: 0x0008, 0x117b: 0x0008, + 0x117c: 0x0008, 0x117d: 0x0008, 0x117e: 0x0008, 0x117f: 0x0008, + // Block 0x46, offset 0x1180 + 0x1180: 0x0018, 0x1181: 0x0018, 0x1182: 0x0018, 0x1183: 0x0018, 0x1184: 0x0018, 0x1185: 0x0018, + 0x1186: 0x0018, 0x1187: 0x0018, 0x1188: 0x0018, 0x1189: 0x0018, 0x118a: 0x0018, 0x118b: 0x0018, + 0x118c: 0x0018, 0x118d: 0x0018, 0x118e: 0x0018, 0x118f: 0x0018, 0x1190: 0x0018, 0x1191: 0x0018, + 0x1192: 0x0018, 0x1193: 0x0018, 0x1194: 0x0018, 0x1195: 0x0018, 0x1196: 0x0018, 0x1197: 0x0008, + 0x1198: 0x0008, 0x1199: 0x0008, 0x119a: 0x0008, 0x119b: 0x0008, 0x119c: 0x0008, 0x119d: 0x0008, + 0x119e: 0x0008, 0x119f: 0x0008, 0x11a0: 0x0018, 0x11a1: 0x0018, 0x11a2: 0xe00d, 0x11a3: 0x0008, + 0x11a4: 0xe00d, 0x11a5: 0x0008, 0x11a6: 0xe00d, 0x11a7: 0x0008, 0x11a8: 0xe00d, 0x11a9: 0x0008, + 0x11aa: 0xe00d, 0x11ab: 0x0008, 0x11ac: 0xe00d, 0x11ad: 0x0008, 0x11ae: 0xe00d, 0x11af: 0x0008, + 0x11b0: 0x0008, 0x11b1: 0x0008, 0x11b2: 0xe00d, 0x11b3: 0x0008, 0x11b4: 0xe00d, 0x11b5: 0x0008, + 0x11b6: 0xe00d, 0x11b7: 0x0008, 0x11b8: 0xe00d, 0x11b9: 0x0008, 0x11ba: 0xe00d, 0x11bb: 0x0008, + 0x11bc: 0xe00d, 0x11bd: 0x0008, 0x11be: 0xe00d, 0x11bf: 0x0008, + // Block 0x47, offset 0x11c0 + 0x11c0: 0xe00d, 0x11c1: 0x0008, 0x11c2: 0xe00d, 0x11c3: 0x0008, 0x11c4: 0xe00d, 0x11c5: 0x0008, + 0x11c6: 0xe00d, 0x11c7: 0x0008, 0x11c8: 0xe00d, 0x11c9: 0x0008, 0x11ca: 0xe00d, 0x11cb: 0x0008, + 0x11cc: 0xe00d, 0x11cd: 0x0008, 0x11ce: 0xe00d, 0x11cf: 0x0008, 0x11d0: 0xe00d, 0x11d1: 0x0008, + 0x11d2: 0xe00d, 0x11d3: 0x0008, 0x11d4: 0xe00d, 0x11d5: 0x0008, 0x11d6: 0xe00d, 0x11d7: 0x0008, + 0x11d8: 0xe00d, 0x11d9: 0x0008, 0x11da: 0xe00d, 0x11db: 0x0008, 0x11dc: 0xe00d, 0x11dd: 0x0008, + 0x11de: 0xe00d, 0x11df: 0x0008, 0x11e0: 0xe00d, 0x11e1: 0x0008, 0x11e2: 0xe00d, 0x11e3: 0x0008, + 0x11e4: 0xe00d, 0x11e5: 0x0008, 0x11e6: 0xe00d, 0x11e7: 0x0008, 0x11e8: 0xe00d, 0x11e9: 0x0008, + 0x11ea: 0xe00d, 0x11eb: 0x0008, 0x11ec: 0xe00d, 0x11ed: 0x0008, 0x11ee: 0xe00d, 0x11ef: 0x0008, + 0x11f0: 0xe0fd, 0x11f1: 0x0008, 0x11f2: 0x0008, 0x11f3: 0x0008, 0x11f4: 0x0008, 0x11f5: 0x0008, + 0x11f6: 0x0008, 0x11f7: 0x0008, 0x11f8: 0x0008, 0x11f9: 0xe01d, 0x11fa: 0x0008, 0x11fb: 0xe03d, + 0x11fc: 0x0008, 0x11fd: 0x442d, 0x11fe: 0xe00d, 0x11ff: 0x0008, + // Block 0x48, offset 0x1200 + 0x1200: 0xe00d, 0x1201: 0x0008, 0x1202: 0xe00d, 0x1203: 0x0008, 0x1204: 0xe00d, 0x1205: 0x0008, + 0x1206: 0xe00d, 0x1207: 0x0008, 0x1208: 0x0008, 0x1209: 0x0018, 0x120a: 0x0018, 0x120b: 0xe03d, + 0x120c: 0x0008, 0x120d: 0x11d9, 0x120e: 0x0008, 0x120f: 0x0008, 0x1210: 0xe00d, 0x1211: 0x0008, + 0x1212: 0xe00d, 0x1213: 0x0008, 0x1214: 0x0008, 0x1215: 0x0008, 0x1216: 0xe00d, 0x1217: 0x0008, + 0x1218: 0xe00d, 0x1219: 0x0008, 0x121a: 0xe00d, 0x121b: 0x0008, 0x121c: 0xe00d, 0x121d: 0x0008, + 0x121e: 0xe00d, 0x121f: 0x0008, 0x1220: 0xe00d, 0x1221: 0x0008, 0x1222: 0xe00d, 0x1223: 0x0008, + 0x1224: 0xe00d, 0x1225: 0x0008, 0x1226: 0xe00d, 0x1227: 0x0008, 0x1228: 0xe00d, 0x1229: 0x0008, + 0x122a: 0x6e29, 0x122b: 0x1029, 0x122c: 0x11c1, 0x122d: 0x6e41, 0x122e: 0x1221, 0x122f: 0x0040, + 0x1230: 0x6e59, 0x1231: 0x6e71, 0x1232: 0x1239, 0x1233: 0x444d, 0x1234: 0xe00d, 0x1235: 0x0008, + 0x1236: 0xe00d, 0x1237: 0x0008, 0x1238: 0x0040, 0x1239: 0x0040, 0x123a: 0x0040, 0x123b: 0x0040, + 0x123c: 0x0040, 0x123d: 0x0040, 0x123e: 0x0040, 0x123f: 0x0040, + // Block 0x49, offset 0x1240 + 0x1240: 0x64d5, 0x1241: 0x64f5, 0x1242: 0x6515, 0x1243: 0x6535, 0x1244: 0x6555, 0x1245: 0x6575, + 0x1246: 0x6595, 0x1247: 0x65b5, 0x1248: 0x65d5, 0x1249: 0x65f5, 0x124a: 0x6615, 0x124b: 0x6635, + 0x124c: 0x6655, 0x124d: 0x6675, 0x124e: 0x0008, 0x124f: 0x0008, 0x1250: 0x6695, 0x1251: 0x0008, + 0x1252: 0x66b5, 0x1253: 0x0008, 0x1254: 0x0008, 0x1255: 0x66d5, 0x1256: 0x66f5, 0x1257: 0x6715, + 0x1258: 0x6735, 0x1259: 0x6755, 0x125a: 0x6775, 0x125b: 0x6795, 0x125c: 0x67b5, 0x125d: 0x67d5, + 0x125e: 0x67f5, 0x125f: 0x0008, 0x1260: 0x6815, 0x1261: 0x0008, 0x1262: 0x6835, 0x1263: 0x0008, + 0x1264: 0x0008, 0x1265: 0x6855, 0x1266: 0x6875, 0x1267: 0x0008, 0x1268: 0x0008, 0x1269: 0x0008, + 0x126a: 0x6895, 0x126b: 0x68b5, 0x126c: 0x68d5, 0x126d: 0x68f5, 0x126e: 0x6915, 0x126f: 0x6935, + 0x1270: 0x6955, 0x1271: 0x6975, 0x1272: 0x6995, 0x1273: 0x69b5, 0x1274: 0x69d5, 0x1275: 0x69f5, + 0x1276: 0x6a15, 0x1277: 0x6a35, 0x1278: 0x6a55, 0x1279: 0x6a75, 0x127a: 0x6a95, 0x127b: 0x6ab5, + 0x127c: 0x6ad5, 0x127d: 0x6af5, 0x127e: 0x6b15, 0x127f: 0x6b35, + // Block 0x4a, offset 0x1280 + 0x1280: 0x7a95, 0x1281: 0x7ab5, 0x1282: 0x7ad5, 0x1283: 0x7af5, 0x1284: 0x7b15, 0x1285: 0x7b35, + 0x1286: 0x7b55, 0x1287: 0x7b75, 0x1288: 0x7b95, 0x1289: 0x7bb5, 0x128a: 0x7bd5, 0x128b: 0x7bf5, + 0x128c: 0x7c15, 0x128d: 0x7c35, 0x128e: 0x7c55, 0x128f: 0x6ec9, 0x1290: 0x6ef1, 0x1291: 0x6f19, + 0x1292: 0x7c75, 0x1293: 0x7c95, 0x1294: 0x7cb5, 0x1295: 0x6f41, 0x1296: 0x6f69, 0x1297: 0x6f91, + 0x1298: 0x7cd5, 0x1299: 0x7cf5, 0x129a: 0x0040, 0x129b: 0x0040, 0x129c: 0x0040, 0x129d: 0x0040, + 0x129e: 0x0040, 0x129f: 0x0040, 0x12a0: 0x0040, 0x12a1: 0x0040, 0x12a2: 0x0040, 0x12a3: 0x0040, + 0x12a4: 0x0040, 0x12a5: 0x0040, 0x12a6: 0x0040, 0x12a7: 0x0040, 0x12a8: 0x0040, 0x12a9: 0x0040, + 0x12aa: 0x0040, 0x12ab: 0x0040, 0x12ac: 0x0040, 0x12ad: 0x0040, 0x12ae: 0x0040, 0x12af: 0x0040, + 0x12b0: 0x0040, 0x12b1: 0x0040, 0x12b2: 0x0040, 0x12b3: 0x0040, 0x12b4: 0x0040, 0x12b5: 0x0040, + 0x12b6: 0x0040, 0x12b7: 0x0040, 0x12b8: 0x0040, 0x12b9: 0x0040, 0x12ba: 0x0040, 0x12bb: 0x0040, + 0x12bc: 0x0040, 0x12bd: 0x0040, 0x12be: 0x0040, 0x12bf: 0x0040, + // Block 0x4b, offset 0x12c0 + 0x12c0: 0x6fb9, 0x12c1: 0x6fd1, 0x12c2: 0x6fe9, 0x12c3: 0x7d15, 0x12c4: 0x7d35, 0x12c5: 0x7001, + 0x12c6: 0x7001, 0x12c7: 0x0040, 0x12c8: 0x0040, 0x12c9: 0x0040, 0x12ca: 0x0040, 0x12cb: 0x0040, + 0x12cc: 0x0040, 0x12cd: 0x0040, 0x12ce: 0x0040, 0x12cf: 0x0040, 0x12d0: 0x0040, 0x12d1: 0x0040, + 0x12d2: 0x0040, 0x12d3: 0x7019, 0x12d4: 0x7041, 0x12d5: 0x7069, 0x12d6: 0x7091, 0x12d7: 0x70b9, + 0x12d8: 0x0040, 0x12d9: 0x0040, 0x12da: 0x0040, 0x12db: 0x0040, 0x12dc: 0x0040, 0x12dd: 0x70e1, + 0x12de: 0x3308, 0x12df: 0x7109, 0x12e0: 0x7131, 0x12e1: 0x20a9, 0x12e2: 0x20f1, 0x12e3: 0x7149, + 0x12e4: 0x7161, 0x12e5: 0x7179, 0x12e6: 0x7191, 0x12e7: 0x71a9, 0x12e8: 0x71c1, 0x12e9: 0x1fb2, + 0x12ea: 0x71d9, 0x12eb: 0x7201, 0x12ec: 0x7229, 0x12ed: 0x7261, 0x12ee: 0x7299, 0x12ef: 0x72c1, + 0x12f0: 0x72e9, 0x12f1: 0x7311, 0x12f2: 0x7339, 0x12f3: 0x7361, 0x12f4: 0x7389, 0x12f5: 0x73b1, + 0x12f6: 0x73d9, 0x12f7: 0x0040, 0x12f8: 0x7401, 0x12f9: 0x7429, 0x12fa: 0x7451, 0x12fb: 0x7479, + 0x12fc: 0x74a1, 0x12fd: 0x0040, 0x12fe: 0x74c9, 0x12ff: 0x0040, + // Block 0x4c, offset 0x1300 + 0x1300: 0x74f1, 0x1301: 0x7519, 0x1302: 0x0040, 0x1303: 0x7541, 0x1304: 0x7569, 0x1305: 0x0040, + 0x1306: 0x7591, 0x1307: 0x75b9, 0x1308: 0x75e1, 0x1309: 0x7609, 0x130a: 0x7631, 0x130b: 0x7659, + 0x130c: 0x7681, 0x130d: 0x76a9, 0x130e: 0x76d1, 0x130f: 0x76f9, 0x1310: 0x7721, 0x1311: 0x7721, + 0x1312: 0x7739, 0x1313: 0x7739, 0x1314: 0x7739, 0x1315: 0x7739, 0x1316: 0x7751, 0x1317: 0x7751, + 0x1318: 0x7751, 0x1319: 0x7751, 0x131a: 0x7769, 0x131b: 0x7769, 0x131c: 0x7769, 0x131d: 0x7769, + 0x131e: 0x7781, 0x131f: 0x7781, 0x1320: 0x7781, 0x1321: 0x7781, 0x1322: 0x7799, 0x1323: 0x7799, + 0x1324: 0x7799, 0x1325: 0x7799, 0x1326: 0x77b1, 0x1327: 0x77b1, 0x1328: 0x77b1, 0x1329: 0x77b1, + 0x132a: 0x77c9, 0x132b: 0x77c9, 0x132c: 0x77c9, 0x132d: 0x77c9, 0x132e: 0x77e1, 0x132f: 0x77e1, + 0x1330: 0x77e1, 0x1331: 0x77e1, 0x1332: 0x77f9, 0x1333: 0x77f9, 0x1334: 0x77f9, 0x1335: 0x77f9, + 0x1336: 0x7811, 0x1337: 0x7811, 0x1338: 0x7811, 0x1339: 0x7811, 0x133a: 0x7829, 0x133b: 0x7829, + 0x133c: 0x7829, 0x133d: 0x7829, 0x133e: 0x7841, 0x133f: 0x7841, + // Block 0x4d, offset 0x1340 + 0x1340: 0x7841, 0x1341: 0x7841, 0x1342: 0x7859, 0x1343: 0x7859, 0x1344: 0x7871, 0x1345: 0x7871, + 0x1346: 0x7889, 0x1347: 0x7889, 0x1348: 0x78a1, 0x1349: 0x78a1, 0x134a: 0x78b9, 0x134b: 0x78b9, + 0x134c: 0x78d1, 0x134d: 0x78d1, 0x134e: 0x78e9, 0x134f: 0x78e9, 0x1350: 0x78e9, 0x1351: 0x78e9, + 0x1352: 0x7901, 0x1353: 0x7901, 0x1354: 0x7901, 0x1355: 0x7901, 0x1356: 0x7919, 0x1357: 0x7919, + 0x1358: 0x7919, 0x1359: 0x7919, 0x135a: 0x7931, 0x135b: 0x7931, 0x135c: 0x7931, 0x135d: 0x7931, + 0x135e: 0x7949, 0x135f: 0x7949, 0x1360: 0x7961, 0x1361: 0x7961, 0x1362: 0x7961, 0x1363: 0x7961, + 0x1364: 0x7979, 0x1365: 0x7979, 0x1366: 0x7991, 0x1367: 0x7991, 0x1368: 0x7991, 0x1369: 0x7991, + 0x136a: 0x79a9, 0x136b: 0x79a9, 0x136c: 0x79a9, 0x136d: 0x79a9, 0x136e: 0x79c1, 0x136f: 0x79c1, + 0x1370: 0x79d9, 0x1371: 0x79d9, 0x1372: 0x0818, 0x1373: 0x0818, 0x1374: 0x0818, 0x1375: 0x0818, + 0x1376: 0x0818, 0x1377: 0x0818, 0x1378: 0x0818, 0x1379: 0x0818, 0x137a: 0x0818, 0x137b: 0x0818, + 0x137c: 0x0818, 0x137d: 0x0818, 0x137e: 0x0818, 0x137f: 0x0818, + // Block 0x4e, offset 0x1380 + 0x1380: 0x0818, 0x1381: 0x0818, 0x1382: 0x0040, 0x1383: 0x0040, 0x1384: 0x0040, 0x1385: 0x0040, + 0x1386: 0x0040, 0x1387: 0x0040, 0x1388: 0x0040, 0x1389: 0x0040, 0x138a: 0x0040, 0x138b: 0x0040, + 0x138c: 0x0040, 0x138d: 0x0040, 0x138e: 0x0040, 0x138f: 0x0040, 0x1390: 0x0040, 0x1391: 0x0040, + 0x1392: 0x0040, 0x1393: 0x79f1, 0x1394: 0x79f1, 0x1395: 0x79f1, 0x1396: 0x79f1, 0x1397: 0x7a09, + 0x1398: 0x7a09, 0x1399: 0x7a21, 0x139a: 0x7a21, 0x139b: 0x7a39, 0x139c: 0x7a39, 0x139d: 0x0479, + 0x139e: 0x7a51, 0x139f: 0x7a51, 0x13a0: 0x7a69, 0x13a1: 0x7a69, 0x13a2: 0x7a81, 0x13a3: 0x7a81, + 0x13a4: 0x7a99, 0x13a5: 0x7a99, 0x13a6: 0x7a99, 0x13a7: 0x7a99, 0x13a8: 0x7ab1, 0x13a9: 0x7ab1, + 0x13aa: 0x7ac9, 0x13ab: 0x7ac9, 0x13ac: 0x7af1, 0x13ad: 0x7af1, 0x13ae: 0x7b19, 0x13af: 0x7b19, + 0x13b0: 0x7b41, 0x13b1: 0x7b41, 0x13b2: 0x7b69, 0x13b3: 0x7b69, 0x13b4: 0x7b91, 0x13b5: 0x7b91, + 0x13b6: 0x7bb9, 0x13b7: 0x7bb9, 0x13b8: 0x7bb9, 0x13b9: 0x7be1, 0x13ba: 0x7be1, 0x13bb: 0x7be1, + 0x13bc: 0x7c09, 0x13bd: 0x7c09, 0x13be: 0x7c09, 0x13bf: 0x7c09, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x85f9, 0x13c1: 0x8621, 0x13c2: 0x8649, 0x13c3: 0x8671, 0x13c4: 0x8699, 0x13c5: 0x86c1, + 0x13c6: 0x86e9, 0x13c7: 0x8711, 0x13c8: 0x8739, 0x13c9: 0x8761, 0x13ca: 0x8789, 0x13cb: 0x87b1, + 0x13cc: 0x87d9, 0x13cd: 0x8801, 0x13ce: 0x8829, 0x13cf: 0x8851, 0x13d0: 0x8879, 0x13d1: 0x88a1, + 0x13d2: 0x88c9, 0x13d3: 0x88f1, 0x13d4: 0x8919, 0x13d5: 0x8941, 0x13d6: 0x8969, 0x13d7: 0x8991, + 0x13d8: 0x89b9, 0x13d9: 0x89e1, 0x13da: 0x8a09, 0x13db: 0x8a31, 0x13dc: 0x8a59, 0x13dd: 0x8a81, + 0x13de: 0x8aaa, 0x13df: 0x8ada, 0x13e0: 0x8b0a, 0x13e1: 0x8b3a, 0x13e2: 0x8b6a, 0x13e3: 0x8b9a, + 0x13e4: 0x8bc9, 0x13e5: 0x8bf1, 0x13e6: 0x7c71, 0x13e7: 0x8c19, 0x13e8: 0x7be1, 0x13e9: 0x7c99, + 0x13ea: 0x8c41, 0x13eb: 0x8c69, 0x13ec: 0x7d39, 0x13ed: 0x8c91, 0x13ee: 0x7d61, 0x13ef: 0x7d89, + 0x13f0: 0x8cb9, 0x13f1: 0x8ce1, 0x13f2: 0x7e29, 0x13f3: 0x8d09, 0x13f4: 0x7e51, 0x13f5: 0x7e79, + 0x13f6: 0x8d31, 0x13f7: 0x8d59, 0x13f8: 0x7ec9, 0x13f9: 0x8d81, 0x13fa: 0x7ef1, 0x13fb: 0x7f19, + 0x13fc: 0x83a1, 0x13fd: 0x83c9, 0x13fe: 0x8441, 0x13ff: 0x8469, + // Block 0x50, offset 0x1400 + 0x1400: 0x8491, 0x1401: 0x8531, 0x1402: 0x8559, 0x1403: 0x8581, 0x1404: 0x85a9, 0x1405: 0x8649, + 0x1406: 0x8671, 0x1407: 0x8699, 0x1408: 0x8da9, 0x1409: 0x8739, 0x140a: 0x8dd1, 0x140b: 0x8df9, + 0x140c: 0x8829, 0x140d: 0x8e21, 0x140e: 0x8851, 0x140f: 0x8879, 0x1410: 0x8a81, 0x1411: 0x8e49, + 0x1412: 0x8e71, 0x1413: 0x89b9, 0x1414: 0x8e99, 0x1415: 0x89e1, 0x1416: 0x8a09, 0x1417: 0x7c21, + 0x1418: 0x7c49, 0x1419: 0x8ec1, 0x141a: 0x7c71, 0x141b: 0x8ee9, 0x141c: 0x7cc1, 0x141d: 0x7ce9, + 0x141e: 0x7d11, 0x141f: 0x7d39, 0x1420: 0x8f11, 0x1421: 0x7db1, 0x1422: 0x7dd9, 0x1423: 0x7e01, + 0x1424: 0x7e29, 0x1425: 0x8f39, 0x1426: 0x7ec9, 0x1427: 0x7f41, 0x1428: 0x7f69, 0x1429: 0x7f91, + 0x142a: 0x7fb9, 0x142b: 0x7fe1, 0x142c: 0x8031, 0x142d: 0x8059, 0x142e: 0x8081, 0x142f: 0x80a9, + 0x1430: 0x80d1, 0x1431: 0x80f9, 0x1432: 0x8f61, 0x1433: 0x8121, 0x1434: 0x8149, 0x1435: 0x8171, + 0x1436: 0x8199, 0x1437: 0x81c1, 0x1438: 0x81e9, 0x1439: 0x8239, 0x143a: 0x8261, 0x143b: 0x8289, + 0x143c: 0x82b1, 0x143d: 0x82d9, 0x143e: 0x8301, 0x143f: 0x8329, + // Block 0x51, offset 0x1440 + 0x1440: 0x8351, 0x1441: 0x8379, 0x1442: 0x83f1, 0x1443: 0x8419, 0x1444: 0x84b9, 0x1445: 0x84e1, + 0x1446: 0x8509, 0x1447: 0x8531, 0x1448: 0x8559, 0x1449: 0x85d1, 0x144a: 0x85f9, 0x144b: 0x8621, + 0x144c: 0x8649, 0x144d: 0x8f89, 0x144e: 0x86c1, 0x144f: 0x86e9, 0x1450: 0x8711, 0x1451: 0x8739, + 0x1452: 0x87b1, 0x1453: 0x87d9, 0x1454: 0x8801, 0x1455: 0x8829, 0x1456: 0x8fb1, 0x1457: 0x88a1, + 0x1458: 0x88c9, 0x1459: 0x8fd9, 0x145a: 0x8941, 0x145b: 0x8969, 0x145c: 0x8991, 0x145d: 0x89b9, + 0x145e: 0x9001, 0x145f: 0x7c71, 0x1460: 0x8ee9, 0x1461: 0x7d39, 0x1462: 0x8f11, 0x1463: 0x7e29, + 0x1464: 0x8f39, 0x1465: 0x7ec9, 0x1466: 0x9029, 0x1467: 0x80d1, 0x1468: 0x9051, 0x1469: 0x9079, + 0x146a: 0x90a1, 0x146b: 0x8531, 0x146c: 0x8559, 0x146d: 0x8649, 0x146e: 0x8829, 0x146f: 0x8fb1, + 0x1470: 0x89b9, 0x1471: 0x9001, 0x1472: 0x90c9, 0x1473: 0x9101, 0x1474: 0x9139, 0x1475: 0x9171, + 0x1476: 0x9199, 0x1477: 0x91c1, 0x1478: 0x91e9, 0x1479: 0x9211, 0x147a: 0x9239, 0x147b: 0x9261, + 0x147c: 0x9289, 0x147d: 0x92b1, 0x147e: 0x92d9, 0x147f: 0x9301, + // Block 0x52, offset 0x1480 + 0x1480: 0x9329, 0x1481: 0x9351, 0x1482: 0x9379, 0x1483: 0x93a1, 0x1484: 0x93c9, 0x1485: 0x93f1, + 0x1486: 0x9419, 0x1487: 0x9441, 0x1488: 0x9469, 0x1489: 0x9491, 0x148a: 0x94b9, 0x148b: 0x94e1, + 0x148c: 0x9079, 0x148d: 0x9509, 0x148e: 0x9531, 0x148f: 0x9559, 0x1490: 0x9581, 0x1491: 0x9171, + 0x1492: 0x9199, 0x1493: 0x91c1, 0x1494: 0x91e9, 0x1495: 0x9211, 0x1496: 0x9239, 0x1497: 0x9261, + 0x1498: 0x9289, 0x1499: 0x92b1, 0x149a: 0x92d9, 0x149b: 0x9301, 0x149c: 0x9329, 0x149d: 0x9351, + 0x149e: 0x9379, 0x149f: 0x93a1, 0x14a0: 0x93c9, 0x14a1: 0x93f1, 0x14a2: 0x9419, 0x14a3: 0x9441, + 0x14a4: 0x9469, 0x14a5: 0x9491, 0x14a6: 0x94b9, 0x14a7: 0x94e1, 0x14a8: 0x9079, 0x14a9: 0x9509, + 0x14aa: 0x9531, 0x14ab: 0x9559, 0x14ac: 0x9581, 0x14ad: 0x9491, 0x14ae: 0x94b9, 0x14af: 0x94e1, + 0x14b0: 0x9079, 0x14b1: 0x9051, 0x14b2: 0x90a1, 0x14b3: 0x8211, 0x14b4: 0x8059, 0x14b5: 0x8081, + 0x14b6: 0x80a9, 0x14b7: 0x9491, 0x14b8: 0x94b9, 0x14b9: 0x94e1, 0x14ba: 0x8211, 0x14bb: 0x8239, + 0x14bc: 0x95a9, 0x14bd: 0x95a9, 0x14be: 0x0018, 0x14bf: 0x0018, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x0040, 0x14c1: 0x0040, 0x14c2: 0x0040, 0x14c3: 0x0040, 0x14c4: 0x0040, 0x14c5: 0x0040, + 0x14c6: 0x0040, 0x14c7: 0x0040, 0x14c8: 0x0040, 0x14c9: 0x0040, 0x14ca: 0x0040, 0x14cb: 0x0040, + 0x14cc: 0x0040, 0x14cd: 0x0040, 0x14ce: 0x0040, 0x14cf: 0x0040, 0x14d0: 0x95d1, 0x14d1: 0x9609, + 0x14d2: 0x9609, 0x14d3: 0x9641, 0x14d4: 0x9679, 0x14d5: 0x96b1, 0x14d6: 0x96e9, 0x14d7: 0x9721, + 0x14d8: 0x9759, 0x14d9: 0x9759, 0x14da: 0x9791, 0x14db: 0x97c9, 0x14dc: 0x9801, 0x14dd: 0x9839, + 0x14de: 0x9871, 0x14df: 0x98a9, 0x14e0: 0x98a9, 0x14e1: 0x98e1, 0x14e2: 0x9919, 0x14e3: 0x9919, + 0x14e4: 0x9951, 0x14e5: 0x9951, 0x14e6: 0x9989, 0x14e7: 0x99c1, 0x14e8: 0x99c1, 0x14e9: 0x99f9, + 0x14ea: 0x9a31, 0x14eb: 0x9a31, 0x14ec: 0x9a69, 0x14ed: 0x9a69, 0x14ee: 0x9aa1, 0x14ef: 0x9ad9, + 0x14f0: 0x9ad9, 0x14f1: 0x9b11, 0x14f2: 0x9b11, 0x14f3: 0x9b49, 0x14f4: 0x9b81, 0x14f5: 0x9bb9, + 0x14f6: 0x9bf1, 0x14f7: 0x9bf1, 0x14f8: 0x9c29, 0x14f9: 0x9c61, 0x14fa: 0x9c99, 0x14fb: 0x9cd1, + 0x14fc: 0x9d09, 0x14fd: 0x9d09, 0x14fe: 0x9d41, 0x14ff: 0x9d79, + // Block 0x54, offset 0x1500 + 0x1500: 0xa949, 0x1501: 0xa981, 0x1502: 0xa9b9, 0x1503: 0xa8a1, 0x1504: 0x9bb9, 0x1505: 0x9989, + 0x1506: 0xa9f1, 0x1507: 0xaa29, 0x1508: 0x0040, 0x1509: 0x0040, 0x150a: 0x0040, 0x150b: 0x0040, + 0x150c: 0x0040, 0x150d: 0x0040, 0x150e: 0x0040, 0x150f: 0x0040, 0x1510: 0x0040, 0x1511: 0x0040, + 0x1512: 0x0040, 0x1513: 0x0040, 0x1514: 0x0040, 0x1515: 0x0040, 0x1516: 0x0040, 0x1517: 0x0040, + 0x1518: 0x0040, 0x1519: 0x0040, 0x151a: 0x0040, 0x151b: 0x0040, 0x151c: 0x0040, 0x151d: 0x0040, + 0x151e: 0x0040, 0x151f: 0x0040, 0x1520: 0x0040, 0x1521: 0x0040, 0x1522: 0x0040, 0x1523: 0x0040, + 0x1524: 0x0040, 0x1525: 0x0040, 0x1526: 0x0040, 0x1527: 0x0040, 0x1528: 0x0040, 0x1529: 0x0040, + 0x152a: 0x0040, 0x152b: 0x0040, 0x152c: 0x0040, 0x152d: 0x0040, 0x152e: 0x0040, 0x152f: 0x0040, + 0x1530: 0xaa61, 0x1531: 0xaa99, 0x1532: 0xaad1, 0x1533: 0xab19, 0x1534: 0xab61, 0x1535: 0xaba9, + 0x1536: 0xabf1, 0x1537: 0xac39, 0x1538: 0xac81, 0x1539: 0xacc9, 0x153a: 0xad02, 0x153b: 0xae12, + 0x153c: 0xae91, 0x153d: 0x0018, 0x153e: 0x0040, 0x153f: 0x0040, + // Block 0x55, offset 0x1540 + 0x1540: 0x33c0, 0x1541: 0x33c0, 0x1542: 0x33c0, 0x1543: 0x33c0, 0x1544: 0x33c0, 0x1545: 0x33c0, + 0x1546: 0x33c0, 0x1547: 0x33c0, 0x1548: 0x33c0, 0x1549: 0x33c0, 0x154a: 0x33c0, 0x154b: 0x33c0, + 0x154c: 0x33c0, 0x154d: 0x33c0, 0x154e: 0x33c0, 0x154f: 0x33c0, 0x1550: 0xaeda, 0x1551: 0x7d55, + 0x1552: 0x0040, 0x1553: 0xaeea, 0x1554: 0x03c2, 0x1555: 0xaefa, 0x1556: 0xaf0a, 0x1557: 0x7d75, + 0x1558: 0x7d95, 0x1559: 0x0040, 0x155a: 0x0040, 0x155b: 0x0040, 0x155c: 0x0040, 0x155d: 0x0040, + 0x155e: 0x0040, 0x155f: 0x0040, 0x1560: 0x3308, 0x1561: 0x3308, 0x1562: 0x3308, 0x1563: 0x3308, + 0x1564: 0x3308, 0x1565: 0x3308, 0x1566: 0x3308, 0x1567: 0x3308, 0x1568: 0x3308, 0x1569: 0x3308, + 0x156a: 0x3308, 0x156b: 0x3308, 0x156c: 0x3308, 0x156d: 0x3308, 0x156e: 0x3308, 0x156f: 0x3308, + 0x1570: 0x0040, 0x1571: 0x7db5, 0x1572: 0x7dd5, 0x1573: 0xaf1a, 0x1574: 0xaf1a, 0x1575: 0x1fd2, + 0x1576: 0x1fe2, 0x1577: 0xaf2a, 0x1578: 0xaf3a, 0x1579: 0x7df5, 0x157a: 0x7e15, 0x157b: 0x7e35, + 0x157c: 0x7df5, 0x157d: 0x7e55, 0x157e: 0x7e75, 0x157f: 0x7e55, + // Block 0x56, offset 0x1580 + 0x1580: 0x7e95, 0x1581: 0x7eb5, 0x1582: 0x7ed5, 0x1583: 0x7eb5, 0x1584: 0x7ef5, 0x1585: 0x0018, + 0x1586: 0x0018, 0x1587: 0xaf4a, 0x1588: 0xaf5a, 0x1589: 0x7f16, 0x158a: 0x7f36, 0x158b: 0x7f56, + 0x158c: 0x7f76, 0x158d: 0xaf1a, 0x158e: 0xaf1a, 0x158f: 0xaf1a, 0x1590: 0xaeda, 0x1591: 0x7f95, + 0x1592: 0x0040, 0x1593: 0x0040, 0x1594: 0x03c2, 0x1595: 0xaeea, 0x1596: 0xaf0a, 0x1597: 0xaefa, + 0x1598: 0x7fb5, 0x1599: 0x1fd2, 0x159a: 0x1fe2, 0x159b: 0xaf2a, 0x159c: 0xaf3a, 0x159d: 0x7e95, + 0x159e: 0x7ef5, 0x159f: 0xaf6a, 0x15a0: 0xaf7a, 0x15a1: 0xaf8a, 0x15a2: 0x1fb2, 0x15a3: 0xaf99, + 0x15a4: 0xafaa, 0x15a5: 0xafba, 0x15a6: 0x1fc2, 0x15a7: 0x0040, 0x15a8: 0xafca, 0x15a9: 0xafda, + 0x15aa: 0xafea, 0x15ab: 0xaffa, 0x15ac: 0x0040, 0x15ad: 0x0040, 0x15ae: 0x0040, 0x15af: 0x0040, + 0x15b0: 0x7fd6, 0x15b1: 0xb009, 0x15b2: 0x7ff6, 0x15b3: 0x0808, 0x15b4: 0x8016, 0x15b5: 0x0040, + 0x15b6: 0x8036, 0x15b7: 0xb031, 0x15b8: 0x8056, 0x15b9: 0xb059, 0x15ba: 0x8076, 0x15bb: 0xb081, + 0x15bc: 0x8096, 0x15bd: 0xb0a9, 0x15be: 0x80b6, 0x15bf: 0xb0d1, + // Block 0x57, offset 0x15c0 + 0x15c0: 0xb0f9, 0x15c1: 0xb111, 0x15c2: 0xb111, 0x15c3: 0xb129, 0x15c4: 0xb129, 0x15c5: 0xb141, + 0x15c6: 0xb141, 0x15c7: 0xb159, 0x15c8: 0xb159, 0x15c9: 0xb171, 0x15ca: 0xb171, 0x15cb: 0xb171, + 0x15cc: 0xb171, 0x15cd: 0xb189, 0x15ce: 0xb189, 0x15cf: 0xb1a1, 0x15d0: 0xb1a1, 0x15d1: 0xb1a1, + 0x15d2: 0xb1a1, 0x15d3: 0xb1b9, 0x15d4: 0xb1b9, 0x15d5: 0xb1d1, 0x15d6: 0xb1d1, 0x15d7: 0xb1d1, + 0x15d8: 0xb1d1, 0x15d9: 0xb1e9, 0x15da: 0xb1e9, 0x15db: 0xb1e9, 0x15dc: 0xb1e9, 0x15dd: 0xb201, + 0x15de: 0xb201, 0x15df: 0xb201, 0x15e0: 0xb201, 0x15e1: 0xb219, 0x15e2: 0xb219, 0x15e3: 0xb219, + 0x15e4: 0xb219, 0x15e5: 0xb231, 0x15e6: 0xb231, 0x15e7: 0xb231, 0x15e8: 0xb231, 0x15e9: 0xb249, + 0x15ea: 0xb249, 0x15eb: 0xb261, 0x15ec: 0xb261, 0x15ed: 0xb279, 0x15ee: 0xb279, 0x15ef: 0xb291, + 0x15f0: 0xb291, 0x15f1: 0xb2a9, 0x15f2: 0xb2a9, 0x15f3: 0xb2a9, 0x15f4: 0xb2a9, 0x15f5: 0xb2c1, + 0x15f6: 0xb2c1, 0x15f7: 0xb2c1, 0x15f8: 0xb2c1, 0x15f9: 0xb2d9, 0x15fa: 0xb2d9, 0x15fb: 0xb2d9, + 0x15fc: 0xb2d9, 0x15fd: 0xb2f1, 0x15fe: 0xb2f1, 0x15ff: 0xb2f1, + // Block 0x58, offset 0x1600 + 0x1600: 0xb2f1, 0x1601: 0xb309, 0x1602: 0xb309, 0x1603: 0xb309, 0x1604: 0xb309, 0x1605: 0xb321, + 0x1606: 0xb321, 0x1607: 0xb321, 0x1608: 0xb321, 0x1609: 0xb339, 0x160a: 0xb339, 0x160b: 0xb339, + 0x160c: 0xb339, 0x160d: 0xb351, 0x160e: 0xb351, 0x160f: 0xb351, 0x1610: 0xb351, 0x1611: 0xb369, + 0x1612: 0xb369, 0x1613: 0xb369, 0x1614: 0xb369, 0x1615: 0xb381, 0x1616: 0xb381, 0x1617: 0xb381, + 0x1618: 0xb381, 0x1619: 0xb399, 0x161a: 0xb399, 0x161b: 0xb399, 0x161c: 0xb399, 0x161d: 0xb3b1, + 0x161e: 0xb3b1, 0x161f: 0xb3b1, 0x1620: 0xb3b1, 0x1621: 0xb3c9, 0x1622: 0xb3c9, 0x1623: 0xb3c9, + 0x1624: 0xb3c9, 0x1625: 0xb3e1, 0x1626: 0xb3e1, 0x1627: 0xb3e1, 0x1628: 0xb3e1, 0x1629: 0xb3f9, + 0x162a: 0xb3f9, 0x162b: 0xb3f9, 0x162c: 0xb3f9, 0x162d: 0xb411, 0x162e: 0xb411, 0x162f: 0x7ab1, + 0x1630: 0x7ab1, 0x1631: 0xb429, 0x1632: 0xb429, 0x1633: 0xb429, 0x1634: 0xb429, 0x1635: 0xb441, + 0x1636: 0xb441, 0x1637: 0xb469, 0x1638: 0xb469, 0x1639: 0xb491, 0x163a: 0xb491, 0x163b: 0xb4b9, + 0x163c: 0xb4b9, 0x163d: 0x0040, 0x163e: 0x0040, 0x163f: 0x03c0, + // Block 0x59, offset 0x1640 + 0x1640: 0x0040, 0x1641: 0xaefa, 0x1642: 0xb4e2, 0x1643: 0xaf6a, 0x1644: 0xafda, 0x1645: 0xafea, + 0x1646: 0xaf7a, 0x1647: 0xb4f2, 0x1648: 0x1fd2, 0x1649: 0x1fe2, 0x164a: 0xaf8a, 0x164b: 0x1fb2, + 0x164c: 0xaeda, 0x164d: 0xaf99, 0x164e: 0x29d1, 0x164f: 0xb502, 0x1650: 0x1f41, 0x1651: 0x00c9, + 0x1652: 0x0069, 0x1653: 0x0079, 0x1654: 0x1f51, 0x1655: 0x1f61, 0x1656: 0x1f71, 0x1657: 0x1f81, + 0x1658: 0x1f91, 0x1659: 0x1fa1, 0x165a: 0xaeea, 0x165b: 0x03c2, 0x165c: 0xafaa, 0x165d: 0x1fc2, + 0x165e: 0xafba, 0x165f: 0xaf0a, 0x1660: 0xaffa, 0x1661: 0x0039, 0x1662: 0x0ee9, 0x1663: 0x1159, + 0x1664: 0x0ef9, 0x1665: 0x0f09, 0x1666: 0x1199, 0x1667: 0x0f31, 0x1668: 0x0249, 0x1669: 0x0f41, + 0x166a: 0x0259, 0x166b: 0x0f51, 0x166c: 0x0359, 0x166d: 0x0f61, 0x166e: 0x0f71, 0x166f: 0x00d9, + 0x1670: 0x0f99, 0x1671: 0x2039, 0x1672: 0x0269, 0x1673: 0x01d9, 0x1674: 0x0fa9, 0x1675: 0x0fb9, + 0x1676: 0x1089, 0x1677: 0x0279, 0x1678: 0x0369, 0x1679: 0x0289, 0x167a: 0x13d1, 0x167b: 0xaf4a, + 0x167c: 0xafca, 0x167d: 0xaf5a, 0x167e: 0xb512, 0x167f: 0xaf1a, + // Block 0x5a, offset 0x1680 + 0x1680: 0x1caa, 0x1681: 0x0039, 0x1682: 0x0ee9, 0x1683: 0x1159, 0x1684: 0x0ef9, 0x1685: 0x0f09, + 0x1686: 0x1199, 0x1687: 0x0f31, 0x1688: 0x0249, 0x1689: 0x0f41, 0x168a: 0x0259, 0x168b: 0x0f51, + 0x168c: 0x0359, 0x168d: 0x0f61, 0x168e: 0x0f71, 0x168f: 0x00d9, 0x1690: 0x0f99, 0x1691: 0x2039, + 0x1692: 0x0269, 0x1693: 0x01d9, 0x1694: 0x0fa9, 0x1695: 0x0fb9, 0x1696: 0x1089, 0x1697: 0x0279, + 0x1698: 0x0369, 0x1699: 0x0289, 0x169a: 0x13d1, 0x169b: 0xaf2a, 0x169c: 0xb522, 0x169d: 0xaf3a, + 0x169e: 0xb532, 0x169f: 0x80d5, 0x16a0: 0x80f5, 0x16a1: 0x29d1, 0x16a2: 0x8115, 0x16a3: 0x8115, + 0x16a4: 0x8135, 0x16a5: 0x8155, 0x16a6: 0x8175, 0x16a7: 0x8195, 0x16a8: 0x81b5, 0x16a9: 0x81d5, + 0x16aa: 0x81f5, 0x16ab: 0x8215, 0x16ac: 0x8235, 0x16ad: 0x8255, 0x16ae: 0x8275, 0x16af: 0x8295, + 0x16b0: 0x82b5, 0x16b1: 0x82d5, 0x16b2: 0x82f5, 0x16b3: 0x8315, 0x16b4: 0x8335, 0x16b5: 0x8355, + 0x16b6: 0x8375, 0x16b7: 0x8395, 0x16b8: 0x83b5, 0x16b9: 0x83d5, 0x16ba: 0x83f5, 0x16bb: 0x8415, + 0x16bc: 0x81b5, 0x16bd: 0x8435, 0x16be: 0x8455, 0x16bf: 0x8215, + // Block 0x5b, offset 0x16c0 + 0x16c0: 0x8475, 0x16c1: 0x8495, 0x16c2: 0x84b5, 0x16c3: 0x84d5, 0x16c4: 0x84f5, 0x16c5: 0x8515, + 0x16c6: 0x8535, 0x16c7: 0x8555, 0x16c8: 0x84d5, 0x16c9: 0x8575, 0x16ca: 0x84d5, 0x16cb: 0x8595, + 0x16cc: 0x8595, 0x16cd: 0x85b5, 0x16ce: 0x85b5, 0x16cf: 0x85d5, 0x16d0: 0x8515, 0x16d1: 0x85f5, + 0x16d2: 0x8615, 0x16d3: 0x85f5, 0x16d4: 0x8635, 0x16d5: 0x8615, 0x16d6: 0x8655, 0x16d7: 0x8655, + 0x16d8: 0x8675, 0x16d9: 0x8675, 0x16da: 0x8695, 0x16db: 0x8695, 0x16dc: 0x8615, 0x16dd: 0x8115, + 0x16de: 0x86b5, 0x16df: 0x86d5, 0x16e0: 0x0040, 0x16e1: 0x86f5, 0x16e2: 0x8715, 0x16e3: 0x8735, + 0x16e4: 0x8755, 0x16e5: 0x8735, 0x16e6: 0x8775, 0x16e7: 0x8795, 0x16e8: 0x87b5, 0x16e9: 0x87b5, + 0x16ea: 0x87d5, 0x16eb: 0x87d5, 0x16ec: 0x87f5, 0x16ed: 0x87f5, 0x16ee: 0x87d5, 0x16ef: 0x87d5, + 0x16f0: 0x8815, 0x16f1: 0x8835, 0x16f2: 0x8855, 0x16f3: 0x8875, 0x16f4: 0x8895, 0x16f5: 0x88b5, + 0x16f6: 0x88b5, 0x16f7: 0x88b5, 0x16f8: 0x88d5, 0x16f9: 0x88d5, 0x16fa: 0x88d5, 0x16fb: 0x88d5, + 0x16fc: 0x87b5, 0x16fd: 0x87b5, 0x16fe: 0x87b5, 0x16ff: 0x0040, + // Block 0x5c, offset 0x1700 + 0x1700: 0x0040, 0x1701: 0x0040, 0x1702: 0x8715, 0x1703: 0x86f5, 0x1704: 0x88f5, 0x1705: 0x86f5, + 0x1706: 0x8715, 0x1707: 0x86f5, 0x1708: 0x0040, 0x1709: 0x0040, 0x170a: 0x8915, 0x170b: 0x8715, + 0x170c: 0x8935, 0x170d: 0x88f5, 0x170e: 0x8935, 0x170f: 0x8715, 0x1710: 0x0040, 0x1711: 0x0040, + 0x1712: 0x8955, 0x1713: 0x8975, 0x1714: 0x8875, 0x1715: 0x8935, 0x1716: 0x88f5, 0x1717: 0x8935, + 0x1718: 0x0040, 0x1719: 0x0040, 0x171a: 0x8995, 0x171b: 0x89b5, 0x171c: 0x8995, 0x171d: 0x0040, + 0x171e: 0x0040, 0x171f: 0x0040, 0x1720: 0xb541, 0x1721: 0xb559, 0x1722: 0xb571, 0x1723: 0x89d6, + 0x1724: 0xb589, 0x1725: 0xb5a1, 0x1726: 0x89f5, 0x1727: 0x0040, 0x1728: 0x8a15, 0x1729: 0x8a35, + 0x172a: 0x8a55, 0x172b: 0x8a35, 0x172c: 0x8a75, 0x172d: 0x8a95, 0x172e: 0x8ab5, 0x172f: 0x0040, + 0x1730: 0x0040, 0x1731: 0x0040, 0x1732: 0x0040, 0x1733: 0x0040, 0x1734: 0x0040, 0x1735: 0x0040, + 0x1736: 0x0040, 0x1737: 0x0040, 0x1738: 0x0040, 0x1739: 0x0340, 0x173a: 0x0340, 0x173b: 0x0340, + 0x173c: 0x0040, 0x173d: 0x0040, 0x173e: 0x0040, 0x173f: 0x0040, + // Block 0x5d, offset 0x1740 + 0x1740: 0x0a08, 0x1741: 0x0a08, 0x1742: 0x0a08, 0x1743: 0x0a08, 0x1744: 0x0a08, 0x1745: 0x0c08, + 0x1746: 0x0808, 0x1747: 0x0c08, 0x1748: 0x0818, 0x1749: 0x0c08, 0x174a: 0x0c08, 0x174b: 0x0808, + 0x174c: 0x0808, 0x174d: 0x0908, 0x174e: 0x0c08, 0x174f: 0x0c08, 0x1750: 0x0c08, 0x1751: 0x0c08, + 0x1752: 0x0c08, 0x1753: 0x0a08, 0x1754: 0x0a08, 0x1755: 0x0a08, 0x1756: 0x0a08, 0x1757: 0x0908, + 0x1758: 0x0a08, 0x1759: 0x0a08, 0x175a: 0x0a08, 0x175b: 0x0a08, 0x175c: 0x0a08, 0x175d: 0x0c08, + 0x175e: 0x0a08, 0x175f: 0x0a08, 0x1760: 0x0a08, 0x1761: 0x0c08, 0x1762: 0x0808, 0x1763: 0x0808, + 0x1764: 0x0c08, 0x1765: 0x3308, 0x1766: 0x3308, 0x1767: 0x0040, 0x1768: 0x0040, 0x1769: 0x0040, + 0x176a: 0x0040, 0x176b: 0x0a18, 0x176c: 0x0a18, 0x176d: 0x0a18, 0x176e: 0x0a18, 0x176f: 0x0c18, + 0x1770: 0x0818, 0x1771: 0x0818, 0x1772: 0x0818, 0x1773: 0x0818, 0x1774: 0x0818, 0x1775: 0x0818, + 0x1776: 0x0818, 0x1777: 0x0040, 0x1778: 0x0040, 0x1779: 0x0040, 0x177a: 0x0040, 0x177b: 0x0040, + 0x177c: 0x0040, 0x177d: 0x0040, 0x177e: 0x0040, 0x177f: 0x0040, + // Block 0x5e, offset 0x1780 + 0x1780: 0x0a08, 0x1781: 0x0c08, 0x1782: 0x0a08, 0x1783: 0x0c08, 0x1784: 0x0c08, 0x1785: 0x0c08, + 0x1786: 0x0a08, 0x1787: 0x0a08, 0x1788: 0x0a08, 0x1789: 0x0c08, 0x178a: 0x0a08, 0x178b: 0x0a08, + 0x178c: 0x0c08, 0x178d: 0x0a08, 0x178e: 0x0c08, 0x178f: 0x0c08, 0x1790: 0x0a08, 0x1791: 0x0c08, + 0x1792: 0x0040, 0x1793: 0x0040, 0x1794: 0x0040, 0x1795: 0x0040, 0x1796: 0x0040, 0x1797: 0x0040, + 0x1798: 0x0040, 0x1799: 0x0818, 0x179a: 0x0818, 0x179b: 0x0818, 0x179c: 0x0818, 0x179d: 0x0040, + 0x179e: 0x0040, 0x179f: 0x0040, 0x17a0: 0x0040, 0x17a1: 0x0040, 0x17a2: 0x0040, 0x17a3: 0x0040, + 0x17a4: 0x0040, 0x17a5: 0x0040, 0x17a6: 0x0040, 0x17a7: 0x0040, 0x17a8: 0x0040, 0x17a9: 0x0c18, + 0x17aa: 0x0c18, 0x17ab: 0x0c18, 0x17ac: 0x0c18, 0x17ad: 0x0a18, 0x17ae: 0x0a18, 0x17af: 0x0818, + 0x17b0: 0x0040, 0x17b1: 0x0040, 0x17b2: 0x0040, 0x17b3: 0x0040, 0x17b4: 0x0040, 0x17b5: 0x0040, + 0x17b6: 0x0040, 0x17b7: 0x0040, 0x17b8: 0x0040, 0x17b9: 0x0040, 0x17ba: 0x0040, 0x17bb: 0x0040, + 0x17bc: 0x0040, 0x17bd: 0x0040, 0x17be: 0x0040, 0x17bf: 0x0040, + // Block 0x5f, offset 0x17c0 + 0x17c0: 0x3308, 0x17c1: 0x3308, 0x17c2: 0x3008, 0x17c3: 0x3008, 0x17c4: 0x0040, 0x17c5: 0x0008, + 0x17c6: 0x0008, 0x17c7: 0x0008, 0x17c8: 0x0008, 0x17c9: 0x0008, 0x17ca: 0x0008, 0x17cb: 0x0008, + 0x17cc: 0x0008, 0x17cd: 0x0040, 0x17ce: 0x0040, 0x17cf: 0x0008, 0x17d0: 0x0008, 0x17d1: 0x0040, + 0x17d2: 0x0040, 0x17d3: 0x0008, 0x17d4: 0x0008, 0x17d5: 0x0008, 0x17d6: 0x0008, 0x17d7: 0x0008, + 0x17d8: 0x0008, 0x17d9: 0x0008, 0x17da: 0x0008, 0x17db: 0x0008, 0x17dc: 0x0008, 0x17dd: 0x0008, + 0x17de: 0x0008, 0x17df: 0x0008, 0x17e0: 0x0008, 0x17e1: 0x0008, 0x17e2: 0x0008, 0x17e3: 0x0008, + 0x17e4: 0x0008, 0x17e5: 0x0008, 0x17e6: 0x0008, 0x17e7: 0x0008, 0x17e8: 0x0008, 0x17e9: 0x0040, + 0x17ea: 0x0008, 0x17eb: 0x0008, 0x17ec: 0x0008, 0x17ed: 0x0008, 0x17ee: 0x0008, 0x17ef: 0x0008, + 0x17f0: 0x0008, 0x17f1: 0x0040, 0x17f2: 0x0008, 0x17f3: 0x0008, 0x17f4: 0x0040, 0x17f5: 0x0008, + 0x17f6: 0x0008, 0x17f7: 0x0008, 0x17f8: 0x0008, 0x17f9: 0x0008, 0x17fa: 0x0040, 0x17fb: 0x0040, + 0x17fc: 0x3308, 0x17fd: 0x0008, 0x17fe: 0x3008, 0x17ff: 0x3008, + // Block 0x60, offset 0x1800 + 0x1800: 0x3308, 0x1801: 0x3008, 0x1802: 0x3008, 0x1803: 0x3008, 0x1804: 0x3008, 0x1805: 0x0040, + 0x1806: 0x0040, 0x1807: 0x3008, 0x1808: 0x3008, 0x1809: 0x0040, 0x180a: 0x0040, 0x180b: 0x3008, + 0x180c: 0x3008, 0x180d: 0x3808, 0x180e: 0x0040, 0x180f: 0x0040, 0x1810: 0x0008, 0x1811: 0x0040, + 0x1812: 0x0040, 0x1813: 0x0040, 0x1814: 0x0040, 0x1815: 0x0040, 0x1816: 0x0040, 0x1817: 0x3008, + 0x1818: 0x0040, 0x1819: 0x0040, 0x181a: 0x0040, 0x181b: 0x0040, 0x181c: 0x0040, 0x181d: 0x0008, + 0x181e: 0x0008, 0x181f: 0x0008, 0x1820: 0x0008, 0x1821: 0x0008, 0x1822: 0x3008, 0x1823: 0x3008, + 0x1824: 0x0040, 0x1825: 0x0040, 0x1826: 0x3308, 0x1827: 0x3308, 0x1828: 0x3308, 0x1829: 0x3308, + 0x182a: 0x3308, 0x182b: 0x3308, 0x182c: 0x3308, 0x182d: 0x0040, 0x182e: 0x0040, 0x182f: 0x0040, + 0x1830: 0x3308, 0x1831: 0x3308, 0x1832: 0x3308, 0x1833: 0x3308, 0x1834: 0x3308, 0x1835: 0x0040, + 0x1836: 0x0040, 0x1837: 0x0040, 0x1838: 0x0040, 0x1839: 0x0040, 0x183a: 0x0040, 0x183b: 0x0040, + 0x183c: 0x0040, 0x183d: 0x0040, 0x183e: 0x0040, 0x183f: 0x0040, + // Block 0x61, offset 0x1840 + 0x1840: 0x0039, 0x1841: 0x0ee9, 0x1842: 0x1159, 0x1843: 0x0ef9, 0x1844: 0x0f09, 0x1845: 0x1199, + 0x1846: 0x0f31, 0x1847: 0x0249, 0x1848: 0x0f41, 0x1849: 0x0259, 0x184a: 0x0f51, 0x184b: 0x0359, + 0x184c: 0x0f61, 0x184d: 0x0f71, 0x184e: 0x00d9, 0x184f: 0x0f99, 0x1850: 0x2039, 0x1851: 0x0269, + 0x1852: 0x01d9, 0x1853: 0x0fa9, 0x1854: 0x0fb9, 0x1855: 0x1089, 0x1856: 0x0279, 0x1857: 0x0369, + 0x1858: 0x0289, 0x1859: 0x13d1, 0x185a: 0x0039, 0x185b: 0x0ee9, 0x185c: 0x1159, 0x185d: 0x0ef9, + 0x185e: 0x0f09, 0x185f: 0x1199, 0x1860: 0x0f31, 0x1861: 0x0249, 0x1862: 0x0f41, 0x1863: 0x0259, + 0x1864: 0x0f51, 0x1865: 0x0359, 0x1866: 0x0f61, 0x1867: 0x0f71, 0x1868: 0x00d9, 0x1869: 0x0f99, + 0x186a: 0x2039, 0x186b: 0x0269, 0x186c: 0x01d9, 0x186d: 0x0fa9, 0x186e: 0x0fb9, 0x186f: 0x1089, + 0x1870: 0x0279, 0x1871: 0x0369, 0x1872: 0x0289, 0x1873: 0x13d1, 0x1874: 0x0039, 0x1875: 0x0ee9, + 0x1876: 0x1159, 0x1877: 0x0ef9, 0x1878: 0x0f09, 0x1879: 0x1199, 0x187a: 0x0f31, 0x187b: 0x0249, + 0x187c: 0x0f41, 0x187d: 0x0259, 0x187e: 0x0f51, 0x187f: 0x0359, + // Block 0x62, offset 0x1880 + 0x1880: 0x0f61, 0x1881: 0x0f71, 0x1882: 0x00d9, 0x1883: 0x0f99, 0x1884: 0x2039, 0x1885: 0x0269, + 0x1886: 0x01d9, 0x1887: 0x0fa9, 0x1888: 0x0fb9, 0x1889: 0x1089, 0x188a: 0x0279, 0x188b: 0x0369, + 0x188c: 0x0289, 0x188d: 0x13d1, 0x188e: 0x0039, 0x188f: 0x0ee9, 0x1890: 0x1159, 0x1891: 0x0ef9, + 0x1892: 0x0f09, 0x1893: 0x1199, 0x1894: 0x0f31, 0x1895: 0x0040, 0x1896: 0x0f41, 0x1897: 0x0259, + 0x1898: 0x0f51, 0x1899: 0x0359, 0x189a: 0x0f61, 0x189b: 0x0f71, 0x189c: 0x00d9, 0x189d: 0x0f99, + 0x189e: 0x2039, 0x189f: 0x0269, 0x18a0: 0x01d9, 0x18a1: 0x0fa9, 0x18a2: 0x0fb9, 0x18a3: 0x1089, + 0x18a4: 0x0279, 0x18a5: 0x0369, 0x18a6: 0x0289, 0x18a7: 0x13d1, 0x18a8: 0x0039, 0x18a9: 0x0ee9, + 0x18aa: 0x1159, 0x18ab: 0x0ef9, 0x18ac: 0x0f09, 0x18ad: 0x1199, 0x18ae: 0x0f31, 0x18af: 0x0249, + 0x18b0: 0x0f41, 0x18b1: 0x0259, 0x18b2: 0x0f51, 0x18b3: 0x0359, 0x18b4: 0x0f61, 0x18b5: 0x0f71, + 0x18b6: 0x00d9, 0x18b7: 0x0f99, 0x18b8: 0x2039, 0x18b9: 0x0269, 0x18ba: 0x01d9, 0x18bb: 0x0fa9, + 0x18bc: 0x0fb9, 0x18bd: 0x1089, 0x18be: 0x0279, 0x18bf: 0x0369, + // Block 0x63, offset 0x18c0 + 0x18c0: 0x0289, 0x18c1: 0x13d1, 0x18c2: 0x0039, 0x18c3: 0x0ee9, 0x18c4: 0x1159, 0x18c5: 0x0ef9, + 0x18c6: 0x0f09, 0x18c7: 0x1199, 0x18c8: 0x0f31, 0x18c9: 0x0249, 0x18ca: 0x0f41, 0x18cb: 0x0259, + 0x18cc: 0x0f51, 0x18cd: 0x0359, 0x18ce: 0x0f61, 0x18cf: 0x0f71, 0x18d0: 0x00d9, 0x18d1: 0x0f99, + 0x18d2: 0x2039, 0x18d3: 0x0269, 0x18d4: 0x01d9, 0x18d5: 0x0fa9, 0x18d6: 0x0fb9, 0x18d7: 0x1089, + 0x18d8: 0x0279, 0x18d9: 0x0369, 0x18da: 0x0289, 0x18db: 0x13d1, 0x18dc: 0x0039, 0x18dd: 0x0040, + 0x18de: 0x1159, 0x18df: 0x0ef9, 0x18e0: 0x0040, 0x18e1: 0x0040, 0x18e2: 0x0f31, 0x18e3: 0x0040, + 0x18e4: 0x0040, 0x18e5: 0x0259, 0x18e6: 0x0f51, 0x18e7: 0x0040, 0x18e8: 0x0040, 0x18e9: 0x0f71, + 0x18ea: 0x00d9, 0x18eb: 0x0f99, 0x18ec: 0x2039, 0x18ed: 0x0040, 0x18ee: 0x01d9, 0x18ef: 0x0fa9, + 0x18f0: 0x0fb9, 0x18f1: 0x1089, 0x18f2: 0x0279, 0x18f3: 0x0369, 0x18f4: 0x0289, 0x18f5: 0x13d1, + 0x18f6: 0x0039, 0x18f7: 0x0ee9, 0x18f8: 0x1159, 0x18f9: 0x0ef9, 0x18fa: 0x0040, 0x18fb: 0x1199, + 0x18fc: 0x0040, 0x18fd: 0x0249, 0x18fe: 0x0f41, 0x18ff: 0x0259, + // Block 0x64, offset 0x1900 + 0x1900: 0x0f51, 0x1901: 0x0359, 0x1902: 0x0f61, 0x1903: 0x0f71, 0x1904: 0x0040, 0x1905: 0x0f99, + 0x1906: 0x2039, 0x1907: 0x0269, 0x1908: 0x01d9, 0x1909: 0x0fa9, 0x190a: 0x0fb9, 0x190b: 0x1089, + 0x190c: 0x0279, 0x190d: 0x0369, 0x190e: 0x0289, 0x190f: 0x13d1, 0x1910: 0x0039, 0x1911: 0x0ee9, + 0x1912: 0x1159, 0x1913: 0x0ef9, 0x1914: 0x0f09, 0x1915: 0x1199, 0x1916: 0x0f31, 0x1917: 0x0249, + 0x1918: 0x0f41, 0x1919: 0x0259, 0x191a: 0x0f51, 0x191b: 0x0359, 0x191c: 0x0f61, 0x191d: 0x0f71, + 0x191e: 0x00d9, 0x191f: 0x0f99, 0x1920: 0x2039, 0x1921: 0x0269, 0x1922: 0x01d9, 0x1923: 0x0fa9, + 0x1924: 0x0fb9, 0x1925: 0x1089, 0x1926: 0x0279, 0x1927: 0x0369, 0x1928: 0x0289, 0x1929: 0x13d1, + 0x192a: 0x0039, 0x192b: 0x0ee9, 0x192c: 0x1159, 0x192d: 0x0ef9, 0x192e: 0x0f09, 0x192f: 0x1199, + 0x1930: 0x0f31, 0x1931: 0x0249, 0x1932: 0x0f41, 0x1933: 0x0259, 0x1934: 0x0f51, 0x1935: 0x0359, + 0x1936: 0x0f61, 0x1937: 0x0f71, 0x1938: 0x00d9, 0x1939: 0x0f99, 0x193a: 0x2039, 0x193b: 0x0269, + 0x193c: 0x01d9, 0x193d: 0x0fa9, 0x193e: 0x0fb9, 0x193f: 0x1089, + // Block 0x65, offset 0x1940 + 0x1940: 0x0279, 0x1941: 0x0369, 0x1942: 0x0289, 0x1943: 0x13d1, 0x1944: 0x0039, 0x1945: 0x0ee9, + 0x1946: 0x0040, 0x1947: 0x0ef9, 0x1948: 0x0f09, 0x1949: 0x1199, 0x194a: 0x0f31, 0x194b: 0x0040, + 0x194c: 0x0040, 0x194d: 0x0259, 0x194e: 0x0f51, 0x194f: 0x0359, 0x1950: 0x0f61, 0x1951: 0x0f71, + 0x1952: 0x00d9, 0x1953: 0x0f99, 0x1954: 0x2039, 0x1955: 0x0040, 0x1956: 0x01d9, 0x1957: 0x0fa9, + 0x1958: 0x0fb9, 0x1959: 0x1089, 0x195a: 0x0279, 0x195b: 0x0369, 0x195c: 0x0289, 0x195d: 0x0040, + 0x195e: 0x0039, 0x195f: 0x0ee9, 0x1960: 0x1159, 0x1961: 0x0ef9, 0x1962: 0x0f09, 0x1963: 0x1199, + 0x1964: 0x0f31, 0x1965: 0x0249, 0x1966: 0x0f41, 0x1967: 0x0259, 0x1968: 0x0f51, 0x1969: 0x0359, + 0x196a: 0x0f61, 0x196b: 0x0f71, 0x196c: 0x00d9, 0x196d: 0x0f99, 0x196e: 0x2039, 0x196f: 0x0269, + 0x1970: 0x01d9, 0x1971: 0x0fa9, 0x1972: 0x0fb9, 0x1973: 0x1089, 0x1974: 0x0279, 0x1975: 0x0369, + 0x1976: 0x0289, 0x1977: 0x13d1, 0x1978: 0x0039, 0x1979: 0x0ee9, 0x197a: 0x0040, 0x197b: 0x0ef9, + 0x197c: 0x0f09, 0x197d: 0x1199, 0x197e: 0x0f31, 0x197f: 0x0040, + // Block 0x66, offset 0x1980 + 0x1980: 0x0f41, 0x1981: 0x0259, 0x1982: 0x0f51, 0x1983: 0x0359, 0x1984: 0x0f61, 0x1985: 0x0040, + 0x1986: 0x00d9, 0x1987: 0x0040, 0x1988: 0x0040, 0x1989: 0x0040, 0x198a: 0x01d9, 0x198b: 0x0fa9, + 0x198c: 0x0fb9, 0x198d: 0x1089, 0x198e: 0x0279, 0x198f: 0x0369, 0x1990: 0x0289, 0x1991: 0x0040, + 0x1992: 0x0039, 0x1993: 0x0ee9, 0x1994: 0x1159, 0x1995: 0x0ef9, 0x1996: 0x0f09, 0x1997: 0x1199, + 0x1998: 0x0f31, 0x1999: 0x0249, 0x199a: 0x0f41, 0x199b: 0x0259, 0x199c: 0x0f51, 0x199d: 0x0359, + 0x199e: 0x0f61, 0x199f: 0x0f71, 0x19a0: 0x00d9, 0x19a1: 0x0f99, 0x19a2: 0x2039, 0x19a3: 0x0269, + 0x19a4: 0x01d9, 0x19a5: 0x0fa9, 0x19a6: 0x0fb9, 0x19a7: 0x1089, 0x19a8: 0x0279, 0x19a9: 0x0369, + 0x19aa: 0x0289, 0x19ab: 0x13d1, 0x19ac: 0x0039, 0x19ad: 0x0ee9, 0x19ae: 0x1159, 0x19af: 0x0ef9, + 0x19b0: 0x0f09, 0x19b1: 0x1199, 0x19b2: 0x0f31, 0x19b3: 0x0249, 0x19b4: 0x0f41, 0x19b5: 0x0259, + 0x19b6: 0x0f51, 0x19b7: 0x0359, 0x19b8: 0x0f61, 0x19b9: 0x0f71, 0x19ba: 0x00d9, 0x19bb: 0x0f99, + 0x19bc: 0x2039, 0x19bd: 0x0269, 0x19be: 0x01d9, 0x19bf: 0x0fa9, + // Block 0x67, offset 0x19c0 + 0x19c0: 0x0fb9, 0x19c1: 0x1089, 0x19c2: 0x0279, 0x19c3: 0x0369, 0x19c4: 0x0289, 0x19c5: 0x13d1, + 0x19c6: 0x0039, 0x19c7: 0x0ee9, 0x19c8: 0x1159, 0x19c9: 0x0ef9, 0x19ca: 0x0f09, 0x19cb: 0x1199, + 0x19cc: 0x0f31, 0x19cd: 0x0249, 0x19ce: 0x0f41, 0x19cf: 0x0259, 0x19d0: 0x0f51, 0x19d1: 0x0359, + 0x19d2: 0x0f61, 0x19d3: 0x0f71, 0x19d4: 0x00d9, 0x19d5: 0x0f99, 0x19d6: 0x2039, 0x19d7: 0x0269, + 0x19d8: 0x01d9, 0x19d9: 0x0fa9, 0x19da: 0x0fb9, 0x19db: 0x1089, 0x19dc: 0x0279, 0x19dd: 0x0369, + 0x19de: 0x0289, 0x19df: 0x13d1, 0x19e0: 0x0039, 0x19e1: 0x0ee9, 0x19e2: 0x1159, 0x19e3: 0x0ef9, + 0x19e4: 0x0f09, 0x19e5: 0x1199, 0x19e6: 0x0f31, 0x19e7: 0x0249, 0x19e8: 0x0f41, 0x19e9: 0x0259, + 0x19ea: 0x0f51, 0x19eb: 0x0359, 0x19ec: 0x0f61, 0x19ed: 0x0f71, 0x19ee: 0x00d9, 0x19ef: 0x0f99, + 0x19f0: 0x2039, 0x19f1: 0x0269, 0x19f2: 0x01d9, 0x19f3: 0x0fa9, 0x19f4: 0x0fb9, 0x19f5: 0x1089, + 0x19f6: 0x0279, 0x19f7: 0x0369, 0x19f8: 0x0289, 0x19f9: 0x13d1, 0x19fa: 0x0039, 0x19fb: 0x0ee9, + 0x19fc: 0x1159, 0x19fd: 0x0ef9, 0x19fe: 0x0f09, 0x19ff: 0x1199, + // Block 0x68, offset 0x1a00 + 0x1a00: 0x0f31, 0x1a01: 0x0249, 0x1a02: 0x0f41, 0x1a03: 0x0259, 0x1a04: 0x0f51, 0x1a05: 0x0359, + 0x1a06: 0x0f61, 0x1a07: 0x0f71, 0x1a08: 0x00d9, 0x1a09: 0x0f99, 0x1a0a: 0x2039, 0x1a0b: 0x0269, + 0x1a0c: 0x01d9, 0x1a0d: 0x0fa9, 0x1a0e: 0x0fb9, 0x1a0f: 0x1089, 0x1a10: 0x0279, 0x1a11: 0x0369, + 0x1a12: 0x0289, 0x1a13: 0x13d1, 0x1a14: 0x0039, 0x1a15: 0x0ee9, 0x1a16: 0x1159, 0x1a17: 0x0ef9, + 0x1a18: 0x0f09, 0x1a19: 0x1199, 0x1a1a: 0x0f31, 0x1a1b: 0x0249, 0x1a1c: 0x0f41, 0x1a1d: 0x0259, + 0x1a1e: 0x0f51, 0x1a1f: 0x0359, 0x1a20: 0x0f61, 0x1a21: 0x0f71, 0x1a22: 0x00d9, 0x1a23: 0x0f99, + 0x1a24: 0x2039, 0x1a25: 0x0269, 0x1a26: 0x01d9, 0x1a27: 0x0fa9, 0x1a28: 0x0fb9, 0x1a29: 0x1089, + 0x1a2a: 0x0279, 0x1a2b: 0x0369, 0x1a2c: 0x0289, 0x1a2d: 0x13d1, 0x1a2e: 0x0039, 0x1a2f: 0x0ee9, + 0x1a30: 0x1159, 0x1a31: 0x0ef9, 0x1a32: 0x0f09, 0x1a33: 0x1199, 0x1a34: 0x0f31, 0x1a35: 0x0249, + 0x1a36: 0x0f41, 0x1a37: 0x0259, 0x1a38: 0x0f51, 0x1a39: 0x0359, 0x1a3a: 0x0f61, 0x1a3b: 0x0f71, + 0x1a3c: 0x00d9, 0x1a3d: 0x0f99, 0x1a3e: 0x2039, 0x1a3f: 0x0269, + // Block 0x69, offset 0x1a40 + 0x1a40: 0x01d9, 0x1a41: 0x0fa9, 0x1a42: 0x0fb9, 0x1a43: 0x1089, 0x1a44: 0x0279, 0x1a45: 0x0369, + 0x1a46: 0x0289, 0x1a47: 0x13d1, 0x1a48: 0x0039, 0x1a49: 0x0ee9, 0x1a4a: 0x1159, 0x1a4b: 0x0ef9, + 0x1a4c: 0x0f09, 0x1a4d: 0x1199, 0x1a4e: 0x0f31, 0x1a4f: 0x0249, 0x1a50: 0x0f41, 0x1a51: 0x0259, + 0x1a52: 0x0f51, 0x1a53: 0x0359, 0x1a54: 0x0f61, 0x1a55: 0x0f71, 0x1a56: 0x00d9, 0x1a57: 0x0f99, + 0x1a58: 0x2039, 0x1a59: 0x0269, 0x1a5a: 0x01d9, 0x1a5b: 0x0fa9, 0x1a5c: 0x0fb9, 0x1a5d: 0x1089, + 0x1a5e: 0x0279, 0x1a5f: 0x0369, 0x1a60: 0x0289, 0x1a61: 0x13d1, 0x1a62: 0x0039, 0x1a63: 0x0ee9, + 0x1a64: 0x1159, 0x1a65: 0x0ef9, 0x1a66: 0x0f09, 0x1a67: 0x1199, 0x1a68: 0x0f31, 0x1a69: 0x0249, + 0x1a6a: 0x0f41, 0x1a6b: 0x0259, 0x1a6c: 0x0f51, 0x1a6d: 0x0359, 0x1a6e: 0x0f61, 0x1a6f: 0x0f71, + 0x1a70: 0x00d9, 0x1a71: 0x0f99, 0x1a72: 0x2039, 0x1a73: 0x0269, 0x1a74: 0x01d9, 0x1a75: 0x0fa9, + 0x1a76: 0x0fb9, 0x1a77: 0x1089, 0x1a78: 0x0279, 0x1a79: 0x0369, 0x1a7a: 0x0289, 0x1a7b: 0x13d1, + 0x1a7c: 0x0039, 0x1a7d: 0x0ee9, 0x1a7e: 0x1159, 0x1a7f: 0x0ef9, + // Block 0x6a, offset 0x1a80 + 0x1a80: 0x0f09, 0x1a81: 0x1199, 0x1a82: 0x0f31, 0x1a83: 0x0249, 0x1a84: 0x0f41, 0x1a85: 0x0259, + 0x1a86: 0x0f51, 0x1a87: 0x0359, 0x1a88: 0x0f61, 0x1a89: 0x0f71, 0x1a8a: 0x00d9, 0x1a8b: 0x0f99, + 0x1a8c: 0x2039, 0x1a8d: 0x0269, 0x1a8e: 0x01d9, 0x1a8f: 0x0fa9, 0x1a90: 0x0fb9, 0x1a91: 0x1089, + 0x1a92: 0x0279, 0x1a93: 0x0369, 0x1a94: 0x0289, 0x1a95: 0x13d1, 0x1a96: 0x0039, 0x1a97: 0x0ee9, + 0x1a98: 0x1159, 0x1a99: 0x0ef9, 0x1a9a: 0x0f09, 0x1a9b: 0x1199, 0x1a9c: 0x0f31, 0x1a9d: 0x0249, + 0x1a9e: 0x0f41, 0x1a9f: 0x0259, 0x1aa0: 0x0f51, 0x1aa1: 0x0359, 0x1aa2: 0x0f61, 0x1aa3: 0x0f71, + 0x1aa4: 0x00d9, 0x1aa5: 0x0f99, 0x1aa6: 0x2039, 0x1aa7: 0x0269, 0x1aa8: 0x01d9, 0x1aa9: 0x0fa9, + 0x1aaa: 0x0fb9, 0x1aab: 0x1089, 0x1aac: 0x0279, 0x1aad: 0x0369, 0x1aae: 0x0289, 0x1aaf: 0x13d1, + 0x1ab0: 0x0039, 0x1ab1: 0x0ee9, 0x1ab2: 0x1159, 0x1ab3: 0x0ef9, 0x1ab4: 0x0f09, 0x1ab5: 0x1199, + 0x1ab6: 0x0f31, 0x1ab7: 0x0249, 0x1ab8: 0x0f41, 0x1ab9: 0x0259, 0x1aba: 0x0f51, 0x1abb: 0x0359, + 0x1abc: 0x0f61, 0x1abd: 0x0f71, 0x1abe: 0x00d9, 0x1abf: 0x0f99, + // Block 0x6b, offset 0x1ac0 + 0x1ac0: 0x2039, 0x1ac1: 0x0269, 0x1ac2: 0x01d9, 0x1ac3: 0x0fa9, 0x1ac4: 0x0fb9, 0x1ac5: 0x1089, + 0x1ac6: 0x0279, 0x1ac7: 0x0369, 0x1ac8: 0x0289, 0x1ac9: 0x13d1, 0x1aca: 0x0039, 0x1acb: 0x0ee9, + 0x1acc: 0x1159, 0x1acd: 0x0ef9, 0x1ace: 0x0f09, 0x1acf: 0x1199, 0x1ad0: 0x0f31, 0x1ad1: 0x0249, + 0x1ad2: 0x0f41, 0x1ad3: 0x0259, 0x1ad4: 0x0f51, 0x1ad5: 0x0359, 0x1ad6: 0x0f61, 0x1ad7: 0x0f71, + 0x1ad8: 0x00d9, 0x1ad9: 0x0f99, 0x1ada: 0x2039, 0x1adb: 0x0269, 0x1adc: 0x01d9, 0x1add: 0x0fa9, + 0x1ade: 0x0fb9, 0x1adf: 0x1089, 0x1ae0: 0x0279, 0x1ae1: 0x0369, 0x1ae2: 0x0289, 0x1ae3: 0x13d1, + 0x1ae4: 0xba81, 0x1ae5: 0xba99, 0x1ae6: 0x0040, 0x1ae7: 0x0040, 0x1ae8: 0xbab1, 0x1ae9: 0x1099, + 0x1aea: 0x10b1, 0x1aeb: 0x10c9, 0x1aec: 0xbac9, 0x1aed: 0xbae1, 0x1aee: 0xbaf9, 0x1aef: 0x1429, + 0x1af0: 0x1a31, 0x1af1: 0xbb11, 0x1af2: 0xbb29, 0x1af3: 0xbb41, 0x1af4: 0xbb59, 0x1af5: 0xbb71, + 0x1af6: 0xbb89, 0x1af7: 0x2109, 0x1af8: 0x1111, 0x1af9: 0x1429, 0x1afa: 0xbba1, 0x1afb: 0xbbb9, + 0x1afc: 0xbbd1, 0x1afd: 0x10e1, 0x1afe: 0x10f9, 0x1aff: 0xbbe9, + // Block 0x6c, offset 0x1b00 + 0x1b00: 0x2079, 0x1b01: 0xbc01, 0x1b02: 0xbab1, 0x1b03: 0x1099, 0x1b04: 0x10b1, 0x1b05: 0x10c9, + 0x1b06: 0xbac9, 0x1b07: 0xbae1, 0x1b08: 0xbaf9, 0x1b09: 0x1429, 0x1b0a: 0x1a31, 0x1b0b: 0xbb11, + 0x1b0c: 0xbb29, 0x1b0d: 0xbb41, 0x1b0e: 0xbb59, 0x1b0f: 0xbb71, 0x1b10: 0xbb89, 0x1b11: 0x2109, + 0x1b12: 0x1111, 0x1b13: 0xbba1, 0x1b14: 0xbba1, 0x1b15: 0xbbb9, 0x1b16: 0xbbd1, 0x1b17: 0x10e1, + 0x1b18: 0x10f9, 0x1b19: 0xbbe9, 0x1b1a: 0x2079, 0x1b1b: 0xbc21, 0x1b1c: 0xbac9, 0x1b1d: 0x1429, + 0x1b1e: 0xbb11, 0x1b1f: 0x10e1, 0x1b20: 0x1111, 0x1b21: 0x2109, 0x1b22: 0xbab1, 0x1b23: 0x1099, + 0x1b24: 0x10b1, 0x1b25: 0x10c9, 0x1b26: 0xbac9, 0x1b27: 0xbae1, 0x1b28: 0xbaf9, 0x1b29: 0x1429, + 0x1b2a: 0x1a31, 0x1b2b: 0xbb11, 0x1b2c: 0xbb29, 0x1b2d: 0xbb41, 0x1b2e: 0xbb59, 0x1b2f: 0xbb71, + 0x1b30: 0xbb89, 0x1b31: 0x2109, 0x1b32: 0x1111, 0x1b33: 0x1429, 0x1b34: 0xbba1, 0x1b35: 0xbbb9, + 0x1b36: 0xbbd1, 0x1b37: 0x10e1, 0x1b38: 0x10f9, 0x1b39: 0xbbe9, 0x1b3a: 0x2079, 0x1b3b: 0xbc01, + 0x1b3c: 0xbab1, 0x1b3d: 0x1099, 0x1b3e: 0x10b1, 0x1b3f: 0x10c9, + // Block 0x6d, offset 0x1b40 + 0x1b40: 0xbac9, 0x1b41: 0xbae1, 0x1b42: 0xbaf9, 0x1b43: 0x1429, 0x1b44: 0x1a31, 0x1b45: 0xbb11, + 0x1b46: 0xbb29, 0x1b47: 0xbb41, 0x1b48: 0xbb59, 0x1b49: 0xbb71, 0x1b4a: 0xbb89, 0x1b4b: 0x2109, + 0x1b4c: 0x1111, 0x1b4d: 0xbba1, 0x1b4e: 0xbba1, 0x1b4f: 0xbbb9, 0x1b50: 0xbbd1, 0x1b51: 0x10e1, + 0x1b52: 0x10f9, 0x1b53: 0xbbe9, 0x1b54: 0x2079, 0x1b55: 0xbc21, 0x1b56: 0xbac9, 0x1b57: 0x1429, + 0x1b58: 0xbb11, 0x1b59: 0x10e1, 0x1b5a: 0x1111, 0x1b5b: 0x2109, 0x1b5c: 0xbab1, 0x1b5d: 0x1099, + 0x1b5e: 0x10b1, 0x1b5f: 0x10c9, 0x1b60: 0xbac9, 0x1b61: 0xbae1, 0x1b62: 0xbaf9, 0x1b63: 0x1429, + 0x1b64: 0x1a31, 0x1b65: 0xbb11, 0x1b66: 0xbb29, 0x1b67: 0xbb41, 0x1b68: 0xbb59, 0x1b69: 0xbb71, + 0x1b6a: 0xbb89, 0x1b6b: 0x2109, 0x1b6c: 0x1111, 0x1b6d: 0x1429, 0x1b6e: 0xbba1, 0x1b6f: 0xbbb9, + 0x1b70: 0xbbd1, 0x1b71: 0x10e1, 0x1b72: 0x10f9, 0x1b73: 0xbbe9, 0x1b74: 0x2079, 0x1b75: 0xbc01, + 0x1b76: 0xbab1, 0x1b77: 0x1099, 0x1b78: 0x10b1, 0x1b79: 0x10c9, 0x1b7a: 0xbac9, 0x1b7b: 0xbae1, + 0x1b7c: 0xbaf9, 0x1b7d: 0x1429, 0x1b7e: 0x1a31, 0x1b7f: 0xbb11, + // Block 0x6e, offset 0x1b80 + 0x1b80: 0xbb29, 0x1b81: 0xbb41, 0x1b82: 0xbb59, 0x1b83: 0xbb71, 0x1b84: 0xbb89, 0x1b85: 0x2109, + 0x1b86: 0x1111, 0x1b87: 0xbba1, 0x1b88: 0xbba1, 0x1b89: 0xbbb9, 0x1b8a: 0xbbd1, 0x1b8b: 0x10e1, + 0x1b8c: 0x10f9, 0x1b8d: 0xbbe9, 0x1b8e: 0x2079, 0x1b8f: 0xbc21, 0x1b90: 0xbac9, 0x1b91: 0x1429, + 0x1b92: 0xbb11, 0x1b93: 0x10e1, 0x1b94: 0x1111, 0x1b95: 0x2109, 0x1b96: 0xbab1, 0x1b97: 0x1099, + 0x1b98: 0x10b1, 0x1b99: 0x10c9, 0x1b9a: 0xbac9, 0x1b9b: 0xbae1, 0x1b9c: 0xbaf9, 0x1b9d: 0x1429, + 0x1b9e: 0x1a31, 0x1b9f: 0xbb11, 0x1ba0: 0xbb29, 0x1ba1: 0xbb41, 0x1ba2: 0xbb59, 0x1ba3: 0xbb71, + 0x1ba4: 0xbb89, 0x1ba5: 0x2109, 0x1ba6: 0x1111, 0x1ba7: 0x1429, 0x1ba8: 0xbba1, 0x1ba9: 0xbbb9, + 0x1baa: 0xbbd1, 0x1bab: 0x10e1, 0x1bac: 0x10f9, 0x1bad: 0xbbe9, 0x1bae: 0x2079, 0x1baf: 0xbc01, + 0x1bb0: 0xbab1, 0x1bb1: 0x1099, 0x1bb2: 0x10b1, 0x1bb3: 0x10c9, 0x1bb4: 0xbac9, 0x1bb5: 0xbae1, + 0x1bb6: 0xbaf9, 0x1bb7: 0x1429, 0x1bb8: 0x1a31, 0x1bb9: 0xbb11, 0x1bba: 0xbb29, 0x1bbb: 0xbb41, + 0x1bbc: 0xbb59, 0x1bbd: 0xbb71, 0x1bbe: 0xbb89, 0x1bbf: 0x2109, + // Block 0x6f, offset 0x1bc0 + 0x1bc0: 0x1111, 0x1bc1: 0xbba1, 0x1bc2: 0xbba1, 0x1bc3: 0xbbb9, 0x1bc4: 0xbbd1, 0x1bc5: 0x10e1, + 0x1bc6: 0x10f9, 0x1bc7: 0xbbe9, 0x1bc8: 0x2079, 0x1bc9: 0xbc21, 0x1bca: 0xbac9, 0x1bcb: 0x1429, + 0x1bcc: 0xbb11, 0x1bcd: 0x10e1, 0x1bce: 0x1111, 0x1bcf: 0x2109, 0x1bd0: 0xbab1, 0x1bd1: 0x1099, + 0x1bd2: 0x10b1, 0x1bd3: 0x10c9, 0x1bd4: 0xbac9, 0x1bd5: 0xbae1, 0x1bd6: 0xbaf9, 0x1bd7: 0x1429, + 0x1bd8: 0x1a31, 0x1bd9: 0xbb11, 0x1bda: 0xbb29, 0x1bdb: 0xbb41, 0x1bdc: 0xbb59, 0x1bdd: 0xbb71, + 0x1bde: 0xbb89, 0x1bdf: 0x2109, 0x1be0: 0x1111, 0x1be1: 0x1429, 0x1be2: 0xbba1, 0x1be3: 0xbbb9, + 0x1be4: 0xbbd1, 0x1be5: 0x10e1, 0x1be6: 0x10f9, 0x1be7: 0xbbe9, 0x1be8: 0x2079, 0x1be9: 0xbc01, + 0x1bea: 0xbab1, 0x1beb: 0x1099, 0x1bec: 0x10b1, 0x1bed: 0x10c9, 0x1bee: 0xbac9, 0x1bef: 0xbae1, + 0x1bf0: 0xbaf9, 0x1bf1: 0x1429, 0x1bf2: 0x1a31, 0x1bf3: 0xbb11, 0x1bf4: 0xbb29, 0x1bf5: 0xbb41, + 0x1bf6: 0xbb59, 0x1bf7: 0xbb71, 0x1bf8: 0xbb89, 0x1bf9: 0x2109, 0x1bfa: 0x1111, 0x1bfb: 0xbba1, + 0x1bfc: 0xbba1, 0x1bfd: 0xbbb9, 0x1bfe: 0xbbd1, 0x1bff: 0x10e1, + // Block 0x70, offset 0x1c00 + 0x1c00: 0x10f9, 0x1c01: 0xbbe9, 0x1c02: 0x2079, 0x1c03: 0xbc21, 0x1c04: 0xbac9, 0x1c05: 0x1429, + 0x1c06: 0xbb11, 0x1c07: 0x10e1, 0x1c08: 0x1111, 0x1c09: 0x2109, 0x1c0a: 0xbc41, 0x1c0b: 0xbc41, + 0x1c0c: 0x0040, 0x1c0d: 0x0040, 0x1c0e: 0x1f41, 0x1c0f: 0x00c9, 0x1c10: 0x0069, 0x1c11: 0x0079, + 0x1c12: 0x1f51, 0x1c13: 0x1f61, 0x1c14: 0x1f71, 0x1c15: 0x1f81, 0x1c16: 0x1f91, 0x1c17: 0x1fa1, + 0x1c18: 0x1f41, 0x1c19: 0x00c9, 0x1c1a: 0x0069, 0x1c1b: 0x0079, 0x1c1c: 0x1f51, 0x1c1d: 0x1f61, + 0x1c1e: 0x1f71, 0x1c1f: 0x1f81, 0x1c20: 0x1f91, 0x1c21: 0x1fa1, 0x1c22: 0x1f41, 0x1c23: 0x00c9, + 0x1c24: 0x0069, 0x1c25: 0x0079, 0x1c26: 0x1f51, 0x1c27: 0x1f61, 0x1c28: 0x1f71, 0x1c29: 0x1f81, + 0x1c2a: 0x1f91, 0x1c2b: 0x1fa1, 0x1c2c: 0x1f41, 0x1c2d: 0x00c9, 0x1c2e: 0x0069, 0x1c2f: 0x0079, + 0x1c30: 0x1f51, 0x1c31: 0x1f61, 0x1c32: 0x1f71, 0x1c33: 0x1f81, 0x1c34: 0x1f91, 0x1c35: 0x1fa1, + 0x1c36: 0x1f41, 0x1c37: 0x00c9, 0x1c38: 0x0069, 0x1c39: 0x0079, 0x1c3a: 0x1f51, 0x1c3b: 0x1f61, + 0x1c3c: 0x1f71, 0x1c3d: 0x1f81, 0x1c3e: 0x1f91, 0x1c3f: 0x1fa1, + // Block 0x71, offset 0x1c40 + 0x1c40: 0xe115, 0x1c41: 0xe115, 0x1c42: 0xe135, 0x1c43: 0xe135, 0x1c44: 0xe115, 0x1c45: 0xe115, + 0x1c46: 0xe175, 0x1c47: 0xe175, 0x1c48: 0xe115, 0x1c49: 0xe115, 0x1c4a: 0xe135, 0x1c4b: 0xe135, + 0x1c4c: 0xe115, 0x1c4d: 0xe115, 0x1c4e: 0xe1f5, 0x1c4f: 0xe1f5, 0x1c50: 0xe115, 0x1c51: 0xe115, + 0x1c52: 0xe135, 0x1c53: 0xe135, 0x1c54: 0xe115, 0x1c55: 0xe115, 0x1c56: 0xe175, 0x1c57: 0xe175, + 0x1c58: 0xe115, 0x1c59: 0xe115, 0x1c5a: 0xe135, 0x1c5b: 0xe135, 0x1c5c: 0xe115, 0x1c5d: 0xe115, + 0x1c5e: 0x8b05, 0x1c5f: 0x8b05, 0x1c60: 0x04b5, 0x1c61: 0x04b5, 0x1c62: 0x0a08, 0x1c63: 0x0a08, + 0x1c64: 0x0a08, 0x1c65: 0x0a08, 0x1c66: 0x0a08, 0x1c67: 0x0a08, 0x1c68: 0x0a08, 0x1c69: 0x0a08, + 0x1c6a: 0x0a08, 0x1c6b: 0x0a08, 0x1c6c: 0x0a08, 0x1c6d: 0x0a08, 0x1c6e: 0x0a08, 0x1c6f: 0x0a08, + 0x1c70: 0x0a08, 0x1c71: 0x0a08, 0x1c72: 0x0a08, 0x1c73: 0x0a08, 0x1c74: 0x0a08, 0x1c75: 0x0a08, + 0x1c76: 0x0a08, 0x1c77: 0x0a08, 0x1c78: 0x0a08, 0x1c79: 0x0a08, 0x1c7a: 0x0a08, 0x1c7b: 0x0a08, + 0x1c7c: 0x0a08, 0x1c7d: 0x0a08, 0x1c7e: 0x0a08, 0x1c7f: 0x0a08, + // Block 0x72, offset 0x1c80 + 0x1c80: 0xb189, 0x1c81: 0xb1a1, 0x1c82: 0xb201, 0x1c83: 0xb249, 0x1c84: 0x0040, 0x1c85: 0xb411, + 0x1c86: 0xb291, 0x1c87: 0xb219, 0x1c88: 0xb309, 0x1c89: 0xb429, 0x1c8a: 0xb399, 0x1c8b: 0xb3b1, + 0x1c8c: 0xb3c9, 0x1c8d: 0xb3e1, 0x1c8e: 0xb2a9, 0x1c8f: 0xb339, 0x1c90: 0xb369, 0x1c91: 0xb2d9, + 0x1c92: 0xb381, 0x1c93: 0xb279, 0x1c94: 0xb2c1, 0x1c95: 0xb1d1, 0x1c96: 0xb1e9, 0x1c97: 0xb231, + 0x1c98: 0xb261, 0x1c99: 0xb2f1, 0x1c9a: 0xb321, 0x1c9b: 0xb351, 0x1c9c: 0xbc59, 0x1c9d: 0x7949, + 0x1c9e: 0xbc71, 0x1c9f: 0xbc89, 0x1ca0: 0x0040, 0x1ca1: 0xb1a1, 0x1ca2: 0xb201, 0x1ca3: 0x0040, + 0x1ca4: 0xb3f9, 0x1ca5: 0x0040, 0x1ca6: 0x0040, 0x1ca7: 0xb219, 0x1ca8: 0x0040, 0x1ca9: 0xb429, + 0x1caa: 0xb399, 0x1cab: 0xb3b1, 0x1cac: 0xb3c9, 0x1cad: 0xb3e1, 0x1cae: 0xb2a9, 0x1caf: 0xb339, + 0x1cb0: 0xb369, 0x1cb1: 0xb2d9, 0x1cb2: 0xb381, 0x1cb3: 0x0040, 0x1cb4: 0xb2c1, 0x1cb5: 0xb1d1, + 0x1cb6: 0xb1e9, 0x1cb7: 0xb231, 0x1cb8: 0x0040, 0x1cb9: 0xb2f1, 0x1cba: 0x0040, 0x1cbb: 0xb351, + 0x1cbc: 0x0040, 0x1cbd: 0x0040, 0x1cbe: 0x0040, 0x1cbf: 0x0040, + // Block 0x73, offset 0x1cc0 + 0x1cc0: 0x0040, 0x1cc1: 0x0040, 0x1cc2: 0xb201, 0x1cc3: 0x0040, 0x1cc4: 0x0040, 0x1cc5: 0x0040, + 0x1cc6: 0x0040, 0x1cc7: 0xb219, 0x1cc8: 0x0040, 0x1cc9: 0xb429, 0x1cca: 0x0040, 0x1ccb: 0xb3b1, + 0x1ccc: 0x0040, 0x1ccd: 0xb3e1, 0x1cce: 0xb2a9, 0x1ccf: 0xb339, 0x1cd0: 0x0040, 0x1cd1: 0xb2d9, + 0x1cd2: 0xb381, 0x1cd3: 0x0040, 0x1cd4: 0xb2c1, 0x1cd5: 0x0040, 0x1cd6: 0x0040, 0x1cd7: 0xb231, + 0x1cd8: 0x0040, 0x1cd9: 0xb2f1, 0x1cda: 0x0040, 0x1cdb: 0xb351, 0x1cdc: 0x0040, 0x1cdd: 0x7949, + 0x1cde: 0x0040, 0x1cdf: 0xbc89, 0x1ce0: 0x0040, 0x1ce1: 0xb1a1, 0x1ce2: 0xb201, 0x1ce3: 0x0040, + 0x1ce4: 0xb3f9, 0x1ce5: 0x0040, 0x1ce6: 0x0040, 0x1ce7: 0xb219, 0x1ce8: 0xb309, 0x1ce9: 0xb429, + 0x1cea: 0xb399, 0x1ceb: 0x0040, 0x1cec: 0xb3c9, 0x1ced: 0xb3e1, 0x1cee: 0xb2a9, 0x1cef: 0xb339, + 0x1cf0: 0xb369, 0x1cf1: 0xb2d9, 0x1cf2: 0xb381, 0x1cf3: 0x0040, 0x1cf4: 0xb2c1, 0x1cf5: 0xb1d1, + 0x1cf6: 0xb1e9, 0x1cf7: 0xb231, 0x1cf8: 0x0040, 0x1cf9: 0xb2f1, 0x1cfa: 0xb321, 0x1cfb: 0xb351, + 0x1cfc: 0xbc59, 0x1cfd: 0x0040, 0x1cfe: 0xbc71, 0x1cff: 0x0040, + // Block 0x74, offset 0x1d00 + 0x1d00: 0xb189, 0x1d01: 0xb1a1, 0x1d02: 0xb201, 0x1d03: 0xb249, 0x1d04: 0xb3f9, 0x1d05: 0xb411, + 0x1d06: 0xb291, 0x1d07: 0xb219, 0x1d08: 0xb309, 0x1d09: 0xb429, 0x1d0a: 0x0040, 0x1d0b: 0xb3b1, + 0x1d0c: 0xb3c9, 0x1d0d: 0xb3e1, 0x1d0e: 0xb2a9, 0x1d0f: 0xb339, 0x1d10: 0xb369, 0x1d11: 0xb2d9, + 0x1d12: 0xb381, 0x1d13: 0xb279, 0x1d14: 0xb2c1, 0x1d15: 0xb1d1, 0x1d16: 0xb1e9, 0x1d17: 0xb231, + 0x1d18: 0xb261, 0x1d19: 0xb2f1, 0x1d1a: 0xb321, 0x1d1b: 0xb351, 0x1d1c: 0x0040, 0x1d1d: 0x0040, + 0x1d1e: 0x0040, 0x1d1f: 0x0040, 0x1d20: 0x0040, 0x1d21: 0xb1a1, 0x1d22: 0xb201, 0x1d23: 0xb249, + 0x1d24: 0x0040, 0x1d25: 0xb411, 0x1d26: 0xb291, 0x1d27: 0xb219, 0x1d28: 0xb309, 0x1d29: 0xb429, + 0x1d2a: 0x0040, 0x1d2b: 0xb3b1, 0x1d2c: 0xb3c9, 0x1d2d: 0xb3e1, 0x1d2e: 0xb2a9, 0x1d2f: 0xb339, + 0x1d30: 0xb369, 0x1d31: 0xb2d9, 0x1d32: 0xb381, 0x1d33: 0xb279, 0x1d34: 0xb2c1, 0x1d35: 0xb1d1, + 0x1d36: 0xb1e9, 0x1d37: 0xb231, 0x1d38: 0xb261, 0x1d39: 0xb2f1, 0x1d3a: 0xb321, 0x1d3b: 0xb351, + 0x1d3c: 0x0040, 0x1d3d: 0x0040, 0x1d3e: 0x0040, 0x1d3f: 0x0040, + // Block 0x75, offset 0x1d40 + 0x1d40: 0x0040, 0x1d41: 0xbca2, 0x1d42: 0xbcba, 0x1d43: 0xbcd2, 0x1d44: 0xbcea, 0x1d45: 0xbd02, + 0x1d46: 0xbd1a, 0x1d47: 0xbd32, 0x1d48: 0xbd4a, 0x1d49: 0xbd62, 0x1d4a: 0xbd7a, 0x1d4b: 0x0018, + 0x1d4c: 0x0018, 0x1d4d: 0x0040, 0x1d4e: 0x0040, 0x1d4f: 0x0040, 0x1d50: 0xbd92, 0x1d51: 0xbdb2, + 0x1d52: 0xbdd2, 0x1d53: 0xbdf2, 0x1d54: 0xbe12, 0x1d55: 0xbe32, 0x1d56: 0xbe52, 0x1d57: 0xbe72, + 0x1d58: 0xbe92, 0x1d59: 0xbeb2, 0x1d5a: 0xbed2, 0x1d5b: 0xbef2, 0x1d5c: 0xbf12, 0x1d5d: 0xbf32, + 0x1d5e: 0xbf52, 0x1d5f: 0xbf72, 0x1d60: 0xbf92, 0x1d61: 0xbfb2, 0x1d62: 0xbfd2, 0x1d63: 0xbff2, + 0x1d64: 0xc012, 0x1d65: 0xc032, 0x1d66: 0xc052, 0x1d67: 0xc072, 0x1d68: 0xc092, 0x1d69: 0xc0b2, + 0x1d6a: 0xc0d1, 0x1d6b: 0x1159, 0x1d6c: 0x0269, 0x1d6d: 0x6671, 0x1d6e: 0xc111, 0x1d6f: 0x0040, + 0x1d70: 0x0039, 0x1d71: 0x0ee9, 0x1d72: 0x1159, 0x1d73: 0x0ef9, 0x1d74: 0x0f09, 0x1d75: 0x1199, + 0x1d76: 0x0f31, 0x1d77: 0x0249, 0x1d78: 0x0f41, 0x1d79: 0x0259, 0x1d7a: 0x0f51, 0x1d7b: 0x0359, + 0x1d7c: 0x0f61, 0x1d7d: 0x0f71, 0x1d7e: 0x00d9, 0x1d7f: 0x0f99, + // Block 0x76, offset 0x1d80 + 0x1d80: 0x2039, 0x1d81: 0x0269, 0x1d82: 0x01d9, 0x1d83: 0x0fa9, 0x1d84: 0x0fb9, 0x1d85: 0x1089, + 0x1d86: 0x0279, 0x1d87: 0x0369, 0x1d88: 0x0289, 0x1d89: 0x13d1, 0x1d8a: 0xc129, 0x1d8b: 0x65b1, + 0x1d8c: 0xc141, 0x1d8d: 0x1441, 0x1d8e: 0xc159, 0x1d8f: 0xc179, 0x1d90: 0x0018, 0x1d91: 0x0018, + 0x1d92: 0x0018, 0x1d93: 0x0018, 0x1d94: 0x0018, 0x1d95: 0x0018, 0x1d96: 0x0018, 0x1d97: 0x0018, + 0x1d98: 0x0018, 0x1d99: 0x0018, 0x1d9a: 0x0018, 0x1d9b: 0x0018, 0x1d9c: 0x0018, 0x1d9d: 0x0018, + 0x1d9e: 0x0018, 0x1d9f: 0x0018, 0x1da0: 0x0018, 0x1da1: 0x0018, 0x1da2: 0x0018, 0x1da3: 0x0018, + 0x1da4: 0x0018, 0x1da5: 0x0018, 0x1da6: 0x0018, 0x1da7: 0x0018, 0x1da8: 0x0018, 0x1da9: 0x0018, + 0x1daa: 0xc191, 0x1dab: 0xc1a9, 0x1dac: 0x0040, 0x1dad: 0x0040, 0x1dae: 0x0040, 0x1daf: 0x0040, + 0x1db0: 0x0018, 0x1db1: 0x0018, 0x1db2: 0x0018, 0x1db3: 0x0018, 0x1db4: 0x0018, 0x1db5: 0x0018, + 0x1db6: 0x0018, 0x1db7: 0x0018, 0x1db8: 0x0018, 0x1db9: 0x0018, 0x1dba: 0x0018, 0x1dbb: 0x0018, + 0x1dbc: 0x0018, 0x1dbd: 0x0018, 0x1dbe: 0x0018, 0x1dbf: 0x0018, + // Block 0x77, offset 0x1dc0 + 0x1dc0: 0xc1d9, 0x1dc1: 0xc211, 0x1dc2: 0xc249, 0x1dc3: 0x0040, 0x1dc4: 0x0040, 0x1dc5: 0x0040, + 0x1dc6: 0x0040, 0x1dc7: 0x0040, 0x1dc8: 0x0040, 0x1dc9: 0x0040, 0x1dca: 0x0040, 0x1dcb: 0x0040, + 0x1dcc: 0x0040, 0x1dcd: 0x0040, 0x1dce: 0x0040, 0x1dcf: 0x0040, 0x1dd0: 0xc269, 0x1dd1: 0xc289, + 0x1dd2: 0xc2a9, 0x1dd3: 0xc2c9, 0x1dd4: 0xc2e9, 0x1dd5: 0xc309, 0x1dd6: 0xc329, 0x1dd7: 0xc349, + 0x1dd8: 0xc369, 0x1dd9: 0xc389, 0x1dda: 0xc3a9, 0x1ddb: 0xc3c9, 0x1ddc: 0xc3e9, 0x1ddd: 0xc409, + 0x1dde: 0xc429, 0x1ddf: 0xc449, 0x1de0: 0xc469, 0x1de1: 0xc489, 0x1de2: 0xc4a9, 0x1de3: 0xc4c9, + 0x1de4: 0xc4e9, 0x1de5: 0xc509, 0x1de6: 0xc529, 0x1de7: 0xc549, 0x1de8: 0xc569, 0x1de9: 0xc589, + 0x1dea: 0xc5a9, 0x1deb: 0xc5c9, 0x1dec: 0xc5e9, 0x1ded: 0xc609, 0x1dee: 0xc629, 0x1def: 0xc649, + 0x1df0: 0xc669, 0x1df1: 0xc689, 0x1df2: 0xc6a9, 0x1df3: 0xc6c9, 0x1df4: 0xc6e9, 0x1df5: 0xc709, + 0x1df6: 0xc729, 0x1df7: 0xc749, 0x1df8: 0xc769, 0x1df9: 0xc789, 0x1dfa: 0xc7a9, 0x1dfb: 0xc7c9, + 0x1dfc: 0x0040, 0x1dfd: 0x0040, 0x1dfe: 0x0040, 0x1dff: 0x0040, + // Block 0x78, offset 0x1e00 + 0x1e00: 0xcaf9, 0x1e01: 0xcb19, 0x1e02: 0xcb39, 0x1e03: 0x8b1d, 0x1e04: 0xcb59, 0x1e05: 0xcb79, + 0x1e06: 0xcb99, 0x1e07: 0xcbb9, 0x1e08: 0xcbd9, 0x1e09: 0xcbf9, 0x1e0a: 0xcc19, 0x1e0b: 0xcc39, + 0x1e0c: 0xcc59, 0x1e0d: 0x8b3d, 0x1e0e: 0xcc79, 0x1e0f: 0xcc99, 0x1e10: 0xccb9, 0x1e11: 0xccd9, + 0x1e12: 0x8b5d, 0x1e13: 0xccf9, 0x1e14: 0xcd19, 0x1e15: 0xc429, 0x1e16: 0x8b7d, 0x1e17: 0xcd39, + 0x1e18: 0xcd59, 0x1e19: 0xcd79, 0x1e1a: 0xcd99, 0x1e1b: 0xcdb9, 0x1e1c: 0x8b9d, 0x1e1d: 0xcdd9, + 0x1e1e: 0xcdf9, 0x1e1f: 0xce19, 0x1e20: 0xce39, 0x1e21: 0xce59, 0x1e22: 0xc789, 0x1e23: 0xce79, + 0x1e24: 0xce99, 0x1e25: 0xceb9, 0x1e26: 0xced9, 0x1e27: 0xcef9, 0x1e28: 0xcf19, 0x1e29: 0xcf39, + 0x1e2a: 0xcf59, 0x1e2b: 0xcf79, 0x1e2c: 0xcf99, 0x1e2d: 0xcfb9, 0x1e2e: 0xcfd9, 0x1e2f: 0xcff9, + 0x1e30: 0xd019, 0x1e31: 0xd039, 0x1e32: 0xd039, 0x1e33: 0xd039, 0x1e34: 0x8bbd, 0x1e35: 0xd059, + 0x1e36: 0xd079, 0x1e37: 0xd099, 0x1e38: 0x8bdd, 0x1e39: 0xd0b9, 0x1e3a: 0xd0d9, 0x1e3b: 0xd0f9, + 0x1e3c: 0xd119, 0x1e3d: 0xd139, 0x1e3e: 0xd159, 0x1e3f: 0xd179, + // Block 0x79, offset 0x1e40 + 0x1e40: 0xd199, 0x1e41: 0xd1b9, 0x1e42: 0xd1d9, 0x1e43: 0xd1f9, 0x1e44: 0xd219, 0x1e45: 0xd239, + 0x1e46: 0xd239, 0x1e47: 0xd259, 0x1e48: 0xd279, 0x1e49: 0xd299, 0x1e4a: 0xd2b9, 0x1e4b: 0xd2d9, + 0x1e4c: 0xd2f9, 0x1e4d: 0xd319, 0x1e4e: 0xd339, 0x1e4f: 0xd359, 0x1e50: 0xd379, 0x1e51: 0xd399, + 0x1e52: 0xd3b9, 0x1e53: 0xd3d9, 0x1e54: 0xd3f9, 0x1e55: 0xd419, 0x1e56: 0xd439, 0x1e57: 0xd459, + 0x1e58: 0xd479, 0x1e59: 0x8bfd, 0x1e5a: 0xd499, 0x1e5b: 0xd4b9, 0x1e5c: 0xd4d9, 0x1e5d: 0xc309, + 0x1e5e: 0xd4f9, 0x1e5f: 0xd519, 0x1e60: 0x8c1d, 0x1e61: 0x8c3d, 0x1e62: 0xd539, 0x1e63: 0xd559, + 0x1e64: 0xd579, 0x1e65: 0xd599, 0x1e66: 0xd5b9, 0x1e67: 0xd5d9, 0x1e68: 0x2040, 0x1e69: 0xd5f9, + 0x1e6a: 0xd619, 0x1e6b: 0xd619, 0x1e6c: 0x8c5d, 0x1e6d: 0xd639, 0x1e6e: 0xd659, 0x1e6f: 0xd679, + 0x1e70: 0xd699, 0x1e71: 0x8c7d, 0x1e72: 0xd6b9, 0x1e73: 0xd6d9, 0x1e74: 0x2040, 0x1e75: 0xd6f9, + 0x1e76: 0xd719, 0x1e77: 0xd739, 0x1e78: 0xd759, 0x1e79: 0xd779, 0x1e7a: 0xd799, 0x1e7b: 0x8c9d, + 0x1e7c: 0xd7b9, 0x1e7d: 0x8cbd, 0x1e7e: 0xd7d9, 0x1e7f: 0xd7f9, + // Block 0x7a, offset 0x1e80 + 0x1e80: 0xd819, 0x1e81: 0xd839, 0x1e82: 0xd859, 0x1e83: 0xd879, 0x1e84: 0xd899, 0x1e85: 0xd8b9, + 0x1e86: 0xd8d9, 0x1e87: 0xd8f9, 0x1e88: 0xd919, 0x1e89: 0x8cdd, 0x1e8a: 0xd939, 0x1e8b: 0xd959, + 0x1e8c: 0xd979, 0x1e8d: 0xd999, 0x1e8e: 0xd9b9, 0x1e8f: 0x8cfd, 0x1e90: 0xd9d9, 0x1e91: 0x8d1d, + 0x1e92: 0x8d3d, 0x1e93: 0xd9f9, 0x1e94: 0xda19, 0x1e95: 0xda19, 0x1e96: 0xda39, 0x1e97: 0x8d5d, + 0x1e98: 0x8d7d, 0x1e99: 0xda59, 0x1e9a: 0xda79, 0x1e9b: 0xda99, 0x1e9c: 0xdab9, 0x1e9d: 0xdad9, + 0x1e9e: 0xdaf9, 0x1e9f: 0xdb19, 0x1ea0: 0xdb39, 0x1ea1: 0xdb59, 0x1ea2: 0xdb79, 0x1ea3: 0xdb99, + 0x1ea4: 0x8d9d, 0x1ea5: 0xdbb9, 0x1ea6: 0xdbd9, 0x1ea7: 0xdbf9, 0x1ea8: 0xdc19, 0x1ea9: 0xdbf9, + 0x1eaa: 0xdc39, 0x1eab: 0xdc59, 0x1eac: 0xdc79, 0x1ead: 0xdc99, 0x1eae: 0xdcb9, 0x1eaf: 0xdcd9, + 0x1eb0: 0xdcf9, 0x1eb1: 0xdd19, 0x1eb2: 0xdd39, 0x1eb3: 0xdd59, 0x1eb4: 0xdd79, 0x1eb5: 0xdd99, + 0x1eb6: 0xddb9, 0x1eb7: 0xddd9, 0x1eb8: 0x8dbd, 0x1eb9: 0xddf9, 0x1eba: 0xde19, 0x1ebb: 0xde39, + 0x1ebc: 0xde59, 0x1ebd: 0xde79, 0x1ebe: 0x8ddd, 0x1ebf: 0xde99, + // Block 0x7b, offset 0x1ec0 + 0x1ec0: 0xe599, 0x1ec1: 0xe5b9, 0x1ec2: 0xe5d9, 0x1ec3: 0xe5f9, 0x1ec4: 0xe619, 0x1ec5: 0xe639, + 0x1ec6: 0x8efd, 0x1ec7: 0xe659, 0x1ec8: 0xe679, 0x1ec9: 0xe699, 0x1eca: 0xe6b9, 0x1ecb: 0xe6d9, + 0x1ecc: 0xe6f9, 0x1ecd: 0x8f1d, 0x1ece: 0xe719, 0x1ecf: 0xe739, 0x1ed0: 0x8f3d, 0x1ed1: 0x8f5d, + 0x1ed2: 0xe759, 0x1ed3: 0xe779, 0x1ed4: 0xe799, 0x1ed5: 0xe7b9, 0x1ed6: 0xe7d9, 0x1ed7: 0xe7f9, + 0x1ed8: 0xe819, 0x1ed9: 0xe839, 0x1eda: 0xe859, 0x1edb: 0x8f7d, 0x1edc: 0xe879, 0x1edd: 0x8f9d, + 0x1ede: 0xe899, 0x1edf: 0x2040, 0x1ee0: 0xe8b9, 0x1ee1: 0xe8d9, 0x1ee2: 0xe8f9, 0x1ee3: 0x8fbd, + 0x1ee4: 0xe919, 0x1ee5: 0xe939, 0x1ee6: 0x8fdd, 0x1ee7: 0x8ffd, 0x1ee8: 0xe959, 0x1ee9: 0xe979, + 0x1eea: 0xe999, 0x1eeb: 0xe9b9, 0x1eec: 0xe9d9, 0x1eed: 0xe9d9, 0x1eee: 0xe9f9, 0x1eef: 0xea19, + 0x1ef0: 0xea39, 0x1ef1: 0xea59, 0x1ef2: 0xea79, 0x1ef3: 0xea99, 0x1ef4: 0xeab9, 0x1ef5: 0x901d, + 0x1ef6: 0xead9, 0x1ef7: 0x903d, 0x1ef8: 0xeaf9, 0x1ef9: 0x905d, 0x1efa: 0xeb19, 0x1efb: 0x907d, + 0x1efc: 0x909d, 0x1efd: 0x90bd, 0x1efe: 0xeb39, 0x1eff: 0xeb59, + // Block 0x7c, offset 0x1f00 + 0x1f00: 0xeb79, 0x1f01: 0x90dd, 0x1f02: 0x90fd, 0x1f03: 0x911d, 0x1f04: 0x913d, 0x1f05: 0xeb99, + 0x1f06: 0xebb9, 0x1f07: 0xebb9, 0x1f08: 0xebd9, 0x1f09: 0xebf9, 0x1f0a: 0xec19, 0x1f0b: 0xec39, + 0x1f0c: 0xec59, 0x1f0d: 0x915d, 0x1f0e: 0xec79, 0x1f0f: 0xec99, 0x1f10: 0xecb9, 0x1f11: 0xecd9, + 0x1f12: 0x917d, 0x1f13: 0xecf9, 0x1f14: 0x919d, 0x1f15: 0x91bd, 0x1f16: 0xed19, 0x1f17: 0xed39, + 0x1f18: 0xed59, 0x1f19: 0xed79, 0x1f1a: 0xed99, 0x1f1b: 0xedb9, 0x1f1c: 0x91dd, 0x1f1d: 0x91fd, + 0x1f1e: 0x921d, 0x1f1f: 0x2040, 0x1f20: 0xedd9, 0x1f21: 0x923d, 0x1f22: 0xedf9, 0x1f23: 0xee19, + 0x1f24: 0xee39, 0x1f25: 0x925d, 0x1f26: 0xee59, 0x1f27: 0xee79, 0x1f28: 0xee99, 0x1f29: 0xeeb9, + 0x1f2a: 0xeed9, 0x1f2b: 0x927d, 0x1f2c: 0xeef9, 0x1f2d: 0xef19, 0x1f2e: 0xef39, 0x1f2f: 0xef59, + 0x1f30: 0xef79, 0x1f31: 0xef99, 0x1f32: 0x929d, 0x1f33: 0x92bd, 0x1f34: 0xefb9, 0x1f35: 0x92dd, + 0x1f36: 0xefd9, 0x1f37: 0x92fd, 0x1f38: 0xeff9, 0x1f39: 0xf019, 0x1f3a: 0xf039, 0x1f3b: 0x931d, + 0x1f3c: 0x933d, 0x1f3d: 0xf059, 0x1f3e: 0x935d, 0x1f3f: 0xf079, + // Block 0x7d, offset 0x1f40 + 0x1f40: 0xf6b9, 0x1f41: 0xf6d9, 0x1f42: 0xf6f9, 0x1f43: 0xf719, 0x1f44: 0xf739, 0x1f45: 0x951d, + 0x1f46: 0xf759, 0x1f47: 0xf779, 0x1f48: 0xf799, 0x1f49: 0xf7b9, 0x1f4a: 0xf7d9, 0x1f4b: 0x953d, + 0x1f4c: 0x955d, 0x1f4d: 0xf7f9, 0x1f4e: 0xf819, 0x1f4f: 0xf839, 0x1f50: 0xf859, 0x1f51: 0xf879, + 0x1f52: 0xf899, 0x1f53: 0x957d, 0x1f54: 0xf8b9, 0x1f55: 0xf8d9, 0x1f56: 0xf8f9, 0x1f57: 0xf919, + 0x1f58: 0x959d, 0x1f59: 0x95bd, 0x1f5a: 0xf939, 0x1f5b: 0xf959, 0x1f5c: 0xf979, 0x1f5d: 0x95dd, + 0x1f5e: 0xf999, 0x1f5f: 0xf9b9, 0x1f60: 0x6815, 0x1f61: 0x95fd, 0x1f62: 0xf9d9, 0x1f63: 0xf9f9, + 0x1f64: 0xfa19, 0x1f65: 0x961d, 0x1f66: 0xfa39, 0x1f67: 0xfa59, 0x1f68: 0xfa79, 0x1f69: 0xfa99, + 0x1f6a: 0xfab9, 0x1f6b: 0xfad9, 0x1f6c: 0xfaf9, 0x1f6d: 0x963d, 0x1f6e: 0xfb19, 0x1f6f: 0xfb39, + 0x1f70: 0xfb59, 0x1f71: 0x965d, 0x1f72: 0xfb79, 0x1f73: 0xfb99, 0x1f74: 0xfbb9, 0x1f75: 0xfbd9, + 0x1f76: 0x7b35, 0x1f77: 0x967d, 0x1f78: 0xfbf9, 0x1f79: 0xfc19, 0x1f7a: 0xfc39, 0x1f7b: 0x969d, + 0x1f7c: 0xfc59, 0x1f7d: 0x96bd, 0x1f7e: 0xfc79, 0x1f7f: 0xfc79, + // Block 0x7e, offset 0x1f80 + 0x1f80: 0xfc99, 0x1f81: 0x96dd, 0x1f82: 0xfcb9, 0x1f83: 0xfcd9, 0x1f84: 0xfcf9, 0x1f85: 0xfd19, + 0x1f86: 0xfd39, 0x1f87: 0xfd59, 0x1f88: 0xfd79, 0x1f89: 0x96fd, 0x1f8a: 0xfd99, 0x1f8b: 0xfdb9, + 0x1f8c: 0xfdd9, 0x1f8d: 0xfdf9, 0x1f8e: 0xfe19, 0x1f8f: 0xfe39, 0x1f90: 0x971d, 0x1f91: 0xfe59, + 0x1f92: 0x973d, 0x1f93: 0x975d, 0x1f94: 0x977d, 0x1f95: 0xfe79, 0x1f96: 0xfe99, 0x1f97: 0xfeb9, + 0x1f98: 0xfed9, 0x1f99: 0xfef9, 0x1f9a: 0xff19, 0x1f9b: 0xff39, 0x1f9c: 0xff59, 0x1f9d: 0x979d, + 0x1f9e: 0x0040, 0x1f9f: 0x0040, 0x1fa0: 0x0040, 0x1fa1: 0x0040, 0x1fa2: 0x0040, 0x1fa3: 0x0040, + 0x1fa4: 0x0040, 0x1fa5: 0x0040, 0x1fa6: 0x0040, 0x1fa7: 0x0040, 0x1fa8: 0x0040, 0x1fa9: 0x0040, + 0x1faa: 0x0040, 0x1fab: 0x0040, 0x1fac: 0x0040, 0x1fad: 0x0040, 0x1fae: 0x0040, 0x1faf: 0x0040, + 0x1fb0: 0x0040, 0x1fb1: 0x0040, 0x1fb2: 0x0040, 0x1fb3: 0x0040, 0x1fb4: 0x0040, 0x1fb5: 0x0040, + 0x1fb6: 0x0040, 0x1fb7: 0x0040, 0x1fb8: 0x0040, 0x1fb9: 0x0040, 0x1fba: 0x0040, 0x1fbb: 0x0040, + 0x1fbc: 0x0040, 0x1fbd: 0x0040, 0x1fbe: 0x0040, 0x1fbf: 0x0040, +} + +// idnaIndex: 36 blocks, 2304 entries, 4608 bytes +// Block 0 is the zero block. +var idnaIndex = [2304]uint16{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x7d, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x04, 0xc7: 0x05, + 0xc8: 0x06, 0xc9: 0x7e, 0xca: 0x7f, 0xcb: 0x07, 0xcc: 0x80, 0xcd: 0x08, 0xce: 0x09, 0xcf: 0x0a, + 0xd0: 0x81, 0xd1: 0x0b, 0xd2: 0x0c, 0xd3: 0x0d, 0xd4: 0x0e, 0xd5: 0x82, 0xd6: 0x83, 0xd7: 0x84, + 0xd8: 0x0f, 0xd9: 0x10, 0xda: 0x85, 0xdb: 0x11, 0xdc: 0x12, 0xdd: 0x86, 0xde: 0x87, 0xdf: 0x88, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, 0xe5: 0x07, 0xe6: 0x07, 0xe7: 0x07, + 0xe8: 0x07, 0xe9: 0x08, 0xea: 0x09, 0xeb: 0x07, 0xec: 0x07, 0xed: 0x0a, 0xee: 0x0b, 0xef: 0x0c, + 0xf0: 0x1d, 0xf1: 0x1e, 0xf2: 0x1e, 0xf3: 0x20, 0xf4: 0x21, + // Block 0x4, offset 0x100 + 0x120: 0x89, 0x121: 0x13, 0x122: 0x8a, 0x123: 0x8b, 0x124: 0x8c, 0x125: 0x14, 0x126: 0x15, 0x127: 0x16, + 0x128: 0x17, 0x129: 0x18, 0x12a: 0x19, 0x12b: 0x1a, 0x12c: 0x1b, 0x12d: 0x1c, 0x12e: 0x1d, 0x12f: 0x8d, + 0x130: 0x8e, 0x131: 0x1e, 0x132: 0x1f, 0x133: 0x20, 0x134: 0x8f, 0x135: 0x21, 0x136: 0x90, 0x137: 0x91, + 0x138: 0x92, 0x139: 0x93, 0x13a: 0x22, 0x13b: 0x94, 0x13c: 0x95, 0x13d: 0x23, 0x13e: 0x24, 0x13f: 0x96, + // Block 0x5, offset 0x140 + 0x140: 0x97, 0x141: 0x98, 0x142: 0x99, 0x143: 0x9a, 0x144: 0x9b, 0x145: 0x9c, 0x146: 0x9d, 0x147: 0x9e, + 0x148: 0x9f, 0x149: 0xa0, 0x14a: 0xa1, 0x14b: 0xa2, 0x14c: 0xa3, 0x14d: 0xa4, 0x14e: 0xa5, 0x14f: 0xa6, + 0x150: 0xa7, 0x151: 0x9f, 0x152: 0x9f, 0x153: 0x9f, 0x154: 0x9f, 0x155: 0x9f, 0x156: 0x9f, 0x157: 0x9f, + 0x158: 0x9f, 0x159: 0xa8, 0x15a: 0xa9, 0x15b: 0xaa, 0x15c: 0xab, 0x15d: 0xac, 0x15e: 0xad, 0x15f: 0xae, + 0x160: 0xaf, 0x161: 0xb0, 0x162: 0xb1, 0x163: 0xb2, 0x164: 0xb3, 0x165: 0xb4, 0x166: 0xb5, 0x167: 0xb6, + 0x168: 0xb7, 0x169: 0xb8, 0x16a: 0xb9, 0x16b: 0xba, 0x16c: 0xbb, 0x16d: 0xbc, 0x16e: 0xbd, 0x16f: 0xbe, + 0x170: 0xbf, 0x171: 0xc0, 0x172: 0xc1, 0x173: 0xc2, 0x174: 0x25, 0x175: 0x26, 0x176: 0x27, 0x177: 0xc3, + 0x178: 0x28, 0x179: 0x28, 0x17a: 0x29, 0x17b: 0x28, 0x17c: 0xc4, 0x17d: 0x2a, 0x17e: 0x2b, 0x17f: 0x2c, + // Block 0x6, offset 0x180 + 0x180: 0x2d, 0x181: 0x2e, 0x182: 0x2f, 0x183: 0xc5, 0x184: 0x30, 0x185: 0x31, 0x186: 0xc6, 0x187: 0x9b, + 0x188: 0xc7, 0x189: 0xc8, 0x18a: 0x9b, 0x18b: 0x9b, 0x18c: 0xc9, 0x18d: 0x9b, 0x18e: 0x9b, 0x18f: 0x9b, + 0x190: 0xca, 0x191: 0x32, 0x192: 0x33, 0x193: 0x34, 0x194: 0x9b, 0x195: 0x9b, 0x196: 0x9b, 0x197: 0x9b, + 0x198: 0x9b, 0x199: 0x9b, 0x19a: 0x9b, 0x19b: 0x9b, 0x19c: 0x9b, 0x19d: 0x9b, 0x19e: 0x9b, 0x19f: 0x9b, + 0x1a0: 0x9b, 0x1a1: 0x9b, 0x1a2: 0x9b, 0x1a3: 0x9b, 0x1a4: 0x9b, 0x1a5: 0x9b, 0x1a6: 0x9b, 0x1a7: 0x9b, + 0x1a8: 0xcb, 0x1a9: 0xcc, 0x1aa: 0x9b, 0x1ab: 0xcd, 0x1ac: 0x9b, 0x1ad: 0xce, 0x1ae: 0xcf, 0x1af: 0xd0, + 0x1b0: 0xd1, 0x1b1: 0x35, 0x1b2: 0x28, 0x1b3: 0x36, 0x1b4: 0xd2, 0x1b5: 0xd3, 0x1b6: 0xd4, 0x1b7: 0xd5, + 0x1b8: 0xd6, 0x1b9: 0xd7, 0x1ba: 0xd8, 0x1bb: 0xd9, 0x1bc: 0xda, 0x1bd: 0xdb, 0x1be: 0xdc, 0x1bf: 0x37, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x38, 0x1c1: 0xdd, 0x1c2: 0xde, 0x1c3: 0xdf, 0x1c4: 0xe0, 0x1c5: 0x39, 0x1c6: 0x3a, 0x1c7: 0xe1, + 0x1c8: 0xe2, 0x1c9: 0x3b, 0x1ca: 0x3c, 0x1cb: 0x3d, 0x1cc: 0x3e, 0x1cd: 0x3f, 0x1ce: 0x40, 0x1cf: 0x41, + 0x1d0: 0x9f, 0x1d1: 0x9f, 0x1d2: 0x9f, 0x1d3: 0x9f, 0x1d4: 0x9f, 0x1d5: 0x9f, 0x1d6: 0x9f, 0x1d7: 0x9f, + 0x1d8: 0x9f, 0x1d9: 0x9f, 0x1da: 0x9f, 0x1db: 0x9f, 0x1dc: 0x9f, 0x1dd: 0x9f, 0x1de: 0x9f, 0x1df: 0x9f, + 0x1e0: 0x9f, 0x1e1: 0x9f, 0x1e2: 0x9f, 0x1e3: 0x9f, 0x1e4: 0x9f, 0x1e5: 0x9f, 0x1e6: 0x9f, 0x1e7: 0x9f, + 0x1e8: 0x9f, 0x1e9: 0x9f, 0x1ea: 0x9f, 0x1eb: 0x9f, 0x1ec: 0x9f, 0x1ed: 0x9f, 0x1ee: 0x9f, 0x1ef: 0x9f, + 0x1f0: 0x9f, 0x1f1: 0x9f, 0x1f2: 0x9f, 0x1f3: 0x9f, 0x1f4: 0x9f, 0x1f5: 0x9f, 0x1f6: 0x9f, 0x1f7: 0x9f, + 0x1f8: 0x9f, 0x1f9: 0x9f, 0x1fa: 0x9f, 0x1fb: 0x9f, 0x1fc: 0x9f, 0x1fd: 0x9f, 0x1fe: 0x9f, 0x1ff: 0x9f, + // Block 0x8, offset 0x200 + 0x200: 0x9f, 0x201: 0x9f, 0x202: 0x9f, 0x203: 0x9f, 0x204: 0x9f, 0x205: 0x9f, 0x206: 0x9f, 0x207: 0x9f, + 0x208: 0x9f, 0x209: 0x9f, 0x20a: 0x9f, 0x20b: 0x9f, 0x20c: 0x9f, 0x20d: 0x9f, 0x20e: 0x9f, 0x20f: 0x9f, + 0x210: 0x9f, 0x211: 0x9f, 0x212: 0x9f, 0x213: 0x9f, 0x214: 0x9f, 0x215: 0x9f, 0x216: 0x9f, 0x217: 0x9f, + 0x218: 0x9f, 0x219: 0x9f, 0x21a: 0x9f, 0x21b: 0x9f, 0x21c: 0x9f, 0x21d: 0x9f, 0x21e: 0x9f, 0x21f: 0x9f, + 0x220: 0x9f, 0x221: 0x9f, 0x222: 0x9f, 0x223: 0x9f, 0x224: 0x9f, 0x225: 0x9f, 0x226: 0x9f, 0x227: 0x9f, + 0x228: 0x9f, 0x229: 0x9f, 0x22a: 0x9f, 0x22b: 0x9f, 0x22c: 0x9f, 0x22d: 0x9f, 0x22e: 0x9f, 0x22f: 0x9f, + 0x230: 0x9f, 0x231: 0x9f, 0x232: 0x9f, 0x233: 0x9f, 0x234: 0x9f, 0x235: 0x9f, 0x236: 0xb2, 0x237: 0x9b, + 0x238: 0x9f, 0x239: 0x9f, 0x23a: 0x9f, 0x23b: 0x9f, 0x23c: 0x9f, 0x23d: 0x9f, 0x23e: 0x9f, 0x23f: 0x9f, + // Block 0x9, offset 0x240 + 0x240: 0x9f, 0x241: 0x9f, 0x242: 0x9f, 0x243: 0x9f, 0x244: 0x9f, 0x245: 0x9f, 0x246: 0x9f, 0x247: 0x9f, + 0x248: 0x9f, 0x249: 0x9f, 0x24a: 0x9f, 0x24b: 0x9f, 0x24c: 0x9f, 0x24d: 0x9f, 0x24e: 0x9f, 0x24f: 0x9f, + 0x250: 0x9f, 0x251: 0x9f, 0x252: 0x9f, 0x253: 0x9f, 0x254: 0x9f, 0x255: 0x9f, 0x256: 0x9f, 0x257: 0x9f, + 0x258: 0x9f, 0x259: 0x9f, 0x25a: 0x9f, 0x25b: 0x9f, 0x25c: 0x9f, 0x25d: 0x9f, 0x25e: 0x9f, 0x25f: 0x9f, + 0x260: 0x9f, 0x261: 0x9f, 0x262: 0x9f, 0x263: 0x9f, 0x264: 0x9f, 0x265: 0x9f, 0x266: 0x9f, 0x267: 0x9f, + 0x268: 0x9f, 0x269: 0x9f, 0x26a: 0x9f, 0x26b: 0x9f, 0x26c: 0x9f, 0x26d: 0x9f, 0x26e: 0x9f, 0x26f: 0x9f, + 0x270: 0x9f, 0x271: 0x9f, 0x272: 0x9f, 0x273: 0x9f, 0x274: 0x9f, 0x275: 0x9f, 0x276: 0x9f, 0x277: 0x9f, + 0x278: 0x9f, 0x279: 0x9f, 0x27a: 0x9f, 0x27b: 0x9f, 0x27c: 0x9f, 0x27d: 0x9f, 0x27e: 0x9f, 0x27f: 0x9f, + // Block 0xa, offset 0x280 + 0x280: 0x9f, 0x281: 0x9f, 0x282: 0x9f, 0x283: 0x9f, 0x284: 0x9f, 0x285: 0x9f, 0x286: 0x9f, 0x287: 0x9f, + 0x288: 0x9f, 0x289: 0x9f, 0x28a: 0x9f, 0x28b: 0x9f, 0x28c: 0x9f, 0x28d: 0x9f, 0x28e: 0x9f, 0x28f: 0x9f, + 0x290: 0x9f, 0x291: 0x9f, 0x292: 0x9f, 0x293: 0x9f, 0x294: 0x9f, 0x295: 0x9f, 0x296: 0x9f, 0x297: 0x9f, + 0x298: 0x9f, 0x299: 0x9f, 0x29a: 0x9f, 0x29b: 0x9f, 0x29c: 0x9f, 0x29d: 0x9f, 0x29e: 0x9f, 0x29f: 0x9f, + 0x2a0: 0x9f, 0x2a1: 0x9f, 0x2a2: 0x9f, 0x2a3: 0x9f, 0x2a4: 0x9f, 0x2a5: 0x9f, 0x2a6: 0x9f, 0x2a7: 0x9f, + 0x2a8: 0x9f, 0x2a9: 0x9f, 0x2aa: 0x9f, 0x2ab: 0x9f, 0x2ac: 0x9f, 0x2ad: 0x9f, 0x2ae: 0x9f, 0x2af: 0x9f, + 0x2b0: 0x9f, 0x2b1: 0x9f, 0x2b2: 0x9f, 0x2b3: 0x9f, 0x2b4: 0x9f, 0x2b5: 0x9f, 0x2b6: 0x9f, 0x2b7: 0x9f, + 0x2b8: 0x9f, 0x2b9: 0x9f, 0x2ba: 0x9f, 0x2bb: 0x9f, 0x2bc: 0x9f, 0x2bd: 0x9f, 0x2be: 0x9f, 0x2bf: 0xe3, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x9f, 0x2c1: 0x9f, 0x2c2: 0x9f, 0x2c3: 0x9f, 0x2c4: 0x9f, 0x2c5: 0x9f, 0x2c6: 0x9f, 0x2c7: 0x9f, + 0x2c8: 0x9f, 0x2c9: 0x9f, 0x2ca: 0x9f, 0x2cb: 0x9f, 0x2cc: 0x9f, 0x2cd: 0x9f, 0x2ce: 0x9f, 0x2cf: 0x9f, + 0x2d0: 0x9f, 0x2d1: 0x9f, 0x2d2: 0xe4, 0x2d3: 0xe5, 0x2d4: 0x9f, 0x2d5: 0x9f, 0x2d6: 0x9f, 0x2d7: 0x9f, + 0x2d8: 0xe6, 0x2d9: 0x42, 0x2da: 0x43, 0x2db: 0xe7, 0x2dc: 0x44, 0x2dd: 0x45, 0x2de: 0x46, 0x2df: 0xe8, + 0x2e0: 0xe9, 0x2e1: 0xea, 0x2e2: 0xeb, 0x2e3: 0xec, 0x2e4: 0xed, 0x2e5: 0xee, 0x2e6: 0xef, 0x2e7: 0xf0, + 0x2e8: 0xf1, 0x2e9: 0xf2, 0x2ea: 0xf3, 0x2eb: 0xf4, 0x2ec: 0xf5, 0x2ed: 0xf6, 0x2ee: 0xf7, 0x2ef: 0xf8, + 0x2f0: 0x9f, 0x2f1: 0x9f, 0x2f2: 0x9f, 0x2f3: 0x9f, 0x2f4: 0x9f, 0x2f5: 0x9f, 0x2f6: 0x9f, 0x2f7: 0x9f, + 0x2f8: 0x9f, 0x2f9: 0x9f, 0x2fa: 0x9f, 0x2fb: 0x9f, 0x2fc: 0x9f, 0x2fd: 0x9f, 0x2fe: 0x9f, 0x2ff: 0x9f, + // Block 0xc, offset 0x300 + 0x300: 0x9f, 0x301: 0x9f, 0x302: 0x9f, 0x303: 0x9f, 0x304: 0x9f, 0x305: 0x9f, 0x306: 0x9f, 0x307: 0x9f, + 0x308: 0x9f, 0x309: 0x9f, 0x30a: 0x9f, 0x30b: 0x9f, 0x30c: 0x9f, 0x30d: 0x9f, 0x30e: 0x9f, 0x30f: 0x9f, + 0x310: 0x9f, 0x311: 0x9f, 0x312: 0x9f, 0x313: 0x9f, 0x314: 0x9f, 0x315: 0x9f, 0x316: 0x9f, 0x317: 0x9f, + 0x318: 0x9f, 0x319: 0x9f, 0x31a: 0x9f, 0x31b: 0x9f, 0x31c: 0x9f, 0x31d: 0x9f, 0x31e: 0xf9, 0x31f: 0xfa, + // Block 0xd, offset 0x340 + 0x340: 0xba, 0x341: 0xba, 0x342: 0xba, 0x343: 0xba, 0x344: 0xba, 0x345: 0xba, 0x346: 0xba, 0x347: 0xba, + 0x348: 0xba, 0x349: 0xba, 0x34a: 0xba, 0x34b: 0xba, 0x34c: 0xba, 0x34d: 0xba, 0x34e: 0xba, 0x34f: 0xba, + 0x350: 0xba, 0x351: 0xba, 0x352: 0xba, 0x353: 0xba, 0x354: 0xba, 0x355: 0xba, 0x356: 0xba, 0x357: 0xba, + 0x358: 0xba, 0x359: 0xba, 0x35a: 0xba, 0x35b: 0xba, 0x35c: 0xba, 0x35d: 0xba, 0x35e: 0xba, 0x35f: 0xba, + 0x360: 0xba, 0x361: 0xba, 0x362: 0xba, 0x363: 0xba, 0x364: 0xba, 0x365: 0xba, 0x366: 0xba, 0x367: 0xba, + 0x368: 0xba, 0x369: 0xba, 0x36a: 0xba, 0x36b: 0xba, 0x36c: 0xba, 0x36d: 0xba, 0x36e: 0xba, 0x36f: 0xba, + 0x370: 0xba, 0x371: 0xba, 0x372: 0xba, 0x373: 0xba, 0x374: 0xba, 0x375: 0xba, 0x376: 0xba, 0x377: 0xba, + 0x378: 0xba, 0x379: 0xba, 0x37a: 0xba, 0x37b: 0xba, 0x37c: 0xba, 0x37d: 0xba, 0x37e: 0xba, 0x37f: 0xba, + // Block 0xe, offset 0x380 + 0x380: 0xba, 0x381: 0xba, 0x382: 0xba, 0x383: 0xba, 0x384: 0xba, 0x385: 0xba, 0x386: 0xba, 0x387: 0xba, + 0x388: 0xba, 0x389: 0xba, 0x38a: 0xba, 0x38b: 0xba, 0x38c: 0xba, 0x38d: 0xba, 0x38e: 0xba, 0x38f: 0xba, + 0x390: 0xba, 0x391: 0xba, 0x392: 0xba, 0x393: 0xba, 0x394: 0xba, 0x395: 0xba, 0x396: 0xba, 0x397: 0xba, + 0x398: 0xba, 0x399: 0xba, 0x39a: 0xba, 0x39b: 0xba, 0x39c: 0xba, 0x39d: 0xba, 0x39e: 0xba, 0x39f: 0xba, + 0x3a0: 0xba, 0x3a1: 0xba, 0x3a2: 0xba, 0x3a3: 0xba, 0x3a4: 0xfb, 0x3a5: 0xfc, 0x3a6: 0xfd, 0x3a7: 0xfe, + 0x3a8: 0x47, 0x3a9: 0xff, 0x3aa: 0x100, 0x3ab: 0x48, 0x3ac: 0x49, 0x3ad: 0x4a, 0x3ae: 0x4b, 0x3af: 0x4c, + 0x3b0: 0x101, 0x3b1: 0x4d, 0x3b2: 0x4e, 0x3b3: 0x4f, 0x3b4: 0x50, 0x3b5: 0x51, 0x3b6: 0x102, 0x3b7: 0x52, + 0x3b8: 0x53, 0x3b9: 0x54, 0x3ba: 0x55, 0x3bb: 0x56, 0x3bc: 0x57, 0x3bd: 0x58, 0x3be: 0x59, 0x3bf: 0x5a, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x103, 0x3c1: 0x104, 0x3c2: 0x9f, 0x3c3: 0x105, 0x3c4: 0x106, 0x3c5: 0x9b, 0x3c6: 0x107, 0x3c7: 0x108, + 0x3c8: 0xba, 0x3c9: 0xba, 0x3ca: 0x109, 0x3cb: 0x10a, 0x3cc: 0x10b, 0x3cd: 0x10c, 0x3ce: 0x10d, 0x3cf: 0x10e, + 0x3d0: 0x10f, 0x3d1: 0x9f, 0x3d2: 0x110, 0x3d3: 0x111, 0x3d4: 0x112, 0x3d5: 0x113, 0x3d6: 0xba, 0x3d7: 0xba, + 0x3d8: 0x9f, 0x3d9: 0x9f, 0x3da: 0x9f, 0x3db: 0x9f, 0x3dc: 0x114, 0x3dd: 0x115, 0x3de: 0xba, 0x3df: 0xba, + 0x3e0: 0x116, 0x3e1: 0x117, 0x3e2: 0x118, 0x3e3: 0x119, 0x3e4: 0x11a, 0x3e5: 0xba, 0x3e6: 0x11b, 0x3e7: 0x11c, + 0x3e8: 0x11d, 0x3e9: 0x11e, 0x3ea: 0x11f, 0x3eb: 0x5b, 0x3ec: 0x120, 0x3ed: 0x121, 0x3ee: 0x5c, 0x3ef: 0xba, + 0x3f0: 0x122, 0x3f1: 0x123, 0x3f2: 0x124, 0x3f3: 0x125, 0x3f4: 0xba, 0x3f5: 0xba, 0x3f6: 0xba, 0x3f7: 0xba, + 0x3f8: 0xba, 0x3f9: 0x126, 0x3fa: 0xba, 0x3fb: 0xba, 0x3fc: 0xba, 0x3fd: 0xba, 0x3fe: 0xba, 0x3ff: 0xba, + // Block 0x10, offset 0x400 + 0x400: 0x127, 0x401: 0x128, 0x402: 0x129, 0x403: 0x12a, 0x404: 0x12b, 0x405: 0x12c, 0x406: 0x12d, 0x407: 0x12e, + 0x408: 0x12f, 0x409: 0xba, 0x40a: 0x130, 0x40b: 0x131, 0x40c: 0x5d, 0x40d: 0x5e, 0x40e: 0xba, 0x40f: 0xba, + 0x410: 0x132, 0x411: 0x133, 0x412: 0x134, 0x413: 0x135, 0x414: 0xba, 0x415: 0xba, 0x416: 0x136, 0x417: 0x137, + 0x418: 0x138, 0x419: 0x139, 0x41a: 0x13a, 0x41b: 0x13b, 0x41c: 0x13c, 0x41d: 0xba, 0x41e: 0xba, 0x41f: 0xba, + 0x420: 0xba, 0x421: 0xba, 0x422: 0x13d, 0x423: 0x13e, 0x424: 0xba, 0x425: 0xba, 0x426: 0xba, 0x427: 0xba, + 0x428: 0x13f, 0x429: 0x140, 0x42a: 0x141, 0x42b: 0x142, 0x42c: 0xba, 0x42d: 0xba, 0x42e: 0xba, 0x42f: 0xba, + 0x430: 0x143, 0x431: 0x144, 0x432: 0x145, 0x433: 0xba, 0x434: 0x146, 0x435: 0x147, 0x436: 0xba, 0x437: 0xba, + 0x438: 0xba, 0x439: 0xba, 0x43a: 0xba, 0x43b: 0xba, 0x43c: 0xba, 0x43d: 0xba, 0x43e: 0xba, 0x43f: 0xba, + // Block 0x11, offset 0x440 + 0x440: 0x9f, 0x441: 0x9f, 0x442: 0x9f, 0x443: 0x9f, 0x444: 0x9f, 0x445: 0x9f, 0x446: 0x9f, 0x447: 0x9f, + 0x448: 0x9f, 0x449: 0x9f, 0x44a: 0x9f, 0x44b: 0x9f, 0x44c: 0x9f, 0x44d: 0x9f, 0x44e: 0x148, 0x44f: 0xba, + 0x450: 0x9b, 0x451: 0x149, 0x452: 0x9f, 0x453: 0x9f, 0x454: 0x9f, 0x455: 0x14a, 0x456: 0xba, 0x457: 0xba, + 0x458: 0xba, 0x459: 0xba, 0x45a: 0xba, 0x45b: 0xba, 0x45c: 0xba, 0x45d: 0xba, 0x45e: 0xba, 0x45f: 0xba, + 0x460: 0xba, 0x461: 0xba, 0x462: 0xba, 0x463: 0xba, 0x464: 0xba, 0x465: 0xba, 0x466: 0xba, 0x467: 0xba, + 0x468: 0xba, 0x469: 0xba, 0x46a: 0xba, 0x46b: 0xba, 0x46c: 0xba, 0x46d: 0xba, 0x46e: 0xba, 0x46f: 0xba, + 0x470: 0xba, 0x471: 0xba, 0x472: 0xba, 0x473: 0xba, 0x474: 0xba, 0x475: 0xba, 0x476: 0xba, 0x477: 0xba, + 0x478: 0xba, 0x479: 0xba, 0x47a: 0xba, 0x47b: 0xba, 0x47c: 0xba, 0x47d: 0xba, 0x47e: 0xba, 0x47f: 0xba, + // Block 0x12, offset 0x480 + 0x480: 0x9f, 0x481: 0x9f, 0x482: 0x9f, 0x483: 0x9f, 0x484: 0x9f, 0x485: 0x9f, 0x486: 0x9f, 0x487: 0x9f, + 0x488: 0x9f, 0x489: 0x9f, 0x48a: 0x9f, 0x48b: 0x9f, 0x48c: 0x9f, 0x48d: 0x9f, 0x48e: 0x9f, 0x48f: 0x9f, + 0x490: 0x14b, 0x491: 0xba, 0x492: 0xba, 0x493: 0xba, 0x494: 0xba, 0x495: 0xba, 0x496: 0xba, 0x497: 0xba, + 0x498: 0xba, 0x499: 0xba, 0x49a: 0xba, 0x49b: 0xba, 0x49c: 0xba, 0x49d: 0xba, 0x49e: 0xba, 0x49f: 0xba, + 0x4a0: 0xba, 0x4a1: 0xba, 0x4a2: 0xba, 0x4a3: 0xba, 0x4a4: 0xba, 0x4a5: 0xba, 0x4a6: 0xba, 0x4a7: 0xba, + 0x4a8: 0xba, 0x4a9: 0xba, 0x4aa: 0xba, 0x4ab: 0xba, 0x4ac: 0xba, 0x4ad: 0xba, 0x4ae: 0xba, 0x4af: 0xba, + 0x4b0: 0xba, 0x4b1: 0xba, 0x4b2: 0xba, 0x4b3: 0xba, 0x4b4: 0xba, 0x4b5: 0xba, 0x4b6: 0xba, 0x4b7: 0xba, + 0x4b8: 0xba, 0x4b9: 0xba, 0x4ba: 0xba, 0x4bb: 0xba, 0x4bc: 0xba, 0x4bd: 0xba, 0x4be: 0xba, 0x4bf: 0xba, + // Block 0x13, offset 0x4c0 + 0x4c0: 0xba, 0x4c1: 0xba, 0x4c2: 0xba, 0x4c3: 0xba, 0x4c4: 0xba, 0x4c5: 0xba, 0x4c6: 0xba, 0x4c7: 0xba, + 0x4c8: 0xba, 0x4c9: 0xba, 0x4ca: 0xba, 0x4cb: 0xba, 0x4cc: 0xba, 0x4cd: 0xba, 0x4ce: 0xba, 0x4cf: 0xba, + 0x4d0: 0x9f, 0x4d1: 0x9f, 0x4d2: 0x9f, 0x4d3: 0x9f, 0x4d4: 0x9f, 0x4d5: 0x9f, 0x4d6: 0x9f, 0x4d7: 0x9f, + 0x4d8: 0x9f, 0x4d9: 0x14c, 0x4da: 0xba, 0x4db: 0xba, 0x4dc: 0xba, 0x4dd: 0xba, 0x4de: 0xba, 0x4df: 0xba, + 0x4e0: 0xba, 0x4e1: 0xba, 0x4e2: 0xba, 0x4e3: 0xba, 0x4e4: 0xba, 0x4e5: 0xba, 0x4e6: 0xba, 0x4e7: 0xba, + 0x4e8: 0xba, 0x4e9: 0xba, 0x4ea: 0xba, 0x4eb: 0xba, 0x4ec: 0xba, 0x4ed: 0xba, 0x4ee: 0xba, 0x4ef: 0xba, + 0x4f0: 0xba, 0x4f1: 0xba, 0x4f2: 0xba, 0x4f3: 0xba, 0x4f4: 0xba, 0x4f5: 0xba, 0x4f6: 0xba, 0x4f7: 0xba, + 0x4f8: 0xba, 0x4f9: 0xba, 0x4fa: 0xba, 0x4fb: 0xba, 0x4fc: 0xba, 0x4fd: 0xba, 0x4fe: 0xba, 0x4ff: 0xba, + // Block 0x14, offset 0x500 + 0x500: 0xba, 0x501: 0xba, 0x502: 0xba, 0x503: 0xba, 0x504: 0xba, 0x505: 0xba, 0x506: 0xba, 0x507: 0xba, + 0x508: 0xba, 0x509: 0xba, 0x50a: 0xba, 0x50b: 0xba, 0x50c: 0xba, 0x50d: 0xba, 0x50e: 0xba, 0x50f: 0xba, + 0x510: 0xba, 0x511: 0xba, 0x512: 0xba, 0x513: 0xba, 0x514: 0xba, 0x515: 0xba, 0x516: 0xba, 0x517: 0xba, + 0x518: 0xba, 0x519: 0xba, 0x51a: 0xba, 0x51b: 0xba, 0x51c: 0xba, 0x51d: 0xba, 0x51e: 0xba, 0x51f: 0xba, + 0x520: 0x9f, 0x521: 0x9f, 0x522: 0x9f, 0x523: 0x9f, 0x524: 0x9f, 0x525: 0x9f, 0x526: 0x9f, 0x527: 0x9f, + 0x528: 0x142, 0x529: 0x14d, 0x52a: 0xba, 0x52b: 0x14e, 0x52c: 0x14f, 0x52d: 0x150, 0x52e: 0x151, 0x52f: 0xba, + 0x530: 0xba, 0x531: 0xba, 0x532: 0xba, 0x533: 0xba, 0x534: 0xba, 0x535: 0xba, 0x536: 0xba, 0x537: 0xba, + 0x538: 0xba, 0x539: 0xba, 0x53a: 0xba, 0x53b: 0xba, 0x53c: 0x9f, 0x53d: 0x152, 0x53e: 0x153, 0x53f: 0x154, + // Block 0x15, offset 0x540 + 0x540: 0x9f, 0x541: 0x9f, 0x542: 0x9f, 0x543: 0x9f, 0x544: 0x9f, 0x545: 0x9f, 0x546: 0x9f, 0x547: 0x9f, + 0x548: 0x9f, 0x549: 0x9f, 0x54a: 0x9f, 0x54b: 0x9f, 0x54c: 0x9f, 0x54d: 0x9f, 0x54e: 0x9f, 0x54f: 0x9f, + 0x550: 0x9f, 0x551: 0x9f, 0x552: 0x9f, 0x553: 0x9f, 0x554: 0x9f, 0x555: 0x9f, 0x556: 0x9f, 0x557: 0x9f, + 0x558: 0x9f, 0x559: 0x9f, 0x55a: 0x9f, 0x55b: 0x9f, 0x55c: 0x9f, 0x55d: 0x9f, 0x55e: 0x9f, 0x55f: 0x155, + 0x560: 0x9f, 0x561: 0x9f, 0x562: 0x9f, 0x563: 0x9f, 0x564: 0x9f, 0x565: 0x9f, 0x566: 0x9f, 0x567: 0x9f, + 0x568: 0x9f, 0x569: 0x9f, 0x56a: 0x9f, 0x56b: 0x156, 0x56c: 0xba, 0x56d: 0xba, 0x56e: 0xba, 0x56f: 0xba, + 0x570: 0xba, 0x571: 0xba, 0x572: 0xba, 0x573: 0xba, 0x574: 0xba, 0x575: 0xba, 0x576: 0xba, 0x577: 0xba, + 0x578: 0xba, 0x579: 0xba, 0x57a: 0xba, 0x57b: 0xba, 0x57c: 0xba, 0x57d: 0xba, 0x57e: 0xba, 0x57f: 0xba, + // Block 0x16, offset 0x580 + 0x580: 0x9f, 0x581: 0x9f, 0x582: 0x9f, 0x583: 0x9f, 0x584: 0x157, 0x585: 0x158, 0x586: 0x9f, 0x587: 0x9f, + 0x588: 0x9f, 0x589: 0x9f, 0x58a: 0x9f, 0x58b: 0x159, 0x58c: 0xba, 0x58d: 0xba, 0x58e: 0xba, 0x58f: 0xba, + 0x590: 0xba, 0x591: 0xba, 0x592: 0xba, 0x593: 0xba, 0x594: 0xba, 0x595: 0xba, 0x596: 0xba, 0x597: 0xba, + 0x598: 0xba, 0x599: 0xba, 0x59a: 0xba, 0x59b: 0xba, 0x59c: 0xba, 0x59d: 0xba, 0x59e: 0xba, 0x59f: 0xba, + 0x5a0: 0xba, 0x5a1: 0xba, 0x5a2: 0xba, 0x5a3: 0xba, 0x5a4: 0xba, 0x5a5: 0xba, 0x5a6: 0xba, 0x5a7: 0xba, + 0x5a8: 0xba, 0x5a9: 0xba, 0x5aa: 0xba, 0x5ab: 0xba, 0x5ac: 0xba, 0x5ad: 0xba, 0x5ae: 0xba, 0x5af: 0xba, + 0x5b0: 0x9f, 0x5b1: 0x15a, 0x5b2: 0x15b, 0x5b3: 0xba, 0x5b4: 0xba, 0x5b5: 0xba, 0x5b6: 0xba, 0x5b7: 0xba, + 0x5b8: 0xba, 0x5b9: 0xba, 0x5ba: 0xba, 0x5bb: 0xba, 0x5bc: 0xba, 0x5bd: 0xba, 0x5be: 0xba, 0x5bf: 0xba, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x9b, 0x5c1: 0x9b, 0x5c2: 0x9b, 0x5c3: 0x15c, 0x5c4: 0x15d, 0x5c5: 0x15e, 0x5c6: 0x15f, 0x5c7: 0x160, + 0x5c8: 0x9b, 0x5c9: 0x161, 0x5ca: 0xba, 0x5cb: 0xba, 0x5cc: 0x9b, 0x5cd: 0x162, 0x5ce: 0xba, 0x5cf: 0xba, + 0x5d0: 0x5f, 0x5d1: 0x60, 0x5d2: 0x61, 0x5d3: 0x62, 0x5d4: 0x63, 0x5d5: 0x64, 0x5d6: 0x65, 0x5d7: 0x66, + 0x5d8: 0x67, 0x5d9: 0x68, 0x5da: 0x69, 0x5db: 0x6a, 0x5dc: 0x6b, 0x5dd: 0x6c, 0x5de: 0x6d, 0x5df: 0x6e, + 0x5e0: 0x9b, 0x5e1: 0x9b, 0x5e2: 0x9b, 0x5e3: 0x9b, 0x5e4: 0x9b, 0x5e5: 0x9b, 0x5e6: 0x9b, 0x5e7: 0x9b, + 0x5e8: 0x163, 0x5e9: 0x164, 0x5ea: 0x165, 0x5eb: 0xba, 0x5ec: 0xba, 0x5ed: 0xba, 0x5ee: 0xba, 0x5ef: 0xba, + 0x5f0: 0xba, 0x5f1: 0xba, 0x5f2: 0xba, 0x5f3: 0xba, 0x5f4: 0xba, 0x5f5: 0xba, 0x5f6: 0xba, 0x5f7: 0xba, + 0x5f8: 0xba, 0x5f9: 0xba, 0x5fa: 0xba, 0x5fb: 0xba, 0x5fc: 0xba, 0x5fd: 0xba, 0x5fe: 0xba, 0x5ff: 0xba, + // Block 0x18, offset 0x600 + 0x600: 0x166, 0x601: 0xba, 0x602: 0xba, 0x603: 0xba, 0x604: 0xba, 0x605: 0xba, 0x606: 0xba, 0x607: 0xba, + 0x608: 0xba, 0x609: 0xba, 0x60a: 0xba, 0x60b: 0xba, 0x60c: 0xba, 0x60d: 0xba, 0x60e: 0xba, 0x60f: 0xba, + 0x610: 0xba, 0x611: 0xba, 0x612: 0xba, 0x613: 0xba, 0x614: 0xba, 0x615: 0xba, 0x616: 0xba, 0x617: 0xba, + 0x618: 0xba, 0x619: 0xba, 0x61a: 0xba, 0x61b: 0xba, 0x61c: 0xba, 0x61d: 0xba, 0x61e: 0xba, 0x61f: 0xba, + 0x620: 0x122, 0x621: 0x122, 0x622: 0x122, 0x623: 0x167, 0x624: 0x6f, 0x625: 0x168, 0x626: 0xba, 0x627: 0xba, + 0x628: 0xba, 0x629: 0xba, 0x62a: 0xba, 0x62b: 0xba, 0x62c: 0xba, 0x62d: 0xba, 0x62e: 0xba, 0x62f: 0xba, + 0x630: 0xba, 0x631: 0xba, 0x632: 0xba, 0x633: 0xba, 0x634: 0xba, 0x635: 0xba, 0x636: 0xba, 0x637: 0xba, + 0x638: 0x70, 0x639: 0x71, 0x63a: 0x72, 0x63b: 0x169, 0x63c: 0xba, 0x63d: 0xba, 0x63e: 0xba, 0x63f: 0xba, + // Block 0x19, offset 0x640 + 0x640: 0x16a, 0x641: 0x9b, 0x642: 0x16b, 0x643: 0x16c, 0x644: 0x73, 0x645: 0x74, 0x646: 0x16d, 0x647: 0x16e, + 0x648: 0x75, 0x649: 0x16f, 0x64a: 0xba, 0x64b: 0xba, 0x64c: 0x9b, 0x64d: 0x9b, 0x64e: 0x9b, 0x64f: 0x9b, + 0x650: 0x9b, 0x651: 0x9b, 0x652: 0x9b, 0x653: 0x9b, 0x654: 0x9b, 0x655: 0x9b, 0x656: 0x9b, 0x657: 0x9b, + 0x658: 0x9b, 0x659: 0x9b, 0x65a: 0x9b, 0x65b: 0x170, 0x65c: 0x9b, 0x65d: 0x171, 0x65e: 0x9b, 0x65f: 0x172, + 0x660: 0x173, 0x661: 0x174, 0x662: 0x175, 0x663: 0xba, 0x664: 0x176, 0x665: 0x177, 0x666: 0x178, 0x667: 0x179, + 0x668: 0xba, 0x669: 0xba, 0x66a: 0xba, 0x66b: 0xba, 0x66c: 0xba, 0x66d: 0xba, 0x66e: 0xba, 0x66f: 0xba, + 0x670: 0xba, 0x671: 0xba, 0x672: 0xba, 0x673: 0xba, 0x674: 0xba, 0x675: 0xba, 0x676: 0xba, 0x677: 0xba, + 0x678: 0xba, 0x679: 0xba, 0x67a: 0xba, 0x67b: 0xba, 0x67c: 0xba, 0x67d: 0xba, 0x67e: 0xba, 0x67f: 0xba, + // Block 0x1a, offset 0x680 + 0x680: 0x9f, 0x681: 0x9f, 0x682: 0x9f, 0x683: 0x9f, 0x684: 0x9f, 0x685: 0x9f, 0x686: 0x9f, 0x687: 0x9f, + 0x688: 0x9f, 0x689: 0x9f, 0x68a: 0x9f, 0x68b: 0x9f, 0x68c: 0x9f, 0x68d: 0x9f, 0x68e: 0x9f, 0x68f: 0x9f, + 0x690: 0x9f, 0x691: 0x9f, 0x692: 0x9f, 0x693: 0x9f, 0x694: 0x9f, 0x695: 0x9f, 0x696: 0x9f, 0x697: 0x9f, + 0x698: 0x9f, 0x699: 0x9f, 0x69a: 0x9f, 0x69b: 0x17a, 0x69c: 0x9f, 0x69d: 0x9f, 0x69e: 0x9f, 0x69f: 0x9f, + 0x6a0: 0x9f, 0x6a1: 0x9f, 0x6a2: 0x9f, 0x6a3: 0x9f, 0x6a4: 0x9f, 0x6a5: 0x9f, 0x6a6: 0x9f, 0x6a7: 0x9f, + 0x6a8: 0x9f, 0x6a9: 0x9f, 0x6aa: 0x9f, 0x6ab: 0x9f, 0x6ac: 0x9f, 0x6ad: 0x9f, 0x6ae: 0x9f, 0x6af: 0x9f, + 0x6b0: 0x9f, 0x6b1: 0x9f, 0x6b2: 0x9f, 0x6b3: 0x9f, 0x6b4: 0x9f, 0x6b5: 0x9f, 0x6b6: 0x9f, 0x6b7: 0x9f, + 0x6b8: 0x9f, 0x6b9: 0x9f, 0x6ba: 0x9f, 0x6bb: 0x9f, 0x6bc: 0x9f, 0x6bd: 0x9f, 0x6be: 0x9f, 0x6bf: 0x9f, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x9f, 0x6c1: 0x9f, 0x6c2: 0x9f, 0x6c3: 0x9f, 0x6c4: 0x9f, 0x6c5: 0x9f, 0x6c6: 0x9f, 0x6c7: 0x9f, + 0x6c8: 0x9f, 0x6c9: 0x9f, 0x6ca: 0x9f, 0x6cb: 0x9f, 0x6cc: 0x9f, 0x6cd: 0x9f, 0x6ce: 0x9f, 0x6cf: 0x9f, + 0x6d0: 0x9f, 0x6d1: 0x9f, 0x6d2: 0x9f, 0x6d3: 0x9f, 0x6d4: 0x9f, 0x6d5: 0x9f, 0x6d6: 0x9f, 0x6d7: 0x9f, + 0x6d8: 0x9f, 0x6d9: 0x9f, 0x6da: 0x9f, 0x6db: 0x9f, 0x6dc: 0x17b, 0x6dd: 0x9f, 0x6de: 0x9f, 0x6df: 0x9f, + 0x6e0: 0x17c, 0x6e1: 0x9f, 0x6e2: 0x9f, 0x6e3: 0x9f, 0x6e4: 0x9f, 0x6e5: 0x9f, 0x6e6: 0x9f, 0x6e7: 0x9f, + 0x6e8: 0x9f, 0x6e9: 0x9f, 0x6ea: 0x9f, 0x6eb: 0x9f, 0x6ec: 0x9f, 0x6ed: 0x9f, 0x6ee: 0x9f, 0x6ef: 0x9f, + 0x6f0: 0x9f, 0x6f1: 0x9f, 0x6f2: 0x9f, 0x6f3: 0x9f, 0x6f4: 0x9f, 0x6f5: 0x9f, 0x6f6: 0x9f, 0x6f7: 0x9f, + 0x6f8: 0x9f, 0x6f9: 0x9f, 0x6fa: 0x9f, 0x6fb: 0x9f, 0x6fc: 0x9f, 0x6fd: 0x9f, 0x6fe: 0x9f, 0x6ff: 0x9f, + // Block 0x1c, offset 0x700 + 0x700: 0x9f, 0x701: 0x9f, 0x702: 0x9f, 0x703: 0x9f, 0x704: 0x9f, 0x705: 0x9f, 0x706: 0x9f, 0x707: 0x9f, + 0x708: 0x9f, 0x709: 0x9f, 0x70a: 0x9f, 0x70b: 0x9f, 0x70c: 0x9f, 0x70d: 0x9f, 0x70e: 0x9f, 0x70f: 0x9f, + 0x710: 0x9f, 0x711: 0x9f, 0x712: 0x9f, 0x713: 0x9f, 0x714: 0x9f, 0x715: 0x9f, 0x716: 0x9f, 0x717: 0x9f, + 0x718: 0x9f, 0x719: 0x9f, 0x71a: 0x9f, 0x71b: 0x9f, 0x71c: 0x9f, 0x71d: 0x9f, 0x71e: 0x9f, 0x71f: 0x9f, + 0x720: 0x9f, 0x721: 0x9f, 0x722: 0x9f, 0x723: 0x9f, 0x724: 0x9f, 0x725: 0x9f, 0x726: 0x9f, 0x727: 0x9f, + 0x728: 0x9f, 0x729: 0x9f, 0x72a: 0x9f, 0x72b: 0x9f, 0x72c: 0x9f, 0x72d: 0x9f, 0x72e: 0x9f, 0x72f: 0x9f, + 0x730: 0x9f, 0x731: 0x9f, 0x732: 0x9f, 0x733: 0x9f, 0x734: 0x9f, 0x735: 0x9f, 0x736: 0x9f, 0x737: 0x9f, + 0x738: 0x9f, 0x739: 0x9f, 0x73a: 0x17d, 0x73b: 0x9f, 0x73c: 0x9f, 0x73d: 0x9f, 0x73e: 0x9f, 0x73f: 0x9f, + // Block 0x1d, offset 0x740 + 0x740: 0x9f, 0x741: 0x9f, 0x742: 0x9f, 0x743: 0x9f, 0x744: 0x9f, 0x745: 0x9f, 0x746: 0x9f, 0x747: 0x9f, + 0x748: 0x9f, 0x749: 0x9f, 0x74a: 0x9f, 0x74b: 0x9f, 0x74c: 0x9f, 0x74d: 0x9f, 0x74e: 0x9f, 0x74f: 0x9f, + 0x750: 0x9f, 0x751: 0x9f, 0x752: 0x9f, 0x753: 0x9f, 0x754: 0x9f, 0x755: 0x9f, 0x756: 0x9f, 0x757: 0x9f, + 0x758: 0x9f, 0x759: 0x9f, 0x75a: 0x9f, 0x75b: 0x9f, 0x75c: 0x9f, 0x75d: 0x9f, 0x75e: 0x9f, 0x75f: 0x9f, + 0x760: 0x9f, 0x761: 0x9f, 0x762: 0x9f, 0x763: 0x9f, 0x764: 0x9f, 0x765: 0x9f, 0x766: 0x9f, 0x767: 0x9f, + 0x768: 0x9f, 0x769: 0x9f, 0x76a: 0x9f, 0x76b: 0x9f, 0x76c: 0x9f, 0x76d: 0x9f, 0x76e: 0x9f, 0x76f: 0x17e, + 0x770: 0xba, 0x771: 0xba, 0x772: 0xba, 0x773: 0xba, 0x774: 0xba, 0x775: 0xba, 0x776: 0xba, 0x777: 0xba, + 0x778: 0xba, 0x779: 0xba, 0x77a: 0xba, 0x77b: 0xba, 0x77c: 0xba, 0x77d: 0xba, 0x77e: 0xba, 0x77f: 0xba, + // Block 0x1e, offset 0x780 + 0x780: 0xba, 0x781: 0xba, 0x782: 0xba, 0x783: 0xba, 0x784: 0xba, 0x785: 0xba, 0x786: 0xba, 0x787: 0xba, + 0x788: 0xba, 0x789: 0xba, 0x78a: 0xba, 0x78b: 0xba, 0x78c: 0xba, 0x78d: 0xba, 0x78e: 0xba, 0x78f: 0xba, + 0x790: 0xba, 0x791: 0xba, 0x792: 0xba, 0x793: 0xba, 0x794: 0xba, 0x795: 0xba, 0x796: 0xba, 0x797: 0xba, + 0x798: 0xba, 0x799: 0xba, 0x79a: 0xba, 0x79b: 0xba, 0x79c: 0xba, 0x79d: 0xba, 0x79e: 0xba, 0x79f: 0xba, + 0x7a0: 0x76, 0x7a1: 0x77, 0x7a2: 0x78, 0x7a3: 0x17f, 0x7a4: 0x79, 0x7a5: 0x7a, 0x7a6: 0x180, 0x7a7: 0x7b, + 0x7a8: 0x7c, 0x7a9: 0xba, 0x7aa: 0xba, 0x7ab: 0xba, 0x7ac: 0xba, 0x7ad: 0xba, 0x7ae: 0xba, 0x7af: 0xba, + 0x7b0: 0xba, 0x7b1: 0xba, 0x7b2: 0xba, 0x7b3: 0xba, 0x7b4: 0xba, 0x7b5: 0xba, 0x7b6: 0xba, 0x7b7: 0xba, + 0x7b8: 0xba, 0x7b9: 0xba, 0x7ba: 0xba, 0x7bb: 0xba, 0x7bc: 0xba, 0x7bd: 0xba, 0x7be: 0xba, 0x7bf: 0xba, + // Block 0x1f, offset 0x7c0 + 0x7d0: 0x0d, 0x7d1: 0x0e, 0x7d2: 0x0f, 0x7d3: 0x10, 0x7d4: 0x11, 0x7d5: 0x0b, 0x7d6: 0x12, 0x7d7: 0x07, + 0x7d8: 0x13, 0x7d9: 0x0b, 0x7da: 0x0b, 0x7db: 0x14, 0x7dc: 0x0b, 0x7dd: 0x15, 0x7de: 0x16, 0x7df: 0x17, + 0x7e0: 0x07, 0x7e1: 0x07, 0x7e2: 0x07, 0x7e3: 0x07, 0x7e4: 0x07, 0x7e5: 0x07, 0x7e6: 0x07, 0x7e7: 0x07, + 0x7e8: 0x07, 0x7e9: 0x07, 0x7ea: 0x18, 0x7eb: 0x19, 0x7ec: 0x1a, 0x7ed: 0x07, 0x7ee: 0x1b, 0x7ef: 0x1c, + 0x7f0: 0x0b, 0x7f1: 0x0b, 0x7f2: 0x0b, 0x7f3: 0x0b, 0x7f4: 0x0b, 0x7f5: 0x0b, 0x7f6: 0x0b, 0x7f7: 0x0b, + 0x7f8: 0x0b, 0x7f9: 0x0b, 0x7fa: 0x0b, 0x7fb: 0x0b, 0x7fc: 0x0b, 0x7fd: 0x0b, 0x7fe: 0x0b, 0x7ff: 0x0b, + // Block 0x20, offset 0x800 + 0x800: 0x0b, 0x801: 0x0b, 0x802: 0x0b, 0x803: 0x0b, 0x804: 0x0b, 0x805: 0x0b, 0x806: 0x0b, 0x807: 0x0b, + 0x808: 0x0b, 0x809: 0x0b, 0x80a: 0x0b, 0x80b: 0x0b, 0x80c: 0x0b, 0x80d: 0x0b, 0x80e: 0x0b, 0x80f: 0x0b, + 0x810: 0x0b, 0x811: 0x0b, 0x812: 0x0b, 0x813: 0x0b, 0x814: 0x0b, 0x815: 0x0b, 0x816: 0x0b, 0x817: 0x0b, + 0x818: 0x0b, 0x819: 0x0b, 0x81a: 0x0b, 0x81b: 0x0b, 0x81c: 0x0b, 0x81d: 0x0b, 0x81e: 0x0b, 0x81f: 0x0b, + 0x820: 0x0b, 0x821: 0x0b, 0x822: 0x0b, 0x823: 0x0b, 0x824: 0x0b, 0x825: 0x0b, 0x826: 0x0b, 0x827: 0x0b, + 0x828: 0x0b, 0x829: 0x0b, 0x82a: 0x0b, 0x82b: 0x0b, 0x82c: 0x0b, 0x82d: 0x0b, 0x82e: 0x0b, 0x82f: 0x0b, + 0x830: 0x0b, 0x831: 0x0b, 0x832: 0x0b, 0x833: 0x0b, 0x834: 0x0b, 0x835: 0x0b, 0x836: 0x0b, 0x837: 0x0b, + 0x838: 0x0b, 0x839: 0x0b, 0x83a: 0x0b, 0x83b: 0x0b, 0x83c: 0x0b, 0x83d: 0x0b, 0x83e: 0x0b, 0x83f: 0x0b, + // Block 0x21, offset 0x840 + 0x840: 0x181, 0x841: 0x182, 0x842: 0xba, 0x843: 0xba, 0x844: 0x183, 0x845: 0x183, 0x846: 0x183, 0x847: 0x184, + 0x848: 0xba, 0x849: 0xba, 0x84a: 0xba, 0x84b: 0xba, 0x84c: 0xba, 0x84d: 0xba, 0x84e: 0xba, 0x84f: 0xba, + 0x850: 0xba, 0x851: 0xba, 0x852: 0xba, 0x853: 0xba, 0x854: 0xba, 0x855: 0xba, 0x856: 0xba, 0x857: 0xba, + 0x858: 0xba, 0x859: 0xba, 0x85a: 0xba, 0x85b: 0xba, 0x85c: 0xba, 0x85d: 0xba, 0x85e: 0xba, 0x85f: 0xba, + 0x860: 0xba, 0x861: 0xba, 0x862: 0xba, 0x863: 0xba, 0x864: 0xba, 0x865: 0xba, 0x866: 0xba, 0x867: 0xba, + 0x868: 0xba, 0x869: 0xba, 0x86a: 0xba, 0x86b: 0xba, 0x86c: 0xba, 0x86d: 0xba, 0x86e: 0xba, 0x86f: 0xba, + 0x870: 0xba, 0x871: 0xba, 0x872: 0xba, 0x873: 0xba, 0x874: 0xba, 0x875: 0xba, 0x876: 0xba, 0x877: 0xba, + 0x878: 0xba, 0x879: 0xba, 0x87a: 0xba, 0x87b: 0xba, 0x87c: 0xba, 0x87d: 0xba, 0x87e: 0xba, 0x87f: 0xba, + // Block 0x22, offset 0x880 + 0x880: 0x0b, 0x881: 0x0b, 0x882: 0x0b, 0x883: 0x0b, 0x884: 0x0b, 0x885: 0x0b, 0x886: 0x0b, 0x887: 0x0b, + 0x888: 0x0b, 0x889: 0x0b, 0x88a: 0x0b, 0x88b: 0x0b, 0x88c: 0x0b, 0x88d: 0x0b, 0x88e: 0x0b, 0x88f: 0x0b, + 0x890: 0x0b, 0x891: 0x0b, 0x892: 0x0b, 0x893: 0x0b, 0x894: 0x0b, 0x895: 0x0b, 0x896: 0x0b, 0x897: 0x0b, + 0x898: 0x0b, 0x899: 0x0b, 0x89a: 0x0b, 0x89b: 0x0b, 0x89c: 0x0b, 0x89d: 0x0b, 0x89e: 0x0b, 0x89f: 0x0b, + 0x8a0: 0x1f, 0x8a1: 0x0b, 0x8a2: 0x0b, 0x8a3: 0x0b, 0x8a4: 0x0b, 0x8a5: 0x0b, 0x8a6: 0x0b, 0x8a7: 0x0b, + 0x8a8: 0x0b, 0x8a9: 0x0b, 0x8aa: 0x0b, 0x8ab: 0x0b, 0x8ac: 0x0b, 0x8ad: 0x0b, 0x8ae: 0x0b, 0x8af: 0x0b, + 0x8b0: 0x0b, 0x8b1: 0x0b, 0x8b2: 0x0b, 0x8b3: 0x0b, 0x8b4: 0x0b, 0x8b5: 0x0b, 0x8b6: 0x0b, 0x8b7: 0x0b, + 0x8b8: 0x0b, 0x8b9: 0x0b, 0x8ba: 0x0b, 0x8bb: 0x0b, 0x8bc: 0x0b, 0x8bd: 0x0b, 0x8be: 0x0b, 0x8bf: 0x0b, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x0b, 0x8c1: 0x0b, 0x8c2: 0x0b, 0x8c3: 0x0b, 0x8c4: 0x0b, 0x8c5: 0x0b, 0x8c6: 0x0b, 0x8c7: 0x0b, + 0x8c8: 0x0b, 0x8c9: 0x0b, 0x8ca: 0x0b, 0x8cb: 0x0b, 0x8cc: 0x0b, 0x8cd: 0x0b, 0x8ce: 0x0b, 0x8cf: 0x0b, +} + +// idnaSparseOffset: 264 entries, 528 bytes +var idnaSparseOffset = []uint16{0x0, 0x8, 0x19, 0x25, 0x27, 0x2c, 0x34, 0x3f, 0x4b, 0x4f, 0x5e, 0x63, 0x6b, 0x77, 0x85, 0x8a, 0x93, 0xa3, 0xb1, 0xbd, 0xc9, 0xda, 0xe4, 0xeb, 0xf8, 0x109, 0x110, 0x11b, 0x12a, 0x138, 0x142, 0x144, 0x149, 0x14c, 0x14f, 0x151, 0x15d, 0x168, 0x170, 0x176, 0x17c, 0x181, 0x186, 0x189, 0x18d, 0x193, 0x198, 0x1a4, 0x1ae, 0x1b4, 0x1c5, 0x1cf, 0x1d2, 0x1da, 0x1dd, 0x1ea, 0x1f2, 0x1f6, 0x1fd, 0x205, 0x215, 0x221, 0x223, 0x22d, 0x239, 0x245, 0x251, 0x259, 0x25e, 0x268, 0x279, 0x27d, 0x288, 0x28c, 0x295, 0x29d, 0x2a3, 0x2a8, 0x2ab, 0x2af, 0x2b5, 0x2b9, 0x2bd, 0x2c3, 0x2ca, 0x2d0, 0x2d8, 0x2df, 0x2ea, 0x2f4, 0x2f8, 0x2fb, 0x301, 0x305, 0x307, 0x30a, 0x30c, 0x30f, 0x319, 0x31c, 0x32b, 0x32f, 0x334, 0x337, 0x33b, 0x340, 0x345, 0x34b, 0x351, 0x360, 0x366, 0x36a, 0x379, 0x37e, 0x386, 0x390, 0x39b, 0x3a3, 0x3b4, 0x3bd, 0x3cd, 0x3da, 0x3e4, 0x3e9, 0x3f6, 0x3fa, 0x3ff, 0x401, 0x405, 0x407, 0x40b, 0x414, 0x41a, 0x41e, 0x42e, 0x438, 0x43d, 0x440, 0x446, 0x44d, 0x452, 0x456, 0x45c, 0x461, 0x46a, 0x46f, 0x475, 0x47c, 0x483, 0x48a, 0x48e, 0x493, 0x496, 0x49b, 0x4a7, 0x4ad, 0x4b2, 0x4b9, 0x4c1, 0x4c6, 0x4ca, 0x4da, 0x4e1, 0x4e5, 0x4e9, 0x4f0, 0x4f2, 0x4f5, 0x4f8, 0x4fc, 0x500, 0x506, 0x50f, 0x51b, 0x522, 0x52b, 0x533, 0x53a, 0x548, 0x555, 0x562, 0x56b, 0x56f, 0x57d, 0x585, 0x590, 0x599, 0x59f, 0x5a7, 0x5b0, 0x5ba, 0x5bd, 0x5c9, 0x5cc, 0x5d1, 0x5de, 0x5e7, 0x5f3, 0x5f6, 0x600, 0x609, 0x615, 0x622, 0x62a, 0x62d, 0x632, 0x635, 0x638, 0x63b, 0x642, 0x649, 0x64d, 0x658, 0x65b, 0x661, 0x666, 0x66a, 0x66d, 0x670, 0x673, 0x676, 0x679, 0x67e, 0x688, 0x68b, 0x68f, 0x69e, 0x6aa, 0x6ae, 0x6b3, 0x6b8, 0x6bc, 0x6c1, 0x6ca, 0x6d5, 0x6db, 0x6e3, 0x6e7, 0x6eb, 0x6f1, 0x6f7, 0x6fc, 0x6ff, 0x70f, 0x716, 0x719, 0x71c, 0x720, 0x726, 0x72b, 0x730, 0x735, 0x738, 0x73d, 0x740, 0x743, 0x747, 0x74b, 0x74e, 0x75e, 0x76f, 0x774, 0x776, 0x778} + +// idnaSparseValues: 1915 entries, 7660 bytes +var idnaSparseValues = [1915]valueRange{ + // Block 0x0, offset 0x0 + {value: 0x0000, lo: 0x07}, + {value: 0xe105, lo: 0x80, hi: 0x96}, + {value: 0x0018, lo: 0x97, hi: 0x97}, + {value: 0xe105, lo: 0x98, hi: 0x9e}, + {value: 0x001f, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xb7}, + {value: 0x0008, lo: 0xb8, hi: 0xbf}, + // Block 0x1, offset 0x8 + {value: 0x0000, lo: 0x10}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0xe01d, lo: 0x81, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0x82}, + {value: 0x0335, lo: 0x83, hi: 0x83}, + {value: 0x034d, lo: 0x84, hi: 0x84}, + {value: 0x0365, lo: 0x85, hi: 0x85}, + {value: 0xe00d, lo: 0x86, hi: 0x86}, + {value: 0x0008, lo: 0x87, hi: 0x87}, + {value: 0xe00d, lo: 0x88, hi: 0x88}, + {value: 0x0008, lo: 0x89, hi: 0x89}, + {value: 0xe00d, lo: 0x8a, hi: 0x8a}, + {value: 0x0008, lo: 0x8b, hi: 0x8b}, + {value: 0xe00d, lo: 0x8c, hi: 0x8c}, + {value: 0x0008, lo: 0x8d, hi: 0x8d}, + {value: 0xe00d, lo: 0x8e, hi: 0x8e}, + {value: 0x0008, lo: 0x8f, hi: 0xbf}, + // Block 0x2, offset 0x19 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x0249, lo: 0xb0, hi: 0xb0}, + {value: 0x037d, lo: 0xb1, hi: 0xb1}, + {value: 0x0259, lo: 0xb2, hi: 0xb2}, + {value: 0x0269, lo: 0xb3, hi: 0xb3}, + {value: 0x034d, lo: 0xb4, hi: 0xb4}, + {value: 0x0395, lo: 0xb5, hi: 0xb5}, + {value: 0xe1bd, lo: 0xb6, hi: 0xb6}, + {value: 0x0279, lo: 0xb7, hi: 0xb7}, + {value: 0x0289, lo: 0xb8, hi: 0xb8}, + {value: 0x0008, lo: 0xb9, hi: 0xbf}, + // Block 0x3, offset 0x25 + {value: 0x0000, lo: 0x01}, + {value: 0x3308, lo: 0x80, hi: 0xbf}, + // Block 0x4, offset 0x27 + {value: 0x0000, lo: 0x04}, + {value: 0x03f5, lo: 0x80, hi: 0x8f}, + {value: 0xe105, lo: 0x90, hi: 0x9f}, + {value: 0x049d, lo: 0xa0, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x5, offset 0x2c + {value: 0x0000, lo: 0x07}, + {value: 0xe185, lo: 0x80, hi: 0x8f}, + {value: 0x0545, lo: 0x90, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x98}, + {value: 0x0008, lo: 0x99, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xa0}, + {value: 0x0008, lo: 0xa1, hi: 0xbf}, + // Block 0x6, offset 0x34 + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0401, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x88}, + {value: 0x0018, lo: 0x89, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x90}, + {value: 0x3308, lo: 0x91, hi: 0xbd}, + {value: 0x0818, lo: 0xbe, hi: 0xbe}, + {value: 0x3308, lo: 0xbf, hi: 0xbf}, + // Block 0x7, offset 0x3f + {value: 0x0000, lo: 0x0b}, + {value: 0x0818, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x82}, + {value: 0x0818, lo: 0x83, hi: 0x83}, + {value: 0x3308, lo: 0x84, hi: 0x85}, + {value: 0x0818, lo: 0x86, hi: 0x86}, + {value: 0x3308, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0808, lo: 0x90, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xaf}, + {value: 0x0808, lo: 0xb0, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0x8, offset 0x4b + {value: 0x0000, lo: 0x03}, + {value: 0x0a08, lo: 0x80, hi: 0x87}, + {value: 0x0c08, lo: 0x88, hi: 0x99}, + {value: 0x0a08, lo: 0x9a, hi: 0xbf}, + // Block 0x9, offset 0x4f + {value: 0x0000, lo: 0x0e}, + {value: 0x3308, lo: 0x80, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8c}, + {value: 0x0c08, lo: 0x8d, hi: 0x8d}, + {value: 0x0a08, lo: 0x8e, hi: 0x98}, + {value: 0x0c08, lo: 0x99, hi: 0x9b}, + {value: 0x0a08, lo: 0x9c, hi: 0xaa}, + {value: 0x0c08, lo: 0xab, hi: 0xac}, + {value: 0x0a08, lo: 0xad, hi: 0xb0}, + {value: 0x0c08, lo: 0xb1, hi: 0xb1}, + {value: 0x0a08, lo: 0xb2, hi: 0xb2}, + {value: 0x0c08, lo: 0xb3, hi: 0xb4}, + {value: 0x0a08, lo: 0xb5, hi: 0xb7}, + {value: 0x0c08, lo: 0xb8, hi: 0xb9}, + {value: 0x0a08, lo: 0xba, hi: 0xbf}, + // Block 0xa, offset 0x5e + {value: 0x0000, lo: 0x04}, + {value: 0x0808, lo: 0x80, hi: 0xa5}, + {value: 0x3308, lo: 0xa6, hi: 0xb0}, + {value: 0x0808, lo: 0xb1, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbf}, + // Block 0xb, offset 0x63 + {value: 0x0000, lo: 0x07}, + {value: 0x0808, lo: 0x80, hi: 0x89}, + {value: 0x0a08, lo: 0x8a, hi: 0xaa}, + {value: 0x3308, lo: 0xab, hi: 0xb3}, + {value: 0x0808, lo: 0xb4, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xb9}, + {value: 0x0818, lo: 0xba, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0xc, offset 0x6b + {value: 0x0000, lo: 0x0b}, + {value: 0x0808, lo: 0x80, hi: 0x95}, + {value: 0x3308, lo: 0x96, hi: 0x99}, + {value: 0x0808, lo: 0x9a, hi: 0x9a}, + {value: 0x3308, lo: 0x9b, hi: 0xa3}, + {value: 0x0808, lo: 0xa4, hi: 0xa4}, + {value: 0x3308, lo: 0xa5, hi: 0xa7}, + {value: 0x0808, lo: 0xa8, hi: 0xa8}, + {value: 0x3308, lo: 0xa9, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0818, lo: 0xb0, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xd, offset 0x77 + {value: 0x0000, lo: 0x0d}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0a08, lo: 0xa0, hi: 0xa9}, + {value: 0x0c08, lo: 0xaa, hi: 0xac}, + {value: 0x0808, lo: 0xad, hi: 0xad}, + {value: 0x0c08, lo: 0xae, hi: 0xae}, + {value: 0x0a08, lo: 0xaf, hi: 0xb0}, + {value: 0x0c08, lo: 0xb1, hi: 0xb2}, + {value: 0x0a08, lo: 0xb3, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xb5}, + {value: 0x0a08, lo: 0xb6, hi: 0xb8}, + {value: 0x0c08, lo: 0xb9, hi: 0xb9}, + {value: 0x0a08, lo: 0xba, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0xe, offset 0x85 + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x93}, + {value: 0x3308, lo: 0x94, hi: 0xa1}, + {value: 0x0840, lo: 0xa2, hi: 0xa2}, + {value: 0x3308, lo: 0xa3, hi: 0xbf}, + // Block 0xf, offset 0x8a + {value: 0x0000, lo: 0x08}, + {value: 0x3308, lo: 0x80, hi: 0x82}, + {value: 0x3008, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0xb9}, + {value: 0x3308, lo: 0xba, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0x10, offset 0x93 + {value: 0x0000, lo: 0x0f}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x3008, lo: 0x81, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x85}, + {value: 0x3008, lo: 0x86, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x3008, lo: 0x8a, hi: 0x8c}, + {value: 0x3b08, lo: 0x8d, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x96}, + {value: 0x3008, lo: 0x97, hi: 0x97}, + {value: 0x0040, lo: 0x98, hi: 0xa5}, + {value: 0x0008, lo: 0xa6, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x11, offset 0xa3 + {value: 0x0000, lo: 0x0d}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x3008, lo: 0x81, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0x0008, lo: 0x92, hi: 0xa8}, + {value: 0x0040, lo: 0xa9, hi: 0xa9}, + {value: 0x0008, lo: 0xaa, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x3308, lo: 0xbe, hi: 0xbf}, + // Block 0x12, offset 0xb1 + {value: 0x0000, lo: 0x0b}, + {value: 0x3308, lo: 0x80, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0x0008, lo: 0x92, hi: 0xba}, + {value: 0x3b08, lo: 0xbb, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0x13, offset 0xbd + {value: 0x0000, lo: 0x0b}, + {value: 0x0040, lo: 0x80, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x99}, + {value: 0x0008, lo: 0x9a, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xb2}, + {value: 0x0008, lo: 0xb3, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x14, offset 0xc9 + {value: 0x0000, lo: 0x10}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x89}, + {value: 0x3b08, lo: 0x8a, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8e}, + {value: 0x3008, lo: 0x8f, hi: 0x91}, + {value: 0x3308, lo: 0x92, hi: 0x94}, + {value: 0x0040, lo: 0x95, hi: 0x95}, + {value: 0x3308, lo: 0x96, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x97}, + {value: 0x3008, lo: 0x98, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xa5}, + {value: 0x0008, lo: 0xa6, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xb1}, + {value: 0x3008, lo: 0xb2, hi: 0xb3}, + {value: 0x0018, lo: 0xb4, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0x15, offset 0xda + {value: 0x0000, lo: 0x09}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0xb0}, + {value: 0x3308, lo: 0xb1, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xb2}, + {value: 0x08f1, lo: 0xb3, hi: 0xb3}, + {value: 0x3308, lo: 0xb4, hi: 0xb9}, + {value: 0x3b08, lo: 0xba, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbe}, + {value: 0x0018, lo: 0xbf, hi: 0xbf}, + // Block 0x16, offset 0xe4 + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x3308, lo: 0x87, hi: 0x8e}, + {value: 0x0018, lo: 0x8f, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0xbf}, + // Block 0x17, offset 0xeb + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x84}, + {value: 0x0040, lo: 0x85, hi: 0x85}, + {value: 0x0008, lo: 0x86, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x3308, lo: 0x88, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9b}, + {value: 0x0961, lo: 0x9c, hi: 0x9c}, + {value: 0x0999, lo: 0x9d, hi: 0x9d}, + {value: 0x0008, lo: 0x9e, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0x18, offset 0xf8 + {value: 0x0000, lo: 0x10}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x8a}, + {value: 0x0008, lo: 0x8b, hi: 0x8b}, + {value: 0xe03d, lo: 0x8c, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0x97}, + {value: 0x3308, lo: 0x98, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0018, lo: 0xaa, hi: 0xb4}, + {value: 0x3308, lo: 0xb5, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xb6}, + {value: 0x3308, lo: 0xb7, hi: 0xb7}, + {value: 0x0018, lo: 0xb8, hi: 0xb8}, + {value: 0x3308, lo: 0xb9, hi: 0xb9}, + {value: 0x0018, lo: 0xba, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0x19, offset 0x109 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x85}, + {value: 0x3308, lo: 0x86, hi: 0x86}, + {value: 0x0018, lo: 0x87, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8d}, + {value: 0x0018, lo: 0x8e, hi: 0x9a}, + {value: 0x0040, lo: 0x9b, hi: 0xbf}, + // Block 0x1a, offset 0x110 + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0xaa}, + {value: 0x3008, lo: 0xab, hi: 0xac}, + {value: 0x3308, lo: 0xad, hi: 0xb0}, + {value: 0x3008, lo: 0xb1, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb7}, + {value: 0x3008, lo: 0xb8, hi: 0xb8}, + {value: 0x3b08, lo: 0xb9, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbc}, + {value: 0x3308, lo: 0xbd, hi: 0xbe}, + {value: 0x0008, lo: 0xbf, hi: 0xbf}, + // Block 0x1b, offset 0x11b + {value: 0x0000, lo: 0x0e}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0018, lo: 0x8a, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x95}, + {value: 0x3008, lo: 0x96, hi: 0x97}, + {value: 0x3308, lo: 0x98, hi: 0x99}, + {value: 0x0008, lo: 0x9a, hi: 0x9d}, + {value: 0x3308, lo: 0x9e, hi: 0xa0}, + {value: 0x0008, lo: 0xa1, hi: 0xa1}, + {value: 0x3008, lo: 0xa2, hi: 0xa4}, + {value: 0x0008, lo: 0xa5, hi: 0xa6}, + {value: 0x3008, lo: 0xa7, hi: 0xad}, + {value: 0x0008, lo: 0xae, hi: 0xb0}, + {value: 0x3308, lo: 0xb1, hi: 0xb4}, + {value: 0x0008, lo: 0xb5, hi: 0xbf}, + // Block 0x1c, offset 0x12a + {value: 0x0000, lo: 0x0d}, + {value: 0x0008, lo: 0x80, hi: 0x81}, + {value: 0x3308, lo: 0x82, hi: 0x82}, + {value: 0x3008, lo: 0x83, hi: 0x84}, + {value: 0x3308, lo: 0x85, hi: 0x86}, + {value: 0x3008, lo: 0x87, hi: 0x8c}, + {value: 0x3308, lo: 0x8d, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x8e}, + {value: 0x3008, lo: 0x8f, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x3008, lo: 0x9a, hi: 0x9c}, + {value: 0x3308, lo: 0x9d, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0x1d, offset 0x138 + {value: 0x0000, lo: 0x09}, + {value: 0x0040, lo: 0x80, hi: 0x86}, + {value: 0x055d, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8c}, + {value: 0x055d, lo: 0x8d, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xba}, + {value: 0x0018, lo: 0xbb, hi: 0xbb}, + {value: 0xe105, lo: 0xbc, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbf}, + // Block 0x1e, offset 0x142 + {value: 0x0000, lo: 0x01}, + {value: 0x0018, lo: 0x80, hi: 0xbf}, + // Block 0x1f, offset 0x144 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0xa0}, + {value: 0x2018, lo: 0xa1, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xbf}, + // Block 0x20, offset 0x149 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xa7}, + {value: 0x2018, lo: 0xa8, hi: 0xbf}, + // Block 0x21, offset 0x14c + {value: 0x0000, lo: 0x02}, + {value: 0x2018, lo: 0x80, hi: 0x82}, + {value: 0x0018, lo: 0x83, hi: 0xbf}, + // Block 0x22, offset 0x14f + {value: 0x0000, lo: 0x01}, + {value: 0x0008, lo: 0x80, hi: 0xbf}, + // Block 0x23, offset 0x151 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0008, lo: 0x8a, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0x98}, + {value: 0x0040, lo: 0x99, hi: 0x99}, + {value: 0x0008, lo: 0x9a, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x24, offset 0x15d + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0008, lo: 0x8a, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb7}, + {value: 0x0008, lo: 0xb8, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x25, offset 0x168 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x0040, lo: 0x81, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0xbf}, + // Block 0x26, offset 0x170 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0x0008, lo: 0x92, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0xbf}, + // Block 0x27, offset 0x176 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x9a}, + {value: 0x0040, lo: 0x9b, hi: 0x9c}, + {value: 0x3308, lo: 0x9d, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0x28, offset 0x17c + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x29, offset 0x181 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb7}, + {value: 0xe045, lo: 0xb8, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x2a, offset 0x186 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0xbf}, + // Block 0x2b, offset 0x189 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xac}, + {value: 0x0018, lo: 0xad, hi: 0xae}, + {value: 0x0008, lo: 0xaf, hi: 0xbf}, + // Block 0x2c, offset 0x18d + {value: 0x0000, lo: 0x05}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9c}, + {value: 0x0040, lo: 0x9d, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x2d, offset 0x193 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xaa}, + {value: 0x0018, lo: 0xab, hi: 0xb0}, + {value: 0x0008, lo: 0xb1, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0x2e, offset 0x198 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x91}, + {value: 0x3308, lo: 0x92, hi: 0x93}, + {value: 0x3b08, lo: 0x94, hi: 0x94}, + {value: 0x0040, lo: 0x95, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb3}, + {value: 0x3b08, lo: 0xb4, hi: 0xb4}, + {value: 0x0018, lo: 0xb5, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x2f, offset 0x1a4 + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x91}, + {value: 0x3308, lo: 0x92, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xad}, + {value: 0x0008, lo: 0xae, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0x30, offset 0x1ae + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0xb3}, + {value: 0x3340, lo: 0xb4, hi: 0xb5}, + {value: 0x3008, lo: 0xb6, hi: 0xb6}, + {value: 0x3308, lo: 0xb7, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0x31, offset 0x1b4 + {value: 0x0000, lo: 0x10}, + {value: 0x3008, lo: 0x80, hi: 0x85}, + {value: 0x3308, lo: 0x86, hi: 0x86}, + {value: 0x3008, lo: 0x87, hi: 0x88}, + {value: 0x3308, lo: 0x89, hi: 0x91}, + {value: 0x3b08, lo: 0x92, hi: 0x92}, + {value: 0x3308, lo: 0x93, hi: 0x93}, + {value: 0x0018, lo: 0x94, hi: 0x96}, + {value: 0x0008, lo: 0x97, hi: 0x97}, + {value: 0x0018, lo: 0x98, hi: 0x9b}, + {value: 0x0008, lo: 0x9c, hi: 0x9c}, + {value: 0x3308, lo: 0x9d, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x32, offset 0x1c5 + {value: 0x0000, lo: 0x09}, + {value: 0x0018, lo: 0x80, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x86}, + {value: 0x0218, lo: 0x87, hi: 0x87}, + {value: 0x0018, lo: 0x88, hi: 0x8a}, + {value: 0x33c0, lo: 0x8b, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0208, lo: 0xa0, hi: 0xbf}, + // Block 0x33, offset 0x1cf + {value: 0x0000, lo: 0x02}, + {value: 0x0208, lo: 0x80, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbf}, + // Block 0x34, offset 0x1d2 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0x84}, + {value: 0x3308, lo: 0x85, hi: 0x86}, + {value: 0x0208, lo: 0x87, hi: 0xa8}, + {value: 0x3308, lo: 0xa9, hi: 0xa9}, + {value: 0x0208, lo: 0xaa, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x35, offset 0x1da + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0x36, offset 0x1dd + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x3308, lo: 0xa0, hi: 0xa2}, + {value: 0x3008, lo: 0xa3, hi: 0xa6}, + {value: 0x3308, lo: 0xa7, hi: 0xa8}, + {value: 0x3008, lo: 0xa9, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x3008, lo: 0xb0, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb2}, + {value: 0x3008, lo: 0xb3, hi: 0xb8}, + {value: 0x3308, lo: 0xb9, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0x37, offset 0x1ea + {value: 0x0000, lo: 0x07}, + {value: 0x0018, lo: 0x80, hi: 0x80}, + {value: 0x0040, lo: 0x81, hi: 0x83}, + {value: 0x0018, lo: 0x84, hi: 0x85}, + {value: 0x0008, lo: 0x86, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0x38, offset 0x1f2 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x39, offset 0x1f6 + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0028, lo: 0x9a, hi: 0x9a}, + {value: 0x0040, lo: 0x9b, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0xbf}, + // Block 0x3a, offset 0x1fd + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0x96}, + {value: 0x3308, lo: 0x97, hi: 0x98}, + {value: 0x3008, lo: 0x99, hi: 0x9a}, + {value: 0x3308, lo: 0x9b, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x3b, offset 0x205 + {value: 0x0000, lo: 0x0f}, + {value: 0x0008, lo: 0x80, hi: 0x94}, + {value: 0x3008, lo: 0x95, hi: 0x95}, + {value: 0x3308, lo: 0x96, hi: 0x96}, + {value: 0x3008, lo: 0x97, hi: 0x97}, + {value: 0x3308, lo: 0x98, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x3b08, lo: 0xa0, hi: 0xa0}, + {value: 0x3008, lo: 0xa1, hi: 0xa1}, + {value: 0x3308, lo: 0xa2, hi: 0xa2}, + {value: 0x3008, lo: 0xa3, hi: 0xa4}, + {value: 0x3308, lo: 0xa5, hi: 0xac}, + {value: 0x3008, lo: 0xad, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbe}, + {value: 0x3308, lo: 0xbf, hi: 0xbf}, + // Block 0x3c, offset 0x215 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa6}, + {value: 0x0008, lo: 0xa7, hi: 0xa7}, + {value: 0x0018, lo: 0xa8, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xbd}, + {value: 0x3318, lo: 0xbe, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x3d, offset 0x221 + {value: 0x0000, lo: 0x01}, + {value: 0x0040, lo: 0x80, hi: 0xbf}, + // Block 0x3e, offset 0x223 + {value: 0x0000, lo: 0x09}, + {value: 0x3308, lo: 0x80, hi: 0x83}, + {value: 0x3008, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0xb3}, + {value: 0x3308, lo: 0xb4, hi: 0xb4}, + {value: 0x3008, lo: 0xb5, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbc}, + {value: 0x3008, lo: 0xbd, hi: 0xbf}, + // Block 0x3f, offset 0x22d + {value: 0x0000, lo: 0x0b}, + {value: 0x3008, lo: 0x80, hi: 0x81}, + {value: 0x3308, lo: 0x82, hi: 0x82}, + {value: 0x3008, lo: 0x83, hi: 0x83}, + {value: 0x3808, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0xaa}, + {value: 0x3308, lo: 0xab, hi: 0xb3}, + {value: 0x0018, lo: 0xb4, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0x40, offset 0x239 + {value: 0x0000, lo: 0x0b}, + {value: 0x3308, lo: 0x80, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xa0}, + {value: 0x3008, lo: 0xa1, hi: 0xa1}, + {value: 0x3308, lo: 0xa2, hi: 0xa5}, + {value: 0x3008, lo: 0xa6, hi: 0xa7}, + {value: 0x3308, lo: 0xa8, hi: 0xa9}, + {value: 0x3808, lo: 0xaa, hi: 0xaa}, + {value: 0x3b08, lo: 0xab, hi: 0xab}, + {value: 0x3308, lo: 0xac, hi: 0xad}, + {value: 0x0008, lo: 0xae, hi: 0xbf}, + // Block 0x41, offset 0x245 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0xa5}, + {value: 0x3308, lo: 0xa6, hi: 0xa6}, + {value: 0x3008, lo: 0xa7, hi: 0xa7}, + {value: 0x3308, lo: 0xa8, hi: 0xa9}, + {value: 0x3008, lo: 0xaa, hi: 0xac}, + {value: 0x3308, lo: 0xad, hi: 0xad}, + {value: 0x3008, lo: 0xae, hi: 0xae}, + {value: 0x3308, lo: 0xaf, hi: 0xb1}, + {value: 0x3808, lo: 0xb2, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbb}, + {value: 0x0018, lo: 0xbc, hi: 0xbf}, + // Block 0x42, offset 0x251 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xa3}, + {value: 0x3008, lo: 0xa4, hi: 0xab}, + {value: 0x3308, lo: 0xac, hi: 0xb3}, + {value: 0x3008, lo: 0xb4, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xba}, + {value: 0x0018, lo: 0xbb, hi: 0xbf}, + // Block 0x43, offset 0x259 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0x8c}, + {value: 0x0008, lo: 0x8d, hi: 0xbd}, + {value: 0x0018, lo: 0xbe, hi: 0xbf}, + // Block 0x44, offset 0x25e + {value: 0x0000, lo: 0x09}, + {value: 0x0e29, lo: 0x80, hi: 0x80}, + {value: 0x0e41, lo: 0x81, hi: 0x81}, + {value: 0x0e59, lo: 0x82, hi: 0x82}, + {value: 0x0e71, lo: 0x83, hi: 0x83}, + {value: 0x0e89, lo: 0x84, hi: 0x85}, + {value: 0x0ea1, lo: 0x86, hi: 0x86}, + {value: 0x0eb9, lo: 0x87, hi: 0x87}, + {value: 0x057d, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0xbf}, + // Block 0x45, offset 0x268 + {value: 0x0000, lo: 0x10}, + {value: 0x0018, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x3308, lo: 0x90, hi: 0x92}, + {value: 0x0018, lo: 0x93, hi: 0x93}, + {value: 0x3308, lo: 0x94, hi: 0xa0}, + {value: 0x3008, lo: 0xa1, hi: 0xa1}, + {value: 0x3308, lo: 0xa2, hi: 0xa8}, + {value: 0x0008, lo: 0xa9, hi: 0xac}, + {value: 0x3308, lo: 0xad, hi: 0xad}, + {value: 0x0008, lo: 0xae, hi: 0xb1}, + {value: 0x3008, lo: 0xb2, hi: 0xb3}, + {value: 0x3308, lo: 0xb4, hi: 0xb4}, + {value: 0x0008, lo: 0xb5, hi: 0xb6}, + {value: 0x3008, lo: 0xb7, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x46, offset 0x279 + {value: 0x0000, lo: 0x03}, + {value: 0x3308, lo: 0x80, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xba}, + {value: 0x3308, lo: 0xbb, hi: 0xbf}, + // Block 0x47, offset 0x27d + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x87}, + {value: 0xe045, lo: 0x88, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x97}, + {value: 0xe045, lo: 0x98, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa7}, + {value: 0xe045, lo: 0xa8, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb7}, + {value: 0xe045, lo: 0xb8, hi: 0xbf}, + // Block 0x48, offset 0x288 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x3318, lo: 0x90, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xbf}, + // Block 0x49, offset 0x28c + {value: 0x0000, lo: 0x08}, + {value: 0x0018, lo: 0x80, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x84}, + {value: 0x0018, lo: 0x85, hi: 0x88}, + {value: 0x24c1, lo: 0x89, hi: 0x89}, + {value: 0x0018, lo: 0x8a, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbf}, + // Block 0x4a, offset 0x295 + {value: 0x0000, lo: 0x07}, + {value: 0x0018, lo: 0x80, hi: 0xab}, + {value: 0x24f1, lo: 0xac, hi: 0xac}, + {value: 0x2529, lo: 0xad, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xae}, + {value: 0x2579, lo: 0xaf, hi: 0xaf}, + {value: 0x25b1, lo: 0xb0, hi: 0xb0}, + {value: 0x0018, lo: 0xb1, hi: 0xbf}, + // Block 0x4b, offset 0x29d + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x9f}, + {value: 0x0080, lo: 0xa0, hi: 0xa0}, + {value: 0x0018, lo: 0xa1, hi: 0xad}, + {value: 0x0080, lo: 0xae, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x4c, offset 0x2a3 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0xa8}, + {value: 0x09c5, lo: 0xa9, hi: 0xa9}, + {value: 0x09e5, lo: 0xaa, hi: 0xaa}, + {value: 0x0018, lo: 0xab, hi: 0xbf}, + // Block 0x4d, offset 0x2a8 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xbf}, + // Block 0x4e, offset 0x2ab + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x8b}, + {value: 0x28c1, lo: 0x8c, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0xbf}, + // Block 0x4f, offset 0x2af + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0e66, lo: 0xb4, hi: 0xb4}, + {value: 0x292a, lo: 0xb5, hi: 0xb5}, + {value: 0x0e86, lo: 0xb6, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xbf}, + // Block 0x50, offset 0x2b5 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x9b}, + {value: 0x2941, lo: 0x9c, hi: 0x9c}, + {value: 0x0018, lo: 0x9d, hi: 0xbf}, + // Block 0x51, offset 0x2b9 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xbf}, + // Block 0x52, offset 0x2bd + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x97}, + {value: 0x0018, lo: 0x98, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbc}, + {value: 0x0018, lo: 0xbd, hi: 0xbf}, + // Block 0x53, offset 0x2c3 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0018, lo: 0x8a, hi: 0x92}, + {value: 0x0040, lo: 0x93, hi: 0xab}, + {value: 0x0018, lo: 0xac, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0x54, offset 0x2ca + {value: 0x0000, lo: 0x05}, + {value: 0xe185, lo: 0x80, hi: 0x8f}, + {value: 0x03f5, lo: 0x90, hi: 0x9f}, + {value: 0x0ea5, lo: 0xa0, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x55, offset 0x2d0 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xa5}, + {value: 0x0040, lo: 0xa6, hi: 0xa6}, + {value: 0x0008, lo: 0xa7, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xac}, + {value: 0x0008, lo: 0xad, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x56, offset 0x2d8 + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xae}, + {value: 0xe075, lo: 0xaf, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0x57, offset 0x2df + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xb7}, + {value: 0x0008, lo: 0xb8, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x58, offset 0x2ea + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x3308, lo: 0xa0, hi: 0xbf}, + // Block 0x59, offset 0x2f4 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xae}, + {value: 0x0008, lo: 0xaf, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x5a, offset 0x2f8 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0xbf}, + // Block 0x5b, offset 0x2fb + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9e}, + {value: 0x0edd, lo: 0x9f, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xbf}, + // Block 0x5c, offset 0x301 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xb2}, + {value: 0x0efd, lo: 0xb3, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0x5d, offset 0x305 + {value: 0x0020, lo: 0x01}, + {value: 0x0f1d, lo: 0x80, hi: 0xbf}, + // Block 0x5e, offset 0x307 + {value: 0x0020, lo: 0x02}, + {value: 0x171d, lo: 0x80, hi: 0x8f}, + {value: 0x18fd, lo: 0x90, hi: 0xbf}, + // Block 0x5f, offset 0x30a + {value: 0x0020, lo: 0x01}, + {value: 0x1efd, lo: 0x80, hi: 0xbf}, + // Block 0x60, offset 0x30c + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0xbf}, + // Block 0x61, offset 0x30f + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x98}, + {value: 0x3308, lo: 0x99, hi: 0x9a}, + {value: 0x29e2, lo: 0x9b, hi: 0x9b}, + {value: 0x2a0a, lo: 0x9c, hi: 0x9c}, + {value: 0x0008, lo: 0x9d, hi: 0x9e}, + {value: 0x2a31, lo: 0x9f, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa0}, + {value: 0x0008, lo: 0xa1, hi: 0xbf}, + // Block 0x62, offset 0x319 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xbe}, + {value: 0x2a69, lo: 0xbf, hi: 0xbf}, + // Block 0x63, offset 0x31c + {value: 0x0000, lo: 0x0e}, + {value: 0x0040, lo: 0x80, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xb0}, + {value: 0x2a1d, lo: 0xb1, hi: 0xb1}, + {value: 0x2a3d, lo: 0xb2, hi: 0xb2}, + {value: 0x2a5d, lo: 0xb3, hi: 0xb3}, + {value: 0x2a7d, lo: 0xb4, hi: 0xb4}, + {value: 0x2a5d, lo: 0xb5, hi: 0xb5}, + {value: 0x2a9d, lo: 0xb6, hi: 0xb6}, + {value: 0x2abd, lo: 0xb7, hi: 0xb7}, + {value: 0x2add, lo: 0xb8, hi: 0xb9}, + {value: 0x2afd, lo: 0xba, hi: 0xbb}, + {value: 0x2b1d, lo: 0xbc, hi: 0xbd}, + {value: 0x2afd, lo: 0xbe, hi: 0xbf}, + // Block 0x64, offset 0x32b + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x65, offset 0x32f + {value: 0x0030, lo: 0x04}, + {value: 0x2aa2, lo: 0x80, hi: 0x9d}, + {value: 0x305a, lo: 0x9e, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x30a2, lo: 0xa0, hi: 0xbf}, + // Block 0x66, offset 0x334 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xbf}, + // Block 0x67, offset 0x337 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbf}, + // Block 0x68, offset 0x33b + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xbd}, + {value: 0x0018, lo: 0xbe, hi: 0xbf}, + // Block 0x69, offset 0x340 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xbf}, + // Block 0x6a, offset 0x345 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0xa5}, + {value: 0x0018, lo: 0xa6, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb1}, + {value: 0x0018, lo: 0xb2, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbf}, + // Block 0x6b, offset 0x34b + {value: 0x0000, lo: 0x05}, + {value: 0x0040, lo: 0x80, hi: 0xb6}, + {value: 0x0008, lo: 0xb7, hi: 0xb7}, + {value: 0x2009, lo: 0xb8, hi: 0xb8}, + {value: 0x6e89, lo: 0xb9, hi: 0xb9}, + {value: 0x0008, lo: 0xba, hi: 0xbf}, + // Block 0x6c, offset 0x351 + {value: 0x0000, lo: 0x0e}, + {value: 0x0008, lo: 0x80, hi: 0x81}, + {value: 0x3308, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0x85}, + {value: 0x3b08, lo: 0x86, hi: 0x86}, + {value: 0x0008, lo: 0x87, hi: 0x8a}, + {value: 0x3308, lo: 0x8b, hi: 0x8b}, + {value: 0x0008, lo: 0x8c, hi: 0xa2}, + {value: 0x3008, lo: 0xa3, hi: 0xa4}, + {value: 0x3308, lo: 0xa5, hi: 0xa6}, + {value: 0x3008, lo: 0xa7, hi: 0xa7}, + {value: 0x0018, lo: 0xa8, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x6d, offset 0x360 + {value: 0x0000, lo: 0x05}, + {value: 0x0208, lo: 0x80, hi: 0xb1}, + {value: 0x0108, lo: 0xb2, hi: 0xb2}, + {value: 0x0008, lo: 0xb3, hi: 0xb3}, + {value: 0x0018, lo: 0xb4, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbf}, + // Block 0x6e, offset 0x366 + {value: 0x0000, lo: 0x03}, + {value: 0x3008, lo: 0x80, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0xb3}, + {value: 0x3008, lo: 0xb4, hi: 0xbf}, + // Block 0x6f, offset 0x36a + {value: 0x0000, lo: 0x0e}, + {value: 0x3008, lo: 0x80, hi: 0x83}, + {value: 0x3b08, lo: 0x84, hi: 0x84}, + {value: 0x3308, lo: 0x85, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x8d}, + {value: 0x0018, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x3308, lo: 0xa0, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xb7}, + {value: 0x0018, lo: 0xb8, hi: 0xba}, + {value: 0x0008, lo: 0xbb, hi: 0xbb}, + {value: 0x0018, lo: 0xbc, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x70, offset 0x379 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xa5}, + {value: 0x3308, lo: 0xa6, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x71, offset 0x37e + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x3308, lo: 0x87, hi: 0x91}, + {value: 0x3008, lo: 0x92, hi: 0x92}, + {value: 0x3808, lo: 0x93, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x9e}, + {value: 0x0018, lo: 0x9f, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0x72, offset 0x386 + {value: 0x0000, lo: 0x09}, + {value: 0x3308, lo: 0x80, hi: 0x82}, + {value: 0x3008, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xb3}, + {value: 0x3008, lo: 0xb4, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xb9}, + {value: 0x3008, lo: 0xba, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbc}, + {value: 0x3008, lo: 0xbd, hi: 0xbf}, + // Block 0x73, offset 0x390 + {value: 0x0000, lo: 0x0a}, + {value: 0x3808, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8e}, + {value: 0x0008, lo: 0x8f, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa4}, + {value: 0x3308, lo: 0xa5, hi: 0xa5}, + {value: 0x0008, lo: 0xa6, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x74, offset 0x39b + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xa8}, + {value: 0x3308, lo: 0xa9, hi: 0xae}, + {value: 0x3008, lo: 0xaf, hi: 0xb0}, + {value: 0x3308, lo: 0xb1, hi: 0xb2}, + {value: 0x3008, lo: 0xb3, hi: 0xb4}, + {value: 0x3308, lo: 0xb5, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x75, offset 0x3a3 + {value: 0x0000, lo: 0x10}, + {value: 0x0008, lo: 0x80, hi: 0x82}, + {value: 0x3308, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x8b}, + {value: 0x3308, lo: 0x8c, hi: 0x8c}, + {value: 0x3008, lo: 0x8d, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9b}, + {value: 0x0018, lo: 0x9c, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xb9}, + {value: 0x0008, lo: 0xba, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbc}, + {value: 0x3008, lo: 0xbd, hi: 0xbd}, + {value: 0x0008, lo: 0xbe, hi: 0xbf}, + // Block 0x76, offset 0x3b4 + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb0}, + {value: 0x0008, lo: 0xb1, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb4}, + {value: 0x0008, lo: 0xb5, hi: 0xb6}, + {value: 0x3308, lo: 0xb7, hi: 0xb8}, + {value: 0x0008, lo: 0xb9, hi: 0xbd}, + {value: 0x3308, lo: 0xbe, hi: 0xbf}, + // Block 0x77, offset 0x3bd + {value: 0x0000, lo: 0x0f}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x9a}, + {value: 0x0008, lo: 0x9b, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xaa}, + {value: 0x3008, lo: 0xab, hi: 0xab}, + {value: 0x3308, lo: 0xac, hi: 0xad}, + {value: 0x3008, lo: 0xae, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xb4}, + {value: 0x3008, lo: 0xb5, hi: 0xb5}, + {value: 0x3b08, lo: 0xb6, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x78, offset 0x3cd + {value: 0x0000, lo: 0x0c}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x88}, + {value: 0x0008, lo: 0x89, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0x90}, + {value: 0x0008, lo: 0x91, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x79, offset 0x3da + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9b}, + {value: 0x4465, lo: 0x9c, hi: 0x9c}, + {value: 0x447d, lo: 0x9d, hi: 0x9d}, + {value: 0x2971, lo: 0x9e, hi: 0x9e}, + {value: 0xe06d, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa5}, + {value: 0x0040, lo: 0xa6, hi: 0xaf}, + {value: 0x4495, lo: 0xb0, hi: 0xbf}, + // Block 0x7a, offset 0x3e4 + {value: 0x0000, lo: 0x04}, + {value: 0x44b5, lo: 0x80, hi: 0x8f}, + {value: 0x44d5, lo: 0x90, hi: 0x9f}, + {value: 0x44f5, lo: 0xa0, hi: 0xaf}, + {value: 0x44d5, lo: 0xb0, hi: 0xbf}, + // Block 0x7b, offset 0x3e9 + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0xa2}, + {value: 0x3008, lo: 0xa3, hi: 0xa4}, + {value: 0x3308, lo: 0xa5, hi: 0xa5}, + {value: 0x3008, lo: 0xa6, hi: 0xa7}, + {value: 0x3308, lo: 0xa8, hi: 0xa8}, + {value: 0x3008, lo: 0xa9, hi: 0xaa}, + {value: 0x0018, lo: 0xab, hi: 0xab}, + {value: 0x3008, lo: 0xac, hi: 0xac}, + {value: 0x3b08, lo: 0xad, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x7c, offset 0x3f6 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x7d, offset 0x3fa + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x8a}, + {value: 0x0018, lo: 0x8b, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0x7e, offset 0x3ff + {value: 0x0020, lo: 0x01}, + {value: 0x4515, lo: 0x80, hi: 0xbf}, + // Block 0x7f, offset 0x401 + {value: 0x0020, lo: 0x03}, + {value: 0x4d15, lo: 0x80, hi: 0x94}, + {value: 0x4ad5, lo: 0x95, hi: 0x95}, + {value: 0x4fb5, lo: 0x96, hi: 0xbf}, + // Block 0x80, offset 0x405 + {value: 0x0020, lo: 0x01}, + {value: 0x54f5, lo: 0x80, hi: 0xbf}, + // Block 0x81, offset 0x407 + {value: 0x0020, lo: 0x03}, + {value: 0x5cf5, lo: 0x80, hi: 0x84}, + {value: 0x5655, lo: 0x85, hi: 0x85}, + {value: 0x5d95, lo: 0x86, hi: 0xbf}, + // Block 0x82, offset 0x40b + {value: 0x0020, lo: 0x08}, + {value: 0x6b55, lo: 0x80, hi: 0x8f}, + {value: 0x6d15, lo: 0x90, hi: 0x90}, + {value: 0x6d55, lo: 0x91, hi: 0xab}, + {value: 0x6ea1, lo: 0xac, hi: 0xac}, + {value: 0x70b5, lo: 0xad, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x70d5, lo: 0xb0, hi: 0xbf}, + // Block 0x83, offset 0x414 + {value: 0x0020, lo: 0x05}, + {value: 0x72d5, lo: 0x80, hi: 0xad}, + {value: 0x6535, lo: 0xae, hi: 0xae}, + {value: 0x7895, lo: 0xaf, hi: 0xb5}, + {value: 0x6f55, lo: 0xb6, hi: 0xb6}, + {value: 0x7975, lo: 0xb7, hi: 0xbf}, + // Block 0x84, offset 0x41a + {value: 0x0028, lo: 0x03}, + {value: 0x7c21, lo: 0x80, hi: 0x82}, + {value: 0x7be1, lo: 0x83, hi: 0x83}, + {value: 0x7c99, lo: 0x84, hi: 0xbf}, + // Block 0x85, offset 0x41e + {value: 0x0038, lo: 0x0f}, + {value: 0x9db1, lo: 0x80, hi: 0x83}, + {value: 0x9e59, lo: 0x84, hi: 0x85}, + {value: 0x9e91, lo: 0x86, hi: 0x87}, + {value: 0x9ec9, lo: 0x88, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0xa089, lo: 0x92, hi: 0x97}, + {value: 0xa1a1, lo: 0x98, hi: 0x9c}, + {value: 0xa281, lo: 0x9d, hi: 0xb3}, + {value: 0x9d41, lo: 0xb4, hi: 0xb4}, + {value: 0x9db1, lo: 0xb5, hi: 0xb5}, + {value: 0xa789, lo: 0xb6, hi: 0xbb}, + {value: 0xa869, lo: 0xbc, hi: 0xbc}, + {value: 0xa7f9, lo: 0xbd, hi: 0xbd}, + {value: 0xa8d9, lo: 0xbe, hi: 0xbf}, + // Block 0x86, offset 0x42e + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8c}, + {value: 0x0008, lo: 0x8d, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbb}, + {value: 0x0008, lo: 0xbc, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbe}, + {value: 0x0008, lo: 0xbf, hi: 0xbf}, + // Block 0x87, offset 0x438 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0xbf}, + // Block 0x88, offset 0x43d + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x89, offset 0x440 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x86}, + {value: 0x0018, lo: 0x87, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xbf}, + // Block 0x8a, offset 0x446 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa0}, + {value: 0x0040, lo: 0xa1, hi: 0xbf}, + // Block 0x8b, offset 0x44d + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbc}, + {value: 0x3308, lo: 0xbd, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x8c, offset 0x452 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x9c}, + {value: 0x0040, lo: 0x9d, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x8d, offset 0x456 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x9f}, + {value: 0x3308, lo: 0xa0, hi: 0xa0}, + {value: 0x0018, lo: 0xa1, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0x8e, offset 0x45c + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xac}, + {value: 0x0008, lo: 0xad, hi: 0xbf}, + // Block 0x8f, offset 0x461 + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0x89}, + {value: 0x0018, lo: 0x8a, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x90, offset 0x46a + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9e}, + {value: 0x0018, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x91, offset 0x46f + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0xbf}, + // Block 0x92, offset 0x475 + {value: 0x0000, lo: 0x06}, + {value: 0xe145, lo: 0x80, hi: 0x87}, + {value: 0xe1c5, lo: 0x88, hi: 0x8f}, + {value: 0xe145, lo: 0x90, hi: 0x97}, + {value: 0x8ad5, lo: 0x98, hi: 0x9f}, + {value: 0x8aed, lo: 0xa0, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xbf}, + // Block 0x93, offset 0x47c + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xaf}, + {value: 0x8aed, lo: 0xb0, hi: 0xb7}, + {value: 0x8ad5, lo: 0xb8, hi: 0xbf}, + // Block 0x94, offset 0x483 + {value: 0x0000, lo: 0x06}, + {value: 0xe145, lo: 0x80, hi: 0x87}, + {value: 0xe1c5, lo: 0x88, hi: 0x8f}, + {value: 0xe145, lo: 0x90, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0x95, offset 0x48a + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x96, offset 0x48e + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xae}, + {value: 0x0018, lo: 0xaf, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0x97, offset 0x493 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x98, offset 0x496 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xbf}, + // Block 0x99, offset 0x49b + {value: 0x0000, lo: 0x0b}, + {value: 0x0808, lo: 0x80, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x87}, + {value: 0x0808, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0808, lo: 0x8a, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb6}, + {value: 0x0808, lo: 0xb7, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbb}, + {value: 0x0808, lo: 0xbc, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbe}, + {value: 0x0808, lo: 0xbf, hi: 0xbf}, + // Block 0x9a, offset 0x4a7 + {value: 0x0000, lo: 0x05}, + {value: 0x0808, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x96}, + {value: 0x0818, lo: 0x97, hi: 0x9f}, + {value: 0x0808, lo: 0xa0, hi: 0xb6}, + {value: 0x0818, lo: 0xb7, hi: 0xbf}, + // Block 0x9b, offset 0x4ad + {value: 0x0000, lo: 0x04}, + {value: 0x0808, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0xa6}, + {value: 0x0818, lo: 0xa7, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0x9c, offset 0x4b2 + {value: 0x0000, lo: 0x06}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0808, lo: 0xa0, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xb3}, + {value: 0x0808, lo: 0xb4, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xba}, + {value: 0x0818, lo: 0xbb, hi: 0xbf}, + // Block 0x9d, offset 0x4b9 + {value: 0x0000, lo: 0x07}, + {value: 0x0808, lo: 0x80, hi: 0x95}, + {value: 0x0818, lo: 0x96, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9e}, + {value: 0x0018, lo: 0x9f, hi: 0x9f}, + {value: 0x0808, lo: 0xa0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbe}, + {value: 0x0818, lo: 0xbf, hi: 0xbf}, + // Block 0x9e, offset 0x4c1 + {value: 0x0000, lo: 0x04}, + {value: 0x0808, lo: 0x80, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbb}, + {value: 0x0818, lo: 0xbc, hi: 0xbd}, + {value: 0x0808, lo: 0xbe, hi: 0xbf}, + // Block 0x9f, offset 0x4c6 + {value: 0x0000, lo: 0x03}, + {value: 0x0818, lo: 0x80, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x91}, + {value: 0x0818, lo: 0x92, hi: 0xbf}, + // Block 0xa0, offset 0x4ca + {value: 0x0000, lo: 0x0f}, + {value: 0x0808, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x84}, + {value: 0x3308, lo: 0x85, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x8b}, + {value: 0x3308, lo: 0x8c, hi: 0x8f}, + {value: 0x0808, lo: 0x90, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x94}, + {value: 0x0808, lo: 0x95, hi: 0x97}, + {value: 0x0040, lo: 0x98, hi: 0x98}, + {value: 0x0808, lo: 0x99, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xa1, offset 0x4da + {value: 0x0000, lo: 0x06}, + {value: 0x0818, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0818, lo: 0x90, hi: 0x98}, + {value: 0x0040, lo: 0x99, hi: 0x9f}, + {value: 0x0808, lo: 0xa0, hi: 0xbc}, + {value: 0x0818, lo: 0xbd, hi: 0xbf}, + // Block 0xa2, offset 0x4e1 + {value: 0x0000, lo: 0x03}, + {value: 0x0808, lo: 0x80, hi: 0x9c}, + {value: 0x0818, lo: 0x9d, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0xa3, offset 0x4e5 + {value: 0x0000, lo: 0x03}, + {value: 0x0808, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb8}, + {value: 0x0018, lo: 0xb9, hi: 0xbf}, + // Block 0xa4, offset 0x4e9 + {value: 0x0000, lo: 0x06}, + {value: 0x0808, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x97}, + {value: 0x0818, lo: 0x98, hi: 0x9f}, + {value: 0x0808, lo: 0xa0, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xb7}, + {value: 0x0818, lo: 0xb8, hi: 0xbf}, + // Block 0xa5, offset 0x4f0 + {value: 0x0000, lo: 0x01}, + {value: 0x0808, lo: 0x80, hi: 0xbf}, + // Block 0xa6, offset 0x4f2 + {value: 0x0000, lo: 0x02}, + {value: 0x0808, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0xbf}, + // Block 0xa7, offset 0x4f5 + {value: 0x0000, lo: 0x02}, + {value: 0x03dd, lo: 0x80, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xbf}, + // Block 0xa8, offset 0x4f8 + {value: 0x0000, lo: 0x03}, + {value: 0x0808, lo: 0x80, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xb9}, + {value: 0x0818, lo: 0xba, hi: 0xbf}, + // Block 0xa9, offset 0x4fc + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0818, lo: 0xa0, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xaa, offset 0x500 + {value: 0x0000, lo: 0x05}, + {value: 0x3008, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xbf}, + // Block 0xab, offset 0x506 + {value: 0x0000, lo: 0x08}, + {value: 0x3308, lo: 0x80, hi: 0x85}, + {value: 0x3b08, lo: 0x86, hi: 0x86}, + {value: 0x0018, lo: 0x87, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x91}, + {value: 0x0018, lo: 0x92, hi: 0xa5}, + {value: 0x0008, lo: 0xa6, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xac, offset 0x50f + {value: 0x0000, lo: 0x0b}, + {value: 0x3308, lo: 0x80, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xaf}, + {value: 0x3008, lo: 0xb0, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xb6}, + {value: 0x3008, lo: 0xb7, hi: 0xb8}, + {value: 0x3b08, lo: 0xb9, hi: 0xb9}, + {value: 0x3308, lo: 0xba, hi: 0xba}, + {value: 0x0018, lo: 0xbb, hi: 0xbc}, + {value: 0x0340, lo: 0xbd, hi: 0xbd}, + {value: 0x0018, lo: 0xbe, hi: 0xbf}, + // Block 0xad, offset 0x51b + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x81}, + {value: 0x0040, lo: 0x82, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xa8}, + {value: 0x0040, lo: 0xa9, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0xae, offset 0x522 + {value: 0x0000, lo: 0x08}, + {value: 0x3308, lo: 0x80, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xa6}, + {value: 0x3308, lo: 0xa7, hi: 0xab}, + {value: 0x3008, lo: 0xac, hi: 0xac}, + {value: 0x3308, lo: 0xad, hi: 0xb2}, + {value: 0x3b08, lo: 0xb3, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xb5}, + {value: 0x0008, lo: 0xb6, hi: 0xbf}, + // Block 0xaf, offset 0x52b + {value: 0x0000, lo: 0x07}, + {value: 0x0018, lo: 0x80, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xb3}, + {value: 0x0018, lo: 0xb4, hi: 0xb5}, + {value: 0x0008, lo: 0xb6, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0xb0, offset 0x533 + {value: 0x0000, lo: 0x06}, + {value: 0x3308, lo: 0x80, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xb2}, + {value: 0x3008, lo: 0xb3, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xbe}, + {value: 0x3008, lo: 0xbf, hi: 0xbf}, + // Block 0xb1, offset 0x53a + {value: 0x0000, lo: 0x0d}, + {value: 0x3808, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0x84}, + {value: 0x0018, lo: 0x85, hi: 0x89}, + {value: 0x3308, lo: 0x8a, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9b}, + {value: 0x0008, lo: 0x9c, hi: 0x9c}, + {value: 0x0018, lo: 0x9d, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xa0}, + {value: 0x0018, lo: 0xa1, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0xb2, offset 0x548 + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x91}, + {value: 0x0040, lo: 0x92, hi: 0x92}, + {value: 0x0008, lo: 0x93, hi: 0xab}, + {value: 0x3008, lo: 0xac, hi: 0xae}, + {value: 0x3308, lo: 0xaf, hi: 0xb1}, + {value: 0x3008, lo: 0xb2, hi: 0xb3}, + {value: 0x3308, lo: 0xb4, hi: 0xb4}, + {value: 0x3808, lo: 0xb5, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xb7}, + {value: 0x0018, lo: 0xb8, hi: 0xbd}, + {value: 0x3308, lo: 0xbe, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xb3, offset 0x555 + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0008, lo: 0x8a, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8e}, + {value: 0x0008, lo: 0x8f, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9e}, + {value: 0x0008, lo: 0x9f, hi: 0xa8}, + {value: 0x0018, lo: 0xa9, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0xb4, offset 0x562 + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x3308, lo: 0x9f, hi: 0x9f}, + {value: 0x3008, lo: 0xa0, hi: 0xa2}, + {value: 0x3308, lo: 0xa3, hi: 0xa9}, + {value: 0x3b08, lo: 0xaa, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0xb5, offset 0x56b + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xb4}, + {value: 0x3008, lo: 0xb5, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xbf}, + // Block 0xb6, offset 0x56f + {value: 0x0000, lo: 0x0d}, + {value: 0x3008, lo: 0x80, hi: 0x81}, + {value: 0x3b08, lo: 0x82, hi: 0x82}, + {value: 0x3308, lo: 0x83, hi: 0x84}, + {value: 0x3008, lo: 0x85, hi: 0x85}, + {value: 0x3308, lo: 0x86, hi: 0x86}, + {value: 0x0008, lo: 0x87, hi: 0x8a}, + {value: 0x0018, lo: 0x8b, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9c}, + {value: 0x0018, lo: 0x9d, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0xbf}, + // Block 0xb7, offset 0x57d + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x3008, lo: 0xb0, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xb8}, + {value: 0x3008, lo: 0xb9, hi: 0xb9}, + {value: 0x3308, lo: 0xba, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbe}, + {value: 0x3308, lo: 0xbf, hi: 0xbf}, + // Block 0xb8, offset 0x585 + {value: 0x0000, lo: 0x0a}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x3008, lo: 0x81, hi: 0x81}, + {value: 0x3b08, lo: 0x82, hi: 0x82}, + {value: 0x3308, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x85}, + {value: 0x0018, lo: 0x86, hi: 0x86}, + {value: 0x0008, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0xbf}, + // Block 0xb9, offset 0x590 + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0xae}, + {value: 0x3008, lo: 0xaf, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb7}, + {value: 0x3008, lo: 0xb8, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xba, offset 0x599 + {value: 0x0000, lo: 0x05}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0x9b}, + {value: 0x3308, lo: 0x9c, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0xbf}, + // Block 0xbb, offset 0x59f + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x3008, lo: 0xb0, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbc}, + {value: 0x3308, lo: 0xbd, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xbc, offset 0x5a7 + {value: 0x0000, lo: 0x08}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x84}, + {value: 0x0040, lo: 0x85, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xbf}, + // Block 0xbd, offset 0x5b0 + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0xaa}, + {value: 0x3308, lo: 0xab, hi: 0xab}, + {value: 0x3008, lo: 0xac, hi: 0xac}, + {value: 0x3308, lo: 0xad, hi: 0xad}, + {value: 0x3008, lo: 0xae, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb5}, + {value: 0x3808, lo: 0xb6, hi: 0xb6}, + {value: 0x3308, lo: 0xb7, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbf}, + // Block 0xbe, offset 0x5ba + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0xbf}, + // Block 0xbf, offset 0x5bd + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9c}, + {value: 0x3308, lo: 0x9d, hi: 0x9f}, + {value: 0x3008, lo: 0xa0, hi: 0xa1}, + {value: 0x3308, lo: 0xa2, hi: 0xa5}, + {value: 0x3008, lo: 0xa6, hi: 0xa6}, + {value: 0x3308, lo: 0xa7, hi: 0xaa}, + {value: 0x3b08, lo: 0xab, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0018, lo: 0xba, hi: 0xbf}, + // Block 0xc0, offset 0x5c9 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x049d, lo: 0xa0, hi: 0xbf}, + // Block 0xc1, offset 0x5cc + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xa9}, + {value: 0x0018, lo: 0xaa, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xbe}, + {value: 0x0008, lo: 0xbf, hi: 0xbf}, + // Block 0xc2, offset 0x5d1 + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x86}, + {value: 0x3008, lo: 0x87, hi: 0x88}, + {value: 0x3308, lo: 0x89, hi: 0x8a}, + {value: 0x0008, lo: 0x8b, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xb3}, + {value: 0x3b08, lo: 0xb4, hi: 0xb4}, + {value: 0x3308, lo: 0xb5, hi: 0xb8}, + {value: 0x3008, lo: 0xb9, hi: 0xb9}, + {value: 0x0008, lo: 0xba, hi: 0xba}, + {value: 0x3308, lo: 0xbb, hi: 0xbe}, + {value: 0x0018, lo: 0xbf, hi: 0xbf}, + // Block 0xc3, offset 0x5de + {value: 0x0000, lo: 0x08}, + {value: 0x0018, lo: 0x80, hi: 0x86}, + {value: 0x3b08, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x90}, + {value: 0x3308, lo: 0x91, hi: 0x96}, + {value: 0x3008, lo: 0x97, hi: 0x98}, + {value: 0x3308, lo: 0x99, hi: 0x9b}, + {value: 0x0008, lo: 0x9c, hi: 0xbf}, + // Block 0xc4, offset 0x5e7 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x85}, + {value: 0x0008, lo: 0x86, hi: 0x89}, + {value: 0x3308, lo: 0x8a, hi: 0x96}, + {value: 0x3008, lo: 0x97, hi: 0x97}, + {value: 0x3308, lo: 0x98, hi: 0x98}, + {value: 0x3b08, lo: 0x99, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0x9c}, + {value: 0x0040, lo: 0x9d, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0xa2}, + {value: 0x0040, lo: 0xa3, hi: 0xbf}, + // Block 0xc5, offset 0x5f3 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0xc6, offset 0x5f6 + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0008, lo: 0x8a, hi: 0xae}, + {value: 0x3008, lo: 0xaf, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xc7, offset 0x600 + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xbf}, + // Block 0xc8, offset 0x609 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x91}, + {value: 0x3308, lo: 0x92, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xa8}, + {value: 0x3008, lo: 0xa9, hi: 0xa9}, + {value: 0x3308, lo: 0xaa, hi: 0xb0}, + {value: 0x3008, lo: 0xb1, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb3}, + {value: 0x3008, lo: 0xb4, hi: 0xb4}, + {value: 0x3308, lo: 0xb5, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0xc9, offset 0x615 + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0x8a}, + {value: 0x0008, lo: 0x8b, hi: 0xb0}, + {value: 0x3308, lo: 0xb1, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xb9}, + {value: 0x3308, lo: 0xba, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbe}, + {value: 0x3308, lo: 0xbf, hi: 0xbf}, + // Block 0xca, offset 0x622 + {value: 0x0000, lo: 0x07}, + {value: 0x3308, lo: 0x80, hi: 0x83}, + {value: 0x3b08, lo: 0x84, hi: 0x85}, + {value: 0x0008, lo: 0x86, hi: 0x86}, + {value: 0x3308, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0xbf}, + // Block 0xcb, offset 0x62a + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0xbf}, + // Block 0xcc, offset 0x62d + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0xcd, offset 0x632 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0xbf}, + // Block 0xce, offset 0x635 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xbf}, + // Block 0xcf, offset 0x638 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0xbf}, + // Block 0xd0, offset 0x63b + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0xd1, offset 0x642 + {value: 0x0000, lo: 0x06}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb4}, + {value: 0x0018, lo: 0xb5, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0xd2, offset 0x649 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xbf}, + // Block 0xd3, offset 0x64d + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x83}, + {value: 0x0018, lo: 0x84, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xa2}, + {value: 0x0008, lo: 0xa3, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbf}, + // Block 0xd4, offset 0x658 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0xbf}, + // Block 0xd5, offset 0x65b + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x84}, + {value: 0x0040, lo: 0x85, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x90}, + {value: 0x3008, lo: 0x91, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xd6, offset 0x661 + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x8e}, + {value: 0x3308, lo: 0x8f, hi: 0x92}, + {value: 0x0008, lo: 0x93, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0xd7, offset 0x666 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xbf}, + // Block 0xd8, offset 0x66a + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xbf}, + // Block 0xd9, offset 0x66d + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xbf}, + // Block 0xda, offset 0x670 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0xbf}, + // Block 0xdb, offset 0x673 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0xdc, offset 0x676 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0xdd, offset 0x679 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0xde, offset 0x67e + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9b}, + {value: 0x0018, lo: 0x9c, hi: 0x9c}, + {value: 0x3308, lo: 0x9d, hi: 0x9e}, + {value: 0x0018, lo: 0x9f, hi: 0x9f}, + {value: 0x03c0, lo: 0xa0, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xbf}, + // Block 0xdf, offset 0x688 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0xe0, offset 0x68b + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa8}, + {value: 0x0018, lo: 0xa9, hi: 0xbf}, + // Block 0xe1, offset 0x68f + {value: 0x0000, lo: 0x0e}, + {value: 0x0018, lo: 0x80, hi: 0x9d}, + {value: 0xb5b9, lo: 0x9e, hi: 0x9e}, + {value: 0xb601, lo: 0x9f, hi: 0x9f}, + {value: 0xb649, lo: 0xa0, hi: 0xa0}, + {value: 0xb6b1, lo: 0xa1, hi: 0xa1}, + {value: 0xb719, lo: 0xa2, hi: 0xa2}, + {value: 0xb781, lo: 0xa3, hi: 0xa3}, + {value: 0xb7e9, lo: 0xa4, hi: 0xa4}, + {value: 0x3018, lo: 0xa5, hi: 0xa6}, + {value: 0x3318, lo: 0xa7, hi: 0xa9}, + {value: 0x0018, lo: 0xaa, hi: 0xac}, + {value: 0x3018, lo: 0xad, hi: 0xb2}, + {value: 0x0340, lo: 0xb3, hi: 0xba}, + {value: 0x3318, lo: 0xbb, hi: 0xbf}, + // Block 0xe2, offset 0x69e + {value: 0x0000, lo: 0x0b}, + {value: 0x3318, lo: 0x80, hi: 0x82}, + {value: 0x0018, lo: 0x83, hi: 0x84}, + {value: 0x3318, lo: 0x85, hi: 0x8b}, + {value: 0x0018, lo: 0x8c, hi: 0xa9}, + {value: 0x3318, lo: 0xaa, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xba}, + {value: 0xb851, lo: 0xbb, hi: 0xbb}, + {value: 0xb899, lo: 0xbc, hi: 0xbc}, + {value: 0xb8e1, lo: 0xbd, hi: 0xbd}, + {value: 0xb949, lo: 0xbe, hi: 0xbe}, + {value: 0xb9b1, lo: 0xbf, hi: 0xbf}, + // Block 0xe3, offset 0x6aa + {value: 0x0000, lo: 0x03}, + {value: 0xba19, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0xa8}, + {value: 0x0040, lo: 0xa9, hi: 0xbf}, + // Block 0xe4, offset 0x6ae + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x81}, + {value: 0x3318, lo: 0x82, hi: 0x84}, + {value: 0x0018, lo: 0x85, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0xbf}, + // Block 0xe5, offset 0x6b3 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbf}, + // Block 0xe6, offset 0x6b8 + {value: 0x0000, lo: 0x03}, + {value: 0x3308, lo: 0x80, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xba}, + {value: 0x3308, lo: 0xbb, hi: 0xbf}, + // Block 0xe7, offset 0x6bc + {value: 0x0000, lo: 0x04}, + {value: 0x3308, lo: 0x80, hi: 0xac}, + {value: 0x0018, lo: 0xad, hi: 0xb4}, + {value: 0x3308, lo: 0xb5, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xbf}, + // Block 0xe8, offset 0x6c1 + {value: 0x0000, lo: 0x08}, + {value: 0x0018, lo: 0x80, hi: 0x83}, + {value: 0x3308, lo: 0x84, hi: 0x84}, + {value: 0x0018, lo: 0x85, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x9a}, + {value: 0x3308, lo: 0x9b, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xa0}, + {value: 0x3308, lo: 0xa1, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0xe9, offset 0x6ca + {value: 0x0000, lo: 0x0a}, + {value: 0x3308, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x3308, lo: 0x88, hi: 0x98}, + {value: 0x0040, lo: 0x99, hi: 0x9a}, + {value: 0x3308, lo: 0x9b, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xa2}, + {value: 0x3308, lo: 0xa3, hi: 0xa4}, + {value: 0x0040, lo: 0xa5, hi: 0xa5}, + {value: 0x3308, lo: 0xa6, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xbf}, + // Block 0xea, offset 0x6d5 + {value: 0x0000, lo: 0x05}, + {value: 0x0808, lo: 0x80, hi: 0x84}, + {value: 0x0040, lo: 0x85, hi: 0x86}, + {value: 0x0818, lo: 0x87, hi: 0x8f}, + {value: 0x3308, lo: 0x90, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0xbf}, + // Block 0xeb, offset 0x6db + {value: 0x0000, lo: 0x07}, + {value: 0x0a08, lo: 0x80, hi: 0x83}, + {value: 0x3308, lo: 0x84, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8f}, + {value: 0x0808, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9d}, + {value: 0x0818, lo: 0x9e, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0xec, offset 0x6e3 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbf}, + // Block 0xed, offset 0x6e7 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0xee, offset 0x6eb + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xb0}, + {value: 0x0018, lo: 0xb1, hi: 0xbf}, + // Block 0xef, offset 0x6f1 + {value: 0x0000, lo: 0x05}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x90}, + {value: 0x0018, lo: 0x91, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0xf0, offset 0x6f7 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x8f}, + {value: 0xc1c1, lo: 0x90, hi: 0x90}, + {value: 0x0018, lo: 0x91, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xbf}, + // Block 0xf1, offset 0x6fc + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0xa5}, + {value: 0x0018, lo: 0xa6, hi: 0xbf}, + // Block 0xf2, offset 0x6ff + {value: 0x0000, lo: 0x0f}, + {value: 0xc7e9, lo: 0x80, hi: 0x80}, + {value: 0xc839, lo: 0x81, hi: 0x81}, + {value: 0xc889, lo: 0x82, hi: 0x82}, + {value: 0xc8d9, lo: 0x83, hi: 0x83}, + {value: 0xc929, lo: 0x84, hi: 0x84}, + {value: 0xc979, lo: 0x85, hi: 0x85}, + {value: 0xc9c9, lo: 0x86, hi: 0x86}, + {value: 0xca19, lo: 0x87, hi: 0x87}, + {value: 0xca69, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x8f}, + {value: 0xcab9, lo: 0x90, hi: 0x90}, + {value: 0xcad9, lo: 0x91, hi: 0x91}, + {value: 0x0040, lo: 0x92, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa5}, + {value: 0x0040, lo: 0xa6, hi: 0xbf}, + // Block 0xf3, offset 0x70f + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x94}, + {value: 0x0040, lo: 0x95, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0xf4, offset 0x716 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0xf5, offset 0x719 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x94}, + {value: 0x0040, lo: 0x95, hi: 0xbf}, + // Block 0xf6, offset 0x71c + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbf}, + // Block 0xf7, offset 0x720 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xbf}, + // Block 0xf8, offset 0x726 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xbf}, + // Block 0xf9, offset 0x72b + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xfa, offset 0x730 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xbf}, + // Block 0xfb, offset 0x735 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x97}, + {value: 0x0040, lo: 0x98, hi: 0xbf}, + // Block 0xfc, offset 0x738 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x80}, + {value: 0x0040, lo: 0x81, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xbf}, + // Block 0xfd, offset 0x73d + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0xbf}, + // Block 0xfe, offset 0x740 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0xff, offset 0x743 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x100, offset 0x747 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x101, offset 0x74b + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xa0}, + {value: 0x0040, lo: 0xa1, hi: 0xbf}, + // Block 0x102, offset 0x74e + {value: 0x0020, lo: 0x0f}, + {value: 0xdeb9, lo: 0x80, hi: 0x89}, + {value: 0x8dfd, lo: 0x8a, hi: 0x8a}, + {value: 0xdff9, lo: 0x8b, hi: 0x9c}, + {value: 0x8e1d, lo: 0x9d, hi: 0x9d}, + {value: 0xe239, lo: 0x9e, hi: 0xa2}, + {value: 0x8e3d, lo: 0xa3, hi: 0xa3}, + {value: 0xe2d9, lo: 0xa4, hi: 0xab}, + {value: 0x7ed5, lo: 0xac, hi: 0xac}, + {value: 0xe3d9, lo: 0xad, hi: 0xaf}, + {value: 0x8e5d, lo: 0xb0, hi: 0xb0}, + {value: 0xe439, lo: 0xb1, hi: 0xb6}, + {value: 0x8e7d, lo: 0xb7, hi: 0xb9}, + {value: 0xe4f9, lo: 0xba, hi: 0xba}, + {value: 0x8edd, lo: 0xbb, hi: 0xbb}, + {value: 0xe519, lo: 0xbc, hi: 0xbf}, + // Block 0x103, offset 0x75e + {value: 0x0020, lo: 0x10}, + {value: 0x937d, lo: 0x80, hi: 0x80}, + {value: 0xf099, lo: 0x81, hi: 0x86}, + {value: 0x939d, lo: 0x87, hi: 0x8a}, + {value: 0xd9f9, lo: 0x8b, hi: 0x8b}, + {value: 0xf159, lo: 0x8c, hi: 0x96}, + {value: 0x941d, lo: 0x97, hi: 0x97}, + {value: 0xf2b9, lo: 0x98, hi: 0xa3}, + {value: 0x943d, lo: 0xa4, hi: 0xa6}, + {value: 0xf439, lo: 0xa7, hi: 0xaa}, + {value: 0x949d, lo: 0xab, hi: 0xab}, + {value: 0xf4b9, lo: 0xac, hi: 0xac}, + {value: 0x94bd, lo: 0xad, hi: 0xad}, + {value: 0xf4d9, lo: 0xae, hi: 0xaf}, + {value: 0x94dd, lo: 0xb0, hi: 0xb1}, + {value: 0xf519, lo: 0xb2, hi: 0xbe}, + {value: 0x2040, lo: 0xbf, hi: 0xbf}, + // Block 0x104, offset 0x76f + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0340, lo: 0x81, hi: 0x81}, + {value: 0x0040, lo: 0x82, hi: 0x9f}, + {value: 0x0340, lo: 0xa0, hi: 0xbf}, + // Block 0x105, offset 0x774 + {value: 0x0000, lo: 0x01}, + {value: 0x0340, lo: 0x80, hi: 0xbf}, + // Block 0x106, offset 0x776 + {value: 0x0000, lo: 0x01}, + {value: 0x33c0, lo: 0x80, hi: 0xbf}, + // Block 0x107, offset 0x778 + {value: 0x0000, lo: 0x02}, + {value: 0x33c0, lo: 0x80, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, +} + +// Total table size 42114 bytes (41KiB); checksum: 355A58A4 diff --git a/vendor/golang.org/x/text/internal/export/idna/tables9.0.0.go b/vendor/golang.org/x/text/internal/export/idna/tables9.0.0.go new file mode 100644 index 0000000..8b65fa1 --- /dev/null +++ b/vendor/golang.org/x/text/internal/export/idna/tables9.0.0.go @@ -0,0 +1,4486 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// +build !go1.10 + +package idna + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "9.0.0" + +var mappings string = "" + // Size: 8175 bytes + "\x00\x01 \x03 ̈\x01a\x03 ̄\x012\x013\x03 ́\x03 ̧\x011\x01o\x051⁄4\x051⁄2" + + "\x053⁄4\x03i̇\x03l·\x03ʼn\x01s\x03dž\x03ⱥ\x03ⱦ\x01h\x01j\x01r\x01w\x01y" + + "\x03 ̆\x03 ̇\x03 ̊\x03 ̨\x03 ̃\x03 ̋\x01l\x01x\x04̈́\x03 ι\x01;\x05 ̈́" + + "\x04եւ\x04اٴ\x04وٴ\x04ۇٴ\x04يٴ\x06क़\x06ख़\x06ग़\x06ज़\x06ड़\x06ढ़\x06फ़" + + "\x06य़\x06ড়\x06ঢ়\x06য়\x06ਲ਼\x06ਸ਼\x06ਖ਼\x06ਗ਼\x06ਜ਼\x06ਫ਼\x06ଡ଼\x06ଢ଼" + + "\x06ํา\x06ໍາ\x06ຫນ\x06ຫມ\x06གྷ\x06ཌྷ\x06དྷ\x06བྷ\x06ཛྷ\x06ཀྵ\x06ཱི\x06ཱུ" + + "\x06ྲྀ\x09ྲཱྀ\x06ླྀ\x09ླཱྀ\x06ཱྀ\x06ྒྷ\x06ྜྷ\x06ྡྷ\x06ྦྷ\x06ྫྷ\x06ྐྵ\x02" + + "в\x02д\x02о\x02с\x02т\x02ъ\x02ѣ\x02æ\x01b\x01d\x01e\x02ǝ\x01g\x01i\x01k" + + "\x01m\x01n\x02ȣ\x01p\x01t\x01u\x02ɐ\x02ɑ\x02ə\x02ɛ\x02ɜ\x02ŋ\x02ɔ\x02ɯ" + + "\x01v\x02β\x02γ\x02δ\x02φ\x02χ\x02ρ\x02н\x02ɒ\x01c\x02ɕ\x02ð\x01f\x02ɟ" + + "\x02ɡ\x02ɥ\x02ɨ\x02ɩ\x02ɪ\x02ʝ\x02ɭ\x02ʟ\x02ɱ\x02ɰ\x02ɲ\x02ɳ\x02ɴ\x02ɵ" + + "\x02ɸ\x02ʂ\x02ʃ\x02ƫ\x02ʉ\x02ʊ\x02ʋ\x02ʌ\x01z\x02ʐ\x02ʑ\x02ʒ\x02θ\x02ss" + + "\x02ά\x02έ\x02ή\x02ί\x02ό\x02ύ\x02ώ\x05ἀι\x05ἁι\x05ἂι\x05ἃι\x05ἄι\x05ἅι" + + "\x05ἆι\x05ἇι\x05ἠι\x05ἡι\x05ἢι\x05ἣι\x05ἤι\x05ἥι\x05ἦι\x05ἧι\x05ὠι\x05ὡι" + + "\x05ὢι\x05ὣι\x05ὤι\x05ὥι\x05ὦι\x05ὧι\x05ὰι\x04αι\x04άι\x05ᾶι\x02ι\x05 ̈͂" + + "\x05ὴι\x04ηι\x04ήι\x05ῆι\x05 ̓̀\x05 ̓́\x05 ̓͂\x02ΐ\x05 ̔̀\x05 ̔́\x05 ̔͂" + + "\x02ΰ\x05 ̈̀\x01`\x05ὼι\x04ωι\x04ώι\x05ῶι\x06′′\x09′′′\x06‵‵\x09‵‵‵\x02!" + + "!\x02??\x02?!\x02!?\x0c′′′′\x010\x014\x015\x016\x017\x018\x019\x01+\x01=" + + "\x01(\x01)\x02rs\x02ħ\x02no\x01q\x02sm\x02tm\x02ω\x02å\x02א\x02ב\x02ג" + + "\x02ד\x02π\x051⁄7\x051⁄9\x061⁄10\x051⁄3\x052⁄3\x051⁄5\x052⁄5\x053⁄5\x054" + + "⁄5\x051⁄6\x055⁄6\x051⁄8\x053⁄8\x055⁄8\x057⁄8\x041⁄\x02ii\x02iv\x02vi" + + "\x04viii\x02ix\x02xi\x050⁄3\x06∫∫\x09∫∫∫\x06∮∮\x09∮∮∮\x0210\x0211\x0212" + + "\x0213\x0214\x0215\x0216\x0217\x0218\x0219\x0220\x04(10)\x04(11)\x04(12)" + + "\x04(13)\x04(14)\x04(15)\x04(16)\x04(17)\x04(18)\x04(19)\x04(20)\x0c∫∫∫∫" + + "\x02==\x05⫝̸\x02ɫ\x02ɽ\x02ȿ\x02ɀ\x01.\x04 ゙\x04 ゚\x06より\x06コト\x05(ᄀ)\x05" + + "(ᄂ)\x05(ᄃ)\x05(ᄅ)\x05(ᄆ)\x05(ᄇ)\x05(ᄉ)\x05(ᄋ)\x05(ᄌ)\x05(ᄎ)\x05(ᄏ)\x05(ᄐ" + + ")\x05(ᄑ)\x05(ᄒ)\x05(가)\x05(나)\x05(다)\x05(라)\x05(마)\x05(바)\x05(사)\x05(아)" + + "\x05(자)\x05(차)\x05(카)\x05(타)\x05(파)\x05(하)\x05(주)\x08(오전)\x08(오후)\x05(一)" + + "\x05(二)\x05(三)\x05(四)\x05(五)\x05(六)\x05(七)\x05(八)\x05(九)\x05(十)\x05(月)" + + "\x05(火)\x05(水)\x05(木)\x05(金)\x05(土)\x05(日)\x05(株)\x05(有)\x05(社)\x05(名)" + + "\x05(特)\x05(財)\x05(祝)\x05(労)\x05(代)\x05(呼)\x05(学)\x05(監)\x05(企)\x05(資)" + + "\x05(協)\x05(祭)\x05(休)\x05(自)\x05(至)\x0221\x0222\x0223\x0224\x0225\x0226" + + "\x0227\x0228\x0229\x0230\x0231\x0232\x0233\x0234\x0235\x06참고\x06주의\x0236" + + "\x0237\x0238\x0239\x0240\x0241\x0242\x0243\x0244\x0245\x0246\x0247\x0248" + + "\x0249\x0250\x041月\x042月\x043月\x044月\x045月\x046月\x047月\x048月\x049月\x0510" + + "月\x0511月\x0512月\x02hg\x02ev\x0cアパート\x0cアルファ\x0cアンペア\x09アール\x0cイニング\x09" + + "インチ\x09ウォン\x0fエスクード\x0cエーカー\x09オンス\x09オーム\x09カイリ\x0cカラット\x0cカロリー\x09ガロ" + + "ン\x09ガンマ\x06ギガ\x09ギニー\x0cキュリー\x0cギルダー\x06キロ\x0fキログラム\x12キロメートル\x0fキロワッ" + + "ト\x09グラム\x0fグラムトン\x0fクルゼイロ\x0cクローネ\x09ケース\x09コルナ\x09コーポ\x0cサイクル\x0fサンチ" + + "ーム\x0cシリング\x09センチ\x09セント\x09ダース\x06デシ\x06ドル\x06トン\x06ナノ\x09ノット\x09ハイツ" + + "\x0fパーセント\x09パーツ\x0cバーレル\x0fピアストル\x09ピクル\x06ピコ\x06ビル\x0fファラッド\x0cフィート" + + "\x0fブッシェル\x09フラン\x0fヘクタール\x06ペソ\x09ペニヒ\x09ヘルツ\x09ペンス\x09ページ\x09ベータ\x0cポイ" + + "ント\x09ボルト\x06ホン\x09ポンド\x09ホール\x09ホーン\x0cマイクロ\x09マイル\x09マッハ\x09マルク\x0fマ" + + "ンション\x0cミクロン\x06ミリ\x0fミリバール\x06メガ\x0cメガトン\x0cメートル\x09ヤード\x09ヤール\x09ユアン" + + "\x0cリットル\x06リラ\x09ルピー\x0cルーブル\x06レム\x0fレントゲン\x09ワット\x040点\x041点\x042点" + + "\x043点\x044点\x045点\x046点\x047点\x048点\x049点\x0510点\x0511点\x0512点\x0513点" + + "\x0514点\x0515点\x0516点\x0517点\x0518点\x0519点\x0520点\x0521点\x0522点\x0523点" + + "\x0524点\x02da\x02au\x02ov\x02pc\x02dm\x02iu\x06平成\x06昭和\x06大正\x06明治\x0c株" + + "式会社\x02pa\x02na\x02ma\x02ka\x02kb\x02mb\x02gb\x04kcal\x02pf\x02nf\x02m" + + "g\x02kg\x02hz\x02ml\x02dl\x02kl\x02fm\x02nm\x02mm\x02cm\x02km\x02m2\x02m" + + "3\x05m∕s\x06m∕s2\x07rad∕s\x08rad∕s2\x02ps\x02ns\x02ms\x02pv\x02nv\x02mv" + + "\x02kv\x02pw\x02nw\x02mw\x02kw\x02bq\x02cc\x02cd\x06c∕kg\x02db\x02gy\x02" + + "ha\x02hp\x02in\x02kk\x02kt\x02lm\x02ln\x02lx\x02ph\x02pr\x02sr\x02sv\x02" + + "wb\x05v∕m\x05a∕m\x041日\x042日\x043日\x044日\x045日\x046日\x047日\x048日\x049日" + + "\x0510日\x0511日\x0512日\x0513日\x0514日\x0515日\x0516日\x0517日\x0518日\x0519日" + + "\x0520日\x0521日\x0522日\x0523日\x0524日\x0525日\x0526日\x0527日\x0528日\x0529日" + + "\x0530日\x0531日\x02ь\x02ɦ\x02ɬ\x02ʞ\x02ʇ\x02œ\x04𤋮\x04𢡊\x04𢡄\x04𣏕\x04𥉉" + + "\x04𥳐\x04𧻓\x02ff\x02fi\x02fl\x02st\x04մն\x04մե\x04մի\x04վն\x04մխ\x04יִ" + + "\x04ײַ\x02ע\x02ה\x02כ\x02ל\x02ם\x02ר\x02ת\x04שׁ\x04שׂ\x06שּׁ\x06שּׂ\x04א" + + "ַ\x04אָ\x04אּ\x04בּ\x04גּ\x04דּ\x04הּ\x04וּ\x04זּ\x04טּ\x04יּ\x04ךּ\x04" + + "כּ\x04לּ\x04מּ\x04נּ\x04סּ\x04ףּ\x04פּ\x04צּ\x04קּ\x04רּ\x04שּ\x04תּ" + + "\x04וֹ\x04בֿ\x04כֿ\x04פֿ\x04אל\x02ٱ\x02ٻ\x02پ\x02ڀ\x02ٺ\x02ٿ\x02ٹ\x02ڤ" + + "\x02ڦ\x02ڄ\x02ڃ\x02چ\x02ڇ\x02ڍ\x02ڌ\x02ڎ\x02ڈ\x02ژ\x02ڑ\x02ک\x02گ\x02ڳ" + + "\x02ڱ\x02ں\x02ڻ\x02ۀ\x02ہ\x02ھ\x02ے\x02ۓ\x02ڭ\x02ۇ\x02ۆ\x02ۈ\x02ۋ\x02ۅ" + + "\x02ۉ\x02ې\x02ى\x04ئا\x04ئە\x04ئو\x04ئۇ\x04ئۆ\x04ئۈ\x04ئې\x04ئى\x02ی\x04" + + "ئج\x04ئح\x04ئم\x04ئي\x04بج\x04بح\x04بخ\x04بم\x04بى\x04بي\x04تج\x04تح" + + "\x04تخ\x04تم\x04تى\x04تي\x04ثج\x04ثم\x04ثى\x04ثي\x04جح\x04جم\x04حج\x04حم" + + "\x04خج\x04خح\x04خم\x04سج\x04سح\x04سخ\x04سم\x04صح\x04صم\x04ضج\x04ضح\x04ضخ" + + "\x04ضم\x04طح\x04طم\x04ظم\x04عج\x04عم\x04غج\x04غم\x04فج\x04فح\x04فخ\x04فم" + + "\x04فى\x04في\x04قح\x04قم\x04قى\x04قي\x04كا\x04كج\x04كح\x04كخ\x04كل\x04كم" + + "\x04كى\x04كي\x04لج\x04لح\x04لخ\x04لم\x04لى\x04لي\x04مج\x04مح\x04مخ\x04مم" + + "\x04مى\x04مي\x04نج\x04نح\x04نخ\x04نم\x04نى\x04ني\x04هج\x04هم\x04هى\x04هي" + + "\x04يج\x04يح\x04يخ\x04يم\x04يى\x04يي\x04ذٰ\x04رٰ\x04ىٰ\x05 ٌّ\x05 ٍّ\x05" + + " َّ\x05 ُّ\x05 ِّ\x05 ّٰ\x04ئر\x04ئز\x04ئن\x04بر\x04بز\x04بن\x04تر\x04تز" + + "\x04تن\x04ثر\x04ثز\x04ثن\x04ما\x04نر\x04نز\x04نن\x04ير\x04يز\x04ين\x04ئخ" + + "\x04ئه\x04به\x04ته\x04صخ\x04له\x04نه\x04هٰ\x04يه\x04ثه\x04سه\x04شم\x04شه" + + "\x06ـَّ\x06ـُّ\x06ـِّ\x04طى\x04طي\x04عى\x04عي\x04غى\x04غي\x04سى\x04سي" + + "\x04شى\x04شي\x04حى\x04حي\x04جى\x04جي\x04خى\x04خي\x04صى\x04صي\x04ضى\x04ضي" + + "\x04شج\x04شح\x04شخ\x04شر\x04سر\x04صر\x04ضر\x04اً\x06تجم\x06تحج\x06تحم" + + "\x06تخم\x06تمج\x06تمح\x06تمخ\x06جمح\x06حمي\x06حمى\x06سحج\x06سجح\x06سجى" + + "\x06سمح\x06سمج\x06سمم\x06صحح\x06صمم\x06شحم\x06شجي\x06شمخ\x06شمم\x06ضحى" + + "\x06ضخم\x06طمح\x06طمم\x06طمي\x06عجم\x06عمم\x06عمى\x06غمم\x06غمي\x06غمى" + + "\x06فخم\x06قمح\x06قمم\x06لحم\x06لحي\x06لحى\x06لجج\x06لخم\x06لمح\x06محج" + + "\x06محم\x06محي\x06مجح\x06مجم\x06مخج\x06مخم\x06مجخ\x06همج\x06همم\x06نحم" + + "\x06نحى\x06نجم\x06نجى\x06نمي\x06نمى\x06يمم\x06بخي\x06تجي\x06تجى\x06تخي" + + "\x06تخى\x06تمي\x06تمى\x06جمي\x06جحى\x06جمى\x06سخى\x06صحي\x06شحي\x06ضحي" + + "\x06لجي\x06لمي\x06يحي\x06يجي\x06يمي\x06ممي\x06قمي\x06نحي\x06عمي\x06كمي" + + "\x06نجح\x06مخي\x06لجم\x06كمم\x06جحي\x06حجي\x06مجي\x06فمي\x06بحي\x06سخي" + + "\x06نجي\x06صلے\x06قلے\x08الله\x08اكبر\x08محمد\x08صلعم\x08رسول\x08عليه" + + "\x08وسلم\x06صلى!صلى الله عليه وسلم\x0fجل جلاله\x08ریال\x01,\x01:\x01!" + + "\x01?\x01_\x01{\x01}\x01[\x01]\x01#\x01&\x01*\x01-\x01<\x01>\x01\\\x01$" + + "\x01%\x01@\x04ـً\x04ـَ\x04ـُ\x04ـِ\x04ـّ\x04ـْ\x02ء\x02آ\x02أ\x02ؤ\x02إ" + + "\x02ئ\x02ا\x02ب\x02ة\x02ت\x02ث\x02ج\x02ح\x02خ\x02د\x02ذ\x02ر\x02ز\x02س" + + "\x02ش\x02ص\x02ض\x02ط\x02ظ\x02ع\x02غ\x02ف\x02ق\x02ك\x02ل\x02م\x02ن\x02ه" + + "\x02و\x02ي\x04لآ\x04لأ\x04لإ\x04لا\x01\x22\x01'\x01/\x01^\x01|\x01~\x02¢" + + "\x02£\x02¬\x02¦\x02¥\x08𝅗𝅥\x08𝅘𝅥\x0c𝅘𝅥𝅮\x0c𝅘𝅥𝅯\x0c𝅘𝅥𝅰\x0c𝅘𝅥𝅱\x0c𝅘𝅥𝅲\x08𝆹" + + "𝅥\x08𝆺𝅥\x0c𝆹𝅥𝅮\x0c𝆺𝅥𝅮\x0c𝆹𝅥𝅯\x0c𝆺𝅥𝅯\x02ı\x02ȷ\x02α\x02ε\x02ζ\x02η\x02" + + "κ\x02λ\x02μ\x02ν\x02ξ\x02ο\x02σ\x02τ\x02υ\x02ψ\x03∇\x03∂\x02ϝ\x02ٮ\x02ڡ" + + "\x02ٯ\x020,\x021,\x022,\x023,\x024,\x025,\x026,\x027,\x028,\x029,\x03(a)" + + "\x03(b)\x03(c)\x03(d)\x03(e)\x03(f)\x03(g)\x03(h)\x03(i)\x03(j)\x03(k)" + + "\x03(l)\x03(m)\x03(n)\x03(o)\x03(p)\x03(q)\x03(r)\x03(s)\x03(t)\x03(u)" + + "\x03(v)\x03(w)\x03(x)\x03(y)\x03(z)\x07〔s〕\x02wz\x02hv\x02sd\x03ppv\x02w" + + "c\x02mc\x02md\x02dj\x06ほか\x06ココ\x03サ\x03手\x03字\x03双\x03デ\x03二\x03多\x03解" + + "\x03天\x03交\x03映\x03無\x03料\x03前\x03後\x03再\x03新\x03初\x03終\x03生\x03販\x03声" + + "\x03吹\x03演\x03投\x03捕\x03一\x03三\x03遊\x03左\x03中\x03右\x03指\x03走\x03打\x03禁" + + "\x03空\x03合\x03満\x03有\x03月\x03申\x03割\x03営\x03配\x09〔本〕\x09〔三〕\x09〔二〕\x09〔安" + + "〕\x09〔点〕\x09〔打〕\x09〔盗〕\x09〔勝〕\x09〔敗〕\x03得\x03可\x03丽\x03丸\x03乁\x03你\x03" + + "侮\x03侻\x03倂\x03偺\x03備\x03僧\x03像\x03㒞\x03免\x03兔\x03兤\x03具\x03㒹\x03內\x03" + + "冗\x03冤\x03仌\x03冬\x03况\x03凵\x03刃\x03㓟\x03刻\x03剆\x03剷\x03㔕\x03勇\x03勉\x03" + + "勤\x03勺\x03包\x03匆\x03北\x03卉\x03卑\x03博\x03即\x03卽\x03卿\x03灰\x03及\x03叟\x03" + + "叫\x03叱\x03吆\x03咞\x03吸\x03呈\x03周\x03咢\x03哶\x03唐\x03啓\x03啣\x03善\x03喙\x03" + + "喫\x03喳\x03嗂\x03圖\x03嘆\x03圗\x03噑\x03噴\x03切\x03壮\x03城\x03埴\x03堍\x03型\x03" + + "堲\x03報\x03墬\x03売\x03壷\x03夆\x03夢\x03奢\x03姬\x03娛\x03娧\x03姘\x03婦\x03㛮\x03" + + "嬈\x03嬾\x03寃\x03寘\x03寧\x03寳\x03寿\x03将\x03尢\x03㞁\x03屠\x03屮\x03峀\x03岍\x03" + + "嵃\x03嵮\x03嵫\x03嵼\x03巡\x03巢\x03㠯\x03巽\x03帨\x03帽\x03幩\x03㡢\x03㡼\x03庰\x03" + + "庳\x03庶\x03廊\x03廾\x03舁\x03弢\x03㣇\x03形\x03彫\x03㣣\x03徚\x03忍\x03志\x03忹\x03" + + "悁\x03㤺\x03㤜\x03悔\x03惇\x03慈\x03慌\x03慎\x03慺\x03憎\x03憲\x03憤\x03憯\x03懞\x03" + + "懲\x03懶\x03成\x03戛\x03扝\x03抱\x03拔\x03捐\x03挽\x03拼\x03捨\x03掃\x03揤\x03搢\x03" + + "揅\x03掩\x03㨮\x03摩\x03摾\x03撝\x03摷\x03㩬\x03敏\x03敬\x03旣\x03書\x03晉\x03㬙\x03" + + "暑\x03㬈\x03㫤\x03冒\x03冕\x03最\x03暜\x03肭\x03䏙\x03朗\x03望\x03朡\x03杞\x03杓\x03" + + "㭉\x03柺\x03枅\x03桒\x03梅\x03梎\x03栟\x03椔\x03㮝\x03楂\x03榣\x03槪\x03檨\x03櫛\x03" + + "㰘\x03次\x03歔\x03㱎\x03歲\x03殟\x03殺\x03殻\x03汎\x03沿\x03泍\x03汧\x03洖\x03派\x03" + + "海\x03流\x03浩\x03浸\x03涅\x03洴\x03港\x03湮\x03㴳\x03滋\x03滇\x03淹\x03潮\x03濆\x03" + + "瀹\x03瀞\x03瀛\x03㶖\x03灊\x03災\x03灷\x03炭\x03煅\x03熜\x03爨\x03爵\x03牐\x03犀\x03" + + "犕\x03獺\x03王\x03㺬\x03玥\x03㺸\x03瑇\x03瑜\x03瑱\x03璅\x03瓊\x03㼛\x03甤\x03甾\x03" + + "異\x03瘐\x03㿼\x03䀈\x03直\x03眞\x03真\x03睊\x03䀹\x03瞋\x03䁆\x03䂖\x03硎\x03碌\x03" + + "磌\x03䃣\x03祖\x03福\x03秫\x03䄯\x03穀\x03穊\x03穏\x03䈂\x03篆\x03築\x03䈧\x03糒\x03" + + "䊠\x03糨\x03糣\x03紀\x03絣\x03䌁\x03緇\x03縂\x03繅\x03䌴\x03䍙\x03罺\x03羕\x03翺\x03" + + "者\x03聠\x03聰\x03䏕\x03育\x03脃\x03䐋\x03脾\x03媵\x03舄\x03辞\x03䑫\x03芑\x03芋\x03" + + "芝\x03劳\x03花\x03芳\x03芽\x03苦\x03若\x03茝\x03荣\x03莭\x03茣\x03莽\x03菧\x03著\x03" + + "荓\x03菊\x03菌\x03菜\x03䔫\x03蓱\x03蓳\x03蔖\x03蕤\x03䕝\x03䕡\x03䕫\x03虐\x03虜\x03" + + "虧\x03虩\x03蚩\x03蚈\x03蜎\x03蛢\x03蝹\x03蜨\x03蝫\x03螆\x03蟡\x03蠁\x03䗹\x03衠\x03" + + "衣\x03裗\x03裞\x03䘵\x03裺\x03㒻\x03䚾\x03䛇\x03誠\x03諭\x03變\x03豕\x03貫\x03賁\x03" + + "贛\x03起\x03跋\x03趼\x03跰\x03軔\x03輸\x03邔\x03郱\x03鄑\x03鄛\x03鈸\x03鋗\x03鋘\x03" + + "鉼\x03鏹\x03鐕\x03開\x03䦕\x03閷\x03䧦\x03雃\x03嶲\x03霣\x03䩮\x03䩶\x03韠\x03䪲\x03" + + "頋\x03頩\x03飢\x03䬳\x03餩\x03馧\x03駂\x03駾\x03䯎\x03鬒\x03鱀\x03鳽\x03䳎\x03䳭\x03" + + "鵧\x03䳸\x03麻\x03䵖\x03黹\x03黾\x03鼅\x03鼏\x03鼖\x03鼻" + +var xorData string = "" + // Size: 4855 bytes + "\x02\x0c\x09\x02\xb0\xec\x02\xad\xd8\x02\xad\xd9\x02\x06\x07\x02\x0f\x12" + + "\x02\x0f\x1f\x02\x0f\x1d\x02\x01\x13\x02\x0f\x16\x02\x0f\x0b\x02\x0f3" + + "\x02\x0f7\x02\x0f?\x02\x0f/\x02\x0f*\x02\x0c&\x02\x0c*\x02\x0c;\x02\x0c9" + + "\x02\x0c%\x02\xab\xed\x02\xab\xe2\x02\xab\xe3\x02\xa9\xe0\x02\xa9\xe1" + + "\x02\xa9\xe6\x02\xa3\xcb\x02\xa3\xc8\x02\xa3\xc9\x02\x01#\x02\x01\x08" + + "\x02\x0e>\x02\x0e'\x02\x0f\x03\x02\x03\x0d\x02\x03\x09\x02\x03\x17\x02" + + "\x03\x0e\x02\x02\x03\x02\x011\x02\x01\x00\x02\x01\x10\x02\x03<\x02\x07" + + "\x0d\x02\x02\x0c\x02\x0c0\x02\x01\x03\x02\x01\x01\x02\x01 \x02\x01\x22" + + "\x02\x01)\x02\x01\x0a\x02\x01\x0c\x02\x02\x06\x02\x02\x02\x02\x03\x10" + + "\x03\x037 \x03\x0b+\x03\x02\x01\x04\x02\x01\x02\x02\x019\x02\x03\x1c\x02" + + "\x02$\x03\x80p$\x02\x03:\x02\x03\x0a\x03\xc1r.\x03\xc1r,\x03\xc1r\x02" + + "\x02\x02:\x02\x02>\x02\x02,\x02\x02\x10\x02\x02\x00\x03\xc1s<\x03\xc1s*" + + "\x03\xc2L$\x03\xc2L;\x02\x09)\x02\x0a\x19\x03\x83\xab\xe3\x03\x83\xab" + + "\xf2\x03 4\xe0\x03\x81\xab\xea\x03\x81\xab\xf3\x03 4\xef\x03\x96\xe1\xcd" + + "\x03\x84\xe5\xc3\x02\x0d\x11\x03\x8b\xec\xcb\x03\x94\xec\xcf\x03\x9a\xec" + + "\xc2\x03\x8b\xec\xdb\x03\x94\xec\xdf\x03\x9a\xec\xd2\x03\x01\x0c!\x03" + + "\x01\x0c#\x03ʠ\x9d\x03ʣ\x9c\x03ʢ\x9f\x03ʥ\x9e\x03ʤ\x91\x03ʧ\x90\x03ʦ\x93" + + "\x03ʩ\x92\x03ʨ\x95\x03\xca\xf3\xb5\x03\xca\xf0\xb4\x03\xca\xf1\xb7\x03" + + "\xca\xf6\xb6\x03\xca\xf7\x89\x03\xca\xf4\x88\x03\xca\xf5\x8b\x03\xca\xfa" + + "\x8a\x03\xca\xfb\x8d\x03\xca\xf8\x8c\x03\xca\xf9\x8f\x03\xca\xfe\x8e\x03" + + "\xca\xff\x81\x03\xca\xfc\x80\x03\xca\xfd\x83\x03\xca\xe2\x82\x03\xca\xe3" + + "\x85\x03\xca\xe0\x84\x03\xca\xe1\x87\x03\xca\xe6\x86\x03\xca\xe7\x99\x03" + + "\xca\xe4\x98\x03\xca\xe5\x9b\x03\xca\xea\x9a\x03\xca\xeb\x9d\x03\xca\xe8" + + "\x9c\x03ؓ\x89\x03ߔ\x8b\x02\x010\x03\x03\x04\x1e\x03\x04\x15\x12\x03\x0b" + + "\x05,\x03\x06\x04\x00\x03\x06\x04)\x03\x06\x044\x03\x06\x04<\x03\x06\x05" + + "\x1d\x03\x06\x06\x00\x03\x06\x06\x0a\x03\x06\x06'\x03\x06\x062\x03\x0786" + + "\x03\x079/\x03\x079 \x03\x07:\x0e\x03\x07:\x1b\x03\x07:%\x03\x07;/\x03" + + "\x07;%\x03\x074\x11\x03\x076\x09\x03\x077*\x03\x070\x01\x03\x070\x0f\x03" + + "\x070.\x03\x071\x16\x03\x071\x04\x03\x0710\x03\x072\x18\x03\x072-\x03" + + "\x073\x14\x03\x073>\x03\x07'\x09\x03\x07 \x00\x03\x07\x1f\x0b\x03\x07" + + "\x18#\x03\x07\x18(\x03\x07\x186\x03\x07\x18\x03\x03\x07\x19\x16\x03\x07" + + "\x116\x03\x07\x12'\x03\x07\x13\x10\x03\x07\x0c&\x03\x07\x0c\x08\x03\x07" + + "\x0c\x13\x03\x07\x0d\x02\x03\x07\x0d\x1c\x03\x07\x0b5\x03\x07\x0b\x0a" + + "\x03\x07\x0b\x01\x03\x07\x0b\x0f\x03\x07\x05\x00\x03\x07\x05\x09\x03\x07" + + "\x05\x0b\x03\x07\x07\x01\x03\x07\x07\x08\x03\x07\x00<\x03\x07\x00+\x03" + + "\x07\x01)\x03\x07\x01\x1b\x03\x07\x01\x08\x03\x07\x03?\x03\x0445\x03\x04" + + "4\x08\x03\x0454\x03\x04)/\x03\x04)5\x03\x04+\x05\x03\x04+\x14\x03\x04+ " + + "\x03\x04+<\x03\x04*&\x03\x04*\x22\x03\x04&8\x03\x04!\x01\x03\x04!\x22" + + "\x03\x04\x11+\x03\x04\x10.\x03\x04\x104\x03\x04\x13=\x03\x04\x12\x04\x03" + + "\x04\x12\x0a\x03\x04\x0d\x1d\x03\x04\x0d\x07\x03\x04\x0d \x03\x05<>\x03" + + "\x055<\x03\x055!\x03\x055#\x03\x055&\x03\x054\x1d\x03\x054\x02\x03\x054" + + "\x07\x03\x0571\x03\x053\x1a\x03\x053\x16\x03\x05.<\x03\x05.\x07\x03\x05)" + + ":\x03\x05)<\x03\x05)\x0c\x03\x05)\x15\x03\x05+-\x03\x05+5\x03\x05$\x1e" + + "\x03\x05$\x14\x03\x05'\x04\x03\x05'\x14\x03\x05&\x02\x03\x05\x226\x03" + + "\x05\x22\x0c\x03\x05\x22\x1c\x03\x05\x19\x0a\x03\x05\x1b\x09\x03\x05\x1b" + + "\x0c\x03\x05\x14\x07\x03\x05\x16?\x03\x05\x16\x0c\x03\x05\x0c\x05\x03" + + "\x05\x0e\x0f\x03\x05\x01\x0e\x03\x05\x00(\x03\x05\x030\x03\x05\x03\x06" + + "\x03\x0a==\x03\x0a=1\x03\x0a=,\x03\x0a=\x0c\x03\x0a??\x03\x0a<\x08\x03" + + "\x0a9!\x03\x0a9)\x03\x0a97\x03\x0a99\x03\x0a6\x0a\x03\x0a6\x1c\x03\x0a6" + + "\x17\x03\x0a7'\x03\x0a78\x03\x0a73\x03\x0a'\x01\x03\x0a'&\x03\x0a\x1f" + + "\x0e\x03\x0a\x1f\x03\x03\x0a\x1f3\x03\x0a\x1b/\x03\x0a\x18\x19\x03\x0a" + + "\x19\x01\x03\x0a\x16\x14\x03\x0a\x0e\x22\x03\x0a\x0f\x10\x03\x0a\x0f\x02" + + "\x03\x0a\x0f \x03\x0a\x0c\x04\x03\x0a\x0b>\x03\x0a\x0b+\x03\x0a\x08/\x03" + + "\x0a\x046\x03\x0a\x05\x14\x03\x0a\x00\x04\x03\x0a\x00\x10\x03\x0a\x00" + + "\x14\x03\x0b<3\x03\x0b;*\x03\x0b9\x22\x03\x0b9)\x03\x0b97\x03\x0b+\x10" + + "\x03\x0b((\x03\x0b&5\x03\x0b$\x1c\x03\x0b$\x12\x03\x0b%\x04\x03\x0b#<" + + "\x03\x0b#0\x03\x0b#\x0d\x03\x0b#\x19\x03\x0b!:\x03\x0b!\x1f\x03\x0b!\x00" + + "\x03\x0b\x1e5\x03\x0b\x1c\x1d\x03\x0b\x1d-\x03\x0b\x1d(\x03\x0b\x18.\x03" + + "\x0b\x18 \x03\x0b\x18\x16\x03\x0b\x14\x13\x03\x0b\x15$\x03\x0b\x15\x22" + + "\x03\x0b\x12\x1b\x03\x0b\x12\x10\x03\x0b\x132\x03\x0b\x13=\x03\x0b\x12" + + "\x18\x03\x0b\x0c&\x03\x0b\x061\x03\x0b\x06:\x03\x0b\x05#\x03\x0b\x05<" + + "\x03\x0b\x04\x0b\x03\x0b\x04\x04\x03\x0b\x04\x1b\x03\x0b\x042\x03\x0b" + + "\x041\x03\x0b\x03\x03\x03\x0b\x03\x1d\x03\x0b\x03/\x03\x0b\x03+\x03\x0b" + + "\x02\x1b\x03\x0b\x02\x00\x03\x0b\x01\x1e\x03\x0b\x01\x08\x03\x0b\x015" + + "\x03\x06\x0d9\x03\x06\x0d=\x03\x06\x0d?\x03\x02\x001\x03\x02\x003\x03" + + "\x02\x02\x19\x03\x02\x006\x03\x02\x02\x1b\x03\x02\x004\x03\x02\x00<\x03" + + "\x02\x02\x0a\x03\x02\x02\x0e\x03\x02\x01\x1a\x03\x02\x01\x07\x03\x02\x01" + + "\x05\x03\x02\x01\x0b\x03\x02\x01%\x03\x02\x01\x0c\x03\x02\x01\x04\x03" + + "\x02\x01\x1c\x03\x02\x00.\x03\x02\x002\x03\x02\x00>\x03\x02\x00\x12\x03" + + "\x02\x00\x16\x03\x02\x011\x03\x02\x013\x03\x02\x02 \x03\x02\x02%\x03\x02" + + "\x02$\x03\x02\x028\x03\x02\x02;\x03\x02\x024\x03\x02\x012\x03\x02\x022" + + "\x03\x02\x02/\x03\x02\x01,\x03\x02\x01\x13\x03\x02\x01\x16\x03\x02\x01" + + "\x11\x03\x02\x01\x1e\x03\x02\x01\x15\x03\x02\x01\x17\x03\x02\x01\x0f\x03" + + "\x02\x01\x08\x03\x02\x00?\x03\x02\x03\x07\x03\x02\x03\x0d\x03\x02\x03" + + "\x13\x03\x02\x03\x1d\x03\x02\x03\x1f\x03\x02\x00\x03\x03\x02\x00\x0d\x03" + + "\x02\x00\x01\x03\x02\x00\x1b\x03\x02\x00\x19\x03\x02\x00\x18\x03\x02\x00" + + "\x13\x03\x02\x00/\x03\x07>\x12\x03\x07<\x1f\x03\x07>\x1d\x03\x06\x1d\x0e" + + "\x03\x07>\x1c\x03\x07>:\x03\x07>\x13\x03\x04\x12+\x03\x07?\x03\x03\x07>" + + "\x02\x03\x06\x224\x03\x06\x1a.\x03\x07<%\x03\x06\x1c\x0b\x03\x0609\x03" + + "\x05\x1f\x01\x03\x04'\x08\x03\x93\xfd\xf5\x03\x02\x0d \x03\x02\x0d#\x03" + + "\x02\x0d!\x03\x02\x0d&\x03\x02\x0d\x22\x03\x02\x0d/\x03\x02\x0d,\x03\x02" + + "\x0d$\x03\x02\x0d'\x03\x02\x0d%\x03\x02\x0d;\x03\x02\x0d=\x03\x02\x0d?" + + "\x03\x099.\x03\x08\x0b7\x03\x08\x02\x14\x03\x08\x14\x0d\x03\x08.:\x03" + + "\x089'\x03\x0f\x0b\x18\x03\x0f\x1c1\x03\x0f\x17&\x03\x0f9\x1f\x03\x0f0" + + "\x0c\x03\x0e\x0a9\x03\x0e\x056\x03\x0e\x1c#\x03\x0f\x13\x0e\x03\x072\x00" + + "\x03\x070\x0d\x03\x072\x0b\x03\x06\x11\x18\x03\x070\x10\x03\x06\x0f(\x03" + + "\x072\x05\x03\x06\x0f,\x03\x073\x15\x03\x06\x07\x08\x03\x05\x16\x02\x03" + + "\x04\x0b \x03\x05:8\x03\x05\x16%\x03\x0a\x0d\x1f\x03\x06\x16\x10\x03\x05" + + "\x1d5\x03\x05*;\x03\x05\x16\x1b\x03\x04.-\x03\x06\x1a\x19\x03\x04\x03," + + "\x03\x0b87\x03\x04/\x0a\x03\x06\x00,\x03\x04-\x01\x03\x04\x1e-\x03\x06/(" + + "\x03\x0a\x0b5\x03\x06\x0e7\x03\x06\x07.\x03\x0597\x03\x0a*%\x03\x0760" + + "\x03\x06\x0c;\x03\x05'\x00\x03\x072.\x03\x072\x08\x03\x06=\x01\x03\x06" + + "\x05\x1b\x03\x06\x06\x12\x03\x06$=\x03\x06'\x0d\x03\x04\x11\x0f\x03\x076" + + ",\x03\x06\x07;\x03\x06.,\x03\x86\xf9\xea\x03\x8f\xff\xeb\x02\x092\x02" + + "\x095\x02\x094\x02\x09;\x02\x09>\x02\x098\x02\x09*\x02\x09/\x02\x09,\x02" + + "\x09%\x02\x09&\x02\x09#\x02\x09 \x02\x08!\x02\x08%\x02\x08$\x02\x08+\x02" + + "\x08.\x02\x08*\x02\x08&\x02\x088\x02\x08>\x02\x084\x02\x086\x02\x080\x02" + + "\x08\x10\x02\x08\x17\x02\x08\x12\x02\x08\x1d\x02\x08\x1f\x02\x08\x13\x02" + + "\x08\x15\x02\x08\x14\x02\x08\x0c\x03\x8b\xfd\xd0\x03\x81\xec\xc6\x03\x87" + + "\xe0\x8a\x03-2\xe3\x03\x80\xef\xe4\x03-2\xea\x03\x88\xe6\xeb\x03\x8e\xe6" + + "\xe8\x03\x84\xe6\xe9\x03\x97\xe6\xee\x03-2\xf9\x03-2\xf6\x03\x8e\xe3\xad" + + "\x03\x80\xe3\x92\x03\x88\xe3\x90\x03\x8e\xe3\x90\x03\x80\xe3\x97\x03\x88" + + "\xe3\x95\x03\x88\xfe\xcb\x03\x8e\xfe\xca\x03\x84\xfe\xcd\x03\x91\xef\xc9" + + "\x03-2\xc1\x03-2\xc0\x03-2\xcb\x03\x88@\x09\x03\x8e@\x08\x03\x8f\xe0\xf5" + + "\x03\x8e\xe6\xf9\x03\x8e\xe0\xfa\x03\x93\xff\xf4\x03\x84\xee\xd3\x03\x0b" + + "(\x04\x023 \x021;\x02\x01*\x03\x0b#\x10\x03\x0b 0\x03\x0b!\x10\x03\x0b!0" + + "\x03\x07\x15\x08\x03\x09?5\x03\x07\x1f\x08\x03\x07\x17\x0b\x03\x09\x1f" + + "\x15\x03\x0b\x1c7\x03\x0a+#\x03\x06\x1a\x1b\x03\x06\x1a\x14\x03\x0a\x01" + + "\x18\x03\x06#\x1b\x03\x0a2\x0c\x03\x0a\x01\x04\x03\x09#;\x03\x08='\x03" + + "\x08\x1a\x0a\x03\x07\x03\x0a\x111\x03\x09\x1b\x09\x03\x073.\x03\x07\x01\x00" + + "\x03\x09/,\x03\x07#>\x03\x07\x048\x03\x0a\x1f\x22\x03\x098>\x03\x09\x11" + + "\x00\x03\x08/\x17\x03\x06'\x22\x03\x0b\x1a+\x03\x0a\x22\x19\x03\x0a/1" + + "\x03\x0974\x03\x09\x0f\x22\x03\x08,\x22\x03\x08?\x14\x03\x07$5\x03\x07<3" + + "\x03\x07=*\x03\x07\x13\x18\x03\x068\x0a\x03\x06\x09\x16\x03\x06\x13\x00" + + "\x03\x08\x067\x03\x08\x01\x03\x03\x08\x12\x1d\x03\x07+7\x03\x06(;\x03" + + "\x06\x1c?\x03\x07\x0e\x17\x03\x0a\x06\x1d\x03\x0a\x19\x07\x03\x08\x14$" + + "\x03\x07$;\x03\x08,$\x03\x08\x06\x0d\x03\x07\x16\x0a\x03\x06>>\x03\x0a" + + "\x06\x12\x03\x0a\x14)\x03\x09\x0d\x1f\x03\x09\x12\x17\x03\x09\x19\x01" + + "\x03\x08\x11 \x03\x08\x1d'\x03\x06<\x1a\x03\x0a.\x00\x03\x07'\x18\x03" + + "\x0a\x22\x08\x03\x08\x0d\x0a\x03\x08\x13)\x03\x07*)\x03\x06<,\x03\x07" + + "\x0b\x1a\x03\x09.\x14\x03\x09\x0d\x1e\x03\x07\x0e#\x03\x0b\x1d'\x03\x0a" + + "\x0a8\x03\x09%2\x03\x08+&\x03\x080\x12\x03\x0a)4\x03\x08\x06\x1f\x03\x0b" + + "\x1b\x1a\x03\x0a\x1b\x0f\x03\x0b\x1d*\x03\x09\x16$\x03\x090\x11\x03\x08" + + "\x11\x08\x03\x0a*(\x03\x0a\x042\x03\x089,\x03\x074'\x03\x07\x0f\x05\x03" + + "\x09\x0b\x0a\x03\x07\x1b\x01\x03\x09\x17:\x03\x09.\x0d\x03\x07.\x11\x03" + + "\x09+\x15\x03\x080\x13\x03\x0b\x1f\x19\x03\x0a \x11\x03\x0a\x220\x03\x09" + + "\x07;\x03\x08\x16\x1c\x03\x07,\x13\x03\x07\x0e/\x03\x06\x221\x03\x0a." + + "\x0a\x03\x0a7\x02\x03\x0a\x032\x03\x0a\x1d.\x03\x091\x06\x03\x09\x19:" + + "\x03\x08\x02/\x03\x060+\x03\x06\x0f-\x03\x06\x1c\x1f\x03\x06\x1d\x07\x03" + + "\x0a,\x11\x03\x09=\x0d\x03\x09\x0b;\x03\x07\x1b/\x03\x0a\x1f:\x03\x09 " + + "\x1f\x03\x09.\x10\x03\x094\x0b\x03\x09\x1a1\x03\x08#\x1a\x03\x084\x1d" + + "\x03\x08\x01\x1f\x03\x08\x11\x22\x03\x07'8\x03\x07\x1a>\x03\x0757\x03" + + "\x06&9\x03\x06+\x11\x03\x0a.\x0b\x03\x0a,>\x03\x0a4#\x03\x08%\x17\x03" + + "\x07\x05\x22\x03\x07\x0c\x0b\x03\x0a\x1d+\x03\x0a\x19\x16\x03\x09+\x1f" + + "\x03\x09\x08\x0b\x03\x08\x16\x18\x03\x08+\x12\x03\x0b\x1d\x0c\x03\x0a=" + + "\x10\x03\x0a\x09\x0d\x03\x0a\x10\x11\x03\x09&0\x03\x08(\x1f\x03\x087\x07" + + "\x03\x08\x185\x03\x07'6\x03\x06.\x05\x03\x06=\x04\x03\x06;;\x03\x06\x06," + + "\x03\x0b\x18>\x03\x08\x00\x18\x03\x06 \x03\x03\x06<\x00\x03\x09%\x18\x03" + + "\x0b\x1c<\x03\x0a%!\x03\x0a\x09\x12\x03\x0a\x16\x02\x03\x090'\x03\x09" + + "\x0e=\x03\x08 \x0e\x03\x08>\x03\x03\x074>\x03\x06&?\x03\x06\x19\x09\x03" + + "\x06?(\x03\x0a-\x0e\x03\x09:3\x03\x098:\x03\x09\x12\x0b\x03\x09\x1d\x17" + + "\x03\x087\x05\x03\x082\x14\x03\x08\x06%\x03\x08\x13\x1f\x03\x06\x06\x0e" + + "\x03\x0a\x22<\x03\x09/<\x03\x06>+\x03\x0a'?\x03\x0a\x13\x0c\x03\x09\x10<" + + "\x03\x07\x1b=\x03\x0a\x19\x13\x03\x09\x22\x1d\x03\x09\x07\x0d\x03\x08)" + + "\x1c\x03\x06=\x1a\x03\x0a/4\x03\x0a7\x11\x03\x0a\x16:\x03\x09?3\x03\x09:" + + "/\x03\x09\x05\x0a\x03\x09\x14\x06\x03\x087\x22\x03\x080\x07\x03\x08\x1a" + + "\x1f\x03\x07\x04(\x03\x07\x04\x09\x03\x06 %\x03\x06<\x08\x03\x0a+\x14" + + "\x03\x09\x1d\x16\x03\x0a70\x03\x08 >\x03\x0857\x03\x070\x0a\x03\x06=\x12" + + "\x03\x06\x16%\x03\x06\x1d,\x03\x099#\x03\x09\x10>\x03\x07 \x1e\x03\x08" + + "\x0c<\x03\x08\x0b\x18\x03\x08\x15+\x03\x08,:\x03\x08%\x22\x03\x07\x0a$" + + "\x03\x0b\x1c=\x03\x07+\x08\x03\x0a/\x05\x03\x0a \x07\x03\x0a\x12'\x03" + + "\x09#\x11\x03\x08\x1b\x15\x03\x0a\x06\x01\x03\x09\x1c\x1b\x03\x0922\x03" + + "\x07\x14<\x03\x07\x09\x04\x03\x061\x04\x03\x07\x0e\x01\x03\x0a\x13\x18" + + "\x03\x0a-\x0c\x03\x0a?\x0d\x03\x0a\x09\x0a\x03\x091&\x03\x0a/\x0b\x03" + + "\x08$<\x03\x083\x1d\x03\x08\x0c$\x03\x08\x0d\x07\x03\x08\x0d?\x03\x08" + + "\x0e\x14\x03\x065\x0a\x03\x08\x1a#\x03\x08\x16#\x03\x0702\x03\x07\x03" + + "\x1a\x03\x06(\x1d\x03\x06+\x1b\x03\x06\x0b\x05\x03\x06\x0b\x17\x03\x06" + + "\x0c\x04\x03\x06\x1e\x19\x03\x06+0\x03\x062\x18\x03\x0b\x16\x1e\x03\x0a+" + + "\x16\x03\x0a-?\x03\x0a#:\x03\x0a#\x10\x03\x0a%$\x03\x0a>+\x03\x0a01\x03" + + "\x0a1\x10\x03\x0a\x099\x03\x0a\x0a\x12\x03\x0a\x19\x1f\x03\x0a\x19\x12" + + "\x03\x09*)\x03\x09-\x16\x03\x09.1\x03\x09.2\x03\x09<\x0e\x03\x09> \x03" + + "\x093\x12\x03\x09\x0b\x01\x03\x09\x1c2\x03\x09\x11\x1c\x03\x09\x15%\x03" + + "\x08,&\x03\x08!\x22\x03\x089(\x03\x08\x0b\x1a\x03\x08\x0d2\x03\x08\x0c" + + "\x04\x03\x08\x0c\x06\x03\x08\x0c\x1f\x03\x08\x0c\x0c\x03\x08\x0f\x1f\x03" + + "\x08\x0f\x1d\x03\x08\x00\x14\x03\x08\x03\x14\x03\x08\x06\x16\x03\x08\x1e" + + "#\x03\x08\x11\x11\x03\x08\x10\x18\x03\x08\x14(\x03\x07)\x1e\x03\x07.1" + + "\x03\x07 $\x03\x07 '\x03\x078\x08\x03\x07\x0d0\x03\x07\x0f7\x03\x07\x05#" + + "\x03\x07\x05\x1a\x03\x07\x1a7\x03\x07\x1d-\x03\x07\x17\x10\x03\x06)\x1f" + + "\x03\x062\x0b\x03\x066\x16\x03\x06\x09\x11\x03\x09(\x1e\x03\x07!5\x03" + + "\x0b\x11\x16\x03\x0a/\x04\x03\x0a,\x1a\x03\x0b\x173\x03\x0a,1\x03\x0a/5" + + "\x03\x0a\x221\x03\x0a\x22\x0d\x03\x0a?%\x03\x0a<,\x03\x0a?#\x03\x0a>\x19" + + "\x03\x0a\x08&\x03\x0a\x0b\x0e\x03\x0a\x0c:\x03\x0a\x0c+\x03\x0a\x03\x22" + + "\x03\x0a\x06)\x03\x0a\x11\x10\x03\x0a\x11\x1a\x03\x0a\x17-\x03\x0a\x14(" + + "\x03\x09)\x1e\x03\x09/\x09\x03\x09.\x00\x03\x09,\x07\x03\x09/*\x03\x09-9" + + "\x03\x09\x228\x03\x09%\x09\x03\x09:\x12\x03\x09;\x1d\x03\x09?\x06\x03" + + "\x093%\x03\x096\x05\x03\x096\x08\x03\x097\x02\x03\x09\x07,\x03\x09\x04," + + "\x03\x09\x1f\x16\x03\x09\x11\x03\x03\x09\x11\x12\x03\x09\x168\x03\x08*" + + "\x05\x03\x08/2\x03\x084:\x03\x08\x22+\x03\x08 0\x03\x08&\x0a\x03\x08;" + + "\x10\x03\x08>$\x03\x08>\x18\x03\x0829\x03\x082:\x03\x081,\x03\x081<\x03" + + "\x081\x1c\x03\x087#\x03\x087*\x03\x08\x09'\x03\x08\x00\x1d\x03\x08\x05-" + + "\x03\x08\x1f4\x03\x08\x1d\x04\x03\x08\x16\x0f\x03\x07*7\x03\x07'!\x03" + + "\x07%\x1b\x03\x077\x0c\x03\x07\x0c1\x03\x07\x0c.\x03\x07\x00\x06\x03\x07" + + "\x01\x02\x03\x07\x010\x03\x07\x06=\x03\x07\x01\x03\x03\x07\x01\x13\x03" + + "\x07\x06\x06\x03\x07\x05\x0a\x03\x07\x1f\x09\x03\x07\x17:\x03\x06*1\x03" + + "\x06-\x1d\x03\x06\x223\x03\x062:\x03\x060$\x03\x066\x1e\x03\x064\x12\x03" + + "\x0645\x03\x06\x0b\x00\x03\x06\x0b7\x03\x06\x07\x1f\x03\x06\x15\x12\x03" + + "\x0c\x05\x0f\x03\x0b+\x0b\x03\x0b+-\x03\x06\x16\x1b\x03\x06\x15\x17\x03" + + "\x89\xca\xea\x03\x89\xca\xe8\x03\x0c8\x10\x03\x0c8\x01\x03\x0c8\x0f\x03" + + "\x0d8%\x03\x0d8!\x03\x0c8-\x03\x0c8/\x03\x0c8+\x03\x0c87\x03\x0c85\x03" + + "\x0c9\x09\x03\x0c9\x0d\x03\x0c9\x0f\x03\x0c9\x0b\x03\xcfu\x0c\x03\xcfu" + + "\x0f\x03\xcfu\x0e\x03\xcfu\x09\x03\x0c9\x10\x03\x0d9\x0c\x03\xcf`;\x03" + + "\xcf`>\x03\xcf`9\x03\xcf`8\x03\xcf`7\x03\xcf`*\x03\xcf`-\x03\xcf`,\x03" + + "\x0d\x1b\x1a\x03\x0d\x1b&\x03\x0c=.\x03\x0c=%\x03\x0c>\x1e\x03\x0c>\x14" + + "\x03\x0c?\x06\x03\x0c?\x0b\x03\x0c?\x0c\x03\x0c?\x0d\x03\x0c?\x02\x03" + + "\x0c>\x0f\x03\x0c>\x08\x03\x0c>\x09\x03\x0c>,\x03\x0c>\x0c\x03\x0c?\x13" + + "\x03\x0c?\x16\x03\x0c?\x15\x03\x0c?\x1c\x03\x0c?\x1f\x03\x0c?\x1d\x03" + + "\x0c?\x1a\x03\x0c?\x17\x03\x0c?\x08\x03\x0c?\x09\x03\x0c?\x0e\x03\x0c?" + + "\x04\x03\x0c?\x05\x03\x0c" + + "\x03\x0c=2\x03\x0c=6\x03\x0c<\x07\x03\x0c<\x05\x03\x0e:!\x03\x0e:#\x03" + + "\x0e8\x09\x03\x0e:&\x03\x0e8\x0b\x03\x0e:$\x03\x0e:,\x03\x0e8\x1a\x03" + + "\x0e8\x1e\x03\x0e:*\x03\x0e:7\x03\x0e:5\x03\x0e:;\x03\x0e:\x15\x03\x0e:<" + + "\x03\x0e:4\x03\x0e:'\x03\x0e:-\x03\x0e:%\x03\x0e:?\x03\x0e:=\x03\x0e:)" + + "\x03\x0e:/\x03\xcfs'\x03\x0d=\x0f\x03\x0d+*\x03\x0d99\x03\x0d9;\x03\x0d9" + + "?\x03\x0d)\x0d\x03\x0d(%\x02\x01\x18\x02\x01(\x02\x01\x1e\x03\x0f$!\x03" + + "\x0f87\x03\x0f4\x0e\x03\x0f5\x1d\x03\x06'\x03\x03\x0f\x08\x18\x03\x0f" + + "\x0d\x1b\x03\x0e2=\x03\x0e;\x08\x03\x0e:\x0b\x03\x0e\x06$\x03\x0e\x0d)" + + "\x03\x0e\x16\x1f\x03\x0e\x16\x1b\x03\x0d$\x0a\x03\x05,\x1d\x03\x0d. \x03" + + "\x0d.#\x03\x0c(/\x03\x09%\x02\x03\x0d90\x03\x0d\x0e4\x03\x0d\x0d\x0f\x03" + + "\x0c#\x00\x03\x0c,\x1e\x03\x0c2\x0e\x03\x0c\x01\x17\x03\x0c\x09:\x03\x0e" + + "\x173\x03\x0c\x08\x03\x03\x0c\x11\x07\x03\x0c\x10\x18\x03\x0c\x1f\x1c" + + "\x03\x0c\x19\x0e\x03\x0c\x1a\x1f\x03\x0f0>\x03\x0b->\x03\x0b<+\x03\x0b8" + + "\x13\x03\x0b\x043\x03\x0b\x14\x03\x03\x0b\x16%\x03\x0d\x22&\x03\x0b\x1a" + + "\x1a\x03\x0b\x1a\x04\x03\x0a%9\x03\x0a&2\x03\x0a&0\x03\x0a!\x1a\x03\x0a!" + + "7\x03\x0a5\x10\x03\x0a=4\x03\x0a?\x0e\x03\x0a>\x10\x03\x0a\x00 \x03\x0a" + + "\x0f:\x03\x0a\x0f9\x03\x0a\x0b\x0a\x03\x0a\x17%\x03\x0a\x1b-\x03\x09-" + + "\x1a\x03\x09,4\x03\x09.,\x03\x09)\x09\x03\x096!\x03\x091\x1f\x03\x093" + + "\x16\x03\x0c+\x1f\x03\x098 \x03\x098=\x03\x0c(\x1a\x03\x0c(\x16\x03\x09" + + "\x0a+\x03\x09\x16\x12\x03\x09\x13\x0e\x03\x09\x153\x03\x08)!\x03\x09\x1a" + + "\x01\x03\x09\x18\x01\x03\x08%#\x03\x08>\x22\x03\x08\x05%\x03\x08\x02*" + + "\x03\x08\x15;\x03\x08\x1b7\x03\x0f\x07\x1d\x03\x0f\x04\x03\x03\x070\x0c" + + "\x03\x07;\x0b\x03\x07\x08\x17\x03\x07\x12\x06\x03\x06/-\x03\x0671\x03" + + "\x065+\x03\x06>7\x03\x06\x049\x03\x05+\x1e\x03\x05,\x17\x03\x05 \x1d\x03" + + "\x05\x22\x05\x03\x050\x1d" + +// 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 *idnaTrie) lookup(s []byte) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return idnaValues[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 := idnaIndex[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 := idnaIndex[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 = idnaIndex[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 := idnaIndex[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 = idnaIndex[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 = idnaIndex[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 *idnaTrie) lookupUnsafe(s []byte) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return idnaValues[c0] + } + i := idnaIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = idnaIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = idnaIndex[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 *idnaTrie) lookupString(s string) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return idnaValues[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 := idnaIndex[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 := idnaIndex[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 = idnaIndex[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 := idnaIndex[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 = idnaIndex[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 = idnaIndex[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 *idnaTrie) lookupStringUnsafe(s string) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return idnaValues[c0] + } + i := idnaIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = idnaIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = idnaIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// idnaTrie. Total size: 28600 bytes (27.93 KiB). Checksum: 95575047b5d8fff. +type idnaTrie struct{} + +func newIdnaTrie(i int) *idnaTrie { + return &idnaTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *idnaTrie) lookupValue(n uint32, b byte) uint16 { + switch { + case n < 124: + return uint16(idnaValues[n<<6+uint32(b)]) + default: + n -= 124 + return uint16(idnaSparse.lookup(n, b)) + } +} + +// idnaValues: 126 blocks, 8064 entries, 16128 bytes +// The third block is the zero block. +var idnaValues = [8064]uint16{ + // Block 0x0, offset 0x0 + 0x00: 0x0080, 0x01: 0x0080, 0x02: 0x0080, 0x03: 0x0080, 0x04: 0x0080, 0x05: 0x0080, + 0x06: 0x0080, 0x07: 0x0080, 0x08: 0x0080, 0x09: 0x0080, 0x0a: 0x0080, 0x0b: 0x0080, + 0x0c: 0x0080, 0x0d: 0x0080, 0x0e: 0x0080, 0x0f: 0x0080, 0x10: 0x0080, 0x11: 0x0080, + 0x12: 0x0080, 0x13: 0x0080, 0x14: 0x0080, 0x15: 0x0080, 0x16: 0x0080, 0x17: 0x0080, + 0x18: 0x0080, 0x19: 0x0080, 0x1a: 0x0080, 0x1b: 0x0080, 0x1c: 0x0080, 0x1d: 0x0080, + 0x1e: 0x0080, 0x1f: 0x0080, 0x20: 0x0080, 0x21: 0x0080, 0x22: 0x0080, 0x23: 0x0080, + 0x24: 0x0080, 0x25: 0x0080, 0x26: 0x0080, 0x27: 0x0080, 0x28: 0x0080, 0x29: 0x0080, + 0x2a: 0x0080, 0x2b: 0x0080, 0x2c: 0x0080, 0x2d: 0x0008, 0x2e: 0x0008, 0x2f: 0x0080, + 0x30: 0x0008, 0x31: 0x0008, 0x32: 0x0008, 0x33: 0x0008, 0x34: 0x0008, 0x35: 0x0008, + 0x36: 0x0008, 0x37: 0x0008, 0x38: 0x0008, 0x39: 0x0008, 0x3a: 0x0080, 0x3b: 0x0080, + 0x3c: 0x0080, 0x3d: 0x0080, 0x3e: 0x0080, 0x3f: 0x0080, + // Block 0x1, offset 0x40 + 0x40: 0x0080, 0x41: 0xe105, 0x42: 0xe105, 0x43: 0xe105, 0x44: 0xe105, 0x45: 0xe105, + 0x46: 0xe105, 0x47: 0xe105, 0x48: 0xe105, 0x49: 0xe105, 0x4a: 0xe105, 0x4b: 0xe105, + 0x4c: 0xe105, 0x4d: 0xe105, 0x4e: 0xe105, 0x4f: 0xe105, 0x50: 0xe105, 0x51: 0xe105, + 0x52: 0xe105, 0x53: 0xe105, 0x54: 0xe105, 0x55: 0xe105, 0x56: 0xe105, 0x57: 0xe105, + 0x58: 0xe105, 0x59: 0xe105, 0x5a: 0xe105, 0x5b: 0x0080, 0x5c: 0x0080, 0x5d: 0x0080, + 0x5e: 0x0080, 0x5f: 0x0080, 0x60: 0x0080, 0x61: 0x0008, 0x62: 0x0008, 0x63: 0x0008, + 0x64: 0x0008, 0x65: 0x0008, 0x66: 0x0008, 0x67: 0x0008, 0x68: 0x0008, 0x69: 0x0008, + 0x6a: 0x0008, 0x6b: 0x0008, 0x6c: 0x0008, 0x6d: 0x0008, 0x6e: 0x0008, 0x6f: 0x0008, + 0x70: 0x0008, 0x71: 0x0008, 0x72: 0x0008, 0x73: 0x0008, 0x74: 0x0008, 0x75: 0x0008, + 0x76: 0x0008, 0x77: 0x0008, 0x78: 0x0008, 0x79: 0x0008, 0x7a: 0x0008, 0x7b: 0x0080, + 0x7c: 0x0080, 0x7d: 0x0080, 0x7e: 0x0080, 0x7f: 0x0080, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc0: 0x0040, 0xc1: 0x0040, 0xc2: 0x0040, 0xc3: 0x0040, 0xc4: 0x0040, 0xc5: 0x0040, + 0xc6: 0x0040, 0xc7: 0x0040, 0xc8: 0x0040, 0xc9: 0x0040, 0xca: 0x0040, 0xcb: 0x0040, + 0xcc: 0x0040, 0xcd: 0x0040, 0xce: 0x0040, 0xcf: 0x0040, 0xd0: 0x0040, 0xd1: 0x0040, + 0xd2: 0x0040, 0xd3: 0x0040, 0xd4: 0x0040, 0xd5: 0x0040, 0xd6: 0x0040, 0xd7: 0x0040, + 0xd8: 0x0040, 0xd9: 0x0040, 0xda: 0x0040, 0xdb: 0x0040, 0xdc: 0x0040, 0xdd: 0x0040, + 0xde: 0x0040, 0xdf: 0x0040, 0xe0: 0x000a, 0xe1: 0x0018, 0xe2: 0x0018, 0xe3: 0x0018, + 0xe4: 0x0018, 0xe5: 0x0018, 0xe6: 0x0018, 0xe7: 0x0018, 0xe8: 0x001a, 0xe9: 0x0018, + 0xea: 0x0039, 0xeb: 0x0018, 0xec: 0x0018, 0xed: 0x03c0, 0xee: 0x0018, 0xef: 0x004a, + 0xf0: 0x0018, 0xf1: 0x0018, 0xf2: 0x0069, 0xf3: 0x0079, 0xf4: 0x008a, 0xf5: 0x0005, + 0xf6: 0x0018, 0xf7: 0x0008, 0xf8: 0x00aa, 0xf9: 0x00c9, 0xfa: 0x00d9, 0xfb: 0x0018, + 0xfc: 0x00e9, 0xfd: 0x0119, 0xfe: 0x0149, 0xff: 0x0018, + // Block 0x4, offset 0x100 + 0x100: 0xe00d, 0x101: 0x0008, 0x102: 0xe00d, 0x103: 0x0008, 0x104: 0xe00d, 0x105: 0x0008, + 0x106: 0xe00d, 0x107: 0x0008, 0x108: 0xe00d, 0x109: 0x0008, 0x10a: 0xe00d, 0x10b: 0x0008, + 0x10c: 0xe00d, 0x10d: 0x0008, 0x10e: 0xe00d, 0x10f: 0x0008, 0x110: 0xe00d, 0x111: 0x0008, + 0x112: 0xe00d, 0x113: 0x0008, 0x114: 0xe00d, 0x115: 0x0008, 0x116: 0xe00d, 0x117: 0x0008, + 0x118: 0xe00d, 0x119: 0x0008, 0x11a: 0xe00d, 0x11b: 0x0008, 0x11c: 0xe00d, 0x11d: 0x0008, + 0x11e: 0xe00d, 0x11f: 0x0008, 0x120: 0xe00d, 0x121: 0x0008, 0x122: 0xe00d, 0x123: 0x0008, + 0x124: 0xe00d, 0x125: 0x0008, 0x126: 0xe00d, 0x127: 0x0008, 0x128: 0xe00d, 0x129: 0x0008, + 0x12a: 0xe00d, 0x12b: 0x0008, 0x12c: 0xe00d, 0x12d: 0x0008, 0x12e: 0xe00d, 0x12f: 0x0008, + 0x130: 0x0179, 0x131: 0x0008, 0x132: 0x0035, 0x133: 0x004d, 0x134: 0xe00d, 0x135: 0x0008, + 0x136: 0xe00d, 0x137: 0x0008, 0x138: 0x0008, 0x139: 0xe01d, 0x13a: 0x0008, 0x13b: 0xe03d, + 0x13c: 0x0008, 0x13d: 0xe01d, 0x13e: 0x0008, 0x13f: 0x0199, + // Block 0x5, offset 0x140 + 0x140: 0x0199, 0x141: 0xe01d, 0x142: 0x0008, 0x143: 0xe03d, 0x144: 0x0008, 0x145: 0xe01d, + 0x146: 0x0008, 0x147: 0xe07d, 0x148: 0x0008, 0x149: 0x01b9, 0x14a: 0xe00d, 0x14b: 0x0008, + 0x14c: 0xe00d, 0x14d: 0x0008, 0x14e: 0xe00d, 0x14f: 0x0008, 0x150: 0xe00d, 0x151: 0x0008, + 0x152: 0xe00d, 0x153: 0x0008, 0x154: 0xe00d, 0x155: 0x0008, 0x156: 0xe00d, 0x157: 0x0008, + 0x158: 0xe00d, 0x159: 0x0008, 0x15a: 0xe00d, 0x15b: 0x0008, 0x15c: 0xe00d, 0x15d: 0x0008, + 0x15e: 0xe00d, 0x15f: 0x0008, 0x160: 0xe00d, 0x161: 0x0008, 0x162: 0xe00d, 0x163: 0x0008, + 0x164: 0xe00d, 0x165: 0x0008, 0x166: 0xe00d, 0x167: 0x0008, 0x168: 0xe00d, 0x169: 0x0008, + 0x16a: 0xe00d, 0x16b: 0x0008, 0x16c: 0xe00d, 0x16d: 0x0008, 0x16e: 0xe00d, 0x16f: 0x0008, + 0x170: 0xe00d, 0x171: 0x0008, 0x172: 0xe00d, 0x173: 0x0008, 0x174: 0xe00d, 0x175: 0x0008, + 0x176: 0xe00d, 0x177: 0x0008, 0x178: 0x0065, 0x179: 0xe01d, 0x17a: 0x0008, 0x17b: 0xe03d, + 0x17c: 0x0008, 0x17d: 0xe01d, 0x17e: 0x0008, 0x17f: 0x01d9, + // Block 0x6, offset 0x180 + 0x180: 0x0008, 0x181: 0x007d, 0x182: 0xe00d, 0x183: 0x0008, 0x184: 0xe00d, 0x185: 0x0008, + 0x186: 0x007d, 0x187: 0xe07d, 0x188: 0x0008, 0x189: 0x0095, 0x18a: 0x00ad, 0x18b: 0xe03d, + 0x18c: 0x0008, 0x18d: 0x0008, 0x18e: 0x00c5, 0x18f: 0x00dd, 0x190: 0x00f5, 0x191: 0xe01d, + 0x192: 0x0008, 0x193: 0x010d, 0x194: 0x0125, 0x195: 0x0008, 0x196: 0x013d, 0x197: 0x013d, + 0x198: 0xe00d, 0x199: 0x0008, 0x19a: 0x0008, 0x19b: 0x0008, 0x19c: 0x010d, 0x19d: 0x0155, + 0x19e: 0x0008, 0x19f: 0x016d, 0x1a0: 0xe00d, 0x1a1: 0x0008, 0x1a2: 0xe00d, 0x1a3: 0x0008, + 0x1a4: 0xe00d, 0x1a5: 0x0008, 0x1a6: 0x0185, 0x1a7: 0xe07d, 0x1a8: 0x0008, 0x1a9: 0x019d, + 0x1aa: 0x0008, 0x1ab: 0x0008, 0x1ac: 0xe00d, 0x1ad: 0x0008, 0x1ae: 0x0185, 0x1af: 0xe0fd, + 0x1b0: 0x0008, 0x1b1: 0x01b5, 0x1b2: 0x01cd, 0x1b3: 0xe03d, 0x1b4: 0x0008, 0x1b5: 0xe01d, + 0x1b6: 0x0008, 0x1b7: 0x01e5, 0x1b8: 0xe00d, 0x1b9: 0x0008, 0x1ba: 0x0008, 0x1bb: 0x0008, + 0x1bc: 0xe00d, 0x1bd: 0x0008, 0x1be: 0x0008, 0x1bf: 0x0008, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x0008, 0x1c1: 0x0008, 0x1c2: 0x0008, 0x1c3: 0x0008, 0x1c4: 0x01e9, 0x1c5: 0x01e9, + 0x1c6: 0x01e9, 0x1c7: 0x01fd, 0x1c8: 0x0215, 0x1c9: 0x022d, 0x1ca: 0x0245, 0x1cb: 0x025d, + 0x1cc: 0x0275, 0x1cd: 0xe01d, 0x1ce: 0x0008, 0x1cf: 0xe0fd, 0x1d0: 0x0008, 0x1d1: 0xe01d, + 0x1d2: 0x0008, 0x1d3: 0xe03d, 0x1d4: 0x0008, 0x1d5: 0xe01d, 0x1d6: 0x0008, 0x1d7: 0xe07d, + 0x1d8: 0x0008, 0x1d9: 0xe01d, 0x1da: 0x0008, 0x1db: 0xe03d, 0x1dc: 0x0008, 0x1dd: 0x0008, + 0x1de: 0xe00d, 0x1df: 0x0008, 0x1e0: 0xe00d, 0x1e1: 0x0008, 0x1e2: 0xe00d, 0x1e3: 0x0008, + 0x1e4: 0xe00d, 0x1e5: 0x0008, 0x1e6: 0xe00d, 0x1e7: 0x0008, 0x1e8: 0xe00d, 0x1e9: 0x0008, + 0x1ea: 0xe00d, 0x1eb: 0x0008, 0x1ec: 0xe00d, 0x1ed: 0x0008, 0x1ee: 0xe00d, 0x1ef: 0x0008, + 0x1f0: 0x0008, 0x1f1: 0x028d, 0x1f2: 0x02a5, 0x1f3: 0x02bd, 0x1f4: 0xe00d, 0x1f5: 0x0008, + 0x1f6: 0x02d5, 0x1f7: 0x02ed, 0x1f8: 0xe00d, 0x1f9: 0x0008, 0x1fa: 0xe00d, 0x1fb: 0x0008, + 0x1fc: 0xe00d, 0x1fd: 0x0008, 0x1fe: 0xe00d, 0x1ff: 0x0008, + // Block 0x8, offset 0x200 + 0x200: 0xe00d, 0x201: 0x0008, 0x202: 0xe00d, 0x203: 0x0008, 0x204: 0xe00d, 0x205: 0x0008, + 0x206: 0xe00d, 0x207: 0x0008, 0x208: 0xe00d, 0x209: 0x0008, 0x20a: 0xe00d, 0x20b: 0x0008, + 0x20c: 0xe00d, 0x20d: 0x0008, 0x20e: 0xe00d, 0x20f: 0x0008, 0x210: 0xe00d, 0x211: 0x0008, + 0x212: 0xe00d, 0x213: 0x0008, 0x214: 0xe00d, 0x215: 0x0008, 0x216: 0xe00d, 0x217: 0x0008, + 0x218: 0xe00d, 0x219: 0x0008, 0x21a: 0xe00d, 0x21b: 0x0008, 0x21c: 0xe00d, 0x21d: 0x0008, + 0x21e: 0xe00d, 0x21f: 0x0008, 0x220: 0x0305, 0x221: 0x0008, 0x222: 0xe00d, 0x223: 0x0008, + 0x224: 0xe00d, 0x225: 0x0008, 0x226: 0xe00d, 0x227: 0x0008, 0x228: 0xe00d, 0x229: 0x0008, + 0x22a: 0xe00d, 0x22b: 0x0008, 0x22c: 0xe00d, 0x22d: 0x0008, 0x22e: 0xe00d, 0x22f: 0x0008, + 0x230: 0xe00d, 0x231: 0x0008, 0x232: 0xe00d, 0x233: 0x0008, 0x234: 0x0008, 0x235: 0x0008, + 0x236: 0x0008, 0x237: 0x0008, 0x238: 0x0008, 0x239: 0x0008, 0x23a: 0x0209, 0x23b: 0xe03d, + 0x23c: 0x0008, 0x23d: 0x031d, 0x23e: 0x0229, 0x23f: 0x0008, + // Block 0x9, offset 0x240 + 0x240: 0x0008, 0x241: 0x0008, 0x242: 0x0018, 0x243: 0x0018, 0x244: 0x0018, 0x245: 0x0018, + 0x246: 0x0008, 0x247: 0x0008, 0x248: 0x0008, 0x249: 0x0008, 0x24a: 0x0008, 0x24b: 0x0008, + 0x24c: 0x0008, 0x24d: 0x0008, 0x24e: 0x0008, 0x24f: 0x0008, 0x250: 0x0008, 0x251: 0x0008, + 0x252: 0x0018, 0x253: 0x0018, 0x254: 0x0018, 0x255: 0x0018, 0x256: 0x0018, 0x257: 0x0018, + 0x258: 0x029a, 0x259: 0x02ba, 0x25a: 0x02da, 0x25b: 0x02fa, 0x25c: 0x031a, 0x25d: 0x033a, + 0x25e: 0x0018, 0x25f: 0x0018, 0x260: 0x03ad, 0x261: 0x0359, 0x262: 0x01d9, 0x263: 0x0369, + 0x264: 0x03c5, 0x265: 0x0018, 0x266: 0x0018, 0x267: 0x0018, 0x268: 0x0018, 0x269: 0x0018, + 0x26a: 0x0018, 0x26b: 0x0018, 0x26c: 0x0008, 0x26d: 0x0018, 0x26e: 0x0008, 0x26f: 0x0018, + 0x270: 0x0018, 0x271: 0x0018, 0x272: 0x0018, 0x273: 0x0018, 0x274: 0x0018, 0x275: 0x0018, + 0x276: 0x0018, 0x277: 0x0018, 0x278: 0x0018, 0x279: 0x0018, 0x27a: 0x0018, 0x27b: 0x0018, + 0x27c: 0x0018, 0x27d: 0x0018, 0x27e: 0x0018, 0x27f: 0x0018, + // Block 0xa, offset 0x280 + 0x280: 0x03dd, 0x281: 0x03dd, 0x282: 0x3308, 0x283: 0x03f5, 0x284: 0x0379, 0x285: 0x040d, + 0x286: 0x3308, 0x287: 0x3308, 0x288: 0x3308, 0x289: 0x3308, 0x28a: 0x3308, 0x28b: 0x3308, + 0x28c: 0x3308, 0x28d: 0x3308, 0x28e: 0x3308, 0x28f: 0x33c0, 0x290: 0x3308, 0x291: 0x3308, + 0x292: 0x3308, 0x293: 0x3308, 0x294: 0x3308, 0x295: 0x3308, 0x296: 0x3308, 0x297: 0x3308, + 0x298: 0x3308, 0x299: 0x3308, 0x29a: 0x3308, 0x29b: 0x3308, 0x29c: 0x3308, 0x29d: 0x3308, + 0x29e: 0x3308, 0x29f: 0x3308, 0x2a0: 0x3308, 0x2a1: 0x3308, 0x2a2: 0x3308, 0x2a3: 0x3308, + 0x2a4: 0x3308, 0x2a5: 0x3308, 0x2a6: 0x3308, 0x2a7: 0x3308, 0x2a8: 0x3308, 0x2a9: 0x3308, + 0x2aa: 0x3308, 0x2ab: 0x3308, 0x2ac: 0x3308, 0x2ad: 0x3308, 0x2ae: 0x3308, 0x2af: 0x3308, + 0x2b0: 0xe00d, 0x2b1: 0x0008, 0x2b2: 0xe00d, 0x2b3: 0x0008, 0x2b4: 0x0425, 0x2b5: 0x0008, + 0x2b6: 0xe00d, 0x2b7: 0x0008, 0x2b8: 0x0040, 0x2b9: 0x0040, 0x2ba: 0x03a2, 0x2bb: 0x0008, + 0x2bc: 0x0008, 0x2bd: 0x0008, 0x2be: 0x03c2, 0x2bf: 0x043d, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x0040, 0x2c1: 0x0040, 0x2c2: 0x0040, 0x2c3: 0x0040, 0x2c4: 0x008a, 0x2c5: 0x03d2, + 0x2c6: 0xe155, 0x2c7: 0x0455, 0x2c8: 0xe12d, 0x2c9: 0xe13d, 0x2ca: 0xe12d, 0x2cb: 0x0040, + 0x2cc: 0x03dd, 0x2cd: 0x0040, 0x2ce: 0x046d, 0x2cf: 0x0485, 0x2d0: 0x0008, 0x2d1: 0xe105, + 0x2d2: 0xe105, 0x2d3: 0xe105, 0x2d4: 0xe105, 0x2d5: 0xe105, 0x2d6: 0xe105, 0x2d7: 0xe105, + 0x2d8: 0xe105, 0x2d9: 0xe105, 0x2da: 0xe105, 0x2db: 0xe105, 0x2dc: 0xe105, 0x2dd: 0xe105, + 0x2de: 0xe105, 0x2df: 0xe105, 0x2e0: 0x049d, 0x2e1: 0x049d, 0x2e2: 0x0040, 0x2e3: 0x049d, + 0x2e4: 0x049d, 0x2e5: 0x049d, 0x2e6: 0x049d, 0x2e7: 0x049d, 0x2e8: 0x049d, 0x2e9: 0x049d, + 0x2ea: 0x049d, 0x2eb: 0x049d, 0x2ec: 0x0008, 0x2ed: 0x0008, 0x2ee: 0x0008, 0x2ef: 0x0008, + 0x2f0: 0x0008, 0x2f1: 0x0008, 0x2f2: 0x0008, 0x2f3: 0x0008, 0x2f4: 0x0008, 0x2f5: 0x0008, + 0x2f6: 0x0008, 0x2f7: 0x0008, 0x2f8: 0x0008, 0x2f9: 0x0008, 0x2fa: 0x0008, 0x2fb: 0x0008, + 0x2fc: 0x0008, 0x2fd: 0x0008, 0x2fe: 0x0008, 0x2ff: 0x0008, + // Block 0xc, offset 0x300 + 0x300: 0x0008, 0x301: 0x0008, 0x302: 0xe00f, 0x303: 0x0008, 0x304: 0x0008, 0x305: 0x0008, + 0x306: 0x0008, 0x307: 0x0008, 0x308: 0x0008, 0x309: 0x0008, 0x30a: 0x0008, 0x30b: 0x0008, + 0x30c: 0x0008, 0x30d: 0x0008, 0x30e: 0x0008, 0x30f: 0xe0c5, 0x310: 0x04b5, 0x311: 0x04cd, + 0x312: 0xe0bd, 0x313: 0xe0f5, 0x314: 0xe0fd, 0x315: 0xe09d, 0x316: 0xe0b5, 0x317: 0x0008, + 0x318: 0xe00d, 0x319: 0x0008, 0x31a: 0xe00d, 0x31b: 0x0008, 0x31c: 0xe00d, 0x31d: 0x0008, + 0x31e: 0xe00d, 0x31f: 0x0008, 0x320: 0xe00d, 0x321: 0x0008, 0x322: 0xe00d, 0x323: 0x0008, + 0x324: 0xe00d, 0x325: 0x0008, 0x326: 0xe00d, 0x327: 0x0008, 0x328: 0xe00d, 0x329: 0x0008, + 0x32a: 0xe00d, 0x32b: 0x0008, 0x32c: 0xe00d, 0x32d: 0x0008, 0x32e: 0xe00d, 0x32f: 0x0008, + 0x330: 0x04e5, 0x331: 0xe185, 0x332: 0xe18d, 0x333: 0x0008, 0x334: 0x04fd, 0x335: 0x03dd, + 0x336: 0x0018, 0x337: 0xe07d, 0x338: 0x0008, 0x339: 0xe1d5, 0x33a: 0xe00d, 0x33b: 0x0008, + 0x33c: 0x0008, 0x33d: 0x0515, 0x33e: 0x052d, 0x33f: 0x052d, + // Block 0xd, offset 0x340 + 0x340: 0x0008, 0x341: 0x0008, 0x342: 0x0008, 0x343: 0x0008, 0x344: 0x0008, 0x345: 0x0008, + 0x346: 0x0008, 0x347: 0x0008, 0x348: 0x0008, 0x349: 0x0008, 0x34a: 0x0008, 0x34b: 0x0008, + 0x34c: 0x0008, 0x34d: 0x0008, 0x34e: 0x0008, 0x34f: 0x0008, 0x350: 0x0008, 0x351: 0x0008, + 0x352: 0x0008, 0x353: 0x0008, 0x354: 0x0008, 0x355: 0x0008, 0x356: 0x0008, 0x357: 0x0008, + 0x358: 0x0008, 0x359: 0x0008, 0x35a: 0x0008, 0x35b: 0x0008, 0x35c: 0x0008, 0x35d: 0x0008, + 0x35e: 0x0008, 0x35f: 0x0008, 0x360: 0xe00d, 0x361: 0x0008, 0x362: 0xe00d, 0x363: 0x0008, + 0x364: 0xe00d, 0x365: 0x0008, 0x366: 0xe00d, 0x367: 0x0008, 0x368: 0xe00d, 0x369: 0x0008, + 0x36a: 0xe00d, 0x36b: 0x0008, 0x36c: 0xe00d, 0x36d: 0x0008, 0x36e: 0xe00d, 0x36f: 0x0008, + 0x370: 0xe00d, 0x371: 0x0008, 0x372: 0xe00d, 0x373: 0x0008, 0x374: 0xe00d, 0x375: 0x0008, + 0x376: 0xe00d, 0x377: 0x0008, 0x378: 0xe00d, 0x379: 0x0008, 0x37a: 0xe00d, 0x37b: 0x0008, + 0x37c: 0xe00d, 0x37d: 0x0008, 0x37e: 0xe00d, 0x37f: 0x0008, + // Block 0xe, offset 0x380 + 0x380: 0xe00d, 0x381: 0x0008, 0x382: 0x0018, 0x383: 0x3308, 0x384: 0x3308, 0x385: 0x3308, + 0x386: 0x3308, 0x387: 0x3308, 0x388: 0x3318, 0x389: 0x3318, 0x38a: 0xe00d, 0x38b: 0x0008, + 0x38c: 0xe00d, 0x38d: 0x0008, 0x38e: 0xe00d, 0x38f: 0x0008, 0x390: 0xe00d, 0x391: 0x0008, + 0x392: 0xe00d, 0x393: 0x0008, 0x394: 0xe00d, 0x395: 0x0008, 0x396: 0xe00d, 0x397: 0x0008, + 0x398: 0xe00d, 0x399: 0x0008, 0x39a: 0xe00d, 0x39b: 0x0008, 0x39c: 0xe00d, 0x39d: 0x0008, + 0x39e: 0xe00d, 0x39f: 0x0008, 0x3a0: 0xe00d, 0x3a1: 0x0008, 0x3a2: 0xe00d, 0x3a3: 0x0008, + 0x3a4: 0xe00d, 0x3a5: 0x0008, 0x3a6: 0xe00d, 0x3a7: 0x0008, 0x3a8: 0xe00d, 0x3a9: 0x0008, + 0x3aa: 0xe00d, 0x3ab: 0x0008, 0x3ac: 0xe00d, 0x3ad: 0x0008, 0x3ae: 0xe00d, 0x3af: 0x0008, + 0x3b0: 0xe00d, 0x3b1: 0x0008, 0x3b2: 0xe00d, 0x3b3: 0x0008, 0x3b4: 0xe00d, 0x3b5: 0x0008, + 0x3b6: 0xe00d, 0x3b7: 0x0008, 0x3b8: 0xe00d, 0x3b9: 0x0008, 0x3ba: 0xe00d, 0x3bb: 0x0008, + 0x3bc: 0xe00d, 0x3bd: 0x0008, 0x3be: 0xe00d, 0x3bf: 0x0008, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x0040, 0x3c1: 0xe01d, 0x3c2: 0x0008, 0x3c3: 0xe03d, 0x3c4: 0x0008, 0x3c5: 0xe01d, + 0x3c6: 0x0008, 0x3c7: 0xe07d, 0x3c8: 0x0008, 0x3c9: 0xe01d, 0x3ca: 0x0008, 0x3cb: 0xe03d, + 0x3cc: 0x0008, 0x3cd: 0xe01d, 0x3ce: 0x0008, 0x3cf: 0x0008, 0x3d0: 0xe00d, 0x3d1: 0x0008, + 0x3d2: 0xe00d, 0x3d3: 0x0008, 0x3d4: 0xe00d, 0x3d5: 0x0008, 0x3d6: 0xe00d, 0x3d7: 0x0008, + 0x3d8: 0xe00d, 0x3d9: 0x0008, 0x3da: 0xe00d, 0x3db: 0x0008, 0x3dc: 0xe00d, 0x3dd: 0x0008, + 0x3de: 0xe00d, 0x3df: 0x0008, 0x3e0: 0xe00d, 0x3e1: 0x0008, 0x3e2: 0xe00d, 0x3e3: 0x0008, + 0x3e4: 0xe00d, 0x3e5: 0x0008, 0x3e6: 0xe00d, 0x3e7: 0x0008, 0x3e8: 0xe00d, 0x3e9: 0x0008, + 0x3ea: 0xe00d, 0x3eb: 0x0008, 0x3ec: 0xe00d, 0x3ed: 0x0008, 0x3ee: 0xe00d, 0x3ef: 0x0008, + 0x3f0: 0xe00d, 0x3f1: 0x0008, 0x3f2: 0xe00d, 0x3f3: 0x0008, 0x3f4: 0xe00d, 0x3f5: 0x0008, + 0x3f6: 0xe00d, 0x3f7: 0x0008, 0x3f8: 0xe00d, 0x3f9: 0x0008, 0x3fa: 0xe00d, 0x3fb: 0x0008, + 0x3fc: 0xe00d, 0x3fd: 0x0008, 0x3fe: 0xe00d, 0x3ff: 0x0008, + // Block 0x10, offset 0x400 + 0x400: 0xe00d, 0x401: 0x0008, 0x402: 0xe00d, 0x403: 0x0008, 0x404: 0xe00d, 0x405: 0x0008, + 0x406: 0xe00d, 0x407: 0x0008, 0x408: 0xe00d, 0x409: 0x0008, 0x40a: 0xe00d, 0x40b: 0x0008, + 0x40c: 0xe00d, 0x40d: 0x0008, 0x40e: 0xe00d, 0x40f: 0x0008, 0x410: 0xe00d, 0x411: 0x0008, + 0x412: 0xe00d, 0x413: 0x0008, 0x414: 0xe00d, 0x415: 0x0008, 0x416: 0xe00d, 0x417: 0x0008, + 0x418: 0xe00d, 0x419: 0x0008, 0x41a: 0xe00d, 0x41b: 0x0008, 0x41c: 0xe00d, 0x41d: 0x0008, + 0x41e: 0xe00d, 0x41f: 0x0008, 0x420: 0xe00d, 0x421: 0x0008, 0x422: 0xe00d, 0x423: 0x0008, + 0x424: 0xe00d, 0x425: 0x0008, 0x426: 0xe00d, 0x427: 0x0008, 0x428: 0xe00d, 0x429: 0x0008, + 0x42a: 0xe00d, 0x42b: 0x0008, 0x42c: 0xe00d, 0x42d: 0x0008, 0x42e: 0xe00d, 0x42f: 0x0008, + 0x430: 0x0040, 0x431: 0x03f5, 0x432: 0x03f5, 0x433: 0x03f5, 0x434: 0x03f5, 0x435: 0x03f5, + 0x436: 0x03f5, 0x437: 0x03f5, 0x438: 0x03f5, 0x439: 0x03f5, 0x43a: 0x03f5, 0x43b: 0x03f5, + 0x43c: 0x03f5, 0x43d: 0x03f5, 0x43e: 0x03f5, 0x43f: 0x03f5, + // Block 0x11, offset 0x440 + 0x440: 0x0840, 0x441: 0x0840, 0x442: 0x0840, 0x443: 0x0840, 0x444: 0x0840, 0x445: 0x0840, + 0x446: 0x0018, 0x447: 0x0018, 0x448: 0x0818, 0x449: 0x0018, 0x44a: 0x0018, 0x44b: 0x0818, + 0x44c: 0x0018, 0x44d: 0x0818, 0x44e: 0x0018, 0x44f: 0x0018, 0x450: 0x3308, 0x451: 0x3308, + 0x452: 0x3308, 0x453: 0x3308, 0x454: 0x3308, 0x455: 0x3308, 0x456: 0x3308, 0x457: 0x3308, + 0x458: 0x3308, 0x459: 0x3308, 0x45a: 0x3308, 0x45b: 0x0818, 0x45c: 0x0b40, 0x45d: 0x0040, + 0x45e: 0x0818, 0x45f: 0x0818, 0x460: 0x0a08, 0x461: 0x0808, 0x462: 0x0c08, 0x463: 0x0c08, + 0x464: 0x0c08, 0x465: 0x0c08, 0x466: 0x0a08, 0x467: 0x0c08, 0x468: 0x0a08, 0x469: 0x0c08, + 0x46a: 0x0a08, 0x46b: 0x0a08, 0x46c: 0x0a08, 0x46d: 0x0a08, 0x46e: 0x0a08, 0x46f: 0x0c08, + 0x470: 0x0c08, 0x471: 0x0c08, 0x472: 0x0c08, 0x473: 0x0a08, 0x474: 0x0a08, 0x475: 0x0a08, + 0x476: 0x0a08, 0x477: 0x0a08, 0x478: 0x0a08, 0x479: 0x0a08, 0x47a: 0x0a08, 0x47b: 0x0a08, + 0x47c: 0x0a08, 0x47d: 0x0a08, 0x47e: 0x0a08, 0x47f: 0x0a08, + // Block 0x12, offset 0x480 + 0x480: 0x0818, 0x481: 0x0a08, 0x482: 0x0a08, 0x483: 0x0a08, 0x484: 0x0a08, 0x485: 0x0a08, + 0x486: 0x0a08, 0x487: 0x0a08, 0x488: 0x0c08, 0x489: 0x0a08, 0x48a: 0x0a08, 0x48b: 0x3308, + 0x48c: 0x3308, 0x48d: 0x3308, 0x48e: 0x3308, 0x48f: 0x3308, 0x490: 0x3308, 0x491: 0x3308, + 0x492: 0x3308, 0x493: 0x3308, 0x494: 0x3308, 0x495: 0x3308, 0x496: 0x3308, 0x497: 0x3308, + 0x498: 0x3308, 0x499: 0x3308, 0x49a: 0x3308, 0x49b: 0x3308, 0x49c: 0x3308, 0x49d: 0x3308, + 0x49e: 0x3308, 0x49f: 0x3308, 0x4a0: 0x0808, 0x4a1: 0x0808, 0x4a2: 0x0808, 0x4a3: 0x0808, + 0x4a4: 0x0808, 0x4a5: 0x0808, 0x4a6: 0x0808, 0x4a7: 0x0808, 0x4a8: 0x0808, 0x4a9: 0x0808, + 0x4aa: 0x0018, 0x4ab: 0x0818, 0x4ac: 0x0818, 0x4ad: 0x0818, 0x4ae: 0x0a08, 0x4af: 0x0a08, + 0x4b0: 0x3308, 0x4b1: 0x0c08, 0x4b2: 0x0c08, 0x4b3: 0x0c08, 0x4b4: 0x0808, 0x4b5: 0x0429, + 0x4b6: 0x0451, 0x4b7: 0x0479, 0x4b8: 0x04a1, 0x4b9: 0x0a08, 0x4ba: 0x0a08, 0x4bb: 0x0a08, + 0x4bc: 0x0a08, 0x4bd: 0x0a08, 0x4be: 0x0a08, 0x4bf: 0x0a08, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x0c08, 0x4c1: 0x0a08, 0x4c2: 0x0a08, 0x4c3: 0x0c08, 0x4c4: 0x0c08, 0x4c5: 0x0c08, + 0x4c6: 0x0c08, 0x4c7: 0x0c08, 0x4c8: 0x0c08, 0x4c9: 0x0c08, 0x4ca: 0x0c08, 0x4cb: 0x0c08, + 0x4cc: 0x0a08, 0x4cd: 0x0c08, 0x4ce: 0x0a08, 0x4cf: 0x0c08, 0x4d0: 0x0a08, 0x4d1: 0x0a08, + 0x4d2: 0x0c08, 0x4d3: 0x0c08, 0x4d4: 0x0818, 0x4d5: 0x0c08, 0x4d6: 0x3308, 0x4d7: 0x3308, + 0x4d8: 0x3308, 0x4d9: 0x3308, 0x4da: 0x3308, 0x4db: 0x3308, 0x4dc: 0x3308, 0x4dd: 0x0840, + 0x4de: 0x0018, 0x4df: 0x3308, 0x4e0: 0x3308, 0x4e1: 0x3308, 0x4e2: 0x3308, 0x4e3: 0x3308, + 0x4e4: 0x3308, 0x4e5: 0x0808, 0x4e6: 0x0808, 0x4e7: 0x3308, 0x4e8: 0x3308, 0x4e9: 0x0018, + 0x4ea: 0x3308, 0x4eb: 0x3308, 0x4ec: 0x3308, 0x4ed: 0x3308, 0x4ee: 0x0c08, 0x4ef: 0x0c08, + 0x4f0: 0x0008, 0x4f1: 0x0008, 0x4f2: 0x0008, 0x4f3: 0x0008, 0x4f4: 0x0008, 0x4f5: 0x0008, + 0x4f6: 0x0008, 0x4f7: 0x0008, 0x4f8: 0x0008, 0x4f9: 0x0008, 0x4fa: 0x0a08, 0x4fb: 0x0a08, + 0x4fc: 0x0a08, 0x4fd: 0x0808, 0x4fe: 0x0808, 0x4ff: 0x0a08, + // Block 0x14, offset 0x500 + 0x500: 0x0818, 0x501: 0x0818, 0x502: 0x0818, 0x503: 0x0818, 0x504: 0x0818, 0x505: 0x0818, + 0x506: 0x0818, 0x507: 0x0818, 0x508: 0x0818, 0x509: 0x0818, 0x50a: 0x0818, 0x50b: 0x0818, + 0x50c: 0x0818, 0x50d: 0x0818, 0x50e: 0x0040, 0x50f: 0x0b40, 0x510: 0x0c08, 0x511: 0x3308, + 0x512: 0x0a08, 0x513: 0x0a08, 0x514: 0x0a08, 0x515: 0x0c08, 0x516: 0x0c08, 0x517: 0x0c08, + 0x518: 0x0c08, 0x519: 0x0c08, 0x51a: 0x0a08, 0x51b: 0x0a08, 0x51c: 0x0a08, 0x51d: 0x0a08, + 0x51e: 0x0c08, 0x51f: 0x0a08, 0x520: 0x0a08, 0x521: 0x0a08, 0x522: 0x0a08, 0x523: 0x0a08, + 0x524: 0x0a08, 0x525: 0x0a08, 0x526: 0x0a08, 0x527: 0x0a08, 0x528: 0x0c08, 0x529: 0x0a08, + 0x52a: 0x0c08, 0x52b: 0x0a08, 0x52c: 0x0c08, 0x52d: 0x0a08, 0x52e: 0x0a08, 0x52f: 0x0c08, + 0x530: 0x3308, 0x531: 0x3308, 0x532: 0x3308, 0x533: 0x3308, 0x534: 0x3308, 0x535: 0x3308, + 0x536: 0x3308, 0x537: 0x3308, 0x538: 0x3308, 0x539: 0x3308, 0x53a: 0x3308, 0x53b: 0x3308, + 0x53c: 0x3308, 0x53d: 0x3308, 0x53e: 0x3308, 0x53f: 0x3308, + // Block 0x15, offset 0x540 + 0x540: 0x3008, 0x541: 0x3308, 0x542: 0x3308, 0x543: 0x3308, 0x544: 0x3308, 0x545: 0x3308, + 0x546: 0x3308, 0x547: 0x3308, 0x548: 0x3308, 0x549: 0x3008, 0x54a: 0x3008, 0x54b: 0x3008, + 0x54c: 0x3008, 0x54d: 0x3b08, 0x54e: 0x3008, 0x54f: 0x3008, 0x550: 0x0008, 0x551: 0x3308, + 0x552: 0x3308, 0x553: 0x3308, 0x554: 0x3308, 0x555: 0x3308, 0x556: 0x3308, 0x557: 0x3308, + 0x558: 0x04c9, 0x559: 0x0501, 0x55a: 0x0539, 0x55b: 0x0571, 0x55c: 0x05a9, 0x55d: 0x05e1, + 0x55e: 0x0619, 0x55f: 0x0651, 0x560: 0x0008, 0x561: 0x0008, 0x562: 0x3308, 0x563: 0x3308, + 0x564: 0x0018, 0x565: 0x0018, 0x566: 0x0008, 0x567: 0x0008, 0x568: 0x0008, 0x569: 0x0008, + 0x56a: 0x0008, 0x56b: 0x0008, 0x56c: 0x0008, 0x56d: 0x0008, 0x56e: 0x0008, 0x56f: 0x0008, + 0x570: 0x0018, 0x571: 0x0008, 0x572: 0x0008, 0x573: 0x0008, 0x574: 0x0008, 0x575: 0x0008, + 0x576: 0x0008, 0x577: 0x0008, 0x578: 0x0008, 0x579: 0x0008, 0x57a: 0x0008, 0x57b: 0x0008, + 0x57c: 0x0008, 0x57d: 0x0008, 0x57e: 0x0008, 0x57f: 0x0008, + // Block 0x16, offset 0x580 + 0x580: 0x0008, 0x581: 0x3308, 0x582: 0x3008, 0x583: 0x3008, 0x584: 0x0040, 0x585: 0x0008, + 0x586: 0x0008, 0x587: 0x0008, 0x588: 0x0008, 0x589: 0x0008, 0x58a: 0x0008, 0x58b: 0x0008, + 0x58c: 0x0008, 0x58d: 0x0040, 0x58e: 0x0040, 0x58f: 0x0008, 0x590: 0x0008, 0x591: 0x0040, + 0x592: 0x0040, 0x593: 0x0008, 0x594: 0x0008, 0x595: 0x0008, 0x596: 0x0008, 0x597: 0x0008, + 0x598: 0x0008, 0x599: 0x0008, 0x59a: 0x0008, 0x59b: 0x0008, 0x59c: 0x0008, 0x59d: 0x0008, + 0x59e: 0x0008, 0x59f: 0x0008, 0x5a0: 0x0008, 0x5a1: 0x0008, 0x5a2: 0x0008, 0x5a3: 0x0008, + 0x5a4: 0x0008, 0x5a5: 0x0008, 0x5a6: 0x0008, 0x5a7: 0x0008, 0x5a8: 0x0008, 0x5a9: 0x0040, + 0x5aa: 0x0008, 0x5ab: 0x0008, 0x5ac: 0x0008, 0x5ad: 0x0008, 0x5ae: 0x0008, 0x5af: 0x0008, + 0x5b0: 0x0008, 0x5b1: 0x0040, 0x5b2: 0x0008, 0x5b3: 0x0040, 0x5b4: 0x0040, 0x5b5: 0x0040, + 0x5b6: 0x0008, 0x5b7: 0x0008, 0x5b8: 0x0008, 0x5b9: 0x0008, 0x5ba: 0x0040, 0x5bb: 0x0040, + 0x5bc: 0x3308, 0x5bd: 0x0008, 0x5be: 0x3008, 0x5bf: 0x3008, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x3008, 0x5c1: 0x3308, 0x5c2: 0x3308, 0x5c3: 0x3308, 0x5c4: 0x3308, 0x5c5: 0x0040, + 0x5c6: 0x0040, 0x5c7: 0x3008, 0x5c8: 0x3008, 0x5c9: 0x0040, 0x5ca: 0x0040, 0x5cb: 0x3008, + 0x5cc: 0x3008, 0x5cd: 0x3b08, 0x5ce: 0x0008, 0x5cf: 0x0040, 0x5d0: 0x0040, 0x5d1: 0x0040, + 0x5d2: 0x0040, 0x5d3: 0x0040, 0x5d4: 0x0040, 0x5d5: 0x0040, 0x5d6: 0x0040, 0x5d7: 0x3008, + 0x5d8: 0x0040, 0x5d9: 0x0040, 0x5da: 0x0040, 0x5db: 0x0040, 0x5dc: 0x0689, 0x5dd: 0x06c1, + 0x5de: 0x0040, 0x5df: 0x06f9, 0x5e0: 0x0008, 0x5e1: 0x0008, 0x5e2: 0x3308, 0x5e3: 0x3308, + 0x5e4: 0x0040, 0x5e5: 0x0040, 0x5e6: 0x0008, 0x5e7: 0x0008, 0x5e8: 0x0008, 0x5e9: 0x0008, + 0x5ea: 0x0008, 0x5eb: 0x0008, 0x5ec: 0x0008, 0x5ed: 0x0008, 0x5ee: 0x0008, 0x5ef: 0x0008, + 0x5f0: 0x0008, 0x5f1: 0x0008, 0x5f2: 0x0018, 0x5f3: 0x0018, 0x5f4: 0x0018, 0x5f5: 0x0018, + 0x5f6: 0x0018, 0x5f7: 0x0018, 0x5f8: 0x0018, 0x5f9: 0x0018, 0x5fa: 0x0018, 0x5fb: 0x0018, + 0x5fc: 0x0040, 0x5fd: 0x0040, 0x5fe: 0x0040, 0x5ff: 0x0040, + // Block 0x18, offset 0x600 + 0x600: 0x0040, 0x601: 0x3308, 0x602: 0x3308, 0x603: 0x3008, 0x604: 0x0040, 0x605: 0x0008, + 0x606: 0x0008, 0x607: 0x0008, 0x608: 0x0008, 0x609: 0x0008, 0x60a: 0x0008, 0x60b: 0x0040, + 0x60c: 0x0040, 0x60d: 0x0040, 0x60e: 0x0040, 0x60f: 0x0008, 0x610: 0x0008, 0x611: 0x0040, + 0x612: 0x0040, 0x613: 0x0008, 0x614: 0x0008, 0x615: 0x0008, 0x616: 0x0008, 0x617: 0x0008, + 0x618: 0x0008, 0x619: 0x0008, 0x61a: 0x0008, 0x61b: 0x0008, 0x61c: 0x0008, 0x61d: 0x0008, + 0x61e: 0x0008, 0x61f: 0x0008, 0x620: 0x0008, 0x621: 0x0008, 0x622: 0x0008, 0x623: 0x0008, + 0x624: 0x0008, 0x625: 0x0008, 0x626: 0x0008, 0x627: 0x0008, 0x628: 0x0008, 0x629: 0x0040, + 0x62a: 0x0008, 0x62b: 0x0008, 0x62c: 0x0008, 0x62d: 0x0008, 0x62e: 0x0008, 0x62f: 0x0008, + 0x630: 0x0008, 0x631: 0x0040, 0x632: 0x0008, 0x633: 0x0731, 0x634: 0x0040, 0x635: 0x0008, + 0x636: 0x0769, 0x637: 0x0040, 0x638: 0x0008, 0x639: 0x0008, 0x63a: 0x0040, 0x63b: 0x0040, + 0x63c: 0x3308, 0x63d: 0x0040, 0x63e: 0x3008, 0x63f: 0x3008, + // Block 0x19, offset 0x640 + 0x640: 0x3008, 0x641: 0x3308, 0x642: 0x3308, 0x643: 0x0040, 0x644: 0x0040, 0x645: 0x0040, + 0x646: 0x0040, 0x647: 0x3308, 0x648: 0x3308, 0x649: 0x0040, 0x64a: 0x0040, 0x64b: 0x3308, + 0x64c: 0x3308, 0x64d: 0x3b08, 0x64e: 0x0040, 0x64f: 0x0040, 0x650: 0x0040, 0x651: 0x3308, + 0x652: 0x0040, 0x653: 0x0040, 0x654: 0x0040, 0x655: 0x0040, 0x656: 0x0040, 0x657: 0x0040, + 0x658: 0x0040, 0x659: 0x07a1, 0x65a: 0x07d9, 0x65b: 0x0811, 0x65c: 0x0008, 0x65d: 0x0040, + 0x65e: 0x0849, 0x65f: 0x0040, 0x660: 0x0040, 0x661: 0x0040, 0x662: 0x0040, 0x663: 0x0040, + 0x664: 0x0040, 0x665: 0x0040, 0x666: 0x0008, 0x667: 0x0008, 0x668: 0x0008, 0x669: 0x0008, + 0x66a: 0x0008, 0x66b: 0x0008, 0x66c: 0x0008, 0x66d: 0x0008, 0x66e: 0x0008, 0x66f: 0x0008, + 0x670: 0x3308, 0x671: 0x3308, 0x672: 0x0008, 0x673: 0x0008, 0x674: 0x0008, 0x675: 0x3308, + 0x676: 0x0040, 0x677: 0x0040, 0x678: 0x0040, 0x679: 0x0040, 0x67a: 0x0040, 0x67b: 0x0040, + 0x67c: 0x0040, 0x67d: 0x0040, 0x67e: 0x0040, 0x67f: 0x0040, + // Block 0x1a, offset 0x680 + 0x680: 0x0040, 0x681: 0x3308, 0x682: 0x3308, 0x683: 0x3008, 0x684: 0x0040, 0x685: 0x0008, + 0x686: 0x0008, 0x687: 0x0008, 0x688: 0x0008, 0x689: 0x0008, 0x68a: 0x0008, 0x68b: 0x0008, + 0x68c: 0x0008, 0x68d: 0x0008, 0x68e: 0x0040, 0x68f: 0x0008, 0x690: 0x0008, 0x691: 0x0008, + 0x692: 0x0040, 0x693: 0x0008, 0x694: 0x0008, 0x695: 0x0008, 0x696: 0x0008, 0x697: 0x0008, + 0x698: 0x0008, 0x699: 0x0008, 0x69a: 0x0008, 0x69b: 0x0008, 0x69c: 0x0008, 0x69d: 0x0008, + 0x69e: 0x0008, 0x69f: 0x0008, 0x6a0: 0x0008, 0x6a1: 0x0008, 0x6a2: 0x0008, 0x6a3: 0x0008, + 0x6a4: 0x0008, 0x6a5: 0x0008, 0x6a6: 0x0008, 0x6a7: 0x0008, 0x6a8: 0x0008, 0x6a9: 0x0040, + 0x6aa: 0x0008, 0x6ab: 0x0008, 0x6ac: 0x0008, 0x6ad: 0x0008, 0x6ae: 0x0008, 0x6af: 0x0008, + 0x6b0: 0x0008, 0x6b1: 0x0040, 0x6b2: 0x0008, 0x6b3: 0x0008, 0x6b4: 0x0040, 0x6b5: 0x0008, + 0x6b6: 0x0008, 0x6b7: 0x0008, 0x6b8: 0x0008, 0x6b9: 0x0008, 0x6ba: 0x0040, 0x6bb: 0x0040, + 0x6bc: 0x3308, 0x6bd: 0x0008, 0x6be: 0x3008, 0x6bf: 0x3008, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x3008, 0x6c1: 0x3308, 0x6c2: 0x3308, 0x6c3: 0x3308, 0x6c4: 0x3308, 0x6c5: 0x3308, + 0x6c6: 0x0040, 0x6c7: 0x3308, 0x6c8: 0x3308, 0x6c9: 0x3008, 0x6ca: 0x0040, 0x6cb: 0x3008, + 0x6cc: 0x3008, 0x6cd: 0x3b08, 0x6ce: 0x0040, 0x6cf: 0x0040, 0x6d0: 0x0008, 0x6d1: 0x0040, + 0x6d2: 0x0040, 0x6d3: 0x0040, 0x6d4: 0x0040, 0x6d5: 0x0040, 0x6d6: 0x0040, 0x6d7: 0x0040, + 0x6d8: 0x0040, 0x6d9: 0x0040, 0x6da: 0x0040, 0x6db: 0x0040, 0x6dc: 0x0040, 0x6dd: 0x0040, + 0x6de: 0x0040, 0x6df: 0x0040, 0x6e0: 0x0008, 0x6e1: 0x0008, 0x6e2: 0x3308, 0x6e3: 0x3308, + 0x6e4: 0x0040, 0x6e5: 0x0040, 0x6e6: 0x0008, 0x6e7: 0x0008, 0x6e8: 0x0008, 0x6e9: 0x0008, + 0x6ea: 0x0008, 0x6eb: 0x0008, 0x6ec: 0x0008, 0x6ed: 0x0008, 0x6ee: 0x0008, 0x6ef: 0x0008, + 0x6f0: 0x0018, 0x6f1: 0x0018, 0x6f2: 0x0040, 0x6f3: 0x0040, 0x6f4: 0x0040, 0x6f5: 0x0040, + 0x6f6: 0x0040, 0x6f7: 0x0040, 0x6f8: 0x0040, 0x6f9: 0x0008, 0x6fa: 0x0040, 0x6fb: 0x0040, + 0x6fc: 0x0040, 0x6fd: 0x0040, 0x6fe: 0x0040, 0x6ff: 0x0040, + // Block 0x1c, offset 0x700 + 0x700: 0x0040, 0x701: 0x3308, 0x702: 0x3008, 0x703: 0x3008, 0x704: 0x0040, 0x705: 0x0008, + 0x706: 0x0008, 0x707: 0x0008, 0x708: 0x0008, 0x709: 0x0008, 0x70a: 0x0008, 0x70b: 0x0008, + 0x70c: 0x0008, 0x70d: 0x0040, 0x70e: 0x0040, 0x70f: 0x0008, 0x710: 0x0008, 0x711: 0x0040, + 0x712: 0x0040, 0x713: 0x0008, 0x714: 0x0008, 0x715: 0x0008, 0x716: 0x0008, 0x717: 0x0008, + 0x718: 0x0008, 0x719: 0x0008, 0x71a: 0x0008, 0x71b: 0x0008, 0x71c: 0x0008, 0x71d: 0x0008, + 0x71e: 0x0008, 0x71f: 0x0008, 0x720: 0x0008, 0x721: 0x0008, 0x722: 0x0008, 0x723: 0x0008, + 0x724: 0x0008, 0x725: 0x0008, 0x726: 0x0008, 0x727: 0x0008, 0x728: 0x0008, 0x729: 0x0040, + 0x72a: 0x0008, 0x72b: 0x0008, 0x72c: 0x0008, 0x72d: 0x0008, 0x72e: 0x0008, 0x72f: 0x0008, + 0x730: 0x0008, 0x731: 0x0040, 0x732: 0x0008, 0x733: 0x0008, 0x734: 0x0040, 0x735: 0x0008, + 0x736: 0x0008, 0x737: 0x0008, 0x738: 0x0008, 0x739: 0x0008, 0x73a: 0x0040, 0x73b: 0x0040, + 0x73c: 0x3308, 0x73d: 0x0008, 0x73e: 0x3008, 0x73f: 0x3308, + // Block 0x1d, offset 0x740 + 0x740: 0x3008, 0x741: 0x3308, 0x742: 0x3308, 0x743: 0x3308, 0x744: 0x3308, 0x745: 0x0040, + 0x746: 0x0040, 0x747: 0x3008, 0x748: 0x3008, 0x749: 0x0040, 0x74a: 0x0040, 0x74b: 0x3008, + 0x74c: 0x3008, 0x74d: 0x3b08, 0x74e: 0x0040, 0x74f: 0x0040, 0x750: 0x0040, 0x751: 0x0040, + 0x752: 0x0040, 0x753: 0x0040, 0x754: 0x0040, 0x755: 0x0040, 0x756: 0x3308, 0x757: 0x3008, + 0x758: 0x0040, 0x759: 0x0040, 0x75a: 0x0040, 0x75b: 0x0040, 0x75c: 0x0881, 0x75d: 0x08b9, + 0x75e: 0x0040, 0x75f: 0x0008, 0x760: 0x0008, 0x761: 0x0008, 0x762: 0x3308, 0x763: 0x3308, + 0x764: 0x0040, 0x765: 0x0040, 0x766: 0x0008, 0x767: 0x0008, 0x768: 0x0008, 0x769: 0x0008, + 0x76a: 0x0008, 0x76b: 0x0008, 0x76c: 0x0008, 0x76d: 0x0008, 0x76e: 0x0008, 0x76f: 0x0008, + 0x770: 0x0018, 0x771: 0x0008, 0x772: 0x0018, 0x773: 0x0018, 0x774: 0x0018, 0x775: 0x0018, + 0x776: 0x0018, 0x777: 0x0018, 0x778: 0x0040, 0x779: 0x0040, 0x77a: 0x0040, 0x77b: 0x0040, + 0x77c: 0x0040, 0x77d: 0x0040, 0x77e: 0x0040, 0x77f: 0x0040, + // Block 0x1e, offset 0x780 + 0x780: 0x0040, 0x781: 0x0040, 0x782: 0x3308, 0x783: 0x0008, 0x784: 0x0040, 0x785: 0x0008, + 0x786: 0x0008, 0x787: 0x0008, 0x788: 0x0008, 0x789: 0x0008, 0x78a: 0x0008, 0x78b: 0x0040, + 0x78c: 0x0040, 0x78d: 0x0040, 0x78e: 0x0008, 0x78f: 0x0008, 0x790: 0x0008, 0x791: 0x0040, + 0x792: 0x0008, 0x793: 0x0008, 0x794: 0x0008, 0x795: 0x0008, 0x796: 0x0040, 0x797: 0x0040, + 0x798: 0x0040, 0x799: 0x0008, 0x79a: 0x0008, 0x79b: 0x0040, 0x79c: 0x0008, 0x79d: 0x0040, + 0x79e: 0x0008, 0x79f: 0x0008, 0x7a0: 0x0040, 0x7a1: 0x0040, 0x7a2: 0x0040, 0x7a3: 0x0008, + 0x7a4: 0x0008, 0x7a5: 0x0040, 0x7a6: 0x0040, 0x7a7: 0x0040, 0x7a8: 0x0008, 0x7a9: 0x0008, + 0x7aa: 0x0008, 0x7ab: 0x0040, 0x7ac: 0x0040, 0x7ad: 0x0040, 0x7ae: 0x0008, 0x7af: 0x0008, + 0x7b0: 0x0008, 0x7b1: 0x0008, 0x7b2: 0x0008, 0x7b3: 0x0008, 0x7b4: 0x0008, 0x7b5: 0x0008, + 0x7b6: 0x0008, 0x7b7: 0x0008, 0x7b8: 0x0008, 0x7b9: 0x0008, 0x7ba: 0x0040, 0x7bb: 0x0040, + 0x7bc: 0x0040, 0x7bd: 0x0040, 0x7be: 0x3008, 0x7bf: 0x3008, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x3308, 0x7c1: 0x3008, 0x7c2: 0x3008, 0x7c3: 0x3008, 0x7c4: 0x3008, 0x7c5: 0x0040, + 0x7c6: 0x3308, 0x7c7: 0x3308, 0x7c8: 0x3308, 0x7c9: 0x0040, 0x7ca: 0x3308, 0x7cb: 0x3308, + 0x7cc: 0x3308, 0x7cd: 0x3b08, 0x7ce: 0x0040, 0x7cf: 0x0040, 0x7d0: 0x0040, 0x7d1: 0x0040, + 0x7d2: 0x0040, 0x7d3: 0x0040, 0x7d4: 0x0040, 0x7d5: 0x3308, 0x7d6: 0x3308, 0x7d7: 0x0040, + 0x7d8: 0x0008, 0x7d9: 0x0008, 0x7da: 0x0008, 0x7db: 0x0040, 0x7dc: 0x0040, 0x7dd: 0x0040, + 0x7de: 0x0040, 0x7df: 0x0040, 0x7e0: 0x0008, 0x7e1: 0x0008, 0x7e2: 0x3308, 0x7e3: 0x3308, + 0x7e4: 0x0040, 0x7e5: 0x0040, 0x7e6: 0x0008, 0x7e7: 0x0008, 0x7e8: 0x0008, 0x7e9: 0x0008, + 0x7ea: 0x0008, 0x7eb: 0x0008, 0x7ec: 0x0008, 0x7ed: 0x0008, 0x7ee: 0x0008, 0x7ef: 0x0008, + 0x7f0: 0x0040, 0x7f1: 0x0040, 0x7f2: 0x0040, 0x7f3: 0x0040, 0x7f4: 0x0040, 0x7f5: 0x0040, + 0x7f6: 0x0040, 0x7f7: 0x0040, 0x7f8: 0x0018, 0x7f9: 0x0018, 0x7fa: 0x0018, 0x7fb: 0x0018, + 0x7fc: 0x0018, 0x7fd: 0x0018, 0x7fe: 0x0018, 0x7ff: 0x0018, + // Block 0x20, offset 0x800 + 0x800: 0x0008, 0x801: 0x3308, 0x802: 0x3008, 0x803: 0x3008, 0x804: 0x0040, 0x805: 0x0008, + 0x806: 0x0008, 0x807: 0x0008, 0x808: 0x0008, 0x809: 0x0008, 0x80a: 0x0008, 0x80b: 0x0008, + 0x80c: 0x0008, 0x80d: 0x0040, 0x80e: 0x0008, 0x80f: 0x0008, 0x810: 0x0008, 0x811: 0x0040, + 0x812: 0x0008, 0x813: 0x0008, 0x814: 0x0008, 0x815: 0x0008, 0x816: 0x0008, 0x817: 0x0008, + 0x818: 0x0008, 0x819: 0x0008, 0x81a: 0x0008, 0x81b: 0x0008, 0x81c: 0x0008, 0x81d: 0x0008, + 0x81e: 0x0008, 0x81f: 0x0008, 0x820: 0x0008, 0x821: 0x0008, 0x822: 0x0008, 0x823: 0x0008, + 0x824: 0x0008, 0x825: 0x0008, 0x826: 0x0008, 0x827: 0x0008, 0x828: 0x0008, 0x829: 0x0040, + 0x82a: 0x0008, 0x82b: 0x0008, 0x82c: 0x0008, 0x82d: 0x0008, 0x82e: 0x0008, 0x82f: 0x0008, + 0x830: 0x0008, 0x831: 0x0008, 0x832: 0x0008, 0x833: 0x0008, 0x834: 0x0040, 0x835: 0x0008, + 0x836: 0x0008, 0x837: 0x0008, 0x838: 0x0008, 0x839: 0x0008, 0x83a: 0x0040, 0x83b: 0x0040, + 0x83c: 0x3308, 0x83d: 0x0008, 0x83e: 0x3008, 0x83f: 0x3308, + // Block 0x21, offset 0x840 + 0x840: 0x3008, 0x841: 0x3008, 0x842: 0x3008, 0x843: 0x3008, 0x844: 0x3008, 0x845: 0x0040, + 0x846: 0x3308, 0x847: 0x3008, 0x848: 0x3008, 0x849: 0x0040, 0x84a: 0x3008, 0x84b: 0x3008, + 0x84c: 0x3308, 0x84d: 0x3b08, 0x84e: 0x0040, 0x84f: 0x0040, 0x850: 0x0040, 0x851: 0x0040, + 0x852: 0x0040, 0x853: 0x0040, 0x854: 0x0040, 0x855: 0x3008, 0x856: 0x3008, 0x857: 0x0040, + 0x858: 0x0040, 0x859: 0x0040, 0x85a: 0x0040, 0x85b: 0x0040, 0x85c: 0x0040, 0x85d: 0x0040, + 0x85e: 0x0008, 0x85f: 0x0040, 0x860: 0x0008, 0x861: 0x0008, 0x862: 0x3308, 0x863: 0x3308, + 0x864: 0x0040, 0x865: 0x0040, 0x866: 0x0008, 0x867: 0x0008, 0x868: 0x0008, 0x869: 0x0008, + 0x86a: 0x0008, 0x86b: 0x0008, 0x86c: 0x0008, 0x86d: 0x0008, 0x86e: 0x0008, 0x86f: 0x0008, + 0x870: 0x0040, 0x871: 0x0008, 0x872: 0x0008, 0x873: 0x0040, 0x874: 0x0040, 0x875: 0x0040, + 0x876: 0x0040, 0x877: 0x0040, 0x878: 0x0040, 0x879: 0x0040, 0x87a: 0x0040, 0x87b: 0x0040, + 0x87c: 0x0040, 0x87d: 0x0040, 0x87e: 0x0040, 0x87f: 0x0040, + // Block 0x22, offset 0x880 + 0x880: 0x3008, 0x881: 0x3308, 0x882: 0x3308, 0x883: 0x3308, 0x884: 0x3308, 0x885: 0x0040, + 0x886: 0x3008, 0x887: 0x3008, 0x888: 0x3008, 0x889: 0x0040, 0x88a: 0x3008, 0x88b: 0x3008, + 0x88c: 0x3008, 0x88d: 0x3b08, 0x88e: 0x0008, 0x88f: 0x0018, 0x890: 0x0040, 0x891: 0x0040, + 0x892: 0x0040, 0x893: 0x0040, 0x894: 0x0008, 0x895: 0x0008, 0x896: 0x0008, 0x897: 0x3008, + 0x898: 0x0018, 0x899: 0x0018, 0x89a: 0x0018, 0x89b: 0x0018, 0x89c: 0x0018, 0x89d: 0x0018, + 0x89e: 0x0018, 0x89f: 0x0008, 0x8a0: 0x0008, 0x8a1: 0x0008, 0x8a2: 0x3308, 0x8a3: 0x3308, + 0x8a4: 0x0040, 0x8a5: 0x0040, 0x8a6: 0x0008, 0x8a7: 0x0008, 0x8a8: 0x0008, 0x8a9: 0x0008, + 0x8aa: 0x0008, 0x8ab: 0x0008, 0x8ac: 0x0008, 0x8ad: 0x0008, 0x8ae: 0x0008, 0x8af: 0x0008, + 0x8b0: 0x0018, 0x8b1: 0x0018, 0x8b2: 0x0018, 0x8b3: 0x0018, 0x8b4: 0x0018, 0x8b5: 0x0018, + 0x8b6: 0x0018, 0x8b7: 0x0018, 0x8b8: 0x0018, 0x8b9: 0x0018, 0x8ba: 0x0008, 0x8bb: 0x0008, + 0x8bc: 0x0008, 0x8bd: 0x0008, 0x8be: 0x0008, 0x8bf: 0x0008, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x0040, 0x8c1: 0x0008, 0x8c2: 0x0008, 0x8c3: 0x0040, 0x8c4: 0x0008, 0x8c5: 0x0040, + 0x8c6: 0x0040, 0x8c7: 0x0008, 0x8c8: 0x0008, 0x8c9: 0x0040, 0x8ca: 0x0008, 0x8cb: 0x0040, + 0x8cc: 0x0040, 0x8cd: 0x0008, 0x8ce: 0x0040, 0x8cf: 0x0040, 0x8d0: 0x0040, 0x8d1: 0x0040, + 0x8d2: 0x0040, 0x8d3: 0x0040, 0x8d4: 0x0008, 0x8d5: 0x0008, 0x8d6: 0x0008, 0x8d7: 0x0008, + 0x8d8: 0x0040, 0x8d9: 0x0008, 0x8da: 0x0008, 0x8db: 0x0008, 0x8dc: 0x0008, 0x8dd: 0x0008, + 0x8de: 0x0008, 0x8df: 0x0008, 0x8e0: 0x0040, 0x8e1: 0x0008, 0x8e2: 0x0008, 0x8e3: 0x0008, + 0x8e4: 0x0040, 0x8e5: 0x0008, 0x8e6: 0x0040, 0x8e7: 0x0008, 0x8e8: 0x0040, 0x8e9: 0x0040, + 0x8ea: 0x0008, 0x8eb: 0x0008, 0x8ec: 0x0040, 0x8ed: 0x0008, 0x8ee: 0x0008, 0x8ef: 0x0008, + 0x8f0: 0x0008, 0x8f1: 0x3308, 0x8f2: 0x0008, 0x8f3: 0x0929, 0x8f4: 0x3308, 0x8f5: 0x3308, + 0x8f6: 0x3308, 0x8f7: 0x3308, 0x8f8: 0x3308, 0x8f9: 0x3308, 0x8fa: 0x0040, 0x8fb: 0x3308, + 0x8fc: 0x3308, 0x8fd: 0x0008, 0x8fe: 0x0040, 0x8ff: 0x0040, + // Block 0x24, offset 0x900 + 0x900: 0x0008, 0x901: 0x0008, 0x902: 0x0008, 0x903: 0x09d1, 0x904: 0x0008, 0x905: 0x0008, + 0x906: 0x0008, 0x907: 0x0008, 0x908: 0x0040, 0x909: 0x0008, 0x90a: 0x0008, 0x90b: 0x0008, + 0x90c: 0x0008, 0x90d: 0x0a09, 0x90e: 0x0008, 0x90f: 0x0008, 0x910: 0x0008, 0x911: 0x0008, + 0x912: 0x0a41, 0x913: 0x0008, 0x914: 0x0008, 0x915: 0x0008, 0x916: 0x0008, 0x917: 0x0a79, + 0x918: 0x0008, 0x919: 0x0008, 0x91a: 0x0008, 0x91b: 0x0008, 0x91c: 0x0ab1, 0x91d: 0x0008, + 0x91e: 0x0008, 0x91f: 0x0008, 0x920: 0x0008, 0x921: 0x0008, 0x922: 0x0008, 0x923: 0x0008, + 0x924: 0x0008, 0x925: 0x0008, 0x926: 0x0008, 0x927: 0x0008, 0x928: 0x0008, 0x929: 0x0ae9, + 0x92a: 0x0008, 0x92b: 0x0008, 0x92c: 0x0008, 0x92d: 0x0040, 0x92e: 0x0040, 0x92f: 0x0040, + 0x930: 0x0040, 0x931: 0x3308, 0x932: 0x3308, 0x933: 0x0b21, 0x934: 0x3308, 0x935: 0x0b59, + 0x936: 0x0b91, 0x937: 0x0bc9, 0x938: 0x0c19, 0x939: 0x0c51, 0x93a: 0x3308, 0x93b: 0x3308, + 0x93c: 0x3308, 0x93d: 0x3308, 0x93e: 0x3308, 0x93f: 0x3008, + // Block 0x25, offset 0x940 + 0x940: 0x3308, 0x941: 0x0ca1, 0x942: 0x3308, 0x943: 0x3308, 0x944: 0x3b08, 0x945: 0x0018, + 0x946: 0x3308, 0x947: 0x3308, 0x948: 0x0008, 0x949: 0x0008, 0x94a: 0x0008, 0x94b: 0x0008, + 0x94c: 0x0008, 0x94d: 0x3308, 0x94e: 0x3308, 0x94f: 0x3308, 0x950: 0x3308, 0x951: 0x3308, + 0x952: 0x3308, 0x953: 0x0cd9, 0x954: 0x3308, 0x955: 0x3308, 0x956: 0x3308, 0x957: 0x3308, + 0x958: 0x0040, 0x959: 0x3308, 0x95a: 0x3308, 0x95b: 0x3308, 0x95c: 0x3308, 0x95d: 0x0d11, + 0x95e: 0x3308, 0x95f: 0x3308, 0x960: 0x3308, 0x961: 0x3308, 0x962: 0x0d49, 0x963: 0x3308, + 0x964: 0x3308, 0x965: 0x3308, 0x966: 0x3308, 0x967: 0x0d81, 0x968: 0x3308, 0x969: 0x3308, + 0x96a: 0x3308, 0x96b: 0x3308, 0x96c: 0x0db9, 0x96d: 0x3308, 0x96e: 0x3308, 0x96f: 0x3308, + 0x970: 0x3308, 0x971: 0x3308, 0x972: 0x3308, 0x973: 0x3308, 0x974: 0x3308, 0x975: 0x3308, + 0x976: 0x3308, 0x977: 0x3308, 0x978: 0x3308, 0x979: 0x0df1, 0x97a: 0x3308, 0x97b: 0x3308, + 0x97c: 0x3308, 0x97d: 0x0040, 0x97e: 0x0018, 0x97f: 0x0018, + // Block 0x26, offset 0x980 + 0x980: 0x0008, 0x981: 0x0008, 0x982: 0x0008, 0x983: 0x0008, 0x984: 0x0008, 0x985: 0x0008, + 0x986: 0x0008, 0x987: 0x0008, 0x988: 0x0008, 0x989: 0x0008, 0x98a: 0x0008, 0x98b: 0x0008, + 0x98c: 0x0008, 0x98d: 0x0008, 0x98e: 0x0008, 0x98f: 0x0008, 0x990: 0x0008, 0x991: 0x0008, + 0x992: 0x0008, 0x993: 0x0008, 0x994: 0x0008, 0x995: 0x0008, 0x996: 0x0008, 0x997: 0x0008, + 0x998: 0x0008, 0x999: 0x0008, 0x99a: 0x0008, 0x99b: 0x0008, 0x99c: 0x0008, 0x99d: 0x0008, + 0x99e: 0x0008, 0x99f: 0x0008, 0x9a0: 0x0008, 0x9a1: 0x0008, 0x9a2: 0x0008, 0x9a3: 0x0008, + 0x9a4: 0x0008, 0x9a5: 0x0008, 0x9a6: 0x0008, 0x9a7: 0x0008, 0x9a8: 0x0008, 0x9a9: 0x0008, + 0x9aa: 0x0008, 0x9ab: 0x0008, 0x9ac: 0x0039, 0x9ad: 0x0ed1, 0x9ae: 0x0ee9, 0x9af: 0x0008, + 0x9b0: 0x0ef9, 0x9b1: 0x0f09, 0x9b2: 0x0f19, 0x9b3: 0x0f31, 0x9b4: 0x0249, 0x9b5: 0x0f41, + 0x9b6: 0x0259, 0x9b7: 0x0f51, 0x9b8: 0x0359, 0x9b9: 0x0f61, 0x9ba: 0x0f71, 0x9bb: 0x0008, + 0x9bc: 0x00d9, 0x9bd: 0x0f81, 0x9be: 0x0f99, 0x9bf: 0x0269, + // Block 0x27, offset 0x9c0 + 0x9c0: 0x0fa9, 0x9c1: 0x0fb9, 0x9c2: 0x0279, 0x9c3: 0x0039, 0x9c4: 0x0fc9, 0x9c5: 0x0fe1, + 0x9c6: 0x059d, 0x9c7: 0x0ee9, 0x9c8: 0x0ef9, 0x9c9: 0x0f09, 0x9ca: 0x0ff9, 0x9cb: 0x1011, + 0x9cc: 0x1029, 0x9cd: 0x0f31, 0x9ce: 0x0008, 0x9cf: 0x0f51, 0x9d0: 0x0f61, 0x9d1: 0x1041, + 0x9d2: 0x00d9, 0x9d3: 0x1059, 0x9d4: 0x05b5, 0x9d5: 0x05b5, 0x9d6: 0x0f99, 0x9d7: 0x0fa9, + 0x9d8: 0x0fb9, 0x9d9: 0x059d, 0x9da: 0x1071, 0x9db: 0x1089, 0x9dc: 0x05cd, 0x9dd: 0x1099, + 0x9de: 0x10b1, 0x9df: 0x10c9, 0x9e0: 0x10e1, 0x9e1: 0x10f9, 0x9e2: 0x0f41, 0x9e3: 0x0269, + 0x9e4: 0x0fb9, 0x9e5: 0x1089, 0x9e6: 0x1099, 0x9e7: 0x10b1, 0x9e8: 0x1111, 0x9e9: 0x10e1, + 0x9ea: 0x10f9, 0x9eb: 0x0008, 0x9ec: 0x0008, 0x9ed: 0x0008, 0x9ee: 0x0008, 0x9ef: 0x0008, + 0x9f0: 0x0008, 0x9f1: 0x0008, 0x9f2: 0x0008, 0x9f3: 0x0008, 0x9f4: 0x0008, 0x9f5: 0x0008, + 0x9f6: 0x0008, 0x9f7: 0x0008, 0x9f8: 0x1129, 0x9f9: 0x0008, 0x9fa: 0x0008, 0x9fb: 0x0008, + 0x9fc: 0x0008, 0x9fd: 0x0008, 0x9fe: 0x0008, 0x9ff: 0x0008, + // Block 0x28, offset 0xa00 + 0xa00: 0x0008, 0xa01: 0x0008, 0xa02: 0x0008, 0xa03: 0x0008, 0xa04: 0x0008, 0xa05: 0x0008, + 0xa06: 0x0008, 0xa07: 0x0008, 0xa08: 0x0008, 0xa09: 0x0008, 0xa0a: 0x0008, 0xa0b: 0x0008, + 0xa0c: 0x0008, 0xa0d: 0x0008, 0xa0e: 0x0008, 0xa0f: 0x0008, 0xa10: 0x0008, 0xa11: 0x0008, + 0xa12: 0x0008, 0xa13: 0x0008, 0xa14: 0x0008, 0xa15: 0x0008, 0xa16: 0x0008, 0xa17: 0x0008, + 0xa18: 0x0008, 0xa19: 0x0008, 0xa1a: 0x0008, 0xa1b: 0x1141, 0xa1c: 0x1159, 0xa1d: 0x1169, + 0xa1e: 0x1181, 0xa1f: 0x1029, 0xa20: 0x1199, 0xa21: 0x11a9, 0xa22: 0x11c1, 0xa23: 0x11d9, + 0xa24: 0x11f1, 0xa25: 0x1209, 0xa26: 0x1221, 0xa27: 0x05e5, 0xa28: 0x1239, 0xa29: 0x1251, + 0xa2a: 0xe17d, 0xa2b: 0x1269, 0xa2c: 0x1281, 0xa2d: 0x1299, 0xa2e: 0x12b1, 0xa2f: 0x12c9, + 0xa30: 0x12e1, 0xa31: 0x12f9, 0xa32: 0x1311, 0xa33: 0x1329, 0xa34: 0x1341, 0xa35: 0x1359, + 0xa36: 0x1371, 0xa37: 0x1389, 0xa38: 0x05fd, 0xa39: 0x13a1, 0xa3a: 0x13b9, 0xa3b: 0x13d1, + 0xa3c: 0x13e1, 0xa3d: 0x13f9, 0xa3e: 0x1411, 0xa3f: 0x1429, + // Block 0x29, offset 0xa40 + 0xa40: 0xe00d, 0xa41: 0x0008, 0xa42: 0xe00d, 0xa43: 0x0008, 0xa44: 0xe00d, 0xa45: 0x0008, + 0xa46: 0xe00d, 0xa47: 0x0008, 0xa48: 0xe00d, 0xa49: 0x0008, 0xa4a: 0xe00d, 0xa4b: 0x0008, + 0xa4c: 0xe00d, 0xa4d: 0x0008, 0xa4e: 0xe00d, 0xa4f: 0x0008, 0xa50: 0xe00d, 0xa51: 0x0008, + 0xa52: 0xe00d, 0xa53: 0x0008, 0xa54: 0xe00d, 0xa55: 0x0008, 0xa56: 0xe00d, 0xa57: 0x0008, + 0xa58: 0xe00d, 0xa59: 0x0008, 0xa5a: 0xe00d, 0xa5b: 0x0008, 0xa5c: 0xe00d, 0xa5d: 0x0008, + 0xa5e: 0xe00d, 0xa5f: 0x0008, 0xa60: 0xe00d, 0xa61: 0x0008, 0xa62: 0xe00d, 0xa63: 0x0008, + 0xa64: 0xe00d, 0xa65: 0x0008, 0xa66: 0xe00d, 0xa67: 0x0008, 0xa68: 0xe00d, 0xa69: 0x0008, + 0xa6a: 0xe00d, 0xa6b: 0x0008, 0xa6c: 0xe00d, 0xa6d: 0x0008, 0xa6e: 0xe00d, 0xa6f: 0x0008, + 0xa70: 0xe00d, 0xa71: 0x0008, 0xa72: 0xe00d, 0xa73: 0x0008, 0xa74: 0xe00d, 0xa75: 0x0008, + 0xa76: 0xe00d, 0xa77: 0x0008, 0xa78: 0xe00d, 0xa79: 0x0008, 0xa7a: 0xe00d, 0xa7b: 0x0008, + 0xa7c: 0xe00d, 0xa7d: 0x0008, 0xa7e: 0xe00d, 0xa7f: 0x0008, + // Block 0x2a, offset 0xa80 + 0xa80: 0xe00d, 0xa81: 0x0008, 0xa82: 0xe00d, 0xa83: 0x0008, 0xa84: 0xe00d, 0xa85: 0x0008, + 0xa86: 0xe00d, 0xa87: 0x0008, 0xa88: 0xe00d, 0xa89: 0x0008, 0xa8a: 0xe00d, 0xa8b: 0x0008, + 0xa8c: 0xe00d, 0xa8d: 0x0008, 0xa8e: 0xe00d, 0xa8f: 0x0008, 0xa90: 0xe00d, 0xa91: 0x0008, + 0xa92: 0xe00d, 0xa93: 0x0008, 0xa94: 0xe00d, 0xa95: 0x0008, 0xa96: 0x0008, 0xa97: 0x0008, + 0xa98: 0x0008, 0xa99: 0x0008, 0xa9a: 0x0615, 0xa9b: 0x0635, 0xa9c: 0x0008, 0xa9d: 0x0008, + 0xa9e: 0x1441, 0xa9f: 0x0008, 0xaa0: 0xe00d, 0xaa1: 0x0008, 0xaa2: 0xe00d, 0xaa3: 0x0008, + 0xaa4: 0xe00d, 0xaa5: 0x0008, 0xaa6: 0xe00d, 0xaa7: 0x0008, 0xaa8: 0xe00d, 0xaa9: 0x0008, + 0xaaa: 0xe00d, 0xaab: 0x0008, 0xaac: 0xe00d, 0xaad: 0x0008, 0xaae: 0xe00d, 0xaaf: 0x0008, + 0xab0: 0xe00d, 0xab1: 0x0008, 0xab2: 0xe00d, 0xab3: 0x0008, 0xab4: 0xe00d, 0xab5: 0x0008, + 0xab6: 0xe00d, 0xab7: 0x0008, 0xab8: 0xe00d, 0xab9: 0x0008, 0xaba: 0xe00d, 0xabb: 0x0008, + 0xabc: 0xe00d, 0xabd: 0x0008, 0xabe: 0xe00d, 0xabf: 0x0008, + // Block 0x2b, offset 0xac0 + 0xac0: 0x0008, 0xac1: 0x0008, 0xac2: 0x0008, 0xac3: 0x0008, 0xac4: 0x0008, 0xac5: 0x0008, + 0xac6: 0x0040, 0xac7: 0x0040, 0xac8: 0xe045, 0xac9: 0xe045, 0xaca: 0xe045, 0xacb: 0xe045, + 0xacc: 0xe045, 0xacd: 0xe045, 0xace: 0x0040, 0xacf: 0x0040, 0xad0: 0x0008, 0xad1: 0x0008, + 0xad2: 0x0008, 0xad3: 0x0008, 0xad4: 0x0008, 0xad5: 0x0008, 0xad6: 0x0008, 0xad7: 0x0008, + 0xad8: 0x0040, 0xad9: 0xe045, 0xada: 0x0040, 0xadb: 0xe045, 0xadc: 0x0040, 0xadd: 0xe045, + 0xade: 0x0040, 0xadf: 0xe045, 0xae0: 0x0008, 0xae1: 0x0008, 0xae2: 0x0008, 0xae3: 0x0008, + 0xae4: 0x0008, 0xae5: 0x0008, 0xae6: 0x0008, 0xae7: 0x0008, 0xae8: 0xe045, 0xae9: 0xe045, + 0xaea: 0xe045, 0xaeb: 0xe045, 0xaec: 0xe045, 0xaed: 0xe045, 0xaee: 0xe045, 0xaef: 0xe045, + 0xaf0: 0x0008, 0xaf1: 0x1459, 0xaf2: 0x0008, 0xaf3: 0x1471, 0xaf4: 0x0008, 0xaf5: 0x1489, + 0xaf6: 0x0008, 0xaf7: 0x14a1, 0xaf8: 0x0008, 0xaf9: 0x14b9, 0xafa: 0x0008, 0xafb: 0x14d1, + 0xafc: 0x0008, 0xafd: 0x14e9, 0xafe: 0x0040, 0xaff: 0x0040, + // Block 0x2c, offset 0xb00 + 0xb00: 0x1501, 0xb01: 0x1531, 0xb02: 0x1561, 0xb03: 0x1591, 0xb04: 0x15c1, 0xb05: 0x15f1, + 0xb06: 0x1621, 0xb07: 0x1651, 0xb08: 0x1501, 0xb09: 0x1531, 0xb0a: 0x1561, 0xb0b: 0x1591, + 0xb0c: 0x15c1, 0xb0d: 0x15f1, 0xb0e: 0x1621, 0xb0f: 0x1651, 0xb10: 0x1681, 0xb11: 0x16b1, + 0xb12: 0x16e1, 0xb13: 0x1711, 0xb14: 0x1741, 0xb15: 0x1771, 0xb16: 0x17a1, 0xb17: 0x17d1, + 0xb18: 0x1681, 0xb19: 0x16b1, 0xb1a: 0x16e1, 0xb1b: 0x1711, 0xb1c: 0x1741, 0xb1d: 0x1771, + 0xb1e: 0x17a1, 0xb1f: 0x17d1, 0xb20: 0x1801, 0xb21: 0x1831, 0xb22: 0x1861, 0xb23: 0x1891, + 0xb24: 0x18c1, 0xb25: 0x18f1, 0xb26: 0x1921, 0xb27: 0x1951, 0xb28: 0x1801, 0xb29: 0x1831, + 0xb2a: 0x1861, 0xb2b: 0x1891, 0xb2c: 0x18c1, 0xb2d: 0x18f1, 0xb2e: 0x1921, 0xb2f: 0x1951, + 0xb30: 0x0008, 0xb31: 0x0008, 0xb32: 0x1981, 0xb33: 0x19b1, 0xb34: 0x19d9, 0xb35: 0x0040, + 0xb36: 0x0008, 0xb37: 0x1a01, 0xb38: 0xe045, 0xb39: 0xe045, 0xb3a: 0x064d, 0xb3b: 0x1459, + 0xb3c: 0x19b1, 0xb3d: 0x0666, 0xb3e: 0x1a31, 0xb3f: 0x0686, + // Block 0x2d, offset 0xb40 + 0xb40: 0x06a6, 0xb41: 0x1a4a, 0xb42: 0x1a79, 0xb43: 0x1aa9, 0xb44: 0x1ad1, 0xb45: 0x0040, + 0xb46: 0x0008, 0xb47: 0x1af9, 0xb48: 0x06c5, 0xb49: 0x1471, 0xb4a: 0x06dd, 0xb4b: 0x1489, + 0xb4c: 0x1aa9, 0xb4d: 0x1b2a, 0xb4e: 0x1b5a, 0xb4f: 0x1b8a, 0xb50: 0x0008, 0xb51: 0x0008, + 0xb52: 0x0008, 0xb53: 0x1bb9, 0xb54: 0x0040, 0xb55: 0x0040, 0xb56: 0x0008, 0xb57: 0x0008, + 0xb58: 0xe045, 0xb59: 0xe045, 0xb5a: 0x06f5, 0xb5b: 0x14a1, 0xb5c: 0x0040, 0xb5d: 0x1bd2, + 0xb5e: 0x1c02, 0xb5f: 0x1c32, 0xb60: 0x0008, 0xb61: 0x0008, 0xb62: 0x0008, 0xb63: 0x1c61, + 0xb64: 0x0008, 0xb65: 0x0008, 0xb66: 0x0008, 0xb67: 0x0008, 0xb68: 0xe045, 0xb69: 0xe045, + 0xb6a: 0x070d, 0xb6b: 0x14d1, 0xb6c: 0xe04d, 0xb6d: 0x1c7a, 0xb6e: 0x03d2, 0xb6f: 0x1caa, + 0xb70: 0x0040, 0xb71: 0x0040, 0xb72: 0x1cb9, 0xb73: 0x1ce9, 0xb74: 0x1d11, 0xb75: 0x0040, + 0xb76: 0x0008, 0xb77: 0x1d39, 0xb78: 0x0725, 0xb79: 0x14b9, 0xb7a: 0x0515, 0xb7b: 0x14e9, + 0xb7c: 0x1ce9, 0xb7d: 0x073e, 0xb7e: 0x075e, 0xb7f: 0x0040, + // Block 0x2e, offset 0xb80 + 0xb80: 0x000a, 0xb81: 0x000a, 0xb82: 0x000a, 0xb83: 0x000a, 0xb84: 0x000a, 0xb85: 0x000a, + 0xb86: 0x000a, 0xb87: 0x000a, 0xb88: 0x000a, 0xb89: 0x000a, 0xb8a: 0x000a, 0xb8b: 0x03c0, + 0xb8c: 0x0003, 0xb8d: 0x0003, 0xb8e: 0x0340, 0xb8f: 0x0b40, 0xb90: 0x0018, 0xb91: 0xe00d, + 0xb92: 0x0018, 0xb93: 0x0018, 0xb94: 0x0018, 0xb95: 0x0018, 0xb96: 0x0018, 0xb97: 0x077e, + 0xb98: 0x0018, 0xb99: 0x0018, 0xb9a: 0x0018, 0xb9b: 0x0018, 0xb9c: 0x0018, 0xb9d: 0x0018, + 0xb9e: 0x0018, 0xb9f: 0x0018, 0xba0: 0x0018, 0xba1: 0x0018, 0xba2: 0x0018, 0xba3: 0x0018, + 0xba4: 0x0040, 0xba5: 0x0040, 0xba6: 0x0040, 0xba7: 0x0018, 0xba8: 0x0040, 0xba9: 0x0040, + 0xbaa: 0x0340, 0xbab: 0x0340, 0xbac: 0x0340, 0xbad: 0x0340, 0xbae: 0x0340, 0xbaf: 0x000a, + 0xbb0: 0x0018, 0xbb1: 0x0018, 0xbb2: 0x0018, 0xbb3: 0x1d69, 0xbb4: 0x1da1, 0xbb5: 0x0018, + 0xbb6: 0x1df1, 0xbb7: 0x1e29, 0xbb8: 0x0018, 0xbb9: 0x0018, 0xbba: 0x0018, 0xbbb: 0x0018, + 0xbbc: 0x1e7a, 0xbbd: 0x0018, 0xbbe: 0x079e, 0xbbf: 0x0018, + // Block 0x2f, offset 0xbc0 + 0xbc0: 0x0018, 0xbc1: 0x0018, 0xbc2: 0x0018, 0xbc3: 0x0018, 0xbc4: 0x0018, 0xbc5: 0x0018, + 0xbc6: 0x0018, 0xbc7: 0x1e92, 0xbc8: 0x1eaa, 0xbc9: 0x1ec2, 0xbca: 0x0018, 0xbcb: 0x0018, + 0xbcc: 0x0018, 0xbcd: 0x0018, 0xbce: 0x0018, 0xbcf: 0x0018, 0xbd0: 0x0018, 0xbd1: 0x0018, + 0xbd2: 0x0018, 0xbd3: 0x0018, 0xbd4: 0x0018, 0xbd5: 0x0018, 0xbd6: 0x0018, 0xbd7: 0x1ed9, + 0xbd8: 0x0018, 0xbd9: 0x0018, 0xbda: 0x0018, 0xbdb: 0x0018, 0xbdc: 0x0018, 0xbdd: 0x0018, + 0xbde: 0x0018, 0xbdf: 0x000a, 0xbe0: 0x03c0, 0xbe1: 0x0340, 0xbe2: 0x0340, 0xbe3: 0x0340, + 0xbe4: 0x03c0, 0xbe5: 0x0040, 0xbe6: 0x0040, 0xbe7: 0x0040, 0xbe8: 0x0040, 0xbe9: 0x0040, + 0xbea: 0x0340, 0xbeb: 0x0340, 0xbec: 0x0340, 0xbed: 0x0340, 0xbee: 0x0340, 0xbef: 0x0340, + 0xbf0: 0x1f41, 0xbf1: 0x0f41, 0xbf2: 0x0040, 0xbf3: 0x0040, 0xbf4: 0x1f51, 0xbf5: 0x1f61, + 0xbf6: 0x1f71, 0xbf7: 0x1f81, 0xbf8: 0x1f91, 0xbf9: 0x1fa1, 0xbfa: 0x1fb2, 0xbfb: 0x07bd, + 0xbfc: 0x1fc2, 0xbfd: 0x1fd2, 0xbfe: 0x1fe2, 0xbff: 0x0f71, + // Block 0x30, offset 0xc00 + 0xc00: 0x1f41, 0xc01: 0x00c9, 0xc02: 0x0069, 0xc03: 0x0079, 0xc04: 0x1f51, 0xc05: 0x1f61, + 0xc06: 0x1f71, 0xc07: 0x1f81, 0xc08: 0x1f91, 0xc09: 0x1fa1, 0xc0a: 0x1fb2, 0xc0b: 0x07d5, + 0xc0c: 0x1fc2, 0xc0d: 0x1fd2, 0xc0e: 0x1fe2, 0xc0f: 0x0040, 0xc10: 0x0039, 0xc11: 0x0f09, + 0xc12: 0x00d9, 0xc13: 0x0369, 0xc14: 0x0ff9, 0xc15: 0x0249, 0xc16: 0x0f51, 0xc17: 0x0359, + 0xc18: 0x0f61, 0xc19: 0x0f71, 0xc1a: 0x0f99, 0xc1b: 0x01d9, 0xc1c: 0x0fa9, 0xc1d: 0x0040, + 0xc1e: 0x0040, 0xc1f: 0x0040, 0xc20: 0x0018, 0xc21: 0x0018, 0xc22: 0x0018, 0xc23: 0x0018, + 0xc24: 0x0018, 0xc25: 0x0018, 0xc26: 0x0018, 0xc27: 0x0018, 0xc28: 0x1ff1, 0xc29: 0x0018, + 0xc2a: 0x0018, 0xc2b: 0x0018, 0xc2c: 0x0018, 0xc2d: 0x0018, 0xc2e: 0x0018, 0xc2f: 0x0018, + 0xc30: 0x0018, 0xc31: 0x0018, 0xc32: 0x0018, 0xc33: 0x0018, 0xc34: 0x0018, 0xc35: 0x0018, + 0xc36: 0x0018, 0xc37: 0x0018, 0xc38: 0x0018, 0xc39: 0x0018, 0xc3a: 0x0018, 0xc3b: 0x0018, + 0xc3c: 0x0018, 0xc3d: 0x0018, 0xc3e: 0x0018, 0xc3f: 0x0040, + // Block 0x31, offset 0xc40 + 0xc40: 0x07ee, 0xc41: 0x080e, 0xc42: 0x1159, 0xc43: 0x082d, 0xc44: 0x0018, 0xc45: 0x084e, + 0xc46: 0x086e, 0xc47: 0x1011, 0xc48: 0x0018, 0xc49: 0x088d, 0xc4a: 0x0f31, 0xc4b: 0x0249, + 0xc4c: 0x0249, 0xc4d: 0x0249, 0xc4e: 0x0249, 0xc4f: 0x2009, 0xc50: 0x0f41, 0xc51: 0x0f41, + 0xc52: 0x0359, 0xc53: 0x0359, 0xc54: 0x0018, 0xc55: 0x0f71, 0xc56: 0x2021, 0xc57: 0x0018, + 0xc58: 0x0018, 0xc59: 0x0f99, 0xc5a: 0x2039, 0xc5b: 0x0269, 0xc5c: 0x0269, 0xc5d: 0x0269, + 0xc5e: 0x0018, 0xc5f: 0x0018, 0xc60: 0x2049, 0xc61: 0x08ad, 0xc62: 0x2061, 0xc63: 0x0018, + 0xc64: 0x13d1, 0xc65: 0x0018, 0xc66: 0x2079, 0xc67: 0x0018, 0xc68: 0x13d1, 0xc69: 0x0018, + 0xc6a: 0x0f51, 0xc6b: 0x2091, 0xc6c: 0x0ee9, 0xc6d: 0x1159, 0xc6e: 0x0018, 0xc6f: 0x0f09, + 0xc70: 0x0f09, 0xc71: 0x1199, 0xc72: 0x0040, 0xc73: 0x0f61, 0xc74: 0x00d9, 0xc75: 0x20a9, + 0xc76: 0x20c1, 0xc77: 0x20d9, 0xc78: 0x20f1, 0xc79: 0x0f41, 0xc7a: 0x0018, 0xc7b: 0x08cd, + 0xc7c: 0x2109, 0xc7d: 0x10b1, 0xc7e: 0x10b1, 0xc7f: 0x2109, + // Block 0x32, offset 0xc80 + 0xc80: 0x08ed, 0xc81: 0x0018, 0xc82: 0x0018, 0xc83: 0x0018, 0xc84: 0x0018, 0xc85: 0x0ef9, + 0xc86: 0x0ef9, 0xc87: 0x0f09, 0xc88: 0x0f41, 0xc89: 0x0259, 0xc8a: 0x0018, 0xc8b: 0x0018, + 0xc8c: 0x0018, 0xc8d: 0x0018, 0xc8e: 0x0008, 0xc8f: 0x0018, 0xc90: 0x2121, 0xc91: 0x2151, + 0xc92: 0x2181, 0xc93: 0x21b9, 0xc94: 0x21e9, 0xc95: 0x2219, 0xc96: 0x2249, 0xc97: 0x2279, + 0xc98: 0x22a9, 0xc99: 0x22d9, 0xc9a: 0x2309, 0xc9b: 0x2339, 0xc9c: 0x2369, 0xc9d: 0x2399, + 0xc9e: 0x23c9, 0xc9f: 0x23f9, 0xca0: 0x0f41, 0xca1: 0x2421, 0xca2: 0x0905, 0xca3: 0x2439, + 0xca4: 0x1089, 0xca5: 0x2451, 0xca6: 0x0925, 0xca7: 0x2469, 0xca8: 0x2491, 0xca9: 0x0369, + 0xcaa: 0x24a9, 0xcab: 0x0945, 0xcac: 0x0359, 0xcad: 0x1159, 0xcae: 0x0ef9, 0xcaf: 0x0f61, + 0xcb0: 0x0f41, 0xcb1: 0x2421, 0xcb2: 0x0965, 0xcb3: 0x2439, 0xcb4: 0x1089, 0xcb5: 0x2451, + 0xcb6: 0x0985, 0xcb7: 0x2469, 0xcb8: 0x2491, 0xcb9: 0x0369, 0xcba: 0x24a9, 0xcbb: 0x09a5, + 0xcbc: 0x0359, 0xcbd: 0x1159, 0xcbe: 0x0ef9, 0xcbf: 0x0f61, + // Block 0x33, offset 0xcc0 + 0xcc0: 0x0018, 0xcc1: 0x0018, 0xcc2: 0x0018, 0xcc3: 0x0018, 0xcc4: 0x0018, 0xcc5: 0x0018, + 0xcc6: 0x0018, 0xcc7: 0x0018, 0xcc8: 0x0018, 0xcc9: 0x0018, 0xcca: 0x0018, 0xccb: 0x0040, + 0xccc: 0x0040, 0xccd: 0x0040, 0xcce: 0x0040, 0xccf: 0x0040, 0xcd0: 0x0040, 0xcd1: 0x0040, + 0xcd2: 0x0040, 0xcd3: 0x0040, 0xcd4: 0x0040, 0xcd5: 0x0040, 0xcd6: 0x0040, 0xcd7: 0x0040, + 0xcd8: 0x0040, 0xcd9: 0x0040, 0xcda: 0x0040, 0xcdb: 0x0040, 0xcdc: 0x0040, 0xcdd: 0x0040, + 0xcde: 0x0040, 0xcdf: 0x0040, 0xce0: 0x00c9, 0xce1: 0x0069, 0xce2: 0x0079, 0xce3: 0x1f51, + 0xce4: 0x1f61, 0xce5: 0x1f71, 0xce6: 0x1f81, 0xce7: 0x1f91, 0xce8: 0x1fa1, 0xce9: 0x2601, + 0xcea: 0x2619, 0xceb: 0x2631, 0xcec: 0x2649, 0xced: 0x2661, 0xcee: 0x2679, 0xcef: 0x2691, + 0xcf0: 0x26a9, 0xcf1: 0x26c1, 0xcf2: 0x26d9, 0xcf3: 0x26f1, 0xcf4: 0x0a06, 0xcf5: 0x0a26, + 0xcf6: 0x0a46, 0xcf7: 0x0a66, 0xcf8: 0x0a86, 0xcf9: 0x0aa6, 0xcfa: 0x0ac6, 0xcfb: 0x0ae6, + 0xcfc: 0x0b06, 0xcfd: 0x270a, 0xcfe: 0x2732, 0xcff: 0x275a, + // Block 0x34, offset 0xd00 + 0xd00: 0x2782, 0xd01: 0x27aa, 0xd02: 0x27d2, 0xd03: 0x27fa, 0xd04: 0x2822, 0xd05: 0x284a, + 0xd06: 0x2872, 0xd07: 0x289a, 0xd08: 0x0040, 0xd09: 0x0040, 0xd0a: 0x0040, 0xd0b: 0x0040, + 0xd0c: 0x0040, 0xd0d: 0x0040, 0xd0e: 0x0040, 0xd0f: 0x0040, 0xd10: 0x0040, 0xd11: 0x0040, + 0xd12: 0x0040, 0xd13: 0x0040, 0xd14: 0x0040, 0xd15: 0x0040, 0xd16: 0x0040, 0xd17: 0x0040, + 0xd18: 0x0040, 0xd19: 0x0040, 0xd1a: 0x0040, 0xd1b: 0x0040, 0xd1c: 0x0b26, 0xd1d: 0x0b46, + 0xd1e: 0x0b66, 0xd1f: 0x0b86, 0xd20: 0x0ba6, 0xd21: 0x0bc6, 0xd22: 0x0be6, 0xd23: 0x0c06, + 0xd24: 0x0c26, 0xd25: 0x0c46, 0xd26: 0x0c66, 0xd27: 0x0c86, 0xd28: 0x0ca6, 0xd29: 0x0cc6, + 0xd2a: 0x0ce6, 0xd2b: 0x0d06, 0xd2c: 0x0d26, 0xd2d: 0x0d46, 0xd2e: 0x0d66, 0xd2f: 0x0d86, + 0xd30: 0x0da6, 0xd31: 0x0dc6, 0xd32: 0x0de6, 0xd33: 0x0e06, 0xd34: 0x0e26, 0xd35: 0x0e46, + 0xd36: 0x0039, 0xd37: 0x0ee9, 0xd38: 0x1159, 0xd39: 0x0ef9, 0xd3a: 0x0f09, 0xd3b: 0x1199, + 0xd3c: 0x0f31, 0xd3d: 0x0249, 0xd3e: 0x0f41, 0xd3f: 0x0259, + // Block 0x35, offset 0xd40 + 0xd40: 0x0f51, 0xd41: 0x0359, 0xd42: 0x0f61, 0xd43: 0x0f71, 0xd44: 0x00d9, 0xd45: 0x0f99, + 0xd46: 0x2039, 0xd47: 0x0269, 0xd48: 0x01d9, 0xd49: 0x0fa9, 0xd4a: 0x0fb9, 0xd4b: 0x1089, + 0xd4c: 0x0279, 0xd4d: 0x0369, 0xd4e: 0x0289, 0xd4f: 0x13d1, 0xd50: 0x0039, 0xd51: 0x0ee9, + 0xd52: 0x1159, 0xd53: 0x0ef9, 0xd54: 0x0f09, 0xd55: 0x1199, 0xd56: 0x0f31, 0xd57: 0x0249, + 0xd58: 0x0f41, 0xd59: 0x0259, 0xd5a: 0x0f51, 0xd5b: 0x0359, 0xd5c: 0x0f61, 0xd5d: 0x0f71, + 0xd5e: 0x00d9, 0xd5f: 0x0f99, 0xd60: 0x2039, 0xd61: 0x0269, 0xd62: 0x01d9, 0xd63: 0x0fa9, + 0xd64: 0x0fb9, 0xd65: 0x1089, 0xd66: 0x0279, 0xd67: 0x0369, 0xd68: 0x0289, 0xd69: 0x13d1, + 0xd6a: 0x1f41, 0xd6b: 0x0018, 0xd6c: 0x0018, 0xd6d: 0x0018, 0xd6e: 0x0018, 0xd6f: 0x0018, + 0xd70: 0x0018, 0xd71: 0x0018, 0xd72: 0x0018, 0xd73: 0x0018, 0xd74: 0x0018, 0xd75: 0x0018, + 0xd76: 0x0018, 0xd77: 0x0018, 0xd78: 0x0018, 0xd79: 0x0018, 0xd7a: 0x0018, 0xd7b: 0x0018, + 0xd7c: 0x0018, 0xd7d: 0x0018, 0xd7e: 0x0018, 0xd7f: 0x0018, + // Block 0x36, offset 0xd80 + 0xd80: 0x0008, 0xd81: 0x0008, 0xd82: 0x0008, 0xd83: 0x0008, 0xd84: 0x0008, 0xd85: 0x0008, + 0xd86: 0x0008, 0xd87: 0x0008, 0xd88: 0x0008, 0xd89: 0x0008, 0xd8a: 0x0008, 0xd8b: 0x0008, + 0xd8c: 0x0008, 0xd8d: 0x0008, 0xd8e: 0x0008, 0xd8f: 0x0008, 0xd90: 0x0008, 0xd91: 0x0008, + 0xd92: 0x0008, 0xd93: 0x0008, 0xd94: 0x0008, 0xd95: 0x0008, 0xd96: 0x0008, 0xd97: 0x0008, + 0xd98: 0x0008, 0xd99: 0x0008, 0xd9a: 0x0008, 0xd9b: 0x0008, 0xd9c: 0x0008, 0xd9d: 0x0008, + 0xd9e: 0x0008, 0xd9f: 0x0040, 0xda0: 0xe00d, 0xda1: 0x0008, 0xda2: 0x2971, 0xda3: 0x0ebd, + 0xda4: 0x2989, 0xda5: 0x0008, 0xda6: 0x0008, 0xda7: 0xe07d, 0xda8: 0x0008, 0xda9: 0xe01d, + 0xdaa: 0x0008, 0xdab: 0xe03d, 0xdac: 0x0008, 0xdad: 0x0fe1, 0xdae: 0x1281, 0xdaf: 0x0fc9, + 0xdb0: 0x1141, 0xdb1: 0x0008, 0xdb2: 0xe00d, 0xdb3: 0x0008, 0xdb4: 0x0008, 0xdb5: 0xe01d, + 0xdb6: 0x0008, 0xdb7: 0x0008, 0xdb8: 0x0008, 0xdb9: 0x0008, 0xdba: 0x0008, 0xdbb: 0x0008, + 0xdbc: 0x0259, 0xdbd: 0x1089, 0xdbe: 0x29a1, 0xdbf: 0x29b9, + // Block 0x37, offset 0xdc0 + 0xdc0: 0xe00d, 0xdc1: 0x0008, 0xdc2: 0xe00d, 0xdc3: 0x0008, 0xdc4: 0xe00d, 0xdc5: 0x0008, + 0xdc6: 0xe00d, 0xdc7: 0x0008, 0xdc8: 0xe00d, 0xdc9: 0x0008, 0xdca: 0xe00d, 0xdcb: 0x0008, + 0xdcc: 0xe00d, 0xdcd: 0x0008, 0xdce: 0xe00d, 0xdcf: 0x0008, 0xdd0: 0xe00d, 0xdd1: 0x0008, + 0xdd2: 0xe00d, 0xdd3: 0x0008, 0xdd4: 0xe00d, 0xdd5: 0x0008, 0xdd6: 0xe00d, 0xdd7: 0x0008, + 0xdd8: 0xe00d, 0xdd9: 0x0008, 0xdda: 0xe00d, 0xddb: 0x0008, 0xddc: 0xe00d, 0xddd: 0x0008, + 0xdde: 0xe00d, 0xddf: 0x0008, 0xde0: 0xe00d, 0xde1: 0x0008, 0xde2: 0xe00d, 0xde3: 0x0008, + 0xde4: 0x0008, 0xde5: 0x0018, 0xde6: 0x0018, 0xde7: 0x0018, 0xde8: 0x0018, 0xde9: 0x0018, + 0xdea: 0x0018, 0xdeb: 0xe03d, 0xdec: 0x0008, 0xded: 0xe01d, 0xdee: 0x0008, 0xdef: 0x3308, + 0xdf0: 0x3308, 0xdf1: 0x3308, 0xdf2: 0xe00d, 0xdf3: 0x0008, 0xdf4: 0x0040, 0xdf5: 0x0040, + 0xdf6: 0x0040, 0xdf7: 0x0040, 0xdf8: 0x0040, 0xdf9: 0x0018, 0xdfa: 0x0018, 0xdfb: 0x0018, + 0xdfc: 0x0018, 0xdfd: 0x0018, 0xdfe: 0x0018, 0xdff: 0x0018, + // Block 0x38, offset 0xe00 + 0xe00: 0x26fd, 0xe01: 0x271d, 0xe02: 0x273d, 0xe03: 0x275d, 0xe04: 0x277d, 0xe05: 0x279d, + 0xe06: 0x27bd, 0xe07: 0x27dd, 0xe08: 0x27fd, 0xe09: 0x281d, 0xe0a: 0x283d, 0xe0b: 0x285d, + 0xe0c: 0x287d, 0xe0d: 0x289d, 0xe0e: 0x28bd, 0xe0f: 0x28dd, 0xe10: 0x28fd, 0xe11: 0x291d, + 0xe12: 0x293d, 0xe13: 0x295d, 0xe14: 0x297d, 0xe15: 0x299d, 0xe16: 0x0040, 0xe17: 0x0040, + 0xe18: 0x0040, 0xe19: 0x0040, 0xe1a: 0x0040, 0xe1b: 0x0040, 0xe1c: 0x0040, 0xe1d: 0x0040, + 0xe1e: 0x0040, 0xe1f: 0x0040, 0xe20: 0x0040, 0xe21: 0x0040, 0xe22: 0x0040, 0xe23: 0x0040, + 0xe24: 0x0040, 0xe25: 0x0040, 0xe26: 0x0040, 0xe27: 0x0040, 0xe28: 0x0040, 0xe29: 0x0040, + 0xe2a: 0x0040, 0xe2b: 0x0040, 0xe2c: 0x0040, 0xe2d: 0x0040, 0xe2e: 0x0040, 0xe2f: 0x0040, + 0xe30: 0x0040, 0xe31: 0x0040, 0xe32: 0x0040, 0xe33: 0x0040, 0xe34: 0x0040, 0xe35: 0x0040, + 0xe36: 0x0040, 0xe37: 0x0040, 0xe38: 0x0040, 0xe39: 0x0040, 0xe3a: 0x0040, 0xe3b: 0x0040, + 0xe3c: 0x0040, 0xe3d: 0x0040, 0xe3e: 0x0040, 0xe3f: 0x0040, + // Block 0x39, offset 0xe40 + 0xe40: 0x000a, 0xe41: 0x0018, 0xe42: 0x29d1, 0xe43: 0x0018, 0xe44: 0x0018, 0xe45: 0x0008, + 0xe46: 0x0008, 0xe47: 0x0008, 0xe48: 0x0018, 0xe49: 0x0018, 0xe4a: 0x0018, 0xe4b: 0x0018, + 0xe4c: 0x0018, 0xe4d: 0x0018, 0xe4e: 0x0018, 0xe4f: 0x0018, 0xe50: 0x0018, 0xe51: 0x0018, + 0xe52: 0x0018, 0xe53: 0x0018, 0xe54: 0x0018, 0xe55: 0x0018, 0xe56: 0x0018, 0xe57: 0x0018, + 0xe58: 0x0018, 0xe59: 0x0018, 0xe5a: 0x0018, 0xe5b: 0x0018, 0xe5c: 0x0018, 0xe5d: 0x0018, + 0xe5e: 0x0018, 0xe5f: 0x0018, 0xe60: 0x0018, 0xe61: 0x0018, 0xe62: 0x0018, 0xe63: 0x0018, + 0xe64: 0x0018, 0xe65: 0x0018, 0xe66: 0x0018, 0xe67: 0x0018, 0xe68: 0x0018, 0xe69: 0x0018, + 0xe6a: 0x3308, 0xe6b: 0x3308, 0xe6c: 0x3308, 0xe6d: 0x3308, 0xe6e: 0x3018, 0xe6f: 0x3018, + 0xe70: 0x0018, 0xe71: 0x0018, 0xe72: 0x0018, 0xe73: 0x0018, 0xe74: 0x0018, 0xe75: 0x0018, + 0xe76: 0xe125, 0xe77: 0x0018, 0xe78: 0x29bd, 0xe79: 0x29dd, 0xe7a: 0x29fd, 0xe7b: 0x0018, + 0xe7c: 0x0008, 0xe7d: 0x0018, 0xe7e: 0x0018, 0xe7f: 0x0018, + // Block 0x3a, offset 0xe80 + 0xe80: 0x2b3d, 0xe81: 0x2b5d, 0xe82: 0x2b7d, 0xe83: 0x2b9d, 0xe84: 0x2bbd, 0xe85: 0x2bdd, + 0xe86: 0x2bdd, 0xe87: 0x2bdd, 0xe88: 0x2bfd, 0xe89: 0x2bfd, 0xe8a: 0x2bfd, 0xe8b: 0x2bfd, + 0xe8c: 0x2c1d, 0xe8d: 0x2c1d, 0xe8e: 0x2c1d, 0xe8f: 0x2c3d, 0xe90: 0x2c5d, 0xe91: 0x2c5d, + 0xe92: 0x2a7d, 0xe93: 0x2a7d, 0xe94: 0x2c5d, 0xe95: 0x2c5d, 0xe96: 0x2c7d, 0xe97: 0x2c7d, + 0xe98: 0x2c5d, 0xe99: 0x2c5d, 0xe9a: 0x2a7d, 0xe9b: 0x2a7d, 0xe9c: 0x2c5d, 0xe9d: 0x2c5d, + 0xe9e: 0x2c3d, 0xe9f: 0x2c3d, 0xea0: 0x2c9d, 0xea1: 0x2c9d, 0xea2: 0x2cbd, 0xea3: 0x2cbd, + 0xea4: 0x0040, 0xea5: 0x2cdd, 0xea6: 0x2cfd, 0xea7: 0x2d1d, 0xea8: 0x2d1d, 0xea9: 0x2d3d, + 0xeaa: 0x2d5d, 0xeab: 0x2d7d, 0xeac: 0x2d9d, 0xead: 0x2dbd, 0xeae: 0x2ddd, 0xeaf: 0x2dfd, + 0xeb0: 0x2e1d, 0xeb1: 0x2e3d, 0xeb2: 0x2e3d, 0xeb3: 0x2e5d, 0xeb4: 0x2e7d, 0xeb5: 0x2e7d, + 0xeb6: 0x2e9d, 0xeb7: 0x2ebd, 0xeb8: 0x2e5d, 0xeb9: 0x2edd, 0xeba: 0x2efd, 0xebb: 0x2edd, + 0xebc: 0x2e5d, 0xebd: 0x2f1d, 0xebe: 0x2f3d, 0xebf: 0x2f5d, + // Block 0x3b, offset 0xec0 + 0xec0: 0x2f7d, 0xec1: 0x2f9d, 0xec2: 0x2cfd, 0xec3: 0x2cdd, 0xec4: 0x2fbd, 0xec5: 0x2fdd, + 0xec6: 0x2ffd, 0xec7: 0x301d, 0xec8: 0x303d, 0xec9: 0x305d, 0xeca: 0x307d, 0xecb: 0x309d, + 0xecc: 0x30bd, 0xecd: 0x30dd, 0xece: 0x30fd, 0xecf: 0x0040, 0xed0: 0x0018, 0xed1: 0x0018, + 0xed2: 0x311d, 0xed3: 0x313d, 0xed4: 0x315d, 0xed5: 0x317d, 0xed6: 0x319d, 0xed7: 0x31bd, + 0xed8: 0x31dd, 0xed9: 0x31fd, 0xeda: 0x321d, 0xedb: 0x323d, 0xedc: 0x315d, 0xedd: 0x325d, + 0xede: 0x327d, 0xedf: 0x329d, 0xee0: 0x0008, 0xee1: 0x0008, 0xee2: 0x0008, 0xee3: 0x0008, + 0xee4: 0x0008, 0xee5: 0x0008, 0xee6: 0x0008, 0xee7: 0x0008, 0xee8: 0x0008, 0xee9: 0x0008, + 0xeea: 0x0008, 0xeeb: 0x0008, 0xeec: 0x0008, 0xeed: 0x0008, 0xeee: 0x0008, 0xeef: 0x0008, + 0xef0: 0x0008, 0xef1: 0x0008, 0xef2: 0x0008, 0xef3: 0x0008, 0xef4: 0x0008, 0xef5: 0x0008, + 0xef6: 0x0008, 0xef7: 0x0008, 0xef8: 0x0008, 0xef9: 0x0008, 0xefa: 0x0008, 0xefb: 0x0040, + 0xefc: 0x0040, 0xefd: 0x0040, 0xefe: 0x0040, 0xeff: 0x0040, + // Block 0x3c, offset 0xf00 + 0xf00: 0x36a2, 0xf01: 0x36d2, 0xf02: 0x3702, 0xf03: 0x3732, 0xf04: 0x32bd, 0xf05: 0x32dd, + 0xf06: 0x32fd, 0xf07: 0x331d, 0xf08: 0x0018, 0xf09: 0x0018, 0xf0a: 0x0018, 0xf0b: 0x0018, + 0xf0c: 0x0018, 0xf0d: 0x0018, 0xf0e: 0x0018, 0xf0f: 0x0018, 0xf10: 0x333d, 0xf11: 0x3761, + 0xf12: 0x3779, 0xf13: 0x3791, 0xf14: 0x37a9, 0xf15: 0x37c1, 0xf16: 0x37d9, 0xf17: 0x37f1, + 0xf18: 0x3809, 0xf19: 0x3821, 0xf1a: 0x3839, 0xf1b: 0x3851, 0xf1c: 0x3869, 0xf1d: 0x3881, + 0xf1e: 0x3899, 0xf1f: 0x38b1, 0xf20: 0x335d, 0xf21: 0x337d, 0xf22: 0x339d, 0xf23: 0x33bd, + 0xf24: 0x33dd, 0xf25: 0x33dd, 0xf26: 0x33fd, 0xf27: 0x341d, 0xf28: 0x343d, 0xf29: 0x345d, + 0xf2a: 0x347d, 0xf2b: 0x349d, 0xf2c: 0x34bd, 0xf2d: 0x34dd, 0xf2e: 0x34fd, 0xf2f: 0x351d, + 0xf30: 0x353d, 0xf31: 0x355d, 0xf32: 0x357d, 0xf33: 0x359d, 0xf34: 0x35bd, 0xf35: 0x35dd, + 0xf36: 0x35fd, 0xf37: 0x361d, 0xf38: 0x363d, 0xf39: 0x365d, 0xf3a: 0x367d, 0xf3b: 0x369d, + 0xf3c: 0x38c9, 0xf3d: 0x3901, 0xf3e: 0x36bd, 0xf3f: 0x0018, + // Block 0x3d, offset 0xf40 + 0xf40: 0x36dd, 0xf41: 0x36fd, 0xf42: 0x371d, 0xf43: 0x373d, 0xf44: 0x375d, 0xf45: 0x377d, + 0xf46: 0x379d, 0xf47: 0x37bd, 0xf48: 0x37dd, 0xf49: 0x37fd, 0xf4a: 0x381d, 0xf4b: 0x383d, + 0xf4c: 0x385d, 0xf4d: 0x387d, 0xf4e: 0x389d, 0xf4f: 0x38bd, 0xf50: 0x38dd, 0xf51: 0x38fd, + 0xf52: 0x391d, 0xf53: 0x393d, 0xf54: 0x395d, 0xf55: 0x397d, 0xf56: 0x399d, 0xf57: 0x39bd, + 0xf58: 0x39dd, 0xf59: 0x39fd, 0xf5a: 0x3a1d, 0xf5b: 0x3a3d, 0xf5c: 0x3a5d, 0xf5d: 0x3a7d, + 0xf5e: 0x3a9d, 0xf5f: 0x3abd, 0xf60: 0x3add, 0xf61: 0x3afd, 0xf62: 0x3b1d, 0xf63: 0x3b3d, + 0xf64: 0x3b5d, 0xf65: 0x3b7d, 0xf66: 0x127d, 0xf67: 0x3b9d, 0xf68: 0x3bbd, 0xf69: 0x3bdd, + 0xf6a: 0x3bfd, 0xf6b: 0x3c1d, 0xf6c: 0x3c3d, 0xf6d: 0x3c5d, 0xf6e: 0x239d, 0xf6f: 0x3c7d, + 0xf70: 0x3c9d, 0xf71: 0x3939, 0xf72: 0x3951, 0xf73: 0x3969, 0xf74: 0x3981, 0xf75: 0x3999, + 0xf76: 0x39b1, 0xf77: 0x39c9, 0xf78: 0x39e1, 0xf79: 0x39f9, 0xf7a: 0x3a11, 0xf7b: 0x3a29, + 0xf7c: 0x3a41, 0xf7d: 0x3a59, 0xf7e: 0x3a71, 0xf7f: 0x3a89, + // Block 0x3e, offset 0xf80 + 0xf80: 0x3aa1, 0xf81: 0x3ac9, 0xf82: 0x3af1, 0xf83: 0x3b19, 0xf84: 0x3b41, 0xf85: 0x3b69, + 0xf86: 0x3b91, 0xf87: 0x3bb9, 0xf88: 0x3be1, 0xf89: 0x3c09, 0xf8a: 0x3c39, 0xf8b: 0x3c69, + 0xf8c: 0x3c99, 0xf8d: 0x3cbd, 0xf8e: 0x3cb1, 0xf8f: 0x3cdd, 0xf90: 0x3cfd, 0xf91: 0x3d15, + 0xf92: 0x3d2d, 0xf93: 0x3d45, 0xf94: 0x3d5d, 0xf95: 0x3d5d, 0xf96: 0x3d45, 0xf97: 0x3d75, + 0xf98: 0x07bd, 0xf99: 0x3d8d, 0xf9a: 0x3da5, 0xf9b: 0x3dbd, 0xf9c: 0x3dd5, 0xf9d: 0x3ded, + 0xf9e: 0x3e05, 0xf9f: 0x3e1d, 0xfa0: 0x3e35, 0xfa1: 0x3e4d, 0xfa2: 0x3e65, 0xfa3: 0x3e7d, + 0xfa4: 0x3e95, 0xfa5: 0x3e95, 0xfa6: 0x3ead, 0xfa7: 0x3ead, 0xfa8: 0x3ec5, 0xfa9: 0x3ec5, + 0xfaa: 0x3edd, 0xfab: 0x3ef5, 0xfac: 0x3f0d, 0xfad: 0x3f25, 0xfae: 0x3f3d, 0xfaf: 0x3f3d, + 0xfb0: 0x3f55, 0xfb1: 0x3f55, 0xfb2: 0x3f55, 0xfb3: 0x3f6d, 0xfb4: 0x3f85, 0xfb5: 0x3f9d, + 0xfb6: 0x3fb5, 0xfb7: 0x3f9d, 0xfb8: 0x3fcd, 0xfb9: 0x3fe5, 0xfba: 0x3f6d, 0xfbb: 0x3ffd, + 0xfbc: 0x4015, 0xfbd: 0x4015, 0xfbe: 0x4015, 0xfbf: 0x0040, + // Block 0x3f, offset 0xfc0 + 0xfc0: 0x3cc9, 0xfc1: 0x3d31, 0xfc2: 0x3d99, 0xfc3: 0x3e01, 0xfc4: 0x3e51, 0xfc5: 0x3eb9, + 0xfc6: 0x3f09, 0xfc7: 0x3f59, 0xfc8: 0x3fd9, 0xfc9: 0x4041, 0xfca: 0x4091, 0xfcb: 0x40e1, + 0xfcc: 0x4131, 0xfcd: 0x4199, 0xfce: 0x4201, 0xfcf: 0x4251, 0xfd0: 0x42a1, 0xfd1: 0x42d9, + 0xfd2: 0x4329, 0xfd3: 0x4391, 0xfd4: 0x43f9, 0xfd5: 0x4431, 0xfd6: 0x44b1, 0xfd7: 0x4549, + 0xfd8: 0x45c9, 0xfd9: 0x4619, 0xfda: 0x4699, 0xfdb: 0x4719, 0xfdc: 0x4781, 0xfdd: 0x47d1, + 0xfde: 0x4821, 0xfdf: 0x4871, 0xfe0: 0x48d9, 0xfe1: 0x4959, 0xfe2: 0x49c1, 0xfe3: 0x4a11, + 0xfe4: 0x4a61, 0xfe5: 0x4ab1, 0xfe6: 0x4ae9, 0xfe7: 0x4b21, 0xfe8: 0x4b59, 0xfe9: 0x4b91, + 0xfea: 0x4be1, 0xfeb: 0x4c31, 0xfec: 0x4cb1, 0xfed: 0x4d01, 0xfee: 0x4d69, 0xfef: 0x4de9, + 0xff0: 0x4e39, 0xff1: 0x4e71, 0xff2: 0x4ea9, 0xff3: 0x4f29, 0xff4: 0x4f91, 0xff5: 0x5011, + 0xff6: 0x5061, 0xff7: 0x50e1, 0xff8: 0x5119, 0xff9: 0x5169, 0xffa: 0x51b9, 0xffb: 0x5209, + 0xffc: 0x5259, 0xffd: 0x52a9, 0xffe: 0x5311, 0xfff: 0x5361, + // Block 0x40, offset 0x1000 + 0x1000: 0x5399, 0x1001: 0x53e9, 0x1002: 0x5439, 0x1003: 0x5489, 0x1004: 0x54f1, 0x1005: 0x5541, + 0x1006: 0x5591, 0x1007: 0x55e1, 0x1008: 0x5661, 0x1009: 0x56c9, 0x100a: 0x5701, 0x100b: 0x5781, + 0x100c: 0x57b9, 0x100d: 0x5821, 0x100e: 0x5889, 0x100f: 0x58d9, 0x1010: 0x5929, 0x1011: 0x5979, + 0x1012: 0x59e1, 0x1013: 0x5a19, 0x1014: 0x5a69, 0x1015: 0x5ad1, 0x1016: 0x5b09, 0x1017: 0x5b89, + 0x1018: 0x5bd9, 0x1019: 0x5c01, 0x101a: 0x5c29, 0x101b: 0x5c51, 0x101c: 0x5c79, 0x101d: 0x5ca1, + 0x101e: 0x5cc9, 0x101f: 0x5cf1, 0x1020: 0x5d19, 0x1021: 0x5d41, 0x1022: 0x5d69, 0x1023: 0x5d99, + 0x1024: 0x5dc9, 0x1025: 0x5df9, 0x1026: 0x5e29, 0x1027: 0x5e59, 0x1028: 0x5e89, 0x1029: 0x5eb9, + 0x102a: 0x5ee9, 0x102b: 0x5f19, 0x102c: 0x5f49, 0x102d: 0x5f79, 0x102e: 0x5fa9, 0x102f: 0x5fd9, + 0x1030: 0x6009, 0x1031: 0x402d, 0x1032: 0x6039, 0x1033: 0x6051, 0x1034: 0x404d, 0x1035: 0x6069, + 0x1036: 0x6081, 0x1037: 0x6099, 0x1038: 0x406d, 0x1039: 0x406d, 0x103a: 0x60b1, 0x103b: 0x60c9, + 0x103c: 0x6101, 0x103d: 0x6139, 0x103e: 0x6171, 0x103f: 0x61a9, + // Block 0x41, offset 0x1040 + 0x1040: 0x6211, 0x1041: 0x6229, 0x1042: 0x408d, 0x1043: 0x6241, 0x1044: 0x6259, 0x1045: 0x6271, + 0x1046: 0x6289, 0x1047: 0x62a1, 0x1048: 0x40ad, 0x1049: 0x62b9, 0x104a: 0x62e1, 0x104b: 0x62f9, + 0x104c: 0x40cd, 0x104d: 0x40cd, 0x104e: 0x6311, 0x104f: 0x6329, 0x1050: 0x6341, 0x1051: 0x40ed, + 0x1052: 0x410d, 0x1053: 0x412d, 0x1054: 0x414d, 0x1055: 0x416d, 0x1056: 0x6359, 0x1057: 0x6371, + 0x1058: 0x6389, 0x1059: 0x63a1, 0x105a: 0x63b9, 0x105b: 0x418d, 0x105c: 0x63d1, 0x105d: 0x63e9, + 0x105e: 0x6401, 0x105f: 0x41ad, 0x1060: 0x41cd, 0x1061: 0x6419, 0x1062: 0x41ed, 0x1063: 0x420d, + 0x1064: 0x422d, 0x1065: 0x6431, 0x1066: 0x424d, 0x1067: 0x6449, 0x1068: 0x6479, 0x1069: 0x6211, + 0x106a: 0x426d, 0x106b: 0x428d, 0x106c: 0x42ad, 0x106d: 0x42cd, 0x106e: 0x64b1, 0x106f: 0x64f1, + 0x1070: 0x6539, 0x1071: 0x6551, 0x1072: 0x42ed, 0x1073: 0x6569, 0x1074: 0x6581, 0x1075: 0x6599, + 0x1076: 0x430d, 0x1077: 0x65b1, 0x1078: 0x65c9, 0x1079: 0x65b1, 0x107a: 0x65e1, 0x107b: 0x65f9, + 0x107c: 0x432d, 0x107d: 0x6611, 0x107e: 0x6629, 0x107f: 0x6611, + // Block 0x42, offset 0x1080 + 0x1080: 0x434d, 0x1081: 0x436d, 0x1082: 0x0040, 0x1083: 0x6641, 0x1084: 0x6659, 0x1085: 0x6671, + 0x1086: 0x6689, 0x1087: 0x0040, 0x1088: 0x66c1, 0x1089: 0x66d9, 0x108a: 0x66f1, 0x108b: 0x6709, + 0x108c: 0x6721, 0x108d: 0x6739, 0x108e: 0x6401, 0x108f: 0x6751, 0x1090: 0x6769, 0x1091: 0x6781, + 0x1092: 0x438d, 0x1093: 0x6799, 0x1094: 0x6289, 0x1095: 0x43ad, 0x1096: 0x43cd, 0x1097: 0x67b1, + 0x1098: 0x0040, 0x1099: 0x43ed, 0x109a: 0x67c9, 0x109b: 0x67e1, 0x109c: 0x67f9, 0x109d: 0x6811, + 0x109e: 0x6829, 0x109f: 0x6859, 0x10a0: 0x6889, 0x10a1: 0x68b1, 0x10a2: 0x68d9, 0x10a3: 0x6901, + 0x10a4: 0x6929, 0x10a5: 0x6951, 0x10a6: 0x6979, 0x10a7: 0x69a1, 0x10a8: 0x69c9, 0x10a9: 0x69f1, + 0x10aa: 0x6a21, 0x10ab: 0x6a51, 0x10ac: 0x6a81, 0x10ad: 0x6ab1, 0x10ae: 0x6ae1, 0x10af: 0x6b11, + 0x10b0: 0x6b41, 0x10b1: 0x6b71, 0x10b2: 0x6ba1, 0x10b3: 0x6bd1, 0x10b4: 0x6c01, 0x10b5: 0x6c31, + 0x10b6: 0x6c61, 0x10b7: 0x6c91, 0x10b8: 0x6cc1, 0x10b9: 0x6cf1, 0x10ba: 0x6d21, 0x10bb: 0x6d51, + 0x10bc: 0x6d81, 0x10bd: 0x6db1, 0x10be: 0x6de1, 0x10bf: 0x440d, + // Block 0x43, offset 0x10c0 + 0x10c0: 0xe00d, 0x10c1: 0x0008, 0x10c2: 0xe00d, 0x10c3: 0x0008, 0x10c4: 0xe00d, 0x10c5: 0x0008, + 0x10c6: 0xe00d, 0x10c7: 0x0008, 0x10c8: 0xe00d, 0x10c9: 0x0008, 0x10ca: 0xe00d, 0x10cb: 0x0008, + 0x10cc: 0xe00d, 0x10cd: 0x0008, 0x10ce: 0xe00d, 0x10cf: 0x0008, 0x10d0: 0xe00d, 0x10d1: 0x0008, + 0x10d2: 0xe00d, 0x10d3: 0x0008, 0x10d4: 0xe00d, 0x10d5: 0x0008, 0x10d6: 0xe00d, 0x10d7: 0x0008, + 0x10d8: 0xe00d, 0x10d9: 0x0008, 0x10da: 0xe00d, 0x10db: 0x0008, 0x10dc: 0xe00d, 0x10dd: 0x0008, + 0x10de: 0xe00d, 0x10df: 0x0008, 0x10e0: 0xe00d, 0x10e1: 0x0008, 0x10e2: 0xe00d, 0x10e3: 0x0008, + 0x10e4: 0xe00d, 0x10e5: 0x0008, 0x10e6: 0xe00d, 0x10e7: 0x0008, 0x10e8: 0xe00d, 0x10e9: 0x0008, + 0x10ea: 0xe00d, 0x10eb: 0x0008, 0x10ec: 0xe00d, 0x10ed: 0x0008, 0x10ee: 0x0008, 0x10ef: 0x3308, + 0x10f0: 0x3318, 0x10f1: 0x3318, 0x10f2: 0x3318, 0x10f3: 0x0018, 0x10f4: 0x3308, 0x10f5: 0x3308, + 0x10f6: 0x3308, 0x10f7: 0x3308, 0x10f8: 0x3308, 0x10f9: 0x3308, 0x10fa: 0x3308, 0x10fb: 0x3308, + 0x10fc: 0x3308, 0x10fd: 0x3308, 0x10fe: 0x0018, 0x10ff: 0x0008, + // Block 0x44, offset 0x1100 + 0x1100: 0xe00d, 0x1101: 0x0008, 0x1102: 0xe00d, 0x1103: 0x0008, 0x1104: 0xe00d, 0x1105: 0x0008, + 0x1106: 0xe00d, 0x1107: 0x0008, 0x1108: 0xe00d, 0x1109: 0x0008, 0x110a: 0xe00d, 0x110b: 0x0008, + 0x110c: 0xe00d, 0x110d: 0x0008, 0x110e: 0xe00d, 0x110f: 0x0008, 0x1110: 0xe00d, 0x1111: 0x0008, + 0x1112: 0xe00d, 0x1113: 0x0008, 0x1114: 0xe00d, 0x1115: 0x0008, 0x1116: 0xe00d, 0x1117: 0x0008, + 0x1118: 0xe00d, 0x1119: 0x0008, 0x111a: 0xe00d, 0x111b: 0x0008, 0x111c: 0x0ea1, 0x111d: 0x6e11, + 0x111e: 0x3308, 0x111f: 0x3308, 0x1120: 0x0008, 0x1121: 0x0008, 0x1122: 0x0008, 0x1123: 0x0008, + 0x1124: 0x0008, 0x1125: 0x0008, 0x1126: 0x0008, 0x1127: 0x0008, 0x1128: 0x0008, 0x1129: 0x0008, + 0x112a: 0x0008, 0x112b: 0x0008, 0x112c: 0x0008, 0x112d: 0x0008, 0x112e: 0x0008, 0x112f: 0x0008, + 0x1130: 0x0008, 0x1131: 0x0008, 0x1132: 0x0008, 0x1133: 0x0008, 0x1134: 0x0008, 0x1135: 0x0008, + 0x1136: 0x0008, 0x1137: 0x0008, 0x1138: 0x0008, 0x1139: 0x0008, 0x113a: 0x0008, 0x113b: 0x0008, + 0x113c: 0x0008, 0x113d: 0x0008, 0x113e: 0x0008, 0x113f: 0x0008, + // Block 0x45, offset 0x1140 + 0x1140: 0x0018, 0x1141: 0x0018, 0x1142: 0x0018, 0x1143: 0x0018, 0x1144: 0x0018, 0x1145: 0x0018, + 0x1146: 0x0018, 0x1147: 0x0018, 0x1148: 0x0018, 0x1149: 0x0018, 0x114a: 0x0018, 0x114b: 0x0018, + 0x114c: 0x0018, 0x114d: 0x0018, 0x114e: 0x0018, 0x114f: 0x0018, 0x1150: 0x0018, 0x1151: 0x0018, + 0x1152: 0x0018, 0x1153: 0x0018, 0x1154: 0x0018, 0x1155: 0x0018, 0x1156: 0x0018, 0x1157: 0x0008, + 0x1158: 0x0008, 0x1159: 0x0008, 0x115a: 0x0008, 0x115b: 0x0008, 0x115c: 0x0008, 0x115d: 0x0008, + 0x115e: 0x0008, 0x115f: 0x0008, 0x1160: 0x0018, 0x1161: 0x0018, 0x1162: 0xe00d, 0x1163: 0x0008, + 0x1164: 0xe00d, 0x1165: 0x0008, 0x1166: 0xe00d, 0x1167: 0x0008, 0x1168: 0xe00d, 0x1169: 0x0008, + 0x116a: 0xe00d, 0x116b: 0x0008, 0x116c: 0xe00d, 0x116d: 0x0008, 0x116e: 0xe00d, 0x116f: 0x0008, + 0x1170: 0x0008, 0x1171: 0x0008, 0x1172: 0xe00d, 0x1173: 0x0008, 0x1174: 0xe00d, 0x1175: 0x0008, + 0x1176: 0xe00d, 0x1177: 0x0008, 0x1178: 0xe00d, 0x1179: 0x0008, 0x117a: 0xe00d, 0x117b: 0x0008, + 0x117c: 0xe00d, 0x117d: 0x0008, 0x117e: 0xe00d, 0x117f: 0x0008, + // Block 0x46, offset 0x1180 + 0x1180: 0xe00d, 0x1181: 0x0008, 0x1182: 0xe00d, 0x1183: 0x0008, 0x1184: 0xe00d, 0x1185: 0x0008, + 0x1186: 0xe00d, 0x1187: 0x0008, 0x1188: 0xe00d, 0x1189: 0x0008, 0x118a: 0xe00d, 0x118b: 0x0008, + 0x118c: 0xe00d, 0x118d: 0x0008, 0x118e: 0xe00d, 0x118f: 0x0008, 0x1190: 0xe00d, 0x1191: 0x0008, + 0x1192: 0xe00d, 0x1193: 0x0008, 0x1194: 0xe00d, 0x1195: 0x0008, 0x1196: 0xe00d, 0x1197: 0x0008, + 0x1198: 0xe00d, 0x1199: 0x0008, 0x119a: 0xe00d, 0x119b: 0x0008, 0x119c: 0xe00d, 0x119d: 0x0008, + 0x119e: 0xe00d, 0x119f: 0x0008, 0x11a0: 0xe00d, 0x11a1: 0x0008, 0x11a2: 0xe00d, 0x11a3: 0x0008, + 0x11a4: 0xe00d, 0x11a5: 0x0008, 0x11a6: 0xe00d, 0x11a7: 0x0008, 0x11a8: 0xe00d, 0x11a9: 0x0008, + 0x11aa: 0xe00d, 0x11ab: 0x0008, 0x11ac: 0xe00d, 0x11ad: 0x0008, 0x11ae: 0xe00d, 0x11af: 0x0008, + 0x11b0: 0xe0fd, 0x11b1: 0x0008, 0x11b2: 0x0008, 0x11b3: 0x0008, 0x11b4: 0x0008, 0x11b5: 0x0008, + 0x11b6: 0x0008, 0x11b7: 0x0008, 0x11b8: 0x0008, 0x11b9: 0xe01d, 0x11ba: 0x0008, 0x11bb: 0xe03d, + 0x11bc: 0x0008, 0x11bd: 0x442d, 0x11be: 0xe00d, 0x11bf: 0x0008, + // Block 0x47, offset 0x11c0 + 0x11c0: 0xe00d, 0x11c1: 0x0008, 0x11c2: 0xe00d, 0x11c3: 0x0008, 0x11c4: 0xe00d, 0x11c5: 0x0008, + 0x11c6: 0xe00d, 0x11c7: 0x0008, 0x11c8: 0x0008, 0x11c9: 0x0018, 0x11ca: 0x0018, 0x11cb: 0xe03d, + 0x11cc: 0x0008, 0x11cd: 0x11d9, 0x11ce: 0x0008, 0x11cf: 0x0008, 0x11d0: 0xe00d, 0x11d1: 0x0008, + 0x11d2: 0xe00d, 0x11d3: 0x0008, 0x11d4: 0x0008, 0x11d5: 0x0008, 0x11d6: 0xe00d, 0x11d7: 0x0008, + 0x11d8: 0xe00d, 0x11d9: 0x0008, 0x11da: 0xe00d, 0x11db: 0x0008, 0x11dc: 0xe00d, 0x11dd: 0x0008, + 0x11de: 0xe00d, 0x11df: 0x0008, 0x11e0: 0xe00d, 0x11e1: 0x0008, 0x11e2: 0xe00d, 0x11e3: 0x0008, + 0x11e4: 0xe00d, 0x11e5: 0x0008, 0x11e6: 0xe00d, 0x11e7: 0x0008, 0x11e8: 0xe00d, 0x11e9: 0x0008, + 0x11ea: 0x6e29, 0x11eb: 0x1029, 0x11ec: 0x11c1, 0x11ed: 0x6e41, 0x11ee: 0x1221, 0x11ef: 0x0040, + 0x11f0: 0x6e59, 0x11f1: 0x6e71, 0x11f2: 0x1239, 0x11f3: 0x444d, 0x11f4: 0xe00d, 0x11f5: 0x0008, + 0x11f6: 0xe00d, 0x11f7: 0x0008, 0x11f8: 0x0040, 0x11f9: 0x0040, 0x11fa: 0x0040, 0x11fb: 0x0040, + 0x11fc: 0x0040, 0x11fd: 0x0040, 0x11fe: 0x0040, 0x11ff: 0x0040, + // Block 0x48, offset 0x1200 + 0x1200: 0x64d5, 0x1201: 0x64f5, 0x1202: 0x6515, 0x1203: 0x6535, 0x1204: 0x6555, 0x1205: 0x6575, + 0x1206: 0x6595, 0x1207: 0x65b5, 0x1208: 0x65d5, 0x1209: 0x65f5, 0x120a: 0x6615, 0x120b: 0x6635, + 0x120c: 0x6655, 0x120d: 0x6675, 0x120e: 0x0008, 0x120f: 0x0008, 0x1210: 0x6695, 0x1211: 0x0008, + 0x1212: 0x66b5, 0x1213: 0x0008, 0x1214: 0x0008, 0x1215: 0x66d5, 0x1216: 0x66f5, 0x1217: 0x6715, + 0x1218: 0x6735, 0x1219: 0x6755, 0x121a: 0x6775, 0x121b: 0x6795, 0x121c: 0x67b5, 0x121d: 0x67d5, + 0x121e: 0x67f5, 0x121f: 0x0008, 0x1220: 0x6815, 0x1221: 0x0008, 0x1222: 0x6835, 0x1223: 0x0008, + 0x1224: 0x0008, 0x1225: 0x6855, 0x1226: 0x6875, 0x1227: 0x0008, 0x1228: 0x0008, 0x1229: 0x0008, + 0x122a: 0x6895, 0x122b: 0x68b5, 0x122c: 0x68d5, 0x122d: 0x68f5, 0x122e: 0x6915, 0x122f: 0x6935, + 0x1230: 0x6955, 0x1231: 0x6975, 0x1232: 0x6995, 0x1233: 0x69b5, 0x1234: 0x69d5, 0x1235: 0x69f5, + 0x1236: 0x6a15, 0x1237: 0x6a35, 0x1238: 0x6a55, 0x1239: 0x6a75, 0x123a: 0x6a95, 0x123b: 0x6ab5, + 0x123c: 0x6ad5, 0x123d: 0x6af5, 0x123e: 0x6b15, 0x123f: 0x6b35, + // Block 0x49, offset 0x1240 + 0x1240: 0x7a95, 0x1241: 0x7ab5, 0x1242: 0x7ad5, 0x1243: 0x7af5, 0x1244: 0x7b15, 0x1245: 0x7b35, + 0x1246: 0x7b55, 0x1247: 0x7b75, 0x1248: 0x7b95, 0x1249: 0x7bb5, 0x124a: 0x7bd5, 0x124b: 0x7bf5, + 0x124c: 0x7c15, 0x124d: 0x7c35, 0x124e: 0x7c55, 0x124f: 0x6ec9, 0x1250: 0x6ef1, 0x1251: 0x6f19, + 0x1252: 0x7c75, 0x1253: 0x7c95, 0x1254: 0x7cb5, 0x1255: 0x6f41, 0x1256: 0x6f69, 0x1257: 0x6f91, + 0x1258: 0x7cd5, 0x1259: 0x7cf5, 0x125a: 0x0040, 0x125b: 0x0040, 0x125c: 0x0040, 0x125d: 0x0040, + 0x125e: 0x0040, 0x125f: 0x0040, 0x1260: 0x0040, 0x1261: 0x0040, 0x1262: 0x0040, 0x1263: 0x0040, + 0x1264: 0x0040, 0x1265: 0x0040, 0x1266: 0x0040, 0x1267: 0x0040, 0x1268: 0x0040, 0x1269: 0x0040, + 0x126a: 0x0040, 0x126b: 0x0040, 0x126c: 0x0040, 0x126d: 0x0040, 0x126e: 0x0040, 0x126f: 0x0040, + 0x1270: 0x0040, 0x1271: 0x0040, 0x1272: 0x0040, 0x1273: 0x0040, 0x1274: 0x0040, 0x1275: 0x0040, + 0x1276: 0x0040, 0x1277: 0x0040, 0x1278: 0x0040, 0x1279: 0x0040, 0x127a: 0x0040, 0x127b: 0x0040, + 0x127c: 0x0040, 0x127d: 0x0040, 0x127e: 0x0040, 0x127f: 0x0040, + // Block 0x4a, offset 0x1280 + 0x1280: 0x6fb9, 0x1281: 0x6fd1, 0x1282: 0x6fe9, 0x1283: 0x7d15, 0x1284: 0x7d35, 0x1285: 0x7001, + 0x1286: 0x7001, 0x1287: 0x0040, 0x1288: 0x0040, 0x1289: 0x0040, 0x128a: 0x0040, 0x128b: 0x0040, + 0x128c: 0x0040, 0x128d: 0x0040, 0x128e: 0x0040, 0x128f: 0x0040, 0x1290: 0x0040, 0x1291: 0x0040, + 0x1292: 0x0040, 0x1293: 0x7019, 0x1294: 0x7041, 0x1295: 0x7069, 0x1296: 0x7091, 0x1297: 0x70b9, + 0x1298: 0x0040, 0x1299: 0x0040, 0x129a: 0x0040, 0x129b: 0x0040, 0x129c: 0x0040, 0x129d: 0x70e1, + 0x129e: 0x3308, 0x129f: 0x7109, 0x12a0: 0x7131, 0x12a1: 0x20a9, 0x12a2: 0x20f1, 0x12a3: 0x7149, + 0x12a4: 0x7161, 0x12a5: 0x7179, 0x12a6: 0x7191, 0x12a7: 0x71a9, 0x12a8: 0x71c1, 0x12a9: 0x1fb2, + 0x12aa: 0x71d9, 0x12ab: 0x7201, 0x12ac: 0x7229, 0x12ad: 0x7261, 0x12ae: 0x7299, 0x12af: 0x72c1, + 0x12b0: 0x72e9, 0x12b1: 0x7311, 0x12b2: 0x7339, 0x12b3: 0x7361, 0x12b4: 0x7389, 0x12b5: 0x73b1, + 0x12b6: 0x73d9, 0x12b7: 0x0040, 0x12b8: 0x7401, 0x12b9: 0x7429, 0x12ba: 0x7451, 0x12bb: 0x7479, + 0x12bc: 0x74a1, 0x12bd: 0x0040, 0x12be: 0x74c9, 0x12bf: 0x0040, + // Block 0x4b, offset 0x12c0 + 0x12c0: 0x74f1, 0x12c1: 0x7519, 0x12c2: 0x0040, 0x12c3: 0x7541, 0x12c4: 0x7569, 0x12c5: 0x0040, + 0x12c6: 0x7591, 0x12c7: 0x75b9, 0x12c8: 0x75e1, 0x12c9: 0x7609, 0x12ca: 0x7631, 0x12cb: 0x7659, + 0x12cc: 0x7681, 0x12cd: 0x76a9, 0x12ce: 0x76d1, 0x12cf: 0x76f9, 0x12d0: 0x7721, 0x12d1: 0x7721, + 0x12d2: 0x7739, 0x12d3: 0x7739, 0x12d4: 0x7739, 0x12d5: 0x7739, 0x12d6: 0x7751, 0x12d7: 0x7751, + 0x12d8: 0x7751, 0x12d9: 0x7751, 0x12da: 0x7769, 0x12db: 0x7769, 0x12dc: 0x7769, 0x12dd: 0x7769, + 0x12de: 0x7781, 0x12df: 0x7781, 0x12e0: 0x7781, 0x12e1: 0x7781, 0x12e2: 0x7799, 0x12e3: 0x7799, + 0x12e4: 0x7799, 0x12e5: 0x7799, 0x12e6: 0x77b1, 0x12e7: 0x77b1, 0x12e8: 0x77b1, 0x12e9: 0x77b1, + 0x12ea: 0x77c9, 0x12eb: 0x77c9, 0x12ec: 0x77c9, 0x12ed: 0x77c9, 0x12ee: 0x77e1, 0x12ef: 0x77e1, + 0x12f0: 0x77e1, 0x12f1: 0x77e1, 0x12f2: 0x77f9, 0x12f3: 0x77f9, 0x12f4: 0x77f9, 0x12f5: 0x77f9, + 0x12f6: 0x7811, 0x12f7: 0x7811, 0x12f8: 0x7811, 0x12f9: 0x7811, 0x12fa: 0x7829, 0x12fb: 0x7829, + 0x12fc: 0x7829, 0x12fd: 0x7829, 0x12fe: 0x7841, 0x12ff: 0x7841, + // Block 0x4c, offset 0x1300 + 0x1300: 0x7841, 0x1301: 0x7841, 0x1302: 0x7859, 0x1303: 0x7859, 0x1304: 0x7871, 0x1305: 0x7871, + 0x1306: 0x7889, 0x1307: 0x7889, 0x1308: 0x78a1, 0x1309: 0x78a1, 0x130a: 0x78b9, 0x130b: 0x78b9, + 0x130c: 0x78d1, 0x130d: 0x78d1, 0x130e: 0x78e9, 0x130f: 0x78e9, 0x1310: 0x78e9, 0x1311: 0x78e9, + 0x1312: 0x7901, 0x1313: 0x7901, 0x1314: 0x7901, 0x1315: 0x7901, 0x1316: 0x7919, 0x1317: 0x7919, + 0x1318: 0x7919, 0x1319: 0x7919, 0x131a: 0x7931, 0x131b: 0x7931, 0x131c: 0x7931, 0x131d: 0x7931, + 0x131e: 0x7949, 0x131f: 0x7949, 0x1320: 0x7961, 0x1321: 0x7961, 0x1322: 0x7961, 0x1323: 0x7961, + 0x1324: 0x7979, 0x1325: 0x7979, 0x1326: 0x7991, 0x1327: 0x7991, 0x1328: 0x7991, 0x1329: 0x7991, + 0x132a: 0x79a9, 0x132b: 0x79a9, 0x132c: 0x79a9, 0x132d: 0x79a9, 0x132e: 0x79c1, 0x132f: 0x79c1, + 0x1330: 0x79d9, 0x1331: 0x79d9, 0x1332: 0x0818, 0x1333: 0x0818, 0x1334: 0x0818, 0x1335: 0x0818, + 0x1336: 0x0818, 0x1337: 0x0818, 0x1338: 0x0818, 0x1339: 0x0818, 0x133a: 0x0818, 0x133b: 0x0818, + 0x133c: 0x0818, 0x133d: 0x0818, 0x133e: 0x0818, 0x133f: 0x0818, + // Block 0x4d, offset 0x1340 + 0x1340: 0x0818, 0x1341: 0x0818, 0x1342: 0x0040, 0x1343: 0x0040, 0x1344: 0x0040, 0x1345: 0x0040, + 0x1346: 0x0040, 0x1347: 0x0040, 0x1348: 0x0040, 0x1349: 0x0040, 0x134a: 0x0040, 0x134b: 0x0040, + 0x134c: 0x0040, 0x134d: 0x0040, 0x134e: 0x0040, 0x134f: 0x0040, 0x1350: 0x0040, 0x1351: 0x0040, + 0x1352: 0x0040, 0x1353: 0x79f1, 0x1354: 0x79f1, 0x1355: 0x79f1, 0x1356: 0x79f1, 0x1357: 0x7a09, + 0x1358: 0x7a09, 0x1359: 0x7a21, 0x135a: 0x7a21, 0x135b: 0x7a39, 0x135c: 0x7a39, 0x135d: 0x0479, + 0x135e: 0x7a51, 0x135f: 0x7a51, 0x1360: 0x7a69, 0x1361: 0x7a69, 0x1362: 0x7a81, 0x1363: 0x7a81, + 0x1364: 0x7a99, 0x1365: 0x7a99, 0x1366: 0x7a99, 0x1367: 0x7a99, 0x1368: 0x7ab1, 0x1369: 0x7ab1, + 0x136a: 0x7ac9, 0x136b: 0x7ac9, 0x136c: 0x7af1, 0x136d: 0x7af1, 0x136e: 0x7b19, 0x136f: 0x7b19, + 0x1370: 0x7b41, 0x1371: 0x7b41, 0x1372: 0x7b69, 0x1373: 0x7b69, 0x1374: 0x7b91, 0x1375: 0x7b91, + 0x1376: 0x7bb9, 0x1377: 0x7bb9, 0x1378: 0x7bb9, 0x1379: 0x7be1, 0x137a: 0x7be1, 0x137b: 0x7be1, + 0x137c: 0x7c09, 0x137d: 0x7c09, 0x137e: 0x7c09, 0x137f: 0x7c09, + // Block 0x4e, offset 0x1380 + 0x1380: 0x85f9, 0x1381: 0x8621, 0x1382: 0x8649, 0x1383: 0x8671, 0x1384: 0x8699, 0x1385: 0x86c1, + 0x1386: 0x86e9, 0x1387: 0x8711, 0x1388: 0x8739, 0x1389: 0x8761, 0x138a: 0x8789, 0x138b: 0x87b1, + 0x138c: 0x87d9, 0x138d: 0x8801, 0x138e: 0x8829, 0x138f: 0x8851, 0x1390: 0x8879, 0x1391: 0x88a1, + 0x1392: 0x88c9, 0x1393: 0x88f1, 0x1394: 0x8919, 0x1395: 0x8941, 0x1396: 0x8969, 0x1397: 0x8991, + 0x1398: 0x89b9, 0x1399: 0x89e1, 0x139a: 0x8a09, 0x139b: 0x8a31, 0x139c: 0x8a59, 0x139d: 0x8a81, + 0x139e: 0x8aaa, 0x139f: 0x8ada, 0x13a0: 0x8b0a, 0x13a1: 0x8b3a, 0x13a2: 0x8b6a, 0x13a3: 0x8b9a, + 0x13a4: 0x8bc9, 0x13a5: 0x8bf1, 0x13a6: 0x7c71, 0x13a7: 0x8c19, 0x13a8: 0x7be1, 0x13a9: 0x7c99, + 0x13aa: 0x8c41, 0x13ab: 0x8c69, 0x13ac: 0x7d39, 0x13ad: 0x8c91, 0x13ae: 0x7d61, 0x13af: 0x7d89, + 0x13b0: 0x8cb9, 0x13b1: 0x8ce1, 0x13b2: 0x7e29, 0x13b3: 0x8d09, 0x13b4: 0x7e51, 0x13b5: 0x7e79, + 0x13b6: 0x8d31, 0x13b7: 0x8d59, 0x13b8: 0x7ec9, 0x13b9: 0x8d81, 0x13ba: 0x7ef1, 0x13bb: 0x7f19, + 0x13bc: 0x83a1, 0x13bd: 0x83c9, 0x13be: 0x8441, 0x13bf: 0x8469, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x8491, 0x13c1: 0x8531, 0x13c2: 0x8559, 0x13c3: 0x8581, 0x13c4: 0x85a9, 0x13c5: 0x8649, + 0x13c6: 0x8671, 0x13c7: 0x8699, 0x13c8: 0x8da9, 0x13c9: 0x8739, 0x13ca: 0x8dd1, 0x13cb: 0x8df9, + 0x13cc: 0x8829, 0x13cd: 0x8e21, 0x13ce: 0x8851, 0x13cf: 0x8879, 0x13d0: 0x8a81, 0x13d1: 0x8e49, + 0x13d2: 0x8e71, 0x13d3: 0x89b9, 0x13d4: 0x8e99, 0x13d5: 0x89e1, 0x13d6: 0x8a09, 0x13d7: 0x7c21, + 0x13d8: 0x7c49, 0x13d9: 0x8ec1, 0x13da: 0x7c71, 0x13db: 0x8ee9, 0x13dc: 0x7cc1, 0x13dd: 0x7ce9, + 0x13de: 0x7d11, 0x13df: 0x7d39, 0x13e0: 0x8f11, 0x13e1: 0x7db1, 0x13e2: 0x7dd9, 0x13e3: 0x7e01, + 0x13e4: 0x7e29, 0x13e5: 0x8f39, 0x13e6: 0x7ec9, 0x13e7: 0x7f41, 0x13e8: 0x7f69, 0x13e9: 0x7f91, + 0x13ea: 0x7fb9, 0x13eb: 0x7fe1, 0x13ec: 0x8031, 0x13ed: 0x8059, 0x13ee: 0x8081, 0x13ef: 0x80a9, + 0x13f0: 0x80d1, 0x13f1: 0x80f9, 0x13f2: 0x8f61, 0x13f3: 0x8121, 0x13f4: 0x8149, 0x13f5: 0x8171, + 0x13f6: 0x8199, 0x13f7: 0x81c1, 0x13f8: 0x81e9, 0x13f9: 0x8239, 0x13fa: 0x8261, 0x13fb: 0x8289, + 0x13fc: 0x82b1, 0x13fd: 0x82d9, 0x13fe: 0x8301, 0x13ff: 0x8329, + // Block 0x50, offset 0x1400 + 0x1400: 0x8351, 0x1401: 0x8379, 0x1402: 0x83f1, 0x1403: 0x8419, 0x1404: 0x84b9, 0x1405: 0x84e1, + 0x1406: 0x8509, 0x1407: 0x8531, 0x1408: 0x8559, 0x1409: 0x85d1, 0x140a: 0x85f9, 0x140b: 0x8621, + 0x140c: 0x8649, 0x140d: 0x8f89, 0x140e: 0x86c1, 0x140f: 0x86e9, 0x1410: 0x8711, 0x1411: 0x8739, + 0x1412: 0x87b1, 0x1413: 0x87d9, 0x1414: 0x8801, 0x1415: 0x8829, 0x1416: 0x8fb1, 0x1417: 0x88a1, + 0x1418: 0x88c9, 0x1419: 0x8fd9, 0x141a: 0x8941, 0x141b: 0x8969, 0x141c: 0x8991, 0x141d: 0x89b9, + 0x141e: 0x9001, 0x141f: 0x7c71, 0x1420: 0x8ee9, 0x1421: 0x7d39, 0x1422: 0x8f11, 0x1423: 0x7e29, + 0x1424: 0x8f39, 0x1425: 0x7ec9, 0x1426: 0x9029, 0x1427: 0x80d1, 0x1428: 0x9051, 0x1429: 0x9079, + 0x142a: 0x90a1, 0x142b: 0x8531, 0x142c: 0x8559, 0x142d: 0x8649, 0x142e: 0x8829, 0x142f: 0x8fb1, + 0x1430: 0x89b9, 0x1431: 0x9001, 0x1432: 0x90c9, 0x1433: 0x9101, 0x1434: 0x9139, 0x1435: 0x9171, + 0x1436: 0x9199, 0x1437: 0x91c1, 0x1438: 0x91e9, 0x1439: 0x9211, 0x143a: 0x9239, 0x143b: 0x9261, + 0x143c: 0x9289, 0x143d: 0x92b1, 0x143e: 0x92d9, 0x143f: 0x9301, + // Block 0x51, offset 0x1440 + 0x1440: 0x9329, 0x1441: 0x9351, 0x1442: 0x9379, 0x1443: 0x93a1, 0x1444: 0x93c9, 0x1445: 0x93f1, + 0x1446: 0x9419, 0x1447: 0x9441, 0x1448: 0x9469, 0x1449: 0x9491, 0x144a: 0x94b9, 0x144b: 0x94e1, + 0x144c: 0x9079, 0x144d: 0x9509, 0x144e: 0x9531, 0x144f: 0x9559, 0x1450: 0x9581, 0x1451: 0x9171, + 0x1452: 0x9199, 0x1453: 0x91c1, 0x1454: 0x91e9, 0x1455: 0x9211, 0x1456: 0x9239, 0x1457: 0x9261, + 0x1458: 0x9289, 0x1459: 0x92b1, 0x145a: 0x92d9, 0x145b: 0x9301, 0x145c: 0x9329, 0x145d: 0x9351, + 0x145e: 0x9379, 0x145f: 0x93a1, 0x1460: 0x93c9, 0x1461: 0x93f1, 0x1462: 0x9419, 0x1463: 0x9441, + 0x1464: 0x9469, 0x1465: 0x9491, 0x1466: 0x94b9, 0x1467: 0x94e1, 0x1468: 0x9079, 0x1469: 0x9509, + 0x146a: 0x9531, 0x146b: 0x9559, 0x146c: 0x9581, 0x146d: 0x9491, 0x146e: 0x94b9, 0x146f: 0x94e1, + 0x1470: 0x9079, 0x1471: 0x9051, 0x1472: 0x90a1, 0x1473: 0x8211, 0x1474: 0x8059, 0x1475: 0x8081, + 0x1476: 0x80a9, 0x1477: 0x9491, 0x1478: 0x94b9, 0x1479: 0x94e1, 0x147a: 0x8211, 0x147b: 0x8239, + 0x147c: 0x95a9, 0x147d: 0x95a9, 0x147e: 0x0018, 0x147f: 0x0018, + // Block 0x52, offset 0x1480 + 0x1480: 0x0040, 0x1481: 0x0040, 0x1482: 0x0040, 0x1483: 0x0040, 0x1484: 0x0040, 0x1485: 0x0040, + 0x1486: 0x0040, 0x1487: 0x0040, 0x1488: 0x0040, 0x1489: 0x0040, 0x148a: 0x0040, 0x148b: 0x0040, + 0x148c: 0x0040, 0x148d: 0x0040, 0x148e: 0x0040, 0x148f: 0x0040, 0x1490: 0x95d1, 0x1491: 0x9609, + 0x1492: 0x9609, 0x1493: 0x9641, 0x1494: 0x9679, 0x1495: 0x96b1, 0x1496: 0x96e9, 0x1497: 0x9721, + 0x1498: 0x9759, 0x1499: 0x9759, 0x149a: 0x9791, 0x149b: 0x97c9, 0x149c: 0x9801, 0x149d: 0x9839, + 0x149e: 0x9871, 0x149f: 0x98a9, 0x14a0: 0x98a9, 0x14a1: 0x98e1, 0x14a2: 0x9919, 0x14a3: 0x9919, + 0x14a4: 0x9951, 0x14a5: 0x9951, 0x14a6: 0x9989, 0x14a7: 0x99c1, 0x14a8: 0x99c1, 0x14a9: 0x99f9, + 0x14aa: 0x9a31, 0x14ab: 0x9a31, 0x14ac: 0x9a69, 0x14ad: 0x9a69, 0x14ae: 0x9aa1, 0x14af: 0x9ad9, + 0x14b0: 0x9ad9, 0x14b1: 0x9b11, 0x14b2: 0x9b11, 0x14b3: 0x9b49, 0x14b4: 0x9b81, 0x14b5: 0x9bb9, + 0x14b6: 0x9bf1, 0x14b7: 0x9bf1, 0x14b8: 0x9c29, 0x14b9: 0x9c61, 0x14ba: 0x9c99, 0x14bb: 0x9cd1, + 0x14bc: 0x9d09, 0x14bd: 0x9d09, 0x14be: 0x9d41, 0x14bf: 0x9d79, + // Block 0x53, offset 0x14c0 + 0x14c0: 0xa949, 0x14c1: 0xa981, 0x14c2: 0xa9b9, 0x14c3: 0xa8a1, 0x14c4: 0x9bb9, 0x14c5: 0x9989, + 0x14c6: 0xa9f1, 0x14c7: 0xaa29, 0x14c8: 0x0040, 0x14c9: 0x0040, 0x14ca: 0x0040, 0x14cb: 0x0040, + 0x14cc: 0x0040, 0x14cd: 0x0040, 0x14ce: 0x0040, 0x14cf: 0x0040, 0x14d0: 0x0040, 0x14d1: 0x0040, + 0x14d2: 0x0040, 0x14d3: 0x0040, 0x14d4: 0x0040, 0x14d5: 0x0040, 0x14d6: 0x0040, 0x14d7: 0x0040, + 0x14d8: 0x0040, 0x14d9: 0x0040, 0x14da: 0x0040, 0x14db: 0x0040, 0x14dc: 0x0040, 0x14dd: 0x0040, + 0x14de: 0x0040, 0x14df: 0x0040, 0x14e0: 0x0040, 0x14e1: 0x0040, 0x14e2: 0x0040, 0x14e3: 0x0040, + 0x14e4: 0x0040, 0x14e5: 0x0040, 0x14e6: 0x0040, 0x14e7: 0x0040, 0x14e8: 0x0040, 0x14e9: 0x0040, + 0x14ea: 0x0040, 0x14eb: 0x0040, 0x14ec: 0x0040, 0x14ed: 0x0040, 0x14ee: 0x0040, 0x14ef: 0x0040, + 0x14f0: 0xaa61, 0x14f1: 0xaa99, 0x14f2: 0xaad1, 0x14f3: 0xab19, 0x14f4: 0xab61, 0x14f5: 0xaba9, + 0x14f6: 0xabf1, 0x14f7: 0xac39, 0x14f8: 0xac81, 0x14f9: 0xacc9, 0x14fa: 0xad02, 0x14fb: 0xae12, + 0x14fc: 0xae91, 0x14fd: 0x0018, 0x14fe: 0x0040, 0x14ff: 0x0040, + // Block 0x54, offset 0x1500 + 0x1500: 0x33c0, 0x1501: 0x33c0, 0x1502: 0x33c0, 0x1503: 0x33c0, 0x1504: 0x33c0, 0x1505: 0x33c0, + 0x1506: 0x33c0, 0x1507: 0x33c0, 0x1508: 0x33c0, 0x1509: 0x33c0, 0x150a: 0x33c0, 0x150b: 0x33c0, + 0x150c: 0x33c0, 0x150d: 0x33c0, 0x150e: 0x33c0, 0x150f: 0x33c0, 0x1510: 0xaeda, 0x1511: 0x7d55, + 0x1512: 0x0040, 0x1513: 0xaeea, 0x1514: 0x03c2, 0x1515: 0xaefa, 0x1516: 0xaf0a, 0x1517: 0x7d75, + 0x1518: 0x7d95, 0x1519: 0x0040, 0x151a: 0x0040, 0x151b: 0x0040, 0x151c: 0x0040, 0x151d: 0x0040, + 0x151e: 0x0040, 0x151f: 0x0040, 0x1520: 0x3308, 0x1521: 0x3308, 0x1522: 0x3308, 0x1523: 0x3308, + 0x1524: 0x3308, 0x1525: 0x3308, 0x1526: 0x3308, 0x1527: 0x3308, 0x1528: 0x3308, 0x1529: 0x3308, + 0x152a: 0x3308, 0x152b: 0x3308, 0x152c: 0x3308, 0x152d: 0x3308, 0x152e: 0x3308, 0x152f: 0x3308, + 0x1530: 0x0040, 0x1531: 0x7db5, 0x1532: 0x7dd5, 0x1533: 0xaf1a, 0x1534: 0xaf1a, 0x1535: 0x1fd2, + 0x1536: 0x1fe2, 0x1537: 0xaf2a, 0x1538: 0xaf3a, 0x1539: 0x7df5, 0x153a: 0x7e15, 0x153b: 0x7e35, + 0x153c: 0x7df5, 0x153d: 0x7e55, 0x153e: 0x7e75, 0x153f: 0x7e55, + // Block 0x55, offset 0x1540 + 0x1540: 0x7e95, 0x1541: 0x7eb5, 0x1542: 0x7ed5, 0x1543: 0x7eb5, 0x1544: 0x7ef5, 0x1545: 0x0018, + 0x1546: 0x0018, 0x1547: 0xaf4a, 0x1548: 0xaf5a, 0x1549: 0x7f16, 0x154a: 0x7f36, 0x154b: 0x7f56, + 0x154c: 0x7f76, 0x154d: 0xaf1a, 0x154e: 0xaf1a, 0x154f: 0xaf1a, 0x1550: 0xaeda, 0x1551: 0x7f95, + 0x1552: 0x0040, 0x1553: 0x0040, 0x1554: 0x03c2, 0x1555: 0xaeea, 0x1556: 0xaf0a, 0x1557: 0xaefa, + 0x1558: 0x7fb5, 0x1559: 0x1fd2, 0x155a: 0x1fe2, 0x155b: 0xaf2a, 0x155c: 0xaf3a, 0x155d: 0x7e95, + 0x155e: 0x7ef5, 0x155f: 0xaf6a, 0x1560: 0xaf7a, 0x1561: 0xaf8a, 0x1562: 0x1fb2, 0x1563: 0xaf99, + 0x1564: 0xafaa, 0x1565: 0xafba, 0x1566: 0x1fc2, 0x1567: 0x0040, 0x1568: 0xafca, 0x1569: 0xafda, + 0x156a: 0xafea, 0x156b: 0xaffa, 0x156c: 0x0040, 0x156d: 0x0040, 0x156e: 0x0040, 0x156f: 0x0040, + 0x1570: 0x7fd6, 0x1571: 0xb009, 0x1572: 0x7ff6, 0x1573: 0x0808, 0x1574: 0x8016, 0x1575: 0x0040, + 0x1576: 0x8036, 0x1577: 0xb031, 0x1578: 0x8056, 0x1579: 0xb059, 0x157a: 0x8076, 0x157b: 0xb081, + 0x157c: 0x8096, 0x157d: 0xb0a9, 0x157e: 0x80b6, 0x157f: 0xb0d1, + // Block 0x56, offset 0x1580 + 0x1580: 0xb0f9, 0x1581: 0xb111, 0x1582: 0xb111, 0x1583: 0xb129, 0x1584: 0xb129, 0x1585: 0xb141, + 0x1586: 0xb141, 0x1587: 0xb159, 0x1588: 0xb159, 0x1589: 0xb171, 0x158a: 0xb171, 0x158b: 0xb171, + 0x158c: 0xb171, 0x158d: 0xb189, 0x158e: 0xb189, 0x158f: 0xb1a1, 0x1590: 0xb1a1, 0x1591: 0xb1a1, + 0x1592: 0xb1a1, 0x1593: 0xb1b9, 0x1594: 0xb1b9, 0x1595: 0xb1d1, 0x1596: 0xb1d1, 0x1597: 0xb1d1, + 0x1598: 0xb1d1, 0x1599: 0xb1e9, 0x159a: 0xb1e9, 0x159b: 0xb1e9, 0x159c: 0xb1e9, 0x159d: 0xb201, + 0x159e: 0xb201, 0x159f: 0xb201, 0x15a0: 0xb201, 0x15a1: 0xb219, 0x15a2: 0xb219, 0x15a3: 0xb219, + 0x15a4: 0xb219, 0x15a5: 0xb231, 0x15a6: 0xb231, 0x15a7: 0xb231, 0x15a8: 0xb231, 0x15a9: 0xb249, + 0x15aa: 0xb249, 0x15ab: 0xb261, 0x15ac: 0xb261, 0x15ad: 0xb279, 0x15ae: 0xb279, 0x15af: 0xb291, + 0x15b0: 0xb291, 0x15b1: 0xb2a9, 0x15b2: 0xb2a9, 0x15b3: 0xb2a9, 0x15b4: 0xb2a9, 0x15b5: 0xb2c1, + 0x15b6: 0xb2c1, 0x15b7: 0xb2c1, 0x15b8: 0xb2c1, 0x15b9: 0xb2d9, 0x15ba: 0xb2d9, 0x15bb: 0xb2d9, + 0x15bc: 0xb2d9, 0x15bd: 0xb2f1, 0x15be: 0xb2f1, 0x15bf: 0xb2f1, + // Block 0x57, offset 0x15c0 + 0x15c0: 0xb2f1, 0x15c1: 0xb309, 0x15c2: 0xb309, 0x15c3: 0xb309, 0x15c4: 0xb309, 0x15c5: 0xb321, + 0x15c6: 0xb321, 0x15c7: 0xb321, 0x15c8: 0xb321, 0x15c9: 0xb339, 0x15ca: 0xb339, 0x15cb: 0xb339, + 0x15cc: 0xb339, 0x15cd: 0xb351, 0x15ce: 0xb351, 0x15cf: 0xb351, 0x15d0: 0xb351, 0x15d1: 0xb369, + 0x15d2: 0xb369, 0x15d3: 0xb369, 0x15d4: 0xb369, 0x15d5: 0xb381, 0x15d6: 0xb381, 0x15d7: 0xb381, + 0x15d8: 0xb381, 0x15d9: 0xb399, 0x15da: 0xb399, 0x15db: 0xb399, 0x15dc: 0xb399, 0x15dd: 0xb3b1, + 0x15de: 0xb3b1, 0x15df: 0xb3b1, 0x15e0: 0xb3b1, 0x15e1: 0xb3c9, 0x15e2: 0xb3c9, 0x15e3: 0xb3c9, + 0x15e4: 0xb3c9, 0x15e5: 0xb3e1, 0x15e6: 0xb3e1, 0x15e7: 0xb3e1, 0x15e8: 0xb3e1, 0x15e9: 0xb3f9, + 0x15ea: 0xb3f9, 0x15eb: 0xb3f9, 0x15ec: 0xb3f9, 0x15ed: 0xb411, 0x15ee: 0xb411, 0x15ef: 0x7ab1, + 0x15f0: 0x7ab1, 0x15f1: 0xb429, 0x15f2: 0xb429, 0x15f3: 0xb429, 0x15f4: 0xb429, 0x15f5: 0xb441, + 0x15f6: 0xb441, 0x15f7: 0xb469, 0x15f8: 0xb469, 0x15f9: 0xb491, 0x15fa: 0xb491, 0x15fb: 0xb4b9, + 0x15fc: 0xb4b9, 0x15fd: 0x0040, 0x15fe: 0x0040, 0x15ff: 0x03c0, + // Block 0x58, offset 0x1600 + 0x1600: 0x0040, 0x1601: 0xaefa, 0x1602: 0xb4e2, 0x1603: 0xaf6a, 0x1604: 0xafda, 0x1605: 0xafea, + 0x1606: 0xaf7a, 0x1607: 0xb4f2, 0x1608: 0x1fd2, 0x1609: 0x1fe2, 0x160a: 0xaf8a, 0x160b: 0x1fb2, + 0x160c: 0xaeda, 0x160d: 0xaf99, 0x160e: 0x29d1, 0x160f: 0xb502, 0x1610: 0x1f41, 0x1611: 0x00c9, + 0x1612: 0x0069, 0x1613: 0x0079, 0x1614: 0x1f51, 0x1615: 0x1f61, 0x1616: 0x1f71, 0x1617: 0x1f81, + 0x1618: 0x1f91, 0x1619: 0x1fa1, 0x161a: 0xaeea, 0x161b: 0x03c2, 0x161c: 0xafaa, 0x161d: 0x1fc2, + 0x161e: 0xafba, 0x161f: 0xaf0a, 0x1620: 0xaffa, 0x1621: 0x0039, 0x1622: 0x0ee9, 0x1623: 0x1159, + 0x1624: 0x0ef9, 0x1625: 0x0f09, 0x1626: 0x1199, 0x1627: 0x0f31, 0x1628: 0x0249, 0x1629: 0x0f41, + 0x162a: 0x0259, 0x162b: 0x0f51, 0x162c: 0x0359, 0x162d: 0x0f61, 0x162e: 0x0f71, 0x162f: 0x00d9, + 0x1630: 0x0f99, 0x1631: 0x2039, 0x1632: 0x0269, 0x1633: 0x01d9, 0x1634: 0x0fa9, 0x1635: 0x0fb9, + 0x1636: 0x1089, 0x1637: 0x0279, 0x1638: 0x0369, 0x1639: 0x0289, 0x163a: 0x13d1, 0x163b: 0xaf4a, + 0x163c: 0xafca, 0x163d: 0xaf5a, 0x163e: 0xb512, 0x163f: 0xaf1a, + // Block 0x59, offset 0x1640 + 0x1640: 0x1caa, 0x1641: 0x0039, 0x1642: 0x0ee9, 0x1643: 0x1159, 0x1644: 0x0ef9, 0x1645: 0x0f09, + 0x1646: 0x1199, 0x1647: 0x0f31, 0x1648: 0x0249, 0x1649: 0x0f41, 0x164a: 0x0259, 0x164b: 0x0f51, + 0x164c: 0x0359, 0x164d: 0x0f61, 0x164e: 0x0f71, 0x164f: 0x00d9, 0x1650: 0x0f99, 0x1651: 0x2039, + 0x1652: 0x0269, 0x1653: 0x01d9, 0x1654: 0x0fa9, 0x1655: 0x0fb9, 0x1656: 0x1089, 0x1657: 0x0279, + 0x1658: 0x0369, 0x1659: 0x0289, 0x165a: 0x13d1, 0x165b: 0xaf2a, 0x165c: 0xb522, 0x165d: 0xaf3a, + 0x165e: 0xb532, 0x165f: 0x80d5, 0x1660: 0x80f5, 0x1661: 0x29d1, 0x1662: 0x8115, 0x1663: 0x8115, + 0x1664: 0x8135, 0x1665: 0x8155, 0x1666: 0x8175, 0x1667: 0x8195, 0x1668: 0x81b5, 0x1669: 0x81d5, + 0x166a: 0x81f5, 0x166b: 0x8215, 0x166c: 0x8235, 0x166d: 0x8255, 0x166e: 0x8275, 0x166f: 0x8295, + 0x1670: 0x82b5, 0x1671: 0x82d5, 0x1672: 0x82f5, 0x1673: 0x8315, 0x1674: 0x8335, 0x1675: 0x8355, + 0x1676: 0x8375, 0x1677: 0x8395, 0x1678: 0x83b5, 0x1679: 0x83d5, 0x167a: 0x83f5, 0x167b: 0x8415, + 0x167c: 0x81b5, 0x167d: 0x8435, 0x167e: 0x8455, 0x167f: 0x8215, + // Block 0x5a, offset 0x1680 + 0x1680: 0x8475, 0x1681: 0x8495, 0x1682: 0x84b5, 0x1683: 0x84d5, 0x1684: 0x84f5, 0x1685: 0x8515, + 0x1686: 0x8535, 0x1687: 0x8555, 0x1688: 0x84d5, 0x1689: 0x8575, 0x168a: 0x84d5, 0x168b: 0x8595, + 0x168c: 0x8595, 0x168d: 0x85b5, 0x168e: 0x85b5, 0x168f: 0x85d5, 0x1690: 0x8515, 0x1691: 0x85f5, + 0x1692: 0x8615, 0x1693: 0x85f5, 0x1694: 0x8635, 0x1695: 0x8615, 0x1696: 0x8655, 0x1697: 0x8655, + 0x1698: 0x8675, 0x1699: 0x8675, 0x169a: 0x8695, 0x169b: 0x8695, 0x169c: 0x8615, 0x169d: 0x8115, + 0x169e: 0x86b5, 0x169f: 0x86d5, 0x16a0: 0x0040, 0x16a1: 0x86f5, 0x16a2: 0x8715, 0x16a3: 0x8735, + 0x16a4: 0x8755, 0x16a5: 0x8735, 0x16a6: 0x8775, 0x16a7: 0x8795, 0x16a8: 0x87b5, 0x16a9: 0x87b5, + 0x16aa: 0x87d5, 0x16ab: 0x87d5, 0x16ac: 0x87f5, 0x16ad: 0x87f5, 0x16ae: 0x87d5, 0x16af: 0x87d5, + 0x16b0: 0x8815, 0x16b1: 0x8835, 0x16b2: 0x8855, 0x16b3: 0x8875, 0x16b4: 0x8895, 0x16b5: 0x88b5, + 0x16b6: 0x88b5, 0x16b7: 0x88b5, 0x16b8: 0x88d5, 0x16b9: 0x88d5, 0x16ba: 0x88d5, 0x16bb: 0x88d5, + 0x16bc: 0x87b5, 0x16bd: 0x87b5, 0x16be: 0x87b5, 0x16bf: 0x0040, + // Block 0x5b, offset 0x16c0 + 0x16c0: 0x0040, 0x16c1: 0x0040, 0x16c2: 0x8715, 0x16c3: 0x86f5, 0x16c4: 0x88f5, 0x16c5: 0x86f5, + 0x16c6: 0x8715, 0x16c7: 0x86f5, 0x16c8: 0x0040, 0x16c9: 0x0040, 0x16ca: 0x8915, 0x16cb: 0x8715, + 0x16cc: 0x8935, 0x16cd: 0x88f5, 0x16ce: 0x8935, 0x16cf: 0x8715, 0x16d0: 0x0040, 0x16d1: 0x0040, + 0x16d2: 0x8955, 0x16d3: 0x8975, 0x16d4: 0x8875, 0x16d5: 0x8935, 0x16d6: 0x88f5, 0x16d7: 0x8935, + 0x16d8: 0x0040, 0x16d9: 0x0040, 0x16da: 0x8995, 0x16db: 0x89b5, 0x16dc: 0x8995, 0x16dd: 0x0040, + 0x16de: 0x0040, 0x16df: 0x0040, 0x16e0: 0xb541, 0x16e1: 0xb559, 0x16e2: 0xb571, 0x16e3: 0x89d6, + 0x16e4: 0xb589, 0x16e5: 0xb5a1, 0x16e6: 0x89f5, 0x16e7: 0x0040, 0x16e8: 0x8a15, 0x16e9: 0x8a35, + 0x16ea: 0x8a55, 0x16eb: 0x8a35, 0x16ec: 0x8a75, 0x16ed: 0x8a95, 0x16ee: 0x8ab5, 0x16ef: 0x0040, + 0x16f0: 0x0040, 0x16f1: 0x0040, 0x16f2: 0x0040, 0x16f3: 0x0040, 0x16f4: 0x0040, 0x16f5: 0x0040, + 0x16f6: 0x0040, 0x16f7: 0x0040, 0x16f8: 0x0040, 0x16f9: 0x0340, 0x16fa: 0x0340, 0x16fb: 0x0340, + 0x16fc: 0x0040, 0x16fd: 0x0040, 0x16fe: 0x0040, 0x16ff: 0x0040, + // Block 0x5c, offset 0x1700 + 0x1700: 0x0a08, 0x1701: 0x0a08, 0x1702: 0x0a08, 0x1703: 0x0a08, 0x1704: 0x0a08, 0x1705: 0x0c08, + 0x1706: 0x0808, 0x1707: 0x0c08, 0x1708: 0x0818, 0x1709: 0x0c08, 0x170a: 0x0c08, 0x170b: 0x0808, + 0x170c: 0x0808, 0x170d: 0x0908, 0x170e: 0x0c08, 0x170f: 0x0c08, 0x1710: 0x0c08, 0x1711: 0x0c08, + 0x1712: 0x0c08, 0x1713: 0x0a08, 0x1714: 0x0a08, 0x1715: 0x0a08, 0x1716: 0x0a08, 0x1717: 0x0908, + 0x1718: 0x0a08, 0x1719: 0x0a08, 0x171a: 0x0a08, 0x171b: 0x0a08, 0x171c: 0x0a08, 0x171d: 0x0c08, + 0x171e: 0x0a08, 0x171f: 0x0a08, 0x1720: 0x0a08, 0x1721: 0x0c08, 0x1722: 0x0808, 0x1723: 0x0808, + 0x1724: 0x0c08, 0x1725: 0x3308, 0x1726: 0x3308, 0x1727: 0x0040, 0x1728: 0x0040, 0x1729: 0x0040, + 0x172a: 0x0040, 0x172b: 0x0a18, 0x172c: 0x0a18, 0x172d: 0x0a18, 0x172e: 0x0a18, 0x172f: 0x0c18, + 0x1730: 0x0818, 0x1731: 0x0818, 0x1732: 0x0818, 0x1733: 0x0818, 0x1734: 0x0818, 0x1735: 0x0818, + 0x1736: 0x0818, 0x1737: 0x0040, 0x1738: 0x0040, 0x1739: 0x0040, 0x173a: 0x0040, 0x173b: 0x0040, + 0x173c: 0x0040, 0x173d: 0x0040, 0x173e: 0x0040, 0x173f: 0x0040, + // Block 0x5d, offset 0x1740 + 0x1740: 0x0a08, 0x1741: 0x0c08, 0x1742: 0x0a08, 0x1743: 0x0c08, 0x1744: 0x0c08, 0x1745: 0x0c08, + 0x1746: 0x0a08, 0x1747: 0x0a08, 0x1748: 0x0a08, 0x1749: 0x0c08, 0x174a: 0x0a08, 0x174b: 0x0a08, + 0x174c: 0x0c08, 0x174d: 0x0a08, 0x174e: 0x0c08, 0x174f: 0x0c08, 0x1750: 0x0a08, 0x1751: 0x0c08, + 0x1752: 0x0040, 0x1753: 0x0040, 0x1754: 0x0040, 0x1755: 0x0040, 0x1756: 0x0040, 0x1757: 0x0040, + 0x1758: 0x0040, 0x1759: 0x0818, 0x175a: 0x0818, 0x175b: 0x0818, 0x175c: 0x0818, 0x175d: 0x0040, + 0x175e: 0x0040, 0x175f: 0x0040, 0x1760: 0x0040, 0x1761: 0x0040, 0x1762: 0x0040, 0x1763: 0x0040, + 0x1764: 0x0040, 0x1765: 0x0040, 0x1766: 0x0040, 0x1767: 0x0040, 0x1768: 0x0040, 0x1769: 0x0c18, + 0x176a: 0x0c18, 0x176b: 0x0c18, 0x176c: 0x0c18, 0x176d: 0x0a18, 0x176e: 0x0a18, 0x176f: 0x0818, + 0x1770: 0x0040, 0x1771: 0x0040, 0x1772: 0x0040, 0x1773: 0x0040, 0x1774: 0x0040, 0x1775: 0x0040, + 0x1776: 0x0040, 0x1777: 0x0040, 0x1778: 0x0040, 0x1779: 0x0040, 0x177a: 0x0040, 0x177b: 0x0040, + 0x177c: 0x0040, 0x177d: 0x0040, 0x177e: 0x0040, 0x177f: 0x0040, + // Block 0x5e, offset 0x1780 + 0x1780: 0x3308, 0x1781: 0x3308, 0x1782: 0x3008, 0x1783: 0x3008, 0x1784: 0x0040, 0x1785: 0x0008, + 0x1786: 0x0008, 0x1787: 0x0008, 0x1788: 0x0008, 0x1789: 0x0008, 0x178a: 0x0008, 0x178b: 0x0008, + 0x178c: 0x0008, 0x178d: 0x0040, 0x178e: 0x0040, 0x178f: 0x0008, 0x1790: 0x0008, 0x1791: 0x0040, + 0x1792: 0x0040, 0x1793: 0x0008, 0x1794: 0x0008, 0x1795: 0x0008, 0x1796: 0x0008, 0x1797: 0x0008, + 0x1798: 0x0008, 0x1799: 0x0008, 0x179a: 0x0008, 0x179b: 0x0008, 0x179c: 0x0008, 0x179d: 0x0008, + 0x179e: 0x0008, 0x179f: 0x0008, 0x17a0: 0x0008, 0x17a1: 0x0008, 0x17a2: 0x0008, 0x17a3: 0x0008, + 0x17a4: 0x0008, 0x17a5: 0x0008, 0x17a6: 0x0008, 0x17a7: 0x0008, 0x17a8: 0x0008, 0x17a9: 0x0040, + 0x17aa: 0x0008, 0x17ab: 0x0008, 0x17ac: 0x0008, 0x17ad: 0x0008, 0x17ae: 0x0008, 0x17af: 0x0008, + 0x17b0: 0x0008, 0x17b1: 0x0040, 0x17b2: 0x0008, 0x17b3: 0x0008, 0x17b4: 0x0040, 0x17b5: 0x0008, + 0x17b6: 0x0008, 0x17b7: 0x0008, 0x17b8: 0x0008, 0x17b9: 0x0008, 0x17ba: 0x0040, 0x17bb: 0x0040, + 0x17bc: 0x3308, 0x17bd: 0x0008, 0x17be: 0x3008, 0x17bf: 0x3008, + // Block 0x5f, offset 0x17c0 + 0x17c0: 0x3308, 0x17c1: 0x3008, 0x17c2: 0x3008, 0x17c3: 0x3008, 0x17c4: 0x3008, 0x17c5: 0x0040, + 0x17c6: 0x0040, 0x17c7: 0x3008, 0x17c8: 0x3008, 0x17c9: 0x0040, 0x17ca: 0x0040, 0x17cb: 0x3008, + 0x17cc: 0x3008, 0x17cd: 0x3808, 0x17ce: 0x0040, 0x17cf: 0x0040, 0x17d0: 0x0008, 0x17d1: 0x0040, + 0x17d2: 0x0040, 0x17d3: 0x0040, 0x17d4: 0x0040, 0x17d5: 0x0040, 0x17d6: 0x0040, 0x17d7: 0x3008, + 0x17d8: 0x0040, 0x17d9: 0x0040, 0x17da: 0x0040, 0x17db: 0x0040, 0x17dc: 0x0040, 0x17dd: 0x0008, + 0x17de: 0x0008, 0x17df: 0x0008, 0x17e0: 0x0008, 0x17e1: 0x0008, 0x17e2: 0x3008, 0x17e3: 0x3008, + 0x17e4: 0x0040, 0x17e5: 0x0040, 0x17e6: 0x3308, 0x17e7: 0x3308, 0x17e8: 0x3308, 0x17e9: 0x3308, + 0x17ea: 0x3308, 0x17eb: 0x3308, 0x17ec: 0x3308, 0x17ed: 0x0040, 0x17ee: 0x0040, 0x17ef: 0x0040, + 0x17f0: 0x3308, 0x17f1: 0x3308, 0x17f2: 0x3308, 0x17f3: 0x3308, 0x17f4: 0x3308, 0x17f5: 0x0040, + 0x17f6: 0x0040, 0x17f7: 0x0040, 0x17f8: 0x0040, 0x17f9: 0x0040, 0x17fa: 0x0040, 0x17fb: 0x0040, + 0x17fc: 0x0040, 0x17fd: 0x0040, 0x17fe: 0x0040, 0x17ff: 0x0040, + // Block 0x60, offset 0x1800 + 0x1800: 0x0039, 0x1801: 0x0ee9, 0x1802: 0x1159, 0x1803: 0x0ef9, 0x1804: 0x0f09, 0x1805: 0x1199, + 0x1806: 0x0f31, 0x1807: 0x0249, 0x1808: 0x0f41, 0x1809: 0x0259, 0x180a: 0x0f51, 0x180b: 0x0359, + 0x180c: 0x0f61, 0x180d: 0x0f71, 0x180e: 0x00d9, 0x180f: 0x0f99, 0x1810: 0x2039, 0x1811: 0x0269, + 0x1812: 0x01d9, 0x1813: 0x0fa9, 0x1814: 0x0fb9, 0x1815: 0x1089, 0x1816: 0x0279, 0x1817: 0x0369, + 0x1818: 0x0289, 0x1819: 0x13d1, 0x181a: 0x0039, 0x181b: 0x0ee9, 0x181c: 0x1159, 0x181d: 0x0ef9, + 0x181e: 0x0f09, 0x181f: 0x1199, 0x1820: 0x0f31, 0x1821: 0x0249, 0x1822: 0x0f41, 0x1823: 0x0259, + 0x1824: 0x0f51, 0x1825: 0x0359, 0x1826: 0x0f61, 0x1827: 0x0f71, 0x1828: 0x00d9, 0x1829: 0x0f99, + 0x182a: 0x2039, 0x182b: 0x0269, 0x182c: 0x01d9, 0x182d: 0x0fa9, 0x182e: 0x0fb9, 0x182f: 0x1089, + 0x1830: 0x0279, 0x1831: 0x0369, 0x1832: 0x0289, 0x1833: 0x13d1, 0x1834: 0x0039, 0x1835: 0x0ee9, + 0x1836: 0x1159, 0x1837: 0x0ef9, 0x1838: 0x0f09, 0x1839: 0x1199, 0x183a: 0x0f31, 0x183b: 0x0249, + 0x183c: 0x0f41, 0x183d: 0x0259, 0x183e: 0x0f51, 0x183f: 0x0359, + // Block 0x61, offset 0x1840 + 0x1840: 0x0f61, 0x1841: 0x0f71, 0x1842: 0x00d9, 0x1843: 0x0f99, 0x1844: 0x2039, 0x1845: 0x0269, + 0x1846: 0x01d9, 0x1847: 0x0fa9, 0x1848: 0x0fb9, 0x1849: 0x1089, 0x184a: 0x0279, 0x184b: 0x0369, + 0x184c: 0x0289, 0x184d: 0x13d1, 0x184e: 0x0039, 0x184f: 0x0ee9, 0x1850: 0x1159, 0x1851: 0x0ef9, + 0x1852: 0x0f09, 0x1853: 0x1199, 0x1854: 0x0f31, 0x1855: 0x0040, 0x1856: 0x0f41, 0x1857: 0x0259, + 0x1858: 0x0f51, 0x1859: 0x0359, 0x185a: 0x0f61, 0x185b: 0x0f71, 0x185c: 0x00d9, 0x185d: 0x0f99, + 0x185e: 0x2039, 0x185f: 0x0269, 0x1860: 0x01d9, 0x1861: 0x0fa9, 0x1862: 0x0fb9, 0x1863: 0x1089, + 0x1864: 0x0279, 0x1865: 0x0369, 0x1866: 0x0289, 0x1867: 0x13d1, 0x1868: 0x0039, 0x1869: 0x0ee9, + 0x186a: 0x1159, 0x186b: 0x0ef9, 0x186c: 0x0f09, 0x186d: 0x1199, 0x186e: 0x0f31, 0x186f: 0x0249, + 0x1870: 0x0f41, 0x1871: 0x0259, 0x1872: 0x0f51, 0x1873: 0x0359, 0x1874: 0x0f61, 0x1875: 0x0f71, + 0x1876: 0x00d9, 0x1877: 0x0f99, 0x1878: 0x2039, 0x1879: 0x0269, 0x187a: 0x01d9, 0x187b: 0x0fa9, + 0x187c: 0x0fb9, 0x187d: 0x1089, 0x187e: 0x0279, 0x187f: 0x0369, + // Block 0x62, offset 0x1880 + 0x1880: 0x0289, 0x1881: 0x13d1, 0x1882: 0x0039, 0x1883: 0x0ee9, 0x1884: 0x1159, 0x1885: 0x0ef9, + 0x1886: 0x0f09, 0x1887: 0x1199, 0x1888: 0x0f31, 0x1889: 0x0249, 0x188a: 0x0f41, 0x188b: 0x0259, + 0x188c: 0x0f51, 0x188d: 0x0359, 0x188e: 0x0f61, 0x188f: 0x0f71, 0x1890: 0x00d9, 0x1891: 0x0f99, + 0x1892: 0x2039, 0x1893: 0x0269, 0x1894: 0x01d9, 0x1895: 0x0fa9, 0x1896: 0x0fb9, 0x1897: 0x1089, + 0x1898: 0x0279, 0x1899: 0x0369, 0x189a: 0x0289, 0x189b: 0x13d1, 0x189c: 0x0039, 0x189d: 0x0040, + 0x189e: 0x1159, 0x189f: 0x0ef9, 0x18a0: 0x0040, 0x18a1: 0x0040, 0x18a2: 0x0f31, 0x18a3: 0x0040, + 0x18a4: 0x0040, 0x18a5: 0x0259, 0x18a6: 0x0f51, 0x18a7: 0x0040, 0x18a8: 0x0040, 0x18a9: 0x0f71, + 0x18aa: 0x00d9, 0x18ab: 0x0f99, 0x18ac: 0x2039, 0x18ad: 0x0040, 0x18ae: 0x01d9, 0x18af: 0x0fa9, + 0x18b0: 0x0fb9, 0x18b1: 0x1089, 0x18b2: 0x0279, 0x18b3: 0x0369, 0x18b4: 0x0289, 0x18b5: 0x13d1, + 0x18b6: 0x0039, 0x18b7: 0x0ee9, 0x18b8: 0x1159, 0x18b9: 0x0ef9, 0x18ba: 0x0040, 0x18bb: 0x1199, + 0x18bc: 0x0040, 0x18bd: 0x0249, 0x18be: 0x0f41, 0x18bf: 0x0259, + // Block 0x63, offset 0x18c0 + 0x18c0: 0x0f51, 0x18c1: 0x0359, 0x18c2: 0x0f61, 0x18c3: 0x0f71, 0x18c4: 0x0040, 0x18c5: 0x0f99, + 0x18c6: 0x2039, 0x18c7: 0x0269, 0x18c8: 0x01d9, 0x18c9: 0x0fa9, 0x18ca: 0x0fb9, 0x18cb: 0x1089, + 0x18cc: 0x0279, 0x18cd: 0x0369, 0x18ce: 0x0289, 0x18cf: 0x13d1, 0x18d0: 0x0039, 0x18d1: 0x0ee9, + 0x18d2: 0x1159, 0x18d3: 0x0ef9, 0x18d4: 0x0f09, 0x18d5: 0x1199, 0x18d6: 0x0f31, 0x18d7: 0x0249, + 0x18d8: 0x0f41, 0x18d9: 0x0259, 0x18da: 0x0f51, 0x18db: 0x0359, 0x18dc: 0x0f61, 0x18dd: 0x0f71, + 0x18de: 0x00d9, 0x18df: 0x0f99, 0x18e0: 0x2039, 0x18e1: 0x0269, 0x18e2: 0x01d9, 0x18e3: 0x0fa9, + 0x18e4: 0x0fb9, 0x18e5: 0x1089, 0x18e6: 0x0279, 0x18e7: 0x0369, 0x18e8: 0x0289, 0x18e9: 0x13d1, + 0x18ea: 0x0039, 0x18eb: 0x0ee9, 0x18ec: 0x1159, 0x18ed: 0x0ef9, 0x18ee: 0x0f09, 0x18ef: 0x1199, + 0x18f0: 0x0f31, 0x18f1: 0x0249, 0x18f2: 0x0f41, 0x18f3: 0x0259, 0x18f4: 0x0f51, 0x18f5: 0x0359, + 0x18f6: 0x0f61, 0x18f7: 0x0f71, 0x18f8: 0x00d9, 0x18f9: 0x0f99, 0x18fa: 0x2039, 0x18fb: 0x0269, + 0x18fc: 0x01d9, 0x18fd: 0x0fa9, 0x18fe: 0x0fb9, 0x18ff: 0x1089, + // Block 0x64, offset 0x1900 + 0x1900: 0x0279, 0x1901: 0x0369, 0x1902: 0x0289, 0x1903: 0x13d1, 0x1904: 0x0039, 0x1905: 0x0ee9, + 0x1906: 0x0040, 0x1907: 0x0ef9, 0x1908: 0x0f09, 0x1909: 0x1199, 0x190a: 0x0f31, 0x190b: 0x0040, + 0x190c: 0x0040, 0x190d: 0x0259, 0x190e: 0x0f51, 0x190f: 0x0359, 0x1910: 0x0f61, 0x1911: 0x0f71, + 0x1912: 0x00d9, 0x1913: 0x0f99, 0x1914: 0x2039, 0x1915: 0x0040, 0x1916: 0x01d9, 0x1917: 0x0fa9, + 0x1918: 0x0fb9, 0x1919: 0x1089, 0x191a: 0x0279, 0x191b: 0x0369, 0x191c: 0x0289, 0x191d: 0x0040, + 0x191e: 0x0039, 0x191f: 0x0ee9, 0x1920: 0x1159, 0x1921: 0x0ef9, 0x1922: 0x0f09, 0x1923: 0x1199, + 0x1924: 0x0f31, 0x1925: 0x0249, 0x1926: 0x0f41, 0x1927: 0x0259, 0x1928: 0x0f51, 0x1929: 0x0359, + 0x192a: 0x0f61, 0x192b: 0x0f71, 0x192c: 0x00d9, 0x192d: 0x0f99, 0x192e: 0x2039, 0x192f: 0x0269, + 0x1930: 0x01d9, 0x1931: 0x0fa9, 0x1932: 0x0fb9, 0x1933: 0x1089, 0x1934: 0x0279, 0x1935: 0x0369, + 0x1936: 0x0289, 0x1937: 0x13d1, 0x1938: 0x0039, 0x1939: 0x0ee9, 0x193a: 0x0040, 0x193b: 0x0ef9, + 0x193c: 0x0f09, 0x193d: 0x1199, 0x193e: 0x0f31, 0x193f: 0x0040, + // Block 0x65, offset 0x1940 + 0x1940: 0x0f41, 0x1941: 0x0259, 0x1942: 0x0f51, 0x1943: 0x0359, 0x1944: 0x0f61, 0x1945: 0x0040, + 0x1946: 0x00d9, 0x1947: 0x0040, 0x1948: 0x0040, 0x1949: 0x0040, 0x194a: 0x01d9, 0x194b: 0x0fa9, + 0x194c: 0x0fb9, 0x194d: 0x1089, 0x194e: 0x0279, 0x194f: 0x0369, 0x1950: 0x0289, 0x1951: 0x0040, + 0x1952: 0x0039, 0x1953: 0x0ee9, 0x1954: 0x1159, 0x1955: 0x0ef9, 0x1956: 0x0f09, 0x1957: 0x1199, + 0x1958: 0x0f31, 0x1959: 0x0249, 0x195a: 0x0f41, 0x195b: 0x0259, 0x195c: 0x0f51, 0x195d: 0x0359, + 0x195e: 0x0f61, 0x195f: 0x0f71, 0x1960: 0x00d9, 0x1961: 0x0f99, 0x1962: 0x2039, 0x1963: 0x0269, + 0x1964: 0x01d9, 0x1965: 0x0fa9, 0x1966: 0x0fb9, 0x1967: 0x1089, 0x1968: 0x0279, 0x1969: 0x0369, + 0x196a: 0x0289, 0x196b: 0x13d1, 0x196c: 0x0039, 0x196d: 0x0ee9, 0x196e: 0x1159, 0x196f: 0x0ef9, + 0x1970: 0x0f09, 0x1971: 0x1199, 0x1972: 0x0f31, 0x1973: 0x0249, 0x1974: 0x0f41, 0x1975: 0x0259, + 0x1976: 0x0f51, 0x1977: 0x0359, 0x1978: 0x0f61, 0x1979: 0x0f71, 0x197a: 0x00d9, 0x197b: 0x0f99, + 0x197c: 0x2039, 0x197d: 0x0269, 0x197e: 0x01d9, 0x197f: 0x0fa9, + // Block 0x66, offset 0x1980 + 0x1980: 0x0fb9, 0x1981: 0x1089, 0x1982: 0x0279, 0x1983: 0x0369, 0x1984: 0x0289, 0x1985: 0x13d1, + 0x1986: 0x0039, 0x1987: 0x0ee9, 0x1988: 0x1159, 0x1989: 0x0ef9, 0x198a: 0x0f09, 0x198b: 0x1199, + 0x198c: 0x0f31, 0x198d: 0x0249, 0x198e: 0x0f41, 0x198f: 0x0259, 0x1990: 0x0f51, 0x1991: 0x0359, + 0x1992: 0x0f61, 0x1993: 0x0f71, 0x1994: 0x00d9, 0x1995: 0x0f99, 0x1996: 0x2039, 0x1997: 0x0269, + 0x1998: 0x01d9, 0x1999: 0x0fa9, 0x199a: 0x0fb9, 0x199b: 0x1089, 0x199c: 0x0279, 0x199d: 0x0369, + 0x199e: 0x0289, 0x199f: 0x13d1, 0x19a0: 0x0039, 0x19a1: 0x0ee9, 0x19a2: 0x1159, 0x19a3: 0x0ef9, + 0x19a4: 0x0f09, 0x19a5: 0x1199, 0x19a6: 0x0f31, 0x19a7: 0x0249, 0x19a8: 0x0f41, 0x19a9: 0x0259, + 0x19aa: 0x0f51, 0x19ab: 0x0359, 0x19ac: 0x0f61, 0x19ad: 0x0f71, 0x19ae: 0x00d9, 0x19af: 0x0f99, + 0x19b0: 0x2039, 0x19b1: 0x0269, 0x19b2: 0x01d9, 0x19b3: 0x0fa9, 0x19b4: 0x0fb9, 0x19b5: 0x1089, + 0x19b6: 0x0279, 0x19b7: 0x0369, 0x19b8: 0x0289, 0x19b9: 0x13d1, 0x19ba: 0x0039, 0x19bb: 0x0ee9, + 0x19bc: 0x1159, 0x19bd: 0x0ef9, 0x19be: 0x0f09, 0x19bf: 0x1199, + // Block 0x67, offset 0x19c0 + 0x19c0: 0x0f31, 0x19c1: 0x0249, 0x19c2: 0x0f41, 0x19c3: 0x0259, 0x19c4: 0x0f51, 0x19c5: 0x0359, + 0x19c6: 0x0f61, 0x19c7: 0x0f71, 0x19c8: 0x00d9, 0x19c9: 0x0f99, 0x19ca: 0x2039, 0x19cb: 0x0269, + 0x19cc: 0x01d9, 0x19cd: 0x0fa9, 0x19ce: 0x0fb9, 0x19cf: 0x1089, 0x19d0: 0x0279, 0x19d1: 0x0369, + 0x19d2: 0x0289, 0x19d3: 0x13d1, 0x19d4: 0x0039, 0x19d5: 0x0ee9, 0x19d6: 0x1159, 0x19d7: 0x0ef9, + 0x19d8: 0x0f09, 0x19d9: 0x1199, 0x19da: 0x0f31, 0x19db: 0x0249, 0x19dc: 0x0f41, 0x19dd: 0x0259, + 0x19de: 0x0f51, 0x19df: 0x0359, 0x19e0: 0x0f61, 0x19e1: 0x0f71, 0x19e2: 0x00d9, 0x19e3: 0x0f99, + 0x19e4: 0x2039, 0x19e5: 0x0269, 0x19e6: 0x01d9, 0x19e7: 0x0fa9, 0x19e8: 0x0fb9, 0x19e9: 0x1089, + 0x19ea: 0x0279, 0x19eb: 0x0369, 0x19ec: 0x0289, 0x19ed: 0x13d1, 0x19ee: 0x0039, 0x19ef: 0x0ee9, + 0x19f0: 0x1159, 0x19f1: 0x0ef9, 0x19f2: 0x0f09, 0x19f3: 0x1199, 0x19f4: 0x0f31, 0x19f5: 0x0249, + 0x19f6: 0x0f41, 0x19f7: 0x0259, 0x19f8: 0x0f51, 0x19f9: 0x0359, 0x19fa: 0x0f61, 0x19fb: 0x0f71, + 0x19fc: 0x00d9, 0x19fd: 0x0f99, 0x19fe: 0x2039, 0x19ff: 0x0269, + // Block 0x68, offset 0x1a00 + 0x1a00: 0x01d9, 0x1a01: 0x0fa9, 0x1a02: 0x0fb9, 0x1a03: 0x1089, 0x1a04: 0x0279, 0x1a05: 0x0369, + 0x1a06: 0x0289, 0x1a07: 0x13d1, 0x1a08: 0x0039, 0x1a09: 0x0ee9, 0x1a0a: 0x1159, 0x1a0b: 0x0ef9, + 0x1a0c: 0x0f09, 0x1a0d: 0x1199, 0x1a0e: 0x0f31, 0x1a0f: 0x0249, 0x1a10: 0x0f41, 0x1a11: 0x0259, + 0x1a12: 0x0f51, 0x1a13: 0x0359, 0x1a14: 0x0f61, 0x1a15: 0x0f71, 0x1a16: 0x00d9, 0x1a17: 0x0f99, + 0x1a18: 0x2039, 0x1a19: 0x0269, 0x1a1a: 0x01d9, 0x1a1b: 0x0fa9, 0x1a1c: 0x0fb9, 0x1a1d: 0x1089, + 0x1a1e: 0x0279, 0x1a1f: 0x0369, 0x1a20: 0x0289, 0x1a21: 0x13d1, 0x1a22: 0x0039, 0x1a23: 0x0ee9, + 0x1a24: 0x1159, 0x1a25: 0x0ef9, 0x1a26: 0x0f09, 0x1a27: 0x1199, 0x1a28: 0x0f31, 0x1a29: 0x0249, + 0x1a2a: 0x0f41, 0x1a2b: 0x0259, 0x1a2c: 0x0f51, 0x1a2d: 0x0359, 0x1a2e: 0x0f61, 0x1a2f: 0x0f71, + 0x1a30: 0x00d9, 0x1a31: 0x0f99, 0x1a32: 0x2039, 0x1a33: 0x0269, 0x1a34: 0x01d9, 0x1a35: 0x0fa9, + 0x1a36: 0x0fb9, 0x1a37: 0x1089, 0x1a38: 0x0279, 0x1a39: 0x0369, 0x1a3a: 0x0289, 0x1a3b: 0x13d1, + 0x1a3c: 0x0039, 0x1a3d: 0x0ee9, 0x1a3e: 0x1159, 0x1a3f: 0x0ef9, + // Block 0x69, offset 0x1a40 + 0x1a40: 0x0f09, 0x1a41: 0x1199, 0x1a42: 0x0f31, 0x1a43: 0x0249, 0x1a44: 0x0f41, 0x1a45: 0x0259, + 0x1a46: 0x0f51, 0x1a47: 0x0359, 0x1a48: 0x0f61, 0x1a49: 0x0f71, 0x1a4a: 0x00d9, 0x1a4b: 0x0f99, + 0x1a4c: 0x2039, 0x1a4d: 0x0269, 0x1a4e: 0x01d9, 0x1a4f: 0x0fa9, 0x1a50: 0x0fb9, 0x1a51: 0x1089, + 0x1a52: 0x0279, 0x1a53: 0x0369, 0x1a54: 0x0289, 0x1a55: 0x13d1, 0x1a56: 0x0039, 0x1a57: 0x0ee9, + 0x1a58: 0x1159, 0x1a59: 0x0ef9, 0x1a5a: 0x0f09, 0x1a5b: 0x1199, 0x1a5c: 0x0f31, 0x1a5d: 0x0249, + 0x1a5e: 0x0f41, 0x1a5f: 0x0259, 0x1a60: 0x0f51, 0x1a61: 0x0359, 0x1a62: 0x0f61, 0x1a63: 0x0f71, + 0x1a64: 0x00d9, 0x1a65: 0x0f99, 0x1a66: 0x2039, 0x1a67: 0x0269, 0x1a68: 0x01d9, 0x1a69: 0x0fa9, + 0x1a6a: 0x0fb9, 0x1a6b: 0x1089, 0x1a6c: 0x0279, 0x1a6d: 0x0369, 0x1a6e: 0x0289, 0x1a6f: 0x13d1, + 0x1a70: 0x0039, 0x1a71: 0x0ee9, 0x1a72: 0x1159, 0x1a73: 0x0ef9, 0x1a74: 0x0f09, 0x1a75: 0x1199, + 0x1a76: 0x0f31, 0x1a77: 0x0249, 0x1a78: 0x0f41, 0x1a79: 0x0259, 0x1a7a: 0x0f51, 0x1a7b: 0x0359, + 0x1a7c: 0x0f61, 0x1a7d: 0x0f71, 0x1a7e: 0x00d9, 0x1a7f: 0x0f99, + // Block 0x6a, offset 0x1a80 + 0x1a80: 0x2039, 0x1a81: 0x0269, 0x1a82: 0x01d9, 0x1a83: 0x0fa9, 0x1a84: 0x0fb9, 0x1a85: 0x1089, + 0x1a86: 0x0279, 0x1a87: 0x0369, 0x1a88: 0x0289, 0x1a89: 0x13d1, 0x1a8a: 0x0039, 0x1a8b: 0x0ee9, + 0x1a8c: 0x1159, 0x1a8d: 0x0ef9, 0x1a8e: 0x0f09, 0x1a8f: 0x1199, 0x1a90: 0x0f31, 0x1a91: 0x0249, + 0x1a92: 0x0f41, 0x1a93: 0x0259, 0x1a94: 0x0f51, 0x1a95: 0x0359, 0x1a96: 0x0f61, 0x1a97: 0x0f71, + 0x1a98: 0x00d9, 0x1a99: 0x0f99, 0x1a9a: 0x2039, 0x1a9b: 0x0269, 0x1a9c: 0x01d9, 0x1a9d: 0x0fa9, + 0x1a9e: 0x0fb9, 0x1a9f: 0x1089, 0x1aa0: 0x0279, 0x1aa1: 0x0369, 0x1aa2: 0x0289, 0x1aa3: 0x13d1, + 0x1aa4: 0xba81, 0x1aa5: 0xba99, 0x1aa6: 0x0040, 0x1aa7: 0x0040, 0x1aa8: 0xbab1, 0x1aa9: 0x1099, + 0x1aaa: 0x10b1, 0x1aab: 0x10c9, 0x1aac: 0xbac9, 0x1aad: 0xbae1, 0x1aae: 0xbaf9, 0x1aaf: 0x1429, + 0x1ab0: 0x1a31, 0x1ab1: 0xbb11, 0x1ab2: 0xbb29, 0x1ab3: 0xbb41, 0x1ab4: 0xbb59, 0x1ab5: 0xbb71, + 0x1ab6: 0xbb89, 0x1ab7: 0x2109, 0x1ab8: 0x1111, 0x1ab9: 0x1429, 0x1aba: 0xbba1, 0x1abb: 0xbbb9, + 0x1abc: 0xbbd1, 0x1abd: 0x10e1, 0x1abe: 0x10f9, 0x1abf: 0xbbe9, + // Block 0x6b, offset 0x1ac0 + 0x1ac0: 0x2079, 0x1ac1: 0xbc01, 0x1ac2: 0xbab1, 0x1ac3: 0x1099, 0x1ac4: 0x10b1, 0x1ac5: 0x10c9, + 0x1ac6: 0xbac9, 0x1ac7: 0xbae1, 0x1ac8: 0xbaf9, 0x1ac9: 0x1429, 0x1aca: 0x1a31, 0x1acb: 0xbb11, + 0x1acc: 0xbb29, 0x1acd: 0xbb41, 0x1ace: 0xbb59, 0x1acf: 0xbb71, 0x1ad0: 0xbb89, 0x1ad1: 0x2109, + 0x1ad2: 0x1111, 0x1ad3: 0xbba1, 0x1ad4: 0xbba1, 0x1ad5: 0xbbb9, 0x1ad6: 0xbbd1, 0x1ad7: 0x10e1, + 0x1ad8: 0x10f9, 0x1ad9: 0xbbe9, 0x1ada: 0x2079, 0x1adb: 0xbc21, 0x1adc: 0xbac9, 0x1add: 0x1429, + 0x1ade: 0xbb11, 0x1adf: 0x10e1, 0x1ae0: 0x1111, 0x1ae1: 0x2109, 0x1ae2: 0xbab1, 0x1ae3: 0x1099, + 0x1ae4: 0x10b1, 0x1ae5: 0x10c9, 0x1ae6: 0xbac9, 0x1ae7: 0xbae1, 0x1ae8: 0xbaf9, 0x1ae9: 0x1429, + 0x1aea: 0x1a31, 0x1aeb: 0xbb11, 0x1aec: 0xbb29, 0x1aed: 0xbb41, 0x1aee: 0xbb59, 0x1aef: 0xbb71, + 0x1af0: 0xbb89, 0x1af1: 0x2109, 0x1af2: 0x1111, 0x1af3: 0x1429, 0x1af4: 0xbba1, 0x1af5: 0xbbb9, + 0x1af6: 0xbbd1, 0x1af7: 0x10e1, 0x1af8: 0x10f9, 0x1af9: 0xbbe9, 0x1afa: 0x2079, 0x1afb: 0xbc01, + 0x1afc: 0xbab1, 0x1afd: 0x1099, 0x1afe: 0x10b1, 0x1aff: 0x10c9, + // Block 0x6c, offset 0x1b00 + 0x1b00: 0xbac9, 0x1b01: 0xbae1, 0x1b02: 0xbaf9, 0x1b03: 0x1429, 0x1b04: 0x1a31, 0x1b05: 0xbb11, + 0x1b06: 0xbb29, 0x1b07: 0xbb41, 0x1b08: 0xbb59, 0x1b09: 0xbb71, 0x1b0a: 0xbb89, 0x1b0b: 0x2109, + 0x1b0c: 0x1111, 0x1b0d: 0xbba1, 0x1b0e: 0xbba1, 0x1b0f: 0xbbb9, 0x1b10: 0xbbd1, 0x1b11: 0x10e1, + 0x1b12: 0x10f9, 0x1b13: 0xbbe9, 0x1b14: 0x2079, 0x1b15: 0xbc21, 0x1b16: 0xbac9, 0x1b17: 0x1429, + 0x1b18: 0xbb11, 0x1b19: 0x10e1, 0x1b1a: 0x1111, 0x1b1b: 0x2109, 0x1b1c: 0xbab1, 0x1b1d: 0x1099, + 0x1b1e: 0x10b1, 0x1b1f: 0x10c9, 0x1b20: 0xbac9, 0x1b21: 0xbae1, 0x1b22: 0xbaf9, 0x1b23: 0x1429, + 0x1b24: 0x1a31, 0x1b25: 0xbb11, 0x1b26: 0xbb29, 0x1b27: 0xbb41, 0x1b28: 0xbb59, 0x1b29: 0xbb71, + 0x1b2a: 0xbb89, 0x1b2b: 0x2109, 0x1b2c: 0x1111, 0x1b2d: 0x1429, 0x1b2e: 0xbba1, 0x1b2f: 0xbbb9, + 0x1b30: 0xbbd1, 0x1b31: 0x10e1, 0x1b32: 0x10f9, 0x1b33: 0xbbe9, 0x1b34: 0x2079, 0x1b35: 0xbc01, + 0x1b36: 0xbab1, 0x1b37: 0x1099, 0x1b38: 0x10b1, 0x1b39: 0x10c9, 0x1b3a: 0xbac9, 0x1b3b: 0xbae1, + 0x1b3c: 0xbaf9, 0x1b3d: 0x1429, 0x1b3e: 0x1a31, 0x1b3f: 0xbb11, + // Block 0x6d, offset 0x1b40 + 0x1b40: 0xbb29, 0x1b41: 0xbb41, 0x1b42: 0xbb59, 0x1b43: 0xbb71, 0x1b44: 0xbb89, 0x1b45: 0x2109, + 0x1b46: 0x1111, 0x1b47: 0xbba1, 0x1b48: 0xbba1, 0x1b49: 0xbbb9, 0x1b4a: 0xbbd1, 0x1b4b: 0x10e1, + 0x1b4c: 0x10f9, 0x1b4d: 0xbbe9, 0x1b4e: 0x2079, 0x1b4f: 0xbc21, 0x1b50: 0xbac9, 0x1b51: 0x1429, + 0x1b52: 0xbb11, 0x1b53: 0x10e1, 0x1b54: 0x1111, 0x1b55: 0x2109, 0x1b56: 0xbab1, 0x1b57: 0x1099, + 0x1b58: 0x10b1, 0x1b59: 0x10c9, 0x1b5a: 0xbac9, 0x1b5b: 0xbae1, 0x1b5c: 0xbaf9, 0x1b5d: 0x1429, + 0x1b5e: 0x1a31, 0x1b5f: 0xbb11, 0x1b60: 0xbb29, 0x1b61: 0xbb41, 0x1b62: 0xbb59, 0x1b63: 0xbb71, + 0x1b64: 0xbb89, 0x1b65: 0x2109, 0x1b66: 0x1111, 0x1b67: 0x1429, 0x1b68: 0xbba1, 0x1b69: 0xbbb9, + 0x1b6a: 0xbbd1, 0x1b6b: 0x10e1, 0x1b6c: 0x10f9, 0x1b6d: 0xbbe9, 0x1b6e: 0x2079, 0x1b6f: 0xbc01, + 0x1b70: 0xbab1, 0x1b71: 0x1099, 0x1b72: 0x10b1, 0x1b73: 0x10c9, 0x1b74: 0xbac9, 0x1b75: 0xbae1, + 0x1b76: 0xbaf9, 0x1b77: 0x1429, 0x1b78: 0x1a31, 0x1b79: 0xbb11, 0x1b7a: 0xbb29, 0x1b7b: 0xbb41, + 0x1b7c: 0xbb59, 0x1b7d: 0xbb71, 0x1b7e: 0xbb89, 0x1b7f: 0x2109, + // Block 0x6e, offset 0x1b80 + 0x1b80: 0x1111, 0x1b81: 0xbba1, 0x1b82: 0xbba1, 0x1b83: 0xbbb9, 0x1b84: 0xbbd1, 0x1b85: 0x10e1, + 0x1b86: 0x10f9, 0x1b87: 0xbbe9, 0x1b88: 0x2079, 0x1b89: 0xbc21, 0x1b8a: 0xbac9, 0x1b8b: 0x1429, + 0x1b8c: 0xbb11, 0x1b8d: 0x10e1, 0x1b8e: 0x1111, 0x1b8f: 0x2109, 0x1b90: 0xbab1, 0x1b91: 0x1099, + 0x1b92: 0x10b1, 0x1b93: 0x10c9, 0x1b94: 0xbac9, 0x1b95: 0xbae1, 0x1b96: 0xbaf9, 0x1b97: 0x1429, + 0x1b98: 0x1a31, 0x1b99: 0xbb11, 0x1b9a: 0xbb29, 0x1b9b: 0xbb41, 0x1b9c: 0xbb59, 0x1b9d: 0xbb71, + 0x1b9e: 0xbb89, 0x1b9f: 0x2109, 0x1ba0: 0x1111, 0x1ba1: 0x1429, 0x1ba2: 0xbba1, 0x1ba3: 0xbbb9, + 0x1ba4: 0xbbd1, 0x1ba5: 0x10e1, 0x1ba6: 0x10f9, 0x1ba7: 0xbbe9, 0x1ba8: 0x2079, 0x1ba9: 0xbc01, + 0x1baa: 0xbab1, 0x1bab: 0x1099, 0x1bac: 0x10b1, 0x1bad: 0x10c9, 0x1bae: 0xbac9, 0x1baf: 0xbae1, + 0x1bb0: 0xbaf9, 0x1bb1: 0x1429, 0x1bb2: 0x1a31, 0x1bb3: 0xbb11, 0x1bb4: 0xbb29, 0x1bb5: 0xbb41, + 0x1bb6: 0xbb59, 0x1bb7: 0xbb71, 0x1bb8: 0xbb89, 0x1bb9: 0x2109, 0x1bba: 0x1111, 0x1bbb: 0xbba1, + 0x1bbc: 0xbba1, 0x1bbd: 0xbbb9, 0x1bbe: 0xbbd1, 0x1bbf: 0x10e1, + // Block 0x6f, offset 0x1bc0 + 0x1bc0: 0x10f9, 0x1bc1: 0xbbe9, 0x1bc2: 0x2079, 0x1bc3: 0xbc21, 0x1bc4: 0xbac9, 0x1bc5: 0x1429, + 0x1bc6: 0xbb11, 0x1bc7: 0x10e1, 0x1bc8: 0x1111, 0x1bc9: 0x2109, 0x1bca: 0xbc41, 0x1bcb: 0xbc41, + 0x1bcc: 0x0040, 0x1bcd: 0x0040, 0x1bce: 0x1f41, 0x1bcf: 0x00c9, 0x1bd0: 0x0069, 0x1bd1: 0x0079, + 0x1bd2: 0x1f51, 0x1bd3: 0x1f61, 0x1bd4: 0x1f71, 0x1bd5: 0x1f81, 0x1bd6: 0x1f91, 0x1bd7: 0x1fa1, + 0x1bd8: 0x1f41, 0x1bd9: 0x00c9, 0x1bda: 0x0069, 0x1bdb: 0x0079, 0x1bdc: 0x1f51, 0x1bdd: 0x1f61, + 0x1bde: 0x1f71, 0x1bdf: 0x1f81, 0x1be0: 0x1f91, 0x1be1: 0x1fa1, 0x1be2: 0x1f41, 0x1be3: 0x00c9, + 0x1be4: 0x0069, 0x1be5: 0x0079, 0x1be6: 0x1f51, 0x1be7: 0x1f61, 0x1be8: 0x1f71, 0x1be9: 0x1f81, + 0x1bea: 0x1f91, 0x1beb: 0x1fa1, 0x1bec: 0x1f41, 0x1bed: 0x00c9, 0x1bee: 0x0069, 0x1bef: 0x0079, + 0x1bf0: 0x1f51, 0x1bf1: 0x1f61, 0x1bf2: 0x1f71, 0x1bf3: 0x1f81, 0x1bf4: 0x1f91, 0x1bf5: 0x1fa1, + 0x1bf6: 0x1f41, 0x1bf7: 0x00c9, 0x1bf8: 0x0069, 0x1bf9: 0x0079, 0x1bfa: 0x1f51, 0x1bfb: 0x1f61, + 0x1bfc: 0x1f71, 0x1bfd: 0x1f81, 0x1bfe: 0x1f91, 0x1bff: 0x1fa1, + // Block 0x70, offset 0x1c00 + 0x1c00: 0xe115, 0x1c01: 0xe115, 0x1c02: 0xe135, 0x1c03: 0xe135, 0x1c04: 0xe115, 0x1c05: 0xe115, + 0x1c06: 0xe175, 0x1c07: 0xe175, 0x1c08: 0xe115, 0x1c09: 0xe115, 0x1c0a: 0xe135, 0x1c0b: 0xe135, + 0x1c0c: 0xe115, 0x1c0d: 0xe115, 0x1c0e: 0xe1f5, 0x1c0f: 0xe1f5, 0x1c10: 0xe115, 0x1c11: 0xe115, + 0x1c12: 0xe135, 0x1c13: 0xe135, 0x1c14: 0xe115, 0x1c15: 0xe115, 0x1c16: 0xe175, 0x1c17: 0xe175, + 0x1c18: 0xe115, 0x1c19: 0xe115, 0x1c1a: 0xe135, 0x1c1b: 0xe135, 0x1c1c: 0xe115, 0x1c1d: 0xe115, + 0x1c1e: 0x8b05, 0x1c1f: 0x8b05, 0x1c20: 0x04b5, 0x1c21: 0x04b5, 0x1c22: 0x0a08, 0x1c23: 0x0a08, + 0x1c24: 0x0a08, 0x1c25: 0x0a08, 0x1c26: 0x0a08, 0x1c27: 0x0a08, 0x1c28: 0x0a08, 0x1c29: 0x0a08, + 0x1c2a: 0x0a08, 0x1c2b: 0x0a08, 0x1c2c: 0x0a08, 0x1c2d: 0x0a08, 0x1c2e: 0x0a08, 0x1c2f: 0x0a08, + 0x1c30: 0x0a08, 0x1c31: 0x0a08, 0x1c32: 0x0a08, 0x1c33: 0x0a08, 0x1c34: 0x0a08, 0x1c35: 0x0a08, + 0x1c36: 0x0a08, 0x1c37: 0x0a08, 0x1c38: 0x0a08, 0x1c39: 0x0a08, 0x1c3a: 0x0a08, 0x1c3b: 0x0a08, + 0x1c3c: 0x0a08, 0x1c3d: 0x0a08, 0x1c3e: 0x0a08, 0x1c3f: 0x0a08, + // Block 0x71, offset 0x1c40 + 0x1c40: 0xb189, 0x1c41: 0xb1a1, 0x1c42: 0xb201, 0x1c43: 0xb249, 0x1c44: 0x0040, 0x1c45: 0xb411, + 0x1c46: 0xb291, 0x1c47: 0xb219, 0x1c48: 0xb309, 0x1c49: 0xb429, 0x1c4a: 0xb399, 0x1c4b: 0xb3b1, + 0x1c4c: 0xb3c9, 0x1c4d: 0xb3e1, 0x1c4e: 0xb2a9, 0x1c4f: 0xb339, 0x1c50: 0xb369, 0x1c51: 0xb2d9, + 0x1c52: 0xb381, 0x1c53: 0xb279, 0x1c54: 0xb2c1, 0x1c55: 0xb1d1, 0x1c56: 0xb1e9, 0x1c57: 0xb231, + 0x1c58: 0xb261, 0x1c59: 0xb2f1, 0x1c5a: 0xb321, 0x1c5b: 0xb351, 0x1c5c: 0xbc59, 0x1c5d: 0x7949, + 0x1c5e: 0xbc71, 0x1c5f: 0xbc89, 0x1c60: 0x0040, 0x1c61: 0xb1a1, 0x1c62: 0xb201, 0x1c63: 0x0040, + 0x1c64: 0xb3f9, 0x1c65: 0x0040, 0x1c66: 0x0040, 0x1c67: 0xb219, 0x1c68: 0x0040, 0x1c69: 0xb429, + 0x1c6a: 0xb399, 0x1c6b: 0xb3b1, 0x1c6c: 0xb3c9, 0x1c6d: 0xb3e1, 0x1c6e: 0xb2a9, 0x1c6f: 0xb339, + 0x1c70: 0xb369, 0x1c71: 0xb2d9, 0x1c72: 0xb381, 0x1c73: 0x0040, 0x1c74: 0xb2c1, 0x1c75: 0xb1d1, + 0x1c76: 0xb1e9, 0x1c77: 0xb231, 0x1c78: 0x0040, 0x1c79: 0xb2f1, 0x1c7a: 0x0040, 0x1c7b: 0xb351, + 0x1c7c: 0x0040, 0x1c7d: 0x0040, 0x1c7e: 0x0040, 0x1c7f: 0x0040, + // Block 0x72, offset 0x1c80 + 0x1c80: 0x0040, 0x1c81: 0x0040, 0x1c82: 0xb201, 0x1c83: 0x0040, 0x1c84: 0x0040, 0x1c85: 0x0040, + 0x1c86: 0x0040, 0x1c87: 0xb219, 0x1c88: 0x0040, 0x1c89: 0xb429, 0x1c8a: 0x0040, 0x1c8b: 0xb3b1, + 0x1c8c: 0x0040, 0x1c8d: 0xb3e1, 0x1c8e: 0xb2a9, 0x1c8f: 0xb339, 0x1c90: 0x0040, 0x1c91: 0xb2d9, + 0x1c92: 0xb381, 0x1c93: 0x0040, 0x1c94: 0xb2c1, 0x1c95: 0x0040, 0x1c96: 0x0040, 0x1c97: 0xb231, + 0x1c98: 0x0040, 0x1c99: 0xb2f1, 0x1c9a: 0x0040, 0x1c9b: 0xb351, 0x1c9c: 0x0040, 0x1c9d: 0x7949, + 0x1c9e: 0x0040, 0x1c9f: 0xbc89, 0x1ca0: 0x0040, 0x1ca1: 0xb1a1, 0x1ca2: 0xb201, 0x1ca3: 0x0040, + 0x1ca4: 0xb3f9, 0x1ca5: 0x0040, 0x1ca6: 0x0040, 0x1ca7: 0xb219, 0x1ca8: 0xb309, 0x1ca9: 0xb429, + 0x1caa: 0xb399, 0x1cab: 0x0040, 0x1cac: 0xb3c9, 0x1cad: 0xb3e1, 0x1cae: 0xb2a9, 0x1caf: 0xb339, + 0x1cb0: 0xb369, 0x1cb1: 0xb2d9, 0x1cb2: 0xb381, 0x1cb3: 0x0040, 0x1cb4: 0xb2c1, 0x1cb5: 0xb1d1, + 0x1cb6: 0xb1e9, 0x1cb7: 0xb231, 0x1cb8: 0x0040, 0x1cb9: 0xb2f1, 0x1cba: 0xb321, 0x1cbb: 0xb351, + 0x1cbc: 0xbc59, 0x1cbd: 0x0040, 0x1cbe: 0xbc71, 0x1cbf: 0x0040, + // Block 0x73, offset 0x1cc0 + 0x1cc0: 0xb189, 0x1cc1: 0xb1a1, 0x1cc2: 0xb201, 0x1cc3: 0xb249, 0x1cc4: 0xb3f9, 0x1cc5: 0xb411, + 0x1cc6: 0xb291, 0x1cc7: 0xb219, 0x1cc8: 0xb309, 0x1cc9: 0xb429, 0x1cca: 0x0040, 0x1ccb: 0xb3b1, + 0x1ccc: 0xb3c9, 0x1ccd: 0xb3e1, 0x1cce: 0xb2a9, 0x1ccf: 0xb339, 0x1cd0: 0xb369, 0x1cd1: 0xb2d9, + 0x1cd2: 0xb381, 0x1cd3: 0xb279, 0x1cd4: 0xb2c1, 0x1cd5: 0xb1d1, 0x1cd6: 0xb1e9, 0x1cd7: 0xb231, + 0x1cd8: 0xb261, 0x1cd9: 0xb2f1, 0x1cda: 0xb321, 0x1cdb: 0xb351, 0x1cdc: 0x0040, 0x1cdd: 0x0040, + 0x1cde: 0x0040, 0x1cdf: 0x0040, 0x1ce0: 0x0040, 0x1ce1: 0xb1a1, 0x1ce2: 0xb201, 0x1ce3: 0xb249, + 0x1ce4: 0x0040, 0x1ce5: 0xb411, 0x1ce6: 0xb291, 0x1ce7: 0xb219, 0x1ce8: 0xb309, 0x1ce9: 0xb429, + 0x1cea: 0x0040, 0x1ceb: 0xb3b1, 0x1cec: 0xb3c9, 0x1ced: 0xb3e1, 0x1cee: 0xb2a9, 0x1cef: 0xb339, + 0x1cf0: 0xb369, 0x1cf1: 0xb2d9, 0x1cf2: 0xb381, 0x1cf3: 0xb279, 0x1cf4: 0xb2c1, 0x1cf5: 0xb1d1, + 0x1cf6: 0xb1e9, 0x1cf7: 0xb231, 0x1cf8: 0xb261, 0x1cf9: 0xb2f1, 0x1cfa: 0xb321, 0x1cfb: 0xb351, + 0x1cfc: 0x0040, 0x1cfd: 0x0040, 0x1cfe: 0x0040, 0x1cff: 0x0040, + // Block 0x74, offset 0x1d00 + 0x1d00: 0x0040, 0x1d01: 0xbca2, 0x1d02: 0xbcba, 0x1d03: 0xbcd2, 0x1d04: 0xbcea, 0x1d05: 0xbd02, + 0x1d06: 0xbd1a, 0x1d07: 0xbd32, 0x1d08: 0xbd4a, 0x1d09: 0xbd62, 0x1d0a: 0xbd7a, 0x1d0b: 0x0018, + 0x1d0c: 0x0018, 0x1d0d: 0x0040, 0x1d0e: 0x0040, 0x1d0f: 0x0040, 0x1d10: 0xbd92, 0x1d11: 0xbdb2, + 0x1d12: 0xbdd2, 0x1d13: 0xbdf2, 0x1d14: 0xbe12, 0x1d15: 0xbe32, 0x1d16: 0xbe52, 0x1d17: 0xbe72, + 0x1d18: 0xbe92, 0x1d19: 0xbeb2, 0x1d1a: 0xbed2, 0x1d1b: 0xbef2, 0x1d1c: 0xbf12, 0x1d1d: 0xbf32, + 0x1d1e: 0xbf52, 0x1d1f: 0xbf72, 0x1d20: 0xbf92, 0x1d21: 0xbfb2, 0x1d22: 0xbfd2, 0x1d23: 0xbff2, + 0x1d24: 0xc012, 0x1d25: 0xc032, 0x1d26: 0xc052, 0x1d27: 0xc072, 0x1d28: 0xc092, 0x1d29: 0xc0b2, + 0x1d2a: 0xc0d1, 0x1d2b: 0x1159, 0x1d2c: 0x0269, 0x1d2d: 0x6671, 0x1d2e: 0xc111, 0x1d2f: 0x0040, + 0x1d30: 0x0039, 0x1d31: 0x0ee9, 0x1d32: 0x1159, 0x1d33: 0x0ef9, 0x1d34: 0x0f09, 0x1d35: 0x1199, + 0x1d36: 0x0f31, 0x1d37: 0x0249, 0x1d38: 0x0f41, 0x1d39: 0x0259, 0x1d3a: 0x0f51, 0x1d3b: 0x0359, + 0x1d3c: 0x0f61, 0x1d3d: 0x0f71, 0x1d3e: 0x00d9, 0x1d3f: 0x0f99, + // Block 0x75, offset 0x1d40 + 0x1d40: 0x2039, 0x1d41: 0x0269, 0x1d42: 0x01d9, 0x1d43: 0x0fa9, 0x1d44: 0x0fb9, 0x1d45: 0x1089, + 0x1d46: 0x0279, 0x1d47: 0x0369, 0x1d48: 0x0289, 0x1d49: 0x13d1, 0x1d4a: 0xc129, 0x1d4b: 0x65b1, + 0x1d4c: 0xc141, 0x1d4d: 0x1441, 0x1d4e: 0xc159, 0x1d4f: 0xc179, 0x1d50: 0x0018, 0x1d51: 0x0018, + 0x1d52: 0x0018, 0x1d53: 0x0018, 0x1d54: 0x0018, 0x1d55: 0x0018, 0x1d56: 0x0018, 0x1d57: 0x0018, + 0x1d58: 0x0018, 0x1d59: 0x0018, 0x1d5a: 0x0018, 0x1d5b: 0x0018, 0x1d5c: 0x0018, 0x1d5d: 0x0018, + 0x1d5e: 0x0018, 0x1d5f: 0x0018, 0x1d60: 0x0018, 0x1d61: 0x0018, 0x1d62: 0x0018, 0x1d63: 0x0018, + 0x1d64: 0x0018, 0x1d65: 0x0018, 0x1d66: 0x0018, 0x1d67: 0x0018, 0x1d68: 0x0018, 0x1d69: 0x0018, + 0x1d6a: 0xc191, 0x1d6b: 0xc1a9, 0x1d6c: 0x0040, 0x1d6d: 0x0040, 0x1d6e: 0x0040, 0x1d6f: 0x0040, + 0x1d70: 0x0018, 0x1d71: 0x0018, 0x1d72: 0x0018, 0x1d73: 0x0018, 0x1d74: 0x0018, 0x1d75: 0x0018, + 0x1d76: 0x0018, 0x1d77: 0x0018, 0x1d78: 0x0018, 0x1d79: 0x0018, 0x1d7a: 0x0018, 0x1d7b: 0x0018, + 0x1d7c: 0x0018, 0x1d7d: 0x0018, 0x1d7e: 0x0018, 0x1d7f: 0x0018, + // Block 0x76, offset 0x1d80 + 0x1d80: 0xc1d9, 0x1d81: 0xc211, 0x1d82: 0xc249, 0x1d83: 0x0040, 0x1d84: 0x0040, 0x1d85: 0x0040, + 0x1d86: 0x0040, 0x1d87: 0x0040, 0x1d88: 0x0040, 0x1d89: 0x0040, 0x1d8a: 0x0040, 0x1d8b: 0x0040, + 0x1d8c: 0x0040, 0x1d8d: 0x0040, 0x1d8e: 0x0040, 0x1d8f: 0x0040, 0x1d90: 0xc269, 0x1d91: 0xc289, + 0x1d92: 0xc2a9, 0x1d93: 0xc2c9, 0x1d94: 0xc2e9, 0x1d95: 0xc309, 0x1d96: 0xc329, 0x1d97: 0xc349, + 0x1d98: 0xc369, 0x1d99: 0xc389, 0x1d9a: 0xc3a9, 0x1d9b: 0xc3c9, 0x1d9c: 0xc3e9, 0x1d9d: 0xc409, + 0x1d9e: 0xc429, 0x1d9f: 0xc449, 0x1da0: 0xc469, 0x1da1: 0xc489, 0x1da2: 0xc4a9, 0x1da3: 0xc4c9, + 0x1da4: 0xc4e9, 0x1da5: 0xc509, 0x1da6: 0xc529, 0x1da7: 0xc549, 0x1da8: 0xc569, 0x1da9: 0xc589, + 0x1daa: 0xc5a9, 0x1dab: 0xc5c9, 0x1dac: 0xc5e9, 0x1dad: 0xc609, 0x1dae: 0xc629, 0x1daf: 0xc649, + 0x1db0: 0xc669, 0x1db1: 0xc689, 0x1db2: 0xc6a9, 0x1db3: 0xc6c9, 0x1db4: 0xc6e9, 0x1db5: 0xc709, + 0x1db6: 0xc729, 0x1db7: 0xc749, 0x1db8: 0xc769, 0x1db9: 0xc789, 0x1dba: 0xc7a9, 0x1dbb: 0xc7c9, + 0x1dbc: 0x0040, 0x1dbd: 0x0040, 0x1dbe: 0x0040, 0x1dbf: 0x0040, + // Block 0x77, offset 0x1dc0 + 0x1dc0: 0xcaf9, 0x1dc1: 0xcb19, 0x1dc2: 0xcb39, 0x1dc3: 0x8b1d, 0x1dc4: 0xcb59, 0x1dc5: 0xcb79, + 0x1dc6: 0xcb99, 0x1dc7: 0xcbb9, 0x1dc8: 0xcbd9, 0x1dc9: 0xcbf9, 0x1dca: 0xcc19, 0x1dcb: 0xcc39, + 0x1dcc: 0xcc59, 0x1dcd: 0x8b3d, 0x1dce: 0xcc79, 0x1dcf: 0xcc99, 0x1dd0: 0xccb9, 0x1dd1: 0xccd9, + 0x1dd2: 0x8b5d, 0x1dd3: 0xccf9, 0x1dd4: 0xcd19, 0x1dd5: 0xc429, 0x1dd6: 0x8b7d, 0x1dd7: 0xcd39, + 0x1dd8: 0xcd59, 0x1dd9: 0xcd79, 0x1dda: 0xcd99, 0x1ddb: 0xcdb9, 0x1ddc: 0x8b9d, 0x1ddd: 0xcdd9, + 0x1dde: 0xcdf9, 0x1ddf: 0xce19, 0x1de0: 0xce39, 0x1de1: 0xce59, 0x1de2: 0xc789, 0x1de3: 0xce79, + 0x1de4: 0xce99, 0x1de5: 0xceb9, 0x1de6: 0xced9, 0x1de7: 0xcef9, 0x1de8: 0xcf19, 0x1de9: 0xcf39, + 0x1dea: 0xcf59, 0x1deb: 0xcf79, 0x1dec: 0xcf99, 0x1ded: 0xcfb9, 0x1dee: 0xcfd9, 0x1def: 0xcff9, + 0x1df0: 0xd019, 0x1df1: 0xd039, 0x1df2: 0xd039, 0x1df3: 0xd039, 0x1df4: 0x8bbd, 0x1df5: 0xd059, + 0x1df6: 0xd079, 0x1df7: 0xd099, 0x1df8: 0x8bdd, 0x1df9: 0xd0b9, 0x1dfa: 0xd0d9, 0x1dfb: 0xd0f9, + 0x1dfc: 0xd119, 0x1dfd: 0xd139, 0x1dfe: 0xd159, 0x1dff: 0xd179, + // Block 0x78, offset 0x1e00 + 0x1e00: 0xd199, 0x1e01: 0xd1b9, 0x1e02: 0xd1d9, 0x1e03: 0xd1f9, 0x1e04: 0xd219, 0x1e05: 0xd239, + 0x1e06: 0xd239, 0x1e07: 0xd259, 0x1e08: 0xd279, 0x1e09: 0xd299, 0x1e0a: 0xd2b9, 0x1e0b: 0xd2d9, + 0x1e0c: 0xd2f9, 0x1e0d: 0xd319, 0x1e0e: 0xd339, 0x1e0f: 0xd359, 0x1e10: 0xd379, 0x1e11: 0xd399, + 0x1e12: 0xd3b9, 0x1e13: 0xd3d9, 0x1e14: 0xd3f9, 0x1e15: 0xd419, 0x1e16: 0xd439, 0x1e17: 0xd459, + 0x1e18: 0xd479, 0x1e19: 0x8bfd, 0x1e1a: 0xd499, 0x1e1b: 0xd4b9, 0x1e1c: 0xd4d9, 0x1e1d: 0xc309, + 0x1e1e: 0xd4f9, 0x1e1f: 0xd519, 0x1e20: 0x8c1d, 0x1e21: 0x8c3d, 0x1e22: 0xd539, 0x1e23: 0xd559, + 0x1e24: 0xd579, 0x1e25: 0xd599, 0x1e26: 0xd5b9, 0x1e27: 0xd5d9, 0x1e28: 0x2040, 0x1e29: 0xd5f9, + 0x1e2a: 0xd619, 0x1e2b: 0xd619, 0x1e2c: 0x8c5d, 0x1e2d: 0xd639, 0x1e2e: 0xd659, 0x1e2f: 0xd679, + 0x1e30: 0xd699, 0x1e31: 0x8c7d, 0x1e32: 0xd6b9, 0x1e33: 0xd6d9, 0x1e34: 0x2040, 0x1e35: 0xd6f9, + 0x1e36: 0xd719, 0x1e37: 0xd739, 0x1e38: 0xd759, 0x1e39: 0xd779, 0x1e3a: 0xd799, 0x1e3b: 0x8c9d, + 0x1e3c: 0xd7b9, 0x1e3d: 0x8cbd, 0x1e3e: 0xd7d9, 0x1e3f: 0xd7f9, + // Block 0x79, offset 0x1e40 + 0x1e40: 0xd819, 0x1e41: 0xd839, 0x1e42: 0xd859, 0x1e43: 0xd879, 0x1e44: 0xd899, 0x1e45: 0xd8b9, + 0x1e46: 0xd8d9, 0x1e47: 0xd8f9, 0x1e48: 0xd919, 0x1e49: 0x8cdd, 0x1e4a: 0xd939, 0x1e4b: 0xd959, + 0x1e4c: 0xd979, 0x1e4d: 0xd999, 0x1e4e: 0xd9b9, 0x1e4f: 0x8cfd, 0x1e50: 0xd9d9, 0x1e51: 0x8d1d, + 0x1e52: 0x8d3d, 0x1e53: 0xd9f9, 0x1e54: 0xda19, 0x1e55: 0xda19, 0x1e56: 0xda39, 0x1e57: 0x8d5d, + 0x1e58: 0x8d7d, 0x1e59: 0xda59, 0x1e5a: 0xda79, 0x1e5b: 0xda99, 0x1e5c: 0xdab9, 0x1e5d: 0xdad9, + 0x1e5e: 0xdaf9, 0x1e5f: 0xdb19, 0x1e60: 0xdb39, 0x1e61: 0xdb59, 0x1e62: 0xdb79, 0x1e63: 0xdb99, + 0x1e64: 0x8d9d, 0x1e65: 0xdbb9, 0x1e66: 0xdbd9, 0x1e67: 0xdbf9, 0x1e68: 0xdc19, 0x1e69: 0xdbf9, + 0x1e6a: 0xdc39, 0x1e6b: 0xdc59, 0x1e6c: 0xdc79, 0x1e6d: 0xdc99, 0x1e6e: 0xdcb9, 0x1e6f: 0xdcd9, + 0x1e70: 0xdcf9, 0x1e71: 0xdd19, 0x1e72: 0xdd39, 0x1e73: 0xdd59, 0x1e74: 0xdd79, 0x1e75: 0xdd99, + 0x1e76: 0xddb9, 0x1e77: 0xddd9, 0x1e78: 0x8dbd, 0x1e79: 0xddf9, 0x1e7a: 0xde19, 0x1e7b: 0xde39, + 0x1e7c: 0xde59, 0x1e7d: 0xde79, 0x1e7e: 0x8ddd, 0x1e7f: 0xde99, + // Block 0x7a, offset 0x1e80 + 0x1e80: 0xe599, 0x1e81: 0xe5b9, 0x1e82: 0xe5d9, 0x1e83: 0xe5f9, 0x1e84: 0xe619, 0x1e85: 0xe639, + 0x1e86: 0x8efd, 0x1e87: 0xe659, 0x1e88: 0xe679, 0x1e89: 0xe699, 0x1e8a: 0xe6b9, 0x1e8b: 0xe6d9, + 0x1e8c: 0xe6f9, 0x1e8d: 0x8f1d, 0x1e8e: 0xe719, 0x1e8f: 0xe739, 0x1e90: 0x8f3d, 0x1e91: 0x8f5d, + 0x1e92: 0xe759, 0x1e93: 0xe779, 0x1e94: 0xe799, 0x1e95: 0xe7b9, 0x1e96: 0xe7d9, 0x1e97: 0xe7f9, + 0x1e98: 0xe819, 0x1e99: 0xe839, 0x1e9a: 0xe859, 0x1e9b: 0x8f7d, 0x1e9c: 0xe879, 0x1e9d: 0x8f9d, + 0x1e9e: 0xe899, 0x1e9f: 0x2040, 0x1ea0: 0xe8b9, 0x1ea1: 0xe8d9, 0x1ea2: 0xe8f9, 0x1ea3: 0x8fbd, + 0x1ea4: 0xe919, 0x1ea5: 0xe939, 0x1ea6: 0x8fdd, 0x1ea7: 0x8ffd, 0x1ea8: 0xe959, 0x1ea9: 0xe979, + 0x1eaa: 0xe999, 0x1eab: 0xe9b9, 0x1eac: 0xe9d9, 0x1ead: 0xe9d9, 0x1eae: 0xe9f9, 0x1eaf: 0xea19, + 0x1eb0: 0xea39, 0x1eb1: 0xea59, 0x1eb2: 0xea79, 0x1eb3: 0xea99, 0x1eb4: 0xeab9, 0x1eb5: 0x901d, + 0x1eb6: 0xead9, 0x1eb7: 0x903d, 0x1eb8: 0xeaf9, 0x1eb9: 0x905d, 0x1eba: 0xeb19, 0x1ebb: 0x907d, + 0x1ebc: 0x909d, 0x1ebd: 0x90bd, 0x1ebe: 0xeb39, 0x1ebf: 0xeb59, + // Block 0x7b, offset 0x1ec0 + 0x1ec0: 0xeb79, 0x1ec1: 0x90dd, 0x1ec2: 0x90fd, 0x1ec3: 0x911d, 0x1ec4: 0x913d, 0x1ec5: 0xeb99, + 0x1ec6: 0xebb9, 0x1ec7: 0xebb9, 0x1ec8: 0xebd9, 0x1ec9: 0xebf9, 0x1eca: 0xec19, 0x1ecb: 0xec39, + 0x1ecc: 0xec59, 0x1ecd: 0x915d, 0x1ece: 0xec79, 0x1ecf: 0xec99, 0x1ed0: 0xecb9, 0x1ed1: 0xecd9, + 0x1ed2: 0x917d, 0x1ed3: 0xecf9, 0x1ed4: 0x919d, 0x1ed5: 0x91bd, 0x1ed6: 0xed19, 0x1ed7: 0xed39, + 0x1ed8: 0xed59, 0x1ed9: 0xed79, 0x1eda: 0xed99, 0x1edb: 0xedb9, 0x1edc: 0x91dd, 0x1edd: 0x91fd, + 0x1ede: 0x921d, 0x1edf: 0x2040, 0x1ee0: 0xedd9, 0x1ee1: 0x923d, 0x1ee2: 0xedf9, 0x1ee3: 0xee19, + 0x1ee4: 0xee39, 0x1ee5: 0x925d, 0x1ee6: 0xee59, 0x1ee7: 0xee79, 0x1ee8: 0xee99, 0x1ee9: 0xeeb9, + 0x1eea: 0xeed9, 0x1eeb: 0x927d, 0x1eec: 0xeef9, 0x1eed: 0xef19, 0x1eee: 0xef39, 0x1eef: 0xef59, + 0x1ef0: 0xef79, 0x1ef1: 0xef99, 0x1ef2: 0x929d, 0x1ef3: 0x92bd, 0x1ef4: 0xefb9, 0x1ef5: 0x92dd, + 0x1ef6: 0xefd9, 0x1ef7: 0x92fd, 0x1ef8: 0xeff9, 0x1ef9: 0xf019, 0x1efa: 0xf039, 0x1efb: 0x931d, + 0x1efc: 0x933d, 0x1efd: 0xf059, 0x1efe: 0x935d, 0x1eff: 0xf079, + // Block 0x7c, offset 0x1f00 + 0x1f00: 0xf6b9, 0x1f01: 0xf6d9, 0x1f02: 0xf6f9, 0x1f03: 0xf719, 0x1f04: 0xf739, 0x1f05: 0x951d, + 0x1f06: 0xf759, 0x1f07: 0xf779, 0x1f08: 0xf799, 0x1f09: 0xf7b9, 0x1f0a: 0xf7d9, 0x1f0b: 0x953d, + 0x1f0c: 0x955d, 0x1f0d: 0xf7f9, 0x1f0e: 0xf819, 0x1f0f: 0xf839, 0x1f10: 0xf859, 0x1f11: 0xf879, + 0x1f12: 0xf899, 0x1f13: 0x957d, 0x1f14: 0xf8b9, 0x1f15: 0xf8d9, 0x1f16: 0xf8f9, 0x1f17: 0xf919, + 0x1f18: 0x959d, 0x1f19: 0x95bd, 0x1f1a: 0xf939, 0x1f1b: 0xf959, 0x1f1c: 0xf979, 0x1f1d: 0x95dd, + 0x1f1e: 0xf999, 0x1f1f: 0xf9b9, 0x1f20: 0x6815, 0x1f21: 0x95fd, 0x1f22: 0xf9d9, 0x1f23: 0xf9f9, + 0x1f24: 0xfa19, 0x1f25: 0x961d, 0x1f26: 0xfa39, 0x1f27: 0xfa59, 0x1f28: 0xfa79, 0x1f29: 0xfa99, + 0x1f2a: 0xfab9, 0x1f2b: 0xfad9, 0x1f2c: 0xfaf9, 0x1f2d: 0x963d, 0x1f2e: 0xfb19, 0x1f2f: 0xfb39, + 0x1f30: 0xfb59, 0x1f31: 0x965d, 0x1f32: 0xfb79, 0x1f33: 0xfb99, 0x1f34: 0xfbb9, 0x1f35: 0xfbd9, + 0x1f36: 0x7b35, 0x1f37: 0x967d, 0x1f38: 0xfbf9, 0x1f39: 0xfc19, 0x1f3a: 0xfc39, 0x1f3b: 0x969d, + 0x1f3c: 0xfc59, 0x1f3d: 0x96bd, 0x1f3e: 0xfc79, 0x1f3f: 0xfc79, + // Block 0x7d, offset 0x1f40 + 0x1f40: 0xfc99, 0x1f41: 0x96dd, 0x1f42: 0xfcb9, 0x1f43: 0xfcd9, 0x1f44: 0xfcf9, 0x1f45: 0xfd19, + 0x1f46: 0xfd39, 0x1f47: 0xfd59, 0x1f48: 0xfd79, 0x1f49: 0x96fd, 0x1f4a: 0xfd99, 0x1f4b: 0xfdb9, + 0x1f4c: 0xfdd9, 0x1f4d: 0xfdf9, 0x1f4e: 0xfe19, 0x1f4f: 0xfe39, 0x1f50: 0x971d, 0x1f51: 0xfe59, + 0x1f52: 0x973d, 0x1f53: 0x975d, 0x1f54: 0x977d, 0x1f55: 0xfe79, 0x1f56: 0xfe99, 0x1f57: 0xfeb9, + 0x1f58: 0xfed9, 0x1f59: 0xfef9, 0x1f5a: 0xff19, 0x1f5b: 0xff39, 0x1f5c: 0xff59, 0x1f5d: 0x979d, + 0x1f5e: 0x0040, 0x1f5f: 0x0040, 0x1f60: 0x0040, 0x1f61: 0x0040, 0x1f62: 0x0040, 0x1f63: 0x0040, + 0x1f64: 0x0040, 0x1f65: 0x0040, 0x1f66: 0x0040, 0x1f67: 0x0040, 0x1f68: 0x0040, 0x1f69: 0x0040, + 0x1f6a: 0x0040, 0x1f6b: 0x0040, 0x1f6c: 0x0040, 0x1f6d: 0x0040, 0x1f6e: 0x0040, 0x1f6f: 0x0040, + 0x1f70: 0x0040, 0x1f71: 0x0040, 0x1f72: 0x0040, 0x1f73: 0x0040, 0x1f74: 0x0040, 0x1f75: 0x0040, + 0x1f76: 0x0040, 0x1f77: 0x0040, 0x1f78: 0x0040, 0x1f79: 0x0040, 0x1f7a: 0x0040, 0x1f7b: 0x0040, + 0x1f7c: 0x0040, 0x1f7d: 0x0040, 0x1f7e: 0x0040, 0x1f7f: 0x0040, +} + +// idnaIndex: 35 blocks, 2240 entries, 4480 bytes +// Block 0 is the zero block. +var idnaIndex = [2240]uint16{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x7c, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x04, 0xc7: 0x05, + 0xc8: 0x06, 0xc9: 0x7d, 0xca: 0x7e, 0xcb: 0x07, 0xcc: 0x7f, 0xcd: 0x08, 0xce: 0x09, 0xcf: 0x0a, + 0xd0: 0x80, 0xd1: 0x0b, 0xd2: 0x0c, 0xd3: 0x0d, 0xd4: 0x0e, 0xd5: 0x81, 0xd6: 0x82, 0xd7: 0x83, + 0xd8: 0x0f, 0xd9: 0x10, 0xda: 0x84, 0xdb: 0x11, 0xdc: 0x12, 0xdd: 0x85, 0xde: 0x86, 0xdf: 0x87, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, 0xe5: 0x07, 0xe6: 0x07, 0xe7: 0x07, + 0xe8: 0x07, 0xe9: 0x08, 0xea: 0x09, 0xeb: 0x07, 0xec: 0x07, 0xed: 0x0a, 0xee: 0x0b, 0xef: 0x0c, + 0xf0: 0x1c, 0xf1: 0x1d, 0xf2: 0x1d, 0xf3: 0x1f, 0xf4: 0x20, + // Block 0x4, offset 0x100 + 0x120: 0x88, 0x121: 0x89, 0x122: 0x8a, 0x123: 0x8b, 0x124: 0x8c, 0x125: 0x13, 0x126: 0x14, 0x127: 0x15, + 0x128: 0x16, 0x129: 0x17, 0x12a: 0x18, 0x12b: 0x19, 0x12c: 0x1a, 0x12d: 0x1b, 0x12e: 0x1c, 0x12f: 0x8d, + 0x130: 0x8e, 0x131: 0x1d, 0x132: 0x1e, 0x133: 0x1f, 0x134: 0x8f, 0x135: 0x20, 0x136: 0x90, 0x137: 0x91, + 0x138: 0x92, 0x139: 0x93, 0x13a: 0x21, 0x13b: 0x94, 0x13c: 0x95, 0x13d: 0x22, 0x13e: 0x23, 0x13f: 0x96, + // Block 0x5, offset 0x140 + 0x140: 0x97, 0x141: 0x98, 0x142: 0x99, 0x143: 0x9a, 0x144: 0x9b, 0x145: 0x9c, 0x146: 0x9d, 0x147: 0x9e, + 0x148: 0x9f, 0x149: 0xa0, 0x14a: 0xa1, 0x14b: 0xa2, 0x14c: 0xa3, 0x14d: 0xa4, 0x14e: 0xa5, 0x14f: 0xa6, + 0x150: 0xa7, 0x151: 0x9f, 0x152: 0x9f, 0x153: 0x9f, 0x154: 0x9f, 0x155: 0x9f, 0x156: 0x9f, 0x157: 0x9f, + 0x158: 0x9f, 0x159: 0xa8, 0x15a: 0xa9, 0x15b: 0xaa, 0x15c: 0xab, 0x15d: 0xac, 0x15e: 0xad, 0x15f: 0xae, + 0x160: 0xaf, 0x161: 0xb0, 0x162: 0xb1, 0x163: 0xb2, 0x164: 0xb3, 0x165: 0xb4, 0x166: 0xb5, 0x167: 0xb6, + 0x168: 0xb7, 0x169: 0xb8, 0x16a: 0xb9, 0x16b: 0xba, 0x16c: 0xbb, 0x16d: 0xbc, 0x16e: 0xbd, 0x16f: 0xbe, + 0x170: 0xbf, 0x171: 0xc0, 0x172: 0xc1, 0x173: 0xc2, 0x174: 0x24, 0x175: 0x25, 0x176: 0x26, 0x177: 0xc3, + 0x178: 0x27, 0x179: 0x27, 0x17a: 0x28, 0x17b: 0x27, 0x17c: 0xc4, 0x17d: 0x29, 0x17e: 0x2a, 0x17f: 0x2b, + // Block 0x6, offset 0x180 + 0x180: 0x2c, 0x181: 0x2d, 0x182: 0x2e, 0x183: 0xc5, 0x184: 0x2f, 0x185: 0x30, 0x186: 0xc6, 0x187: 0x9b, + 0x188: 0xc7, 0x189: 0xc8, 0x18a: 0x9b, 0x18b: 0x9b, 0x18c: 0xc9, 0x18d: 0x9b, 0x18e: 0x9b, 0x18f: 0xca, + 0x190: 0xcb, 0x191: 0x31, 0x192: 0x32, 0x193: 0x33, 0x194: 0x9b, 0x195: 0x9b, 0x196: 0x9b, 0x197: 0x9b, + 0x198: 0x9b, 0x199: 0x9b, 0x19a: 0x9b, 0x19b: 0x9b, 0x19c: 0x9b, 0x19d: 0x9b, 0x19e: 0x9b, 0x19f: 0x9b, + 0x1a0: 0x9b, 0x1a1: 0x9b, 0x1a2: 0x9b, 0x1a3: 0x9b, 0x1a4: 0x9b, 0x1a5: 0x9b, 0x1a6: 0x9b, 0x1a7: 0x9b, + 0x1a8: 0xcc, 0x1a9: 0xcd, 0x1aa: 0x9b, 0x1ab: 0xce, 0x1ac: 0x9b, 0x1ad: 0xcf, 0x1ae: 0xd0, 0x1af: 0xd1, + 0x1b0: 0xd2, 0x1b1: 0x34, 0x1b2: 0x27, 0x1b3: 0x35, 0x1b4: 0xd3, 0x1b5: 0xd4, 0x1b6: 0xd5, 0x1b7: 0xd6, + 0x1b8: 0xd7, 0x1b9: 0xd8, 0x1ba: 0xd9, 0x1bb: 0xda, 0x1bc: 0xdb, 0x1bd: 0xdc, 0x1be: 0xdd, 0x1bf: 0x36, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x37, 0x1c1: 0xde, 0x1c2: 0xdf, 0x1c3: 0xe0, 0x1c4: 0xe1, 0x1c5: 0x38, 0x1c6: 0x39, 0x1c7: 0xe2, + 0x1c8: 0xe3, 0x1c9: 0x3a, 0x1ca: 0x3b, 0x1cb: 0x3c, 0x1cc: 0x3d, 0x1cd: 0x3e, 0x1ce: 0x3f, 0x1cf: 0x40, + 0x1d0: 0x9f, 0x1d1: 0x9f, 0x1d2: 0x9f, 0x1d3: 0x9f, 0x1d4: 0x9f, 0x1d5: 0x9f, 0x1d6: 0x9f, 0x1d7: 0x9f, + 0x1d8: 0x9f, 0x1d9: 0x9f, 0x1da: 0x9f, 0x1db: 0x9f, 0x1dc: 0x9f, 0x1dd: 0x9f, 0x1de: 0x9f, 0x1df: 0x9f, + 0x1e0: 0x9f, 0x1e1: 0x9f, 0x1e2: 0x9f, 0x1e3: 0x9f, 0x1e4: 0x9f, 0x1e5: 0x9f, 0x1e6: 0x9f, 0x1e7: 0x9f, + 0x1e8: 0x9f, 0x1e9: 0x9f, 0x1ea: 0x9f, 0x1eb: 0x9f, 0x1ec: 0x9f, 0x1ed: 0x9f, 0x1ee: 0x9f, 0x1ef: 0x9f, + 0x1f0: 0x9f, 0x1f1: 0x9f, 0x1f2: 0x9f, 0x1f3: 0x9f, 0x1f4: 0x9f, 0x1f5: 0x9f, 0x1f6: 0x9f, 0x1f7: 0x9f, + 0x1f8: 0x9f, 0x1f9: 0x9f, 0x1fa: 0x9f, 0x1fb: 0x9f, 0x1fc: 0x9f, 0x1fd: 0x9f, 0x1fe: 0x9f, 0x1ff: 0x9f, + // Block 0x8, offset 0x200 + 0x200: 0x9f, 0x201: 0x9f, 0x202: 0x9f, 0x203: 0x9f, 0x204: 0x9f, 0x205: 0x9f, 0x206: 0x9f, 0x207: 0x9f, + 0x208: 0x9f, 0x209: 0x9f, 0x20a: 0x9f, 0x20b: 0x9f, 0x20c: 0x9f, 0x20d: 0x9f, 0x20e: 0x9f, 0x20f: 0x9f, + 0x210: 0x9f, 0x211: 0x9f, 0x212: 0x9f, 0x213: 0x9f, 0x214: 0x9f, 0x215: 0x9f, 0x216: 0x9f, 0x217: 0x9f, + 0x218: 0x9f, 0x219: 0x9f, 0x21a: 0x9f, 0x21b: 0x9f, 0x21c: 0x9f, 0x21d: 0x9f, 0x21e: 0x9f, 0x21f: 0x9f, + 0x220: 0x9f, 0x221: 0x9f, 0x222: 0x9f, 0x223: 0x9f, 0x224: 0x9f, 0x225: 0x9f, 0x226: 0x9f, 0x227: 0x9f, + 0x228: 0x9f, 0x229: 0x9f, 0x22a: 0x9f, 0x22b: 0x9f, 0x22c: 0x9f, 0x22d: 0x9f, 0x22e: 0x9f, 0x22f: 0x9f, + 0x230: 0x9f, 0x231: 0x9f, 0x232: 0x9f, 0x233: 0x9f, 0x234: 0x9f, 0x235: 0x9f, 0x236: 0xb2, 0x237: 0x9b, + 0x238: 0x9f, 0x239: 0x9f, 0x23a: 0x9f, 0x23b: 0x9f, 0x23c: 0x9f, 0x23d: 0x9f, 0x23e: 0x9f, 0x23f: 0x9f, + // Block 0x9, offset 0x240 + 0x240: 0x9f, 0x241: 0x9f, 0x242: 0x9f, 0x243: 0x9f, 0x244: 0x9f, 0x245: 0x9f, 0x246: 0x9f, 0x247: 0x9f, + 0x248: 0x9f, 0x249: 0x9f, 0x24a: 0x9f, 0x24b: 0x9f, 0x24c: 0x9f, 0x24d: 0x9f, 0x24e: 0x9f, 0x24f: 0x9f, + 0x250: 0x9f, 0x251: 0x9f, 0x252: 0x9f, 0x253: 0x9f, 0x254: 0x9f, 0x255: 0x9f, 0x256: 0x9f, 0x257: 0x9f, + 0x258: 0x9f, 0x259: 0x9f, 0x25a: 0x9f, 0x25b: 0x9f, 0x25c: 0x9f, 0x25d: 0x9f, 0x25e: 0x9f, 0x25f: 0x9f, + 0x260: 0x9f, 0x261: 0x9f, 0x262: 0x9f, 0x263: 0x9f, 0x264: 0x9f, 0x265: 0x9f, 0x266: 0x9f, 0x267: 0x9f, + 0x268: 0x9f, 0x269: 0x9f, 0x26a: 0x9f, 0x26b: 0x9f, 0x26c: 0x9f, 0x26d: 0x9f, 0x26e: 0x9f, 0x26f: 0x9f, + 0x270: 0x9f, 0x271: 0x9f, 0x272: 0x9f, 0x273: 0x9f, 0x274: 0x9f, 0x275: 0x9f, 0x276: 0x9f, 0x277: 0x9f, + 0x278: 0x9f, 0x279: 0x9f, 0x27a: 0x9f, 0x27b: 0x9f, 0x27c: 0x9f, 0x27d: 0x9f, 0x27e: 0x9f, 0x27f: 0x9f, + // Block 0xa, offset 0x280 + 0x280: 0x9f, 0x281: 0x9f, 0x282: 0x9f, 0x283: 0x9f, 0x284: 0x9f, 0x285: 0x9f, 0x286: 0x9f, 0x287: 0x9f, + 0x288: 0x9f, 0x289: 0x9f, 0x28a: 0x9f, 0x28b: 0x9f, 0x28c: 0x9f, 0x28d: 0x9f, 0x28e: 0x9f, 0x28f: 0x9f, + 0x290: 0x9f, 0x291: 0x9f, 0x292: 0x9f, 0x293: 0x9f, 0x294: 0x9f, 0x295: 0x9f, 0x296: 0x9f, 0x297: 0x9f, + 0x298: 0x9f, 0x299: 0x9f, 0x29a: 0x9f, 0x29b: 0x9f, 0x29c: 0x9f, 0x29d: 0x9f, 0x29e: 0x9f, 0x29f: 0x9f, + 0x2a0: 0x9f, 0x2a1: 0x9f, 0x2a2: 0x9f, 0x2a3: 0x9f, 0x2a4: 0x9f, 0x2a5: 0x9f, 0x2a6: 0x9f, 0x2a7: 0x9f, + 0x2a8: 0x9f, 0x2a9: 0x9f, 0x2aa: 0x9f, 0x2ab: 0x9f, 0x2ac: 0x9f, 0x2ad: 0x9f, 0x2ae: 0x9f, 0x2af: 0x9f, + 0x2b0: 0x9f, 0x2b1: 0x9f, 0x2b2: 0x9f, 0x2b3: 0x9f, 0x2b4: 0x9f, 0x2b5: 0x9f, 0x2b6: 0x9f, 0x2b7: 0x9f, + 0x2b8: 0x9f, 0x2b9: 0x9f, 0x2ba: 0x9f, 0x2bb: 0x9f, 0x2bc: 0x9f, 0x2bd: 0x9f, 0x2be: 0x9f, 0x2bf: 0xe4, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x9f, 0x2c1: 0x9f, 0x2c2: 0x9f, 0x2c3: 0x9f, 0x2c4: 0x9f, 0x2c5: 0x9f, 0x2c6: 0x9f, 0x2c7: 0x9f, + 0x2c8: 0x9f, 0x2c9: 0x9f, 0x2ca: 0x9f, 0x2cb: 0x9f, 0x2cc: 0x9f, 0x2cd: 0x9f, 0x2ce: 0x9f, 0x2cf: 0x9f, + 0x2d0: 0x9f, 0x2d1: 0x9f, 0x2d2: 0xe5, 0x2d3: 0xe6, 0x2d4: 0x9f, 0x2d5: 0x9f, 0x2d6: 0x9f, 0x2d7: 0x9f, + 0x2d8: 0xe7, 0x2d9: 0x41, 0x2da: 0x42, 0x2db: 0xe8, 0x2dc: 0x43, 0x2dd: 0x44, 0x2de: 0x45, 0x2df: 0xe9, + 0x2e0: 0xea, 0x2e1: 0xeb, 0x2e2: 0xec, 0x2e3: 0xed, 0x2e4: 0xee, 0x2e5: 0xef, 0x2e6: 0xf0, 0x2e7: 0xf1, + 0x2e8: 0xf2, 0x2e9: 0xf3, 0x2ea: 0xf4, 0x2eb: 0xf5, 0x2ec: 0xf6, 0x2ed: 0xf7, 0x2ee: 0xf8, 0x2ef: 0xf9, + 0x2f0: 0x9f, 0x2f1: 0x9f, 0x2f2: 0x9f, 0x2f3: 0x9f, 0x2f4: 0x9f, 0x2f5: 0x9f, 0x2f6: 0x9f, 0x2f7: 0x9f, + 0x2f8: 0x9f, 0x2f9: 0x9f, 0x2fa: 0x9f, 0x2fb: 0x9f, 0x2fc: 0x9f, 0x2fd: 0x9f, 0x2fe: 0x9f, 0x2ff: 0x9f, + // Block 0xc, offset 0x300 + 0x300: 0x9f, 0x301: 0x9f, 0x302: 0x9f, 0x303: 0x9f, 0x304: 0x9f, 0x305: 0x9f, 0x306: 0x9f, 0x307: 0x9f, + 0x308: 0x9f, 0x309: 0x9f, 0x30a: 0x9f, 0x30b: 0x9f, 0x30c: 0x9f, 0x30d: 0x9f, 0x30e: 0x9f, 0x30f: 0x9f, + 0x310: 0x9f, 0x311: 0x9f, 0x312: 0x9f, 0x313: 0x9f, 0x314: 0x9f, 0x315: 0x9f, 0x316: 0x9f, 0x317: 0x9f, + 0x318: 0x9f, 0x319: 0x9f, 0x31a: 0x9f, 0x31b: 0x9f, 0x31c: 0x9f, 0x31d: 0x9f, 0x31e: 0xfa, 0x31f: 0xfb, + // Block 0xd, offset 0x340 + 0x340: 0xba, 0x341: 0xba, 0x342: 0xba, 0x343: 0xba, 0x344: 0xba, 0x345: 0xba, 0x346: 0xba, 0x347: 0xba, + 0x348: 0xba, 0x349: 0xba, 0x34a: 0xba, 0x34b: 0xba, 0x34c: 0xba, 0x34d: 0xba, 0x34e: 0xba, 0x34f: 0xba, + 0x350: 0xba, 0x351: 0xba, 0x352: 0xba, 0x353: 0xba, 0x354: 0xba, 0x355: 0xba, 0x356: 0xba, 0x357: 0xba, + 0x358: 0xba, 0x359: 0xba, 0x35a: 0xba, 0x35b: 0xba, 0x35c: 0xba, 0x35d: 0xba, 0x35e: 0xba, 0x35f: 0xba, + 0x360: 0xba, 0x361: 0xba, 0x362: 0xba, 0x363: 0xba, 0x364: 0xba, 0x365: 0xba, 0x366: 0xba, 0x367: 0xba, + 0x368: 0xba, 0x369: 0xba, 0x36a: 0xba, 0x36b: 0xba, 0x36c: 0xba, 0x36d: 0xba, 0x36e: 0xba, 0x36f: 0xba, + 0x370: 0xba, 0x371: 0xba, 0x372: 0xba, 0x373: 0xba, 0x374: 0xba, 0x375: 0xba, 0x376: 0xba, 0x377: 0xba, + 0x378: 0xba, 0x379: 0xba, 0x37a: 0xba, 0x37b: 0xba, 0x37c: 0xba, 0x37d: 0xba, 0x37e: 0xba, 0x37f: 0xba, + // Block 0xe, offset 0x380 + 0x380: 0xba, 0x381: 0xba, 0x382: 0xba, 0x383: 0xba, 0x384: 0xba, 0x385: 0xba, 0x386: 0xba, 0x387: 0xba, + 0x388: 0xba, 0x389: 0xba, 0x38a: 0xba, 0x38b: 0xba, 0x38c: 0xba, 0x38d: 0xba, 0x38e: 0xba, 0x38f: 0xba, + 0x390: 0xba, 0x391: 0xba, 0x392: 0xba, 0x393: 0xba, 0x394: 0xba, 0x395: 0xba, 0x396: 0xba, 0x397: 0xba, + 0x398: 0xba, 0x399: 0xba, 0x39a: 0xba, 0x39b: 0xba, 0x39c: 0xba, 0x39d: 0xba, 0x39e: 0xba, 0x39f: 0xba, + 0x3a0: 0xba, 0x3a1: 0xba, 0x3a2: 0xba, 0x3a3: 0xba, 0x3a4: 0xfc, 0x3a5: 0xfd, 0x3a6: 0xfe, 0x3a7: 0xff, + 0x3a8: 0x46, 0x3a9: 0x100, 0x3aa: 0x101, 0x3ab: 0x47, 0x3ac: 0x48, 0x3ad: 0x49, 0x3ae: 0x4a, 0x3af: 0x4b, + 0x3b0: 0x102, 0x3b1: 0x4c, 0x3b2: 0x4d, 0x3b3: 0x4e, 0x3b4: 0x4f, 0x3b5: 0x50, 0x3b6: 0x103, 0x3b7: 0x51, + 0x3b8: 0x52, 0x3b9: 0x53, 0x3ba: 0x54, 0x3bb: 0x55, 0x3bc: 0x56, 0x3bd: 0x57, 0x3be: 0x58, 0x3bf: 0x59, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x104, 0x3c1: 0x105, 0x3c2: 0x9f, 0x3c3: 0x106, 0x3c4: 0x107, 0x3c5: 0x9b, 0x3c6: 0x108, 0x3c7: 0x109, + 0x3c8: 0xba, 0x3c9: 0xba, 0x3ca: 0x10a, 0x3cb: 0x10b, 0x3cc: 0x10c, 0x3cd: 0x10d, 0x3ce: 0x10e, 0x3cf: 0x10f, + 0x3d0: 0x110, 0x3d1: 0x9f, 0x3d2: 0x111, 0x3d3: 0x112, 0x3d4: 0x113, 0x3d5: 0x114, 0x3d6: 0xba, 0x3d7: 0xba, + 0x3d8: 0x9f, 0x3d9: 0x9f, 0x3da: 0x9f, 0x3db: 0x9f, 0x3dc: 0x115, 0x3dd: 0x116, 0x3de: 0xba, 0x3df: 0xba, + 0x3e0: 0x117, 0x3e1: 0x118, 0x3e2: 0x119, 0x3e3: 0x11a, 0x3e4: 0x11b, 0x3e5: 0xba, 0x3e6: 0x11c, 0x3e7: 0x11d, + 0x3e8: 0x11e, 0x3e9: 0x11f, 0x3ea: 0x120, 0x3eb: 0x5a, 0x3ec: 0x121, 0x3ed: 0x122, 0x3ee: 0x5b, 0x3ef: 0xba, + 0x3f0: 0x123, 0x3f1: 0x124, 0x3f2: 0x125, 0x3f3: 0x126, 0x3f4: 0xba, 0x3f5: 0xba, 0x3f6: 0xba, 0x3f7: 0xba, + 0x3f8: 0xba, 0x3f9: 0x127, 0x3fa: 0xba, 0x3fb: 0xba, 0x3fc: 0xba, 0x3fd: 0xba, 0x3fe: 0xba, 0x3ff: 0xba, + // Block 0x10, offset 0x400 + 0x400: 0x128, 0x401: 0x129, 0x402: 0x12a, 0x403: 0x12b, 0x404: 0x12c, 0x405: 0x12d, 0x406: 0x12e, 0x407: 0x12f, + 0x408: 0x130, 0x409: 0xba, 0x40a: 0x131, 0x40b: 0x132, 0x40c: 0x5c, 0x40d: 0x5d, 0x40e: 0xba, 0x40f: 0xba, + 0x410: 0x133, 0x411: 0x134, 0x412: 0x135, 0x413: 0x136, 0x414: 0xba, 0x415: 0xba, 0x416: 0x137, 0x417: 0x138, + 0x418: 0x139, 0x419: 0x13a, 0x41a: 0x13b, 0x41b: 0x13c, 0x41c: 0x13d, 0x41d: 0xba, 0x41e: 0xba, 0x41f: 0xba, + 0x420: 0xba, 0x421: 0xba, 0x422: 0x13e, 0x423: 0x13f, 0x424: 0xba, 0x425: 0xba, 0x426: 0xba, 0x427: 0xba, + 0x428: 0xba, 0x429: 0xba, 0x42a: 0xba, 0x42b: 0x140, 0x42c: 0xba, 0x42d: 0xba, 0x42e: 0xba, 0x42f: 0xba, + 0x430: 0x141, 0x431: 0x142, 0x432: 0x143, 0x433: 0xba, 0x434: 0xba, 0x435: 0xba, 0x436: 0xba, 0x437: 0xba, + 0x438: 0xba, 0x439: 0xba, 0x43a: 0xba, 0x43b: 0xba, 0x43c: 0xba, 0x43d: 0xba, 0x43e: 0xba, 0x43f: 0xba, + // Block 0x11, offset 0x440 + 0x440: 0x9f, 0x441: 0x9f, 0x442: 0x9f, 0x443: 0x9f, 0x444: 0x9f, 0x445: 0x9f, 0x446: 0x9f, 0x447: 0x9f, + 0x448: 0x9f, 0x449: 0x9f, 0x44a: 0x9f, 0x44b: 0x9f, 0x44c: 0x9f, 0x44d: 0x9f, 0x44e: 0x144, 0x44f: 0xba, + 0x450: 0x9b, 0x451: 0x145, 0x452: 0x9f, 0x453: 0x9f, 0x454: 0x9f, 0x455: 0x146, 0x456: 0xba, 0x457: 0xba, + 0x458: 0xba, 0x459: 0xba, 0x45a: 0xba, 0x45b: 0xba, 0x45c: 0xba, 0x45d: 0xba, 0x45e: 0xba, 0x45f: 0xba, + 0x460: 0xba, 0x461: 0xba, 0x462: 0xba, 0x463: 0xba, 0x464: 0xba, 0x465: 0xba, 0x466: 0xba, 0x467: 0xba, + 0x468: 0xba, 0x469: 0xba, 0x46a: 0xba, 0x46b: 0xba, 0x46c: 0xba, 0x46d: 0xba, 0x46e: 0xba, 0x46f: 0xba, + 0x470: 0xba, 0x471: 0xba, 0x472: 0xba, 0x473: 0xba, 0x474: 0xba, 0x475: 0xba, 0x476: 0xba, 0x477: 0xba, + 0x478: 0xba, 0x479: 0xba, 0x47a: 0xba, 0x47b: 0xba, 0x47c: 0xba, 0x47d: 0xba, 0x47e: 0xba, 0x47f: 0xba, + // Block 0x12, offset 0x480 + 0x480: 0x9f, 0x481: 0x9f, 0x482: 0x9f, 0x483: 0x9f, 0x484: 0x9f, 0x485: 0x9f, 0x486: 0x9f, 0x487: 0x9f, + 0x488: 0x9f, 0x489: 0x9f, 0x48a: 0x9f, 0x48b: 0x9f, 0x48c: 0x9f, 0x48d: 0x9f, 0x48e: 0x9f, 0x48f: 0x9f, + 0x490: 0x147, 0x491: 0xba, 0x492: 0xba, 0x493: 0xba, 0x494: 0xba, 0x495: 0xba, 0x496: 0xba, 0x497: 0xba, + 0x498: 0xba, 0x499: 0xba, 0x49a: 0xba, 0x49b: 0xba, 0x49c: 0xba, 0x49d: 0xba, 0x49e: 0xba, 0x49f: 0xba, + 0x4a0: 0xba, 0x4a1: 0xba, 0x4a2: 0xba, 0x4a3: 0xba, 0x4a4: 0xba, 0x4a5: 0xba, 0x4a6: 0xba, 0x4a7: 0xba, + 0x4a8: 0xba, 0x4a9: 0xba, 0x4aa: 0xba, 0x4ab: 0xba, 0x4ac: 0xba, 0x4ad: 0xba, 0x4ae: 0xba, 0x4af: 0xba, + 0x4b0: 0xba, 0x4b1: 0xba, 0x4b2: 0xba, 0x4b3: 0xba, 0x4b4: 0xba, 0x4b5: 0xba, 0x4b6: 0xba, 0x4b7: 0xba, + 0x4b8: 0xba, 0x4b9: 0xba, 0x4ba: 0xba, 0x4bb: 0xba, 0x4bc: 0xba, 0x4bd: 0xba, 0x4be: 0xba, 0x4bf: 0xba, + // Block 0x13, offset 0x4c0 + 0x4c0: 0xba, 0x4c1: 0xba, 0x4c2: 0xba, 0x4c3: 0xba, 0x4c4: 0xba, 0x4c5: 0xba, 0x4c6: 0xba, 0x4c7: 0xba, + 0x4c8: 0xba, 0x4c9: 0xba, 0x4ca: 0xba, 0x4cb: 0xba, 0x4cc: 0xba, 0x4cd: 0xba, 0x4ce: 0xba, 0x4cf: 0xba, + 0x4d0: 0x9f, 0x4d1: 0x9f, 0x4d2: 0x9f, 0x4d3: 0x9f, 0x4d4: 0x9f, 0x4d5: 0x9f, 0x4d6: 0x9f, 0x4d7: 0x9f, + 0x4d8: 0x9f, 0x4d9: 0x148, 0x4da: 0xba, 0x4db: 0xba, 0x4dc: 0xba, 0x4dd: 0xba, 0x4de: 0xba, 0x4df: 0xba, + 0x4e0: 0xba, 0x4e1: 0xba, 0x4e2: 0xba, 0x4e3: 0xba, 0x4e4: 0xba, 0x4e5: 0xba, 0x4e6: 0xba, 0x4e7: 0xba, + 0x4e8: 0xba, 0x4e9: 0xba, 0x4ea: 0xba, 0x4eb: 0xba, 0x4ec: 0xba, 0x4ed: 0xba, 0x4ee: 0xba, 0x4ef: 0xba, + 0x4f0: 0xba, 0x4f1: 0xba, 0x4f2: 0xba, 0x4f3: 0xba, 0x4f4: 0xba, 0x4f5: 0xba, 0x4f6: 0xba, 0x4f7: 0xba, + 0x4f8: 0xba, 0x4f9: 0xba, 0x4fa: 0xba, 0x4fb: 0xba, 0x4fc: 0xba, 0x4fd: 0xba, 0x4fe: 0xba, 0x4ff: 0xba, + // Block 0x14, offset 0x500 + 0x500: 0xba, 0x501: 0xba, 0x502: 0xba, 0x503: 0xba, 0x504: 0xba, 0x505: 0xba, 0x506: 0xba, 0x507: 0xba, + 0x508: 0xba, 0x509: 0xba, 0x50a: 0xba, 0x50b: 0xba, 0x50c: 0xba, 0x50d: 0xba, 0x50e: 0xba, 0x50f: 0xba, + 0x510: 0xba, 0x511: 0xba, 0x512: 0xba, 0x513: 0xba, 0x514: 0xba, 0x515: 0xba, 0x516: 0xba, 0x517: 0xba, + 0x518: 0xba, 0x519: 0xba, 0x51a: 0xba, 0x51b: 0xba, 0x51c: 0xba, 0x51d: 0xba, 0x51e: 0xba, 0x51f: 0xba, + 0x520: 0x9f, 0x521: 0x9f, 0x522: 0x9f, 0x523: 0x9f, 0x524: 0x9f, 0x525: 0x9f, 0x526: 0x9f, 0x527: 0x9f, + 0x528: 0x140, 0x529: 0x149, 0x52a: 0xba, 0x52b: 0x14a, 0x52c: 0x14b, 0x52d: 0x14c, 0x52e: 0x14d, 0x52f: 0xba, + 0x530: 0xba, 0x531: 0xba, 0x532: 0xba, 0x533: 0xba, 0x534: 0xba, 0x535: 0xba, 0x536: 0xba, 0x537: 0xba, + 0x538: 0xba, 0x539: 0xba, 0x53a: 0xba, 0x53b: 0xba, 0x53c: 0x9f, 0x53d: 0x14e, 0x53e: 0x14f, 0x53f: 0x150, + // Block 0x15, offset 0x540 + 0x540: 0x9f, 0x541: 0x9f, 0x542: 0x9f, 0x543: 0x9f, 0x544: 0x9f, 0x545: 0x9f, 0x546: 0x9f, 0x547: 0x9f, + 0x548: 0x9f, 0x549: 0x9f, 0x54a: 0x9f, 0x54b: 0x9f, 0x54c: 0x9f, 0x54d: 0x9f, 0x54e: 0x9f, 0x54f: 0x9f, + 0x550: 0x9f, 0x551: 0x9f, 0x552: 0x9f, 0x553: 0x9f, 0x554: 0x9f, 0x555: 0x9f, 0x556: 0x9f, 0x557: 0x9f, + 0x558: 0x9f, 0x559: 0x9f, 0x55a: 0x9f, 0x55b: 0x9f, 0x55c: 0x9f, 0x55d: 0x9f, 0x55e: 0x9f, 0x55f: 0x151, + 0x560: 0x9f, 0x561: 0x9f, 0x562: 0x9f, 0x563: 0x9f, 0x564: 0x9f, 0x565: 0x9f, 0x566: 0x9f, 0x567: 0x9f, + 0x568: 0x9f, 0x569: 0x9f, 0x56a: 0x9f, 0x56b: 0x152, 0x56c: 0xba, 0x56d: 0xba, 0x56e: 0xba, 0x56f: 0xba, + 0x570: 0xba, 0x571: 0xba, 0x572: 0xba, 0x573: 0xba, 0x574: 0xba, 0x575: 0xba, 0x576: 0xba, 0x577: 0xba, + 0x578: 0xba, 0x579: 0xba, 0x57a: 0xba, 0x57b: 0xba, 0x57c: 0xba, 0x57d: 0xba, 0x57e: 0xba, 0x57f: 0xba, + // Block 0x16, offset 0x580 + 0x580: 0x153, 0x581: 0xba, 0x582: 0xba, 0x583: 0xba, 0x584: 0xba, 0x585: 0xba, 0x586: 0xba, 0x587: 0xba, + 0x588: 0xba, 0x589: 0xba, 0x58a: 0xba, 0x58b: 0xba, 0x58c: 0xba, 0x58d: 0xba, 0x58e: 0xba, 0x58f: 0xba, + 0x590: 0xba, 0x591: 0xba, 0x592: 0xba, 0x593: 0xba, 0x594: 0xba, 0x595: 0xba, 0x596: 0xba, 0x597: 0xba, + 0x598: 0xba, 0x599: 0xba, 0x59a: 0xba, 0x59b: 0xba, 0x59c: 0xba, 0x59d: 0xba, 0x59e: 0xba, 0x59f: 0xba, + 0x5a0: 0xba, 0x5a1: 0xba, 0x5a2: 0xba, 0x5a3: 0xba, 0x5a4: 0xba, 0x5a5: 0xba, 0x5a6: 0xba, 0x5a7: 0xba, + 0x5a8: 0xba, 0x5a9: 0xba, 0x5aa: 0xba, 0x5ab: 0xba, 0x5ac: 0xba, 0x5ad: 0xba, 0x5ae: 0xba, 0x5af: 0xba, + 0x5b0: 0x9f, 0x5b1: 0x154, 0x5b2: 0x155, 0x5b3: 0xba, 0x5b4: 0xba, 0x5b5: 0xba, 0x5b6: 0xba, 0x5b7: 0xba, + 0x5b8: 0xba, 0x5b9: 0xba, 0x5ba: 0xba, 0x5bb: 0xba, 0x5bc: 0xba, 0x5bd: 0xba, 0x5be: 0xba, 0x5bf: 0xba, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x9b, 0x5c1: 0x9b, 0x5c2: 0x9b, 0x5c3: 0x156, 0x5c4: 0x157, 0x5c5: 0x158, 0x5c6: 0x159, 0x5c7: 0x15a, + 0x5c8: 0x9b, 0x5c9: 0x15b, 0x5ca: 0xba, 0x5cb: 0xba, 0x5cc: 0x9b, 0x5cd: 0x15c, 0x5ce: 0xba, 0x5cf: 0xba, + 0x5d0: 0x5e, 0x5d1: 0x5f, 0x5d2: 0x60, 0x5d3: 0x61, 0x5d4: 0x62, 0x5d5: 0x63, 0x5d6: 0x64, 0x5d7: 0x65, + 0x5d8: 0x66, 0x5d9: 0x67, 0x5da: 0x68, 0x5db: 0x69, 0x5dc: 0x6a, 0x5dd: 0x6b, 0x5de: 0x6c, 0x5df: 0x6d, + 0x5e0: 0x9b, 0x5e1: 0x9b, 0x5e2: 0x9b, 0x5e3: 0x9b, 0x5e4: 0x9b, 0x5e5: 0x9b, 0x5e6: 0x9b, 0x5e7: 0x9b, + 0x5e8: 0x15d, 0x5e9: 0x15e, 0x5ea: 0x15f, 0x5eb: 0xba, 0x5ec: 0xba, 0x5ed: 0xba, 0x5ee: 0xba, 0x5ef: 0xba, + 0x5f0: 0xba, 0x5f1: 0xba, 0x5f2: 0xba, 0x5f3: 0xba, 0x5f4: 0xba, 0x5f5: 0xba, 0x5f6: 0xba, 0x5f7: 0xba, + 0x5f8: 0xba, 0x5f9: 0xba, 0x5fa: 0xba, 0x5fb: 0xba, 0x5fc: 0xba, 0x5fd: 0xba, 0x5fe: 0xba, 0x5ff: 0xba, + // Block 0x18, offset 0x600 + 0x600: 0x160, 0x601: 0xba, 0x602: 0xba, 0x603: 0xba, 0x604: 0xba, 0x605: 0xba, 0x606: 0xba, 0x607: 0xba, + 0x608: 0xba, 0x609: 0xba, 0x60a: 0xba, 0x60b: 0xba, 0x60c: 0xba, 0x60d: 0xba, 0x60e: 0xba, 0x60f: 0xba, + 0x610: 0xba, 0x611: 0xba, 0x612: 0xba, 0x613: 0xba, 0x614: 0xba, 0x615: 0xba, 0x616: 0xba, 0x617: 0xba, + 0x618: 0xba, 0x619: 0xba, 0x61a: 0xba, 0x61b: 0xba, 0x61c: 0xba, 0x61d: 0xba, 0x61e: 0xba, 0x61f: 0xba, + 0x620: 0x123, 0x621: 0x123, 0x622: 0x123, 0x623: 0x161, 0x624: 0x6e, 0x625: 0x162, 0x626: 0xba, 0x627: 0xba, + 0x628: 0xba, 0x629: 0xba, 0x62a: 0xba, 0x62b: 0xba, 0x62c: 0xba, 0x62d: 0xba, 0x62e: 0xba, 0x62f: 0xba, + 0x630: 0xba, 0x631: 0xba, 0x632: 0xba, 0x633: 0xba, 0x634: 0xba, 0x635: 0xba, 0x636: 0xba, 0x637: 0xba, + 0x638: 0x6f, 0x639: 0x70, 0x63a: 0x71, 0x63b: 0x163, 0x63c: 0xba, 0x63d: 0xba, 0x63e: 0xba, 0x63f: 0xba, + // Block 0x19, offset 0x640 + 0x640: 0x164, 0x641: 0x9b, 0x642: 0x165, 0x643: 0x166, 0x644: 0x72, 0x645: 0x73, 0x646: 0x167, 0x647: 0x168, + 0x648: 0x74, 0x649: 0x169, 0x64a: 0xba, 0x64b: 0xba, 0x64c: 0x9b, 0x64d: 0x9b, 0x64e: 0x9b, 0x64f: 0x9b, + 0x650: 0x9b, 0x651: 0x9b, 0x652: 0x9b, 0x653: 0x9b, 0x654: 0x9b, 0x655: 0x9b, 0x656: 0x9b, 0x657: 0x9b, + 0x658: 0x9b, 0x659: 0x9b, 0x65a: 0x9b, 0x65b: 0x16a, 0x65c: 0x9b, 0x65d: 0x16b, 0x65e: 0x9b, 0x65f: 0x16c, + 0x660: 0x16d, 0x661: 0x16e, 0x662: 0x16f, 0x663: 0xba, 0x664: 0x170, 0x665: 0x171, 0x666: 0x172, 0x667: 0x173, + 0x668: 0xba, 0x669: 0xba, 0x66a: 0xba, 0x66b: 0xba, 0x66c: 0xba, 0x66d: 0xba, 0x66e: 0xba, 0x66f: 0xba, + 0x670: 0xba, 0x671: 0xba, 0x672: 0xba, 0x673: 0xba, 0x674: 0xba, 0x675: 0xba, 0x676: 0xba, 0x677: 0xba, + 0x678: 0xba, 0x679: 0xba, 0x67a: 0xba, 0x67b: 0xba, 0x67c: 0xba, 0x67d: 0xba, 0x67e: 0xba, 0x67f: 0xba, + // Block 0x1a, offset 0x680 + 0x680: 0x9f, 0x681: 0x9f, 0x682: 0x9f, 0x683: 0x9f, 0x684: 0x9f, 0x685: 0x9f, 0x686: 0x9f, 0x687: 0x9f, + 0x688: 0x9f, 0x689: 0x9f, 0x68a: 0x9f, 0x68b: 0x9f, 0x68c: 0x9f, 0x68d: 0x9f, 0x68e: 0x9f, 0x68f: 0x9f, + 0x690: 0x9f, 0x691: 0x9f, 0x692: 0x9f, 0x693: 0x9f, 0x694: 0x9f, 0x695: 0x9f, 0x696: 0x9f, 0x697: 0x9f, + 0x698: 0x9f, 0x699: 0x9f, 0x69a: 0x9f, 0x69b: 0x174, 0x69c: 0x9f, 0x69d: 0x9f, 0x69e: 0x9f, 0x69f: 0x9f, + 0x6a0: 0x9f, 0x6a1: 0x9f, 0x6a2: 0x9f, 0x6a3: 0x9f, 0x6a4: 0x9f, 0x6a5: 0x9f, 0x6a6: 0x9f, 0x6a7: 0x9f, + 0x6a8: 0x9f, 0x6a9: 0x9f, 0x6aa: 0x9f, 0x6ab: 0x9f, 0x6ac: 0x9f, 0x6ad: 0x9f, 0x6ae: 0x9f, 0x6af: 0x9f, + 0x6b0: 0x9f, 0x6b1: 0x9f, 0x6b2: 0x9f, 0x6b3: 0x9f, 0x6b4: 0x9f, 0x6b5: 0x9f, 0x6b6: 0x9f, 0x6b7: 0x9f, + 0x6b8: 0x9f, 0x6b9: 0x9f, 0x6ba: 0x9f, 0x6bb: 0x9f, 0x6bc: 0x9f, 0x6bd: 0x9f, 0x6be: 0x9f, 0x6bf: 0x9f, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x9f, 0x6c1: 0x9f, 0x6c2: 0x9f, 0x6c3: 0x9f, 0x6c4: 0x9f, 0x6c5: 0x9f, 0x6c6: 0x9f, 0x6c7: 0x9f, + 0x6c8: 0x9f, 0x6c9: 0x9f, 0x6ca: 0x9f, 0x6cb: 0x9f, 0x6cc: 0x9f, 0x6cd: 0x9f, 0x6ce: 0x9f, 0x6cf: 0x9f, + 0x6d0: 0x9f, 0x6d1: 0x9f, 0x6d2: 0x9f, 0x6d3: 0x9f, 0x6d4: 0x9f, 0x6d5: 0x9f, 0x6d6: 0x9f, 0x6d7: 0x9f, + 0x6d8: 0x9f, 0x6d9: 0x9f, 0x6da: 0x9f, 0x6db: 0x9f, 0x6dc: 0x175, 0x6dd: 0x9f, 0x6de: 0x9f, 0x6df: 0x9f, + 0x6e0: 0x176, 0x6e1: 0x9f, 0x6e2: 0x9f, 0x6e3: 0x9f, 0x6e4: 0x9f, 0x6e5: 0x9f, 0x6e6: 0x9f, 0x6e7: 0x9f, + 0x6e8: 0x9f, 0x6e9: 0x9f, 0x6ea: 0x9f, 0x6eb: 0x9f, 0x6ec: 0x9f, 0x6ed: 0x9f, 0x6ee: 0x9f, 0x6ef: 0x9f, + 0x6f0: 0x9f, 0x6f1: 0x9f, 0x6f2: 0x9f, 0x6f3: 0x9f, 0x6f4: 0x9f, 0x6f5: 0x9f, 0x6f6: 0x9f, 0x6f7: 0x9f, + 0x6f8: 0x9f, 0x6f9: 0x9f, 0x6fa: 0x9f, 0x6fb: 0x9f, 0x6fc: 0x9f, 0x6fd: 0x9f, 0x6fe: 0x9f, 0x6ff: 0x9f, + // Block 0x1c, offset 0x700 + 0x700: 0x9f, 0x701: 0x9f, 0x702: 0x9f, 0x703: 0x9f, 0x704: 0x9f, 0x705: 0x9f, 0x706: 0x9f, 0x707: 0x9f, + 0x708: 0x9f, 0x709: 0x9f, 0x70a: 0x9f, 0x70b: 0x9f, 0x70c: 0x9f, 0x70d: 0x9f, 0x70e: 0x9f, 0x70f: 0x9f, + 0x710: 0x9f, 0x711: 0x9f, 0x712: 0x9f, 0x713: 0x9f, 0x714: 0x9f, 0x715: 0x9f, 0x716: 0x9f, 0x717: 0x9f, + 0x718: 0x9f, 0x719: 0x9f, 0x71a: 0x9f, 0x71b: 0x9f, 0x71c: 0x9f, 0x71d: 0x9f, 0x71e: 0x9f, 0x71f: 0x9f, + 0x720: 0x9f, 0x721: 0x9f, 0x722: 0x9f, 0x723: 0x9f, 0x724: 0x9f, 0x725: 0x9f, 0x726: 0x9f, 0x727: 0x9f, + 0x728: 0x9f, 0x729: 0x9f, 0x72a: 0x9f, 0x72b: 0x9f, 0x72c: 0x9f, 0x72d: 0x9f, 0x72e: 0x9f, 0x72f: 0x9f, + 0x730: 0x9f, 0x731: 0x9f, 0x732: 0x9f, 0x733: 0x9f, 0x734: 0x9f, 0x735: 0x9f, 0x736: 0x9f, 0x737: 0x9f, + 0x738: 0x9f, 0x739: 0x9f, 0x73a: 0x177, 0x73b: 0xba, 0x73c: 0xba, 0x73d: 0xba, 0x73e: 0xba, 0x73f: 0xba, + // Block 0x1d, offset 0x740 + 0x740: 0xba, 0x741: 0xba, 0x742: 0xba, 0x743: 0xba, 0x744: 0xba, 0x745: 0xba, 0x746: 0xba, 0x747: 0xba, + 0x748: 0xba, 0x749: 0xba, 0x74a: 0xba, 0x74b: 0xba, 0x74c: 0xba, 0x74d: 0xba, 0x74e: 0xba, 0x74f: 0xba, + 0x750: 0xba, 0x751: 0xba, 0x752: 0xba, 0x753: 0xba, 0x754: 0xba, 0x755: 0xba, 0x756: 0xba, 0x757: 0xba, + 0x758: 0xba, 0x759: 0xba, 0x75a: 0xba, 0x75b: 0xba, 0x75c: 0xba, 0x75d: 0xba, 0x75e: 0xba, 0x75f: 0xba, + 0x760: 0x75, 0x761: 0x76, 0x762: 0x77, 0x763: 0x178, 0x764: 0x78, 0x765: 0x79, 0x766: 0x179, 0x767: 0x7a, + 0x768: 0x7b, 0x769: 0xba, 0x76a: 0xba, 0x76b: 0xba, 0x76c: 0xba, 0x76d: 0xba, 0x76e: 0xba, 0x76f: 0xba, + 0x770: 0xba, 0x771: 0xba, 0x772: 0xba, 0x773: 0xba, 0x774: 0xba, 0x775: 0xba, 0x776: 0xba, 0x777: 0xba, + 0x778: 0xba, 0x779: 0xba, 0x77a: 0xba, 0x77b: 0xba, 0x77c: 0xba, 0x77d: 0xba, 0x77e: 0xba, 0x77f: 0xba, + // Block 0x1e, offset 0x780 + 0x790: 0x0d, 0x791: 0x0e, 0x792: 0x0f, 0x793: 0x10, 0x794: 0x11, 0x795: 0x0b, 0x796: 0x12, 0x797: 0x07, + 0x798: 0x13, 0x799: 0x0b, 0x79a: 0x0b, 0x79b: 0x14, 0x79c: 0x0b, 0x79d: 0x15, 0x79e: 0x16, 0x79f: 0x17, + 0x7a0: 0x07, 0x7a1: 0x07, 0x7a2: 0x07, 0x7a3: 0x07, 0x7a4: 0x07, 0x7a5: 0x07, 0x7a6: 0x07, 0x7a7: 0x07, + 0x7a8: 0x07, 0x7a9: 0x07, 0x7aa: 0x18, 0x7ab: 0x19, 0x7ac: 0x1a, 0x7ad: 0x0b, 0x7ae: 0x0b, 0x7af: 0x1b, + 0x7b0: 0x0b, 0x7b1: 0x0b, 0x7b2: 0x0b, 0x7b3: 0x0b, 0x7b4: 0x0b, 0x7b5: 0x0b, 0x7b6: 0x0b, 0x7b7: 0x0b, + 0x7b8: 0x0b, 0x7b9: 0x0b, 0x7ba: 0x0b, 0x7bb: 0x0b, 0x7bc: 0x0b, 0x7bd: 0x0b, 0x7be: 0x0b, 0x7bf: 0x0b, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x0b, 0x7c1: 0x0b, 0x7c2: 0x0b, 0x7c3: 0x0b, 0x7c4: 0x0b, 0x7c5: 0x0b, 0x7c6: 0x0b, 0x7c7: 0x0b, + 0x7c8: 0x0b, 0x7c9: 0x0b, 0x7ca: 0x0b, 0x7cb: 0x0b, 0x7cc: 0x0b, 0x7cd: 0x0b, 0x7ce: 0x0b, 0x7cf: 0x0b, + 0x7d0: 0x0b, 0x7d1: 0x0b, 0x7d2: 0x0b, 0x7d3: 0x0b, 0x7d4: 0x0b, 0x7d5: 0x0b, 0x7d6: 0x0b, 0x7d7: 0x0b, + 0x7d8: 0x0b, 0x7d9: 0x0b, 0x7da: 0x0b, 0x7db: 0x0b, 0x7dc: 0x0b, 0x7dd: 0x0b, 0x7de: 0x0b, 0x7df: 0x0b, + 0x7e0: 0x0b, 0x7e1: 0x0b, 0x7e2: 0x0b, 0x7e3: 0x0b, 0x7e4: 0x0b, 0x7e5: 0x0b, 0x7e6: 0x0b, 0x7e7: 0x0b, + 0x7e8: 0x0b, 0x7e9: 0x0b, 0x7ea: 0x0b, 0x7eb: 0x0b, 0x7ec: 0x0b, 0x7ed: 0x0b, 0x7ee: 0x0b, 0x7ef: 0x0b, + 0x7f0: 0x0b, 0x7f1: 0x0b, 0x7f2: 0x0b, 0x7f3: 0x0b, 0x7f4: 0x0b, 0x7f5: 0x0b, 0x7f6: 0x0b, 0x7f7: 0x0b, + 0x7f8: 0x0b, 0x7f9: 0x0b, 0x7fa: 0x0b, 0x7fb: 0x0b, 0x7fc: 0x0b, 0x7fd: 0x0b, 0x7fe: 0x0b, 0x7ff: 0x0b, + // Block 0x20, offset 0x800 + 0x800: 0x17a, 0x801: 0x17b, 0x802: 0xba, 0x803: 0xba, 0x804: 0x17c, 0x805: 0x17c, 0x806: 0x17c, 0x807: 0x17d, + 0x808: 0xba, 0x809: 0xba, 0x80a: 0xba, 0x80b: 0xba, 0x80c: 0xba, 0x80d: 0xba, 0x80e: 0xba, 0x80f: 0xba, + 0x810: 0xba, 0x811: 0xba, 0x812: 0xba, 0x813: 0xba, 0x814: 0xba, 0x815: 0xba, 0x816: 0xba, 0x817: 0xba, + 0x818: 0xba, 0x819: 0xba, 0x81a: 0xba, 0x81b: 0xba, 0x81c: 0xba, 0x81d: 0xba, 0x81e: 0xba, 0x81f: 0xba, + 0x820: 0xba, 0x821: 0xba, 0x822: 0xba, 0x823: 0xba, 0x824: 0xba, 0x825: 0xba, 0x826: 0xba, 0x827: 0xba, + 0x828: 0xba, 0x829: 0xba, 0x82a: 0xba, 0x82b: 0xba, 0x82c: 0xba, 0x82d: 0xba, 0x82e: 0xba, 0x82f: 0xba, + 0x830: 0xba, 0x831: 0xba, 0x832: 0xba, 0x833: 0xba, 0x834: 0xba, 0x835: 0xba, 0x836: 0xba, 0x837: 0xba, + 0x838: 0xba, 0x839: 0xba, 0x83a: 0xba, 0x83b: 0xba, 0x83c: 0xba, 0x83d: 0xba, 0x83e: 0xba, 0x83f: 0xba, + // Block 0x21, offset 0x840 + 0x840: 0x0b, 0x841: 0x0b, 0x842: 0x0b, 0x843: 0x0b, 0x844: 0x0b, 0x845: 0x0b, 0x846: 0x0b, 0x847: 0x0b, + 0x848: 0x0b, 0x849: 0x0b, 0x84a: 0x0b, 0x84b: 0x0b, 0x84c: 0x0b, 0x84d: 0x0b, 0x84e: 0x0b, 0x84f: 0x0b, + 0x850: 0x0b, 0x851: 0x0b, 0x852: 0x0b, 0x853: 0x0b, 0x854: 0x0b, 0x855: 0x0b, 0x856: 0x0b, 0x857: 0x0b, + 0x858: 0x0b, 0x859: 0x0b, 0x85a: 0x0b, 0x85b: 0x0b, 0x85c: 0x0b, 0x85d: 0x0b, 0x85e: 0x0b, 0x85f: 0x0b, + 0x860: 0x1e, 0x861: 0x0b, 0x862: 0x0b, 0x863: 0x0b, 0x864: 0x0b, 0x865: 0x0b, 0x866: 0x0b, 0x867: 0x0b, + 0x868: 0x0b, 0x869: 0x0b, 0x86a: 0x0b, 0x86b: 0x0b, 0x86c: 0x0b, 0x86d: 0x0b, 0x86e: 0x0b, 0x86f: 0x0b, + 0x870: 0x0b, 0x871: 0x0b, 0x872: 0x0b, 0x873: 0x0b, 0x874: 0x0b, 0x875: 0x0b, 0x876: 0x0b, 0x877: 0x0b, + 0x878: 0x0b, 0x879: 0x0b, 0x87a: 0x0b, 0x87b: 0x0b, 0x87c: 0x0b, 0x87d: 0x0b, 0x87e: 0x0b, 0x87f: 0x0b, + // Block 0x22, offset 0x880 + 0x880: 0x0b, 0x881: 0x0b, 0x882: 0x0b, 0x883: 0x0b, 0x884: 0x0b, 0x885: 0x0b, 0x886: 0x0b, 0x887: 0x0b, + 0x888: 0x0b, 0x889: 0x0b, 0x88a: 0x0b, 0x88b: 0x0b, 0x88c: 0x0b, 0x88d: 0x0b, 0x88e: 0x0b, 0x88f: 0x0b, +} + +// idnaSparseOffset: 258 entries, 516 bytes +var idnaSparseOffset = []uint16{0x0, 0x8, 0x19, 0x25, 0x27, 0x2c, 0x34, 0x3f, 0x4b, 0x4f, 0x5e, 0x63, 0x6b, 0x77, 0x85, 0x93, 0x98, 0xa1, 0xb1, 0xbf, 0xcc, 0xd8, 0xe9, 0xf3, 0xfa, 0x107, 0x118, 0x11f, 0x12a, 0x139, 0x147, 0x151, 0x153, 0x158, 0x15b, 0x15e, 0x160, 0x16c, 0x177, 0x17f, 0x185, 0x18b, 0x190, 0x195, 0x198, 0x19c, 0x1a2, 0x1a7, 0x1b3, 0x1bd, 0x1c3, 0x1d4, 0x1de, 0x1e1, 0x1e9, 0x1ec, 0x1f9, 0x201, 0x205, 0x20c, 0x214, 0x224, 0x230, 0x232, 0x23c, 0x248, 0x254, 0x260, 0x268, 0x26d, 0x277, 0x288, 0x28c, 0x297, 0x29b, 0x2a4, 0x2ac, 0x2b2, 0x2b7, 0x2ba, 0x2bd, 0x2c1, 0x2c7, 0x2cb, 0x2cf, 0x2d5, 0x2dc, 0x2e2, 0x2ea, 0x2f1, 0x2fc, 0x306, 0x30a, 0x30d, 0x313, 0x317, 0x319, 0x31c, 0x31e, 0x321, 0x32b, 0x32e, 0x33d, 0x341, 0x346, 0x349, 0x34d, 0x352, 0x357, 0x35d, 0x363, 0x372, 0x378, 0x37c, 0x38b, 0x390, 0x398, 0x3a2, 0x3ad, 0x3b5, 0x3c6, 0x3cf, 0x3df, 0x3ec, 0x3f6, 0x3fb, 0x408, 0x40c, 0x411, 0x413, 0x417, 0x419, 0x41d, 0x426, 0x42c, 0x430, 0x440, 0x44a, 0x44f, 0x452, 0x458, 0x45f, 0x464, 0x468, 0x46e, 0x473, 0x47c, 0x481, 0x487, 0x48e, 0x495, 0x49c, 0x4a0, 0x4a5, 0x4a8, 0x4ad, 0x4b9, 0x4bf, 0x4c4, 0x4cb, 0x4d3, 0x4d8, 0x4dc, 0x4ec, 0x4f3, 0x4f7, 0x4fb, 0x502, 0x504, 0x507, 0x50a, 0x50e, 0x512, 0x518, 0x521, 0x52d, 0x534, 0x53d, 0x545, 0x54c, 0x55a, 0x567, 0x574, 0x57d, 0x581, 0x58f, 0x597, 0x5a2, 0x5ab, 0x5b1, 0x5b9, 0x5c2, 0x5cc, 0x5cf, 0x5db, 0x5de, 0x5e3, 0x5e6, 0x5f0, 0x5f9, 0x605, 0x608, 0x60d, 0x610, 0x613, 0x616, 0x61d, 0x624, 0x628, 0x633, 0x636, 0x63c, 0x641, 0x645, 0x648, 0x64b, 0x64e, 0x653, 0x65d, 0x660, 0x664, 0x673, 0x67f, 0x683, 0x688, 0x68d, 0x691, 0x696, 0x69f, 0x6aa, 0x6b0, 0x6b8, 0x6bc, 0x6c0, 0x6c6, 0x6cc, 0x6d1, 0x6d4, 0x6e2, 0x6e9, 0x6ec, 0x6ef, 0x6f3, 0x6f9, 0x6fe, 0x708, 0x70d, 0x710, 0x713, 0x716, 0x719, 0x71d, 0x720, 0x730, 0x741, 0x746, 0x748, 0x74a} + +// idnaSparseValues: 1869 entries, 7476 bytes +var idnaSparseValues = [1869]valueRange{ + // Block 0x0, offset 0x0 + {value: 0x0000, lo: 0x07}, + {value: 0xe105, lo: 0x80, hi: 0x96}, + {value: 0x0018, lo: 0x97, hi: 0x97}, + {value: 0xe105, lo: 0x98, hi: 0x9e}, + {value: 0x001f, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xb7}, + {value: 0x0008, lo: 0xb8, hi: 0xbf}, + // Block 0x1, offset 0x8 + {value: 0x0000, lo: 0x10}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0xe01d, lo: 0x81, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0x82}, + {value: 0x0335, lo: 0x83, hi: 0x83}, + {value: 0x034d, lo: 0x84, hi: 0x84}, + {value: 0x0365, lo: 0x85, hi: 0x85}, + {value: 0xe00d, lo: 0x86, hi: 0x86}, + {value: 0x0008, lo: 0x87, hi: 0x87}, + {value: 0xe00d, lo: 0x88, hi: 0x88}, + {value: 0x0008, lo: 0x89, hi: 0x89}, + {value: 0xe00d, lo: 0x8a, hi: 0x8a}, + {value: 0x0008, lo: 0x8b, hi: 0x8b}, + {value: 0xe00d, lo: 0x8c, hi: 0x8c}, + {value: 0x0008, lo: 0x8d, hi: 0x8d}, + {value: 0xe00d, lo: 0x8e, hi: 0x8e}, + {value: 0x0008, lo: 0x8f, hi: 0xbf}, + // Block 0x2, offset 0x19 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x0249, lo: 0xb0, hi: 0xb0}, + {value: 0x037d, lo: 0xb1, hi: 0xb1}, + {value: 0x0259, lo: 0xb2, hi: 0xb2}, + {value: 0x0269, lo: 0xb3, hi: 0xb3}, + {value: 0x034d, lo: 0xb4, hi: 0xb4}, + {value: 0x0395, lo: 0xb5, hi: 0xb5}, + {value: 0xe1bd, lo: 0xb6, hi: 0xb6}, + {value: 0x0279, lo: 0xb7, hi: 0xb7}, + {value: 0x0289, lo: 0xb8, hi: 0xb8}, + {value: 0x0008, lo: 0xb9, hi: 0xbf}, + // Block 0x3, offset 0x25 + {value: 0x0000, lo: 0x01}, + {value: 0x3308, lo: 0x80, hi: 0xbf}, + // Block 0x4, offset 0x27 + {value: 0x0000, lo: 0x04}, + {value: 0x03f5, lo: 0x80, hi: 0x8f}, + {value: 0xe105, lo: 0x90, hi: 0x9f}, + {value: 0x049d, lo: 0xa0, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x5, offset 0x2c + {value: 0x0000, lo: 0x07}, + {value: 0xe185, lo: 0x80, hi: 0x8f}, + {value: 0x0545, lo: 0x90, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x98}, + {value: 0x0008, lo: 0x99, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xa0}, + {value: 0x0008, lo: 0xa1, hi: 0xbf}, + // Block 0x6, offset 0x34 + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0401, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x88}, + {value: 0x0018, lo: 0x89, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x90}, + {value: 0x3308, lo: 0x91, hi: 0xbd}, + {value: 0x0818, lo: 0xbe, hi: 0xbe}, + {value: 0x3308, lo: 0xbf, hi: 0xbf}, + // Block 0x7, offset 0x3f + {value: 0x0000, lo: 0x0b}, + {value: 0x0818, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x82}, + {value: 0x0818, lo: 0x83, hi: 0x83}, + {value: 0x3308, lo: 0x84, hi: 0x85}, + {value: 0x0818, lo: 0x86, hi: 0x86}, + {value: 0x3308, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0808, lo: 0x90, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xaf}, + {value: 0x0808, lo: 0xb0, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0x8, offset 0x4b + {value: 0x0000, lo: 0x03}, + {value: 0x0a08, lo: 0x80, hi: 0x87}, + {value: 0x0c08, lo: 0x88, hi: 0x99}, + {value: 0x0a08, lo: 0x9a, hi: 0xbf}, + // Block 0x9, offset 0x4f + {value: 0x0000, lo: 0x0e}, + {value: 0x3308, lo: 0x80, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8c}, + {value: 0x0c08, lo: 0x8d, hi: 0x8d}, + {value: 0x0a08, lo: 0x8e, hi: 0x98}, + {value: 0x0c08, lo: 0x99, hi: 0x9b}, + {value: 0x0a08, lo: 0x9c, hi: 0xaa}, + {value: 0x0c08, lo: 0xab, hi: 0xac}, + {value: 0x0a08, lo: 0xad, hi: 0xb0}, + {value: 0x0c08, lo: 0xb1, hi: 0xb1}, + {value: 0x0a08, lo: 0xb2, hi: 0xb2}, + {value: 0x0c08, lo: 0xb3, hi: 0xb4}, + {value: 0x0a08, lo: 0xb5, hi: 0xb7}, + {value: 0x0c08, lo: 0xb8, hi: 0xb9}, + {value: 0x0a08, lo: 0xba, hi: 0xbf}, + // Block 0xa, offset 0x5e + {value: 0x0000, lo: 0x04}, + {value: 0x0808, lo: 0x80, hi: 0xa5}, + {value: 0x3308, lo: 0xa6, hi: 0xb0}, + {value: 0x0808, lo: 0xb1, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbf}, + // Block 0xb, offset 0x63 + {value: 0x0000, lo: 0x07}, + {value: 0x0808, lo: 0x80, hi: 0x89}, + {value: 0x0a08, lo: 0x8a, hi: 0xaa}, + {value: 0x3308, lo: 0xab, hi: 0xb3}, + {value: 0x0808, lo: 0xb4, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xb9}, + {value: 0x0818, lo: 0xba, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0xc, offset 0x6b + {value: 0x0000, lo: 0x0b}, + {value: 0x0808, lo: 0x80, hi: 0x95}, + {value: 0x3308, lo: 0x96, hi: 0x99}, + {value: 0x0808, lo: 0x9a, hi: 0x9a}, + {value: 0x3308, lo: 0x9b, hi: 0xa3}, + {value: 0x0808, lo: 0xa4, hi: 0xa4}, + {value: 0x3308, lo: 0xa5, hi: 0xa7}, + {value: 0x0808, lo: 0xa8, hi: 0xa8}, + {value: 0x3308, lo: 0xa9, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0818, lo: 0xb0, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xd, offset 0x77 + {value: 0x0000, lo: 0x0d}, + {value: 0x0c08, lo: 0x80, hi: 0x80}, + {value: 0x0a08, lo: 0x81, hi: 0x85}, + {value: 0x0c08, lo: 0x86, hi: 0x87}, + {value: 0x0a08, lo: 0x88, hi: 0x88}, + {value: 0x0c08, lo: 0x89, hi: 0x89}, + {value: 0x0a08, lo: 0x8a, hi: 0x93}, + {value: 0x0c08, lo: 0x94, hi: 0x94}, + {value: 0x0a08, lo: 0x95, hi: 0x95}, + {value: 0x0808, lo: 0x96, hi: 0x98}, + {value: 0x3308, lo: 0x99, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9d}, + {value: 0x0818, lo: 0x9e, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0xbf}, + // Block 0xe, offset 0x85 + {value: 0x0000, lo: 0x0d}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0a08, lo: 0xa0, hi: 0xa9}, + {value: 0x0c08, lo: 0xaa, hi: 0xac}, + {value: 0x0808, lo: 0xad, hi: 0xad}, + {value: 0x0c08, lo: 0xae, hi: 0xae}, + {value: 0x0a08, lo: 0xaf, hi: 0xb0}, + {value: 0x0c08, lo: 0xb1, hi: 0xb2}, + {value: 0x0a08, lo: 0xb3, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xb5}, + {value: 0x0a08, lo: 0xb6, hi: 0xb8}, + {value: 0x0c08, lo: 0xb9, hi: 0xb9}, + {value: 0x0a08, lo: 0xba, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0xf, offset 0x93 + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x93}, + {value: 0x3308, lo: 0x94, hi: 0xa1}, + {value: 0x0840, lo: 0xa2, hi: 0xa2}, + {value: 0x3308, lo: 0xa3, hi: 0xbf}, + // Block 0x10, offset 0x98 + {value: 0x0000, lo: 0x08}, + {value: 0x3308, lo: 0x80, hi: 0x82}, + {value: 0x3008, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0xb9}, + {value: 0x3308, lo: 0xba, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0x11, offset 0xa1 + {value: 0x0000, lo: 0x0f}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x3008, lo: 0x81, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x85}, + {value: 0x3008, lo: 0x86, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x3008, lo: 0x8a, hi: 0x8c}, + {value: 0x3b08, lo: 0x8d, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x96}, + {value: 0x3008, lo: 0x97, hi: 0x97}, + {value: 0x0040, lo: 0x98, hi: 0xa5}, + {value: 0x0008, lo: 0xa6, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x12, offset 0xb1 + {value: 0x0000, lo: 0x0d}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x3008, lo: 0x81, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0x0008, lo: 0x92, hi: 0xa8}, + {value: 0x0040, lo: 0xa9, hi: 0xa9}, + {value: 0x0008, lo: 0xaa, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x3308, lo: 0xbe, hi: 0xbf}, + // Block 0x13, offset 0xbf + {value: 0x0000, lo: 0x0c}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0x0008, lo: 0x92, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0x14, offset 0xcc + {value: 0x0000, lo: 0x0b}, + {value: 0x0040, lo: 0x80, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x99}, + {value: 0x0008, lo: 0x9a, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xb2}, + {value: 0x0008, lo: 0xb3, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x15, offset 0xd8 + {value: 0x0000, lo: 0x10}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x89}, + {value: 0x3b08, lo: 0x8a, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8e}, + {value: 0x3008, lo: 0x8f, hi: 0x91}, + {value: 0x3308, lo: 0x92, hi: 0x94}, + {value: 0x0040, lo: 0x95, hi: 0x95}, + {value: 0x3308, lo: 0x96, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x97}, + {value: 0x3008, lo: 0x98, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xa5}, + {value: 0x0008, lo: 0xa6, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xb1}, + {value: 0x3008, lo: 0xb2, hi: 0xb3}, + {value: 0x0018, lo: 0xb4, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0x16, offset 0xe9 + {value: 0x0000, lo: 0x09}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0xb0}, + {value: 0x3308, lo: 0xb1, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xb2}, + {value: 0x08f1, lo: 0xb3, hi: 0xb3}, + {value: 0x3308, lo: 0xb4, hi: 0xb9}, + {value: 0x3b08, lo: 0xba, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbe}, + {value: 0x0018, lo: 0xbf, hi: 0xbf}, + // Block 0x17, offset 0xf3 + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x3308, lo: 0x87, hi: 0x8e}, + {value: 0x0018, lo: 0x8f, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0xbf}, + // Block 0x18, offset 0xfa + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x84}, + {value: 0x0040, lo: 0x85, hi: 0x85}, + {value: 0x0008, lo: 0x86, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x3308, lo: 0x88, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9b}, + {value: 0x0961, lo: 0x9c, hi: 0x9c}, + {value: 0x0999, lo: 0x9d, hi: 0x9d}, + {value: 0x0008, lo: 0x9e, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0x19, offset 0x107 + {value: 0x0000, lo: 0x10}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x8a}, + {value: 0x0008, lo: 0x8b, hi: 0x8b}, + {value: 0xe03d, lo: 0x8c, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0x97}, + {value: 0x3308, lo: 0x98, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0018, lo: 0xaa, hi: 0xb4}, + {value: 0x3308, lo: 0xb5, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xb6}, + {value: 0x3308, lo: 0xb7, hi: 0xb7}, + {value: 0x0018, lo: 0xb8, hi: 0xb8}, + {value: 0x3308, lo: 0xb9, hi: 0xb9}, + {value: 0x0018, lo: 0xba, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0x1a, offset 0x118 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x85}, + {value: 0x3308, lo: 0x86, hi: 0x86}, + {value: 0x0018, lo: 0x87, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8d}, + {value: 0x0018, lo: 0x8e, hi: 0x9a}, + {value: 0x0040, lo: 0x9b, hi: 0xbf}, + // Block 0x1b, offset 0x11f + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0xaa}, + {value: 0x3008, lo: 0xab, hi: 0xac}, + {value: 0x3308, lo: 0xad, hi: 0xb0}, + {value: 0x3008, lo: 0xb1, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb7}, + {value: 0x3008, lo: 0xb8, hi: 0xb8}, + {value: 0x3b08, lo: 0xb9, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbc}, + {value: 0x3308, lo: 0xbd, hi: 0xbe}, + {value: 0x0008, lo: 0xbf, hi: 0xbf}, + // Block 0x1c, offset 0x12a + {value: 0x0000, lo: 0x0e}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0018, lo: 0x8a, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x95}, + {value: 0x3008, lo: 0x96, hi: 0x97}, + {value: 0x3308, lo: 0x98, hi: 0x99}, + {value: 0x0008, lo: 0x9a, hi: 0x9d}, + {value: 0x3308, lo: 0x9e, hi: 0xa0}, + {value: 0x0008, lo: 0xa1, hi: 0xa1}, + {value: 0x3008, lo: 0xa2, hi: 0xa4}, + {value: 0x0008, lo: 0xa5, hi: 0xa6}, + {value: 0x3008, lo: 0xa7, hi: 0xad}, + {value: 0x0008, lo: 0xae, hi: 0xb0}, + {value: 0x3308, lo: 0xb1, hi: 0xb4}, + {value: 0x0008, lo: 0xb5, hi: 0xbf}, + // Block 0x1d, offset 0x139 + {value: 0x0000, lo: 0x0d}, + {value: 0x0008, lo: 0x80, hi: 0x81}, + {value: 0x3308, lo: 0x82, hi: 0x82}, + {value: 0x3008, lo: 0x83, hi: 0x84}, + {value: 0x3308, lo: 0x85, hi: 0x86}, + {value: 0x3008, lo: 0x87, hi: 0x8c}, + {value: 0x3308, lo: 0x8d, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x8e}, + {value: 0x3008, lo: 0x8f, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x3008, lo: 0x9a, hi: 0x9c}, + {value: 0x3308, lo: 0x9d, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0x1e, offset 0x147 + {value: 0x0000, lo: 0x09}, + {value: 0x0040, lo: 0x80, hi: 0x86}, + {value: 0x055d, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8c}, + {value: 0x055d, lo: 0x8d, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xba}, + {value: 0x0018, lo: 0xbb, hi: 0xbb}, + {value: 0xe105, lo: 0xbc, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbf}, + // Block 0x1f, offset 0x151 + {value: 0x0000, lo: 0x01}, + {value: 0x0018, lo: 0x80, hi: 0xbf}, + // Block 0x20, offset 0x153 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0xa0}, + {value: 0x2018, lo: 0xa1, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xbf}, + // Block 0x21, offset 0x158 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xa7}, + {value: 0x2018, lo: 0xa8, hi: 0xbf}, + // Block 0x22, offset 0x15b + {value: 0x0000, lo: 0x02}, + {value: 0x2018, lo: 0x80, hi: 0x82}, + {value: 0x0018, lo: 0x83, hi: 0xbf}, + // Block 0x23, offset 0x15e + {value: 0x0000, lo: 0x01}, + {value: 0x0008, lo: 0x80, hi: 0xbf}, + // Block 0x24, offset 0x160 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0008, lo: 0x8a, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0x98}, + {value: 0x0040, lo: 0x99, hi: 0x99}, + {value: 0x0008, lo: 0x9a, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x25, offset 0x16c + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0008, lo: 0x8a, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb7}, + {value: 0x0008, lo: 0xb8, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x26, offset 0x177 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x0040, lo: 0x81, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0xbf}, + // Block 0x27, offset 0x17f + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0x0008, lo: 0x92, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0xbf}, + // Block 0x28, offset 0x185 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x9a}, + {value: 0x0040, lo: 0x9b, hi: 0x9c}, + {value: 0x3308, lo: 0x9d, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0x29, offset 0x18b + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x2a, offset 0x190 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb7}, + {value: 0xe045, lo: 0xb8, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x2b, offset 0x195 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0xbf}, + // Block 0x2c, offset 0x198 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xac}, + {value: 0x0018, lo: 0xad, hi: 0xae}, + {value: 0x0008, lo: 0xaf, hi: 0xbf}, + // Block 0x2d, offset 0x19c + {value: 0x0000, lo: 0x05}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9c}, + {value: 0x0040, lo: 0x9d, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x2e, offset 0x1a2 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xaa}, + {value: 0x0018, lo: 0xab, hi: 0xb0}, + {value: 0x0008, lo: 0xb1, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0x2f, offset 0x1a7 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8d}, + {value: 0x0008, lo: 0x8e, hi: 0x91}, + {value: 0x3308, lo: 0x92, hi: 0x93}, + {value: 0x3b08, lo: 0x94, hi: 0x94}, + {value: 0x0040, lo: 0x95, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb3}, + {value: 0x3b08, lo: 0xb4, hi: 0xb4}, + {value: 0x0018, lo: 0xb5, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x30, offset 0x1b3 + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x91}, + {value: 0x3308, lo: 0x92, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xad}, + {value: 0x0008, lo: 0xae, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0x31, offset 0x1bd + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0xb3}, + {value: 0x3340, lo: 0xb4, hi: 0xb5}, + {value: 0x3008, lo: 0xb6, hi: 0xb6}, + {value: 0x3308, lo: 0xb7, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbf}, + // Block 0x32, offset 0x1c3 + {value: 0x0000, lo: 0x10}, + {value: 0x3008, lo: 0x80, hi: 0x85}, + {value: 0x3308, lo: 0x86, hi: 0x86}, + {value: 0x3008, lo: 0x87, hi: 0x88}, + {value: 0x3308, lo: 0x89, hi: 0x91}, + {value: 0x3b08, lo: 0x92, hi: 0x92}, + {value: 0x3308, lo: 0x93, hi: 0x93}, + {value: 0x0018, lo: 0x94, hi: 0x96}, + {value: 0x0008, lo: 0x97, hi: 0x97}, + {value: 0x0018, lo: 0x98, hi: 0x9b}, + {value: 0x0008, lo: 0x9c, hi: 0x9c}, + {value: 0x3308, lo: 0x9d, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x33, offset 0x1d4 + {value: 0x0000, lo: 0x09}, + {value: 0x0018, lo: 0x80, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x86}, + {value: 0x0218, lo: 0x87, hi: 0x87}, + {value: 0x0018, lo: 0x88, hi: 0x8a}, + {value: 0x33c0, lo: 0x8b, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0208, lo: 0xa0, hi: 0xbf}, + // Block 0x34, offset 0x1de + {value: 0x0000, lo: 0x02}, + {value: 0x0208, lo: 0x80, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbf}, + // Block 0x35, offset 0x1e1 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0x84}, + {value: 0x3308, lo: 0x85, hi: 0x86}, + {value: 0x0208, lo: 0x87, hi: 0xa8}, + {value: 0x3308, lo: 0xa9, hi: 0xa9}, + {value: 0x0208, lo: 0xaa, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x36, offset 0x1e9 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0x37, offset 0x1ec + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x3308, lo: 0xa0, hi: 0xa2}, + {value: 0x3008, lo: 0xa3, hi: 0xa6}, + {value: 0x3308, lo: 0xa7, hi: 0xa8}, + {value: 0x3008, lo: 0xa9, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x3008, lo: 0xb0, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb2}, + {value: 0x3008, lo: 0xb3, hi: 0xb8}, + {value: 0x3308, lo: 0xb9, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0x38, offset 0x1f9 + {value: 0x0000, lo: 0x07}, + {value: 0x0018, lo: 0x80, hi: 0x80}, + {value: 0x0040, lo: 0x81, hi: 0x83}, + {value: 0x0018, lo: 0x84, hi: 0x85}, + {value: 0x0008, lo: 0x86, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0x39, offset 0x201 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x3a, offset 0x205 + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0028, lo: 0x9a, hi: 0x9a}, + {value: 0x0040, lo: 0x9b, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0xbf}, + // Block 0x3b, offset 0x20c + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0x96}, + {value: 0x3308, lo: 0x97, hi: 0x98}, + {value: 0x3008, lo: 0x99, hi: 0x9a}, + {value: 0x3308, lo: 0x9b, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x3c, offset 0x214 + {value: 0x0000, lo: 0x0f}, + {value: 0x0008, lo: 0x80, hi: 0x94}, + {value: 0x3008, lo: 0x95, hi: 0x95}, + {value: 0x3308, lo: 0x96, hi: 0x96}, + {value: 0x3008, lo: 0x97, hi: 0x97}, + {value: 0x3308, lo: 0x98, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x3b08, lo: 0xa0, hi: 0xa0}, + {value: 0x3008, lo: 0xa1, hi: 0xa1}, + {value: 0x3308, lo: 0xa2, hi: 0xa2}, + {value: 0x3008, lo: 0xa3, hi: 0xa4}, + {value: 0x3308, lo: 0xa5, hi: 0xac}, + {value: 0x3008, lo: 0xad, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbe}, + {value: 0x3308, lo: 0xbf, hi: 0xbf}, + // Block 0x3d, offset 0x224 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa6}, + {value: 0x0008, lo: 0xa7, hi: 0xa7}, + {value: 0x0018, lo: 0xa8, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xbd}, + {value: 0x3318, lo: 0xbe, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x3e, offset 0x230 + {value: 0x0000, lo: 0x01}, + {value: 0x0040, lo: 0x80, hi: 0xbf}, + // Block 0x3f, offset 0x232 + {value: 0x0000, lo: 0x09}, + {value: 0x3308, lo: 0x80, hi: 0x83}, + {value: 0x3008, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0xb3}, + {value: 0x3308, lo: 0xb4, hi: 0xb4}, + {value: 0x3008, lo: 0xb5, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbc}, + {value: 0x3008, lo: 0xbd, hi: 0xbf}, + // Block 0x40, offset 0x23c + {value: 0x0000, lo: 0x0b}, + {value: 0x3008, lo: 0x80, hi: 0x81}, + {value: 0x3308, lo: 0x82, hi: 0x82}, + {value: 0x3008, lo: 0x83, hi: 0x83}, + {value: 0x3808, lo: 0x84, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0xaa}, + {value: 0x3308, lo: 0xab, hi: 0xb3}, + {value: 0x0018, lo: 0xb4, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0x41, offset 0x248 + {value: 0x0000, lo: 0x0b}, + {value: 0x3308, lo: 0x80, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xa0}, + {value: 0x3008, lo: 0xa1, hi: 0xa1}, + {value: 0x3308, lo: 0xa2, hi: 0xa5}, + {value: 0x3008, lo: 0xa6, hi: 0xa7}, + {value: 0x3308, lo: 0xa8, hi: 0xa9}, + {value: 0x3808, lo: 0xaa, hi: 0xaa}, + {value: 0x3b08, lo: 0xab, hi: 0xab}, + {value: 0x3308, lo: 0xac, hi: 0xad}, + {value: 0x0008, lo: 0xae, hi: 0xbf}, + // Block 0x42, offset 0x254 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0xa5}, + {value: 0x3308, lo: 0xa6, hi: 0xa6}, + {value: 0x3008, lo: 0xa7, hi: 0xa7}, + {value: 0x3308, lo: 0xa8, hi: 0xa9}, + {value: 0x3008, lo: 0xaa, hi: 0xac}, + {value: 0x3308, lo: 0xad, hi: 0xad}, + {value: 0x3008, lo: 0xae, hi: 0xae}, + {value: 0x3308, lo: 0xaf, hi: 0xb1}, + {value: 0x3808, lo: 0xb2, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbb}, + {value: 0x0018, lo: 0xbc, hi: 0xbf}, + // Block 0x43, offset 0x260 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xa3}, + {value: 0x3008, lo: 0xa4, hi: 0xab}, + {value: 0x3308, lo: 0xac, hi: 0xb3}, + {value: 0x3008, lo: 0xb4, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xba}, + {value: 0x0018, lo: 0xbb, hi: 0xbf}, + // Block 0x44, offset 0x268 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0x8c}, + {value: 0x0008, lo: 0x8d, hi: 0xbd}, + {value: 0x0018, lo: 0xbe, hi: 0xbf}, + // Block 0x45, offset 0x26d + {value: 0x0000, lo: 0x09}, + {value: 0x0e29, lo: 0x80, hi: 0x80}, + {value: 0x0e41, lo: 0x81, hi: 0x81}, + {value: 0x0e59, lo: 0x82, hi: 0x82}, + {value: 0x0e71, lo: 0x83, hi: 0x83}, + {value: 0x0e89, lo: 0x84, hi: 0x85}, + {value: 0x0ea1, lo: 0x86, hi: 0x86}, + {value: 0x0eb9, lo: 0x87, hi: 0x87}, + {value: 0x057d, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0xbf}, + // Block 0x46, offset 0x277 + {value: 0x0000, lo: 0x10}, + {value: 0x0018, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x3308, lo: 0x90, hi: 0x92}, + {value: 0x0018, lo: 0x93, hi: 0x93}, + {value: 0x3308, lo: 0x94, hi: 0xa0}, + {value: 0x3008, lo: 0xa1, hi: 0xa1}, + {value: 0x3308, lo: 0xa2, hi: 0xa8}, + {value: 0x0008, lo: 0xa9, hi: 0xac}, + {value: 0x3308, lo: 0xad, hi: 0xad}, + {value: 0x0008, lo: 0xae, hi: 0xb1}, + {value: 0x3008, lo: 0xb2, hi: 0xb3}, + {value: 0x3308, lo: 0xb4, hi: 0xb4}, + {value: 0x0008, lo: 0xb5, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x47, offset 0x288 + {value: 0x0000, lo: 0x03}, + {value: 0x3308, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xba}, + {value: 0x3308, lo: 0xbb, hi: 0xbf}, + // Block 0x48, offset 0x28c + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x87}, + {value: 0xe045, lo: 0x88, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x97}, + {value: 0xe045, lo: 0x98, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa7}, + {value: 0xe045, lo: 0xa8, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb7}, + {value: 0xe045, lo: 0xb8, hi: 0xbf}, + // Block 0x49, offset 0x297 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x3318, lo: 0x90, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xbf}, + // Block 0x4a, offset 0x29b + {value: 0x0000, lo: 0x08}, + {value: 0x0018, lo: 0x80, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x84}, + {value: 0x0018, lo: 0x85, hi: 0x88}, + {value: 0x24c1, lo: 0x89, hi: 0x89}, + {value: 0x0018, lo: 0x8a, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbf}, + // Block 0x4b, offset 0x2a4 + {value: 0x0000, lo: 0x07}, + {value: 0x0018, lo: 0x80, hi: 0xab}, + {value: 0x24f1, lo: 0xac, hi: 0xac}, + {value: 0x2529, lo: 0xad, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xae}, + {value: 0x2579, lo: 0xaf, hi: 0xaf}, + {value: 0x25b1, lo: 0xb0, hi: 0xb0}, + {value: 0x0018, lo: 0xb1, hi: 0xbf}, + // Block 0x4c, offset 0x2ac + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x9f}, + {value: 0x0080, lo: 0xa0, hi: 0xa0}, + {value: 0x0018, lo: 0xa1, hi: 0xad}, + {value: 0x0080, lo: 0xae, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x4d, offset 0x2b2 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0xa8}, + {value: 0x09c5, lo: 0xa9, hi: 0xa9}, + {value: 0x09e5, lo: 0xaa, hi: 0xaa}, + {value: 0x0018, lo: 0xab, hi: 0xbf}, + // Block 0x4e, offset 0x2b7 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x4f, offset 0x2ba + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xbf}, + // Block 0x50, offset 0x2bd + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x8b}, + {value: 0x28c1, lo: 0x8c, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0xbf}, + // Block 0x51, offset 0x2c1 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0e66, lo: 0xb4, hi: 0xb4}, + {value: 0x292a, lo: 0xb5, hi: 0xb5}, + {value: 0x0e86, lo: 0xb6, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xbf}, + // Block 0x52, offset 0x2c7 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x9b}, + {value: 0x2941, lo: 0x9c, hi: 0x9c}, + {value: 0x0018, lo: 0x9d, hi: 0xbf}, + // Block 0x53, offset 0x2cb + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xbf}, + // Block 0x54, offset 0x2cf + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x97}, + {value: 0x0018, lo: 0x98, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbc}, + {value: 0x0018, lo: 0xbd, hi: 0xbf}, + // Block 0x55, offset 0x2d5 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0018, lo: 0x8a, hi: 0x91}, + {value: 0x0040, lo: 0x92, hi: 0xab}, + {value: 0x0018, lo: 0xac, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0x56, offset 0x2dc + {value: 0x0000, lo: 0x05}, + {value: 0xe185, lo: 0x80, hi: 0x8f}, + {value: 0x03f5, lo: 0x90, hi: 0x9f}, + {value: 0x0ea5, lo: 0xa0, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x57, offset 0x2e2 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xa5}, + {value: 0x0040, lo: 0xa6, hi: 0xa6}, + {value: 0x0008, lo: 0xa7, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xac}, + {value: 0x0008, lo: 0xad, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x58, offset 0x2ea + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xae}, + {value: 0xe075, lo: 0xaf, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0x59, offset 0x2f1 + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xb7}, + {value: 0x0008, lo: 0xb8, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x5a, offset 0x2fc + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x3308, lo: 0xa0, hi: 0xbf}, + // Block 0x5b, offset 0x306 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xae}, + {value: 0x0008, lo: 0xaf, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x5c, offset 0x30a + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x84}, + {value: 0x0040, lo: 0x85, hi: 0xbf}, + // Block 0x5d, offset 0x30d + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9e}, + {value: 0x0edd, lo: 0x9f, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xbf}, + // Block 0x5e, offset 0x313 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xb2}, + {value: 0x0efd, lo: 0xb3, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0x5f, offset 0x317 + {value: 0x0020, lo: 0x01}, + {value: 0x0f1d, lo: 0x80, hi: 0xbf}, + // Block 0x60, offset 0x319 + {value: 0x0020, lo: 0x02}, + {value: 0x171d, lo: 0x80, hi: 0x8f}, + {value: 0x18fd, lo: 0x90, hi: 0xbf}, + // Block 0x61, offset 0x31c + {value: 0x0020, lo: 0x01}, + {value: 0x1efd, lo: 0x80, hi: 0xbf}, + // Block 0x62, offset 0x31e + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0xbf}, + // Block 0x63, offset 0x321 + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x98}, + {value: 0x3308, lo: 0x99, hi: 0x9a}, + {value: 0x29e2, lo: 0x9b, hi: 0x9b}, + {value: 0x2a0a, lo: 0x9c, hi: 0x9c}, + {value: 0x0008, lo: 0x9d, hi: 0x9e}, + {value: 0x2a31, lo: 0x9f, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa0}, + {value: 0x0008, lo: 0xa1, hi: 0xbf}, + // Block 0x64, offset 0x32b + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xbe}, + {value: 0x2a69, lo: 0xbf, hi: 0xbf}, + // Block 0x65, offset 0x32e + {value: 0x0000, lo: 0x0e}, + {value: 0x0040, lo: 0x80, hi: 0x84}, + {value: 0x0008, lo: 0x85, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xb0}, + {value: 0x2a1d, lo: 0xb1, hi: 0xb1}, + {value: 0x2a3d, lo: 0xb2, hi: 0xb2}, + {value: 0x2a5d, lo: 0xb3, hi: 0xb3}, + {value: 0x2a7d, lo: 0xb4, hi: 0xb4}, + {value: 0x2a5d, lo: 0xb5, hi: 0xb5}, + {value: 0x2a9d, lo: 0xb6, hi: 0xb6}, + {value: 0x2abd, lo: 0xb7, hi: 0xb7}, + {value: 0x2add, lo: 0xb8, hi: 0xb9}, + {value: 0x2afd, lo: 0xba, hi: 0xbb}, + {value: 0x2b1d, lo: 0xbc, hi: 0xbd}, + {value: 0x2afd, lo: 0xbe, hi: 0xbf}, + // Block 0x66, offset 0x33d + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x67, offset 0x341 + {value: 0x0030, lo: 0x04}, + {value: 0x2aa2, lo: 0x80, hi: 0x9d}, + {value: 0x305a, lo: 0x9e, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x30a2, lo: 0xa0, hi: 0xbf}, + // Block 0x68, offset 0x346 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0xbf}, + // Block 0x69, offset 0x349 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x8c}, + {value: 0x0040, lo: 0x8d, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbf}, + // Block 0x6a, offset 0x34d + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xbd}, + {value: 0x0018, lo: 0xbe, hi: 0xbf}, + // Block 0x6b, offset 0x352 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xbf}, + // Block 0x6c, offset 0x357 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0xa5}, + {value: 0x0018, lo: 0xa6, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb1}, + {value: 0x0018, lo: 0xb2, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbf}, + // Block 0x6d, offset 0x35d + {value: 0x0000, lo: 0x05}, + {value: 0x0040, lo: 0x80, hi: 0xb6}, + {value: 0x0008, lo: 0xb7, hi: 0xb7}, + {value: 0x2009, lo: 0xb8, hi: 0xb8}, + {value: 0x6e89, lo: 0xb9, hi: 0xb9}, + {value: 0x0008, lo: 0xba, hi: 0xbf}, + // Block 0x6e, offset 0x363 + {value: 0x0000, lo: 0x0e}, + {value: 0x0008, lo: 0x80, hi: 0x81}, + {value: 0x3308, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0x85}, + {value: 0x3b08, lo: 0x86, hi: 0x86}, + {value: 0x0008, lo: 0x87, hi: 0x8a}, + {value: 0x3308, lo: 0x8b, hi: 0x8b}, + {value: 0x0008, lo: 0x8c, hi: 0xa2}, + {value: 0x3008, lo: 0xa3, hi: 0xa4}, + {value: 0x3308, lo: 0xa5, hi: 0xa6}, + {value: 0x3008, lo: 0xa7, hi: 0xa7}, + {value: 0x0018, lo: 0xa8, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x6f, offset 0x372 + {value: 0x0000, lo: 0x05}, + {value: 0x0208, lo: 0x80, hi: 0xb1}, + {value: 0x0108, lo: 0xb2, hi: 0xb2}, + {value: 0x0008, lo: 0xb3, hi: 0xb3}, + {value: 0x0018, lo: 0xb4, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbf}, + // Block 0x70, offset 0x378 + {value: 0x0000, lo: 0x03}, + {value: 0x3008, lo: 0x80, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0xb3}, + {value: 0x3008, lo: 0xb4, hi: 0xbf}, + // Block 0x71, offset 0x37c + {value: 0x0000, lo: 0x0e}, + {value: 0x3008, lo: 0x80, hi: 0x83}, + {value: 0x3b08, lo: 0x84, hi: 0x84}, + {value: 0x3308, lo: 0x85, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x8d}, + {value: 0x0018, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x3308, lo: 0xa0, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xb7}, + {value: 0x0018, lo: 0xb8, hi: 0xba}, + {value: 0x0008, lo: 0xbb, hi: 0xbb}, + {value: 0x0018, lo: 0xbc, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x72, offset 0x38b + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xa5}, + {value: 0x3308, lo: 0xa6, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x73, offset 0x390 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x3308, lo: 0x87, hi: 0x91}, + {value: 0x3008, lo: 0x92, hi: 0x92}, + {value: 0x3808, lo: 0x93, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x9e}, + {value: 0x0018, lo: 0x9f, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0x74, offset 0x398 + {value: 0x0000, lo: 0x09}, + {value: 0x3308, lo: 0x80, hi: 0x82}, + {value: 0x3008, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xb3}, + {value: 0x3008, lo: 0xb4, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xb9}, + {value: 0x3008, lo: 0xba, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbc}, + {value: 0x3008, lo: 0xbd, hi: 0xbf}, + // Block 0x75, offset 0x3a2 + {value: 0x0000, lo: 0x0a}, + {value: 0x3808, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8e}, + {value: 0x0008, lo: 0x8f, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa4}, + {value: 0x3308, lo: 0xa5, hi: 0xa5}, + {value: 0x0008, lo: 0xa6, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0x76, offset 0x3ad + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xa8}, + {value: 0x3308, lo: 0xa9, hi: 0xae}, + {value: 0x3008, lo: 0xaf, hi: 0xb0}, + {value: 0x3308, lo: 0xb1, hi: 0xb2}, + {value: 0x3008, lo: 0xb3, hi: 0xb4}, + {value: 0x3308, lo: 0xb5, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x77, offset 0x3b5 + {value: 0x0000, lo: 0x10}, + {value: 0x0008, lo: 0x80, hi: 0x82}, + {value: 0x3308, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x8b}, + {value: 0x3308, lo: 0x8c, hi: 0x8c}, + {value: 0x3008, lo: 0x8d, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9b}, + {value: 0x0018, lo: 0x9c, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xb9}, + {value: 0x0008, lo: 0xba, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbc}, + {value: 0x3008, lo: 0xbd, hi: 0xbd}, + {value: 0x0008, lo: 0xbe, hi: 0xbf}, + // Block 0x78, offset 0x3c6 + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb0}, + {value: 0x0008, lo: 0xb1, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb4}, + {value: 0x0008, lo: 0xb5, hi: 0xb6}, + {value: 0x3308, lo: 0xb7, hi: 0xb8}, + {value: 0x0008, lo: 0xb9, hi: 0xbd}, + {value: 0x3308, lo: 0xbe, hi: 0xbf}, + // Block 0x79, offset 0x3cf + {value: 0x0000, lo: 0x0f}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x9a}, + {value: 0x0008, lo: 0x9b, hi: 0x9d}, + {value: 0x0018, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xaa}, + {value: 0x3008, lo: 0xab, hi: 0xab}, + {value: 0x3308, lo: 0xac, hi: 0xad}, + {value: 0x3008, lo: 0xae, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xb4}, + {value: 0x3008, lo: 0xb5, hi: 0xb5}, + {value: 0x3b08, lo: 0xb6, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x7a, offset 0x3df + {value: 0x0000, lo: 0x0c}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x88}, + {value: 0x0008, lo: 0x89, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0x90}, + {value: 0x0008, lo: 0x91, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x7b, offset 0x3ec + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9b}, + {value: 0x4465, lo: 0x9c, hi: 0x9c}, + {value: 0x447d, lo: 0x9d, hi: 0x9d}, + {value: 0x2971, lo: 0x9e, hi: 0x9e}, + {value: 0xe06d, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa5}, + {value: 0x0040, lo: 0xa6, hi: 0xaf}, + {value: 0x4495, lo: 0xb0, hi: 0xbf}, + // Block 0x7c, offset 0x3f6 + {value: 0x0000, lo: 0x04}, + {value: 0x44b5, lo: 0x80, hi: 0x8f}, + {value: 0x44d5, lo: 0x90, hi: 0x9f}, + {value: 0x44f5, lo: 0xa0, hi: 0xaf}, + {value: 0x44d5, lo: 0xb0, hi: 0xbf}, + // Block 0x7d, offset 0x3fb + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0xa2}, + {value: 0x3008, lo: 0xa3, hi: 0xa4}, + {value: 0x3308, lo: 0xa5, hi: 0xa5}, + {value: 0x3008, lo: 0xa6, hi: 0xa7}, + {value: 0x3308, lo: 0xa8, hi: 0xa8}, + {value: 0x3008, lo: 0xa9, hi: 0xaa}, + {value: 0x0018, lo: 0xab, hi: 0xab}, + {value: 0x3008, lo: 0xac, hi: 0xac}, + {value: 0x3b08, lo: 0xad, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0x7e, offset 0x408 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0x7f, offset 0x40c + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x8a}, + {value: 0x0018, lo: 0x8b, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0x80, offset 0x411 + {value: 0x0020, lo: 0x01}, + {value: 0x4515, lo: 0x80, hi: 0xbf}, + // Block 0x81, offset 0x413 + {value: 0x0020, lo: 0x03}, + {value: 0x4d15, lo: 0x80, hi: 0x94}, + {value: 0x4ad5, lo: 0x95, hi: 0x95}, + {value: 0x4fb5, lo: 0x96, hi: 0xbf}, + // Block 0x82, offset 0x417 + {value: 0x0020, lo: 0x01}, + {value: 0x54f5, lo: 0x80, hi: 0xbf}, + // Block 0x83, offset 0x419 + {value: 0x0020, lo: 0x03}, + {value: 0x5cf5, lo: 0x80, hi: 0x84}, + {value: 0x5655, lo: 0x85, hi: 0x85}, + {value: 0x5d95, lo: 0x86, hi: 0xbf}, + // Block 0x84, offset 0x41d + {value: 0x0020, lo: 0x08}, + {value: 0x6b55, lo: 0x80, hi: 0x8f}, + {value: 0x6d15, lo: 0x90, hi: 0x90}, + {value: 0x6d55, lo: 0x91, hi: 0xab}, + {value: 0x6ea1, lo: 0xac, hi: 0xac}, + {value: 0x70b5, lo: 0xad, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x70d5, lo: 0xb0, hi: 0xbf}, + // Block 0x85, offset 0x426 + {value: 0x0020, lo: 0x05}, + {value: 0x72d5, lo: 0x80, hi: 0xad}, + {value: 0x6535, lo: 0xae, hi: 0xae}, + {value: 0x7895, lo: 0xaf, hi: 0xb5}, + {value: 0x6f55, lo: 0xb6, hi: 0xb6}, + {value: 0x7975, lo: 0xb7, hi: 0xbf}, + // Block 0x86, offset 0x42c + {value: 0x0028, lo: 0x03}, + {value: 0x7c21, lo: 0x80, hi: 0x82}, + {value: 0x7be1, lo: 0x83, hi: 0x83}, + {value: 0x7c99, lo: 0x84, hi: 0xbf}, + // Block 0x87, offset 0x430 + {value: 0x0038, lo: 0x0f}, + {value: 0x9db1, lo: 0x80, hi: 0x83}, + {value: 0x9e59, lo: 0x84, hi: 0x85}, + {value: 0x9e91, lo: 0x86, hi: 0x87}, + {value: 0x9ec9, lo: 0x88, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x91}, + {value: 0xa089, lo: 0x92, hi: 0x97}, + {value: 0xa1a1, lo: 0x98, hi: 0x9c}, + {value: 0xa281, lo: 0x9d, hi: 0xb3}, + {value: 0x9d41, lo: 0xb4, hi: 0xb4}, + {value: 0x9db1, lo: 0xb5, hi: 0xb5}, + {value: 0xa789, lo: 0xb6, hi: 0xbb}, + {value: 0xa869, lo: 0xbc, hi: 0xbc}, + {value: 0xa7f9, lo: 0xbd, hi: 0xbd}, + {value: 0xa8d9, lo: 0xbe, hi: 0xbf}, + // Block 0x88, offset 0x440 + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8c}, + {value: 0x0008, lo: 0x8d, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbb}, + {value: 0x0008, lo: 0xbc, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbe}, + {value: 0x0008, lo: 0xbf, hi: 0xbf}, + // Block 0x89, offset 0x44a + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0xbf}, + // Block 0x8a, offset 0x44f + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x8b, offset 0x452 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x82}, + {value: 0x0040, lo: 0x83, hi: 0x86}, + {value: 0x0018, lo: 0x87, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xbf}, + // Block 0x8c, offset 0x458 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x8e}, + {value: 0x0040, lo: 0x8f, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa0}, + {value: 0x0040, lo: 0xa1, hi: 0xbf}, + // Block 0x8d, offset 0x45f + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbc}, + {value: 0x3308, lo: 0xbd, hi: 0xbd}, + {value: 0x0040, lo: 0xbe, hi: 0xbf}, + // Block 0x8e, offset 0x464 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x9c}, + {value: 0x0040, lo: 0x9d, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x8f, offset 0x468 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x90}, + {value: 0x0040, lo: 0x91, hi: 0x9f}, + {value: 0x3308, lo: 0xa0, hi: 0xa0}, + {value: 0x0018, lo: 0xa1, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0x90, offset 0x46e + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x91, offset 0x473 + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x81}, + {value: 0x0008, lo: 0x82, hi: 0x89}, + {value: 0x0018, lo: 0x8a, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbf}, + // Block 0x92, offset 0x47c + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9e}, + {value: 0x0018, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0x93, offset 0x481 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0xbf}, + // Block 0x94, offset 0x487 + {value: 0x0000, lo: 0x06}, + {value: 0xe145, lo: 0x80, hi: 0x87}, + {value: 0xe1c5, lo: 0x88, hi: 0x8f}, + {value: 0xe145, lo: 0x90, hi: 0x97}, + {value: 0x8ad5, lo: 0x98, hi: 0x9f}, + {value: 0x8aed, lo: 0xa0, hi: 0xa7}, + {value: 0x0008, lo: 0xa8, hi: 0xbf}, + // Block 0x95, offset 0x48e + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xaf}, + {value: 0x8aed, lo: 0xb0, hi: 0xb7}, + {value: 0x8ad5, lo: 0xb8, hi: 0xbf}, + // Block 0x96, offset 0x495 + {value: 0x0000, lo: 0x06}, + {value: 0xe145, lo: 0x80, hi: 0x87}, + {value: 0xe1c5, lo: 0x88, hi: 0x8f}, + {value: 0xe145, lo: 0x90, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0xbb}, + {value: 0x0040, lo: 0xbc, hi: 0xbf}, + // Block 0x97, offset 0x49c + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0x98, offset 0x4a0 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xae}, + {value: 0x0018, lo: 0xaf, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0x99, offset 0x4a5 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0x9a, offset 0x4a8 + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xbf}, + // Block 0x9b, offset 0x4ad + {value: 0x0000, lo: 0x0b}, + {value: 0x0808, lo: 0x80, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x87}, + {value: 0x0808, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0808, lo: 0x8a, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb6}, + {value: 0x0808, lo: 0xb7, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbb}, + {value: 0x0808, lo: 0xbc, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbe}, + {value: 0x0808, lo: 0xbf, hi: 0xbf}, + // Block 0x9c, offset 0x4b9 + {value: 0x0000, lo: 0x05}, + {value: 0x0808, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x96}, + {value: 0x0818, lo: 0x97, hi: 0x9f}, + {value: 0x0808, lo: 0xa0, hi: 0xb6}, + {value: 0x0818, lo: 0xb7, hi: 0xbf}, + // Block 0x9d, offset 0x4bf + {value: 0x0000, lo: 0x04}, + {value: 0x0808, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0xa6}, + {value: 0x0818, lo: 0xa7, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0x9e, offset 0x4c4 + {value: 0x0000, lo: 0x06}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0808, lo: 0xa0, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xb3}, + {value: 0x0808, lo: 0xb4, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xba}, + {value: 0x0818, lo: 0xbb, hi: 0xbf}, + // Block 0x9f, offset 0x4cb + {value: 0x0000, lo: 0x07}, + {value: 0x0808, lo: 0x80, hi: 0x95}, + {value: 0x0818, lo: 0x96, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9e}, + {value: 0x0018, lo: 0x9f, hi: 0x9f}, + {value: 0x0808, lo: 0xa0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbe}, + {value: 0x0818, lo: 0xbf, hi: 0xbf}, + // Block 0xa0, offset 0x4d3 + {value: 0x0000, lo: 0x04}, + {value: 0x0808, lo: 0x80, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbb}, + {value: 0x0818, lo: 0xbc, hi: 0xbd}, + {value: 0x0808, lo: 0xbe, hi: 0xbf}, + // Block 0xa1, offset 0x4d8 + {value: 0x0000, lo: 0x03}, + {value: 0x0818, lo: 0x80, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x91}, + {value: 0x0818, lo: 0x92, hi: 0xbf}, + // Block 0xa2, offset 0x4dc + {value: 0x0000, lo: 0x0f}, + {value: 0x0808, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x84}, + {value: 0x3308, lo: 0x85, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x8b}, + {value: 0x3308, lo: 0x8c, hi: 0x8f}, + {value: 0x0808, lo: 0x90, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x94}, + {value: 0x0808, lo: 0x95, hi: 0x97}, + {value: 0x0040, lo: 0x98, hi: 0x98}, + {value: 0x0808, lo: 0x99, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xba}, + {value: 0x0040, lo: 0xbb, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xa3, offset 0x4ec + {value: 0x0000, lo: 0x06}, + {value: 0x0818, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0818, lo: 0x90, hi: 0x98}, + {value: 0x0040, lo: 0x99, hi: 0x9f}, + {value: 0x0808, lo: 0xa0, hi: 0xbc}, + {value: 0x0818, lo: 0xbd, hi: 0xbf}, + // Block 0xa4, offset 0x4f3 + {value: 0x0000, lo: 0x03}, + {value: 0x0808, lo: 0x80, hi: 0x9c}, + {value: 0x0818, lo: 0x9d, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0xa5, offset 0x4f7 + {value: 0x0000, lo: 0x03}, + {value: 0x0808, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb8}, + {value: 0x0018, lo: 0xb9, hi: 0xbf}, + // Block 0xa6, offset 0x4fb + {value: 0x0000, lo: 0x06}, + {value: 0x0808, lo: 0x80, hi: 0x95}, + {value: 0x0040, lo: 0x96, hi: 0x97}, + {value: 0x0818, lo: 0x98, hi: 0x9f}, + {value: 0x0808, lo: 0xa0, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xb7}, + {value: 0x0818, lo: 0xb8, hi: 0xbf}, + // Block 0xa7, offset 0x502 + {value: 0x0000, lo: 0x01}, + {value: 0x0808, lo: 0x80, hi: 0xbf}, + // Block 0xa8, offset 0x504 + {value: 0x0000, lo: 0x02}, + {value: 0x0808, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0xbf}, + // Block 0xa9, offset 0x507 + {value: 0x0000, lo: 0x02}, + {value: 0x03dd, lo: 0x80, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xbf}, + // Block 0xaa, offset 0x50a + {value: 0x0000, lo: 0x03}, + {value: 0x0808, lo: 0x80, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xb9}, + {value: 0x0818, lo: 0xba, hi: 0xbf}, + // Block 0xab, offset 0x50e + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0818, lo: 0xa0, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xac, offset 0x512 + {value: 0x0000, lo: 0x05}, + {value: 0x3008, lo: 0x80, hi: 0x80}, + {value: 0x3308, lo: 0x81, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xbf}, + // Block 0xad, offset 0x518 + {value: 0x0000, lo: 0x08}, + {value: 0x3308, lo: 0x80, hi: 0x85}, + {value: 0x3b08, lo: 0x86, hi: 0x86}, + {value: 0x0018, lo: 0x87, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x91}, + {value: 0x0018, lo: 0x92, hi: 0xa5}, + {value: 0x0008, lo: 0xa6, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xae, offset 0x521 + {value: 0x0000, lo: 0x0b}, + {value: 0x3308, lo: 0x80, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xaf}, + {value: 0x3008, lo: 0xb0, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xb6}, + {value: 0x3008, lo: 0xb7, hi: 0xb8}, + {value: 0x3b08, lo: 0xb9, hi: 0xb9}, + {value: 0x3308, lo: 0xba, hi: 0xba}, + {value: 0x0018, lo: 0xbb, hi: 0xbc}, + {value: 0x0340, lo: 0xbd, hi: 0xbd}, + {value: 0x0018, lo: 0xbe, hi: 0xbf}, + // Block 0xaf, offset 0x52d + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x81}, + {value: 0x0040, lo: 0x82, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xa8}, + {value: 0x0040, lo: 0xa9, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0xb0, offset 0x534 + {value: 0x0000, lo: 0x08}, + {value: 0x3308, lo: 0x80, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xa6}, + {value: 0x3308, lo: 0xa7, hi: 0xab}, + {value: 0x3008, lo: 0xac, hi: 0xac}, + {value: 0x3308, lo: 0xad, hi: 0xb2}, + {value: 0x3b08, lo: 0xb3, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xb5}, + {value: 0x0008, lo: 0xb6, hi: 0xbf}, + // Block 0xb1, offset 0x53d + {value: 0x0000, lo: 0x07}, + {value: 0x0018, lo: 0x80, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xb3}, + {value: 0x0018, lo: 0xb4, hi: 0xb5}, + {value: 0x0008, lo: 0xb6, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0xb2, offset 0x545 + {value: 0x0000, lo: 0x06}, + {value: 0x3308, lo: 0x80, hi: 0x81}, + {value: 0x3008, lo: 0x82, hi: 0x82}, + {value: 0x0008, lo: 0x83, hi: 0xb2}, + {value: 0x3008, lo: 0xb3, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xbe}, + {value: 0x3008, lo: 0xbf, hi: 0xbf}, + // Block 0xb3, offset 0x54c + {value: 0x0000, lo: 0x0d}, + {value: 0x3808, lo: 0x80, hi: 0x80}, + {value: 0x0008, lo: 0x81, hi: 0x84}, + {value: 0x0018, lo: 0x85, hi: 0x89}, + {value: 0x3308, lo: 0x8a, hi: 0x8c}, + {value: 0x0018, lo: 0x8d, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9b}, + {value: 0x0008, lo: 0x9c, hi: 0x9c}, + {value: 0x0018, lo: 0x9d, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xa0}, + {value: 0x0018, lo: 0xa1, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0xb4, offset 0x55a + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x91}, + {value: 0x0040, lo: 0x92, hi: 0x92}, + {value: 0x0008, lo: 0x93, hi: 0xab}, + {value: 0x3008, lo: 0xac, hi: 0xae}, + {value: 0x3308, lo: 0xaf, hi: 0xb1}, + {value: 0x3008, lo: 0xb2, hi: 0xb3}, + {value: 0x3308, lo: 0xb4, hi: 0xb4}, + {value: 0x3808, lo: 0xb5, hi: 0xb5}, + {value: 0x3308, lo: 0xb6, hi: 0xb7}, + {value: 0x0018, lo: 0xb8, hi: 0xbd}, + {value: 0x3308, lo: 0xbe, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xb5, offset 0x567 + {value: 0x0000, lo: 0x0c}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x0008, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0008, lo: 0x8a, hi: 0x8d}, + {value: 0x0040, lo: 0x8e, hi: 0x8e}, + {value: 0x0008, lo: 0x8f, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9e}, + {value: 0x0008, lo: 0x9f, hi: 0xa8}, + {value: 0x0018, lo: 0xa9, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbf}, + // Block 0xb6, offset 0x574 + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x3308, lo: 0x9f, hi: 0x9f}, + {value: 0x3008, lo: 0xa0, hi: 0xa2}, + {value: 0x3308, lo: 0xa3, hi: 0xa9}, + {value: 0x3b08, lo: 0xaa, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0040, lo: 0xba, hi: 0xbf}, + // Block 0xb7, offset 0x57d + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xb4}, + {value: 0x3008, lo: 0xb5, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xbf}, + // Block 0xb8, offset 0x581 + {value: 0x0000, lo: 0x0d}, + {value: 0x3008, lo: 0x80, hi: 0x81}, + {value: 0x3b08, lo: 0x82, hi: 0x82}, + {value: 0x3308, lo: 0x83, hi: 0x84}, + {value: 0x3008, lo: 0x85, hi: 0x85}, + {value: 0x3308, lo: 0x86, hi: 0x86}, + {value: 0x0008, lo: 0x87, hi: 0x8a}, + {value: 0x0018, lo: 0x8b, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0x9b}, + {value: 0x0040, lo: 0x9c, hi: 0x9c}, + {value: 0x0018, lo: 0x9d, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0xbf}, + // Block 0xb9, offset 0x58f + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x3008, lo: 0xb0, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xb8}, + {value: 0x3008, lo: 0xb9, hi: 0xb9}, + {value: 0x3308, lo: 0xba, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbe}, + {value: 0x3308, lo: 0xbf, hi: 0xbf}, + // Block 0xba, offset 0x597 + {value: 0x0000, lo: 0x0a}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x3008, lo: 0x81, hi: 0x81}, + {value: 0x3b08, lo: 0x82, hi: 0x82}, + {value: 0x3308, lo: 0x83, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x85}, + {value: 0x0018, lo: 0x86, hi: 0x86}, + {value: 0x0008, lo: 0x87, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0xbf}, + // Block 0xbb, offset 0x5a2 + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0xae}, + {value: 0x3008, lo: 0xaf, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xb7}, + {value: 0x3008, lo: 0xb8, hi: 0xbb}, + {value: 0x3308, lo: 0xbc, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xbc, offset 0x5ab + {value: 0x0000, lo: 0x05}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x97}, + {value: 0x0008, lo: 0x98, hi: 0x9b}, + {value: 0x3308, lo: 0x9c, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0xbf}, + // Block 0xbd, offset 0x5b1 + {value: 0x0000, lo: 0x07}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x3008, lo: 0xb0, hi: 0xb2}, + {value: 0x3308, lo: 0xb3, hi: 0xba}, + {value: 0x3008, lo: 0xbb, hi: 0xbc}, + {value: 0x3308, lo: 0xbd, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xbe, offset 0x5b9 + {value: 0x0000, lo: 0x08}, + {value: 0x3308, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x83}, + {value: 0x0008, lo: 0x84, hi: 0x84}, + {value: 0x0040, lo: 0x85, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xbf}, + // Block 0xbf, offset 0x5c2 + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0xaa}, + {value: 0x3308, lo: 0xab, hi: 0xab}, + {value: 0x3008, lo: 0xac, hi: 0xac}, + {value: 0x3308, lo: 0xad, hi: 0xad}, + {value: 0x3008, lo: 0xae, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb5}, + {value: 0x3808, lo: 0xb6, hi: 0xb6}, + {value: 0x3308, lo: 0xb7, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbf}, + // Block 0xc0, offset 0x5cc + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x89}, + {value: 0x0040, lo: 0x8a, hi: 0xbf}, + // Block 0xc1, offset 0x5cf + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9c}, + {value: 0x3308, lo: 0x9d, hi: 0x9f}, + {value: 0x3008, lo: 0xa0, hi: 0xa1}, + {value: 0x3308, lo: 0xa2, hi: 0xa5}, + {value: 0x3008, lo: 0xa6, hi: 0xa6}, + {value: 0x3308, lo: 0xa7, hi: 0xaa}, + {value: 0x3b08, lo: 0xab, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xb9}, + {value: 0x0018, lo: 0xba, hi: 0xbf}, + // Block 0xc2, offset 0x5db + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x049d, lo: 0xa0, hi: 0xbf}, + // Block 0xc3, offset 0x5de + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xa9}, + {value: 0x0018, lo: 0xaa, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xbe}, + {value: 0x0008, lo: 0xbf, hi: 0xbf}, + // Block 0xc4, offset 0x5e3 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb8}, + {value: 0x0040, lo: 0xb9, hi: 0xbf}, + // Block 0xc5, offset 0x5e6 + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x89}, + {value: 0x0008, lo: 0x8a, hi: 0xae}, + {value: 0x3008, lo: 0xaf, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xb7}, + {value: 0x3308, lo: 0xb8, hi: 0xbd}, + {value: 0x3008, lo: 0xbe, hi: 0xbe}, + {value: 0x3b08, lo: 0xbf, hi: 0xbf}, + // Block 0xc6, offset 0x5f0 + {value: 0x0000, lo: 0x08}, + {value: 0x0008, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0018, lo: 0x9a, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb1}, + {value: 0x0008, lo: 0xb2, hi: 0xbf}, + // Block 0xc7, offset 0x5f9 + {value: 0x0000, lo: 0x0b}, + {value: 0x0008, lo: 0x80, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x91}, + {value: 0x3308, lo: 0x92, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xa8}, + {value: 0x3008, lo: 0xa9, hi: 0xa9}, + {value: 0x3308, lo: 0xaa, hi: 0xb0}, + {value: 0x3008, lo: 0xb1, hi: 0xb1}, + {value: 0x3308, lo: 0xb2, hi: 0xb3}, + {value: 0x3008, lo: 0xb4, hi: 0xb4}, + {value: 0x3308, lo: 0xb5, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0xc8, offset 0x605 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0xbf}, + // Block 0xc9, offset 0x608 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0xca, offset 0x60d + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x83}, + {value: 0x0040, lo: 0x84, hi: 0xbf}, + // Block 0xcb, offset 0x610 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xbf}, + // Block 0xcc, offset 0x613 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0xbf}, + // Block 0xcd, offset 0x616 + {value: 0x0000, lo: 0x06}, + {value: 0x0008, lo: 0x80, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa9}, + {value: 0x0040, lo: 0xaa, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0xce, offset 0x61d + {value: 0x0000, lo: 0x06}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb4}, + {value: 0x0018, lo: 0xb5, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0xcf, offset 0x624 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0xaf}, + {value: 0x3308, lo: 0xb0, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xbf}, + // Block 0xd0, offset 0x628 + {value: 0x0000, lo: 0x0a}, + {value: 0x0008, lo: 0x80, hi: 0x83}, + {value: 0x0018, lo: 0x84, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9a}, + {value: 0x0018, lo: 0x9b, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xa2}, + {value: 0x0008, lo: 0xa3, hi: 0xb7}, + {value: 0x0040, lo: 0xb8, hi: 0xbc}, + {value: 0x0008, lo: 0xbd, hi: 0xbf}, + // Block 0xd1, offset 0x633 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0xbf}, + // Block 0xd2, offset 0x636 + {value: 0x0000, lo: 0x05}, + {value: 0x0008, lo: 0x80, hi: 0x84}, + {value: 0x0040, lo: 0x85, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x90}, + {value: 0x3008, lo: 0x91, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xd3, offset 0x63c + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x8e}, + {value: 0x3308, lo: 0x8f, hi: 0x92}, + {value: 0x0008, lo: 0x93, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0xd4, offset 0x641 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xa0}, + {value: 0x0040, lo: 0xa1, hi: 0xbf}, + // Block 0xd5, offset 0x645 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xbf}, + // Block 0xd6, offset 0x648 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb2}, + {value: 0x0040, lo: 0xb3, hi: 0xbf}, + // Block 0xd7, offset 0x64b + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x81}, + {value: 0x0040, lo: 0x82, hi: 0xbf}, + // Block 0xd8, offset 0x64e + {value: 0x0000, lo: 0x04}, + {value: 0x0008, lo: 0x80, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xaf}, + {value: 0x0008, lo: 0xb0, hi: 0xbc}, + {value: 0x0040, lo: 0xbd, hi: 0xbf}, + // Block 0xd9, offset 0x653 + {value: 0x0000, lo: 0x09}, + {value: 0x0008, lo: 0x80, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x8f}, + {value: 0x0008, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9b}, + {value: 0x0018, lo: 0x9c, hi: 0x9c}, + {value: 0x3308, lo: 0x9d, hi: 0x9e}, + {value: 0x0018, lo: 0x9f, hi: 0x9f}, + {value: 0x03c0, lo: 0xa0, hi: 0xa3}, + {value: 0x0040, lo: 0xa4, hi: 0xbf}, + // Block 0xda, offset 0x65d + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0xdb, offset 0x660 + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xa6}, + {value: 0x0040, lo: 0xa7, hi: 0xa8}, + {value: 0x0018, lo: 0xa9, hi: 0xbf}, + // Block 0xdc, offset 0x664 + {value: 0x0000, lo: 0x0e}, + {value: 0x0018, lo: 0x80, hi: 0x9d}, + {value: 0xb5b9, lo: 0x9e, hi: 0x9e}, + {value: 0xb601, lo: 0x9f, hi: 0x9f}, + {value: 0xb649, lo: 0xa0, hi: 0xa0}, + {value: 0xb6b1, lo: 0xa1, hi: 0xa1}, + {value: 0xb719, lo: 0xa2, hi: 0xa2}, + {value: 0xb781, lo: 0xa3, hi: 0xa3}, + {value: 0xb7e9, lo: 0xa4, hi: 0xa4}, + {value: 0x3018, lo: 0xa5, hi: 0xa6}, + {value: 0x3318, lo: 0xa7, hi: 0xa9}, + {value: 0x0018, lo: 0xaa, hi: 0xac}, + {value: 0x3018, lo: 0xad, hi: 0xb2}, + {value: 0x0340, lo: 0xb3, hi: 0xba}, + {value: 0x3318, lo: 0xbb, hi: 0xbf}, + // Block 0xdd, offset 0x673 + {value: 0x0000, lo: 0x0b}, + {value: 0x3318, lo: 0x80, hi: 0x82}, + {value: 0x0018, lo: 0x83, hi: 0x84}, + {value: 0x3318, lo: 0x85, hi: 0x8b}, + {value: 0x0018, lo: 0x8c, hi: 0xa9}, + {value: 0x3318, lo: 0xaa, hi: 0xad}, + {value: 0x0018, lo: 0xae, hi: 0xba}, + {value: 0xb851, lo: 0xbb, hi: 0xbb}, + {value: 0xb899, lo: 0xbc, hi: 0xbc}, + {value: 0xb8e1, lo: 0xbd, hi: 0xbd}, + {value: 0xb949, lo: 0xbe, hi: 0xbe}, + {value: 0xb9b1, lo: 0xbf, hi: 0xbf}, + // Block 0xde, offset 0x67f + {value: 0x0000, lo: 0x03}, + {value: 0xba19, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0xa8}, + {value: 0x0040, lo: 0xa9, hi: 0xbf}, + // Block 0xdf, offset 0x683 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x81}, + {value: 0x3318, lo: 0x82, hi: 0x84}, + {value: 0x0018, lo: 0x85, hi: 0x85}, + {value: 0x0040, lo: 0x86, hi: 0xbf}, + // Block 0xe0, offset 0x688 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbf}, + // Block 0xe1, offset 0x68d + {value: 0x0000, lo: 0x03}, + {value: 0x3308, lo: 0x80, hi: 0xb6}, + {value: 0x0018, lo: 0xb7, hi: 0xba}, + {value: 0x3308, lo: 0xbb, hi: 0xbf}, + // Block 0xe2, offset 0x691 + {value: 0x0000, lo: 0x04}, + {value: 0x3308, lo: 0x80, hi: 0xac}, + {value: 0x0018, lo: 0xad, hi: 0xb4}, + {value: 0x3308, lo: 0xb5, hi: 0xb5}, + {value: 0x0018, lo: 0xb6, hi: 0xbf}, + // Block 0xe3, offset 0x696 + {value: 0x0000, lo: 0x08}, + {value: 0x0018, lo: 0x80, hi: 0x83}, + {value: 0x3308, lo: 0x84, hi: 0x84}, + {value: 0x0018, lo: 0x85, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x9a}, + {value: 0x3308, lo: 0x9b, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xa0}, + {value: 0x3308, lo: 0xa1, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, + // Block 0xe4, offset 0x69f + {value: 0x0000, lo: 0x0a}, + {value: 0x3308, lo: 0x80, hi: 0x86}, + {value: 0x0040, lo: 0x87, hi: 0x87}, + {value: 0x3308, lo: 0x88, hi: 0x98}, + {value: 0x0040, lo: 0x99, hi: 0x9a}, + {value: 0x3308, lo: 0x9b, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xa2}, + {value: 0x3308, lo: 0xa3, hi: 0xa4}, + {value: 0x0040, lo: 0xa5, hi: 0xa5}, + {value: 0x3308, lo: 0xa6, hi: 0xaa}, + {value: 0x0040, lo: 0xab, hi: 0xbf}, + // Block 0xe5, offset 0x6aa + {value: 0x0000, lo: 0x05}, + {value: 0x0808, lo: 0x80, hi: 0x84}, + {value: 0x0040, lo: 0x85, hi: 0x86}, + {value: 0x0818, lo: 0x87, hi: 0x8f}, + {value: 0x3308, lo: 0x90, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0xbf}, + // Block 0xe6, offset 0x6b0 + {value: 0x0000, lo: 0x07}, + {value: 0x0a08, lo: 0x80, hi: 0x83}, + {value: 0x3308, lo: 0x84, hi: 0x8a}, + {value: 0x0040, lo: 0x8b, hi: 0x8f}, + {value: 0x0808, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9d}, + {value: 0x0818, lo: 0x9e, hi: 0x9f}, + {value: 0x0040, lo: 0xa0, hi: 0xbf}, + // Block 0xe7, offset 0x6b8 + {value: 0x0000, lo: 0x03}, + {value: 0x0040, lo: 0x80, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb1}, + {value: 0x0040, lo: 0xb2, hi: 0xbf}, + // Block 0xe8, offset 0x6bc + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0xab}, + {value: 0x0040, lo: 0xac, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xbf}, + // Block 0xe9, offset 0x6c0 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x93}, + {value: 0x0040, lo: 0x94, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xae}, + {value: 0x0040, lo: 0xaf, hi: 0xb0}, + {value: 0x0018, lo: 0xb1, hi: 0xbf}, + // Block 0xea, offset 0x6c6 + {value: 0x0000, lo: 0x05}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0018, lo: 0x81, hi: 0x8f}, + {value: 0x0040, lo: 0x90, hi: 0x90}, + {value: 0x0018, lo: 0x91, hi: 0xb5}, + {value: 0x0040, lo: 0xb6, hi: 0xbf}, + // Block 0xeb, offset 0x6cc + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x8f}, + {value: 0xc1c1, lo: 0x90, hi: 0x90}, + {value: 0x0018, lo: 0x91, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xbf}, + // Block 0xec, offset 0x6d1 + {value: 0x0000, lo: 0x02}, + {value: 0x0040, lo: 0x80, hi: 0xa5}, + {value: 0x0018, lo: 0xa6, hi: 0xbf}, + // Block 0xed, offset 0x6d4 + {value: 0x0000, lo: 0x0d}, + {value: 0xc7e9, lo: 0x80, hi: 0x80}, + {value: 0xc839, lo: 0x81, hi: 0x81}, + {value: 0xc889, lo: 0x82, hi: 0x82}, + {value: 0xc8d9, lo: 0x83, hi: 0x83}, + {value: 0xc929, lo: 0x84, hi: 0x84}, + {value: 0xc979, lo: 0x85, hi: 0x85}, + {value: 0xc9c9, lo: 0x86, hi: 0x86}, + {value: 0xca19, lo: 0x87, hi: 0x87}, + {value: 0xca69, lo: 0x88, hi: 0x88}, + {value: 0x0040, lo: 0x89, hi: 0x8f}, + {value: 0xcab9, lo: 0x90, hi: 0x90}, + {value: 0xcad9, lo: 0x91, hi: 0x91}, + {value: 0x0040, lo: 0x92, hi: 0xbf}, + // Block 0xee, offset 0x6e2 + {value: 0x0000, lo: 0x06}, + {value: 0x0018, lo: 0x80, hi: 0x92}, + {value: 0x0040, lo: 0x93, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xac}, + {value: 0x0040, lo: 0xad, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb6}, + {value: 0x0040, lo: 0xb7, hi: 0xbf}, + // Block 0xef, offset 0x6e9 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0xb3}, + {value: 0x0040, lo: 0xb4, hi: 0xbf}, + // Block 0xf0, offset 0x6ec + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x94}, + {value: 0x0040, lo: 0x95, hi: 0xbf}, + // Block 0xf1, offset 0x6ef + {value: 0x0000, lo: 0x03}, + {value: 0x0018, lo: 0x80, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xbf}, + // Block 0xf2, offset 0x6f3 + {value: 0x0000, lo: 0x05}, + {value: 0x0018, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x99}, + {value: 0x0040, lo: 0x9a, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xbf}, + // Block 0xf3, offset 0x6f9 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x87}, + {value: 0x0040, lo: 0x88, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0xad}, + {value: 0x0040, lo: 0xae, hi: 0xbf}, + // Block 0xf4, offset 0x6fe + {value: 0x0000, lo: 0x09}, + {value: 0x0040, lo: 0x80, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0x9f}, + {value: 0x0018, lo: 0xa0, hi: 0xa7}, + {value: 0x0040, lo: 0xa8, hi: 0xaf}, + {value: 0x0018, lo: 0xb0, hi: 0xb0}, + {value: 0x0040, lo: 0xb1, hi: 0xb2}, + {value: 0x0018, lo: 0xb3, hi: 0xbe}, + {value: 0x0040, lo: 0xbf, hi: 0xbf}, + // Block 0xf5, offset 0x708 + {value: 0x0000, lo: 0x04}, + {value: 0x0018, lo: 0x80, hi: 0x8b}, + {value: 0x0040, lo: 0x8c, hi: 0x8f}, + {value: 0x0018, lo: 0x90, hi: 0x9e}, + {value: 0x0040, lo: 0x9f, hi: 0xbf}, + // Block 0xf6, offset 0x70d + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x91}, + {value: 0x0040, lo: 0x92, hi: 0xbf}, + // Block 0xf7, offset 0x710 + {value: 0x0000, lo: 0x02}, + {value: 0x0018, lo: 0x80, hi: 0x80}, + {value: 0x0040, lo: 0x81, hi: 0xbf}, + // Block 0xf8, offset 0x713 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0x96}, + {value: 0x0040, lo: 0x97, hi: 0xbf}, + // Block 0xf9, offset 0x716 + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xb4}, + {value: 0x0040, lo: 0xb5, hi: 0xbf}, + // Block 0xfa, offset 0x719 + {value: 0x0000, lo: 0x03}, + {value: 0x0008, lo: 0x80, hi: 0x9d}, + {value: 0x0040, lo: 0x9e, hi: 0x9f}, + {value: 0x0008, lo: 0xa0, hi: 0xbf}, + // Block 0xfb, offset 0x71d + {value: 0x0000, lo: 0x02}, + {value: 0x0008, lo: 0x80, hi: 0xa1}, + {value: 0x0040, lo: 0xa2, hi: 0xbf}, + // Block 0xfc, offset 0x720 + {value: 0x0020, lo: 0x0f}, + {value: 0xdeb9, lo: 0x80, hi: 0x89}, + {value: 0x8dfd, lo: 0x8a, hi: 0x8a}, + {value: 0xdff9, lo: 0x8b, hi: 0x9c}, + {value: 0x8e1d, lo: 0x9d, hi: 0x9d}, + {value: 0xe239, lo: 0x9e, hi: 0xa2}, + {value: 0x8e3d, lo: 0xa3, hi: 0xa3}, + {value: 0xe2d9, lo: 0xa4, hi: 0xab}, + {value: 0x7ed5, lo: 0xac, hi: 0xac}, + {value: 0xe3d9, lo: 0xad, hi: 0xaf}, + {value: 0x8e5d, lo: 0xb0, hi: 0xb0}, + {value: 0xe439, lo: 0xb1, hi: 0xb6}, + {value: 0x8e7d, lo: 0xb7, hi: 0xb9}, + {value: 0xe4f9, lo: 0xba, hi: 0xba}, + {value: 0x8edd, lo: 0xbb, hi: 0xbb}, + {value: 0xe519, lo: 0xbc, hi: 0xbf}, + // Block 0xfd, offset 0x730 + {value: 0x0020, lo: 0x10}, + {value: 0x937d, lo: 0x80, hi: 0x80}, + {value: 0xf099, lo: 0x81, hi: 0x86}, + {value: 0x939d, lo: 0x87, hi: 0x8a}, + {value: 0xd9f9, lo: 0x8b, hi: 0x8b}, + {value: 0xf159, lo: 0x8c, hi: 0x96}, + {value: 0x941d, lo: 0x97, hi: 0x97}, + {value: 0xf2b9, lo: 0x98, hi: 0xa3}, + {value: 0x943d, lo: 0xa4, hi: 0xa6}, + {value: 0xf439, lo: 0xa7, hi: 0xaa}, + {value: 0x949d, lo: 0xab, hi: 0xab}, + {value: 0xf4b9, lo: 0xac, hi: 0xac}, + {value: 0x94bd, lo: 0xad, hi: 0xad}, + {value: 0xf4d9, lo: 0xae, hi: 0xaf}, + {value: 0x94dd, lo: 0xb0, hi: 0xb1}, + {value: 0xf519, lo: 0xb2, hi: 0xbe}, + {value: 0x2040, lo: 0xbf, hi: 0xbf}, + // Block 0xfe, offset 0x741 + {value: 0x0000, lo: 0x04}, + {value: 0x0040, lo: 0x80, hi: 0x80}, + {value: 0x0340, lo: 0x81, hi: 0x81}, + {value: 0x0040, lo: 0x82, hi: 0x9f}, + {value: 0x0340, lo: 0xa0, hi: 0xbf}, + // Block 0xff, offset 0x746 + {value: 0x0000, lo: 0x01}, + {value: 0x0340, lo: 0x80, hi: 0xbf}, + // Block 0x100, offset 0x748 + {value: 0x0000, lo: 0x01}, + {value: 0x33c0, lo: 0x80, hi: 0xbf}, + // Block 0x101, offset 0x74a + {value: 0x0000, lo: 0x02}, + {value: 0x33c0, lo: 0x80, hi: 0xaf}, + {value: 0x0040, lo: 0xb0, hi: 0xbf}, +} + +// Total table size 41662 bytes (40KiB); checksum: 355A58A4 diff --git a/vendor/golang.org/x/text/internal/export/idna/trieval.go b/vendor/golang.org/x/text/internal/export/idna/trieval.go index 63cb03b..7a8cf88 100644 --- a/vendor/golang.org/x/text/internal/export/idna/trieval.go +++ b/vendor/golang.org/x/text/internal/export/idna/trieval.go @@ -26,9 +26,9 @@ package idna // 15..3 index into xor or mapping table // } // } else { -// 15..13 unused -// 12 modifier (including virama) -// 11 virama modifier +// 15..14 unused +// 13 mayNeedNorm +// 12..11 attributes // 10..8 joining type // 7..3 category type // } @@ -49,15 +49,20 @@ const ( joinShift = 8 joinMask = 0x07 - viramaModifier = 0x0800 + // Attributes + attributesMask = 0x1800 + viramaModifier = 0x1800 modifier = 0x1000 + rtl = 0x0800 + + mayNeedNorm = 0x2000 ) // A category corresponds to a category defined in the IDNA mapping table. type category uint16 const ( - unknown category = 0 // not defined currently in unicode. + unknown category = 0 // not currently defined in unicode. mapped category = 1 disallowedSTD3Mapped category = 2 deviation category = 3 @@ -110,5 +115,5 @@ func (c info) isModifier() bool { } func (c info) isViramaModifier() bool { - return c&(viramaModifier|catSmallMask) == viramaModifier + return c&(attributesMask|catSmallMask) == viramaModifier } diff --git a/vendor/golang.org/x/text/internal/format/format.go b/vendor/golang.org/x/text/internal/format/format.go index c70bc0f..ee1c57a 100644 --- a/vendor/golang.org/x/text/internal/format/format.go +++ b/vendor/golang.org/x/text/internal/format/format.go @@ -24,20 +24,18 @@ type State interface { // Language reports the requested language in which to render a message. Language() language.Tag + // TODO: consider this and removing rune from the Format method in the + // Formatter interface. + // + // Verb returns the format variant to render, analogous to the types used + // in fmt. Use 'v' for the default or only variant. + // Verb() rune + // TODO: more info: - // - sentence context - // - user preferences, like measurement systems - // - options + // - sentence context such as linguistic features passed by the translator. } -// A Statement is a Var or an Expression. -type Statement interface { - statement() +// Formatter is analogous to fmt.Formatter. +type Formatter interface { + Format(state State, verb rune) } - -// A String a literal string format. -type String string - -func (String) statement() {} - -// TODO: Select, Var, Case, StatementSequence diff --git a/vendor/golang.org/x/text/internal/format/parser.go b/vendor/golang.org/x/text/internal/format/parser.go new file mode 100644 index 0000000..f4f37f4 --- /dev/null +++ b/vendor/golang.org/x/text/internal/format/parser.go @@ -0,0 +1,357 @@ +// Copyright 2017 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. + +package format + +import ( + "reflect" + "unicode/utf8" +) + +// A Parser parses a format string. The result from the parse are set in the +// struct fields. +type Parser struct { + Verb rune + + WidthPresent bool + PrecPresent bool + Minus bool + Plus bool + Sharp bool + Space bool + Zero bool + + // For the formats %+v %#v, we set the plusV/sharpV flags + // and clear the plus/sharp flags since %+v and %#v are in effect + // different, flagless formats set at the top level. + PlusV bool + SharpV bool + + HasIndex bool + + Width int + Prec int // precision + + // retain arguments across calls. + Args []interface{} + // retain current argument number across calls + ArgNum int + + // reordered records whether the format string used argument reordering. + Reordered bool + // goodArgNum records whether the most recent reordering directive was valid. + goodArgNum bool + + // position info + format string + startPos int + endPos int + Status Status +} + +// Reset initializes a parser to scan format strings for the given args. +func (p *Parser) Reset(args []interface{}) { + p.Args = args + p.ArgNum = 0 + p.startPos = 0 + p.Reordered = false +} + +// Text returns the part of the format string that was parsed by the last call +// to Scan. It returns the original substitution clause if the current scan +// parsed a substitution. +func (p *Parser) Text() string { return p.format[p.startPos:p.endPos] } + +// SetFormat sets a new format string to parse. It does not reset the argument +// count. +func (p *Parser) SetFormat(format string) { + p.format = format + p.startPos = 0 + p.endPos = 0 +} + +// Status indicates the result type of a call to Scan. +type Status int + +const ( + StatusText Status = iota + StatusSubstitution + StatusBadWidthSubstitution + StatusBadPrecSubstitution + StatusNoVerb + StatusBadArgNum + StatusMissingArg +) + +// ClearFlags reset the parser to default behavior. +func (p *Parser) ClearFlags() { + p.WidthPresent = false + p.PrecPresent = false + p.Minus = false + p.Plus = false + p.Sharp = false + p.Space = false + p.Zero = false + + p.PlusV = false + p.SharpV = false + + p.HasIndex = false +} + +// Scan scans the next part of the format string and sets the status to +// indicate whether it scanned a string literal, substitution or error. +func (p *Parser) Scan() bool { + p.Status = StatusText + format := p.format + end := len(format) + if p.endPos >= end { + return false + } + afterIndex := false // previous item in format was an index like [3]. + + p.startPos = p.endPos + p.goodArgNum = true + i := p.startPos + for i < end && format[i] != '%' { + i++ + } + if i > p.startPos { + p.endPos = i + return true + } + // Process one verb + i++ + + p.Status = StatusSubstitution + + // Do we have flags? + p.ClearFlags() + +simpleFormat: + for ; i < end; i++ { + c := p.format[i] + switch c { + case '#': + p.Sharp = true + case '0': + p.Zero = !p.Minus // Only allow zero padding to the left. + case '+': + p.Plus = true + case '-': + p.Minus = true + p.Zero = false // Do not pad with zeros to the right. + case ' ': + p.Space = true + default: + // Fast path for common case of ascii lower case simple verbs + // without precision or width or argument indices. + if 'a' <= c && c <= 'z' && p.ArgNum < len(p.Args) { + if c == 'v' { + // Go syntax + p.SharpV = p.Sharp + p.Sharp = false + // Struct-field syntax + p.PlusV = p.Plus + p.Plus = false + } + p.Verb = rune(c) + p.ArgNum++ + p.endPos = i + 1 + return true + } + // Format is more complex than simple flags and a verb or is malformed. + break simpleFormat + } + } + + // Do we have an explicit argument index? + i, afterIndex = p.updateArgNumber(format, i) + + // Do we have width? + if i < end && format[i] == '*' { + i++ + p.Width, p.WidthPresent = p.intFromArg() + + if !p.WidthPresent { + p.Status = StatusBadWidthSubstitution + } + + // We have a negative width, so take its value and ensure + // that the minus flag is set + if p.Width < 0 { + p.Width = -p.Width + p.Minus = true + p.Zero = false // Do not pad with zeros to the right. + } + afterIndex = false + } else { + p.Width, p.WidthPresent, i = parsenum(format, i, end) + if afterIndex && p.WidthPresent { // "%[3]2d" + p.goodArgNum = false + } + } + + // Do we have precision? + if i+1 < end && format[i] == '.' { + i++ + if afterIndex { // "%[3].2d" + p.goodArgNum = false + } + i, afterIndex = p.updateArgNumber(format, i) + if i < end && format[i] == '*' { + i++ + p.Prec, p.PrecPresent = p.intFromArg() + // Negative precision arguments don't make sense + if p.Prec < 0 { + p.Prec = 0 + p.PrecPresent = false + } + if !p.PrecPresent { + p.Status = StatusBadPrecSubstitution + } + afterIndex = false + } else { + p.Prec, p.PrecPresent, i = parsenum(format, i, end) + if !p.PrecPresent { + p.Prec = 0 + p.PrecPresent = true + } + } + } + + if !afterIndex { + i, afterIndex = p.updateArgNumber(format, i) + } + p.HasIndex = afterIndex + + if i >= end { + p.endPos = i + p.Status = StatusNoVerb + return true + } + + verb, w := utf8.DecodeRuneInString(format[i:]) + p.endPos = i + w + p.Verb = verb + + switch { + case verb == '%': // Percent does not absorb operands and ignores f.wid and f.prec. + p.startPos = p.endPos - 1 + p.Status = StatusText + case !p.goodArgNum: + p.Status = StatusBadArgNum + case p.ArgNum >= len(p.Args): // No argument left over to print for the current verb. + p.Status = StatusMissingArg + case verb == 'v': + // Go syntax + p.SharpV = p.Sharp + p.Sharp = false + // Struct-field syntax + p.PlusV = p.Plus + p.Plus = false + fallthrough + default: + p.ArgNum++ + } + return true +} + +// intFromArg gets the ArgNumth element of Args. On return, isInt reports +// whether the argument has integer type. +func (p *Parser) intFromArg() (num int, isInt bool) { + if p.ArgNum < len(p.Args) { + arg := p.Args[p.ArgNum] + num, isInt = arg.(int) // Almost always OK. + if !isInt { + // Work harder. + switch v := reflect.ValueOf(arg); v.Kind() { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + n := v.Int() + if int64(int(n)) == n { + num = int(n) + isInt = true + } + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + n := v.Uint() + if int64(n) >= 0 && uint64(int(n)) == n { + num = int(n) + isInt = true + } + default: + // Already 0, false. + } + } + p.ArgNum++ + if tooLarge(num) { + num = 0 + isInt = false + } + } + return +} + +// parseArgNumber returns the value of the bracketed number, minus 1 +// (explicit argument numbers are one-indexed but we want zero-indexed). +// The opening bracket is known to be present at format[0]. +// The returned values are the index, the number of bytes to consume +// up to the closing paren, if present, and whether the number parsed +// ok. The bytes to consume will be 1 if no closing paren is present. +func parseArgNumber(format string) (index int, wid int, ok bool) { + // There must be at least 3 bytes: [n]. + if len(format) < 3 { + return 0, 1, false + } + + // Find closing bracket. + for i := 1; i < len(format); i++ { + if format[i] == ']' { + width, ok, newi := parsenum(format, 1, i) + if !ok || newi != i { + return 0, i + 1, false + } + return width - 1, i + 1, true // arg numbers are one-indexed and skip paren. + } + } + return 0, 1, false +} + +// updateArgNumber returns the next argument to evaluate, which is either the value of the passed-in +// argNum or the value of the bracketed integer that begins format[i:]. It also returns +// the new value of i, that is, the index of the next byte of the format to process. +func (p *Parser) updateArgNumber(format string, i int) (newi int, found bool) { + if len(format) <= i || format[i] != '[' { + return i, false + } + p.Reordered = true + index, wid, ok := parseArgNumber(format[i:]) + if ok && 0 <= index && index < len(p.Args) { + p.ArgNum = index + return i + wid, true + } + p.goodArgNum = false + return i + wid, ok +} + +// tooLarge reports whether the magnitude of the integer is +// too large to be used as a formatting width or precision. +func tooLarge(x int) bool { + const max int = 1e6 + return x > max || x < -max +} + +// parsenum converts ASCII to integer. num is 0 (and isnum is false) if no number present. +func parsenum(s string, start, end int) (num int, isnum bool, newi int) { + if start >= end { + return 0, false, end + } + for newi = start; newi < end && '0' <= s[newi] && s[newi] <= '9'; newi++ { + if tooLarge(num) { + return 0, false, end // Overflow; crazy long number most likely. + } + num = num*10 + int(s[newi]-'0') + isnum = true + } + return +} diff --git a/vendor/golang.org/x/text/internal/format/parser_test.go b/vendor/golang.org/x/text/internal/format/parser_test.go new file mode 100644 index 0000000..7229908 --- /dev/null +++ b/vendor/golang.org/x/text/internal/format/parser_test.go @@ -0,0 +1,32 @@ +// Copyright 2017 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. + +package format + +import "testing" + +// TODO: most of Parser is tested in x/message. Move some tests here. + +func TestParsenum(t *testing.T) { + testCases := []struct { + s string + start, end int + num int + isnum bool + newi int + }{ + {"a123", 0, 4, 0, false, 0}, + {"1234", 1, 1, 0, false, 1}, + {"123a", 0, 4, 123, true, 3}, + {"12a3", 0, 4, 12, true, 2}, + {"1234", 0, 4, 1234, true, 4}, + {"1a234", 1, 3, 0, false, 1}, + } + for _, tt := range testCases { + num, isnum, newi := parsenum(tt.s, tt.start, tt.end) + if num != tt.num || isnum != tt.isnum || newi != tt.newi { + t.Errorf("parsenum(%q, %d, %d) = %d, %v, %d, want %d, %v, %d", tt.s, tt.start, tt.end, num, isnum, newi, tt.num, tt.isnum, tt.newi) + } + } +} diff --git a/vendor/golang.org/x/text/internal/gen.go b/vendor/golang.org/x/text/internal/gen.go deleted file mode 100644 index 1d678af..0000000 --- a/vendor/golang.org/x/text/internal/gen.go +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2015 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 ignore - -package main - -import ( - "log" - - "golang.org/x/text/internal/gen" - "golang.org/x/text/language" - "golang.org/x/text/unicode/cldr" -) - -func main() { - r := gen.OpenCLDRCoreZip() - defer r.Close() - - d := &cldr.Decoder{} - data, err := d.DecodeZip(r) - if err != nil { - log.Fatalf("DecodeZip: %v", err) - } - - w := gen.NewCodeWriter() - defer w.WriteGoFile("tables.go", "internal") - - // Create parents table. - parents := make([]uint16, language.NumCompactTags) - for _, loc := range data.Locales() { - tag := language.MustParse(loc) - index, ok := language.CompactIndex(tag) - if !ok { - continue - } - parentIndex := 0 // und - for p := tag.Parent(); p != language.Und; p = p.Parent() { - if x, ok := language.CompactIndex(p); ok { - parentIndex = x - break - } - } - parents[index] = uint16(parentIndex) - } - - w.WriteComment(` - Parent maps a compact index of a tag to the compact index of the parent of - this tag.`) - w.WriteVar("Parent", parents) -} diff --git a/vendor/golang.org/x/text/internal/gen/bitfield/bitfield.go b/vendor/golang.org/x/text/internal/gen/bitfield/bitfield.go new file mode 100644 index 0000000..a8d0a48 --- /dev/null +++ b/vendor/golang.org/x/text/internal/gen/bitfield/bitfield.go @@ -0,0 +1,226 @@ +// Copyright 2018 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. + +// Package bitfield converts annotated structs into integer values. +// +// Any field that is marked with a bitfield tag is compacted. The tag value has +// two parts. The part before the comma determines the method name for a +// generated type. If left blank the name of the field is used. +// The part after the comma determines the number of bits to use for the +// representation. +package bitfield + +import ( + "bytes" + "fmt" + "io" + "reflect" + "strconv" + "strings" +) + +// Config determines settings for packing and generation. If a Config is used, +// the same Config should be used for packing and generation. +type Config struct { + // NumBits fixes the maximum allowed bits for the integer representation. + // If NumBits is not 8, 16, 32, or 64, the actual underlying integer size + // will be the next largest available. + NumBits uint + + // If Package is set, code generation will write a package clause. + Package string + + // TypeName is the name for the generated type. By default it is the name + // of the type of the value passed to Gen. + TypeName string +} + +var nullConfig = &Config{} + +// Pack packs annotated bit ranges of struct x in an integer. +// +// Only fields that have a "bitfield" tag are compacted. +func Pack(x interface{}, c *Config) (packed uint64, err error) { + packed, _, err = pack(x, c) + return +} + +func pack(x interface{}, c *Config) (packed uint64, nBit uint, err error) { + if c == nil { + c = nullConfig + } + nBits := c.NumBits + v := reflect.ValueOf(x) + v = reflect.Indirect(v) + t := v.Type() + pos := 64 - nBits + if nBits == 0 { + pos = 0 + } + for i := 0; i < v.NumField(); i++ { + v := v.Field(i) + field := t.Field(i) + f, err := parseField(field) + + if err != nil { + return 0, 0, err + } + if f.nBits == 0 { + continue + } + value := uint64(0) + switch v.Kind() { + case reflect.Bool: + if v.Bool() { + value = 1 + } + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + value = v.Uint() + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + x := v.Int() + if x < 0 { + return 0, 0, fmt.Errorf("bitfield: negative value for field %q not allowed", field.Name) + } + value = uint64(x) + } + if value > (1< 64 { + return 0, 0, fmt.Errorf("bitfield: no more bits left for field %q", field.Name) + } + packed |= value << shift + } + if nBits == 0 { + nBits = posToBits(pos) + packed >>= (64 - nBits) + } + return packed, nBits, nil +} + +type field struct { + name string + value uint64 + nBits uint +} + +// parseField parses a tag of the form [][:][,[..]] +func parseField(field reflect.StructField) (f field, err error) { + s, ok := field.Tag.Lookup("bitfield") + if !ok { + return f, nil + } + switch field.Type.Kind() { + case reflect.Bool: + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + default: + return f, fmt.Errorf("bitfield: field %q is not an integer or bool type", field.Name) + } + bits := s + f.name = "" + + if i := strings.IndexByte(s, ','); i >= 0 { + bits = s[:i] + f.name = s[i+1:] + } + if bits != "" { + nBits, err := strconv.ParseUint(bits, 10, 8) + if err != nil { + return f, fmt.Errorf("bitfield: invalid bit size for field %q: %v", field.Name, err) + } + f.nBits = uint(nBits) + } + if f.nBits == 0 { + if field.Type.Kind() == reflect.Bool { + f.nBits = 1 + } else { + f.nBits = uint(field.Type.Bits()) + } + } + if f.name == "" { + f.name = field.Name + } + return f, err +} + +func posToBits(pos uint) (bits uint) { + switch { + case pos <= 8: + bits = 8 + case pos <= 16: + bits = 16 + case pos <= 32: + bits = 32 + case pos <= 64: + bits = 64 + default: + panic("unreachable") + } + return bits +} + +// Gen generates code for unpacking integers created with Pack. +func Gen(w io.Writer, x interface{}, c *Config) error { + if c == nil { + c = nullConfig + } + _, nBits, err := pack(x, c) + if err != nil { + return err + } + + t := reflect.TypeOf(x) + if t.Kind() == reflect.Ptr { + t = t.Elem() + } + if c.TypeName == "" { + c.TypeName = t.Name() + } + firstChar := []rune(c.TypeName)[0] + + buf := &bytes.Buffer{} + + print := func(w io.Writer, format string, args ...interface{}) { + if _, e := fmt.Fprintf(w, format+"\n", args...); e != nil && err == nil { + err = fmt.Errorf("bitfield: write failed: %v", err) + } + } + + pos := uint(0) + for i := 0; i < t.NumField(); i++ { + field := t.Field(i) + f, _ := parseField(field) + if f.nBits == 0 { + continue + } + shift := nBits - pos - f.nBits + pos += f.nBits + + retType := field.Type.Name() + print(buf, "\nfunc (%c %s) %s() %s {", firstChar, c.TypeName, f.name, retType) + if field.Type.Kind() == reflect.Bool { + print(buf, "\tconst bit = 1 << %d", shift) + print(buf, "\treturn %c&bit == bit", firstChar) + } else { + print(buf, "\treturn %s((%c >> %d) & %#x)", retType, firstChar, shift, (1<> 16) & 0xffff) +} + +func (t test1) baz() int8 { + return int8((t >> 11) & 0x1f) +} + +func (t test1) bar() myUint8 { + return myUint8((t >> 8) & 0x7) +} + +func (t test1) Bool() bool { + const bit = 1 << 7 + return t&bit == bit +} + +func (t test1) Baz() int8 { + return int8((t >> 4) & 0x7) +} +` + +func mustRead(filename string) string { + b, err := ioutil.ReadFile(filename) + if err != nil { + panic(err) + } + return string(b) +} diff --git a/vendor/golang.org/x/text/internal/gen/bitfield/gen1_test.go b/vendor/golang.org/x/text/internal/gen/bitfield/gen1_test.go new file mode 100644 index 0000000..2844b9d --- /dev/null +++ b/vendor/golang.org/x/text/internal/gen/bitfield/gen1_test.go @@ -0,0 +1,26 @@ +// Code generated by golang.org/x/text/internal/gen/bitfield. DO NOT EDIT. + +package bitfield + +type myInt uint32 + +func (m myInt) fob() uint16 { + return uint16((m >> 16) & 0xffff) +} + +func (m myInt) baz() int8 { + return int8((m >> 11) & 0x1f) +} + +func (m myInt) bar() myUint8 { + return myUint8((m >> 8) & 0x7) +} + +func (m myInt) Bool() bool { + const bit = 1 << 7 + return m&bit == bit +} + +func (m myInt) Baz() int8 { + return int8((m >> 4) & 0x7) +} diff --git a/vendor/golang.org/x/text/internal/gen/bitfield/gen2_test.go b/vendor/golang.org/x/text/internal/gen/bitfield/gen2_test.go new file mode 100644 index 0000000..ad5f72a --- /dev/null +++ b/vendor/golang.org/x/text/internal/gen/bitfield/gen2_test.go @@ -0,0 +1,26 @@ +// Code generated by golang.org/x/text/internal/gen/bitfield. DO NOT EDIT. + +package bitfield + +type myInt2 uint32 + +func (m myInt2) fob() uint16 { + return uint16((m >> 12) & 0xffff) +} + +func (m myInt2) baz() int8 { + return int8((m >> 7) & 0x1f) +} + +func (m myInt2) bar() myUint8 { + return myUint8((m >> 4) & 0x7) +} + +func (m myInt2) Bool() bool { + const bit = 1 << 3 + return m&bit == bit +} + +func (m myInt2) Baz() int8 { + return int8((m >> 0) & 0x7) +} diff --git a/vendor/golang.org/x/text/internal/gen/code.go b/vendor/golang.org/x/text/internal/gen/code.go index d7031b6..25aaa03 100644 --- a/vendor/golang.org/x/text/internal/gen/code.go +++ b/vendor/golang.org/x/text/internal/gen/code.go @@ -55,18 +55,36 @@ func (w *CodeWriter) WriteGoFile(filename, pkg string) { log.Fatalf("Could not create file %s: %v", filename, err) } defer f.Close() - if _, err = w.WriteGo(f, pkg); err != nil { + if _, err = w.WriteGo(f, pkg, ""); err != nil { + log.Fatalf("Error writing file %s: %v", filename, err) + } +} + +// WriteVersionedGoFile appends the buffer with the total size of all created +// structures and writes it as a Go file to the the given file with the given +// package name and build tags for the current Unicode version, +func (w *CodeWriter) WriteVersionedGoFile(filename, pkg string) { + tags := buildTags() + if tags != "" { + filename = insertVersion(filename, UnicodeVersion()) + } + f, err := os.Create(filename) + if err != nil { + log.Fatalf("Could not create file %s: %v", filename, err) + } + defer f.Close() + if _, err = w.WriteGo(f, pkg, tags); err != nil { log.Fatalf("Error writing file %s: %v", filename, err) } } // WriteGo appends the buffer with the total size of all created structures and // writes it as a Go file to the the given writer with the given package name. -func (w *CodeWriter) WriteGo(out io.Writer, pkg string) (n int, err error) { +func (w *CodeWriter) WriteGo(out io.Writer, pkg, tags string) (n int, err error) { sz := w.Size w.WriteComment("Total table size %d bytes (%dKiB); checksum: %X\n", sz, sz/1024, w.Hash.Sum32()) defer w.buf.Reset() - return WriteGo(out, pkg, w.buf.Bytes()) + return WriteGo(out, pkg, tags, w.buf.Bytes()) } func (w *CodeWriter) printf(f string, x ...interface{}) { @@ -181,7 +199,6 @@ func (w *CodeWriter) writeValue(v reflect.Value) { // WriteString writes a string literal. func (w *CodeWriter) WriteString(s string) { - s = strings.Replace(s, `\`, `\\`, -1) io.WriteString(w.Hash, s) // content hash w.Size += len(s) @@ -232,6 +249,9 @@ func (w *CodeWriter) WriteString(s string) { out = fmt.Sprintf("\\U%08x", r) } chars = len(out) + } else if r == '\\' { + out = "\\" + string(r) + chars = 2 } if n -= chars; n < 0 { nLines++ diff --git a/vendor/golang.org/x/text/internal/gen/gen.go b/vendor/golang.org/x/text/internal/gen/gen.go index 2acb035..4c3f760 100644 --- a/vendor/golang.org/x/text/internal/gen/gen.go +++ b/vendor/golang.org/x/text/internal/gen/gen.go @@ -31,6 +31,7 @@ import ( "os" "path" "path/filepath" + "strings" "sync" "unicode" @@ -69,8 +70,6 @@ func Init() { const header = `// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. -package %s - ` // UnicodeVersion reports the requested Unicode version. @@ -78,11 +77,33 @@ func UnicodeVersion() string { return *unicodeVersion } -// UnicodeVersion reports the requested CLDR version. +// CLDRVersion reports the requested CLDR version. func CLDRVersion() string { return *cldrVersion } +var tags = []struct{ version, buildTags string }{ + {"10.0.0", "go1.10"}, + {"", "!go1.10"}, +} + +// buildTags reports the build tags used for the current Unicode version. +func buildTags() string { + v := UnicodeVersion() + for _, x := range tags { + // We should do a numeric comparison, but including the collate package + // would create an import cycle. We approximate it by assuming that + // longer version strings are later. + if len(x.version) <= len(v) { + return x.buildTags + } + if len(x.version) == len(v) && x.version <= v { + return x.buildTags + } + } + return tags[0].buildTags +} + // IsLocal reports whether data files are available locally. func IsLocal() bool { dir, err := localReadmeFile() @@ -243,15 +264,46 @@ func WriteGoFile(filename, pkg string, b []byte) { log.Fatalf("Could not create file %s: %v", filename, err) } defer w.Close() - if _, err = WriteGo(w, pkg, b); err != nil { + if _, err = WriteGo(w, pkg, "", b); err != nil { + log.Fatalf("Error writing file %s: %v", filename, err) + } +} + +func insertVersion(filename, version string) string { + suffix := ".go" + if strings.HasSuffix(filename, "_test.go") { + suffix = "_test.go" + } + return fmt.Sprint(filename[:len(filename)-len(suffix)], version, suffix) +} + +// WriteVersionedGoFile prepends a standard file comment, adds build tags to +// version the file for the current Unicode version, and package statement to +// the given bytes, applies gofmt, and writes them to a file with the given +// name. It will call log.Fatal if there are any errors. +func WriteVersionedGoFile(filename, pkg string, b []byte) { + tags := buildTags() + if tags != "" { + filename = insertVersion(filename, UnicodeVersion()) + } + w, err := os.Create(filename) + if err != nil { + log.Fatalf("Could not create file %s: %v", filename, err) + } + defer w.Close() + if _, err = WriteGo(w, pkg, tags, b); err != nil { log.Fatalf("Error writing file %s: %v", filename, err) } } // WriteGo prepends a standard file comment and package statement to the given // bytes, applies gofmt, and writes them to w. -func WriteGo(w io.Writer, pkg string, b []byte) (n int, err error) { - src := []byte(fmt.Sprintf(header, pkg)) +func WriteGo(w io.Writer, pkg, tags string, b []byte) (n int, err error) { + src := []byte(header) + if tags != "" { + src = append(src, fmt.Sprintf("// +build %s\n\n", tags)...) + } + src = append(src, fmt.Sprintf("package %s\n\n", pkg)...) src = append(src, b...) formatted, err := format.Source(src) if err != nil { diff --git a/vendor/golang.org/x/text/internal/gen_test.go b/vendor/golang.org/x/text/internal/gen_test.go deleted file mode 100644 index a2e1981..0000000 --- a/vendor/golang.org/x/text/internal/gen_test.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2015 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. - -package internal - -import ( - "testing" - - "golang.org/x/text/language" -) - -func TestParents(t *testing.T) { - testCases := []struct { - tag, parent string - }{ - {"af", "und"}, - {"en", "und"}, - {"en-001", "en"}, - {"en-AU", "en-001"}, - {"en-US", "en"}, - {"en-US-u-va-posix", "en-US"}, - {"ca-ES-valencia", "ca-ES"}, - } - for _, tc := range testCases { - tag, ok := language.CompactIndex(language.MustParse(tc.tag)) - if !ok { - t.Fatalf("Could not get index of flag %s", tc.tag) - } - want, ok := language.CompactIndex(language.MustParse(tc.parent)) - if !ok { - t.Fatalf("Could not get index of parent %s of tag %s", tc.parent, tc.tag) - } - if got := int(Parent[tag]); got != want { - t.Errorf("Parent[%s] = %d; want %d (%s)", tc.tag, got, want, tc.parent) - } - } -} diff --git a/vendor/golang.org/x/text/internal/internal.go b/vendor/golang.org/x/text/internal/internal.go index eac8328..3cddbbd 100644 --- a/vendor/golang.org/x/text/internal/internal.go +++ b/vendor/golang.org/x/text/internal/internal.go @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:generate go run gen.go - // Package internal contains non-exported functionality that are used by // packages in the text repository. package internal // import "golang.org/x/text/internal" diff --git a/vendor/golang.org/x/text/internal/language/common.go b/vendor/golang.org/x/text/internal/language/common.go new file mode 100644 index 0000000..cdfdb74 --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/common.go @@ -0,0 +1,16 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package language + +// This file contains code common to the maketables.go and the package code. + +// AliasType is the type of an alias in AliasMap. +type AliasType int8 + +const ( + Deprecated AliasType = iota + Macro + Legacy + + AliasTypeUnknown AliasType = -1 +) diff --git a/vendor/golang.org/x/text/internal/language/compact.go b/vendor/golang.org/x/text/internal/language/compact.go new file mode 100644 index 0000000..46a0015 --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/compact.go @@ -0,0 +1,29 @@ +// Copyright 2018 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. + +package language + +// CompactCoreInfo is a compact integer with the three core tags encoded. +type CompactCoreInfo uint32 + +// GetCompactCore generates a uint32 value that is guaranteed to be unique for +// different language, region, and script values. +func GetCompactCore(t Tag) (cci CompactCoreInfo, ok bool) { + if t.LangID > langNoIndexOffset { + return 0, false + } + cci |= CompactCoreInfo(t.LangID) << (8 + 12) + cci |= CompactCoreInfo(t.ScriptID) << 12 + cci |= CompactCoreInfo(t.RegionID) + return cci, true +} + +// Tag generates a tag from c. +func (c CompactCoreInfo) Tag() Tag { + return Tag{ + LangID: Language(c >> 20), + RegionID: Region(c & 0x3ff), + ScriptID: Script(c>>12) & 0xff, + } +} diff --git a/vendor/golang.org/x/text/internal/language/compact/compact.go b/vendor/golang.org/x/text/internal/language/compact/compact.go new file mode 100644 index 0000000..1b36935 --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/compact/compact.go @@ -0,0 +1,61 @@ +// Copyright 2018 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. + +// Package compact defines a compact representation of language tags. +// +// Common language tags (at least all for which locale information is defined +// in CLDR) are assigned a unique index. Each Tag is associated with such an +// ID for selecting language-related resources (such as translations) as well +// as one for selecting regional defaults (currency, number formatting, etc.) +// +// It may want to export this functionality at some point, but at this point +// this is only available for use within x/text. +package compact // import "golang.org/x/text/internal/language/compact" + +import ( + "sort" + "strings" + + "golang.org/x/text/internal/language" +) + +// ID is an integer identifying a single tag. +type ID uint16 + +func getCoreIndex(t language.Tag) (id ID, ok bool) { + cci, ok := language.GetCompactCore(t) + if !ok { + return 0, false + } + i := sort.Search(len(coreTags), func(i int) bool { + return cci <= coreTags[i] + }) + if i == len(coreTags) || coreTags[i] != cci { + return 0, false + } + return ID(i), true +} + +// Parent returns the ID of the parent or the root ID if id is already the root. +func (id ID) Parent() ID { + return parents[id] +} + +// Tag converts id to an internal language Tag. +func (id ID) Tag() language.Tag { + if int(id) >= len(coreTags) { + return specialTags[int(id)-len(coreTags)] + } + return coreTags[id].Tag() +} + +var specialTags []language.Tag + +func init() { + tags := strings.Split(specialTagsStr, " ") + specialTags = make([]language.Tag, len(tags)) + for i, t := range tags { + specialTags[i] = language.MustParse(t) + } +} diff --git a/vendor/golang.org/x/text/internal/language/compact/gen.go b/vendor/golang.org/x/text/internal/language/compact/gen.go new file mode 100644 index 0000000..0c36a05 --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/compact/gen.go @@ -0,0 +1,64 @@ +// Copyright 2013 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 ignore + +// Language tag table generator. +// Data read from the web. + +package main + +import ( + "flag" + "fmt" + "log" + + "golang.org/x/text/internal/gen" + "golang.org/x/text/unicode/cldr" +) + +var ( + test = flag.Bool("test", + false, + "test existing tables; can be used to compare web data with package data.") + outputFile = flag.String("output", + "tables.go", + "output file for generated tables") +) + +func main() { + gen.Init() + + w := gen.NewCodeWriter() + defer w.WriteGoFile("tables.go", "compact") + + fmt.Fprintln(w, `import "golang.org/x/text/internal/language"`) + + b := newBuilder(w) + gen.WriteCLDRVersion(w) + + b.writeCompactIndex() +} + +type builder struct { + w *gen.CodeWriter + data *cldr.CLDR + supp *cldr.SupplementalData +} + +func newBuilder(w *gen.CodeWriter) *builder { + r := gen.OpenCLDRCoreZip() + defer r.Close() + d := &cldr.Decoder{} + data, err := d.DecodeZip(r) + if err != nil { + log.Fatal(err) + } + b := builder{ + w: w, + data: data, + supp: data.Supplemental(), + } + return &b +} diff --git a/vendor/golang.org/x/text/internal/language/compact/gen_index.go b/vendor/golang.org/x/text/internal/language/compact/gen_index.go new file mode 100644 index 0000000..136cefa --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/compact/gen_index.go @@ -0,0 +1,113 @@ +// Copyright 2015 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 ignore + +package main + +// This file generates derivative tables based on the language package itself. + +import ( + "fmt" + "log" + "sort" + "strings" + + "golang.org/x/text/internal/language" +) + +// Compact indices: +// Note -va-X variants only apply to localization variants. +// BCP variants only ever apply to language. +// The only ambiguity between tags is with regions. + +func (b *builder) writeCompactIndex() { + // Collect all language tags for which we have any data in CLDR. + m := map[language.Tag]bool{} + for _, lang := range b.data.Locales() { + // We include all locales unconditionally to be consistent with en_US. + // We want en_US, even though it has no data associated with it. + + // TODO: put any of the languages for which no data exists at the end + // of the index. This allows all components based on ICU to use that + // as the cutoff point. + // if x := data.RawLDML(lang); false || + // x.LocaleDisplayNames != nil || + // x.Characters != nil || + // x.Delimiters != nil || + // x.Measurement != nil || + // x.Dates != nil || + // x.Numbers != nil || + // x.Units != nil || + // x.ListPatterns != nil || + // x.Collations != nil || + // x.Segmentations != nil || + // x.Rbnf != nil || + // x.Annotations != nil || + // x.Metadata != nil { + + // TODO: support POSIX natively, albeit non-standard. + tag := language.Make(strings.Replace(lang, "_POSIX", "-u-va-posix", 1)) + m[tag] = true + // } + } + + // TODO: plural rules are also defined for the deprecated tags: + // iw mo sh tl + // Consider removing these as compact tags. + + // Include locales for plural rules, which uses a different structure. + for _, plurals := range b.supp.Plurals { + for _, rules := range plurals.PluralRules { + for _, lang := range strings.Split(rules.Locales, " ") { + m[language.Make(lang)] = true + } + } + } + + var coreTags []language.CompactCoreInfo + var special []string + + for t := range m { + if x := t.Extensions(); len(x) != 0 && fmt.Sprint(x) != "[u-va-posix]" { + log.Fatalf("Unexpected extension %v in %v", x, t) + } + if len(t.Variants()) == 0 && len(t.Extensions()) == 0 { + cci, ok := language.GetCompactCore(t) + if !ok { + log.Fatalf("Locale for non-basic language %q", t) + } + coreTags = append(coreTags, cci) + } else { + special = append(special, t.String()) + } + } + + w := b.w + + sort.Slice(coreTags, func(i, j int) bool { return coreTags[i] < coreTags[j] }) + sort.Strings(special) + + w.WriteComment(` + NumCompactTags is the number of common tags. The maximum tag is + NumCompactTags-1.`) + w.WriteConst("NumCompactTags", len(m)) + + fmt.Fprintln(w, "const (") + for i, t := range coreTags { + fmt.Fprintf(w, "%s ID = %d\n", ident(t.Tag().String()), i) + } + for i, t := range special { + fmt.Fprintf(w, "%s ID = %d\n", ident(t), i+len(coreTags)) + } + fmt.Fprintln(w, ")") + + w.WriteVar("coreTags", coreTags) + + w.WriteConst("specialTagsStr", strings.Join(special, " ")) +} + +func ident(s string) string { + return strings.Replace(s, "-", "", -1) + "Index" +} diff --git a/vendor/golang.org/x/text/internal/language/compact/gen_parents.go b/vendor/golang.org/x/text/internal/language/compact/gen_parents.go new file mode 100644 index 0000000..9543d58 --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/compact/gen_parents.go @@ -0,0 +1,54 @@ +// Copyright 2018 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 ignore + +package main + +import ( + "log" + + "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/language" + "golang.org/x/text/internal/language/compact" + "golang.org/x/text/unicode/cldr" +) + +func main() { + r := gen.OpenCLDRCoreZip() + defer r.Close() + + d := &cldr.Decoder{} + data, err := d.DecodeZip(r) + if err != nil { + log.Fatalf("DecodeZip: %v", err) + } + + w := gen.NewCodeWriter() + defer w.WriteGoFile("parents.go", "compact") + + // Create parents table. + type ID uint16 + parents := make([]ID, compact.NumCompactTags) + for _, loc := range data.Locales() { + tag := language.MustParse(loc) + index, ok := compact.FromTag(tag) + if !ok { + continue + } + parentIndex := compact.ID(0) // und + for p := tag.Parent(); p != language.Und; p = p.Parent() { + if x, ok := compact.FromTag(p); ok { + parentIndex = x + break + } + } + parents[index] = ID(parentIndex) + } + + w.WriteComment(` + parents maps a compact index of a tag to the compact index of the parent of + this tag.`) + w.WriteVar("parents", parents) +} diff --git a/vendor/golang.org/x/text/internal/language/compact/gen_test.go b/vendor/golang.org/x/text/internal/language/compact/gen_test.go new file mode 100644 index 0000000..3b74252 --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/compact/gen_test.go @@ -0,0 +1,38 @@ +// Copyright 2015 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. + +package compact + +import ( + "testing" + + "golang.org/x/text/internal/language" +) + +func TestParents(t *testing.T) { + testCases := []struct { + tag, parent string + }{ + {"af", "und"}, + {"en", "und"}, + {"en-001", "en"}, + {"en-AU", "en-001"}, + {"en-US", "en"}, + {"en-US-u-va-posix", "en-US"}, + {"ca-ES-valencia", "ca-ES"}, + } + for _, tc := range testCases { + tag, ok := LanguageID(Make(language.MustParse(tc.tag))) + if !ok { + t.Fatalf("Could not get index of flag %s", tc.tag) + } + want, ok := LanguageID(Make(language.MustParse(tc.parent))) + if !ok { + t.Fatalf("Could not get index of parent %s of tag %s", tc.parent, tc.tag) + } + if got := parents[tag]; got != want { + t.Errorf("Parent[%s] = %d; want %d (%s)", tc.tag, got, want, tc.parent) + } + } +} diff --git a/vendor/golang.org/x/text/internal/language/compact/language.go b/vendor/golang.org/x/text/internal/language/compact/language.go new file mode 100644 index 0000000..83816a7 --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/compact/language.go @@ -0,0 +1,260 @@ +// Copyright 2013 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. + +//go:generate go run gen.go gen_index.go -output tables.go +//go:generate go run gen_parents.go + +package compact + +// TODO: Remove above NOTE after: +// - verifying that tables are dropped correctly (most notably matcher tables). + +import ( + "strings" + + "golang.org/x/text/internal/language" +) + +// Tag represents a BCP 47 language tag. It is used to specify an instance of a +// specific language or locale. All language tag values are guaranteed to be +// well-formed. +type Tag struct { + // NOTE: exported tags will become part of the public API. + language ID + locale ID + full fullTag // always a language.Tag for now. +} + +const _und = 0 + +type fullTag interface { + IsRoot() bool + Parent() language.Tag +} + +// Make a compact Tag from a fully specified internal language Tag. +func Make(t language.Tag) (tag Tag) { + if region := t.TypeForKey("rg"); len(region) == 6 && region[2:] == "zzzz" { + if r, err := language.ParseRegion(region[:2]); err == nil { + tFull := t + t, _ = t.SetTypeForKey("rg", "") + // TODO: should we not consider "va" for the language tag? + var exact1, exact2 bool + tag.language, exact1 = FromTag(t) + t.RegionID = r + tag.locale, exact2 = FromTag(t) + if !exact1 || !exact2 { + tag.full = tFull + } + return tag + } + } + lang, ok := FromTag(t) + tag.language = lang + tag.locale = lang + if !ok { + tag.full = t + } + return tag +} + +// Tag returns an internal language Tag version of this tag. +func (t Tag) Tag() language.Tag { + if t.full != nil { + return t.full.(language.Tag) + } + tag := t.language.Tag() + if t.language != t.locale { + loc := t.locale.Tag() + tag, _ = tag.SetTypeForKey("rg", strings.ToLower(loc.RegionID.String())+"zzzz") + } + return tag +} + +// IsCompact reports whether this tag is fully defined in terms of ID. +func (t *Tag) IsCompact() bool { + return t.full == nil +} + +// MayHaveVariants reports whether a tag may have variants. If it returns false +// it is guaranteed the tag does not have variants. +func (t Tag) MayHaveVariants() bool { + return t.full != nil || int(t.language) >= len(coreTags) +} + +// MayHaveExtensions reports whether a tag may have extensions. If it returns +// false it is guaranteed the tag does not have them. +func (t Tag) MayHaveExtensions() bool { + return t.full != nil || + int(t.language) >= len(coreTags) || + t.language != t.locale +} + +// IsRoot returns true if t is equal to language "und". +func (t Tag) IsRoot() bool { + if t.full != nil { + return t.full.IsRoot() + } + return t.language == _und +} + +// Parent returns the CLDR parent of t. In CLDR, missing fields in data for a +// specific language are substituted with fields from the parent language. +// The parent for a language may change for newer versions of CLDR. +func (t Tag) Parent() Tag { + if t.full != nil { + return Make(t.full.Parent()) + } + if t.language != t.locale { + // Simulate stripping -u-rg-xxxxxx + return Tag{language: t.language, locale: t.language} + } + // TODO: use parent lookup table once cycle from internal package is + // removed. Probably by internalizing the table and declaring this fast + // enough. + // lang := compactID(internal.Parent(uint16(t.language))) + lang, _ := FromTag(t.language.Tag().Parent()) + return Tag{language: lang, locale: lang} +} + +// returns token t and the rest of the string. +func nextToken(s string) (t, tail string) { + p := strings.Index(s[1:], "-") + if p == -1 { + return s[1:], "" + } + p++ + return s[1:p], s[p:] +} + +// LanguageID returns an index, where 0 <= index < NumCompactTags, for tags +// for which data exists in the text repository.The index will change over time +// and should not be stored in persistent storage. If t does not match a compact +// index, exact will be false and the compact index will be returned for the +// first match after repeatedly taking the Parent of t. +func LanguageID(t Tag) (id ID, exact bool) { + return t.language, t.full == nil +} + +// RegionalID returns the ID for the regional variant of this tag. This index is +// used to indicate region-specific overrides, such as default currency, default +// calendar and week data, default time cycle, and default measurement system +// and unit preferences. +// +// For instance, the tag en-GB-u-rg-uszzzz specifies British English with US +// settings for currency, number formatting, etc. The CompactIndex for this tag +// will be that for en-GB, while the RegionalID will be the one corresponding to +// en-US. +func RegionalID(t Tag) (id ID, exact bool) { + return t.locale, t.full == nil +} + +// LanguageTag returns t stripped of regional variant indicators. +// +// At the moment this means it is stripped of a regional and variant subtag "rg" +// and "va" in the "u" extension. +func (t Tag) LanguageTag() Tag { + if t.full == nil { + return Tag{language: t.language, locale: t.language} + } + tt := t.Tag() + tt.SetTypeForKey("rg", "") + tt.SetTypeForKey("va", "") + return Make(tt) +} + +// RegionalTag returns the regional variant of the tag. +// +// At the moment this means that the region is set from the regional subtag +// "rg" in the "u" extension. +func (t Tag) RegionalTag() Tag { + rt := Tag{language: t.locale, locale: t.locale} + if t.full == nil { + return rt + } + b := language.Builder{} + tag := t.Tag() + // tag, _ = tag.SetTypeForKey("rg", "") + b.SetTag(t.locale.Tag()) + if v := tag.Variants(); v != "" { + for _, v := range strings.Split(v, "-") { + b.AddVariant(v) + } + } + for _, e := range tag.Extensions() { + b.AddExt(e) + } + return t +} + +// FromTag reports closest matching ID for an internal language Tag. +func FromTag(t language.Tag) (id ID, exact bool) { + // TODO: perhaps give more frequent tags a lower index. + // TODO: we could make the indexes stable. This will excluded some + // possibilities for optimization, so don't do this quite yet. + exact = true + + b, s, r := t.Raw() + if t.HasString() { + if t.IsPrivateUse() { + // We have no entries for user-defined tags. + return 0, false + } + hasExtra := false + if t.HasVariants() { + if t.HasExtensions() { + build := language.Builder{} + build.SetTag(language.Tag{LangID: b, ScriptID: s, RegionID: r}) + build.AddVariant(t.Variants()) + exact = false + t = build.Make() + } + hasExtra = true + } else if _, ok := t.Extension('u'); ok { + // TODO: va may mean something else. Consider not considering it. + // Strip all but the 'va' entry. + old := t + variant := t.TypeForKey("va") + t = language.Tag{LangID: b, ScriptID: s, RegionID: r} + if variant != "" { + t, _ = t.SetTypeForKey("va", variant) + hasExtra = true + } + exact = old == t + } else { + exact = false + } + if hasExtra { + // We have some variants. + for i, s := range specialTags { + if s == t { + return ID(i + len(coreTags)), exact + } + } + exact = false + } + } + if x, ok := getCoreIndex(t); ok { + return x, exact + } + exact = false + if r != 0 && s == 0 { + // Deal with cases where an extra script is inserted for the region. + t, _ := t.Maximize() + if x, ok := getCoreIndex(t); ok { + return x, exact + } + } + for t = t.Parent(); t != root; t = t.Parent() { + // No variants specified: just compare core components. + // The key has the form lllssrrr, where l, s, and r are nibbles for + // respectively the langID, scriptID, and regionID. + if x, ok := getCoreIndex(t); ok { + return x, exact + } + } + return 0, exact +} + +var root = language.Tag{} diff --git a/vendor/golang.org/x/text/internal/language/compact/language_test.go b/vendor/golang.org/x/text/internal/language/compact/language_test.go new file mode 100644 index 0000000..57fd13f --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/compact/language_test.go @@ -0,0 +1,236 @@ +// Copyright 2013 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. + +package compact + +import ( + "reflect" + "testing" + + "golang.org/x/text/internal/language" +) + +func mustParse(s string) Tag { + t, err := language.Parse(s) + if err != nil { + panic(err) + } + return Make(t) +} + +func TestTagSize(t *testing.T) { + id := Tag{} + typ := reflect.TypeOf(id) + if typ.Size() > 24 { + t.Errorf("size of Tag was %d; want 24", typ.Size()) + } +} + +func TestNoPublic(t *testing.T) { + noExportedField(t, reflect.TypeOf(Tag{})) +} + +func noExportedField(t *testing.T, typ reflect.Type) { + for i := 0; i < typ.NumField(); i++ { + f := typ.Field(i) + if f.PkgPath == "" { + t.Errorf("Tag may not have exported fields, but has field %q", f.Name) + } + if f.Anonymous { + noExportedField(t, f.Type) + } + } +} + +func TestEquality(t *testing.T) { + for i, tt := range parseTests() { + s := tt.in + tag := mk(s) + t1 := mustParse(tag.Tag().String()) + if tag != t1 { + t.Errorf("%d:%s: equality test 1 failed\n got: %#v\nwant: %#v)", i, s, t1, tag) + } + } +} + +type compactTest struct { + tag string + index ID + ok bool +} + +var compactTests = []compactTest{ + // TODO: these values will change with each CLDR update. This issue + // will be solved if we decide to fix the indexes. + {"und", undIndex, true}, + {"ca-ES-valencia", caESvalenciaIndex, true}, + {"ca-ES-valencia-u-va-posix", caESvalenciaIndex, false}, + {"ca-ES-valencia-u-co-phonebk", caESvalenciaIndex, false}, + {"ca-ES-valencia-u-co-phonebk-va-posix", caESvalenciaIndex, false}, + {"x-klingon", 0, false}, + {"en-US", enUSIndex, true}, + {"en-US-u-va-posix", enUSuvaposixIndex, true}, + {"en", enIndex, true}, + {"en-u-co-phonebk", enIndex, false}, + {"en-001", en001Index, true}, + {"zh-Hant-HK", zhHantHKIndex, true}, + {"zh-HK", zhHantHKIndex, false}, // maximized to zh-Hant-HK + {"nl-Beng", 0, false}, // parent skips script + {"nl-NO", nlIndex, false}, // region is ignored + {"nl-Latn-NO", nlIndex, false}, + {"nl-Latn-NO-u-co-phonebk", nlIndex, false}, + {"nl-Latn-NO-valencia", nlIndex, false}, + {"nl-Latn-NO-oxendict", nlIndex, false}, + {"sh", shIndex, true}, // From plural rules. +} + +func TestLanguageID(t *testing.T) { + tests := append(compactTests, []compactTest{ + {"en-GB", enGBIndex, true}, + {"en-GB-u-rg-uszzzz", enGBIndex, true}, + {"en-GB-u-rg-USZZZZ", enGBIndex, true}, + {"en-GB-u-rg-uszzzz-va-posix", enGBIndex, false}, + {"en-GB-u-co-phonebk-rg-uszzzz", enGBIndex, false}, + // Invalid region specifications are ignored. + {"en-GB-u-rg-usz-va-posix", enGBIndex, false}, + {"en-GB-u-co-phonebk-rg-usz", enGBIndex, false}, + }...) + for _, tt := range tests { + x, ok := LanguageID(mustParse(tt.tag)) + if ID(x) != tt.index || ok != tt.ok { + t.Errorf("%s: got %d, %v; want %d %v", tt.tag, x, ok, tt.index, tt.ok) + } + } +} + +func TestRegionalID(t *testing.T) { + tests := append(compactTests, []compactTest{ + {"en-GB", enGBIndex, true}, + {"en-GB-u-rg-uszzzz", enUSIndex, true}, + {"en-GB-u-rg-USZZZZ", enUSIndex, true}, + // TODO: use different exact values for language and regional tag? + {"en-GB-u-rg-uszzzz-va-posix", enUSuvaposixIndex, false}, + {"en-GB-u-co-phonebk-rg-uszzzz-va-posix", enUSuvaposixIndex, false}, + {"en-GB-u-co-phonebk-rg-uszzzz", enUSIndex, false}, + // Invalid region specifications are ignored. + {"en-GB-u-rg-usz-va-posix", enGBIndex, false}, + {"en-GB-u-co-phonebk-rg-usz", enGBIndex, false}, + }...) + for _, tt := range tests { + x, ok := RegionalID(mustParse(tt.tag)) + if ID(x) != tt.index || ok != tt.ok { + t.Errorf("%s: got %d, %v; want %d %v", tt.tag, x, ok, tt.index, tt.ok) + } + } +} + +func TestParent(t *testing.T) { + tests := []struct{ in, out string }{ + // Strip variants and extensions first + {"de-u-co-phonebk", "de"}, + {"de-1994", "de"}, + {"de-Latn-1994", "de"}, // remove superfluous script. + + // Ensure the canonical Tag for an entry is in the chain for base-script + // pairs. + {"zh-Hans", "zh"}, + + // Skip the script if it is the maximized version. CLDR files for the + // skipped tag are always empty. + {"zh-Hans-TW", "zh"}, + {"zh-Hans-CN", "zh"}, + + // Insert the script if the maximized script is not the same as the + // maximized script of the base language. + {"zh-TW", "zh-Hant"}, + {"zh-HK", "zh-Hant"}, + {"zh-Hant-TW", "zh-Hant"}, + {"zh-Hant-HK", "zh-Hant"}, + + // Non-default script skips to und. + // CLDR + {"az-Cyrl", "und"}, + {"bs-Cyrl", "und"}, + {"en-Dsrt", "und"}, + {"ha-Arab", "und"}, + {"mn-Mong", "und"}, + {"pa-Arab", "und"}, + {"shi-Latn", "und"}, + {"sr-Latn", "und"}, + {"uz-Arab", "und"}, + {"uz-Cyrl", "und"}, + {"vai-Latn", "und"}, + {"zh-Hant", "und"}, + // extra + {"nl-Cyrl", "und"}, + + // World english inherits from en-001. + {"en-150", "en-001"}, + {"en-AU", "en-001"}, + {"en-BE", "en-001"}, + {"en-GG", "en-001"}, + {"en-GI", "en-001"}, + {"en-HK", "en-001"}, + {"en-IE", "en-001"}, + {"en-IM", "en-001"}, + {"en-IN", "en-001"}, + {"en-JE", "en-001"}, + {"en-MT", "en-001"}, + {"en-NZ", "en-001"}, + {"en-PK", "en-001"}, + {"en-SG", "en-001"}, + + // Spanish in Latin-American countries have es-419 as parent. + {"es-AR", "es-419"}, + {"es-BO", "es-419"}, + {"es-CL", "es-419"}, + {"es-CO", "es-419"}, + {"es-CR", "es-419"}, + {"es-CU", "es-419"}, + {"es-DO", "es-419"}, + {"es-EC", "es-419"}, + {"es-GT", "es-419"}, + {"es-HN", "es-419"}, + {"es-MX", "es-419"}, + {"es-NI", "es-419"}, + {"es-PA", "es-419"}, + {"es-PE", "es-419"}, + {"es-PR", "es-419"}, + {"es-PY", "es-419"}, + {"es-SV", "es-419"}, + {"es-US", "es-419"}, + {"es-UY", "es-419"}, + {"es-VE", "es-419"}, + // exceptions (according to CLDR) + {"es-CW", "es"}, + + // Inherit from pt-PT, instead of pt for these countries. + {"pt-AO", "pt-PT"}, + {"pt-CV", "pt-PT"}, + {"pt-GW", "pt-PT"}, + {"pt-MO", "pt-PT"}, + {"pt-MZ", "pt-PT"}, + {"pt-ST", "pt-PT"}, + {"pt-TL", "pt-PT"}, + + {"en-GB-u-co-phonebk-rg-uszzzz", "en-GB"}, + {"en-GB-u-rg-uszzzz", "en-GB"}, + {"en-US-u-va-posix", "en-US"}, + + // Difference between language and regional tag. + {"ca-ES-valencia", "ca-ES"}, + {"ca-ES-valencia-u-rg-ptzzzz", "ca-ES"}, // t.full != nil + {"en-US-u-va-variant", "en-US"}, + {"en-u-va-variant", "en"}, // t.full != nil + {"en-u-rg-gbzzzz", "en"}, + {"en-US-u-rg-gbzzzz", "en-US"}, + {"nl-US-u-rg-gbzzzz", "nl-US"}, // t.full != nil + } + for _, tt := range tests { + tag := mustParse(tt.in) + if p := mustParse(tt.out); p != tag.Parent() { + t.Errorf("%s: was %v; want %v", tt.in, tag.Parent(), p) + } + } +} diff --git a/vendor/golang.org/x/text/internal/language/compact/parents.go b/vendor/golang.org/x/text/internal/language/compact/parents.go new file mode 100644 index 0000000..8d81072 --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/compact/parents.go @@ -0,0 +1,120 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package compact + +// parents maps a compact index of a tag to the compact index of the parent of +// this tag. +var parents = []ID{ // 775 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0001, 0x0001, 0x0000, 0x0004, 0x0000, 0x0006, + 0x0000, 0x0008, 0x0000, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x0000, + 0x0000, 0x0028, 0x0000, 0x002a, 0x0000, 0x002c, 0x0000, 0x0000, + 0x002f, 0x002e, 0x002e, 0x0000, 0x0033, 0x0000, 0x0035, 0x0000, + 0x0037, 0x0000, 0x0039, 0x0000, 0x003b, 0x0000, 0x0000, 0x003e, + // Entry 40 - 7F + 0x0000, 0x0040, 0x0040, 0x0000, 0x0043, 0x0043, 0x0000, 0x0046, + 0x0000, 0x0048, 0x0000, 0x0000, 0x004b, 0x004a, 0x004a, 0x0000, + 0x004f, 0x004f, 0x004f, 0x004f, 0x0000, 0x0054, 0x0054, 0x0000, + 0x0057, 0x0000, 0x0059, 0x0000, 0x005b, 0x0000, 0x005d, 0x005d, + 0x0000, 0x0060, 0x0000, 0x0062, 0x0000, 0x0064, 0x0000, 0x0066, + 0x0066, 0x0000, 0x0069, 0x0000, 0x006b, 0x006b, 0x006b, 0x006b, + 0x006b, 0x006b, 0x006b, 0x0000, 0x0073, 0x0000, 0x0075, 0x0000, + 0x0077, 0x0000, 0x0000, 0x007a, 0x0000, 0x007c, 0x0000, 0x007e, + // Entry 80 - BF + 0x0000, 0x0080, 0x0080, 0x0000, 0x0083, 0x0083, 0x0000, 0x0086, + 0x0087, 0x0087, 0x0087, 0x0086, 0x0088, 0x0087, 0x0087, 0x0087, + 0x0086, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0088, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0088, 0x0087, 0x0088, 0x0087, + 0x0087, 0x0088, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + 0x0087, 0x0087, 0x0087, 0x0086, 0x0087, 0x0087, 0x0087, 0x0087, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0086, 0x0087, 0x0086, + // Entry C0 - FF + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + 0x0088, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + 0x0086, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0088, 0x0087, + 0x0087, 0x0088, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0086, 0x0086, 0x0087, + 0x0087, 0x0086, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0000, + 0x00ef, 0x0000, 0x00f1, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f2, + 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f1, 0x00f2, 0x00f1, 0x00f1, + // Entry 100 - 13F + 0x00f2, 0x00f2, 0x00f1, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f1, + 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x0000, 0x010e, + 0x0000, 0x0110, 0x0000, 0x0112, 0x0000, 0x0114, 0x0114, 0x0000, + 0x0117, 0x0117, 0x0117, 0x0117, 0x0000, 0x011c, 0x0000, 0x011e, + 0x0000, 0x0120, 0x0120, 0x0000, 0x0123, 0x0123, 0x0123, 0x0123, + 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, + 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, + 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, + // Entry 140 - 17F + 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, + 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, + 0x0123, 0x0123, 0x0000, 0x0152, 0x0000, 0x0154, 0x0000, 0x0156, + 0x0000, 0x0158, 0x0000, 0x015a, 0x0000, 0x015c, 0x015c, 0x015c, + 0x0000, 0x0160, 0x0000, 0x0000, 0x0163, 0x0000, 0x0165, 0x0000, + 0x0167, 0x0167, 0x0167, 0x0000, 0x016b, 0x0000, 0x016d, 0x0000, + 0x016f, 0x0000, 0x0171, 0x0171, 0x0000, 0x0174, 0x0000, 0x0176, + 0x0000, 0x0178, 0x0000, 0x017a, 0x0000, 0x017c, 0x0000, 0x017e, + // Entry 180 - 1BF + 0x0000, 0x0000, 0x0000, 0x0182, 0x0000, 0x0184, 0x0184, 0x0184, + 0x0184, 0x0000, 0x0000, 0x0000, 0x018b, 0x0000, 0x0000, 0x018e, + 0x0000, 0x0000, 0x0191, 0x0000, 0x0000, 0x0000, 0x0195, 0x0000, + 0x0197, 0x0000, 0x0000, 0x019a, 0x0000, 0x0000, 0x019d, 0x0000, + 0x019f, 0x0000, 0x01a1, 0x0000, 0x01a3, 0x0000, 0x01a5, 0x0000, + 0x01a7, 0x0000, 0x01a9, 0x0000, 0x01ab, 0x0000, 0x01ad, 0x0000, + 0x01af, 0x0000, 0x01b1, 0x01b1, 0x0000, 0x01b4, 0x0000, 0x01b6, + 0x0000, 0x01b8, 0x0000, 0x01ba, 0x0000, 0x01bc, 0x0000, 0x0000, + // Entry 1C0 - 1FF + 0x01bf, 0x0000, 0x01c1, 0x0000, 0x01c3, 0x0000, 0x01c5, 0x0000, + 0x01c7, 0x0000, 0x01c9, 0x0000, 0x01cb, 0x01cb, 0x01cb, 0x01cb, + 0x0000, 0x01d0, 0x0000, 0x01d2, 0x01d2, 0x0000, 0x01d5, 0x0000, + 0x01d7, 0x0000, 0x01d9, 0x0000, 0x01db, 0x0000, 0x01dd, 0x0000, + 0x01df, 0x01df, 0x0000, 0x01e2, 0x0000, 0x01e4, 0x0000, 0x01e6, + 0x0000, 0x01e8, 0x0000, 0x01ea, 0x0000, 0x01ec, 0x0000, 0x01ee, + 0x0000, 0x01f0, 0x0000, 0x0000, 0x01f3, 0x0000, 0x01f5, 0x01f5, + 0x01f5, 0x0000, 0x01f9, 0x0000, 0x01fb, 0x0000, 0x01fd, 0x0000, + // Entry 200 - 23F + 0x01ff, 0x0000, 0x0000, 0x0202, 0x0000, 0x0204, 0x0204, 0x0000, + 0x0207, 0x0000, 0x0209, 0x0209, 0x0000, 0x020c, 0x020c, 0x0000, + 0x020f, 0x020f, 0x020f, 0x020f, 0x020f, 0x020f, 0x020f, 0x0000, + 0x0217, 0x0000, 0x0219, 0x0000, 0x021b, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0221, 0x0000, 0x0000, 0x0224, 0x0000, 0x0226, + 0x0226, 0x0000, 0x0229, 0x0000, 0x022b, 0x022b, 0x0000, 0x0000, + 0x022f, 0x022e, 0x022e, 0x0000, 0x0000, 0x0234, 0x0000, 0x0236, + 0x0000, 0x0238, 0x0000, 0x0244, 0x023a, 0x0244, 0x0244, 0x0244, + // Entry 240 - 27F + 0x0244, 0x0244, 0x0244, 0x0244, 0x023a, 0x0244, 0x0244, 0x0000, + 0x0247, 0x0247, 0x0247, 0x0000, 0x024b, 0x0000, 0x024d, 0x0000, + 0x024f, 0x024f, 0x0000, 0x0252, 0x0000, 0x0254, 0x0254, 0x0254, + 0x0254, 0x0254, 0x0254, 0x0000, 0x025b, 0x0000, 0x025d, 0x0000, + 0x025f, 0x0000, 0x0261, 0x0000, 0x0263, 0x0000, 0x0265, 0x0000, + 0x0000, 0x0268, 0x0268, 0x0268, 0x0000, 0x026c, 0x0000, 0x026e, + 0x0000, 0x0270, 0x0000, 0x0000, 0x0000, 0x0274, 0x0273, 0x0273, + 0x0000, 0x0278, 0x0000, 0x027a, 0x0000, 0x027c, 0x0000, 0x0000, + // Entry 280 - 2BF + 0x0000, 0x0000, 0x0281, 0x0000, 0x0000, 0x0284, 0x0000, 0x0286, + 0x0286, 0x0286, 0x0286, 0x0000, 0x028b, 0x028b, 0x028b, 0x0000, + 0x028f, 0x028f, 0x028f, 0x028f, 0x028f, 0x0000, 0x0295, 0x0295, + 0x0295, 0x0295, 0x0000, 0x0000, 0x0000, 0x0000, 0x029d, 0x029d, + 0x029d, 0x0000, 0x02a1, 0x02a1, 0x02a1, 0x02a1, 0x0000, 0x0000, + 0x02a7, 0x02a7, 0x02a7, 0x02a7, 0x0000, 0x02ac, 0x0000, 0x02ae, + 0x02ae, 0x0000, 0x02b1, 0x0000, 0x02b3, 0x0000, 0x02b5, 0x02b5, + 0x0000, 0x0000, 0x02b9, 0x0000, 0x0000, 0x0000, 0x02bd, 0x0000, + // Entry 2C0 - 2FF + 0x02bf, 0x02bf, 0x0000, 0x0000, 0x02c3, 0x0000, 0x02c5, 0x0000, + 0x02c7, 0x0000, 0x02c9, 0x0000, 0x02cb, 0x0000, 0x02cd, 0x02cd, + 0x0000, 0x0000, 0x02d1, 0x0000, 0x02d3, 0x02d0, 0x02d0, 0x0000, + 0x0000, 0x02d8, 0x02d7, 0x02d7, 0x0000, 0x0000, 0x02dd, 0x0000, + 0x02df, 0x0000, 0x02e1, 0x0000, 0x0000, 0x02e4, 0x0000, 0x02e6, + 0x0000, 0x0000, 0x02e9, 0x0000, 0x02eb, 0x0000, 0x02ed, 0x0000, + 0x02ef, 0x02ef, 0x0000, 0x0000, 0x02f3, 0x02f2, 0x02f2, 0x0000, + 0x02f7, 0x0000, 0x02f9, 0x02f9, 0x02f9, 0x02f9, 0x02f9, 0x0000, + // Entry 300 - 33F + 0x02ff, 0x0300, 0x02ff, 0x0000, 0x0303, 0x0051, 0x00e6, +} // Size: 1574 bytes + +// Total table size 1574 bytes (1KiB); checksum: 895AAF0B diff --git a/vendor/golang.org/x/text/internal/language/compact/parse_test.go b/vendor/golang.org/x/text/internal/language/compact/parse_test.go new file mode 100644 index 0000000..abe3a58 --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/compact/parse_test.go @@ -0,0 +1,196 @@ +// Copyright 2013 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. + +package compact + +import ( + "strings" + "testing" + + "golang.org/x/text/internal/language" +) + +var errSyntax = language.ErrSyntax + +type parseTest struct { + i int // the index of this test + in string + lang, script, region string + variants, ext string + extList []string // only used when more than one extension is present + invalid bool + rewrite bool // special rewrite not handled by parseTag + changed bool // string needed to be reformatted +} + +func parseTests() []parseTest { + tests := []parseTest{ + {in: "root", lang: "und"}, + {in: "und", lang: "und"}, + {in: "en", lang: "en"}, + + {in: "en-US-u-va-posix", lang: "en", region: "US", ext: "u-va-posix"}, + {in: "ca-ES-valencia", lang: "ca", region: "ES", variants: "valencia"}, + {in: "en-US-u-rg-gbzzzz", lang: "en", region: "US", ext: "u-rg-gbzzzz"}, + + {in: "xy", lang: "und", invalid: true}, + {in: "en-ZY", lang: "en", invalid: true}, + {in: "gsw", lang: "gsw"}, + {in: "sr_Latn", lang: "sr", script: "Latn"}, + {in: "af-Arab", lang: "af", script: "Arab"}, + {in: "nl-BE", lang: "nl", region: "BE"}, + {in: "es-419", lang: "es", region: "419"}, + {in: "und-001", lang: "und", region: "001"}, + {in: "de-latn-be", lang: "de", script: "Latn", region: "BE"}, + // Variants + {in: "de-1901", lang: "de", variants: "1901"}, + // Accept with unsuppressed script. + {in: "de-Latn-1901", lang: "de", script: "Latn", variants: "1901"}, + // Specialized. + {in: "sl-rozaj", lang: "sl", variants: "rozaj"}, + {in: "sl-rozaj-lipaw", lang: "sl", variants: "rozaj-lipaw"}, + {in: "sl-rozaj-biske", lang: "sl", variants: "rozaj-biske"}, + {in: "sl-rozaj-biske-1994", lang: "sl", variants: "rozaj-biske-1994"}, + {in: "sl-rozaj-1994", lang: "sl", variants: "rozaj-1994"}, + // Maximum number of variants while adhering to prefix rules. + {in: "sl-rozaj-biske-1994-alalc97-fonipa-fonupa-fonxsamp", lang: "sl", variants: "rozaj-biske-1994-alalc97-fonipa-fonupa-fonxsamp"}, + + // Sorting. + {in: "sl-1994-biske-rozaj", lang: "sl", variants: "rozaj-biske-1994", changed: true}, + {in: "sl-rozaj-biske-1994-alalc97-fonupa-fonipa-fonxsamp", lang: "sl", variants: "rozaj-biske-1994-alalc97-fonipa-fonupa-fonxsamp", changed: true}, + {in: "nl-fonxsamp-alalc97-fonipa-fonupa", lang: "nl", variants: "alalc97-fonipa-fonupa-fonxsamp", changed: true}, + + // Duplicates variants are removed, but not an error. + {in: "nl-fonupa-fonupa", lang: "nl", variants: "fonupa"}, + + // Variants that do not have correct prefixes. We still accept these. + {in: "de-Cyrl-1901", lang: "de", script: "Cyrl", variants: "1901"}, + {in: "sl-rozaj-lipaw-1994", lang: "sl", variants: "rozaj-lipaw-1994"}, + {in: "sl-1994-biske-rozaj-1994-biske-rozaj", lang: "sl", variants: "rozaj-biske-1994", changed: true}, + {in: "de-Cyrl-1901", lang: "de", script: "Cyrl", variants: "1901"}, + + // Invalid variant. + {in: "de-1902", lang: "de", variants: "", invalid: true}, + + {in: "EN_CYRL", lang: "en", script: "Cyrl"}, + // private use and extensions + {in: "x-a-b-c-d", ext: "x-a-b-c-d"}, + {in: "x_A.-B-C_D", ext: "x-b-c-d", invalid: true, changed: true}, + {in: "x-aa-bbbb-cccccccc-d", ext: "x-aa-bbbb-cccccccc-d"}, + {in: "en-c_cc-b-bbb-a-aaa", lang: "en", changed: true, extList: []string{"a-aaa", "b-bbb", "c-cc"}}, + {in: "en-x_cc-b-bbb-a-aaa", lang: "en", ext: "x-cc-b-bbb-a-aaa", changed: true}, + {in: "en-c_cc-b-bbb-a-aaa-x-x", lang: "en", changed: true, extList: []string{"a-aaa", "b-bbb", "c-cc", "x-x"}}, + {in: "en-v-c", lang: "en", ext: "", invalid: true}, + {in: "en-v-abcdefghi", lang: "en", ext: "", invalid: true}, + {in: "en-v-abc-x", lang: "en", ext: "v-abc", invalid: true}, + {in: "en-v-abc-x-", lang: "en", ext: "v-abc", invalid: true}, + {in: "en-v-abc-w-x-xx", lang: "en", extList: []string{"v-abc", "x-xx"}, invalid: true, changed: true}, + {in: "en-v-abc-w-y-yx", lang: "en", extList: []string{"v-abc", "y-yx"}, invalid: true, changed: true}, + {in: "en-v-c-abc", lang: "en", ext: "c-abc", invalid: true, changed: true}, + {in: "en-v-w-abc", lang: "en", ext: "w-abc", invalid: true, changed: true}, + {in: "en-v-x-abc", lang: "en", ext: "x-abc", invalid: true, changed: true}, + {in: "en-v-x-a", lang: "en", ext: "x-a", invalid: true, changed: true}, + {in: "en-9-aa-0-aa-z-bb-x-a", lang: "en", extList: []string{"0-aa", "9-aa", "z-bb", "x-a"}, changed: true}, + {in: "en-u-c", lang: "en", ext: "", invalid: true}, + {in: "en-u-co-phonebk", lang: "en", ext: "u-co-phonebk"}, + {in: "en-u-co-phonebk-ca", lang: "en", ext: "u-co-phonebk", invalid: true}, + {in: "en-u-nu-arabic-co-phonebk-ca", lang: "en", ext: "u-co-phonebk-nu-arabic", invalid: true, changed: true}, + {in: "en-u-nu-arabic-co-phonebk-ca-x", lang: "en", ext: "u-co-phonebk-nu-arabic", invalid: true, changed: true}, + {in: "en-u-nu-arabic-co-phonebk-ca-s", lang: "en", ext: "u-co-phonebk-nu-arabic", invalid: true, changed: true}, + {in: "en-u-nu-arabic-co-phonebk-ca-a12345678", lang: "en", ext: "u-co-phonebk-nu-arabic", invalid: true, changed: true}, + {in: "en-u-co-phonebook", lang: "en", ext: "", invalid: true}, + {in: "en-u-co-phonebook-cu-xau", lang: "en", ext: "u-cu-xau", invalid: true, changed: true}, + {in: "en-Cyrl-u-co-phonebk", lang: "en", script: "Cyrl", ext: "u-co-phonebk"}, + {in: "en-US-u-co-phonebk", lang: "en", region: "US", ext: "u-co-phonebk"}, + {in: "en-US-u-co-phonebk-cu-xau", lang: "en", region: "US", ext: "u-co-phonebk-cu-xau"}, + {in: "en-scotland-u-co-phonebk", lang: "en", variants: "scotland", ext: "u-co-phonebk"}, + {in: "en-u-cu-xua-co-phonebk", lang: "en", ext: "u-co-phonebk-cu-xua", changed: true}, + {in: "en-u-def-abc-cu-xua-co-phonebk", lang: "en", ext: "u-abc-def-co-phonebk-cu-xua", changed: true}, + {in: "en-u-def-abc", lang: "en", ext: "u-abc-def", changed: true}, + {in: "en-u-cu-xua-co-phonebk-a-cd", lang: "en", extList: []string{"a-cd", "u-co-phonebk-cu-xua"}, changed: true}, + // Invalid "u" extension. Drop invalid parts. + {in: "en-u-cu-co-phonebk", lang: "en", extList: []string{"u-co-phonebk"}, invalid: true, changed: true}, + {in: "en-u-cu-xau-co", lang: "en", extList: []string{"u-cu-xau"}, invalid: true}, + // We allow duplicate keys as the LDML spec does not explicitly prohibit it. + // TODO: Consider eliminating duplicates and returning an error. + {in: "en-u-cu-xau-co-phonebk-cu-xau", lang: "en", ext: "u-co-phonebk-cu-xau", changed: true}, + {in: "en-t-en-Cyrl-NL-fonipa", lang: "en", ext: "t-en-cyrl-nl-fonipa", changed: true}, + {in: "en-t-en-Cyrl-NL-fonipa-t0-abc-def", lang: "en", ext: "t-en-cyrl-nl-fonipa-t0-abc-def", changed: true}, + {in: "en-t-t0-abcd", lang: "en", ext: "t-t0-abcd"}, + // Not necessary to have changed here. + {in: "en-t-nl-abcd", lang: "en", ext: "t-nl", invalid: true}, + {in: "en-t-nl-latn", lang: "en", ext: "t-nl-latn"}, + {in: "en-t-t0-abcd-x-a", lang: "en", extList: []string{"t-t0-abcd", "x-a"}}, + // invalid + {in: "", lang: "und", invalid: true}, + {in: "-", lang: "und", invalid: true}, + {in: "x", lang: "und", invalid: true}, + {in: "x-", lang: "und", invalid: true}, + {in: "x--", lang: "und", invalid: true}, + {in: "a-a-b-c-d", lang: "und", invalid: true}, + {in: "en-", lang: "en", invalid: true}, + {in: "enne-", lang: "und", invalid: true}, + {in: "en.", lang: "und", invalid: true}, + {in: "en.-latn", lang: "und", invalid: true}, + {in: "en.-en", lang: "en", invalid: true}, + {in: "x-a-tooManyChars-c-d", ext: "x-a-c-d", invalid: true, changed: true}, + {in: "a-tooManyChars-c-d", lang: "und", invalid: true}, + // TODO: check key-value validity + // { in: "en-u-cu-xd", lang: "en", ext: "u-cu-xd", invalid: true }, + {in: "en-t-abcd", lang: "en", invalid: true}, + {in: "en-Latn-US-en", lang: "en", script: "Latn", region: "US", invalid: true}, + // rewrites (more tests in TestGrandfathered) + {in: "zh-min-nan", lang: "nan"}, + {in: "zh-yue", lang: "yue"}, + {in: "zh-xiang", lang: "hsn", rewrite: true}, + {in: "zh-guoyu", lang: "cmn", rewrite: true}, + {in: "iw", lang: "iw"}, + {in: "sgn-BE-FR", lang: "sfb", rewrite: true}, + {in: "i-klingon", lang: "tlh", rewrite: true}, + } + for i, tt := range tests { + tests[i].i = i + if tt.extList != nil { + tests[i].ext = strings.Join(tt.extList, "-") + } + if tt.ext != "" && tt.extList == nil { + tests[i].extList = []string{tt.ext} + } + } + return tests +} + +// partChecks runs checks for each part by calling the function returned by f. +func partChecks(t *testing.T, f func(*parseTest) (Tag, bool)) { + for i, tt := range parseTests() { + tag, skip := f(&tt) + if skip { + continue + } + if l, _ := language.ParseBase(tt.lang); l != tag.Tag().LangID { + t.Errorf("%d: lang was %q; want %q", i, tag.Tag().LangID, l) + } + if sc, _ := language.ParseScript(tt.script); sc != tag.Tag().ScriptID { + t.Errorf("%d: script was %q; want %q", i, tag.Tag().ScriptID, sc) + } + if r, _ := language.ParseRegion(tt.region); r != tag.Tag().RegionID { + t.Errorf("%d: region was %q; want %q", i, tag.Tag().RegionID, r) + } + v := tag.Tag().Variants() + if v != "" { + v = v[1:] + } + if v != tt.variants { + t.Errorf("%d: variants was %q; want %q", i, v, tt.variants) + } + if e := strings.Join(tag.Tag().Extensions(), "-"); e != tt.ext { + t.Errorf("%d: extensions were %q; want %q", i, e, tt.ext) + } + } +} + +func mk(s string) Tag { + tag, _ := language.Parse(s) + return Make(tag) +} diff --git a/vendor/golang.org/x/text/internal/language/compact/tables.go b/vendor/golang.org/x/text/internal/language/compact/tables.go new file mode 100644 index 0000000..554ca35 --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/compact/tables.go @@ -0,0 +1,1015 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package compact + +import "golang.org/x/text/internal/language" + +// CLDRVersion is the CLDR version from which the tables in this package are derived. +const CLDRVersion = "32" + +// NumCompactTags is the number of common tags. The maximum tag is +// NumCompactTags-1. +const NumCompactTags = 775 +const ( + undIndex ID = 0 + afIndex ID = 1 + afNAIndex ID = 2 + afZAIndex ID = 3 + agqIndex ID = 4 + agqCMIndex ID = 5 + akIndex ID = 6 + akGHIndex ID = 7 + amIndex ID = 8 + amETIndex ID = 9 + arIndex ID = 10 + ar001Index ID = 11 + arAEIndex ID = 12 + arBHIndex ID = 13 + arDJIndex ID = 14 + arDZIndex ID = 15 + arEGIndex ID = 16 + arEHIndex ID = 17 + arERIndex ID = 18 + arILIndex ID = 19 + arIQIndex ID = 20 + arJOIndex ID = 21 + arKMIndex ID = 22 + arKWIndex ID = 23 + arLBIndex ID = 24 + arLYIndex ID = 25 + arMAIndex ID = 26 + arMRIndex ID = 27 + arOMIndex ID = 28 + arPSIndex ID = 29 + arQAIndex ID = 30 + arSAIndex ID = 31 + arSDIndex ID = 32 + arSOIndex ID = 33 + arSSIndex ID = 34 + arSYIndex ID = 35 + arTDIndex ID = 36 + arTNIndex ID = 37 + arYEIndex ID = 38 + arsIndex ID = 39 + asIndex ID = 40 + asINIndex ID = 41 + asaIndex ID = 42 + asaTZIndex ID = 43 + astIndex ID = 44 + astESIndex ID = 45 + azIndex ID = 46 + azCyrlIndex ID = 47 + azCyrlAZIndex ID = 48 + azLatnIndex ID = 49 + azLatnAZIndex ID = 50 + basIndex ID = 51 + basCMIndex ID = 52 + beIndex ID = 53 + beBYIndex ID = 54 + bemIndex ID = 55 + bemZMIndex ID = 56 + bezIndex ID = 57 + bezTZIndex ID = 58 + bgIndex ID = 59 + bgBGIndex ID = 60 + bhIndex ID = 61 + bmIndex ID = 62 + bmMLIndex ID = 63 + bnIndex ID = 64 + bnBDIndex ID = 65 + bnINIndex ID = 66 + boIndex ID = 67 + boCNIndex ID = 68 + boINIndex ID = 69 + brIndex ID = 70 + brFRIndex ID = 71 + brxIndex ID = 72 + brxINIndex ID = 73 + bsIndex ID = 74 + bsCyrlIndex ID = 75 + bsCyrlBAIndex ID = 76 + bsLatnIndex ID = 77 + bsLatnBAIndex ID = 78 + caIndex ID = 79 + caADIndex ID = 80 + caESIndex ID = 81 + caFRIndex ID = 82 + caITIndex ID = 83 + ccpIndex ID = 84 + ccpBDIndex ID = 85 + ccpINIndex ID = 86 + ceIndex ID = 87 + ceRUIndex ID = 88 + cggIndex ID = 89 + cggUGIndex ID = 90 + chrIndex ID = 91 + chrUSIndex ID = 92 + ckbIndex ID = 93 + ckbIQIndex ID = 94 + ckbIRIndex ID = 95 + csIndex ID = 96 + csCZIndex ID = 97 + cuIndex ID = 98 + cuRUIndex ID = 99 + cyIndex ID = 100 + cyGBIndex ID = 101 + daIndex ID = 102 + daDKIndex ID = 103 + daGLIndex ID = 104 + davIndex ID = 105 + davKEIndex ID = 106 + deIndex ID = 107 + deATIndex ID = 108 + deBEIndex ID = 109 + deCHIndex ID = 110 + deDEIndex ID = 111 + deITIndex ID = 112 + deLIIndex ID = 113 + deLUIndex ID = 114 + djeIndex ID = 115 + djeNEIndex ID = 116 + dsbIndex ID = 117 + dsbDEIndex ID = 118 + duaIndex ID = 119 + duaCMIndex ID = 120 + dvIndex ID = 121 + dyoIndex ID = 122 + dyoSNIndex ID = 123 + dzIndex ID = 124 + dzBTIndex ID = 125 + ebuIndex ID = 126 + ebuKEIndex ID = 127 + eeIndex ID = 128 + eeGHIndex ID = 129 + eeTGIndex ID = 130 + elIndex ID = 131 + elCYIndex ID = 132 + elGRIndex ID = 133 + enIndex ID = 134 + en001Index ID = 135 + en150Index ID = 136 + enAGIndex ID = 137 + enAIIndex ID = 138 + enASIndex ID = 139 + enATIndex ID = 140 + enAUIndex ID = 141 + enBBIndex ID = 142 + enBEIndex ID = 143 + enBIIndex ID = 144 + enBMIndex ID = 145 + enBSIndex ID = 146 + enBWIndex ID = 147 + enBZIndex ID = 148 + enCAIndex ID = 149 + enCCIndex ID = 150 + enCHIndex ID = 151 + enCKIndex ID = 152 + enCMIndex ID = 153 + enCXIndex ID = 154 + enCYIndex ID = 155 + enDEIndex ID = 156 + enDGIndex ID = 157 + enDKIndex ID = 158 + enDMIndex ID = 159 + enERIndex ID = 160 + enFIIndex ID = 161 + enFJIndex ID = 162 + enFKIndex ID = 163 + enFMIndex ID = 164 + enGBIndex ID = 165 + enGDIndex ID = 166 + enGGIndex ID = 167 + enGHIndex ID = 168 + enGIIndex ID = 169 + enGMIndex ID = 170 + enGUIndex ID = 171 + enGYIndex ID = 172 + enHKIndex ID = 173 + enIEIndex ID = 174 + enILIndex ID = 175 + enIMIndex ID = 176 + enINIndex ID = 177 + enIOIndex ID = 178 + enJEIndex ID = 179 + enJMIndex ID = 180 + enKEIndex ID = 181 + enKIIndex ID = 182 + enKNIndex ID = 183 + enKYIndex ID = 184 + enLCIndex ID = 185 + enLRIndex ID = 186 + enLSIndex ID = 187 + enMGIndex ID = 188 + enMHIndex ID = 189 + enMOIndex ID = 190 + enMPIndex ID = 191 + enMSIndex ID = 192 + enMTIndex ID = 193 + enMUIndex ID = 194 + enMWIndex ID = 195 + enMYIndex ID = 196 + enNAIndex ID = 197 + enNFIndex ID = 198 + enNGIndex ID = 199 + enNLIndex ID = 200 + enNRIndex ID = 201 + enNUIndex ID = 202 + enNZIndex ID = 203 + enPGIndex ID = 204 + enPHIndex ID = 205 + enPKIndex ID = 206 + enPNIndex ID = 207 + enPRIndex ID = 208 + enPWIndex ID = 209 + enRWIndex ID = 210 + enSBIndex ID = 211 + enSCIndex ID = 212 + enSDIndex ID = 213 + enSEIndex ID = 214 + enSGIndex ID = 215 + enSHIndex ID = 216 + enSIIndex ID = 217 + enSLIndex ID = 218 + enSSIndex ID = 219 + enSXIndex ID = 220 + enSZIndex ID = 221 + enTCIndex ID = 222 + enTKIndex ID = 223 + enTOIndex ID = 224 + enTTIndex ID = 225 + enTVIndex ID = 226 + enTZIndex ID = 227 + enUGIndex ID = 228 + enUMIndex ID = 229 + enUSIndex ID = 230 + enVCIndex ID = 231 + enVGIndex ID = 232 + enVIIndex ID = 233 + enVUIndex ID = 234 + enWSIndex ID = 235 + enZAIndex ID = 236 + enZMIndex ID = 237 + enZWIndex ID = 238 + eoIndex ID = 239 + eo001Index ID = 240 + esIndex ID = 241 + es419Index ID = 242 + esARIndex ID = 243 + esBOIndex ID = 244 + esBRIndex ID = 245 + esBZIndex ID = 246 + esCLIndex ID = 247 + esCOIndex ID = 248 + esCRIndex ID = 249 + esCUIndex ID = 250 + esDOIndex ID = 251 + esEAIndex ID = 252 + esECIndex ID = 253 + esESIndex ID = 254 + esGQIndex ID = 255 + esGTIndex ID = 256 + esHNIndex ID = 257 + esICIndex ID = 258 + esMXIndex ID = 259 + esNIIndex ID = 260 + esPAIndex ID = 261 + esPEIndex ID = 262 + esPHIndex ID = 263 + esPRIndex ID = 264 + esPYIndex ID = 265 + esSVIndex ID = 266 + esUSIndex ID = 267 + esUYIndex ID = 268 + esVEIndex ID = 269 + etIndex ID = 270 + etEEIndex ID = 271 + euIndex ID = 272 + euESIndex ID = 273 + ewoIndex ID = 274 + ewoCMIndex ID = 275 + faIndex ID = 276 + faAFIndex ID = 277 + faIRIndex ID = 278 + ffIndex ID = 279 + ffCMIndex ID = 280 + ffGNIndex ID = 281 + ffMRIndex ID = 282 + ffSNIndex ID = 283 + fiIndex ID = 284 + fiFIIndex ID = 285 + filIndex ID = 286 + filPHIndex ID = 287 + foIndex ID = 288 + foDKIndex ID = 289 + foFOIndex ID = 290 + frIndex ID = 291 + frBEIndex ID = 292 + frBFIndex ID = 293 + frBIIndex ID = 294 + frBJIndex ID = 295 + frBLIndex ID = 296 + frCAIndex ID = 297 + frCDIndex ID = 298 + frCFIndex ID = 299 + frCGIndex ID = 300 + frCHIndex ID = 301 + frCIIndex ID = 302 + frCMIndex ID = 303 + frDJIndex ID = 304 + frDZIndex ID = 305 + frFRIndex ID = 306 + frGAIndex ID = 307 + frGFIndex ID = 308 + frGNIndex ID = 309 + frGPIndex ID = 310 + frGQIndex ID = 311 + frHTIndex ID = 312 + frKMIndex ID = 313 + frLUIndex ID = 314 + frMAIndex ID = 315 + frMCIndex ID = 316 + frMFIndex ID = 317 + frMGIndex ID = 318 + frMLIndex ID = 319 + frMQIndex ID = 320 + frMRIndex ID = 321 + frMUIndex ID = 322 + frNCIndex ID = 323 + frNEIndex ID = 324 + frPFIndex ID = 325 + frPMIndex ID = 326 + frREIndex ID = 327 + frRWIndex ID = 328 + frSCIndex ID = 329 + frSNIndex ID = 330 + frSYIndex ID = 331 + frTDIndex ID = 332 + frTGIndex ID = 333 + frTNIndex ID = 334 + frVUIndex ID = 335 + frWFIndex ID = 336 + frYTIndex ID = 337 + furIndex ID = 338 + furITIndex ID = 339 + fyIndex ID = 340 + fyNLIndex ID = 341 + gaIndex ID = 342 + gaIEIndex ID = 343 + gdIndex ID = 344 + gdGBIndex ID = 345 + glIndex ID = 346 + glESIndex ID = 347 + gswIndex ID = 348 + gswCHIndex ID = 349 + gswFRIndex ID = 350 + gswLIIndex ID = 351 + guIndex ID = 352 + guINIndex ID = 353 + guwIndex ID = 354 + guzIndex ID = 355 + guzKEIndex ID = 356 + gvIndex ID = 357 + gvIMIndex ID = 358 + haIndex ID = 359 + haGHIndex ID = 360 + haNEIndex ID = 361 + haNGIndex ID = 362 + hawIndex ID = 363 + hawUSIndex ID = 364 + heIndex ID = 365 + heILIndex ID = 366 + hiIndex ID = 367 + hiINIndex ID = 368 + hrIndex ID = 369 + hrBAIndex ID = 370 + hrHRIndex ID = 371 + hsbIndex ID = 372 + hsbDEIndex ID = 373 + huIndex ID = 374 + huHUIndex ID = 375 + hyIndex ID = 376 + hyAMIndex ID = 377 + idIndex ID = 378 + idIDIndex ID = 379 + igIndex ID = 380 + igNGIndex ID = 381 + iiIndex ID = 382 + iiCNIndex ID = 383 + inIndex ID = 384 + ioIndex ID = 385 + isIndex ID = 386 + isISIndex ID = 387 + itIndex ID = 388 + itCHIndex ID = 389 + itITIndex ID = 390 + itSMIndex ID = 391 + itVAIndex ID = 392 + iuIndex ID = 393 + iwIndex ID = 394 + jaIndex ID = 395 + jaJPIndex ID = 396 + jboIndex ID = 397 + jgoIndex ID = 398 + jgoCMIndex ID = 399 + jiIndex ID = 400 + jmcIndex ID = 401 + jmcTZIndex ID = 402 + jvIndex ID = 403 + jwIndex ID = 404 + kaIndex ID = 405 + kaGEIndex ID = 406 + kabIndex ID = 407 + kabDZIndex ID = 408 + kajIndex ID = 409 + kamIndex ID = 410 + kamKEIndex ID = 411 + kcgIndex ID = 412 + kdeIndex ID = 413 + kdeTZIndex ID = 414 + keaIndex ID = 415 + keaCVIndex ID = 416 + khqIndex ID = 417 + khqMLIndex ID = 418 + kiIndex ID = 419 + kiKEIndex ID = 420 + kkIndex ID = 421 + kkKZIndex ID = 422 + kkjIndex ID = 423 + kkjCMIndex ID = 424 + klIndex ID = 425 + klGLIndex ID = 426 + klnIndex ID = 427 + klnKEIndex ID = 428 + kmIndex ID = 429 + kmKHIndex ID = 430 + knIndex ID = 431 + knINIndex ID = 432 + koIndex ID = 433 + koKPIndex ID = 434 + koKRIndex ID = 435 + kokIndex ID = 436 + kokINIndex ID = 437 + ksIndex ID = 438 + ksINIndex ID = 439 + ksbIndex ID = 440 + ksbTZIndex ID = 441 + ksfIndex ID = 442 + ksfCMIndex ID = 443 + kshIndex ID = 444 + kshDEIndex ID = 445 + kuIndex ID = 446 + kwIndex ID = 447 + kwGBIndex ID = 448 + kyIndex ID = 449 + kyKGIndex ID = 450 + lagIndex ID = 451 + lagTZIndex ID = 452 + lbIndex ID = 453 + lbLUIndex ID = 454 + lgIndex ID = 455 + lgUGIndex ID = 456 + lktIndex ID = 457 + lktUSIndex ID = 458 + lnIndex ID = 459 + lnAOIndex ID = 460 + lnCDIndex ID = 461 + lnCFIndex ID = 462 + lnCGIndex ID = 463 + loIndex ID = 464 + loLAIndex ID = 465 + lrcIndex ID = 466 + lrcIQIndex ID = 467 + lrcIRIndex ID = 468 + ltIndex ID = 469 + ltLTIndex ID = 470 + luIndex ID = 471 + luCDIndex ID = 472 + luoIndex ID = 473 + luoKEIndex ID = 474 + luyIndex ID = 475 + luyKEIndex ID = 476 + lvIndex ID = 477 + lvLVIndex ID = 478 + masIndex ID = 479 + masKEIndex ID = 480 + masTZIndex ID = 481 + merIndex ID = 482 + merKEIndex ID = 483 + mfeIndex ID = 484 + mfeMUIndex ID = 485 + mgIndex ID = 486 + mgMGIndex ID = 487 + mghIndex ID = 488 + mghMZIndex ID = 489 + mgoIndex ID = 490 + mgoCMIndex ID = 491 + mkIndex ID = 492 + mkMKIndex ID = 493 + mlIndex ID = 494 + mlINIndex ID = 495 + mnIndex ID = 496 + mnMNIndex ID = 497 + moIndex ID = 498 + mrIndex ID = 499 + mrINIndex ID = 500 + msIndex ID = 501 + msBNIndex ID = 502 + msMYIndex ID = 503 + msSGIndex ID = 504 + mtIndex ID = 505 + mtMTIndex ID = 506 + muaIndex ID = 507 + muaCMIndex ID = 508 + myIndex ID = 509 + myMMIndex ID = 510 + mznIndex ID = 511 + mznIRIndex ID = 512 + nahIndex ID = 513 + naqIndex ID = 514 + naqNAIndex ID = 515 + nbIndex ID = 516 + nbNOIndex ID = 517 + nbSJIndex ID = 518 + ndIndex ID = 519 + ndZWIndex ID = 520 + ndsIndex ID = 521 + ndsDEIndex ID = 522 + ndsNLIndex ID = 523 + neIndex ID = 524 + neINIndex ID = 525 + neNPIndex ID = 526 + nlIndex ID = 527 + nlAWIndex ID = 528 + nlBEIndex ID = 529 + nlBQIndex ID = 530 + nlCWIndex ID = 531 + nlNLIndex ID = 532 + nlSRIndex ID = 533 + nlSXIndex ID = 534 + nmgIndex ID = 535 + nmgCMIndex ID = 536 + nnIndex ID = 537 + nnNOIndex ID = 538 + nnhIndex ID = 539 + nnhCMIndex ID = 540 + noIndex ID = 541 + nqoIndex ID = 542 + nrIndex ID = 543 + nsoIndex ID = 544 + nusIndex ID = 545 + nusSSIndex ID = 546 + nyIndex ID = 547 + nynIndex ID = 548 + nynUGIndex ID = 549 + omIndex ID = 550 + omETIndex ID = 551 + omKEIndex ID = 552 + orIndex ID = 553 + orINIndex ID = 554 + osIndex ID = 555 + osGEIndex ID = 556 + osRUIndex ID = 557 + paIndex ID = 558 + paArabIndex ID = 559 + paArabPKIndex ID = 560 + paGuruIndex ID = 561 + paGuruINIndex ID = 562 + papIndex ID = 563 + plIndex ID = 564 + plPLIndex ID = 565 + prgIndex ID = 566 + prg001Index ID = 567 + psIndex ID = 568 + psAFIndex ID = 569 + ptIndex ID = 570 + ptAOIndex ID = 571 + ptBRIndex ID = 572 + ptCHIndex ID = 573 + ptCVIndex ID = 574 + ptGQIndex ID = 575 + ptGWIndex ID = 576 + ptLUIndex ID = 577 + ptMOIndex ID = 578 + ptMZIndex ID = 579 + ptPTIndex ID = 580 + ptSTIndex ID = 581 + ptTLIndex ID = 582 + quIndex ID = 583 + quBOIndex ID = 584 + quECIndex ID = 585 + quPEIndex ID = 586 + rmIndex ID = 587 + rmCHIndex ID = 588 + rnIndex ID = 589 + rnBIIndex ID = 590 + roIndex ID = 591 + roMDIndex ID = 592 + roROIndex ID = 593 + rofIndex ID = 594 + rofTZIndex ID = 595 + ruIndex ID = 596 + ruBYIndex ID = 597 + ruKGIndex ID = 598 + ruKZIndex ID = 599 + ruMDIndex ID = 600 + ruRUIndex ID = 601 + ruUAIndex ID = 602 + rwIndex ID = 603 + rwRWIndex ID = 604 + rwkIndex ID = 605 + rwkTZIndex ID = 606 + sahIndex ID = 607 + sahRUIndex ID = 608 + saqIndex ID = 609 + saqKEIndex ID = 610 + sbpIndex ID = 611 + sbpTZIndex ID = 612 + sdIndex ID = 613 + sdPKIndex ID = 614 + sdhIndex ID = 615 + seIndex ID = 616 + seFIIndex ID = 617 + seNOIndex ID = 618 + seSEIndex ID = 619 + sehIndex ID = 620 + sehMZIndex ID = 621 + sesIndex ID = 622 + sesMLIndex ID = 623 + sgIndex ID = 624 + sgCFIndex ID = 625 + shIndex ID = 626 + shiIndex ID = 627 + shiLatnIndex ID = 628 + shiLatnMAIndex ID = 629 + shiTfngIndex ID = 630 + shiTfngMAIndex ID = 631 + siIndex ID = 632 + siLKIndex ID = 633 + skIndex ID = 634 + skSKIndex ID = 635 + slIndex ID = 636 + slSIIndex ID = 637 + smaIndex ID = 638 + smiIndex ID = 639 + smjIndex ID = 640 + smnIndex ID = 641 + smnFIIndex ID = 642 + smsIndex ID = 643 + snIndex ID = 644 + snZWIndex ID = 645 + soIndex ID = 646 + soDJIndex ID = 647 + soETIndex ID = 648 + soKEIndex ID = 649 + soSOIndex ID = 650 + sqIndex ID = 651 + sqALIndex ID = 652 + sqMKIndex ID = 653 + sqXKIndex ID = 654 + srIndex ID = 655 + srCyrlIndex ID = 656 + srCyrlBAIndex ID = 657 + srCyrlMEIndex ID = 658 + srCyrlRSIndex ID = 659 + srCyrlXKIndex ID = 660 + srLatnIndex ID = 661 + srLatnBAIndex ID = 662 + srLatnMEIndex ID = 663 + srLatnRSIndex ID = 664 + srLatnXKIndex ID = 665 + ssIndex ID = 666 + ssyIndex ID = 667 + stIndex ID = 668 + svIndex ID = 669 + svAXIndex ID = 670 + svFIIndex ID = 671 + svSEIndex ID = 672 + swIndex ID = 673 + swCDIndex ID = 674 + swKEIndex ID = 675 + swTZIndex ID = 676 + swUGIndex ID = 677 + syrIndex ID = 678 + taIndex ID = 679 + taINIndex ID = 680 + taLKIndex ID = 681 + taMYIndex ID = 682 + taSGIndex ID = 683 + teIndex ID = 684 + teINIndex ID = 685 + teoIndex ID = 686 + teoKEIndex ID = 687 + teoUGIndex ID = 688 + tgIndex ID = 689 + tgTJIndex ID = 690 + thIndex ID = 691 + thTHIndex ID = 692 + tiIndex ID = 693 + tiERIndex ID = 694 + tiETIndex ID = 695 + tigIndex ID = 696 + tkIndex ID = 697 + tkTMIndex ID = 698 + tlIndex ID = 699 + tnIndex ID = 700 + toIndex ID = 701 + toTOIndex ID = 702 + trIndex ID = 703 + trCYIndex ID = 704 + trTRIndex ID = 705 + tsIndex ID = 706 + ttIndex ID = 707 + ttRUIndex ID = 708 + twqIndex ID = 709 + twqNEIndex ID = 710 + tzmIndex ID = 711 + tzmMAIndex ID = 712 + ugIndex ID = 713 + ugCNIndex ID = 714 + ukIndex ID = 715 + ukUAIndex ID = 716 + urIndex ID = 717 + urINIndex ID = 718 + urPKIndex ID = 719 + uzIndex ID = 720 + uzArabIndex ID = 721 + uzArabAFIndex ID = 722 + uzCyrlIndex ID = 723 + uzCyrlUZIndex ID = 724 + uzLatnIndex ID = 725 + uzLatnUZIndex ID = 726 + vaiIndex ID = 727 + vaiLatnIndex ID = 728 + vaiLatnLRIndex ID = 729 + vaiVaiiIndex ID = 730 + vaiVaiiLRIndex ID = 731 + veIndex ID = 732 + viIndex ID = 733 + viVNIndex ID = 734 + voIndex ID = 735 + vo001Index ID = 736 + vunIndex ID = 737 + vunTZIndex ID = 738 + waIndex ID = 739 + waeIndex ID = 740 + waeCHIndex ID = 741 + woIndex ID = 742 + woSNIndex ID = 743 + xhIndex ID = 744 + xogIndex ID = 745 + xogUGIndex ID = 746 + yavIndex ID = 747 + yavCMIndex ID = 748 + yiIndex ID = 749 + yi001Index ID = 750 + yoIndex ID = 751 + yoBJIndex ID = 752 + yoNGIndex ID = 753 + yueIndex ID = 754 + yueHansIndex ID = 755 + yueHansCNIndex ID = 756 + yueHantIndex ID = 757 + yueHantHKIndex ID = 758 + zghIndex ID = 759 + zghMAIndex ID = 760 + zhIndex ID = 761 + zhHansIndex ID = 762 + zhHansCNIndex ID = 763 + zhHansHKIndex ID = 764 + zhHansMOIndex ID = 765 + zhHansSGIndex ID = 766 + zhHantIndex ID = 767 + zhHantHKIndex ID = 768 + zhHantMOIndex ID = 769 + zhHantTWIndex ID = 770 + zuIndex ID = 771 + zuZAIndex ID = 772 + caESvalenciaIndex ID = 773 + enUSuvaposixIndex ID = 774 +) + +var coreTags = []language.CompactCoreInfo{ // 773 elements + // Entry 0 - 1F + 0x00000000, 0x01600000, 0x016000d2, 0x01600161, + 0x01c00000, 0x01c00052, 0x02100000, 0x02100080, + 0x02700000, 0x0270006f, 0x03a00000, 0x03a00001, + 0x03a00023, 0x03a00039, 0x03a00062, 0x03a00067, + 0x03a0006b, 0x03a0006c, 0x03a0006d, 0x03a00097, + 0x03a0009b, 0x03a000a1, 0x03a000a8, 0x03a000ac, + 0x03a000b0, 0x03a000b9, 0x03a000ba, 0x03a000c9, + 0x03a000e1, 0x03a000ed, 0x03a000f3, 0x03a00108, + // Entry 20 - 3F + 0x03a0010b, 0x03a00115, 0x03a00117, 0x03a0011c, + 0x03a00120, 0x03a00128, 0x03a0015e, 0x04000000, + 0x04300000, 0x04300099, 0x04400000, 0x0440012f, + 0x04800000, 0x0480006e, 0x05800000, 0x0581f000, + 0x0581f032, 0x05857000, 0x05857032, 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, + 0x0d700022, 0x0d70006e, 0x0d700078, 0x0d70009e, + 0x0db00000, 0x0db00035, 0x0db00099, 0x0dc00000, + 0x0dc00106, 0x0df00000, 0x0df00131, 0x0e500000, + 0x0e500135, 0x0e900000, 0x0e90009b, 0x0e90009c, + // Entry 60 - 7F + 0x0fa00000, 0x0fa0005e, 0x0fe00000, 0x0fe00106, + 0x10000000, 0x1000007b, 0x10100000, 0x10100063, + 0x10100082, 0x10800000, 0x108000a4, 0x10d00000, + 0x10d0002e, 0x10d00036, 0x10d0004e, 0x10d00060, + 0x10d0009e, 0x10d000b2, 0x10d000b7, 0x11700000, + 0x117000d4, 0x11f00000, 0x11f00060, 0x12400000, + 0x12400052, 0x12800000, 0x12b00000, 0x12b00114, + 0x12d00000, 0x12d00043, 0x12f00000, 0x12f000a4, + // Entry 80 - 9F + 0x13000000, 0x13000080, 0x13000122, 0x13600000, + 0x1360005d, 0x13600087, 0x13900000, 0x13900001, + 0x1390001a, 0x13900025, 0x13900026, 0x1390002d, + 0x1390002e, 0x1390002f, 0x13900034, 0x13900036, + 0x1390003a, 0x1390003d, 0x13900042, 0x13900046, + 0x13900048, 0x13900049, 0x1390004a, 0x1390004e, + 0x13900050, 0x13900052, 0x1390005c, 0x1390005d, + 0x13900060, 0x13900061, 0x13900063, 0x13900064, + // Entry A0 - BF + 0x1390006d, 0x13900072, 0x13900073, 0x13900074, + 0x13900075, 0x1390007b, 0x1390007c, 0x1390007f, + 0x13900080, 0x13900081, 0x13900083, 0x1390008a, + 0x1390008c, 0x1390008d, 0x13900096, 0x13900097, + 0x13900098, 0x13900099, 0x1390009a, 0x1390009f, + 0x139000a0, 0x139000a4, 0x139000a7, 0x139000a9, + 0x139000ad, 0x139000b1, 0x139000b4, 0x139000b5, + 0x139000bf, 0x139000c0, 0x139000c6, 0x139000c7, + // Entry C0 - DF + 0x139000ca, 0x139000cb, 0x139000cc, 0x139000ce, + 0x139000d0, 0x139000d2, 0x139000d5, 0x139000d6, + 0x139000d9, 0x139000dd, 0x139000df, 0x139000e0, + 0x139000e6, 0x139000e7, 0x139000e8, 0x139000eb, + 0x139000ec, 0x139000f0, 0x13900107, 0x13900109, + 0x1390010a, 0x1390010b, 0x1390010c, 0x1390010d, + 0x1390010e, 0x1390010f, 0x13900112, 0x13900117, + 0x1390011b, 0x1390011d, 0x1390011f, 0x13900125, + // Entry E0 - FF + 0x13900129, 0x1390012c, 0x1390012d, 0x1390012f, + 0x13900131, 0x13900133, 0x13900135, 0x13900139, + 0x1390013c, 0x1390013d, 0x1390013f, 0x13900142, + 0x13900161, 0x13900162, 0x13900164, 0x13c00000, + 0x13c00001, 0x13e00000, 0x13e0001f, 0x13e0002c, + 0x13e0003f, 0x13e00041, 0x13e00048, 0x13e00051, + 0x13e00054, 0x13e00056, 0x13e00059, 0x13e00065, + 0x13e00068, 0x13e00069, 0x13e0006e, 0x13e00086, + // Entry 100 - 11F + 0x13e00089, 0x13e0008f, 0x13e00094, 0x13e000cf, + 0x13e000d8, 0x13e000e2, 0x13e000e4, 0x13e000e7, + 0x13e000ec, 0x13e000f1, 0x13e0011a, 0x13e00135, + 0x13e00136, 0x13e0013b, 0x14000000, 0x1400006a, + 0x14500000, 0x1450006e, 0x14600000, 0x14600052, + 0x14800000, 0x14800024, 0x1480009c, 0x14e00000, + 0x14e00052, 0x14e00084, 0x14e000c9, 0x14e00114, + 0x15100000, 0x15100072, 0x15300000, 0x153000e7, + // Entry 120 - 13F + 0x15800000, 0x15800063, 0x15800076, 0x15e00000, + 0x15e00036, 0x15e00037, 0x15e0003a, 0x15e0003b, + 0x15e0003c, 0x15e00049, 0x15e0004b, 0x15e0004c, + 0x15e0004d, 0x15e0004e, 0x15e0004f, 0x15e00052, + 0x15e00062, 0x15e00067, 0x15e00078, 0x15e0007a, + 0x15e0007e, 0x15e00084, 0x15e00085, 0x15e00086, + 0x15e00091, 0x15e000a8, 0x15e000b7, 0x15e000ba, + 0x15e000bb, 0x15e000be, 0x15e000bf, 0x15e000c3, + // Entry 140 - 15F + 0x15e000c8, 0x15e000c9, 0x15e000cc, 0x15e000d3, + 0x15e000d4, 0x15e000e5, 0x15e000ea, 0x15e00102, + 0x15e00107, 0x15e0010a, 0x15e00114, 0x15e0011c, + 0x15e00120, 0x15e00122, 0x15e00128, 0x15e0013f, + 0x15e00140, 0x15e0015f, 0x16900000, 0x1690009e, + 0x16d00000, 0x16d000d9, 0x16e00000, 0x16e00096, + 0x17e00000, 0x17e0007b, 0x19000000, 0x1900006e, + 0x1a300000, 0x1a30004e, 0x1a300078, 0x1a3000b2, + // Entry 160 - 17F + 0x1a400000, 0x1a400099, 0x1a900000, 0x1ab00000, + 0x1ab000a4, 0x1ac00000, 0x1ac00098, 0x1b400000, + 0x1b400080, 0x1b4000d4, 0x1b4000d6, 0x1b800000, + 0x1b800135, 0x1bc00000, 0x1bc00097, 0x1be00000, + 0x1be00099, 0x1d100000, 0x1d100033, 0x1d100090, + 0x1d200000, 0x1d200060, 0x1d500000, 0x1d500092, + 0x1d700000, 0x1d700028, 0x1e100000, 0x1e100095, + 0x1e700000, 0x1e7000d6, 0x1ea00000, 0x1ea00053, + // Entry 180 - 19F + 0x1f300000, 0x1f500000, 0x1f800000, 0x1f80009d, + 0x1f900000, 0x1f90004e, 0x1f90009e, 0x1f900113, + 0x1f900138, 0x1fa00000, 0x1fb00000, 0x20000000, + 0x200000a2, 0x20300000, 0x20700000, 0x20700052, + 0x20800000, 0x20a00000, 0x20a0012f, 0x20e00000, + 0x20f00000, 0x21000000, 0x2100007d, 0x21200000, + 0x21200067, 0x21600000, 0x21700000, 0x217000a4, + 0x21f00000, 0x22300000, 0x2230012f, 0x22700000, + // Entry 1A0 - 1BF + 0x2270005a, 0x23400000, 0x234000c3, 0x23900000, + 0x239000a4, 0x24200000, 0x242000ae, 0x24400000, + 0x24400052, 0x24500000, 0x24500082, 0x24600000, + 0x246000a4, 0x24a00000, 0x24a000a6, 0x25100000, + 0x25100099, 0x25400000, 0x254000aa, 0x254000ab, + 0x25600000, 0x25600099, 0x26a00000, 0x26a00099, + 0x26b00000, 0x26b0012f, 0x26d00000, 0x26d00052, + 0x26e00000, 0x26e00060, 0x27400000, 0x28100000, + // Entry 1C0 - 1DF + 0x2810007b, 0x28a00000, 0x28a000a5, 0x29100000, + 0x2910012f, 0x29500000, 0x295000b7, 0x2a300000, + 0x2a300131, 0x2af00000, 0x2af00135, 0x2b500000, + 0x2b50002a, 0x2b50004b, 0x2b50004c, 0x2b50004d, + 0x2b800000, 0x2b8000af, 0x2bf00000, 0x2bf0009b, + 0x2bf0009c, 0x2c000000, 0x2c0000b6, 0x2c200000, + 0x2c20004b, 0x2c400000, 0x2c4000a4, 0x2c500000, + 0x2c5000a4, 0x2c700000, 0x2c7000b8, 0x2d100000, + // Entry 1E0 - 1FF + 0x2d1000a4, 0x2d10012f, 0x2e900000, 0x2e9000a4, + 0x2ed00000, 0x2ed000cc, 0x2f100000, 0x2f1000bf, + 0x2f200000, 0x2f2000d1, 0x2f400000, 0x2f400052, + 0x2ff00000, 0x2ff000c2, 0x30400000, 0x30400099, + 0x30b00000, 0x30b000c5, 0x31000000, 0x31b00000, + 0x31b00099, 0x31f00000, 0x31f0003e, 0x31f000d0, + 0x31f0010d, 0x32000000, 0x320000cb, 0x32500000, + 0x32500052, 0x33100000, 0x331000c4, 0x33a00000, + // Entry 200 - 21F + 0x33a0009c, 0x34100000, 0x34500000, 0x345000d2, + 0x34700000, 0x347000da, 0x34700110, 0x34e00000, + 0x34e00164, 0x35000000, 0x35000060, 0x350000d9, + 0x35100000, 0x35100099, 0x351000db, 0x36700000, + 0x36700030, 0x36700036, 0x36700040, 0x3670005b, + 0x367000d9, 0x36700116, 0x3670011b, 0x36800000, + 0x36800052, 0x36a00000, 0x36a000da, 0x36c00000, + 0x36c00052, 0x36f00000, 0x37500000, 0x37600000, + // Entry 220 - 23F + 0x37a00000, 0x38000000, 0x38000117, 0x38700000, + 0x38900000, 0x38900131, 0x39000000, 0x3900006f, + 0x390000a4, 0x39500000, 0x39500099, 0x39800000, + 0x3980007d, 0x39800106, 0x39d00000, 0x39d05000, + 0x39d050e8, 0x39d33000, 0x39d33099, 0x3a100000, + 0x3b300000, 0x3b3000e9, 0x3bd00000, 0x3bd00001, + 0x3be00000, 0x3be00024, 0x3c000000, 0x3c00002a, + 0x3c000041, 0x3c00004e, 0x3c00005a, 0x3c000086, + // Entry 240 - 25F + 0x3c00008b, 0x3c0000b7, 0x3c0000c6, 0x3c0000d1, + 0x3c0000ee, 0x3c000118, 0x3c000126, 0x3c400000, + 0x3c40003f, 0x3c400069, 0x3c4000e4, 0x3d400000, + 0x3d40004e, 0x3d900000, 0x3d90003a, 0x3dc00000, + 0x3dc000bc, 0x3dc00104, 0x3de00000, 0x3de0012f, + 0x3e200000, 0x3e200047, 0x3e2000a5, 0x3e2000ae, + 0x3e2000bc, 0x3e200106, 0x3e200130, 0x3e500000, + 0x3e500107, 0x3e600000, 0x3e60012f, 0x3eb00000, + // Entry 260 - 27F + 0x3eb00106, 0x3ec00000, 0x3ec000a4, 0x3f300000, + 0x3f30012f, 0x3fa00000, 0x3fa000e8, 0x3fc00000, + 0x3fd00000, 0x3fd00072, 0x3fd000da, 0x3fd0010c, + 0x3ff00000, 0x3ff000d1, 0x40100000, 0x401000c3, + 0x40200000, 0x4020004c, 0x40700000, 0x40800000, + 0x40857000, 0x408570ba, 0x408dc000, 0x408dc0ba, + 0x40c00000, 0x40c000b3, 0x41200000, 0x41200111, + 0x41600000, 0x4160010f, 0x41c00000, 0x41d00000, + // Entry 280 - 29F + 0x41e00000, 0x41f00000, 0x41f00072, 0x42200000, + 0x42300000, 0x42300164, 0x42900000, 0x42900062, + 0x4290006f, 0x429000a4, 0x42900115, 0x43100000, + 0x43100027, 0x431000c2, 0x4310014d, 0x43200000, + 0x4321f000, 0x4321f033, 0x4321f0bd, 0x4321f105, + 0x4321f14d, 0x43257000, 0x43257033, 0x432570bd, + 0x43257105, 0x4325714d, 0x43700000, 0x43a00000, + 0x43b00000, 0x44400000, 0x44400031, 0x44400072, + // Entry 2A0 - 2BF + 0x4440010c, 0x44500000, 0x4450004b, 0x445000a4, + 0x4450012f, 0x44500131, 0x44e00000, 0x45000000, + 0x45000099, 0x450000b3, 0x450000d0, 0x4500010d, + 0x46100000, 0x46100099, 0x46400000, 0x464000a4, + 0x46400131, 0x46700000, 0x46700124, 0x46b00000, + 0x46b00123, 0x46f00000, 0x46f0006d, 0x46f0006f, + 0x47100000, 0x47600000, 0x47600127, 0x47a00000, + 0x48000000, 0x48200000, 0x48200129, 0x48a00000, + // Entry 2C0 - 2DF + 0x48a0005d, 0x48a0012b, 0x48e00000, 0x49400000, + 0x49400106, 0x4a400000, 0x4a4000d4, 0x4a900000, + 0x4a9000ba, 0x4ac00000, 0x4ac00053, 0x4ae00000, + 0x4ae00130, 0x4b400000, 0x4b400099, 0x4b4000e8, + 0x4bc00000, 0x4bc05000, 0x4bc05024, 0x4bc1f000, + 0x4bc1f137, 0x4bc57000, 0x4bc57137, 0x4be00000, + 0x4be57000, 0x4be570b4, 0x4bee3000, 0x4bee30b4, + 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, + // Entry 300 - 31F + 0x5293908d, 0x529390c6, 0x5293912e, 0x52f00000, + 0x52f00161, +} // Size: 3116 bytes + +const specialTagsStr string = "ca-ES-valencia en-US-u-va-posix" + +// Total table size 3147 bytes (3KiB); checksum: F4E57D15 diff --git a/vendor/golang.org/x/text/internal/language/compact/tags.go b/vendor/golang.org/x/text/internal/language/compact/tags.go new file mode 100644 index 0000000..ca135d2 --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/compact/tags.go @@ -0,0 +1,91 @@ +// Copyright 2013 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. + +package compact + +var ( + und = Tag{} + + Und Tag = Tag{} + + Afrikaans Tag = Tag{language: afIndex, locale: afIndex} + Amharic Tag = Tag{language: amIndex, locale: amIndex} + Arabic Tag = Tag{language: arIndex, locale: arIndex} + ModernStandardArabic Tag = Tag{language: ar001Index, locale: ar001Index} + Azerbaijani Tag = Tag{language: azIndex, locale: azIndex} + Bulgarian Tag = Tag{language: bgIndex, locale: bgIndex} + Bengali Tag = Tag{language: bnIndex, locale: bnIndex} + Catalan Tag = Tag{language: caIndex, locale: caIndex} + Czech Tag = Tag{language: csIndex, locale: csIndex} + Danish Tag = Tag{language: daIndex, locale: daIndex} + German Tag = Tag{language: deIndex, locale: deIndex} + Greek Tag = Tag{language: elIndex, locale: elIndex} + English Tag = Tag{language: enIndex, locale: enIndex} + AmericanEnglish Tag = Tag{language: enUSIndex, locale: enUSIndex} + BritishEnglish Tag = Tag{language: enGBIndex, locale: enGBIndex} + Spanish Tag = Tag{language: esIndex, locale: esIndex} + EuropeanSpanish Tag = Tag{language: esESIndex, locale: esESIndex} + LatinAmericanSpanish Tag = Tag{language: es419Index, locale: es419Index} + Estonian Tag = Tag{language: etIndex, locale: etIndex} + Persian Tag = Tag{language: faIndex, locale: faIndex} + Finnish Tag = Tag{language: fiIndex, locale: fiIndex} + Filipino Tag = Tag{language: filIndex, locale: filIndex} + French Tag = Tag{language: frIndex, locale: frIndex} + CanadianFrench Tag = Tag{language: frCAIndex, locale: frCAIndex} + Gujarati Tag = Tag{language: guIndex, locale: guIndex} + Hebrew Tag = Tag{language: heIndex, locale: heIndex} + Hindi Tag = Tag{language: hiIndex, locale: hiIndex} + Croatian Tag = Tag{language: hrIndex, locale: hrIndex} + Hungarian Tag = Tag{language: huIndex, locale: huIndex} + Armenian Tag = Tag{language: hyIndex, locale: hyIndex} + Indonesian Tag = Tag{language: idIndex, locale: idIndex} + Icelandic Tag = Tag{language: isIndex, locale: isIndex} + Italian Tag = Tag{language: itIndex, locale: itIndex} + Japanese Tag = Tag{language: jaIndex, locale: jaIndex} + Georgian Tag = Tag{language: kaIndex, locale: kaIndex} + Kazakh Tag = Tag{language: kkIndex, locale: kkIndex} + Khmer Tag = Tag{language: kmIndex, locale: kmIndex} + Kannada Tag = Tag{language: knIndex, locale: knIndex} + Korean Tag = Tag{language: koIndex, locale: koIndex} + Kirghiz Tag = Tag{language: kyIndex, locale: kyIndex} + Lao Tag = Tag{language: loIndex, locale: loIndex} + Lithuanian Tag = Tag{language: ltIndex, locale: ltIndex} + Latvian Tag = Tag{language: lvIndex, locale: lvIndex} + Macedonian Tag = Tag{language: mkIndex, locale: mkIndex} + Malayalam Tag = Tag{language: mlIndex, locale: mlIndex} + Mongolian Tag = Tag{language: mnIndex, locale: mnIndex} + Marathi Tag = Tag{language: mrIndex, locale: mrIndex} + Malay Tag = Tag{language: msIndex, locale: msIndex} + Burmese Tag = Tag{language: myIndex, locale: myIndex} + Nepali Tag = Tag{language: neIndex, locale: neIndex} + Dutch Tag = Tag{language: nlIndex, locale: nlIndex} + Norwegian Tag = Tag{language: noIndex, locale: noIndex} + Punjabi Tag = Tag{language: paIndex, locale: paIndex} + Polish Tag = Tag{language: plIndex, locale: plIndex} + Portuguese Tag = Tag{language: ptIndex, locale: ptIndex} + BrazilianPortuguese Tag = Tag{language: ptBRIndex, locale: ptBRIndex} + EuropeanPortuguese Tag = Tag{language: ptPTIndex, locale: ptPTIndex} + Romanian Tag = Tag{language: roIndex, locale: roIndex} + Russian Tag = Tag{language: ruIndex, locale: ruIndex} + Sinhala Tag = Tag{language: siIndex, locale: siIndex} + Slovak Tag = Tag{language: skIndex, locale: skIndex} + Slovenian Tag = Tag{language: slIndex, locale: slIndex} + Albanian Tag = Tag{language: sqIndex, locale: sqIndex} + Serbian Tag = Tag{language: srIndex, locale: srIndex} + SerbianLatin Tag = Tag{language: srLatnIndex, locale: srLatnIndex} + Swedish Tag = Tag{language: svIndex, locale: svIndex} + Swahili Tag = Tag{language: swIndex, locale: swIndex} + Tamil Tag = Tag{language: taIndex, locale: taIndex} + Telugu Tag = Tag{language: teIndex, locale: teIndex} + Thai Tag = Tag{language: thIndex, locale: thIndex} + Turkish Tag = Tag{language: trIndex, locale: trIndex} + Ukrainian Tag = Tag{language: ukIndex, locale: ukIndex} + Urdu Tag = Tag{language: urIndex, locale: urIndex} + Uzbek Tag = Tag{language: uzIndex, locale: uzIndex} + Vietnamese Tag = Tag{language: viIndex, locale: viIndex} + Chinese Tag = Tag{language: zhIndex, locale: zhIndex} + SimplifiedChinese Tag = Tag{language: zhHansIndex, locale: zhHansIndex} + TraditionalChinese Tag = Tag{language: zhHantIndex, locale: zhHantIndex} + Zulu Tag = Tag{language: zuIndex, locale: zuIndex} +) diff --git a/vendor/golang.org/x/text/internal/language/compose.go b/vendor/golang.org/x/text/internal/language/compose.go new file mode 100644 index 0000000..4ae78e0 --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/compose.go @@ -0,0 +1,167 @@ +// Copyright 2018 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. + +package language + +import ( + "sort" + "strings" +) + +// A Builder allows constructing a Tag from individual components. +// Its main user is Compose in the top-level language package. +type Builder struct { + Tag Tag + + private string // the x extension + variants []string + extensions []string +} + +// Make returns a new Tag from the current settings. +func (b *Builder) Make() Tag { + t := b.Tag + + if len(b.extensions) > 0 || len(b.variants) > 0 { + sort.Sort(sortVariants(b.variants)) + sort.Strings(b.extensions) + + if b.private != "" { + b.extensions = append(b.extensions, b.private) + } + n := maxCoreSize + tokenLen(b.variants...) + tokenLen(b.extensions...) + buf := make([]byte, n) + p := t.genCoreBytes(buf) + t.pVariant = byte(p) + p += appendTokens(buf[p:], b.variants...) + t.pExt = uint16(p) + p += appendTokens(buf[p:], b.extensions...) + t.str = string(buf[:p]) + // We may not always need to remake the string, but when or when not + // to do so is rather tricky. + scan := makeScanner(buf[:p]) + t, _ = parse(&scan, "") + return t + + } else if b.private != "" { + t.str = b.private + t.RemakeString() + } + return t +} + +// SetTag copies all the settings from a given Tag. Any previously set values +// are discarded. +func (b *Builder) SetTag(t Tag) { + b.Tag.LangID = t.LangID + b.Tag.RegionID = t.RegionID + b.Tag.ScriptID = t.ScriptID + // TODO: optimize + b.variants = b.variants[:0] + if variants := t.Variants(); variants != "" { + for _, vr := range strings.Split(variants[1:], "-") { + b.variants = append(b.variants, vr) + } + } + b.extensions, b.private = b.extensions[:0], "" + for _, e := range t.Extensions() { + b.AddExt(e) + } +} + +// AddExt adds extension e to the tag. e must be a valid extension as returned +// by Tag.Extension. If the extension already exists, it will be discarded, +// except for a -u extension, where non-existing key-type pairs will added. +func (b *Builder) AddExt(e string) { + if e[0] == 'x' { + if b.private == "" { + b.private = e + } + return + } + for i, s := range b.extensions { + if s[0] == e[0] { + if e[0] == 'u' { + b.extensions[i] += e[1:] + } + return + } + } + b.extensions = append(b.extensions, e) +} + +// SetExt sets the extension e to the tag. e must be a valid extension as +// returned by Tag.Extension. If the extension already exists, it will be +// overwritten, except for a -u extension, where the individual key-type pairs +// will be set. +func (b *Builder) SetExt(e string) { + if e[0] == 'x' { + b.private = e + return + } + for i, s := range b.extensions { + if s[0] == e[0] { + if e[0] == 'u' { + b.extensions[i] = e + s[1:] + } else { + b.extensions[i] = e + } + return + } + } + b.extensions = append(b.extensions, e) +} + +// AddVariant adds any number of variants. +func (b *Builder) AddVariant(v ...string) { + for _, v := range v { + if v != "" { + b.variants = append(b.variants, v) + } + } +} + +// ClearVariants removes any variants previously added, including those +// copied from a Tag in SetTag. +func (b *Builder) ClearVariants() { + b.variants = b.variants[:0] +} + +// ClearExtensions removes any extensions previously added, including those +// copied from a Tag in SetTag. +func (b *Builder) ClearExtensions() { + b.private = "" + b.extensions = b.extensions[:0] +} + +func tokenLen(token ...string) (n int) { + for _, t := range token { + n += len(t) + 1 + } + return +} + +func appendTokens(b []byte, token ...string) int { + p := 0 + for _, t := range token { + b[p] = '-' + copy(b[p+1:], t) + p += 1 + len(t) + } + return p +} + +type sortVariants []string + +func (s sortVariants) Len() int { + return len(s) +} + +func (s sortVariants) Swap(i, j int) { + s[j], s[i] = s[i], s[j] +} + +func (s sortVariants) Less(i, j int) bool { + return variantIndex[s[i]] < variantIndex[s[j]] +} diff --git a/vendor/golang.org/x/text/internal/language/compose_test.go b/vendor/golang.org/x/text/internal/language/compose_test.go new file mode 100644 index 0000000..1930d3d --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/compose_test.go @@ -0,0 +1,67 @@ +// Copyright 2018 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. + +package language + +import ( + "strings" + "testing" +) + +func parseBase(s string) Language { + if s == "" { + return 0 + } + return MustParseBase(s) +} + +func parseScript(s string) Script { + if s == "" { + return 0 + } + return MustParseScript(s) +} + +func parseRegion(s string) Region { + if s == "" { + return 0 + } + return MustParseRegion(s) +} + +func TestBuilder(t *testing.T) { + partChecks(t, func(t *testing.T, tt *parseTest) (id Tag, skip bool) { + tag := Make(tt.in) + b := Builder{} + b.SetTag(Tag{ + LangID: parseBase(tt.lang), + ScriptID: parseScript(tt.script), + RegionID: parseRegion(tt.region), + }) + if tt.variants != "" { + b.AddVariant(strings.Split(tt.variants, "-")...) + } + for _, e := range tag.Extensions() { + b.AddExt(e) + } + got := b.Make() + if got != tag { + t.Errorf("%s: got %v; want %v", tt.in, got, tag) + } + return got, false + }) +} + +func TestSetTag(t *testing.T) { + partChecks(t, func(t *testing.T, tt *parseTest) (id Tag, skip bool) { + tag := Make(tt.in) + b := Builder{} + b.SetTag(tag) + got := b.Make() + if got != tag { + t.Errorf("%s: got %v; want %v", tt.in, got, tag) + } + return got, false + }) +} diff --git a/vendor/golang.org/x/text/internal/language/coverage.go b/vendor/golang.org/x/text/internal/language/coverage.go new file mode 100644 index 0000000..9b20b88 --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/coverage.go @@ -0,0 +1,28 @@ +// Copyright 2014 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. + +package language + +// BaseLanguages returns the list of all supported base languages. It generates +// the list by traversing the internal structures. +func BaseLanguages() []Language { + base := make([]Language, 0, NumLanguages) + for i := 0; i < langNoIndexOffset; i++ { + // We included "und" already for the value 0. + if i != nonCanonicalUnd { + base = append(base, Language(i)) + } + } + i := langNoIndexOffset + for _, v := range langNoIndex { + for k := 0; k < 8; k++ { + if v&1 == 1 { + base = append(base, Language(i)) + } + v >>= 1 + i++ + } + } + return base +} diff --git a/vendor/golang.org/x/text/internal/language/gen.go b/vendor/golang.org/x/text/internal/language/gen.go new file mode 100644 index 0000000..cdcc7fe --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/gen.go @@ -0,0 +1,1520 @@ +// Copyright 2013 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 ignore + +// Language tag table generator. +// Data read from the web. + +package main + +import ( + "bufio" + "flag" + "fmt" + "io" + "io/ioutil" + "log" + "math" + "reflect" + "regexp" + "sort" + "strconv" + "strings" + + "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/tag" + "golang.org/x/text/unicode/cldr" +) + +var ( + test = flag.Bool("test", + false, + "test existing tables; can be used to compare web data with package data.") + outputFile = flag.String("output", + "tables.go", + "output file for generated tables") +) + +var comment = []string{ + ` +lang holds an alphabetically sorted list of ISO-639 language identifiers. +All entries are 4 bytes. The index of the identifier (divided by 4) is the language tag. +For 2-byte language identifiers, the two successive bytes have the following meaning: + - if the first letter of the 2- and 3-letter ISO codes are the same: + the second and third letter of the 3-letter ISO code. + - otherwise: a 0 and a by 2 bits right-shifted index into altLangISO3. +For 3-byte language identifiers the 4th byte is 0.`, + ` +langNoIndex is a bit vector of all 3-letter language codes that are not used as an index +in lookup tables. The language ids for these language codes are derived directly +from the letters and are not consecutive.`, + ` +altLangISO3 holds an alphabetically sorted list of 3-letter language code alternatives +to 2-letter language codes that cannot be derived using the method described above. +Each 3-letter code is followed by its 1-byte langID.`, + ` +altLangIndex is used to convert indexes in altLangISO3 to langIDs.`, + ` +AliasMap maps langIDs to their suggested replacements.`, + ` +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.`, + ` +isoRegionOffset needs to be added to the index of regionISO to obtain the regionID +for 2-letter ISO codes. (The first isoRegionOffset regionIDs are reserved for +the UN.M49 codes used for groups.)`, + ` +regionISO holds a list of alphabetically sorted 2-letter ISO region codes. +Each 2-letter codes is followed by two bytes with the following meaning: + - [A-Z}{2}: the first letter of the 2-letter code plus these two + letters form the 3-letter ISO code. + - 0, n: index into altRegionISO3.`, + ` +regionTypes defines the status of a region for various standards.`, + ` +m49 maps regionIDs to UN.M49 codes. The first isoRegionOffset entries are +codes indicating collections of regions.`, + ` +m49Index gives indexes into fromM49 based on the three most significant bits +of a 10-bit UN.M49 code. To search an UN.M49 code in fromM49, search in + fromM49[m49Index[msb39(code)]:m49Index[msb3(code)+1]] +for an entry where the first 7 bits match the 7 lsb of the UN.M49 code. +The region code is stored in the 9 lsb of the indexed value.`, + ` +fromM49 contains entries to map UN.M49 codes to regions. See m49Index for details.`, + ` +altRegionISO3 holds a list of 3-letter region codes that cannot be +mapped to 2-letter codes using the default algorithm. This is a short list.`, + ` +altRegionIDs holds a list of regionIDs the positions of which match those +of the 3-letter ISO codes in altRegionISO3.`, + ` +variantNumSpecialized is the number of specialized variants in variants.`, + ` +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.`, + ` +likelyLang is a lookup table, indexed by langID, for the most likely +scripts and regions given incomplete information. If more entries exist for a +given language, region and script are the index and size respectively +of the list in likelyLangList.`, + ` +likelyLangList holds lists info associated with likelyLang.`, + ` +likelyRegion is a lookup table, indexed by regionID, for the most likely +languages and scripts given incomplete information. If more entries exist +for a given regionID, lang and script are the index and size respectively +of the list in likelyRegionList. +TODO: exclude containers and user-definable regions from the list.`, + ` +likelyRegionList holds lists info associated with likelyRegion.`, + ` +likelyScript is a lookup table, indexed by scriptID, for the most likely +languages and regions given a script.`, + ` +nRegionGroups is the number of region groups.`, + ` +regionInclusion maps region identifiers to sets of regions in regionInclusionBits, +where each set holds all groupings that are directly connected in a region +containment graph.`, + ` +regionInclusionBits is an array of bit vectors where every vector represents +a set of region groupings. These sets are used to compute the distance +between two regions for the purpose of language matching.`, + ` +regionInclusionNext marks, for each entry in regionInclusionBits, the set of +all groups that are reachable from the groups set in the respective entry.`, +} + +// TODO: consider changing some of these structures to tries. This can reduce +// memory, but may increase the need for memory allocations. This could be +// mitigated if we can piggyback on language tags for common cases. + +func failOnError(e error) { + if e != nil { + log.Panic(e) + } +} + +type setType int + +const ( + Indexed setType = 1 + iota // all elements must be of same size + Linear +) + +type stringSet struct { + s []string + sorted, frozen bool + + // We often need to update values after the creation of an index is completed. + // We include a convenience map for keeping track of this. + update map[string]string + typ setType // used for checking. +} + +func (ss *stringSet) clone() stringSet { + c := *ss + c.s = append([]string(nil), c.s...) + return c +} + +func (ss *stringSet) setType(t setType) { + if ss.typ != t && ss.typ != 0 { + log.Panicf("type %d cannot be assigned as it was already %d", t, ss.typ) + } +} + +// parse parses a whitespace-separated string and initializes ss with its +// components. +func (ss *stringSet) parse(s string) { + scan := bufio.NewScanner(strings.NewReader(s)) + scan.Split(bufio.ScanWords) + for scan.Scan() { + ss.add(scan.Text()) + } +} + +func (ss *stringSet) assertChangeable() { + if ss.frozen { + log.Panic("attempt to modify a frozen stringSet") + } +} + +func (ss *stringSet) add(s string) { + ss.assertChangeable() + ss.s = append(ss.s, s) + ss.sorted = ss.frozen +} + +func (ss *stringSet) freeze() { + ss.compact() + ss.frozen = true +} + +func (ss *stringSet) compact() { + if ss.sorted { + return + } + a := ss.s + sort.Strings(a) + k := 0 + for i := 1; i < len(a); i++ { + if a[k] != a[i] { + a[k+1] = a[i] + k++ + } + } + ss.s = a[:k+1] + ss.sorted = ss.frozen +} + +type funcSorter struct { + fn func(a, b string) bool + sort.StringSlice +} + +func (s funcSorter) Less(i, j int) bool { + return s.fn(s.StringSlice[i], s.StringSlice[j]) +} + +func (ss *stringSet) sortFunc(f func(a, b string) bool) { + ss.compact() + sort.Sort(funcSorter{f, sort.StringSlice(ss.s)}) +} + +func (ss *stringSet) remove(s string) { + ss.assertChangeable() + if i, ok := ss.find(s); ok { + copy(ss.s[i:], ss.s[i+1:]) + ss.s = ss.s[:len(ss.s)-1] + } +} + +func (ss *stringSet) replace(ol, nu string) { + ss.s[ss.index(ol)] = nu + ss.sorted = ss.frozen +} + +func (ss *stringSet) index(s string) int { + ss.setType(Indexed) + i, ok := ss.find(s) + if !ok { + if i < len(ss.s) { + log.Panicf("find: item %q is not in list. Closest match is %q.", s, ss.s[i]) + } + log.Panicf("find: item %q is not in list", s) + + } + return i +} + +func (ss *stringSet) find(s string) (int, bool) { + ss.compact() + i := sort.SearchStrings(ss.s, s) + return i, i != len(ss.s) && ss.s[i] == s +} + +func (ss *stringSet) slice() []string { + ss.compact() + return ss.s +} + +func (ss *stringSet) updateLater(v, key string) { + if ss.update == nil { + ss.update = map[string]string{} + } + ss.update[v] = key +} + +// join joins the string and ensures that all entries are of the same length. +func (ss *stringSet) join() string { + ss.setType(Indexed) + n := len(ss.s[0]) + for _, s := range ss.s { + if len(s) != n { + log.Panicf("join: not all entries are of the same length: %q", s) + } + } + ss.s = append(ss.s, strings.Repeat("\xff", n)) + return strings.Join(ss.s, "") +} + +// ianaEntry holds information for an entry in the IANA Language Subtag Repository. +// All types use the same entry. +// See http://tools.ietf.org/html/bcp47#section-5.1 for a description of the various +// fields. +type ianaEntry struct { + typ string + description []string + scope string + added string + preferred string + deprecated string + suppressScript string + macro string + prefix []string +} + +type builder struct { + w *gen.CodeWriter + hw io.Writer // MultiWriter for w and w.Hash + data *cldr.CLDR + supp *cldr.SupplementalData + + // indices + locale stringSet // common locales + lang stringSet // canonical language ids (2 or 3 letter ISO codes) with data + langNoIndex stringSet // 3-letter ISO codes with no associated data + script stringSet // 4-letter ISO codes + region stringSet // 2-letter ISO or 3-digit UN M49 codes + variant stringSet // 4-8-alphanumeric variant code. + + // Region codes that are groups with their corresponding group IDs. + groups map[int]index + + // langInfo + registry map[string]*ianaEntry +} + +type index uint + +func newBuilder(w *gen.CodeWriter) *builder { + r := gen.OpenCLDRCoreZip() + defer r.Close() + d := &cldr.Decoder{} + data, err := d.DecodeZip(r) + failOnError(err) + b := builder{ + w: w, + hw: io.MultiWriter(w, w.Hash), + data: data, + supp: data.Supplemental(), + } + b.parseRegistry() + return &b +} + +func (b *builder) parseRegistry() { + r := gen.OpenIANAFile("assignments/language-subtag-registry") + defer r.Close() + b.registry = make(map[string]*ianaEntry) + + scan := bufio.NewScanner(r) + scan.Split(bufio.ScanWords) + var record *ianaEntry + for more := scan.Scan(); more; { + key := scan.Text() + more = scan.Scan() + value := scan.Text() + switch key { + case "Type:": + record = &ianaEntry{typ: value} + case "Subtag:", "Tag:": + if s := strings.SplitN(value, "..", 2); len(s) > 1 { + for a := s[0]; a <= s[1]; a = inc(a) { + b.addToRegistry(a, record) + } + } else { + b.addToRegistry(value, record) + } + case "Suppress-Script:": + record.suppressScript = value + case "Added:": + record.added = value + case "Deprecated:": + record.deprecated = value + case "Macrolanguage:": + record.macro = value + case "Preferred-Value:": + record.preferred = value + case "Prefix:": + record.prefix = append(record.prefix, value) + case "Scope:": + record.scope = value + case "Description:": + buf := []byte(value) + for more = scan.Scan(); more; more = scan.Scan() { + b := scan.Bytes() + if b[0] == '%' || b[len(b)-1] == ':' { + break + } + buf = append(buf, ' ') + buf = append(buf, b...) + } + record.description = append(record.description, string(buf)) + continue + default: + continue + } + more = scan.Scan() + } + if scan.Err() != nil { + log.Panic(scan.Err()) + } +} + +func (b *builder) addToRegistry(key string, entry *ianaEntry) { + if info, ok := b.registry[key]; ok { + if info.typ != "language" || entry.typ != "extlang" { + log.Fatalf("parseRegistry: tag %q already exists", key) + } + } else { + b.registry[key] = entry + } +} + +var commentIndex = make(map[string]string) + +func init() { + for _, s := range comment { + key := strings.TrimSpace(strings.SplitN(s, " ", 2)[0]) + commentIndex[key] = s + } +} + +func (b *builder) comment(name string) { + if s := commentIndex[name]; len(s) > 0 { + b.w.WriteComment(s) + } else { + fmt.Fprintln(b.w) + } +} + +func (b *builder) pf(f string, x ...interface{}) { + fmt.Fprintf(b.hw, f, x...) + fmt.Fprint(b.hw, "\n") +} + +func (b *builder) p(x ...interface{}) { + fmt.Fprintln(b.hw, x...) +} + +func (b *builder) addSize(s int) { + b.w.Size += s + b.pf("// Size: %d bytes", s) +} + +func (b *builder) writeConst(name string, x interface{}) { + b.comment(name) + b.w.WriteConst(name, x) +} + +// writeConsts computes f(v) for all v in values and writes the results +// as constants named _v to a single constant block. +func (b *builder) writeConsts(f func(string) int, values ...string) { + b.pf("const (") + for _, v := range values { + b.pf("\t_%s = %v", v, f(v)) + } + b.pf(")") +} + +// writeType writes the type of the given value, which must be a struct. +func (b *builder) writeType(value interface{}) { + b.comment(reflect.TypeOf(value).Name()) + b.w.WriteType(value) +} + +func (b *builder) writeSlice(name string, ss interface{}) { + b.writeSliceAddSize(name, 0, ss) +} + +func (b *builder) writeSliceAddSize(name string, extraSize int, ss interface{}) { + b.comment(name) + b.w.Size += extraSize + v := reflect.ValueOf(ss) + t := v.Type().Elem() + b.pf("// Size: %d bytes, %d elements", v.Len()*int(t.Size())+extraSize, v.Len()) + + fmt.Fprintf(b.w, "var %s = ", name) + b.w.WriteArray(ss) + b.p() +} + +type FromTo struct { + From, To uint16 +} + +func (b *builder) writeSortedMap(name string, ss *stringSet, index func(s string) uint16) { + ss.sortFunc(func(a, b string) bool { + return index(a) < index(b) + }) + m := []FromTo{} + for _, s := range ss.s { + m = append(m, FromTo{index(s), index(ss.update[s])}) + } + b.writeSlice(name, m) +} + +const base = 'z' - 'a' + 1 + +func strToInt(s string) uint { + v := uint(0) + for i := 0; i < len(s); i++ { + v *= base + v += uint(s[i] - 'a') + } + return v +} + +// converts the given integer to the original ASCII string passed to strToInt. +// len(s) must match the number of characters obtained. +func intToStr(v uint, s []byte) { + for i := len(s) - 1; i >= 0; i-- { + s[i] = byte(v%base) + 'a' + v /= base + } +} + +func (b *builder) writeBitVector(name string, ss []string) { + vec := make([]uint8, int(math.Ceil(math.Pow(base, float64(len(ss[0])))/8))) + for _, s := range ss { + v := strToInt(s) + vec[v/8] |= 1 << (v % 8) + } + b.writeSlice(name, vec) +} + +// TODO: convert this type into a list or two-stage trie. +func (b *builder) writeMapFunc(name string, m map[string]string, f func(string) uint16) { + b.comment(name) + v := reflect.ValueOf(m) + sz := v.Len() * (2 + int(v.Type().Key().Size())) + for _, k := range m { + sz += len(k) + } + b.addSize(sz) + keys := []string{} + b.pf(`var %s = map[string]uint16{`, name) + for k := range m { + keys = append(keys, k) + } + sort.Strings(keys) + for _, k := range keys { + b.pf("\t%q: %v,", k, f(m[k])) + } + b.p("}") +} + +func (b *builder) writeMap(name string, m interface{}) { + b.comment(name) + v := reflect.ValueOf(m) + sz := v.Len() * (2 + int(v.Type().Key().Size()) + int(v.Type().Elem().Size())) + b.addSize(sz) + f := strings.FieldsFunc(fmt.Sprintf("%#v", m), func(r rune) bool { + return strings.IndexRune("{}, ", r) != -1 + }) + sort.Strings(f[1:]) + b.pf(`var %s = %s{`, name, f[0]) + for _, kv := range f[1:] { + b.pf("\t%s,", kv) + } + b.p("}") +} + +func (b *builder) langIndex(s string) uint16 { + if s == "und" { + return 0 + } + if i, ok := b.lang.find(s); ok { + return uint16(i) + } + return uint16(strToInt(s)) + uint16(len(b.lang.s)) +} + +// inc advances the string to its lexicographical successor. +func inc(s string) string { + const maxTagLength = 4 + var buf [maxTagLength]byte + intToStr(strToInt(strings.ToLower(s))+1, buf[:len(s)]) + for i := 0; i < len(s); i++ { + if s[i] <= 'Z' { + buf[i] -= 'a' - 'A' + } + } + return string(buf[:len(s)]) +} + +func (b *builder) parseIndices() { + meta := b.supp.Metadata + + for k, v := range b.registry { + var ss *stringSet + switch v.typ { + case "language": + if len(k) == 2 || v.suppressScript != "" || v.scope == "special" { + b.lang.add(k) + continue + } else { + ss = &b.langNoIndex + } + case "region": + ss = &b.region + case "script": + ss = &b.script + case "variant": + ss = &b.variant + default: + continue + } + ss.add(k) + } + // Include any language for which there is data. + for _, lang := range b.data.Locales() { + if x := b.data.RawLDML(lang); false || + x.LocaleDisplayNames != nil || + x.Characters != nil || + x.Delimiters != nil || + x.Measurement != nil || + x.Dates != nil || + x.Numbers != nil || + x.Units != nil || + x.ListPatterns != nil || + x.Collations != nil || + x.Segmentations != nil || + x.Rbnf != nil || + x.Annotations != nil || + x.Metadata != nil { + + from := strings.Split(lang, "_") + if lang := from[0]; lang != "root" { + b.lang.add(lang) + } + } + } + // Include locales for plural rules, which uses a different structure. + for _, plurals := range b.data.Supplemental().Plurals { + for _, rules := range plurals.PluralRules { + for _, lang := range strings.Split(rules.Locales, " ") { + if lang = strings.Split(lang, "_")[0]; lang != "root" { + b.lang.add(lang) + } + } + } + } + // Include languages in likely subtags. + for _, m := range b.supp.LikelySubtags.LikelySubtag { + from := strings.Split(m.From, "_") + b.lang.add(from[0]) + } + // Include ISO-639 alpha-3 bibliographic entries. + for _, a := range meta.Alias.LanguageAlias { + if a.Reason == "bibliographic" { + b.langNoIndex.add(a.Type) + } + } + // Include regions in territoryAlias (not all are in the IANA registry!) + for _, reg := range b.supp.Metadata.Alias.TerritoryAlias { + if len(reg.Type) == 2 { + b.region.add(reg.Type) + } + } + + for _, s := range b.lang.s { + if len(s) == 3 { + b.langNoIndex.remove(s) + } + } + b.writeConst("NumLanguages", len(b.lang.slice())+len(b.langNoIndex.slice())) + b.writeConst("NumScripts", len(b.script.slice())) + b.writeConst("NumRegions", len(b.region.slice())) + + // Add dummy codes at the start of each list to represent "unspecified". + b.lang.add("---") + b.script.add("----") + b.region.add("---") + + // common locales + b.locale.parse(meta.DefaultContent.Locales) +} + +// TODO: region inclusion data will probably not be use used in future matchers. + +func (b *builder) computeRegionGroups() { + b.groups = make(map[int]index) + + // Create group indices. + for i := 1; b.region.s[i][0] < 'A'; i++ { // Base M49 indices on regionID. + b.groups[i] = index(len(b.groups)) + } + for _, g := range b.supp.TerritoryContainment.Group { + // Skip UN and EURO zone as they are flattening the containment + // relationship. + if g.Type == "EZ" || g.Type == "UN" { + continue + } + group := b.region.index(g.Type) + if _, ok := b.groups[group]; !ok { + b.groups[group] = index(len(b.groups)) + } + } + if len(b.groups) > 64 { + log.Fatalf("only 64 groups supported, found %d", len(b.groups)) + } + b.writeConst("nRegionGroups", len(b.groups)) +} + +var langConsts = []string{ + "af", "am", "ar", "az", "bg", "bn", "ca", "cs", "da", "de", "el", "en", "es", + "et", "fa", "fi", "fil", "fr", "gu", "he", "hi", "hr", "hu", "hy", "id", "is", + "it", "ja", "ka", "kk", "km", "kn", "ko", "ky", "lo", "lt", "lv", "mk", "ml", + "mn", "mo", "mr", "ms", "mul", "my", "nb", "ne", "nl", "no", "pa", "pl", "pt", + "ro", "ru", "sh", "si", "sk", "sl", "sq", "sr", "sv", "sw", "ta", "te", "th", + "tl", "tn", "tr", "uk", "ur", "uz", "vi", "zh", "zu", + + // constants for grandfathered tags (if not already defined) + "jbo", "ami", "bnn", "hak", "tlh", "lb", "nv", "pwn", "tao", "tay", "tsu", + "nn", "sfb", "vgt", "sgg", "cmn", "nan", "hsn", +} + +// writeLanguage generates all tables needed for language canonicalization. +func (b *builder) writeLanguage() { + meta := b.supp.Metadata + + b.writeConst("nonCanonicalUnd", b.lang.index("und")) + b.writeConsts(func(s string) int { return int(b.langIndex(s)) }, langConsts...) + b.writeConst("langPrivateStart", b.langIndex("qaa")) + b.writeConst("langPrivateEnd", b.langIndex("qtz")) + + // Get language codes that need to be mapped (overlong 3-letter codes, + // deprecated 2-letter codes, legacy and grandfathered tags.) + langAliasMap := stringSet{} + aliasTypeMap := map[string]AliasType{} + + // altLangISO3 get the alternative ISO3 names that need to be mapped. + altLangISO3 := stringSet{} + // Add dummy start to avoid the use of index 0. + altLangISO3.add("---") + altLangISO3.updateLater("---", "aa") + + lang := b.lang.clone() + for _, a := range meta.Alias.LanguageAlias { + if a.Replacement == "" { + a.Replacement = "und" + } + // TODO: support mapping to tags + repl := strings.SplitN(a.Replacement, "_", 2)[0] + if a.Reason == "overlong" { + if len(a.Replacement) == 2 && len(a.Type) == 3 { + lang.updateLater(a.Replacement, a.Type) + } + } else if len(a.Type) <= 3 { + switch a.Reason { + case "macrolanguage": + aliasTypeMap[a.Type] = Macro + case "deprecated": + // handled elsewhere + continue + case "bibliographic", "legacy": + if a.Type == "no" { + continue + } + aliasTypeMap[a.Type] = Legacy + default: + log.Fatalf("new %s alias: %s", a.Reason, a.Type) + } + langAliasMap.add(a.Type) + langAliasMap.updateLater(a.Type, repl) + } + } + // Manually add the mapping of "nb" (Norwegian) to its macro language. + // This can be removed if CLDR adopts this change. + langAliasMap.add("nb") + langAliasMap.updateLater("nb", "no") + aliasTypeMap["nb"] = Macro + + for k, v := range b.registry { + // Also add deprecated values for 3-letter ISO codes, which CLDR omits. + if v.typ == "language" && v.deprecated != "" && v.preferred != "" { + langAliasMap.add(k) + langAliasMap.updateLater(k, v.preferred) + aliasTypeMap[k] = Deprecated + } + } + // Fix CLDR mappings. + lang.updateLater("tl", "tgl") + lang.updateLater("sh", "hbs") + lang.updateLater("mo", "mol") + lang.updateLater("no", "nor") + lang.updateLater("tw", "twi") + lang.updateLater("nb", "nob") + lang.updateLater("ak", "aka") + lang.updateLater("bh", "bih") + + // Ensure that each 2-letter code is matched with a 3-letter code. + for _, v := range lang.s[1:] { + s, ok := lang.update[v] + if !ok { + if s, ok = lang.update[langAliasMap.update[v]]; !ok { + continue + } + lang.update[v] = s + } + if v[0] != s[0] { + altLangISO3.add(s) + altLangISO3.updateLater(s, v) + } + } + + // Complete canonicalized language tags. + lang.freeze() + for i, v := range lang.s { + // We can avoid these manual entries by using the IANA registry directly. + // Seems easier to update the list manually, as changes are rare. + // The panic in this loop will trigger if we miss an entry. + add := "" + if s, ok := lang.update[v]; ok { + if s[0] == v[0] { + add = s[1:] + } else { + add = string([]byte{0, byte(altLangISO3.index(s))}) + } + } else if len(v) == 3 { + add = "\x00" + } else { + log.Panicf("no data for long form of %q", v) + } + lang.s[i] += add + } + b.writeConst("lang", tag.Index(lang.join())) + + b.writeConst("langNoIndexOffset", len(b.lang.s)) + + // space of all valid 3-letter language identifiers. + b.writeBitVector("langNoIndex", b.langNoIndex.slice()) + + altLangIndex := []uint16{} + for i, s := range altLangISO3.slice() { + altLangISO3.s[i] += string([]byte{byte(len(altLangIndex))}) + if i > 0 { + idx := b.lang.index(altLangISO3.update[s]) + altLangIndex = append(altLangIndex, uint16(idx)) + } + } + b.writeConst("altLangISO3", tag.Index(altLangISO3.join())) + b.writeSlice("altLangIndex", altLangIndex) + + b.writeSortedMap("AliasMap", &langAliasMap, b.langIndex) + types := make([]AliasType, len(langAliasMap.s)) + for i, s := range langAliasMap.s { + types[i] = aliasTypeMap[s] + } + b.writeSlice("AliasTypes", types) +} + +var scriptConsts = []string{ + "Latn", "Hani", "Hans", "Hant", "Qaaa", "Qaai", "Qabx", "Zinh", "Zyyy", + "Zzzz", +} + +func (b *builder) writeScript() { + b.writeConsts(b.script.index, scriptConsts...) + b.writeConst("script", tag.Index(b.script.join())) + + supp := make([]uint8, len(b.lang.slice())) + for i, v := range b.lang.slice()[1:] { + if sc := b.registry[v].suppressScript; sc != "" { + supp[i+1] = uint8(b.script.index(sc)) + } + } + b.writeSlice("suppressScript", supp) + + // There is only one deprecated script in CLDR. This value is hard-coded. + // We check here if the code must be updated. + for _, a := range b.supp.Metadata.Alias.ScriptAlias { + if a.Type != "Qaai" { + log.Panicf("unexpected deprecated stript %q", a.Type) + } + } +} + +func parseM49(s string) int16 { + if len(s) == 0 { + return 0 + } + v, err := strconv.ParseUint(s, 10, 10) + failOnError(err) + return int16(v) +} + +var regionConsts = []string{ + "001", "419", "BR", "CA", "ES", "GB", "MD", "PT", "UK", "US", + "ZZ", "XA", "XC", "XK", // Unofficial tag for Kosovo. +} + +func (b *builder) writeRegion() { + b.writeConsts(b.region.index, regionConsts...) + + isoOffset := b.region.index("AA") + m49map := make([]int16, len(b.region.slice())) + fromM49map := make(map[int16]int) + altRegionISO3 := "" + altRegionIDs := []uint16{} + + b.writeConst("isoRegionOffset", isoOffset) + + // 2-letter region lookup and mapping to numeric codes. + regionISO := b.region.clone() + regionISO.s = regionISO.s[isoOffset:] + regionISO.sorted = false + + regionTypes := make([]byte, len(b.region.s)) + + // Is the region valid BCP 47? + for s, e := range b.registry { + if len(s) == 2 && s == strings.ToUpper(s) { + i := b.region.index(s) + for _, d := range e.description { + if strings.Contains(d, "Private use") { + regionTypes[i] = iso3166UserAssigned + } + } + regionTypes[i] |= bcp47Region + } + } + + // Is the region a valid ccTLD? + r := gen.OpenIANAFile("domains/root/db") + defer r.Close() + + buf, err := ioutil.ReadAll(r) + failOnError(err) + re := regexp.MustCompile(`"/domains/root/db/([a-z]{2}).html"`) + for _, m := range re.FindAllSubmatch(buf, -1) { + i := b.region.index(strings.ToUpper(string(m[1]))) + regionTypes[i] |= ccTLD + } + + b.writeSlice("regionTypes", regionTypes) + + iso3Set := make(map[string]int) + update := func(iso2, iso3 string) { + i := regionISO.index(iso2) + if j, ok := iso3Set[iso3]; !ok && iso3[0] == iso2[0] { + regionISO.s[i] += iso3[1:] + iso3Set[iso3] = -1 + } else { + if ok && j >= 0 { + regionISO.s[i] += string([]byte{0, byte(j)}) + } else { + iso3Set[iso3] = len(altRegionISO3) + regionISO.s[i] += string([]byte{0, byte(len(altRegionISO3))}) + altRegionISO3 += iso3 + altRegionIDs = append(altRegionIDs, uint16(isoOffset+i)) + } + } + } + for _, tc := range b.supp.CodeMappings.TerritoryCodes { + i := regionISO.index(tc.Type) + isoOffset + if d := m49map[i]; d != 0 { + log.Panicf("%s found as a duplicate UN.M49 code of %03d", tc.Numeric, d) + } + m49 := parseM49(tc.Numeric) + m49map[i] = m49 + if r := fromM49map[m49]; r == 0 { + fromM49map[m49] = i + } else if r != i { + dep := b.registry[regionISO.s[r-isoOffset]].deprecated + if t := b.registry[tc.Type]; t != nil && dep != "" && (t.deprecated == "" || t.deprecated > dep) { + fromM49map[m49] = i + } + } + } + for _, ta := range b.supp.Metadata.Alias.TerritoryAlias { + if len(ta.Type) == 3 && ta.Type[0] <= '9' && len(ta.Replacement) == 2 { + from := parseM49(ta.Type) + if r := fromM49map[from]; r == 0 { + fromM49map[from] = regionISO.index(ta.Replacement) + isoOffset + } + } + } + for _, tc := range b.supp.CodeMappings.TerritoryCodes { + if len(tc.Alpha3) == 3 { + update(tc.Type, tc.Alpha3) + } + } + // This entries are not included in territoryCodes. Mostly 3-letter variants + // of deleted codes and an entry for QU. + for _, m := range []struct{ iso2, iso3 string }{ + {"CT", "CTE"}, + {"DY", "DHY"}, + {"HV", "HVO"}, + {"JT", "JTN"}, + {"MI", "MID"}, + {"NH", "NHB"}, + {"NQ", "ATN"}, + {"PC", "PCI"}, + {"PU", "PUS"}, + {"PZ", "PCZ"}, + {"RH", "RHO"}, + {"VD", "VDR"}, + {"WK", "WAK"}, + // These three-letter codes are used for others as well. + {"FQ", "ATF"}, + } { + update(m.iso2, m.iso3) + } + for i, s := range regionISO.s { + if len(s) != 4 { + regionISO.s[i] = s + " " + } + } + b.writeConst("regionISO", tag.Index(regionISO.join())) + b.writeConst("altRegionISO3", altRegionISO3) + b.writeSlice("altRegionIDs", altRegionIDs) + + // Create list of deprecated regions. + // TODO: consider inserting SF -> FI. Not included by CLDR, but is the only + // Transitionally-reserved mapping not included. + regionOldMap := stringSet{} + // Include regions in territoryAlias (not all are in the IANA registry!) + for _, reg := range b.supp.Metadata.Alias.TerritoryAlias { + if len(reg.Type) == 2 && reg.Reason == "deprecated" && len(reg.Replacement) == 2 { + regionOldMap.add(reg.Type) + regionOldMap.updateLater(reg.Type, reg.Replacement) + i, _ := regionISO.find(reg.Type) + j, _ := regionISO.find(reg.Replacement) + if k := m49map[i+isoOffset]; k == 0 { + m49map[i+isoOffset] = m49map[j+isoOffset] + } + } + } + b.writeSortedMap("regionOldMap", ®ionOldMap, func(s string) uint16 { + return uint16(b.region.index(s)) + }) + // 3-digit region lookup, groupings. + for i := 1; i < isoOffset; i++ { + m := parseM49(b.region.s[i]) + m49map[i] = m + fromM49map[m] = i + } + b.writeSlice("m49", m49map) + + const ( + searchBits = 7 + regionBits = 9 + ) + if len(m49map) >= 1< %d", len(m49map), 1<>searchBits] = int16(len(fromM49)) + } + b.writeSlice("m49Index", m49Index) + b.writeSlice("fromM49", fromM49) +} + +const ( + // TODO: put these lists in regionTypes as user data? Could be used for + // various optimizations and refinements and could be exposed in the API. + iso3166Except = "AC CP DG EA EU FX IC SU TA UK" + iso3166Trans = "AN BU CS NT TP YU ZR" // SF is not in our set of Regions. + // DY and RH are actually not deleted, but indeterminately reserved. + iso3166DelCLDR = "CT DD DY FQ HV JT MI NH NQ PC PU PZ RH VD WK YD" +) + +const ( + iso3166UserAssigned = 1 << iota + ccTLD + bcp47Region +) + +func find(list []string, s string) int { + for i, t := range list { + if t == s { + return i + } + } + return -1 +} + +// writeVariants generates per-variant information and creates a map from variant +// name to index value. We assign index values such that sorting multiple +// variants by index value will result in the correct order. +// There are two types of variants: specialized and general. Specialized variants +// are only applicable to certain language or language-script pairs. Generalized +// variants apply to any language. Generalized variants always sort after +// specialized variants. We will therefore always assign a higher index value +// to a generalized variant than any other variant. Generalized variants are +// sorted alphabetically among themselves. +// Specialized variants may also sort after other specialized variants. Such +// variants will be ordered after any of the variants they may follow. +// We assume that if a variant x is followed by a variant y, then for any prefix +// p of x, p-x is a prefix of y. This allows us to order tags based on the +// maximum of the length of any of its prefixes. +// TODO: it is possible to define a set of Prefix values on variants such that +// a total order cannot be defined to the point that this algorithm breaks. +// In other words, we cannot guarantee the same order of variants for the +// future using the same algorithm or for non-compliant combinations of +// variants. For this reason, consider using simple alphabetic sorting +// of variants and ignore Prefix restrictions altogether. +func (b *builder) writeVariant() { + generalized := stringSet{} + specialized := stringSet{} + specializedExtend := stringSet{} + // Collate the variants by type and check assumptions. + for _, v := range b.variant.slice() { + e := b.registry[v] + if len(e.prefix) == 0 { + generalized.add(v) + continue + } + c := strings.Split(e.prefix[0], "-") + hasScriptOrRegion := false + if len(c) > 1 { + _, hasScriptOrRegion = b.script.find(c[1]) + if !hasScriptOrRegion { + _, hasScriptOrRegion = b.region.find(c[1]) + + } + } + if len(c) == 1 || len(c) == 2 && hasScriptOrRegion { + // Variant is preceded by a language. + specialized.add(v) + continue + } + // Variant is preceded by another variant. + specializedExtend.add(v) + prefix := c[0] + "-" + if hasScriptOrRegion { + prefix += c[1] + } + for _, p := range e.prefix { + // Verify that the prefix minus the last element is a prefix of the + // predecessor element. + i := strings.LastIndex(p, "-") + pred := b.registry[p[i+1:]] + if find(pred.prefix, p[:i]) < 0 { + log.Fatalf("prefix %q for variant %q not consistent with predecessor spec", p, v) + } + // The sorting used below does not work in the general case. It works + // if we assume that variants that may be followed by others only have + // prefixes of the same length. Verify this. + count := strings.Count(p[:i], "-") + for _, q := range pred.prefix { + if c := strings.Count(q, "-"); c != count { + log.Fatalf("variant %q preceding %q has a prefix %q of size %d; want %d", p[i+1:], v, q, c, count) + } + } + if !strings.HasPrefix(p, prefix) { + log.Fatalf("prefix %q of variant %q should start with %q", p, v, prefix) + } + } + } + + // Sort extended variants. + a := specializedExtend.s + less := func(v, w string) bool { + // Sort by the maximum number of elements. + maxCount := func(s string) (max int) { + for _, p := range b.registry[s].prefix { + if c := strings.Count(p, "-"); c > max { + max = c + } + } + return + } + if cv, cw := maxCount(v), maxCount(w); cv != cw { + return cv < cw + } + // Sort by name as tie breaker. + return v < w + } + sort.Sort(funcSorter{less, sort.StringSlice(a)}) + specializedExtend.frozen = true + + // Create index from variant name to index. + variantIndex := make(map[string]uint8) + add := func(s []string) { + for _, v := range s { + variantIndex[v] = uint8(len(variantIndex)) + } + } + add(specialized.slice()) + add(specializedExtend.s) + numSpecialized := len(variantIndex) + add(generalized.slice()) + if n := len(variantIndex); n > 255 { + log.Fatalf("maximum number of variants exceeded: was %d; want <= 255", n) + } + b.writeMap("variantIndex", variantIndex) + b.writeConst("variantNumSpecialized", numSpecialized) +} + +func (b *builder) writeLanguageInfo() { +} + +// writeLikelyData writes tables that are used both for finding parent relations and for +// language matching. Each entry contains additional bits to indicate the status of the +// data to know when it cannot be used for parent relations. +func (b *builder) writeLikelyData() { + const ( + isList = 1 << iota + scriptInFrom + regionInFrom + ) + type ( // generated types + likelyScriptRegion struct { + region uint16 + script uint8 + flags uint8 + } + likelyLangScript struct { + lang uint16 + script uint8 + flags uint8 + } + likelyLangRegion struct { + lang uint16 + region uint16 + } + // likelyTag is used for getting likely tags for group regions, where + // the likely region might be a region contained in the group. + likelyTag struct { + lang uint16 + region uint16 + script uint8 + } + ) + var ( // generated variables + likelyRegionGroup = make([]likelyTag, len(b.groups)) + likelyLang = make([]likelyScriptRegion, len(b.lang.s)) + likelyRegion = make([]likelyLangScript, len(b.region.s)) + likelyScript = make([]likelyLangRegion, len(b.script.s)) + likelyLangList = []likelyScriptRegion{} + likelyRegionList = []likelyLangScript{} + ) + type fromTo struct { + from, to []string + } + langToOther := map[int][]fromTo{} + regionToOther := map[int][]fromTo{} + for _, m := range b.supp.LikelySubtags.LikelySubtag { + from := strings.Split(m.From, "_") + to := strings.Split(m.To, "_") + if len(to) != 3 { + log.Fatalf("invalid number of subtags in %q: found %d, want 3", m.To, len(to)) + } + if len(from) > 3 { + log.Fatalf("invalid number of subtags: found %d, want 1-3", len(from)) + } + if from[0] != to[0] && from[0] != "und" { + log.Fatalf("unexpected language change in expansion: %s -> %s", from, to) + } + if len(from) == 3 { + if from[2] != to[2] { + log.Fatalf("unexpected region change in expansion: %s -> %s", from, to) + } + if from[0] != "und" { + log.Fatalf("unexpected fully specified from tag: %s -> %s", from, to) + } + } + if len(from) == 1 || from[0] != "und" { + id := 0 + if from[0] != "und" { + id = b.lang.index(from[0]) + } + langToOther[id] = append(langToOther[id], fromTo{from, to}) + } else if len(from) == 2 && len(from[1]) == 4 { + sid := b.script.index(from[1]) + likelyScript[sid].lang = uint16(b.langIndex(to[0])) + likelyScript[sid].region = uint16(b.region.index(to[2])) + } else { + r := b.region.index(from[len(from)-1]) + if id, ok := b.groups[r]; ok { + if from[0] != "und" { + log.Fatalf("region changed unexpectedly: %s -> %s", from, to) + } + likelyRegionGroup[id].lang = uint16(b.langIndex(to[0])) + likelyRegionGroup[id].script = uint8(b.script.index(to[1])) + likelyRegionGroup[id].region = uint16(b.region.index(to[2])) + } else { + regionToOther[r] = append(regionToOther[r], fromTo{from, to}) + } + } + } + b.writeType(likelyLangRegion{}) + b.writeSlice("likelyScript", likelyScript) + + for id := range b.lang.s { + list := langToOther[id] + if len(list) == 1 { + likelyLang[id].region = uint16(b.region.index(list[0].to[2])) + likelyLang[id].script = uint8(b.script.index(list[0].to[1])) + } else if len(list) > 1 { + likelyLang[id].flags = isList + likelyLang[id].region = uint16(len(likelyLangList)) + likelyLang[id].script = uint8(len(list)) + for _, x := range list { + flags := uint8(0) + if len(x.from) > 1 { + if x.from[1] == x.to[2] { + flags = regionInFrom + } else { + flags = scriptInFrom + } + } + likelyLangList = append(likelyLangList, likelyScriptRegion{ + region: uint16(b.region.index(x.to[2])), + script: uint8(b.script.index(x.to[1])), + flags: flags, + }) + } + } + } + // TODO: merge suppressScript data with this table. + b.writeType(likelyScriptRegion{}) + b.writeSlice("likelyLang", likelyLang) + b.writeSlice("likelyLangList", likelyLangList) + + for id := range b.region.s { + list := regionToOther[id] + if len(list) == 1 { + likelyRegion[id].lang = uint16(b.langIndex(list[0].to[0])) + likelyRegion[id].script = uint8(b.script.index(list[0].to[1])) + if len(list[0].from) > 2 { + likelyRegion[id].flags = scriptInFrom + } + } else if len(list) > 1 { + likelyRegion[id].flags = isList + likelyRegion[id].lang = uint16(len(likelyRegionList)) + likelyRegion[id].script = uint8(len(list)) + for i, x := range list { + if len(x.from) == 2 && i != 0 || i > 0 && len(x.from) != 3 { + log.Fatalf("unspecified script must be first in list: %v at %d", x.from, i) + } + x := likelyLangScript{ + lang: uint16(b.langIndex(x.to[0])), + script: uint8(b.script.index(x.to[1])), + } + if len(list[0].from) > 2 { + x.flags = scriptInFrom + } + likelyRegionList = append(likelyRegionList, x) + } + } + } + b.writeType(likelyLangScript{}) + b.writeSlice("likelyRegion", likelyRegion) + b.writeSlice("likelyRegionList", likelyRegionList) + + b.writeType(likelyTag{}) + b.writeSlice("likelyRegionGroup", likelyRegionGroup) +} + +func (b *builder) writeRegionInclusionData() { + var ( + // mm holds for each group the set of groups with a distance of 1. + mm = make(map[int][]index) + + // containment holds for each group the transitive closure of + // containment of other groups. + containment = make(map[index][]index) + ) + for _, g := range b.supp.TerritoryContainment.Group { + // Skip UN and EURO zone as they are flattening the containment + // relationship. + if g.Type == "EZ" || g.Type == "UN" { + continue + } + group := b.region.index(g.Type) + groupIdx := b.groups[group] + for _, mem := range strings.Split(g.Contains, " ") { + r := b.region.index(mem) + mm[r] = append(mm[r], groupIdx) + if g, ok := b.groups[r]; ok { + mm[group] = append(mm[group], g) + containment[groupIdx] = append(containment[groupIdx], g) + } + } + } + + regionContainment := make([]uint64, len(b.groups)) + for _, g := range b.groups { + l := containment[g] + + // Compute the transitive closure of containment. + for i := 0; i < len(l); i++ { + l = append(l, containment[l[i]]...) + } + + // Compute the bitmask. + regionContainment[g] = 1 << g + for _, v := range l { + regionContainment[g] |= 1 << v + } + } + b.writeSlice("regionContainment", regionContainment) + + regionInclusion := make([]uint8, len(b.region.s)) + bvs := make(map[uint64]index) + // Make the first bitvector positions correspond with the groups. + for r, i := range b.groups { + bv := uint64(1 << i) + for _, g := range mm[r] { + bv |= 1 << g + } + bvs[bv] = i + regionInclusion[r] = uint8(bvs[bv]) + } + for r := 1; r < len(b.region.s); r++ { + if _, ok := b.groups[r]; !ok { + bv := uint64(0) + for _, g := range mm[r] { + bv |= 1 << g + } + if bv == 0 { + // Pick the world for unspecified regions. + bv = 1 << b.groups[b.region.index("001")] + } + if _, ok := bvs[bv]; !ok { + bvs[bv] = index(len(bvs)) + } + regionInclusion[r] = uint8(bvs[bv]) + } + } + b.writeSlice("regionInclusion", regionInclusion) + regionInclusionBits := make([]uint64, len(bvs)) + for k, v := range bvs { + regionInclusionBits[v] = uint64(k) + } + // Add bit vectors for increasingly large distances until a fixed point is reached. + regionInclusionNext := []uint8{} + for i := 0; i < len(regionInclusionBits); i++ { + bits := regionInclusionBits[i] + next := bits + for i := uint(0); i < uint(len(b.groups)); i++ { + if bits&(1< 0 { + extra = extra[1:] + } + if t.equalTags(Und) && strings.HasPrefix(extra, "x-") { + t.str = extra + t.pVariant = 0 + t.pExt = 0 + return + } + var buf [max99thPercentileSize]byte // avoid extra memory allocation in most cases. + b := buf[:t.genCoreBytes(buf[:])] + if extra != "" { + diff := len(b) - int(t.pVariant) + b = append(b, '-') + b = append(b, extra...) + t.pVariant = uint8(int(t.pVariant) + diff) + t.pExt = uint16(int(t.pExt) + diff) + } else { + t.pVariant = uint8(len(b)) + t.pExt = uint16(len(b)) + } + t.str = string(b) +} + +// genCoreBytes writes a string for the base languages, script and region tags +// to the given buffer and returns the number of bytes written. It will never +// write more than maxCoreSize bytes. +func (t *Tag) genCoreBytes(buf []byte) int { + n := t.LangID.StringToBuf(buf[:]) + if t.ScriptID != 0 { + n += copy(buf[n:], "-") + n += copy(buf[n:], t.ScriptID.String()) + } + if t.RegionID != 0 { + n += copy(buf[n:], "-") + n += copy(buf[n:], t.RegionID.String()) + } + return n +} + +// String returns the canonical string representation of the language tag. +func (t Tag) String() string { + if t.str != "" { + return t.str + } + if t.ScriptID == 0 && t.RegionID == 0 { + return t.LangID.String() + } + buf := [maxCoreSize]byte{} + return string(buf[:t.genCoreBytes(buf[:])]) +} + +// MarshalText implements encoding.TextMarshaler. +func (t Tag) MarshalText() (text []byte, err error) { + if t.str != "" { + text = append(text, t.str...) + } else if t.ScriptID == 0 && t.RegionID == 0 { + text = append(text, t.LangID.String()...) + } else { + buf := [maxCoreSize]byte{} + text = buf[:t.genCoreBytes(buf[:])] + } + return text, nil +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (t *Tag) UnmarshalText(text []byte) error { + tag, err := Parse(string(text)) + *t = tag + return err +} + +// Variants returns the part of the tag holding all variants or the empty string +// if there are no variants defined. +func (t Tag) Variants() string { + if t.pVariant == 0 { + return "" + } + return t.str[t.pVariant:t.pExt] +} + +// VariantOrPrivateUseTags returns variants or private use tags. +func (t Tag) VariantOrPrivateUseTags() string { + if t.pExt > 0 { + return t.str[t.pVariant:t.pExt] + } + return t.str[t.pVariant:] +} + +// HasString reports whether this tag defines more than just the raw +// components. +func (t Tag) HasString() bool { + return t.str != "" +} + +// Parent returns the CLDR parent of t. In CLDR, missing fields in data for a +// specific language are substituted with fields from the parent language. +// The parent for a language may change for newer versions of CLDR. +func (t Tag) Parent() Tag { + if t.str != "" { + // Strip the variants and extensions. + b, s, r := t.Raw() + t = Tag{LangID: b, ScriptID: s, RegionID: r} + if t.RegionID == 0 && t.ScriptID != 0 && t.LangID != 0 { + base, _ := addTags(Tag{LangID: t.LangID}) + if base.ScriptID == t.ScriptID { + return Tag{LangID: t.LangID} + } + } + return t + } + if t.LangID != 0 { + if t.RegionID != 0 { + maxScript := t.ScriptID + if maxScript == 0 { + max, _ := addTags(t) + maxScript = max.ScriptID + } + + for i := range parents { + if Language(parents[i].lang) == t.LangID && Script(parents[i].maxScript) == maxScript { + for _, r := range parents[i].fromRegion { + if Region(r) == t.RegionID { + return Tag{ + LangID: t.LangID, + ScriptID: Script(parents[i].script), + RegionID: Region(parents[i].toRegion), + } + } + } + } + } + + // Strip the script if it is the default one. + base, _ := addTags(Tag{LangID: t.LangID}) + if base.ScriptID != maxScript { + return Tag{LangID: t.LangID, ScriptID: maxScript} + } + return Tag{LangID: t.LangID} + } else if t.ScriptID != 0 { + // The parent for an base-script pair with a non-default script is + // "und" instead of the base language. + base, _ := addTags(Tag{LangID: t.LangID}) + if base.ScriptID != t.ScriptID { + return Und + } + return Tag{LangID: t.LangID} + } + } + return Und +} + +// ParseExtension parses s as an extension and returns it on success. +func ParseExtension(s string) (ext string, err error) { + scan := makeScannerString(s) + var end int + if n := len(scan.token); n != 1 { + return "", ErrSyntax + } + scan.toLower(0, len(scan.b)) + end = parseExtension(&scan) + if end != len(s) { + return "", ErrSyntax + } + return string(scan.b), nil +} + +// HasVariants reports whether t has variants. +func (t Tag) HasVariants() bool { + return uint16(t.pVariant) < t.pExt +} + +// HasExtensions reports whether t has extensions. +func (t Tag) HasExtensions() bool { + return int(t.pExt) < len(t.str) +} + +// Extension returns the extension of type x for tag t. It will return +// false for ok if t does not have the requested extension. The returned +// extension will be invalid in this case. +func (t Tag) Extension(x byte) (ext string, ok bool) { + for i := int(t.pExt); i < len(t.str)-1; { + var ext string + i, ext = getExtension(t.str, i) + if ext[0] == x { + return ext, true + } + } + return "", false +} + +// Extensions returns all extensions of t. +func (t Tag) Extensions() []string { + e := []string{} + for i := int(t.pExt); i < len(t.str)-1; { + var ext string + i, ext = getExtension(t.str, i) + e = append(e, ext) + } + return e +} + +// TypeForKey returns the type associated with the given key, where key and type +// are of the allowed values defined for the Unicode locale extension ('u') in +// http://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers. +// TypeForKey will traverse the inheritance chain to get the correct value. +func (t Tag) TypeForKey(key string) string { + if start, end, _ := t.findTypeForKey(key); end != start { + return t.str[start:end] + } + return "" +} + +var ( + errPrivateUse = errors.New("cannot set a key on a private use tag") + errInvalidArguments = errors.New("invalid key or type") +) + +// SetTypeForKey returns a new Tag with the key set to type, where key and type +// are of the allowed values defined for the Unicode locale extension ('u') in +// http://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers. +// An empty value removes an existing pair with the same key. +func (t Tag) SetTypeForKey(key, value string) (Tag, error) { + if t.IsPrivateUse() { + return t, errPrivateUse + } + if len(key) != 2 { + return t, errInvalidArguments + } + + // Remove the setting if value is "". + if value == "" { + start, end, _ := t.findTypeForKey(key) + if start != end { + // Remove key tag and leading '-'. + start -= 4 + + // Remove a possible empty extension. + if (end == len(t.str) || t.str[end+2] == '-') && t.str[start-2] == '-' { + start -= 2 + } + if start == int(t.pVariant) && end == len(t.str) { + t.str = "" + t.pVariant, t.pExt = 0, 0 + } else { + t.str = fmt.Sprintf("%s%s", t.str[:start], t.str[end:]) + } + } + return t, nil + } + + if len(value) < 3 || len(value) > 8 { + return t, errInvalidArguments + } + + var ( + buf [maxCoreSize + maxSimpleUExtensionSize]byte + uStart int // start of the -u extension. + ) + + // Generate the tag string if needed. + if t.str == "" { + uStart = t.genCoreBytes(buf[:]) + buf[uStart] = '-' + uStart++ + } + + // Create new key-type pair and parse it to verify. + b := buf[uStart:] + copy(b, "u-") + copy(b[2:], key) + b[4] = '-' + b = b[:5+copy(b[5:], value)] + scan := makeScanner(b) + if parseExtensions(&scan); scan.err != nil { + return t, scan.err + } + + // Assemble the replacement string. + if t.str == "" { + t.pVariant, t.pExt = byte(uStart-1), uint16(uStart-1) + t.str = string(buf[:uStart+len(b)]) + } else { + s := t.str + start, end, hasExt := t.findTypeForKey(key) + if start == end { + if hasExt { + b = b[2:] + } + t.str = fmt.Sprintf("%s-%s%s", s[:start], b, s[end:]) + } else { + t.str = fmt.Sprintf("%s%s%s", s[:start], value, s[end:]) + } + } + return t, nil +} + +// findKeyAndType returns the start and end position for the type corresponding +// to key or the point at which to insert the key-value pair if the type +// wasn't found. The hasExt return value reports whether an -u extension was present. +// Note: the extensions are typically very small and are likely to contain +// only one key-type pair. +func (t Tag) findTypeForKey(key string) (start, end int, hasExt bool) { + p := int(t.pExt) + if len(key) != 2 || p == len(t.str) || p == 0 { + return p, p, false + } + s := t.str + + // Find the correct extension. + for p++; s[p] != 'u'; p++ { + if s[p] > 'u' { + p-- + return p, p, false + } + if p = nextExtension(s, p); p == len(s) { + return len(s), len(s), false + } + } + // Proceed to the hyphen following the extension name. + p++ + + // curKey is the key currently being processed. + curKey := "" + + // Iterate over keys until we get the end of a section. + for { + // p points to the hyphen preceding the current token. + if p3 := p + 3; s[p3] == '-' { + // Found a key. + // Check whether we just processed the key that was requested. + if curKey == key { + return start, p, true + } + // Set to the next key and continue scanning type tokens. + curKey = s[p+1 : p3] + if curKey > key { + return p, p, true + } + // Start of the type token sequence. + start = p + 4 + // A type is at least 3 characters long. + p += 7 // 4 + 3 + } else { + // Attribute or type, which is at least 3 characters long. + p += 4 + } + // p points past the third character of a type or attribute. + max := p + 5 // maximum length of token plus hyphen. + if len(s) < max { + max = len(s) + } + for ; p < max && s[p] != '-'; p++ { + } + // Bail if we have exhausted all tokens or if the next token starts + // a new extension. + if p == len(s) || s[p+2] == '-' { + if curKey == key { + return start, p, true + } + return p, p, true + } + } +} + +// ParseBase parses a 2- or 3-letter ISO 639 code. +// It returns a ValueError if s is a well-formed but unknown language identifier +// or another error if another error occurred. +func ParseBase(s string) (Language, error) { + if n := len(s); n < 2 || 3 < n { + return 0, ErrSyntax + } + var buf [3]byte + return getLangID(buf[:copy(buf[:], s)]) +} + +// ParseScript parses a 4-letter ISO 15924 code. +// It returns a ValueError if s is a well-formed but unknown script identifier +// or another error if another error occurred. +func ParseScript(s string) (Script, error) { + if len(s) != 4 { + return 0, ErrSyntax + } + var buf [4]byte + return getScriptID(script, buf[:copy(buf[:], s)]) +} + +// EncodeM49 returns the Region for the given UN M.49 code. +// It returns an error if r is not a valid code. +func EncodeM49(r int) (Region, error) { + return getRegionM49(r) +} + +// ParseRegion parses a 2- or 3-letter ISO 3166-1 or a UN M.49 code. +// It returns a ValueError if s is a well-formed but unknown region identifier +// or another error if another error occurred. +func ParseRegion(s string) (Region, error) { + if n := len(s); n < 2 || 3 < n { + return 0, ErrSyntax + } + var buf [3]byte + return getRegionID(buf[:copy(buf[:], s)]) +} + +// IsCountry returns whether this region is a country or autonomous area. This +// includes non-standard definitions from CLDR. +func (r Region) IsCountry() bool { + if r == 0 || r.IsGroup() || r.IsPrivateUse() && r != _XK { + return false + } + return true +} + +// IsGroup returns whether this region defines a collection of regions. This +// includes non-standard definitions from CLDR. +func (r Region) IsGroup() bool { + if r == 0 { + return false + } + return int(regionInclusion[r]) < len(regionContainment) +} + +// Contains returns whether Region c is contained by Region r. It returns true +// if c == r. +func (r Region) Contains(c Region) bool { + if r == c { + return true + } + g := regionInclusion[r] + if g >= nRegionGroups { + return false + } + m := regionContainment[g] + + d := regionInclusion[c] + b := regionInclusionBits[d] + + // A contained country may belong to multiple disjoint groups. Matching any + // of these indicates containment. If the contained region is a group, it + // must strictly be a subset. + if d >= nRegionGroups { + return b&m != 0 + } + return b&^m == 0 +} + +var errNoTLD = errors.New("language: region is not a valid ccTLD") + +// TLD returns the country code top-level domain (ccTLD). UK is returned for GB. +// In all other cases it returns either the region itself or an error. +// +// This method may return an error for a region for which there exists a +// canonical form with a ccTLD. To get that ccTLD canonicalize r first. The +// region will already be canonicalized it was obtained from a Tag that was +// obtained using any of the default methods. +func (r Region) TLD() (Region, error) { + // See http://en.wikipedia.org/wiki/Country_code_top-level_domain for the + // difference between ISO 3166-1 and IANA ccTLD. + if r == _GB { + r = _UK + } + if (r.typ() & ccTLD) == 0 { + return 0, errNoTLD + } + return r, nil +} + +// Canonicalize returns the region or a possible replacement if the region is +// deprecated. It will not return a replacement for deprecated regions that +// are split into multiple regions. +func (r Region) Canonicalize() Region { + if cr := normRegion(r); cr != 0 { + return cr + } + return r +} + +// Variant represents a registered variant of a language as defined by BCP 47. +type Variant struct { + ID uint8 + str string +} + +// ParseVariant parses and returns a Variant. An error is returned if s is not +// a valid variant. +func ParseVariant(s string) (Variant, error) { + s = strings.ToLower(s) + if id, ok := variantIndex[s]; ok { + return Variant{id, s}, nil + } + return Variant{}, NewValueError([]byte(s)) +} + +// String returns the string representation of the variant. +func (v Variant) String() string { + return v.str +} diff --git a/vendor/golang.org/x/text/internal/language/language_test.go b/vendor/golang.org/x/text/internal/language/language_test.go new file mode 100644 index 0000000..6c7c108 --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/language_test.go @@ -0,0 +1,736 @@ +// Copyright 2013 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. + +package language + +import ( + "reflect" + "testing" + + "golang.org/x/text/internal/testtext" +) + +func TestTagSize(t *testing.T) { + id := Tag{} + typ := reflect.TypeOf(id) + if typ.Size() > 24 { + t.Errorf("size of Tag was %d; want 24", typ.Size()) + } +} + +func TestIsRoot(t *testing.T) { + loc := Tag{} + if !loc.IsRoot() { + t.Errorf("unspecified should be root.") + } + for i, tt := range parseTests() { + loc, _ := Parse(tt.in) + undef := tt.lang == "und" && tt.script == "" && tt.region == "" && tt.ext == "" + if loc.IsRoot() != undef { + t.Errorf("%d: was %v; want %v", i, loc.IsRoot(), undef) + } + } +} + +func TestEquality(t *testing.T) { + for i, tt := range parseTests() { + s := tt.in + tag := Make(s) + t1 := Make(tag.String()) + if tag != t1 { + t.Errorf("%d:%s: equality test 1 failed\n got: %#v\nwant: %#v)", i, s, t1, tag) + } + } +} + +func TestMakeString(t *testing.T) { + tests := []struct{ in, out string }{ + {"und", "und"}, + {"und", "und-CW"}, + {"nl", "nl-NL"}, + {"de-1901", "nl-1901"}, + {"de-1901", "de-Arab-1901"}, + {"x-a-b", "de-Arab-x-a-b"}, + {"x-a-b", "x-a-b"}, + } + for i, tt := range tests { + id, _ := Parse(tt.in) + mod, _ := Parse(tt.out) + id.setTagsFrom(mod) + for j := 0; j < 2; j++ { + id.RemakeString() + if str := id.String(); str != tt.out { + t.Errorf("%d:%d: found %s; want %s", i, j, id.String(), tt.out) + } + } + // The bytes to string conversion as used in remakeString + // occasionally measures as more than one alloc, breaking this test. + // To alleviate this we set the number of runs to more than 1. + if n := testtext.AllocsPerRun(8, id.RemakeString); n > 1 { + t.Errorf("%d: # allocs got %.1f; want <= 1", i, n) + } + } +} + +func TestMarshal(t *testing.T) { + testCases := []string{ + // TODO: these values will change with each CLDR update. This issue + // will be solved if we decide to fix the indexes. + "und", + "ca-ES-valencia", + "ca-ES-valencia-u-va-posix", + "ca-ES-valencia-u-co-phonebk", + "ca-ES-valencia-u-co-phonebk-va-posix", + "x-klingon", + "en-US", + "en-US-u-va-posix", + "en", + "en-u-co-phonebk", + "en-001", + "sh", + } + for _, tc := range testCases { + var tag Tag + err := tag.UnmarshalText([]byte(tc)) + if err != nil { + t.Errorf("UnmarshalText(%q): unexpected error: %v", tc, err) + } + b, err := tag.MarshalText() + if err != nil { + t.Errorf("MarshalText(%q): unexpected error: %v", tc, err) + } + if got := string(b); got != tc { + t.Errorf("%s: got %q; want %q", tc, got, tc) + } + } +} + +func TestParseBase(t *testing.T) { + tests := []struct { + in string + out string + ok bool + }{ + {"en", "en", true}, + {"EN", "en", true}, + {"nld", "nl", true}, + {"dut", "dut", true}, // bibliographic + {"aaj", "und", false}, // unknown + {"qaa", "qaa", true}, + {"a", "und", false}, + {"", "und", false}, + {"aaaa", "und", false}, + } + for i, tt := range tests { + x, err := ParseBase(tt.in) + if x.String() != tt.out || err == nil != tt.ok { + t.Errorf("%d:%s: was %s, %v; want %s, %v", i, tt.in, x, err == nil, tt.out, tt.ok) + } + if y, _, _ := Make(tt.out).Raw(); x != y { + t.Errorf("%d:%s: tag was %s; want %s", i, tt.in, x, y) + } + } +} + +func TestParseScript(t *testing.T) { + tests := []struct { + in string + out string + ok bool + }{ + {"Latn", "Latn", true}, + {"zzzz", "Zzzz", true}, + {"zyyy", "Zyyy", true}, + {"Latm", "Zzzz", false}, + {"Zzz", "Zzzz", false}, + {"", "Zzzz", false}, + {"Zzzxx", "Zzzz", false}, + } + for i, tt := range tests { + x, err := ParseScript(tt.in) + if x.String() != tt.out || err == nil != tt.ok { + t.Errorf("%d:%s: was %s, %v; want %s, %v", i, tt.in, x, err == nil, tt.out, tt.ok) + } + if err == nil { + if _, y, _ := Make("und-" + tt.out).Raw(); x != y { + t.Errorf("%d:%s: tag was %s; want %s", i, tt.in, x, y) + } + } + } +} + +func TestEncodeM49(t *testing.T) { + tests := []struct { + m49 int + code string + ok bool + }{ + {1, "001", true}, + {840, "US", true}, + {899, "ZZ", false}, + } + for i, tt := range tests { + if r, err := EncodeM49(tt.m49); r.String() != tt.code || err == nil != tt.ok { + t.Errorf("%d:%d: was %s, %v; want %s, %v", i, tt.m49, r, err == nil, tt.code, tt.ok) + } + } + for i := 1; i <= 1000; i++ { + if r, err := EncodeM49(i); err == nil && r.M49() == 0 { + t.Errorf("%d has no error, but maps to undefined region", i) + } + } +} + +func TestParseRegion(t *testing.T) { + tests := []struct { + in string + out string + ok bool + }{ + {"001", "001", true}, + {"840", "US", true}, + {"899", "ZZ", false}, + {"USA", "US", true}, + {"US", "US", true}, + {"BC", "ZZ", false}, + {"C", "ZZ", false}, + {"CCCC", "ZZ", false}, + {"01", "ZZ", false}, + } + for i, tt := range tests { + r, err := ParseRegion(tt.in) + if r.String() != tt.out || err == nil != tt.ok { + t.Errorf("%d:%s: was %s, %v; want %s, %v", i, tt.in, r, err == nil, tt.out, tt.ok) + } + if err == nil { + if _, _, y := Make("und-" + tt.out).Raw(); r != y { + t.Errorf("%d:%s: tag was %s; want %s", i, tt.in, r, y) + } + } + } +} + +func TestIsCountry(t *testing.T) { + tests := []struct { + reg string + country bool + }{ + {"US", true}, + {"001", false}, + {"958", false}, + {"419", false}, + {"203", true}, + {"020", true}, + {"900", false}, + {"999", false}, + {"QO", false}, + {"EU", false}, + {"AA", false}, + {"XK", true}, + } + for i, tt := range tests { + r, _ := getRegionID([]byte(tt.reg)) + if r.IsCountry() != tt.country { + t.Errorf("%d: IsCountry(%s) was %v; want %v", i, tt.reg, r.IsCountry(), tt.country) + } + } +} + +func TestIsGroup(t *testing.T) { + tests := []struct { + reg string + group bool + }{ + {"US", false}, + {"001", true}, + {"958", false}, + {"419", true}, + {"203", false}, + {"020", false}, + {"900", false}, + {"999", false}, + {"QO", true}, + {"EU", true}, + {"AA", false}, + {"XK", false}, + } + for i, tt := range tests { + r, _ := getRegionID([]byte(tt.reg)) + if r.IsGroup() != tt.group { + t.Errorf("%d: IsGroup(%s) was %v; want %v", i, tt.reg, r.IsGroup(), tt.group) + } + } +} + +func TestContains(t *testing.T) { + tests := []struct { + enclosing, contained string + contains bool + }{ + // A region contains itself. + {"US", "US", true}, + {"001", "001", true}, + + // Direct containment. + {"001", "002", true}, + {"039", "XK", true}, + {"150", "XK", true}, + {"EU", "AT", true}, + {"QO", "AQ", true}, + + // Indirect containemnt. + {"001", "US", true}, + {"001", "419", true}, + {"001", "013", true}, + + // No containment. + {"US", "001", false}, + {"155", "EU", false}, + } + for i, tt := range tests { + enc, _ := getRegionID([]byte(tt.enclosing)) + con, _ := getRegionID([]byte(tt.contained)) + r := enc + if got := r.Contains(con); got != tt.contains { + t.Errorf("%d: %s.Contains(%s) was %v; want %v", i, tt.enclosing, tt.contained, got, tt.contains) + } + } +} + +func TestRegionCanonicalize(t *testing.T) { + for i, tt := range []struct{ in, out string }{ + {"UK", "GB"}, + {"TP", "TL"}, + {"QU", "EU"}, + {"SU", "SU"}, + {"VD", "VN"}, + {"DD", "DE"}, + } { + r := MustParseRegion(tt.in) + want := MustParseRegion(tt.out) + if got := r.Canonicalize(); got != want { + t.Errorf("%d: got %v; want %v", i, got, want) + } + } +} + +func TestRegionTLD(t *testing.T) { + for _, tt := range []struct { + in, out string + ok bool + }{ + {"EH", "EH", true}, + {"FR", "FR", true}, + {"TL", "TL", true}, + + // In ccTLD before in ISO. + {"GG", "GG", true}, + + // Non-standard assignment of ccTLD to ISO code. + {"GB", "UK", true}, + + // Exceptionally reserved in ISO and valid ccTLD. + {"UK", "UK", true}, + {"AC", "AC", true}, + {"EU", "EU", true}, + {"SU", "SU", true}, + + // Exceptionally reserved in ISO and invalid ccTLD. + {"CP", "ZZ", false}, + {"DG", "ZZ", false}, + {"EA", "ZZ", false}, + {"FX", "ZZ", false}, + {"IC", "ZZ", false}, + {"TA", "ZZ", false}, + + // Transitionally reserved in ISO (e.g. deprecated) but valid ccTLD as + // it is still being phased out. + {"AN", "AN", true}, + {"TP", "TP", true}, + + // Transitionally reserved in ISO (e.g. deprecated) and invalid ccTLD. + // Defined in package language as it has a mapping in CLDR. + {"BU", "ZZ", false}, + {"CS", "ZZ", false}, + {"NT", "ZZ", false}, + {"YU", "ZZ", false}, + {"ZR", "ZZ", false}, + // Not defined in package: SF. + + // Indeterminately reserved in ISO. + // Defined in package language as it has a legacy mapping in CLDR. + {"DY", "ZZ", false}, + {"RH", "ZZ", false}, + {"VD", "ZZ", false}, + // Not defined in package: EW, FL, JA, LF, PI, RA, RB, RC, RI, RL, RM, + // RN, RP, WG, WL, WV, and YV. + + // Not assigned in ISO, but legacy definitions in CLDR. + {"DD", "ZZ", false}, + {"YD", "ZZ", false}, + + // Normal mappings but somewhat special status in ccTLD. + {"BL", "BL", true}, + {"MF", "MF", true}, + {"BV", "BV", true}, + {"SJ", "SJ", true}, + + // Have values when normalized, but not as is. + {"QU", "ZZ", false}, + + // ISO Private Use. + {"AA", "ZZ", false}, + {"QM", "ZZ", false}, + {"QO", "ZZ", false}, + {"XA", "ZZ", false}, + {"XK", "ZZ", false}, // Sometimes used for Kosovo, but invalid ccTLD. + } { + if tt.in == "" { + continue + } + + r := MustParseRegion(tt.in) + var want Region + if tt.out != "ZZ" { + want = MustParseRegion(tt.out) + } + tld, err := r.TLD() + if got := err == nil; got != tt.ok { + t.Errorf("error(%v): got %v; want %v", r, got, tt.ok) + } + if tld != want { + t.Errorf("TLD(%v): got %v; want %v", r, tld, want) + } + } +} + +func TestTypeForKey(t *testing.T) { + tests := []struct{ key, in, out string }{ + {"co", "en", ""}, + {"co", "en-u-abc", ""}, + {"co", "en-u-co-phonebk", "phonebk"}, + {"co", "en-u-co-phonebk-cu-aud", "phonebk"}, + {"co", "x-foo-u-co-phonebk", ""}, + {"nu", "en-u-co-phonebk-nu-arabic", "arabic"}, + {"kc", "cmn-u-co-stroke", ""}, + } + for _, tt := range tests { + if v := Make(tt.in).TypeForKey(tt.key); v != tt.out { + t.Errorf("%q[%q]: was %q; want %q", tt.in, tt.key, v, tt.out) + } + } +} + +func TestSetTypeForKey(t *testing.T) { + tests := []struct { + key, value, in, out string + err bool + }{ + // replace existing value + {"co", "pinyin", "en-u-co-phonebk", "en-u-co-pinyin", false}, + {"co", "pinyin", "en-u-co-phonebk-cu-xau", "en-u-co-pinyin-cu-xau", false}, + {"co", "pinyin", "en-u-co-phonebk-v-xx", "en-u-co-pinyin-v-xx", false}, + {"co", "pinyin", "en-u-co-phonebk-x-x", "en-u-co-pinyin-x-x", false}, + {"nu", "arabic", "en-u-co-phonebk-nu-vaai", "en-u-co-phonebk-nu-arabic", false}, + // add to existing -u extension + {"co", "pinyin", "en-u-ca-gregory", "en-u-ca-gregory-co-pinyin", false}, + {"co", "pinyin", "en-u-ca-gregory-nu-vaai", "en-u-ca-gregory-co-pinyin-nu-vaai", false}, + {"co", "pinyin", "en-u-ca-gregory-v-va", "en-u-ca-gregory-co-pinyin-v-va", false}, + {"co", "pinyin", "en-u-ca-gregory-x-a", "en-u-ca-gregory-co-pinyin-x-a", false}, + {"ca", "gregory", "en-u-co-pinyin", "en-u-ca-gregory-co-pinyin", false}, + // remove pair + {"co", "", "en-u-co-phonebk", "en", false}, + {"co", "", "en-u-ca-gregory-co-phonebk", "en-u-ca-gregory", false}, + {"co", "", "en-u-co-phonebk-nu-arabic", "en-u-nu-arabic", false}, + {"co", "", "en", "en", false}, + // add -u extension + {"co", "pinyin", "en", "en-u-co-pinyin", false}, + {"co", "pinyin", "und", "und-u-co-pinyin", false}, + {"co", "pinyin", "en-a-aaa", "en-a-aaa-u-co-pinyin", false}, + {"co", "pinyin", "en-x-aaa", "en-u-co-pinyin-x-aaa", false}, + {"co", "pinyin", "en-v-aa", "en-u-co-pinyin-v-aa", false}, + {"co", "pinyin", "en-a-aaa-x-x", "en-a-aaa-u-co-pinyin-x-x", false}, + {"co", "pinyin", "en-a-aaa-v-va", "en-a-aaa-u-co-pinyin-v-va", false}, + // error on invalid values + {"co", "pinyinxxx", "en", "en", true}, + {"co", "piny.n", "en", "en", true}, + {"co", "pinyinxxx", "en-a-aaa", "en-a-aaa", true}, + {"co", "pinyinxxx", "en-u-aaa", "en-u-aaa", true}, + {"co", "pinyinxxx", "en-u-aaa-co-pinyin", "en-u-aaa-co-pinyin", true}, + {"co", "pinyi.", "en-u-aaa-co-pinyin", "en-u-aaa-co-pinyin", true}, + {"col", "pinyin", "en", "en", true}, + {"co", "cu", "en", "en", true}, + // error when setting on a private use tag + {"co", "phonebook", "x-foo", "x-foo", true}, + } + for i, tt := range tests { + tag := Make(tt.in) + if v, err := tag.SetTypeForKey(tt.key, tt.value); v.String() != tt.out { + t.Errorf("%d:%q[%q]=%q: was %q; want %q", i, tt.in, tt.key, tt.value, v, tt.out) + } else if (err != nil) != tt.err { + t.Errorf("%d:%q[%q]=%q: error was %v; want %v", i, tt.in, tt.key, tt.value, err != nil, tt.err) + } else if val := v.TypeForKey(tt.key); err == nil && val != tt.value { + t.Errorf("%d:%q[%q]==%q: was %v; want %v", i, tt.out, tt.key, tt.value, val, tt.value) + } + if len(tag.String()) <= 3 { + // Simulate a tag for which the string has not been set. + tag.str, tag.pExt, tag.pVariant = "", 0, 0 + if tag, err := tag.SetTypeForKey(tt.key, tt.value); err == nil { + if val := tag.TypeForKey(tt.key); err == nil && val != tt.value { + t.Errorf("%d:%q[%q]==%q: was %v; want %v", i, tt.out, tt.key, tt.value, val, tt.value) + } + } + } + } +} + +func TestFindKeyAndType(t *testing.T) { + // out is either the matched type in case of a match or the original + // string up till the insertion point. + tests := []struct { + key string + hasExt bool + in, out string + }{ + // Don't search past a private use extension. + {"co", false, "en-x-foo-u-co-pinyin", "en"}, + {"co", false, "x-foo-u-co-pinyin", ""}, + {"co", false, "en-s-fff-x-foo", "en-s-fff"}, + // Insertion points in absence of -u extension. + {"cu", false, "en", ""}, // t.str is "" + {"cu", false, "en-v-va", "en"}, + {"cu", false, "en-a-va", "en-a-va"}, + {"cu", false, "en-a-va-v-va", "en-a-va"}, + {"cu", false, "en-x-a", "en"}, + // Tags with the -u extension. + {"co", true, "en-u-co-standard", "standard"}, + {"co", true, "yue-u-co-pinyin", "pinyin"}, + {"co", true, "en-u-co-abc", "abc"}, + {"co", true, "en-u-co-abc-def", "abc-def"}, + {"co", true, "en-u-co-abc-def-x-foo", "abc-def"}, + {"co", true, "en-u-co-standard-nu-arab", "standard"}, + {"co", true, "yue-u-co-pinyin-nu-arab", "pinyin"}, + // Insertion points. + {"cu", true, "en-u-co-standard", "en-u-co-standard"}, + {"cu", true, "yue-u-co-pinyin-x-foo", "yue-u-co-pinyin"}, + {"cu", true, "en-u-co-abc", "en-u-co-abc"}, + {"cu", true, "en-u-nu-arabic", "en-u"}, + {"cu", true, "en-u-co-abc-def-nu-arabic", "en-u-co-abc-def"}, + } + for i, tt := range tests { + start, end, hasExt := Make(tt.in).findTypeForKey(tt.key) + if start != end { + res := tt.in[start:end] + if res != tt.out { + t.Errorf("%d:%s: was %q; want %q", i, tt.in, res, tt.out) + } + } else { + if hasExt != tt.hasExt { + t.Errorf("%d:%s: hasExt was %v; want %v", i, tt.in, hasExt, tt.hasExt) + continue + } + if tt.in[:start] != tt.out { + t.Errorf("%d:%s: insertion point was %q; want %q", i, tt.in, tt.in[:start], tt.out) + } + } + } +} + +func TestParent(t *testing.T) { + tests := []struct{ in, out string }{ + // Strip variants and extensions first + {"de-u-co-phonebk", "de"}, + {"de-1994", "de"}, + {"de-Latn-1994", "de"}, // remove superfluous script. + + // Ensure the canonical Tag for an entry is in the chain for base-script + // pairs. + {"zh-Hans", "zh"}, + + // Skip the script if it is the maximized version. CLDR files for the + // skipped tag are always empty. + {"zh-Hans-TW", "zh"}, + {"zh-Hans-CN", "zh"}, + + // Insert the script if the maximized script is not the same as the + // maximized script of the base language. + {"zh-TW", "zh-Hant"}, + {"zh-HK", "zh-Hant"}, + {"zh-Hant-TW", "zh-Hant"}, + {"zh-Hant-HK", "zh-Hant"}, + + // Non-default script skips to und. + // CLDR + {"az-Cyrl", "und"}, + {"bs-Cyrl", "und"}, + {"en-Dsrt", "und"}, + {"ha-Arab", "und"}, + {"mn-Mong", "und"}, + {"pa-Arab", "und"}, + {"shi-Latn", "und"}, + {"sr-Latn", "und"}, + {"uz-Arab", "und"}, + {"uz-Cyrl", "und"}, + {"vai-Latn", "und"}, + {"zh-Hant", "und"}, + // extra + {"nl-Cyrl", "und"}, + + // World english inherits from en-001. + {"en-150", "en-001"}, + {"en-AU", "en-001"}, + {"en-BE", "en-001"}, + {"en-GG", "en-001"}, + {"en-GI", "en-001"}, + {"en-HK", "en-001"}, + {"en-IE", "en-001"}, + {"en-IM", "en-001"}, + {"en-IN", "en-001"}, + {"en-JE", "en-001"}, + {"en-MT", "en-001"}, + {"en-NZ", "en-001"}, + {"en-PK", "en-001"}, + {"en-SG", "en-001"}, + + // Spanish in Latin-American countries have es-419 as parent. + {"es-AR", "es-419"}, + {"es-BO", "es-419"}, + {"es-CL", "es-419"}, + {"es-CO", "es-419"}, + {"es-CR", "es-419"}, + {"es-CU", "es-419"}, + {"es-DO", "es-419"}, + {"es-EC", "es-419"}, + {"es-GT", "es-419"}, + {"es-HN", "es-419"}, + {"es-MX", "es-419"}, + {"es-NI", "es-419"}, + {"es-PA", "es-419"}, + {"es-PE", "es-419"}, + {"es-PR", "es-419"}, + {"es-PY", "es-419"}, + {"es-SV", "es-419"}, + {"es-US", "es-419"}, + {"es-UY", "es-419"}, + {"es-VE", "es-419"}, + // exceptions (according to CLDR) + {"es-CW", "es"}, + + // Inherit from pt-PT, instead of pt for these countries. + {"pt-AO", "pt-PT"}, + {"pt-CV", "pt-PT"}, + {"pt-GW", "pt-PT"}, + {"pt-MO", "pt-PT"}, + {"pt-MZ", "pt-PT"}, + {"pt-ST", "pt-PT"}, + {"pt-TL", "pt-PT"}, + } + for _, tt := range tests { + tag := MustParse(tt.in) + if p := MustParse(tt.out); p != tag.Parent() { + t.Errorf("%s: was %v; want %v", tt.in, tag.Parent(), p) + } + } +} + +var ( + // Tags without error that don't need to be changed. + benchBasic = []string{ + "en", + "en-Latn", + "en-GB", + "za", + "zh-Hant", + "zh", + "zh-HK", + "ar-MK", + "en-CA", + "fr-CA", + "fr-CH", + "fr", + "lv", + "he-IT", + "tlh", + "ja", + "ja-Jpan", + "ja-Jpan-JP", + "de-1996", + "de-CH", + "sr", + "sr-Latn", + } + // Tags with extensions, not changes required. + benchExt = []string{ + "x-a-b-c-d", + "x-aa-bbbb-cccccccc-d", + "en-x_cc-b-bbb-a-aaa", + "en-c_cc-b-bbb-a-aaa-x-x", + "en-u-co-phonebk", + "en-Cyrl-u-co-phonebk", + "en-US-u-co-phonebk-cu-xau", + "en-nedix-u-co-phonebk", + "en-t-t0-abcd", + "en-t-nl-latn", + "en-t-t0-abcd-x-a", + } + // Change, but not memory allocation required. + benchSimpleChange = []string{ + "EN", + "i-klingon", + "en-latn", + "zh-cmn-Hans-CN", + "iw-NL", + } + // Change and memory allocation required. + benchChangeAlloc = []string{ + "en-c_cc-b-bbb-a-aaa", + "en-u-cu-xua-co-phonebk", + "en-u-cu-xua-co-phonebk-a-cd", + "en-u-def-abc-cu-xua-co-phonebk", + "en-t-en-Cyrl-NL-1994", + "en-t-en-Cyrl-NL-1994-t0-abc-def", + } + // Tags that result in errors. + benchErr = []string{ + // IllFormed + "x_A.-B-C_D", + "en-u-cu-co-phonebk", + "en-u-cu-xau-co", + "en-t-nl-abcd", + // Invalid + "xx", + "nl-Uuuu", + "nl-QB", + } + benchChange = append(benchSimpleChange, benchChangeAlloc...) + benchAll = append(append(append(benchBasic, benchExt...), benchChange...), benchErr...) +) + +func doParse(b *testing.B, tag []string) { + for i := 0; i < b.N; i++ { + // Use the modulo instead of looping over all tags so that we get a somewhat + // meaningful ns/op. + Parse(tag[i%len(tag)]) + } +} + +func BenchmarkParse(b *testing.B) { + doParse(b, benchAll) +} + +func BenchmarkParseBasic(b *testing.B) { + doParse(b, benchBasic) +} + +func BenchmarkParseError(b *testing.B) { + doParse(b, benchErr) +} + +func BenchmarkParseSimpleChange(b *testing.B) { + doParse(b, benchSimpleChange) +} + +func BenchmarkParseChangeAlloc(b *testing.B) { + doParse(b, benchChangeAlloc) +} diff --git a/vendor/golang.org/x/text/language/lookup.go b/vendor/golang.org/x/text/internal/language/lookup.go similarity index 80% rename from vendor/golang.org/x/text/language/lookup.go rename to vendor/golang.org/x/text/internal/language/lookup.go index 1d80ac3..6294b81 100644 --- a/vendor/golang.org/x/text/language/lookup.go +++ b/vendor/golang.org/x/text/internal/language/lookup.go @@ -17,11 +17,11 @@ import ( // if it could not be found. func findIndex(idx tag.Index, key []byte, form string) (index int, err error) { if !tag.FixCase(form, key) { - return 0, errSyntax + return 0, ErrSyntax } i := idx.Index(key) if i == -1 { - return 0, mkErrInvalid(key) + return 0, NewValueError(key) } return i, nil } @@ -32,38 +32,45 @@ func searchUint(imap []uint16, key uint16) int { }) } -type langID uint16 +type Language uint16 // getLangID returns the langID of s if s is a canonical subtag // or langUnknown if s is not a canonical subtag. -func getLangID(s []byte) (langID, error) { +func getLangID(s []byte) (Language, error) { if len(s) == 2 { return getLangISO2(s) } return getLangISO3(s) } +// TODO language normalization as well as the AliasMaps could be moved to the +// higher level package, but it is a bit tricky to separate the generation. + +func (id Language) Canonicalize() (Language, AliasType) { + return normLang(id) +} + // mapLang returns the mapped langID of id according to mapping m. -func normLang(id langID) (langID, langAliasType) { - k := sort.Search(len(langAliasMap), func(i int) bool { - return langAliasMap[i].from >= uint16(id) +func normLang(id Language) (Language, AliasType) { + k := sort.Search(len(AliasMap), func(i int) bool { + return AliasMap[i].From >= uint16(id) }) - if k < len(langAliasMap) && langAliasMap[k].from == uint16(id) { - return langID(langAliasMap[k].to), langAliasTypes[k] + if k < len(AliasMap) && AliasMap[k].From == uint16(id) { + return Language(AliasMap[k].To), AliasTypes[k] } - return id, langAliasTypeUnknown + return id, AliasTypeUnknown } // getLangISO2 returns the langID for the given 2-letter ISO language code // or unknownLang if this does not exist. -func getLangISO2(s []byte) (langID, error) { +func getLangISO2(s []byte) (Language, error) { if !tag.FixCase("zz", s) { - return 0, errSyntax + return 0, ErrSyntax } if i := lang.Index(s); i != -1 && lang.Elem(i)[3] != 0 { - return langID(i), nil + return Language(i), nil } - return 0, mkErrInvalid(s) + return 0, NewValueError(s) } const base = 'z' - 'a' + 1 @@ -88,7 +95,7 @@ func intToStr(v uint, s []byte) { // getLangISO3 returns the langID for the given 3-letter ISO language code // or unknownLang if this does not exist. -func getLangISO3(s []byte) (langID, error) { +func getLangISO3(s []byte) (Language, error) { if tag.FixCase("und", s) { // first try to match canonical 3-letter entries for i := lang.Index(s[:2]); i != -1; i = lang.Next(s[:2], i) { @@ -96,7 +103,7 @@ func getLangISO3(s []byte) (langID, error) { // We treat "und" as special and always translate it to "unspecified". // Note that ZZ and Zzzz are private use and are not treated as // unspecified by default. - id := langID(i) + id := Language(i) if id == nonCanonicalUnd { return 0, nil } @@ -104,26 +111,26 @@ func getLangISO3(s []byte) (langID, error) { } } if i := altLangISO3.Index(s); i != -1 { - return langID(altLangIndex[altLangISO3.Elem(i)[3]]), nil + return Language(altLangIndex[altLangISO3.Elem(i)[3]]), nil } n := strToInt(s) if langNoIndex[n/8]&(1<<(n%8)) != 0 { - return langID(n) + langNoIndexOffset, nil + return Language(n) + langNoIndexOffset, nil } // Check for non-canonical uses of ISO3. for i := lang.Index(s[:1]); i != -1; i = lang.Next(s[:1], i) { if e := lang.Elem(i); e[2] == s[1] && e[3] == s[2] { - return langID(i), nil + return Language(i), nil } } - return 0, mkErrInvalid(s) + return 0, NewValueError(s) } - return 0, errSyntax + return 0, ErrSyntax } -// stringToBuf writes the string to b and returns the number of bytes +// StringToBuf writes the string to b and returns the number of bytes // written. cap(b) must be >= 3. -func (id langID) stringToBuf(b []byte) int { +func (id Language) StringToBuf(b []byte) int { if id >= langNoIndexOffset { intToStr(uint(id)-langNoIndexOffset, b[:3]) return 3 @@ -140,7 +147,7 @@ func (id langID) stringToBuf(b []byte) int { // String returns the BCP 47 representation of the langID. // Use b as variable name, instead of id, to ensure the variable // used is consistent with that of Base in which this type is embedded. -func (b langID) String() string { +func (b Language) String() string { if b == 0 { return "und" } else if b >= langNoIndexOffset { @@ -157,7 +164,7 @@ func (b langID) String() string { } // ISO3 returns the ISO 639-3 language code. -func (b langID) ISO3() string { +func (b Language) ISO3() string { if b == 0 || b >= langNoIndexOffset { return b.String() } @@ -173,15 +180,24 @@ func (b langID) ISO3() string { } // IsPrivateUse reports whether this language code is reserved for private use. -func (b langID) IsPrivateUse() bool { +func (b Language) IsPrivateUse() bool { return langPrivateStart <= b && b <= langPrivateEnd } -type regionID uint16 +// SuppressScript returns the script marked as SuppressScript in the IANA +// language tag repository, or 0 if there is no such script. +func (b Language) SuppressScript() Script { + if b < langNoIndexOffset { + return Script(suppressScript[b]) + } + return 0 +} + +type Region uint16 // getRegionID returns the region id for s if s is a valid 2-letter region code // or unknownRegion. -func getRegionID(s []byte) (regionID, error) { +func getRegionID(s []byte) (Region, error) { if len(s) == 3 { if isAlpha(s[0]) { return getRegionISO3(s) @@ -195,34 +211,34 @@ func getRegionID(s []byte) (regionID, error) { // getRegionISO2 returns the regionID for the given 2-letter ISO country code // or unknownRegion if this does not exist. -func getRegionISO2(s []byte) (regionID, error) { +func getRegionISO2(s []byte) (Region, error) { i, err := findIndex(regionISO, s, "ZZ") if err != nil { return 0, err } - return regionID(i) + isoRegionOffset, nil + return Region(i) + isoRegionOffset, nil } // getRegionISO3 returns the regionID for the given 3-letter ISO country code // or unknownRegion if this does not exist. -func getRegionISO3(s []byte) (regionID, error) { +func getRegionISO3(s []byte) (Region, error) { if tag.FixCase("ZZZ", s) { for i := regionISO.Index(s[:1]); i != -1; i = regionISO.Next(s[:1], i) { if e := regionISO.Elem(i); e[2] == s[1] && e[3] == s[2] { - return regionID(i) + isoRegionOffset, nil + return Region(i) + isoRegionOffset, nil } } for i := 0; i < len(altRegionISO3); i += 3 { if tag.Compare(altRegionISO3[i:i+3], s) == 0 { - return regionID(altRegionIDs[i/3]), nil + return Region(altRegionIDs[i/3]), nil } } - return 0, mkErrInvalid(s) + return 0, NewValueError(s) } - return 0, errSyntax + return 0, ErrSyntax } -func getRegionM49(n int) (regionID, error) { +func getRegionM49(n int) (Region, error) { if 0 < n && n <= 999 { const ( searchBits = 7 @@ -236,7 +252,7 @@ func getRegionM49(n int) (regionID, error) { return buf[i] >= val }) if r := fromM49[int(m49Index[idx])+i]; r&^regionMask == val { - return regionID(r & regionMask), nil + return Region(r & regionMask), nil } } var e ValueError @@ -247,13 +263,13 @@ func getRegionM49(n int) (regionID, error) { // normRegion returns a region if r is deprecated or 0 otherwise. // TODO: consider supporting BYS (-> BLR), CSK (-> 200 or CZ), PHI (-> PHL) and AFI (-> DJ). // TODO: consider mapping split up regions to new most populous one (like CLDR). -func normRegion(r regionID) regionID { +func normRegion(r Region) Region { m := regionOldMap k := sort.Search(len(m), func(i int) bool { - return m[i].from >= uint16(r) + return m[i].From >= uint16(r) }) - if k < len(m) && m[k].from == uint16(r) { - return regionID(m[k].to) + if k < len(m) && m[k].From == uint16(r) { + return Region(m[k].To) } return 0 } @@ -264,13 +280,13 @@ const ( bcp47Region ) -func (r regionID) typ() byte { +func (r Region) typ() byte { return regionTypes[r] } // String returns the BCP 47 representation for the region. // It returns "ZZ" for an unspecified region. -func (r regionID) String() string { +func (r Region) String() string { if r < isoRegionOffset { if r == 0 { return "ZZ" @@ -284,7 +300,7 @@ func (r regionID) String() string { // ISO3 returns the 3-letter ISO code of r. // Note that not all regions have a 3-letter ISO code. // In such cases this method returns "ZZZ". -func (r regionID) ISO3() string { +func (r Region) ISO3() string { if r < isoRegionOffset { return "ZZZ" } @@ -301,29 +317,29 @@ func (r regionID) ISO3() string { // M49 returns the UN M.49 encoding of r, or 0 if this encoding // is not defined for r. -func (r regionID) M49() int { +func (r Region) M49() int { return int(m49[r]) } // IsPrivateUse reports whether r has the ISO 3166 User-assigned status. This // may include private-use tags that are assigned by CLDR and used in this // implementation. So IsPrivateUse and IsCountry can be simultaneously true. -func (r regionID) IsPrivateUse() bool { +func (r Region) IsPrivateUse() bool { return r.typ()&iso3166UserAssigned != 0 } -type scriptID uint8 +type Script uint8 // getScriptID returns the script id for string s. It assumes that s // is of the format [A-Z][a-z]{3}. -func getScriptID(idx tag.Index, s []byte) (scriptID, error) { +func getScriptID(idx tag.Index, s []byte) (Script, error) { i, err := findIndex(idx, s, "Zzzz") - return scriptID(i), err + return Script(i), err } // String returns the script code in title case. // It returns "Zzzz" for an unspecified script. -func (s scriptID) String() string { +func (s Script) String() string { if s == 0 { return "Zzzz" } @@ -331,7 +347,7 @@ func (s scriptID) String() string { } // IsPrivateUse reports whether this script code is reserved for private use. -func (s scriptID) IsPrivateUse() bool { +func (s Script) IsPrivateUse() bool { return _Qaaa <= s && s <= _Qabx } @@ -389,7 +405,7 @@ func grandfathered(s [maxAltTaglen]byte) (t Tag, ok bool) { if v < 0 { return Make(altTags[altTagIndex[-v-1]:altTagIndex[-v]]), true } - t.lang = langID(v) + t.LangID = Language(v) return t, true } return t, false diff --git a/vendor/golang.org/x/text/language/lookup_test.go b/vendor/golang.org/x/text/internal/language/lookup_test.go similarity index 96% rename from vendor/golang.org/x/text/language/lookup_test.go rename to vendor/golang.org/x/text/internal/language/lookup_test.go index 9833830..5b93acb 100644 --- a/vendor/golang.org/x/text/language/lookup_test.go +++ b/vendor/golang.org/x/text/internal/language/lookup_test.go @@ -19,11 +19,11 @@ func TestLangID(t *testing.T) { id, bcp47, iso3, norm string err error }{ - {id: "", bcp47: "und", iso3: "und", err: errSyntax}, - {id: " ", bcp47: "und", iso3: "und", err: errSyntax}, - {id: " ", bcp47: "und", iso3: "und", err: errSyntax}, - {id: " ", bcp47: "und", iso3: "und", err: errSyntax}, - {id: "xxx", bcp47: "und", iso3: "und", err: mkErrInvalid([]byte("xxx"))}, + {id: "", bcp47: "und", iso3: "und", err: ErrSyntax}, + {id: " ", bcp47: "und", iso3: "und", err: ErrSyntax}, + {id: " ", bcp47: "und", iso3: "und", err: ErrSyntax}, + {id: " ", bcp47: "und", iso3: "und", err: ErrSyntax}, + {id: "xxx", bcp47: "und", iso3: "und", err: NewValueError([]byte("xxx"))}, {id: "und", bcp47: "und", iso3: "und"}, {id: "aju", bcp47: "aju", iso3: "aju", norm: "jrb"}, {id: "jrb", bcp47: "jrb", iso3: "jrb"}, @@ -121,8 +121,8 @@ func TestGrandfathered(t *testing.T) { {"en_us_posix", "en-US-u-va-posix"}, {"en-us-posix", "en-US-u-va-posix"}, } { - got := Raw.Make(tt.in) - want := Raw.MustParse(tt.out) + got := Make(tt.in) + want := MustParse(tt.out) if got != want { t.Errorf("%s: got %q; want %q", tt.in, got, want) } @@ -370,7 +370,7 @@ func TestGetScriptID(t *testing.T) { idx := tag.Index("0000BbbbDdddEeeeZzzz\xff\xff\xff\xff") tests := []struct { in string - out scriptID + out Script }{ {" ", 0}, {" ", 0}, diff --git a/vendor/golang.org/x/text/internal/language/match.go b/vendor/golang.org/x/text/internal/language/match.go new file mode 100644 index 0000000..75a2dbc --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/match.go @@ -0,0 +1,226 @@ +// Copyright 2013 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. + +package language + +import "errors" + +type scriptRegionFlags uint8 + +const ( + isList = 1 << iota + scriptInFrom + regionInFrom +) + +func (t *Tag) setUndefinedLang(id Language) { + if t.LangID == 0 { + t.LangID = id + } +} + +func (t *Tag) setUndefinedScript(id Script) { + if t.ScriptID == 0 { + t.ScriptID = id + } +} + +func (t *Tag) setUndefinedRegion(id Region) { + if t.RegionID == 0 || t.RegionID.Contains(id) { + t.RegionID = id + } +} + +// ErrMissingLikelyTagsData indicates no information was available +// to compute likely values of missing tags. +var ErrMissingLikelyTagsData = errors.New("missing likely tags data") + +// addLikelySubtags sets subtags to their most likely value, given the locale. +// In most cases this means setting fields for unknown values, but in some +// cases it may alter a value. It returns an ErrMissingLikelyTagsData error +// if the given locale cannot be expanded. +func (t Tag) addLikelySubtags() (Tag, error) { + id, err := addTags(t) + if err != nil { + return t, err + } else if id.equalTags(t) { + return t, nil + } + id.RemakeString() + return id, nil +} + +// specializeRegion attempts to specialize a group region. +func specializeRegion(t *Tag) bool { + if i := regionInclusion[t.RegionID]; i < nRegionGroups { + x := likelyRegionGroup[i] + if Language(x.lang) == t.LangID && Script(x.script) == t.ScriptID { + t.RegionID = Region(x.region) + } + return true + } + return false +} + +// Maximize returns a new tag with missing tags filled in. +func (t Tag) Maximize() (Tag, error) { + return addTags(t) +} + +func addTags(t Tag) (Tag, error) { + // We leave private use identifiers alone. + if t.IsPrivateUse() { + return t, nil + } + if t.ScriptID != 0 && t.RegionID != 0 { + if t.LangID != 0 { + // already fully specified + specializeRegion(&t) + return t, nil + } + // Search matches for und-script-region. Note that for these cases + // region will never be a group so there is no need to check for this. + list := likelyRegion[t.RegionID : t.RegionID+1] + if x := list[0]; x.flags&isList != 0 { + list = likelyRegionList[x.lang : x.lang+uint16(x.script)] + } + for _, x := range list { + // Deviating from the spec. See match_test.go for details. + if Script(x.script) == t.ScriptID { + t.setUndefinedLang(Language(x.lang)) + return t, nil + } + } + } + if t.LangID != 0 { + // Search matches for lang-script and lang-region, where lang != und. + if t.LangID < langNoIndexOffset { + x := likelyLang[t.LangID] + if x.flags&isList != 0 { + list := likelyLangList[x.region : x.region+uint16(x.script)] + if t.ScriptID != 0 { + for _, x := range list { + if Script(x.script) == t.ScriptID && x.flags&scriptInFrom != 0 { + t.setUndefinedRegion(Region(x.region)) + return t, nil + } + } + } else if t.RegionID != 0 { + count := 0 + goodScript := true + tt := t + for _, x := range list { + // We visit all entries for which the script was not + // defined, including the ones where the region was not + // defined. This allows for proper disambiguation within + // regions. + if x.flags&scriptInFrom == 0 && t.RegionID.Contains(Region(x.region)) { + tt.RegionID = Region(x.region) + tt.setUndefinedScript(Script(x.script)) + goodScript = goodScript && tt.ScriptID == Script(x.script) + count++ + } + } + if count == 1 { + return tt, nil + } + // Even if we fail to find a unique Region, we might have + // an unambiguous script. + if goodScript { + t.ScriptID = tt.ScriptID + } + } + } + } + } else { + // Search matches for und-script. + if t.ScriptID != 0 { + x := likelyScript[t.ScriptID] + if x.region != 0 { + t.setUndefinedRegion(Region(x.region)) + t.setUndefinedLang(Language(x.lang)) + return t, nil + } + } + // Search matches for und-region. If und-script-region exists, it would + // have been found earlier. + if t.RegionID != 0 { + if i := regionInclusion[t.RegionID]; i < nRegionGroups { + x := likelyRegionGroup[i] + if x.region != 0 { + t.setUndefinedLang(Language(x.lang)) + t.setUndefinedScript(Script(x.script)) + t.RegionID = Region(x.region) + } + } else { + x := likelyRegion[t.RegionID] + if x.flags&isList != 0 { + x = likelyRegionList[x.lang] + } + if x.script != 0 && x.flags != scriptInFrom { + t.setUndefinedLang(Language(x.lang)) + t.setUndefinedScript(Script(x.script)) + return t, nil + } + } + } + } + + // Search matches for lang. + if t.LangID < langNoIndexOffset { + x := likelyLang[t.LangID] + if x.flags&isList != 0 { + x = likelyLangList[x.region] + } + if x.region != 0 { + t.setUndefinedScript(Script(x.script)) + t.setUndefinedRegion(Region(x.region)) + } + specializeRegion(&t) + if t.LangID == 0 { + t.LangID = _en // default language + } + return t, nil + } + return t, ErrMissingLikelyTagsData +} + +func (t *Tag) setTagsFrom(id Tag) { + t.LangID = id.LangID + t.ScriptID = id.ScriptID + t.RegionID = id.RegionID +} + +// minimize removes the region or script subtags from t such that +// t.addLikelySubtags() == t.minimize().addLikelySubtags(). +func (t Tag) minimize() (Tag, error) { + t, err := minimizeTags(t) + if err != nil { + return t, err + } + t.RemakeString() + return t, nil +} + +// minimizeTags mimics the behavior of the ICU 51 C implementation. +func minimizeTags(t Tag) (Tag, error) { + if t.equalTags(Und) { + return t, nil + } + max, err := addTags(t) + if err != nil { + return t, err + } + for _, id := range [...]Tag{ + {LangID: t.LangID}, + {LangID: t.LangID, RegionID: t.RegionID}, + {LangID: t.LangID, ScriptID: t.ScriptID}, + } { + if x, err := addTags(id); err == nil && max.equalTags(x) { + t.setTagsFrom(id) + break + } + } + return t, nil +} diff --git a/vendor/golang.org/x/text/internal/language/match_test.go b/vendor/golang.org/x/text/internal/language/match_test.go new file mode 100644 index 0000000..e1a5bd7 --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/match_test.go @@ -0,0 +1,161 @@ +// Copyright 2013 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. + +package language + +import ( + "flag" + "testing" +) + +var verbose = flag.Bool("verbose", false, "set to true to print the internal tables of matchers") + +func TestAddLikelySubtags(t *testing.T) { + tests := []struct{ in, out string }{ + {"aa", "aa-Latn-ET"}, + {"aa-Latn", "aa-Latn-ET"}, + {"aa-Arab", "aa-Arab-ET"}, + {"aa-Arab-ER", "aa-Arab-ER"}, + {"kk", "kk-Cyrl-KZ"}, + {"kk-CN", "kk-Arab-CN"}, + {"cmn", "cmn"}, + {"zh-AU", "zh-Hant-AU"}, + {"zh-VN", "zh-Hant-VN"}, + {"zh-SG", "zh-Hans-SG"}, + {"zh-Hant", "zh-Hant-TW"}, + {"zh-Hani", "zh-Hani-CN"}, + {"und-Hani", "zh-Hani-CN"}, + {"und", "en-Latn-US"}, + {"und-GB", "en-Latn-GB"}, + {"und-CW", "pap-Latn-CW"}, + {"und-YT", "fr-Latn-YT"}, + {"und-Arab", "ar-Arab-EG"}, + {"und-AM", "hy-Armn-AM"}, + {"und-TW", "zh-Hant-TW"}, + {"und-002", "en-Latn-NG"}, + {"und-Latn-002", "en-Latn-NG"}, + {"en-Latn-002", "en-Latn-NG"}, + {"en-002", "en-Latn-NG"}, + {"en-001", "en-Latn-US"}, + {"und-003", "en-Latn-US"}, + {"und-GB", "en-Latn-GB"}, + {"Latn-001", "en-Latn-US"}, + {"en-001", "en-Latn-US"}, + {"es-419", "es-Latn-419"}, + {"he-145", "he-Hebr-IL"}, + {"ky-145", "ky-Latn-TR"}, + {"kk", "kk-Cyrl-KZ"}, + // Don't specialize duplicate and ambiguous matches. + {"kk-034", "kk-Arab-034"}, // Matches IR and AF. Both are Arab. + {"ku-145", "ku-Latn-TR"}, // Matches IQ, TR, and LB, but kk -> TR. + {"und-Arab-CC", "ms-Arab-CC"}, + {"und-Arab-GB", "ks-Arab-GB"}, + {"und-Hans-CC", "zh-Hans-CC"}, + {"und-CC", "en-Latn-CC"}, + {"sr", "sr-Cyrl-RS"}, + {"sr-151", "sr-Latn-151"}, // Matches RO and RU. + // We would like addLikelySubtags to generate the same results if the input + // only changes by adding tags that would otherwise have been added + // by the expansion. + // In other words: + // und-AA -> xx-Scrp-AA implies und-Scrp-AA -> xx-Scrp-AA + // und-AA -> xx-Scrp-AA implies xx-AA -> xx-Scrp-AA + // und-Scrp -> xx-Scrp-AA implies und-Scrp-AA -> xx-Scrp-AA + // und-Scrp -> xx-Scrp-AA implies xx-Scrp -> xx-Scrp-AA + // xx -> xx-Scrp-AA implies xx-Scrp -> xx-Scrp-AA + // xx -> xx-Scrp-AA implies xx-AA -> xx-Scrp-AA + // + // The algorithm specified in + // http://unicode.org/reports/tr35/tr35-9.html#Supplemental_Data, + // Section C.10, does not handle the first case. For example, + // the CLDR data contains an entry und-BJ -> fr-Latn-BJ, but not + // there is no rule for und-Latn-BJ. According to spec, und-Latn-BJ + // would expand to en-Latn-BJ, violating the aforementioned principle. + // We deviate from the spec by letting und-Scrp-AA expand to xx-Scrp-AA + // if a rule of the form und-AA -> xx-Scrp-AA is defined. + // Note that as of version 23, CLDR has some explicitly specified + // entries that do not conform to these rules. The implementation + // will not correct these explicit inconsistencies. A later versions of CLDR + // is supposed to fix this. + {"und-Latn-BJ", "fr-Latn-BJ"}, + {"und-Bugi-ID", "bug-Bugi-ID"}, + // regions, scripts and languages without definitions + {"und-Arab-AA", "ar-Arab-AA"}, + {"und-Afak-RE", "fr-Afak-RE"}, + {"und-Arab-GB", "ks-Arab-GB"}, + {"abp-Arab-GB", "abp-Arab-GB"}, + // script has preference over region + {"und-Arab-NL", "ar-Arab-NL"}, + {"zza", "zza-Latn-TR"}, + // preserve variants and extensions + {"de-1901", "de-Latn-DE-1901"}, + {"de-x-abc", "de-Latn-DE-x-abc"}, + {"de-1901-x-abc", "de-Latn-DE-1901-x-abc"}, + {"x-abc", "x-abc"}, // TODO: is this the desired behavior? + } + for i, tt := range tests { + in, _ := Parse(tt.in) + out, _ := Parse(tt.out) + in, _ = in.addLikelySubtags() + if in.String() != out.String() { + t.Errorf("%d: add(%s) was %s; want %s", i, tt.in, in, tt.out) + } + } +} +func TestMinimize(t *testing.T) { + tests := []struct{ in, out string }{ + {"aa", "aa"}, + {"aa-Latn", "aa"}, + {"aa-Latn-ET", "aa"}, + {"aa-ET", "aa"}, + {"aa-Arab", "aa-Arab"}, + {"aa-Arab-ER", "aa-Arab-ER"}, + {"aa-Arab-ET", "aa-Arab"}, + {"und", "und"}, + {"und-Latn", "und"}, + {"und-Latn-US", "und"}, + {"en-Latn-US", "en"}, + {"cmn", "cmn"}, + {"cmn-Hans", "cmn-Hans"}, + {"cmn-Hant", "cmn-Hant"}, + {"zh-AU", "zh-AU"}, + {"zh-VN", "zh-VN"}, + {"zh-SG", "zh-SG"}, + {"zh-Hant", "zh-Hant"}, + {"zh-Hant-TW", "zh-TW"}, + {"zh-Hans", "zh"}, + {"zh-Hani", "zh-Hani"}, + {"und-Hans", "und-Hans"}, + {"und-Hani", "und-Hani"}, + + {"und-CW", "und-CW"}, + {"und-YT", "und-YT"}, + {"und-Arab", "und-Arab"}, + {"und-AM", "und-AM"}, + {"und-Arab-CC", "und-Arab-CC"}, + {"und-CC", "und-CC"}, + {"und-Latn-BJ", "und-BJ"}, + {"und-Bugi-ID", "und-Bugi"}, + {"bug-Bugi-ID", "bug-Bugi"}, + // regions, scripts and languages without definitions + {"und-Arab-AA", "und-Arab-AA"}, + // preserve variants and extensions + {"de-Latn-1901", "de-1901"}, + {"de-Latn-x-abc", "de-x-abc"}, + {"de-DE-1901-x-abc", "de-1901-x-abc"}, + {"x-abc", "x-abc"}, // TODO: is this the desired behavior? + } + for i, tt := range tests { + in, _ := Parse(tt.in) + out, _ := Parse(tt.out) + min, _ := in.minimize() + if min.String() != out.String() { + t.Errorf("%d: min(%s) was %s; want %s", i, tt.in, min, tt.out) + } + max, _ := min.addLikelySubtags() + if x, _ := in.addLikelySubtags(); x.String() != max.String() { + t.Errorf("%d: max(min(%s)) = %s; want %s", i, tt.in, max, x) + } + } +} diff --git a/vendor/golang.org/x/text/internal/language/parse.go b/vendor/golang.org/x/text/internal/language/parse.go new file mode 100644 index 0000000..3c48288 --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/parse.go @@ -0,0 +1,594 @@ +// Copyright 2013 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. + +package language + +import ( + "bytes" + "errors" + "fmt" + "sort" + + "golang.org/x/text/internal/tag" +) + +// isAlpha returns true if the byte is not a digit. +// b must be an ASCII letter or digit. +func isAlpha(b byte) bool { + return b > '9' +} + +// isAlphaNum returns true if the string contains only ASCII letters or digits. +func isAlphaNum(s []byte) bool { + for _, c := range s { + if !('a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' || '0' <= c && c <= '9') { + return false + } + } + return true +} + +// ErrSyntax is returned by any of the parsing functions when the +// input is not well-formed, according to BCP 47. +// TODO: return the position at which the syntax error occurred? +var ErrSyntax = errors.New("language: tag is not well-formed") + +// ErrDuplicateKey is returned when a tag contains the same key twice with +// different values in the -u section. +var ErrDuplicateKey = errors.New("language: different values for same key in -u extension") + +// ValueError is returned by any of the parsing functions when the +// input is well-formed but the respective subtag is not recognized +// as a valid value. +type ValueError struct { + v [8]byte +} + +// NewValueError creates a new ValueError. +func NewValueError(tag []byte) ValueError { + var e ValueError + copy(e.v[:], tag) + return e +} + +func (e ValueError) tag() []byte { + n := bytes.IndexByte(e.v[:], 0) + if n == -1 { + n = 8 + } + return e.v[:n] +} + +// Error implements the error interface. +func (e ValueError) Error() string { + return fmt.Sprintf("language: subtag %q is well-formed but unknown", e.tag()) +} + +// Subtag returns the subtag for which the error occurred. +func (e ValueError) Subtag() string { + return string(e.tag()) +} + +// scanner is used to scan BCP 47 tokens, which are separated by _ or -. +type scanner struct { + b []byte + bytes [max99thPercentileSize]byte + token []byte + start int // start position of the current token + end int // end position of the current token + next int // next point for scan + err error + done bool +} + +func makeScannerString(s string) scanner { + scan := scanner{} + if len(s) <= len(scan.bytes) { + scan.b = scan.bytes[:copy(scan.bytes[:], s)] + } else { + scan.b = []byte(s) + } + scan.init() + return scan +} + +// makeScanner returns a scanner using b as the input buffer. +// b is not copied and may be modified by the scanner routines. +func makeScanner(b []byte) scanner { + scan := scanner{b: b} + scan.init() + return scan +} + +func (s *scanner) init() { + for i, c := range s.b { + if c == '_' { + s.b[i] = '-' + } + } + s.scan() +} + +// restToLower converts the string between start and end to lower case. +func (s *scanner) toLower(start, end int) { + for i := start; i < end; i++ { + c := s.b[i] + if 'A' <= c && c <= 'Z' { + s.b[i] += 'a' - 'A' + } + } +} + +func (s *scanner) setError(e error) { + if s.err == nil || (e == ErrSyntax && s.err != ErrSyntax) { + s.err = e + } +} + +// resizeRange shrinks or grows the array at position oldStart such that +// a new string of size newSize can fit between oldStart and oldEnd. +// Sets the scan point to after the resized range. +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) + copy(b, s.b[:oldStart]) + copy(b[end:], s.b[oldEnd:]) + s.b = b + } else { + s.b = append(s.b[end:], s.b[oldEnd:]...) + } + s.next = end + (s.next - s.end) + s.end = end + } +} + +// replace replaces the current token with repl. +func (s *scanner) replace(repl string) { + s.resizeRange(s.start, s.end, len(repl)) + copy(s.b[s.start:], repl) +} + +// gobble removes the current token from the input. +// Caller must call scan after calling gobble. +func (s *scanner) gobble(e error) { + s.setError(e) + if s.start == 0 { + s.b = s.b[:+copy(s.b, s.b[s.next:])] + s.end = 0 + } else { + s.b = s.b[:s.start-1+copy(s.b[s.start-1:], s.b[s.end:])] + s.end = s.start - 1 + } + s.next = s.start +} + +// deleteRange removes the given range from s.b before the current token. +func (s *scanner) deleteRange(start, end int) { + s.b = s.b[:start+copy(s.b[start:], s.b[end:])] + diff := end - start + s.next -= diff + s.start -= diff + s.end -= diff +} + +// scan parses the next token of a BCP 47 string. Tokens that are larger +// than 8 characters or include non-alphanumeric characters result in an error +// and are gobbled and removed from the output. +// It returns the end position of the last token consumed. +func (s *scanner) scan() (end int) { + end = s.end + s.token = nil + for s.start = s.next; s.next < len(s.b); { + i := bytes.IndexByte(s.b[s.next:], '-') + if i == -1 { + s.end = len(s.b) + s.next = len(s.b) + i = s.end - s.start + } else { + s.end = s.next + i + s.next = s.end + 1 + } + token := s.b[s.start:s.end] + if i < 1 || i > 8 || !isAlphaNum(token) { + s.gobble(ErrSyntax) + continue + } + s.token = token + return end + } + if n := len(s.b); n > 0 && s.b[n-1] == '-' { + s.setError(ErrSyntax) + s.b = s.b[:len(s.b)-1] + } + s.done = true + return end +} + +// acceptMinSize parses multiple tokens of the given size or greater. +// It returns the end position of the last token consumed. +func (s *scanner) acceptMinSize(min int) (end int) { + end = s.end + s.scan() + for ; len(s.token) >= min; s.scan() { + end = s.end + } + return end +} + +// Parse parses the given BCP 47 string and returns a valid Tag. If parsing +// failed it returns an error and any part of the tag that could be parsed. +// If parsing succeeded but an unknown value was found, it returns +// ValueError. The Tag returned in this case is just stripped of the unknown +// value. All other values are preserved. It accepts tags in the BCP 47 format +// and extensions to this standard defined in +// http://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers. +func Parse(s string) (t Tag, err error) { + // TODO: consider supporting old-style locale key-value pairs. + if s == "" { + return Und, ErrSyntax + } + if len(s) <= maxAltTaglen { + b := [maxAltTaglen]byte{} + for i, c := range s { + // Generating invalid UTF-8 is okay as it won't match. + if 'A' <= c && c <= 'Z' { + c += 'a' - 'A' + } else if c == '_' { + c = '-' + } + b[i] = byte(c) + } + if t, ok := grandfathered(b); ok { + return t, nil + } + } + scan := makeScannerString(s) + return parse(&scan, s) +} + +func parse(scan *scanner, s string) (t Tag, err error) { + t = Und + var end int + if n := len(scan.token); n <= 1 { + scan.toLower(0, len(scan.b)) + if n == 0 || scan.token[0] != 'x' { + return t, ErrSyntax + } + end = parseExtensions(scan) + } else if n >= 4 { + return Und, ErrSyntax + } else { // the usual case + t, end = parseTag(scan) + if n := len(scan.token); n == 1 { + t.pExt = uint16(end) + end = parseExtensions(scan) + } else if end < len(scan.b) { + scan.setError(ErrSyntax) + scan.b = scan.b[:end] + } + } + if int(t.pVariant) < len(scan.b) { + if end < len(s) { + s = s[:end] + } + if len(s) > 0 && tag.Compare(s, scan.b) == 0 { + t.str = s + } else { + t.str = string(scan.b) + } + } else { + t.pVariant, t.pExt = 0, 0 + } + return t, scan.err +} + +// parseTag parses language, script, region and variants. +// It returns a Tag and the end position in the input that was parsed. +func parseTag(scan *scanner) (t Tag, end int) { + var e error + // TODO: set an error if an unknown lang, script or region is encountered. + t.LangID, e = getLangID(scan.token) + scan.setError(e) + scan.replace(t.LangID.String()) + langStart := scan.start + end = scan.scan() + for len(scan.token) == 3 && isAlpha(scan.token[0]) { + // From http://tools.ietf.org/html/bcp47, - tags are equivalent + // to a tag of the form . + lang, e := getLangID(scan.token) + if lang != 0 { + t.LangID = lang + copy(scan.b[langStart:], lang.String()) + scan.b[langStart+3] = '-' + scan.start = langStart + 4 + } + scan.gobble(e) + end = scan.scan() + } + if len(scan.token) == 4 && isAlpha(scan.token[0]) { + t.ScriptID, e = getScriptID(script, scan.token) + if t.ScriptID == 0 { + scan.gobble(e) + } + end = scan.scan() + } + if n := len(scan.token); n >= 2 && n <= 3 { + t.RegionID, e = getRegionID(scan.token) + if t.RegionID == 0 { + scan.gobble(e) + } else { + scan.replace(t.RegionID.String()) + } + end = scan.scan() + } + scan.toLower(scan.start, len(scan.b)) + t.pVariant = byte(end) + end = parseVariants(scan, end, t) + t.pExt = uint16(end) + return t, end +} + +var separator = []byte{'-'} + +// parseVariants scans tokens as long as each token is a valid variant string. +// Duplicate variants are removed. +func parseVariants(scan *scanner, end int, t Tag) int { + start := scan.start + varIDBuf := [4]uint8{} + variantBuf := [4][]byte{} + varID := varIDBuf[:0] + variant := variantBuf[:0] + last := -1 + needSort := false + for ; len(scan.token) >= 4; scan.scan() { + // TODO: measure the impact of needing this conversion and redesign + // the data structure if there is an issue. + v, ok := variantIndex[string(scan.token)] + if !ok { + // unknown variant + // TODO: allow user-defined variants? + scan.gobble(NewValueError(scan.token)) + continue + } + varID = append(varID, v) + variant = append(variant, scan.token) + if !needSort { + if last < int(v) { + last = int(v) + } else { + needSort = true + // There is no legal combinations of more than 7 variants + // (and this is by no means a useful sequence). + const maxVariants = 8 + if len(varID) > maxVariants { + break + } + } + } + end = scan.end + } + if needSort { + sort.Sort(variantsSort{varID, variant}) + k, l := 0, -1 + for i, v := range varID { + w := int(v) + if l == w { + // Remove duplicates. + continue + } + varID[k] = varID[i] + variant[k] = variant[i] + k++ + l = w + } + if str := bytes.Join(variant[:k], separator); len(str) == 0 { + end = start - 1 + } else { + scan.resizeRange(start, end, len(str)) + copy(scan.b[scan.start:], str) + end = scan.end + } + } + return end +} + +type variantsSort struct { + i []uint8 + v [][]byte +} + +func (s variantsSort) Len() int { + return len(s.i) +} + +func (s variantsSort) Swap(i, j int) { + s.i[i], s.i[j] = s.i[j], s.i[i] + s.v[i], s.v[j] = s.v[j], s.v[i] +} + +func (s variantsSort) Less(i, j int) bool { + return s.i[i] < s.i[j] +} + +type bytesSort struct { + b [][]byte + n int // first n bytes to compare +} + +func (b bytesSort) Len() int { + return len(b.b) +} + +func (b bytesSort) Swap(i, j int) { + b.b[i], b.b[j] = b.b[j], b.b[i] +} + +func (b bytesSort) Less(i, j int) bool { + for k := 0; k < b.n; k++ { + if b.b[i][k] == b.b[j][k] { + continue + } + return b.b[i][k] < b.b[j][k] + } + return false +} + +// parseExtensions parses and normalizes the extensions in the buffer. +// It returns the last position of scan.b that is part of any extension. +// It also trims scan.b to remove excess parts accordingly. +func parseExtensions(scan *scanner) int { + start := scan.start + exts := [][]byte{} + private := []byte{} + end := scan.end + for len(scan.token) == 1 { + extStart := scan.start + ext := scan.token[0] + end = parseExtension(scan) + extension := scan.b[extStart:end] + if len(extension) < 3 || (ext != 'x' && len(extension) < 4) { + scan.setError(ErrSyntax) + end = extStart + continue + } else if start == extStart && (ext == 'x' || scan.start == len(scan.b)) { + scan.b = scan.b[:end] + return end + } else if ext == 'x' { + private = extension + break + } + exts = append(exts, extension) + } + sort.Sort(bytesSort{exts, 1}) + if len(private) > 0 { + exts = append(exts, private) + } + scan.b = scan.b[:start] + if len(exts) > 0 { + scan.b = append(scan.b, bytes.Join(exts, separator)...) + } else if start > 0 { + // Strip trailing '-'. + scan.b = scan.b[:start-1] + } + return end +} + +// parseExtension parses a single extension and returns the position of +// the extension end. +func parseExtension(scan *scanner) int { + start, end := scan.start, scan.end + switch scan.token[0] { + case 'u': + attrStart := end + scan.scan() + for last := []byte{}; len(scan.token) > 2; scan.scan() { + if bytes.Compare(scan.token, last) != -1 { + // Attributes are unsorted. Start over from scratch. + p := attrStart + 1 + scan.next = p + attrs := [][]byte{} + for scan.scan(); len(scan.token) > 2; scan.scan() { + attrs = append(attrs, scan.token) + end = scan.end + } + sort.Sort(bytesSort{attrs, 3}) + copy(scan.b[p:], bytes.Join(attrs, separator)) + break + } + last = scan.token + end = scan.end + } + var last, key []byte + for attrEnd := end; len(scan.token) == 2; last = key { + key = scan.token + keyEnd := scan.end + end = scan.acceptMinSize(3) + // TODO: check key value validity + if keyEnd == end || bytes.Compare(key, last) != 1 { + // We have an invalid key or the keys are not sorted. + // Start scanning keys from scratch and reorder. + p := attrEnd + 1 + scan.next = p + keys := [][]byte{} + for scan.scan(); len(scan.token) == 2; { + keyStart, keyEnd := scan.start, scan.end + end = scan.acceptMinSize(3) + if keyEnd != end { + keys = append(keys, scan.b[keyStart:end]) + } else { + scan.setError(ErrSyntax) + end = keyStart + } + } + sort.Stable(bytesSort{keys, 2}) + if n := len(keys); n > 0 { + k := 0 + for i := 1; i < n; i++ { + if !bytes.Equal(keys[k][:2], keys[i][:2]) { + k++ + keys[k] = keys[i] + } else if !bytes.Equal(keys[k], keys[i]) { + scan.setError(ErrDuplicateKey) + } + } + keys = keys[:k+1] + } + reordered := bytes.Join(keys, separator) + if e := p + len(reordered); e < end { + scan.deleteRange(e, end) + end = e + } + copy(scan.b[p:], reordered) + break + } + } + case 't': + scan.scan() + if n := len(scan.token); n >= 2 && n <= 3 && isAlpha(scan.token[1]) { + _, end = parseTag(scan) + scan.toLower(start, end) + } + for len(scan.token) == 2 && !isAlpha(scan.token[1]) { + end = scan.acceptMinSize(3) + } + case 'x': + end = scan.acceptMinSize(1) + default: + end = scan.acceptMinSize(2) + } + return end +} + +// getExtension returns the name, body and end position of the extension. +func getExtension(s string, p int) (end int, ext string) { + if s[p] == '-' { + p++ + } + if s[p] == 'x' { + return len(s), s[p:] + } + end = nextExtension(s, p) + return end, s[p:end] +} + +// nextExtension finds the next extension within the string, searching +// for the -- pattern from position p. +// In the fast majority of cases, language tags will have at most +// one extension and extensions tend to be small. +func nextExtension(s string, p int) int { + for n := len(s) - 3; p < n; { + if s[p] == '-' { + if s[p+2] == '-' { + return p + } + p += 3 + } else { + p++ + } + } + return len(s) +} diff --git a/vendor/golang.org/x/text/internal/language/parse_test.go b/vendor/golang.org/x/text/internal/language/parse_test.go new file mode 100644 index 0000000..0cc97d7 --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/parse_test.go @@ -0,0 +1,364 @@ +// Copyright 2013 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. + +package language + +import ( + "bytes" + "strings" + "testing" + + "golang.org/x/text/internal/tag" +) + +type scanTest struct { + ok bool // true if scanning does not result in an error + in string + tok []string // the expected tokens +} + +var tests = []scanTest{ + {true, "", []string{}}, + {true, "1", []string{"1"}}, + {true, "en", []string{"en"}}, + {true, "root", []string{"root"}}, + {true, "maxchars", []string{"maxchars"}}, + {false, "bad/", []string{}}, + {false, "morethan8", []string{}}, + {false, "-", []string{}}, + {false, "----", []string{}}, + {false, "_", []string{}}, + {true, "en-US", []string{"en", "US"}}, + {true, "en_US", []string{"en", "US"}}, + {false, "en-US-", []string{"en", "US"}}, + {false, "en-US--", []string{"en", "US"}}, + {false, "en-US---", []string{"en", "US"}}, + {false, "en--US", []string{"en", "US"}}, + {false, "-en-US", []string{"en", "US"}}, + {false, "-en--US-", []string{"en", "US"}}, + {false, "-en--US-", []string{"en", "US"}}, + {false, "en-.-US", []string{"en", "US"}}, + {false, ".-en--US-.", []string{"en", "US"}}, + {false, "en-u.-US", []string{"en", "US"}}, + {true, "en-u1-US", []string{"en", "u1", "US"}}, + {true, "maxchar1_maxchar2-maxchar3", []string{"maxchar1", "maxchar2", "maxchar3"}}, + {false, "moreThan8-moreThan8-e", []string{"e"}}, +} + +func TestScan(t *testing.T) { + for i, tt := range tests { + scan := makeScannerString(tt.in) + for j := 0; !scan.done; j++ { + if j >= len(tt.tok) { + t.Errorf("%d: extra token %q", i, scan.token) + } else if tag.Compare(tt.tok[j], scan.token) != 0 { + t.Errorf("%d: token %d: found %q; want %q", i, j, scan.token, tt.tok[j]) + break + } + scan.scan() + } + if s := strings.Join(tt.tok, "-"); tag.Compare(s, bytes.Replace(scan.b, b("_"), b("-"), -1)) != 0 { + t.Errorf("%d: input: found %q; want %q", i, scan.b, s) + } + if (scan.err == nil) != tt.ok { + t.Errorf("%d: ok: found %v; want %v", i, scan.err == nil, tt.ok) + } + } +} + +func TestAcceptMinSize(t *testing.T) { + for i, tt := range tests { + // count number of successive tokens with a minimum size. + for sz := 1; sz <= 8; sz++ { + scan := makeScannerString(tt.in) + scan.end, scan.next = 0, 0 + end := scan.acceptMinSize(sz) + n := 0 + for i := 0; i < len(tt.tok) && len(tt.tok[i]) >= sz; i++ { + n += len(tt.tok[i]) + if i > 0 { + n++ + } + } + if end != n { + t.Errorf("%d:%d: found len %d; want %d", i, sz, end, n) + } + } + } +} + +type parseTest struct { + i int // the index of this test + in string + lang, script, region string + variants, ext string + extList []string // only used when more than one extension is present + invalid bool + rewrite bool // special rewrite not handled by parseTag + changed bool // string needed to be reformatted +} + +func parseTests() []parseTest { + tests := []parseTest{ + {in: "root", lang: "und"}, + {in: "und", lang: "und"}, + {in: "en", lang: "en"}, + {in: "xy", lang: "und", invalid: true}, + {in: "en-ZY", lang: "en", invalid: true}, + {in: "gsw", lang: "gsw"}, + {in: "sr_Latn", lang: "sr", script: "Latn"}, + {in: "af-Arab", lang: "af", script: "Arab"}, + {in: "nl-BE", lang: "nl", region: "BE"}, + {in: "es-419", lang: "es", region: "419"}, + {in: "und-001", lang: "und", region: "001"}, + {in: "de-latn-be", lang: "de", script: "Latn", region: "BE"}, + // Variants + {in: "de-1901", lang: "de", variants: "1901"}, + // Accept with unsuppressed script. + {in: "de-Latn-1901", lang: "de", script: "Latn", variants: "1901"}, + // Specialized. + {in: "sl-rozaj", lang: "sl", variants: "rozaj"}, + {in: "sl-rozaj-lipaw", lang: "sl", variants: "rozaj-lipaw"}, + {in: "sl-rozaj-biske", lang: "sl", variants: "rozaj-biske"}, + {in: "sl-rozaj-biske-1994", lang: "sl", variants: "rozaj-biske-1994"}, + {in: "sl-rozaj-1994", lang: "sl", variants: "rozaj-1994"}, + // Maximum number of variants while adhering to prefix rules. + {in: "sl-rozaj-biske-1994-alalc97-fonipa-fonupa-fonxsamp", lang: "sl", variants: "rozaj-biske-1994-alalc97-fonipa-fonupa-fonxsamp"}, + + // Sorting. + {in: "sl-1994-biske-rozaj", lang: "sl", variants: "rozaj-biske-1994", changed: true}, + {in: "sl-rozaj-biske-1994-alalc97-fonupa-fonipa-fonxsamp", lang: "sl", variants: "rozaj-biske-1994-alalc97-fonipa-fonupa-fonxsamp", changed: true}, + {in: "nl-fonxsamp-alalc97-fonipa-fonupa", lang: "nl", variants: "alalc97-fonipa-fonupa-fonxsamp", changed: true}, + + // Duplicates variants are removed, but not an error. + {in: "nl-fonupa-fonupa", lang: "nl", variants: "fonupa"}, + + // Variants that do not have correct prefixes. We still accept these. + {in: "de-Cyrl-1901", lang: "de", script: "Cyrl", variants: "1901"}, + {in: "sl-rozaj-lipaw-1994", lang: "sl", variants: "rozaj-lipaw-1994"}, + {in: "sl-1994-biske-rozaj-1994-biske-rozaj", lang: "sl", variants: "rozaj-biske-1994", changed: true}, + {in: "de-Cyrl-1901", lang: "de", script: "Cyrl", variants: "1901"}, + + // Invalid variant. + {in: "de-1902", lang: "de", variants: "", invalid: true}, + + {in: "EN_CYRL", lang: "en", script: "Cyrl"}, + // private use and extensions + {in: "x-a-b-c-d", ext: "x-a-b-c-d"}, + {in: "x_A.-B-C_D", ext: "x-b-c-d", invalid: true, changed: true}, + {in: "x-aa-bbbb-cccccccc-d", ext: "x-aa-bbbb-cccccccc-d"}, + {in: "en-c_cc-b-bbb-a-aaa", lang: "en", changed: true, extList: []string{"a-aaa", "b-bbb", "c-cc"}}, + {in: "en-x_cc-b-bbb-a-aaa", lang: "en", ext: "x-cc-b-bbb-a-aaa", changed: true}, + {in: "en-c_cc-b-bbb-a-aaa-x-x", lang: "en", changed: true, extList: []string{"a-aaa", "b-bbb", "c-cc", "x-x"}}, + {in: "en-v-c", lang: "en", ext: "", invalid: true}, + {in: "en-v-abcdefghi", lang: "en", ext: "", invalid: true}, + {in: "en-v-abc-x", lang: "en", ext: "v-abc", invalid: true}, + {in: "en-v-abc-x-", lang: "en", ext: "v-abc", invalid: true}, + {in: "en-v-abc-w-x-xx", lang: "en", extList: []string{"v-abc", "x-xx"}, invalid: true, changed: true}, + {in: "en-v-abc-w-y-yx", lang: "en", extList: []string{"v-abc", "y-yx"}, invalid: true, changed: true}, + {in: "en-v-c-abc", lang: "en", ext: "c-abc", invalid: true, changed: true}, + {in: "en-v-w-abc", lang: "en", ext: "w-abc", invalid: true, changed: true}, + {in: "en-v-x-abc", lang: "en", ext: "x-abc", invalid: true, changed: true}, + {in: "en-v-x-a", lang: "en", ext: "x-a", invalid: true, changed: true}, + {in: "en-9-aa-0-aa-z-bb-x-a", lang: "en", extList: []string{"0-aa", "9-aa", "z-bb", "x-a"}, changed: true}, + {in: "en-u-c", lang: "en", ext: "", invalid: true}, + {in: "en-u-co-phonebk", lang: "en", ext: "u-co-phonebk"}, + {in: "en-u-co-phonebk-ca", lang: "en", ext: "u-co-phonebk", invalid: true}, + {in: "en-u-nu-arabic-co-phonebk-ca", lang: "en", ext: "u-co-phonebk-nu-arabic", invalid: true, changed: true}, + {in: "en-u-nu-arabic-co-phonebk-ca-x", lang: "en", ext: "u-co-phonebk-nu-arabic", invalid: true, changed: true}, + {in: "en-u-nu-arabic-co-phonebk-ca-s", lang: "en", ext: "u-co-phonebk-nu-arabic", invalid: true, changed: true}, + {in: "en-u-nu-arabic-co-phonebk-ca-a12345678", lang: "en", ext: "u-co-phonebk-nu-arabic", invalid: true, changed: true}, + {in: "en-u-co-phonebook", lang: "en", ext: "", invalid: true}, + {in: "en-u-co-phonebook-cu-xau", lang: "en", ext: "u-cu-xau", invalid: true, changed: true}, + {in: "en-Cyrl-u-co-phonebk", lang: "en", script: "Cyrl", ext: "u-co-phonebk"}, + {in: "en-US-u-co-phonebk", lang: "en", region: "US", ext: "u-co-phonebk"}, + {in: "en-US-u-co-phonebk-cu-xau", lang: "en", region: "US", ext: "u-co-phonebk-cu-xau"}, + {in: "en-scotland-u-co-phonebk", lang: "en", variants: "scotland", ext: "u-co-phonebk"}, + {in: "en-u-cu-xua-co-phonebk", lang: "en", ext: "u-co-phonebk-cu-xua", changed: true}, + {in: "en-u-def-abc-cu-xua-co-phonebk", lang: "en", ext: "u-abc-def-co-phonebk-cu-xua", changed: true}, + {in: "en-u-def-abc", lang: "en", ext: "u-abc-def", changed: true}, + {in: "en-u-cu-xua-co-phonebk-a-cd", lang: "en", extList: []string{"a-cd", "u-co-phonebk-cu-xua"}, changed: true}, + // Invalid "u" extension. Drop invalid parts. + {in: "en-u-cu-co-phonebk", lang: "en", extList: []string{"u-co-phonebk"}, invalid: true, changed: true}, + {in: "en-u-cu-xau-co", lang: "en", extList: []string{"u-cu-xau"}, invalid: true}, + // LDML spec is not specific about it, but remove duplicates and return an error if the values differ. + {in: "en-u-cu-xau-co-phonebk-cu-xau", lang: "en", ext: "u-co-phonebk-cu-xau", changed: true}, + // No change as the result is a substring of the original! + {in: "en-US-u-cu-xau-cu-eur", lang: "en", region: "US", ext: "u-cu-xau", invalid: true, changed: false}, + {in: "en-t-en-Cyrl-NL-fonipa", lang: "en", ext: "t-en-cyrl-nl-fonipa", changed: true}, + {in: "en-t-en-Cyrl-NL-fonipa-t0-abc-def", lang: "en", ext: "t-en-cyrl-nl-fonipa-t0-abc-def", changed: true}, + {in: "en-t-t0-abcd", lang: "en", ext: "t-t0-abcd"}, + // Not necessary to have changed here. + {in: "en-t-nl-abcd", lang: "en", ext: "t-nl", invalid: true}, + {in: "en-t-nl-latn", lang: "en", ext: "t-nl-latn"}, + {in: "en-t-t0-abcd-x-a", lang: "en", extList: []string{"t-t0-abcd", "x-a"}}, + // invalid + {in: "", lang: "und", invalid: true}, + {in: "-", lang: "und", invalid: true}, + {in: "x", lang: "und", invalid: true}, + {in: "x-", lang: "und", invalid: true}, + {in: "x--", lang: "und", invalid: true}, + {in: "a-a-b-c-d", lang: "und", invalid: true}, + {in: "en-", lang: "en", invalid: true}, + {in: "enne-", lang: "und", invalid: true}, + {in: "en.", lang: "und", invalid: true}, + {in: "en.-latn", lang: "und", invalid: true}, + {in: "en.-en", lang: "en", invalid: true}, + {in: "x-a-tooManyChars-c-d", ext: "x-a-c-d", invalid: true, changed: true}, + {in: "a-tooManyChars-c-d", lang: "und", invalid: true}, + // TODO: check key-value validity + // { in: "en-u-cu-xd", lang: "en", ext: "u-cu-xd", invalid: true }, + {in: "en-t-abcd", lang: "en", invalid: true}, + {in: "en-Latn-US-en", lang: "en", script: "Latn", region: "US", invalid: true}, + // rewrites (more tests in TestGrandfathered) + {in: "zh-min-nan", lang: "nan"}, + {in: "zh-yue", lang: "yue"}, + {in: "zh-xiang", lang: "hsn", rewrite: true}, + {in: "zh-guoyu", lang: "cmn", rewrite: true}, + {in: "iw", lang: "iw"}, + {in: "sgn-BE-FR", lang: "sfb", rewrite: true}, + {in: "i-klingon", lang: "tlh", rewrite: true}, + } + for i, tt := range tests { + tests[i].i = i + if tt.extList != nil { + tests[i].ext = strings.Join(tt.extList, "-") + } + if tt.ext != "" && tt.extList == nil { + tests[i].extList = []string{tt.ext} + } + } + return tests +} + +func TestParseExtensions(t *testing.T) { + for i, tt := range parseTests() { + if tt.ext == "" || tt.rewrite { + continue + } + scan := makeScannerString(tt.in) + if len(scan.b) > 1 && scan.b[1] != '-' { + scan.end = nextExtension(string(scan.b), 0) + scan.next = scan.end + 1 + scan.scan() + } + start := scan.start + scan.toLower(start, len(scan.b)) + parseExtensions(&scan) + ext := string(scan.b[start:]) + if ext != tt.ext { + t.Errorf("%d(%s): ext was %v; want %v", i, tt.in, ext, tt.ext) + } + if changed := !strings.HasPrefix(tt.in[start:], ext); changed != tt.changed { + t.Errorf("%d(%s): changed was %v; want %v", i, tt.in, changed, tt.changed) + } + } +} + +// partChecks runs checks for each part by calling the function returned by f. +func partChecks(t *testing.T, f func(*testing.T, *parseTest) (Tag, bool)) { + for i, tt := range parseTests() { + t.Run(tt.in, func(t *testing.T) { + tag, skip := f(t, &tt) + if skip { + return + } + if l, _ := getLangID(b(tt.lang)); l != tag.LangID { + t.Errorf("%d: lang was %q; want %q", i, tag.LangID, l) + } + if sc, _ := getScriptID(script, b(tt.script)); sc != tag.ScriptID { + t.Errorf("%d: script was %q; want %q", i, tag.ScriptID, sc) + } + if r, _ := getRegionID(b(tt.region)); r != tag.RegionID { + t.Errorf("%d: region was %q; want %q", i, tag.RegionID, r) + } + if tag.str == "" { + return + } + p := int(tag.pVariant) + if p < int(tag.pExt) { + p++ + } + if s, g := tag.str[p:tag.pExt], tt.variants; s != g { + t.Errorf("%d: variants was %q; want %q", i, s, g) + } + p = int(tag.pExt) + if p > 0 && p < len(tag.str) { + p++ + } + if s, g := (tag.str)[p:], tt.ext; s != g { + t.Errorf("%d: extensions were %q; want %q", i, s, g) + } + }) + } +} + +func TestParseTag(t *testing.T) { + partChecks(t, func(t *testing.T, tt *parseTest) (id Tag, skip bool) { + if strings.HasPrefix(tt.in, "x-") || tt.rewrite { + return Tag{}, true + } + scan := makeScannerString(tt.in) + id, end := parseTag(&scan) + id.str = string(scan.b[:end]) + tt.ext = "" + tt.extList = []string{} + return id, false + }) +} + +func TestParse(t *testing.T) { + partChecks(t, func(t *testing.T, tt *parseTest) (id Tag, skip bool) { + id, err := Parse(tt.in) + ext := "" + if id.str != "" { + if strings.HasPrefix(id.str, "x-") { + ext = id.str + } else if int(id.pExt) < len(id.str) && id.pExt > 0 { + ext = id.str[id.pExt+1:] + } + } + if tag, _ := Parse(id.String()); tag.String() != id.String() { + t.Errorf("%d:%s: reparse was %q; want %q", tt.i, tt.in, id.String(), tag.String()) + } + if ext != tt.ext { + t.Errorf("%d:%s: ext was %q; want %q", tt.i, tt.in, ext, tt.ext) + } + changed := id.str != "" && !strings.HasPrefix(tt.in, id.str) + if changed != tt.changed { + t.Errorf("%d:%s: changed was %v; want %v", tt.i, tt.in, changed, tt.changed) + } + if (err != nil) != tt.invalid { + t.Errorf("%d:%s: invalid was %v; want %v. Error: %v", tt.i, tt.in, err != nil, tt.invalid, err) + } + return id, false + }) +} + +func TestErrors(t *testing.T) { + mkInvalid := func(s string) error { + return NewValueError([]byte(s)) + } + tests := []struct { + in string + out error + }{ + // invalid subtags. + {"ac", mkInvalid("ac")}, + {"AC", mkInvalid("ac")}, + {"aa-Uuuu", mkInvalid("Uuuu")}, + {"aa-AB", mkInvalid("AB")}, + // ill-formed wins over invalid. + {"ac-u", ErrSyntax}, + {"ac-u-ca", ErrSyntax}, + {"ac-u-ca-co-pinyin", ErrSyntax}, + {"noob", ErrSyntax}, + } + for _, tt := range tests { + _, err := Parse(tt.in) + if err != tt.out { + t.Errorf("%s: was %q; want %q", tt.in, err, tt.out) + } + } +} diff --git a/vendor/golang.org/x/text/internal/language/tables.go b/vendor/golang.org/x/text/internal/language/tables.go new file mode 100644 index 0000000..239e2d2 --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/tables.go @@ -0,0 +1,3431 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package language + +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 NumScripts = 242 + +const NumRegions = 357 + +type FromTo struct { + From uint16 + To uint16 +} + +const nonCanonicalUnd = 1201 +const ( + _af = 22 + _am = 39 + _ar = 58 + _az = 88 + _bg = 126 + _bn = 165 + _ca = 215 + _cs = 250 + _da = 257 + _de = 269 + _el = 310 + _en = 313 + _es = 318 + _et = 320 + _fa = 328 + _fi = 337 + _fil = 339 + _fr = 350 + _gu = 420 + _he = 444 + _hi = 446 + _hr = 465 + _hu = 469 + _hy = 471 + _id = 481 + _is = 504 + _it = 505 + _ja = 512 + _ka = 528 + _kk = 578 + _km = 586 + _kn = 593 + _ko = 596 + _ky = 650 + _lo = 696 + _lt = 704 + _lv = 711 + _mk = 767 + _ml = 772 + _mn = 779 + _mo = 784 + _mr = 795 + _ms = 799 + _mul = 806 + _my = 817 + _nb = 839 + _ne = 849 + _nl = 871 + _no = 879 + _pa = 925 + _pl = 947 + _pt = 960 + _ro = 988 + _ru = 994 + _sh = 1031 + _si = 1036 + _sk = 1042 + _sl = 1046 + _sq = 1073 + _sr = 1074 + _sv = 1092 + _sw = 1093 + _ta = 1104 + _te = 1121 + _th = 1131 + _tl = 1146 + _tn = 1152 + _tr = 1162 + _uk = 1198 + _ur = 1204 + _uz = 1212 + _vi = 1219 + _zh = 1321 + _zu = 1327 + _jbo = 515 + _ami = 1650 + _bnn = 2357 + _hak = 438 + _tlh = 14467 + _lb = 661 + _nv = 899 + _pwn = 12055 + _tao = 14188 + _tay = 14198 + _tsu = 14662 + _nn = 874 + _sfb = 13629 + _vgt = 15701 + _sgg = 13660 + _cmn = 3007 + _nan = 835 + _hsn = 467 +) + +const langPrivateStart = 0x2f72 + +const langPrivateEnd = 0x3179 + +// lang holds an alphabetically sorted list of ISO-639 language identifiers. +// All entries are 4 bytes. The index of the identifier (divided by 4) is the language tag. +// For 2-byte language identifiers, the two successive bytes have the following meaning: +// - if the first letter of the 2- and 3-letter ISO codes are the same: +// the second and third letter of the 3-letter ISO code. +// - otherwise: a 0 and a by 2 bits right-shifted index into altLangISO3. +// For 3-byte language identifiers the 4th byte is 0. +const lang tag.Index = "" + // Size: 5324 bytes + "---\x00aaaraai\x00aak\x00aau\x00abbkabi\x00abq\x00abr\x00abt\x00aby\x00a" + + "cd\x00ace\x00ach\x00ada\x00ade\x00adj\x00ady\x00adz\x00aeveaeb\x00aey" + + "\x00affragc\x00agd\x00agg\x00agm\x00ago\x00agq\x00aha\x00ahl\x00aho\x00a" + + "jg\x00akkaakk\x00ala\x00ali\x00aln\x00alt\x00ammhamm\x00amn\x00amo\x00am" + + "p\x00anrganc\x00ank\x00ann\x00any\x00aoj\x00aom\x00aoz\x00apc\x00apd\x00" + + "ape\x00apr\x00aps\x00apz\x00arraarc\x00arh\x00arn\x00aro\x00arq\x00ars" + + "\x00ary\x00arz\x00assmasa\x00ase\x00asg\x00aso\x00ast\x00ata\x00atg\x00a" + + "tj\x00auy\x00avvaavl\x00avn\x00avt\x00avu\x00awa\x00awb\x00awo\x00awx" + + "\x00ayymayb\x00azzebaakbal\x00ban\x00bap\x00bar\x00bas\x00bav\x00bax\x00" + + "bba\x00bbb\x00bbc\x00bbd\x00bbj\x00bbp\x00bbr\x00bcf\x00bch\x00bci\x00bc" + + "m\x00bcn\x00bco\x00bcq\x00bcu\x00bdd\x00beelbef\x00beh\x00bej\x00bem\x00" + + "bet\x00bew\x00bex\x00bez\x00bfd\x00bfq\x00bft\x00bfy\x00bgulbgc\x00bgn" + + "\x00bgx\x00bhihbhb\x00bhg\x00bhi\x00bhk\x00bhl\x00bho\x00bhy\x00biisbib" + + "\x00big\x00bik\x00bim\x00bin\x00bio\x00biq\x00bjh\x00bji\x00bjj\x00bjn" + + "\x00bjo\x00bjr\x00bjt\x00bjz\x00bkc\x00bkm\x00bkq\x00bku\x00bkv\x00blt" + + "\x00bmambmh\x00bmk\x00bmq\x00bmu\x00bnenbng\x00bnm\x00bnp\x00boodboj\x00" + + "bom\x00bon\x00bpy\x00bqc\x00bqi\x00bqp\x00bqv\x00brrebra\x00brh\x00brx" + + "\x00brz\x00bsosbsj\x00bsq\x00bss\x00bst\x00bto\x00btt\x00btv\x00bua\x00b" + + "uc\x00bud\x00bug\x00buk\x00bum\x00buo\x00bus\x00buu\x00bvb\x00bwd\x00bwr" + + "\x00bxh\x00bye\x00byn\x00byr\x00bys\x00byv\x00byx\x00bza\x00bze\x00bzf" + + "\x00bzh\x00bzw\x00caatcan\x00cbj\x00cch\x00ccp\x00ceheceb\x00cfa\x00cgg" + + "\x00chhachk\x00chm\x00cho\x00chp\x00chr\x00cja\x00cjm\x00cjv\x00ckb\x00c" + + "kl\x00cko\x00cky\x00cla\x00cme\x00cmg\x00cooscop\x00cps\x00crrecrh\x00cr" + + "j\x00crk\x00crl\x00crm\x00crs\x00csescsb\x00csw\x00ctd\x00cuhucvhvcyymda" + + "andad\x00daf\x00dag\x00dah\x00dak\x00dar\x00dav\x00dbd\x00dbq\x00dcc\x00" + + "ddn\x00deeuded\x00den\x00dga\x00dgh\x00dgi\x00dgl\x00dgr\x00dgz\x00dia" + + "\x00dje\x00dnj\x00dob\x00doi\x00dop\x00dow\x00dri\x00drs\x00dsb\x00dtm" + + "\x00dtp\x00dts\x00dty\x00dua\x00duc\x00dud\x00dug\x00dvivdva\x00dww\x00d" + + "yo\x00dyu\x00dzzodzg\x00ebu\x00eeweefi\x00egl\x00egy\x00eka\x00eky\x00el" + + "llema\x00emi\x00enngenn\x00enq\x00eopoeri\x00es\x00\x05esu\x00etstetr" + + "\x00ett\x00etu\x00etx\x00euusewo\x00ext\x00faasfaa\x00fab\x00fag\x00fai" + + "\x00fan\x00ffulffi\x00ffm\x00fiinfia\x00fil\x00fit\x00fjijflr\x00fmp\x00" + + "foaofod\x00fon\x00for\x00fpe\x00fqs\x00frrafrc\x00frp\x00frr\x00frs\x00f" + + "ub\x00fud\x00fue\x00fuf\x00fuh\x00fuq\x00fur\x00fuv\x00fuy\x00fvr\x00fyr" + + "ygalegaa\x00gaf\x00gag\x00gah\x00gaj\x00gam\x00gan\x00gaw\x00gay\x00gba" + + "\x00gbf\x00gbm\x00gby\x00gbz\x00gcr\x00gdlagde\x00gdn\x00gdr\x00geb\x00g" + + "ej\x00gel\x00gez\x00gfk\x00ggn\x00ghs\x00gil\x00gim\x00gjk\x00gjn\x00gju" + + "\x00gkn\x00gkp\x00gllgglk\x00gmm\x00gmv\x00gnrngnd\x00gng\x00god\x00gof" + + "\x00goi\x00gom\x00gon\x00gor\x00gos\x00got\x00grb\x00grc\x00grt\x00grw" + + "\x00gsw\x00guujgub\x00guc\x00gud\x00gur\x00guw\x00gux\x00guz\x00gvlvgvf" + + "\x00gvr\x00gvs\x00gwc\x00gwi\x00gwt\x00gyi\x00haauhag\x00hak\x00ham\x00h" + + "aw\x00haz\x00hbb\x00hdy\x00heebhhy\x00hiinhia\x00hif\x00hig\x00hih\x00hi" + + "l\x00hla\x00hlu\x00hmd\x00hmt\x00hnd\x00hne\x00hnj\x00hnn\x00hno\x00homo" + + "hoc\x00hoj\x00hot\x00hrrvhsb\x00hsn\x00htathuunhui\x00hyyehzerianaian" + + "\x00iar\x00iba\x00ibb\x00iby\x00ica\x00ich\x00idndidd\x00idi\x00idu\x00i" + + "eleife\x00igboigb\x00ige\x00iiiiijj\x00ikpkikk\x00ikt\x00ikw\x00ikx\x00i" + + "lo\x00imo\x00inndinh\x00iodoiou\x00iri\x00isslittaiukuiw\x00\x03iwm\x00i" + + "ws\x00izh\x00izi\x00japnjab\x00jam\x00jbo\x00jbu\x00jen\x00jgk\x00jgo" + + "\x00ji\x00\x06jib\x00jmc\x00jml\x00jra\x00jut\x00jvavjwavkaatkaa\x00kab" + + "\x00kac\x00kad\x00kai\x00kaj\x00kam\x00kao\x00kbd\x00kbm\x00kbp\x00kbq" + + "\x00kbx\x00kby\x00kcg\x00kck\x00kcl\x00kct\x00kde\x00kdh\x00kdl\x00kdt" + + "\x00kea\x00ken\x00kez\x00kfo\x00kfr\x00kfy\x00kgonkge\x00kgf\x00kgp\x00k" + + "ha\x00khb\x00khn\x00khq\x00khs\x00kht\x00khw\x00khz\x00kiikkij\x00kiu" + + "\x00kiw\x00kjuakjd\x00kjg\x00kjs\x00kjy\x00kkazkkc\x00kkj\x00klalkln\x00" + + "klq\x00klt\x00klx\x00kmhmkmb\x00kmh\x00kmo\x00kms\x00kmu\x00kmw\x00knank" + + "nf\x00knp\x00koorkoi\x00kok\x00kol\x00kos\x00koz\x00kpe\x00kpf\x00kpo" + + "\x00kpr\x00kpx\x00kqb\x00kqf\x00kqs\x00kqy\x00kraukrc\x00kri\x00krj\x00k" + + "rl\x00krs\x00kru\x00ksasksb\x00ksd\x00ksf\x00ksh\x00ksj\x00ksr\x00ktb" + + "\x00ktm\x00kto\x00kuurkub\x00kud\x00kue\x00kuj\x00kum\x00kun\x00kup\x00k" + + "us\x00kvomkvg\x00kvr\x00kvx\x00kw\x00\x01kwj\x00kwo\x00kxa\x00kxc\x00kxm" + + "\x00kxp\x00kxw\x00kxz\x00kyirkye\x00kyx\x00kzr\x00laatlab\x00lad\x00lag" + + "\x00lah\x00laj\x00las\x00lbtzlbe\x00lbu\x00lbw\x00lcm\x00lcp\x00ldb\x00l" + + "ed\x00lee\x00lem\x00lep\x00leq\x00leu\x00lez\x00lguglgg\x00liimlia\x00li" + + "d\x00lif\x00lig\x00lih\x00lij\x00lis\x00ljp\x00lki\x00lkt\x00lle\x00lln" + + "\x00lmn\x00lmo\x00lmp\x00lninlns\x00lnu\x00loaoloj\x00lok\x00lol\x00lor" + + "\x00los\x00loz\x00lrc\x00ltitltg\x00luublua\x00luo\x00luy\x00luz\x00lvav" + + "lwl\x00lzh\x00lzz\x00mad\x00maf\x00mag\x00mai\x00mak\x00man\x00mas\x00ma" + + "w\x00maz\x00mbh\x00mbo\x00mbq\x00mbu\x00mbw\x00mci\x00mcp\x00mcq\x00mcr" + + "\x00mcu\x00mda\x00mde\x00mdf\x00mdh\x00mdj\x00mdr\x00mdx\x00med\x00mee" + + "\x00mek\x00men\x00mer\x00met\x00meu\x00mfa\x00mfe\x00mfn\x00mfo\x00mfq" + + "\x00mglgmgh\x00mgl\x00mgo\x00mgp\x00mgy\x00mhahmhi\x00mhl\x00mirimif\x00" + + "min\x00mis\x00miw\x00mkkdmki\x00mkl\x00mkp\x00mkw\x00mlalmle\x00mlp\x00m" + + "ls\x00mmo\x00mmu\x00mmx\x00mnonmna\x00mnf\x00mni\x00mnw\x00moolmoa\x00mo" + + "e\x00moh\x00mos\x00mox\x00mpp\x00mps\x00mpt\x00mpx\x00mql\x00mrarmrd\x00" + + "mrj\x00mro\x00mssamtltmtc\x00mtf\x00mti\x00mtr\x00mua\x00mul\x00mur\x00m" + + "us\x00mva\x00mvn\x00mvy\x00mwk\x00mwr\x00mwv\x00mxc\x00mxm\x00myyamyk" + + "\x00mym\x00myv\x00myw\x00myx\x00myz\x00mzk\x00mzm\x00mzn\x00mzp\x00mzw" + + "\x00mzz\x00naaunac\x00naf\x00nah\x00nak\x00nan\x00nap\x00naq\x00nas\x00n" + + "bobnca\x00nce\x00ncf\x00nch\x00nco\x00ncu\x00nddendc\x00nds\x00neepneb" + + "\x00new\x00nex\x00nfr\x00ngdonga\x00ngb\x00ngl\x00nhb\x00nhe\x00nhw\x00n" + + "if\x00nii\x00nij\x00nin\x00niu\x00niy\x00niz\x00njo\x00nkg\x00nko\x00nll" + + "dnmg\x00nmz\x00nnnonnf\x00nnh\x00nnk\x00nnm\x00noornod\x00noe\x00non\x00" + + "nop\x00nou\x00nqo\x00nrblnrb\x00nsk\x00nsn\x00nso\x00nss\x00ntm\x00ntr" + + "\x00nui\x00nup\x00nus\x00nuv\x00nux\x00nvavnwb\x00nxq\x00nxr\x00nyyanym" + + "\x00nyn\x00nzi\x00occiogc\x00ojjiokr\x00okv\x00omrmong\x00onn\x00ons\x00" + + "opm\x00orrioro\x00oru\x00osssosa\x00ota\x00otk\x00ozm\x00paanpag\x00pal" + + "\x00pam\x00pap\x00pau\x00pbi\x00pcd\x00pcm\x00pdc\x00pdt\x00ped\x00peo" + + "\x00pex\x00pfl\x00phl\x00phn\x00pilipil\x00pip\x00pka\x00pko\x00plolpla" + + "\x00pms\x00png\x00pnn\x00pnt\x00pon\x00ppo\x00pra\x00prd\x00prg\x00psusp" + + "ss\x00ptorptp\x00puu\x00pwa\x00quuequc\x00qug\x00rai\x00raj\x00rao\x00rc" + + "f\x00rej\x00rel\x00res\x00rgn\x00rhg\x00ria\x00rif\x00rjs\x00rkt\x00rmoh" + + "rmf\x00rmo\x00rmt\x00rmu\x00rnunrna\x00rng\x00roonrob\x00rof\x00roo\x00r" + + "ro\x00rtm\x00ruusrue\x00rug\x00rw\x00\x04rwk\x00rwo\x00ryu\x00saansaf" + + "\x00sah\x00saq\x00sas\x00sat\x00sav\x00saz\x00sba\x00sbe\x00sbp\x00scrds" + + "ck\x00scl\x00scn\x00sco\x00scs\x00sdndsdc\x00sdh\x00semesef\x00seh\x00se" + + "i\x00ses\x00sgagsga\x00sgs\x00sgw\x00sgz\x00sh\x00\x02shi\x00shk\x00shn" + + "\x00shu\x00siinsid\x00sig\x00sil\x00sim\x00sjr\x00sklkskc\x00skr\x00sks" + + "\x00sllvsld\x00sli\x00sll\x00sly\x00smmosma\x00smi\x00smj\x00smn\x00smp" + + "\x00smq\x00sms\x00snnasnc\x00snk\x00snp\x00snx\x00sny\x00soomsok\x00soq" + + "\x00sou\x00soy\x00spd\x00spl\x00sps\x00sqqisrrpsrb\x00srn\x00srr\x00srx" + + "\x00ssswssd\x00ssg\x00ssy\x00stotstk\x00stq\x00suunsua\x00sue\x00suk\x00" + + "sur\x00sus\x00svweswwaswb\x00swc\x00swg\x00swp\x00swv\x00sxn\x00sxw\x00s" + + "yl\x00syr\x00szl\x00taamtaj\x00tal\x00tan\x00taq\x00tbc\x00tbd\x00tbf" + + "\x00tbg\x00tbo\x00tbw\x00tbz\x00tci\x00tcy\x00tdd\x00tdg\x00tdh\x00teelt" + + "ed\x00tem\x00teo\x00tet\x00tfi\x00tggktgc\x00tgo\x00tgu\x00thhathl\x00th" + + "q\x00thr\x00tiirtif\x00tig\x00tik\x00tim\x00tio\x00tiv\x00tkuktkl\x00tkr" + + "\x00tkt\x00tlgltlf\x00tlx\x00tly\x00tmh\x00tmy\x00tnsntnh\x00toontof\x00" + + "tog\x00toq\x00tpi\x00tpm\x00tpz\x00tqo\x00trurtru\x00trv\x00trw\x00tssot" + + "sd\x00tsf\x00tsg\x00tsj\x00tsw\x00ttatttd\x00tte\x00ttj\x00ttr\x00tts" + + "\x00ttt\x00tuh\x00tul\x00tum\x00tuq\x00tvd\x00tvl\x00tvu\x00twwitwh\x00t" + + "wq\x00txg\x00tyahtya\x00tyv\x00tzm\x00ubu\x00udm\x00ugiguga\x00ukkruli" + + "\x00umb\x00und\x00unr\x00unx\x00urrduri\x00urt\x00urw\x00usa\x00utr\x00u" + + "vh\x00uvl\x00uzzbvag\x00vai\x00van\x00veenvec\x00vep\x00viievic\x00viv" + + "\x00vls\x00vmf\x00vmw\x00voolvot\x00vro\x00vun\x00vut\x00walnwae\x00waj" + + "\x00wal\x00wan\x00war\x00wbp\x00wbq\x00wbr\x00wci\x00wer\x00wgi\x00whg" + + "\x00wib\x00wiu\x00wiv\x00wja\x00wji\x00wls\x00wmo\x00wnc\x00wni\x00wnu" + + "\x00woolwob\x00wos\x00wrs\x00wsk\x00wtm\x00wuu\x00wuv\x00wwa\x00xav\x00x" + + "bi\x00xcr\x00xes\x00xhhoxla\x00xlc\x00xld\x00xmf\x00xmn\x00xmr\x00xna" + + "\x00xnr\x00xog\x00xon\x00xpr\x00xrb\x00xsa\x00xsi\x00xsm\x00xsr\x00xwe" + + "\x00yam\x00yao\x00yap\x00yas\x00yat\x00yav\x00yay\x00yaz\x00yba\x00ybb" + + "\x00yby\x00yer\x00ygr\x00ygw\x00yiidyko\x00yle\x00ylg\x00yll\x00yml\x00y" + + "ooryon\x00yrb\x00yre\x00yrl\x00yss\x00yua\x00yue\x00yuj\x00yut\x00yuw" + + "\x00zahazag\x00zbl\x00zdj\x00zea\x00zgh\x00zhhozhx\x00zia\x00zlm\x00zmi" + + "\x00zne\x00zuulzxx\x00zza\x00\xff\xff\xff\xff" + +const langNoIndexOffset = 1330 + +// langNoIndex is a bit vector of all 3-letter language codes that are not used as an index +// in lookup tables. The language ids for these language codes are derived directly +// from the letters and are not consecutive. +// Size: 2197 bytes, 2197 elements +var langNoIndex = [2197]uint8{ + // Entry 0 - 3F + 0xff, 0xf8, 0xed, 0xfe, 0xeb, 0xd3, 0x3b, 0xd2, + 0xfb, 0xbf, 0x7a, 0xfa, 0x37, 0x1d, 0x3c, 0x57, + 0x6e, 0x97, 0x73, 0x38, 0xfb, 0xea, 0xbf, 0x70, + 0xad, 0x03, 0xff, 0xff, 0xcf, 0x05, 0x84, 0x62, + 0xe9, 0xbf, 0xfd, 0xbf, 0xbf, 0xf7, 0xfd, 0x77, + 0x0f, 0xff, 0xef, 0x6f, 0xff, 0xfb, 0xdf, 0xe2, + 0xc9, 0xf8, 0x7f, 0x7e, 0x4d, 0xb8, 0x0a, 0x6a, + 0x7c, 0xea, 0xe3, 0xfa, 0x7a, 0xbf, 0x67, 0xff, + // Entry 40 - 7F + 0xff, 0xff, 0xff, 0xdf, 0x2a, 0x54, 0x91, 0xc0, + 0x5d, 0xe3, 0x97, 0x14, 0x07, 0x20, 0xdd, 0xed, + 0x9f, 0x3f, 0xc9, 0x21, 0xf8, 0x3f, 0x94, 0x35, + 0x7c, 0x5f, 0xff, 0x5f, 0x8e, 0x6e, 0xdf, 0xff, + 0xff, 0xff, 0x55, 0x7c, 0xd3, 0xfd, 0xbf, 0xb5, + 0x7b, 0xdf, 0x7f, 0xf7, 0xca, 0xfe, 0xdb, 0xa3, + 0xa8, 0xff, 0x1f, 0x67, 0x7d, 0xeb, 0xef, 0xce, + 0xff, 0xff, 0x9f, 0xff, 0xb7, 0xef, 0xfe, 0xcf, + // Entry 80 - BF + 0xdb, 0xff, 0xf3, 0xcd, 0xfb, 0x2f, 0xff, 0xff, + 0xbb, 0xee, 0xf7, 0xbd, 0xdb, 0xff, 0x5f, 0xf7, + 0xfd, 0xf2, 0xfd, 0xff, 0x5e, 0x2f, 0x3b, 0xba, + 0x7e, 0xff, 0xff, 0xfe, 0xf7, 0xff, 0xdd, 0xff, + 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, + // 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, + 0x97, 0xff, 0x5d, 0x38, 0x64, 0x08, 0x00, 0x10, + 0xbc, 0x85, 0xaf, 0xdf, 0xff, 0xf7, 0x73, 0x35, + 0x3e, 0x87, 0xc7, 0xdf, 0xff, 0x00, 0x81, 0x00, + 0xb0, 0x05, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, + 0x40, 0x00, 0x40, 0x92, 0x21, 0x50, 0xb1, 0x5d, + // Entry 100 - 13F + 0xfd, 0xdc, 0xbe, 0x5e, 0x00, 0x00, 0x02, 0x64, + 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, + 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, + 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x00, 0x44, 0x00, 0x00, 0x10, 0x00, 0x04, + 0x08, 0x00, 0x00, 0x04, 0x00, 0x80, 0x28, 0x04, + 0x00, 0x00, 0x40, 0xd5, 0x2d, 0x00, 0x64, 0x35, + 0x24, 0x52, 0xf4, 0xd4, 0xbd, 0x62, 0xc9, 0x03, + // Entry 180 - 1BF + 0x00, 0x80, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x13, 0x39, 0x01, 0xdd, 0x57, 0x98, + 0x21, 0x18, 0x81, 0x00, 0x00, 0x01, 0x40, 0x82, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x44, 0x00, 0x00, 0x80, 0xea, + 0xa9, 0x39, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, + 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, + 0x04, 0x20, 0x04, 0xa6, 0x00, 0x04, 0x00, 0x00, + 0x81, 0x50, 0x00, 0x00, 0x00, 0x11, 0x84, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x55, + 0x02, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 0x40, + 0x30, 0x83, 0x01, 0x00, 0x00, 0x00, 0x11, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 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, + 0xa4, 0x45, 0x25, 0x9b, 0x02, 0xdf, 0xe0, 0xdf, + 0x03, 0x44, 0x08, 0x10, 0x01, 0x04, 0x01, 0xe3, + 0x92, 0x54, 0xdb, 0x28, 0xd1, 0x5f, 0xf6, 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, + 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, + // 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, + 0xe7, 0x48, 0x00, 0x81, 0x20, 0xc0, 0x05, 0x80, + 0x03, 0x00, 0x00, 0x00, 0x8c, 0x50, 0x40, 0x04, + 0x84, 0x47, 0x84, 0x40, 0x20, 0x10, 0x00, 0x20, + // Entry 2C0 - 2FF + 0x02, 0x50, 0x80, 0x11, 0x00, 0x91, 0x6c, 0xe2, + 0x50, 0x27, 0x1d, 0x11, 0x29, 0x06, 0x59, 0xe9, + 0x33, 0x08, 0x00, 0x20, 0x04, 0x40, 0x10, 0x00, + 0x00, 0x00, 0x50, 0x44, 0x92, 0x49, 0xd6, 0x5d, + 0xa7, 0x81, 0x47, 0x97, 0xfb, 0x00, 0x10, 0x00, + 0x08, 0x00, 0x80, 0x00, 0x40, 0x04, 0x00, 0x01, + 0x02, 0x00, 0x01, 0x40, 0x80, 0x00, 0x00, 0x08, + 0xd8, 0xeb, 0xf6, 0x39, 0xc4, 0x89, 0x12, 0x00, + // Entry 300 - 33F + 0x00, 0x0c, 0x04, 0x01, 0x20, 0x20, 0xdd, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, + 0x04, 0x10, 0xd0, 0x9d, 0x95, 0x13, 0x04, 0x80, + 0x00, 0x01, 0xd0, 0x12, 0x40, 0x00, 0x10, 0xb0, + 0x10, 0x62, 0x4c, 0xd2, 0x02, 0x01, 0x4a, 0x00, + 0x46, 0x04, 0x00, 0x08, 0x02, 0x00, 0x20, 0x80, + 0x00, 0x80, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0xf0, 0xd8, 0x6f, 0x15, 0x02, 0x08, 0x00, + // Entry 340 - 37F + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, + 0x00, 0x10, 0x00, 0x00, 0x00, 0xf0, 0x84, 0xe3, + 0xdd, 0xbf, 0xf9, 0xf9, 0x3b, 0x7f, 0x7f, 0xdb, + 0xfd, 0xfc, 0xfe, 0xdf, 0xff, 0xfd, 0xff, 0xf6, + 0xfb, 0xfc, 0xf7, 0x1f, 0xff, 0xb3, 0x6c, 0xff, + 0xd9, 0xad, 0xdf, 0xfe, 0xef, 0xba, 0xdf, 0xff, + 0xff, 0xff, 0xb7, 0xdd, 0x7d, 0xbf, 0xab, 0x7f, + 0xfd, 0xfd, 0xdf, 0x2f, 0x9c, 0xdf, 0xf3, 0x6f, + // Entry 380 - 3BF + 0xdf, 0xdd, 0xff, 0xfb, 0xee, 0xd2, 0xab, 0x5f, + 0xd5, 0xdf, 0x7f, 0xff, 0xeb, 0xff, 0xe4, 0x4d, + 0xf9, 0xff, 0xfe, 0xf7, 0xfd, 0xdf, 0xfb, 0xbf, + 0xee, 0xdb, 0x6f, 0xef, 0xff, 0x7f, 0xff, 0xff, + 0xf7, 0x5f, 0xd3, 0x3b, 0xfd, 0xd9, 0xdf, 0xeb, + 0xbc, 0x08, 0x05, 0x24, 0xff, 0x07, 0x70, 0xfe, + 0xe6, 0x5e, 0x00, 0x08, 0x00, 0x83, 0x3d, 0x1b, + 0x06, 0xe6, 0x72, 0x60, 0xd1, 0x3c, 0x7f, 0x44, + // Entry 3C0 - 3FF + 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, + 0x04, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x17, 0xd2, + 0xb9, 0xfd, 0xfc, 0xba, 0xfe, 0xef, 0xc7, 0xbe, + // Entry 400 - 43F + 0x53, 0x6f, 0xdf, 0xe7, 0xdb, 0x65, 0xbb, 0x7f, + 0xfa, 0xff, 0x77, 0xf3, 0xef, 0xbf, 0xfd, 0xf7, + 0xdf, 0xdf, 0x9b, 0x7f, 0xff, 0xff, 0x7f, 0x6f, + 0xf7, 0xfb, 0xeb, 0xdf, 0xbc, 0xff, 0xbf, 0x6b, + 0x7b, 0xfb, 0xff, 0xce, 0x76, 0xbd, 0xf7, 0xf7, + 0xdf, 0xdc, 0xf7, 0xf7, 0xff, 0xdf, 0xf3, 0xfe, + 0xef, 0xff, 0xff, 0xff, 0xb6, 0x7f, 0x7f, 0xde, + 0xf7, 0xb9, 0xeb, 0x77, 0xff, 0xfb, 0xbf, 0xdf, + // Entry 440 - 47F + 0xfd, 0xfe, 0xfb, 0xff, 0xfe, 0xeb, 0x1f, 0x7d, + 0x2f, 0xfd, 0xb6, 0xb5, 0xa5, 0xfc, 0xff, 0xfd, + 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, + 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, + 0x63, 0x1d, 0x53, 0xff, 0xef, 0xb7, 0x35, 0x20, + 0x14, 0x00, 0x55, 0x51, 0x82, 0x65, 0xf5, 0x41, + 0xe2, 0xff, 0xfc, 0xdf, 0x00, 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, + 0x06, 0x01, 0x20, 0x00, 0x18, 0x01, 0x92, 0xb1, + // Entry 4C0 - 4FF + 0xfd, 0x47, 0x49, 0x06, 0x95, 0x06, 0x57, 0xed, + 0xfb, 0x4c, 0x1c, 0x6b, 0x83, 0x04, 0x62, 0x40, + 0x00, 0x11, 0x42, 0x00, 0x00, 0x00, 0x54, 0x83, + 0xb8, 0x4f, 0x10, 0x8c, 0x89, 0x46, 0xde, 0xf7, + 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, + // 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, + 0xfd, 0xfc, 0xd5, 0xed, 0x47, 0xf4, 0x7e, 0x10, + 0x01, 0x01, 0x84, 0x6d, 0xff, 0xf7, 0xdd, 0xf9, + 0x5b, 0x05, 0x86, 0xed, 0xf5, 0x77, 0xbd, 0x3c, + 0x00, 0x00, 0x00, 0x42, 0x71, 0x42, 0x00, 0x40, + // Entry 540 - 57F + 0x00, 0x00, 0x01, 0x43, 0x19, 0x00, 0x08, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + // Entry 580 - 5BF + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xab, 0xbd, 0xe7, 0x57, 0xee, 0x13, 0x5d, + 0x09, 0xc1, 0x40, 0x21, 0xfa, 0x17, 0x01, 0x80, + 0x00, 0x00, 0x00, 0x00, 0xf0, 0xce, 0xfb, 0xbf, + 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x30, 0x15, 0xa3, 0x10, 0x00, 0x00, 0x00, + 0x11, 0x04, 0x16, 0x00, 0x00, 0x02, 0x00, 0x81, + 0xa3, 0x01, 0x50, 0x00, 0x00, 0x83, 0x11, 0x40, + // Entry 5C0 - 5FF + 0x00, 0x00, 0x00, 0xf0, 0xdd, 0x7b, 0x3e, 0x02, + 0xaa, 0x10, 0x5d, 0x98, 0x52, 0x00, 0x80, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x02, 0x02, + 0x19, 0x00, 0x10, 0x02, 0x10, 0x61, 0x5a, 0x9d, + 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, + // Entry 600 - 63F + 0x7b, 0x4b, 0x40, 0x10, 0xe1, 0xfd, 0xaf, 0xd9, + 0xb7, 0xf6, 0xfb, 0xb3, 0xc7, 0xff, 0x6f, 0xf1, + 0x73, 0xb1, 0x7f, 0x9f, 0x7f, 0xbd, 0xfc, 0xb7, + 0xee, 0x1c, 0xfa, 0xcb, 0xef, 0xdd, 0xf9, 0xbd, + 0x6e, 0xae, 0x55, 0xfd, 0x6e, 0x81, 0x76, 0x1f, + 0xd4, 0x77, 0xf5, 0x7d, 0xfb, 0xff, 0xeb, 0xfe, + 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, + 0xff, 0xe4, 0xef, 0x6f, 0xff, 0xfc, 0xdd, 0xde, + 0xfc, 0xfd, 0x76, 0x5f, 0x7a, 0x1f, 0x00, 0x98, + 0x02, 0xfb, 0xa3, 0xef, 0xf3, 0xd6, 0xf2, 0xff, + 0xb9, 0xda, 0x7d, 0x50, 0x1e, 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, + 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, + // 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, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x80, 0x10, 0x10, 0xab, + 0x6d, 0x93, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0x80, 0x25, 0x00, 0x00, + // Entry 700 - 73F + 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x80, 0x86, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x01, + 0xdf, 0x18, 0x00, 0x00, 0x02, 0xf0, 0xfd, 0x79, + 0x3b, 0x00, 0x25, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, + 0x03, 0x00, 0x09, 0x20, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // Entry 740 - 77F + 0x00, 0x00, 0x00, 0xef, 0xd5, 0xfd, 0xcf, 0x7e, + 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, + 0x97, 0x7c, 0x9f, 0x31, 0xcc, 0x68, 0xd1, 0x03, + 0xd5, 0x57, 0x27, 0x14, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x2c, 0xf7, 0xcb, 0x1f, 0x14, 0x60, + // Entry 780 - 7BF + 0x03, 0x68, 0x01, 0x10, 0x8b, 0x38, 0x8a, 0x01, + 0x00, 0x00, 0x20, 0x00, 0x24, 0x44, 0x00, 0x00, + 0x10, 0x03, 0x11, 0x02, 0x01, 0x00, 0x00, 0xf0, + 0xf5, 0xff, 0xd5, 0x97, 0xbc, 0x70, 0xd6, 0x78, + 0x78, 0x15, 0x50, 0x01, 0xa4, 0x84, 0xa9, 0x41, + 0x00, 0x00, 0x00, 0x6b, 0x39, 0x52, 0x74, 0x00, + 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, + 0xcc, 0x16, 0x9e, 0xea, 0x35, 0x7d, 0xef, 0xff, + 0xbd, 0xa4, 0xaf, 0x01, 0x44, 0x18, 0x01, 0x4d, + 0x4e, 0x4a, 0x08, 0x50, 0x28, 0x30, 0xe0, 0x80, + 0x10, 0x20, 0x24, 0x00, 0xff, 0x2f, 0xd3, 0x60, + 0xfe, 0x01, 0x02, 0x88, 0x0a, 0x40, 0x16, 0x01, + 0x01, 0x15, 0x2b, 0x3c, 0x01, 0x00, 0x00, 0x10, + // Entry 800 - 83F + 0x90, 0x49, 0x41, 0x02, 0x02, 0x01, 0xe1, 0xbf, + 0xbf, 0x03, 0x00, 0x00, 0x10, 0xd4, 0xa3, 0xd1, + 0x40, 0x9c, 0x44, 0xdf, 0xf5, 0x8f, 0x66, 0xb3, + 0x55, 0x20, 0xd4, 0xc1, 0xd8, 0x30, 0x3d, 0x80, + 0x00, 0x00, 0x00, 0x04, 0xd4, 0x11, 0xc5, 0x84, + 0x2e, 0x50, 0x00, 0x22, 0x50, 0x6e, 0xbd, 0x93, + 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, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x02, 0x28, + 0x84, 0x00, 0x21, 0xc0, 0x23, 0x24, 0x00, 0x00, + 0x00, 0xcb, 0xe4, 0x3a, 0x42, 0x88, 0x14, 0xf1, + 0xef, 0xff, 0x7f, 0x12, 0x01, 0x01, 0x84, 0x50, + 0x07, 0xfc, 0xff, 0xff, 0x0f, 0x01, 0x00, 0x40, + 0x10, 0x38, 0x01, 0x01, 0x1c, 0x12, 0x40, 0xe1, + // Entry 880 - 8BF + 0x76, 0x16, 0x08, 0x03, 0x10, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x24, + 0x0a, 0x00, 0x80, 0x00, 0x00, +} + +// altLangISO3 holds an alphabetically sorted list of 3-letter language code alternatives +// to 2-letter language codes that cannot be derived using the method described above. +// Each 3-letter code is followed by its 1-byte langID. +const altLangISO3 tag.Index = "---\x00cor\x00hbs\x01heb\x02kin\x03spa\x04yid\x05\xff\xff\xff\xff" + +// altLangIndex is used to convert indexes in altLangISO3 to langIDs. +// Size: 12 bytes, 6 elements +var altLangIndex = [6]uint16{ + 0x0281, 0x0407, 0x01fb, 0x03e5, 0x013e, 0x0208, +} + +// AliasMap maps langIDs to their suggested replacements. +// Size: 656 bytes, 164 elements +var AliasMap = [164]FromTo{ + 0: {From: 0x82, To: 0x88}, + 1: {From: 0x187, To: 0x1ae}, + 2: {From: 0x1f3, To: 0x1e1}, + 3: {From: 0x1fb, To: 0x1bc}, + 4: {From: 0x208, To: 0x512}, + 5: {From: 0x20f, To: 0x20e}, + 6: {From: 0x310, To: 0x3dc}, + 7: {From: 0x347, To: 0x36f}, + 8: {From: 0x407, To: 0x432}, + 9: {From: 0x47a, To: 0x153}, + 10: {From: 0x490, To: 0x451}, + 11: {From: 0x4a2, To: 0x21}, + 12: {From: 0x53e, To: 0x544}, + 13: {From: 0x58f, To: 0x12d}, + 14: {From: 0x630, To: 0x1eb1}, + 15: {From: 0x651, To: 0x431}, + 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}, +} + +// Size: 164 bytes, 164 elements +var AliasTypes = [164]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, + // 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, + // 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, +} + +const ( + _Latn = 87 + _Hani = 54 + _Hans = 56 + _Hant = 57 + _Qaaa = 139 + _Qaai = 147 + _Qabx = 188 + _Zinh = 236 + _Zyyy = 241 + _Zzzz = 242 +) + +// 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 + "----AdlmAfakAghbAhomArabAranArmiArmnAvstBaliBamuBassBatkBengBhksBlisBopo" + + "BrahBraiBugiBuhdCakmCansCariChamCherCirtCoptCpmnCprtCyrlCyrsDevaDogrDsrt" + + "DuplEgydEgyhEgypElbaEthiGeokGeorGlagGongGonmGothGranGrekGujrGuruHanbHang" + + "HaniHanoHansHantHatrHebrHiraHluwHmngHmnpHrktHungIndsItalJamoJavaJpanJurc" + + "KaliKanaKharKhmrKhojKitlKitsKndaKoreKpelKthiLanaLaooLatfLatgLatnLekeLepc" + + "LimbLinaLinbLisuLomaLyciLydiMahjMakaMandManiMarcMayaMedfMendMercMeroMlym" + + "ModiMongMoonMrooMteiMultMymrNarbNbatNewaNkdbNkgbNkooNshuOgamOlckOrkhOrya" + + "OsgeOsmaPalmPaucPermPhagPhliPhlpPhlvPhnxPiqdPlrdPrtiQaaaQaabQaacQaadQaae" + + "QaafQaagQaahQaaiQaajQaakQaalQaamQaanQaaoQaapQaaqQaarQaasQaatQaauQaavQaaw" + + "QaaxQaayQaazQabaQabbQabcQabdQabeQabfQabgQabhQabiQabjQabkQablQabmQabnQabo" + + "QabpQabqQabrQabsQabtQabuQabvQabwQabxRjngRoroRunrSamrSaraSarbSaurSgnwShaw" + + "ShrdShuiSiddSindSinhSoraSoyoSundSyloSyrcSyreSyrjSyrnTagbTakrTaleTaluTaml" + + "TangTavtTeluTengTfngTglgThaaThaiTibtTirhUgarVaiiVispWaraWchoWoleXpeoXsux" + + "YiiiZanbZinhZmthZsyeZsymZxxxZyyyZzzz\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, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, + 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, 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, + // Entry 80 - BF + 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, 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, 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, 0x00, + 0x57, 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, + // Entry 100 - 13F + 0x57, 0x57, 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, 0x00, 0x00, 0x00, 0x00, 0x57, + 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, + // Entry 140 - 17F + 0x57, 0x00, 0x00, 0x00, 0x00, 0x57, 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, 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, + 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, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x21, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x57, 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, + // Entry 200 - 23F + 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2b, 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, 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 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, 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, + // Entry 2C0 - 2FF + 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 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, + // Entry 300 - 33F + 0x00, 0x00, 0x00, 0x00, 0x6b, 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, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 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, 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, + // Entry 380 - 3BF + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x57, 0x00, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 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, 0x00, 0x00, 0x05, 0x00, + // Entry 3C0 - 3FF + 0x57, 0x00, 0x00, 0x00, 0x57, 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, 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, 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, + // Entry 440 - 47F + 0x00, 0x00, 0x00, 0x00, 0x57, 0x57, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xd7, 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, + // Entry 480 - 4BF + 0x57, 0x00, 0x57, 0x00, 0x00, 0x00, 0x57, 0x00, + 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x57, 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, + 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, + 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, + 0x00, 0x00, +} + +const ( + _001 = 1 + _419 = 31 + _BR = 65 + _CA = 73 + _ES = 110 + _GB = 123 + _MD = 188 + _PT = 238 + _UK = 306 + _US = 309 + _ZZ = 357 + _XA = 323 + _XC = 325 + _XK = 333 +) + +// isoRegionOffset needs to be added to the index of regionISO to obtain the regionID +// for 2-letter ISO codes. (The first isoRegionOffset regionIDs are reserved for +// the UN.M49 codes used for groups.) +const isoRegionOffset = 32 + +// regionTypes defines the status of a region for various standards. +// Size: 358 bytes, 358 elements +var regionTypes = [358]uint8{ + // Entry 0 - 3F + 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, + 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + // Entry 40 - 7F + 0x06, 0x06, 0x06, 0x06, 0x04, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x04, 0x06, 0x04, + 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x04, + 0x06, 0x04, 0x06, 0x06, 0x06, 0x06, 0x00, 0x06, + 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, + 0x06, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + // Entry 80 - BF + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x00, 0x04, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + // Entry C0 - FF + 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, + 0x06, 0x06, 0x06, 0x06, 0x00, 0x06, 0x04, 0x06, + 0x06, 0x06, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, + 0x06, 0x06, 0x00, 0x06, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + // Entry 100 - 13F + 0x05, 0x05, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x04, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x02, 0x06, 0x04, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, + // Entry 140 - 17F + 0x06, 0x00, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x04, 0x06, 0x06, + 0x04, 0x06, 0x06, 0x04, 0x06, 0x05, +} + +// regionISO holds a list of alphabetically sorted 2-letter ISO region codes. +// Each 2-letter codes is followed by two bytes with the following meaning: +// - [A-Z}{2}: the first letter of the 2-letter code plus these two +// letters form the 3-letter ISO code. +// - 0, n: index into altRegionISO3. +const regionISO tag.Index = "" + // Size: 1308 bytes + "AAAAACSCADNDAEREAFFGAGTGAIIAALLBAMRMANNTAOGOAQTAARRGASSMATUTAUUSAWBWAXLA" + + "AZZEBAIHBBRBBDGDBEELBFFABGGRBHHRBIDIBJENBLLMBMMUBNRNBOOLBQESBRRABSHSBTTN" + + "BUURBVVTBWWABYLRBZLZCAANCCCKCDODCFAFCGOGCHHECIIVCKOKCLHLCMMRCNHNCOOLCPPT" + + "CRRICS\x00\x00CTTECUUBCVPVCWUWCXXRCYYPCZZEDDDRDEEUDGGADJJIDKNKDMMADOOMDY" + + "HYDZZAEA ECCUEESTEGGYEHSHERRIESSPETTHEU\x00\x03EZ FIINFJJIFKLKFMSMFORO" + + "FQ\x00\x18FRRAFXXXGAABGBBRGDRDGEEOGFUFGGGYGHHAGIIBGLRLGMMBGNINGPLPGQNQGR" + + "RCGS\x00\x06GTTMGUUMGWNBGYUYHKKGHMMDHNNDHRRVHTTIHUUNHVVOIC IDDNIERLILSR" + + "IMMNINNDIOOTIQRQIRRNISSLITTAJEEYJMAMJOORJPPNJTTNKEENKGGZKHHMKIIRKM\x00" + + "\x09KNNAKP\x00\x0cKRORKWWTKY\x00\x0fKZAZLAAOLBBNLCCALIIELKKALRBRLSSOLTTU" + + "LUUXLVVALYBYMAARMCCOMDDAMENEMFAFMGDGMHHLMIIDMKKDMLLIMMMRMNNGMOACMPNPMQTQ" + + "MRRTMSSRMTLTMUUSMVDVMWWIMXEXMYYSMZOZNAAMNCCLNEERNFFKNGGANHHBNIICNLLDNOOR" + + "NPPLNQ\x00\x1eNRRUNTTZNUIUNZZLOMMNPAANPCCIPEERPFYFPGNGPHHLPKAKPLOLPM\x00" + + "\x12PNCNPRRIPSSEPTRTPUUSPWLWPYRYPZCZQAATQMMMQNNNQOOOQPPPQQQQQRRRQSSSQTTT" + + "QU\x00\x03QVVVQWWWQXXXQYYYQZZZREEURHHOROOURS\x00\x15RUUSRWWASAAUSBLBSCYC" + + "SDDNSEWESGGPSHHNSIVNSJJMSKVKSLLESMMRSNENSOOMSRURSSSDSTTPSUUNSVLVSXXMSYYR" + + "SZWZTAAATCCATDCDTF\x00\x18TGGOTHHATJJKTKKLTLLSTMKMTNUNTOONTPMPTRURTTTOTV" + + "UVTWWNTZZAUAKRUGGAUK UMMIUN USSAUYRYUZZBVAATVCCTVDDRVEENVGGBVIIRVNNMVU" + + "UTWFLFWKAKWSSMXAAAXBBBXCCCXDDDXEEEXFFFXGGGXHHHXIIIXJJJXKKKXLLLXMMMXNNNXO" + + "OOXPPPXQQQXRRRXSSSXTTTXUUUXVVVXWWWXXXXXYYYXZZZYDMDYEEMYT\x00\x1bYUUGZAAF" + + "ZMMBZRARZWWEZZZZ\xff\xff\xff\xff" + +// altRegionISO3 holds a list of 3-letter region codes that cannot be +// mapped to 2-letter codes using the default algorithm. This is a short list. +const altRegionISO3 string = "SCGQUUSGSCOMPRKCYMSPMSRBATFMYTATN" + +// altRegionIDs holds a list of regionIDs the positions of which match those +// of the 3-letter ISO codes in altRegionISO3. +// Size: 22 bytes, 11 elements +var altRegionIDs = [11]uint16{ + 0x0057, 0x0070, 0x0088, 0x00a8, 0x00aa, 0x00ad, 0x00ea, 0x0105, + 0x0121, 0x015f, 0x00dc, +} + +// Size: 80 bytes, 20 elements +var regionOldMap = [20]FromTo{ + 0: {From: 0x44, To: 0xc4}, + 1: {From: 0x58, To: 0xa7}, + 2: {From: 0x5f, To: 0x60}, + 3: {From: 0x66, To: 0x3b}, + 4: {From: 0x79, To: 0x78}, + 5: {From: 0x93, To: 0x37}, + 6: {From: 0xa3, To: 0x133}, + 7: {From: 0xc1, To: 0x133}, + 8: {From: 0xd7, To: 0x13f}, + 9: {From: 0xdc, To: 0x2b}, + 10: {From: 0xef, To: 0x133}, + 11: {From: 0xf2, To: 0xe2}, + 12: {From: 0xfc, To: 0x70}, + 13: {From: 0x103, To: 0x164}, + 14: {From: 0x12a, To: 0x126}, + 15: {From: 0x132, To: 0x7b}, + 16: {From: 0x13a, To: 0x13e}, + 17: {From: 0x141, To: 0x133}, + 18: {From: 0x15d, To: 0x15e}, + 19: {From: 0x163, To: 0x4b}, +} + +// m49 maps regionIDs to UN.M49 codes. The first isoRegionOffset entries are +// codes indicating collections of regions. +// Size: 716 bytes, 358 elements +var m49 = [358]int16{ + // Entry 0 - 3F + 0, 1, 2, 3, 5, 9, 11, 13, + 14, 15, 17, 18, 19, 21, 29, 30, + 34, 35, 39, 53, 54, 57, 61, 142, + 143, 145, 150, 151, 154, 155, 202, 419, + 958, 0, 20, 784, 4, 28, 660, 8, + 51, 530, 24, 10, 32, 16, 40, 36, + 533, 248, 31, 70, 52, 50, 56, 854, + 100, 48, 108, 204, 652, 60, 96, 68, + // Entry 40 - 7F + 535, 76, 44, 64, 104, 74, 72, 112, + 84, 124, 166, 180, 140, 178, 756, 384, + 184, 152, 120, 156, 170, 0, 188, 891, + 296, 192, 132, 531, 162, 196, 203, 278, + 276, 0, 262, 208, 212, 214, 204, 12, + 0, 218, 233, 818, 732, 232, 724, 231, + 967, 0, 246, 242, 238, 583, 234, 0, + 250, 249, 266, 826, 308, 268, 254, 831, + // Entry 80 - BF + 288, 292, 304, 270, 324, 312, 226, 300, + 239, 320, 316, 624, 328, 344, 334, 340, + 191, 332, 348, 854, 0, 360, 372, 376, + 833, 356, 86, 368, 364, 352, 380, 832, + 388, 400, 392, 581, 404, 417, 116, 296, + 174, 659, 408, 410, 414, 136, 398, 418, + 422, 662, 438, 144, 430, 426, 440, 442, + 428, 434, 504, 492, 498, 499, 663, 450, + // Entry C0 - FF + 584, 581, 807, 466, 104, 496, 446, 580, + 474, 478, 500, 470, 480, 462, 454, 484, + 458, 508, 516, 540, 562, 574, 566, 548, + 558, 528, 578, 524, 10, 520, 536, 570, + 554, 512, 591, 0, 604, 258, 598, 608, + 586, 616, 666, 612, 630, 275, 620, 581, + 585, 600, 591, 634, 959, 960, 961, 962, + 963, 964, 965, 966, 967, 968, 969, 970, + // Entry 100 - 13F + 971, 972, 638, 716, 642, 688, 643, 646, + 682, 90, 690, 729, 752, 702, 654, 705, + 744, 703, 694, 674, 686, 706, 740, 728, + 678, 810, 222, 534, 760, 748, 0, 796, + 148, 260, 768, 764, 762, 772, 626, 795, + 788, 776, 626, 792, 780, 798, 158, 834, + 804, 800, 826, 581, 0, 840, 858, 860, + 336, 670, 704, 862, 92, 850, 704, 548, + // Entry 140 - 17F + 876, 581, 882, 973, 974, 975, 976, 977, + 978, 979, 980, 981, 982, 983, 984, 985, + 986, 987, 988, 989, 990, 991, 992, 993, + 994, 995, 996, 997, 998, 720, 887, 175, + 891, 710, 894, 180, 716, 999, +} + +// m49Index gives indexes into fromM49 based on the three most significant bits +// of a 10-bit UN.M49 code. To search an UN.M49 code in fromM49, search in +// fromM49[m49Index[msb39(code)]:m49Index[msb3(code)+1]] +// for an entry where the first 7 bits match the 7 lsb of the UN.M49 code. +// The region code is stored in the 9 lsb of the indexed value. +// Size: 18 bytes, 9 elements +var m49Index = [9]int16{ + 0, 59, 108, 143, 181, 220, 259, 291, + 333, +} + +// fromM49 contains entries to map UN.M49 codes to regions. See m49Index for details. +// Size: 666 bytes, 333 elements +var fromM49 = [333]uint16{ + // Entry 0 - 3F + 0x0201, 0x0402, 0x0603, 0x0824, 0x0a04, 0x1027, 0x1205, 0x142b, + 0x1606, 0x1867, 0x1a07, 0x1c08, 0x1e09, 0x202d, 0x220a, 0x240b, + 0x260c, 0x2822, 0x2a0d, 0x302a, 0x3825, 0x3a0e, 0x3c0f, 0x3e32, + 0x402c, 0x4410, 0x4611, 0x482f, 0x4e12, 0x502e, 0x5842, 0x6039, + 0x6435, 0x6628, 0x6834, 0x6a13, 0x6c14, 0x7036, 0x7215, 0x783d, + 0x7a16, 0x8043, 0x883f, 0x8c33, 0x9046, 0x9445, 0x9841, 0xa848, + 0xac9a, 0xb509, 0xb93c, 0xc03e, 0xc838, 0xd0c4, 0xd83a, 0xe047, + 0xe8a6, 0xf052, 0xf849, 0x085a, 0x10ad, 0x184c, 0x1c17, 0x1e18, + // Entry 40 - 7F + 0x20b3, 0x2219, 0x2920, 0x2c1a, 0x2e1b, 0x3051, 0x341c, 0x361d, + 0x3853, 0x3d2e, 0x445c, 0x4c4a, 0x5454, 0x5ca8, 0x5f5f, 0x644d, + 0x684b, 0x7050, 0x7856, 0x7e90, 0x8059, 0x885d, 0x941e, 0x965e, + 0x983b, 0xa063, 0xa864, 0xac65, 0xb469, 0xbd1a, 0xc486, 0xcc6f, + 0xce6f, 0xd06d, 0xd26a, 0xd476, 0xdc74, 0xde88, 0xe473, 0xec72, + 0xf031, 0xf279, 0xf478, 0xfc7e, 0x04e5, 0x0921, 0x0c62, 0x147a, + 0x187d, 0x1c83, 0x26ed, 0x2860, 0x2c5f, 0x3060, 0x4080, 0x4881, + 0x50a7, 0x5887, 0x6082, 0x687c, 0x7085, 0x788a, 0x8089, 0x8884, + // Entry 80 - BF + 0x908c, 0x9891, 0x9c8e, 0xa138, 0xa88f, 0xb08d, 0xb892, 0xc09d, + 0xc899, 0xd095, 0xd89c, 0xe09b, 0xe896, 0xf097, 0xf89e, 0x004f, + 0x08a0, 0x10a2, 0x1cae, 0x20a1, 0x28a4, 0x30aa, 0x34ab, 0x3cac, + 0x42a5, 0x44af, 0x461f, 0x4cb0, 0x54b5, 0x58b8, 0x5cb4, 0x64b9, + 0x6cb2, 0x70b6, 0x74b7, 0x7cc6, 0x84bf, 0x8cce, 0x94d0, 0x9ccd, + 0xa4c3, 0xaccb, 0xb4c8, 0xbcc9, 0xc0cc, 0xc8cf, 0xd8bb, 0xe0c5, + 0xe4bc, 0xe6bd, 0xe8ca, 0xf0ba, 0xf8d1, 0x00e1, 0x08d2, 0x10dd, + 0x18db, 0x20d9, 0x2429, 0x265b, 0x2a30, 0x2d1b, 0x2e40, 0x30de, + // Entry C0 - FF + 0x38d3, 0x493f, 0x54e0, 0x5cd8, 0x64d4, 0x6cd6, 0x74df, 0x7cd5, + 0x84da, 0x88c7, 0x8b33, 0x8e75, 0x90c0, 0x92f0, 0x94e8, 0x9ee2, + 0xace6, 0xb0f1, 0xb8e4, 0xc0e7, 0xc8eb, 0xd0e9, 0xd8ee, 0xe08b, + 0xe526, 0xecec, 0xf4f3, 0xfd02, 0x0504, 0x0706, 0x0d07, 0x183c, + 0x1d0e, 0x26a9, 0x2826, 0x2cb1, 0x2ebe, 0x34ea, 0x3d39, 0x4513, + 0x4d18, 0x5508, 0x5d14, 0x6105, 0x650a, 0x6d12, 0x7d0d, 0x7f11, + 0x813e, 0x830f, 0x8515, 0x8d61, 0x9964, 0xa15d, 0xa86e, 0xb117, + 0xb30b, 0xb86c, 0xc10b, 0xc916, 0xd110, 0xd91d, 0xe10c, 0xe84e, + // Entry 100 - 13F + 0xf11c, 0xf524, 0xf923, 0x0122, 0x0925, 0x1129, 0x192c, 0x2023, + 0x2928, 0x312b, 0x3727, 0x391f, 0x3d2d, 0x4131, 0x4930, 0x4ec2, + 0x5519, 0x646b, 0x747b, 0x7e7f, 0x809f, 0x8298, 0x852f, 0x9135, + 0xa53d, 0xac37, 0xb536, 0xb937, 0xbd3b, 0xd940, 0xe542, 0xed5e, + 0xef5e, 0xf657, 0xfd62, 0x7c20, 0x7ef4, 0x80f5, 0x82f6, 0x84f7, + 0x86f8, 0x88f9, 0x8afa, 0x8cfb, 0x8e70, 0x90fd, 0x92fe, 0x94ff, + 0x9700, 0x9901, 0x9b43, 0x9d44, 0x9f45, 0xa146, 0xa347, 0xa548, + 0xa749, 0xa94a, 0xab4b, 0xad4c, 0xaf4d, 0xb14e, 0xb34f, 0xb550, + // Entry 140 - 17F + 0xb751, 0xb952, 0xbb53, 0xbd54, 0xbf55, 0xc156, 0xc357, 0xc558, + 0xc759, 0xc95a, 0xcb5b, 0xcd5c, 0xcf65, +} + +// Size: 1615 bytes +var variantIndex = map[string]uint8{ + "1606nict": 0x0, + "1694acad": 0x1, + "1901": 0x2, + "1959acad": 0x3, + "1994": 0x4d, + "1996": 0x4, + "abl1943": 0x5, + "akuapem": 0x6, + "alalc97": 0x4f, + "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, +} + +// variantNumSpecialized is the number of specialized variants in variants. +const variantNumSpecialized = 79 + +// nRegionGroups is the number of region groups. +const nRegionGroups = 33 + +type likelyLangRegion struct { + lang uint16 + region uint16 +} + +// 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{ + 1: {lang: 0x14e, region: 0x84}, + 3: {lang: 0x2a2, region: 0x106}, + 4: {lang: 0x1f, region: 0x99}, + 5: {lang: 0x3a, region: 0x6b}, + 7: {lang: 0x3b, region: 0x9c}, + 8: {lang: 0x1d7, region: 0x28}, + 9: {lang: 0x13, region: 0x9c}, + 10: {lang: 0x5b, region: 0x95}, + 11: {lang: 0x60, region: 0x52}, + 12: {lang: 0xb9, region: 0xb4}, + 13: {lang: 0x63, region: 0x95}, + 14: {lang: 0xa5, region: 0x35}, + 15: {lang: 0x3e9, region: 0x99}, + 17: {lang: 0x529, region: 0x12e}, + 18: {lang: 0x3b1, region: 0x99}, + 19: {lang: 0x15e, region: 0x78}, + 20: {lang: 0xc2, region: 0x95}, + 21: {lang: 0x9d, region: 0xe7}, + 22: {lang: 0xdb, region: 0x35}, + 23: {lang: 0xf3, region: 0x49}, + 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}, + 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}, +} + +type likelyScriptRegion struct { + region uint16 + script uint8 + flags uint8 +} + +// likelyLang is a lookup table, indexed by langID, for the most likely +// scripts and regions given incomplete information. If more entries exist for a +// given language, region and script are the index and size respectively +// 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 88: {region: 0x3, script: 0x5, flags: 0x1}, + 89: {region: 0x106, script: 0x1f, 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 173: {region: 0x99, script: 0xe, flags: 0x0}, + 174: {region: 0x165, script: 0x57, 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 243: {region: 0x49, script: 0x17, flags: 0x0}, + 244: {region: 0x130, script: 0x1f, 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}, + 252: {region: 0x49, script: 0x17, flags: 0x0}, + 253: {region: 0xc4, script: 0x81, 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 395: {region: 0xe8, script: 0x5, flags: 0x0}, + 396: {region: 0x165, script: 0x57, 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}, + 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}, + 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}, + 432: {region: 0x165, script: 0x5, flags: 0x0}, + 433: {region: 0x49, script: 0x57, flags: 0x0}, + 434: {region: 0x165, script: 0x5, flags: 0x0}, + 435: {region: 0x165, script: 0x57, 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 647: {region: 0xe8, script: 0x5, flags: 0x0}, + 648: {region: 0x165, script: 0x57, flags: 0x0}, + 649: {region: 0x165, script: 0x57, 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 779: {region: 0x26, script: 0x3, flags: 0x1}, + 780: {region: 0x165, script: 0x57, flags: 0x0}, + 781: {region: 0x165, script: 0x57, 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}, + 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}, + 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}, + 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}, + 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}, + 919: {region: 0x165, script: 0x5, flags: 0x0}, + 920: {region: 0x7d, script: 0x1f, flags: 0x0}, + 921: {region: 0x135, script: 0x7e, flags: 0x0}, + 922: {region: 0x165, script: 0x5, flags: 0x0}, + 923: {region: 0xc5, script: 0x7c, flags: 0x0}, + 924: {region: 0x165, script: 0x57, flags: 0x0}, + 925: {region: 0x2c, script: 0x3, flags: 0x1}, + 926: {region: 0xe7, script: 0x57, 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}, + 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}, + 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}, + 956: {region: 0x9c, script: 0x5, flags: 0x0}, + 957: {region: 0x1, script: 0x57, 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}, + 975: {region: 0x165, script: 0x5, flags: 0x0}, + 976: {region: 0x99, script: 0x57, flags: 0x0}, + 977: {region: 0x31, script: 0x2, flags: 0x1}, + 978: {region: 0xdb, script: 0x21, 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}, + 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}, + 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}, + 1018: {region: 0x33, script: 0x4, flags: 0x1}, + 1019: {region: 0x9e, script: 0x57, 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 1318: {region: 0xa8, script: 0x5, flags: 0x0}, + 1319: {region: 0xd9, script: 0x57, flags: 0x0}, + 1320: {region: 0xba, script: 0xdc, 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}, +} + +// 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}, + 4: {region: 0x9b, script: 0x5, flags: 0x4}, + 5: {region: 0x9c, script: 0x5, flags: 0x4}, + 6: {region: 0x106, script: 0x1f, 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}, + 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}, + 17: {region: 0x52, script: 0x5, flags: 0x4}, + 18: {region: 0x10b, script: 0x5, flags: 0x4}, + 19: {region: 0xae, script: 0x1f, 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}, + 26: {region: 0xb0, script: 0x5, flags: 0x4}, + 27: {region: 0x9b, script: 0x5, flags: 0x2}, + 28: {region: 0xa5, script: 0x1f, flags: 0x0}, + 29: {region: 0x53, script: 0x5, flags: 0x4}, + 30: {region: 0x12b, script: 0x57, 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}, + 42: {region: 0x4a, script: 0x5, flags: 0x4}, + 43: {region: 0x95, script: 0x5, flags: 0x4}, + 44: {region: 0x99, script: 0x33, 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}, + 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}, + 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}, + 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}, + 71: {region: 0x24, script: 0x5, flags: 0x4}, + 72: {region: 0x53, script: 0x1f, 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}, + 94: {region: 0x12e, script: 0x11, flags: 0x2}, + 95: {region: 0x12e, script: 0x34, flags: 0x2}, + 96: {region: 0x12e, script: 0x39, flags: 0x2}, +} + +type likelyLangScript struct { + lang uint16 + script uint8 + flags uint8 +} + +// likelyRegion is a lookup table, indexed by regionID, for the most likely +// languages and scripts given incomplete information. If more entries exist +// for a given regionID, lang and script are the index and size respectively +// of the list in likelyRegionList. +// 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 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}, + 149: {lang: 0x1b, script: 0x2, flags: 0x1}, + 151: {lang: 0x1bc, script: 0x3b, 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}, + 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}, + 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}, + 172: {lang: 0x3a, script: 0x5, flags: 0x0}, + 174: {lang: 0x3e2, script: 0x1f, 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}, + 185: {lang: 0x3a, script: 0x5, flags: 0x0}, + 186: {lang: 0x29, script: 0x2, flags: 0x1}, + 187: {lang: 0x15e, script: 0x57, 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}, + 194: {lang: 0x2d, script: 0x2, flags: 0x1}, + 195: {lang: 0xa0, script: 0x57, 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}, + 201: {lang: 0x35, script: 0x2, flags: 0x1}, + 203: {lang: 0x320, script: 0x57, 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}, + 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}, + 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}, + 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}, + 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}, + 243: {lang: 0x3a, script: 0x5, flags: 0x0}, + 258: {lang: 0x15e, script: 0x57, flags: 0x0}, + 260: {lang: 0x3d, script: 0x2, flags: 0x1}, + 261: {lang: 0x432, script: 0x1f, flags: 0x0}, + 262: {lang: 0x3f, script: 0x2, flags: 0x1}, + 263: {lang: 0x3e5, script: 0x57, flags: 0x0}, + 264: {lang: 0x3a, script: 0x5, flags: 0x0}, + 266: {lang: 0x15e, script: 0x57, 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}, + 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}, + 284: {lang: 0x45, script: 0x2, flags: 0x1}, + 288: {lang: 0x15e, script: 0x57, flags: 0x0}, + 289: {lang: 0x15e, script: 0x57, 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}, + 296: {lang: 0x4e, script: 0x2, flags: 0x1}, + 297: {lang: 0x482, script: 0x57, flags: 0x0}, + 299: {lang: 0x50, script: 0x4, flags: 0x1}, + 301: {lang: 0x4a0, script: 0x57, flags: 0x0}, + 302: {lang: 0x54, script: 0x2, flags: 0x1}, + 303: {lang: 0x445, script: 0x57, 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}, + 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}, +} + +// 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}, + 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}, + 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}, + 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}, + 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}, + 28: {lang: 0x31f, script: 0x5, flags: 0x0}, + 29: {lang: 0x1be, script: 0x21, flags: 0x0}, + 30: {lang: 0x4b4, script: 0x5, flags: 0x0}, + 31: {lang: 0x236, script: 0x72, flags: 0x0}, + 32: {lang: 0x148, script: 0x5, flags: 0x0}, + 33: {lang: 0x476, script: 0x57, flags: 0x0}, + 34: {lang: 0x24a, script: 0x4b, flags: 0x0}, + 35: {lang: 0xe6, script: 0x5, flags: 0x0}, + 36: {lang: 0x226, script: 0xdf, 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}, + 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}, + 50: {lang: 0x242, script: 0x5, flags: 0x0}, + 51: {lang: 0x529, script: 0x39, flags: 0x0}, + 52: {lang: 0x3c0, script: 0x57, flags: 0x0}, + 53: {lang: 0x3a, script: 0x5, flags: 0x0}, + 54: {lang: 0x15e, script: 0x57, flags: 0x0}, + 55: {lang: 0x2ed, script: 0x57, flags: 0x0}, + 56: {lang: 0x4b4, script: 0x5, flags: 0x0}, + 57: {lang: 0x88, script: 0x21, 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}, + 69: {lang: 0x3a, script: 0x5, flags: 0x0}, + 70: {lang: 0x15e, script: 0x57, flags: 0x0}, + 71: {lang: 0x15e, script: 0x57, flags: 0x0}, + 72: {lang: 0x35, script: 0x5, flags: 0x0}, + 73: {lang: 0x46b, script: 0xdf, flags: 0x0}, + 74: {lang: 0x2ec, script: 0x5, flags: 0x0}, + 75: {lang: 0x30f, script: 0x72, flags: 0x0}, + 76: {lang: 0x467, script: 0x1f, 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}, + 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}, + 92: {lang: 0x446, script: 0x5, flags: 0x0}, +} + +type likelyTag struct { + lang uint16 + region uint16 + script uint8 +} + +// 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}, + 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}, + 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}, +} + +// Size: 264 bytes, 33 elements +var regionContainment = [33]uint64{ + // Entry 0 - 1F + 0x00000001ffffffff, 0x00000000200007a2, 0x0000000000003044, 0x0000000000000008, + 0x00000000803c0010, 0x0000000000000020, 0x0000000000000040, 0x0000000000000080, + 0x0000000000000100, 0x0000000000000200, 0x0000000000000400, 0x000000004000384c, + 0x0000000000001000, 0x0000000000002000, 0x0000000000004000, 0x0000000000008000, + 0x0000000000010000, 0x0000000000020000, 0x0000000000040000, 0x0000000000080000, + 0x0000000000100000, 0x0000000000200000, 0x0000000001c1c000, 0x0000000000800000, + 0x0000000001000000, 0x000000001e020000, 0x0000000004000000, 0x0000000008000000, + 0x0000000010000000, 0x00000000200006a0, 0x0000000040002048, 0x0000000080000000, + // Entry 20 - 3F + 0x0000000100000000, +} + +// regionInclusion maps region identifiers to sets of regions in regionInclusionBits, +// where each set holds all groupings that are directly connected in a region +// containment graph. +// Size: 358 bytes, 358 elements +var regionInclusion = [358]uint8{ + // Entry 0 - 3F + 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, + 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, + 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, + 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, + 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x26, 0x23, + 0x24, 0x26, 0x27, 0x22, 0x28, 0x29, 0x2a, 0x2b, + 0x26, 0x2c, 0x24, 0x23, 0x26, 0x25, 0x2a, 0x2d, + 0x2e, 0x24, 0x2f, 0x2d, 0x26, 0x30, 0x31, 0x28, + // Entry 40 - 7F + 0x26, 0x28, 0x26, 0x25, 0x31, 0x22, 0x32, 0x33, + 0x34, 0x30, 0x22, 0x27, 0x27, 0x27, 0x35, 0x2d, + 0x29, 0x28, 0x27, 0x36, 0x28, 0x22, 0x34, 0x23, + 0x21, 0x26, 0x2d, 0x26, 0x22, 0x37, 0x2e, 0x35, + 0x2a, 0x22, 0x2f, 0x38, 0x26, 0x26, 0x21, 0x39, + 0x39, 0x28, 0x38, 0x39, 0x39, 0x2f, 0x3a, 0x2f, + 0x20, 0x21, 0x38, 0x3b, 0x28, 0x3c, 0x2c, 0x21, + 0x2a, 0x35, 0x27, 0x38, 0x26, 0x24, 0x28, 0x2c, + // Entry 80 - BF + 0x2d, 0x23, 0x30, 0x2d, 0x2d, 0x26, 0x27, 0x3a, + 0x22, 0x34, 0x3c, 0x2d, 0x28, 0x36, 0x22, 0x34, + 0x3a, 0x26, 0x2e, 0x21, 0x39, 0x31, 0x38, 0x24, + 0x2c, 0x25, 0x22, 0x24, 0x25, 0x2c, 0x3a, 0x2c, + 0x26, 0x24, 0x36, 0x21, 0x2f, 0x3d, 0x31, 0x3c, + 0x2f, 0x26, 0x36, 0x36, 0x24, 0x26, 0x3d, 0x31, + 0x24, 0x26, 0x35, 0x25, 0x2d, 0x32, 0x38, 0x2a, + 0x38, 0x39, 0x39, 0x35, 0x33, 0x23, 0x26, 0x2f, + // Entry C0 - FF + 0x3c, 0x21, 0x23, 0x2d, 0x31, 0x36, 0x36, 0x3c, + 0x26, 0x2d, 0x26, 0x3a, 0x2f, 0x25, 0x2f, 0x34, + 0x31, 0x2f, 0x32, 0x3b, 0x2d, 0x2b, 0x2d, 0x21, + 0x34, 0x2a, 0x2c, 0x25, 0x21, 0x3c, 0x24, 0x29, + 0x2b, 0x24, 0x34, 0x21, 0x28, 0x29, 0x3b, 0x31, + 0x25, 0x2e, 0x30, 0x29, 0x26, 0x24, 0x3a, 0x21, + 0x3c, 0x28, 0x21, 0x24, 0x21, 0x21, 0x1f, 0x21, + 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, + // Entry 100 - 13F + 0x21, 0x21, 0x2f, 0x21, 0x2e, 0x23, 0x33, 0x2f, + 0x24, 0x3b, 0x2f, 0x39, 0x38, 0x31, 0x2d, 0x3a, + 0x2c, 0x2e, 0x2d, 0x23, 0x2d, 0x2f, 0x28, 0x2f, + 0x27, 0x33, 0x34, 0x26, 0x24, 0x32, 0x22, 0x26, + 0x27, 0x22, 0x2d, 0x31, 0x3d, 0x29, 0x31, 0x3d, + 0x39, 0x29, 0x31, 0x24, 0x26, 0x29, 0x36, 0x2f, + 0x33, 0x2f, 0x21, 0x22, 0x21, 0x30, 0x28, 0x3d, + 0x23, 0x26, 0x21, 0x28, 0x26, 0x26, 0x31, 0x3b, + // Entry 140 - 17F + 0x29, 0x21, 0x29, 0x21, 0x21, 0x21, 0x21, 0x21, + 0x21, 0x21, 0x21, 0x21, 0x21, 0x23, 0x21, 0x21, + 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, + 0x21, 0x21, 0x21, 0x21, 0x21, 0x24, 0x24, 0x2f, + 0x23, 0x32, 0x2f, 0x27, 0x2f, 0x21, +} + +// regionInclusionBits is an array of bit vectors where every vector represents +// a set of region groupings. These sets are used to compute the distance +// between two regions for the purpose of language matching. +// Size: 584 bytes, 73 elements +var regionInclusionBits = [73]uint64{ + // Entry 0 - 1F + 0x0000000102400813, 0x00000000200007a3, 0x0000000000003844, 0x0000000040000808, + 0x00000000803c0011, 0x0000000020000022, 0x0000000040000844, 0x0000000020000082, + 0x0000000000000102, 0x0000000020000202, 0x0000000020000402, 0x000000004000384d, + 0x0000000000001804, 0x0000000040002804, 0x0000000000404000, 0x0000000000408000, + 0x0000000000410000, 0x0000000002020000, 0x0000000000040010, 0x0000000000080010, + 0x0000000000100010, 0x0000000000200010, 0x0000000001c1c001, 0x0000000000c00000, + 0x0000000001400000, 0x000000001e020001, 0x0000000006000000, 0x000000000a000000, + 0x0000000012000000, 0x00000000200006a2, 0x0000000040002848, 0x0000000080000010, + // Entry 20 - 3F + 0x0000000100000001, 0x0000000000000001, 0x0000000080000000, 0x0000000000020000, + 0x0000000001000000, 0x0000000000008000, 0x0000000000002000, 0x0000000000000200, + 0x0000000000000008, 0x0000000000200000, 0x0000000110000000, 0x0000000000040000, + 0x0000000008000000, 0x0000000000000020, 0x0000000104000000, 0x0000000000000080, + 0x0000000000001000, 0x0000000000010000, 0x0000000000000400, 0x0000000004000000, + 0x0000000000000040, 0x0000000010000000, 0x0000000000004000, 0x0000000101000000, + 0x0000000108000000, 0x0000000000000100, 0x0000000100020000, 0x0000000000080000, + 0x0000000000100000, 0x0000000000800000, 0x00000001ffffffff, 0x0000000122400fb3, + // Entry 40 - 5F + 0x00000001827c0813, 0x000000014240385f, 0x0000000103c1c813, 0x000000011e420813, + 0x0000000112000001, 0x0000000106000001, 0x0000000101400001, 0x000000010a000001, + 0x0000000102020001, +} + +// regionInclusionNext marks, for each entry in regionInclusionBits, the set of +// all groups that are reachable from the groups set in the respective entry. +// Size: 73 bytes, 73 elements +var regionInclusionNext = [73]uint8{ + // Entry 0 - 3F + 0x3e, 0x3f, 0x0b, 0x0b, 0x40, 0x01, 0x0b, 0x01, + 0x01, 0x01, 0x01, 0x41, 0x0b, 0x0b, 0x16, 0x16, + 0x16, 0x19, 0x04, 0x04, 0x04, 0x04, 0x42, 0x16, + 0x16, 0x43, 0x19, 0x19, 0x19, 0x01, 0x0b, 0x04, + 0x00, 0x00, 0x1f, 0x11, 0x18, 0x0f, 0x0d, 0x09, + 0x03, 0x15, 0x44, 0x12, 0x1b, 0x05, 0x45, 0x07, + 0x0c, 0x10, 0x0a, 0x1a, 0x06, 0x1c, 0x0e, 0x46, + 0x47, 0x08, 0x48, 0x13, 0x14, 0x17, 0x3e, 0x3e, + // Entry 40 - 7F + 0x3e, 0x3e, 0x3e, 0x3e, 0x43, 0x43, 0x42, 0x43, + 0x43, +} + +type parentRel struct { + lang uint16 + script uint8 + maxScript uint8 + toRegion uint16 + fromRegion []uint16 +} + +// 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}}, +} + +// Total table size 25886 bytes (25KiB); checksum: 50D3D57D diff --git a/vendor/golang.org/x/text/internal/language/tags.go b/vendor/golang.org/x/text/internal/language/tags.go new file mode 100644 index 0000000..e7afd31 --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/tags.go @@ -0,0 +1,48 @@ +// Copyright 2013 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. + +package language + +// MustParse is like Parse, but panics if the given BCP 47 tag cannot be parsed. +// It simplifies safe initialization of Tag values. +func MustParse(s string) Tag { + t, err := Parse(s) + if err != nil { + panic(err) + } + return t +} + +// MustParseBase is like ParseBase, but panics if the given base cannot be parsed. +// It simplifies safe initialization of Base values. +func MustParseBase(s string) Language { + b, err := ParseBase(s) + if err != nil { + panic(err) + } + return b +} + +// MustParseScript is like ParseScript, but panics if the given script cannot be +// parsed. It simplifies safe initialization of Script values. +func MustParseScript(s string) Script { + scr, err := ParseScript(s) + if err != nil { + panic(err) + } + return scr +} + +// MustParseRegion is like ParseRegion, but panics if the given region cannot be +// parsed. It simplifies safe initialization of Region values. +func MustParseRegion(s string) Region { + r, err := ParseRegion(s) + if err != nil { + panic(err) + } + return r +} + +// Und is the root language. +var Und Tag diff --git a/vendor/golang.org/x/text/internal/number/common.go b/vendor/golang.org/x/text/internal/number/common.go index e428a72..a6e9c8e 100644 --- a/vendor/golang.org/x/text/internal/number/common.go +++ b/vendor/golang.org/x/text/internal/number/common.go @@ -2,7 +2,11 @@ package number -import "unicode/utf8" +import ( + "unicode/utf8" + + "golang.org/x/text/internal/language/compact" +) // A system identifies a CLDR numbering system. type system byte @@ -33,8 +37,19 @@ const ( NumSymbolTypes ) +const hasNonLatnMask = 0x8000 + +// symOffset is an offset into altSymData if the bit indicated by hasNonLatnMask +// is not 0 (with this bit masked out), and an offset into symIndex otherwise. +// +// TODO: this type can be a byte again if we use an indirection into altsymData +// and introduce an alt -> offset slice (the length of this will be number of +// alternatives plus 1). This also allows getting rid of the compactTag field +// in altSymData. In total this will save about 1K. +type symOffset uint16 + type altSymData struct { - compactTag uint16 + compactTag compact.ID + symIndex symOffset system system - symIndex byte } diff --git a/vendor/golang.org/x/text/internal/number/decimal.go b/vendor/golang.org/x/text/internal/number/decimal.go new file mode 100644 index 0000000..9b4035e --- /dev/null +++ b/vendor/golang.org/x/text/internal/number/decimal.go @@ -0,0 +1,498 @@ +// Copyright 2017 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. + +//go:generate stringer -type RoundingMode + +package number + +import ( + "math" + "strconv" +) + +// RoundingMode determines how a number is rounded to the desired precision. +type RoundingMode byte + +const ( + ToNearestEven RoundingMode = iota // towards the nearest integer, or towards an even number if equidistant. + ToNearestZero // towards the nearest integer, or towards zero if equidistant. + ToNearestAway // towards the nearest integer, or away from zero if equidistant. + ToPositiveInf // towards infinity + ToNegativeInf // towards negative infinity + ToZero // towards zero + AwayFromZero // away from zero + numModes +) + +const maxIntDigits = 20 + +// A Decimal represents a floating point number in decimal format. +// Digits represents a number [0, 1.0), and the absolute value represented by +// Decimal is Digits * 10^Exp. Leading and trailing zeros may be omitted and Exp +// may point outside a valid position in Digits. +// +// Examples: +// Number Decimal +// 12345 Digits: [1, 2, 3, 4, 5], Exp: 5 +// 12.345 Digits: [1, 2, 3, 4, 5], Exp: 2 +// 12000 Digits: [1, 2], Exp: 5 +// 12000.00 Digits: [1, 2], Exp: 5 +// 0.00123 Digits: [1, 2, 3], Exp: -2 +// 0 Digits: [], Exp: 0 +type Decimal struct { + digits + + buf [maxIntDigits]byte +} + +type digits struct { + Digits []byte // mantissa digits, big-endian + Exp int32 // exponent + Neg bool + Inf bool // Takes precedence over Digits and Exp. + NaN bool // Takes precedence over Inf. +} + +// Digits represents a floating point number represented in digits of the +// base in which a number is to be displayed. It is similar to Decimal, but +// keeps track of trailing fraction zeros and the comma placement for +// engineering notation. Digits must have at least one digit. +// +// Examples: +// Number Decimal +// decimal +// 12345 Digits: [1, 2, 3, 4, 5], Exp: 5 End: 5 +// 12.345 Digits: [1, 2, 3, 4, 5], Exp: 2 End: 5 +// 12000 Digits: [1, 2], Exp: 5 End: 5 +// 12000.00 Digits: [1, 2], Exp: 5 End: 7 +// 0.00123 Digits: [1, 2, 3], Exp: -2 End: 3 +// 0 Digits: [], Exp: 0 End: 1 +// scientific (actual exp is Exp - Comma) +// 0e0 Digits: [0], Exp: 1, End: 1, Comma: 1 +// .0e0 Digits: [0], Exp: 0, End: 1, Comma: 0 +// 0.0e0 Digits: [0], Exp: 1, End: 2, Comma: 1 +// 1.23e4 Digits: [1, 2, 3], Exp: 5, End: 3, Comma: 1 +// .123e5 Digits: [1, 2, 3], Exp: 5, End: 3, Comma: 0 +// engineering +// 12.3e3 Digits: [1, 2, 3], Exp: 5, End: 3, Comma: 2 +type Digits struct { + digits + // End indicates the end position of the number. + End int32 // For decimals Exp <= End. For scientific len(Digits) <= End. + // Comma is used for the comma position for scientific (always 0 or 1) and + // engineering notation (always 0, 1, 2, or 3). + Comma uint8 + // IsScientific indicates whether this number is to be rendered as a + // scientific number. + IsScientific bool +} + +func (d *Digits) NumFracDigits() int { + if d.Exp >= d.End { + return 0 + } + return int(d.End - d.Exp) +} + +// normalize returns a new Decimal with leading and trailing zeros removed. +func (d *Decimal) normalize() (n Decimal) { + n = *d + b := n.Digits + // Strip leading zeros. Resulting number of digits is significant digits. + for len(b) > 0 && b[0] == 0 { + b = b[1:] + n.Exp-- + } + // Strip trailing zeros + for len(b) > 0 && b[len(b)-1] == 0 { + b = b[:len(b)-1] + } + if len(b) == 0 { + n.Exp = 0 + } + n.Digits = b + return n +} + +func (d *Decimal) clear() { + b := d.Digits + if b == nil { + b = d.buf[:0] + } + *d = Decimal{} + d.Digits = b[:0] +} + +func (x *Decimal) String() string { + if x.NaN { + return "NaN" + } + var buf []byte + if x.Neg { + buf = append(buf, '-') + } + if x.Inf { + buf = append(buf, "Inf"...) + return string(buf) + } + switch { + case len(x.Digits) == 0: + buf = append(buf, '0') + case x.Exp <= 0: + // 0.00ddd + buf = append(buf, "0."...) + buf = appendZeros(buf, -int(x.Exp)) + buf = appendDigits(buf, x.Digits) + + case /* 0 < */ int(x.Exp) < len(x.Digits): + // dd.ddd + buf = appendDigits(buf, x.Digits[:x.Exp]) + buf = append(buf, '.') + buf = appendDigits(buf, x.Digits[x.Exp:]) + + default: // len(x.Digits) <= x.Exp + // ddd00 + buf = appendDigits(buf, x.Digits) + buf = appendZeros(buf, int(x.Exp)-len(x.Digits)) + } + return string(buf) +} + +func appendDigits(buf []byte, digits []byte) []byte { + for _, c := range digits { + buf = append(buf, c+'0') + } + return buf +} + +// appendZeros appends n 0 digits to buf and returns buf. +func appendZeros(buf []byte, n int) []byte { + for ; n > 0; n-- { + buf = append(buf, '0') + } + return buf +} + +func (d *digits) round(mode RoundingMode, n int) { + if n >= len(d.Digits) { + return + } + // Make rounding decision: The result mantissa is truncated ("rounded down") + // by default. Decide if we need to increment, or "round up", the (unsigned) + // mantissa. + inc := false + switch mode { + case ToNegativeInf: + inc = d.Neg + case ToPositiveInf: + inc = !d.Neg + case ToZero: + // nothing to do + case AwayFromZero: + inc = true + case ToNearestEven: + inc = d.Digits[n] > 5 || d.Digits[n] == 5 && + (len(d.Digits) > n+1 || n == 0 || d.Digits[n-1]&1 != 0) + case ToNearestAway: + inc = d.Digits[n] >= 5 + case ToNearestZero: + inc = d.Digits[n] > 5 || d.Digits[n] == 5 && len(d.Digits) > n+1 + default: + panic("unreachable") + } + if inc { + d.roundUp(n) + } else { + d.roundDown(n) + } +} + +// roundFloat rounds a floating point number. +func (r RoundingMode) roundFloat(x float64) float64 { + // Make rounding decision: The result mantissa is truncated ("rounded down") + // by default. Decide if we need to increment, or "round up", the (unsigned) + // mantissa. + abs := x + if x < 0 { + abs = -x + } + i, f := math.Modf(abs) + if f == 0.0 { + return x + } + inc := false + switch r { + case ToNegativeInf: + inc = x < 0 + case ToPositiveInf: + inc = x >= 0 + case ToZero: + // nothing to do + case AwayFromZero: + inc = true + case ToNearestEven: + // TODO: check overflow + inc = f > 0.5 || f == 0.5 && int64(i)&1 != 0 + case ToNearestAway: + inc = f >= 0.5 + case ToNearestZero: + inc = f > 0.5 + default: + panic("unreachable") + } + if inc { + i += 1 + } + if abs != x { + i = -i + } + return i +} + +func (x *digits) roundUp(n int) { + if n < 0 || n >= len(x.Digits) { + return // nothing to do + } + // find first digit < 9 + for n > 0 && x.Digits[n-1] >= 9 { + n-- + } + + if n == 0 { + // all digits are 9s => round up to 1 and update exponent + x.Digits[0] = 1 // ok since len(x.Digits) > n + x.Digits = x.Digits[:1] + x.Exp++ + return + } + x.Digits[n-1]++ + x.Digits = x.Digits[:n] + // x already trimmed +} + +func (x *digits) roundDown(n int) { + if n < 0 || n >= len(x.Digits) { + return // nothing to do + } + x.Digits = x.Digits[:n] + trim(x) +} + +// trim cuts off any trailing zeros from x's mantissa; +// they are meaningless for the value of x. +func trim(x *digits) { + i := len(x.Digits) + for i > 0 && x.Digits[i-1] == 0 { + i-- + } + x.Digits = x.Digits[:i] + if i == 0 { + x.Exp = 0 + } +} + +// A Converter converts a number into decimals according to the given rounding +// criteria. +type Converter interface { + Convert(d *Decimal, r RoundingContext) +} + +const ( + signed = true + unsigned = false +) + +// Convert converts the given number to the decimal representation using the +// supplied RoundingContext. +func (d *Decimal) Convert(r RoundingContext, number interface{}) { + switch f := number.(type) { + case Converter: + d.clear() + f.Convert(d, r) + case float32: + d.ConvertFloat(r, float64(f), 32) + case float64: + d.ConvertFloat(r, f, 64) + case int: + d.ConvertInt(r, signed, uint64(f)) + case int8: + d.ConvertInt(r, signed, uint64(f)) + case int16: + d.ConvertInt(r, signed, uint64(f)) + case int32: + d.ConvertInt(r, signed, uint64(f)) + case int64: + d.ConvertInt(r, signed, uint64(f)) + case uint: + d.ConvertInt(r, unsigned, uint64(f)) + case uint8: + d.ConvertInt(r, unsigned, uint64(f)) + case uint16: + d.ConvertInt(r, unsigned, uint64(f)) + case uint32: + d.ConvertInt(r, unsigned, uint64(f)) + case uint64: + d.ConvertInt(r, unsigned, f) + + default: + d.NaN = true + // TODO: + // case string: if produced by strconv, allows for easy arbitrary pos. + // case reflect.Value: + // case big.Float + // case big.Int + // case big.Rat? + // catch underlyings using reflect or will this already be done by the + // message package? + } +} + +// ConvertInt converts an integer to decimals. +func (d *Decimal) ConvertInt(r RoundingContext, signed bool, x uint64) { + if r.Increment > 0 { + // TODO: if uint64 is too large, fall back to float64 + if signed { + d.ConvertFloat(r, float64(int64(x)), 64) + } else { + d.ConvertFloat(r, float64(x), 64) + } + return + } + d.clear() + if signed && int64(x) < 0 { + x = uint64(-int64(x)) + d.Neg = true + } + d.fillIntDigits(x) + d.Exp = int32(len(d.Digits)) +} + +// ConvertFloat converts a floating point number to decimals. +func (d *Decimal) ConvertFloat(r RoundingContext, x float64, size int) { + d.clear() + if math.IsNaN(x) { + d.NaN = true + return + } + // Simple case: decimal notation + if r.Increment > 0 { + scale := int(r.IncrementScale) + mult := 1.0 + if scale > len(scales) { + mult = math.Pow(10, float64(scale)) + } else { + mult = scales[scale] + } + // We multiply x instead of dividing inc as it gives less rounding + // issues. + x *= mult + x /= float64(r.Increment) + x = r.Mode.roundFloat(x) + x *= float64(r.Increment) + x /= mult + } + + abs := x + if x < 0 { + d.Neg = true + abs = -x + } + if math.IsInf(abs, 1) { + d.Inf = true + return + } + + // By default we get the exact decimal representation. + verb := byte('g') + prec := -1 + // As the strconv API does not return the rounding accuracy, we can only + // round using ToNearestEven. + if r.Mode == ToNearestEven { + if n := r.RoundSignificantDigits(); n >= 0 { + prec = n + } else if n = r.RoundFractionDigits(); n >= 0 { + prec = n + verb = 'f' + } + } else { + // TODO: At this point strconv's rounding is imprecise to the point that + // it is not useable for this purpose. + // See https://github.com/golang/go/issues/21714 + // If rounding is requested, we ask for a large number of digits and + // round from there to simulate rounding only once. + // Ideally we would have strconv export an AppendDigits that would take + // a rounding mode and/or return an accuracy. Something like this would + // work: + // AppendDigits(dst []byte, x float64, base, size, prec int) (digits []byte, exp, accuracy int) + hasPrec := r.RoundSignificantDigits() >= 0 + hasScale := r.RoundFractionDigits() >= 0 + if hasPrec || hasScale { + // prec is the number of mantissa bits plus some extra for safety. + // We need at least the number of mantissa bits as decimals to + // accurately represent the floating point without rounding, as each + // bit requires one more decimal to represent: 0.5, 0.25, 0.125, ... + prec = 60 + } + } + + b := strconv.AppendFloat(d.Digits[:0], abs, verb, prec, size) + i := 0 + k := 0 + beforeDot := 1 + for i < len(b) { + if c := b[i]; '0' <= c && c <= '9' { + b[k] = c - '0' + k++ + d.Exp += int32(beforeDot) + } else if c == '.' { + beforeDot = 0 + d.Exp = int32(k) + } else { + break + } + i++ + } + d.Digits = b[:k] + if i != len(b) { + i += len("e") + pSign := i + exp := 0 + for i++; i < len(b); i++ { + exp *= 10 + exp += int(b[i] - '0') + } + if b[pSign] == '-' { + exp = -exp + } + d.Exp = int32(exp) + 1 + } +} + +func (d *Decimal) fillIntDigits(x uint64) { + if cap(d.Digits) < maxIntDigits { + d.Digits = d.buf[:] + } else { + d.Digits = d.buf[:maxIntDigits] + } + i := 0 + for ; x > 0; x /= 10 { + d.Digits[i] = byte(x % 10) + i++ + } + d.Digits = d.Digits[:i] + for p := 0; p < i; p++ { + i-- + d.Digits[p], d.Digits[i] = d.Digits[i], d.Digits[p] + } +} + +var scales [70]float64 + +func init() { + x := 1.0 + for i := range scales { + scales[i] = x + x *= 10 + } +} diff --git a/vendor/golang.org/x/text/internal/number/decimal_test.go b/vendor/golang.org/x/text/internal/number/decimal_test.go new file mode 100644 index 0000000..97c7e25 --- /dev/null +++ b/vendor/golang.org/x/text/internal/number/decimal_test.go @@ -0,0 +1,329 @@ +// Copyright 2017 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. + +package number + +import ( + "fmt" + "math" + "strconv" + "strings" + "testing" +) + +func mkfloat(num string) float64 { + u, _ := strconv.ParseUint(num, 10, 32) + return float64(u) +} + +// mkdec creates a decimal from a string. All ASCII digits are converted to +// digits in the decimal. The dot is used to indicate the scale by which the +// digits are shifted. Numbers may have an additional exponent or be the special +// value NaN, Inf, or -Inf. +func mkdec(num string) (d Decimal) { + var r RoundingContext + d.Convert(r, dec(num)) + return +} + +type dec string + +func (s dec) Convert(d *Decimal, _ RoundingContext) { + num := string(s) + if num[0] == '-' { + d.Neg = true + num = num[1:] + } + switch num { + case "NaN": + d.NaN = true + return + case "Inf": + d.Inf = true + return + } + if p := strings.IndexAny(num, "eE"); p != -1 { + i64, err := strconv.ParseInt(num[p+1:], 10, 32) + if err != nil { + panic(err) + } + d.Exp = int32(i64) + num = num[:p] + } + if p := strings.IndexByte(num, '.'); p != -1 { + d.Exp += int32(p) + num = num[:p] + num[p+1:] + } else { + d.Exp += int32(len(num)) + } + d.Digits = []byte(num) + for i := range d.Digits { + d.Digits[i] -= '0' + } + *d = d.normalize() +} + +func byteNum(s string) []byte { + b := make([]byte, len(s)) + for i := 0; i < len(s); i++ { + if c := s[i]; '0' <= c && c <= '9' { + b[i] = s[i] - '0' + } else { + b[i] = s[i] - 'a' + 10 + } + } + return b +} + +func strNum(s string) string { + return string(byteNum(s)) +} + +func TestDecimalString(t *testing.T) { + for _, test := range []struct { + x Decimal + want string + }{ + {want: "0"}, + {Decimal{digits: digits{Digits: nil, Exp: 1000}}, "0"}, // exponent of 1000 is ignored + {Decimal{digits: digits{Digits: byteNum("12345"), Exp: 0}}, "0.12345"}, + {Decimal{digits: digits{Digits: byteNum("12345"), Exp: -3}}, "0.00012345"}, + {Decimal{digits: digits{Digits: byteNum("12345"), Exp: +3}}, "123.45"}, + {Decimal{digits: digits{Digits: byteNum("12345"), Exp: +10}}, "1234500000"}, + } { + if got := test.x.String(); got != test.want { + t.Errorf("%v == %q; want %q", test.x, got, test.want) + } + } +} + +func TestRounding(t *testing.T) { + testCases := []struct { + x string + n int + // modes is the result for modes. Signs are left out of the result. + // The results are stored in the following order: + // zero, negInf + // nearZero, nearEven, nearAway + // away, posInf + modes [numModes]string + }{ + {"0", 1, [numModes]string{ + "0", "0", + "0", "0", "0", + "0", "0"}}, + {"1", 1, [numModes]string{ + "1", "1", + "1", "1", "1", + "1", "1"}}, + {"5", 1, [numModes]string{ + "5", "5", + "5", "5", "5", + "5", "5"}}, + {"15", 1, [numModes]string{ + "10", "10", + "10", "20", "20", + "20", "20"}}, + {"45", 1, [numModes]string{ + "40", "40", + "40", "40", "50", + "50", "50"}}, + {"95", 1, [numModes]string{ + "90", "90", + "90", "100", "100", + "100", "100"}}, + + {"12344999", 4, [numModes]string{ + "12340000", "12340000", + "12340000", "12340000", "12340000", + "12350000", "12350000"}}, + {"12345000", 4, [numModes]string{ + "12340000", "12340000", + "12340000", "12340000", "12350000", + "12350000", "12350000"}}, + {"12345001", 4, [numModes]string{ + "12340000", "12340000", + "12350000", "12350000", "12350000", + "12350000", "12350000"}}, + {"12345100", 4, [numModes]string{ + "12340000", "12340000", + "12350000", "12350000", "12350000", + "12350000", "12350000"}}, + {"23454999", 4, [numModes]string{ + "23450000", "23450000", + "23450000", "23450000", "23450000", + "23460000", "23460000"}}, + {"23455000", 4, [numModes]string{ + "23450000", "23450000", + "23450000", "23460000", "23460000", + "23460000", "23460000"}}, + {"23455001", 4, [numModes]string{ + "23450000", "23450000", + "23460000", "23460000", "23460000", + "23460000", "23460000"}}, + {"23455100", 4, [numModes]string{ + "23450000", "23450000", + "23460000", "23460000", "23460000", + "23460000", "23460000"}}, + + {"99994999", 4, [numModes]string{ + "99990000", "99990000", + "99990000", "99990000", "99990000", + "100000000", "100000000"}}, + {"99995000", 4, [numModes]string{ + "99990000", "99990000", + "99990000", "100000000", "100000000", + "100000000", "100000000"}}, + {"99999999", 4, [numModes]string{ + "99990000", "99990000", + "100000000", "100000000", "100000000", + "100000000", "100000000"}}, + + {"12994999", 4, [numModes]string{ + "12990000", "12990000", + "12990000", "12990000", "12990000", + "13000000", "13000000"}}, + {"12995000", 4, [numModes]string{ + "12990000", "12990000", + "12990000", "13000000", "13000000", + "13000000", "13000000"}}, + {"12999999", 4, [numModes]string{ + "12990000", "12990000", + "13000000", "13000000", "13000000", + "13000000", "13000000"}}, + } + modes := []RoundingMode{ + ToZero, ToNegativeInf, + ToNearestZero, ToNearestEven, ToNearestAway, + AwayFromZero, ToPositiveInf, + } + for _, tc := range testCases { + // Create negative counterpart tests: the sign is reversed and + // ToPositiveInf and ToNegativeInf swapped. + negModes := tc.modes + negModes[1], negModes[6] = negModes[6], negModes[1] + for i, res := range negModes { + negModes[i] = "-" + res + } + for i, m := range modes { + t.Run(fmt.Sprintf("x:%s/n:%d/%s", tc.x, tc.n, m), func(t *testing.T) { + d := mkdec(tc.x) + d.round(m, tc.n) + if got := d.String(); got != tc.modes[i] { + t.Errorf("pos decimal: got %q; want %q", d.String(), tc.modes[i]) + } + + mult := math.Pow(10, float64(len(tc.x)-tc.n)) + f := mkfloat(tc.x) + f = m.roundFloat(f/mult) * mult + if got := fmt.Sprintf("%.0f", f); got != tc.modes[i] { + t.Errorf("pos float: got %q; want %q", got, tc.modes[i]) + } + + // Test the negative case. This is the same as the positive + // case, but with ToPositiveInf and ToNegativeInf swapped. + d = mkdec(tc.x) + d.Neg = true + d.round(m, tc.n) + if got, want := d.String(), negModes[i]; got != want { + t.Errorf("neg decimal: got %q; want %q", d.String(), want) + } + + f = -mkfloat(tc.x) + f = m.roundFloat(f/mult) * mult + if got := fmt.Sprintf("%.0f", f); got != negModes[i] { + t.Errorf("neg float: got %q; want %q", got, negModes[i]) + } + }) + } + } +} + +func TestConvert(t *testing.T) { + scale2 := RoundingContext{} + scale2.SetScale(2) + scale2away := RoundingContext{Mode: AwayFromZero} + scale2away.SetScale(2) + inc0_05 := RoundingContext{Increment: 5, IncrementScale: 2} + inc0_05.SetScale(2) + inc50 := RoundingContext{Increment: 50} + prec3 := RoundingContext{} + prec3.SetPrecision(3) + roundShift := RoundingContext{DigitShift: 2, MaxFractionDigits: 2} + testCases := []struct { + x interface{} + rc RoundingContext + out string + }{ + {-0.001, scale2, "-0.00"}, + {0.1234, prec3, "0.123"}, + {1234.0, prec3, "1230"}, + {1.2345e10, prec3, "12300000000"}, + + {int8(-34), scale2, "-34"}, + {int16(-234), scale2, "-234"}, + {int32(-234), scale2, "-234"}, + {int64(-234), scale2, "-234"}, + {int(-234), scale2, "-234"}, + {uint8(234), scale2, "234"}, + {uint16(234), scale2, "234"}, + {uint32(234), scale2, "234"}, + {uint64(234), scale2, "234"}, + {uint(234), scale2, "234"}, + {-1e9, scale2, "-1000000000.00"}, + // The following two causes this result to have a lot of digits: + // 1) 0.234 cannot be accurately represented as a float64, and + // 2) as strconv does not support the rounding AwayFromZero, Convert + // leaves the rounding to caller. + {0.234, scale2away, + "0.2340000000000000135447209004269097931683063507080078125"}, + + {0.0249, inc0_05, "0.00"}, + {0.025, inc0_05, "0.00"}, + {0.0251, inc0_05, "0.05"}, + {0.03, inc0_05, "0.05"}, + {0.049, inc0_05, "0.05"}, + {0.05, inc0_05, "0.05"}, + {0.051, inc0_05, "0.05"}, + {0.0749, inc0_05, "0.05"}, + {0.075, inc0_05, "0.10"}, + {0.0751, inc0_05, "0.10"}, + {324, inc50, "300"}, + {325, inc50, "300"}, + {326, inc50, "350"}, + {349, inc50, "350"}, + {350, inc50, "350"}, + {351, inc50, "350"}, + {374, inc50, "350"}, + {375, inc50, "400"}, + {376, inc50, "400"}, + + // Here the scale is 2, but the digits get shifted left. As we use + // AppendFloat to do the rounding an exta 0 gets added. + {0.123, roundShift, "0.1230"}, + + {converter(3), scale2, "100"}, + + {math.Inf(1), inc50, "Inf"}, + {math.Inf(-1), inc50, "-Inf"}, + {math.NaN(), inc50, "NaN"}, + {"clearly not a number", scale2, "NaN"}, + } + for _, tc := range testCases { + var d Decimal + t.Run(fmt.Sprintf("%T:%v-%v", tc.x, tc.x, tc.rc), func(t *testing.T) { + d.Convert(tc.rc, tc.x) + if got := d.String(); got != tc.out { + t.Errorf("got %q; want %q", got, tc.out) + } + }) + } +} + +type converter int + +func (c converter) Convert(d *Decimal, r RoundingContext) { + d.Digits = append(d.Digits, 1, 0, 0) + d.Exp = 3 +} diff --git a/vendor/golang.org/x/text/internal/number/format.go b/vendor/golang.org/x/text/internal/number/format.go new file mode 100644 index 0000000..cd94c5d --- /dev/null +++ b/vendor/golang.org/x/text/internal/number/format.go @@ -0,0 +1,535 @@ +// Copyright 2017 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. + +package number + +import ( + "strconv" + "unicode/utf8" + + "golang.org/x/text/language" +) + +// TODO: +// - grouping of fractions +// - allow user-defined superscript notation (such as 4) +// - same for non-breaking spaces, like   + +// A VisibleDigits computes digits, comma placement and trailing zeros as they +// will be shown to the user. +type VisibleDigits interface { + Digits(buf []byte, t language.Tag, scale int) Digits + // TODO: Do we also need to add the verb or pass a format.State? +} + +// Formatting proceeds along the following lines: +// 0) Compose rounding information from format and context. +// 1) Convert a number into a Decimal. +// 2) Sanitize Decimal by adding trailing zeros, removing leading digits, and +// (non-increment) rounding. The Decimal that results from this is suitable +// for determining the plural form. +// 3) Render the Decimal in the localized form. + +// Formatter contains all the information needed to render a number. +type Formatter struct { + Pattern + Info +} + +func (f *Formatter) init(t language.Tag, index []uint8) { + f.Info = InfoFromTag(t) + f.Pattern = formats[index[tagToID(t)]] +} + +// InitPattern initializes a Formatter for the given Pattern. +func (f *Formatter) InitPattern(t language.Tag, pat *Pattern) { + f.Info = InfoFromTag(t) + f.Pattern = *pat +} + +// InitDecimal initializes a Formatter using the default Pattern for the given +// language. +func (f *Formatter) InitDecimal(t language.Tag) { + f.init(t, tagToDecimal) +} + +// InitScientific initializes a Formatter using the default Pattern for the +// given language. +func (f *Formatter) InitScientific(t language.Tag) { + f.init(t, tagToScientific) + f.Pattern.MinFractionDigits = 0 + f.Pattern.MaxFractionDigits = -1 +} + +// InitEngineering initializes a Formatter using the default Pattern for the +// given language. +func (f *Formatter) InitEngineering(t language.Tag) { + f.init(t, tagToScientific) + f.Pattern.MinFractionDigits = 0 + f.Pattern.MaxFractionDigits = -1 + f.Pattern.MaxIntegerDigits = 3 + f.Pattern.MinIntegerDigits = 1 +} + +// InitPercent initializes a Formatter using the default Pattern for the given +// language. +func (f *Formatter) InitPercent(t language.Tag) { + f.init(t, tagToPercent) +} + +// InitPerMille initializes a Formatter using the default Pattern for the given +// language. +func (f *Formatter) InitPerMille(t language.Tag) { + f.init(t, tagToPercent) + f.Pattern.DigitShift = 3 +} + +func (f *Formatter) Append(dst []byte, x interface{}) []byte { + var d Decimal + r := f.RoundingContext + d.Convert(r, x) + return f.Render(dst, FormatDigits(&d, r)) +} + +func FormatDigits(d *Decimal, r RoundingContext) Digits { + if r.isScientific() { + return scientificVisibleDigits(r, d) + } + return decimalVisibleDigits(r, d) +} + +func (f *Formatter) Format(dst []byte, d *Decimal) []byte { + return f.Render(dst, FormatDigits(d, f.RoundingContext)) +} + +func (f *Formatter) Render(dst []byte, d Digits) []byte { + var result []byte + var postPrefix, preSuffix int + if d.IsScientific { + result, postPrefix, preSuffix = appendScientific(dst, f, &d) + } else { + result, postPrefix, preSuffix = appendDecimal(dst, f, &d) + } + if f.PadRune == 0 { + return result + } + width := int(f.FormatWidth) + if count := utf8.RuneCount(result); count < width { + insertPos := 0 + switch f.Flags & PadMask { + case PadAfterPrefix: + insertPos = postPrefix + case PadBeforeSuffix: + insertPos = preSuffix + case PadAfterSuffix: + insertPos = len(result) + } + num := width - count + pad := [utf8.UTFMax]byte{' '} + sz := 1 + if r := f.PadRune; r != 0 { + sz = utf8.EncodeRune(pad[:], r) + } + extra := sz * num + if n := len(result) + extra; n < cap(result) { + result = result[:n] + copy(result[insertPos+extra:], result[insertPos:]) + } else { + buf := make([]byte, n) + copy(buf, result[:insertPos]) + copy(buf[insertPos+extra:], result[insertPos:]) + result = buf + } + for ; num > 0; num-- { + insertPos += copy(result[insertPos:], pad[:sz]) + } + } + return result +} + +// decimalVisibleDigits converts d according to the RoundingContext. Note that +// the exponent may change as a result of this operation. +func decimalVisibleDigits(r RoundingContext, d *Decimal) Digits { + if d.NaN || d.Inf { + return Digits{digits: digits{Neg: d.Neg, NaN: d.NaN, Inf: d.Inf}} + } + n := Digits{digits: d.normalize().digits} + + exp := n.Exp + exp += int32(r.DigitShift) + + // Cap integer digits. Remove *most-significant* digits. + if r.MaxIntegerDigits > 0 { + if p := int(exp) - int(r.MaxIntegerDigits); p > 0 { + if p > len(n.Digits) { + p = len(n.Digits) + } + if n.Digits = n.Digits[p:]; len(n.Digits) == 0 { + exp = 0 + } else { + exp -= int32(p) + } + // Strip leading zeros. + for len(n.Digits) > 0 && n.Digits[0] == 0 { + n.Digits = n.Digits[1:] + exp-- + } + } + } + + // Rounding if not already done by Convert. + p := len(n.Digits) + if maxSig := int(r.MaxSignificantDigits); maxSig > 0 { + p = maxSig + } + if maxFrac := int(r.MaxFractionDigits); maxFrac >= 0 { + if cap := int(exp) + maxFrac; cap < p { + p = int(exp) + maxFrac + } + if p < 0 { + p = 0 + } + } + n.round(r.Mode, p) + + // set End (trailing zeros) + n.End = int32(len(n.Digits)) + if n.End == 0 { + exp = 0 + if r.MinFractionDigits > 0 { + n.End = int32(r.MinFractionDigits) + } + if p := int32(r.MinSignificantDigits) - 1; p > n.End { + n.End = p + } + } else { + if end := exp + int32(r.MinFractionDigits); end > n.End { + n.End = end + } + if n.End < int32(r.MinSignificantDigits) { + n.End = int32(r.MinSignificantDigits) + } + } + n.Exp = exp + return n +} + +// appendDecimal appends a formatted number to dst. It returns two possible +// insertion points for padding. +func appendDecimal(dst []byte, f *Formatter, n *Digits) (b []byte, postPre, preSuf int) { + if dst, ok := f.renderSpecial(dst, n); ok { + return dst, 0, len(dst) + } + digits := n.Digits + exp := n.Exp + + // Split in integer and fraction part. + var intDigits, fracDigits []byte + numInt := 0 + numFrac := int(n.End - n.Exp) + if exp > 0 { + numInt = int(exp) + if int(exp) >= len(digits) { // ddddd | ddddd00 + intDigits = digits + } else { // ddd.dd + intDigits = digits[:exp] + fracDigits = digits[exp:] + } + } else { + fracDigits = digits + } + + neg := n.Neg + affix, suffix := f.getAffixes(neg) + dst = appendAffix(dst, f, affix, neg) + savedLen := len(dst) + + minInt := int(f.MinIntegerDigits) + if minInt == 0 && f.MinSignificantDigits > 0 { + minInt = 1 + } + // add leading zeros + for i := minInt; i > numInt; i-- { + dst = f.AppendDigit(dst, 0) + if f.needsSep(i) { + dst = append(dst, f.Symbol(SymGroup)...) + } + } + i := 0 + for ; i < len(intDigits); i++ { + dst = f.AppendDigit(dst, intDigits[i]) + if f.needsSep(numInt - i) { + dst = append(dst, f.Symbol(SymGroup)...) + } + } + for ; i < numInt; i++ { + dst = f.AppendDigit(dst, 0) + if f.needsSep(numInt - i) { + dst = append(dst, f.Symbol(SymGroup)...) + } + } + + if numFrac > 0 || f.Flags&AlwaysDecimalSeparator != 0 { + dst = append(dst, f.Symbol(SymDecimal)...) + } + // Add trailing zeros + i = 0 + for n := -int(n.Exp); i < n; i++ { + dst = f.AppendDigit(dst, 0) + } + for _, d := range fracDigits { + i++ + dst = f.AppendDigit(dst, d) + } + for ; i < numFrac; i++ { + dst = f.AppendDigit(dst, 0) + } + return appendAffix(dst, f, suffix, neg), savedLen, len(dst) +} + +func scientificVisibleDigits(r RoundingContext, d *Decimal) Digits { + if d.NaN || d.Inf { + return Digits{digits: digits{Neg: d.Neg, NaN: d.NaN, Inf: d.Inf}} + } + n := Digits{digits: d.normalize().digits, IsScientific: true} + + // Normalize to have at least one digit. This simplifies engineering + // notation. + if len(n.Digits) == 0 { + n.Digits = append(n.Digits, 0) + n.Exp = 1 + } + + // Significant digits are transformed by the parser for scientific notation + // and do not need to be handled here. + maxInt, numInt := int(r.MaxIntegerDigits), int(r.MinIntegerDigits) + if numInt == 0 { + numInt = 1 + } + + // If a maximum number of integers is specified, the minimum must be 1 + // and the exponent is grouped by this number (e.g. for engineering) + if maxInt > numInt { + // Correct the exponent to reflect a single integer digit. + numInt = 1 + // engineering + // 0.01234 ([12345]e-1) -> 1.2345e-2 12.345e-3 + // 12345 ([12345]e+5) -> 1.2345e4 12.345e3 + d := int(n.Exp-1) % maxInt + if d < 0 { + d += maxInt + } + numInt += d + } + + p := len(n.Digits) + if maxSig := int(r.MaxSignificantDigits); maxSig > 0 { + p = maxSig + } + if maxFrac := int(r.MaxFractionDigits); maxFrac >= 0 && numInt+maxFrac < p { + p = numInt + maxFrac + } + n.round(r.Mode, p) + + n.Comma = uint8(numInt) + n.End = int32(len(n.Digits)) + if minSig := int32(r.MinFractionDigits) + int32(numInt); n.End < minSig { + n.End = minSig + } + return n +} + +// appendScientific appends a formatted number to dst. It returns two possible +// insertion points for padding. +func appendScientific(dst []byte, f *Formatter, n *Digits) (b []byte, postPre, preSuf int) { + if dst, ok := f.renderSpecial(dst, n); ok { + return dst, 0, 0 + } + digits := n.Digits + numInt := int(n.Comma) + numFrac := int(n.End) - int(n.Comma) + + var intDigits, fracDigits []byte + if numInt <= len(digits) { + intDigits = digits[:numInt] + fracDigits = digits[numInt:] + } else { + intDigits = digits + } + neg := n.Neg + affix, suffix := f.getAffixes(neg) + dst = appendAffix(dst, f, affix, neg) + savedLen := len(dst) + + i := 0 + for ; i < len(intDigits); i++ { + dst = f.AppendDigit(dst, intDigits[i]) + if f.needsSep(numInt - i) { + dst = append(dst, f.Symbol(SymGroup)...) + } + } + for ; i < numInt; i++ { + dst = f.AppendDigit(dst, 0) + if f.needsSep(numInt - i) { + dst = append(dst, f.Symbol(SymGroup)...) + } + } + + if numFrac > 0 || f.Flags&AlwaysDecimalSeparator != 0 { + dst = append(dst, f.Symbol(SymDecimal)...) + } + i = 0 + for ; i < len(fracDigits); i++ { + dst = f.AppendDigit(dst, fracDigits[i]) + } + for ; i < numFrac; i++ { + dst = f.AppendDigit(dst, 0) + } + + // exp + buf := [12]byte{} + // TODO: use exponential if superscripting is not available (no Latin + // numbers or no tags) and use exponential in all other cases. + exp := n.Exp - int32(n.Comma) + exponential := f.Symbol(SymExponential) + if exponential == "E" { + dst = append(dst, "\u202f"...) // NARROW NO-BREAK SPACE + dst = append(dst, f.Symbol(SymSuperscriptingExponent)...) + dst = append(dst, "\u202f"...) // NARROW NO-BREAK SPACE + dst = f.AppendDigit(dst, 1) + dst = f.AppendDigit(dst, 0) + switch { + case exp < 0: + dst = append(dst, superMinus...) + exp = -exp + case f.Flags&AlwaysExpSign != 0: + dst = append(dst, superPlus...) + } + b = strconv.AppendUint(buf[:0], uint64(exp), 10) + for i := len(b); i < int(f.MinExponentDigits); i++ { + dst = append(dst, superDigits[0]...) + } + for _, c := range b { + dst = append(dst, superDigits[c-'0']...) + } + } else { + dst = append(dst, exponential...) + switch { + case exp < 0: + dst = append(dst, f.Symbol(SymMinusSign)...) + exp = -exp + case f.Flags&AlwaysExpSign != 0: + dst = append(dst, f.Symbol(SymPlusSign)...) + } + b = strconv.AppendUint(buf[:0], uint64(exp), 10) + for i := len(b); i < int(f.MinExponentDigits); i++ { + dst = f.AppendDigit(dst, 0) + } + for _, c := range b { + dst = f.AppendDigit(dst, c-'0') + } + } + return appendAffix(dst, f, suffix, neg), savedLen, len(dst) +} + +const ( + superMinus = "\u207B" // SUPERSCRIPT HYPHEN-MINUS + superPlus = "\u207A" // SUPERSCRIPT PLUS SIGN +) + +var ( + // Note: the digits are not sequential!!! + superDigits = []string{ + "\u2070", // SUPERSCRIPT DIGIT ZERO + "\u00B9", // SUPERSCRIPT DIGIT ONE + "\u00B2", // SUPERSCRIPT DIGIT TWO + "\u00B3", // SUPERSCRIPT DIGIT THREE + "\u2074", // SUPERSCRIPT DIGIT FOUR + "\u2075", // SUPERSCRIPT DIGIT FIVE + "\u2076", // SUPERSCRIPT DIGIT SIX + "\u2077", // SUPERSCRIPT DIGIT SEVEN + "\u2078", // SUPERSCRIPT DIGIT EIGHT + "\u2079", // SUPERSCRIPT DIGIT NINE + } +) + +func (f *Formatter) getAffixes(neg bool) (affix, suffix string) { + str := f.Affix + if str != "" { + if f.NegOffset > 0 { + if neg { + str = str[f.NegOffset:] + } else { + str = str[:f.NegOffset] + } + } + sufStart := 1 + str[0] + affix = str[1:sufStart] + suffix = str[sufStart+1:] + } + // TODO: introduce a NeedNeg sign to indicate if the left pattern already + // has a sign marked? + if f.NegOffset == 0 && (neg || f.Flags&AlwaysSign != 0) { + affix = "-" + affix + } + return affix, suffix +} + +func (f *Formatter) renderSpecial(dst []byte, d *Digits) (b []byte, ok bool) { + if d.NaN { + return fmtNaN(dst, f), true + } + if d.Inf { + return fmtInfinite(dst, f, d), true + } + return dst, false +} + +func fmtNaN(dst []byte, f *Formatter) []byte { + return append(dst, f.Symbol(SymNan)...) +} + +func fmtInfinite(dst []byte, f *Formatter, d *Digits) []byte { + affix, suffix := f.getAffixes(d.Neg) + dst = appendAffix(dst, f, affix, d.Neg) + dst = append(dst, f.Symbol(SymInfinity)...) + dst = appendAffix(dst, f, suffix, d.Neg) + return dst +} + +func appendAffix(dst []byte, f *Formatter, affix string, neg bool) []byte { + quoting := false + escaping := false + for _, r := range affix { + switch { + case escaping: + // escaping occurs both inside and outside of quotes + dst = append(dst, string(r)...) + escaping = false + case r == '\\': + escaping = true + case r == '\'': + quoting = !quoting + case quoting: + dst = append(dst, string(r)...) + case r == '%': + if f.DigitShift == 3 { + dst = append(dst, f.Symbol(SymPerMille)...) + } else { + dst = append(dst, f.Symbol(SymPercentSign)...) + } + case r == '-' || r == '+': + if neg { + dst = append(dst, f.Symbol(SymMinusSign)...) + } else if f.Flags&ElideSign == 0 { + dst = append(dst, f.Symbol(SymPlusSign)...) + } else { + dst = append(dst, ' ') + } + default: + dst = append(dst, string(r)...) + } + } + return dst +} diff --git a/vendor/golang.org/x/text/internal/number/format_test.go b/vendor/golang.org/x/text/internal/number/format_test.go new file mode 100644 index 0000000..01a0894 --- /dev/null +++ b/vendor/golang.org/x/text/internal/number/format_test.go @@ -0,0 +1,522 @@ +// Copyright 2017 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. + +package number + +import ( + "fmt" + "log" + "testing" + + "golang.org/x/text/language" +) + +func TestAppendDecimal(t *testing.T) { + type pairs map[string]string // alternates with decimal input and result + + testCases := []struct { + pattern string + // We want to be able to test some forms of patterns that cannot be + // represented as a string. + pat *Pattern + + test pairs + }{{ + pattern: "0", + test: pairs{ + "0": "0", + "1": "1", + "-1": "-1", + ".00": "0", + "10.": "10", + "12": "12", + "1.2": "1", + "NaN": "NaN", + "-Inf": "-∞", + }, + }, { + pattern: "+0;+0", + test: pairs{ + "0": "+0", + "1": "+1", + "-1": "-1", + ".00": "+0", + "10.": "+10", + "12": "+12", + "1.2": "+1", + "NaN": "NaN", + "-Inf": "-∞", + "Inf": "+∞", + }, + }, { + pattern: "0 +;0 +", + test: pairs{ + "0": "0 +", + "1": "1 +", + "-1": "1 -", + ".00": "0 +", + }, + }, { + pattern: "0;0-", + test: pairs{ + "-1": "1-", + "NaN": "NaN", + "-Inf": "∞-", + "Inf": "∞", + }, + }, { + pattern: "0000", + test: pairs{ + "0": "0000", + "1": "0001", + "12": "0012", + "12345": "12345", + }, + }, { + pattern: ".0", + test: pairs{ + "0": ".0", + "1": "1.0", + "1.2": "1.2", + "1.2345": "1.2", + }, + }, { + pattern: "#.0", + test: pairs{ + "0": ".0", + }, + }, { + pattern: "#.0#", + test: pairs{ + "0": ".0", + "1": "1.0", + }, + }, { + pattern: "0.0#", + test: pairs{ + "0": "0.0", + }, + }, { + pattern: "#0.###", + test: pairs{ + "0": "0", + "1": "1", + "1.2": "1.2", + "1.2345": "1.234", // rounding should have been done earlier + "1234.5": "1234.5", + "1234.567": "1234.567", + }, + }, { + pattern: "#0.######", + test: pairs{ + "0": "0", + "1234.5678": "1234.5678", + "0.123456789": "0.123457", + "NaN": "NaN", + "Inf": "∞", + }, + + // Test separators. + }, { + pattern: "#,#.00", + test: pairs{ + "100": "1,0,0.00", + }, + }, { + pattern: "#,0.##", + test: pairs{ + "10": "1,0", + }, + }, { + pattern: "#,0", + test: pairs{ + "10": "1,0", + }, + }, { + pattern: "#,##,#.00", + test: pairs{ + "1000": "1,00,0.00", + }, + }, { + pattern: "#,##0.###", + test: pairs{ + "0": "0", + "1234.5678": "1,234.568", + "0.123456789": "0.123", + }, + }, { + pattern: "#,##,##0.###", + test: pairs{ + "0": "0", + "123456789012": "1,23,45,67,89,012", + "0.123456789": "0.123", + }, + }, { + pattern: "0,00,000.###", + test: pairs{ + "0": "0,00,000", + "123456789012": "1,23,45,67,89,012", + "12.3456789": "0,00,012.346", + "0.123456789": "0,00,000.123", + }, + + // Support for ill-formed patterns. + }, { + pattern: "#", + test: pairs{ + ".00": "", // This is the behavior of fmt. + "0": "", // This is the behavior of fmt. + "1": "1", + "10.": "10", + }, + }, { + pattern: ".#", + test: pairs{ + "0": "", // This is the behavior of fmt. + "1": "1", + "1.2": "1.2", + "1.2345": "1.2", + }, + }, { + pattern: "#,#.##", + test: pairs{ + "10": "1,0", + }, + }, { + pattern: "#,#", + test: pairs{ + "10": "1,0", + }, + + // Special patterns + }, { + pattern: "#,max_int=2", + pat: &Pattern{ + RoundingContext: RoundingContext{ + MaxIntegerDigits: 2, + }, + }, + test: pairs{ + "2017": "17", + }, + }, { + pattern: "0,max_int=2", + pat: &Pattern{ + RoundingContext: RoundingContext{ + MaxIntegerDigits: 2, + MinIntegerDigits: 1, + }, + }, + test: pairs{ + "2000": "0", + "2001": "1", + "2017": "17", + }, + }, { + pattern: "00,max_int=2", + pat: &Pattern{ + RoundingContext: RoundingContext{ + MaxIntegerDigits: 2, + MinIntegerDigits: 2, + }, + }, + test: pairs{ + "2000": "00", + "2001": "01", + "2017": "17", + }, + }, { + pattern: "@@@@,max_int=2", + pat: &Pattern{ + RoundingContext: RoundingContext{ + MaxIntegerDigits: 2, + MinSignificantDigits: 4, + }, + }, + test: pairs{ + "2017": "17.00", + "2000": "0.000", + "2001": "1.000", + }, + + // Significant digits + }, { + pattern: "@@##", + test: pairs{ + "1": "1.0", + "0.1": "0.10", // leading zero does not count as significant digit + "123": "123", + "1234": "1234", + "12345": "12340", + }, + }, { + pattern: "@@@@", + test: pairs{ + "1": "1.000", + ".1": "0.1000", + ".001": "0.001000", + "123": "123.0", + "1234": "1234", + "12345": "12340", // rounding down + "NaN": "NaN", + "-Inf": "-∞", + }, + + // TODO: rounding + // {"@@@@": "23456": "23460"}, // rounding up + // TODO: padding + + // Scientific and Engineering notation + }, { + pattern: "#E0", + test: pairs{ + "0": "0\u202f×\u202f10⁰", + "1": "1\u202f×\u202f10⁰", + "123.456": "1\u202f×\u202f10²", + }, + }, { + pattern: "#E+0", + test: pairs{ + "0": "0\u202f×\u202f10⁺⁰", + "1000": "1\u202f×\u202f10⁺³", + "1E100": "1\u202f×\u202f10⁺¹⁰⁰", + "1E-100": "1\u202f×\u202f10⁻¹⁰⁰", + "NaN": "NaN", + "-Inf": "-∞", + }, + }, { + pattern: "##0E00", + test: pairs{ + "100": "100\u202f×\u202f10⁰⁰", + "12345": "12\u202f×\u202f10⁰³", + "123.456": "123\u202f×\u202f10⁰⁰", + }, + }, { + pattern: "##0.###E00", + test: pairs{ + "100": "100\u202f×\u202f10⁰⁰", + "12345": "12.345\u202f×\u202f10⁰³", + "123456": "123.456\u202f×\u202f10⁰³", + "123.456": "123.456\u202f×\u202f10⁰⁰", + "123.4567": "123.457\u202f×\u202f10⁰⁰", + }, + }, { + pattern: "##0.000E00", + test: pairs{ + "100": "100.000\u202f×\u202f10⁰⁰", + "12345": "12.345\u202f×\u202f10⁰³", + "123.456": "123.456\u202f×\u202f10⁰⁰", + "12.3456": "12.346\u202f×\u202f10⁰⁰", + }, + }, { + pattern: "@@E0", + test: pairs{ + "0": "0.0\u202f×\u202f10⁰", + "99": "9.9\u202f×\u202f10¹", + "0.99": "9.9\u202f×\u202f10⁻¹", + }, + }, { + pattern: "@###E00", + test: pairs{ + "0": "0\u202f×\u202f10⁰⁰", + "1": "1\u202f×\u202f10⁰⁰", + "11": "1.1\u202f×\u202f10⁰¹", + "111": "1.11\u202f×\u202f10⁰²", + "1111": "1.111\u202f×\u202f10⁰³", + "11111": "1.111\u202f×\u202f10⁰⁴", + "0.1": "1\u202f×\u202f10⁻⁰¹", + "0.11": "1.1\u202f×\u202f10⁻⁰¹", + "0.001": "1\u202f×\u202f10⁻⁰³", + }, + }, { + pattern: "*x##0", + test: pairs{ + "0": "xx0", + "10": "x10", + "100": "100", + "1000": "1000", + }, + }, { + pattern: "##0*x", + test: pairs{ + "0": "0xx", + "10": "10x", + "100": "100", + "1000": "1000", + }, + }, { + pattern: "* ###0.000", + test: pairs{ + "0": " 0.000", + "123": " 123.000", + "123.456": " 123.456", + "1234.567": "1234.567", + }, + }, { + pattern: "**0.0#######E00", + test: pairs{ + "0": "***0.0\u202f×\u202f10⁰⁰", + "10": "***1.0\u202f×\u202f10⁰¹", + "11": "***1.1\u202f×\u202f10⁰¹", + "111": "**1.11\u202f×\u202f10⁰²", + "1111": "*1.111\u202f×\u202f10⁰³", + "11111": "1.1111\u202f×\u202f10⁰⁴", + "11110": "*1.111\u202f×\u202f10⁰⁴", + "11100": "**1.11\u202f×\u202f10⁰⁴", + "11000": "***1.1\u202f×\u202f10⁰⁴", + "10000": "***1.0\u202f×\u202f10⁰⁴", + }, + }, { + pattern: "*xpre0suf", + test: pairs{ + "0": "pre0suf", + "10": "pre10suf", + }, + }, { + pattern: "*∞ pre ###0 suf", + test: pairs{ + "0": "∞∞∞ pre 0 suf", + "10": "∞∞ pre 10 suf", + "100": "∞ pre 100 suf", + "1000": " pre 1000 suf", + }, + }, { + pattern: "pre *∞###0 suf", + test: pairs{ + "0": "pre ∞∞∞0 suf", + "10": "pre ∞∞10 suf", + "100": "pre ∞100 suf", + "1000": "pre 1000 suf", + }, + }, { + pattern: "pre ###0*∞ suf", + test: pairs{ + "0": "pre 0∞∞∞ suf", + "10": "pre 10∞∞ suf", + "100": "pre 100∞ suf", + "1000": "pre 1000 suf", + }, + }, { + pattern: "pre ###0 suf *∞", + test: pairs{ + "0": "pre 0 suf ∞∞∞", + "10": "pre 10 suf ∞∞", + "100": "pre 100 suf ∞", + "1000": "pre 1000 suf ", + }, + }, { + // Take width of positive pattern. + pattern: "**###0;**-#####0x", + test: pairs{ + "0": "***0", + "-1": "*-1x", + }, + }, { + pattern: "0.00%", + test: pairs{ + "0.1": "10.00%", + }, + }, { + pattern: "0.##%", + test: pairs{ + "0.1": "10%", + "0.11": "11%", + "0.111": "11.1%", + "0.1111": "11.11%", + "0.11111": "11.11%", + }, + }, { + pattern: "‰ 0.0#", + test: pairs{ + "0.1": "‰ 100.0", + "0.11": "‰ 110.0", + "0.111": "‰ 111.0", + "0.1111": "‰ 111.1", + "0.11111": "‰ 111.11", + "0.111111": "‰ 111.11", + }, + }} + + // TODO: + // "#,##0.00¤", + // "#,##0.00 ¤;(#,##0.00 ¤)", + + for _, tc := range testCases { + pat := tc.pat + if pat == nil { + var err error + if pat, err = ParsePattern(tc.pattern); err != nil { + log.Fatal(err) + } + } + var f Formatter + f.InitPattern(language.English, pat) + for num, want := range tc.test { + buf := make([]byte, 100) + t.Run(tc.pattern+"/"+num, func(t *testing.T) { + var d Decimal + d.Convert(f.RoundingContext, dec(num)) + buf = f.Format(buf[:0], &d) + if got := string(buf); got != want { + t.Errorf("\n got %[1]q (%[1]s)\nwant %[2]q (%[2]s)", got, want) + } + }) + } + } +} + +func TestLocales(t *testing.T) { + testCases := []struct { + tag language.Tag + num string + want string + }{ + {language.Make("en"), "123456.78", "123,456.78"}, + {language.Make("de"), "123456.78", "123.456,78"}, + {language.Make("de-CH"), "123456.78", "123’456.78"}, + {language.Make("fr"), "123456.78", "123 456,78"}, + {language.Make("bn"), "123456.78", "১,২৩,৪৫৬.৭৮"}, + } + for _, tc := range testCases { + t.Run(fmt.Sprint(tc.tag, "/", tc.num), func(t *testing.T) { + var f Formatter + f.InitDecimal(tc.tag) + var d Decimal + d.Convert(f.RoundingContext, dec(tc.num)) + b := f.Format(nil, &d) + if got := string(b); got != tc.want { + t.Errorf("got %[1]q (%[1]s); want %[2]q (%[2]s)", got, tc.want) + } + }) + } +} + +func TestFormatters(t *testing.T) { + var f Formatter + testCases := []struct { + init func(t language.Tag) + num string + want string + }{ + {f.InitDecimal, "123456.78", "123,456.78"}, + {f.InitScientific, "123456.78", "1.23\u202f×\u202f10⁵"}, + {f.InitEngineering, "123456.78", "123.46\u202f×\u202f10³"}, + {f.InitEngineering, "1234", "1.23\u202f×\u202f10³"}, + + {f.InitPercent, "0.1234", "12.34%"}, + {f.InitPerMille, "0.1234", "123.40‰"}, + } + for i, tc := range testCases { + t.Run(fmt.Sprint(i, "/", tc.num), func(t *testing.T) { + tc.init(language.English) + f.SetScale(2) + var d Decimal + d.Convert(f.RoundingContext, dec(tc.num)) + b := f.Format(nil, &d) + if got := string(b); got != tc.want { + t.Errorf("got %[1]q (%[1]s); want %[2]q (%[2]s)", got, tc.want) + } + }) + } +} diff --git a/vendor/golang.org/x/text/internal/number/gen.go b/vendor/golang.org/x/text/internal/number/gen.go index 598c96c..c836221 100644 --- a/vendor/golang.org/x/text/internal/number/gen.go +++ b/vendor/golang.org/x/text/internal/number/gen.go @@ -14,11 +14,11 @@ import ( "strings" "unicode/utf8" - "golang.org/x/text/internal" "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/language" + "golang.org/x/text/internal/language/compact" "golang.org/x/text/internal/number" "golang.org/x/text/internal/stringset" - "golang.org/x/text/language" "golang.org/x/text/unicode/cldr" ) @@ -151,19 +151,19 @@ func genSymbols(w *gen.CodeWriter, data *cldr.CLDR) { type symbols [NumSymbolTypes]string type key struct { - tag int // from language.CompactIndex + tag compact.ID system system } symbolMap := map[key]*symbols{} - defaults := map[int]system{} + defaults := map[compact.ID]system{} for _, lang := range data.Locales() { ldml := data.RawLDML(lang) if ldml.Numbers == nil { continue } - langIndex, ok := language.CompactIndex(language.MustParse(lang)) + langIndex, ok := compact.FromTag(language.MustParse(lang)) if !ok { log.Fatalf("No compact index for language %s", lang) } @@ -213,7 +213,7 @@ func genSymbols(w *gen.CodeWriter, data *cldr.CLDR) { for t := SymDecimal; t < NumSymbolTypes; t++ { p := k.tag for syms[t] == "" { - p = int(internal.Parent[p]) + p = p.Parent() if pSyms, ok := symbolMap[key{p, k.system}]; ok && (*pSyms)[t] != "" { syms[t] = (*pSyms)[t] break @@ -234,7 +234,7 @@ func genSymbols(w *gen.CodeWriter, data *cldr.CLDR) { for ns := system(0); ns < nNumberSystems; ns++ { for _, l := range data.Locales() { - langIndex, _ := language.CompactIndex(language.MustParse(l)) + langIndex, _ := compact.FromTag(language.MustParse(l)) s := symbolMap[key{langIndex, ns}] if s == nil { continue @@ -255,30 +255,30 @@ func genSymbols(w *gen.CodeWriter, data *cldr.CLDR) { // resolveSymbolIndex gets the index from the closest matching locale, // including the locale itself. - resolveSymbolIndex := func(langIndex int, ns system) byte { + resolveSymbolIndex := func(langIndex compact.ID, ns system) symOffset { for { if sym := symbolMap[key{langIndex, ns}]; sym != nil { - return byte(m[*sym]) + return symOffset(m[*sym]) } if langIndex == 0 { return 0 // und, latn } - langIndex = int(internal.Parent[langIndex]) + langIndex = langIndex.Parent() } } // Create an index with the symbols for each locale for the latn numbering // system. If this is not the default, or the only one, for a locale, we // will overwrite the value later. - var langToDefaults [language.NumCompactTags]byte + var langToDefaults [compact.NumCompactTags]symOffset for _, l := range data.Locales() { - langIndex, _ := language.CompactIndex(language.MustParse(l)) + langIndex, _ := compact.FromTag(language.MustParse(l)) langToDefaults[langIndex] = resolveSymbolIndex(langIndex, 0) } // Delete redundant entries. for _, l := range data.Locales() { - langIndex, _ := language.CompactIndex(language.MustParse(l)) + langIndex, _ := compact.FromTag(language.MustParse(l)) def := defaults[langIndex] syms := symbolMap[key{langIndex, def}] if syms == nil { @@ -298,15 +298,15 @@ func genSymbols(w *gen.CodeWriter, data *cldr.CLDR) { // be referenced if a user specified an alternative numbering system. var langToAlt []altSymData for _, l := range data.Locales() { - langIndex, _ := language.CompactIndex(language.MustParse(l)) + langIndex, _ := compact.FromTag(language.MustParse(l)) start := len(langToAlt) - if start > 0x7F { - log.Fatal("Number of alternative assignments > 0x7F") + if start >= hasNonLatnMask { + log.Fatalf("Number of alternative assignments >= %x", hasNonLatnMask) } // Create the entry for the default value. def := defaults[langIndex] langToAlt = append(langToAlt, altSymData{ - compactTag: uint16(langIndex), + compactTag: langIndex, system: def, symIndex: resolveSymbolIndex(langIndex, def), }) @@ -317,7 +317,7 @@ func genSymbols(w *gen.CodeWriter, data *cldr.CLDR) { } if sym := symbolMap[key{langIndex, ns}]; sym != nil { langToAlt = append(langToAlt, altSymData{ - compactTag: uint16(langIndex), + compactTag: langIndex, system: ns, symIndex: resolveSymbolIndex(langIndex, ns), }) @@ -328,7 +328,7 @@ func genSymbols(w *gen.CodeWriter, data *cldr.CLDR) { langToAlt = langToAlt[:start] } else { // Overwrite the entry in langToDefaults. - langToDefaults[langIndex] = 0x80 | byte(start) + langToDefaults[langIndex] = hasNonLatnMask | symOffset(start) } } w.WriteComment(` @@ -361,16 +361,16 @@ func genFormats(w *gen.CodeWriter, data *cldr.CLDR) { // TODO: It would be possible to eliminate two of these slices by having // another indirection and store a reference to the combination of patterns. - decimal := make([]byte, language.NumCompactTags) - scientific := make([]byte, language.NumCompactTags) - percent := make([]byte, language.NumCompactTags) + decimal := make([]byte, compact.NumCompactTags) + scientific := make([]byte, compact.NumCompactTags) + percent := make([]byte, compact.NumCompactTags) for _, lang := range data.Locales() { ldml := data.RawLDML(lang) if ldml.Numbers == nil { continue } - langIndex, ok := language.CompactIndex(language.MustParse(lang)) + langIndex, ok := compact.FromTag(language.MustParse(lang)) if !ok { log.Fatalf("No compact index for language %s", lang) } @@ -440,8 +440,8 @@ func genFormats(w *gen.CodeWriter, data *cldr.CLDR) { // indicates an unspecified value. for _, data := range [][]byte{decimal, scientific, percent} { for i := range data { - p := uint16(i) - for ; data[p] == 0; p = internal.Parent[p] { + p := compact.ID(i) + for ; data[p] == 0; p = p.Parent() { } data[i] = data[p] } diff --git a/vendor/golang.org/x/text/internal/number/gen_common.go b/vendor/golang.org/x/text/internal/number/gen_common.go index c4b791c..b1b41a7 100644 --- a/vendor/golang.org/x/text/internal/number/gen_common.go +++ b/vendor/golang.org/x/text/internal/number/gen_common.go @@ -6,7 +6,11 @@ package main -import "unicode/utf8" +import ( + "unicode/utf8" + + "golang.org/x/text/internal/language/compact" +) // A system identifies a CLDR numbering system. type system byte @@ -37,8 +41,19 @@ const ( NumSymbolTypes ) +const hasNonLatnMask = 0x8000 + +// symOffset is an offset into altSymData if the bit indicated by hasNonLatnMask +// is not 0 (with this bit masked out), and an offset into symIndex otherwise. +// +// TODO: this type can be a byte again if we use an indirection into altsymData +// and introduce an alt -> offset slice (the length of this will be number of +// alternatives plus 1). This also allows getting rid of the compactTag field +// in altSymData. In total this will save about 1K. +type symOffset uint16 + type altSymData struct { - compactTag uint16 + compactTag compact.ID + symIndex symOffset system system - symIndex byte } diff --git a/vendor/golang.org/x/text/internal/number/number.go b/vendor/golang.org/x/text/internal/number/number.go index 34f4477..fffc176 100644 --- a/vendor/golang.org/x/text/internal/number/number.go +++ b/vendor/golang.org/x/text/internal/number/number.go @@ -10,32 +10,32 @@ package number import ( "unicode/utf8" - "golang.org/x/text/internal" + "golang.org/x/text/internal/language/compact" "golang.org/x/text/language" ) // Info holds number formatting configuration data. type Info struct { system systemData // numbering system information - symIndex byte // index to symbols + symIndex symOffset // index to symbols } // InfoFromLangID returns a Info for the given compact language identifier and // numbering system identifier. If system is the empty string, the default // numbering system will be taken for that language. -func InfoFromLangID(compactIndex int, numberSystem string) Info { +func InfoFromLangID(compactIndex compact.ID, numberSystem string) Info { p := langToDefaults[compactIndex] // Lookup the entry for the language. - pSymIndex := byte(0) // Default: Latin, default symbols + pSymIndex := symOffset(0) // Default: Latin, default symbols system, ok := systemMap[numberSystem] if !ok { // Take the value for the default numbering system. This is by far the // most common case as an alternative numbering system is hardly used. - if p&0x80 == 0 { + if p&hasNonLatnMask == 0 { // Latn digits. pSymIndex = p - } else { + } else { // Non-Latn or multiple numbering systems. // Take the first entry from the alternatives list. - data := langToAlt[p&^0x80] + data := langToAlt[p&^hasNonLatnMask] pSymIndex = data.symIndex system = data.system } @@ -43,39 +43,41 @@ func InfoFromLangID(compactIndex int, numberSystem string) Info { langIndex := compactIndex ns := system outerLoop: - for { - if p&0x80 == 0 { + for ; ; p = langToDefaults[langIndex] { + if p&hasNonLatnMask == 0 { if ns == 0 { // The index directly points to the symbol data. pSymIndex = p break } // Move to the parent and retry. - langIndex = int(internal.Parent[langIndex]) - } - // The index points to a list of symbol data indexes. - for _, e := range langToAlt[p&^0x80:] { - if int(e.compactTag) != langIndex { - if langIndex == 0 { - // The CLDR root defines full symbol information for all - // numbering systems (even though mostly by means of - // aliases). This means that we will never fall back to - // the default of the language. Also, the loop is - // guaranteed to terminate as a consequence. - ns = numLatn - // Fall back to Latin and start from the original - // language. See - // http://unicode.org/reports/tr35/#Locale_Inheritance. - langIndex = compactIndex - } else { + langIndex = langIndex.Parent() + } else { + // The index points to a list of symbol data indexes. + for _, e := range langToAlt[p&^hasNonLatnMask:] { + if e.compactTag != langIndex { + if langIndex == 0 { + // The CLDR root defines full symbol information for + // all numbering systems (even though mostly by + // means of aliases). Fall back to the default entry + // for Latn if there is no data for the numbering + // system of this language. + if ns == 0 { + break + } + // Fall back to Latin and start from the original + // language. See + // http://unicode.org/reports/tr35/#Locale_Inheritance. + ns = numLatn + langIndex = compactIndex + continue outerLoop + } // Fall back to parent. - langIndex = int(internal.Parent[langIndex]) + langIndex = langIndex.Parent() + } else if e.system == ns { + pSymIndex = e.symIndex + break outerLoop } - break - } - if e.system == ns { - pSymIndex = e.symIndex - break outerLoop } } } @@ -98,12 +100,7 @@ func InfoFromLangID(compactIndex int, numberSystem string) Info { // InfoFromTag returns a Info for the given language tag. func InfoFromTag(t language.Tag) Info { - for { - if index, ok := language.CompactIndex(t); ok { - return InfoFromLangID(index, t.TypeForKey("nu")) - } - t = t.Parent() - } + return InfoFromLangID(tagToID(t), t.TypeForKey("nu")) } // IsDecimal reports if the numbering system can convert decimal to native @@ -121,6 +118,15 @@ func (n Info) WriteDigit(dst []byte, asciiDigit rune) int { return int(n.system.digitSize) } +// AppendDigit appends the UTF-8 sequence for n corresponding to the given digit +// to dst and reports the number of bytes written. dst must be large enough to +// hold the rune (can be up to utf8.UTFMax bytes). +func (n Info) AppendDigit(dst []byte, digit byte) []byte { + dst = append(dst, n.system.zero[:n.system.digitSize]...) + dst[len(dst)-1] += digit + return dst +} + // Digit returns the digit for the numbering system for the corresponding ASCII // value. For example, ni.Digit('3') could return '三'. Note that the argument // is the rune constant '3', which equals 51, not the integer constant 3. @@ -137,9 +143,10 @@ func (n Info) Symbol(t SymbolType) string { } func formatForLang(t language.Tag, index []byte) *Pattern { - for ; ; t = t.Parent() { - if x, ok := language.CompactIndex(t); ok { - return &formats[index[x]] - } - } + return &formats[index[tagToID(t)]] +} + +func tagToID(t language.Tag) compact.ID { + id, _ := compact.RegionalID(compact.Tag(t)) + return id } diff --git a/vendor/golang.org/x/text/internal/number/number_test.go b/vendor/golang.org/x/text/internal/number/number_test.go index fc04887..cbc28ab 100644 --- a/vendor/golang.org/x/text/internal/number/number_test.go +++ b/vendor/golang.org/x/text/internal/number/number_test.go @@ -5,6 +5,7 @@ package number import ( + "fmt" "testing" "golang.org/x/text/internal/testtext" @@ -26,9 +27,13 @@ func TestInfo(t *testing.T) { // U+096F DEVANAGARI DIGIT NINE ('९') {"de-BE-u-nu-deva", SymGroup, ".", '\u096f'}, // miss -> latn -> de {"de-Cyrl-BE", SymGroup, ",", '9'}, // inherits from root - {"de-CH", SymGroup, "'", '9'}, // overrides values in de - {"de-CH-oxendict", SymGroup, "'", '9'}, // inherits from de-CH (no compact index) - {"de-CH-u-nu-deva", SymGroup, "'", '\u096f'}, // miss -> latn -> de-CH + {"de-CH", SymGroup, "’", '9'}, // overrides values in de + {"de-CH-oxendict", SymGroup, "’", '9'}, // inherits from de-CH (no compact index) + {"de-CH-u-nu-deva", SymGroup, "’", '\u096f'}, // miss -> latn -> de-CH + + {"bn-u-nu-beng", SymGroup, ",", '\u09ef'}, + {"bn-u-nu-deva", SymGroup, ",", '\u096f'}, + {"bn-u-nu-latn", SymGroup, ",", '9'}, {"pa", SymExponential, "E", '9'}, @@ -51,13 +56,22 @@ func TestInfo(t *testing.T) { {"en-u-nu-roman", SymPlusSign, "+", '9'}, } for _, tc := range testCases { - info := InfoFromTag(language.MustParse(tc.lang)) - if got := info.Symbol(tc.sym); got != tc.wantSym { - t.Errorf("%s:%v:sym: got %q; want %q", tc.lang, tc.sym, got, tc.wantSym) - } - if got := info.Digit('9'); got != tc.wantNine { - t.Errorf("%s:%v:nine: got %q; want %q", tc.lang, tc.sym, got, tc.wantNine) - } + t.Run(fmt.Sprintf("%s:%v", tc.lang, tc.sym), func(t *testing.T) { + info := InfoFromTag(language.MustParse(tc.lang)) + if got := info.Symbol(tc.sym); got != tc.wantSym { + t.Errorf("sym: got %q; want %q", got, tc.wantSym) + } + if got := info.Digit('9'); got != tc.wantNine { + t.Errorf("Digit(9): got %+q; want %+q", got, tc.wantNine) + } + var buf [4]byte + if got := string(buf[:info.WriteDigit(buf[:], '9')]); got != string(tc.wantNine) { + t.Errorf("WriteDigit(9): got %+q; want %+q", got, tc.wantNine) + } + if got := string(info.AppendDigit([]byte{}, 9)); got != string(tc.wantNine) { + t.Errorf("AppendDigit(9): got %+q; want %+q", got, tc.wantNine) + } + }) } } diff --git a/vendor/golang.org/x/text/internal/number/pattern.go b/vendor/golang.org/x/text/internal/number/pattern.go index 018cf02..b95ca40 100644 --- a/vendor/golang.org/x/text/internal/number/pattern.go +++ b/vendor/golang.org/x/text/internal/number/pattern.go @@ -39,37 +39,112 @@ import ( // // This type is only intended for internal use. type Pattern struct { - // TODO: this struct can be packed a lot better than it is now. Should be - // possible to make it 32 bytes. - - Affix string // includes prefix and suffix. First byte is prefix length. - Offset uint16 // Offset into Affix for prefix and suffix - NegOffset uint16 // Offset into Affix for negative prefix and suffix or 0. - - Multiplier uint32 - RoundIncrement uint32 // Use Min*Digits to determine scale - PadRune rune + RoundingContext + Affix string // includes prefix and suffix. First byte is prefix length. + Offset uint16 // Offset into Affix for prefix and suffix + NegOffset uint16 // Offset into Affix for negative prefix and suffix or 0. + PadRune rune FormatWidth uint16 GroupingSize [2]uint8 Flags PatternFlag +} + +// A RoundingContext indicates how a number should be converted to digits. +// It contains all information needed to determine the "visible digits" as +// required by the pluralization rules. +type RoundingContext struct { + // TODO: unify these two fields so that there is a more unambiguous meaning + // of how precision is handled. + MaxSignificantDigits int16 // -1 is unlimited + MaxFractionDigits int16 // -1 is unlimited + + Increment uint32 + IncrementScale uint8 // May differ from printed scale. + + Mode RoundingMode + + DigitShift uint8 // Number of decimals to shift. Used for % and ‰. // Number of digits. - MinIntegerDigits uint8 + MinIntegerDigits uint8 + MaxIntegerDigits uint8 MinFractionDigits uint8 - MaxFractionDigits uint8 MinSignificantDigits uint8 - MaxSignificantDigits uint8 - MinExponentDigits uint8 + + MinExponentDigits uint8 +} + +// RoundSignificantDigits returns the number of significant digits an +// implementation of Convert may round to or n < 0 if there is no maximum or +// a maximum is not recommended. +func (r *RoundingContext) RoundSignificantDigits() (n int) { + if r.MaxFractionDigits == 0 && r.MaxSignificantDigits > 0 { + return int(r.MaxSignificantDigits) + } else if r.isScientific() && r.MaxIntegerDigits == 1 { + if r.MaxSignificantDigits == 0 || + int(r.MaxFractionDigits+1) == int(r.MaxSignificantDigits) { + // Note: don't add DigitShift: it is only used for decimals. + return int(r.MaxFractionDigits) + 1 + } + } + return -1 +} + +// RoundFractionDigits returns the number of fraction digits an implementation +// of Convert may round to or n < 0 if there is no maximum or a maximum is not +// recommended. +func (r *RoundingContext) RoundFractionDigits() (n int) { + if r.MinExponentDigits == 0 && + r.MaxSignificantDigits == 0 && + r.MaxFractionDigits >= 0 { + return int(r.MaxFractionDigits) + int(r.DigitShift) + } + return -1 +} + +// SetScale fixes the RoundingContext to a fixed number of fraction digits. +func (r *RoundingContext) SetScale(scale int) { + r.MinFractionDigits = uint8(scale) + r.MaxFractionDigits = int16(scale) +} + +func (r *RoundingContext) SetPrecision(prec int) { + r.MaxSignificantDigits = int16(prec) +} + +func (r *RoundingContext) isScientific() bool { + return r.MinExponentDigits > 0 +} + +func (f *Pattern) needsSep(pos int) bool { + p := pos - 1 + size := int(f.GroupingSize[0]) + if size == 0 || p == 0 { + return false + } + if p == size { + return true + } + if p -= size; p < 0 { + return false + } + // TODO: make second groupingsize the same as first if 0 so that we can + // avoid this check. + if x := int(f.GroupingSize[1]); x != 0 { + size = x + } + return p%size == 0 } -// A PatternFlag is a bit mask for the flag field of a Format. +// A PatternFlag is a bit mask for the flag field of a Pattern. type PatternFlag uint8 const ( AlwaysSign PatternFlag = 1 << iota + ElideSign // Use space instead of plus sign. AlwaysSign must be true. AlwaysExpSign AlwaysDecimalSeparator ParenthesisForNegative // Common pattern. Saves space. @@ -104,7 +179,8 @@ func (p *parser) setError(err error) { } func (p *parser) updateGrouping() { - if p.hasGroup && p.groupingCount < 255 { + if p.hasGroup && + 0 < p.groupingCount && p.groupingCount < 255 { p.GroupingSize[1] = p.GroupingSize[0] p.GroupingSize[0] = uint8(p.groupingCount) } @@ -154,6 +230,9 @@ func ParsePattern(s string) (f *Pattern, err error) { } else { p.Affix = affix } + if p.Increment == 0 { + p.IncrementScale = 0 + } return p.Pattern, nil } @@ -163,6 +242,7 @@ func (p *parser) parseSubPattern(s string) string { s = p.parsePad(s, PadAfterPrefix) s = p.parse(p.number, s) + p.updateGrouping() s = p.parsePad(s, PadBeforeSuffix) s = p.parseAffix(s) @@ -225,26 +305,41 @@ func (p *parser) affix(r rune) state { '#', '@', '.', '*', ',', ';': return nil case '\'': - return p.escape + p.FormatWidth-- + return p.escapeFirst case '%': - if p.Multiplier != 0 { + if p.DigitShift != 0 { p.setError(errDuplicatePercentSign) } - p.Multiplier = 100 + p.DigitShift = 2 case '\u2030': // ‰ Per mille - if p.Multiplier != 0 { + if p.DigitShift != 0 { p.setError(errDuplicatePermilleSign) } - p.Multiplier = 1000 + p.DigitShift = 3 // TODO: handle currency somehow: ¤, ¤¤, ¤¤¤, ¤¤¤¤ } p.buf = append(p.buf, string(r)...) return p.affix } +func (p *parser) escapeFirst(r rune) state { + switch r { + case '\'': + p.buf = append(p.buf, "\\'"...) + return p.affix + default: + p.buf = append(p.buf, '\'') + p.buf = append(p.buf, string(r)...) + } + return p.escape +} + func (p *parser) escape(r rune) state { switch r { case '\'': + p.FormatWidth-- + p.buf = append(p.buf, '\'') return p.affix default: p.buf = append(p.buf, string(r)...) @@ -263,6 +358,7 @@ func (p *parser) number(r rune) state { case '@': p.groupingCount++ p.leadingSharps = 0 + p.MaxFractionDigits = -1 return p.sigDigits(r) case ',': if p.leadingSharps == 0 { // no leading commas @@ -294,11 +390,13 @@ func (p *parser) integer(r rune) state { next = p.exponent case '.': next = p.fraction + case ',': + next = p.integer } p.updateGrouping() return next } - p.RoundIncrement = p.RoundIncrement*10 + uint32(r-'0') + p.Increment = p.Increment*10 + uint32(r-'0') p.groupingCount++ p.MinIntegerDigits++ return p.integer @@ -348,7 +446,8 @@ func (p *parser) normalizeSigDigitsWithExponent() state { func (p *parser) fraction(r rune) state { switch r { case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': - p.RoundIncrement = p.RoundIncrement*10 + uint32(r-'0') + p.Increment = p.Increment*10 + uint32(r-'0') + p.IncrementScale++ p.MinFractionDigits++ p.MaxFractionDigits++ case '#': diff --git a/vendor/golang.org/x/text/internal/number/pattern_test.go b/vendor/golang.org/x/text/internal/number/pattern_test.go index 810b5a8..a7517d0 100644 --- a/vendor/golang.org/x/text/internal/number/pattern_test.go +++ b/vendor/golang.org/x/text/internal/number/pattern_test.go @@ -22,94 +22,172 @@ var testCases = []struct { }, { "0", &Pattern{ - FormatWidth: 1, - MinIntegerDigits: 1, + FormatWidth: 1, + RoundingContext: RoundingContext{ + MinIntegerDigits: 1, + }, + }, +}, { + "+0", + &Pattern{ + Affix: "\x01+\x00", + FormatWidth: 2, + RoundingContext: RoundingContext{ + MinIntegerDigits: 1, + }, + }, +}, { + "0+", + &Pattern{ + Affix: "\x00\x01+", + FormatWidth: 2, + RoundingContext: RoundingContext{ + MinIntegerDigits: 1, + }, }, }, { "0000", &Pattern{ - FormatWidth: 4, - MinIntegerDigits: 4, + FormatWidth: 4, + RoundingContext: RoundingContext{ + MinIntegerDigits: 4, + }, }, }, { ".#", &Pattern{ - FormatWidth: 2, - MaxFractionDigits: 1, + FormatWidth: 2, + RoundingContext: RoundingContext{ + MaxFractionDigits: 1, + }, }, }, { "#0.###", &Pattern{ - FormatWidth: 6, - MinIntegerDigits: 1, - MaxFractionDigits: 3, + FormatWidth: 6, + RoundingContext: RoundingContext{ + MinIntegerDigits: 1, + MaxFractionDigits: 3, + }, }, }, { "#0.######", &Pattern{ - FormatWidth: 9, - MinIntegerDigits: 1, - MaxFractionDigits: 6, + FormatWidth: 9, + RoundingContext: RoundingContext{ + MinIntegerDigits: 1, + MaxFractionDigits: 6, + }, + }, +}, { + "#,0", + &Pattern{ + FormatWidth: 3, + GroupingSize: [2]uint8{1, 0}, + RoundingContext: RoundingContext{ + MinIntegerDigits: 1, + }, + }, +}, { + "#,0.00", + &Pattern{ + FormatWidth: 6, + GroupingSize: [2]uint8{1, 0}, + RoundingContext: RoundingContext{ + MinIntegerDigits: 1, + MinFractionDigits: 2, + MaxFractionDigits: 2, + }, }, }, { "#,##0.###", &Pattern{ - FormatWidth: 9, - GroupingSize: [2]uint8{3, 0}, - MinIntegerDigits: 1, - MaxFractionDigits: 3, + FormatWidth: 9, + GroupingSize: [2]uint8{3, 0}, + RoundingContext: RoundingContext{ + MinIntegerDigits: 1, + MaxFractionDigits: 3, + }, }, }, { "#,##,##0.###", &Pattern{ - FormatWidth: 12, - GroupingSize: [2]uint8{3, 2}, - MinIntegerDigits: 1, - MaxFractionDigits: 3, + FormatWidth: 12, + GroupingSize: [2]uint8{3, 2}, + RoundingContext: RoundingContext{ + MinIntegerDigits: 1, + MaxFractionDigits: 3, + }, }, }, { // Ignore additional separators. "#,####,##,##0.###", &Pattern{ - FormatWidth: 17, - GroupingSize: [2]uint8{3, 2}, - MinIntegerDigits: 1, - MaxFractionDigits: 3, + FormatWidth: 17, + GroupingSize: [2]uint8{3, 2}, + RoundingContext: RoundingContext{ + MinIntegerDigits: 1, + MaxFractionDigits: 3, + }, }, }, { "#E0", &Pattern{ - FormatWidth: 3, - MaxIntegerDigits: 1, - MinExponentDigits: 1, + FormatWidth: 3, + RoundingContext: RoundingContext{ + MaxIntegerDigits: 1, + MinExponentDigits: 1, + }, }, +}, { + // At least one exponent digit is required. As long as this is true, one can + // determine that scientific rendering is needed if MinExponentDigits > 0. + "#E#", + nil, }, { "0E0", &Pattern{ - FormatWidth: 3, - MinIntegerDigits: 1, - MinExponentDigits: 1, + FormatWidth: 3, + RoundingContext: RoundingContext{ + MinIntegerDigits: 1, + MinExponentDigits: 1, + }, + }, +}, { + "##0.###E00", + &Pattern{ + FormatWidth: 10, + RoundingContext: RoundingContext{ + MinIntegerDigits: 1, + MaxIntegerDigits: 3, + MaxFractionDigits: 3, + MinExponentDigits: 2, + }, }, }, { "##00.0#E0", &Pattern{ - FormatWidth: 9, - MinIntegerDigits: 2, - MaxIntegerDigits: 4, - MinFractionDigits: 1, - MaxFractionDigits: 2, - MinExponentDigits: 1, + FormatWidth: 9, + RoundingContext: RoundingContext{ + MinIntegerDigits: 2, + MaxIntegerDigits: 4, + MinFractionDigits: 1, + MaxFractionDigits: 2, + MinExponentDigits: 1, + }, }, }, { "#00.0E+0", &Pattern{ - FormatWidth: 8, - Flags: AlwaysExpSign, - MinIntegerDigits: 2, - MaxIntegerDigits: 3, - MinFractionDigits: 1, - MaxFractionDigits: 1, - MinExponentDigits: 1, + FormatWidth: 8, + Flags: AlwaysExpSign, + RoundingContext: RoundingContext{ + MinIntegerDigits: 2, + MaxIntegerDigits: 3, + MinFractionDigits: 1, + MaxFractionDigits: 1, + MinExponentDigits: 1, + }, }, }, { "0.0E++0", @@ -121,45 +199,58 @@ var testCases = []struct { // significant digits "@", &Pattern{ - FormatWidth: 1, - MinSignificantDigits: 1, - MaxSignificantDigits: 1, + FormatWidth: 1, + RoundingContext: RoundingContext{ + MinSignificantDigits: 1, + MaxSignificantDigits: 1, + MaxFractionDigits: -1, + }, }, }, { // significant digits "@@@@", &Pattern{ - FormatWidth: 4, - MinSignificantDigits: 4, - MaxSignificantDigits: 4, + FormatWidth: 4, + RoundingContext: RoundingContext{ + MinSignificantDigits: 4, + MaxSignificantDigits: 4, + MaxFractionDigits: -1, + }, }, }, { "@###", &Pattern{ - FormatWidth: 4, - MinSignificantDigits: 1, - MaxSignificantDigits: 4, + FormatWidth: 4, + RoundingContext: RoundingContext{ + MinSignificantDigits: 1, + MaxSignificantDigits: 4, + MaxFractionDigits: -1, + }, }, }, { // Exponents in significant digits mode gets normalized. "@@E0", &Pattern{ - FormatWidth: 4, - MinIntegerDigits: 1, - MaxIntegerDigits: 1, - MinFractionDigits: 1, - MaxFractionDigits: 1, - MinExponentDigits: 1, + FormatWidth: 4, + RoundingContext: RoundingContext{ + MinIntegerDigits: 1, + MaxIntegerDigits: 1, + MinFractionDigits: 1, + MaxFractionDigits: 1, + MinExponentDigits: 1, + }, }, }, { "@###E00", &Pattern{ - FormatWidth: 7, - MinIntegerDigits: 1, - MaxIntegerDigits: 1, - MinFractionDigits: 0, - MaxFractionDigits: 3, - MinExponentDigits: 2, + FormatWidth: 7, + RoundingContext: RoundingContext{ + MinIntegerDigits: 1, + MaxIntegerDigits: 1, + MinFractionDigits: 0, + MaxFractionDigits: 3, + MinExponentDigits: 2, + }, }, }, { // The significant digits mode does not allow fractions. @@ -169,62 +260,89 @@ var testCases = []struct { //alternative negative pattern "#0.###;(#0.###)", &Pattern{ - Affix: "\x00\x00\x01(\x01)", - NegOffset: 2, - FormatWidth: 6, - MinIntegerDigits: 1, - MaxFractionDigits: 3, + Affix: "\x00\x00\x01(\x01)", + NegOffset: 2, + FormatWidth: 6, + RoundingContext: RoundingContext{ + MinIntegerDigits: 1, + MaxFractionDigits: 3, + }, }, }, { - // Rounding increments + // Rounding increment "1.05", &Pattern{ - RoundIncrement: 105, - FormatWidth: 4, - MinIntegerDigits: 1, - MinFractionDigits: 2, - MaxFractionDigits: 2, + FormatWidth: 4, + RoundingContext: RoundingContext{ + Increment: 105, + IncrementScale: 2, + MinIntegerDigits: 1, + MinFractionDigits: 2, + MaxFractionDigits: 2, + }, + }, +}, { + // Rounding increment with grouping + "1,05", + &Pattern{ + FormatWidth: 4, + GroupingSize: [2]uint8{2, 0}, + RoundingContext: RoundingContext{ + Increment: 105, + IncrementScale: 0, + MinIntegerDigits: 3, + MinFractionDigits: 0, + MaxFractionDigits: 0, + }, }, }, { "0.0%", &Pattern{ - Affix: "\x00\x01%", - Multiplier: 100, - FormatWidth: 4, - MinIntegerDigits: 1, - MinFractionDigits: 1, - MaxFractionDigits: 1, + Affix: "\x00\x01%", + FormatWidth: 4, + RoundingContext: RoundingContext{ + DigitShift: 2, + MinIntegerDigits: 1, + MinFractionDigits: 1, + MaxFractionDigits: 1, + }, }, }, { "0.0‰", &Pattern{ - Affix: "\x00\x03‰", - Multiplier: 1000, - FormatWidth: 4, - MinIntegerDigits: 1, - MinFractionDigits: 1, - MaxFractionDigits: 1, + Affix: "\x00\x03‰", + FormatWidth: 4, + RoundingContext: RoundingContext{ + DigitShift: 3, + MinIntegerDigits: 1, + MinFractionDigits: 1, + MaxFractionDigits: 1, + }, }, }, { "#,##0.00¤", &Pattern{ - Affix: "\x00\x02¤", - FormatWidth: 9, - GroupingSize: [2]uint8{3, 0}, - MinIntegerDigits: 1, - MinFractionDigits: 2, - MaxFractionDigits: 2, + Affix: "\x00\x02¤", + FormatWidth: 9, + GroupingSize: [2]uint8{3, 0}, + RoundingContext: RoundingContext{ + MinIntegerDigits: 1, + MinFractionDigits: 2, + MaxFractionDigits: 2, + }, }, }, { "#,##0.00 ¤;(#,##0.00 ¤)", &Pattern{Affix: "\x00\x04\u00a0¤\x01(\x05\u00a0¤)", - NegOffset: 6, - Multiplier: 0, - FormatWidth: 10, - GroupingSize: [2]uint8{3, 0}, - MinIntegerDigits: 1, - MinFractionDigits: 2, - MaxFractionDigits: 2, + NegOffset: 6, + FormatWidth: 10, + GroupingSize: [2]uint8{3, 0}, + RoundingContext: RoundingContext{ + DigitShift: 0, + MinIntegerDigits: 1, + MinFractionDigits: 2, + MaxFractionDigits: 2, + }, }, }, { // padding @@ -272,6 +390,24 @@ var testCases = []struct { FormatWidth: 7, Flags: PadAfterSuffix, }, +}, { + `* #0 o''clock`, + &Pattern{Affix: "\x00\x09 o\\'clock", + FormatWidth: 10, + PadRune: 32, + RoundingContext: RoundingContext{ + MinIntegerDigits: 0x1, + }, + }, +}, { + `'123'* #0'456'`, + &Pattern{Affix: "\x05'123'\x05'456'", + FormatWidth: 8, + PadRune: 32, + RoundingContext: RoundingContext{ + MinIntegerDigits: 0x1, + }, + Flags: PadAfterPrefix}, }, { // no duplicate padding "*xpre#suf*x", nil, @@ -282,19 +418,21 @@ var testCases = []struct { func TestParsePattern(t *testing.T) { for i, tc := range testCases { - f, err := ParsePattern(tc.pat) - if !reflect.DeepEqual(f, tc.want) { - t.Errorf("%d:%s:\ngot %#v;\nwant %#v", i, tc.pat, f, tc.want) - } - if got, want := err != nil, tc.want == nil; got != want { - t.Errorf("%d:%s:error: got %v; want %v", i, tc.pat, err, want) - } + t.Run(tc.pat, func(t *testing.T) { + f, err := ParsePattern(tc.pat) + if !reflect.DeepEqual(f, tc.want) { + t.Errorf("%d:%s:\ngot %#v;\nwant %#v", i, tc.pat, f, tc.want) + } + if got, want := err != nil, tc.want == nil; got != want { + t.Errorf("%d:%s:error: got %v; want %v", i, tc.pat, err, want) + } + }) } } func TestPatternSize(t *testing.T) { - if sz := unsafe.Sizeof(Pattern{}); sz > 48 { - t.Errorf("got %d; want 48", sz) + if sz := unsafe.Sizeof(Pattern{}); sz > 56 { + t.Errorf("got %d; want <= 56", sz) } } diff --git a/vendor/golang.org/x/text/internal/number/roundingmode_string.go b/vendor/golang.org/x/text/internal/number/roundingmode_string.go new file mode 100644 index 0000000..f264ea5 --- /dev/null +++ b/vendor/golang.org/x/text/internal/number/roundingmode_string.go @@ -0,0 +1,16 @@ +// Code generated by "stringer -type RoundingMode"; DO NOT EDIT. + +package number + +import "fmt" + +const _RoundingMode_name = "ToNearestEvenToNearestZeroToNearestAwayToPositiveInfToNegativeInfToZeroAwayFromZeronumModes" + +var _RoundingMode_index = [...]uint8{0, 13, 26, 39, 52, 65, 71, 83, 91} + +func (i RoundingMode) String() string { + if i >= RoundingMode(len(_RoundingMode_index)-1) { + return fmt.Sprintf("RoundingMode(%d)", i) + } + return _RoundingMode_name[_RoundingMode_index[i]:_RoundingMode_index[i+1]] +} diff --git a/vendor/golang.org/x/text/internal/number/tables.go b/vendor/golang.org/x/text/internal/number/tables.go index 5c799b4..0668a37 100644 --- a/vendor/golang.org/x/text/internal/number/tables.go +++ b/vendor/golang.org/x/text/internal/number/tables.go @@ -5,9 +5,9 @@ package number import "golang.org/x/text/internal/stringset" // CLDRVersion is the CLDR version from which the tables in this package are derived. -const CLDRVersion = "30" +const CLDRVersion = "32" -var numSysData = []systemData{ // 58 elements +var numSysData = []systemData{ // 59 elements 0: {id: 0x0, digitSize: 0x1, zero: [4]uint8{0x30, 0x0, 0x0, 0x0}}, 1: {id: 0x1, digitSize: 0x4, zero: [4]uint8{0xf0, 0x9e, 0xa5, 0x90}}, 2: {id: 0x2, digitSize: 0x4, zero: [4]uint8{0xf0, 0x91, 0x9c, 0xb0}}, @@ -21,131 +21,133 @@ var numSysData = []systemData{ // 58 elements 10: {id: 0xa, digitSize: 0x3, zero: [4]uint8{0xea, 0xa9, 0x90, 0x0}}, 11: {id: 0xb, digitSize: 0x3, zero: [4]uint8{0xe0, 0xa5, 0xa6, 0x0}}, 12: {id: 0xc, digitSize: 0x3, zero: [4]uint8{0xef, 0xbc, 0x90, 0x0}}, - 13: {id: 0xd, digitSize: 0x3, zero: [4]uint8{0xe0, 0xab, 0xa6, 0x0}}, - 14: {id: 0xe, digitSize: 0x3, zero: [4]uint8{0xe0, 0xa9, 0xa6, 0x0}}, - 15: {id: 0xf, digitSize: 0x4, zero: [4]uint8{0xf0, 0x96, 0xad, 0x90}}, - 16: {id: 0x10, digitSize: 0x3, zero: [4]uint8{0xea, 0xa7, 0x90, 0x0}}, - 17: {id: 0x11, digitSize: 0x3, zero: [4]uint8{0xea, 0xa4, 0x80, 0x0}}, - 18: {id: 0x12, digitSize: 0x3, zero: [4]uint8{0xe1, 0x9f, 0xa0, 0x0}}, - 19: {id: 0x13, digitSize: 0x3, zero: [4]uint8{0xe0, 0xb3, 0xa6, 0x0}}, - 20: {id: 0x14, digitSize: 0x3, zero: [4]uint8{0xe1, 0xaa, 0x80, 0x0}}, - 21: {id: 0x15, digitSize: 0x3, zero: [4]uint8{0xe1, 0xaa, 0x90, 0x0}}, - 22: {id: 0x16, digitSize: 0x3, zero: [4]uint8{0xe0, 0xbb, 0x90, 0x0}}, - 23: {id: 0x17, digitSize: 0x3, zero: [4]uint8{0xe1, 0xb1, 0x80, 0x0}}, - 24: {id: 0x18, digitSize: 0x3, zero: [4]uint8{0xe1, 0xa5, 0x86, 0x0}}, - 25: {id: 0x19, digitSize: 0x4, zero: [4]uint8{0xf0, 0x9d, 0x9f, 0x8e}}, - 26: {id: 0x1a, digitSize: 0x4, zero: [4]uint8{0xf0, 0x9d, 0x9f, 0x98}}, - 27: {id: 0x1b, digitSize: 0x4, zero: [4]uint8{0xf0, 0x9d, 0x9f, 0xb6}}, - 28: {id: 0x1c, digitSize: 0x4, zero: [4]uint8{0xf0, 0x9d, 0x9f, 0xac}}, - 29: {id: 0x1d, digitSize: 0x4, zero: [4]uint8{0xf0, 0x9d, 0x9f, 0xa2}}, - 30: {id: 0x1e, digitSize: 0x3, zero: [4]uint8{0xe0, 0xb5, 0xa6, 0x0}}, - 31: {id: 0x1f, digitSize: 0x4, zero: [4]uint8{0xf0, 0x91, 0x99, 0x90}}, - 32: {id: 0x20, digitSize: 0x3, zero: [4]uint8{0xe1, 0xa0, 0x90, 0x0}}, - 33: {id: 0x21, digitSize: 0x4, zero: [4]uint8{0xf0, 0x96, 0xa9, 0xa0}}, - 34: {id: 0x22, digitSize: 0x3, zero: [4]uint8{0xea, 0xaf, 0xb0, 0x0}}, - 35: {id: 0x23, digitSize: 0x3, zero: [4]uint8{0xe1, 0x81, 0x80, 0x0}}, - 36: {id: 0x24, digitSize: 0x3, zero: [4]uint8{0xe1, 0x82, 0x90, 0x0}}, - 37: {id: 0x25, digitSize: 0x3, zero: [4]uint8{0xea, 0xa7, 0xb0, 0x0}}, - 38: {id: 0x26, digitSize: 0x4, zero: [4]uint8{0xf0, 0x91, 0x91, 0x90}}, - 39: {id: 0x27, digitSize: 0x2, zero: [4]uint8{0xdf, 0x80, 0x0, 0x0}}, - 40: {id: 0x28, digitSize: 0x3, zero: [4]uint8{0xe1, 0xb1, 0x90, 0x0}}, - 41: {id: 0x29, digitSize: 0x3, zero: [4]uint8{0xe0, 0xad, 0xa6, 0x0}}, - 42: {id: 0x2a, digitSize: 0x4, zero: [4]uint8{0xf0, 0x90, 0x92, 0xa0}}, - 43: {id: 0x2b, digitSize: 0x3, zero: [4]uint8{0xea, 0xa3, 0x90, 0x0}}, - 44: {id: 0x2c, digitSize: 0x4, zero: [4]uint8{0xf0, 0x91, 0x87, 0x90}}, - 45: {id: 0x2d, digitSize: 0x4, zero: [4]uint8{0xf0, 0x91, 0x8b, 0xb0}}, - 46: {id: 0x2e, digitSize: 0x3, zero: [4]uint8{0xe0, 0xb7, 0xa6, 0x0}}, - 47: {id: 0x2f, digitSize: 0x4, zero: [4]uint8{0xf0, 0x91, 0x83, 0xb0}}, - 48: {id: 0x30, digitSize: 0x3, zero: [4]uint8{0xe1, 0xae, 0xb0, 0x0}}, - 49: {id: 0x31, digitSize: 0x4, zero: [4]uint8{0xf0, 0x91, 0x9b, 0x80}}, - 50: {id: 0x32, digitSize: 0x3, zero: [4]uint8{0xe1, 0xa7, 0x90, 0x0}}, - 51: {id: 0x33, digitSize: 0x3, zero: [4]uint8{0xe0, 0xaf, 0xa6, 0x0}}, - 52: {id: 0x34, digitSize: 0x3, zero: [4]uint8{0xe0, 0xb1, 0xa6, 0x0}}, - 53: {id: 0x35, digitSize: 0x3, zero: [4]uint8{0xe0, 0xb9, 0x90, 0x0}}, - 54: {id: 0x36, digitSize: 0x3, zero: [4]uint8{0xe0, 0xbc, 0xa0, 0x0}}, - 55: {id: 0x37, digitSize: 0x4, zero: [4]uint8{0xf0, 0x91, 0x93, 0x90}}, - 56: {id: 0x38, digitSize: 0x3, zero: [4]uint8{0xea, 0x98, 0xa0, 0x0}}, - 57: {id: 0x39, digitSize: 0x4, zero: [4]uint8{0xf0, 0x91, 0xa3, 0xa0}}, -} // Size: 372 bytes + 13: {id: 0xd, digitSize: 0x4, zero: [4]uint8{0xf0, 0x91, 0xb5, 0x90}}, + 14: {id: 0xe, digitSize: 0x3, zero: [4]uint8{0xe0, 0xab, 0xa6, 0x0}}, + 15: {id: 0xf, digitSize: 0x3, zero: [4]uint8{0xe0, 0xa9, 0xa6, 0x0}}, + 16: {id: 0x10, digitSize: 0x4, zero: [4]uint8{0xf0, 0x96, 0xad, 0x90}}, + 17: {id: 0x11, digitSize: 0x3, zero: [4]uint8{0xea, 0xa7, 0x90, 0x0}}, + 18: {id: 0x12, digitSize: 0x3, zero: [4]uint8{0xea, 0xa4, 0x80, 0x0}}, + 19: {id: 0x13, digitSize: 0x3, zero: [4]uint8{0xe1, 0x9f, 0xa0, 0x0}}, + 20: {id: 0x14, digitSize: 0x3, zero: [4]uint8{0xe0, 0xb3, 0xa6, 0x0}}, + 21: {id: 0x15, digitSize: 0x3, zero: [4]uint8{0xe1, 0xaa, 0x80, 0x0}}, + 22: {id: 0x16, digitSize: 0x3, zero: [4]uint8{0xe1, 0xaa, 0x90, 0x0}}, + 23: {id: 0x17, digitSize: 0x3, zero: [4]uint8{0xe0, 0xbb, 0x90, 0x0}}, + 24: {id: 0x18, digitSize: 0x3, zero: [4]uint8{0xe1, 0xb1, 0x80, 0x0}}, + 25: {id: 0x19, digitSize: 0x3, zero: [4]uint8{0xe1, 0xa5, 0x86, 0x0}}, + 26: {id: 0x1a, digitSize: 0x4, zero: [4]uint8{0xf0, 0x9d, 0x9f, 0x8e}}, + 27: {id: 0x1b, digitSize: 0x4, zero: [4]uint8{0xf0, 0x9d, 0x9f, 0x98}}, + 28: {id: 0x1c, digitSize: 0x4, zero: [4]uint8{0xf0, 0x9d, 0x9f, 0xb6}}, + 29: {id: 0x1d, digitSize: 0x4, zero: [4]uint8{0xf0, 0x9d, 0x9f, 0xac}}, + 30: {id: 0x1e, digitSize: 0x4, zero: [4]uint8{0xf0, 0x9d, 0x9f, 0xa2}}, + 31: {id: 0x1f, digitSize: 0x3, zero: [4]uint8{0xe0, 0xb5, 0xa6, 0x0}}, + 32: {id: 0x20, digitSize: 0x4, zero: [4]uint8{0xf0, 0x91, 0x99, 0x90}}, + 33: {id: 0x21, digitSize: 0x3, zero: [4]uint8{0xe1, 0xa0, 0x90, 0x0}}, + 34: {id: 0x22, digitSize: 0x4, zero: [4]uint8{0xf0, 0x96, 0xa9, 0xa0}}, + 35: {id: 0x23, digitSize: 0x3, zero: [4]uint8{0xea, 0xaf, 0xb0, 0x0}}, + 36: {id: 0x24, digitSize: 0x3, zero: [4]uint8{0xe1, 0x81, 0x80, 0x0}}, + 37: {id: 0x25, digitSize: 0x3, zero: [4]uint8{0xe1, 0x82, 0x90, 0x0}}, + 38: {id: 0x26, digitSize: 0x3, zero: [4]uint8{0xea, 0xa7, 0xb0, 0x0}}, + 39: {id: 0x27, digitSize: 0x4, zero: [4]uint8{0xf0, 0x91, 0x91, 0x90}}, + 40: {id: 0x28, digitSize: 0x2, zero: [4]uint8{0xdf, 0x80, 0x0, 0x0}}, + 41: {id: 0x29, digitSize: 0x3, zero: [4]uint8{0xe1, 0xb1, 0x90, 0x0}}, + 42: {id: 0x2a, digitSize: 0x3, zero: [4]uint8{0xe0, 0xad, 0xa6, 0x0}}, + 43: {id: 0x2b, digitSize: 0x4, zero: [4]uint8{0xf0, 0x90, 0x92, 0xa0}}, + 44: {id: 0x2c, digitSize: 0x3, zero: [4]uint8{0xea, 0xa3, 0x90, 0x0}}, + 45: {id: 0x2d, digitSize: 0x4, zero: [4]uint8{0xf0, 0x91, 0x87, 0x90}}, + 46: {id: 0x2e, digitSize: 0x4, zero: [4]uint8{0xf0, 0x91, 0x8b, 0xb0}}, + 47: {id: 0x2f, digitSize: 0x3, zero: [4]uint8{0xe0, 0xb7, 0xa6, 0x0}}, + 48: {id: 0x30, digitSize: 0x4, zero: [4]uint8{0xf0, 0x91, 0x83, 0xb0}}, + 49: {id: 0x31, digitSize: 0x3, zero: [4]uint8{0xe1, 0xae, 0xb0, 0x0}}, + 50: {id: 0x32, digitSize: 0x4, zero: [4]uint8{0xf0, 0x91, 0x9b, 0x80}}, + 51: {id: 0x33, digitSize: 0x3, zero: [4]uint8{0xe1, 0xa7, 0x90, 0x0}}, + 52: {id: 0x34, digitSize: 0x3, zero: [4]uint8{0xe0, 0xaf, 0xa6, 0x0}}, + 53: {id: 0x35, digitSize: 0x3, zero: [4]uint8{0xe0, 0xb1, 0xa6, 0x0}}, + 54: {id: 0x36, digitSize: 0x3, zero: [4]uint8{0xe0, 0xb9, 0x90, 0x0}}, + 55: {id: 0x37, digitSize: 0x3, zero: [4]uint8{0xe0, 0xbc, 0xa0, 0x0}}, + 56: {id: 0x38, digitSize: 0x4, zero: [4]uint8{0xf0, 0x91, 0x93, 0x90}}, + 57: {id: 0x39, digitSize: 0x3, zero: [4]uint8{0xea, 0x98, 0xa0, 0x0}}, + 58: {id: 0x3a, digitSize: 0x4, zero: [4]uint8{0xf0, 0x91, 0xa3, 0xa0}}, +} // Size: 378 bytes const ( numAdlm = 0x1 numAhom = 0x2 numArab = 0x3 numArabext = 0x4 - numArmn = 0x3a - numArmnlow = 0x3b + numArmn = 0x3b + numArmnlow = 0x3c numBali = 0x5 numBeng = 0x6 numBhks = 0x7 numBrah = 0x8 numCakm = 0x9 numCham = 0xa - numCyrl = 0x3c + numCyrl = 0x3d numDeva = 0xb - numEthi = 0x3d + numEthi = 0x3e numFullwide = 0xc - numGeor = 0x3e - numGrek = 0x3f - numGreklow = 0x40 - numGujr = 0xd - numGuru = 0xe - numHanidays = 0x41 - numHanidec = 0x42 - numHans = 0x43 - numHansfin = 0x44 - numHant = 0x45 - numHantfin = 0x46 - numHebr = 0x47 - numHmng = 0xf - numJava = 0x10 - numJpan = 0x48 - numJpanfin = 0x49 - numKali = 0x11 - numKhmr = 0x12 - numKnda = 0x13 - numLana = 0x14 - numLanatham = 0x15 - numLaoo = 0x16 + numGeor = 0x3f + numGonm = 0xd + numGrek = 0x40 + numGreklow = 0x41 + numGujr = 0xe + numGuru = 0xf + numHanidays = 0x42 + numHanidec = 0x43 + numHans = 0x44 + numHansfin = 0x45 + numHant = 0x46 + numHantfin = 0x47 + numHebr = 0x48 + numHmng = 0x10 + numJava = 0x11 + numJpan = 0x49 + numJpanfin = 0x4a + numKali = 0x12 + numKhmr = 0x13 + numKnda = 0x14 + numLana = 0x15 + numLanatham = 0x16 + numLaoo = 0x17 numLatn = 0x0 - numLepc = 0x17 - numLimb = 0x18 - numMathbold = 0x19 - numMathdbl = 0x1a - numMathmono = 0x1b - numMathsanb = 0x1c - numMathsans = 0x1d - numMlym = 0x1e - numModi = 0x1f - numMong = 0x20 - numMroo = 0x21 - numMtei = 0x22 - numMymr = 0x23 - numMymrshan = 0x24 - numMymrtlng = 0x25 - numNewa = 0x26 - numNkoo = 0x27 - numOlck = 0x28 - numOrya = 0x29 - numOsma = 0x2a - numRoman = 0x4a - numRomanlow = 0x4b - numSaur = 0x2b - numShrd = 0x2c - numSind = 0x2d - numSinh = 0x2e - numSora = 0x2f - numSund = 0x30 - numTakr = 0x31 - numTalu = 0x32 - numTaml = 0x4c - numTamldec = 0x33 - numTelu = 0x34 - numThai = 0x35 - numTibt = 0x36 - numTirh = 0x37 - numVaii = 0x38 - numWara = 0x39 + numLepc = 0x18 + numLimb = 0x19 + numMathbold = 0x1a + numMathdbl = 0x1b + numMathmono = 0x1c + numMathsanb = 0x1d + numMathsans = 0x1e + numMlym = 0x1f + numModi = 0x20 + numMong = 0x21 + numMroo = 0x22 + numMtei = 0x23 + numMymr = 0x24 + numMymrshan = 0x25 + numMymrtlng = 0x26 + numNewa = 0x27 + numNkoo = 0x28 + numOlck = 0x29 + numOrya = 0x2a + numOsma = 0x2b + numRoman = 0x4b + numRomanlow = 0x4c + numSaur = 0x2c + numShrd = 0x2d + numSind = 0x2e + numSinh = 0x2f + numSora = 0x30 + numSund = 0x31 + numTakr = 0x32 + numTalu = 0x33 + numTaml = 0x4d + numTamldec = 0x34 + numTelu = 0x35 + numThai = 0x36 + numTibt = 0x37 + numTirh = 0x38 + numVaii = 0x39 + numWara = 0x3a numNumberSystems ) @@ -167,6 +169,7 @@ var systemMap = map[string]system{ "ethi": numEthi, "fullwide": numFullwide, "geor": numGeor, + "gonm": numGonm, "grek": numGrek, "greklow": numGreklow, "gujr": numGujr, @@ -229,7 +232,7 @@ var systemMap = map[string]system{ "wara": numWara, } -var symIndex = [][12]uint8{ // 71 elements +var symIndex = [][12]uint8{ // 81 elements 0: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb}, 1: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb}, 2: [12]uint8{0x0, 0x1, 0x2, 0xd, 0xe, 0xf, 0x6, 0x7, 0x8, 0x9, 0x10, 0xb}, @@ -237,304 +240,376 @@ var symIndex = [][12]uint8{ // 71 elements 4: [12]uint8{0x0, 0x1, 0x2, 0x11, 0xe, 0xf, 0x6, 0x7, 0x8, 0x9, 0x10, 0xb}, 5: [12]uint8{0x1, 0x0, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x12, 0xb}, 6: [12]uint8{0x1, 0x0, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb}, - 7: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x13, 0x8, 0x9, 0xa, 0xb}, - 8: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x14, 0xb}, - 9: [12]uint8{0x0, 0x1, 0x2, 0x3, 0xe, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb}, - 10: [12]uint8{0x1, 0x0, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0x0}, - 11: [12]uint8{0x1, 0x0, 0x2, 0x3, 0x4, 0x5, 0x6, 0x13, 0x8, 0x9, 0xa, 0xb}, - 12: [12]uint8{0x0, 0x15, 0x2, 0x3, 0x4, 0x5, 0x6, 0x13, 0x8, 0x9, 0xa, 0xb}, + 7: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x13, 0xb}, + 8: [12]uint8{0x0, 0x1, 0x2, 0x3, 0xe, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb}, + 9: [12]uint8{0x1, 0x0, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0x0}, + 10: [12]uint8{0x1, 0x0, 0x2, 0x3, 0x4, 0x5, 0x6, 0x14, 0x8, 0x9, 0xa, 0xb}, + 11: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x14, 0x8, 0x9, 0xa, 0xb}, + 12: [12]uint8{0x0, 0x15, 0x2, 0x3, 0x4, 0x5, 0x6, 0x14, 0x8, 0x9, 0xa, 0xb}, 13: [12]uint8{0x0, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb}, 14: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x16, 0xb}, 15: [12]uint8{0x1, 0x0, 0x2, 0x3, 0x4, 0x5, 0x17, 0x7, 0x8, 0x9, 0xa, 0xb}, - 16: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x17, 0x7, 0x8, 0x9, 0xa, 0xb}, - 17: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0x0}, - 18: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x18, 0x7, 0x8, 0x9, 0xa, 0xb}, - 19: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x19, 0x1a, 0xa, 0xb}, - 20: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x1b, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb}, - 21: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x1b, 0x18, 0x7, 0x8, 0x9, 0xa, 0xb}, - 22: [12]uint8{0x0, 0x1, 0x2, 0x3, 0xe, 0x1c, 0x6, 0x7, 0x8, 0x9, 0x1d, 0xb}, - 23: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x1b, 0x6, 0x7, 0x8, 0x9, 0x1e, 0x0}, - 24: [12]uint8{0x1, 0x0, 0x2, 0x3, 0x4, 0x1b, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb}, - 25: [12]uint8{0x0, 0x1f, 0x2, 0x3, 0x4, 0x1b, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb}, - 26: [12]uint8{0x0, 0x1, 0x2, 0x3, 0xe, 0xf, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb}, - 27: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x20, 0xb}, - 28: [12]uint8{0x0, 0x15, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb}, - 29: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x21, 0xb}, - 30: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x22, 0xb}, - 31: [12]uint8{0x1, 0x0, 0x2, 0x3, 0x4, 0x1b, 0x18, 0x13, 0x8, 0x9, 0x23, 0xb}, - 32: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x1b, 0x18, 0x7, 0x8, 0x9, 0x23, 0xb}, - 33: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x24, 0xb}, - 34: [12]uint8{0x1, 0x0, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x25, 0xb}, - 35: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x26, 0xb}, - 36: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x27, 0xb}, - 37: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x28, 0xb}, - 38: [12]uint8{0x1, 0x0, 0x2, 0x3, 0xe, 0x1c, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb}, + 16: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x17, 0x7, 0x8, 0x9, 0xa, 0x0}, + 17: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x17, 0x7, 0x8, 0x9, 0xa, 0xb}, + 18: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0x0}, + 19: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x18, 0x7, 0x8, 0x9, 0xa, 0xb}, + 20: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x19, 0x1a, 0xa, 0xb}, + 21: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x1b, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb}, + 22: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x1b, 0x18, 0x7, 0x8, 0x9, 0xa, 0xb}, + 23: [12]uint8{0x1, 0x0, 0x2, 0x3, 0x4, 0x1b, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb}, + 24: [12]uint8{0x0, 0x1, 0x2, 0x3, 0xe, 0x1c, 0x6, 0x7, 0x8, 0x9, 0x1d, 0xb}, + 25: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x1b, 0x6, 0x7, 0x8, 0x9, 0x1e, 0x0}, + 26: [12]uint8{0x0, 0x15, 0x2, 0x3, 0x4, 0x1b, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb}, + 27: [12]uint8{0x0, 0x1, 0x2, 0x3, 0xe, 0xf, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb}, + 28: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x1f, 0xb}, + 29: [12]uint8{0x0, 0x15, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb}, + 30: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x20, 0xb}, + 31: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x21, 0x7, 0x8, 0x9, 0x22, 0xb}, + 32: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x23, 0xb}, + 33: [12]uint8{0x1, 0x0, 0x2, 0x3, 0x4, 0x1b, 0x18, 0x14, 0x8, 0x9, 0x24, 0xb}, + 34: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x1b, 0x18, 0x7, 0x8, 0x9, 0x24, 0xb}, + 35: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x25, 0xb}, + 36: [12]uint8{0x1, 0x0, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x26, 0xb}, + 37: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x27, 0xb}, + 38: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x28, 0xb}, 39: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x29, 0xb}, - 40: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x2a, 0xb}, - 41: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x1b, 0x2b, 0x13, 0x8, 0x9, 0x23, 0xb}, - 42: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0x0}, - 43: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x17, 0x7, 0x8, 0x9, 0xa, 0xb}, - 44: [12]uint8{0x1, 0x0, 0x2, 0x3, 0x4, 0x2c, 0x17, 0x7, 0x8, 0x9, 0xa, 0xb}, - 45: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x2d, 0x0}, - 46: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x2e, 0xb}, - 47: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x2f, 0xb}, - 48: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x30, 0x7, 0x8, 0x9, 0xa, 0xb}, - 49: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x31, 0xb}, - 50: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x32, 0xb}, - 51: [12]uint8{0x1, 0x1f, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb}, - 52: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x33, 0xb}, - 53: [12]uint8{0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x7, 0x3b, 0x9, 0xa, 0xb}, - 54: [12]uint8{0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x7, 0x3b, 0x9, 0x3c, 0xb}, - 55: [12]uint8{0x34, 0x35, 0x36, 0x11, 0x38, 0x39, 0x3a, 0x7, 0x3b, 0x9, 0xa, 0xb}, - 56: [12]uint8{0x34, 0x35, 0x36, 0x11, 0x38, 0x3d, 0x3a, 0x7, 0x3b, 0x9, 0xa, 0xb}, - 57: [12]uint8{0x34, 0xc, 0x36, 0x37, 0x38, 0x3e, 0x3a, 0x7, 0x3b, 0x9, 0xa, 0x0}, - 58: [12]uint8{0x34, 0x35, 0x36, 0x37, 0x38, 0x3e, 0x3a, 0x7, 0x3f, 0x9, 0x23, 0xb}, - 59: [12]uint8{0x34, 0x35, 0x36, 0x11, 0x40, 0x41, 0x42, 0x7, 0x3b, 0x9, 0xa, 0x34}, - 60: [12]uint8{0x34, 0x35, 0x36, 0x43, 0xe, 0x1c, 0x42, 0x7, 0x3b, 0x9, 0x1d, 0xb}, - 61: [12]uint8{0x34, 0x35, 0x36, 0x11, 0xe, 0x1c, 0x42, 0x7, 0x3b, 0x9, 0xa, 0x34}, - 62: [12]uint8{0x1, 0xc, 0x36, 0x11, 0x40, 0x44, 0x42, 0x7, 0x3b, 0x9, 0xa, 0x0}, - 63: [12]uint8{0x34, 0x1, 0x36, 0x11, 0x4, 0x5, 0x42, 0x7, 0x3b, 0x9, 0xa, 0x34}, - 64: [12]uint8{0x34, 0x35, 0x36, 0x11, 0x40, 0x44, 0x42, 0x7, 0x3b, 0x9, 0x23, 0xb}, - 65: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x40, 0x41, 0x42, 0x7, 0x8, 0x9, 0xa, 0x34}, - 66: [12]uint8{0x34, 0x35, 0x36, 0x11, 0x4, 0x5, 0x42, 0x7, 0x3b, 0x9, 0x31, 0x34}, - 67: [12]uint8{0x34, 0x35, 0x36, 0x11, 0x4, 0x5, 0x42, 0x7, 0x3b, 0x9, 0x32, 0x34}, - 68: [12]uint8{0x0, 0x1, 0x45, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x27, 0xb}, - 69: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x46, 0xb}, - 70: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x47, 0x48, 0xb}, -} // Size: 876 bytes + 40: [12]uint8{0x1, 0x0, 0x2, 0x3, 0xe, 0x1c, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb}, + 41: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x2a, 0xb}, + 42: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x2b, 0xb}, + 43: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x1b, 0x2c, 0x14, 0x8, 0x9, 0x24, 0xb}, + 44: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0x0}, + 45: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x17, 0x7, 0x8, 0x9, 0xa, 0xb}, + 46: [12]uint8{0x1, 0x0, 0x2, 0x3, 0x4, 0x1b, 0x17, 0x7, 0x8, 0x9, 0xa, 0xb}, + 47: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x2d, 0x0}, + 48: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x2e, 0xb}, + 49: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x2f, 0xb}, + 50: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x30, 0x7, 0x8, 0x9, 0xa, 0xb}, + 51: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x31, 0xb}, + 52: [12]uint8{0x1, 0xc, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x32, 0xb}, + 53: [12]uint8{0x1, 0x15, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb}, + 54: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x33, 0xb}, + 55: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x34, 0xb}, + 56: [12]uint8{0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x7, 0x3c, 0x9, 0xa, 0xb}, + 57: [12]uint8{0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x7, 0x3c, 0x9, 0x3d, 0xb}, + 58: [12]uint8{0x35, 0x36, 0x37, 0x11, 0x3e, 0x3f, 0x3b, 0x7, 0x3c, 0x9, 0xa, 0xb}, + 59: [12]uint8{0x35, 0x36, 0x37, 0x11, 0x39, 0x3a, 0x3b, 0x7, 0x3c, 0x9, 0xa, 0xb}, + 60: [12]uint8{0x35, 0x36, 0x37, 0x11, 0x39, 0x40, 0x3b, 0x7, 0x3c, 0x9, 0xa, 0xb}, + 61: [12]uint8{0x35, 0x36, 0x37, 0x41, 0x3e, 0x3f, 0x3b, 0x7, 0x3c, 0x9, 0xa, 0xb}, + 62: [12]uint8{0x35, 0x36, 0x37, 0x38, 0x3e, 0x3f, 0x3b, 0x7, 0x3c, 0x9, 0xa, 0xb}, + 63: [12]uint8{0x35, 0xc, 0x37, 0x38, 0x39, 0x42, 0x3b, 0x7, 0x3c, 0x9, 0xa, 0x0}, + 64: [12]uint8{0x35, 0xc, 0x37, 0x38, 0x39, 0x42, 0x43, 0x7, 0x44, 0x9, 0x24, 0xb}, + 65: [12]uint8{0x35, 0x36, 0x37, 0x38, 0x39, 0x5, 0x3b, 0x7, 0x3c, 0x9, 0x33, 0xb}, + 66: [12]uint8{0x35, 0x36, 0x37, 0x11, 0x45, 0x46, 0x43, 0x7, 0x3c, 0x9, 0xa, 0x35}, + 67: [12]uint8{0x35, 0x36, 0x37, 0x11, 0xe, 0x1c, 0x43, 0x7, 0x3c, 0x9, 0x1d, 0xb}, + 68: [12]uint8{0x35, 0x36, 0x37, 0x11, 0xe, 0x1c, 0x43, 0x7, 0x3c, 0x9, 0xa, 0x35}, + 69: [12]uint8{0x35, 0x36, 0x37, 0x11, 0x45, 0x5, 0x43, 0x7, 0x3c, 0x9, 0xa, 0x35}, + 70: [12]uint8{0x1, 0xc, 0x37, 0x11, 0x45, 0x47, 0x43, 0x7, 0x3c, 0x9, 0xa, 0x0}, + 71: [12]uint8{0x35, 0x1, 0x37, 0x11, 0x4, 0x5, 0x43, 0x7, 0x3c, 0x9, 0xa, 0x35}, + 72: [12]uint8{0x1, 0xc, 0x37, 0x11, 0x45, 0x47, 0x43, 0x7, 0x3c, 0x9, 0x24, 0xb}, + 73: [12]uint8{0x35, 0x36, 0x2, 0x3, 0x45, 0x46, 0x43, 0x7, 0x8, 0x9, 0xa, 0x35}, + 74: [12]uint8{0x35, 0x36, 0x37, 0x11, 0x4, 0x5, 0x43, 0x7, 0x3c, 0x9, 0x31, 0x35}, + 75: [12]uint8{0x35, 0x36, 0x37, 0x11, 0x4, 0x5, 0x43, 0x7, 0x3c, 0x9, 0x32, 0x35}, + 76: [12]uint8{0x35, 0x36, 0x37, 0x11, 0x48, 0x46, 0x43, 0x7, 0x3c, 0x9, 0x33, 0x35}, + 77: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0x49}, + 78: [12]uint8{0x0, 0x1, 0x4a, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x28, 0xb}, + 79: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x4b, 0xb}, + 80: [12]uint8{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x4c, 0x4d, 0xb}, +} // Size: 996 bytes var symData = stringset.Set{ - Data: "" + // Size: 584 bytes - ".,;%+-E׉∞NaN:\u00a0\u200e%\u200e\u200e+\u200e-ليس\u00a0رقمًا٪ND·Терхьаш" + - "\u00a0дац'mnne×10^0/00INF−\u200e−ناعددepäluku’ՈչԹარ\u00a0არის\u00a0რიცხვ" + - "იсан\u00a0емес¤¤¤сан\u00a0эмесບໍ່\u200bແມ່ນ\u200bໂຕ\u200bເລກNSဂဏန်းမဟု" + - "တ်သောННне\u00a0числочыыһыла\u00a0буотах·10^–epilohosan\u00a0dälTFЕhaqi" + - "qiy\u00a0son\u00a0emasҳақиқий\u00a0сон\u00a0эмас非數值٫٬؛٪\u061c\u061c+" + - "\u061c-اس؉ليس\u00a0رقم\u200f−\u061c−؉\u200f\u200e+\u200e\u200e-\u200e×۱۰" + - "^\u200e٪\u200e−\u200e၊ཨང་མེན་གྲངས་མེདཨང་མད", - Index: []uint16{ // 74 elements + Data: "" + // Size: 599 bytes + ".,;%+-E׉∞NaN:\u00a0\u200e%\u200e\u200e+\u200e-ليس\u00a0رقمًا٪NDТерхьаш" + + "\u00a0дац·’mnne×10^0/00INF−\u200e−ناعددepälukuՈչԹარ\u00a0არის\u00a0რიცხვ" + + "იZMdMсан\u00a0емес¤¤¤сан\u00a0эмесບໍ່\u200bແມ່ນ\u200bໂຕ\u200bເລກNSဂဏန်" + + "းမဟုတ်သောННне\u00a0числочыыһыла\u00a0буотах·10^epilohosan\u00a0dälTFЕs" + + "on\u00a0emasҳақиқий\u00a0сон\u00a0эмас非數值非数值٫٬؛٪\u061c\u061c+\u061c-اس؉ل" + + "يس\u00a0رقم\u200f+\u200f-\u200f−٪\u200f\u061c−×۱۰^؉\u200f\u200e+\u200e" + + "\u200e-\u200e\u200e−\u200e+\u200e:၊ཨང་མེན་གྲངས་མེདཨང་མད", + Index: []uint16{ // 79 elements // Entry 0 - 3F 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0009, 0x000c, 0x000f, 0x0012, 0x0013, 0x0015, 0x001c, 0x0020, - 0x0024, 0x0036, 0x0038, 0x003a, 0x003c, 0x0052, 0x0053, 0x0056, - 0x0057, 0x005c, 0x0060, 0x0063, 0x0066, 0x006c, 0x0076, 0x007e, - 0x0081, 0x0087, 0x00af, 0x00bf, 0x00c5, 0x00d5, 0x0102, 0x0104, - 0x012b, 0x012f, 0x013f, 0x015b, 0x0160, 0x0163, 0x016a, 0x0173, - 0x0175, 0x0177, 0x0189, 0x01a9, 0x01b2, 0x01b4, 0x01b6, 0x01b8, - 0x01bc, 0x01bf, 0x01c2, 0x01c6, 0x01c8, 0x01d6, 0x01dc, 0x01e1, + 0x0024, 0x0036, 0x0038, 0x003a, 0x0050, 0x0052, 0x0055, 0x0058, + 0x0059, 0x005e, 0x0062, 0x0065, 0x0068, 0x006e, 0x0078, 0x0080, + 0x0086, 0x00ae, 0x00af, 0x00b2, 0x00c2, 0x00c8, 0x00d8, 0x0105, + 0x0107, 0x012e, 0x0132, 0x0142, 0x015e, 0x0163, 0x016a, 0x0173, + 0x0175, 0x0177, 0x0180, 0x01a0, 0x01a9, 0x01b2, 0x01b4, 0x01b6, + 0x01b8, 0x01bc, 0x01bf, 0x01c2, 0x01c6, 0x01c8, 0x01d6, 0x01da, // Entry 40 - 7F - 0x01e6, 0x01ed, 0x01f4, 0x01fb, 0x0200, 0x0209, 0x020c, 0x0221, - 0x0239, 0x0248, + 0x01de, 0x01e4, 0x01e9, 0x01ee, 0x01f5, 0x01fa, 0x0201, 0x0208, + 0x0211, 0x0215, 0x0218, 0x021b, 0x0230, 0x0248, 0x0257, }, -} // Size: 772 bytes +} // Size: 797 bytes // langToDefaults maps a compact language index to the default numbering system // and default symbol set -var langToDefaults = [752]uint8{ +var langToDefaults = [775]symOffset{ // Entry 0 - 3F - 0x80, 0x06, 0x13, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x83, 0x02, 0x02, 0x02, - 0x02, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, - 0x02, 0x04, 0x02, 0x04, 0x02, 0x02, 0x02, 0x03, - 0x02, 0x00, 0x85, 0x00, 0x00, 0x00, 0x86, 0x05, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, + 0x8000, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, 0x0000, + 0x0000, 0x0000, 0x8003, 0x0002, 0x0002, 0x0002, 0x0002, 0x0003, + 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, + 0x0003, 0x0003, 0x0003, 0x0003, 0x0002, 0x0002, 0x0002, 0x0004, + 0x0002, 0x0004, 0x0002, 0x0002, 0x0002, 0x0003, 0x0002, 0x0000, + 0x8005, 0x0000, 0x0000, 0x0000, 0x8006, 0x0005, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0000, 0x0000, 0x0000, // Entry 40 - 7F - 0x00, 0x00, 0x89, 0x00, 0x00, 0x8a, 0x00, 0x00, - 0x8c, 0x01, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x08, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x8e, 0x09, 0x09, 0x90, - 0x01, 0x01, 0x01, 0x93, 0x00, 0x0a, 0x0a, 0x0a, - 0x00, 0x00, 0x0b, 0x07, 0x0b, 0x0c, 0x0b, 0x0b, - 0x0c, 0x0b, 0x0d, 0x0d, 0x0b, 0x0b, 0x01, 0x01, - 0x00, 0x01, 0x01, 0x95, 0x00, 0x00, 0x00, 0x0e, + 0x8009, 0x0000, 0x0000, 0x800a, 0x0000, 0x0000, 0x800c, 0x0001, + 0x0000, 0x0000, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x800e, 0x0000, 0x0000, 0x0007, + 0x0007, 0x0000, 0x0000, 0x0000, 0x0000, 0x800f, 0x0008, 0x0008, + 0x8011, 0x0001, 0x0001, 0x0001, 0x803c, 0x0000, 0x0009, 0x0009, + 0x0009, 0x0000, 0x0000, 0x000a, 0x000b, 0x000a, 0x000c, 0x000a, + 0x000a, 0x000c, 0x000a, 0x000d, 0x000d, 0x000a, 0x000a, 0x0001, + 0x0001, 0x0000, 0x0001, 0x0001, 0x803f, 0x0000, 0x0000, 0x0000, // Entry 80 - BF - 0x0e, 0x0e, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x00, 0x0b, 0x10, 0x00, 0x06, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, - 0x00, 0x00, 0x00, 0x0b, 0x00, 0x0a, 0x00, 0x00, - 0x11, 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, + 0x000e, 0x000e, 0x000e, 0x000f, 0x000f, 0x000f, 0x0000, 0x0000, + 0x0006, 0x0000, 0x0000, 0x0000, 0x000a, 0x0010, 0x0000, 0x0006, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0011, 0x0000, 0x000a, + 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x0000, 0x0009, 0x0000, + 0x0000, 0x0012, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // Entry C0 - FF - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x14, 0x14, - 0x06, 0x00, 0x06, 0x06, 0x00, 0x06, 0x06, 0x01, - 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0013, 0x0000, + 0x0000, 0x000f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0000, 0x0015, + 0x0015, 0x0006, 0x0000, 0x0006, 0x0006, 0x0000, 0x0000, 0x0006, + 0x0006, 0x0001, 0x0000, 0x0000, 0x0006, 0x0006, 0x0006, 0x0006, // Entry 100 - 13F - 0x06, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, - 0x00, 0x00, 0x06, 0x06, 0x15, 0x15, 0x06, 0x06, - 0x01, 0x01, 0x97, 0x16, 0x16, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x17, 0x17, 0x00, 0x00, 0x18, 0x18, - 0x18, 0x9a, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x0d, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x0000, 0x0000, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, + 0x0000, 0x0006, 0x0000, 0x0000, 0x0006, 0x0006, 0x0016, 0x0016, + 0x0017, 0x0017, 0x0001, 0x0001, 0x8041, 0x0018, 0x0018, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0019, 0x0019, 0x0000, 0x0000, + 0x0017, 0x0017, 0x0017, 0x8044, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, // Entry 140 - 17F - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x9d, 0x00, - 0x06, 0x06, 0x19, 0x19, 0x19, 0x19, 0xa0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1a, 0x1a, 0x00, 0x00, 0x06, - 0x06, 0x06, 0x0b, 0x0b, 0x01, 0x01, 0x1b, 0x1b, - 0x0a, 0x0a, 0xa2, 0x00, 0x00, 0x00, 0x06, 0x06, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0006, 0x0006, 0x0006, 0x0006, 0x0000, 0x0000, + 0x8047, 0x0000, 0x0006, 0x0006, 0x001a, 0x001a, 0x001a, 0x001a, + 0x804a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x804c, 0x001b, 0x0000, + 0x0000, 0x0006, 0x0006, 0x0006, 0x000a, 0x000a, 0x0001, 0x0001, + 0x001c, 0x001c, 0x0009, 0x0009, 0x804f, 0x0000, 0x0000, 0x0000, // Entry 180 - 1BF - 0x06, 0x1c, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x06, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x0d, 0x0d, 0x00, 0x00, 0x1e, 0x1e, 0x06, - 0x06, 0x1f, 0x1f, 0x00, 0x00, 0x06, 0x06, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa5, 0x1a, - 0x00, 0x00, 0x01, 0x01, 0x20, 0x20, 0x00, 0x00, - 0x00, 0x21, 0x21, 0x00, 0x00, 0x06, 0x06, 0x00, + 0x0000, 0x0000, 0x8052, 0x0006, 0x0006, 0x001d, 0x0006, 0x0006, + 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x001e, 0x001e, 0x001f, + 0x001f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, + 0x0001, 0x000d, 0x000d, 0x0000, 0x0000, 0x0020, 0x0020, 0x0006, + 0x0006, 0x0021, 0x0021, 0x0000, 0x0000, 0x0006, 0x0006, 0x0000, + 0x0000, 0x8054, 0x0000, 0x0000, 0x0000, 0x0000, 0x8056, 0x001b, + 0x0000, 0x0000, 0x0001, 0x0001, 0x0022, 0x0022, 0x0000, 0x0000, // Entry 1C0 - 1FF - 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x22, 0x22, 0xa7, 0x00, 0x00, 0x15, 0x15, 0x06, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x23, 0x23, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0d, 0x0d, 0x00, 0x00, - 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, - 0x00, 0x00, 0xa9, 0x00, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x06, 0x06, 0xaa, 0x24, 0xac, 0x00, - 0x00, 0x00, 0x00, 0xad, 0x14, 0x14, 0x00, 0x00, + 0x0000, 0x0023, 0x0023, 0x0000, 0x0000, 0x0006, 0x0006, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0024, 0x0024, 0x8058, 0x0000, 0x0000, 0x0016, 0x0016, 0x0006, + 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0025, 0x0025, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x000d, 0x0000, 0x0000, + 0x0006, 0x0006, 0x0000, 0x0000, 0x0006, 0x0006, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x805a, 0x0000, 0x0000, 0x0006, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x805b, 0x0026, 0x805d, // Entry 200 - 23F - 0x06, 0x06, 0x06, 0xb0, 0x00, 0x00, 0xb1, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, - 0x14, 0x14, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x25, 0x25, 0x25, 0xb4, 0xb6, 0x1a, - 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0xb8, - 0x26, 0x06, 0x01, 0x06, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x06, + 0x0000, 0x0000, 0x0000, 0x0000, 0x805e, 0x0015, 0x0015, 0x0000, + 0x0000, 0x0006, 0x0006, 0x0006, 0x8061, 0x0000, 0x0000, 0x8062, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, + 0x0001, 0x0015, 0x0015, 0x0006, 0x0006, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0027, 0x0027, 0x0027, 0x8065, 0x8067, + 0x001b, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, + 0x8069, 0x0028, 0x0006, 0x0001, 0x0006, 0x0001, 0x0001, 0x0001, // Entry 240 - 27F - 0x00, 0x00, 0x19, 0x19, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x00, 0x00, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x06, 0x06, 0x00, 0x00, 0x28, 0x28, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x29, 0x29, - 0x29, 0x06, 0x06, 0x0d, 0x0d, 0x06, 0x06, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x2a, 0x2a, 0x2b, 0x2b, - 0x2c, 0x2c, 0x00, 0x00, 0x00, 0x2d, 0x2d, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, + 0x0006, 0x0000, 0x0000, 0x001a, 0x001a, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0000, 0x0000, 0x0029, 0x0029, 0x0029, 0x0029, + 0x0029, 0x0029, 0x0029, 0x0006, 0x0006, 0x0000, 0x0000, 0x002a, + 0x002a, 0x0000, 0x0000, 0x0000, 0x0000, 0x806b, 0x0000, 0x0000, + 0x002b, 0x002b, 0x002b, 0x002b, 0x0006, 0x0006, 0x000d, 0x000d, + 0x0006, 0x0006, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, + 0x002c, 0x002c, 0x002d, 0x002d, 0x002e, 0x002e, 0x0000, 0x0000, // Entry 280 - 2BF - 0x01, 0x01, 0x01, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, - 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x00, 0x00, - 0x00, 0xba, 0x20, 0x20, 0x20, 0x00, 0x06, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x2e, 0x2e, 0x00, 0x2f, 0x2f, - 0x06, 0x06, 0x06, 0x00, 0x0d, 0x0d, 0x01, 0x01, - 0x00, 0x00, 0x30, 0x30, 0xbd, 0xbf, 0x1a, 0xc0, + 0x0000, 0x002f, 0x002f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0006, 0x0006, 0x0000, 0x0000, 0x0000, 0x806d, 0x0022, 0x0022, + 0x0022, 0x0000, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0001, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0030, 0x0030, 0x0000, 0x0000, 0x8071, 0x0031, 0x0006, // Entry 2C0 - 2FF - 0xc2, 0x26, 0xc4, 0x32, 0x31, 0x31, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x33, 0x33, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x34, 0x34, 0x01, 0x01, 0xc6, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x34, 0x34, 0x34, 0x34, 0x00, 0x00, -} // Size: 752 bytes + 0x0006, 0x0006, 0x0000, 0x0001, 0x0001, 0x000d, 0x000d, 0x0001, + 0x0001, 0x0000, 0x0000, 0x0032, 0x0032, 0x8074, 0x8076, 0x001b, + 0x8077, 0x8079, 0x0028, 0x807b, 0x0034, 0x0033, 0x0033, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0035, 0x0035, 0x0006, 0x0006, + 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0036, 0x0037, 0x0037, 0x0036, 0x0036, 0x0001, + 0x0001, 0x807d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8080, + // Entry 300 - 33F + 0x0036, 0x0036, 0x0036, 0x0000, 0x0000, 0x0006, 0x0014, +} // Size: 1550 bytes // langToAlt is a list of numbering system and symbol set pairs, sorted and // marked by compact language index. -var langToAlt = []altSymData{ // 73 elements - 1: {compactTag: 0x0, system: 0x3, symIndex: 0x35}, - 2: {compactTag: 0x0, system: 0x4, symIndex: 0x3b}, - 3: {compactTag: 0xc, system: 0x3, symIndex: 0x36}, - 4: {compactTag: 0xc, system: 0x0, symIndex: 0x2}, - 5: {compactTag: 0x2a, system: 0x6, symIndex: 0x0}, - 6: {compactTag: 0x2e, system: 0x0, symIndex: 0x5}, - 7: {compactTag: 0x2e, system: 0x3, symIndex: 0x37}, - 8: {compactTag: 0x2e, system: 0x4, symIndex: 0x3b}, - 9: {compactTag: 0x42, system: 0x6, symIndex: 0x0}, - 10: {compactTag: 0x45, system: 0x0, symIndex: 0x0}, - 11: {compactTag: 0x45, system: 0x36, symIndex: 0x45}, - 12: {compactTag: 0x48, system: 0x0, symIndex: 0x1}, - 13: {compactTag: 0x48, system: 0x3, symIndex: 0x35}, - 14: {compactTag: 0x5c, system: 0x3, symIndex: 0x37}, - 15: {compactTag: 0x5c, system: 0x0, symIndex: 0x9}, - 16: {compactTag: 0x5f, system: 0x0, symIndex: 0x1}, - 17: {compactTag: 0x5f, system: 0x3, symIndex: 0x35}, - 18: {compactTag: 0x5f, system: 0x4, symIndex: 0x3b}, - 19: {compactTag: 0x63, system: 0x0, symIndex: 0x0}, - 20: {compactTag: 0x63, system: 0x3, symIndex: 0x35}, - 21: {compactTag: 0x7b, system: 0x36, symIndex: 0x46}, - 22: {compactTag: 0x7b, system: 0x0, symIndex: 0x0}, - 23: {compactTag: 0x112, system: 0x4, symIndex: 0x3c}, - 24: {compactTag: 0x112, system: 0x0, symIndex: 0x16}, - 25: {compactTag: 0x112, system: 0x3, symIndex: 0x37}, - 26: {compactTag: 0x121, system: 0x0, symIndex: 0x1}, - 27: {compactTag: 0x121, system: 0x3, symIndex: 0x38}, - 28: {compactTag: 0x121, system: 0x4, symIndex: 0x3d}, - 29: {compactTag: 0x156, system: 0x0, symIndex: 0x0}, - 30: {compactTag: 0x156, system: 0x3, symIndex: 0x37}, - 31: {compactTag: 0x156, system: 0x4, symIndex: 0x3b}, - 32: {compactTag: 0x15e, system: 0x0, symIndex: 0x0}, - 33: {compactTag: 0x15e, system: 0x3, symIndex: 0x35}, - 34: {compactTag: 0x17a, system: 0x0, symIndex: 0x0}, - 35: {compactTag: 0x17a, system: 0x3, symIndex: 0x35}, - 36: {compactTag: 0x17a, system: 0x4, symIndex: 0x3b}, - 37: {compactTag: 0x1ae, system: 0x4, symIndex: 0x3b}, - 38: {compactTag: 0x1ae, system: 0x0, symIndex: 0x1a}, - 39: {compactTag: 0x1ca, system: 0x4, symIndex: 0x3b}, - 40: {compactTag: 0x1ca, system: 0x0, symIndex: 0x0}, - 41: {compactTag: 0x1ea, system: 0xb, symIndex: 0x0}, - 42: {compactTag: 0x1f4, system: 0x23, symIndex: 0x44}, - 43: {compactTag: 0x1f4, system: 0x0, symIndex: 0x24}, - 44: {compactTag: 0x1f6, system: 0x4, symIndex: 0x3b}, - 45: {compactTag: 0x1fb, system: 0x0, symIndex: 0x14}, - 46: {compactTag: 0x1fb, system: 0x3, symIndex: 0x39}, - 47: {compactTag: 0x1fb, system: 0x4, symIndex: 0x3e}, - 48: {compactTag: 0x203, system: 0xb, symIndex: 0x0}, - 49: {compactTag: 0x206, system: 0x0, symIndex: 0x6}, - 50: {compactTag: 0x206, system: 0x3, symIndex: 0x35}, - 51: {compactTag: 0x206, system: 0x4, symIndex: 0x3b}, - 52: {compactTag: 0x225, system: 0x0, symIndex: 0x0}, - 53: {compactTag: 0x225, system: 0x4, symIndex: 0x3f}, - 54: {compactTag: 0x226, system: 0x4, symIndex: 0x3b}, - 55: {compactTag: 0x226, system: 0x0, symIndex: 0x1a}, - 56: {compactTag: 0x22f, system: 0x4, symIndex: 0x3b}, - 57: {compactTag: 0x22f, system: 0x0, symIndex: 0x26}, - 58: {compactTag: 0x291, system: 0x0, symIndex: 0x20}, - 59: {compactTag: 0x291, system: 0x3, symIndex: 0x3a}, - 60: {compactTag: 0x291, system: 0x4, symIndex: 0x40}, - 61: {compactTag: 0x2bc, system: 0x0, symIndex: 0x1a}, - 62: {compactTag: 0x2bc, system: 0x4, symIndex: 0x41}, - 63: {compactTag: 0x2bd, system: 0x4, symIndex: 0x41}, - 64: {compactTag: 0x2bf, system: 0x0, symIndex: 0x31}, - 65: {compactTag: 0x2bf, system: 0x4, symIndex: 0x42}, - 66: {compactTag: 0x2c0, system: 0x4, symIndex: 0x3b}, - 67: {compactTag: 0x2c0, system: 0x0, symIndex: 0x26}, - 68: {compactTag: 0x2c2, system: 0x0, symIndex: 0x32}, - 69: {compactTag: 0x2c2, system: 0x4, symIndex: 0x43}, - 70: {compactTag: 0x2e4, system: 0x0, symIndex: 0x0}, - 71: {compactTag: 0x2e4, system: 0x3, symIndex: 0x35}, - 72: {compactTag: 0x2e4, system: 0x4, symIndex: 0x3b}, -} // Size: 316 bytes +var langToAlt = []altSymData{ // 131 elements + 1: {compactTag: 0x0, symIndex: 0x38, system: 0x3}, + 2: {compactTag: 0x0, symIndex: 0x42, system: 0x4}, + 3: {compactTag: 0xa, symIndex: 0x39, system: 0x3}, + 4: {compactTag: 0xa, symIndex: 0x2, system: 0x0}, + 5: {compactTag: 0x28, symIndex: 0x0, system: 0x6}, + 6: {compactTag: 0x2c, symIndex: 0x5, system: 0x0}, + 7: {compactTag: 0x2c, symIndex: 0x3a, system: 0x3}, + 8: {compactTag: 0x2c, symIndex: 0x42, system: 0x4}, + 9: {compactTag: 0x40, symIndex: 0x0, system: 0x6}, + 10: {compactTag: 0x43, symIndex: 0x0, system: 0x0}, + 11: {compactTag: 0x43, symIndex: 0x4f, system: 0x37}, + 12: {compactTag: 0x46, symIndex: 0x1, system: 0x0}, + 13: {compactTag: 0x46, symIndex: 0x38, system: 0x3}, + 14: {compactTag: 0x54, symIndex: 0x0, system: 0x9}, + 15: {compactTag: 0x5d, symIndex: 0x3a, system: 0x3}, + 16: {compactTag: 0x5d, symIndex: 0x8, system: 0x0}, + 17: {compactTag: 0x60, symIndex: 0x1, system: 0x0}, + 18: {compactTag: 0x60, symIndex: 0x38, system: 0x3}, + 19: {compactTag: 0x60, symIndex: 0x42, system: 0x4}, + 20: {compactTag: 0x60, symIndex: 0x0, system: 0x5}, + 21: {compactTag: 0x60, symIndex: 0x0, system: 0x6}, + 22: {compactTag: 0x60, symIndex: 0x0, system: 0x8}, + 23: {compactTag: 0x60, symIndex: 0x0, system: 0x9}, + 24: {compactTag: 0x60, symIndex: 0x0, system: 0xa}, + 25: {compactTag: 0x60, symIndex: 0x0, system: 0xb}, + 26: {compactTag: 0x60, symIndex: 0x0, system: 0xc}, + 27: {compactTag: 0x60, symIndex: 0x0, system: 0xd}, + 28: {compactTag: 0x60, symIndex: 0x0, system: 0xe}, + 29: {compactTag: 0x60, symIndex: 0x0, system: 0xf}, + 30: {compactTag: 0x60, symIndex: 0x0, system: 0x11}, + 31: {compactTag: 0x60, symIndex: 0x0, system: 0x12}, + 32: {compactTag: 0x60, symIndex: 0x0, system: 0x13}, + 33: {compactTag: 0x60, symIndex: 0x0, system: 0x14}, + 34: {compactTag: 0x60, symIndex: 0x0, system: 0x15}, + 35: {compactTag: 0x60, symIndex: 0x0, system: 0x16}, + 36: {compactTag: 0x60, symIndex: 0x0, system: 0x17}, + 37: {compactTag: 0x60, symIndex: 0x0, system: 0x18}, + 38: {compactTag: 0x60, symIndex: 0x0, system: 0x19}, + 39: {compactTag: 0x60, symIndex: 0x0, system: 0x1f}, + 40: {compactTag: 0x60, symIndex: 0x0, system: 0x21}, + 41: {compactTag: 0x60, symIndex: 0x0, system: 0x23}, + 42: {compactTag: 0x60, symIndex: 0x0, system: 0x24}, + 43: {compactTag: 0x60, symIndex: 0x0, system: 0x25}, + 44: {compactTag: 0x60, symIndex: 0x0, system: 0x28}, + 45: {compactTag: 0x60, symIndex: 0x0, system: 0x29}, + 46: {compactTag: 0x60, symIndex: 0x0, system: 0x2a}, + 47: {compactTag: 0x60, symIndex: 0x0, system: 0x2b}, + 48: {compactTag: 0x60, symIndex: 0x0, system: 0x2c}, + 49: {compactTag: 0x60, symIndex: 0x0, system: 0x2d}, + 50: {compactTag: 0x60, symIndex: 0x0, system: 0x30}, + 51: {compactTag: 0x60, symIndex: 0x0, system: 0x31}, + 52: {compactTag: 0x60, symIndex: 0x0, system: 0x32}, + 53: {compactTag: 0x60, symIndex: 0x0, system: 0x33}, + 54: {compactTag: 0x60, symIndex: 0x0, system: 0x34}, + 55: {compactTag: 0x60, symIndex: 0x0, system: 0x35}, + 56: {compactTag: 0x60, symIndex: 0x0, system: 0x36}, + 57: {compactTag: 0x60, symIndex: 0x0, system: 0x37}, + 58: {compactTag: 0x60, symIndex: 0x0, system: 0x39}, + 59: {compactTag: 0x60, symIndex: 0x0, system: 0x43}, + 60: {compactTag: 0x64, symIndex: 0x0, system: 0x0}, + 61: {compactTag: 0x64, symIndex: 0x38, system: 0x3}, + 62: {compactTag: 0x64, symIndex: 0x42, system: 0x4}, + 63: {compactTag: 0x7c, symIndex: 0x50, system: 0x37}, + 64: {compactTag: 0x7c, symIndex: 0x0, system: 0x0}, + 65: {compactTag: 0x114, symIndex: 0x43, system: 0x4}, + 66: {compactTag: 0x114, symIndex: 0x18, system: 0x0}, + 67: {compactTag: 0x114, symIndex: 0x3b, system: 0x3}, + 68: {compactTag: 0x123, symIndex: 0x1, system: 0x0}, + 69: {compactTag: 0x123, symIndex: 0x3c, system: 0x3}, + 70: {compactTag: 0x123, symIndex: 0x44, system: 0x4}, + 71: {compactTag: 0x158, symIndex: 0x0, system: 0x0}, + 72: {compactTag: 0x158, symIndex: 0x3b, system: 0x3}, + 73: {compactTag: 0x158, symIndex: 0x45, system: 0x4}, + 74: {compactTag: 0x160, symIndex: 0x0, system: 0x0}, + 75: {compactTag: 0x160, symIndex: 0x38, system: 0x3}, + 76: {compactTag: 0x16d, symIndex: 0x1b, system: 0x0}, + 77: {compactTag: 0x16d, symIndex: 0x0, system: 0x9}, + 78: {compactTag: 0x16d, symIndex: 0x0, system: 0xa}, + 79: {compactTag: 0x17c, symIndex: 0x0, system: 0x0}, + 80: {compactTag: 0x17c, symIndex: 0x3d, system: 0x3}, + 81: {compactTag: 0x17c, symIndex: 0x42, system: 0x4}, + 82: {compactTag: 0x182, symIndex: 0x6, system: 0x0}, + 83: {compactTag: 0x182, symIndex: 0x38, system: 0x3}, + 84: {compactTag: 0x1b1, symIndex: 0x0, system: 0x0}, + 85: {compactTag: 0x1b1, symIndex: 0x3e, system: 0x3}, + 86: {compactTag: 0x1b6, symIndex: 0x42, system: 0x4}, + 87: {compactTag: 0x1b6, symIndex: 0x1b, system: 0x0}, + 88: {compactTag: 0x1d2, symIndex: 0x42, system: 0x4}, + 89: {compactTag: 0x1d2, symIndex: 0x0, system: 0x0}, + 90: {compactTag: 0x1f3, symIndex: 0x0, system: 0xb}, + 91: {compactTag: 0x1fd, symIndex: 0x4e, system: 0x24}, + 92: {compactTag: 0x1fd, symIndex: 0x26, system: 0x0}, + 93: {compactTag: 0x1ff, symIndex: 0x42, system: 0x4}, + 94: {compactTag: 0x204, symIndex: 0x15, system: 0x0}, + 95: {compactTag: 0x204, symIndex: 0x3f, system: 0x3}, + 96: {compactTag: 0x204, symIndex: 0x46, system: 0x4}, + 97: {compactTag: 0x20c, symIndex: 0x0, system: 0xb}, + 98: {compactTag: 0x20f, symIndex: 0x6, system: 0x0}, + 99: {compactTag: 0x20f, symIndex: 0x38, system: 0x3}, + 100: {compactTag: 0x20f, symIndex: 0x42, system: 0x4}, + 101: {compactTag: 0x22e, symIndex: 0x0, system: 0x0}, + 102: {compactTag: 0x22e, symIndex: 0x47, system: 0x4}, + 103: {compactTag: 0x22f, symIndex: 0x42, system: 0x4}, + 104: {compactTag: 0x22f, symIndex: 0x1b, system: 0x0}, + 105: {compactTag: 0x238, symIndex: 0x42, system: 0x4}, + 106: {compactTag: 0x238, symIndex: 0x28, system: 0x0}, + 107: {compactTag: 0x265, symIndex: 0x38, system: 0x3}, + 108: {compactTag: 0x265, symIndex: 0x0, system: 0x0}, + 109: {compactTag: 0x29d, symIndex: 0x22, system: 0x0}, + 110: {compactTag: 0x29d, symIndex: 0x40, system: 0x3}, + 111: {compactTag: 0x29d, symIndex: 0x48, system: 0x4}, + 112: {compactTag: 0x29d, symIndex: 0x4d, system: 0xc}, + 113: {compactTag: 0x2bd, symIndex: 0x31, system: 0x0}, + 114: {compactTag: 0x2bd, symIndex: 0x3e, system: 0x3}, + 115: {compactTag: 0x2bd, symIndex: 0x42, system: 0x4}, + 116: {compactTag: 0x2cd, symIndex: 0x1b, system: 0x0}, + 117: {compactTag: 0x2cd, symIndex: 0x49, system: 0x4}, + 118: {compactTag: 0x2ce, symIndex: 0x49, system: 0x4}, + 119: {compactTag: 0x2d0, symIndex: 0x33, system: 0x0}, + 120: {compactTag: 0x2d0, symIndex: 0x4a, system: 0x4}, + 121: {compactTag: 0x2d1, symIndex: 0x42, system: 0x4}, + 122: {compactTag: 0x2d1, symIndex: 0x28, system: 0x0}, + 123: {compactTag: 0x2d3, symIndex: 0x34, system: 0x0}, + 124: {compactTag: 0x2d3, symIndex: 0x4b, system: 0x4}, + 125: {compactTag: 0x2f9, symIndex: 0x0, system: 0x0}, + 126: {compactTag: 0x2f9, symIndex: 0x38, system: 0x3}, + 127: {compactTag: 0x2f9, symIndex: 0x42, system: 0x4}, + 128: {compactTag: 0x2ff, symIndex: 0x36, system: 0x0}, + 129: {compactTag: 0x2ff, symIndex: 0x41, system: 0x3}, + 130: {compactTag: 0x2ff, symIndex: 0x4c, system: 0x4}, +} // Size: 810 bytes -var tagToDecimal = []uint8{ // 752 elements +var tagToDecimal = []uint8{ // 775 elements // Entry 0 - 3F - 0x01, 0x01, 0x08, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // Entry 40 - 7F - 0x01, 0x01, 0x05, 0x05, 0x05, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x05, 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x05, 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x05, 0x05, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x05, 0x05, 0x01, 0x01, // Entry 80 - BF 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, @@ -542,7 +617,7 @@ var tagToDecimal = []uint8{ // 752 elements 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // Entry C0 - FF 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, @@ -566,10 +641,10 @@ var tagToDecimal = []uint8{ // 752 elements 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x05, 0x05, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x05, + 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // Entry 180 - 1BF 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, @@ -577,26 +652,26 @@ var tagToDecimal = []uint8{ // 752 elements 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x05, 0x05, 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x05, 0x05, 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // Entry 1C0 - 1FF 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x05, 0x05, - 0x01, 0x01, 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x05, 0x05, + 0x01, 0x01, 0x01, 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // Entry 200 - 23F 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x05, 0x05, 0x01, 0x01, 0x01, 0x05, 0x01, 0x01, - 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x05, 0x05, 0x01, 0x01, 0x01, 0x05, 0x01, + 0x01, 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // Entry 240 - 27F 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, @@ -611,9 +686,9 @@ var tagToDecimal = []uint8{ // 752 elements 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x05, 0x05, 0x05, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x05, + 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // Entry 2C0 - 2FF @@ -623,11 +698,15 @@ var tagToDecimal = []uint8{ // 752 elements 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -} // Size: 776 bytes + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + // Entry 300 - 33F + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x08, +} // Size: 799 bytes -var tagToScientific = []uint8{ // 752 elements +var tagToScientific = []uint8{ // 775 elements // Entry 0 - 3F - 0x02, 0x02, 0x09, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, @@ -675,10 +754,10 @@ var tagToScientific = []uint8{ // 752 elements 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0d, 0x0d, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x0d, 0x0d, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x0c, 0x0c, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0c, + 0x0c, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, // Entry 180 - 1BF 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, @@ -691,21 +770,21 @@ var tagToScientific = []uint8{ // 752 elements 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, // Entry 1C0 - 1FF 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x0e, 0x0e, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x0d, 0x0d, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x0d, 0x0d, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x0c, 0x0c, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, // Entry 200 - 23F 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x0d, 0x02, 0x02, - 0x0d, 0x0d, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0c, 0x02, + 0x02, 0x0c, 0x0c, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, // Entry 240 - 27F 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, @@ -713,9 +792,9 @@ var tagToScientific = []uint8{ // 752 elements 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x0e, 0x0e, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x0d, 0x0d, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, // Entry 280 - 2BF 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, @@ -732,73 +811,78 @@ var tagToScientific = []uint8{ // 752 elements 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, -} // Size: 776 bytes + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + // Entry 300 - 33F + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x09, +} // Size: 799 bytes -var tagToPercent = []uint8{ // 752 elements +var tagToPercent = []uint8{ // 775 elements // Entry 0 - 3F - 0x04, 0x04, 0x0a, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x06, 0x06, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, - 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x06, 0x06, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, // Entry 40 - 7F - 0x04, 0x04, 0x06, 0x06, 0x06, 0x04, 0x04, 0x04, - 0x03, 0x03, 0x06, 0x06, 0x03, 0x04, 0x04, 0x03, - 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, - 0x03, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, - 0x04, 0x04, 0x03, 0x03, 0x03, 0x04, 0x03, 0x03, - 0x04, 0x03, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, - 0x04, 0x04, 0x04, 0x07, 0x07, 0x04, 0x04, 0x04, + 0x06, 0x06, 0x06, 0x04, 0x04, 0x04, 0x03, 0x03, + 0x06, 0x06, 0x03, 0x04, 0x04, 0x03, 0x03, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x06, 0x06, 0x06, 0x03, + 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, + 0x03, 0x04, 0x04, 0x03, 0x03, 0x03, 0x04, 0x03, + 0x03, 0x04, 0x03, 0x04, 0x04, 0x03, 0x03, 0x03, + 0x03, 0x04, 0x04, 0x04, 0x07, 0x07, 0x04, 0x04, // Entry 80 - BF 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x03, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x03, 0x04, 0x03, 0x04, 0x04, - 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x03, 0x04, 0x03, 0x04, + 0x04, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x06, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x06, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, // Entry C0 - FF 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x03, - 0x03, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, // Entry 100 - 13F - 0x03, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x0b, 0x0b, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x03, 0x03, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x04, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, + 0x0b, 0x0b, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x04, 0x04, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, // Entry 140 - 17F 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x06, 0x06, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x06, + 0x06, 0x04, 0x04, 0x04, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x06, 0x06, + // Entry 180 - 1BF 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x06, 0x06, 0x04, - 0x04, 0x04, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - // Entry 180 - 1BF 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x06, 0x06, 0x06, 0x06, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x04, // Entry 1C0 - 1FF + 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, @@ -806,314 +890,330 @@ var tagToPercent = []uint8{ // 752 elements 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x04, 0x04, // Entry 200 - 23F + 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x06, 0x06, 0x04, 0x04, 0x04, 0x06, 0x04, 0x04, - 0x06, 0x06, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x06, 0x06, 0x04, 0x04, 0x04, 0x06, 0x04, + 0x04, 0x06, 0x06, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, // Entry 240 - 27F + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, - 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, - 0x03, 0x03, 0x04, 0x04, 0x04, 0x03, 0x03, 0x04, + 0x03, 0x03, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, // Entry 280 - 2BF + 0x04, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x06, 0x06, 0x06, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, + 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x06, + 0x06, 0x06, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x03, 0x03, 0x04, 0x04, 0x04, - 0x0f, 0x0f, 0x0f, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x06, 0x06, 0x06, 0x04, + 0x04, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x0e, // Entry 2C0 - 2FF + 0x0e, 0x0e, 0x04, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, -} // Size: 776 bytes + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, + 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + // Entry 300 - 33F + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x0a, +} // Size: 799 bytes -var formats = []Pattern{Pattern{Affix: "", - Offset: 0x0, - NegOffset: 0x0, - Multiplier: 0x0, - RoundIncrement: 0x0, - PadRune: 0, - FormatWidth: 0x0, - GroupingSize: [2]uint8{0x0, - 0x0}, - Flags: 0x0, +var formats = []Pattern{Pattern{RoundingContext: RoundingContext{MaxSignificantDigits: 0, + MaxFractionDigits: 0, + Increment: 0x0, + IncrementScale: 0x0, + Mode: 0x0, + DigitShift: 0x0, MinIntegerDigits: 0x0, MaxIntegerDigits: 0x0, MinFractionDigits: 0x0, - MaxFractionDigits: 0x0, MinSignificantDigits: 0x0, - MaxSignificantDigits: 0x0, MinExponentDigits: 0x0}, - Pattern{Affix: "", - Offset: 0x0, - NegOffset: 0x0, - Multiplier: 0x0, - RoundIncrement: 0x0, - PadRune: 0, - FormatWidth: 0x9, - GroupingSize: [2]uint8{0x3, - 0x0}, - Flags: 0x0, + Affix: "", + Offset: 0x0, + NegOffset: 0x0, + PadRune: 0, + FormatWidth: 0x0, + GroupingSize: [2]uint8{0x0, + 0x0}, + Flags: 0x0}, + Pattern{RoundingContext: RoundingContext{MaxSignificantDigits: 0, + MaxFractionDigits: 3, + Increment: 0x0, + IncrementScale: 0x0, + Mode: 0x0, + DigitShift: 0x0, MinIntegerDigits: 0x1, MaxIntegerDigits: 0x0, MinFractionDigits: 0x0, - MaxFractionDigits: 0x3, MinSignificantDigits: 0x0, - MaxSignificantDigits: 0x0, MinExponentDigits: 0x0}, - Pattern{Affix: "", - Offset: 0x0, - NegOffset: 0x0, - Multiplier: 0x0, - RoundIncrement: 0x0, - PadRune: 0, - FormatWidth: 0x3, - GroupingSize: [2]uint8{0x0, + Affix: "", + Offset: 0x0, + NegOffset: 0x0, + PadRune: 0, + FormatWidth: 0x9, + GroupingSize: [2]uint8{0x3, 0x0}, - Flags: 0x0, + Flags: 0x0}, + Pattern{RoundingContext: RoundingContext{MaxSignificantDigits: 0, + MaxFractionDigits: 0, + Increment: 0x0, + IncrementScale: 0x0, + Mode: 0x0, + DigitShift: 0x0, MinIntegerDigits: 0x0, MaxIntegerDigits: 0x1, MinFractionDigits: 0x0, - MaxFractionDigits: 0x0, MinSignificantDigits: 0x0, - MaxSignificantDigits: 0x0, MinExponentDigits: 0x1}, - Pattern{Affix: "\x00\x03\u00a0%", - Offset: 0x0, - NegOffset: 0x0, - Multiplier: 0x64, - RoundIncrement: 0x0, - PadRune: 0, - FormatWidth: 0x7, - GroupingSize: [2]uint8{0x3, + Affix: "", + Offset: 0x0, + NegOffset: 0x0, + PadRune: 0, + FormatWidth: 0x3, + GroupingSize: [2]uint8{0x0, 0x0}, - Flags: 0x0, + Flags: 0x0}, + Pattern{RoundingContext: RoundingContext{MaxSignificantDigits: 0, + MaxFractionDigits: 0, + Increment: 0x0, + IncrementScale: 0x0, + Mode: 0x0, + DigitShift: 0x2, MinIntegerDigits: 0x1, MaxIntegerDigits: 0x0, MinFractionDigits: 0x0, - MaxFractionDigits: 0x0, MinSignificantDigits: 0x0, - MaxSignificantDigits: 0x0, MinExponentDigits: 0x0}, - Pattern{Affix: "\x00\x01%", - Offset: 0x0, - NegOffset: 0x0, - Multiplier: 0x64, - RoundIncrement: 0x0, - PadRune: 0, - FormatWidth: 0x6, + Affix: "\x00\x03\u00a0%", + Offset: 0x0, + NegOffset: 0x0, + PadRune: 0, + FormatWidth: 0x7, GroupingSize: [2]uint8{0x3, 0x0}, - Flags: 0x0, + Flags: 0x0}, + Pattern{RoundingContext: RoundingContext{MaxSignificantDigits: 0, + MaxFractionDigits: 0, + Increment: 0x0, + IncrementScale: 0x0, + Mode: 0x0, + DigitShift: 0x2, MinIntegerDigits: 0x1, MaxIntegerDigits: 0x0, MinFractionDigits: 0x0, - MaxFractionDigits: 0x0, MinSignificantDigits: 0x0, - MaxSignificantDigits: 0x0, MinExponentDigits: 0x0}, - Pattern{Affix: "", - Offset: 0x0, - NegOffset: 0x0, - Multiplier: 0x0, - RoundIncrement: 0x0, - PadRune: 0, - FormatWidth: 0xc, + Affix: "\x00\x01%", + Offset: 0x0, + NegOffset: 0x0, + PadRune: 0, + FormatWidth: 0x6, GroupingSize: [2]uint8{0x3, - 0x2}, - Flags: 0x0, + 0x0}, + Flags: 0x0}, + Pattern{RoundingContext: RoundingContext{MaxSignificantDigits: 0, + MaxFractionDigits: 3, + Increment: 0x0, + IncrementScale: 0x0, + Mode: 0x0, + DigitShift: 0x0, MinIntegerDigits: 0x1, MaxIntegerDigits: 0x0, MinFractionDigits: 0x0, - MaxFractionDigits: 0x3, MinSignificantDigits: 0x0, - MaxSignificantDigits: 0x0, MinExponentDigits: 0x0}, - Pattern{Affix: "\x00\x01%", - Offset: 0x0, - NegOffset: 0x0, - Multiplier: 0x64, - RoundIncrement: 0x0, - PadRune: 0, - FormatWidth: 0x9, + Affix: "", + Offset: 0x0, + NegOffset: 0x0, + PadRune: 0, + FormatWidth: 0xc, GroupingSize: [2]uint8{0x3, 0x2}, - Flags: 0x0, + Flags: 0x0}, + Pattern{RoundingContext: RoundingContext{MaxSignificantDigits: 0, + MaxFractionDigits: 0, + Increment: 0x0, + IncrementScale: 0x0, + Mode: 0x0, + DigitShift: 0x2, MinIntegerDigits: 0x1, MaxIntegerDigits: 0x0, MinFractionDigits: 0x0, - MaxFractionDigits: 0x0, MinSignificantDigits: 0x0, - MaxSignificantDigits: 0x0, MinExponentDigits: 0x0}, - Pattern{Affix: "\x00\x03\u00a0%", - Offset: 0x0, - NegOffset: 0x0, - Multiplier: 0x64, - RoundIncrement: 0x0, - PadRune: 0, - FormatWidth: 0xa, + Affix: "\x00\x01%", + Offset: 0x0, + NegOffset: 0x0, + PadRune: 0, + FormatWidth: 0x9, GroupingSize: [2]uint8{0x3, 0x2}, - Flags: 0x0, + Flags: 0x0}, + Pattern{RoundingContext: RoundingContext{MaxSignificantDigits: 0, + MaxFractionDigits: 0, + Increment: 0x0, + IncrementScale: 0x0, + Mode: 0x0, + DigitShift: 0x2, MinIntegerDigits: 0x1, MaxIntegerDigits: 0x0, MinFractionDigits: 0x0, - MaxFractionDigits: 0x0, MinSignificantDigits: 0x0, - MaxSignificantDigits: 0x0, MinExponentDigits: 0x0}, - Pattern{Affix: "", - Offset: 0x0, - NegOffset: 0x0, - Multiplier: 0x0, - RoundIncrement: 0x0, - PadRune: 0, - FormatWidth: 0x9, - GroupingSize: [2]uint8{0x0, - 0x0}, - Flags: 0x0, + Affix: "\x00\x03\u00a0%", + Offset: 0x0, + NegOffset: 0x0, + PadRune: 0, + FormatWidth: 0xa, + GroupingSize: [2]uint8{0x3, + 0x2}, + Flags: 0x0}, + Pattern{RoundingContext: RoundingContext{MaxSignificantDigits: 0, + MaxFractionDigits: 6, + Increment: 0x0, + IncrementScale: 0x0, + Mode: 0x0, + DigitShift: 0x0, MinIntegerDigits: 0x1, MaxIntegerDigits: 0x0, MinFractionDigits: 0x0, - MaxFractionDigits: 0x6, MinSignificantDigits: 0x0, - MaxSignificantDigits: 0x0, MinExponentDigits: 0x0}, - Pattern{Affix: "", - Offset: 0x0, - NegOffset: 0x0, - Multiplier: 0x0, - RoundIncrement: 0x0, - PadRune: 0, - FormatWidth: 0xd, + Affix: "", + Offset: 0x0, + NegOffset: 0x0, + PadRune: 0, + FormatWidth: 0x8, GroupingSize: [2]uint8{0x0, 0x0}, - Flags: 0x2, + Flags: 0x0}, + Pattern{RoundingContext: RoundingContext{MaxSignificantDigits: 0, + MaxFractionDigits: 6, + Increment: 0x0, + IncrementScale: 0x0, + Mode: 0x0, + DigitShift: 0x0, MinIntegerDigits: 0x1, MaxIntegerDigits: 0x0, MinFractionDigits: 0x6, - MaxFractionDigits: 0x6, MinSignificantDigits: 0x0, - MaxSignificantDigits: 0x0, MinExponentDigits: 0x3}, - Pattern{Affix: "\x00\x01%", - Offset: 0x0, - NegOffset: 0x0, - Multiplier: 0x64, - RoundIncrement: 0x0, - PadRune: 0, - FormatWidth: 0x3, + Affix: "", + Offset: 0x0, + NegOffset: 0x0, + PadRune: 0, + FormatWidth: 0xd, GroupingSize: [2]uint8{0x0, 0x0}, - Flags: 0x0, + Flags: 0x4}, + Pattern{RoundingContext: RoundingContext{MaxSignificantDigits: 0, + MaxFractionDigits: 0, + Increment: 0x0, + IncrementScale: 0x0, + Mode: 0x0, + DigitShift: 0x2, MinIntegerDigits: 0x1, MaxIntegerDigits: 0x0, MinFractionDigits: 0x0, - MaxFractionDigits: 0x0, MinSignificantDigits: 0x0, - MaxSignificantDigits: 0x0, MinExponentDigits: 0x0}, - Pattern{Affix: "\x03%\u00a0\x00", - Offset: 0x0, - NegOffset: 0x0, - Multiplier: 0x64, - RoundIncrement: 0x0, - PadRune: 0, - FormatWidth: 0x7, + Affix: "\x00\x01%", + Offset: 0x0, + NegOffset: 0x0, + PadRune: 0, + FormatWidth: 0x2, GroupingSize: [2]uint8{0x0, 0x0}, - Flags: 0x0, + Flags: 0x0}, + Pattern{RoundingContext: RoundingContext{MaxSignificantDigits: 0, + MaxFractionDigits: 0, + Increment: 0x0, + IncrementScale: 0x0, + Mode: 0x0, + DigitShift: 0x2, MinIntegerDigits: 0x1, MaxIntegerDigits: 0x0, MinFractionDigits: 0x0, - MaxFractionDigits: 0x0, MinSignificantDigits: 0x0, - MaxSignificantDigits: 0x0, MinExponentDigits: 0x0}, - Pattern{Affix: "\x03%\u00a0\x00\x04%\u00a0-\x00", - Offset: 0x0, - NegOffset: 0x5, - Multiplier: 0x64, - RoundIncrement: 0x0, - PadRune: 0, - FormatWidth: 0x7, + Affix: "\x03%\u00a0\x00", + Offset: 0x0, + NegOffset: 0x0, + PadRune: 0, + FormatWidth: 0x7, GroupingSize: [2]uint8{0x3, 0x0}, - Flags: 0x0, - MinIntegerDigits: 0x1, - MaxIntegerDigits: 0x0, - MinFractionDigits: 0x0, - MaxFractionDigits: 0x0, - MinSignificantDigits: 0x0, - MaxSignificantDigits: 0x0, - MinExponentDigits: 0x0}, - Pattern{Affix: "\x01[\x01]", - Offset: 0x0, - NegOffset: 0x0, - Multiplier: 0x0, - RoundIncrement: 0x0, - PadRune: 0, - FormatWidth: 0x5, - GroupingSize: [2]uint8{0x0, - 0x0}, - Flags: 0x0, + Flags: 0x0}, + Pattern{RoundingContext: RoundingContext{MaxSignificantDigits: 0, + MaxFractionDigits: 0, + Increment: 0x0, + IncrementScale: 0x0, + Mode: 0x0, + DigitShift: 0x0, MinIntegerDigits: 0x0, MaxIntegerDigits: 0x1, MinFractionDigits: 0x0, - MaxFractionDigits: 0x0, MinSignificantDigits: 0x0, - MaxSignificantDigits: 0x0, MinExponentDigits: 0x1}, - Pattern{Affix: "", - Offset: 0x0, - NegOffset: 0x0, - Multiplier: 0x0, - RoundIncrement: 0x0, - PadRune: 0, - FormatWidth: 0x1, + Affix: "\x01[\x01]", + Offset: 0x0, + NegOffset: 0x0, + PadRune: 0, + FormatWidth: 0x5, GroupingSize: [2]uint8{0x0, 0x0}, - Flags: 0x0, + Flags: 0x0}, + Pattern{RoundingContext: RoundingContext{MaxSignificantDigits: 0, + MaxFractionDigits: 0, + Increment: 0x0, + IncrementScale: 0x0, + Mode: 0x0, + DigitShift: 0x0, MinIntegerDigits: 0x0, MaxIntegerDigits: 0x0, MinFractionDigits: 0x0, - MaxFractionDigits: 0x0, MinSignificantDigits: 0x0, - MaxSignificantDigits: 0x0, MinExponentDigits: 0x0}, - Pattern{Affix: "\x01%\x00", - Offset: 0x0, - NegOffset: 0x0, - Multiplier: 0x64, - RoundIncrement: 0x0, - PadRune: 0, - FormatWidth: 0x6, + Affix: "", + Offset: 0x0, + NegOffset: 0x0, + PadRune: 0, + FormatWidth: 0x1, GroupingSize: [2]uint8{0x0, 0x0}, - Flags: 0x0, + Flags: 0x0}, + Pattern{RoundingContext: RoundingContext{MaxSignificantDigits: 0, + MaxFractionDigits: 0, + Increment: 0x0, + IncrementScale: 0x0, + Mode: 0x0, + DigitShift: 0x2, MinIntegerDigits: 0x1, MaxIntegerDigits: 0x0, MinFractionDigits: 0x0, - MaxFractionDigits: 0x0, MinSignificantDigits: 0x0, - MaxSignificantDigits: 0x0, - MinExponentDigits: 0x0}} + MinExponentDigits: 0x0}, + Affix: "\x01%\x00", + Offset: 0x0, + NegOffset: 0x0, + PadRune: 0, + FormatWidth: 0x6, + GroupingSize: [2]uint8{0x3, + 0x0}, + Flags: 0x0}} -// Total table size 7101 bytes (6KiB); checksum: A4A81DF0 +// Total table size 8634 bytes (8KiB); checksum: BE6D4A33 diff --git a/vendor/golang.org/x/text/internal/number/tables_test.go b/vendor/golang.org/x/text/internal/number/tables_test.go index 054e23d..f1e542a 100644 --- a/vendor/golang.org/x/text/internal/number/tables_test.go +++ b/vendor/golang.org/x/text/internal/number/tables_test.go @@ -11,8 +11,9 @@ import ( "testing" "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/language" + "golang.org/x/text/internal/language/compact" "golang.org/x/text/internal/testtext" - "golang.org/x/text/language" "golang.org/x/text/unicode/cldr" ) @@ -74,7 +75,7 @@ func TestSymbols(t *testing.T) { if ldml.Numbers == nil { continue } - langIndex, ok := language.CompactIndex(language.MustParse(lang)) + langIndex, ok := compact.FromTag(language.MustParse(lang)) if !ok { t.Fatalf("No compact index for language %s", lang) } diff --git a/vendor/golang.org/x/text/internal/tables.go b/vendor/golang.org/x/text/internal/tables.go deleted file mode 100644 index 7fb15f6..0000000 --- a/vendor/golang.org/x/text/internal/tables.go +++ /dev/null @@ -1,116 +0,0 @@ -// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. - -package internal - -// Parent maps a compact index of a tag to the compact index of the parent of -// this tag. -var Parent = []uint16{ // 752 elements - // Entry 0 - 3F - 0x0000, 0x0053, 0x00e5, 0x0000, 0x0003, 0x0003, 0x0000, 0x0006, - 0x0000, 0x0008, 0x0000, 0x000a, 0x0000, 0x000c, 0x000c, 0x000c, - 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, - 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, - 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, - 0x000c, 0x0000, 0x0000, 0x002a, 0x0000, 0x002c, 0x0000, 0x002e, - 0x0000, 0x0000, 0x0031, 0x0030, 0x0030, 0x0000, 0x0035, 0x0000, - 0x0037, 0x0000, 0x0039, 0x0000, 0x003b, 0x0000, 0x003d, 0x0000, - // Entry 40 - 7F - 0x0000, 0x0040, 0x0000, 0x0042, 0x0042, 0x0000, 0x0045, 0x0045, - 0x0000, 0x0048, 0x0000, 0x004a, 0x0000, 0x0000, 0x004d, 0x004c, - 0x004c, 0x0000, 0x0051, 0x0051, 0x0051, 0x0051, 0x0000, 0x0056, - 0x0000, 0x0058, 0x0000, 0x005a, 0x0000, 0x005c, 0x005c, 0x0000, - 0x005f, 0x0000, 0x0061, 0x0000, 0x0063, 0x0000, 0x0065, 0x0065, - 0x0000, 0x0068, 0x0000, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, - 0x006a, 0x006a, 0x0000, 0x0072, 0x0000, 0x0074, 0x0000, 0x0076, - 0x0000, 0x0000, 0x0079, 0x0000, 0x007b, 0x0000, 0x007d, 0x0000, - // Entry 80 - BF - 0x007f, 0x007f, 0x0000, 0x0082, 0x0082, 0x0000, 0x0085, 0x0086, - 0x0086, 0x0086, 0x0085, 0x0087, 0x0086, 0x0086, 0x0086, 0x0085, - 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0087, 0x0086, - 0x0086, 0x0086, 0x0086, 0x0087, 0x0086, 0x0087, 0x0086, 0x0086, - 0x0087, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, - 0x0086, 0x0086, 0x0085, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, - 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, - 0x0086, 0x0086, 0x0086, 0x0086, 0x0085, 0x0086, 0x0085, 0x0086, - // Entry C0 - FF - 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0087, - 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0085, - 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0087, 0x0086, 0x0086, - 0x0087, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, - 0x0086, 0x0086, 0x0086, 0x0086, 0x0085, 0x0085, 0x0086, 0x0086, - 0x0085, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0000, 0x00ee, - 0x0000, 0x00f0, 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f1, - 0x00f1, 0x00f1, 0x00f0, 0x00f1, 0x00f0, 0x00f0, 0x00f1, 0x00f1, - // Entry 100 - 13F - 0x00f0, 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f0, 0x00f1, 0x00f1, - 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x0000, 0x010c, 0x0000, 0x010e, - 0x0000, 0x0110, 0x0000, 0x0112, 0x0112, 0x0000, 0x0115, 0x0115, - 0x0115, 0x0115, 0x0000, 0x011a, 0x0000, 0x011c, 0x0000, 0x011e, - 0x011e, 0x0000, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, - 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, - 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, - 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, - // Entry 140 - 17F - 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, - 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, - 0x0000, 0x0150, 0x0000, 0x0152, 0x0000, 0x0154, 0x0000, 0x0156, - 0x0000, 0x0158, 0x0000, 0x015a, 0x015a, 0x015a, 0x0000, 0x015e, - 0x0000, 0x0000, 0x0161, 0x0000, 0x0163, 0x0000, 0x0165, 0x0165, - 0x0165, 0x0000, 0x0169, 0x0000, 0x016b, 0x0000, 0x016d, 0x0000, - 0x016f, 0x016f, 0x0000, 0x0172, 0x0000, 0x0174, 0x0000, 0x0176, - 0x0000, 0x0178, 0x0000, 0x017a, 0x0000, 0x017c, 0x0000, 0x017e, - // Entry 180 - 1BF - 0x0000, 0x0180, 0x0180, 0x0180, 0x0000, 0x0000, 0x0185, 0x0000, - 0x0000, 0x0188, 0x0000, 0x018a, 0x0000, 0x0000, 0x018d, 0x0000, - 0x018f, 0x0000, 0x0000, 0x0192, 0x0000, 0x0000, 0x0195, 0x0000, - 0x0197, 0x0000, 0x0199, 0x0000, 0x019b, 0x0000, 0x019d, 0x0000, - 0x019f, 0x0000, 0x01a1, 0x0000, 0x01a3, 0x0000, 0x01a5, 0x0000, - 0x01a7, 0x0000, 0x01a9, 0x01a9, 0x0000, 0x01ac, 0x0000, 0x01ae, - 0x0000, 0x01b0, 0x0000, 0x01b2, 0x0000, 0x01b4, 0x0000, 0x0000, - 0x01b7, 0x0000, 0x01b9, 0x0000, 0x01bb, 0x0000, 0x01bd, 0x0000, - // Entry 1C0 - 1FF - 0x01bf, 0x0000, 0x01c1, 0x0000, 0x01c3, 0x01c3, 0x01c3, 0x01c3, - 0x0000, 0x01c8, 0x0000, 0x01ca, 0x01ca, 0x0000, 0x01cd, 0x0000, - 0x01cf, 0x0000, 0x01d1, 0x0000, 0x01d3, 0x0000, 0x01d5, 0x0000, - 0x01d7, 0x01d7, 0x0000, 0x01da, 0x0000, 0x01dc, 0x0000, 0x01de, - 0x0000, 0x01e0, 0x0000, 0x01e2, 0x0000, 0x01e4, 0x0000, 0x01e6, - 0x0000, 0x01e8, 0x0000, 0x01ea, 0x0000, 0x01ec, 0x01ec, 0x01ec, - 0x0000, 0x01f0, 0x0000, 0x01f2, 0x0000, 0x01f4, 0x0000, 0x01f6, - 0x0000, 0x0000, 0x01f9, 0x0000, 0x01fb, 0x01fb, 0x0000, 0x01fe, - // Entry 200 - 23F - 0x0000, 0x0200, 0x0200, 0x0000, 0x0203, 0x0203, 0x0000, 0x0206, - 0x0206, 0x0206, 0x0206, 0x0206, 0x0206, 0x0206, 0x0000, 0x020e, - 0x0000, 0x0210, 0x0000, 0x0212, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0218, 0x0000, 0x0000, 0x021b, 0x0000, 0x021d, 0x021d, - 0x0000, 0x0220, 0x0000, 0x0222, 0x0222, 0x0000, 0x0000, 0x0226, - 0x0225, 0x0225, 0x0000, 0x0000, 0x022b, 0x0000, 0x022d, 0x0000, - 0x022f, 0x0000, 0x023b, 0x0231, 0x023b, 0x023b, 0x023b, 0x023b, - 0x023b, 0x023b, 0x023b, 0x0231, 0x023b, 0x023b, 0x0000, 0x023e, - // Entry 240 - 27F - 0x023e, 0x023e, 0x0000, 0x0242, 0x0000, 0x0244, 0x0000, 0x0246, - 0x0246, 0x0000, 0x0249, 0x0000, 0x024b, 0x024b, 0x024b, 0x024b, - 0x024b, 0x024b, 0x0000, 0x0252, 0x0000, 0x0254, 0x0000, 0x0256, - 0x0000, 0x0258, 0x0000, 0x025a, 0x0000, 0x0000, 0x025d, 0x025d, - 0x025d, 0x0000, 0x0261, 0x0000, 0x0263, 0x0000, 0x0265, 0x0000, - 0x0000, 0x0268, 0x0267, 0x0267, 0x0000, 0x026c, 0x0000, 0x026e, - 0x0000, 0x0270, 0x0000, 0x0000, 0x0000, 0x0000, 0x0275, 0x0000, - 0x0000, 0x0278, 0x0000, 0x027a, 0x027a, 0x027a, 0x027a, 0x0000, - // Entry 280 - 2BF - 0x027f, 0x027f, 0x027f, 0x0000, 0x0283, 0x0283, 0x0283, 0x0283, - 0x0283, 0x0000, 0x0289, 0x0289, 0x0289, 0x0289, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0291, 0x0291, 0x0291, 0x0000, 0x0295, 0x0295, - 0x0295, 0x0295, 0x0000, 0x0000, 0x029b, 0x029b, 0x029b, 0x029b, - 0x0000, 0x02a0, 0x0000, 0x02a2, 0x02a2, 0x0000, 0x02a5, 0x0000, - 0x02a7, 0x02a7, 0x0000, 0x0000, 0x02ab, 0x0000, 0x0000, 0x02ae, - 0x0000, 0x02b0, 0x02b0, 0x0000, 0x0000, 0x02b4, 0x0000, 0x02b6, - 0x0000, 0x02b8, 0x0000, 0x02ba, 0x0000, 0x02bc, 0x02bc, 0x0000, - // Entry 2C0 - 2FF - 0x0000, 0x02c0, 0x0000, 0x02c2, 0x02bf, 0x02bf, 0x0000, 0x0000, - 0x02c7, 0x02c6, 0x02c6, 0x0000, 0x0000, 0x02cc, 0x0000, 0x02ce, - 0x0000, 0x02d0, 0x0000, 0x0000, 0x02d3, 0x0000, 0x0000, 0x0000, - 0x02d7, 0x0000, 0x02d9, 0x0000, 0x02db, 0x0000, 0x02dd, 0x02dd, - 0x0000, 0x02e0, 0x0000, 0x02e2, 0x0000, 0x02e4, 0x02e4, 0x02e4, - 0x02e4, 0x02e4, 0x0000, 0x02ea, 0x02eb, 0x02ea, 0x0000, 0x02ee, -} // Size: 1528 bytes - -// Total table size 1528 bytes (1KiB); checksum: B99CF952 diff --git a/vendor/golang.org/x/text/internal/ucd/ucd.go b/vendor/golang.org/x/text/internal/ucd/ucd.go index 309e8d8..8c45b5f 100644 --- a/vendor/golang.org/x/text/internal/ucd/ucd.go +++ b/vendor/golang.org/x/text/internal/ucd/ucd.go @@ -11,8 +11,8 @@ package ucd // import "golang.org/x/text/internal/ucd" import ( "bufio" - "bytes" "errors" + "fmt" "io" "log" "regexp" @@ -92,10 +92,11 @@ type Parser struct { keepRanges bool // Don't expand rune ranges in field 0. err error - comment []byte - field [][]byte + comment string + field []string // parsedRange is needed in case Range(0) is called more than once for one // field. In some cases this requires scanning ahead. + line int parsedRange bool rangeStart, rangeEnd rune @@ -103,15 +104,19 @@ type Parser struct { commentHandler func(s string) } -func (p *Parser) setError(err error) { - if p.err == nil { - p.err = err +func (p *Parser) setError(err error, msg string) { + if p.err == nil && err != nil { + if msg == "" { + p.err = fmt.Errorf("ucd:line:%d: %v", p.line, err) + } else { + p.err = fmt.Errorf("ucd:line:%d:%s: %v", p.line, msg, err) + } } } -func (p *Parser) getField(i int) []byte { +func (p *Parser) getField(i int) string { if i >= len(p.field) { - return nil + return "" } return p.field[i] } @@ -139,65 +144,66 @@ func (p *Parser) Next() bool { p.rangeStart++ return true } - p.comment = nil + p.comment = "" p.field = p.field[:0] p.parsedRange = false - for p.scanner.Scan() { - b := p.scanner.Bytes() - if len(b) == 0 { + for p.scanner.Scan() && p.err == nil { + p.line++ + s := p.scanner.Text() + if s == "" { continue } - if b[0] == '#' { + if s[0] == '#' { if p.commentHandler != nil { - p.commentHandler(strings.TrimSpace(string(b[1:]))) + p.commentHandler(strings.TrimSpace(s[1:])) } continue } // Parse line - if i := bytes.IndexByte(b, '#'); i != -1 { - p.comment = bytes.TrimSpace(b[i+1:]) - b = b[:i] + if i := strings.IndexByte(s, '#'); i != -1 { + p.comment = strings.TrimSpace(s[i+1:]) + s = s[:i] } - if b[0] == '@' { + if s[0] == '@' { if p.partHandler != nil { - p.field = append(p.field, bytes.TrimSpace(b[1:])) + p.field = append(p.field, strings.TrimSpace(s[1:])) p.partHandler(p) p.field = p.field[:0] } - p.comment = nil + p.comment = "" continue } for { - i := bytes.IndexByte(b, ';') + i := strings.IndexByte(s, ';') if i == -1 { - p.field = append(p.field, bytes.TrimSpace(b)) + p.field = append(p.field, strings.TrimSpace(s)) break } - p.field = append(p.field, bytes.TrimSpace(b[:i])) - b = b[i+1:] + p.field = append(p.field, strings.TrimSpace(s[:i])) + s = s[i+1:] } if !p.keepRanges { p.rangeStart, p.rangeEnd = p.getRange(0) } return true } - p.setError(p.scanner.Err()) + p.setError(p.scanner.Err(), "scanner failed") return false } -func parseRune(b []byte) (rune, error) { +func parseRune(b string) (rune, error) { if len(b) > 2 && b[0] == 'U' && b[1] == '+' { b = b[2:] } - x, err := strconv.ParseUint(string(b), 16, 32) + x, err := strconv.ParseUint(b, 16, 32) return rune(x), err } -func (p *Parser) parseRune(b []byte) rune { - x, err := parseRune(b) - p.setError(err) +func (p *Parser) parseRune(s string) rune { + x, err := parseRune(s) + p.setError(err, "failed to parse rune") return x } @@ -211,13 +217,13 @@ func (p *Parser) Rune(i int) rune { // Runes interprets and returns field i as a sequence of runes. func (p *Parser) Runes(i int) (runes []rune) { - add := func(b []byte) { - if b = bytes.TrimSpace(b); len(b) > 0 { - runes = append(runes, p.parseRune(b)) + add := func(s string) { + if s = strings.TrimSpace(s); len(s) > 0 { + runes = append(runes, p.parseRune(s)) } } for b := p.getField(i); ; { - i := bytes.IndexByte(b, ' ') + i := strings.IndexByte(b, ' ') if i == -1 { add(b) break @@ -247,7 +253,7 @@ func (p *Parser) Range(i int) (first, last rune) { func (p *Parser) getRange(i int) (first, last rune) { b := p.getField(i) - if k := bytes.Index(b, []byte("..")); k != -1 { + if k := strings.Index(b, ".."); k != -1 { return p.parseRune(b[:k]), p.parseRune(b[k+2:]) } // The first field may not be a rune, in which case we may ignore any error @@ -260,23 +266,24 @@ func (p *Parser) getRange(i int) (first, last rune) { p.keepRanges = true } // Special case for UnicodeData that was retained for backwards compatibility. - if i == 0 && len(p.field) > 1 && bytes.HasSuffix(p.field[1], []byte("First>")) { + if i == 0 && len(p.field) > 1 && strings.HasSuffix(p.field[1], "First>") { if p.parsedRange { return p.rangeStart, p.rangeEnd } mf := reRange.FindStringSubmatch(p.scanner.Text()) + p.line++ if mf == nil || !p.scanner.Scan() { - p.setError(errIncorrectLegacyRange) + p.setError(errIncorrectLegacyRange, "") return x, x } // Using Bytes would be more efficient here, but Text is a lot easier // and this is not a frequent case. ml := reRange.FindStringSubmatch(p.scanner.Text()) if ml == nil || mf[2] != ml[2] || ml[3] != "Last" || mf[4] != ml[4] { - p.setError(errIncorrectLegacyRange) + p.setError(errIncorrectLegacyRange, "") return x, x } - p.rangeStart, p.rangeEnd = x, p.parseRune(p.scanner.Bytes()[:len(ml[1])]) + p.rangeStart, p.rangeEnd = x, p.parseRune(p.scanner.Text()[:len(ml[1])]) p.parsedRange = true return p.rangeStart, p.rangeEnd } @@ -298,34 +305,34 @@ var bools = map[string]bool{ // Bool parses and returns field i as a boolean value. func (p *Parser) Bool(i int) bool { - b := p.getField(i) + f := p.getField(i) for s, v := range bools { - if bstrEq(b, s) { + if f == s { return v } } - p.setError(strconv.ErrSyntax) + p.setError(strconv.ErrSyntax, "error parsing bool") return false } // Int parses and returns field i as an integer value. func (p *Parser) Int(i int) int { x, err := strconv.ParseInt(string(p.getField(i)), 10, 64) - p.setError(err) + p.setError(err, "error parsing int") return int(x) } // Uint parses and returns field i as an unsigned integer value. func (p *Parser) Uint(i int) uint { x, err := strconv.ParseUint(string(p.getField(i)), 10, 64) - p.setError(err) + p.setError(err, "error parsing uint") return uint(x) } // Float parses and returns field i as a decimal value. func (p *Parser) Float(i int) float64 { x, err := strconv.ParseFloat(string(p.getField(i)), 64) - p.setError(err) + p.setError(err, "error parsing float") return x } @@ -353,24 +360,12 @@ var errUndefinedEnum = errors.New("ucd: undefined enum value") // Enum interprets and returns field i as a value that must be one of the values // in enum. func (p *Parser) Enum(i int, enum ...string) string { - b := p.getField(i) + f := p.getField(i) for _, s := range enum { - if bstrEq(b, s) { + if f == s { return s } } - p.setError(errUndefinedEnum) + p.setError(errUndefinedEnum, "error parsing enum") return "" } - -func bstrEq(b []byte, s string) bool { - if len(b) != len(s) { - return false - } - for i, c := range b { - if c != s[i] { - return false - } - } - return true -} diff --git a/vendor/golang.org/x/text/language/Makefile b/vendor/golang.org/x/text/language/Makefile deleted file mode 100644 index 79f0057..0000000 --- a/vendor/golang.org/x/text/language/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright 2013 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. - -CLEANFILES+=maketables - -maketables: maketables.go - go build $^ - -tables: maketables - ./maketables > tables.go - gofmt -w -s tables.go - -# Build (but do not run) maketables during testing, -# just to make sure it still compiles. -testshort: maketables diff --git a/vendor/golang.org/x/text/language/common.go b/vendor/golang.org/x/text/language/common.go deleted file mode 100644 index 9d86e18..0000000 --- a/vendor/golang.org/x/text/language/common.go +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. - -package language - -// This file contains code common to the maketables.go and the package code. - -// langAliasType is the type of an alias in langAliasMap. -type langAliasType int8 - -const ( - langDeprecated langAliasType = iota - langMacro - langLegacy - - langAliasTypeUnknown langAliasType = -1 -) diff --git a/vendor/golang.org/x/text/language/coverage.go b/vendor/golang.org/x/text/language/coverage.go index 101fd23..fdb6156 100644 --- a/vendor/golang.org/x/text/language/coverage.go +++ b/vendor/golang.org/x/text/language/coverage.go @@ -7,6 +7,8 @@ package language import ( "fmt" "sort" + + "golang.org/x/text/internal/language" ) // The Coverage interface is used to define the level of coverage of an @@ -44,9 +46,9 @@ type allSubtags struct{} // consecutive range, it simply returns a slice of numbers in increasing order. // The "undefined" region is not returned. func (s allSubtags) Regions() []Region { - reg := make([]Region, numRegions) + reg := make([]Region, language.NumRegions) for i := range reg { - reg[i] = Region{regionID(i + 1)} + reg[i] = Region{language.Region(i + 1)} } return reg } @@ -55,9 +57,9 @@ func (s allSubtags) Regions() []Region { // consecutive range, it simply returns a slice of numbers in increasing order. // The "undefined" script is not returned. func (s allSubtags) Scripts() []Script { - scr := make([]Script, numScripts) + scr := make([]Script, language.NumScripts) for i := range scr { - scr[i] = Script{scriptID(i + 1)} + scr[i] = Script{language.Script(i + 1)} } return scr } @@ -65,22 +67,10 @@ func (s allSubtags) Scripts() []Script { // BaseLanguages returns the list of all supported base languages. It generates // the list by traversing the internal structures. func (s allSubtags) BaseLanguages() []Base { - base := make([]Base, 0, numLanguages) - for i := 0; i < langNoIndexOffset; i++ { - // We included "und" already for the value 0. - if i != nonCanonicalUnd { - base = append(base, Base{langID(i)}) - } - } - i := langNoIndexOffset - for _, v := range langNoIndex { - for k := 0; k < 8; k++ { - if v&1 == 1 { - base = append(base, Base{langID(i)}) - } - v >>= 1 - i++ - } + bs := language.BaseLanguages() + base := make([]Base, len(bs)) + for i, b := range bs { + base[i] = Base{b} } return base } @@ -134,7 +124,7 @@ func (s *coverage) BaseLanguages() []Base { } a := make([]Base, len(tags)) for i, t := range tags { - a[i] = Base{langID(t.lang)} + a[i] = Base{language.Language(t.lang())} } sort.Sort(bases(a)) k := 0 diff --git a/vendor/golang.org/x/text/language/coverage_test.go b/vendor/golang.org/x/text/language/coverage_test.go index 8e08e5c..bbc092c 100644 --- a/vendor/golang.org/x/text/language/coverage_test.go +++ b/vendor/golang.org/x/text/language/coverage_test.go @@ -8,6 +8,8 @@ import ( "fmt" "reflect" "testing" + + "golang.org/x/text/internal/language" ) func TestSupported(t *testing.T) { @@ -15,9 +17,9 @@ func TestSupported(t *testing.T) { // results is identical to the number of results on record, that all results // are distinct and that all results are valid. tests := map[string]int{ - "BaseLanguages": numLanguages, - "Scripts": numScripts, - "Regions": numRegions, + "BaseLanguages": language.NumLanguages, + "Scripts": language.NumScripts, + "Regions": language.NumRegions, "Tags": 0, } sup := reflect.ValueOf(Supported) diff --git a/vendor/golang.org/x/text/language/data_test.go b/vendor/golang.org/x/text/language/data_test.go deleted file mode 100644 index 738df46..0000000 --- a/vendor/golang.org/x/text/language/data_test.go +++ /dev/null @@ -1,416 +0,0 @@ -// Copyright 2013 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. - -package language - -type matchTest struct { - comment string - supported string - test []struct{ match, desired string } -} - -var matchTests = []matchTest{ - { - "basics", - "fr, en-GB, en", - []struct{ match, desired string }{ - {"en-GB", "en-GB"}, - {"en", "en-US"}, - {"fr", "fr-FR"}, - {"fr", "ja-JP"}, - }, - }, - { - "script fallbacks", - "zh-CN, zh-TW, iw", - []struct{ match, desired string }{ - {"zh-TW", "zh-Hant"}, - {"zh-CN", "zh"}, - {"zh-CN", "zh-Hans-CN"}, - {"zh-TW", "zh-Hant-HK"}, - {"iw", "he-IT"}, - }, - }, - { - "language-specific script fallbacks 1", - "en, sr, nl", - []struct{ match, desired string }{ - {"sr", "sr-Latn"}, - {"en", "sh"}, - {"en", "hr"}, - {"en", "bs"}, - {"en", "nl-Cyrl"}, - }, - }, - { - "language-specific script fallbacks 2", - "en, sh", - []struct{ match, desired string }{ - {"sh", "sr"}, - {"sh", "sr-Cyrl"}, - {"sh", "hr"}, - }, - }, - { - "both deprecated and not", - "fil, tl, iw, he", - []struct{ match, desired string }{ - {"he", "he-IT"}, - {"he", "he"}, - {"iw", "iw"}, - {"fil", "fil-IT"}, - {"fil", "fil"}, - {"tl", "tl"}, - }, - }, - { - "nearby languages", - "en, fil, ro, nn", - []struct{ match, desired string }{ - {"fil", "tl"}, - {"ro", "mo"}, - {"nn", "nb"}, - {"en", "ja"}, // make sure default works - }, - }, - { - "nearby languages: Nynorsk to Bokmål", - "en, nb", - []struct{ match, desired string }{ - {"nb", "nn"}, - }, - }, - { - "nearby languages: Danish does not match nn", - "en, nn", - []struct{ match, desired string }{ - {"en", "da"}, - }, - }, - { - "nearby languages: Danish matches no", - "en, no", - []struct{ match, desired string }{ - {"no", "da"}, - }, - }, - { - "nearby languages: Danish matches nb", - "en, nb", - []struct{ match, desired string }{ - {"nb", "da"}, - }, - }, - { - "prefer matching languages over language variants.", - "nn, en-GB", - []struct{ match, desired string }{ - {"en-GB", "no, en-US"}, - {"en-GB", "nb, en-US"}, - }, - }, - { - "deprecated version is closer than same language with other differences", - "nl, he, en-GB", - []struct{ match, desired string }{ - {"he", "iw, en-US"}, - }, - }, - { - "macro equivalent is closer than same language with other differences", - "nl, zh, en-GB, no", - []struct{ match, desired string }{ - {"zh", "cmn, en-US"}, - {"no", "nb, en-US"}, - }, - }, - { - "legacy equivalent is closer than same language with other differences", - "nl, fil, en-GB", - []struct{ match, desired string }{ - {"fil", "tl, en-US"}, - }, - }, - { - "exact over equivalent", - "en, ro, mo, ro-MD", - []struct{ match, desired string }{ - {"ro", "ro"}, - {"mo", "mo"}, - {"ro-MD", "ro-MD"}, - }, - }, - { - "maximization of legacy", - "sr-Cyrl, sr-Latn, ro, ro-MD", - []struct{ match, desired string }{ - {"sr-Latn", "sh"}, - {"ro-MD", "mo"}, - }, - }, - { - "empty", - "", - []struct{ match, desired string }{ - {"und", "fr"}, - {"und", "en"}, - }, - }, - { - "private use subtags", - "fr, en-GB, x-bork, es-ES, es-419", - []struct{ match, desired string }{ - {"fr", "x-piglatin"}, - {"x-bork", "x-bork"}, - }, - }, - { - "grandfathered codes", - "fr, i-klingon, en-Latn-US", - []struct{ match, desired string }{ - {"en-Latn-US", "en-GB-oed"}, - {"tlh", "i-klingon"}, - }, - }, - { - "exact match", - "fr, en-GB, ja, es-ES, es-MX", - []struct{ match, desired string }{ - {"ja", "ja, de"}, - }, - }, - { - "simple variant match", - "fr, en-GB, ja, es-ES, es-MX", - []struct{ match, desired string }{ - // Intentionally avoiding a perfect-match or two candidates for variant matches. - {"en-GB", "de, en-US"}, - // Fall back. - {"fr", "de, zh"}, - }, - }, - { - "best match for traditional Chinese", - // Scenario: An application that only supports Simplified Chinese (and some - // other languages), but does not support Traditional Chinese. zh-Hans-CN - // could be replaced with zh-CN, zh, or zh-Hans, it wouldn't make much of - // a difference. - "fr, zh-Hans-CN, en-US", - []struct{ match, desired string }{ - {"zh-Hans-CN", "zh-TW"}, - {"zh-Hans-CN", "zh-Hant"}, - // One can avoid a zh-Hant to zh-Hans match by including a second language - // preference which is a better match. - {"en-US", "zh-TW, en"}, - {"en-US", "zh-Hant-CN, en"}, - {"zh-Hans-CN", "zh-Hans, en"}, - }, - }, - // More specific region and script tie-breakers. - { - "more specific script should win in case regions are identical", - "af, af-Latn, af-Arab", - []struct{ match, desired string }{ - {"af", "af"}, - {"af", "af-ZA"}, - {"af-Latn", "af-Latn-ZA"}, - {"af-Latn", "af-Latn"}, - }, - }, - { - "more specific region should win", - "nl, nl-NL, nl-BE", - []struct{ match, desired string }{ - {"nl", "nl"}, - {"nl", "nl-Latn"}, - {"nl-NL", "nl-Latn-NL"}, - {"nl-NL", "nl-NL"}, - }, - }, - { - "more specific region wins over more specific script", - "nl, nl-Latn, nl-NL, nl-BE", - []struct{ match, desired string }{ - {"nl", "nl"}, - {"nl-Latn", "nl-Latn"}, - {"nl-NL", "nl-NL"}, - {"nl-NL", "nl-Latn-NL"}, - }, - }, - // Region distance tie-breakers. - { - "region distance Portuguese", - "pt, pt-PT", - []struct{ match, desired string }{ - {"pt-PT", "pt-ES"}, - }, - }, - { - "region distance French", - "en, fr, fr-CA, fr-CH", - []struct{ match, desired string }{ - {"fr-CA", "fr-US"}, - }, - }, - { - "region distance German", - "de-AT, de-DE, de-CH", - []struct{ match, desired string }{ - {"de-DE", "de"}, - }, - }, - { - "en-AU is closer to en-GB than to en (which is en-US)", - "en, en-GB, es-ES, es-419", - []struct{ match, desired string }{ - {"en-GB", "en-AU"}, - {"es-419", "es-MX"}, - {"es-ES", "es-PT"}, - }, - }, - // Test exceptions with "und". - // When the undefined language doesn't match anything in the list, return the default, as usual. - // max("und") = "en-Latn-US", and since matching is based on maximized tags, the undefined - // language would normally match English. But that would produce the counterintuitive results. - // Matching "und" to "it,en" would be "en" matching "en" to "it,und" would be "und". - // To avoid this max("und") is defined as "und" - { - "undefined", - "it, fr", - []struct{ match, desired string }{ - {"it", "und"}, - }, - }, - { - "und does not match en", - "it, en", - []struct{ match, desired string }{ - {"it", "und"}, - }, - }, - { - "undefined in priority list", - "it, und", - []struct{ match, desired string }{ - {"und", "und"}, - {"it", "en"}, - }, - }, - // Undefined scripts and regions. - { - "undefined", - "it, fr, zh", - []struct{ match, desired string }{ - {"fr", "und-FR"}, - {"zh", "und-CN"}, - {"zh", "und-Hans"}, - {"zh", "und-Hant"}, - {"it", "und-Latn"}, - }, - }, - // Early termination conditions: do not consider all desired strings if - // a match is good enough. - { - "match on maximized tag", - "fr, en-GB, ja, es-ES, es-MX", - []struct{ match, desired string }{ - // ja-JP matches ja on likely subtags, and it's listed first, - // thus it wins over the second preference en-GB. - {"ja", "ja-JP, en-GB"}, - {"ja", "ja-Jpan-JP, en-GB"}, - }, - }, - { - "pick best maximized tag", - "ja, ja-Jpan-US, ja-JP, en, ru", - []struct{ match, desired string }{ - {"ja", "ja-Jpan, ru"}, - {"ja-JP", "ja-JP, ru"}, - {"ja-Jpan-US", "ja-US, ru"}, - }, - }, - { - "termination: pick best maximized match", - "ja, ja-Jpan, ja-JP, en, ru", - []struct{ match, desired string }{ - {"ja-JP", "ja-Jpan-JP, ru"}, - {"ja-Jpan", "ja-Jpan, ru"}, - }, - }, - { - "no match on maximized", - "en, de, fr, ja", - []struct{ match, desired string }{ - // de maximizes to de-DE. - // Pick the exact match for the secondary language instead. - {"fr", "de-CH, fr"}, - }, - }, - - // Test that the CLDR parent relations are correctly preserved by the matcher. - // These matches may change for different CLDR versions. - { - "parent relation preserved", - "en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK", - []struct{ match, desired string }{ - {"en-GB", "en-150"}, - {"en-GB", "en-AU"}, - {"en-GB", "en-BE"}, - {"en-GB", "en-GG"}, - {"en-GB", "en-GI"}, - {"en-GB", "en-HK"}, - {"en-GB", "en-IE"}, - {"en-GB", "en-IM"}, - {"en-GB", "en-IN"}, - {"en-GB", "en-JE"}, - {"en-GB", "en-MT"}, - {"en-GB", "en-NZ"}, - {"en-GB", "en-PK"}, - {"en-GB", "en-SG"}, - {"en-GB", "en-DE"}, - {"en-GB", "en-MT"}, - {"es-419", "es-AR"}, - {"es-419", "es-BO"}, - {"es-419", "es-CL"}, - {"es-419", "es-CO"}, - {"es-419", "es-CR"}, - {"es-419", "es-CU"}, - {"es-419", "es-DO"}, - {"es-419", "es-EC"}, - {"es-419", "es-GT"}, - {"es-419", "es-HN"}, - {"es-419", "es-MX"}, - {"es-419", "es-NI"}, - {"es-419", "es-PA"}, - {"es-419", "es-PE"}, - {"es-419", "es-PR"}, - {"es-419", "es-PY"}, - {"es-419", "es-SV"}, - {"es-419", "es-US"}, - {"es-419", "es-UY"}, - {"es-419", "es-VE"}, - {"pt-PT", "pt-AO"}, - {"pt-PT", "pt-CV"}, - {"pt-PT", "pt-GW"}, - {"pt-PT", "pt-MO"}, - {"pt-PT", "pt-MZ"}, - {"pt-PT", "pt-ST"}, - {"pt-PT", "pt-TL"}, - // TODO for CLDR 24+ - // - en-001 - // - {"zh-Hant-HK", "zh-Hant-MO"}, - }, - }, - // Options and variants are inherited from user-defined settings. - { - "preserve Unicode extension", - "en, de, sl-nedis", - []struct{ match, desired string }{ - {"de-u-co-phonebk", "de-FR-u-co-phonebk"}, - {"sl-nedis-u-cu-eur", "sl-nedis-u-cu-eur"}, - {"sl-nedis-u-cu-eur", "sl-u-cu-eur"}, - {"sl-nedis-u-cu-eur", "sl-HR-nedis-u-cu-eur"}, - }, - }, -} diff --git a/vendor/golang.org/x/text/language/display/dict_test.go b/vendor/golang.org/x/text/language/display/dict_test.go index f0b1f78..17b1389 100644 --- a/vendor/golang.org/x/text/language/display/dict_test.go +++ b/vendor/golang.org/x/text/language/display/dict_test.go @@ -16,7 +16,7 @@ func TestLinking(t *testing.T) { compact := getSize(t, `display.English.Languages().Name(language.English)`) if d := base - compact; d < 1.5*1024*1024 { - t.Errorf("size(base)-size(compact) was %d; want > 1.5MB", base, compact) + t.Errorf("size(base) - size(compact) = %d - %d = was %d; want > 1.5MB", base, compact, d) } } diff --git a/vendor/golang.org/x/text/language/display/display.go b/vendor/golang.org/x/text/language/display/display.go index 738afa4..eafe54a 100644 --- a/vendor/golang.org/x/text/language/display/display.go +++ b/vendor/golang.org/x/text/language/display/display.go @@ -15,8 +15,10 @@ package display // import "golang.org/x/text/language/display" import ( + "fmt" "strings" + "golang.org/x/text/internal/format" "golang.org/x/text/language" ) @@ -32,6 +34,65 @@ All fairly low priority at the moment: - Consider compressing infrequently used languages and decompress on demand. */ +// A Formatter formats a tag in the current language. It is used in conjunction +// with the message package. +type Formatter struct { + lookup func(tag int, x interface{}) string + x interface{} +} + +// Format implements "golang.org/x/text/internal/format".Formatter. +func (f Formatter) Format(state format.State, verb rune) { + // TODO: there are a lot of inefficiencies in this code. Fix it when we + // language.Tag has embedded compact tags. + t := state.Language() + _, index, _ := matcher.Match(t) + str := f.lookup(index, f.x) + if str == "" { + // TODO: use language-specific punctuation. + // TODO: use codePattern instead of language? + if unknown := f.lookup(index, language.Und); unknown != "" { + fmt.Fprintf(state, "%v (%v)", unknown, f.x) + } else { + fmt.Fprintf(state, "[language: %v]", f.x) + } + } else { + state.Write([]byte(str)) + } +} + +// Language returns a Formatter that renders the name for lang in the +// the current language. x may be a language.Base or a language.Tag. +// It renders lang in the default language if no translation for the current +// language is supported. +func Language(lang interface{}) Formatter { + return Formatter{langFunc, lang} +} + +// Region returns a Formatter that renders the name for region in the current +// language. region may be a language.Region or a language.Tag. +// It renders region in the default language if no translation for the current +// language is supported. +func Region(region interface{}) Formatter { + return Formatter{regionFunc, region} +} + +// Script returns a Formatter that renders the name for script in the current +// language. script may be a language.Script or a language.Tag. +// It renders script in the default language if no translation for the current +// language is supported. +func Script(script interface{}) Formatter { + return Formatter{scriptFunc, script} +} + +// Script returns a Formatter that renders the name for tag in the current +// language. tag may be a language.Tag. +// It renders tag in the default language if no translation for the current +// language is supported. +func Tag(tag interface{}) Formatter { + return Formatter{tagFunc, tag} +} + // A Namer is used to get the name for a given value, such as a Tag, Language, // Script or Region. type Namer interface { @@ -84,6 +145,10 @@ func Languages(t language.Tag) Namer { type languageNamer int +func langFunc(i int, x interface{}) string { + return nameLanguage(languageNamer(i), x) +} + func (n languageNamer) name(i int) string { return lookup(langHeaders[:], int(n), i) } @@ -116,6 +181,10 @@ func Scripts(t language.Tag) Namer { type scriptNamer int +func scriptFunc(i int, x interface{}) string { + return nameScript(scriptNamer(i), x) +} + func (n scriptNamer) name(i int) string { return lookup(scriptHeaders[:], int(n), i) } @@ -140,6 +209,10 @@ func Regions(t language.Tag) Namer { type regionNamer int +func regionFunc(i int, x interface{}) string { + return nameRegion(regionNamer(i), x) +} + func (n regionNamer) name(i int) string { return lookup(regionHeaders[:], int(n), i) } @@ -162,6 +235,10 @@ func Tags(t language.Tag) Namer { type tagNamer int +func tagFunc(i int, x interface{}) string { + return nameTag(languageNamer(i), scriptNamer(i), regionNamer(i), x) +} + // Name implements the Namer interface for tag names. func (n tagNamer) Name(x interface{}) string { return nameTag(languageNamer(n), scriptNamer(n), regionNamer(n), x) diff --git a/vendor/golang.org/x/text/language/display/display_test.go b/vendor/golang.org/x/text/language/display/display_test.go index 38aa875..4f5b48e 100644 --- a/vendor/golang.org/x/text/language/display/display_test.go +++ b/vendor/golang.org/x/text/language/display/display_test.go @@ -7,11 +7,13 @@ package display import ( "fmt" "reflect" + "strings" "testing" "unicode" "golang.org/x/text/internal/testtext" "golang.org/x/text/language" + "golang.org/x/text/message" ) // TODO: test that tables are properly dropped by the linker for various use @@ -326,7 +328,8 @@ func TestTag(t *testing.T) { tag string name string }{ - {"agq", "sr", ""}, // sr is in Value.Languages(), but is not supported by agq. + // sr is in Value.Languages(), but is not supported by agq. + {"agq", "sr", "|[language: sr]"}, {"nl", "nl", "Nederlands"}, // CLDR 30 dropped Vlaams as the word for nl-BE. It is still called // Flemish in English, though. TODO: check if this is a CLDR bug. @@ -346,8 +349,8 @@ func TestTag(t *testing.T) { {"en", firstLang3ace.String(), "Achinese"}, {"en", firstTagAr001.String(), "Modern Standard Arabic"}, {"en", lastTagZhHant.String(), "Traditional Chinese"}, - {"en", "aaa", ""}, - {"en", "zzj", ""}, + {"en", "aaa", "|Unknown language (aaa)"}, + {"en", "zzj", "|Unknown language (zzj)"}, // If full tag doesn't match, try without script or region. {"en", "aa-Hans", "Afar (Simplified Han)"}, {"en", "af-Arab", "Afrikaans (Arabic)"}, @@ -368,21 +371,37 @@ func TestTag(t *testing.T) { {"sr-Latn", "sr-Latn-ME", "srpskohrvatski (Crna Gora)"}, // Double script and region {"nl", "en-Cyrl-BE", "Engels (Cyrillisch, België)"}, - // Canonical equivalents. - {"ro", "ro-MD", "moldovenească"}, - {"ro", "mo", "moldovenească"}, } - for i, tt := range tests { - d := Tags(language.MustParse(tt.dict)) - if n := d.Name(language.Raw.MustParse(tt.tag)); n != tt.name { - // There are inconsistencies w.r.t. capitalization in the tests - // due to CLDR's update procedure which treats modern and other - // languages differently. - // See http://unicode.org/cldr/trac/ticket/8051. - // TODO: use language capitalization to sanitize the strings. - t.Errorf("%d:%s:%s: was %q; want %q", i, tt.dict, tt.tag, n, tt.name) - } + for _, tt := range tests { + t.Run(tt.dict+"/"+tt.tag, func(t *testing.T) { + name, fmtName := splitName(tt.name) + dict := language.MustParse(tt.dict) + tag := language.Raw.MustParse(tt.tag) + d := Tags(dict) + if n := d.Name(tag); n != name { + // There are inconsistencies w.r.t. capitalization in the tests + // due to CLDR's update procedure which treats modern and other + // languages differently. + // See http://unicode.org/cldr/trac/ticket/8051. + // TODO: use language capitalization to sanitize the strings. + t.Errorf("Name(%s) = %q; want %q", tag, n, name) + } + + p := message.NewPrinter(dict) + if n := p.Sprint(Tag(tag)); n != fmtName { + t.Errorf("Tag(%s) = %q; want %q", tag, n, fmtName) + } + }) + } +} + +func splitName(names string) (name, formatName string) { + split := strings.Split(names, "|") + name, formatName = split[0], split[0] + if len(split) > 1 { + formatName = split[1] } + return name, formatName } func TestLanguage(t *testing.T) { @@ -391,7 +410,8 @@ func TestLanguage(t *testing.T) { tag string name string }{ - {"agq", "sr", ""}, // sr is in Value.Languages(), but is not supported by agq. + // sr is in Value.Languages(), but is not supported by agq. + {"agq", "sr", "|[language: sr]"}, // CLDR 30 dropped Vlaams as the word for nl-BE. It is still called // Flemish in English, though. TODO: this is probably incorrect. // West-Vlaams (vls) is not Vlaams. West-Vlaams could be considered its @@ -412,8 +432,8 @@ func TestLanguage(t *testing.T) { {"en", firstLang3ace.String(), "Achinese"}, {"en", firstTagAr001.String(), "Modern Standard Arabic"}, {"en", lastTagZhHant.String(), "Traditional Chinese"}, - {"en", "aaa", ""}, - {"en", "zzj", ""}, + {"en", "aaa", "|Unknown language (aaa)"}, + {"en", "zzj", "|Unknown language (zzj)"}, // If full tag doesn't match, try without script or region. {"en", "aa-Hans", "Afar"}, {"en", "af-Arab", "Afrikaans"}, @@ -421,25 +441,33 @@ func TestLanguage(t *testing.T) { {"en", "aa-GB", "Afar"}, {"en", "af-NA", "Afrikaans"}, {"en", "zu-BR", "Zulu"}, - {"agq", "zh-Hant", ""}, - // Canonical equivalents. - {"ro", "ro-MD", "moldovenească"}, - {"ro", "mo", "moldovenească"}, + {"agq", "zh-Hant", "|[language: zh-Hant]"}, {"en", "sh", "Serbo-Croatian"}, {"en", "sr-Latn", "Serbo-Croatian"}, {"en", "sr", "Serbian"}, {"en", "sr-ME", "Serbian"}, {"en", "sr-Latn-ME", "Serbo-Croatian"}, // See comments in TestTag. } - for i, tt := range tests { + for _, tt := range tests { testtext.Run(t, tt.dict+"/"+tt.tag, func(t *testing.T) { - d := Languages(language.Raw.MustParse(tt.dict)) - if n := d.Name(language.Raw.MustParse(tt.tag)); n != tt.name { - t.Errorf("%d:%s:%s: was %q; want %q", i, tt.dict, tt.tag, n, tt.name) + name, fmtName := splitName(tt.name) + dict := language.MustParse(tt.dict) + tag := language.Raw.MustParse(tt.tag) + p := message.NewPrinter(dict) + d := Languages(dict) + if n := d.Name(tag); n != name { + t.Errorf("Name(%v) = %q; want %q", tag, n, name) + } + if n := p.Sprint(Language(tag)); n != fmtName { + t.Errorf("Language(%v) = %q; want %q", tag, n, fmtName) } if len(tt.tag) <= 3 { - if n := d.Name(language.MustParseBase(tt.tag)); n != tt.name { - t.Errorf("%d:%s:base(%s): was %q; want %q", i, tt.dict, tt.tag, n, tt.name) + base := language.MustParseBase(tt.tag) + if n := d.Name(base); n != name { + t.Errorf("Name(%v) = %q; want %q", base, n, name) + } + if n := p.Sprint(Language(base)); n != fmtName { + t.Errorf("Language(%v) = %q; want %q", base, n, fmtName) } } }) @@ -468,21 +496,32 @@ func TestScript(t *testing.T) { // Don't introduce scripts with canonicalization. {"en", "sh", "Unknown Script"}, // sh canonicalizes to sr-Latn } - for i, tt := range tests { - d := Scripts(language.MustParse(tt.dict)) - var x interface{} - if unicode.IsUpper(rune(tt.scr[0])) { - x = language.MustParseScript(tt.scr) - tag, _ := language.Raw.Compose(x) - if n := d.Name(tag); n != tt.name { - t.Errorf("%d:%s:%s: was %q; want %q", i, tt.dict, tt.scr, n, tt.name) + for _, tt := range tests { + t.Run(tt.dict+"/"+tt.scr, func(t *testing.T) { + name, fmtName := splitName(tt.name) + dict := language.MustParse(tt.dict) + p := message.NewPrinter(dict) + d := Scripts(dict) + var tag language.Tag + if unicode.IsUpper(rune(tt.scr[0])) { + x := language.MustParseScript(tt.scr) + if n := d.Name(x); n != name { + t.Errorf("Name(%v) = %q; want %q", x, n, name) + } + if n := p.Sprint(Script(x)); n != fmtName { + t.Errorf("Script(%v) = %q; want %q", x, n, fmtName) + } + tag, _ = language.Raw.Compose(x) + } else { + tag = language.Raw.MustParse(tt.scr) } - } else { - x = language.Raw.MustParse(tt.scr) - } - if n := d.Name(x); n != tt.name { - t.Errorf("%d:%s:%s: was %q; want %q", i, tt.dict, tt.scr, n, tt.name) - } + if n := d.Name(tag); n != name { + t.Errorf("Name(%v) = %q; want %q", tag, n, name) + } + if n := p.Sprint(Script(tag)); n != fmtName { + t.Errorf("Script(%v) = %q; want %q", tag, n, fmtName) + } + }) } } @@ -495,8 +534,6 @@ func TestRegion(t *testing.T) { {"nl", "NL", "Nederland"}, {"en", "US", "United States"}, {"en", "ZZ", "Unknown Region"}, - {"en", "UM", "U.S. Outlying Islands"}, - {"en-GB", "UM", "U.S. Outlying Islands"}, {"en-GB", "NL", "Netherlands"}, // Canonical equivalents {"en", "UK", "United Kingdom"}, @@ -506,23 +543,32 @@ func TestRegion(t *testing.T) { // Don't introduce regions with canonicalization. {"en", "mo", "Unknown Region"}, } - for i, tt := range tests { - d := Regions(language.MustParse(tt.dict)) - var x interface{} - if unicode.IsUpper(rune(tt.reg[0])) { - // Region - x = language.MustParseRegion(tt.reg) - tag, _ := language.Raw.Compose(x) + for _, tt := range tests { + t.Run(tt.dict+"/"+tt.reg, func(t *testing.T) { + dict := language.MustParse(tt.dict) + p := message.NewPrinter(dict) + d := Regions(dict) + var tag language.Tag + if unicode.IsUpper(rune(tt.reg[0])) { + // Region + x := language.MustParseRegion(tt.reg) + if n := d.Name(x); n != tt.name { + t.Errorf("Name(%v) = %q; want %q", x, n, tt.name) + } + if n := p.Sprint(Region(x)); n != tt.name { + t.Errorf("Region(%v) = %q; want %q", x, n, tt.name) + } + tag, _ = language.Raw.Compose(x) + } else { + tag = language.Raw.MustParse(tt.reg) + } if n := d.Name(tag); n != tt.name { - t.Errorf("%d:%s:%s: was %q; want %q", i, tt.dict, tt.reg, n, tt.name) + t.Errorf("Name(%v) = %q; want %q", tag, n, tt.name) } - } else { - // Tag - x = language.Raw.MustParse(tt.reg) - } - if n := d.Name(x); n != tt.name { - t.Errorf("%d:%s:%s: was %q; want %q", i, tt.dict, tt.reg, n, tt.name) - } + if n := p.Sprint(Region(tag)); n != tt.name { + t.Errorf("Region(%v) = %q; want %q", tag, n, tt.name) + } + }) } } @@ -574,9 +620,6 @@ func TestSelf(t *testing.T) { {"sr-Latn-ME", "srpskohrvatski"}, {"sr-Cyrl-ME", "српски"}, {"sr-NL", "српски"}, - // Canonical equivalents. - {"ro-MD", "moldovenească"}, - {"mo", "moldovenească"}, // NOTE: kk is defined, but in Cyrillic script. For China, Arab is the // dominant script. We do not have data for kk-Arab and we chose to not // fall back in such cases. @@ -590,6 +633,27 @@ func TestSelf(t *testing.T) { } } +func TestEquivalence(t *testing.T) { + testCases := []struct { + desc string + namer Namer + }{ + {"Self", Self}, + {"Tags", Tags(language.Romanian)}, + {"Languages", Languages(language.Romanian)}, + {"Scripts", Scripts(language.Romanian)}, + } + for _, tc := range testCases { + t.Run(tc.desc, func(t *testing.T) { + ro := tc.namer.Name(language.Raw.MustParse("ro-MD")) + mo := tc.namer.Name(language.Raw.MustParse("mo")) + if ro != mo { + t.Errorf("%q != %q", ro, mo) + } + }) + } +} + func TestDictionaryLang(t *testing.T) { tests := []struct { d *Dictionary @@ -639,7 +703,6 @@ func TestDictionaryScript(t *testing.T) { name string }{ {English, "Cyrl", "Cyrillic"}, - {Portuguese, "Gujr", "gujerati"}, {EuropeanPortuguese, "Gujr", "guzerate"}, } for i, test := range tests { diff --git a/vendor/golang.org/x/text/language/display/examples_test.go b/vendor/golang.org/x/text/language/display/examples_test.go index f392f21..15d7584 100644 --- a/vendor/golang.org/x/text/language/display/examples_test.go +++ b/vendor/golang.org/x/text/language/display/examples_test.go @@ -9,8 +9,26 @@ import ( "golang.org/x/text/language" "golang.org/x/text/language/display" + "golang.org/x/text/message" ) +func ExampleFormatter() { + message.SetString(language.Dutch, "In %v people speak %v.", "In %v spreekt men %v.") + + fr := language.French + region, _ := fr.Region() + for _, tag := range []string{"en", "nl"} { + p := message.NewPrinter(language.Make(tag)) + + p.Printf("In %v people speak %v.", display.Region(region), display.Language(fr)) + p.Println() + } + + // Output: + // In France people speak French. + // In Frankrijk spreekt men Frans. +} + func ExampleNamer() { supported := []string{ "en-US", "en-GB", "ja", "zh", "zh-Hans", "zh-Hant", "pt", "pt-PT", "ko", "ar", "el", "ru", "uk", "pa", diff --git a/vendor/golang.org/x/text/language/display/maketables.go b/vendor/golang.org/x/text/language/display/maketables.go index 3fcd9c8..8f2fd07 100644 --- a/vendor/golang.org/x/text/language/display/maketables.go +++ b/vendor/golang.org/x/text/language/display/maketables.go @@ -205,7 +205,13 @@ func (b *builder) generate() { b.setData("lang", func(g *group, loc language.Tag, ldn *cldr.LocaleDisplayNames) { if ldn.Languages != nil { for _, v := range ldn.Languages.Language { - tag := tagForm.MustParse(v.Type) + lang := v.Type + if lang == "root" { + // We prefer the data from "und" + // TODO: allow both the data for root and und somehow. + continue + } + tag := tagForm.MustParse(lang) if tags.contains(tag) { g.set(loc, tag.String(), v.Data()) } diff --git a/vendor/golang.org/x/text/language/display/tables.go b/vendor/golang.org/x/text/language/display/tables.go index 0d7ebd7..be0fcdc 100644 --- a/vendor/golang.org/x/text/language/display/tables.go +++ b/vendor/golang.org/x/text/language/display/tables.go @@ -3,51 +3,53 @@ package display // CLDRVersion is the CLDR version from which the tables in this package are derived. -const CLDRVersion = "30" +const CLDRVersion = "32" // Version is deprecated. Use CLDRVersion. -const Version = "30" +const Version = "32" -var parents = [252]int16{ +var parents = [261]int16{ // Entry 0 - 3F -1, -1, -1, -1, -1, 4, 4, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 19, -1, 21, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 36, 36, 36, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, 48, 48, 48, -1, -1, 53, 54, - 54, 54, 54, 54, 54, 54, 54, 54, + -1, -1, -1, -1, -1, -1, 37, 37, + 37, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 49, 49, 49, 49, 49, -1, + -1, 56, 57, 57, 57, 57, 57, 57, // Entry 40 - 7F - 54, 54, 54, 54, 54, 54, 54, 54, - 54, -1, -1, -1, -1, 76, -1, -1, - -1, -1, -1, 82, 82, 82, -1, -1, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, -1, -1, -1, -1, + 79, -1, -1, -1, -1, -1, 85, 85, + 85, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 124, -1, -1, // Entry 80 - BF + 127, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 178, -1, -1, -1, -1, - 183, -1, -1, 186, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 181, -1, + -1, -1, -1, 186, -1, -1, 189, -1, // Entry C0 - FF - -1, -1, 193, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 197, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 207, 207, 207, -1, 211, 211, 211, -1, - 215, -1, 217, 217, -1, -1, -1, -1, + -1, -1, -1, -1, 211, 211, 211, -1, + 215, 215, 215, -1, 219, -1, 221, 221, -1, -1, -1, -1, -1, -1, -1, -1, - 231, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 244, -1, -1, - -1, -1, 249, -1, + -1, -1, -1, -1, -1, -1, -1, 238, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 252, -1, -1, + // Entry 100 - 13F + -1, -1, -1, 258, -1, } -// Number of keys: 612 +// Number of keys: 614 var ( langIndex = tagIndex{ "aaabaeafakamanarasavayazbabebgbibmbnbobrbscacechcocrcscucvcydadedvdzeeel" + @@ -58,22 +60,23 @@ var ( "wawoxhyiyozazhzu", "aceachadaadyaebafhagqainakkakzalealnaltanganparcarnaroarparqarsarwaryarz" + "asaaseastavkawabalbanbarbasbaxbbcbbjbejbembewbezbfdbfqbgnbhobikbinbj" + - "nbkmblabpybqibrabrhbrxbssbuabugbumbynbyvcadcarcaycchcebcggchbchgchkc" + - "hmchnchochpchrchyckbcopcpscrhcrscsbdakdardavdeldendgrdindjedoidsbdtp" + - "duadumdyodyudzgebuefieglegyekaelxenmesuewoextfanfilfitfonfrcfrmfrofr" + - "pfrrfrsfurgaagaggangaygbagbzgezgilglkgmhgohgomgongorgotgrbgrcgswgucg" + - "urguzgwihaihakhawhifhilhithmnhsbhsnhupibaibbiloinhizhjamjbojgojmcjpr" + - "jrbjutkaakabkackajkamkawkbdkblkcgkdekeakenkfokgpkhakhokhqkhwkiukkjkl" + - "nkmbkoikokkoskpekrckrikrjkrlkruksbksfkshkumkutladlaglahlamlezlfnlijl" + - "ivlktlmolollozlrcltglualuilunluolusluylzhlzzmadmafmagmaimakmanmasmde" + - "mdfmdrmenmermfemgamghmgomicminmncmnimohmosmrjmuamulmusmwlmwrmwvmyemy" + - "vmznnannapnaqndsnewnianiunjonmgnnhnognonnovnqonsonusnwcnymnynnyonzio" + - "saotapagpalpampappaupcdpcmpdcpdtpeopflphnpmspntponprgproqucqugrajrap" + - "rarrgnrifrofromrtmruerugruprwksadsahsamsaqsassatsazsbasbpscnscosdcsd" + - "hseesehseiselsessgasgsshishnshusidslislysmasmjsmnsmssnksogsrnsrrssys" + - "tqsuksussuxswbsycsyrszltcytemteotertettigtivtkltkrtlhtlitlytmhtogtpi" + - "trutrvtsdtsittttumtvltwqtyvtzmudmugaumbundvaivecvepvlsvmfvotvrovunwa" + - "ewalwarwaswbpwuuxalxmfxogyaoyapyavybbyrlyuezapzblzeazenzghzunzxxzza", + "nbkmblabpybqibrabrhbrxbssbuabugbumbynbyvcadcarcaycchccpcebcggchbchgc" + + "hkchmchnchochpchrchyckbcopcpscrhcrscsbdakdardavdeldendgrdindjedoidsb" + + "dtpduadumdyodyudzgebuefieglegyekaelxenmesuewoextfanfilfitfonfrcfrmfr" + + "ofrpfrrfrsfurgaagaggangaygbagbzgezgilglkgmhgohgomgongorgotgrbgrcgswg" + + "ucgurguzgwihaihakhawhifhilhithmnhsbhsnhupibaibbiloinhizhjamjbojgojmc" + + "jprjrbjutkaakabkackajkamkawkbdkblkcgkdekeakenkfokgpkhakhokhqkhwkiukk" + + "jklnkmbkoikokkoskpekrckrikrjkrlkruksbksfkshkumkutladlaglahlamlezlfnl" + + "ijlivlktlmololloulozlrcltglualuilunluolusluylzhlzzmadmafmagmaimakman" + + "masmdemdfmdrmenmermfemgamghmgomicminmncmnimohmosmrjmuamulmusmwlmwrmw" + + "vmyemyvmznnannapnaqndsnewnianiunjonmgnnhnognonnovnqonsonusnwcnymnynn" + + "yonziosaotapagpalpampappaupcdpcmpdcpdtpeopflphnpmspntponprgproqucqug" + + "rajraprarrgnrifrofromrtmruerugruprwksadsahsamsaqsassatsazsbasbpscnsc" + + "osdcsdhseesehseiselsessgasgsshishnshusidslislysmasmjsmnsmssnksogsrns" + + "rrssystqsuksussuxswbsycsyrszltcytemteotertettigtivtkltkrtlhtlitlytmh" + + "togtpitrutrvtsdtsittttumtvltwqtyvtzmudmugaumbundvaivecvepvlsvmfvotvr" + + "ovunwaewalwarwaswbpwuuxalxmfxogyaoyapyavybbyrlyuezapzblzeazenzghzunz" + + "xxzza", "", } langTagsLong = []string{ // 23 elements @@ -103,7 +106,7 @@ var ( } ) -var langHeaders = [252]header{ +var langHeaders = [261]header{ { // af afLangStr, afLangIdx, @@ -201,7 +204,7 @@ var langHeaders = [252]header{ { // ar-LY "الغورانيةاللاووالسواحيليةالتيغرينيةالمابودونجونيةصوربيا العلياسامي الجنو" + "بيةالكرواتية الصربيةالسواحيلية الكونغولية", - []uint16{ // 611 elements + []uint16{ // 613 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -249,7 +252,7 @@ var langHeaders = [252]header{ 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, // Entry 140 - 17F 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, - 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + 0x0062, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, @@ -275,7 +278,7 @@ var langHeaders = [252]header{ 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, // Entry 200 - 23F - 0x007b, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + 0x007b, 0x007b, 0x007b, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, @@ -288,13 +291,13 @@ var langHeaders = [252]header{ 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, - 0x0094, 0x00b5, 0x00de, + 0x0094, 0x0094, 0x0094, 0x00b5, 0x00de, }, }, { // ar-SA - "الغورانيةاللاووالأوريةالسواحيليةالتيغرينيةالمابودونجونيةصوربيا العلياسام" + - "ي الجنوبيةالكرواتية الصربيةالسواحيلية الكونغولية", - []uint16{ // 611 elements + "الغورانيةاللاووالسواحيليةالتيلوجوالتيغرينيةالمابودونجونيةصوربيا العلياسا" + + "مي الجنوبيةالكرواتية الصربيةالسواحيلية الكونغولية", + []uint16{ // 613 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -312,83 +315,167 @@ var langHeaders = [252]header{ 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, - 0x001e, 0x001e, 0x001e, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, // Entry 80 - BF - 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, - 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, - 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, - 0x002c, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0054, 0x0054, - 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, - 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, - 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, - 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, + 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, + 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, + 0x001e, 0x0032, 0x0032, 0x0042, 0x0042, 0x0042, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, // Entry C0 - FF - 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0070, 0x0070, 0x0070, - 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, - 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, - 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, - 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, - 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, - 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, - 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, // Entry 100 - 13F - 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, - 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, - 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, - 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, - 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, - 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, - 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, - 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, // Entry 140 - 17F - 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, + 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, + 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, + 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, + 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, + 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, + 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, // Entry 180 - 1BF - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, + 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, + 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, + 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, + 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, + 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, + 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, + 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, // Entry 1C0 - 1FF - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, + 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, + 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, + 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, + 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, + 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, + 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, + 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, // Entry 200 - 23F - 0x0089, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, - 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, - 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, - 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, - 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, - 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, - 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, - 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, + 0x008b, 0x008b, 0x008b, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, + 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, + 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, + 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, + 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, + 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, + 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, + 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, // Entry 240 - 27F - 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, - 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, - 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, - 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, - 0x00a2, 0x00c3, 0x00ec, + 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, + 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, + 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, + 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, + 0x00a4, 0x00a4, 0x00a4, 0x00c5, 0x00ee, }, }, { // as - "অসমীয়া", - []uint16{ // 10 elements + "অসমীয়ালেটিন আমেৰিকান স্পেনিচ", + []uint16{ // 601 elements + // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0015, + 0x0000, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + // Entry 40 - 7F + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + // Entry 80 - BF + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + // Entry C0 - FF + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + // Entry 100 - 13F + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + // Entry 140 - 17F + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + // Entry 180 - 1BF + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + // Entry 1C0 - 1FF + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + // Entry 200 - 23F + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + // Entry 240 - 27F + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0053, }, }, { // asa @@ -497,17 +584,17 @@ var langHeaders = [252]header{ "sianutulutimnetesoterenatetumtigretivtokelautsakhurklingontlingittal" + "ixíntamashektonga nyasatok pisinturoyotarokotsakoniutsimshiantati mu" + "sulmántumbukatuvalutasawaqtuvinianutamazight del Atles centraludmurt" + - "ugaríticuumbundurootvaivenecianuvepsiuflamencu occidentalfranconianu" + - " del Mainvóticuvorovunjowalserwolayttawaraywashowarlpirichinu wucalm" + - "ucomingrelianusogayaoyapésyangbenyembanheengatucantonészapotecasimbó" + - "licu Blisszeelandészenagatamazight estándar de Marruecoszuniensin co" + - "nteníu llingüísticuzazaárabe estándar modernualemán d’Austriaaltuale" + - "mán de Suizainglés d’Australiainglés de Canadáinglés de Gran Bretaña" + - "inglés d’Estaos Xuníosespañol d’América Llatinaespañol européuespaño" + - "l de Méxicufrancés de Canadáfrancés de Suizabaxu saxónflamencuportug" + - "ués del Brasilportugués européumoldavuserbo-croatasuaḥili del Conguc" + - "hinu simplificáuchinu tradicional", - []uint16{ // 613 elements + "ugaríticuumbundullingua desconocidavaivenecianuvepsiuflamencu occide" + + "ntalfranconianu del Mainvóticuvorovunjowalserwolayttawaraywashowarlp" + + "irichinu wucalmucomingrelianusogayaoyapésyangbenyembanheengatucanton" + + "észapotecasimbólicu Blisszeelandészenagatamazight estándar de Marru" + + "ecoszuniensin conteníu llingüísticuzazaárabe estándar modernualemán " + + "d’Austriaaltualemán de Suizainglés d’Australiainglés de Canadáinglés" + + " de Gran Bretañainglés d’Estaos Xuníosespañol d’América Llatinaespañ" + + "ol européuespañol de Méxicufrancés de Canadáfrancés de Suizabaxu sax" + + "ónflamencuportugués del Brasilportugués européumoldavuserbo-croatas" + + "uaḥili del Conguchinu simplificáuchinu tradicional", + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0004, 0x000e, 0x0018, 0x0021, 0x0025, 0x002e, 0x0037, 0x003d, 0x0044, 0x004c, 0x0052, 0x005d, 0x0064, 0x006e, 0x0076, @@ -542,59 +629,59 @@ var langHeaders = [252]header{ 0x06b3, 0x06b7, 0x06bc, 0x06c2, 0x06c6, 0x06cb, 0x06d1, 0x06e3, 0x06eb, 0x06f0, 0x06f4, 0x06fa, 0x06fd, 0x0704, 0x070f, 0x0718, 0x071c, 0x0722, 0x0726, 0x072c, 0x0732, 0x073a, 0x073e, 0x0742, - 0x0749, 0x074e, 0x0754, 0x075a, 0x075f, 0x0766, 0x076b, 0x0772, - 0x077a, 0x0782, 0x0786, 0x0795, 0x079c, 0x07a6, 0x07ae, 0x07b6, - // Entry 100 - 13F - 0x07c3, 0x07cb, 0x07d3, 0x07e2, 0x07fa, 0x0804, 0x080a, 0x0810, - 0x0815, 0x081d, 0x0822, 0x0828, 0x082d, 0x0832, 0x0837, 0x0842, - 0x084f, 0x0854, 0x0865, 0x086f, 0x0874, 0x087a, 0x087f, 0x0883, - 0x088b, 0x089a, 0x08a0, 0x08a7, 0x08b4, 0x08c1, 0x08c7, 0x08d1, - 0x08d5, 0x08dd, 0x08f5, 0x08f8, 0x0906, 0x0914, 0x0924, 0x092c, - 0x093d, 0x094d, 0x0956, 0x0958, 0x095e, 0x0967, 0x096b, 0x0970, - 0x0981, 0x0985, 0x098f, 0x0995, 0x09a6, 0x09b9, 0x09c5, 0x09ca, - 0x09d3, 0x09da, 0x09df, 0x09ed, 0x09fd, 0x0a02, 0x0a08, 0x0a0d, + 0x0749, 0x074e, 0x0754, 0x075a, 0x075f, 0x075f, 0x0766, 0x076b, + 0x0772, 0x077a, 0x0782, 0x0786, 0x0795, 0x079c, 0x07a6, 0x07ae, + // Entry 100 - 13F + 0x07b6, 0x07c3, 0x07cb, 0x07d3, 0x07e2, 0x07fa, 0x0804, 0x080a, + 0x0810, 0x0815, 0x081d, 0x0822, 0x0828, 0x082d, 0x0832, 0x0837, + 0x0842, 0x084f, 0x0854, 0x0865, 0x086f, 0x0874, 0x087a, 0x087f, + 0x0883, 0x088b, 0x089a, 0x08a0, 0x08a7, 0x08b4, 0x08c1, 0x08c7, + 0x08d1, 0x08d5, 0x08dd, 0x08f5, 0x08f8, 0x0906, 0x0914, 0x0924, + 0x092c, 0x093d, 0x094d, 0x0956, 0x0958, 0x095e, 0x0967, 0x096b, + 0x0970, 0x0981, 0x0985, 0x098f, 0x0995, 0x09a6, 0x09b9, 0x09c5, + 0x09ca, 0x09d3, 0x09da, 0x09df, 0x09ed, 0x09fd, 0x0a02, 0x0a08, // Entry 140 - 17F - 0x0a16, 0x0a1b, 0x0a26, 0x0a2e, 0x0a3b, 0x0a45, 0x0a4b, 0x0a50, - 0x0a5b, 0x0a66, 0x0a6a, 0x0a6e, 0x0a74, 0x0a79, 0x0a7f, 0x0a87, - 0x0aa0, 0x0aa6, 0x0aac, 0x0ab3, 0x0abe, 0x0aca, 0x0ad4, 0x0adf, - 0x0ae8, 0x0aee, 0x0af1, 0x0af6, 0x0afa, 0x0b04, 0x0b0b, 0x0b0f, - 0x0b16, 0x0b22, 0x0b29, 0x0b2d, 0x0b35, 0x0b3a, 0x0b43, 0x0b4f, - 0x0b55, 0x0b5e, 0x0b62, 0x0b6a, 0x0b72, 0x0b7e, 0x0b85, 0x0b8e, - 0x0b94, 0x0ba3, 0x0ba7, 0x0bb0, 0x0bb9, 0x0bbf, 0x0bc7, 0x0bcc, - 0x0bd5, 0x0bda, 0x0be1, 0x0be7, 0x0bec, 0x0bf2, 0x0bf7, 0x0c00, + 0x0a0d, 0x0a16, 0x0a1b, 0x0a26, 0x0a2e, 0x0a3b, 0x0a45, 0x0a4b, + 0x0a50, 0x0a5b, 0x0a66, 0x0a6a, 0x0a6e, 0x0a74, 0x0a79, 0x0a7f, + 0x0a87, 0x0aa0, 0x0aa6, 0x0aac, 0x0ab3, 0x0abe, 0x0aca, 0x0ad4, + 0x0adf, 0x0ae8, 0x0aee, 0x0af1, 0x0af6, 0x0afa, 0x0b04, 0x0b0b, + 0x0b0f, 0x0b16, 0x0b22, 0x0b29, 0x0b2d, 0x0b35, 0x0b3a, 0x0b43, + 0x0b4f, 0x0b55, 0x0b5e, 0x0b62, 0x0b6a, 0x0b72, 0x0b7e, 0x0b85, + 0x0b8e, 0x0b94, 0x0ba3, 0x0ba7, 0x0bb0, 0x0bb9, 0x0bbf, 0x0bc7, + 0x0bcc, 0x0bd5, 0x0bda, 0x0be1, 0x0be7, 0x0bec, 0x0bf2, 0x0bf7, // Entry 180 - 1BF - 0x0c12, 0x0c1b, 0x0c24, 0x0c2a, 0x0c32, 0x0c37, 0x0c3b, 0x0c49, - 0x0c53, 0x0c5d, 0x0c64, 0x0c69, 0x0c6c, 0x0c70, 0x0c75, 0x0c85, - 0x0c88, 0x0c90, 0x0c94, 0x0c9a, 0x0ca2, 0x0ca9, 0x0cb1, 0x0cb7, - 0x0cbb, 0x0cc1, 0x0cc7, 0x0ccc, 0x0cd0, 0x0cd8, 0x0ce8, 0x0cf6, - 0x0cfd, 0x0d03, 0x0d0e, 0x0d15, 0x0d1d, 0x0d23, 0x0d28, 0x0d37, - 0x0d3e, 0x0d52, 0x0d57, 0x0d60, 0x0d67, 0x0d6f, 0x0d74, 0x0d79, - 0x0d84, 0x0d91, 0x0d9b, 0x0d9f, 0x0dab, 0x0db1, 0x0db5, 0x0dbc, - 0x0dc3, 0x0dc9, 0x0dd2, 0x0dd7, 0x0de6, 0x0dec, 0x0df2, 0x0e01, + 0x0c00, 0x0c12, 0x0c1b, 0x0c24, 0x0c2a, 0x0c32, 0x0c37, 0x0c37, + 0x0c3b, 0x0c49, 0x0c53, 0x0c5d, 0x0c64, 0x0c69, 0x0c6c, 0x0c70, + 0x0c75, 0x0c85, 0x0c88, 0x0c90, 0x0c94, 0x0c9a, 0x0ca2, 0x0ca9, + 0x0cb1, 0x0cb7, 0x0cbb, 0x0cc1, 0x0cc7, 0x0ccc, 0x0cd0, 0x0cd8, + 0x0ce8, 0x0cf6, 0x0cfd, 0x0d03, 0x0d0e, 0x0d15, 0x0d1d, 0x0d23, + 0x0d28, 0x0d37, 0x0d3e, 0x0d52, 0x0d57, 0x0d60, 0x0d67, 0x0d6f, + 0x0d74, 0x0d79, 0x0d84, 0x0d91, 0x0d9b, 0x0d9f, 0x0dab, 0x0db1, + 0x0db5, 0x0dbc, 0x0dc3, 0x0dc9, 0x0dd2, 0x0dd7, 0x0de6, 0x0dec, // Entry 1C0 - 1FF - 0x0e05, 0x0e14, 0x0e1c, 0x0e24, 0x0e29, 0x0e2e, 0x0e33, 0x0e40, - 0x0e4a, 0x0e51, 0x0e59, 0x0e63, 0x0e6b, 0x0e72, 0x0e88, 0x0e9f, - 0x0eab, 0x0eb8, 0x0ec8, 0x0ecf, 0x0ed9, 0x0ee1, 0x0eeb, 0x0ef3, - 0x0f04, 0x0f0d, 0x0f30, 0x0f3c, 0x0f43, 0x0f4e, 0x0f56, 0x0f5d, - 0x0f62, 0x0f69, 0x0f71, 0x0f76, 0x0f7d, 0x0f87, 0x0f8a, 0x0f93, - 0x0f98, 0x0faa, 0x0fb1, 0x0fb6, 0x0fbd, 0x0fc7, 0x0fce, 0x0fd3, - 0x0fdc, 0x0fe1, 0x0ff0, 0x0ffd, 0x1004, 0x1008, 0x100c, 0x1012, - 0x1021, 0x1032, 0x103d, 0x1046, 0x104a, 0x1059, 0x105f, 0x106d, + 0x0df2, 0x0e01, 0x0e05, 0x0e14, 0x0e1c, 0x0e24, 0x0e29, 0x0e2e, + 0x0e33, 0x0e40, 0x0e4a, 0x0e51, 0x0e59, 0x0e63, 0x0e6b, 0x0e72, + 0x0e88, 0x0e9f, 0x0eab, 0x0eb8, 0x0ec8, 0x0ecf, 0x0ed9, 0x0ee1, + 0x0eeb, 0x0ef3, 0x0f04, 0x0f0d, 0x0f30, 0x0f3c, 0x0f43, 0x0f4e, + 0x0f56, 0x0f5d, 0x0f62, 0x0f69, 0x0f71, 0x0f76, 0x0f7d, 0x0f87, + 0x0f8a, 0x0f93, 0x0f98, 0x0faa, 0x0fb1, 0x0fb6, 0x0fbd, 0x0fc7, + 0x0fce, 0x0fd3, 0x0fdc, 0x0fe1, 0x0ff0, 0x0ffd, 0x1004, 0x1008, + 0x100c, 0x1012, 0x1021, 0x1032, 0x103d, 0x1046, 0x104a, 0x1059, // Entry 200 - 23F - 0x1077, 0x1083, 0x108c, 0x1096, 0x10a0, 0x10a7, 0x10af, 0x10bb, - 0x10c0, 0x10c4, 0x10d8, 0x10de, 0x10e2, 0x10e9, 0x10f2, 0x1102, - 0x1109, 0x1112, 0x1116, 0x111b, 0x111f, 0x1125, 0x112a, 0x112f, - 0x1132, 0x1139, 0x1140, 0x1147, 0x114e, 0x1156, 0x115e, 0x1169, - 0x1172, 0x1178, 0x117e, 0x1186, 0x118f, 0x119d, 0x11a4, 0x11aa, - 0x11b1, 0x11ba, 0x11d5, 0x11db, 0x11e5, 0x11ec, 0x11f0, 0x11f3, - 0x11fc, 0x1202, 0x1215, 0x1229, 0x1230, 0x1234, 0x1239, 0x123f, - 0x1247, 0x124c, 0x1251, 0x1259, 0x1261, 0x1268, 0x1273, 0x1277, + 0x105f, 0x106d, 0x1077, 0x1083, 0x108c, 0x1096, 0x10a0, 0x10a7, + 0x10af, 0x10bb, 0x10c0, 0x10c4, 0x10d8, 0x10de, 0x10e2, 0x10e9, + 0x10f2, 0x1102, 0x1109, 0x1112, 0x1116, 0x111b, 0x111f, 0x1125, + 0x112a, 0x112f, 0x1132, 0x1139, 0x1140, 0x1147, 0x114e, 0x1156, + 0x115e, 0x1169, 0x1172, 0x1178, 0x117e, 0x1186, 0x118f, 0x119d, + 0x11a4, 0x11aa, 0x11b1, 0x11ba, 0x11d5, 0x11db, 0x11e5, 0x11ec, + 0x11ff, 0x1202, 0x120b, 0x1211, 0x1224, 0x1238, 0x123f, 0x1243, + 0x1248, 0x124e, 0x1256, 0x125b, 0x1260, 0x1268, 0x1270, 0x1277, // Entry 240 - 27F - 0x127a, 0x1280, 0x1287, 0x128c, 0x1295, 0x129e, 0x12a6, 0x12b6, - 0x12c0, 0x12c6, 0x12e6, 0x12ea, 0x1308, 0x130c, 0x1324, 0x1324, - 0x1337, 0x134b, 0x1360, 0x1372, 0x138a, 0x13a4, 0x13c1, 0x13d2, - 0x13e5, 0x13e5, 0x13f8, 0x1409, 0x1414, 0x141c, 0x1431, 0x1444, - 0x144b, 0x1457, 0x146a, 0x147c, 0x148d, + 0x1282, 0x1286, 0x1289, 0x128f, 0x1296, 0x129b, 0x12a4, 0x12ad, + 0x12b5, 0x12c5, 0x12cf, 0x12d5, 0x12f5, 0x12f9, 0x1317, 0x131b, + 0x1333, 0x1333, 0x1346, 0x135a, 0x136f, 0x1381, 0x1399, 0x13b3, + 0x13d0, 0x13e1, 0x13f4, 0x13f4, 0x1407, 0x1418, 0x1423, 0x142b, + 0x1440, 0x1453, 0x145a, 0x1466, 0x1479, 0x148b, 0x149c, }, }, { // az @@ -635,14 +722,14 @@ var langHeaders = [252]header{ "ојраборо сеннитачелитшанҹәнуби самилуле самиинари самисколт самисон" + "инкесранан тонгосаһосукумакоморсуријатимнетесотетумтигреклингонток " + "писинтарокотумбукатувалутасавагтувинјанМәркәзи Атлас тамазиҹәсиудму" + - "ртумбундурутваивунјоваллесваламоварајкалмыксогајангбенјембакантонта" + - "мазизунидил мәзмуну јохдурзазамүасир стандарт әрәбАвстрија алманҹас" + - "ыИсвечрә јүксәк алманҹасыАвстралија инҝилисҹәсиКанада инҝилисҹәсиБр" + - "итанија инҝилисҹәсиАмерика инҝилисҹәсиЛатын Америкасы испанҹасыКаст" + - "илија испанҹасыМексика испанҹасыКанада франсызҹасыИсвечрә франсызҹа" + - "сыашағы саксонфламандБразилија португалҹасыПортугалија португалҹасы" + - "Конго суаһилиҹәсисадәләшмиш чинәнәнәви чин", - []uint16{ // 613 elements + "ртумбундунамәлум дилваивунјоваллесваламоварајкалмыксогајангбенјемба" + + "кантонтамазизунидил мәзмуну јохдурзазамүасир стандарт әрәбАвстрија " + + "алманҹасыИсвечрә јүксәк алманҹасыАвстралија инҝилисҹәсиКанада инҝил" + + "исҹәсиБританија инҝилисҹәсиАмерика инҝилисҹәсиЛатын Америкасы испан" + + "ҹасыКастилија испанҹасыМексика испанҹасыКанада франсызҹасыИсвечрә ф" + + "рансызҹасыашағы саксонфламандБразилија португалҹасыПортугалија порт" + + "угалҹасыКонго суаһилиҹәсисадәләшмиш чинәнәнәви чин", + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0008, 0x0012, 0x0012, 0x0024, 0x002c, 0x0036, 0x0042, 0x004a, 0x0054, 0x005c, 0x0068, 0x007c, 0x008a, 0x0098, 0x00a4, @@ -677,59 +764,59 @@ var langHeaders = [252]header{ 0x08c6, 0x08c6, 0x08d0, 0x08d0, 0x08d8, 0x08d8, 0x08d8, 0x08d8, 0x08e8, 0x08e8, 0x08f0, 0x08f0, 0x08f0, 0x08fe, 0x08fe, 0x08fe, 0x08fe, 0x08fe, 0x0906, 0x0906, 0x0906, 0x0910, 0x0910, 0x0918, - 0x0918, 0x0918, 0x0918, 0x0918, 0x0918, 0x0924, 0x092c, 0x092c, - 0x092c, 0x0936, 0x093e, 0x093e, 0x094a, 0x094a, 0x0956, 0x0960, - // Entry 100 - 13F - 0x096a, 0x096a, 0x096a, 0x096a, 0x0983, 0x0983, 0x098f, 0x099b, - 0x09a5, 0x09a5, 0x09a5, 0x09b1, 0x09b1, 0x09bb, 0x09bb, 0x09ce, - 0x09ce, 0x09d8, 0x09d8, 0x09e2, 0x09e2, 0x09ee, 0x09f6, 0x09fe, - 0x09fe, 0x09fe, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a16, 0x0a16, - 0x0a16, 0x0a26, 0x0a26, 0x0a2c, 0x0a2c, 0x0a2c, 0x0a2c, 0x0a2c, - 0x0a2c, 0x0a2c, 0x0a36, 0x0a3a, 0x0a3a, 0x0a3a, 0x0a3a, 0x0a3a, - 0x0a3a, 0x0a40, 0x0a4e, 0x0a4e, 0x0a4e, 0x0a4e, 0x0a4e, 0x0a4e, - 0x0a60, 0x0a60, 0x0a60, 0x0a60, 0x0a81, 0x0a81, 0x0a81, 0x0a89, + 0x0918, 0x0918, 0x0918, 0x0918, 0x0918, 0x0918, 0x0924, 0x092c, + 0x092c, 0x092c, 0x0936, 0x093e, 0x093e, 0x094a, 0x094a, 0x0956, + // Entry 100 - 13F + 0x0960, 0x096a, 0x096a, 0x096a, 0x096a, 0x0983, 0x0983, 0x098f, + 0x099b, 0x09a5, 0x09a5, 0x09a5, 0x09b1, 0x09b1, 0x09bb, 0x09bb, + 0x09ce, 0x09ce, 0x09d8, 0x09d8, 0x09e2, 0x09e2, 0x09ee, 0x09f6, + 0x09fe, 0x09fe, 0x09fe, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a0a, 0x0a16, + 0x0a16, 0x0a16, 0x0a26, 0x0a26, 0x0a2c, 0x0a2c, 0x0a2c, 0x0a2c, + 0x0a2c, 0x0a2c, 0x0a2c, 0x0a36, 0x0a3a, 0x0a3a, 0x0a3a, 0x0a3a, + 0x0a3a, 0x0a3a, 0x0a40, 0x0a4e, 0x0a4e, 0x0a4e, 0x0a4e, 0x0a4e, + 0x0a4e, 0x0a60, 0x0a60, 0x0a60, 0x0a60, 0x0a81, 0x0a81, 0x0a81, // Entry 140 - 17F - 0x0a95, 0x0a95, 0x0a95, 0x0a9f, 0x0a9f, 0x0ab3, 0x0ab3, 0x0abb, - 0x0ad0, 0x0ad0, 0x0ad8, 0x0ae0, 0x0aec, 0x0af6, 0x0b00, 0x0b00, - 0x0b00, 0x0b0c, 0x0b18, 0x0b22, 0x0b22, 0x0b22, 0x0b22, 0x0b22, - 0x0b2e, 0x0b38, 0x0b3c, 0x0b46, 0x0b46, 0x0b61, 0x0b61, 0x0b67, - 0x0b75, 0x0b8b, 0x0b8b, 0x0b93, 0x0b93, 0x0b9b, 0x0b9b, 0x0bb0, - 0x0bb0, 0x0bb0, 0x0bb8, 0x0bc8, 0x0bd8, 0x0bd8, 0x0be6, 0x0be6, - 0x0bf2, 0x0c0d, 0x0c0d, 0x0c0d, 0x0c17, 0x0c21, 0x0c2f, 0x0c39, - 0x0c41, 0x0c4b, 0x0c4b, 0x0c57, 0x0c61, 0x0c61, 0x0c61, 0x0c6b, + 0x0a89, 0x0a95, 0x0a95, 0x0a95, 0x0a9f, 0x0a9f, 0x0ab3, 0x0ab3, + 0x0abb, 0x0ad0, 0x0ad0, 0x0ad8, 0x0ae0, 0x0aec, 0x0af6, 0x0b00, + 0x0b00, 0x0b00, 0x0b0c, 0x0b18, 0x0b22, 0x0b22, 0x0b22, 0x0b22, + 0x0b22, 0x0b2e, 0x0b38, 0x0b3c, 0x0b46, 0x0b46, 0x0b61, 0x0b61, + 0x0b67, 0x0b75, 0x0b8b, 0x0b8b, 0x0b93, 0x0b93, 0x0b9b, 0x0b9b, + 0x0bb0, 0x0bb0, 0x0bb0, 0x0bb8, 0x0bc8, 0x0bd8, 0x0bd8, 0x0be6, + 0x0be6, 0x0bf2, 0x0c0d, 0x0c0d, 0x0c0d, 0x0c17, 0x0c21, 0x0c2f, + 0x0c39, 0x0c41, 0x0c4b, 0x0c4b, 0x0c57, 0x0c61, 0x0c61, 0x0c61, // Entry 180 - 1BF - 0x0c6b, 0x0c6b, 0x0c6b, 0x0c77, 0x0c77, 0x0c77, 0x0c7f, 0x0c94, - 0x0c94, 0x0ca7, 0x0ca7, 0x0cb1, 0x0cb7, 0x0cbf, 0x0cc9, 0x0cc9, - 0x0cc9, 0x0cd7, 0x0cd7, 0x0ce3, 0x0cf1, 0x0cff, 0x0cff, 0x0d09, - 0x0d09, 0x0d13, 0x0d13, 0x0d1d, 0x0d25, 0x0d35, 0x0d35, 0x0d4e, - 0x0d58, 0x0d64, 0x0d7a, 0x0d7a, 0x0d8a, 0x0d96, 0x0d9e, 0x0d9e, - 0x0dac, 0x0dc9, 0x0dd1, 0x0ddd, 0x0ddd, 0x0ddd, 0x0ddd, 0x0de7, - 0x0dfb, 0x0dfb, 0x0e0f, 0x0e17, 0x0e17, 0x0e23, 0x0e2b, 0x0e37, - 0x0e37, 0x0e43, 0x0e55, 0x0e5f, 0x0e5f, 0x0e5f, 0x0e65, 0x0e7a, + 0x0c6b, 0x0c6b, 0x0c6b, 0x0c6b, 0x0c77, 0x0c77, 0x0c77, 0x0c77, + 0x0c7f, 0x0c94, 0x0c94, 0x0ca7, 0x0ca7, 0x0cb1, 0x0cb7, 0x0cbf, + 0x0cc9, 0x0cc9, 0x0cc9, 0x0cd7, 0x0cd7, 0x0ce3, 0x0cf1, 0x0cff, + 0x0cff, 0x0d09, 0x0d09, 0x0d13, 0x0d13, 0x0d1d, 0x0d25, 0x0d35, + 0x0d35, 0x0d4e, 0x0d58, 0x0d64, 0x0d7a, 0x0d7a, 0x0d8a, 0x0d96, + 0x0d9e, 0x0d9e, 0x0dac, 0x0dc9, 0x0dd1, 0x0ddd, 0x0ddd, 0x0ddd, + 0x0ddd, 0x0de7, 0x0dfb, 0x0dfb, 0x0e0f, 0x0e17, 0x0e17, 0x0e23, + 0x0e2b, 0x0e37, 0x0e37, 0x0e43, 0x0e55, 0x0e5f, 0x0e5f, 0x0e5f, // Entry 1C0 - 1FF - 0x0e82, 0x0e82, 0x0e82, 0x0e90, 0x0e90, 0x0e90, 0x0e90, 0x0e90, - 0x0ea4, 0x0ea4, 0x0eb4, 0x0ec8, 0x0ed6, 0x0ed6, 0x0eeb, 0x0eeb, - 0x0eeb, 0x0eeb, 0x0eeb, 0x0eeb, 0x0eeb, 0x0eeb, 0x0eeb, 0x0ef5, - 0x0ef5, 0x0efd, 0x0efd, 0x0efd, 0x0f0b, 0x0f1f, 0x0f1f, 0x0f1f, - 0x0f29, 0x0f29, 0x0f29, 0x0f29, 0x0f29, 0x0f35, 0x0f3b, 0x0f49, - 0x0f51, 0x0f51, 0x0f5f, 0x0f5f, 0x0f6b, 0x0f6b, 0x0f79, 0x0f83, - 0x0f93, 0x0f9d, 0x0f9d, 0x0f9d, 0x0f9d, 0x0fa5, 0x0fa5, 0x0fa5, - 0x0fc2, 0x0fc2, 0x0fc2, 0x0fd0, 0x0fd6, 0x0fd6, 0x0fd6, 0x0fd6, + 0x0e65, 0x0e7a, 0x0e82, 0x0e82, 0x0e82, 0x0e90, 0x0e90, 0x0e90, + 0x0e90, 0x0e90, 0x0ea4, 0x0ea4, 0x0eb4, 0x0ec8, 0x0ed6, 0x0ed6, + 0x0eeb, 0x0eeb, 0x0eeb, 0x0eeb, 0x0eeb, 0x0eeb, 0x0eeb, 0x0eeb, + 0x0eeb, 0x0ef5, 0x0ef5, 0x0efd, 0x0efd, 0x0efd, 0x0f0b, 0x0f1f, + 0x0f1f, 0x0f1f, 0x0f29, 0x0f29, 0x0f29, 0x0f29, 0x0f29, 0x0f35, + 0x0f3b, 0x0f49, 0x0f51, 0x0f51, 0x0f5f, 0x0f5f, 0x0f6b, 0x0f6b, + 0x0f79, 0x0f83, 0x0f93, 0x0f9d, 0x0f9d, 0x0f9d, 0x0f9d, 0x0fa5, + 0x0fa5, 0x0fa5, 0x0fc2, 0x0fc2, 0x0fc2, 0x0fd0, 0x0fd6, 0x0fd6, // Entry 200 - 23F - 0x0fd6, 0x0feb, 0x0ffc, 0x100f, 0x1022, 0x1030, 0x1030, 0x1047, - 0x1047, 0x104f, 0x104f, 0x105b, 0x105b, 0x105b, 0x1065, 0x1065, - 0x1071, 0x1071, 0x1071, 0x107b, 0x1083, 0x1083, 0x108d, 0x1097, - 0x1097, 0x1097, 0x1097, 0x10a5, 0x10a5, 0x10a5, 0x10a5, 0x10a5, - 0x10b6, 0x10b6, 0x10c2, 0x10c2, 0x10c2, 0x10c2, 0x10d0, 0x10dc, - 0x10ea, 0x10fa, 0x1128, 0x1134, 0x1134, 0x1142, 0x1148, 0x114e, - 0x114e, 0x114e, 0x114e, 0x114e, 0x114e, 0x114e, 0x1158, 0x1164, - 0x1170, 0x117a, 0x117a, 0x117a, 0x117a, 0x1186, 0x1186, 0x118e, + 0x0fd6, 0x0fd6, 0x0fd6, 0x0feb, 0x0ffc, 0x100f, 0x1022, 0x1030, + 0x1030, 0x1047, 0x1047, 0x104f, 0x104f, 0x105b, 0x105b, 0x105b, + 0x1065, 0x1065, 0x1071, 0x1071, 0x1071, 0x107b, 0x1083, 0x1083, + 0x108d, 0x1097, 0x1097, 0x1097, 0x1097, 0x10a5, 0x10a5, 0x10a5, + 0x10a5, 0x10a5, 0x10b6, 0x10b6, 0x10c2, 0x10c2, 0x10c2, 0x10c2, + 0x10d0, 0x10dc, 0x10ea, 0x10fa, 0x1128, 0x1134, 0x1134, 0x1142, + 0x1157, 0x115d, 0x115d, 0x115d, 0x115d, 0x115d, 0x115d, 0x115d, + 0x1167, 0x1173, 0x117f, 0x1189, 0x1189, 0x1189, 0x1189, 0x1195, // Entry 240 - 27F - 0x118e, 0x118e, 0x119c, 0x11a6, 0x11a6, 0x11b2, 0x11b2, 0x11b2, - 0x11b2, 0x11b2, 0x11be, 0x11c6, 0x11e8, 0x11f0, 0x1216, 0x1216, - 0x1239, 0x1267, 0x1292, 0x12b5, 0x12de, 0x1303, 0x1333, 0x1358, - 0x1379, 0x1379, 0x139c, 0x13c1, 0x13d8, 0x13e6, 0x1411, 0x1440, - 0x1440, 0x1440, 0x1461, 0x147c, 0x1491, + 0x1195, 0x119d, 0x119d, 0x119d, 0x11ab, 0x11b5, 0x11b5, 0x11c1, + 0x11c1, 0x11c1, 0x11c1, 0x11c1, 0x11cd, 0x11d5, 0x11f7, 0x11ff, + 0x1225, 0x1225, 0x1248, 0x1276, 0x12a1, 0x12c4, 0x12ed, 0x1312, + 0x1342, 0x1367, 0x1388, 0x1388, 0x13ab, 0x13d0, 0x13e7, 0x13f5, + 0x1420, 0x144f, 0x144f, 0x144f, 0x1470, 0x148b, 0x14a0, }, }, { // bas @@ -795,44 +882,41 @@ var langHeaders = [252]header{ "вааромаорыяасецінскаяпанджабіпольскаяпуштупартугальскаякечуарэтарам" + "анскаярундзірумынскаярускаяруандасанскрытсардзінскаясіндхіпаўночнас" + "аамскаясангасінгальскаяславацкаяславенскаясамоашонасамаліалбанскаяс" + - "ербскаясуаціпаўднёвая сотасундашведскаясуахілітамільскаятэлугутаджы" + - "кскаятайскаятыгрыньятуркменскаятсванатанганскаятурэцкаятсонгататарс" + - "каятаіціуйгурскаяукраінскаяурдуузбекскаявендав’етнамскаявалапюквало" + - "нскаявалофкосаідышёрубакітайскаязулуачэхадангмэадыгейскаяагемайнска" + - "яакадскаяалеуцкаяпаўднёваалтайскаястараанглійскаяангікаарамейскаяма" + - "пудунгунарапахаасуастурыйскаяавадхібалійскаябасаабембабеназаходняя " + - "белуджскаябхаджпурыэдаблэкфутбодабурацкаябугісбіленсебуаначыгачыбча" + - "чуукмарычоктачэрокішэйенцэнтральнакурдскаякопцкаясэсэльвадакотадарг" + - "інскаятаітадогрыбзарманіжнялужыцкаядуаладжола-фоньідазагаэмбуэфікст" + - "аражытнаегіпецкаяэкаджукэвондафіліпінскаяфонстарафранцузскаяфрыульс" + - "каягагагаузскаягеэзкірыбацігаранталастаражытнагрэчаскаяшвейцарская " + - "нямецкаягусіігуіч’інгавайскаяхілігайнонхмонгверхнялужыцкаяхупаібані" + - "бібіяілаканаінгушскаяложбаннгомбамачамбэкабільскаякачынскаядджукамб" + - "акабардзінскаят’япмакондэкабувердыянукоракхасікойра чыінікакокаленд" + - "жынкімбундукомі-пярмяцкаяканканікпелекарачай-балкарскаякарэльскаяку" + - "рухшамбалабафіякёльнскаякумыцкаяладыналангілезгінскаялакотамонгалоз" + - "іпаўночная лурылуба-касаілундалуомізолуйямадурскаямагахімайтхілімак" + - "асармандынгмаасаймакшанскаямендэмерумарысьенмакуўа-меетаметамікмакм" + - "інангкабаумейтэймохакмосімундангнекалькі моўмускогімірандыйскаяэрзя" + - "нскаямазандэранскаянеапалітанскаянаманіжненямецкаянеўарыніасніўэнгу" + - "мбанг’ембоннагайскаястаранарвежскаянкопаўночная сотануэрньянколепан" + - "гасінанпампангапап’яментупалаунігерыйскі піджынстараперсідскаяфінік" + - "ійскаяпрускаястараправансальскаякічэраджастханскаярапануіраратонгро" + - "мбаарумунскаяруасандаўэякуцкаясамбурусанталінгамбайсангусіцылійская" + - "шатландскаяпаўднёвакурдскаясенакайрабора сэністараірландскаяташэльх" + - "ітшанпаўднёвасаамскаялуле-саамскаяінары-саамскаяколта-саамскаясанін" + - "кесранан-тонгасахасукумашумерскаякаморскаясірыйскаятэмнэтэсотэтумты" + - "грэклінганток-пісінтарокатумбукатувалутасаўактувінскаяцэнтральнаатл" + - "аская тамазіхтудмурцкаяумбундукораньваівунджовальшскаяволайтаварайв" + - "арлпірыкалмыцкаясогаянгбэнйембакантонскі дыялект кітайскайсапатэкст" + - "андартная мараканская тамазіхтзуніняма моўнага матэрыялузазакісучас" + - "ная стандартная арабскаяаўстрыйская нямецкаяшвейцарская стандартная" + - " нямецкаяаўстралійская англійскаяканадская англійскаябрытанская англ" + - "ійскаяамерыканская англійскаялацінаамерыканская іспанскаяеўрапейска" + - "я іспанскаямексіканская іспанскаяканадская французскаяшвейцарская ф" + - "ранцузскаяніжнесаксонскаяфламандскаябразільская партугальскаяеўрапе" + - "йская партугальскаямалдаўская румынскаясербскахарвацкаякангалезская" + - " суахіліспрошчаная кітайскаятрадыцыйная кітайская", + "ербскаясуацісесутасундашведскаясуахілітамільскаятэлугутаджыкскаятай" + + "скаятыгрыньятуркменскаятсванатанганскаятурэцкаятсонгататарскаятаіці" + + "уйгурскаяукраінскаяурдуузбекскаявендав’етнамскаявалапюквалонскаявал" + + "офкосаідышёрубакітайскаязулуачэхадангмэадыгейскаяагемайнскаяакадска" + + "яалеуцкаяпаўднёваалтайскаястараанглійскаяангікаарамейскаямапудунгун" + + "арапахаасуастурыйскаяавадхібалійскаябасаабембабеназаходняя белуджск" + + "аябхаджпурыэдаблэкфутбодабурацкаябугісбіленсебуаначыгачыбчачуукмары" + + "чоктачэрокішэйенцэнтральнакурдскаякопцкаясэсэльвадакотадаргінскаята" + + "ітадогрыбзарманіжнялужыцкаядуаладжола-фоньідазагаэмбуэфікстаражытна" + + "егіпецкаяэкаджукэвондафіліпінскаяфонстарафранцузскаяфрыульскаягагаг" + + "аузскаягеэзкірыбацігаранталастаражытнагрэчаскаяшвейцарская нямецкая" + + "гусіігуіч’інгавайскаяхілігайнонхмонгверхнялужыцкаяхупаібанібібіяіла" + + "канаінгушскаяложбаннгомбамачамбэкабільскаякачынскаядджукамбакабардз" + + "інскаят’япмакондэкабувердыянукоракхасікойра чыінікакокаленджынкімбу" + + "ндукомі-пярмяцкаяканканікпелекарачай-балкарскаякарэльскаякурухшамба" + + "лабафіякёльнскаякумыцкаяладыналангілезгінскаялакотамонгалозіпаўночн" + + "ая лурылуба-касаілундалуомізолуйямадурскаямагахімайтхілімакасарманд" + + "ынгмаасаймакшанскаямендэмерумарысьенмакуўа-меетаметамікмакмінангкаб" + + "аумейтэймохакмосімундангнекалькі моўмускогімірандыйскаяэрзянскаямаз" + + "андэранскаянеапалітанскаянаманіжненямецкаянеўарыніасніўэнгумбанг’ем" + + "боннагайскаястаранарвежскаянкопаўночная сотануэрньянколепангасінанп" + + "ампангапап’яментупалаунігерыйскі піджынстараперсідскаяфінікійскаяпр" + + "ускаястараправансальскаякічэраджастханскаярапануіраратонгромбааруму" + + "нскаяруасандаўэякуцкаясамбурусанталінгамбайсангусіцылійскаяшатландс" + + "каяпаўднёвакурдскаясенакайрабора сэністараірландскаяташэльхітшанпаў" + + "днёвасаамскаялуле-саамскаяінары-саамскаяколта-саамскаясанінкесранан" + + "-тонгасахасукумашумерскаякаморскаясірыйскаятэмнэтэсотэтумтыгрэклінга" + + "нток-пісінтарокатумбукатувалутасаўактувінскаяцэнтральнаатлаская там" + + "азіхтудмурцкаяумбундуневядомая моваваівунджовальшскаяволайтаварайва" + + "рлпірыкалмыцкаясогаянгбэнйембакантонскі дыялект кітайскайсапатэкста" + + "ндартная мараканская тамазіхтзуніняма моўнага матэрыялузазакілаціна" + + "амерыканская іспанскаяеўрапейская іспанскаямексіканская іспанскаяка" + + "надская французскаяшвейцарская французскаяніжнесаксонскаябразільска" + + "я партугальскаяеўрапейская партугальскаямалдаўская румынскаясербска" + + "харвацкаякангалезская суахілі", []uint16{ // 613 elements // Entry 0 - 3F 0x0000, 0x0010, 0x0022, 0x0022, 0x0034, 0x003c, 0x004e, 0x0062, @@ -855,72 +939,72 @@ var langHeaders = [252]header{ // Entry 80 - BF 0x08b0, 0x08ca, 0x08d4, 0x08ee, 0x08fa, 0x090c, 0x0918, 0x0924, 0x0934, 0x094a, 0x0956, 0x0976, 0x0980, 0x0996, 0x09a8, 0x09bc, - 0x09c6, 0x09ce, 0x09da, 0x09ec, 0x09fc, 0x0a06, 0x0a21, 0x0a2b, - 0x0a3b, 0x0a49, 0x0a5d, 0x0a69, 0x0a7d, 0x0a8b, 0x0a9b, 0x0ab1, - 0x0abd, 0x0ad1, 0x0ae1, 0x0aed, 0x0aff, 0x0b09, 0x0b1b, 0x0b2f, - 0x0b37, 0x0b49, 0x0b53, 0x0b6a, 0x0b78, 0x0b8a, 0x0b94, 0x0b9c, - 0x0ba4, 0x0bae, 0x0bae, 0x0bc0, 0x0bc8, 0x0bd0, 0x0bd0, 0x0bde, - 0x0bf2, 0x0bf2, 0x0bf2, 0x0bfa, 0x0c08, 0x0c18, 0x0c18, 0x0c28, - // Entry C0 - FF - 0x0c28, 0x0c4a, 0x0c68, 0x0c74, 0x0c88, 0x0c9c, 0x0c9c, 0x0caa, - 0x0caa, 0x0caa, 0x0caa, 0x0caa, 0x0caa, 0x0cb0, 0x0cb0, 0x0cc6, - 0x0cc6, 0x0cd2, 0x0cd2, 0x0ce4, 0x0ce4, 0x0cee, 0x0cee, 0x0cee, - 0x0cee, 0x0cee, 0x0cf8, 0x0cf8, 0x0d00, 0x0d00, 0x0d00, 0x0d25, - 0x0d37, 0x0d37, 0x0d3d, 0x0d3d, 0x0d3d, 0x0d4b, 0x0d4b, 0x0d4b, - 0x0d4b, 0x0d4b, 0x0d53, 0x0d53, 0x0d63, 0x0d6d, 0x0d6d, 0x0d77, - 0x0d77, 0x0d77, 0x0d77, 0x0d77, 0x0d77, 0x0d85, 0x0d8d, 0x0d97, - 0x0d97, 0x0d9f, 0x0da7, 0x0da7, 0x0db1, 0x0db1, 0x0dbd, 0x0dc7, - // Entry 100 - 13F - 0x0deb, 0x0df9, 0x0df9, 0x0df9, 0x0e09, 0x0e09, 0x0e15, 0x0e29, - 0x0e33, 0x0e33, 0x0e33, 0x0e3f, 0x0e3f, 0x0e49, 0x0e49, 0x0e63, - 0x0e63, 0x0e6d, 0x0e6d, 0x0e82, 0x0e82, 0x0e8e, 0x0e96, 0x0e9e, - 0x0e9e, 0x0ec4, 0x0ed2, 0x0ed2, 0x0ed2, 0x0ed2, 0x0ede, 0x0ede, - 0x0ede, 0x0ef4, 0x0ef4, 0x0efa, 0x0efa, 0x0efa, 0x0f1a, 0x0f1a, - 0x0f1a, 0x0f1a, 0x0f2e, 0x0f32, 0x0f46, 0x0f46, 0x0f46, 0x0f46, - 0x0f46, 0x0f4e, 0x0f5e, 0x0f5e, 0x0f5e, 0x0f5e, 0x0f5e, 0x0f5e, - 0x0f70, 0x0f70, 0x0f70, 0x0f96, 0x0fbd, 0x0fbd, 0x0fbd, 0x0fc7, + 0x09c6, 0x09ce, 0x09da, 0x09ec, 0x09fc, 0x0a06, 0x0a12, 0x0a1c, + 0x0a2c, 0x0a3a, 0x0a4e, 0x0a5a, 0x0a6e, 0x0a7c, 0x0a8c, 0x0aa2, + 0x0aae, 0x0ac2, 0x0ad2, 0x0ade, 0x0af0, 0x0afa, 0x0b0c, 0x0b20, + 0x0b28, 0x0b3a, 0x0b44, 0x0b5b, 0x0b69, 0x0b7b, 0x0b85, 0x0b8d, + 0x0b95, 0x0b9f, 0x0b9f, 0x0bb1, 0x0bb9, 0x0bc1, 0x0bc1, 0x0bcf, + 0x0be3, 0x0be3, 0x0be3, 0x0beb, 0x0bf9, 0x0c09, 0x0c09, 0x0c19, + // Entry C0 - FF + 0x0c19, 0x0c3b, 0x0c59, 0x0c65, 0x0c79, 0x0c8d, 0x0c8d, 0x0c9b, + 0x0c9b, 0x0c9b, 0x0c9b, 0x0c9b, 0x0c9b, 0x0ca1, 0x0ca1, 0x0cb7, + 0x0cb7, 0x0cc3, 0x0cc3, 0x0cd5, 0x0cd5, 0x0cdf, 0x0cdf, 0x0cdf, + 0x0cdf, 0x0cdf, 0x0ce9, 0x0ce9, 0x0cf1, 0x0cf1, 0x0cf1, 0x0d16, + 0x0d28, 0x0d28, 0x0d2e, 0x0d2e, 0x0d2e, 0x0d3c, 0x0d3c, 0x0d3c, + 0x0d3c, 0x0d3c, 0x0d44, 0x0d44, 0x0d54, 0x0d5e, 0x0d5e, 0x0d68, + 0x0d68, 0x0d68, 0x0d68, 0x0d68, 0x0d68, 0x0d68, 0x0d76, 0x0d7e, + 0x0d88, 0x0d88, 0x0d90, 0x0d98, 0x0d98, 0x0da2, 0x0da2, 0x0dae, + // Entry 100 - 13F + 0x0db8, 0x0ddc, 0x0dea, 0x0dea, 0x0dea, 0x0dfa, 0x0dfa, 0x0e06, + 0x0e1a, 0x0e24, 0x0e24, 0x0e24, 0x0e30, 0x0e30, 0x0e3a, 0x0e3a, + 0x0e54, 0x0e54, 0x0e5e, 0x0e5e, 0x0e73, 0x0e73, 0x0e7f, 0x0e87, + 0x0e8f, 0x0e8f, 0x0eb5, 0x0ec3, 0x0ec3, 0x0ec3, 0x0ec3, 0x0ecf, + 0x0ecf, 0x0ecf, 0x0ee5, 0x0ee5, 0x0eeb, 0x0eeb, 0x0eeb, 0x0f0b, + 0x0f0b, 0x0f0b, 0x0f0b, 0x0f1f, 0x0f23, 0x0f37, 0x0f37, 0x0f37, + 0x0f37, 0x0f37, 0x0f3f, 0x0f4f, 0x0f4f, 0x0f4f, 0x0f4f, 0x0f4f, + 0x0f4f, 0x0f61, 0x0f61, 0x0f61, 0x0f87, 0x0fae, 0x0fae, 0x0fae, // Entry 140 - 17F - 0x0fd6, 0x0fd6, 0x0fd6, 0x0fe8, 0x0fe8, 0x0ffc, 0x0ffc, 0x1006, - 0x1022, 0x1022, 0x102a, 0x1032, 0x103e, 0x104c, 0x105e, 0x105e, - 0x105e, 0x106a, 0x1076, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, - 0x1098, 0x10aa, 0x10b2, 0x10bc, 0x10bc, 0x10d6, 0x10d6, 0x10df, - 0x10ed, 0x1105, 0x1105, 0x110d, 0x110d, 0x1117, 0x1117, 0x112c, - 0x112c, 0x112c, 0x1134, 0x1146, 0x1156, 0x1171, 0x117f, 0x117f, - 0x1189, 0x11ac, 0x11ac, 0x11ac, 0x11c0, 0x11ca, 0x11d8, 0x11e2, - 0x11f4, 0x1204, 0x1204, 0x1210, 0x121a, 0x121a, 0x121a, 0x122e, + 0x0fb8, 0x0fc7, 0x0fc7, 0x0fc7, 0x0fd9, 0x0fd9, 0x0fed, 0x0fed, + 0x0ff7, 0x1013, 0x1013, 0x101b, 0x1023, 0x102f, 0x103d, 0x104f, + 0x104f, 0x104f, 0x105b, 0x1067, 0x1075, 0x1075, 0x1075, 0x1075, + 0x1075, 0x1089, 0x109b, 0x10a3, 0x10ad, 0x10ad, 0x10c7, 0x10c7, + 0x10d0, 0x10de, 0x10f6, 0x10f6, 0x10fe, 0x10fe, 0x1108, 0x1108, + 0x111d, 0x111d, 0x111d, 0x1125, 0x1137, 0x1147, 0x1162, 0x1170, + 0x1170, 0x117a, 0x119d, 0x119d, 0x119d, 0x11b1, 0x11bb, 0x11c9, + 0x11d3, 0x11e5, 0x11f5, 0x11f5, 0x1201, 0x120b, 0x120b, 0x120b, // Entry 180 - 1BF - 0x122e, 0x122e, 0x122e, 0x123a, 0x123a, 0x1244, 0x124c, 0x1267, - 0x1267, 0x127a, 0x127a, 0x1284, 0x128a, 0x1292, 0x129a, 0x129a, - 0x129a, 0x12ac, 0x12ac, 0x12b8, 0x12c8, 0x12d6, 0x12e4, 0x12f0, - 0x12f0, 0x1304, 0x1304, 0x130e, 0x1316, 0x1326, 0x1326, 0x133d, - 0x1345, 0x1351, 0x1367, 0x1367, 0x1373, 0x137d, 0x1385, 0x1385, - 0x1393, 0x13aa, 0x13b8, 0x13d0, 0x13d0, 0x13d0, 0x13d0, 0x13e2, - 0x13fe, 0x13fe, 0x141a, 0x1422, 0x143c, 0x1448, 0x1450, 0x1458, - 0x1458, 0x1464, 0x1475, 0x1487, 0x14a5, 0x14a5, 0x14ab, 0x14c6, + 0x121f, 0x121f, 0x121f, 0x121f, 0x122b, 0x122b, 0x1235, 0x1235, + 0x123d, 0x1258, 0x1258, 0x126b, 0x126b, 0x1275, 0x127b, 0x1283, + 0x128b, 0x128b, 0x128b, 0x129d, 0x129d, 0x12a9, 0x12b9, 0x12c7, + 0x12d5, 0x12e1, 0x12e1, 0x12f5, 0x12f5, 0x12ff, 0x1307, 0x1317, + 0x1317, 0x132e, 0x1336, 0x1342, 0x1358, 0x1358, 0x1364, 0x136e, + 0x1376, 0x1376, 0x1384, 0x139b, 0x13a9, 0x13c1, 0x13c1, 0x13c1, + 0x13c1, 0x13d3, 0x13ef, 0x13ef, 0x140b, 0x1413, 0x142d, 0x1439, + 0x1441, 0x1449, 0x1449, 0x1455, 0x1466, 0x1478, 0x1496, 0x1496, // Entry 1C0 - 1FF - 0x14ce, 0x14ce, 0x14ce, 0x14de, 0x14de, 0x14de, 0x14de, 0x14de, - 0x14f2, 0x14f2, 0x1502, 0x1517, 0x1521, 0x1521, 0x1542, 0x1542, - 0x1542, 0x1560, 0x1560, 0x1576, 0x1576, 0x1576, 0x1576, 0x1584, - 0x15aa, 0x15b2, 0x15b2, 0x15ce, 0x15dc, 0x15ec, 0x15ec, 0x15ec, - 0x15f6, 0x15f6, 0x15f6, 0x15f6, 0x15f6, 0x160a, 0x1610, 0x161e, - 0x162c, 0x162c, 0x163a, 0x163a, 0x1648, 0x1648, 0x1656, 0x1660, - 0x1676, 0x168c, 0x168c, 0x16ac, 0x16ac, 0x16b4, 0x16b4, 0x16b4, - 0x16cf, 0x16ed, 0x16ed, 0x16ff, 0x1705, 0x1705, 0x1705, 0x1705, + 0x149c, 0x14b7, 0x14bf, 0x14bf, 0x14bf, 0x14cf, 0x14cf, 0x14cf, + 0x14cf, 0x14cf, 0x14e3, 0x14e3, 0x14f3, 0x1508, 0x1512, 0x1512, + 0x1533, 0x1533, 0x1533, 0x1551, 0x1551, 0x1567, 0x1567, 0x1567, + 0x1567, 0x1575, 0x159b, 0x15a3, 0x15a3, 0x15bf, 0x15cd, 0x15dd, + 0x15dd, 0x15dd, 0x15e7, 0x15e7, 0x15e7, 0x15e7, 0x15e7, 0x15fb, + 0x1601, 0x160f, 0x161d, 0x161d, 0x162b, 0x162b, 0x1639, 0x1639, + 0x1647, 0x1651, 0x1667, 0x167d, 0x167d, 0x169d, 0x169d, 0x16a5, + 0x16a5, 0x16a5, 0x16c0, 0x16de, 0x16de, 0x16f0, 0x16f6, 0x16f6, // Entry 200 - 23F - 0x1705, 0x1725, 0x173e, 0x1759, 0x1774, 0x1782, 0x1782, 0x1799, - 0x1799, 0x17a1, 0x17a1, 0x17ad, 0x17ad, 0x17bf, 0x17d1, 0x17d1, - 0x17e3, 0x17e3, 0x17e3, 0x17ed, 0x17f5, 0x17f5, 0x17ff, 0x1809, - 0x1809, 0x1809, 0x1809, 0x1817, 0x1817, 0x1817, 0x1817, 0x1817, - 0x1828, 0x1828, 0x1834, 0x1834, 0x1834, 0x1834, 0x1842, 0x184e, - 0x185c, 0x186e, 0x18a3, 0x18b5, 0x18b5, 0x18c3, 0x18cf, 0x18d5, - 0x18d5, 0x18d5, 0x18d5, 0x18d5, 0x18d5, 0x18d5, 0x18e1, 0x18f3, - 0x1901, 0x190b, 0x190b, 0x191b, 0x191b, 0x192d, 0x192d, 0x1935, + 0x16f6, 0x16f6, 0x16f6, 0x1716, 0x172f, 0x174a, 0x1765, 0x1773, + 0x1773, 0x178a, 0x178a, 0x1792, 0x1792, 0x179e, 0x179e, 0x17b0, + 0x17c2, 0x17c2, 0x17d4, 0x17d4, 0x17d4, 0x17de, 0x17e6, 0x17e6, + 0x17f0, 0x17fa, 0x17fa, 0x17fa, 0x17fa, 0x1808, 0x1808, 0x1808, + 0x1808, 0x1808, 0x1819, 0x1819, 0x1825, 0x1825, 0x1825, 0x1825, + 0x1833, 0x183f, 0x184d, 0x185f, 0x1894, 0x18a6, 0x18a6, 0x18b4, + 0x18cf, 0x18d5, 0x18d5, 0x18d5, 0x18d5, 0x18d5, 0x18d5, 0x18d5, + 0x18e1, 0x18f3, 0x1901, 0x190b, 0x190b, 0x191b, 0x191b, 0x192d, // Entry 240 - 27F - 0x1935, 0x1935, 0x1941, 0x194b, 0x194b, 0x197f, 0x198d, 0x198d, - 0x198d, 0x198d, 0x19cb, 0x19d3, 0x19fd, 0x1a09, 0x1a41, 0x1a41, - 0x1a68, 0x1aa6, 0x1ad5, 0x1afc, 0x1b25, 0x1b52, 0x1b89, 0x1bb2, - 0x1bdd, 0x1bdd, 0x1c06, 0x1c33, 0x1c51, 0x1c67, 0x1c98, 0x1cc9, - 0x1cf0, 0x1d10, 0x1d37, 0x1d5e, 0x1d87, + 0x192d, 0x1935, 0x1935, 0x1935, 0x1941, 0x194b, 0x194b, 0x197f, + 0x198d, 0x198d, 0x198d, 0x198d, 0x19cb, 0x19d3, 0x19fd, 0x1a09, + 0x1a09, 0x1a09, 0x1a09, 0x1a09, 0x1a09, 0x1a09, 0x1a09, 0x1a09, + 0x1a40, 0x1a69, 0x1a94, 0x1a94, 0x1abd, 0x1aea, 0x1b08, 0x1b08, + 0x1b39, 0x1b6a, 0x1b91, 0x1bb1, 0x1bd8, }, }, { // bem @@ -1056,7 +1140,7 @@ var langHeaders = [252]header{ }, { // bn-IN "কোলোনিয়ান", - []uint16{ // 377 elements + []uint16{ // 378 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -1110,14 +1194,14 @@ var langHeaders = [252]header{ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x001e, + 0x0000, 0x001e, }, }, { // bo "བོད་སྐད་རྫོང་ཁདབྱིན་ཇིའི་སྐད།ཧིན་དིཉི་ཧོང་སྐད་ནེ་པ་ལིཨུ་རུ་སུ་སྐད་རྒྱ་སྐ" + "ད་ཟ་ཟའ་སྐད།དབྱིན་ཇིའི་སྐད། (ཁེ་ན་ཌ་)དབྱིན་ཇིའི་སྐད། (དབྱིན་ལན་)དབྱ" + "ིན་ཇིའི་སྐད། (ཨ་རི་)", - []uint16{ // 598 elements + []uint16{ // 600 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -1201,8 +1285,8 @@ var langHeaders = [252]header{ 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, // Entry 240 - 27F 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, - 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00f9, 0x00f9, 0x00f9, - 0x00f9, 0x00f9, 0x00f9, 0x013e, 0x0189, 0x01c8, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00f9, + 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x013e, 0x0189, 0x01c8, }, }, {}, // bo-IN @@ -1265,7 +1349,7 @@ var langHeaders = [252]header{ "g Kanadagalleg Suissaksoneg izelflandrezegportugaleg Brazilportugale" + "g Europamoldovegserb-kroategswahili Kongosinaeg eeunaetsinaeg hengou" + "nel", - []uint16{ // 613 elements + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0004, 0x000c, 0x0013, 0x001c, 0x0020, 0x0027, 0x002f, 0x0035, 0x003b, 0x003f, 0x0045, 0x0052, 0x0059, 0x0062, 0x006a, @@ -1300,59 +1384,59 @@ var langHeaders = [252]header{ 0x0642, 0x064a, 0x064f, 0x064f, 0x0653, 0x0653, 0x0653, 0x066a, 0x0672, 0x0677, 0x067b, 0x067b, 0x067b, 0x067b, 0x067b, 0x067b, 0x067f, 0x0686, 0x068a, 0x0690, 0x0697, 0x069b, 0x069b, 0x069f, - 0x069f, 0x06a4, 0x06ab, 0x06ab, 0x06b0, 0x06b7, 0x06b7, 0x06be, - 0x06be, 0x06be, 0x06c4, 0x06c4, 0x06cb, 0x06d4, 0x06dc, 0x06e4, - // Entry 100 - 13F - 0x06f1, 0x06f7, 0x06f7, 0x0704, 0x0704, 0x070d, 0x0713, 0x0719, - 0x0719, 0x0721, 0x0721, 0x0727, 0x072c, 0x072c, 0x0731, 0x073c, - 0x073c, 0x073c, 0x074d, 0x074d, 0x0752, 0x0752, 0x0756, 0x075a, - 0x075a, 0x0764, 0x076a, 0x0770, 0x077c, 0x077c, 0x0782, 0x0782, - 0x0786, 0x078f, 0x07a9, 0x07ac, 0x07b8, 0x07c6, 0x07d2, 0x07db, - 0x07ea, 0x07f9, 0x0803, 0x0805, 0x080e, 0x0818, 0x081c, 0x0821, - 0x0821, 0x0826, 0x082f, 0x082f, 0x0841, 0x0851, 0x0851, 0x0851, - 0x085a, 0x085f, 0x0864, 0x0873, 0x0880, 0x0880, 0x0880, 0x0880, + 0x069f, 0x06a4, 0x06ab, 0x06ab, 0x06b0, 0x06b0, 0x06b7, 0x06b7, + 0x06be, 0x06be, 0x06be, 0x06c4, 0x06c4, 0x06cb, 0x06d4, 0x06dc, + // Entry 100 - 13F + 0x06e4, 0x06f1, 0x06f7, 0x06f7, 0x0704, 0x0704, 0x070d, 0x0713, + 0x0719, 0x0719, 0x0721, 0x0721, 0x0727, 0x072c, 0x072c, 0x0731, + 0x073c, 0x073c, 0x073c, 0x074d, 0x074d, 0x0752, 0x0752, 0x0756, + 0x075a, 0x075a, 0x0764, 0x076a, 0x0770, 0x077c, 0x077c, 0x0782, + 0x0782, 0x0786, 0x078f, 0x07a9, 0x07ac, 0x07b8, 0x07c6, 0x07d2, + 0x07db, 0x07ea, 0x07f9, 0x0803, 0x0805, 0x080e, 0x0818, 0x081c, + 0x0821, 0x0821, 0x0826, 0x082f, 0x082f, 0x0841, 0x0851, 0x0851, + 0x0851, 0x085a, 0x085f, 0x0864, 0x0873, 0x0880, 0x0880, 0x0880, // Entry 140 - 17F - 0x0880, 0x0885, 0x0891, 0x0898, 0x0898, 0x08a2, 0x08a2, 0x08a7, - 0x08b2, 0x08bd, 0x08c1, 0x08c5, 0x08cb, 0x08cb, 0x08d4, 0x08d4, - 0x08e3, 0x08e3, 0x08e3, 0x08e3, 0x08ef, 0x08fb, 0x08fb, 0x0905, - 0x090c, 0x0912, 0x0912, 0x0917, 0x0917, 0x091f, 0x091f, 0x091f, - 0x091f, 0x092b, 0x092b, 0x092b, 0x092b, 0x0930, 0x0938, 0x0938, - 0x0938, 0x0938, 0x0938, 0x0938, 0x0940, 0x0940, 0x0947, 0x094d, - 0x0953, 0x0963, 0x0963, 0x0963, 0x096b, 0x0971, 0x0971, 0x0971, - 0x0978, 0x0978, 0x097f, 0x0985, 0x0985, 0x098b, 0x0990, 0x0995, + 0x0880, 0x0880, 0x0885, 0x0891, 0x0898, 0x0898, 0x08a2, 0x08a2, + 0x08a7, 0x08b2, 0x08bd, 0x08c1, 0x08c5, 0x08cb, 0x08cb, 0x08d4, + 0x08d4, 0x08e3, 0x08e3, 0x08e3, 0x08e3, 0x08ef, 0x08fb, 0x08fb, + 0x0905, 0x090c, 0x0912, 0x0912, 0x0917, 0x0917, 0x091f, 0x091f, + 0x091f, 0x091f, 0x092b, 0x092b, 0x092b, 0x092b, 0x0930, 0x0938, + 0x0938, 0x0938, 0x0938, 0x0938, 0x0938, 0x0940, 0x0940, 0x0947, + 0x094d, 0x0953, 0x0963, 0x0963, 0x0963, 0x096b, 0x0971, 0x0971, + 0x0971, 0x0978, 0x0978, 0x097f, 0x0985, 0x0985, 0x098b, 0x0990, // Entry 180 - 1BF - 0x09a7, 0x09af, 0x09af, 0x09af, 0x09af, 0x09b4, 0x09b8, 0x09b8, - 0x09b8, 0x09c2, 0x09c9, 0x09ce, 0x09d1, 0x09d7, 0x09dc, 0x09eb, - 0x09eb, 0x09eb, 0x09eb, 0x09f1, 0x09f9, 0x09f9, 0x09f9, 0x09fe, - 0x09fe, 0x0a04, 0x0a0a, 0x0a0f, 0x0a0f, 0x0a16, 0x0a25, 0x0a25, - 0x0a25, 0x0a25, 0x0a25, 0x0a2c, 0x0a34, 0x0a3a, 0x0a3a, 0x0a4e, - 0x0a4e, 0x0a5a, 0x0a61, 0x0a69, 0x0a69, 0x0a69, 0x0a69, 0x0a6d, - 0x0a6d, 0x0a7b, 0x0a86, 0x0a86, 0x0a93, 0x0a99, 0x0a9d, 0x0aa1, - 0x0aa5, 0x0aa5, 0x0aa5, 0x0aaa, 0x0ab3, 0x0ab9, 0x0ab9, 0x0ac7, + 0x0995, 0x09a7, 0x09af, 0x09af, 0x09af, 0x09af, 0x09b4, 0x09b4, + 0x09b8, 0x09b8, 0x09b8, 0x09c2, 0x09c9, 0x09ce, 0x09d1, 0x09d7, + 0x09dc, 0x09eb, 0x09eb, 0x09eb, 0x09eb, 0x09f1, 0x09f9, 0x09f9, + 0x09f9, 0x09fe, 0x09fe, 0x0a04, 0x0a0a, 0x0a0f, 0x0a0f, 0x0a16, + 0x0a25, 0x0a25, 0x0a25, 0x0a25, 0x0a25, 0x0a2c, 0x0a34, 0x0a3a, + 0x0a3a, 0x0a4e, 0x0a4e, 0x0a5a, 0x0a61, 0x0a69, 0x0a69, 0x0a69, + 0x0a69, 0x0a6d, 0x0a6d, 0x0a7b, 0x0a86, 0x0a86, 0x0a93, 0x0a99, + 0x0a9d, 0x0aa1, 0x0aa5, 0x0aa5, 0x0aa5, 0x0aaa, 0x0ab3, 0x0ab9, // Entry 1C0 - 1FF - 0x0ac7, 0x0ad4, 0x0adc, 0x0ae4, 0x0ae9, 0x0ae9, 0x0aee, 0x0afb, - 0x0b05, 0x0b0c, 0x0b14, 0x0b1e, 0x0b23, 0x0b2b, 0x0b2b, 0x0b40, - 0x0b40, 0x0b49, 0x0b49, 0x0b53, 0x0b5c, 0x0b62, 0x0b69, 0x0b72, - 0x0b7f, 0x0b7f, 0x0b92, 0x0b9c, 0x0ba3, 0x0bac, 0x0bb6, 0x0bb6, - 0x0bbb, 0x0bc3, 0x0bc3, 0x0bc3, 0x0bc3, 0x0bcc, 0x0bcf, 0x0bd6, - 0x0bde, 0x0bf4, 0x0bf4, 0x0bf9, 0x0c00, 0x0c00, 0x0c00, 0x0c00, - 0x0c08, 0x0c0e, 0x0c17, 0x0c17, 0x0c17, 0x0c17, 0x0c17, 0x0c17, - 0x0c17, 0x0c24, 0x0c24, 0x0c2e, 0x0c32, 0x0c3e, 0x0c44, 0x0c44, + 0x0ab9, 0x0ac7, 0x0ac7, 0x0ad4, 0x0adc, 0x0ae4, 0x0ae9, 0x0ae9, + 0x0aee, 0x0afb, 0x0b05, 0x0b0c, 0x0b14, 0x0b1e, 0x0b23, 0x0b2b, + 0x0b2b, 0x0b40, 0x0b40, 0x0b49, 0x0b49, 0x0b53, 0x0b5c, 0x0b62, + 0x0b69, 0x0b72, 0x0b7f, 0x0b7f, 0x0b92, 0x0b9c, 0x0ba3, 0x0bac, + 0x0bb6, 0x0bb6, 0x0bbb, 0x0bc3, 0x0bc3, 0x0bc3, 0x0bc3, 0x0bcc, + 0x0bcf, 0x0bd6, 0x0bde, 0x0bf4, 0x0bf4, 0x0bf9, 0x0c00, 0x0c00, + 0x0c00, 0x0c00, 0x0c08, 0x0c0e, 0x0c17, 0x0c17, 0x0c17, 0x0c17, + 0x0c17, 0x0c17, 0x0c17, 0x0c24, 0x0c24, 0x0c2e, 0x0c32, 0x0c3e, // Entry 200 - 23F - 0x0c44, 0x0c4f, 0x0c5b, 0x0c66, 0x0c71, 0x0c78, 0x0c7f, 0x0c7f, - 0x0c84, 0x0c84, 0x0c84, 0x0c84, 0x0c84, 0x0c8b, 0x0c92, 0x0c9f, - 0x0ca5, 0x0cad, 0x0cb5, 0x0cb5, 0x0cb5, 0x0cbb, 0x0cc0, 0x0cc9, - 0x0ccc, 0x0cd3, 0x0cd3, 0x0cda, 0x0ce1, 0x0ce1, 0x0ce9, 0x0cf4, - 0x0cfd, 0x0d05, 0x0d05, 0x0d05, 0x0d0e, 0x0d0e, 0x0d15, 0x0d1b, - 0x0d1b, 0x0d20, 0x0d35, 0x0d3f, 0x0d48, 0x0d4f, 0x0d5a, 0x0d5d, - 0x0d65, 0x0d6b, 0x0d84, 0x0d84, 0x0d8c, 0x0d92, 0x0d92, 0x0d98, - 0x0d9e, 0x0da3, 0x0da8, 0x0da8, 0x0db1, 0x0db8, 0x0dc0, 0x0dc0, + 0x0c44, 0x0c44, 0x0c44, 0x0c4f, 0x0c5b, 0x0c66, 0x0c71, 0x0c78, + 0x0c7f, 0x0c7f, 0x0c84, 0x0c84, 0x0c84, 0x0c84, 0x0c84, 0x0c8b, + 0x0c92, 0x0c9f, 0x0ca5, 0x0cad, 0x0cb5, 0x0cb5, 0x0cb5, 0x0cbb, + 0x0cc0, 0x0cc9, 0x0ccc, 0x0cd3, 0x0cd3, 0x0cda, 0x0ce1, 0x0ce1, + 0x0ce9, 0x0cf4, 0x0cfd, 0x0d05, 0x0d05, 0x0d05, 0x0d0e, 0x0d0e, + 0x0d15, 0x0d1b, 0x0d1b, 0x0d20, 0x0d35, 0x0d3f, 0x0d48, 0x0d4f, + 0x0d5a, 0x0d5d, 0x0d65, 0x0d6b, 0x0d84, 0x0d84, 0x0d8c, 0x0d92, + 0x0d92, 0x0d98, 0x0d9e, 0x0da3, 0x0da8, 0x0da8, 0x0db1, 0x0db8, // Entry 240 - 27F - 0x0dc3, 0x0dc8, 0x0dc8, 0x0dc8, 0x0dc8, 0x0dd0, 0x0dd7, 0x0ddc, - 0x0de4, 0x0dea, 0x0e02, 0x0e06, 0x0e0c, 0x0e0c, 0x0e19, 0x0e19, - 0x0e29, 0x0e3b, 0x0e4c, 0x0e5a, 0x0e6d, 0x0e7c, 0x0e93, 0x0ea3, - 0x0eb6, 0x0eb6, 0x0ec3, 0x0ece, 0x0edb, 0x0ee5, 0x0ef6, 0x0f07, - 0x0f0f, 0x0f1b, 0x0f28, 0x0f36, 0x0f46, + 0x0dc0, 0x0dc0, 0x0dc3, 0x0dc8, 0x0dc8, 0x0dc8, 0x0dc8, 0x0dd0, + 0x0dd7, 0x0ddc, 0x0de4, 0x0dea, 0x0e02, 0x0e06, 0x0e0c, 0x0e0c, + 0x0e19, 0x0e19, 0x0e29, 0x0e3b, 0x0e4c, 0x0e5a, 0x0e6d, 0x0e7c, + 0x0e93, 0x0ea3, 0x0eb6, 0x0eb6, 0x0ec3, 0x0ece, 0x0edb, 0x0ee5, + 0x0ef6, 0x0f07, 0x0f0f, 0x0f1b, 0x0f28, 0x0f36, 0x0f46, }, }, { // brx @@ -1400,13 +1484,13 @@ var langHeaders = [252]header{ "ीलुले सामीईनारी सामीस्कोल्ट् सामीसोनिंगकेसोगडीयनस्रनान् टॉंगोसेरेर" + "सुकुमासुसुसुमेरिअनपारंपरीक सिरिआकसिरिआकतीमनेतेरेनोतेतुमटीग्रेटीव्ट" + "ोकेलौक्लींगदनट्लिंगीततमाशेकन्यासा टॉंगातोक पिसीनत्सीमशीआन्टुँबुकाट" + - "ुवालुटुवीउड़मुर्तउगारितीउंबुंडुरुटवाईवोटीकवालामोवारयवाशोकालमीकयाओय" + - "ापीज़ज़ापोतेकब्लीस चिन्हज़ेनागाज़ुनीरिक्तज़ाज़ाजर्मन (ऑस्ट्रिया)उच" + - "्च स्तरिय स्वीस जर्मनअंग्रेज़ी (ऑस्ट्रेलिया का)अंग्रेज़ी (कनाडाई)अ" + - "ंग्रेजी (ब्रिटिश)अंग्रेज़ी (अमरिकी)लैटिन अमरिकी स्पैनिशईवेरियाई स्" + - "पैनिशफ्रांसीसी (कनाडाई)फ्रांसीसी (स्वीस)फ्लेमीमोल्डेवियन्सर्बो-क्र" + - "ोएशन्चीनी (सरलीकृत)चीनी (पारम्परिक)", - []uint16{ // 613 elements + "ुवालुटुवीउड़मुर्तउगारितीउंबुंडुअज्ञात या अवैध भाषावाईवोटीकवालामोवा" + + "रयवाशोकालमीकयाओयापीज़ज़ापोतेकब्लीस चिन्हज़ेनागाज़ुनीरिक्तज़ाज़ाजर्" + + "मन (ऑस्ट्रिया)उच्च स्तरिय स्वीस जर्मनअंग्रेज़ी (ऑस्ट्रेलिया का)अंग" + + "्रेज़ी (कनाडाई)अंग्रेजी (ब्रिटिश)अंग्रेज़ी (अमरिकी)लैटिन अमरिकी स्" + + "पैनिशईवेरियाई स्पैनिशफ्रांसीसी (कनाडाई)फ्रांसीसी (स्वीस)फ्लेमीमोल्" + + "डेवियन्सर्बो-क्रोएशन्चीनी (सरलीकृत)चीनी (पारम्परिक)", + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0021, 0x0036, 0x004b, 0x0054, 0x006f, 0x0084, 0x0090, 0x009f, 0x00b4, 0x00c6, 0x00e4, 0x00f9, 0x011a, 0x0138, @@ -1441,59 +1525,59 @@ var langHeaders = [252]header{ 0x10c3, 0x10cf, 0x10de, 0x10de, 0x10de, 0x10de, 0x10de, 0x10de, 0x10f3, 0x1105, 0x1111, 0x1111, 0x1111, 0x1126, 0x1126, 0x1126, 0x1132, 0x1132, 0x113e, 0x113e, 0x1153, 0x1165, 0x1165, 0x1174, - 0x1174, 0x1186, 0x1198, 0x1198, 0x11a7, 0x11bc, 0x11bc, 0x11cb, - 0x11da, 0x11ec, 0x11f8, 0x1220, 0x1232, 0x1250, 0x1262, 0x1274, - // Entry 100 - 13F - 0x1274, 0x128c, 0x128c, 0x12b7, 0x12b7, 0x12d5, 0x12e4, 0x12f6, - 0x12f6, 0x130b, 0x131d, 0x1332, 0x1344, 0x1344, 0x1353, 0x136e, - 0x136e, 0x137d, 0x1390, 0x1390, 0x13a5, 0x13a5, 0x13a5, 0x13b4, - 0x13b4, 0x13dc, 0x13ee, 0x13fd, 0x1425, 0x1425, 0x1437, 0x1437, - 0x1446, 0x145e, 0x145e, 0x1467, 0x1467, 0x148f, 0x14bd, 0x14bd, - 0x14ee, 0x151f, 0x153d, 0x1543, 0x1543, 0x1543, 0x154f, 0x1561, - 0x1561, 0x1570, 0x1588, 0x1588, 0x15c0, 0x15fe, 0x15fe, 0x160d, - 0x1625, 0x1634, 0x1646, 0x166e, 0x168d, 0x168d, 0x168d, 0x168d, + 0x1174, 0x1186, 0x1198, 0x1198, 0x11a7, 0x11a7, 0x11bc, 0x11bc, + 0x11cb, 0x11da, 0x11ec, 0x11f8, 0x1220, 0x1232, 0x1250, 0x1262, + // Entry 100 - 13F + 0x1274, 0x1274, 0x128c, 0x128c, 0x12b7, 0x12b7, 0x12d5, 0x12e4, + 0x12f6, 0x12f6, 0x130b, 0x131d, 0x1332, 0x1344, 0x1344, 0x1353, + 0x136e, 0x136e, 0x137d, 0x1390, 0x1390, 0x13a5, 0x13a5, 0x13a5, + 0x13b4, 0x13b4, 0x13dc, 0x13ee, 0x13fd, 0x1425, 0x1425, 0x1437, + 0x1437, 0x1446, 0x145e, 0x145e, 0x1467, 0x1467, 0x148f, 0x14bd, + 0x14bd, 0x14ee, 0x151f, 0x153d, 0x1543, 0x1543, 0x1543, 0x154f, + 0x1561, 0x1561, 0x1570, 0x1588, 0x1588, 0x15c0, 0x15fe, 0x15fe, + 0x160d, 0x1625, 0x1634, 0x1646, 0x166e, 0x168d, 0x168d, 0x168d, // Entry 140 - 17F - 0x16a5, 0x16b1, 0x16b1, 0x16c3, 0x16c3, 0x16de, 0x16f0, 0x1702, - 0x1727, 0x1727, 0x1733, 0x1742, 0x1742, 0x1751, 0x1760, 0x1760, - 0x1760, 0x1772, 0x1772, 0x1772, 0x1794, 0x17b0, 0x17b0, 0x17c9, - 0x17db, 0x17ea, 0x17f0, 0x17fc, 0x1808, 0x182a, 0x182a, 0x183c, - 0x183c, 0x183c, 0x183c, 0x1848, 0x1848, 0x1857, 0x186c, 0x186c, - 0x186c, 0x186c, 0x186c, 0x186c, 0x1884, 0x1884, 0x1896, 0x18b4, - 0x18c6, 0x18eb, 0x18eb, 0x18eb, 0x1903, 0x1918, 0x1918, 0x1918, - 0x1918, 0x192a, 0x193f, 0x1954, 0x1954, 0x1969, 0x1978, 0x1993, + 0x168d, 0x16a5, 0x16b1, 0x16b1, 0x16c3, 0x16c3, 0x16de, 0x16f0, + 0x1702, 0x1727, 0x1727, 0x1733, 0x1742, 0x1742, 0x1751, 0x1760, + 0x1760, 0x1760, 0x1772, 0x1772, 0x1772, 0x1794, 0x17b0, 0x17b0, + 0x17c9, 0x17db, 0x17ea, 0x17f0, 0x17fc, 0x1808, 0x182a, 0x182a, + 0x183c, 0x183c, 0x183c, 0x183c, 0x1848, 0x1848, 0x1857, 0x186c, + 0x186c, 0x186c, 0x186c, 0x186c, 0x186c, 0x1884, 0x1884, 0x1896, + 0x18b4, 0x18c6, 0x18eb, 0x18eb, 0x18eb, 0x1903, 0x1918, 0x1918, + 0x1918, 0x1918, 0x192a, 0x193f, 0x1954, 0x1954, 0x1969, 0x1978, // Entry 180 - 1BF - 0x1993, 0x1993, 0x1993, 0x1993, 0x1993, 0x19a2, 0x19b1, 0x19b1, - 0x19b1, 0x19cd, 0x19e2, 0x19f1, 0x19fa, 0x1a09, 0x1a09, 0x1a09, - 0x1a09, 0x1a1b, 0x1a1b, 0x1a24, 0x1a36, 0x1a45, 0x1a5d, 0x1a69, - 0x1a69, 0x1a7b, 0x1a8a, 0x1a99, 0x1a99, 0x1a99, 0x1ac2, 0x1ac2, - 0x1ac2, 0x1ad4, 0x1af2, 0x1b01, 0x1b16, 0x1b25, 0x1b37, 0x1b37, - 0x1b37, 0x1b37, 0x1b46, 0x1b5b, 0x1b73, 0x1b73, 0x1b73, 0x1b8b, - 0x1b8b, 0x1b8b, 0x1ba6, 0x1ba6, 0x1bd5, 0x1be7, 0x1bf6, 0x1c0b, - 0x1c0b, 0x1c0b, 0x1c0b, 0x1c1a, 0x1c3f, 0x1c3f, 0x1c4e, 0x1c4e, + 0x1993, 0x1993, 0x1993, 0x1993, 0x1993, 0x1993, 0x19a2, 0x19a2, + 0x19b1, 0x19b1, 0x19b1, 0x19cd, 0x19e2, 0x19f1, 0x19fa, 0x1a09, + 0x1a09, 0x1a09, 0x1a09, 0x1a1b, 0x1a1b, 0x1a24, 0x1a36, 0x1a45, + 0x1a5d, 0x1a69, 0x1a69, 0x1a7b, 0x1a8a, 0x1a99, 0x1a99, 0x1a99, + 0x1ac2, 0x1ac2, 0x1ac2, 0x1ad4, 0x1af2, 0x1b01, 0x1b16, 0x1b25, + 0x1b37, 0x1b37, 0x1b37, 0x1b37, 0x1b46, 0x1b5b, 0x1b73, 0x1b73, + 0x1b73, 0x1b8b, 0x1b8b, 0x1b8b, 0x1ba6, 0x1ba6, 0x1bd5, 0x1be7, + 0x1bf6, 0x1c0b, 0x1c0b, 0x1c0b, 0x1c0b, 0x1c1a, 0x1c3f, 0x1c3f, // Entry 1C0 - 1FF - 0x1c4e, 0x1c73, 0x1c91, 0x1cac, 0x1cbe, 0x1cd3, 0x1cdf, 0x1d04, - 0x1d1f, 0x1d2e, 0x1d40, 0x1d61, 0x1d70, 0x1d70, 0x1d70, 0x1d70, - 0x1d70, 0x1d95, 0x1d95, 0x1da7, 0x1da7, 0x1da7, 0x1db9, 0x1db9, - 0x1dea, 0x1dea, 0x1dea, 0x1e05, 0x1e1a, 0x1e35, 0x1e35, 0x1e35, - 0x1e35, 0x1e47, 0x1e47, 0x1e47, 0x1e47, 0x1e5c, 0x1e5c, 0x1e6e, - 0x1e7d, 0x1eab, 0x1eab, 0x1eb7, 0x1ec9, 0x1ec9, 0x1ec9, 0x1ec9, - 0x1ee1, 0x1ef0, 0x1ef0, 0x1ef0, 0x1ef0, 0x1ef0, 0x1ef0, 0x1f02, - 0x1f02, 0x1f24, 0x1f24, 0x1f24, 0x1f2d, 0x1f2d, 0x1f3f, 0x1f3f, + 0x1c4e, 0x1c4e, 0x1c4e, 0x1c73, 0x1c91, 0x1cac, 0x1cbe, 0x1cd3, + 0x1cdf, 0x1d04, 0x1d1f, 0x1d2e, 0x1d40, 0x1d61, 0x1d70, 0x1d70, + 0x1d70, 0x1d70, 0x1d70, 0x1d95, 0x1d95, 0x1da7, 0x1da7, 0x1da7, + 0x1db9, 0x1db9, 0x1dea, 0x1dea, 0x1dea, 0x1e05, 0x1e1a, 0x1e35, + 0x1e35, 0x1e35, 0x1e35, 0x1e47, 0x1e47, 0x1e47, 0x1e47, 0x1e5c, + 0x1e5c, 0x1e6e, 0x1e7d, 0x1eab, 0x1eab, 0x1eb7, 0x1ec9, 0x1ec9, + 0x1ec9, 0x1ec9, 0x1ee1, 0x1ef0, 0x1ef0, 0x1ef0, 0x1ef0, 0x1ef0, + 0x1ef0, 0x1f02, 0x1f02, 0x1f24, 0x1f24, 0x1f24, 0x1f2d, 0x1f2d, // Entry 200 - 23F - 0x1f3f, 0x1f61, 0x1f7a, 0x1f96, 0x1fbb, 0x1fd3, 0x1fe8, 0x200d, - 0x201c, 0x201c, 0x201c, 0x202e, 0x203a, 0x2052, 0x2052, 0x207d, - 0x208f, 0x208f, 0x208f, 0x209e, 0x209e, 0x20b0, 0x20bf, 0x20d1, - 0x20dd, 0x20ef, 0x20ef, 0x2107, 0x211f, 0x211f, 0x2131, 0x2153, - 0x216c, 0x216c, 0x216c, 0x216c, 0x218a, 0x218a, 0x219f, 0x21b1, - 0x21b1, 0x21bd, 0x21bd, 0x21d5, 0x21ea, 0x21ff, 0x2208, 0x2211, - 0x2211, 0x2211, 0x2211, 0x2211, 0x2220, 0x2220, 0x2220, 0x2220, - 0x2232, 0x223e, 0x224a, 0x224a, 0x224a, 0x225c, 0x225c, 0x225c, + 0x1f3f, 0x1f3f, 0x1f3f, 0x1f61, 0x1f7a, 0x1f96, 0x1fbb, 0x1fd3, + 0x1fe8, 0x200d, 0x201c, 0x201c, 0x201c, 0x202e, 0x203a, 0x2052, + 0x2052, 0x207d, 0x208f, 0x208f, 0x208f, 0x209e, 0x209e, 0x20b0, + 0x20bf, 0x20d1, 0x20dd, 0x20ef, 0x20ef, 0x2107, 0x211f, 0x211f, + 0x2131, 0x2153, 0x216c, 0x216c, 0x216c, 0x216c, 0x218a, 0x218a, + 0x219f, 0x21b1, 0x21b1, 0x21bd, 0x21bd, 0x21d5, 0x21ea, 0x21ff, + 0x2232, 0x223b, 0x223b, 0x223b, 0x223b, 0x223b, 0x224a, 0x224a, + 0x224a, 0x224a, 0x225c, 0x2268, 0x2274, 0x2274, 0x2274, 0x2286, // Entry 240 - 27F - 0x2265, 0x2277, 0x2277, 0x2277, 0x2277, 0x2277, 0x228f, 0x22ae, - 0x22ae, 0x22c3, 0x22c3, 0x22d2, 0x22e1, 0x22f3, 0x22f3, 0x22f3, - 0x2320, 0x235f, 0x23a5, 0x23d5, 0x2405, 0x2435, 0x246d, 0x249b, - 0x249b, 0x249b, 0x24cb, 0x24f8, 0x24f8, 0x250a, 0x250a, 0x250a, - 0x252b, 0x2553, 0x2553, 0x2577, 0x25a1, + 0x2286, 0x2286, 0x228f, 0x22a1, 0x22a1, 0x22a1, 0x22a1, 0x22a1, + 0x22b9, 0x22d8, 0x22d8, 0x22ed, 0x22ed, 0x22fc, 0x230b, 0x231d, + 0x231d, 0x231d, 0x234a, 0x2389, 0x23cf, 0x23ff, 0x242f, 0x245f, + 0x2497, 0x24c5, 0x24c5, 0x24c5, 0x24f5, 0x2522, 0x2522, 0x2534, + 0x2534, 0x2534, 0x2555, 0x257d, 0x257d, 0x25a1, 0x25cb, }, }, { // bs @@ -1503,62 +1587,62 @@ var langHeaders = [252]header{ "ičeškistaroslavenskičuvaškivelškidanskinjemačkidivehidžongaevegrčkie" + "ngleskiesperantošpanskiestonskibaskijskiperzijskifulahfinskifidžijsk" + "ifarskifrancuskizapadni frizijskiirskiškotski galskigalicijskigvaran" + - "igudžaratimankshausahebrejskihinduhiri motuhrvatskihaićanskimađarski" + - "armenskihererointerlingvaindonezijskiinterlingveigbosičuan jiinupiak" + - "idoislandskitalijanskiinuktitutjapanskijavanskigruzijskikongokikujuk" + - "uanjamakazačkikalalisutskikmerskikanadakorejskikanurikašmirskikurdsk" + - "ikomikornskikirgiškilatinskiluksemburškigandalimburškilingalalaoškil" + - "itvanskiluba-katangalatvijskimalagaškimaršalskimaorskimakedonskimala" + - "jalammongolskimaratimalajskimalteškiburmanskinaurusjeverni ndebelene" + - "palskindongaholandskinorveški (Nynorsk)norveški (Bokmal)južni ndebel" + - "enavahonjanjaoksitanskiojibvaoromoorijskiosetskipandžapskipalipoljsk" + - "ipaštuportugalskikečuareto-romanskirundirumunskiruskikinjarvandasans" + - "kritsardinijskisindisjeverni samisangosinhaleškislovačkislovenskisam" + - "oanskišonasomalskialbanskisrpskisvatijužni sotosundanskišvedskisvahi" + - "litamilskitelugutadžičkitajlandskitigrinjaturkmenskitsvanatonganskit" + - "urskitsongatatarskitahićanskiujgurskiukrajinskiurduuzbečkivendavijet" + - "namskivolapukvalunvolofhosajidišjorubanskizuangkineskizuluacehneskia" + - "koliadangmejskiadigejskiafrihiliaghemainuakadijskialeutskijužni alta" + - "istaroengleskiangikaaramejskimapuškiarapahoaravakasuasturijskiavadhi" + - "balučibalinezijskibasabamunskigomalabejabembabenabafutzapadni belučk" + - "ibojpuribikolbinikomsiksikabrajbodoakoskiburiatbugiškibulublinmedumb" + - "akadokaripskikajugaatsamcebuanočigačibčačagataičukeskimaričinukski ž" + - "argončoktavčipvijanskičirokičejenskicentralnokurdskikoptskikrimski t" + - "urskiseselva kreolski francuskikašubijanskidakotadargvataitadelavers" + - "lavedogribdinkazarmadogridonjolužičkosrpskidualasrednjovjekovni hola" + - "ndskijola-fonidiuladazagaembuefikstaroegipatskiekajukelamitskisrednj" + - "ovjekovni engleskievondofangfilipinofonsrednjovjekovni francuskistar" + - "ofrancuskisjeverni frizijskiistočnofrizijskifriulijskigagagauškigajo" + - "gbajastaroetiopskigilbertskisrednjovjekovni gornjonjemačkistaronjema" + - "čkigondigorontalogotskigrebostarogrčkinjemački (Švicarska)gusigviči" + - "nhaidahavajskihiligajnonhititehmonggornjolužičkosrpskihupaibanibibio" + - "ilokoingušetskilojbanngombamakamejudeo-perzijskijudeo-arapskikara-ka" + - "lpakkabilekačinkajukambakavikabardijskikanembutjapmakondezelenortski" + - "korokasikotanizijskikojra činikakokalenjinkimbundukomi-permskikonkan" + - "ikosrejskikpelekaračaj-balkarkriokarelijskikuruškišambalabafiakelnsk" + - "ikumikkutenailadinolangilandalambalezgijskilakotamongolozisjeverni l" + - "uriluba-lulualuisenolundaluomizoluhijamadureškimafamagahimaitilimaka" + - "sarmandingomasaimabamokšamandarmendemerumauricijski kreolskisrednjov" + - "jekovni irskimakuva-metometamikmakminangkabaumančumanipurimohavkmosi" + - "mundangviše jezikakriškimirandeškimarvarimjeneerzijamazanderanskinap" + - "olitanskinamadonjonjemačkinevariniasniueankvasiongiembonnogaistarono" + - "rdijskinkosjeverni sotonuerklasični nevarinjamvezinjankolenjoronzima" + - "osageosmanski turskipangasinskipahlavipampangapapiamentopalauanskini" + - "gerijski pidžinstaroperzijskifeničanskiponpejskipruskistaroprovansal" + - "skikičerajastanirapanuirarotonganromboromaniarumunskiruasandavejakut" + - "skisamaritanski aramejskisamburusasaksantalingambajsangusicilijanski" + - "škotskijužni kurdskisenekasenaselkupkojraboro senistaroirskitahelhi" + - "tšančadski arapskisidamojužni samilule samiinari samiskolt samisonin" + - "kesogdiensrananski tongoserersahosukumasususumerskikomorskiklasični " + - "sirijskisirijskitimnetesoterenotetumtigretivtokelauklingonskitlingit" + - "tamašeknjasa tongatok pisintarokotsimšiantumbukatuvalutasavaktuvinij" + - "skicentralnoatlaski tamazigtudmurtugaritskiumbundukorijenskivaivotsk" + - "ivunjovalservalamovarejvašovarlpirikalmiksogajaojapeškijangbenjembak" + - "antonskizapotečkiblis simbolizenagastandardni marokanski tamazigtzun" + - "ibez lingvističkog sadržajazazamoderni standardni arapskigornjonjema" + - "čki (Švicarska)donjosaksonskiflamanskimoldavskisrpskohrvatskikinesk" + - "i (pojednostavljeni)kineski (tradicionalni)", - []uint16{ // 613 elements + "igudžaratimankshausahebrejskihindihiri motuhrvatskihaićanski kreolsk" + + "imađarskiarmenskihererointerlingvaindonezijskiinterlingveigbosičuan " + + "jiinupiakidoislandskitalijanskiinuktitutjapanskijavanskigruzijskikon" + + "gokikujukuanjamakazaškikalalisutskikmerskikanadakorejskikanurikašmir" + + "skikurdskikomikornskikirgiškilatinskiluksemburškigandalimburškilinga" + + "lalaoskilitvanskiluba-katangalatvijskimalgaškimaršalskimaorskimakedo" + + "nskimalajalammongolskimaratimalajskimalteškiburmanskinaurusjeverni n" + + "debelenepalskindongaholandskinorveški (Nynorsk)norveški (Bokmal)južn" + + "i ndebelenavahonjanjaoksitanskiojibvaoromoorijskiosetskipandžapskipa" + + "lipoljskipaštuportugalskikečuaretoromanskirundirumunskiruskikinjarua" + + "ndasanskritsardinijskisindisjeverni samisangosinhaleškislovačkislove" + + "nskisamoanskišonasomalskialbanskisrpskisvatijužni sotosundanskišveds" + + "kisvahilitamilskitelugutadžičkitajlandskitigrinjaturkmenskitsvanaton" + + "ganskiturskitsongatatarskitahićanskiujgurskiukrajinskiurduuzbečkiven" + + "davijetnamskivolapukvalunvolofhosajidišjorubanskizuangkineskizuluači" + + "nskiakoliadangmejskiadigejskiafrihiliaghemainuakadijskialeutskijužni" + + " altaistaroengleskiangikaaramejskimapuškiarapahoaravakasuasturijskia" + + "vadhibalučibalinezijskibasabamunskigomalabejabembabenabafutzapadni b" + + "elučkibojpuribikolbinikomsiksikabrajbodoakoskiburiatbugiškibulublinm" + + "edumbakadokaripskikajugaatsamcebuanočigačibčačagataičukeskimaričinuk" + + "ski žargončoktavčipvijanskičirokičejenskicentralnokurdskikoptskikrim" + + "ski turskiseselva kreolski francuskikašubijanskidakotadargvataitadel" + + "averslavedogribdinkazarmadogridonjolužičkosrpskidualasrednjovjekovni" + + " holandskijola-fonidiuladazagaembuefikstaroegipatskiekajukelamitskis" + + "rednjovjekovni engleskievondofangfilipinofonsrednjovjekovni francusk" + + "istarofrancuskisjeverni frizijskiistočnofrizijskifriulijskigagagaušk" + + "igajogbajastaroetiopskigilbertskisrednjovjekovni gornjonjemačkistaro" + + "njemačkigondigorontalogotskigrebostarogrčkinjemački (Švicarska)gusig" + + "vičinhaidahavajskihiligajnonhititehmonggornjolužičkosrpskihupaibanib" + + "ibioilokoingušetskilojbanngombamakamejudeo-perzijskijudeo-arapskikar" + + "a-kalpakkabilekačinkajukambakavikabardijskikanembutjapmakondezelenor" + + "tskikorokasikotanizijskikojra činikakokalenjinkimbundukomi-permskiko" + + "nkanikosrejskikpelekaračaj-balkarkriokarelijskikuruškišambalabafiake" + + "lnskikumikkutenailadinolangilandalambalezgijskilakotamongolozisjever" + + "ni luriluba-lulualuisenolundaluomizoluhijamadureškimafamagahimaitili" + + "makasarmandingomasaimabamokšamandarmendemerumauricijski kreolskisred" + + "njovjekovni irskimakuva-metometamikmakminangkabaumančumanipurimohavk" + + "mosimundangviše jezikakriškimirandeškimarvarimjeneerzijamazanderansk" + + "inapolitanskinamadonjonjemačkinevariniasniuekvasiongiembonnogaistaro" + + "nordijskinkosjeverni sotonuerklasični nevarinjamvezinjankolenjoronzi" + + "maosageosmanski turskipangasinskipahlavipampangapapiamentopalauanski" + + "nigerijski pidžinstaroperzijskifeničanskiponpejskipruskistaroprovans" + + "alskikičerajastanirapanuirarotonganromboromaniarumunskiruasandavejak" + + "utskisamaritanski aramejskisamburusasaksantalingambajsangusicilijans" + + "kiškotskijužni kurdskisenekasenaselkupkojraboro senistaroirskitahelh" + + "itšančadski arapskisidamojužni samilule samiinari samiskolt samisoni" + + "nkesogdiensrananski tongoserersahosukumasususumerskikomorskiklasični" + + " sirijskisirijskitimnetesoterenotetumtigretivtokelauklingonskitlingi" + + "ttamašeknjasa tongatok pisintarokotsimšiantumbukatuvalutasavaktuvini" + + "jskicentralnoatlaski tamazigtudmurtugaritskiumbundunepoznati jezikva" + + "ivotskivunjovalservalamovarejvašovarlpirikalmiksogajaojapeškijangben" + + "jembakantonskizapotečkiblis simbolizenagastandardni marokanski tamaz" + + "igtzunibez lingvističkog sadržajazazamoderni standardni arapskigornj" + + "onjemački (Švicarska)donjosaksonskiflamanskimoldavskisrpskohrvatskik" + + "ineski (pojednostavljeni)kineski (tradicionalni)", + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0007, 0x000e, 0x0018, 0x0020, 0x0024, 0x002c, 0x0035, 0x003c, 0x0043, 0x004a, 0x0050, 0x005f, 0x0069, 0x0073, 0x007b, @@ -1567,357 +1651,527 @@ var langHeaders = [252]header{ 0x010a, 0x0110, 0x0117, 0x011a, 0x0120, 0x0128, 0x0131, 0x0139, 0x0141, 0x014a, 0x0153, 0x0158, 0x015e, 0x0168, 0x016e, 0x0177, 0x0188, 0x018d, 0x019c, 0x01a6, 0x01ad, 0x01b7, 0x01bc, 0x01c1, - 0x01ca, 0x01cf, 0x01d8, 0x01e0, 0x01ea, 0x01f3, 0x01fb, 0x0201, - // Entry 40 - 7F - 0x020c, 0x0218, 0x0223, 0x0227, 0x0231, 0x0238, 0x023b, 0x0244, - 0x024e, 0x0257, 0x025f, 0x0267, 0x0270, 0x0275, 0x027b, 0x0283, - 0x028b, 0x0297, 0x029e, 0x02a4, 0x02ac, 0x02b2, 0x02bc, 0x02c3, - 0x02c7, 0x02ce, 0x02d7, 0x02df, 0x02ec, 0x02f1, 0x02fb, 0x0302, - 0x0309, 0x0312, 0x031e, 0x0327, 0x0331, 0x033b, 0x0342, 0x034c, - 0x0355, 0x035e, 0x0364, 0x036c, 0x0375, 0x037e, 0x0383, 0x0393, - 0x039b, 0x03a1, 0x03aa, 0x03bd, 0x03cf, 0x03dd, 0x03e3, 0x03e9, - 0x03f3, 0x03f9, 0x03fe, 0x0405, 0x040c, 0x0417, 0x041b, 0x0422, - // Entry 80 - BF - 0x0428, 0x0433, 0x0439, 0x0446, 0x044b, 0x0453, 0x0458, 0x0463, - 0x046b, 0x0476, 0x047b, 0x0488, 0x048d, 0x0498, 0x04a1, 0x04aa, - 0x04b3, 0x04b8, 0x04c0, 0x04c8, 0x04ce, 0x04d3, 0x04de, 0x04e7, - 0x04ef, 0x04f6, 0x04fe, 0x0504, 0x050e, 0x0518, 0x0520, 0x052a, - 0x0530, 0x0539, 0x053f, 0x0545, 0x054d, 0x0558, 0x0560, 0x056a, - 0x056e, 0x0576, 0x057b, 0x0586, 0x058d, 0x0592, 0x0597, 0x059b, - 0x05a1, 0x05ab, 0x05b0, 0x05b7, 0x05bb, 0x05c4, 0x05c9, 0x05d4, - 0x05dd, 0x05dd, 0x05e5, 0x05ea, 0x05ee, 0x05f7, 0x05f7, 0x05ff, - // Entry C0 - FF - 0x05ff, 0x060b, 0x0618, 0x061e, 0x0627, 0x062f, 0x062f, 0x0636, - 0x0636, 0x0636, 0x063c, 0x063c, 0x063c, 0x063f, 0x063f, 0x0649, - 0x0649, 0x064f, 0x0656, 0x0662, 0x0662, 0x0666, 0x066e, 0x066e, - 0x0674, 0x0678, 0x067d, 0x067d, 0x0681, 0x0686, 0x0686, 0x0696, - 0x069d, 0x06a2, 0x06a6, 0x06a6, 0x06a9, 0x06b0, 0x06b0, 0x06b0, - 0x06b4, 0x06b4, 0x06b8, 0x06be, 0x06c4, 0x06cc, 0x06d0, 0x06d4, - 0x06db, 0x06df, 0x06e7, 0x06ed, 0x06f2, 0x06f9, 0x06fe, 0x0705, - 0x070d, 0x0715, 0x0719, 0x072a, 0x0731, 0x073d, 0x0744, 0x074d, - // Entry 100 - 13F - 0x075d, 0x0764, 0x0764, 0x0772, 0x078c, 0x0799, 0x079f, 0x07a5, - 0x07aa, 0x07b1, 0x07b6, 0x07bc, 0x07c1, 0x07c6, 0x07cb, 0x07df, - 0x07df, 0x07e4, 0x07fd, 0x0806, 0x080b, 0x0811, 0x0815, 0x0819, - 0x0819, 0x0827, 0x082d, 0x0836, 0x084e, 0x084e, 0x0854, 0x0854, - 0x0858, 0x0860, 0x0860, 0x0863, 0x0863, 0x087c, 0x088a, 0x088a, - 0x089c, 0x08ad, 0x08b7, 0x08b9, 0x08c2, 0x08c2, 0x08c6, 0x08cb, - 0x08cb, 0x08d8, 0x08e2, 0x08e2, 0x0901, 0x090f, 0x090f, 0x0914, - 0x091d, 0x0923, 0x0928, 0x0933, 0x0949, 0x0949, 0x0949, 0x094d, + 0x01ca, 0x01cf, 0x01d8, 0x01e0, 0x01f3, 0x01fc, 0x0204, 0x020a, + // Entry 40 - 7F + 0x0215, 0x0221, 0x022c, 0x0230, 0x023a, 0x0241, 0x0244, 0x024d, + 0x0257, 0x0260, 0x0268, 0x0270, 0x0279, 0x027e, 0x0284, 0x028c, + 0x0294, 0x02a0, 0x02a7, 0x02ad, 0x02b5, 0x02bb, 0x02c5, 0x02cc, + 0x02d0, 0x02d7, 0x02e0, 0x02e8, 0x02f5, 0x02fa, 0x0304, 0x030b, + 0x0311, 0x031a, 0x0326, 0x032f, 0x0338, 0x0342, 0x0349, 0x0353, + 0x035c, 0x0365, 0x036b, 0x0373, 0x037c, 0x0385, 0x038a, 0x039a, + 0x03a2, 0x03a8, 0x03b1, 0x03c4, 0x03d6, 0x03e4, 0x03ea, 0x03f0, + 0x03fa, 0x0400, 0x0405, 0x040c, 0x0413, 0x041e, 0x0422, 0x0429, + // Entry 80 - BF + 0x042f, 0x043a, 0x0440, 0x044c, 0x0451, 0x0459, 0x045e, 0x0469, + 0x0471, 0x047c, 0x0481, 0x048e, 0x0493, 0x049e, 0x04a7, 0x04b0, + 0x04b9, 0x04be, 0x04c6, 0x04ce, 0x04d4, 0x04d9, 0x04e4, 0x04ed, + 0x04f5, 0x04fc, 0x0504, 0x050a, 0x0514, 0x051e, 0x0526, 0x0530, + 0x0536, 0x053f, 0x0545, 0x054b, 0x0553, 0x055e, 0x0566, 0x0570, + 0x0574, 0x057c, 0x0581, 0x058c, 0x0593, 0x0598, 0x059d, 0x05a1, + 0x05a7, 0x05b1, 0x05b6, 0x05bd, 0x05c1, 0x05c9, 0x05ce, 0x05d9, + 0x05e2, 0x05e2, 0x05ea, 0x05ef, 0x05f3, 0x05fc, 0x05fc, 0x0604, + // Entry C0 - FF + 0x0604, 0x0610, 0x061d, 0x0623, 0x062c, 0x0634, 0x0634, 0x063b, + 0x063b, 0x063b, 0x0641, 0x0641, 0x0641, 0x0644, 0x0644, 0x064e, + 0x064e, 0x0654, 0x065b, 0x0667, 0x0667, 0x066b, 0x0673, 0x0673, + 0x0679, 0x067d, 0x0682, 0x0682, 0x0686, 0x068b, 0x068b, 0x069b, + 0x06a2, 0x06a7, 0x06ab, 0x06ab, 0x06ae, 0x06b5, 0x06b5, 0x06b5, + 0x06b9, 0x06b9, 0x06bd, 0x06c3, 0x06c9, 0x06d1, 0x06d5, 0x06d9, + 0x06e0, 0x06e4, 0x06ec, 0x06f2, 0x06f7, 0x06f7, 0x06fe, 0x0703, + 0x070a, 0x0712, 0x071a, 0x071e, 0x072f, 0x0736, 0x0742, 0x0749, + // Entry 100 - 13F + 0x0752, 0x0762, 0x0769, 0x0769, 0x0777, 0x0791, 0x079e, 0x07a4, + 0x07aa, 0x07af, 0x07b6, 0x07bb, 0x07c1, 0x07c6, 0x07cb, 0x07d0, + 0x07e4, 0x07e4, 0x07e9, 0x0802, 0x080b, 0x0810, 0x0816, 0x081a, + 0x081e, 0x081e, 0x082c, 0x0832, 0x083b, 0x0853, 0x0853, 0x0859, + 0x0859, 0x085d, 0x0865, 0x0865, 0x0868, 0x0868, 0x0881, 0x088f, + 0x088f, 0x08a1, 0x08b2, 0x08bc, 0x08be, 0x08c7, 0x08c7, 0x08cb, + 0x08d0, 0x08d0, 0x08dd, 0x08e7, 0x08e7, 0x0906, 0x0914, 0x0914, + 0x0919, 0x0922, 0x0928, 0x092d, 0x0938, 0x094e, 0x094e, 0x094e, // Entry 140 - 17F - 0x0954, 0x0959, 0x0959, 0x0961, 0x0961, 0x096b, 0x0971, 0x0976, - 0x098b, 0x098b, 0x098f, 0x0993, 0x0999, 0x099e, 0x09a9, 0x09a9, - 0x09a9, 0x09af, 0x09b5, 0x09bb, 0x09ca, 0x09d7, 0x09d7, 0x09e2, - 0x09e8, 0x09ee, 0x09f2, 0x09f7, 0x09fb, 0x0a06, 0x0a0d, 0x0a11, - 0x0a18, 0x0a23, 0x0a23, 0x0a27, 0x0a27, 0x0a2b, 0x0a37, 0x0a42, - 0x0a42, 0x0a42, 0x0a46, 0x0a4e, 0x0a56, 0x0a62, 0x0a69, 0x0a72, - 0x0a77, 0x0a86, 0x0a8a, 0x0a8a, 0x0a94, 0x0a9c, 0x0aa4, 0x0aa9, - 0x0ab0, 0x0ab5, 0x0abc, 0x0ac2, 0x0ac7, 0x0acc, 0x0ad1, 0x0ada, + 0x0952, 0x0959, 0x095e, 0x095e, 0x0966, 0x0966, 0x0970, 0x0976, + 0x097b, 0x0990, 0x0990, 0x0994, 0x0998, 0x099e, 0x09a3, 0x09ae, + 0x09ae, 0x09ae, 0x09b4, 0x09ba, 0x09c0, 0x09cf, 0x09dc, 0x09dc, + 0x09e7, 0x09ed, 0x09f3, 0x09f7, 0x09fc, 0x0a00, 0x0a0b, 0x0a12, + 0x0a16, 0x0a1d, 0x0a28, 0x0a28, 0x0a2c, 0x0a2c, 0x0a30, 0x0a3c, + 0x0a47, 0x0a47, 0x0a47, 0x0a4b, 0x0a53, 0x0a5b, 0x0a67, 0x0a6e, + 0x0a77, 0x0a7c, 0x0a8b, 0x0a8f, 0x0a8f, 0x0a99, 0x0aa1, 0x0aa9, + 0x0aae, 0x0ab5, 0x0aba, 0x0ac1, 0x0ac7, 0x0acc, 0x0ad1, 0x0ad6, // Entry 180 - 1BF - 0x0ada, 0x0ada, 0x0ada, 0x0ae0, 0x0ae0, 0x0ae5, 0x0ae9, 0x0af6, - 0x0af6, 0x0b00, 0x0b07, 0x0b0c, 0x0b0f, 0x0b13, 0x0b19, 0x0b19, - 0x0b19, 0x0b23, 0x0b27, 0x0b2d, 0x0b34, 0x0b3b, 0x0b43, 0x0b48, - 0x0b4c, 0x0b52, 0x0b58, 0x0b5d, 0x0b61, 0x0b75, 0x0b8a, 0x0b95, - 0x0b99, 0x0b9f, 0x0baa, 0x0bb0, 0x0bb8, 0x0bbe, 0x0bc2, 0x0bc2, - 0x0bc9, 0x0bd5, 0x0bdc, 0x0be7, 0x0bee, 0x0bee, 0x0bf3, 0x0bf9, - 0x0c06, 0x0c06, 0x0c12, 0x0c16, 0x0c24, 0x0c2a, 0x0c2e, 0x0c34, - 0x0c34, 0x0c3a, 0x0c42, 0x0c47, 0x0c55, 0x0c55, 0x0c58, 0x0c65, + 0x0adf, 0x0adf, 0x0adf, 0x0adf, 0x0ae5, 0x0ae5, 0x0aea, 0x0aea, + 0x0aee, 0x0afb, 0x0afb, 0x0b05, 0x0b0c, 0x0b11, 0x0b14, 0x0b18, + 0x0b1e, 0x0b1e, 0x0b1e, 0x0b28, 0x0b2c, 0x0b32, 0x0b39, 0x0b40, + 0x0b48, 0x0b4d, 0x0b51, 0x0b57, 0x0b5d, 0x0b62, 0x0b66, 0x0b7a, + 0x0b8f, 0x0b9a, 0x0b9e, 0x0ba4, 0x0baf, 0x0bb5, 0x0bbd, 0x0bc3, + 0x0bc7, 0x0bc7, 0x0bce, 0x0bda, 0x0be1, 0x0bec, 0x0bf3, 0x0bf3, + 0x0bf8, 0x0bfe, 0x0c0b, 0x0c0b, 0x0c17, 0x0c1b, 0x0c29, 0x0c2f, + 0x0c33, 0x0c37, 0x0c37, 0x0c3d, 0x0c45, 0x0c4a, 0x0c58, 0x0c58, // Entry 1C0 - 1FF - 0x0c69, 0x0c79, 0x0c81, 0x0c89, 0x0c8e, 0x0c93, 0x0c98, 0x0ca7, - 0x0cb2, 0x0cb9, 0x0cc1, 0x0ccb, 0x0cd5, 0x0cd5, 0x0ce7, 0x0ce7, - 0x0ce7, 0x0cf5, 0x0cf5, 0x0d00, 0x0d00, 0x0d00, 0x0d09, 0x0d0f, - 0x0d20, 0x0d25, 0x0d25, 0x0d2e, 0x0d35, 0x0d3f, 0x0d3f, 0x0d3f, - 0x0d44, 0x0d4a, 0x0d4a, 0x0d4a, 0x0d4a, 0x0d53, 0x0d56, 0x0d5d, - 0x0d65, 0x0d7b, 0x0d82, 0x0d87, 0x0d8e, 0x0d8e, 0x0d95, 0x0d9a, - 0x0da6, 0x0dae, 0x0dae, 0x0dbc, 0x0dc2, 0x0dc6, 0x0dc6, 0x0dcc, - 0x0dda, 0x0de4, 0x0de4, 0x0dec, 0x0df0, 0x0dff, 0x0e05, 0x0e05, + 0x0c5b, 0x0c68, 0x0c6c, 0x0c7c, 0x0c84, 0x0c8c, 0x0c91, 0x0c96, + 0x0c9b, 0x0caa, 0x0cb5, 0x0cbc, 0x0cc4, 0x0cce, 0x0cd8, 0x0cd8, + 0x0cea, 0x0cea, 0x0cea, 0x0cf8, 0x0cf8, 0x0d03, 0x0d03, 0x0d03, + 0x0d0c, 0x0d12, 0x0d23, 0x0d28, 0x0d28, 0x0d31, 0x0d38, 0x0d42, + 0x0d42, 0x0d42, 0x0d47, 0x0d4d, 0x0d4d, 0x0d4d, 0x0d4d, 0x0d56, + 0x0d59, 0x0d60, 0x0d68, 0x0d7e, 0x0d85, 0x0d8a, 0x0d91, 0x0d91, + 0x0d98, 0x0d9d, 0x0da9, 0x0db1, 0x0db1, 0x0dbf, 0x0dc5, 0x0dc9, + 0x0dc9, 0x0dcf, 0x0ddd, 0x0de7, 0x0de7, 0x0def, 0x0df3, 0x0e02, // Entry 200 - 23F - 0x0e05, 0x0e10, 0x0e19, 0x0e23, 0x0e2d, 0x0e34, 0x0e3b, 0x0e4a, - 0x0e4f, 0x0e53, 0x0e53, 0x0e59, 0x0e5d, 0x0e65, 0x0e6d, 0x0e7f, - 0x0e87, 0x0e87, 0x0e87, 0x0e8c, 0x0e90, 0x0e96, 0x0e9b, 0x0ea0, - 0x0ea3, 0x0eaa, 0x0eaa, 0x0eb4, 0x0ebb, 0x0ebb, 0x0ec3, 0x0ece, - 0x0ed7, 0x0ed7, 0x0edd, 0x0edd, 0x0ee6, 0x0ee6, 0x0eed, 0x0ef3, - 0x0efa, 0x0f04, 0x0f1d, 0x0f23, 0x0f2c, 0x0f33, 0x0f3d, 0x0f40, - 0x0f40, 0x0f40, 0x0f40, 0x0f40, 0x0f46, 0x0f46, 0x0f4b, 0x0f51, - 0x0f57, 0x0f5c, 0x0f61, 0x0f69, 0x0f69, 0x0f6f, 0x0f6f, 0x0f73, + 0x0e08, 0x0e08, 0x0e08, 0x0e13, 0x0e1c, 0x0e26, 0x0e30, 0x0e37, + 0x0e3e, 0x0e4d, 0x0e52, 0x0e56, 0x0e56, 0x0e5c, 0x0e60, 0x0e68, + 0x0e70, 0x0e82, 0x0e8a, 0x0e8a, 0x0e8a, 0x0e8f, 0x0e93, 0x0e99, + 0x0e9e, 0x0ea3, 0x0ea6, 0x0ead, 0x0ead, 0x0eb7, 0x0ebe, 0x0ebe, + 0x0ec6, 0x0ed1, 0x0eda, 0x0eda, 0x0ee0, 0x0ee0, 0x0ee9, 0x0ee9, + 0x0ef0, 0x0ef6, 0x0efd, 0x0f07, 0x0f20, 0x0f26, 0x0f2f, 0x0f36, + 0x0f45, 0x0f48, 0x0f48, 0x0f48, 0x0f48, 0x0f48, 0x0f4e, 0x0f4e, + 0x0f53, 0x0f59, 0x0f5f, 0x0f64, 0x0f69, 0x0f71, 0x0f71, 0x0f77, // Entry 240 - 27F - 0x0f76, 0x0f7e, 0x0f85, 0x0f8a, 0x0f8a, 0x0f93, 0x0f9d, 0x0fa9, - 0x0fa9, 0x0faf, 0x0fcd, 0x0fd1, 0x0fed, 0x0ff1, 0x100b, 0x100b, - 0x100b, 0x1027, 0x1027, 0x1027, 0x1027, 0x1027, 0x1027, 0x1027, - 0x1027, 0x1027, 0x1027, 0x1027, 0x1035, 0x103e, 0x103e, 0x103e, - 0x1047, 0x1055, 0x1055, 0x106f, 0x1086, + 0x0f77, 0x0f7b, 0x0f7e, 0x0f86, 0x0f8d, 0x0f92, 0x0f92, 0x0f9b, + 0x0fa5, 0x0fb1, 0x0fb1, 0x0fb7, 0x0fd5, 0x0fd9, 0x0ff5, 0x0ff9, + 0x1013, 0x1013, 0x1013, 0x102f, 0x102f, 0x102f, 0x102f, 0x102f, + 0x102f, 0x102f, 0x102f, 0x102f, 0x102f, 0x102f, 0x103d, 0x1046, + 0x1046, 0x1046, 0x104f, 0x105d, 0x105d, 0x1077, 0x108e, }, }, { // bs-Cyrl "афарскиабказијскиавестанскиафриканерскиаканамхарскиарагонежанскиарапскиа" + - "семијскиаварскиајмараазербејџанскибашкирбелорускибугарскибисламабам" + - "барабенгласкитибетанскибретонскибосанскикаталонскичеченскичаморокор" + - "зиканскикричешкистарословенскичувашкивелшкиданскинемачкидивехијскиџ" + - "онгаевегрчкиенглескиесперантошпанскиестонскибаскијскиперсијскифулах" + - "финскифиджијскифарскифранцускифризијскиирскишкотски галскигалскигва" + - "ранигуџаратиманксхаусахебрејскихиндихири мотухрватскихаитскимађарск" + - "ијерменскихерероинтерлингваиндонежанскимеђујезичкиигбосичуан јиунуп" + + "семијскиаварскиајмараазербејџанскибашкирбјелорускибугарскибисламаба" + + "мбарабенгласкитибетанскибретонскибосанскикаталонскичеченскичамороко" + + "рзиканскикричешкистарославенскичувашкивелшкиданскињемачкидивехијски" + + "џонгаевегрчкиенглескиесперантошпанскиестонскибаскијскиперсијскифула" + + "хфинскифиджијскифарскифранцускифризијскиирскишкотски галскигалскигв" + + "аранигуџаратиманксхаусахебрејскихиндихири мотухрватскихаитскимађарс" + + "киерменскихерероинтерлингваиндонежанскимеђујезичкиигбосичуан јиунуп" + "иакидоисландскииталијанскиинуктитутјапанскијаванскигрузијскиконгоки" + "кујукуањамакозачкикалалисуткмерскиканадакорејскиканурикашмирскикурд" + "скикомикорнишкикиргискилатинскилуксембуршкигандалимбургишлингалалао" + - "скилитванскилуба-катангалетонскималагасијскимаршалскимаорскимакедон" + - "скималајаламмонголскимаратималајскимелтешкибурманскинаурусеверни нд" + - "ебеленепалскиндонгахоландскинорвешки њорскнорвешки бокмалјужни ндеб" + - "еленавахоњањапровансалскиојибваоромооријскиосетскипанџабскипалипољс" + - "кипаштунскипортугалскиквенчарето-романскирундирумунскирускикинјаруа" + - "ндасанскритсардињаскисиндисеверни самисангосингалескисловачкисловен" + - "ачкисамоанскишонасомалскиалбанскисрпскисватисесотосунданскишведскис" + - "вахилитамилскителугутађиктајландскитигрињатуркменскитсванатонгатурс" + - "китсонгататарскитахићанскиујгурскиукрајинскиурдуузбечкивендавијетна" + - "мскиволапуквалунволофксхосајидишјорубажуангкинескизулуачинескиаколи" + - "адангмејскиадигејскиафрихилиаинуакадијскиаљутјужни алтаистароенглес" + - "киангикаармајскиароканијскиарапахоаравакастуријскиавадхибалучибалин" + - "езијскибасабејабембабојпурибиколбинисисикабрајбуриатбугинежанскибли" + - "нкадокарипскиатсамскицебуаночибчачагатаичукескимаричинукскичоктавск" + - "ичипвијанскичерокичејенскикоптскикримеански турскикашубијанскидакот" + - "адаргваделаверславскидогрибдинкадогриниски сорбијанскидуаласредњи х" + - "оландскиђулаефикскистароегипатскиекајукеламитскисредњи енглескиевон" + - "дофангтагалогфонсредњи францускистарофранцускисеверно-фризијскиисто" + - "чни фризијскифриулијскигагајогбајаџизгилбертшкисредњи високи немачк" + - "истаронемачкигондигоронталоготскигребостарогрчкишвајцарски немачкиг" + - "вич’инхаидахавајскихилигајнонхититехмонггорњи сорбијскихупаибанилок" + - "оингвишкилојбанјудео-персијскијудео-арапскикара-калпашкикабилекачин" + - "ђукамбакавикабардијскитјапкорокасикотанешкикимбундуконканикосреанск" + - "икпелекарачај-балкаркарелијскикурукхкумиккутенаиладиноландаламбалез" + - "гианмонголозилуба-лулуалуисенолундалуолушаимадурешкимагахимаитилима" + - "касармандингомасаимокшамандармендесредњи ирскимикмакминангкабауманч" + - "уманипуримахавскимосивише језикакришкимирандешкимарвариерзијанеапол" + - "итанскиниски немачкиневариниасниуеанногаистари норскин’косеверни со" + - "токласични неварињамвезињанколењоронзимаосагеотомански турскипангас" + - "инскипахлавипампангапапиаментопалауанскистароперсијскифеничанскипон" + - "пејскистаропровансалскирађастанирапануираротонганроманиароманијскис" + - "андавејакутсамаритански арамејскисасаксанталисицилијанскишкотскисел" + - "капстароирскишансидамојужни самилуле самиинари самисколтски језиксо" + - "нинкесоџијенскисранански тонгосерерсукумасусусумерскикоморскикласич" + - "ни сиријскисиријскитимнетеренотетумтигретивтокелауклингонскитлингит" + - "тамашекњаса тонгаток писинтсимшиантумбукатувалутувинијскиудмуртугар" + - "итскиумбундурутваивотскиваламоварајвашокалмикјаојапешкикантонскизап" + - "отечкиблисимболизенагазунибез лингвистичког садржајазазаАустријски " + - "немачкиШвајцарски високи немачкиАустралијски енглескиКанадски енгле" + - "скиБритански енглескиСАД енглескиЛатино-амерички шпанскиИберијски ш" + - "панскиКанадски францускиШвајцарски францускифламанскиБразилски порт" + - "угалскиИберијски португалскимолдавскисрпскохрватскикинески (поједно" + - "стављен)кинески (традиционални)", - []uint16{ // 613 elements + "скилитванскилуба-катангалатвијскималагасијскимаршалскимаорскимакедо" + + "нскималајаламмонголскимаратималајскимелтешкибурманскинаурусјеверни " + + "ндебеленепалскиндонгахоландскинорвешки њорскнорвешки бокмалјужни нд" + + "ебеленавахоњањапровансалскиојибваоромооријскиосетскипанџабскипалипо" + + "љскипаштунскипортугалскиквенчарето-романскирундирумунскирускикинјар" + + "уандасанскритсардињаскисиндисјеверни самисангосингалескисловачкисло" + + "венскисамоанскишонасомалскиалбанскисрпскисватисесотосунданскишведск" + + "исвахилитамилскителугутађиктајландскитигрињатуркменскитсванатонгату" + + "рскитсонгататарскитахићанскиујгурскиукрајинскиурдуузбечкивендавијет" + + "намскиволапуквалунволофксхосајидишјорубажуангкинескизулуачинескиако" + + "лиадангмејскиадигејскиафрихилиаинуакадијскиаљутјужни алтаистароенгл" + + "ескиангикаармајскиароканијскиарапахоаравакастуријскиавадхибалучибал" + + "инезијскибасабејабембабојпурибиколбинисисикабрајбуриатбугинежанскиб" + + "линкадокарипскиатсамскицебуаночибчачагатаичукескимаричинукскичоктав" + + "скичипвијанскичерокичејенскикоптскикримеански турскикашубијанскидак" + + "отадаргваделаверславскидогрибдинкадогриниски сорбијанскидуаласредњи" + + " холандскиђулаембуефикскистароегипатскиекајукеламитскисредњи енглеск" + + "иевондофангфилипинскифонсредњи францускистарофранцускисеверно-фризи" + + "јскиисточни фризијскифриулијскигагајогбајаџизгилбертшкисредњи висок" + + "и немачкистаронемачкигондигоронталоготскигребостарогрчкињемачки (Шв" + + "ицарска)гвич’инхаидахавајскихилигајнонхититехмонггорњи сорбијскихуп" + + "аибанилокоингвишкилојбанјудео-персијскијудео-арапскикара-калпашкика" + + "билекачинђукамбакавикабардијскитјапкорокасикотанешкикимбундуконкани" + + "косреанскикпелекарачај-балкаркарелијскикурукхшамбалакумиккутенаилад" + + "иноландаламбалезгианмонголозилуба-лулуалуисенолундалуолушаимадурешк" + + "имагахимаитилимакасармандингомасаимокшамандармендесредњи ирскимикма" + + "кминангкабауманчуманипуримахавскимосивише језикакришкимирандешкимар" + + "вариерзијанеаполитанскиниски немачкиневариниасниуеанногаистари норс" + + "кин’косјеверни сотокласични неварињамвезињанколењоронзимаосагеотома" + + "нски турскипангасинскипахлавипампангапапиаментопалауанскистароперси" + + "јскифеничанскипонпејскистаропровансалскирађастанирапануираротонганр" + + "оманиароманијскисандавејакутсамаритански арамејскисасаксанталисицил" + + "ијанскишкотскиселкапстароирскишансидамојужни самилуле самиинари сам" + + "исколтски језиксонинкесоџијенскисранански тонгосерерсукумасусусумер" + + "скикоморскикласични сиријскисиријскитимнетеренотетумтигретивтокелау" + + "клингонскитлингиттамашекњаса тонгаток писинтсимшиантумбукатувалутув" + + "инијскиудмуртугаритскиумбундунепознати језикваивотскиваламоварајваш" + + "окалмикјаојапешкикантонскизапотечкиблисимболизенагастандардни марок" + + "ански тамазигтзунибез лингвистичког садржајазазаШвајцарски високи н" + + "емачкифламанскимолдавскисрпскохрватскикинески (поједностављен)кинес" + + "ки (традиционални)", + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x000e, 0x0022, 0x0036, 0x004e, 0x0056, 0x0066, 0x0080, - 0x008e, 0x00a0, 0x00ae, 0x00ba, 0x00d4, 0x00e0, 0x00f2, 0x0102, - 0x0110, 0x011e, 0x0130, 0x0144, 0x0156, 0x0166, 0x017a, 0x018a, - 0x0196, 0x01ac, 0x01b2, 0x01bc, 0x01d8, 0x01e6, 0x01f2, 0x01fe, - 0x020c, 0x0220, 0x022a, 0x0230, 0x023a, 0x024a, 0x025c, 0x026a, - 0x027a, 0x028c, 0x029e, 0x02a8, 0x02b4, 0x02c6, 0x02d2, 0x02e4, - 0x02f6, 0x0300, 0x031b, 0x0327, 0x0335, 0x0345, 0x034f, 0x0359, - 0x036b, 0x0375, 0x0386, 0x0396, 0x03a4, 0x03b4, 0x03c6, 0x03d2, + 0x008e, 0x00a0, 0x00ae, 0x00ba, 0x00d4, 0x00e0, 0x00f4, 0x0104, + 0x0112, 0x0120, 0x0132, 0x0146, 0x0158, 0x0168, 0x017c, 0x018c, + 0x0198, 0x01ae, 0x01b4, 0x01be, 0x01da, 0x01e8, 0x01f4, 0x0200, + 0x020e, 0x0222, 0x022c, 0x0232, 0x023c, 0x024c, 0x025e, 0x026c, + 0x027c, 0x028e, 0x02a0, 0x02aa, 0x02b6, 0x02c8, 0x02d4, 0x02e6, + 0x02f8, 0x0302, 0x031d, 0x0329, 0x0337, 0x0347, 0x0351, 0x035b, + 0x036d, 0x0377, 0x0388, 0x0398, 0x03a6, 0x03b6, 0x03c6, 0x03d2, // Entry 40 - 7F 0x03e8, 0x0400, 0x0416, 0x041e, 0x042f, 0x043d, 0x0443, 0x0455, 0x046b, 0x047d, 0x048d, 0x049d, 0x04af, 0x04b9, 0x04c5, 0x04d3, 0x04e1, 0x04f3, 0x0501, 0x050d, 0x051d, 0x0529, 0x053b, 0x0549, 0x0551, 0x0561, 0x0571, 0x0581, 0x0599, 0x05a3, 0x05b5, 0x05c3, - 0x05cf, 0x05e1, 0x05f8, 0x0608, 0x0620, 0x0632, 0x0640, 0x0654, - 0x0666, 0x0678, 0x0684, 0x0694, 0x06a4, 0x06b6, 0x06c0, 0x06dd, - 0x06ed, 0x06f9, 0x070b, 0x0726, 0x0743, 0x075c, 0x0768, 0x0770, - 0x0788, 0x0794, 0x079e, 0x07ac, 0x07ba, 0x07cc, 0x07d4, 0x07e0, - // Entry 80 - BF - 0x07f2, 0x0808, 0x0814, 0x082d, 0x0837, 0x0847, 0x0851, 0x0867, - 0x0877, 0x088b, 0x0895, 0x08ac, 0x08b6, 0x08ca, 0x08da, 0x08ee, - 0x0900, 0x0908, 0x0918, 0x0928, 0x0934, 0x093e, 0x094a, 0x095c, - 0x096a, 0x0978, 0x0988, 0x0994, 0x099e, 0x09b2, 0x09c0, 0x09d4, - 0x09e0, 0x09ea, 0x09f6, 0x0a02, 0x0a12, 0x0a26, 0x0a36, 0x0a4a, - 0x0a52, 0x0a60, 0x0a6a, 0x0a80, 0x0a8e, 0x0a98, 0x0aa2, 0x0aae, - 0x0ab8, 0x0ac4, 0x0ace, 0x0adc, 0x0ae4, 0x0af4, 0x0afe, 0x0b14, - 0x0b26, 0x0b26, 0x0b36, 0x0b36, 0x0b3e, 0x0b50, 0x0b50, 0x0b58, - // Entry C0 - FF - 0x0b58, 0x0b6d, 0x0b87, 0x0b93, 0x0ba3, 0x0bb9, 0x0bb9, 0x0bc7, - 0x0bc7, 0x0bc7, 0x0bd3, 0x0bd3, 0x0bd3, 0x0bd3, 0x0bd3, 0x0be7, - 0x0be7, 0x0bf3, 0x0bff, 0x0c17, 0x0c17, 0x0c1f, 0x0c1f, 0x0c1f, - 0x0c1f, 0x0c27, 0x0c31, 0x0c31, 0x0c31, 0x0c31, 0x0c31, 0x0c31, - 0x0c3f, 0x0c49, 0x0c51, 0x0c51, 0x0c51, 0x0c5d, 0x0c5d, 0x0c5d, - 0x0c65, 0x0c65, 0x0c65, 0x0c65, 0x0c71, 0x0c89, 0x0c89, 0x0c91, - 0x0c91, 0x0c99, 0x0ca9, 0x0ca9, 0x0cb9, 0x0cc7, 0x0cc7, 0x0cd1, - 0x0cdf, 0x0ced, 0x0cf5, 0x0d05, 0x0d17, 0x0d2d, 0x0d39, 0x0d49, - // Entry 100 - 13F - 0x0d49, 0x0d57, 0x0d57, 0x0d78, 0x0d78, 0x0d90, 0x0d9c, 0x0da8, - 0x0da8, 0x0db6, 0x0dc4, 0x0dd0, 0x0dda, 0x0dda, 0x0de4, 0x0e05, - 0x0e05, 0x0e0f, 0x0e2e, 0x0e2e, 0x0e36, 0x0e36, 0x0e36, 0x0e44, - 0x0e44, 0x0e60, 0x0e6c, 0x0e7e, 0x0e9b, 0x0e9b, 0x0ea7, 0x0ea7, - 0x0eaf, 0x0ebd, 0x0ebd, 0x0ec3, 0x0ec3, 0x0ee2, 0x0efe, 0x0efe, - 0x0f1f, 0x0f40, 0x0f54, 0x0f58, 0x0f58, 0x0f58, 0x0f60, 0x0f6a, - 0x0f6a, 0x0f70, 0x0f84, 0x0f84, 0x0fac, 0x0fc4, 0x0fc4, 0x0fce, - 0x0fe0, 0x0fec, 0x0ff6, 0x100a, 0x102d, 0x102d, 0x102d, 0x102d, + 0x05cf, 0x05e1, 0x05f8, 0x060a, 0x0622, 0x0634, 0x0642, 0x0656, + 0x0668, 0x067a, 0x0686, 0x0696, 0x06a6, 0x06b8, 0x06c2, 0x06e1, + 0x06f1, 0x06fd, 0x070f, 0x072a, 0x0747, 0x0760, 0x076c, 0x0774, + 0x078c, 0x0798, 0x07a2, 0x07b0, 0x07be, 0x07d0, 0x07d8, 0x07e4, + // Entry 80 - BF + 0x07f6, 0x080c, 0x0818, 0x0831, 0x083b, 0x084b, 0x0855, 0x086b, + 0x087b, 0x088f, 0x0899, 0x08b2, 0x08bc, 0x08d0, 0x08e0, 0x08f2, + 0x0904, 0x090c, 0x091c, 0x092c, 0x0938, 0x0942, 0x094e, 0x0960, + 0x096e, 0x097c, 0x098c, 0x0998, 0x09a2, 0x09b6, 0x09c4, 0x09d8, + 0x09e4, 0x09ee, 0x09fa, 0x0a06, 0x0a16, 0x0a2a, 0x0a3a, 0x0a4e, + 0x0a56, 0x0a64, 0x0a6e, 0x0a84, 0x0a92, 0x0a9c, 0x0aa6, 0x0ab2, + 0x0abc, 0x0ac8, 0x0ad2, 0x0ae0, 0x0ae8, 0x0af8, 0x0b02, 0x0b18, + 0x0b2a, 0x0b2a, 0x0b3a, 0x0b3a, 0x0b42, 0x0b54, 0x0b54, 0x0b5c, + // Entry C0 - FF + 0x0b5c, 0x0b71, 0x0b8b, 0x0b97, 0x0ba7, 0x0bbd, 0x0bbd, 0x0bcb, + 0x0bcb, 0x0bcb, 0x0bd7, 0x0bd7, 0x0bd7, 0x0bd7, 0x0bd7, 0x0beb, + 0x0beb, 0x0bf7, 0x0c03, 0x0c1b, 0x0c1b, 0x0c23, 0x0c23, 0x0c23, + 0x0c23, 0x0c2b, 0x0c35, 0x0c35, 0x0c35, 0x0c35, 0x0c35, 0x0c35, + 0x0c43, 0x0c4d, 0x0c55, 0x0c55, 0x0c55, 0x0c61, 0x0c61, 0x0c61, + 0x0c69, 0x0c69, 0x0c69, 0x0c69, 0x0c75, 0x0c8d, 0x0c8d, 0x0c95, + 0x0c95, 0x0c9d, 0x0cad, 0x0cad, 0x0cbd, 0x0cbd, 0x0ccb, 0x0ccb, + 0x0cd5, 0x0ce3, 0x0cf1, 0x0cf9, 0x0d09, 0x0d1b, 0x0d31, 0x0d3d, + // Entry 100 - 13F + 0x0d4d, 0x0d4d, 0x0d5b, 0x0d5b, 0x0d7c, 0x0d7c, 0x0d94, 0x0da0, + 0x0dac, 0x0dac, 0x0dba, 0x0dc8, 0x0dd4, 0x0dde, 0x0dde, 0x0de8, + 0x0e09, 0x0e09, 0x0e13, 0x0e32, 0x0e32, 0x0e3a, 0x0e3a, 0x0e42, + 0x0e50, 0x0e50, 0x0e6c, 0x0e78, 0x0e8a, 0x0ea7, 0x0ea7, 0x0eb3, + 0x0eb3, 0x0ebb, 0x0ecf, 0x0ecf, 0x0ed5, 0x0ed5, 0x0ef4, 0x0f10, + 0x0f10, 0x0f31, 0x0f52, 0x0f66, 0x0f6a, 0x0f6a, 0x0f6a, 0x0f72, + 0x0f7c, 0x0f7c, 0x0f82, 0x0f96, 0x0f96, 0x0fbe, 0x0fd6, 0x0fd6, + 0x0fe0, 0x0ff2, 0x0ffe, 0x1008, 0x101c, 0x103f, 0x103f, 0x103f, // Entry 140 - 17F - 0x103c, 0x1046, 0x1046, 0x1056, 0x1056, 0x106a, 0x1076, 0x1080, - 0x109d, 0x109d, 0x10a5, 0x10ad, 0x10ad, 0x10b7, 0x10c7, 0x10c7, - 0x10c7, 0x10d3, 0x10d3, 0x10d3, 0x10f0, 0x1109, 0x1109, 0x1122, - 0x112e, 0x1138, 0x113c, 0x1146, 0x114e, 0x1164, 0x1164, 0x116c, - 0x116c, 0x116c, 0x116c, 0x1174, 0x1174, 0x117c, 0x118e, 0x118e, - 0x118e, 0x118e, 0x118e, 0x118e, 0x119e, 0x119e, 0x11ac, 0x11c0, - 0x11ca, 0x11e5, 0x11e5, 0x11e5, 0x11f9, 0x1205, 0x1205, 0x1205, - 0x1205, 0x120f, 0x121d, 0x1229, 0x1229, 0x1233, 0x123d, 0x124b, + 0x103f, 0x104e, 0x1058, 0x1058, 0x1068, 0x1068, 0x107c, 0x1088, + 0x1092, 0x10af, 0x10af, 0x10b7, 0x10bf, 0x10bf, 0x10c9, 0x10d9, + 0x10d9, 0x10d9, 0x10e5, 0x10e5, 0x10e5, 0x1102, 0x111b, 0x111b, + 0x1134, 0x1140, 0x114a, 0x114e, 0x1158, 0x1160, 0x1176, 0x1176, + 0x117e, 0x117e, 0x117e, 0x117e, 0x1186, 0x1186, 0x118e, 0x11a0, + 0x11a0, 0x11a0, 0x11a0, 0x11a0, 0x11a0, 0x11b0, 0x11b0, 0x11be, + 0x11d2, 0x11dc, 0x11f7, 0x11f7, 0x11f7, 0x120b, 0x1217, 0x1225, + 0x1225, 0x1225, 0x122f, 0x123d, 0x1249, 0x1249, 0x1253, 0x125d, // Entry 180 - 1BF - 0x124b, 0x124b, 0x124b, 0x124b, 0x124b, 0x1255, 0x125d, 0x125d, - 0x125d, 0x1270, 0x127e, 0x1288, 0x128e, 0x1298, 0x1298, 0x1298, - 0x1298, 0x12aa, 0x12aa, 0x12b6, 0x12c4, 0x12d2, 0x12e2, 0x12ec, - 0x12ec, 0x12f6, 0x1302, 0x130c, 0x130c, 0x130c, 0x1323, 0x1323, - 0x1323, 0x132f, 0x1345, 0x134f, 0x135f, 0x136f, 0x1377, 0x1377, - 0x1377, 0x138c, 0x1398, 0x13ac, 0x13ba, 0x13ba, 0x13ba, 0x13c6, - 0x13c6, 0x13c6, 0x13e0, 0x13e0, 0x13f9, 0x1405, 0x140d, 0x1419, - 0x1419, 0x1419, 0x1419, 0x1423, 0x143a, 0x143a, 0x1443, 0x145a, + 0x126b, 0x126b, 0x126b, 0x126b, 0x126b, 0x126b, 0x1275, 0x1275, + 0x127d, 0x127d, 0x127d, 0x1290, 0x129e, 0x12a8, 0x12ae, 0x12b8, + 0x12b8, 0x12b8, 0x12b8, 0x12ca, 0x12ca, 0x12d6, 0x12e4, 0x12f2, + 0x1302, 0x130c, 0x130c, 0x1316, 0x1322, 0x132c, 0x132c, 0x132c, + 0x1343, 0x1343, 0x1343, 0x134f, 0x1365, 0x136f, 0x137f, 0x138f, + 0x1397, 0x1397, 0x1397, 0x13ac, 0x13b8, 0x13cc, 0x13da, 0x13da, + 0x13da, 0x13e6, 0x13e6, 0x13e6, 0x1400, 0x1400, 0x1419, 0x1425, + 0x142d, 0x1439, 0x1439, 0x1439, 0x1439, 0x1443, 0x145a, 0x145a, // Entry 1C0 - 1FF - 0x145a, 0x1477, 0x1485, 0x1493, 0x149b, 0x14a5, 0x14af, 0x14ce, - 0x14e4, 0x14f2, 0x1502, 0x1516, 0x152a, 0x152a, 0x152a, 0x152a, - 0x152a, 0x1546, 0x1546, 0x155a, 0x155a, 0x155a, 0x156c, 0x156c, - 0x158e, 0x158e, 0x158e, 0x15a0, 0x15ae, 0x15c2, 0x15c2, 0x15c2, - 0x15c2, 0x15ce, 0x15ce, 0x15ce, 0x15ce, 0x15e4, 0x15e4, 0x15f2, - 0x15fc, 0x1627, 0x1627, 0x1631, 0x163f, 0x163f, 0x163f, 0x163f, - 0x1657, 0x1665, 0x1665, 0x1665, 0x1665, 0x1665, 0x1665, 0x1671, - 0x1671, 0x1685, 0x1685, 0x1685, 0x168b, 0x168b, 0x1697, 0x1697, + 0x1463, 0x147c, 0x147c, 0x1499, 0x14a7, 0x14b5, 0x14bd, 0x14c7, + 0x14d1, 0x14f0, 0x1506, 0x1514, 0x1524, 0x1538, 0x154c, 0x154c, + 0x154c, 0x154c, 0x154c, 0x1568, 0x1568, 0x157c, 0x157c, 0x157c, + 0x158e, 0x158e, 0x15b0, 0x15b0, 0x15b0, 0x15c2, 0x15d0, 0x15e4, + 0x15e4, 0x15e4, 0x15e4, 0x15f0, 0x15f0, 0x15f0, 0x15f0, 0x1606, + 0x1606, 0x1614, 0x161e, 0x1649, 0x1649, 0x1653, 0x1661, 0x1661, + 0x1661, 0x1661, 0x1679, 0x1687, 0x1687, 0x1687, 0x1687, 0x1687, + 0x1687, 0x1693, 0x1693, 0x16a7, 0x16a7, 0x16a7, 0x16ad, 0x16ad, // Entry 200 - 23F - 0x1697, 0x16aa, 0x16bb, 0x16ce, 0x16e9, 0x16f7, 0x170b, 0x1728, - 0x1732, 0x1732, 0x1732, 0x173e, 0x1746, 0x1756, 0x1766, 0x1787, - 0x1797, 0x1797, 0x1797, 0x17a1, 0x17a1, 0x17ad, 0x17b7, 0x17c1, - 0x17c7, 0x17d5, 0x17d5, 0x17e9, 0x17f7, 0x17f7, 0x1805, 0x1818, - 0x1829, 0x1829, 0x1829, 0x1829, 0x1839, 0x1839, 0x1847, 0x1853, - 0x1853, 0x1867, 0x1867, 0x1873, 0x1885, 0x1893, 0x1899, 0x189f, - 0x189f, 0x189f, 0x189f, 0x189f, 0x18ab, 0x18ab, 0x18ab, 0x18ab, - 0x18b7, 0x18c1, 0x18c9, 0x18c9, 0x18c9, 0x18d5, 0x18d5, 0x18d5, + 0x16b9, 0x16b9, 0x16b9, 0x16cc, 0x16dd, 0x16f0, 0x170b, 0x1719, + 0x172d, 0x174a, 0x1754, 0x1754, 0x1754, 0x1760, 0x1768, 0x1778, + 0x1788, 0x17a9, 0x17b9, 0x17b9, 0x17b9, 0x17c3, 0x17c3, 0x17cf, + 0x17d9, 0x17e3, 0x17e9, 0x17f7, 0x17f7, 0x180b, 0x1819, 0x1819, + 0x1827, 0x183a, 0x184b, 0x184b, 0x184b, 0x184b, 0x185b, 0x185b, + 0x1869, 0x1875, 0x1875, 0x1889, 0x1889, 0x1895, 0x18a7, 0x18b5, + 0x18d2, 0x18d8, 0x18d8, 0x18d8, 0x18d8, 0x18d8, 0x18e4, 0x18e4, + 0x18e4, 0x18e4, 0x18f0, 0x18fa, 0x1902, 0x1902, 0x1902, 0x190e, // Entry 240 - 27F - 0x18db, 0x18e9, 0x18e9, 0x18e9, 0x18e9, 0x18fb, 0x190d, 0x1921, - 0x1921, 0x192d, 0x192d, 0x1935, 0x1967, 0x196f, 0x196f, 0x196f, - 0x1992, 0x19c2, 0x19eb, 0x1a0c, 0x1a2f, 0x1a46, 0x1a72, 0x1a93, - 0x1a93, 0x1a93, 0x1ab6, 0x1add, 0x1add, 0x1aef, 0x1b18, 0x1b41, - 0x1b53, 0x1b6f, 0x1b6f, 0x1b9c, 0x1bc7, + 0x190e, 0x190e, 0x1914, 0x1922, 0x1922, 0x1922, 0x1922, 0x1934, + 0x1946, 0x195a, 0x195a, 0x1966, 0x19a0, 0x19a8, 0x19da, 0x19e2, + 0x19e2, 0x19e2, 0x19e2, 0x1a12, 0x1a12, 0x1a12, 0x1a12, 0x1a12, + 0x1a12, 0x1a12, 0x1a12, 0x1a12, 0x1a12, 0x1a12, 0x1a12, 0x1a24, + 0x1a24, 0x1a24, 0x1a36, 0x1a52, 0x1a52, 0x1a7f, 0x1aaa, }, }, { // ca caLangStr, caLangIdx, }, + { // ccp + "𑄃𑄜𑄢𑄴𑄃𑄝𑄴𑄈𑄎𑄨𑄠𑄚𑄴𑄃𑄝𑄬𑄌𑄴𑄖𑄩𑄠𑄧𑄃𑄜𑄳𑄢𑄨𑄇𑄚𑄴𑄃𑄇𑄚𑄴𑄃𑄟𑄴𑄦𑄢𑄨𑄇𑄴𑄃𑄢𑄴𑄉𑄮𑄚𑄨𑄎𑄴𑄃𑄢𑄧𑄝𑄩𑄃𑄥𑄟𑄨𑄃𑄞𑄬𑄢𑄨𑄇𑄴𑄃𑄠𑄧𑄟𑄢" + + "𑄃𑄎𑄢𑄴𑄝𑄳𑄆𑄎𑄚𑄩𑄝𑄌𑄴𑄇𑄨𑄢𑄴𑄝𑄬𑄣𑄢𑄪𑄥𑄨𑄠𑄧𑄝𑄪𑄣𑄴𑄉𑄬𑄢𑄨𑄠𑄧𑄝𑄨𑄥𑄴𑄣𑄟𑄝𑄟𑄴𑄝𑄢𑄝𑄁𑄣𑄖𑄨𑄛𑄴𑄝𑄧𑄖𑄨𑄝𑄳𑄢𑄬𑄑𑄧𑄚" + + "𑄴𑄝𑄧𑄥𑄴𑄚𑄩𑄠𑄚𑄴𑄇𑄖𑄣𑄚𑄴𑄌𑄬𑄌𑄬𑄚𑄴𑄌𑄟𑄮𑄢𑄮𑄇𑄧𑄢𑄴𑄥𑄨𑄇𑄚𑄴𑄇𑄳𑄢𑄨𑄌𑄬𑄇𑄴𑄌𑄢𑄴𑄌𑄴 𑄥𑄳𑄣𑄞𑄨𑄇𑄴𑄌𑄪𑄝𑄥𑄴𑄃𑄮𑄠𑄬" + + "𑄣𑄧𑄌𑄴𑄓𑄬𑄚𑄨𑄌𑄴𑄎𑄢𑄴𑄟𑄚𑄴𑄘𑄨𑄝𑄬𑄦𑄨𑄎𑄮𑄋𑄴𑄉𑄃𑄨𑄅𑄠𑄨𑄉𑄳𑄢𑄨𑄇𑄴𑄃𑄨𑄁𑄢𑄨𑄎𑄨𑄆𑄥𑄴𑄛𑄬𑄢𑄚𑄴𑄖𑄮𑄥𑄳𑄛𑄳𑄠𑄚𑄨𑄌𑄴𑄆" + + "𑄌𑄴𑄖𑄨𑄚𑄩𑄠𑄧𑄝𑄌𑄴𑄇𑄧𑄜𑄢𑄴𑄥𑄨𑄜𑄪𑄣𑄳𑄦𑄜𑄨𑄚𑄨𑄌𑄴𑄜𑄨𑄎𑄨𑄠𑄚𑄴𑄜𑄢𑄮𑄌𑄴𑄜𑄧𑄢𑄥𑄨𑄛𑄧𑄎𑄨𑄟𑄴 𑄜𑄳𑄢𑄨𑄥𑄨𑄠𑄚𑄴𑄃𑄭𑄢" + + "𑄨𑄌𑄴𑄃𑄨𑄌𑄴𑄇𑄧𑄖𑄴𑄥𑄧-𑄉𑄳𑄠𑄬𑄣𑄨𑄇𑄴𑄉𑄳𑄠𑄣𑄨𑄥𑄨𑄠𑄧𑄉𑄪𑄠𑄢𑄚𑄨𑄉𑄪𑄎𑄴𑄢𑄖𑄨𑄟𑄳𑄠𑄇𑄴𑄥𑄧𑄦𑄃𑄪𑄥𑄦𑄨𑄛𑄴𑄝𑄳𑄢𑄪𑄦𑄨" + + "𑄚𑄴𑄓𑄨𑄦𑄪𑄢𑄨 𑄟𑄮𑄖𑄪𑄇𑄳𑄢𑄮𑄠𑄬𑄥𑄩𑄠𑄧𑄦𑄭𑄖𑄨𑄠𑄚𑄴𑄦𑄁𑄉𑄬𑄢𑄩𑄠𑄧𑄃𑄢𑄴𑄟𑄬𑄚𑄨𑄠𑄧𑄦𑄬𑄢𑄬𑄢𑄮𑄃𑄨𑄚𑄴𑄑𑄢𑄴𑄣𑄨𑄁𑄉𑄪" + + "𑄠𑄃𑄨𑄚𑄴𑄘𑄮𑄚𑄬𑄥𑄨𑄠𑄧𑄃𑄨𑄚𑄴𑄑𑄢𑄴𑄣𑄨𑄁𑄉𑄧𑄃𑄨𑄉𑄴𑄝𑄮𑄥𑄨𑄥𑄪𑄠𑄚𑄴𑄠𑄨𑄃𑄨𑄚𑄪𑄛𑄨𑄠𑄇𑄴𑄃𑄨𑄓𑄮𑄃𑄭𑄌𑄴𑄣𑄳𑄠𑄚𑄴𑄓𑄨𑄠" + + "𑄧𑄃𑄨𑄖𑄣𑄩𑄠𑄧𑄃𑄨𑄚𑄪𑄇𑄴𑄑𑄨𑄑𑄪𑄖𑄴𑄎𑄛𑄚𑄨𑄎𑄞𑄚𑄨𑄎𑄴𑄎𑄧𑄢𑄴𑄎𑄨𑄠𑄚𑄴𑄇𑄧𑄁𑄉𑄮𑄇𑄨𑄇𑄪𑄠𑄪𑄇𑄮𑄠𑄚𑄨𑄠𑄟𑄇𑄎𑄇𑄴𑄇𑄳𑄠𑄣" + + "𑄣𑄴𑄣𑄨𑄥𑄪𑄖𑄴𑄈𑄧𑄟𑄬𑄢𑄴𑄇𑄧𑄚𑄴𑄚𑄧𑄢𑄴𑄇𑄮𑄢𑄨𑄠𑄚𑄴𑄇𑄚𑄪𑄢𑄨𑄇𑄌𑄴𑄟𑄨𑄢𑄨𑄇𑄪𑄢𑄴𑄘𑄨𑄥𑄴𑄇𑄮𑄟𑄨𑄇𑄧𑄢𑄴𑄚𑄨𑄌𑄴𑄇𑄨𑄢𑄴" + + "𑄉𑄨𑄌𑄴𑄣𑄑𑄨𑄚𑄴𑄣𑄪𑄇𑄴𑄥𑄬𑄟𑄴𑄝𑄢𑄴𑄉𑄩𑄠𑄧𑄉𑄚𑄴𑄓𑄣𑄨𑄟𑄴𑄝𑄪𑄢𑄴𑄉𑄨𑄌𑄴𑄣𑄨𑄋𑄴𑄉𑄣𑄣𑄃𑄮𑄣𑄨𑄗𑄪𑄠𑄬𑄚𑄩𑄠𑄧𑄣𑄪𑄝-𑄇𑄑" + + "𑄋𑄴𑄉𑄣𑄖𑄴𑄞𑄩𑄠𑄧𑄟𑄣𑄉𑄥𑄨𑄟𑄢𑄴𑄥𑄣𑄨𑄎𑄴𑄟𑄃𑄮𑄢𑄨𑄟𑄳𑄠𑄥𑄨𑄓𑄮𑄚𑄩𑄠𑄧𑄟𑄣𑄠𑄣𑄟𑄴𑄟𑄧𑄁𑄉𑄮𑄣𑄨𑄠𑄧𑄟𑄢𑄒𑄨𑄟𑄣𑄧𑄠𑄴𑄟𑄧" + + "𑄣𑄴𑄑𑄨𑄠𑄧𑄝𑄧𑄢𑄴𑄟𑄨𑄚𑄃𑄪𑄢𑄪𑄅𑄖𑄴𑄖𑄧𑄢𑄴 𑄆𑄚𑄴𑄘𑄬𑄝𑄨𑄣𑄨𑄚𑄬𑄛𑄣𑄨𑄆𑄚𑄴𑄘𑄮𑄋𑄴𑄉𑄓𑄌𑄴𑄚𑄧𑄢𑄴𑄃𑄮𑄠𑄬𑄎𑄩𑄠𑄚𑄴 𑄚" + + "𑄨𑄚𑄧𑄢𑄴𑄥𑄳𑄇𑄴𑄚𑄧𑄢𑄴𑄃𑄮𑄠𑄬𑄎𑄨𑄠𑄚𑄴 𑄝𑄮𑄇𑄴𑄟𑄣𑄴𑄓𑄧𑄉𑄨𑄚𑄴 𑄆𑄚𑄴𑄓𑄬𑄝𑄬𑄣𑄬𑄚𑄞𑄎𑄮𑄚𑄠𑄚𑄴𑄎𑄃𑄧𑄇𑄴𑄥𑄨𑄑𑄚𑄴𑄃" + + "𑄮𑄎𑄨𑄝𑄧𑄤𑄃𑄧𑄢𑄮𑄟𑄮𑄃𑄮𑄢𑄨𑄠𑄃𑄮𑄥𑄬𑄑𑄨𑄇𑄴𑄛𑄚𑄴𑄎𑄝𑄩𑄛𑄣𑄨𑄛𑄮𑄣𑄨𑄌𑄴𑄛𑄌𑄴𑄑𑄪𑄛𑄧𑄢𑄴𑄖𑄪𑄉𑄨𑄎𑄴𑄇𑄬𑄌𑄪𑄠𑄢𑄮𑄟𑄚𑄴" + + "𑄥𑄴𑄢𑄪𑄚𑄴𑄘𑄨𑄢𑄮𑄟𑄚𑄩𑄠𑄧𑄢𑄪𑄌𑄴𑄇𑄨𑄚𑄴𑄠𑄢𑄮𑄠𑄚𑄴𑄓𑄥𑄧𑄁𑄥𑄴𑄇𑄳𑄢𑄨𑄖𑄴𑄥𑄢𑄴𑄓𑄨𑄚𑄨𑄠𑄚𑄴𑄥𑄨𑄚𑄴𑄙𑄨𑄅𑄖𑄴𑄖𑄧𑄢𑄴 " + + "𑄢𑄬𑄌𑄴𑄎𑄮𑄢𑄴 𑄥𑄟𑄨𑄥𑄋𑄴𑄉𑄮𑄥𑄨𑄁𑄦𑄧𑄣𑄩𑄥𑄳𑄣𑄮𑄞𑄇𑄴𑄥𑄳𑄣𑄮𑄞𑄬𑄚𑄩𑄠𑄧𑄥𑄟𑄮𑄠𑄚𑄴𑄥𑄮𑄚𑄥𑄮𑄟𑄣𑄨𑄃𑄣𑄴𑄝𑄬𑄚𑄩𑄠𑄧𑄥" + + "𑄢𑄴𑄝𑄩𑄠𑄧𑄥𑄮𑄠𑄖𑄨𑄘𑄧𑄉𑄨𑄚𑄴 𑄥𑄮𑄗𑄮𑄥𑄪𑄘𑄚𑄩𑄥𑄭𑄪𑄓𑄨𑄥𑄴𑄥𑄱𑄦𑄨𑄣𑄨𑄖𑄟𑄨𑄣𑄴𑄖𑄬𑄣𑄬𑄉𑄪𑄖𑄎𑄨𑄇𑄴𑄗𑄭𑄖𑄨𑄉𑄧𑄢𑄨𑄚" + + "𑄨𑄠𑄖𑄪𑄢𑄴𑄇𑄧𑄟𑄬𑄚𑄨𑄥𑄱𑄚𑄑𑄮𑄋𑄴𑄉𑄚𑄴𑄖𑄪𑄢𑄴𑄇𑄩𑄥𑄧𑄋𑄴𑄉𑄖𑄖𑄢𑄴𑄖𑄦𑄨𑄖𑄨𑄠𑄚𑄴𑄃𑄪𑄃𑄨𑄊𑄪𑄢𑄴𑄃𑄨𑄃𑄪𑄇𑄳𑄢𑄬𑄚𑄩𑄠𑄧" + + "𑄃𑄪𑄢𑄴𑄘𑄪𑄃𑄪𑄎𑄴𑄝𑄬𑄇𑄩𑄠𑄧𑄞𑄬𑄚𑄴𑄓𑄞𑄨𑄠𑄬𑄖𑄴𑄚𑄟𑄩𑄞𑄮𑄣𑄛𑄪𑄇𑄴𑄤𑄣𑄪𑄚𑄴𑄤𑄃𑄮𑄣𑄮𑄜𑄴𑄎𑄮𑄥𑄠𑄨𑄖𑄴𑄘𑄨𑄥𑄴𑄃𑄨𑄃𑄮𑄢" + + "𑄪𑄝𑄏𑄪𑄠𑄋𑄴𑄌𑄩𑄚𑄎𑄪𑄣𑄪𑄃𑄳𑄃𑄌𑄳𑄆𑄚𑄨𑄎𑄴𑄃𑄇𑄮𑄣𑄨𑄃𑄧𑄘𑄟𑄳𑄉𑄬𑄃𑄘𑄬𑄉𑄬𑄃𑄜𑄳𑄢𑄨𑄦𑄨𑄣𑄨𑄃𑄬𑄊𑄟𑄴𑄃𑄳𑄆𑄚𑄪𑄃𑄇𑄳𑄦𑄴" + + "𑄘𑄨𑄠𑄚𑄴𑄃𑄣𑄬𑄅𑄖𑄴𑄓𑄧𑄉𑄨𑄚𑄴 𑄃𑄣𑄴𑄖𑄭𑄛𑄪𑄢𑄧𑄚𑄨 𑄃𑄟𑄧𑄣𑄧𑄢𑄴 𑄃𑄨𑄁𑄢𑄬𑄎𑄩𑄃𑄋𑄳𑄉𑄨𑄇𑄃𑄢𑄟𑄳𑄆𑄇𑄴𑄟𑄛𑄪𑄌𑄨𑄃𑄢" + + "𑄛𑄦𑄮𑄃𑄢𑄤𑄇𑄴𑄃𑄥𑄪𑄃𑄌𑄴𑄖𑄪𑄢𑄨𑄠𑄧𑄃𑄤𑄙𑄨𑄝𑄬𑄣𑄪𑄌𑄩𑄝𑄣𑄨𑄚𑄩𑄠𑄧𑄝𑄥𑄝𑄬𑄎𑄝𑄬𑄟𑄴𑄝𑄝𑄬𑄚𑄛𑄧𑄏𑄨𑄟𑄴 𑄝𑄣𑄮𑄌𑄨𑄞𑄮𑄎" + + "𑄴𑄛𑄪𑄢𑄨𑄝𑄨𑄇𑄮𑄣𑄴𑄝𑄨𑄚𑄨𑄥𑄨𑄇𑄴𑄥𑄨𑄇𑄝𑄳𑄢𑄎𑄴𑄝𑄮𑄢𑄮𑄝𑄪𑄢𑄨𑄠𑄖𑄴𑄝𑄪𑄉𑄨𑄚𑄨𑄝𑄳𑄣𑄨𑄚𑄴𑄇𑄳𑄠𑄓𑄮𑄝𑄳𑄠𑄢𑄨𑄛𑄴𑄃𑄖𑄴" + + "𑄥𑄟𑄴𑄌𑄋𑄴𑄟𑄳𑄦𑄌𑄬𑄝𑄪𑄠𑄚𑄮𑄌𑄨𑄉𑄌𑄨𑄛𑄴𑄌𑄌𑄉𑄖𑄳𑄆𑄌𑄪𑄇𑄨𑄟𑄢𑄨𑄌𑄨𑄚𑄪𑄇𑄴 𑄎𑄢𑄴𑄉𑄧𑄚𑄴𑄌𑄧𑄇𑄴𑄑𑄳𑄅𑄧𑄠𑄧𑄌𑄨𑄛𑄮𑄤" + + "𑄚𑄴𑄌𑄬𑄢𑄮𑄇𑄩𑄥𑄳𑄆𑄠𑄬𑄚𑄴𑄟𑄧𑄖𑄴𑄙𑄳𑄠𑄧 𑄇𑄪𑄢𑄴𑄘𑄨𑄌𑄴𑄇𑄧𑄛𑄴𑄑𑄨𑄇𑄴𑄇𑄳𑄢𑄨𑄟𑄨𑄠𑄚𑄴 𑄖𑄪𑄢𑄴𑄇𑄨𑄥𑄬𑄥𑄬𑄣𑄧𑄤 𑄇" + + "𑄳𑄢𑄬𑄃𑄮𑄣𑄴 𑄜𑄳𑄢𑄬𑄐𑄴𑄌𑄧𑄇𑄥𑄪𑄝𑄨𑄠𑄚𑄴𑄓𑄇𑄮𑄑𑄘𑄢𑄴𑄉𑄧𑄤𑄖𑄳𑄆𑄖𑄓𑄬𑄣𑄤𑄬𑄢𑄴𑄥𑄳𑄣𑄳𑄠𑄞𑄴𑄘𑄮𑄉𑄳𑄢𑄨𑄝𑄴𑄓𑄨𑄁𑄇𑄎" + + "𑄢𑄴𑄟𑄓𑄮𑄉𑄧𑄢𑄨𑄙𑄮𑄣𑄴𑄚𑄬𑄭𑄙𑄳𑄠𑄬 𑄥𑄮𑄢𑄴𑄝𑄨𑄠𑄚𑄴𑄘𑄱𑄣𑄟𑄧𑄖𑄴𑄙𑄳𑄠𑄧 𑄓𑄌𑄴𑄎𑄧𑄣-𑄜𑄧𑄚𑄩𑄓𑄨𑄃𑄪𑄣𑄘𑄉𑄎𑄃𑄬𑄟𑄳" + + "𑄝𑄪𑄪𑄆𑄜𑄨𑄇𑄴𑄛𑄪𑄢𑄨𑄚𑄩 𑄟𑄨𑄥𑄧𑄢𑄩𑄠𑄧𑄃𑄨𑄇𑄎𑄪𑄇𑄴𑄆𑄣𑄟𑄭𑄖𑄴𑄟𑄧𑄖𑄴𑄙𑄳𑄠𑄧 𑄃𑄨𑄁𑄢𑄬𑄎𑄨𑄄𑄃𑄮𑄚𑄴𑄓𑄮𑄜𑄳𑄠𑄋𑄴𑄉" + + "𑄧𑄜𑄨𑄣𑄨𑄛𑄨𑄚𑄮𑄜𑄧𑄚𑄴𑄟𑄧𑄖𑄴𑄙𑄳𑄠𑄧 𑄜𑄧𑄢𑄥𑄨𑄛𑄪𑄢𑄮𑄚𑄨 𑄜𑄧𑄢𑄥𑄨𑄅𑄖𑄴𑄗𑄧𑄢𑄴 𑄎𑄬𑄌𑄴𑄎𑄮𑄢𑄴 𑄜𑄳𑄢𑄨𑄥𑄨𑄠𑄚𑄴" + + "𑄛𑄪𑄉𑄮 𑄜𑄳𑄢𑄨𑄥𑄨𑄠𑄧𑄜𑄳𑄢𑄨𑄃𑄪𑄣𑄨𑄠𑄚𑄴𑄉𑄳𑄃𑄉𑄉𑄃𑄪𑄌𑄴𑄉𑄧𑄚𑄴𑄉𑄧𑄠𑄮𑄝𑄠𑄉𑄩𑄎𑄴𑄉𑄨𑄣𑄴𑄝𑄢𑄴𑄑𑄨𑄎𑄴𑄟𑄧𑄖𑄴𑄙𑄳𑄠" + + "𑄧-𑄅𑄪𑄉𑄪𑄢𑄬 𑄎𑄢𑄴𑄟𑄚𑄩𑄛𑄪𑄢𑄮𑄚𑄴 𑄅𑄪𑄉𑄪𑄢𑄬 𑄎𑄢𑄴𑄟𑄚𑄩𑄉𑄮𑄚𑄴𑄓𑄨𑄉𑄢𑄮𑄚𑄴𑄖𑄣𑄮𑄉𑄧𑄗𑄨𑄇𑄴𑄉𑄳𑄢𑄬𑄝𑄮𑄛𑄪𑄢𑄮" + + "𑄚𑄴 𑄉𑄳𑄢𑄩𑄇𑄴𑄥𑄪𑄃𑄨𑄌𑄴 𑄥𑄢𑄴𑄟𑄚𑄴𑄉𑄪𑄥𑄩𑄉𑄧𑄃𑄮𑄃𑄨𑄌𑄴𑄃𑄨𑄚𑄴𑄦𑄭𑄓𑄦𑄧𑄇𑄴𑄦𑄤𑄃𑄨𑄠𑄚𑄴𑄦𑄨𑄣𑄨𑄉𑄳𑄠𑄠𑄧𑄚𑄮𑄚𑄴" + + "𑄦𑄨𑄖𑄨𑄨𑄖𑄴𑄦𑄳𑄦𑄟𑄮𑄋𑄴𑄅𑄪𑄉𑄪𑄢𑄬 𑄥𑄮𑄢𑄴𑄥𑄨𑄠𑄚𑄴Xiang 𑄌𑄨𑄚𑄦𑄪𑄛𑄃𑄨𑄝𑄚𑄴𑄃𑄨𑄝𑄨𑄝𑄨𑄠𑄧𑄃𑄨𑄣𑄮𑄇𑄮𑄃𑄨𑄁𑄉" + + "𑄪𑄌𑄴𑄣𑄮𑄌𑄴𑄝𑄚𑄴𑄉𑄮𑄟𑄴𑄝𑄟𑄇𑄟𑄬𑄎𑄪𑄘𑄬𑄃𑄮 𑄜𑄢𑄴𑄥𑄨𑄎𑄪𑄘𑄬𑄃𑄮 𑄃𑄢𑄧𑄝𑄨𑄇𑄢-𑄇𑄣𑄴𑄛𑄇𑄴𑄇𑄝𑄭𑄣𑄬𑄇𑄌𑄨𑄚𑄴𑄃𑄧𑄌" + + "𑄴𑄎𑄪𑄇𑄟𑄴𑄝𑄇𑄃𑄪𑄃𑄨𑄇𑄝𑄢𑄴𑄓𑄨𑄠𑄚𑄴𑄑𑄃𑄨𑄠𑄛𑄴𑄟𑄇𑄮𑄚𑄴𑄘𑄬𑄇𑄝𑄪𑄞𑄢𑄴𑄘𑄨𑄠𑄚𑄪𑄇𑄮𑄢𑄮𑄈𑄥𑄨𑄈𑄮𑄑𑄚𑄨𑄎𑄴𑄇𑄮𑄠𑄧𑄢 " + + "𑄌𑄩𑄚𑄨𑄇𑄇𑄮𑄇𑄣𑄬𑄚𑄴𑄎𑄨𑄚𑄴𑄇𑄨𑄟𑄴𑄝𑄪𑄚𑄴𑄘𑄪𑄇𑄧𑄟𑄨-𑄛𑄢𑄧𑄟𑄨𑄃𑄇𑄴𑄇𑄮𑄋𑄴𑄇𑄚𑄨𑄇𑄮𑄥𑄳𑄢𑄭𑄚𑄴𑄇𑄴𑄛𑄬𑄣𑄳𑄣𑄬𑄇𑄢𑄴" + + "𑄌𑄮-𑄝𑄣𑄴𑄇𑄢𑄴𑄇𑄢𑄬𑄣𑄨𑄠𑄚𑄴𑄇𑄪𑄢𑄪𑄇𑄴𑄥𑄟𑄴𑄝𑄣𑄝𑄜𑄨𑄠𑄇𑄣𑄴𑄥𑄧𑄇𑄪𑄟𑄨𑄇𑄴𑄇𑄪𑄑𑄬𑄚𑄭𑄣𑄓𑄨𑄚𑄮𑄣𑄋𑄴𑄉𑄨𑄣𑄚𑄴𑄓𑄣𑄟" + + "𑄴𑄝𑄣𑄬𑄎𑄴𑄊𑄨𑄠𑄚𑄴𑄣𑄇𑄮𑄑𑄟𑄮𑄋𑄴𑄉𑄮𑄣𑄮𑄎𑄨𑄅𑄪𑄖𑄴𑄖𑄮𑄢𑄴 𑄣𑄪𑄢𑄨𑄣𑄪𑄝-𑄣𑄪𑄣𑄪𑄠𑄣𑄭𑄪𑄥𑄬𑄚𑄮𑄣𑄪𑄚𑄴𑄓𑄣𑄪𑄠𑄮𑄟𑄨" + + "𑄎𑄮𑄣𑄭𑄪𑄠𑄟𑄘𑄪𑄢𑄬𑄥𑄬𑄟𑄉𑄦𑄨𑄟𑄳𑄆𑄧𑄗𑄨𑄣𑄨𑄟𑄳𑄠𑄇𑄥𑄢𑄴𑄟𑄳𑄠𑄚𑄴𑄓𑄨𑄁𑄉𑄮𑄟𑄥𑄭𑄟𑄮𑄇𑄴𑄥𑄟𑄳𑄠𑄚𑄴𑄓𑄢𑄴𑄟𑄬𑄚𑄴𑄓𑄬𑄟" + + "𑄬𑄢𑄪𑄟𑄢𑄨𑄥𑄨𑄠𑄚𑄴𑄟𑄧𑄖𑄴𑄙𑄳𑄠 𑄃𑄭𑄢𑄨𑄌𑄴𑄟𑄈𑄪𑄠-𑄟𑄬𑄖𑄴𑄖𑄮𑄟𑄬𑄑𑄟𑄨𑄇𑄟𑄳𑄠𑄇𑄴𑄟𑄨𑄚𑄋𑄴𑄇𑄝𑄃𑄪𑄟𑄚𑄴𑄌𑄪𑄟𑄚𑄨𑄛" + + "𑄪𑄢𑄩𑄟𑄮𑄦𑄃𑄮𑄇𑄴𑄟𑄧𑄥𑄨𑄟𑄪𑄘𑄋𑄴𑄉𑄧𑄝𑄣𑄧𑄇𑄴𑄇𑄚𑄨 𑄞𑄌𑄴𑄇𑄳𑄢𑄨𑄇𑄴𑄟𑄨𑄢𑄚𑄴𑄓𑄨𑄎𑄴𑄟𑄢𑄮𑄠𑄢𑄨𑄆𑄢𑄧𑄎𑄨𑄠𑄟𑄎𑄚𑄴𑄘" + + "𑄬𑄢𑄚𑄨𑄚𑄚𑄴𑄚𑄬𑄠𑄛𑄮𑄣𑄨𑄑𑄚𑄴𑄚𑄟𑄖𑄧𑄣𑄬 𑄎𑄢𑄴𑄟𑄚𑄨𑄚𑄬𑄃𑄮𑄠𑄢𑄨𑄚𑄨𑄠𑄌𑄴𑄚𑄨𑄃𑄪𑄠𑄚𑄴𑄇𑄱𑄥𑄨𑄃𑄮𑄚𑄨𑄋𑄴𑄉𑄬𑄟𑄴𑄝𑄪" + + "𑄚𑄴𑄚𑄮𑄉𑄭𑄛𑄪𑄢𑄮𑄚𑄴 𑄚𑄧𑄢𑄴𑄥𑄧𑄆𑄚𑄴𑄇𑄮𑄃𑄪𑄖𑄴𑄗𑄧𑄢𑄴 𑄢𑄬𑄌𑄴𑄎𑄮𑄢𑄴 𑄥𑄮𑄗𑄮𑄚𑄪𑄠𑄢𑄴𑄛𑄪𑄢𑄮𑄚𑄴 𑄚𑄬𑄃𑄮𑄠𑄢𑄩" + + "𑄚𑄳𑄠𑄠𑄟𑄴𑄃𑄮𑄠𑄬𑄎𑄨𑄚𑄳𑄠𑄠𑄋𑄴𑄇𑄮𑄣𑄬𑄚𑄧𑄱𑄢𑄮𑄆𑄚𑄴𑄎𑄨𑄟𑄃𑄮𑄥𑄬𑄌𑄴𑄃𑄧𑄑𑄮𑄟𑄚𑄴 𑄖𑄪𑄢𑄴𑄇𑄨𑄛𑄁𑄉𑄥𑄨𑄚𑄚𑄴𑄛𑄦𑄳𑄣" + + "𑄞𑄨𑄛𑄟𑄴𑄛𑄋𑄴𑄉𑄛𑄛𑄨𑄠𑄟𑄬𑄚𑄴𑄖𑄮𑄛𑄣𑄠𑄪𑄠𑄚𑄴𑄚𑄎𑄬𑄢𑄨𑄠𑄧 𑄛𑄨𑄎𑄨𑄚𑄴𑄛𑄪𑄢𑄮𑄚𑄴 𑄜𑄢𑄴𑄥𑄨𑄜𑄮𑄚𑄨𑄥𑄨𑄠𑄚𑄴𑄛𑄮𑄚𑄴" + + "𑄦𑄧𑄛𑄳𑄆𑄬𑄠𑄚𑄴𑄛𑄴𑄢𑄪𑄥𑄨𑄠𑄚𑄴𑄛𑄪𑄢𑄮𑄚𑄴 𑄛𑄳𑄢𑄮𑄞𑄬𑄚𑄴𑄥𑄣𑄴𑄇𑄳𑄦𑄨𑄌𑄬𑄢𑄎𑄴𑄥𑄳𑄦𑄚𑄨𑄢𑄛𑄚𑄳𑄆𑄪𑄢𑄢𑄮𑄑𑄮𑄁𑄉𑄚𑄴" + + "𑄢𑄧𑄟𑄴𑄝𑄮𑄢𑄮𑄟𑄚𑄨𑄃𑄢𑄴𑄟𑄬𑄚𑄨𑄠𑄚𑄴𑄢𑄤𑄥𑄳𑄠𑄚𑄴𑄓𑄃𑄮𑄠𑄬𑄥𑄈𑄥𑄟𑄢𑄨𑄑𑄚𑄴 𑄃𑄢𑄟𑄨𑄇𑄴𑄥𑄟𑄴𑄝𑄪𑄢𑄪𑄥𑄥𑄇𑄴𑄥𑄀𑄃𑄮𑄖" + + "𑄣𑄨𑄚𑄳𑄠𑄉𑄟𑄴𑄝𑄬𑄥𑄁𑄚𑄴𑄉𑄪𑄥𑄨𑄥𑄨𑄣𑄨𑄠𑄚𑄴𑄆𑄌𑄴𑄇𑄧𑄖𑄴𑄥𑄴𑄘𑄧𑄉𑄨𑄚𑄴 𑄇𑄪𑄢𑄴𑄘𑄨𑄌𑄴𑄥𑄬𑄚𑄥𑄬𑄣𑄴𑄇𑄪𑄛𑄴𑄇𑄱𑄢𑄝𑄬" + + "𑄚𑄮 𑄥𑄬𑄚𑄳𑄚𑄨𑄛𑄪𑄢𑄮𑄚𑄴 𑄃𑄭𑄢𑄨𑄌𑄴𑄖𑄌𑄬𑄣𑄴𑄦𑄨𑄖𑄴𑄥𑄚𑄴𑄥𑄨𑄓𑄟𑄮𑄘𑄧𑄉𑄨𑄚𑄴 𑄢𑄬𑄌𑄴𑄎𑄮𑄢𑄴 𑄥𑄟𑄨𑄣𑄪𑄣𑄬 𑄥𑄟" + + "𑄨𑄃𑄨𑄚𑄢𑄨 𑄥𑄟𑄨𑄥𑄳𑄇𑄧𑄣𑄳𑄑𑄧 𑄥𑄟𑄨𑄥𑄮𑄚𑄨𑄋𑄴𑄇𑄬𑄥𑄮𑄇𑄴𑄓𑄠𑄚𑄴𑄥𑄳𑄢𑄚𑄚𑄴 𑄑𑄮𑄋𑄴𑄉𑄮𑄥𑄬𑄢𑄬𑄢𑄴𑄥𑄦𑄮𑄥𑄪𑄇𑄪𑄟" + + "𑄥𑄪𑄥𑄪𑄥𑄪𑄟𑄬𑄢𑄩𑄠𑄧𑄇𑄧𑄟𑄮𑄢𑄨𑄠𑄚𑄴𑄛𑄪𑄢𑄮𑄚𑄴 𑄥𑄨𑄢𑄨𑄃𑄮𑄥𑄨𑄢𑄨𑄠𑄇𑄴𑄑𑄭𑄟𑄴𑄚𑄬𑄖𑄬𑄥𑄮𑄖𑄬𑄢𑄬𑄚𑄮𑄖𑄬𑄖𑄪𑄟𑄴𑄑𑄭" + + "𑄉𑄳𑄢𑄬𑄑𑄨𑄞𑄴𑄑𑄮𑄇𑄬𑄣𑄃𑄪𑄇𑄳𑄣𑄨𑄋𑄴𑄉𑄧𑄚𑄴𑄖𑄴𑄣𑄨𑄋𑄴𑄉𑄨𑄖𑄴𑄖𑄟𑄥𑄬𑄇𑄴𑄚𑄠𑄥𑄑𑄮𑄋𑄴𑄉𑄑𑄮𑄇𑄴 𑄛𑄨𑄥𑄨𑄚𑄴𑄖𑄢𑄮𑄇𑄮" + + "𑄥𑄨𑄟𑄴𑄥𑄨𑄠𑄚𑄴𑄖𑄪𑄟𑄴𑄝𑄪𑄇𑄑𑄪𑄞𑄣𑄪𑄖𑄥𑄤𑄇𑄴𑄑𑄪𑄞𑄨𑄚𑄨𑄠𑄚𑄴𑄥𑄬𑄚𑄴𑄑𑄳𑄢𑄣𑄴 𑄃𑄣𑄴𑄖𑄌𑄴 𑄖𑄟𑄎𑄨𑄉𑄖𑄴𑄃𑄪𑄓𑄴𑄟𑄪" + + "𑄢𑄴𑄑𑄧𑄃𑄪𑄉𑄢𑄨𑄑𑄨𑄇𑄴𑄃𑄪𑄟𑄴𑄝𑄪𑄚𑄴𑄘𑄪𑄦𑄧𑄝𑄧𑄢𑄴 𑄚𑄧𑄛𑄬𑄠𑄬 𑄞𑄌𑄴𑄞𑄭𑄞𑄮𑄑𑄨𑄇𑄴𑄞𑄪𑄚𑄴𑄏𑄮𑄤𑄣𑄧𑄥𑄬𑄢𑄴𑄤𑄣𑄟𑄮" + + "𑄤𑄢𑄬𑄤𑄥𑄮𑄤𑄢𑄴𑄣𑄴𑄛𑄨𑄢𑄨𑄤𑄌𑄨𑄚𑄇𑄣𑄴𑄟𑄳𑄆𑄧𑄇𑄴𑄥𑄮𑄉𑄃𑄨𑄠𑄃𑄮𑄃𑄨𑄠𑄛𑄬𑄥𑄬𑄠𑄋𑄴𑄉𑄧𑄝𑄬𑄚𑄴𑄠𑄮𑄟𑄴𑄝𑄇𑄳𑄠𑄚𑄴𑄑𑄮𑄚" + + "𑄩𑄎𑄴𑄎𑄛𑄮𑄑𑄬𑄇𑄴𑄃𑄉𑄬𑄠 𑄞𑄌𑄴𑄎𑄬𑄚𑄉𑄉𑄧𑄟𑄴𑄘𑄮𑄣𑄴 𑄟𑄧𑄢𑄧𑄇𑄧𑄧𑄱𑄚𑄴𑄖𑄟𑄎𑄨𑄉𑄖𑄴𑄎𑄪𑄚𑄨𑄞𑄏𑄧𑄢𑄴𑄘𑄮𑄇𑄳𑄠𑄬 𑄝" + + "𑄨𑄥𑄧𑄠𑄴 𑄚𑄳𑄄𑄬𑄎𑄎𑄚𑄱 𑄉𑄧𑄟𑄴 𑄃𑄢𑄧𑄝𑄩𑄃𑄧𑄌𑄴𑄑𑄳𑄢𑄨𑄠𑄚𑄴 𑄎𑄢𑄴𑄟𑄚𑄴𑄥𑄪𑄃𑄨𑄌𑄴 𑄦𑄭 𑄎𑄢𑄴𑄟𑄚𑄴𑄃𑄧𑄌𑄴𑄑𑄳" + + "𑄢𑄬𑄣𑄨𑄠𑄧 𑄃𑄨𑄁𑄢𑄬𑄎𑄨𑄇𑄚𑄓𑄩𑄠𑄧 𑄃𑄨𑄁𑄢𑄬𑄎𑄨𑄝𑄳𑄢𑄨𑄑𑄨𑄌𑄴 𑄃𑄨𑄁𑄢𑄬𑄎𑄨𑄃𑄟𑄬𑄢𑄨𑄇𑄢𑄴 𑄃𑄨𑄁𑄢𑄎𑄨𑄣𑄳𑄠𑄑𑄨𑄚" + + "𑄴 𑄃𑄟𑄬𑄢𑄨𑄇𑄚𑄴 𑄥𑄳𑄛𑄳𑄠𑄚𑄨𑄌𑄴𑄄𑄅𑄢𑄮𑄛𑄩𑄠𑄧 𑄥𑄳𑄛𑄳𑄠𑄚𑄨𑄌𑄴𑄟𑄳𑄠𑄇𑄴𑄥𑄨𑄇𑄚𑄴 𑄥𑄳𑄛𑄳𑄠𑄚𑄨𑄌𑄴𑄇𑄚𑄓𑄩𑄠𑄧 " + + "𑄜𑄧𑄢𑄥𑄨𑄥𑄪𑄃𑄨𑄌𑄴 𑄜𑄧𑄢𑄥𑄨𑄣𑄮𑄥𑄳𑄠𑄇𑄴𑄥𑄧𑄚𑄴𑄜𑄳𑄣𑄬𑄟𑄨𑄌𑄴𑄝𑄳𑄢𑄎𑄨𑄣𑄬𑄢𑄴 𑄛𑄧𑄢𑄴𑄖𑄪𑄉𑄨𑄎𑄴𑄃𑄨𑄃𑄪𑄢𑄮𑄛𑄬𑄢" + + "𑄴 𑄛𑄧𑄢𑄴𑄖𑄪𑄉𑄨𑄎𑄴𑄟𑄧𑄣𑄴𑄘𑄞𑄨𑄠𑄧𑄥𑄢𑄴𑄝𑄮-𑄇𑄳𑄢𑄮𑄠𑄬𑄥𑄨𑄠𑄧𑄇𑄧𑄋𑄴𑄉𑄮 𑄥𑄱𑄦𑄨𑄣𑄨𑄅𑄪𑄎𑄪𑄅𑄪𑄏𑄫 𑄌𑄩𑄚𑄢𑄨𑄘" + + "𑄨𑄥𑄪𑄘𑄮𑄟𑄴 𑄌𑄩𑄚", + []uint16{ // 615 elements + // Entry 0 - 3F + 0x0000, 0x0010, 0x0034, 0x0058, 0x0078, 0x0088, 0x00a8, 0x00cc, + 0x00e0, 0x00f0, 0x010c, 0x0120, 0x0148, 0x0164, 0x0188, 0x01b0, + 0x01c8, 0x01dc, 0x01e8, 0x0208, 0x0228, 0x024c, 0x0260, 0x0278, + 0x028c, 0x02b0, 0x02c0, 0x02d0, 0x0301, 0x0315, 0x0335, 0x034d, + 0x0365, 0x037d, 0x0391, 0x03a5, 0x03bd, 0x03d9, 0x0401, 0x0425, + 0x0449, 0x045d, 0x0471, 0x0485, 0x049d, 0x04b9, 0x04cd, 0x04e1, + 0x051e, 0x0536, 0x057f, 0x05a3, 0x05bb, 0x05d7, 0x05f3, 0x0603, + 0x0623, 0x063b, 0x065c, 0x0684, 0x06a0, 0x06c0, 0x06e4, 0x06fc, + // Entry 40 - 7F + 0x0730, 0x0760, 0x0790, 0x07a8, 0x07cc, 0x07f0, 0x0800, 0x0834, + 0x0850, 0x0880, 0x0890, 0x08a8, 0x08cc, 0x08e0, 0x08f8, 0x0914, + 0x0924, 0x0954, 0x096c, 0x098c, 0x09a8, 0x09bc, 0x09d8, 0x09f8, + 0x0a08, 0x0a28, 0x0a48, 0x0a5c, 0x0a98, 0x0aa8, 0x0ad8, 0x0af0, + 0x0afc, 0x0b24, 0x0b45, 0x0b61, 0x0b75, 0x0b95, 0x0ba9, 0x0bd5, + 0x0bed, 0x0c11, 0x0c21, 0x0c35, 0x0c55, 0x0c6d, 0x0c81, 0x0cc2, + 0x0cd6, 0x0cf6, 0x0d02, 0x0d5f, 0x0db0, 0x0ded, 0x0dfd, 0x0e11, + 0x0e35, 0x0e51, 0x0e69, 0x0e7d, 0x0e9d, 0x0eb5, 0x0ec1, 0x0ed9, + // Entry 80 - BF + 0x0eed, 0x0f15, 0x0f29, 0x0f45, 0x0f5d, 0x0f79, 0x0f89, 0x0fb5, + 0x0fe1, 0x1009, 0x1021, 0x106b, 0x107f, 0x109b, 0x10b7, 0x10df, + 0x10f7, 0x1103, 0x1117, 0x113b, 0x1157, 0x116b, 0x1194, 0x11a8, + 0x11c4, 0x11dc, 0x11f0, 0x1208, 0x121c, 0x1224, 0x1248, 0x1270, + 0x127c, 0x1298, 0x12b0, 0x12c4, 0x12d4, 0x12f4, 0x1314, 0x1344, + 0x135c, 0x1384, 0x1398, 0x13bc, 0x13d8, 0x13ec, 0x1408, 0x1414, + 0x1434, 0x1450, 0x1464, 0x1470, 0x1480, 0x14a8, 0x14bc, 0x14d8, + 0x14ec, 0x14ec, 0x1510, 0x1524, 0x1538, 0x1560, 0x1560, 0x1578, + // Entry C0 - FF + 0x1578, 0x15a5, 0x15f7, 0x160f, 0x162b, 0x163f, 0x163f, 0x1653, + 0x1653, 0x1653, 0x1667, 0x1667, 0x1667, 0x1673, 0x1673, 0x1697, + 0x1697, 0x16a7, 0x16bf, 0x16db, 0x16db, 0x16e3, 0x16e3, 0x16e3, + 0x16e3, 0x16ef, 0x1703, 0x1703, 0x170f, 0x170f, 0x170f, 0x173c, + 0x175c, 0x1774, 0x1784, 0x1784, 0x1784, 0x17a0, 0x17a0, 0x17a0, + 0x17b4, 0x17b4, 0x17c4, 0x17c4, 0x17e0, 0x17f8, 0x17f8, 0x1810, + 0x1810, 0x1824, 0x1840, 0x1840, 0x1858, 0x1870, 0x188c, 0x1898, + 0x18ac, 0x18c0, 0x18d0, 0x18dc, 0x1911, 0x1939, 0x1955, 0x196d, + // Entry 100 - 13F + 0x1989, 0x19ca, 0x19ea, 0x19ea, 0x1a27, 0x1a85, 0x1aa5, 0x1ab5, + 0x1acd, 0x1add, 0x1af9, 0x1b15, 0x1b35, 0x1b45, 0x1b55, 0x1b6d, + 0x1bbe, 0x1bbe, 0x1bca, 0x1bf7, 0x1c14, 0x1c28, 0x1c34, 0x1c50, + 0x1c64, 0x1c64, 0x1c9d, 0x1cb9, 0x1cd1, 0x1d0e, 0x1d0e, 0x1d2a, + 0x1d2a, 0x1d46, 0x1d66, 0x1d66, 0x1d76, 0x1d76, 0x1dab, 0x1dd8, + 0x1dd8, 0x1e3a, 0x1e6b, 0x1e97, 0x1ea3, 0x1ebb, 0x1ecb, 0x1edb, + 0x1ee3, 0x1ee3, 0x1ef3, 0x1f1f, 0x1f1f, 0x1f71, 0x1fbb, 0x1fbb, + 0x1fd3, 0x1ff3, 0x200b, 0x2023, 0x2054, 0x2085, 0x2085, 0x2085, + // Entry 140 - 17F + 0x2095, 0x20c5, 0x20d1, 0x20e1, 0x20fd, 0x20fd, 0x2131, 0x214d, + 0x2169, 0x21a6, 0x21b8, 0x21c4, 0x21d8, 0x21f8, 0x2210, 0x222c, + 0x222c, 0x222c, 0x2248, 0x225c, 0x226c, 0x2299, 0x22c6, 0x22c6, + 0x22e7, 0x22fb, 0x230f, 0x2327, 0x2337, 0x234b, 0x236f, 0x236f, + 0x2387, 0x23a3, 0x23cf, 0x23cf, 0x23df, 0x23df, 0x23eb, 0x2407, + 0x242c, 0x242c, 0x242c, 0x2438, 0x245c, 0x2484, 0x24b5, 0x24d1, + 0x24f1, 0x2511, 0x253e, 0x253e, 0x253e, 0x255e, 0x2576, 0x258a, + 0x259a, 0x25ae, 0x25c6, 0x25de, 0x25f2, 0x2606, 0x2616, 0x2626, + // Entry 180 - 1BF + 0x264a, 0x264a, 0x264a, 0x264a, 0x265a, 0x265a, 0x2672, 0x2672, + 0x2682, 0x26b3, 0x26b3, 0x26d4, 0x26f0, 0x2704, 0x2714, 0x2724, + 0x2734, 0x2734, 0x2734, 0x2750, 0x2750, 0x2760, 0x2780, 0x279c, + 0x27c4, 0x27d0, 0x27d0, 0x27e4, 0x2804, 0x281c, 0x282c, 0x284c, + 0x2881, 0x28aa, 0x28b6, 0x28d6, 0x28fa, 0x290e, 0x292a, 0x2946, + 0x2956, 0x2956, 0x2972, 0x299f, 0x29b7, 0x29db, 0x29f3, 0x29f3, + 0x29f3, 0x2a0b, 0x2a2f, 0x2a3b, 0x2a63, 0x2a6b, 0x2a94, 0x2ab0, + 0x2ac4, 0x2ae0, 0x2ae0, 0x2af8, 0x2b28, 0x2b38, 0x2b69, 0x2b69, + // Entry 1C0 - 1FF + 0x2b7d, 0x2bcf, 0x2be3, 0x2c18, 0x2c48, 0x2c70, 0x2c84, 0x2c9c, + 0x2cb4, 0x2ce9, 0x2d09, 0x2d21, 0x2d3d, 0x2d65, 0x2d81, 0x2d81, + 0x2db6, 0x2db6, 0x2db6, 0x2de3, 0x2de3, 0x2e07, 0x2e07, 0x2e07, + 0x2e3b, 0x2e5f, 0x2ea4, 0x2ebc, 0x2ebc, 0x2edc, 0x2ef4, 0x2f18, + 0x2f18, 0x2f18, 0x2f30, 0x2f44, 0x2f44, 0x2f44, 0x2f44, 0x2f6c, + 0x2f74, 0x2f9c, 0x2fa4, 0x2fd9, 0x2ff5, 0x3005, 0x3021, 0x3021, + 0x3041, 0x3059, 0x307d, 0x30a1, 0x30a1, 0x30da, 0x30da, 0x30e6, + 0x30e6, 0x3106, 0x313b, 0x316c, 0x316c, 0x3190, 0x319c, 0x319c, + // Entry 200 - 23F + 0x31b0, 0x31b0, 0x31b0, 0x31f6, 0x3213, 0x3234, 0x3261, 0x3281, + 0x32a1, 0x32d2, 0x32ea, 0x32f6, 0x32f6, 0x330a, 0x331a, 0x333a, + 0x335e, 0x338f, 0x33ab, 0x33ab, 0x33ab, 0x33c3, 0x33d3, 0x33eb, + 0x3403, 0x341b, 0x342b, 0x3447, 0x3447, 0x346f, 0x3497, 0x3497, + 0x34af, 0x34cf, 0x34f8, 0x34f8, 0x350c, 0x350c, 0x3530, 0x3530, + 0x354c, 0x3560, 0x3574, 0x3598, 0x35f2, 0x361a, 0x363e, 0x3666, + 0x36a4, 0x36ac, 0x36ac, 0x36ac, 0x36ac, 0x36ac, 0x36c4, 0x36c4, + 0x36dc, 0x36f8, 0x3708, 0x3714, 0x3720, 0x3744, 0x3754, 0x3778, + // Entry 240 - 27F + 0x3778, 0x3784, 0x3798, 0x37b4, 0x37d8, 0x37ec, 0x37ec, 0x3818, + 0x3834, 0x3851, 0x3851, 0x3861, 0x38c6, 0x38d6, 0x392c, 0x3934, + 0x3962, 0x3962, 0x39a7, 0x39e1, 0x3a2e, 0x3a63, 0x3aa0, 0x3ad9, + 0x3b3b, 0x3b80, 0x3bcd, 0x3bcd, 0x3bfa, 0x3c27, 0x3c53, 0x3c73, + 0x3cc0, 0x3d11, 0x3d35, 0x3d72, 0x3da3, 0x3dd0, 0x3e05, + }, + }, { // ce - "абхазхойнафрикаансаканамхаройнӀаьрбийнассамийназербайджанийнбашкирийнбел" + - "орусийнболгарийнбамбарабенгалийнтибетхойнбретонийнбоснийнкаталонийн" + - "нохчийнкорсиканийнчехийнчувашийнваллийндатхойннемцойндзонг-кээвегре" + - "кийнингалсанэсперантоиспанхойнэстонийнбаскийнгӀажарийнфиннийнфиджиф" + - "арерийнфранцузийнмалхбузен-фризийнирландхойнгалисийнгуаранигуджарат" + - "имэнийнхаусажугтийнхиндихорватийнгаитийнвенгрийнэрмалойниндонезихой" + - "нигбосычуаньисландхойнитальянийнинуктитутяпонийняванийнгуьржийнкику" + - "йюказахийнгренландхойнкхмерийнканнадакорейнкашмирикурдийнкорнуоллий" + - "нгӀиргӀизойнлатинанлюксембургхойнгандалингалалаоссийнлитвахойнлуба-" + - "катангалатышийнмалагасийнмаоримакедонхойнмалаяламмонголийнмаратхима" + - "лайнмальтойнбирманийнкъилбаседа ндебелинепалхойнголландхойннорвегий" + - "н нюнорскнорвегийн букмолоромоорипанджабиполякийнпуштупортугалихойн" + - "кечуароманшийнрундирумынийноьрсийнкиньяруандасанскритсиндхикъилбасе" + - "да саамийнсангосингалхойнсловакийнсловенийншонасомалиалбанойнсербий" + - "нсунданхойншведийнсуахилитамилхойнтелугутаджикийнтайнтигриньятуркме" + - "нийнтонганийнтуркойнгӀезалойнуйгурийнукраинийнурдуузбекийнвьетнамхо" + - "йнволофкосайорубакитайнзулуагхӀемарауканхойнасубембабенамалхбузен-б" + - "елуджийнбодочигачерокиюккъерчу курдийнтаитазармасорбийндуаладьола-ф" + - "оньиэмбуфилиппинийнгагаузийншвейцарин немцойнгусиигавайнлакхара сер" + - "бийннгомбамачамекабилийнкамбамакондекабувердьянукойра чииникаленджи" + - "нкоми-пермякийнконканишамбалабафиалангилакотакъилбаседа лурилуо (Ке" + - "ни а, Танзани а)лухьямасаимерумаврикин креолийнмакуа-мееттометамоха" + - "укмундангмазандеранхойннамалахара германхойнквасионконуэрньянколеки" + - "черомборуандасамбурусангусенакойраборо сеннитахелхитсаамийн (къилба" + - ")луле-саамийнинари-саамийнскольт-саамийнтесотасавактамазигхтийнбоьвз" + - "уш боцу моттваивунджоварлпирисогамороккон стандартан тамазигхтийнме" + - "ттан чулацам боцушХӀинца болу стандартан Ӏаьрбийнавстрин немцойншве" + - "йцарин лакхара немцойнАвстралин ингалсанканадан ингалсанбританин ин" + - "галсанамерикан ингалсанлатинан американ испанхойневропан испанхойнм" + - "ексикан испанхойнканадан французийншвейцарин французийнлахара саксо" + - "нийнфламандийнбразилин португалихойневропан португалихойнмолдавийнс" + - "уахили (Конго)атта китайнламастан китайн", - []uint16{ // 613 elements - // Entry 0 - 3F - 0x0000, 0x0000, 0x0012, 0x0012, 0x0024, 0x002c, 0x003c, 0x003c, - 0x004c, 0x005c, 0x005c, 0x005c, 0x0078, 0x008a, 0x009e, 0x00b0, - 0x00b0, 0x00be, 0x00d0, 0x00e2, 0x00f4, 0x0102, 0x0116, 0x0124, - 0x0124, 0x013a, 0x013a, 0x0146, 0x0146, 0x0156, 0x0164, 0x0172, - 0x0180, 0x0180, 0x018f, 0x0195, 0x01a3, 0x01b3, 0x01c5, 0x01d7, - 0x01e7, 0x01f5, 0x0207, 0x0207, 0x0215, 0x021f, 0x022f, 0x0243, - 0x0264, 0x0278, 0x0278, 0x0288, 0x0296, 0x02a8, 0x02b4, 0x02be, - 0x02cc, 0x02d6, 0x02d6, 0x02e8, 0x02f6, 0x0306, 0x0316, 0x0316, - // Entry 40 - 7F - 0x0316, 0x032e, 0x032e, 0x0336, 0x0344, 0x0344, 0x0344, 0x0358, - 0x036c, 0x037e, 0x038c, 0x039a, 0x03aa, 0x03aa, 0x03b6, 0x03b6, - 0x03c6, 0x03de, 0x03ee, 0x03fc, 0x0408, 0x0408, 0x0416, 0x0424, - 0x0424, 0x043a, 0x0450, 0x045e, 0x047a, 0x0484, 0x0484, 0x0492, - 0x04a2, 0x04b4, 0x04cb, 0x04db, 0x04ef, 0x04ef, 0x04f9, 0x050f, - 0x051f, 0x0531, 0x053f, 0x054b, 0x055b, 0x056d, 0x056d, 0x0590, - 0x05a2, 0x05a2, 0x05b8, 0x05d9, 0x05f8, 0x05f8, 0x05f8, 0x05f8, - 0x05f8, 0x05f8, 0x0602, 0x0608, 0x0608, 0x0618, 0x0618, 0x0628, - // Entry 80 - BF - 0x0632, 0x064c, 0x0656, 0x0668, 0x0672, 0x0682, 0x0690, 0x06a6, - 0x06b6, 0x06b6, 0x06c2, 0x06e5, 0x06ef, 0x0703, 0x0715, 0x0727, - 0x0727, 0x072f, 0x073b, 0x074b, 0x0759, 0x0759, 0x0759, 0x076d, - 0x077b, 0x0789, 0x079b, 0x07a7, 0x07b9, 0x07c1, 0x07d1, 0x07e5, - 0x07e5, 0x07f7, 0x0805, 0x0805, 0x0817, 0x0817, 0x0827, 0x0839, - 0x0841, 0x0851, 0x0851, 0x0867, 0x0867, 0x0867, 0x0871, 0x0879, - 0x0879, 0x0885, 0x0885, 0x0891, 0x0899, 0x0899, 0x0899, 0x0899, - 0x0899, 0x0899, 0x0899, 0x08a5, 0x08a5, 0x08a5, 0x08a5, 0x08a5, - // Entry C0 - FF - 0x08a5, 0x08a5, 0x08a5, 0x08a5, 0x08a5, 0x08bb, 0x08bb, 0x08bb, - 0x08bb, 0x08bb, 0x08bb, 0x08bb, 0x08bb, 0x08c1, 0x08c1, 0x08c1, - 0x08c1, 0x08c1, 0x08c1, 0x08c1, 0x08c1, 0x08c1, 0x08c1, 0x08c1, - 0x08c1, 0x08c1, 0x08cb, 0x08cb, 0x08d3, 0x08d3, 0x08d3, 0x08f8, - 0x08f8, 0x08f8, 0x08f8, 0x08f8, 0x08f8, 0x08f8, 0x08f8, 0x08f8, - 0x08f8, 0x08f8, 0x0900, 0x0900, 0x0900, 0x0900, 0x0900, 0x0900, - 0x0900, 0x0900, 0x0900, 0x0900, 0x0900, 0x0900, 0x0908, 0x0908, - 0x0908, 0x0908, 0x0908, 0x0908, 0x0908, 0x0908, 0x0914, 0x0914, - // Entry 100 - 13F - 0x0933, 0x0933, 0x0933, 0x0933, 0x0933, 0x0933, 0x0933, 0x0933, - 0x093d, 0x093d, 0x093d, 0x093d, 0x093d, 0x0947, 0x0947, 0x0955, - 0x0955, 0x095f, 0x095f, 0x0974, 0x0974, 0x0974, 0x097c, 0x097c, - 0x097c, 0x097c, 0x097c, 0x097c, 0x097c, 0x097c, 0x097c, 0x097c, - 0x097c, 0x0992, 0x0992, 0x0992, 0x0992, 0x0992, 0x0992, 0x0992, - 0x0992, 0x0992, 0x0992, 0x0992, 0x09a4, 0x09a4, 0x09a4, 0x09a4, - 0x09a4, 0x09a4, 0x09a4, 0x09a4, 0x09a4, 0x09a4, 0x09a4, 0x09a4, - 0x09a4, 0x09a4, 0x09a4, 0x09a4, 0x09c5, 0x09c5, 0x09c5, 0x09cf, + "афарийнабхазхойнафрикаансаканамхаройнарагонойнӀаьрбийнассамийнсуьйлийнай" + + "мараазербайджанийнбашкирийнбелорусийнболгарийнбисламабамбарабенгали" + + "йнтибетхойнбретонийнбоснийнкаталонийннохчийнчаморрокорсиканийнчехий" + + "нкилсславянийнчувашийнваллийндатхойннемцойнмальдивийндзонг-кээвегре" + + "кийнингалсанэсперантоиспанхойнэстонийнбаскийнгӀажарийнфулахфиннийнф" + + "иджифарерийнфранцузийнмалхбузен-фризийнирландхойнгэлийнгалисийнгуар" + + "анигуджаратимэнийнхаусажугтийнхӀиндихорватийнгаитийнвенгрийнэрмалой" + + "нгерероинтерлингваиндонезихойнигбосычуаньидоисландхойнитальянийнину" + + "ктитутяпонийняванийнгуьржийнкикуйюкунамакхазакхийнгренландхойнкхмер" + + "ийнканнадакорейнканурикашмирикурдийнкомийнкорнуоллийнгӀиргӀизойнлат" + + "инанлюксембургхойнгандалимбургийнлингалалаоссийнлитвахойнлуба-катан" + + "галатышийнмалагасийнмаршаллийнмаоримакедонхойнмалаяламмонголийнмара" + + "тхималайнмальтойнбирманийннаурукъилбаседа ндебелинепалхойнндонгагол" + + "ландхойннорвегийн нюнорскнорвегийн букмолкъилба ндебеленавахоньяндж" + + "аокситанойноромоорихӀирийнпанджабиполякийнпуштупортугалихойнкечуаро" + + "маншийнрундирумынийноьрсийнкиньяруандасанскритсардинийнсиндхикъилба" + + "седа саамийнсангосингалхойнсловакийнсловенийнсамоанойншонасомалиалб" + + "анойнсербийнсвазикъилба сотосунданхойншведийнсуахилитамилхойнтелугу" + + "таджикийнтайнтигриньятуркменийнтсванатонганийнтуркойнтсонгагӀезалой" + + "нтаитянойнуйгурийнукраинийнурдуузбекийнвендавьетнамхойнволапюквалло" + + "нойнволофкосаидишйорубацийнзулуачехийнадангмеадигейнагхӀемайнийнале" + + "утийнкъилба алтайнангикаарауканхойнарапахоасуастурийнавадхибалийнба" + + "сабембабенамалхбузен-белуджийнбходжпурибинисиксикабодобугийнбилийнс" + + "ебуаночигачукчийнмарийнчоктавийнчерокишайенийнюккъерчу курдийнсейше" + + "лийн креолийндакотадаьргӀойнтаитадогрибзармасорбийндуаладьола-фоньи" + + "дазаэмбуэфикэкаджукэвондофилиппинийнфонфриулийнгагагаузийнгеэзгильб" + + "ертийнгоронталошвейцарин немцойнгусиигвичингавайнхилигайнонхмонглак" + + "хара сербийнхупаибанийнибибиоилокогӀалгӀайнложбаннгомбамачамекабили" + + "йнкачинийнкаджикамбагӀебартойнтьяпмакондекабувердьянукорокхасикойра" + + " чииникакокаленджинкимбундукоми-пермякийнконканикпеллекхарачойн-балк" + + "харойнкарелийнкурухшамбалабафиакоьлнийнгӀумкийнладинолангилаьзгийнл" + + "акоталозикъилбаседа лурилуба-лулуалундалуо (Кени а, Танзани а)лушей" + + "лухьямадурийнмагахимайтхилимакасарийнмасаимокшанойнмендемерумаврики" + + "н креолийнмакуа-мееттометамикмакминангкабауманипурийнмохаукмосимунд" + + "ангтайп-тайпа доьзалан меттанашкрикмирандойнэрзянийнмазандеранхойнн" + + "еаполитанойннамалахара германхойнневаройнниасниуэквасионгиембундног" + + "Ӏийннкокъилбаседа сотонуэрньянколепангасинанпампангапапьяментопалау" + + "нигерийн-креолийнпруссийнкичерапануйнраротонгаромбоаруминийнруандас" + + "андавеякутийнсамбурусанталингамбайнсангусицилийншотландхойнсенакойр" + + "аборо сеннитахелхитшанойнсаамийн (къилба)луле-саамийнинари-саамийнс" + + "кольт-саамийнсонинкесранан-тонгосахосукумакоморийншемахойнтемнетесо" + + "тетумтигреклингонинток-писинседекойнтумбукатувалутасавактувинийнтам" + + "азигхтийнудмуртийнумбундубоьвзуш боцу моттваивунджоваллисийнволамов" + + "арайварлпиригӀалмакхойнсогаянгбенйембакантонийнмороккон стандартан " + + "тамазигхтийнзуньиметтан чулацам боцушзазаХӀинца болу стандартан Ӏаь" + + "рбийнавстрин немцойншвейцарин литературин немцойнАвстралин ингалсан" + + "канадан ингалсанбританин ингалсанамерикан ингалсанлатинан американ " + + "испанхойневропан испанхойнмексикан испанхойнканадан французийншвейц" + + "арин французийнлахара саксонийнфламандийнбразилин португалихойневро" + + "пан португалихойнмолдавийнсуахили (Конго)атта цийнламастан цийн", + []uint16{ // 615 elements + // Entry 0 - 3F + 0x0000, 0x000e, 0x0020, 0x0020, 0x0032, 0x003a, 0x004a, 0x005c, + 0x006c, 0x007c, 0x008c, 0x0098, 0x00b4, 0x00c6, 0x00da, 0x00ec, + 0x00fa, 0x0108, 0x011a, 0x012c, 0x013e, 0x014c, 0x0160, 0x016e, + 0x017c, 0x0192, 0x0192, 0x019e, 0x01b8, 0x01c8, 0x01d6, 0x01e4, + 0x01f2, 0x0206, 0x0215, 0x021b, 0x0229, 0x0239, 0x024b, 0x025d, + 0x026d, 0x027b, 0x028d, 0x0297, 0x02a5, 0x02af, 0x02bf, 0x02d3, + 0x02f4, 0x0308, 0x0314, 0x0324, 0x0332, 0x0344, 0x0350, 0x035a, + 0x0368, 0x0374, 0x0374, 0x0386, 0x0394, 0x03a4, 0x03b4, 0x03c0, + // Entry 40 - 7F + 0x03d6, 0x03ee, 0x03ee, 0x03f6, 0x0404, 0x0404, 0x040a, 0x041e, + 0x0432, 0x0444, 0x0452, 0x0460, 0x0470, 0x0470, 0x047c, 0x0488, + 0x049c, 0x04b4, 0x04c4, 0x04d2, 0x04de, 0x04ea, 0x04f8, 0x0506, + 0x0512, 0x0528, 0x053e, 0x054c, 0x0568, 0x0572, 0x0586, 0x0594, + 0x05a4, 0x05b6, 0x05cd, 0x05dd, 0x05f1, 0x0605, 0x060f, 0x0625, + 0x0635, 0x0647, 0x0655, 0x0661, 0x0671, 0x0683, 0x068d, 0x06b0, + 0x06c2, 0x06ce, 0x06e4, 0x0705, 0x0724, 0x073f, 0x074b, 0x0759, + 0x076d, 0x076d, 0x0777, 0x077d, 0x078b, 0x079b, 0x079b, 0x07ab, + // Entry 80 - BF + 0x07b5, 0x07cf, 0x07d9, 0x07eb, 0x07f5, 0x0805, 0x0813, 0x0829, + 0x0839, 0x084b, 0x0857, 0x087a, 0x0884, 0x0898, 0x08aa, 0x08bc, + 0x08ce, 0x08d6, 0x08e2, 0x08f2, 0x0900, 0x090a, 0x091f, 0x0933, + 0x0941, 0x094f, 0x0961, 0x096d, 0x097f, 0x0987, 0x0997, 0x09ab, + 0x09b7, 0x09c9, 0x09d7, 0x09e3, 0x09f5, 0x0a07, 0x0a17, 0x0a29, + 0x0a31, 0x0a41, 0x0a4b, 0x0a61, 0x0a6f, 0x0a81, 0x0a8b, 0x0a93, + 0x0a9b, 0x0aa7, 0x0aa7, 0x0aaf, 0x0ab7, 0x0ac5, 0x0ac5, 0x0ad3, + 0x0ae1, 0x0ae1, 0x0ae1, 0x0aed, 0x0af9, 0x0af9, 0x0af9, 0x0b09, + // Entry C0 - FF + 0x0b09, 0x0b22, 0x0b22, 0x0b2e, 0x0b2e, 0x0b44, 0x0b44, 0x0b52, + 0x0b52, 0x0b52, 0x0b52, 0x0b52, 0x0b52, 0x0b58, 0x0b58, 0x0b68, + 0x0b68, 0x0b74, 0x0b74, 0x0b80, 0x0b80, 0x0b88, 0x0b88, 0x0b88, + 0x0b88, 0x0b88, 0x0b92, 0x0b92, 0x0b9a, 0x0b9a, 0x0b9a, 0x0bbf, + 0x0bd1, 0x0bd1, 0x0bd9, 0x0bd9, 0x0bd9, 0x0be7, 0x0be7, 0x0be7, + 0x0be7, 0x0be7, 0x0bef, 0x0bef, 0x0bef, 0x0bfb, 0x0bfb, 0x0c07, + 0x0c07, 0x0c07, 0x0c07, 0x0c07, 0x0c07, 0x0c07, 0x0c15, 0x0c1d, + 0x0c1d, 0x0c1d, 0x0c2b, 0x0c37, 0x0c37, 0x0c49, 0x0c49, 0x0c55, + // Entry 100 - 13F + 0x0c65, 0x0c84, 0x0c84, 0x0c84, 0x0c84, 0x0ca7, 0x0ca7, 0x0cb3, + 0x0cc5, 0x0ccf, 0x0ccf, 0x0ccf, 0x0cdb, 0x0cdb, 0x0ce5, 0x0ce5, + 0x0cf3, 0x0cf3, 0x0cfd, 0x0cfd, 0x0d12, 0x0d12, 0x0d1a, 0x0d22, + 0x0d2a, 0x0d2a, 0x0d2a, 0x0d38, 0x0d38, 0x0d38, 0x0d38, 0x0d44, + 0x0d44, 0x0d44, 0x0d5a, 0x0d5a, 0x0d60, 0x0d60, 0x0d60, 0x0d60, + 0x0d60, 0x0d60, 0x0d60, 0x0d70, 0x0d74, 0x0d86, 0x0d86, 0x0d86, + 0x0d86, 0x0d86, 0x0d8e, 0x0da4, 0x0da4, 0x0da4, 0x0da4, 0x0da4, + 0x0da4, 0x0db6, 0x0db6, 0x0db6, 0x0db6, 0x0dd7, 0x0dd7, 0x0dd7, // Entry 140 - 17F - 0x09cf, 0x09cf, 0x09cf, 0x09db, 0x09db, 0x09db, 0x09db, 0x09db, - 0x09f8, 0x09f8, 0x09f8, 0x09f8, 0x09f8, 0x09f8, 0x09f8, 0x09f8, - 0x09f8, 0x09f8, 0x0a04, 0x0a10, 0x0a10, 0x0a10, 0x0a10, 0x0a10, - 0x0a20, 0x0a20, 0x0a20, 0x0a2a, 0x0a2a, 0x0a2a, 0x0a2a, 0x0a2a, - 0x0a38, 0x0a50, 0x0a50, 0x0a50, 0x0a50, 0x0a50, 0x0a50, 0x0a65, - 0x0a65, 0x0a65, 0x0a65, 0x0a77, 0x0a77, 0x0a92, 0x0aa0, 0x0aa0, - 0x0aa0, 0x0aa0, 0x0aa0, 0x0aa0, 0x0aa0, 0x0aa0, 0x0aae, 0x0ab8, - 0x0ab8, 0x0ab8, 0x0ab8, 0x0ab8, 0x0ac2, 0x0ac2, 0x0ac2, 0x0ac2, + 0x0de1, 0x0ded, 0x0ded, 0x0ded, 0x0df9, 0x0df9, 0x0e0d, 0x0e0d, + 0x0e17, 0x0e34, 0x0e34, 0x0e3c, 0x0e4a, 0x0e56, 0x0e60, 0x0e72, + 0x0e72, 0x0e72, 0x0e7e, 0x0e8a, 0x0e96, 0x0e96, 0x0e96, 0x0e96, + 0x0e96, 0x0ea6, 0x0eb6, 0x0ec0, 0x0eca, 0x0eca, 0x0ede, 0x0ede, + 0x0ee6, 0x0ef4, 0x0f0c, 0x0f0c, 0x0f14, 0x0f14, 0x0f1e, 0x0f1e, + 0x0f33, 0x0f33, 0x0f33, 0x0f3b, 0x0f4d, 0x0f5d, 0x0f78, 0x0f86, + 0x0f86, 0x0f92, 0x0fb9, 0x0fb9, 0x0fb9, 0x0fc9, 0x0fd3, 0x0fe1, + 0x0feb, 0x0ffb, 0x100b, 0x100b, 0x1017, 0x1021, 0x1021, 0x1021, // Entry 180 - 1BF - 0x0ac2, 0x0ac2, 0x0ac2, 0x0ace, 0x0ace, 0x0ace, 0x0ace, 0x0aeb, - 0x0aeb, 0x0aeb, 0x0aeb, 0x0aeb, 0x0b12, 0x0b12, 0x0b1c, 0x0b1c, - 0x0b1c, 0x0b1c, 0x0b1c, 0x0b1c, 0x0b1c, 0x0b1c, 0x0b1c, 0x0b26, - 0x0b26, 0x0b26, 0x0b26, 0x0b26, 0x0b2e, 0x0b4f, 0x0b4f, 0x0b66, - 0x0b6e, 0x0b6e, 0x0b6e, 0x0b6e, 0x0b6e, 0x0b7a, 0x0b7a, 0x0b7a, - 0x0b88, 0x0b88, 0x0b88, 0x0b88, 0x0b88, 0x0b88, 0x0b88, 0x0b88, - 0x0ba4, 0x0ba4, 0x0ba4, 0x0bac, 0x0bcd, 0x0bcd, 0x0bcd, 0x0bcd, - 0x0bcd, 0x0bd9, 0x0bd9, 0x0bd9, 0x0bd9, 0x0bd9, 0x0bdf, 0x0bdf, + 0x1031, 0x1031, 0x1031, 0x1031, 0x103d, 0x103d, 0x103d, 0x103d, + 0x1045, 0x1062, 0x1062, 0x1075, 0x1075, 0x107f, 0x10a6, 0x10b0, + 0x10ba, 0x10ba, 0x10ba, 0x10ca, 0x10ca, 0x10d6, 0x10e6, 0x10fa, + 0x10fa, 0x1104, 0x1104, 0x1116, 0x1116, 0x1120, 0x1128, 0x1149, + 0x1149, 0x1160, 0x1168, 0x1174, 0x118a, 0x118a, 0x119e, 0x11aa, + 0x11b2, 0x11b2, 0x11c0, 0x11f5, 0x11fd, 0x120f, 0x120f, 0x120f, + 0x120f, 0x121f, 0x123b, 0x123b, 0x1255, 0x125d, 0x127e, 0x128e, + 0x1296, 0x129e, 0x129e, 0x12aa, 0x12bc, 0x12ca, 0x12ca, 0x12ca, // Entry 1C0 - 1FF - 0x0be7, 0x0be7, 0x0be7, 0x0bf7, 0x0bf7, 0x0bf7, 0x0bf7, 0x0bf7, - 0x0bf7, 0x0bf7, 0x0bf7, 0x0bf7, 0x0bf7, 0x0bf7, 0x0bf7, 0x0bf7, - 0x0bf7, 0x0bf7, 0x0bf7, 0x0bf7, 0x0bf7, 0x0bf7, 0x0bf7, 0x0bf7, - 0x0bf7, 0x0bff, 0x0bff, 0x0bff, 0x0bff, 0x0bff, 0x0bff, 0x0bff, - 0x0c09, 0x0c09, 0x0c09, 0x0c09, 0x0c09, 0x0c09, 0x0c15, 0x0c15, - 0x0c15, 0x0c15, 0x0c23, 0x0c23, 0x0c23, 0x0c23, 0x0c23, 0x0c2d, - 0x0c2d, 0x0c2d, 0x0c2d, 0x0c2d, 0x0c2d, 0x0c35, 0x0c35, 0x0c35, - 0x0c52, 0x0c52, 0x0c52, 0x0c62, 0x0c62, 0x0c62, 0x0c62, 0x0c62, + 0x12d0, 0x12ed, 0x12f5, 0x12f5, 0x12f5, 0x1305, 0x1305, 0x1305, + 0x1305, 0x1305, 0x1319, 0x1319, 0x1329, 0x133d, 0x1347, 0x1347, + 0x1368, 0x1368, 0x1368, 0x1368, 0x1368, 0x1368, 0x1368, 0x1368, + 0x1368, 0x1378, 0x1378, 0x1380, 0x1380, 0x1380, 0x1390, 0x13a2, + 0x13a2, 0x13a2, 0x13ac, 0x13ac, 0x13ac, 0x13ac, 0x13ac, 0x13be, + 0x13ca, 0x13d8, 0x13e6, 0x13e6, 0x13f4, 0x13f4, 0x1402, 0x1402, + 0x1412, 0x141c, 0x142c, 0x1442, 0x1442, 0x1442, 0x1442, 0x144a, + 0x144a, 0x144a, 0x1467, 0x1467, 0x1467, 0x1477, 0x1483, 0x1483, // Entry 200 - 23F - 0x0c62, 0x0c7f, 0x0c96, 0x0caf, 0x0cca, 0x0cca, 0x0cca, 0x0cca, - 0x0cca, 0x0cca, 0x0cca, 0x0cca, 0x0cca, 0x0cca, 0x0cca, 0x0cca, - 0x0cca, 0x0cca, 0x0cca, 0x0cca, 0x0cd2, 0x0cd2, 0x0cd2, 0x0cd2, - 0x0cd2, 0x0cd2, 0x0cd2, 0x0cd2, 0x0cd2, 0x0cd2, 0x0cd2, 0x0cd2, - 0x0cd2, 0x0cd2, 0x0cd2, 0x0cd2, 0x0cd2, 0x0cd2, 0x0cd2, 0x0cd2, - 0x0ce0, 0x0ce0, 0x0cf8, 0x0cf8, 0x0cf8, 0x0cf8, 0x0d18, 0x0d1e, - 0x0d1e, 0x0d1e, 0x0d1e, 0x0d1e, 0x0d1e, 0x0d1e, 0x0d2a, 0x0d2a, - 0x0d2a, 0x0d2a, 0x0d2a, 0x0d3a, 0x0d3a, 0x0d3a, 0x0d3a, 0x0d42, + 0x1483, 0x1483, 0x1483, 0x14a0, 0x14b7, 0x14d0, 0x14eb, 0x14f9, + 0x14f9, 0x1510, 0x1510, 0x1518, 0x1518, 0x1524, 0x1524, 0x1524, + 0x1534, 0x1534, 0x1544, 0x1544, 0x1544, 0x154e, 0x1556, 0x1556, + 0x1560, 0x156a, 0x156a, 0x156a, 0x156a, 0x157c, 0x157c, 0x157c, + 0x157c, 0x157c, 0x158d, 0x158d, 0x159d, 0x159d, 0x159d, 0x159d, + 0x15ab, 0x15b7, 0x15c5, 0x15d5, 0x15ed, 0x15ff, 0x15ff, 0x160d, + 0x162d, 0x1633, 0x1633, 0x1633, 0x1633, 0x1633, 0x1633, 0x1633, + 0x163f, 0x1651, 0x165d, 0x1667, 0x1667, 0x1677, 0x1677, 0x168d, // Entry 240 - 27F - 0x0d42, 0x0d42, 0x0d42, 0x0d42, 0x0d42, 0x0d42, 0x0d42, 0x0d42, - 0x0d42, 0x0d42, 0x0d80, 0x0d80, 0x0da6, 0x0da6, 0x0de1, 0x0de1, - 0x0dfe, 0x0e2e, 0x0e51, 0x0e70, 0x0e91, 0x0eb2, 0x0ee4, 0x0f05, - 0x0f28, 0x0f28, 0x0f4b, 0x0f72, 0x0f91, 0x0fa5, 0x0fd0, 0x0ff9, - 0x100b, 0x100b, 0x1026, 0x103b, 0x1058, + 0x168d, 0x1695, 0x1695, 0x1695, 0x16a1, 0x16ab, 0x16ab, 0x16bd, + 0x16bd, 0x16bd, 0x16bd, 0x16bd, 0x16fb, 0x1705, 0x172b, 0x1733, + 0x176e, 0x176e, 0x178b, 0x17c3, 0x17e6, 0x1805, 0x1826, 0x1847, + 0x1879, 0x189a, 0x18bd, 0x18bd, 0x18e0, 0x1907, 0x1926, 0x193a, + 0x1965, 0x198e, 0x19a0, 0x19a0, 0x19bb, 0x19cc, 0x19e5, }, }, { // cgg @@ -1928,7 +2182,7 @@ var langHeaders = [252]header{ "iOrupocugoOruromaniaOrurrashaOrunyarwandaOrusomaariOruswidiOrutamiri" + "OrutailandiOrukurukiOrukurainiOru-UruduOruviyetinaamuOruyorubaOrucha" + "inaOruzuruRukiga", - []uint16{ // 247 elements + []uint16{ // 248 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0010, 0x0010, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0024, 0x0031, @@ -1963,38 +2217,38 @@ var langHeaders = [252]header{ 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, - 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01ac, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01ac, }, }, { // chr "ᎠᏩᎳᎠᏆᏏᎠᏂᎠᎬᎿᎨᏍᏛᎠᎧᎾᎠᎹᎭᎵᎩᎠᏩᎪᏂᏏᎡᎳᏈᎠᏌᎻᏏᎠᏩᎵᎧᎠᏱᎹᎳᎠᏎᏆᏣᏂᏆᏍᎯᎩᎠᏇᎳᎷᏏᏊᎵᎨᎵᎠᏂᏈᏍᎳᎹᏆᎻᏆᎳᏇᏂ" + "ᎦᎳᏘᏇᏔᏂᏇᏙᏂᏆᏍᏂᎠᏂᎨᏔᎳᏂᏤᏤᏂᏣᎼᎶᎪᎵᏍᎢᎧᏂᏤᎩᏧᏂᎳᏫᏍᏗ ᏍᎳᏫᎪᏧᏩᏏᏪᎵᏏᏕᏂᏍᏙᎢᏥᏗᏪᎯᏓᏐᏅᎧᎡᏪᎠᏂ" + "ᎪᎢᎩᎵᏏᎡᏍᏇᎳᏂᏙᏍᏆᏂᎡᏍᏙᏂᎠᏂᏆᏍᎨᏇᏏᎠᏂᏊᎳᏂᏈᏂᏍᏫᏥᎠᏂᏇᎶᎡᏍᎦᎸᏥᏭᏕᎵᎬ ᏗᏜ ᏟᏏᎠᏂᎨᎵᎩᏍᎦᏗ ᎨᎵᎩ" + - "ᎦᎵᏏᎠᏂᏆᎳᏂᎫᏣᎳᏘᎹᎾᎧᏏᎭᎤᏌᎠᏂᏈᎷᎯᏂᏗᎧᎶᎡᏏᏂᎮᏏᎠᏂ ᏟᏲᎵᎲᏂᎦᎵᎠᏂᎮᎴᎶᎠᏰᏟ ᎦᏬᏂᎯᏍᏗᎢᏂᏙᏂᏏᎠᎢᎦ" + - "ᎪᏏᏧᏩᏂ ᏱᎢᏙᏧᏁᏍᏓᎸᎯᎢᎩᎬᏩᎵᏲᏥᎢᎢᏄᎦᏘᏚᏣᏩᏂᏏᏆᏌ ᏣᏩᏦᏥᎠᏂᎩᎫᏳᎫᏩᏂᎠᎹᎧᏌᎧᎧᎳᎵᏑᏘᎩᎻᎷᎧᎾᏓᎪᎵᎠ" + - "ᏂᎧᏄᎵᎧᏏᎻᎵᎫᏗᏏᎪᎻᏎᎷᎭᎩᎵᏣᎢᏍᎳᏘᏂᎸᎦᏏᎻᏋᎢᏍᎦᏂᏓᎴᎹᏊᎵᏏᎵᏂᎦᎳᎳᎣᎵᏚᏩᏂᎠᏂᎷᏆ-ᎧᏔᎦᎳᏘᏫᎠᏂᎹᎳᎦᏏ" + - "ᎹᏌᎵᏏᎹᏫᎹᏎᏙᏂᎠᎹᎳᏯᎳᎻᎹᏂᎪᎵᎠᏂᎹᎳᏘᎹᎴᎹᎵᏘᏍᏋᎻᏍᏃᎤᎷᏧᏴᏢ ᏂᏕᏇᎴᏁᏆᎵᎾᏙᎦᏛᏥᏃᎵᏪᏥᏂ ᎾᎵᏍᎩᏃᎵᏪ" + - "ᏥᏂ ᏉᎧᎹᎵᏧᎦᎾᏮ ᏂᏕᏇᎴᎾᏩᎰᏂᏯᏂᏣᎠᏏᏔᏂᎣᎶᎼᎣᏗᎠᎣᏎᏘᎧᏡᏂᏣᏈᏉᎵᏍᏆᏍᏙᏉᏧᎩᏍᎨᏧᏩᎠᏂᎶᎺᏂᎷᏂᏗᎶᎹᏂᎠ" + - "ᏂᏲᏅᎯᎩᏂᏯᏩᏂᏓᏍᏂᏍᎩᏗᏌᏗᏂᎠᏂᏏᏂᏗᏧᏴᏢ ᏗᏜ ᏌᎻᏌᏂᎪᏏᎾᎭᎳᏍᎶᏩᎩᏍᎶᏫᏂᎠᏂᏌᎼᏯᏂᏠᎾᏐᎹᎵᎠᎵᏇᏂᏎᏈᎠᏂ" + - "ᏍᏩᏘᏧᎦᎾᏮ ᏗᏜ ᏐᏠᏑᏂᏓᏂᏏᏍᏫᏗᏏᏍᏩᎯᎵᏔᎻᎵᏖᎷᎦᏔᏥᎩᏔᏱᏘᎩᎵᏂᎠᎠᏂᎬᎾᏧᏩᎾᏙᎾᎦᏂᎠᎬᎾᏦᎾᎦᏔᏔᏔᎯᏘᎠᏂ" + - "ᏫᎦᏳᎧᎴᏂᎠᏂᎤᎵᏚᎤᏍᏇᎩᏫᏂᏓᏫᎡᏘᎾᎻᏍᏬᎳᏊᎩᏩᎷᎾᏬᎶᏫᏠᏌᏱᏗᏍᏲᏄᏆᏓᎶᏂᎨᏑᎷᎠᏥᏂᏏᎠᏓᎾᎦᎺᎠᏗᎨᎠᎨᎹᎠᏱᏄ" + - "ᎠᎵᎤᏘᏧᎦᎾᏮ ᏗᏜ ᎠᎵᏔᎢᎠᎾᎩᎧᎹᏊᏤᎠᏩᏈᎰᎠᏑᎠᏍᏚᎵᎠᏂᎠᏩᏗᏆᎵᏁᏏᏆᏌᎠᏇᎹᏆᏇᎾᏉᏣᏊᎵᏈᏂᏏᎩᏏᎧᏉᏙᏈᎥᎩᏂ" + - "ᏍᏟᏂᎧᏳᎦᏎᏆᏃᏥᎦᏧᎨᏎᎹᎵᎠᏣᏓᏣᎳᎩᏣᏰᏂᎠᏰᏟ ᎫᏗᏏᏎᏎᎵᏩ ᏟᏲᎵ ᎠᏂᎦᎸᏓᎪᏔᏓᎳᏆᏔᎢᏔᎩᏟ ᎤᏄᎳᏥᏌᎹᎡᎳᏗ" + - " ᏐᏈᎠᏂᏚᎠᎳᏦᎳ-ᏬᏱᏓᏌᎦᎡᎻᏊᎡᏫᎩᎨᎧᏧᎧᎡᏬᏂᏙᎠᏈᎵᎩᏠᏂᏞᎤᎵᎠᏂᎦᎩᏏᎩᏇᏘᏏᎪᎶᏂᏔᏃᏍᏫᏏ ᎠᏂᏓᏥᎫᏏᏈᏥᏂᎭᏩ" + - "ᎼᎯᎵᎨᎾᏂᎭᎼᏂᎩᎦᎸᎳᏗᎨ ᏐᎵᏈᎠᏂᎠᏂᎱᏆᎢᏆᏂᎢᏈᏈᎣᎢᎶᎪᎢᏂᎫᏏᎶᏣᏆᏂᎾᎪᏆᎹᏣᎺᎧᏈᎴᎧᏥᏂᏥᏧᎧᎻᏆᎧᏆᏗᎠᏂᏔ" + - "ᏯᏆᎹᎪᏕᎧᏊᏪᏗᎠᏄᎪᎶᎧᏏᎪᏱᎳ ᏥᏂᎧᎪᎧᎴᏂᏥᏂᎩᎻᏊᏚᎧᏂᎧᏂᏇᎴᎧᎳᏣᏱ-ᏆᎵᎧᎵᎧᎴᎵᎠᏂᎫᎷᎩᏝᎻᏆᎸᏆᏫᎠᎪᎶᏂᎠ" + - "ᏂᎫᎻᎧᎳᏗᏃᎳᏂᎩᎴᏏᎦᏂᎳᎪᏓᎶᏏᏧᏴᏢ ᏗᏜ ᎷᎵᎷᏆ-ᎷᎷᎠᎷᎾᏓᎷᎣᎻᏐᎷᏱᎠᎹᏚᎴᏏᎹᎦᎯᎹᏟᎵᎹᎧᏌᎹᏌᏱᎼᎧᏌᎺᎾᏕ" + - "ᎺᎷᎼᎵᏏᎡᏂᎹᎫᏩ-ᎻᏙᎺᎳ’ᎻᎧᎹᎩᎻᎾᎧᏆᎤᎺᏂᏉᎵᎼᎭᎩᎼᏍᏏᎽᏂᏓᎩᏧᏈᏍᏗ ᏗᎦᏬᏂᎯᏍᏗᎠᎫᏌᎻᎳᏕᏏᎡᏏᏯᎹᏌᏕᎳᏂ" + - "ᏂᏯᏆᎵᏔᏂᎾᎹᏁᏩᎵᏂᎠᏏᏂᏳᏫᏯᏂᏆᏏᏲᎾᏥᏰᎹᏊᏂᏃᎦᏱᎾᎪᏧᏴᏢ ᏗᏜ ᏐᏠᏄᏪᎵᏂᏯᎾᎪᎴᏇᎦᏏᎠᏂᏆᎹᏆᎾᎦᏆᏈᏯᎺᎾᏙ" + - "ᏆᎳᎤᏩᏂᎾᎩᎵᎠᏂ ᏈᏥᏂᏡᏏᎠᏂᎩᏤᎳᏆᏄᏫᎳᎶᏙᎾᎦᏂᎶᎹᏉᎠᏬᎹᏂᎠᏂᏆᏌᏅᏓᏫᏌᎧᎾᏌᎹᏊᎷᏌᏂᏔᎵᎾᎦᎹᏇᏌᏁᎫᏏᏏᎵᎠ" + - "ᏂᏍᎦᏗᏏᏂᎦᏎᎾᎪᏱᎳᏈᎶ ᏎᏂᏔᏤᎵᎯᏘᏝᏂᏧᎦᎾᏮ ᏗᏜ ᏌᎻᎷᎴ ᏌᎻᎢᎾᎵ ᏌᎻᏍᎪᎵᏘ ᏌᎻᏐᏂᏂᎨᏏᎳᎾᏂ ᏙᏃᎪᏌᎰ" + - "ᏑᎫᎹᎪᎼᎵᎠᏂᏏᎵᎠᎩᏘᎹᏁᏖᏐᏖᏚᎼᏢᏓᏥᏟᎦᎾᏙᎩ ᏈᏏᏂᏔᎶᎪᏛᎹᏊᎧᏚᏩᎷᏔᏌᏩᎩᏚᏫᏂᎠᏂᎠᏰᏟ ᎡᎶᎯ ᏓᏟᎶᏍᏗᏓᏅ" + - "Ꭲ ᏔᎹᏏᏘᎤᏚᎷᏘᎤᎹᏊᏅᏚᎤᎾᏍᎦᎸᏩᏱᏭᎾᏦᏩᎵᏎᎵᏬᎳᏱᏔᏩᎴᎧᎳᎻᎧᏐᎦᏰᎾᎦᏇᏂᏰᎹᏋᎨᎾᏙᏂᏏᎠᏟᎶᏍᏗ ᎼᎶᎪ ᏔᎹ" + - "ᏏᏘᏑᏂᏝ ᎦᏬᏂᎯᏍᏗ ᎦᎸᏛᎢ ᏱᎩᏌᏌᎪᎯᏊ ᎢᎬᏥᎩ ᎠᏟᎶᏍᏗ ᎡᎳᏈᎠᏟᏯᏂ ᎠᏂᏓᏥᏍᏫᏏ ᎦᎸᎳᏗ ᎠᏂᏓᏥᎡᎳᏗᏜ" + - " ᎩᎵᏏᎨᎾᏓ ᎩᎵᏏᎩᎵᏏᏲ ᎩᎵᏏᎠᎹᏰᏟ ᎩᎵᏏᏔᏘᏂ ᎠᎹᏰᏟ ᏍᏆᏂᎠᏂᏍᏆᏂᏱ ᏍᏆᏂᏍᏆᏂᏱ ᏍᏆᏂᎨᎾᏓ ᎦᎸᏥᏍᏫᏏ " + - "ᎦᎸᏥᎡᎳᏗ ᏁᏛᎳᏂᏊᎵᏥᎥᎻ ᏛᏥᏆᏏᎵᎢ ᏉᏧᎦᎵᏉᏥᎦᎳ ᏉᏧᎦᎵᎹᎵᏙᏫᎠ ᏣᎹᏂᎠᏂᎧᏂᎪ ᏍᏩᎯᎵᎠᎯᏗᎨ ᏓᎶᏂᎨᎤ" + - "ᏦᏍᏗ ᏓᎶᏂᎨ", - []uint16{ // 613 elements + "ᎦᎵᏏᎠᏂᏆᎳᏂᎫᏣᎳᏘᎹᎾᎧᏏᎭᎤᏌᎠᏂᏈᎷᎯᏂᏗᎧᎶᎡᏏᏂᎮᏏᎠᏂ ᏟᏲᎵᎲᏂᎦᎵᎠᏂᎠᎳᎻᎠᏂᎮᎴᎶᎠᏰᏟ ᎦᏬᏂᎯᏍᏗᎢᏂᏙ" + + "ᏂᏏᎠᎢᎦᎪᏏᏧᏩᏂ ᏱᎢᏙᏧᏁᏍᏓᎸᎯᎢᎩᎬᏩᎵᏲᏥᎢᎢᏄᎦᏘᏚᏣᏩᏂᏏᏆᏌ ᏣᏩᏦᏥᎠᏂᎩᎫᏳᎫᏩᏂᎠᎹᎧᏌᎧᎧᎳᎵᏑᏘᎩᎻᎷᎧ" + + "ᎾᏓᎪᎵᎠᏂᎧᏄᎵᎧᏏᎻᎵᎫᏗᏏᎪᎻᏎᎷᎭᎩᎵᏣᎢᏍᎳᏘᏂᎸᎦᏏᎻᏋᎢᏍᎦᏂᏓᎴᎹᏊᎵᏏᎵᏂᎦᎳᎳᎣᎵᏚᏩᏂᎠᏂᎷᏆ-ᎧᏔᎦᎳᏘᏫᎠ" + + "ᏂᎹᎳᎦᏏᎹᏌᎵᏏᎹᏫᎹᏎᏙᏂᎠᏂᎹᎳᏯᎳᎻᎹᏂᎪᎵᎠᏂᎹᎳᏘᎹᎴᎹᎵᏘᏍᏋᎻᏍᏃᎤᎷᏧᏴᏢ ᏂᏕᏇᎴᏁᏆᎵᎾᏙᎦᏛᏥᏃᎵᏪᏥᏂ Ꮎ" + + "ᎵᏍᎩᏃᎵᏪᏥᏂ ᏉᎧᎹᎵᏧᎦᎾᏮ ᏂᏕᏇᎴᎾᏩᎰᏂᏯᏂᏣᎠᏏᏔᏂᎣᎶᎼᎣᏗᎠᎣᏎᏘᎧᏡᏂᏣᏈᏉᎵᏍᏆᏍᏙᏉᏧᎩᏍᎨᏧᏩᎠᏂᎶᎺᏂᎷ" + + "ᏂᏗᎶᎹᏂᎠᏂᏲᏅᎯᎩᏂᏯᏩᏂᏓᏍᏂᏍᎩᏗᏌᏗᏂᎠᏂᏏᏂᏗᏧᏴᏢ ᏗᏜ ᏌᎻᏌᏂᎪᏏᎾᎭᎳᏍᎶᏩᎩᏍᎶᏫᏂᎠᏂᏌᎼᏯᏂᏠᎾᏐᎹᎵᎠᎵ" + + "ᏇᏂᏒᏈᎠᏂᏍᏩᏘᏧᎦᎾᏮ ᏗᏜ ᏐᏠᏑᏂᏓᏂᏏᏍᏫᏗᏏᏍᏩᎯᎵᏔᎻᎵᏖᎷᎦᏔᏥᎩᏔᏱᏘᎩᎵᏂᎠᎠᏂᎬᎾᏧᏩᎾᏙᎾᎦᏂᎠᎬᎾᏦᎾᎦᏔ" + + "ᏔᏔᎯᏘᎠᏂᏫᎦᏳᎧᎴᏂᎠᏂᎤᎵᏚᎤᏍᏇᎩᏫᏂᏓᏫᎡᏘᎾᎻᏍᏬᎳᏊᎩᏩᎷᎾᏬᎶᏫᏠᏌᏱᏗᏍᏲᏄᏆᏓᎶᏂᎨᏑᎷᎠᏥᏂᏏᎠᏓᎾᎦᎺᎠᏗᎨ" + + "ᎠᎨᎹᎠᏱᏄᎠᎵᎤᏘᏧᎦᎾᏮ ᏗᏜ ᎠᎵᏔᎢᎠᎾᎩᎧᎹᏊᏤᎠᏩᏈᎰᎠᏑᎠᏍᏚᎵᎠᏂᎠᏩᏗᏆᎵᏁᏏᏆᏌᎠᏇᎹᏆᏇᎾᏉᏣᏊᎵᏈᏂᏏᎩᏏᎧ" + + "ᏉᏙᏈᎥᎩᏂᏍᏟᏂᎧᏳᎦᏎᏆᏃᏥᎦᏧᎨᏎᎹᎵᎠᏣᏓᏣᎳᎩᏣᏰᏂᎠᏰᏟ ᎫᏗᏏᏎᏎᎵᏩ ᏟᏲᎵ ᎠᏂᎦᎸᏓᎪᏔᏓᎳᏆᏔᎢᏔᎩᏟ ᎤᏄᎳ" + + "ᏥᏌᎹᎡᎳᏗ ᏐᏈᎠᏂᏚᎠᎳᏦᎳ-ᏬᏱᏓᏌᎦᎡᎻᏊᎡᏫᎩᎨᎧᏧᎧᎡᏬᏂᏙᎠᏈᎵᎩᏠᏂᏞᎤᎵᎠᏂᎦᎩᏏᎩᏇᏘᏏᎪᎶᏂᏔᏃᏍᏫᏏ ᎠᏂᏓ" + + "ᏥᎫᏏᏈᏥᏂᎭᏩᎼᎯᎵᎨᎾᏂᎭᎼᏂᎩᎦᎸᎳᏗᎨ ᏐᏈᎠᏂᎠᏂᎱᏆᎢᏆᏂᎢᏈᏈᎣᎢᎶᎪᎢᏂᎫᏏᎶᏣᏆᏂᎾᎪᏆᎹᏣᎺᎧᏈᎴᎧᏥᏂᏥᏧᎧᎻ" + + "ᏆᎧᏆᏗᎠᏂᏔᏯᏆᎹᎪᏕᎧᏊᏪᏗᎠᏄᎪᎶᎧᏏᎪᏱᎳ ᏥᏂᎧᎪᎧᎴᏂᏥᏂᎩᎻᏊᏚᎧᏂᎧᏂᏇᎴᎧᎳᏣᏱ-ᏆᎵᎧᎵᎧᎴᎵᎠᏂᎫᎷᎩᏝᎻᏆᎸ" + + "ᏆᏫᎠᎪᎶᏂᎠᏂᎫᎻᎧᎳᏗᏃᎳᏂᎩᎴᏏᎦᏂᎳᎪᏓᎶᏏᏧᏴᏢ ᏗᏜ ᎷᎵᎷᏆ-ᎷᎷᎠᎷᎾᏓᎷᎣᎻᏐᎷᏱᎠᎹᏚᎴᏏᎹᎦᎯᎹᏟᎵᎹᎧᏌᎹᏌ" + + "ᏱᎼᎧᏌᎺᎾᏕᎺᎷᎼᎵᏏᎡᏂᎹᎫᏩ-ᎻᏙᎺᎳ’ᎻᎧᎹᎩᎻᎾᎧᏆᎤᎺᏂᏉᎵᎼᎭᎩᎼᏍᏏᎽᏂᏓᎩᏧᏈᏍᏗ ᏗᎦᏬᏂᎯᏍᏗᎠᎫᏌᎻᎳᏕᏏᎡ" + + "ᏏᏯᎹᏌᏕᎳᏂᏂᏯᏆᎵᏔᏂᎾᎹᏁᏩᎵᏂᎠᏏᏂᏳᏫᏯᏂᏆᏏᏲᎾᏥᏰᎹᏊᏂᏃᎦᏱᎾᎪᏧᏴᏢ ᏗᏜ ᏐᏠᏄᏪᎵᏂᏯᎾᎪᎴᏇᎦᏏᎠᏂᏆᎹᏆᎾ" + + "ᎦᏆᏈᏯᎺᎾᏙᏆᎳᎤᏩᏂᎾᎩᎵᎠᏂ ᏈᏥᏂᏡᏏᎠᏂᎩᏤᎳᏆᏄᏫᎳᎶᏙᎾᎦᏂᎶᎹᏉᎠᏬᎹᏂᎠᏂᏆᏌᏅᏓᏫᏌᎧᎾᏌᎹᏊᎷᏌᏂᏔᎵᎾᎦᎹᏇ" + + "ᏌᏁᎫᏏᏏᎵᎠᏂᏍᎦᏗᏏᏂᎦᏎᎾᎪᏱᎳᏈᎶ ᏎᏂᏔᏤᎵᎯᏘᏝᏂᏧᎦᎾᏮ ᏗᏜ ᏌᎻᎷᎴ ᏌᎻᎢᎾᎵ ᏌᎻᏍᎪᎵᏘ ᏌᎻᏐᏂᏂᎨᏏᎳᎾ" + + "Ꮒ ᏙᏃᎪᏌᎰᏑᎫᎹᎪᎼᎵᎠᏂᏏᎵᎠᎩᏘᎹᏁᏖᏐᏖᏚᎼᏢᏓᏥᏟᎦᎾᏙᎩ ᏈᏏᏂᏔᎶᎪᏛᎹᏊᎧᏚᏩᎷᏔᏌᏩᎩᏚᏫᏂᎠᏂᎠᏰᏟ ᎡᎶᎯ " + + "ᏓᏟᎶᏍᏗᏓᏅᎢ ᏔᎹᏏᏘᎤᏚᎷᏘᎤᎹᏊᏅᏚᏄᏬᎵᏍᏛᎾ ᎦᏬᏂᎯᏍᏗᏩᏱᏭᎾᏦᏩᎵᏎᎵᏬᎳᏱᏔᏩᎴᎧᎳᎻᎧᏐᎦᏰᎾᎦᏇᏂᏰᎹᏋᎨᎾ" + + "ᏙᏂᏏᎠᏟᎶᏍᏗ ᎼᎶᎪ ᏔᎹᏏᏘᏑᏂᏝ ᎦᏬᏂᎯᏍᏗ ᎦᎸᏛᎢ ᏱᎩᏌᏌᎪᎯᏊ ᎢᎬᏥᎩ ᎠᏟᎶᏍᏗ ᎡᎳᏈᎠᏟᏯᏂ ᎠᏂᏓᏥᏍᏫ" + + "Ꮟ ᎦᎸᎳᏗ ᎠᏂᏓᏥᎡᎳᏗᏜ ᎩᎵᏏᎨᎾᏓ ᎩᎵᏏᎩᎵᏏᏲ ᎩᎵᏏᎠᎹᏰᏟ ᎩᎵᏏᏔᏘᏂ ᎠᎹᏰᏟ ᏍᏆᏂᎠᏂᏍᏆᏂᏱ ᏍᏆᏂᏍᏆ" + + "ᏂᏱ ᏍᏆᏂᎨᎾᏓ ᎦᎸᏥᏍᏫᏏ ᎦᎸᏥᎡᎳᏗ ᏁᏛᎳᏂᏊᎵᏥᎥᎻ ᏛᏥᏆᏏᎵᎢ ᏉᏧᎩᏍᏉᏥᎦᎳ ᏉᏧᎩᏍᎹᎵᏙᏫᎠ ᏣᎹᏂᎠᏂᎧ" + + "ᏂᎪ ᏍᏩᎯᎵᎠᎯᏗᎨ ᏓᎶᏂᎨᎤᏦᏍᏗ ᏓᎶᏂᎨ", + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0009, 0x0018, 0x0018, 0x002a, 0x0033, 0x0042, 0x0051, 0x005a, 0x0066, 0x0072, 0x007e, 0x008d, 0x009c, 0x00a8, 0x00ba, @@ -2003,101 +2257,101 @@ var langHeaders = [252]header{ 0x017b, 0x0184, 0x0190, 0x0196, 0x01a2, 0x01ab, 0x01bd, 0x01c6, 0x01d8, 0x01e1, 0x01ed, 0x01f6, 0x01ff, 0x020b, 0x0217, 0x0220, 0x0240, 0x0249, 0x025c, 0x026b, 0x0274, 0x0280, 0x028c, 0x0295, - 0x02a1, 0x02aa, 0x02aa, 0x02b9, 0x02cf, 0x02e1, 0x02e1, 0x02ea, - // Entry 40 - 7F - 0x0306, 0x0318, 0x0318, 0x0321, 0x0331, 0x0331, 0x0337, 0x034f, - 0x0361, 0x0370, 0x037c, 0x0389, 0x0395, 0x0395, 0x039e, 0x03ad, - 0x03b6, 0x03c5, 0x03ce, 0x03d7, 0x03e3, 0x03ec, 0x03f8, 0x0401, - 0x0407, 0x0410, 0x041f, 0x0428, 0x043d, 0x0446, 0x0455, 0x0461, - 0x0467, 0x0479, 0x0489, 0x0498, 0x04a4, 0x04b0, 0x04b6, 0x04c5, - 0x04d4, 0x04e6, 0x04ef, 0x04f5, 0x0501, 0x050a, 0x0513, 0x0529, - 0x0532, 0x053b, 0x0541, 0x055d, 0x0579, 0x0592, 0x059b, 0x05a7, - 0x05b3, 0x05b3, 0x05bc, 0x05c5, 0x05d1, 0x05dd, 0x05dd, 0x05e6, - // Entry 80 - BF - 0x05ef, 0x05fb, 0x0604, 0x0613, 0x061c, 0x062b, 0x0634, 0x0646, - 0x0655, 0x0664, 0x066d, 0x0684, 0x068d, 0x0699, 0x06a5, 0x06b7, - 0x06c3, 0x06c9, 0x06d2, 0x06de, 0x06ea, 0x06f3, 0x070d, 0x071c, - 0x0728, 0x0734, 0x073d, 0x0746, 0x074f, 0x0755, 0x0764, 0x0770, - 0x0779, 0x0785, 0x078e, 0x0797, 0x079d, 0x07ac, 0x07b2, 0x07c4, - 0x07cd, 0x07d9, 0x07e2, 0x07f4, 0x0800, 0x0809, 0x0812, 0x0818, - 0x0821, 0x082a, 0x082a, 0x0836, 0x083c, 0x0848, 0x0848, 0x0857, - 0x0860, 0x0860, 0x0860, 0x0869, 0x0872, 0x0872, 0x0872, 0x087e, - // Entry C0 - FF - 0x087e, 0x089e, 0x089e, 0x08aa, 0x08aa, 0x08b3, 0x08b3, 0x08bf, - 0x08bf, 0x08bf, 0x08bf, 0x08bf, 0x08bf, 0x08c5, 0x08c5, 0x08d7, - 0x08d7, 0x08e0, 0x08e0, 0x08ec, 0x08ec, 0x08f5, 0x08f5, 0x08f5, - 0x08f5, 0x08f5, 0x08fe, 0x08fe, 0x0904, 0x0904, 0x0904, 0x0904, - 0x0910, 0x0910, 0x0916, 0x0916, 0x0916, 0x0922, 0x0922, 0x0922, - 0x0922, 0x0922, 0x0928, 0x0928, 0x0928, 0x0937, 0x0937, 0x093d, - 0x093d, 0x093d, 0x093d, 0x0946, 0x0946, 0x094f, 0x0955, 0x0955, - 0x0955, 0x095e, 0x0964, 0x0964, 0x096d, 0x096d, 0x0976, 0x097f, - // Entry 100 - 13F - 0x0992, 0x0992, 0x0992, 0x0992, 0x09b5, 0x09b5, 0x09be, 0x09c7, - 0x09d0, 0x09d0, 0x09d0, 0x09e3, 0x09e3, 0x09e9, 0x09e9, 0x09ff, - 0x09ff, 0x0a08, 0x0a08, 0x0a15, 0x0a15, 0x0a1e, 0x0a27, 0x0a30, - 0x0a30, 0x0a30, 0x0a3c, 0x0a3c, 0x0a3c, 0x0a3c, 0x0a48, 0x0a48, - 0x0a48, 0x0a54, 0x0a54, 0x0a5a, 0x0a5a, 0x0a5a, 0x0a5a, 0x0a5a, - 0x0a5a, 0x0a5a, 0x0a69, 0x0a6c, 0x0a6c, 0x0a6c, 0x0a6c, 0x0a6c, - 0x0a6c, 0x0a72, 0x0a7e, 0x0a7e, 0x0a7e, 0x0a7e, 0x0a7e, 0x0a7e, - 0x0a8d, 0x0a8d, 0x0a8d, 0x0a8d, 0x0aa3, 0x0aa3, 0x0aa3, 0x0aa9, + 0x02a1, 0x02aa, 0x02aa, 0x02b9, 0x02cf, 0x02e1, 0x02f0, 0x02f9, + // Entry 40 - 7F + 0x0315, 0x0327, 0x0327, 0x0330, 0x0340, 0x0340, 0x0346, 0x035e, + 0x0370, 0x037f, 0x038b, 0x0398, 0x03a4, 0x03a4, 0x03ad, 0x03bc, + 0x03c5, 0x03d4, 0x03dd, 0x03e6, 0x03f2, 0x03fb, 0x0407, 0x0410, + 0x0416, 0x041f, 0x042e, 0x0437, 0x044c, 0x0455, 0x0464, 0x0470, + 0x0476, 0x0488, 0x0498, 0x04a7, 0x04b3, 0x04bf, 0x04c5, 0x04d7, + 0x04e6, 0x04f8, 0x0501, 0x0507, 0x0513, 0x051c, 0x0525, 0x053b, + 0x0544, 0x054d, 0x0553, 0x056f, 0x058b, 0x05a4, 0x05ad, 0x05b9, + 0x05c5, 0x05c5, 0x05ce, 0x05d7, 0x05e3, 0x05ef, 0x05ef, 0x05f8, + // Entry 80 - BF + 0x0601, 0x060d, 0x0616, 0x0625, 0x062e, 0x063d, 0x0646, 0x0658, + 0x0667, 0x0676, 0x067f, 0x0696, 0x069f, 0x06ab, 0x06b7, 0x06c9, + 0x06d5, 0x06db, 0x06e4, 0x06f0, 0x06fc, 0x0705, 0x071f, 0x072e, + 0x073a, 0x0746, 0x074f, 0x0758, 0x0761, 0x0767, 0x0776, 0x0782, + 0x078b, 0x0797, 0x07a0, 0x07a9, 0x07af, 0x07be, 0x07c4, 0x07d6, + 0x07df, 0x07eb, 0x07f4, 0x0806, 0x0812, 0x081b, 0x0824, 0x082a, + 0x0833, 0x083c, 0x083c, 0x0848, 0x084e, 0x085a, 0x085a, 0x0869, + 0x0872, 0x0872, 0x0872, 0x087b, 0x0884, 0x0884, 0x0884, 0x0890, + // Entry C0 - FF + 0x0890, 0x08b0, 0x08b0, 0x08bc, 0x08bc, 0x08c5, 0x08c5, 0x08d1, + 0x08d1, 0x08d1, 0x08d1, 0x08d1, 0x08d1, 0x08d7, 0x08d7, 0x08e9, + 0x08e9, 0x08f2, 0x08f2, 0x08fe, 0x08fe, 0x0907, 0x0907, 0x0907, + 0x0907, 0x0907, 0x0910, 0x0910, 0x0916, 0x0916, 0x0916, 0x0916, + 0x0922, 0x0922, 0x0928, 0x0928, 0x0928, 0x0934, 0x0934, 0x0934, + 0x0934, 0x0934, 0x093a, 0x093a, 0x093a, 0x0949, 0x0949, 0x094f, + 0x094f, 0x094f, 0x094f, 0x0958, 0x0958, 0x0958, 0x0961, 0x0967, + 0x0967, 0x0967, 0x0970, 0x0976, 0x0976, 0x097f, 0x097f, 0x0988, + // Entry 100 - 13F + 0x0991, 0x09a4, 0x09a4, 0x09a4, 0x09a4, 0x09c7, 0x09c7, 0x09d0, + 0x09d9, 0x09e2, 0x09e2, 0x09e2, 0x09f5, 0x09f5, 0x09fb, 0x09fb, + 0x0a11, 0x0a11, 0x0a1a, 0x0a1a, 0x0a27, 0x0a27, 0x0a30, 0x0a39, + 0x0a42, 0x0a42, 0x0a42, 0x0a4e, 0x0a4e, 0x0a4e, 0x0a4e, 0x0a5a, + 0x0a5a, 0x0a5a, 0x0a66, 0x0a66, 0x0a6c, 0x0a6c, 0x0a6c, 0x0a6c, + 0x0a6c, 0x0a6c, 0x0a6c, 0x0a7b, 0x0a7e, 0x0a7e, 0x0a7e, 0x0a7e, + 0x0a7e, 0x0a7e, 0x0a84, 0x0a90, 0x0a90, 0x0a90, 0x0a90, 0x0a90, + 0x0a90, 0x0a9f, 0x0a9f, 0x0a9f, 0x0a9f, 0x0ab5, 0x0ab5, 0x0ab5, // Entry 140 - 17F - 0x0ab2, 0x0ab2, 0x0ab2, 0x0abb, 0x0abb, 0x0aca, 0x0aca, 0x0ad6, - 0x0af5, 0x0af5, 0x0b01, 0x0b0a, 0x0b16, 0x0b1f, 0x0b2b, 0x0b2b, - 0x0b2b, 0x0b37, 0x0b40, 0x0b49, 0x0b49, 0x0b49, 0x0b49, 0x0b49, - 0x0b52, 0x0b5b, 0x0b61, 0x0b6a, 0x0b6a, 0x0b79, 0x0b79, 0x0b82, - 0x0b8b, 0x0b9d, 0x0b9d, 0x0ba3, 0x0ba3, 0x0ba9, 0x0ba9, 0x0bb9, - 0x0bb9, 0x0bb9, 0x0bbf, 0x0bce, 0x0bda, 0x0bda, 0x0be6, 0x0be6, - 0x0bec, 0x0c05, 0x0c05, 0x0c05, 0x0c14, 0x0c1d, 0x0c29, 0x0c32, - 0x0c41, 0x0c4a, 0x0c4a, 0x0c53, 0x0c5c, 0x0c5c, 0x0c5c, 0x0c68, + 0x0abb, 0x0ac4, 0x0ac4, 0x0ac4, 0x0acd, 0x0acd, 0x0adc, 0x0adc, + 0x0ae8, 0x0b04, 0x0b04, 0x0b10, 0x0b19, 0x0b25, 0x0b2e, 0x0b3a, + 0x0b3a, 0x0b3a, 0x0b46, 0x0b4f, 0x0b58, 0x0b58, 0x0b58, 0x0b58, + 0x0b58, 0x0b61, 0x0b6a, 0x0b70, 0x0b79, 0x0b79, 0x0b88, 0x0b88, + 0x0b91, 0x0b9a, 0x0bac, 0x0bac, 0x0bb2, 0x0bb2, 0x0bb8, 0x0bb8, + 0x0bc8, 0x0bc8, 0x0bc8, 0x0bce, 0x0bdd, 0x0be9, 0x0be9, 0x0bf5, + 0x0bf5, 0x0bfb, 0x0c14, 0x0c14, 0x0c14, 0x0c23, 0x0c2c, 0x0c38, + 0x0c41, 0x0c50, 0x0c59, 0x0c59, 0x0c62, 0x0c6b, 0x0c6b, 0x0c6b, // Entry 180 - 1BF - 0x0c68, 0x0c68, 0x0c68, 0x0c71, 0x0c71, 0x0c71, 0x0c77, 0x0c8e, - 0x0c8e, 0x0c9e, 0x0c9e, 0x0ca7, 0x0cad, 0x0cb3, 0x0cbc, 0x0cbc, - 0x0cbc, 0x0cc8, 0x0cc8, 0x0cd1, 0x0cda, 0x0ce3, 0x0ce3, 0x0cec, - 0x0cec, 0x0cf5, 0x0cf5, 0x0cfe, 0x0d04, 0x0d13, 0x0d13, 0x0d23, - 0x0d2c, 0x0d38, 0x0d47, 0x0d47, 0x0d53, 0x0d5c, 0x0d65, 0x0d65, - 0x0d71, 0x0d93, 0x0d9c, 0x0da8, 0x0da8, 0x0da8, 0x0da8, 0x0db1, - 0x0dc0, 0x0dc0, 0x0dd2, 0x0dd8, 0x0dd8, 0x0de1, 0x0dea, 0x0df9, - 0x0df9, 0x0e02, 0x0e14, 0x0e1d, 0x0e1d, 0x0e1d, 0x0e23, 0x0e3a, + 0x0c77, 0x0c77, 0x0c77, 0x0c77, 0x0c80, 0x0c80, 0x0c80, 0x0c80, + 0x0c86, 0x0c9d, 0x0c9d, 0x0cad, 0x0cad, 0x0cb6, 0x0cbc, 0x0cc2, + 0x0ccb, 0x0ccb, 0x0ccb, 0x0cd7, 0x0cd7, 0x0ce0, 0x0ce9, 0x0cf2, + 0x0cf2, 0x0cfb, 0x0cfb, 0x0d04, 0x0d04, 0x0d0d, 0x0d13, 0x0d22, + 0x0d22, 0x0d32, 0x0d3b, 0x0d47, 0x0d56, 0x0d56, 0x0d62, 0x0d6b, + 0x0d74, 0x0d74, 0x0d80, 0x0da2, 0x0dab, 0x0db7, 0x0db7, 0x0db7, + 0x0db7, 0x0dc0, 0x0dcf, 0x0dcf, 0x0de1, 0x0de7, 0x0de7, 0x0df0, + 0x0df9, 0x0e08, 0x0e08, 0x0e11, 0x0e23, 0x0e2c, 0x0e2c, 0x0e2c, // Entry 1C0 - 1FF - 0x0e43, 0x0e43, 0x0e43, 0x0e52, 0x0e52, 0x0e52, 0x0e52, 0x0e52, - 0x0e61, 0x0e61, 0x0e70, 0x0e82, 0x0e91, 0x0e91, 0x0eaa, 0x0eaa, - 0x0eaa, 0x0eaa, 0x0eaa, 0x0eaa, 0x0eaa, 0x0eaa, 0x0eaa, 0x0eb6, - 0x0eb6, 0x0ebc, 0x0ebc, 0x0ebc, 0x0ec8, 0x0eda, 0x0eda, 0x0eda, - 0x0ee3, 0x0ee3, 0x0ee3, 0x0ee3, 0x0ee3, 0x0ef5, 0x0ef8, 0x0f04, - 0x0f0d, 0x0f0d, 0x0f19, 0x0f19, 0x0f25, 0x0f25, 0x0f31, 0x0f3a, - 0x0f49, 0x0f52, 0x0f52, 0x0f52, 0x0f5b, 0x0f61, 0x0f61, 0x0f61, - 0x0f77, 0x0f77, 0x0f77, 0x0f86, 0x0f8c, 0x0f8c, 0x0f8c, 0x0f8c, + 0x0e32, 0x0e49, 0x0e52, 0x0e52, 0x0e52, 0x0e61, 0x0e61, 0x0e61, + 0x0e61, 0x0e61, 0x0e70, 0x0e70, 0x0e7f, 0x0e91, 0x0ea0, 0x0ea0, + 0x0eb9, 0x0eb9, 0x0eb9, 0x0eb9, 0x0eb9, 0x0eb9, 0x0eb9, 0x0eb9, + 0x0eb9, 0x0ec5, 0x0ec5, 0x0ecb, 0x0ecb, 0x0ecb, 0x0ed7, 0x0ee9, + 0x0ee9, 0x0ee9, 0x0ef2, 0x0ef2, 0x0ef2, 0x0ef2, 0x0ef2, 0x0f04, + 0x0f07, 0x0f13, 0x0f1c, 0x0f1c, 0x0f28, 0x0f28, 0x0f34, 0x0f34, + 0x0f40, 0x0f49, 0x0f58, 0x0f61, 0x0f61, 0x0f61, 0x0f6a, 0x0f70, + 0x0f70, 0x0f70, 0x0f86, 0x0f86, 0x0f86, 0x0f95, 0x0f9b, 0x0f9b, // Entry 200 - 23F - 0x0f8c, 0x0fa6, 0x0fb3, 0x0fc3, 0x0fd6, 0x0fe2, 0x0fe2, 0x0ff8, - 0x0ff8, 0x0ffe, 0x0ffe, 0x1007, 0x1007, 0x1007, 0x1016, 0x1016, - 0x1022, 0x1022, 0x1022, 0x102b, 0x1031, 0x1031, 0x103a, 0x1043, - 0x1043, 0x1043, 0x1043, 0x104c, 0x104c, 0x104c, 0x104c, 0x104c, - 0x105c, 0x105c, 0x1065, 0x1065, 0x1065, 0x1065, 0x1071, 0x107a, - 0x1086, 0x1095, 0x10ce, 0x10da, 0x10da, 0x10e9, 0x10f8, 0x10fe, - 0x10fe, 0x10fe, 0x10fe, 0x10fe, 0x10fe, 0x10fe, 0x1107, 0x1113, - 0x111f, 0x1125, 0x1125, 0x1125, 0x1125, 0x1131, 0x1131, 0x1137, + 0x0f9b, 0x0f9b, 0x0f9b, 0x0fb5, 0x0fc2, 0x0fd2, 0x0fe5, 0x0ff1, + 0x0ff1, 0x1007, 0x1007, 0x100d, 0x100d, 0x1016, 0x1016, 0x1016, + 0x1025, 0x1025, 0x1031, 0x1031, 0x1031, 0x103a, 0x1040, 0x1040, + 0x1049, 0x1052, 0x1052, 0x1052, 0x1052, 0x105b, 0x105b, 0x105b, + 0x105b, 0x105b, 0x106b, 0x106b, 0x1074, 0x1074, 0x1074, 0x1074, + 0x1080, 0x1089, 0x1095, 0x10a4, 0x10dd, 0x10e9, 0x10e9, 0x10f8, + 0x111d, 0x1123, 0x1123, 0x1123, 0x1123, 0x1123, 0x1123, 0x1123, + 0x112c, 0x1138, 0x1144, 0x114a, 0x114a, 0x114a, 0x114a, 0x1156, // Entry 240 - 27F - 0x1137, 0x1137, 0x1146, 0x114f, 0x114f, 0x115e, 0x115e, 0x115e, - 0x115e, 0x115e, 0x1184, 0x118a, 0x11b4, 0x11ba, 0x11ea, 0x11ea, - 0x1203, 0x1226, 0x123c, 0x124f, 0x1265, 0x127b, 0x129b, 0x12b7, - 0x12cd, 0x12cd, 0x12e0, 0x12f3, 0x1309, 0x131f, 0x1338, 0x1351, - 0x1370, 0x1370, 0x1386, 0x139f, 0x13b8, + 0x1156, 0x115c, 0x115c, 0x115c, 0x116b, 0x1174, 0x1174, 0x1183, + 0x1183, 0x1183, 0x1183, 0x1183, 0x11a9, 0x11af, 0x11d9, 0x11df, + 0x120f, 0x120f, 0x1228, 0x124b, 0x1261, 0x1274, 0x128a, 0x12a0, + 0x12c0, 0x12dc, 0x12f2, 0x12f2, 0x1305, 0x1318, 0x132e, 0x1344, + 0x135d, 0x1376, 0x1395, 0x1395, 0x13ab, 0x13c4, 0x13dd, }, }, { // ckb - "ئەمهەرینجیعەرەبیئاسامیئازەربایجانیبێلاڕووسیبۆلگاریبەنگلادێشیبرێتونیبۆسنی" + + "ئەمهەرینجیعەرەبیئاسامیئازەربایجانیبیلاڕووسیبۆلگاریبەنگلادێشیبرێتونیبۆسنی" + "كاتالۆنیچەكیوێلزیدانماركیئاڵمانییۆنانیئینگلیزیئێسپیرانتۆئیسپانیئیست" + "ۆنیباسکیفارسیفینلەندیفەرانسیفریسیی ڕۆژاوائیرلەندیگالیسیگووارانیگوجا" + "راتیهیبرێهیندیكرواتیهەنگاری (مەجاری)ئەرمەنیئێەندونیزیئیسلەندیئیتالی" + "ژاپۆنیجاڤانیگۆرجستانیکازاخیکوردیكرگیزیلاتینیلينگالالاویلیتوانیلێتۆن" + "یماكێدۆنیمەنگۆلیماراتینیپالیهۆڵەندینۆروێژیئۆرییاپەنجابیپۆڵۆنیایی (ل" + "ەهستانی)پەشتووپورتوگالیڕۆمانیڕووسیسانسکريتسيندیسینهەلیسلۆڤاكیسلۆڤێن" + - "یسۆمالیئاڵبانیسەربیسێسۆتۆسودانیسویدیتامیلیتەلۆگویتاجیکیتایلەندیتیگر" + + "یسۆمالیئەڵبانیسەربیسێسۆتۆسودانیسویدیتامیلیتەلۆگویتاجیکیتایلەندیتیگر" + "ینیایتورکمانیتورکیئويخووریئۆكراینیئۆردووئوزبەکیڤیەتنامیچینیزولوکورد" + "یی ناوەندیمازەندەرانیکوردیی باشووریسامی باشووریزمانی نەناسراوئازەرب" + "ایجانی باشووریئینگلیزیی ئۆسترالیاییئینگلیزیی کەنەداییئینگلیزیی بریت" + - "انیاییئینگلیزیی ئەمەریکاییپورتوگاڵی برازیلپورتوگاڵی (پورتوگاڵ)", - []uint16{ // 608 elements + "انیاییئینگلیزیی ئەمەریکایی", + []uint16{ // 600 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0014, 0x0014, 0x0020, 0x002c, 0x002c, 0x002c, 0x0044, 0x0044, 0x0056, 0x0064, @@ -2135,7 +2389,7 @@ var langHeaders = [252]header{ 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, // Entry 100 - 13F - 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, + 0x04b1, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, @@ -2159,7 +2413,7 @@ var langHeaders = [252]header{ 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, 0x04cc, - 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, + 0x04cc, 0x04cc, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, // Entry 1C0 - 1FF 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, @@ -2168,22 +2422,21 @@ var langHeaders = [252]header{ 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, - 0x04e2, 0x04e2, 0x04e2, 0x04fd, 0x04fd, 0x04fd, 0x04fd, 0x04fd, + 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04fd, 0x04fd, 0x04fd, 0x04fd, 0x04fd, 0x04fd, 0x04fd, 0x04fd, 0x04fd, 0x04fd, 0x04fd, // Entry 200 - 23F - 0x04fd, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, + 0x04fd, 0x04fd, 0x04fd, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, + 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, - 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x0514, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, // Entry 240 - 27F 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, - 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x0556, - 0x0556, 0x0556, 0x057f, 0x05a2, 0x05c9, 0x05f0, 0x05f0, 0x05f0, - 0x05f0, 0x05f0, 0x05f0, 0x05f0, 0x05f0, 0x05f0, 0x060f, 0x0634, + 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, 0x052f, + 0x052f, 0x0556, 0x0556, 0x0556, 0x057f, 0x05a2, 0x05c9, 0x05f0, }, }, { // cs @@ -2204,60 +2457,60 @@ var langHeaders = [252]header{ "csembwrgegGandaLimbwrgegLingalaLaoegLithwanegLuba-KatangaLatfiegMala" + "gasegMarsialegMaoriMacedonegMalayalamMongolegMarathiMaleiegMaltegByr" + "manegNawrŵegNdebele GogleddolNepalegNdongaIseldiregNorwyeg NynorskNo" + - "rwyeg BokmålNdebele DeheuolNafahoNianjaOcsitanegOjibwaOromoOriyaOset" + - "egPwnjabegPaliPwylegPashtoPortiwgeegQuechuaRománshRwndiRwmanegRwsegC" + - "iniarŵandegSansgritSardegSindhiSami GogleddolSangoSinhalegSlofacegSl" + - "ofenegSamöegShonaSomalegAlbanegSerbegSwatiSesotheg DeheuolSwndanegSw" + - "edegSwahiliTamilegTeluguTajicegThaiTigrinyaTwrcmenegTswanaTongegTyrc" + - "egTsongaegTataregTahitïegUighurWcreinegWrdwWsbecegFendegFietnamegFol" + - "apükWalwnegWoloffXhosaIddew-AlmaenegIorwbaTsieineegSwlwAcehnegAcoliA" + - "dangmegCircaseg GorllewinolArabeg TunisiaAffrihiliAghemegAinŵegAcade" + - "gAlabamäegAlewtegGhegeg AlbaniaAltäeg DeheuolHen SaesnegAngikaAramae" + - "gArawcanegAraonaegArapahoArabeg AlgeriaArawacegArabeg MorocoArabeg y" + - "r AifftAswIaith Arwyddion AmericaAstwrianegAwadhiBalwtsiBalïegBasâeg" + - "BamwmegBejäegBembegBenaBaffwtegBadagaBalochi GorllewinolBhojpuriBini" + - "ComegSiksikaBrahuiBodoAcwsegBwriategBugineseBwlwBlinCadoCaribegAtsam" + - "egCebuanoTsigaChuukeseMariegSioctoTsierocîCheyenneCwrdeg SoraniCopte" + - "gTyrceg y CrimeaFfrangeg Seselwa CreoleDacotaegDargwaTaitaDogribDinc" + - "aZarmaegDogriSorbeg IsafDiwalegIseldireg CanolJola-FonyiDazagaEmbwEf" + - "ikHen EifftegEkajukElamegSaesneg CanolEwondoExtremaduregFfilipinegFf" + - "inneg TornedalFonFfrangeg CajwnFfrangeg CanolHen FfrangegArpitanegFf" + - "riseg GogleddolFfriseg y DwyrainFfriwlegGaGagauzGaioGbaiaDareg y Zor" + - "oastriaidGeezGilbertegAlmaeneg Uchel CanolHen Almaeneg UchelGorontal" + - "oGothegHen RoegAlmaeneg y SwistirGusiiGwichʼinHaidaHawäiegHiligaynon" + - "HethegHmongegSorbeg UchafHupaIbanegIbibioIlocanegIngwsiegLojbanNgomb" + - "aMatsiameIddew-BersiegIddew-ArabegCara-CalpacegCabilegKachinJjuCamba" + - "Circaseg DwyreiniolTyapegMacondegCaboferdianegKoroCàsegKoyra ChiiniC" + - "howaregKakoKalenjinKimbunduKomi-PermyakConcaniKpelleKarachay-BalkarC" + - "arelegKurukhShambalaBaffiaCwlenegCwmicegIddew-SbaenegLangiLahndaLamb" + - "aLezghegLakotaLombardegMongoLoziLuri GogleddolLatgalegLuba-LuluaLwnd" + - "aLŵoLwshaiegLwyiaMadwregMagahiMaithiliMacasaregMandingoMasaiMocsiaMa" + - "ndaregMendegMêrwMorisyenGwyddeleg CanolMakhuwa-MeettoMetaMicmacegMin" + - "angkabauManshwManipwriMohocegMosiMari GorllewinolMundangMwy nag un i" + - "aithCreekMirandegMarwariErzyaMasanderaniNapliegNamaAlmaeneg IselNewa" + - "egNiasNiueanAo NagaKwasioNgiemboonNogaiHen NorsegN’KoSotho Gogleddol" + - "NŵeregHen NewariNiamweziNiancoleNioroNzimegOsagegTyrceg OtomanPangas" + - "inegPahlafiPampangaPapiamentoPalawanPicardegPidgin NigeriaAlmaeneg P" + - "ensylfaniaHen BersiegAlmaeneg PalatinPhoenicegPiedmontegPontegPohnpe" + - "ianegPrwsegHen BrofensalegK’iche’RajasthanegRapanŵiRaratongegRomboRo" + - "maniRotumanegAromanegRwaSandäwegSakhaAramaeg SamariaSambŵrwSasacegSa" + - "ntaliNgambeiegSangwSisilegSgotegSasareseg SardiniaCwrdeg DeheuolSene" + - "caSenaSeriSelcypegKoyraboro SenniHen WyddelegSamogitegTachelhitShanA" + - "rabeg ChadSidamoIs-silesiegSami DeheuolSami LwleSami InariSami Scolt" + - "SonincegSogdegSranan TongoSereregSahoFfriseg SaterlandSwcwmaSwsŵegSw" + - "meregComoregHen SyriegSyriegSilesiegTuluTimnegTesoTerenaTetumegTigre" + - "gTifegTocelawegTsakhuregKlingonLlingitTalyshegTamashecegTok PisinTar" + - "okoTsaconegTwmbwcaTwfalwegTasawaqTwfwniegTamaseit Canolbarth MorocoF" + - "otiacegWgaritegUmbunduY GwraiddFaiegFenisegFepsFflemeg GorllewinolFo" + - "tegFunjoWalseregWalamoWinarayegWashoWarlpiriCalmycegSogaIangbenIemba" + - "egCantoneegZapotecegBlisssymbolsZêlandegTamaseit SafonolZuniDim cynn" + - "wys ieithyddolZazäegArabeg Modern SafonolAserbaijaneg DeheuolAlmaene" + - "g AwstriaAlmaeneg Safonol y SwistirSaesneg AwstraliaSaesneg CanadaSa" + - "esneg PrydainSaesneg AmericaSbaeneg America LadinSbaeneg EwropSbaene" + - "g MecsicoFfrangeg CanadaFfrangeg y SwistirSacsoneg IselFflemegPortiw" + - "geeg BrasilPortiwgeeg EwropMoldofegSerbo-CroategSwahili’r CongoTsiei" + - "neeg SymledigTsieineeg Traddodiadol", - []uint16{ // 613 elements + "rwyeg BokmålNdebele DeheuolNafahoNianjaOcsitanegOjibwaOromoOdiaOsete" + + "gPwnjabegPaliPwylegPashtoPortiwgeegQuechuaRománshRwndiRwmanegRwsegCi" + + "niarŵandegSansgritSardegSindhiSami GogleddolSangoSinhalegSlofacegSlo" + + "fenegSamöegShonaSomalegAlbanegSerbegSwatiSesotheg DeheuolSwndanegSwe" + + "degSwahiliTamilegTeluguTajicegThaiTigrinyaTwrcmenegTswanaTongegTyrce" + + "gTsongaegTataregTahitïegUighurWcreinegWrdwWsbecegFendegFietnamegFola" + + "pükWalwnegWoloffXhosaIddew-AlmaenegIorwbaTsieineegSwlwAcehnegAcoliAd" + + "angmegCircaseg GorllewinolArabeg TunisiaAffrihiliAghemegAinŵegAcadeg" + + "AlabamäegAlewtegGhegeg AlbaniaAltäeg DeheuolHen SaesnegAngikaAramaeg" + + "ArawcanegAraonaegArapahoArabeg AlgeriaArawacegArabeg MorocoArabeg yr" + + " AifftAswIaith Arwyddion AmericaAstwrianegAwadhiBalwtsiBalïegBasâegB" + + "amwmegBejäegBembegBenaBaffwtegBadagaBalochi GorllewinolBhojpuriBiniC" + + "omegSiksikaBrahuiBodoAcwsegBwriategBwginaegBwlwBlinCadoCaribegAtsame" + + "gCebuanoTsigaChuukaegMariegSioctoTsierocîCheyenneCwrdeg SoraniCopteg" + + "Tyrceg y CrimeaFfrangeg Seselwa CreoleDacotaegDargwaTaitaDogribDinca" + + "SarmaegDogriSorbeg IsafDiwalegIseldireg CanolJola-FonyiDazagaEmbwEfi" + + "kHen EifftegEkajukElamegSaesneg CanolEwondoExtremaduregFfilipinegFfi" + + "nneg TornedalFonFfrangeg CajwnFfrangeg CanolHen FfrangegArpitanegFfr" + + "iseg GogleddolFfriseg y DwyrainFfriwlegGaGagauzGaioGbaiaDareg y Zoro" + + "astriaidGeezGilbertegAlmaeneg Uchel CanolHen Almaeneg UchelGorontalo" + + "GothegHen RoegAlmaeneg y SwistirGusiiGwichʼinHaidaHawäiegHiligaynonH" + + "ethegHmongegSorbeg UchafHupaIbanegIbibioIlocanegIngwsiegLojbanNgomba" + + "MatsiameIddew-BersiegIddew-ArabegCara-CalpacegCabilegKachinJjuCambaC" + + "abardiegTyapegMacondegCaboferdianegKoroCàsegKoyra ChiiniChowaregKako" + + "KalenjinKimbunduKomi-PermyakConcaniKpelleKarachay-BalkarCarelegKuruk" + + "hShambalaBaffiaCwlenegCwmicegIddew-SbaenegLangiLahndaLambaLezghegLak" + + "otaLombardegMongoLoziLuri GogleddolLatgalegLuba-LuluaLwndaLŵoLwshaie" + + "gLwyiaMadwregMagahiMaithiliMacasaregMandingoMasaiMocsiaMandaregMende" + + "gMêrwMorisyenGwyddeleg CanolMakhuwa-MeettoMetaMicmacegMinangkabauMan" + + "shwManipwriMohocegMosiMari GorllewinolMundangMwy nag un iaithCreekMi" + + "randegMarwariErzyaMasanderaniNapliegNamaAlmaeneg IselNewaegNiasNiuea" + + "nAo NagaKwasioNgiemboonNogaiHen NorsegN’KoSotho GogleddolNŵeregHen N" + + "ewariNiamweziNiancoleNioroNzimegOsagegTyrceg OtomanPangasinegPahlafi" + + "PampangaPapiamentoPalawanPicardegPidgin NigeriaAlmaeneg PensylfaniaH" + + "en BersiegAlmaeneg PalatinPhoenicegPiedmontegPontegPohnpeianegPrwseg" + + "Hen BrofensalegK’iche’RajasthanegRapanŵiRaratongegRomboRomaniRotuman" + + "egAromanegRwaSandäwegSakhaAramaeg SamariaSambŵrwSasacegSantaliNgambe" + + "iegSangwSisilegSgotegSasareseg SardiniaCwrdeg DeheuolSenecaSenaSeriS" + + "elcypegKoyraboro SenniHen WyddelegSamogitegTachelhitShanArabeg ChadS" + + "idamoIs-silesiegSami DeheuolSami LwleSami InariSami ScoltSonincegSog" + + "degSranan TongoSereregSahoFfriseg SaterlandSwcwmaSwsŵegSwmeregComore" + + "gHen SyriegSyriegSilesiegTuluTimnegTesoTerenaTetumegTigregTifegTocel" + + "awegTsakhuregKlingonLlingitTalyshegTamashecegTok PisinTarokoTsaconeg" + + "TwmbwcaTwfalwegTasawaqTwfwniegTamaseit Canolbarth MorocoFotiacegWgar" + + "itegUmbunduIaith anhysbysFaiegFenisegFepsFflemeg GorllewinolFotegFun" + + "joWalseregWalamoWinarayegWashoWarlpiriCalmycegSogaIangbenIembaegCant" + + "oneegZapotecegBlisssymbolsZêlandegTamaseit SafonolSwniDim cynnwys ie" + + "ithyddolSasäegArabeg Modern SafonolAserbaijaneg DeheuolAlmaeneg Awst" + + "riaAlmaeneg Safonol y SwistirSaesneg AwstraliaSaesneg CanadaSaesneg " + + "PrydainSaesneg AmericaSbaeneg America LadinSbaeneg EwropSbaeneg Mecs" + + "icoFfrangeg CanadaFfrangeg y SwistirSacsoneg IselFflemegPortiwgeeg B" + + "rasilPortiwgeeg EwropMoldofegSerbo-CroategSwahili’r CongoTsieineeg S" + + "ymledigTsieineeg Traddodiadol", + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0007, 0x000f, 0x0018, 0x0023, 0x0029, 0x0030, 0x0038, 0x003e, 0x0044, 0x004a, 0x0051, 0x005d, 0x0067, 0x0070, 0x0078, @@ -2275,76 +2528,76 @@ var langHeaders = [252]header{ 0x02d4, 0x02dd, 0x02e9, 0x02f0, 0x02f9, 0x0302, 0x0307, 0x0310, 0x0319, 0x0321, 0x0328, 0x032f, 0x0335, 0x033d, 0x0345, 0x0356, 0x035d, 0x0363, 0x036c, 0x037b, 0x038a, 0x0399, 0x039f, 0x03a5, - 0x03ae, 0x03b4, 0x03b9, 0x03be, 0x03c4, 0x03cc, 0x03d0, 0x03d6, - // Entry 80 - BF - 0x03dc, 0x03e6, 0x03ed, 0x03f5, 0x03fa, 0x0401, 0x0406, 0x0413, - 0x041b, 0x0421, 0x0427, 0x0435, 0x043a, 0x0442, 0x044a, 0x0452, - 0x0459, 0x045e, 0x0465, 0x046c, 0x0472, 0x0477, 0x0487, 0x048f, - 0x0495, 0x049c, 0x04a3, 0x04a9, 0x04b0, 0x04b4, 0x04bc, 0x04c5, - 0x04cb, 0x04d1, 0x04d7, 0x04df, 0x04e6, 0x04ef, 0x04f5, 0x04fd, - 0x0501, 0x0508, 0x050e, 0x0517, 0x051f, 0x0526, 0x052c, 0x0531, - 0x053f, 0x0545, 0x0545, 0x054e, 0x0552, 0x0559, 0x055e, 0x0566, - 0x057a, 0x0588, 0x0591, 0x0598, 0x059f, 0x05a5, 0x05af, 0x05b6, - // Entry C0 - FF - 0x05c4, 0x05d3, 0x05de, 0x05e4, 0x05eb, 0x05f4, 0x05fc, 0x0603, - 0x0611, 0x0611, 0x0619, 0x0626, 0x0635, 0x0638, 0x064f, 0x0659, - 0x0659, 0x065f, 0x0666, 0x066d, 0x066d, 0x0674, 0x067b, 0x067b, - 0x067b, 0x0682, 0x0688, 0x0688, 0x068c, 0x0694, 0x069a, 0x06ad, - 0x06b5, 0x06b5, 0x06b9, 0x06b9, 0x06be, 0x06c5, 0x06c5, 0x06c5, - 0x06c5, 0x06cb, 0x06cf, 0x06d5, 0x06dd, 0x06e5, 0x06e9, 0x06ed, - 0x06ed, 0x06f1, 0x06f8, 0x06f8, 0x06ff, 0x0706, 0x070b, 0x070b, - 0x070b, 0x0713, 0x0719, 0x0719, 0x071f, 0x071f, 0x0728, 0x0730, - // Entry 100 - 13F - 0x073d, 0x0743, 0x0743, 0x0752, 0x0769, 0x0769, 0x0771, 0x0777, - 0x077c, 0x077c, 0x077c, 0x0782, 0x0787, 0x078e, 0x0793, 0x079e, - 0x079e, 0x07a5, 0x07b4, 0x07be, 0x07be, 0x07c4, 0x07c8, 0x07cc, - 0x07cc, 0x07d7, 0x07dd, 0x07e3, 0x07f0, 0x07f0, 0x07f6, 0x0802, - 0x0802, 0x080c, 0x081c, 0x081f, 0x082d, 0x083b, 0x0847, 0x0850, - 0x0861, 0x0872, 0x087a, 0x087c, 0x0882, 0x0882, 0x0886, 0x088b, - 0x089f, 0x08a3, 0x08ac, 0x08ac, 0x08c0, 0x08d2, 0x08d2, 0x08d2, - 0x08db, 0x08e1, 0x08e1, 0x08e9, 0x08fb, 0x08fb, 0x08fb, 0x0900, + 0x03ae, 0x03b4, 0x03b9, 0x03bd, 0x03c3, 0x03cb, 0x03cf, 0x03d5, + // Entry 80 - BF + 0x03db, 0x03e5, 0x03ec, 0x03f4, 0x03f9, 0x0400, 0x0405, 0x0412, + 0x041a, 0x0420, 0x0426, 0x0434, 0x0439, 0x0441, 0x0449, 0x0451, + 0x0458, 0x045d, 0x0464, 0x046b, 0x0471, 0x0476, 0x0486, 0x048e, + 0x0494, 0x049b, 0x04a2, 0x04a8, 0x04af, 0x04b3, 0x04bb, 0x04c4, + 0x04ca, 0x04d0, 0x04d6, 0x04de, 0x04e5, 0x04ee, 0x04f4, 0x04fc, + 0x0500, 0x0507, 0x050d, 0x0516, 0x051e, 0x0525, 0x052b, 0x0530, + 0x053e, 0x0544, 0x0544, 0x054d, 0x0551, 0x0558, 0x055d, 0x0565, + 0x0579, 0x0587, 0x0590, 0x0597, 0x059e, 0x05a4, 0x05ae, 0x05b5, + // Entry C0 - FF + 0x05c3, 0x05d2, 0x05dd, 0x05e3, 0x05ea, 0x05f3, 0x05fb, 0x0602, + 0x0610, 0x0610, 0x0618, 0x0625, 0x0634, 0x0637, 0x064e, 0x0658, + 0x0658, 0x065e, 0x0665, 0x066c, 0x066c, 0x0673, 0x067a, 0x067a, + 0x067a, 0x0681, 0x0687, 0x0687, 0x068b, 0x0693, 0x0699, 0x06ac, + 0x06b4, 0x06b4, 0x06b8, 0x06b8, 0x06bd, 0x06c4, 0x06c4, 0x06c4, + 0x06c4, 0x06ca, 0x06ce, 0x06d4, 0x06dc, 0x06e4, 0x06e8, 0x06ec, + 0x06ec, 0x06f0, 0x06f7, 0x06f7, 0x06fe, 0x06fe, 0x0705, 0x070a, + 0x070a, 0x070a, 0x0712, 0x0718, 0x0718, 0x071e, 0x071e, 0x0727, + // Entry 100 - 13F + 0x072f, 0x073c, 0x0742, 0x0742, 0x0751, 0x0768, 0x0768, 0x0770, + 0x0776, 0x077b, 0x077b, 0x077b, 0x0781, 0x0786, 0x078d, 0x0792, + 0x079d, 0x079d, 0x07a4, 0x07b3, 0x07bd, 0x07bd, 0x07c3, 0x07c7, + 0x07cb, 0x07cb, 0x07d6, 0x07dc, 0x07e2, 0x07ef, 0x07ef, 0x07f5, + 0x0801, 0x0801, 0x080b, 0x081b, 0x081e, 0x082c, 0x083a, 0x0846, + 0x084f, 0x0860, 0x0871, 0x0879, 0x087b, 0x0881, 0x0881, 0x0885, + 0x088a, 0x089e, 0x08a2, 0x08ab, 0x08ab, 0x08bf, 0x08d1, 0x08d1, + 0x08d1, 0x08da, 0x08e0, 0x08e0, 0x08e8, 0x08fa, 0x08fa, 0x08fa, // Entry 140 - 17F - 0x0909, 0x090e, 0x090e, 0x0916, 0x0916, 0x0920, 0x0926, 0x092d, - 0x0939, 0x0939, 0x093d, 0x0943, 0x0949, 0x0951, 0x0959, 0x0959, - 0x0959, 0x095f, 0x0965, 0x096d, 0x097a, 0x0986, 0x0986, 0x0993, - 0x099a, 0x09a0, 0x09a3, 0x09a8, 0x09a8, 0x09bb, 0x09bb, 0x09c1, - 0x09c9, 0x09d6, 0x09d6, 0x09da, 0x09da, 0x09e0, 0x09e0, 0x09ec, - 0x09f4, 0x09f4, 0x09f8, 0x0a00, 0x0a08, 0x0a14, 0x0a1b, 0x0a1b, - 0x0a21, 0x0a30, 0x0a30, 0x0a30, 0x0a37, 0x0a3d, 0x0a45, 0x0a4b, - 0x0a52, 0x0a59, 0x0a59, 0x0a66, 0x0a6b, 0x0a71, 0x0a76, 0x0a7d, + 0x08ff, 0x0908, 0x090d, 0x090d, 0x0915, 0x0915, 0x091f, 0x0925, + 0x092c, 0x0938, 0x0938, 0x093c, 0x0942, 0x0948, 0x0950, 0x0958, + 0x0958, 0x0958, 0x095e, 0x0964, 0x096c, 0x0979, 0x0985, 0x0985, + 0x0992, 0x0999, 0x099f, 0x09a2, 0x09a7, 0x09a7, 0x09b0, 0x09b0, + 0x09b6, 0x09be, 0x09cb, 0x09cb, 0x09cf, 0x09cf, 0x09d5, 0x09d5, + 0x09e1, 0x09e9, 0x09e9, 0x09ed, 0x09f5, 0x09fd, 0x0a09, 0x0a10, + 0x0a10, 0x0a16, 0x0a25, 0x0a25, 0x0a25, 0x0a2c, 0x0a32, 0x0a3a, + 0x0a40, 0x0a47, 0x0a4e, 0x0a4e, 0x0a5b, 0x0a60, 0x0a66, 0x0a6b, // Entry 180 - 1BF - 0x0a7d, 0x0a7d, 0x0a7d, 0x0a83, 0x0a8c, 0x0a91, 0x0a95, 0x0aa3, - 0x0aab, 0x0ab5, 0x0ab5, 0x0aba, 0x0abe, 0x0ac6, 0x0acb, 0x0acb, - 0x0acb, 0x0ad2, 0x0ad2, 0x0ad8, 0x0ae0, 0x0ae9, 0x0af1, 0x0af6, - 0x0af6, 0x0afc, 0x0b04, 0x0b0a, 0x0b0f, 0x0b17, 0x0b26, 0x0b34, - 0x0b38, 0x0b40, 0x0b4b, 0x0b51, 0x0b59, 0x0b60, 0x0b64, 0x0b74, - 0x0b7b, 0x0b8b, 0x0b90, 0x0b98, 0x0b9f, 0x0b9f, 0x0b9f, 0x0ba4, - 0x0baf, 0x0baf, 0x0bb6, 0x0bba, 0x0bc7, 0x0bcd, 0x0bd1, 0x0bd7, - 0x0bde, 0x0be4, 0x0bed, 0x0bf2, 0x0bfc, 0x0bfc, 0x0c02, 0x0c11, + 0x0a72, 0x0a72, 0x0a72, 0x0a72, 0x0a78, 0x0a81, 0x0a86, 0x0a86, + 0x0a8a, 0x0a98, 0x0aa0, 0x0aaa, 0x0aaa, 0x0aaf, 0x0ab3, 0x0abb, + 0x0ac0, 0x0ac0, 0x0ac0, 0x0ac7, 0x0ac7, 0x0acd, 0x0ad5, 0x0ade, + 0x0ae6, 0x0aeb, 0x0aeb, 0x0af1, 0x0af9, 0x0aff, 0x0b04, 0x0b0c, + 0x0b1b, 0x0b29, 0x0b2d, 0x0b35, 0x0b40, 0x0b46, 0x0b4e, 0x0b55, + 0x0b59, 0x0b69, 0x0b70, 0x0b80, 0x0b85, 0x0b8d, 0x0b94, 0x0b94, + 0x0b94, 0x0b99, 0x0ba4, 0x0ba4, 0x0bab, 0x0baf, 0x0bbc, 0x0bc2, + 0x0bc6, 0x0bcc, 0x0bd3, 0x0bd9, 0x0be2, 0x0be7, 0x0bf1, 0x0bf1, // Entry 1C0 - 1FF - 0x0c18, 0x0c22, 0x0c2a, 0x0c32, 0x0c37, 0x0c3d, 0x0c43, 0x0c50, - 0x0c5a, 0x0c61, 0x0c69, 0x0c73, 0x0c7a, 0x0c82, 0x0c90, 0x0ca4, - 0x0ca4, 0x0caf, 0x0cbf, 0x0cc8, 0x0cd2, 0x0cd8, 0x0ce3, 0x0ce9, - 0x0cf8, 0x0d03, 0x0d03, 0x0d0e, 0x0d16, 0x0d20, 0x0d20, 0x0d20, - 0x0d25, 0x0d2b, 0x0d34, 0x0d34, 0x0d34, 0x0d3c, 0x0d3f, 0x0d48, - 0x0d4d, 0x0d5c, 0x0d64, 0x0d6b, 0x0d72, 0x0d72, 0x0d7b, 0x0d80, - 0x0d87, 0x0d8d, 0x0d9f, 0x0dad, 0x0db3, 0x0db7, 0x0dbb, 0x0dc3, - 0x0dd2, 0x0dde, 0x0de7, 0x0df0, 0x0df4, 0x0dff, 0x0e05, 0x0e10, + 0x0bf7, 0x0c06, 0x0c0d, 0x0c17, 0x0c1f, 0x0c27, 0x0c2c, 0x0c32, + 0x0c38, 0x0c45, 0x0c4f, 0x0c56, 0x0c5e, 0x0c68, 0x0c6f, 0x0c77, + 0x0c85, 0x0c99, 0x0c99, 0x0ca4, 0x0cb4, 0x0cbd, 0x0cc7, 0x0ccd, + 0x0cd8, 0x0cde, 0x0ced, 0x0cf8, 0x0cf8, 0x0d03, 0x0d0b, 0x0d15, + 0x0d15, 0x0d15, 0x0d1a, 0x0d20, 0x0d29, 0x0d29, 0x0d29, 0x0d31, + 0x0d34, 0x0d3d, 0x0d42, 0x0d51, 0x0d59, 0x0d60, 0x0d67, 0x0d67, + 0x0d70, 0x0d75, 0x0d7c, 0x0d82, 0x0d94, 0x0da2, 0x0da8, 0x0dac, + 0x0db0, 0x0db8, 0x0dc7, 0x0dd3, 0x0ddc, 0x0de5, 0x0de9, 0x0df4, // Entry 200 - 23F - 0x0e10, 0x0e1c, 0x0e25, 0x0e2f, 0x0e39, 0x0e41, 0x0e47, 0x0e53, - 0x0e5a, 0x0e5e, 0x0e6f, 0x0e75, 0x0e7c, 0x0e83, 0x0e8a, 0x0e94, - 0x0e9a, 0x0ea2, 0x0ea6, 0x0eac, 0x0eb0, 0x0eb6, 0x0ebd, 0x0ec3, - 0x0ec8, 0x0ed1, 0x0eda, 0x0ee1, 0x0ee8, 0x0ef0, 0x0efa, 0x0efa, - 0x0f03, 0x0f03, 0x0f09, 0x0f11, 0x0f11, 0x0f11, 0x0f18, 0x0f20, - 0x0f27, 0x0f2f, 0x0f49, 0x0f51, 0x0f59, 0x0f60, 0x0f69, 0x0f6e, - 0x0f75, 0x0f79, 0x0f8c, 0x0f8c, 0x0f91, 0x0f91, 0x0f96, 0x0f9e, - 0x0fa4, 0x0fad, 0x0fb2, 0x0fba, 0x0fba, 0x0fc2, 0x0fc2, 0x0fc6, + 0x0dfa, 0x0e05, 0x0e05, 0x0e11, 0x0e1a, 0x0e24, 0x0e2e, 0x0e36, + 0x0e3c, 0x0e48, 0x0e4f, 0x0e53, 0x0e64, 0x0e6a, 0x0e71, 0x0e78, + 0x0e7f, 0x0e89, 0x0e8f, 0x0e97, 0x0e9b, 0x0ea1, 0x0ea5, 0x0eab, + 0x0eb2, 0x0eb8, 0x0ebd, 0x0ec6, 0x0ecf, 0x0ed6, 0x0edd, 0x0ee5, + 0x0eef, 0x0eef, 0x0ef8, 0x0ef8, 0x0efe, 0x0f06, 0x0f06, 0x0f06, + 0x0f0d, 0x0f15, 0x0f1c, 0x0f24, 0x0f3e, 0x0f46, 0x0f4e, 0x0f55, + 0x0f63, 0x0f68, 0x0f6f, 0x0f73, 0x0f86, 0x0f86, 0x0f8b, 0x0f8b, + 0x0f90, 0x0f98, 0x0f9e, 0x0fa7, 0x0fac, 0x0fb4, 0x0fb4, 0x0fbc, // Entry 240 - 27F - 0x0fc6, 0x0fc6, 0x0fcd, 0x0fd4, 0x0fd4, 0x0fdd, 0x0fe6, 0x0ff2, - 0x0ffb, 0x0ffb, 0x100b, 0x100f, 0x1025, 0x102c, 0x1041, 0x1055, - 0x1065, 0x107f, 0x1090, 0x109e, 0x10ad, 0x10bc, 0x10d1, 0x10de, - 0x10ed, 0x10ed, 0x10fc, 0x110e, 0x111b, 0x1122, 0x1133, 0x1143, - 0x114b, 0x1158, 0x1169, 0x117b, 0x1191, + 0x0fbc, 0x0fc0, 0x0fc0, 0x0fc0, 0x0fc7, 0x0fce, 0x0fce, 0x0fd7, + 0x0fe0, 0x0fec, 0x0ff5, 0x0ff5, 0x1005, 0x1009, 0x101f, 0x1026, + 0x103b, 0x104f, 0x105f, 0x1079, 0x108a, 0x1098, 0x10a7, 0x10b6, + 0x10cb, 0x10d8, 0x10e7, 0x10e7, 0x10f6, 0x1108, 0x1115, 0x111c, + 0x112d, 0x113d, 0x1145, 0x1152, 0x1163, 0x1175, 0x118b, }, }, { // da @@ -2358,7 +2611,7 @@ var langHeaders = [252]header{ "inepaliKiholanziKipunjabiKipolandiKirenoKiromaniaKirusiKinyarwandaKi" + "somaliKiswidiKitamilKitailandiKiturukiKiukraniaKiurduKivietinamuKiyo" + "rubaKichinaKizuluKitaita", - []uint16{ // 265 elements + []uint16{ // 266 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x000e, 0x000e, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x001f, 0x0029, @@ -2397,7 +2650,7 @@ var langHeaders = [252]header{ 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, // Entry 100 - 13F 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, - 0x0170, + 0x0169, 0x0170, }, }, { // de @@ -2408,7 +2661,7 @@ var langHeaders = [252]header{ "Hausakaribische SpracheChibcha-SpracheDelawarischFriulanischHawaiianisch" + "Miao-SpracheMuskogee-SpracheNiueanischPangasinensischSchlesischmoder" + "nes HocharabischSerbokroatisch", - []uint16{ // 610 elements + []uint16{ // 612 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -2443,19 +2696,19 @@ var langHeaders = [252]header{ 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, - 0x0005, 0x0005, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0026, + 0x0005, 0x0005, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, // Entry 100 - 13F 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, - 0x0026, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0026, 0x0026, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, - 0x0031, 0x0031, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x0031, 0x0031, 0x0031, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, // Entry 140 - 17F - 0x003c, 0x003c, 0x003c, 0x0048, 0x0048, 0x0048, 0x0048, 0x0054, + 0x003c, 0x003c, 0x003c, 0x003c, 0x0048, 0x0048, 0x0048, 0x0048, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, @@ -2469,12 +2722,12 @@ var langHeaders = [252]header{ 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, - 0x0054, 0x0054, 0x0064, 0x0064, 0x0064, 0x0064, 0x0064, 0x0064, - 0x0064, 0x0064, 0x0064, 0x0064, 0x0064, 0x0064, 0x0064, 0x006e, - 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0064, 0x0064, 0x0064, 0x0064, + 0x0064, 0x0064, 0x0064, 0x0064, 0x0064, 0x0064, 0x0064, 0x0064, + 0x0064, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, // Entry 1C0 - 1FF 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, - 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, + 0x006e, 0x006e, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, @@ -2484,7 +2737,7 @@ var langHeaders = [252]header{ // Entry 200 - 23F 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, - 0x007d, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + 0x007d, 0x007d, 0x007d, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, @@ -2492,17 +2745,17 @@ var langHeaders = [252]header{ 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, // Entry 240 - 27F 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, - 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x009c, 0x009c, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, - 0x009c, 0x00aa, + 0x009c, 0x009c, 0x009c, 0x00aa, }, }, { // de-CH "WeissrussischAceh-SpracheAcholi-SpracheBasaa-SpracheBikol-SpracheBini-Sp" + "racheChibcha-SpracheDinka-SprachePangwe-SpracheGbaya-SpracheKimbundu" + "-SpracheMuskogee-SpracheAltpreussisch", - []uint16{ // 472 elements + []uint16{ // 474 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x000d, @@ -2537,15 +2790,15 @@ var langHeaders = [252]header{ 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0041, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, - 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x005c, + 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, // Entry 100 - 13F 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, - 0x005c, 0x005c, 0x005c, 0x005c, 0x0069, 0x0069, 0x0069, 0x0069, + 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, + 0x0069, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, - 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, // Entry 140 - 17F @@ -2554,7 +2807,7 @@ var langHeaders = [252]header{ 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, - 0x0084, 0x0084, 0x0084, 0x0084, 0x0094, 0x0094, 0x0094, 0x0094, + 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, // Entry 180 - 1BF @@ -2563,13 +2816,14 @@ var langHeaders = [252]header{ 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, - 0x0094, 0x0094, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, + 0x0094, 0x0094, 0x0094, 0x0094, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, // Entry 1C0 - 1FF 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, - 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00b1, + 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, + 0x00a4, 0x00b1, }, }, { // de-LU @@ -2589,7 +2843,7 @@ var langHeaders = [252]header{ "maali senniSuweede senniTamil senniTaailandu senniTurku senniUkreen " + "senniUrdu senniVietnaam senniYorbance senniSinuwa senniZulu senniZar" + "maciine", - []uint16{ // 270 elements + []uint16{ // 271 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x0018, 0x0018, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0032, 0x0041, @@ -2628,7 +2882,7 @@ var langHeaders = [252]header{ 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, // Entry 100 - 13F 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, - 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x022d, + 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x0223, 0x022d, }, }, { // dsb @@ -2673,7 +2927,7 @@ var langHeaders = [252]header{ "lska portugalšćinaeuropejska portugalšćinamoldawišćinaserbochorwatšć" + "inakongojska swahilišćinachinšćina (zjadnorjona)chinšćina (tradicion" + "alna)", - []uint16{ // 613 elements + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x000b, 0x0018, 0x0018, 0x0020, 0x002b, 0x0037, 0x0044, 0x004f, 0x005a, 0x0065, 0x0071, 0x0084, 0x0092, 0x00a1, 0x00ae, @@ -2708,64 +2962,64 @@ var langHeaders = [252]header{ 0x0784, 0x0784, 0x0789, 0x0789, 0x078d, 0x078d, 0x078d, 0x078d, 0x078d, 0x078d, 0x078d, 0x078d, 0x078d, 0x078d, 0x078d, 0x078d, 0x078d, 0x078d, 0x0791, 0x0791, 0x0791, 0x079c, 0x079c, 0x079c, - 0x079c, 0x079c, 0x079c, 0x079c, 0x079c, 0x079c, 0x07a1, 0x07a1, - 0x07a1, 0x07a1, 0x07a1, 0x07a1, 0x07af, 0x07af, 0x07b7, 0x07b7, + 0x079c, 0x079c, 0x079c, 0x079c, 0x079c, 0x079c, 0x079c, 0x07a1, + 0x07a1, 0x07a1, 0x07a1, 0x07a1, 0x07a1, 0x07af, 0x07af, 0x07b7, // Entry 100 - 13F - 0x07bd, 0x07bd, 0x07bd, 0x07bd, 0x07bd, 0x07bd, 0x07bd, 0x07bd, - 0x07c2, 0x07c2, 0x07c2, 0x07c2, 0x07c2, 0x07c7, 0x07c7, 0x07d7, - 0x07d7, 0x07dc, 0x07dc, 0x07e6, 0x07e6, 0x07e6, 0x07ea, 0x07ea, + 0x07b7, 0x07bd, 0x07bd, 0x07bd, 0x07bd, 0x07bd, 0x07bd, 0x07bd, + 0x07bd, 0x07c2, 0x07c2, 0x07c2, 0x07c2, 0x07c2, 0x07c7, 0x07c7, + 0x07d7, 0x07d7, 0x07dc, 0x07dc, 0x07e6, 0x07e6, 0x07e6, 0x07ea, 0x07ea, 0x07ea, 0x07ea, 0x07ea, 0x07ea, 0x07ea, 0x07ea, 0x07ea, - 0x07ea, 0x07f8, 0x07f8, 0x07f8, 0x07f8, 0x07f8, 0x07f8, 0x07f8, - 0x07f8, 0x07f8, 0x07f8, 0x07f8, 0x0805, 0x0805, 0x0805, 0x0805, + 0x07ea, 0x07ea, 0x07f8, 0x07f8, 0x07f8, 0x07f8, 0x07f8, 0x07f8, + 0x07f8, 0x07f8, 0x07f8, 0x07f8, 0x07f8, 0x0805, 0x0805, 0x0805, 0x0805, 0x0805, 0x0805, 0x0805, 0x0805, 0x0805, 0x0805, 0x0805, - 0x0805, 0x0810, 0x0810, 0x0810, 0x0825, 0x0825, 0x0825, 0x082a, + 0x0805, 0x0805, 0x0810, 0x0810, 0x0810, 0x0825, 0x0825, 0x0825, // Entry 140 - 17F - 0x082a, 0x082a, 0x082a, 0x0837, 0x0837, 0x0837, 0x0837, 0x0837, - 0x0848, 0x0848, 0x0848, 0x0848, 0x0848, 0x0848, 0x0848, 0x0848, - 0x0848, 0x0848, 0x084e, 0x0855, 0x0855, 0x0855, 0x0855, 0x0855, - 0x0861, 0x0861, 0x0861, 0x0866, 0x0866, 0x0866, 0x0866, 0x0866, - 0x086d, 0x087b, 0x087b, 0x087b, 0x087b, 0x087b, 0x087b, 0x0887, - 0x0887, 0x0887, 0x0887, 0x088f, 0x088f, 0x089b, 0x08a2, 0x08a2, - 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08aa, 0x08af, - 0x08af, 0x08af, 0x08af, 0x08af, 0x08b4, 0x08b4, 0x08b4, 0x08b4, + 0x082a, 0x082a, 0x082a, 0x082a, 0x0837, 0x0837, 0x0837, 0x0837, + 0x0837, 0x0848, 0x0848, 0x0848, 0x0848, 0x0848, 0x0848, 0x0848, + 0x0848, 0x0848, 0x0848, 0x084e, 0x0855, 0x0855, 0x0855, 0x0855, + 0x0855, 0x0861, 0x0861, 0x0861, 0x0866, 0x0866, 0x0866, 0x0866, + 0x0866, 0x086d, 0x087b, 0x087b, 0x087b, 0x087b, 0x087b, 0x087b, + 0x0887, 0x0887, 0x0887, 0x0887, 0x088f, 0x088f, 0x089b, 0x08a2, + 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08aa, + 0x08af, 0x08af, 0x08af, 0x08af, 0x08af, 0x08b4, 0x08b4, 0x08b4, // Entry 180 - 1BF - 0x08b4, 0x08b4, 0x08b4, 0x08c0, 0x08c0, 0x08c0, 0x08c0, 0x08c0, - 0x08c0, 0x08c0, 0x08c0, 0x08c0, 0x08c3, 0x08c3, 0x08c8, 0x08c8, - 0x08c8, 0x08c8, 0x08c8, 0x08c8, 0x08c8, 0x08c8, 0x08c8, 0x08d4, - 0x08d4, 0x08d4, 0x08d4, 0x08d4, 0x08d8, 0x08ef, 0x08ef, 0x08fd, - 0x0904, 0x0904, 0x0904, 0x0904, 0x0904, 0x0911, 0x0911, 0x0911, - 0x0918, 0x0918, 0x091c, 0x091c, 0x091c, 0x091c, 0x091c, 0x091c, - 0x091c, 0x091c, 0x091c, 0x0920, 0x092f, 0x092f, 0x092f, 0x092f, - 0x092f, 0x0935, 0x0935, 0x0935, 0x0935, 0x0935, 0x093b, 0x093b, + 0x08b4, 0x08b4, 0x08b4, 0x08b4, 0x08c0, 0x08c0, 0x08c0, 0x08c0, + 0x08c0, 0x08c0, 0x08c0, 0x08c0, 0x08c0, 0x08c0, 0x08c3, 0x08c3, + 0x08c8, 0x08c8, 0x08c8, 0x08c8, 0x08c8, 0x08c8, 0x08c8, 0x08c8, + 0x08c8, 0x08d4, 0x08d4, 0x08d4, 0x08d4, 0x08d4, 0x08d8, 0x08ef, + 0x08ef, 0x08fd, 0x0904, 0x0904, 0x0904, 0x0904, 0x0904, 0x0911, + 0x0911, 0x0911, 0x0918, 0x0918, 0x091c, 0x091c, 0x091c, 0x091c, + 0x091c, 0x091c, 0x091c, 0x091c, 0x091c, 0x0920, 0x092f, 0x092f, + 0x092f, 0x092f, 0x092f, 0x0935, 0x0935, 0x0935, 0x0935, 0x0935, // Entry 1C0 - 1FF - 0x093f, 0x093f, 0x093f, 0x0947, 0x0947, 0x0947, 0x0947, 0x0947, + 0x093b, 0x093b, 0x093f, 0x093f, 0x093f, 0x0947, 0x0947, 0x0947, 0x0947, 0x0947, 0x0947, 0x0947, 0x0947, 0x0947, 0x0947, 0x0947, - 0x0947, 0x0947, 0x0947, 0x0947, 0x0947, 0x0947, 0x0947, 0x0950, - 0x0950, 0x0959, 0x0959, 0x0959, 0x0959, 0x0959, 0x0959, 0x0959, - 0x095e, 0x095e, 0x095e, 0x095e, 0x095e, 0x095e, 0x0961, 0x0961, - 0x0961, 0x0961, 0x0968, 0x0968, 0x0968, 0x0968, 0x0968, 0x096d, - 0x097d, 0x097d, 0x097d, 0x097d, 0x097d, 0x0981, 0x0981, 0x0981, - 0x098c, 0x098c, 0x098c, 0x0995, 0x0995, 0x0995, 0x0995, 0x0995, + 0x0947, 0x0947, 0x0947, 0x0947, 0x0947, 0x0947, 0x0947, 0x0947, + 0x0947, 0x0950, 0x0950, 0x0959, 0x0959, 0x0959, 0x0959, 0x0959, + 0x0959, 0x0959, 0x095e, 0x095e, 0x095e, 0x095e, 0x095e, 0x095e, + 0x0961, 0x0961, 0x0961, 0x0961, 0x0968, 0x0968, 0x0968, 0x0968, + 0x0968, 0x096d, 0x097d, 0x097d, 0x097d, 0x097d, 0x097d, 0x0981, + 0x0981, 0x0981, 0x098c, 0x098c, 0x098c, 0x0995, 0x0995, 0x0995, // Entry 200 - 23F - 0x0995, 0x09af, 0x09bf, 0x09d0, 0x09e1, 0x09e1, 0x09e1, 0x09e1, - 0x09e1, 0x09e1, 0x09f2, 0x09f2, 0x09f2, 0x09f2, 0x09f2, 0x09f2, - 0x09f2, 0x09f2, 0x09f2, 0x09f2, 0x09f6, 0x09f6, 0x09f6, 0x09f6, + 0x0995, 0x0995, 0x0995, 0x09af, 0x09bf, 0x09d0, 0x09e1, 0x09e1, + 0x09e1, 0x09e1, 0x09e1, 0x09e1, 0x09f2, 0x09f2, 0x09f2, 0x09f2, + 0x09f2, 0x09f2, 0x09f2, 0x09f2, 0x09f2, 0x09f2, 0x09f6, 0x09f6, 0x09f6, 0x09f6, 0x09f6, 0x09f6, 0x09f6, 0x09f6, 0x09f6, 0x09f6, 0x09f6, 0x09f6, 0x09f6, 0x09f6, 0x09f6, 0x09f6, 0x09f6, 0x09f6, - 0x09fd, 0x09fd, 0x0a17, 0x0a17, 0x0a17, 0x0a17, 0x0a24, 0x0a27, - 0x0a27, 0x0a27, 0x0a27, 0x0a27, 0x0a27, 0x0a27, 0x0a2c, 0x0a2c, - 0x0a2c, 0x0a2c, 0x0a2c, 0x0a2c, 0x0a2c, 0x0a2c, 0x0a2c, 0x0a30, + 0x09f6, 0x09f6, 0x09fd, 0x09fd, 0x0a17, 0x0a17, 0x0a17, 0x0a17, + 0x0a24, 0x0a27, 0x0a27, 0x0a27, 0x0a27, 0x0a27, 0x0a27, 0x0a27, + 0x0a2c, 0x0a2c, 0x0a2c, 0x0a2c, 0x0a2c, 0x0a2c, 0x0a2c, 0x0a2c, // Entry 240 - 27F - 0x0a30, 0x0a30, 0x0a30, 0x0a30, 0x0a30, 0x0a30, 0x0a30, 0x0a30, - 0x0a30, 0x0a30, 0x0a51, 0x0a51, 0x0a6b, 0x0a6b, 0x0a84, 0x0a84, - 0x0a98, 0x0ab3, 0x0aca, 0x0ae0, 0x0af5, 0x0b0a, 0x0b2e, 0x0b46, - 0x0b5f, 0x0b5f, 0x0b77, 0x0b90, 0x0b90, 0x0b9b, 0x0bb4, 0x0bce, - 0x0bdc, 0x0bef, 0x0c07, 0x0c20, 0x0c3b, + 0x0a2c, 0x0a30, 0x0a30, 0x0a30, 0x0a30, 0x0a30, 0x0a30, 0x0a30, + 0x0a30, 0x0a30, 0x0a30, 0x0a30, 0x0a51, 0x0a51, 0x0a6b, 0x0a6b, + 0x0a84, 0x0a84, 0x0a98, 0x0ab3, 0x0aca, 0x0ae0, 0x0af5, 0x0b0a, + 0x0b2e, 0x0b46, 0x0b5f, 0x0b5f, 0x0b77, 0x0b90, 0x0b90, 0x0b9b, + 0x0bb4, 0x0bce, 0x0bdc, 0x0bef, 0x0c07, 0x0c20, 0x0c3b, }, }, { // dua "duálá", - []uint16{ // 274 elements + []uint16{ // 275 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -2805,7 +3059,7 @@ var langHeaders = [252]header{ // Entry 100 - 13F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0007, + 0x0000, 0x0000, 0x0007, }, }, { // dyo @@ -2813,7 +3067,7 @@ var langHeaders = [252]header{ "sehausaenduongruaindoneesiigboitaliensaponeesavaneekmeerkoreemaleesi" + "birmaninepaleesneerlandepenjabipoloneesportugeesrumeenrusruandasomal" + "isueditamiltayturkiukrainurduvietnamyorubasinuasulujoola", - []uint16{ // 276 elements + []uint16{ // 277 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x000b, 0x000b, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x0016, 0x001e, @@ -2853,7 +3107,7 @@ var langHeaders = [252]header{ // Entry 100 - 13F 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, - 0x0104, 0x0104, 0x0104, 0x0109, + 0x0104, 0x0104, 0x0104, 0x0104, 0x0109, }, }, { // dz @@ -2881,7 +3135,7 @@ var langHeaders = [252]header{ "ཱན་གི་ཨིས་པེ་ནིཤ་ཁཡུ་རོབ་ཀྱི་ཨིས་པེ་ནིཤ་ཁཀེ་ན་ཌི་ཡཱན་ཕྲནཅ་ཁསུ་ཡིས་" + "ཕྲནཅ་ཁཕྷེལེ་མིཤ་ཁབྲ་ཛི་ལི་ཡཱན་པོར་ཅུ་གིས་ཁཨི་བེ་རི་ཡཱན་པོར་ཅུ་གིས་" + "ཁརྒྱ་མི་ཁ་འཇམ་སངམསྔ་དུས་ཀྱི་རྒྱ་མི་ཁ", - []uint16{ // 613 elements + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0012, 0x0036, 0x0036, 0x005a, 0x005a, 0x0078, 0x0078, 0x0096, 0x00b1, 0x00b1, 0x00b1, 0x00de, 0x00de, 0x00ff, 0x012c, @@ -2919,20 +3173,20 @@ var langHeaders = [252]header{ 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, // Entry 100 - 13F - 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d83, 0x0d83, + 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d6b, 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, 0x0d83, - 0x0d83, 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, + 0x0d83, 0x0d83, 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, - 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0dda, 0x0dda, 0x0dda, 0x0dda, + 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0daa, 0x0dda, 0x0dda, 0x0dda, // Entry 140 - 17F - 0x0dda, 0x0dda, 0x0dda, 0x0df8, 0x0df8, 0x0df8, 0x0df8, 0x0df8, + 0x0dda, 0x0dda, 0x0dda, 0x0dda, 0x0df8, 0x0df8, 0x0df8, 0x0df8, 0x0df8, 0x0df8, 0x0df8, 0x0df8, 0x0df8, 0x0df8, 0x0df8, 0x0df8, 0x0df8, 0x0df8, 0x0df8, 0x0df8, 0x0df8, 0x0df8, 0x0df8, 0x0df8, - 0x0df8, 0x0e0d, 0x0e0d, 0x0e0d, 0x0e0d, 0x0e0d, 0x0e0d, 0x0e0d, - 0x0e0d, 0x0e0d, 0x0e0d, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, + 0x0df8, 0x0df8, 0x0e0d, 0x0e0d, 0x0e0d, 0x0e0d, 0x0e0d, 0x0e0d, + 0x0e0d, 0x0e0d, 0x0e0d, 0x0e0d, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, @@ -2941,7 +3195,7 @@ var langHeaders = [252]header{ 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, - 0x0e22, 0x0e22, 0x0e22, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, + 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e22, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, @@ -2953,22 +3207,22 @@ var langHeaders = [252]header{ 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, - 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e46, 0x0e46, 0x0e46, 0x0e46, + 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e37, 0x0e46, 0x0e46, // Entry 200 - 23F 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, - 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e67, 0x0e67, + 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e46, 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0e67, // Entry 240 - 27F 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0e67, - 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0ea0, 0x0ea0, 0x0ea0, 0x0ea0, - 0x0ee2, 0x0f33, 0x0f7e, 0x0fbd, 0x0ff0, 0x1020, 0x1086, 0x10cb, - 0x10cb, 0x10cb, 0x1101, 0x1128, 0x1128, 0x1149, 0x1194, 0x11df, - 0x11df, 0x11df, 0x11df, 0x120f, 0x1248, + 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0e67, 0x0ea0, 0x0ea0, + 0x0ea0, 0x0ea0, 0x0ee2, 0x0f33, 0x0f7e, 0x0fbd, 0x0ff0, 0x1020, + 0x1086, 0x10cb, 0x10cb, 0x10cb, 0x1101, 0x1128, 0x1128, 0x1149, + 0x1194, 0x11df, 0x11df, 0x11df, 0x11df, 0x120f, 0x1248, }, }, { // ebu @@ -2978,7 +3232,7 @@ var langHeaders = [252]header{ "aKĩnepaliKĩholanziKĩpunjabiKĩpolandiKĩrenoKĩromaniaKĩrusiKĩnyarwanda" + "KĩsomaliKĩswidiKĩtamilKĩtailandiKĩturukiKĩukraniaKĩurduKĩvietinamuKĩ" + "yorubaKĩchinaKĩzuluKĩembu", - []uint16{ // 279 elements + []uint16{ // 280 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0010, 0x0010, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0024, 0x002f, @@ -3018,7 +3272,7 @@ var langHeaders = [252]header{ // Entry 100 - 13F 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, - 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x019f, + 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x0198, 0x019f, }, }, { // ee @@ -3049,7 +3303,7 @@ var langHeaders = [252]header{ "Europe)Spanishgbe (Mexico)Fransegbe (Canada)Fransegbe (Switzerland)F" + "lemishgbePortuguesegbe (Brazil)Portuguesegbe (Europe)serbo-croatiagb" + "etsainagbeblema tsainagbe", - []uint16{ // 613 elements + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0000, 0x000b, 0x000b, 0x0016, 0x001c, 0x0026, 0x0026, 0x002f, 0x0038, 0x0038, 0x0040, 0x004d, 0x004d, 0x0059, 0x0064, @@ -3089,54 +3343,54 @@ var langHeaders = [252]header{ // Entry 100 - 13F 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, - 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04ff, 0x0505, + 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04f8, 0x04ff, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, - 0x0505, 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, + 0x0505, 0x0505, 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, - 0x050f, 0x050f, 0x050f, 0x050f, 0x052f, 0x052f, 0x052f, 0x052f, + 0x050f, 0x050f, 0x050f, 0x050f, 0x050f, 0x052f, 0x052f, 0x052f, // Entry 140 - 17F - 0x052f, 0x052f, 0x052f, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, + 0x052f, 0x052f, 0x052f, 0x052f, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, 0x0537, - 0x0537, 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, + 0x0537, 0x0537, 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, - 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, 0x054d, 0x054d, 0x054d, + 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, 0x0544, 0x054d, 0x054d, // Entry 180 - 1BF 0x054d, 0x054d, 0x054d, 0x054d, 0x054d, 0x054d, 0x054d, 0x054d, - 0x054d, 0x054d, 0x054d, 0x054d, 0x054d, 0x054d, 0x0555, 0x0555, + 0x054d, 0x054d, 0x054d, 0x054d, 0x054d, 0x054d, 0x054d, 0x054d, 0x0555, 0x0555, 0x0555, 0x0555, 0x0555, 0x0555, 0x0555, 0x0555, 0x0555, 0x0555, 0x0555, 0x0555, 0x0555, 0x0555, 0x0555, 0x0555, 0x0555, 0x0555, 0x0555, 0x0555, 0x0555, 0x0555, 0x0555, 0x0555, - 0x0555, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, + 0x0555, 0x0555, 0x0555, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, + 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, - 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x057a, // Entry 1C0 - 1FF + 0x056b, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, - 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, 0x057a, - 0x0582, 0x0582, 0x0582, 0x0582, 0x0582, 0x0582, 0x0588, 0x0588, - 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, + 0x057a, 0x057a, 0x0582, 0x0582, 0x0582, 0x0582, 0x0582, 0x0582, + 0x0588, 0x0588, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, // Entry 200 - 23F 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, - 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x0598, 0x0598, - 0x0598, 0x0598, 0x0598, 0x0598, 0x0598, 0x0598, 0x05a0, 0x05a0, + 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, 0x058f, + 0x0598, 0x0598, 0x0598, 0x0598, 0x0598, 0x0598, 0x0598, 0x0598, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, + 0x05a0, 0x05a0, 0x05ab, 0x05ab, 0x05ab, 0x05ab, 0x05ab, 0x05ab, 0x05ab, 0x05ab, 0x05ab, 0x05ab, 0x05ab, 0x05ab, 0x05ab, 0x05ab, - 0x05ab, 0x05ab, 0x05ab, 0x05ab, 0x05ab, 0x05ab, 0x05bd, 0x05bd, - 0x05bd, 0x05bd, 0x05bd, 0x05bd, 0x05bd, 0x05bd, 0x05bd, 0x05c5, - 0x05c5, 0x05c5, 0x05c5, 0x05c5, 0x05c5, 0x05c5, 0x05c5, 0x05c5, + 0x05bd, 0x05bd, 0x05bd, 0x05bd, 0x05bd, 0x05bd, 0x05bd, 0x05bd, + 0x05bd, 0x05c5, 0x05c5, 0x05c5, 0x05c5, 0x05c5, 0x05c5, 0x05c5, // Entry 240 - 27F - 0x05c5, 0x05c5, 0x05c5, 0x05c5, 0x05c5, 0x05ce, 0x05ce, 0x05ce, - 0x05ce, 0x05ce, 0x05ce, 0x05ce, 0x05e3, 0x05e3, 0x05e3, 0x05e3, - 0x05f8, 0x0611, 0x0624, 0x0634, 0x0645, 0x0656, 0x0670, 0x0683, - 0x0696, 0x0696, 0x06a8, 0x06bf, 0x06bf, 0x06c9, 0x06df, 0x06f5, - 0x06f5, 0x0705, 0x0705, 0x070e, 0x071d, + 0x05c5, 0x05c5, 0x05c5, 0x05c5, 0x05c5, 0x05c5, 0x05c5, 0x05ce, + 0x05ce, 0x05ce, 0x05ce, 0x05ce, 0x05ce, 0x05ce, 0x05e3, 0x05e3, + 0x05e3, 0x05e3, 0x05f8, 0x0611, 0x0624, 0x0634, 0x0645, 0x0656, + 0x0670, 0x0683, 0x0696, 0x0696, 0x06a8, 0x06bf, 0x06bf, 0x06c9, + 0x06df, 0x06f5, 0x06f5, 0x0705, 0x0705, 0x070e, 0x071d, }, }, { // el @@ -3148,97 +3402,193 @@ var langHeaders = [252]header{ enLangIdx, }, { // en-AU - "United States EnglishMoldovan", - []uint16{ // 609 elements + "BengalifrclouUnited States EnglishMoldovan", + []uint16{ // 611 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, // Entry 40 - 7F - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, // Entry 80 - BF - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, // Entry C0 - FF - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, // Entry 100 - 13F - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, // Entry 140 - 17F - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, // Entry 180 - 1BF - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, // Entry 1C0 - 1FF - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, // Entry 200 - 23F - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, // Entry 240 - 27F + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x0022, + 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, + 0x0022, 0x0022, 0x002a, + }, + }, + { // en-CA + "BengaliMauritianTuvaluanMoldovan", + []uint16{ // 611 elements + // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x0015, 0x0015, - 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, - 0x001d, + 0x0000, 0x0000, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + // Entry 40 - 7F + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + // Entry 80 - BF + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + // Entry C0 - FF + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + // Entry 100 - 13F + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + // Entry 140 - 17F + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + // Entry 180 - 1BF + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + // Entry 1C0 - 1FF + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + // Entry 200 - 23F + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, + 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, + 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, + // Entry 240 - 27F + 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, + 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, + 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, + 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, + 0x0018, 0x0018, 0x0020, }, }, + { // en-GB + enGBLangStr, + enGBLangIdx, + }, { // en-IN "BengaliOriya", []uint16{ // 124 elements @@ -3298,7 +3648,7 @@ var langHeaders = [252]header{ "naurduouzbekavjetnamavolapukovolofaksosajidajorubaĝuangaĉinazuluaibi" + "bioefikafilipinahavajaklingonanekonata lingvonelingvaĵobrazilportuga" + "laeŭropportugalaserbo-Kroataĉina simpligitaĉina tradicia", - []uint16{ // 613 elements + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0005, 0x000c, 0x000c, 0x0015, 0x0017, 0x001d, 0x001d, 0x0022, 0x0027, 0x0027, 0x002d, 0x0039, 0x0041, 0x0049, 0x0050, @@ -3338,14 +3688,14 @@ var langHeaders = [252]header{ // Entry 100 - 13F 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, - 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0394, + 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0394, 0x0394, 0x0394, 0x0394, 0x0394, 0x0394, 0x0394, 0x0394, - 0x0394, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, + 0x0394, 0x0394, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, // Entry 140 - 17F - 0x039c, 0x039c, 0x039c, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, + 0x039c, 0x039c, 0x039c, 0x039c, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, @@ -3375,17 +3725,17 @@ var langHeaders = [252]header{ 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, - 0x03a2, 0x03a2, 0x03a2, 0x03aa, 0x03aa, 0x03aa, 0x03aa, 0x03aa, + 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03a2, 0x03aa, 0x03aa, 0x03aa, + 0x03aa, 0x03aa, 0x03aa, 0x03aa, 0x03aa, 0x03aa, 0x03aa, 0x03aa, 0x03aa, 0x03aa, 0x03aa, 0x03aa, 0x03aa, 0x03aa, 0x03aa, 0x03aa, - 0x03aa, 0x03aa, 0x03aa, 0x03aa, 0x03aa, 0x03aa, 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03b9, // Entry 240 - 27F 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03b9, - 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03c4, 0x03c4, 0x03c4, 0x03c4, + 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03b9, 0x03c4, 0x03c4, + 0x03c4, 0x03c4, 0x03c4, 0x03c4, 0x03c4, 0x03c4, 0x03c4, 0x03c4, 0x03c4, 0x03c4, 0x03c4, 0x03c4, 0x03c4, 0x03c4, 0x03c4, 0x03c4, - 0x03c4, 0x03c4, 0x03c4, 0x03c4, 0x03c4, 0x03c4, 0x03d3, 0x03e2, - 0x03e2, 0x03ee, 0x03ee, 0x03fe, 0x040c, + 0x03d3, 0x03e2, 0x03e2, 0x03ee, 0x03ee, 0x03fe, 0x040c, }, }, { // es @@ -3400,7 +3750,7 @@ var langHeaders = [252]header{ "euskeralaopunyabísiswatisuajilisetswanawolofacehnésarapahobhojpurigriego" + " antiguosotho septentrionaltamazight marroquí estándarsuajili del Co" + "ngo", - []uint16{ // 611 elements + []uint16{ // 613 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -3445,7 +3795,7 @@ var langHeaders = [252]header{ 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, - 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, // Entry 140 - 17F 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, @@ -3463,9 +3813,9 @@ var langHeaders = [252]header{ 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, - 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0065, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, // Entry 1C0 - 1FF - 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0052, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, @@ -3484,17 +3834,17 @@ var langHeaders = [252]header{ 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, // Entry 240 - 27F 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, - 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, - 0x0082, 0x0082, 0x0093, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0093, }, }, { // es-BO "euskeralaopunyabísiswatisuajilisetswanawolofacehnésarapahobhojpurigriego" + " antiguosotho septentrionaltamazight marroquí estándarsuajili del Co" + "ngo", - []uint16{ // 611 elements + []uint16{ // 613 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -3539,7 +3889,7 @@ var langHeaders = [252]header{ 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, - 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, // Entry 140 - 17F 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, @@ -3557,9 +3907,9 @@ var langHeaders = [252]header{ 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, - 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0065, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, // Entry 1C0 - 1FF - 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0052, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, @@ -3578,17 +3928,17 @@ var langHeaders = [252]header{ 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, // Entry 240 - 27F 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, - 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, - 0x0082, 0x0082, 0x0093, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0093, }, }, { // es-CL "euskeralaopunyabísiswatisuajilisetswanawolofacehnésarapahobhojpurigriego" + " antiguosotho septentrionaltamazight marroquí estándarsuajili del Co" + "ngo", - []uint16{ // 611 elements + []uint16{ // 613 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -3633,7 +3983,7 @@ var langHeaders = [252]header{ 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, - 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, // Entry 140 - 17F 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, @@ -3651,9 +4001,9 @@ var langHeaders = [252]header{ 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, - 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0065, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, // Entry 1C0 - 1FF - 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0052, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, @@ -3672,17 +4022,17 @@ var langHeaders = [252]header{ 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, // Entry 240 - 27F 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, - 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, - 0x0082, 0x0082, 0x0093, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0093, }, }, { // es-CO "euskeralaopunyabísiswatisuajilisetswanawolofacehnésarapahobhojpurigriego" + " antiguosotho septentrionaltamazight marroquí estándarsuajili del Co" + "ngo", - []uint16{ // 611 elements + []uint16{ // 613 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -3727,7 +4077,7 @@ var langHeaders = [252]header{ 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, - 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, // Entry 140 - 17F 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, @@ -3745,9 +4095,9 @@ var langHeaders = [252]header{ 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, - 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0065, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, // Entry 1C0 - 1FF - 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0052, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, @@ -3766,17 +4116,17 @@ var langHeaders = [252]header{ 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, // Entry 240 - 27F 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, - 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, - 0x0082, 0x0082, 0x0093, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0093, }, }, { // es-CR "euskeralaopunyabísiswatisuajilisetswanawolofacehnésarapahobhojpurigriego" + " antiguosotho septentrionaltamazight marroquí estándarsuajili del Co" + "ngo", - []uint16{ // 611 elements + []uint16{ // 613 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -3821,7 +4171,7 @@ var langHeaders = [252]header{ 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, - 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, // Entry 140 - 17F 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, @@ -3839,9 +4189,9 @@ var langHeaders = [252]header{ 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, - 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0065, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, // Entry 1C0 - 1FF - 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0052, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, @@ -3860,17 +4210,17 @@ var langHeaders = [252]header{ 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, // Entry 240 - 27F 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, - 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, - 0x0082, 0x0082, 0x0093, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0093, }, }, { // es-DO "euskeralaopunyabísiswatisuajilisetswanawolofacehnésarapahobhojpurigriego" + " antiguosotho septentrionaltamazight marroquí estándarsuajili del Co" + "ngo", - []uint16{ // 611 elements + []uint16{ // 613 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -3915,7 +4265,7 @@ var langHeaders = [252]header{ 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, - 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, // Entry 140 - 17F 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, @@ -3933,9 +4283,9 @@ var langHeaders = [252]header{ 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, - 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0065, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, // Entry 1C0 - 1FF - 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0052, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, @@ -3954,17 +4304,17 @@ var langHeaders = [252]header{ 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, // Entry 240 - 27F 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, - 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, - 0x0082, 0x0082, 0x0093, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0093, }, }, { // es-EC "euskeralaopunyabísiswatisuajilisetswanawolofacehnésarapahobhojpurigriego" + " antiguosotho septentrionaltamazight marroquí estándarsuajili del Co" + "ngo", - []uint16{ // 611 elements + []uint16{ // 613 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -4009,7 +4359,7 @@ var langHeaders = [252]header{ 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, - 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, // Entry 140 - 17F 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, @@ -4027,9 +4377,9 @@ var langHeaders = [252]header{ 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, - 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0065, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, // Entry 1C0 - 1FF - 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0052, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, @@ -4048,17 +4398,17 @@ var langHeaders = [252]header{ 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, // Entry 240 - 27F 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, - 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, - 0x0082, 0x0082, 0x0093, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0093, }, }, { // es-GT "euskeralaopunyabísiswatisuajilisetswanawolofacehnésarapahobhojpurigriego" + " antiguosotho septentrionaltamazight marroquí estándarsuajili del Co" + "ngo", - []uint16{ // 611 elements + []uint16{ // 613 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -4103,7 +4453,7 @@ var langHeaders = [252]header{ 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, - 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, // Entry 140 - 17F 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, @@ -4121,9 +4471,9 @@ var langHeaders = [252]header{ 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, - 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0065, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, // Entry 1C0 - 1FF - 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0052, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, @@ -4142,17 +4492,17 @@ var langHeaders = [252]header{ 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, // Entry 240 - 27F 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, - 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, - 0x0082, 0x0082, 0x0093, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0093, }, }, { // es-HN "euskeralaopunyabísiswatisuajilisetswanawolofacehnésarapahobhojpurigriego" + " antiguosotho septentrionaltamazight marroquí estándarsuajili del Co" + "ngo", - []uint16{ // 611 elements + []uint16{ // 613 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -4197,7 +4547,7 @@ var langHeaders = [252]header{ 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, - 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, // Entry 140 - 17F 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, @@ -4215,9 +4565,9 @@ var langHeaders = [252]header{ 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, - 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0065, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, // Entry 1C0 - 1FF - 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0052, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, @@ -4236,113 +4586,115 @@ var langHeaders = [252]header{ 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, // Entry 240 - 27F 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, - 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, - 0x0082, 0x0082, 0x0093, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0093, }, }, { // es-MX - "bashkireuskeralaopunyabíkiroundisiswatisuajiliwolofacehnésarapahobasabam" + - "unbhojpurineerlandés medievalinglés medievalfrancés medievalgan (Chi" + - "na)alemán de la alta edad mediagriego antiguokejia (China)xiang (Chi" + - "na)irlandés medievalmin nan (Chino)sotho septentrionalárabe chadiano" + - "tamazight marroquí estándarsuajili del Congo", - []uint16{ // 611 elements + "euskeralaondebele meridionalpunyabíkiroundisiswatisesotho meridionalsuaj" + + "ilisetswanawolofacehnésarapahobasabamunbhojpurisiksikaneerlandés med" + + "ievalinglés medievalfrancés medievalgan (China)alemán de la alta eda" + + "d mediagriego antiguokejia (China)xiang (China)kabardianokarachay-ba" + + "lkarlushaiirlandés medievalmin nan (Chino)sotho septentrionalpcmárab" + + "e chadianosiriacotetúntuvinianowuukalmyktamazight marroquí estándars" + + "uajili del Congo", + []uint16{ // 613 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0007, 0x0007, - 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, - 0x0007, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, - 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, - 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, // Entry 40 - 7F - 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, - 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, - 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, - 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, - 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, - 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, - 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, - 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0019, 0x0019, 0x0019, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x001c, 0x001c, 0x001c, + 0x001c, 0x001c, 0x001c, 0x001c, 0x001c, 0x0024, 0x0024, 0x0024, // Entry 80 - BF - 0x0019, 0x0019, 0x0019, 0x0019, 0x0021, 0x0021, 0x0021, 0x0021, - 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, - 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0028, 0x0028, 0x0028, - 0x0028, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, - 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, - 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x0034, 0x0034, - 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x003c, 0x003c, 0x003c, - 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, - // Entry C0 - FF - 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x0043, - 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, - 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0047, 0x004c, 0x004c, - 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, - 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, - 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, - 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0024, 0x0024, 0x0024, 0x0024, 0x002c, 0x002c, 0x002c, 0x002c, + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x0033, 0x0045, 0x0045, + 0x0045, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0059, 0x0059, + 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0061, 0x0061, 0x0061, + 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, + // Entry C0 - FF + 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0068, + 0x0068, 0x0068, 0x0068, 0x0068, 0x0068, 0x0068, 0x0068, 0x0068, + 0x0068, 0x0068, 0x0068, 0x0068, 0x0068, 0x006c, 0x0071, 0x0071, + 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, + 0x0079, 0x0079, 0x0079, 0x0079, 0x0079, 0x0080, 0x0080, 0x0080, + 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, + 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, + 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, // Entry 100 - 13F - 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, - 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, - 0x0054, 0x0054, 0x0068, 0x0068, 0x0068, 0x0068, 0x0068, 0x0068, - 0x0068, 0x0068, 0x0068, 0x0068, 0x0078, 0x0078, 0x0078, 0x0078, - 0x0078, 0x0078, 0x0078, 0x0078, 0x0078, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0094, 0x0094, 0x0094, - 0x0094, 0x0094, 0x0094, 0x0094, 0x00b1, 0x00b1, 0x00b1, 0x00b1, - 0x00b1, 0x00b1, 0x00b1, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, + 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, + 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, + 0x0080, 0x0080, 0x0080, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x00a4, 0x00a4, 0x00a4, + 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00b5, 0x00b5, + 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00c0, 0x00c0, + 0x00c0, 0x00c0, 0x00c0, 0x00c0, 0x00c0, 0x00dd, 0x00dd, 0x00dd, + 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00eb, 0x00eb, 0x00eb, 0x00eb, // Entry 140 - 17F - 0x00bf, 0x00bf, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, - 0x00cc, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, - 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, - 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, - 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, - 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, - 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, - 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, + 0x00eb, 0x00eb, 0x00eb, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, + 0x00f8, 0x00f8, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, + 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, + 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x010f, 0x010f, + 0x010f, 0x010f, 0x010f, 0x010f, 0x010f, 0x010f, 0x010f, 0x010f, + 0x010f, 0x010f, 0x010f, 0x010f, 0x010f, 0x010f, 0x010f, 0x010f, + 0x010f, 0x010f, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, + 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, // Entry 180 - 1BF - 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, - 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, - 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, - 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00eb, 0x00eb, - 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, - 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, - 0x00eb, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, - 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x010d, + 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, + 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x0124, + 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, + 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, + 0x0136, 0x0136, 0x0136, 0x0136, 0x0136, 0x0136, 0x0136, 0x0136, + 0x0136, 0x0136, 0x0136, 0x0136, 0x0136, 0x0136, 0x0136, 0x0136, + 0x0136, 0x0136, 0x0136, 0x0145, 0x0145, 0x0145, 0x0145, 0x0145, + 0x0145, 0x0145, 0x0145, 0x0145, 0x0145, 0x0145, 0x0145, 0x0145, // Entry 1C0 - 1FF - 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, - 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, - 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, - 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, - 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, - 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, - 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, - 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x011c, 0x011c, 0x011c, + 0x0145, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, + 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, + 0x015b, 0x015b, 0x015b, 0x015b, 0x015b, 0x015b, 0x015b, 0x015b, + 0x015b, 0x015b, 0x015b, 0x015b, 0x015b, 0x015b, 0x015b, 0x015b, + 0x015b, 0x015b, 0x015b, 0x015b, 0x015b, 0x015b, 0x015b, 0x015b, + 0x015b, 0x015b, 0x015b, 0x015b, 0x015b, 0x015b, 0x015b, 0x015b, + 0x015b, 0x015b, 0x015b, 0x015b, 0x015b, 0x015b, 0x015b, 0x015b, + 0x015b, 0x015b, 0x015b, 0x015b, 0x015b, 0x015b, 0x015b, 0x016a, // Entry 200 - 23F - 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, - 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, - 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, - 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, - 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, - 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, - 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, - 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, + 0x016a, 0x016a, 0x016a, 0x016a, 0x016a, 0x016a, 0x016a, 0x016a, + 0x016a, 0x016a, 0x016a, 0x016a, 0x016a, 0x016a, 0x016a, 0x016a, + 0x016a, 0x016a, 0x0171, 0x0171, 0x0171, 0x0171, 0x0171, 0x0171, + 0x0177, 0x0177, 0x0177, 0x0177, 0x0177, 0x0177, 0x0177, 0x0177, + 0x0177, 0x0177, 0x0177, 0x0177, 0x0177, 0x0177, 0x0177, 0x0177, + 0x0177, 0x0177, 0x0177, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0183, 0x0189, // Entry 240 - 27F - 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, - 0x011c, 0x011c, 0x0139, 0x0139, 0x0139, 0x0139, 0x0139, 0x0139, - 0x0139, 0x0139, 0x0139, 0x0139, 0x0139, 0x0139, 0x0139, 0x0139, - 0x0139, 0x0139, 0x0139, 0x0139, 0x0139, 0x0139, 0x0139, 0x0139, - 0x0139, 0x0139, 0x014a, + 0x0189, 0x0189, 0x0189, 0x0189, 0x0189, 0x0189, 0x0189, 0x0189, + 0x0189, 0x0189, 0x0189, 0x0189, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01b7, }, }, { // es-NI "euskeralaopunyabísiswatisuajilisetswanawolofacehnésarapahobhojpurigriego" + " antiguosotho septentrionaltamazight marroquí estándarsuajili del Co" + "ngo", - []uint16{ // 611 elements + []uint16{ // 613 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -4387,7 +4739,7 @@ var langHeaders = [252]header{ 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, - 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, // Entry 140 - 17F 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, @@ -4405,9 +4757,9 @@ var langHeaders = [252]header{ 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, - 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0065, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, // Entry 1C0 - 1FF - 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0052, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, @@ -4426,17 +4778,17 @@ var langHeaders = [252]header{ 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, // Entry 240 - 27F 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, - 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, - 0x0082, 0x0082, 0x0093, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0093, }, }, { // es-PA "euskeralaopunyabísiswatisuajilisetswanawolofacehnésarapahobhojpurigriego" + " antiguosotho septentrionaltamazight marroquí estándarsuajili del Co" + "ngo", - []uint16{ // 611 elements + []uint16{ // 613 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -4481,7 +4833,7 @@ var langHeaders = [252]header{ 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, - 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, // Entry 140 - 17F 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, @@ -4499,9 +4851,9 @@ var langHeaders = [252]header{ 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, - 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0065, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, // Entry 1C0 - 1FF - 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0052, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, @@ -4520,17 +4872,17 @@ var langHeaders = [252]header{ 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, // Entry 240 - 27F 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, - 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, - 0x0082, 0x0082, 0x0093, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0093, }, }, { // es-PE "euskeralaopunyabísiswatisuajilisetswanawolofacehnésarapahobhojpurigriego" + " antiguosotho septentrionaltamazight marroquí estándarsuajili del Co" + "ngo", - []uint16{ // 611 elements + []uint16{ // 613 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -4575,7 +4927,7 @@ var langHeaders = [252]header{ 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, - 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, // Entry 140 - 17F 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, @@ -4593,9 +4945,9 @@ var langHeaders = [252]header{ 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, - 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0065, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, // Entry 1C0 - 1FF - 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0052, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, @@ -4614,15 +4966,15 @@ var langHeaders = [252]header{ 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, // Entry 240 - 27F 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, - 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, - 0x0082, 0x0082, 0x0093, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0093, }, }, { // es-PR "siswatiwolofacehnésarapahobhojpurigriego antiguosotho septentrional", - []uint16{ // 448 elements + []uint16{ // 450 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -4667,7 +5019,7 @@ var langHeaders = [252]header{ 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, - 0x0023, 0x0023, 0x0023, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0023, 0x0023, 0x0023, 0x0023, 0x0031, 0x0031, 0x0031, 0x0031, // Entry 140 - 17F 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, @@ -4685,14 +5037,16 @@ var langHeaders = [252]header{ 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, - 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0044, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + // Entry 1C0 - 1FF + 0x0031, 0x0044, }, }, { // es-PY "euskeralaopunyabísiswatisuajilisetswanawolofacehnésarapahobhojpurigriego" + " antiguosotho septentrionaltamazight marroquí estándarsuajili del Co" + "ngo", - []uint16{ // 611 elements + []uint16{ // 613 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -4737,7 +5091,7 @@ var langHeaders = [252]header{ 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, - 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, // Entry 140 - 17F 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, @@ -4755,9 +5109,9 @@ var langHeaders = [252]header{ 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, - 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0065, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, // Entry 1C0 - 1FF - 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0052, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, @@ -4776,15 +5130,15 @@ var langHeaders = [252]header{ 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, // Entry 240 - 27F 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, - 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, - 0x0082, 0x0082, 0x0093, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0093, }, }, { // es-SV "siswatiwolofacehnésarapahobhojpurigriego antiguosotho septentrional", - []uint16{ // 448 elements + []uint16{ // 450 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -4829,7 +5183,7 @@ var langHeaders = [252]header{ 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, - 0x0023, 0x0023, 0x0023, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0023, 0x0023, 0x0023, 0x0023, 0x0031, 0x0031, 0x0031, 0x0031, // Entry 140 - 17F 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, @@ -4847,15 +5201,19 @@ var langHeaders = [252]header{ 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, - 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0044, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + // Entry 1C0 - 1FF + 0x0031, 0x0044, }, }, { // es-US - "kiroundisiswatisetchwanawolofacehnésarapahobasabamunbhojpuriburiatneerla" + - "ndés medievalinglés medievalfrancés medievalalemán de la alta edad m" + - "ediagriego antiguohakalto sorbiocriollo caboverdianolushaiirlandés m" + - "edievalnansotho septentrionalpcmárabe chadianowuuswahili del Congo", - []uint16{ // 611 elements + "gurayatíndebele meridionalromanchekiroundisiswatisesotho meridionalsetch" + + "wanawolofacehnésaltái meridionalarapahobasabamunbhojpurisiksikaburia" + + "tneerlandés medievalinglés medievalfrancés medievalalemán de la alta" + + " edad mediagriego antiguohakkabardianokarachay-balkarlushaiirlandés " + + "medievalnansotho septentrionalpcmárabe chadianosami meridionalsiriac" + + "otetúntuvinianowuukalmykswahili del Congo", + []uint16{ // 613 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -4863,93 +5221,93 @@ var langHeaders = [252]header{ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, // Entry 40 - 7F - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x001b, 0x001b, 0x001b, + 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, // Entry 80 - BF - 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0008, 0x0008, - 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, - 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x000f, 0x000f, 0x000f, - 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, - 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, - 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x001d, 0x001d, - 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x0025, 0x0025, 0x0025, - 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, + 0x001b, 0x001b, 0x001b, 0x0023, 0x002b, 0x002b, 0x002b, 0x002b, + 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, + 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x0032, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, + 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x005a, 0x005a, 0x005a, + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, // Entry C0 - FF - 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x002c, - 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, - 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x0030, 0x0035, 0x0035, - 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, - 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, - 0x003d, 0x003d, 0x003d, 0x003d, 0x0043, 0x0043, 0x0043, 0x0043, - 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, - 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, - // Entry 100 - 13F - 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, - 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, - 0x0043, 0x0043, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, - 0x0057, 0x0057, 0x0057, 0x0057, 0x0067, 0x0067, 0x0067, 0x0067, - 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, 0x0078, 0x0078, 0x0078, - 0x0078, 0x0078, 0x0078, 0x0078, 0x0078, 0x0078, 0x0078, 0x0078, - 0x0078, 0x0078, 0x0078, 0x0078, 0x0095, 0x0095, 0x0095, 0x0095, - 0x0095, 0x0095, 0x0095, 0x00a3, 0x00a3, 0x00a3, 0x00a3, 0x00a3, - // Entry 140 - 17F - 0x00a3, 0x00a3, 0x00a6, 0x00a6, 0x00a6, 0x00a6, 0x00a6, 0x00a6, - 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, - 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, - 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, - 0x00b1, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, - 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, - 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, + 0x005a, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0076, 0x007b, 0x007b, + 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + 0x0083, 0x0083, 0x0083, 0x0083, 0x0083, 0x008a, 0x008a, 0x008a, + 0x008a, 0x008a, 0x008a, 0x008a, 0x0090, 0x0090, 0x0090, 0x0090, + 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, + 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, + // Entry 100 - 13F + 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, + 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, + 0x0090, 0x0090, 0x0090, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, + 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00a4, 0x00b4, 0x00b4, 0x00b4, + 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, + 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00e2, 0x00e2, 0x00e2, + 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00f0, 0x00f0, 0x00f0, 0x00f0, + // Entry 140 - 17F + 0x00f0, 0x00f0, 0x00f0, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, + 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, + 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, + 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00fd, 0x00fd, + 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, + 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, + 0x00fd, 0x00fd, 0x010c, 0x010c, 0x010c, 0x010c, 0x010c, 0x010c, + 0x010c, 0x010c, 0x010c, 0x010c, 0x010c, 0x010c, 0x010c, 0x010c, // Entry 180 - 1BF - 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, - 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00cb, 0x00cb, 0x00cb, - 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, - 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00dd, 0x00dd, - 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, - 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, - 0x00dd, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, - 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00f3, + 0x010c, 0x010c, 0x010c, 0x010c, 0x010c, 0x010c, 0x010c, 0x010c, + 0x010c, 0x010c, 0x010c, 0x010c, 0x010c, 0x010c, 0x010c, 0x0112, + 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, + 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, + 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, + 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, + 0x0124, 0x0124, 0x0124, 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, + 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, // Entry 1C0 - 1FF - 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, - 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f6, 0x00f6, - 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, - 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, - 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, - 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, - 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, - 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x0105, 0x0105, 0x0105, + 0x0127, 0x013a, 0x013a, 0x013a, 0x013a, 0x013a, 0x013a, 0x013a, + 0x013a, 0x013a, 0x013a, 0x013a, 0x013a, 0x013a, 0x013a, 0x013a, + 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, + 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, + 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, + 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, + 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, + 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, 0x014c, // Entry 200 - 23F - 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, - 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, - 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, - 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, - 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, - 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, - 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, - 0x0105, 0x0105, 0x0105, 0x0105, 0x0108, 0x0108, 0x0108, 0x0108, + 0x014c, 0x014c, 0x014c, 0x015b, 0x015b, 0x015b, 0x015b, 0x015b, + 0x015b, 0x015b, 0x015b, 0x015b, 0x015b, 0x015b, 0x015b, 0x015b, + 0x015b, 0x015b, 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, + 0x0168, 0x0168, 0x0168, 0x0168, 0x0168, 0x0168, 0x0168, 0x0168, + 0x0168, 0x0168, 0x0168, 0x0168, 0x0168, 0x0168, 0x0168, 0x0168, + 0x0168, 0x0168, 0x0168, 0x0171, 0x0171, 0x0171, 0x0171, 0x0171, + 0x0171, 0x0171, 0x0171, 0x0171, 0x0171, 0x0171, 0x0171, 0x0171, + 0x0171, 0x0171, 0x0171, 0x0171, 0x0171, 0x0171, 0x0174, 0x017a, // Entry 240 - 27F - 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, - 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, - 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, - 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, - 0x0108, 0x0108, 0x0119, + 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, + 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, + 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, + 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, + 0x017a, 0x017a, 0x017a, 0x017a, 0x018b, }, }, { // es-VE "euskeralaopunyabísiswatisuajilisetswanawolofacehnésarapahobhojpurigriego" + " antiguosotho septentrionaltamazight marroquí estándarsuajili del Co" + "ngo", - []uint16{ // 611 elements + []uint16{ // 613 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -4994,7 +5352,7 @@ var langHeaders = [252]header{ 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, - 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0052, 0x0052, 0x0052, 0x0052, // Entry 140 - 17F 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, @@ -5012,9 +5370,9 @@ var langHeaders = [252]header{ 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, - 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0065, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, // Entry 1C0 - 1FF - 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, + 0x0052, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, @@ -5033,10 +5391,10 @@ var langHeaders = [252]header{ 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, // Entry 240 - 27F 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, - 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, - 0x0082, 0x0082, 0x0093, + 0x0082, 0x0082, 0x0082, 0x0082, 0x0093, }, }, { // et @@ -5044,150 +5402,150 @@ var langHeaders = [252]header{ etLangIdx, }, { // eu - "afareraabkhazeraafrikaansaakaneraamhareraaragoieraarabieraassameraavarer" + - "aaimaraazerbaijanerabashkirrerabielorrusierabulgarierabislamabambare" + - "rabengaleratibeterabretoierabosnierakatalanatxetxenierachamorrerakor" + - "sikeratxekieraElizako eslavierachuvasheragaleseradanieraalemanadiveh" + - "ieradzongkhaeweeragrezieraingelesaesperantoaespainieraestonieraeuska" + - "rapersierafulafinlandierafijierafaroerafrantsesafrisieragaelikoaesko" + - "ziako gaelikoagalizieraguaranieragujarateramanxerahausahebreerahindi" + - "akroazieraHaitiko kreolerahungarieraarmenierahererainterlinguaindone" + - "sierainterlingueigboerasichuan yiaidoislandieraitalierainuiterajapon" + - "ierajaverageorgierakikongoakikuyuerakuanyamakazakherakalaallisuterak" + - "hemererakannaderakoreerakanurierakashmirerakurduerakomierakornubiera" + - "kirgizeralatinaluxenburgeraganderalimburgeralingalalaoseralituaniera" + - "luba-katangeraletonieramalagasyeramarshalleramaorieramazedonieramala" + - "yalameramongolieramaratheramalaysieramalteraburmatarranaurueraiparra" + - "ldeko ndebeleeranepalerandongeranederlanderanynorsk norvegierabokmal" + - "a (Norvegia)hegoaldeko ndebeleranavahoeranyanjaokzitanieraoromoeraor" + - "iyaosetierapunjaberapolonierapaxtueraportugesaquechueraerromantxerar" + - "undieraerrumanieraerrusierakinyaruandasanskritoasardinierasindhiaipa" + - "rraldeko samierasangoerasinhalaeslovakieraeslovenierasamoerashoneras" + - "omalieraalbanieraserbieraswatierahegoaldeko sothoerasundanerasuedier" + - "aswahilitamileratelugueratajikistanerathailandieratigriñeraturkmenie" + - "ratswaneratongeraturkieratsongeratatareratahitierauigurreraukrainera" + - "urduauzbekeravenderavietnameravolapükavalonierawoloferaxhoserayiddis" + - "hayoruberatxinerazulueraacehneraacholieraadangmeraadygheraaghemeraai" + - "nueraaleuterahegoaldeko altaieraangikeramaputxeaarapahoaasuaasturier" + - "aawadhierabalierabasaabemberabenerabhojpureraedoerasiksikerabodoerab" + - "uginerabilenacebuerachigerachuukeramarierachoctawtxerokieracheyenner" + - "asoraniaseselwa frantses-kreoleradakoteradargverataiteradogriberazar" + - "merabehe-sorabieradualerafonyi joleradazagaembuaefikeraakajukaewonde" + - "ratagalogafonafriulieragagagauzerage’ezgilberteragorontaloaalemana (" + - "Suitza)gusiieragwichʼinhawaiierahiligainonahmonggoi-sorabierahuperai" + - "baneraibibioerailokaneraingusheralojbanerangombamachamerakabilerajin" + - "gpoerakaijikamberakabardierakatabamakonderaCabo Verdeko kreolakoroak" + - "ashiakoyra chiinierakakoakalenjinerakimbunduakomi-permyakerakonkanie" + - "rakpelleakarachayera-balkarerakarelierakurukherashambalerabafierakol" + - "onierakumykeraladineralangieralezgieralakoteralozieraiparraldeko lur" + - "eratxiluberalunderaluoeramizoaluhyeramadureramagahieramaithileramaka" + - "sareramasaieramokxeramendeeramerueraMauritaniako kreoleramakhuwa-mee" + - "ttoerameteramikmakeraminangkabaueramanipureramohawkeramoreeramudange" + - "rahizkuntza anitzakcreeramiranderaerzieramazandaranderanapolieraname" + - "ranewareraniasaniuerakwasierangiembooneranogaieran’koerapedieranuere" + - "raankolerapangasinanerapampangerapapiamentoapalaueraNigeriako pidgin" + - "aprusierak’iche’rarapa nuirarotongeraromboeraaromaniarwaerasandaweas" + - "akherasamburuerasantalerangambayerasanguerasizilieraeskozierasenerak" + - "oyraboro senniatachelhitashanerahegoaldeko samieralule samierainari-" + - "samieraskolt samierasoninkerasrananerasahoasukumerakomoreeraasiriera" + - "temneatesoeratetumatigreaklingoneratok pisinatarokoatumbukeratuvalue" + - "ratasawaqatuveraMaroko erdialdeko tamazightaudmurteraumbundueraerroa" + - "vaieravunjoawalsererawelaytasamererakalmykerasogerajangbenerayembaka" + - "ntoneratamazight estandarrazuñiaez dago eduki linguistikorikzazakiaa" + - "rabiera moderno estandarraAustriako alemanaaleman garaia (Suitza)Aus" + - "traliako ingelesaKanadako ingelesaBritainia Handiko ingelesaAEBko in" + - "gelesaLatinoamerikako espainieraespainiera (Europa)Mexikoko espainie" + - "raKanadako frantsesaSuitzako frantsesabehe-saxoieraflandrieraBrasilg" + - "o portugesaportugesa (Europa)moldavieraserbokroazieraKongoko swahili" + - "atxinera soilduatxinera tradizionala", - []uint16{ // 613 elements - // Entry 0 - 3F - 0x0000, 0x0007, 0x0010, 0x0010, 0x001a, 0x0021, 0x0029, 0x0032, - 0x003a, 0x0042, 0x0049, 0x004f, 0x005c, 0x0067, 0x0074, 0x007e, - 0x0085, 0x008e, 0x0097, 0x009f, 0x00a8, 0x00b0, 0x00b8, 0x00c3, - 0x00cd, 0x00d6, 0x00d6, 0x00de, 0x00ef, 0x00f9, 0x0101, 0x0108, - 0x010f, 0x0118, 0x0120, 0x0126, 0x012e, 0x0136, 0x0140, 0x014a, - 0x0153, 0x015a, 0x0162, 0x0166, 0x0171, 0x0178, 0x017f, 0x0188, - 0x0190, 0x0198, 0x01aa, 0x01b3, 0x01bd, 0x01c7, 0x01ce, 0x01d3, - 0x01db, 0x01e1, 0x01e1, 0x01ea, 0x01fa, 0x0204, 0x020d, 0x0213, - // Entry 40 - 7F - 0x021e, 0x0229, 0x0234, 0x023b, 0x0246, 0x0246, 0x0249, 0x0253, - 0x025b, 0x0263, 0x026c, 0x0272, 0x027b, 0x0283, 0x028c, 0x0294, - 0x029d, 0x02ab, 0x02b4, 0x02bd, 0x02c4, 0x02cd, 0x02d7, 0x02df, - 0x02e6, 0x02f0, 0x02f9, 0x02ff, 0x030b, 0x0312, 0x031c, 0x0323, - 0x032a, 0x0334, 0x0342, 0x034b, 0x0356, 0x0361, 0x0369, 0x0374, - 0x0380, 0x038a, 0x0393, 0x039d, 0x03a4, 0x03ae, 0x03b6, 0x03cc, - 0x03d4, 0x03dc, 0x03e8, 0x03fa, 0x040c, 0x0420, 0x0429, 0x042f, - 0x043a, 0x043a, 0x0442, 0x0447, 0x044f, 0x0458, 0x0458, 0x0461, - // Entry 80 - BF - 0x0469, 0x0472, 0x047b, 0x0487, 0x048f, 0x049a, 0x04a3, 0x04ae, - 0x04b8, 0x04c2, 0x04c9, 0x04dc, 0x04e4, 0x04eb, 0x04f6, 0x0501, - 0x0508, 0x050f, 0x0518, 0x0521, 0x0529, 0x0531, 0x0544, 0x054d, - 0x0555, 0x055c, 0x0564, 0x056d, 0x057a, 0x0586, 0x0590, 0x059b, - 0x05a3, 0x05aa, 0x05b2, 0x05ba, 0x05c2, 0x05cb, 0x05d4, 0x05dd, - 0x05e2, 0x05ea, 0x05f1, 0x05fb, 0x0604, 0x060d, 0x0615, 0x061c, - 0x0624, 0x062c, 0x062c, 0x0633, 0x063a, 0x0642, 0x064b, 0x0654, - 0x065c, 0x065c, 0x065c, 0x0664, 0x066b, 0x066b, 0x066b, 0x0673, - // Entry C0 - FF - 0x0673, 0x0686, 0x0686, 0x068e, 0x068e, 0x0696, 0x0696, 0x069e, - 0x069e, 0x069e, 0x069e, 0x069e, 0x069e, 0x06a2, 0x06a2, 0x06ab, - 0x06ab, 0x06b4, 0x06b4, 0x06bb, 0x06bb, 0x06c0, 0x06c0, 0x06c0, - 0x06c0, 0x06c0, 0x06c7, 0x06c7, 0x06cd, 0x06cd, 0x06cd, 0x06cd, - 0x06d7, 0x06d7, 0x06dd, 0x06dd, 0x06dd, 0x06e6, 0x06e6, 0x06e6, - 0x06e6, 0x06e6, 0x06ed, 0x06ed, 0x06ed, 0x06f5, 0x06f5, 0x06fb, - 0x06fb, 0x06fb, 0x06fb, 0x06fb, 0x06fb, 0x0702, 0x0709, 0x0709, - 0x0709, 0x0711, 0x0718, 0x0718, 0x071f, 0x071f, 0x0729, 0x0733, - // Entry 100 - 13F - 0x073a, 0x073a, 0x073a, 0x073a, 0x0753, 0x0753, 0x075b, 0x0763, - 0x076a, 0x076a, 0x076a, 0x0773, 0x0773, 0x077a, 0x077a, 0x0788, - 0x0788, 0x078f, 0x078f, 0x079b, 0x079b, 0x07a1, 0x07a6, 0x07ad, - 0x07ad, 0x07ad, 0x07b4, 0x07b4, 0x07b4, 0x07b4, 0x07bc, 0x07bc, - 0x07bc, 0x07c4, 0x07c4, 0x07c8, 0x07c8, 0x07c8, 0x07c8, 0x07c8, - 0x07c8, 0x07c8, 0x07d1, 0x07d3, 0x07dc, 0x07dc, 0x07dc, 0x07dc, - 0x07dc, 0x07e3, 0x07ed, 0x07ed, 0x07ed, 0x07ed, 0x07ed, 0x07ed, - 0x07f7, 0x07f7, 0x07f7, 0x07f7, 0x0807, 0x0807, 0x0807, 0x080f, + "afareraabkhazieraafrikaansaakaneraamhareraaragoieraarabieraassameraavare" + + "raaimaraazerbaijanerabashkirrerabielorrusierabulgarierabislamabambar" + + "erabengaleratibeterabretoierabosnierakatalanatxetxenierachamorrerako" + + "rsikeratxekieraElizako eslavierachuvasheragalesadanieraalemanadivehi" + + "eradzongkhaeweeragrezieraingelesaesperantoaespainieraestonieraeuskar" + + "apersierafulafinlandierafijierafaroerafrantsesafrisieragaelikoaEskoz" + + "iako gaelikoagalizieraguaranieragujarateramanxerahausahebreerahindia" + + "kroazieraHaitiko kreolerahungarieraarmenierahererainterlinguaindones" + + "ierainterlingueigboeraSichuango yieraidoislandieraitalierainuiteraja" + + "ponierajaverageorgierakikongoakikuyuerakuanyamakazakheragroenlandier" + + "akhemererakannadakoreerakanurierakaxmirerakurduerakomierakornubierak" + + "irgizeralatinaluxenburgeraganderalimburgeralingalalaoseralituanieral" + + "uba-katangeraletonieramalgaxeamarshalleramaorieramazedonieramalabare" + + "ramongolieramaratheramalaysieramalterabirmanieranaurueraiparraldeko " + + "ndebeleeranepalerandongeranederlanderanynorsk norvegierabokmala (Nor" + + "vegia)hegoaldeko ndebeleranavahoeracheweraokzitanieraoromoeraoriyaos" + + "etierapunjaberapolonierapaxtueraportugesakitxuaerretorromanierarundi" + + "eraerrumanieraerrusierakinyaruandasanskritoasardinierasindhiaiparral" + + "deko samierasangoasinhalaeslovakieraeslovenierasamoerashonerasomalie" + + "raalbanieraserbieraswatierahegoaldeko sothoerasundanerasuedieraswahi" + + "liatamilerateluguatajikerathailandieratigriñeraturkmeneratswaneraton" + + "geraturkieratsongeratatareratahitierauigurreraukraineraurduauzbekera" + + "venderavietnameravolapükawaloierawoloferaxhoserayiddishajoruberatxin" + + "erazulueraacehneraacholieraadangmeraadygheraaghemeraainueraaleuterah" + + "egoaldeko altaieraangikeramaputxeaarapahoaasuaasturieraawadhierabali" + + "erabasaabemberabenerabhojpureraedoerasiksikerabodoerabuginerabilenac" + + "ebuerachigerachuukeramarierachoctawtxerokieracheyennerasoraniaseselw" + + "a frantses-kreoleradakoteradargverataiteradogriberazarmabehe-sorabie" + + "radualerafonyi joleradazagaembuaefikeraakajukaewonderafilipinerafona" + + "friulieragagagauzerage’ezgilberteragorontaloaalemana (Suitza)gusiier" + + "agwichʼinhawaiierahiligainonahmonggoi-sorabierahuperaibaneraibibioer" + + "ailokaneraingusheralojbanerangombamachamerakabilerajingpoerakaijikam" + + "berakabardierakatabamakonderaCabo Verdeko kreolakoroakashiakoyra chi" + + "inierakakoakalenjinerakimbunduakomi-permyakerakonkanerakpelleakarach" + + "ayera-balkarerakarelierakurukherashambalerabafierakolonierakumykeral" + + "adineralangieralezgieralakoteralozieraiparraldeko lureratxiluberalun" + + "deraluoeramizoaluhyeramadureramagahieramaithileramakasareramasaieram" + + "okxeramendeeramerueraMauritaniako kreoleramakhuwa-meettoerameteramik" + + "makeraminangkabaueramanipureramohawkeramoreeramudangerazenbait hizku" + + "ntzacreeramiranderaerzieramazandaranderanapolieranameranewareraniasa" + + "niuerakwasierangiembooneranogaieran’koerapedieranuereraankolerapanga" + + "sinanerapampangerapapiamentoapalaueraNigeriako pidginaprusieraquiche" + + "erarapa nuirarotongeraromboeraaromaniarwaerasandaweasakherasamburuer" + + "asantalerangambayerasanguerasizilieraeskozierasenerakoyraboro sennia" + + "tachelhitashanerahegoaldeko samieralule samierainari-samieraskolten " + + "samierasoninkerasrananerasahoasukumerakomoreeraasirieratemneatesoera" + + "tetumatigreaklingoneratok pisinatarokoatumbukeratuvalueratasawaqatuv" + + "eraErdialdeko Atlaseko amazigeraudmurteraumbunduerahizkuntza ezezagu" + + "navaieravunjoawalsererawelaytasamererakalmykerasogerajangbenerayemba" + + "kantoneraamazigera estandarrazuñiaez dago eduki linguistikorikzazaki" + + "aarabiera moderno estandarraAustriako alemanaaleman garaia (Suitza)A" + + "ustraliako ingelesaKanadako ingelesaBritainia Handiko ingelesaAEBko " + + "ingelesaLatinoamerikako espainieraespainiera (Europa)Mexikoko espain" + + "ieraKanadako frantsesaSuitzako frantsesabehe-saxoieraflandrieraBrasi" + + "lgo portugesaportugesa (Europa)moldavieraserbokroazieraKongoko swahi" + + "liatxinera soilduatxinera tradizionala", + []uint16{ // 615 elements + // Entry 0 - 3F + 0x0000, 0x0007, 0x0011, 0x0011, 0x001b, 0x0022, 0x002a, 0x0033, + 0x003b, 0x0043, 0x004a, 0x0050, 0x005d, 0x0068, 0x0075, 0x007f, + 0x0086, 0x008f, 0x0098, 0x00a0, 0x00a9, 0x00b1, 0x00b9, 0x00c4, + 0x00ce, 0x00d7, 0x00d7, 0x00df, 0x00f0, 0x00fa, 0x0100, 0x0107, + 0x010e, 0x0117, 0x011f, 0x0125, 0x012d, 0x0135, 0x013f, 0x0149, + 0x0152, 0x0159, 0x0161, 0x0165, 0x0170, 0x0177, 0x017e, 0x0187, + 0x018f, 0x0197, 0x01a9, 0x01b2, 0x01bc, 0x01c6, 0x01cd, 0x01d2, + 0x01da, 0x01e0, 0x01e0, 0x01e9, 0x01f9, 0x0203, 0x020c, 0x0212, + // Entry 40 - 7F + 0x021d, 0x0228, 0x0233, 0x023a, 0x0249, 0x0249, 0x024c, 0x0256, + 0x025e, 0x0266, 0x026f, 0x0275, 0x027e, 0x0286, 0x028f, 0x0297, + 0x02a0, 0x02ad, 0x02b6, 0x02bd, 0x02c4, 0x02cd, 0x02d6, 0x02de, + 0x02e5, 0x02ef, 0x02f8, 0x02fe, 0x030a, 0x0311, 0x031b, 0x0322, + 0x0329, 0x0333, 0x0341, 0x034a, 0x0352, 0x035d, 0x0365, 0x0370, + 0x037a, 0x0384, 0x038d, 0x0397, 0x039e, 0x03a8, 0x03b0, 0x03c6, + 0x03ce, 0x03d6, 0x03e2, 0x03f4, 0x0406, 0x041a, 0x0423, 0x042a, + 0x0435, 0x0435, 0x043d, 0x0442, 0x044a, 0x0453, 0x0453, 0x045c, + // Entry 80 - BF + 0x0464, 0x046d, 0x0473, 0x0483, 0x048b, 0x0496, 0x049f, 0x04aa, + 0x04b4, 0x04be, 0x04c5, 0x04d8, 0x04de, 0x04e5, 0x04f0, 0x04fb, + 0x0502, 0x0509, 0x0512, 0x051b, 0x0523, 0x052b, 0x053e, 0x0547, + 0x054f, 0x0557, 0x055f, 0x0566, 0x056e, 0x057a, 0x0584, 0x058e, + 0x0596, 0x059d, 0x05a5, 0x05ad, 0x05b5, 0x05be, 0x05c7, 0x05d0, + 0x05d5, 0x05dd, 0x05e4, 0x05ee, 0x05f7, 0x05ff, 0x0607, 0x060e, + 0x0616, 0x061e, 0x061e, 0x0625, 0x062c, 0x0634, 0x063d, 0x0646, + 0x064e, 0x064e, 0x064e, 0x0656, 0x065d, 0x065d, 0x065d, 0x0665, + // Entry C0 - FF + 0x0665, 0x0678, 0x0678, 0x0680, 0x0680, 0x0688, 0x0688, 0x0690, + 0x0690, 0x0690, 0x0690, 0x0690, 0x0690, 0x0694, 0x0694, 0x069d, + 0x069d, 0x06a6, 0x06a6, 0x06ad, 0x06ad, 0x06b2, 0x06b2, 0x06b2, + 0x06b2, 0x06b2, 0x06b9, 0x06b9, 0x06bf, 0x06bf, 0x06bf, 0x06bf, + 0x06c9, 0x06c9, 0x06cf, 0x06cf, 0x06cf, 0x06d8, 0x06d8, 0x06d8, + 0x06d8, 0x06d8, 0x06df, 0x06df, 0x06df, 0x06e7, 0x06e7, 0x06ed, + 0x06ed, 0x06ed, 0x06ed, 0x06ed, 0x06ed, 0x06ed, 0x06f4, 0x06fb, + 0x06fb, 0x06fb, 0x0703, 0x070a, 0x070a, 0x0711, 0x0711, 0x071b, + // Entry 100 - 13F + 0x0725, 0x072c, 0x072c, 0x072c, 0x072c, 0x0745, 0x0745, 0x074d, + 0x0755, 0x075c, 0x075c, 0x075c, 0x0765, 0x0765, 0x076a, 0x076a, + 0x0778, 0x0778, 0x077f, 0x077f, 0x078b, 0x078b, 0x0791, 0x0796, + 0x079d, 0x079d, 0x079d, 0x07a4, 0x07a4, 0x07a4, 0x07a4, 0x07ac, + 0x07ac, 0x07ac, 0x07b6, 0x07b6, 0x07ba, 0x07ba, 0x07ba, 0x07ba, + 0x07ba, 0x07ba, 0x07ba, 0x07c3, 0x07c5, 0x07ce, 0x07ce, 0x07ce, + 0x07ce, 0x07ce, 0x07d5, 0x07df, 0x07df, 0x07df, 0x07df, 0x07df, + 0x07df, 0x07e9, 0x07e9, 0x07e9, 0x07e9, 0x07f9, 0x07f9, 0x07f9, // Entry 140 - 17F - 0x0818, 0x0818, 0x0818, 0x0821, 0x0821, 0x082c, 0x082c, 0x0831, - 0x083e, 0x083e, 0x0844, 0x084b, 0x0854, 0x085d, 0x0866, 0x0866, - 0x0866, 0x086f, 0x0875, 0x087e, 0x087e, 0x087e, 0x087e, 0x087e, - 0x0886, 0x088f, 0x0894, 0x089b, 0x089b, 0x08a5, 0x08a5, 0x08ab, - 0x08b4, 0x08c7, 0x08c7, 0x08cc, 0x08cc, 0x08d2, 0x08d2, 0x08e1, - 0x08e1, 0x08e1, 0x08e6, 0x08f1, 0x08fa, 0x0909, 0x0913, 0x0913, - 0x091a, 0x092f, 0x092f, 0x092f, 0x0938, 0x0941, 0x094b, 0x0952, - 0x095b, 0x0963, 0x0963, 0x096b, 0x0973, 0x0973, 0x0973, 0x097b, + 0x0801, 0x080a, 0x080a, 0x080a, 0x0813, 0x0813, 0x081e, 0x081e, + 0x0823, 0x0830, 0x0830, 0x0836, 0x083d, 0x0846, 0x084f, 0x0858, + 0x0858, 0x0858, 0x0861, 0x0867, 0x0870, 0x0870, 0x0870, 0x0870, + 0x0870, 0x0878, 0x0881, 0x0886, 0x088d, 0x088d, 0x0897, 0x0897, + 0x089d, 0x08a6, 0x08b9, 0x08b9, 0x08be, 0x08be, 0x08c4, 0x08c4, + 0x08d3, 0x08d3, 0x08d3, 0x08d8, 0x08e3, 0x08ec, 0x08fb, 0x0904, + 0x0904, 0x090b, 0x0920, 0x0920, 0x0920, 0x0929, 0x0932, 0x093c, + 0x0943, 0x094c, 0x0954, 0x0954, 0x095c, 0x0964, 0x0964, 0x0964, // Entry 180 - 1BF - 0x097b, 0x097b, 0x097b, 0x0983, 0x0983, 0x0983, 0x098a, 0x099c, - 0x099c, 0x09a5, 0x09a5, 0x09ac, 0x09b2, 0x09b7, 0x09be, 0x09be, - 0x09be, 0x09c6, 0x09c6, 0x09cf, 0x09d9, 0x09e3, 0x09e3, 0x09eb, - 0x09eb, 0x09f2, 0x09f2, 0x09fa, 0x0a01, 0x0a16, 0x0a16, 0x0a27, - 0x0a2d, 0x0a36, 0x0a44, 0x0a44, 0x0a4e, 0x0a57, 0x0a5e, 0x0a5e, - 0x0a67, 0x0a78, 0x0a7e, 0x0a87, 0x0a87, 0x0a87, 0x0a87, 0x0a8e, - 0x0a9c, 0x0a9c, 0x0aa5, 0x0aab, 0x0aab, 0x0ab3, 0x0ab8, 0x0abe, - 0x0abe, 0x0ac6, 0x0ad2, 0x0ada, 0x0ada, 0x0ada, 0x0ae3, 0x0aea, + 0x096c, 0x096c, 0x096c, 0x096c, 0x0974, 0x0974, 0x0974, 0x0974, + 0x097b, 0x098d, 0x098d, 0x0996, 0x0996, 0x099d, 0x09a3, 0x09a8, + 0x09af, 0x09af, 0x09af, 0x09b7, 0x09b7, 0x09c0, 0x09ca, 0x09d4, + 0x09d4, 0x09dc, 0x09dc, 0x09e3, 0x09e3, 0x09eb, 0x09f2, 0x0a07, + 0x0a07, 0x0a18, 0x0a1e, 0x0a27, 0x0a35, 0x0a35, 0x0a3f, 0x0a48, + 0x0a4f, 0x0a4f, 0x0a58, 0x0a69, 0x0a6f, 0x0a78, 0x0a78, 0x0a78, + 0x0a78, 0x0a7f, 0x0a8d, 0x0a8d, 0x0a96, 0x0a9c, 0x0a9c, 0x0aa4, + 0x0aa9, 0x0aaf, 0x0aaf, 0x0ab7, 0x0ac3, 0x0acb, 0x0acb, 0x0acb, // Entry 1C0 - 1FF - 0x0af1, 0x0af1, 0x0af1, 0x0af9, 0x0af9, 0x0af9, 0x0af9, 0x0af9, - 0x0b06, 0x0b06, 0x0b10, 0x0b1b, 0x0b23, 0x0b23, 0x0b34, 0x0b34, - 0x0b34, 0x0b34, 0x0b34, 0x0b34, 0x0b34, 0x0b34, 0x0b34, 0x0b3c, - 0x0b3c, 0x0b49, 0x0b49, 0x0b49, 0x0b51, 0x0b5c, 0x0b5c, 0x0b5c, - 0x0b64, 0x0b64, 0x0b64, 0x0b64, 0x0b64, 0x0b6c, 0x0b72, 0x0b7a, - 0x0b81, 0x0b81, 0x0b8b, 0x0b8b, 0x0b94, 0x0b94, 0x0b9e, 0x0ba6, - 0x0baf, 0x0bb8, 0x0bb8, 0x0bb8, 0x0bb8, 0x0bbe, 0x0bbe, 0x0bbe, - 0x0bce, 0x0bce, 0x0bce, 0x0bd8, 0x0bdf, 0x0bdf, 0x0bdf, 0x0bdf, + 0x0ad4, 0x0adb, 0x0ae2, 0x0ae2, 0x0ae2, 0x0aea, 0x0aea, 0x0aea, + 0x0aea, 0x0aea, 0x0af7, 0x0af7, 0x0b01, 0x0b0c, 0x0b14, 0x0b14, + 0x0b25, 0x0b25, 0x0b25, 0x0b25, 0x0b25, 0x0b25, 0x0b25, 0x0b25, + 0x0b25, 0x0b2d, 0x0b2d, 0x0b36, 0x0b36, 0x0b36, 0x0b3e, 0x0b49, + 0x0b49, 0x0b49, 0x0b51, 0x0b51, 0x0b51, 0x0b51, 0x0b51, 0x0b59, + 0x0b5f, 0x0b67, 0x0b6e, 0x0b6e, 0x0b78, 0x0b78, 0x0b81, 0x0b81, + 0x0b8b, 0x0b93, 0x0b9c, 0x0ba5, 0x0ba5, 0x0ba5, 0x0ba5, 0x0bab, + 0x0bab, 0x0bab, 0x0bbb, 0x0bbb, 0x0bbb, 0x0bc5, 0x0bcc, 0x0bcc, // Entry 200 - 23F - 0x0bdf, 0x0bf1, 0x0bfd, 0x0c0a, 0x0c17, 0x0c20, 0x0c20, 0x0c29, - 0x0c29, 0x0c2e, 0x0c2e, 0x0c36, 0x0c36, 0x0c36, 0x0c3f, 0x0c3f, - 0x0c47, 0x0c47, 0x0c47, 0x0c4d, 0x0c54, 0x0c54, 0x0c5a, 0x0c60, - 0x0c60, 0x0c60, 0x0c60, 0x0c6a, 0x0c6a, 0x0c6a, 0x0c6a, 0x0c6a, - 0x0c74, 0x0c74, 0x0c7b, 0x0c7b, 0x0c7b, 0x0c7b, 0x0c84, 0x0c8d, - 0x0c95, 0x0c9b, 0x0cb7, 0x0cc0, 0x0cc0, 0x0cca, 0x0ccf, 0x0cd5, - 0x0cd5, 0x0cd5, 0x0cd5, 0x0cd5, 0x0cd5, 0x0cd5, 0x0cdb, 0x0ce4, - 0x0ceb, 0x0cf3, 0x0cf3, 0x0cf3, 0x0cf3, 0x0cfc, 0x0cfc, 0x0d02, + 0x0bcc, 0x0bcc, 0x0bcc, 0x0bde, 0x0bea, 0x0bf7, 0x0c06, 0x0c0f, + 0x0c0f, 0x0c18, 0x0c18, 0x0c1d, 0x0c1d, 0x0c25, 0x0c25, 0x0c25, + 0x0c2e, 0x0c2e, 0x0c36, 0x0c36, 0x0c36, 0x0c3c, 0x0c43, 0x0c43, + 0x0c49, 0x0c4f, 0x0c4f, 0x0c4f, 0x0c4f, 0x0c59, 0x0c59, 0x0c59, + 0x0c59, 0x0c59, 0x0c63, 0x0c63, 0x0c6a, 0x0c6a, 0x0c6a, 0x0c6a, + 0x0c73, 0x0c7c, 0x0c84, 0x0c8a, 0x0ca7, 0x0cb0, 0x0cb0, 0x0cba, + 0x0ccd, 0x0cd3, 0x0cd3, 0x0cd3, 0x0cd3, 0x0cd3, 0x0cd3, 0x0cd3, + 0x0cd9, 0x0ce2, 0x0ce9, 0x0cf1, 0x0cf1, 0x0cf1, 0x0cf1, 0x0cfa, // Entry 240 - 27F - 0x0d02, 0x0d02, 0x0d0c, 0x0d11, 0x0d11, 0x0d1a, 0x0d1a, 0x0d1a, - 0x0d1a, 0x0d1a, 0x0d2e, 0x0d34, 0x0d50, 0x0d57, 0x0d72, 0x0d72, - 0x0d83, 0x0d99, 0x0dad, 0x0dbe, 0x0dd8, 0x0de6, 0x0e00, 0x0e13, - 0x0e26, 0x0e26, 0x0e38, 0x0e4a, 0x0e57, 0x0e61, 0x0e73, 0x0e85, - 0x0e8f, 0x0e9d, 0x0ead, 0x0ebc, 0x0ed0, + 0x0cfa, 0x0d00, 0x0d00, 0x0d00, 0x0d0a, 0x0d0f, 0x0d0f, 0x0d18, + 0x0d18, 0x0d18, 0x0d18, 0x0d18, 0x0d2c, 0x0d32, 0x0d4e, 0x0d55, + 0x0d70, 0x0d70, 0x0d81, 0x0d97, 0x0dab, 0x0dbc, 0x0dd6, 0x0de4, + 0x0dfe, 0x0e11, 0x0e24, 0x0e24, 0x0e36, 0x0e48, 0x0e55, 0x0e5f, + 0x0e71, 0x0e83, 0x0e8d, 0x0e9b, 0x0eab, 0x0eba, 0x0ece, }, }, { // ewo @@ -5200,7 +5558,7 @@ var langHeaders = [252]header{ "fɔtugɛ́sńkɔ́bɔ románíaǹkɔ́bɔ rúsianǹkɔ́bɔ ruwandáǹkɔ́bɔ somáliaǹkɔ́b" + "ɔ suwɛ́dǹkɔ́bɔ tamílǹkɔ́bɔ táilanǹkɔ́bɔ túrəkiǹkɔ́bɔ ukeléniaǹkɔ́bɔ" + " urudúǹkɔ́bɔ hiɛdənámǹkɔ́bɔ yorúbaǸkɔ́bɔ tsainísǹkɔ́bɔ zulúewondo", - []uint16{ // 287 elements + []uint16{ // 288 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x0022, 0x0022, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x004a, 0x0061, @@ -5241,7 +5599,7 @@ var langHeaders = [252]header{ 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, - 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x035d, + 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x035d, }, }, { // fa @@ -5252,7 +5610,7 @@ var langHeaders = [252]header{ "افریکانساسامیآذربایجانیباشقیریمالدیویهسپانویفنلندیآیرلندیکروشیاییاندونیز" + "یاییآیسلندیایتالویجاپانیکوریاییقرغزیمغلینیپالیهالندینارویژیپولندیپر" + "تگالیالبانیاییسویدنیسواحلیتاجکیکردی سورانی", - []uint16{ // 257 elements + []uint16{ // 258 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x001a, 0x001a, 0x001a, 0x002e, 0x003c, 0x003c, 0x003c, @@ -5290,7 +5648,7 @@ var langHeaders = [252]header{ 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, // Entry 100 - 13F - 0x0169, + 0x0154, 0x0169, }, }, { // ff @@ -5379,13 +5737,13 @@ var langHeaders = [252]header{ "isilansktskotsktsuður kurdisktsenakoyraboro sennitachelhitshansuður " + "sámisktlule sámisktinari samiskolt sámisktsoninkesranan tongosahosuk" + "umakomorisktsyriactimnetesotetumtigreklingonskttok pisintarokotumbuk" + - "atuvalutasawaqtuvinianmiðatlasfjøll tamazightudmurtumbundurootvaivun" + - "jowalserwolayttawaraywarlpiriwu kinesisktkalmyksogayangbenyembakanto" + - "nesisktvanligt marokanskt tamazightzunieinki málsligt innihaldzazanú" + - "tíðar vanligt arabiskthøgt týskt (Sveis)lágt saksisktflamsktportugis" + - "kiskt (Brasilia)portugiskiskt (Evropa)moldavisktserbokroatisktkongo " + - "svahilieinkult kinesisktvanligt kinesiskt", - []uint16{ // 613 elements + "atuvalutasawaqtuvinianmiðatlasfjøll tamazightudmurtumbunduókent málv" + + "aivunjowalserwolayttawaraywarlpiriwu kinesisktkalmyksogayangbenyemba" + + "kantonesisktvanligt marokanskt tamazightzunieinki málsligt innihaldz" + + "azanútíðar vanligt arabiskthøgt týskt (Sveis)lágt saksisktflamsktpor" + + "tugiskiskt (Brasilia)portugiskiskt (Evropa)moldavisktserbokroatisktk" + + "ongo svahilieinkult kinesisktvanligt kinesiskt", + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0004, 0x000e, 0x000e, 0x0017, 0x001b, 0x0024, 0x002e, 0x0036, 0x0041, 0x0049, 0x004f, 0x005e, 0x0065, 0x0072, 0x007b, @@ -5420,59 +5778,59 @@ var langHeaders = [252]header{ 0x05df, 0x05df, 0x05e4, 0x05e4, 0x05e8, 0x05e8, 0x05e8, 0x05f6, 0x05fe, 0x05fe, 0x0602, 0x0602, 0x0602, 0x0609, 0x0609, 0x0609, 0x0609, 0x0609, 0x060d, 0x0614, 0x0614, 0x061f, 0x061f, 0x0623, - 0x0623, 0x0623, 0x0623, 0x0623, 0x0623, 0x062a, 0x062f, 0x062f, - 0x062f, 0x0637, 0x063b, 0x063b, 0x0642, 0x0642, 0x064a, 0x0652, - // Entry 100 - 13F - 0x065e, 0x065e, 0x065e, 0x065e, 0x0674, 0x0674, 0x067a, 0x0680, - 0x0685, 0x0685, 0x0685, 0x068b, 0x068b, 0x0690, 0x0690, 0x069d, - 0x069d, 0x06a2, 0x06a2, 0x06ac, 0x06ac, 0x06b2, 0x06b6, 0x06ba, - 0x06ba, 0x06ba, 0x06c0, 0x06c0, 0x06c0, 0x06c0, 0x06c6, 0x06c6, - 0x06c6, 0x06d1, 0x06d1, 0x06d4, 0x06d4, 0x06d4, 0x06d4, 0x06d4, - 0x06d4, 0x06d4, 0x06dd, 0x06df, 0x06e5, 0x06f2, 0x06f2, 0x06f2, - 0x06f2, 0x06f6, 0x0701, 0x0701, 0x0701, 0x0701, 0x0701, 0x0701, - 0x070a, 0x070a, 0x070a, 0x070a, 0x0718, 0x0718, 0x0718, 0x071d, + 0x0623, 0x0623, 0x0623, 0x0623, 0x0623, 0x0623, 0x062a, 0x062f, + 0x062f, 0x062f, 0x0637, 0x063b, 0x063b, 0x0642, 0x0642, 0x064a, + // Entry 100 - 13F + 0x0652, 0x065e, 0x065e, 0x065e, 0x065e, 0x0674, 0x0674, 0x067a, + 0x0680, 0x0685, 0x0685, 0x0685, 0x068b, 0x068b, 0x0690, 0x0690, + 0x069d, 0x069d, 0x06a2, 0x06a2, 0x06ac, 0x06ac, 0x06b2, 0x06b6, + 0x06ba, 0x06ba, 0x06ba, 0x06c0, 0x06c0, 0x06c0, 0x06c0, 0x06c6, + 0x06c6, 0x06c6, 0x06d1, 0x06d1, 0x06d4, 0x06d4, 0x06d4, 0x06d4, + 0x06d4, 0x06d4, 0x06d4, 0x06dd, 0x06df, 0x06e5, 0x06f2, 0x06f2, + 0x06f2, 0x06f2, 0x06f6, 0x0701, 0x0701, 0x0701, 0x0701, 0x0701, + 0x0701, 0x070a, 0x070a, 0x070a, 0x070a, 0x0718, 0x0718, 0x0718, // Entry 140 - 17F - 0x0727, 0x0727, 0x0736, 0x0741, 0x0741, 0x074b, 0x074b, 0x0750, - 0x075d, 0x076c, 0x0770, 0x0774, 0x077a, 0x077f, 0x0786, 0x0786, - 0x0786, 0x078c, 0x0792, 0x0799, 0x0799, 0x0799, 0x0799, 0x0799, - 0x079f, 0x07a5, 0x07a8, 0x07ad, 0x07ad, 0x07b8, 0x07b8, 0x07bc, - 0x07c3, 0x07d8, 0x07d8, 0x07dc, 0x07dc, 0x07e1, 0x07e1, 0x07ed, - 0x07ed, 0x07ed, 0x07f1, 0x07f9, 0x0801, 0x080d, 0x0814, 0x0814, - 0x081a, 0x0829, 0x0829, 0x0829, 0x0831, 0x0837, 0x083f, 0x0844, - 0x084c, 0x0851, 0x0851, 0x0857, 0x085c, 0x0862, 0x0862, 0x086a, + 0x071d, 0x0727, 0x0727, 0x0736, 0x0741, 0x0741, 0x074b, 0x074b, + 0x0750, 0x075d, 0x076c, 0x0770, 0x0774, 0x077a, 0x077f, 0x0786, + 0x0786, 0x0786, 0x078c, 0x0792, 0x0799, 0x0799, 0x0799, 0x0799, + 0x0799, 0x079f, 0x07a5, 0x07a8, 0x07ad, 0x07ad, 0x07b8, 0x07b8, + 0x07bc, 0x07c3, 0x07d8, 0x07d8, 0x07dc, 0x07dc, 0x07e1, 0x07e1, + 0x07ed, 0x07ed, 0x07ed, 0x07f1, 0x07f9, 0x0801, 0x080d, 0x0814, + 0x0814, 0x081a, 0x0829, 0x0829, 0x0829, 0x0831, 0x0837, 0x083f, + 0x0844, 0x084c, 0x0851, 0x0851, 0x0857, 0x085c, 0x0862, 0x0862, // Entry 180 - 1BF - 0x086a, 0x086a, 0x086a, 0x0870, 0x0870, 0x0870, 0x0874, 0x0880, - 0x0880, 0x088a, 0x088a, 0x088f, 0x0892, 0x0896, 0x089b, 0x089b, - 0x089b, 0x08a6, 0x08a6, 0x08ac, 0x08b4, 0x08bb, 0x08bb, 0x08c0, - 0x08c0, 0x08c6, 0x08c6, 0x08cb, 0x08cf, 0x08d7, 0x08d7, 0x08e5, - 0x08eb, 0x08f1, 0x08fc, 0x08fc, 0x0904, 0x090a, 0x090f, 0x090f, - 0x0916, 0x0920, 0x0925, 0x0931, 0x0931, 0x0931, 0x0931, 0x0936, - 0x0941, 0x0952, 0x095e, 0x0962, 0x096e, 0x0974, 0x0978, 0x097e, - 0x097e, 0x0984, 0x098d, 0x0992, 0x0992, 0x0992, 0x0997, 0x09a4, + 0x086a, 0x086a, 0x086a, 0x086a, 0x0870, 0x0870, 0x0870, 0x0870, + 0x0874, 0x0880, 0x0880, 0x088a, 0x088a, 0x088f, 0x0892, 0x0896, + 0x089b, 0x089b, 0x089b, 0x08a6, 0x08a6, 0x08ac, 0x08b4, 0x08bb, + 0x08bb, 0x08c0, 0x08c0, 0x08c6, 0x08c6, 0x08cb, 0x08cf, 0x08d7, + 0x08d7, 0x08e5, 0x08eb, 0x08f1, 0x08fc, 0x08fc, 0x0904, 0x090a, + 0x090f, 0x090f, 0x0916, 0x0920, 0x0925, 0x0931, 0x0931, 0x0931, + 0x0931, 0x0936, 0x0941, 0x0952, 0x095e, 0x0962, 0x096e, 0x0974, + 0x0978, 0x097e, 0x097e, 0x0984, 0x098d, 0x0992, 0x0992, 0x0992, // Entry 1C0 - 1FF - 0x09a8, 0x09a8, 0x09a8, 0x09b0, 0x09b0, 0x09b0, 0x09b0, 0x09b0, - 0x09ba, 0x09ba, 0x09c2, 0x09cc, 0x09d3, 0x09d3, 0x09e3, 0x09e3, - 0x09e3, 0x09e3, 0x09e3, 0x09e3, 0x09e3, 0x09e3, 0x09e3, 0x09ee, - 0x09ee, 0x09f7, 0x09f7, 0x09f7, 0x09fe, 0x0a0a, 0x0a0a, 0x0a0a, - 0x0a0f, 0x0a0f, 0x0a0f, 0x0a0f, 0x0a0f, 0x0a18, 0x0a1b, 0x0a22, - 0x0a27, 0x0a27, 0x0a2e, 0x0a2e, 0x0a35, 0x0a35, 0x0a3c, 0x0a41, - 0x0a4b, 0x0a52, 0x0a52, 0x0a61, 0x0a61, 0x0a65, 0x0a65, 0x0a65, - 0x0a74, 0x0a74, 0x0a74, 0x0a7d, 0x0a81, 0x0a81, 0x0a81, 0x0a81, + 0x0997, 0x09a4, 0x09a8, 0x09a8, 0x09a8, 0x09b0, 0x09b0, 0x09b0, + 0x09b0, 0x09b0, 0x09ba, 0x09ba, 0x09c2, 0x09cc, 0x09d3, 0x09d3, + 0x09e3, 0x09e3, 0x09e3, 0x09e3, 0x09e3, 0x09e3, 0x09e3, 0x09e3, + 0x09e3, 0x09ee, 0x09ee, 0x09f7, 0x09f7, 0x09f7, 0x09fe, 0x0a0a, + 0x0a0a, 0x0a0a, 0x0a0f, 0x0a0f, 0x0a0f, 0x0a0f, 0x0a0f, 0x0a18, + 0x0a1b, 0x0a22, 0x0a27, 0x0a27, 0x0a2e, 0x0a2e, 0x0a35, 0x0a35, + 0x0a3c, 0x0a41, 0x0a4b, 0x0a52, 0x0a52, 0x0a61, 0x0a61, 0x0a65, + 0x0a65, 0x0a65, 0x0a74, 0x0a74, 0x0a74, 0x0a7d, 0x0a81, 0x0a81, // Entry 200 - 23F - 0x0a81, 0x0a90, 0x0a9d, 0x0aa7, 0x0ab5, 0x0abc, 0x0abc, 0x0ac8, - 0x0ac8, 0x0acc, 0x0acc, 0x0ad2, 0x0ad2, 0x0ad2, 0x0adb, 0x0adb, - 0x0ae1, 0x0ae1, 0x0ae1, 0x0ae6, 0x0aea, 0x0aea, 0x0aef, 0x0af4, - 0x0af4, 0x0af4, 0x0af4, 0x0afe, 0x0afe, 0x0afe, 0x0afe, 0x0afe, - 0x0b07, 0x0b07, 0x0b0d, 0x0b0d, 0x0b0d, 0x0b0d, 0x0b14, 0x0b1a, - 0x0b21, 0x0b29, 0x0b42, 0x0b48, 0x0b48, 0x0b4f, 0x0b53, 0x0b56, - 0x0b56, 0x0b56, 0x0b56, 0x0b56, 0x0b56, 0x0b56, 0x0b5b, 0x0b61, - 0x0b69, 0x0b6e, 0x0b6e, 0x0b76, 0x0b82, 0x0b88, 0x0b88, 0x0b8c, + 0x0a81, 0x0a81, 0x0a81, 0x0a90, 0x0a9d, 0x0aa7, 0x0ab5, 0x0abc, + 0x0abc, 0x0ac8, 0x0ac8, 0x0acc, 0x0acc, 0x0ad2, 0x0ad2, 0x0ad2, + 0x0adb, 0x0adb, 0x0ae1, 0x0ae1, 0x0ae1, 0x0ae6, 0x0aea, 0x0aea, + 0x0aef, 0x0af4, 0x0af4, 0x0af4, 0x0af4, 0x0afe, 0x0afe, 0x0afe, + 0x0afe, 0x0afe, 0x0b07, 0x0b07, 0x0b0d, 0x0b0d, 0x0b0d, 0x0b0d, + 0x0b14, 0x0b1a, 0x0b21, 0x0b29, 0x0b42, 0x0b48, 0x0b48, 0x0b4f, + 0x0b5a, 0x0b5d, 0x0b5d, 0x0b5d, 0x0b5d, 0x0b5d, 0x0b5d, 0x0b5d, + 0x0b62, 0x0b68, 0x0b70, 0x0b75, 0x0b75, 0x0b7d, 0x0b89, 0x0b8f, // Entry 240 - 27F - 0x0b8c, 0x0b8c, 0x0b93, 0x0b98, 0x0b98, 0x0ba4, 0x0ba4, 0x0ba4, - 0x0ba4, 0x0ba4, 0x0bc0, 0x0bc4, 0x0bdc, 0x0be0, 0x0bfb, 0x0bfb, - 0x0bfb, 0x0c0f, 0x0c0f, 0x0c0f, 0x0c0f, 0x0c0f, 0x0c0f, 0x0c0f, - 0x0c0f, 0x0c0f, 0x0c0f, 0x0c0f, 0x0c1d, 0x0c24, 0x0c3c, 0x0c52, - 0x0c5c, 0x0c6a, 0x0c77, 0x0c88, 0x0c99, + 0x0b8f, 0x0b93, 0x0b93, 0x0b93, 0x0b9a, 0x0b9f, 0x0b9f, 0x0bab, + 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bc7, 0x0bcb, 0x0be3, 0x0be7, + 0x0c02, 0x0c02, 0x0c02, 0x0c16, 0x0c16, 0x0c16, 0x0c16, 0x0c16, + 0x0c16, 0x0c16, 0x0c16, 0x0c16, 0x0c16, 0x0c16, 0x0c24, 0x0c2b, + 0x0c43, 0x0c59, 0x0c63, 0x0c71, 0x0c7e, 0x0c8f, 0x0ca0, }, }, { // fr @@ -5482,7 +5840,7 @@ var langHeaders = [252]header{ { // fr-BE "gujaratisame du Nordfranco-provençalancien haut-allemandgotiqueaosame du" + " Sudsame de Lulesame d’Inarisame skolt", - []uint16{ // 517 elements + []uint16{ // 519 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -5524,10 +5882,10 @@ var langHeaders = [252]header{ 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, - 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0025, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, - 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0039, 0x0039, 0x0039, - 0x0039, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0039, 0x0039, + 0x0039, 0x0039, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, // Entry 140 - 17F 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, @@ -5545,7 +5903,7 @@ var langHeaders = [252]header{ 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, - 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, + 0x0040, 0x0040, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, // Entry 1C0 - 1FF 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, @@ -5556,7 +5914,7 @@ var langHeaders = [252]header{ 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, // Entry 200 - 23F - 0x0042, 0x004d, 0x0059, 0x0067, 0x0071, + 0x0042, 0x0042, 0x0042, 0x004d, 0x0059, 0x0067, 0x0071, }, }, { // fr-CA @@ -5565,7 +5923,7 @@ var langHeaders = [252]header{ }, { // fr-CH "goudjratiallemand de Pennsylvaniekurde méridional", - []uint16{ // 500 elements + []uint16{ // 502 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -5631,12 +5989,12 @@ var langHeaders = [252]header{ 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, // Entry 1C0 - 1FF 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, - 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0021, - 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, - 0x0021, 0x0021, 0x0021, 0x0032, + 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0032, }, }, { // fur @@ -5662,7 +6020,7 @@ var langHeaders = [252]header{ "êsinglês britanicingles merecanspagnûl de Americhe Latinespagnûl ib" + "ericfrancês dal Canadefrancês de Svuizareflamantportughês brasilianp" + "ortughês ibericmoldâfcinês semplificâtcinês tradizionâl", - []uint16{ // 613 elements + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0004, 0x000c, 0x0013, 0x001c, 0x001c, 0x0022, 0x002b, 0x002f, 0x0037, 0x003b, 0x0042, 0x004d, 0x004d, 0x0056, 0x005c, @@ -5700,14 +6058,14 @@ var langHeaders = [252]header{ 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, // Entry 100 - 13F - 0x03fc, 0x0402, 0x0402, 0x0402, 0x0402, 0x0402, 0x0402, 0x0402, - 0x0402, 0x0402, 0x0408, 0x0408, 0x0408, 0x0408, 0x0408, 0x0408, + 0x03fc, 0x03fc, 0x0402, 0x0402, 0x0402, 0x0402, 0x0402, 0x0402, + 0x0402, 0x0402, 0x0402, 0x0408, 0x0408, 0x0408, 0x0408, 0x0408, 0x0408, 0x0408, 0x0408, 0x0408, 0x0408, 0x0408, 0x0408, 0x0408, - 0x0408, 0x0416, 0x0416, 0x0416, 0x0416, 0x0416, 0x0416, 0x0416, - 0x0416, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x042b, 0x042b, - 0x042b, 0x042b, 0x0431, 0x0431, 0x0431, 0x0431, 0x0431, 0x0431, + 0x0408, 0x0408, 0x0416, 0x0416, 0x0416, 0x0416, 0x0416, 0x0416, + 0x0416, 0x0416, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x042b, + 0x042b, 0x042b, 0x042b, 0x0431, 0x0431, 0x0431, 0x0431, 0x0431, 0x0431, 0x0431, 0x0431, 0x0431, 0x0431, 0x0431, 0x0431, 0x0431, - 0x0431, 0x0436, 0x0436, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, + 0x0431, 0x0431, 0x0436, 0x0436, 0x0441, 0x0441, 0x0441, 0x0441, // Entry 140 - 17F 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, @@ -5716,40 +6074,40 @@ var langHeaders = [252]header{ 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, 0x0441, - 0x0441, 0x0441, 0x0441, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, + 0x0441, 0x0441, 0x0441, 0x0441, 0x0446, 0x0446, 0x0446, 0x0446, // Entry 180 - 1BF 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, 0x0446, - 0x0446, 0x0457, 0x0457, 0x0460, 0x0460, 0x0460, 0x0460, 0x0460, - 0x0460, 0x0460, 0x0469, 0x0469, 0x0473, 0x0473, 0x0473, 0x0473, - 0x0473, 0x0473, 0x0473, 0x0473, 0x0483, 0x0483, 0x0483, 0x0496, + 0x0446, 0x0446, 0x0446, 0x0457, 0x0457, 0x0460, 0x0460, 0x0460, + 0x0460, 0x0460, 0x0460, 0x0460, 0x0469, 0x0469, 0x0473, 0x0473, + 0x0473, 0x0473, 0x0473, 0x0473, 0x0473, 0x0473, 0x0483, 0x0483, // Entry 1C0 - 1FF - 0x0496, 0x0496, 0x0496, 0x0496, 0x0496, 0x0496, 0x0496, 0x04a1, - 0x04a1, 0x04a1, 0x04a1, 0x04ab, 0x04ab, 0x04ab, 0x04ab, 0x04ab, - 0x04ab, 0x04b8, 0x04b8, 0x04b8, 0x04b8, 0x04b8, 0x04b8, 0x04b8, - 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, + 0x0483, 0x0496, 0x0496, 0x0496, 0x0496, 0x0496, 0x0496, 0x0496, + 0x0496, 0x04a1, 0x04a1, 0x04a1, 0x04a1, 0x04ab, 0x04ab, 0x04ab, + 0x04ab, 0x04ab, 0x04ab, 0x04b8, 0x04b8, 0x04b8, 0x04b8, 0x04b8, + 0x04b8, 0x04b8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, 0x04c8, - 0x04d0, 0x04d7, 0x04d7, 0x04d7, 0x04d7, 0x04d7, 0x04d7, 0x04d7, - 0x04d7, 0x04e6, 0x04e6, 0x04e6, 0x04e6, 0x04e6, 0x04e6, 0x04e6, + 0x04c8, 0x04c8, 0x04d0, 0x04d7, 0x04d7, 0x04d7, 0x04d7, 0x04d7, + 0x04d7, 0x04d7, 0x04d7, 0x04e6, 0x04e6, 0x04e6, 0x04e6, 0x04e6, // Entry 200 - 23F 0x04e6, 0x04e6, 0x04e6, 0x04e6, 0x04e6, 0x04e6, 0x04e6, 0x04e6, - 0x04e6, 0x04e6, 0x04e6, 0x04e6, 0x04e6, 0x04ed, 0x04ed, 0x04ed, - 0x04ed, 0x04ed, 0x04ed, 0x04ed, 0x04ed, 0x04ed, 0x04f2, 0x04f2, + 0x04e6, 0x04e6, 0x04e6, 0x04e6, 0x04e6, 0x04e6, 0x04e6, 0x04ed, + 0x04ed, 0x04ed, 0x04ed, 0x04ed, 0x04ed, 0x04ed, 0x04ed, 0x04ed, + 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04f2, - 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04f2, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, // Entry 240 - 27F 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, 0x04ff, - 0x0510, 0x0526, 0x0538, 0x0548, 0x0558, 0x0566, 0x0581, 0x0590, - 0x0590, 0x0590, 0x05a3, 0x05b7, 0x05b7, 0x05be, 0x05d2, 0x05e3, - 0x05ea, 0x05ea, 0x05ea, 0x05fd, 0x0610, + 0x04ff, 0x04ff, 0x0510, 0x0526, 0x0538, 0x0548, 0x0558, 0x0566, + 0x0581, 0x0590, 0x0590, 0x0590, 0x05a3, 0x05b7, 0x05b7, 0x05be, + 0x05d2, 0x05e3, 0x05ea, 0x05ea, 0x05ea, 0x05fd, 0x0610, }, }, { // fy @@ -5758,62 +6116,62 @@ var langHeaders = [252]header{ "aBengaalskTibetaanskBretonskBosnyskKatalaanskTsjetsjeenskChamorroKor" + "sikaanskCreeTsjechyskKerkslavyskTsjoevasjyskWelskDeenskDútskDivehiDz" + "ongkhaEweGryksIngelskEsperantoSpaanskEstlânskBaskyskPerzyskFulahFins" + - "kFijyskFaeröerskFrânskWest-FryskIerskSchotsk GaelicGalisyskGuaraníGu" + - "jaratiManksHausaHebreeuwskHindiHiri MotuKroatyskHaïtiaanskHongaarskA" + - "rmeenskHereroInterlinguaYndonezyskInterlingueIgboSichuan YiInupiaqId" + - "oYslânsItaliaanskInuktitutJapansJavaanskGeorgyskKongoKikuyuKuanyamaK" + - "azachsGrienlânsKhmerKannadaKoreaanskKanuriKasjmiriKoerdyskKomiCornis" + - "hKirgizyskLatynLuxemburgsGandaLimburgsLingalaLaotiaanskLitouwsLuba-K" + - "atangaLetlânsMalagasyskMarshalleesMaoriMacedonyskMalayalamMongoolsMa" + - "rathiMaleisMalteesBirmeesNauruaanskNoard-NdbeleNepaleesNdongaNederlâ" + - "nskNoors - NynorskNoors - BokmålSûd-NdbeleNavajoNyanjaOccitaanskOjib" + - "waOromoOdiaOssetyskPunjabiPaliPoalskPasjtoePortugeeskQuechuaReto-Rom" + - "aanskKirundiRoemeenskRussyskKinyarwandaSanskrietSardinyskSindhiNoard" + - "-SamyskSangoSingaleesSlowaaksSloveenskSamoaanskShonaSomalyskAlbanees" + - "kServyskSwaziSûd-SothoSoendaneeskZweedsSwahiliTamilTeluguTadzjieksTh" + - "aisTigrinyaTurkmeensTswanaTongaanskTurksTsongaTataarsTahityskOeigoer" + - "sOekraïensUrduOezbeeksVendaVietnameesVolapükWaalsWolofXhosaJiddyskYo" + - "rubaZhuangSineeskZuluAtjeeskAkoliAdangmeAdygheAfrihiliAghemAinuAkkad" + - "yskAleutSûd-AltaïskâldingelskAngikaArameeskAraukaanskArapahoArawakAs" + - "uAsturyskAwadhiBaloetsjyskBalineeskBasaBamounGhomala’BejaBembaBenaBa" + - "futBhojpuriBikolBiniKomSiksikaBrajBodoAkooseBuriatBugineeskBuluBlinM" + - "edumbaKaddoKaribyskCayugaAtsamCebuanoChigaChibchaChagataiChuukeeskMa" + - "riChinook-jargonChoctawChipewyanCherokeeCheyenneSoranîKoptyskKrim-Ta" + - "taarskKasjoebyskDakotaDargwaTaitaDelawareSlaveDogribDinkaZarmaDogriN" + - "edersorbyskDualaMiddelnederlânskJola-FonyiDyulaDazagaEmbuEfikAldegyp" + - "tyskEkajukElamityskMiddelingelskEwondoFangFilipynskFonMiddelfrânskAl" + - "dfrânskNoard-FryskEast-FryskFriulyskGaGayoGbayaGeezGilberteeskMiddel" + - "heechdútskAlsheechdútskGondiGorontaloGothyskGreboAldgryksSwitsers Dú" + - "tskGusiiGwichʼinHaidaHawaïaanskHiligaynonHettityskHmongOppersorbyskH" + - "upaIbanIbibioIlokoIngoesjLojbanNgombaMachameJudeo-PerzyskJudeo-Araby" + - "skKarakalpaksKabyleKachinJjuKambaKawiKabardyskKanembuTyapMakondeKaap" + - "verdysk CreoolsKoroKhasiKhotaneeskKoyra ChiiniKakoKalenjinKimbunduKo" + - "nkaniKosraeaanskKpelleKarachay-BalkarKarelyskKurukhShambalaBafiaKöls" + - "chKoemuksKutenaiLadinoLangiLahndaLambaLezgyskLakotaMongoLoziLuba-Lul" + - "uaLuisenoLundaLuoLushaiLuyiaMadureesMafaMagahiMaithiliMakassaarsMand" + - "ingoMasaiMabaMokshaMandarMendeMeruMorisyenMiddeliersMakhuwa-MeettoMe" + - "ta’Mi’kmaqMinangkabauMantsjoeManipoeriMohawkMossiMundangMeardere tal" + - "enCreekMirandeesMarwariMyeneErzjaNapolitaanskNamaLaagduitsNewariNias" + - "NiueaanskNgumbaNgiemboonNogaiAldnoarskN’koNoard-SothoNuerKlassiek Ne" + - "wariNyamweziNyankoleNyoroNzimaOsageOttomaansk-TurksPangasinanPahlavi" + - "PampangaPapiamentsPalauaanskAldperzyskFoenisyskPohnpeiaanskAldproven" + - "çaalsRajasthaniRapanuiRarotonganRomboRomaniAromaniaanskRwaSandaweJa" + - "koetsSamaritaansk-ArameeskSamburuSasakSantaliNgambaySanguSiciliaansk" + - "SchotsSenecaSenaSelkupKoyraboro SenniAldyrskTashelhiytShanTsjadysk A" + - "rabyskSidamoSûd-SamyskLule SamiInari SamiSkolt SamiSoninkeSogdyskSra" + - "nantongoSererSahoSukumaSoesoeSoemeryskShimaoreKlassiek SyryskSyryskT" + - "imneTesoTerenoTetunTigreTivTokelausKlingonTlingitTamashekNyasa Tonga" + - "Tok PisinTarokoTsimshianToemboekaTuvaluaanskTasawaqTuvinyskTamazight" + - " (Sintraal-Marokko)OedmoertsOegarityskUmbunduRootVaiVotyskVunjoWalse" + - "rWalamoWarayWashoKalmykSogaYaoYapeesYangbenYembaKantoneeskZapotecBli" + - "ssymbolenZenagaStandert Marokkaanske TamazightZuniGjin linguïstyske " + - "ynhâldZazaModern standert ArabyskEastenryks DútskSwitsersk Heechdúts" + - "kAustralysk IngelskKanadeesk IngelskBritsk IngelskAmerikaansk Ingels" + - "kLatynsk-Amerikaansk SpaanskEuropeesk SpaanskMeksikaansk SpaanskKana" + - "deesk FrânskSwitserse FrânskVlaamsBrazyljaansk PortugeesEuropees Por" + - "tugeesMoldavyskServokroatyskCongo SwahiliFerienfâldich SineeskTradis" + - "joneel Sineesk", - []uint16{ // 613 elements + "kFijyskFaeröerskFrânskFryskIerskSchotsk GaelicGalisyskGuaraníGujarat" + + "iManksHausaHebreeuwskHindiHiri MotuKroatyskHaïtiaanskHongaarskArmeen" + + "skHereroInterlinguaYndonezyskInterlingueIgboSichuan YiInupiaqIdoYslâ" + + "nsItaliaanskInuktitutJapansJavaanskGeorgyskKongoKikuyuKuanyamaKazach" + + "sGrienlânsKhmerKannadaKoreaanskKanuriKasjmiriKoerdyskKomiCornishKirg" + + "izyskLatynLuxemburgsGandaLimburgsLingalaLaotiaanskLitouwsLuba-Katang" + + "aLetlânsMalagasyskMarshalleesMaoriMacedonyskMalayalamMongoolsMarathi" + + "MaleisMalteesBirmeesNauruaanskNoard-NdbeleNepaleesNdongaNederlânskNo" + + "ors - NynorskNoors - BokmålSûd-NdbeleNavajoNyanjaOccitaanskOjibwaOro" + + "moOdiaOssetyskPunjabiPaliPoalskPasjtoePortugeeskQuechuaReto-Romaansk" + + "KirundiRoemeenskRussyskKinyarwandaSanskrietSardinyskSindhiNoard-Samy" + + "skSangoSingaleesSlowaaksSloveenskSamoaanskShonaSomalyskAlbaneeskServ" + + "yskSwaziSûd-SothoSoendaneeskZweedsSwahiliTamilTeluguTadzjieksThaisTi" + + "grinyaTurkmeensTswanaTongaanskTurksTsongaTataarsTahityskOeigoersOekr" + + "aïensUrduOezbeeksVendaVietnameesVolapükWaalsWolofXhosaJiddyskYorubaZ" + + "huangSineeskZuluAtjeeskAkoliAdangmeAdygheAfrihiliAghemAinuAkkadyskAl" + + "eutSûd-AltaïskâldingelskAngikaArameeskAraukaanskArapahoArawakAsuAstu" + + "ryskAwadhiBaloetsjyskBalineeskBasaBamounGhomala’BejaBembaBenaBafutBh" + + "ojpuriBikolBiniKomSiksikaBrajBodoAkooseBuriatBugineeskBuluBlinMedumb" + + "aKaddoKaribyskCayugaAtsamCebuanoChigaChibchaChagataiChuukeeskMariChi" + + "nook-jargonChoctawChipewyanCherokeeCheyenneSoranîKoptyskKrim-Tataars" + + "kKasjoebyskDakotaDargwaTaitaDelawareSlaveDogribDinkaZarmaDogriNeders" + + "orbyskDualaMiddelnederlânskJola-FonyiDyulaDazagaEmbuEfikAldegyptyskE" + + "kajukElamityskMiddelingelskEwondoFangFilipynskFonMiddelfrânskAldfrân" + + "skNoard-FryskEast-FryskFriulyskGaGayoGbayaGeezGilberteeskMiddelheech" + + "dútskAlsheechdútskGondiGorontaloGothyskGreboAldgryksSwitsers DútskGu" + + "siiGwichʼinHaidaHawaïaanskHiligaynonHettityskHmongOppersorbyskHupaIb" + + "anIbibioIlokoIngoesjLojbanNgombaMachameJudeo-PerzyskJudeo-ArabyskKar" + + "akalpaksKabyleKachinJjuKambaKawiKabardyskKanembuTyapMakondeKaapverdy" + + "sk CreoolsKoroKhasiKhotaneeskKoyra ChiiniKakoKalenjinKimbunduKonkani" + + "KosraeaanskKpelleKarachay-BalkarKarelyskKurukhShambalaBafiaKölschKoe" + + "muksKutenaiLadinoLangiLahndaLambaLezgyskLakotaMongoLoziLuba-LuluaLui" + + "senoLundaLuoLushaiLuyiaMadureesMafaMagahiMaithiliMakassaarsMandingoM" + + "asaiMabaMokshaMandarMendeMeruMorisyenMiddeliersMakhuwa-MeettoMeta’Mi" + + "’kmaqMinangkabauMantsjoeManipoeriMohawkMossiMundangMeardere talenC" + + "reekMirandeesMarwariMyeneErzjaNapolitaanskNamaLaagduitsNewariNiasNiu" + + "eaanskNgumbaNgiemboonNogaiAldnoarskN’koNoard-SothoNuerKlassiek Newar" + + "iNyamweziNyankoleNyoroNzimaOsageOttomaansk-TurksPangasinanPahlaviPam" + + "pangaPapiamentsPalauaanskAldperzyskFoenisyskPohnpeiaanskAldprovençaa" + + "lsRajasthaniRapanuiRarotonganRomboRomaniAromaniaanskRwaSandaweJakoet" + + "sSamaritaansk-ArameeskSamburuSasakSantaliNgambaySanguSiciliaanskScho" + + "tsSenecaSenaSelkupKoyraboro SenniAldyrskTashelhiytShanTsjadysk Araby" + + "skSidamoSûd-SamyskLule SamiInari SamiSkolt SamiSoninkeSogdyskSranant" + + "ongoSererSahoSukumaSoesoeSoemeryskShimaoreKlassiek SyryskSyryskTimne" + + "TesoTerenoTetunTigreTivTokelausKlingonTlingitTamashekNyasa TongaTok " + + "PisinTarokoTsimshianToemboekaTuvaluaanskTasawaqTuvinyskTamazight (Si" + + "ntraal-Marokko)OedmoertsOegarityskUmbunduOnbekende taalVaiVotyskVunj" + + "oWalserWalamoWarayWashoKalmykSogaYaoYapeesYangbenYembaKantoneeskZapo" + + "tecBlissymbolenZenagaStandert Marokkaanske TamazightZuniGjin linguïs" + + "tyske ynhâldZazaModern standert ArabyskEastenryks DútskSwitsersk Hee" + + "chdútskAustralysk IngelskKanadeesk IngelskBritsk IngelskAmerikaansk " + + "IngelskLatynsk-Amerikaansk SpaanskEuropeesk SpaanskMeksikaansk Spaan" + + "skKanadeesk FrânskSwitserse FrânskVlaamsBrazyljaansk PortugeesEurope" + + "es PortugeesMoldavyskServokroatyskCongo SwahiliFerienfâldich Sineesk" + + "Tradisjoneel Sineesk", + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0004, 0x000d, 0x0015, 0x001f, 0x0023, 0x002b, 0x0035, 0x003c, 0x0045, 0x004c, 0x0052, 0x0061, 0x006b, 0x0076, 0x007f, @@ -5821,221 +6179,230 @@ var langHeaders = [252]header{ 0x00cd, 0x00d8, 0x00dc, 0x00e5, 0x00f0, 0x00fc, 0x0101, 0x0107, 0x010d, 0x0113, 0x011b, 0x011e, 0x0123, 0x012a, 0x0133, 0x013a, 0x0143, 0x014a, 0x0151, 0x0156, 0x015b, 0x0161, 0x016b, 0x0172, - 0x017c, 0x0181, 0x018f, 0x0197, 0x019f, 0x01a7, 0x01ac, 0x01b1, - 0x01bb, 0x01c0, 0x01c9, 0x01d1, 0x01dc, 0x01e5, 0x01ed, 0x01f3, - // Entry 40 - 7F - 0x01fe, 0x0208, 0x0213, 0x0217, 0x0221, 0x0228, 0x022b, 0x0232, - 0x023c, 0x0245, 0x024b, 0x0253, 0x025b, 0x0260, 0x0266, 0x026e, - 0x0275, 0x027f, 0x0284, 0x028b, 0x0294, 0x029a, 0x02a2, 0x02aa, - 0x02ae, 0x02b5, 0x02be, 0x02c3, 0x02cd, 0x02d2, 0x02da, 0x02e1, - 0x02eb, 0x02f2, 0x02fe, 0x0306, 0x0310, 0x031b, 0x0320, 0x032a, - 0x0333, 0x033b, 0x0342, 0x0348, 0x034f, 0x0356, 0x0360, 0x036c, - 0x0374, 0x037a, 0x0385, 0x0394, 0x03a3, 0x03ae, 0x03b4, 0x03ba, - 0x03c4, 0x03ca, 0x03cf, 0x03d3, 0x03db, 0x03e2, 0x03e6, 0x03ec, - // Entry 80 - BF - 0x03f3, 0x03fd, 0x0404, 0x0411, 0x0418, 0x0421, 0x0428, 0x0433, - 0x043c, 0x0445, 0x044b, 0x0457, 0x045c, 0x0465, 0x046d, 0x0476, - 0x047f, 0x0484, 0x048c, 0x0495, 0x049c, 0x04a1, 0x04ab, 0x04b6, - 0x04bc, 0x04c3, 0x04c8, 0x04ce, 0x04d7, 0x04dc, 0x04e4, 0x04ed, - 0x04f3, 0x04fc, 0x0501, 0x0507, 0x050e, 0x0516, 0x051e, 0x0528, - 0x052c, 0x0534, 0x0539, 0x0543, 0x054b, 0x0550, 0x0555, 0x055a, - 0x0561, 0x0567, 0x056d, 0x0574, 0x0578, 0x057f, 0x0584, 0x058b, - 0x0591, 0x0591, 0x0599, 0x059e, 0x05a2, 0x05aa, 0x05aa, 0x05af, - // Entry C0 - FF - 0x05af, 0x05bc, 0x05c7, 0x05cd, 0x05d5, 0x05df, 0x05df, 0x05e6, - 0x05e6, 0x05e6, 0x05ec, 0x05ec, 0x05ec, 0x05ef, 0x05ef, 0x05f7, - 0x05f7, 0x05fd, 0x0608, 0x0611, 0x0611, 0x0615, 0x061b, 0x061b, - 0x0625, 0x0629, 0x062e, 0x062e, 0x0632, 0x0637, 0x0637, 0x0637, - 0x063f, 0x0644, 0x0648, 0x0648, 0x064b, 0x0652, 0x0652, 0x0652, - 0x0656, 0x0656, 0x065a, 0x0660, 0x0666, 0x066f, 0x0673, 0x0677, - 0x067e, 0x0683, 0x068b, 0x0691, 0x0696, 0x069d, 0x06a2, 0x06a9, - 0x06b1, 0x06ba, 0x06be, 0x06cc, 0x06d3, 0x06dc, 0x06e4, 0x06ec, - // Entry 100 - 13F - 0x06f3, 0x06fa, 0x06fa, 0x0707, 0x0707, 0x0711, 0x0717, 0x071d, - 0x0722, 0x072a, 0x072f, 0x0735, 0x073a, 0x073f, 0x0744, 0x0750, - 0x0750, 0x0755, 0x0766, 0x0770, 0x0775, 0x077b, 0x077f, 0x0783, - 0x0783, 0x078e, 0x0794, 0x079d, 0x07aa, 0x07aa, 0x07b0, 0x07b0, - 0x07b4, 0x07bd, 0x07bd, 0x07c0, 0x07c0, 0x07cd, 0x07d7, 0x07d7, - 0x07e2, 0x07ec, 0x07f4, 0x07f6, 0x07f6, 0x07f6, 0x07fa, 0x07ff, - 0x07ff, 0x0803, 0x080e, 0x080e, 0x081f, 0x082d, 0x082d, 0x0832, - 0x083b, 0x0842, 0x0847, 0x084f, 0x085e, 0x085e, 0x085e, 0x0863, + 0x0177, 0x017c, 0x018a, 0x0192, 0x019a, 0x01a2, 0x01a7, 0x01ac, + 0x01b6, 0x01bb, 0x01c4, 0x01cc, 0x01d7, 0x01e0, 0x01e8, 0x01ee, + // Entry 40 - 7F + 0x01f9, 0x0203, 0x020e, 0x0212, 0x021c, 0x0223, 0x0226, 0x022d, + 0x0237, 0x0240, 0x0246, 0x024e, 0x0256, 0x025b, 0x0261, 0x0269, + 0x0270, 0x027a, 0x027f, 0x0286, 0x028f, 0x0295, 0x029d, 0x02a5, + 0x02a9, 0x02b0, 0x02b9, 0x02be, 0x02c8, 0x02cd, 0x02d5, 0x02dc, + 0x02e6, 0x02ed, 0x02f9, 0x0301, 0x030b, 0x0316, 0x031b, 0x0325, + 0x032e, 0x0336, 0x033d, 0x0343, 0x034a, 0x0351, 0x035b, 0x0367, + 0x036f, 0x0375, 0x0380, 0x038f, 0x039e, 0x03a9, 0x03af, 0x03b5, + 0x03bf, 0x03c5, 0x03ca, 0x03ce, 0x03d6, 0x03dd, 0x03e1, 0x03e7, + // Entry 80 - BF + 0x03ee, 0x03f8, 0x03ff, 0x040c, 0x0413, 0x041c, 0x0423, 0x042e, + 0x0437, 0x0440, 0x0446, 0x0452, 0x0457, 0x0460, 0x0468, 0x0471, + 0x047a, 0x047f, 0x0487, 0x0490, 0x0497, 0x049c, 0x04a6, 0x04b1, + 0x04b7, 0x04be, 0x04c3, 0x04c9, 0x04d2, 0x04d7, 0x04df, 0x04e8, + 0x04ee, 0x04f7, 0x04fc, 0x0502, 0x0509, 0x0511, 0x0519, 0x0523, + 0x0527, 0x052f, 0x0534, 0x053e, 0x0546, 0x054b, 0x0550, 0x0555, + 0x055c, 0x0562, 0x0568, 0x056f, 0x0573, 0x057a, 0x057f, 0x0586, + 0x058c, 0x058c, 0x0594, 0x0599, 0x059d, 0x05a5, 0x05a5, 0x05aa, + // Entry C0 - FF + 0x05aa, 0x05b7, 0x05c2, 0x05c8, 0x05d0, 0x05da, 0x05da, 0x05e1, + 0x05e1, 0x05e1, 0x05e7, 0x05e7, 0x05e7, 0x05ea, 0x05ea, 0x05f2, + 0x05f2, 0x05f8, 0x0603, 0x060c, 0x060c, 0x0610, 0x0616, 0x0616, + 0x0620, 0x0624, 0x0629, 0x0629, 0x062d, 0x0632, 0x0632, 0x0632, + 0x063a, 0x063f, 0x0643, 0x0643, 0x0646, 0x064d, 0x064d, 0x064d, + 0x0651, 0x0651, 0x0655, 0x065b, 0x0661, 0x066a, 0x066e, 0x0672, + 0x0679, 0x067e, 0x0686, 0x068c, 0x0691, 0x0691, 0x0698, 0x069d, + 0x06a4, 0x06ac, 0x06b5, 0x06b9, 0x06c7, 0x06ce, 0x06d7, 0x06df, + // Entry 100 - 13F + 0x06e7, 0x06ee, 0x06f5, 0x06f5, 0x0702, 0x0702, 0x070c, 0x0712, + 0x0718, 0x071d, 0x0725, 0x072a, 0x0730, 0x0735, 0x073a, 0x073f, + 0x074b, 0x074b, 0x0750, 0x0761, 0x076b, 0x0770, 0x0776, 0x077a, + 0x077e, 0x077e, 0x0789, 0x078f, 0x0798, 0x07a5, 0x07a5, 0x07ab, + 0x07ab, 0x07af, 0x07b8, 0x07b8, 0x07bb, 0x07bb, 0x07c8, 0x07d2, + 0x07d2, 0x07dd, 0x07e7, 0x07ef, 0x07f1, 0x07f1, 0x07f1, 0x07f5, + 0x07fa, 0x07fa, 0x07fe, 0x0809, 0x0809, 0x081a, 0x0828, 0x0828, + 0x082d, 0x0836, 0x083d, 0x0842, 0x084a, 0x0859, 0x0859, 0x0859, // Entry 140 - 17F - 0x086c, 0x0871, 0x0871, 0x087c, 0x087c, 0x0886, 0x088f, 0x0894, - 0x08a0, 0x08a0, 0x08a4, 0x08a8, 0x08ae, 0x08b3, 0x08ba, 0x08ba, - 0x08ba, 0x08c0, 0x08c6, 0x08cd, 0x08da, 0x08e7, 0x08e7, 0x08f2, - 0x08f8, 0x08fe, 0x0901, 0x0906, 0x090a, 0x0913, 0x091a, 0x091e, - 0x0925, 0x0938, 0x0938, 0x093c, 0x093c, 0x0941, 0x094b, 0x0957, - 0x0957, 0x0957, 0x095b, 0x0963, 0x096b, 0x096b, 0x0972, 0x097d, - 0x0983, 0x0992, 0x0992, 0x0992, 0x099a, 0x09a0, 0x09a8, 0x09ad, - 0x09b4, 0x09bb, 0x09c2, 0x09c8, 0x09cd, 0x09d3, 0x09d8, 0x09df, + 0x085e, 0x0867, 0x086c, 0x086c, 0x0877, 0x0877, 0x0881, 0x088a, + 0x088f, 0x089b, 0x089b, 0x089f, 0x08a3, 0x08a9, 0x08ae, 0x08b5, + 0x08b5, 0x08b5, 0x08bb, 0x08c1, 0x08c8, 0x08d5, 0x08e2, 0x08e2, + 0x08ed, 0x08f3, 0x08f9, 0x08fc, 0x0901, 0x0905, 0x090e, 0x0915, + 0x0919, 0x0920, 0x0933, 0x0933, 0x0937, 0x0937, 0x093c, 0x0946, + 0x0952, 0x0952, 0x0952, 0x0956, 0x095e, 0x0966, 0x0966, 0x096d, + 0x0978, 0x097e, 0x098d, 0x098d, 0x098d, 0x0995, 0x099b, 0x09a3, + 0x09a8, 0x09af, 0x09b6, 0x09bd, 0x09c3, 0x09c8, 0x09ce, 0x09d3, // Entry 180 - 1BF - 0x09df, 0x09df, 0x09df, 0x09e5, 0x09e5, 0x09ea, 0x09ee, 0x09ee, - 0x09ee, 0x09f8, 0x09ff, 0x0a04, 0x0a07, 0x0a0d, 0x0a12, 0x0a12, - 0x0a12, 0x0a1a, 0x0a1e, 0x0a24, 0x0a2c, 0x0a36, 0x0a3e, 0x0a43, - 0x0a47, 0x0a4d, 0x0a53, 0x0a58, 0x0a5c, 0x0a64, 0x0a6e, 0x0a7c, - 0x0a83, 0x0a8c, 0x0a97, 0x0a9f, 0x0aa8, 0x0aae, 0x0ab3, 0x0ab3, - 0x0aba, 0x0ac8, 0x0acd, 0x0ad6, 0x0add, 0x0add, 0x0ae2, 0x0ae7, - 0x0ae7, 0x0ae7, 0x0af3, 0x0af7, 0x0b00, 0x0b06, 0x0b0a, 0x0b13, - 0x0b13, 0x0b19, 0x0b22, 0x0b27, 0x0b30, 0x0b30, 0x0b36, 0x0b41, + 0x09da, 0x09da, 0x09da, 0x09da, 0x09e0, 0x09e0, 0x09e5, 0x09e5, + 0x09e9, 0x09e9, 0x09e9, 0x09f3, 0x09fa, 0x09ff, 0x0a02, 0x0a08, + 0x0a0d, 0x0a0d, 0x0a0d, 0x0a15, 0x0a19, 0x0a1f, 0x0a27, 0x0a31, + 0x0a39, 0x0a3e, 0x0a42, 0x0a48, 0x0a4e, 0x0a53, 0x0a57, 0x0a5f, + 0x0a69, 0x0a77, 0x0a7e, 0x0a87, 0x0a92, 0x0a9a, 0x0aa3, 0x0aa9, + 0x0aae, 0x0aae, 0x0ab5, 0x0ac3, 0x0ac8, 0x0ad1, 0x0ad8, 0x0ad8, + 0x0add, 0x0ae2, 0x0ae2, 0x0ae2, 0x0aee, 0x0af2, 0x0afb, 0x0b01, + 0x0b05, 0x0b0e, 0x0b0e, 0x0b14, 0x0b1d, 0x0b22, 0x0b2b, 0x0b2b, // Entry 1C0 - 1FF - 0x0b45, 0x0b54, 0x0b5c, 0x0b64, 0x0b69, 0x0b6e, 0x0b73, 0x0b83, - 0x0b8d, 0x0b94, 0x0b9c, 0x0ba6, 0x0bb0, 0x0bb0, 0x0bb0, 0x0bb0, - 0x0bb0, 0x0bba, 0x0bba, 0x0bc3, 0x0bc3, 0x0bc3, 0x0bcf, 0x0bcf, - 0x0bde, 0x0bde, 0x0bde, 0x0be8, 0x0bef, 0x0bf9, 0x0bf9, 0x0bf9, - 0x0bfe, 0x0c04, 0x0c04, 0x0c04, 0x0c04, 0x0c10, 0x0c13, 0x0c1a, - 0x0c21, 0x0c36, 0x0c3d, 0x0c42, 0x0c49, 0x0c49, 0x0c50, 0x0c55, - 0x0c60, 0x0c66, 0x0c66, 0x0c66, 0x0c6c, 0x0c70, 0x0c70, 0x0c76, - 0x0c85, 0x0c8c, 0x0c8c, 0x0c96, 0x0c9a, 0x0caa, 0x0cb0, 0x0cb0, + 0x0b31, 0x0b3c, 0x0b40, 0x0b4f, 0x0b57, 0x0b5f, 0x0b64, 0x0b69, + 0x0b6e, 0x0b7e, 0x0b88, 0x0b8f, 0x0b97, 0x0ba1, 0x0bab, 0x0bab, + 0x0bab, 0x0bab, 0x0bab, 0x0bb5, 0x0bb5, 0x0bbe, 0x0bbe, 0x0bbe, + 0x0bca, 0x0bca, 0x0bd9, 0x0bd9, 0x0bd9, 0x0be3, 0x0bea, 0x0bf4, + 0x0bf4, 0x0bf4, 0x0bf9, 0x0bff, 0x0bff, 0x0bff, 0x0bff, 0x0c0b, + 0x0c0e, 0x0c15, 0x0c1c, 0x0c31, 0x0c38, 0x0c3d, 0x0c44, 0x0c44, + 0x0c4b, 0x0c50, 0x0c5b, 0x0c61, 0x0c61, 0x0c61, 0x0c67, 0x0c6b, + 0x0c6b, 0x0c71, 0x0c80, 0x0c87, 0x0c87, 0x0c91, 0x0c95, 0x0ca5, // Entry 200 - 23F - 0x0cb0, 0x0cbb, 0x0cc4, 0x0cce, 0x0cd8, 0x0cdf, 0x0ce6, 0x0cf1, - 0x0cf6, 0x0cfa, 0x0cfa, 0x0d00, 0x0d06, 0x0d0f, 0x0d17, 0x0d26, - 0x0d2c, 0x0d2c, 0x0d2c, 0x0d31, 0x0d35, 0x0d3b, 0x0d40, 0x0d45, - 0x0d48, 0x0d50, 0x0d50, 0x0d57, 0x0d5e, 0x0d5e, 0x0d66, 0x0d71, - 0x0d7a, 0x0d7a, 0x0d80, 0x0d80, 0x0d89, 0x0d89, 0x0d92, 0x0d9d, - 0x0da4, 0x0dac, 0x0dc8, 0x0dd1, 0x0ddb, 0x0de2, 0x0de6, 0x0de9, - 0x0de9, 0x0de9, 0x0de9, 0x0de9, 0x0def, 0x0def, 0x0df4, 0x0dfa, - 0x0e00, 0x0e05, 0x0e0a, 0x0e0a, 0x0e0a, 0x0e10, 0x0e10, 0x0e14, + 0x0cab, 0x0cab, 0x0cab, 0x0cb6, 0x0cbf, 0x0cc9, 0x0cd3, 0x0cda, + 0x0ce1, 0x0cec, 0x0cf1, 0x0cf5, 0x0cf5, 0x0cfb, 0x0d01, 0x0d0a, + 0x0d12, 0x0d21, 0x0d27, 0x0d27, 0x0d27, 0x0d2c, 0x0d30, 0x0d36, + 0x0d3b, 0x0d40, 0x0d43, 0x0d4b, 0x0d4b, 0x0d52, 0x0d59, 0x0d59, + 0x0d61, 0x0d6c, 0x0d75, 0x0d75, 0x0d7b, 0x0d7b, 0x0d84, 0x0d84, + 0x0d8d, 0x0d98, 0x0d9f, 0x0da7, 0x0dc3, 0x0dcc, 0x0dd6, 0x0ddd, + 0x0deb, 0x0dee, 0x0dee, 0x0dee, 0x0dee, 0x0dee, 0x0df4, 0x0df4, + 0x0df9, 0x0dff, 0x0e05, 0x0e0a, 0x0e0f, 0x0e0f, 0x0e0f, 0x0e15, // Entry 240 - 27F - 0x0e17, 0x0e1d, 0x0e24, 0x0e29, 0x0e29, 0x0e33, 0x0e3a, 0x0e46, - 0x0e46, 0x0e4c, 0x0e6b, 0x0e6f, 0x0e89, 0x0e8d, 0x0ea4, 0x0ea4, - 0x0eb5, 0x0eca, 0x0edc, 0x0eed, 0x0efb, 0x0f0e, 0x0f29, 0x0f3a, - 0x0f4d, 0x0f4d, 0x0f5e, 0x0f6f, 0x0f6f, 0x0f75, 0x0f8b, 0x0f9d, - 0x0fa6, 0x0fb3, 0x0fc0, 0x0fd6, 0x0fea, + 0x0e15, 0x0e19, 0x0e1c, 0x0e22, 0x0e29, 0x0e2e, 0x0e2e, 0x0e38, + 0x0e3f, 0x0e4b, 0x0e4b, 0x0e51, 0x0e70, 0x0e74, 0x0e8e, 0x0e92, + 0x0ea9, 0x0ea9, 0x0eba, 0x0ecf, 0x0ee1, 0x0ef2, 0x0f00, 0x0f13, + 0x0f2e, 0x0f3f, 0x0f52, 0x0f52, 0x0f63, 0x0f74, 0x0f74, 0x0f7a, + 0x0f90, 0x0fa2, 0x0fab, 0x0fb8, 0x0fc5, 0x0fdb, 0x0fef, }, }, { // ga "AfáirisAbcáisisAivéistisAfracáinisAcáinisAmáirisAragóinisAraibisAsaimisA" + "váirisAidhmirisAsarbaiseáinisBaiscírisBealarúisisBulgáirisBioslaimis" + - "BeangáilisTibéidisBriotáinisBoisnisCatalóinisSeisnisSeamóirisCorsaic" + - "isCraísSeicisSlavais na hEaglaiseSuvaisisBreatnaisDanmhairgisGearmái" + - "nisDivéihisSeoinicisGréigisBéarlaEsperantoSpáinnisEastóinisBascaisPe" + - "irsisFuláinisFionlainnisFidsisFaróisFraincisFreaslainnis IartharachG" + - "aeilgeGaeilge na hAlbanGailísisGuaráinisGúisearáitisManainnisHásaisE" + - "abhraisHiondúisMotúis HíríCróitisCriól HáítíochUngáirisAirméinisHeir" + - "éirisInterlinguaIndinéisisInterlingueÍogbóisIniúipiaicisIdoÍoslainn" + - "isIodáilisIonúitisSeapáinisIáivisSeoirsisCongóisCiocúisCuainiáimisCa" + - "saicisKalaallisutCiméirisCannadaisCóiréisCanúirisCaismírisCoirdisCoi" + - "misCoirnisCirgisisLaidinLucsambuirgisLugandaisLiongáilisLaoisisLiotu" + - "áinisLúba-CataingisLaitvisMalagáisisMairsillisMaoraisMacadóinisMail" + - "éalaimisMongóilisMaraitisMalaeisMáltaisBurmaisNárúisNdeibéilis an T" + - "uaiscirtNeipeailisNdongaisOllainnisNua-IoruaisIoruais BokmålNdeibéil" + - "is an DeiscirtNavachóisSiséivisOcsatáinisÓisibisOraimisOirísisOiséit" + - "isPuinseáibisPáilisPolainnisPaistisPortaingéilisCeatsuaisRómainisRúi" + - "ndisRómáinisRúisisCiniaruaindisSanscraitSairdínisSindisSáimis Thuaid" + - "hSangóisSiolóinisSlóvaicisSlóivéinisSamóisSeoinisSomáilisAlbáinisSei" + - "rbisSuaisisSeasóitisSundaisSualainnisSvahaílisTamailisTeileagúisTáid" + - "sícisTéalainnisTigrinisTuircméinisSuáinisTongaisTuircisSongaisTatair" + - "isTaihítisUigiúirisÚcráinisUrdúisÚisbéiceastáinisVeindisVítneaimisVo" + - "lapükVallúnaisVolaifisCóisisGiúdaisIarúibisSiuáingisSínisSúlúisAdaig" + - "éisAidhniúisAcáidisSean-BhéarlaAramaisMapúitsisAstúirisBailísBaváir" + - "isBeimbisBuiriáitisBuiginisSeabúáinisMairisSeiricisCoptaisCaisiúibis" + - "TaitaZarmaisSorbais ÍochtarachMeán-OllainnisSean-ÉigiptisMeán-Bhéarl" + - "aFilipínisMeán-FhraincisSean-FhraincisFreaslainnis an TuaiscirtFriúi" + - "lisAetóipisMeán-Ard-GhearmáinisSean-Ard-GhearmáinisSean-GhréigisGear" + - "máinis EilvéiseachUaúisHaicéisHaváisHiondúis FhidsíHilgeanóinisHitis" + - "MongaisSorbais UachtarachHúipisIbibisIongúisLojbanIútlainnisCara-Cha" + - "lpáisConcáinisCairéilisCurúicisLaidínisPuinseáibis IartharachLiogúir" + - "isLiovóinisLombairdisMeindisMeán-GhaeilgeManapúirisMóháicisMairis Ia" + - "rtharachIlteangachaMioraindéisMarmhairisGearmáinis ÍochtarachNíobhai" + - "sSean-LochlainnisSútúis an TuaiscirtSean-PheirsisPrúisisCuitséisRoma" + - "inisArómáinisSachaisAramais ShamárachSantáilisSicilisAlbainisSean-Gh" + - "aeilgeTachelhitSáimis LuleSogdánaisSuiméirisSiricisSiléisisKlingonUd" + - "mairtisTeanga AnaithnidVeinéisisPléimeannais IartharachCailmícisCant" + - "ainisSéalainnisZúinisGan ábhar teangeolaíochAraibis ChaighdeánachGea" + - "rmáinis OstarachArd-Ghearmáinis EilvéiseachBéarla AstrálachBéarla Ce" + - "anadachBéarla BriotanachBéarla MeiriceánachSpáinnis Mheiriceá Laidin" + - "ighSpáinnis EorpachSpáinnis MheicsiceachFraincis CheanadachFraincis " + - "EilvéiseachSacsainis ÍochtarachPléimeannaisPortaingéilis na Brasaíle" + - "Portaingéilis IbéarachMoldáivisSeirbea-ChróitisSvahaílis an ChongóSí" + - "nis ShimplitheSínis Thraidisiúnta", - []uint16{ // 613 elements + "bmBeangáilisTibéidisBriotáinisBoisnisCatalóinisSeisnisSeamóirisCorsa" + + "icisCraísSeicisSlavais na hEaglaiseSuvaisisBreatnaisDanmhairgisGearm" + + "áinisDivéihisSeoiniciseeGréigisBéarlaEsperantoSpáinnisEastóinisBasc" + + "aisPeirsisFuláinisFionlainnisFidsisFaróisFraincisFreaslainnis Iartha" + + "rachGaeilgeGaeilge na hAlbanGailísisGuaráinisGúisearáitisManainnisHá" + + "saisEabhraisHiondúisMotúis HíríCróitisCriól HáítíochUngáirisAirméini" + + "sHeiréirisInterlinguaIndinéisisInterlingueÍogbóisiiIniúipiaicisIdoÍo" + + "slainnisIodáilisIonúitisSeapáinisIáivisSeoirsisCongóisCiocúisCuainiá" + + "imisCasaicisKalaallisutCiméirisCannadaisCóiréisCanúirisCaismírisCoir" + + "disCoimisCoirnisCirgisisLaidinLucsambuirgisLugandaisLiombuirgisLiong" + + "áilisLaoisisLiotuáinisLúba-CataingisLaitvisMalagáisisMairsillisMaor" + + "aisMacadóinisMailéalaimisMongóilisMaraitisMalaeisMáltaisBurmaisNárúi" + + "sNdeibéilis an TuaiscirtNeipeailisNdongaisOllainnisNua-IoruaisIoruai" + + "s BokmålNdeibéilis an DeiscirtNavachóisSiséivisOcsatáinisÓisibisOrai" + + "misOirísisOiséitisPuinseáibisPáilisPolainnisPaistisPortaingéilisCeat" + + "suaisRómainisRúindisRómáinisRúisisCiniaruaindisSanscraitSairdínisSin" + + "disSáimis ThuaidhSangóisSiolóinisSlóvaicisSlóivéinisSamóisSeoinisSom" + + "áilisAlbáinisSeirbisSuaisisSeasóitisSundaisSualainnisSvahaílisTamai" + + "lisTeileagúisTáidsícisTéalainnisTigrinisTuircméinisSuáinisTongaisTui" + + "rcisSongaisTatairisTaihítisUigiúirisÚcráinisUrdúisÚisbéiceastáinisVe" + + "indisVítneaimisVolapükVallúnaisVolaifisCóisisGiúdaisIarúibisSiuáingi" + + "sSínisSúlúisaceadaAdaigéisagqAidhniúisAcáidisalealtSean-BhéarlaanpAr" + + "amaisMapúitsisarpasaAstúirisawaBailísBaváirisbasBeimbisbezbhobinblab" + + "rxBuiriáitisBuiginisbynSeabúáiniscggchkMairischoSeiricischyCoirdis L" + + "árnachCoptaisCriól Fraincise SeselwaCaisiúibisdakdarTaitadgrZarmais" + + "Sorbais ÍochtarachduaMeán-OllainnisdyodzgebuefiSean-ÉigiptisekaMeán-" + + "BhéarlaewoFilipínisfonMeán-FhraincisSean-FhraincisFreaslainnis an Tu" + + "aiscirtFriúilisgaaSínis GanAetóipisCireabaitisMeán-Ard-GhearmáinisSe" + + "an-Ard-GhearmáinisgorSean-GhréigisGearmáinis EilvéiseachUaúisguzgwiH" + + "aicéisHaváisHiondúis FhidsíHilgeanóinisHitisMongaisSorbais Uachtarac" + + "hSínis XiangHúipisibaIbibisiloIongúisLojbanjgojmcIútlainnisCara-Chal" + + "páiskabkackajkamkbdkcgkdeKabuverdianukfokhakhqkkjklnkmbConcáiniskpek" + + "rcCairéilisCurúicisksbksfkshkumLaidínislagPuinseáibis IartharachlezL" + + "iogúirisLiovóinislktLombairdislozlrclualunluolusluymadmagmaimakmasmd" + + "fMeindismermfeMeán-GhaeilgemghmgomicminManapúirisMóháicismosMairis I" + + "artharachmuaIlteangachamusMioraindéisMarmhairismyvmznSínis Min NanNa" + + "póilisnaqGearmáinis ÍochtarachnewniaNíobhaisnmgnnhnogSean-Lochlainni" + + "snqoSútúis an TuaiscirtnusnynpagpampappaupcmSean-PheirsisPrúisisCuit" + + "séisraprarrofRomainisArómáinisrwksadSachaisAramais ShamárachsaqSantá" + + "ilissbasbpSicilisAlbainissehsesSean-GhaeilgeTachelhitshnSáimis Theas" + + "Sáimis LuleSáimis InariSáimis SkoltsnkSogdánaissrnssysukSuiméirisCom" + + "óirisSiricisSiléisistemteotettigKlingonTok PisintrvtumtvltwqtyvTama" + + "zight Atlais LáirUdmairtisumbTeanga AnaithnidvaiVeinéisisPléimeannai" + + "s IartharachvunwaewalwarwuuCailmícisxogyavybbCantainisSéalainnisTama" + + "zight Caighdeánach MharacóZúinisGan ábhar teangeolaíochzzaAraibis Ch" + + "aighdeánachGearmáinis OstarachArd-Ghearmáinis EilvéiseachBéarla Astr" + + "álachBéarla CeanadachBéarla BriotanachBéarla MeiriceánachSpáinnis M" + + "heiriceá LaidinighSpáinnis EorpachSpáinnis MheicsiceachFraincis Chea" + + "nadachFraincis EilvéiseachSacsainis ÍochtarachPléimeannaisPortaingéi" + + "lis BhrasaíleachPortaingéilis IbéarachMoldáivisSeirbea-ChróitisSvaha" + + "ílis an ChongóSínis ShimplitheSínis Thraidisiúnta", + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0008, 0x0011, 0x001b, 0x0026, 0x002e, 0x0036, 0x0040, 0x0047, 0x004e, 0x0056, 0x005f, 0x006e, 0x0078, 0x0084, 0x008e, - 0x0098, 0x0098, 0x00a3, 0x00ac, 0x00b7, 0x00be, 0x00c9, 0x00d0, - 0x00da, 0x00e3, 0x00e9, 0x00ef, 0x0103, 0x010b, 0x0114, 0x011f, - 0x012a, 0x0133, 0x013c, 0x013c, 0x0144, 0x014b, 0x0154, 0x015d, - 0x0167, 0x016e, 0x0175, 0x017e, 0x0189, 0x018f, 0x0196, 0x019e, - 0x01b5, 0x01bc, 0x01cd, 0x01d6, 0x01e0, 0x01ee, 0x01f7, 0x01fe, - 0x0206, 0x020f, 0x021d, 0x0225, 0x0237, 0x0240, 0x024a, 0x0254, - // Entry 40 - 7F - 0x025f, 0x026a, 0x0275, 0x027e, 0x027e, 0x028b, 0x028e, 0x0299, - 0x02a2, 0x02ab, 0x02b5, 0x02bc, 0x02c4, 0x02cc, 0x02d4, 0x02e0, - 0x02e8, 0x02f3, 0x02fc, 0x0305, 0x030e, 0x0317, 0x0321, 0x0328, - 0x032e, 0x0335, 0x033d, 0x0343, 0x0350, 0x0359, 0x0359, 0x0364, - 0x036b, 0x0376, 0x0385, 0x038c, 0x0397, 0x03a1, 0x03a8, 0x03b3, - 0x03c0, 0x03ca, 0x03d2, 0x03d9, 0x03e1, 0x03e8, 0x03f0, 0x0408, - 0x0412, 0x041a, 0x0423, 0x042e, 0x043d, 0x0454, 0x045e, 0x0467, - 0x0472, 0x047a, 0x0481, 0x0489, 0x0492, 0x049e, 0x04a5, 0x04ae, - // Entry 80 - BF - 0x04b5, 0x04c3, 0x04cc, 0x04d5, 0x04dd, 0x04e7, 0x04ee, 0x04fb, - 0x0504, 0x050e, 0x0514, 0x0523, 0x052b, 0x0535, 0x053f, 0x054b, - 0x0552, 0x0559, 0x0562, 0x056b, 0x0572, 0x0579, 0x0583, 0x058a, - 0x0594, 0x059e, 0x05a6, 0x05b1, 0x05bc, 0x05c7, 0x05cf, 0x05db, - 0x05e3, 0x05ea, 0x05f1, 0x05f8, 0x0600, 0x0609, 0x0613, 0x061d, - 0x0624, 0x0637, 0x063e, 0x0649, 0x0651, 0x065b, 0x0663, 0x066a, - 0x0672, 0x067b, 0x0685, 0x068b, 0x0693, 0x0693, 0x0693, 0x0693, - 0x069c, 0x069c, 0x069c, 0x069c, 0x06a6, 0x06ae, 0x06ae, 0x06ae, - // Entry C0 - FF - 0x06ae, 0x06ae, 0x06bb, 0x06bb, 0x06c2, 0x06cc, 0x06cc, 0x06cc, - 0x06cc, 0x06cc, 0x06cc, 0x06cc, 0x06cc, 0x06cc, 0x06cc, 0x06d5, - 0x06d5, 0x06d5, 0x06d5, 0x06dc, 0x06e5, 0x06e5, 0x06e5, 0x06e5, - 0x06e5, 0x06e5, 0x06ec, 0x06ec, 0x06ec, 0x06ec, 0x06ec, 0x06ec, - 0x06ec, 0x06ec, 0x06ec, 0x06ec, 0x06ec, 0x06ec, 0x06ec, 0x06ec, - 0x06ec, 0x06ec, 0x06ec, 0x06ec, 0x06f7, 0x06ff, 0x06ff, 0x06ff, - 0x06ff, 0x06ff, 0x06ff, 0x06ff, 0x06ff, 0x070b, 0x070b, 0x070b, - 0x070b, 0x070b, 0x0711, 0x0711, 0x0711, 0x0711, 0x0719, 0x0719, - // Entry 100 - 13F - 0x0719, 0x0720, 0x0720, 0x0720, 0x0720, 0x072b, 0x072b, 0x072b, - 0x0730, 0x0730, 0x0730, 0x0730, 0x0730, 0x0737, 0x0737, 0x074a, - 0x074a, 0x074a, 0x0759, 0x0759, 0x0759, 0x0759, 0x0759, 0x0759, - 0x0759, 0x0767, 0x0767, 0x0767, 0x0775, 0x0775, 0x0775, 0x0775, - 0x0775, 0x077f, 0x077f, 0x077f, 0x077f, 0x078e, 0x079c, 0x079c, - 0x07b5, 0x07b5, 0x07be, 0x07be, 0x07be, 0x07be, 0x07be, 0x07be, - 0x07be, 0x07c7, 0x07c7, 0x07c7, 0x07dd, 0x07f2, 0x07f2, 0x07f2, - 0x07f2, 0x07f2, 0x07f2, 0x0800, 0x0818, 0x081e, 0x081e, 0x081e, + 0x0098, 0x009a, 0x00a5, 0x00ae, 0x00b9, 0x00c0, 0x00cb, 0x00d2, + 0x00dc, 0x00e5, 0x00eb, 0x00f1, 0x0105, 0x010d, 0x0116, 0x0121, + 0x012c, 0x0135, 0x013e, 0x0140, 0x0148, 0x014f, 0x0158, 0x0161, + 0x016b, 0x0172, 0x0179, 0x0182, 0x018d, 0x0193, 0x019a, 0x01a2, + 0x01b9, 0x01c0, 0x01d1, 0x01da, 0x01e4, 0x01f2, 0x01fb, 0x0202, + 0x020a, 0x0213, 0x0221, 0x0229, 0x023b, 0x0244, 0x024e, 0x0258, + // Entry 40 - 7F + 0x0263, 0x026e, 0x0279, 0x0282, 0x0284, 0x0291, 0x0294, 0x029f, + 0x02a8, 0x02b1, 0x02bb, 0x02c2, 0x02ca, 0x02d2, 0x02da, 0x02e6, + 0x02ee, 0x02f9, 0x0302, 0x030b, 0x0314, 0x031d, 0x0327, 0x032e, + 0x0334, 0x033b, 0x0343, 0x0349, 0x0356, 0x035f, 0x036a, 0x0375, + 0x037c, 0x0387, 0x0396, 0x039d, 0x03a8, 0x03b2, 0x03b9, 0x03c4, + 0x03d1, 0x03db, 0x03e3, 0x03ea, 0x03f2, 0x03f9, 0x0401, 0x0419, + 0x0423, 0x042b, 0x0434, 0x043f, 0x044e, 0x0465, 0x046f, 0x0478, + 0x0483, 0x048b, 0x0492, 0x049a, 0x04a3, 0x04af, 0x04b6, 0x04bf, + // Entry 80 - BF + 0x04c6, 0x04d4, 0x04dd, 0x04e6, 0x04ee, 0x04f8, 0x04ff, 0x050c, + 0x0515, 0x051f, 0x0525, 0x0534, 0x053c, 0x0546, 0x0550, 0x055c, + 0x0563, 0x056a, 0x0573, 0x057c, 0x0583, 0x058a, 0x0594, 0x059b, + 0x05a5, 0x05af, 0x05b7, 0x05c2, 0x05cd, 0x05d8, 0x05e0, 0x05ec, + 0x05f4, 0x05fb, 0x0602, 0x0609, 0x0611, 0x061a, 0x0624, 0x062e, + 0x0635, 0x0648, 0x064f, 0x065a, 0x0662, 0x066c, 0x0674, 0x067b, + 0x0683, 0x068c, 0x0696, 0x069c, 0x06a4, 0x06a7, 0x06a7, 0x06aa, + 0x06b3, 0x06b3, 0x06b3, 0x06b6, 0x06c0, 0x06c8, 0x06c8, 0x06cb, + // Entry C0 - FF + 0x06cb, 0x06ce, 0x06db, 0x06de, 0x06e5, 0x06ef, 0x06ef, 0x06f2, + 0x06f2, 0x06f2, 0x06f2, 0x06f2, 0x06f2, 0x06f5, 0x06f5, 0x06fe, + 0x06fe, 0x0701, 0x0701, 0x0708, 0x0711, 0x0714, 0x0714, 0x0714, + 0x0714, 0x0714, 0x071b, 0x071b, 0x071e, 0x071e, 0x071e, 0x071e, + 0x0721, 0x0721, 0x0724, 0x0724, 0x0724, 0x0727, 0x0727, 0x0727, + 0x0727, 0x0727, 0x072a, 0x072a, 0x0735, 0x073d, 0x073d, 0x0740, + 0x0740, 0x0740, 0x0740, 0x0740, 0x0740, 0x0740, 0x074c, 0x074f, + 0x074f, 0x074f, 0x0752, 0x0758, 0x0758, 0x075b, 0x075b, 0x0763, + // Entry 100 - 13F + 0x0766, 0x0776, 0x077d, 0x077d, 0x077d, 0x0795, 0x07a0, 0x07a3, + 0x07a6, 0x07ab, 0x07ab, 0x07ab, 0x07ae, 0x07ae, 0x07b5, 0x07b5, + 0x07c8, 0x07c8, 0x07cb, 0x07da, 0x07dd, 0x07dd, 0x07e0, 0x07e3, + 0x07e6, 0x07e6, 0x07f4, 0x07f7, 0x07f7, 0x0805, 0x0805, 0x0808, + 0x0808, 0x0808, 0x0812, 0x0812, 0x0815, 0x0815, 0x0824, 0x0832, + 0x0832, 0x084b, 0x084b, 0x0854, 0x0857, 0x0857, 0x0861, 0x0861, + 0x0861, 0x0861, 0x086a, 0x0875, 0x0875, 0x088b, 0x08a0, 0x08a0, + 0x08a0, 0x08a3, 0x08a3, 0x08a3, 0x08b1, 0x08c9, 0x08cf, 0x08cf, // Entry 140 - 17F - 0x081e, 0x081e, 0x0826, 0x082d, 0x083e, 0x084b, 0x0850, 0x0857, - 0x0869, 0x0869, 0x0870, 0x0870, 0x0876, 0x0876, 0x087e, 0x087e, - 0x087e, 0x0884, 0x0884, 0x0884, 0x0884, 0x0884, 0x088f, 0x089d, - 0x089d, 0x089d, 0x089d, 0x089d, 0x089d, 0x089d, 0x089d, 0x089d, - 0x089d, 0x089d, 0x089d, 0x089d, 0x089d, 0x089d, 0x089d, 0x089d, - 0x089d, 0x089d, 0x089d, 0x089d, 0x089d, 0x089d, 0x08a7, 0x08a7, - 0x08a7, 0x08a7, 0x08a7, 0x08a7, 0x08b1, 0x08ba, 0x08ba, 0x08ba, - 0x08ba, 0x08ba, 0x08ba, 0x08c3, 0x08c3, 0x08da, 0x08da, 0x08da, + 0x08d2, 0x08d5, 0x08d5, 0x08dd, 0x08e4, 0x08f5, 0x0902, 0x0907, + 0x090e, 0x0920, 0x092c, 0x0933, 0x0936, 0x093c, 0x093f, 0x0947, + 0x0947, 0x0947, 0x094d, 0x0950, 0x0953, 0x0953, 0x0953, 0x095e, + 0x096c, 0x096f, 0x0972, 0x0975, 0x0978, 0x0978, 0x097b, 0x097b, + 0x097e, 0x0981, 0x098d, 0x098d, 0x0990, 0x0990, 0x0993, 0x0993, + 0x0996, 0x0996, 0x0996, 0x0999, 0x099c, 0x099f, 0x099f, 0x09a9, + 0x09a9, 0x09ac, 0x09af, 0x09af, 0x09af, 0x09b9, 0x09c2, 0x09c5, + 0x09c8, 0x09cb, 0x09ce, 0x09ce, 0x09d7, 0x09da, 0x09f1, 0x09f1, // Entry 180 - 1BF - 0x08da, 0x08e4, 0x08ee, 0x08ee, 0x08f8, 0x08f8, 0x08f8, 0x08f8, - 0x08f8, 0x08f8, 0x08f8, 0x08f8, 0x08f8, 0x08f8, 0x08f8, 0x08f8, - 0x08f8, 0x08f8, 0x08f8, 0x08f8, 0x08f8, 0x08f8, 0x08f8, 0x08f8, - 0x08f8, 0x08f8, 0x08f8, 0x08ff, 0x08ff, 0x08ff, 0x090d, 0x090d, - 0x090d, 0x090d, 0x090d, 0x090d, 0x0918, 0x0922, 0x0922, 0x0933, - 0x0933, 0x093e, 0x093e, 0x094a, 0x0954, 0x0954, 0x0954, 0x0954, - 0x0954, 0x0954, 0x0954, 0x0954, 0x096b, 0x096b, 0x096b, 0x0974, - 0x0974, 0x0974, 0x0974, 0x0974, 0x0984, 0x0984, 0x0984, 0x0999, + 0x09f4, 0x09f4, 0x09fe, 0x0a08, 0x0a0b, 0x0a15, 0x0a15, 0x0a15, + 0x0a18, 0x0a1b, 0x0a1b, 0x0a1e, 0x0a1e, 0x0a21, 0x0a24, 0x0a27, + 0x0a2a, 0x0a2a, 0x0a2a, 0x0a2d, 0x0a2d, 0x0a30, 0x0a33, 0x0a36, + 0x0a36, 0x0a39, 0x0a39, 0x0a3c, 0x0a3c, 0x0a43, 0x0a46, 0x0a49, + 0x0a57, 0x0a5a, 0x0a5d, 0x0a60, 0x0a63, 0x0a63, 0x0a6e, 0x0a78, + 0x0a7b, 0x0a8c, 0x0a8f, 0x0a9a, 0x0a9d, 0x0aa9, 0x0ab3, 0x0ab3, + 0x0ab3, 0x0ab6, 0x0ab9, 0x0ac7, 0x0ad0, 0x0ad3, 0x0aea, 0x0aed, + 0x0af0, 0x0af9, 0x0af9, 0x0afc, 0x0aff, 0x0b02, 0x0b12, 0x0b12, // Entry 1C0 - 1FF - 0x0999, 0x0999, 0x0999, 0x0999, 0x0999, 0x0999, 0x0999, 0x0999, - 0x0999, 0x0999, 0x0999, 0x0999, 0x0999, 0x0999, 0x0999, 0x0999, - 0x0999, 0x09a6, 0x09a6, 0x09a6, 0x09a6, 0x09a6, 0x09a6, 0x09ae, - 0x09ae, 0x09b7, 0x09b7, 0x09b7, 0x09b7, 0x09b7, 0x09b7, 0x09b7, - 0x09b7, 0x09bf, 0x09bf, 0x09bf, 0x09bf, 0x09ca, 0x09ca, 0x09ca, - 0x09d1, 0x09e3, 0x09e3, 0x09e3, 0x09ed, 0x09ed, 0x09ed, 0x09ed, - 0x09f4, 0x09fc, 0x09fc, 0x09fc, 0x09fc, 0x09fc, 0x09fc, 0x09fc, - 0x09fc, 0x0a09, 0x0a09, 0x0a12, 0x0a12, 0x0a12, 0x0a12, 0x0a12, + 0x0b15, 0x0b2a, 0x0b2d, 0x0b2d, 0x0b2d, 0x0b30, 0x0b30, 0x0b30, + 0x0b30, 0x0b30, 0x0b33, 0x0b33, 0x0b36, 0x0b39, 0x0b3c, 0x0b3c, + 0x0b3f, 0x0b3f, 0x0b3f, 0x0b4c, 0x0b4c, 0x0b4c, 0x0b4c, 0x0b4c, + 0x0b4c, 0x0b54, 0x0b54, 0x0b5d, 0x0b5d, 0x0b5d, 0x0b60, 0x0b63, + 0x0b63, 0x0b63, 0x0b66, 0x0b6e, 0x0b6e, 0x0b6e, 0x0b6e, 0x0b79, + 0x0b7c, 0x0b7f, 0x0b86, 0x0b98, 0x0b9b, 0x0b9b, 0x0ba5, 0x0ba5, + 0x0ba8, 0x0bab, 0x0bb2, 0x0bba, 0x0bba, 0x0bba, 0x0bba, 0x0bbd, + 0x0bbd, 0x0bbd, 0x0bc0, 0x0bcd, 0x0bcd, 0x0bd6, 0x0bd9, 0x0bd9, // Entry 200 - 23F - 0x0a12, 0x0a12, 0x0a1e, 0x0a1e, 0x0a1e, 0x0a1e, 0x0a28, 0x0a28, - 0x0a28, 0x0a28, 0x0a28, 0x0a28, 0x0a28, 0x0a32, 0x0a32, 0x0a32, - 0x0a39, 0x0a42, 0x0a42, 0x0a42, 0x0a42, 0x0a42, 0x0a42, 0x0a42, - 0x0a42, 0x0a42, 0x0a42, 0x0a49, 0x0a49, 0x0a49, 0x0a49, 0x0a49, - 0x0a49, 0x0a49, 0x0a49, 0x0a49, 0x0a49, 0x0a49, 0x0a49, 0x0a49, - 0x0a49, 0x0a49, 0x0a49, 0x0a52, 0x0a52, 0x0a52, 0x0a62, 0x0a62, - 0x0a6c, 0x0a6c, 0x0a84, 0x0a84, 0x0a84, 0x0a84, 0x0a84, 0x0a84, - 0x0a84, 0x0a84, 0x0a84, 0x0a84, 0x0a84, 0x0a8e, 0x0a8e, 0x0a8e, + 0x0bd9, 0x0bd9, 0x0bd9, 0x0be6, 0x0bf2, 0x0bff, 0x0c0c, 0x0c0f, + 0x0c19, 0x0c1c, 0x0c1c, 0x0c1f, 0x0c1f, 0x0c22, 0x0c22, 0x0c2c, + 0x0c35, 0x0c35, 0x0c3c, 0x0c45, 0x0c45, 0x0c48, 0x0c4b, 0x0c4b, + 0x0c4e, 0x0c51, 0x0c51, 0x0c51, 0x0c51, 0x0c58, 0x0c58, 0x0c58, + 0x0c58, 0x0c58, 0x0c61, 0x0c61, 0x0c64, 0x0c64, 0x0c64, 0x0c64, + 0x0c67, 0x0c6a, 0x0c6d, 0x0c70, 0x0c86, 0x0c8f, 0x0c8f, 0x0c92, + 0x0ca2, 0x0ca5, 0x0caf, 0x0caf, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, + 0x0cca, 0x0ccd, 0x0cd0, 0x0cd3, 0x0cd3, 0x0cd3, 0x0cd6, 0x0ce0, // Entry 240 - 27F - 0x0a8e, 0x0a8e, 0x0a8e, 0x0a8e, 0x0a8e, 0x0a97, 0x0a97, 0x0a97, - 0x0aa2, 0x0aa2, 0x0aa2, 0x0aa9, 0x0ac2, 0x0ac2, 0x0ad8, 0x0ad8, - 0x0aec, 0x0b09, 0x0b1b, 0x0b2c, 0x0b3e, 0x0b53, 0x0b71, 0x0b82, - 0x0b98, 0x0b98, 0x0bab, 0x0bc0, 0x0bd5, 0x0be2, 0x0bfd, 0x0c15, - 0x0c1f, 0x0c30, 0x0c45, 0x0c56, 0x0c6b, + 0x0ce0, 0x0ce3, 0x0ce3, 0x0ce3, 0x0ce6, 0x0ce9, 0x0ce9, 0x0cf2, + 0x0cf2, 0x0cf2, 0x0cfd, 0x0cfd, 0x0d1d, 0x0d24, 0x0d3d, 0x0d40, + 0x0d56, 0x0d56, 0x0d6a, 0x0d87, 0x0d99, 0x0daa, 0x0dbc, 0x0dd1, + 0x0def, 0x0e00, 0x0e16, 0x0e16, 0x0e29, 0x0e3e, 0x0e53, 0x0e60, + 0x0e7c, 0x0e94, 0x0e9e, 0x0eaf, 0x0ec4, 0x0ed5, 0x0eea, }, }, { // gd @@ -6106,18 +6473,18 @@ var langHeaders = [252]header{ "sSuraidheac ChlasaigeachSuraidheacTuluTimneTesoTerênaTetumTigreTivTo" + "kelauTsakhurKlingonTlingitTalyshTamashekNyasa TongaTok PisinTuroyoTa" + "rokoTsimshianTatiTumbukaTubhaluTasawaqCànan TuvaTamazight an Atlais " + - "MheadhanaichUdmurtUmbunduRootVaiVepsFlannrais SiarachVõroVunjoGearma" + - "iltis WallisWolayttaWarayWashoWarlpiriWuKalmykSogaYaoCànan YapYangbe" + - "nYembaNheengatuCantonaisZapotecComharran BlissCànan ZeelandZenagaTam" + - "azight Stannardach MorocoZuñiSusbaint nach eil ’na chànanZazakiNuadh" + - "-Arabais StannardachGearmailtis na h-OstaireÀrd-Ghearmailtis na h-Ei" + - "lbheiseBeurla AstràiliaBeurla ChanadaBeurla BhreatainnBeurla na h-Ai" + - "meireagaSpàinntis na h-Aimeireaga LaidinneachSpàinntis EòrpachSpàinn" + - "tis MheagsagachFraingis ChanadaFraingis EilbheiseachSagsannais Ìochd" + - "arachFlannraisPortagailis BhraisileachPortagailis EòrpachMoldobhaisS" + - "èirb-ChròthaisisKiswahili na CongoSìnis ShimplichteSìnis Thradaisea" + - "nta", - []uint16{ // 613 elements + "MheadhanaichUdmurtUmbunduCànan neo-aithnichteVaiVepsFlannrais Siarac" + + "hVõroVunjoGearmailtis WallisWolayttaWarayWashoWarlpiriWuKalmykSogaYa" + + "oCànan YapYangbenYembaNheengatuCantonaisZapotecComharran BlissCànan " + + "ZeelandZenagaTamazight Stannardach MorocoZuñiSusbaint nach eil ’na c" + + "hànanZazakiNuadh-Arabais StannardachGearmailtis na h-OstaireÀrd-Ghea" + + "rmailtis na h-EilbheiseBeurla AstràiliaBeurla ChanadaBeurla Bhreatai" + + "nnBeurla na h-AimeireagaSpàinntis na h-Aimeireaga LaidinneachSpàinnt" + + "is EòrpachSpàinntis MheagsagachFraingis ChanadaFraingis Eilbheiseach" + + "Sagsannais ÌochdarachFlannraisPortagailis BhraisileachPortagailis Eò" + + "rpachMoldobhaisSèirb-ChròthaisisKiswahili na CongoSìnis ShimplichteS" + + "ìnis Thradaiseanta", + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0004, 0x000d, 0x0017, 0x0021, 0x0025, 0x002e, 0x0037, 0x003e, 0x0045, 0x004c, 0x0052, 0x0061, 0x0068, 0x0073, 0x007c, @@ -6152,197 +6519,198 @@ var langHeaders = [252]header{ 0x0739, 0x073d, 0x0742, 0x0748, 0x074c, 0x0751, 0x0757, 0x0767, 0x076f, 0x0774, 0x0778, 0x077e, 0x0781, 0x0788, 0x0793, 0x079c, 0x07a0, 0x07a6, 0x07aa, 0x07b0, 0x07b6, 0x07c6, 0x07ca, 0x07ce, - 0x07d5, 0x07da, 0x07df, 0x07e5, 0x07ea, 0x07f1, 0x07f6, 0x07fd, - 0x0805, 0x0811, 0x0815, 0x0820, 0x0827, 0x0830, 0x0838, 0x0840, - // Entry 100 - 13F - 0x0854, 0x085b, 0x0863, 0x0874, 0x087f, 0x0889, 0x088f, 0x0895, - 0x089a, 0x08a2, 0x08a8, 0x08ae, 0x08b3, 0x08b8, 0x08bd, 0x08d1, - 0x08e2, 0x08e7, 0x08f7, 0x0901, 0x0906, 0x090c, 0x0910, 0x0914, - 0x0914, 0x0927, 0x092d, 0x0934, 0x0943, 0x0954, 0x095a, 0x0971, - 0x0975, 0x097e, 0x0988, 0x098b, 0x099d, 0x09ae, 0x09bd, 0x09c4, - 0x09db, 0x09ef, 0x09f8, 0x09fa, 0x0a00, 0x0a03, 0x0a07, 0x0a0c, - 0x0a1c, 0x0a23, 0x0a2e, 0x0a34, 0x0a4c, 0x0a62, 0x0a6d, 0x0a72, - 0x0a7b, 0x0a81, 0x0a86, 0x0a97, 0x0aaf, 0x0ab4, 0x0aba, 0x0abf, + 0x07d5, 0x07da, 0x07df, 0x07e5, 0x07ea, 0x07ea, 0x07f1, 0x07f6, + 0x07fd, 0x0805, 0x0811, 0x0815, 0x0820, 0x0827, 0x0830, 0x0838, + // Entry 100 - 13F + 0x0840, 0x0854, 0x085b, 0x0863, 0x0874, 0x087f, 0x0889, 0x088f, + 0x0895, 0x089a, 0x08a2, 0x08a8, 0x08ae, 0x08b3, 0x08b8, 0x08bd, + 0x08d1, 0x08e2, 0x08e7, 0x08f7, 0x0901, 0x0906, 0x090c, 0x0910, + 0x0914, 0x0914, 0x0927, 0x092d, 0x0934, 0x0943, 0x0954, 0x095a, + 0x0971, 0x0975, 0x097e, 0x0988, 0x098b, 0x099d, 0x09ae, 0x09bd, + 0x09c4, 0x09db, 0x09ef, 0x09f8, 0x09fa, 0x0a00, 0x0a03, 0x0a07, + 0x0a0c, 0x0a1c, 0x0a23, 0x0a2e, 0x0a34, 0x0a4c, 0x0a62, 0x0a6d, + 0x0a72, 0x0a7b, 0x0a81, 0x0a86, 0x0a97, 0x0aaf, 0x0ab4, 0x0aba, // Entry 140 - 17F - 0x0ac8, 0x0acd, 0x0ad2, 0x0ae2, 0x0af5, 0x0aff, 0x0b09, 0x0b0e, - 0x0b21, 0x0b26, 0x0b2a, 0x0b2e, 0x0b34, 0x0b39, 0x0b3f, 0x0b3f, - 0x0b5b, 0x0b61, 0x0b67, 0x0b6e, 0x0b7e, 0x0b8e, 0x0b8e, 0x0b99, - 0x0b9f, 0x0ba5, 0x0ba8, 0x0bad, 0x0bb1, 0x0bba, 0x0bc1, 0x0bc5, - 0x0bcc, 0x0bd8, 0x0bdf, 0x0be3, 0x0beb, 0x0bf0, 0x0bfd, 0x0c09, - 0x0c0f, 0x0c18, 0x0c1c, 0x0c24, 0x0c2c, 0x0c38, 0x0c3f, 0x0c3f, - 0x0c45, 0x0c54, 0x0c58, 0x0c61, 0x0c6b, 0x0c71, 0x0c79, 0x0c7e, - 0x0c92, 0x0c97, 0x0c9e, 0x0ca4, 0x0ca9, 0x0caf, 0x0cb4, 0x0cbc, + 0x0abf, 0x0ac8, 0x0acd, 0x0ad2, 0x0ae2, 0x0af5, 0x0aff, 0x0b09, + 0x0b0e, 0x0b21, 0x0b26, 0x0b2a, 0x0b2e, 0x0b34, 0x0b39, 0x0b3f, + 0x0b3f, 0x0b5b, 0x0b61, 0x0b67, 0x0b6e, 0x0b7e, 0x0b8e, 0x0b8e, + 0x0b99, 0x0b9f, 0x0ba5, 0x0ba8, 0x0bad, 0x0bb1, 0x0bba, 0x0bc1, + 0x0bc5, 0x0bcc, 0x0bd8, 0x0bdf, 0x0be3, 0x0beb, 0x0bf0, 0x0bfd, + 0x0c09, 0x0c0f, 0x0c18, 0x0c1c, 0x0c24, 0x0c2c, 0x0c38, 0x0c3f, + 0x0c3f, 0x0c45, 0x0c54, 0x0c58, 0x0c61, 0x0c6b, 0x0c71, 0x0c79, + 0x0c7e, 0x0c92, 0x0c97, 0x0c9e, 0x0ca4, 0x0ca9, 0x0caf, 0x0cb4, // Entry 180 - 1BF - 0x0cce, 0x0cd8, 0x0cd8, 0x0ce0, 0x0cea, 0x0cef, 0x0cf3, 0x0d01, - 0x0d01, 0x0d0b, 0x0d13, 0x0d18, 0x0d1b, 0x0d1f, 0x0d24, 0x0d39, - 0x0d3c, 0x0d4a, 0x0d4e, 0x0d54, 0x0d5c, 0x0d63, 0x0d6b, 0x0d71, - 0x0d75, 0x0d7b, 0x0d81, 0x0d86, 0x0d8a, 0x0d92, 0x0da2, 0x0db0, - 0x0db7, 0x0dc0, 0x0dcb, 0x0dd1, 0x0dd9, 0x0ddf, 0x0de4, 0x0df1, - 0x0df8, 0x0e05, 0x0e0a, 0x0e14, 0x0e1b, 0x0e23, 0x0e28, 0x0e2d, - 0x0e38, 0x0e3f, 0x0e4f, 0x0e53, 0x0e6a, 0x0e70, 0x0e74, 0x0e7f, - 0x0e86, 0x0e8c, 0x0e95, 0x0e9a, 0x0eab, 0x0eb1, 0x0eb7, 0x0ec7, + 0x0cbc, 0x0cce, 0x0cd8, 0x0cd8, 0x0ce0, 0x0cea, 0x0cef, 0x0cef, + 0x0cf3, 0x0d01, 0x0d01, 0x0d0b, 0x0d13, 0x0d18, 0x0d1b, 0x0d1f, + 0x0d24, 0x0d39, 0x0d3c, 0x0d4a, 0x0d4e, 0x0d54, 0x0d5c, 0x0d63, + 0x0d6b, 0x0d71, 0x0d75, 0x0d7b, 0x0d81, 0x0d86, 0x0d8a, 0x0d92, + 0x0da2, 0x0db0, 0x0db7, 0x0dc0, 0x0dcb, 0x0dd1, 0x0dd9, 0x0ddf, + 0x0de4, 0x0df1, 0x0df8, 0x0e05, 0x0e0a, 0x0e14, 0x0e1b, 0x0e23, + 0x0e28, 0x0e2d, 0x0e38, 0x0e3f, 0x0e4f, 0x0e53, 0x0e6a, 0x0e70, + 0x0e74, 0x0e7f, 0x0e86, 0x0e8c, 0x0e95, 0x0e9a, 0x0eab, 0x0eb1, // Entry 1C0 - 1FF - 0x0ecb, 0x0ede, 0x0ee6, 0x0eee, 0x0ef3, 0x0ef8, 0x0efd, 0x0f0e, - 0x0f18, 0x0f1f, 0x0f27, 0x0f31, 0x0f3a, 0x0f40, 0x0f52, 0x0f6b, - 0x0f77, 0x0f85, 0x0f85, 0x0f8d, 0x0f98, 0x0f98, 0x0fa6, 0x0fad, - 0x0fbe, 0x0fc9, 0x0fe5, 0x0fef, 0x0ff7, 0x1007, 0x100f, 0x100f, - 0x1014, 0x101c, 0x101c, 0x1021, 0x1028, 0x1031, 0x1034, 0x103b, - 0x1040, 0x1055, 0x105c, 0x1061, 0x1068, 0x1072, 0x1079, 0x107e, - 0x1085, 0x108b, 0x1094, 0x10a5, 0x10ab, 0x10af, 0x10b3, 0x10b9, - 0x10c8, 0x10d6, 0x10d6, 0x10df, 0x10e3, 0x10f3, 0x10f9, 0x10f9, + 0x0eb7, 0x0ec7, 0x0ecb, 0x0ede, 0x0ee6, 0x0eee, 0x0ef3, 0x0ef8, + 0x0efd, 0x0f0e, 0x0f18, 0x0f1f, 0x0f27, 0x0f31, 0x0f3a, 0x0f40, + 0x0f52, 0x0f6b, 0x0f77, 0x0f85, 0x0f85, 0x0f8d, 0x0f98, 0x0f98, + 0x0fa6, 0x0fad, 0x0fbe, 0x0fc9, 0x0fe5, 0x0fef, 0x0ff7, 0x1007, + 0x100f, 0x100f, 0x1014, 0x101c, 0x101c, 0x1021, 0x1028, 0x1031, + 0x1034, 0x103b, 0x1040, 0x1055, 0x105c, 0x1061, 0x1068, 0x1072, + 0x1079, 0x107e, 0x1085, 0x108b, 0x1094, 0x10a5, 0x10ab, 0x10af, + 0x10b3, 0x10b9, 0x10c8, 0x10d6, 0x10d6, 0x10df, 0x10e3, 0x10f3, // Entry 200 - 23F - 0x1100, 0x1110, 0x111c, 0x1129, 0x1136, 0x113d, 0x113d, 0x1149, - 0x114e, 0x1152, 0x1152, 0x1158, 0x115c, 0x1168, 0x1170, 0x1187, - 0x1191, 0x1191, 0x1195, 0x119a, 0x119e, 0x11a5, 0x11aa, 0x11af, - 0x11b2, 0x11b9, 0x11c0, 0x11c7, 0x11ce, 0x11d4, 0x11dc, 0x11e7, - 0x11f0, 0x11f6, 0x11fc, 0x11fc, 0x1205, 0x1209, 0x1210, 0x1217, - 0x121e, 0x1229, 0x1249, 0x124f, 0x124f, 0x1256, 0x125a, 0x125d, - 0x125d, 0x1261, 0x1272, 0x1272, 0x1272, 0x1277, 0x127c, 0x128e, - 0x1296, 0x129b, 0x12a0, 0x12a8, 0x12aa, 0x12b0, 0x12b0, 0x12b4, + 0x10f9, 0x10f9, 0x1100, 0x1110, 0x111c, 0x1129, 0x1136, 0x113d, + 0x113d, 0x1149, 0x114e, 0x1152, 0x1152, 0x1158, 0x115c, 0x1168, + 0x1170, 0x1187, 0x1191, 0x1191, 0x1195, 0x119a, 0x119e, 0x11a5, + 0x11aa, 0x11af, 0x11b2, 0x11b9, 0x11c0, 0x11c7, 0x11ce, 0x11d4, + 0x11dc, 0x11e7, 0x11f0, 0x11f6, 0x11fc, 0x11fc, 0x1205, 0x1209, + 0x1210, 0x1217, 0x121e, 0x1229, 0x1249, 0x124f, 0x124f, 0x1256, + 0x126b, 0x126e, 0x126e, 0x1272, 0x1283, 0x1283, 0x1283, 0x1288, + 0x128d, 0x129f, 0x12a7, 0x12ac, 0x12b1, 0x12b9, 0x12bb, 0x12c1, // Entry 240 - 27F - 0x12b7, 0x12c1, 0x12c8, 0x12cd, 0x12d6, 0x12df, 0x12e6, 0x12f5, - 0x1303, 0x1309, 0x1325, 0x132a, 0x1349, 0x134f, 0x1368, 0x1368, - 0x1380, 0x13a0, 0x13b1, 0x13bf, 0x13d0, 0x13e6, 0x140c, 0x141f, - 0x1435, 0x1435, 0x1445, 0x145a, 0x1470, 0x1479, 0x1491, 0x14a5, - 0x14af, 0x14c2, 0x14d4, 0x14e6, 0x14fa, + 0x12c1, 0x12c5, 0x12c8, 0x12d2, 0x12d9, 0x12de, 0x12e7, 0x12f0, + 0x12f7, 0x1306, 0x1314, 0x131a, 0x1336, 0x133b, 0x135a, 0x1360, + 0x1379, 0x1379, 0x1391, 0x13b1, 0x13c2, 0x13d0, 0x13e1, 0x13f7, + 0x141d, 0x1430, 0x1446, 0x1446, 0x1456, 0x146b, 0x1481, 0x148a, + 0x14a2, 0x14b6, 0x14c0, 0x14d3, 0x14e5, 0x14f7, 0x150b, }, }, { // gl - "afarabkhazoafricánerakánamáricoaragonésárabeasamésavaraimaráacerbaixanob" + - "askirbielorrusobúlgarobislamabambarobengalítibetanobretónbosníacocat" + - "alánchechenochamorrocorsochecoeslavo eclesiásticochuvashgalésdinamar" + - "quésalemándivehidzongkhaewegregoinglésesperantoespañolestonianoéusca" + - "ropersafulafinésfidxianoferoésfrancésfrisónirlandésgaélico escocésga" + - "legoguaraníguxaratímanxhausahebreohindicroatahaitianohúngaroarmenioh" + - "ererointerlinguaindonesioiboyi sichuanésidoislandésitalianoinuktitut" + - "xaponésxavanésxeorxianokongokikuyukuanyamacasacogroenlandés occident" + - "alkhmercanaréscoreanocanuricachemirkurdokomicórnicoquirguizlatínluxe" + - "mburguésgandalimburguéslingalalaosianolituanoluba-katangaletónmalgax" + - "emarshalésmaorímacedoniomalabarmongolmarathimalaiomaltésbirmanonauru" + - "ndebele do nortenepalíndongaholandésnoruegués nynorsknoruegués bokma" + - "lndebele do surnavajochewaoccitanooromooriyaosetiopanxabianopolacopa" + - "shtuportuguésquechuaromancherundiromanésrusoruandéssánscritosardosin" + - "dhisaami do nortesangocingaléseslovacoeslovenosamoanoshonasomalíalba" + - "nésserbioswatisesothosundanéssuecosuahilitámiltelugútaxicotailandést" + - "igriñaturcomántswanatonganésturcotsongatártarotahitianouigurucraínou" + - "rdúuzbecovendavietnamitavolapukvalónwólofxhosayiddishyorubachinészul" + - "úachinésacholíadangmeadigueoaghemainualeutianoaltai meridionalangik" + - "aarameomapuchearapahoeasuasturianoawadhibalinésbasaabembabenabaluchi" + - " occidentalbhojpuribinisiksikábodobuginésblincebuanokigachuukesemari" + - "choctawcheroquicheiénkurdo soraníseselwa (crioulo das Seixeles)dakot" + - "adargwataitadogribzarmabaixo sorabiodualajola-fonyidazagaembuefikexi" + - "pcio antigoekajukewondofilipinofonfriulianogagagauzge’ezkiribatianog" + - "orontalogrego antigoalemán suízogusiigwichʼinhawaianohiligaynonhmong" + - "alto sorbiohupaibanibibioilokoingushlojbanngombamachamekabilekachinj" + - "jukambacabardianotyapmakondecaboverdianokorokhasikoyra chiinikakokal" + - "enjinkimbundukomi permiokonkanikpellecarachaio-bálcaracareliokurukhs" + - "hambalabafiakölschkumykladinolangilezguilakotaloziluri do norteluba-" + - "lulualundaluomizoluyiamadurésmagahimaithilimakasarmasaimokshamendeme" + - "rucrioulo mauricianomakhuwa-meettometa’micmacminangkabaumanipurimoha" + - "wkmossimundangvarias linguascreekmirandéserzyamazandaranínapolitanon" + - "amabaixo alemánnewariniasniuanokwasiongiemboonnogain’kosesotho sa le" + - "boanuernyankolepangasinanpampangapapiamentopalauanopidgin nixerianop" + - "rusianoquichérapanuirarotonganoromboaromanésrwasandawesakhasamburusa" + - "ntalingambaysangusicilianoescocéskurdo meridionalsenakoyraboro senni" + - "tachelhitshansaami meridionalsaami de Lulesaami de Inarisaami de Sko" + - "ltsoninkesranan tongosahosukumacomorianosiríacotimnetesotetuntigrékl" + - "ingontok pisintarokotumbukatuvaluanotasawaqtuvanianotamazight do Mar" + - "rocos Centraludmurtoumbunduraízvaivunjowalserwolayttawaray-waraywalr" + - "piricalmucosogayangbenyembacantonéstamazight de Marrocos estándarzun" + - "isen contido lingüísticozazakiárabe estándar modernoalemán austríaco" + - "alto alemán suízoinglés australianoinglés canadianoinglés británicoi" + - "nglés dos Estados Unidosespañol latinoamericanocastelánespañol de Mé" + - "xicofrancés canadianofrancés suízobaixo saxónflamencoportugués brasi" + - "leiroportugués europeomoldavoserbocroatasuahili congoléschinés simpl" + - "ificadochinés tradicional", - []uint16{ // 613 elements - // Entry 0 - 3F - 0x0000, 0x0004, 0x000b, 0x000b, 0x0015, 0x001a, 0x0022, 0x002b, - 0x0031, 0x0038, 0x003c, 0x0043, 0x004e, 0x0054, 0x005e, 0x0066, + "afarabkhazoafrikaansakanamháricoaragonésárabeassamésavaraimaráacerbaixan" + + "obaskirbielorrusobúlgarobislamabambarobengalítibetanobretónbosníacoc" + + "atalánchechenochamorrocorsochecoeslavo eclesiásticochuvaxogalésdinam" + + "arquésalemándivehidzongkhaewegregoinglésesperantoespañolestonianoéus" + + "caropersafulafinésfidxianoferoésfrancésfrisón occidentalirlandésgaél" + + "ico escocésgalegoguaraníguxaratímanxhausahebreohindicroatacrioulo ha" + + "itianohúngaroarmeniohererointerlinguaindonesioiboyi sichuanésidoisla" + + "ndésitalianoinuktitutxaponésxavanésxeorxianokongokikuyukuanyamacasac" + + "ogroenlandéskhmercanaréscoreanocanuricachemirkurdokomicórnicokirguiz" + + "latínluxemburguésgandalimburguéslingalalaosianolituanoluba-katangale" + + "tónmalgaxemarshalésmaorímacedoniomalabarmongolmarathimalaiomaltésbir" + + "manonauruanondebele setentrionalnepalíndonganeerlandésnoruegués nyno" + + "rsknoruegués bokmålndebele meridionalnavajonyanjaoccitanooromooriyao" + + "ssetiopanxabianopolacopaxtoportuguésquechuaromancherundiromanésrusor" + + "uandéssánscritosardosindhisaami setentrionalsangocingaléseslovacoesl" + + "ovenosamoanoshonasomalíalbanésserbioswazisesothosundanéssuecosuahili" + + "támiltelugutaxicotailandéstigriñaturcomántswanatonganoturcotsongatár" + + "tarotahitianouigurucraínourdúuzbecovendavietnamitavolapukvalónwólofx" + + "osayiddishyorubachinészulúachinésacholíadangmeadigueoaghemainualeuti" + + "anoaltai meridionalangikaarameomapuchearapahoasuasturianoawadhibalin" + + "ésbasaabembabenabaluchi occidentalbhojpuribinisiksikábodobuginésbli" + + "ncebuanokigachuukesemarichoctawcherokeecheyennekurdo soraníseselwa (" + + "crioulo das Seychelles)dakotadargwataitadogribzarmabaixo sorbioduala" + + "jola-fonyidazagaembuefikexipcio antigoekajukewondofilipinofonfriulan" + + "ogagagauzge’ezkiribatianogorontalogrego antigoalemán suízogusiigwich" + + "ʼinhawaianohiligaynonhmongalto sorbiohupaibanibibioilocanoinguxoloj" + + "banngombamachamecabilakachinjjukambacabardianotyapmakondecaboverdian" + + "okorokhasikoyra chiinikakokalenjinkimbundukomi permiokonkanikpelleca" + + "rachaio-bálcaracareliokurukhshambalabafiakölschkumykladinolangilezgu" + + "iolakotaloziluri setentrionalluba-lulualundaluomizoluyiamadurésmagah" + + "imaithilimakasarmasaimokshamendemerucrioulo mauricianomakhuwa-meetto" + + "meta’micmacminangkabaumanipurimohawkmossimundangvarias linguascreekm" + + "irandéserzyamazandaranínapolitanonamabaixo alemánnewariniasniueanokw" + + "asiongiemboonnogain’kosesotho sa leboanuernyankolepangasinanpampanga" + + "papiamentopalauanopidgin nixerianoprusianoquichérapanuirarotonganoro" + + "mboaromanésrwasandawesakhasamburusantalingambaysangusicilianoescocés" + + "kurdo meridionalsenakoyraboro sennitachelhitshansaami meridionalsaam" + + "i de Lulesaami de Inarisaami skoltsoninkesranan tongosahosukumacomor" + + "ianosiríacotemnetesotetuntigréklingontok pisintarokotumbukatuvaluano" + + "tasawaqtuvanianotamazight de Marrocos centraludmurtoumbundulingua de" + + "scoñecidavaivunjowalserwolayttawaray-waraywalrpiricalmucosogayangben" + + "yembacantonéstamazight marroquí estándarzunisen contido lingüísticoz" + + "azakiárabe estándar modernoalemán austríacoalto alemán suízoinglés a" + + "ustralianoinglés canadenseinglés británicoinglés estadounidenseespañ" + + "ol de Américaespañol de Españaespañol de Méxicofrancés canadensefran" + + "cés suízobaixo saxónflamengoportugués do Brasilportugués de Portugal" + + "moldavoserbocroatasuahili congoléschinés simplificadochinés tradicio" + + "nal", + []uint16{ // 615 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x000b, 0x000b, 0x0014, 0x0018, 0x0021, 0x002a, + 0x0030, 0x0038, 0x003c, 0x0043, 0x004e, 0x0054, 0x005e, 0x0066, 0x006d, 0x0074, 0x007c, 0x0084, 0x008b, 0x0094, 0x009c, 0x00a4, 0x00ac, 0x00b1, 0x00b1, 0x00b6, 0x00ca, 0x00d1, 0x00d7, 0x00e3, 0x00ea, 0x00f0, 0x00f8, 0x00fb, 0x0100, 0x0107, 0x0110, 0x0118, 0x0121, 0x0129, 0x012e, 0x0132, 0x0138, 0x0140, 0x0147, 0x014f, - 0x0156, 0x015f, 0x0170, 0x0176, 0x017e, 0x0187, 0x018b, 0x0190, - 0x0196, 0x019b, 0x019b, 0x01a1, 0x01a9, 0x01b1, 0x01b8, 0x01be, - // Entry 40 - 7F - 0x01c9, 0x01d2, 0x01d2, 0x01d5, 0x01e2, 0x01e2, 0x01e5, 0x01ee, - 0x01f6, 0x01ff, 0x0207, 0x020f, 0x0218, 0x021d, 0x0223, 0x022b, - 0x0231, 0x0248, 0x024d, 0x0255, 0x025c, 0x0262, 0x026a, 0x026f, - 0x0273, 0x027b, 0x0283, 0x0289, 0x0296, 0x029b, 0x02a6, 0x02ad, - 0x02b5, 0x02bc, 0x02c8, 0x02ce, 0x02d5, 0x02df, 0x02e5, 0x02ee, - 0x02f5, 0x02fb, 0x0302, 0x0308, 0x030f, 0x0316, 0x031b, 0x032b, - 0x0332, 0x0338, 0x0341, 0x0353, 0x0364, 0x0372, 0x0378, 0x037d, - 0x0385, 0x0385, 0x038a, 0x038f, 0x0395, 0x039f, 0x039f, 0x03a5, - // Entry 80 - BF - 0x03ab, 0x03b5, 0x03bc, 0x03c4, 0x03c9, 0x03d1, 0x03d5, 0x03dd, - 0x03e7, 0x03ec, 0x03f2, 0x0400, 0x0405, 0x040e, 0x0416, 0x041e, - 0x0425, 0x042a, 0x0431, 0x0439, 0x043f, 0x0444, 0x044b, 0x0454, - 0x0459, 0x0460, 0x0466, 0x046d, 0x0473, 0x047d, 0x0485, 0x048e, - 0x0494, 0x049d, 0x04a2, 0x04a8, 0x04b0, 0x04b9, 0x04be, 0x04c6, - 0x04cb, 0x04d1, 0x04d6, 0x04e0, 0x04e7, 0x04ed, 0x04f3, 0x04f8, - 0x04ff, 0x0505, 0x0505, 0x050c, 0x0511, 0x0519, 0x0520, 0x0527, - 0x052e, 0x052e, 0x052e, 0x0533, 0x0537, 0x0537, 0x0537, 0x0540, - // Entry C0 - FF - 0x0540, 0x0550, 0x0550, 0x0556, 0x055c, 0x0563, 0x0563, 0x056b, - 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x056e, 0x056e, 0x0577, - 0x0577, 0x057d, 0x057d, 0x0585, 0x0585, 0x058a, 0x058a, 0x058a, - 0x058a, 0x058a, 0x058f, 0x058f, 0x0593, 0x0593, 0x0593, 0x05a5, - 0x05ad, 0x05ad, 0x05b1, 0x05b1, 0x05b1, 0x05b9, 0x05b9, 0x05b9, - 0x05b9, 0x05b9, 0x05bd, 0x05bd, 0x05bd, 0x05c5, 0x05c5, 0x05c9, - 0x05c9, 0x05c9, 0x05c9, 0x05c9, 0x05c9, 0x05d0, 0x05d4, 0x05d4, - 0x05d4, 0x05dc, 0x05e0, 0x05e0, 0x05e7, 0x05e7, 0x05ef, 0x05f6, - // Entry 100 - 13F - 0x0603, 0x0603, 0x0603, 0x0603, 0x0621, 0x0621, 0x0627, 0x062d, - 0x0632, 0x0632, 0x0632, 0x0638, 0x0638, 0x063d, 0x063d, 0x064a, - 0x064a, 0x064f, 0x064f, 0x0659, 0x0659, 0x065f, 0x0663, 0x0667, - 0x0667, 0x0675, 0x067b, 0x067b, 0x067b, 0x067b, 0x0681, 0x0681, - 0x0681, 0x0689, 0x0689, 0x068c, 0x068c, 0x068c, 0x068c, 0x068c, - 0x068c, 0x068c, 0x0695, 0x0697, 0x069d, 0x069d, 0x069d, 0x069d, - 0x069d, 0x06a4, 0x06af, 0x06af, 0x06af, 0x06af, 0x06af, 0x06af, - 0x06b8, 0x06b8, 0x06b8, 0x06c4, 0x06d2, 0x06d2, 0x06d2, 0x06d7, + 0x0161, 0x016a, 0x017b, 0x0181, 0x0189, 0x0192, 0x0196, 0x019b, + 0x01a1, 0x01a6, 0x01a6, 0x01ac, 0x01bc, 0x01c4, 0x01cb, 0x01d1, + // Entry 40 - 7F + 0x01dc, 0x01e5, 0x01e5, 0x01e8, 0x01f5, 0x01f5, 0x01f8, 0x0201, + 0x0209, 0x0212, 0x021a, 0x0222, 0x022b, 0x0230, 0x0236, 0x023e, + 0x0244, 0x0250, 0x0255, 0x025d, 0x0264, 0x026a, 0x0272, 0x0277, + 0x027b, 0x0283, 0x028a, 0x0290, 0x029d, 0x02a2, 0x02ad, 0x02b4, + 0x02bc, 0x02c3, 0x02cf, 0x02d5, 0x02dc, 0x02e6, 0x02ec, 0x02f5, + 0x02fc, 0x0302, 0x0309, 0x030f, 0x0316, 0x031d, 0x0325, 0x0339, + 0x0340, 0x0346, 0x0351, 0x0363, 0x0375, 0x0387, 0x038d, 0x0393, + 0x039b, 0x039b, 0x03a0, 0x03a5, 0x03ac, 0x03b6, 0x03b6, 0x03bc, + // Entry 80 - BF + 0x03c1, 0x03cb, 0x03d2, 0x03da, 0x03df, 0x03e7, 0x03eb, 0x03f3, + 0x03fd, 0x0402, 0x0408, 0x041a, 0x041f, 0x0428, 0x0430, 0x0438, + 0x043f, 0x0444, 0x044b, 0x0453, 0x0459, 0x045e, 0x0465, 0x046e, + 0x0473, 0x047a, 0x0480, 0x0486, 0x048c, 0x0496, 0x049e, 0x04a7, + 0x04ad, 0x04b4, 0x04b9, 0x04bf, 0x04c7, 0x04d0, 0x04d5, 0x04dd, + 0x04e2, 0x04e8, 0x04ed, 0x04f7, 0x04fe, 0x0504, 0x050a, 0x050e, + 0x0515, 0x051b, 0x051b, 0x0522, 0x0527, 0x052f, 0x0536, 0x053d, + 0x0544, 0x0544, 0x0544, 0x0549, 0x054d, 0x054d, 0x054d, 0x0556, + // Entry C0 - FF + 0x0556, 0x0566, 0x0566, 0x056c, 0x0572, 0x0579, 0x0579, 0x0580, + 0x0580, 0x0580, 0x0580, 0x0580, 0x0580, 0x0583, 0x0583, 0x058c, + 0x058c, 0x0592, 0x0592, 0x059a, 0x059a, 0x059f, 0x059f, 0x059f, + 0x059f, 0x059f, 0x05a4, 0x05a4, 0x05a8, 0x05a8, 0x05a8, 0x05ba, + 0x05c2, 0x05c2, 0x05c6, 0x05c6, 0x05c6, 0x05ce, 0x05ce, 0x05ce, + 0x05ce, 0x05ce, 0x05d2, 0x05d2, 0x05d2, 0x05da, 0x05da, 0x05de, + 0x05de, 0x05de, 0x05de, 0x05de, 0x05de, 0x05de, 0x05e5, 0x05e9, + 0x05e9, 0x05e9, 0x05f1, 0x05f5, 0x05f5, 0x05fc, 0x05fc, 0x0604, + // Entry 100 - 13F + 0x060c, 0x0619, 0x0619, 0x0619, 0x0619, 0x0639, 0x0639, 0x063f, + 0x0645, 0x064a, 0x064a, 0x064a, 0x0650, 0x0650, 0x0655, 0x0655, + 0x0661, 0x0661, 0x0666, 0x0666, 0x0670, 0x0670, 0x0676, 0x067a, + 0x067e, 0x067e, 0x068c, 0x0692, 0x0692, 0x0692, 0x0692, 0x0698, + 0x0698, 0x0698, 0x06a0, 0x06a0, 0x06a3, 0x06a3, 0x06a3, 0x06a3, + 0x06a3, 0x06a3, 0x06a3, 0x06ab, 0x06ad, 0x06b3, 0x06b3, 0x06b3, + 0x06b3, 0x06b3, 0x06ba, 0x06c5, 0x06c5, 0x06c5, 0x06c5, 0x06c5, + 0x06c5, 0x06ce, 0x06ce, 0x06ce, 0x06da, 0x06e8, 0x06e8, 0x06e8, // Entry 140 - 17F - 0x06e0, 0x06e0, 0x06e0, 0x06e8, 0x06e8, 0x06f2, 0x06f2, 0x06f7, - 0x0702, 0x0702, 0x0706, 0x070a, 0x0710, 0x0715, 0x071b, 0x071b, - 0x071b, 0x0721, 0x0727, 0x072e, 0x072e, 0x072e, 0x072e, 0x072e, - 0x0734, 0x073a, 0x073d, 0x0742, 0x0742, 0x074c, 0x074c, 0x0750, - 0x0757, 0x0763, 0x0763, 0x0767, 0x0767, 0x076c, 0x076c, 0x0778, - 0x0778, 0x0778, 0x077c, 0x0784, 0x078c, 0x0797, 0x079e, 0x079e, - 0x07a4, 0x07b6, 0x07b6, 0x07b6, 0x07bd, 0x07c3, 0x07cb, 0x07d0, - 0x07d7, 0x07dc, 0x07dc, 0x07e2, 0x07e7, 0x07e7, 0x07e7, 0x07ed, + 0x06ed, 0x06f6, 0x06f6, 0x06f6, 0x06fe, 0x06fe, 0x0708, 0x0708, + 0x070d, 0x0718, 0x0718, 0x071c, 0x0720, 0x0726, 0x072d, 0x0733, + 0x0733, 0x0733, 0x0739, 0x073f, 0x0746, 0x0746, 0x0746, 0x0746, + 0x0746, 0x074c, 0x0752, 0x0755, 0x075a, 0x075a, 0x0764, 0x0764, + 0x0768, 0x076f, 0x077b, 0x077b, 0x077f, 0x077f, 0x0784, 0x0784, + 0x0790, 0x0790, 0x0790, 0x0794, 0x079c, 0x07a4, 0x07af, 0x07b6, + 0x07b6, 0x07bc, 0x07ce, 0x07ce, 0x07ce, 0x07d5, 0x07db, 0x07e3, + 0x07e8, 0x07ef, 0x07f4, 0x07f4, 0x07fa, 0x07ff, 0x07ff, 0x07ff, // Entry 180 - 1BF - 0x07ed, 0x07ed, 0x07ed, 0x07f3, 0x07f3, 0x07f3, 0x07f7, 0x0804, - 0x0804, 0x080e, 0x080e, 0x0813, 0x0816, 0x081a, 0x081f, 0x081f, - 0x081f, 0x0827, 0x0827, 0x082d, 0x0835, 0x083c, 0x083c, 0x0841, - 0x0841, 0x0847, 0x0847, 0x084c, 0x0850, 0x0862, 0x0862, 0x0870, - 0x0877, 0x087d, 0x0888, 0x0888, 0x0890, 0x0896, 0x089b, 0x089b, - 0x08a2, 0x08b0, 0x08b5, 0x08be, 0x08be, 0x08be, 0x08be, 0x08c3, - 0x08cf, 0x08cf, 0x08d9, 0x08dd, 0x08ea, 0x08f0, 0x08f4, 0x08fa, - 0x08fa, 0x0900, 0x0909, 0x090e, 0x090e, 0x090e, 0x0914, 0x0924, + 0x0806, 0x0806, 0x0806, 0x0806, 0x080c, 0x080c, 0x080c, 0x080c, + 0x0810, 0x0821, 0x0821, 0x082b, 0x082b, 0x0830, 0x0833, 0x0837, + 0x083c, 0x083c, 0x083c, 0x0844, 0x0844, 0x084a, 0x0852, 0x0859, + 0x0859, 0x085e, 0x085e, 0x0864, 0x0864, 0x0869, 0x086d, 0x087f, + 0x087f, 0x088d, 0x0894, 0x089a, 0x08a5, 0x08a5, 0x08ad, 0x08b3, + 0x08b8, 0x08b8, 0x08bf, 0x08cd, 0x08d2, 0x08db, 0x08db, 0x08db, + 0x08db, 0x08e0, 0x08ec, 0x08ec, 0x08f6, 0x08fa, 0x0907, 0x090d, + 0x0911, 0x0918, 0x0918, 0x091e, 0x0927, 0x092c, 0x092c, 0x092c, // Entry 1C0 - 1FF - 0x0928, 0x0928, 0x0928, 0x0930, 0x0930, 0x0930, 0x0930, 0x0930, - 0x093a, 0x093a, 0x0942, 0x094c, 0x0954, 0x0954, 0x0964, 0x0964, - 0x0964, 0x0964, 0x0964, 0x0964, 0x0964, 0x0964, 0x0964, 0x096c, - 0x096c, 0x0973, 0x0973, 0x0973, 0x097a, 0x0985, 0x0985, 0x0985, - 0x098a, 0x098a, 0x098a, 0x098a, 0x098a, 0x0993, 0x0996, 0x099d, - 0x09a2, 0x09a2, 0x09a9, 0x09a9, 0x09b0, 0x09b0, 0x09b7, 0x09bc, - 0x09c5, 0x09cd, 0x09cd, 0x09dd, 0x09dd, 0x09e1, 0x09e1, 0x09e1, - 0x09f0, 0x09f0, 0x09f0, 0x09f9, 0x09fd, 0x09fd, 0x09fd, 0x09fd, + 0x0932, 0x0942, 0x0946, 0x0946, 0x0946, 0x094e, 0x094e, 0x094e, + 0x094e, 0x094e, 0x0958, 0x0958, 0x0960, 0x096a, 0x0972, 0x0972, + 0x0982, 0x0982, 0x0982, 0x0982, 0x0982, 0x0982, 0x0982, 0x0982, + 0x0982, 0x098a, 0x098a, 0x0991, 0x0991, 0x0991, 0x0998, 0x09a3, + 0x09a3, 0x09a3, 0x09a8, 0x09a8, 0x09a8, 0x09a8, 0x09a8, 0x09b1, + 0x09b4, 0x09bb, 0x09c0, 0x09c0, 0x09c7, 0x09c7, 0x09ce, 0x09ce, + 0x09d5, 0x09da, 0x09e3, 0x09eb, 0x09eb, 0x09fb, 0x09fb, 0x09ff, + 0x09ff, 0x09ff, 0x0a0e, 0x0a0e, 0x0a0e, 0x0a17, 0x0a1b, 0x0a1b, // Entry 200 - 23F - 0x09fd, 0x0a0d, 0x0a1a, 0x0a28, 0x0a36, 0x0a3d, 0x0a3d, 0x0a49, - 0x0a49, 0x0a4d, 0x0a4d, 0x0a53, 0x0a53, 0x0a53, 0x0a5c, 0x0a5c, - 0x0a64, 0x0a64, 0x0a64, 0x0a69, 0x0a6d, 0x0a6d, 0x0a72, 0x0a78, - 0x0a78, 0x0a78, 0x0a78, 0x0a7f, 0x0a7f, 0x0a7f, 0x0a7f, 0x0a7f, - 0x0a88, 0x0a88, 0x0a8e, 0x0a8e, 0x0a8e, 0x0a8e, 0x0a95, 0x0a9e, - 0x0aa5, 0x0aae, 0x0acb, 0x0ad2, 0x0ad2, 0x0ad9, 0x0ade, 0x0ae1, - 0x0ae1, 0x0ae1, 0x0ae1, 0x0ae1, 0x0ae1, 0x0ae1, 0x0ae6, 0x0aec, - 0x0af4, 0x0aff, 0x0aff, 0x0b07, 0x0b07, 0x0b0e, 0x0b0e, 0x0b12, + 0x0a1b, 0x0a1b, 0x0a1b, 0x0a2b, 0x0a38, 0x0a46, 0x0a51, 0x0a58, + 0x0a58, 0x0a64, 0x0a64, 0x0a68, 0x0a68, 0x0a6e, 0x0a6e, 0x0a6e, + 0x0a77, 0x0a77, 0x0a7f, 0x0a7f, 0x0a7f, 0x0a84, 0x0a88, 0x0a88, + 0x0a8d, 0x0a93, 0x0a93, 0x0a93, 0x0a93, 0x0a9a, 0x0a9a, 0x0a9a, + 0x0a9a, 0x0a9a, 0x0aa3, 0x0aa3, 0x0aa9, 0x0aa9, 0x0aa9, 0x0aa9, + 0x0ab0, 0x0ab9, 0x0ac0, 0x0ac9, 0x0ae6, 0x0aed, 0x0aed, 0x0af4, + 0x0b07, 0x0b0a, 0x0b0a, 0x0b0a, 0x0b0a, 0x0b0a, 0x0b0a, 0x0b0a, + 0x0b0f, 0x0b15, 0x0b1d, 0x0b28, 0x0b28, 0x0b30, 0x0b30, 0x0b37, // Entry 240 - 27F - 0x0b12, 0x0b12, 0x0b19, 0x0b1e, 0x0b1e, 0x0b27, 0x0b27, 0x0b27, - 0x0b27, 0x0b27, 0x0b46, 0x0b4a, 0x0b63, 0x0b69, 0x0b81, 0x0b81, - 0x0b93, 0x0ba6, 0x0bb9, 0x0bca, 0x0bdc, 0x0bf6, 0x0c0e, 0x0c17, - 0x0c2a, 0x0c2a, 0x0c3c, 0x0c4b, 0x0c57, 0x0c5f, 0x0c74, 0x0c86, - 0x0c8d, 0x0c98, 0x0ca9, 0x0cbd, 0x0cd0, + 0x0b37, 0x0b3b, 0x0b3b, 0x0b3b, 0x0b42, 0x0b47, 0x0b47, 0x0b50, + 0x0b50, 0x0b50, 0x0b50, 0x0b50, 0x0b6d, 0x0b71, 0x0b8a, 0x0b90, + 0x0ba8, 0x0ba8, 0x0bba, 0x0bcd, 0x0be0, 0x0bf1, 0x0c03, 0x0c19, + 0x0c2d, 0x0c40, 0x0c53, 0x0c53, 0x0c65, 0x0c74, 0x0c80, 0x0c88, + 0x0c9c, 0x0cb2, 0x0cb9, 0x0cc4, 0x0cd5, 0x0ce9, 0x0cfc, }, }, { // gsw @@ -6406,16 +6774,16 @@ var langHeaders = [252]header{ "tsyrischSyrischTemneTereno-SchpraachTetum-SchpraachTigreTiv-Schpraac" + "hTokelauanischKlingonischTlingit-SchpraachTamaseqTsonga-SchpraachNeu" + "melanesischTsimshian-SchpraachTumbuka-SchpraachElliceanischTuwinisch" + - "UdmurtischUgaritischMbundu-SchpraachRootVai-SchpraachWotischWalamo-S" + - "chpraachWarayWasho-SchpraachKalmückischYao-SchpraachYapesischZapotek" + - "ischBliss-SymboolZenagaZuni-SchpraachKän schpraachliche InhaltZazaÖs" + - "chtriichischs TüütschSchwiizer HochtüütschAuschtralischs ÄnglischKan" + - "adischs ÄnglischBritischs ÄnglischAmerikanischs ÄnglischLatiinamerik" + - "anischs SchpanischIbeerischs SchpanischKanadischs FranzösischSchwiiz" + - "er FranzösischFläämischBrasilianischs PortugiisischIberischs Portugi" + - "isischMoldawischSerbo-KroatischVeräifachts ChineesischTradizionells " + - "Chineesisch", - []uint16{ // 613 elements + "UdmurtischUgaritischMbundu-SchpraachUnbeschtimmti SchpraachVai-Schpr" + + "aachWotischWalamo-SchpraachWarayWasho-SchpraachKalmückischYao-Schpra" + + "achYapesischZapotekischBliss-SymboolZenagaZuni-SchpraachKän schpraac" + + "hliche InhaltZazaÖschtriichischs TüütschSchwiizer HochtüütschAuschtr" + + "alischs ÄnglischKanadischs ÄnglischBritischs ÄnglischAmerikanischs Ä" + + "nglischLatiinamerikanischs SchpanischIbeerischs SchpanischKanadischs" + + " FranzösischSchwiizer FranzösischFläämischBrasilianischs Portugiisis" + + "chIberischs PortugiisischMoldawischSerbo-KroatischVeräifachts Chinee" + + "sischTradizionells Chineesisch", + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0004, 0x000e, 0x0017, 0x0020, 0x0024, 0x002d, 0x0039, 0x0041, 0x004c, 0x0054, 0x005a, 0x006b, 0x0077, 0x0084, 0x008f, @@ -6450,59 +6818,59 @@ var langHeaders = [252]header{ 0x0796, 0x079d, 0x07a2, 0x07a2, 0x07a2, 0x07a2, 0x07a2, 0x07a2, 0x07ad, 0x07b6, 0x07ba, 0x07ba, 0x07ba, 0x07cd, 0x07cd, 0x07cd, 0x07d8, 0x07d8, 0x07d8, 0x07d8, 0x07e2, 0x07ee, 0x07ee, 0x07f2, - 0x07f2, 0x07f7, 0x0801, 0x0801, 0x0806, 0x080d, 0x080d, 0x0818, - 0x0825, 0x082f, 0x083e, 0x0845, 0x084c, 0x0855, 0x085d, 0x0865, - // Entry 100 - 13F - 0x0865, 0x086d, 0x086d, 0x087a, 0x087a, 0x0885, 0x088b, 0x0896, - 0x0896, 0x08a8, 0x08ae, 0x08b4, 0x08b9, 0x08b9, 0x08be, 0x08cb, - 0x08cb, 0x08d0, 0x08e4, 0x08e4, 0x08e9, 0x08e9, 0x08e9, 0x08f1, - 0x08f1, 0x08fe, 0x0904, 0x090c, 0x091b, 0x091b, 0x0921, 0x0921, - 0x0931, 0x0939, 0x0939, 0x093c, 0x093c, 0x094e, 0x095d, 0x095d, - 0x096a, 0x0978, 0x0981, 0x0983, 0x0983, 0x0983, 0x0987, 0x098c, - 0x098c, 0x0990, 0x099d, 0x099d, 0x09b0, 0x09c0, 0x09c0, 0x09c5, - 0x09ce, 0x09d5, 0x09da, 0x09e7, 0x09f9, 0x09f9, 0x09f9, 0x09f9, + 0x07f2, 0x07f7, 0x0801, 0x0801, 0x0806, 0x0806, 0x080d, 0x080d, + 0x0818, 0x0825, 0x082f, 0x083e, 0x0845, 0x084c, 0x0855, 0x085d, + // Entry 100 - 13F + 0x0865, 0x0865, 0x086d, 0x086d, 0x087a, 0x087a, 0x0885, 0x088b, + 0x0896, 0x0896, 0x08a8, 0x08ae, 0x08b4, 0x08b9, 0x08b9, 0x08be, + 0x08cb, 0x08cb, 0x08d0, 0x08e4, 0x08e4, 0x08e9, 0x08e9, 0x08e9, + 0x08f1, 0x08f1, 0x08fe, 0x0904, 0x090c, 0x091b, 0x091b, 0x0921, + 0x0921, 0x0931, 0x0939, 0x0939, 0x093c, 0x093c, 0x094e, 0x095d, + 0x095d, 0x096a, 0x0978, 0x0981, 0x0983, 0x0983, 0x0983, 0x0987, + 0x098c, 0x098c, 0x0990, 0x099d, 0x099d, 0x09b0, 0x09c0, 0x09c0, + 0x09c5, 0x09ce, 0x09d5, 0x09da, 0x09e7, 0x09f9, 0x09f9, 0x09f9, // Entry 140 - 17F - 0x0a04, 0x0a09, 0x0a09, 0x0a15, 0x0a15, 0x0a23, 0x0a2d, 0x0a31, - 0x0a3d, 0x0a3d, 0x0a41, 0x0a49, 0x0a49, 0x0a50, 0x0a5b, 0x0a5b, - 0x0a5b, 0x0a65, 0x0a65, 0x0a65, 0x0a78, 0x0a8b, 0x0a8b, 0x0a99, - 0x0aa2, 0x0ab2, 0x0ab5, 0x0aba, 0x0abe, 0x0aca, 0x0aca, 0x0ace, - 0x0ace, 0x0ace, 0x0ace, 0x0ad2, 0x0ad2, 0x0ada, 0x0ae1, 0x0ae1, - 0x0ae1, 0x0ae1, 0x0ae1, 0x0ae1, 0x0af3, 0x0af3, 0x0afa, 0x0b06, - 0x0b16, 0x0b2f, 0x0b2f, 0x0b2f, 0x0b38, 0x0b47, 0x0b47, 0x0b47, - 0x0b47, 0x0b51, 0x0b62, 0x0b68, 0x0b68, 0x0b73, 0x0b7d, 0x0b85, + 0x09f9, 0x0a04, 0x0a09, 0x0a09, 0x0a15, 0x0a15, 0x0a23, 0x0a2d, + 0x0a31, 0x0a3d, 0x0a3d, 0x0a41, 0x0a49, 0x0a49, 0x0a50, 0x0a5b, + 0x0a5b, 0x0a5b, 0x0a65, 0x0a65, 0x0a65, 0x0a78, 0x0a8b, 0x0a8b, + 0x0a99, 0x0aa2, 0x0ab2, 0x0ab5, 0x0aba, 0x0abe, 0x0aca, 0x0aca, + 0x0ace, 0x0ace, 0x0ace, 0x0ace, 0x0ad2, 0x0ad2, 0x0ada, 0x0ae1, + 0x0ae1, 0x0ae1, 0x0ae1, 0x0ae1, 0x0ae1, 0x0af3, 0x0af3, 0x0afa, + 0x0b06, 0x0b16, 0x0b2f, 0x0b2f, 0x0b2f, 0x0b38, 0x0b47, 0x0b47, + 0x0b47, 0x0b47, 0x0b51, 0x0b62, 0x0b68, 0x0b68, 0x0b73, 0x0b7d, // Entry 180 - 1BF - 0x0b85, 0x0b85, 0x0b85, 0x0b85, 0x0b85, 0x0b8a, 0x0b99, 0x0b99, - 0x0b99, 0x0ba3, 0x0bb4, 0x0bc3, 0x0bd0, 0x0be0, 0x0be0, 0x0be0, - 0x0be0, 0x0beb, 0x0beb, 0x0bf1, 0x0bf9, 0x0c05, 0x0c16, 0x0c26, - 0x0c26, 0x0c38, 0x0c44, 0x0c53, 0x0c53, 0x0c53, 0x0c5f, 0x0c5f, - 0x0c5f, 0x0c6f, 0x0c84, 0x0c91, 0x0ca2, 0x0cb2, 0x0cc1, 0x0cc1, - 0x0cc1, 0x0cd0, 0x0ce2, 0x0cee, 0x0cf8, 0x0cf8, 0x0cf8, 0x0cfd, - 0x0cfd, 0x0cfd, 0x0d0b, 0x0d0b, 0x0d19, 0x0d22, 0x0d30, 0x0d3e, - 0x0d3e, 0x0d3e, 0x0d3e, 0x0d46, 0x0d51, 0x0d51, 0x0d57, 0x0d6b, + 0x0b85, 0x0b85, 0x0b85, 0x0b85, 0x0b85, 0x0b85, 0x0b8a, 0x0b8a, + 0x0b99, 0x0b99, 0x0b99, 0x0ba3, 0x0bb4, 0x0bc3, 0x0bd0, 0x0be0, + 0x0be0, 0x0be0, 0x0be0, 0x0beb, 0x0beb, 0x0bf1, 0x0bf9, 0x0c05, + 0x0c16, 0x0c26, 0x0c26, 0x0c38, 0x0c44, 0x0c53, 0x0c53, 0x0c53, + 0x0c5f, 0x0c5f, 0x0c5f, 0x0c6f, 0x0c84, 0x0c91, 0x0ca2, 0x0cb2, + 0x0cc1, 0x0cc1, 0x0cc1, 0x0cd0, 0x0ce2, 0x0cee, 0x0cf8, 0x0cf8, + 0x0cf8, 0x0cfd, 0x0cfd, 0x0cfd, 0x0d0b, 0x0d0b, 0x0d19, 0x0d22, + 0x0d30, 0x0d3e, 0x0d3e, 0x0d3e, 0x0d3e, 0x0d46, 0x0d51, 0x0d51, // Entry 1C0 - 1FF - 0x0d6b, 0x0d75, 0x0d87, 0x0d8f, 0x0d94, 0x0d99, 0x0da8, 0x0db1, - 0x0dbf, 0x0dcd, 0x0de1, 0x0deb, 0x0df0, 0x0df0, 0x0df0, 0x0df0, - 0x0df0, 0x0dfb, 0x0dfb, 0x0e06, 0x0e06, 0x0e06, 0x0e12, 0x0e12, - 0x0e22, 0x0e22, 0x0e22, 0x0e2c, 0x0e42, 0x0e50, 0x0e50, 0x0e50, - 0x0e50, 0x0e63, 0x0e63, 0x0e63, 0x0e63, 0x0e6d, 0x0e6d, 0x0e7e, - 0x0e87, 0x0e94, 0x0e94, 0x0e99, 0x0ea0, 0x0ea0, 0x0ea0, 0x0ea0, - 0x0eac, 0x0eb6, 0x0eb6, 0x0eb6, 0x0eb6, 0x0eb6, 0x0eb6, 0x0ec0, - 0x0ec0, 0x0ec9, 0x0ec9, 0x0ec9, 0x0ed8, 0x0ed8, 0x0ede, 0x0ede, + 0x0d57, 0x0d6b, 0x0d6b, 0x0d75, 0x0d87, 0x0d8f, 0x0d94, 0x0d99, + 0x0da8, 0x0db1, 0x0dbf, 0x0dcd, 0x0de1, 0x0deb, 0x0df0, 0x0df0, + 0x0df0, 0x0df0, 0x0df0, 0x0dfb, 0x0dfb, 0x0e06, 0x0e06, 0x0e06, + 0x0e12, 0x0e12, 0x0e22, 0x0e22, 0x0e22, 0x0e2c, 0x0e42, 0x0e50, + 0x0e50, 0x0e50, 0x0e50, 0x0e63, 0x0e63, 0x0e63, 0x0e63, 0x0e6d, + 0x0e6d, 0x0e7e, 0x0e87, 0x0e94, 0x0e94, 0x0e99, 0x0ea0, 0x0ea0, + 0x0ea0, 0x0ea0, 0x0eac, 0x0eb6, 0x0eb6, 0x0eb6, 0x0eb6, 0x0eb6, + 0x0eb6, 0x0ec0, 0x0ec0, 0x0ec9, 0x0ec9, 0x0ec9, 0x0ed8, 0x0ed8, // Entry 200 - 23F - 0x0ede, 0x0eec, 0x0ef8, 0x0f05, 0x0f12, 0x0f23, 0x0f2b, 0x0f35, - 0x0f44, 0x0f44, 0x0f44, 0x0f54, 0x0f58, 0x0f61, 0x0f61, 0x0f6b, - 0x0f72, 0x0f72, 0x0f72, 0x0f77, 0x0f77, 0x0f87, 0x0f96, 0x0f9b, - 0x0fa8, 0x0fb5, 0x0fb5, 0x0fc0, 0x0fd1, 0x0fd1, 0x0fd8, 0x0fe8, - 0x0ff6, 0x0ff6, 0x0ff6, 0x0ff6, 0x1009, 0x1009, 0x101a, 0x1026, - 0x1026, 0x102f, 0x102f, 0x1039, 0x1043, 0x1053, 0x1057, 0x1064, - 0x1064, 0x1064, 0x1064, 0x1064, 0x106b, 0x106b, 0x106b, 0x106b, - 0x107b, 0x1080, 0x108f, 0x108f, 0x108f, 0x109b, 0x109b, 0x109b, + 0x0ede, 0x0ede, 0x0ede, 0x0eec, 0x0ef8, 0x0f05, 0x0f12, 0x0f23, + 0x0f2b, 0x0f35, 0x0f44, 0x0f44, 0x0f44, 0x0f54, 0x0f58, 0x0f61, + 0x0f61, 0x0f6b, 0x0f72, 0x0f72, 0x0f72, 0x0f77, 0x0f77, 0x0f87, + 0x0f96, 0x0f9b, 0x0fa8, 0x0fb5, 0x0fb5, 0x0fc0, 0x0fd1, 0x0fd1, + 0x0fd8, 0x0fe8, 0x0ff6, 0x0ff6, 0x0ff6, 0x0ff6, 0x1009, 0x1009, + 0x101a, 0x1026, 0x1026, 0x102f, 0x102f, 0x1039, 0x1043, 0x1053, + 0x106a, 0x1077, 0x1077, 0x1077, 0x1077, 0x1077, 0x107e, 0x107e, + 0x107e, 0x107e, 0x108e, 0x1093, 0x10a2, 0x10a2, 0x10a2, 0x10ae, // Entry 240 - 27F - 0x10a8, 0x10b1, 0x10b1, 0x10b1, 0x10b1, 0x10b1, 0x10bc, 0x10c9, - 0x10c9, 0x10cf, 0x10cf, 0x10dd, 0x10f7, 0x10fb, 0x10fb, 0x10fb, - 0x1115, 0x112c, 0x1144, 0x1158, 0x116b, 0x1182, 0x11a0, 0x11b5, - 0x11b5, 0x11b5, 0x11cc, 0x11e2, 0x11e2, 0x11ed, 0x1209, 0x1220, - 0x122a, 0x1239, 0x1239, 0x1251, 0x126a, + 0x10ae, 0x10ae, 0x10bb, 0x10c4, 0x10c4, 0x10c4, 0x10c4, 0x10c4, + 0x10cf, 0x10dc, 0x10dc, 0x10e2, 0x10e2, 0x10f0, 0x110a, 0x110e, + 0x110e, 0x110e, 0x1128, 0x113f, 0x1157, 0x116b, 0x117e, 0x1195, + 0x11b3, 0x11c8, 0x11c8, 0x11c8, 0x11df, 0x11f5, 0x11f5, 0x1200, + 0x121c, 0x1233, 0x123d, 0x124c, 0x124c, 0x1264, 0x127d, }, }, { // gu @@ -6516,7 +6884,7 @@ var langHeaders = [252]header{ "inepaliKiholanziKipunjabiKipolandiKirenoKiromaniaKirusiKinyarwandaKi" + "somaliKiswidiKitamilKitailandiKiturukiKiukraniaKiurduKivietinamuKiyo" + "rubaKichinaKizuluEkegusii", - []uint16{ // 320 elements + []uint16{ // 321 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x000e, 0x000e, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x001f, 0x0029, @@ -6561,7 +6929,9 @@ var langHeaders = [252]header{ 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, - 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0171, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, + // Entry 140 - 17F + 0x0171, }, }, { // gv @@ -6620,7 +6990,7 @@ var langHeaders = [252]header{ "pono ʻole paha ka ʻōleloPelekāne Nū HōlaniPelekāne KanakāPelekānia P" + "ekekānePelekānia ʻAmelikaPalani KanakāKuikilaniPukikī PalakilaPākē H" + "oʻomaʻalahi ʻiaPākē Kuʻuna", - []uint16{ // 613 elements + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, @@ -6665,9 +7035,9 @@ var langHeaders = [252]header{ 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, - 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00c4, 0x00c4, 0x00c4, 0x00c4, + 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00c4, 0x00c4, 0x00c4, // Entry 140 - 17F - 0x00c4, 0x00c4, 0x00c4, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, + 0x00c4, 0x00c4, 0x00c4, 0x00c4, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, @@ -6699,15 +7069,15 @@ var langHeaders = [252]header{ 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, - 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x0107, 0x0107, + 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, // Entry 240 - 27F 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, - 0x0107, 0x0107, 0x011c, 0x012d, 0x0141, 0x0155, 0x0155, 0x0155, - 0x0155, 0x0155, 0x0163, 0x016c, 0x016c, 0x016c, 0x017c, 0x017c, - 0x017c, 0x017c, 0x017c, 0x0196, 0x01a4, + 0x0107, 0x0107, 0x0107, 0x0107, 0x011c, 0x012d, 0x0141, 0x0155, + 0x0155, 0x0155, 0x0155, 0x0155, 0x0163, 0x016c, 0x016c, 0x016c, + 0x017c, 0x017c, 0x017c, 0x017c, 0x017c, 0x0196, 0x01a4, }, }, { // he @@ -6763,7 +7133,7 @@ var langHeaders = [252]header{ "ka francošćinašwicarska francošćinaflamšćinabrazilska portugalšćinae" + "uropska portugalšćinamoldawšćinaserbochorwatšćinakongoska suahelšćin" + "achinšćina (zjednorjena)chinšćina (tradicionalna)", - []uint16{ // 613 elements + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x000b, 0x0019, 0x0019, 0x0028, 0x0033, 0x003f, 0x004c, 0x0057, 0x0062, 0x006d, 0x0079, 0x008c, 0x009a, 0x00a9, 0x00b7, @@ -6798,59 +7168,59 @@ var langHeaders = [252]header{ 0x0799, 0x0799, 0x079e, 0x079e, 0x07a2, 0x07a2, 0x07a2, 0x07a2, 0x07a2, 0x07a2, 0x07a2, 0x07a2, 0x07a2, 0x07a2, 0x07a2, 0x07a2, 0x07a2, 0x07a2, 0x07a6, 0x07a6, 0x07a6, 0x07b5, 0x07b5, 0x07b5, - 0x07b5, 0x07b5, 0x07b5, 0x07b5, 0x07b5, 0x07b5, 0x07ba, 0x07ba, - 0x07ba, 0x07ba, 0x07ba, 0x07ba, 0x07c8, 0x07c8, 0x07d0, 0x07d0, + 0x07b5, 0x07b5, 0x07b5, 0x07b5, 0x07b5, 0x07b5, 0x07b5, 0x07ba, + 0x07ba, 0x07ba, 0x07ba, 0x07ba, 0x07ba, 0x07c8, 0x07c8, 0x07d0, // Entry 100 - 13F - 0x07d6, 0x07d6, 0x07d6, 0x07d6, 0x07d6, 0x07d6, 0x07d6, 0x07d6, - 0x07db, 0x07db, 0x07db, 0x07db, 0x07db, 0x07e0, 0x07e0, 0x07f1, - 0x07f1, 0x07f6, 0x07f6, 0x0800, 0x0800, 0x0800, 0x0804, 0x0804, + 0x07d0, 0x07d6, 0x07d6, 0x07d6, 0x07d6, 0x07d6, 0x07d6, 0x07d6, + 0x07d6, 0x07db, 0x07db, 0x07db, 0x07db, 0x07db, 0x07e0, 0x07e0, + 0x07f1, 0x07f1, 0x07f6, 0x07f6, 0x0800, 0x0800, 0x0800, 0x0804, 0x0804, 0x0804, 0x0804, 0x0804, 0x0804, 0x0804, 0x0804, 0x0804, - 0x0804, 0x0812, 0x0812, 0x0812, 0x0812, 0x0812, 0x0812, 0x0812, - 0x0812, 0x0812, 0x0812, 0x0812, 0x0820, 0x0820, 0x0820, 0x0820, + 0x0804, 0x0804, 0x0812, 0x0812, 0x0812, 0x0812, 0x0812, 0x0812, + 0x0812, 0x0812, 0x0812, 0x0812, 0x0812, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, - 0x0820, 0x082a, 0x082a, 0x082a, 0x083e, 0x083e, 0x083e, 0x0843, + 0x0820, 0x0820, 0x082a, 0x082a, 0x082a, 0x083e, 0x083e, 0x083e, // Entry 140 - 17F - 0x0843, 0x0843, 0x0843, 0x0850, 0x0850, 0x0850, 0x0850, 0x0850, - 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, - 0x0861, 0x0861, 0x0867, 0x086e, 0x086e, 0x086e, 0x086e, 0x086e, - 0x087a, 0x087a, 0x087a, 0x087f, 0x087f, 0x087f, 0x087f, 0x087f, - 0x0886, 0x0894, 0x0894, 0x0894, 0x0894, 0x0894, 0x0894, 0x08a0, - 0x08a0, 0x08a0, 0x08a0, 0x08a8, 0x08a8, 0x08bb, 0x08c2, 0x08c2, - 0x08c2, 0x08c2, 0x08c2, 0x08c2, 0x08c2, 0x08c2, 0x08ca, 0x08cf, - 0x08cf, 0x08cf, 0x08cf, 0x08cf, 0x08d4, 0x08d4, 0x08d4, 0x08d4, + 0x0843, 0x0843, 0x0843, 0x0843, 0x0850, 0x0850, 0x0850, 0x0850, + 0x0850, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, 0x0861, + 0x0861, 0x0861, 0x0861, 0x0867, 0x086e, 0x086e, 0x086e, 0x086e, + 0x086e, 0x087a, 0x087a, 0x087a, 0x087f, 0x087f, 0x087f, 0x087f, + 0x087f, 0x0886, 0x0894, 0x0894, 0x0894, 0x0894, 0x0894, 0x0894, + 0x08a0, 0x08a0, 0x08a0, 0x08a0, 0x08a8, 0x08a8, 0x08bb, 0x08c2, + 0x08c2, 0x08c2, 0x08c2, 0x08c2, 0x08c2, 0x08c2, 0x08c2, 0x08ca, + 0x08cf, 0x08cf, 0x08cf, 0x08cf, 0x08cf, 0x08d4, 0x08d4, 0x08d4, // Entry 180 - 1BF - 0x08d4, 0x08d4, 0x08d4, 0x08da, 0x08da, 0x08da, 0x08da, 0x08da, - 0x08da, 0x08da, 0x08da, 0x08da, 0x08dd, 0x08dd, 0x08e2, 0x08e2, - 0x08e2, 0x08e2, 0x08e2, 0x08e2, 0x08e2, 0x08e2, 0x08e2, 0x08ee, - 0x08ee, 0x08ee, 0x08ee, 0x08ee, 0x08f2, 0x0909, 0x0909, 0x0917, - 0x091e, 0x091e, 0x091e, 0x091e, 0x091e, 0x092b, 0x092b, 0x092b, - 0x0932, 0x0932, 0x0936, 0x0936, 0x0936, 0x0936, 0x0936, 0x0936, - 0x0936, 0x0936, 0x0936, 0x093a, 0x0949, 0x0949, 0x0949, 0x0949, - 0x0949, 0x094f, 0x094f, 0x094f, 0x094f, 0x094f, 0x0955, 0x0955, + 0x08d4, 0x08d4, 0x08d4, 0x08d4, 0x08da, 0x08da, 0x08da, 0x08da, + 0x08da, 0x08da, 0x08da, 0x08da, 0x08da, 0x08da, 0x08dd, 0x08dd, + 0x08e2, 0x08e2, 0x08e2, 0x08e2, 0x08e2, 0x08e2, 0x08e2, 0x08e2, + 0x08e2, 0x08ee, 0x08ee, 0x08ee, 0x08ee, 0x08ee, 0x08f2, 0x0909, + 0x0909, 0x0917, 0x091e, 0x091e, 0x091e, 0x091e, 0x091e, 0x092b, + 0x092b, 0x092b, 0x0932, 0x0932, 0x0936, 0x0936, 0x0936, 0x0936, + 0x0936, 0x0936, 0x0936, 0x0936, 0x0936, 0x093a, 0x0949, 0x0949, + 0x0949, 0x0949, 0x0949, 0x094f, 0x094f, 0x094f, 0x094f, 0x094f, // Entry 1C0 - 1FF - 0x0959, 0x0959, 0x0959, 0x0961, 0x0961, 0x0961, 0x0961, 0x0961, + 0x0955, 0x0955, 0x0959, 0x0959, 0x0959, 0x0961, 0x0961, 0x0961, 0x0961, 0x0961, 0x0961, 0x0961, 0x0961, 0x0961, 0x0961, 0x0961, - 0x0961, 0x0961, 0x0961, 0x0961, 0x0961, 0x0961, 0x0961, 0x096b, - 0x096b, 0x0974, 0x0974, 0x0974, 0x0974, 0x0974, 0x0974, 0x0974, - 0x0979, 0x0979, 0x0979, 0x0979, 0x0979, 0x0979, 0x097c, 0x097c, - 0x097c, 0x097c, 0x0983, 0x0983, 0x0983, 0x0983, 0x0983, 0x0988, - 0x0994, 0x0994, 0x0994, 0x0994, 0x0994, 0x0998, 0x0998, 0x0998, - 0x09a3, 0x09a3, 0x09a3, 0x09ac, 0x09ac, 0x09ac, 0x09ac, 0x09ac, + 0x0961, 0x0961, 0x0961, 0x0961, 0x0961, 0x0961, 0x0961, 0x0961, + 0x0961, 0x096b, 0x096b, 0x0974, 0x0974, 0x0974, 0x0974, 0x0974, + 0x0974, 0x0974, 0x0979, 0x0979, 0x0979, 0x0979, 0x0979, 0x0979, + 0x097c, 0x097c, 0x097c, 0x097c, 0x0983, 0x0983, 0x0983, 0x0983, + 0x0983, 0x0988, 0x0994, 0x0994, 0x0994, 0x0994, 0x0994, 0x0998, + 0x0998, 0x0998, 0x09a3, 0x09a3, 0x09a3, 0x09ac, 0x09ac, 0x09ac, // Entry 200 - 23F - 0x09ac, 0x09bd, 0x09cd, 0x09de, 0x09ef, 0x09ef, 0x09ef, 0x09ef, - 0x09ef, 0x09ef, 0x0a00, 0x0a00, 0x0a00, 0x0a00, 0x0a00, 0x0a00, - 0x0a00, 0x0a00, 0x0a00, 0x0a00, 0x0a04, 0x0a04, 0x0a04, 0x0a04, + 0x09ac, 0x09ac, 0x09ac, 0x09bd, 0x09cd, 0x09de, 0x09ef, 0x09ef, + 0x09ef, 0x09ef, 0x09ef, 0x09ef, 0x0a00, 0x0a00, 0x0a00, 0x0a00, + 0x0a00, 0x0a00, 0x0a00, 0x0a00, 0x0a00, 0x0a00, 0x0a04, 0x0a04, 0x0a04, 0x0a04, 0x0a04, 0x0a04, 0x0a04, 0x0a04, 0x0a04, 0x0a04, 0x0a04, 0x0a04, 0x0a04, 0x0a04, 0x0a04, 0x0a04, 0x0a04, 0x0a04, - 0x0a0b, 0x0a0b, 0x0a28, 0x0a28, 0x0a28, 0x0a28, 0x0a36, 0x0a39, - 0x0a39, 0x0a39, 0x0a39, 0x0a39, 0x0a39, 0x0a39, 0x0a3e, 0x0a3e, - 0x0a3e, 0x0a3e, 0x0a3e, 0x0a3e, 0x0a3e, 0x0a3e, 0x0a3e, 0x0a42, + 0x0a04, 0x0a04, 0x0a0b, 0x0a0b, 0x0a28, 0x0a28, 0x0a28, 0x0a28, + 0x0a36, 0x0a39, 0x0a39, 0x0a39, 0x0a39, 0x0a39, 0x0a39, 0x0a39, + 0x0a3e, 0x0a3e, 0x0a3e, 0x0a3e, 0x0a3e, 0x0a3e, 0x0a3e, 0x0a3e, // Entry 240 - 27F - 0x0a42, 0x0a42, 0x0a42, 0x0a42, 0x0a42, 0x0a42, 0x0a42, 0x0a42, - 0x0a42, 0x0a42, 0x0a4b, 0x0a4b, 0x0a60, 0x0a60, 0x0a79, 0x0a79, - 0x0a8c, 0x0aa6, 0x0ac0, 0x0ad9, 0x0af1, 0x0b09, 0x0b29, 0x0b3f, - 0x0b54, 0x0b54, 0x0b6b, 0x0b83, 0x0b83, 0x0b8e, 0x0ba7, 0x0bbf, - 0x0bcc, 0x0bdf, 0x0bf5, 0x0c0e, 0x0c29, + 0x0a3e, 0x0a42, 0x0a42, 0x0a42, 0x0a42, 0x0a42, 0x0a42, 0x0a42, + 0x0a42, 0x0a42, 0x0a42, 0x0a42, 0x0a4b, 0x0a4b, 0x0a60, 0x0a60, + 0x0a79, 0x0a79, 0x0a8c, 0x0aa6, 0x0ac0, 0x0ad9, 0x0af1, 0x0b09, + 0x0b29, 0x0b3f, 0x0b54, 0x0b54, 0x0b6b, 0x0b83, 0x0b83, 0x0b8e, + 0x0ba7, 0x0bbf, 0x0bcc, 0x0bdf, 0x0bf5, 0x0c0e, 0x0c29, }, }, { // hu @@ -6902,7 +7272,7 @@ var langHeaders = [252]header{ }, { // ii "ꄓꇩꉙꑱꇩꉙꑭꀠꑸꉙꃔꇩꉙꆈꌠꉙꑴꄊꆺꉙꏝꀪꉙꁍꄨꑸꉙꊉꇩꉙꍏꇩꉙꅉꀋꌠꅇꂷꀠꑟꁍꄨꑸꉙꈝꐯꍏꇩꉙꀎꋏꍏꇩꉙ", - []uint16{ // 613 elements + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -6981,15 +7351,15 @@ var langHeaders = [252]header{ 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, - 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0072, 0x0072, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, // Entry 240 - 27F 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, - 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0084, 0x0084, - 0x0084, 0x0084, 0x0084, 0x0093, 0x00a2, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0093, 0x00a2, }, }, { // is @@ -7006,7 +7376,7 @@ var langHeaders = [252]header{ }, { // jgo "AlâbɛNjámanŊgɛlɛ̂kAŋgɛlúshiFɛlánciShinwâNdaꞌacú-pʉɔ yi pɛ́ ká kɛ́ jí", - []uint16{ // 559 elements + []uint16{ // 561 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, @@ -7055,7 +7425,7 @@ var langHeaders = [252]header{ // Entry 140 - 17F 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, - 0x0035, 0x0035, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x0035, 0x0035, 0x0035, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, @@ -7085,7 +7455,8 @@ var langHeaders = [252]header{ 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, - 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x005c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x005c, }, }, { // jmc @@ -7096,7 +7467,7 @@ var langHeaders = [252]header{ "renoKyiromaniaKyirusiKyinyarwandaKyisomalyiKyiswidiKyitamilKyitailan" + "diKyiturukyiKyiukraniaKyiurduKyivietinamuKyiyorubaKyichinaKyizuluKim" + "achame", - []uint16{ // 340 elements + []uint16{ // 341 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0011, 0x0011, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0024, 0x0030, @@ -7145,7 +7516,7 @@ var langHeaders = [252]header{ // Entry 140 - 17F 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, - 0x0199, 0x0199, 0x0199, 0x01a2, + 0x0199, 0x0199, 0x0199, 0x0199, 0x01a2, }, }, { // ka @@ -7159,7 +7530,7 @@ var langHeaders = [252]header{ "TaburmisitTanipalitTadučitTapunjabitTapulunitTapurtugalitTarumanitTa" + "rusitTaruwanditTaṣumalitTaswiditTaṭamulitTaṭaylunditTaṭurkitTukranit" + "TurdutTabyiṭnamitTayurubitTacinwat, TamundarintTazulutTaqbaylit", - []uint16{ // 345 elements + []uint16{ // 346 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0010, 0x0010, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0023, 0x002d, @@ -7209,7 +7580,7 @@ var langHeaders = [252]header{ 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, - 0x01a6, + 0x019d, 0x01a6, }, }, { // kam @@ -7219,7 +7590,7 @@ var langHeaders = [252]header{ "inepaliKiholanziKipunjabiKipolandiKirenoKiromaniaKirusiKinyarwandaKi" + "somaliKiswidiKitamilKitailandiKiturukiKiukraniaKiurduKivietinamuKiyo" + "rubaKichinaKizuluKikamba", - []uint16{ // 348 elements + []uint16{ // 349 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x000e, 0x000e, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x001f, 0x0029, @@ -7269,7 +7640,7 @@ var langHeaders = [252]header{ 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, - 0x0169, 0x0169, 0x0169, 0x0170, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0170, }, }, { // kde @@ -7280,7 +7651,7 @@ var langHeaders = [252]header{ "ilenoChilomaniaChilusiChinyalwandaChisomaliChiswidiChitamilChitailan" + "diChituluchiChiuklaniaChiulduChivietinamuChiyolubaChichinaChizuluChi" + "makonde", - []uint16{ // 353 elements + []uint16{ // 354 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x000e, 0x000e, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0020, 0x002b, @@ -7331,7 +7702,7 @@ var langHeaders = [252]header{ 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, - 0x01a3, + 0x0199, 0x01a3, }, }, { // kea @@ -7357,7 +7728,7 @@ var langHeaders = [252]header{ "ngles merkanuspanhol latinu-merkanuspanhol europeuspanhol mexikanufr" + "anses kanadianufranses suisuflamengupurtuges brazilerupurtuges europ" + "eurumenu moldávikusuaíli kongolesxines simplifikaduxines tradisional", - []uint16{ // 613 elements + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0008, 0x0008, 0x0011, 0x0015, 0x001d, 0x001d, 0x0023, 0x0029, 0x0029, 0x002f, 0x003a, 0x0040, 0x0049, 0x0051, @@ -7392,25 +7763,25 @@ var langHeaders = [252]header{ 0x0392, 0x0392, 0x0397, 0x0397, 0x039b, 0x039b, 0x039b, 0x039b, 0x039b, 0x039b, 0x039b, 0x039b, 0x039b, 0x039b, 0x039b, 0x039b, 0x039b, 0x039b, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, - 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x03a3, 0x03a3, - 0x03a3, 0x03a3, 0x03a3, 0x03a3, 0x03a3, 0x03a3, 0x03a9, 0x03a9, + 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x039f, 0x03a3, + 0x03a3, 0x03a3, 0x03a3, 0x03a3, 0x03a3, 0x03a3, 0x03a3, 0x03a9, // Entry 100 - 13F - 0x03b6, 0x03b6, 0x03b6, 0x03b6, 0x03b6, 0x03b6, 0x03b6, 0x03b6, - 0x03bb, 0x03bb, 0x03bb, 0x03bb, 0x03bb, 0x03c0, 0x03c0, 0x03cc, - 0x03cc, 0x03d1, 0x03d1, 0x03db, 0x03db, 0x03db, 0x03df, 0x03df, + 0x03a9, 0x03b6, 0x03b6, 0x03b6, 0x03b6, 0x03b6, 0x03b6, 0x03b6, + 0x03b6, 0x03bb, 0x03bb, 0x03bb, 0x03bb, 0x03bb, 0x03c0, 0x03c0, + 0x03cc, 0x03cc, 0x03d1, 0x03d1, 0x03db, 0x03db, 0x03db, 0x03df, 0x03df, 0x03df, 0x03df, 0x03df, 0x03df, 0x03df, 0x03df, 0x03df, - 0x03df, 0x03e7, 0x03e7, 0x03e7, 0x03e7, 0x03e7, 0x03e7, 0x03e7, - 0x03e7, 0x03e7, 0x03e7, 0x03e7, 0x03ed, 0x03ed, 0x03ed, 0x03ed, + 0x03df, 0x03df, 0x03e7, 0x03e7, 0x03e7, 0x03e7, 0x03e7, 0x03e7, + 0x03e7, 0x03e7, 0x03e7, 0x03e7, 0x03e7, 0x03ed, 0x03ed, 0x03ed, 0x03ed, 0x03ed, 0x03ed, 0x03ed, 0x03ed, 0x03ed, 0x03ed, 0x03ed, - 0x03ed, 0x03ed, 0x03ed, 0x03ed, 0x03fb, 0x03fb, 0x03fb, 0x0400, + 0x03ed, 0x03ed, 0x03ed, 0x03ed, 0x03ed, 0x03fb, 0x03fb, 0x03fb, // Entry 140 - 17F - 0x0400, 0x0400, 0x0400, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, - 0x0413, 0x0413, 0x0413, 0x0413, 0x0413, 0x0413, 0x0413, 0x0413, - 0x0413, 0x0413, 0x0419, 0x0420, 0x0420, 0x0420, 0x0420, 0x0420, - 0x0426, 0x0426, 0x0426, 0x042b, 0x042b, 0x042b, 0x042b, 0x042b, - 0x042b, 0x0437, 0x0437, 0x0437, 0x0437, 0x0437, 0x0437, 0x0443, - 0x0443, 0x0443, 0x0443, 0x044b, 0x044b, 0x0457, 0x045e, 0x045e, - 0x045e, 0x045e, 0x045e, 0x045e, 0x045e, 0x045e, 0x045e, 0x0463, + 0x0400, 0x0400, 0x0400, 0x0400, 0x0407, 0x0407, 0x0407, 0x0407, + 0x0407, 0x0413, 0x0413, 0x0413, 0x0413, 0x0413, 0x0413, 0x0413, + 0x0413, 0x0413, 0x0413, 0x0419, 0x0420, 0x0420, 0x0420, 0x0420, + 0x0420, 0x0426, 0x0426, 0x0426, 0x042b, 0x042b, 0x042b, 0x042b, + 0x042b, 0x042b, 0x0437, 0x0437, 0x0437, 0x0437, 0x0437, 0x0437, + 0x0443, 0x0443, 0x0443, 0x0443, 0x044b, 0x044b, 0x0457, 0x045e, + 0x045e, 0x045e, 0x045e, 0x045e, 0x045e, 0x045e, 0x045e, 0x045e, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, // Entry 180 - 1BF 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, @@ -7420,31 +7791,31 @@ var langHeaders = [252]header{ 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, 0x0463, - 0x0463, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, + 0x0463, 0x0463, 0x0463, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, // Entry 1C0 - 1FF 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, 0x0469, - 0x0469, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, + 0x0469, 0x0469, 0x0469, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, 0x046e, - 0x047c, 0x047c, 0x047c, 0x047c, 0x047c, 0x047c, 0x047c, 0x047c, + 0x046e, 0x046e, 0x047c, 0x047c, 0x047c, 0x047c, 0x047c, 0x047c, // Entry 200 - 23F - 0x047c, 0x047c, 0x047c, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x047c, 0x047c, 0x047c, 0x047c, 0x047c, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, - 0x0486, 0x0486, 0x049f, 0x049f, 0x049f, 0x049f, 0x04b1, 0x04b1, + 0x0486, 0x0486, 0x0486, 0x0486, 0x049f, 0x049f, 0x049f, 0x049f, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, // Entry 240 - 27F 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, - 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04ca, 0x04ca, 0x04d8, 0x04d8, - 0x04e9, 0x04fb, 0x050d, 0x051d, 0x052d, 0x053b, 0x0551, 0x0560, - 0x0570, 0x0570, 0x0581, 0x058e, 0x058e, 0x0596, 0x05a8, 0x05b8, - 0x05c9, 0x05c9, 0x05d9, 0x05eb, 0x05fc, + 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04ca, 0x04ca, + 0x04d8, 0x04d8, 0x04e9, 0x04fb, 0x050d, 0x051d, 0x052d, 0x053b, + 0x0551, 0x0560, 0x0570, 0x0570, 0x0581, 0x058e, 0x058e, 0x0596, + 0x05a8, 0x05b8, 0x05c9, 0x05c9, 0x05d9, 0x05eb, 0x05fc, }, }, { // khq @@ -7457,7 +7828,7 @@ var langHeaders = [252]header{ "nda senniSomaali senniSuweede senniTamil senniTaailandu senniTurku s" + "enniUkreen senniUrdu senniVietnaam senniYorbance senniSinuwa senni, " + "MandareŋJulu senniKoyra ciini", - []uint16{ // 360 elements + []uint16{ // 361 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x0018, 0x0018, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0032, 0x0041, @@ -7508,7 +7879,8 @@ var langHeaders = [252]header{ 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, - 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0244, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0244, }, }, { // ki @@ -7553,7 +7925,7 @@ var langHeaders = [252]header{ }, { // kkj "yamannumbu buykakɔ", - []uint16{ // 363 elements + []uint16{ // 364 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -7605,7 +7977,7 @@ var langHeaders = [252]header{ 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, - 0x000e, 0x000e, 0x0013, + 0x000e, 0x000e, 0x000e, 0x0013, }, }, { // kl @@ -7637,7 +8009,7 @@ var langHeaders = [252]header{ "inyarwandakutitab Somaliekkutitab Swedenkutitab Tamilkutitab Thailan" + "dkutitab Turkeykutitab Ukrainekutitab Urdukutitab Vietnamkutitab Yor" + "ubakutitab Chinakutitab ZuluKalenjin", - []uint16{ // 364 elements + []uint16{ // 365 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x001a, 0x001a, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0038, 0x0048, @@ -7689,7 +8061,7 @@ var langHeaders = [252]header{ 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, 0x0284, - 0x0284, 0x0284, 0x0284, 0x028c, + 0x0284, 0x0284, 0x0284, 0x0284, 0x028c, }, }, { // km @@ -7706,110 +8078,139 @@ var langHeaders = [252]header{ }, {}, // ko-KP { // kok - "अफारअबखेज़ियनअफ्रिकान्सत्विअमहारिक्अरेबिक्असामीऐमराअज़रबैजानीबष्किरबैलोर" + - "ुसियन्बल्गेरियनबिसलमाबंगालीतिबेतियनब्रेटनकटलानकोर्शियनज़ेक्वेळ्ष्ड" + - "ानिषजर्मनभूटानीग्रीक्आंग्लइस्परान्टोस्पानिषइस्टोनियन्बास्कपर्षियन्" + - "फिन्निष्फिजीफेरोस्फ्रेन्चफ्रिशियन्ऐरिषस्काटस् गेलिक्गेलीशियनगौरानी" + - "गुजरातीहौसाहेब्रुहिन्दीक्रोयेषियन्हंगेरियन्आर्मीनियन्इन्टरलिंग्वाइ" + - "न्डोनेषियनइन्टरलिंग्इनूपेयाक्आईस्लान्डिकइटालियनइन्युकट्टजापनीस्जाव" + - "नीस्जार्जियन्कज़ख्ग्रीनलान्डिककंबोडियनकन्नडाकोरियन्कश्मीरीकुर्दिषक" + - "िर्गिज़लाटिनलिंगालालाओतियन्लिथुआनियन्लाट्वियन् (लेट्टिष्)मलागसीमाओ" + - "रीमसीडोनियन्मळियाळममंगोलियन्मराठीमलयमालतीस्बर्मीज़्नौरोनेपाळीडच्नो" + - "र्वेजियनओसिटान्ओरोमो (अफान)ओरियापंजाबीपोलिषपाष्टो (पुष्टो)पोर्चुगी" + - "ज़्क्वेच्वारहटो-रोमान्स्किरुन्दीरोमानियन्रष्यन्किन्यार्वान्डासंस्क" + - "ृतसिंधीसांग्रोसिन्हलीस्स्लोवाकस्लोवेनियन्समोनशोनासोमाळीआल्बेनियन्स" + - "ेर्बियन्सिस्वातीसेसोथोसुंदनीसस्वीदीषस्वाहिलीतमिळतेलुगूतजिकथाईतिग्र" + - "िन्यातुर्कमनसेत्स्वानातोंगातुर्किषत्सोगातटारउधूरयुक्रेनियन्उर्दूउज" + - "़बेकवियत्नामीज़ओलापुकउलोफ़झ़ौसाइद्दिष्यूरुबाझ्हुन्गचीनीस्जुलूतगालो" + - "गकोंकणीमोल्डावियन्सेर्बो-क्रोयेषियन्", - []uint16{ // 610 elements - // Entry 0 - 3F - 0x0000, 0x000c, 0x0027, 0x0027, 0x0045, 0x0051, 0x0069, 0x0069, - 0x007e, 0x008d, 0x008d, 0x0099, 0x00b7, 0x00c9, 0x00ea, 0x0105, - 0x0117, 0x0117, 0x0129, 0x0141, 0x0153, 0x0153, 0x0162, 0x0162, - 0x0162, 0x017a, 0x017a, 0x0189, 0x0189, 0x0189, 0x019b, 0x01aa, - 0x01b9, 0x01b9, 0x01cb, 0x01cb, 0x01dd, 0x01ec, 0x020a, 0x021f, - 0x023d, 0x024c, 0x0264, 0x0264, 0x027c, 0x0288, 0x029a, 0x02af, - 0x02ca, 0x02d6, 0x02fe, 0x0316, 0x0328, 0x033d, 0x033d, 0x0349, - 0x035b, 0x036d, 0x036d, 0x038e, 0x038e, 0x03a9, 0x03c7, 0x03c7, - // Entry 40 - 7F - 0x03eb, 0x040c, 0x042a, 0x042a, 0x042a, 0x0445, 0x0445, 0x0466, - 0x047b, 0x0496, 0x04ab, 0x04c0, 0x04db, 0x04db, 0x04db, 0x04db, - 0x04ea, 0x050e, 0x0526, 0x0538, 0x054d, 0x054d, 0x0562, 0x0577, - 0x0577, 0x0577, 0x058f, 0x059e, 0x059e, 0x059e, 0x059e, 0x05b3, - 0x05cb, 0x05e9, 0x05e9, 0x061f, 0x0631, 0x0631, 0x0640, 0x065e, - 0x0673, 0x068e, 0x069d, 0x06a6, 0x06bb, 0x06d3, 0x06df, 0x06df, - 0x06f1, 0x06f1, 0x06fa, 0x06fa, 0x0718, 0x0718, 0x0718, 0x0718, - 0x072d, 0x072d, 0x074b, 0x075a, 0x075a, 0x076c, 0x076c, 0x077b, - // Entry 80 - BF - 0x07a2, 0x07c3, 0x07db, 0x0800, 0x0818, 0x0833, 0x0845, 0x086f, - 0x0884, 0x0884, 0x0893, 0x0893, 0x08a8, 0x08c3, 0x08d8, 0x08f9, - 0x0905, 0x0911, 0x0923, 0x0941, 0x095c, 0x0974, 0x0986, 0x099b, - 0x09b0, 0x09c8, 0x09d4, 0x09e6, 0x09f2, 0x09fb, 0x0a19, 0x0a2e, - 0x0a4c, 0x0a5b, 0x0a70, 0x0a82, 0x0a8e, 0x0a8e, 0x0a9a, 0x0abb, - 0x0aca, 0x0adc, 0x0adc, 0x0afd, 0x0b0f, 0x0b0f, 0x0b1e, 0x0b2d, - 0x0b42, 0x0b54, 0x0b69, 0x0b7b, 0x0b87, 0x0b87, 0x0b87, 0x0b87, - 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, - // Entry C0 - FF - 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, - 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, - 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, - 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, - 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, - 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, - 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, - 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, - // Entry 100 - 13F - 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, - 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, - 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, - 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, 0x0b87, - 0x0b87, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, - 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, - 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, - 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, + "अफारअबखेज़ियनअफ्रिकान्सअकानअमहारिक्आरागोनिसअरेबिकआसामीअवारिकऐमराअज़रबैजा" + + "नीबष्किरबैलोरुसियन्बल्गेरियनबिसलमाबंबाराबांग्लातिबेतियनब्रेटनबोस्न" + + "ियनकटलानचिचेनचामोर्रोकोर्शियनचेकचर्च स्लेव्हीकछुवासवेळ्ष्डॅनिशजर्म" + + "नदिवेहीझोंग्खाएवग्रीक्इंग्लीशइस्परान्टोस्पॅनिशइस्टोनियन्बास्कपर्षि" + + "यन्फुलाफिन्निष्फिजीफेरोस्फ्रेन्चपश्चिमी फ्रिशियनऐरिषस्काटस् गेलिक्" + + "गेलीशियनगौरानीगुजरातीमॅन्सहौसाहिब्रूहिन्दीक्रोयेषियन्हैतियन क्रेयॉ" + + "लहंगेरियन्आर्मेनियनहिरिरोइन्टरलिंग्वाइंडोनेशियनइन्टरलिंग्इग्बोसिच्" + + "युआन यीइनूपेयाक्इदोआईस्लान्डिकइटालियनइन्युकट्टजपानीजावनीस्जार्जियन" + + "्किकुयुकुयांमाकज़ख्कालाल्लिसुटकंबोडियनकन्नडाकोरियन्कानुरीकश्मीरीकु" + + "र्दिषकोमीकोर्निशकिर्गिज़लाटिनलक्सेमबर्गीशगांडालिंबुर्गलिंगालालाअोल" + + "िथुआनियन्लुबा-काटांगालाट्वियन् (लेट्टिष्)मलागसीमार्शलीमुरीमसीडोनिय" + + "न्मळियाळममंगोलियन्मराठीमलयमालतीस्बर्मीज़्नौरोउत्तर न्डेबेलेनेपाळीड" + + "ोंगाडच्नोर्वोजियन नायनोर्स्कनोर्वेजियन बोकमालदक्षिण डेबेलेनावाजोना" + + "ंन्जाओसिटान्ओरोमोओरियाओसेटिकपंजाबीपोलिषपाष्टो (पुष्टो)पोर्तुगिजक्व" + + "ेच्वारहटो-रोमान्स्रुंदीरोमानियन्रशियनकिन्यार्वान्डासंस्कृतसार्डिनि" + + "यानसिंधीउत्तरीय सामीसांग्रोसिन्हलीस्स्लोवाकस्लोवेनियन्समोनशोनासोमा" + + "लीआल्बेनियन्सर्बियनस्वातीसेसोथोसुंदनीसस्वीदीषस्वाहिलीतमिळतेलुगूतजि" + + "कथाईतिग्रिन्यातुर्कमनसेत्स्वानातोंगातुर्किषत्सोगातटारताहीशियनउयघूर" + + "युक्रेनियन्उर्दूउज़बेकवेंदावियत्नामीज़ओलापुकवालूनउलोफ़झ़ौसाइद्दिष्" + + "यूरुबाझ्हुन्गचिनीजुलूअचायनीजअडांग्मेअडिघेअघेमआयनूआलिटदक्षिणी अल्टा" + + "यअंगिकामापुचेअरापाहोअसुअस्टुरियानअवधीबालिनिसबस्साबेम्बाबेनाभोजपुरी" + + "बिनीसिकसिकाबोडोबगिनिसब्लीनसिबौनाचिगाछुनिसमारीचोतावचिरोकीचेयनीमध्य " + + "खुर्दीशसेसेल्वा क्रयॉल फ्रेन्चडाकोटादार्ग्वातायताडोगरीबझर्मालोवर स" + + "ोर्बियनडौलजोला-फोनीडाझागाएम्बुएफीकएकाजुकएवोंडोफिलिपिनोफोनफ्रिलियनग" + + "ागेझगिलबर्टीसगोरोंटालोस्विज जर्मनगुसीग्विचहवायियानहिलीगायनॉनमोंगअप" + + "र सोर्बियनहुपाआयबनईबिबियोलोकोइंगूशलोबजानन्गोंबामचामेकाबायलेकाचीनजु" + + "कंबाकाबार्डियनत्यापमाकोंडेकाबुवर्डियनुकोरोखासीकोयरा छिनीकाकोकालेंज" + + "ीनकिंबुंडुकोंकणीपेल्लेकराची-बाल्करकारेलियनकुरुखशंबालाबाफियाकोलोनिय" + + "नकुमयकलाडिनोलांगीलेझघियानलाकोटालोझींउत्तरीय लुरीलुबा-लुलुआलुंडालुओ" + + "मिझोलुयमादुरेसेमगाहीमैथिलीमाकमसाईमोक्षमेंडेमेरूमोरिसेनमाखुवा-मिट्ट" + + "ोमेटामिक्माकमिनाग्काबौमणिपुरीमोहाकमोस्सीमुडांगसाबार भाशाक्रिकमिरां" + + "डीसएरझियामझांडेराणीनेपोलिटननामानेवरीनियासनियुनख्वासीन्गेबूननोगायनक" + + "ोउत्तरीय सोथोन्युयरनानकोलेपांगासियानपांपान्गापापिमेंटोपालुयाननायझे" + + "रियन पिडगीनप्रुसियनकिचेरापान्युरारोटोंगानरोम्बोआरोमेनियनरवासंडावेस" + + "खासांबारुसंथालीगांबेसांगूसिसिलियानस्कॉट्ससेनाकोयराबोरो सेन्नीताछेह" + + "ीटशानदक्षिणी सामीलुले सामीईनारी सामीस्कोल्ट सामीसोनिकेश्रानन टोंगो" + + "साहोसुकुमाकोमोरियनसिरियाकतिम्नेतेसोतेतमटिग्रेलिंगॉनतोक पिसीनतारोको" + + "तुंबुकातुवालूतासावाकतुविनियनकेंद्रीय अटलास तामाझायटउडमुर्तयमबुंडुअ" + + "ज्ञात भाशावाईवुंजोवाल्सरवोलायटावरयकालमायकसोगायांगबेनयेम्बाकांटोसीप" + + "्रमाणित मोरोक्कन तामाझायटझूनअणकार सामुग्री नाझाझाआधुनिक प्रमाणित अ" + + "रेबिकऑस्ट्रियन जर्मनस्वीझ म्हान जर्मनऑस्ट्रेलियन इंग्लीशकॅनाडीयन इ" + + "ंग्लीशब्रिटीश इंग्लीशअमेरिकन इंग्लीशलॅटिन अमेरिकन स्पॅनिशयुरोपियन " + + "स्पॅनिशमेक्सिकन स्पॅनिशकॅनाडीयन फ्रेन्चस्वीझ फ्रेन्चफ्लेमिशब्राझिल" + + "ियन पोर्तुगिजयुरोपियन पोर्तुगिजमोल्डावियन्सेर्बो-क्रोयेषियन्काँगो " + + "स्वाहिलीसोंपी चिनीपारंपारीक चिनी", + []uint16{ // 615 elements + // Entry 0 - 3F + 0x0000, 0x000c, 0x0027, 0x0027, 0x0045, 0x0051, 0x0069, 0x0081, + 0x0093, 0x00a2, 0x00b4, 0x00c0, 0x00de, 0x00f0, 0x0111, 0x012c, + 0x013e, 0x0150, 0x0165, 0x017d, 0x018f, 0x01a7, 0x01b6, 0x01c5, + 0x01dd, 0x01f5, 0x01f5, 0x01fe, 0x0226, 0x0235, 0x0247, 0x0256, + 0x0265, 0x0277, 0x028c, 0x0292, 0x02a4, 0x02b9, 0x02d7, 0x02ec, + 0x030a, 0x0319, 0x0331, 0x033d, 0x0355, 0x0361, 0x0373, 0x0388, + 0x03b6, 0x03c2, 0x03ea, 0x0402, 0x0414, 0x0429, 0x0438, 0x0444, + 0x0456, 0x0468, 0x0468, 0x0489, 0x04b1, 0x04cc, 0x04e7, 0x04f9, + // Entry 40 - 7F + 0x051d, 0x053b, 0x0559, 0x0568, 0x0587, 0x05a2, 0x05ab, 0x05cc, + 0x05e1, 0x05fc, 0x060b, 0x0620, 0x063b, 0x063b, 0x064d, 0x0662, + 0x0671, 0x0692, 0x06aa, 0x06bc, 0x06d1, 0x06e3, 0x06f8, 0x070d, + 0x0719, 0x072e, 0x0746, 0x0755, 0x0779, 0x0788, 0x07a0, 0x07b5, + 0x07c1, 0x07df, 0x0801, 0x0837, 0x0849, 0x085e, 0x086a, 0x0888, + 0x089d, 0x08b8, 0x08c7, 0x08d0, 0x08e5, 0x08fd, 0x0909, 0x0931, + 0x0943, 0x0952, 0x095b, 0x0998, 0x09c9, 0x09ee, 0x0a00, 0x0a15, + 0x0a2a, 0x0a2a, 0x0a39, 0x0a48, 0x0a5a, 0x0a6c, 0x0a6c, 0x0a7b, + // Entry 80 - BF + 0x0aa2, 0x0abd, 0x0ad5, 0x0afa, 0x0b09, 0x0b24, 0x0b33, 0x0b5d, + 0x0b72, 0x0b93, 0x0ba2, 0x0bc4, 0x0bd9, 0x0bf4, 0x0c09, 0x0c2a, + 0x0c36, 0x0c42, 0x0c54, 0x0c72, 0x0c87, 0x0c99, 0x0cab, 0x0cc0, + 0x0cd5, 0x0ced, 0x0cf9, 0x0d0b, 0x0d17, 0x0d20, 0x0d3e, 0x0d53, + 0x0d71, 0x0d80, 0x0d95, 0x0da7, 0x0db3, 0x0dcb, 0x0dda, 0x0dfb, + 0x0e0a, 0x0e1c, 0x0e2b, 0x0e4c, 0x0e5e, 0x0e6d, 0x0e7c, 0x0e8b, + 0x0ea0, 0x0eb2, 0x0ec7, 0x0ed3, 0x0edf, 0x0ef4, 0x0ef4, 0x0f0c, + 0x0f1b, 0x0f1b, 0x0f1b, 0x0f27, 0x0f33, 0x0f33, 0x0f33, 0x0f3f, + // Entry C0 - FF + 0x0f3f, 0x0f67, 0x0f67, 0x0f79, 0x0f79, 0x0f8b, 0x0f8b, 0x0fa0, + 0x0fa0, 0x0fa0, 0x0fa0, 0x0fa0, 0x0fa0, 0x0fa9, 0x0fa9, 0x0fc7, + 0x0fc7, 0x0fd3, 0x0fd3, 0x0fe8, 0x0fe8, 0x0ff7, 0x0ff7, 0x0ff7, + 0x0ff7, 0x0ff7, 0x1009, 0x1009, 0x1015, 0x1015, 0x1015, 0x1015, + 0x102a, 0x102a, 0x1036, 0x1036, 0x1036, 0x104b, 0x104b, 0x104b, + 0x104b, 0x104b, 0x1057, 0x1057, 0x1057, 0x1069, 0x1069, 0x1078, + 0x1078, 0x1078, 0x1078, 0x1078, 0x1078, 0x1078, 0x108a, 0x1096, + 0x1096, 0x1096, 0x10a5, 0x10b1, 0x10b1, 0x10c0, 0x10c0, 0x10d2, + // Entry 100 - 13F + 0x10e1, 0x1103, 0x1103, 0x1103, 0x1103, 0x1144, 0x1144, 0x1156, + 0x116e, 0x117d, 0x117d, 0x117d, 0x118f, 0x118f, 0x119e, 0x119e, + 0x11c3, 0x11c3, 0x11cc, 0x11cc, 0x11e5, 0x11e5, 0x11f7, 0x1206, + 0x1212, 0x1212, 0x1212, 0x1224, 0x1224, 0x1224, 0x1224, 0x1236, + 0x1236, 0x1236, 0x124e, 0x124e, 0x1257, 0x1257, 0x1257, 0x1257, + 0x1257, 0x1257, 0x1257, 0x126f, 0x1275, 0x1275, 0x1275, 0x1275, + 0x1275, 0x1275, 0x127e, 0x1299, 0x1299, 0x1299, 0x1299, 0x1299, + 0x1299, 0x12b4, 0x12b4, 0x12b4, 0x12b4, 0x12d3, 0x12d3, 0x12d3, // Entry 140 - 17F - 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, - 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, - 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, - 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, - 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, - 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0b99, 0x0bab, 0x0bab, - 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, - 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + 0x12df, 0x12ee, 0x12ee, 0x12ee, 0x1306, 0x1306, 0x1324, 0x1324, + 0x1330, 0x1352, 0x1352, 0x135e, 0x136a, 0x137f, 0x138b, 0x139a, + 0x139a, 0x139a, 0x13ac, 0x13c1, 0x13d0, 0x13d0, 0x13d0, 0x13d0, + 0x13d0, 0x13e5, 0x13f4, 0x13fa, 0x1406, 0x1406, 0x1424, 0x1424, + 0x1433, 0x1448, 0x146c, 0x146c, 0x1478, 0x1478, 0x1484, 0x1484, + 0x14a0, 0x14a0, 0x14a0, 0x14ac, 0x14c4, 0x14dc, 0x14dc, 0x14ee, + 0x14ee, 0x1500, 0x1522, 0x1522, 0x1522, 0x153a, 0x1549, 0x155b, + 0x156d, 0x1585, 0x1594, 0x1594, 0x15a6, 0x15b5, 0x15b5, 0x15b5, // Entry 180 - 1BF - 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, - 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, - 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, - 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, - 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, - 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, - 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, - 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + 0x15cd, 0x15cd, 0x15cd, 0x15cd, 0x15df, 0x15df, 0x15df, 0x15df, + 0x15ee, 0x1610, 0x1610, 0x162c, 0x162c, 0x163b, 0x1644, 0x1650, + 0x1659, 0x1659, 0x1659, 0x1671, 0x1671, 0x1680, 0x1692, 0x169b, + 0x169b, 0x16a7, 0x16a7, 0x16b6, 0x16b6, 0x16c5, 0x16d1, 0x16e6, + 0x16e6, 0x170b, 0x1717, 0x172c, 0x174a, 0x174a, 0x175f, 0x176e, + 0x1780, 0x1780, 0x1792, 0x17ae, 0x17bd, 0x17d5, 0x17d5, 0x17d5, + 0x17d5, 0x17e7, 0x1805, 0x1805, 0x181d, 0x1829, 0x1829, 0x1838, + 0x1847, 0x1856, 0x1856, 0x1868, 0x187d, 0x188c, 0x188c, 0x188c, // Entry 1C0 - 1FF - 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, - 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, - 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, - 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, - 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, - 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, - 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, - 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + 0x1895, 0x18b7, 0x18c9, 0x18c9, 0x18c9, 0x18de, 0x18de, 0x18de, + 0x18de, 0x18de, 0x18fc, 0x18fc, 0x1917, 0x1932, 0x1947, 0x1947, + 0x1975, 0x1975, 0x1975, 0x1975, 0x1975, 0x1975, 0x1975, 0x1975, + 0x1975, 0x198d, 0x198d, 0x1999, 0x1999, 0x1999, 0x19b1, 0x19cf, + 0x19cf, 0x19cf, 0x19e1, 0x19e1, 0x19e1, 0x19e1, 0x19e1, 0x19fc, + 0x1a05, 0x1a17, 0x1a20, 0x1a20, 0x1a35, 0x1a35, 0x1a47, 0x1a47, + 0x1a56, 0x1a65, 0x1a80, 0x1a95, 0x1a95, 0x1a95, 0x1a95, 0x1aa1, + 0x1aa1, 0x1aa1, 0x1acf, 0x1acf, 0x1acf, 0x1ae4, 0x1aed, 0x1aed, // Entry 200 - 23F - 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, - 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, - 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, - 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, - 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, - 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, - 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, - 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, + 0x1aed, 0x1aed, 0x1aed, 0x1b0f, 0x1b28, 0x1b44, 0x1b66, 0x1b78, + 0x1b78, 0x1b9a, 0x1b9a, 0x1ba6, 0x1ba6, 0x1bb8, 0x1bb8, 0x1bb8, + 0x1bd0, 0x1bd0, 0x1be5, 0x1be5, 0x1be5, 0x1bf7, 0x1c03, 0x1c03, + 0x1c0f, 0x1c21, 0x1c21, 0x1c21, 0x1c21, 0x1c33, 0x1c33, 0x1c33, + 0x1c33, 0x1c33, 0x1c4c, 0x1c4c, 0x1c5e, 0x1c5e, 0x1c5e, 0x1c5e, + 0x1c73, 0x1c85, 0x1c9a, 0x1cb2, 0x1cf3, 0x1d08, 0x1d08, 0x1d1d, + 0x1d3c, 0x1d45, 0x1d45, 0x1d45, 0x1d45, 0x1d45, 0x1d45, 0x1d45, + 0x1d54, 0x1d66, 0x1d7b, 0x1d84, 0x1d84, 0x1d84, 0x1d84, 0x1d99, // Entry 240 - 27F - 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, - 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, - 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, - 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, 0x0bab, - 0x0bcc, 0x0c00, + 0x1d99, 0x1da5, 0x1da5, 0x1da5, 0x1dba, 0x1dcc, 0x1dcc, 0x1de1, + 0x1de1, 0x1de1, 0x1de1, 0x1de1, 0x1e2b, 0x1e34, 0x1e63, 0x1e6f, + 0x1ead, 0x1ead, 0x1ed8, 0x1f07, 0x1f3e, 0x1f6c, 0x1f97, 0x1fc2, + 0x1ffd, 0x202b, 0x2059, 0x2059, 0x2087, 0x20ac, 0x20ac, 0x20c1, + 0x20fb, 0x212f, 0x2150, 0x2184, 0x21ac, 0x21c8, 0x21f0, }, }, { // ks @@ -7858,13 +8259,13 @@ var langHeaders = [252]header{ "سونِنکیےسوگڈِیَنسرٛانَن ٹونٛگوسیٚریرسُکُماسُسوٗسُمیریَنسیٖریٲییٹِمن" + "یےٹیٚریٚنوٹیٹَمٹاےگریےتیٖوٹوکیٖلاوکِلِنگونٹِلِنگِتتاماشیکنیاسا ٹونٛ" + "گاٹاک پِسِنژھِمشِیانتُمبُکاتُوالوٗتُویٖنیَناُدمُرتاُگارتِکیُمبُندوٗ" + - "روٗٹواےووتِکوالامووَریےواشوکالمِکیاویَپیٖززَپوتیٚکزیناگازوٗنیکانٛہہ" + - " تہِ لِسانیاتی مواد نہٕزازاآسٹرِیَن جٔرمَنسٕوِس ہاےجٔرمَنآسٹریلیَن ا" + - "َنٛگریٖزۍکینَڈِیٲیی اَنٛگریٖزۍبَرطانوی اَنٛگریٖزۍیوٗ ایٚس اَنٛگریٖز" + - "ۍلیٹٕن امریٖکی سپینِشلِبیریَن سپینِشکَنیڈیَن فریٚنچسٕوٕس فریٚنچفلیٚ" + - "مِشبرازیٖلی پُتَگیٖزلِبیریَن پُرتَگیٖزمولداوِیَنسیٚربو کروشِیَنسیٚو" + - "د چیٖنیرِوٲجی چیٖنی", - []uint16{ // 613 elements + "اَنزٲنۍ یا نَہ لَگہٕہار زبانواےووتِکوالامووَریےواشوکالمِکیاویَپیٖزز" + + "َپوتیٚکزیناگازوٗنیکانٛہہ تہِ لِسانیاتی مواد نہٕزازاآسٹرِیَن جٔرمَنس" + + "ٕوِس ہاےجٔرمَنآسٹریلیَن اَنٛگریٖزۍکینَڈِیٲیی اَنٛگریٖزۍبَرطانوی اَن" + + "ٛگریٖزۍیوٗ ایٚس اَنٛگریٖزۍلیٹٕن امریٖکی سپینِشلِبیریَن سپینِشکَنیڈی" + + "َن فریٚنچسٕوٕس فریٚنچفلیٚمِشبرازیٖلی پُتَگیٖزلِبیریَن پُرتَگیٖزمولد" + + "اوِیَنسیٚربو کروشِیَنسیٚود چیٖنیرِوٲجی چیٖنی", + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x000a, 0x001e, 0x002e, 0x0044, 0x004e, 0x005c, 0x006c, 0x0074, 0x007e, 0x008c, 0x0098, 0x00ae, 0x00bc, 0x00d2, 0x00da, @@ -7899,59 +8300,59 @@ var langHeaders = [252]header{ 0x0b4f, 0x0b57, 0x0b63, 0x0b63, 0x0b63, 0x0b63, 0x0b63, 0x0b63, 0x0b73, 0x0b7d, 0x0b85, 0x0b85, 0x0b85, 0x0b93, 0x0b93, 0x0b93, 0x0b9b, 0x0b9b, 0x0b9b, 0x0b9b, 0x0ba9, 0x0bb7, 0x0bb7, 0x0bc1, - 0x0bc1, 0x0bc9, 0x0bd3, 0x0bd3, 0x0bdd, 0x0beb, 0x0beb, 0x0bf7, - 0x0c05, 0x0c11, 0x0c19, 0x0c32, 0x0c3e, 0x0c4c, 0x0c5a, 0x0c64, - // Entry 100 - 13F - 0x0c64, 0x0c70, 0x0c70, 0x0c89, 0x0c89, 0x0c9d, 0x0ca7, 0x0cb3, - 0x0cb3, 0x0cc5, 0x0ccd, 0x0cd9, 0x0ce3, 0x0ce3, 0x0ced, 0x0d0a, - 0x0d0a, 0x0d16, 0x0d33, 0x0d33, 0x0d41, 0x0d41, 0x0d41, 0x0d4d, - 0x0d4d, 0x0d64, 0x0d74, 0x0d88, 0x0da7, 0x0da7, 0x0db7, 0x0db7, - 0x0dc1, 0x0dd3, 0x0dd3, 0x0dd9, 0x0dd9, 0x0dee, 0x0e03, 0x0e03, - 0x0e1e, 0x0e39, 0x0e4b, 0x0e4f, 0x0e4f, 0x0e4f, 0x0e59, 0x0e63, - 0x0e63, 0x0e6b, 0x0e7f, 0x0e7f, 0x0e9d, 0x0eb9, 0x0eb9, 0x0ec3, - 0x0ed5, 0x0ee1, 0x0eeb, 0x0f04, 0x0f1b, 0x0f1b, 0x0f1b, 0x0f1b, + 0x0bc1, 0x0bc9, 0x0bd3, 0x0bd3, 0x0bdd, 0x0bdd, 0x0beb, 0x0beb, + 0x0bf7, 0x0c05, 0x0c11, 0x0c19, 0x0c32, 0x0c3e, 0x0c4c, 0x0c5a, + // Entry 100 - 13F + 0x0c64, 0x0c64, 0x0c70, 0x0c70, 0x0c89, 0x0c89, 0x0c9d, 0x0ca7, + 0x0cb3, 0x0cb3, 0x0cc5, 0x0ccd, 0x0cd9, 0x0ce3, 0x0ce3, 0x0ced, + 0x0d0a, 0x0d0a, 0x0d16, 0x0d33, 0x0d33, 0x0d41, 0x0d41, 0x0d41, + 0x0d4d, 0x0d4d, 0x0d64, 0x0d74, 0x0d88, 0x0da7, 0x0da7, 0x0db7, + 0x0db7, 0x0dc1, 0x0dd3, 0x0dd3, 0x0dd9, 0x0dd9, 0x0dee, 0x0e03, + 0x0e03, 0x0e1e, 0x0e39, 0x0e4b, 0x0e4f, 0x0e4f, 0x0e4f, 0x0e59, + 0x0e63, 0x0e63, 0x0e6b, 0x0e7f, 0x0e7f, 0x0e9d, 0x0eb9, 0x0eb9, + 0x0ec3, 0x0ed5, 0x0ee1, 0x0eeb, 0x0f04, 0x0f1b, 0x0f1b, 0x0f1b, // Entry 140 - 17F - 0x0f2c, 0x0f36, 0x0f36, 0x0f46, 0x0f46, 0x0f5a, 0x0f68, 0x0f74, - 0x0f91, 0x0f91, 0x0f99, 0x0fa3, 0x0fa3, 0x0faf, 0x0fbd, 0x0fbd, - 0x0fbd, 0x0fc9, 0x0fc9, 0x0fc9, 0x0fde, 0x0ff1, 0x0ff1, 0x1006, - 0x1014, 0x101e, 0x1026, 0x1030, 0x1038, 0x104c, 0x104c, 0x1056, - 0x1056, 0x1056, 0x1056, 0x105e, 0x105e, 0x1068, 0x107a, 0x107a, - 0x107a, 0x107a, 0x107a, 0x107a, 0x108c, 0x108c, 0x109a, 0x10aa, - 0x10b6, 0x10cf, 0x10cf, 0x10cf, 0x10e1, 0x10ed, 0x10ed, 0x10ed, - 0x10ed, 0x10f7, 0x1105, 0x1111, 0x1111, 0x111f, 0x1129, 0x1139, + 0x0f1b, 0x0f2c, 0x0f36, 0x0f36, 0x0f46, 0x0f46, 0x0f5a, 0x0f68, + 0x0f74, 0x0f91, 0x0f91, 0x0f99, 0x0fa3, 0x0fa3, 0x0faf, 0x0fbd, + 0x0fbd, 0x0fbd, 0x0fc9, 0x0fc9, 0x0fc9, 0x0fde, 0x0ff1, 0x0ff1, + 0x1006, 0x1014, 0x101e, 0x1026, 0x1030, 0x1038, 0x104c, 0x104c, + 0x1056, 0x1056, 0x1056, 0x1056, 0x105e, 0x105e, 0x1068, 0x107a, + 0x107a, 0x107a, 0x107a, 0x107a, 0x107a, 0x108c, 0x108c, 0x109a, + 0x10aa, 0x10b6, 0x10cf, 0x10cf, 0x10cf, 0x10e1, 0x10ed, 0x10ed, + 0x10ed, 0x10ed, 0x10f7, 0x1105, 0x1111, 0x1111, 0x111f, 0x1129, // Entry 180 - 1BF - 0x1139, 0x1139, 0x1139, 0x1139, 0x1139, 0x1145, 0x114d, 0x114d, - 0x114d, 0x1166, 0x1176, 0x1180, 0x1188, 0x1194, 0x1194, 0x1194, - 0x1194, 0x11a4, 0x11a4, 0x11ae, 0x11bc, 0x11ca, 0x11dc, 0x11e6, - 0x11e6, 0x11f0, 0x11fc, 0x1208, 0x1208, 0x1208, 0x121d, 0x121d, - 0x121d, 0x1229, 0x1241, 0x124f, 0x1261, 0x126b, 0x1273, 0x1273, - 0x1273, 0x1288, 0x1292, 0x12a4, 0x12b2, 0x12b2, 0x12b2, 0x12c2, - 0x12c2, 0x12c2, 0x12d6, 0x12d6, 0x12ef, 0x12fd, 0x1307, 0x1315, - 0x1315, 0x1315, 0x1315, 0x131f, 0x1332, 0x1332, 0x133f, 0x1352, + 0x1139, 0x1139, 0x1139, 0x1139, 0x1139, 0x1139, 0x1145, 0x1145, + 0x114d, 0x114d, 0x114d, 0x1166, 0x1176, 0x1180, 0x1188, 0x1194, + 0x1194, 0x1194, 0x1194, 0x11a4, 0x11a4, 0x11ae, 0x11bc, 0x11ca, + 0x11dc, 0x11e6, 0x11e6, 0x11f0, 0x11fc, 0x1208, 0x1208, 0x1208, + 0x121d, 0x121d, 0x121d, 0x1229, 0x1241, 0x124f, 0x1261, 0x126b, + 0x1273, 0x1273, 0x1273, 0x1288, 0x1292, 0x12a4, 0x12b2, 0x12b2, + 0x12b2, 0x12c2, 0x12c2, 0x12c2, 0x12d6, 0x12d6, 0x12ef, 0x12fd, + 0x1307, 0x1315, 0x1315, 0x1315, 0x1315, 0x131f, 0x1332, 0x1332, // Entry 1C0 - 1FF - 0x1352, 0x136f, 0x1383, 0x1393, 0x139f, 0x13ad, 0x13b9, 0x13d4, - 0x13ea, 0x13f8, 0x140a, 0x1422, 0x1434, 0x1434, 0x1434, 0x1434, - 0x1434, 0x1447, 0x1447, 0x1459, 0x1459, 0x1459, 0x146b, 0x146b, - 0x1488, 0x1488, 0x1488, 0x149c, 0x14aa, 0x14c0, 0x14c0, 0x14c0, - 0x14c0, 0x14cc, 0x14cc, 0x14cc, 0x14cc, 0x14dc, 0x14dc, 0x14ec, - 0x14f6, 0x1517, 0x1517, 0x1521, 0x152f, 0x152f, 0x152f, 0x152f, - 0x1541, 0x154b, 0x154b, 0x154b, 0x154b, 0x154b, 0x154b, 0x1559, - 0x1559, 0x156c, 0x156c, 0x156c, 0x1572, 0x1572, 0x157e, 0x157e, + 0x133f, 0x1352, 0x1352, 0x136f, 0x1383, 0x1393, 0x139f, 0x13ad, + 0x13b9, 0x13d4, 0x13ea, 0x13f8, 0x140a, 0x1422, 0x1434, 0x1434, + 0x1434, 0x1434, 0x1434, 0x1447, 0x1447, 0x1459, 0x1459, 0x1459, + 0x146b, 0x146b, 0x1488, 0x1488, 0x1488, 0x149c, 0x14aa, 0x14c0, + 0x14c0, 0x14c0, 0x14c0, 0x14cc, 0x14cc, 0x14cc, 0x14cc, 0x14dc, + 0x14dc, 0x14ec, 0x14f6, 0x1517, 0x1517, 0x1521, 0x152f, 0x152f, + 0x152f, 0x152f, 0x1541, 0x154b, 0x154b, 0x154b, 0x154b, 0x154b, + 0x154b, 0x1559, 0x1559, 0x156c, 0x156c, 0x156c, 0x1572, 0x1572, // Entry 200 - 23F - 0x157e, 0x1593, 0x15a6, 0x15bb, 0x15ce, 0x15de, 0x15ee, 0x1609, - 0x1615, 0x1615, 0x1615, 0x1621, 0x162b, 0x163b, 0x163b, 0x163b, - 0x164b, 0x164b, 0x164b, 0x1657, 0x1657, 0x1667, 0x1671, 0x167f, - 0x1687, 0x1697, 0x1697, 0x16a7, 0x16b7, 0x16b7, 0x16c5, 0x16dc, - 0x16ed, 0x16ed, 0x16ed, 0x16ed, 0x16ff, 0x16ff, 0x170d, 0x171b, - 0x171b, 0x172d, 0x172d, 0x173b, 0x174b, 0x175d, 0x1765, 0x176b, - 0x176b, 0x176b, 0x176b, 0x176b, 0x1775, 0x1775, 0x1775, 0x1775, - 0x1781, 0x178b, 0x1793, 0x1793, 0x1793, 0x179f, 0x179f, 0x179f, + 0x157e, 0x157e, 0x157e, 0x1593, 0x15a6, 0x15bb, 0x15ce, 0x15de, + 0x15ee, 0x1609, 0x1615, 0x1615, 0x1615, 0x1621, 0x162b, 0x163b, + 0x163b, 0x163b, 0x164b, 0x164b, 0x164b, 0x1657, 0x1657, 0x1667, + 0x1671, 0x167f, 0x1687, 0x1697, 0x1697, 0x16a7, 0x16b7, 0x16b7, + 0x16c5, 0x16dc, 0x16ed, 0x16ed, 0x16ed, 0x16ed, 0x16ff, 0x16ff, + 0x170d, 0x171b, 0x171b, 0x172d, 0x172d, 0x173b, 0x174b, 0x175d, + 0x1791, 0x1797, 0x1797, 0x1797, 0x1797, 0x1797, 0x17a1, 0x17a1, + 0x17a1, 0x17a1, 0x17ad, 0x17b7, 0x17bf, 0x17bf, 0x17bf, 0x17cb, // Entry 240 - 27F - 0x17a5, 0x17b1, 0x17b1, 0x17b1, 0x17b1, 0x17b1, 0x17c1, 0x17c1, - 0x17c1, 0x17cd, 0x17cd, 0x17d7, 0x180d, 0x1815, 0x1815, 0x1815, - 0x1832, 0x184f, 0x1876, 0x189f, 0x18c4, 0x18e8, 0x190e, 0x192b, - 0x192b, 0x192b, 0x1948, 0x195f, 0x195f, 0x196d, 0x198e, 0x19b1, - 0x19c5, 0x19e2, 0x19e2, 0x19f7, 0x1a0e, + 0x17cb, 0x17cb, 0x17d1, 0x17dd, 0x17dd, 0x17dd, 0x17dd, 0x17dd, + 0x17ed, 0x17ed, 0x17ed, 0x17f9, 0x17f9, 0x1803, 0x1839, 0x1841, + 0x1841, 0x1841, 0x185e, 0x187b, 0x18a2, 0x18cb, 0x18f0, 0x1914, + 0x193a, 0x1957, 0x1957, 0x1957, 0x1974, 0x198b, 0x198b, 0x1999, + 0x19ba, 0x19dd, 0x19f1, 0x1a0e, 0x1a0e, 0x1a23, 0x1a3a, }, }, { // ksb @@ -7961,7 +8362,7 @@ var langHeaders = [252]header{ "paliKiholanziKipunjabiKipolandiKilenoKiomaniaKilusiKinyalwandaKisoma" + "liKiswidiKitamilKitailandiKituukiKiuklaniaKiulduKivietinamuKiyolubaK" + "ichinaKizuluKishambaa", - []uint16{ // 375 elements + []uint16{ // 376 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x000e, 0x000e, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x001f, 0x0029, @@ -8014,7 +8415,7 @@ var langHeaders = [252]header{ 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, - 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x016d, + 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x016d, }, }, { // ksf @@ -8023,7 +8424,7 @@ var langHeaders = [252]header{ "riitalyɛ́nrijapɔ́ŋrijawanɛ́rikmɛrrikɔrɛɛ́rimalaíribirmánrinepalɛ́riɔ" + "lándɛ́ripɛnjabíripɔlɔ́nripɔrtugɛ́rirɔmánrirísrirwandarisomalíriswɛ́d" + "ǝritamúlritaíriturkriukrɛ́nriurdúriwyɛtnámriyúubaricinɔárizúlurikpa", - []uint16{ // 376 elements + []uint16{ // 377 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x000e, 0x000e, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0020, 0x002a, @@ -8076,7 +8477,8 @@ var langHeaders = [252]header{ 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, - 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x01a0, + 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, + 0x01a0, }, }, { // ksh @@ -8140,7 +8542,7 @@ var langHeaders = [252]header{ "chBrasilljaanesch PochtojeseschPochtojesesch uß PochtojallSärbokowat" + "eschSchinehsesch (eijfache Schreff)Schinehsesch (tradizjonälle Schre" + "ff)", - []uint16{ // 613 elements + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0009, 0x0014, 0x0021, 0x002a, 0x0033, 0x003d, 0x004b, 0x0054, 0x0060, 0x0069, 0x0073, 0x0086, 0x0093, 0x00a0, 0x00ac, @@ -8175,59 +8577,59 @@ var langHeaders = [252]header{ 0x082a, 0x082a, 0x082f, 0x082f, 0x0833, 0x0833, 0x0833, 0x0833, 0x0842, 0x0842, 0x0845, 0x0845, 0x0845, 0x0845, 0x0857, 0x0857, 0x0860, 0x086b, 0x0870, 0x0870, 0x087c, 0x0888, 0x0888, 0x0892, - 0x0892, 0x0892, 0x0892, 0x0892, 0x0892, 0x089e, 0x08ad, 0x08ad, - 0x08ad, 0x08b8, 0x08c0, 0x08c0, 0x08c9, 0x08c9, 0x08d5, 0x08e0, - // Entry 100 - 13F - 0x08f3, 0x08fb, 0x08fb, 0x08fb, 0x08fb, 0x0907, 0x0911, 0x091c, - 0x0928, 0x0928, 0x0928, 0x0933, 0x0933, 0x0939, 0x0939, 0x0947, - 0x0947, 0x094f, 0x0963, 0x0970, 0x0970, 0x097d, 0x0984, 0x098d, - 0x099a, 0x09a8, 0x09b2, 0x09b2, 0x09c1, 0x09d1, 0x09d8, 0x09d8, - 0x09d8, 0x09e5, 0x09e5, 0x09ed, 0x09ed, 0x09ed, 0x09ed, 0x09ed, - 0x09ed, 0x09ed, 0x09f9, 0x09fc, 0x09fc, 0x09fc, 0x09fc, 0x09fc, - 0x09fc, 0x0a15, 0x0a25, 0x0a25, 0x0a25, 0x0a25, 0x0a25, 0x0a25, - 0x0a32, 0x0a32, 0x0a32, 0x0a32, 0x0a42, 0x0a42, 0x0a42, 0x0a42, + 0x0892, 0x0892, 0x0892, 0x0892, 0x0892, 0x0892, 0x089e, 0x08ad, + 0x08ad, 0x08ad, 0x08b8, 0x08c0, 0x08c0, 0x08c9, 0x08c9, 0x08d5, + // Entry 100 - 13F + 0x08e0, 0x08f3, 0x08fb, 0x08fb, 0x08fb, 0x08fb, 0x0907, 0x0911, + 0x091c, 0x0928, 0x0928, 0x0928, 0x0933, 0x0933, 0x0939, 0x0939, + 0x0947, 0x0947, 0x094f, 0x0963, 0x0970, 0x0970, 0x097d, 0x0984, + 0x098d, 0x099a, 0x09a8, 0x09b2, 0x09b2, 0x09c1, 0x09d1, 0x09d8, + 0x09d8, 0x09d8, 0x09e5, 0x09e5, 0x09ed, 0x09ed, 0x09ed, 0x09ed, + 0x09ed, 0x09ed, 0x09ed, 0x09f9, 0x09fc, 0x09fc, 0x09fc, 0x09fc, + 0x09fc, 0x09fc, 0x0a15, 0x0a25, 0x0a25, 0x0a25, 0x0a25, 0x0a25, + 0x0a25, 0x0a32, 0x0a32, 0x0a32, 0x0a32, 0x0a42, 0x0a42, 0x0a42, // Entry 140 - 17F - 0x0a42, 0x0a42, 0x0a42, 0x0a4e, 0x0a4e, 0x0a58, 0x0a58, 0x0a5d, - 0x0a6c, 0x0a6c, 0x0a70, 0x0a79, 0x0a7f, 0x0a8a, 0x0a96, 0x0aa4, - 0x0abb, 0x0ac5, 0x0acb, 0x0acb, 0x0ade, 0x0ade, 0x0ae7, 0x0ae7, - 0x0af1, 0x0af1, 0x0af1, 0x0b02, 0x0b02, 0x0b0e, 0x0b0e, 0x0b0e, - 0x0b18, 0x0b24, 0x0b24, 0x0b3f, 0x0b3f, 0x0b44, 0x0b44, 0x0b52, - 0x0b52, 0x0b52, 0x0b56, 0x0b65, 0x0b6d, 0x0b6d, 0x0b7b, 0x0b7b, - 0x0b81, 0x0ba1, 0x0ba1, 0x0ba1, 0x0bab, 0x0bb5, 0x0bb5, 0x0bc1, - 0x0bc8, 0x0bd1, 0x0bd1, 0x0bdb, 0x0be0, 0x0bf3, 0x0bf3, 0x0bfb, + 0x0a42, 0x0a42, 0x0a42, 0x0a42, 0x0a4e, 0x0a4e, 0x0a58, 0x0a58, + 0x0a5d, 0x0a6c, 0x0a6c, 0x0a70, 0x0a79, 0x0a7f, 0x0a8a, 0x0a96, + 0x0aa4, 0x0abb, 0x0ac5, 0x0acb, 0x0acb, 0x0ade, 0x0ade, 0x0ae7, + 0x0ae7, 0x0af1, 0x0af1, 0x0af1, 0x0b02, 0x0b02, 0x0b0e, 0x0b0e, + 0x0b0e, 0x0b18, 0x0b24, 0x0b24, 0x0b3f, 0x0b3f, 0x0b44, 0x0b44, + 0x0b52, 0x0b52, 0x0b52, 0x0b56, 0x0b65, 0x0b6d, 0x0b6d, 0x0b7b, + 0x0b7b, 0x0b81, 0x0ba1, 0x0ba1, 0x0ba1, 0x0bab, 0x0bb5, 0x0bb5, + 0x0bc1, 0x0bc8, 0x0bd1, 0x0bd1, 0x0bdb, 0x0be0, 0x0bf3, 0x0bf3, // Entry 180 - 1BF - 0x0bfb, 0x0bfb, 0x0bfb, 0x0c01, 0x0c01, 0x0c01, 0x0c08, 0x0c15, - 0x0c15, 0x0c1e, 0x0c1e, 0x0c28, 0x0c2b, 0x0c2b, 0x0c33, 0x0c33, + 0x0bfb, 0x0bfb, 0x0bfb, 0x0bfb, 0x0c01, 0x0c01, 0x0c01, 0x0c01, + 0x0c08, 0x0c15, 0x0c15, 0x0c1e, 0x0c1e, 0x0c28, 0x0c2b, 0x0c2b, 0x0c33, 0x0c33, 0x0c33, 0x0c33, 0x0c33, 0x0c33, 0x0c33, 0x0c33, - 0x0c33, 0x0c3b, 0x0c3b, 0x0c3b, 0x0c3b, 0x0c3b, 0x0c3b, 0x0c3b, - 0x0c3b, 0x0c3b, 0x0c3b, 0x0c3b, 0x0c4e, 0x0c4e, 0x0c4e, 0x0c4e, - 0x0c55, 0x0c72, 0x0c77, 0x0c84, 0x0c84, 0x0c84, 0x0c84, 0x0c90, - 0x0c90, 0x0c90, 0x0c9f, 0x0c9f, 0x0c9f, 0x0ca9, 0x0ca9, 0x0ca9, - 0x0ca9, 0x0cae, 0x0cb8, 0x0cbd, 0x0cbd, 0x0cbd, 0x0cbd, 0x0cc7, + 0x0c33, 0x0c33, 0x0c33, 0x0c3b, 0x0c3b, 0x0c3b, 0x0c3b, 0x0c3b, + 0x0c3b, 0x0c3b, 0x0c3b, 0x0c3b, 0x0c3b, 0x0c3b, 0x0c4e, 0x0c4e, + 0x0c4e, 0x0c4e, 0x0c55, 0x0c72, 0x0c77, 0x0c84, 0x0c84, 0x0c84, + 0x0c84, 0x0c90, 0x0c90, 0x0c90, 0x0c9f, 0x0c9f, 0x0c9f, 0x0ca9, + 0x0ca9, 0x0ca9, 0x0ca9, 0x0cae, 0x0cb8, 0x0cbd, 0x0cbd, 0x0cbd, // Entry 1C0 - 1FF + 0x0cbd, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, - 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, - 0x0cc7, 0x0cd3, 0x0cd3, 0x0cd3, 0x0cd3, 0x0cd3, 0x0cd3, 0x0cd3, - 0x0cda, 0x0cda, 0x0cda, 0x0cda, 0x0cda, 0x0ce6, 0x0ce6, 0x0ce6, - 0x0cf0, 0x0cf0, 0x0cf0, 0x0cf0, 0x0cf0, 0x0cf0, 0x0cf8, 0x0cf8, + 0x0cc7, 0x0cc7, 0x0cc7, 0x0cd3, 0x0cd3, 0x0cd3, 0x0cd3, 0x0cd3, + 0x0cd3, 0x0cd3, 0x0cda, 0x0cda, 0x0cda, 0x0cda, 0x0cda, 0x0ce6, + 0x0ce6, 0x0ce6, 0x0cf0, 0x0cf0, 0x0cf0, 0x0cf0, 0x0cf0, 0x0cf0, 0x0cf8, 0x0cf8, 0x0cf8, 0x0cf8, 0x0cf8, 0x0cf8, 0x0cf8, 0x0cf8, - 0x0d07, 0x0d07, 0x0d07, 0x0d16, 0x0d16, 0x0d16, 0x0d16, 0x0d16, + 0x0cf8, 0x0cf8, 0x0d07, 0x0d07, 0x0d07, 0x0d16, 0x0d16, 0x0d16, // Entry 200 - 23F - 0x0d16, 0x0d16, 0x0d29, 0x0d3d, 0x0d3d, 0x0d3d, 0x0d3d, 0x0d3d, - 0x0d3d, 0x0d3d, 0x0d3d, 0x0d3d, 0x0d3d, 0x0d3d, 0x0d48, 0x0d48, - 0x0d56, 0x0d56, 0x0d56, 0x0d56, 0x0d56, 0x0d56, 0x0d5e, 0x0d63, - 0x0d63, 0x0d63, 0x0d63, 0x0d70, 0x0d70, 0x0d70, 0x0d70, 0x0d70, - 0x0d79, 0x0d79, 0x0d79, 0x0d79, 0x0d79, 0x0d79, 0x0d79, 0x0d79, - 0x0d80, 0x0d8e, 0x0dac, 0x0db7, 0x0db7, 0x0dc1, 0x0dd7, 0x0dd7, - 0x0dd7, 0x0dd7, 0x0dd7, 0x0dd7, 0x0dd7, 0x0dd7, 0x0dd7, 0x0de4, - 0x0deb, 0x0df6, 0x0df6, 0x0df6, 0x0df6, 0x0e02, 0x0e02, 0x0e02, + 0x0d16, 0x0d16, 0x0d16, 0x0d16, 0x0d29, 0x0d3d, 0x0d3d, 0x0d3d, + 0x0d3d, 0x0d3d, 0x0d3d, 0x0d3d, 0x0d3d, 0x0d3d, 0x0d3d, 0x0d3d, + 0x0d48, 0x0d48, 0x0d56, 0x0d56, 0x0d56, 0x0d56, 0x0d56, 0x0d56, + 0x0d5e, 0x0d63, 0x0d63, 0x0d63, 0x0d63, 0x0d70, 0x0d70, 0x0d70, + 0x0d70, 0x0d70, 0x0d79, 0x0d79, 0x0d79, 0x0d79, 0x0d79, 0x0d79, + 0x0d79, 0x0d79, 0x0d80, 0x0d8e, 0x0dac, 0x0db7, 0x0db7, 0x0dc1, + 0x0dd7, 0x0dd7, 0x0dd7, 0x0dd7, 0x0dd7, 0x0dd7, 0x0dd7, 0x0dd7, + 0x0dd7, 0x0de4, 0x0deb, 0x0df6, 0x0df6, 0x0df6, 0x0df6, 0x0e02, // Entry 240 - 27F - 0x0e02, 0x0e02, 0x0e02, 0x0e0a, 0x0e0a, 0x0e1d, 0x0e1d, 0x0e1d, - 0x0e1d, 0x0e1d, 0x0e1d, 0x0e23, 0x0e31, 0x0e3b, 0x0e4f, 0x0e66, - 0x0e7d, 0x0e94, 0x0eae, 0x0ec2, 0x0ee1, 0x0efa, 0x0f1c, 0x0f35, - 0x0f4c, 0x0f4c, 0x0f64, 0x0f81, 0x0fa0, 0x0faa, 0x0fc7, 0x0fe3, - 0x0fe3, 0x0ff2, 0x0ff2, 0x1011, 0x1036, + 0x0e02, 0x0e02, 0x0e02, 0x0e02, 0x0e02, 0x0e0a, 0x0e0a, 0x0e1d, + 0x0e1d, 0x0e1d, 0x0e1d, 0x0e1d, 0x0e1d, 0x0e23, 0x0e31, 0x0e3b, + 0x0e4f, 0x0e66, 0x0e7d, 0x0e94, 0x0eae, 0x0ec2, 0x0ee1, 0x0efa, + 0x0f1c, 0x0f35, 0x0f4c, 0x0f4c, 0x0f64, 0x0f81, 0x0fa0, 0x0faa, + 0x0fc7, 0x0fe3, 0x0fe3, 0x0ff2, 0x0ff2, 0x1011, 0x1036, }, }, { // kw @@ -8260,7 +8662,7 @@ var langHeaders = [252]header{ "KɨmelésiaKɨbáamaKɨnepáaliKɨholáanziKɨpúnjabiKɨpólandiKɨréenoKɨromaní" + "aKɨrúusiKɨnyarwáandaKɨsómáaliKɨswíidiKɨtamíiliKɨtáilandiKɨturúukiKɨu" + "kɨraníaKɨúrduKɨvietináamuKɨyorúubaKɨchíinaKɨzúuluKɨlaangi", - []uint16{ // 381 elements + []uint16{ // 382 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x0016, 0x0016, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x002d, 0x003a, @@ -8314,7 +8716,7 @@ var langHeaders = [252]header{ 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, - 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01ef, + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01ef, }, }, { // lb @@ -8399,19 +8801,19 @@ var langHeaders = [252]header{ "iv-SproochTokelauaneschTsachureschKlingoneschTlingit-SproochTaleschT" + "amaseqTsonga-SproochNeimelaneseschTuroyoSeediqTsakoneschTsimshian-Sp" + "roochTateschTumbuka-SproochElliceaneschTasawaqTuwineschMëttlert-Atla" + - "s-TamazightUdmurteschUgariteschMbundu-SproochRootVai-SproochVenezesc" + - "hWepseschWestflämeschMainfränkeschWoteschVoroVunjoWalliserdäitschWal" + - "amo-SproochWarayWasho-SproochWu-ChineseschKalmückeschMingrelesch Spr" + - "oochSogaYao-SproochYapeseschYangbenYembaNheengatuKantoneseschZapotek" + - "eschBliss-SymbolerSeelänneschZenagaMarokkanescht Standard-TamazightZ" + - "uni-SproochKeng SproochinhalterZazaModernt HéicharabeschÉisträichesc" + - "ht DäitschSchwäizer HéichdäitschAustralescht EngleschKanadescht Engl" + - "eschBritescht EngleschAmerikanescht EngleschLatäinamerikanescht Spue" + - "neschEuropäescht SpueneschMexikanescht SpueneschKanadescht Franséisc" + - "hSchwäizer FranséischFlämeschBrasilianescht PortugiseschEuropäescht " + - "PortugiseschMoldaweschSerbo-KroateschKongo-SwahiliChinesesch (verein" + - "facht)Chinesesch (traditionell)", - []uint16{ // 613 elements + "s-TamazightUdmurteschUgariteschMbundu-SproochOnbestëmmt SproochVai-S" + + "proochVenezeschWepseschWestflämeschMainfränkeschWoteschVoroVunjoWall" + + "iserdäitschWalamo-SproochWarayWasho-SproochWu-ChineseschKalmückeschM" + + "ingrelesch SproochSogaYao-SproochYapeseschYangbenYembaNheengatuKanto" + + "neseschZapotekeschBliss-SymbolerSeelänneschZenagaMarokkanescht Stand" + + "ard-TamazightZuni-SproochKeng SproochinhalterZazaModernt Héicharabes" + + "chÉisträichescht DäitschSchwäizer HéichdäitschAustralescht EngleschK" + + "anadescht EngleschBritescht EngleschAmerikanescht EngleschLatäinamer" + + "ikanescht SpueneschEuropäescht SpueneschMexikanescht SpueneschKanade" + + "scht FranséischSchwäizer FranséischFlämeschBrasilianescht Portugises" + + "chEuropäescht PortugiseschMoldaweschSerbo-KroateschKongo-SwahiliChin" + + "esesch (vereinfacht)Chinesesch (traditionell)", + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0004, 0x000e, 0x0017, 0x0020, 0x0024, 0x002d, 0x0039, 0x0041, 0x004c, 0x0054, 0x005a, 0x006b, 0x0077, 0x0085, 0x008f, @@ -8446,59 +8848,59 @@ var langHeaders = [252]header{ 0x0871, 0x0878, 0x0885, 0x088b, 0x088f, 0x0894, 0x089a, 0x089a, 0x08a5, 0x08b2, 0x08be, 0x08ca, 0x08cd, 0x08de, 0x08e9, 0x08f5, 0x0900, 0x0906, 0x090a, 0x0910, 0x091a, 0x0925, 0x0929, 0x092d, - 0x0934, 0x0939, 0x0942, 0x0948, 0x094d, 0x0954, 0x0958, 0x0967, - 0x0974, 0x097e, 0x0982, 0x0989, 0x0990, 0x0999, 0x09a1, 0x09a9, - // Entry 100 - 13F - 0x09af, 0x09b7, 0x09bf, 0x09cc, 0x09cc, 0x09d7, 0x09e5, 0x09ef, - 0x09f4, 0x0a04, 0x0a09, 0x0a0f, 0x0a1c, 0x0a21, 0x0a26, 0x0a34, - 0x0a41, 0x0a46, 0x0a59, 0x0a63, 0x0a70, 0x0a76, 0x0a7c, 0x0a80, - 0x0a8b, 0x0a94, 0x0a9a, 0x0aa2, 0x0ab1, 0x0ab9, 0x0abf, 0x0acd, - 0x0adb, 0x0ae3, 0x0aed, 0x0af8, 0x0afd, 0x0b0f, 0x0b1c, 0x0b2f, - 0x0b3c, 0x0b48, 0x0b51, 0x0b5b, 0x0b65, 0x0b73, 0x0b77, 0x0b84, - 0x0b99, 0x0b9d, 0x0baa, 0x0bb0, 0x0bc5, 0x0bd5, 0x0be1, 0x0bee, - 0x0bf7, 0x0bfe, 0x0c0b, 0x0c17, 0x0c29, 0x0c2e, 0x0c36, 0x0c43, + 0x0934, 0x0939, 0x0942, 0x0948, 0x094d, 0x094d, 0x0954, 0x0958, + 0x0967, 0x0974, 0x097e, 0x0982, 0x0989, 0x0990, 0x0999, 0x09a1, + // Entry 100 - 13F + 0x09a9, 0x09af, 0x09b7, 0x09bf, 0x09cc, 0x09cc, 0x09d7, 0x09e5, + 0x09ef, 0x09f4, 0x0a04, 0x0a09, 0x0a0f, 0x0a1c, 0x0a21, 0x0a26, + 0x0a34, 0x0a41, 0x0a46, 0x0a59, 0x0a63, 0x0a70, 0x0a76, 0x0a7c, + 0x0a80, 0x0a8b, 0x0a94, 0x0a9a, 0x0aa2, 0x0ab1, 0x0ab9, 0x0abf, + 0x0acd, 0x0adb, 0x0ae3, 0x0aed, 0x0af8, 0x0afd, 0x0b0f, 0x0b1c, + 0x0b2f, 0x0b3c, 0x0b48, 0x0b51, 0x0b5b, 0x0b65, 0x0b73, 0x0b77, + 0x0b84, 0x0b99, 0x0b9d, 0x0baa, 0x0bb0, 0x0bc5, 0x0bd5, 0x0be1, + 0x0bee, 0x0bf7, 0x0bfe, 0x0c0b, 0x0c17, 0x0c29, 0x0c2e, 0x0c36, // Entry 140 - 17F - 0x0c52, 0x0c5f, 0x0c6f, 0x0c78, 0x0c85, 0x0c97, 0x0ca1, 0x0cad, - 0x0cba, 0x0cca, 0x0cce, 0x0cd2, 0x0cd8, 0x0ce7, 0x0cf2, 0x0cfc, - 0x0d12, 0x0d18, 0x0d1e, 0x0d25, 0x0d36, 0x0d47, 0x0d4f, 0x0d5d, - 0x0d66, 0x0d74, 0x0d77, 0x0d7c, 0x0d80, 0x0d8c, 0x0d93, 0x0d97, - 0x0d9e, 0x0daa, 0x0db1, 0x0db5, 0x0dbd, 0x0dca, 0x0dd1, 0x0ddd, - 0x0de3, 0x0dec, 0x0df0, 0x0df8, 0x0e08, 0x0e14, 0x0e1b, 0x0e27, - 0x0e35, 0x0e4e, 0x0e52, 0x0e5b, 0x0e64, 0x0e71, 0x0e79, 0x0e7e, - 0x0e85, 0x0e8f, 0x0e9e, 0x0ea4, 0x0ea9, 0x0eaf, 0x0ebc, 0x0ec4, + 0x0c43, 0x0c52, 0x0c5f, 0x0c6f, 0x0c78, 0x0c85, 0x0c97, 0x0ca1, + 0x0cad, 0x0cba, 0x0cca, 0x0cce, 0x0cd2, 0x0cd8, 0x0ce7, 0x0cf2, + 0x0cfc, 0x0d12, 0x0d18, 0x0d1e, 0x0d25, 0x0d36, 0x0d47, 0x0d4f, + 0x0d5d, 0x0d66, 0x0d74, 0x0d77, 0x0d7c, 0x0d80, 0x0d8c, 0x0d93, + 0x0d97, 0x0d9e, 0x0daa, 0x0db1, 0x0db5, 0x0dbd, 0x0dca, 0x0dd1, + 0x0ddd, 0x0de3, 0x0dec, 0x0df0, 0x0df8, 0x0e08, 0x0e14, 0x0e1b, + 0x0e27, 0x0e35, 0x0e4e, 0x0e52, 0x0e5b, 0x0e64, 0x0e71, 0x0e79, + 0x0e7e, 0x0e85, 0x0e8f, 0x0e9e, 0x0ea4, 0x0ea9, 0x0eaf, 0x0ebc, // Entry 180 - 1BF - 0x0ed6, 0x0edf, 0x0ee6, 0x0ef4, 0x0eff, 0x0f04, 0x0f11, 0x0f11, - 0x0f1d, 0x0f27, 0x0f36, 0x0f43, 0x0f4e, 0x0f5c, 0x0f64, 0x0f79, - 0x0f88, 0x0f93, 0x0f97, 0x0f9d, 0x0fa5, 0x0fb1, 0x0fc0, 0x0fce, - 0x0fd2, 0x0fd8, 0x0fe4, 0x0ff1, 0x0ffd, 0x1005, 0x1012, 0x1020, - 0x1027, 0x1035, 0x1048, 0x1055, 0x1064, 0x1072, 0x107f, 0x1088, - 0x108f, 0x109c, 0x10ac, 0x10b8, 0x10bf, 0x10c7, 0x10cc, 0x10dd, - 0x10e8, 0x10fa, 0x1108, 0x110c, 0x111a, 0x1120, 0x112c, 0x1138, - 0x113f, 0x1145, 0x114e, 0x1153, 0x115d, 0x1163, 0x1169, 0x117b, + 0x0ec4, 0x0ed6, 0x0edf, 0x0ee6, 0x0ef4, 0x0eff, 0x0f04, 0x0f04, + 0x0f11, 0x0f11, 0x0f1d, 0x0f27, 0x0f36, 0x0f43, 0x0f4e, 0x0f5c, + 0x0f64, 0x0f79, 0x0f88, 0x0f93, 0x0f97, 0x0f9d, 0x0fa5, 0x0fb1, + 0x0fc0, 0x0fce, 0x0fd2, 0x0fd8, 0x0fe4, 0x0ff1, 0x0ffd, 0x1005, + 0x1012, 0x1020, 0x1027, 0x1035, 0x1048, 0x1055, 0x1064, 0x1072, + 0x107f, 0x1088, 0x108f, 0x109c, 0x10ac, 0x10b8, 0x10bf, 0x10c7, + 0x10cc, 0x10dd, 0x10e8, 0x10fa, 0x1108, 0x110c, 0x111a, 0x1120, + 0x112c, 0x1138, 0x113f, 0x1145, 0x114e, 0x1153, 0x115d, 0x1163, // Entry 1C0 - 1FF - 0x117f, 0x1188, 0x1198, 0x11a0, 0x11a5, 0x11aa, 0x11b7, 0x11c0, - 0x11d2, 0x11e1, 0x11f3, 0x11fd, 0x1202, 0x120c, 0x120c, 0x1220, - 0x122d, 0x1237, 0x124a, 0x1255, 0x1262, 0x126a, 0x1276, 0x127f, - 0x128e, 0x129d, 0x12b9, 0x12c3, 0x12d8, 0x12e6, 0x12ee, 0x12f5, - 0x12fa, 0x1300, 0x130b, 0x1315, 0x131c, 0x1326, 0x1329, 0x1338, - 0x1341, 0x134e, 0x1355, 0x135a, 0x1361, 0x136b, 0x1372, 0x1377, - 0x1383, 0x138d, 0x1399, 0x1399, 0x139f, 0x13a3, 0x13a7, 0x13b1, - 0x13bc, 0x13c4, 0x13cf, 0x13d9, 0x13e6, 0x13f9, 0x13ff, 0x140f, + 0x1169, 0x117b, 0x117f, 0x1188, 0x1198, 0x11a0, 0x11a5, 0x11aa, + 0x11b7, 0x11c0, 0x11d2, 0x11e1, 0x11f3, 0x11fd, 0x1202, 0x120c, + 0x120c, 0x1220, 0x122d, 0x1237, 0x124a, 0x1255, 0x1262, 0x126a, + 0x1276, 0x127f, 0x128e, 0x129d, 0x12b9, 0x12c3, 0x12d8, 0x12e6, + 0x12ee, 0x12f5, 0x12fa, 0x1300, 0x130b, 0x1315, 0x131c, 0x1326, + 0x1329, 0x1338, 0x1341, 0x134e, 0x1355, 0x135a, 0x1361, 0x136b, + 0x1372, 0x1377, 0x1383, 0x138d, 0x1399, 0x1399, 0x139f, 0x13a3, + 0x13a7, 0x13b1, 0x13bc, 0x13c4, 0x13cf, 0x13d9, 0x13e6, 0x13f9, // Entry 200 - 23F - 0x1416, 0x1421, 0x142e, 0x143c, 0x144a, 0x1459, 0x1461, 0x146b, - 0x1478, 0x147c, 0x148a, 0x1498, 0x149c, 0x14a5, 0x14ae, 0x14b7, - 0x14be, 0x14c8, 0x14cc, 0x14d1, 0x14d5, 0x14e3, 0x14f0, 0x14f5, - 0x1500, 0x150d, 0x1518, 0x1523, 0x1532, 0x1539, 0x1540, 0x154e, - 0x155c, 0x1562, 0x1568, 0x1572, 0x1583, 0x158a, 0x1599, 0x15a5, - 0x15ac, 0x15b5, 0x15ce, 0x15d8, 0x15e2, 0x15f0, 0x15f4, 0x15ff, - 0x1608, 0x1610, 0x161d, 0x162b, 0x1632, 0x1636, 0x163b, 0x164b, - 0x1659, 0x165e, 0x166b, 0x166b, 0x1678, 0x1684, 0x1697, 0x169b, + 0x13ff, 0x140f, 0x1416, 0x1421, 0x142e, 0x143c, 0x144a, 0x1459, + 0x1461, 0x146b, 0x1478, 0x147c, 0x148a, 0x1498, 0x149c, 0x14a5, + 0x14ae, 0x14b7, 0x14be, 0x14c8, 0x14cc, 0x14d1, 0x14d5, 0x14e3, + 0x14f0, 0x14f5, 0x1500, 0x150d, 0x1518, 0x1523, 0x1532, 0x1539, + 0x1540, 0x154e, 0x155c, 0x1562, 0x1568, 0x1572, 0x1583, 0x158a, + 0x1599, 0x15a5, 0x15ac, 0x15b5, 0x15ce, 0x15d8, 0x15e2, 0x15f0, + 0x1603, 0x160e, 0x1617, 0x161f, 0x162c, 0x163a, 0x1641, 0x1645, + 0x164a, 0x165a, 0x1668, 0x166d, 0x167a, 0x167a, 0x1687, 0x1693, // Entry 240 - 27F - 0x16a6, 0x16af, 0x16b6, 0x16bb, 0x16c4, 0x16d0, 0x16db, 0x16e9, - 0x16f5, 0x16fb, 0x171b, 0x1727, 0x173b, 0x173f, 0x1755, 0x1755, - 0x176e, 0x1787, 0x179c, 0x17af, 0x17c1, 0x17d7, 0x17f5, 0x180b, - 0x1821, 0x1821, 0x1837, 0x184d, 0x184d, 0x1856, 0x1871, 0x188a, - 0x1894, 0x18a3, 0x18b0, 0x18c8, 0x18e1, + 0x16a6, 0x16aa, 0x16b5, 0x16be, 0x16c5, 0x16ca, 0x16d3, 0x16df, + 0x16ea, 0x16f8, 0x1704, 0x170a, 0x172a, 0x1736, 0x174a, 0x174e, + 0x1764, 0x1764, 0x177d, 0x1796, 0x17ab, 0x17be, 0x17d0, 0x17e6, + 0x1804, 0x181a, 0x1830, 0x1830, 0x1846, 0x185c, 0x185c, 0x1865, + 0x1880, 0x1899, 0x18a3, 0x18b2, 0x18bf, 0x18d7, 0x18f0, }, }, { // lg @@ -8568,7 +8970,7 @@ var langHeaders = [252]header{ "gláša WašíčuiyapiMílahaŋska WašíčuiyapiWiyóȟpeyata Spayóla IyápiSpay" + "ólaȟča IyápiFlemish IyápiPȟečhókaŋ Háŋska Iyápi IkčékaPȟečhókaŋ Háŋ" + "ska Iyápi Ȟče", - []uint16{ // 613 elements + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0000, 0x000d, 0x001b, 0x002b, 0x002b, 0x0039, 0x0039, 0x0044, 0x0053, 0x0060, 0x0060, 0x0072, 0x0080, 0x008e, 0x009b, @@ -8604,31 +9006,31 @@ var langHeaders = [252]header{ 0x06a2, 0x06a2, 0x06a2, 0x06a2, 0x06a2, 0x06a2, 0x06a2, 0x06a2, 0x06a2, 0x06a2, 0x06a2, 0x06a2, 0x06af, 0x06af, 0x06af, 0x06af, 0x06af, 0x06af, 0x06af, 0x06af, 0x06af, 0x06af, 0x06af, 0x06af, - 0x06af, 0x06af, 0x06ba, 0x06ba, 0x06ba, 0x06ba, 0x06c9, 0x06da, + 0x06af, 0x06af, 0x06af, 0x06ba, 0x06ba, 0x06ba, 0x06ba, 0x06c9, // Entry 100 - 13F - 0x06da, 0x06e7, 0x06e7, 0x06fd, 0x06fd, 0x06fd, 0x070a, 0x0717, - 0x0717, 0x0717, 0x0717, 0x0717, 0x0717, 0x0717, 0x0723, 0x0723, + 0x06da, 0x06da, 0x06e7, 0x06e7, 0x06fd, 0x06fd, 0x06fd, 0x070a, + 0x0717, 0x0717, 0x0717, 0x0717, 0x0717, 0x0717, 0x0717, 0x0723, 0x0723, 0x0723, 0x0723, 0x0723, 0x0723, 0x0723, 0x0723, 0x0723, 0x0723, 0x0723, 0x0723, 0x0723, 0x0723, 0x0723, 0x0723, 0x0723, - 0x0723, 0x0732, 0x0732, 0x0732, 0x0732, 0x0732, 0x0732, 0x0732, - 0x0732, 0x0732, 0x0732, 0x0732, 0x0732, 0x0732, 0x0732, 0x073e, + 0x0723, 0x0723, 0x0732, 0x0732, 0x0732, 0x0732, 0x0732, 0x0732, + 0x0732, 0x0732, 0x0732, 0x0732, 0x0732, 0x0732, 0x0732, 0x0732, 0x073e, 0x073e, 0x073e, 0x073e, 0x073e, 0x073e, 0x073e, 0x073e, 0x073e, 0x073e, 0x073e, 0x073e, 0x073e, 0x073e, 0x073e, 0x073e, // Entry 140 - 17F - 0x073e, 0x073e, 0x073e, 0x074d, 0x074d, 0x074d, 0x074d, 0x074d, - 0x074d, 0x074d, 0x074d, 0x074d, 0x074d, 0x074d, 0x075a, 0x075a, - 0x075a, 0x075a, 0x075a, 0x075a, 0x075a, 0x075a, 0x075a, 0x076c, - 0x076c, 0x076c, 0x076c, 0x076c, 0x076c, 0x077c, 0x077c, 0x077c, + 0x073e, 0x073e, 0x073e, 0x073e, 0x074d, 0x074d, 0x074d, 0x074d, + 0x074d, 0x074d, 0x074d, 0x074d, 0x074d, 0x074d, 0x074d, 0x075a, + 0x075a, 0x075a, 0x075a, 0x075a, 0x075a, 0x075a, 0x075a, 0x075a, + 0x076c, 0x076c, 0x076c, 0x076c, 0x076c, 0x076c, 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, - 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x0789, 0x0789, 0x0789, + 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x077c, 0x0789, 0x0789, // Entry 180 - 1BF - 0x0789, 0x0789, 0x0789, 0x0798, 0x0798, 0x0798, 0x0798, 0x0798, - 0x0798, 0x0798, 0x0798, 0x0798, 0x0798, 0x07a3, 0x07a3, 0x07a3, + 0x0789, 0x0789, 0x0789, 0x0789, 0x0798, 0x0798, 0x0798, 0x0798, + 0x0798, 0x0798, 0x0798, 0x0798, 0x0798, 0x0798, 0x0798, 0x07a3, 0x07a3, 0x07a3, 0x07a3, 0x07a3, 0x07a3, 0x07a3, 0x07a3, 0x07a3, 0x07a3, 0x07a3, 0x07a3, 0x07a3, 0x07a3, 0x07a3, 0x07a3, 0x07a3, - 0x07a3, 0x07a3, 0x07a3, 0x07a3, 0x07b2, 0x07b2, 0x07b2, 0x07b2, + 0x07a3, 0x07a3, 0x07a3, 0x07a3, 0x07a3, 0x07a3, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, @@ -8643,19 +9045,19 @@ var langHeaders = [252]header{ 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, // Entry 200 - 23F 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, - 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07c1, 0x07c1, + 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, 0x07b2, + 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, - 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07c1, 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, // Entry 240 - 27F 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, - 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, 0x07e9, 0x07e9, 0x07e9, - 0x07e9, 0x07e9, 0x07e9, 0x07e9, 0x0802, 0x081d, 0x083a, 0x084e, - 0x084e, 0x084e, 0x084e, 0x084e, 0x084e, 0x085c, 0x085c, 0x085c, - 0x085c, 0x085c, 0x085c, 0x0882, 0x08a5, + 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, 0x07de, 0x07e9, + 0x07e9, 0x07e9, 0x07e9, 0x07e9, 0x07e9, 0x07e9, 0x0802, 0x081d, + 0x083a, 0x084e, 0x084e, 0x084e, 0x084e, 0x084e, 0x084e, 0x085c, + 0x085c, 0x085c, 0x085c, 0x085c, 0x085c, 0x0882, 0x08a5, }, }, { // ln @@ -8728,7 +9130,7 @@ var langHeaders = [252]header{ " کانادافآرانسئ ئی سوٙییسآلمانی ھارگە جافئلاماندیپورتئغالی بئرئزیلپور" + "تئغالی ئوروٙپاییرومانیایی مولداڤیسأڤاحیلی کونگوچینی سادە بیەچینی سو" + "نأتی", - []uint16{ // 613 elements + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0018, 0x0018, 0x0028, 0x0030, 0x003c, 0x003c, 0x0046, 0x0050, 0x0050, 0x0050, 0x0073, 0x0081, 0x0093, 0x00a1, @@ -8763,59 +9165,59 @@ var langHeaders = [252]header{ 0x07b4, 0x07b4, 0x07bc, 0x07bc, 0x07c4, 0x07c4, 0x07c4, 0x07e7, 0x07e7, 0x07e7, 0x07e7, 0x07e7, 0x07e7, 0x07e7, 0x07e7, 0x07e7, 0x07e7, 0x07e7, 0x07ef, 0x07ef, 0x07ef, 0x07ef, 0x07ef, 0x07ef, - 0x07ef, 0x07ef, 0x07ef, 0x07ef, 0x07ef, 0x07ef, 0x07f7, 0x07f7, - 0x07f7, 0x07f7, 0x07f7, 0x07f7, 0x07f7, 0x07f7, 0x0805, 0x0805, + 0x07ef, 0x07ef, 0x07ef, 0x07ef, 0x07ef, 0x07ef, 0x07ef, 0x07f7, + 0x07f7, 0x07f7, 0x07f7, 0x07f7, 0x07f7, 0x07f7, 0x07f7, 0x0805, // Entry 100 - 13F - 0x081e, 0x081e, 0x081e, 0x081e, 0x081e, 0x081e, 0x081e, 0x081e, - 0x0828, 0x0828, 0x0828, 0x0828, 0x0828, 0x0832, 0x0832, 0x0845, - 0x0845, 0x0851, 0x0851, 0x0866, 0x0866, 0x0866, 0x086e, 0x086e, + 0x0805, 0x081e, 0x081e, 0x081e, 0x081e, 0x081e, 0x081e, 0x081e, + 0x081e, 0x0828, 0x0828, 0x0828, 0x0828, 0x0828, 0x0832, 0x0832, + 0x0845, 0x0845, 0x0851, 0x0851, 0x0866, 0x0866, 0x0866, 0x086e, 0x086e, 0x086e, 0x086e, 0x086e, 0x086e, 0x086e, 0x086e, 0x086e, - 0x086e, 0x087e, 0x087e, 0x087e, 0x087e, 0x087e, 0x087e, 0x087e, - 0x087e, 0x087e, 0x087e, 0x087e, 0x088c, 0x088c, 0x088c, 0x088c, + 0x086e, 0x086e, 0x087e, 0x087e, 0x087e, 0x087e, 0x087e, 0x087e, + 0x087e, 0x087e, 0x087e, 0x087e, 0x087e, 0x088c, 0x088c, 0x088c, 0x088c, 0x088c, 0x088c, 0x088c, 0x088c, 0x088c, 0x088c, 0x088c, - 0x088c, 0x088c, 0x088c, 0x088c, 0x08a7, 0x08a7, 0x08a7, 0x08b1, + 0x088c, 0x088c, 0x088c, 0x088c, 0x088c, 0x08a7, 0x08a7, 0x08a7, // Entry 140 - 17F - 0x08b1, 0x08b1, 0x08b1, 0x08bd, 0x08bd, 0x08bd, 0x08bd, 0x08bd, - 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, - 0x08d0, 0x08d0, 0x08e0, 0x08ec, 0x08ec, 0x08ec, 0x08ec, 0x08ec, - 0x08f8, 0x08f8, 0x08f8, 0x0902, 0x0902, 0x0902, 0x0902, 0x0902, - 0x0912, 0x0924, 0x0924, 0x0924, 0x0924, 0x0924, 0x0924, 0x093a, - 0x093a, 0x093a, 0x093a, 0x0948, 0x0948, 0x095f, 0x096f, 0x096f, - 0x096f, 0x096f, 0x096f, 0x096f, 0x096f, 0x096f, 0x097d, 0x0987, - 0x0987, 0x0987, 0x0987, 0x0987, 0x0991, 0x0991, 0x0991, 0x0991, + 0x08b1, 0x08b1, 0x08b1, 0x08b1, 0x08bd, 0x08bd, 0x08bd, 0x08bd, + 0x08bd, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, + 0x08d0, 0x08d0, 0x08d0, 0x08e0, 0x08ec, 0x08ec, 0x08ec, 0x08ec, + 0x08ec, 0x08f8, 0x08f8, 0x08f8, 0x0902, 0x0902, 0x0902, 0x0902, + 0x0902, 0x0912, 0x0924, 0x0924, 0x0924, 0x0924, 0x0924, 0x0924, + 0x093a, 0x093a, 0x093a, 0x093a, 0x0948, 0x0948, 0x095f, 0x096f, + 0x096f, 0x096f, 0x096f, 0x096f, 0x096f, 0x096f, 0x096f, 0x097d, + 0x0987, 0x0987, 0x0987, 0x0987, 0x0987, 0x0991, 0x0991, 0x0991, // Entry 180 - 1BF - 0x0991, 0x0991, 0x0991, 0x099f, 0x099f, 0x099f, 0x099f, 0x09b4, - 0x09b4, 0x09b4, 0x09b4, 0x09b4, 0x09ba, 0x09ba, 0x09c6, 0x09c6, - 0x09c6, 0x09c6, 0x09c6, 0x09c6, 0x09c6, 0x09c6, 0x09c6, 0x09d2, - 0x09d2, 0x09d2, 0x09d2, 0x09d2, 0x09da, 0x09e8, 0x09e8, 0x09fd, - 0x0a07, 0x0a07, 0x0a07, 0x0a07, 0x0a07, 0x0a15, 0x0a15, 0x0a15, - 0x0a25, 0x0a25, 0x0a25, 0x0a25, 0x0a25, 0x0a25, 0x0a25, 0x0a25, - 0x0a3b, 0x0a3b, 0x0a3b, 0x0a43, 0x0a58, 0x0a58, 0x0a58, 0x0a58, - 0x0a58, 0x0a68, 0x0a68, 0x0a68, 0x0a68, 0x0a68, 0x0a72, 0x0a72, + 0x0991, 0x0991, 0x0991, 0x0991, 0x099f, 0x099f, 0x099f, 0x099f, + 0x099f, 0x09b4, 0x09b4, 0x09b4, 0x09b4, 0x09b4, 0x09ba, 0x09ba, + 0x09c6, 0x09c6, 0x09c6, 0x09c6, 0x09c6, 0x09c6, 0x09c6, 0x09c6, + 0x09c6, 0x09d2, 0x09d2, 0x09d2, 0x09d2, 0x09d2, 0x09da, 0x09e8, + 0x09e8, 0x09fd, 0x0a07, 0x0a07, 0x0a07, 0x0a07, 0x0a07, 0x0a15, + 0x0a15, 0x0a15, 0x0a25, 0x0a25, 0x0a25, 0x0a25, 0x0a25, 0x0a25, + 0x0a25, 0x0a25, 0x0a3b, 0x0a3b, 0x0a3b, 0x0a43, 0x0a58, 0x0a58, + 0x0a58, 0x0a58, 0x0a58, 0x0a68, 0x0a68, 0x0a68, 0x0a68, 0x0a68, // Entry 1C0 - 1FF - 0x0a7e, 0x0a7e, 0x0a7e, 0x0a91, 0x0a91, 0x0a91, 0x0a91, 0x0a91, + 0x0a72, 0x0a72, 0x0a7e, 0x0a7e, 0x0a7e, 0x0a91, 0x0a91, 0x0a91, 0x0a91, 0x0a91, 0x0a91, 0x0a91, 0x0a91, 0x0a91, 0x0a91, 0x0a91, 0x0a91, 0x0a91, 0x0a91, 0x0a91, 0x0a91, 0x0a91, 0x0a91, 0x0a91, - 0x0a91, 0x0a99, 0x0a99, 0x0a99, 0x0a99, 0x0a99, 0x0a99, 0x0a99, - 0x0aa3, 0x0aa3, 0x0aa3, 0x0aa3, 0x0aa3, 0x0aa3, 0x0aab, 0x0aab, - 0x0aab, 0x0aab, 0x0abd, 0x0abd, 0x0abd, 0x0abd, 0x0abd, 0x0ac9, - 0x0ac9, 0x0ac9, 0x0ac9, 0x0ade, 0x0ade, 0x0ae6, 0x0ae6, 0x0ae6, - 0x0b01, 0x0b01, 0x0b01, 0x0b11, 0x0b11, 0x0b11, 0x0b11, 0x0b11, + 0x0a91, 0x0a91, 0x0a91, 0x0a99, 0x0a99, 0x0a99, 0x0a99, 0x0a99, + 0x0a99, 0x0a99, 0x0aa3, 0x0aa3, 0x0aa3, 0x0aa3, 0x0aa3, 0x0aa3, + 0x0aab, 0x0aab, 0x0aab, 0x0aab, 0x0abd, 0x0abd, 0x0abd, 0x0abd, + 0x0abd, 0x0ac9, 0x0ac9, 0x0ac9, 0x0ac9, 0x0ade, 0x0ade, 0x0ae6, + 0x0ae6, 0x0ae6, 0x0b01, 0x0b01, 0x0b01, 0x0b11, 0x0b11, 0x0b11, // Entry 200 - 23F - 0x0b11, 0x0b24, 0x0b35, 0x0b4a, 0x0b5f, 0x0b5f, 0x0b5f, 0x0b5f, + 0x0b11, 0x0b11, 0x0b11, 0x0b24, 0x0b35, 0x0b4a, 0x0b5f, 0x0b5f, 0x0b5f, 0x0b5f, 0x0b5f, 0x0b5f, 0x0b5f, 0x0b5f, 0x0b5f, 0x0b5f, - 0x0b5f, 0x0b5f, 0x0b5f, 0x0b5f, 0x0b67, 0x0b67, 0x0b67, 0x0b67, + 0x0b5f, 0x0b5f, 0x0b5f, 0x0b5f, 0x0b5f, 0x0b5f, 0x0b67, 0x0b67, 0x0b67, 0x0b67, 0x0b67, 0x0b67, 0x0b67, 0x0b67, 0x0b67, 0x0b67, 0x0b67, 0x0b67, 0x0b67, 0x0b67, 0x0b67, 0x0b67, 0x0b67, 0x0b67, - 0x0b75, 0x0b75, 0x0b92, 0x0b92, 0x0b92, 0x0b92, 0x0ba7, 0x0bad, - 0x0bad, 0x0bad, 0x0bad, 0x0bad, 0x0bad, 0x0bad, 0x0bbb, 0x0bbb, - 0x0bbb, 0x0bbb, 0x0bbb, 0x0bcb, 0x0bcb, 0x0bcb, 0x0bcb, 0x0bd5, + 0x0b67, 0x0b67, 0x0b75, 0x0b75, 0x0b92, 0x0b92, 0x0b92, 0x0b92, + 0x0ba7, 0x0bad, 0x0bad, 0x0bad, 0x0bad, 0x0bad, 0x0bad, 0x0bad, + 0x0bbb, 0x0bbb, 0x0bbb, 0x0bbb, 0x0bbb, 0x0bcb, 0x0bcb, 0x0bcb, // Entry 240 - 27F - 0x0bd5, 0x0bd5, 0x0bd5, 0x0bd5, 0x0bd5, 0x0bd5, 0x0bd5, 0x0bd5, - 0x0bd5, 0x0bd5, 0x0bf4, 0x0bf4, 0x0c03, 0x0c03, 0x0c14, 0x0c29, - 0x0c44, 0x0c5f, 0x0c8a, 0x0cad, 0x0cd6, 0x0cf9, 0x0d23, 0x0d44, - 0x0d63, 0x0d63, 0x0d83, 0x0da3, 0x0dbf, 0x0dd1, 0x0df2, 0x0e17, - 0x0e38, 0x0e38, 0x0e53, 0x0e6b, 0x0e80, + 0x0bcb, 0x0bd5, 0x0bd5, 0x0bd5, 0x0bd5, 0x0bd5, 0x0bd5, 0x0bd5, + 0x0bd5, 0x0bd5, 0x0bd5, 0x0bd5, 0x0bf4, 0x0bf4, 0x0c03, 0x0c03, + 0x0c14, 0x0c29, 0x0c44, 0x0c5f, 0x0c8a, 0x0cad, 0x0cd6, 0x0cf9, + 0x0d23, 0x0d44, 0x0d63, 0x0d63, 0x0d83, 0x0da3, 0x0dbf, 0x0dd1, + 0x0df2, 0x0e17, 0x0e38, 0x0e38, 0x0e53, 0x0e6b, 0x0e80, }, }, { // lt @@ -8864,7 +9266,7 @@ var langHeaders = [252]header{ "inepaliKiholanziKipunjabiKipolandiKirenoKiromaniaKirusiKinyarwandaKi" + "somaliKiswidiKitamilKitailandiKiturukiKiukraniaKiurduKivietinamuKiyo" + "rubaKichinaKizuluDholuo", - []uint16{ // 397 elements + []uint16{ // 399 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x000e, 0x000e, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x001f, 0x0029, @@ -8921,7 +9323,7 @@ var langHeaders = [252]header{ 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, // Entry 180 - 1BF 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, - 0x0169, 0x0169, 0x0169, 0x0169, 0x016f, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x016f, }, }, { // luy @@ -8931,7 +9333,7 @@ var langHeaders = [252]header{ "epaliKiholanziKipunjabiKipolandiKirenoKiromaniaKirusiKinyarwandaKiso" + "maliKiswidiKitamilKitailandiKiturukiKiukraniaKiurduKivietinamuKiyoru" + "baKichinaKizuluLuluhia", - []uint16{ // 399 elements + []uint16{ // 401 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x000e, 0x000e, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x001f, 0x0029, @@ -8988,7 +9390,8 @@ var langHeaders = [252]header{ 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, // Entry 180 - 1BF 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, - 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x016e, + 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, 0x0167, + 0x016e, }, }, { // lv @@ -9009,7 +9412,7 @@ var langHeaders = [252]header{ "marinkʉtʉ́k ɔ́ɔ̄ lswidinkʉtʉ́k ɔ́ɔ̄ ltamilnkʉtʉ́k ɔ́ɔ̄ ltainkʉtʉ́k ɔ" + "́ɔ̄ lturukinkʉtʉ́k ɔ́ɔ̄ lkraniankʉtʉ́k ɔ́ɔ̄ lurdunkʉtʉ́k ɔ́ɔ̄ lviet" + "inamunkʉtʉ́k ɔ́ɔ̄ lyorubankʉtʉ́k ɔ́ɔ̄ lchinankʉtʉ́k ɔ́ɔ̄ lzuluMaa", - []uint16{ // 408 elements + []uint16{ // 410 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0019, 0x0034, 0x0034, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x006c, 0x0089, @@ -9067,7 +9470,8 @@ var langHeaders = [252]header{ // Entry 180 - 1BF 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, - 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a6, + 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, 0x04a3, + 0x04a3, 0x04a6, }, }, { // mer @@ -9077,7 +9481,7 @@ var langHeaders = [252]header{ "epaliKĩholandiKĩpunjabuKĩpolandiKĩpochogoKĩromaniaKĩrashiaKĩrwandaKĩ" + "somaliKĩswideniKĩtamiluKĩthailandiKĩtakĩKĩukirĩniKĩurduKĩvietinamuKĩ" + "yorubaKĩchinaKĩzuluKĩmĩrũ", - []uint16{ // 413 elements + []uint16{ // 415 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0013, 0x0013, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x0026, 0x0033, @@ -9136,7 +9540,7 @@ var langHeaders = [252]header{ 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, - 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a9, + 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a9, }, }, { // mfe @@ -9145,7 +9549,7 @@ var langHeaders = [252]header{ "koreenmalebirmannepaleolandepenjabipoloneportigerouminrisrwandasomal" + "iswedwatamoulthaïtirkikrenienourdouvietnamienyorubasinwa, mandarinzo" + "uloukreol morisien", - []uint16{ // 414 elements + []uint16{ // 416 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x000a, 0x000a, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x0016, 0x001c, @@ -9204,7 +9608,7 @@ var langHeaders = [252]header{ 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, - 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0127, + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0127, }, }, { // mg @@ -9248,7 +9652,7 @@ var langHeaders = [252]header{ "IkambodiaIkoreaImalesiaIburmaInepaliIholanziIpunjabiIpolandiNrenoIro" + "maniaIrisiInyarandaIsomaliIswidiItamilItailandiIturukiIukranIhurduIv" + "yetinamuIyorubaIchinaIzuluMakua", - []uint16{ // 416 elements + []uint16{ // 418 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x000a, 0x000a, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0018, 0x0021, @@ -9307,12 +9711,13 @@ var langHeaders = [252]header{ 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, - 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x0133, + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + 0x012e, 0x0133, }, }, { // mgo "metaʼngam tisɔʼ", - []uint16{ // 559 elements + []uint16{ // 561 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -9372,7 +9777,7 @@ var langHeaders = [252]header{ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0000, 0x0000, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, @@ -9391,7 +9796,8 @@ var langHeaders = [252]header{ 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, - 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0012, + 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, + 0x0012, }, }, { // mk @@ -9431,49 +9837,50 @@ var langHeaders = [252]header{ "-NofsinharNavajoNyanjaOċċitanOġibwaOromoOdiaOssettikuPunjabiPaliPoll" + "akkPashtoPortugiżQuechuaRomanzRundiRumenRussuKinjarwandaSanskritSard" + "injanSindhiSami tat-TramuntanaSangoSinhalaSlovakkSlovenSamoanShonaSo" + - "maliAlbaniżSerbSwatiSoto tan-NofsinharSundaniżŻvezjaSwahiliTamilTelu" + + "maliAlbaniżSerbSwatiSoto tan-NofsinharSundaniżŻvediżSwahiliTamilTelu" + "guTajikTajlandiżTigrinyaTurkmeniTswanaTonganTorkTsongaTatarTaħitjanU" + - "yghurUkrenurUzbekVendaVjetnamiżVolapukWalloonWolofXhosaYiddishYoruba" + - "ZhuangĊiniżZuluAċiniżAkoliAdangmeAdygheAfriħiliAghemAjnuAkkadjenAleu" + - "tAltai tan-NofsinharIngliż AntikAngikaAramajkMapucheArapahoArawakAsu" + - "AsturianAwadhiBaluċiBaliniżBasaBejaBembaBenaBhojpuriBikolBiniSiksika" + - "BrajBodoBurjatBugineseBlinKaddoKaribAtsamCebuanoChigaChibchaChagatai" + - "ĊukiżMariChinook JargonChoctawĊipewjanCherokeeCheyenneKurd Ċentrali" + - "KoptikuTork tal-KrimeaFranċiż tas-Seselwa CreoleKashubianDakotaDargw" + - "aTaitaDelawerjanSlavDogribDinkaZarmaDogriSorbjan KomuniDwalaOlandiż " + - "MedjevaliJola-FonyiDyulaDazagaEmbuEfikEġizzjan (Antik)EkajukElamitIn" + - "gliż MedjevaliEwondoFangFilippinFonFranċiż MedjevaliFranċiż AntikFri" + - "juljanGaGayoGbayaGeezGilbertjanĠermaniż Medjevali PulitĠermaniż Anti" + - "k, PulitGondiGorontaloGotikuGreboGrieg, AntikĠermaniż tal-IżvizzeraG" + - "usiiGwiċinHaidaĦawajjanHiligaynonHittiteHmongSorbjan ta’ FuqHupaIban" + - "IbibioIlokoIngushLojbanNgombaMachameLhudi-PersjanLhudi-GħarbiKara-Ka" + - "lpakKabuljanKachinJjuKambaKawiKabardianTyapMakondeCape VerdjanKoroKh" + - "asiKotaniżKoyra ChiiniKakoKalenjinKimbunduKonkaniKosrejanKpelleKarac" + - "hay-BalkarKareljanKuruxShambalaBafiaKolonjanKumykKutenajLadinoLangiL" + - "ahndaLambaLeżgjanLakotaMongoLożiLuri tat-TramuntanaLuba-LuluwaLuisen" + - "oLundaLuoMizoLuyiaMaduriżMagahiMaithiliMakasarMandingoMasaiMokshaMan" + - "darMendeMeruMorisyenIrlandiż MedjevaliMakhuwa-MeettoMetàMicmacMinang" + - "kabauManchuManipuriMohawkMossiMundangLingwi DiversiKriekMirandiżMarw" + - "ariErzyaMazanderaniNaplitanNamaĠermaniż KomuniNewariNijasNiueanKwasi" + - "oNgiemboonNogaiNors AntikN’KoSoto tat-TramuntanaNuerNewari KlassikuN" + - "jamweżiNyankoleNyoroNzimaOsaġjanTork OttomanPangasinjanPahlaviPampan" + - "gaPapiamentoPalawjanPidgin NiġerjanPersjan AntikFeniċjuPonpejanPruss" + - "uProvenzal AntikK’iche’RaġastaniRapanwiRarotonganiRomboRomaneskAroma" + - "njanRwaSandaweSakhaSamaritan AramajkSamburuSasakSantaliNgambaySanguS" + - "qalliSkoċċiżSenaSelkupKoyraboro SenniIrlandiż AntikTachelhitShanSida" + - "moSami tan-NofsinharLule SamiInari SamiSkolt SamiSoninkeSogdienSrana" + - "n TongoSererSahoSukumaSusuSumerjanKomorjanSirjanTimneTesoTerenoTetum" + - "TigreTivTokelauKlingonTlingitTamashekNyasa TongaTok PisinTarokoTsims" + - "hianTumbukaTuvaluTasawaqTuvinjanTamazight tal-Atlas ĊentraliUdmurtUg" + - "aritikuUmbunduRootVaiVotikVunjoWalserWalamoWarayWashoKalmykSogaYaoYa" + - "peseYangbenYembaKantoniżZapotecZenagaTamazight Standard tal-MarokkZu" + - "niBla kontenut lingwistikuZazaGħarbi Standard ModernĠermaniż Awstrij" + - "akĠermaniż ŻvizzeruIngliż AwstraljanIngliż KanadiżIngliż BrittanikuI" + - "ngliż AmerikanSpanjol Latin AmerikanSpanjol EwropewSpanjol tal-Messi" + - "kuFranċiż KanadiżFranċiż ŻvizzeruSassonu KomuniFjammingPortugiż tal-" + - "BrażilPortugiż EwropewMoldovanSerbo-KroatSwahili tar-Repubblika Demo" + - "kratika tal-KongoĊiniż SimplifikatĊiniż Tradizzjonali", - []uint16{ // 613 elements + "yghurUkrenUrduUzbekVendaVjetnamiżVolapukWalloonWolofXhosaYiddishYoru" + + "baZhuangĊiniżZuluAċiniżAkoliAdangmeAdygheAfriħiliAghemAjnuAkkadjenAl" + + "eutAltai tan-NofsinharIngliż AntikAngikaAramajkMapucheArapahoArawakA" + + "suAsturianAwadhiBaluċiBaliniżBasaBejaBembaBenaBhojpuriBikolBiniSiksi" + + "kaBrajBodoBurjatBugineseBlinKaddoKaribAtsamCebuanoChigaChibchaChagat" + + "aiĊukiżMariChinook JargonChoctawĊipewjanCherokeeCheyenneKurd Ċentral" + + "iKoptikuTork tal-KrimeaFranċiż tas-Seselwa CreoleKashubianDakotaDarg" + + "waTaitaDelawerjanSlavDogribDinkaZarmaDogriSorbjan KomuniDwalaOlandiż" + + " MedjevaliJola-FonyiDyulaDazagaEmbuEfikEġizzjan (Antik)EkajukElamitI" + + "ngliż MedjevaliEwondoFangFilippinFonFranċiż MedjevaliFranċiż AntikFr" + + "ijuljanGaGayoGbayaGeezGilbertjanĠermaniż Medjevali PulitĠermaniż Ant" + + "ik, PulitGondiGorontaloGotikuGreboGrieg, AntikĠermaniż tal-Iżvizzera" + + "GusiiGwiċinHaidaĦawajjanHiligaynonHittiteHmongSorbjan ta’ FuqHupaIba" + + "nIbibioIlokoIngushLojbanNgombaMachameLhudi-PersjanLhudi-GħarbiKara-K" + + "alpakKabuljanKachinJjuKambaKawiKabardianTyapMakondeCape VerdjanKoroK" + + "hasiKotaniżKoyra ChiiniKakoKalenjinKimbunduKonkaniKosrejanKpelleKara" + + "chay-BalkarKareljanKuruxShambalaBafiaKolonjanKumykKutenajLadinoLangi" + + "LahndaLambaLeżgjanLakotaMongoLożiLuri tat-TramuntanaLuba-LuluwaLuise" + + "noLundaLuoMizoLuyiaMaduriżMagahiMaithiliMakasarMandingoMasaiMokshaMa" + + "ndarMendeMeruMorisyenIrlandiż MedjevaliMakhuwa-MeettoMetàMicmacMinan" + + "gkabauManchuManipuriMohawkMossiMundangLingwi DiversiKriekMirandiżMar" + + "wariErzyaMazanderaniNaplitanNamaĠermaniż KomuniNewariNijasNiueanKwas" + + "ioNgiemboonNogaiNors AntikN’KoSoto tat-TramuntanaNuerNewari Klassiku" + + "NjamweżiNyankoleNyoroNzimaOsaġjanTork OttomanPangasinjanPahlaviPampa" + + "ngaPapiamentoPalawjanPidgin NiġerjanPersjan AntikFeniċjuPonpejanPrus" + + "suProvenzal AntikK’iche’RaġastaniRapanwiRarotonganiRomboRomaneskArom" + + "anjanRwaSandaweSakhaSamaritan AramajkSamburuSasakSantaliNgambaySangu" + + "SqalliSkoċċiżSenaSelkupKoyraboro SenniIrlandiż AntikTachelhitShanSid" + + "amoSami tan-NofsinharLule SamiInari SamiSkolt SamiSoninkeSogdienSran" + + "an TongoSererSahoSukumaSusuSumerjanKomorjanSirjanTimneTesoTerenoTetu" + + "mTigreTivTokelauKlingonTlingitTamashekNyasa TongaTok PisinTarokoTsim" + + "shianTumbukaTuvaluTasawaqTuvinjanTamazight tal-Atlas ĊentraliUdmurtU" + + "garitikuUmbunduLingwa Mhix MagħrufaVaiVotikVunjoWalserWalamoWarayWas" + + "hoKalmykSogaYaoYapeseYangbenYembaKantoniżZapotecZenagaTamazight Stan" + + "dard tal-MarokkZuniBla kontenut lingwistikuZazaGħarbi Standard Moder" + + "nĠermaniż AwstrijakĠermaniż ŻvizzeruIngliż AwstraljanIngliż KanadiżI" + + "ngliż BrittanikuIngliż AmerikanSpanjol Latin AmerikanSpanjol Ewropew" + + "Spanjol tal-MessikuFranċiż KanadiżFranċiż ŻvizzeruSassonu KomuniFjam" + + "mingPortugiż tal-BrażilPortugiż EwropewMoldovanSerbo-KroatSwahili ta" + + "r-Repubblika Demokratika tal-KongoĊiniż SimplifikatĊiniż Tradizzjona" + + "li", + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0004, 0x000d, 0x0014, 0x001c, 0x0020, 0x0028, 0x0031, 0x0038, 0x0040, 0x0046, 0x004c, 0x0059, 0x0060, 0x0069, 0x0070, @@ -9496,71 +9903,71 @@ var langHeaders = [252]header{ 0x03f5, 0x03fe, 0x0405, 0x040b, 0x0410, 0x0415, 0x041a, 0x0425, 0x042d, 0x0436, 0x043c, 0x044f, 0x0454, 0x045b, 0x0462, 0x0468, 0x046e, 0x0473, 0x0479, 0x0481, 0x0485, 0x048a, 0x049c, 0x04a5, - 0x04ac, 0x04b3, 0x04b8, 0x04be, 0x04c3, 0x04cd, 0x04d5, 0x04dd, - 0x04e3, 0x04e9, 0x04ed, 0x04f3, 0x04f8, 0x0501, 0x0507, 0x050c, - 0x050e, 0x0513, 0x0518, 0x0522, 0x0529, 0x0530, 0x0535, 0x053a, - 0x0541, 0x0547, 0x054d, 0x0554, 0x0558, 0x0560, 0x0565, 0x056c, - 0x0572, 0x0572, 0x057b, 0x0580, 0x0584, 0x058c, 0x058c, 0x0591, - // Entry C0 - FF - 0x0591, 0x05a4, 0x05b1, 0x05b7, 0x05be, 0x05c5, 0x05c5, 0x05cc, - 0x05cc, 0x05cc, 0x05d2, 0x05d2, 0x05d2, 0x05d5, 0x05d5, 0x05dd, - 0x05dd, 0x05e3, 0x05ea, 0x05f2, 0x05f2, 0x05f6, 0x05f6, 0x05f6, - 0x05f6, 0x05fa, 0x05ff, 0x05ff, 0x0603, 0x0603, 0x0603, 0x0603, - 0x060b, 0x0610, 0x0614, 0x0614, 0x0614, 0x061b, 0x061b, 0x061b, - 0x061f, 0x061f, 0x0623, 0x0623, 0x0629, 0x0631, 0x0631, 0x0635, - 0x0635, 0x063a, 0x063f, 0x063f, 0x0644, 0x064b, 0x0650, 0x0657, - 0x065f, 0x0666, 0x066a, 0x0678, 0x067f, 0x0688, 0x0690, 0x0698, - // Entry 100 - 13F - 0x06a6, 0x06ad, 0x06ad, 0x06bc, 0x06d8, 0x06e1, 0x06e7, 0x06ed, - 0x06f2, 0x06fc, 0x0700, 0x0706, 0x070b, 0x0710, 0x0715, 0x0723, - 0x0723, 0x0728, 0x073a, 0x0744, 0x0749, 0x074f, 0x0753, 0x0757, - 0x0757, 0x0768, 0x076e, 0x0774, 0x0785, 0x0785, 0x078b, 0x078b, - 0x078f, 0x0797, 0x0797, 0x079a, 0x079a, 0x07ad, 0x07bc, 0x07bc, - 0x07bc, 0x07bc, 0x07c5, 0x07c7, 0x07c7, 0x07c7, 0x07cb, 0x07d0, - 0x07d0, 0x07d4, 0x07de, 0x07de, 0x07f8, 0x080f, 0x080f, 0x0814, - 0x081d, 0x0823, 0x0828, 0x0834, 0x084d, 0x084d, 0x084d, 0x0852, + 0x04ad, 0x04b4, 0x04b9, 0x04bf, 0x04c4, 0x04ce, 0x04d6, 0x04de, + 0x04e4, 0x04ea, 0x04ee, 0x04f4, 0x04f9, 0x0502, 0x0508, 0x050d, + 0x0511, 0x0516, 0x051b, 0x0525, 0x052c, 0x0533, 0x0538, 0x053d, + 0x0544, 0x054a, 0x0550, 0x0557, 0x055b, 0x0563, 0x0568, 0x056f, + 0x0575, 0x0575, 0x057e, 0x0583, 0x0587, 0x058f, 0x058f, 0x0594, + // Entry C0 - FF + 0x0594, 0x05a7, 0x05b4, 0x05ba, 0x05c1, 0x05c8, 0x05c8, 0x05cf, + 0x05cf, 0x05cf, 0x05d5, 0x05d5, 0x05d5, 0x05d8, 0x05d8, 0x05e0, + 0x05e0, 0x05e6, 0x05ed, 0x05f5, 0x05f5, 0x05f9, 0x05f9, 0x05f9, + 0x05f9, 0x05fd, 0x0602, 0x0602, 0x0606, 0x0606, 0x0606, 0x0606, + 0x060e, 0x0613, 0x0617, 0x0617, 0x0617, 0x061e, 0x061e, 0x061e, + 0x0622, 0x0622, 0x0626, 0x0626, 0x062c, 0x0634, 0x0634, 0x0638, + 0x0638, 0x063d, 0x0642, 0x0642, 0x0647, 0x0647, 0x064e, 0x0653, + 0x065a, 0x0662, 0x0669, 0x066d, 0x067b, 0x0682, 0x068b, 0x0693, + // Entry 100 - 13F + 0x069b, 0x06a9, 0x06b0, 0x06b0, 0x06bf, 0x06db, 0x06e4, 0x06ea, + 0x06f0, 0x06f5, 0x06ff, 0x0703, 0x0709, 0x070e, 0x0713, 0x0718, + 0x0726, 0x0726, 0x072b, 0x073d, 0x0747, 0x074c, 0x0752, 0x0756, + 0x075a, 0x075a, 0x076b, 0x0771, 0x0777, 0x0788, 0x0788, 0x078e, + 0x078e, 0x0792, 0x079a, 0x079a, 0x079d, 0x079d, 0x07b0, 0x07bf, + 0x07bf, 0x07bf, 0x07bf, 0x07c8, 0x07ca, 0x07ca, 0x07ca, 0x07ce, + 0x07d3, 0x07d3, 0x07d7, 0x07e1, 0x07e1, 0x07fb, 0x0812, 0x0812, + 0x0817, 0x0820, 0x0826, 0x082b, 0x0837, 0x0850, 0x0850, 0x0850, // Entry 140 - 17F - 0x0859, 0x085e, 0x085e, 0x0867, 0x0867, 0x0871, 0x0878, 0x087d, - 0x088e, 0x088e, 0x0892, 0x0896, 0x089c, 0x08a1, 0x08a7, 0x08a7, - 0x08a7, 0x08ad, 0x08b3, 0x08ba, 0x08c7, 0x08d4, 0x08d4, 0x08df, - 0x08e7, 0x08ed, 0x08f0, 0x08f5, 0x08f9, 0x0902, 0x0902, 0x0906, - 0x090d, 0x0919, 0x0919, 0x091d, 0x091d, 0x0922, 0x092a, 0x0936, - 0x0936, 0x0936, 0x093a, 0x0942, 0x094a, 0x094a, 0x0951, 0x0959, - 0x095f, 0x096e, 0x096e, 0x096e, 0x0976, 0x097b, 0x0983, 0x0988, - 0x0990, 0x0995, 0x099c, 0x09a2, 0x09a7, 0x09ad, 0x09b2, 0x09ba, + 0x0855, 0x085c, 0x0861, 0x0861, 0x086a, 0x086a, 0x0874, 0x087b, + 0x0880, 0x0891, 0x0891, 0x0895, 0x0899, 0x089f, 0x08a4, 0x08aa, + 0x08aa, 0x08aa, 0x08b0, 0x08b6, 0x08bd, 0x08ca, 0x08d7, 0x08d7, + 0x08e2, 0x08ea, 0x08f0, 0x08f3, 0x08f8, 0x08fc, 0x0905, 0x0905, + 0x0909, 0x0910, 0x091c, 0x091c, 0x0920, 0x0920, 0x0925, 0x092d, + 0x0939, 0x0939, 0x0939, 0x093d, 0x0945, 0x094d, 0x094d, 0x0954, + 0x095c, 0x0962, 0x0971, 0x0971, 0x0971, 0x0979, 0x097e, 0x0986, + 0x098b, 0x0993, 0x0998, 0x099f, 0x09a5, 0x09aa, 0x09b0, 0x09b5, // Entry 180 - 1BF - 0x09ba, 0x09ba, 0x09ba, 0x09c0, 0x09c0, 0x09c5, 0x09ca, 0x09dd, - 0x09dd, 0x09e8, 0x09ef, 0x09f4, 0x09f7, 0x09fb, 0x0a00, 0x0a00, - 0x0a00, 0x0a08, 0x0a08, 0x0a0e, 0x0a16, 0x0a1d, 0x0a25, 0x0a2a, - 0x0a2a, 0x0a30, 0x0a36, 0x0a3b, 0x0a3f, 0x0a47, 0x0a5a, 0x0a68, - 0x0a6d, 0x0a73, 0x0a7e, 0x0a84, 0x0a8c, 0x0a92, 0x0a97, 0x0a97, - 0x0a9e, 0x0aac, 0x0ab1, 0x0aba, 0x0ac1, 0x0ac1, 0x0ac1, 0x0ac6, - 0x0ad1, 0x0ad1, 0x0ad9, 0x0add, 0x0aee, 0x0af4, 0x0af9, 0x0aff, - 0x0aff, 0x0b05, 0x0b0e, 0x0b13, 0x0b1d, 0x0b1d, 0x0b23, 0x0b36, + 0x09bd, 0x09bd, 0x09bd, 0x09bd, 0x09c3, 0x09c3, 0x09c8, 0x09c8, + 0x09cd, 0x09e0, 0x09e0, 0x09eb, 0x09f2, 0x09f7, 0x09fa, 0x09fe, + 0x0a03, 0x0a03, 0x0a03, 0x0a0b, 0x0a0b, 0x0a11, 0x0a19, 0x0a20, + 0x0a28, 0x0a2d, 0x0a2d, 0x0a33, 0x0a39, 0x0a3e, 0x0a42, 0x0a4a, + 0x0a5d, 0x0a6b, 0x0a70, 0x0a76, 0x0a81, 0x0a87, 0x0a8f, 0x0a95, + 0x0a9a, 0x0a9a, 0x0aa1, 0x0aaf, 0x0ab4, 0x0abd, 0x0ac4, 0x0ac4, + 0x0ac4, 0x0ac9, 0x0ad4, 0x0ad4, 0x0adc, 0x0ae0, 0x0af1, 0x0af7, + 0x0afc, 0x0b02, 0x0b02, 0x0b08, 0x0b11, 0x0b16, 0x0b20, 0x0b20, // Entry 1C0 - 1FF - 0x0b3a, 0x0b49, 0x0b52, 0x0b5a, 0x0b5f, 0x0b64, 0x0b6c, 0x0b78, - 0x0b83, 0x0b8a, 0x0b92, 0x0b9c, 0x0ba4, 0x0ba4, 0x0bb4, 0x0bb4, - 0x0bb4, 0x0bc1, 0x0bc1, 0x0bc9, 0x0bc9, 0x0bc9, 0x0bd1, 0x0bd7, - 0x0be6, 0x0bf1, 0x0bf1, 0x0bfb, 0x0c02, 0x0c0d, 0x0c0d, 0x0c0d, - 0x0c12, 0x0c1a, 0x0c1a, 0x0c1a, 0x0c1a, 0x0c23, 0x0c26, 0x0c2d, - 0x0c32, 0x0c43, 0x0c4a, 0x0c4f, 0x0c56, 0x0c56, 0x0c5d, 0x0c62, - 0x0c68, 0x0c72, 0x0c72, 0x0c72, 0x0c72, 0x0c76, 0x0c76, 0x0c7c, - 0x0c8b, 0x0c9a, 0x0c9a, 0x0ca3, 0x0ca7, 0x0ca7, 0x0cad, 0x0cad, + 0x0b26, 0x0b39, 0x0b3d, 0x0b4c, 0x0b55, 0x0b5d, 0x0b62, 0x0b67, + 0x0b6f, 0x0b7b, 0x0b86, 0x0b8d, 0x0b95, 0x0b9f, 0x0ba7, 0x0ba7, + 0x0bb7, 0x0bb7, 0x0bb7, 0x0bc4, 0x0bc4, 0x0bcc, 0x0bcc, 0x0bcc, + 0x0bd4, 0x0bda, 0x0be9, 0x0bf4, 0x0bf4, 0x0bfe, 0x0c05, 0x0c10, + 0x0c10, 0x0c10, 0x0c15, 0x0c1d, 0x0c1d, 0x0c1d, 0x0c1d, 0x0c26, + 0x0c29, 0x0c30, 0x0c35, 0x0c46, 0x0c4d, 0x0c52, 0x0c59, 0x0c59, + 0x0c60, 0x0c65, 0x0c6b, 0x0c75, 0x0c75, 0x0c75, 0x0c75, 0x0c79, + 0x0c79, 0x0c7f, 0x0c8e, 0x0c9d, 0x0c9d, 0x0ca6, 0x0caa, 0x0caa, // Entry 200 - 23F - 0x0cad, 0x0cbf, 0x0cc8, 0x0cd2, 0x0cdc, 0x0ce3, 0x0cea, 0x0cf6, - 0x0cfb, 0x0cff, 0x0cff, 0x0d05, 0x0d09, 0x0d11, 0x0d19, 0x0d19, - 0x0d1f, 0x0d1f, 0x0d1f, 0x0d24, 0x0d28, 0x0d2e, 0x0d33, 0x0d38, - 0x0d3b, 0x0d42, 0x0d42, 0x0d49, 0x0d50, 0x0d50, 0x0d58, 0x0d63, - 0x0d6c, 0x0d6c, 0x0d72, 0x0d72, 0x0d7b, 0x0d7b, 0x0d82, 0x0d88, - 0x0d8f, 0x0d97, 0x0db4, 0x0dba, 0x0dc3, 0x0dca, 0x0dce, 0x0dd1, - 0x0dd1, 0x0dd1, 0x0dd1, 0x0dd1, 0x0dd6, 0x0dd6, 0x0ddb, 0x0de1, - 0x0de7, 0x0dec, 0x0df1, 0x0df1, 0x0df1, 0x0df7, 0x0df7, 0x0dfb, + 0x0cb0, 0x0cb0, 0x0cb0, 0x0cc2, 0x0ccb, 0x0cd5, 0x0cdf, 0x0ce6, + 0x0ced, 0x0cf9, 0x0cfe, 0x0d02, 0x0d02, 0x0d08, 0x0d0c, 0x0d14, + 0x0d1c, 0x0d1c, 0x0d22, 0x0d22, 0x0d22, 0x0d27, 0x0d2b, 0x0d31, + 0x0d36, 0x0d3b, 0x0d3e, 0x0d45, 0x0d45, 0x0d4c, 0x0d53, 0x0d53, + 0x0d5b, 0x0d66, 0x0d6f, 0x0d6f, 0x0d75, 0x0d75, 0x0d7e, 0x0d7e, + 0x0d85, 0x0d8b, 0x0d92, 0x0d9a, 0x0db7, 0x0dbd, 0x0dc6, 0x0dcd, + 0x0de2, 0x0de5, 0x0de5, 0x0de5, 0x0de5, 0x0de5, 0x0dea, 0x0dea, + 0x0def, 0x0df5, 0x0dfb, 0x0e00, 0x0e05, 0x0e05, 0x0e05, 0x0e0b, // Entry 240 - 27F - 0x0dfe, 0x0e04, 0x0e0b, 0x0e10, 0x0e10, 0x0e19, 0x0e20, 0x0e20, - 0x0e20, 0x0e26, 0x0e43, 0x0e47, 0x0e5f, 0x0e63, 0x0e7a, 0x0e7a, - 0x0e8e, 0x0ea2, 0x0eb4, 0x0ec4, 0x0ed6, 0x0ee6, 0x0efc, 0x0f0b, - 0x0f1e, 0x0f1e, 0x0f30, 0x0f43, 0x0f51, 0x0f59, 0x0f6e, 0x0f7f, - 0x0f87, 0x0f92, 0x0fbe, 0x0fd1, 0x0fe6, + 0x0e0b, 0x0e0f, 0x0e12, 0x0e18, 0x0e1f, 0x0e24, 0x0e24, 0x0e2d, + 0x0e34, 0x0e34, 0x0e34, 0x0e3a, 0x0e57, 0x0e5b, 0x0e73, 0x0e77, + 0x0e8e, 0x0e8e, 0x0ea2, 0x0eb6, 0x0ec8, 0x0ed8, 0x0eea, 0x0efa, + 0x0f10, 0x0f1f, 0x0f32, 0x0f32, 0x0f44, 0x0f57, 0x0f65, 0x0f6d, + 0x0f82, 0x0f93, 0x0f9b, 0x0fa6, 0x0fd2, 0x0fe5, 0x0ffa, }, }, { // mua @@ -9570,7 +9977,7 @@ var langHeaders = [252]header{ " kasǝŋPǝnjabiPoloniyaZah sǝr PortugalRomaniyaRussiyaZah sǝr RwandaSo" + "maliyaSwediaTamulthTurkUkrainiaUrduVietnamiyaYorubazah SyiŋZuluMUNDA" + "Ŋ", - []uint16{ // 425 elements + []uint16{ // 427 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0005, 0x000c, 0x000c, 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, 0x001e, 0x0026, @@ -9631,7 +10038,7 @@ var langHeaders = [252]header{ 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, 0x0160, - 0x0167, + 0x0160, 0x0160, 0x0167, }, }, { // my @@ -9666,7 +10073,7 @@ var langHeaders = [252]header{ "انگلیسیامریکن انگلیسیجنوبی آمریکای ِایسپانیولیاروپای ِایسپانیولیمکز" + "یک ِایسپانیولیکانادای ِفرانسویسوییس ِفرانسویپایین ساکسونیفلمیشبرزیل" + " ِپرتغالیاروپای ِپرتغالیمولداویکنگو سواحیلیساده چینیسنتی چینی", - []uint16{ // 613 elements + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0000, 0x000c, 0x000c, 0x001c, 0x0024, 0x002e, 0x002e, 0x0036, 0x0040, 0x0040, 0x0040, 0x0053, 0x0061, 0x006f, 0x007b, @@ -9701,59 +10108,59 @@ var langHeaders = [252]header{ 0x06fb, 0x06fb, 0x0707, 0x0707, 0x0711, 0x0711, 0x0711, 0x0724, 0x0724, 0x0724, 0x0724, 0x0724, 0x0724, 0x0724, 0x0724, 0x0724, 0x0724, 0x0724, 0x072e, 0x072e, 0x072e, 0x072e, 0x072e, 0x072e, - 0x072e, 0x072e, 0x072e, 0x072e, 0x072e, 0x072e, 0x0736, 0x0736, - 0x0736, 0x0736, 0x0736, 0x0736, 0x0736, 0x0736, 0x0746, 0x0746, + 0x072e, 0x072e, 0x072e, 0x072e, 0x072e, 0x072e, 0x072e, 0x0736, + 0x0736, 0x0736, 0x0736, 0x0736, 0x0736, 0x0736, 0x0736, 0x0746, // Entry 100 - 13F - 0x075b, 0x075b, 0x075b, 0x075b, 0x075b, 0x075b, 0x075b, 0x075b, - 0x0765, 0x0765, 0x0765, 0x0765, 0x0765, 0x0773, 0x0773, 0x0786, - 0x0786, 0x0796, 0x0796, 0x07a7, 0x07a7, 0x07a7, 0x07af, 0x07af, + 0x0746, 0x075b, 0x075b, 0x075b, 0x075b, 0x075b, 0x075b, 0x075b, + 0x075b, 0x0765, 0x0765, 0x0765, 0x0765, 0x0765, 0x0773, 0x0773, + 0x0786, 0x0786, 0x0796, 0x0796, 0x07a7, 0x07a7, 0x07a7, 0x07af, 0x07af, 0x07af, 0x07af, 0x07af, 0x07af, 0x07af, 0x07af, 0x07af, - 0x07af, 0x07bf, 0x07bf, 0x07bf, 0x07bf, 0x07bf, 0x07bf, 0x07bf, - 0x07bf, 0x07bf, 0x07bf, 0x07bf, 0x07cf, 0x07cf, 0x07cf, 0x07cf, + 0x07af, 0x07af, 0x07bf, 0x07bf, 0x07bf, 0x07bf, 0x07bf, 0x07bf, + 0x07bf, 0x07bf, 0x07bf, 0x07bf, 0x07bf, 0x07cf, 0x07cf, 0x07cf, 0x07cf, 0x07cf, 0x07cf, 0x07cf, 0x07cf, 0x07cf, 0x07cf, 0x07cf, - 0x07cf, 0x07cf, 0x07cf, 0x07cf, 0x07e6, 0x07e6, 0x07e6, 0x07ee, + 0x07cf, 0x07cf, 0x07cf, 0x07cf, 0x07cf, 0x07e6, 0x07e6, 0x07e6, // Entry 140 - 17F - 0x07ee, 0x07ee, 0x07ee, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, - 0x0815, 0x0815, 0x0815, 0x0815, 0x0815, 0x0815, 0x0815, 0x0815, - 0x0815, 0x0815, 0x0821, 0x082d, 0x082d, 0x082d, 0x082d, 0x082d, - 0x0839, 0x0839, 0x0839, 0x0847, 0x0847, 0x0847, 0x0847, 0x0847, - 0x0855, 0x0866, 0x0866, 0x0866, 0x0866, 0x0866, 0x0866, 0x087b, - 0x087b, 0x087b, 0x087b, 0x0889, 0x0889, 0x089e, 0x08ac, 0x08ac, - 0x08ac, 0x08ac, 0x08ac, 0x08ac, 0x08ac, 0x08ac, 0x08ba, 0x08c8, - 0x08c8, 0x08c8, 0x08c8, 0x08c8, 0x08d2, 0x08d2, 0x08d2, 0x08d2, + 0x07ee, 0x07ee, 0x07ee, 0x07ee, 0x0800, 0x0800, 0x0800, 0x0800, + 0x0800, 0x0815, 0x0815, 0x0815, 0x0815, 0x0815, 0x0815, 0x0815, + 0x0815, 0x0815, 0x0815, 0x0821, 0x082d, 0x082d, 0x082d, 0x082d, + 0x082d, 0x0839, 0x0839, 0x0839, 0x0847, 0x0847, 0x0847, 0x0847, + 0x0847, 0x0855, 0x0866, 0x0866, 0x0866, 0x0866, 0x0866, 0x0866, + 0x087b, 0x087b, 0x087b, 0x087b, 0x0889, 0x0889, 0x089e, 0x08ac, + 0x08ac, 0x08ac, 0x08ac, 0x08ac, 0x08ac, 0x08ac, 0x08ac, 0x08ba, + 0x08c8, 0x08c8, 0x08c8, 0x08c8, 0x08c8, 0x08d2, 0x08d2, 0x08d2, // Entry 180 - 1BF - 0x08d2, 0x08d2, 0x08d2, 0x08de, 0x08de, 0x08de, 0x08de, 0x08f1, - 0x08f1, 0x08f1, 0x08f1, 0x08f1, 0x08f9, 0x08f9, 0x0903, 0x0903, - 0x0903, 0x0903, 0x0903, 0x0903, 0x0903, 0x0903, 0x0903, 0x090f, - 0x090f, 0x090f, 0x090f, 0x090f, 0x091b, 0x0929, 0x0929, 0x093e, - 0x0948, 0x0948, 0x0948, 0x0948, 0x0948, 0x0952, 0x0952, 0x0952, - 0x0960, 0x0960, 0x0960, 0x0960, 0x0960, 0x0960, 0x0960, 0x0960, - 0x096e, 0x096e, 0x096e, 0x0976, 0x098d, 0x098d, 0x098d, 0x098d, - 0x098d, 0x099b, 0x099b, 0x099b, 0x099b, 0x099b, 0x09a3, 0x09a3, + 0x08d2, 0x08d2, 0x08d2, 0x08d2, 0x08de, 0x08de, 0x08de, 0x08de, + 0x08de, 0x08f1, 0x08f1, 0x08f1, 0x08f1, 0x08f1, 0x08f9, 0x08f9, + 0x0903, 0x0903, 0x0903, 0x0903, 0x0903, 0x0903, 0x0903, 0x0903, + 0x0903, 0x090f, 0x090f, 0x090f, 0x090f, 0x090f, 0x091b, 0x0929, + 0x0929, 0x093e, 0x0948, 0x0948, 0x0948, 0x0948, 0x0948, 0x0952, + 0x0952, 0x0952, 0x0960, 0x0960, 0x0960, 0x0960, 0x0960, 0x0960, + 0x0960, 0x0960, 0x096e, 0x096e, 0x096e, 0x0976, 0x098d, 0x098d, + 0x098d, 0x098d, 0x098d, 0x099b, 0x099b, 0x099b, 0x099b, 0x099b, // Entry 1C0 - 1FF - 0x09ab, 0x09ab, 0x09ab, 0x09bb, 0x09bb, 0x09bb, 0x09bb, 0x09bb, + 0x09a3, 0x09a3, 0x09ab, 0x09ab, 0x09ab, 0x09bb, 0x09bb, 0x09bb, 0x09bb, 0x09bb, 0x09bb, 0x09bb, 0x09bb, 0x09bb, 0x09bb, 0x09bb, 0x09bb, 0x09bb, 0x09bb, 0x09bb, 0x09bb, 0x09bb, 0x09bb, 0x09bb, - 0x09bb, 0x09cc, 0x09cc, 0x09cc, 0x09cc, 0x09cc, 0x09cc, 0x09cc, - 0x09d6, 0x09d6, 0x09d6, 0x09d6, 0x09d6, 0x09d6, 0x09e0, 0x09e0, - 0x09e0, 0x09e0, 0x09ee, 0x09ee, 0x09ee, 0x09ee, 0x09ee, 0x09fa, - 0x09fa, 0x09fa, 0x09fa, 0x0a0d, 0x0a0d, 0x0a19, 0x0a19, 0x0a19, - 0x0a32, 0x0a32, 0x0a32, 0x0a40, 0x0a40, 0x0a40, 0x0a40, 0x0a40, + 0x09bb, 0x09bb, 0x09bb, 0x09cc, 0x09cc, 0x09cc, 0x09cc, 0x09cc, + 0x09cc, 0x09cc, 0x09d6, 0x09d6, 0x09d6, 0x09d6, 0x09d6, 0x09d6, + 0x09e0, 0x09e0, 0x09e0, 0x09e0, 0x09ee, 0x09ee, 0x09ee, 0x09ee, + 0x09ee, 0x09fa, 0x09fa, 0x09fa, 0x09fa, 0x0a0d, 0x0a0d, 0x0a19, + 0x0a19, 0x0a19, 0x0a32, 0x0a32, 0x0a32, 0x0a40, 0x0a40, 0x0a40, // Entry 200 - 23F - 0x0a40, 0x0a53, 0x0a64, 0x0a79, 0x0a8c, 0x0a8c, 0x0a8c, 0x0a8c, + 0x0a40, 0x0a40, 0x0a40, 0x0a53, 0x0a64, 0x0a79, 0x0a8c, 0x0a8c, 0x0a8c, 0x0a8c, 0x0a8c, 0x0a8c, 0x0a8c, 0x0a8c, 0x0a8c, 0x0a8c, - 0x0a8c, 0x0a8c, 0x0a8c, 0x0a8c, 0x0a96, 0x0a96, 0x0a96, 0x0a96, + 0x0a8c, 0x0a8c, 0x0a8c, 0x0a8c, 0x0a8c, 0x0a8c, 0x0a96, 0x0a96, 0x0a96, 0x0a96, 0x0a96, 0x0a96, 0x0a96, 0x0a96, 0x0a96, 0x0a96, 0x0a96, 0x0a96, 0x0a96, 0x0a96, 0x0a96, 0x0a96, 0x0a96, 0x0a96, - 0x0aa6, 0x0aa6, 0x0ac8, 0x0ac8, 0x0ac8, 0x0ac8, 0x0ae4, 0x0aec, - 0x0aec, 0x0aec, 0x0aec, 0x0aec, 0x0aec, 0x0aec, 0x0afa, 0x0afa, - 0x0afa, 0x0afa, 0x0afa, 0x0b0a, 0x0b0a, 0x0b0a, 0x0b0a, 0x0b12, + 0x0a96, 0x0a96, 0x0aa6, 0x0aa6, 0x0ac8, 0x0ac8, 0x0ac8, 0x0ac8, + 0x0ae4, 0x0aec, 0x0aec, 0x0aec, 0x0aec, 0x0aec, 0x0aec, 0x0aec, + 0x0afa, 0x0afa, 0x0afa, 0x0afa, 0x0afa, 0x0b0a, 0x0b0a, 0x0b0a, // Entry 240 - 27F - 0x0b12, 0x0b12, 0x0b12, 0x0b12, 0x0b12, 0x0b12, 0x0b12, 0x0b12, - 0x0b12, 0x0b12, 0x0b46, 0x0b46, 0x0b72, 0x0b72, 0x0b96, 0x0bb2, - 0x0bcb, 0x0be4, 0x0c07, 0x0c26, 0x0c41, 0x0c5c, 0x0c8c, 0x0caf, - 0x0cd0, 0x0cd0, 0x0cef, 0x0d0a, 0x0d23, 0x0d2d, 0x0d48, 0x0d65, - 0x0d73, 0x0d73, 0x0d8a, 0x0d9b, 0x0dac, + 0x0b0a, 0x0b12, 0x0b12, 0x0b12, 0x0b12, 0x0b12, 0x0b12, 0x0b12, + 0x0b12, 0x0b12, 0x0b12, 0x0b12, 0x0b46, 0x0b46, 0x0b72, 0x0b72, + 0x0b96, 0x0bb2, 0x0bcb, 0x0be4, 0x0c07, 0x0c26, 0x0c41, 0x0c5c, + 0x0c8c, 0x0caf, 0x0cd0, 0x0cd0, 0x0cef, 0x0d0a, 0x0d23, 0x0d2d, + 0x0d48, 0x0d65, 0x0d73, 0x0d73, 0x0d8a, 0x0d9b, 0x0dac, }, }, { // naq @@ -9765,7 +10172,7 @@ var langHeaders = [252]header{ "iaǁî gowabRussiaǁî gowabRwandaǁî gowabSomaliǁî gowabSwedeǁî gowabTam" + "ilǁî gowabThaiǁî gowabTurkeǁî gowabUkrainiaǁî gowabUrduǁî gowabVietn" + "amǁî gowabYorubabChineesǁî gowab, MandarinniZulubKhoekhoegowab", - []uint16{ // 436 elements + []uint16{ // 438 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0009, 0x0015, 0x0015, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0037, 0x0049, @@ -9827,7 +10234,7 @@ var langHeaders = [252]header{ 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, - 0x0244, 0x0244, 0x0244, 0x0251, + 0x0244, 0x0244, 0x0244, 0x0244, 0x0244, 0x0251, }, }, { // nd @@ -9923,7 +10330,7 @@ var langHeaders = [252]header{ "ærøyskfranskvestfrisiskirskskotsk-gæliskgaliciskguaranigujaratimanx" + "hausahebraiskhindihiri motukroatiskhaitiskungarskarmenskhererointerl" + "inguaindonesiskinterlingueibosichuan-yiinupiakidoislandskitalienskin" + - "uittiskjapanskjavanesiskgeorgiskkikongokikuyukuanyamakasakhiskgrønla" + + "uktitutjapanskjavanesiskgeorgiskkikongokikuyukuanyamakasakhiskgrønla" + "ndsk (kalaallisut)khmerkannadakoreanskkanurikasjmirikurdiskkomikorni" + "skkirgisisklatinluxemburgskgandalimburgisklingalalaotisklitauiskluba" + "-katangalatviskmadagassiskmarshallesiskmaorimakedonskmalayalammongol" + @@ -9966,12 +10373,12 @@ var langHeaders = [252]header{ "ngoserersahosukumasususumeriskshimaoreklassisk syrisksyrisktemneteso" + "terenotetumtigrétivitokelauklingontlingittamasjektonga (Nyasa)tok pi" + "sintarokotsimshiantumbukatuvalutasawaqtuvinisksentral-tamazightudmur" + - "tugaritiskumbundurotvaivotiskvunjowalsertyskwolayttawaraywashokalmyk" + - "isksogayaoyapesiskyangbenyembakantonesiskzapotecblissymbolzenagastan" + - "dard marokkansk tamazightzuniutan språkleg innhaldzazamoderne standa" + - "rdarabiskbritisk engelsklågsaksiskflamskmoldaviskserbokroatiskforenk" + - "la kinesisktradisjonell kinesisk", - []uint16{ // 613 elements + "tugaritiskumbunduukjent språkvaivotiskvunjowalsertyskwolayttawaraywa" + + "shokalmykisksogayaoyapesiskyangbenyembakantonesiskzapotecblissymbolz" + + "enagastandard marokkansk tamazightzuniutan språkleg innhaldzazamoder" + + "ne standardarabiskbritisk engelsklågsaksiskflamskmoldaviskserbokroat" + + "iskforenkla kinesisktradisjonell kinesisk", + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0004, 0x000d, 0x0015, 0x001e, 0x0022, 0x002a, 0x0032, 0x0039, 0x0043, 0x004a, 0x0050, 0x005e, 0x0067, 0x0073, 0x007b, @@ -10006,59 +10413,59 @@ var langHeaders = [252]header{ 0x060d, 0x0611, 0x0616, 0x0616, 0x0625, 0x0625, 0x0625, 0x0625, 0x062d, 0x0632, 0x0636, 0x0636, 0x0636, 0x063d, 0x063d, 0x063d, 0x0641, 0x0641, 0x0645, 0x064c, 0x0655, 0x065f, 0x065f, 0x0663, - 0x0663, 0x0668, 0x066d, 0x066d, 0x0672, 0x0679, 0x067d, 0x0684, - 0x068f, 0x0699, 0x069d, 0x06a4, 0x06ab, 0x06b6, 0x06be, 0x06c6, - // Entry 100 - 13F - 0x06cc, 0x06d3, 0x06d3, 0x06df, 0x06f7, 0x0700, 0x0706, 0x070c, - 0x0711, 0x0719, 0x071f, 0x0725, 0x072a, 0x072f, 0x0734, 0x073f, - 0x073f, 0x0744, 0x0755, 0x075f, 0x0764, 0x076a, 0x076e, 0x0772, - 0x0772, 0x0780, 0x0786, 0x078d, 0x079a, 0x079a, 0x07a0, 0x07a0, - 0x07a4, 0x07ae, 0x07ae, 0x07b1, 0x07b1, 0x07bd, 0x07c9, 0x07c9, - 0x07d4, 0x07df, 0x07e7, 0x07e9, 0x07e9, 0x07e9, 0x07ed, 0x07f2, - 0x07f2, 0x07f6, 0x0800, 0x0800, 0x080e, 0x081c, 0x081c, 0x0821, - 0x082a, 0x0830, 0x0835, 0x0840, 0x084c, 0x084c, 0x084c, 0x0851, + 0x0663, 0x0668, 0x066d, 0x066d, 0x0672, 0x0672, 0x0679, 0x067d, + 0x0684, 0x068f, 0x0699, 0x069d, 0x06a4, 0x06ab, 0x06b6, 0x06be, + // Entry 100 - 13F + 0x06c6, 0x06cc, 0x06d3, 0x06d3, 0x06df, 0x06f7, 0x0700, 0x0706, + 0x070c, 0x0711, 0x0719, 0x071f, 0x0725, 0x072a, 0x072f, 0x0734, + 0x073f, 0x073f, 0x0744, 0x0755, 0x075f, 0x0764, 0x076a, 0x076e, + 0x0772, 0x0772, 0x0780, 0x0786, 0x078d, 0x079a, 0x079a, 0x07a0, + 0x07a0, 0x07a4, 0x07ae, 0x07ae, 0x07b1, 0x07b1, 0x07bd, 0x07c9, + 0x07c9, 0x07d4, 0x07df, 0x07e7, 0x07e9, 0x07e9, 0x07e9, 0x07ed, + 0x07f2, 0x07f2, 0x07f6, 0x0800, 0x0800, 0x080e, 0x081c, 0x081c, + 0x0821, 0x082a, 0x0830, 0x0835, 0x0840, 0x084c, 0x084c, 0x084c, // Entry 140 - 17F - 0x0858, 0x085d, 0x085d, 0x0865, 0x0865, 0x086f, 0x0879, 0x087e, - 0x0889, 0x0889, 0x088d, 0x0891, 0x0897, 0x089c, 0x08a5, 0x08a5, - 0x08a5, 0x08ab, 0x08b1, 0x08b8, 0x08c4, 0x08d0, 0x08d0, 0x08dd, - 0x08e3, 0x08e9, 0x08ec, 0x08f1, 0x08f5, 0x08fe, 0x08fe, 0x0902, - 0x0909, 0x0915, 0x0915, 0x0919, 0x0919, 0x091e, 0x0929, 0x0935, - 0x0935, 0x0935, 0x0939, 0x0941, 0x0949, 0x0949, 0x0950, 0x095a, - 0x0960, 0x096f, 0x096f, 0x096f, 0x0976, 0x097c, 0x0984, 0x0989, - 0x0990, 0x0995, 0x099c, 0x09a2, 0x09a7, 0x09ad, 0x09b2, 0x09ba, + 0x0851, 0x0858, 0x085d, 0x085d, 0x0865, 0x0865, 0x086f, 0x0879, + 0x087e, 0x0889, 0x0889, 0x088d, 0x0891, 0x0897, 0x089c, 0x08a5, + 0x08a5, 0x08a5, 0x08ab, 0x08b1, 0x08b8, 0x08c4, 0x08d0, 0x08d0, + 0x08dd, 0x08e3, 0x08e9, 0x08ec, 0x08f1, 0x08f5, 0x08fe, 0x08fe, + 0x0902, 0x0909, 0x0915, 0x0915, 0x0919, 0x0919, 0x091e, 0x0929, + 0x0935, 0x0935, 0x0935, 0x0939, 0x0941, 0x0949, 0x0949, 0x0950, + 0x095a, 0x0960, 0x096f, 0x096f, 0x096f, 0x0976, 0x097c, 0x0984, + 0x0989, 0x0990, 0x0995, 0x099c, 0x09a2, 0x09a7, 0x09ad, 0x09b2, // Entry 180 - 1BF - 0x09ba, 0x09ba, 0x09ba, 0x09c0, 0x09c0, 0x09c5, 0x09c9, 0x09d4, - 0x09d4, 0x09de, 0x09e5, 0x09ea, 0x09ed, 0x09f3, 0x09fb, 0x09fb, - 0x09fb, 0x0a05, 0x0a05, 0x0a0b, 0x0a13, 0x0a1a, 0x0a22, 0x0a27, - 0x0a27, 0x0a2d, 0x0a33, 0x0a38, 0x0a3c, 0x0a44, 0x0a4e, 0x0a5c, - 0x0a63, 0x0a69, 0x0a74, 0x0a7b, 0x0a83, 0x0a89, 0x0a8e, 0x0a8e, - 0x0a95, 0x0aa2, 0x0aa7, 0x0ab2, 0x0ab9, 0x0ab9, 0x0ab9, 0x0abe, - 0x0ac9, 0x0ac9, 0x0ad4, 0x0ad8, 0x0ae0, 0x0ae6, 0x0aea, 0x0af0, - 0x0af0, 0x0af6, 0x0aff, 0x0b04, 0x0b0f, 0x0b0f, 0x0b15, 0x0b1e, + 0x09ba, 0x09ba, 0x09ba, 0x09ba, 0x09c0, 0x09c0, 0x09c5, 0x09c5, + 0x09c9, 0x09d4, 0x09d4, 0x09de, 0x09e5, 0x09ea, 0x09ed, 0x09f3, + 0x09fb, 0x09fb, 0x09fb, 0x0a05, 0x0a05, 0x0a0b, 0x0a13, 0x0a1a, + 0x0a22, 0x0a27, 0x0a27, 0x0a2d, 0x0a33, 0x0a38, 0x0a3c, 0x0a44, + 0x0a4e, 0x0a5c, 0x0a63, 0x0a69, 0x0a74, 0x0a7b, 0x0a83, 0x0a89, + 0x0a8e, 0x0a8e, 0x0a95, 0x0aa2, 0x0aa7, 0x0ab2, 0x0ab9, 0x0ab9, + 0x0ab9, 0x0abe, 0x0ac9, 0x0ac9, 0x0ad4, 0x0ad8, 0x0ae0, 0x0ae6, + 0x0aea, 0x0af0, 0x0af0, 0x0af6, 0x0aff, 0x0b04, 0x0b0f, 0x0b0f, // Entry 1C0 - 1FF - 0x0b22, 0x0b33, 0x0b3b, 0x0b43, 0x0b48, 0x0b4d, 0x0b52, 0x0b63, - 0x0b6d, 0x0b74, 0x0b7c, 0x0b86, 0x0b8e, 0x0b8e, 0x0b9f, 0x0b9f, - 0x0b9f, 0x0bac, 0x0bac, 0x0bb5, 0x0bb5, 0x0bb5, 0x0bbd, 0x0bc7, - 0x0bd9, 0x0be1, 0x0be1, 0x0beb, 0x0bf2, 0x0bfe, 0x0bfe, 0x0bfe, - 0x0c03, 0x0c09, 0x0c09, 0x0c09, 0x0c09, 0x0c11, 0x0c14, 0x0c1b, - 0x0c20, 0x0c34, 0x0c3b, 0x0c40, 0x0c47, 0x0c47, 0x0c4e, 0x0c53, - 0x0c5d, 0x0c63, 0x0c63, 0x0c63, 0x0c63, 0x0c67, 0x0c67, 0x0c70, - 0x0c7f, 0x0c89, 0x0c89, 0x0c92, 0x0c96, 0x0c96, 0x0c9c, 0x0c9c, + 0x0b15, 0x0b1e, 0x0b22, 0x0b33, 0x0b3b, 0x0b43, 0x0b48, 0x0b4d, + 0x0b52, 0x0b63, 0x0b6d, 0x0b74, 0x0b7c, 0x0b86, 0x0b8e, 0x0b8e, + 0x0b9f, 0x0b9f, 0x0b9f, 0x0bac, 0x0bac, 0x0bb5, 0x0bb5, 0x0bb5, + 0x0bbd, 0x0bc7, 0x0bd9, 0x0be1, 0x0be1, 0x0beb, 0x0bf2, 0x0bfe, + 0x0bfe, 0x0bfe, 0x0c03, 0x0c09, 0x0c09, 0x0c09, 0x0c09, 0x0c11, + 0x0c14, 0x0c1b, 0x0c20, 0x0c34, 0x0c3b, 0x0c40, 0x0c47, 0x0c47, + 0x0c4e, 0x0c53, 0x0c5d, 0x0c63, 0x0c63, 0x0c63, 0x0c63, 0x0c67, + 0x0c67, 0x0c70, 0x0c7f, 0x0c89, 0x0c89, 0x0c92, 0x0c96, 0x0c96, // Entry 200 - 23F - 0x0c9c, 0x0ca6, 0x0cb0, 0x0cbb, 0x0cc7, 0x0cce, 0x0cd5, 0x0ce1, - 0x0ce6, 0x0cea, 0x0cea, 0x0cf0, 0x0cf4, 0x0cfc, 0x0d04, 0x0d13, - 0x0d19, 0x0d19, 0x0d19, 0x0d1e, 0x0d22, 0x0d28, 0x0d2d, 0x0d33, - 0x0d37, 0x0d3e, 0x0d3e, 0x0d45, 0x0d4c, 0x0d4c, 0x0d54, 0x0d61, - 0x0d6a, 0x0d6a, 0x0d70, 0x0d70, 0x0d79, 0x0d79, 0x0d80, 0x0d86, - 0x0d8d, 0x0d95, 0x0da6, 0x0dac, 0x0db5, 0x0dbc, 0x0dbf, 0x0dc2, - 0x0dc2, 0x0dc2, 0x0dc2, 0x0dc2, 0x0dc8, 0x0dc8, 0x0dcd, 0x0dd7, - 0x0ddf, 0x0de4, 0x0de9, 0x0de9, 0x0de9, 0x0df2, 0x0df2, 0x0df6, + 0x0c9c, 0x0c9c, 0x0c9c, 0x0ca6, 0x0cb0, 0x0cbb, 0x0cc7, 0x0cce, + 0x0cd5, 0x0ce1, 0x0ce6, 0x0cea, 0x0cea, 0x0cf0, 0x0cf4, 0x0cfc, + 0x0d04, 0x0d13, 0x0d19, 0x0d19, 0x0d19, 0x0d1e, 0x0d22, 0x0d28, + 0x0d2d, 0x0d33, 0x0d37, 0x0d3e, 0x0d3e, 0x0d45, 0x0d4c, 0x0d4c, + 0x0d54, 0x0d61, 0x0d6a, 0x0d6a, 0x0d70, 0x0d70, 0x0d79, 0x0d79, + 0x0d80, 0x0d86, 0x0d8d, 0x0d95, 0x0da6, 0x0dac, 0x0db5, 0x0dbc, + 0x0dc9, 0x0dcc, 0x0dcc, 0x0dcc, 0x0dcc, 0x0dcc, 0x0dd2, 0x0dd2, + 0x0dd7, 0x0de1, 0x0de9, 0x0dee, 0x0df3, 0x0df3, 0x0df3, 0x0dfc, // Entry 240 - 27F - 0x0df9, 0x0e01, 0x0e08, 0x0e0d, 0x0e0d, 0x0e18, 0x0e1f, 0x0e29, - 0x0e29, 0x0e2f, 0x0e4c, 0x0e50, 0x0e66, 0x0e6a, 0x0e81, 0x0e81, - 0x0e81, 0x0e81, 0x0e81, 0x0e81, 0x0e90, 0x0e90, 0x0e90, 0x0e90, - 0x0e90, 0x0e90, 0x0e90, 0x0e90, 0x0e9b, 0x0ea1, 0x0ea1, 0x0ea1, - 0x0eaa, 0x0eb7, 0x0eb7, 0x0ec8, 0x0edd, + 0x0dfc, 0x0e00, 0x0e03, 0x0e0b, 0x0e12, 0x0e17, 0x0e17, 0x0e22, + 0x0e29, 0x0e33, 0x0e33, 0x0e39, 0x0e56, 0x0e5a, 0x0e70, 0x0e74, + 0x0e8b, 0x0e8b, 0x0e8b, 0x0e8b, 0x0e8b, 0x0e8b, 0x0e9a, 0x0e9a, + 0x0e9a, 0x0e9a, 0x0e9a, 0x0e9a, 0x0e9a, 0x0e9a, 0x0ea5, 0x0eab, + 0x0eab, 0x0eab, 0x0eb4, 0x0ec1, 0x0ec1, 0x0ed2, 0x0ee7, }, }, { // nnh @@ -10066,7 +10473,7 @@ var langHeaders = [252]header{ " pʉa nzsekàʼaShwóŋò pafudShwóŋò pʉ̀a njinikomShwóŋò pakɔsiShwóŋò mbu" + "luShwóŋò ngáŋtÿɔʼShwóŋò pʉa YɔɔnmendiShwóŋò pʉa shÿó BɛgtùaShwóŋò ng" + "iembɔɔnShwóŋò pʉa shÿó MbafìaShwóŋò Tsaŋ", - []uint16{ // 580 elements + []uint16{ // 582 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -10107,7 +10514,7 @@ var langHeaders = [252]header{ 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, - 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00e8, 0x00e8, + 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, @@ -10118,7 +10525,7 @@ var langHeaders = [252]header{ 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, - 0x00e8, 0x00e8, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, + 0x00e8, 0x00e8, 0x00e8, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, // Entry 180 - 1BF @@ -10129,7 +10536,7 @@ var langHeaders = [252]header{ 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, - 0x0106, 0x0106, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, + 0x0106, 0x0106, 0x0106, 0x0106, 0x011b, 0x011b, 0x011b, 0x011b, // Entry 1C0 - 1FF 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, @@ -10149,7 +10556,7 @@ var langHeaders = [252]header{ 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, // Entry 240 - 27F - 0x011b, 0x011b, 0x0138, 0x0147, + 0x011b, 0x011b, 0x011b, 0x011b, 0x0138, 0x0147, }, }, { // no @@ -10166,7 +10573,7 @@ var langHeaders = [252]header{ "ok ra̱ciaaniThok ruaandaniThok thomaalianiThok i̱thwidicniThok tamil" + "niThok tayniThok turkicniThok ukeraaniniThok udoniThok betnaamniThok" + " yurubaniThok caynaThok dhuluniThok Nath", - []uint16{ // 449 elements + []uint16{ // 451 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0017, 0x0017, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0033, 0x0048, @@ -10231,7 +10638,7 @@ var langHeaders = [252]header{ 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, // Entry 1C0 - 1FF - 0x026a, + 0x0261, 0x0261, 0x026a, }, }, { // nyn @@ -10242,7 +10649,7 @@ var langHeaders = [252]header{ "iOrupocugoOruromaniaOrurrashaOrunyarwandaOrusomaariOruswidiOrutamiri" + "OrutailandiOrukurukiOrukurainiOru-UruduOruviyetinaamuOruyorubaOrucha" + "inaOruzuruRunyankore", - []uint16{ // 452 elements + []uint16{ // 454 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0010, 0x0010, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0024, 0x0031, @@ -10307,7 +10714,7 @@ var langHeaders = [252]header{ 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, // Entry 1C0 - 1FF - 0x01a6, 0x01a6, 0x01a6, 0x01b0, + 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01a6, 0x01b0, }, }, { // om @@ -10328,7 +10735,7 @@ var langHeaders = [252]header{ "Afaan TayiiAfaan TigireeLammii TurkiiAfaan TurkiiAfaan UkreeniiAfaan" + " UrduAfaan UzbekAfaan VeetinamAfaan XhosaChineseAfaan ZuuluAfaan Fil" + "ippiniiAfaan KilingonAfaan Portugali (Braazil)Afaan Protuguese", - []uint16{ // 608 elements + []uint16{ // 610 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0009, 0x0009, 0x0017, 0x0017, 0x0020, 0x0020, 0x0020, 0x0020, 0x0031, 0x0031, 0x0040, 0x004f, @@ -10370,7 +10777,7 @@ var langHeaders = [252]header{ 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, 0x043b, - 0x043b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, + 0x043b, 0x043b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, @@ -10405,7 +10812,7 @@ var langHeaders = [252]header{ 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, - 0x044b, 0x044b, 0x044b, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, + 0x044b, 0x044b, 0x044b, 0x044b, 0x044b, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, @@ -10414,152 +10821,162 @@ var langHeaders = [252]header{ 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, - 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0472, 0x0482, + 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, + 0x0472, 0x0482, }, }, { // or - "ଅଫାର୍ଆବ୍ଖାଜିଆନ୍ଅବେସ୍ତନଆଫ୍ରିକାନସ୍ଅକନ୍ଆମହାରକିଆର୍ଗୋନୀଆରବିକ୍ଆସାମୀଆଭାରିକ୍ଆୟମା" + - "ରାଆଜେରବାଇଜାନିବଶଖିର୍ବେଲାରୁଷିଆନ୍ବୁଲଗେରିଆନ୍ବିସଲାମାବାମ୍ବାରାବଙ୍ଗାଳୀତିବେ" + - "ତାନ୍ବ୍ରେଟନ୍କାଟଲାନ୍କାଟାଲାନ୍ଚେଚନ୍ଚାମୋରୋକୋର୍ସିକାନ୍କ୍ରୀଚେକ୍ଚର୍ଚ୍ଚ ସ୍ଲା" + - "ଭିକ୍ଚୁଭାଶ୍ୱେଲ୍ସଡାନ୍ନିସ୍ଜର୍ମାନ୍ଡିଭେହୀଭୂଟାନୀଇୱେଗ୍ରୀକ୍ଇଂରାଜୀଏସ୍ପାରେଣ୍" + - "ଟୋସ୍ପାନିସ୍ଏସ୍ତୋନିଆନ୍ବାସ୍କ୍ୱିପର୍ସିଆନ୍ଫୁଲାହଫିନ୍ନିସ୍ଫିଜିଫାରୋଏସେଫ୍ରେଞ୍" + - "ଚପଶ୍ଚିମ ଫ୍ରିସିୟନ୍ଇରିସ୍ସ୍କଟିସ୍ ଗାଏଲିକ୍ଗାଲସିଆନ୍ଗୁଆରାନୀଗୁଜୁରାଟୀମାଁକ୍ସ" + - "ହୌସାହେବ୍ର୍ୟୁହିନ୍ଦୀହିରି ମୋଟୁକ୍ରୋଆଟିଆନ୍ହୈତାୟିନ୍ହଙ୍ଗେରିଆନ୍ଆର୍ମେନିଆନ୍ହ" + - "େରେରୋଇର୍ଣ୍ଟଲିଙ୍ଗୁଆଇଣ୍ଡୋନେସିଆନ୍ଇର୍ଣ୍ଟରଲିଙ୍ଗୁଇଇଗ୍ବୋସିଚୁଆନ୍ ୟୀଇନୁପିୟା" + - "କ୍ଇଡୋଆଇସଲାଣ୍ଡିକ୍ଇଟାଲିଆନ୍ଇନକୀଟୁତ୍ଜାପାନୀଜ୍ଜାଭାନୀଜ୍ଜର୍ଜିଆନ୍କଙ୍ଗୋକୀକୁୟ" + - "ୁକ୍ୱାନ୍ୟାମ୍କାଜାକ୍ଗ୍ରୀନଲାଣ୍ଡିକ୍ଖ୍ମେର୍କନ୍ନଡକୋରିଆନ୍କନୁରୀକାଶ୍ମିରୀକୁର୍ଦ" + - "୍ଦିଶ୍କୋମିକୋର୍ନିସ୍କିରଗିଜ୍ଲାଟିନ୍ଲକ୍ସେମବର୍ଗିସ୍ଗନ୍ଦାଲିମ୍ବୁର୍ଗିସ୍ଲିଙ୍ଗା" + - "ଲାଲାଓଲିଥୁଆନିଆନ୍ଲ୍ୟୁବା-କାଟାଙ୍ଗାଲାଟଭିଆନ୍ମାଲାଗାସୀମାର୍ଶାଲୀଜ୍ମାଓରୀମାକଡୋ" + - "ନିଆନ୍ମାଲାୟଲମ୍ମଙ୍ଗୋଲିଆନ୍ମରାଠୀମାଲୟମାଲଟୀଜ୍ବର୍ମୀଜ୍ନାଉରୁଉତ୍ତର ନେଡବେଲେନେ" + - "ପାଳୀଡୋଙ୍ଗାଡଚ୍ନରୱେଜିଆନ୍ ନିୟୋର୍ସ୍କନରୱେଜିଆନ୍ ବୋକମଲ୍ଦକ୍ଷିଣ ନେଡବେଲେନାଭା" + - "ଜୋନିୟାଞ୍ଜଓସିଟାନ୍ଓଜିୱାଓରୋମୋଓଡ଼ିଆଓସେଟିକ୍ପଞ୍ଜାବୀପାଲିପୋଲିଶ୍ପାସ୍ତୋପର୍ତ୍" + - "ତୁଗ୍ରୀଜ୍କ୍ୱେଚୁଆରେହେଟୋ-ରୋମାନ୍ସରୁଣ୍ଡିରୋମାନିଆନ୍ରଷିଆନ୍କିନ୍ୟାରୱାଣ୍ଡାସଂସ" + - "୍କୃତସର୍ଦିନିଆନ୍ସିନ୍ଧୀଉତ୍ତର ସାମିସାଙ୍ଗୋସିଂହଳସ୍ଲୋଭାକ୍ସ୍ଲୋଭେନିଆନ୍ସାମୋଆନ" + - "୍ଶୋନାସୋମାଲିଆଆଲବାନିଆନ୍ସର୍ବିଆନ୍ସ୍ବାତୀସେସୋଥୋସୁଦାନୀଜ୍ସ୍ୱେଡିସ୍ସ୍ୱାହିଲ୍ତ" + - "ାମିଲ୍ତେଲୁଗୁତାଜିକ୍ଥାଇଟ୍ରିଗିନିଆତୁର୍କମେନ୍ସେସ୍ବାନାଟୋଙ୍ଗାତୁର୍କିସ୍ସୋଂଗାତ" + - "ାତାର୍ତାହିତିଆନ୍ୟୁଘୁର୍ୟୁକ୍ରାନିଆନ୍ଉର୍ଦ୍ଦୁଉଜବେକ୍ଭେଣ୍ଡାଭିଏତନାମିଜ୍ବୋଲାପୁ" + - "କୱାଲୁନ୍ୱୋଲଫ୍ଖୋସାୟିଡିସ୍ୟୋରୁବାଜୁଆଙ୍ଗଚାଇନୀଜ୍ଜୁଲୁଆଚାଇନୀଜ୍ଆକୋଲିଆଦାଙ୍ଗେମ" + - "୍ଅଦ୍ୟଘେଆଫ୍ରିହିଲିଆଇନୁଆକାଡିଆନ୍ଆଲେଇଟୁଦକ୍ଷିଣ ଆଲ୍ଟାଇପୁରୁଣା ଇଁରାଜୀଅଁଗୀକା" + - "ଆରାମାଇକ୍ଆରାଉକାନିଆନ୍ଆରାପାହୋଆରୱକଆଷ୍ଟୁରିଆନ୍ଆୱାଧିବାଲୁଚିବାଲିନୀଜ୍ବାସାବେଜ" + - "ାବେମ୍ବାଭୋଜପୁରୀବିକୋଲ୍ବିନିବିକ୍ସିକାବ୍ରାଜ୍ବୁରିଆଟ୍ବୁଗୀନୀଜ୍ବ୍ଲିନ୍କାଡୋକାର" + - "ିବ୍ଆତ୍ସମ୍ସୀବୁଆନୋଚିବ୍ଚାଛଗତାଇଚୁକୀସେମାରୀଚିନୁକ୍ ଜାରଗାଁନ୍ଚୋଟୱାଚିପେୱାନ୍ଚ" + - "େରୋକୀଚେଚେନାକପ୍ଟିକ୍କ୍ରୀମିନ୍ ତୁର୍କୀସ୍କାଶୁବିଆନ୍ଡାକୋଟାଡାରାଗ୍ୱାଡେଲାୱେର୍" + - "ସ୍ଲେଭ୍ଡୋଗ୍ରିବ୍ଦିଙ୍କାଡୋଗ୍ରୀନିଚଳା ସର୍ବିଆନ୍ଡୁଆନାମଧ୍ୟ ପର୍ତ୍ତୁଗାଲୀଡୁଆଲା" + - "ଏଫିକ୍ପ୍ରାଚୀନ୍ ମିଶିରିଏକାଜୁକ୍ଏଲାମାଇଟ୍ମଧ୍ୟ ଇଁରାଜୀଇୱୋଣ୍ଡୋଫାଙ୍ଗଫିଲିପିନୋ" + - "ଫନ୍ମଧ୍ୟ ଫ୍ରେଞ୍ଚପୁରୁଣା ଫ୍ରେଞ୍ଚଉତ୍ତର ଫ୍ରିସିୟାନ୍ପୂର୍ବ ଫ୍ରିସିୟାନ୍ଫ୍ରିୟ" + - "ୁଲୀୟାନ୍ଗାଗାୟୋଗବାୟାଗୀଜ୍ଜିବ୍ରାଟୀଜ୍ମିଡିଲ୍ ହାଇ ଜର୍ମାନ୍ପୁରୁଣା ହାଇ ଜର୍ମା" + - "ନ୍ଗୋଣ୍ଡିଗୋରୋଣ୍ଟାଲୋଗୋଥିକ୍ଗ୍ରେବୋପ୍ରାଚୀନ୍ ୟୁନାନୀସ୍ବିସ୍ ଜର୍ମାନ୍ସ୍ବିଚ୍ " + - "ଇନ୍ହାଇଡାହାୱାଇନ୍ହିଲିଗୈନନ୍ହିତୀତେହଁଙ୍ଗଉପର ସର୍ବିଆନ୍ହୁପାଇବାନ୍ଇଲୋକୋଇଁଙ୍ଗ" + - "ୁଶ୍ଲୋଜବାନ୍ଜୁଡେଓ-ପର୍ସିଆନ୍ଜୁଡେଓ-ଆରବୀକ୍କାରା-କଲ୍ପକ୍କବାଇଲ୍କଚିନ୍ଜ୍ଜୁକମ୍ବ" + - "ାକାୱିକାବାର୍ଡିଆନ୍ତ୍ୟାପ୍କୋରୋଖାସୀଖୋତାନୀଜ୍କିମ୍ବୁଣ୍ଡୁକୋନକାନୀକୋସରୈନ୍କୈପେ" + - "ଲେକରାଚୟ-ବଲ୍କାରକାରେଲିୟାନ୍କୁରୁଖକୁମୀକ୍କୁତେନାଉଲାଦିନୋଲାହାଣ୍ଡାଲାମ୍ବାଲେଜଗ" + - "ିୟାନ୍ମଙ୍ଗୋଲୋଜିଲୁବା-ଲୁଲୁଆଲୁଇସେନୋଲୁଣ୍ଡାଲୁଓଲୁସାଉମାଦୁରୀସ୍ମାଗାହୀମୈଥିଳୀମ" + - "କାସର୍ମାଣ୍ଡିଙ୍ଗୋମାସାଇମୋକ୍ଷମନ୍ଦାରମେଣ୍ଡେମଧ୍ୟ ଇରିଶ୍ମିକମୌକ୍ମିନାଙ୍ଗାବାଉମ" + - "ାଞ୍ଚୁମଣିପୁରୀମୋହୌକମୋସିବିବିଧ ଭାଷାମାନକ୍ରୀକ୍ମିରାଣ୍ଡିଜ୍ମାରୱାରୀଏର୍ଜୟାନୀପ" + - "ୋଲିଟାନ୍ଲୋ ଜର୍ମାନ୍ନେୱାରୀନୀୟାସ୍ନିୟୁଆନ୍ନୋଗାଇପୁରୁଣା ନର୍ସଏନ୍କୋଉତ୍ତରୀ ସୋ" + - "ଥୋପାରମ୍ପରିକ ନେୱାରୀନ୍ୟାମୱେଜୀନ୍ୟାନକୋଲ୍ନ୍ୟାରୋଞ୍ଜିମାୱୌସେଜ୍ଓଟ୍ଟୋମନ୍ ତୁର" + - "୍କିସ୍ପାଙ୍ଗାସିନିଆନ୍ପାହ୍ଲାଭିପାମ୍ପାଙ୍ଗାପାପିୟାମିଣ୍ଟୋପାଲାଉଆନ୍ପୁରୁଣା ପର୍" + - "ସିଆନ୍ଫୋନେସିଆନ୍ପୋହପିଏନ୍ପୁରୁଣା ପ୍ରେଭେନେସିଆଲ୍ରାଜସ୍ଥାନୀରାପାନୁଇରାରୋତୋଙ୍" + - "ଗନ୍ରୋମାନିଆରୋମାନିଆନ୍ସଣ୍ଡାୱେୟାକୁଟ୍ସାମୌରିଟନ୍ ଆରମାଇକ୍ସାସାକ୍ସାନ୍ତାଳିସିଶ" + - "ିଲିଆନ୍ସ୍କଟସ୍ସେଲ୍କପ୍ପୁରୁଣା ଇରିଶ୍ଶାନ୍ସିଦାମୋଦକ୍ଷିଣ ସାମିଲୁଲେ ସାମିଇନାରୀ" + - " ସାମିସ୍କୋଲ୍ଟ ସାମୀସୋନିଙ୍କେସୋଗଡିଏନ୍ଶାରାନା ଟୋଙ୍ଗୋଶେରେର୍ସୁକୁମାଶୁଶୁସୁମେରି" + - "ଆନ୍କ୍ଲାସିକାଲ୍ ସିରିକ୍ସିରିକ୍ତିମନେତେରେନୋତେତୁମ୍ଟାଇଗ୍ରେତୀଭ୍ଟୋକେଲାଉକ୍ଲିଙ" + - "୍ଗନ୍ତ୍ଲିଙ୍ଗିଟ୍ତାମାଶେକ୍ନ୍ୟାସା ଟୋଙ୍ଗୋଟୋକ୍ ପିସିନ୍ତିସିମିସିଆନ୍ଟୁମ୍ବୁକାତ" + - "ୁଭାଲୁତୁଭିନିଆନ୍ଉଦମୂର୍ତ୍ତୟୁଗୋରଟିକ୍ଉମ୍ବୁଣ୍ଡୁମୂଳଭାଇଭୋଟିକ୍ୱାଲମୋୱାରୈୱାସୋ" + - "କାଲ୍ମୀକ୍ୟାଓୟାପୀସ୍ଜାପୋଟେକ୍ବ୍ଲିସିମ୍ବଲସ୍ଜେନାଗାଜୁନୀକୌଣସି ଲିଙ୍ଗୁଇଷ୍ଟ ସା" + - "ମଗ୍ରୀ ନାହିଁଜାଜାଅଷ୍ଟ୍ରିଆନ୍ ଜର୍ମାନସ୍ବିସ୍ ହାଇ ଜର୍ମାନ୍ଅଷ୍ଟ୍ରେଲିଆନ୍ ଇଁର" + - "ାଜୀକାନାଡିଆନ୍ ଇଁରାଜୀବ୍ରିଟିଶ୍ ଇଁରାଜୀୟୁ.ଏସ୍. ଇଁରାଜୀଲାଟିନ୍ ଆମେରିକାନ୍ ସ" + - "୍ପାନିଶ୍ଲେବେରିଆନ୍ ସ୍ପାନିଶ୍କାନାଡିଆନ୍ ଫ୍ରେଞ୍ଚସ୍ବିସ୍ ଫ୍ରେଞ୍ଚ୍ଫ୍ଲେମିଶ୍ବ" + - "୍ରାଜିଲିଆନ୍ ପର୍ତ୍ତୁଗୀଜ୍ଲେବେରିଆନ୍ ପର୍ତ୍ତୁଗୀଜ୍ମୋଲଡୋଭିଆନ୍ସର୍ବୋ-କ୍ରୋଆଟି" + - "ଆନ୍ସରଳିକରଣ ଚାଇନୀଜ୍ପାରମ୍ପରିକ ଚାଇନୀଜ୍", - []uint16{ // 613 elements - // Entry 0 - 3F - 0x0000, 0x000f, 0x002d, 0x0042, 0x0060, 0x006c, 0x0081, 0x0096, - 0x00a8, 0x00b7, 0x00cc, 0x00de, 0x00ff, 0x0111, 0x0132, 0x0150, - 0x0165, 0x017d, 0x0192, 0x01aa, 0x01bf, 0x01d4, 0x01ec, 0x01fb, - 0x020d, 0x022b, 0x0237, 0x0243, 0x026e, 0x0280, 0x028f, 0x02a7, - 0x02bc, 0x02ce, 0x02e0, 0x02e9, 0x02fb, 0x030d, 0x032e, 0x0346, - 0x0364, 0x037c, 0x0394, 0x03a3, 0x03bb, 0x03c7, 0x03dc, 0x03f1, - 0x041f, 0x042e, 0x0459, 0x0471, 0x0486, 0x049e, 0x04b0, 0x04bc, - 0x04d4, 0x04e6, 0x04ff, 0x051d, 0x0535, 0x0553, 0x0571, 0x0583, - // Entry 40 - 7F - 0x05aa, 0x05ce, 0x05f8, 0x0607, 0x0623, 0x063e, 0x0647, 0x0668, - 0x0680, 0x0698, 0x06b0, 0x06c8, 0x06e0, 0x06ef, 0x0701, 0x071f, - 0x0731, 0x0758, 0x076a, 0x0779, 0x078e, 0x079d, 0x07b5, 0x07d3, - 0x07df, 0x07f7, 0x080c, 0x081e, 0x0845, 0x0854, 0x0878, 0x0890, - 0x0899, 0x08b7, 0x08e2, 0x08fa, 0x0912, 0x0930, 0x093f, 0x095d, - 0x0975, 0x0993, 0x09a2, 0x09ae, 0x09c3, 0x09d8, 0x09e7, 0x0a0c, - 0x0a1e, 0x0a30, 0x0a39, 0x0a70, 0x0a9e, 0x0ac6, 0x0ad8, 0x0aed, - 0x0b02, 0x0b11, 0x0b20, 0x0b2f, 0x0b44, 0x0b59, 0x0b65, 0x0b77, - // Entry 80 - BF - 0x0b89, 0x0bb0, 0x0bc5, 0x0bed, 0x0bff, 0x0c1a, 0x0c2c, 0x0c53, - 0x0c68, 0x0c86, 0x0c98, 0x0cb4, 0x0cc6, 0x0cd5, 0x0ced, 0x0d0e, - 0x0d23, 0x0d2f, 0x0d44, 0x0d5f, 0x0d77, 0x0d89, 0x0d9b, 0x0db3, - 0x0dcb, 0x0de3, 0x0df5, 0x0e07, 0x0e19, 0x0e22, 0x0e3d, 0x0e58, - 0x0e70, 0x0e82, 0x0e9a, 0x0ea9, 0x0ebb, 0x0ed6, 0x0ee8, 0x0f09, - 0x0f1e, 0x0f30, 0x0f42, 0x0f60, 0x0f75, 0x0f87, 0x0f96, 0x0fa2, - 0x0fb4, 0x0fc6, 0x0fd8, 0x0fed, 0x0ff9, 0x1011, 0x1020, 0x103b, - 0x104d, 0x104d, 0x1068, 0x1068, 0x1074, 0x108c, 0x108c, 0x109e, - // Entry C0 - FF - 0x109e, 0x10c3, 0x10e8, 0x10fa, 0x1112, 0x1133, 0x1133, 0x1148, - 0x1148, 0x1148, 0x1154, 0x1154, 0x1154, 0x1154, 0x1154, 0x1172, - 0x1172, 0x1181, 0x1193, 0x11ab, 0x11ab, 0x11b7, 0x11b7, 0x11b7, - 0x11b7, 0x11c3, 0x11d5, 0x11d5, 0x11d5, 0x11d5, 0x11d5, 0x11d5, - 0x11ea, 0x11fc, 0x1208, 0x1208, 0x1208, 0x1220, 0x1220, 0x1220, - 0x1232, 0x1232, 0x1232, 0x1232, 0x1247, 0x125f, 0x125f, 0x1271, - 0x1271, 0x127d, 0x128f, 0x128f, 0x12a1, 0x12b6, 0x12b6, 0x12c8, - 0x12d7, 0x12e9, 0x12f5, 0x1320, 0x132f, 0x1347, 0x1359, 0x136b, - // Entry 100 - 13F - 0x136b, 0x1380, 0x1380, 0x13b1, 0x13b1, 0x13cc, 0x13de, 0x13f6, - 0x13f6, 0x140e, 0x1420, 0x1438, 0x144a, 0x144a, 0x145c, 0x1484, - 0x1484, 0x1493, 0x14c1, 0x14c1, 0x14d0, 0x14d0, 0x14d0, 0x14df, - 0x14df, 0x150a, 0x151f, 0x1537, 0x1556, 0x1556, 0x156b, 0x156b, - 0x157a, 0x1592, 0x1592, 0x159b, 0x159b, 0x15bd, 0x15e5, 0x15e5, - 0x1613, 0x1641, 0x1665, 0x166b, 0x166b, 0x166b, 0x1677, 0x1686, - 0x1686, 0x1692, 0x16b0, 0x16b0, 0x16e2, 0x1714, 0x1714, 0x1726, - 0x1744, 0x1756, 0x1768, 0x1793, 0x17bb, 0x17bb, 0x17bb, 0x17bb, + "ଅଫାର୍ଆବ୍ଖାଜିଆନ୍ଅବେସ୍ତନଆଫ୍ରିକୀୟଅକନ୍ଆମହାରକିଆର୍ଗୋନୀଆରବିକ୍ଆସାମୀୟଆଭାରିକ୍ଆୟମାର" + + "ାଆଜେରବାଇଜାନିବାଶକିର୍\u200cବେଲାରୁଷିଆନ୍ବୁଲଗେରିଆନ୍ବିସଲାମାବାମ୍ବାରାବଙ୍ଗା" + + "ଳୀତିବ୍ବତୀୟବ୍ରେଟନ୍କାଟଲାନ୍କାଟାଲାନ୍ଚେଚନ୍ଚାମୋରୋକୋର୍ସିକାନ୍କ୍ରୀଚେକ୍ଚର୍ଚ୍" + + "ଚ ସ୍ଲାଭିକ୍ଚୁଭାଶ୍ୱେଲ୍ସଡାନ୍ନିସ୍ଜର୍ମାନଡିଭେହୀଦଡଜୋଙ୍ଗଖାଇୱେଗ୍ରୀକ୍ଇଂରାଜୀଏ" + + "ସ୍ପାରେଣ୍ଟୋସ୍ପେନିୟଏସ୍ତୋନିଆନ୍ବାସ୍କ୍ୱିପର୍ସିଆନ୍ଫୁଲାହଫିନ୍ନିସ୍ଫିଜିଫାରୋଏସ" + + "େଫରାସୀପାଶ୍ଚାତ୍ୟ ଫ୍ରିସିଆନ୍ଇରିସ୍ସ୍କଟିସ୍ ଗାଏଲିକ୍ଗାଲସିଆନ୍ଗୁଆରାନୀଗୁଜୁରା" + + "ଟୀମାଁକ୍ସହୌସାହେବ୍ର୍ୟୁହିନ୍ଦୀହିରି ମୋଟୁକ୍ରୋଆଟିଆନ୍ହୈତାୟିନ୍ହଙ୍ଗେରୀୟଆର୍ମେ" + + "ନିଆନ୍ହେରେରୋଇର୍ଣ୍ଟଲିଙ୍ଗୁଆଇଣ୍ଡୋନେସୀୟଇର୍ଣ୍ଟରଲିଙ୍ଗୁଇଇଗବୋସିଚୁଆନ୍ ୟୀଇନୁପ" + + "ିୟାକ୍ଇଡୋଆଇସଲାଣ୍ଡିକ୍ଇଟାଲୀୟଇନୁକଟୁତ୍\u200cଜାପାନୀଜାଭାନୀଜ୍ଜର୍ଜିୟକଙ୍ଗୋକୀ" + + "କୁୟୁକ୍ୱାନ୍ୟାମ୍କାଜାକ୍କାଲାଲିସୁଟ୍ଖାମେର୍କନ୍ନଡକୋରିଆନ୍କନୁରୀକାଶ୍ମିରୀକୁର୍ଦ" + + "୍ଦିଶ୍କୋମିକୋର୍ନିସ୍କୀରଗୀଜ୍ଲାଟିନ୍ଲକ୍ସେମବର୍ଗିସ୍ଗନ୍ଦାଲିମ୍ବୁର୍ଗିସ୍ଲିଙ୍ଗା" + + "ଲାଲାଓଲିଥୁଆନିଆନ୍ଲ୍ୟୁବା-କାଟାଙ୍ଗାଲାଟଭିଆନ୍ମାଲାଗାସୀମାର୍ଶାଲୀଜ୍ମାଓରୀମାସେଡ" + + "ୋନିଆନ୍ମାଲାୟଲମ୍ମଙ୍ଗୋଳିୟମରାଠୀମାଲୟମାଲଟୀଜ୍ବର୍ମୀଜ୍ନାଉରୁଉତ୍ତର ନେଡବେଲେନେପ" + + "ାଳୀଡୋଙ୍ଗାଡଚ୍ନରୱେଜିଆନ୍ ନିୟୋର୍ସ୍କନରୱେଜିଆନ୍ ବୋକମଲ୍ଦକ୍ଷିଣ ନେଡବେଲେନାଭାଜ" + + "ୋନିୟାଞ୍ଜଓସିଟାନ୍ଓଜିୱାଓରୋମୋଓଡ଼ିଆଓସେଟିକ୍ପଞ୍ଜାବୀପାଲିପୋଲିଶ୍ପାସ୍ତୋପର୍ତ୍ତ" + + "ୁଗୀଜ୍\u200cକ୍ୱେଚୁଆରୋମାନଶ୍\u200cରୁଣ୍ଡିରୋମାନିଆନ୍ରୁଷିୟକିନ୍ୟାରୱାଣ୍ଡାସଂ" + + "ସ୍କୃତସର୍ଦିନିଆନ୍ସିନ୍ଧୀଉତ୍ତର ସାମିସାଙ୍ଗୋସିଂହଳସ୍ଲୋଭାକ୍ସ୍ଲୋଭେନିଆନ୍ସାମୋଆ" + + "ନ୍ଶୋନାସୋମାଲିଆଆଲବାନିଆନ୍ସର୍ବିୟସ୍ଵାତିସେସୋଥୋସୁଦାନୀଜ୍ସ୍ୱେଡିସ୍ସ୍ୱାହିଲ୍ତା" + + "ମିଲ୍ତେଲୁଗୁତାଜିକ୍ଥାଇଟ୍ରିଗିନିଆତୁର୍କମେନ୍ସୱାନାଟୋଙ୍ଗାତୁର୍କିସ୍ସୋଙ୍ଗାତାତା" + + "ର୍ତାହିତିଆନ୍ୟୁଘୁର୍ୟୁକ୍ରାନିଆନ୍ଉର୍ଦ୍ଦୁଉଜବେକ୍ଭେଣ୍ଡାଭିଏତନାମିଜ୍ବୋଲାପୁକୱା" + + "ଲୁନ୍ୱୋଲଫ୍ଖୋସାୟିଡିସ୍ୟୋରୁବାଜୁଆଙ୍ଗଚାଇନିଜ୍\u200cଜୁଲୁଆଚାଇନୀଜ୍ଆକୋଲିଆଦାଙ୍" + + "ଗେମ୍ଅଦ୍ୟଘେଆଫ୍ରିହିଲିଆଘେମଆଇନୁଆକାଡିଆନ୍ଆଲେଇଟୁଦକ୍ଷିଣ ଆଲ୍ଟାଇପୁରୁଣା ଇଁରାଜ" + + "ୀଅଁଗୀକାଆରାମାଇକ୍ମାପୁଚେଆରାପାହୋଆରୱକଆସୁଆଷ୍ଟୁରିଆନ୍ଆୱାଧିବାଲୁଚିବାଲିନୀଜ୍ବା" + + "ସାବେଜାବେମ୍ବାବେନାଭୋଜପୁରୀବିକୋଲ୍ବିନିସିକସିକାବ୍ରାଜ୍ବୋଡୋବୁରିଆଟ୍ବୁଗୀନୀଜ୍ବ" + + "୍ଲିନ୍କାଡୋକାରିବ୍ଆତ୍ସମ୍ସୀବୁଆନୋଚିଗାଚିବ୍ଚାଛଗତାଇଚୁକୀସେମାରୀଚିନୁକ୍ ଜାରଗାଁ" + + "ନ୍ଚୋଟୱାଚିପେୱାନ୍ଚେରୋକୀଚେଚେନାକେନ୍ଦ୍ରୀୟ କୁରଡିସ୍କପ୍ଟିକ୍କ୍ରୀମିନ୍ ତୁର୍କୀ" + + "ସ୍ସେସେଲୱା କ୍ରେଓଲେ ଫ୍ରେଞ୍ଚ୍କାଶୁବିଆନ୍ଡାକୋଟାଡାରାଗ୍ୱାତାଇତିଡେଲାୱେର୍ସ୍ଲେ" + + "ଭ୍ଡୋଗ୍ରିବ୍ଦିଙ୍କାଜର୍ମାଡୋଗ୍ରୀନିମ୍ନ ସର୍ବିଆନ୍\u200cଡୁଆନାମଧ୍ୟ ପର୍ତ୍ତୁଗା" + + "ଲୀଜୋଲା-ଫୋନୟିଡୁଆଲାଡାଜାଗାଏମ୍ଵୁଏଫିକ୍ପ୍ରାଚୀନ୍ ମିଶିରିଏକାଜୁକ୍ଏଲାମାଇଟ୍ମଧ୍" + + "ୟ ଇଁରାଜୀଇୱୋଣ୍ଡୋଫାଙ୍ଗଫିଲିପିନୋଫନ୍ମଧ୍ୟ ଫ୍ରେଞ୍ଚପୁରୁଣା ଫ୍ରେଞ୍ଚଉତ୍ତର ଫ୍ର" + + "ିସିୟାନ୍ପୂର୍ବ ଫ୍ରିସିୟାନ୍ଫ୍ରିୟୁଲୀୟାନ୍ଗାଗାୟୋଗବାୟାଗୀଜ୍ଜିବ୍ରାଟୀଜ୍ମିଡିଲ୍" + + " ହାଇ ଜର୍ମାନ୍ପୁରୁଣା ହାଇ ଜର୍ମାନ୍ଗୋଣ୍ଡିଗୋରୋଣ୍ଟାଲୋଗୋଥିକ୍ଗ୍ରେବୋପ୍ରାଚୀନ୍ ୟ" + + "ୁନାନୀସୁଇସ୍ ଜର୍ମାନ୍ଗୁସିଗୱିଚ’ଇନ୍ହାଇଡାହାୱାଇନ୍ହିଲିଗୈନନ୍ହିତୀତେହଁଙ୍ଗଉପର " + + "ସର୍ବିଆନ୍ହୁପାଇବାନ୍ଇବିବିଓଇଲୋକୋଇଁଙ୍ଗୁଶ୍ଲୋଜବାନ୍ନାଗୋମ୍ଵାମାଚେମେଜୁଡେଓ-ପର୍" + + "ସିଆନ୍ଜୁଡେଓ-ଆରବୀକ୍କାରା-କଲ୍ପକ୍କବାଇଲ୍କଚିନ୍ଜଜୁକମ୍ବାକାୱିକାବାର୍ଡିଆନ୍ତ୍ୟା" + + "ପ୍ମାକୋଣ୍ଡେକାବୁଭେରଡିଆନୁକୋରୋଖାସୀଖୋତାନୀଜ୍କୋୟରା ଚିନିକାକୋକାଲେନଜିନ୍କିମ୍ବ" + + "ୁଣ୍ଡୁକୋଙ୍କଣିକୋସରୈନ୍କୈପେଲେକରାଚୟ-ବଲ୍କାରକାରେଲିୟାନ୍କୁରୁଖଶାମବାଲାବାଫଲାକୋ" + + "ଲୋବନିୟକୁମୀକ୍କୁତେନାଉଲାଦିନୋଲାନଗିଲାହାଣ୍ଡାଲାମ୍ବାଲେଜଗିୟାନ୍ଲାକୋଟାମଙ୍ଗୋଲୋ" + + "ଜିଉତ୍ତର ଲୁରିଲୁବା-ଲୁଲୁଆଲୁଇସେନୋଲୁଣ୍ଡାଲୁଓମିଜୋଲୁୟିଆମାଦୁରୀସ୍ମାଗାହୀମୈଥିଳ" + + "ୀମକାସର୍ମାଣ୍ଡିଙ୍ଗୋମାସାଇମୋକ୍ଷମନ୍ଦାରମେନଡେମେରୁମୋରିସୟେନ୍ମଧ୍ୟ ଇରିଶ୍ମଖୁୱା" + + "-ମେଟ୍ଟାମେଟାମିକମୌକ୍ମିନାଙ୍ଗାବାଉମାଞ୍ଚୁମଣିପୁରୀମୋହୌକମୋସିମୁନଡାଂବିବିଧ ଭାଷାମ" + + "ାନକ୍ରୀକ୍ମିରାଣ୍ଡିଜ୍ମାରୱାରୀଏର୍ଜୟାମାଜାନଡେରାନିନୀପୋଲିଟାନ୍ନାମାଲୋ ଜର୍ମାନ୍" + + "ନେୱାରୀନୀୟାସ୍ନିୟୁଆନ୍କୱାସିଓନାଗିମବୋନ୍ନୋଗାଇପୁରୁଣା ନର୍ସଏନକୋଉତ୍ତରୀ ସୋଥୋନ" + + "ୁଏରପାରମ୍ପରିକ ନେୱାରୀନ୍ୟାମୱେଜୀନ୍ୟାନକୋଲ୍ନ୍ୟାରୋଞ୍ଜିମାୱୌସେଜ୍ଓଟ୍ଟୋମନ୍ ତୁ" + + "ର୍କିସ୍ପାଙ୍ଗାସିନିଆନ୍ପାହ୍ଲାଭିପାମ୍ପାଙ୍ଗାପାପିଆମେଣ୍ଟୋପାଲାଉଆନ୍ନାଇଜେରୀୟ ପ" + + "ିଡଗିନ୍ପୁରୁଣା ପର୍ସିଆନ୍ଫୋନେସିଆନ୍ପୋହପିଏନ୍ପ୍ରୁସିୟପୁରୁଣା ପ୍ରେଭେନେସିଆଲ୍କ" + + "ିଚେରାଜସ୍ଥାନୀରାପାନୁଇରାରୋତୋଙ୍ଗନ୍ରୋମ୍ବୋରୋମାନିଆରୋମାନିଆନ୍ଆରଡବ୍ୟୁଏସଣ୍ଡାୱ" + + "େସାଖାସାମୌରିଟନ୍ ଆରମାଇକ୍ସମବୁରୁସାସାକ୍ସାନ୍ତାଳିନଗାମବେସାନଗୁସିଶିଲିଆନ୍ସ୍କଟ" + + "ସ୍ସେନାସେଲ୍କପ୍କୋୟରା ସେନ୍ନିପୁରୁଣା ଇରିଶ୍ତାଚେଲହିଟ୍ଶାନ୍ସିଦାମୋଦକ୍ଷିଣ ସାମ" + + "ିଲୁଲେ ସାମିଇନାରୀ ସାମିସ୍କୋଲ୍ଟ ସାମୀସୋନିଙ୍କେସୋଗଡିଏନ୍ଶାରାନା ଟୋଙ୍ଗୋଶେରେର" + + "୍ସହୋସୁକୁମାଶୁଶୁସୁମେରିଆନ୍କୋମୋରିୟକ୍ଲାସିକାଲ୍ ସିରିକ୍ସିରିକ୍ତିମନେତେସାତେରେ" + + "ନୋତେତୁମ୍ଟାଇଗ୍ରେତୀଭ୍ଟୋକେଲାଉକ୍ଲିଙ୍ଗନ୍ତ୍ଲିଙ୍ଗିଟ୍ତାମାଶେକ୍ନ୍ୟାସା ଟୋଙ୍ଗୋ" + + "ଟୋକ୍ ପିସିନ୍ତାରୋକୋତିସିମିସିଆନ୍ଟୁମ୍ବୁକାତୁଭାଲୁତାସାୱାକ୍ତୁଭିନିଆନ୍କେନ୍ଦ୍ର" + + "ୀୟ ଆଟଲାସ୍ ଟାମାଜିଘାଟ୍ଉଦମୂର୍ତ୍ତୟୁଗୋରଟିକ୍ଉମ୍ବୁଣ୍ଡୁଅଜଣା ଭାଷାଭାଇଭୋଟିକ୍ଭ" + + "ୁନଜୋୱାଲସେର୍ୱାଲମୋୱାରୈୱାସୋକାଲ୍ମୀକ୍ସୋଗାୟାଓୟାପୀସ୍ୟାଂବେନ୍ୟେମବାକାନଟୋନେସେ" + + "ଜାପୋଟେକ୍ବ୍ଲିସିମ୍ବଲସ୍ଜେନାଗାମାନାଙ୍କ ମରୋକିୟ ତାମାଜିଘାଟ୍ଜୁନୀକୌଣସି ଲିଙ୍ଗ" + + "ୁଇଷ୍ଟ ସାମଗ୍ରୀ ନାହିଁଜାଜାଆଧୁନିକ ମାନାଙ୍କ ଆରବୀୟଅଷ୍ଟ୍ରିଆନ୍ ଜର୍ମାନସ୍ୱିସ୍" + + "\u200c ହାଇ ଜର୍ମାନଅଷ୍ଟ୍ରେଲିୟ ଇଂରାଜୀକାନାଡିୟ ଇଂରାଜୀବ୍ରିଟିଶ୍\u200c ଇଂରାଜ" + + "ୀଆମେରିକୀୟ ଇଂରାଜୀଲାଟିନ୍\u200c ଆମେରିକୀୟ ସ୍ପାନିସ୍\u200cୟୁରୋପୀୟ ସ୍ପାନି" + + "ସ୍\u200cମେକ୍ସିକାନ ସ୍ପାନିସ୍\u200cକାନାଡିୟ ଫ୍ରେଞ୍ଚସ୍ୱିସ୍ ଫ୍ରେଞ୍ଚଫ୍ଲେମ" + + "ିଶ୍ବ୍ରାଜିଲିଆନ୍ ପର୍ତ୍ତୁଗୀଜ୍ୟୁରୋପୀୟ ପର୍ତ୍ତୁଗୀଜ୍\u200cମୋଲଡୋଭିଆନ୍ସର୍ବୋ" + + "-କ୍ରୋଆଟିଆନ୍କଙ୍ଗୋ ସ୍ୱାହିଲିସରଳୀକୃତ ଚାଇନିଜ୍\u200cପାରମ୍ପରିକ ଚାଇନିଜ୍" + + "\u200c", + []uint16{ // 615 elements + // Entry 0 - 3F + 0x0000, 0x000f, 0x002d, 0x0042, 0x005a, 0x0066, 0x007b, 0x0090, + 0x00a2, 0x00b4, 0x00c9, 0x00db, 0x00fc, 0x0114, 0x0135, 0x0153, + 0x0168, 0x0180, 0x0195, 0x01ad, 0x01c2, 0x01d7, 0x01ef, 0x01fe, + 0x0210, 0x022e, 0x023a, 0x0246, 0x0271, 0x0283, 0x0292, 0x02aa, + 0x02bc, 0x02ce, 0x02e9, 0x02f2, 0x0304, 0x0316, 0x0337, 0x034c, + 0x036a, 0x0382, 0x039a, 0x03a9, 0x03c1, 0x03cd, 0x03e2, 0x03f1, + 0x0428, 0x0437, 0x0462, 0x047a, 0x048f, 0x04a7, 0x04b9, 0x04c5, + 0x04dd, 0x04ef, 0x0508, 0x0526, 0x053e, 0x0556, 0x0574, 0x0586, + // Entry 40 - 7F + 0x05ad, 0x05cb, 0x05f5, 0x0601, 0x061d, 0x0638, 0x0641, 0x0662, + 0x0674, 0x068f, 0x06a1, 0x06b9, 0x06cb, 0x06da, 0x06ec, 0x070a, + 0x071c, 0x073a, 0x074c, 0x075b, 0x0770, 0x077f, 0x0797, 0x07b5, + 0x07c1, 0x07d9, 0x07ee, 0x0800, 0x0827, 0x0836, 0x085a, 0x0872, + 0x087b, 0x0899, 0x08c4, 0x08dc, 0x08f4, 0x0912, 0x0921, 0x0942, + 0x095a, 0x0972, 0x0981, 0x098d, 0x09a2, 0x09b7, 0x09c6, 0x09eb, + 0x09fd, 0x0a0f, 0x0a18, 0x0a4f, 0x0a7d, 0x0aa5, 0x0ab7, 0x0acc, + 0x0ae1, 0x0af0, 0x0aff, 0x0b0e, 0x0b23, 0x0b38, 0x0b44, 0x0b56, + // Entry 80 - BF + 0x0b68, 0x0b8c, 0x0ba1, 0x0bb9, 0x0bcb, 0x0be6, 0x0bf5, 0x0c1c, + 0x0c31, 0x0c4f, 0x0c61, 0x0c7d, 0x0c8f, 0x0c9e, 0x0cb6, 0x0cd7, + 0x0cec, 0x0cf8, 0x0d0d, 0x0d28, 0x0d3a, 0x0d4c, 0x0d5e, 0x0d76, + 0x0d8e, 0x0da6, 0x0db8, 0x0dca, 0x0ddc, 0x0de5, 0x0e00, 0x0e1b, + 0x0e2a, 0x0e3c, 0x0e54, 0x0e66, 0x0e78, 0x0e93, 0x0ea5, 0x0ec6, + 0x0edb, 0x0eed, 0x0eff, 0x0f1d, 0x0f32, 0x0f44, 0x0f53, 0x0f5f, + 0x0f71, 0x0f83, 0x0f95, 0x0fad, 0x0fb9, 0x0fd1, 0x0fe0, 0x0ffb, + 0x100d, 0x100d, 0x1028, 0x1034, 0x1040, 0x1058, 0x1058, 0x106a, + // Entry C0 - FF + 0x106a, 0x108f, 0x10b4, 0x10c6, 0x10de, 0x10f0, 0x10f0, 0x1105, + 0x1105, 0x1105, 0x1111, 0x1111, 0x1111, 0x111a, 0x111a, 0x1138, + 0x1138, 0x1147, 0x1159, 0x1171, 0x1171, 0x117d, 0x117d, 0x117d, + 0x117d, 0x1189, 0x119b, 0x119b, 0x11a7, 0x11a7, 0x11a7, 0x11a7, + 0x11bc, 0x11ce, 0x11da, 0x11da, 0x11da, 0x11ef, 0x11ef, 0x11ef, + 0x1201, 0x1201, 0x120d, 0x120d, 0x1222, 0x123a, 0x123a, 0x124c, + 0x124c, 0x1258, 0x126a, 0x126a, 0x127c, 0x127c, 0x1291, 0x129d, + 0x12af, 0x12be, 0x12d0, 0x12dc, 0x1307, 0x1316, 0x132e, 0x1340, + // Entry 100 - 13F + 0x1352, 0x1383, 0x1398, 0x1398, 0x13c9, 0x140d, 0x1428, 0x143a, + 0x1452, 0x1461, 0x1479, 0x148b, 0x14a3, 0x14b5, 0x14c4, 0x14d6, + 0x1501, 0x1501, 0x1510, 0x153e, 0x155a, 0x1569, 0x157b, 0x158a, + 0x1599, 0x1599, 0x15c4, 0x15d9, 0x15f1, 0x1610, 0x1610, 0x1625, + 0x1625, 0x1634, 0x164c, 0x164c, 0x1655, 0x1655, 0x1677, 0x169f, + 0x169f, 0x16cd, 0x16fb, 0x171f, 0x1725, 0x1725, 0x1725, 0x1731, + 0x1740, 0x1740, 0x174c, 0x176a, 0x176a, 0x179c, 0x17ce, 0x17ce, + 0x17e0, 0x17fe, 0x1810, 0x1822, 0x184d, 0x1872, 0x1872, 0x1872, // Entry 140 - 17F - 0x17d7, 0x17e6, 0x17e6, 0x17fb, 0x17fb, 0x1816, 0x1828, 0x1837, - 0x1859, 0x1859, 0x1865, 0x1874, 0x1874, 0x1883, 0x189b, 0x189b, - 0x189b, 0x18b0, 0x18b0, 0x18b0, 0x18d8, 0x18fa, 0x18fa, 0x1919, - 0x192b, 0x193a, 0x1946, 0x1955, 0x1961, 0x1982, 0x1982, 0x1994, - 0x1994, 0x1994, 0x1994, 0x19a0, 0x19a0, 0x19ac, 0x19c4, 0x19c4, - 0x19c4, 0x19c4, 0x19c4, 0x19c4, 0x19e2, 0x19e2, 0x19f7, 0x1a0c, - 0x1a1e, 0x1a40, 0x1a40, 0x1a40, 0x1a5e, 0x1a6d, 0x1a6d, 0x1a6d, - 0x1a6d, 0x1a7f, 0x1a94, 0x1aa6, 0x1aa6, 0x1abe, 0x1ad0, 0x1aeb, + 0x187e, 0x1896, 0x18a5, 0x18a5, 0x18ba, 0x18ba, 0x18d5, 0x18e7, + 0x18f6, 0x1918, 0x1918, 0x1924, 0x1933, 0x1945, 0x1954, 0x196c, + 0x196c, 0x196c, 0x1981, 0x1999, 0x19ab, 0x19d3, 0x19f5, 0x19f5, + 0x1a14, 0x1a26, 0x1a35, 0x1a3e, 0x1a4d, 0x1a59, 0x1a7a, 0x1a7a, + 0x1a8c, 0x1aa4, 0x1ac8, 0x1ac8, 0x1ad4, 0x1ad4, 0x1ae0, 0x1af8, + 0x1b14, 0x1b14, 0x1b14, 0x1b20, 0x1b3b, 0x1b59, 0x1b59, 0x1b6e, + 0x1b83, 0x1b95, 0x1bb7, 0x1bb7, 0x1bb7, 0x1bd5, 0x1be4, 0x1bf9, + 0x1c08, 0x1c20, 0x1c32, 0x1c47, 0x1c59, 0x1c68, 0x1c80, 0x1c92, // Entry 180 - 1BF - 0x1aeb, 0x1aeb, 0x1aeb, 0x1aeb, 0x1aeb, 0x1afa, 0x1b06, 0x1b06, - 0x1b06, 0x1b22, 0x1b37, 0x1b49, 0x1b52, 0x1b61, 0x1b61, 0x1b61, - 0x1b61, 0x1b79, 0x1b79, 0x1b8b, 0x1b9d, 0x1baf, 0x1bcd, 0x1bdc, - 0x1bdc, 0x1beb, 0x1bfd, 0x1c0f, 0x1c0f, 0x1c0f, 0x1c2b, 0x1c2b, - 0x1c2b, 0x1c40, 0x1c61, 0x1c73, 0x1c88, 0x1c97, 0x1ca3, 0x1ca3, - 0x1ca3, 0x1cc8, 0x1cda, 0x1cf8, 0x1d0d, 0x1d0d, 0x1d0d, 0x1d1f, - 0x1d1f, 0x1d1f, 0x1d3d, 0x1d3d, 0x1d59, 0x1d6b, 0x1d7d, 0x1d92, - 0x1d92, 0x1d92, 0x1d92, 0x1da1, 0x1dc0, 0x1dc0, 0x1dcf, 0x1dee, + 0x1cad, 0x1cad, 0x1cad, 0x1cad, 0x1cbf, 0x1cbf, 0x1cce, 0x1cce, + 0x1cda, 0x1cf6, 0x1cf6, 0x1d12, 0x1d27, 0x1d39, 0x1d42, 0x1d4e, + 0x1d5d, 0x1d5d, 0x1d5d, 0x1d75, 0x1d75, 0x1d87, 0x1d99, 0x1dab, + 0x1dc9, 0x1dd8, 0x1dd8, 0x1de7, 0x1df9, 0x1e08, 0x1e14, 0x1e2f, + 0x1e4b, 0x1e6d, 0x1e79, 0x1e8e, 0x1eaf, 0x1ec1, 0x1ed6, 0x1ee5, + 0x1ef1, 0x1ef1, 0x1f03, 0x1f28, 0x1f3a, 0x1f58, 0x1f6d, 0x1f6d, + 0x1f6d, 0x1f7f, 0x1fa0, 0x1fa0, 0x1fbe, 0x1fca, 0x1fe6, 0x1ff8, + 0x200a, 0x201f, 0x201f, 0x2031, 0x204c, 0x205b, 0x207a, 0x207a, // Entry 1C0 - 1FF - 0x1dee, 0x1e1c, 0x1e37, 0x1e52, 0x1e64, 0x1e76, 0x1e88, 0x1eb9, - 0x1ee0, 0x1ef8, 0x1f16, 0x1f3a, 0x1f52, 0x1f52, 0x1f52, 0x1f52, - 0x1f52, 0x1f7d, 0x1f7d, 0x1f98, 0x1f98, 0x1f98, 0x1fb0, 0x1fb0, - 0x1fea, 0x1fea, 0x1fea, 0x2005, 0x201a, 0x203b, 0x203b, 0x203b, - 0x203b, 0x204d, 0x204d, 0x204d, 0x204d, 0x206b, 0x206b, 0x2080, - 0x2092, 0x20c3, 0x20c3, 0x20d5, 0x20ed, 0x20ed, 0x20ed, 0x20ed, - 0x2108, 0x211a, 0x211a, 0x211a, 0x211a, 0x211a, 0x211a, 0x212f, - 0x212f, 0x2151, 0x2151, 0x2151, 0x215d, 0x215d, 0x216f, 0x216f, + 0x2086, 0x20a5, 0x20b1, 0x20df, 0x20fa, 0x2115, 0x2127, 0x2139, + 0x214b, 0x217c, 0x21a3, 0x21bb, 0x21d9, 0x21fa, 0x2212, 0x2212, + 0x2240, 0x2240, 0x2240, 0x226b, 0x226b, 0x2286, 0x2286, 0x2286, + 0x229e, 0x22b3, 0x22ed, 0x22f9, 0x22f9, 0x2314, 0x2329, 0x234a, + 0x234a, 0x234a, 0x235c, 0x236e, 0x236e, 0x236e, 0x236e, 0x238c, + 0x23a4, 0x23b9, 0x23c5, 0x23f6, 0x2408, 0x241a, 0x2432, 0x2432, + 0x2444, 0x2453, 0x246e, 0x2480, 0x2480, 0x2480, 0x2480, 0x248c, + 0x248c, 0x24a1, 0x24c3, 0x24e5, 0x24e5, 0x2500, 0x250c, 0x250c, // Entry 200 - 23F - 0x216f, 0x218e, 0x21a7, 0x21c3, 0x21e5, 0x21fd, 0x2215, 0x223a, - 0x224c, 0x224c, 0x224c, 0x225e, 0x226a, 0x2285, 0x2285, 0x22b6, - 0x22c8, 0x22c8, 0x22c8, 0x22d7, 0x22d7, 0x22e9, 0x22fb, 0x2310, - 0x231c, 0x2331, 0x2331, 0x234c, 0x236a, 0x236a, 0x2382, 0x23a7, - 0x23c6, 0x23c6, 0x23c6, 0x23c6, 0x23e7, 0x23e7, 0x23ff, 0x2411, - 0x2411, 0x242c, 0x242c, 0x2447, 0x2462, 0x247d, 0x2486, 0x248f, - 0x248f, 0x248f, 0x248f, 0x248f, 0x24a1, 0x24a1, 0x24a1, 0x24a1, - 0x24b0, 0x24bc, 0x24c8, 0x24c8, 0x24c8, 0x24e0, 0x24e0, 0x24e0, + 0x251e, 0x251e, 0x251e, 0x253d, 0x2556, 0x2572, 0x2594, 0x25ac, + 0x25c4, 0x25e9, 0x25fb, 0x2604, 0x2604, 0x2616, 0x2622, 0x263d, + 0x2652, 0x2683, 0x2695, 0x2695, 0x2695, 0x26a4, 0x26b0, 0x26c2, + 0x26d4, 0x26e9, 0x26f5, 0x270a, 0x270a, 0x2725, 0x2743, 0x2743, + 0x275b, 0x2780, 0x279f, 0x279f, 0x27b1, 0x27b1, 0x27d2, 0x27d2, + 0x27ea, 0x27fc, 0x2814, 0x282f, 0x287c, 0x2897, 0x28b2, 0x28cd, + 0x28e6, 0x28ef, 0x28ef, 0x28ef, 0x28ef, 0x28ef, 0x2901, 0x2901, + 0x2910, 0x2925, 0x2934, 0x2940, 0x294c, 0x294c, 0x294c, 0x2964, // Entry 240 - 27F - 0x24e9, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x24fb, 0x2513, 0x2537, - 0x2537, 0x2549, 0x2549, 0x2555, 0x25a9, 0x25b5, 0x25b5, 0x25b5, - 0x25e6, 0x2618, 0x264f, 0x267d, 0x26a8, 0x26cc, 0x2713, 0x2747, - 0x2747, 0x2747, 0x2778, 0x27a3, 0x27a3, 0x27bb, 0x27fe, 0x283b, - 0x2859, 0x2887, 0x2887, 0x28b2, 0x28e3, + 0x2964, 0x2970, 0x2979, 0x298b, 0x29a0, 0x29af, 0x29af, 0x29ca, + 0x29e2, 0x2a06, 0x2a06, 0x2a18, 0x2a5f, 0x2a6b, 0x2abf, 0x2acb, + 0x2b03, 0x2b03, 0x2b34, 0x2b66, 0x2b97, 0x2bbf, 0x2bed, 0x2c18, + 0x2c62, 0x2c93, 0x2cca, 0x2cca, 0x2cf5, 0x2d1d, 0x2d1d, 0x2d35, + 0x2d78, 0x2db2, 0x2dd0, 0x2dfe, 0x2e26, 0x2e54, 0x2e88, }, }, { // os @@ -10574,7 +10991,7 @@ var langHeaders = [252]header{ "лисагамерикаг англисаглатинаг америкаг англисагевропӕйаг англисагка" + "надӕйаг францагшвейцариаг францагбразилиаг португалиагевропӕйаг пол" + "тугалиагӕнцонгонд китайагтрадицион китайаг", - []uint16{ // 613 elements + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0000, 0x000e, 0x001a, 0x002c, 0x002c, 0x002c, 0x002c, 0x003a, 0x003a, 0x0048, 0x0048, 0x0058, 0x0068, 0x0068, 0x007a, @@ -10612,23 +11029,23 @@ var langHeaders = [252]header{ 0x029d, 0x029d, 0x029d, 0x029d, 0x029d, 0x029d, 0x029d, 0x029d, 0x029d, 0x029d, 0x029d, 0x029d, 0x029d, 0x029d, 0x029d, 0x029d, // Entry 100 - 13F - 0x029d, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, + 0x029d, 0x029d, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, - 0x02a9, 0x02c2, 0x02c2, 0x02c2, 0x02c2, 0x02c2, 0x02c2, 0x02c2, - 0x02c2, 0x02d6, 0x02d6, 0x02d6, 0x02d6, 0x02d6, 0x02ef, 0x02ef, + 0x02a9, 0x02a9, 0x02c2, 0x02c2, 0x02c2, 0x02c2, 0x02c2, 0x02c2, + 0x02c2, 0x02c2, 0x02d6, 0x02d6, 0x02d6, 0x02d6, 0x02d6, 0x02ef, 0x02ef, 0x02ef, 0x02ef, 0x02ef, 0x02ef, 0x02ef, 0x02ef, 0x02ef, 0x02ef, 0x02ef, 0x02ef, 0x02ef, 0x02ef, 0x02ef, 0x02ef, 0x02ef, - 0x02ef, 0x02ef, 0x02ef, 0x030e, 0x030e, 0x030e, 0x030e, 0x030e, + 0x02ef, 0x02ef, 0x02ef, 0x02ef, 0x030e, 0x030e, 0x030e, 0x030e, // Entry 140 - 17F 0x030e, 0x030e, 0x030e, 0x030e, 0x030e, 0x030e, 0x030e, 0x030e, - 0x030e, 0x030e, 0x030e, 0x030e, 0x030e, 0x030e, 0x031e, 0x031e, + 0x030e, 0x030e, 0x030e, 0x030e, 0x030e, 0x030e, 0x030e, 0x031e, 0x031e, 0x031e, 0x031e, 0x031e, 0x031e, 0x031e, 0x031e, 0x031e, - 0x031e, 0x031e, 0x031e, 0x031e, 0x031e, 0x032a, 0x032a, 0x032a, + 0x031e, 0x031e, 0x031e, 0x031e, 0x031e, 0x031e, 0x032a, 0x032a, 0x032a, 0x032a, 0x032a, 0x032a, 0x032a, 0x032a, 0x032a, 0x032a, 0x032a, 0x032a, 0x032a, 0x032a, 0x032a, 0x032a, 0x032a, 0x032a, - 0x032a, 0x033c, 0x033c, 0x033c, 0x033c, 0x033c, 0x033c, 0x033c, - 0x033c, 0x0354, 0x0354, 0x0354, 0x0354, 0x0354, 0x0354, 0x0360, + 0x032a, 0x032a, 0x033c, 0x033c, 0x033c, 0x033c, 0x033c, 0x033c, + 0x033c, 0x033c, 0x0354, 0x0354, 0x0354, 0x0354, 0x0354, 0x0354, // Entry 180 - 1BF 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, @@ -10643,7 +11060,7 @@ var langHeaders = [252]header{ 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, 0x0360, - 0x0360, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, + 0x0360, 0x0360, 0x0360, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, @@ -10653,15 +11070,15 @@ var langHeaders = [252]header{ 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, - 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0389, 0x0389, + 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0370, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, // Entry 240 - 27F 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, - 0x03ac, 0x03cf, 0x03f4, 0x0417, 0x043a, 0x045b, 0x048b, 0x04ae, - 0x04ae, 0x04ae, 0x04cf, 0x04f2, 0x04f2, 0x04f2, 0x051b, 0x0544, - 0x0544, 0x0544, 0x0544, 0x0565, 0x0586, + 0x0389, 0x0389, 0x03ac, 0x03cf, 0x03f4, 0x0417, 0x043a, 0x045b, + 0x048b, 0x04ae, 0x04ae, 0x04ae, 0x04cf, 0x04f2, 0x04f2, 0x04f2, + 0x051b, 0x0544, 0x0544, 0x0544, 0x0544, 0x0565, 0x0586, }, }, { // pa @@ -10697,7 +11114,7 @@ var langHeaders = [252]header{ }, { // prg "prūsiskan", - []uint16{ // 472 elements + []uint16{ // 474 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -10764,46 +11181,137 @@ var langHeaders = [252]header{ // Entry 1C0 - 1FF 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x000a, }, }, { // ps - "امهاريعربيآساميبېلاروسيبلغاريبوسنيالمانيیونانيانګریزيحبشيباسکيفارسيفینلن" + - "ډيفرانسويعبريهنديارمنيایټالويجاپانیکرديلاتینيملغاسيمقدونيمغوليملایا" + - "نېپاليهالېنډيپولنډيپښتوپورتګاليروسيسنسکریټالبانيسویډنیتاجکيترکمنيتا" + - "تارازبکيچینيبلوڅي", - []uint16{ // 211 elements - // Entry 0 - 3F - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x000c, - 0x0014, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x002e, 0x003a, - 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x0044, 0x0044, 0x0044, - 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, - 0x0050, 0x0050, 0x0050, 0x0050, 0x005c, 0x006a, 0x006a, 0x006a, - 0x0072, 0x007c, 0x0086, 0x0086, 0x0094, 0x0094, 0x0094, 0x00a2, - 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, - 0x00aa, 0x00b2, 0x00b2, 0x00b2, 0x00b2, 0x00b2, 0x00bc, 0x00bc, - // Entry 40 - 7F - 0x00bc, 0x00bc, 0x00bc, 0x00bc, 0x00bc, 0x00bc, 0x00bc, 0x00bc, - 0x00ca, 0x00ca, 0x00d6, 0x00d6, 0x00d6, 0x00d6, 0x00d6, 0x00d6, - 0x00d6, 0x00d6, 0x00d6, 0x00d6, 0x00d6, 0x00d6, 0x00d6, 0x00de, - 0x00de, 0x00de, 0x00de, 0x00ea, 0x00ea, 0x00ea, 0x00ea, 0x00ea, - 0x00ea, 0x00ea, 0x00ea, 0x00ea, 0x00f6, 0x00f6, 0x00f6, 0x0102, - 0x0102, 0x010c, 0x010c, 0x0116, 0x0116, 0x0116, 0x0116, 0x0116, - 0x0122, 0x0122, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, - 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x013c, - // Entry 80 - BF - 0x0144, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x015c, 0x015c, - 0x016a, 0x016a, 0x016a, 0x016a, 0x016a, 0x016a, 0x016a, 0x016a, - 0x016a, 0x016a, 0x016a, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, - 0x0182, 0x0182, 0x0182, 0x0182, 0x018c, 0x018c, 0x018c, 0x0198, - 0x0198, 0x0198, 0x0198, 0x0198, 0x01a2, 0x01a2, 0x01a2, 0x01a2, - 0x01a2, 0x01ac, 0x01ac, 0x01ac, 0x01ac, 0x01ac, 0x01ac, 0x01ac, - 0x01ac, 0x01ac, 0x01ac, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, - 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, - // Entry C0 - FF - 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, - 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, - 0x01b4, 0x01b4, 0x01be, + "افريابخازيافریکانسياکانيامهارياراگونېسيعربياسامياواريایمارياذربایجانيباش" + + "کيربېلاروسيبلغاريبسلامابامرهبنگاليتبتيبرېتونبوسنيکټلانيچيچينيچموروک" + + "ورسيکانيچېکيد کليسا سلاويچوواشيويلشيدانمارکيالمانيديویهیژونگکهايویو" + + "نانيانګریزياسپرانتوهسپانويحبشيباسکيفارسيفلاحہفینلنډيفجیانفاروئېفران" + + "سويفريزيائيرلېنډيسکاټلېنډي ګېلکګلېشياييګورانيګجراتيمینکسهوساعبريهند" + + "يکروواسيهيٽي کروليهنگريارمنيهیروروانډونېزياګبوسیچیان ییاڊوايسلنډيای" + + "ټالويانوکتیتوتجاپانيجاواييجورجيائيککوؤوکواناماقازقکلالیسٹخمرکنأډهکو" + + "ریاییکنوریکشمیريکرديکومیکرونيشيکرګيزلاتینيلوګزامبورګيګاندهلمبرگیانی" + + "لنگلالاوليتوانيلوبا-کټنګالېټوانيملغاسيمارشلیزماوريمقدونيمالايالممنګ" + + "ولیاییمراټهيملایامالټاييبرمایینایروشمالي نديبلنېپاليندونگاهالېنډينا" + + "روېئي (نائنورسک)ناروې بوکمالسويلي نديبيلنواجونیانجااوکسيټانياوروموا" + + "وڊيااوسیٹکپنجابيپولنډيپښتوپورتګاليکېچوارومانشرونډیرومانيروسيکینیارو" + + "نډاسنسکریټسارڊينيسندهيشمالي ساميسانګوسينهاليسلوواکيسلووانيساموآنشون" + + "اسوماليالبانيسربيائيسواتیسيسوتوسوډانيسویډنیسواهېليتامیلتېليګوتاجکيت" + + "ايلېنډيتيګرينيترکمنيسوواناتونګانترکيسونګاتاتارتاهیتياويغورياوکراناي" + + "ياوزبکيوینداوېتناميوالاپوکوالونولوفخوسايديشیوروباچینيزولواچينيادانگ" + + "مياديغياغیمياينويياليوتيسویل الټایانگيکيماپوچهاراپاهوياسويياستوريان" + + "ياواديبلوڅيبالنیباسابیبابينابهوجپوريبینیسکسيکابودوبگنياييبلینسیبوان" + + "ويچيگاييچواوکيماريچوکټاويچېروکيشينيمنځنۍ کورديسسيلوا ڪروئل فرانسويد" + + "اکوتادرگواټایټاداگربزرمالوړې سربيدوالاجولا فونيډزاګاایموافکاکجکاوون" + + "ڊوفلیپینيفانفرائیلیینgaaګیزگلبرتيګورن ټالوسویس جرمنګوسيګیچینهواییھل" + + "یګینونهمونګپورته صربيھوپاابنابیبیوالوکوانگشلوجباننګباماچمیکیبیلکاچی" + + "نججوکامباکابیرینتایپماکډونکابوورډیانوکوروخاسېکویرا چینیکاکوکلینجنکی" + + "مبوندوکنکنيکیليکراچی بالکرکاریلینکورخشمبلابفیاکولوگنيسيکومکلاډینولن" + + "ګیلیګغیانلکټولوزیشمالي لوریلبا لولوالندالوميزولویامدراسیمګهيمایتھلي" + + "مکاسارماسائيموکشامینڊيميروماریسیسنمکھوامیتوميټاممکقمينيگاباومانی پو" + + "ریمحاواکماسيمندانګڅو ژبوکريکيمرانديزارزيامزاندرانينيپاليننامانيواري" + + "نياسنیانکواسیونایجیموننوګینکوشمالي سوتونویرنینکولپانګاسینپمپانگاپاپ" + + "يامينتوپالاننائجیریا پیدجنپروشينکچیرپانوئيراروټانګانرومبوارومانيRwa" + + "سنډاویسخاسمبوروسنتالينګبایسانګووسیلیسيسکاټسسیناکوییرابورو سینیتاکله" + + "یټشانسویلي سامیلول سامياناري سميعسکولټ سمیعسونینګسوران ټونګوسهوسکوم" + + "اکوموريانيسوریانيتیمنيتیسوتتومتیګرکلينګانيتوک پیسینتاروکوتامبوکاتوو" + + "الوتساواقتوینیانمرکزی اطلس تمازائيٹادمورتامبوندونامعلومه ژبهوایوونج" + + "وولسیرولایټاوارۍکالمکسوګاینګبینیمباکانټونيمعياري مراکش تمازټیټزونين" + + "ه ژبني منځپانګهزازانوې معياري عربيآسترالیا آلمانسوئس لوی جرمنانګریز" + + "ي (AU)انګریزي (US)لاتیني امریکایي اسپانویاروپایی اسپانویمکسیکو اسپا" + + "نویکاناډا فرانسيسویس فرانسيفلېمېشيبرازیلي پرتګالياروپايي پرتګاليساد" + + "ه چينيدوديزه چيني", + []uint16{ // 615 elements + // Entry 0 - 3F + 0x0000, 0x0008, 0x0014, 0x0014, 0x0026, 0x0030, 0x003c, 0x004e, + 0x0056, 0x0060, 0x006a, 0x0076, 0x008a, 0x0096, 0x00a6, 0x00b2, + 0x00be, 0x00c8, 0x00d4, 0x00dc, 0x00e8, 0x00f2, 0x00fe, 0x010a, + 0x0114, 0x0126, 0x0126, 0x012e, 0x0146, 0x0152, 0x015c, 0x016c, + 0x0178, 0x0184, 0x0190, 0x0196, 0x01a2, 0x01b0, 0x01c0, 0x01ce, + 0x01d6, 0x01e0, 0x01ea, 0x01f4, 0x0202, 0x020c, 0x0218, 0x0226, + 0x0230, 0x0242, 0x025d, 0x026d, 0x0279, 0x0285, 0x028f, 0x0297, + 0x029f, 0x02a7, 0x02a7, 0x02b5, 0x02c8, 0x02d2, 0x02dc, 0x02e8, + // Entry 40 - 7F + 0x02e8, 0x02f8, 0x02f8, 0x0300, 0x0311, 0x0311, 0x0317, 0x0325, + 0x0333, 0x0345, 0x0351, 0x035d, 0x036d, 0x036d, 0x0377, 0x0385, + 0x038d, 0x039b, 0x03a1, 0x03ab, 0x03b9, 0x03c3, 0x03cf, 0x03d7, + 0x03df, 0x03ed, 0x03f7, 0x0403, 0x0419, 0x0423, 0x0435, 0x043f, + 0x0445, 0x0453, 0x0466, 0x0474, 0x0480, 0x048e, 0x0498, 0x04a4, + 0x04b4, 0x04c6, 0x04d2, 0x04dc, 0x04ea, 0x04f6, 0x0500, 0x0515, + 0x0521, 0x052d, 0x053b, 0x055c, 0x0573, 0x058a, 0x0594, 0x05a0, + 0x05b2, 0x05b2, 0x05be, 0x05c8, 0x05d4, 0x05e0, 0x05e0, 0x05ec, + // Entry 80 - BF + 0x05f4, 0x0604, 0x060e, 0x061a, 0x0624, 0x0630, 0x0638, 0x064c, + 0x065a, 0x0668, 0x0672, 0x0685, 0x068f, 0x069d, 0x06ab, 0x06b9, + 0x06c5, 0x06cd, 0x06d9, 0x06e5, 0x06f3, 0x06fd, 0x0709, 0x0715, + 0x0721, 0x072f, 0x0739, 0x0745, 0x074f, 0x075f, 0x076d, 0x0779, + 0x0785, 0x0791, 0x0799, 0x07a3, 0x07ad, 0x07b9, 0x07c7, 0x07d9, + 0x07d9, 0x07e5, 0x07ef, 0x07fd, 0x080b, 0x0815, 0x081d, 0x0825, + 0x082d, 0x0839, 0x0839, 0x0841, 0x0849, 0x0853, 0x0853, 0x0861, + 0x086b, 0x086b, 0x086b, 0x0875, 0x0881, 0x0881, 0x0881, 0x088d, + // Entry C0 - FF + 0x088d, 0x08a0, 0x08a0, 0x08ac, 0x08ac, 0x08b8, 0x08b8, 0x08c8, + 0x08c8, 0x08c8, 0x08c8, 0x08c8, 0x08c8, 0x08d2, 0x08d2, 0x08e4, + 0x08e4, 0x08ee, 0x08f8, 0x0902, 0x0902, 0x090a, 0x090a, 0x090a, + 0x090a, 0x090a, 0x0912, 0x0912, 0x091a, 0x091a, 0x091a, 0x091a, + 0x092a, 0x092a, 0x0932, 0x0932, 0x0932, 0x093e, 0x093e, 0x093e, + 0x093e, 0x093e, 0x0946, 0x0946, 0x0946, 0x0954, 0x0954, 0x095c, + 0x095c, 0x095c, 0x095c, 0x095c, 0x095c, 0x095c, 0x096c, 0x0978, + 0x0978, 0x0978, 0x0984, 0x098c, 0x098c, 0x099a, 0x099a, 0x09a6, + // Entry 100 - 13F + 0x09ae, 0x09c3, 0x09c3, 0x09c3, 0x09c3, 0x09e9, 0x09e9, 0x09f5, + 0x09ff, 0x0a09, 0x0a09, 0x0a09, 0x0a13, 0x0a13, 0x0a1b, 0x0a1b, + 0x0a2c, 0x0a2c, 0x0a36, 0x0a36, 0x0a47, 0x0a47, 0x0a51, 0x0a59, + 0x0a5f, 0x0a5f, 0x0a5f, 0x0a67, 0x0a67, 0x0a67, 0x0a67, 0x0a73, + 0x0a73, 0x0a73, 0x0a81, 0x0a81, 0x0a87, 0x0a87, 0x0a87, 0x0a87, + 0x0a87, 0x0a87, 0x0a87, 0x0a99, 0x0a9c, 0x0a9c, 0x0a9c, 0x0a9c, + 0x0a9c, 0x0a9c, 0x0aa2, 0x0aae, 0x0aae, 0x0aae, 0x0aae, 0x0aae, + 0x0aae, 0x0abf, 0x0abf, 0x0abf, 0x0abf, 0x0ad0, 0x0ad0, 0x0ad0, + // Entry 140 - 17F + 0x0ad8, 0x0ae2, 0x0ae2, 0x0ae2, 0x0aec, 0x0aec, 0x0afc, 0x0afc, + 0x0b06, 0x0b19, 0x0b19, 0x0b21, 0x0b27, 0x0b33, 0x0b3d, 0x0b45, + 0x0b45, 0x0b45, 0x0b51, 0x0b59, 0x0b63, 0x0b63, 0x0b63, 0x0b63, + 0x0b63, 0x0b6d, 0x0b77, 0x0b7d, 0x0b87, 0x0b87, 0x0b95, 0x0b95, + 0x0b9d, 0x0ba9, 0x0bbf, 0x0bbf, 0x0bc7, 0x0bc7, 0x0bcf, 0x0bcf, + 0x0be2, 0x0be2, 0x0be2, 0x0bea, 0x0bf6, 0x0c06, 0x0c06, 0x0c10, + 0x0c10, 0x0c18, 0x0c2d, 0x0c2d, 0x0c2d, 0x0c3b, 0x0c43, 0x0c4d, + 0x0c55, 0x0c67, 0x0c6f, 0x0c6f, 0x0c7b, 0x0c83, 0x0c83, 0x0c83, + // Entry 180 - 1BF + 0x0c91, 0x0c91, 0x0c91, 0x0c91, 0x0c99, 0x0c99, 0x0c99, 0x0c99, + 0x0ca1, 0x0cb4, 0x0cb4, 0x0cc5, 0x0cc5, 0x0ccd, 0x0cd1, 0x0cd9, + 0x0ce1, 0x0ce1, 0x0ce1, 0x0ced, 0x0ced, 0x0cf5, 0x0d03, 0x0d0f, + 0x0d0f, 0x0d1b, 0x0d1b, 0x0d25, 0x0d25, 0x0d2f, 0x0d37, 0x0d47, + 0x0d47, 0x0d59, 0x0d61, 0x0d69, 0x0d7b, 0x0d7b, 0x0d8c, 0x0d98, + 0x0da0, 0x0da0, 0x0dac, 0x0db7, 0x0dc1, 0x0dcf, 0x0dcf, 0x0dcf, + 0x0dcf, 0x0dd9, 0x0deb, 0x0deb, 0x0df9, 0x0e01, 0x0e01, 0x0e0d, + 0x0e15, 0x0e1d, 0x0e1d, 0x0e29, 0x0e39, 0x0e41, 0x0e41, 0x0e41, + // Entry 1C0 - 1FF + 0x0e47, 0x0e5a, 0x0e62, 0x0e62, 0x0e62, 0x0e6e, 0x0e6e, 0x0e6e, + 0x0e6e, 0x0e6e, 0x0e7e, 0x0e7e, 0x0e8c, 0x0ea0, 0x0eaa, 0x0eaa, + 0x0ec5, 0x0ec5, 0x0ec5, 0x0ec5, 0x0ec5, 0x0ec5, 0x0ec5, 0x0ec5, + 0x0ec5, 0x0ed1, 0x0ed1, 0x0ed7, 0x0ed7, 0x0ed7, 0x0ee5, 0x0ef9, + 0x0ef9, 0x0ef9, 0x0f03, 0x0f03, 0x0f03, 0x0f03, 0x0f03, 0x0f11, + 0x0f14, 0x0f20, 0x0f26, 0x0f26, 0x0f32, 0x0f32, 0x0f3e, 0x0f3e, + 0x0f48, 0x0f54, 0x0f60, 0x0f6a, 0x0f6a, 0x0f6a, 0x0f6a, 0x0f72, + 0x0f72, 0x0f72, 0x0f8f, 0x0f8f, 0x0f8f, 0x0f9d, 0x0fa3, 0x0fa3, + // Entry 200 - 23F + 0x0fa3, 0x0fa3, 0x0fa3, 0x0fb6, 0x0fc5, 0x0fd8, 0x0feb, 0x0ff7, + 0x0ff7, 0x100c, 0x100c, 0x1012, 0x1012, 0x101c, 0x101c, 0x101c, + 0x102e, 0x102e, 0x103c, 0x103c, 0x103c, 0x1046, 0x104e, 0x104e, + 0x1056, 0x105e, 0x105e, 0x105e, 0x105e, 0x106e, 0x106e, 0x106e, + 0x106e, 0x106e, 0x107f, 0x107f, 0x108b, 0x108b, 0x108b, 0x108b, + 0x1099, 0x10a5, 0x10b1, 0x10bf, 0x10e3, 0x10ef, 0x10ef, 0x10fd, + 0x1114, 0x111a, 0x111a, 0x111a, 0x111a, 0x111a, 0x111a, 0x111a, + 0x1124, 0x112e, 0x113a, 0x1142, 0x1142, 0x1142, 0x1142, 0x114c, + // Entry 240 - 27F + 0x114c, 0x1154, 0x1154, 0x1154, 0x1160, 0x1168, 0x1168, 0x1176, + 0x1176, 0x1176, 0x1176, 0x1176, 0x119c, 0x11a4, 0x11c2, 0x11ca, + 0x11e6, 0x11e6, 0x1201, 0x1219, 0x122c, 0x122c, 0x122c, 0x123f, + 0x126b, 0x1288, 0x12a3, 0x12a3, 0x12bc, 0x12d1, 0x12d1, 0x12df, + 0x12fc, 0x1319, 0x1319, 0x1319, 0x1319, 0x132a, 0x133f, }, }, { // pt @@ -10838,7 +11346,7 @@ var langHeaders = [252]header{ "no SimiAlsaciano SimiHmong Daw SimiAlto Sorbio SimiKonkani SimiMohaw" + "k SimiSesotho Sa Leboa SimiPapiamento SimiKʼicheʼ SimiSakha SimiQull" + "a Sami SimiSami Lule SimiSami Inari SimiSami Skolt SimiSiriaco Simi", - []uint16{ // 529 elements + []uint16{ // 531 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x000e, 0x000e, 0x001a, 0x001a, 0x0024, 0x002f, 0x002f, 0x002f, 0x003f, 0x004a, 0x0059, 0x0065, @@ -10874,23 +11382,23 @@ var langHeaders = [252]header{ 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, - 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x052f, 0x052f, + 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x0522, 0x052f, // Entry 100 - 13F + 0x052f, 0x0540, 0x0540, 0x0540, 0x0540, 0x0540, 0x0540, 0x0540, 0x0540, 0x0540, 0x0540, 0x0540, 0x0540, 0x0540, 0x0540, 0x0540, - 0x0540, 0x0540, 0x0540, 0x0540, 0x0540, 0x0540, 0x0540, 0x0550, 0x0550, 0x0550, 0x0550, 0x0550, 0x0550, 0x0550, 0x0550, 0x0550, 0x0550, 0x0550, 0x0550, 0x0550, 0x0550, 0x0550, 0x0550, 0x0550, - 0x0550, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, + 0x0550, 0x0550, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, - 0x055d, 0x055d, 0x055d, 0x055d, 0x056b, 0x056b, 0x056b, 0x056b, + 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x056b, 0x056b, 0x056b, // Entry 140 - 17F - 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x0579, - 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, + 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, + 0x0579, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, - 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0595, 0x0595, + 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0589, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, // Entry 180 - 1BF @@ -10898,23 +11406,23 @@ var langHeaders = [252]header{ 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, - 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x05a0, 0x05a0, 0x05a0, + 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x0595, 0x05a0, + 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, - 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05a0, 0x05b5, // Entry 1C0 - 1FF - 0x05b5, 0x05b5, 0x05b5, 0x05b5, 0x05b5, 0x05b5, 0x05b5, 0x05b5, - 0x05b5, 0x05b5, 0x05b5, 0x05c4, 0x05c4, 0x05c4, 0x05c4, 0x05c4, + 0x05a0, 0x05b5, 0x05b5, 0x05b5, 0x05b5, 0x05b5, 0x05b5, 0x05b5, + 0x05b5, 0x05b5, 0x05b5, 0x05b5, 0x05b5, 0x05c4, 0x05c4, 0x05c4, 0x05c4, 0x05c4, 0x05c4, 0x05c4, 0x05c4, 0x05c4, 0x05c4, 0x05c4, - 0x05c4, 0x05d2, 0x05d2, 0x05d2, 0x05d2, 0x05d2, 0x05d2, 0x05d2, + 0x05c4, 0x05c4, 0x05c4, 0x05d2, 0x05d2, 0x05d2, 0x05d2, 0x05d2, 0x05d2, 0x05d2, 0x05d2, 0x05d2, 0x05d2, 0x05d2, 0x05d2, 0x05d2, - 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, + 0x05d2, 0x05d2, 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, 0x05dc, // Entry 200 - 23F - 0x05dc, 0x05eb, 0x05f9, 0x0608, 0x0617, 0x0617, 0x0617, 0x0617, + 0x05dc, 0x05dc, 0x05dc, 0x05eb, 0x05f9, 0x0608, 0x0617, 0x0617, 0x0617, 0x0617, 0x0617, 0x0617, 0x0617, 0x0617, 0x0617, 0x0617, - 0x0623, + 0x0617, 0x0617, 0x0623, }, }, { // rm @@ -10967,7 +11475,7 @@ var langHeaders = [252]header{ "is britannicenglais americanspagnol latinamericanspagnol ibericfranz" + "os canadaisfranzos svizzerflamportugais brasilianportugais iberianmo" + "ldavserbo-croatchinais simplifitgàchinais tradiziunal", - []uint16{ // 613 elements + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0004, 0x000d, 0x0014, 0x001d, 0x0021, 0x0027, 0x0030, 0x0034, 0x003a, 0x0040, 0x0046, 0x0055, 0x005d, 0x0066, 0x006c, @@ -11002,59 +11510,59 @@ var langHeaders = [252]header{ 0x0598, 0x059f, 0x05a4, 0x05a4, 0x05a4, 0x05a4, 0x05a4, 0x05a4, 0x05ac, 0x05b1, 0x05b5, 0x05b5, 0x05b5, 0x05bc, 0x05bc, 0x05bc, 0x05c0, 0x05c0, 0x05c0, 0x05c0, 0x05c6, 0x05ca, 0x05ca, 0x05ce, - 0x05ce, 0x05d3, 0x05da, 0x05da, 0x05df, 0x05e6, 0x05e6, 0x05ed, - 0x05f8, 0x0600, 0x0604, 0x0612, 0x0619, 0x0622, 0x062a, 0x0632, - // Entry 100 - 13F - 0x0632, 0x0638, 0x0638, 0x0644, 0x0644, 0x064d, 0x0653, 0x0659, - 0x0659, 0x0661, 0x0667, 0x066d, 0x0672, 0x0672, 0x0677, 0x0680, - 0x0680, 0x0685, 0x0695, 0x0695, 0x069a, 0x069a, 0x069a, 0x069e, - 0x069e, 0x06ab, 0x06b1, 0x06b9, 0x06c7, 0x06c7, 0x06cd, 0x06cd, - 0x06d1, 0x06da, 0x06da, 0x06dd, 0x06dd, 0x06eb, 0x06f7, 0x06f7, - 0x0704, 0x0713, 0x071a, 0x071c, 0x071c, 0x071c, 0x0720, 0x0725, - 0x0725, 0x0729, 0x0733, 0x0733, 0x0741, 0x075a, 0x075a, 0x075f, - 0x0768, 0x076d, 0x0772, 0x077b, 0x078a, 0x078a, 0x078a, 0x078a, + 0x05ce, 0x05d3, 0x05da, 0x05da, 0x05df, 0x05df, 0x05e6, 0x05e6, + 0x05ed, 0x05f8, 0x0600, 0x0604, 0x0612, 0x0619, 0x0622, 0x062a, + // Entry 100 - 13F + 0x0632, 0x0632, 0x0638, 0x0638, 0x0644, 0x0644, 0x064d, 0x0653, + 0x0659, 0x0659, 0x0661, 0x0667, 0x066d, 0x0672, 0x0672, 0x0677, + 0x0680, 0x0680, 0x0685, 0x0695, 0x0695, 0x069a, 0x069a, 0x069a, + 0x069e, 0x069e, 0x06ab, 0x06b1, 0x06b9, 0x06c7, 0x06c7, 0x06cd, + 0x06cd, 0x06d1, 0x06da, 0x06da, 0x06dd, 0x06dd, 0x06eb, 0x06f7, + 0x06f7, 0x0704, 0x0713, 0x071a, 0x071c, 0x071c, 0x071c, 0x0720, + 0x0725, 0x0725, 0x0729, 0x0733, 0x0733, 0x0741, 0x075a, 0x075a, + 0x075f, 0x0768, 0x076d, 0x0772, 0x077b, 0x078a, 0x078a, 0x078a, // Entry 140 - 17F - 0x0793, 0x0798, 0x0798, 0x079f, 0x079f, 0x07a9, 0x07b0, 0x07b5, - 0x07bd, 0x07bd, 0x07c1, 0x07c5, 0x07c5, 0x07cc, 0x07d2, 0x07d2, - 0x07d2, 0x07d8, 0x07d8, 0x07d8, 0x07e7, 0x07f3, 0x07f3, 0x07fd, - 0x0803, 0x0809, 0x080c, 0x0811, 0x0815, 0x081d, 0x081d, 0x0821, - 0x0821, 0x0821, 0x0821, 0x0825, 0x0825, 0x082a, 0x0833, 0x0833, - 0x0833, 0x0833, 0x0833, 0x0833, 0x083b, 0x083b, 0x0842, 0x084a, - 0x0850, 0x085f, 0x085f, 0x085f, 0x0867, 0x086d, 0x086d, 0x086d, - 0x086d, 0x0872, 0x0879, 0x087f, 0x087f, 0x0885, 0x088a, 0x0892, + 0x078a, 0x0793, 0x0798, 0x0798, 0x079f, 0x079f, 0x07a9, 0x07b0, + 0x07b5, 0x07bd, 0x07bd, 0x07c1, 0x07c5, 0x07c5, 0x07cc, 0x07d2, + 0x07d2, 0x07d2, 0x07d8, 0x07d8, 0x07d8, 0x07e7, 0x07f3, 0x07f3, + 0x07fd, 0x0803, 0x0809, 0x080c, 0x0811, 0x0815, 0x081d, 0x081d, + 0x0821, 0x0821, 0x0821, 0x0821, 0x0825, 0x0825, 0x082a, 0x0833, + 0x0833, 0x0833, 0x0833, 0x0833, 0x0833, 0x083b, 0x083b, 0x0842, + 0x084a, 0x0850, 0x085f, 0x085f, 0x085f, 0x0867, 0x086d, 0x086d, + 0x086d, 0x086d, 0x0872, 0x0879, 0x087f, 0x087f, 0x0885, 0x088a, // Entry 180 - 1BF - 0x0892, 0x0892, 0x0892, 0x0892, 0x0892, 0x0899, 0x089d, 0x089d, - 0x089d, 0x08a7, 0x08ae, 0x08b3, 0x08b6, 0x08bc, 0x08bc, 0x08bc, - 0x08bc, 0x08c4, 0x08c4, 0x08ca, 0x08d2, 0x08da, 0x08e2, 0x08e7, - 0x08e7, 0x08ed, 0x08f3, 0x08f8, 0x08f8, 0x08f8, 0x0908, 0x0908, - 0x0908, 0x090e, 0x0919, 0x091f, 0x0927, 0x092d, 0x0932, 0x0932, - 0x0932, 0x093b, 0x0940, 0x0949, 0x0950, 0x0950, 0x0950, 0x0955, - 0x0955, 0x0955, 0x095f, 0x095f, 0x096b, 0x0971, 0x0975, 0x0979, - 0x0979, 0x0979, 0x0979, 0x097e, 0x0989, 0x0989, 0x098f, 0x099d, + 0x0892, 0x0892, 0x0892, 0x0892, 0x0892, 0x0892, 0x0899, 0x0899, + 0x089d, 0x089d, 0x089d, 0x08a7, 0x08ae, 0x08b3, 0x08b6, 0x08bc, + 0x08bc, 0x08bc, 0x08bc, 0x08c4, 0x08c4, 0x08ca, 0x08d2, 0x08da, + 0x08e2, 0x08e7, 0x08e7, 0x08ed, 0x08f3, 0x08f8, 0x08f8, 0x08f8, + 0x0908, 0x0908, 0x0908, 0x090e, 0x0919, 0x091f, 0x0927, 0x092d, + 0x0932, 0x0932, 0x0932, 0x093b, 0x0940, 0x0949, 0x0950, 0x0950, + 0x0950, 0x0955, 0x0955, 0x0955, 0x095f, 0x095f, 0x096b, 0x0971, + 0x0975, 0x0979, 0x0979, 0x0979, 0x0979, 0x097e, 0x0989, 0x0989, // Entry 1C0 - 1FF - 0x099d, 0x09ab, 0x09b3, 0x09bb, 0x09c0, 0x09c5, 0x09ca, 0x09d6, - 0x09e0, 0x09e7, 0x09ef, 0x09f9, 0x09fe, 0x09fe, 0x09fe, 0x09fe, - 0x09fe, 0x0a0a, 0x0a0a, 0x0a12, 0x0a12, 0x0a12, 0x0a1a, 0x0a1a, - 0x0a28, 0x0a28, 0x0a28, 0x0a32, 0x0a39, 0x0a42, 0x0a42, 0x0a42, - 0x0a42, 0x0a48, 0x0a48, 0x0a48, 0x0a48, 0x0a50, 0x0a50, 0x0a57, - 0x0a5c, 0x0a6d, 0x0a6d, 0x0a72, 0x0a79, 0x0a79, 0x0a79, 0x0a79, - 0x0a81, 0x0a85, 0x0a85, 0x0a85, 0x0a85, 0x0a85, 0x0a85, 0x0a8b, - 0x0a8b, 0x0a99, 0x0a99, 0x0a99, 0x0a9d, 0x0a9d, 0x0aa3, 0x0aa3, + 0x098f, 0x099d, 0x099d, 0x09ab, 0x09b3, 0x09bb, 0x09c0, 0x09c5, + 0x09ca, 0x09d6, 0x09e0, 0x09e7, 0x09ef, 0x09f9, 0x09fe, 0x09fe, + 0x09fe, 0x09fe, 0x09fe, 0x0a0a, 0x0a0a, 0x0a12, 0x0a12, 0x0a12, + 0x0a1a, 0x0a1a, 0x0a28, 0x0a28, 0x0a28, 0x0a32, 0x0a39, 0x0a42, + 0x0a42, 0x0a42, 0x0a42, 0x0a48, 0x0a48, 0x0a48, 0x0a48, 0x0a50, + 0x0a50, 0x0a57, 0x0a5c, 0x0a6d, 0x0a6d, 0x0a72, 0x0a79, 0x0a79, + 0x0a79, 0x0a79, 0x0a81, 0x0a85, 0x0a85, 0x0a85, 0x0a85, 0x0a85, + 0x0a85, 0x0a8b, 0x0a8b, 0x0a99, 0x0a99, 0x0a99, 0x0a9d, 0x0a9d, // Entry 200 - 23F - 0x0aa3, 0x0aaf, 0x0ab8, 0x0ac2, 0x0acc, 0x0ad3, 0x0ada, 0x0ae6, - 0x0aeb, 0x0aeb, 0x0aeb, 0x0af1, 0x0af5, 0x0afc, 0x0afc, 0x0b09, - 0x0b0e, 0x0b0e, 0x0b0e, 0x0b13, 0x0b13, 0x0b19, 0x0b1e, 0x0b23, - 0x0b26, 0x0b2d, 0x0b2d, 0x0b36, 0x0b3d, 0x0b3d, 0x0b45, 0x0b52, - 0x0b5b, 0x0b5b, 0x0b5b, 0x0b5b, 0x0b64, 0x0b64, 0x0b6b, 0x0b71, - 0x0b71, 0x0b79, 0x0b79, 0x0b7f, 0x0b87, 0x0b8d, 0x0ba6, 0x0ba9, - 0x0ba9, 0x0ba9, 0x0ba9, 0x0ba9, 0x0bae, 0x0bae, 0x0bae, 0x0bae, - 0x0bb4, 0x0bb9, 0x0bbe, 0x0bbe, 0x0bbe, 0x0bc4, 0x0bc4, 0x0bc4, + 0x0aa3, 0x0aa3, 0x0aa3, 0x0aaf, 0x0ab8, 0x0ac2, 0x0acc, 0x0ad3, + 0x0ada, 0x0ae6, 0x0aeb, 0x0aeb, 0x0aeb, 0x0af1, 0x0af5, 0x0afc, + 0x0afc, 0x0b09, 0x0b0e, 0x0b0e, 0x0b0e, 0x0b13, 0x0b13, 0x0b19, + 0x0b1e, 0x0b23, 0x0b26, 0x0b2d, 0x0b2d, 0x0b36, 0x0b3d, 0x0b3d, + 0x0b45, 0x0b52, 0x0b5b, 0x0b5b, 0x0b5b, 0x0b5b, 0x0b64, 0x0b64, + 0x0b6b, 0x0b71, 0x0b71, 0x0b79, 0x0b79, 0x0b7f, 0x0b87, 0x0b8d, + 0x0ba6, 0x0ba9, 0x0ba9, 0x0ba9, 0x0ba9, 0x0ba9, 0x0bae, 0x0bae, + 0x0bae, 0x0bae, 0x0bb4, 0x0bb9, 0x0bbe, 0x0bbe, 0x0bbe, 0x0bc4, // Entry 240 - 27F - 0x0bc7, 0x0bcd, 0x0bcd, 0x0bcd, 0x0bcd, 0x0bcd, 0x0bd4, 0x0be4, - 0x0be4, 0x0bea, 0x0bea, 0x0bee, 0x0c09, 0x0c0d, 0x0c0d, 0x0c0d, - 0x0c1d, 0x0c1d, 0x0c2f, 0x0c3f, 0x0c50, 0x0c60, 0x0c75, 0x0c83, - 0x0c83, 0x0c83, 0x0c93, 0x0ca2, 0x0ca2, 0x0ca6, 0x0cb9, 0x0cca, - 0x0cd0, 0x0cdb, 0x0cdb, 0x0cef, 0x0d02, + 0x0bc4, 0x0bc4, 0x0bc7, 0x0bcd, 0x0bcd, 0x0bcd, 0x0bcd, 0x0bcd, + 0x0bd4, 0x0be4, 0x0be4, 0x0bea, 0x0bea, 0x0bee, 0x0c09, 0x0c0d, + 0x0c0d, 0x0c0d, 0x0c1d, 0x0c1d, 0x0c2f, 0x0c3f, 0x0c50, 0x0c60, + 0x0c75, 0x0c83, 0x0c83, 0x0c83, 0x0c93, 0x0ca2, 0x0ca2, 0x0ca6, + 0x0cb9, 0x0cca, 0x0cd0, 0x0cdb, 0x0cdb, 0x0cef, 0x0d02, }, }, { // rn @@ -11101,7 +11609,7 @@ var langHeaders = [252]header{ }, { // ro-MD "wolayttaswahili (R. D. Congo)", - []uint16{ // 611 elements + []uint16{ // 613 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -11182,13 +11690,13 @@ var langHeaders = [252]header{ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0000, 0x0000, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, // Entry 240 - 27F 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, - 0x0008, 0x0008, 0x001d, + 0x0008, 0x0008, 0x0008, 0x0008, 0x001d, }, }, { // rof @@ -11198,7 +11706,7 @@ var langHeaders = [252]header{ "maKinepaliKiholanziKipunjabiKipolandiKirenoKiromaniaKirusiKinyarwand" + "aKisomaliKiswidiKitamilKitailandiKiturukiKiukraniaKiurduKivietinamuK" + "iyorubaKichinaKizuluKihorombo", - []uint16{ // 481 elements + []uint16{ // 483 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x000f, 0x000f, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0020, 0x002a, @@ -11267,7 +11775,7 @@ var langHeaders = [252]header{ 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, - 0x0175, + 0x016c, 0x016c, 0x0175, }, }, { // ru @@ -11285,17 +11793,17 @@ var langHeaders = [252]header{ "aIkinyarumeniyaUrurimi GahuzamiryangoIkinyendoziyaUruhuzandimiIgisil" + "andeIgitaliyaniIkiyapaniInyejavaInyejeworujiyaIgikambodiyaIgikanadaI" + "gikoreyaInyekuridishiInkerigiziIkilatiniIlingalaIkilawotiyaniIkilitu" + - "waniyaIkinyaletoviyaniIkimasedoniyaniIkimalayalamiIkimongoliIkimarat" + - "iIkimalayiIkimalitezeIkinepaliIkinerilandeInyenoruveji (Nyonorusiki)" + - "IkinoruvejiInyogusitaniInyoriyaIgipunjabiIgipoloneImpashitoIgiporutu" + - "galiIkinyarumaniyaIkirusiyaKinyarwandaIgisansikiriIgisindiInyesimpal" + - "ezeIgisilovakiIkinyasiloveniyaIgisomaliIcyalubaniyaIgiseribeInyeseso" + - "toInyesudaniIgisuweduwaIgiswahiliIgitamiliIgiteluguIgitayiInyatigiri" + - "nyaInyeturukimeniIgiturukiyaIkiwiguriIkinyayukereniInyeyuruduInyeyuz" + - "ubekiIkinyaviyetinamuInyehawusaInyeyidishiInyezuluIkinyafilipineInye" + - "kilingoniInyeporutigali (Brezili)Inyeporutigali (Igiporutigali)Inyes" + - "eribiya na Korowasiya", - []uint16{ // 610 elements + "waniyaIkinyaletoviyaniIkimasedoniyaIkimalayalamiIkimongoliIkimaratiI" + + "kimalayiIkimalitezeIkinepaliIkinerilandeInyenoruveji (Nyonorusiki)Ik" + + "inoruvejiInyogusitaniInyoriyaIgipunjabiIgipoloneImpashitoIgiporutuga" + + "liIkinyarumaniyaIkirusiyaKinyarwandaIgisansikiriIgisindiInyesimpalez" + + "eIgisilovakiIkinyasiloveniyaIgisomaliIcyalubaniyaIgiseribeInyesesoto" + + "InyesudaniIgisuweduwaIgiswahiliIgitamiliIgiteluguIgitayiInyatigiriny" + + "aInyeturukimeniIgiturukiyaIkiwiguriIkinyayukereniInyeyuruduInyeyuzub" + + "ekiIkinyaviyetinamuInyehawusaInyeyidishiInyezuluIkinyafilipineInyeki" + + "lingoniInyeporutigali (Brezili)Inyeporutigali (Igiporutigali)Inyeser" + + "ibiya na Korowasiya", + []uint16{ // 612 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x0018, 0x0024, 0x0024, 0x002c, 0x0036, 0x0036, 0x0036, 0x0046, 0x0046, 0x0053, 0x0063, @@ -11310,79 +11818,79 @@ var langHeaders = [252]header{ 0x01f1, 0x01f1, 0x01fa, 0x0202, 0x0210, 0x0210, 0x0210, 0x0210, 0x0210, 0x0210, 0x021c, 0x0225, 0x022e, 0x022e, 0x022e, 0x023b, 0x023b, 0x023b, 0x0245, 0x024e, 0x024e, 0x024e, 0x024e, 0x0256, - 0x0263, 0x0270, 0x0270, 0x0280, 0x0280, 0x0280, 0x0280, 0x028f, - 0x029c, 0x02a6, 0x02af, 0x02b8, 0x02c3, 0x02c3, 0x02c3, 0x02c3, - 0x02cc, 0x02cc, 0x02d8, 0x02f2, 0x02fd, 0x02fd, 0x02fd, 0x02fd, - 0x0309, 0x0309, 0x0309, 0x0311, 0x0311, 0x031b, 0x031b, 0x0324, - // Entry 80 - BF - 0x032d, 0x033a, 0x033a, 0x033a, 0x033a, 0x0348, 0x0351, 0x035c, - 0x0368, 0x0368, 0x0370, 0x0370, 0x0370, 0x037d, 0x0388, 0x0398, - 0x0398, 0x0398, 0x03a1, 0x03ad, 0x03b6, 0x03b6, 0x03c0, 0x03ca, - 0x03d5, 0x03df, 0x03e8, 0x03f1, 0x03f1, 0x03f8, 0x0405, 0x0413, - 0x0413, 0x0413, 0x041e, 0x041e, 0x041e, 0x041e, 0x0427, 0x0435, - 0x043f, 0x044b, 0x044b, 0x045b, 0x045b, 0x045b, 0x045b, 0x0465, - 0x0470, 0x0470, 0x0470, 0x0470, 0x0478, 0x0478, 0x0478, 0x0478, - 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, - // Entry C0 - FF - 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, - 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, - 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, - 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, - 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, - 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, - 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, - 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, - // Entry 100 - 13F - 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, - 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, - 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, - 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, 0x0478, - 0x0478, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, - 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, - 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, - 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0263, 0x0270, 0x0270, 0x0280, 0x0280, 0x0280, 0x0280, 0x028d, + 0x029a, 0x02a4, 0x02ad, 0x02b6, 0x02c1, 0x02c1, 0x02c1, 0x02c1, + 0x02ca, 0x02ca, 0x02d6, 0x02f0, 0x02fb, 0x02fb, 0x02fb, 0x02fb, + 0x0307, 0x0307, 0x0307, 0x030f, 0x030f, 0x0319, 0x0319, 0x0322, + // Entry 80 - BF + 0x032b, 0x0338, 0x0338, 0x0338, 0x0338, 0x0346, 0x034f, 0x035a, + 0x0366, 0x0366, 0x036e, 0x036e, 0x036e, 0x037b, 0x0386, 0x0396, + 0x0396, 0x0396, 0x039f, 0x03ab, 0x03b4, 0x03b4, 0x03be, 0x03c8, + 0x03d3, 0x03dd, 0x03e6, 0x03ef, 0x03ef, 0x03f6, 0x0403, 0x0411, + 0x0411, 0x0411, 0x041c, 0x041c, 0x041c, 0x041c, 0x0425, 0x0433, + 0x043d, 0x0449, 0x0449, 0x0459, 0x0459, 0x0459, 0x0459, 0x0463, + 0x046e, 0x046e, 0x046e, 0x046e, 0x0476, 0x0476, 0x0476, 0x0476, + 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, + // Entry C0 - FF + 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, + 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, + 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, + 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, + 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, + 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, + 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, + 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, + // Entry 100 - 13F + 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, + 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, + 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, + 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, 0x0476, + 0x0476, 0x0476, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, + 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, + 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, + 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, // Entry 140 - 17F - 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, - 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, - 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, - 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, - 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, - 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, - 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, - 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, + 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, + 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, + 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, + 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, + 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, + 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, + 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, // Entry 180 - 1BF - 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, - 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, - 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, - 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, - 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, - 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, - 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, - 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, + 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, + 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, + 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, + 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, + 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, + 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, + 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, // Entry 1C0 - 1FF - 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, - 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, - 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, - 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, - 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, - 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, - 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, - 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, + 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, + 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, + 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, + 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, + 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, + 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, + 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, + 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, // Entry 200 - 23F - 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, - 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, - 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, 0x0486, - 0x0486, 0x0486, 0x0486, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, - 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, - 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, - 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, - 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, + 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, + 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, + 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, + 0x0484, 0x0484, 0x0484, 0x0484, 0x0484, 0x0491, 0x0491, 0x0491, + 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, + 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, + 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, + 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, // Entry 240 - 27F - 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, - 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, - 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, - 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x0493, 0x04ab, 0x04c9, - 0x04c9, 0x04e3, + 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, + 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, + 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, + 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, + 0x04a9, 0x04c7, 0x04c7, 0x04e1, }, }, { // rwk @@ -11393,7 +11901,7 @@ var langHeaders = [252]header{ "renoKyiromaniaKyirusiKyinyarwandaKyisomalyiKyiswidiKyitamilKyitailan" + "diKyiturukyiKyiukraniaKyiurduKyivietinamuKyiyorubaKyichinaKyizuluKir" + "uwa", - []uint16{ // 487 elements + []uint16{ // 489 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0011, 0x0011, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0024, 0x0030, @@ -11462,7 +11970,8 @@ var langHeaders = [252]header{ 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, - 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x019f, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x019f, }, }, { // sah @@ -11475,7 +11984,7 @@ var langHeaders = [252]header{ "ллыыТөлүгүлүүТадьыыктыыТатаардыыУйгуурдууУкрайыыньыстыыҮзбиэктииКыт" + "айдыыЗуулулууАлеуттууАстуурдууКиин куурдууПилипииннииНагаайдыысаха " + "тыла", - []uint16{ // 489 elements + []uint16{ // 491 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0012, 0x0012, 0x0030, 0x0030, 0x0042, 0x0042, 0x0052, 0x0052, 0x0062, 0x0062, 0x0082, 0x0082, 0x0098, 0x00ac, @@ -11513,11 +12022,11 @@ var langHeaders = [252]header{ 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, 0x03f0, // Entry 100 - 13F + 0x03f0, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, - 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, - 0x0407, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, + 0x0407, 0x0407, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, @@ -11538,14 +12047,14 @@ var langHeaders = [252]header{ 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, - 0x041d, 0x041d, 0x041d, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, + 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x042f, 0x042f, 0x042f, // Entry 1C0 - 1FF 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, 0x042f, - 0x0440, + 0x042f, 0x042f, 0x0440, }, }, { // saq @@ -11555,7 +12064,7 @@ var langHeaders = [252]header{ "inepaliKiholanziKipunjabiKipolandiKirenoKiromaniaKirusiKinyarwandaKi" + "somaliKiswidiKitamilKitailandiKiturukiKiukraniaKiurduKivietinamuKiyo" + "rubaKichinaKizuluKisampur", - []uint16{ // 491 elements + []uint16{ // 493 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x000e, 0x000e, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x001f, 0x0029, @@ -11625,7 +12134,7 @@ var langHeaders = [252]header{ 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, - 0x0169, 0x0169, 0x0171, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0171, }, }, { // sbp @@ -11637,7 +12146,7 @@ var langHeaders = [252]header{ "iIshinyalwandaIshisomaliIshiswidiIshitamiliIshitayilandiIshitulukiIs" + "hiyukilaniyaIshiwuludiIshivietinamuIshiyolubaIshishinaIshisuluIshisa" + "ngu", - []uint16{ // 496 elements + []uint16{ // 498 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x0016, 0x0016, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x002c, 0x0039, @@ -11707,7 +12216,135 @@ var langHeaders = [252]header{ 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, - 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01e3, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, 0x01da, + 0x01da, 0x01e3, + }, + }, + { // sd + "افارابقازیانآفريڪياڪانامهاريارگنيعربيآسامياويرسایماراآزربائيجانيبشڪربيلا" + + "روسيبلغاريائيبسلامابمبارابنگلاتبيتائيبريٽنبوسنيائيڪيٽالانچیچنچموروڪ" + + "ارسيڪائيچيڪچرچ سلاویچو واشويلشڊينشجرمندويهيزونخاايويونانيانگريزيايس" + + "پرانٽواسپينيايستونائيباسڪيفارسيفلاههفنشفجيفيروايسفرانسيمغربي فريشنآ" + + "ئرشاسڪاٽش گيلڪگليشئينگوارانيگجراتيمينڪسهوساعبرانيهنديڪروشيائيهيٽي ڪ" + + "روليهنگريارمانيهريروانٽرلنگئاانڊونيشياگبوسچوان ييادوآئيس لينڊڪاطالو" + + "يانو ڪتوتجاپانيجاونيزجارجيناڪويوڪنياماقازقڪالا ليسٽخمرڪناڊاڪوريائيڪ" + + "نوريڪشميريڪرديڪوميڪورنشڪرغيزلاطينيلگزمبرگگاندالمبرگشلنگالالائوليٿون" + + "يائيلوبا-ڪتانگالاتوينملاگاسيمارشليزمائوريميسي ڊونيائيمليالممنگوليمر" + + "اٺيمليمالٽيبرمينائواتر دبيلينيپاليڊونگاڊچنارويائي نيوناسڪنارويائي ب" + + "وڪمالڏکڻ دبيلينواجونيانجاآڪسيٽناورومواوڊيااوسيٽڪپنجابيپولشپشتوپرتگا" + + "ليڪيچوارومانشرونڊيرومانيروسيڪنيار وانڊاسنسڪرتسارڊينيسنڌياتر ساميسان" + + "گوسنهالاسلواڪيسلووينيساموآنشوناسوماليالبانيسربيائيسواتيڏکڻ سوٿيسوڊا" + + "نيسويڊنيسواحيليتاملتلگوتاجڪيٿائيتگرينيائيترڪمانيتسواناتونگنترڪسونگا" + + "تاتريتاهيتييوغوريوڪرانياردوازبڪوينڊاويتناميوالپڪولونوولفزھوسايدشيور" + + "وباچينيزولواچائينيزادنگمياديگهياگهيمآئينواليوٽڏکڻ التائيانجيڪاماپوچ" + + "ياراپائواسواسٽوريناواڌيباليباسابيمبابيناڀوجپوريبنيسڪسڪابودوبگنيزبلن" + + "سبوانوچگاچڪيزماريچوڪ توچروڪيچايانمرڪزي ڪردشسيسلوا ڪريئول فرانسيڊڪوٽ" + + "اڊارگواتائيتاداگربزارمالوئر سوربينڊيولاجولا فونيدزاگاايمبيوايفڪايڪا" + + "جڪاوانڊوفلپائنيفونفرائي لئينگاجيزگلبرٽيزگورنٽلوسوئس جرمنگشيگوچنهوائ" + + "يهلي گيانانمونگاپر سربيائيهوپاايبنابيبيوالوڪوانگشلوجبيننغومباميڪمڪب" + + "ائلڪچنپوڪيپسيڪئمباڪبارڊيئنتياپمڪونديڪيبيو ويرڊيانوڪوروخاسيڪيورا چني" + + "ڪڪوڪيلين جنڪمبونڊوڪونڪيڪپيلڪراچي بالڪرڪريلئينڪورخشمبالابافياڪلونئين" + + "ڪومڪلڊينولانگيليزگهينلڪوٽالوزياتر لوريلوبا-لولوالنڊالوميزولوهيامدور" + + "ائيمگاهيميٿليمڪاسرمسائيموڪشامينڊيميروموریسیینمخووا ميتوميتاميڪ مڪمن" + + "اڪابواماني پوريموهاڪموسيمن دانگهڪ کان وڌيڪ ٻوليونڪريڪمرانڊيزايريزيا" + + "مزيندرانينيپولٽننامانيوارينياسنوويڪويسيونغيمبوننوگائينڪواتر سوٿونيو" + + "رنايانڪولپانگا سينانپيم پينگاپاپي امينٽوپلوننائيجرين پجنپرشنڪچيريپن" + + "وئيريرو ٽينگورومبوارومينينرواسنداويساخاسيمبوروسنتالينغمبيسانگووسسلي" + + "اسڪاٽسسيناڪيورابورو سينيتيچل هاتيشانڏکڻ ساميلولي سامياناري سامياسڪا" + + "ٽ ساميسونينڪيسرانن تانگوسهوسڪوماڪمورينشاميتمنيتيسوتيتمتگريڪلونتاڪ پ" + + "سنتاروڪوتمبوڪاتوالوتساوڪيتووينيائيوچ اٽلس تمازائيٽادمورتيااومبنڊواڻ" + + "ڄاتل ٻوليياونجووالسروولايٽاواريڪيلمڪسوگايانگ بينييمباڪينٽونيزمعياري" + + " مراڪشي تامازائيٽزونيڪوئي ٻولي جو مواد ڪونهيزازاجديد معياري عربيآسٽر" + + "يائي جرمنen (آسٽريليا)يورپي اسپينيفلیمشبرازيلي پرتگالييورپي پرتگالي" + + "مالديويڪونگو سواحيلي", + []uint16{ // 613 elements + // Entry 0 - 3F + 0x0000, 0x0008, 0x0018, 0x0018, 0x0024, 0x002c, 0x0038, 0x0042, + 0x004a, 0x0054, 0x005e, 0x006a, 0x0080, 0x0088, 0x0098, 0x00aa, + 0x00b6, 0x00c2, 0x00cc, 0x00da, 0x00e4, 0x00f4, 0x0102, 0x010a, + 0x0114, 0x0126, 0x0126, 0x012c, 0x013d, 0x0148, 0x0150, 0x0158, + 0x0160, 0x016a, 0x0174, 0x017a, 0x0186, 0x0194, 0x01a6, 0x01b2, + 0x01c4, 0x01ce, 0x01d8, 0x01e2, 0x01e8, 0x01ee, 0x01fc, 0x0208, + 0x021d, 0x0225, 0x023a, 0x0248, 0x0256, 0x0262, 0x026c, 0x0274, + 0x0280, 0x0288, 0x0288, 0x0298, 0x02ab, 0x02b5, 0x02c1, 0x02cb, + // Entry 40 - 7F + 0x02dd, 0x02ed, 0x02ed, 0x02f5, 0x0304, 0x0304, 0x030a, 0x031d, + 0x0329, 0x0338, 0x0344, 0x0350, 0x035c, 0x035c, 0x0366, 0x0372, + 0x037a, 0x038b, 0x0391, 0x039b, 0x03a9, 0x03b3, 0x03bf, 0x03c7, + 0x03cf, 0x03d9, 0x03e3, 0x03ef, 0x03fd, 0x0407, 0x0413, 0x041f, + 0x0427, 0x0439, 0x044e, 0x045a, 0x0468, 0x0476, 0x0482, 0x0499, + 0x04a5, 0x04b1, 0x04bb, 0x04c1, 0x04cb, 0x04d3, 0x04db, 0x04ec, + 0x04f8, 0x0502, 0x0506, 0x0525, 0x0542, 0x0553, 0x055d, 0x0569, + 0x0575, 0x0575, 0x0581, 0x058b, 0x0597, 0x05a3, 0x05a3, 0x05ab, + // Entry 80 - BF + 0x05b3, 0x05c1, 0x05cb, 0x05d7, 0x05e1, 0x05ed, 0x05f5, 0x060a, + 0x0616, 0x0624, 0x062c, 0x063b, 0x0645, 0x0651, 0x065d, 0x066b, + 0x0677, 0x067f, 0x068b, 0x0697, 0x06a5, 0x06af, 0x06be, 0x06ca, + 0x06d6, 0x06e4, 0x06ec, 0x06f4, 0x06fe, 0x0706, 0x0718, 0x0726, + 0x0732, 0x073c, 0x0742, 0x074c, 0x0756, 0x0762, 0x076c, 0x077a, + 0x0782, 0x078a, 0x0794, 0x07a2, 0x07ac, 0x07b4, 0x07bc, 0x07c6, + 0x07cc, 0x07d8, 0x07d8, 0x07e0, 0x07e8, 0x07f8, 0x07f8, 0x0804, + 0x0810, 0x0810, 0x0810, 0x081a, 0x0824, 0x0824, 0x0824, 0x082e, + // Entry C0 - FF + 0x082e, 0x0841, 0x0841, 0x084d, 0x084d, 0x0859, 0x0859, 0x0867, + 0x0867, 0x0867, 0x0867, 0x0867, 0x0867, 0x086d, 0x086d, 0x087b, + 0x087b, 0x0885, 0x0885, 0x088d, 0x088d, 0x0895, 0x0895, 0x0895, + 0x0895, 0x0895, 0x089f, 0x089f, 0x08a7, 0x08a7, 0x08a7, 0x08a7, + 0x08b5, 0x08b5, 0x08bb, 0x08bb, 0x08bb, 0x08c5, 0x08c5, 0x08c5, + 0x08c5, 0x08c5, 0x08cd, 0x08cd, 0x08cd, 0x08d7, 0x08d7, 0x08dd, + 0x08dd, 0x08dd, 0x08dd, 0x08dd, 0x08dd, 0x08dd, 0x08e9, 0x08ef, + 0x08ef, 0x08ef, 0x08f7, 0x08ff, 0x08ff, 0x090a, 0x090a, 0x0914, + // Entry 100 - 13F + 0x091e, 0x0931, 0x0931, 0x0931, 0x0931, 0x0957, 0x0957, 0x0961, + 0x096d, 0x0979, 0x0979, 0x0979, 0x0983, 0x0983, 0x098d, 0x098d, + 0x09a2, 0x09a2, 0x09ac, 0x09ac, 0x09bd, 0x09bd, 0x09c7, 0x09d3, + 0x09db, 0x09db, 0x09db, 0x09e7, 0x09e7, 0x09e7, 0x09e7, 0x09f3, + 0x09f3, 0x09f3, 0x0a01, 0x0a01, 0x0a07, 0x0a07, 0x0a07, 0x0a07, + 0x0a07, 0x0a07, 0x0a07, 0x0a1a, 0x0a1e, 0x0a1e, 0x0a1e, 0x0a1e, + 0x0a1e, 0x0a1e, 0x0a24, 0x0a32, 0x0a32, 0x0a32, 0x0a32, 0x0a32, + 0x0a32, 0x0a40, 0x0a40, 0x0a40, 0x0a40, 0x0a51, 0x0a51, 0x0a51, + // Entry 140 - 17F + 0x0a57, 0x0a5f, 0x0a5f, 0x0a5f, 0x0a69, 0x0a69, 0x0a7c, 0x0a7c, + 0x0a84, 0x0a99, 0x0a99, 0x0aa1, 0x0aa9, 0x0ab5, 0x0abf, 0x0ac7, + 0x0ac7, 0x0ac7, 0x0ad3, 0x0adf, 0x0ae7, 0x0ae7, 0x0ae7, 0x0ae7, + 0x0ae7, 0x0af1, 0x0af7, 0x0b05, 0x0b0f, 0x0b0f, 0x0b1f, 0x0b1f, + 0x0b27, 0x0b33, 0x0b4e, 0x0b4e, 0x0b56, 0x0b56, 0x0b5e, 0x0b5e, + 0x0b6f, 0x0b6f, 0x0b6f, 0x0b75, 0x0b84, 0x0b92, 0x0b92, 0x0b9c, + 0x0b9c, 0x0ba4, 0x0bb9, 0x0bb9, 0x0bb9, 0x0bc7, 0x0bcf, 0x0bdb, + 0x0be5, 0x0bf3, 0x0bfb, 0x0bfb, 0x0c05, 0x0c0f, 0x0c0f, 0x0c0f, + // Entry 180 - 1BF + 0x0c1d, 0x0c1d, 0x0c1d, 0x0c1d, 0x0c27, 0x0c27, 0x0c27, 0x0c27, + 0x0c2f, 0x0c3e, 0x0c3e, 0x0c51, 0x0c51, 0x0c59, 0x0c5d, 0x0c65, + 0x0c6f, 0x0c6f, 0x0c6f, 0x0c7d, 0x0c7d, 0x0c87, 0x0c91, 0x0c9b, + 0x0c9b, 0x0ca5, 0x0ca5, 0x0caf, 0x0caf, 0x0cb9, 0x0cc1, 0x0cd1, + 0x0cd1, 0x0ce4, 0x0cec, 0x0cf7, 0x0d07, 0x0d07, 0x0d18, 0x0d22, + 0x0d2a, 0x0d2a, 0x0d37, 0x0d58, 0x0d60, 0x0d6e, 0x0d6e, 0x0d6e, + 0x0d6e, 0x0d7c, 0x0d8e, 0x0d8e, 0x0d9c, 0x0da4, 0x0da4, 0x0db0, + 0x0db8, 0x0dc0, 0x0dc0, 0x0dcc, 0x0dda, 0x0de6, 0x0de6, 0x0de6, + // Entry 1C0 - 1FF + 0x0dec, 0x0dfb, 0x0e03, 0x0e03, 0x0e03, 0x0e13, 0x0e13, 0x0e13, + 0x0e13, 0x0e13, 0x0e28, 0x0e28, 0x0e39, 0x0e4e, 0x0e56, 0x0e56, + 0x0e6d, 0x0e6d, 0x0e6d, 0x0e6d, 0x0e6d, 0x0e6d, 0x0e6d, 0x0e6d, + 0x0e6d, 0x0e75, 0x0e75, 0x0e7b, 0x0e7b, 0x0e7b, 0x0e89, 0x0e9c, + 0x0e9c, 0x0e9c, 0x0ea6, 0x0ea6, 0x0ea6, 0x0ea6, 0x0ea6, 0x0eb6, + 0x0ebc, 0x0ec8, 0x0ed0, 0x0ed0, 0x0ede, 0x0ede, 0x0eea, 0x0eea, + 0x0ef4, 0x0f00, 0x0f08, 0x0f14, 0x0f14, 0x0f14, 0x0f14, 0x0f1c, + 0x0f1c, 0x0f1c, 0x0f37, 0x0f37, 0x0f37, 0x0f48, 0x0f4e, 0x0f4e, + // Entry 200 - 23F + 0x0f4e, 0x0f4e, 0x0f4e, 0x0f5d, 0x0f6e, 0x0f81, 0x0f94, 0x0fa2, + 0x0fa2, 0x0fb7, 0x0fb7, 0x0fbd, 0x0fbd, 0x0fc7, 0x0fc7, 0x0fc7, + 0x0fd3, 0x0fd3, 0x0fdb, 0x0fdb, 0x0fdb, 0x0fe3, 0x0feb, 0x0feb, + 0x0ff3, 0x0ffb, 0x0ffb, 0x0ffb, 0x0ffb, 0x1003, 0x1003, 0x1003, + 0x1003, 0x1003, 0x1010, 0x1010, 0x101c, 0x101c, 0x101c, 0x101c, + 0x1028, 0x1032, 0x103e, 0x1050, 0x106e, 0x107e, 0x107e, 0x108c, + 0x10a1, 0x10a5, 0x10a5, 0x10a5, 0x10a5, 0x10a5, 0x10a5, 0x10a5, + 0x10ad, 0x10b7, 0x10c5, 0x10cd, 0x10cd, 0x10cd, 0x10cd, 0x10d7, + // Entry 240 - 27F + 0x10d7, 0x10df, 0x10df, 0x10df, 0x10ee, 0x10f8, 0x10f8, 0x1108, + 0x1108, 0x1108, 0x1108, 0x1108, 0x1134, 0x113c, 0x1166, 0x116e, + 0x118c, 0x118c, 0x11a5, 0x11a5, 0x11ba, 0x11ba, 0x11ba, 0x11ba, + 0x11ba, 0x11d1, 0x11d1, 0x11d1, 0x11d1, 0x11d1, 0x11d1, 0x11db, + 0x11f8, 0x1211, 0x121f, 0x121f, 0x1238, }, }, { // se @@ -11732,7 +12369,7 @@ var langHeaders = [252]header{ "levsámegiellaanárašgiellanuortalašgiellashimaorigiellaudmurtagiellad" + "ovdameahttun giellakantongiellaserbokroatiagiellaálki kiinágiellaárb" + "evirolaš kiinnágiella", - []uint16{ // 613 elements + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x0010, 0x0010, 0x001e, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x003f, 0x004e, @@ -11768,33 +12405,33 @@ var langHeaders = [252]header{ 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, 0x047d, - 0x047d, 0x047d, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, + 0x047d, 0x047d, 0x047d, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, // Entry 100 - 13F 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, 0x0487, - 0x0487, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, + 0x0487, 0x0487, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, 0x0498, // Entry 140 - 17F - 0x0498, 0x0498, 0x0498, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, + 0x0498, 0x0498, 0x0498, 0x0498, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, - 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04b1, 0x04b1, 0x04b1, 0x04b1, + 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04a4, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, // Entry 180 - 1BF 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, 0x04b1, - 0x04b1, 0x04bd, 0x04bd, 0x04bd, 0x04bd, 0x04bd, 0x04bd, 0x04bd, + 0x04b1, 0x04b1, 0x04b1, 0x04bd, 0x04bd, 0x04bd, 0x04bd, 0x04bd, 0x04bd, 0x04bd, 0x04bd, 0x04bd, 0x04bd, 0x04bd, 0x04bd, 0x04bd, - 0x04bd, 0x04bd, 0x04bd, 0x04bd, 0x04bd, 0x04bd, 0x04bd, 0x04c7, - 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, + 0x04bd, 0x04bd, 0x04bd, 0x04bd, 0x04bd, 0x04bd, 0x04bd, 0x04bd, + 0x04bd, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, // Entry 1C0 - 1FF 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, @@ -11803,23 +12440,23 @@ var langHeaders = [252]header{ 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, 0x04c7, - 0x04d4, 0x04d4, 0x04d4, 0x04d4, 0x04d4, 0x04d4, 0x04d4, 0x04e1, - 0x04e1, 0x04e1, 0x04e1, 0x04e1, 0x04e1, 0x04e1, 0x04e1, 0x04e1, + 0x04c7, 0x04c7, 0x04d4, 0x04d4, 0x04d4, 0x04d4, 0x04d4, 0x04d4, + 0x04d4, 0x04e1, 0x04e1, 0x04e1, 0x04e1, 0x04e1, 0x04e1, 0x04e1, // Entry 200 - 23F - 0x04e1, 0x04f1, 0x0501, 0x050f, 0x051f, 0x051f, 0x051f, 0x051f, - 0x051f, 0x051f, 0x051f, 0x051f, 0x051f, 0x051f, 0x052d, 0x052d, + 0x04e1, 0x04e1, 0x04e1, 0x04f1, 0x0501, 0x050f, 0x051f, 0x051f, + 0x051f, 0x051f, 0x051f, 0x051f, 0x051f, 0x051f, 0x051f, 0x051f, 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, - 0x052d, 0x052d, 0x052d, 0x053a, 0x053a, 0x053a, 0x054e, 0x054e, + 0x052d, 0x052d, 0x052d, 0x052d, 0x052d, 0x053a, 0x053a, 0x053a, 0x054e, 0x054e, 0x054e, 0x054e, 0x054e, 0x054e, 0x054e, 0x054e, 0x054e, 0x054e, 0x054e, 0x054e, 0x054e, 0x054e, 0x054e, 0x054e, // Entry 240 - 27F - 0x054e, 0x054e, 0x054e, 0x054e, 0x054e, 0x055a, 0x055a, 0x055a, + 0x054e, 0x054e, 0x054e, 0x054e, 0x054e, 0x054e, 0x054e, 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, 0x055a, - 0x055a, 0x056c, 0x056c, 0x057e, 0x0599, + 0x055a, 0x055a, 0x055a, 0x056c, 0x056c, 0x057e, 0x0599, }, }, { // se-FI @@ -11832,7 +12469,7 @@ var langHeaders = [252]header{ "aš fránskkagiellašveicalaš fránskkagiellabelgialaš hollánddagiellabr" + "asilialaš portugálagiellaportugálalaš portugálagiellamoldávialaš rom" + "ániagiellaálkes kiinnágiella", - []uint16{ // 612 elements + []uint16{ // 614 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0014, 0x0014, @@ -11907,7 +12544,7 @@ var langHeaders = [252]header{ 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, // Entry 200 - 23F 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, - 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x009a, 0x009a, + 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x008e, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, @@ -11916,10 +12553,10 @@ var langHeaders = [252]header{ 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, // Entry 240 - 27F 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, - 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x00b1, 0x00b1, - 0x00cf, 0x00e8, 0x0105, 0x011f, 0x0139, 0x0155, 0x017a, 0x0196, - 0x01b1, 0x01b1, 0x01cc, 0x01e7, 0x01e7, 0x0202, 0x021f, 0x023e, - 0x025a, 0x025a, 0x025a, 0x026e, + 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, + 0x00b1, 0x00b1, 0x00cf, 0x00e8, 0x0105, 0x011f, 0x0139, 0x0155, + 0x017a, 0x0196, 0x01b1, 0x01b1, 0x01cc, 0x01e7, 0x01e7, 0x0202, + 0x021f, 0x023e, 0x025a, 0x025a, 0x025a, 0x026e, }, }, { // seh @@ -11928,7 +12565,7 @@ var langHeaders = [252]header{ "oreanomalaiobirmanêsnepalêsholandêspanjabipolonêsportuguêsromenoruss" + "okinyarwandasomalisuecotâmiltailandêsturcoucranianourduvietnamitaior" + "ubáchinêszulusena", - []uint16{ // 502 elements + []uint16{ // 504 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x000c, 0x000c, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x001d, 0x0025, @@ -11999,7 +12636,7 @@ var langHeaders = [252]header{ 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, - 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0138, + 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0134, 0x0138, }, }, { // ses @@ -12012,7 +12649,7 @@ var langHeaders = [252]header{ "maali senniSuweede senniTamil senniTaailandu senniTurku senniUkreen " + "senniUrdu senniVietnaam senniYorbance senniSinuwa senni, MandareŋZul" + "u senniKoyraboro senni", - []uint16{ // 505 elements + []uint16{ // 507 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x0018, 0x0018, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0032, 0x0041, @@ -12084,7 +12721,7 @@ var langHeaders = [252]header{ 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, - 0x023d, + 0x022e, 0x022e, 0x023d, }, }, { // sg @@ -12129,7 +12766,7 @@ var langHeaders = [252]header{ "ⵉⵔⵎⴰⵏⵉⵜⵜⴰⵏⵉⴱⴰⵍⵉⵜⵜⴰⵀⵓⵍⴰⵏⴷⵉⵜⵜⴰⴱⵏⵊⴰⴱⵉⵜⵜⴰⴱⵓⵍⵓⵏⵉⵜⵜⴰⴱⵕⵟⵇⵉⵣⵜⵜⴰⵔⵓⵎⴰⵏⵉⵜⵜⴰⵔⵓ" + "ⵙⵉⵜⵜⴰⵔⵓⵡⴰⵏⴷⵉⵜⵜⴰⵙⵓⵎⴰⵍⵉⵜⵜⴰⵙⵡⵉⴷⵉⵜⵜⴰⵜⴰⵎⵉⵍⵜⵜⴰⵜⴰⵢⵍⴰⵏⴷⵉⵜⵜⴰⵜⵓⵔⴽⵉⵜⵜⵓⴽⵔⴰⵏⵉⵜⵜ" + "ⵓⵔⴷⵓⵜⵜⴰⴼⵉⵜⵏⴰⵎⵉⵜⵜⴰⵢⵔⵓⴱⴰⵜⵜⴰⵛⵉⵏⵡⵉⵜⵜⴰⵣⵓⵍⵓⵜⵜⴰⵛⵍⵃⵉⵜ", - []uint16{ // 508 elements + []uint16{ // 510 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0012, 0x002a, 0x002a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x005d, 0x0078, @@ -12201,7 +12838,7 @@ var langHeaders = [252]header{ 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, - 0x0462, 0x0462, 0x0462, 0x0477, + 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0477, }, }, { // shi-Latn @@ -12211,7 +12848,7 @@ var langHeaders = [252]header{ "nitTanibalitTahulanditTabnjabitTabulunitTabṛṭqiztTarumanitTarusitTar" + "uwanditTasumalitTaswiditTatamiltTataylanditTaturkitTukranitTurdutTaf" + "itnamitTayrubatTacinwitTazulutTashelḥiyt", - []uint16{ // 508 elements + []uint16{ // 510 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x000e, 0x000e, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0020, 0x002a, @@ -12283,7 +12920,7 @@ var langHeaders = [252]header{ 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, - 0x0180, 0x0180, 0x0180, 0x018c, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x018c, }, }, { // si @@ -12351,17 +12988,17 @@ var langHeaders = [252]header{ "hitshankielâmaadâsämikielâjuulevsämikielâanarâškielânuorttâlâškielâs" + "oninkesranantongosahosukumakielâkomorikielâsyyriakielâtemnekielâates" + "otetumtigrekielâklingonkielâtok pisintarokotumbukakielâtuvalukielâta" + - "sawaqtuvakielâKoskâatlas tamazightudmurtkielâumbunduruotâsvaikielâve" + - "psäkielâvunjowalliskielâwolaitakielâwaraykielâkalmukkielâsogayangben" + - "yembakantonkielâstandard tamazightzunikielâij kielâlâš siskáldâszaza" + - "kielâstandard arabiakielâNuorttâriijkâ saksakielâSveitsi pajesaksaki" + - "elâAustralia eŋgâlâskielâKanada eŋgâlâskielâBritannia eŋgâlâskielâAm" + - "erika eŋgâlâskielâLäättin-Amerika espanjakielâEspanja espanjakielâMe" + - "ksiko espanjakielâKanada ranskakielâSveitsi ranskakielâVuáládâhenâmi" + - "j saksakielâhollandkielâ (flaami)Brasilia portugalkielâPortugal port" + - "ugalkielâKongo swahilikielâoovtâkiärdánis kiinakielâärbivuáválâš kii" + - "nakielâ", - []uint16{ // 613 elements + "sawaqtuvakielâKoskâatlas tamazightudmurtkielâumbundutubdâmettumis ki" + + "elâvaikielâvepsäkielâvunjowalliskielâwolaitakielâwaraykielâkalmukkie" + + "lâsogayangbenyembakantonkielâstandard tamazightzunikielâij kielâlâš " + + "siskáldâszazakielâstandard arabiakielâNuorttâriijkâ saksakielâSveits" + + "i pajesaksakielâAustralia eŋgâlâskielâKanada eŋgâlâskielâBritannia e" + + "ŋgâlâskielâAmerika eŋgâlâskielâLäättin-Amerika espanjakielâEspanja " + + "espanjakielâMeksiko espanjakielâKanada ranskakielâSveitsi ranskakiel" + + "âVuáládâhenâmij saksakielâhollandkielâ (flaami)Brasilia portugalkie" + + "lâPortugal portugalkielâKongo swahilikielâoovtâkiärdánis kiinakielâä" + + "rbivuáválâš kiinakielâ", + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0004, 0x0011, 0x0011, 0x001a, 0x0024, 0x0030, 0x003e, 0x004a, 0x0055, 0x005f, 0x006b, 0x007d, 0x008a, 0x009e, 0x00ac, @@ -12396,59 +13033,59 @@ var langHeaders = [252]header{ 0x0832, 0x0832, 0x083d, 0x083d, 0x0847, 0x0847, 0x0847, 0x0847, 0x0856, 0x0856, 0x0860, 0x0860, 0x0860, 0x086d, 0x086d, 0x086d, 0x086d, 0x086d, 0x0877, 0x0877, 0x0877, 0x0881, 0x0881, 0x088b, - 0x088b, 0x088b, 0x088b, 0x088b, 0x088b, 0x0898, 0x08a2, 0x08a2, - 0x08a2, 0x08ad, 0x08b7, 0x08b7, 0x08c4, 0x08c4, 0x08d2, 0x08e0, - // Entry 100 - 13F - 0x08f2, 0x08f2, 0x08f2, 0x08f2, 0x0909, 0x0909, 0x0915, 0x0920, - 0x092b, 0x092b, 0x092b, 0x0937, 0x0937, 0x0942, 0x0942, 0x094c, - 0x094c, 0x0957, 0x0957, 0x0961, 0x0961, 0x096b, 0x0975, 0x097f, - 0x097f, 0x097f, 0x0985, 0x0985, 0x0985, 0x0985, 0x0991, 0x0991, - 0x0991, 0x099f, 0x099f, 0x09a8, 0x09a8, 0x09a8, 0x09a8, 0x09a8, - 0x09a8, 0x09a8, 0x09b4, 0x09bc, 0x09bc, 0x09bc, 0x09bc, 0x09bc, - 0x09bc, 0x09c3, 0x09d1, 0x09d1, 0x09d1, 0x09d1, 0x09d1, 0x09d1, - 0x09e0, 0x09e0, 0x09e0, 0x09f6, 0x0a09, 0x0a09, 0x0a09, 0x0a14, + 0x088b, 0x088b, 0x088b, 0x088b, 0x088b, 0x088b, 0x0898, 0x08a2, + 0x08a2, 0x08a2, 0x08ad, 0x08b7, 0x08b7, 0x08c4, 0x08c4, 0x08d2, + // Entry 100 - 13F + 0x08e0, 0x08f2, 0x08f2, 0x08f2, 0x08f2, 0x0909, 0x0909, 0x0915, + 0x0920, 0x092b, 0x092b, 0x092b, 0x0937, 0x0937, 0x0942, 0x0942, + 0x094c, 0x094c, 0x0957, 0x0957, 0x0961, 0x0961, 0x096b, 0x0975, + 0x097f, 0x097f, 0x097f, 0x0985, 0x0985, 0x0985, 0x0985, 0x0991, + 0x0991, 0x0991, 0x099f, 0x099f, 0x09a8, 0x09a8, 0x09a8, 0x09a8, + 0x09a8, 0x09a8, 0x09a8, 0x09b4, 0x09bc, 0x09bc, 0x09bc, 0x09bc, + 0x09bc, 0x09bc, 0x09c3, 0x09d1, 0x09d1, 0x09d1, 0x09d1, 0x09d1, + 0x09d1, 0x09e0, 0x09e0, 0x09e0, 0x09f6, 0x0a09, 0x0a09, 0x0a09, // Entry 140 - 17F - 0x0a24, 0x0a24, 0x0a24, 0x0a31, 0x0a31, 0x0a40, 0x0a40, 0x0a4b, - 0x0a54, 0x0a54, 0x0a5e, 0x0a68, 0x0a74, 0x0a7b, 0x0a87, 0x0a87, - 0x0a87, 0x0a8d, 0x0a93, 0x0a9a, 0x0a9a, 0x0a9a, 0x0a9a, 0x0a9a, - 0x0aa5, 0x0aab, 0x0aae, 0x0ab9, 0x0ab9, 0x0ac6, 0x0ac6, 0x0aca, - 0x0ad1, 0x0ae1, 0x0ae1, 0x0ae5, 0x0ae5, 0x0aea, 0x0aea, 0x0af6, - 0x0af6, 0x0af6, 0x0afa, 0x0b07, 0x0b0f, 0x0b0f, 0x0b16, 0x0b16, - 0x0b22, 0x0b37, 0x0b37, 0x0b37, 0x0b44, 0x0b50, 0x0b58, 0x0b5d, - 0x0b68, 0x0b73, 0x0b73, 0x0b7f, 0x0b8a, 0x0b8a, 0x0b8a, 0x0b95, + 0x0a14, 0x0a24, 0x0a24, 0x0a24, 0x0a31, 0x0a31, 0x0a40, 0x0a40, + 0x0a4b, 0x0a54, 0x0a54, 0x0a5e, 0x0a68, 0x0a74, 0x0a7b, 0x0a87, + 0x0a87, 0x0a87, 0x0a8d, 0x0a93, 0x0a9a, 0x0a9a, 0x0a9a, 0x0a9a, + 0x0a9a, 0x0aa5, 0x0aab, 0x0aae, 0x0ab9, 0x0ab9, 0x0ac6, 0x0ac6, + 0x0aca, 0x0ad1, 0x0ae1, 0x0ae1, 0x0ae5, 0x0ae5, 0x0aea, 0x0aea, + 0x0af6, 0x0af6, 0x0af6, 0x0afa, 0x0b07, 0x0b0f, 0x0b0f, 0x0b16, + 0x0b16, 0x0b22, 0x0b37, 0x0b37, 0x0b37, 0x0b44, 0x0b50, 0x0b58, + 0x0b5d, 0x0b68, 0x0b73, 0x0b73, 0x0b7f, 0x0b8a, 0x0b8a, 0x0b8a, // Entry 180 - 1BF - 0x0b95, 0x0b95, 0x0b95, 0x0ba1, 0x0ba1, 0x0ba1, 0x0ba5, 0x0bad, - 0x0bad, 0x0bb6, 0x0bb6, 0x0bbb, 0x0bbe, 0x0bc3, 0x0bc8, 0x0bc8, - 0x0bc8, 0x0bd4, 0x0bd4, 0x0bda, 0x0be2, 0x0be9, 0x0be9, 0x0bf4, - 0x0bf4, 0x0c00, 0x0c00, 0x0c0b, 0x0c15, 0x0c1d, 0x0c1d, 0x0c29, - 0x0c30, 0x0c36, 0x0c41, 0x0c41, 0x0c49, 0x0c55, 0x0c5a, 0x0c66, - 0x0c6d, 0x0c7b, 0x0c89, 0x0c97, 0x0c97, 0x0c97, 0x0c97, 0x0ca2, - 0x0cad, 0x0cad, 0x0cb9, 0x0cbd, 0x0cbd, 0x0cc3, 0x0ccd, 0x0cd7, - 0x0cd7, 0x0cdd, 0x0ce6, 0x0cf1, 0x0d06, 0x0d06, 0x0d0c, 0x0d15, + 0x0b95, 0x0b95, 0x0b95, 0x0b95, 0x0ba1, 0x0ba1, 0x0ba1, 0x0ba1, + 0x0ba5, 0x0bad, 0x0bad, 0x0bb6, 0x0bb6, 0x0bbb, 0x0bbe, 0x0bc3, + 0x0bc8, 0x0bc8, 0x0bc8, 0x0bd4, 0x0bd4, 0x0bda, 0x0be2, 0x0be9, + 0x0be9, 0x0bf4, 0x0bf4, 0x0c00, 0x0c00, 0x0c0b, 0x0c15, 0x0c1d, + 0x0c1d, 0x0c29, 0x0c30, 0x0c36, 0x0c41, 0x0c41, 0x0c49, 0x0c55, + 0x0c5a, 0x0c66, 0x0c6d, 0x0c7b, 0x0c89, 0x0c97, 0x0c97, 0x0c97, + 0x0c97, 0x0ca2, 0x0cad, 0x0cad, 0x0cb9, 0x0cbd, 0x0cbd, 0x0cc3, + 0x0ccd, 0x0cd7, 0x0cd7, 0x0cdd, 0x0ce6, 0x0cf1, 0x0d06, 0x0d06, // Entry 1C0 - 1FF - 0x0d19, 0x0d19, 0x0d19, 0x0d27, 0x0d27, 0x0d27, 0x0d27, 0x0d27, - 0x0d37, 0x0d37, 0x0d45, 0x0d4f, 0x0d5a, 0x0d5a, 0x0d68, 0x0d68, - 0x0d68, 0x0d68, 0x0d68, 0x0d68, 0x0d68, 0x0d68, 0x0d68, 0x0d7f, - 0x0d7f, 0x0d8a, 0x0d8a, 0x0d8a, 0x0d91, 0x0d9a, 0x0d9a, 0x0d9a, - 0x0d9f, 0x0dac, 0x0dac, 0x0dac, 0x0dac, 0x0dba, 0x0dbd, 0x0dc4, - 0x0dcf, 0x0dcf, 0x0ddc, 0x0ddc, 0x0de9, 0x0de9, 0x0df0, 0x0df5, - 0x0e02, 0x0e0e, 0x0e0e, 0x0e0e, 0x0e0e, 0x0e12, 0x0e12, 0x0e12, - 0x0e21, 0x0e21, 0x0e21, 0x0e2a, 0x0e34, 0x0e34, 0x0e34, 0x0e34, + 0x0d0c, 0x0d15, 0x0d19, 0x0d19, 0x0d19, 0x0d27, 0x0d27, 0x0d27, + 0x0d27, 0x0d27, 0x0d37, 0x0d37, 0x0d45, 0x0d4f, 0x0d5a, 0x0d5a, + 0x0d68, 0x0d68, 0x0d68, 0x0d68, 0x0d68, 0x0d68, 0x0d68, 0x0d68, + 0x0d68, 0x0d7f, 0x0d7f, 0x0d8a, 0x0d8a, 0x0d8a, 0x0d91, 0x0d9a, + 0x0d9a, 0x0d9a, 0x0d9f, 0x0dac, 0x0dac, 0x0dac, 0x0dac, 0x0dba, + 0x0dbd, 0x0dc4, 0x0dcf, 0x0dcf, 0x0ddc, 0x0ddc, 0x0de9, 0x0de9, + 0x0df0, 0x0df5, 0x0e02, 0x0e0e, 0x0e0e, 0x0e0e, 0x0e0e, 0x0e12, + 0x0e12, 0x0e12, 0x0e21, 0x0e21, 0x0e21, 0x0e2a, 0x0e34, 0x0e34, // Entry 200 - 23F - 0x0e34, 0x0e45, 0x0e56, 0x0e64, 0x0e77, 0x0e7e, 0x0e7e, 0x0e89, - 0x0e89, 0x0e8d, 0x0e8d, 0x0e99, 0x0e99, 0x0e99, 0x0ea5, 0x0ea5, - 0x0eb1, 0x0eb1, 0x0eb1, 0x0ebc, 0x0ec1, 0x0ec1, 0x0ec6, 0x0ed1, - 0x0ed1, 0x0ed1, 0x0ed1, 0x0ede, 0x0ede, 0x0ede, 0x0ede, 0x0ede, - 0x0ee7, 0x0ee7, 0x0eed, 0x0eed, 0x0eed, 0x0eed, 0x0efa, 0x0f06, - 0x0f0d, 0x0f17, 0x0f2c, 0x0f38, 0x0f38, 0x0f3f, 0x0f46, 0x0f4f, - 0x0f4f, 0x0f5b, 0x0f5b, 0x0f5b, 0x0f5b, 0x0f5b, 0x0f60, 0x0f6c, - 0x0f79, 0x0f84, 0x0f84, 0x0f84, 0x0f84, 0x0f90, 0x0f90, 0x0f94, + 0x0e34, 0x0e34, 0x0e34, 0x0e45, 0x0e56, 0x0e64, 0x0e77, 0x0e7e, + 0x0e7e, 0x0e89, 0x0e89, 0x0e8d, 0x0e8d, 0x0e99, 0x0e99, 0x0e99, + 0x0ea5, 0x0ea5, 0x0eb1, 0x0eb1, 0x0eb1, 0x0ebc, 0x0ec1, 0x0ec1, + 0x0ec6, 0x0ed1, 0x0ed1, 0x0ed1, 0x0ed1, 0x0ede, 0x0ede, 0x0ede, + 0x0ede, 0x0ede, 0x0ee7, 0x0ee7, 0x0eed, 0x0eed, 0x0eed, 0x0eed, + 0x0efa, 0x0f06, 0x0f0d, 0x0f17, 0x0f2c, 0x0f38, 0x0f38, 0x0f3f, + 0x0f54, 0x0f5d, 0x0f5d, 0x0f69, 0x0f69, 0x0f69, 0x0f69, 0x0f69, + 0x0f6e, 0x0f7a, 0x0f87, 0x0f92, 0x0f92, 0x0f92, 0x0f92, 0x0f9e, // Entry 240 - 27F - 0x0f94, 0x0f94, 0x0f9b, 0x0fa0, 0x0fa0, 0x0fac, 0x0fac, 0x0fac, - 0x0fac, 0x0fac, 0x0fbe, 0x0fc8, 0x0fe2, 0x0fec, 0x1001, 0x1001, - 0x101c, 0x1033, 0x104d, 0x1064, 0x107e, 0x1096, 0x10b5, 0x10ca, - 0x10df, 0x10df, 0x10f2, 0x1106, 0x1124, 0x113a, 0x1151, 0x1168, - 0x1168, 0x1168, 0x117b, 0x1198, 0x11b5, + 0x0f9e, 0x0fa2, 0x0fa2, 0x0fa2, 0x0fa9, 0x0fae, 0x0fae, 0x0fba, + 0x0fba, 0x0fba, 0x0fba, 0x0fba, 0x0fcc, 0x0fd6, 0x0ff0, 0x0ffa, + 0x100f, 0x100f, 0x102a, 0x1041, 0x105b, 0x1072, 0x108c, 0x10a4, + 0x10c3, 0x10d8, 0x10ed, 0x10ed, 0x1100, 0x1114, 0x1132, 0x1148, + 0x115f, 0x1176, 0x1176, 0x1176, 0x1189, 0x11a6, 0x11c3, }, }, { // sn @@ -12535,7 +13172,7 @@ var langHeaders = [252]header{ "бјелорускибамананканбанглахаићански креолскилаошкисинхалскиисикосаисизул" + "умапудунгуншвајцарски немачкимохокн’којужни шилхацентралноатласки т" + "амашекстандардни марокански тамашек", - []uint16{ // 587 elements + []uint16{ // 589 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0014, 0x0014, @@ -12580,7 +13217,7 @@ var langHeaders = [252]header{ 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, - 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00c8, 0x00c8, 0x00c8, 0x00c8, + 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00c8, 0x00c8, 0x00c8, // Entry 140 - 17F 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, @@ -12595,10 +13232,10 @@ var langHeaders = [252]header{ 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, - 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00d2, 0x00d2, 0x00d2, + 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00d2, + 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, - 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00db, 0x00db, // Entry 1C0 - 1FF 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, @@ -12607,26 +13244,26 @@ var langHeaders = [252]header{ 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, - 0x00db, 0x00db, 0x00db, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, + 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00f0, 0x00f0, 0x00f0, // Entry 200 - 23F 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, - 0x00f0, 0x00f0, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, + 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, // Entry 240 - 27F 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, - 0x011f, 0x011f, 0x0157, + 0x011f, 0x011f, 0x011f, 0x011f, 0x0157, }, }, { // sr-Cyrl-ME "бјелорускибамананканбанглафулаххаићански креолскилаошкиисикосаисизулумап" + "удунгунмохокн’којужни шилхацентралноатласки тамашекстандардни марок" + "ански тамашек", - []uint16{ // 587 elements + []uint16{ // 589 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0014, 0x0014, @@ -12686,10 +13323,10 @@ var langHeaders = [252]header{ 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, - 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x00a7, 0x00a7, 0x00a7, + 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x00a7, + 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, - 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00b0, 0x00b0, // Entry 1C0 - 1FF 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, @@ -12698,26 +13335,26 @@ var langHeaders = [252]header{ 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, - 0x00b0, 0x00b0, 0x00b0, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, + 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00c5, 0x00c5, 0x00c5, // Entry 200 - 23F 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, - 0x00c5, 0x00c5, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, + 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, // Entry 240 - 27F 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x00f4, - 0x00f4, 0x00f4, 0x012c, + 0x00f4, 0x00f4, 0x00f4, 0x00f4, 0x012c, }, }, { // sr-Cyrl-XK "бамананканбанглафулаххаићански креолскилаошкисинхалскиисикосаисизулушвај" + "царски немачкимохокн’којужни шилхацентралноатласки тамашекстандардн" + "и марокански тамашек", - []uint16{ // 587 elements + []uint16{ // 589 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -12762,7 +13399,7 @@ var langHeaders = [252]header{ 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, - 0x0087, 0x0087, 0x0087, 0x0087, 0x00aa, 0x00aa, 0x00aa, 0x00aa, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x00aa, 0x00aa, 0x00aa, // Entry 140 - 17F 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, @@ -12777,10 +13414,10 @@ var langHeaders = [252]header{ 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, - 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00b4, 0x00b4, 0x00b4, + 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00aa, 0x00b4, + 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, - 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00bd, 0x00bd, // Entry 1C0 - 1FF 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, @@ -12789,19 +13426,19 @@ var langHeaders = [252]header{ 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, - 0x00bd, 0x00bd, 0x00bd, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, + 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00d2, 0x00d2, 0x00d2, // Entry 200 - 23F 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, - 0x00d2, 0x00d2, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, + 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, // Entry 240 - 27F 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, - 0x0101, 0x0101, 0x0139, + 0x0101, 0x0101, 0x0101, 0x0101, 0x0139, }, }, { // sr-Latn @@ -12812,7 +13449,7 @@ var langHeaders = [252]header{ "bjeloruskibamanankanbanglahaićanski kreolskilaoškisinhalskiisikosaisizul" + "umapudungunšvajcarski nemačkimohokn’kojužni šilhacentralnoatlaski ta" + "mašekstandardni marokanski tamašek", - []uint16{ // 587 elements + []uint16{ // 589 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x000a, @@ -12857,7 +13494,7 @@ var langHeaders = [252]header{ 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, - 0x0055, 0x0055, 0x0055, 0x0055, 0x0069, 0x0069, 0x0069, 0x0069, + 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0069, 0x0069, 0x0069, // Entry 140 - 17F 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, @@ -12872,10 +13509,10 @@ var langHeaders = [252]header{ 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, - 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x006e, 0x006e, 0x006e, + 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x006e, + 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, - 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x0074, 0x0074, // Entry 1C0 - 1FF 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, @@ -12884,26 +13521,26 @@ var langHeaders = [252]header{ 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, - 0x0074, 0x0074, 0x0074, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, + 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0081, 0x0081, 0x0081, // Entry 200 - 23F 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, - 0x0081, 0x0081, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, + 0x0081, 0x0081, 0x0081, 0x0081, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, // Entry 240 - 27F 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, - 0x009a, 0x009a, 0x00b8, + 0x009a, 0x009a, 0x009a, 0x009a, 0x00b8, }, }, { // sr-Latn-ME "bjeloruskibamanankanbanglafulahhaićanski kreolskilaoškiisikosaisizulumap" + "udungunmohokn’kojužni šilhacentralnoatlaski tamašekstandardni maroka" + "nski tamašek", - []uint16{ // 587 elements + []uint16{ // 589 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x000a, @@ -12963,10 +13600,10 @@ var langHeaders = [252]header{ 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, - 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0056, 0x0056, 0x0056, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, - 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x005c, 0x005c, // Entry 1C0 - 1FF 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, @@ -12975,26 +13612,26 @@ var langHeaders = [252]header{ 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, - 0x005c, 0x005c, 0x005c, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, + 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x0069, 0x0069, 0x0069, // Entry 200 - 23F 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, - 0x0069, 0x0069, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0069, 0x0069, 0x0069, 0x0069, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, // Entry 240 - 27F 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, - 0x0082, 0x0082, 0x00a0, + 0x0082, 0x0082, 0x0082, 0x0082, 0x00a0, }, }, { // sr-Latn-XK "bamanankanbanglafulahhaićanski kreolskilaoškisinhalskiisikosaisizulušvaj" + "carski nemačkimohokn’kojužni šilhacentralnoatlaski tamašekstandardni" + " marokanski tamašek", - []uint16{ // 587 elements + []uint16{ // 589 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -13039,7 +13676,7 @@ var langHeaders = [252]header{ 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, - 0x0046, 0x0046, 0x0046, 0x0046, 0x005a, 0x005a, 0x005a, 0x005a, + 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x005a, 0x005a, 0x005a, // Entry 140 - 17F 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, @@ -13054,10 +13691,10 @@ var langHeaders = [252]header{ 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, - 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005f, 0x005f, 0x005f, + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005f, + 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, - 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x0065, 0x0065, // Entry 1C0 - 1FF 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, @@ -13066,19 +13703,19 @@ var langHeaders = [252]header{ 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, - 0x0065, 0x0065, 0x0065, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0065, 0x0065, 0x0065, 0x0065, 0x0065, 0x0072, 0x0072, 0x0072, // Entry 200 - 23F 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, - 0x0072, 0x0072, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, + 0x0072, 0x0072, 0x0072, 0x0072, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, // Entry 240 - 27F 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, - 0x008b, 0x008b, 0x00a9, + 0x008b, 0x008b, 0x008b, 0x008b, 0x00a9, }, }, { // sv @@ -13110,12 +13747,12 @@ var langHeaders = [252]header{ }, { // sw-CD "KiakanKiazabajaniKimanksiKikirigiziKilimburgiKimasedoniaKiyidiKiarabu ch" + - "a AljeriaKibuginiKigwichiinKihupaKiingushKilojbanKikachinKikoyra Chi" + - "iniKikakoKikomipermyakKikurukhKikumykKilambamakKimokshaKimikmakiKimo" + - "hokiKimossiKingiemboonKiinkoPijini ya NijeriaKikiicheKiarabu cha Cha" + - "diKitongo cha SrananKikomoroKisiriaKiudumurtiKirootKiwalserKiarabu c" + - "ha Dunia Kilichosanifishwa", - []uint16{ // 591 elements + "a AljeriaKibuginiKigwichiinKihupaKilojbanKikachinKikoyra ChiiniKikak" + + "oKikomipermyakKikurukhKikumykKilambamakKimokshaKimikmakiKimohokiKimo" + + "ssiKingiemboonKiinkoPijini ya NijeriaKikiicheKiarabu cha ChadiKitong" + + "o cha SrananKikomoroKisiriaKiudumurtiKiwalserKiarabu cha Dunia Kilic" + + "hosanifishwa", + []uint16{ // 593 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0011, 0x0011, 0x0011, 0x0011, @@ -13162,55 +13799,56 @@ var langHeaders = [252]header{ 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, // Entry 140 - 17F - 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, - 0x0063, 0x0063, 0x0069, 0x0069, 0x0069, 0x0069, 0x0071, 0x0071, - 0x0071, 0x0079, 0x0079, 0x0079, 0x0079, 0x0079, 0x0079, 0x0079, - 0x0079, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, - 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x008f, - 0x008f, 0x008f, 0x0095, 0x0095, 0x0095, 0x00a2, 0x00a2, 0x00a2, - 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00aa, 0x00aa, 0x00aa, - 0x00aa, 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b8, 0x00b8, + 0x0059, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, + 0x0069, 0x0069, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, + 0x0071, 0x0071, 0x0079, 0x0079, 0x0079, 0x0079, 0x0079, 0x0079, + 0x0079, 0x0079, 0x0079, 0x0079, 0x0079, 0x0079, 0x0079, 0x0079, + 0x0087, 0x0087, 0x0087, 0x008d, 0x008d, 0x008d, 0x009a, 0x009a, + 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x00a2, 0x00a2, + 0x00a2, 0x00a2, 0x00a9, 0x00a9, 0x00a9, 0x00a9, 0x00a9, 0x00b0, // Entry 180 - 1BF - 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00b8, - 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00b8, - 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00bb, 0x00bb, 0x00bb, - 0x00bb, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, - 0x00c3, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00d4, 0x00db, 0x00db, - 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, - 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, - 0x00db, 0x00db, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00ec, 0x00ec, + 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, + 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, + 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b3, + 0x00b3, 0x00b3, 0x00b3, 0x00bb, 0x00bb, 0x00bb, 0x00bb, 0x00bb, + 0x00bb, 0x00bb, 0x00bb, 0x00c4, 0x00c4, 0x00c4, 0x00c4, 0x00cc, + 0x00d3, 0x00d3, 0x00d3, 0x00d3, 0x00d3, 0x00d3, 0x00d3, 0x00d3, + 0x00d3, 0x00d3, 0x00d3, 0x00d3, 0x00d3, 0x00d3, 0x00d3, 0x00d3, + 0x00d3, 0x00d3, 0x00d3, 0x00d3, 0x00de, 0x00de, 0x00de, 0x00de, // Entry 1C0 - 1FF - 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, - 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00fd, 0x00fd, + 0x00e4, 0x00e4, 0x00e4, 0x00e4, 0x00e4, 0x00e4, 0x00e4, 0x00e4, + 0x00e4, 0x00e4, 0x00e4, 0x00e4, 0x00e4, 0x00e4, 0x00e4, 0x00e4, + 0x00f5, 0x00f5, 0x00f5, 0x00f5, 0x00f5, 0x00f5, 0x00f5, 0x00f5, + 0x00f5, 0x00f5, 0x00f5, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, - 0x00fd, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, - 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, - 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, - 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, - 0x0105, 0x0105, 0x0105, 0x0105, 0x0105, 0x0116, 0x0116, 0x0116, + 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, + 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, + 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x010e, // Entry 200 - 23F - 0x0116, 0x0116, 0x0116, 0x0116, 0x0116, 0x0116, 0x0116, 0x0128, - 0x0128, 0x0128, 0x0128, 0x0128, 0x0128, 0x0128, 0x0130, 0x0130, - 0x0137, 0x0137, 0x0137, 0x0137, 0x0137, 0x0137, 0x0137, 0x0137, - 0x0137, 0x0137, 0x0137, 0x0137, 0x0137, 0x0137, 0x0137, 0x0137, - 0x0137, 0x0137, 0x0137, 0x0137, 0x0137, 0x0137, 0x0137, 0x0137, - 0x0137, 0x0137, 0x0137, 0x0141, 0x0141, 0x0141, 0x0147, 0x0147, - 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, 0x014f, - 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, + 0x010e, 0x010e, 0x010e, 0x010e, 0x010e, 0x010e, 0x010e, 0x010e, + 0x010e, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, + 0x0128, 0x0128, 0x012f, 0x012f, 0x012f, 0x012f, 0x012f, 0x012f, + 0x012f, 0x012f, 0x012f, 0x012f, 0x012f, 0x012f, 0x012f, 0x012f, + 0x012f, 0x012f, 0x012f, 0x012f, 0x012f, 0x012f, 0x012f, 0x012f, + 0x012f, 0x012f, 0x012f, 0x012f, 0x012f, 0x0139, 0x0139, 0x0139, + 0x0139, 0x0139, 0x0139, 0x0139, 0x0139, 0x0139, 0x0139, 0x0139, + 0x0139, 0x0141, 0x0141, 0x0141, 0x0141, 0x0141, 0x0141, 0x0141, // Entry 240 - 27F - 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, - 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, 0x0172, + 0x0141, 0x0141, 0x0141, 0x0141, 0x0141, 0x0141, 0x0141, 0x0141, + 0x0141, 0x0141, 0x0141, 0x0141, 0x0141, 0x0141, 0x0141, 0x0141, + 0x0164, }, }, { // sw-KE - "KitwiKiazabajaniKilimbugishKimasedoniaKiodiaKiwaloonainKiarabu cha Aljer" + - "iaKibuginiKikurdi cha KatiKisorbian cha ChiniKigiriki cha KaleKisorb" + - "ia cha JuuKingushiKilojbaniKikachinKikoyra ChiiniKikakoKikomipermyak" + - "KikurukhKilambaKimokshaKimicmacKimohokiKiingiemboonKiin’koPijini ya " + - "NijeriascoKikoyraboro SenniKiarabu cha ChadiKiscran TongoKicomoroKis" + - "yriaLugha ya Central Atlas TamazightKiudumurtiKirootKiwalserTamazigh" + - "t Sanifu ya MorokoKiarabu cha Sasa Kilichosanifishwa", - []uint16{ // 591 elements + "KitwiKiazabajaniKilimbugishKimasedoniaKiodiaKiwaloonAinuKiarabu cha Alje" + + "riaKibuginiKikurdi cha KatiKisorbian cha ChiniKigiriki cha KaleKisor" + + "bia cha JuuKingushiKilojbaniKikachinKikoyra ChiiniKikakoKikomipermya" + + "kKikurukhKilambaKimokshaKimicmacKimohokiKiingiemboonKiin’koPijini ya" + + " NijeriascoKikoyraboro SenniKiarabu cha ChadiKiscran TongoKicomoroKi" + + "syriaLugha ya Central Atlas TamazightKiudumurtiKiwalserTamazight San" + + "ifu ya MorokoKiarabu cha Sasa Kilichosanifishwa", + []uint16{ // 593 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0010, 0x0010, 0x0010, 0x0010, @@ -13237,64 +13875,65 @@ var langHeaders = [252]header{ 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, - 0x0034, 0x0034, 0x0034, 0x0034, 0x0037, 0x0037, 0x0037, 0x0037, + 0x0034, 0x0034, 0x0034, 0x0034, 0x0038, 0x0038, 0x0038, 0x0038, // Entry C0 - FF - 0x0037, 0x0037, 0x0037, 0x0037, 0x0037, 0x0037, 0x0037, 0x0037, - 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, - 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, - 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, - 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, - 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x0052, 0x0052, 0x0052, - 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, - 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, + 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, + 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, + 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, + 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, + 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x0053, 0x0053, 0x0053, + 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, + 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, // Entry 100 - 13F - 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, - 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0075, - 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, - 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, - 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, - 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, - 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, - 0x0075, 0x0075, 0x0075, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, + 0x0053, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0076, 0x0076, 0x0076, 0x0076, 0x0076, 0x0076, 0x0076, 0x0076, + 0x0076, 0x0076, 0x0076, 0x0076, 0x0076, 0x0076, 0x0076, 0x0076, + 0x0076, 0x0076, 0x0076, 0x0076, 0x0076, 0x0076, 0x0076, 0x0076, + 0x0076, 0x0076, 0x0076, 0x0076, 0x0076, 0x0076, 0x0076, 0x0076, + 0x0076, 0x0076, 0x0076, 0x0076, 0x0076, 0x0076, 0x0076, 0x0076, + 0x0076, 0x0076, 0x0076, 0x0076, 0x0087, 0x0087, 0x0087, 0x0087, // Entry 140 - 17F - 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, 0x0086, - 0x0096, 0x0096, 0x0096, 0x0096, 0x0096, 0x0096, 0x009e, 0x009e, - 0x009e, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00a7, - 0x00a7, 0x00af, 0x00af, 0x00af, 0x00af, 0x00af, 0x00af, 0x00af, - 0x00af, 0x00af, 0x00af, 0x00af, 0x00af, 0x00af, 0x00af, 0x00bd, - 0x00bd, 0x00bd, 0x00c3, 0x00c3, 0x00c3, 0x00d0, 0x00d0, 0x00d0, - 0x00d0, 0x00d0, 0x00d0, 0x00d0, 0x00d0, 0x00d8, 0x00d8, 0x00d8, - 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00df, 0x00df, + 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, + 0x0087, 0x0097, 0x0097, 0x0097, 0x0097, 0x0097, 0x0097, 0x009f, + 0x009f, 0x009f, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, + 0x00a8, 0x00a8, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, + 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, 0x00b0, + 0x00be, 0x00be, 0x00be, 0x00c4, 0x00c4, 0x00c4, 0x00d1, 0x00d1, + 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d9, 0x00d9, + 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00e0, // Entry 180 - 1BF - 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, - 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, - 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, - 0x00df, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, - 0x00e7, 0x00ef, 0x00ef, 0x00ef, 0x00ef, 0x00f7, 0x00f7, 0x00f7, - 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, - 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, - 0x00f7, 0x00f7, 0x0103, 0x0103, 0x0103, 0x0103, 0x010c, 0x010c, + 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, + 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, + 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, + 0x00e0, 0x00e0, 0x00e0, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, + 0x00e8, 0x00e8, 0x00e8, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f8, + 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, + 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, + 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x0104, 0x0104, 0x0104, 0x0104, // Entry 1C0 - 1FF - 0x010c, 0x010c, 0x010c, 0x010c, 0x010c, 0x010c, 0x010c, 0x010c, - 0x010c, 0x010c, 0x010c, 0x010c, 0x010c, 0x010c, 0x011d, 0x011d, - 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, - 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, - 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, - 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, - 0x011d, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, - 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, 0x0142, 0x0142, 0x0142, + 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, + 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, + 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, + 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, + 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, + 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, + 0x011e, 0x011e, 0x011e, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, + 0x0121, 0x0121, 0x0132, 0x0132, 0x0132, 0x0132, 0x0132, 0x0143, // Entry 200 - 23F - 0x0142, 0x0142, 0x0142, 0x0142, 0x0142, 0x0142, 0x0142, 0x014f, - 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, 0x0157, 0x0157, - 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, - 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, - 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, - 0x015e, 0x015e, 0x017e, 0x0188, 0x0188, 0x0188, 0x018e, 0x018e, - 0x018e, 0x018e, 0x018e, 0x018e, 0x018e, 0x018e, 0x018e, 0x0196, - 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, + 0x0143, 0x0143, 0x0143, 0x0143, 0x0143, 0x0143, 0x0143, 0x0143, + 0x0143, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, + 0x0158, 0x0158, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, + 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, + 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, + 0x015f, 0x015f, 0x015f, 0x015f, 0x017f, 0x0189, 0x0189, 0x0189, + 0x0189, 0x0189, 0x0189, 0x0189, 0x0189, 0x0189, 0x0189, 0x0189, + 0x0189, 0x0191, 0x0191, 0x0191, 0x0191, 0x0191, 0x0191, 0x0191, // Entry 240 - 27F - 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, - 0x0196, 0x0196, 0x01b0, 0x01b0, 0x01b0, 0x01b0, 0x01d2, + 0x0191, 0x0191, 0x0191, 0x0191, 0x0191, 0x0191, 0x0191, 0x0191, + 0x0191, 0x0191, 0x0191, 0x0191, 0x01ab, 0x01ab, 0x01ab, 0x01ab, + 0x01cd, }, }, { // ta @@ -13312,7 +13951,7 @@ var langHeaders = [252]header{ "inepaliKiholanziKipunjabiKipolandiKirenoKiromaniaKirusiKinyarwandaKi" + "somaliKiswidiKitamilKitailandiKiturukiKiukraniaKiurduKivietinamuKiyo" + "rubaKichinaKizuluKiteso", - []uint16{ // 533 elements + []uint16{ // 535 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x000e, 0x000e, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x001f, 0x0029, @@ -13388,7 +14027,115 @@ var langHeaders = [252]header{ // Entry 200 - 23F 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, - 0x0169, 0x0169, 0x0169, 0x0169, 0x016f, + 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x0169, 0x016f, + }, + }, + { // tg + "африкаансамҳарӣарабӣассомӣозарбойҷонӣбошқирдӣбелорусӣбулғорӣбинғолӣтибет" + + "ӣбретонӣбосниягӣкаталонӣкорсиканӣчехӣваллӣданиягӣнемисӣдивеҳӣдзонгх" + + "аюнонӣанглисӣэсперантоиспанӣэстонӣбаскӣфорсӣфулаҳфинӣфарерӣфрансузӣ" + + "фризии ғарбӣирландӣшотландии гэлӣгалисиягӣгуаранӣгуҷаротӣҳаусаиброн" + + "ӣҳиндӣхорватӣгаитии креолӣмаҷорӣарманӣҳерероиндонезӣигбоисландӣитал" + + "иявӣинуктитутӣяпонӣгурҷӣқазоқӣкхмерӣканнадакореягӣканурӣкашмирӣкурд" + + "ӣқирғизӣлотинӣлюксембургӣлаосӣлитвонӣлатишӣмалагасӣмаорӣмақдунӣмала" + + "яламӣмуғулӣмаратҳӣмалайӣмалтӣбирманӣнепалӣголландӣнорвегӣнянҷаоксит" + + "анӣоромоодияпанҷобӣлаҳистонӣпуштупортугалӣкечуаретороманӣруминӣрусӣ" + + "киняруандасанскритсиндӣсамии шимолӣсингалӣсловакӣсловенӣсомалӣалбан" + + "ӣсербӣшведӣтамилӣтелугутоҷикӣтайӣтигринятуркманӣтонганӣтуркӣтоторӣӯ" + + "йғурӣукраинӣурдуӯзбекӣвендаветнамӣволофидишйорубахитоӣбалинӣбембасе" + + "буаномарӣчерокӣкурдии марказӣсербии поёнӣфилиппинӣҳавайӣҳилигайнонс" + + "ербии болоӣибибиоконканӣкуруксмендеманипурӣмоҳокниуэӣпапиаментокиче" + + "сахасанталӣсамии ҷанубӣлуле самӣинари самӣсколти самӣсуриёнӣтамазай" + + "ти атласи марказӣзабони номаълумиспанӣ (Америкаи Лотинӣ)хитоии осон" + + "фаҳмхитоии анъанавӣ", + []uint16{ // 615 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0012, 0x0012, 0x001e, 0x001e, + 0x0028, 0x0034, 0x0034, 0x0034, 0x004a, 0x005a, 0x006a, 0x0078, + 0x0078, 0x0078, 0x0086, 0x0092, 0x00a0, 0x00b0, 0x00c0, 0x00c0, + 0x00c0, 0x00d2, 0x00d2, 0x00da, 0x00da, 0x00da, 0x00e4, 0x00f2, + 0x00fe, 0x010a, 0x0118, 0x0118, 0x0122, 0x0130, 0x0142, 0x014e, + 0x015a, 0x0164, 0x016e, 0x0178, 0x0180, 0x0180, 0x018c, 0x019c, + 0x01b3, 0x01c1, 0x01dc, 0x01ee, 0x01fc, 0x020c, 0x020c, 0x0216, + 0x0222, 0x022c, 0x022c, 0x023a, 0x0253, 0x025f, 0x026b, 0x0277, + // Entry 40 - 7F + 0x0277, 0x0287, 0x0287, 0x028f, 0x028f, 0x028f, 0x028f, 0x029d, + 0x02ad, 0x02c1, 0x02cb, 0x02cb, 0x02d5, 0x02d5, 0x02d5, 0x02d5, + 0x02e1, 0x02e1, 0x02ed, 0x02fb, 0x0309, 0x0315, 0x0323, 0x032d, + 0x032d, 0x032d, 0x033b, 0x0347, 0x035d, 0x035d, 0x035d, 0x035d, + 0x0367, 0x0375, 0x0375, 0x0381, 0x0391, 0x0391, 0x039b, 0x03a9, + 0x03bb, 0x03c7, 0x03d5, 0x03e1, 0x03eb, 0x03f9, 0x03f9, 0x03f9, + 0x0405, 0x0405, 0x0415, 0x0415, 0x0423, 0x0423, 0x0423, 0x042d, + 0x043d, 0x043d, 0x0447, 0x044f, 0x044f, 0x045d, 0x045d, 0x046f, + // Entry 80 - BF + 0x0479, 0x048b, 0x0495, 0x04a9, 0x04a9, 0x04b5, 0x04bd, 0x04d1, + 0x04e1, 0x04e1, 0x04eb, 0x0502, 0x0502, 0x0510, 0x051e, 0x052c, + 0x052c, 0x052c, 0x0538, 0x0544, 0x054e, 0x054e, 0x054e, 0x054e, + 0x0558, 0x0558, 0x0564, 0x0570, 0x057c, 0x0584, 0x0592, 0x05a2, + 0x05a2, 0x05b0, 0x05ba, 0x05ba, 0x05c6, 0x05c6, 0x05d2, 0x05e0, + 0x05e8, 0x05f4, 0x05fe, 0x060c, 0x060c, 0x060c, 0x0616, 0x0616, + 0x061e, 0x062a, 0x062a, 0x0634, 0x0634, 0x0634, 0x0634, 0x0634, + 0x0634, 0x0634, 0x0634, 0x0634, 0x0634, 0x0634, 0x0634, 0x0634, + // Entry C0 - FF + 0x0634, 0x0634, 0x0634, 0x0634, 0x0634, 0x0634, 0x0634, 0x0634, + 0x0634, 0x0634, 0x0634, 0x0634, 0x0634, 0x0634, 0x0634, 0x0634, + 0x0634, 0x0634, 0x0634, 0x0640, 0x0640, 0x0640, 0x0640, 0x0640, + 0x0640, 0x0640, 0x064a, 0x064a, 0x064a, 0x064a, 0x064a, 0x064a, + 0x064a, 0x064a, 0x064a, 0x064a, 0x064a, 0x064a, 0x064a, 0x064a, + 0x064a, 0x064a, 0x064a, 0x064a, 0x064a, 0x064a, 0x064a, 0x064a, + 0x064a, 0x064a, 0x064a, 0x064a, 0x064a, 0x064a, 0x0658, 0x0658, + 0x0658, 0x0658, 0x0658, 0x0660, 0x0660, 0x0660, 0x0660, 0x066c, + // Entry 100 - 13F + 0x066c, 0x0687, 0x0687, 0x0687, 0x0687, 0x0687, 0x0687, 0x0687, + 0x0687, 0x0687, 0x0687, 0x0687, 0x0687, 0x0687, 0x0687, 0x0687, + 0x069e, 0x069e, 0x069e, 0x069e, 0x069e, 0x069e, 0x069e, 0x069e, + 0x069e, 0x069e, 0x069e, 0x069e, 0x069e, 0x069e, 0x069e, 0x069e, + 0x069e, 0x069e, 0x06b0, 0x06b0, 0x06b0, 0x06b0, 0x06b0, 0x06b0, + 0x06b0, 0x06b0, 0x06b0, 0x06b0, 0x06b0, 0x06b0, 0x06b0, 0x06b0, + 0x06b0, 0x06b0, 0x06b0, 0x06b0, 0x06b0, 0x06b0, 0x06b0, 0x06b0, + 0x06b0, 0x06b0, 0x06b0, 0x06b0, 0x06b0, 0x06b0, 0x06b0, 0x06b0, + // Entry 140 - 17F + 0x06b0, 0x06b0, 0x06b0, 0x06b0, 0x06bc, 0x06bc, 0x06d0, 0x06d0, + 0x06d0, 0x06e7, 0x06e7, 0x06e7, 0x06e7, 0x06f3, 0x06f3, 0x06f3, + 0x06f3, 0x06f3, 0x06f3, 0x06f3, 0x06f3, 0x06f3, 0x06f3, 0x06f3, + 0x06f3, 0x06f3, 0x06f3, 0x06f3, 0x06f3, 0x06f3, 0x06f3, 0x06f3, + 0x06f3, 0x06f3, 0x06f3, 0x06f3, 0x06f3, 0x06f3, 0x06f3, 0x06f3, + 0x06f3, 0x06f3, 0x06f3, 0x06f3, 0x06f3, 0x06f3, 0x06f3, 0x0701, + 0x0701, 0x0701, 0x0701, 0x0701, 0x0701, 0x0701, 0x070d, 0x070d, + 0x070d, 0x070d, 0x070d, 0x070d, 0x070d, 0x070d, 0x070d, 0x070d, + // Entry 180 - 1BF + 0x070d, 0x070d, 0x070d, 0x070d, 0x070d, 0x070d, 0x070d, 0x070d, + 0x070d, 0x070d, 0x070d, 0x070d, 0x070d, 0x070d, 0x070d, 0x070d, + 0x070d, 0x070d, 0x070d, 0x070d, 0x070d, 0x070d, 0x070d, 0x070d, + 0x070d, 0x070d, 0x070d, 0x070d, 0x070d, 0x0717, 0x0717, 0x0717, + 0x0717, 0x0717, 0x0717, 0x0717, 0x0717, 0x0717, 0x0727, 0x0731, + 0x0731, 0x0731, 0x0731, 0x0731, 0x0731, 0x0731, 0x0731, 0x0731, + 0x0731, 0x0731, 0x0731, 0x0731, 0x0731, 0x0731, 0x0731, 0x0731, + 0x0731, 0x073b, 0x073b, 0x073b, 0x073b, 0x073b, 0x073b, 0x073b, + // Entry 1C0 - 1FF + 0x073b, 0x073b, 0x073b, 0x073b, 0x073b, 0x073b, 0x073b, 0x073b, + 0x073b, 0x073b, 0x073b, 0x073b, 0x073b, 0x074f, 0x074f, 0x074f, + 0x074f, 0x074f, 0x074f, 0x074f, 0x074f, 0x074f, 0x074f, 0x074f, + 0x074f, 0x074f, 0x074f, 0x0757, 0x0757, 0x0757, 0x0757, 0x0757, + 0x0757, 0x0757, 0x0757, 0x0757, 0x0757, 0x0757, 0x0757, 0x0757, + 0x0757, 0x0757, 0x075f, 0x075f, 0x075f, 0x075f, 0x076d, 0x076d, + 0x076d, 0x076d, 0x076d, 0x076d, 0x076d, 0x076d, 0x076d, 0x076d, + 0x076d, 0x076d, 0x076d, 0x076d, 0x076d, 0x076d, 0x076d, 0x076d, + // Entry 200 - 23F + 0x076d, 0x076d, 0x076d, 0x0784, 0x0795, 0x07a8, 0x07bd, 0x07bd, + 0x07bd, 0x07bd, 0x07bd, 0x07bd, 0x07bd, 0x07bd, 0x07bd, 0x07bd, + 0x07bd, 0x07bd, 0x07cb, 0x07cb, 0x07cb, 0x07cb, 0x07cb, 0x07cb, + 0x07cb, 0x07cb, 0x07cb, 0x07cb, 0x07cb, 0x07cb, 0x07cb, 0x07cb, + 0x07cb, 0x07cb, 0x07cb, 0x07cb, 0x07cb, 0x07cb, 0x07cb, 0x07cb, + 0x07cb, 0x07cb, 0x07cb, 0x07cb, 0x07f9, 0x07f9, 0x07f9, 0x07f9, + 0x0816, 0x0816, 0x0816, 0x0816, 0x0816, 0x0816, 0x0816, 0x0816, + 0x0816, 0x0816, 0x0816, 0x0816, 0x0816, 0x0816, 0x0816, 0x0816, + // Entry 240 - 27F + 0x0816, 0x0816, 0x0816, 0x0816, 0x0816, 0x0816, 0x0816, 0x0816, + 0x0816, 0x0816, 0x0816, 0x0816, 0x0816, 0x0816, 0x0816, 0x0816, + 0x0816, 0x0816, 0x0816, 0x0816, 0x0816, 0x0816, 0x0816, 0x0816, + 0x0842, 0x0842, 0x0842, 0x0842, 0x0842, 0x0842, 0x0842, 0x0842, + 0x0842, 0x0842, 0x0842, 0x0842, 0x0842, 0x085f, 0x087c, }, }, { // th @@ -13404,7 +14151,7 @@ var langHeaders = [252]header{ "ኛሰርቢኛሰሴቶሱዳንኛስዊድንኛሰዋሂሊኛታሚልኛተሉጉኛታይኛትግርኛናይ ቱርኪ ሰብዓይ (ቱርካዊ)ቱርከኛዩክረኒኛኡር" + "ዱኛኡዝበክኛቪትናምኛዞሳኛዪዲሽዙሉኛታጋሎገኛክሊንግኦንኛፖርቱጋልኛ (ናይ ብራዚል)ፖርቱጋልኛ (ናይ ፖርቱጋል)" + "ሰርቦ- ክሮዊታን", - []uint16{ // 610 elements + []uint16{ // 612 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x001b, 0x002a, 0x002a, 0x0036, 0x0036, 0x0036, 0x0036, 0x004e, 0x004e, 0x005d, 0x006c, @@ -13446,7 +14193,7 @@ var langHeaders = [252]header{ 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, 0x04e5, - 0x04e5, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, + 0x04e5, 0x04e5, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, @@ -13481,7 +14228,7 @@ var langHeaders = [252]header{ 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, - 0x04f4, 0x04f4, 0x04f4, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, + 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x04f4, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, @@ -13490,8 +14237,165 @@ var langHeaders = [252]header{ 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, - 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0531, 0x055c, - 0x055c, 0x0576, + 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, + 0x0531, 0x055c, 0x055c, 0x0576, + }, + }, + { // tk + "Afar diliAbhaz diliAfrikaans diliAkan diliAmhar diliAragon diliArap dili" + + "Assam diliAwar diliAýmara diliAzerbaýjan diliBaşgyrt diliBelarus dil" + + "iBolgar diliBislama diliBamanaBengal diliTibet diliBreton diliBoşnak" + + " diliKatalan diliÇeçen diliÇamorroKorsikan diliÇeh diliButhana slaw " + + "diliÇuwaş diliWalliý diliDaniýa diliNemes diliDiwehi diliDzong-ke di" + + "liEwe diliGrek diliIňlis diliEsperanto diliIspan diliEston diliBask " + + "diliPars diliFula diliFin diliFiji diliFarer diliFransuz diliGünbata" + + "r friz diliIrland diliŞotland kelt diliGalisiý diliGuarani diliGujar" + + "ati diliMen diliHausa diliÝewreý diliHindi diliHorwat diliGaiti kreo" + + "l diliWenger diliErmeni diliGerero diliInterlingwa diliIndonez diliI" + + "gbo diliSyçuan-i diliIdo diliIsland diliItalýan diliInuktitut diliÝa" + + "pon diliÝawa diliGruzin diliKikuýu diliKwanýama diliGazak diliGrenla" + + "nd diliKhmer diliKannada diliKoreý diliKanuriKaşmiri diliKürt diliKo" + + "mi diliKorn diliGyrgyz diliLatyn diliLýuksemburg diliGanda diliLimbu" + + "rg diliLingala diliLaos diliLitwa diliLuba-Katanga diliLatyş diliMal" + + "agasiý diliMarşall diliMaori diliMakedon diliMalaýalam diliMongol di" + + "liMarathi diliMalaý diliMalta diliBirma diliNauru diliDemirgazyk nde" + + "bele diliNepal diliNdonga diliNiderland diliNorwegiýa nýunorsk diliN" + + "orwegiýa bukmol diliGünorta ndebele diliNawaho diliNýanja diliOksita" + + "n diliOromo diliOriýa diliOsetin diliPenjab diliPolýak diliPeştun di" + + "liPortugal diliKeçua diliRetoroman diliRundi diliRumyn diliRus diliK" + + "inýaruanda diliSanskrit diliSardin diliSindhi diliDemirgazyk saam di" + + "liSango diliSingal diliSlowak diliSlowen diliSamoa diliŞona diliSoma" + + "li diliAlban diliSerb diliSwati diliGünorta Soto diliSundan diliŞwed" + + " diliSuahili diliTamil diliTelugu diliTäjik diliTaý diliTigrinýa dil" + + "iTürkmen diliTswana diliTongan diliTürk diliTsonga diliTatar diliTai" + + "ti diliUýgur diliUkrain diliUrduÖzbek diliWenda diliWýetnam diliWola" + + "pýuk diliWallon diliWolof diliKosa diliIdiş diliÝoruba diliHytaý dil" + + "iZulu diliAçeh diliAdangme diliAdygeý diliAhem diliAýn diliAleut dil" + + "iGünorta Altaý diliAngika diliMapuçe diliArapaho diliAsu diliAsturiý" + + " diliAwadhi diliBaliý diliBasaa diliBemba diliBena diliBhojpuri dili" + + "Bini diliSiksika diliBodo diliBugiý diliBlin diliSebuan diliKigaÇuuk" + + " diliMariý diliÇoktoÇerokiŞaýenn diliMerkezi kürt diliSeselwa kreole" + + "-fransuz diliDakota diliDargi diliTaita diliDogrib diliZarma diliAşa" + + "ky lužits diliDuala diliÝola-Fonyi diliDaza diliEmbu diliEfik diliEk" + + "ajuk diliEwondo diliFilippin diliFon diliFriul diliGa diliGeez diliG" + + "ilbert diliGorontalo diliNemes dili (Şweýsariýa)Gusii diliGwiçin dil" + + "iGawaý diliHiligaýnon diliHmong diliÝokarky lužits diliHupaIban dili" + + "Ibibio diliIloko diliInguş diliLojban diliNgomba diliMaçame diliKabi" + + "l diliKaçin diliJu diliKamba diliKabardin diliTiap diliMakonde diliK" + + "abuwerdianu diliKoro diliKhasi diliKoýra-Çini diliKako diliKalenjin " + + "diliKimbundu diliKonkani diliKpelle diliKaraçaý-balkar diliKarel dil" + + "iKuruh diliŞambala diliBafia diliKeln diliKumyk diliLadino diliLangi" + + " diliLezgin diliLakota diliLozi diliDemirgazyk luri diliLuba-Lulua d" + + "iliLunda diliLuo diliMizo diliLuýýa diliMadur diliMagahi diliMaýthil" + + "i diliMakasar diliMasai diliMokşa diliMende diliMeru diliMorisýen di" + + "liMakua-Mitto diliMeta diliMikmak diliMinangkabau diliManipuri diliM" + + "ogauk diliMossi diliMundang diliBirnäçe dilKrik diliMirand diliErzýa" + + "n diliMazanderan diliNeapolitan diliNama diliNewari diliNias diliNiu" + + "e diliKwasio diliNgembun diliNogaý diliNko diliDemirgazyk soto diliN" + + "uer diliNýankole diliPangansinan diliKapampangan diliPapýamento dili" + + "Palau diliNigeriý-pijin diliPrussiýa diliKiçe diliRapanuý diliKuk di" + + "liRombo diliAromun diliRwa diliSandawe diliÝakut diliSamburu diliSan" + + "tali diliNgambaý diliSangu diliSisiliýa diliŞotland diliSena diliKoý" + + "raboro-Senni diliTahelhit diliŞan diliGünorta saam diliLule-saam dil" + + "iInari-saam diliSkolt-saam diliSoninke diliSranan-tongo diliSaho dil" + + "iSukuma diliKomor diliSiriýa diliTemne diliTeso diliTetum diliTigre " + + "diliKlingon diliTok-pisin diliTaroko diliTumbuka diliTuwalu diliTasa" + + "wak diliTuwa diliOrta-Atlas tamazight diliUdmurt diliUmbundu diliNäb" + + "elli dilWai diliWunýo diliWalzer diliWolaýta diliWaraý diliGalmyk di" + + "liSoga diliÝangben diliÝemba diliKanton diliStandart Marokko tamazig" + + "ht diliZuni diliDilçilige degişli mazmun ýokZazaki diliHäzirki zaman" + + " standart arap diliNemes dili (Daglyk Şweýsariýa)Iňlis dili (Beýik B" + + "ritaniýa)Iňlis dili (Amerika)Ispan dili (Günorta Amerika)Ispan dili " + + "(Ýewropa)Flamand diliPortugal dili (Ýewropa)Moldaw diliKongo suahili" + + " diliÝönekeýleşdirilen hytaý diliAdaty hytaý dili", + []uint16{ // 615 elements + // Entry 0 - 3F + 0x0000, 0x0009, 0x0013, 0x0013, 0x0021, 0x002a, 0x0034, 0x003f, + 0x0048, 0x0052, 0x005b, 0x0067, 0x0077, 0x0084, 0x0090, 0x009b, + 0x00a7, 0x00ad, 0x00b8, 0x00c2, 0x00cd, 0x00d9, 0x00e5, 0x00f1, + 0x00f9, 0x0106, 0x0106, 0x010f, 0x0120, 0x012c, 0x0138, 0x0144, + 0x014e, 0x0159, 0x0166, 0x016e, 0x0177, 0x0182, 0x0190, 0x019a, + 0x01a4, 0x01ad, 0x01b6, 0x01bf, 0x01c7, 0x01d0, 0x01da, 0x01e6, + 0x01f9, 0x0204, 0x0216, 0x0223, 0x022f, 0x023c, 0x0244, 0x024e, + 0x025b, 0x0265, 0x0265, 0x0270, 0x0280, 0x028b, 0x0296, 0x02a1, + // Entry 40 - 7F + 0x02b1, 0x02bd, 0x02bd, 0x02c6, 0x02d4, 0x02d4, 0x02dc, 0x02e7, + 0x02f4, 0x0302, 0x030d, 0x0317, 0x0322, 0x0322, 0x032e, 0x033c, + 0x0346, 0x0353, 0x035d, 0x0369, 0x0374, 0x037a, 0x0387, 0x0391, + 0x039a, 0x03a3, 0x03ae, 0x03b8, 0x03c9, 0x03d3, 0x03df, 0x03eb, + 0x03f4, 0x03fe, 0x040f, 0x041a, 0x0429, 0x0436, 0x0440, 0x044c, + 0x045b, 0x0466, 0x0472, 0x047d, 0x0487, 0x0491, 0x049b, 0x04b2, + 0x04bc, 0x04c7, 0x04d5, 0x04ee, 0x0504, 0x0519, 0x0524, 0x0530, + 0x053c, 0x053c, 0x0546, 0x0551, 0x055c, 0x0567, 0x0567, 0x0573, + // Entry 80 - BF + 0x057f, 0x058c, 0x0597, 0x05a5, 0x05af, 0x05b9, 0x05c1, 0x05d2, + 0x05df, 0x05ea, 0x05f5, 0x0609, 0x0613, 0x061e, 0x0629, 0x0634, + 0x063e, 0x0648, 0x0653, 0x065d, 0x0666, 0x0670, 0x0682, 0x068d, + 0x0697, 0x06a3, 0x06ad, 0x06b8, 0x06c3, 0x06cc, 0x06da, 0x06e7, + 0x06f2, 0x06fd, 0x0707, 0x0712, 0x071c, 0x0726, 0x0731, 0x073c, + 0x0740, 0x074b, 0x0755, 0x0762, 0x0770, 0x077b, 0x0785, 0x078e, + 0x0798, 0x07a4, 0x07a4, 0x07af, 0x07b8, 0x07c2, 0x07c2, 0x07ce, + 0x07da, 0x07da, 0x07da, 0x07e3, 0x07ec, 0x07ec, 0x07ec, 0x07f6, + // Entry C0 - FF + 0x07f6, 0x080a, 0x080a, 0x0815, 0x0815, 0x0821, 0x0821, 0x082d, + 0x082d, 0x082d, 0x082d, 0x082d, 0x082d, 0x0835, 0x0835, 0x0842, + 0x0842, 0x084d, 0x084d, 0x0858, 0x0858, 0x0862, 0x0862, 0x0862, + 0x0862, 0x0862, 0x086c, 0x086c, 0x0875, 0x0875, 0x0875, 0x0875, + 0x0882, 0x0882, 0x088b, 0x088b, 0x088b, 0x0897, 0x0897, 0x0897, + 0x0897, 0x0897, 0x08a0, 0x08a0, 0x08a0, 0x08ab, 0x08ab, 0x08b4, + 0x08b4, 0x08b4, 0x08b4, 0x08b4, 0x08b4, 0x08b4, 0x08bf, 0x08c3, + 0x08c3, 0x08c3, 0x08cd, 0x08d8, 0x08d8, 0x08de, 0x08de, 0x08e5, + // Entry 100 - 13F + 0x08f2, 0x0904, 0x0904, 0x0904, 0x0904, 0x091f, 0x091f, 0x092a, + 0x0934, 0x093e, 0x093e, 0x093e, 0x0949, 0x0949, 0x0953, 0x0953, + 0x0966, 0x0966, 0x0970, 0x0970, 0x0980, 0x0980, 0x0989, 0x0992, + 0x099b, 0x099b, 0x099b, 0x09a6, 0x09a6, 0x09a6, 0x09a6, 0x09b1, + 0x09b1, 0x09b1, 0x09be, 0x09be, 0x09c6, 0x09c6, 0x09c6, 0x09c6, + 0x09c6, 0x09c6, 0x09c6, 0x09d0, 0x09d7, 0x09d7, 0x09d7, 0x09d7, + 0x09d7, 0x09d7, 0x09e0, 0x09ec, 0x09ec, 0x09ec, 0x09ec, 0x09ec, + 0x09ec, 0x09fa, 0x09fa, 0x09fa, 0x09fa, 0x0a14, 0x0a14, 0x0a14, + // Entry 140 - 17F + 0x0a1e, 0x0a2a, 0x0a2a, 0x0a2a, 0x0a35, 0x0a35, 0x0a45, 0x0a45, + 0x0a4f, 0x0a64, 0x0a64, 0x0a68, 0x0a71, 0x0a7c, 0x0a86, 0x0a91, + 0x0a91, 0x0a91, 0x0a9c, 0x0aa7, 0x0ab3, 0x0ab3, 0x0ab3, 0x0ab3, + 0x0ab3, 0x0abd, 0x0ac8, 0x0acf, 0x0ad9, 0x0ad9, 0x0ae6, 0x0ae6, + 0x0aef, 0x0afb, 0x0b0c, 0x0b0c, 0x0b15, 0x0b15, 0x0b1f, 0x0b1f, + 0x0b30, 0x0b30, 0x0b30, 0x0b39, 0x0b46, 0x0b53, 0x0b53, 0x0b5f, + 0x0b5f, 0x0b6a, 0x0b7f, 0x0b7f, 0x0b7f, 0x0b89, 0x0b93, 0x0ba0, + 0x0baa, 0x0bb3, 0x0bbd, 0x0bbd, 0x0bc8, 0x0bd2, 0x0bd2, 0x0bd2, + // Entry 180 - 1BF + 0x0bdd, 0x0bdd, 0x0bdd, 0x0bdd, 0x0be8, 0x0be8, 0x0be8, 0x0be8, + 0x0bf1, 0x0c05, 0x0c05, 0x0c14, 0x0c14, 0x0c1e, 0x0c26, 0x0c2f, + 0x0c3b, 0x0c3b, 0x0c3b, 0x0c45, 0x0c45, 0x0c50, 0x0c5e, 0x0c6a, + 0x0c6a, 0x0c74, 0x0c74, 0x0c7f, 0x0c7f, 0x0c89, 0x0c92, 0x0ca0, + 0x0ca0, 0x0cb0, 0x0cb9, 0x0cc4, 0x0cd4, 0x0cd4, 0x0ce1, 0x0cec, + 0x0cf6, 0x0cf6, 0x0d02, 0x0d0f, 0x0d18, 0x0d23, 0x0d23, 0x0d23, + 0x0d23, 0x0d2f, 0x0d3e, 0x0d3e, 0x0d4d, 0x0d56, 0x0d56, 0x0d61, + 0x0d6a, 0x0d73, 0x0d73, 0x0d7e, 0x0d8a, 0x0d95, 0x0d95, 0x0d95, + // Entry 1C0 - 1FF + 0x0d9d, 0x0db1, 0x0dba, 0x0dba, 0x0dba, 0x0dc8, 0x0dc8, 0x0dc8, + 0x0dc8, 0x0dc8, 0x0dd8, 0x0dd8, 0x0de8, 0x0df8, 0x0e02, 0x0e02, + 0x0e15, 0x0e15, 0x0e15, 0x0e15, 0x0e15, 0x0e15, 0x0e15, 0x0e15, + 0x0e15, 0x0e23, 0x0e23, 0x0e2d, 0x0e2d, 0x0e2d, 0x0e3a, 0x0e42, + 0x0e42, 0x0e42, 0x0e4c, 0x0e4c, 0x0e4c, 0x0e4c, 0x0e4c, 0x0e57, + 0x0e5f, 0x0e6b, 0x0e76, 0x0e76, 0x0e82, 0x0e82, 0x0e8e, 0x0e8e, + 0x0e9b, 0x0ea5, 0x0eb3, 0x0ec0, 0x0ec0, 0x0ec0, 0x0ec0, 0x0ec9, + 0x0ec9, 0x0ec9, 0x0ede, 0x0ede, 0x0ede, 0x0eeb, 0x0ef4, 0x0ef4, + // Entry 200 - 23F + 0x0ef4, 0x0ef4, 0x0ef4, 0x0f06, 0x0f14, 0x0f23, 0x0f32, 0x0f3e, + 0x0f3e, 0x0f4f, 0x0f4f, 0x0f58, 0x0f58, 0x0f63, 0x0f63, 0x0f63, + 0x0f6d, 0x0f6d, 0x0f79, 0x0f79, 0x0f79, 0x0f83, 0x0f8c, 0x0f8c, + 0x0f96, 0x0fa0, 0x0fa0, 0x0fa0, 0x0fa0, 0x0fac, 0x0fac, 0x0fac, + 0x0fac, 0x0fac, 0x0fba, 0x0fba, 0x0fc5, 0x0fc5, 0x0fc5, 0x0fc5, + 0x0fd1, 0x0fdc, 0x0fe8, 0x0ff1, 0x100a, 0x1015, 0x1015, 0x1021, + 0x102d, 0x1035, 0x1035, 0x1035, 0x1035, 0x1035, 0x1035, 0x1035, + 0x1040, 0x104b, 0x1058, 0x1063, 0x1063, 0x1063, 0x1063, 0x106e, + // Entry 240 - 27F + 0x106e, 0x1077, 0x1077, 0x1077, 0x1084, 0x108f, 0x108f, 0x109a, + 0x109a, 0x109a, 0x109a, 0x109a, 0x10b9, 0x10c2, 0x10e1, 0x10ec, + 0x110d, 0x110d, 0x110d, 0x112e, 0x112e, 0x112e, 0x114d, 0x1162, + 0x117f, 0x1194, 0x1194, 0x1194, 0x1194, 0x1194, 0x1194, 0x11a0, + 0x11a0, 0x11b8, 0x11c3, 0x11c3, 0x11d5, 0x11f6, 0x1207, }, }, { // to @@ -13499,14 +14403,14 @@ var langHeaders = [252]header{ "akaʻakanilea fakaʻamelikilea fakaʻalakonilea fakaʻalepealea fakaʻasa" + "mialea fakaʻavalikilea fakaʻaimalalea fakaʻasapaisanilea fakapasikil" + "ilea fakapelalusilea fakapulukalialea fakapisilamalea fakapamipalale" + - "a fakapengikalilea fakatipetilea fakapeletonilea fakaposinialea faka" + - "katalanilea fakaseselea fakakamololea fakakōsikalea fakakelīlea faka" + - "sekilea fakasilavia-fakasiasilea fakasuvasalea fakauēlesilea fakaten" + - "imaʻakelea fakasiamanelea fakativehilea fakatisōngikalea fakaʻeuelea" + - " fakakalisilea fakapālangilea fakaʻesipulanitolea fakasipēnisilea fa" + - "kaʻesitōnialea fakapāsikilea fakapēsialea fakafulālea fakafinilanile" + - "a fakafisilea fakafaloelea fakafalanisēlea fakafilisia-hihifolea fak" + - "aʻaelanilea fakakaelikilea fakakalisialea fakakualanilea fakakutalat" + + "a fakapāngilālea fakatipetilea fakapeletonilea fakaposinialea fakaka" + + "talanilea fakaseselea fakakamololea fakakōsikalea fakakelīlea fakase" + + "kilea fakasilavia-fakasiasilea fakasuvasalea fakauēlesilea fakatenim" + + "aʻakelea fakasiamanelea fakativehilea fakatisōngikalea fakaʻeuelea f" + + "akakalisilea fakapālangilea fakaʻesipulanitolea fakasipēnisilea faka" + + "ʻesitōnialea fakapāsikilea fakapēsialea fakafulālea fakafinilanilea" + + " fakafisilea fakafaloelea fakafalanisēlea fakafilisia-hihifolea faka" + + "ʻaelanilea fakakaelikilea fakakalisialea fakakualanilea fakakutalat" + "ilea fakamangikīlea fakahausalea fakahepelūlea fakahinitīlea fakahil" + "i-motulea fakakuloisialea fakahaitilea fakahungakalialea fakaʻāmenia" + "lea fakahelelolea fakavahaʻalealea fakaʻinitōnesialea fakavahaʻaling" + @@ -13626,23 +14530,23 @@ var langHeaders = [252]header{ "olea fakatalokolea fakasakōnialea fakatisīmisianilea fakatati-mosele" + "milea fakatumepukalea fakatūvalulea fakatasauakilea fakatuvīnialea f" + "akatamasaiti-ʻatilasi-lolotolea fakaʻutimulitilea fakaʻūkalitilea fa" + - "kaʻumipūnitulea fakaʻilonga-tefitolea fakavailea fakavenēsialea faka" + - "vepisilea fakavelamingi-hihifolea fakafalanikoni-lolotolea fakavotik" + - "ilea fakavōlolea fakavūnisolea fakaʻualiselilea fakaʻuolaitalea faka" + - "ʻualailea fakaʻuasiōlea fakaʻuālipililea fakasiaina-uūlea fakakalim" + - "ikilea fakamingilelialea fakasokalea fakaʻiaolea fakaʻiapilea fakaʻi" + - "angipenilea fakaʻiēmipalea fakaneʻēngatūlea fakakuangitongilea fakas" + - "apotekilea fakaʻilonga-pilisilea fakasēlanilea fakasenakalea fakatam" + - "asaiti-molokolea fakasuniʻikai ha lealea fakasāsālea fakaʻalepea (mā" + - "mani)lea fakasiamane-ʻaositulialea fakasiamane-hake-suisilanilea fak" + - "apālangi-ʻaositelēlialea fakapālangi-kānatalea fakapilitānialea faka" + - "pālangi-ʻamelikalea fakasipēnisi lātini-ʻamelikalea fakasipēnisi-‘iu" + - "lopelea fakasipēnisi-mekisikoulea fakafalanisē-kānatalea fakafalanis" + - "ē-suisilanilea fakasakisoni-hifolea fakahōlani-pelesiumelea fakapot" + - "ukali-palāsililea fakapotukali-ʻiulopelea fakamolitāvialea fakakuloi" + - "sia-sēpialea fakasuahili-kongikōlea fakasiaina-fakafaingofualea faka" + - "siaina-tukufakaholo", - []uint16{ // 613 elements + "kaʻumipūnitulea taʻeʻiloalea fakavailea fakavenēsialea fakavepisilea" + + " fakavelamingi-hihifolea fakafalanikoni-lolotolea fakavotikilea faka" + + "vōlolea fakavūnisolea fakaʻualiselilea fakaʻuolaitalea fakaʻualailea" + + " fakaʻuasiōlea fakaʻuālipililea fakasiaina-uūlea fakakalimikilea fak" + + "amingilelialea fakasokalea fakaʻiaolea fakaʻiapilea fakaʻiangipenile" + + "a fakaʻiēmipalea fakaneʻēngatūlea fakakuangitongilea fakasapotekilea" + + " fakaʻilonga-pilisilea fakasēlanilea fakasenakalea fakatamasaiti-mol" + + "okolea fakasuniʻikai ha lealea fakasāsālea fakaʻalepea (māmani)lea f" + + "akasiamane-ʻaositulialea fakasiamane-hake-suisilanilea fakapālangi-ʻ" + + "aositelēlialea fakapālangi-kānatalea fakapilitānialea fakapālangi-ʻa" + + "melikalea fakasipēnisi lātini-ʻamelikalea fakasipēnisi-‘iulopelea fa" + + "kasipēnisi-mekisikoulea fakafalanisē-kānatalea fakafalanisē-suisilan" + + "ilea fakasakisoni-hifolea fakahōlani-pelesiumelea fakapotukali-palās" + + "ililea fakapotukali-ʻiulopelea fakamolitāvialea fakakuloisia-sēpiale" + + "a fakasuahili-kongikōlea fakasiaina-fakafaingofualea fakasiaina-tuku" + + "fakaholo", + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0010, 0x0022, 0x0035, 0x0048, 0x0057, 0x0068, 0x0079, 0x0089, 0x0099, 0x00aa, 0x00ba, 0x00ce, 0x00de, 0x00ee, 0x00ff, @@ -13677,65 +14581,172 @@ var langHeaders = [252]header{ 0x0dc8, 0x0dd4, 0x0de3, 0x0df1, 0x0dfd, 0x0e0b, 0x0e19, 0x0e2e, 0x0e3e, 0x0e4c, 0x0e58, 0x0e68, 0x0e74, 0x0e85, 0x0e98, 0x0eaa, 0x0eb7, 0x0ec6, 0x0ed3, 0x0ee3, 0x0ef2, 0x0f00, 0x0f0c, 0x0f1a, - 0x0f2b, 0x0f37, 0x0f45, 0x0f53, 0x0f64, 0x0f73, 0x0f7f, 0x0f8e, - 0x0f9e, 0x0fab, 0x0fb8, 0x0fcd, 0x0fdc, 0x0fed, 0x0ffc, 0x100a, - // Entry 100 - 13F - 0x1020, 0x1030, 0x1040, 0x1055, 0x106e, 0x107e, 0x108c, 0x109c, - 0x10a9, 0x10b9, 0x10c7, 0x10d8, 0x10e8, 0x10f7, 0x1105, 0x1118, - 0x112d, 0x113a, 0x1152, 0x1164, 0x1171, 0x117f, 0x118f, 0x119e, - 0x11ae, 0x11c4, 0x11d5, 0x11e6, 0x11ff, 0x1215, 0x1227, 0x123e, - 0x124b, 0x125c, 0x1276, 0x1284, 0x129c, 0x12b6, 0x12cf, 0x12e1, - 0x12f8, 0x130e, 0x131f, 0x132a, 0x1339, 0x134c, 0x1358, 0x1366, - 0x137f, 0x138e, 0x139e, 0x13ac, 0x13c9, 0x13e5, 0x13fc, 0x140b, - 0x141d, 0x142b, 0x1438, 0x144b, 0x1464, 0x1473, 0x1483, 0x1490, + 0x0f2b, 0x0f37, 0x0f45, 0x0f53, 0x0f64, 0x0f64, 0x0f73, 0x0f7f, + 0x0f8e, 0x0f9e, 0x0fab, 0x0fb8, 0x0fcd, 0x0fdc, 0x0fed, 0x0ffc, + // Entry 100 - 13F + 0x100a, 0x1020, 0x1030, 0x1040, 0x1055, 0x106e, 0x107e, 0x108c, + 0x109c, 0x10a9, 0x10b9, 0x10c7, 0x10d8, 0x10e8, 0x10f7, 0x1105, + 0x1118, 0x112d, 0x113a, 0x1152, 0x1164, 0x1171, 0x117f, 0x118f, + 0x119e, 0x11ae, 0x11c4, 0x11d5, 0x11e6, 0x11ff, 0x1215, 0x1227, + 0x123e, 0x124b, 0x125c, 0x1276, 0x1284, 0x129c, 0x12b6, 0x12cf, + 0x12e1, 0x12f8, 0x130e, 0x131f, 0x132a, 0x1339, 0x134c, 0x1358, + 0x1366, 0x137f, 0x138e, 0x139e, 0x13ac, 0x13c9, 0x13e5, 0x13fc, + 0x140b, 0x141d, 0x142b, 0x1438, 0x144b, 0x1464, 0x1473, 0x1483, // Entry 140 - 17F - 0x14a1, 0x14ae, 0x14c1, 0x14d1, 0x14e5, 0x14f8, 0x1506, 0x1514, - 0x1527, 0x153c, 0x1548, 0x1557, 0x1567, 0x1576, 0x1586, 0x1599, - 0x15b1, 0x15c1, 0x15d2, 0x15e0, 0x15f6, 0x160e, 0x1620, 0x1635, - 0x1643, 0x1651, 0x165e, 0x166c, 0x1678, 0x168a, 0x169b, 0x16a8, - 0x16b9, 0x16ce, 0x16de, 0x16ea, 0x16fb, 0x1708, 0x1717, 0x172a, - 0x1738, 0x174d, 0x1759, 0x176b, 0x177e, 0x1794, 0x17a5, 0x17b4, - 0x17c2, 0x17d9, 0x17e6, 0x17f7, 0x1806, 0x1814, 0x1825, 0x1832, - 0x1842, 0x1850, 0x185f, 0x186d, 0x187a, 0x1889, 0x1898, 0x18a7, + 0x1490, 0x14a1, 0x14ae, 0x14c1, 0x14d1, 0x14e5, 0x14f8, 0x1506, + 0x1514, 0x1527, 0x153c, 0x1548, 0x1557, 0x1567, 0x1576, 0x1586, + 0x1599, 0x15b1, 0x15c1, 0x15d2, 0x15e0, 0x15f6, 0x160e, 0x1620, + 0x1635, 0x1643, 0x1651, 0x165e, 0x166c, 0x1678, 0x168a, 0x169b, + 0x16a8, 0x16b9, 0x16ce, 0x16de, 0x16ea, 0x16fb, 0x1708, 0x1717, + 0x172a, 0x1738, 0x174d, 0x1759, 0x176b, 0x177e, 0x1794, 0x17a5, + 0x17b4, 0x17c2, 0x17d9, 0x17e6, 0x17f7, 0x1806, 0x1814, 0x1825, + 0x1832, 0x1842, 0x1850, 0x185f, 0x186d, 0x187a, 0x1889, 0x1898, // Entry 180 - 1BF - 0x18be, 0x18cd, 0x18dc, 0x18ea, 0x18fb, 0x190b, 0x1917, 0x192b, - 0x193b, 0x194d, 0x195c, 0x196b, 0x1976, 0x1982, 0x198f, 0x19a7, - 0x19b3, 0x19c1, 0x19cd, 0x19db, 0x19ea, 0x19fa, 0x1a0e, 0x1a1b, - 0x1a27, 0x1a37, 0x1a47, 0x1a56, 0x1a62, 0x1a73, 0x1a8c, 0x1aa2, - 0x1aaf, 0x1abf, 0x1ad3, 0x1ae2, 0x1af2, 0x1b01, 0x1b0d, 0x1b20, - 0x1b31, 0x1b3b, 0x1b49, 0x1b5c, 0x1b6c, 0x1b7d, 0x1b8a, 0x1b9a, - 0x1bae, 0x1bc5, 0x1bd7, 0x1be3, 0x1bf7, 0x1c05, 0x1c12, 0x1c1f, - 0x1c2f, 0x1c3d, 0x1c50, 0x1c5d, 0x1c73, 0x1c82, 0x1c8f, 0x1ca3, + 0x18a7, 0x18be, 0x18cd, 0x18dc, 0x18ea, 0x18fb, 0x190b, 0x190b, + 0x1917, 0x192b, 0x193b, 0x194d, 0x195c, 0x196b, 0x1976, 0x1982, + 0x198f, 0x19a7, 0x19b3, 0x19c1, 0x19cd, 0x19db, 0x19ea, 0x19fa, + 0x1a0e, 0x1a1b, 0x1a27, 0x1a37, 0x1a47, 0x1a56, 0x1a62, 0x1a73, + 0x1a8c, 0x1aa2, 0x1aaf, 0x1abf, 0x1ad3, 0x1ae2, 0x1af2, 0x1b01, + 0x1b0d, 0x1b20, 0x1b31, 0x1b3b, 0x1b49, 0x1b5c, 0x1b6c, 0x1b7d, + 0x1b8a, 0x1b9a, 0x1bae, 0x1bc5, 0x1bd7, 0x1be3, 0x1bf7, 0x1c05, + 0x1c12, 0x1c1f, 0x1c2f, 0x1c3d, 0x1c50, 0x1c5d, 0x1c73, 0x1c82, // Entry 1C0 - 1FF - 0x1cb0, 0x1cc6, 0x1cd7, 0x1ce8, 0x1cf5, 0x1d03, 0x1d13, 0x1d2a, - 0x1d3d, 0x1d4c, 0x1d5d, 0x1d71, 0x1d7e, 0x1d8d, 0x1d9d, 0x1dba, - 0x1dd2, 0x1de8, 0x1e00, 0x1e10, 0x1e21, 0x1e31, 0x1e40, 0x1e50, - 0x1e6a, 0x1e78, 0x1e92, 0x1ea4, 0x1eb3, 0x1ec4, 0x1ed5, 0x1ee1, - 0x1ef0, 0x1efe, 0x1f0c, 0x1f1a, 0x1f29, 0x1f3b, 0x1f47, 0x1f57, - 0x1f63, 0x1f80, 0x1f90, 0x1f9e, 0x1fae, 0x1fc2, 0x1fd3, 0x1fe0, - 0x1ff0, 0x2002, 0x201d, 0x2037, 0x2045, 0x2051, 0x205d, 0x206d, - 0x2083, 0x209b, 0x20ac, 0x20be, 0x20cb, 0x20e1, 0x20ef, 0x2103, + 0x1c8f, 0x1ca3, 0x1cb0, 0x1cc6, 0x1cd7, 0x1ce8, 0x1cf5, 0x1d03, + 0x1d13, 0x1d2a, 0x1d3d, 0x1d4c, 0x1d5d, 0x1d71, 0x1d7e, 0x1d8d, + 0x1d9d, 0x1dba, 0x1dd2, 0x1de8, 0x1e00, 0x1e10, 0x1e21, 0x1e31, + 0x1e40, 0x1e50, 0x1e6a, 0x1e78, 0x1e92, 0x1ea4, 0x1eb3, 0x1ec4, + 0x1ed5, 0x1ee1, 0x1ef0, 0x1efe, 0x1f0c, 0x1f1a, 0x1f29, 0x1f3b, + 0x1f47, 0x1f57, 0x1f63, 0x1f80, 0x1f90, 0x1f9e, 0x1fae, 0x1fc2, + 0x1fd3, 0x1fe0, 0x1ff0, 0x2002, 0x201d, 0x2037, 0x2045, 0x2051, + 0x205d, 0x206d, 0x2083, 0x209b, 0x20ac, 0x20be, 0x20cb, 0x20e1, // Entry 200 - 23F - 0x2112, 0x2124, 0x2135, 0x2149, 0x215e, 0x216f, 0x2180, 0x2199, - 0x21a9, 0x21b5, 0x21ce, 0x21dc, 0x21e9, 0x21f8, 0x2206, 0x221d, - 0x222e, 0x223d, 0x2249, 0x2258, 0x2264, 0x2272, 0x2280, 0x228f, - 0x229b, 0x22aa, 0x22b9, 0x22ca, 0x22de, 0x22ec, 0x22fd, 0x2310, - 0x2323, 0x2331, 0x233f, 0x234f, 0x2363, 0x2378, 0x2388, 0x2397, - 0x23a7, 0x23b7, 0x23d9, 0x23ec, 0x23fe, 0x2412, 0x2429, 0x2434, - 0x2444, 0x2452, 0x246a, 0x2483, 0x2491, 0x249e, 0x24ad, 0x24bf, - 0x24d0, 0x24df, 0x24ef, 0x2502, 0x2514, 0x2524, 0x2536, 0x2542, + 0x20ef, 0x2103, 0x2112, 0x2124, 0x2135, 0x2149, 0x215e, 0x216f, + 0x2180, 0x2199, 0x21a9, 0x21b5, 0x21ce, 0x21dc, 0x21e9, 0x21f8, + 0x2206, 0x221d, 0x222e, 0x223d, 0x2249, 0x2258, 0x2264, 0x2272, + 0x2280, 0x228f, 0x229b, 0x22aa, 0x22b9, 0x22ca, 0x22de, 0x22ec, + 0x22fd, 0x2310, 0x2323, 0x2331, 0x233f, 0x234f, 0x2363, 0x2378, + 0x2388, 0x2397, 0x23a7, 0x23b7, 0x23d9, 0x23ec, 0x23fe, 0x2412, + 0x2421, 0x242c, 0x243c, 0x244a, 0x2462, 0x247b, 0x2489, 0x2496, + 0x24a5, 0x24b7, 0x24c8, 0x24d7, 0x24e7, 0x24fa, 0x250c, 0x251c, // Entry 240 - 27F - 0x254f, 0x255d, 0x2570, 0x2581, 0x2595, 0x25a8, 0x25b8, 0x25cf, - 0x25de, 0x25ec, 0x2604, 0x2610, 0x261d, 0x262b, 0x2645, 0x2645, - 0x2660, 0x267e, 0x269d, 0x26b5, 0x26c7, 0x26e1, 0x2704, 0x271f, - 0x273a, 0x273a, 0x2753, 0x276e, 0x2783, 0x279c, 0x27b6, 0x27cf, - 0x27e1, 0x27f8, 0x2810, 0x282c, 0x2847, + 0x252e, 0x253a, 0x2547, 0x2555, 0x2568, 0x2579, 0x258d, 0x25a0, + 0x25b0, 0x25c7, 0x25d6, 0x25e4, 0x25fc, 0x2608, 0x2615, 0x2623, + 0x263d, 0x263d, 0x2658, 0x2676, 0x2695, 0x26ad, 0x26bf, 0x26d9, + 0x26fc, 0x2717, 0x2732, 0x2732, 0x274b, 0x2766, 0x277b, 0x2794, + 0x27ae, 0x27c7, 0x27d9, 0x27f0, 0x2808, 0x2824, 0x283f, }, }, { // tr trLangStr, trLangIdx, }, + { // tt + "африкаансамхаргарәпассамәзәрбайҗанбашкортбелорусболгарбенгалитибетбретон" + + "босниякаталанкорсикачехуэльсданияалманмальдивдзонг-кхагрекинглизэсп" + + "ерантоиспанэстонбаскфарсыфулафинфарерфранцузирландшотланд гэльгалис" + + "иягуаранигуҗаратихаусаяһүдһиндхорватгаити креолвенгрәрмәнгерероиндо" + + "незияигбоисландитальянинуктикутяпонгрузинказакъкхмерканнадакореякан" + + "урикашмирикөрдкыргызлатинлюксембурглаослитвалатышмалагасимаоримакед" + + "онмалаяламмонголмаратхималаймальтабирманепалиголландньянҗаокситанор" + + "омоорияпәнҗабиполякпуштупортугалкечуаретороманрумынрусруандасанскри" + + "тсиндһитөньяк саамсингалсловаксловенсомалиалбансербшведтамилтелугут" + + "аҗиктайтигриньятөрекмәнтонгатөректатаруйгырукраинурдуүзбәквендавьет" + + "намволофидишйорубакытай (тәрҗемә киңәше: аерым алганда, мандарин кы" + + "тайчасы)мапучебалибембасебуаномаричерокиүзәк көрдтүбән сорбфилиппин" + + "гавайихилигайнонюгары сорбибибиоконканикурухмендеманипуримогаукниуэ" + + "папьяментокичесахасанталикөньяк саамлуле-сааминари-саамколтта-саамс" + + "үрияүзәк атлас тамазигтбилгесез телиспан (Латин Америкасы)гадиләште" + + "релгән кытайтрадицион кытай", + []uint16{ // 615 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0012, 0x0012, 0x001c, 0x001c, + 0x0026, 0x0030, 0x0030, 0x0030, 0x0044, 0x0052, 0x0060, 0x006c, + 0x006c, 0x006c, 0x007a, 0x0084, 0x0090, 0x009c, 0x00aa, 0x00aa, + 0x00aa, 0x00b8, 0x00b8, 0x00be, 0x00be, 0x00be, 0x00c8, 0x00d2, + 0x00dc, 0x00ea, 0x00fb, 0x00fb, 0x0103, 0x010f, 0x0121, 0x012b, + 0x0135, 0x013d, 0x0147, 0x014f, 0x0155, 0x0155, 0x015f, 0x016d, + 0x016d, 0x0179, 0x0190, 0x019e, 0x01ac, 0x01bc, 0x01bc, 0x01c6, + 0x01ce, 0x01d6, 0x01d6, 0x01e2, 0x01f7, 0x0201, 0x020b, 0x0217, + // Entry 40 - 7F + 0x0217, 0x0229, 0x0229, 0x0231, 0x0231, 0x0231, 0x0231, 0x023d, + 0x024b, 0x025d, 0x0265, 0x0265, 0x0271, 0x0271, 0x0271, 0x0271, + 0x027d, 0x027d, 0x0287, 0x0295, 0x029f, 0x02ab, 0x02b9, 0x02c1, + 0x02c1, 0x02c1, 0x02cd, 0x02d7, 0x02eb, 0x02eb, 0x02eb, 0x02eb, + 0x02f3, 0x02fd, 0x02fd, 0x0307, 0x0317, 0x0317, 0x0321, 0x032f, + 0x033f, 0x034b, 0x0359, 0x0363, 0x036f, 0x0379, 0x0379, 0x0379, + 0x0385, 0x0385, 0x0393, 0x0393, 0x0393, 0x0393, 0x0393, 0x039f, + 0x03ad, 0x03ad, 0x03b7, 0x03bf, 0x03bf, 0x03cd, 0x03cd, 0x03d7, + // Entry 80 - BF + 0x03e1, 0x03f1, 0x03fb, 0x040d, 0x040d, 0x0417, 0x041d, 0x0429, + 0x0439, 0x0439, 0x0445, 0x045a, 0x045a, 0x0466, 0x0472, 0x047e, + 0x047e, 0x047e, 0x048a, 0x0494, 0x049c, 0x049c, 0x049c, 0x049c, + 0x04a4, 0x04a4, 0x04ae, 0x04ba, 0x04c4, 0x04ca, 0x04da, 0x04ea, + 0x04ea, 0x04f4, 0x04fe, 0x04fe, 0x0508, 0x0508, 0x0512, 0x051e, + 0x0526, 0x0530, 0x053a, 0x0548, 0x0548, 0x0548, 0x0552, 0x0552, + 0x055a, 0x0566, 0x0566, 0x05ce, 0x05ce, 0x05ce, 0x05ce, 0x05ce, + 0x05ce, 0x05ce, 0x05ce, 0x05ce, 0x05ce, 0x05ce, 0x05ce, 0x05ce, + // Entry C0 - FF + 0x05ce, 0x05ce, 0x05ce, 0x05ce, 0x05ce, 0x05da, 0x05da, 0x05da, + 0x05da, 0x05da, 0x05da, 0x05da, 0x05da, 0x05da, 0x05da, 0x05da, + 0x05da, 0x05da, 0x05da, 0x05e2, 0x05e2, 0x05e2, 0x05e2, 0x05e2, + 0x05e2, 0x05e2, 0x05ec, 0x05ec, 0x05ec, 0x05ec, 0x05ec, 0x05ec, + 0x05ec, 0x05ec, 0x05ec, 0x05ec, 0x05ec, 0x05ec, 0x05ec, 0x05ec, + 0x05ec, 0x05ec, 0x05ec, 0x05ec, 0x05ec, 0x05ec, 0x05ec, 0x05ec, + 0x05ec, 0x05ec, 0x05ec, 0x05ec, 0x05ec, 0x05ec, 0x05fa, 0x05fa, + 0x05fa, 0x05fa, 0x05fa, 0x0602, 0x0602, 0x0602, 0x0602, 0x060e, + // Entry 100 - 13F + 0x060e, 0x061f, 0x061f, 0x061f, 0x061f, 0x061f, 0x061f, 0x061f, + 0x061f, 0x061f, 0x061f, 0x061f, 0x061f, 0x061f, 0x061f, 0x061f, + 0x0632, 0x0632, 0x0632, 0x0632, 0x0632, 0x0632, 0x0632, 0x0632, + 0x0632, 0x0632, 0x0632, 0x0632, 0x0632, 0x0632, 0x0632, 0x0632, + 0x0632, 0x0632, 0x0642, 0x0642, 0x0642, 0x0642, 0x0642, 0x0642, + 0x0642, 0x0642, 0x0642, 0x0642, 0x0642, 0x0642, 0x0642, 0x0642, + 0x0642, 0x0642, 0x0642, 0x0642, 0x0642, 0x0642, 0x0642, 0x0642, + 0x0642, 0x0642, 0x0642, 0x0642, 0x0642, 0x0642, 0x0642, 0x0642, + // Entry 140 - 17F + 0x0642, 0x0642, 0x0642, 0x0642, 0x064e, 0x064e, 0x0662, 0x0662, + 0x0662, 0x0675, 0x0675, 0x0675, 0x0675, 0x0681, 0x0681, 0x0681, + 0x0681, 0x0681, 0x0681, 0x0681, 0x0681, 0x0681, 0x0681, 0x0681, + 0x0681, 0x0681, 0x0681, 0x0681, 0x0681, 0x0681, 0x0681, 0x0681, + 0x0681, 0x0681, 0x0681, 0x0681, 0x0681, 0x0681, 0x0681, 0x0681, + 0x0681, 0x0681, 0x0681, 0x0681, 0x0681, 0x0681, 0x0681, 0x068f, + 0x068f, 0x068f, 0x068f, 0x068f, 0x068f, 0x068f, 0x0699, 0x0699, + 0x0699, 0x0699, 0x0699, 0x0699, 0x0699, 0x0699, 0x0699, 0x0699, + // Entry 180 - 1BF + 0x0699, 0x0699, 0x0699, 0x0699, 0x0699, 0x0699, 0x0699, 0x0699, + 0x0699, 0x0699, 0x0699, 0x0699, 0x0699, 0x0699, 0x0699, 0x0699, + 0x0699, 0x0699, 0x0699, 0x0699, 0x0699, 0x0699, 0x0699, 0x0699, + 0x0699, 0x0699, 0x0699, 0x0699, 0x0699, 0x06a3, 0x06a3, 0x06a3, + 0x06a3, 0x06a3, 0x06a3, 0x06a3, 0x06a3, 0x06a3, 0x06b3, 0x06bf, + 0x06bf, 0x06bf, 0x06bf, 0x06bf, 0x06bf, 0x06bf, 0x06bf, 0x06bf, + 0x06bf, 0x06bf, 0x06bf, 0x06bf, 0x06bf, 0x06bf, 0x06bf, 0x06bf, + 0x06bf, 0x06c7, 0x06c7, 0x06c7, 0x06c7, 0x06c7, 0x06c7, 0x06c7, + // Entry 1C0 - 1FF + 0x06c7, 0x06c7, 0x06c7, 0x06c7, 0x06c7, 0x06c7, 0x06c7, 0x06c7, + 0x06c7, 0x06c7, 0x06c7, 0x06c7, 0x06c7, 0x06db, 0x06db, 0x06db, + 0x06db, 0x06db, 0x06db, 0x06db, 0x06db, 0x06db, 0x06db, 0x06db, + 0x06db, 0x06db, 0x06db, 0x06e3, 0x06e3, 0x06e3, 0x06e3, 0x06e3, + 0x06e3, 0x06e3, 0x06e3, 0x06e3, 0x06e3, 0x06e3, 0x06e3, 0x06e3, + 0x06e3, 0x06e3, 0x06eb, 0x06eb, 0x06eb, 0x06eb, 0x06f9, 0x06f9, + 0x06f9, 0x06f9, 0x06f9, 0x06f9, 0x06f9, 0x06f9, 0x06f9, 0x06f9, + 0x06f9, 0x06f9, 0x06f9, 0x06f9, 0x06f9, 0x06f9, 0x06f9, 0x06f9, + // Entry 200 - 23F + 0x06f9, 0x06f9, 0x06f9, 0x070e, 0x071f, 0x0732, 0x0747, 0x0747, + 0x0747, 0x0747, 0x0747, 0x0747, 0x0747, 0x0747, 0x0747, 0x0747, + 0x0747, 0x0747, 0x0751, 0x0751, 0x0751, 0x0751, 0x0751, 0x0751, + 0x0751, 0x0751, 0x0751, 0x0751, 0x0751, 0x0751, 0x0751, 0x0751, + 0x0751, 0x0751, 0x0751, 0x0751, 0x0751, 0x0751, 0x0751, 0x0751, + 0x0751, 0x0751, 0x0751, 0x0751, 0x0775, 0x0775, 0x0775, 0x0775, + 0x078c, 0x078c, 0x078c, 0x078c, 0x078c, 0x078c, 0x078c, 0x078c, + 0x078c, 0x078c, 0x078c, 0x078c, 0x078c, 0x078c, 0x078c, 0x078c, + // Entry 240 - 27F + 0x078c, 0x078c, 0x078c, 0x078c, 0x078c, 0x078c, 0x078c, 0x078c, + 0x078c, 0x078c, 0x078c, 0x078c, 0x078c, 0x078c, 0x078c, 0x078c, + 0x078c, 0x078c, 0x078c, 0x078c, 0x078c, 0x078c, 0x078c, 0x078c, + 0x07b6, 0x07b6, 0x07b6, 0x07b6, 0x07b6, 0x07b6, 0x07b6, 0x07b6, + 0x07b6, 0x07b6, 0x07b6, 0x07b6, 0x07b6, 0x07df, 0x07fc, + }, + }, { // twq "Akan senniAmhaarik senniLaaraw senniBelaruus senniBulagaari senniBengali" + " senniCek senniAlmaŋ senniGrek senniInglisi senniEspaaɲe senniFarsi " + @@ -13746,7 +14757,7 @@ var langHeaders = [252]header{ "nda senniSomaali senniSuweede senniTamil senniTaailandu senniTurku s" + "enniUkreen senniUrdu senniVietnaam senniYorbance senniSinuwa senni, " + "MandareŋZulu senniTasawaq senni", - []uint16{ // 553 elements + []uint16{ // 555 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x0018, 0x0018, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0032, 0x0041, @@ -13825,7 +14836,7 @@ var langHeaders = [252]header{ 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, - 0x0246, + 0x0239, 0x0239, 0x0246, }, }, { // tzm @@ -13836,7 +14847,7 @@ var langHeaders = [252]header{ "alitTaṛumanitTarusitTarwanditTaṣumalitTaswiditTatamiltTaṭaytTaturkit" + "TukranitTurdutTaviṭnamitTayurubatTacinwit,MandarintazulutTamaziɣt n " + "laṭlaṣ", - []uint16{ // 555 elements + []uint16{ // 557 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x000f, 0x000f, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0017, 0x0022, 0x002d, @@ -13915,7 +14926,7 @@ var langHeaders = [252]header{ 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, - 0x01a5, 0x01a5, 0x01bb, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01bb, }, }, { // ug @@ -13980,16 +14991,16 @@ var langHeaders = [252]header{ "چەتېمنېچەتېسوچەتېرېناچەتېتۇمچەتىگرېچەتىۋچەتوكېلاۋچەكىلىنگونچەتىلىنگ" + "ىتچەتاماشېكچەنياسا توڭانچەتوك-پىسىنچەتوروكوچەسىمشيانچەتۇمبۇكاچەتۇۋا" + "لۇچەشىمالىي سوڭخايچەتوۋاچەمەركىزىي ئاتلاس تامازايتچەئۇدمۇرتچەئۇگارى" + - "تىكچەئۇمبۇندۇچەغول تىلۋايچەۋوتېچەۋۇنجوچەۋالسېرچەۋولايتاچەۋارايچەۋاش" + - "وچەقالماقچەسوگاچەياۋچەياپچەياڭبەنچەيېمباچەگۇاڭدوڭچەزاپوتېكچەبىلىس ب" + - "ەلگىلىرىزېناگاچەئۆلچەملىك ماراكەش تامازىتچەزۇنىچەتىل مەزمۇنى يوقزاز" + - "اچەھازىرقى زامان ئۆلچەملىك ئەرەبچەئاۋستىرىيە گېرمانچەشىۋىتسارىيە ئې" + - "گىزلىك گېرمانچەئاۋسترالىيە ئىنگلىزچەكانادا ئىنگلىزچەئەنگلىيە ئىنگلى" + - "زچەئامېرىكا ئىنگلىزچەلاتىن ئامېرىكا ئىسپانچەياۋروپا ئىسپانچەمېكسىكا" + - " ئىسپانچەكانادا فىرانسۇزچەشىۋىتسارىيە فىرانسۇزچەبىرازىلىيە پورتۇگالچ" + - "ەياۋروپا پورتۇگالچەسېرب-كرودىيەچەكونگو سىۋالىچەئاددىي خەنچەمۇرەككەپ" + - " خەنچە", - []uint16{ // 613 elements + "تىكچەئۇمبۇندۇچەيوچۇن تىلۋايچەۋوتېچەۋۇنجوچەۋالسېرچەۋولايتاچەۋارايچەۋ" + + "اشوچەقالماقچەسوگاچەياۋچەياپچەياڭبەنچەيېمباچەگۇاڭدوڭچەزاپوتېكچەبىلىس" + + " بەلگىلىرىزېناگاچەئۆلچەملىك ماراكەش تامازىتچەزۇنىچەتىل مەزمۇنى يوقزا" + + "زاچەھازىرقى زامان ئۆلچەملىك ئەرەبچەئاۋستىرىيە گېرمانچەشىۋىتسارىيە ئ" + + "ېگىزلىك گېرمانچەئاۋسترالىيە ئىنگلىزچەكانادا ئىنگلىزچەئەنگلىيە ئىنگل" + + "ىزچەئامېرىكا ئىنگلىزچەلاتىن ئامېرىكا ئىسپانچەياۋروپا ئىسپانچەمېكسىك" + + "ا ئىسپانچەكانادا فىرانسۇزچەشىۋىتسارىيە فىرانسۇزچەبىرازىلىيە پورتۇگا" + + "لچەياۋروپا پورتۇگالچەسېرب-كرودىيەچەكونگو سىۋالىچەئاددىي خەنچەمۇرەكك" + + "ەپ خەنچە", + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x000e, 0x001e, 0x0030, 0x0044, 0x0052, 0x0062, 0x0074, 0x0082, 0x0090, 0x009e, 0x00b0, 0x00ca, 0x00dc, 0x00ee, 0x00fe, @@ -14024,59 +15035,59 @@ var langHeaders = [252]header{ 0x0d79, 0x0d85, 0x0d93, 0x0d93, 0x0d9f, 0x0dad, 0x0dad, 0x0dad, 0x0dbf, 0x0dcd, 0x0dd9, 0x0dd9, 0x0de3, 0x0df5, 0x0df5, 0x0df5, 0x0e03, 0x0e03, 0x0e0f, 0x0e1d, 0x0e2f, 0x0e3b, 0x0e47, 0x0e55, - 0x0e67, 0x0e75, 0x0e83, 0x0e93, 0x0ea3, 0x0eaf, 0x0ebb, 0x0ec9, - 0x0edb, 0x0ee5, 0x0ef1, 0x0f0c, 0x0f1c, 0x0f30, 0x0f40, 0x0f4e, - // Entry 100 - 13F - 0x0f6b, 0x0f7b, 0x0f7b, 0x0f92, 0x0f92, 0x0fa4, 0x0fb4, 0x0fc6, - 0x0fd4, 0x0fe8, 0x0ff4, 0x1004, 0x1012, 0x1020, 0x102e, 0x1045, - 0x1045, 0x1055, 0x107c, 0x1088, 0x1098, 0x10a8, 0x10b6, 0x10c4, - 0x10c4, 0x10e1, 0x10f3, 0x1105, 0x1131, 0x1131, 0x1143, 0x1143, - 0x114d, 0x1161, 0x1161, 0x116b, 0x116b, 0x1199, 0x11bc, 0x11bc, - 0x11db, 0x11f8, 0x120c, 0x1214, 0x1214, 0x1214, 0x1220, 0x1230, - 0x1230, 0x123a, 0x124c, 0x124c, 0x1287, 0x12b7, 0x12b7, 0x12c5, - 0x12db, 0x12e5, 0x12f3, 0x1310, 0x1337, 0x1337, 0x1337, 0x1343, + 0x0e67, 0x0e75, 0x0e83, 0x0e93, 0x0ea3, 0x0ea3, 0x0eaf, 0x0ebb, + 0x0ec9, 0x0edb, 0x0ee5, 0x0ef1, 0x0f0c, 0x0f1c, 0x0f30, 0x0f40, + // Entry 100 - 13F + 0x0f4e, 0x0f6b, 0x0f7b, 0x0f7b, 0x0f92, 0x0f92, 0x0fa4, 0x0fb4, + 0x0fc6, 0x0fd4, 0x0fe8, 0x0ff4, 0x1004, 0x1012, 0x1020, 0x102e, + 0x1045, 0x1045, 0x1055, 0x107c, 0x1088, 0x1098, 0x10a8, 0x10b6, + 0x10c4, 0x10c4, 0x10e1, 0x10f3, 0x1105, 0x1131, 0x1131, 0x1143, + 0x1143, 0x114d, 0x1161, 0x1161, 0x116b, 0x116b, 0x1199, 0x11bc, + 0x11bc, 0x11db, 0x11f8, 0x120c, 0x1214, 0x1214, 0x1214, 0x1220, + 0x1230, 0x1230, 0x123a, 0x124c, 0x124c, 0x1287, 0x12b7, 0x12b7, + 0x12c5, 0x12db, 0x12e5, 0x12f3, 0x1310, 0x1337, 0x1337, 0x1337, // Entry 140 - 17F - 0x1355, 0x1363, 0x1363, 0x1371, 0x1371, 0x1389, 0x1399, 0x13a3, - 0x13bc, 0x13bc, 0x13c8, 0x13d6, 0x13ea, 0x13fe, 0x140e, 0x140e, - 0x140e, 0x141e, 0x142e, 0x143c, 0x1457, 0x1474, 0x1474, 0x148d, - 0x149d, 0x14ab, 0x14b3, 0x14c1, 0x14cd, 0x14e1, 0x14f3, 0x14ff, - 0x1511, 0x152d, 0x152d, 0x1539, 0x1539, 0x1545, 0x1553, 0x156a, - 0x156a, 0x156a, 0x1576, 0x158a, 0x159e, 0x159e, 0x15ae, 0x15c0, - 0x15d2, 0x15f1, 0x15f1, 0x15f1, 0x15ff, 0x160d, 0x161f, 0x162f, - 0x163d, 0x164b, 0x165d, 0x166d, 0x167b, 0x1689, 0x1697, 0x16a7, + 0x1343, 0x1355, 0x1363, 0x1363, 0x1371, 0x1371, 0x1389, 0x1399, + 0x13a3, 0x13bc, 0x13bc, 0x13c8, 0x13d6, 0x13ea, 0x13fe, 0x140e, + 0x140e, 0x140e, 0x141e, 0x142e, 0x143c, 0x1457, 0x1474, 0x1474, + 0x148d, 0x149d, 0x14ab, 0x14b3, 0x14c1, 0x14cd, 0x14e1, 0x14f3, + 0x14ff, 0x1511, 0x152d, 0x152d, 0x1539, 0x1539, 0x1545, 0x1553, + 0x156a, 0x156a, 0x156a, 0x1576, 0x158a, 0x159e, 0x159e, 0x15ae, + 0x15c0, 0x15d2, 0x15f1, 0x15f1, 0x15f1, 0x15ff, 0x160d, 0x161f, + 0x162f, 0x163d, 0x164b, 0x165d, 0x166d, 0x167b, 0x1689, 0x1697, // Entry 180 - 1BF - 0x16a7, 0x16a7, 0x16a7, 0x16a7, 0x16a7, 0x16b5, 0x16c1, 0x16c1, - 0x16c1, 0x16d6, 0x16ea, 0x16f8, 0x1704, 0x1710, 0x171c, 0x171c, - 0x171c, 0x172e, 0x173a, 0x174a, 0x175c, 0x176e, 0x1782, 0x1790, - 0x179c, 0x17aa, 0x17ba, 0x17c8, 0x17d4, 0x17e8, 0x1816, 0x1826, - 0x1835, 0x1845, 0x185f, 0x186d, 0x187f, 0x188f, 0x189d, 0x189d, - 0x18ad, 0x18c0, 0x18ce, 0x18e2, 0x18f4, 0x18f4, 0x1902, 0x1910, - 0x1910, 0x1910, 0x1920, 0x192c, 0x1947, 0x1957, 0x1965, 0x1973, - 0x1973, 0x1985, 0x1997, 0x19a5, 0x19c4, 0x19c4, 0x19d0, 0x19eb, + 0x16a7, 0x16a7, 0x16a7, 0x16a7, 0x16a7, 0x16a7, 0x16b5, 0x16b5, + 0x16c1, 0x16c1, 0x16c1, 0x16d6, 0x16ea, 0x16f8, 0x1704, 0x1710, + 0x171c, 0x171c, 0x171c, 0x172e, 0x173a, 0x174a, 0x175c, 0x176e, + 0x1782, 0x1790, 0x179c, 0x17aa, 0x17ba, 0x17c8, 0x17d4, 0x17e8, + 0x1816, 0x1826, 0x1835, 0x1845, 0x185f, 0x186d, 0x187f, 0x188f, + 0x189d, 0x189d, 0x18ad, 0x18c0, 0x18ce, 0x18e2, 0x18f4, 0x18f4, + 0x1902, 0x1910, 0x1910, 0x1910, 0x1920, 0x192c, 0x1947, 0x1957, + 0x1965, 0x1973, 0x1973, 0x1985, 0x1997, 0x19a5, 0x19c4, 0x19c4, // Entry 1C0 - 1FF - 0x19f9, 0x1a07, 0x1a1b, 0x1a31, 0x1a41, 0x1a51, 0x1a67, 0x1a80, - 0x1a98, 0x1aaa, 0x1abe, 0x1ad8, 0x1ae6, 0x1ae6, 0x1ae6, 0x1ae6, - 0x1ae6, 0x1b03, 0x1b03, 0x1b17, 0x1b17, 0x1b17, 0x1b2d, 0x1b2d, - 0x1b52, 0x1b52, 0x1b52, 0x1b66, 0x1b78, 0x1b78, 0x1b78, 0x1b78, - 0x1b86, 0x1b94, 0x1b94, 0x1b94, 0x1b94, 0x1ba6, 0x1bb2, 0x1bc4, - 0x1bd0, 0x1be6, 0x1bf8, 0x1c06, 0x1c16, 0x1c16, 0x1c28, 0x1c36, - 0x1c4c, 0x1c64, 0x1c64, 0x1c64, 0x1c76, 0x1c82, 0x1c82, 0x1c92, - 0x1caf, 0x1cd2, 0x1cd2, 0x1ce0, 0x1cea, 0x1cff, 0x1d0f, 0x1d0f, + 0x19d0, 0x19eb, 0x19f9, 0x1a07, 0x1a1b, 0x1a31, 0x1a41, 0x1a51, + 0x1a67, 0x1a80, 0x1a98, 0x1aaa, 0x1abe, 0x1ad8, 0x1ae6, 0x1ae6, + 0x1ae6, 0x1ae6, 0x1ae6, 0x1b03, 0x1b03, 0x1b17, 0x1b17, 0x1b17, + 0x1b2d, 0x1b2d, 0x1b52, 0x1b52, 0x1b52, 0x1b66, 0x1b78, 0x1b78, + 0x1b78, 0x1b78, 0x1b86, 0x1b94, 0x1b94, 0x1b94, 0x1b94, 0x1ba6, + 0x1bb2, 0x1bc4, 0x1bd0, 0x1be6, 0x1bf8, 0x1c06, 0x1c16, 0x1c16, + 0x1c28, 0x1c36, 0x1c4c, 0x1c64, 0x1c64, 0x1c64, 0x1c76, 0x1c82, + 0x1c82, 0x1c92, 0x1caf, 0x1cd2, 0x1cd2, 0x1ce0, 0x1cea, 0x1cff, // Entry 200 - 23F - 0x1d0f, 0x1d2a, 0x1d3f, 0x1d58, 0x1d6f, 0x1d81, 0x1d8f, 0x1daa, - 0x1db8, 0x1dc4, 0x1dc4, 0x1dd4, 0x1de0, 0x1dee, 0x1dfe, 0x1e1d, - 0x1e2d, 0x1e2d, 0x1e2d, 0x1e3b, 0x1e47, 0x1e57, 0x1e65, 0x1e73, - 0x1e7d, 0x1e8f, 0x1e8f, 0x1ea3, 0x1eb7, 0x1eb7, 0x1ec9, 0x1ee2, - 0x1ef7, 0x1ef7, 0x1f07, 0x1f07, 0x1f19, 0x1f19, 0x1f2b, 0x1f3b, - 0x1f5a, 0x1f66, 0x1f98, 0x1faa, 0x1fc0, 0x1fd4, 0x1fe1, 0x1feb, - 0x1feb, 0x1feb, 0x1feb, 0x1feb, 0x1ff7, 0x1ff7, 0x2005, 0x2015, - 0x2027, 0x2035, 0x2041, 0x2041, 0x2041, 0x2051, 0x2051, 0x205d, + 0x1d0f, 0x1d0f, 0x1d0f, 0x1d2a, 0x1d3f, 0x1d58, 0x1d6f, 0x1d81, + 0x1d8f, 0x1daa, 0x1db8, 0x1dc4, 0x1dc4, 0x1dd4, 0x1de0, 0x1dee, + 0x1dfe, 0x1e1d, 0x1e2d, 0x1e2d, 0x1e2d, 0x1e3b, 0x1e47, 0x1e57, + 0x1e65, 0x1e73, 0x1e7d, 0x1e8f, 0x1e8f, 0x1ea3, 0x1eb7, 0x1eb7, + 0x1ec9, 0x1ee2, 0x1ef7, 0x1ef7, 0x1f07, 0x1f07, 0x1f19, 0x1f19, + 0x1f2b, 0x1f3b, 0x1f5a, 0x1f66, 0x1f98, 0x1faa, 0x1fc0, 0x1fd4, + 0x1fe5, 0x1fef, 0x1fef, 0x1fef, 0x1fef, 0x1fef, 0x1ffb, 0x1ffb, + 0x2009, 0x2019, 0x202b, 0x2039, 0x2045, 0x2045, 0x2045, 0x2055, // Entry 240 - 27F - 0x2067, 0x2071, 0x2081, 0x208f, 0x208f, 0x20a1, 0x20b3, 0x20d0, - 0x20d0, 0x20e0, 0x2114, 0x2120, 0x213c, 0x2148, 0x2183, 0x2183, - 0x21a8, 0x21e0, 0x2209, 0x2228, 0x224b, 0x226e, 0x229a, 0x22b9, - 0x22d8, 0x22d8, 0x22f9, 0x2324, 0x2324, 0x2324, 0x234d, 0x2370, - 0x2370, 0x238b, 0x23a6, 0x23bd, 0x23d8, + 0x2055, 0x2061, 0x206b, 0x2075, 0x2085, 0x2093, 0x2093, 0x20a5, + 0x20b7, 0x20d4, 0x20d4, 0x20e4, 0x2118, 0x2124, 0x2140, 0x214c, + 0x2187, 0x2187, 0x21ac, 0x21e4, 0x220d, 0x222c, 0x224f, 0x2272, + 0x229e, 0x22bd, 0x22dc, 0x22dc, 0x22fd, 0x2328, 0x2328, 0x2328, + 0x2351, 0x2374, 0x2374, 0x238f, 0x23aa, 0x23c1, 0x23dc, }, }, { // uk @@ -14088,96 +15099,96 @@ var langHeaders = [252]header{ urLangIdx, }, { // ur-IN - "افریقیکروشینجاوانیزجارجيائىکلالیسٹکنڑکرداودھیسورانی کردیزرمہمگہیمسائیمعی" + - "اری مراقشی تمازیقیجدید معیاری عربیآسان چینی", - []uint16{ // 612 elements + "کروشینجاوانیزجارجيائىکلالیسٹکنڑکرداودھیسورانی کردیزرمہمگہیمعیاری مراقشی " + + "تمازیقیجدید معیاری عربیآسان چینی", + []uint16{ // 614 elements // Entry 0 - 3F - 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x000c, 0x000c, 0x000c, - 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, - 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, - 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, - 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, - 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, - 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, - 0x000c, 0x000c, 0x000c, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, // Entry 40 - 7F - 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, - 0x0018, 0x0018, 0x0018, 0x0026, 0x0036, 0x0036, 0x0036, 0x0036, - 0x0036, 0x0044, 0x0044, 0x004a, 0x004a, 0x004a, 0x004a, 0x0050, - 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, - 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, - 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, - 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, - 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, - // Entry 80 - BF - 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, - 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, - 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, - 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, - 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, - 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, - 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, - 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, - // Entry C0 - FF - 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, - 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, - 0x0050, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, - 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, - 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, - 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, - 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, - 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, - // Entry 100 - 13F - 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, - 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x0077, 0x0077, 0x0077, - 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, - 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, - 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, - 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, - 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, - 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, + 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, + 0x000c, 0x000c, 0x000c, 0x001a, 0x002a, 0x002a, 0x002a, 0x002a, + 0x002a, 0x0038, 0x0038, 0x003e, 0x003e, 0x003e, 0x003e, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + // Entry 80 - BF + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + // Entry C0 - FF + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, + 0x0044, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, + 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, + 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, + 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, + 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, + 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, + // Entry 100 - 13F + 0x004e, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, + 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x006b, 0x006b, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, // Entry 140 - 17F - 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, - 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, - 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, - 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, - 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, - 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, - 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, - 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, // Entry 180 - 1BF - 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, - 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, - 0x0077, 0x0077, 0x0077, 0x007f, 0x007f, 0x007f, 0x007f, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x0073, 0x0073, 0x0073, + 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, + 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, + 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, + 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, + 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, // Entry 1C0 - 1FF - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, + 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, + 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, + 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, + 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, + 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, + 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, + 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, // Entry 200 - 23F - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, + 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, + 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, + 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, + 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, + 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, + 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, + 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, + 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, // Entry 240 - 27F - 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, 0x0089, - 0x0089, 0x0089, 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00cf, 0x00cf, - 0x00cf, 0x00cf, 0x00cf, 0x00cf, 0x00cf, 0x00cf, 0x00cf, 0x00cf, - 0x00cf, 0x00cf, 0x00cf, 0x00cf, 0x00cf, 0x00cf, 0x00cf, 0x00cf, - 0x00cf, 0x00cf, 0x00cf, 0x00e0, + 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, + 0x0073, 0x0073, 0x0073, 0x0073, 0x009b, 0x009b, 0x009b, 0x009b, + 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, + 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, + 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00ca, }, }, { // uz @@ -14250,7 +15261,7 @@ var langHeaders = [252]header{ "овалсерчаволяттасогаянгбенкантончатамазигхтТил таркиби йўқстандарт " + "арабчаинглизча (Британия)инглизча (Америка)фламандчаконго-суахилисо" + "ддалаштирилган хитойчаанъанавий хитойча", - []uint16{ // 613 elements + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x000c, 0x001a, 0x001a, 0x002c, 0x0038, 0x0046, 0x0052, 0x005e, 0x006c, 0x0078, 0x0084, 0x009c, 0x00ae, 0x00c0, 0x00d0, @@ -14285,66 +15296,66 @@ var langHeaders = [252]header{ 0x09cb, 0x09cb, 0x09d5, 0x09d5, 0x09e1, 0x09e1, 0x09e1, 0x09e1, 0x09f1, 0x09f1, 0x09f9, 0x09f9, 0x09f9, 0x09f9, 0x09f9, 0x09f9, 0x09f9, 0x09f9, 0x0a05, 0x0a05, 0x0a05, 0x0a13, 0x0a13, 0x0a1f, - 0x0a1f, 0x0a1f, 0x0a1f, 0x0a1f, 0x0a1f, 0x0a2f, 0x0a3b, 0x0a3b, - 0x0a3b, 0x0a47, 0x0a4f, 0x0a4f, 0x0a5f, 0x0a5f, 0x0a6b, 0x0a77, - // Entry 100 - 13F - 0x0a90, 0x0a90, 0x0a90, 0x0a90, 0x0a90, 0x0a90, 0x0a9e, 0x0aae, - 0x0abc, 0x0abc, 0x0abc, 0x0ac8, 0x0ac8, 0x0ad2, 0x0ad2, 0x0ae7, - 0x0ae7, 0x0af5, 0x0af5, 0x0b0a, 0x0b0a, 0x0b16, 0x0b22, 0x0b2a, - 0x0b2a, 0x0b2a, 0x0b36, 0x0b36, 0x0b36, 0x0b36, 0x0b48, 0x0b48, - 0x0b48, 0x0b5a, 0x0b5a, 0x0b60, 0x0b60, 0x0b60, 0x0b60, 0x0b60, - 0x0b60, 0x0b60, 0x0b6e, 0x0b72, 0x0b72, 0x0b72, 0x0b72, 0x0b72, - 0x0b72, 0x0b7a, 0x0b8c, 0x0b8c, 0x0b8c, 0x0b8c, 0x0b8c, 0x0b8c, - 0x0b9e, 0x0b9e, 0x0b9e, 0x0b9e, 0x0bc1, 0x0bc1, 0x0bc1, 0x0bcb, + 0x0a1f, 0x0a1f, 0x0a1f, 0x0a1f, 0x0a1f, 0x0a1f, 0x0a2f, 0x0a3b, + 0x0a3b, 0x0a3b, 0x0a47, 0x0a4f, 0x0a4f, 0x0a5f, 0x0a5f, 0x0a6b, + // Entry 100 - 13F + 0x0a77, 0x0a90, 0x0a90, 0x0a90, 0x0a90, 0x0a90, 0x0a90, 0x0a9e, + 0x0aae, 0x0abc, 0x0abc, 0x0abc, 0x0ac8, 0x0ac8, 0x0ad2, 0x0ad2, + 0x0ae7, 0x0ae7, 0x0af5, 0x0af5, 0x0b0a, 0x0b0a, 0x0b16, 0x0b22, + 0x0b2a, 0x0b2a, 0x0b2a, 0x0b36, 0x0b36, 0x0b36, 0x0b36, 0x0b48, + 0x0b48, 0x0b48, 0x0b5a, 0x0b5a, 0x0b60, 0x0b60, 0x0b60, 0x0b60, + 0x0b60, 0x0b60, 0x0b60, 0x0b6e, 0x0b72, 0x0b72, 0x0b72, 0x0b72, + 0x0b72, 0x0b72, 0x0b7a, 0x0b8c, 0x0b8c, 0x0b8c, 0x0b8c, 0x0b8c, + 0x0b8c, 0x0b9e, 0x0b9e, 0x0b9e, 0x0b9e, 0x0bc1, 0x0bc1, 0x0bc1, // Entry 140 - 17F - 0x0bd7, 0x0bd7, 0x0bd7, 0x0be5, 0x0be5, 0x0bf9, 0x0bf9, 0x0c07, - 0x0c1e, 0x0c1e, 0x0c2f, 0x0c40, 0x0c4a, 0x0c54, 0x0c62, 0x0c62, - 0x0c62, 0x0c62, 0x0c6e, 0x0c83, 0x0c83, 0x0c83, 0x0c83, 0x0c83, - 0x0c91, 0x0c91, 0x0c99, 0x0ca7, 0x0ca7, 0x0ca7, 0x0ca7, 0x0ca7, - 0x0cb9, 0x0cd1, 0x0cd1, 0x0cd1, 0x0cd1, 0x0cd1, 0x0cd1, 0x0ce6, - 0x0ce6, 0x0ce6, 0x0cee, 0x0d02, 0x0d02, 0x0d02, 0x0d12, 0x0d12, - 0x0d12, 0x0d12, 0x0d12, 0x0d12, 0x0d12, 0x0d12, 0x0d20, 0x0d2e, - 0x0d3a, 0x0d3a, 0x0d3a, 0x0d3a, 0x0d48, 0x0d48, 0x0d48, 0x0d48, + 0x0bcb, 0x0bd7, 0x0bd7, 0x0bd7, 0x0be5, 0x0be5, 0x0bf9, 0x0bf9, + 0x0c07, 0x0c1e, 0x0c1e, 0x0c2f, 0x0c40, 0x0c4a, 0x0c54, 0x0c62, + 0x0c62, 0x0c62, 0x0c62, 0x0c6e, 0x0c83, 0x0c83, 0x0c83, 0x0c83, + 0x0c83, 0x0c91, 0x0c91, 0x0c99, 0x0ca7, 0x0ca7, 0x0ca7, 0x0ca7, + 0x0ca7, 0x0cb9, 0x0cd1, 0x0cd1, 0x0cd1, 0x0cd1, 0x0cd1, 0x0cd1, + 0x0ce6, 0x0ce6, 0x0ce6, 0x0cee, 0x0d02, 0x0d02, 0x0d02, 0x0d12, + 0x0d12, 0x0d12, 0x0d12, 0x0d12, 0x0d12, 0x0d12, 0x0d12, 0x0d20, + 0x0d2e, 0x0d3a, 0x0d3a, 0x0d3a, 0x0d3a, 0x0d48, 0x0d48, 0x0d48, // Entry 180 - 1BF - 0x0d48, 0x0d48, 0x0d48, 0x0d68, 0x0d68, 0x0d68, 0x0d68, 0x0d7f, - 0x0d7f, 0x0d7f, 0x0d7f, 0x0d7f, 0x0d7f, 0x0d89, 0x0d91, 0x0d91, - 0x0d91, 0x0d91, 0x0d91, 0x0d91, 0x0d91, 0x0d91, 0x0d91, 0x0d9f, - 0x0d9f, 0x0db2, 0x0db2, 0x0dbc, 0x0dc8, 0x0dd8, 0x0dd8, 0x0def, - 0x0df7, 0x0e03, 0x0e19, 0x0e19, 0x0e2b, 0x0e37, 0x0e41, 0x0e41, - 0x0e4f, 0x0e67, 0x0e73, 0x0e83, 0x0e83, 0x0e83, 0x0e83, 0x0e91, - 0x0ea5, 0x0ea5, 0x0ea5, 0x0ead, 0x0ead, 0x0ead, 0x0ead, 0x0eb9, - 0x0eb9, 0x0ec5, 0x0ed5, 0x0ed5, 0x0ed5, 0x0ed5, 0x0edb, 0x0edb, + 0x0d48, 0x0d48, 0x0d48, 0x0d48, 0x0d68, 0x0d68, 0x0d68, 0x0d68, + 0x0d68, 0x0d7f, 0x0d7f, 0x0d7f, 0x0d7f, 0x0d7f, 0x0d7f, 0x0d89, + 0x0d91, 0x0d91, 0x0d91, 0x0d91, 0x0d91, 0x0d91, 0x0d91, 0x0d91, + 0x0d91, 0x0d9f, 0x0d9f, 0x0db2, 0x0db2, 0x0dbc, 0x0dc8, 0x0dd8, + 0x0dd8, 0x0def, 0x0df7, 0x0e03, 0x0e19, 0x0e19, 0x0e2b, 0x0e37, + 0x0e41, 0x0e41, 0x0e4f, 0x0e67, 0x0e73, 0x0e83, 0x0e83, 0x0e83, + 0x0e83, 0x0e91, 0x0ea5, 0x0ea5, 0x0ea5, 0x0ead, 0x0ead, 0x0ead, + 0x0ead, 0x0eb9, 0x0eb9, 0x0ec5, 0x0ed5, 0x0ed5, 0x0ed5, 0x0ed5, // Entry 1C0 - 1FF - 0x0ee7, 0x0ee7, 0x0ee7, 0x0ef5, 0x0ef5, 0x0ef5, 0x0ef5, 0x0ef5, - 0x0ef5, 0x0ef5, 0x0ef5, 0x0f09, 0x0f09, 0x0f09, 0x0f09, 0x0f09, + 0x0edb, 0x0edb, 0x0ee7, 0x0ee7, 0x0ee7, 0x0ef5, 0x0ef5, 0x0ef5, + 0x0ef5, 0x0ef5, 0x0ef5, 0x0ef5, 0x0ef5, 0x0f09, 0x0f09, 0x0f09, 0x0f09, 0x0f09, 0x0f09, 0x0f09, 0x0f09, 0x0f09, 0x0f09, 0x0f09, - 0x0f09, 0x0f11, 0x0f11, 0x0f11, 0x0f11, 0x0f11, 0x0f11, 0x0f11, - 0x0f1f, 0x0f1f, 0x0f1f, 0x0f1f, 0x0f1f, 0x0f2b, 0x0f40, 0x0f40, - 0x0f48, 0x0f48, 0x0f5a, 0x0f5a, 0x0f68, 0x0f68, 0x0f68, 0x0f76, - 0x0f76, 0x0f76, 0x0f76, 0x0f76, 0x0f76, 0x0f7e, 0x0f7e, 0x0f7e, - 0x0f9b, 0x0f9b, 0x0f9b, 0x0fab, 0x0fab, 0x0fab, 0x0fab, 0x0fab, + 0x0f09, 0x0f09, 0x0f09, 0x0f11, 0x0f11, 0x0f11, 0x0f11, 0x0f11, + 0x0f11, 0x0f11, 0x0f1f, 0x0f1f, 0x0f1f, 0x0f1f, 0x0f1f, 0x0f2b, + 0x0f40, 0x0f40, 0x0f48, 0x0f48, 0x0f5a, 0x0f5a, 0x0f68, 0x0f68, + 0x0f68, 0x0f76, 0x0f76, 0x0f76, 0x0f76, 0x0f76, 0x0f76, 0x0f7e, + 0x0f7e, 0x0f7e, 0x0f9b, 0x0f9b, 0x0f9b, 0x0fab, 0x0fab, 0x0fab, // Entry 200 - 23F - 0x0fab, 0x0fc6, 0x0fdb, 0x0ff2, 0x1009, 0x1009, 0x1009, 0x1009, - 0x1009, 0x1015, 0x1015, 0x1015, 0x1015, 0x1015, 0x1023, 0x1023, - 0x1031, 0x1031, 0x1031, 0x1031, 0x1039, 0x1039, 0x1039, 0x1043, + 0x0fab, 0x0fab, 0x0fab, 0x0fc6, 0x0fdb, 0x0ff2, 0x1009, 0x1009, + 0x1009, 0x1009, 0x1009, 0x1015, 0x1015, 0x1015, 0x1015, 0x1015, + 0x1023, 0x1023, 0x1031, 0x1031, 0x1031, 0x1031, 0x1039, 0x1039, + 0x1039, 0x1043, 0x1043, 0x1043, 0x1043, 0x1043, 0x1043, 0x1043, 0x1043, 0x1043, 0x1043, 0x1043, 0x1043, 0x1043, 0x1043, 0x1043, - 0x1043, 0x1043, 0x1043, 0x1043, 0x1043, 0x1043, 0x1043, 0x1043, - 0x1051, 0x1051, 0x107f, 0x107f, 0x107f, 0x107f, 0x1096, 0x109c, - 0x109c, 0x109c, 0x109c, 0x109c, 0x109c, 0x109c, 0x10a6, 0x10b6, - 0x10c4, 0x10c4, 0x10c4, 0x10c4, 0x10c4, 0x10c4, 0x10c4, 0x10cc, + 0x1043, 0x1043, 0x1051, 0x1051, 0x107f, 0x107f, 0x107f, 0x107f, + 0x1096, 0x109c, 0x109c, 0x109c, 0x109c, 0x109c, 0x109c, 0x109c, + 0x10a6, 0x10b6, 0x10c4, 0x10c4, 0x10c4, 0x10c4, 0x10c4, 0x10c4, // Entry 240 - 27F - 0x10cc, 0x10cc, 0x10d8, 0x10d8, 0x10d8, 0x10e8, 0x10e8, 0x10e8, - 0x10e8, 0x10e8, 0x10fa, 0x10fa, 0x1116, 0x1116, 0x1133, 0x1133, - 0x1133, 0x1133, 0x1133, 0x1133, 0x1156, 0x1177, 0x1177, 0x1177, - 0x1177, 0x1177, 0x1177, 0x1177, 0x1177, 0x1189, 0x1189, 0x1189, - 0x1189, 0x1189, 0x11a2, 0x11d1, 0x11f2, + 0x10c4, 0x10cc, 0x10cc, 0x10cc, 0x10d8, 0x10d8, 0x10d8, 0x10e8, + 0x10e8, 0x10e8, 0x10e8, 0x10e8, 0x10fa, 0x10fa, 0x1116, 0x1116, + 0x1133, 0x1133, 0x1133, 0x1133, 0x1133, 0x1133, 0x1156, 0x1177, + 0x1177, 0x1177, 0x1177, 0x1177, 0x1177, 0x1177, 0x1177, 0x1189, + 0x1189, 0x1189, 0x1189, 0x1189, 0x11a2, 0x11d1, 0x11f2, }, }, { // vai "ꕉꕪꘋꕉꕆꕌꔸꕞꕌꖝꔆꕞꖩꔻꗂꔠꗸꘋꗩꕭꔷꗿꗡꕧꕮꔧꗥꗷꘋꕶꕱꕐꘊꔧꗨꗡꔻꘂꘋꗱꘋꔻꕌꖙꕢꔦꔺꖽꔟꗸꘋꔤꖆꕇꔻꘂꘋꔤꕼꔤꕚꔷꘂꘋꕧꕐꕇꔧꕧꕙꕇꔧ" + "ꕃꘈꗢꖏꔸꘂꘋꕮꔒꔀꗩꕆꔻꕇꕐꔷꗍꔿꖛꕨꔬꗁꔒꔻꕶꕿꕃꔤꖄꕆꕇꘂꘋꗐꖺꔻꘂꘋꕟꖙꕡꖇꕮꔷꖬꔨꗵꘋꕚꕆꔷꕚꔤꗋꕃꖳꖴꔓꕇꘂꘋꖺꖦꔲꕩꕯ" + "ꕆꔧꖎꖄꕑꕦꕇꔧꖮꖨꕙꔤ", - []uint16{ // 560 elements + []uint16{ // 562 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0009, 0x0015, 0x0015, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x002a, 0x0036, @@ -14423,7 +15434,8 @@ var langHeaders = [252]header{ 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, - 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01c2, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01bc, 0x01c2, }, }, { // vai-Latn @@ -14432,7 +15444,7 @@ var langHeaders = [252]header{ "ɛ̃ tɛKoríyɛŋMaléeeBhɛmísiNipaliDɔchiPuŋjabhiPɔ́lésiPotokíiRomíniyɛŋ" + "RɔshiyɛŋRawundaSomáliSúwídɛŋTamíliTáiTɔ́kiYukureniyɛŋƆduViyamíĩYórób" + "haChaniĩZúluVai", - []uint16{ // 560 elements + []uint16{ // 562 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0005, 0x000d, 0x000d, 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, 0x001e, 0x0029, @@ -14511,7 +15523,8 @@ var langHeaders = [252]header{ 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, - 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x0172, + 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, 0x016f, + 0x016f, 0x0172, }, }, { // vi @@ -14526,7 +15539,7 @@ var langHeaders = [252]header{ "renoKyiromaniaKyirusiKyinyarwandaKyisomalyiKyiswidiKyitamilKyitailan" + "diKyiturukyiKyiukraniaKyiurduKyivietinamuKyiyorubaKyichinaKyizuluKyi" + "vunjo", - []uint16{ // 567 elements + []uint16{ // 569 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0011, 0x0011, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0024, 0x0030, @@ -14606,7 +15619,8 @@ var langHeaders = [252]header{ 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, - 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x01a1, + 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x01a1, }, }, { // wae @@ -14629,7 +15643,7 @@ var langHeaders = [252]header{ "šes SchpanišIberišes SchpanišKanadišes WälšSchwizer WälšFlämišBrasi" + "lianišes PortugisišIberišes PortugisišVereifačts ChinesišTraditionel" + "ls Chinesiš", - []uint16{ // 613 elements + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0009, 0x0009, 0x0012, 0x0012, 0x001a, 0x001a, 0x0021, 0x002b, 0x002b, 0x0031, 0x003f, 0x003f, 0x004a, 0x0053, @@ -14669,14 +15683,14 @@ var langHeaders = [252]header{ // Entry 100 - 13F 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, - 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03fd, + 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03fd, 0x03fd, 0x03fd, 0x03fd, 0x03fd, 0x03fd, 0x03fd, 0x03fd, - 0x03fd, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, + 0x03fd, 0x03fd, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, 0x0407, // Entry 140 - 17F - 0x0407, 0x0407, 0x0407, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, + 0x0407, 0x0407, 0x0407, 0x0407, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, @@ -14692,31 +15706,139 @@ var langHeaders = [252]header{ 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, - 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x041b, + 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, 0x0412, // Entry 1C0 - 1FF + 0x0412, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, - 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, 0x041b, - 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, + 0x041b, 0x041b, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, // Entry 200 - 23F 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, - 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0428, 0x0428, + 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0423, 0x0428, 0x0428, 0x0428, 0x0428, 0x0428, 0x0428, 0x0428, 0x0428, + 0x0428, 0x0428, 0x0435, 0x0435, 0x0435, 0x0435, 0x0435, 0x0435, 0x0435, 0x0435, 0x0435, 0x0435, 0x0435, 0x0435, 0x0435, 0x0435, - 0x0435, 0x0435, 0x0435, 0x0435, 0x0435, 0x0435, 0x0448, 0x0448, - 0x0448, 0x0448, 0x0448, 0x0448, 0x0448, 0x0448, 0x0448, 0x044e, - 0x044e, 0x044e, 0x044e, 0x044e, 0x044e, 0x044e, 0x044e, 0x044e, + 0x0448, 0x0448, 0x0448, 0x0448, 0x0448, 0x0448, 0x0448, 0x0448, + 0x0448, 0x044e, 0x044e, 0x044e, 0x044e, 0x044e, 0x044e, 0x044e, // Entry 240 - 27F 0x044e, 0x044e, 0x044e, 0x044e, 0x044e, 0x044e, 0x044e, 0x044e, 0x044e, 0x044e, 0x044e, 0x044e, 0x044e, 0x044e, 0x044e, 0x044e, - 0x0462, 0x0474, 0x0489, 0x049b, 0x04ac, 0x04c1, 0x04dc, 0x04ef, - 0x04ef, 0x04ef, 0x0500, 0x050f, 0x050f, 0x0517, 0x0531, 0x0546, - 0x0546, 0x0546, 0x0546, 0x055b, 0x0572, + 0x044e, 0x044e, 0x0462, 0x0474, 0x0489, 0x049b, 0x04ac, 0x04c1, + 0x04dc, 0x04ef, 0x04ef, 0x04ef, 0x0500, 0x050f, 0x050f, 0x0517, + 0x0531, 0x0546, 0x0546, 0x0546, 0x0546, 0x055b, 0x0572, + }, + }, + { // wo + "AfrikaansAmharikAraabAsameAserbayjaneBaskirBelarisBilgaarBaŋlaTibetanBre" + + "tonBosñakKatalanKorsCekWelsDanuwaAlmaaDiweyiDsongkaaGeregÀngaleEsper" + + "antooEspañolEstoñiyeBaskPersPëlFeylàndeFeroosFarañseIrlàndeGaluwaa b" + + "u EkosGalisiyeGaraniGujaratiHawsaEbrëEndoKrowatKereyolu AytiOngruwaa" + + "ArmaniyeHereroEndonesiyeIgboIslàndeItaliyeInuktititSaponeSorsiyeKasa" + + "xXmerKannadaaKoreyeKanuriKashmiriKurdiKirgiisLatinLiksàmbursuwaaLaaw" + + "LituyaniyeLetoniyeMalagasiMawriMaseduwaaneMalayalamMongoliyeMaratiMa" + + "layMaltBirmesNepaleNeyerlàndeNerwesiyeSewaOsitanOromoOjaPunjabiPolon" + + "ePastoPurtugeesKesuwaRomaasRumaniyeeRusKinyarwàndaSanskritSindiPenku" + + " SamiSinalaEslowaki (Eslowak)EsloweniyeSomali (làkk)AlbaneSerbSuwedu" + + "waaTamilTeluguTajisTayTigriñaTirkmenTonganTirkTatarUygurIkreniyeUrdu" + + "UsbekWendaWiyetnaamiyeWolofYidisYorubaSinuwaaBaliBembaSibiyanooMariC" + + "erokiKurdi gu DigguSorab-SuufFilipiyeHawayeHiligaynonSorab-KawIbibiy" + + "oKonkaniKuruksMendeManipuriMowakNiweyanPapiyamentoKisheSaxaSantaliSa" + + "mi gu SaalumLule SamiInari SamiEskolt SamiSiryakTamasis gu Digg Atla" + + "asLàkk wuñ xamulEspañol (Amerik Latin)Sinuwaa buñ woyofalSinuwaa bu " + + "cosaan", + []uint16{ // 615 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0009, 0x0009, 0x0010, 0x0010, + 0x0015, 0x001a, 0x001a, 0x001a, 0x0025, 0x002b, 0x0032, 0x0039, + 0x0039, 0x0039, 0x003f, 0x0046, 0x004c, 0x0053, 0x005a, 0x005a, + 0x005a, 0x005e, 0x005e, 0x0061, 0x0061, 0x0061, 0x0065, 0x006b, + 0x0070, 0x0076, 0x007e, 0x007e, 0x0083, 0x008a, 0x0094, 0x009c, + 0x00a5, 0x00a9, 0x00ad, 0x00b1, 0x00ba, 0x00ba, 0x00c0, 0x00c8, + 0x00c8, 0x00d0, 0x00df, 0x00e7, 0x00ed, 0x00f5, 0x00f5, 0x00fa, + 0x00ff, 0x0103, 0x0103, 0x0109, 0x0116, 0x011e, 0x0126, 0x012c, + // Entry 40 - 7F + 0x012c, 0x0136, 0x0136, 0x013a, 0x013a, 0x013a, 0x013a, 0x0142, + 0x0149, 0x0152, 0x0158, 0x0158, 0x015f, 0x015f, 0x015f, 0x015f, + 0x0164, 0x0164, 0x0168, 0x0170, 0x0176, 0x017c, 0x0184, 0x0189, + 0x0189, 0x0189, 0x0190, 0x0195, 0x01a4, 0x01a4, 0x01a4, 0x01a4, + 0x01a8, 0x01b2, 0x01b2, 0x01ba, 0x01c2, 0x01c2, 0x01c7, 0x01d2, + 0x01db, 0x01e4, 0x01ea, 0x01ef, 0x01f3, 0x01f9, 0x01f9, 0x01f9, + 0x01ff, 0x01ff, 0x020a, 0x020a, 0x0213, 0x0213, 0x0213, 0x0217, + 0x021d, 0x021d, 0x0222, 0x0225, 0x0225, 0x022c, 0x022c, 0x0232, + // Entry 80 - BF + 0x0237, 0x0240, 0x0246, 0x024c, 0x024c, 0x0255, 0x0258, 0x0264, + 0x026c, 0x026c, 0x0271, 0x027b, 0x027b, 0x0281, 0x0293, 0x029d, + 0x029d, 0x029d, 0x02ab, 0x02b1, 0x02b5, 0x02b5, 0x02b5, 0x02b5, + 0x02be, 0x02be, 0x02c3, 0x02c9, 0x02ce, 0x02d1, 0x02d9, 0x02e0, + 0x02e0, 0x02e6, 0x02ea, 0x02ea, 0x02ef, 0x02ef, 0x02f4, 0x02fc, + 0x0300, 0x0305, 0x030a, 0x0316, 0x0316, 0x0316, 0x031b, 0x031b, + 0x0320, 0x0326, 0x0326, 0x032d, 0x032d, 0x032d, 0x032d, 0x032d, + 0x032d, 0x032d, 0x032d, 0x032d, 0x032d, 0x032d, 0x032d, 0x032d, + // Entry C0 - FF + 0x032d, 0x032d, 0x032d, 0x032d, 0x032d, 0x032d, 0x032d, 0x032d, + 0x032d, 0x032d, 0x032d, 0x032d, 0x032d, 0x032d, 0x032d, 0x032d, + 0x032d, 0x032d, 0x032d, 0x0331, 0x0331, 0x0331, 0x0331, 0x0331, + 0x0331, 0x0331, 0x0336, 0x0336, 0x0336, 0x0336, 0x0336, 0x0336, + 0x0336, 0x0336, 0x0336, 0x0336, 0x0336, 0x0336, 0x0336, 0x0336, + 0x0336, 0x0336, 0x0336, 0x0336, 0x0336, 0x0336, 0x0336, 0x0336, + 0x0336, 0x0336, 0x0336, 0x0336, 0x0336, 0x0336, 0x033f, 0x033f, + 0x033f, 0x033f, 0x033f, 0x0343, 0x0343, 0x0343, 0x0343, 0x0349, + // Entry 100 - 13F + 0x0349, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, + 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, 0x0357, + 0x0361, 0x0361, 0x0361, 0x0361, 0x0361, 0x0361, 0x0361, 0x0361, + 0x0361, 0x0361, 0x0361, 0x0361, 0x0361, 0x0361, 0x0361, 0x0361, + 0x0361, 0x0361, 0x0369, 0x0369, 0x0369, 0x0369, 0x0369, 0x0369, + 0x0369, 0x0369, 0x0369, 0x0369, 0x0369, 0x0369, 0x0369, 0x0369, + 0x0369, 0x0369, 0x0369, 0x0369, 0x0369, 0x0369, 0x0369, 0x0369, + 0x0369, 0x0369, 0x0369, 0x0369, 0x0369, 0x0369, 0x0369, 0x0369, + // Entry 140 - 17F + 0x0369, 0x0369, 0x0369, 0x0369, 0x036f, 0x036f, 0x0379, 0x0379, + 0x0379, 0x0382, 0x0382, 0x0382, 0x0382, 0x0389, 0x0389, 0x0389, + 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, + 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, + 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, + 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0389, 0x0390, + 0x0390, 0x0390, 0x0390, 0x0390, 0x0390, 0x0390, 0x0396, 0x0396, + 0x0396, 0x0396, 0x0396, 0x0396, 0x0396, 0x0396, 0x0396, 0x0396, + // Entry 180 - 1BF + 0x0396, 0x0396, 0x0396, 0x0396, 0x0396, 0x0396, 0x0396, 0x0396, + 0x0396, 0x0396, 0x0396, 0x0396, 0x0396, 0x0396, 0x0396, 0x0396, + 0x0396, 0x0396, 0x0396, 0x0396, 0x0396, 0x0396, 0x0396, 0x0396, + 0x0396, 0x0396, 0x0396, 0x0396, 0x0396, 0x039b, 0x039b, 0x039b, + 0x039b, 0x039b, 0x039b, 0x039b, 0x039b, 0x039b, 0x03a3, 0x03a8, + 0x03a8, 0x03a8, 0x03a8, 0x03a8, 0x03a8, 0x03a8, 0x03a8, 0x03a8, + 0x03a8, 0x03a8, 0x03a8, 0x03a8, 0x03a8, 0x03a8, 0x03a8, 0x03a8, + 0x03a8, 0x03af, 0x03af, 0x03af, 0x03af, 0x03af, 0x03af, 0x03af, + // Entry 1C0 - 1FF + 0x03af, 0x03af, 0x03af, 0x03af, 0x03af, 0x03af, 0x03af, 0x03af, + 0x03af, 0x03af, 0x03af, 0x03af, 0x03af, 0x03ba, 0x03ba, 0x03ba, + 0x03ba, 0x03ba, 0x03ba, 0x03ba, 0x03ba, 0x03ba, 0x03ba, 0x03ba, + 0x03ba, 0x03ba, 0x03ba, 0x03bf, 0x03bf, 0x03bf, 0x03bf, 0x03bf, + 0x03bf, 0x03bf, 0x03bf, 0x03bf, 0x03bf, 0x03bf, 0x03bf, 0x03bf, + 0x03bf, 0x03bf, 0x03c3, 0x03c3, 0x03c3, 0x03c3, 0x03ca, 0x03ca, + 0x03ca, 0x03ca, 0x03ca, 0x03ca, 0x03ca, 0x03ca, 0x03ca, 0x03ca, + 0x03ca, 0x03ca, 0x03ca, 0x03ca, 0x03ca, 0x03ca, 0x03ca, 0x03ca, + // Entry 200 - 23F + 0x03ca, 0x03ca, 0x03ca, 0x03d8, 0x03e1, 0x03eb, 0x03f6, 0x03f6, + 0x03f6, 0x03f6, 0x03f6, 0x03f6, 0x03f6, 0x03f6, 0x03f6, 0x03f6, + 0x03f6, 0x03f6, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, + 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, + 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x03fc, + 0x03fc, 0x03fc, 0x03fc, 0x03fc, 0x0412, 0x0412, 0x0412, 0x0412, + 0x0422, 0x0422, 0x0422, 0x0422, 0x0422, 0x0422, 0x0422, 0x0422, + 0x0422, 0x0422, 0x0422, 0x0422, 0x0422, 0x0422, 0x0422, 0x0422, + // Entry 240 - 27F + 0x0422, 0x0422, 0x0422, 0x0422, 0x0422, 0x0422, 0x0422, 0x0422, + 0x0422, 0x0422, 0x0422, 0x0422, 0x0422, 0x0422, 0x0422, 0x0422, + 0x0422, 0x0422, 0x0422, 0x0422, 0x0422, 0x0422, 0x0422, 0x0422, + 0x0439, 0x0439, 0x0439, 0x0439, 0x0439, 0x0439, 0x0439, 0x0439, + 0x0439, 0x0439, 0x0439, 0x0439, 0x0439, 0x044d, 0x045e, }, }, { // xog @@ -14727,7 +15849,7 @@ var langHeaders = [252]header{ "lupotugiiziOlulomaniyaOlulasaOlunarwandaOlusomaliyaOluswideniOlutami" + "iruOluttaayiOlutakeOluyukurayineOlu-uruduOluvyetinaamuOluyorubaOluca" + "yinaOluzzuluOlusoga", - []uint16{ // 576 elements + []uint16{ // 578 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0009, 0x0014, 0x0014, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x0028, 0x0035, @@ -14808,7 +15930,9 @@ var langHeaders = [252]header{ 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, - 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01af, + 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + // Entry 240 - 27F + 0x01a8, 0x01af, }, }, { // yav @@ -14817,7 +15941,7 @@ var langHeaders = [252]header{ "vanɛkímɛɛkolíemáliɛbímanɛnunipálɛnilándɛnupunsapíɛ́nupolonɛ́ɛnupɔlit" + "ukɛ́ɛnulumɛ́ŋɛnulúsenuluándɛ́ɛnusomalíɛnusuetuanutámulenutáyɛnutúluk" + "enukeleniɛ́ŋɛnulutúnufiɛtnamíɛŋnuyolúpasinúɛnusulúnuasue", - []uint16{ // 579 elements + []uint16{ // 581 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x000f, 0x000f, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x001e, 0x0027, @@ -14900,7 +16024,7 @@ var langHeaders = [252]header{ 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, // Entry 240 - 27F - 0x01a7, 0x01a7, 0x01ad, + 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01ad, }, }, { // yi @@ -14924,7 +16048,7 @@ var langHeaders = [252]header{ "ּרייסישרוסינישסיציליאַנישסקאטסאַלט־אירישאונטער שלעזישslyסומערישקאמא" + "ריששלעזישטיגרעאומבאַוואוסטע שפּראַךמערב פֿלעמישפֿלעמישסערבא־קראאַטי" + "שקאנגא־סוואַהיליש", - []uint16{ // 611 elements + []uint16{ // 613 elements // Entry 0 - 3F 0x0000, 0x000e, 0x000e, 0x000e, 0x0024, 0x0024, 0x0036, 0x004a, 0x005a, 0x006a, 0x006a, 0x006a, 0x008a, 0x008a, 0x009e, 0x00b0, @@ -14959,59 +16083,59 @@ var langHeaders = [252]header{ 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, - 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06f8, 0x06f8, 0x06f8, + 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06e6, 0x06f8, 0x06f8, 0x06f8, 0x06f8, 0x06f8, 0x06f8, 0x06f8, 0x06f8, 0x06f8, 0x06f8, // Entry 100 - 13F - 0x06f8, 0x06f8, 0x06f8, 0x070e, 0x070e, 0x071e, 0x071e, 0x071e, - 0x071e, 0x071e, 0x071e, 0x071e, 0x071e, 0x071e, 0x071e, 0x0738, - 0x0738, 0x0738, 0x0738, 0x074e, 0x074e, 0x074e, 0x074e, 0x074e, - 0x074e, 0x074e, 0x074e, 0x074e, 0x0763, 0x0763, 0x0763, 0x0763, - 0x0763, 0x0777, 0x0777, 0x0777, 0x0777, 0x0777, 0x0799, 0x0799, - 0x07b1, 0x07c9, 0x07c9, 0x07c9, 0x07c9, 0x07c9, 0x07c9, 0x07c9, - 0x07c9, 0x07c9, 0x07c9, 0x07c9, 0x07e4, 0x0801, 0x0801, 0x0801, - 0x0801, 0x080b, 0x080b, 0x0827, 0x0827, 0x0827, 0x0827, 0x0827, + 0x06f8, 0x06f8, 0x06f8, 0x06f8, 0x070e, 0x070e, 0x071e, 0x071e, + 0x071e, 0x071e, 0x071e, 0x071e, 0x071e, 0x071e, 0x071e, 0x071e, + 0x0738, 0x0738, 0x0738, 0x0738, 0x074e, 0x074e, 0x074e, 0x074e, + 0x074e, 0x074e, 0x074e, 0x074e, 0x074e, 0x0763, 0x0763, 0x0763, + 0x0763, 0x0763, 0x0777, 0x0777, 0x0777, 0x0777, 0x0777, 0x0799, + 0x0799, 0x07b1, 0x07c9, 0x07c9, 0x07c9, 0x07c9, 0x07c9, 0x07c9, + 0x07c9, 0x07c9, 0x07c9, 0x07c9, 0x07c9, 0x07e4, 0x0801, 0x0801, + 0x0801, 0x0801, 0x080b, 0x080b, 0x0827, 0x0827, 0x0827, 0x0827, // Entry 140 - 17F - 0x0827, 0x0827, 0x0827, 0x0827, 0x083e, 0x083e, 0x083e, 0x083e, - 0x0858, 0x0858, 0x0858, 0x0858, 0x0858, 0x0858, 0x0858, 0x0858, - 0x0858, 0x0868, 0x0868, 0x0868, 0x0880, 0x0880, 0x0880, 0x0880, + 0x0827, 0x0827, 0x0827, 0x0827, 0x0827, 0x083e, 0x083e, 0x083e, + 0x083e, 0x0858, 0x0858, 0x0858, 0x0858, 0x0858, 0x0858, 0x0858, + 0x0858, 0x0858, 0x0868, 0x0868, 0x0868, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, 0x0880, - 0x0880, 0x0880, 0x0880, 0x088e, 0x088e, 0x088e, 0x088e, 0x088e, + 0x0880, 0x0880, 0x0880, 0x0880, 0x088e, 0x088e, 0x088e, 0x088e, // Entry 180 - 1BF - 0x088e, 0x088e, 0x089a, 0x089a, 0x089a, 0x089a, 0x089a, 0x089a, - 0x089a, 0x089a, 0x089a, 0x089a, 0x089a, 0x08a2, 0x08a2, 0x08a2, + 0x088e, 0x088e, 0x088e, 0x089a, 0x089a, 0x089a, 0x089a, 0x089a, + 0x089a, 0x089a, 0x089a, 0x089a, 0x089a, 0x089a, 0x089a, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, - 0x08a2, 0x08a2, 0x08bc, 0x08bc, 0x08d0, 0x08d0, 0x08d0, 0x08d0, + 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08bc, 0x08bc, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, // Entry 1C0 - 1FF 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08d0, - 0x08d0, 0x08e7, 0x08e7, 0x08e7, 0x08e7, 0x08e7, 0x08e7, 0x08f7, - 0x08f7, 0x08f7, 0x08f7, 0x08f7, 0x08f7, 0x08f7, 0x08f7, 0x08f7, - 0x08f7, 0x08f7, 0x08f7, 0x0905, 0x0905, 0x0905, 0x0905, 0x0905, + 0x08d0, 0x08d0, 0x08d0, 0x08e7, 0x08e7, 0x08e7, 0x08e7, 0x08e7, + 0x08e7, 0x08f7, 0x08f7, 0x08f7, 0x08f7, 0x08f7, 0x08f7, 0x08f7, + 0x08f7, 0x08f7, 0x08f7, 0x08f7, 0x08f7, 0x0905, 0x0905, 0x0905, 0x0905, 0x0905, 0x0905, 0x0905, 0x0905, 0x0905, 0x0905, 0x0905, - 0x091b, 0x0925, 0x0925, 0x0925, 0x0925, 0x0925, 0x0925, 0x0925, - 0x0925, 0x0939, 0x0939, 0x0939, 0x0939, 0x0939, 0x0939, 0x0952, + 0x0905, 0x0905, 0x091b, 0x0925, 0x0925, 0x0925, 0x0925, 0x0925, + 0x0925, 0x0925, 0x0925, 0x0939, 0x0939, 0x0939, 0x0939, 0x0939, // Entry 200 - 23F - 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, - 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, 0x0963, 0x0971, 0x0971, - 0x0971, 0x097d, 0x097d, 0x097d, 0x097d, 0x097d, 0x097d, 0x0987, + 0x0939, 0x0952, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, + 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, 0x0955, 0x0963, + 0x0971, 0x0971, 0x0971, 0x097d, 0x097d, 0x097d, 0x097d, 0x097d, + 0x097d, 0x0987, 0x0987, 0x0987, 0x0987, 0x0987, 0x0987, 0x0987, 0x0987, 0x0987, 0x0987, 0x0987, 0x0987, 0x0987, 0x0987, 0x0987, 0x0987, 0x0987, 0x0987, 0x0987, 0x0987, 0x0987, 0x0987, 0x0987, - 0x0987, 0x0987, 0x0987, 0x0987, 0x0987, 0x0987, 0x09b0, 0x09b0, - 0x09b0, 0x09b0, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, + 0x09b0, 0x09b0, 0x09b0, 0x09b0, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, // Entry 240 - 27F 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, - 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09d5, 0x09d5, 0x09d5, - 0x09d5, 0x09f1, 0x0a11, + 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09c7, 0x09d5, + 0x09d5, 0x09d5, 0x09d5, 0x09f1, 0x0a11, }, }, { // yo @@ -15030,9 +16154,9 @@ var langHeaders = [252]header{ "niaÈdè ara SomaliaÈdè AlbaniaÈdè SerbiaÈdè SesotoÈdè SudaniÈdè Suwid" + "iisiÈdè SwahiliÈdè TamiliÈdè TeluguÈdè TaiÈdè TigrinyaÈdè TurkmenÈdè" + " TọọkisiÈdè UkaniaÈdè UduÈdè UzbekÈdè JetinamuÈdè XhosaÈdè YiddishiÈ" + - "dè YorùbáÈdè MandariÈdè ṢuluÈdè TagalogiÈdè KlingoniÈdè Serbo-Croati" + + "dè YorùbáÈdè MandariÈdè ṢuluÈdè FilipinoÈdè KlingoniÈdè Serbo-Croati" + "ani", - []uint16{ // 610 elements + []uint16{ // 612 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x000e, 0x0019, 0x0026, 0x0026, 0x0033, 0x003b, 0x003b, 0x003b, 0x004c, 0x004c, 0x005a, 0x0067, @@ -15074,7 +16198,7 @@ var langHeaders = [252]header{ 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, 0x04f7, - 0x04f7, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, + 0x04f7, 0x04f7, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, @@ -15109,7 +16233,7 @@ var langHeaders = [252]header{ 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, - 0x0505, 0x0505, 0x0505, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, + 0x0505, 0x0505, 0x0505, 0x0505, 0x0505, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, @@ -15119,7 +16243,7 @@ var langHeaders = [252]header{ 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, 0x0513, - 0x0513, 0x0528, + 0x0513, 0x0513, 0x0513, 0x0528, }, }, { // yo-BJ @@ -15190,11 +16314,141 @@ var langHeaders = [252]header{ "里文瑟爾卡普文東桑海文古愛爾蘭文薩莫吉希亞文希爾哈文撣文阿拉伯文(查德)希達摩文下西利西亞文塞拉亞文南薩米文魯勒薩米文伊納裡薩米文斯" + "科特薩米文索尼基文索格底亞納文蘇拉南東墎文塞雷爾文薩霍文沙特菲士蘭文蘇庫馬文蘇蘇文蘇美文葛摩文古敘利亞文敘利亞文西利西亞文圖盧文提姆" + "文特索文泰雷諾文泰頓文蒂格雷文提夫文托克勞文查庫爾文克林貢文特林基特文塔里什文塔馬奇克文東加文(尼亞薩)托比辛文圖羅尤文太魯閣文特薩" + - "克尼恩文欽西安文穆斯林塔特文圖姆布卡文吐瓦魯文北桑海文土凡文塔馬齊格特文沃蒂艾克文烏加列文姆本杜文根語言瓦伊文威尼斯文維普森文西佛蘭" + - "德文美茵-法蘭克尼亞文沃提克文佛羅文溫舊文瓦瑟文瓦拉莫文瓦瑞文瓦紹文沃皮瑞文吳語卡爾梅克文明格列爾文索加文瑤文雅浦文洋卞文耶姆巴文奈" + - "恩加圖文粵語薩波特克文布列斯符號西蘭文澤納加文標準摩洛哥塔馬塞特文祖尼文無語言內容扎扎文現代標準阿拉伯文高地德文(瑞士)低地薩克遜文" + - "佛蘭芒文摩爾多瓦文塞爾維亞克羅埃西亞文史瓦希里文(剛果)簡體中文繁體中文", - []uint16{ // 613 elements + "克尼恩文欽西安文穆斯林塔特文圖姆布卡文吐瓦魯文北桑海文土凡文塔馬齊格特文沃蒂艾克文烏加列文姆本杜文未知語言瓦伊文威尼斯文維普森文西佛" + + "蘭德文美茵-法蘭克尼亞文沃提克文佛羅文溫舊文瓦瑟文瓦拉莫文瓦瑞文瓦紹文沃皮瑞文吳語卡爾梅克文明格列爾文索加文瑤文雅浦文洋卞文耶姆巴文" + + "奈恩加圖文粵語薩波特克文布列斯符號西蘭文澤納加文標準摩洛哥塔馬塞特文祖尼文無語言內容扎扎文現代標準阿拉伯文高地德文(瑞士)低地薩克遜" + + "文佛蘭芒文摩爾多瓦文塞爾維亞克羅埃西亞文史瓦希里文(剛果)簡體中文繁體中文", + []uint16{ // 615 elements + // Entry 0 - 3F + 0x0000, 0x0009, 0x0018, 0x0027, 0x0036, 0x003f, 0x004e, 0x005a, + 0x0066, 0x0072, 0x007e, 0x008a, 0x0099, 0x00a8, 0x00b7, 0x00c6, + 0x00d5, 0x00e1, 0x00ed, 0x00f3, 0x0102, 0x0111, 0x0123, 0x012c, + 0x0138, 0x0144, 0x014d, 0x0156, 0x0168, 0x0174, 0x0180, 0x0189, + 0x018f, 0x019b, 0x01a4, 0x01ad, 0x01b6, 0x01bc, 0x01c5, 0x01d1, + 0x01e0, 0x01ec, 0x01f5, 0x01fe, 0x0207, 0x0210, 0x0219, 0x021f, + 0x0231, 0x023d, 0x024f, 0x025e, 0x026a, 0x0279, 0x0282, 0x028b, + 0x0297, 0x02a3, 0x02b5, 0x02c7, 0x02d0, 0x02dc, 0x02eb, 0x02f7, + // Entry 40 - 7F + 0x0300, 0x0309, 0x0319, 0x0322, 0x032e, 0x0340, 0x0349, 0x0352, + 0x035e, 0x036a, 0x0370, 0x0379, 0x0385, 0x038e, 0x039a, 0x03a6, + 0x03b2, 0x03be, 0x03c7, 0x03d3, 0x03d9, 0x03e5, 0x03f4, 0x0400, + 0x0409, 0x0415, 0x0424, 0x042d, 0x0439, 0x0442, 0x044b, 0x0457, + 0x045d, 0x0469, 0x047b, 0x048a, 0x0499, 0x04a5, 0x04ae, 0x04ba, + 0x04cc, 0x04d5, 0x04e1, 0x04ea, 0x04f6, 0x04ff, 0x0508, 0x0517, + 0x0523, 0x052f, 0x0538, 0x054d, 0x055f, 0x056e, 0x057a, 0x0586, + 0x0595, 0x05a4, 0x05b0, 0x05bc, 0x05c8, 0x05d4, 0x05dd, 0x05e6, + // Entry 80 - BF + 0x05f2, 0x05fe, 0x060a, 0x0616, 0x061f, 0x062e, 0x0634, 0x0640, + 0x0646, 0x064f, 0x0658, 0x0667, 0x0670, 0x067c, 0x068b, 0x069d, + 0x06a9, 0x06b8, 0x06c4, 0x06d6, 0x06e5, 0x06f1, 0x06fd, 0x0706, + 0x070f, 0x071e, 0x072a, 0x0736, 0x0742, 0x0748, 0x075a, 0x0766, + 0x0775, 0x077e, 0x078a, 0x0796, 0x079f, 0x07ab, 0x07b7, 0x07c3, + 0x07cc, 0x07db, 0x07e4, 0x07ed, 0x07fc, 0x0805, 0x0811, 0x081a, + 0x0826, 0x0832, 0x0838, 0x083e, 0x0847, 0x0850, 0x085c, 0x0868, + 0x0874, 0x0889, 0x089b, 0x08a4, 0x08b0, 0x08bc, 0x08cb, 0x08d7, + // Entry C0 - FF + 0x08ef, 0x08fe, 0x0907, 0x0910, 0x091c, 0x0928, 0x0937, 0x0946, + 0x0961, 0x0961, 0x0970, 0x0985, 0x0997, 0x09a0, 0x09ac, 0x09be, + 0x09ca, 0x09d3, 0x09df, 0x09e8, 0x09f7, 0x0a00, 0x0a0c, 0x0a1e, + 0x0a2a, 0x0a33, 0x0a3f, 0x0a4b, 0x0a54, 0x0a5d, 0x0a69, 0x0a78, + 0x0a87, 0x0a93, 0x0a9c, 0x0aa8, 0x0ab1, 0x0ac0, 0x0ad8, 0x0aea, + 0x0af6, 0x0b02, 0x0b0b, 0x0b17, 0x0b26, 0x0b32, 0x0b3b, 0x0b44, + 0x0b50, 0x0b59, 0x0b65, 0x0b71, 0x0b7a, 0x0b7a, 0x0b83, 0x0b8c, + 0x0b98, 0x0ba1, 0x0bad, 0x0bb6, 0x0bc2, 0x0bce, 0x0bdd, 0x0be9, + // Entry 100 - 13F + 0x0bf5, 0x0c0a, 0x0c16, 0x0c22, 0x0c67, 0x0c82, 0x0c8e, 0x0c9a, + 0x0ca9, 0x0cb2, 0x0cbe, 0x0cc7, 0x0cd6, 0x0cdf, 0x0ceb, 0x0cf7, + 0x0d03, 0x0d12, 0x0d1e, 0x0d2d, 0x0d36, 0x0d42, 0x0d4b, 0x0d54, + 0x0d60, 0x0d6f, 0x0d7b, 0x0d8a, 0x0d93, 0x0d9f, 0x0dae, 0x0dba, + 0x0dd2, 0x0ddb, 0x0de7, 0x0df9, 0x0dff, 0x0e0b, 0x0e17, 0x0e20, + 0x0e39, 0x0e4b, 0x0e5d, 0x0e69, 0x0e72, 0x0e7e, 0x0e84, 0x0e8d, + 0x0e99, 0x0eb4, 0x0ebd, 0x0ed2, 0x0ede, 0x0ef0, 0x0f05, 0x0f11, + 0x0f1a, 0x0f29, 0x0f32, 0x0f3e, 0x0f4a, 0x0f5c, 0x0f65, 0x0f74, + // Entry 140 - 17F + 0x0f7d, 0x0f86, 0x0f8f, 0x0f98, 0x0fa4, 0x0fb3, 0x0fc2, 0x0fcb, + 0x0fd1, 0x0fdd, 0x0fe3, 0x0fec, 0x0ff5, 0x1004, 0x1010, 0x101c, + 0x102b, 0x1046, 0x104f, 0x105e, 0x106a, 0x107d, 0x108f, 0x109b, + 0x10b0, 0x10bc, 0x10c5, 0x10ce, 0x10da, 0x10e3, 0x10f2, 0x10fe, + 0x110a, 0x1116, 0x1128, 0x1131, 0x113a, 0x1143, 0x114c, 0x1155, + 0x1161, 0x116a, 0x1179, 0x1182, 0x118e, 0x119a, 0x11b3, 0x11bc, + 0x11cb, 0x11d7, 0x11f0, 0x120b, 0x121a, 0x1229, 0x1235, 0x1241, + 0x124d, 0x1256, 0x1262, 0x126e, 0x127a, 0x1283, 0x128f, 0x1298, + // Entry 180 - 1BF + 0x12a4, 0x12b3, 0x12c2, 0x12d1, 0x12dd, 0x12e9, 0x12f2, 0x12f2, + 0x12fb, 0x1307, 0x1316, 0x1328, 0x1337, 0x1343, 0x134c, 0x1355, + 0x135e, 0x1367, 0x1370, 0x137c, 0x1385, 0x1391, 0x139d, 0x13a9, + 0x13b5, 0x13be, 0x13c7, 0x13d3, 0x13dc, 0x13e5, 0x13ee, 0x140c, + 0x141e, 0x1427, 0x1430, 0x143f, 0x144e, 0x1457, 0x1466, 0x1472, + 0x147b, 0x1487, 0x1490, 0x149c, 0x14a8, 0x14b7, 0x14c6, 0x14d2, + 0x14de, 0x14ed, 0x14fc, 0x1505, 0x1511, 0x151a, 0x1526, 0x1532, + 0x153e, 0x1547, 0x1556, 0x1562, 0x156e, 0x1577, 0x1586, 0x1592, + // Entry 1C0 - 1FF + 0x15a7, 0x15b3, 0x15bf, 0x15ce, 0x15dd, 0x15ec, 0x15f8, 0x1604, + 0x1610, 0x1625, 0x1631, 0x163d, 0x1649, 0x165b, 0x1664, 0x1670, + 0x1685, 0x169a, 0x16ac, 0x16b8, 0x16ca, 0x16d6, 0x16e5, 0x16f4, + 0x1700, 0x170c, 0x171e, 0x1727, 0x1745, 0x1757, 0x1763, 0x1772, + 0x1784, 0x1793, 0x179c, 0x17a8, 0x17b7, 0x17c6, 0x17d5, 0x17e7, + 0x17f0, 0x17fc, 0x1808, 0x1820, 0x182c, 0x1838, 0x1844, 0x1856, + 0x185f, 0x1868, 0x1874, 0x1880, 0x1899, 0x18a8, 0x18b4, 0x18bd, + 0x18c6, 0x18d5, 0x18e1, 0x18f0, 0x1902, 0x190e, 0x1914, 0x192c, + // Entry 200 - 23F + 0x1938, 0x194a, 0x1956, 0x1962, 0x1971, 0x1983, 0x1995, 0x19a1, + 0x19b3, 0x19c5, 0x19d1, 0x19da, 0x19ec, 0x19f8, 0x1a01, 0x1a0a, + 0x1a13, 0x1a22, 0x1a2e, 0x1a3d, 0x1a46, 0x1a4f, 0x1a58, 0x1a64, + 0x1a6d, 0x1a79, 0x1a82, 0x1a8e, 0x1a9a, 0x1aa6, 0x1ab5, 0x1ac1, + 0x1ad0, 0x1ae8, 0x1af4, 0x1b00, 0x1b0c, 0x1b1e, 0x1b2a, 0x1b3c, + 0x1b4b, 0x1b57, 0x1b63, 0x1b6c, 0x1b7e, 0x1b8d, 0x1b99, 0x1ba5, + 0x1bb1, 0x1bba, 0x1bc6, 0x1bd2, 0x1be1, 0x1bfa, 0x1c06, 0x1c0f, + 0x1c18, 0x1c21, 0x1c2d, 0x1c36, 0x1c3f, 0x1c4b, 0x1c51, 0x1c60, + // Entry 240 - 27F + 0x1c6f, 0x1c78, 0x1c7e, 0x1c87, 0x1c90, 0x1c9c, 0x1cab, 0x1cb1, + 0x1cc0, 0x1ccf, 0x1cd8, 0x1ce4, 0x1d02, 0x1d0b, 0x1d1a, 0x1d23, + 0x1d3b, 0x1d3b, 0x1d3b, 0x1d53, 0x1d53, 0x1d53, 0x1d53, 0x1d53, + 0x1d53, 0x1d53, 0x1d53, 0x1d53, 0x1d53, 0x1d53, 0x1d65, 0x1d71, + 0x1d71, 0x1d71, 0x1d80, 0x1d9e, 0x1db9, 0x1dc5, 0x1dd1, + }, + }, + { // yue-Hans + "阿法文阿布哈兹文阿纬斯陀文南非荷兰文阿坎文阿姆哈拉文阿拉贡文阿拉伯文阿萨姆文阿瓦尔文艾马拉文亚塞拜然文巴什客尔文白俄罗斯文保加利亚文比斯拉马文班" + + "巴拉文孟加拉文藏文布列塔尼文波士尼亚文加泰罗尼亚文车臣文查莫洛文科西嘉文克里文捷克文宗教斯拉夫文楚瓦什文威尔斯文丹麦文德文迪维西文宗" + + "卡文埃维文希腊文英文世界文西班牙文爱沙尼亚文巴斯克文波斯文富拉文芬兰文斐济文法罗文法文西弗里西亚文爱尔兰文苏格兰盖尔文加利西亚文瓜拉" + + "尼文古吉拉特文曼岛文豪撒文希伯来文北印度文西里莫图土文克罗埃西亚文海地文匈牙利文亚美尼亚文赫雷罗文国际文印尼文国际文(E)伊布文四川" + + "彝文依奴皮维克文伊多文冰岛文义大利文因纽特文日文爪哇文乔治亚文刚果文吉库尤文广亚马文哈萨克文格陵兰文高棉文坎那达文韩文卡努里文喀什米" + + "尔文库尔德文科米文康瓦耳文吉尔吉斯文拉丁文卢森堡文干达文林堡文林加拉文寮文立陶宛文鲁巴加丹加文拉脱维亚文马拉加什文马绍尔文毛利文马其" + + "顿文马来亚拉姆文蒙古文马拉地文马来文马尔他文缅甸文诺鲁文北地毕列文尼泊尔文恩东加文荷兰文耐诺斯克挪威文巴克摩挪威文南地毕列文纳瓦霍文" + + "尼扬贾文奥克西坦文奥杰布瓦文奥罗莫文欧利亚文奥塞提文旁遮普文巴利文波兰文普什图文葡萄牙文盖楚瓦文罗曼斯文隆迪文罗马尼亚文俄文卢安达文" + + "梵文撒丁文信德文北方萨米文桑戈文僧伽罗文斯洛伐克文斯洛维尼亚文萨摩亚文塞内加尔文索马利文阿尔巴尼亚文塞尔维亚文斯瓦特文塞索托文巽他文" + + "瑞典文史瓦希里文坦米尔文泰卢固文塔吉克文泰文提格利尼亚文土库曼文突尼西亚文东加文土耳其文特松加文鞑靼文大溪地文维吾尔文乌克兰文乌都文" + + "乌兹别克文温达文越南文沃拉普克文瓦隆文沃洛夫文科萨文意第绪文约鲁巴文壮文中文祖鲁文亚齐文阿侨利文阿当莫文阿迪各文突尼斯阿拉伯文阿弗里" + + "希利文亚罕文阿伊努文阿卡德文阿拉巴马文阿留申文盖格阿尔巴尼亚文南阿尔泰文古英文昂加文阿拉米文马普切文阿拉奥纳文阿拉帕霍文阿尔及利亚阿" + + "拉伯文阿拉瓦克文摩洛哥阿拉伯文埃及阿拉伯文阿苏文美国手语阿斯图里亚文科塔瓦文阿瓦文俾路支文峇里文巴伐利亚文巴萨文巴姆穆文巴塔克托巴文" + + "戈马拉文贝扎文别姆巴文贝塔维文贝纳文富特文巴达加文西俾路支文博杰普尔文比科尔文比尼文班亚尔文康姆文锡克锡卡文比什奴普莱利亚文巴赫蒂亚" + + "里文布拉杰文布拉维文博多文阿库色文布里阿特文布吉斯文布鲁文比林文梅敦巴文卡多文加勒比文卡尤加文阿灿文宿雾文奇加文奇布查文查加文处奇斯" + + "文马里文契奴克文乔克托文奇佩瓦扬文柴罗基文沙伊安文索拉尼库尔德文科普特文卡皮兹文克里米亚半岛的土耳其文;克里米亚半岛的塔塔尔文法语克" + + "里奥尔混合语卡舒布文达科他文达尔格瓦文台塔文德拉瓦文斯拉夫多格里布文丁卡文扎尔马文多格来文下索布文中部杜顺文杜亚拉文中古荷兰文朱拉文" + + "迪尤拉文达萨文恩布文埃菲克文埃米利安文古埃及文艾卡朱克文埃兰文中古英文中尤皮克文依汪都文埃斯特雷马杜拉文芳族文菲律宾文托尔讷芬兰文丰" + + "文卡真法文中古法文古法文法兰克-普罗旺斯文北弗里西亚文东弗里西亚文弗留利文加族文加告兹文赣语加约文葛巴亚文索罗亚斯德教达里文吉兹文吉" + + "尔伯特群岛文吉拉基文中古高地德文古高地日耳曼文孔卡尼文冈德文科隆达罗文哥德文格列博文古希腊文德文(瑞士)瓦尤文弗拉弗拉文古西文圭契文" + + "海达文客家话夏威夷文斐济印地文希利盖农文赫梯文孟文上索布文湘语胡帕文伊班文伊比比奥文伊洛阔文印古什文英格里亚文牙买加克里奥尔英文逻辑" + + "文恩格姆巴文马恰美文犹太教-波斯文犹太阿拉伯文日德兰文卡拉卡尔帕克文卡比尔文卡琴文卡捷文卡姆巴文卡威文卡巴尔达文卡念布文卡塔布文马孔" + + "德文卡布威尔第文肯扬文科罗文坎刚文卡西文和阗文西桑海文科瓦文北扎扎其文卡库文卡伦金文金邦杜文科米-彼尔米亚克文贡根文科斯雷恩文克佩列" + + "文卡拉柴-包尔卡尔文塞拉利昂克里奥尔文基那来阿文卡累利阿文库鲁科文尚巴拉文巴菲亚文科隆文库密克文库特奈文拉迪诺文朗吉文拉亨达文兰巴文" + + "列兹干文新共同语言利古里亚文利伏尼亚文拉科塔文伦巴底文芒戈文洛齐文北卢尔文拉特加莱文鲁巴鲁鲁亚文路易塞诺文卢恩达文卢奥文卢晒文卢雅文" + + "文言文拉兹文马都拉文马法文马加伊文迈蒂利文望加锡文曼丁哥文马赛文马巴文莫克沙文曼达文门德文梅鲁文克里奥文(模里西斯)中古爱尔兰文马夸" + + "文美塔文米克马克文米南卡堡文满族文曼尼普里文莫霍克文莫西文西马里文蒙当文多种语言克里克文米兰德斯文马尔尼里文明打威文姆耶内文厄尔兹亚" + + "文马赞德兰文闽南语拿波里文纳马文低地德文尼瓦尔文尼亚斯文纽埃文阿沃那加文夸西奥文恩甘澎文诺盖文古诺尔斯文诺维亚文曼德文字 (N’Ko" + + ")北索托文努埃尔文古尼瓦尔文尼扬韦齐文尼扬科莱文尼奥啰文尼兹马文欧塞奇文鄂图曼土耳其文潘加辛文巴列维文潘帕嘉文帕皮阿门托文帛琉文庇卡底文" + + "尼日利亚皮钦语宾夕法尼亚德文门诺低地德文古波斯文普法尔茨德文腓尼基文皮埃蒙特文旁狄希腊文波那贝文普鲁士文古普罗旺斯文基切文钦博拉索海" + + "兰盖丘亚文拉贾斯坦诸文复活岛文拉罗通加文罗马格诺里文里菲亚诺文兰博文吉普赛文罗图马岛文卢森尼亚文罗维阿纳文罗马尼亚语系罗瓦文桑达韦文" + + "雅库特文萨玛利亚阿拉姆文萨布鲁文撒撒克文散塔利文索拉什特拉文甘拜文桑古文西西里文苏格兰文萨丁尼亚-萨萨里文南库尔德文塞讷卡文赛纳文瑟" + + "里文瑟尔卡普文东桑海文古爱尔兰文萨莫吉希亚文希尔哈文掸文阿拉伯文(查德)希达摩文下西利西亚文塞拉亚文南萨米文鲁勒萨米文伊纳里萨米文斯" + + "科特萨米文索尼基文索格底亚纳文苏拉南东墎文塞雷尔文萨霍文沙特菲士兰文苏库马文苏苏文苏美文葛摩文古叙利亚文叙利亚文西利西亚文图卢文提姆" + + "文特索文泰雷诺文泰顿文蒂格雷文提夫文托克劳文查库尔文克林贡文特林基特文塔里什文塔马奇克文东加文(尼亚萨)托比辛文图罗尤文太鲁阁文特萨" + + "克尼恩文钦西安文穆斯林塔特文图姆布卡文吐瓦鲁文北桑海文土凡文塔马齐格特文沃蒂艾克文乌加列文姆本杜文未知语言瓦伊文威尼斯文维普森文西佛" + + "兰德文美茵-法兰克尼亚文沃提克文佛罗文温旧文瓦瑟文瓦拉莫文瓦瑞文瓦绍文沃皮瑞文吴语卡尔梅克文明格列尔文索加文瑶文雅浦文洋卞文耶姆巴文" + + "奈恩加图文粤语萨波特克文布列斯符号西兰文泽纳加文标准摩洛哥塔马塞特文祖尼文无语言内容扎扎文现代标准阿拉伯文高地德文(瑞士)低地萨克逊" + + "文佛兰芒文摩尔多瓦文塞尔维亚克罗埃西亚文史瓦希里文(刚果)简体中文繁体中文", + []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0009, 0x0018, 0x0027, 0x0036, 0x003f, 0x004e, 0x005a, 0x0066, 0x0072, 0x007e, 0x008a, 0x0099, 0x00a8, 0x00b7, 0x00c6, @@ -15229,59 +16483,59 @@ var langHeaders = [252]header{ 0x0a2a, 0x0a33, 0x0a3f, 0x0a4b, 0x0a54, 0x0a5d, 0x0a69, 0x0a78, 0x0a87, 0x0a93, 0x0a9c, 0x0aa8, 0x0ab1, 0x0ac0, 0x0ad8, 0x0aea, 0x0af6, 0x0b02, 0x0b0b, 0x0b17, 0x0b26, 0x0b32, 0x0b3b, 0x0b44, - 0x0b50, 0x0b59, 0x0b65, 0x0b71, 0x0b7a, 0x0b83, 0x0b8c, 0x0b98, - 0x0ba1, 0x0bad, 0x0bb6, 0x0bc2, 0x0bce, 0x0bdd, 0x0be9, 0x0bf5, - // Entry 100 - 13F - 0x0c0a, 0x0c16, 0x0c22, 0x0c67, 0x0c82, 0x0c8e, 0x0c9a, 0x0ca9, - 0x0cb2, 0x0cbe, 0x0cc7, 0x0cd6, 0x0cdf, 0x0ceb, 0x0cf7, 0x0d03, - 0x0d12, 0x0d1e, 0x0d2d, 0x0d36, 0x0d42, 0x0d4b, 0x0d54, 0x0d60, - 0x0d6f, 0x0d7b, 0x0d8a, 0x0d93, 0x0d9f, 0x0dae, 0x0dba, 0x0dd2, - 0x0ddb, 0x0de7, 0x0df9, 0x0dff, 0x0e0b, 0x0e17, 0x0e20, 0x0e39, - 0x0e4b, 0x0e5d, 0x0e69, 0x0e72, 0x0e7e, 0x0e84, 0x0e8d, 0x0e99, - 0x0eb4, 0x0ebd, 0x0ed2, 0x0ede, 0x0ef0, 0x0f05, 0x0f11, 0x0f1a, - 0x0f29, 0x0f32, 0x0f3e, 0x0f4a, 0x0f5c, 0x0f65, 0x0f74, 0x0f7d, + 0x0b50, 0x0b59, 0x0b65, 0x0b71, 0x0b7a, 0x0b7a, 0x0b83, 0x0b8c, + 0x0b98, 0x0ba1, 0x0bad, 0x0bb6, 0x0bc2, 0x0bce, 0x0bdd, 0x0be9, + // Entry 100 - 13F + 0x0bf5, 0x0c0a, 0x0c16, 0x0c22, 0x0c67, 0x0c82, 0x0c8e, 0x0c9a, + 0x0ca9, 0x0cb2, 0x0cbe, 0x0cc7, 0x0cd6, 0x0cdf, 0x0ceb, 0x0cf7, + 0x0d03, 0x0d12, 0x0d1e, 0x0d2d, 0x0d36, 0x0d42, 0x0d4b, 0x0d54, + 0x0d60, 0x0d6f, 0x0d7b, 0x0d8a, 0x0d93, 0x0d9f, 0x0dae, 0x0dba, + 0x0dd2, 0x0ddb, 0x0de7, 0x0df9, 0x0dff, 0x0e0b, 0x0e17, 0x0e20, + 0x0e39, 0x0e4b, 0x0e5d, 0x0e69, 0x0e72, 0x0e7e, 0x0e84, 0x0e8d, + 0x0e99, 0x0eb4, 0x0ebd, 0x0ed2, 0x0ede, 0x0ef0, 0x0f05, 0x0f11, + 0x0f1a, 0x0f29, 0x0f32, 0x0f3e, 0x0f4a, 0x0f5c, 0x0f65, 0x0f74, // Entry 140 - 17F - 0x0f86, 0x0f8f, 0x0f98, 0x0fa4, 0x0fb3, 0x0fc2, 0x0fcb, 0x0fd1, - 0x0fdd, 0x0fe3, 0x0fec, 0x0ff5, 0x1004, 0x1010, 0x101c, 0x102b, - 0x1046, 0x104f, 0x105e, 0x106a, 0x107d, 0x108f, 0x109b, 0x10b0, - 0x10bc, 0x10c5, 0x10ce, 0x10da, 0x10e3, 0x10f2, 0x10fe, 0x110a, - 0x1116, 0x1128, 0x1131, 0x113a, 0x1143, 0x114c, 0x1155, 0x1161, - 0x116a, 0x1179, 0x1182, 0x118e, 0x119a, 0x11b3, 0x11bc, 0x11cb, - 0x11d7, 0x11f0, 0x120b, 0x121a, 0x1229, 0x1235, 0x1241, 0x124d, - 0x1256, 0x1262, 0x126e, 0x127a, 0x1283, 0x128f, 0x1298, 0x12a4, + 0x0f7d, 0x0f86, 0x0f8f, 0x0f98, 0x0fa4, 0x0fb3, 0x0fc2, 0x0fcb, + 0x0fd1, 0x0fdd, 0x0fe3, 0x0fec, 0x0ff5, 0x1004, 0x1010, 0x101c, + 0x102b, 0x1046, 0x104f, 0x105e, 0x106a, 0x107d, 0x108f, 0x109b, + 0x10b0, 0x10bc, 0x10c5, 0x10ce, 0x10da, 0x10e3, 0x10f2, 0x10fe, + 0x110a, 0x1116, 0x1128, 0x1131, 0x113a, 0x1143, 0x114c, 0x1155, + 0x1161, 0x116a, 0x1179, 0x1182, 0x118e, 0x119a, 0x11b3, 0x11bc, + 0x11cb, 0x11d7, 0x11f0, 0x120b, 0x121a, 0x1229, 0x1235, 0x1241, + 0x124d, 0x1256, 0x1262, 0x126e, 0x127a, 0x1283, 0x128f, 0x1298, // Entry 180 - 1BF - 0x12b3, 0x12c2, 0x12d1, 0x12dd, 0x12e9, 0x12f2, 0x12fb, 0x1307, - 0x1316, 0x1328, 0x1337, 0x1343, 0x134c, 0x1355, 0x135e, 0x1367, - 0x1370, 0x137c, 0x1385, 0x1391, 0x139d, 0x13a9, 0x13b5, 0x13be, - 0x13c7, 0x13d3, 0x13dc, 0x13e5, 0x13ee, 0x140c, 0x141e, 0x1427, - 0x1430, 0x143f, 0x144e, 0x1457, 0x1466, 0x1472, 0x147b, 0x1487, - 0x1490, 0x149c, 0x14a8, 0x14b7, 0x14c6, 0x14d2, 0x14de, 0x14ed, - 0x14fc, 0x1505, 0x1511, 0x151a, 0x1526, 0x1532, 0x153e, 0x1547, - 0x1556, 0x1562, 0x156e, 0x1577, 0x1586, 0x1592, 0x15a7, 0x15b3, + 0x12a4, 0x12b3, 0x12c2, 0x12d1, 0x12dd, 0x12e9, 0x12f2, 0x12f2, + 0x12fb, 0x1307, 0x1316, 0x1328, 0x1337, 0x1343, 0x134c, 0x1355, + 0x135e, 0x1367, 0x1370, 0x137c, 0x1385, 0x1391, 0x139d, 0x13a9, + 0x13b5, 0x13be, 0x13c7, 0x13d3, 0x13dc, 0x13e5, 0x13ee, 0x140c, + 0x141e, 0x1427, 0x1430, 0x143f, 0x144e, 0x1457, 0x1466, 0x1472, + 0x147b, 0x1487, 0x1490, 0x149c, 0x14a8, 0x14b7, 0x14c6, 0x14d2, + 0x14de, 0x14ed, 0x14fc, 0x1505, 0x1511, 0x151a, 0x1526, 0x1532, + 0x153e, 0x1547, 0x1556, 0x1562, 0x156e, 0x1577, 0x1586, 0x1592, // Entry 1C0 - 1FF - 0x15bf, 0x15ce, 0x15dd, 0x15ec, 0x15f8, 0x1604, 0x1610, 0x1625, - 0x1631, 0x163d, 0x1649, 0x165b, 0x1664, 0x1670, 0x1685, 0x169a, - 0x16ac, 0x16b8, 0x16ca, 0x16d6, 0x16e5, 0x16f4, 0x1700, 0x170c, - 0x171e, 0x1727, 0x1745, 0x1757, 0x1763, 0x1772, 0x1784, 0x1793, - 0x179c, 0x17a8, 0x17b7, 0x17c6, 0x17d5, 0x17e7, 0x17f0, 0x17fc, - 0x1808, 0x1820, 0x182c, 0x1838, 0x1844, 0x1856, 0x185f, 0x1868, - 0x1874, 0x1880, 0x1899, 0x18a8, 0x18b4, 0x18bd, 0x18c6, 0x18d5, - 0x18e1, 0x18f0, 0x1902, 0x190e, 0x1914, 0x192c, 0x1938, 0x194a, + 0x15a7, 0x15b3, 0x15bf, 0x15ce, 0x15dd, 0x15ec, 0x15f8, 0x1604, + 0x1610, 0x1625, 0x1631, 0x163d, 0x1649, 0x165b, 0x1664, 0x1670, + 0x1685, 0x169a, 0x16ac, 0x16b8, 0x16ca, 0x16d6, 0x16e5, 0x16f4, + 0x1700, 0x170c, 0x171e, 0x1727, 0x1745, 0x1757, 0x1763, 0x1772, + 0x1784, 0x1793, 0x179c, 0x17a8, 0x17b7, 0x17c6, 0x17d5, 0x17e7, + 0x17f0, 0x17fc, 0x1808, 0x1820, 0x182c, 0x1838, 0x1844, 0x1856, + 0x185f, 0x1868, 0x1874, 0x1880, 0x1899, 0x18a8, 0x18b4, 0x18bd, + 0x18c6, 0x18d5, 0x18e1, 0x18f0, 0x1902, 0x190e, 0x1914, 0x192c, // Entry 200 - 23F - 0x1956, 0x1962, 0x1971, 0x1983, 0x1995, 0x19a1, 0x19b3, 0x19c5, - 0x19d1, 0x19da, 0x19ec, 0x19f8, 0x1a01, 0x1a0a, 0x1a13, 0x1a22, - 0x1a2e, 0x1a3d, 0x1a46, 0x1a4f, 0x1a58, 0x1a64, 0x1a6d, 0x1a79, - 0x1a82, 0x1a8e, 0x1a9a, 0x1aa6, 0x1ab5, 0x1ac1, 0x1ad0, 0x1ae8, - 0x1af4, 0x1b00, 0x1b0c, 0x1b1e, 0x1b2a, 0x1b3c, 0x1b4b, 0x1b57, - 0x1b63, 0x1b6c, 0x1b7e, 0x1b8d, 0x1b99, 0x1ba5, 0x1bae, 0x1bb7, - 0x1bc3, 0x1bcf, 0x1bde, 0x1bf7, 0x1c03, 0x1c0c, 0x1c15, 0x1c1e, - 0x1c2a, 0x1c33, 0x1c3c, 0x1c48, 0x1c4e, 0x1c5d, 0x1c6c, 0x1c75, + 0x1938, 0x194a, 0x1956, 0x1962, 0x1971, 0x1983, 0x1995, 0x19a1, + 0x19b3, 0x19c5, 0x19d1, 0x19da, 0x19ec, 0x19f8, 0x1a01, 0x1a0a, + 0x1a13, 0x1a22, 0x1a2e, 0x1a3d, 0x1a46, 0x1a4f, 0x1a58, 0x1a64, + 0x1a6d, 0x1a79, 0x1a82, 0x1a8e, 0x1a9a, 0x1aa6, 0x1ab5, 0x1ac1, + 0x1ad0, 0x1ae8, 0x1af4, 0x1b00, 0x1b0c, 0x1b1e, 0x1b2a, 0x1b3c, + 0x1b4b, 0x1b57, 0x1b63, 0x1b6c, 0x1b7e, 0x1b8d, 0x1b99, 0x1ba5, + 0x1bb1, 0x1bba, 0x1bc6, 0x1bd2, 0x1be1, 0x1bfa, 0x1c06, 0x1c0f, + 0x1c18, 0x1c21, 0x1c2d, 0x1c36, 0x1c3f, 0x1c4b, 0x1c51, 0x1c60, // Entry 240 - 27F - 0x1c7b, 0x1c84, 0x1c8d, 0x1c99, 0x1ca8, 0x1cae, 0x1cbd, 0x1ccc, - 0x1cd5, 0x1ce1, 0x1cff, 0x1d08, 0x1d17, 0x1d20, 0x1d38, 0x1d38, - 0x1d38, 0x1d50, 0x1d50, 0x1d50, 0x1d50, 0x1d50, 0x1d50, 0x1d50, - 0x1d50, 0x1d50, 0x1d50, 0x1d50, 0x1d62, 0x1d6e, 0x1d6e, 0x1d6e, - 0x1d7d, 0x1d9b, 0x1db6, 0x1dc2, 0x1dce, + 0x1c6f, 0x1c78, 0x1c7e, 0x1c87, 0x1c90, 0x1c9c, 0x1cab, 0x1cb1, + 0x1cc0, 0x1ccf, 0x1cd8, 0x1ce4, 0x1d02, 0x1d0b, 0x1d1a, 0x1d23, + 0x1d3b, 0x1d3b, 0x1d3b, 0x1d53, 0x1d53, 0x1d53, 0x1d53, 0x1d53, + 0x1d53, 0x1d53, 0x1d53, 0x1d53, 0x1d53, 0x1d53, 0x1d65, 0x1d71, + 0x1d71, 0x1d71, 0x1d80, 0x1d9e, 0x1db9, 0x1dc5, 0x1dd1, }, }, { // zgh @@ -15291,7 +16545,7 @@ var langHeaders = [252]header{ "ⵉⵔⵎⴰⵏⵉⵜⵜⴰⵏⵉⴱⴰⵍⵉⵜⵜⴰⵀⵓⵍⴰⵏⴷⵉⵜⵜⴰⴱⵏⵊⴰⴱⵉⵜⵜⴰⴱⵓⵍⵓⵏⵉⵜⵜⴰⴱⵕⵟⵇⵉⵣⵜⵜⴰⵔⵓⵎⴰⵏⵉⵜⵜⴰⵔⵓ" + "ⵙⵉⵜⵜⴰⵔⵓⵡⴰⵏⴷⵉⵜⵜⴰⵙⵓⵎⴰⵍⵉⵜⵜⴰⵙⵡⵉⴷⵉⵜⵜⴰⵜⴰⵎⵉⵍⵜⵜⴰⵜⴰⵢⵍⴰⵏⴷⵉⵜⵜⴰⵜⵓⵔⴽⵉⵜⵜⵓⴽⵔⴰⵏⵉⵜⵜ" + "ⵓⵔⴷⵓⵜⵜⴰⴱⵉⵜⵏⴰⵎⵉⵜⵜⴰⵢⵔⵓⴱⴰⵜⵜⴰⵛⵉⵏⵡⵉⵜⵜⴰⵣⵓⵍⵓⵜⵜⴰⵎⴰⵣⵉⵖⵜ", - []uint16{ // 587 elements + []uint16{ // 589 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0012, 0x002a, 0x002a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x005d, 0x0078, @@ -15375,7 +16629,7 @@ var langHeaders = [252]header{ 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, // Entry 240 - 27F 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, - 0x0462, 0x0462, 0x047a, + 0x0462, 0x0462, 0x0462, 0x0462, 0x047a, }, }, { // zh @@ -15388,11 +16642,11 @@ var langHeaders = [252]header{ }, { // zh-Hant-HK "阿法爾文阿塞拜疆文巴什基爾文布里多尼文波斯尼亞文加泰隆尼亞文世界語加里西亞文印度文克羅地亞文意大利文格魯吉亞文坎納達文老撾文馬拉加斯文馬拉雅拉姆" + - "文馬耳他文奧里雅文盧旺達文信德語斯洛文尼亞文修納文索馬里文泰米爾文湯加文烏爾都文克里米亞韃靼文塞舌爾克里奧爾法文斯拉夫文吉爾伯特文瑞" + - "士德文苗語猶太波斯文扎扎其文克裡奧爾文盧歐文毛里裘斯克里奧爾文西非書面語言(N’ko)尼日利亞皮欽文阿羅馬尼亞語瓦爾皮里文廣東話摩洛" + - "哥標準塔馬齊格特文南阿塞拜疆文奧地利德文瑞士德語澳洲英文加拿大英文英國英文美國英文拉丁美洲西班牙文歐洲西班牙文墨西哥西班牙文加拿大法" + - "文瑞士法文荷蘭低地德文比利時荷蘭文巴西葡萄牙語歐洲葡萄牙文摩爾多瓦羅馬尼亞文剛果史瓦希里文", - []uint16{ // 611 elements + "文馬耳他文奧里雅文盧旺達文信德語斯洛文尼亞文修納文索馬里文泰米爾文突尼西亞文湯加文烏爾都文克里米亞韃靼文塞舌爾克里奧爾法文斯拉夫文吉" + + "爾伯特文瑞士德文苗語猶太波斯文扎扎其文克裡奧爾文盧歐文毛里裘斯克里奧爾文西非書面語言(N’ko)尼日利亞皮欽文阿羅馬尼亞語敍利亞文瓦" + + "爾皮里文廣東話摩洛哥標準塔馬齊格特文南阿塞拜疆文奧地利德文瑞士德語澳洲英文加拿大英文英國英文美國英文拉丁美洲西班牙文歐洲西班牙文墨西" + + "哥西班牙文加拿大法文瑞士法文比利時荷蘭文巴西葡萄牙文歐洲葡萄牙文摩爾多瓦羅馬尼亞文剛果史瓦希里文", + []uint16{ // 613 elements // Entry 0 - 3F 0x0000, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x001b, 0x002a, 0x002a, 0x002a, @@ -15416,70 +16670,70 @@ var langHeaders = [252]header{ 0x00ff, 0x00ff, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x011a, 0x011a, 0x0123, 0x012f, 0x012f, 0x012f, 0x012f, 0x012f, 0x012f, 0x012f, 0x012f, 0x013b, 0x013b, 0x013b, 0x013b, 0x013b, 0x013b, - 0x013b, 0x0144, 0x0144, 0x0144, 0x0144, 0x0144, 0x0144, 0x0144, - 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, - 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, - 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, - // Entry C0 - FF - 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, - 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, - 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, - 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, - 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, - 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, - 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, - 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, - // Entry 100 - 13F - 0x0150, 0x0150, 0x0150, 0x0165, 0x0180, 0x0180, 0x0180, 0x0180, - 0x0180, 0x0180, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, - 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, - 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, - 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, - 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, - 0x018c, 0x018c, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, - 0x019b, 0x019b, 0x019b, 0x019b, 0x01a7, 0x01a7, 0x01a7, 0x01a7, + 0x014a, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, + 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, + 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, + 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, + // Entry C0 - FF + 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, + 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, + 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, + 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, + 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, + 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, + 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, + 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, 0x015f, + // Entry 100 - 13F + 0x015f, 0x015f, 0x015f, 0x015f, 0x0174, 0x018f, 0x018f, 0x018f, + 0x018f, 0x018f, 0x018f, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, + 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, + 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, + 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, + 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, 0x019b, + 0x019b, 0x019b, 0x019b, 0x01aa, 0x01aa, 0x01aa, 0x01aa, 0x01aa, + 0x01aa, 0x01aa, 0x01aa, 0x01aa, 0x01aa, 0x01b6, 0x01b6, 0x01b6, // Entry 140 - 17F - 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01a7, 0x01ad, - 0x01ad, 0x01ad, 0x01ad, 0x01ad, 0x01ad, 0x01ad, 0x01ad, 0x01ad, - 0x01ad, 0x01ad, 0x01ad, 0x01ad, 0x01bc, 0x01bc, 0x01bc, 0x01bc, - 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, + 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, - 0x01bc, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c8, - 0x01c8, 0x01c8, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, - 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, + 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01cb, 0x01cb, 0x01cb, + 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01cb, + 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01cb, + 0x01cb, 0x01cb, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, + 0x01d7, 0x01d7, 0x01d7, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, // Entry 180 - 1BF - 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, - 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01e0, 0x01e0, 0x01e0, 0x01e0, - 0x01e0, 0x01e0, 0x01e0, 0x01e0, 0x01e0, 0x01e0, 0x01e0, 0x01e0, - 0x01e0, 0x01e0, 0x01e0, 0x01e0, 0x01e0, 0x01fb, 0x01fb, 0x01fb, - 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, - 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, - 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, - 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x0219, 0x0219, + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01ef, 0x01ef, + 0x01ef, 0x01ef, 0x01ef, 0x01ef, 0x01ef, 0x01ef, 0x01ef, 0x01ef, + 0x01ef, 0x01ef, 0x01ef, 0x01ef, 0x01ef, 0x01ef, 0x01ef, 0x020a, + 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, + 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, + 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, + 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, // Entry 1C0 - 1FF - 0x0219, 0x0219, 0x0219, 0x0219, 0x0219, 0x0219, 0x0219, 0x0219, - 0x0219, 0x0219, 0x0219, 0x0219, 0x0219, 0x0219, 0x022e, 0x022e, - 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, - 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, - 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, 0x0240, 0x0240, 0x0240, - 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, - 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, - 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, + 0x0228, 0x0228, 0x0228, 0x0228, 0x0228, 0x0228, 0x0228, 0x0228, + 0x0228, 0x0228, 0x0228, 0x0228, 0x0228, 0x0228, 0x0228, 0x0228, + 0x023d, 0x023d, 0x023d, 0x023d, 0x023d, 0x023d, 0x023d, 0x023d, + 0x023d, 0x023d, 0x023d, 0x023d, 0x023d, 0x023d, 0x023d, 0x023d, + 0x023d, 0x023d, 0x023d, 0x023d, 0x023d, 0x023d, 0x023d, 0x024f, + 0x024f, 0x024f, 0x024f, 0x024f, 0x024f, 0x024f, 0x024f, 0x024f, + 0x024f, 0x024f, 0x024f, 0x024f, 0x024f, 0x024f, 0x024f, 0x024f, + 0x024f, 0x024f, 0x024f, 0x024f, 0x024f, 0x024f, 0x024f, 0x024f, // Entry 200 - 23F - 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, - 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, - 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, - 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, - 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, - 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, - 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, - 0x0240, 0x0240, 0x0240, 0x024f, 0x024f, 0x024f, 0x024f, 0x024f, + 0x024f, 0x024f, 0x024f, 0x024f, 0x024f, 0x024f, 0x024f, 0x024f, + 0x024f, 0x024f, 0x024f, 0x024f, 0x024f, 0x024f, 0x024f, 0x024f, + 0x024f, 0x024f, 0x025b, 0x025b, 0x025b, 0x025b, 0x025b, 0x025b, + 0x025b, 0x025b, 0x025b, 0x025b, 0x025b, 0x025b, 0x025b, 0x025b, + 0x025b, 0x025b, 0x025b, 0x025b, 0x025b, 0x025b, 0x025b, 0x025b, + 0x025b, 0x025b, 0x025b, 0x025b, 0x025b, 0x025b, 0x025b, 0x025b, + 0x025b, 0x025b, 0x025b, 0x025b, 0x025b, 0x025b, 0x025b, 0x025b, + 0x025b, 0x025b, 0x025b, 0x025b, 0x025b, 0x026a, 0x026a, 0x026a, // Entry 240 - 27F - 0x024f, 0x024f, 0x024f, 0x024f, 0x024f, 0x0258, 0x0258, 0x0258, - 0x0258, 0x0258, 0x0279, 0x0279, 0x0279, 0x0279, 0x0279, 0x028b, - 0x029a, 0x02a6, 0x02b2, 0x02c1, 0x02cd, 0x02d9, 0x02f1, 0x0303, - 0x0318, 0x0318, 0x0327, 0x0333, 0x0345, 0x0357, 0x0369, 0x037b, - 0x0396, 0x0396, 0x03ab, + 0x026a, 0x026a, 0x026a, 0x026a, 0x026a, 0x026a, 0x026a, 0x0273, + 0x0273, 0x0273, 0x0273, 0x0273, 0x0294, 0x0294, 0x0294, 0x0294, + 0x0294, 0x02a6, 0x02b5, 0x02c1, 0x02cd, 0x02dc, 0x02e8, 0x02f4, + 0x030c, 0x031e, 0x0333, 0x0333, 0x0342, 0x034e, 0x034e, 0x0360, + 0x0372, 0x0384, 0x039f, 0x039f, 0x03b4, }, }, { // zu @@ -15488,177 +16742,178 @@ var langHeaders = [252]header{ }, } -const afLangStr string = "" + // Size: 3015 bytes +const afLangStr string = "" + // Size: 3085 bytes "AfarAbkasiesAfrikaansAkanAmhariesAragoneesArabiesAssameesAvariesAymaraAz" + - "erbeidjansBaskirBelo-RussiesBulgaarsBislamaBambaraBengaalsTibettaansBret" + - "onsBosniesKatalaansTsjetsjenChamorroKorsikaansTsjeggiesKerkslawiesChuvas" + - "hWalliesDeensDuitsDivehiDzongkhaEweGrieksEngelsEsperantoSpaansEstniesBas" + - "kiesPersiesFulahFinsFidjiaansFaroeesFransWes-FriesIersSkotse GalliesGali" + - "siesGuaraniGoedjaratiManxHausaHebreeusHindiKroatiesHaïtiaansHongaarsArme" + - "ensHereroInterlinguaIndonesiesInterlingueIgboSichuan YiIdoYslandsItaliaa" + - "nsInnuïtiesJapanneesJavaansGeorgiesKongoleesKikuyuKuanyamaKazaksKalaalli" + - "sutKhmerKannadaKoreaansKanuriKasjmirsKoerdiesKomiKorniesKirgisiesLatynLu" + - "xemburgsGandaLimburgsLingaalsLaoLitausLuba-KatangaLettiesMalgassiesMarsh" + - "alleesMaoriMasedoniesMalabaarsMongoolsMarathiMaleisMalteesBirmaansNauruN" + - "oord-NdebeleNepaleesNdongaNederlandsNoorweegse NynorskNoorse BokmålSuid-" + - "NdebeleNavajoNyanjaOksitaansOromoOriyaOssetiesPandjabiPoolsPasjtoPortuge" + - "esQuechuaReto-RomaansRundiRoemeensRussiesRwandeesSanskritSardiniesSindhi" + - "Noord-SamiSangoSinhalaSlowaaksSloweensSamoaansShonaSomaliesAlbaneesSerwi" + - "esSwaziSuid-SothoSundaneesSweedsSwahiliTamilTeloegoeTadzjieksThaiTigriny" + - "aTurkmeensTswanaTongaansTurksTsongaTataarsTahitiesUighurOekraïensOerdoeO" + - "ezbeeksVendaViëtnameesVolapükWalloonWolofXhosaJiddisjYorubaSjineesZoeloe" + - "AsjineesAkoliAdangmeAdygheAghemAinuAleutSuid-AltaiAngikaArameesMapucheAr" + - "apahoAsuAsturiesAwadhiBalineesBasaaBembaBenaWes-BalochiBhojpuriBiniSiksi" + - "kaBodoBugineesBlinCebuanoSjigaChuukeesMariChoctawCherokeesCheyenneesSora" + - "ni KoerdiesKoptiesSeselwa FranskreoolsDakotaansDakotaTaitaDogribZarmaLae" + - " SorbiesDualaJola-FonyiDazagaEmbuEfikAntieke EgiptiesEkajukEwondoFilippy" + - "nsFonFriuliaansGaaGagauzGeezGilberteesGorontaloGotiesAntieke GrieksSwits" + - "erse DuitsGusiiGwichʼinHawaiiesHiligaynonHetitiesHmongHoog-SorbiesHupaIb" + - "aneesIbibioIlokoIngushLojbanNgombaMachameKabyleKachinJjuKambaKabardiaans" + - "TyapMakondeKabuverdianuKoroKhasiKoyra ChiiniKakoKalenjinKimbunduKomi-Per" + - "myaksKonkaniKpelleesKarachay-BalkarKareliesKurukhShambalaBafiaKeulsKumyk" + - "LadinoLangiLezghiesLakotaLoziNoord-LuriLuba-LuluaLundaLuoMizoLuyiaMadure" + - "esMagahiMaithiliMakasarMasaiMokshaMendeMeruMorisjenMakhuwa-MeettoMeta’Mi" + - "cmacMinangkabausManipuriMohawkMossiMundangVeelvuldige taleKreekMirandees" + - "ErzyaMasanderaniNeapolitaansNamaLae DuitsNewariNiasNiueanKwasioNgiemboon" + - "NogaiN’KoNoord-SothoNuerNyankolePangasinanPampangaPapiamentoPalauaansNig" + - "eriese PidginFenisiesPruisiesK’iche’RapanuiRarotongaansRomboAromaniesRwa" + - "SandaweesSakhaansSamburuSantaliesNgambaySanguSisiliaansSkotsSuid-Koerdie" + - "sSenaKoyraboro SenniTachelhitShanSuid-SamiLule SamiInari SamiSkolt SamiS" + - "oninkeSranan TongoSahoSukumaComoraansSirieseTimneTesoTetoemTigreKlingonT" + - "ok PisinTarokoToemboekaTuvaluTasawaqTuvineesSentraal Atlas TamazightUdmu" + - "rtUmbunduRootVaiVunjoWalserWolayttaWarayWarlpiriKalmykSogaYangbenYembaKa" + - "ntoneesStandaard Marokkaanse TamazightZuniGeen linguistiese inhoudZazaMo" + - "derne Standaard ArabiesSwitserse hoog-DuitsSpaans (Suid-Amerika)Nedersak" + - "siesVlaamsMoldawiesSerwo-KroatiesSwahili (Kongo)" - -var afLangIdx = []uint16{ // 611 elements + "erbeidjansBaskirBelarussiesBulgaarsBislamaBambaraBengaalsTibettaansBreto" + + "nsBosniesKatalaansTsjetsjeensChamorroKorsikaansTsjeggiesKerkslawiesChuva" + + "shWalliesDeensDuitsDivehiDzongkhaEweGrieksEngelsEsperantoSpaansEstniesBa" + + "skiesPersiesFulahFinsFidjiaansFaroëesFransFriesIersSkotse GalliesGalisie" + + "sGuaraniGoedjaratiManxHausaHebreeusHindiKroatiesHaïtiaansHongaarsArmeens" + + "HereroInterlinguaIndonesiesInterlingueIgboSichuan YiIdoYslandsItaliaansI" + + "nuïtiesJapanneesJavaansGeorgiesKongoleesKikuyuKuanyamaKazaksKalaallisutK" + + "hmerKannadaKoreaansKanuriKasjmirsKoerdiesKomiKorniesKirgisiesLatynLuxemb" + + "urgsGandaLimburgsLingaalsLaoLitausLuba-KatangaLettiesMalgassiesMarshalle" + + "esMaoriMasedoniesMalabaarsMongoolsMarathiMaleisMalteesBirmaansNauruNoord" + + "-NdebeleNepaleesNdongaNederlandsNoorweegse NynorskNoorse BokmålSuid-Ndeb" + + "eleNavajoNyanjaOksitaansOromoOriyaOssetiesPandjabiPoolsPasjtoPortugeesQu" + + "echuaReto-RomaansRundiRoemeensRussiesRwandeesSanskritSardiniesSindhiNoor" + + "d-SamiSangoSinhalaSlowaaksSloweensSamoaansShonaSomaliesAlbaneesSerwiesSw" + + "aziSuid-SothoSundaneesSweedsSwahiliTamilTeloegoeTadzjieksThaiTigrinyaTur" + + "kmeensTswanaTongaansTurksTsongaTataarsTahitiesUighurOekraïensOerdoeOezbe" + + "eksVendaViëtnameesVolapükWalloonWolofXhosaJiddisjYorubaSjineesZoeloeAtsj" + + "eneesAkoliAdangmeAdygheAghemAinuAleutSuid-AltaiAngikaArameesMapucheArapa" + + "hoAsuAsturiesAwadhiBalineesBasaaBembaBenaWes-BalochiBhojpuriBiniSiksikaB" + + "odoBugineesBlinCebuanoKigaChuukeesMariChoctawCherokeesCheyenneesSoraniKo" + + "ptiesSeselwa FranskreoolsDakotaansDakotaTaitaDogribZarmaLae SorbiesDuala" + + "Jola-FonyiDazagaEmbuEfikAntieke EgiptiesEkajukEwondoFilippynsFonFriuliaa" + + "nsGaaGagauzGan-SjineesGeezGilberteesGorontaloGotiesAntieke GrieksSwitser" + + "se DuitsGusiiGwichʼinHakka-SjineesHawaiiesHiligaynonHetitiesHmongOpperso" + + "rbiesXiang-SjineesHupaIbaneesIbibioIlokoIngushLojbanNgombaMachameKabyleK" + + "achinJjuKambaKabardiaansTyapMakondeKabuverdianuKoroKhasiKoyra ChiiniKako" + + "KalenjinKimbunduKomi-PermyaksKonkaniKpelleesKarachay-BalkarKareliesKuruk" + + "hShambalaBafiaKeulsKumykLadinoLangiLezghiesLakotaLoziNoord-LuriLuba-Lulu" + + "aLundaLuoMizoLuyiaMadureesMagahiMaithiliMakasarMasaiMokshaMendeMeruMoris" + + "jenMakhuwa-MeettoMeta’MicmacMinangkabausManipuriMohawkMossiMundangVeelvu" + + "ldige taleKreekMirandeesErzyaMasanderaniMin Nan-SjineesNeapolitaansNamaL" + + "ae DuitsNewariNiasNiueaansKwasioNgiemboonNogaiN’KoNoord-SothoNuerNyankol" + + "ePangasinanPampangaPapiamentoPalauaansNigeriese PidginFenisiesPruisiesK’" + + "iche’RapanuiRarotongaansRomboAromaniesRwaSandaweesSakhaansSamburuSantali" + + "esNgambaySanguSisiliaansSkotsSuid-KoerdiesSenaKoyraboro SenniTachelhitSh" + + "anSuid-SamiLule SamiInari SamiSkolt SamiSoninkeSranan TongoSahoSukumaCom" + + "oraansSiriesTimneTesoTetoemTigreKlingonTok PisinTarokoToemboekaTuvaluTas" + + "awaqTuvineesSentraal-Atlas-TamazightUdmurtUmbunduOnbekende of ongeldige " + + "taalVaiVunjoWalserWolayttaWarayWarlpiriWu-SjineesKalmykSogaYangbenYembaK" + + "antoneesStandaard Marokkaanse TamazightZuniGeen taalinhoud nieZazaModern" + + "e StandaardarabiesSwitserse hoog-DuitsEngels (VK)Engels (VSA)Nedersaksie" + + "sVlaamsMoldawiesSerwo-KroatiesSwahili (Kongo)" + +var afLangIdx = []uint16{ // 613 elements // Entry 0 - 3F 0x0000, 0x0004, 0x000c, 0x000c, 0x0015, 0x0019, 0x0021, 0x002a, - 0x0031, 0x0039, 0x0040, 0x0046, 0x0052, 0x0058, 0x0064, 0x006c, - 0x0073, 0x007a, 0x0082, 0x008c, 0x0093, 0x009a, 0x00a3, 0x00ac, - 0x00b4, 0x00be, 0x00be, 0x00c7, 0x00d2, 0x00d9, 0x00e0, 0x00e5, - 0x00ea, 0x00f0, 0x00f8, 0x00fb, 0x0101, 0x0107, 0x0110, 0x0116, - 0x011d, 0x0124, 0x012b, 0x0130, 0x0134, 0x013d, 0x0144, 0x0149, - 0x0152, 0x0156, 0x0164, 0x016c, 0x0173, 0x017d, 0x0181, 0x0186, - 0x018e, 0x0193, 0x0193, 0x019b, 0x01a5, 0x01ad, 0x01b4, 0x01ba, + 0x0031, 0x0039, 0x0040, 0x0046, 0x0052, 0x0058, 0x0063, 0x006b, + 0x0072, 0x0079, 0x0081, 0x008b, 0x0092, 0x0099, 0x00a2, 0x00ad, + 0x00b5, 0x00bf, 0x00bf, 0x00c8, 0x00d3, 0x00da, 0x00e1, 0x00e6, + 0x00eb, 0x00f1, 0x00f9, 0x00fc, 0x0102, 0x0108, 0x0111, 0x0117, + 0x011e, 0x0125, 0x012c, 0x0131, 0x0135, 0x013e, 0x0146, 0x014b, + 0x0150, 0x0154, 0x0162, 0x016a, 0x0171, 0x017b, 0x017f, 0x0184, + 0x018c, 0x0191, 0x0191, 0x0199, 0x01a3, 0x01ab, 0x01b2, 0x01b8, // Entry 40 - 7F - 0x01c5, 0x01cf, 0x01da, 0x01de, 0x01e8, 0x01e8, 0x01eb, 0x01f2, - 0x01fb, 0x0205, 0x020e, 0x0215, 0x021d, 0x0226, 0x022c, 0x0234, - 0x023a, 0x0245, 0x024a, 0x0251, 0x0259, 0x025f, 0x0267, 0x026f, - 0x0273, 0x027a, 0x0283, 0x0288, 0x0292, 0x0297, 0x029f, 0x02a7, - 0x02aa, 0x02b0, 0x02bc, 0x02c3, 0x02cd, 0x02d8, 0x02dd, 0x02e7, - 0x02f0, 0x02f8, 0x02ff, 0x0305, 0x030c, 0x0314, 0x0319, 0x0326, - 0x032e, 0x0334, 0x033e, 0x0350, 0x035e, 0x036a, 0x0370, 0x0376, - 0x037f, 0x037f, 0x0384, 0x0389, 0x0391, 0x0399, 0x0399, 0x039e, + 0x01c3, 0x01cd, 0x01d8, 0x01dc, 0x01e6, 0x01e6, 0x01e9, 0x01f0, + 0x01f9, 0x0202, 0x020b, 0x0212, 0x021a, 0x0223, 0x0229, 0x0231, + 0x0237, 0x0242, 0x0247, 0x024e, 0x0256, 0x025c, 0x0264, 0x026c, + 0x0270, 0x0277, 0x0280, 0x0285, 0x028f, 0x0294, 0x029c, 0x02a4, + 0x02a7, 0x02ad, 0x02b9, 0x02c0, 0x02ca, 0x02d5, 0x02da, 0x02e4, + 0x02ed, 0x02f5, 0x02fc, 0x0302, 0x0309, 0x0311, 0x0316, 0x0323, + 0x032b, 0x0331, 0x033b, 0x034d, 0x035b, 0x0367, 0x036d, 0x0373, + 0x037c, 0x037c, 0x0381, 0x0386, 0x038e, 0x0396, 0x0396, 0x039b, // Entry 80 - BF - 0x03a4, 0x03ad, 0x03b4, 0x03c0, 0x03c5, 0x03cd, 0x03d4, 0x03dc, - 0x03e4, 0x03ed, 0x03f3, 0x03fd, 0x0402, 0x0409, 0x0411, 0x0419, - 0x0421, 0x0426, 0x042e, 0x0436, 0x043d, 0x0442, 0x044c, 0x0455, - 0x045b, 0x0462, 0x0467, 0x046f, 0x0478, 0x047c, 0x0484, 0x048d, - 0x0493, 0x049b, 0x04a0, 0x04a6, 0x04ad, 0x04b5, 0x04bb, 0x04c5, - 0x04cb, 0x04d3, 0x04d8, 0x04e3, 0x04eb, 0x04f2, 0x04f7, 0x04fc, - 0x0503, 0x0509, 0x0509, 0x0510, 0x0516, 0x051e, 0x0523, 0x052a, - 0x0530, 0x0530, 0x0530, 0x0535, 0x0539, 0x0539, 0x0539, 0x053e, + 0x03a1, 0x03aa, 0x03b1, 0x03bd, 0x03c2, 0x03ca, 0x03d1, 0x03d9, + 0x03e1, 0x03ea, 0x03f0, 0x03fa, 0x03ff, 0x0406, 0x040e, 0x0416, + 0x041e, 0x0423, 0x042b, 0x0433, 0x043a, 0x043f, 0x0449, 0x0452, + 0x0458, 0x045f, 0x0464, 0x046c, 0x0475, 0x0479, 0x0481, 0x048a, + 0x0490, 0x0498, 0x049d, 0x04a3, 0x04aa, 0x04b2, 0x04b8, 0x04c2, + 0x04c8, 0x04d0, 0x04d5, 0x04e0, 0x04e8, 0x04ef, 0x04f4, 0x04f9, + 0x0500, 0x0506, 0x0506, 0x050d, 0x0513, 0x051c, 0x0521, 0x0528, + 0x052e, 0x052e, 0x052e, 0x0533, 0x0537, 0x0537, 0x0537, 0x053c, // Entry C0 - FF - 0x053e, 0x0548, 0x0548, 0x054e, 0x0555, 0x055c, 0x055c, 0x0563, - 0x0563, 0x0563, 0x0563, 0x0563, 0x0563, 0x0566, 0x0566, 0x056e, - 0x056e, 0x0574, 0x0574, 0x057c, 0x057c, 0x0581, 0x0581, 0x0581, - 0x0581, 0x0581, 0x0586, 0x0586, 0x058a, 0x058a, 0x058a, 0x0595, - 0x059d, 0x059d, 0x05a1, 0x05a1, 0x05a1, 0x05a8, 0x05a8, 0x05a8, - 0x05a8, 0x05a8, 0x05ac, 0x05ac, 0x05ac, 0x05b4, 0x05b4, 0x05b8, - 0x05b8, 0x05b8, 0x05b8, 0x05b8, 0x05b8, 0x05bf, 0x05c4, 0x05c4, - 0x05c4, 0x05cc, 0x05d0, 0x05d0, 0x05d7, 0x05d7, 0x05e0, 0x05ea, + 0x053c, 0x0546, 0x0546, 0x054c, 0x0553, 0x055a, 0x055a, 0x0561, + 0x0561, 0x0561, 0x0561, 0x0561, 0x0561, 0x0564, 0x0564, 0x056c, + 0x056c, 0x0572, 0x0572, 0x057a, 0x057a, 0x057f, 0x057f, 0x057f, + 0x057f, 0x057f, 0x0584, 0x0584, 0x0588, 0x0588, 0x0588, 0x0593, + 0x059b, 0x059b, 0x059f, 0x059f, 0x059f, 0x05a6, 0x05a6, 0x05a6, + 0x05a6, 0x05a6, 0x05aa, 0x05aa, 0x05aa, 0x05b2, 0x05b2, 0x05b6, + 0x05b6, 0x05b6, 0x05b6, 0x05b6, 0x05b6, 0x05b6, 0x05bd, 0x05c1, + 0x05c1, 0x05c1, 0x05c9, 0x05cd, 0x05cd, 0x05d4, 0x05d4, 0x05dd, // Entry 100 - 13F - 0x05f9, 0x0600, 0x0600, 0x0600, 0x0614, 0x0614, 0x061d, 0x0623, - 0x0628, 0x0628, 0x0628, 0x062e, 0x062e, 0x0633, 0x0633, 0x063e, - 0x063e, 0x0643, 0x0643, 0x064d, 0x064d, 0x0653, 0x0657, 0x065b, - 0x065b, 0x066b, 0x0671, 0x0671, 0x0671, 0x0671, 0x0677, 0x0677, - 0x0677, 0x0680, 0x0680, 0x0683, 0x0683, 0x0683, 0x0683, 0x0683, - 0x0683, 0x0683, 0x068d, 0x0690, 0x0696, 0x0696, 0x0696, 0x0696, - 0x0696, 0x069a, 0x06a4, 0x06a4, 0x06a4, 0x06a4, 0x06a4, 0x06a4, - 0x06ad, 0x06b3, 0x06b3, 0x06c1, 0x06d0, 0x06d0, 0x06d0, 0x06d5, + 0x05e7, 0x05ed, 0x05f4, 0x05f4, 0x05f4, 0x0608, 0x0608, 0x0611, + 0x0617, 0x061c, 0x061c, 0x061c, 0x0622, 0x0622, 0x0627, 0x0627, + 0x0632, 0x0632, 0x0637, 0x0637, 0x0641, 0x0641, 0x0647, 0x064b, + 0x064f, 0x064f, 0x065f, 0x0665, 0x0665, 0x0665, 0x0665, 0x066b, + 0x066b, 0x066b, 0x0674, 0x0674, 0x0677, 0x0677, 0x0677, 0x0677, + 0x0677, 0x0677, 0x0677, 0x0681, 0x0684, 0x068a, 0x0695, 0x0695, + 0x0695, 0x0695, 0x0699, 0x06a3, 0x06a3, 0x06a3, 0x06a3, 0x06a3, + 0x06a3, 0x06ac, 0x06b2, 0x06b2, 0x06c0, 0x06cf, 0x06cf, 0x06cf, // Entry 140 - 17F - 0x06de, 0x06de, 0x06de, 0x06e6, 0x06e6, 0x06f0, 0x06f8, 0x06fd, - 0x0709, 0x0709, 0x070d, 0x0714, 0x071a, 0x071f, 0x0725, 0x0725, - 0x0725, 0x072b, 0x0731, 0x0738, 0x0738, 0x0738, 0x0738, 0x0738, - 0x073e, 0x0744, 0x0747, 0x074c, 0x074c, 0x0757, 0x0757, 0x075b, - 0x0762, 0x076e, 0x076e, 0x0772, 0x0772, 0x0777, 0x0777, 0x0783, - 0x0783, 0x0783, 0x0787, 0x078f, 0x0797, 0x07a4, 0x07ab, 0x07ab, - 0x07b3, 0x07c2, 0x07c2, 0x07c2, 0x07ca, 0x07d0, 0x07d8, 0x07dd, - 0x07e2, 0x07e7, 0x07e7, 0x07ed, 0x07f2, 0x07f2, 0x07f2, 0x07fa, + 0x06d4, 0x06dd, 0x06dd, 0x06ea, 0x06f2, 0x06f2, 0x06fc, 0x0704, + 0x0709, 0x0715, 0x0722, 0x0726, 0x072d, 0x0733, 0x0738, 0x073e, + 0x073e, 0x073e, 0x0744, 0x074a, 0x0751, 0x0751, 0x0751, 0x0751, + 0x0751, 0x0757, 0x075d, 0x0760, 0x0765, 0x0765, 0x0770, 0x0770, + 0x0774, 0x077b, 0x0787, 0x0787, 0x078b, 0x078b, 0x0790, 0x0790, + 0x079c, 0x079c, 0x079c, 0x07a0, 0x07a8, 0x07b0, 0x07bd, 0x07c4, + 0x07c4, 0x07cc, 0x07db, 0x07db, 0x07db, 0x07e3, 0x07e9, 0x07f1, + 0x07f6, 0x07fb, 0x0800, 0x0800, 0x0806, 0x080b, 0x080b, 0x080b, // Entry 180 - 1BF - 0x07fa, 0x07fa, 0x07fa, 0x0800, 0x0800, 0x0800, 0x0804, 0x080e, - 0x080e, 0x0818, 0x0818, 0x081d, 0x0820, 0x0824, 0x0829, 0x0829, - 0x0829, 0x0831, 0x0831, 0x0837, 0x083f, 0x0846, 0x0846, 0x084b, - 0x084b, 0x0851, 0x0851, 0x0856, 0x085a, 0x0862, 0x0862, 0x0870, - 0x0877, 0x087d, 0x0889, 0x0889, 0x0891, 0x0897, 0x089c, 0x089c, - 0x08a3, 0x08b3, 0x08b8, 0x08c1, 0x08c1, 0x08c1, 0x08c1, 0x08c6, - 0x08d1, 0x08d1, 0x08dd, 0x08e1, 0x08ea, 0x08f0, 0x08f4, 0x08fa, - 0x08fa, 0x0900, 0x0909, 0x090e, 0x090e, 0x090e, 0x0914, 0x091f, + 0x0813, 0x0813, 0x0813, 0x0813, 0x0819, 0x0819, 0x0819, 0x0819, + 0x081d, 0x0827, 0x0827, 0x0831, 0x0831, 0x0836, 0x0839, 0x083d, + 0x0842, 0x0842, 0x0842, 0x084a, 0x084a, 0x0850, 0x0858, 0x085f, + 0x085f, 0x0864, 0x0864, 0x086a, 0x086a, 0x086f, 0x0873, 0x087b, + 0x087b, 0x0889, 0x0890, 0x0896, 0x08a2, 0x08a2, 0x08aa, 0x08b0, + 0x08b5, 0x08b5, 0x08bc, 0x08cc, 0x08d1, 0x08da, 0x08da, 0x08da, + 0x08da, 0x08df, 0x08ea, 0x08f9, 0x0905, 0x0909, 0x0912, 0x0918, + 0x091c, 0x0924, 0x0924, 0x092a, 0x0933, 0x0938, 0x0938, 0x0938, // Entry 1C0 - 1FF - 0x0923, 0x0923, 0x0923, 0x092b, 0x092b, 0x092b, 0x092b, 0x092b, - 0x0935, 0x0935, 0x093d, 0x0947, 0x0950, 0x0950, 0x0960, 0x0960, - 0x0960, 0x0960, 0x0960, 0x0968, 0x0968, 0x0968, 0x0968, 0x0970, - 0x0970, 0x097b, 0x097b, 0x097b, 0x0982, 0x098e, 0x098e, 0x098e, - 0x0993, 0x0993, 0x0993, 0x0993, 0x0993, 0x099c, 0x099f, 0x09a8, - 0x09b0, 0x09b0, 0x09b7, 0x09b7, 0x09c0, 0x09c0, 0x09c7, 0x09cc, - 0x09d6, 0x09db, 0x09db, 0x09e8, 0x09e8, 0x09ec, 0x09ec, 0x09ec, - 0x09fb, 0x09fb, 0x09fb, 0x0a04, 0x0a08, 0x0a08, 0x0a08, 0x0a08, + 0x093e, 0x0949, 0x094d, 0x094d, 0x094d, 0x0955, 0x0955, 0x0955, + 0x0955, 0x0955, 0x095f, 0x095f, 0x0967, 0x0971, 0x097a, 0x097a, + 0x098a, 0x098a, 0x098a, 0x098a, 0x098a, 0x0992, 0x0992, 0x0992, + 0x0992, 0x099a, 0x099a, 0x09a5, 0x09a5, 0x09a5, 0x09ac, 0x09b8, + 0x09b8, 0x09b8, 0x09bd, 0x09bd, 0x09bd, 0x09bd, 0x09bd, 0x09c6, + 0x09c9, 0x09d2, 0x09da, 0x09da, 0x09e1, 0x09e1, 0x09ea, 0x09ea, + 0x09f1, 0x09f6, 0x0a00, 0x0a05, 0x0a05, 0x0a12, 0x0a12, 0x0a16, + 0x0a16, 0x0a16, 0x0a25, 0x0a25, 0x0a25, 0x0a2e, 0x0a32, 0x0a32, // Entry 200 - 23F - 0x0a08, 0x0a11, 0x0a1a, 0x0a24, 0x0a2e, 0x0a35, 0x0a35, 0x0a41, - 0x0a41, 0x0a45, 0x0a45, 0x0a4b, 0x0a4b, 0x0a4b, 0x0a54, 0x0a54, - 0x0a5b, 0x0a5b, 0x0a5b, 0x0a60, 0x0a64, 0x0a64, 0x0a6a, 0x0a6f, - 0x0a6f, 0x0a6f, 0x0a6f, 0x0a76, 0x0a76, 0x0a76, 0x0a76, 0x0a76, - 0x0a7f, 0x0a7f, 0x0a85, 0x0a85, 0x0a85, 0x0a85, 0x0a8e, 0x0a94, - 0x0a9b, 0x0aa3, 0x0abb, 0x0ac1, 0x0ac1, 0x0ac8, 0x0acc, 0x0acf, - 0x0acf, 0x0acf, 0x0acf, 0x0acf, 0x0acf, 0x0acf, 0x0ad4, 0x0ada, - 0x0ae2, 0x0ae7, 0x0ae7, 0x0aef, 0x0aef, 0x0af5, 0x0af5, 0x0af9, + 0x0a32, 0x0a32, 0x0a32, 0x0a3b, 0x0a44, 0x0a4e, 0x0a58, 0x0a5f, + 0x0a5f, 0x0a6b, 0x0a6b, 0x0a6f, 0x0a6f, 0x0a75, 0x0a75, 0x0a75, + 0x0a7e, 0x0a7e, 0x0a84, 0x0a84, 0x0a84, 0x0a89, 0x0a8d, 0x0a8d, + 0x0a93, 0x0a98, 0x0a98, 0x0a98, 0x0a98, 0x0a9f, 0x0a9f, 0x0a9f, + 0x0a9f, 0x0a9f, 0x0aa8, 0x0aa8, 0x0aae, 0x0aae, 0x0aae, 0x0aae, + 0x0ab7, 0x0abd, 0x0ac4, 0x0acc, 0x0ae4, 0x0aea, 0x0aea, 0x0af1, + 0x0b0c, 0x0b0f, 0x0b0f, 0x0b0f, 0x0b0f, 0x0b0f, 0x0b0f, 0x0b0f, + 0x0b14, 0x0b1a, 0x0b22, 0x0b27, 0x0b27, 0x0b2f, 0x0b39, 0x0b3f, // Entry 240 - 27F - 0x0af9, 0x0af9, 0x0b00, 0x0b05, 0x0b05, 0x0b0e, 0x0b0e, 0x0b0e, - 0x0b0e, 0x0b0e, 0x0b2d, 0x0b31, 0x0b49, 0x0b4d, 0x0b66, 0x0b66, - 0x0b66, 0x0b7a, 0x0b7a, 0x0b7a, 0x0b7a, 0x0b7a, 0x0b8f, 0x0b8f, - 0x0b8f, 0x0b8f, 0x0b8f, 0x0b8f, 0x0b9b, 0x0ba1, 0x0ba1, 0x0ba1, - 0x0baa, 0x0bb8, 0x0bc7, -} // Size: 1246 bytes - -const amLangStr string = "" + // Size: 6791 bytes + 0x0b3f, 0x0b43, 0x0b43, 0x0b43, 0x0b4a, 0x0b4f, 0x0b4f, 0x0b58, + 0x0b58, 0x0b58, 0x0b58, 0x0b58, 0x0b77, 0x0b7b, 0x0b8e, 0x0b92, + 0x0baa, 0x0baa, 0x0baa, 0x0bbe, 0x0bbe, 0x0bbe, 0x0bc9, 0x0bd5, + 0x0bd5, 0x0bd5, 0x0bd5, 0x0bd5, 0x0bd5, 0x0bd5, 0x0be1, 0x0be7, + 0x0be7, 0x0be7, 0x0bf0, 0x0bfe, 0x0c0d, +} // Size: 1250 bytes + +const amLangStr string = "" + // Size: 6807 bytes "አፋርኛአብሐዚኛአቬስታንአፍሪካንኛአካንኛአማርኛአራጎንስዓረብኛአሳሜዛዊአቫሪክአያማርኛአዘርባጃንኛባስኪርኛቤላራሻኛቡልጋሪ" + "ኛቢስላምኛባምባርኛቤንጋሊኛቲቤታንኛብሬቶንኛቦስኒያንኛካታላንኛችችንቻሞሮኮርሲካኛክሪቼክኛቸርች ስላቪክቹቫሽወልሽዴኒሽ" + "ጀርመንዲቬህድዞንግኻኛኢዊግሪክኛእንግሊዝኛኤስፐራንቶስፓንሽኛኢስቶኒያንኛባስክኛፐርሺያኛፉላህፊኒሽፊጂኛፋሮኛፈረንሳይኛ" + - "የምዕራብ ፍሪስኛአይሪሽየስኮቲሽ ጌልክኛጋሊሺያጓራኒኛጉጃርቲኛማንክስኛሃውሳኛዕብራስጥሒንዱኛክሮሽያንኛሃይትኛሀንጋሪኛ" + - "አርመናዊሄሬሮኢንቴርሊንጓኢንዶኔዥኛእንተርሊንግወኢግቦኛሲቹንዪኛእኑፒያቅኛኢዶአይስላንድኛጣሊያንኛእኑክቲቱትኛጃፓንኛጃ" + - "ቫንኛጆርጂያንኮንጎኛኪኩዩኩንያማካዛክኛካላሊሱትኛክህመርኛካናዳኛኮሪያኛካኑሪካሽሚርኛኩርድሽኛኮሚኮርኒሽኪርጊዝኛላቲንኛ" + - "ሉክዘምበርገርኛጋንዳኛሊምቡርጊሽሊንጋላኛላኦስኛሉቴንያንኛሉባ ካታንጋላትቪያንማላጋስኛማርሻሌዝኛማኦሪኛማሴዶንኛማላያላ" + - "ምኛሞንጎላዊኛማራቲኛማላይኛማልቲስኛቡርማኛናኡሩሰሜን ንዴብሌኔፓሊኛንዶንጋደችየኖርዌይ ናይኖርስክየኖርዌይ ቦክማልደቡ" + - "ብ ንደቤሌናቫጆንያንጃኦኪታንኛኦሮሞኛኦዲያኛኦሴቲክፑንጃብኛፖሊሽኛፓሽቶኛፖርቹጋልኛኵቿኛሮማንሽሩንዲኛሮማኒያንራሽያኛኪ" + - "ንያርዋንድኛሳንስክሪትኛሳርዲንያንኛሲንድሂኛሰሜናዊ ሳሚሳንጎኛሲንሃልኛስሎቫክኛስሎቪኛሳሞአኛሾናኛሱማልኛአልባንያንኛሰ" + - "ርቢኛስዋቲኛደቡባዊ ሶቶሱዳንኛስዊድንኛስዋሂሊኛታሚልኛተሉጉኛታጂኪኛታይኛትግርኛቱርክሜንኛጽዋናዊኛቶንጋኛቱርክኛጾንጋኛ" + - "ታታርኛታሂታንኛኡዊግሁርኛዩክሬንኛኡርዱኛኡዝቤክኛቬንዳቪየትናምኛቮላፑክኛዋሎንዎሎፍኛዞሳኛይዲሽኛዮሩባዊኛዡዋንግኛቻይን" + - "ኛዙሉኛአቻይንኛአኮሊኛአዳንግሜአድይግሄአፍሪሂሊአገምአይኑአካዲያንአላባማአልዩትደቡባዊ አልታይአንጊካአራማይክማፑቼአራ" + - "ኦናአራፓሆየአልጄሪያ ዓረብኛአራዋክአሱየአሜሪካ የምልክት ቋንቋአውስትሪያንአዋድሂባሉቺባሊኔስባቫሪያንባሳባሙንባታካ " + - "ቶባቤጃቤምባቤታዊቤናባፉትባዳጋየምዕራብ ባሎቺቦጁሪቢኮልቢኒባንጃርሲክሲካቢሹንፑሪያባክህቲያሪብራጅብራሁዪቦዶአኮስቡሪያ" + - "ትቡጊኔዝቡሉብሊንካዶካሪብካዩጋአትሳምካቡዋኖቺጋኛቺብቻቻጋታይቹክስማሪቺኑክ ጃርጎንቾክታዋቺፔውያንቼሮኬኛችዬኔየሶራኒ " + - "ኩርድኛኮፕቲክካፒዝኖንክሪሚያን ተርኪሽሰሰላዊ ክሬኦሊ ፈረንሳይኛዳኮታዳርግዋታይታኛዳላዌርዶግሪብዲንካዛርማኛዶግሪየታ" + - "ችኛው ሰርቢያንኛሴንተራል ዱሰንዱዋላኛጆላ ፎንያኛድዩላዳዛጋኢቦኛኤፊክየጥንታዊ ግብጽኛኤካጁክሴንተራል ዩፒክኤዎንዶፊ" + - "ሊፒንኛፎንካጁን ፍሬንችአርፒታንፍሩሊያንጋጋጉዝኛጋን ቻይንኛግዕዝኛጅልበርትስጎሮንታሎየጥንታዊ ግሪክየስዊዝ ጀርመንጉ" + - "ስሊኛግዊቺንሃካ ቻይንኛሃዊያኛሂሊጋይኖንህሞንግየላይኛው ሶርቢያንኛዢያንግ ቻይንኛሁፓኢባንኢቢቦኢሎኮኢንጉሽሎጅባንንጎ" + - "ባኛማቻሜኛካብይልካቺንካጅካምባካባርዲያንታያፕማኮንዴካቡቨርዲያኑኮሮክሃሲኮይራ ቺኒካኮካለንጂንኪምቡንዱኮሚ ፔርምያክኮ" + - "ንካኒክፔሌካራቻይ-ባልካርካረሊኛኩሩክሻምባላባፊያኮሎኝያንኩማይክላዲኖላንጊሌዝጊያንላኮታሎዚኛሰሜናዊ ሉሪሉባ-ሉሏሉንዳ" + - "ሉኦሚዞሉዪያማዱረስማጋሂማይተሊማካሳርማሳይሞክሻሜንዴሜሩሞሪሲየኛማኩዋ ሜቶሜታሚክማክሚናንግካባኡማኒፑሪሞሃውክሞሲሙንዳ" + - "ንግባለብዙ ቋንቋዎችክሪክሚራንዴዝኛኤርዝያማዛንደራኒሚን ኛን ቻይንኛኒአፖሊታንናማየታችኛው ጀርመንነዋሪኒአስኒዩአንኛ" + - "ኦ ናጋክዋሲዮኒጊምቡንኖጋይንኮሰሜናዊ ሶቶኑዌርክላሲክ ኔዋሪኒያንኮልኛፓንጋሲናንኛፓምፓንጋፓፒአሜንቶፓላኡአንየናይጄሪ" + - "ያ ፒጂንፐሩሳንኛኪቼቺምቦራዞ ሃይላንድ ኩቹዋራፓኑኢራሮቶንጋሮምቦአሮማንያንርዋሳንዳዌሳክሃሳምቡሩሳንታሊንጋምባይሳንጉ" + - "ሲሲሊያንኛስኮትስደቡባዊ ኩርዲሽሴናኮይራቦሮ ሴኒታቼልሂትሻንቻዲያን ዓረብኛሲዳምኛደቡባዊ ሳሚሉሌ ሳሚኢናሪ ሳሚስኮል" + - "ት ሳሚሶኒንኬስራናን ቶንጎሳሆኛሱኩማኮሞሪያንክላሲክ ኔይራሲሪያክቲምኔቴሶቴተምትግረክሊንጎንኛቶክ ፒሲንታሮኮቱምቡካቱ" + - "ቫሉታሳዋቅቱቪንያንኛመካከለኛ አትላስ ታማዚግትኡድሙርትኡምቡንዱሩትቫይቩንጆዋልሰርወላይትኛዋራይዋርልፒሪዉ ቻይንኛካል" + - "ማይክሶጋያንግቤንኛየምባካንቶኒዝብሊስይምቦልስመደበኛ የሞሮኮ ታማዚግትዙኒቋንቋዊ ይዘት አይደለምዛዛዘመናዊ መደበኛ " + - "ዓረብኛየኦስትሪያ ጀርመንየስዊዝ ከፍተኛ ጀርመንኛየአውስትራሊያ እንግሊዝኛየካናዳ እንግሊዝኛየብሪቲሽ እንግሊዝኛየአ" + - "ሜሪካ እንግሊዝኛየላቲን አሜሪካ ስፓኒሽየአውሮፓ ስፓንሽኛየሜክሲኮ ስፓንሽኛየካናዳ ፈረንሳይኛየስዊዝ ፈረንሳይኛየታ" + - "ችኛው ሳክሰንፍሌሚሽየብራዚል ፖርቹጋልኛየአውሮፓ ፖርቹጋልኛሞልዳቪያንኛሰርቦ-ክሮኤሽያኛኮንጎ ስዋሂሊቀለል ያለ ቻይ" + - "ንኛባህላዊ ቻይንኛ" - -var amLangIdx = []uint16{ // 613 elements + "ምዕራባዊ ፍሪሲኛአይሪሽየስኮቲሽ ጌልክኛጋሊሺያጓራኒኛጉጃርቲኛማንክስኛሃውሳኛዕብራይስጥ\ufeffሒንዱኛክሮሽያንኛሃይ" + + "ትኛሀንጋሪኛአርመናዊሄሬሮኢንቴርሊንጓኢንዶኔዥኛእንተርሊንግወኢግቦኛሲቹንዪኛእኑፒያቅኛኢዶአይስላንድኛጣሊያንኛእኑክቲቱ" + + "ትኛጃፓንኛጃቫንኛጆርጂያንኮንጎኛኪኩዩኩንያማካዛክኛካላሊሱትኛክህመርኛካናዳኛኮሪያኛካኑሪካሽሚርኛኩርድሽኛኮሚኮርኒሽኪር" + + "ጊዝኛላቲንኛሉክዘምበርኛጋንዳኛሊምቡርጊሽሊንጋላኛላኦኛሉቴንያንኛሉባ ካታንጋላትቪያንማላጋስኛማርሻሌዝኛማኦሪኛማሴዶንኛ" + + "ማላያላምኛሞንጎላዊኛማራቲኛማላይኛማልቲስኛቡርማኛናኡሩሰሜን ንዴብሌኔፓሊኛንዶንጋደችየኖርዌይ ናይኖርስክየኖርዌይ ቦክ" + + "ማልደቡብ ንደቤሌናቫጆንያንጃኦኪታንኛኦሮሞኛኦዲያኛኦሴቲክፑንጃብኛፖሊሽኛፓሽቶኛፖርቹጋልኛኵቿኛሮማንሽሩንዲኛሮማኒያንራ" + + "ሽያኛኪንያርዋንድኛሳንስክሪትኛሳርዲንያንኛሲንድሂኛሰሜናዊ ሳሚሳንጎኛሲንሃልኛስሎቫክኛስሎቪኛሳሞአኛሾናኛሱማልኛአልባን" + + "ያንኛሰርቢኛስዋቲኛደቡባዊ ሶቶሱዳንኛስዊድንኛስዋሂሊኛታሚልኛተሉጉኛታጂኪኛታይኛትግርኛቱርክሜንኛጽዋናዊኛቶንጋኛቱርክኛ" + + "ጾንጋኛታታርኛታሂታንኛኡዊግሁርኛዩክሬንኛኡርዱኛኡዝቤክኛቬንዳቪየትናምኛቮላፑክኛዋሎንዎሎፍኛዞሳኛይዲሽኛዮሩባዊኛዡዋንግ" + + "ኛቻይንኛዙሉኛአቻይንኛአኮሊኛአዳንግሜአድይግሄአፍሪሂሊአገምአይኑአካዲያንአላባማአልዩትደቡባዊ አልታይአንጊካአራማይክማ" + + "ፑቼአራኦናአራፓሆየአልጄሪያ ዓረብኛአራዋክአሱየአሜሪካ የምልክት ቋንቋአውስትሪያንአዋድሂባሉቺባሊኔስባቫሪያንባሳባሙን" + + "ባታካ ቶባቤጃቤምባቤታዊቤናባፉትባዳጋየምዕራብ ባሎቺቦጁሪቢኮልቢኒባንጃርሲክሲካቢሹንፑሪያባክህቲያሪብራጅብራሁዪቦዶአኮ" + + "ስቡሪያትቡጊኔዝቡሉብሊንካዶካሪብካዩጋአትሳምካቡዋኖቺጋኛቺብቻቻጋታይቹክስማሪቺኑክ ጃርጎንቾክታዋቺፔውያንቼሮኬኛችዬኔየ" + + "ሶራኒ ኩርድኛኮፕቲክካፒዝኖንክሪሚያን ተርኪሽሰሰላዊ ክሬኦሊ ፈረንሳይኛዳኮታዳርግዋታይታኛዳላዌርዶግሪብዲንካዛርማኛዶ" + + "ግሪየታችኛው ሰርቢያንኛሴንተራል ዱሰንዱዋላኛጆላ ፎንያኛድዩላዳዛጋኢቦኛኤፊክየጥንታዊ ግብጽኛኤካጁክሴንተራል ዩፒክኤ" + + "ዎንዶፊሊፒንኛፎንካጁን ፍሬንችአርፒታንፍሩሊያንጋጋጉዝኛጋን ቻይንኛግዕዝኛጅልበርትስጎሮንታሎየጥንታዊ ግሪክየስዊዝ ጀ" + + "ርመንጉስሊኛግዊቺንሃካ ቻይንኛሃዊያኛሂሊጋይኖንህሞንግየላይኛው ሶርቢያንኛዢያንግ ቻይንኛሁፓኢባንኢቢቦኢሎኮኢንጉሽሎጅ" + + "ባንንጎባኛማቻሜኛካብይልካቺንካጅካምባካባርዲያንታያፕማኮንዴካቡቨርዲያኑኮሮክሃሲኮይራ ቺኒካኮካለንጂንኪምቡንዱኮሚ ፔር" + + "ምያክኮንካኒክፔሌካራቻይ-ባልካርካረሊኛኩሩክሻምባላባፊያኮሎኝያንኩማይክላዲኖላንጊሌዝጊያንላኮታሎዚኛሰሜናዊ ሉሪሉባ-ሉ" + + "ሏሉንዳሉኦሚዞሉዪያማዱረስማጋሂማይተሊማካሳርማሳይሞክሻሜንዴሜሩሞሪሲየኛማኩዋ ሜቶሜታሚክማክሚናንግካባኡማኒፑሪሞሃውክሞ" + + "ሲሙንዳንግባለብዙ ቋንቋዎችክሪክሚራንዴዝኛኤርዝያማዛንደራኒሚን ኛን ቻይንኛኒአፖሊታንናማየታችኛው ጀርመንነዋሪኒአስኒ" + + "ዩአንኛኦ ናጋክዋሲዮኒጊምቡንኖጋይንኮሰሜናዊ ሶቶኑዌርክላሲክ ኔዋሪኒያንኮልኛፓንጋሲናንኛፓምፓንጋፓፒአሜንቶፓላኡአንየ" + + "ናይጄሪያ ፒጂንፐሩሳንኛኪቼቺምቦራዞ ሃይላንድ ኩቹዋራፓኑኢራሮቶንጋሮምቦአሮማንያንርዋሳንዳዌሳክሃሳምቡሩሳንታሊንጋምባ" + + "ይሳንጉሲሲሊያንኛስኮትስደቡባዊ ኩርዲሽሴናኮይራቦሮ ሴኒታቼልሂትሻንቻዲያን ዓረብኛሲዳምኛደቡባዊ ሳሚሉሌ ሳሚኢናሪ ሳ" + + "ሚስኮልት ሳሚሶኒንኬስራናን ቶንጎሳሆኛሱኩማኮሞሪያንክላሲክ ኔይራሲሪያክቲምኔቴሶቴተምትግረክሊንጎንኛቶክ ፒሲንታሮኮቱ" + + "ምቡካቱቫሉታሳዋቅቱቪንያንኛመካከለኛ አትላስ ታማዚግትኡድሙርትኡምቡንዱያልታወቀ ቋንቋቫይቩንጆዋልሰርወላይትኛዋራይዋር" + + "ልፒሪዉ ቻይንኛካልማይክሶጋያንግቤንኛየምባካንቶኒዝብሊስይምቦልስመደበኛ የሞሮኮ ታማዚግትዙኒቋንቋዊ ይዘት አይደለምዛ" + + "ዛዘመናዊ መደበኛ ዓረብኛየኦስትሪያ ጀርመንየስዊዝ ከፍተኛ ጀርመንኛየአውስትራሊያ እንግሊዝኛየካናዳ እንግሊዝኛየብሪ" + + "ቲሽ እንግሊዝኛየአሜሪካ እንግሊዝኛየላቲን አሜሪካ ስፓኒሽየአውሮፓ ስፓንሽኛየሜክሲኮ ስፓንሽኛየካናዳ ፈረንሳይኛየስ" + + "ዊዝ ፈረንሳይኛየታችኛው ሳክሰንፍሌሚሽየብራዚል ፖርቹጋልኛየአውሮፓ ፖርቹጋልኛሞልዳቪያንኛሰርቦ-ክሮኤሽያኛኮንጎ ስዋ" + + "ሂሊቀለል ያለ ቻይንኛባህላዊ ቻይንኛ" + +var amLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x000c, 0x001b, 0x002a, 0x003c, 0x0048, 0x0054, 0x0063, 0x006f, 0x007e, 0x008a, 0x0099, 0x00ae, 0x00bd, 0x00cc, 0x00db, @@ -15667,604 +16922,606 @@ var amLangIdx = []uint16{ // 613 elements 0x01b4, 0x01bd, 0x01cf, 0x01d5, 0x01e1, 0x01f3, 0x0205, 0x0214, 0x0229, 0x0235, 0x0244, 0x024d, 0x0256, 0x025f, 0x0268, 0x027a, 0x0296, 0x02a2, 0x02be, 0x02ca, 0x02d6, 0x02e5, 0x02f4, 0x0300, - 0x030f, 0x031b, 0x031b, 0x032d, 0x0339, 0x0348, 0x0357, 0x0360, + 0x0315, 0x0321, 0x0321, 0x0333, 0x033f, 0x034e, 0x035d, 0x0366, // Entry 40 - 7F - 0x0375, 0x0387, 0x039f, 0x03ab, 0x03ba, 0x03cc, 0x03d2, 0x03e7, - 0x03f6, 0x040b, 0x0417, 0x0423, 0x0432, 0x043e, 0x0447, 0x0453, - 0x045f, 0x0471, 0x0480, 0x048c, 0x0498, 0x04a1, 0x04b0, 0x04bf, - 0x04c5, 0x04d1, 0x04e0, 0x04ec, 0x0507, 0x0513, 0x0525, 0x0534, - 0x0540, 0x0552, 0x0565, 0x0574, 0x0583, 0x0595, 0x05a1, 0x05b0, - 0x05c2, 0x05d4, 0x05e0, 0x05ec, 0x05fb, 0x0607, 0x0610, 0x0626, - 0x0632, 0x063e, 0x0644, 0x0666, 0x0682, 0x0698, 0x06a1, 0x06ad, - 0x06bc, 0x06bc, 0x06c8, 0x06d4, 0x06e0, 0x06ef, 0x06ef, 0x06fb, + 0x037b, 0x038d, 0x03a5, 0x03b1, 0x03c0, 0x03d2, 0x03d8, 0x03ed, + 0x03fc, 0x0411, 0x041d, 0x0429, 0x0438, 0x0444, 0x044d, 0x0459, + 0x0465, 0x0477, 0x0486, 0x0492, 0x049e, 0x04a7, 0x04b6, 0x04c5, + 0x04cb, 0x04d7, 0x04e6, 0x04f2, 0x0507, 0x0513, 0x0525, 0x0534, + 0x053d, 0x054f, 0x0562, 0x0571, 0x0580, 0x0592, 0x059e, 0x05ad, + 0x05bf, 0x05d1, 0x05dd, 0x05e9, 0x05f8, 0x0604, 0x060d, 0x0623, + 0x062f, 0x063b, 0x0641, 0x0663, 0x067f, 0x0695, 0x069e, 0x06aa, + 0x06b9, 0x06b9, 0x06c5, 0x06d1, 0x06dd, 0x06ec, 0x06ec, 0x06f8, // Entry 80 - BF - 0x0707, 0x0719, 0x0722, 0x072e, 0x073a, 0x0749, 0x0755, 0x076d, - 0x0782, 0x0797, 0x07a6, 0x07b9, 0x07c5, 0x07d4, 0x07e3, 0x07ef, - 0x07fb, 0x0804, 0x0810, 0x0825, 0x0831, 0x083d, 0x0850, 0x085c, - 0x086b, 0x087a, 0x0886, 0x0892, 0x089e, 0x08a7, 0x08b3, 0x08c5, - 0x08d4, 0x08e0, 0x08ec, 0x08f8, 0x0904, 0x0913, 0x0925, 0x0934, - 0x0940, 0x094f, 0x0958, 0x096a, 0x0979, 0x0982, 0x098e, 0x0997, - 0x09a3, 0x09b2, 0x09c1, 0x09cd, 0x09d6, 0x09e5, 0x09f1, 0x0a00, - 0x0a0f, 0x0a0f, 0x0a1e, 0x0a27, 0x0a30, 0x0a3f, 0x0a4b, 0x0a57, + 0x0704, 0x0716, 0x071f, 0x072b, 0x0737, 0x0746, 0x0752, 0x076a, + 0x077f, 0x0794, 0x07a3, 0x07b6, 0x07c2, 0x07d1, 0x07e0, 0x07ec, + 0x07f8, 0x0801, 0x080d, 0x0822, 0x082e, 0x083a, 0x084d, 0x0859, + 0x0868, 0x0877, 0x0883, 0x088f, 0x089b, 0x08a4, 0x08b0, 0x08c2, + 0x08d1, 0x08dd, 0x08e9, 0x08f5, 0x0901, 0x0910, 0x0922, 0x0931, + 0x093d, 0x094c, 0x0955, 0x0967, 0x0976, 0x097f, 0x098b, 0x0994, + 0x09a0, 0x09af, 0x09be, 0x09ca, 0x09d3, 0x09e2, 0x09ee, 0x09fd, + 0x0a0c, 0x0a0c, 0x0a1b, 0x0a24, 0x0a2d, 0x0a3c, 0x0a48, 0x0a54, // Entry C0 - FF - 0x0a57, 0x0a70, 0x0a70, 0x0a7c, 0x0a8b, 0x0a94, 0x0aa0, 0x0aac, - 0x0acb, 0x0acb, 0x0ad7, 0x0ad7, 0x0ad7, 0x0add, 0x0b06, 0x0b1b, - 0x0b1b, 0x0b27, 0x0b30, 0x0b3c, 0x0b4b, 0x0b51, 0x0b5a, 0x0b6a, - 0x0b6a, 0x0b70, 0x0b79, 0x0b82, 0x0b88, 0x0b91, 0x0b9a, 0x0bb3, - 0x0bbc, 0x0bc5, 0x0bcb, 0x0bd7, 0x0bd7, 0x0be3, 0x0bf5, 0x0c07, - 0x0c10, 0x0c1c, 0x0c22, 0x0c2b, 0x0c37, 0x0c43, 0x0c49, 0x0c52, - 0x0c52, 0x0c58, 0x0c61, 0x0c6a, 0x0c76, 0x0c82, 0x0c8b, 0x0c94, - 0x0ca0, 0x0ca9, 0x0caf, 0x0cc5, 0x0cd1, 0x0ce0, 0x0cec, 0x0cf5, + 0x0a54, 0x0a6d, 0x0a6d, 0x0a79, 0x0a88, 0x0a91, 0x0a9d, 0x0aa9, + 0x0ac8, 0x0ac8, 0x0ad4, 0x0ad4, 0x0ad4, 0x0ada, 0x0b03, 0x0b18, + 0x0b18, 0x0b24, 0x0b2d, 0x0b39, 0x0b48, 0x0b4e, 0x0b57, 0x0b67, + 0x0b67, 0x0b6d, 0x0b76, 0x0b7f, 0x0b85, 0x0b8e, 0x0b97, 0x0bb0, + 0x0bb9, 0x0bc2, 0x0bc8, 0x0bd4, 0x0bd4, 0x0be0, 0x0bf2, 0x0c04, + 0x0c0d, 0x0c19, 0x0c1f, 0x0c28, 0x0c34, 0x0c40, 0x0c46, 0x0c4f, + 0x0c4f, 0x0c55, 0x0c5e, 0x0c67, 0x0c73, 0x0c73, 0x0c7f, 0x0c88, + 0x0c91, 0x0c9d, 0x0ca6, 0x0cac, 0x0cc2, 0x0cce, 0x0cdd, 0x0ce9, // Entry 100 - 13F - 0x0d0e, 0x0d1a, 0x0d29, 0x0d45, 0x0d71, 0x0d71, 0x0d7a, 0x0d86, - 0x0d92, 0x0d9e, 0x0d9e, 0x0daa, 0x0db3, 0x0dbf, 0x0dc8, 0x0dea, - 0x0e03, 0x0e0f, 0x0e0f, 0x0e22, 0x0e2b, 0x0e34, 0x0e3d, 0x0e46, - 0x0e46, 0x0e62, 0x0e6e, 0x0e6e, 0x0e6e, 0x0e87, 0x0e93, 0x0e93, - 0x0e93, 0x0ea2, 0x0ea2, 0x0ea8, 0x0ebe, 0x0ebe, 0x0ebe, 0x0ecd, - 0x0ecd, 0x0ecd, 0x0edc, 0x0edf, 0x0eeb, 0x0efe, 0x0efe, 0x0efe, - 0x0efe, 0x0f0a, 0x0f1c, 0x0f1c, 0x0f1c, 0x0f1c, 0x0f1c, 0x0f1c, - 0x0f2b, 0x0f2b, 0x0f2b, 0x0f44, 0x0f5d, 0x0f5d, 0x0f5d, 0x0f69, + 0x0cf2, 0x0d0b, 0x0d17, 0x0d26, 0x0d42, 0x0d6e, 0x0d6e, 0x0d77, + 0x0d83, 0x0d8f, 0x0d9b, 0x0d9b, 0x0da7, 0x0db0, 0x0dbc, 0x0dc5, + 0x0de7, 0x0e00, 0x0e0c, 0x0e0c, 0x0e1f, 0x0e28, 0x0e31, 0x0e3a, + 0x0e43, 0x0e43, 0x0e5f, 0x0e6b, 0x0e6b, 0x0e6b, 0x0e84, 0x0e90, + 0x0e90, 0x0e90, 0x0e9f, 0x0e9f, 0x0ea5, 0x0ebb, 0x0ebb, 0x0ebb, + 0x0eca, 0x0eca, 0x0eca, 0x0ed9, 0x0edc, 0x0ee8, 0x0efb, 0x0efb, + 0x0efb, 0x0efb, 0x0f07, 0x0f19, 0x0f19, 0x0f19, 0x0f19, 0x0f19, + 0x0f19, 0x0f28, 0x0f28, 0x0f28, 0x0f41, 0x0f5a, 0x0f5a, 0x0f5a, // Entry 140 - 17F - 0x0f75, 0x0f75, 0x0f88, 0x0f94, 0x0f94, 0x0fa6, 0x0fa6, 0x0fb2, - 0x0fd4, 0x0fed, 0x0ff3, 0x0ffc, 0x1005, 0x100e, 0x101a, 0x101a, - 0x101a, 0x1026, 0x1032, 0x103e, 0x103e, 0x103e, 0x103e, 0x103e, - 0x104a, 0x1053, 0x1059, 0x1062, 0x1062, 0x1074, 0x1074, 0x107d, - 0x1089, 0x109e, 0x109e, 0x10a4, 0x10a4, 0x10ad, 0x10ad, 0x10bd, - 0x10bd, 0x10bd, 0x10c3, 0x10d2, 0x10e1, 0x10f7, 0x1103, 0x1103, - 0x110c, 0x1125, 0x1125, 0x1125, 0x1131, 0x113a, 0x1146, 0x114f, - 0x115e, 0x116a, 0x116a, 0x1173, 0x117c, 0x117c, 0x117c, 0x118b, + 0x0f66, 0x0f72, 0x0f72, 0x0f85, 0x0f91, 0x0f91, 0x0fa3, 0x0fa3, + 0x0faf, 0x0fd1, 0x0fea, 0x0ff0, 0x0ff9, 0x1002, 0x100b, 0x1017, + 0x1017, 0x1017, 0x1023, 0x102f, 0x103b, 0x103b, 0x103b, 0x103b, + 0x103b, 0x1047, 0x1050, 0x1056, 0x105f, 0x105f, 0x1071, 0x1071, + 0x107a, 0x1086, 0x109b, 0x109b, 0x10a1, 0x10a1, 0x10aa, 0x10aa, + 0x10ba, 0x10ba, 0x10ba, 0x10c0, 0x10cf, 0x10de, 0x10f4, 0x1100, + 0x1100, 0x1109, 0x1122, 0x1122, 0x1122, 0x112e, 0x1137, 0x1143, + 0x114c, 0x115b, 0x1167, 0x1167, 0x1170, 0x1179, 0x1179, 0x1179, // Entry 180 - 1BF - 0x118b, 0x118b, 0x118b, 0x1194, 0x1194, 0x1194, 0x119d, 0x11b0, - 0x11b0, 0x11bd, 0x11bd, 0x11c6, 0x11cc, 0x11d2, 0x11db, 0x11db, - 0x11db, 0x11e7, 0x11e7, 0x11f0, 0x11fc, 0x1208, 0x1208, 0x1211, - 0x1211, 0x121a, 0x121a, 0x1223, 0x1229, 0x1238, 0x1238, 0x1248, - 0x124e, 0x125a, 0x126f, 0x126f, 0x127b, 0x1287, 0x128d, 0x128d, - 0x129c, 0x12b8, 0x12c1, 0x12d3, 0x12d3, 0x12d3, 0x12d3, 0x12df, - 0x12f1, 0x130b, 0x131d, 0x1323, 0x133f, 0x1348, 0x1351, 0x1360, - 0x136a, 0x1376, 0x1385, 0x138e, 0x138e, 0x138e, 0x1394, 0x13a7, + 0x1188, 0x1188, 0x1188, 0x1188, 0x1191, 0x1191, 0x1191, 0x1191, + 0x119a, 0x11ad, 0x11ad, 0x11ba, 0x11ba, 0x11c3, 0x11c9, 0x11cf, + 0x11d8, 0x11d8, 0x11d8, 0x11e4, 0x11e4, 0x11ed, 0x11f9, 0x1205, + 0x1205, 0x120e, 0x120e, 0x1217, 0x1217, 0x1220, 0x1226, 0x1235, + 0x1235, 0x1245, 0x124b, 0x1257, 0x126c, 0x126c, 0x1278, 0x1284, + 0x128a, 0x128a, 0x1299, 0x12b5, 0x12be, 0x12d0, 0x12d0, 0x12d0, + 0x12d0, 0x12dc, 0x12ee, 0x1308, 0x131a, 0x1320, 0x133c, 0x1345, + 0x134e, 0x135d, 0x1367, 0x1373, 0x1382, 0x138b, 0x138b, 0x138b, // Entry 1C0 - 1FF - 0x13b0, 0x13c6, 0x13c6, 0x13d8, 0x13d8, 0x13d8, 0x13d8, 0x13d8, - 0x13ed, 0x13ed, 0x13fc, 0x140e, 0x141d, 0x141d, 0x1439, 0x1439, - 0x1439, 0x1439, 0x1439, 0x1439, 0x1439, 0x1439, 0x1439, 0x1448, - 0x1448, 0x144e, 0x1477, 0x1477, 0x1483, 0x1492, 0x1492, 0x1492, - 0x149b, 0x149b, 0x149b, 0x149b, 0x149b, 0x14ad, 0x14b3, 0x14bf, - 0x14c8, 0x14c8, 0x14d4, 0x14d4, 0x14e0, 0x14e0, 0x14ef, 0x14f8, - 0x150a, 0x1516, 0x1516, 0x152f, 0x152f, 0x1535, 0x1535, 0x1535, - 0x154b, 0x154b, 0x154b, 0x155a, 0x1560, 0x1579, 0x1585, 0x1585, + 0x1391, 0x13a4, 0x13ad, 0x13c3, 0x13c3, 0x13d5, 0x13d5, 0x13d5, + 0x13d5, 0x13d5, 0x13ea, 0x13ea, 0x13f9, 0x140b, 0x141a, 0x141a, + 0x1436, 0x1436, 0x1436, 0x1436, 0x1436, 0x1436, 0x1436, 0x1436, + 0x1436, 0x1445, 0x1445, 0x144b, 0x1474, 0x1474, 0x1480, 0x148f, + 0x148f, 0x148f, 0x1498, 0x1498, 0x1498, 0x1498, 0x1498, 0x14aa, + 0x14b0, 0x14bc, 0x14c5, 0x14c5, 0x14d1, 0x14d1, 0x14dd, 0x14dd, + 0x14ec, 0x14f5, 0x1507, 0x1513, 0x1513, 0x152c, 0x152c, 0x1532, + 0x1532, 0x1532, 0x1548, 0x1548, 0x1548, 0x1557, 0x155d, 0x1576, // Entry 200 - 23F - 0x1585, 0x1598, 0x15a5, 0x15b5, 0x15c8, 0x15d4, 0x15d4, 0x15ea, - 0x15ea, 0x15f3, 0x15f3, 0x15fc, 0x15fc, 0x15fc, 0x160b, 0x1621, - 0x162d, 0x162d, 0x162d, 0x1636, 0x163c, 0x163c, 0x1645, 0x164e, - 0x164e, 0x164e, 0x164e, 0x1660, 0x1660, 0x1660, 0x1660, 0x1660, - 0x1670, 0x1670, 0x1679, 0x1679, 0x1679, 0x1679, 0x1685, 0x168e, - 0x169a, 0x16ac, 0x16d8, 0x16e7, 0x16e7, 0x16f6, 0x16fc, 0x1702, - 0x1702, 0x1702, 0x1702, 0x1702, 0x1702, 0x1702, 0x170b, 0x1717, - 0x1726, 0x172f, 0x172f, 0x173e, 0x174e, 0x175d, 0x175d, 0x1763, + 0x1582, 0x1582, 0x1582, 0x1595, 0x15a2, 0x15b2, 0x15c5, 0x15d1, + 0x15d1, 0x15e7, 0x15e7, 0x15f0, 0x15f0, 0x15f9, 0x15f9, 0x15f9, + 0x1608, 0x161e, 0x162a, 0x162a, 0x162a, 0x1633, 0x1639, 0x1639, + 0x1642, 0x164b, 0x164b, 0x164b, 0x164b, 0x165d, 0x165d, 0x165d, + 0x165d, 0x165d, 0x166d, 0x166d, 0x1676, 0x1676, 0x1676, 0x1676, + 0x1682, 0x168b, 0x1697, 0x16a9, 0x16d5, 0x16e4, 0x16e4, 0x16f3, + 0x170c, 0x1712, 0x1712, 0x1712, 0x1712, 0x1712, 0x1712, 0x1712, + 0x171b, 0x1727, 0x1736, 0x173f, 0x173f, 0x174e, 0x175e, 0x176d, // Entry 240 - 27F - 0x1763, 0x1763, 0x1775, 0x177e, 0x177e, 0x178d, 0x178d, 0x17a5, - 0x17a5, 0x17a5, 0x17ce, 0x17d4, 0x17fa, 0x1800, 0x1826, 0x1826, - 0x1845, 0x186e, 0x1899, 0x18b8, 0x18da, 0x18fc, 0x1922, 0x1941, - 0x1960, 0x1960, 0x197f, 0x199e, 0x19ba, 0x19c6, 0x19e8, 0x1a0a, - 0x1a1f, 0x1a3b, 0x1a51, 0x1a6e, 0x1a87, -} // Size: 1250 bytes - -const arLangStr string = "" + // Size: 10039 bytes + 0x176d, 0x1773, 0x1773, 0x1773, 0x1785, 0x178e, 0x178e, 0x179d, + 0x179d, 0x17b5, 0x17b5, 0x17b5, 0x17de, 0x17e4, 0x180a, 0x1810, + 0x1836, 0x1836, 0x1855, 0x187e, 0x18a9, 0x18c8, 0x18ea, 0x190c, + 0x1932, 0x1951, 0x1970, 0x1970, 0x198f, 0x19ae, 0x19ca, 0x19d6, + 0x19f8, 0x1a1a, 0x1a2f, 0x1a4b, 0x1a61, 0x1a7e, 0x1a97, +} // Size: 1254 bytes + +const arLangStr string = "" + // Size: 10092 bytes "الأفاريةالأبخازيةالأفستيةالأفريقانيةالأكانيةالأمهريةالأراغونيةالعربيةالأ" + "ساميةالأواريةالأيماراالأذربيجانيةالباشكيريةالبيلاروسيةالبلغاريةالبيسلام" + "يةالبامباراالبنغاليةالتبتيةالبريتونيةالبوسنيةالكتالانيةالشيشانيةالتشامو" + - "روالكورسيكيةالكرىالتشيكيةسلافية كنسيةالتشوفاشيالويلزيةالدانماركيةالألما" + - "نيةالمالديفيةالزونخايةالإيوياليونانيةالإنجليزيةالإسبرانتوالإسبانيةالإست" + - "ونيةلغة الباسكالفارسيةالفولانيةالفنلنديةالفيجيةالفارويةالفرنسيةالفريزيا" + - "نالأيرلنديةالغيلية الأسكتلنديةالجاليكيةالغوارانيةالغوجاراتيةالمنكيةالهو" + - "ساالعبريةالهنديةالهيري موتوالكرواتيةالكريولية الهايتيةالهنغاريةالأرميني" + - "ةالهيريرواللّغة الوسيطةالإندونيسيةالإنترلينجالإيجبوالسيتشيون ييالإينبيا" + - "كالإيدوالأيسلنديةالإيطاليةالإينكتيتتاليابانيةالجاويةالجورجيةالكونغوالكي" + - "كيوالكيونياماالكازاخستانيةالكالاليستالخميريةالكاناداالكوريةالكانيوريالك" + - "شميريةالكرديةالكوميالكورنيةالقيرغيزيةاللاتينيةاللكسمبورغيةالجانداالليمب" + - "رجيشيةاللينجالااللاويةالليتوانيةاللبا-كاتانجااللاتفيةالمالاجاشيةالمارشا" + - "ليةالماوريةالمقدونيةالمالايالاميةالمنغوليةالماراثيةالماليزيةالمالطيةالب" + - "ورميةالنوروالنديبيل الشماليةالنيباليةالندونجاالهولنديةالنرويجية نينورسك" + - "النرويجية بوكمالالنديبيل الجنوبيالنافاجوالنيانجاالأوكيتانيةالأوجيبواالأ" + - "وروميةاللغة الأوريةالأوسيتيكالبنجابيةالباليةالبولنديةالبشتونيةالبرتغالي" + - "ةالكويتشواالرومانشيةالرنديالرومانيةالروسيةالكينياروانداالسنسكريتيةالسرد" + - "ينيةالسنديةالسامي الشماليةالسانجوالسنهاليةالسلوفاكيةالسلوفانيةالساموائي" + - "ةالشوناالصوماليةالألبانيةالصربيةالسواتيالسوتو الجنوبيةالسوندانيةالسويدي" + - "ةالسواحليةالتاميليةالتيلوجوالطاجيكيةالتايلانديةالتغرينيةالتركمانيةالتسو" + - "انيةالتونغيةالتركيةالسونجاالتتريةالتاهيتيةالأويغوريةالأوكرانيةالأورديةا" + - "لأوزبكيةالفينداالفيتناميةلغة الفولابوكالولونيةالولوفيةالخوسااليديشيةالي" + - "وروبيةالزهيونجالصينيةالزولوالأتشينيزيةالأكوليةالأدانجميةالأديغةالأفريهي" + - "ليةالأغمالآينويةالأكاديةالأليوتيةالألطائية الجنوبيةالإنجليزية القديمةال" + - "أنجيكاالآراميةالمابودونغونيةالأراباهواللهجة النجديةالأراواكيةالآسوالأست" + - "ريةالأواديةالبلوشيةاللغة الباليةالباسابامنلغة الغومالاالبيجاالبيمبابينا" + - "لغة البافوتالبلوشية الغربيةالبهوجبوريةالبيكوليةالبينيةلغة الكومالسيكسيك" + - "يةالبراجيةالبودوأكوسالبرياتيةالبجينيزيةلغة البولوالبلينيةلغة الميدومباا" + - "لكادوالكاريبيةالكايوجيةالأتسامالسيبونيةتشيغاالتشيبشاالتشاجاتايالتشكيزية" + - "الماريالشينوك جارجونالشوكتوالشيباوايانالشيروكيالشايانالسورانية الكرديةا" + - "لقبطيةلغة تتار القرمالفرنسية الكريولية السيشيليةالكاشبايانالداكوتاالدار" + - "جواتيتاالديلويرالسلافيةالدوجريبالدنكاالزارميةالدوجريةصوربيا السفلىالديو" + - "لاالهولندية الوسطىجولا فونياالدايلاالقرعانيةإمبوالإفيكالمصرية القديمةال" + - "إكاجكالإمايتالإنجليزية الوسطىالإيوندوالفانجالفلبينيةالفونالفرنسية الوسط" + - "ىالفرنسية القديمةالفريزينية الشماليةالفريزينية الشرقيةالفريلايانالجاالغ" + - "اغوزالغان الصينيةالجايوالجبياالجعزيةلغة أهل جبل طارقالألمانية العليا ال" + - "وسطىالألمانية العليا القديمةالجنديالجورونتالوالقوطيةالجريبواليونانية ال" + - "قديمةالألمانية السويسريةالغيزيةغوتشنالهيداالهاكا الصينيةلغة أهل الهاواي" + - "الهيليجينونالحثيةالهمونجيةالصوربية العلياشيانغ الصينيةالهباالإيبانالإيب" + - "يبيويةالإيلوكوالإنجوشيةاللوجباننغومباالماتشاميةالفارسية اليهوديةالعربية" + - " اليهوديةالكارا-كالباكالقبيليةالكاتشينالجوالكامباالكويالكاباردايانكانمبو" + - "التايابيةماكوندهكابوفيرديانوالكوروالكازيةالخوتانيزكويرا تشينيلغة الكاكو" + - "كالينجينالكيمبندوكومي-بيرماياكالكونكانيةالكوسراينالكبيلالكاراتشاي-بالكا" + - "رالكاريليةالكوروخشامبالالغة البافيالغة الكولونيانالقموقيةالكتيناياللادي" + - "نولانجياللاهندااللامباالليزجيةلاكوتامنغولىاللوزياللرية الشماليةاللبا-لؤ" + - "لؤاللوسينواللوندااللوالميزولغة اللوياالمادريزالماجاالمايثيليالماكاسارال" + - "ماندينغالماسايماباالموكشاالماندارالميندالميروالمورسيانيةالأيرلندية الوس" + - "طىماخاوا-ميتوميتاالميكماكيونيةالمينانجكاباوالمانشوالمانيبوريةالموهوكالم" + - "وسيمندنجلغات متعددةالكريكالميرانديزالمارواريةالأرزيةالمازندرانيةمين-نان" + - " الصينيةالنابوليةلغة الناماالألمانية السفلىالنواريةالنياسالنيويكواسيولغة" + - " النجيمبونالنوجايالنورس القديمأنكوالسوتو الشماليةالنويرالنوارية التقليدي" + - "ةالنيامويزيالنيانكولالنيوروالنزيماالأوساجالتركية العثمانيةالبانجاسينانا" + - "لبهلويةالبامبانجاالبابيامينتوالبالوانالبدجنية النيجيريةالفارسية القديمة" + - "الفينيقيةالبوهنبيايانالبروسياويةالبروفانسية القديمةكيشيالراجاسثانيةالرا" + - "بانيالراروتونجانيالرومبوالغجريةالأرومانيانالرواالسانداويالساخيةالآرامية" + - " السامريةسامبوروالساساكالسانتالينامبيسانغوالصقليةالأسكتلنديةالكردية الجن" + - "وبيةالسنيكاسيناالسيلكبكويرابورو سينيالأيرلندية القديمةتشلحيتالشانالعربي" + - "ة التشاديةالسيداموالسامي الجنوبياللول ساميالإيناري ساميالسكولت ساميالسو" + - "نينكالسوجدينالسرانان تونجوالسررلغة الساهوالسوكوماالسوسوالسوماريةالقمرية" + - "سريانية تقليديةالسريانيةالتيمنتيسوالتيرينوالتيتمالتيغريةالتيفالتوكيلاوا" + - "لكلينجونالتلينغيتيةالتاماشيكتونجا - نياساالتوك بيسينلغة التاروكوالتسيمش" + - "يانالتامبوكاالتوفالوتاساواقالتوفيةالأمازيغية وسط الأطلسالأدمرتاليجاريتي" + - "كالأمبندوالجذرالفايالفوتيكالفونجوالوالسرالولاياتاالوارايالواشووارلبيريا" + - "لوو الصينيةالكالميكالسوغاالياواليابيزيانجبنيمباالكَنْتُونيةالزابوتيكرمو" + - "ز المعايير الأساسيةالزيناجاالتمازيغية المغربية القياسيةالزونيةبدون محتو" + - "ى لغويزازاالعربية الرسمية الحديثةالألمانية النمساويةالألمانية العليا ال" + - "سويسريةالإنجليزية الأستراليةالإنجليزية الكنديةالإنجليزية البريطانيةالإن" + - "جليزية الأمريكيةالإسبانية أمريكا اللاتينيةالإسبانية الأوروبيةالإسبانية " + - "المكسيكيةالفرنسية الكنديةالفرنسية السويسريةالسكسونية السفلىالفلمنكيةالب" + - "رتغالية البرازيليةالبرتغالية الأوروبيةالمولدوفيةصربية-كرواتيةالكونغو ال" + - "سواحليةالصينية المبسطةالصينية التقليدية" - -var arLangIdx = []uint16{ // 613 elements + "روالكورسيكيةالكرىالتشيكيةسلافية كنسيةالتشوفاشيالويلزيةالدانمركيةالألمان" + + "يةالمالديفيةالزونخايةالإيوياليونانيةالإنجليزيةالإسبرانتوالإسبانيةالإستو" + + "نيةالباسكيةالفارسيةالفولانيةالفنلنديةالفيجيةالفارويةالفرنسيةالفريزيانال" + + "أيرلنديةالغيلية الأسكتلنديةالجاليكيةالغوارانيةالغوجاراتيةالمنكيةالهوساا" + + "لعبريةالهنديةالهيري موتوالكرواتيةالكريولية الهايتيةالهنغاريةالأرمنيةاله" + + "يريرواللّغة الوسيطةالإندونيسيةالإنترلينجالإيجبوالسيتشيون ييالإينبياكالإ" + + "يدوالأيسلنديةالإيطاليةالإينكتيتتاليابانيةالجاويةالجورجيةالكونغوالكيكيوا" + + "لكيونياماالكازاخستانيةالكالاليستالخميريةالكاناداالكوريةالكانوريالكشميري" + + "ةالكرديةالكوميالكورنيةالقيرغيزيةاللاتينيةاللكسمبورغيةالغانداالليمبورغية" + + "اللينجالااللاويةالليتوانيةاللوبا كاتانغااللاتفيةالمالاغاشيةالمارشاليةال" + + "ماوريةالمقدونيةالمالايالاميةالمنغوليةالماراثيةالماليزيةالمالطيةالبورمية" + + "النوروالنديبيل الشماليةالنيباليةالندونجاالهولنديةالنرويجية نينورسكبوكمو" + + "ل النرويجيةالنديبيل الجنوبيالنافاجوالنيانجاالأوكيتانيةالأوجيبواالأورومي" + + "ةالأوريةالأوسيتيكالبنجابيةالباليةالبولنديةالبشتوالبرتغاليةالكويتشواالرو" + + "مانشيةالرنديالرومانيةالروسيةالكينياروانداالسنسكريتيةالسردينيةالسنديةسام" + + "ي الشماليةالسانجوالسنهاليةالسلوفاكيةالسلوفانيةالساموائيةالشوناالصومالية" + + "الألبانيةالصربيةالسواتيالسوتو الجنوبيةالسوندانيةالسويديةالسواحليةالتامي" + + "ليةالتيلوغويةالطاجيكيةالتايلانديةالتغرينيةالتركمانيةالتسوانيةالتونغيةال" + + "تركيةالسونجاالتتريةالتاهيتيةالأويغوريةالأوكرانيةالأورديةالأوزبكيةالفيند" + + "االفيتناميةلغة الفولابوكالولونيةالولوفيةالخوسااليديشيةاليوروباالزهيونجا" + + "لصينيةالزولوالأتشينيزيةالأكوليةالأدانجميةالأديغةالأفريهيليةالأغمالآينوي" + + "ةالأكاديةالأليوتيةالألطائية الجنوبيةالإنجليزية القديمةالأنجيكاالآراميةا" + + "لمابودونغونيةالأراباهواللهجة النجديةالأراواكيةالآسوالأستريةالأواديةالبل" + + "وشيةالبالينيةالباسابامنلغة الغومالاالبيجاالبيمبابينالغة البافوتالبلوشية" + + " الغربيةالبهوجبوريةالبيكوليةالبينيةلغة الكومالسيكسيكيةالبراجيةالبودوأكوس" + + "البرياتيةالبجينيزيةلغة البولوالبلينيةلغة الميدومباالكادوالكاريبيةالكايو" + + "جيةالأتسامالسيبونيةتشيغاالتشيبشاالتشاجاتايالتشكيزيةالماريالشينوك جارجون" + + "الشوكتوالشيباوايانالشيروكيالشايانالسورانية الكرديةالقبطيةلغة تتار القرم" + + "الفرنسية الكريولية السيشيليةالكاشبايانالداكوتاالدارجواتيتاالديلويرالسلا" + + "فيةالدوجريبالدنكاالزارميةالدوجريةصوربيا السفلىالديولاالهولندية الوسطىجو" + + "لا فونياالدايلاالقرعانيةإمبوالإفيكالمصرية القديمةالإكاجكالإمايتالإنجليز" + + "ية الوسطىالإيوندوالفانجالفلبينيةالفونالفرنسية الكاجونيةالفرنسية الوسطىا" + + "لفرنسية القديمةالفريزينية الشماليةالفريزينية الشرقيةالفريلايانالجاالغاغ" + + "وزالغان الصينيةالجايوالجبياالجعزيةلغة أهل جبل طارقالألمانية العليا الوس" + + "طىالألمانية العليا القديمةالجنديالجورونتالوالقوطيةالجريبواليونانية القد" + + "يمةالألمانية السويسريةالغيزيةغوتشنالهيداالهاكا الصينيةلغة أهل الهاوايال" + + "هيليجينونالحثيةالهمونجيةالصوربية العلياشيانغ الصينيةالهباالإيبانالإيبيب" + + "يوالإيلوكوالإنجوشيةاللوجباننغومباالماتشاميةالفارسية اليهوديةالعربية الي" + + "هوديةالكارا-كالباكالقبيليةالكاتشينالجوالكامباالكويالكاباردايانكانمبوالت" + + "ايابيةماكوندهكابوفيرديانوالكوروالكازيةالخوتانيزكويرا تشينيلغة الكاكوكال" + + "ينجينالكيمبندوكومي-بيرماياكالكونكانيةالكوسراينالكبيلالكاراتشاي-بالكارال" + + "كاريليةالكوروخشامبالالغة البافيالغة الكولونيانالقموقيةالكتيناياللادينول" + + "انجياللاهندااللامباالليزجيةلاكوتامنغولىالكريولية اللويزيانيةاللوزياللري" + + "ة الشماليةاللبا-لؤلؤاللوسينواللوندااللوالميزولغة اللوياالمادريزالماجاال" + + "مايثيليالماكاسارالماندينغالماسايماباالموكشاالماندارالميندالميروالمورسيا" + + "نيةالأيرلندية الوسطىماخاوا-ميتوميتاالميكماكيونيةالمينانجكاباوالمانشوالم" + + "انيبوريةالموهوكالموسيمندنجلغات متعددةالكريكالميرانديزالمارواريةالأرزيةا" + + "لمازندرانيةمين-نان الصينيةالنابوليةلغة الناماالألمانية السفلىالنواريةال" + + "نياسالنيويكواسيولغة النجيمبونالنوجايالنورس القديمأنكوالسوتو الشماليةالن" + + "ويرالنوارية التقليديةالنيامويزيالنيانكولالنيوروالنزيماالأوساجالتركية ال" + + "عثمانيةالبانجاسينانالبهلويةالبامبانجاالبابيامينتوالبالوانالبدجنية النيج" + + "يريةالفارسية القديمةالفينيقيةالبوهنبيايانالبروسياويةالبروفانسية القديمة" + + "كيشيالراجاسثانيةالرابانيالراروتونجانيالرومبوالغجريةالأرومانيانالرواالسا" + + "نداويالساخيةالآرامية السامريةسامبوروالساساكالسانتالينامبيسانغوالصقليةال" + + "أسكتلنديةالكردية الجنوبيةالسنيكاسيناالسيلكبكويرابورو سينيالأيرلندية الق" + + "ديمةتشلحيتالشانالعربية التشاديةالسيداموالسامي الجنوبياللول ساميالإيناري" + + " ساميالسكولت ساميالسونينكالسوجدينالسرانان تونجوالسررلغة الساهوالسوكوماال" + + "سوسوالسوماريةالقمريةسريانية تقليديةالسريانيةالتيمنتيسوالتيرينوالتيتمالت" + + "يغريةالتيفالتوكيلاوالكلينجونالتلينغيتيةالتاماشيكتونجا - نياساالتوك بيسي" + + "نلغة التاروكوالتسيمشيانالتامبوكاالتوفالوتاساواقالتوفيةالأمازيغية وسط ال" + + "أطلسالأدمرتاليجاريتيكالأمبندولغة غير معروفةالفايالفوتيكالفونجوالوالسرال" + + "ولاياتاالوارايالواشووارلبيريالوو الصينيةالكالميكالسوغاالياواليابيزيانجب" + + "نيمباالكَنْتُونيةالزابوتيكرموز المعايير الأساسيةالزيناجاالتمازيغية المغ" + + "ربية القياسيةالزونيةبدون محتوى لغويزازاالعربية الرسمية الحديثةالألمانية" + + " النمساويةالألمانية العليا السويسريةالإنجليزية الأستراليةالإنجليزية الكن" + + "ديةالإنجليزية البريطانيةالإنجليزية الأمريكيةالإسبانية أمريكا اللاتينيةا" + + "لإسبانية الأوروبيةالإسبانية المكسيكيةالفرنسية الكنديةالفرنسية السويسرية" + + "السكسونية السفلىالفلمنكيةالبرتغالية البرازيليةالبرتغالية الأوروبيةالمول" + + "دوفيةصربية-كرواتيةالكونغو السواحليةالصينية المبسطةالصينية التقليدية" + +var arLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0010, 0x0022, 0x0032, 0x0048, 0x0058, 0x0068, 0x007c, 0x008a, 0x009a, 0x00aa, 0x00ba, 0x00d2, 0x00e6, 0x00fc, 0x010e, 0x0122, 0x0134, 0x0146, 0x0154, 0x0168, 0x0178, 0x018c, 0x019e, - 0x01b0, 0x01c4, 0x01ce, 0x01de, 0x01f5, 0x0207, 0x0217, 0x022d, - 0x023f, 0x0253, 0x0265, 0x0271, 0x0283, 0x0297, 0x02ab, 0x02bd, - 0x02cf, 0x02e2, 0x02f2, 0x0304, 0x0316, 0x0324, 0x0334, 0x0344, - 0x0356, 0x036a, 0x038f, 0x03a1, 0x03b5, 0x03cb, 0x03d9, 0x03e5, - 0x03f3, 0x0401, 0x0416, 0x0428, 0x044b, 0x045d, 0x046f, 0x047f, + 0x01b0, 0x01c4, 0x01ce, 0x01de, 0x01f5, 0x0207, 0x0217, 0x022b, + 0x023d, 0x0251, 0x0263, 0x026f, 0x0281, 0x0295, 0x02a9, 0x02bb, + 0x02cd, 0x02dd, 0x02ed, 0x02ff, 0x0311, 0x031f, 0x032f, 0x033f, + 0x0351, 0x0365, 0x038a, 0x039c, 0x03b0, 0x03c6, 0x03d4, 0x03e0, + 0x03ee, 0x03fc, 0x0411, 0x0423, 0x0446, 0x0458, 0x0468, 0x0478, // Entry 40 - 7F - 0x049a, 0x04b0, 0x04c4, 0x04d2, 0x04e9, 0x04fb, 0x0507, 0x051b, - 0x052d, 0x0541, 0x0553, 0x0561, 0x0571, 0x057f, 0x058d, 0x05a1, - 0x05bb, 0x05cf, 0x05df, 0x05ef, 0x05fd, 0x060f, 0x0621, 0x062f, - 0x063b, 0x064b, 0x065f, 0x0671, 0x0689, 0x0697, 0x06af, 0x06c1, - 0x06cf, 0x06e3, 0x06fc, 0x070c, 0x0722, 0x0736, 0x0746, 0x0758, - 0x0772, 0x0784, 0x0796, 0x07a8, 0x07b8, 0x07c8, 0x07d4, 0x07f5, - 0x0807, 0x0817, 0x0829, 0x084a, 0x0869, 0x0888, 0x0898, 0x08a8, - 0x08be, 0x08d0, 0x08e2, 0x08fb, 0x090d, 0x091f, 0x092d, 0x093f, + 0x0493, 0x04a9, 0x04bd, 0x04cb, 0x04e2, 0x04f4, 0x0500, 0x0514, + 0x0526, 0x053a, 0x054c, 0x055a, 0x056a, 0x0578, 0x0586, 0x059a, + 0x05b4, 0x05c8, 0x05d8, 0x05e8, 0x05f6, 0x0606, 0x0618, 0x0626, + 0x0632, 0x0642, 0x0656, 0x0668, 0x0680, 0x068e, 0x06a4, 0x06b6, + 0x06c4, 0x06d8, 0x06f3, 0x0703, 0x0719, 0x072d, 0x073d, 0x074f, + 0x0769, 0x077b, 0x078d, 0x079f, 0x07af, 0x07bf, 0x07cb, 0x07ec, + 0x07fe, 0x080e, 0x0820, 0x0841, 0x0860, 0x087f, 0x088f, 0x089f, + 0x08b5, 0x08c7, 0x08d9, 0x08e7, 0x08f9, 0x090b, 0x0919, 0x092b, // Entry 80 - BF - 0x0951, 0x0965, 0x0977, 0x098b, 0x0997, 0x09a9, 0x09b7, 0x09d1, - 0x09e7, 0x09f9, 0x0a07, 0x0a24, 0x0a32, 0x0a44, 0x0a58, 0x0a6c, - 0x0a80, 0x0a8c, 0x0a9e, 0x0ab0, 0x0abe, 0x0acc, 0x0ae9, 0x0afd, - 0x0b0d, 0x0b1f, 0x0b31, 0x0b41, 0x0b53, 0x0b69, 0x0b7b, 0x0b8f, - 0x0ba1, 0x0bb1, 0x0bbf, 0x0bcd, 0x0bdb, 0x0bed, 0x0c01, 0x0c15, - 0x0c25, 0x0c37, 0x0c45, 0x0c59, 0x0c72, 0x0c82, 0x0c92, 0x0c9e, - 0x0cae, 0x0cc0, 0x0cd0, 0x0cde, 0x0cea, 0x0d00, 0x0d10, 0x0d24, - 0x0d32, 0x0d32, 0x0d48, 0x0d52, 0x0d62, 0x0d72, 0x0d72, 0x0d84, + 0x0937, 0x094b, 0x095d, 0x0971, 0x097d, 0x098f, 0x099d, 0x09b7, + 0x09cd, 0x09df, 0x09ed, 0x0a06, 0x0a14, 0x0a26, 0x0a3a, 0x0a4e, + 0x0a62, 0x0a6e, 0x0a80, 0x0a92, 0x0aa0, 0x0aae, 0x0acb, 0x0adf, + 0x0aef, 0x0b01, 0x0b13, 0x0b27, 0x0b39, 0x0b4f, 0x0b61, 0x0b75, + 0x0b87, 0x0b97, 0x0ba5, 0x0bb3, 0x0bc1, 0x0bd3, 0x0be7, 0x0bfb, + 0x0c0b, 0x0c1d, 0x0c2b, 0x0c3f, 0x0c58, 0x0c68, 0x0c78, 0x0c84, + 0x0c94, 0x0ca4, 0x0cb4, 0x0cc2, 0x0cce, 0x0ce4, 0x0cf4, 0x0d08, + 0x0d16, 0x0d16, 0x0d2c, 0x0d36, 0x0d46, 0x0d56, 0x0d56, 0x0d68, // Entry C0 - FF - 0x0d84, 0x0da7, 0x0dca, 0x0dda, 0x0dea, 0x0e06, 0x0e06, 0x0e18, - 0x0e18, 0x0e33, 0x0e47, 0x0e47, 0x0e47, 0x0e51, 0x0e51, 0x0e61, - 0x0e61, 0x0e71, 0x0e81, 0x0e9a, 0x0e9a, 0x0ea6, 0x0eae, 0x0eae, - 0x0ec5, 0x0ed1, 0x0edf, 0x0edf, 0x0ee7, 0x0efc, 0x0efc, 0x0f1b, - 0x0f31, 0x0f43, 0x0f51, 0x0f51, 0x0f62, 0x0f76, 0x0f76, 0x0f76, - 0x0f86, 0x0f86, 0x0f92, 0x0f9a, 0x0fac, 0x0fc0, 0x0fd3, 0x0fe3, - 0x0ffc, 0x1008, 0x101a, 0x102c, 0x103a, 0x104c, 0x1056, 0x1066, - 0x107a, 0x108c, 0x1098, 0x10b3, 0x10c1, 0x10d7, 0x10e7, 0x10f5, + 0x0d68, 0x0d8b, 0x0dae, 0x0dbe, 0x0dce, 0x0dea, 0x0dea, 0x0dfc, + 0x0dfc, 0x0e17, 0x0e2b, 0x0e2b, 0x0e2b, 0x0e35, 0x0e35, 0x0e45, + 0x0e45, 0x0e55, 0x0e65, 0x0e77, 0x0e77, 0x0e83, 0x0e8b, 0x0e8b, + 0x0ea2, 0x0eae, 0x0ebc, 0x0ebc, 0x0ec4, 0x0ed9, 0x0ed9, 0x0ef8, + 0x0f0e, 0x0f20, 0x0f2e, 0x0f2e, 0x0f3f, 0x0f53, 0x0f53, 0x0f53, + 0x0f63, 0x0f63, 0x0f6f, 0x0f77, 0x0f89, 0x0f9d, 0x0fb0, 0x0fc0, + 0x0fd9, 0x0fe5, 0x0ff7, 0x1009, 0x1017, 0x1017, 0x1029, 0x1033, + 0x1043, 0x1057, 0x1069, 0x1075, 0x1090, 0x109e, 0x10b4, 0x10c4, // Entry 100 - 13F - 0x1116, 0x1124, 0x1124, 0x113e, 0x1174, 0x1188, 0x1198, 0x11a8, - 0x11b0, 0x11c0, 0x11d0, 0x11e0, 0x11ec, 0x11fc, 0x120c, 0x1225, - 0x1225, 0x1233, 0x1252, 0x1265, 0x1273, 0x1285, 0x128d, 0x1299, - 0x1299, 0x12b6, 0x12c4, 0x12d2, 0x12f3, 0x12f3, 0x1303, 0x1303, - 0x130f, 0x1321, 0x1321, 0x132b, 0x132b, 0x1348, 0x1367, 0x1367, - 0x138c, 0x13af, 0x13c3, 0x13cb, 0x13d9, 0x13f2, 0x13fe, 0x140a, - 0x140a, 0x1418, 0x1435, 0x1435, 0x1461, 0x148f, 0x148f, 0x149b, - 0x14b1, 0x14bf, 0x14cd, 0x14ee, 0x1513, 0x1513, 0x1513, 0x1521, + 0x10d2, 0x10f3, 0x1101, 0x1101, 0x111b, 0x1151, 0x1165, 0x1175, + 0x1185, 0x118d, 0x119d, 0x11ad, 0x11bd, 0x11c9, 0x11d9, 0x11e9, + 0x1202, 0x1202, 0x1210, 0x122f, 0x1242, 0x1250, 0x1262, 0x126a, + 0x1276, 0x1276, 0x1293, 0x12a1, 0x12af, 0x12d0, 0x12d0, 0x12e0, + 0x12e0, 0x12ec, 0x12fe, 0x12fe, 0x1308, 0x132b, 0x1348, 0x1367, + 0x1367, 0x138c, 0x13af, 0x13c3, 0x13cb, 0x13d9, 0x13f2, 0x13fe, + 0x140a, 0x140a, 0x1418, 0x1435, 0x1435, 0x1461, 0x148f, 0x148f, + 0x149b, 0x14b1, 0x14bf, 0x14cd, 0x14ee, 0x1513, 0x1513, 0x1513, // Entry 140 - 17F - 0x152b, 0x1537, 0x1552, 0x156e, 0x156e, 0x1584, 0x1590, 0x15a2, - 0x15bf, 0x15d8, 0x15e2, 0x15f0, 0x1606, 0x1616, 0x1628, 0x1628, - 0x1628, 0x1638, 0x1644, 0x1658, 0x1679, 0x1698, 0x1698, 0x16b1, - 0x16c1, 0x16d1, 0x16d9, 0x16e7, 0x16f1, 0x1709, 0x1715, 0x1727, - 0x1735, 0x174d, 0x174d, 0x1759, 0x1759, 0x1767, 0x1779, 0x178e, - 0x178e, 0x178e, 0x17a1, 0x17b1, 0x17c3, 0x17dc, 0x17f0, 0x1802, - 0x180e, 0x182f, 0x182f, 0x182f, 0x1841, 0x184f, 0x185d, 0x1872, - 0x188d, 0x189d, 0x18ad, 0x18bd, 0x18c7, 0x18d7, 0x18e5, 0x18f5, + 0x1521, 0x152b, 0x1537, 0x1552, 0x156e, 0x156e, 0x1584, 0x1590, + 0x15a2, 0x15bf, 0x15d8, 0x15e2, 0x15f0, 0x1602, 0x1612, 0x1624, + 0x1624, 0x1624, 0x1634, 0x1640, 0x1654, 0x1675, 0x1694, 0x1694, + 0x16ad, 0x16bd, 0x16cd, 0x16d5, 0x16e3, 0x16ed, 0x1705, 0x1711, + 0x1723, 0x1731, 0x1749, 0x1749, 0x1755, 0x1755, 0x1763, 0x1775, + 0x178a, 0x178a, 0x178a, 0x179d, 0x17ad, 0x17bf, 0x17d8, 0x17ec, + 0x17fe, 0x180a, 0x182b, 0x182b, 0x182b, 0x183d, 0x184b, 0x1859, + 0x186e, 0x1889, 0x1899, 0x18a9, 0x18b9, 0x18c3, 0x18d3, 0x18e1, // Entry 180 - 1BF - 0x18f5, 0x18f5, 0x18f5, 0x1901, 0x1901, 0x190d, 0x1919, 0x1936, - 0x1936, 0x1949, 0x1959, 0x1967, 0x196f, 0x197b, 0x198e, 0x198e, - 0x198e, 0x199e, 0x199e, 0x19aa, 0x19bc, 0x19ce, 0x19e0, 0x19ee, - 0x19f6, 0x1a04, 0x1a14, 0x1a20, 0x1a2c, 0x1a42, 0x1a63, 0x1a78, - 0x1a80, 0x1a9a, 0x1ab4, 0x1ac2, 0x1ad8, 0x1ae6, 0x1af2, 0x1af2, - 0x1afc, 0x1b11, 0x1b1d, 0x1b31, 0x1b45, 0x1b45, 0x1b45, 0x1b53, - 0x1b6b, 0x1b87, 0x1b99, 0x1bac, 0x1bcb, 0x1bdb, 0x1be7, 0x1bf3, - 0x1bf3, 0x1bff, 0x1c18, 0x1c26, 0x1c3f, 0x1c3f, 0x1c47, 0x1c64, + 0x18f1, 0x18f1, 0x18f1, 0x18f1, 0x18fd, 0x18fd, 0x1909, 0x1932, + 0x193e, 0x195b, 0x195b, 0x196e, 0x197e, 0x198c, 0x1994, 0x19a0, + 0x19b3, 0x19b3, 0x19b3, 0x19c3, 0x19c3, 0x19cf, 0x19e1, 0x19f3, + 0x1a05, 0x1a13, 0x1a1b, 0x1a29, 0x1a39, 0x1a45, 0x1a51, 0x1a67, + 0x1a88, 0x1a9d, 0x1aa5, 0x1abf, 0x1ad9, 0x1ae7, 0x1afd, 0x1b0b, + 0x1b17, 0x1b17, 0x1b21, 0x1b36, 0x1b42, 0x1b56, 0x1b6a, 0x1b6a, + 0x1b6a, 0x1b78, 0x1b90, 0x1bac, 0x1bbe, 0x1bd1, 0x1bf0, 0x1c00, + 0x1c0c, 0x1c18, 0x1c18, 0x1c24, 0x1c3d, 0x1c4b, 0x1c64, 0x1c64, // Entry 1C0 - 1FF - 0x1c70, 0x1c93, 0x1ca7, 0x1cb9, 0x1cc7, 0x1cd5, 0x1ce3, 0x1d04, - 0x1d1c, 0x1d2c, 0x1d40, 0x1d58, 0x1d68, 0x1d68, 0x1d8b, 0x1d8b, - 0x1d8b, 0x1daa, 0x1daa, 0x1dbc, 0x1dbc, 0x1dbc, 0x1dd4, 0x1dea, - 0x1e0f, 0x1e17, 0x1e17, 0x1e2f, 0x1e3f, 0x1e59, 0x1e59, 0x1e59, - 0x1e67, 0x1e75, 0x1e75, 0x1e75, 0x1e75, 0x1e8b, 0x1e95, 0x1ea7, - 0x1eb5, 0x1ed6, 0x1ee4, 0x1ef2, 0x1f04, 0x1f04, 0x1f0e, 0x1f18, - 0x1f26, 0x1f3c, 0x1f3c, 0x1f5b, 0x1f69, 0x1f71, 0x1f71, 0x1f7f, - 0x1f9a, 0x1fbd, 0x1fbd, 0x1fc9, 0x1fd3, 0x1ff2, 0x2002, 0x2002, + 0x1c6c, 0x1c89, 0x1c95, 0x1cb8, 0x1ccc, 0x1cde, 0x1cec, 0x1cfa, + 0x1d08, 0x1d29, 0x1d41, 0x1d51, 0x1d65, 0x1d7d, 0x1d8d, 0x1d8d, + 0x1db0, 0x1db0, 0x1db0, 0x1dcf, 0x1dcf, 0x1de1, 0x1de1, 0x1de1, + 0x1df9, 0x1e0f, 0x1e34, 0x1e3c, 0x1e3c, 0x1e54, 0x1e64, 0x1e7e, + 0x1e7e, 0x1e7e, 0x1e8c, 0x1e9a, 0x1e9a, 0x1e9a, 0x1e9a, 0x1eb0, + 0x1eba, 0x1ecc, 0x1eda, 0x1efb, 0x1f09, 0x1f17, 0x1f29, 0x1f29, + 0x1f33, 0x1f3d, 0x1f4b, 0x1f61, 0x1f61, 0x1f80, 0x1f8e, 0x1f96, + 0x1f96, 0x1fa4, 0x1fbf, 0x1fe2, 0x1fe2, 0x1fee, 0x1ff8, 0x2017, // Entry 200 - 23F - 0x2002, 0x201d, 0x2030, 0x2049, 0x2060, 0x2070, 0x2080, 0x209b, - 0x20a5, 0x20b8, 0x20b8, 0x20c8, 0x20d4, 0x20e6, 0x20f4, 0x2111, - 0x2123, 0x2123, 0x2123, 0x212f, 0x2137, 0x2147, 0x2153, 0x2163, - 0x216d, 0x217f, 0x217f, 0x2191, 0x21a7, 0x21a7, 0x21b9, 0x21d0, - 0x21e5, 0x21e5, 0x21fc, 0x21fc, 0x2210, 0x2210, 0x2222, 0x2232, - 0x2240, 0x224e, 0x2276, 0x2284, 0x2298, 0x22a8, 0x22b2, 0x22bc, - 0x22bc, 0x22bc, 0x22bc, 0x22bc, 0x22ca, 0x22ca, 0x22d8, 0x22e6, - 0x22f8, 0x2306, 0x2312, 0x2322, 0x2339, 0x2349, 0x2349, 0x2355, + 0x2027, 0x2027, 0x2027, 0x2042, 0x2055, 0x206e, 0x2085, 0x2095, + 0x20a5, 0x20c0, 0x20ca, 0x20dd, 0x20dd, 0x20ed, 0x20f9, 0x210b, + 0x2119, 0x2136, 0x2148, 0x2148, 0x2148, 0x2154, 0x215c, 0x216c, + 0x2178, 0x2188, 0x2192, 0x21a4, 0x21a4, 0x21b6, 0x21cc, 0x21cc, + 0x21de, 0x21f5, 0x220a, 0x220a, 0x2221, 0x2221, 0x2235, 0x2235, + 0x2247, 0x2257, 0x2265, 0x2273, 0x229b, 0x22a9, 0x22bd, 0x22cd, + 0x22e7, 0x22f1, 0x22f1, 0x22f1, 0x22f1, 0x22f1, 0x22ff, 0x22ff, + 0x230d, 0x231b, 0x232d, 0x233b, 0x2347, 0x2357, 0x236e, 0x237e, // Entry 240 - 27F - 0x235f, 0x236d, 0x2379, 0x2381, 0x2381, 0x2399, 0x23ab, 0x23d5, - 0x23d5, 0x23e5, 0x241b, 0x2429, 0x2445, 0x244d, 0x2479, 0x2479, - 0x249e, 0x24d0, 0x24f9, 0x251c, 0x2545, 0x256c, 0x259e, 0x25c3, - 0x25e8, 0x25e8, 0x2607, 0x262a, 0x2649, 0x265b, 0x2684, 0x26ab, - 0x26bf, 0x26d8, 0x26f9, 0x2716, 0x2737, -} // Size: 1250 bytes - -const azLangStr string = "" + // Size: 3713 bytes + 0x237e, 0x238a, 0x2394, 0x23a2, 0x23ae, 0x23b6, 0x23b6, 0x23ce, + 0x23e0, 0x240a, 0x240a, 0x241a, 0x2450, 0x245e, 0x247a, 0x2482, + 0x24ae, 0x24ae, 0x24d3, 0x2505, 0x252e, 0x2551, 0x257a, 0x25a1, + 0x25d3, 0x25f8, 0x261d, 0x261d, 0x263c, 0x265f, 0x267e, 0x2690, + 0x26b9, 0x26e0, 0x26f4, 0x270d, 0x272e, 0x274b, 0x276c, +} // Size: 1254 bytes + +const azLangStr string = "" + // Size: 3754 bytes "afarabxazavestanafrikaansakanamhararaqonərəbassamavaraymaraazərbaycanbaş" + - "qırdbelarusbolqarbislamabambarabenqaltibetbretonbosniakkatalançeçençamor" + - "okorsikakriçexslavyançuvaşuelsdanimarkaalmanmaldivdzonqaeveyunaningilise" + - "sperantoispanestonbaskfarsfulafinficifarerfransızqərbi frizirlandŞotland" + - "iya keltcəsiqalisiyaquaraniqucaratmankshausaivrithindhiri motuxorvathait" + - "i kreolmacarermənihererointerlinquaindoneziyainterlinqveiqbosiçuan yiinu" + - "piaqidoislanditalyaninuktitutyaponyavagürcükonqokikuyukuanyamaqazaxkalaa" + - "llisutkxmerkannadakoreyakanurikəşmirkürdkomikornqırğızlatınlüksemburqqan" + - "dalimburqlinqalalaoslitvaluba-katanqalatışmalaqasmarşalmaorimakedonmalay" + - "alammonqolmarathimalaymaltabirmannauruşimali ndebelenepalndonqahollandnü" + - "norsk norveçbokmal norveçcənubi ndebelenavayonyancaoksitanocibvaoromoodi" + - "yaosetinpəncabpalipolyakpuştuportuqalkeçuaromanşrundirumınruskinyarvanda" + - "sanskritsardinsindhişimali samisanqosinhalaslovakslovensamoaşonasomalial" + - "banserbsvatisesotosundanisveçsuahilitamilteluqutaciktaytiqrintürkmənsvan" + - "atonqatürksonqatatartaxitiuyğurukraynaurduözbəkvendavyetnamvolapükvalunv" + - "olofxosaidişyorubaçjuançinzuluakinakoliadanqmeadugeafrihiliaqhemaynuakka" + - "daleutcənubi altayqədim ingilisangikaaramikmapuçearapahoaravakasuasturiy" + - "aavadhibalucballibasabejabembabenaqərbi bəlucbxoçpuribikolbinisiksikəbra" + - "jbodoburyatbuginblinkeddokaribatsamsebuançiqaçibçaçağatayçukizmariçinuk " + - "ləhçəsiçoktauçipevyançerokiçeyensorankoptkrım türkcəsikaşubyandakotadarq" + - "vataitadelaverslaveydoqribdinkazarmadoqriaşağı sorbdualaorta hollanddiol" + - "adyuladazaqaembuefikqədim misirekacukelamitorta ingilisevondofangfilippi" + - "nfonorta fransızqədim fransızşimali frisfriulqaqaqauzqanqayoqabayaqezqil" + - "bertorta yüksək almanqədim almanqondiqorontalogotçaqreboqədim yunanİsveç" + - "rə almancasıqusiqviçinhaydahakkahavayhiliqaynonhittitmonqyuxarı sorbsyan" + - "hupaibanibibioilokoinquşloğbannqombamaçamivrit-farsivrit-ərəbqaraqalpaqk" + - "abilekaçinjukambakavikabarda-çərkəztiyapmakondkabuverdiankoroxazixotanko" + - "yra çiinikakokalencinkimbundukomi-permyakkonkanikosreyankpelleqaraçay-ba" + - "lkarkarelkuruxşambalabafiakölnkumıkkutenaysefardlangiqərbi pəncablambalə" + - "zgilakotamonqolozişimali luriluba-lulualuysenolundaluomizoluyiamadurizma" + - "qahimaitilimakasarməndinqomasaymokşamandarmendemerumorisienorta irlandma" + - "xuva-meettometa’mikmakminanqkabanmançumanipürimohavkmosimundanqçoxsaylı " + - "dillərkrikmirandmaruarierzyamazandaranMin Nanneapolitannamaaşağı almanne" + - "variniasniyuankvasiongiemboonnoqayqədim norsnqoşimal sotonuernyamvezinya" + - "nkolnyoronzimaosageosmanpanqasinanpəhləvipampanqapapyamentopalayanniger " + - "kreolqədim farsfoyenikponpeyqədim provansalkiçeracastanirapanuirarotonqa" + - "nromboromanaromanruasandavesaxasamaritansamburusasaksantalnqambaysanqusi" + - "ciliyaskotscənubi kürdsenaselkupkoyraboro senniqədim irlandtaçelitşansid" + - "amocənubi samilule samiinari samiskolt samisoninkesoqdiyensranan tonqose" + - "rersahosukumasususumeryankomorsuriyatimnetesoterenotetumtiqretivtokelayk" + - "linqontlinqittamaşeknyasa tonqatok pisintarokosimşyantumbukatuvalutasava" + - "qtuvinyanMərkəzi Atlas tamazicəsiudmurtuqaritumbundurutvaivotikvunyovall" + - "esvalamovarayvaşovalpirivukalmıksoqayaoyapizyanqbenyembakantonzapotekbli" + - "simbolszenaqatamazizunidil məzmunu yoxdurzazamüasir standart ərəbcənubi " + - "azərbaycanAvstriya almancasıİsveçrə yüksək almancasıAvstraliya ingiliscə" + - "siKanada ingiliscəsiBritaniya ingiliscəsiAmerika ingiliscəsiLatın Amerik" + - "ası ispancasıKastiliya ispancasıMeksika ispancasıKanada fransızcasıİsveç" + - "rə fransızcasıaşağı saksonflamandBraziliya portuqalcasıPortuqaliya portu" + - "qalcasımoldavserb-xorvatKonqo suahilicəsisadələşmiş çinənənəvi çin" - -var azLangIdx = []uint16{ // 613 elements + "qırdbelarusbolqarbislamabambarabenqaltibetbretonbosniyakatalançeçençamor" + + "okorsikakriçexslavyançuvaşuelsdanimarkaalmanmaldivdzonqxaeveyunaningilis" + + "esperantoispanestonbaskfarsfulafinficifarerfransızqərbi frizirlandŞotlan" + + "diya keltcəsiqalisiyaquaraniqucaratmankshausaivrithindhiri motuxorvathai" + + "ti kreolmacarermənihererointerlinquaindoneziyainterlinqveiqbosiçuan yiin" + + "upiaqidoislanditalyaninuktitutyaponyavagürcükonqokikuyukuanyamaqazaxkala" + + "allisutkxmerkannadakoreyakanurikəşmirkürdkomikornqırğızlatınlüksemburqqa" + + "ndalimburqlinqalalaoslitvaluba-katanqalatışmalaqasmarşalmaorimakedonmala" + + "yalammonqolmarathimalaymaltabirmannauruşimali ndebelenepalndonqahollandn" + + "ünorsk norveçbokmal norveçcənubi ndebelenavayonyancaoksitanocibvaoromoo" + + "diyaosetinpəncabpalipolyakpuştuportuqalkeçuaromanşrundirumınruskinyarvan" + + "dasanskritsardinsindhişimali samisanqosinhalaslovakslovensamoaşonasomali" + + "albanserbsvatisesotosundanisveçsuahilitamilteluqutaciktaytiqrintürkmənsv" + + "anatonqatürksonqatatartaxitiuyğurukraynaurduözbəkvendavyetnamvolapükvalu" + + "nvolofxosaidişyorubaçjuançinzuluakinakoliadanqmeadugeafrihiliaqhemaynuak" + + "kadaleutcənubi altayqədim ingilisangikaaramikmapuçearapahoaravakasuastur" + + "iyaavadhibalucbalibasabejabembabenaqərbi bəlucbxoçpuribikolbinisiksikəbr" + + "ajbodoburyatbuginblinkeddokaribatsamsebuançiqaçibçaçağatayçukizmariçinuk" + + " ləhçəsiçoktauçipevyançerokiçeyensorankoptkrım türkcəsiSeyşel kreol fran" + + "sızcasıkaşubyandakotadarqvataitadelaverslaveydoqribdinkazarmadoqriaşağı " + + "sorbdualaorta hollanddioladyuladazaqaembuefikqədim misirekacukelamitorta" + + " ingilisevondofangfilippinfonorta fransızqədim fransızşimali frisfriulqa" + + "qaqauzqanqayoqabayaqezqilbertorta yüksək almanqədim almanqondiqorontaloq" + + "otikaqreboqədim yunanİsveçrə almancasıqusiqviçinhaydahakkahavayhiliqayno" + + "nhittitmonqyuxarı sorbsyanhupaibanibibioilokoinquşloğbannqombamaçamivrit" + + "-farsivrit-ərəbqaraqalpaqkabilekaçinjukambakavikabarda-çərkəztiyapmakond" + + "kabuverdiankoroxazixotankoyra çiinikakokalencinkimbundukomi-permyakkonka" + + "nikosreyankpelleqaraçay-balkarkarelkuruxşambalabafiakölnkumıkkutenaysefa" + + "rdlangiqərbi pəncablambaləzgilakotamonqolozişimali luriluba-lulualuyseno" + + "lundaluomizoluyiamadurizmaqahimaitilimakasarməndinqomasaymokşamandarmend" + + "emerumorisienorta irlandmaxuva-meettometa’mikmakminanqkabanmançumanipüri" + + "mohavkmosimundanqçoxsaylı dillərkrikmirandmaruarierzyamazandaranMin Nann" + + "eapolitannamaaşağı almannevariniasniyuankvasiongiemboonnoqayqədim norsnq" + + "oşimal sotonuernyamvezinyankolnyoronzimaosageosmanpanqasinanpəhləvipampa" + + "nqapapyamentopalayanniger kreolqədim farsfoyenikponpeyprussqədim provans" + + "alkiçeracastanirapanuirarotonqanromboromanaromanruasandavesaxasamaritans" + + "amburusasaksantalnqambaysanqusiciliyaskotscənubi kürdsenaselkupkoyraboro" + + " senniqədim irlandtaçelitşansidamocənubi samilule samiinari samiskolt sa" + + "misoninkesoqdiyensranan tonqoserersahosukumasususumeryankomorsuriyatimne" + + "tesoterenotetumtiqretivtokelayklinqontlinqittamaşeknyasa tonqatok pisint" + + "arokosimşyantumbukatuvalutasavaqtuvinyanMərkəzi Atlas tamazicəsiudmurtuq" + + "aritumbundunaməlum dilvaivotikvunyovallesvalamovarayvaşovalpirivukalmıks" + + "oqayaoyapizyanqbenyembakantonzapotekblisimbolszenaqatamazizunidil məzmun" + + "u yoxdurzazamüasir standart ərəbcənubi azərbaycanAvstriya almancasıİsveç" + + "rə yüksək almancasıAvstraliya ingiliscəsiKanada ingiliscəsiBritaniya ing" + + "iliscəsiAmerika ingiliscəsiLatın Amerikası ispancasıKastiliya ispancasıM" + + "eksika ispancasıKanada fransızcasıİsveçrə fransızcasıaşağı saksonflamand" + + "Braziliya portuqalcasıPortuqaliya portuqalcasımoldavserb-xorvatKonqo sua" + + "hilicəsisadələşmiş çinənənəvi çin" + +var azLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0004, 0x0009, 0x0010, 0x0019, 0x001d, 0x0022, 0x0028, 0x002e, 0x0033, 0x0037, 0x003d, 0x0048, 0x0051, 0x0058, 0x005e, 0x0065, 0x006c, 0x0072, 0x0077, 0x007d, 0x0084, 0x008b, 0x0092, 0x0099, 0x00a0, 0x00a3, 0x00a7, 0x00ae, 0x00b5, 0x00b9, 0x00c2, - 0x00c7, 0x00cd, 0x00d3, 0x00d6, 0x00db, 0x00e2, 0x00eb, 0x00f0, - 0x00f5, 0x00f9, 0x00fd, 0x0101, 0x0104, 0x0108, 0x010d, 0x0115, - 0x0120, 0x0126, 0x013b, 0x0143, 0x014a, 0x0151, 0x0156, 0x015b, - 0x0160, 0x0164, 0x016d, 0x0173, 0x017e, 0x0183, 0x018a, 0x0190, + 0x00c7, 0x00cd, 0x00d4, 0x00d7, 0x00dc, 0x00e3, 0x00ec, 0x00f1, + 0x00f6, 0x00fa, 0x00fe, 0x0102, 0x0105, 0x0109, 0x010e, 0x0116, + 0x0121, 0x0127, 0x013c, 0x0144, 0x014b, 0x0152, 0x0157, 0x015c, + 0x0161, 0x0165, 0x016e, 0x0174, 0x017f, 0x0184, 0x018b, 0x0191, // Entry 40 - 7F - 0x019b, 0x01a5, 0x01b0, 0x01b4, 0x01be, 0x01c5, 0x01c8, 0x01ce, - 0x01d5, 0x01de, 0x01e3, 0x01e7, 0x01ee, 0x01f3, 0x01f9, 0x0201, - 0x0206, 0x0211, 0x0216, 0x021d, 0x0223, 0x0229, 0x0231, 0x0236, - 0x023a, 0x023e, 0x0247, 0x024d, 0x0258, 0x025d, 0x0264, 0x026b, - 0x026f, 0x0274, 0x0280, 0x0287, 0x028e, 0x0295, 0x029a, 0x02a1, - 0x02aa, 0x02b0, 0x02b7, 0x02bc, 0x02c1, 0x02c7, 0x02cc, 0x02db, - 0x02e0, 0x02e6, 0x02ed, 0x02fd, 0x030b, 0x031a, 0x0320, 0x0326, - 0x032d, 0x0333, 0x0338, 0x033d, 0x0343, 0x034a, 0x034e, 0x0354, + 0x019c, 0x01a6, 0x01b1, 0x01b5, 0x01bf, 0x01c6, 0x01c9, 0x01cf, + 0x01d6, 0x01df, 0x01e4, 0x01e8, 0x01ef, 0x01f4, 0x01fa, 0x0202, + 0x0207, 0x0212, 0x0217, 0x021e, 0x0224, 0x022a, 0x0232, 0x0237, + 0x023b, 0x023f, 0x0248, 0x024e, 0x0259, 0x025e, 0x0265, 0x026c, + 0x0270, 0x0275, 0x0281, 0x0288, 0x028f, 0x0296, 0x029b, 0x02a2, + 0x02ab, 0x02b1, 0x02b8, 0x02bd, 0x02c2, 0x02c8, 0x02cd, 0x02dc, + 0x02e1, 0x02e7, 0x02ee, 0x02fe, 0x030c, 0x031b, 0x0321, 0x0327, + 0x032e, 0x0334, 0x0339, 0x033e, 0x0344, 0x034b, 0x034f, 0x0355, // Entry 80 - BF - 0x035a, 0x0362, 0x0368, 0x036f, 0x0374, 0x037a, 0x037d, 0x0388, - 0x0390, 0x0396, 0x039c, 0x03a8, 0x03ad, 0x03b4, 0x03ba, 0x03c0, - 0x03c5, 0x03ca, 0x03d0, 0x03d5, 0x03d9, 0x03de, 0x03e4, 0x03ea, - 0x03f0, 0x03f7, 0x03fc, 0x0402, 0x0407, 0x040a, 0x0410, 0x0419, - 0x041e, 0x0423, 0x0428, 0x042d, 0x0432, 0x0438, 0x043e, 0x0445, - 0x0449, 0x0450, 0x0455, 0x045c, 0x0464, 0x0469, 0x046e, 0x0472, - 0x0477, 0x047d, 0x0483, 0x0487, 0x048b, 0x048f, 0x0494, 0x049b, - 0x04a0, 0x04a0, 0x04a8, 0x04ad, 0x04b1, 0x04b6, 0x04b6, 0x04bb, + 0x035b, 0x0363, 0x0369, 0x0370, 0x0375, 0x037b, 0x037e, 0x0389, + 0x0391, 0x0397, 0x039d, 0x03a9, 0x03ae, 0x03b5, 0x03bb, 0x03c1, + 0x03c6, 0x03cb, 0x03d1, 0x03d6, 0x03da, 0x03df, 0x03e5, 0x03eb, + 0x03f1, 0x03f8, 0x03fd, 0x0403, 0x0408, 0x040b, 0x0411, 0x041a, + 0x041f, 0x0424, 0x0429, 0x042e, 0x0433, 0x0439, 0x043f, 0x0446, + 0x044a, 0x0451, 0x0456, 0x045d, 0x0465, 0x046a, 0x046f, 0x0473, + 0x0478, 0x047e, 0x0484, 0x0488, 0x048c, 0x0490, 0x0495, 0x049c, + 0x04a1, 0x04a1, 0x04a9, 0x04ae, 0x04b2, 0x04b7, 0x04b7, 0x04bc, // Entry C0 - FF - 0x04bb, 0x04c8, 0x04d6, 0x04dc, 0x04e2, 0x04e9, 0x04e9, 0x04f0, - 0x04f0, 0x04f0, 0x04f6, 0x04f6, 0x04f6, 0x04f9, 0x04f9, 0x0501, - 0x0501, 0x0507, 0x050c, 0x0511, 0x0511, 0x0515, 0x0515, 0x0515, + 0x04bc, 0x04c9, 0x04d7, 0x04dd, 0x04e3, 0x04ea, 0x04ea, 0x04f1, + 0x04f1, 0x04f1, 0x04f7, 0x04f7, 0x04f7, 0x04fa, 0x04fa, 0x0502, + 0x0502, 0x0508, 0x050d, 0x0511, 0x0511, 0x0515, 0x0515, 0x0515, 0x0515, 0x0519, 0x051e, 0x051e, 0x0522, 0x0522, 0x0522, 0x052f, 0x0538, 0x053d, 0x0541, 0x0541, 0x0541, 0x0549, 0x0549, 0x0549, 0x054d, 0x054d, 0x0551, 0x0551, 0x0557, 0x055c, 0x055c, 0x0560, - 0x0560, 0x0565, 0x056a, 0x056a, 0x056f, 0x0575, 0x057a, 0x0581, - 0x058a, 0x0590, 0x0594, 0x05a5, 0x05ac, 0x05b5, 0x05bc, 0x05c2, + 0x0560, 0x0565, 0x056a, 0x056a, 0x056f, 0x056f, 0x0575, 0x057a, + 0x0581, 0x058a, 0x0590, 0x0594, 0x05a5, 0x05ac, 0x05b5, 0x05bc, // Entry 100 - 13F - 0x05c7, 0x05cb, 0x05cb, 0x05db, 0x05db, 0x05e4, 0x05ea, 0x05f0, - 0x05f5, 0x05fc, 0x0602, 0x0608, 0x060d, 0x0612, 0x0617, 0x0624, - 0x0624, 0x0629, 0x0635, 0x063a, 0x063f, 0x0645, 0x0649, 0x064d, - 0x064d, 0x0659, 0x065f, 0x0665, 0x0671, 0x0671, 0x0677, 0x0677, - 0x067b, 0x0683, 0x0683, 0x0686, 0x0686, 0x0693, 0x06a2, 0x06a2, - 0x06ae, 0x06ae, 0x06b3, 0x06b5, 0x06bb, 0x06be, 0x06c2, 0x06c8, - 0x06c8, 0x06cb, 0x06d2, 0x06d2, 0x06e5, 0x06f1, 0x06f1, 0x06f6, - 0x06ff, 0x0705, 0x070a, 0x0716, 0x072b, 0x072b, 0x072b, 0x072f, + 0x05c2, 0x05c7, 0x05cb, 0x05cb, 0x05db, 0x05f6, 0x05ff, 0x0605, + 0x060b, 0x0610, 0x0617, 0x061d, 0x0623, 0x0628, 0x062d, 0x0632, + 0x063f, 0x063f, 0x0644, 0x0650, 0x0655, 0x065a, 0x0660, 0x0664, + 0x0668, 0x0668, 0x0674, 0x067a, 0x0680, 0x068c, 0x068c, 0x0692, + 0x0692, 0x0696, 0x069e, 0x069e, 0x06a1, 0x06a1, 0x06ae, 0x06bd, + 0x06bd, 0x06c9, 0x06c9, 0x06ce, 0x06d0, 0x06d6, 0x06d9, 0x06dd, + 0x06e3, 0x06e3, 0x06e6, 0x06ed, 0x06ed, 0x0700, 0x070c, 0x070c, + 0x0711, 0x071a, 0x0720, 0x0725, 0x0731, 0x0746, 0x0746, 0x0746, // Entry 140 - 17F - 0x0736, 0x073b, 0x0740, 0x0745, 0x0745, 0x074f, 0x0755, 0x0759, - 0x0765, 0x0769, 0x076d, 0x0771, 0x0777, 0x077c, 0x0782, 0x0782, - 0x0782, 0x0789, 0x078f, 0x0795, 0x079f, 0x07ab, 0x07ab, 0x07b5, - 0x07bb, 0x07c1, 0x07c3, 0x07c8, 0x07cc, 0x07dd, 0x07dd, 0x07e2, - 0x07e8, 0x07f3, 0x07f3, 0x07f7, 0x07f7, 0x07fb, 0x0800, 0x080c, - 0x080c, 0x080c, 0x0810, 0x0818, 0x0820, 0x082c, 0x0833, 0x083b, - 0x0841, 0x0850, 0x0850, 0x0850, 0x0855, 0x085a, 0x0862, 0x0867, - 0x086c, 0x0872, 0x0879, 0x087f, 0x0884, 0x0892, 0x0897, 0x089d, + 0x074a, 0x0751, 0x0756, 0x075b, 0x0760, 0x0760, 0x076a, 0x0770, + 0x0774, 0x0780, 0x0784, 0x0788, 0x078c, 0x0792, 0x0797, 0x079d, + 0x079d, 0x079d, 0x07a4, 0x07aa, 0x07b0, 0x07ba, 0x07c6, 0x07c6, + 0x07d0, 0x07d6, 0x07dc, 0x07de, 0x07e3, 0x07e7, 0x07f8, 0x07f8, + 0x07fd, 0x0803, 0x080e, 0x080e, 0x0812, 0x0812, 0x0816, 0x081b, + 0x0827, 0x0827, 0x0827, 0x082b, 0x0833, 0x083b, 0x0847, 0x084e, + 0x0856, 0x085c, 0x086b, 0x086b, 0x086b, 0x0870, 0x0875, 0x087d, + 0x0882, 0x0887, 0x088d, 0x0894, 0x089a, 0x089f, 0x08ad, 0x08b2, // Entry 180 - 1BF - 0x089d, 0x089d, 0x089d, 0x08a3, 0x08a3, 0x08a8, 0x08ac, 0x08b8, - 0x08b8, 0x08c2, 0x08c9, 0x08ce, 0x08d1, 0x08d5, 0x08da, 0x08da, - 0x08da, 0x08e1, 0x08e1, 0x08e7, 0x08ee, 0x08f5, 0x08fe, 0x0903, - 0x0903, 0x0909, 0x090f, 0x0914, 0x0918, 0x0920, 0x092b, 0x0938, - 0x093f, 0x0945, 0x0950, 0x0956, 0x095f, 0x0965, 0x0969, 0x0969, - 0x0970, 0x0982, 0x0986, 0x098c, 0x0993, 0x0993, 0x0993, 0x0998, - 0x09a2, 0x09a9, 0x09b3, 0x09b7, 0x09c5, 0x09cb, 0x09cf, 0x09d5, - 0x09d5, 0x09db, 0x09e4, 0x09e9, 0x09f4, 0x09f4, 0x09f7, 0x0a02, + 0x08b8, 0x08b8, 0x08b8, 0x08b8, 0x08be, 0x08be, 0x08c3, 0x08c3, + 0x08c7, 0x08d3, 0x08d3, 0x08dd, 0x08e4, 0x08e9, 0x08ec, 0x08f0, + 0x08f5, 0x08f5, 0x08f5, 0x08fc, 0x08fc, 0x0902, 0x0909, 0x0910, + 0x0919, 0x091e, 0x091e, 0x0924, 0x092a, 0x092f, 0x0933, 0x093b, + 0x0946, 0x0953, 0x095a, 0x0960, 0x096b, 0x0971, 0x097a, 0x0980, + 0x0984, 0x0984, 0x098b, 0x099d, 0x09a1, 0x09a7, 0x09ae, 0x09ae, + 0x09ae, 0x09b3, 0x09bd, 0x09c4, 0x09ce, 0x09d2, 0x09e0, 0x09e6, + 0x09ea, 0x09f0, 0x09f0, 0x09f6, 0x09ff, 0x0a04, 0x0a0f, 0x0a0f, // Entry 1C0 - 1FF - 0x0a06, 0x0a06, 0x0a0e, 0x0a15, 0x0a1a, 0x0a1f, 0x0a24, 0x0a29, - 0x0a33, 0x0a3c, 0x0a44, 0x0a4e, 0x0a55, 0x0a55, 0x0a60, 0x0a60, - 0x0a60, 0x0a6b, 0x0a6b, 0x0a72, 0x0a72, 0x0a72, 0x0a78, 0x0a78, - 0x0a88, 0x0a8d, 0x0a8d, 0x0a96, 0x0a9d, 0x0aa7, 0x0aa7, 0x0aa7, - 0x0aac, 0x0ab1, 0x0ab1, 0x0ab1, 0x0ab1, 0x0ab7, 0x0aba, 0x0ac1, - 0x0ac5, 0x0ace, 0x0ad5, 0x0ada, 0x0ae0, 0x0ae0, 0x0ae7, 0x0aec, - 0x0af4, 0x0af9, 0x0af9, 0x0b06, 0x0b06, 0x0b0a, 0x0b0a, 0x0b10, - 0x0b1f, 0x0b2c, 0x0b2c, 0x0b34, 0x0b38, 0x0b38, 0x0b3e, 0x0b3e, + 0x0a12, 0x0a1d, 0x0a21, 0x0a21, 0x0a29, 0x0a30, 0x0a35, 0x0a3a, + 0x0a3f, 0x0a44, 0x0a4e, 0x0a57, 0x0a5f, 0x0a69, 0x0a70, 0x0a70, + 0x0a7b, 0x0a7b, 0x0a7b, 0x0a86, 0x0a86, 0x0a8d, 0x0a8d, 0x0a8d, + 0x0a93, 0x0a98, 0x0aa8, 0x0aad, 0x0aad, 0x0ab6, 0x0abd, 0x0ac7, + 0x0ac7, 0x0ac7, 0x0acc, 0x0ad1, 0x0ad1, 0x0ad1, 0x0ad1, 0x0ad7, + 0x0ada, 0x0ae1, 0x0ae5, 0x0aee, 0x0af5, 0x0afa, 0x0b00, 0x0b00, + 0x0b07, 0x0b0c, 0x0b14, 0x0b19, 0x0b19, 0x0b26, 0x0b26, 0x0b2a, + 0x0b2a, 0x0b30, 0x0b3f, 0x0b4c, 0x0b4c, 0x0b54, 0x0b58, 0x0b58, // Entry 200 - 23F - 0x0b3e, 0x0b4a, 0x0b53, 0x0b5d, 0x0b67, 0x0b6e, 0x0b76, 0x0b82, - 0x0b87, 0x0b8b, 0x0b8b, 0x0b91, 0x0b95, 0x0b9d, 0x0ba2, 0x0ba2, - 0x0ba8, 0x0ba8, 0x0ba8, 0x0bad, 0x0bb1, 0x0bb7, 0x0bbc, 0x0bc1, - 0x0bc4, 0x0bcb, 0x0bcb, 0x0bd2, 0x0bd9, 0x0bd9, 0x0be1, 0x0bec, - 0x0bf5, 0x0bf5, 0x0bfb, 0x0bfb, 0x0c03, 0x0c03, 0x0c0a, 0x0c10, - 0x0c17, 0x0c1f, 0x0c3a, 0x0c40, 0x0c46, 0x0c4d, 0x0c50, 0x0c53, - 0x0c53, 0x0c53, 0x0c53, 0x0c53, 0x0c58, 0x0c58, 0x0c5d, 0x0c63, - 0x0c69, 0x0c6e, 0x0c73, 0x0c7a, 0x0c7c, 0x0c83, 0x0c83, 0x0c87, + 0x0b5e, 0x0b5e, 0x0b5e, 0x0b6a, 0x0b73, 0x0b7d, 0x0b87, 0x0b8e, + 0x0b96, 0x0ba2, 0x0ba7, 0x0bab, 0x0bab, 0x0bb1, 0x0bb5, 0x0bbd, + 0x0bc2, 0x0bc2, 0x0bc8, 0x0bc8, 0x0bc8, 0x0bcd, 0x0bd1, 0x0bd7, + 0x0bdc, 0x0be1, 0x0be4, 0x0beb, 0x0beb, 0x0bf2, 0x0bf9, 0x0bf9, + 0x0c01, 0x0c0c, 0x0c15, 0x0c15, 0x0c1b, 0x0c1b, 0x0c23, 0x0c23, + 0x0c2a, 0x0c30, 0x0c37, 0x0c3f, 0x0c5a, 0x0c60, 0x0c66, 0x0c6d, + 0x0c79, 0x0c7c, 0x0c7c, 0x0c7c, 0x0c7c, 0x0c7c, 0x0c81, 0x0c81, + 0x0c86, 0x0c8c, 0x0c92, 0x0c97, 0x0c9c, 0x0ca3, 0x0ca5, 0x0cac, // Entry 240 - 27F - 0x0c8a, 0x0c8f, 0x0c96, 0x0c9b, 0x0c9b, 0x0ca1, 0x0ca8, 0x0cb2, - 0x0cb2, 0x0cb8, 0x0cbe, 0x0cc2, 0x0cd5, 0x0cd9, 0x0cf0, 0x0d03, - 0x0d16, 0x0d34, 0x0d4b, 0x0d5e, 0x0d74, 0x0d88, 0x0da4, 0x0db8, - 0x0dca, 0x0dca, 0x0dde, 0x0df6, 0x0e05, 0x0e0c, 0x0e23, 0x0e3c, - 0x0e42, 0x0e4d, 0x0e5f, 0x0e72, 0x0e81, -} // Size: 1250 bytes - -const bgLangStr string = "" + // Size: 7891 bytes - "афарабхазкиавестскиафрикаансаканамхарскиарагонскиарабскиасамскиаварскиай" + - "мараазербайджанскибашкирскибеларускибългарскибисламабамбарабенгалскитиб" + - "етскибретонскибосненскикаталонскичеченскичаморокорсиканскикриичешкицърк" + - "овнославянскичувашкиуелскидатскинемскидивехидзонхаевегръцкианглийскиесп" + - "ерантоиспанскиестонскибаскиперсийскифулафинскифиджийскифарьорскифренски" + - "фризийскиирландскишотландски галскигалисийскигуаранигуджаратиманкскихау" + - "заивритхиндихири мотухърватскихаитянски креолскиунгарскиарменскихерерои" + - "нтерлингваиндонезийскиоксиденталигбосъчуански иинупиакидоисландскиитали" + - "анскиинуктитутяпонскияванскигрузинскиконгоанскикикуюкванямаказахскигрен" + - "ландскикхмерскиканнадакорейскиканурикашмирскикюрдскикомикорнуолскикирги" + - "зкилатинскилюксембургскигандалимбургскилингалалаоскилитовскилуба катанг" + - "алатвийскималгашкимаршалеземаорскимакедонскималаяламмонголскимаратимала" + - "йскималтийскибирманскинаурусеверен ндебеленепалскиндонганидерландскинор" + - "вежки (нюношк)норвежки (букмол)южен ндебеленавахонянджаокситанскиоджибв" + - "аоромоорияосетскипенджабскипалиполскипущупортугалскикечуаретороманскиру" + - "ндирумънскирускикиняруандасанскритсардинскисиндхисеверносаамскисангосин" + - "халскисловашкисловенскисамоанскишонасомалийскиалбанскисръбскисватисесот" + - "осунданскишведскисуахилитамилскителугутаджикскитайскитигринятуркменскит" + - "сванатонгатурскицонгататарскитаитянскиуйгурскиукраинскиурдуузбекскивенд" + - "авиетнамскиволапюквалонскиволофксосаидишйорубазуангкитайскизулускиачинс" + - "киаколиадангмеадигеафрихилиагемайнуакадскиалеутскиюжноалтайскистароангл" + - "ийскиангикаарамейскимапучеарапахоаравакасуастурскиавадибалучибалийскиба" + - "сабеябембабеназападен балочибожпурибиколскибинисиксикабраджбодобурятски" + - "бугинскибиленскикаддокарибскиатсамсебуаночигачибчачагатайчуукмарийскижа" + - "ргон чинуукчокточиипувскичерокичейенскикюрдски (централен)коптскикримск" + - "отатарскисеселва, креолски френскикашубскидакотскидаргватаитаделауерсле" + - "йвидогрибдинказармадогридолносръбскидуаласредновековен холандскидиолади" + - "уладазагаембуефикдревноегипетскиекажукеламитскисредновековен английские" + - "вондофангфилипинскифонсредновековен френскистарофренскисеверен фризскии" + - "зточнофризийскифриулианскигагагаузкигайогбаягиизгилбертскисредновисокон" + - "емскистаровисоконемскигондигоронталоготическигребодревногръцкишвейцарск" + - "и немскигусиигвичинхайдахавайскихилигайнонхитскихмонггорнолужишкихупаиб" + - "анибибиоилокоингушетскиложбаннгомбамачамеюдео-персийскиюдео-арабскикара" + - "калпашкикабилскикачинскижжукамбакавикабардиантуапмакондекабовердианскик" + - "орокхасикотскикойра чииникакокаленджинкимбундукоми-пермякскиконканикоср" + - "аенкпелекарачай-балкарскикарелскикурукшамбалабафиякьолнскикумикскикутен" + - "айладинолангилахндаламбалезгинскилакотамонголозисеверен лурилуба-лулуал" + - "уисеньолундалуомизолуямадурскимагахимайтхилимакасармандингомасайскимокш" + - "амандармендемеруморисиенсредновековен ирландскимакуа метометамикмакмина" + - "нгкабауманджурскиманипуримохоукмосимундангмногоезичникрикмирандийскимар" + - "вариерзиамазандаринеаполитанскинамадолнонемскиневарскиниасниуеанквасион" + - "гиембунногаистаронорвежкинкосеверен сотонуеркласически невариниамвезини" + - "анколенуоронзимаосейджиотомански турскипангасинанпахлавипампангапапиаме" + - "нтопалауаннигерийски пиджинстароперсийскифиникийскипонапеанпрускистароп" + - "ровансалскикичераджастанскирапа нуираротонгаромборомскиарумънскирвасанд" + - "авеякутскисамаритански арамейскисамбурусасаксанталингамбайсангусицилиан" + - "скишотландскиюжнокюрдскисенаселкупкойраборо сенистароирландскиташелхитш" + - "ансидамоюжносаамскилуле-саамскиинари-саамскисколт-саамскисонинкесогдийс" + - "кисранан тонгосерерсахосукумасусушумерскикоморскикласически сирийскисир" + - "ийскитемнетесотеренотетумтигретивтокелайскиклингонскитлингиттамашекниан" + - "са тонгаток писинтарокоцимшианскитумбукатувалуанскитасавактувинскицентр" + - "алноатласки тамазигтудмуртскиугаритскиумбундуроотваивотиквунджовалзерск" + - "и немскиваламоварайуашовалпирикалмиксогаяояпезеянгбенйембакантонскизапо" + - "текблис символизенагастандартен марокански тамазигтзунибез лингвистично" + - " съдържаниезазасъвременен стандартен арабскианглийски (САЩ)долносаксонск" + - "ифламандскимолдовскисърбохърватскиконгоански суахиликитайски (опростен)" - -var bgLangIdx = []uint16{ // 612 elements + 0x0cac, 0x0cb0, 0x0cb3, 0x0cb8, 0x0cbf, 0x0cc4, 0x0cc4, 0x0cca, + 0x0cd1, 0x0cdb, 0x0cdb, 0x0ce1, 0x0ce7, 0x0ceb, 0x0cfe, 0x0d02, + 0x0d19, 0x0d2c, 0x0d3f, 0x0d5d, 0x0d74, 0x0d87, 0x0d9d, 0x0db1, + 0x0dcd, 0x0de1, 0x0df3, 0x0df3, 0x0e07, 0x0e1f, 0x0e2e, 0x0e35, + 0x0e4c, 0x0e65, 0x0e6b, 0x0e76, 0x0e88, 0x0e9b, 0x0eaa, +} // Size: 1254 bytes + +const bgLangStr string = "" + // Size: 7962 bytes + "афарскиабхазкиавестскиафрикансаканамхарскиарагонскиарабскиасамскиаварски" + + "аймараазербайджанскибашкирскибеларускибългарскибисламабамбарабенгалскит" + + "ибетскибретонскибосненскикаталонскичеченскичаморокорсиканскикриичешкицъ" + + "рковнославянскичувашкиуелскидатскинемскидивехидзонгкхаевегръцкианглийск" + + "иесперантоиспанскиестонскибаскиперсийскифулафинскифиджийскифарьорскифре" + + "нскизападнофризийскиирландскишотландски галскигалисийскигуаранигуджарат" + + "иманкскихаусаивритхиндихири мотухърватскихаитянски креолскиунгарскиарме" + + "нскихерероинтерлингваиндонезийскиоксиденталигбосъчуански иинупиакидоисл" + + "андскииталианскиинуктитутяпонскияванскигрузинскиконгоанскикикуюкванямак" + + "азахскигренландскикхмерскиканнадакорейскиканурикашмирскикюрдскикомикорн" + + "уолскикиргизкилатинскилюксембургскигандалимбургскилингалалаоскилитовски" + + "луба-катангалатвийскималгашкимаршалеземаорскимакедонскималаяламмонголск" + + "имаратималайскималтийскибирманскинаурусеверен ндебеленепалскиндонганиде" + + "рландскинорвежки (нюношк)норвежки (букмол)южен ндебеленавахонянджаоксит" + + "анскиоджибваоромоорияосетскипенджабскипалиполскипущупортугалскикечуарет" + + "ороманскирундирумънскирускикиняруандасанскритсардинскисиндхисеверносаам" + + "скисангосинхалскисловашкисловенскисамоанскишонасомалийскиалбанскисръбск" + + "исватисесотосунданскишведскисуахилитамилскителугутаджикскитайскитигриня" + + "туркменскитсванатонганскитурскицонгататарскитаитянскиуйгурскиукраинскиу" + + "рдуузбекскивендавиетнамскиволапюквалонскиволофксосаидишйорубазуангкитай" + + "скизулускиачешкиаколиадангмеадигейскиафрихилиагемайнуакадскиалеутскиюжн" + + "оалтайскистароанглийскиангикаарамейскимапучеарапахоаравакасуастурскиава" + + "дибалучибалийскибасабеябембабеназападен балочибожпурибиколскибинисиксик" + + "абраджбодобурятскибугинскибиленскикаддокарибскиатсамсебуанскичигачибчач" + + "агатайчуукмарийскижаргон чинуукчокточиипувскичерокскичейенскикюрдски (ц" + + "ентрален)коптскикримскотатарскисеселва, креолски френскикашубскидакотск" + + "идаргватаитаделауерслейвидогрибдинказармадогридолнолужишкидуаласреднове" + + "ковен холандскидиола-фонидиуладазагаембуефикдревноегипетскиекажукеламит" + + "скисредновековен английскиевондофангфилипинскифонсредновековен френскис" + + "тарофренскисеверен фризскиизточнофризийскифриулианскигагагаузкигайогбая" + + "гиизгилбертскисредновисоконемскистаровисоконемскигондигоронталоготическ" + + "игребодревногръцкишвейцарски немскигусиигвичинхайдахавайскихилигайнонхи" + + "тскихмонггорнолужишкихупаибанибибиоилокоингушетскиложбаннгомбамачамеюде" + + "о-персийскиюдео-арабскикаракалпашкикабилскикачинскижжукамбакавикабардиа" + + "нтуапмакондекабовердианскикорокхасикотскикойра чииникакокаленджинкимбун" + + "дукоми-пермякскиконканикосраенкпелекарачай-балкарскикарелскикурукшамбал" + + "абафиякьолнскикумикскикутенайладинолангилахндаламбалезгинскилакотамонго" + + "лозисеверен лурилуба-лулуалуисеньолундалуомизолухямадурскимагахимайтхил" + + "имакасармандингомасайскимокшамандармендемеруморисиенсредновековен ирлан" + + "дскимакуа метометамикмакминангкабауманджурскиманипурскимохоукмосимундан" + + "гмногоезичникрикмирандийскимарвариерзиамазандаринеаполитанскинамадолнон" + + "емскиневарскиниасниуеанквасионгиембунногаистаронорвежкинкосеверен сотон" + + "уеркласически невариниамвезинянколенуоронзимаосейджиотомански турскипан" + + "гасинанпахлавипампангапапиаментопалауаннигерийски пиджинстароперсийскиф" + + "иникийскипонапеанпрускистаропровансалскикичераджастанскирапа нуираротон" + + "гаромборомскиарумънскирвасандавеякутскисамаритански арамейскисамбурусас" + + "аксанталингамбайсангусицилианскишотландскиюжнокюрдскисенаселкупкойрабор" + + "о сенистароирландскиташелхитшансидамоюжносаамскилуле-саамскиинари-саамс" + + "кисколт-саамскисонинкесогдийскисранан тонгосерерсахосукумасусушумерскик" + + "оморскикласически сирийскисирийскитемнетесотеренотетумтигретивтокелайск" + + "иклингонскитлингиттамашекнианса тонгаток писинтарокоцимшианскитумбукату" + + "валуанскитасавактувинскицентралноатласки тамазигтудмуртскиугаритскиумбу" + + "ндунеопределенваивотиквунджовалзерски немскиваламоварайуашовалпирикалми" + + "ксогаяояпезеянгбенйембакантонскизапотекблис символизенагастандартен мар" + + "окански тамазигтзунибез лингвистично съдържаниезазасъвременен стандарте" + + "н арабскианглийски (САЩ)долносаксонскифламандскимолдовскисърбохърватски" + + "конгоански суахиликитайски (опростен)" + +var bgLangIdx = []uint16{ // 614 elements // Entry 0 - 3F - 0x0000, 0x0008, 0x0016, 0x0026, 0x0038, 0x0040, 0x0050, 0x0062, - 0x0070, 0x007e, 0x008c, 0x0098, 0x00b4, 0x00c6, 0x00d8, 0x00ea, - 0x00f8, 0x0106, 0x0118, 0x0128, 0x013a, 0x014c, 0x0160, 0x0170, - 0x017c, 0x0192, 0x019a, 0x01a4, 0x01c6, 0x01d4, 0x01e0, 0x01ec, - 0x01f8, 0x0204, 0x0210, 0x0216, 0x0222, 0x0234, 0x0246, 0x0256, - 0x0266, 0x0270, 0x0282, 0x028a, 0x0296, 0x02a8, 0x02ba, 0x02c8, - 0x02da, 0x02ec, 0x030d, 0x0321, 0x032f, 0x0341, 0x034f, 0x0359, - 0x0363, 0x036d, 0x037e, 0x0390, 0x03b3, 0x03c3, 0x03d3, 0x03df, + 0x0000, 0x000e, 0x001c, 0x002c, 0x003c, 0x0044, 0x0054, 0x0066, + 0x0074, 0x0082, 0x0090, 0x009c, 0x00b8, 0x00ca, 0x00dc, 0x00ee, + 0x00fc, 0x010a, 0x011c, 0x012c, 0x013e, 0x0150, 0x0164, 0x0174, + 0x0180, 0x0196, 0x019e, 0x01a8, 0x01ca, 0x01d8, 0x01e4, 0x01f0, + 0x01fc, 0x0208, 0x0218, 0x021e, 0x022a, 0x023c, 0x024e, 0x025e, + 0x026e, 0x0278, 0x028a, 0x0292, 0x029e, 0x02b0, 0x02c2, 0x02d0, + 0x02f0, 0x0302, 0x0323, 0x0337, 0x0345, 0x0357, 0x0365, 0x036f, + 0x0379, 0x0383, 0x0394, 0x03a6, 0x03c9, 0x03d9, 0x03e9, 0x03f5, // Entry 40 - 7F - 0x03f5, 0x040d, 0x0421, 0x0429, 0x043e, 0x044c, 0x0452, 0x0464, - 0x0478, 0x048a, 0x0498, 0x04a6, 0x04b8, 0x04cc, 0x04d6, 0x04e4, - 0x04f4, 0x050a, 0x051a, 0x0528, 0x0538, 0x0544, 0x0556, 0x0564, - 0x056c, 0x0580, 0x0590, 0x05a0, 0x05ba, 0x05c4, 0x05d8, 0x05e6, - 0x05f2, 0x0602, 0x0619, 0x062b, 0x063b, 0x064d, 0x065b, 0x066f, - 0x067f, 0x0691, 0x069d, 0x06ad, 0x06bf, 0x06d1, 0x06db, 0x06f8, - 0x0708, 0x0714, 0x072c, 0x074b, 0x076a, 0x0781, 0x078d, 0x0799, - 0x07ad, 0x07bb, 0x07c5, 0x07cd, 0x07db, 0x07ef, 0x07f7, 0x0803, + 0x040b, 0x0423, 0x0437, 0x043f, 0x0454, 0x0462, 0x0468, 0x047a, + 0x048e, 0x04a0, 0x04ae, 0x04bc, 0x04ce, 0x04e2, 0x04ec, 0x04fa, + 0x050a, 0x0520, 0x0530, 0x053e, 0x054e, 0x055a, 0x056c, 0x057a, + 0x0582, 0x0596, 0x05a6, 0x05b6, 0x05d0, 0x05da, 0x05ee, 0x05fc, + 0x0608, 0x0618, 0x062f, 0x0641, 0x0651, 0x0663, 0x0671, 0x0685, + 0x0695, 0x06a7, 0x06b3, 0x06c3, 0x06d5, 0x06e7, 0x06f1, 0x070e, + 0x071e, 0x072a, 0x0742, 0x0761, 0x0780, 0x0797, 0x07a3, 0x07af, + 0x07c3, 0x07d1, 0x07db, 0x07e3, 0x07f1, 0x0805, 0x080d, 0x0819, // Entry 80 - BF - 0x080b, 0x0821, 0x082b, 0x0843, 0x084d, 0x085d, 0x0867, 0x087b, - 0x088b, 0x089d, 0x08a9, 0x08c5, 0x08cf, 0x08e1, 0x08f1, 0x0903, - 0x0915, 0x091d, 0x0931, 0x0941, 0x094f, 0x0959, 0x0965, 0x0977, - 0x0985, 0x0993, 0x09a3, 0x09af, 0x09c1, 0x09cd, 0x09db, 0x09ef, - 0x09fb, 0x0a05, 0x0a11, 0x0a1b, 0x0a2b, 0x0a3d, 0x0a4d, 0x0a5f, - 0x0a67, 0x0a77, 0x0a81, 0x0a95, 0x0aa3, 0x0ab3, 0x0abd, 0x0ac7, - 0x0acf, 0x0adb, 0x0ae5, 0x0af5, 0x0b03, 0x0b11, 0x0b1b, 0x0b29, - 0x0b33, 0x0b33, 0x0b43, 0x0b4b, 0x0b53, 0x0b61, 0x0b61, 0x0b71, + 0x0821, 0x0837, 0x0841, 0x0859, 0x0863, 0x0873, 0x087d, 0x0891, + 0x08a1, 0x08b3, 0x08bf, 0x08db, 0x08e5, 0x08f7, 0x0907, 0x0919, + 0x092b, 0x0933, 0x0947, 0x0957, 0x0965, 0x096f, 0x097b, 0x098d, + 0x099b, 0x09a9, 0x09b9, 0x09c5, 0x09d7, 0x09e3, 0x09f1, 0x0a05, + 0x0a11, 0x0a23, 0x0a2f, 0x0a39, 0x0a49, 0x0a5b, 0x0a6b, 0x0a7d, + 0x0a85, 0x0a95, 0x0a9f, 0x0ab3, 0x0ac1, 0x0ad1, 0x0adb, 0x0ae5, + 0x0aed, 0x0af9, 0x0b03, 0x0b13, 0x0b21, 0x0b2d, 0x0b37, 0x0b45, + 0x0b57, 0x0b57, 0x0b67, 0x0b6f, 0x0b77, 0x0b85, 0x0b85, 0x0b95, // Entry C0 - FF - 0x0b71, 0x0b89, 0x0ba5, 0x0bb1, 0x0bc3, 0x0bcf, 0x0bcf, 0x0bdd, - 0x0bdd, 0x0bdd, 0x0be9, 0x0be9, 0x0be9, 0x0bef, 0x0bef, 0x0bff, - 0x0bff, 0x0c09, 0x0c15, 0x0c25, 0x0c25, 0x0c2d, 0x0c2d, 0x0c2d, - 0x0c2d, 0x0c33, 0x0c3d, 0x0c3d, 0x0c45, 0x0c45, 0x0c45, 0x0c60, - 0x0c6e, 0x0c7e, 0x0c86, 0x0c86, 0x0c86, 0x0c94, 0x0c94, 0x0c94, - 0x0c9e, 0x0c9e, 0x0ca6, 0x0ca6, 0x0cb6, 0x0cc6, 0x0cc6, 0x0cd6, - 0x0cd6, 0x0ce0, 0x0cf0, 0x0cf0, 0x0cfa, 0x0d08, 0x0d10, 0x0d1a, - 0x0d28, 0x0d30, 0x0d40, 0x0d59, 0x0d63, 0x0d75, 0x0d81, 0x0d91, + 0x0b95, 0x0bad, 0x0bc9, 0x0bd5, 0x0be7, 0x0bf3, 0x0bf3, 0x0c01, + 0x0c01, 0x0c01, 0x0c0d, 0x0c0d, 0x0c0d, 0x0c13, 0x0c13, 0x0c23, + 0x0c23, 0x0c2d, 0x0c39, 0x0c49, 0x0c49, 0x0c51, 0x0c51, 0x0c51, + 0x0c51, 0x0c57, 0x0c61, 0x0c61, 0x0c69, 0x0c69, 0x0c69, 0x0c84, + 0x0c92, 0x0ca2, 0x0caa, 0x0caa, 0x0caa, 0x0cb8, 0x0cb8, 0x0cb8, + 0x0cc2, 0x0cc2, 0x0cca, 0x0cca, 0x0cda, 0x0cea, 0x0cea, 0x0cfa, + 0x0cfa, 0x0d04, 0x0d14, 0x0d14, 0x0d1e, 0x0d1e, 0x0d30, 0x0d38, + 0x0d42, 0x0d50, 0x0d58, 0x0d68, 0x0d81, 0x0d8b, 0x0d9d, 0x0dad, // Entry 100 - 13F - 0x0db4, 0x0dc2, 0x0dc2, 0x0de0, 0x0e0f, 0x0e1f, 0x0e2f, 0x0e3b, - 0x0e45, 0x0e53, 0x0e5f, 0x0e6b, 0x0e75, 0x0e7f, 0x0e89, 0x0ea1, - 0x0ea1, 0x0eab, 0x0ed8, 0x0ee2, 0x0eec, 0x0ef8, 0x0f00, 0x0f08, - 0x0f08, 0x0f26, 0x0f32, 0x0f44, 0x0f71, 0x0f71, 0x0f7d, 0x0f7d, - 0x0f85, 0x0f99, 0x0f99, 0x0f9f, 0x0f9f, 0x0fc8, 0x0fe0, 0x0fe0, - 0x0ffd, 0x101d, 0x1033, 0x1037, 0x1047, 0x1047, 0x104f, 0x1057, - 0x1057, 0x105f, 0x1073, 0x1073, 0x1097, 0x10b9, 0x10b9, 0x10c3, - 0x10d5, 0x10e7, 0x10f1, 0x1109, 0x112a, 0x112a, 0x112a, 0x1134, + 0x0dbd, 0x0de0, 0x0dee, 0x0dee, 0x0e0c, 0x0e3b, 0x0e4b, 0x0e5b, + 0x0e67, 0x0e71, 0x0e7f, 0x0e8b, 0x0e97, 0x0ea1, 0x0eab, 0x0eb5, + 0x0ecd, 0x0ecd, 0x0ed7, 0x0f04, 0x0f17, 0x0f21, 0x0f2d, 0x0f35, + 0x0f3d, 0x0f3d, 0x0f5b, 0x0f67, 0x0f79, 0x0fa6, 0x0fa6, 0x0fb2, + 0x0fb2, 0x0fba, 0x0fce, 0x0fce, 0x0fd4, 0x0fd4, 0x0ffd, 0x1015, + 0x1015, 0x1032, 0x1052, 0x1068, 0x106c, 0x107c, 0x107c, 0x1084, + 0x108c, 0x108c, 0x1094, 0x10a8, 0x10a8, 0x10cc, 0x10ee, 0x10ee, + 0x10f8, 0x110a, 0x111c, 0x1126, 0x113e, 0x115f, 0x115f, 0x115f, // Entry 140 - 17F - 0x1140, 0x114a, 0x114a, 0x115a, 0x115a, 0x116e, 0x117a, 0x1184, - 0x119c, 0x119c, 0x11a4, 0x11ac, 0x11b8, 0x11c2, 0x11d6, 0x11d6, - 0x11d6, 0x11e2, 0x11ee, 0x11fa, 0x1215, 0x122c, 0x122c, 0x1244, - 0x1254, 0x1264, 0x126a, 0x1274, 0x127c, 0x128e, 0x128e, 0x1296, - 0x12a4, 0x12c0, 0x12c0, 0x12c8, 0x12c8, 0x12d2, 0x12de, 0x12f3, - 0x12f3, 0x12f3, 0x12fb, 0x130d, 0x131d, 0x1338, 0x1346, 0x1354, - 0x135e, 0x137f, 0x137f, 0x137f, 0x138f, 0x1399, 0x13a7, 0x13b1, - 0x13c1, 0x13d1, 0x13df, 0x13eb, 0x13f5, 0x1401, 0x140b, 0x141d, + 0x1169, 0x1175, 0x117f, 0x117f, 0x118f, 0x118f, 0x11a3, 0x11af, + 0x11b9, 0x11d1, 0x11d1, 0x11d9, 0x11e1, 0x11ed, 0x11f7, 0x120b, + 0x120b, 0x120b, 0x1217, 0x1223, 0x122f, 0x124a, 0x1261, 0x1261, + 0x1279, 0x1289, 0x1299, 0x129f, 0x12a9, 0x12b1, 0x12c3, 0x12c3, + 0x12cb, 0x12d9, 0x12f5, 0x12f5, 0x12fd, 0x12fd, 0x1307, 0x1313, + 0x1328, 0x1328, 0x1328, 0x1330, 0x1342, 0x1352, 0x136d, 0x137b, + 0x1389, 0x1393, 0x13b4, 0x13b4, 0x13b4, 0x13c4, 0x13ce, 0x13dc, + 0x13e6, 0x13f6, 0x1406, 0x1414, 0x1420, 0x142a, 0x1436, 0x1440, // Entry 180 - 1BF - 0x141d, 0x141d, 0x141d, 0x1429, 0x1429, 0x1433, 0x143b, 0x1452, - 0x1452, 0x1465, 0x1475, 0x147f, 0x1485, 0x148d, 0x1493, 0x1493, - 0x1493, 0x14a3, 0x14a3, 0x14af, 0x14bf, 0x14cd, 0x14dd, 0x14ed, - 0x14ed, 0x14f7, 0x1503, 0x150d, 0x1515, 0x1525, 0x1552, 0x1565, - 0x156d, 0x1579, 0x158f, 0x15a3, 0x15b3, 0x15bf, 0x15c7, 0x15c7, - 0x15d5, 0x15eb, 0x15f3, 0x1609, 0x1617, 0x1617, 0x1617, 0x1621, - 0x1633, 0x1633, 0x164d, 0x1655, 0x166b, 0x167b, 0x1683, 0x168f, - 0x168f, 0x169b, 0x16ab, 0x16b5, 0x16cf, 0x16cf, 0x16d5, 0x16ec, + 0x1452, 0x1452, 0x1452, 0x1452, 0x145e, 0x145e, 0x1468, 0x1468, + 0x1470, 0x1487, 0x1487, 0x149a, 0x14aa, 0x14b4, 0x14ba, 0x14c2, + 0x14ca, 0x14ca, 0x14ca, 0x14da, 0x14da, 0x14e6, 0x14f6, 0x1504, + 0x1514, 0x1524, 0x1524, 0x152e, 0x153a, 0x1544, 0x154c, 0x155c, + 0x1589, 0x159c, 0x15a4, 0x15b0, 0x15c6, 0x15da, 0x15ee, 0x15fa, + 0x1602, 0x1602, 0x1610, 0x1626, 0x162e, 0x1644, 0x1652, 0x1652, + 0x1652, 0x165c, 0x166e, 0x166e, 0x1688, 0x1690, 0x16a6, 0x16b6, + 0x16be, 0x16ca, 0x16ca, 0x16d6, 0x16e6, 0x16f0, 0x170a, 0x170a, // Entry 1C0 - 1FF - 0x16f4, 0x1715, 0x1725, 0x1735, 0x173f, 0x1749, 0x1757, 0x1776, - 0x178a, 0x1798, 0x17a8, 0x17bc, 0x17ca, 0x17ca, 0x17eb, 0x17eb, - 0x17eb, 0x1807, 0x1807, 0x181b, 0x181b, 0x181b, 0x182b, 0x1837, - 0x1859, 0x1861, 0x1861, 0x1879, 0x1888, 0x189a, 0x189a, 0x189a, - 0x18a4, 0x18b0, 0x18b0, 0x18b0, 0x18b0, 0x18c2, 0x18c8, 0x18d6, - 0x18e4, 0x190f, 0x191d, 0x1927, 0x1935, 0x1935, 0x1943, 0x194d, - 0x1963, 0x1977, 0x1977, 0x198d, 0x198d, 0x1995, 0x1995, 0x19a1, - 0x19bc, 0x19d8, 0x19d8, 0x19e8, 0x19ee, 0x19ee, 0x19fa, 0x19fa, + 0x1710, 0x1727, 0x172f, 0x1750, 0x1760, 0x176e, 0x1778, 0x1782, + 0x1790, 0x17af, 0x17c3, 0x17d1, 0x17e1, 0x17f5, 0x1803, 0x1803, + 0x1824, 0x1824, 0x1824, 0x1840, 0x1840, 0x1854, 0x1854, 0x1854, + 0x1864, 0x1870, 0x1892, 0x189a, 0x189a, 0x18b2, 0x18c1, 0x18d3, + 0x18d3, 0x18d3, 0x18dd, 0x18e9, 0x18e9, 0x18e9, 0x18e9, 0x18fb, + 0x1901, 0x190f, 0x191d, 0x1948, 0x1956, 0x1960, 0x196e, 0x196e, + 0x197c, 0x1986, 0x199c, 0x19b0, 0x19b0, 0x19c6, 0x19c6, 0x19ce, + 0x19ce, 0x19da, 0x19f5, 0x1a11, 0x1a11, 0x1a21, 0x1a27, 0x1a27, // Entry 200 - 23F - 0x19fa, 0x1a10, 0x1a27, 0x1a40, 0x1a59, 0x1a67, 0x1a79, 0x1a90, - 0x1a9a, 0x1aa2, 0x1aa2, 0x1aae, 0x1ab6, 0x1ac6, 0x1ad6, 0x1afb, - 0x1b0b, 0x1b0b, 0x1b0b, 0x1b15, 0x1b1d, 0x1b29, 0x1b33, 0x1b3d, - 0x1b43, 0x1b57, 0x1b57, 0x1b6b, 0x1b79, 0x1b79, 0x1b87, 0x1b9e, - 0x1baf, 0x1baf, 0x1bbb, 0x1bbb, 0x1bcf, 0x1bcf, 0x1bdd, 0x1bf3, - 0x1c01, 0x1c11, 0x1c42, 0x1c54, 0x1c66, 0x1c74, 0x1c7c, 0x1c82, - 0x1c82, 0x1c82, 0x1c82, 0x1c82, 0x1c8c, 0x1c8c, 0x1c98, 0x1cb7, - 0x1cc3, 0x1ccd, 0x1cd5, 0x1ce3, 0x1ce3, 0x1cef, 0x1cef, 0x1cf7, + 0x1a33, 0x1a33, 0x1a33, 0x1a49, 0x1a60, 0x1a79, 0x1a92, 0x1aa0, + 0x1ab2, 0x1ac9, 0x1ad3, 0x1adb, 0x1adb, 0x1ae7, 0x1aef, 0x1aff, + 0x1b0f, 0x1b34, 0x1b44, 0x1b44, 0x1b44, 0x1b4e, 0x1b56, 0x1b62, + 0x1b6c, 0x1b76, 0x1b7c, 0x1b90, 0x1b90, 0x1ba4, 0x1bb2, 0x1bb2, + 0x1bc0, 0x1bd7, 0x1be8, 0x1be8, 0x1bf4, 0x1bf4, 0x1c08, 0x1c08, + 0x1c16, 0x1c2c, 0x1c3a, 0x1c4a, 0x1c7b, 0x1c8d, 0x1c9f, 0x1cad, + 0x1cc3, 0x1cc9, 0x1cc9, 0x1cc9, 0x1cc9, 0x1cc9, 0x1cd3, 0x1cd3, + 0x1cdf, 0x1cfe, 0x1d0a, 0x1d14, 0x1d1c, 0x1d2a, 0x1d2a, 0x1d36, // Entry 240 - 27F - 0x1cfb, 0x1d05, 0x1d11, 0x1d1b, 0x1d1b, 0x1d2d, 0x1d3b, 0x1d52, - 0x1d52, 0x1d5e, 0x1d98, 0x1da0, 0x1dd4, 0x1ddc, 0x1e14, 0x1e14, - 0x1e14, 0x1e14, 0x1e14, 0x1e14, 0x1e14, 0x1e2f, 0x1e2f, 0x1e2f, - 0x1e2f, 0x1e2f, 0x1e2f, 0x1e2f, 0x1e4b, 0x1e5f, 0x1e5f, 0x1e5f, - 0x1e71, 0x1e8d, 0x1eb0, 0x1ed3, -} // Size: 1248 bytes - -const bnLangStr string = "" + // Size: 12336 bytes + 0x1d36, 0x1d3e, 0x1d42, 0x1d4c, 0x1d58, 0x1d62, 0x1d62, 0x1d74, + 0x1d82, 0x1d99, 0x1d99, 0x1da5, 0x1ddf, 0x1de7, 0x1e1b, 0x1e23, + 0x1e5b, 0x1e5b, 0x1e5b, 0x1e5b, 0x1e5b, 0x1e5b, 0x1e5b, 0x1e76, + 0x1e76, 0x1e76, 0x1e76, 0x1e76, 0x1e76, 0x1e76, 0x1e92, 0x1ea6, + 0x1ea6, 0x1ea6, 0x1eb8, 0x1ed4, 0x1ef7, 0x1f1a, +} // Size: 1252 bytes + +const bnLangStr string = "" + // Size: 12466 bytes "আফারআবখাজিয়ানআবেস্তীয়আফ্রিকানআকানআমহারিকআর্গোনিজআরবীআসামিআভেরিকআয়মারা" + "আজারবাইজানীবাশকিরবেলারুশিয়বুলগেরিয়বিসলামাবামবারাবাংলাতিব্বতিব্রেটনবস" + "নীয়ানকাতালানচেচেনচামোরোকর্সিকানক্রিচেকচার্চ স্লাভিকচুবাসওয়েলশডেনিশজা" + "র্মানদিবেহিজোঙ্গাইউয়িগ্রিকইংরেজিএস্পেরান্তোস্প্যানিশএস্তোনীয়বাস্কফার" + "্সিফুলাহ্ফিনিশফিজিআনফারোসফরাসিপশ্চিম ফ্রিসিয়ানআইরিশস্কটস-গ্যেলিকগ্যাল" + "িশিয়গুয়ারানিগুজরাটিম্যাঙ্কসহাউসাহিব্রুহিন্দিহিরি মোতুক্রোয়েশীয়হাইত" + - "িয়ানহাঙ্গেরীয়আর্মেনিয়হেরেরোইন্টারলিঙ্গুয়াইন্দোনেশীয়ইন্টারলিঙ্গইগ্" + - "\u200cবোসিচুয়ান য়িইনুপিয়াকইডোআইসল্যান্ডীয়ইতালিয়ইনুক্টিটুটজাপানিজাভা" + - "নিজজর্জিয়ানকঙ্গোকিকুয়ুকোয়ানিয়ামাকাজাখক্যালাল্লিসুটখমেরকন্নড়কোরিয়" + - "ানকানুরিকাশ্মীরিকুর্দিশকোমিকর্ণিশকির্গিজলাটিনলুক্সেমবার্গীয়গান্ডালিম্" + - "বুর্গিশলিঙ্গালালাওলিথুয়েনীয়লুবা-কাটাঙ্গালাত্\u200cভীয়মালাগাসিমার্শা" + - "লিজমাওরিম্যাসিডোনীয়মালায়ালামমঙ্গোলিয়মারাঠিমালয়মল্টিয়বর্মিনাউরুউত্" + - "তর এন্দেবিলিনেপালীএন্দোঙ্গাডাচনরওয়েজীয়ান নিনর্স্কনরওয়েজিয়ান বোকমাল" + - "দক্ষিণ এনডেবেলেনাভাজোনায়াঞ্জাঅক্সিটানওজিবওয়াঅরোমোওড়িয়াওসেটিকপাঞ্জা" + - "বীপালিপোলিশপাশ্তুপর্তুগীজকেচুয়ারোমান্সরুন্দিরোমানীয়রুশকিনয়ারোয়ান্ড" + - "াসংস্কৃতসার্ডিনিয়ানসিন্ধিউত্তরাঞ্চলীয় সামিসাঙ্গোসিংহলীস্লোভাকস্লোভেন" + - "ীয়সামোয়ানশোনাসোমালিআলবেনীয়সার্বীয়সোয়াতিদক্ষিন সোথোসুদানীসুইডিশসোয" + - "়াহিলিতামিলতেলেগুতাজিকথাইতিগরিনিয়াতুর্কমেনীসোয়ানাটোঙ্গানতুর্কীসঙ্গাত" + - "াতারতাহিতিয়ানউইঘুরইউক্রেনীয়উর্দুউজবেকীয়ভেন্ডাভিয়েতনামীভোলাপুকওয়াল" + - "ুনউওলোফজোসায়িদ্দিশইওরুবাঝু্য়াঙচীনাজুলুঅ্যাচাইনিজআকোলিঅদাগ্মেআদেগেআফ্" + - "রিহিলিএঘেমআইনুআক্কাদিয়ানআলেউতদক্ষিন আলতাইপ্রাচীন ইংরেজীআঙ্গিকাআরামাইক" + - "মাপুচিআরাপাহোআরাওয়াকআসুআস্তুরিয়আওয়াধিবেলুচীবালিনীয়বাসাবেজাবেম্বাবে" + - "নাপশ্চিম বালোচিভোজপুরিবিকোলবিনিসিকসিকাব্রাজবোড়োবুরিয়াতবুগিনিব্লিনক্য" + - "াডোক্যারিবআত্সামচেবুয়ানোচিগাচিবচাচাগাতাইচুকিমারিচিনুক জার্গনচকটোওচিপে" + - "ওয়ানচেরোকীশাইয়েনমধ্য কুর্দিশকপটিকক্রিমিয়ান তুর্কিসেসেলওয়া ক্রেওল ফ" + - "্রেঞ্চকাশুবিয়ানডাকোটাদার্গওয়াতাইতাডেলাওয়েরস্ল্যাভদোগ্রীবডিংকাজার্মা" + - "ডোগরিনিম্নতর সোর্বিয়ানদুয়ালামধ্য ডাচজলা-ফনীডিউলাদাগাজাএম্বুএফিকপ্রাচ" + - "ীন মিশরীয়ইকাজুকএলামাইটমধ্য ইংরেজিইওন্ডোফ্যাঙ্গফিলিপিনোফনমধ্য ফরাসিপ্র" + - "াচীন ফরাসিউত্তরাঞ্চলীয় ফ্রিসিয়ানপূর্ব ফ্রিসিয়ফ্রিউলিয়ানগাগাগাউজgan" + - "গায়োবায়াগীজগিলবার্টিজমধ্য-উচ্চ জার্মানিপ্রাচীন উচ্চ জার্মানিগোন্ডিগো" + - "রোন্তালোগথিকগ্রেবোপ্রাচীন গ্রীকসুইস জার্মানগুসীগওইচ্’ইনহাইডাhakহাওয়াই" + - "য়ানহিলিগ্যায়নোনহিট্টিটহ্\u200cমোঙউচ্চ সোর্বিয়ানXiang চীনাহুপাইবানইব" + - "িবিওইলোকোইঙ্গুশলোজবানগোম্বামাকামেজুদেও ফার্সিজুদেও আরবিকারা-কাল্পাককাব" + - "াইলেকাচিনঅজ্জুকাম্বাকাউইকাবার্ডিয়ানটাইয়াপমাকোন্দেকাবুভারদিয়ানুকোরোখ" + - "াশিখোটানিজকোয়রা চীনিকাকোকালেনজিনকিম্বুন্দুকমি-পারমিআককোঙ্কানিকোস্রাইন" + - "ক্\u200cপেল্লেকারচে-বাল্কারকারেলিয়ানকুরুখশাম্বালাবাফিয়াকল্শকুমিককুটে" + - "নাইলাডিনোলাঙ্গিলান্ডালাম্বালেজঘিয়ানলাকোটামোঙ্গোলোজিউত্তর লুরিলুবা-লুল" + - "ুয়ালুইসেনোলুন্ডালুয়োমিজোলুইয়ামাদুরেসেমাগাহিমৈথিলিম্যাকাসারম্যান্ডিঙ" + - "্গোমাসাইমোকশাম্যাণ্ডারমেন্ডেমেরুমরিসিয়ানমধ্য আইরিশমাখুয়া-মেত্তোমেটাম" + - "িকম্যাকমিনাঙ্গ্\u200cকাবাউমাঞ্চুমণিপুরীমোহাওকমসিমুদাঙ্গএকাধিক ভাষাক্রি" + - "কমিরান্ডিজমারোয়ারিএরজিয়ামাজানদেরানিnanনেয়াপোলিটাননামানিম্ন জার্মানি" + - "নেওয়ারিনিয়াসনিউয়ানকোয়াসিওনিঙ্গেম্বুননোগাইপ্রাচীন নর্সএন’কোউত্তরাঞ্" + - "চলীয় সোথোনুয়ারপ্রাচীন নেওয়ারীন্যায়ামওয়েজিন্যায়াঙ্কোলেন্যোরোএনজিম" + - "াওসেজঅটোমান তুর্কিপাঙ্গাসিনানপাহ্লাভিপাম্পাঙ্গাপাপিয়ামেন্টোপালায়ুয়া" + - "ননাজেরিয় পিজিনপ্রাচীন ফার্সিফোনিশীয়ানপোহ্নপেইয়ানপ্রুশিয়ানপ্রাচীন প" + - "্রোভেনসালকি‘চেরাজস্থানীরাপানুইরারোটোংগানরম্বোরোমানিআরমেনিয়ানরাওয়াস্য" + - "ান্ডাওয়েশাখাসামারিটান আরামিকসামবুরুসাসাকসাঁওতালিন্যাগাম্বেসাঙ্গুসিসিল" + - "িয়ানস্কটসদক্ষিণ কুর্দিশসেনাসেল্কুপকোয়রাবেনো সেন্নীপ্রাচীন আইরিশতাচেল" + - "হিতশানসিডামোদক্ষিণাঞ্চলীয় সামিলুলে সামিইনারি সামিস্কোল্ট সামিসোনিঙ্কে" + - "সোগডিয়ানস্রানান টোঙ্গোসেরেরসাহোসুকুমাসুসুসুমেরীয়কমোরিয়ানপ্রাচীন সির" + - "িওসিরিয়াকটাইম্নেতেসোতেরেনোতেতুমটাইগ্রেটিভটোকেলাউক্লিঙ্গনত্লিঙ্গিটতামা" + - "শেকনায়াসা টোঙ্গাটোক পিসিনতারোকোসিমশিয়ানতুম্বুকাটুভালুতাসাওয়াকটুভিনি" + - "য়ানসেন্ট্রাল আটলাস তামাজিগাতউডমুর্টউগারিটিকউম্বুন্দুমূলভাইভোটিকভুঞ্জো" + - "ওয়ালসেরওয়ালামোওয়ারেওয়াশোওয়ার্লপিরিWu চীনাকাল্মইকসোগাইয়াওইয়াপেসে" + - "য়াঙ্গবেনয়েম্বাক্যানটোনীজজাপোটেকচিত্র ভাষাজেনাগাআদর্শ মরক্কোন তামাজিগ" + - "াতজুনিভাষাভিত্তিক বিষয়বস্তু নেইজাজাআধুনিক আদর্শ আরবীঅস্ট্রিয়ান জার্ম" + - "ানসুইস হাই জার্মানঅস্ট্রেলীয় ইংরেজিকানাডীয় ইংরেজিব্রিটিশ ইংরেজিআমেরি" + - "কার ইংরেজিল্যাটিন আমেরিকান স্প্যানিশইউরোপীয় স্প্যানিশম্যাক্সিকান স্প্" + - "যানিশকানাডীয় ফরাসিসুইস ফরাসিলো স্যাক্সনফ্লেমিশব্রাজিলের পর্তুগীজইউরোপ" + - "ের পর্তুগীজমলদাভিয়সার্বো-ক্রোয়েশিয়কঙ্গো সোয়াহিলিসরলীকৃত চীনাঐতিহ্য" + - "বাহি চীনা" - -var bnLangIdx = []uint16{ // 613 elements + "িয়ান ক্রেওলহাঙ্গেরীয়আর্মেনিয়হেরেরোইন্টারলিঙ্গুয়াইন্দোনেশীয়ইন্টারল" + + "িঙ্গইগ্\u200cবোসিচুয়ান য়িইনুপিয়াকইডোআইসল্যান্ডীয়ইতালিয়ইনুক্টিটুটজ" + + "াপানিজাভানিজজর্জিয়ানকঙ্গোকিকুয়ুকোয়ানিয়ামাকাজাখক্যালাল্লিসুটখমেরকন্" + + "নড়কোরিয়ানকানুরিকাশ্মীরিকুর্দিশকোমিকর্ণিশকির্গিজলাটিনলুক্সেমবার্গীয়গ" + + "ান্ডালিম্বুর্গিশলিঙ্গালালাওলিথুয়েনীয়লুবা-কাটাঙ্গালাত্\u200cভীয়মালাগ" + + "াসিমার্শালিজমাওরিম্যাসিডোনীয়মালায়ালামমঙ্গোলিয়মারাঠিমালয়মল্টিয়বর্ম" + + "িনাউরুউত্তর এন্দেবিলিনেপালীএন্দোঙ্গাডাচনরওয়েজীয়ান নিনর্স্কনরওয়েজিয়" + + "ান বোকমালদক্ষিণ এনডেবেলেনাভাজোনায়াঞ্জাঅক্সিটানওজিবওয়াঅরোমোওড়িয়াওসে" + + "টিকপাঞ্জাবীপালিপোলিশপুশতুপর্তুগীজকেচুয়ারোমান্সরুন্দিরোমানীয়রুশকিনয়া" + + "রোয়ান্ডাসংস্কৃতসার্ডিনিয়ানসিন্ধিউত্তরাঞ্চলীয় সামিসাঙ্গোসিংহলীস্লোভা" + + "কস্লোভেনীয়সামোয়ানশোনাসোমালিআলবেনীয়সার্বীয়সোয়াতিদক্ষিন সোথোসুদানীস" + + "ুইডিশসোয়াহিলিতামিলতেলেগুতাজিকথাইতিগরিনিয়াতুর্কমেনীসোয়ানাটোঙ্গানতুর্" + + "কীসঙ্গাতাতারতাহিতিয়ানউইঘুরইউক্রেনীয়উর্দুউজবেকীয়ভেন্ডাভিয়েতনামীভোলা" + + "পুকওয়ালুনউওলোফজোসাইয়েদ্দিশইওরুবাঝু্য়াঙচীনাজুলুঅ্যাচাইনিজআকোলিঅদাগ্ম" + + "েআদেগেআফ্রিহিলিএঘেমআইনুআক্কাদিয়ানআলেউতদক্ষিন আলতাইপ্রাচীন ইংরেজীআঙ্গি" + + "কাআরামাইকমাপুচিআরাপাহোআরাওয়াকআসুআস্তুরিয়আওয়াধিবেলুচীবালিনীয়বাসাবেজ" + + "াবেম্বাবেনাপশ্চিম বালোচিভোজপুরিবিকোলবিনিসিকসিকাব্রাজবোড়োবুরিয়াতবুগিন" + + "িব্লিনক্যাডোক্যারিবআত্সামচেবুয়ানোচিগাচিবচাচাগাতাইচুকিমারিচিনুক জার্গন" + + "চকটোওচিপেওয়ানচেরোকীশাইয়েনমধ্য কুর্দিশকপটিকক্রিমিয়ান তুর্কিসেসেলওয়া" + + " ক্রেওল ফ্রেঞ্চকাশুবিয়ানডাকোটাদার্গওয়াতাইতাডেলাওয়েরস্ল্যাভদোগ্রীবডিংক" + + "াজার্মাডোগরিনিম্নতর সোর্বিয়ানদুয়ালামধ্য ডাচজোলা-ফনীডিউলাদাগাজাএম্বুএ" + + "ফিকপ্রাচীন মিশরীয়ইকাজুকএলামাইটমধ্য ইংরেজিইওন্ডোফ্যাঙ্গফিলিপিনোফনকাজুন" + + " ফরাসিমধ্য ফরাসিপ্রাচীন ফরাসিউত্তরাঞ্চলীয় ফ্রিসিয়ানপূর্ব ফ্রিসিয়ফ্রিউ" + + "লিয়ানগাগাগাউজganগায়োবায়াগীজগিলবার্টিজমধ্য-উচ্চ জার্মানিপ্রাচীন উচ্চ" + + " জার্মানিগোন্ডিগোরোন্তালোগথিকগ্রেবোপ্রাচীন গ্রীকসুইস জার্মানগুসীগওইচ্’ইন" + + "হাইডাhakহাওয়াইয়ানহিলিগ্যায়নোনহিট্টিটহ্\u200cমোঙউচ্চ সোর্বিয়ানXiang" + + " চীনাহুপাইবানইবিবিওইলোকোইঙ্গুশলোজবানগোম্বামাকামেজুদেও ফার্সিজুদেও আরবিকা" + + "রা-কাল্পাককাবাইলেকাচিনঅজ্জুকাম্বাকাউইকাবার্ডিয়ানটাইয়াপমাকোন্দেকাবুভা" + + "রদিয়ানুকোরোখাশিখোটানিজকোয়রা চীনিকাকোকালেনজিনকিম্বুন্দুকমি-পারমিআককোঙ" + + "্কানিকোস্রাইনক্\u200cপেল্লেকারচে-বাল্কারকারেলিয়ানকুরুখশাম্বালাবাফিয়া" + + "কল্শকুমিককুটেনাইলাডিনোলাঙ্গিলান্ডালাম্বালেজঘিয়ানলাকোটামোঙ্গোলুইসিয়ান" + + "া ক্রেওললোজিউত্তর লুরিলুবা-লুলুয়ালুইসেনোলুন্ডালুয়োমিজোলুইয়ামাদুরেসে" + + "মাগাহিমৈথিলিম্যাকাসারম্যান্ডিঙ্গোমাসাইমোকশাম্যাণ্ডারমেন্ডেমেরুমরিসিয়া" + + "নমধ্য আইরিশমাখুয়া-মেত্তোমেটামিকম্যাকমিনাঙ্গ্\u200cকাবাউমাঞ্চুমণিপুরীম" + + "োহাওকমসিমুদাঙ্গএকাধিক ভাষাক্রিকমিরান্ডিজমারোয়ারিএরজিয়ামাজানদেরানিnan" + + "নেয়াপোলিটাননামানিম্ন জার্মানিনেওয়ারিনিয়াসনিউয়ানকোয়াসিওনিঙ্গেম্বুন" + + "নোগাইপ্রাচীন নর্সএন’কোউত্তরাঞ্চলীয় সোথোনুয়ারপ্রাচীন নেওয়ারীন্যায়াম" + + "ওয়েজিন্যায়াঙ্কোলেন্যোরোএনজিমাওসেজঅটোমান তুর্কিপাঙ্গাসিনানপাহ্লাভিপাম" + + "্পাঙ্গাপাপিয়ামেন্টোপালায়ুয়াননাইজেরিয় পিজিনপ্রাচীন ফার্সিফোনিশীয়ান" + + "পোহ্নপেইয়ানপ্রুশিয়ানপ্রাচীন প্রোভেনসালকি‘চেরাজস্থানীরাপানুইরারোটোংগা" + + "নরম্বোরোমানিআরমেনিয়ানরাওয়াস্যান্ডাওয়েশাখাসামারিটান আরামিকসামবুরুসাস" + + "াকসাঁওতালিন্যাগাম্বেসাঙ্গুসিসিলিয়ানস্কটসদক্ষিণ কুর্দিশসেনাসেল্কুপকোয়" + + "রাবেনো সেন্নীপ্রাচীন আইরিশতাচেলহিতশানসিডামোদক্ষিণাঞ্চলীয় সামিলুলে সাম" + + "িইনারি সামিস্কোল্ট সামিসোনিঙ্কেসোগডিয়ানস্রানান টোঙ্গোসেরেরসাহোসুকুমাস" + + "ুসুসুমেরীয়কমোরিয়ানপ্রাচীন সিরিওসিরিয়াকটাইম্নেতেসোতেরেনোতেতুমটাইগ্রে" + + "টিভটোকেলাউক্লিঙ্গনত্লিঙ্গিটতামাশেকনায়াসা টোঙ্গাটোক পিসিনতারোকোসিমশিয়" + + "ানতুম্বুকাটুভালুতাসাওয়াকটুভিনিয়ানসেন্ট্রাল আটলাস তামাজিগাতউডমুর্টউগা" + + "রিটিকউম্বুন্দুঅজানা ভাষাভাইভোটিকভুঞ্জোওয়ালসেরওয়ালামোওয়ারেওয়াশোওয়া" + + "র্লপিরিWu চীনাকাল্মইকসোগাইয়াওইয়াপেসেইয়াঙ্গবেনইয়েম্বাক্যানটোনীজজাপো" + + "টেকচিত্র ভাষাজেনাগাআদর্শ মরক্কোন তামাজিগাতজুনিভাষাভিত্তিক বিষয়বস্তু ন" + + "েইজাজাআধুনিক আদর্শ আরবীঅস্ট্রিয়ান জার্মানসুইস হাই জার্মানঅস্ট্রেলীয় " + + "ইংরেজিকানাডীয় ইংরেজিব্রিটিশ ইংরেজিআমেরিকার ইংরেজিল্যাটিন আমেরিকান স্প" + + "্যানিশইউরোপীয় স্প্যানিশম্যাক্সিকান স্প্যানিশকানাডীয় ফরাসিসুইস ফরাসিল" + + "ো স্যাক্সনফ্লেমিশব্রাজিলের পর্তুগীজইউরোপের পর্তুগীজমলদাভিয়সার্বো-ক্রো" + + "য়েশিয়কঙ্গো সোয়াহিলিসরলীকৃত চীনাঐতিহ্যবাহি চীনা" + +var bnLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x000c, 0x002a, 0x0045, 0x005d, 0x0069, 0x007e, 0x0096, 0x00a2, 0x00b1, 0x00c3, 0x00d8, 0x00f9, 0x010b, 0x0129, 0x0144, @@ -16273,241 +17530,242 @@ var bnLangIdx = []uint16{ // 613 elements 0x0289, 0x029b, 0x02ad, 0x02bc, 0x02cb, 0x02dd, 0x02fe, 0x0319, 0x0334, 0x0343, 0x0355, 0x0367, 0x0376, 0x0388, 0x0397, 0x03a6, 0x03d7, 0x03e6, 0x040b, 0x0429, 0x0444, 0x0459, 0x0471, 0x0480, - 0x0492, 0x04a4, 0x04bd, 0x04de, 0x04f9, 0x0517, 0x0532, 0x0544, + 0x0492, 0x04a4, 0x04bd, 0x04de, 0x050c, 0x052a, 0x0545, 0x0557, // Entry 40 - 7F - 0x0571, 0x0592, 0x05b3, 0x05c5, 0x05e7, 0x0602, 0x060b, 0x0632, - 0x0647, 0x0665, 0x0677, 0x068c, 0x06a7, 0x06b6, 0x06cb, 0x06ef, - 0x06fe, 0x0725, 0x0731, 0x0743, 0x075b, 0x076d, 0x0785, 0x079a, - 0x07a6, 0x07b8, 0x07cd, 0x07dc, 0x0809, 0x081b, 0x083c, 0x0854, - 0x085d, 0x087e, 0x08a3, 0x08be, 0x08d6, 0x08f1, 0x0900, 0x0924, - 0x0942, 0x095d, 0x096f, 0x097e, 0x0993, 0x09a2, 0x09b1, 0x09dc, - 0x09ee, 0x0a09, 0x0a12, 0x0a4f, 0x0a86, 0x0ab1, 0x0ac3, 0x0ade, - 0x0af6, 0x0b0e, 0x0b1d, 0x0b32, 0x0b44, 0x0b5c, 0x0b68, 0x0b77, + 0x0584, 0x05a5, 0x05c6, 0x05d8, 0x05fa, 0x0615, 0x061e, 0x0645, + 0x065a, 0x0678, 0x068a, 0x069f, 0x06ba, 0x06c9, 0x06de, 0x0702, + 0x0711, 0x0738, 0x0744, 0x0756, 0x076e, 0x0780, 0x0798, 0x07ad, + 0x07b9, 0x07cb, 0x07e0, 0x07ef, 0x081c, 0x082e, 0x084f, 0x0867, + 0x0870, 0x0891, 0x08b6, 0x08d1, 0x08e9, 0x0904, 0x0913, 0x0937, + 0x0955, 0x0970, 0x0982, 0x0991, 0x09a6, 0x09b5, 0x09c4, 0x09ef, + 0x0a01, 0x0a1c, 0x0a25, 0x0a62, 0x0a99, 0x0ac4, 0x0ad6, 0x0af1, + 0x0b09, 0x0b21, 0x0b30, 0x0b45, 0x0b57, 0x0b6f, 0x0b7b, 0x0b8a, // Entry 80 - BF - 0x0b89, 0x0ba1, 0x0bb6, 0x0bcb, 0x0bdd, 0x0bf5, 0x0bfe, 0x0c2b, - 0x0c40, 0x0c64, 0x0c76, 0x0caa, 0x0cbc, 0x0cce, 0x0ce3, 0x0d01, - 0x0d19, 0x0d25, 0x0d37, 0x0d4f, 0x0d67, 0x0d7c, 0x0d9b, 0x0dad, - 0x0dbf, 0x0dda, 0x0de9, 0x0dfb, 0x0e0a, 0x0e13, 0x0e31, 0x0e4c, - 0x0e61, 0x0e76, 0x0e88, 0x0e97, 0x0ea6, 0x0ec4, 0x0ed3, 0x0ef1, - 0x0f00, 0x0f18, 0x0f2a, 0x0f48, 0x0f5d, 0x0f72, 0x0f81, 0x0f8d, - 0x0fa5, 0x0fb7, 0x0fcc, 0x0fd8, 0x0fe4, 0x1002, 0x1011, 0x1026, - 0x1035, 0x1035, 0x1050, 0x105c, 0x1068, 0x1089, 0x1089, 0x1098, + 0x0b99, 0x0bb1, 0x0bc6, 0x0bdb, 0x0bed, 0x0c05, 0x0c0e, 0x0c3b, + 0x0c50, 0x0c74, 0x0c86, 0x0cba, 0x0ccc, 0x0cde, 0x0cf3, 0x0d11, + 0x0d29, 0x0d35, 0x0d47, 0x0d5f, 0x0d77, 0x0d8c, 0x0dab, 0x0dbd, + 0x0dcf, 0x0dea, 0x0df9, 0x0e0b, 0x0e1a, 0x0e23, 0x0e41, 0x0e5c, + 0x0e71, 0x0e86, 0x0e98, 0x0ea7, 0x0eb6, 0x0ed4, 0x0ee3, 0x0f01, + 0x0f10, 0x0f28, 0x0f3a, 0x0f58, 0x0f6d, 0x0f82, 0x0f91, 0x0f9d, + 0x0fb8, 0x0fca, 0x0fdf, 0x0feb, 0x0ff7, 0x1015, 0x1024, 0x1039, + 0x1048, 0x1048, 0x1063, 0x106f, 0x107b, 0x109c, 0x109c, 0x10ab, // Entry C0 - FF - 0x1098, 0x10ba, 0x10e2, 0x10f7, 0x110c, 0x111e, 0x111e, 0x1133, - 0x1133, 0x1133, 0x114b, 0x114b, 0x114b, 0x1154, 0x1154, 0x116f, - 0x116f, 0x1184, 0x1196, 0x11ae, 0x11ae, 0x11ba, 0x11ba, 0x11ba, - 0x11ba, 0x11c6, 0x11d8, 0x11d8, 0x11e4, 0x11e4, 0x11e4, 0x1209, - 0x121e, 0x122d, 0x1239, 0x1239, 0x1239, 0x124e, 0x124e, 0x124e, - 0x125d, 0x125d, 0x126c, 0x126c, 0x1284, 0x1296, 0x1296, 0x12a5, - 0x12a5, 0x12b7, 0x12cc, 0x12cc, 0x12de, 0x12f9, 0x1305, 0x1314, - 0x1329, 0x1335, 0x1341, 0x1363, 0x1372, 0x138d, 0x139f, 0x13b4, + 0x10ab, 0x10cd, 0x10f5, 0x110a, 0x111f, 0x1131, 0x1131, 0x1146, + 0x1146, 0x1146, 0x115e, 0x115e, 0x115e, 0x1167, 0x1167, 0x1182, + 0x1182, 0x1197, 0x11a9, 0x11c1, 0x11c1, 0x11cd, 0x11cd, 0x11cd, + 0x11cd, 0x11d9, 0x11eb, 0x11eb, 0x11f7, 0x11f7, 0x11f7, 0x121c, + 0x1231, 0x1240, 0x124c, 0x124c, 0x124c, 0x1261, 0x1261, 0x1261, + 0x1270, 0x1270, 0x127f, 0x127f, 0x1297, 0x12a9, 0x12a9, 0x12b8, + 0x12b8, 0x12ca, 0x12df, 0x12df, 0x12f1, 0x12f1, 0x130c, 0x1318, + 0x1327, 0x133c, 0x1348, 0x1354, 0x1376, 0x1385, 0x13a0, 0x13b2, // Entry 100 - 13F - 0x13d6, 0x13e5, 0x13e5, 0x1416, 0x145a, 0x1478, 0x148a, 0x14a5, - 0x14b4, 0x14cf, 0x14e4, 0x14f9, 0x1508, 0x151a, 0x1529, 0x155d, - 0x155d, 0x1572, 0x1588, 0x159b, 0x15aa, 0x15bc, 0x15cb, 0x15d7, - 0x15d7, 0x1602, 0x1614, 0x1629, 0x1648, 0x1648, 0x165a, 0x165a, - 0x166f, 0x1687, 0x1687, 0x168d, 0x168d, 0x16a9, 0x16ce, 0x16ce, - 0x1714, 0x173c, 0x175d, 0x1763, 0x1775, 0x1778, 0x1787, 0x1796, - 0x1796, 0x179f, 0x17bd, 0x17bd, 0x17ef, 0x182a, 0x182a, 0x183c, - 0x185a, 0x1866, 0x1878, 0x189d, 0x18bf, 0x18bf, 0x18bf, 0x18cb, + 0x13c7, 0x13e9, 0x13f8, 0x13f8, 0x1429, 0x146d, 0x148b, 0x149d, + 0x14b8, 0x14c7, 0x14e2, 0x14f7, 0x150c, 0x151b, 0x152d, 0x153c, + 0x1570, 0x1570, 0x1585, 0x159b, 0x15b1, 0x15c0, 0x15d2, 0x15e1, + 0x15ed, 0x15ed, 0x1618, 0x162a, 0x163f, 0x165e, 0x165e, 0x1670, + 0x1670, 0x1685, 0x169d, 0x169d, 0x16a3, 0x16c2, 0x16de, 0x1703, + 0x1703, 0x1749, 0x1771, 0x1792, 0x1798, 0x17aa, 0x17ad, 0x17bc, + 0x17cb, 0x17cb, 0x17d4, 0x17f2, 0x17f2, 0x1824, 0x185f, 0x185f, + 0x1871, 0x188f, 0x189b, 0x18ad, 0x18d2, 0x18f4, 0x18f4, 0x18f4, // Entry 140 - 17F - 0x18e3, 0x18f2, 0x18f5, 0x1916, 0x1916, 0x193d, 0x1952, 0x1964, - 0x198f, 0x19a1, 0x19ad, 0x19b9, 0x19cb, 0x19da, 0x19ec, 0x19ec, - 0x19ec, 0x19fe, 0x1a10, 0x1a22, 0x1a44, 0x1a60, 0x1a60, 0x1a82, - 0x1a97, 0x1aa6, 0x1ab5, 0x1ac7, 0x1ad3, 0x1af7, 0x1af7, 0x1b0c, - 0x1b24, 0x1b4e, 0x1b4e, 0x1b5a, 0x1b5a, 0x1b66, 0x1b7b, 0x1b9a, - 0x1b9a, 0x1b9a, 0x1ba6, 0x1bbe, 0x1bdc, 0x1bfb, 0x1c13, 0x1c2b, - 0x1c46, 0x1c6b, 0x1c6b, 0x1c6b, 0x1c89, 0x1c98, 0x1cb0, 0x1cc5, - 0x1cd1, 0x1ce0, 0x1cf5, 0x1d07, 0x1d19, 0x1d2b, 0x1d3d, 0x1d58, + 0x1900, 0x1918, 0x1927, 0x192a, 0x194b, 0x194b, 0x1972, 0x1987, + 0x1999, 0x19c4, 0x19d6, 0x19e2, 0x19ee, 0x1a00, 0x1a0f, 0x1a21, + 0x1a21, 0x1a21, 0x1a33, 0x1a45, 0x1a57, 0x1a79, 0x1a95, 0x1a95, + 0x1ab7, 0x1acc, 0x1adb, 0x1aea, 0x1afc, 0x1b08, 0x1b2c, 0x1b2c, + 0x1b41, 0x1b59, 0x1b83, 0x1b83, 0x1b8f, 0x1b8f, 0x1b9b, 0x1bb0, + 0x1bcf, 0x1bcf, 0x1bcf, 0x1bdb, 0x1bf3, 0x1c11, 0x1c30, 0x1c48, + 0x1c60, 0x1c7b, 0x1ca0, 0x1ca0, 0x1ca0, 0x1cbe, 0x1ccd, 0x1ce5, + 0x1cfa, 0x1d06, 0x1d15, 0x1d2a, 0x1d3c, 0x1d4e, 0x1d60, 0x1d72, // Entry 180 - 1BF - 0x1d58, 0x1d58, 0x1d58, 0x1d6a, 0x1d6a, 0x1d7c, 0x1d88, 0x1da4, - 0x1da4, 0x1dc6, 0x1ddb, 0x1ded, 0x1dfc, 0x1e08, 0x1e1a, 0x1e1a, - 0x1e1a, 0x1e32, 0x1e32, 0x1e44, 0x1e56, 0x1e71, 0x1e95, 0x1ea4, - 0x1ea4, 0x1eb3, 0x1ece, 0x1ee0, 0x1eec, 0x1f07, 0x1f23, 0x1f4b, - 0x1f57, 0x1f6f, 0x1f99, 0x1fab, 0x1fc0, 0x1fd2, 0x1fdb, 0x1fdb, - 0x1ff0, 0x200f, 0x201e, 0x2039, 0x2054, 0x2054, 0x2054, 0x2069, - 0x208a, 0x208d, 0x20b1, 0x20bd, 0x20e5, 0x20fd, 0x210f, 0x2124, - 0x2124, 0x213c, 0x215d, 0x216c, 0x218e, 0x218e, 0x219d, 0x21d1, + 0x1d8d, 0x1d8d, 0x1d8d, 0x1d8d, 0x1d9f, 0x1d9f, 0x1db1, 0x1de2, + 0x1dee, 0x1e0a, 0x1e0a, 0x1e2c, 0x1e41, 0x1e53, 0x1e62, 0x1e6e, + 0x1e80, 0x1e80, 0x1e80, 0x1e98, 0x1e98, 0x1eaa, 0x1ebc, 0x1ed7, + 0x1efb, 0x1f0a, 0x1f0a, 0x1f19, 0x1f34, 0x1f46, 0x1f52, 0x1f6d, + 0x1f89, 0x1fb1, 0x1fbd, 0x1fd5, 0x1fff, 0x2011, 0x2026, 0x2038, + 0x2041, 0x2041, 0x2056, 0x2075, 0x2084, 0x209f, 0x20ba, 0x20ba, + 0x20ba, 0x20cf, 0x20f0, 0x20f3, 0x2117, 0x2123, 0x214b, 0x2163, + 0x2175, 0x218a, 0x218a, 0x21a2, 0x21c3, 0x21d2, 0x21f4, 0x21f4, // Entry 1C0 - 1FF - 0x21e3, 0x2211, 0x223b, 0x2262, 0x2274, 0x2286, 0x2292, 0x22b7, - 0x22d8, 0x22f0, 0x230e, 0x2335, 0x2356, 0x2356, 0x237e, 0x237e, - 0x237e, 0x23a6, 0x23a6, 0x23c4, 0x23c4, 0x23c4, 0x23e8, 0x2406, - 0x243a, 0x2449, 0x2449, 0x2464, 0x2479, 0x2497, 0x2497, 0x2497, - 0x24a6, 0x24b8, 0x24b8, 0x24b8, 0x24b8, 0x24d6, 0x24e8, 0x250c, - 0x2518, 0x2546, 0x255b, 0x256a, 0x2582, 0x2582, 0x25a0, 0x25b2, - 0x25d0, 0x25df, 0x25df, 0x2607, 0x2607, 0x2613, 0x2613, 0x2628, - 0x2659, 0x267e, 0x267e, 0x2696, 0x269f, 0x269f, 0x26b1, 0x26b1, + 0x2203, 0x2237, 0x2249, 0x2277, 0x22a1, 0x22c8, 0x22da, 0x22ec, + 0x22f8, 0x231d, 0x233e, 0x2356, 0x2374, 0x239b, 0x23bc, 0x23bc, + 0x23e7, 0x23e7, 0x23e7, 0x240f, 0x240f, 0x242d, 0x242d, 0x242d, + 0x2451, 0x246f, 0x24a3, 0x24b2, 0x24b2, 0x24cd, 0x24e2, 0x2500, + 0x2500, 0x2500, 0x250f, 0x2521, 0x2521, 0x2521, 0x2521, 0x253f, + 0x2551, 0x2575, 0x2581, 0x25af, 0x25c4, 0x25d3, 0x25eb, 0x25eb, + 0x2609, 0x261b, 0x2639, 0x2648, 0x2648, 0x2670, 0x2670, 0x267c, + 0x267c, 0x2691, 0x26c2, 0x26e7, 0x26e7, 0x26ff, 0x2708, 0x2708, // Entry 200 - 23F - 0x26b1, 0x26e8, 0x2701, 0x271d, 0x273f, 0x2757, 0x2772, 0x279a, - 0x27a9, 0x27b5, 0x27b5, 0x27c7, 0x27d3, 0x27eb, 0x2806, 0x282b, - 0x2843, 0x2843, 0x2843, 0x2858, 0x2864, 0x2876, 0x2885, 0x289a, - 0x28a3, 0x28b8, 0x28b8, 0x28d0, 0x28eb, 0x28eb, 0x2900, 0x2928, - 0x2941, 0x2941, 0x2953, 0x2953, 0x296e, 0x296e, 0x2986, 0x2998, - 0x29b3, 0x29d1, 0x2a18, 0x2a2d, 0x2a45, 0x2a60, 0x2a69, 0x2a72, - 0x2a72, 0x2a72, 0x2a72, 0x2a72, 0x2a81, 0x2a81, 0x2a93, 0x2aab, - 0x2ac3, 0x2ad5, 0x2ae7, 0x2b08, 0x2b17, 0x2b2c, 0x2b2c, 0x2b38, + 0x271a, 0x271a, 0x271a, 0x2751, 0x276a, 0x2786, 0x27a8, 0x27c0, + 0x27db, 0x2803, 0x2812, 0x281e, 0x281e, 0x2830, 0x283c, 0x2854, + 0x286f, 0x2894, 0x28ac, 0x28ac, 0x28ac, 0x28c1, 0x28cd, 0x28df, + 0x28ee, 0x2903, 0x290c, 0x2921, 0x2921, 0x2939, 0x2954, 0x2954, + 0x2969, 0x2991, 0x29aa, 0x29aa, 0x29bc, 0x29bc, 0x29d7, 0x29d7, + 0x29ef, 0x2a01, 0x2a1c, 0x2a3a, 0x2a81, 0x2a96, 0x2aae, 0x2ac9, + 0x2ae5, 0x2aee, 0x2aee, 0x2aee, 0x2aee, 0x2aee, 0x2afd, 0x2afd, + 0x2b0f, 0x2b27, 0x2b3f, 0x2b51, 0x2b63, 0x2b84, 0x2b93, 0x2ba8, // Entry 240 - 27F - 0x2b47, 0x2b5f, 0x2b7a, 0x2b8f, 0x2b8f, 0x2bad, 0x2bc2, 0x2bde, - 0x2bde, 0x2bf0, 0x2c31, 0x2c3d, 0x2c87, 0x2c93, 0x2cc2, 0x2cc2, - 0x2cf9, 0x2d25, 0x2d59, 0x2d84, 0x2dac, 0x2dd7, 0x2e21, 0x2e55, - 0x2e92, 0x2e92, 0x2eba, 0x2ed6, 0x2ef5, 0x2f0a, 0x2f3e, 0x2f6c, - 0x2f84, 0x2fb8, 0x2fe3, 0x3005, 0x3030, -} // Size: 1250 bytes - -const caLangStr string = "" + // Size: 4583 bytes - "àfarabkhazavèsticafrikaansàkanamhàricaragonèsàrabassamèsàvaraimaraazerba" + - "idjanèsbaixkirbielorúsbúlgarbislamabambarabengalítibetàbretóbosniàcatalà" + - "txetxèchamorrocorscreetxeceslau eclesiàstictxuvaixgal·lèsdanèsalemanydiv" + - "ehidzongkaewegrecanglèsesperantoespanyolestoniàbascpersafulfinèsfijiàfer" + - "oèsfrancèsfrisó occidentalirlandèsgaèlic escocèsgallecguaranígujaratiman" + - "xhaussahebreuhindihiri motucroathaitiàhongarèsarmenihererointerlinguaind" + - "onesiinterlingueigboyi sichuaninupiakidoislandèsitaliàinuktitutjaponèsja" + - "vanèsgeorgiàkongokikuiukuanyamakazakhgrenlandèskhmerkannadacoreàkanurica" + - "ixmirikurdkomicòrnickirguísllatíluxemburguèsgandalimburguèslingalalaosià" + - "lituàluba katangaletómalgaixmarshallèsmaorimacedonimalaiàlammongolmarath" + - "imalaimaltèsbirmànauruàndebele septentrionalnepalèsndonganeerlandèsnorue" + - "c nynorsknoruec bokmålndebele meridionalnavahonyanjaoccitàojibwaoromoori" + - "yaossetapanjabipalipolonèspaixtuportuguèsquítxuaretoromànicrundiromanèsr" + - "usruandèssànscritsardsindhisami septentrionalsangosingalèseslovaceslovès" + - "amoàshonasomalialbanèsserbiswazisotho meridionalsundanèssuecsuahilitàmil" + - "telugutadjiktailandèstigrinyaturcmansetswanatongalèsturctsongatàtartahit" + - "iàuigurucraïnèsurdúuzbekvendavietnamitavolapükvalówòlofxosajiddischiorub" + - "azhuangxinèszuluatjehacoliadangmeadiguéafrihiliaghemainuaccadialabamaale" + - "utaalbanès gegaltaic meridionalanglès anticangikaarameuaraucàaraonaarapa" + - "hoarauacàrab egipciparellengua de signes americanaasturiàawadhibalutxiba" + - "linèsbavarèsbasabamumghomalabejabembabenabafutbadagabalutxi occidentalbh" + - "ojpuribicolbinikomblackfootbrajbrahuibodoakooseburiatbuguisekibilinmedum" + - "bacaddocaribcayugaatsamcebuàchigatxibtxatxagataichuukmaripidgin chinookc" + - "hoctawchipewyancherokeexeiennekurd soranicoptetàtar de Crimeafrancès cri" + + 0x2ba8, 0x2bb4, 0x2bc3, 0x2bdb, 0x2bf9, 0x2c11, 0x2c11, 0x2c2f, + 0x2c44, 0x2c60, 0x2c60, 0x2c72, 0x2cb3, 0x2cbf, 0x2d09, 0x2d15, + 0x2d44, 0x2d44, 0x2d7b, 0x2da7, 0x2ddb, 0x2e06, 0x2e2e, 0x2e59, + 0x2ea3, 0x2ed7, 0x2f14, 0x2f14, 0x2f3c, 0x2f58, 0x2f77, 0x2f8c, + 0x2fc0, 0x2fee, 0x3006, 0x303a, 0x3065, 0x3087, 0x30b2, +} // Size: 1254 bytes + +const caLangStr string = "" + // Size: 4657 bytes + "àfarabkhazavèsticafrikaansàkanamhàricaragonèsàrabassamèsàvaraimaraàzerib" + + "aixkirbielorúsbúlgarbislamabambarabengalítibetàbretóbosniàcatalàtxetxèch" + + "amorrocorscreetxeceslau eclesiàstictxuvaixgal·lèsdanèsalemanydivehidzong" + + "kaewegrecanglèsesperantoespanyolestoniàbascpersafulfinèsfijiàferoèsfranc" + + "èsfrisó occidentalirlandèsgaèlic escocèsgallecguaranígujaratimanxhaussa" + + "hebreuhindihiri motucroatcrioll d’Haitíhongarèsarmenihererointerlinguain" + + "donesiinterlingueigboyi sichuaninupiakidoislandèsitaliàinuktitutjaponèsj" + + "avanèsgeorgiàkongokikuiukuanyamakazakhgrenlandèskhmerkannadacoreàkanuric" + + "aixmirikurdkomicòrnickirguísllatíluxemburguèsgandalimburguèslingalalaosi" + + "àlituàluba katangaletómalgaixmarshallèsmaorimacedonimalaialammongolmara" + + "thimalaimaltèsbirmànauruàndebele septentrionalnepalèsndonganeerlandèsnor" + + "uec nynorsknoruec bokmålndebele meridionalnavahonyanjaoccitàojibwaoromoo" + + "riyaossetapanjabipalipolonèspaixtuportuguèsquítxuaretoromànicrundiromanè" + + "srusruandèssànscritsardsindisami septentrionalsangosingalèseslovaceslovè" + + "samoàshonasomalialbanèsserbiswazisotho meridionalsondanèssuecsuahilitàmi" + + "ltelugutadjiktaitigrinyaturcmansetswanatongalèsturctsongatàtartahitiàuig" + + "urucraïnèsurdúuzbekvendavietnamitavolapükvalówòlofxosajiddischiorubazhua" + + "ngxinèszuluatjehacoliadangmeadiguéafrihiliaghemainuaccadialabamaaleutaal" + + "banès gegaltaic meridionalanglès anticangikaarameumapudunguaraonaarapaho" + + "arauacàrab egipciparellengua de signes americanaasturiàawadhibalutxibali" + + "nèsbavarèsbasabamumghomalabejabembabenabafutbadagabalutxi occidentalbhoj" + + "puribicolbinikomblackfootbrajbrahuibodoakooseburiatbuguisekibilinmedumba" + + "caddocaribcayugaatsamcebuanochigatxibtxatxagataichuukmaripidgin chinookc" + + "hoctawchipewyancherokeexeienekurd centralcoptetàtar de Crimeafrancès cri" + "oll de les Seychellescaixubidakotadarguàtaitadelawareslavidogribdinkazar" + "madogribaix sòrabdoualaneerlandès mitjàdiolajuladazagaembuefikemiliàegip" + - "ci anticekajukelamitaanglès mitjàewondoextremenyfangfilipífonfrancès mit" + - "jàfrancès anticfrisó septentrionalfrisó orientalfriülàgagagaúsxinès gang" + - "ayogbayagueezgilbertèsgilakialt alemany mitjàalt alemany anticconcani de" + - " Goagondigorontalogòticgrebogrec anticalemany suíswayúgusígwichinhaidaxi" + - "nès hakkahawaiàhindi de Fijihiligainonhititahmongalt sòrabxinès xianghup" + - "aibanibibioilocàingúixcrioll anglès de Jamaicalojbanngombamachamejudeope" + - "rsajudeoàrabkarakalpakcabilenckatxinjjukambakawikabardíkanembutyapmakond" + - "ecrioll capverdiàkenyangkorokaingàkhasikhotanèskoyra chiinikakokalenjink" + - "imbundukomi-permiacconcanikosraeàkpellekaratxaikriocareliàkurukhshambala" + - "bafiacologniankúmikkutenailadílangipanjabi occidentallambalesguiàlígurla" + - "kotallombardmongoloziluri septentrionalluba-lulualuisenyolundaluomizoluy" + - "iaxinès clàssiclazmadurèsmafamagahimaithilimakassarmandingamassaimabamor" + - "dovià moksamandarmendemerumauriciàgaèlic irlandès mitjàmakhuwa-mettometa" + - "’micmacminangkabaumanxúmanipurímohawkmorémari occidentalmundangllengüe" + - "s vàriescreekmirandèsmarwarimyenemordovià erzamazanderanixinès min del s" + - "udnapolitànamabaix alemanynewariniasniueàbissiongiemboonnogainòrdic anti" + - "cnovialn’Kosotho septentrionalnuernewari clàssicnyamwesinyankolenyoronze" + - "maosageturc otomàpangasipahlavipampangapapiamentopalauàpicardpidgin de N" + - "igèriaalemany pennsilvaniàpersa anticalemany palatífenicipiemontèspòntic" + - "ponapeàprussiàprovençal anticquitxérajasthanirapanuirarotongàromanyèsrom" + - "boromaníaromanèsrwosandaweiacutarameu samaritàsamburusasaksantalingambay" + - "sangusiciliàescocèssasserèskurd meridionalsenecasenaselkupsonghai orient" + - "alirlandès antictaixelhitxanàrab txadiàsidamosami meridionalsami lulesam" + - "i d’Inarisami skoltsoninkesogdiàsrananserersahosukumasusúsumericomoriàsi" + - "ríac clàssicsiríacsilesiàtemnetesoterenatetuntigretivtokelauèstsakhurkli" + - "ngoniàtlingittalixamazictongatok pisintarokotsimshiàtat meridionaltumbuk" + - "atuvaluàtasawaqtuviniàamazic del Marroc centraludmurtugaríticumbunduarre" + - "lvaivènetvepseflamenc occidentalvòticvunjowalserametowaraywashowarlpirix" + - "inès wucalmucmingreliàsogayaoyapeàyangbenyembacantonèszapotecasímbols Bl" + - "isszelandèszenagaamazic estàndard marroquízunisense contingut lingüístic" + - "zazaàrab estàndard modernalemany austríacalt alemany suísanglès australi" + - "àanglès canadencanglès britànicanglès americàespanyol hispanoamericàesp" + - "anyol europeuespanyol de Mèxicfrancès canadencfrancès suísbaix saxóflame" + - "ncportuguès del Brasilportuguès de Portugalmoldauserbocroatsuahili del C" + - "ongoxinès simplificatxinès tradicional" - -var caLangIdx = []uint16{ // 613 elements + "ci anticekajukelamitaanglès mitjàewondoextremenyfangfilipífonfrancès caj" + + "unfrancès mitjàfrancès anticfrisó septentrionalfrisó orientalfriülàgagag" + + "aúsxinès gangayogbayagueezgilbertèsgilakialt alemany mitjàalt alemany an" + + "ticconcani de Goagondigorontalogòticgrebogrec anticalemany suíswayúgusíg" + + "wich’inhaidaxinès hakkahawaiàhindi de Fijihíligaynonhititahmongalt sòrab" + + "xinès xianghupaibanibibioilocanoingúixcrioll anglès de Jamaicalojbanngom" + + "bamachamejudeopersajudeoàrabkarakalpakcabilenckatxinjjukambakawikabardík" + + "anembutyapmakondecrioll capverdiàkenyangkorokaingàkhasikhotanèskoyra chi" + + "inikakokalenjinkimbundukomi-permiacconcanikosraeàkpellekaratxai-balkarkr" + + "iocareliàkurukhshambalabafiakölschkúmikkutenaijudeocastellàlangipanjabi " + + "occidentallambalesguiàlígurlakotallombardmongocrioll francès de Louisian" + + "aloziluri septentrionalluba-lulualuisenyolundaluomizoluyiaxinès clàssicl" + + "azmadurèsmafamagahimaithilimakassarmandingamassaimabamordovià moksamanda" + + "rmendemerumauriciàgaèlic irlandès mitjàmakhuwa-mettometa’micmacminangkab" + + "aumanxúmanipurímohawkmorémari occidentalmundangllengües vàriescreekmiran" + + "dèsmarwarimyenemordovià erzamazanderanixinès min del sudnapolitànamabaix" + + " alemanynewariniasniueàbissiongiemboonnogainòrdic anticnovialn’Kosotho s" + + "eptentrionalnuernewari clàssicnyamwesinyankolenyoronzemaosageturc otomàp" + + "angasipahlavipampangapapiamentupalauàpicardpidgin de Nigèriaalemany penn" + + "silvaniàpersa anticalemany palatífenicipiemontèspònticponapeàprussiàprov" + + "ençal antick’iche’rajasthanirapanuirarotongàromanyèsromboromaníaromanèsr" + + "wosandaweiacutarameu samaritàsamburusasaksantalingambaysangusiciliàescoc" + + "èssasserèskurd meridionalsenecasenaselkupsonghai orientalirlandès antic" + + "taixelhitxanàrab txadiàsidamosami meridionalsami lulesami d’Inarisami sk" + + "oltsoninkesogdiàsrananserersahosukumasusúsumericomoriàsiríac clàssicsirí" + + "acsilesiàtemnetesoterenatètumtigretivtokelauèstsakhurklingoniàtlingittal" + + "ixamazictongatok pisintarokotsimshiàtat meridionaltumbukatuvaluàtasawaqt" + + "uviniàamazic del Marroc centraludmurtugaríticumbunduidioma desconegutvai" + + "vènetvepseflamenc occidentalvòticvunjowalserametowaraywashowarlpirixinès" + + " wucalmucmingreliàsogayaoyapeàyangbenyembacantonèszapotecasímbols Blissz" + + "elandèszenagaamazic estàndard marroquízunisense contingut lingüísticzaza" + + "àrab estàndard modernalemany austríacalt alemany suísanglès australiàan" + + "glès canadencanglès britànicanglès americàespanyol hispanoamericàespanyo" + + "l europeuespanyol de Mèxicfrancès canadencfrancès suísbaix saxóflamencpo" + + "rtuguès del Brasilportuguès de Portugalmoldauserbocroatsuahili del Congo" + + "xinès simplificatxinès tradicional" + +var caLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0005, 0x000b, 0x0013, 0x001c, 0x0021, 0x0029, 0x0032, - 0x0037, 0x003f, 0x0044, 0x004a, 0x0058, 0x005f, 0x0068, 0x006f, - 0x0076, 0x007d, 0x0085, 0x008c, 0x0092, 0x0099, 0x00a0, 0x00a7, - 0x00af, 0x00b3, 0x00b7, 0x00bb, 0x00cd, 0x00d4, 0x00dd, 0x00e3, - 0x00ea, 0x00f0, 0x00f7, 0x00fa, 0x00fe, 0x0105, 0x010e, 0x0116, - 0x011e, 0x0122, 0x0127, 0x012a, 0x0130, 0x0136, 0x013d, 0x0145, - 0x0156, 0x015f, 0x016f, 0x0175, 0x017d, 0x0185, 0x0189, 0x018f, - 0x0195, 0x019a, 0x01a3, 0x01a8, 0x01af, 0x01b8, 0x01be, 0x01c4, + 0x0037, 0x003f, 0x0044, 0x004a, 0x0050, 0x0057, 0x0060, 0x0067, + 0x006e, 0x0075, 0x007d, 0x0084, 0x008a, 0x0091, 0x0098, 0x009f, + 0x00a7, 0x00ab, 0x00af, 0x00b3, 0x00c5, 0x00cc, 0x00d5, 0x00db, + 0x00e2, 0x00e8, 0x00ef, 0x00f2, 0x00f6, 0x00fd, 0x0106, 0x010e, + 0x0116, 0x011a, 0x011f, 0x0122, 0x0128, 0x012e, 0x0135, 0x013d, + 0x014e, 0x0157, 0x0167, 0x016d, 0x0175, 0x017d, 0x0181, 0x0187, + 0x018d, 0x0192, 0x019b, 0x01a0, 0x01b1, 0x01ba, 0x01c0, 0x01c6, // Entry 40 - 7F - 0x01cf, 0x01d7, 0x01e2, 0x01e6, 0x01f0, 0x01f7, 0x01fa, 0x0203, - 0x020a, 0x0213, 0x021b, 0x0223, 0x022b, 0x0230, 0x0236, 0x023e, - 0x0244, 0x024f, 0x0254, 0x025b, 0x0261, 0x0267, 0x026f, 0x0273, - 0x0277, 0x027e, 0x0286, 0x028c, 0x0299, 0x029e, 0x02a9, 0x02b0, - 0x02b7, 0x02bd, 0x02c9, 0x02ce, 0x02d5, 0x02e0, 0x02e5, 0x02ed, - 0x02f7, 0x02fd, 0x0304, 0x0309, 0x0310, 0x0316, 0x031d, 0x0332, - 0x033a, 0x0340, 0x034b, 0x0359, 0x0367, 0x0379, 0x037f, 0x0385, - 0x038c, 0x0392, 0x0397, 0x039c, 0x03a2, 0x03a9, 0x03ad, 0x03b5, + 0x01d1, 0x01d9, 0x01e4, 0x01e8, 0x01f2, 0x01f9, 0x01fc, 0x0205, + 0x020c, 0x0215, 0x021d, 0x0225, 0x022d, 0x0232, 0x0238, 0x0240, + 0x0246, 0x0251, 0x0256, 0x025d, 0x0263, 0x0269, 0x0271, 0x0275, + 0x0279, 0x0280, 0x0288, 0x028e, 0x029b, 0x02a0, 0x02ab, 0x02b2, + 0x02b9, 0x02bf, 0x02cb, 0x02d0, 0x02d7, 0x02e2, 0x02e7, 0x02ef, + 0x02f8, 0x02fe, 0x0305, 0x030a, 0x0311, 0x0317, 0x031e, 0x0333, + 0x033b, 0x0341, 0x034c, 0x035a, 0x0368, 0x037a, 0x0380, 0x0386, + 0x038d, 0x0393, 0x0398, 0x039d, 0x03a3, 0x03aa, 0x03ae, 0x03b6, // Entry 80 - BF - 0x03bb, 0x03c5, 0x03cd, 0x03d9, 0x03de, 0x03e6, 0x03e9, 0x03f1, - 0x03fa, 0x03fe, 0x0404, 0x0416, 0x041b, 0x0424, 0x042b, 0x0432, + 0x03bc, 0x03c6, 0x03ce, 0x03da, 0x03df, 0x03e7, 0x03ea, 0x03f2, + 0x03fb, 0x03ff, 0x0404, 0x0416, 0x041b, 0x0424, 0x042b, 0x0432, 0x0438, 0x043d, 0x0443, 0x044b, 0x0450, 0x0455, 0x0465, 0x046e, - 0x0472, 0x0479, 0x047f, 0x0485, 0x048b, 0x0495, 0x049d, 0x04a4, - 0x04ac, 0x04b5, 0x04b9, 0x04bf, 0x04c5, 0x04cd, 0x04d2, 0x04dc, - 0x04e1, 0x04e6, 0x04eb, 0x04f5, 0x04fd, 0x0502, 0x0508, 0x050c, - 0x0514, 0x051a, 0x0520, 0x0526, 0x052a, 0x052f, 0x0534, 0x053b, - 0x0542, 0x0542, 0x054a, 0x054f, 0x0553, 0x0559, 0x0560, 0x0566, + 0x0472, 0x0479, 0x047f, 0x0485, 0x048b, 0x048e, 0x0496, 0x049d, + 0x04a5, 0x04ae, 0x04b2, 0x04b8, 0x04be, 0x04c6, 0x04cb, 0x04d5, + 0x04da, 0x04df, 0x04e4, 0x04ee, 0x04f6, 0x04fb, 0x0501, 0x0505, + 0x050d, 0x0513, 0x0519, 0x051f, 0x0523, 0x0528, 0x052d, 0x0534, + 0x053b, 0x053b, 0x0543, 0x0548, 0x054c, 0x0552, 0x0559, 0x055f, // Entry C0 - FF - 0x0572, 0x0583, 0x0590, 0x0596, 0x059c, 0x05a3, 0x05a9, 0x05b0, - 0x05b0, 0x05b0, 0x05b6, 0x05b6, 0x05c2, 0x05c6, 0x05e1, 0x05e9, - 0x05e9, 0x05ef, 0x05f6, 0x05fe, 0x0606, 0x060a, 0x060f, 0x060f, - 0x0616, 0x061a, 0x061f, 0x061f, 0x0623, 0x0628, 0x062e, 0x0640, - 0x0648, 0x064d, 0x0651, 0x0651, 0x0654, 0x065d, 0x065d, 0x065d, - 0x0661, 0x0667, 0x066b, 0x0671, 0x0677, 0x067c, 0x0680, 0x0685, - 0x068c, 0x0691, 0x0696, 0x069c, 0x06a1, 0x06a7, 0x06ac, 0x06b3, - 0x06bb, 0x06c0, 0x06c4, 0x06d2, 0x06d9, 0x06e2, 0x06ea, 0x06f1, + 0x056b, 0x057c, 0x0589, 0x058f, 0x0595, 0x059e, 0x05a4, 0x05ab, + 0x05ab, 0x05ab, 0x05b1, 0x05b1, 0x05bd, 0x05c1, 0x05dc, 0x05e4, + 0x05e4, 0x05ea, 0x05f1, 0x05f9, 0x0601, 0x0605, 0x060a, 0x060a, + 0x0611, 0x0615, 0x061a, 0x061a, 0x061e, 0x0623, 0x0629, 0x063b, + 0x0643, 0x0648, 0x064c, 0x064c, 0x064f, 0x0658, 0x0658, 0x0658, + 0x065c, 0x0662, 0x0666, 0x066c, 0x0672, 0x0677, 0x067b, 0x0680, + 0x0687, 0x068c, 0x0691, 0x0697, 0x069c, 0x069c, 0x06a3, 0x06a8, + 0x06af, 0x06b7, 0x06bc, 0x06c0, 0x06ce, 0x06d5, 0x06de, 0x06e6, // Entry 100 - 13F - 0x06fc, 0x0701, 0x0701, 0x0711, 0x0732, 0x0739, 0x073f, 0x0746, - 0x074b, 0x0753, 0x0758, 0x075e, 0x0763, 0x0768, 0x076d, 0x0778, - 0x0778, 0x077e, 0x0790, 0x0795, 0x0799, 0x079f, 0x07a3, 0x07a7, - 0x07ae, 0x07ba, 0x07c0, 0x07c7, 0x07d5, 0x07d5, 0x07db, 0x07e4, - 0x07e8, 0x07ef, 0x07ef, 0x07f2, 0x07f2, 0x0801, 0x080f, 0x080f, - 0x0823, 0x0832, 0x083a, 0x083c, 0x0843, 0x084d, 0x0851, 0x0856, - 0x0856, 0x085b, 0x0865, 0x086b, 0x087d, 0x088e, 0x089c, 0x08a1, - 0x08aa, 0x08b0, 0x08b5, 0x08bf, 0x08cc, 0x08d1, 0x08d1, 0x08d6, + 0x06ec, 0x06f8, 0x06fd, 0x06fd, 0x070d, 0x072e, 0x0735, 0x073b, + 0x0742, 0x0747, 0x074f, 0x0754, 0x075a, 0x075f, 0x0764, 0x0769, + 0x0774, 0x0774, 0x077a, 0x078c, 0x0791, 0x0795, 0x079b, 0x079f, + 0x07a3, 0x07aa, 0x07b6, 0x07bc, 0x07c3, 0x07d1, 0x07d1, 0x07d7, + 0x07e0, 0x07e4, 0x07eb, 0x07eb, 0x07ee, 0x07fc, 0x080b, 0x0819, + 0x0819, 0x082d, 0x083c, 0x0844, 0x0846, 0x084d, 0x0857, 0x085b, + 0x0860, 0x0860, 0x0865, 0x086f, 0x0875, 0x0887, 0x0898, 0x08a6, + 0x08ab, 0x08b4, 0x08ba, 0x08bf, 0x08c9, 0x08d6, 0x08db, 0x08db, // Entry 140 - 17F - 0x08dd, 0x08e2, 0x08ee, 0x08f5, 0x0902, 0x090c, 0x0912, 0x0917, - 0x0921, 0x092d, 0x0931, 0x0935, 0x093b, 0x0941, 0x0948, 0x0948, - 0x0961, 0x0967, 0x096d, 0x0974, 0x097e, 0x0988, 0x0988, 0x0992, - 0x099a, 0x09a0, 0x09a3, 0x09a8, 0x09ac, 0x09b4, 0x09bb, 0x09bf, - 0x09c6, 0x09d7, 0x09de, 0x09e2, 0x09e9, 0x09ee, 0x09f7, 0x0a03, - 0x0a03, 0x0a03, 0x0a07, 0x0a0f, 0x0a17, 0x0a23, 0x0a2a, 0x0a32, - 0x0a38, 0x0a40, 0x0a44, 0x0a44, 0x0a4c, 0x0a52, 0x0a5a, 0x0a5f, - 0x0a68, 0x0a6e, 0x0a75, 0x0a7a, 0x0a7f, 0x0a91, 0x0a96, 0x0a9e, + 0x08e0, 0x08ea, 0x08ef, 0x08fb, 0x0902, 0x090f, 0x091a, 0x0920, + 0x0925, 0x092f, 0x093b, 0x093f, 0x0943, 0x0949, 0x0950, 0x0957, + 0x0957, 0x0970, 0x0976, 0x097c, 0x0983, 0x098d, 0x0997, 0x0997, + 0x09a1, 0x09a9, 0x09af, 0x09b2, 0x09b7, 0x09bb, 0x09c3, 0x09ca, + 0x09ce, 0x09d5, 0x09e6, 0x09ed, 0x09f1, 0x09f8, 0x09fd, 0x0a06, + 0x0a12, 0x0a12, 0x0a12, 0x0a16, 0x0a1e, 0x0a26, 0x0a32, 0x0a39, + 0x0a41, 0x0a47, 0x0a56, 0x0a5a, 0x0a5a, 0x0a62, 0x0a68, 0x0a70, + 0x0a75, 0x0a7c, 0x0a82, 0x0a89, 0x0a97, 0x0a9c, 0x0aae, 0x0ab3, // Entry 180 - 1BF - 0x0a9e, 0x0aa4, 0x0aa4, 0x0aaa, 0x0ab2, 0x0ab7, 0x0abb, 0x0acd, - 0x0acd, 0x0ad7, 0x0adf, 0x0ae4, 0x0ae7, 0x0aeb, 0x0af0, 0x0aff, - 0x0b02, 0x0b0a, 0x0b0e, 0x0b14, 0x0b1c, 0x0b24, 0x0b2c, 0x0b32, - 0x0b36, 0x0b45, 0x0b4b, 0x0b50, 0x0b54, 0x0b5d, 0x0b75, 0x0b82, - 0x0b89, 0x0b8f, 0x0b9a, 0x0ba0, 0x0ba9, 0x0baf, 0x0bb4, 0x0bc3, - 0x0bca, 0x0bdb, 0x0be0, 0x0be9, 0x0bf0, 0x0bf0, 0x0bf5, 0x0c03, - 0x0c0e, 0x0c20, 0x0c29, 0x0c2d, 0x0c39, 0x0c3f, 0x0c43, 0x0c49, - 0x0c49, 0x0c4f, 0x0c58, 0x0c5d, 0x0c6a, 0x0c70, 0x0c76, 0x0c89, + 0x0abb, 0x0abb, 0x0ac1, 0x0ac1, 0x0ac7, 0x0acf, 0x0ad4, 0x0af0, + 0x0af4, 0x0b06, 0x0b06, 0x0b10, 0x0b18, 0x0b1d, 0x0b20, 0x0b24, + 0x0b29, 0x0b38, 0x0b3b, 0x0b43, 0x0b47, 0x0b4d, 0x0b55, 0x0b5d, + 0x0b65, 0x0b6b, 0x0b6f, 0x0b7e, 0x0b84, 0x0b89, 0x0b8d, 0x0b96, + 0x0bae, 0x0bbb, 0x0bc2, 0x0bc8, 0x0bd3, 0x0bd9, 0x0be2, 0x0be8, + 0x0bed, 0x0bfc, 0x0c03, 0x0c14, 0x0c19, 0x0c22, 0x0c29, 0x0c29, + 0x0c2e, 0x0c3c, 0x0c47, 0x0c59, 0x0c62, 0x0c66, 0x0c72, 0x0c78, + 0x0c7c, 0x0c82, 0x0c82, 0x0c88, 0x0c91, 0x0c96, 0x0ca3, 0x0ca9, // Entry 1C0 - 1FF - 0x0c8d, 0x0c9c, 0x0ca4, 0x0cac, 0x0cb1, 0x0cb6, 0x0cbb, 0x0cc6, - 0x0ccd, 0x0cd4, 0x0cdc, 0x0ce6, 0x0ced, 0x0cf3, 0x0d05, 0x0d1a, - 0x0d1a, 0x0d25, 0x0d34, 0x0d3a, 0x0d44, 0x0d4b, 0x0d53, 0x0d5b, - 0x0d6b, 0x0d72, 0x0d72, 0x0d7c, 0x0d83, 0x0d8d, 0x0d96, 0x0d96, - 0x0d9b, 0x0da2, 0x0da2, 0x0da2, 0x0da2, 0x0dab, 0x0dae, 0x0db5, - 0x0dba, 0x0dca, 0x0dd1, 0x0dd6, 0x0ddd, 0x0ddd, 0x0de4, 0x0de9, - 0x0df1, 0x0df9, 0x0e02, 0x0e11, 0x0e17, 0x0e1b, 0x0e1b, 0x0e21, - 0x0e31, 0x0e40, 0x0e40, 0x0e49, 0x0e4c, 0x0e59, 0x0e5f, 0x0e5f, + 0x0caf, 0x0cc2, 0x0cc6, 0x0cd5, 0x0cdd, 0x0ce5, 0x0cea, 0x0cef, + 0x0cf4, 0x0cff, 0x0d06, 0x0d0d, 0x0d15, 0x0d1f, 0x0d26, 0x0d2c, + 0x0d3e, 0x0d53, 0x0d53, 0x0d5e, 0x0d6d, 0x0d73, 0x0d7d, 0x0d84, + 0x0d8c, 0x0d94, 0x0da4, 0x0daf, 0x0daf, 0x0db9, 0x0dc0, 0x0dca, + 0x0dd3, 0x0dd3, 0x0dd8, 0x0ddf, 0x0ddf, 0x0ddf, 0x0ddf, 0x0de8, + 0x0deb, 0x0df2, 0x0df7, 0x0e07, 0x0e0e, 0x0e13, 0x0e1a, 0x0e1a, + 0x0e21, 0x0e26, 0x0e2e, 0x0e36, 0x0e3f, 0x0e4e, 0x0e54, 0x0e58, + 0x0e58, 0x0e5e, 0x0e6e, 0x0e7d, 0x0e7d, 0x0e86, 0x0e89, 0x0e96, // Entry 200 - 23F - 0x0e5f, 0x0e6e, 0x0e77, 0x0e85, 0x0e8f, 0x0e96, 0x0e9d, 0x0ea3, - 0x0ea8, 0x0eac, 0x0eac, 0x0eb2, 0x0eb7, 0x0ebd, 0x0ec5, 0x0ed5, - 0x0edc, 0x0ee4, 0x0ee4, 0x0ee9, 0x0eed, 0x0ef3, 0x0ef8, 0x0efd, - 0x0f00, 0x0f0a, 0x0f11, 0x0f1b, 0x0f22, 0x0f27, 0x0f2d, 0x0f32, - 0x0f3b, 0x0f3b, 0x0f41, 0x0f41, 0x0f4a, 0x0f58, 0x0f5f, 0x0f67, - 0x0f6e, 0x0f76, 0x0f8f, 0x0f95, 0x0f9e, 0x0fa5, 0x0faa, 0x0fad, - 0x0fb3, 0x0fb8, 0x0fca, 0x0fca, 0x0fd0, 0x0fd0, 0x0fd5, 0x0fdb, - 0x0fe0, 0x0fe5, 0x0fea, 0x0ff2, 0x0ffb, 0x1001, 0x100b, 0x100f, + 0x0e9c, 0x0e9c, 0x0e9c, 0x0eab, 0x0eb4, 0x0ec2, 0x0ecc, 0x0ed3, + 0x0eda, 0x0ee0, 0x0ee5, 0x0ee9, 0x0ee9, 0x0eef, 0x0ef4, 0x0efa, + 0x0f02, 0x0f12, 0x0f19, 0x0f21, 0x0f21, 0x0f26, 0x0f2a, 0x0f30, + 0x0f36, 0x0f3b, 0x0f3e, 0x0f48, 0x0f4f, 0x0f59, 0x0f60, 0x0f65, + 0x0f6b, 0x0f70, 0x0f79, 0x0f79, 0x0f7f, 0x0f7f, 0x0f88, 0x0f96, + 0x0f9d, 0x0fa5, 0x0fac, 0x0fb4, 0x0fcd, 0x0fd3, 0x0fdc, 0x0fe3, + 0x0ff4, 0x0ff7, 0x0ffd, 0x1002, 0x1014, 0x1014, 0x101a, 0x101a, + 0x101f, 0x1025, 0x102a, 0x102f, 0x1034, 0x103c, 0x1045, 0x104b, // Entry 240 - 27F - 0x1012, 0x1018, 0x101f, 0x1024, 0x1024, 0x102d, 0x1035, 0x1043, - 0x104c, 0x1052, 0x106d, 0x1071, 0x108d, 0x1091, 0x10a8, 0x10a8, - 0x10b9, 0x10ca, 0x10dc, 0x10ec, 0x10fd, 0x110d, 0x1125, 0x1135, - 0x1147, 0x1147, 0x1158, 0x1166, 0x1170, 0x1177, 0x118c, 0x11a2, - 0x11a8, 0x11b2, 0x11c3, 0x11d5, 0x11e7, -} // Size: 1250 bytes - -const csLangStr string = "" + // Size: 7397 bytes + 0x1055, 0x1059, 0x105c, 0x1062, 0x1069, 0x106e, 0x106e, 0x1077, + 0x107f, 0x108d, 0x1096, 0x109c, 0x10b7, 0x10bb, 0x10d7, 0x10db, + 0x10f2, 0x10f2, 0x1103, 0x1114, 0x1126, 0x1136, 0x1147, 0x1157, + 0x116f, 0x117f, 0x1191, 0x1191, 0x11a2, 0x11b0, 0x11ba, 0x11c1, + 0x11d6, 0x11ec, 0x11f2, 0x11fc, 0x120d, 0x121f, 0x1231, +} // Size: 1254 bytes + +const csLangStr string = "" + // Size: 7417 bytes "afarštinaabcházštinaavestánštinaafrikánštinaakanštinaamharštinaaragonšti" + "naarabštinaásámštinaavarštinaajmarštinaázerbájdžánštinabaškirštinaběloru" + "štinabulharštinabislamštinabambarštinabengálštinatibetštinabretonštinab" + @@ -16536,73 +17794,73 @@ const csLangStr string = "" + // Size: 7397 bytes "štinawolofštinaxhoštinajidišjorubštinačuangštinačínštinazuluštinaacehšt" + "inaakolštinaadangmeadygejštinaarabština (tuniská)afrihiliaghemainštinaak" + "kadštinaalabamštinaaleutštinaalbánština (Gheg)altajština (jižní)staroang" + - "ličtinaangikaaramejštinamapudungunaraonštinaarapažštinaarabština (alžírs" + - "ká)arawacké jazykyarabština (marocká)arabština (egyptská)asuznaková řeč " + - "(americká)asturštinakotavaawadhštinabalúčštinabalijštinabavorštinabasaba" + - "munbatak tobaghomalabedžabembštinabatavštinabenabafutbadagštinabalúčštin" + - "a (západní)bhojpurštinabikolštinabinibandžarštinakomsiksikabišnuprijskom" + - "anipurštinabachtijárštinabradžštinabrahujštinabodoštinaakooseburjatština" + - "bugištinabulublinštinamedumbacaddokaribštinakajugštinaatsamcebuánštinaki" + - "gačibčačagatajštinačukštinamarijštinačinuk pidžinčoktštinačipevajštinače" + - "rokézštinačejenštinakurdština (sorání)koptštinakapiznonštinaturečtina (k" + - "rymská)kreolština (seychelská)kašubštinadakotštinadargštinataitadelawarš" + - "tinaslejvština (athabaský jazyk)dogribdinkštinazarmštinadogarštinadolnol" + - "užická srbštinakadazandusunštinadualštinaholandština (středověká)jola-fo" + - "nyidjuladazagaembuefikštinaemilijštinaegyptština staráekajukelamitštinaa" + - "ngličtina (středověká)jupikština (středoaljašská)ewondoextremadurštinafa" + - "ngfilipínštinafinština (tornedalská)fonštinafrancouzština (kajunská)fran" + - "couzština (středověká)francouzština (stará)franko-provensálštinafríština" + - " (severní)fríština (východní)furlanštinagaštinagagauzštinačínština (dial" + - "ekty Gan)gayogbajadaríjština (zoroastrijská)geezkiribatštinagilačtinahor" + - "noněmčina (středověká)hornoněmčina (stará)konkánština (Goa)góndštinagoro" + - "ntalogótštinagrebostarořečtinaněmčina (Švýcarsko)wayúuštinafrafragusiigw" + - "ichʼinhaidštinačínština (dialekty Hakka)havajštinahindština (Fidži)hilig" + - "ajnonštinachetitštinahmongštinahornolužická srbštinačínština (dialekty X" + - "iang)hupaibanštinaibibioilokánštinainguštinaingrijštinajamajská kreolšti" + - "nalojbanngombamašamejudeoperštinajudeoarabštinajutštinakarakalpačtinakab" + - "ylštinakačijštinajjukambštinakawikabardinštinakanembutyapmakondekapverdš" + - "tinakenyangkorokaingangkhásíchotánštinakoyra chiinichovarštinazazakština" + - "kakokalendžinkimbundštinakomi-permjačtinakonkánštinakosrajštinakpellekar" + - "ačajevo-balkarštinakriokinaraj-akarelštinakuruchštinašambalabafiakolínšt" + - "inakumyčtinakutenajštinaladinštinalangilahndštinalambštinalezginštinalin" + - "gua franca novaligurštinalivonštinalakotštinalombardštinamongštinalozšti" + - "nalúrština (severní)latgalštinaluba-luluaštinaluiseňolundštinaluoštinami" + - "zoštinaluhjačínština (klasická)lazštinamadurštinamafamagahijštinamaithil" + - "ištinamakasarštinamandingštinamasajštinamabamokšanštinamandarmendemeruma" + - "uricijská kreolštinairština (středověká)makhuwa-meettometa’micmacminangk" + - "abaumandžuštinamanipurštinamohawkštinamosimarijština (západní)mundangslo" + - "žené (víceřádkové) jazykykríkštinamirandštinamárvárštinamentavajštinamy" + - "eneerzjanštinamázandaránštinačínština (dialekty Minnan)neapolštinanamašt" + - "inadolnoněmčinanévárštinaniasniueštinaao (jazyky Nágálandu)kwasiongiembo" + - "onnogajštinanorština historickánovialn’kosotština (severní)nuerštinanewa" + - "rština (klasická)ňamwežštinaňankolštinaňorštinanzimaosageturečtina (osma" + - "nská)pangasinanštinapahlavštinapapangaupapiamentopalauštinapicardštinani" + - "gerijský pidžinněmčina (pensylvánská)němčina (plautdietsch)staroperština" + - "falčtinaféničtinapiemonštinapontštinapohnpeištinapruštinaprovensálštinak" + - "ičékečuánština (chimborazo)rádžastánštinarapanujštinararotongánštinaroma" + - "ňolštinarífštinaromboromštinarotumanštinarusínštinarovianštinaarumunšti" + - "narwasandawštinajakutštinasamarštinasamburusasakštinasantálštinasaurášte" + - "rštinangambaysangoštinasicilštinaskotštinasassarštinakurdština (jižní)se" + - "necasenaserištinaselkupštinakoyraboro senniirština (stará)žemaitštinataš" + - "elhitšanštinaarabština (čadská)sidamoněmčina (slezská)selajarštinasámšti" + - "na (jižní)sámština (lulejská)sámština (inarijská)sámština (skoltská)soni" + - "kštinasogdštinasranan tongosererštinasahofríština (saterlandská)sukumasu" + - "susumerštinakomorštinasyrština (klasická)syrštinaslezštinatuluštinatemne" + - "tesoterenotetumštinatigrejštinativštinatokelauštinacachurštinaklingonšti" + - "natlingittalyštinatamašektonžština (nyasa)tok pisinturojštinatarokotsako" + - "nštinatsimšijské jazykytatštinatumbukštinatuvalštinatasawaqtuvinštinatam" + - "azight (střední Maroko)udmurtštinaugaritštinaumbundukořenvaibenátštinave" + - "pštinavlámština (západní)němčina (mohansko-franské dialekty)votštinavõru" + - "štinavunjoněmčina (walser)wolajtštinawarajštinawaštinawarlpiričínština " + - "(dialekty Wu)kalmyčtinamingrelštinasogštinajaoštinajapštinajangbenštinay" + - "embanheengatukantonštinazapotéčtinabliss systémzélandštinazenagatamazigh" + - "t (standardní marocký)zunijštinažádný jazykový obsahzazaarabština (moder" + - "ní standardní)němčina standardní (Švýcarsko)angličtina (Velká Británie)a" + - "ngličtina (USA)španělština (Evropa)dolnosaštinavlámštinaportugalština (E" + - "vropa)moldavštinasrbochorvatštinasvahilština (Kongo)čínština (zjednoduše" + - "ná)" - -var csLangIdx = []uint16{ // 612 elements + "ličtinaangikaaramejštinamapudungunštinaaraonštinaarapažštinaarabština (a" + + "lžírská)arawacké jazykyarabština (marocká)arabština (egyptská)asuznaková" + + " řeč (americká)asturštinakotavaawadhštinabalúčštinabalijštinabavorštinab" + + "asabamunbatak tobaghomalabedžabembštinabatavštinabenabafutbadagštinabalú" + + "čština (západní)bhódžpurštinabikolštinabinibandžarštinakomsiksikabišnup" + + "rijskomanipurštinabachtijárštinabradžštinabrahujštinabodoštinaakooseburj" + + "atštinabugištinabulublinštinamedumbacaddokaribštinakajugštinaatsamcebuán" + + "štinakigačibčačagatajštinačukštinamarijštinačinuk pidžinčoktštinačipeva" + + "jštinačerokézštinačejenštinakurdština (sorání)koptštinakapiznonštinature" + + "čtina (krymská)kreolština (seychelská)kašubštinadakotštinadargštinatait" + + "adelawarštinaslejvština (athabaský jazyk)dogribdinkštinazarmštinadogaršt" + + "inadolnolužická srbštinakadazandusunštinadualštinaholandština (středověk" + + "á)jola-fonyidjuladazagaembuefikštinaemilijštinaegyptština staráekajukel" + + "amitštinaangličtina (středověká)jupikština (středoaljašská)ewondoextrema" + + "durštinafangfilipínštinafinština (tornedalská)fonštinafrancouzština (caj" + + "unská)francouzština (středověká)francouzština (stará)franko-provensálšti" + + "nafríština (severní)fríština (východní)furlanštinagaštinagagauzštinačínš" + + "tina (dialekty Gan)gayogbajadaríjština (zoroastrijská)geezkiribatštinagi" + + "lačtinahornoněmčina (středověká)hornoněmčina (stará)konkánština (Goa)gón" + + "dštinagorontalogótštinagrebostarořečtinaněmčina (Švýcarsko)wayúuštinafra" + + "fragusiigwichʼinhaidštinačínština (dialekty Hakka)havajštinahindština (F" + + "idži)hiligajnonštinachetitštinahmongštinahornolužická srbštinačínština (" + + "dialekty Xiang)hupaibanštinaibibioilokánštinainguštinaingrijštinajamajsk" + + "á kreolštinalojbanngombamašamejudeoperštinajudeoarabštinajutštinakaraka" + + "lpačtinakabylštinakačijštinajjukambštinakawikabardinštinakanembutyapmako" + + "ndekapverdštinakenyangkorokaingangkhásíchotánštinakoyra chiinichovarštin" + + "azazakštinakakokalendžinkimbundštinakomi-permjačtinakonkánštinakosrajšti" + + "nakpellekaračajevo-balkarštinakriokinaraj-akarelštinakuruchštinašambalab" + + "afiakolínštinakumyčtinakutenajštinaladinštinalangilahndštinalambštinalez" + + "ginštinalingua franca novaligurštinalivonštinalakotštinalombardštinamong" + + "štinakreolština (Louisiana)lozštinalúrština (severní)latgalštinaluba-lu" + + "luaštinaluiseňolundštinaluoštinamizoštinaluhjačínština (klasická)lazštin" + + "amadurštinamafamagahijštinamaithilištinamakasarštinamandingštinamasajšti" + + "namabamokšanštinamandarmendemerumauricijská kreolštinairština (středověk" + + "á)makhuwa-meettometa’micmacminangkabaumandžuštinamanipurštinamohawkštin" + + "amosimarijština (západní)mundangvíce jazykůkríkštinamirandštinamárváršti" + + "namentavajštinamyeneerzjanštinamázandaránštinačínština (dialekty Minnan)" + + "neapolštinanamaštinadolnoněmčinanévárštinaniasniueštinaao (jazyky Nágála" + + "ndu)kwasiongiemboonnogajštinanorština historickánovialn’kosotština (seve" + + "rní)nuerštinanewarština (klasická)ňamwežštinaňankolštinaňorštinanzimaosa" + + "geturečtina (osmanská)pangasinanštinapahlavštinapapangaupapiamentopalauš" + + "tinapicardštinanigerijský pidžinněmčina (pensylvánská)němčina (plautdiet" + + "sch)staroperštinafalčtinaféničtinapiemonštinapontštinapohnpeištinaprušti" + + "naprovensálštinakičékečuánština (chimborazo)rádžastánštinarapanujštinara" + + "rotongánštinaromaňolštinarífštinaromboromštinarotumanštinarusínštinarovi" + + "anštinaarumunštinarwasandawštinajakutštinasamarštinasamburusasakštinasan" + + "tálštinasaurášterštinangambaysangoštinasicilštinaskotštinasassarštinakur" + + "dština (jižní)senecasenaserištinaselkupštinakoyraboro senniirština (star" + + "á)žemaitštinatašelhitšanštinaarabština (čadská)sidamoněmčina (slezská)s" + + "elajarštinasámština (jižní)sámština (lulejská)sámština (inarijská)sámšti" + + "na (skoltská)sonikštinasogdštinasranan tongosererštinasahofríština (sate" + + "rlandská)sukumasususumerštinakomorštinasyrština (klasická)syrštinaslezšt" + + "inatuluštinatemnetesoterenotetumštinatigrejštinativštinatokelauštinacach" + + "urštinaklingonštinatlingittalyštinatamašektonžština (nyasa)tok pisinturo" + + "jštinatarokotsakonštinatsimšijské jazykytatštinatumbukštinatuvalštinatas" + + "awaqtuvinštinatamazight (střední Maroko)udmurtštinaugaritštinaumbundunez" + + "námý jazykvaibenátštinavepštinavlámština (západní)němčina (mohansko-fran" + + "ské dialekty)votštinavõruštinavunjoněmčina (walser)wolajtštinawarajština" + + "waštinawarlpiričínština (dialekty Wu)kalmyčtinamingrelštinasogštinajaošt" + + "inajapštinajangbenštinayembanheengatukantonštinazapotéčtinabliss systémz" + + "élandštinazenagatamazight (standardní marocký)zunijštinažádný jazykový " + + "obsahzazaarabština (moderní standardní)němčina standardní (Švýcarsko)ang" + + "ličtina (Velká Británie)angličtina (USA)španělština (Evropa)dolnosaština" + + "vlámštinaportugalština (Evropa)moldavštinasrbochorvatštinasvahilština (K" + + "ongo)čínština (zjednodušená)" + +var csLangIdx = []uint16{ // 614 elements // Entry 0 - 3F 0x0000, 0x000a, 0x0017, 0x0025, 0x0033, 0x003d, 0x0048, 0x0054, 0x005e, 0x006a, 0x0074, 0x007f, 0x0094, 0x00a1, 0x00ae, 0x00ba, @@ -16631,68 +17889,68 @@ var csLangIdx = []uint16{ // 612 elements 0x0815, 0x0820, 0x082c, 0x0837, 0x0841, 0x084b, 0x0855, 0x085c, 0x0868, 0x087d, 0x0885, 0x088a, 0x0893, 0x089e, 0x08aa, 0x08b5, // Entry C0 - FF - 0x08c8, 0x08dd, 0x08ed, 0x08f3, 0x08ff, 0x0909, 0x0914, 0x0921, - 0x0939, 0x0939, 0x0949, 0x095e, 0x0974, 0x0977, 0x0991, 0x099c, - 0x09a2, 0x09ad, 0x09ba, 0x09c5, 0x09d0, 0x09d4, 0x09d9, 0x09e3, - 0x09ea, 0x09f0, 0x09fa, 0x0a05, 0x0a09, 0x0a0e, 0x0a19, 0x0a32, - 0x0a3f, 0x0a4a, 0x0a4e, 0x0a5c, 0x0a5f, 0x0a66, 0x0a80, 0x0a90, - 0x0a9c, 0x0aa8, 0x0ab2, 0x0ab8, 0x0ac4, 0x0ace, 0x0ad2, 0x0adc, - 0x0ae3, 0x0ae8, 0x0af3, 0x0afe, 0x0b03, 0x0b10, 0x0b14, 0x0b1b, - 0x0b29, 0x0b33, 0x0b3e, 0x0b4c, 0x0b57, 0x0b65, 0x0b74, 0x0b80, + 0x08c8, 0x08dd, 0x08ed, 0x08f3, 0x08ff, 0x090f, 0x091a, 0x0927, + 0x093f, 0x093f, 0x094f, 0x0964, 0x097a, 0x097d, 0x0997, 0x09a2, + 0x09a8, 0x09b3, 0x09c0, 0x09cb, 0x09d6, 0x09da, 0x09df, 0x09e9, + 0x09f0, 0x09f6, 0x0a00, 0x0a0b, 0x0a0f, 0x0a14, 0x0a1f, 0x0a38, + 0x0a48, 0x0a53, 0x0a57, 0x0a65, 0x0a68, 0x0a6f, 0x0a89, 0x0a99, + 0x0aa5, 0x0ab1, 0x0abb, 0x0ac1, 0x0acd, 0x0ad7, 0x0adb, 0x0ae5, + 0x0aec, 0x0af1, 0x0afc, 0x0b07, 0x0b0c, 0x0b0c, 0x0b19, 0x0b1d, + 0x0b24, 0x0b32, 0x0b3c, 0x0b47, 0x0b55, 0x0b60, 0x0b6e, 0x0b7d, // Entry 100 - 13F - 0x0b95, 0x0b9f, 0x0bad, 0x0bc2, 0x0bdb, 0x0be7, 0x0bf2, 0x0bfc, - 0x0c01, 0x0c0e, 0x0c2c, 0x0c32, 0x0c3c, 0x0c46, 0x0c51, 0x0c69, - 0x0c7b, 0x0c85, 0x0ca1, 0x0cab, 0x0cb0, 0x0cb6, 0x0cba, 0x0cc4, - 0x0cd0, 0x0ce2, 0x0ce8, 0x0cf4, 0x0d0f, 0x0d2e, 0x0d34, 0x0d44, - 0x0d48, 0x0d56, 0x0d6e, 0x0d77, 0x0d91, 0x0daf, 0x0dc6, 0x0ddd, - 0x0df2, 0x0e09, 0x0e15, 0x0e1d, 0x0e29, 0x0e43, 0x0e47, 0x0e4c, - 0x0e69, 0x0e6d, 0x0e7a, 0x0e84, 0x0ea2, 0x0eb9, 0x0ecc, 0x0ed7, - 0x0ee0, 0x0eea, 0x0eef, 0x0efd, 0x0f14, 0x0f20, 0x0f26, 0x0f2b, + 0x0b89, 0x0b9e, 0x0ba8, 0x0bb6, 0x0bcb, 0x0be4, 0x0bf0, 0x0bfb, + 0x0c05, 0x0c0a, 0x0c17, 0x0c35, 0x0c3b, 0x0c45, 0x0c4f, 0x0c5a, + 0x0c72, 0x0c84, 0x0c8e, 0x0caa, 0x0cb4, 0x0cb9, 0x0cbf, 0x0cc3, + 0x0ccd, 0x0cd9, 0x0ceb, 0x0cf1, 0x0cfd, 0x0d18, 0x0d37, 0x0d3d, + 0x0d4d, 0x0d51, 0x0d5f, 0x0d77, 0x0d80, 0x0d9a, 0x0db8, 0x0dcf, + 0x0de6, 0x0dfb, 0x0e12, 0x0e1e, 0x0e26, 0x0e32, 0x0e4c, 0x0e50, + 0x0e55, 0x0e72, 0x0e76, 0x0e83, 0x0e8d, 0x0eab, 0x0ec2, 0x0ed5, + 0x0ee0, 0x0ee9, 0x0ef3, 0x0ef8, 0x0f06, 0x0f1d, 0x0f29, 0x0f2f, // Entry 140 - 17F - 0x0f34, 0x0f3e, 0x0f5a, 0x0f65, 0x0f78, 0x0f88, 0x0f94, 0x0f9f, - 0x0fb7, 0x0fd3, 0x0fd7, 0x0fe1, 0x0fe7, 0x0ff4, 0x0ffe, 0x100a, - 0x101f, 0x1025, 0x102b, 0x1032, 0x1040, 0x104f, 0x1058, 0x1067, - 0x1072, 0x107e, 0x1081, 0x108b, 0x108f, 0x109d, 0x10a4, 0x10a8, - 0x10af, 0x10bc, 0x10c3, 0x10c7, 0x10cf, 0x10d6, 0x10e3, 0x10ef, - 0x10fb, 0x1106, 0x110a, 0x1114, 0x1121, 0x1132, 0x113f, 0x114b, - 0x1151, 0x1169, 0x116d, 0x1176, 0x1181, 0x118d, 0x1195, 0x119a, - 0x11a6, 0x11b0, 0x11bd, 0x11c8, 0x11cd, 0x11d8, 0x11e2, 0x11ee, + 0x0f34, 0x0f3d, 0x0f47, 0x0f63, 0x0f6e, 0x0f81, 0x0f91, 0x0f9d, + 0x0fa8, 0x0fc0, 0x0fdc, 0x0fe0, 0x0fea, 0x0ff0, 0x0ffd, 0x1007, + 0x1013, 0x1028, 0x102e, 0x1034, 0x103b, 0x1049, 0x1058, 0x1061, + 0x1070, 0x107b, 0x1087, 0x108a, 0x1094, 0x1098, 0x10a6, 0x10ad, + 0x10b1, 0x10b8, 0x10c5, 0x10cc, 0x10d0, 0x10d8, 0x10df, 0x10ec, + 0x10f8, 0x1104, 0x110f, 0x1113, 0x111d, 0x112a, 0x113b, 0x1148, + 0x1154, 0x115a, 0x1172, 0x1176, 0x117f, 0x118a, 0x1196, 0x119e, + 0x11a3, 0x11af, 0x11b9, 0x11c6, 0x11d1, 0x11d6, 0x11e1, 0x11eb, // Entry 180 - 1BF - 0x1200, 0x120b, 0x1216, 0x1221, 0x122e, 0x1238, 0x1241, 0x1256, - 0x1262, 0x1272, 0x127a, 0x1284, 0x128d, 0x1297, 0x129c, 0x12b3, - 0x12bc, 0x12c7, 0x12cb, 0x12d8, 0x12e6, 0x12f3, 0x1300, 0x130b, - 0x130f, 0x131c, 0x1322, 0x1327, 0x132b, 0x1343, 0x135b, 0x1369, - 0x1370, 0x1376, 0x1381, 0x138e, 0x139b, 0x13a7, 0x13ab, 0x13c2, - 0x13c9, 0x13eb, 0x13f6, 0x1402, 0x1410, 0x141e, 0x1423, 0x142f, - 0x1441, 0x145e, 0x146a, 0x1474, 0x1482, 0x148f, 0x1493, 0x149d, - 0x14b4, 0x14ba, 0x14c3, 0x14ce, 0x14e3, 0x14e9, 0x14ef, 0x1503, + 0x11f7, 0x1209, 0x1214, 0x121f, 0x122a, 0x1237, 0x1241, 0x1258, + 0x1261, 0x1276, 0x1282, 0x1292, 0x129a, 0x12a4, 0x12ad, 0x12b7, + 0x12bc, 0x12d3, 0x12dc, 0x12e7, 0x12eb, 0x12f8, 0x1306, 0x1313, + 0x1320, 0x132b, 0x132f, 0x133c, 0x1342, 0x1347, 0x134b, 0x1363, + 0x137b, 0x1389, 0x1390, 0x1396, 0x13a1, 0x13ae, 0x13bb, 0x13c7, + 0x13cb, 0x13e2, 0x13e9, 0x13f6, 0x1401, 0x140d, 0x141b, 0x1429, + 0x142e, 0x143a, 0x144c, 0x1469, 0x1475, 0x147f, 0x148d, 0x149a, + 0x149e, 0x14a8, 0x14bf, 0x14c5, 0x14ce, 0x14d9, 0x14ee, 0x14f4, // Entry 1C0 - 1FF - 0x150d, 0x1524, 0x1532, 0x153f, 0x1549, 0x154e, 0x1553, 0x1569, - 0x1579, 0x1585, 0x158d, 0x1597, 0x15a2, 0x15ae, 0x15c1, 0x15db, - 0x15f3, 0x1601, 0x160a, 0x1615, 0x1621, 0x162b, 0x1638, 0x1641, - 0x1651, 0x1657, 0x1672, 0x1684, 0x1691, 0x16a2, 0x16b0, 0x16ba, - 0x16bf, 0x16c8, 0x16d5, 0x16e1, 0x16ed, 0x16f9, 0x16fc, 0x1708, - 0x1713, 0x171e, 0x1725, 0x1730, 0x173d, 0x174e, 0x1755, 0x1760, - 0x176b, 0x1775, 0x1781, 0x1795, 0x179b, 0x179f, 0x17a9, 0x17b5, - 0x17c4, 0x17d5, 0x17e2, 0x17eb, 0x17f5, 0x180a, 0x1810, 0x1824, + 0x14fa, 0x150e, 0x1518, 0x152f, 0x153d, 0x154a, 0x1554, 0x1559, + 0x155e, 0x1574, 0x1584, 0x1590, 0x1598, 0x15a2, 0x15ad, 0x15b9, + 0x15cc, 0x15e6, 0x15fe, 0x160c, 0x1615, 0x1620, 0x162c, 0x1636, + 0x1643, 0x164c, 0x165c, 0x1662, 0x167d, 0x168f, 0x169c, 0x16ad, + 0x16bb, 0x16c5, 0x16ca, 0x16d3, 0x16e0, 0x16ec, 0x16f8, 0x1704, + 0x1707, 0x1713, 0x171e, 0x1729, 0x1730, 0x173b, 0x1748, 0x1759, + 0x1760, 0x176b, 0x1776, 0x1780, 0x178c, 0x17a0, 0x17a6, 0x17aa, + 0x17b4, 0x17c0, 0x17cf, 0x17e0, 0x17ed, 0x17f6, 0x1800, 0x1815, // Entry 200 - 23F - 0x1831, 0x1845, 0x185b, 0x1872, 0x1888, 0x1893, 0x189d, 0x18a9, - 0x18b4, 0x18b8, 0x18d2, 0x18d8, 0x18dc, 0x18e7, 0x18f2, 0x1907, - 0x1910, 0x191a, 0x1924, 0x1929, 0x192d, 0x1933, 0x193e, 0x194a, - 0x1953, 0x1960, 0x196c, 0x1979, 0x1980, 0x198a, 0x1992, 0x19a5, - 0x19ae, 0x19b9, 0x19bf, 0x19cb, 0x19de, 0x19e7, 0x19f3, 0x19fe, - 0x1a05, 0x1a10, 0x1a2c, 0x1a38, 0x1a44, 0x1a4b, 0x1a51, 0x1a54, - 0x1a60, 0x1a69, 0x1a80, 0x1aa6, 0x1aaf, 0x1aba, 0x1abf, 0x1ad1, - 0x1add, 0x1ae8, 0x1af0, 0x1af8, 0x1b11, 0x1b1c, 0x1b29, 0x1b32, + 0x181b, 0x182f, 0x183c, 0x1850, 0x1866, 0x187d, 0x1893, 0x189e, + 0x18a8, 0x18b4, 0x18bf, 0x18c3, 0x18dd, 0x18e3, 0x18e7, 0x18f2, + 0x18fd, 0x1912, 0x191b, 0x1925, 0x192f, 0x1934, 0x1938, 0x193e, + 0x1949, 0x1955, 0x195e, 0x196b, 0x1977, 0x1984, 0x198b, 0x1995, + 0x199d, 0x19b0, 0x19b9, 0x19c4, 0x19ca, 0x19d6, 0x19e9, 0x19f2, + 0x19fe, 0x1a09, 0x1a10, 0x1a1b, 0x1a37, 0x1a43, 0x1a4f, 0x1a56, + 0x1a65, 0x1a68, 0x1a74, 0x1a7d, 0x1a94, 0x1aba, 0x1ac3, 0x1ace, + 0x1ad3, 0x1ae5, 0x1af1, 0x1afc, 0x1b04, 0x1b0c, 0x1b25, 0x1b30, // Entry 240 - 27F - 0x1b3b, 0x1b44, 0x1b51, 0x1b56, 0x1b5f, 0x1b6b, 0x1b78, 0x1b85, - 0x1b92, 0x1b98, 0x1bb8, 0x1bc3, 0x1bdb, 0x1bdf, 0x1c00, 0x1c00, - 0x1c00, 0x1c23, 0x1c23, 0x1c23, 0x1c41, 0x1c52, 0x1c52, 0x1c69, - 0x1c69, 0x1c69, 0x1c69, 0x1c69, 0x1c76, 0x1c81, 0x1c81, 0x1c98, - 0x1ca4, 0x1cb5, 0x1cc9, 0x1ce5, -} // Size: 1248 bytes - -const daLangStr string = "" + // Size: 4141 bytes + 0x1b3d, 0x1b46, 0x1b4f, 0x1b58, 0x1b65, 0x1b6a, 0x1b73, 0x1b7f, + 0x1b8c, 0x1b99, 0x1ba6, 0x1bac, 0x1bcc, 0x1bd7, 0x1bef, 0x1bf3, + 0x1c14, 0x1c14, 0x1c14, 0x1c37, 0x1c37, 0x1c37, 0x1c55, 0x1c66, + 0x1c66, 0x1c7d, 0x1c7d, 0x1c7d, 0x1c7d, 0x1c7d, 0x1c8a, 0x1c95, + 0x1c95, 0x1cac, 0x1cb8, 0x1cc9, 0x1cdd, 0x1cf9, +} // Size: 1252 bytes + +const daLangStr string = "" + // Size: 4177 bytes "afarabkhasiskavestanafrikaansakanamhariskaragonesiskarabiskassamesiskava" + "riskaymaraaserbajdsjanskbashkirhviderussiskbulgarskbislamabambarabengali" + "tibetanskbretonskbosniskcatalansktjetjenskchamorrokorsikanskcreetjekkisk" + @@ -16708,51 +17966,51 @@ const daLangStr string = "" + // Size: 4141 bytes "orsknorsk bokmålsydndebelenavajonyanjaoccitanskojibwaoromooriyaossetiskp" + "unjabiskpalipolskpashtoportugisiskquechuarætoromanskrundirumænskrussiskk" + "inyarwandasanskritsardinsksindhinordsamisksangosingalesiskslovakiskslove" + - "nsksamoanskshonasomaliskalbanskserbiskswatisydsothosundanesisksvenskswah" + - "ilitamilsktelugutadsjikiskthaitigrinyaturkmensktswanatongansktyrkisktson" + - "gatatarisktahitianskuyguriskukrainskurduusbekiskvendavietnamesiskvolapyk" + - "vallonskwolofisiXhosajiddischyorubazhuangkinesiskzuluachinesiskacoliadan" + - "gmeadygheafrihiliaghemainuakkadiskaleutisksydaltaiskoldengelskangikaaram" + - "æiskmapudungunarapahoarawakasuasturiskawadhibaluchibalinesiskbasaabamun" + - "ghomalabejabembabenabafutvestbaluchibhojpuribikolbinikomsiksikabrajbodob" + - "akossiburiatiskbuginesiskbulublinmedumbacaddocaribiskcayugaatsamcebuanoc" + - "higachibchachagataichuukesemarichinookchoctawchipewyancherokeecheyenneso" + - "ranikoptiskkrim-tyrkiskseselwa (kreol-fransk)kasjubiskdakotadargwataitad" + - "elawareathapaskiskdogribdinkazarmadogrinedersorbiskdualamiddelhollandskj" + - "ola-fonyidyuladazagakiembuefikoldegyptiskekajukelamitiskmiddelengelskewo" + - "ndofangfilippinskfonmiddelfranskoldfransknordfrisiskøstfrisiskfriulianga" + - "gagauziskgan-kinesiskgayogbayageezgilbertesiskmiddelhøjtyskoldhøjtyskgon" + - "digorontalogotiskgrebooldgræskschweizertyskgusiigwichinhaidahakka-kinesi" + - "skhawaiianskhiligaynonhittitiskhmongøvresorbiskxiang-kinesiskhupaibanibi" + - "bioilokoingushlojbanngombamachamejødisk-persiskjødisk-arabiskkarakalpaki" + - "skkabyliskkachinjjukambakawikabardiankanembutyapmakondekapverdiskkorokha" + - "sikhotanesiskkoyra-chiinikakokalenjinkimbundukomi-permjakiskkonkanikosra" + - "eankpellekaratjai-balkarkarelskkurukhshambalabafiakölschkymykkutenajladi" + - "nolangilahndalambalezghianlakotamongolozinordluriluba-Lulualuisenolundal" + - "uolushailuyanamaduresemafamagahimaithilimakasarmandingomasaimabamokshama" + - "ndarmendemerumorisyenmiddelirskmakhuwa-meettometamicmacminangkabaumanchu" + - "manipurimohawkmossimundangflere sprogcreekmirandesiskmarwarimyeneerzyama" + - "zeniskmin-kinesiskneapolitansknamanedertysknewariniasniueanskkwasiongiem" + - "boonnogaioldislandskn-konordsothonuerklassisk newarisknyamwezinyankoleny" + - "oro-sprognzimaosageosmannisk tyrkiskpangasinanpahlavipampangapapiamentop" + - "alauansknigeriansk pidginoldpersiskfønikiskponapepreussiskoldprovencalsk" + - "quichérajasthanirapanuirarotongaromboromaniarumænskrwasandaweyakutsamari" + - "tansk aramæisksamburusasaksantalingambaysangusicilianskskotsksydkurdisks" + - "enecasenaselkupiskkoyraboro sennioldirsktachelhitshantchadisk arabisksid" + - "amosydsamisklulesamiskenaresamiskskoltesamisksoninkesogdiansksranan tong" + - "oserersahosukumasususumeriskshimaoreklassisk syrisksyrisktemnetesotereno" + - "tetumtigretivitokelauklingontlingittamasheknyasa tongansktok pisintaroko" + - "tsimshisktumbukatuvalutasawaqtuviniancentralmarokkansk tamazightudmurtug" + - "aristiskumbundurodvaivotiskvunjowalsertyskwalamowaraywashowalbiriwu-kine" + - "siskkalmyksogayaoyapeseyangbenyembakantonesiskzapotecblissymbolerzenagat" + - "amazightzuniintet sprogligt indholdzazamoderne standardarabiskøstrigsk t" + - "yskschweizerhøjtyskaustralsk engelskcanadisk engelskbritisk engelskameri" + - "kansk engelsklatinamerikansk spanskeuropæisk spanskmexicansk spanskcanad" + - "isk franskschweizisk franskflamskbrasiliansk portugisiskeuropæisk portug" + - "isiskmoldoviskserbokroatiskcongolesisk swahiliforenklet kinesisktraditio" + - "nelt kinesisk" - -var daLangIdx = []uint16{ // 613 elements + "nsksamoanskshonasomalialbanskserbiskswatisydsothosundanesisksvenskswahil" + + "itamiltelugutadsjikiskthaitigrinyaturkmensktswanatongansktyrkisktsongata" + + "tarisktahitianskuyguriskukrainskurduusbekiskvendavietnamesiskvolapykvall" + + "onskwolofisiXhosajiddischyorubazhuangkinesiskzuluachinesiskacoliadangmea" + + "dygheafrihiliaghemainuakkadiskaleutisksydaltaiskoldengelskangikaaramæisk" + + "mapudungunarapahoarawakasuasturiskawadhibaluchibalinesiskbasaabamunghoma" + + "labejabembabenabafutvestbaluchibhojpuribikolbinikomsiksikabrajbodobakoss" + + "iburiatiskbuginesiskbulublinmedumbacaddocaribiskcayugaatsamcebuanochigac" + + "hibchachagataichuukesemarichinookchoctawchipewyancherokeecheyennesoranik" + + "optiskkrim-tyrkiskseselwa (kreol-fransk)kasjubiskdakotadargwataitadelawa" + + "reathapaskiskdogribdinkazarmadogrinedersorbiskdualamiddelhollandskjola-f" + + "onyidyuladazagakiembuefikoldegyptiskekajukelamitiskmiddelengelskewondofa" + + "ngfilippinskfoncajunfranskmiddelfranskoldfransknordfrisiskøstfrisiskfriu" + + "liangagagauziskgan-kinesiskgayogbayageezgilbertesiskmiddelhøjtyskoldhøjt" + + "yskgondigorontalogotiskgrebooldgræskschweizertyskgusiigwichinhaidahakka-" + + "kinesiskhawaiianskhiligaynonhittitiskhmongøvresorbiskxiang-kinesiskhupai" + + "banibibioilokoingushlojbanngombamachamejødisk-persiskjødisk-arabiskkarak" + + "alpakiskkabyliskkachinjjukambakawikabardiankanembutyapmakondekapverdiskk" + + "orokhasikhotanesiskkoyra-chiinikakokalenjinkimbundukomi-permjakiskkonkan" + + "ikosraeankpellekaratjai-balkarkarelskkurukhshambalabafiakölschkymykkuten" + + "ajladinolangilahndalambalezghianlakotamongoLouisiana-kreolsklozinordluri" + + "luba-Lulualuisenolundaluolushailuyanamaduresemafamagahimaithilimakasarma" + + "ndingomasaimabamokshamandarmendemerumorisyenmiddelirskmakhuwa-meettometa" + + "micmacminangkabaumanchumanipurimohawkmossimundangflere sprogcreekmirande" + + "siskmarwarimyeneerzyamazeniskmin-kinesisknapolitansknamanedertysknewarin" + + "iasniueanskkwasiongiemboonnogaioldislandskn-konordsothonuerklassisk newa" + + "risknyamwezinyankolenyoro-sprognzimaosageosmannisk tyrkiskpangasinanpahl" + + "avipampangapapiamentopalauansknigeriansk pidginoldpersiskfønikiskponapep" + + "reussiskoldprovencalskquichérajasthanirapanuirarotongaromboromaniarumæns" + + "krwasandaweyakutsamaritansk aramæisksamburusasaksantalingambaysangusicil" + + "ianskskotsksydkurdisksenecasenaselkupiskkoyraboro sennioldirsktachelhits" + + "hantchadisk arabisksidamosydsamisklulesamiskenaresamiskskoltesamisksonin" + + "kesogdiansksranan tongoserersahosukumasususumeriskshimaoreklassisk syris" + + "ksyrisktemnetesoterenotetumtigretivitokelauklingontlingittamasheknyasa t" + + "ongansktok pisintarokotsimshisktumbukatuvaluansktasawaqtuviniancentralma" + + "rokkansk tamazightudmurtugaristiskumbunduukendt sprogvaivotiskvunjowalse" + + "rtyskwalamowaraywashowalbiriwu-kinesiskkalmyksogayaoyapeseyangbenyembaka" + + "ntonesiskzapotecblissymbolerzenagatamazightzuniintet sprogligt indholdza" + + "zamoderne standardarabiskøstrigsk tyskschweizerhøjtyskaustralsk engelskc" + + "anadisk engelskbritisk engelskamerikansk engelsklatinamerikansk spanskeu" + + "ropæisk spanskmexicansk spanskcanadisk franskschweizisk franskflamskbras" + + "iliansk portugisiskeuropæisk portugisiskmoldoviskserbokroatiskcongolesis" + + "k swahiliforenklet kinesisktraditionelt kinesisk" + +var daLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0004, 0x000d, 0x0014, 0x001d, 0x0021, 0x0029, 0x0034, 0x003b, 0x0045, 0x004c, 0x0052, 0x0060, 0x0067, 0x0073, 0x007b, @@ -16774,75 +18032,75 @@ var daLangIdx = []uint16{ // 613 elements // Entry 80 - BF 0x03c5, 0x03d0, 0x03d7, 0x03e3, 0x03e8, 0x03f0, 0x03f7, 0x0402, 0x040a, 0x0412, 0x0418, 0x0422, 0x0427, 0x0432, 0x043b, 0x0443, - 0x044b, 0x0450, 0x0458, 0x045f, 0x0466, 0x046b, 0x0473, 0x047e, - 0x0484, 0x048b, 0x0492, 0x0498, 0x04a2, 0x04a6, 0x04ae, 0x04b7, - 0x04bd, 0x04c5, 0x04cc, 0x04d2, 0x04da, 0x04e4, 0x04ec, 0x04f4, - 0x04f8, 0x0500, 0x0505, 0x0511, 0x0518, 0x0520, 0x0525, 0x052d, - 0x0535, 0x053b, 0x0541, 0x0549, 0x054d, 0x0557, 0x055c, 0x0563, - 0x0569, 0x0569, 0x0571, 0x0576, 0x057a, 0x0582, 0x0582, 0x058a, + 0x044b, 0x0450, 0x0456, 0x045d, 0x0464, 0x0469, 0x0471, 0x047c, + 0x0482, 0x0489, 0x048e, 0x0494, 0x049e, 0x04a2, 0x04aa, 0x04b3, + 0x04b9, 0x04c1, 0x04c8, 0x04ce, 0x04d6, 0x04e0, 0x04e8, 0x04f0, + 0x04f4, 0x04fc, 0x0501, 0x050d, 0x0514, 0x051c, 0x0521, 0x0529, + 0x0531, 0x0537, 0x053d, 0x0545, 0x0549, 0x0553, 0x0558, 0x055f, + 0x0565, 0x0565, 0x056d, 0x0572, 0x0576, 0x057e, 0x057e, 0x0586, // Entry C0 - FF - 0x058a, 0x0594, 0x059e, 0x05a4, 0x05ad, 0x05b7, 0x05b7, 0x05be, - 0x05be, 0x05be, 0x05c4, 0x05c4, 0x05c4, 0x05c7, 0x05c7, 0x05cf, - 0x05cf, 0x05d5, 0x05dc, 0x05e6, 0x05e6, 0x05eb, 0x05f0, 0x05f0, - 0x05f7, 0x05fb, 0x0600, 0x0600, 0x0604, 0x0609, 0x0609, 0x0614, - 0x061c, 0x0621, 0x0625, 0x0625, 0x0628, 0x062f, 0x062f, 0x062f, - 0x0633, 0x0633, 0x0637, 0x063e, 0x0647, 0x0651, 0x0655, 0x0659, - 0x0660, 0x0665, 0x066d, 0x0673, 0x0678, 0x067f, 0x0684, 0x068b, - 0x0693, 0x069b, 0x069f, 0x06a6, 0x06ad, 0x06b6, 0x06be, 0x06c6, + 0x0586, 0x0590, 0x059a, 0x05a0, 0x05a9, 0x05b3, 0x05b3, 0x05ba, + 0x05ba, 0x05ba, 0x05c0, 0x05c0, 0x05c0, 0x05c3, 0x05c3, 0x05cb, + 0x05cb, 0x05d1, 0x05d8, 0x05e2, 0x05e2, 0x05e7, 0x05ec, 0x05ec, + 0x05f3, 0x05f7, 0x05fc, 0x05fc, 0x0600, 0x0605, 0x0605, 0x0610, + 0x0618, 0x061d, 0x0621, 0x0621, 0x0624, 0x062b, 0x062b, 0x062b, + 0x062f, 0x062f, 0x0633, 0x063a, 0x0643, 0x064d, 0x0651, 0x0655, + 0x065c, 0x0661, 0x0669, 0x066f, 0x0674, 0x0674, 0x067b, 0x0680, + 0x0687, 0x068f, 0x0697, 0x069b, 0x06a2, 0x06a9, 0x06b2, 0x06ba, // Entry 100 - 13F - 0x06cc, 0x06d3, 0x06d3, 0x06df, 0x06f5, 0x06fe, 0x0704, 0x070a, - 0x070f, 0x0717, 0x0722, 0x0728, 0x072d, 0x0732, 0x0737, 0x0743, - 0x0743, 0x0748, 0x0757, 0x0761, 0x0766, 0x076c, 0x0772, 0x0776, - 0x0776, 0x0781, 0x0787, 0x0790, 0x079d, 0x079d, 0x07a3, 0x07a3, - 0x07a7, 0x07b1, 0x07b1, 0x07b4, 0x07b4, 0x07c0, 0x07c9, 0x07c9, - 0x07d4, 0x07df, 0x07e7, 0x07e9, 0x07f2, 0x07fe, 0x0802, 0x0807, - 0x0807, 0x080b, 0x0817, 0x0817, 0x0825, 0x0830, 0x0830, 0x0835, - 0x083e, 0x0844, 0x0849, 0x0852, 0x085f, 0x085f, 0x085f, 0x0864, + 0x06c2, 0x06c8, 0x06cf, 0x06cf, 0x06db, 0x06f1, 0x06fa, 0x0700, + 0x0706, 0x070b, 0x0713, 0x071e, 0x0724, 0x0729, 0x072e, 0x0733, + 0x073f, 0x073f, 0x0744, 0x0753, 0x075d, 0x0762, 0x0768, 0x076e, + 0x0772, 0x0772, 0x077d, 0x0783, 0x078c, 0x0799, 0x0799, 0x079f, + 0x079f, 0x07a3, 0x07ad, 0x07ad, 0x07b0, 0x07bb, 0x07c7, 0x07d0, + 0x07d0, 0x07db, 0x07e6, 0x07ee, 0x07f0, 0x07f9, 0x0805, 0x0809, + 0x080e, 0x080e, 0x0812, 0x081e, 0x081e, 0x082c, 0x0837, 0x0837, + 0x083c, 0x0845, 0x084b, 0x0850, 0x0859, 0x0866, 0x0866, 0x0866, // Entry 140 - 17F - 0x086b, 0x0870, 0x087e, 0x0888, 0x0888, 0x0892, 0x089b, 0x08a0, - 0x08ac, 0x08ba, 0x08be, 0x08c2, 0x08c8, 0x08cd, 0x08d3, 0x08d3, - 0x08d3, 0x08d9, 0x08df, 0x08e6, 0x08f5, 0x0904, 0x0904, 0x0911, - 0x0919, 0x091f, 0x0922, 0x0927, 0x092b, 0x0934, 0x093b, 0x093f, - 0x0946, 0x0950, 0x0950, 0x0954, 0x0954, 0x0959, 0x0964, 0x0970, - 0x0970, 0x0970, 0x0974, 0x097c, 0x0984, 0x0993, 0x099a, 0x09a2, - 0x09a8, 0x09b7, 0x09b7, 0x09b7, 0x09be, 0x09c4, 0x09cc, 0x09d1, - 0x09d8, 0x09dd, 0x09e4, 0x09ea, 0x09ef, 0x09f5, 0x09fa, 0x0a02, + 0x086b, 0x0872, 0x0877, 0x0885, 0x088f, 0x088f, 0x0899, 0x08a2, + 0x08a7, 0x08b3, 0x08c1, 0x08c5, 0x08c9, 0x08cf, 0x08d4, 0x08da, + 0x08da, 0x08da, 0x08e0, 0x08e6, 0x08ed, 0x08fc, 0x090b, 0x090b, + 0x0918, 0x0920, 0x0926, 0x0929, 0x092e, 0x0932, 0x093b, 0x0942, + 0x0946, 0x094d, 0x0957, 0x0957, 0x095b, 0x095b, 0x0960, 0x096b, + 0x0977, 0x0977, 0x0977, 0x097b, 0x0983, 0x098b, 0x099a, 0x09a1, + 0x09a9, 0x09af, 0x09be, 0x09be, 0x09be, 0x09c5, 0x09cb, 0x09d3, + 0x09d8, 0x09df, 0x09e4, 0x09eb, 0x09f1, 0x09f6, 0x09fc, 0x0a01, // Entry 180 - 1BF - 0x0a02, 0x0a02, 0x0a02, 0x0a08, 0x0a08, 0x0a0d, 0x0a11, 0x0a19, - 0x0a19, 0x0a23, 0x0a2a, 0x0a2f, 0x0a32, 0x0a38, 0x0a3e, 0x0a3e, - 0x0a3e, 0x0a46, 0x0a4a, 0x0a50, 0x0a58, 0x0a5f, 0x0a67, 0x0a6c, - 0x0a70, 0x0a76, 0x0a7c, 0x0a81, 0x0a85, 0x0a8d, 0x0a97, 0x0aa5, - 0x0aa9, 0x0aaf, 0x0aba, 0x0ac0, 0x0ac8, 0x0ace, 0x0ad3, 0x0ad3, - 0x0ada, 0x0ae5, 0x0aea, 0x0af5, 0x0afc, 0x0afc, 0x0b01, 0x0b06, - 0x0b0e, 0x0b1a, 0x0b26, 0x0b2a, 0x0b33, 0x0b39, 0x0b3d, 0x0b45, - 0x0b45, 0x0b4b, 0x0b54, 0x0b59, 0x0b64, 0x0b64, 0x0b68, 0x0b71, + 0x0a09, 0x0a09, 0x0a09, 0x0a09, 0x0a0f, 0x0a0f, 0x0a14, 0x0a25, + 0x0a29, 0x0a31, 0x0a31, 0x0a3b, 0x0a42, 0x0a47, 0x0a4a, 0x0a50, + 0x0a56, 0x0a56, 0x0a56, 0x0a5e, 0x0a62, 0x0a68, 0x0a70, 0x0a77, + 0x0a7f, 0x0a84, 0x0a88, 0x0a8e, 0x0a94, 0x0a99, 0x0a9d, 0x0aa5, + 0x0aaf, 0x0abd, 0x0ac1, 0x0ac7, 0x0ad2, 0x0ad8, 0x0ae0, 0x0ae6, + 0x0aeb, 0x0aeb, 0x0af2, 0x0afd, 0x0b02, 0x0b0d, 0x0b14, 0x0b14, + 0x0b19, 0x0b1e, 0x0b26, 0x0b32, 0x0b3d, 0x0b41, 0x0b4a, 0x0b50, + 0x0b54, 0x0b5c, 0x0b5c, 0x0b62, 0x0b6b, 0x0b70, 0x0b7b, 0x0b7b, // Entry 1C0 - 1FF - 0x0b75, 0x0b86, 0x0b8e, 0x0b96, 0x0ba1, 0x0ba6, 0x0bab, 0x0bbc, - 0x0bc6, 0x0bcd, 0x0bd5, 0x0bdf, 0x0be8, 0x0be8, 0x0bf9, 0x0bf9, - 0x0bf9, 0x0c03, 0x0c03, 0x0c0c, 0x0c0c, 0x0c0c, 0x0c12, 0x0c1b, - 0x0c29, 0x0c30, 0x0c30, 0x0c3a, 0x0c41, 0x0c4a, 0x0c4a, 0x0c4a, - 0x0c4f, 0x0c55, 0x0c55, 0x0c55, 0x0c55, 0x0c5e, 0x0c61, 0x0c68, - 0x0c6d, 0x0c82, 0x0c89, 0x0c8e, 0x0c95, 0x0c95, 0x0c9c, 0x0ca1, - 0x0cab, 0x0cb1, 0x0cb1, 0x0cbb, 0x0cc1, 0x0cc5, 0x0cc5, 0x0cce, - 0x0cdd, 0x0ce4, 0x0ce4, 0x0ced, 0x0cf1, 0x0d01, 0x0d07, 0x0d07, + 0x0b7f, 0x0b88, 0x0b8c, 0x0b9d, 0x0ba5, 0x0bad, 0x0bb8, 0x0bbd, + 0x0bc2, 0x0bd3, 0x0bdd, 0x0be4, 0x0bec, 0x0bf6, 0x0bff, 0x0bff, + 0x0c10, 0x0c10, 0x0c10, 0x0c1a, 0x0c1a, 0x0c23, 0x0c23, 0x0c23, + 0x0c29, 0x0c32, 0x0c40, 0x0c47, 0x0c47, 0x0c51, 0x0c58, 0x0c61, + 0x0c61, 0x0c61, 0x0c66, 0x0c6c, 0x0c6c, 0x0c6c, 0x0c6c, 0x0c75, + 0x0c78, 0x0c7f, 0x0c84, 0x0c99, 0x0ca0, 0x0ca5, 0x0cac, 0x0cac, + 0x0cb3, 0x0cb8, 0x0cc2, 0x0cc8, 0x0cc8, 0x0cd2, 0x0cd8, 0x0cdc, + 0x0cdc, 0x0ce5, 0x0cf4, 0x0cfb, 0x0cfb, 0x0d04, 0x0d08, 0x0d18, // Entry 200 - 23F - 0x0d07, 0x0d10, 0x0d1a, 0x0d25, 0x0d31, 0x0d38, 0x0d41, 0x0d4d, - 0x0d52, 0x0d56, 0x0d56, 0x0d5c, 0x0d60, 0x0d68, 0x0d70, 0x0d7f, - 0x0d85, 0x0d85, 0x0d85, 0x0d8a, 0x0d8e, 0x0d94, 0x0d99, 0x0d9e, - 0x0da2, 0x0da9, 0x0da9, 0x0db0, 0x0db7, 0x0db7, 0x0dbf, 0x0dcd, - 0x0dd6, 0x0dd6, 0x0ddc, 0x0ddc, 0x0de5, 0x0de5, 0x0dec, 0x0df2, - 0x0df9, 0x0e01, 0x0e1c, 0x0e22, 0x0e2c, 0x0e33, 0x0e36, 0x0e39, - 0x0e39, 0x0e39, 0x0e39, 0x0e39, 0x0e3f, 0x0e3f, 0x0e44, 0x0e4e, - 0x0e54, 0x0e59, 0x0e5e, 0x0e65, 0x0e70, 0x0e76, 0x0e76, 0x0e7a, + 0x0d1e, 0x0d1e, 0x0d1e, 0x0d27, 0x0d31, 0x0d3c, 0x0d48, 0x0d4f, + 0x0d58, 0x0d64, 0x0d69, 0x0d6d, 0x0d6d, 0x0d73, 0x0d77, 0x0d7f, + 0x0d87, 0x0d96, 0x0d9c, 0x0d9c, 0x0d9c, 0x0da1, 0x0da5, 0x0dab, + 0x0db0, 0x0db5, 0x0db9, 0x0dc0, 0x0dc0, 0x0dc7, 0x0dce, 0x0dce, + 0x0dd6, 0x0de4, 0x0ded, 0x0ded, 0x0df3, 0x0df3, 0x0dfc, 0x0dfc, + 0x0e03, 0x0e0d, 0x0e14, 0x0e1c, 0x0e37, 0x0e3d, 0x0e47, 0x0e4e, + 0x0e5a, 0x0e5d, 0x0e5d, 0x0e5d, 0x0e5d, 0x0e5d, 0x0e63, 0x0e63, + 0x0e68, 0x0e72, 0x0e78, 0x0e7d, 0x0e82, 0x0e89, 0x0e94, 0x0e9a, // Entry 240 - 27F - 0x0e7d, 0x0e83, 0x0e8a, 0x0e8f, 0x0e8f, 0x0e9a, 0x0ea1, 0x0ead, - 0x0ead, 0x0eb3, 0x0ebc, 0x0ec0, 0x0ed7, 0x0edb, 0x0ef2, 0x0ef2, - 0x0f00, 0x0f11, 0x0f22, 0x0f32, 0x0f41, 0x0f53, 0x0f69, 0x0f7a, - 0x0f8a, 0x0f8a, 0x0f99, 0x0faa, 0x0faa, 0x0fb0, 0x0fc7, 0x0fdd, - 0x0fe6, 0x0ff3, 0x1006, 0x1018, 0x102d, -} // Size: 1250 bytes - -const deLangStr string = "" + // Size: 5600 bytes + 0x0e9a, 0x0e9e, 0x0ea1, 0x0ea7, 0x0eae, 0x0eb3, 0x0eb3, 0x0ebe, + 0x0ec5, 0x0ed1, 0x0ed1, 0x0ed7, 0x0ee0, 0x0ee4, 0x0efb, 0x0eff, + 0x0f16, 0x0f16, 0x0f24, 0x0f35, 0x0f46, 0x0f56, 0x0f65, 0x0f77, + 0x0f8d, 0x0f9e, 0x0fae, 0x0fae, 0x0fbd, 0x0fce, 0x0fce, 0x0fd4, + 0x0feb, 0x1001, 0x100a, 0x1017, 0x102a, 0x103c, 0x1051, +} // Size: 1254 bytes + +const deLangStr string = "" + // Size: 5631 bytes "AfarAbchasischAvestischAfrikaansAkanAmharischAragonesischArabischAssames" + "ischAwarischAymaraAserbaidschanischBaschkirischWeißrussischBulgarischBis" + "lamaBambaraBengalischTibetischBretonischBosnischKatalanischTschetschenis" + @@ -16889,39 +18147,40 @@ const deLangStr string = "" + // Size: 5600 bytes "warKirmanjkiKakoKalenjinKimbunduKomi-PermjakischKonkaniKosraeanischKpell" + "eKaratschaiisch-BalkarischKrioKinaray-aKarelischOraonShambalaBafiaKölsch" + "KumükischKutenaiLadinoLangiLahndaLambaLesgischLingua Franca NovaLigurisc" + - "hLivischLakotaLombardischMongoLoziNördliches LuriLettgallischLuba-LuluaL" + - "uisenoLundaLuoLushaiLuhyaKlassisches ChinesischLasischMaduresischMafaKho" + - "ttaMaithiliMakassarischMalinkeMassaiMabaMokschanischMandaresischMendeMer" + - "uMorisyenMittelirischMakhuwa-MeettoMeta’MicmacMinangkabauMandschurischMe" + - "itheiMohawkMossiBergmariMundangMehrsprachigMuskogeeMirandesischMarwariMe" + - "ntawaiMyeneErsja-MordwinischMasanderanischMin NanNeapolitanischNamaNiede" + - "rdeutschNewariNiasNiueAo-NagaKwasioNgiemboonNogaiAltnordischNovialN’KoNo" + - "rd-SothoNuerAlt-NewariNyamweziNyankoleNyoroNzimaOsageOsmanischPangasinan" + - "MittelpersischPampangganPapiamentoPalauPicardischNigerianisches PidginPe" + - "nnsylvaniadeutschPlautdietschAltpersischPfälzischPhönizischPiemontesisch" + - "PontischPonapeanischAltpreußischAltprovenzalischK’iche’Chimborazo Hochla" + - "nd-QuechuaRajasthaniRapanuiRarotonganischRomagnolTarifitRomboRomaniRotum" + - "anischRussinischRovianaAromunischRwaSandaweJakutischSamaritanischSamburu" + - "SasakSantaliSaurashtraNgambaySanguSizilianischSchottischSassarischSüdkur" + - "dischSenecaSenaSeriSelkupischKoyra SenniAltirischSamogitischTaschelhitSc" + - "hanTschadisch-ArabischSidamoSchlesisch (Niederschlesisch)SelayarSüdsamis" + - "chLule-SamischInari-SamischSkolt-SamischSoninkeSogdischSrananischSererSa" + - "hoSaterfriesischSukumaSusuSumerischKomorischAltsyrischSyrischSchlesisch " + - "(Wasserpolnisch)TuluTemneTesoTerenoTetumTigreTivTokelauanischTsachurisch" + - "KlingonischTlingitTalischTamaseqNyasa TongaNeumelanesischTuroyoTarokoTsa" + - "konischTsimshianTatischTumbukaTuvaluischTasawaqTuwinischZentralatlas-Tam" + - "azightUdmurtischUgaritischUmbunduRootVaiVenetischWepsischWestflämischMai" + - "nfränkischWotischVõroVunjoWalliserdeutschWalamoWarayWashoWarlpiriWuKalmü" + - "ckischMingrelischSogaYaoYapesischYangbenYembaNheengatuKantonesischZapote" + - "kischBliss-SymboleSeeländischZenagaTamazightZuniKeine SprachinhalteZazaM" + - "odernes HocharabischÖsterreichisches DeutschSchweizer HochdeutschAustral" + - "isches EnglischKanadisches EnglischBritisches EnglischAmerikanisches Eng" + - "lischLateinamerikanisches SpanischEuropäisches SpanischMexikanisches Spa" + - "nischKanadisches FranzösischSchweizer FranzösischNiedersächsischFlämisch" + - "Brasilianisches PortugiesischEuropäisches PortugiesischMoldauischSerbo-K" + - "roatischKongo-SwahiliChinesisch (vereinfacht)Chinesisch (traditionell)" - -var deLangIdx = []uint16{ // 613 elements + "hLivischLakotaLombardischMongoKreol (Louisiana)LoziNördliches LuriLettga" + + "llischLuba-LuluaLuisenoLundaLuoLushaiLuhyaKlassisches ChinesischLasischM" + + "aduresischMafaKhottaMaithiliMakassarischMalinkeMassaiMabaMokschanischMan" + + "daresischMendeMeruMorisyenMittelirischMakhuwa-MeettoMeta’MicmacMinangkab" + + "auMandschurischMeitheiMohawkMossiBergmariMundangMehrsprachigMuskogeeMira" + + "ndesischMarwariMentawaiMyeneErsja-MordwinischMasanderanischMin NanNeapol" + + "itanischNamaNiederdeutschNewariNiasNiueAo-NagaKwasioNgiemboonNogaiAltnor" + + "dischNovialN’KoNord-SothoNuerAlt-NewariNyamweziNyankoleNyoroNzimaOsageOs" + + "manischPangasinanMittelpersischPampangganPapiamentoPalauPicardischNigeri" + + "anisches PidginPennsylvaniadeutschPlautdietschAltpersischPfälzischPhöniz" + + "ischPiemontesischPontischPonapeanischAltpreußischAltprovenzalischK’iche’" + + "Chimborazo Hochland-QuechuaRajasthaniRapanuiRarotonganischRomagnolTarifi" + + "tRomboRomaniRotumanischRussinischRovianaAromunischRwaSandaweJakutischSam" + + "aritanischSamburuSasakSantaliSaurashtraNgambaySanguSizilianischSchottisc" + + "hSassarischSüdkurdischSenecaSenaSeriSelkupischKoyra SenniAltirischSamogi" + + "tischTaschelhitSchanTschadisch-ArabischSidamoSchlesisch (Niederschlesisc" + + "h)SelayarSüdsamischLule-SamischInari-SamischSkolt-SamischSoninkeSogdisch" + + "SrananischSererSahoSaterfriesischSukumaSusuSumerischKomorischAltsyrischS" + + "yrischSchlesisch (Wasserpolnisch)TuluTemneTesoTerenoTetumTigreTivTokelau" + + "anischTsachurischKlingonischTlingitTalischTamaseqNyasa TongaNeumelanesis" + + "chTuroyoTarokoTsakonischTsimshianTatischTumbukaTuvaluischTasawaqTuwinisc" + + "hZentralatlas-TamazightUdmurtischUgaritischUmbunduUnbekannte SpracheVaiV" + + "enetischWepsischWestflämischMainfränkischWotischVõroVunjoWalliserdeutsch" + + "WalamoWarayWashoWarlpiriWuKalmückischMingrelischSogaYaoYapesischYangbenY" + + "embaNheengatuKantonesischZapotekischBliss-SymboleSeeländischZenagaTamazi" + + "ghtZuniKeine SprachinhalteZazaModernes HocharabischÖsterreichisches Deut" + + "schSchweizer HochdeutschAustralisches EnglischKanadisches EnglischBritis" + + "ches EnglischAmerikanisches EnglischLateinamerikanisches SpanischEuropäi" + + "sches SpanischMexikanisches SpanischKanadisches FranzösischSchweizer Fra" + + "nzösischNiedersächsischFlämischBrasilianisches PortugiesischEuropäisches" + + " PortugiesischMoldauischSerbo-KroatischKongo-SwahiliChinesisch (vereinfa" + + "cht)Chinesisch (traditionell)" + +var deLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0004, 0x000e, 0x0017, 0x0020, 0x0024, 0x002d, 0x0039, 0x0041, 0x004c, 0x0054, 0x005a, 0x006b, 0x0077, 0x0084, 0x008e, @@ -16956,219 +18215,220 @@ var deLangIdx = []uint16{ // 613 elements 0x0781, 0x0788, 0x078d, 0x0793, 0x0797, 0x079c, 0x07a2, 0x07b6, 0x07c1, 0x07c6, 0x07ca, 0x07d6, 0x07d9, 0x07e2, 0x07ed, 0x07f9, 0x0804, 0x080a, 0x080e, 0x0814, 0x081e, 0x0829, 0x082d, 0x0831, - 0x0838, 0x083d, 0x0846, 0x084c, 0x0851, 0x0858, 0x085e, 0x0865, - 0x0872, 0x087d, 0x0881, 0x0888, 0x088f, 0x0898, 0x08a0, 0x08a8, + 0x0838, 0x083d, 0x0846, 0x084c, 0x0851, 0x0851, 0x0858, 0x085e, + 0x0865, 0x0872, 0x087d, 0x0881, 0x0888, 0x088f, 0x0898, 0x08a0, // Entry 100 - 13F - 0x08b7, 0x08bf, 0x08c7, 0x08d4, 0x08e3, 0x08ee, 0x08f4, 0x08fe, - 0x0903, 0x090b, 0x0910, 0x0916, 0x091b, 0x0920, 0x0925, 0x0933, - 0x0940, 0x0945, 0x095a, 0x095f, 0x0964, 0x096a, 0x096e, 0x0972, - 0x097d, 0x0987, 0x098d, 0x0995, 0x09a3, 0x09b7, 0x09bd, 0x09cb, - 0x09d1, 0x09d9, 0x09e3, 0x09e6, 0x09eb, 0x09fd, 0x0a0c, 0x0a1f, - 0x0a2c, 0x0a38, 0x0a42, 0x0a44, 0x0a4e, 0x0a51, 0x0a55, 0x0a5a, - 0x0a5f, 0x0a63, 0x0a6e, 0x0a74, 0x0a85, 0x0a93, 0x0a9e, 0x0aa3, - 0x0aac, 0x0ab3, 0x0ab8, 0x0ac5, 0x0ad5, 0x0adb, 0x0ae3, 0x0ae8, + 0x08a8, 0x08b7, 0x08bf, 0x08c7, 0x08d4, 0x08e3, 0x08ee, 0x08f4, + 0x08fe, 0x0903, 0x090b, 0x0910, 0x0916, 0x091b, 0x0920, 0x0925, + 0x0933, 0x0940, 0x0945, 0x095a, 0x095f, 0x0964, 0x096a, 0x096e, + 0x0972, 0x097d, 0x0987, 0x098d, 0x0995, 0x09a3, 0x09b7, 0x09bd, + 0x09cb, 0x09d1, 0x09d9, 0x09e3, 0x09e6, 0x09eb, 0x09fd, 0x0a0c, + 0x0a1f, 0x0a2c, 0x0a38, 0x0a42, 0x0a44, 0x0a4e, 0x0a51, 0x0a55, + 0x0a5a, 0x0a5f, 0x0a63, 0x0a6e, 0x0a74, 0x0a85, 0x0a93, 0x0a9e, + 0x0aa3, 0x0aac, 0x0ab3, 0x0ab8, 0x0ac5, 0x0ad5, 0x0adb, 0x0ae3, // Entry 140 - 17F - 0x0aef, 0x0af4, 0x0af9, 0x0b02, 0x0b0f, 0x0b19, 0x0b23, 0x0b27, - 0x0b33, 0x0b38, 0x0b3c, 0x0b40, 0x0b46, 0x0b4d, 0x0b58, 0x0b62, - 0x0b78, 0x0b7e, 0x0b84, 0x0b8b, 0x0b9c, 0x0bad, 0x0bb5, 0x0bc3, - 0x0bcc, 0x0bd2, 0x0bd5, 0x0bda, 0x0bde, 0x0bea, 0x0bf1, 0x0bf5, - 0x0bfc, 0x0c08, 0x0c0f, 0x0c13, 0x0c1b, 0x0c20, 0x0c27, 0x0c33, - 0x0c39, 0x0c42, 0x0c46, 0x0c4e, 0x0c56, 0x0c66, 0x0c6d, 0x0c79, - 0x0c7f, 0x0c98, 0x0c9c, 0x0ca5, 0x0cae, 0x0cb3, 0x0cbb, 0x0cc0, - 0x0cc7, 0x0cd1, 0x0cd8, 0x0cde, 0x0ce3, 0x0ce9, 0x0cee, 0x0cf6, + 0x0ae8, 0x0aef, 0x0af4, 0x0af9, 0x0b02, 0x0b0f, 0x0b19, 0x0b23, + 0x0b27, 0x0b33, 0x0b38, 0x0b3c, 0x0b40, 0x0b46, 0x0b4d, 0x0b58, + 0x0b62, 0x0b78, 0x0b7e, 0x0b84, 0x0b8b, 0x0b9c, 0x0bad, 0x0bb5, + 0x0bc3, 0x0bcc, 0x0bd2, 0x0bd5, 0x0bda, 0x0bde, 0x0bea, 0x0bf1, + 0x0bf5, 0x0bfc, 0x0c08, 0x0c0f, 0x0c13, 0x0c1b, 0x0c20, 0x0c27, + 0x0c33, 0x0c39, 0x0c42, 0x0c46, 0x0c4e, 0x0c56, 0x0c66, 0x0c6d, + 0x0c79, 0x0c7f, 0x0c98, 0x0c9c, 0x0ca5, 0x0cae, 0x0cb3, 0x0cbb, + 0x0cc0, 0x0cc7, 0x0cd1, 0x0cd8, 0x0cde, 0x0ce3, 0x0ce9, 0x0cee, // Entry 180 - 1BF - 0x0d08, 0x0d11, 0x0d18, 0x0d1e, 0x0d29, 0x0d2e, 0x0d32, 0x0d42, - 0x0d4e, 0x0d58, 0x0d5f, 0x0d64, 0x0d67, 0x0d6d, 0x0d72, 0x0d88, - 0x0d8f, 0x0d9a, 0x0d9e, 0x0da4, 0x0dac, 0x0db8, 0x0dbf, 0x0dc5, - 0x0dc9, 0x0dd5, 0x0de1, 0x0de6, 0x0dea, 0x0df2, 0x0dfe, 0x0e0c, - 0x0e13, 0x0e19, 0x0e24, 0x0e31, 0x0e38, 0x0e3e, 0x0e43, 0x0e4b, - 0x0e52, 0x0e5e, 0x0e66, 0x0e72, 0x0e79, 0x0e81, 0x0e86, 0x0e97, - 0x0ea5, 0x0eac, 0x0eba, 0x0ebe, 0x0ecb, 0x0ed1, 0x0ed5, 0x0ed9, - 0x0ee0, 0x0ee6, 0x0eef, 0x0ef4, 0x0eff, 0x0f05, 0x0f0b, 0x0f15, + 0x0cf6, 0x0d08, 0x0d11, 0x0d18, 0x0d1e, 0x0d29, 0x0d2e, 0x0d3f, + 0x0d43, 0x0d53, 0x0d5f, 0x0d69, 0x0d70, 0x0d75, 0x0d78, 0x0d7e, + 0x0d83, 0x0d99, 0x0da0, 0x0dab, 0x0daf, 0x0db5, 0x0dbd, 0x0dc9, + 0x0dd0, 0x0dd6, 0x0dda, 0x0de6, 0x0df2, 0x0df7, 0x0dfb, 0x0e03, + 0x0e0f, 0x0e1d, 0x0e24, 0x0e2a, 0x0e35, 0x0e42, 0x0e49, 0x0e4f, + 0x0e54, 0x0e5c, 0x0e63, 0x0e6f, 0x0e77, 0x0e83, 0x0e8a, 0x0e92, + 0x0e97, 0x0ea8, 0x0eb6, 0x0ebd, 0x0ecb, 0x0ecf, 0x0edc, 0x0ee2, + 0x0ee6, 0x0eea, 0x0ef1, 0x0ef7, 0x0f00, 0x0f05, 0x0f10, 0x0f16, // Entry 1C0 - 1FF - 0x0f19, 0x0f23, 0x0f2b, 0x0f33, 0x0f38, 0x0f3d, 0x0f42, 0x0f4b, - 0x0f55, 0x0f63, 0x0f6d, 0x0f77, 0x0f7c, 0x0f86, 0x0f9b, 0x0fae, - 0x0fba, 0x0fc5, 0x0fcf, 0x0fda, 0x0fe7, 0x0fef, 0x0ffb, 0x1008, - 0x1018, 0x1023, 0x103e, 0x1048, 0x104f, 0x105d, 0x1065, 0x106c, - 0x1071, 0x1077, 0x1082, 0x108c, 0x1093, 0x109d, 0x10a0, 0x10a7, - 0x10b0, 0x10bd, 0x10c4, 0x10c9, 0x10d0, 0x10da, 0x10e1, 0x10e6, - 0x10f2, 0x10fc, 0x1106, 0x1112, 0x1118, 0x111c, 0x1120, 0x112a, - 0x1135, 0x113e, 0x1149, 0x1153, 0x1158, 0x116b, 0x1171, 0x118e, + 0x0f1c, 0x0f26, 0x0f2a, 0x0f34, 0x0f3c, 0x0f44, 0x0f49, 0x0f4e, + 0x0f53, 0x0f5c, 0x0f66, 0x0f74, 0x0f7e, 0x0f88, 0x0f8d, 0x0f97, + 0x0fac, 0x0fbf, 0x0fcb, 0x0fd6, 0x0fe0, 0x0feb, 0x0ff8, 0x1000, + 0x100c, 0x1019, 0x1029, 0x1034, 0x104f, 0x1059, 0x1060, 0x106e, + 0x1076, 0x107d, 0x1082, 0x1088, 0x1093, 0x109d, 0x10a4, 0x10ae, + 0x10b1, 0x10b8, 0x10c1, 0x10ce, 0x10d5, 0x10da, 0x10e1, 0x10eb, + 0x10f2, 0x10f7, 0x1103, 0x110d, 0x1117, 0x1123, 0x1129, 0x112d, + 0x1131, 0x113b, 0x1146, 0x114f, 0x115a, 0x1164, 0x1169, 0x117c, // Entry 200 - 23F - 0x1195, 0x11a0, 0x11ac, 0x11b9, 0x11c6, 0x11cd, 0x11d5, 0x11df, - 0x11e4, 0x11e8, 0x11f6, 0x11fc, 0x1200, 0x1209, 0x1212, 0x121c, - 0x1223, 0x123e, 0x1242, 0x1247, 0x124b, 0x1251, 0x1256, 0x125b, - 0x125e, 0x126b, 0x1276, 0x1281, 0x1288, 0x128f, 0x1296, 0x12a1, - 0x12af, 0x12b5, 0x12bb, 0x12c5, 0x12ce, 0x12d5, 0x12dc, 0x12e6, - 0x12ed, 0x12f6, 0x130c, 0x1316, 0x1320, 0x1327, 0x132b, 0x132e, - 0x1337, 0x133f, 0x134c, 0x135a, 0x1361, 0x1366, 0x136b, 0x137a, - 0x1380, 0x1385, 0x138a, 0x1392, 0x1394, 0x13a0, 0x13ab, 0x13af, + 0x1182, 0x119f, 0x11a6, 0x11b1, 0x11bd, 0x11ca, 0x11d7, 0x11de, + 0x11e6, 0x11f0, 0x11f5, 0x11f9, 0x1207, 0x120d, 0x1211, 0x121a, + 0x1223, 0x122d, 0x1234, 0x124f, 0x1253, 0x1258, 0x125c, 0x1262, + 0x1267, 0x126c, 0x126f, 0x127c, 0x1287, 0x1292, 0x1299, 0x12a0, + 0x12a7, 0x12b2, 0x12c0, 0x12c6, 0x12cc, 0x12d6, 0x12df, 0x12e6, + 0x12ed, 0x12f7, 0x12fe, 0x1307, 0x131d, 0x1327, 0x1331, 0x1338, + 0x134a, 0x134d, 0x1356, 0x135e, 0x136b, 0x1379, 0x1380, 0x1385, + 0x138a, 0x1399, 0x139f, 0x13a4, 0x13a9, 0x13b1, 0x13b3, 0x13bf, // Entry 240 - 27F - 0x13b2, 0x13bb, 0x13c2, 0x13c7, 0x13d0, 0x13dc, 0x13e7, 0x13f4, - 0x1400, 0x1406, 0x140f, 0x1413, 0x1426, 0x142a, 0x143f, 0x143f, - 0x1458, 0x146d, 0x1483, 0x1497, 0x14aa, 0x14c1, 0x14de, 0x14f4, - 0x150a, 0x150a, 0x1522, 0x1538, 0x1548, 0x1551, 0x156e, 0x1589, - 0x1593, 0x15a2, 0x15af, 0x15c7, 0x15e0, -} // Size: 1250 bytes - -const elLangStr string = "" + // Size: 9051 bytes - "ΑφάρΑμπχαζικάΑβεστάνΑφρικάανςΑκάνΑμαρικάΑραγκονικάΑραβικάΑσαμεζικάΆβαρικ" + - "ΑϊμάραΑζερμπαϊτζανικάΜπασκίρΛευκορωσικάΒουλγαρικάΜπισλάμαΜπαμπάραΜπενγκ" + - "άλιΘιβετιανάΒρετονικάΒοσνιακάΚαταλανικάΤσετσενικάΚαμόρροΚορσικανικάΚριΤ" + - "σεχικάΕκκλησιαστικά ΣλαβικάΤσουβασικάΟυαλικάΔανικάΓερμανικάΝτιβέχιΝτζόν" + - "γκχαΓιΕλληνικάΑγγλικάΕσπεράντοΙσπανικάΕσθονικάΒασκικάΠερσικάΦουλάχΦινλα" + - "νδικάΦίτζιΦαρόεΓαλλικάΔυτικά ΦριζιανάΙρλανδικάΣκωτικά ΚελτικάΓαλικιανάΓ" + - "κουαρανίΓκουγιαράτιΜανξΧάουσαΕβραϊκάΧίντιΧίρι ΜότουΚροατικάΑϊτιανάΟυγγρ" + - "ικάΑρμενικάΧερέροΙντερλίνγκουαΙνδονησιακάΙντερλίνγκουεΊγκμποΣικουάν ΓιΙ" + - "νουπιάκΊντοΙσλανδικάΙταλικάΙνουκτιτούτΙαπωνικάΙαβανεζικάΓεωργιανάΚονγκό" + - "ΚικούγιουΚουανιγιάμαΚαζακικάΚαλαάλισουτΚαμποτζιανάΚανάνταΚορεατικάΚανού" + - "ριΚασμίριΚουρδικάΚόμιΚόρνιςΚυργιζικάΛατινικάΛουξεμβουργιανάΓκάνταΛιμβου" + - "ργιανάΛινγκάλαΛαοθιανάΛιθουανικάΛούμπα-ΚατάνγκαΛετονικάΜαλαγάσιΜάρσαλΜά" + - "οριΣλαβομακεδονικάΜαλαγιαλάμΜογγολικάΜαράθιΜαλάιΜαλτεζικάΒιρμανικάΝαούρ" + - "ουΒόρεια ΝτεμπέλεΝεπάλιΝτόνγκαΟλλανδικάΝορβηγικά ΝινόρσκΝορβηγικά Μποκμ" + - "άλΝότια ΝτέμπελεΝάβαχοΝιάντζαΟξιτανικάΟζιβίγουαΟρόμοΟρίγιαΟσετικάΠαντζα" + - "πικάΠάλιΠολωνικάΠάστοΠορτογαλικάΚετσούαΡομανικάΡούντιΡουμανικάΡωσικάΚιν" + - "ιαρβάνταΣανσκριτικάΣαρδινικάΣίντιΒόρεια ΣάμιΣάνγκοΣινχαλεζικάΣλοβακικάΣ" + - "λοβενικάΣαμόανΣχόναΣομάλιΑλβανικάΣερβικάΣουάτιΝότια ΣόθοΣουνδανικάΣουηδ" + - "ικάΣουαχίλιΤαμίλΤελούγκουΤατζικικάΤαϊλανδικάΤιγκρινικάΤουρκμενικάΤσουάν" + - "αΤονγκανικάΤουρκικάΤσόνγκαΤατάρΤαϊτιανάΟυιγουρικάΟυκρανικάΟυρντούΟυζμπε" + - "κικάΒένδαΒιετναμικάΒόλαπικΓουαλούνΓουόλοφΖόσαΓίντιςΓιορούμπαΖουάνγκΚινε" + - "ζικάΖουλούΑχινίζΑκολίΑντάνγκμεΑντιγκέαΑφριχίλιΑγκέμΑϊνούΑκάντιανΑλούτΝό" + - "τια ΑλαταϊκάΠαλαιά ΑγγλικάΑνγκικάΑραμαϊκάΑρουκάνιανΑράπαχοΑραγουάκΆσουΑ" + - "στουριανάΑγουαντίΜπαλούτσιΜπαλινίζΜπάσαΜπαμούνΓκομάλαΜπέζαΜπέμπαΜπέναΜπ" + - "αφούτΔυτικά ΜπαλοχικάΜποζπούριΜπικόλΜπίνιΚομΣικσίκαΜπρατζΜπόντοΑκόσιΜπο" + - "υριάτΜπουγκίζΜπουλούΜπλινΜεντούμπαΚάντοΚαρίμπΚαγιούγκαΑτσάμΚεμπουάνοΤσί" + - "γκαΤσίμπτσαΤσαγκατάιΤσουκίζιΜάριΙδιωματικά ΣινούκΤσοκτάουΤσίπιουανΤσερό" + - "κιΣεγιένΚουρδικά ΣοράνιΚοπτικάΤουρκικά ΚριμαίαςΚρεολικά Γαλλικά Σεϋχελλ" + - "ώνΚασούμπιανΝτακόταΝτάργκουαΤάιταΝτέλαγουερΣλαβικάΝτόγκριμπΝτίνκαΖάρμαΝ" + - "τόγκριΓλώσσα Κάτω ΛουσατίαςΝτουάλαΜέσα ΟλλανδικάΤζόλα-ΦόνιΝτογιούλαΝταζ" + - "άγκαΈμπουΕφίκΑρχαία ΑιγυπτιακάΕκατζούκΕλαμάιτΜέσα ΑγγλικάΕγουόντοΦανγκΦ" + - "ιλιππινεζικάΦονΜέσα ΓαλλικάΠαλαιά ΓαλλικάΒόρεια ΦριζιανάΑνατολικά Φριζι" + - "ανάΦριούλιανΓκαΓκαγκάουζΓκάγιοΓκμπάγιαΓκιζΓκιλμπερτίζΜέσα Άνω Γερμανικά" + - "Παλαιά Άνω ΓερμανικάΓκόντιΓκοροντάλοΓοτθικάΓκρίμποΑρχαία ΕλληνικάΓερμαν" + - "ικά ΕλβετίαςΓκούσιΓκουίτσινΧάινταΧαβανεζικάΧιλιγκαγιόνΧιτίτεΧμονγκΓλώσσ" + - "α Άνω ΛουσατίαςΧούπαΙμπάνΙμπίμπιοΙλόκοΙνγκούςΛόζμπανΝγκόμπαΜάχαμεΙουδαϊ" + - "κά-ΠερσικάΙουδαϊκά-ΑραβικάΚάρα-ΚαλπάκΚαμπίλεΚατσίνΤζουΚάμπαΚάουιΚαμπαρν" + - "τιανάΚανέμπουΤιάπΜακόντεΓλώσσα του Πράσινου ΑκρωτηρίουΚόροΚάσιΚοτανικάΚ" + - "όιρα ΤσίνιΚάκοΚαλεντζίνΚιμπούντουΚόμι-ΠερμιάκΚονκάνιΚοσραενικάΚπέλεΚαρα" + - "τσάι-ΜπαλκάρΚαρελιακάΚουρούχΣάμπαλαΜπάφιαΚολωνικάΚουμγιούκΚουτενάιΛαδίν" + - "οΛάνγκιΛάχδαΛάμπαΛαζγκιάνΛακόταΜόνγκοΛόζιΒόρεια ΛούριΛούμπα-ΛουλούαΛουι" + - "σένοΛούνταΛούοΛουσάιΛουχίαΜαντουρίζΜάφαΜαγκάχιΜαϊτχίλιΜακαζάρΜαντίνγκοΜ" + - "ασάιΜάμπαΜόκσαΜανδάρΜέντεΜερούΜορίσιενΜέσα ΙρλανδικάΜακούβα-ΜέτοΜετάΜικ" + - "μάκΜινανγκαμπάουΜαντσούΜανιπούριΜοχόκΜόσιΜουντάνγκΠολλαπλές γλώσσεςΚρικ" + - "ΜιραντεζικάΜαργουάριΜιένεΈρζυαΜαζαντεράνιΝαπολιτανικάΝάμαΚάτω Γερμανικά" + - "ΝεγουάριΝίαςΝιούεανΚβάσιοΝγκιεμπούνΝογκάιΠαλαιά ΝορβηγικάΝ’ΚοΒόρεια Σόθ" + - "οΝουέρΚλασικά ΝεουάριΝιαμγουέζιΝιανκόλεΝιόροΝζίμαΟσάζΟθωμανικά Τουρκικά" + - "ΠανγκασινάνΠαχλάβιΠαμπάνγκαΠαπιαμέντοΠαλάουανΠίτζιν ΝιγηρίαςΑρχαία Περσ" + - "ικάΦοινικικάΠομπηικάΠρωσικάΠαλαιά ΠροβανσάλΚισέΡαζασθάνιΡαπανούιΡαροτον" + - "γκάνΡόμποΡομανίΑρομανικάΡουάΣαντάγουεΓιακούτΣαμαρίτικα ΑραμαϊκάΣαμπούρο" + - "υΣασάκΣαντάλιΝγκαμπέιΣάνγκουΣικελιανάΣκωτικάΝότια ΚουρδικάΣένεκαΣέναΣελ" + - "κούπΚοϊραμπόρο ΣένιΠαλαιά ΙρλανδικάΤασελχίτΣανΑραβικά του ΤσαντΣιντάμοΝ" + - "ότια ΣάμιΛούλε ΣάμιΙνάρι ΣάμιΣκολτ ΣάμιΣονίνκεΣογκντιένΣρανάν ΤόνγκοΣερ" + - "έρΣάχοΣουκούμαΣούσουΣουμερικάΚομόρριαΚλασικά ΣυριακάΣυριακάΤίμνεΤέσοΤερ" + - "ένοΤέτουμΤίγκρεΤιβΤοκελάουΚλίνγκονΤλίνγκιτΤαμασέκΝιάσα ΤόνγκαΤοκ ΠισίνΤ" + - "αρόκοΤσίμσιανΤουμπούκαΤουβαλούΤασαβάκΤουβινικάΤαμαζίτ Κεντρικού ΜαρόκοΟ" + - "υντμούρτΟυγκαριτικάΟυμπούντουΡουτΒάιΒότικΒούντζοΒάλσερΓουάλαμοΓουάρειΓο" + - "υασόΓουαρλπίριwuuΚαλμίκΣόγκαΓιάοΓιαπίζΓιανγκμπένΓιέμπαΚαντονέζικαΖάποτε" + - "κΣύμβολα BlissΖενάγκαΤυπικά Ταμαζίγκτ ΜαρόκουΖούνιΧωρίς γλωσσολογικό πε" + - "ριεχόμενοΖάζαΣύγχρονα Τυπικά ΑραβικάΓερμανικά ΑυστρίαςΆνω Γερμανικά Ελβ" + - "ετίαςΑγγλικά ΑυστραλίαςΑγγλικά ΚαναδάΑγγλικά Ηνωμένου ΒασιλείουΑγγλικά " + - "ΑμερικήςΙσπανικά Λατινικής ΑμερικήςΙσπανικά ΕυρώπηςΙσπανικά ΜεξικούΓαλλ" + - "ικά ΚαναδάΓαλλικά ΕλβετίαςΚάτω Γερμανικά ΟλλανδίαςΦλαμανδικάΠορτογαλικά" + - " ΒραζιλίαςΠορτογαλικά ΕυρώπηςΜολδαβικάΣερβοκροατικάΚονγκό ΣουαχίλιΑπλοπο" + - "ιημένα ΚινεζικάΠαραδοσιακά Κινεζικά" - -var elLangIdx = []uint16{ // 613 elements + 0x13ca, 0x13ce, 0x13d1, 0x13da, 0x13e1, 0x13e6, 0x13ef, 0x13fb, + 0x1406, 0x1413, 0x141f, 0x1425, 0x142e, 0x1432, 0x1445, 0x1449, + 0x145e, 0x145e, 0x1477, 0x148c, 0x14a2, 0x14b6, 0x14c9, 0x14e0, + 0x14fd, 0x1513, 0x1529, 0x1529, 0x1541, 0x1557, 0x1567, 0x1570, + 0x158d, 0x15a8, 0x15b2, 0x15c1, 0x15ce, 0x15e6, 0x15ff, +} // Size: 1254 bytes + +const elLangStr string = "" + // Size: 9133 bytes + "ΑφάρΑμπχαζικάΑβεστάνΑφρικάανςΑκάνΑμχαρικάΑραγονικάΑραβικάΑσαμικάΑβαρικάΑ" + + "ϊμάραΑζερμπαϊτζανικάΜπασκίρΛευκορωσικάΒουλγαρικάΜπισλάμαΜπαμπάραΒεγγαλι" + + "κάΘιβετιανάΒρετονικάΒοσνιακάΚαταλανικάΤσετσενικάΤσαμόροΚορσικανικάΚριΤσ" + + "εχικάΕκκλησιαστικά ΣλαβικάΤσουβασικάΟυαλικάΔανικάΓερμανικάΝτιβέχιΝτζόνγ" + + "κχαΈουεΕλληνικάΑγγλικάΕσπεράντοΙσπανικάΕσθονικάΒασκικάΠερσικάΦουλάΦινλα" + + "νδικάΦίτζιΦεροϊκάΓαλλικάΔυτικά ΦριζικάΙρλανδικάΣκωτικά ΚελτικάΓαλικιανά" + + "ΓκουαρανίΓκουγιαράτιΜανξΧάουσαΕβραϊκάΧίντιΧίρι ΜότουΚροατικάΑϊτιανάΟυγγ" + + "ρικάΑρμενικάΧερέροΙντερλίνγκουαΙνδονησιακάΙντερλίνγκουεΊγκμποΣίτσουαν Γ" + + "ιΙνουπιάκΊντοΙσλανδικάΙταλικάΙνούκτιτουτΙαπωνικάΙαβανικάΓεωργιανάΚονγκό" + + "ΚικούγιουΚουανιάμαΚαζακικάΚαλαάλισουτΧμερΚανάνταΚορεατικάΚανούριΚασμιρι" + + "κάΚουρδικάΚόμιΚορνουαλικάΚιργιζικάΛατινικάΛουξεμβουργιανάΓκάνταΛιμβουργ" + + "ιανάΛινγκάλαΛαοτινάΛιθουανικάΛούμπα-ΚατάνγκαΛετονικάΜαλγασικάΜαρσαλέζικ" + + "αΜαορίΣλαβομακεδονικάΜαλαγιαλαμικάΜογγολικάΜαραθικάΜαλαισιανάΜαλτεζικάΒ" + + "ιρμανικάΝαούρουΒόρεια ΝτεμπέλεΝεπαλικάΝτόνγκαΟλλανδικάΝορβηγικά Νινόρσκ" + + "Νορβηγικά ΜποκμάλΝότια ΝτεμπέλεΝάβαχοΝιάντζαΟξιτανικάΟζιβίγουαΟρόμοΌντι" + + "αΟσετικάΠαντζαπικάΠάλιΠολωνικάΠάστοΠορτογαλικάΚέτσουαΡομανικάΡούντιΡουμ" + + "ανικάΡωσικάΚινιαρουάνταΣανσκριτικάΣαρδηνιακάΣίντιΒόρεια ΣάμιΣάνγκοΣινχα" + + "λεζικάΣλοβακικάΣλοβενικάΣαμοανάΣόναΣομαλικάΑλβανικάΣερβικάΣουάτιΝότια Σ" + + "όθοΣουνδανικάΣουηδικάΣουαχίλιΤαμιλικάΤελούγκουΤατζικικάΤαϊλανδικάΤιγκρι" + + "νικάΤουρκμενικάΤσουάναΤονγκανικάΤουρκικάΤσόνγκαΤαταρικάΤαϊτιανάΟυιγκουρ" + + "ικάΟυκρανικάΟυρντούΟυζμπεκικάΒένταΒιετναμικάΒολαπιούκΒαλλωνικάΓουόλοφΚό" + + "σαΓίντιςΓιορούμπαΖουάνγκΚινεζικάΖουλούΑχινίζΑκολίΑντάνγκμεΑντιγκέαΑφριχ" + + "ίλιΑγκέμΑϊνούΑκάντιανΑλεούτΝότια ΑλτάιΠαλαιά ΑγγλικάΑνγκικάΑραμαϊκάΑραο" + + "υκανικάΑραπάχοΑραγουάκΆσουΑστουριανάΑγουαντίΜπαλούτσιΜπαλινίζΜπάσαΜπαμο" + + "ύνΓκομάλαΜπέζαΜπέμπαΜπέναΜπαφούτΔυτικά ΜπαλοχικάΜποζπούριΜπικόλΜπίνιΚομ" + + "ΣικσίκαΜπρατζΜπόντοΑκόσιΜπουριάτΜπουγκίζΜπουλούΜπλινΜεντούμπαΚάντοΚαρίμ" + + "πΚαγιούγκαΑτσάμΣεμπουάνοΤσίγκαΤσίμπτσαΤσαγκατάιΤσουκίζιΜάριΙδιωματικά Σ" + + "ινούκΤσοκτάουΤσίπιουανΤσερόκιΣεγιένΚουρδικά ΣοράνιΚοπτικάΤουρκικά Κριμα" + + "ίαςΚρεολικά Γαλλικά ΣεϋχελλώνΚασούμπιανΝτακόταΝτάργκουαΤάιταΝτέλαγουερΣ" + + "λαβικάΝτόγκριμπΝτίνκαΖάρμαΝτόγκριΚάτω ΣορβικάΝτουάλαΜέσα ΟλλανδικάΤζόλα" + + "-ΦόνιΝτογιούλαΝταζάγκαΈμπουΕφίκΑρχαία ΑιγυπτιακάΕκατζούκΕλαμάιτΜέσα Αγγλ" + + "ικάΕγουόντοΦανγκΦιλιππινικάΦονΓαλλικά (Λουιζιάνα)Μέσα ΓαλλικάΠαλαιά Γαλ" + + "λικάΒόρεια ΦριζιανάΑνατολικά ΦριζιανάΦριουλανικάΓκαΓκαγκάουζΓκάγιοΓκμπά" + + "γιαΓκιζΓκιλμπερτίζΜέσα Άνω ΓερμανικάΠαλαιά Άνω ΓερμανικάΓκόντιΓκοροντάλ" + + "οΓοτθικάΓκρίμποΑρχαία ΕλληνικάΓερμανικά ΕλβετίαςΓκούσιΓκουίτσινΧάινταΧα" + + "βαϊκάΧιλιγκαϊνόνΧιτίτεΧμονγκΆνω ΣορβικάΧούπαΙμπάνΙμπίμπιοΙλόκοΙνγκούςΛό" + + "ζμπανΝγκόμπαΜατσάμεΙουδαϊκά-ΠερσικάΙουδαϊκά-ΑραβικάΚάρα-ΚαλπάκΚαμπίλεΚα" + + "τσίνΤζουΚάμπαΚάουιΚαμπαρντιανάΚανέμπουΤιάπΜακόντεΓλώσσα του Πράσινου Ακ" + + "ρωτηρίουΚόροΚάσιΚοτανικάΚόιρα ΤσίνιΚάκοΚαλεντζίνΚιμπούντουΚόμι-ΠερμιάκΚ" + + "ονκανικάΚοσραενικάΚπέλεΚαρατσάι-ΜπαλκάρΚαρελικάΚουρούχΣαμπάλαΜπάφιαΚολω" + + "νικάΚουμγιούκΚουτενάιΛαδίνοΛάνγκιΛάχδαΛάμπαΛεζγκικάΛακόταΜόνγκοΚρεολικά" + + " (Λουιζιάνα)ΛόζιΒόρεια ΛούριΛούμπα-ΛουλούαΛουισένοΛούνταΛούοΜίζοΛουχίαΜα" + + "ντουρίζΜάφαΜαγκάχιΜαϊτχίλιΜακασάρΜαντίνγκοΜασάιΜάμπαΜόκσαΜανδάρΜέντεΜέρ" + + "ουΜορισιένΜέσα ΙρλανδικάΜακούβα-ΜέτοΜέταΜικμάκΜινανγκαμπάουΜαντσούΜανιπ" + + "ούριΜοχόκΜόσιΜουντάνγκΠολλαπλές γλώσσεςΚρικΜιραντεζικάΜαργουάριΜιένεΈρζ" + + "υαΜαζαντεράνιΝαπολιτανικάΝάμαΚάτω ΓερμανικάΝεγουάριΝίαςΝιούεΚβάσιοΝγκιε" + + "μπούνΝογκάιΠαλαιά ΝορβηγικάΝ’ΚοΒόρεια ΣόθοΝούερΚλασικά ΝεουάριΝιαμγουέζ" + + "ιΝιανκόλεΝιόροΝζίμαΟσάζΟθωμανικά ΤουρκικάΠανγκασινάνΠαχλάβιΠαμπάνγκαΠαπ" + + "ιαμέντοΠαλάουανΠίτζιν ΝιγηρίαςΑρχαία ΠερσικάΦοινικικάΠομπηικάΠρωσικάΠαλ" + + "αιά ΠροβανσάλΚιτσέΡαζασθάνιΡαπανούιΡαροτονγκάνΡόμποΡομανίΑρομανικάΡουάΣ" + + "αντάγουεΣαχάΣαμαρίτικα ΑραμαϊκάΣαμπούρουΣασάκΣαντάλιΝγκαμπέιΣάνγκουΣικε" + + "λικάΣκωτικάΝότια ΚουρδικάΣένεκαΣέναΣελκούπΚοϊραμπόρο ΣένιΠαλαιά Ιρλανδι" + + "κάΤασελχίτΣανΑραβικά του ΤσαντΣιντάμοΝότια ΣάμιΛούλε ΣάμιΙνάρι ΣάμιΣκολ" + + "τ ΣάμιΣονίνκεΣογκντιένΣρανάν ΤόνγκοΣερέρΣάχοΣουκούμαΣούσουΣουμερικάΚομο" + + "ριανάΚλασικά ΣυριακάΣυριακάΤίμνεΤέσοΤερένοΤέτουμΤίγκρεΤιβΤοκελάουΚλίνγκ" + + "ονΤλίνγκιτΤαμασέκΝιάσα ΤόνγκαΤοκ ΠισίνΤαρόκοΤσίμσιανΤουμπούκαΤουβαλούΤα" + + "σαβάκΤουβινικάΤαμαζίτ Κεντρικού ΜαρόκοΟυντμούρτΟυγκαριτικάΟυμπούντουΆγν" + + "ωστη γλώσσαΒάιΒότικΒούντζοΒάλσερΓουολάιταΓουάραϊΓουασόΓουαρλπίριwuuΚαλμ" + + "ίκΣόγκαΓιάοΓιαπίζΓιανγκμπένΓιέμπαΚαντονέζικαΖάποτεκΣύμβολα BlissΖενάγκα" + + "Τυπικά Ταμαζίτ ΜαρόκουΖούνιΧωρίς γλωσσολογικό περιεχόμενοΖάζαΣύγχρονα Τ" + + "υπικά ΑραβικάΓερμανικά ΑυστρίαςΥψηλά Γερμανικά ΕλβετίαςΑγγλικά Αυστραλί" + + "αςΑγγλικά ΚαναδάΑγγλικά ΒρετανίαςΑγγλικά ΑμερικήςΙσπανικά Λατινικής Αμε" + + "ρικήςΙσπανικά ΕυρώπηςΙσπανικά ΜεξικούΓαλλικά ΚαναδάΓαλλικά ΕλβετίαςΚάτω" + + " Γερμανικά ΟλλανδίαςΦλαμανδικάΠορτογαλικά ΒραζιλίαςΠορτογαλικά ΕυρώπηςΜο" + + "λδαβικάΣερβοκροατικάΚονγκό ΣουαχίλιΑπλοποιημένα ΚινεζικάΠαραδοσιακά Κιν" + + "εζικά" + +var elLangIdx = []uint16{ // 615 elements // Entry 0 - 3F - 0x0000, 0x0008, 0x001a, 0x0028, 0x003a, 0x0042, 0x0050, 0x0064, - 0x0072, 0x0084, 0x0090, 0x009c, 0x00ba, 0x00c8, 0x00de, 0x00f2, - 0x0102, 0x0112, 0x0124, 0x0136, 0x0148, 0x0158, 0x016c, 0x0180, - 0x018e, 0x01a4, 0x01aa, 0x01b8, 0x01e1, 0x01f5, 0x0203, 0x020f, - 0x0221, 0x022f, 0x0241, 0x0245, 0x0255, 0x0263, 0x0275, 0x0285, - 0x0295, 0x02a3, 0x02b1, 0x02bd, 0x02d1, 0x02db, 0x02e5, 0x02f3, - 0x0310, 0x0322, 0x033f, 0x0351, 0x0363, 0x0379, 0x0381, 0x038d, - 0x039b, 0x03a5, 0x03b8, 0x03c8, 0x03d6, 0x03e6, 0x03f6, 0x0402, + 0x0000, 0x0008, 0x001a, 0x0028, 0x003a, 0x0042, 0x0052, 0x0064, + 0x0072, 0x0080, 0x008e, 0x009a, 0x00b8, 0x00c6, 0x00dc, 0x00f0, + 0x0100, 0x0110, 0x0122, 0x0134, 0x0146, 0x0156, 0x016a, 0x017e, + 0x018c, 0x01a2, 0x01a8, 0x01b6, 0x01df, 0x01f3, 0x0201, 0x020d, + 0x021f, 0x022d, 0x023f, 0x0247, 0x0257, 0x0265, 0x0277, 0x0287, + 0x0297, 0x02a5, 0x02b3, 0x02bd, 0x02d1, 0x02db, 0x02e9, 0x02f7, + 0x0312, 0x0324, 0x0341, 0x0353, 0x0365, 0x037b, 0x0383, 0x038f, + 0x039d, 0x03a7, 0x03ba, 0x03ca, 0x03d8, 0x03e8, 0x03f8, 0x0404, // Entry 40 - 7F - 0x041c, 0x0432, 0x044c, 0x0458, 0x046b, 0x047b, 0x0483, 0x0495, - 0x04a3, 0x04b9, 0x04c9, 0x04dd, 0x04ef, 0x04fb, 0x050d, 0x0523, - 0x0533, 0x0549, 0x055f, 0x056d, 0x057f, 0x058d, 0x059b, 0x05ab, - 0x05b3, 0x05bf, 0x05d1, 0x05e1, 0x05ff, 0x060b, 0x0623, 0x0633, - 0x0643, 0x0657, 0x0674, 0x0684, 0x0694, 0x06a0, 0x06aa, 0x06c8, - 0x06dc, 0x06ee, 0x06fa, 0x0704, 0x0716, 0x0728, 0x0736, 0x0753, - 0x075f, 0x076d, 0x077f, 0x07a0, 0x07c1, 0x07dc, 0x07e8, 0x07f6, - 0x0808, 0x081a, 0x0824, 0x0830, 0x083e, 0x0852, 0x085a, 0x086a, + 0x041e, 0x0434, 0x044e, 0x045a, 0x046f, 0x047f, 0x0487, 0x0499, + 0x04a7, 0x04bd, 0x04cd, 0x04dd, 0x04ef, 0x04fb, 0x050d, 0x051f, + 0x052f, 0x0545, 0x054d, 0x055b, 0x056d, 0x057b, 0x058d, 0x059d, + 0x05a5, 0x05bb, 0x05cd, 0x05dd, 0x05fb, 0x0607, 0x061f, 0x062f, + 0x063d, 0x0651, 0x066e, 0x067e, 0x0690, 0x06a6, 0x06b0, 0x06ce, + 0x06e8, 0x06fa, 0x070a, 0x071e, 0x0730, 0x0742, 0x0750, 0x076d, + 0x077d, 0x078b, 0x079d, 0x07be, 0x07df, 0x07fa, 0x0806, 0x0814, + 0x0826, 0x0838, 0x0842, 0x084c, 0x085a, 0x086e, 0x0876, 0x0886, // Entry 80 - BF - 0x0874, 0x088a, 0x0898, 0x08a8, 0x08b4, 0x08c6, 0x08d2, 0x08e8, - 0x08fe, 0x0910, 0x091a, 0x092f, 0x093b, 0x0951, 0x0963, 0x0975, - 0x0981, 0x098b, 0x0997, 0x09a7, 0x09b5, 0x09c1, 0x09d4, 0x09e8, - 0x09f8, 0x0a08, 0x0a12, 0x0a24, 0x0a36, 0x0a4a, 0x0a5e, 0x0a74, - 0x0a82, 0x0a96, 0x0aa6, 0x0ab4, 0x0abe, 0x0ace, 0x0ae2, 0x0af4, - 0x0b02, 0x0b16, 0x0b20, 0x0b34, 0x0b42, 0x0b52, 0x0b60, 0x0b68, - 0x0b74, 0x0b86, 0x0b94, 0x0ba4, 0x0bb0, 0x0bbc, 0x0bc6, 0x0bd8, - 0x0be8, 0x0be8, 0x0bf8, 0x0c02, 0x0c0c, 0x0c1c, 0x0c1c, 0x0c26, + 0x0890, 0x08a6, 0x08b4, 0x08c4, 0x08d0, 0x08e2, 0x08ee, 0x0906, + 0x091c, 0x0930, 0x093a, 0x094f, 0x095b, 0x0971, 0x0983, 0x0995, + 0x09a3, 0x09ab, 0x09bb, 0x09cb, 0x09d9, 0x09e5, 0x09f8, 0x0a0c, + 0x0a1c, 0x0a2c, 0x0a3c, 0x0a4e, 0x0a60, 0x0a74, 0x0a88, 0x0a9e, + 0x0aac, 0x0ac0, 0x0ad0, 0x0ade, 0x0aee, 0x0afe, 0x0b14, 0x0b26, + 0x0b34, 0x0b48, 0x0b52, 0x0b66, 0x0b78, 0x0b8a, 0x0b98, 0x0ba0, + 0x0bac, 0x0bbe, 0x0bcc, 0x0bdc, 0x0be8, 0x0bf4, 0x0bfe, 0x0c10, + 0x0c20, 0x0c20, 0x0c30, 0x0c3a, 0x0c44, 0x0c54, 0x0c54, 0x0c60, // Entry C0 - FF - 0x0c26, 0x0c41, 0x0c5c, 0x0c6a, 0x0c7a, 0x0c8e, 0x0c8e, 0x0c9c, - 0x0c9c, 0x0c9c, 0x0cac, 0x0cac, 0x0cac, 0x0cb4, 0x0cb4, 0x0cc8, - 0x0cc8, 0x0cd8, 0x0cea, 0x0cfa, 0x0cfa, 0x0d04, 0x0d12, 0x0d12, - 0x0d20, 0x0d2a, 0x0d36, 0x0d36, 0x0d40, 0x0d4e, 0x0d4e, 0x0d6d, - 0x0d7f, 0x0d8b, 0x0d95, 0x0d95, 0x0d9b, 0x0da9, 0x0da9, 0x0da9, - 0x0db5, 0x0db5, 0x0dc1, 0x0dcb, 0x0ddb, 0x0deb, 0x0df9, 0x0e03, - 0x0e15, 0x0e1f, 0x0e2b, 0x0e3d, 0x0e47, 0x0e59, 0x0e65, 0x0e75, - 0x0e87, 0x0e97, 0x0e9f, 0x0ec0, 0x0ed0, 0x0ee2, 0x0ef0, 0x0efc, + 0x0c60, 0x0c75, 0x0c90, 0x0c9e, 0x0cae, 0x0cc4, 0x0cc4, 0x0cd2, + 0x0cd2, 0x0cd2, 0x0ce2, 0x0ce2, 0x0ce2, 0x0cea, 0x0cea, 0x0cfe, + 0x0cfe, 0x0d0e, 0x0d20, 0x0d30, 0x0d30, 0x0d3a, 0x0d48, 0x0d48, + 0x0d56, 0x0d60, 0x0d6c, 0x0d6c, 0x0d76, 0x0d84, 0x0d84, 0x0da3, + 0x0db5, 0x0dc1, 0x0dcb, 0x0dcb, 0x0dd1, 0x0ddf, 0x0ddf, 0x0ddf, + 0x0deb, 0x0deb, 0x0df7, 0x0e01, 0x0e11, 0x0e21, 0x0e2f, 0x0e39, + 0x0e4b, 0x0e55, 0x0e61, 0x0e73, 0x0e7d, 0x0e7d, 0x0e8f, 0x0e9b, + 0x0eab, 0x0ebd, 0x0ecd, 0x0ed5, 0x0ef6, 0x0f06, 0x0f18, 0x0f26, // Entry 100 - 13F - 0x0f19, 0x0f27, 0x0f27, 0x0f48, 0x0f7a, 0x0f8e, 0x0f9c, 0x0fae, - 0x0fb8, 0x0fcc, 0x0fda, 0x0fec, 0x0ff8, 0x1002, 0x1010, 0x1038, - 0x1038, 0x1046, 0x1061, 0x1074, 0x1086, 0x1096, 0x10a0, 0x10a8, - 0x10a8, 0x10c9, 0x10d9, 0x10e7, 0x10fe, 0x10fe, 0x110e, 0x110e, - 0x1118, 0x1132, 0x1132, 0x1138, 0x1138, 0x114f, 0x116a, 0x116a, - 0x1187, 0x11aa, 0x11bc, 0x11c2, 0x11d4, 0x11d4, 0x11e0, 0x11f0, - 0x11f0, 0x11f8, 0x120e, 0x120e, 0x1230, 0x1256, 0x1256, 0x1262, - 0x1276, 0x1284, 0x1292, 0x12af, 0x12d2, 0x12d2, 0x12d2, 0x12de, + 0x0f32, 0x0f4f, 0x0f5d, 0x0f5d, 0x0f7e, 0x0fb0, 0x0fc4, 0x0fd2, + 0x0fe4, 0x0fee, 0x1002, 0x1010, 0x1022, 0x102e, 0x1038, 0x1046, + 0x105d, 0x105d, 0x106b, 0x1086, 0x1099, 0x10ab, 0x10bb, 0x10c5, + 0x10cd, 0x10cd, 0x10ee, 0x10fe, 0x110c, 0x1123, 0x1123, 0x1133, + 0x1133, 0x113d, 0x1153, 0x1153, 0x1159, 0x117c, 0x1193, 0x11ae, + 0x11ae, 0x11cb, 0x11ee, 0x1204, 0x120a, 0x121c, 0x121c, 0x1228, + 0x1238, 0x1238, 0x1240, 0x1256, 0x1256, 0x1278, 0x129e, 0x129e, + 0x12aa, 0x12be, 0x12cc, 0x12da, 0x12f7, 0x131a, 0x131a, 0x131a, // Entry 140 - 17F - 0x12f0, 0x12fc, 0x12fc, 0x1310, 0x1310, 0x1326, 0x1332, 0x133e, - 0x1364, 0x1364, 0x136e, 0x1378, 0x1388, 0x1392, 0x13a0, 0x13a0, - 0x13a0, 0x13ae, 0x13bc, 0x13c8, 0x13e7, 0x1406, 0x1406, 0x141b, - 0x1429, 0x1435, 0x143d, 0x1447, 0x1451, 0x1469, 0x1479, 0x1481, - 0x148f, 0x14c8, 0x14c8, 0x14d0, 0x14d0, 0x14d8, 0x14e8, 0x14fd, - 0x14fd, 0x14fd, 0x1505, 0x1517, 0x152b, 0x1542, 0x1550, 0x1564, - 0x156e, 0x158d, 0x158d, 0x158d, 0x159f, 0x15ad, 0x15bb, 0x15c7, - 0x15d7, 0x15e9, 0x15f9, 0x1605, 0x1611, 0x161b, 0x1625, 0x1635, + 0x1326, 0x1338, 0x1344, 0x1344, 0x1352, 0x1352, 0x1368, 0x1374, + 0x1380, 0x1395, 0x1395, 0x139f, 0x13a9, 0x13b9, 0x13c3, 0x13d1, + 0x13d1, 0x13d1, 0x13df, 0x13ed, 0x13fb, 0x141a, 0x1439, 0x1439, + 0x144e, 0x145c, 0x1468, 0x1470, 0x147a, 0x1484, 0x149c, 0x14ac, + 0x14b4, 0x14c2, 0x14fb, 0x14fb, 0x1503, 0x1503, 0x150b, 0x151b, + 0x1530, 0x1530, 0x1530, 0x1538, 0x154a, 0x155e, 0x1575, 0x1587, + 0x159b, 0x15a5, 0x15c4, 0x15c4, 0x15c4, 0x15d4, 0x15e2, 0x15f0, + 0x15fc, 0x160c, 0x161e, 0x162e, 0x163a, 0x1646, 0x1650, 0x165a, // Entry 180 - 1BF - 0x1635, 0x1635, 0x1635, 0x1641, 0x1641, 0x164d, 0x1655, 0x166c, - 0x166c, 0x1687, 0x1697, 0x16a3, 0x16ab, 0x16b7, 0x16c3, 0x16c3, - 0x16c3, 0x16d5, 0x16dd, 0x16eb, 0x16fb, 0x1709, 0x171b, 0x1725, - 0x172f, 0x1739, 0x1745, 0x174f, 0x1759, 0x1769, 0x1784, 0x179b, - 0x17a3, 0x17af, 0x17c9, 0x17d7, 0x17e9, 0x17f3, 0x17fb, 0x17fb, - 0x180d, 0x182e, 0x1836, 0x184c, 0x185e, 0x185e, 0x1868, 0x1872, - 0x1888, 0x1888, 0x18a0, 0x18a8, 0x18c3, 0x18d3, 0x18db, 0x18e9, - 0x18e9, 0x18f5, 0x1909, 0x1915, 0x1934, 0x1934, 0x193d, 0x1952, + 0x166a, 0x166a, 0x166a, 0x166a, 0x1676, 0x1676, 0x1682, 0x16a7, + 0x16af, 0x16c6, 0x16c6, 0x16e1, 0x16f1, 0x16fd, 0x1705, 0x170d, + 0x1719, 0x1719, 0x1719, 0x172b, 0x1733, 0x1741, 0x1751, 0x175f, + 0x1771, 0x177b, 0x1785, 0x178f, 0x179b, 0x17a5, 0x17af, 0x17bf, + 0x17da, 0x17f1, 0x17f9, 0x1805, 0x181f, 0x182d, 0x183f, 0x1849, + 0x1851, 0x1851, 0x1863, 0x1884, 0x188c, 0x18a2, 0x18b4, 0x18b4, + 0x18be, 0x18c8, 0x18de, 0x18de, 0x18f6, 0x18fe, 0x1919, 0x1929, + 0x1931, 0x193b, 0x193b, 0x1947, 0x195b, 0x1967, 0x1986, 0x1986, // Entry 1C0 - 1FF - 0x195c, 0x1979, 0x198d, 0x199d, 0x19a7, 0x19b1, 0x19b9, 0x19dc, - 0x19f2, 0x1a00, 0x1a12, 0x1a26, 0x1a36, 0x1a36, 0x1a53, 0x1a53, - 0x1a53, 0x1a6e, 0x1a6e, 0x1a80, 0x1a80, 0x1a80, 0x1a90, 0x1a9e, - 0x1abd, 0x1ac5, 0x1ac5, 0x1ad7, 0x1ae7, 0x1afd, 0x1afd, 0x1afd, - 0x1b07, 0x1b13, 0x1b13, 0x1b13, 0x1b13, 0x1b25, 0x1b2d, 0x1b3f, - 0x1b4d, 0x1b72, 0x1b84, 0x1b8e, 0x1b9c, 0x1b9c, 0x1bac, 0x1bba, - 0x1bcc, 0x1bda, 0x1bda, 0x1bf5, 0x1c01, 0x1c09, 0x1c09, 0x1c17, - 0x1c34, 0x1c53, 0x1c53, 0x1c63, 0x1c69, 0x1c89, 0x1c97, 0x1c97, + 0x198f, 0x19a4, 0x19ae, 0x19cb, 0x19df, 0x19ef, 0x19f9, 0x1a03, + 0x1a0b, 0x1a2e, 0x1a44, 0x1a52, 0x1a64, 0x1a78, 0x1a88, 0x1a88, + 0x1aa5, 0x1aa5, 0x1aa5, 0x1ac0, 0x1ac0, 0x1ad2, 0x1ad2, 0x1ad2, + 0x1ae2, 0x1af0, 0x1b0f, 0x1b19, 0x1b19, 0x1b2b, 0x1b3b, 0x1b51, + 0x1b51, 0x1b51, 0x1b5b, 0x1b67, 0x1b67, 0x1b67, 0x1b67, 0x1b79, + 0x1b81, 0x1b93, 0x1b9b, 0x1bc0, 0x1bd2, 0x1bdc, 0x1bea, 0x1bea, + 0x1bfa, 0x1c08, 0x1c18, 0x1c26, 0x1c26, 0x1c41, 0x1c4d, 0x1c55, + 0x1c55, 0x1c63, 0x1c80, 0x1c9f, 0x1c9f, 0x1caf, 0x1cb5, 0x1cd5, // Entry 200 - 23F - 0x1c97, 0x1caa, 0x1cbd, 0x1cd0, 0x1ce3, 0x1cf1, 0x1d03, 0x1d1c, - 0x1d26, 0x1d2e, 0x1d2e, 0x1d3e, 0x1d4a, 0x1d5c, 0x1d6c, 0x1d89, - 0x1d97, 0x1d97, 0x1d97, 0x1da1, 0x1da9, 0x1db5, 0x1dc1, 0x1dcd, - 0x1dd3, 0x1de3, 0x1de3, 0x1df3, 0x1e03, 0x1e03, 0x1e11, 0x1e28, - 0x1e39, 0x1e39, 0x1e45, 0x1e45, 0x1e55, 0x1e55, 0x1e67, 0x1e77, - 0x1e85, 0x1e97, 0x1ec5, 0x1ed7, 0x1eed, 0x1f01, 0x1f09, 0x1f0f, - 0x1f0f, 0x1f0f, 0x1f0f, 0x1f0f, 0x1f19, 0x1f19, 0x1f27, 0x1f33, - 0x1f43, 0x1f51, 0x1f5d, 0x1f71, 0x1f74, 0x1f80, 0x1f80, 0x1f8a, + 0x1ce3, 0x1ce3, 0x1ce3, 0x1cf6, 0x1d09, 0x1d1c, 0x1d2f, 0x1d3d, + 0x1d4f, 0x1d68, 0x1d72, 0x1d7a, 0x1d7a, 0x1d8a, 0x1d96, 0x1da8, + 0x1dba, 0x1dd7, 0x1de5, 0x1de5, 0x1de5, 0x1def, 0x1df7, 0x1e03, + 0x1e0f, 0x1e1b, 0x1e21, 0x1e31, 0x1e31, 0x1e41, 0x1e51, 0x1e51, + 0x1e5f, 0x1e76, 0x1e87, 0x1e87, 0x1e93, 0x1e93, 0x1ea3, 0x1ea3, + 0x1eb5, 0x1ec5, 0x1ed3, 0x1ee5, 0x1f13, 0x1f25, 0x1f3b, 0x1f4f, + 0x1f6a, 0x1f70, 0x1f70, 0x1f70, 0x1f70, 0x1f70, 0x1f7a, 0x1f7a, + 0x1f88, 0x1f94, 0x1fa6, 0x1fb4, 0x1fc0, 0x1fd4, 0x1fd7, 0x1fe3, // Entry 240 - 27F - 0x1f92, 0x1f9e, 0x1fb2, 0x1fbe, 0x1fbe, 0x1fd4, 0x1fe2, 0x1ff6, - 0x1ff6, 0x2004, 0x2032, 0x203c, 0x2076, 0x207e, 0x20aa, 0x20aa, - 0x20cd, 0x20f7, 0x211a, 0x2135, 0x2167, 0x2186, 0x21ba, 0x21d9, - 0x21f8, 0x21f8, 0x2213, 0x2232, 0x2260, 0x2274, 0x229d, 0x22c2, - 0x22d4, 0x22ee, 0x230b, 0x2334, 0x235b, -} // Size: 1250 bytes - -const enLangStr string = "" + // Size: 4944 bytes + 0x1fe3, 0x1fed, 0x1ff5, 0x2001, 0x2015, 0x2021, 0x2021, 0x2037, + 0x2045, 0x2059, 0x2059, 0x2067, 0x2091, 0x209b, 0x20d5, 0x20dd, + 0x2109, 0x2109, 0x212c, 0x215a, 0x217d, 0x2198, 0x21b9, 0x21d8, + 0x220c, 0x222b, 0x224a, 0x224a, 0x2265, 0x2284, 0x22b2, 0x22c6, + 0x22ef, 0x2314, 0x2326, 0x2340, 0x235d, 0x2386, 0x23ad, +} // Size: 1254 bytes + +const enLangStr string = "" + // Size: 4978 bytes "AfarAbkhazianAvestanAfrikaansAkanAmharicAragoneseArabicAssameseAvaricAym" + "araAzerbaijaniBashkirBelarusianBulgarianBislamaBambaraBanglaTibetanBreto" + "nBosnianCatalanChechenChamorroCorsicanCreeCzechChurch SlavicChuvashWelsh" + @@ -17193,53 +18453,54 @@ const enLangStr string = "" + // Size: 4944 bytes " ArabicAsuAmerican Sign LanguageAsturianKotavaAwadhiBaluchiBalineseBavar" + "ianBasaaBamunBatak TobaGhomalaBejaBembaBetawiBenaBafutBadagaWestern Balo" + "chiBhojpuriBikolBiniBanjarKomSiksikaBishnupriyaBakhtiariBrajBrahuiBodoAk" + - "ooseBuriatBugineseBuluBlinMedumbaCaddoCaribCayugaAtsamCebuanoChigaChibch" + - "aChagataiChuukeseMariChinook JargonChoctawChipewyanCherokeeCheyenneCentr" + - "al KurdishCopticCapiznonCrimean TurkishSeselwa Creole FrenchKashubianDak" + - "otaDargwaTaitaDelawareSlaveDogribDinkaZarmaDogriLower SorbianCentral Dus" + - "unDualaMiddle DutchJola-FonyiDyulaDazagaEmbuEfikEmilianAncient EgyptianE" + - "kajukElamiteMiddle EnglishCentral YupikEwondoExtremaduranFangFilipinoTor" + - "nedalen FinnishFonCajun FrenchMiddle FrenchOld FrenchArpitanNorthern Fri" + - "sianEastern FrisianFriulianGaGagauzGan ChineseGayoGbayaZoroastrian DariG" + - "eezGilberteseGilakiMiddle High GermanOld High GermanGoan KonkaniGondiGor" + - "ontaloGothicGreboAncient GreekSwiss GermanWayuuFrafraGusiiGwichʼinHaidaH" + - "akka ChineseHawaiianFiji HindiHiligaynonHittiteHmongUpper SorbianXiang C" + - "hineseHupaIbanIbibioIlokoIngushIngrianJamaican Creole EnglishLojbanNgomb" + - "aMachameJudeo-PersianJudeo-ArabicJutishKara-KalpakKabyleKachinJjuKambaKa" + - "wiKabardianKanembuTyapMakondeKabuverdianuKenyangKoroKaingangKhasiKhotane" + - "seKoyra ChiiniKhowarKirmanjkiKakoKalenjinKimbunduKomi-PermyakKonkaniKosr" + - "aeanKpelleKarachay-BalkarKrioKinaray-aKarelianKurukhShambalaBafiaCologni" + - "anKumykKutenaiLadinoLangiLahndaLambaLezghianLingua Franca NovaLigurianLi" + - "vonianLakotaLombardMongoLoziNorthern LuriLatgalianLuba-LuluaLuisenoLunda" + - "LuoMizoLuyiaLiterary ChineseLazMadureseMafaMagahiMaithiliMakasarMandingo" + - "MasaiMabaMokshaMandarMendeMeruMorisyenMiddle IrishMakhuwa-MeettoMetaʼMi'" + - "kmaqMinangkabauManchuManipuriMohawkMossiWestern MariMundangMultiple lang" + - "uagesCreekMirandeseMarwariMentawaiMyeneErzyaMazanderaniMin Nan ChineseNe" + - "apolitanNamaLow GermanNewariNiasNiueanAo NagaKwasioNgiemboonNogaiOld Nor" + - "seNovialN’KoNorthern SothoNuerClassical NewariNyamweziNyankoleNyoroNzima" + - "OsageOttoman TurkishPangasinanPahlaviPampangaPapiamentoPalauanPicardNige" + - "rian PidginPennsylvania GermanPlautdietschOld PersianPalatine GermanPhoe" + - "nicianPiedmontesePonticPohnpeianPrussianOld ProvençalKʼicheʼChimborazo H" + - "ighland QuichuaRajasthaniRapanuiRarotonganRomagnolRiffianRomboRomanyRotu" + - "manRusynRovianaAromanianRwaSandaweSakhaSamaritan AramaicSamburuSasakSant" + - "aliSaurashtraNgambaySanguSicilianScotsSassarese SardinianSouthern Kurdis" + - "hSenecaSenaSeriSelkupKoyraboro SenniOld IrishSamogitianTachelhitShanChad" + - "ian ArabicSidamoLower SilesianSelayarSouthern SamiLule SamiInari SamiSko" + - "lt SamiSoninkeSogdienSranan TongoSererSahoSaterland FrisianSukumaSusuSum" + - "erianComorianClassical SyriacSyriacSilesianTuluTimneTesoTerenoTetumTigre" + - "TivTokelauTsakhurKlingonTlingitTalyshTamashekNyasa TongaTok PisinTuroyoT" + - "arokoTsakonianTsimshianMuslim TatTumbukaTuvaluTasawaqTuvinianCentral Atl" + - "as TamazightUdmurtUgariticUmbunduRootVaiVenetianVepsWest FlemishMain-Fra" + - "nconianVoticVõroVunjoWalserWolayttaWarayWashoWarlpiriWu ChineseKalmykMin" + - "grelianSogaYaoYapeseYangbenYembaNheengatuCantoneseZapotecBlissymbolsZeel" + - "andicZenagaStandard Moroccan TamazightZuniNo linguistic contentZazaModer" + - "n Standard ArabicAustrian GermanSwiss High GermanAustralian EnglishCanad" + - "ian EnglishBritish EnglishAmerican EnglishLatin American SpanishEuropean" + - " SpanishMexican SpanishDariCanadian FrenchSwiss FrenchLow SaxonFlemishBr" + - "azilian PortugueseEuropean PortugueseMoldavianSerbo-CroatianCongo Swahil" + - "iSimplified ChineseTraditional Chinese" - -var enLangIdx = []uint16{ // 613 elements + "ooseBuriatBugineseBuluBlinMedumbaCaddoCaribCayugaAtsamChakmaCebuanoChiga" + + "ChibchaChagataiChuukeseMariChinook JargonChoctawChipewyanCherokeeCheyenn" + + "eCentral KurdishCopticCapiznonCrimean TurkishSeselwa Creole FrenchKashub" + + "ianDakotaDargwaTaitaDelawareSlaveDogribDinkaZarmaDogriLower SorbianCentr" + + "al DusunDualaMiddle DutchJola-FonyiDyulaDazagaEmbuEfikEmilianAncient Egy" + + "ptianEkajukElamiteMiddle EnglishCentral YupikEwondoExtremaduranFangFilip" + + "inoTornedalen FinnishFonCajun FrenchMiddle FrenchOld FrenchArpitanNorthe" + + "rn FrisianEastern FrisianFriulianGaGagauzGan ChineseGayoGbayaZoroastrian" + + " DariGeezGilberteseGilakiMiddle High GermanOld High GermanGoan KonkaniGo" + + "ndiGorontaloGothicGreboAncient GreekSwiss GermanWayuuFrafraGusiiGwichʼin" + + "HaidaHakka ChineseHawaiianFiji HindiHiligaynonHittiteHmongUpper SorbianX" + + "iang ChineseHupaIbanIbibioIlokoIngushIngrianJamaican Creole EnglishLojba" + + "nNgombaMachameJudeo-PersianJudeo-ArabicJutishKara-KalpakKabyleKachinJjuK" + + "ambaKawiKabardianKanembuTyapMakondeKabuverdianuKenyangKoroKaingangKhasiK" + + "hotaneseKoyra ChiiniKhowarKirmanjkiKakoKalenjinKimbunduKomi-PermyakKonka" + + "niKosraeanKpelleKarachay-BalkarKrioKinaray-aKarelianKurukhShambalaBafiaC" + + "olognianKumykKutenaiLadinoLangiLahndaLambaLezghianLingua Franca NovaLigu" + + "rianLivonianLakotaLombardMongoLouisiana CreoleLoziNorthern LuriLatgalian" + + "Luba-LuluaLuisenoLundaLuoMizoLuyiaLiterary ChineseLazMadureseMafaMagahiM" + + "aithiliMakasarMandingoMasaiMabaMokshaMandarMendeMeruMorisyenMiddle Irish" + + "Makhuwa-MeettoMetaʼMi'kmaqMinangkabauManchuManipuriMohawkMossiWestern Ma" + + "riMundangMultiple languagesCreekMirandeseMarwariMentawaiMyeneErzyaMazand" + + "eraniMin Nan ChineseNeapolitanNamaLow GermanNewariNiasNiueanAo NagaKwasi" + + "oNgiemboonNogaiOld NorseNovialN’KoNorthern SothoNuerClassical NewariNyam" + + "weziNyankoleNyoroNzimaOsageOttoman TurkishPangasinanPahlaviPampangaPapia" + + "mentoPalauanPicardNigerian PidginPennsylvania GermanPlautdietschOld Pers" + + "ianPalatine GermanPhoenicianPiedmontesePonticPohnpeianPrussianOld Proven" + + "çalKʼicheʼChimborazo Highland QuichuaRajasthaniRapanuiRarotonganRomagno" + + "lRiffianRomboRomanyRotumanRusynRovianaAromanianRwaSandaweSakhaSamaritan " + + "AramaicSamburuSasakSantaliSaurashtraNgambaySanguSicilianScotsSassarese S" + + "ardinianSouthern KurdishSenecaSenaSeriSelkupKoyraboro SenniOld IrishSamo" + + "gitianTachelhitShanChadian ArabicSidamoLower SilesianSelayarSouthern Sam" + + "iLule SamiInari SamiSkolt SamiSoninkeSogdienSranan TongoSererSahoSaterla" + + "nd FrisianSukumaSusuSumerianComorianClassical SyriacSyriacSilesianTuluTi" + + "mneTesoTerenoTetumTigreTivTokelauTsakhurKlingonTlingitTalyshTamashekNyas" + + "a TongaTok PisinTuroyoTarokoTsakonianTsimshianMuslim TatTumbukaTuvaluTas" + + "awaqTuvinianCentral Atlas TamazightUdmurtUgariticUmbunduUnknown language" + + "VaiVenetianVepsWest FlemishMain-FranconianVoticVõroVunjoWalserWolayttaWa" + + "rayWashoWarlpiriWu ChineseKalmykMingrelianSogaYaoYapeseYangbenYembaNheen" + + "gatuCantoneseZapotecBlissymbolsZeelandicZenagaStandard Moroccan Tamazigh" + + "tZuniNo linguistic contentZazaModern Standard ArabicAustrian GermanSwiss" + + " High GermanAustralian EnglishCanadian EnglishBritish EnglishAmerican En" + + "glishLatin American SpanishEuropean SpanishMexican SpanishDariCanadian F" + + "renchSwiss FrenchLow SaxonFlemishBrazilian PortugueseEuropean Portuguese" + + "MoldavianSerbo-CroatianCongo SwahiliSimplified ChineseTraditional Chines" + + "e" + +var enLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0004, 0x000d, 0x0014, 0x001d, 0x0021, 0x0028, 0x0031, 0x0037, 0x003f, 0x0045, 0x004b, 0x0056, 0x005d, 0x0067, 0x0070, @@ -17274,62 +18535,153 @@ var enLangIdx = []uint16{ // 613 elements 0x0650, 0x0654, 0x0659, 0x065f, 0x0663, 0x0668, 0x066e, 0x067d, 0x0685, 0x068a, 0x068e, 0x0694, 0x0697, 0x069e, 0x06a9, 0x06b2, 0x06b6, 0x06bc, 0x06c0, 0x06c6, 0x06cc, 0x06d4, 0x06d8, 0x06dc, - 0x06e3, 0x06e8, 0x06ed, 0x06f3, 0x06f8, 0x06ff, 0x0704, 0x070b, - 0x0713, 0x071b, 0x071f, 0x072d, 0x0734, 0x073d, 0x0745, 0x074d, + 0x06e3, 0x06e8, 0x06ed, 0x06f3, 0x06f8, 0x06fe, 0x0705, 0x070a, + 0x0711, 0x0719, 0x0721, 0x0725, 0x0733, 0x073a, 0x0743, 0x074b, // Entry 100 - 13F - 0x075c, 0x0762, 0x076a, 0x0779, 0x078e, 0x0797, 0x079d, 0x07a3, - 0x07a8, 0x07b0, 0x07b5, 0x07bb, 0x07c0, 0x07c5, 0x07ca, 0x07d7, - 0x07e4, 0x07e9, 0x07f5, 0x07ff, 0x0804, 0x080a, 0x080e, 0x0812, - 0x0819, 0x0829, 0x082f, 0x0836, 0x0844, 0x0851, 0x0857, 0x0863, - 0x0867, 0x086f, 0x0881, 0x0884, 0x0890, 0x089d, 0x08a7, 0x08ae, - 0x08be, 0x08cd, 0x08d5, 0x08d7, 0x08dd, 0x08e8, 0x08ec, 0x08f1, - 0x0901, 0x0905, 0x090f, 0x0915, 0x0927, 0x0936, 0x0942, 0x0947, - 0x0950, 0x0956, 0x095b, 0x0968, 0x0974, 0x0979, 0x097f, 0x0984, + 0x0753, 0x0762, 0x0768, 0x0770, 0x077f, 0x0794, 0x079d, 0x07a3, + 0x07a9, 0x07ae, 0x07b6, 0x07bb, 0x07c1, 0x07c6, 0x07cb, 0x07d0, + 0x07dd, 0x07ea, 0x07ef, 0x07fb, 0x0805, 0x080a, 0x0810, 0x0814, + 0x0818, 0x081f, 0x082f, 0x0835, 0x083c, 0x084a, 0x0857, 0x085d, + 0x0869, 0x086d, 0x0875, 0x0887, 0x088a, 0x0896, 0x08a3, 0x08ad, + 0x08b4, 0x08c4, 0x08d3, 0x08db, 0x08dd, 0x08e3, 0x08ee, 0x08f2, + 0x08f7, 0x0907, 0x090b, 0x0915, 0x091b, 0x092d, 0x093c, 0x0948, + 0x094d, 0x0956, 0x095c, 0x0961, 0x096e, 0x097a, 0x097f, 0x0985, // Entry 140 - 17F - 0x098d, 0x0992, 0x099f, 0x09a7, 0x09b1, 0x09bb, 0x09c2, 0x09c7, - 0x09d4, 0x09e1, 0x09e5, 0x09e9, 0x09ef, 0x09f4, 0x09fa, 0x0a01, - 0x0a18, 0x0a1e, 0x0a24, 0x0a2b, 0x0a38, 0x0a44, 0x0a4a, 0x0a55, - 0x0a5b, 0x0a61, 0x0a64, 0x0a69, 0x0a6d, 0x0a76, 0x0a7d, 0x0a81, - 0x0a88, 0x0a94, 0x0a9b, 0x0a9f, 0x0aa7, 0x0aac, 0x0ab5, 0x0ac1, - 0x0ac7, 0x0ad0, 0x0ad4, 0x0adc, 0x0ae4, 0x0af0, 0x0af7, 0x0aff, - 0x0b05, 0x0b14, 0x0b18, 0x0b21, 0x0b29, 0x0b2f, 0x0b37, 0x0b3c, - 0x0b45, 0x0b4a, 0x0b51, 0x0b57, 0x0b5c, 0x0b62, 0x0b67, 0x0b6f, + 0x098a, 0x0993, 0x0998, 0x09a5, 0x09ad, 0x09b7, 0x09c1, 0x09c8, + 0x09cd, 0x09da, 0x09e7, 0x09eb, 0x09ef, 0x09f5, 0x09fa, 0x0a00, + 0x0a07, 0x0a1e, 0x0a24, 0x0a2a, 0x0a31, 0x0a3e, 0x0a4a, 0x0a50, + 0x0a5b, 0x0a61, 0x0a67, 0x0a6a, 0x0a6f, 0x0a73, 0x0a7c, 0x0a83, + 0x0a87, 0x0a8e, 0x0a9a, 0x0aa1, 0x0aa5, 0x0aad, 0x0ab2, 0x0abb, + 0x0ac7, 0x0acd, 0x0ad6, 0x0ada, 0x0ae2, 0x0aea, 0x0af6, 0x0afd, + 0x0b05, 0x0b0b, 0x0b1a, 0x0b1e, 0x0b27, 0x0b2f, 0x0b35, 0x0b3d, + 0x0b42, 0x0b4b, 0x0b50, 0x0b57, 0x0b5d, 0x0b62, 0x0b68, 0x0b6d, // Entry 180 - 1BF - 0x0b81, 0x0b89, 0x0b91, 0x0b97, 0x0b9e, 0x0ba3, 0x0ba7, 0x0bb4, - 0x0bbd, 0x0bc7, 0x0bce, 0x0bd3, 0x0bd6, 0x0bda, 0x0bdf, 0x0bef, - 0x0bf2, 0x0bfa, 0x0bfe, 0x0c04, 0x0c0c, 0x0c13, 0x0c1b, 0x0c20, - 0x0c24, 0x0c2a, 0x0c30, 0x0c35, 0x0c39, 0x0c41, 0x0c4d, 0x0c5b, - 0x0c61, 0x0c68, 0x0c73, 0x0c79, 0x0c81, 0x0c87, 0x0c8c, 0x0c98, - 0x0c9f, 0x0cb1, 0x0cb6, 0x0cbf, 0x0cc6, 0x0cce, 0x0cd3, 0x0cd8, - 0x0ce3, 0x0cf2, 0x0cfc, 0x0d00, 0x0d0a, 0x0d10, 0x0d14, 0x0d1a, - 0x0d21, 0x0d27, 0x0d30, 0x0d35, 0x0d3e, 0x0d44, 0x0d4a, 0x0d58, + 0x0b75, 0x0b87, 0x0b8f, 0x0b97, 0x0b9d, 0x0ba4, 0x0ba9, 0x0bb9, + 0x0bbd, 0x0bca, 0x0bd3, 0x0bdd, 0x0be4, 0x0be9, 0x0bec, 0x0bf0, + 0x0bf5, 0x0c05, 0x0c08, 0x0c10, 0x0c14, 0x0c1a, 0x0c22, 0x0c29, + 0x0c31, 0x0c36, 0x0c3a, 0x0c40, 0x0c46, 0x0c4b, 0x0c4f, 0x0c57, + 0x0c63, 0x0c71, 0x0c77, 0x0c7e, 0x0c89, 0x0c8f, 0x0c97, 0x0c9d, + 0x0ca2, 0x0cae, 0x0cb5, 0x0cc7, 0x0ccc, 0x0cd5, 0x0cdc, 0x0ce4, + 0x0ce9, 0x0cee, 0x0cf9, 0x0d08, 0x0d12, 0x0d16, 0x0d20, 0x0d26, + 0x0d2a, 0x0d30, 0x0d37, 0x0d3d, 0x0d46, 0x0d4b, 0x0d54, 0x0d5a, // Entry 1C0 - 1FF - 0x0d5c, 0x0d6c, 0x0d74, 0x0d7c, 0x0d81, 0x0d86, 0x0d8b, 0x0d9a, - 0x0da4, 0x0dab, 0x0db3, 0x0dbd, 0x0dc4, 0x0dca, 0x0dd9, 0x0dec, - 0x0df8, 0x0e03, 0x0e12, 0x0e1c, 0x0e27, 0x0e2d, 0x0e36, 0x0e3e, - 0x0e4c, 0x0e55, 0x0e70, 0x0e7a, 0x0e81, 0x0e8b, 0x0e93, 0x0e9a, - 0x0e9f, 0x0ea5, 0x0eac, 0x0eb1, 0x0eb8, 0x0ec1, 0x0ec4, 0x0ecb, - 0x0ed0, 0x0ee1, 0x0ee8, 0x0eed, 0x0ef4, 0x0efe, 0x0f05, 0x0f0a, - 0x0f12, 0x0f17, 0x0f2a, 0x0f3a, 0x0f40, 0x0f44, 0x0f48, 0x0f4e, - 0x0f5d, 0x0f66, 0x0f70, 0x0f79, 0x0f7d, 0x0f8b, 0x0f91, 0x0f9f, + 0x0d60, 0x0d6e, 0x0d72, 0x0d82, 0x0d8a, 0x0d92, 0x0d97, 0x0d9c, + 0x0da1, 0x0db0, 0x0dba, 0x0dc1, 0x0dc9, 0x0dd3, 0x0dda, 0x0de0, + 0x0def, 0x0e02, 0x0e0e, 0x0e19, 0x0e28, 0x0e32, 0x0e3d, 0x0e43, + 0x0e4c, 0x0e54, 0x0e62, 0x0e6b, 0x0e86, 0x0e90, 0x0e97, 0x0ea1, + 0x0ea9, 0x0eb0, 0x0eb5, 0x0ebb, 0x0ec2, 0x0ec7, 0x0ece, 0x0ed7, + 0x0eda, 0x0ee1, 0x0ee6, 0x0ef7, 0x0efe, 0x0f03, 0x0f0a, 0x0f14, + 0x0f1b, 0x0f20, 0x0f28, 0x0f2d, 0x0f40, 0x0f50, 0x0f56, 0x0f5a, + 0x0f5e, 0x0f64, 0x0f73, 0x0f7c, 0x0f86, 0x0f8f, 0x0f93, 0x0fa1, // Entry 200 - 23F - 0x0fa6, 0x0fb3, 0x0fbc, 0x0fc6, 0x0fd0, 0x0fd7, 0x0fde, 0x0fea, - 0x0fef, 0x0ff3, 0x1004, 0x100a, 0x100e, 0x1016, 0x101e, 0x102e, - 0x1034, 0x103c, 0x1040, 0x1045, 0x1049, 0x104f, 0x1054, 0x1059, - 0x105c, 0x1063, 0x106a, 0x1071, 0x1078, 0x107e, 0x1086, 0x1091, - 0x109a, 0x10a0, 0x10a6, 0x10af, 0x10b8, 0x10c2, 0x10c9, 0x10cf, - 0x10d6, 0x10de, 0x10f5, 0x10fb, 0x1103, 0x110a, 0x110e, 0x1111, - 0x1119, 0x111d, 0x1129, 0x1138, 0x113d, 0x1142, 0x1147, 0x114d, - 0x1155, 0x115a, 0x115f, 0x1167, 0x1171, 0x1177, 0x1181, 0x1185, + 0x0fa7, 0x0fb5, 0x0fbc, 0x0fc9, 0x0fd2, 0x0fdc, 0x0fe6, 0x0fed, + 0x0ff4, 0x1000, 0x1005, 0x1009, 0x101a, 0x1020, 0x1024, 0x102c, + 0x1034, 0x1044, 0x104a, 0x1052, 0x1056, 0x105b, 0x105f, 0x1065, + 0x106a, 0x106f, 0x1072, 0x1079, 0x1080, 0x1087, 0x108e, 0x1094, + 0x109c, 0x10a7, 0x10b0, 0x10b6, 0x10bc, 0x10c5, 0x10ce, 0x10d8, + 0x10df, 0x10e5, 0x10ec, 0x10f4, 0x110b, 0x1111, 0x1119, 0x1120, + 0x1130, 0x1133, 0x113b, 0x113f, 0x114b, 0x115a, 0x115f, 0x1164, + 0x1169, 0x116f, 0x1177, 0x117c, 0x1181, 0x1189, 0x1193, 0x1199, // Entry 240 - 27F - 0x1188, 0x118e, 0x1195, 0x119a, 0x11a3, 0x11ac, 0x11b3, 0x11be, - 0x11c7, 0x11cd, 0x11e8, 0x11ec, 0x1201, 0x1205, 0x121b, 0x121b, - 0x122a, 0x123b, 0x124d, 0x125d, 0x126c, 0x127c, 0x1292, 0x12a2, - 0x12b1, 0x12b5, 0x12c4, 0x12d0, 0x12d9, 0x12e0, 0x12f4, 0x1307, - 0x1310, 0x131e, 0x132b, 0x133d, 0x1350, -} // Size: 1250 bytes + 0x11a3, 0x11a7, 0x11aa, 0x11b0, 0x11b7, 0x11bc, 0x11c5, 0x11ce, + 0x11d5, 0x11e0, 0x11e9, 0x11ef, 0x120a, 0x120e, 0x1223, 0x1227, + 0x123d, 0x123d, 0x124c, 0x125d, 0x126f, 0x127f, 0x128e, 0x129e, + 0x12b4, 0x12c4, 0x12d3, 0x12d7, 0x12e6, 0x12f2, 0x12fb, 0x1302, + 0x1316, 0x1329, 0x1332, 0x1340, 0x134d, 0x135f, 0x1372, +} // Size: 1254 bytes + +const enGBLangStr string = "West Low German" + +var enGBLangIdx = []uint16{ // 607 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 40 - 7F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 80 - BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry C0 - FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 100 - 13F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 140 - 17F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 180 - 1BF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 1C0 - 1FF + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 200 - 23F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + // Entry 240 - 27F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000f, +} // Size: 1238 bytes -const esLangStr string = "" + // Size: 4319 bytes +const esLangStr string = "" + // Size: 4366 bytes "afarabjasioavésticoafrikáansakanamáricoaragonésárabeasamésavaraimaraazer" + "baiyanobaskirbielorrusobúlgarobislamabambarabengalítibetanobretónbosnioc" + "atalánchechenochamorrocorsocreechecoeslavo eclesiásticochuvasiogalésdané" + @@ -17356,40 +18708,41 @@ const esLangStr string = "" + // Size: 4319 bytes "chinukchoctawchipewyancheroquicheyenekurdo soranicoptotártaro de Crimeac" + "riollo seychelensecasubiodakotadargvataitadelawareslavedogribdinkazarmad" + "ogribajo sorbiodualaneerlandés mediojola-fonyidiuladazagaembuefikegipcio" + - " antiguoekajukelamitainglés medioewondofangfilipinofonfrancés mediofranc" + - "és antiguofrisón septentrionalfrisón orientalfriulanogagagauzochino gan" + - "gayogbayageezgilbertésalto alemán medioalto alemán antiguogondigorontalo" + - "góticogrebogriego antiguoalemán suizogusiikutchinhaidachino hakkahawaian" + - "ohiligaynonhititahmongalto sorbiochino xianghupaibanibibioilocanoingushl" + - "ojbanngombamachamejudeo-persajudeo-árabekarakalpakocabilakachinjjukambak" + - "awikabardianokanembutyapmakondecriollo caboverdianokorokhasikotanéskoyra" + - " chiinikakokalenjinkimbundukomi permiokonkaníkosraeanokpellekarachay-bal" + - "karcareliokurukhshambalabafiakölschkumykkutenailadinolangilahndalambalez" + - "gianolakotamongolozilorí septentrionalluba-lulualuiseñolundaluomizoluyia" + - "madurésmafamagahimaithilimacasarmandingomasáimabamokshamandarmendemerucr" + - "iollo mauricianoirlandés mediomakhuwa-meettometa’micmacminangkabaumanchú" + - "manipurimohawkmossimundangvarios idiomascreekmirandésmarwarimyeneerzyama" + - "zandaraníchino min nannapolitanonamabajo alemánnewariniasniueanokwasiong" + - "iemboonnogainórdico antiguon’kosesotho septentrionalnuernewari clásicony" + - "amwezinyankolenyoronzimaosageturco otomanopangasinánpahlavipampangapapia" + - "mentopalauanopidgin de Nigeriapersa antiguofeniciopohnpeianoprusianoprov" + - "enzal antiguoquichérajasthanirapanuirarotonganoromboromaníarrumanorwasan" + - "dawesakhaarameo samaritanosamburusasaksantalingambaysangusicilianoescocé" + - "skurdo meridionalsenecasenaselkupkoyraboro senniirlandés antiguotashelhi" + - "tshanárabe chadianosidamosami meridionalsami lulesami inarisami skoltson" + - "inkésogdianosranan tongoserersahosukumasususumeriocomorensesiríaco clási" + - "cosiriacotemnetesoterenotetúntigrétivtokelauanoklingontlingittamashekton" + - "ga del Nyasatok pisintarokotsimshianotumbukatuvaluanotasawaqtuvinianotam" + - "azight del Atlas Centraludmurtugaríticoumbunduraízvaivóticovunjowalserwo" + - "laytawaraywashowarlpirichino wukalmyksogayaoyapésyangbenyembacantonészap" + - "otecosímbolos Blisszenagatamazight estándar marroquízuñisin contenido li" + - "ngüísticozazakiárabe estándar modernoalemán austríacoalto alemán suizoin" + - "glés australianoinglés canadienseinglés británicoinglés estadounidensees" + - "pañol latinoamericanoespañol de Españaespañol de Méxicofrancés canadiens" + - "efrancés suizobajo sajónflamencoportugués de Brasilportugués de Portugal" + - "moldavoserbocroatasuajili del Congochino simplificadochino tradicional" - -var esLangIdx = []uint16{ // 613 elements + " antiguoekajukelamitainglés medioewondofangfilipinofonfrancés cajúnfranc" + + "és mediofrancés antiguofrisón septentrionalfrisón orientalfriulanogagag" + + "auzochino gangayogbayageezgilbertésalto alemán medioalto alemán antiguog" + + "ondigorontalogóticogrebogriego antiguoalemán suizogusiikutchinhaidachino" + + " hakkahawaianohiligaynonhititahmongalto sorbiochino xianghupaibanibibioi" + + "locanoingushlojbanngombamachamejudeo-persajudeo-árabekarakalpakocabilaka" + + "chinjjukambakawikabardianokanembutyapmakondecriollo caboverdianokorokhas" + + "ikotanéskoyra chiinikakokalenjinkimbundukomi permiokonkaníkosraeanokpell" + + "ekarachay-balkarcareliokurukhshambalabafiakölschkumykkutenailadinolangil" + + "ahndalambalezgianolakotamongocriollo de Luisianalozilorí septentrionallu" + + "ba-lulualuiseñolundaluomizoluyiamadurésmafamagahimaithilimacasarmandingo" + + "masáimabamokshamandarmendemerucriollo mauricianoirlandés mediomakhuwa-me" + + "ettometa’micmacminangkabaumanchúmanipurimohawkmossimundangvarios idiomas" + + "creekmirandésmarwarimyeneerzyamazandaraníchino min nannapolitanonamabajo" + + " alemánnewariniasniueanokwasiongiemboonnogainórdico antiguon’kosesotho s" + + "eptentrionalnuernewari clásiconyamwezinyankolenyoronzimaosageturco otoma" + + "nopangasinánpahlavipampangapapiamentopalauanopidgin de Nigeriapersa anti" + + "guofeniciopohnpeianoprusianoprovenzal antiguoquichérajasthanirapanuiraro" + + "tonganoromboromaníarrumanorwasandawesakhaarameo samaritanosamburusasaksa" + + "ntalingambaysangusicilianoescocéskurdo meridionalsenecasenaselkupkoyrabo" + + "ro senniirlandés antiguotashelhitshanárabe chadianosidamosami meridional" + + "sami lulesami inarisami skoltsoninkésogdianosranan tongoserersahosukumas" + + "ususumeriocomorensesiríaco clásicosiriacotemnetesoterenotetúntigrétivtok" + + "elauanoklingontlingittamashektonga del Nyasatok pisintarokotsimshianotum" + + "bukatuvaluanotasawaqtuvinianotamazight del Atlas Centraludmurtugaríticou" + + "mbundulengua desconocidavaivóticovunjowalserwolaytawaraywashowarlpirichi" + + "no wukalmyksogayaoyapésyangbenyembacantonészapotecosímbolos Blisszenagat" + + "amazight estándar marroquízuñisin contenido lingüísticozazakiárabe están" + + "dar modernoalemán austríacoalto alemán suizoinglés australianoinglés can" + + "adienseinglés británicoinglés estadounidenseespañol latinoamericanoespañ" + + "ol de Españaespañol de Méxicofrancés canadiensefrancés suizobajo sajónfl" + + "amencoportugués de Brasilportugués de Portugalmoldavoserbocroatasuajili " + + "del Congochino simplificadochino tradicional" + +var esLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0004, 0x000b, 0x0014, 0x001e, 0x0022, 0x002a, 0x0033, 0x0039, 0x0040, 0x0044, 0x004a, 0x0055, 0x005b, 0x0065, 0x006d, @@ -17424,67 +18777,69 @@ var esLangIdx = []uint16{ // 613 elements 0x0610, 0x0614, 0x0619, 0x0619, 0x061d, 0x0622, 0x0622, 0x0634, 0x063e, 0x0643, 0x0647, 0x0647, 0x064a, 0x0651, 0x0651, 0x0651, 0x0655, 0x0655, 0x0659, 0x065f, 0x0666, 0x066e, 0x0672, 0x0676, - 0x067d, 0x0682, 0x0688, 0x068e, 0x0693, 0x069a, 0x069f, 0x06a6, - 0x06af, 0x06b6, 0x06bb, 0x06c7, 0x06ce, 0x06d7, 0x06df, 0x06e6, + 0x067d, 0x0682, 0x0688, 0x068e, 0x0693, 0x0693, 0x069a, 0x069f, + 0x06a6, 0x06af, 0x06b6, 0x06bb, 0x06c7, 0x06ce, 0x06d7, 0x06df, // Entry 100 - 13F - 0x06f2, 0x06f7, 0x06f7, 0x0709, 0x071c, 0x0723, 0x0729, 0x072f, - 0x0734, 0x073c, 0x0741, 0x0747, 0x074c, 0x0751, 0x0756, 0x0761, - 0x0761, 0x0766, 0x0777, 0x0781, 0x0786, 0x078c, 0x0790, 0x0794, - 0x0794, 0x07a3, 0x07a9, 0x07b0, 0x07bd, 0x07bd, 0x07c3, 0x07c3, - 0x07c7, 0x07cf, 0x07cf, 0x07d2, 0x07d2, 0x07e0, 0x07f0, 0x07f0, - 0x0805, 0x0815, 0x081d, 0x081f, 0x0826, 0x082f, 0x0833, 0x0838, - 0x0838, 0x083c, 0x0846, 0x0846, 0x0858, 0x086c, 0x086c, 0x0871, - 0x087a, 0x0881, 0x0886, 0x0894, 0x08a1, 0x08a1, 0x08a1, 0x08a6, + 0x06e6, 0x06f2, 0x06f7, 0x06f7, 0x0709, 0x071c, 0x0723, 0x0729, + 0x072f, 0x0734, 0x073c, 0x0741, 0x0747, 0x074c, 0x0751, 0x0756, + 0x0761, 0x0761, 0x0766, 0x0777, 0x0781, 0x0786, 0x078c, 0x0790, + 0x0794, 0x0794, 0x07a3, 0x07a9, 0x07b0, 0x07bd, 0x07bd, 0x07c3, + 0x07c3, 0x07c7, 0x07cf, 0x07cf, 0x07d2, 0x07e1, 0x07ef, 0x07ff, + 0x07ff, 0x0814, 0x0824, 0x082c, 0x082e, 0x0835, 0x083e, 0x0842, + 0x0847, 0x0847, 0x084b, 0x0855, 0x0855, 0x0867, 0x087b, 0x087b, + 0x0880, 0x0889, 0x0890, 0x0895, 0x08a3, 0x08b0, 0x08b0, 0x08b0, // Entry 140 - 17F - 0x08ad, 0x08b2, 0x08bd, 0x08c5, 0x08c5, 0x08cf, 0x08d5, 0x08da, - 0x08e5, 0x08f0, 0x08f4, 0x08f8, 0x08fe, 0x0905, 0x090b, 0x090b, - 0x090b, 0x0911, 0x0917, 0x091e, 0x0929, 0x0935, 0x0935, 0x0940, - 0x0946, 0x094c, 0x094f, 0x0954, 0x0958, 0x0962, 0x0969, 0x096d, - 0x0974, 0x0988, 0x0988, 0x098c, 0x098c, 0x0991, 0x0999, 0x09a5, - 0x09a5, 0x09a5, 0x09a9, 0x09b1, 0x09b9, 0x09c4, 0x09cc, 0x09d5, - 0x09db, 0x09ea, 0x09ea, 0x09ea, 0x09f1, 0x09f7, 0x09ff, 0x0a04, - 0x0a0b, 0x0a10, 0x0a17, 0x0a1d, 0x0a22, 0x0a28, 0x0a2d, 0x0a35, + 0x08b5, 0x08bc, 0x08c1, 0x08cc, 0x08d4, 0x08d4, 0x08de, 0x08e4, + 0x08e9, 0x08f4, 0x08ff, 0x0903, 0x0907, 0x090d, 0x0914, 0x091a, + 0x091a, 0x091a, 0x0920, 0x0926, 0x092d, 0x0938, 0x0944, 0x0944, + 0x094f, 0x0955, 0x095b, 0x095e, 0x0963, 0x0967, 0x0971, 0x0978, + 0x097c, 0x0983, 0x0997, 0x0997, 0x099b, 0x099b, 0x09a0, 0x09a8, + 0x09b4, 0x09b4, 0x09b4, 0x09b8, 0x09c0, 0x09c8, 0x09d3, 0x09db, + 0x09e4, 0x09ea, 0x09f9, 0x09f9, 0x09f9, 0x0a00, 0x0a06, 0x0a0e, + 0x0a13, 0x0a1a, 0x0a1f, 0x0a26, 0x0a2c, 0x0a31, 0x0a37, 0x0a3c, // Entry 180 - 1BF - 0x0a35, 0x0a35, 0x0a35, 0x0a3b, 0x0a3b, 0x0a40, 0x0a44, 0x0a57, - 0x0a57, 0x0a61, 0x0a69, 0x0a6e, 0x0a71, 0x0a75, 0x0a7a, 0x0a7a, - 0x0a7a, 0x0a82, 0x0a86, 0x0a8c, 0x0a94, 0x0a9b, 0x0aa3, 0x0aa9, - 0x0aad, 0x0ab3, 0x0ab9, 0x0abe, 0x0ac2, 0x0ad4, 0x0ae3, 0x0af1, - 0x0af8, 0x0afe, 0x0b09, 0x0b10, 0x0b18, 0x0b1e, 0x0b23, 0x0b23, - 0x0b2a, 0x0b38, 0x0b3d, 0x0b46, 0x0b4d, 0x0b4d, 0x0b52, 0x0b57, - 0x0b63, 0x0b70, 0x0b7a, 0x0b7e, 0x0b8a, 0x0b90, 0x0b94, 0x0b9b, - 0x0b9b, 0x0ba1, 0x0baa, 0x0baf, 0x0bbf, 0x0bbf, 0x0bc5, 0x0bda, + 0x0a44, 0x0a44, 0x0a44, 0x0a44, 0x0a4a, 0x0a4a, 0x0a4f, 0x0a62, + 0x0a66, 0x0a79, 0x0a79, 0x0a83, 0x0a8b, 0x0a90, 0x0a93, 0x0a97, + 0x0a9c, 0x0a9c, 0x0a9c, 0x0aa4, 0x0aa8, 0x0aae, 0x0ab6, 0x0abd, + 0x0ac5, 0x0acb, 0x0acf, 0x0ad5, 0x0adb, 0x0ae0, 0x0ae4, 0x0af6, + 0x0b05, 0x0b13, 0x0b1a, 0x0b20, 0x0b2b, 0x0b32, 0x0b3a, 0x0b40, + 0x0b45, 0x0b45, 0x0b4c, 0x0b5a, 0x0b5f, 0x0b68, 0x0b6f, 0x0b6f, + 0x0b74, 0x0b79, 0x0b85, 0x0b92, 0x0b9c, 0x0ba0, 0x0bac, 0x0bb2, + 0x0bb6, 0x0bbd, 0x0bbd, 0x0bc3, 0x0bcc, 0x0bd1, 0x0be1, 0x0be1, // Entry 1C0 - 1FF - 0x0bde, 0x0bed, 0x0bf5, 0x0bfd, 0x0c02, 0x0c07, 0x0c0c, 0x0c19, - 0x0c24, 0x0c2b, 0x0c33, 0x0c3d, 0x0c45, 0x0c45, 0x0c56, 0x0c56, - 0x0c56, 0x0c63, 0x0c63, 0x0c6a, 0x0c6a, 0x0c6a, 0x0c74, 0x0c7c, - 0x0c8d, 0x0c94, 0x0c94, 0x0c9e, 0x0ca5, 0x0cb0, 0x0cb0, 0x0cb0, - 0x0cb5, 0x0cbc, 0x0cbc, 0x0cbc, 0x0cbc, 0x0cc4, 0x0cc7, 0x0cce, - 0x0cd3, 0x0ce4, 0x0ceb, 0x0cf0, 0x0cf7, 0x0cf7, 0x0cfe, 0x0d03, - 0x0d0c, 0x0d14, 0x0d14, 0x0d24, 0x0d2a, 0x0d2e, 0x0d2e, 0x0d34, - 0x0d43, 0x0d54, 0x0d54, 0x0d5d, 0x0d61, 0x0d70, 0x0d76, 0x0d76, + 0x0be7, 0x0bfc, 0x0c00, 0x0c0f, 0x0c17, 0x0c1f, 0x0c24, 0x0c29, + 0x0c2e, 0x0c3b, 0x0c46, 0x0c4d, 0x0c55, 0x0c5f, 0x0c67, 0x0c67, + 0x0c78, 0x0c78, 0x0c78, 0x0c85, 0x0c85, 0x0c8c, 0x0c8c, 0x0c8c, + 0x0c96, 0x0c9e, 0x0caf, 0x0cb6, 0x0cb6, 0x0cc0, 0x0cc7, 0x0cd2, + 0x0cd2, 0x0cd2, 0x0cd7, 0x0cde, 0x0cde, 0x0cde, 0x0cde, 0x0ce6, + 0x0ce9, 0x0cf0, 0x0cf5, 0x0d06, 0x0d0d, 0x0d12, 0x0d19, 0x0d19, + 0x0d20, 0x0d25, 0x0d2e, 0x0d36, 0x0d36, 0x0d46, 0x0d4c, 0x0d50, + 0x0d50, 0x0d56, 0x0d65, 0x0d76, 0x0d76, 0x0d7f, 0x0d83, 0x0d92, // Entry 200 - 23F - 0x0d76, 0x0d85, 0x0d8e, 0x0d98, 0x0da2, 0x0daa, 0x0db2, 0x0dbe, - 0x0dc3, 0x0dc7, 0x0dc7, 0x0dcd, 0x0dd1, 0x0dd8, 0x0de1, 0x0df2, - 0x0df9, 0x0df9, 0x0df9, 0x0dfe, 0x0e02, 0x0e08, 0x0e0e, 0x0e14, - 0x0e17, 0x0e21, 0x0e21, 0x0e28, 0x0e2f, 0x0e2f, 0x0e37, 0x0e46, - 0x0e4f, 0x0e4f, 0x0e55, 0x0e55, 0x0e5f, 0x0e5f, 0x0e66, 0x0e6f, - 0x0e76, 0x0e7f, 0x0e9a, 0x0ea0, 0x0eaa, 0x0eb1, 0x0eb6, 0x0eb9, - 0x0eb9, 0x0eb9, 0x0eb9, 0x0eb9, 0x0ec0, 0x0ec0, 0x0ec5, 0x0ecb, - 0x0ed2, 0x0ed7, 0x0edc, 0x0ee4, 0x0eec, 0x0ef2, 0x0ef2, 0x0ef6, + 0x0d98, 0x0d98, 0x0d98, 0x0da7, 0x0db0, 0x0dba, 0x0dc4, 0x0dcc, + 0x0dd4, 0x0de0, 0x0de5, 0x0de9, 0x0de9, 0x0def, 0x0df3, 0x0dfa, + 0x0e03, 0x0e14, 0x0e1b, 0x0e1b, 0x0e1b, 0x0e20, 0x0e24, 0x0e2a, + 0x0e30, 0x0e36, 0x0e39, 0x0e43, 0x0e43, 0x0e4a, 0x0e51, 0x0e51, + 0x0e59, 0x0e68, 0x0e71, 0x0e71, 0x0e77, 0x0e77, 0x0e81, 0x0e81, + 0x0e88, 0x0e91, 0x0e98, 0x0ea1, 0x0ebc, 0x0ec2, 0x0ecc, 0x0ed3, + 0x0ee5, 0x0ee8, 0x0ee8, 0x0ee8, 0x0ee8, 0x0ee8, 0x0eef, 0x0eef, + 0x0ef4, 0x0efa, 0x0f01, 0x0f06, 0x0f0b, 0x0f13, 0x0f1b, 0x0f21, // Entry 240 - 27F - 0x0ef9, 0x0eff, 0x0f06, 0x0f0b, 0x0f0b, 0x0f14, 0x0f1c, 0x0f2b, - 0x0f2b, 0x0f31, 0x0f4e, 0x0f53, 0x0f6e, 0x0f74, 0x0f8c, 0x0f8c, - 0x0f9e, 0x0fb0, 0x0fc3, 0x0fd5, 0x0fe7, 0x0ffd, 0x1015, 0x1028, - 0x103b, 0x103b, 0x104e, 0x105c, 0x1067, 0x106f, 0x1083, 0x1099, - 0x10a0, 0x10ab, 0x10bc, 0x10ce, 0x10df, -} // Size: 1250 bytes - -const es419LangStr string = "" + // Size: 218 bytes - "vascogujaratihaitianolaosianoretorrománicoswahiliyídishachenésadigeoarap" + - "ajógriego clásicosorbio altoCriollo (Cabo Verde)luoprusiano antiguoárabe" + - " (Chad)tamazight del Marruecos Centralvaiwalamowuzuniswahili (Congo)" - -var es419LangIdx = []uint16{ // 611 elements + 0x0f21, 0x0f25, 0x0f28, 0x0f2e, 0x0f35, 0x0f3a, 0x0f3a, 0x0f43, + 0x0f4b, 0x0f5a, 0x0f5a, 0x0f60, 0x0f7d, 0x0f82, 0x0f9d, 0x0fa3, + 0x0fbb, 0x0fbb, 0x0fcd, 0x0fdf, 0x0ff2, 0x1004, 0x1016, 0x102c, + 0x1044, 0x1057, 0x106a, 0x106a, 0x107d, 0x108b, 0x1096, 0x109e, + 0x10b2, 0x10c8, 0x10cf, 0x10da, 0x10eb, 0x10fd, 0x110e, +} // Size: 1254 bytes + +const es419LangStr string = "" + // Size: 301 bytes + "vascogujaratihaitianolaosianondebele del surretorrománicosesotho del sur" + + "swahiliachenésadigeoaltái del surarapajósiksikáfonalemán de la alta edad" + + " antiguagriego clásicocabardianoluoprusiano antiguoárabe (Chad)sami del " + + "sursiríacotetuntamazight del Marruecos Centralvaiwalamowuzuniswahili (Co" + + "ngo)" + +var es419LangIdx = []uint16{ // 613 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -17501,80 +18856,80 @@ var es419LangIdx = []uint16{ // 611 elements 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, - 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, - 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, + 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x002c, 0x002c, 0x002c, + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, // Entry 80 - BF - 0x001d, 0x001d, 0x001d, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, - 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, - 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, - 0x002b, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, - 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, - 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, 0x0032, - 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0041, 0x0041, 0x0041, - 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, + 0x002c, 0x002c, 0x002c, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, + 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, + 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x0049, 0x0049, + 0x0049, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, + 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, + 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, + 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0058, 0x0058, 0x0058, + 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, // Entry C0 - FF - 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x004f, - 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, - 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, - 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, - 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, - 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, - 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, - 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x005e, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x0074, + 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, + 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, + 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, + 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x007c, 0x007c, 0x007c, + 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, + 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, + 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, // Entry 100 - 13F - 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, - 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, - 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, - 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, - 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, - 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, - 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, - 0x004f, 0x004f, 0x004f, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, + 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, + 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, + 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, + 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, + 0x007c, 0x007c, 0x007c, 0x007c, 0x007f, 0x007f, 0x007f, 0x007f, + 0x007f, 0x007f, 0x007f, 0x007f, 0x007f, 0x007f, 0x007f, 0x007f, + 0x007f, 0x007f, 0x007f, 0x007f, 0x007f, 0x007f, 0x009e, 0x009e, + 0x009e, 0x009e, 0x009e, 0x009e, 0x00ad, 0x00ad, 0x00ad, 0x00ad, // Entry 140 - 17F - 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, - 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, - 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, - 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, - 0x0069, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, - 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, - 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, - 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, + 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, + 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, + 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, + 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00b7, 0x00b7, + 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00b7, + 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00b7, + 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00b7, + 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00b7, // Entry 180 - 1BF - 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, - 0x007d, 0x007d, 0x007d, 0x007d, 0x0080, 0x0080, 0x0080, 0x0080, - 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, - 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, - 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, - 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, - 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, - 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, + 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00b7, + 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00ba, 0x00ba, + 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, + 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, + 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, + 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, + 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, + 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, // Entry 1C0 - 1FF - 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, - 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, - 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0090, - 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, - 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, - 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, - 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, - 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x009d, 0x009d, 0x009d, + 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, + 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, + 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, + 0x00ba, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, + 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, + 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, + 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, + 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00d7, // Entry 200 - 23F - 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, - 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, - 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, - 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, - 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, - 0x009d, 0x009d, 0x00bc, 0x00bc, 0x00bc, 0x00bc, 0x00bc, 0x00bf, - 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, - 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c7, 0x00c7, 0x00c7, 0x00c7, + 0x00d7, 0x00d7, 0x00d7, 0x00e3, 0x00e3, 0x00e3, 0x00e3, 0x00e3, + 0x00e3, 0x00e3, 0x00e3, 0x00e3, 0x00e3, 0x00e3, 0x00e3, 0x00e3, + 0x00e3, 0x00e3, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, + 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, + 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, + 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x010f, 0x010f, 0x010f, 0x010f, + 0x010f, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, + 0x0112, 0x0112, 0x0118, 0x0118, 0x0118, 0x0118, 0x011a, 0x011a, // Entry 240 - 27F - 0x00c7, 0x00c7, 0x00c7, 0x00c7, 0x00c7, 0x00c7, 0x00c7, 0x00c7, - 0x00c7, 0x00c7, 0x00c7, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, - 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, - 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cb, - 0x00cb, 0x00cb, 0x00da, -} // Size: 1246 bytes - -const etLangStr string = "" + // Size: 4574 bytes + 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, + 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, 0x011e, 0x011e, 0x011e, + 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, + 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, + 0x011e, 0x011e, 0x011e, 0x011e, 0x012d, +} // Size: 1250 bytes + +const etLangStr string = "" + // Size: 4649 bytes "afariabhaasiavestaafrikaaniakaniamharaaragoniaraabiaassamiavaariaimaraas" + "erbaidžaanibaškiirivalgevenebulgaariabislamabambarabengalitiibetibretoon" + "ibosniakatalaanitšetšeenitšamorrokorsikakriitšehhikirikuslaavitšuvašikõm" + @@ -17595,50 +18950,51 @@ const etLangStr string = "" + // Size: 4574 bytes "šoliadangmeadõgeeTuneesia araabiaafrihiliaghemiainuakadialabamaaleuudig" + "eegialtaivanaingliseangikaarameamapudunguniaraonaarapahoAlžeeria araabia" + "aravakiMaroko araabiaEgiptuse araabiaasuAmeerika viipekeelastuuriaavadhi" + - "belutšibalibaieribasabamunibatakighomalabedžabembabetavibenabafutibadaga" + - "läänebelutšibhodžpuribikoliedobandžarikomi (Aafrika)mustjalaindiaanibišn" + - "uprijabahtiaribradžibrahuibodoakooseburjaadibugibulubilinimedumbakadokar" + - "iibikajukaatsamisebutšigatšibtšatšagataitšuugimaritšinuki žargoontšoktot" + - "šipevaitšerokiišaieenisoranikoptikapisnonikrimmitatariseišellikašuubisi" + - "uudargidavidadelavarisleividogribidinkazarmadogrialamsorbikeskdusunidual" + - "akeskhollandifonjidjuladazaembuefikiemiiliaegiptuseekadžukieelamikesking" + - "lisekeskjupikievondoestremenjufangifilipiinimeäfonicajun’ikeskprantsusev" + - "anaprantsusefrankoprovansipõhjafriisiidafriisifriuuligaagagauusikanigajo" + - "gbajaetioopiakiribatigilakikeskülemsaksavanaülemsaksagondigorontalogooti" + - "grebovanakreekašveitsisaksavajuufarefaregusiigvitšinihaidahakkahavaiFidž" + - "i hindihiligainonihetihmongiülemsorbisjangihupaibaniibibioilokoingušiisu" + - "riJamaica kreoolkeelložbanngombamatšamejuudipärsiajuudiaraabiajüütikarak" + - "alpakikabiilikatšinijjukambakaavikabardi-tšerkessikanembutjapimakondekab" + - "uverdianukorokaingangikhasisakakoyra chiinikhovarikõrmandžkikakokalendži" + - "nimbundupermikomikonkanikosraekpellekaratšai-balkaarikriokinaraiakarjala" + - "kuruhhišambalabafiakölnikumõkikutenailadiinolangilahndalambalesgiliguuri" + - "liivilakotalombardimongolozipõhjalurilatgalilulualuisenjolundaluolušeilu" + - "hjaklassikaline hiinalazimaduramafamagahimaithilimakassarimalinkemasaima" + - "bamokšamandarimendemeruMauritiuse kreoolkeelkeskiirimakhuwa-meettometami" + - "kmakiminangkabaumandžumanipurimohoogimoremäemarimundangimitu keeltmaskog" + - "imirandamarvarimentaveimjeneersamazandaraanilõunamininapolinamaalamsaksa" + - "nevariniasiniueaokwasiongiembooninogaivanapõhjalanoviaalnkoopõhjasothonu" + - "erivananevarinjamvesinkolenjoronzimaoseidžiosmanitürgipangasinanipahlavi" + - "pampangapapiamentobelaupikardiNigeeria pidžinkeelPennsylvania saksamenno" + - "niidisaksavanapärsiaPfalzifoiniikiapiemontepontosepoonpeipreisivanaprova" + - "nsikitšeradžastanirapanuirarotongaromanjariifirombomustlaskeelrotumaruss" + - "iinirovianaaromuunirvaasandavejakuudiSamaaria arameasamburusasakisantali" + - "sauraštrangambaisangusitsiiliašotilõunakurdisenekasenaserisölkupikoyrabo" + - "ro sennivanaiirižemaidišilhašaniTšaadi araabiasidamoalamsileesiaselajari" + - "lõunasaamiLule saamiInari saamikoltasaamisoninkesogdisrananisererisahosa" + - "terfriisisukumasususumerikomoorivanasüüriasüüriasileesiatulutemnetesoter" + - "enotetumitigreetivitokelautsahhiklingonitlingititalõšitamašekitšitongauu" + - "smelaneesiaturojotarokotsakooniatšimšilõunataaditumbukatuvalutaswaqitõva" + - "tamasiktiudmurdiugaritiumbundurootvaivenetivepsalääneflaamiMaini frangiv" + - "adjavõruvundžowalserivolaitavaraivašovarlpiriuukalmõkimegrelisogajaojapi" + - "yangbenijembanjengatukantonisapoteegiBlissi sümbolidzeelandizenagatamasi" + - "kti (Maroko)sunjimittekeelelinezazaaraabia (tänapäevane)Austria saksaŠve" + - "itsi ülemsaksaAustraalia ingliseKanada ingliseBriti ingliseAmeerika ingl" + - "iseLadina-Ameerika hispaaniaEuroopa hispaaniaMehhiko hispaaniaKanada pra" + - "ntsuseŠveitsi prantsuseHollandi alamsaksaflaamiBrasiilia portugaliEuroop" + - "a portugalimoldovaserbia-horvaadiKongo suahiili" - -var etLangIdx = []uint16{ // 611 elements + "belutšibalibaieribasaabamunibatakighomalabedžabembabetavibenabafutibadag" + + "aläänebelutšibhodžpuribikoliedobandžarikomi (Aafrika)mustjalaindiaanibiš" + + "nuprijabahtiaribradžibrahuibodoakooseburjaadibugibulubilinimedumbakadoka" + + "riibikajukaaitšamisebutšigatšibtšatšagataitšuugimaritšinuki žargoontšokt" + + "otšipevaitšerokiišaieenisoranikoptikapisnonikrimmitatariseišellikašuubis" + + "iuudargidavidadelavarisleividogribidinkazarmadogrialamsorbikeskdusunidua" + + "lakeskhollandifonjidjuladazaembuefikiemiiliaegiptuseekadžukieelamikeskin" + + "glisekeskjupikievondoestremenjufangifilipiinimeäfonicajun’ikeskprantsuse" + + "vanaprantsusefrankoprovansipõhjafriisiidafriisifriuuligaagagauusikanigaj" + + "ogbajaetioopiakiribatigilakikeskülemsaksavanaülemsaksagondigorontalogoot" + + "igrebovanakreekašveitsisaksavajuufarefaregusiigvitšinihaidahakkahavaiFid" + + "ži hindihiligainonihetihmongiülemsorbisjangihupaibaniibibioilokoingušii" + + "suriJamaica kreoolkeelložbanngombamatšamejuudipärsiajuudiaraabiajüütikar" + + "akalpakikabiilikatšinijjukambakaavikabardi-tšerkessikanembutjapimakondek" + + "abuverdianukorokaingangikhasisakakoyra chiinikhovarikõrmandžkikakokalend" + + "žinimbundupermikomikonkanikosraekpellekaratšai-balkaarikriokinaraiakarj" + + "alakuruhhišambalabafiakölnikumõkikutenailadiinolangilahndalambalesgiligu" + + "uriliivilakotalombardimongoLouisiana kreoolkeellozipõhjalurilatgalilulua" + + "luisenjolundaluolušeiluhjaklassikaline hiinalazimaduramafamagahimaithili" + + "makassarimalinkemasaimabamokšamandarimendemeruMauritiuse kreoolkeelkeski" + + "irimakhuwa-meettometamikmakiminangkabaumandžumanipurimohoogimoremäemarim" + + "undangimitu keeltmaskogimirandamarvarimentaveimjeneersamazandaraanilõuna" + + "mininapolinamaalamsaksanevariniasiniueaokwasiongiembooninogaivanapõhjala" + + "noviaalnkoopõhjasothonuerivananevarinjamvesinkolenjoronzimaoseidžiosmani" + + "türgipangasinanipahlavipampangapapiamentobelaupikardiNigeeria pidžinkeel" + + "Pennsylvania saksamennoniidisaksavanapärsiaPfalzifoiniikiapiemontepontos" + + "epoonpeipreisivanaprovansikitšeradžastanirapanuirarotongaromanjariifirom" + + "bomustlaskeelrotumarussiinirovianaaromuunirvaasandavejakuudiSamaaria ara" + + "measamburusasakisantalisauraštrangambaisangusitsiiliašotilõunakurdisenek" + + "asenaserisölkupikoyraboro sennivanaiirižemaidišilhašaniTšaadi araabiasid" + + "amoalamsileesiaselajarilõunasaamiLule saamiInari saamikoltasaamisoninkes" + + "ogdisrananisererisahosaterfriisisukumasususumerikomoorivanasüüriasüürias" + + "ileesiatulutemnetesoterenotetumitigreetivitokelautsahhiklingonitlingitit" + + "alõšitamašekitšitongauusmelaneesiaturojotarokotsakooniatšimšilõunataadit" + + "umbukatuvalutaswaqitõvatamasiktiudmurdiugaritiumbundumääramata keelvaive" + + "netivepsalääneflaamiMaini frangivadjavõruvundžowalserivolaitavaraivašova" + + "rlpiriuukalmõkimegrelisogajaojapiyangbenijembanjengatukantonisapoteegiBl" + + "issi sümbolidzeelandizenagatamasikti (Maroko)sunjimittekeelelinezazaaraa" + + "bia (tänapäevane)Austria saksaŠveitsi ülemsaksaAustraalia ingliseKanada " + + "ingliseBriti ingliseAmeerika ingliseLadina-Ameerika hispaaniaEuroopa his" + + "paaniaMehhiko hispaaniaKanada prantsuseŠveitsi prantsuseHollandi alamsak" + + "saflaamiBrasiilia portugaliEuroopa portugalimoldovaserbia-horvaadiKongo " + + "suahiililihtsustatud hiinatraditsiooniline hiina" + +var etLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0005, 0x000c, 0x0012, 0x001b, 0x0020, 0x0026, 0x002d, 0x0034, 0x003a, 0x0040, 0x0046, 0x0054, 0x005d, 0x0066, 0x006f, @@ -17669,66 +19025,66 @@ var etLangIdx = []uint16{ // 611 elements // Entry C0 - FF 0x053c, 0x0541, 0x054c, 0x0552, 0x0558, 0x0563, 0x0569, 0x0570, 0x0581, 0x0581, 0x0588, 0x0596, 0x05a6, 0x05a9, 0x05bb, 0x05c3, - 0x05c3, 0x05c9, 0x05d1, 0x05d5, 0x05db, 0x05df, 0x05e5, 0x05eb, - 0x05f2, 0x05f8, 0x05fd, 0x0603, 0x0607, 0x060d, 0x0613, 0x0622, - 0x062c, 0x0632, 0x0635, 0x063e, 0x064c, 0x065c, 0x0667, 0x066f, - 0x0676, 0x067c, 0x0680, 0x0686, 0x068e, 0x0692, 0x0696, 0x069c, - 0x06a3, 0x06a7, 0x06ae, 0x06b4, 0x06ba, 0x06be, 0x06c4, 0x06cd, - 0x06d6, 0x06dd, 0x06e1, 0x06f2, 0x06f9, 0x0702, 0x070b, 0x0713, + 0x05c3, 0x05c9, 0x05d1, 0x05d5, 0x05db, 0x05e0, 0x05e6, 0x05ec, + 0x05f3, 0x05f9, 0x05fe, 0x0604, 0x0608, 0x060e, 0x0614, 0x0623, + 0x062d, 0x0633, 0x0636, 0x063f, 0x064d, 0x065d, 0x0668, 0x0670, + 0x0677, 0x067d, 0x0681, 0x0687, 0x068f, 0x0693, 0x0697, 0x069d, + 0x06a4, 0x06a8, 0x06af, 0x06b5, 0x06bd, 0x06bd, 0x06c1, 0x06c7, + 0x06d0, 0x06d9, 0x06e0, 0x06e4, 0x06f5, 0x06fc, 0x0705, 0x070e, // Entry 100 - 13F - 0x0719, 0x071e, 0x0727, 0x0733, 0x073c, 0x0744, 0x0748, 0x074d, - 0x0753, 0x075b, 0x0761, 0x0768, 0x076d, 0x0772, 0x0777, 0x0780, - 0x078a, 0x078f, 0x079b, 0x07a0, 0x07a5, 0x07a9, 0x07ad, 0x07b2, - 0x07b9, 0x07c1, 0x07ca, 0x07d0, 0x07db, 0x07e5, 0x07eb, 0x07f5, - 0x07fa, 0x0803, 0x0807, 0x080b, 0x0814, 0x0821, 0x082e, 0x083c, - 0x0848, 0x0851, 0x0858, 0x085b, 0x0863, 0x0867, 0x086b, 0x0870, - 0x0870, 0x0878, 0x0880, 0x0886, 0x0894, 0x08a2, 0x08a2, 0x08a7, - 0x08b0, 0x08b5, 0x08ba, 0x08c4, 0x08d1, 0x08d6, 0x08de, 0x08e3, + 0x0716, 0x071c, 0x0721, 0x072a, 0x0736, 0x073f, 0x0747, 0x074b, + 0x0750, 0x0756, 0x075e, 0x0764, 0x076b, 0x0770, 0x0775, 0x077a, + 0x0783, 0x078d, 0x0792, 0x079e, 0x07a3, 0x07a8, 0x07ac, 0x07b0, + 0x07b5, 0x07bc, 0x07c4, 0x07cd, 0x07d3, 0x07de, 0x07e8, 0x07ee, + 0x07f8, 0x07fd, 0x0806, 0x080a, 0x080e, 0x0817, 0x0824, 0x0831, + 0x083f, 0x084b, 0x0854, 0x085b, 0x085e, 0x0866, 0x086a, 0x086e, + 0x0873, 0x0873, 0x087b, 0x0883, 0x0889, 0x0897, 0x08a5, 0x08a5, + 0x08aa, 0x08b3, 0x08b8, 0x08bd, 0x08c7, 0x08d4, 0x08d9, 0x08e1, // Entry 140 - 17F - 0x08ec, 0x08f1, 0x08f6, 0x08fb, 0x0907, 0x0912, 0x0916, 0x091c, - 0x0926, 0x092c, 0x0930, 0x0935, 0x093b, 0x0940, 0x0947, 0x094c, - 0x095e, 0x0965, 0x096b, 0x0973, 0x097f, 0x098b, 0x0992, 0x099d, - 0x09a4, 0x09ac, 0x09af, 0x09b4, 0x09b9, 0x09cb, 0x09d2, 0x09d7, - 0x09de, 0x09ea, 0x09ea, 0x09ee, 0x09f7, 0x09fc, 0x0a00, 0x0a0c, - 0x0a13, 0x0a1f, 0x0a23, 0x0a2e, 0x0a34, 0x0a3d, 0x0a44, 0x0a4a, - 0x0a50, 0x0a62, 0x0a66, 0x0a6e, 0x0a75, 0x0a7c, 0x0a84, 0x0a89, - 0x0a8f, 0x0a96, 0x0a9d, 0x0aa4, 0x0aa9, 0x0aaf, 0x0ab4, 0x0ab9, + 0x08e6, 0x08ef, 0x08f4, 0x08f9, 0x08fe, 0x090a, 0x0915, 0x0919, + 0x091f, 0x0929, 0x092f, 0x0933, 0x0938, 0x093e, 0x0943, 0x094a, + 0x094f, 0x0961, 0x0968, 0x096e, 0x0976, 0x0982, 0x098e, 0x0995, + 0x09a0, 0x09a7, 0x09af, 0x09b2, 0x09b7, 0x09bc, 0x09ce, 0x09d5, + 0x09da, 0x09e1, 0x09ed, 0x09ed, 0x09f1, 0x09fa, 0x09ff, 0x0a03, + 0x0a0f, 0x0a16, 0x0a22, 0x0a26, 0x0a31, 0x0a37, 0x0a40, 0x0a47, + 0x0a4d, 0x0a53, 0x0a65, 0x0a69, 0x0a71, 0x0a78, 0x0a7f, 0x0a87, + 0x0a8c, 0x0a92, 0x0a99, 0x0aa0, 0x0aa7, 0x0aac, 0x0ab2, 0x0ab7, // Entry 180 - 1BF - 0x0ab9, 0x0ac0, 0x0ac5, 0x0acb, 0x0ad3, 0x0ad8, 0x0adc, 0x0ae6, - 0x0aed, 0x0af2, 0x0afa, 0x0aff, 0x0b02, 0x0b08, 0x0b0d, 0x0b1f, - 0x0b23, 0x0b29, 0x0b2d, 0x0b33, 0x0b3b, 0x0b44, 0x0b4b, 0x0b50, - 0x0b54, 0x0b5a, 0x0b61, 0x0b66, 0x0b6a, 0x0b7f, 0x0b87, 0x0b95, - 0x0b99, 0x0ba0, 0x0bab, 0x0bb2, 0x0bba, 0x0bc1, 0x0bc5, 0x0bcd, - 0x0bd5, 0x0bdf, 0x0be6, 0x0bed, 0x0bf4, 0x0bfc, 0x0c01, 0x0c05, - 0x0c11, 0x0c1b, 0x0c21, 0x0c25, 0x0c2e, 0x0c34, 0x0c39, 0x0c3d, - 0x0c3f, 0x0c45, 0x0c4f, 0x0c54, 0x0c60, 0x0c67, 0x0c6b, 0x0c76, + 0x0abc, 0x0abc, 0x0ac3, 0x0ac8, 0x0ace, 0x0ad6, 0x0adb, 0x0aef, + 0x0af3, 0x0afd, 0x0b04, 0x0b09, 0x0b11, 0x0b16, 0x0b19, 0x0b1f, + 0x0b24, 0x0b36, 0x0b3a, 0x0b40, 0x0b44, 0x0b4a, 0x0b52, 0x0b5b, + 0x0b62, 0x0b67, 0x0b6b, 0x0b71, 0x0b78, 0x0b7d, 0x0b81, 0x0b96, + 0x0b9e, 0x0bac, 0x0bb0, 0x0bb7, 0x0bc2, 0x0bc9, 0x0bd1, 0x0bd8, + 0x0bdc, 0x0be4, 0x0bec, 0x0bf6, 0x0bfd, 0x0c04, 0x0c0b, 0x0c13, + 0x0c18, 0x0c1c, 0x0c28, 0x0c32, 0x0c38, 0x0c3c, 0x0c45, 0x0c4b, + 0x0c50, 0x0c54, 0x0c56, 0x0c5c, 0x0c66, 0x0c6b, 0x0c77, 0x0c7e, // Entry 1C0 - 1FF - 0x0c7b, 0x0c85, 0x0c8d, 0x0c92, 0x0c97, 0x0c9c, 0x0ca4, 0x0cb0, - 0x0cbb, 0x0cc2, 0x0cca, 0x0cd4, 0x0cd9, 0x0ce0, 0x0cf4, 0x0d06, - 0x0d15, 0x0d20, 0x0d26, 0x0d2f, 0x0d37, 0x0d3e, 0x0d45, 0x0d4b, - 0x0d57, 0x0d5d, 0x0d5d, 0x0d68, 0x0d6f, 0x0d78, 0x0d7f, 0x0d84, - 0x0d89, 0x0d94, 0x0d9a, 0x0da2, 0x0da9, 0x0db1, 0x0db5, 0x0dbc, - 0x0dc3, 0x0dd2, 0x0dd9, 0x0ddf, 0x0de6, 0x0df0, 0x0df7, 0x0dfc, - 0x0e05, 0x0e0a, 0x0e0a, 0x0e15, 0x0e1b, 0x0e1f, 0x0e23, 0x0e2b, - 0x0e3a, 0x0e42, 0x0e4a, 0x0e50, 0x0e55, 0x0e64, 0x0e6a, 0x0e76, + 0x0c82, 0x0c8d, 0x0c92, 0x0c9c, 0x0ca4, 0x0ca9, 0x0cae, 0x0cb3, + 0x0cbb, 0x0cc7, 0x0cd2, 0x0cd9, 0x0ce1, 0x0ceb, 0x0cf0, 0x0cf7, + 0x0d0b, 0x0d1d, 0x0d2c, 0x0d37, 0x0d3d, 0x0d46, 0x0d4e, 0x0d55, + 0x0d5c, 0x0d62, 0x0d6e, 0x0d74, 0x0d74, 0x0d7f, 0x0d86, 0x0d8f, + 0x0d96, 0x0d9b, 0x0da0, 0x0dab, 0x0db1, 0x0db9, 0x0dc0, 0x0dc8, + 0x0dcc, 0x0dd3, 0x0dda, 0x0de9, 0x0df0, 0x0df6, 0x0dfd, 0x0e07, + 0x0e0e, 0x0e13, 0x0e1c, 0x0e21, 0x0e21, 0x0e2c, 0x0e32, 0x0e36, + 0x0e3a, 0x0e42, 0x0e51, 0x0e59, 0x0e61, 0x0e67, 0x0e6c, 0x0e7b, // Entry 200 - 23F - 0x0e7e, 0x0e89, 0x0e93, 0x0e9e, 0x0ea8, 0x0eaf, 0x0eb4, 0x0ebb, - 0x0ec1, 0x0ec5, 0x0ed0, 0x0ed6, 0x0eda, 0x0ee0, 0x0ee7, 0x0ef3, - 0x0efb, 0x0f03, 0x0f07, 0x0f0c, 0x0f10, 0x0f16, 0x0f1c, 0x0f22, - 0x0f26, 0x0f2d, 0x0f33, 0x0f3b, 0x0f43, 0x0f4b, 0x0f54, 0x0f5d, - 0x0f6a, 0x0f70, 0x0f76, 0x0f7f, 0x0f87, 0x0f92, 0x0f99, 0x0f9f, - 0x0fa6, 0x0fab, 0x0fb4, 0x0fbb, 0x0fc2, 0x0fc9, 0x0fcd, 0x0fd0, - 0x0fd6, 0x0fdb, 0x0fe8, 0x0ff4, 0x0ff9, 0x0ffe, 0x1005, 0x100c, - 0x1013, 0x1018, 0x101d, 0x1025, 0x1027, 0x102f, 0x1036, 0x103a, + 0x0e81, 0x0e8d, 0x0e95, 0x0ea0, 0x0eaa, 0x0eb5, 0x0ebf, 0x0ec6, + 0x0ecb, 0x0ed2, 0x0ed8, 0x0edc, 0x0ee7, 0x0eed, 0x0ef1, 0x0ef7, + 0x0efe, 0x0f0a, 0x0f12, 0x0f1a, 0x0f1e, 0x0f23, 0x0f27, 0x0f2d, + 0x0f33, 0x0f39, 0x0f3d, 0x0f44, 0x0f4a, 0x0f52, 0x0f5a, 0x0f62, + 0x0f6b, 0x0f74, 0x0f81, 0x0f87, 0x0f8d, 0x0f96, 0x0f9e, 0x0fa9, + 0x0fb0, 0x0fb6, 0x0fbd, 0x0fc2, 0x0fcb, 0x0fd2, 0x0fd9, 0x0fe0, + 0x0ff0, 0x0ff3, 0x0ff9, 0x0ffe, 0x100b, 0x1017, 0x101c, 0x1021, + 0x1028, 0x102f, 0x1036, 0x103b, 0x1040, 0x1048, 0x104a, 0x1052, // Entry 240 - 27F - 0x103d, 0x1041, 0x1049, 0x104e, 0x1056, 0x105d, 0x1066, 0x1076, - 0x107e, 0x1084, 0x1096, 0x109b, 0x10a9, 0x10ad, 0x10c4, 0x10c4, - 0x10d1, 0x10e4, 0x10f6, 0x1104, 0x1111, 0x1121, 0x113a, 0x114b, - 0x115c, 0x115c, 0x116c, 0x117e, 0x1190, 0x1196, 0x11a9, 0x11ba, - 0x11c1, 0x11d0, 0x11de, -} // Size: 1246 bytes - -const faLangStr string = "" + // Size: 7988 bytes + 0x1059, 0x105d, 0x1060, 0x1064, 0x106c, 0x1071, 0x1079, 0x1080, + 0x1089, 0x1099, 0x10a1, 0x10a7, 0x10b9, 0x10be, 0x10cc, 0x10d0, + 0x10e7, 0x10e7, 0x10f4, 0x1107, 0x1119, 0x1127, 0x1134, 0x1144, + 0x115d, 0x116e, 0x117f, 0x117f, 0x118f, 0x11a1, 0x11b3, 0x11b9, + 0x11cc, 0x11dd, 0x11e4, 0x11f3, 0x1201, 0x1213, 0x1229, +} // Size: 1254 bytes + +const faLangStr string = "" + // Size: 8052 bytes "آفاریآبخازیاوستاییآفریکانسآکانامهریآراگونیعربیآسامیآواریآیماراییترکی آذر" + "بایجانیباشغیریبلاروسیبلغاریبیسلامابامباراییبنگالیتبتیبرتونبوسنیاییکاتال" + "انچچنیچاموروییکورسیکریاییچکیاسلاوی کلیساییچوواشیولزیدانمارکیآلمانیدیوهی" + @@ -17761,36 +19117,37 @@ const faLangStr string = "" + // Size: 7988 bytes "وییگبایاییدری زرتشتیگی\u200cئزیگیلبرتیگیلکیآلمانی معیار میانهآلمانی علی" + "ای باستانگوندیگورونتالوگوتیگریبویییونانی کهنآلمانی سوئیسیگوسیگویچ اینها" + "یداییهاوائیاییهندی فیجیاییهیلی\u200cگاینونیهیتیهمونگصُربی علیاهوپاایبان" + - "یایبیبوییایلوکوییاینگوشیلوجباننگومباماچامه\u200cایفارسی یهودیعربی یهودی" + - "قره\u200cقالپاقیقبایلیکاچینیجوکامباییکاویاییکاباردینیتیاپیماکوندهکابوور" + - "دیانوکوروخاسیاییختنیکوجراچینیکهوارکرمانجیکاکاییکالنجینکیمبوندوییکومی پر" + - "میاککنکانیکپله\u200cایقره\u200cچایی‐بالکاریکاریلیانیکوروخیشامبالابافیای" + - "یریپواریکومیکیکوتنیلادینولانگیلاهندالامبالزگیلاکوتامونگوییلوزیاییلری شم" + - "الیلوبایی‐لولوالویسنولونداییلوئوییلوشه\u200cایلویاچینی ادبیمادوراییماگا" + - "هیاییمایدیلیماکاسارماندینگوییماساییمکشاییماندارمنده\u200cایمروییموریسین" + - "ایرلندی میانهماکوا متومتاییمیکماکیمینانگ\u200cکابوییمانچوییمیته\u200cای" + - "موهاکیماسیاییماندانگیچندین زبانکریکیمیراندیمارواریارزیاییمازندرانیناپلی" + - "ناماییآلمانی سفلینواریایینیاسینیوییکوازیوانگیمبونینغایینرس باستاننکوسوت" + - "ویی شمالینویرنواریایی کلاسیکنیام\u200cوزیایینیانکوله\u200cاینیورویینزیم" + - "اییاوسیجیترکی عثمانیپانگاسینانیپهلویپامپانگاییپاپیامنتوپالائویینیم" + - "\u200cزبان نیجریه\u200cایآلمانی پنسیلوانیاییفارسی باستانفنیقیپانپییپروسی" + - "پرووانسی باستانکیچه\u200cراجستانیراپانوییراروتونگاییرومبوییرومانوییآروم" + - "انیرواییسانداوه\u200cاییاقوتیآرامی سامریسامبوروساساکیسانتالیانگامباییسا" + - "نگوییسیسیلیاسکاتلندیکردی جنوبیسناسلکوپیکویرابورا سنیایرلندی باستانتاچل" + - "\u200cهیتشانیعربی چادیسیداموییسیلزیایی سفلیسامی جنوبیلوله سامیایناری سام" + - "یاسکولت سامیسونینکه\u200cایسغدیتاکی\u200cتاکیسریریساهوسوکوماییسوسوییسوم" + - "ریکوموریسریانی کلاسیکسریانیسیلزیاییتمنه\u200cایتسوییترنوتتومیتیگره" + - "\u200cایتیویکلینگونتلین\u200cگیتیتاماشقیتونگایی نیاساتوک\u200cپیسینیتارو" + - "کوییتسیم\u200cشیانیتومبوکاییتووالوییتسواکیتوواییآمازیغی اطلس مرکزیاودمو" + - "رتیاوگاریتیامبوندوییریشهویاییوتیونجووالسروالاموواراییواشوییوارلپیریقلمو" + - "قیسوگایییائویییاپییانگبنییمباییکانتونیزاپوتکیزناگاآمازیغی معیار مراکشزو" + - "نیاییبدون محتوای زبانیزازاییعربی رسمیترکی آذری جنوبیآلمانی اتریشآلمانی " + - "معیار سوئیسانگلیسی استرالیاانگلیسی کاناداانگلیسی بریتانیاانگلیسی امریکا" + - "اسپانیایی امریکای لاتیناسپانیایی اروپااسپانیایی مکزیکدریفرانسوی کاناداف" + - "رانسوی سوئیسساکسونی سفلیفلمنگیپرتغالی برزیلپرتغالی اروپامولداویاییصرب و" + - " کرواتیسواحیلی کنگوچینی ساده\u200cشدهچینی سنتی" - -var faLangIdx = []uint16{ // 613 elements + "یایبیبیوایلوکوییاینگوشیلوجباننگومباماچامه\u200cایفارسی یهودیعربی یهودیق" + + "ره\u200cقالپاقیقبایلیکاچینیجوکامباییکاویاییکاباردینیتیاپیماکوندهکابوورد" + + "یانوکوروخاسیاییختنیکوجراچینیکهوارکرمانجیکاکاییکالنجینکیمبوندوییکومی پرم" + + "یاککنکانیکپله\u200cایقره\u200cچایی‐بالکاریکاریلیانیکوروخیشامبالابافیایی" + + "ریپواریکومیکیکوتنیلادینولانگیلاهندالامبالزگیلاکوتامونگوییزبان آمیختهٔ م" + + "ادری لوئیزیانالوزیاییلری شمالیلوبایی‐لولوالویسنولونداییلوئوییلوشه\u200c" + + "ایلویاچینی ادبیمادوراییماگاهیاییمایدیلیماکاسارماندینگوییماساییمکشاییمان" + + "دارمنده\u200cایمروییموریسینایرلندی میانهماکوا متومتاییمیکماکیمینانگ" + + "\u200cکابوییمانچوییمیته\u200cایموهاکیماسیاییماندانگیچندین زبانکریکیمیران" + + "دیمارواریارزیاییمازندرانیناپلیناماییآلمانی سفلینواریایینیاسینیوییکوازیو" + + "انگیمبونینغایینرس باستاننکوسوتویی شمالینویرنواریایی کلاسیکنیام\u200cوزی" + + "ایینیانکوله\u200cاینیورویینزیماییاوسیجیترکی عثمانیپانگاسینانیپهلویپامپا" + + "نگاییپاپیامنتوپالائویینیم\u200cزبان نیجریه\u200cایآلمانی پنسیلوانیاییفا" + + "رسی باستانفنیقیپانپییپروسیپرووانسی باستانکیچه\u200cراجستانیراپانوییرارو" + + "تونگاییرومبوییرومانوییآرومانیرواییسانداوه\u200cاییاقوتیآرامی سامریسامبو" + + "روساساکیسانتالیانگامباییسانگوییسیسیلیاسکاتلندیکردی جنوبیسناسلکوپیکویراب" + + "ورا سنیایرلندی باستانتاچل\u200cهیتشانیعربی چادیسیداموییسیلزیایی سفلیسام" + + "ی جنوبیلوله سامیایناری سامیاسکولت سامیسونینکه\u200cایسغدیتاکی\u200cتاکی" + + "سریریساهوسوکوماییسوسوییسومریکوموریسریانی کلاسیکسریانیسیلزیاییتمنه\u200c" + + "ایتسوییترنوتتومیتیگره\u200cایتیویکلینگونتلین\u200cگیتیتاماشقیتونگایی نی" + + "اساتوک\u200cپیسینیتاروکوییتسیم\u200cشیانیتومبوکاییتووالوییتسواکیتوواییآ" + + "مازیغی اطلس مرکزیاودمورتیاوگاریتیامبوندوییزبان نامشخصویاییوتیونجووالسرو" + + "الاموواراییواشوییوارلپیریقلموقیسوگایییائویییاپییانگبنییمباییکانتونیزاپو" + + "تکیزناگاآمازیغی معیار مراکشزونیاییبدون محتوای زبانیزازاییعربی رسمیترکی " + + "آذری جنوبیآلمانی اتریشآلمانی معیار سوئیسانگلیسی استرالیاانگلیسی کاناداا" + + "نگلیسی بریتانیاانگلیسی امریکااسپانیایی امریکای لاتیناسپانیایی اروپااسپا" + + "نیایی مکزیکدریفرانسوی کانادافرانسوی سوئیسساکسونی سفلیفلمنگیپرتغالی برزی" + + "لپرتغالی اروپامولداویاییصرب و کرواتیسواحیلی کنگوچینی ساده\u200cشدهچینی " + + "سنتی" + +var faLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x000a, 0x0016, 0x0024, 0x0034, 0x003c, 0x0046, 0x0054, 0x005c, 0x0066, 0x0070, 0x0080, 0x009d, 0x00ab, 0x00b9, 0x00c5, @@ -17825,265 +19182,267 @@ var faLangIdx = []uint16{ // 613 elements 0x0bbc, 0x0bc6, 0x0bd2, 0x0bd2, 0x0bdc, 0x0bdc, 0x0bdc, 0x0bef, 0x0bfd, 0x0c09, 0x0c11, 0x0c11, 0x0c11, 0x0c1f, 0x0c1f, 0x0c34, 0x0c3c, 0x0c4a, 0x0c56, 0x0c56, 0x0c64, 0x0c72, 0x0c72, 0x0c7a, - 0x0c7a, 0x0c86, 0x0c92, 0x0c92, 0x0c92, 0x0c9c, 0x0ca4, 0x0cae, - 0x0cba, 0x0cc2, 0x0cd0, 0x0cd0, 0x0cde, 0x0cf6, 0x0d06, 0x0d12, + 0x0c7a, 0x0c86, 0x0c92, 0x0c92, 0x0c92, 0x0c92, 0x0c9c, 0x0ca4, + 0x0cae, 0x0cba, 0x0cc2, 0x0cd0, 0x0cd0, 0x0cde, 0x0cf6, 0x0d06, // Entry 100 - 13F - 0x0d25, 0x0d2d, 0x0d2d, 0x0d40, 0x0d66, 0x0d72, 0x0d82, 0x0d90, - 0x0d9a, 0x0da8, 0x0da8, 0x0db4, 0x0dc2, 0x0dca, 0x0dd4, 0x0de7, - 0x0de7, 0x0df5, 0x0e0a, 0x0e1d, 0x0e2d, 0x0e3d, 0x0e45, 0x0e4f, - 0x0e4f, 0x0e5e, 0x0e6a, 0x0e76, 0x0e8f, 0x0e8f, 0x0e9b, 0x0e9b, - 0x0ea5, 0x0eb5, 0x0eb5, 0x0ebd, 0x0ed6, 0x0eef, 0x0f0a, 0x0f0a, - 0x0f1f, 0x0f32, 0x0f44, 0x0f4c, 0x0f62, 0x0f62, 0x0f6e, 0x0f7c, - 0x0f8f, 0x0f9c, 0x0faa, 0x0fb4, 0x0fd6, 0x0ffa, 0x0ffa, 0x1004, - 0x1016, 0x101e, 0x102c, 0x103f, 0x1058, 0x1058, 0x1058, 0x1060, + 0x0d12, 0x0d25, 0x0d2d, 0x0d2d, 0x0d40, 0x0d66, 0x0d72, 0x0d82, + 0x0d90, 0x0d9a, 0x0da8, 0x0da8, 0x0db4, 0x0dc2, 0x0dca, 0x0dd4, + 0x0de7, 0x0de7, 0x0df5, 0x0e0a, 0x0e1d, 0x0e2d, 0x0e3d, 0x0e45, + 0x0e4f, 0x0e4f, 0x0e5e, 0x0e6a, 0x0e76, 0x0e8f, 0x0e8f, 0x0e9b, + 0x0e9b, 0x0ea5, 0x0eb5, 0x0eb5, 0x0ebd, 0x0ed6, 0x0eef, 0x0f0a, + 0x0f0a, 0x0f1f, 0x0f32, 0x0f44, 0x0f4c, 0x0f62, 0x0f62, 0x0f6e, + 0x0f7c, 0x0f8f, 0x0f9c, 0x0faa, 0x0fb4, 0x0fd6, 0x0ffa, 0x0ffa, + 0x1004, 0x1016, 0x101e, 0x102c, 0x103f, 0x1058, 0x1058, 0x1058, // Entry 140 - 17F - 0x106f, 0x107d, 0x107d, 0x108f, 0x10a6, 0x10bf, 0x10c7, 0x10d1, - 0x10e4, 0x10e4, 0x10ec, 0x10f8, 0x1108, 0x1118, 0x1126, 0x1126, - 0x1126, 0x1132, 0x113e, 0x1151, 0x1166, 0x1179, 0x1179, 0x1190, - 0x119c, 0x11a8, 0x11ac, 0x11ba, 0x11c8, 0x11da, 0x11da, 0x11e4, - 0x11f2, 0x1208, 0x1208, 0x1210, 0x1210, 0x121e, 0x1226, 0x1238, - 0x1242, 0x1250, 0x125c, 0x126a, 0x127e, 0x1293, 0x129f, 0x129f, - 0x12ae, 0x12d0, 0x12d0, 0x12d0, 0x12e2, 0x12ee, 0x12fc, 0x130a, - 0x1318, 0x1324, 0x132e, 0x133a, 0x1344, 0x1350, 0x135a, 0x1362, + 0x1060, 0x106f, 0x107d, 0x107d, 0x108f, 0x10a6, 0x10bf, 0x10c7, + 0x10d1, 0x10e4, 0x10e4, 0x10ec, 0x10f8, 0x1106, 0x1116, 0x1124, + 0x1124, 0x1124, 0x1130, 0x113c, 0x114f, 0x1164, 0x1177, 0x1177, + 0x118e, 0x119a, 0x11a6, 0x11aa, 0x11b8, 0x11c6, 0x11d8, 0x11d8, + 0x11e2, 0x11f0, 0x1206, 0x1206, 0x120e, 0x120e, 0x121c, 0x1224, + 0x1236, 0x1240, 0x124e, 0x125a, 0x1268, 0x127c, 0x1291, 0x129d, + 0x129d, 0x12ac, 0x12ce, 0x12ce, 0x12ce, 0x12e0, 0x12ec, 0x12fa, + 0x1308, 0x1316, 0x1322, 0x132c, 0x1338, 0x1342, 0x134e, 0x1358, // Entry 180 - 1BF - 0x1362, 0x1362, 0x1362, 0x136e, 0x136e, 0x137c, 0x138a, 0x139b, - 0x139b, 0x13b4, 0x13c0, 0x13ce, 0x13da, 0x13e9, 0x13f1, 0x1402, - 0x1402, 0x1412, 0x1412, 0x1424, 0x1432, 0x1440, 0x1454, 0x1460, - 0x1460, 0x146c, 0x1478, 0x1487, 0x1491, 0x149f, 0x14b8, 0x14c9, - 0x14d3, 0x14e1, 0x14fc, 0x150a, 0x1519, 0x1525, 0x1533, 0x1533, - 0x1543, 0x1556, 0x1560, 0x156e, 0x157c, 0x157c, 0x157c, 0x158a, - 0x159c, 0x159c, 0x15a6, 0x15b2, 0x15c7, 0x15d7, 0x15e1, 0x15eb, - 0x15eb, 0x15f7, 0x1609, 0x1613, 0x1626, 0x1626, 0x162c, 0x1643, + 0x1360, 0x1360, 0x1360, 0x1360, 0x136c, 0x136c, 0x137a, 0x13af, + 0x13bd, 0x13ce, 0x13ce, 0x13e7, 0x13f3, 0x1401, 0x140d, 0x141c, + 0x1424, 0x1435, 0x1435, 0x1445, 0x1445, 0x1457, 0x1465, 0x1473, + 0x1487, 0x1493, 0x1493, 0x149f, 0x14ab, 0x14ba, 0x14c4, 0x14d2, + 0x14eb, 0x14fc, 0x1506, 0x1514, 0x152f, 0x153d, 0x154c, 0x1558, + 0x1566, 0x1566, 0x1576, 0x1589, 0x1593, 0x15a1, 0x15af, 0x15af, + 0x15af, 0x15bd, 0x15cf, 0x15cf, 0x15d9, 0x15e5, 0x15fa, 0x160a, + 0x1614, 0x161e, 0x161e, 0x162a, 0x163c, 0x1646, 0x1659, 0x1659, // Entry 1C0 - 1FF - 0x164b, 0x1668, 0x167f, 0x1696, 0x16a4, 0x16b2, 0x16be, 0x16d3, - 0x16e9, 0x16f3, 0x1707, 0x1719, 0x1729, 0x1729, 0x174e, 0x1773, - 0x1773, 0x178a, 0x178a, 0x1794, 0x1794, 0x1794, 0x17a0, 0x17aa, - 0x17c7, 0x17d2, 0x17d2, 0x17e2, 0x17f2, 0x1808, 0x1808, 0x1808, - 0x1816, 0x1826, 0x1826, 0x1826, 0x1826, 0x1834, 0x183e, 0x1853, - 0x185f, 0x1874, 0x1882, 0x188e, 0x189c, 0x189c, 0x18ae, 0x18bc, - 0x18c8, 0x18da, 0x18da, 0x18ed, 0x18ed, 0x18f3, 0x18f3, 0x18ff, - 0x1918, 0x1933, 0x1933, 0x1944, 0x194c, 0x195d, 0x196d, 0x1986, + 0x165f, 0x1676, 0x167e, 0x169b, 0x16b2, 0x16c9, 0x16d7, 0x16e5, + 0x16f1, 0x1706, 0x171c, 0x1726, 0x173a, 0x174c, 0x175c, 0x175c, + 0x1781, 0x17a6, 0x17a6, 0x17bd, 0x17bd, 0x17c7, 0x17c7, 0x17c7, + 0x17d3, 0x17dd, 0x17fa, 0x1805, 0x1805, 0x1815, 0x1825, 0x183b, + 0x183b, 0x183b, 0x1849, 0x1859, 0x1859, 0x1859, 0x1859, 0x1867, + 0x1871, 0x1886, 0x1892, 0x18a7, 0x18b5, 0x18c1, 0x18cf, 0x18cf, + 0x18e1, 0x18ef, 0x18fb, 0x190d, 0x190d, 0x1920, 0x1920, 0x1926, + 0x1926, 0x1932, 0x194b, 0x1966, 0x1966, 0x1977, 0x197f, 0x1990, // Entry 200 - 23F - 0x1986, 0x1999, 0x19aa, 0x19bf, 0x19d4, 0x19e9, 0x19f1, 0x1a04, - 0x1a0e, 0x1a16, 0x1a16, 0x1a26, 0x1a32, 0x1a3c, 0x1a48, 0x1a61, - 0x1a6d, 0x1a7d, 0x1a7d, 0x1a8c, 0x1a96, 0x1a9e, 0x1aa8, 0x1ab9, - 0x1ac1, 0x1ac1, 0x1ac1, 0x1acf, 0x1ae2, 0x1ae2, 0x1af0, 0x1b09, - 0x1b1e, 0x1b1e, 0x1b2e, 0x1b2e, 0x1b43, 0x1b43, 0x1b55, 0x1b65, - 0x1b71, 0x1b7d, 0x1b9f, 0x1baf, 0x1bbf, 0x1bd1, 0x1bd9, 0x1be3, - 0x1be3, 0x1be3, 0x1be3, 0x1be3, 0x1be9, 0x1be9, 0x1bf1, 0x1bfb, - 0x1c07, 0x1c13, 0x1c1f, 0x1c2f, 0x1c2f, 0x1c3b, 0x1c3b, 0x1c47, + 0x19a0, 0x19b9, 0x19b9, 0x19cc, 0x19dd, 0x19f2, 0x1a07, 0x1a1c, + 0x1a24, 0x1a37, 0x1a41, 0x1a49, 0x1a49, 0x1a59, 0x1a65, 0x1a6f, + 0x1a7b, 0x1a94, 0x1aa0, 0x1ab0, 0x1ab0, 0x1abf, 0x1ac9, 0x1ad1, + 0x1adb, 0x1aec, 0x1af4, 0x1af4, 0x1af4, 0x1b02, 0x1b15, 0x1b15, + 0x1b23, 0x1b3c, 0x1b51, 0x1b51, 0x1b61, 0x1b61, 0x1b76, 0x1b76, + 0x1b88, 0x1b98, 0x1ba4, 0x1bb0, 0x1bd2, 0x1be2, 0x1bf2, 0x1c04, + 0x1c19, 0x1c23, 0x1c23, 0x1c23, 0x1c23, 0x1c23, 0x1c29, 0x1c29, + 0x1c31, 0x1c3b, 0x1c47, 0x1c53, 0x1c5f, 0x1c6f, 0x1c6f, 0x1c7b, // Entry 240 - 27F - 0x1c53, 0x1c5b, 0x1c69, 0x1c75, 0x1c75, 0x1c83, 0x1c91, 0x1c91, - 0x1c91, 0x1c9b, 0x1cbf, 0x1ccd, 0x1ced, 0x1cf9, 0x1d0a, 0x1d26, - 0x1d3d, 0x1d5f, 0x1d7e, 0x1d99, 0x1db8, 0x1dd3, 0x1dff, 0x1e1c, - 0x1e39, 0x1e3f, 0x1e5a, 0x1e73, 0x1e8a, 0x1e96, 0x1eaf, 0x1ec8, - 0x1edc, 0x1ef2, 0x1f09, 0x1f23, 0x1f34, -} // Size: 1250 bytes - -const fiLangStr string = "" + // Size: 4736 bytes + 0x1c7b, 0x1c87, 0x1c93, 0x1c9b, 0x1ca9, 0x1cb5, 0x1cb5, 0x1cc3, + 0x1cd1, 0x1cd1, 0x1cd1, 0x1cdb, 0x1cff, 0x1d0d, 0x1d2d, 0x1d39, + 0x1d4a, 0x1d66, 0x1d7d, 0x1d9f, 0x1dbe, 0x1dd9, 0x1df8, 0x1e13, + 0x1e3f, 0x1e5c, 0x1e79, 0x1e7f, 0x1e9a, 0x1eb3, 0x1eca, 0x1ed6, + 0x1eef, 0x1f08, 0x1f1c, 0x1f32, 0x1f49, 0x1f63, 0x1f74, +} // Size: 1254 bytes + +const fiLangStr string = "" + // Size: 4770 bytes "afarabhaasiavestaafrikaansakanamharaaragoniaarabiaassamiavaariaimaraazer" + "ibaškiirivalkovenäjäbulgariabislamabambarabengalitiibetbretonibosniakata" + "laanitšetšeenitšamorrokorsikacreetšekkikirkkoslaavitšuvassikymritanskasa" + - "ksadivehidzongkhaewekreikkaenglantiesperantoespanjavirobaskifarsifulanis" + - "uomifidžifääriranskalänsifriisiiirigaeligaliciaguaranigudžaratimanksihau" + - "sahepreahindihiri-motukroatiahaitiunkariarmeniahererointerlinguaindonesi" + - "ainterlingueigbosichuanin-yiinupiaqidoislantiitaliainuktitutjapanijaavag" + - "eorgiakongokikujukuanjamakazakkikalaallisutkhmerkannadakoreakanurikašmir" + - "ikurdikomikornikirgiisilatinaluxemburggandalimburglingalalaoliettuakatan" + - "ganlubalatviamalagassimarshallmaorimakedoniamalajalammongolimarathimalai" + - "jimaltaburmanaurupohjois-ndebelenepalindongahollantinorjan nynorsknorjan" + - " bokmåletelä-ndebelenavajonjandžaoksitaaniodžibwaoromoorijaosseettipandž" + - "abipaalipuolapaštuportugaliketšuaretoromaanirundiromaniavenäjäruandasans" + - "kritsardisindhipohjoissaamesangosinhalaslovakkisloveenisamoašonasomalial" + - "baniaserbiaswazieteläsothosundaruotsiswahilitamilitelugutadžikkithaitigr" + - "injaturkmeenitswanatongaturkkitsongatataaritahitiuiguuriukrainaurduuzbek" + - "kivendavietnamvolapükvalloniwolofxhosajiddišjorubazhuangkiinazuluatšehat" + - "šoliadangmeadygetunisianarabiaafrihiliaghemainuakkadialabamaaleuttigegi" + - "altaimuinaisenglantiangikavaltakunnanarameamapudungunaraonaarapahoalgeri" + - "anarabiaarawakmarokonarabiaegyptinarabiaasuamerikkalainen viittomakielia" + - "sturiakotavaawadhibelutšibalibaijeribasaabamumbatak-tobaghomalabedžabemb" + - "abetawibenafutbadagalänsibelutšibhodžpuribikolbinibanjarkomsiksikabišnup" + - "riabahtiaribradžbrahuibodokooseburjaattibugibulubilinmedumbacaddokaribic" + - "ayugaatsamcebuanokigatšibtšatšagataichuukmarichinook-jargonchoctawchipew" + - "yancherokeecheyennesoranikopticapiznonkrimintataariseychellienkreolikašu" + - "bidakotadargitaitadelawareslevidogribdinkadjermadogrialasorbidusundualak" + - "eskihollantijola-fonyidjuladazagaembuefikemiliamuinaisegyptiekajukelamik" + - "eskienglantialaskanjupikewondoextremadurafangfilipinomeänkielifoncajunke" + - "skiranskamuinaisranskaarpitaanipohjoisfriisiitäfriisifriuligagagauzigan-" + - "kiinagajogbajazoroastrialaisdarige’ezkiribatigilakikeskiyläsaksamuinaisy" + - "läsaksagoankonkanigondigorontalogoottigrebomuinaiskreikkasveitsinsaksawa" + - "yuufrafragusiigwitšinhaidahakka-kiinahavaijifidžinhindihiligainoheettihm" + - "ongyläsorbixiang-kiinahupaibanibibioilokoinguušiinkeroinenjamaikankreoli" + - "englantilojbanngombamachamejuutalaispersiajuutalaisarabiajuuttikarakalpa" + - "kkikabyylikatšinjjukambakavikabardikanembutyapmakondekapverdenkreolikeny" + - "angnorsunluurannikonkorokaingangkhasikhotanikoyra chiinikhowarkirmanjkik" + - "akokalenjinkimbundukomipermjakkikonkanikosraekpellekaratšai-balkaarikrio" + - "kinaray-akarjalakurukhshambalabafiakölschkumykkikutenailadinolangolahnda" + - "lambalezgilingua franca novaliguuriliivilakotalombardimongolozipohjoislu" + - "rilatgalliluluanlubaluiseñolundaluolusailuhyaklassinen kiinalazimadurama" + - "famagahimaithilimakassarmandingomaasaimabamokšamandarmendemerumorisyenke" + - "ski-iirimakua-meettometa’micmacminangkabaumantšumanipurimohawkmossivuori" + - "marimundanguseita kieliäcreekmirandeesimarwarimentawaimyeneersämazandara" + - "nimin nan -kiinanapolinamaalasaksanewariniasniueao nagakwasiongiemboonno" + - "gaimuinaisnorjanovialn’kopohjoissothonuerklassinen newarinyamwezinyankol" + - "enyoronzimaosageosmanipangasinanpahlavipampangapapiamentupalaupicardinig" + - "erianpidginpennsylvaniansaksaplautdietschmuinaispersiapfaltsifoinikiapie" + - "montepontoksenkreikkapohnpeimuinaispreussimuinaisprovensaalikʼicheʼchimb" + - "orazonylänköketšuaradžastanirapanuirarotongaromagnolitarifitromboromanir" + - "otumaruteenirovianaaromaniarwasandawejakuuttisamarianarameasamburusasaks" + - "antalisauraštringambaysangusisiliaskottisassarinsardieteläkurdisenecasen" + - "aseriselkuppikoyraboro sennimuinaisiirisamogiittitašelhitshantšadinarabi" + - "asidamosleesiansaksaselayareteläsaameluulajansaameinarinsaamekoltansaame" + - "soninkesogdisrananserersahosaterlandinfriisisukumasususumerikomorimuinai" + - "ssyyriasyyriasleesiatulutemnetesoterenotetumtigretivtokelautsahuriklingo" + - "ntlingittališitamašekmalawintongatok-pisinturojotarokotsakoniatsimšitati" + - "tumbukatuvalutasawaqtuvakeskiatlaksentamazightudmurttiugaritmbundujuuriv" + - "aivenetsiavepsälänsiflaamimaininfrankkivatjavõrovunjowalserwolaittawaray" + - "washowarlpiriwu-kiinakalmukkimingrelisogajaojapiyangbenyembañeengatúkant" + - "oninkiinazapoteekkiblisskieliseelantizenagavakioitu tamazightzuniei kiel" + - "ellistä sisältöäzazayleisarabiaitävallansaksasveitsinyläsaksaaustraliane" + - "nglantikanadanenglantibritannianenglantiamerikanenglantiamerikanespanjae" + - "uroopanespanjameksikonespanjakanadanranskasveitsinranskaalankomaidenalas" + - "aksaflaamibrasilianportugalieuroopanportugalimoldovaserbokroaattikingwan" + - "ayksinkertaistettu kiinaperinteinen kiina" - -var fiLangIdx = []uint16{ // 613 elements + "ksadivehidzongkhaewekreikkaenglantiesperantoespanjavirobaskipersiafulani" + + "suomifidžifääriranskalänsifriisiiirigaeligaliciaguaranigudžaratimanksiha" + + "usahepreahindihiri-motukroatiahaitiunkariarmeniahererointerlinguaindones" + + "iainterlingueigbosichuanin-yiinupiaqidoislantiitaliainuktitutjapanijaava" + + "georgiakongokikujukuanjamakazakkikalaallisutkhmerkannadakoreakanurikašmi" + + "rikurdikomikornikirgiisilatinaluxemburggandalimburglingalalaoliettuakata" + + "nganlubalatviamalagassimarshallmaorimakedoniamalajalammongolimarathimala" + + "ijimaltaburmanaurupohjois-ndebelenepalindongahollantinorjan nynorsknorja" + + "n bokmåletelä-ndebelenavajonjandžaoksitaaniodžibwaoromoorijaosseettipand" + + "žabipaalipuolapaštuportugaliketšuaretoromaanirundiromaniavenäjäruandasa" + + "nskritsardisindhipohjoissaamesangosinhalaslovakkisloveenisamoašonasomali" + + "albaniaserbiaswazieteläsothosundaruotsiswahilitamilitelugutadžikkithaiti" + + "grinjaturkmeenitswanatongaturkkitsongatataaritahitiuiguuriukrainaurduuzb" + + "ekkivendavietnamvolapükvalloniwolofxhosajiddišjorubazhuangkiinazuluatšeh" + + "atšoliadangmeadygetunisianarabiaafrihiliaghemainuakkadialabamaaleuttigeg" + + "ialtaimuinaisenglantiangikavaltakunnanarameamapudungunaraonaarapahoalger" + + "ianarabiaarawakmarokonarabiaegyptinarabiaasuamerikkalainen viittomakieli" + + "asturiakotavaawadhibelutšibalibaijeribasaabamumbatak-tobaghomalabedžabem" + + "babetawibenafutbadagalänsibelutšibhodžpuribikolbinibanjarkomsiksikabišnu" + + "priabahtiaribradžbrahuibodokooseburjaattibugibulubilinmedumbacaddokaribi" + + "cayugaatsamcebuanokigatšibtšatšagataichuukmarichinook-jargonchoctawchipe" + + "wyancherokeecheyennesoranikopticapiznonkrimintataariseychellienkreolikaš" + + "ubidakotadargitaitadelawareslevidogribdinkadjermadogrialasorbidusunduala" + + "keskihollantijola-fonyidjuladazagaembuefikemiliamuinaisegyptiekajukelami" + + "keskienglantialaskanjupikewondoextremadurafangfilipinomeänkielifoncajunr" + + "anskakeskiranskamuinaisranskaarpitaanipohjoisfriisiitäfriisifriuligagaga" + + "uzigan-kiinagajogbajazoroastrialaisdarige’ezkiribatigilakikeskiyläsaksam" + + "uinaisyläsaksagoankonkanigondigorontalogoottigrebomuinaiskreikkasveitsin" + + "saksawayuufrafragusiigwitšinhaidahakka-kiinahavaijifidžinhindihiligainoh" + + "eettihmongyläsorbixiang-kiinahupaibanibibioilokoinguušiinkeroinenjamaika" + + "nkreolienglantilojbanngombamachamejuutalaispersiajuutalaisarabiajuuttika" + + "rakalpakkikabyylikatšinjjukambakavikabardikanembutyapmakondekapverdenkre" + + "olikenyangnorsunluurannikonkorokaingangkhasikhotanikoyra chiinikhowarkir" + + "manjkikakokalenjinkimbundukomipermjakkikonkanikosraekpellekaratšai-balka" + + "arikriokinaray-akarjalakurukhshambalabafiakölschkumykkikutenailadinolang" + + "olahndalambalezgilingua franca novaliguuriliivilakotalombardimongolouisi" + + "anankreolilozipohjoislurilatgalliluluanlubaluiseñolundaluolusailuhyaklas" + + "sinen kiinalazimaduramafamagahimaithilimakassarmandingomaasaimabamokšama" + + "ndarmendemerumorisyenkeski-iirimakua-meettometa’micmacminangkabaumantšum" + + "anipurimohawkmossivuorimarimundanguseita kieliäcreekmirandeesimarwarimen" + + "tawaimyeneersämazandaranimin nan -kiinanapolinamaalasaksanewariniasniuea" + + "o nagakwasiongiemboonnogaimuinaisnorjanovialn’kopohjoissothonuerklassine" + + "n newarinyamwezinyankolenyoronzimaosageosmanipangasinanpahlavipampangapa" + + "piamentupalaupicardinigerianpidginpennsylvaniansaksaplautdietschmuinaisp" + + "ersiapfaltsifoinikiapiemontepontoksenkreikkapohnpeimuinaispreussimuinais" + + "provensaalikʼicheʼchimborazonylänköketšuaradžastanirapanuirarotongaromag" + + "nolitarifitromboromanirotumaruteenirovianaaromaniarwasandawejakuuttisama" + + "rianarameasamburusasaksantalisauraštringambaysangusisiliaskottisassarins" + + "ardieteläkurdisenecasenaseriselkuppikoyraboro sennimuinaisiirisamogiitti" + + "tašelhitshantšadinarabiasidamosleesiansaksaselayareteläsaameluulajansaam" + + "einarinsaamekoltansaamesoninkesogdisrananserersahosaterlandinfriisisukum" + + "asususumerikomorimuinaissyyriasyyriasleesiatulutemnetesoterenotetumtigre" + + "tivtokelautsahuriklingontlingittališitamašekmalawintongatok-pisinturojot" + + "arokotsakoniatsimšitatitumbukatuvalutasawaqtuvakeskiatlaksentamazightudm" + + "urttiugaritmbundutuntematon kielivaivenetsiavepsälänsiflaamimaininfrankk" + + "ivatjavõrovunjowalserwolaittawaraywashowarlpiriwu-kiinakalmukkimingrelis" + + "ogajaojapiyangbenyembañeengatúkantoninkiinazapoteekkiblisskieliseelantiz" + + "enagavakioitu tamazightzuniei kielellistä sisältöäzazayleisarabiaitävall" + + "ansaksasveitsinyläsaksaaustralianenglantikanadanenglantibritannianenglan" + + "tiamerikanenglantiamerikanespanjaeuroopanespanjameksikonespanjakanadanra" + + "nskasveitsinranskaalankomaidenalasaksaflaamibrasilianportugalieuroopanpo" + + "rtugalimoldovaserbokroaattikingwanayksinkertaistettu kiinaperinteinen ki" + + "ina" + +var fiLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0004, 0x000b, 0x0011, 0x001a, 0x001e, 0x0024, 0x002c, 0x0032, 0x0038, 0x003e, 0x0044, 0x0049, 0x0052, 0x005f, 0x0067, 0x006e, 0x0075, 0x007c, 0x0082, 0x0089, 0x008f, 0x0098, 0x00a3, 0x00ac, 0x00b3, 0x00b7, 0x00be, 0x00ca, 0x00d3, 0x00d8, 0x00de, 0x00e3, 0x00e9, 0x00f1, 0x00f4, 0x00fb, 0x0103, 0x010c, 0x0113, - 0x0117, 0x011c, 0x0121, 0x0127, 0x012c, 0x0132, 0x0139, 0x013f, - 0x014b, 0x014f, 0x0154, 0x015b, 0x0162, 0x016c, 0x0172, 0x0177, - 0x017d, 0x0182, 0x018b, 0x0192, 0x0197, 0x019d, 0x01a4, 0x01aa, + 0x0117, 0x011c, 0x0122, 0x0128, 0x012d, 0x0133, 0x013a, 0x0140, + 0x014c, 0x0150, 0x0155, 0x015c, 0x0163, 0x016d, 0x0173, 0x0178, + 0x017e, 0x0183, 0x018c, 0x0193, 0x0198, 0x019e, 0x01a5, 0x01ab, // Entry 40 - 7F - 0x01b5, 0x01be, 0x01c9, 0x01cd, 0x01d9, 0x01e0, 0x01e3, 0x01ea, - 0x01f0, 0x01f9, 0x01ff, 0x0204, 0x020b, 0x0210, 0x0216, 0x021e, - 0x0225, 0x0230, 0x0235, 0x023c, 0x0241, 0x0247, 0x024f, 0x0254, - 0x0258, 0x025d, 0x0265, 0x026b, 0x0274, 0x0279, 0x0280, 0x0287, - 0x028a, 0x0291, 0x029d, 0x02a3, 0x02ac, 0x02b4, 0x02b9, 0x02c2, - 0x02cb, 0x02d2, 0x02d9, 0x02e0, 0x02e5, 0x02ea, 0x02ef, 0x02fe, - 0x0304, 0x030a, 0x0312, 0x0320, 0x032e, 0x033c, 0x0342, 0x034a, - 0x0353, 0x035b, 0x0360, 0x0365, 0x036d, 0x0376, 0x037b, 0x0380, + 0x01b6, 0x01bf, 0x01ca, 0x01ce, 0x01da, 0x01e1, 0x01e4, 0x01eb, + 0x01f1, 0x01fa, 0x0200, 0x0205, 0x020c, 0x0211, 0x0217, 0x021f, + 0x0226, 0x0231, 0x0236, 0x023d, 0x0242, 0x0248, 0x0250, 0x0255, + 0x0259, 0x025e, 0x0266, 0x026c, 0x0275, 0x027a, 0x0281, 0x0288, + 0x028b, 0x0292, 0x029e, 0x02a4, 0x02ad, 0x02b5, 0x02ba, 0x02c3, + 0x02cc, 0x02d3, 0x02da, 0x02e1, 0x02e6, 0x02eb, 0x02f0, 0x02ff, + 0x0305, 0x030b, 0x0313, 0x0321, 0x032f, 0x033d, 0x0343, 0x034b, + 0x0354, 0x035c, 0x0361, 0x0366, 0x036e, 0x0377, 0x037c, 0x0381, // Entry 80 - BF - 0x0386, 0x038f, 0x0396, 0x03a1, 0x03a6, 0x03ad, 0x03b5, 0x03bb, - 0x03c3, 0x03c8, 0x03ce, 0x03da, 0x03df, 0x03e6, 0x03ee, 0x03f6, - 0x03fb, 0x0400, 0x0406, 0x040d, 0x0413, 0x0418, 0x0423, 0x0428, - 0x042e, 0x0435, 0x043b, 0x0441, 0x044a, 0x044e, 0x0456, 0x045f, - 0x0465, 0x046a, 0x0470, 0x0476, 0x047d, 0x0483, 0x048a, 0x0491, - 0x0495, 0x049c, 0x04a1, 0x04a8, 0x04b0, 0x04b7, 0x04bc, 0x04c1, - 0x04c8, 0x04ce, 0x04d4, 0x04d9, 0x04dd, 0x04e3, 0x04ea, 0x04f1, - 0x04f6, 0x0504, 0x050c, 0x0511, 0x0515, 0x051b, 0x0522, 0x0529, + 0x0387, 0x0390, 0x0397, 0x03a2, 0x03a7, 0x03ae, 0x03b6, 0x03bc, + 0x03c4, 0x03c9, 0x03cf, 0x03db, 0x03e0, 0x03e7, 0x03ef, 0x03f7, + 0x03fc, 0x0401, 0x0407, 0x040e, 0x0414, 0x0419, 0x0424, 0x0429, + 0x042f, 0x0436, 0x043c, 0x0442, 0x044b, 0x044f, 0x0457, 0x0460, + 0x0466, 0x046b, 0x0471, 0x0477, 0x047e, 0x0484, 0x048b, 0x0492, + 0x0496, 0x049d, 0x04a2, 0x04a9, 0x04b1, 0x04b8, 0x04bd, 0x04c2, + 0x04c9, 0x04cf, 0x04d5, 0x04da, 0x04de, 0x04e4, 0x04eb, 0x04f2, + 0x04f7, 0x0505, 0x050d, 0x0512, 0x0516, 0x051c, 0x0523, 0x052a, // Entry C0 - FF - 0x052d, 0x0532, 0x0541, 0x0547, 0x0558, 0x0562, 0x0568, 0x056f, - 0x057d, 0x057d, 0x0583, 0x0590, 0x059d, 0x05a0, 0x05bc, 0x05c3, - 0x05c9, 0x05cf, 0x05d7, 0x05db, 0x05e2, 0x05e7, 0x05ec, 0x05f6, - 0x05fd, 0x0603, 0x0608, 0x060e, 0x0612, 0x0615, 0x061b, 0x0629, - 0x0633, 0x0638, 0x063c, 0x0642, 0x0645, 0x064c, 0x0656, 0x065e, - 0x0664, 0x066a, 0x066e, 0x0673, 0x067c, 0x0680, 0x0684, 0x0689, - 0x0690, 0x0695, 0x069b, 0x06a1, 0x06a6, 0x06ad, 0x06b1, 0x06ba, - 0x06c3, 0x06c8, 0x06cc, 0x06da, 0x06e1, 0x06ea, 0x06f2, 0x06fa, + 0x052e, 0x0533, 0x0542, 0x0548, 0x0559, 0x0563, 0x0569, 0x0570, + 0x057e, 0x057e, 0x0584, 0x0591, 0x059e, 0x05a1, 0x05bd, 0x05c4, + 0x05ca, 0x05d0, 0x05d8, 0x05dc, 0x05e3, 0x05e8, 0x05ed, 0x05f7, + 0x05fe, 0x0604, 0x0609, 0x060f, 0x0613, 0x0616, 0x061c, 0x062a, + 0x0634, 0x0639, 0x063d, 0x0643, 0x0646, 0x064d, 0x0657, 0x065f, + 0x0665, 0x066b, 0x066f, 0x0674, 0x067d, 0x0681, 0x0685, 0x068a, + 0x0691, 0x0696, 0x069c, 0x06a2, 0x06a7, 0x06a7, 0x06ae, 0x06b2, + 0x06bb, 0x06c4, 0x06c9, 0x06cd, 0x06db, 0x06e2, 0x06eb, 0x06f3, // Entry 100 - 13F - 0x0700, 0x0705, 0x070d, 0x071a, 0x072b, 0x0732, 0x0738, 0x073d, - 0x0742, 0x074a, 0x074f, 0x0755, 0x075a, 0x0760, 0x0765, 0x076d, - 0x0772, 0x0777, 0x0784, 0x078e, 0x0793, 0x0799, 0x079d, 0x07a1, - 0x07a7, 0x07b4, 0x07ba, 0x07bf, 0x07cc, 0x07d8, 0x07de, 0x07e9, - 0x07ed, 0x07f5, 0x07ff, 0x0802, 0x0807, 0x0812, 0x081f, 0x0828, - 0x0835, 0x083f, 0x0845, 0x0847, 0x084e, 0x0857, 0x085b, 0x0860, - 0x0872, 0x0879, 0x0881, 0x0887, 0x0895, 0x08a5, 0x08b0, 0x08b5, - 0x08be, 0x08c4, 0x08c9, 0x08d7, 0x08e4, 0x08e9, 0x08ef, 0x08f4, + 0x06fb, 0x0701, 0x0706, 0x070e, 0x071b, 0x072c, 0x0733, 0x0739, + 0x073e, 0x0743, 0x074b, 0x0750, 0x0756, 0x075b, 0x0761, 0x0766, + 0x076e, 0x0773, 0x0778, 0x0785, 0x078f, 0x0794, 0x079a, 0x079e, + 0x07a2, 0x07a8, 0x07b5, 0x07bb, 0x07c0, 0x07cd, 0x07d9, 0x07df, + 0x07ea, 0x07ee, 0x07f6, 0x0800, 0x0803, 0x080e, 0x0819, 0x0826, + 0x082f, 0x083c, 0x0846, 0x084c, 0x084e, 0x0855, 0x085e, 0x0862, + 0x0867, 0x0879, 0x0880, 0x0888, 0x088e, 0x089c, 0x08ac, 0x08b7, + 0x08bc, 0x08c5, 0x08cb, 0x08d0, 0x08de, 0x08eb, 0x08f0, 0x08f6, // Entry 140 - 17F - 0x08fc, 0x0901, 0x090c, 0x0913, 0x091f, 0x0928, 0x092e, 0x0933, - 0x093c, 0x0947, 0x094b, 0x094f, 0x0955, 0x095a, 0x0962, 0x096c, - 0x0982, 0x0988, 0x098e, 0x0995, 0x09a4, 0x09b3, 0x09b9, 0x09c5, - 0x09cc, 0x09d3, 0x09d6, 0x09db, 0x09df, 0x09e6, 0x09ed, 0x09f1, - 0x09f8, 0x0a07, 0x0a0e, 0x0a23, 0x0a2b, 0x0a30, 0x0a37, 0x0a43, - 0x0a49, 0x0a52, 0x0a56, 0x0a5e, 0x0a66, 0x0a73, 0x0a7a, 0x0a80, - 0x0a86, 0x0a98, 0x0a9c, 0x0aa5, 0x0aac, 0x0ab2, 0x0aba, 0x0abf, - 0x0ac6, 0x0acd, 0x0ad4, 0x0ada, 0x0adf, 0x0ae5, 0x0aea, 0x0aef, + 0x08fb, 0x0903, 0x0908, 0x0913, 0x091a, 0x0926, 0x092f, 0x0935, + 0x093a, 0x0943, 0x094e, 0x0952, 0x0956, 0x095c, 0x0961, 0x0969, + 0x0973, 0x0989, 0x098f, 0x0995, 0x099c, 0x09ab, 0x09ba, 0x09c0, + 0x09cc, 0x09d3, 0x09da, 0x09dd, 0x09e2, 0x09e6, 0x09ed, 0x09f4, + 0x09f8, 0x09ff, 0x0a0e, 0x0a15, 0x0a2a, 0x0a32, 0x0a37, 0x0a3e, + 0x0a4a, 0x0a50, 0x0a59, 0x0a5d, 0x0a65, 0x0a6d, 0x0a7a, 0x0a81, + 0x0a87, 0x0a8d, 0x0a9f, 0x0aa3, 0x0aac, 0x0ab3, 0x0ab9, 0x0ac1, + 0x0ac6, 0x0acd, 0x0ad4, 0x0adb, 0x0ae1, 0x0ae6, 0x0aec, 0x0af1, // Entry 180 - 1BF - 0x0b01, 0x0b08, 0x0b0d, 0x0b13, 0x0b1b, 0x0b20, 0x0b24, 0x0b2f, - 0x0b37, 0x0b41, 0x0b49, 0x0b4e, 0x0b51, 0x0b56, 0x0b5b, 0x0b6a, - 0x0b6e, 0x0b74, 0x0b78, 0x0b7e, 0x0b86, 0x0b8e, 0x0b96, 0x0b9c, - 0x0ba0, 0x0ba6, 0x0bac, 0x0bb1, 0x0bb5, 0x0bbd, 0x0bc7, 0x0bd3, - 0x0bda, 0x0be0, 0x0beb, 0x0bf2, 0x0bfa, 0x0c00, 0x0c05, 0x0c0e, - 0x0c15, 0x0c23, 0x0c28, 0x0c32, 0x0c39, 0x0c41, 0x0c46, 0x0c4b, - 0x0c56, 0x0c64, 0x0c6a, 0x0c6e, 0x0c76, 0x0c7c, 0x0c80, 0x0c84, - 0x0c8b, 0x0c91, 0x0c9a, 0x0c9f, 0x0cab, 0x0cb1, 0x0cb7, 0x0cc3, + 0x0af6, 0x0b08, 0x0b0f, 0x0b14, 0x0b1a, 0x0b22, 0x0b27, 0x0b37, + 0x0b3b, 0x0b46, 0x0b4e, 0x0b58, 0x0b60, 0x0b65, 0x0b68, 0x0b6d, + 0x0b72, 0x0b81, 0x0b85, 0x0b8b, 0x0b8f, 0x0b95, 0x0b9d, 0x0ba5, + 0x0bad, 0x0bb3, 0x0bb7, 0x0bbd, 0x0bc3, 0x0bc8, 0x0bcc, 0x0bd4, + 0x0bde, 0x0bea, 0x0bf1, 0x0bf7, 0x0c02, 0x0c09, 0x0c11, 0x0c17, + 0x0c1c, 0x0c25, 0x0c2c, 0x0c3a, 0x0c3f, 0x0c49, 0x0c50, 0x0c58, + 0x0c5d, 0x0c62, 0x0c6d, 0x0c7b, 0x0c81, 0x0c85, 0x0c8d, 0x0c93, + 0x0c97, 0x0c9b, 0x0ca2, 0x0ca8, 0x0cb1, 0x0cb6, 0x0cc2, 0x0cc8, // Entry 1C0 - 1FF - 0x0cc7, 0x0cd7, 0x0cdf, 0x0ce7, 0x0cec, 0x0cf1, 0x0cf6, 0x0cfc, - 0x0d06, 0x0d0d, 0x0d15, 0x0d1f, 0x0d24, 0x0d2b, 0x0d39, 0x0d4b, - 0x0d57, 0x0d64, 0x0d6b, 0x0d73, 0x0d7b, 0x0d8b, 0x0d92, 0x0da0, - 0x0db2, 0x0dbb, 0x0dd5, 0x0de0, 0x0de7, 0x0df0, 0x0df9, 0x0e00, - 0x0e05, 0x0e0b, 0x0e11, 0x0e18, 0x0e1f, 0x0e27, 0x0e2a, 0x0e31, - 0x0e39, 0x0e47, 0x0e4e, 0x0e53, 0x0e5a, 0x0e64, 0x0e6b, 0x0e70, - 0x0e77, 0x0e7d, 0x0e8a, 0x0e95, 0x0e9b, 0x0e9f, 0x0ea3, 0x0eab, - 0x0eba, 0x0ec5, 0x0ecf, 0x0ed8, 0x0edc, 0x0ee9, 0x0eef, 0x0efc, + 0x0cce, 0x0cda, 0x0cde, 0x0cee, 0x0cf6, 0x0cfe, 0x0d03, 0x0d08, + 0x0d0d, 0x0d13, 0x0d1d, 0x0d24, 0x0d2c, 0x0d36, 0x0d3b, 0x0d42, + 0x0d50, 0x0d62, 0x0d6e, 0x0d7b, 0x0d82, 0x0d8a, 0x0d92, 0x0da2, + 0x0da9, 0x0db7, 0x0dc9, 0x0dd2, 0x0dec, 0x0df7, 0x0dfe, 0x0e07, + 0x0e10, 0x0e17, 0x0e1c, 0x0e22, 0x0e28, 0x0e2f, 0x0e36, 0x0e3e, + 0x0e41, 0x0e48, 0x0e50, 0x0e5e, 0x0e65, 0x0e6a, 0x0e71, 0x0e7b, + 0x0e82, 0x0e87, 0x0e8e, 0x0e94, 0x0ea1, 0x0eac, 0x0eb2, 0x0eb6, + 0x0eba, 0x0ec2, 0x0ed1, 0x0edc, 0x0ee6, 0x0eef, 0x0ef3, 0x0f00, // Entry 200 - 23F - 0x0f03, 0x0f0e, 0x0f1b, 0x0f26, 0x0f31, 0x0f38, 0x0f3d, 0x0f43, - 0x0f48, 0x0f4c, 0x0f5d, 0x0f63, 0x0f67, 0x0f6d, 0x0f73, 0x0f80, - 0x0f86, 0x0f8d, 0x0f91, 0x0f96, 0x0f9a, 0x0fa0, 0x0fa5, 0x0faa, - 0x0fad, 0x0fb4, 0x0fbb, 0x0fc2, 0x0fc9, 0x0fd0, 0x0fd8, 0x0fe4, - 0x0fed, 0x0ff3, 0x0ff9, 0x1001, 0x1008, 0x100c, 0x1013, 0x1019, - 0x1020, 0x1024, 0x103a, 0x1042, 0x1048, 0x104e, 0x1053, 0x1056, - 0x105e, 0x1064, 0x1070, 0x107d, 0x1082, 0x1087, 0x108c, 0x1092, - 0x109a, 0x109f, 0x10a4, 0x10ac, 0x10b4, 0x10bc, 0x10c4, 0x10c8, + 0x0f06, 0x0f13, 0x0f1a, 0x0f25, 0x0f32, 0x0f3d, 0x0f48, 0x0f4f, + 0x0f54, 0x0f5a, 0x0f5f, 0x0f63, 0x0f74, 0x0f7a, 0x0f7e, 0x0f84, + 0x0f8a, 0x0f97, 0x0f9d, 0x0fa4, 0x0fa8, 0x0fad, 0x0fb1, 0x0fb7, + 0x0fbc, 0x0fc1, 0x0fc4, 0x0fcb, 0x0fd2, 0x0fd9, 0x0fe0, 0x0fe7, + 0x0fef, 0x0ffb, 0x1004, 0x100a, 0x1010, 0x1018, 0x101f, 0x1023, + 0x102a, 0x1030, 0x1037, 0x103b, 0x1051, 0x1059, 0x105f, 0x1065, + 0x1075, 0x1078, 0x1080, 0x1086, 0x1092, 0x109f, 0x10a4, 0x10a9, + 0x10ae, 0x10b4, 0x10bc, 0x10c1, 0x10c6, 0x10ce, 0x10d6, 0x10de, // Entry 240 - 27F - 0x10cb, 0x10cf, 0x10d6, 0x10db, 0x10e5, 0x10f2, 0x10fc, 0x1106, - 0x110e, 0x1114, 0x1126, 0x112a, 0x1145, 0x1149, 0x1154, 0x1154, - 0x1163, 0x1174, 0x1186, 0x1195, 0x11a7, 0x11b7, 0x11c6, 0x11d5, - 0x11e4, 0x11e4, 0x11f1, 0x11ff, 0x1213, 0x1219, 0x122b, 0x123c, - 0x1243, 0x1250, 0x1258, 0x126f, 0x1280, -} // Size: 1250 bytes - -const filLangStr string = "" + // Size: 3132 bytes + 0x10e6, 0x10ea, 0x10ed, 0x10f1, 0x10f8, 0x10fd, 0x1107, 0x1114, + 0x111e, 0x1128, 0x1130, 0x1136, 0x1148, 0x114c, 0x1167, 0x116b, + 0x1176, 0x1176, 0x1185, 0x1196, 0x11a8, 0x11b7, 0x11c9, 0x11d9, + 0x11e8, 0x11f7, 0x1206, 0x1206, 0x1213, 0x1221, 0x1235, 0x123b, + 0x124d, 0x125e, 0x1265, 0x1272, 0x127a, 0x1291, 0x12a2, +} // Size: 1254 bytes + +const filLangStr string = "" + // Size: 3178 bytes "AfarAbkhazianAfrikaansAkanAmharicAragoneseArabicAssameseAvaricAymaraAzer" + "baijaniBashkirBelarusianBulgarianBislamaBambaraBanglaTibetanBretonBosnia" + "nCatalanChechenChamorroCorsicanCzechChurch SlavicChuvashWelshDanishGerma" + "nDivehiDzongkhaEweGreekInglesEsperantoSpanishEstonianBasquePersianFulahF" + - "innishFijianFaroeseFrenchKanlurang FrisianIrishScots GaelicGalicianGuara" + - "niGujaratiManxHausaHebrewHindiCroatianHaitianHungarianArmenianHereroInte" + - "rlinguaIndonesianInterlingueIgboSichuan YiIdoIcelandicItalianInuktitutJa" + - "paneseJavaneseGeorgianKongoKikuyuKuanyamaKazakhKalaallisutKhmerKannadaKo" + - "reanKanuriKashmiriKurdishKomiCornishKirghizLatinLuxembourgishGandaLimbur" + - "gishLingalaLaoLithuanianLuba-KatangaLatvianMalagasyMarshalleseMaoriMaced" + - "onianMalayalamMongolianMarathiMalayMalteseBurmeseNauruHilagang NdebeleNe" + - "paliNdongaDutchNorwegian NynorskNorwegian BokmålSouth NdebeleNavajoNyanj" + - "aOccitanOromoOdiaOsseticPunjabiPolishPashtoPortugueseQuechuaRomanshRundi" + - "RomanianRussianKinyarwandaSanskritSardinianSindhiHilagang SamiSangoSinha" + - "laSlovakSlovenianSamoanShonaSomaliAlbanianSerbianSwatiKatimugang SothoSu" + - "ndaneseSwedishSwahiliTamilTeluguTajikThaiTigrinyaTurkmenTswanaTonganTurk" + - "ishTsongaTatarTahitianUyghurUkranianUrduUzbekVendaVietnameseVolapükWallo" + - "onWolofXhosaYiddishYorubaChineseZuluAchineseAcoliAdangmeAdygheAghemAinuA" + - "leutSouthern AltaiAngikaMapucheArapahoAsuAsturianAwadhiBalineseBasaaBemb" + - "aBenaKanlurang BalochiBhojpuriBiniSiksikaBodoBugineseBlinCebuanoChigaChu" + - "ukeseMariChoctawCherokeeCheyenneCentral KurdishSeselwa Creole FrenchDako" + - "taDargwaTaitaDogribZarmaLower SorbianDualaJola-FonyiDazagaEmbuEfikEkajuk" + - "EwondoFilipinoFonFriulianGaGagauzGeezGilberteseGorontaloSwiss GermanGusi" + - "iGwichʼinHawaiianHiligaynonHmongUpper SorbianHupaIbanIbibioIlokoIngushLo" + - "jbanNgombaMachameKabyleKachinJjuKambaKabardianTyapMakondeKabuverdianuKor" + - "oKhasiKoyra ChiiniKakoKalenjinKimbunduKomi-PermyakKonkaniKpelleKarachay-" + - "BalkarKarelianKurukhShambalaBafiaColognianKumykLadinoLangiLezghianLakota" + - "LoziHilagang LuriLuba-LuluaLundaLuoMizoLuyiaMadureseMagahiMaithiliMakasa" + - "rMasaiMokshaMendeMeruMorisyenMakhuwa-MeettoMeta’MicmacMinangkabauManipur" + - "iMohawkMossiMundangMaramihang WikaCreekMirandeseErzyaMazanderaniNeapolit" + - "anNamaLow GermanNewariNiasNiueanKwasioNgiemboonNogaiN’KoHilagang SothoNu" + - "erNyankolePangasinanPampangaPapiamentoPalauanNigerian PidginPrussianKʼic" + - "heʼRapanuiRarotonganRomboAromanianRwaSandaweSakhaSamburuSantaliNgambaySa" + - "nguSicilianScotsKatimugang KurdishSenaKoyraboro SenniTachelhitShanKatimu" + - "gang SamiLule SamiInari SamiSkolt SamiSoninkeSranan TongoSahoSukumaComor" + - "ianSyriacTimneTesoTetumTigreKlingonTok PisinTarokoTumbukaTuvaluTasawaqTu" + - "vinianCentral Atlas TamazightUdmurtUmbunduRootVaiVunjoWalserWolayttaWara" + - "yWarlpiriKalmykSogaYangbenYembaCantoneseStandard Moroccan TamazightZuniW" + - "alang nilalaman na ukol sa wikaZazaModernong Karaniwang ArabicAustrian G" + - "ermanSwiss High GermanIngles ng AustralyaIngles sa CanadaIngles na Briti" + - "shIngles na AmericanLatin American na EspanyolEuropean SpanishMexican na" + - " EspanyolFrench sa CanadaSwiss na FrenchLow SaxonFlemishPortuges ng Bras" + - "ilEuropean PortugueseMoldavianSerbo-CroatianCongo SwahiliPinasimpleng Ch" + - "ineseTradisyonal na Chinese" - -var filLangIdx = []uint16{ // 613 elements + "innishFijianFaroeseFrenchKanlurang FrisianIrishScottish GaelicGalicianGu" + + "araniGujaratiManxHausaHebrewHindiCroatianHaitianHungarianArmenianHereroI" + + "nterlinguaIndonesianInterlingueIgboSichuan YiIdoIcelandicItalianInuktitu" + + "tJapaneseJavaneseGeorgianKongoKikuyuKuanyamaKazakhKalaallisutKhmerKannad" + + "aKoreanKanuriKashmiriKurdishKomiCornishKirghizLatinLuxembourgishGandaLim" + + "burgishLingalaLaoLithuanianLuba-KatangaLatvianMalagasyMarshalleseMaoriMa" + + "cedonianMalayalamMongolianMarathiMalayMalteseBurmeseNauruHilagang Ndebel" + + "eNepaliNdongaDutchNorwegian NynorskNorwegian BokmålSouth NdebeleNavajoNy" + + "anjaOccitanOromoOdiaOsseticPunjabiPolishPashtoPortugueseQuechuaRomanshRu" + + "ndiRomanianRussianKinyarwandaSanskritSardinianSindhiHilagang SamiSangoSi" + + "nhalaSlovakSlovenianSamoanShonaSomaliAlbanianSerbianSwatiKatimugang Soth" + + "oSundaneseSwedishSwahiliTamilTeluguTajikThaiTigrinyaTurkmenTswanaTonganT" + + "urkishTsongaTatarTahitianUyghurUkranianUrduUzbekVendaVietnameseVolapükWa" + + "lloonWolofXhosaYiddishYorubaChineseZuluAchineseAcoliAdangmeAdygheAghemAi" + + "nuAleutSouthern AltaiAngikaMapucheArapahoAsuAsturianAwadhiBalineseBasaaB" + + "embaBenaKanlurang BalochiBhojpuriBiniSiksikaBodoBugineseBlinCebuanoChiga" + + "ChuukeseMariChoctawCherokeeCheyenneCentral KurdishSeselwa Creole FrenchD" + + "akotaDargwaTaitaDogribZarmaLower SorbianDualaJola-FonyiDazagaEmbuEfikEka" + + "jukEwondoFilipinoFonCajun FrenchFriulianGaGagauzGeezGilberteseGorontaloS" + + "wiss GermanGusiiGwichʼinHawaiianHiligaynonHmongUpper SorbianHupaIbanIbib" + + "ioIlokoIngushLojbanNgombaMachameKabyleKachinJjuKambaKabardianTyapMakonde" + + "KabuverdianuKoroKhasiKoyra ChiiniKakoKalenjinKimbunduKomi-PermyakKonkani" + + "KpelleKarachay-BalkarKarelianKurukhShambalaBafiaColognianKumykLadinoLang" + + "iLezghianLakotaLouisiana CreoleLoziHilagang LuriLuba-LuluaLundaLuoMizoLu" + + "yiaMadureseMagahiMaithiliMakasarMasaiMokshaMendeMeruMorisyenMakhuwa-Meet" + + "toMeta’MicmacMinangkabauManipuriMohawkMossiMundangMaramihang WikaCreekMi" + + "randeseErzyaMazanderaniNeapolitanNamaLow GermanNewariNiasNiueanKwasioNgi" + + "emboonNogaiN’KoHilagang SothoNuerNyankolePangasinanPampangaPapiamentoPal" + + "auanNigerian PidginPrussianKʼicheʼRapanuiRarotonganRomboAromanianRwaSand" + + "aweSakhaSamburuSantaliNgambaySanguSicilianScotsKatimugang KurdishSenaKoy" + + "raboro SenniTachelhitShanKatimugang SamiLule SamiInari SamiSkolt SamiSon" + + "inkeSranan TongoSahoSukumaComorianSyriacTimneTesoTetumTigreKlingonTok Pi" + + "sinTarokoTumbukaTuvaluTasawaqTuvinianCentral Atlas TamazightUdmurtUmbund" + + "uHindi Kilalang WikaVaiVunjoWalserWolayttaWarayWarlpiriKalmykSogaYangben" + + "YembaCantoneseStandard Moroccan TamazightZuniWalang nilalaman na ukol sa" + + " wikaZazaModernong Karaniwang ArabicAustrian GermanSwiss High GermanIngl" + + "es ng AustralyaIngles sa CanadaIngles na BritishIngles na AmericanLatin " + + "American na EspanyolEuropean SpanishMexican na EspanyolFrench sa CanadaS" + + "wiss na FrenchLow SaxonFlemishPortuges ng BrasilEuropean PortugueseMolda" + + "vianSerbo-CroatianCongo SwahiliPinasimpleng ChineseTradisyonal na Chines" + + "e" + +var filLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0004, 0x000d, 0x000d, 0x0016, 0x001a, 0x0021, 0x002a, 0x0030, 0x0038, 0x003e, 0x0044, 0x004f, 0x0056, 0x0060, 0x0069, @@ -18091,89 +19450,89 @@ var filLangIdx = []uint16{ // 613 elements 0x00a7, 0x00af, 0x00af, 0x00b4, 0x00c1, 0x00c8, 0x00cd, 0x00d3, 0x00d9, 0x00df, 0x00e7, 0x00ea, 0x00ef, 0x00f5, 0x00fe, 0x0105, 0x010d, 0x0113, 0x011a, 0x011f, 0x0126, 0x012c, 0x0133, 0x0139, - 0x014a, 0x014f, 0x015b, 0x0163, 0x016a, 0x0172, 0x0176, 0x017b, - 0x0181, 0x0186, 0x0186, 0x018e, 0x0195, 0x019e, 0x01a6, 0x01ac, + 0x014a, 0x014f, 0x015e, 0x0166, 0x016d, 0x0175, 0x0179, 0x017e, + 0x0184, 0x0189, 0x0189, 0x0191, 0x0198, 0x01a1, 0x01a9, 0x01af, // Entry 40 - 7F - 0x01b7, 0x01c1, 0x01cc, 0x01d0, 0x01da, 0x01da, 0x01dd, 0x01e6, - 0x01ed, 0x01f6, 0x01fe, 0x0206, 0x020e, 0x0213, 0x0219, 0x0221, - 0x0227, 0x0232, 0x0237, 0x023e, 0x0244, 0x024a, 0x0252, 0x0259, - 0x025d, 0x0264, 0x026b, 0x0270, 0x027d, 0x0282, 0x028c, 0x0293, - 0x0296, 0x02a0, 0x02ac, 0x02b3, 0x02bb, 0x02c6, 0x02cb, 0x02d5, - 0x02de, 0x02e7, 0x02ee, 0x02f3, 0x02fa, 0x0301, 0x0306, 0x0316, - 0x031c, 0x0322, 0x0327, 0x0338, 0x0349, 0x0356, 0x035c, 0x0362, - 0x0369, 0x0369, 0x036e, 0x0372, 0x0379, 0x0380, 0x0380, 0x0386, + 0x01ba, 0x01c4, 0x01cf, 0x01d3, 0x01dd, 0x01dd, 0x01e0, 0x01e9, + 0x01f0, 0x01f9, 0x0201, 0x0209, 0x0211, 0x0216, 0x021c, 0x0224, + 0x022a, 0x0235, 0x023a, 0x0241, 0x0247, 0x024d, 0x0255, 0x025c, + 0x0260, 0x0267, 0x026e, 0x0273, 0x0280, 0x0285, 0x028f, 0x0296, + 0x0299, 0x02a3, 0x02af, 0x02b6, 0x02be, 0x02c9, 0x02ce, 0x02d8, + 0x02e1, 0x02ea, 0x02f1, 0x02f6, 0x02fd, 0x0304, 0x0309, 0x0319, + 0x031f, 0x0325, 0x032a, 0x033b, 0x034c, 0x0359, 0x035f, 0x0365, + 0x036c, 0x036c, 0x0371, 0x0375, 0x037c, 0x0383, 0x0383, 0x0389, // Entry 80 - BF - 0x038c, 0x0396, 0x039d, 0x03a4, 0x03a9, 0x03b1, 0x03b8, 0x03c3, - 0x03cb, 0x03d4, 0x03da, 0x03e7, 0x03ec, 0x03f3, 0x03f9, 0x0402, - 0x0408, 0x040d, 0x0413, 0x041b, 0x0422, 0x0427, 0x0437, 0x0440, - 0x0447, 0x044e, 0x0453, 0x0459, 0x045e, 0x0462, 0x046a, 0x0471, - 0x0477, 0x047d, 0x0484, 0x048a, 0x048f, 0x0497, 0x049d, 0x04a5, - 0x04a9, 0x04ae, 0x04b3, 0x04bd, 0x04c5, 0x04cc, 0x04d1, 0x04d6, - 0x04dd, 0x04e3, 0x04e3, 0x04ea, 0x04ee, 0x04f6, 0x04fb, 0x0502, - 0x0508, 0x0508, 0x0508, 0x050d, 0x0511, 0x0511, 0x0511, 0x0516, + 0x038f, 0x0399, 0x03a0, 0x03a7, 0x03ac, 0x03b4, 0x03bb, 0x03c6, + 0x03ce, 0x03d7, 0x03dd, 0x03ea, 0x03ef, 0x03f6, 0x03fc, 0x0405, + 0x040b, 0x0410, 0x0416, 0x041e, 0x0425, 0x042a, 0x043a, 0x0443, + 0x044a, 0x0451, 0x0456, 0x045c, 0x0461, 0x0465, 0x046d, 0x0474, + 0x047a, 0x0480, 0x0487, 0x048d, 0x0492, 0x049a, 0x04a0, 0x04a8, + 0x04ac, 0x04b1, 0x04b6, 0x04c0, 0x04c8, 0x04cf, 0x04d4, 0x04d9, + 0x04e0, 0x04e6, 0x04e6, 0x04ed, 0x04f1, 0x04f9, 0x04fe, 0x0505, + 0x050b, 0x050b, 0x050b, 0x0510, 0x0514, 0x0514, 0x0514, 0x0519, // Entry C0 - FF - 0x0516, 0x0524, 0x0524, 0x052a, 0x052a, 0x0531, 0x0531, 0x0538, - 0x0538, 0x0538, 0x0538, 0x0538, 0x0538, 0x053b, 0x053b, 0x0543, - 0x0543, 0x0549, 0x0549, 0x0551, 0x0551, 0x0556, 0x0556, 0x0556, - 0x0556, 0x0556, 0x055b, 0x055b, 0x055f, 0x055f, 0x055f, 0x0570, - 0x0578, 0x0578, 0x057c, 0x057c, 0x057c, 0x0583, 0x0583, 0x0583, - 0x0583, 0x0583, 0x0587, 0x0587, 0x0587, 0x058f, 0x058f, 0x0593, - 0x0593, 0x0593, 0x0593, 0x0593, 0x0593, 0x059a, 0x059f, 0x059f, - 0x059f, 0x05a7, 0x05ab, 0x05ab, 0x05b2, 0x05b2, 0x05ba, 0x05c2, + 0x0519, 0x0527, 0x0527, 0x052d, 0x052d, 0x0534, 0x0534, 0x053b, + 0x053b, 0x053b, 0x053b, 0x053b, 0x053b, 0x053e, 0x053e, 0x0546, + 0x0546, 0x054c, 0x054c, 0x0554, 0x0554, 0x0559, 0x0559, 0x0559, + 0x0559, 0x0559, 0x055e, 0x055e, 0x0562, 0x0562, 0x0562, 0x0573, + 0x057b, 0x057b, 0x057f, 0x057f, 0x057f, 0x0586, 0x0586, 0x0586, + 0x0586, 0x0586, 0x058a, 0x058a, 0x058a, 0x0592, 0x0592, 0x0596, + 0x0596, 0x0596, 0x0596, 0x0596, 0x0596, 0x0596, 0x059d, 0x05a2, + 0x05a2, 0x05a2, 0x05aa, 0x05ae, 0x05ae, 0x05b5, 0x05b5, 0x05bd, // Entry 100 - 13F - 0x05d1, 0x05d1, 0x05d1, 0x05d1, 0x05e6, 0x05e6, 0x05ec, 0x05f2, - 0x05f7, 0x05f7, 0x05f7, 0x05fd, 0x05fd, 0x0602, 0x0602, 0x060f, - 0x060f, 0x0614, 0x0614, 0x061e, 0x061e, 0x0624, 0x0628, 0x062c, - 0x062c, 0x062c, 0x0632, 0x0632, 0x0632, 0x0632, 0x0638, 0x0638, - 0x0638, 0x0640, 0x0640, 0x0643, 0x0643, 0x0643, 0x0643, 0x0643, - 0x0643, 0x0643, 0x064b, 0x064d, 0x0653, 0x0653, 0x0653, 0x0653, - 0x0653, 0x0657, 0x0661, 0x0661, 0x0661, 0x0661, 0x0661, 0x0661, - 0x066a, 0x066a, 0x066a, 0x066a, 0x0676, 0x0676, 0x0676, 0x067b, + 0x05c5, 0x05d4, 0x05d4, 0x05d4, 0x05d4, 0x05e9, 0x05e9, 0x05ef, + 0x05f5, 0x05fa, 0x05fa, 0x05fa, 0x0600, 0x0600, 0x0605, 0x0605, + 0x0612, 0x0612, 0x0617, 0x0617, 0x0621, 0x0621, 0x0627, 0x062b, + 0x062f, 0x062f, 0x062f, 0x0635, 0x0635, 0x0635, 0x0635, 0x063b, + 0x063b, 0x063b, 0x0643, 0x0643, 0x0646, 0x0652, 0x0652, 0x0652, + 0x0652, 0x0652, 0x0652, 0x065a, 0x065c, 0x0662, 0x0662, 0x0662, + 0x0662, 0x0662, 0x0666, 0x0670, 0x0670, 0x0670, 0x0670, 0x0670, + 0x0670, 0x0679, 0x0679, 0x0679, 0x0679, 0x0685, 0x0685, 0x0685, // Entry 140 - 17F - 0x0684, 0x0684, 0x0684, 0x068c, 0x068c, 0x0696, 0x0696, 0x069b, - 0x06a8, 0x06a8, 0x06ac, 0x06b0, 0x06b6, 0x06bb, 0x06c1, 0x06c1, - 0x06c1, 0x06c7, 0x06cd, 0x06d4, 0x06d4, 0x06d4, 0x06d4, 0x06d4, - 0x06da, 0x06e0, 0x06e3, 0x06e8, 0x06e8, 0x06f1, 0x06f1, 0x06f5, - 0x06fc, 0x0708, 0x0708, 0x070c, 0x070c, 0x0711, 0x0711, 0x071d, - 0x071d, 0x071d, 0x0721, 0x0729, 0x0731, 0x073d, 0x0744, 0x0744, - 0x074a, 0x0759, 0x0759, 0x0759, 0x0761, 0x0767, 0x076f, 0x0774, - 0x077d, 0x0782, 0x0782, 0x0788, 0x078d, 0x078d, 0x078d, 0x0795, + 0x068a, 0x0693, 0x0693, 0x0693, 0x069b, 0x069b, 0x06a5, 0x06a5, + 0x06aa, 0x06b7, 0x06b7, 0x06bb, 0x06bf, 0x06c5, 0x06ca, 0x06d0, + 0x06d0, 0x06d0, 0x06d6, 0x06dc, 0x06e3, 0x06e3, 0x06e3, 0x06e3, + 0x06e3, 0x06e9, 0x06ef, 0x06f2, 0x06f7, 0x06f7, 0x0700, 0x0700, + 0x0704, 0x070b, 0x0717, 0x0717, 0x071b, 0x071b, 0x0720, 0x0720, + 0x072c, 0x072c, 0x072c, 0x0730, 0x0738, 0x0740, 0x074c, 0x0753, + 0x0753, 0x0759, 0x0768, 0x0768, 0x0768, 0x0770, 0x0776, 0x077e, + 0x0783, 0x078c, 0x0791, 0x0791, 0x0797, 0x079c, 0x079c, 0x079c, // Entry 180 - 1BF - 0x0795, 0x0795, 0x0795, 0x079b, 0x079b, 0x079b, 0x079f, 0x07ac, - 0x07ac, 0x07b6, 0x07b6, 0x07bb, 0x07be, 0x07c2, 0x07c7, 0x07c7, - 0x07c7, 0x07cf, 0x07cf, 0x07d5, 0x07dd, 0x07e4, 0x07e4, 0x07e9, - 0x07e9, 0x07ef, 0x07ef, 0x07f4, 0x07f8, 0x0800, 0x0800, 0x080e, - 0x0815, 0x081b, 0x0826, 0x0826, 0x082e, 0x0834, 0x0839, 0x0839, - 0x0840, 0x084f, 0x0854, 0x085d, 0x085d, 0x085d, 0x085d, 0x0862, - 0x086d, 0x086d, 0x0877, 0x087b, 0x0885, 0x088b, 0x088f, 0x0895, - 0x0895, 0x089b, 0x08a4, 0x08a9, 0x08a9, 0x08a9, 0x08af, 0x08bd, + 0x07a4, 0x07a4, 0x07a4, 0x07a4, 0x07aa, 0x07aa, 0x07aa, 0x07ba, + 0x07be, 0x07cb, 0x07cb, 0x07d5, 0x07d5, 0x07da, 0x07dd, 0x07e1, + 0x07e6, 0x07e6, 0x07e6, 0x07ee, 0x07ee, 0x07f4, 0x07fc, 0x0803, + 0x0803, 0x0808, 0x0808, 0x080e, 0x080e, 0x0813, 0x0817, 0x081f, + 0x081f, 0x082d, 0x0834, 0x083a, 0x0845, 0x0845, 0x084d, 0x0853, + 0x0858, 0x0858, 0x085f, 0x086e, 0x0873, 0x087c, 0x087c, 0x087c, + 0x087c, 0x0881, 0x088c, 0x088c, 0x0896, 0x089a, 0x08a4, 0x08aa, + 0x08ae, 0x08b4, 0x08b4, 0x08ba, 0x08c3, 0x08c8, 0x08c8, 0x08c8, // Entry 1C0 - 1FF - 0x08c1, 0x08c1, 0x08c1, 0x08c9, 0x08c9, 0x08c9, 0x08c9, 0x08c9, - 0x08d3, 0x08d3, 0x08db, 0x08e5, 0x08ec, 0x08ec, 0x08fb, 0x08fb, - 0x08fb, 0x08fb, 0x08fb, 0x08fb, 0x08fb, 0x08fb, 0x08fb, 0x0903, - 0x0903, 0x090c, 0x090c, 0x090c, 0x0913, 0x091d, 0x091d, 0x091d, - 0x0922, 0x0922, 0x0922, 0x0922, 0x0922, 0x092b, 0x092e, 0x0935, - 0x093a, 0x093a, 0x0941, 0x0941, 0x0948, 0x0948, 0x094f, 0x0954, - 0x095c, 0x0961, 0x0961, 0x0973, 0x0973, 0x0977, 0x0977, 0x0977, - 0x0986, 0x0986, 0x0986, 0x098f, 0x0993, 0x0993, 0x0993, 0x0993, + 0x08ce, 0x08dc, 0x08e0, 0x08e0, 0x08e0, 0x08e8, 0x08e8, 0x08e8, + 0x08e8, 0x08e8, 0x08f2, 0x08f2, 0x08fa, 0x0904, 0x090b, 0x090b, + 0x091a, 0x091a, 0x091a, 0x091a, 0x091a, 0x091a, 0x091a, 0x091a, + 0x091a, 0x0922, 0x0922, 0x092b, 0x092b, 0x092b, 0x0932, 0x093c, + 0x093c, 0x093c, 0x0941, 0x0941, 0x0941, 0x0941, 0x0941, 0x094a, + 0x094d, 0x0954, 0x0959, 0x0959, 0x0960, 0x0960, 0x0967, 0x0967, + 0x096e, 0x0973, 0x097b, 0x0980, 0x0980, 0x0992, 0x0992, 0x0996, + 0x0996, 0x0996, 0x09a5, 0x09a5, 0x09a5, 0x09ae, 0x09b2, 0x09b2, // Entry 200 - 23F - 0x0993, 0x09a2, 0x09ab, 0x09b5, 0x09bf, 0x09c6, 0x09c6, 0x09d2, - 0x09d2, 0x09d6, 0x09d6, 0x09dc, 0x09dc, 0x09dc, 0x09e4, 0x09e4, - 0x09ea, 0x09ea, 0x09ea, 0x09ef, 0x09f3, 0x09f3, 0x09f8, 0x09fd, - 0x09fd, 0x09fd, 0x09fd, 0x0a04, 0x0a04, 0x0a04, 0x0a04, 0x0a04, - 0x0a0d, 0x0a0d, 0x0a13, 0x0a13, 0x0a13, 0x0a13, 0x0a1a, 0x0a20, - 0x0a27, 0x0a2f, 0x0a46, 0x0a4c, 0x0a4c, 0x0a53, 0x0a57, 0x0a5a, - 0x0a5a, 0x0a5a, 0x0a5a, 0x0a5a, 0x0a5a, 0x0a5a, 0x0a5f, 0x0a65, - 0x0a6d, 0x0a72, 0x0a72, 0x0a7a, 0x0a7a, 0x0a80, 0x0a80, 0x0a84, + 0x09b2, 0x09b2, 0x09b2, 0x09c1, 0x09ca, 0x09d4, 0x09de, 0x09e5, + 0x09e5, 0x09f1, 0x09f1, 0x09f5, 0x09f5, 0x09fb, 0x09fb, 0x09fb, + 0x0a03, 0x0a03, 0x0a09, 0x0a09, 0x0a09, 0x0a0e, 0x0a12, 0x0a12, + 0x0a17, 0x0a1c, 0x0a1c, 0x0a1c, 0x0a1c, 0x0a23, 0x0a23, 0x0a23, + 0x0a23, 0x0a23, 0x0a2c, 0x0a2c, 0x0a32, 0x0a32, 0x0a32, 0x0a32, + 0x0a39, 0x0a3f, 0x0a46, 0x0a4e, 0x0a65, 0x0a6b, 0x0a6b, 0x0a72, + 0x0a85, 0x0a88, 0x0a88, 0x0a88, 0x0a88, 0x0a88, 0x0a88, 0x0a88, + 0x0a8d, 0x0a93, 0x0a9b, 0x0aa0, 0x0aa0, 0x0aa8, 0x0aa8, 0x0aae, // Entry 240 - 27F - 0x0a84, 0x0a84, 0x0a8b, 0x0a90, 0x0a90, 0x0a99, 0x0a99, 0x0a99, - 0x0a99, 0x0a99, 0x0ab4, 0x0ab8, 0x0ad8, 0x0adc, 0x0af7, 0x0af7, - 0x0b06, 0x0b17, 0x0b2a, 0x0b3a, 0x0b4b, 0x0b5d, 0x0b77, 0x0b87, - 0x0b9a, 0x0b9a, 0x0baa, 0x0bb9, 0x0bc2, 0x0bc9, 0x0bdb, 0x0bee, - 0x0bf7, 0x0c05, 0x0c12, 0x0c26, 0x0c3c, -} // Size: 1250 bytes - -const frLangStr string = "" + // Size: 5136 bytes + 0x0aae, 0x0ab2, 0x0ab2, 0x0ab2, 0x0ab9, 0x0abe, 0x0abe, 0x0ac7, + 0x0ac7, 0x0ac7, 0x0ac7, 0x0ac7, 0x0ae2, 0x0ae6, 0x0b06, 0x0b0a, + 0x0b25, 0x0b25, 0x0b34, 0x0b45, 0x0b58, 0x0b68, 0x0b79, 0x0b8b, + 0x0ba5, 0x0bb5, 0x0bc8, 0x0bc8, 0x0bd8, 0x0be7, 0x0bf0, 0x0bf7, + 0x0c09, 0x0c1c, 0x0c25, 0x0c33, 0x0c40, 0x0c54, 0x0c6a, +} // Size: 1254 bytes + +const frLangStr string = "" + // Size: 5175 bytes "afarabkhazeavestiqueafrikaansakanamhariquearagonaisarabeassamaisavarayma" + "raazéribachkirbiélorussebulgarebichelamarbambarabengalitibétainbretonbos" + "niaquecatalantchétchènechamorrocorsecreetchèqueslavon d’églisetchouvache" + @@ -18216,36 +19575,36 @@ const frLangStr string = "" + // Size: 5136 bytes "djinkimboundoukomi-permiakkonkanikosraéenkpellékaratchaï balkarkriokinar" + "ay-acarélienkouroukhchambalabafiafrancique ripuairekoumykkutenailadinola" + "ngilahndalambalezghienlingua franca novaligurelivonienlakotalombardmongo" + - "lozilori du Nordlatgalienluba-lulualuiseñolundaluolushaïluhyachinois lit" + - "térairelazemadouraismafamagahimaithilimakassarmandinguemassaïmabamoksama" + - "ndarmendéméroucréole mauricienmoyen irlandaismakhuwa-meettométa’micmacmi" + - "nangkabaumandchoumanipurimohawkmorémari occidentalmoundangmultilinguecre" + - "ekmirandaismarwarîmentawaïmyènèerzyamazandéraniminnannapolitainnamabas-a" + - "llemandnewariniasniuéenAokwasiongiemboonnogaïvieux norroisnovialn’kosoth" + - "o du Nordnuernewarî classiquenyamwezinyankolényoronzemaosageturc ottoman" + - "pangasinanpahlavipampanganpapiamentopalaupicardpidgin nigérianpennsilfaa" + - "nischbas-prussienpersan ancienallemand palatinphénicienpiémontaispontiqu" + - "epohnpeiprussienprovençal ancienk’iche’quichua du Haut-Chimborazorajasth" + - "anirapanuirarotongienromagnolrifainromboromanirotumanruthènerovianavalaq" + - "uerwasandaweiakoutearaméen samaritainsambourousasaksantalsaurashtrangamb" + - "aysangusicilienécossaissarde sassaraiskurde du Sudsenecacisenasériselkou" + - "pekoyraboro senniancien irlandaissamogitienchleuhshanarabe tchadiensidam" + - "obas-silésiensélayarsami du Sudsami de Lulesami d’Inarisami skoltsoninké" + - "sogdiensranan tongosérèresahosaterlandaissoukoumasoussousumériencomorien" + - "syriaque classiquesyriaquesilésientouloutemnetesoterenotetumtigrétivtoke" + - "lautsakhourklingontlingittalyshtamacheqtonga nyasatok pisintouroyotaroko" + - "tsakonientsimshiantati caucasientoumboukatuvalutasawaqtouvatamazight du " + - "Maroc centraloudmourteougaritiqueoumboundouracinevaïvénitienvepseflamand" + - " occidentalfranconien du Mainvotevõrovunjowalserwalamowaraywashowarlpiri" + - "wukalmoukmingréliensogayaoyapoisyangbenyembanheengatoucantonaiszapotèque" + - "symboles Blisszélandaiszenagaamazighe standard marocainzuñisans contenu " + - "linguistiquezazakiarabe standard moderneallemand autrichienallemand suis" + - "seanglais australienanglais canadienanglais britanniqueanglais américain" + - "français canadienfrançais suissebas-saxon néerlandaisflamandportugais br" + - "ésilienportugais européenmoldaveserbo-croateswahili du Congochinois sim" + - "plifiéchinois traditionnel" - -var frLangIdx = []uint16{ // 613 elements + "créole louisianaislozilori du Nordlatgalienluba-lulualuiseñolundaluolush" + + "aïluhyachinois littérairelazemadouraismafamagahimaithilimakassarmandingu" + + "emassaïmabamoksamandarmendéméroucréole mauricienmoyen irlandaismakhuwa-m" + + "eettométa’micmacminangkabaumandchoumanipurimohawkmorémari occidentalmoun" + + "dangmultilinguecreekmirandaismarwarîmentawaïmyènèerzyamazandéraniminnann" + + "apolitainnamabas-allemandnewariniasniuéenAokwasiongiemboonnogaïvieux nor" + + "roisnovialn’kosotho du Nordnuernewarî classiquenyamwezinyankolényoronzem" + + "aosageturc ottomanpangasinanpahlavipampanganpapiamentopalaupicardpidgin " + + "nigérianpennsilfaanischbas-prussienpersan ancienallemand palatinphénicie" + + "npiémontaispontiquepohnpeiprussienprovençal ancienk’iche’quichua du Haut" + + "-Chimborazorajasthanirapanuirarotongienromagnolrifainromboromanirotumanr" + + "uthènerovianavalaquerwasandaweiakoutearaméen samaritainsambourousasaksan" + + "talsaurashtrangambaysangusicilienécossaissarde sassaraiskurde du Sudsene" + + "cacisenasériselkoupekoyraboro senniancien irlandaissamogitienchleuhshana" + + "rabe tchadiensidamobas-silésiensélayarsami du Sudsami de Lulesami d’Inar" + + "isami skoltsoninkésogdiensranan tongosérèresahosaterlandaissoukoumasouss" + + "ousumériencomoriensyriaque classiquesyriaquesilésientouloutemnetesoteren" + + "otetumtigrétivtokelautsakhourklingontlingittalyshtamacheqtonga nyasatok " + + "pisintouroyotarokotsakonientsimshiantati caucasientoumboukatuvalutasawaq" + + "touvainamazighe de l’Atlas centraloudmourteougaritiqueoumboundoulangue i" + + "ndéterminéevaïvénitienvepseflamand occidentalfranconien du Mainvotevõrov" + + "unjowalserwalamowaraywashowarlpiriwukalmoukmingréliensogayaoyapoisyangbe" + + "nyembanheengatoucantonaiszapotèquesymboles Blisszélandaiszenagaamazighe " + + "standard marocainzuñisans contenu linguistiquezazakiarabe standard moder" + + "neallemand autrichienallemand suisseanglais australienanglais canadienan" + + "glais britanniqueanglais américainfrançais canadienfrançais suissebas-sa" + + "xon néerlandaisflamandportugais brésilienportugais européenmoldaveserbo-" + + "croateswahili du Congochinois simplifiéchinois traditionnel" + +var frLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0004, 0x000b, 0x0014, 0x001d, 0x0021, 0x002a, 0x0033, 0x0038, 0x0040, 0x0044, 0x004a, 0x0050, 0x0057, 0x0062, 0x0069, @@ -18280,72 +19639,72 @@ var frLangIdx = []uint16{ // 613 elements 0x06a7, 0x06ac, 0x06b1, 0x06b7, 0x06bc, 0x06c1, 0x06c7, 0x06db, 0x06e3, 0x06e8, 0x06ec, 0x06f2, 0x06f5, 0x06fc, 0x0707, 0x0710, 0x0714, 0x071b, 0x071f, 0x0725, 0x072d, 0x0731, 0x0737, 0x073b, - 0x0743, 0x0748, 0x074e, 0x0754, 0x0759, 0x0760, 0x0764, 0x076b, - 0x0776, 0x077b, 0x077f, 0x078d, 0x0794, 0x079d, 0x07a5, 0x07ad, + 0x0743, 0x0748, 0x074e, 0x0754, 0x0759, 0x0759, 0x0760, 0x0764, + 0x076b, 0x0776, 0x077b, 0x077f, 0x078d, 0x0794, 0x079d, 0x07a5, // Entry 100 - 13F - 0x07b3, 0x07b8, 0x07c0, 0x07cf, 0x07e2, 0x07ea, 0x07f0, 0x07f6, - 0x07fb, 0x0803, 0x080a, 0x0810, 0x0815, 0x081a, 0x081f, 0x0829, - 0x0836, 0x083c, 0x084e, 0x0859, 0x085f, 0x0865, 0x086a, 0x086f, - 0x0877, 0x0887, 0x0890, 0x0898, 0x08a5, 0x08b3, 0x08ba, 0x08c6, - 0x08ca, 0x08d2, 0x08e6, 0x08e9, 0x08f9, 0x0908, 0x0918, 0x0928, - 0x0936, 0x0945, 0x094d, 0x094f, 0x0957, 0x095a, 0x095e, 0x0963, - 0x0973, 0x0979, 0x0982, 0x0988, 0x099b, 0x09af, 0x09bd, 0x09c2, - 0x09cb, 0x09d3, 0x09d8, 0x09e3, 0x09f2, 0x09f7, 0x09fe, 0x0a03, + 0x07ad, 0x07b3, 0x07b8, 0x07c0, 0x07cf, 0x07e2, 0x07ea, 0x07f0, + 0x07f6, 0x07fb, 0x0803, 0x080a, 0x0810, 0x0815, 0x081a, 0x081f, + 0x0829, 0x0836, 0x083c, 0x084e, 0x0859, 0x085f, 0x0865, 0x086a, + 0x086f, 0x0877, 0x0887, 0x0890, 0x0898, 0x08a5, 0x08b3, 0x08ba, + 0x08c6, 0x08ca, 0x08d2, 0x08e6, 0x08e9, 0x08f9, 0x0908, 0x0918, + 0x0928, 0x0936, 0x0945, 0x094d, 0x094f, 0x0957, 0x095a, 0x095e, + 0x0963, 0x0973, 0x0979, 0x0982, 0x0988, 0x099b, 0x09af, 0x09bd, + 0x09c2, 0x09cb, 0x09d3, 0x09d8, 0x09e3, 0x09f2, 0x09f7, 0x09fe, // Entry 140 - 17F - 0x0a0c, 0x0a11, 0x0a16, 0x0a1e, 0x0a2b, 0x0a35, 0x0a3c, 0x0a41, - 0x0a4c, 0x0a51, 0x0a55, 0x0a59, 0x0a5f, 0x0a66, 0x0a6e, 0x0a75, - 0x0a87, 0x0a8d, 0x0a93, 0x0a9c, 0x0aa9, 0x0ab5, 0x0ab9, 0x0ac3, - 0x0ac9, 0x0acf, 0x0ad2, 0x0ad7, 0x0adb, 0x0ae3, 0x0aeb, 0x0aef, - 0x0af7, 0x0b01, 0x0b09, 0x0b0d, 0x0b17, 0x0b1c, 0x0b25, 0x0b31, - 0x0b37, 0x0b40, 0x0b44, 0x0b4d, 0x0b57, 0x0b63, 0x0b6a, 0x0b73, - 0x0b7a, 0x0b8b, 0x0b8f, 0x0b98, 0x0ba1, 0x0ba9, 0x0bb1, 0x0bb6, - 0x0bc8, 0x0bce, 0x0bd5, 0x0bdb, 0x0be0, 0x0be6, 0x0beb, 0x0bf3, + 0x0a03, 0x0a0c, 0x0a11, 0x0a16, 0x0a1e, 0x0a2b, 0x0a35, 0x0a3c, + 0x0a41, 0x0a4c, 0x0a51, 0x0a55, 0x0a59, 0x0a5f, 0x0a66, 0x0a6e, + 0x0a75, 0x0a87, 0x0a8d, 0x0a93, 0x0a9c, 0x0aa9, 0x0ab5, 0x0ab9, + 0x0ac3, 0x0ac9, 0x0acf, 0x0ad2, 0x0ad7, 0x0adb, 0x0ae3, 0x0aeb, + 0x0aef, 0x0af7, 0x0b01, 0x0b09, 0x0b0d, 0x0b17, 0x0b1c, 0x0b25, + 0x0b31, 0x0b37, 0x0b40, 0x0b44, 0x0b4d, 0x0b57, 0x0b63, 0x0b6a, + 0x0b73, 0x0b7a, 0x0b8b, 0x0b8f, 0x0b98, 0x0ba1, 0x0ba9, 0x0bb1, + 0x0bb6, 0x0bc8, 0x0bce, 0x0bd5, 0x0bdb, 0x0be0, 0x0be6, 0x0beb, // Entry 180 - 1BF - 0x0c05, 0x0c0b, 0x0c13, 0x0c19, 0x0c20, 0x0c25, 0x0c29, 0x0c35, - 0x0c3e, 0x0c48, 0x0c50, 0x0c55, 0x0c58, 0x0c5f, 0x0c64, 0x0c77, - 0x0c7b, 0x0c84, 0x0c88, 0x0c8e, 0x0c96, 0x0c9e, 0x0ca7, 0x0cae, - 0x0cb2, 0x0cb7, 0x0cbd, 0x0cc3, 0x0cc9, 0x0cda, 0x0ce9, 0x0cf7, - 0x0cff, 0x0d05, 0x0d10, 0x0d18, 0x0d20, 0x0d26, 0x0d2b, 0x0d3a, - 0x0d42, 0x0d4d, 0x0d52, 0x0d5b, 0x0d63, 0x0d6c, 0x0d73, 0x0d78, - 0x0d84, 0x0d8a, 0x0d94, 0x0d98, 0x0da4, 0x0daa, 0x0dae, 0x0db5, - 0x0db7, 0x0dbd, 0x0dc6, 0x0dcc, 0x0dd9, 0x0ddf, 0x0de5, 0x0df2, + 0x0bf3, 0x0c05, 0x0c0b, 0x0c13, 0x0c19, 0x0c20, 0x0c25, 0x0c38, + 0x0c3c, 0x0c48, 0x0c51, 0x0c5b, 0x0c63, 0x0c68, 0x0c6b, 0x0c72, + 0x0c77, 0x0c8a, 0x0c8e, 0x0c97, 0x0c9b, 0x0ca1, 0x0ca9, 0x0cb1, + 0x0cba, 0x0cc1, 0x0cc5, 0x0cca, 0x0cd0, 0x0cd6, 0x0cdc, 0x0ced, + 0x0cfc, 0x0d0a, 0x0d12, 0x0d18, 0x0d23, 0x0d2b, 0x0d33, 0x0d39, + 0x0d3e, 0x0d4d, 0x0d55, 0x0d60, 0x0d65, 0x0d6e, 0x0d76, 0x0d7f, + 0x0d86, 0x0d8b, 0x0d97, 0x0d9d, 0x0da7, 0x0dab, 0x0db7, 0x0dbd, + 0x0dc1, 0x0dc8, 0x0dca, 0x0dd0, 0x0dd9, 0x0ddf, 0x0dec, 0x0df2, // Entry 1C0 - 1FF - 0x0df6, 0x0e07, 0x0e0f, 0x0e18, 0x0e1d, 0x0e22, 0x0e27, 0x0e33, - 0x0e3d, 0x0e44, 0x0e4d, 0x0e57, 0x0e5c, 0x0e62, 0x0e72, 0x0e81, - 0x0e8d, 0x0e9a, 0x0eaa, 0x0eb4, 0x0ebf, 0x0ec7, 0x0ece, 0x0ed6, - 0x0ee7, 0x0ef2, 0x0f0c, 0x0f16, 0x0f1d, 0x0f28, 0x0f30, 0x0f36, - 0x0f3b, 0x0f41, 0x0f48, 0x0f50, 0x0f57, 0x0f5e, 0x0f61, 0x0f68, - 0x0f6f, 0x0f82, 0x0f8b, 0x0f90, 0x0f96, 0x0fa0, 0x0fa7, 0x0fac, - 0x0fb4, 0x0fbd, 0x0fcc, 0x0fd8, 0x0fde, 0x0fe4, 0x0fe9, 0x0ff1, - 0x1000, 0x1010, 0x101a, 0x1020, 0x1024, 0x1032, 0x1038, 0x1045, + 0x0df8, 0x0e05, 0x0e09, 0x0e1a, 0x0e22, 0x0e2b, 0x0e30, 0x0e35, + 0x0e3a, 0x0e46, 0x0e50, 0x0e57, 0x0e60, 0x0e6a, 0x0e6f, 0x0e75, + 0x0e85, 0x0e94, 0x0ea0, 0x0ead, 0x0ebd, 0x0ec7, 0x0ed2, 0x0eda, + 0x0ee1, 0x0ee9, 0x0efa, 0x0f05, 0x0f1f, 0x0f29, 0x0f30, 0x0f3b, + 0x0f43, 0x0f49, 0x0f4e, 0x0f54, 0x0f5b, 0x0f63, 0x0f6a, 0x0f71, + 0x0f74, 0x0f7b, 0x0f82, 0x0f95, 0x0f9e, 0x0fa3, 0x0fa9, 0x0fb3, + 0x0fba, 0x0fbf, 0x0fc7, 0x0fd0, 0x0fdf, 0x0feb, 0x0ff1, 0x0ff7, + 0x0ffc, 0x1004, 0x1013, 0x1023, 0x102d, 0x1033, 0x1037, 0x1045, // Entry 200 - 23F - 0x104d, 0x1058, 0x1064, 0x1072, 0x107c, 0x1084, 0x108b, 0x1097, - 0x109f, 0x10a3, 0x10af, 0x10b7, 0x10be, 0x10c7, 0x10cf, 0x10e1, - 0x10e9, 0x10f2, 0x10f8, 0x10fd, 0x1101, 0x1107, 0x110c, 0x1112, - 0x1115, 0x111c, 0x1124, 0x112b, 0x1132, 0x1138, 0x1140, 0x114b, - 0x1154, 0x115b, 0x1161, 0x116a, 0x1173, 0x1181, 0x118a, 0x1190, - 0x1197, 0x119c, 0x11b6, 0x11bf, 0x11ca, 0x11d4, 0x11da, 0x11de, - 0x11e7, 0x11ec, 0x11fe, 0x1210, 0x1214, 0x1219, 0x121e, 0x1224, - 0x122a, 0x122f, 0x1234, 0x123c, 0x123e, 0x1245, 0x1250, 0x1254, + 0x104b, 0x1058, 0x1060, 0x106b, 0x1077, 0x1085, 0x108f, 0x1097, + 0x109e, 0x10aa, 0x10b2, 0x10b6, 0x10c2, 0x10ca, 0x10d1, 0x10da, + 0x10e2, 0x10f4, 0x10fc, 0x1105, 0x110b, 0x1110, 0x1114, 0x111a, + 0x111f, 0x1125, 0x1128, 0x112f, 0x1137, 0x113e, 0x1145, 0x114b, + 0x1153, 0x115e, 0x1167, 0x116e, 0x1174, 0x117d, 0x1186, 0x1194, + 0x119d, 0x11a3, 0x11aa, 0x11b1, 0x11ce, 0x11d7, 0x11e2, 0x11ec, + 0x1201, 0x1205, 0x120e, 0x1213, 0x1225, 0x1237, 0x123b, 0x1240, + 0x1245, 0x124b, 0x1251, 0x1256, 0x125b, 0x1263, 0x1265, 0x126c, // Entry 240 - 27F - 0x1257, 0x125d, 0x1264, 0x1269, 0x1273, 0x127c, 0x1286, 0x1294, - 0x129e, 0x12a4, 0x12be, 0x12c3, 0x12dc, 0x12e2, 0x12f8, 0x12f8, - 0x130b, 0x131a, 0x132c, 0x133c, 0x134f, 0x1361, 0x1361, 0x1361, - 0x1361, 0x1361, 0x1373, 0x1383, 0x1399, 0x13a0, 0x13b4, 0x13c7, - 0x13ce, 0x13da, 0x13ea, 0x13fc, 0x1410, -} // Size: 1250 bytes - -const frCALangStr string = "" + // Size: 529 bytes - "azerbaïdjanaiscrigujaratikalaallisutodiasame du Nordsangovolapükadyguévi" + - "eil anglaisaraukanbenabicolbilenmedumbatchagataychinookkurde centralslav" + - "etlichoyupik centralewondocajunvieux haut-allemandilocanokabardekenyangk" + - "ölschliveluochinois classiquemeta’marwaribas allemandao naganewari clas" + - "siquenkolepalauanallemand de Pennsylvaniebas allemand mennonitevieux per" + - "sepalatinancien occitanrarotongaaroumainsantalikurde méridionalserivieil" + - " irlandaisselayarsame du Sudsame de Lulesame skoltturoyotamazightbas sax" + - "onswahili congolais" - -var frCALangIdx = []uint16{ // 611 elements + 0x1277, 0x127b, 0x127e, 0x1284, 0x128b, 0x1290, 0x129a, 0x12a3, + 0x12ad, 0x12bb, 0x12c5, 0x12cb, 0x12e5, 0x12ea, 0x1303, 0x1309, + 0x131f, 0x131f, 0x1332, 0x1341, 0x1353, 0x1363, 0x1376, 0x1388, + 0x1388, 0x1388, 0x1388, 0x1388, 0x139a, 0x13aa, 0x13c0, 0x13c7, + 0x13db, 0x13ee, 0x13f5, 0x1401, 0x1411, 0x1423, 0x1437, +} // Size: 1254 bytes + +const frCALangStr string = "" + // Size: 551 bytes + "azerbaïdjanaiscrigujaratiyi de Sichuankuanyamakalaallisutodiasame du Nor" + + "dsangovolapükadyguévieil anglaisbenabicolbilenmedumbatchagataychinookkur" + + "de centralslavetlichoyupik centralewondocajunvieux haut-allemandilocanok" + + "abardekenyangkölschliveluochinois classiquemeta’marwarimentawaibas allem" + + "andao naganewari classiquenkolepalauanallemand de Pennsylvaniebas allema" + + "nd mennonitevieux persepalatinancien occitanrarotongaaroumainsantalikurd" + + "e méridionalserivieil irlandaisselayarsame du Sudsame de Lulesame skoltt" + + "uroyotamazightbas saxonswahili congolais" + +var frCALangIdx = []uint16{ // 613 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000f, 0x000f, 0x000f, 0x000f, @@ -18356,527 +19715,529 @@ var frCALangIdx = []uint16{ // 611 elements 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, // Entry 40 - 7F - 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, - 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, - 0x001a, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, - 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, - 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, - 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, - 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, - 0x0025, 0x0025, 0x0025, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, - // Entry 80 - BF - 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, - 0x0029, 0x0029, 0x0029, 0x0035, 0x003a, 0x003a, 0x003a, 0x003a, + 0x001a, 0x001a, 0x001a, 0x001a, 0x0027, 0x0027, 0x0027, 0x0027, + 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x002f, + 0x002f, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, - 0x003a, 0x003a, 0x003a, 0x003a, 0x0042, 0x0042, 0x0042, 0x0042, - 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, - 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, + 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, + 0x003a, 0x003a, 0x003a, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, + // Entry 80 - BF + 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, + 0x003e, 0x003e, 0x003e, 0x004a, 0x004f, 0x004f, 0x004f, 0x004f, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x004f, 0x004f, 0x004f, 0x004f, 0x0057, 0x0057, 0x0057, 0x0057, + 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, + 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, // Entry C0 - FF - 0x0049, 0x0049, 0x0056, 0x0056, 0x0056, 0x005d, 0x005d, 0x005d, - 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, - 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, - 0x005d, 0x005d, 0x005d, 0x005d, 0x0061, 0x0061, 0x0061, 0x0061, - 0x0061, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, - 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x006b, - 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, - 0x007b, 0x007b, 0x007b, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x005e, 0x005e, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, + 0x006b, 0x006b, 0x006b, 0x006b, 0x006f, 0x006f, 0x006f, 0x006f, + 0x006f, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, + 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0074, 0x0079, + 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, + 0x0080, 0x0089, 0x0089, 0x0089, 0x0090, 0x0090, 0x0090, 0x0090, // Entry 100 - 13F - 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, - 0x008f, 0x008f, 0x0094, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, - 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, - 0x009a, 0x009a, 0x009a, 0x009a, 0x009a, 0x00a7, 0x00ad, 0x00ad, - 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00b2, 0x00b2, 0x00b2, 0x00b2, - 0x00b2, 0x00b2, 0x00b2, 0x00b2, 0x00b2, 0x00b2, 0x00b2, 0x00b2, - 0x00b2, 0x00b2, 0x00b2, 0x00b2, 0x00b2, 0x00c5, 0x00c5, 0x00c5, - 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, + 0x0090, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, 0x009d, + 0x009d, 0x009d, 0x009d, 0x00a2, 0x00a8, 0x00a8, 0x00a8, 0x00a8, + 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, + 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00b5, 0x00bb, + 0x00bb, 0x00bb, 0x00bb, 0x00bb, 0x00bb, 0x00c0, 0x00c0, 0x00c0, + 0x00c0, 0x00c0, 0x00c0, 0x00c0, 0x00c0, 0x00c0, 0x00c0, 0x00c0, + 0x00c0, 0x00c0, 0x00c0, 0x00c0, 0x00c0, 0x00c0, 0x00d3, 0x00d3, + 0x00d3, 0x00d3, 0x00d3, 0x00d3, 0x00d3, 0x00d3, 0x00d3, 0x00d3, // Entry 140 - 17F - 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, - 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00c5, 0x00cc, 0x00cc, 0x00cc, - 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, - 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00d3, 0x00d3, 0x00d3, - 0x00d3, 0x00d3, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, - 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, + 0x00d3, 0x00d3, 0x00d3, 0x00d3, 0x00d3, 0x00d3, 0x00d3, 0x00d3, + 0x00d3, 0x00d3, 0x00d3, 0x00d3, 0x00d3, 0x00d3, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, - 0x00e1, 0x00e1, 0x00e1, 0x00e1, 0x00e1, 0x00e1, 0x00e1, 0x00e1, + 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00e1, 0x00e1, + 0x00e1, 0x00e1, 0x00e1, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, + 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, + 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, 0x00e8, + 0x00e8, 0x00ef, 0x00ef, 0x00ef, 0x00ef, 0x00ef, 0x00ef, 0x00ef, // Entry 180 - 1BF - 0x00e1, 0x00e1, 0x00e5, 0x00e5, 0x00e5, 0x00e5, 0x00e5, 0x00e5, - 0x00e5, 0x00e5, 0x00e5, 0x00e5, 0x00e8, 0x00e8, 0x00e8, 0x00f9, - 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, - 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0107, 0x0107, 0x0107, 0x0107, - 0x0107, 0x0107, 0x0107, 0x0107, 0x0113, 0x0113, 0x0113, 0x0113, - 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, + 0x00ef, 0x00ef, 0x00ef, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, + 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f6, 0x00f6, + 0x00f6, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, + 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, + 0x0107, 0x0107, 0x010e, 0x010e, 0x010e, 0x010e, 0x010e, 0x010e, + 0x010e, 0x010e, 0x010e, 0x010e, 0x010e, 0x010e, 0x0115, 0x011d, + 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x0129, 0x0129, + 0x0129, 0x0129, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, 0x0130, // Entry 1C0 - 1FF - 0x011a, 0x012a, 0x012a, 0x012f, 0x012f, 0x012f, 0x012f, 0x012f, - 0x012f, 0x012f, 0x012f, 0x012f, 0x0136, 0x0136, 0x0136, 0x014e, - 0x0164, 0x016f, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, - 0x0184, 0x0184, 0x0184, 0x0184, 0x0184, 0x018d, 0x018d, 0x018d, - 0x018d, 0x018d, 0x018d, 0x018d, 0x018d, 0x0195, 0x0195, 0x0195, - 0x0195, 0x0195, 0x0195, 0x0195, 0x019c, 0x019c, 0x019c, 0x019c, - 0x019c, 0x019c, 0x019c, 0x01ad, 0x01ad, 0x01ad, 0x01b1, 0x01b1, - 0x01b1, 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c0, + 0x0130, 0x0130, 0x0130, 0x0140, 0x0140, 0x0145, 0x0145, 0x0145, + 0x0145, 0x0145, 0x0145, 0x0145, 0x0145, 0x0145, 0x014c, 0x014c, + 0x014c, 0x0164, 0x017a, 0x0185, 0x018c, 0x018c, 0x018c, 0x018c, + 0x018c, 0x018c, 0x019a, 0x019a, 0x019a, 0x019a, 0x019a, 0x01a3, + 0x01a3, 0x01a3, 0x01a3, 0x01a3, 0x01a3, 0x01a3, 0x01a3, 0x01ab, + 0x01ab, 0x01ab, 0x01ab, 0x01ab, 0x01ab, 0x01ab, 0x01b2, 0x01b2, + 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01c3, 0x01c3, 0x01c3, + 0x01c7, 0x01c7, 0x01c7, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, // Entry 200 - 23F - 0x01c7, 0x01d2, 0x01de, 0x01de, 0x01e8, 0x01e8, 0x01e8, 0x01e8, - 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, - 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, - 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, - 0x01e8, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, - 0x01ee, 0x01ee, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, - 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, - 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, + 0x01d6, 0x01d6, 0x01dd, 0x01e8, 0x01f4, 0x01f4, 0x01fe, 0x01fe, + 0x01fe, 0x01fe, 0x01fe, 0x01fe, 0x01fe, 0x01fe, 0x01fe, 0x01fe, + 0x01fe, 0x01fe, 0x01fe, 0x01fe, 0x01fe, 0x01fe, 0x01fe, 0x01fe, + 0x01fe, 0x01fe, 0x01fe, 0x01fe, 0x01fe, 0x01fe, 0x01fe, 0x01fe, + 0x01fe, 0x01fe, 0x01fe, 0x0204, 0x0204, 0x0204, 0x0204, 0x0204, + 0x0204, 0x0204, 0x0204, 0x0204, 0x020d, 0x020d, 0x020d, 0x020d, + 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, + 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, // Entry 240 - 27F - 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, - 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, - 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x01f7, - 0x01f7, 0x01f7, 0x01f7, 0x01f7, 0x0200, 0x0200, 0x0200, 0x0200, - 0x0200, 0x0200, 0x0211, -} // Size: 1246 bytes - -const guLangStr string = "" + // Size: 11776 bytes + 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, + 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, + 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, + 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x0216, 0x0216, + 0x0216, 0x0216, 0x0216, 0x0216, 0x0227, +} // Size: 1250 bytes + +const guLangStr string = "" + // Size: 11864 bytes "અફારઅબખાજિયનઅવેસ્તનઆફ્રિકન્સઅકાનએમ્હારિકઅર્ગોનીઝઅરબીઆસામીઅવેરિકઆયમારાઅઝર" + - "બૈજાનીબશ્કીરબેલારુશિયનબલ્ગેરિયનબિસ્લામાબામ્બારાબંગાળીતિબેટીયનબ્રેટોનબો" + - "સ્નિયનકતલાનચેચનકેમોરોકોર્સિકનક્રીચેકચર્ચ સ્લાવિકચૂવાશવેલ્શડેનિશજર્મનદિ" + - "વેહીડ્ઝોંગ્ખાઈવગ્રીકઅંગ્રેજીએસ્પેરાન્ટોસ્પેનિશએસ્ટોનિયનબાસ્કફારસીફુલાહ" + - "ફિનિશફીજીયનફોરિસ્તફ્રેન્ચપશ્ચિમી ફ્રિસિયનઆઇરિશસ્કોટીસ ગેલિકગેલિશિયનગુઆ" + - "રાનીગુજરાતીમાંક્સહૌસાહીબ્રુહિન્દીહિરી મોટૂક્રોએશિયનહૈતીયનહંગેરિયનઆર્મે" + - "નિયનહેરેરોઇંટરલિંગુઆઇન્ડોનેશિયનઇંટરલિંગઇગ્બોસિચુઆન યીઇનુપિયાકઈડોઆઇસલેન" + - "્ડિકઇટાલિયનઇનુકિટૂટજાપાનીઝજાવાનીસજ્યોર્જિઅનકોંગોકિકુયૂક્વાન્યામાકઝાખકલ" + - "ાલ્લિસુતખ્મેરકન્નડકોરિયનકનુરીકાશ્મીરીકુર્દિશકોમીકોર્નિશકિર્ગીઝલેટિનલક્" + - "ઝેમબર્ગિશગાંડાલિંબૂર્ગિશલિંગાલાલાઓથિયનલિથુનિયનલૂબા-કટાંગાલાતવિયનમલાગસી" + - "માર્શલીઝમાઓરીમેસેડોનિયનમલયાલમમોંગોલિયનમરાઠીમલયમાલ્ટિઝબર્મીઝનાઉરૂઉત્તર " + - "દેબેલનેપાળીડોન્ગાડચનૉર્વેજીયન નાયનૉર્સ્કનોર્વેજીયન બોકમાલદક્ષિણ દેબેલન" + - "ાવાજોન્યાન્જાઓક્સિટનઓજિબ્વાઓરોમોઉડિયાઓસ્સેટિકપંજાબીપાલીપોલીશપશ્તોપોર્ટ" + - "ુગીઝક્વેચુઆરોમાન્શરૂન્દીરોમાનિયનરશિયનકિન્યારવાન્ડાસંસ્કૃતસાર્દિનિયનસિં" + - "ધીઉત્તરીય સામીસાંગોસિંહાલીસ્લોવૅકસ્લોવેનિયનસામોનશોનાસોમાલીઅલ્બેનિયનસર્" + - "બિયનસ્વાતીસદર્ન સોથોસંડેનીઝસ્વીડિશસ્વાહિલીતમિલતેલુગુતાજીકથાઈટાઇગ્રિનિય" + - "ાતુર્કમેનત્સ્વાનાટોંગાનટર્કીશસોંગાતતારતાહિતિયનઉઇગુરયુક્રેનિયનઉર્દૂઉઝ્બ" + - "ેકવેન્દાવિયેતનામીસવોલાપુકવાલૂનવોલોફખોસાયિદ્દિશયોરૂબાઝુઆગચાઇનીઝઝુલુઅચીન" + - "ીએકોલીઅદાંગ્મીઅદિઘેઅફ્રિહિલીઅઘેમઐનુઅક્કાદીયાનઅલેઉતદક્ષિણ અલ્તાઇજુની અં" + - "ગ્રેજીઅંગીકાએરમૈકમેપુચેઅરાપાહોઆલ્જેરિયન અરબીઅરાવકમોરોક્કન અરબીઈજિપ્શિય" + - "ન અરબીઅસુઅસ્તુરિયનઅવધીબલૂચીબાલિનીસબસાબામનબેજાબેમ્બાબેનાપશ્ચિમી બાલોચીભ" + - "ોજપુરીબિકોલબિનીસિક્સિકાબિષ્નુપ્રિયાવ્રજબ્રાહુઈબોડોબુરિયાતબુગિનીસબ્લિનક" + - "ડ્ડોકરિબઅત્સમસિબુઆનોચિગાચિબ્ચાછગાતાઇચૂકીસમારીચિનૂક જાર્ગનચોક્તૌશિપેવ્ય" + - "ાનશેરોકીશેયેન્નસેન્ટ્રલ કુર્દિશકોપ્ટિકક્રિમિયન તુર્કીસેસેલ્વા ક્રેઓલે " + - "ફ્રેન્ચકાશુબિયનદાકોતાદાર્ગવાતૈતાદેલવેરસ્લેવડોગ્રિબદિન્કાઝર્માડોગ્રીનિમ" + - "્ન સોર્બિયનદુઆલામધ્ય ડચજોલા-ફોન્યીડ્યુલાદાઝાગાઍમ્બુએફિકપ્રાચીન ઇજીપ્શિ" + - "યનએકાજુકએલામાઇટમિડિલ અંગ્રેજીઇવોન્ડોફેંગફિલિપિનોફોનમિડિલ ફ્રેંચજૂની ફ્" + - "રેંચઉત્તરીય ફ્રિશિયનપૂર્વ ફ્રિશિયનફ્રિયુલિયાનગાગાગાઝganગાયોબાયાઝોરોસ્ટ" + - "્રિઅન દારીગીઝજિલ્બરટીઝમધ્ય હાઇ જર્મનજૂની હાઇ જર્મનગોઅન કોંકણીગોંડીગોરો" + - "ન્તાલોગોથિકગ્રેબોપ્રાચીન ગ્રીકસ્વિસ જર્મનગુસીગ્વિચ’ઇનહૈડાhakહાવાઇયનફીજ" + - "ી હિંદીહિલિગેનોનહિટ્ટિતેહમોંગઅપ્પર સોર્બિયનhsnહૂપાઇબાનઈબિબિયોઇલોકોઇંગુ" + - "શલોજ્બાનનગોમ્બામકામેજુદેઓ-પર્શિયનજુદેઓ-અરબીકારા-કલ્પકકબાઇલકાચિનજ્જુકમ્" + - "બાકાવીકબાર્ડિયનત્યાપમકોન્ડેકાબુવર્ડિઆનુકોરોખાસીખોતાનીસકોયરા ચિનિકાકોકલ" + - "ેજિનકિમ્બન્દુકોમી-પર્મ્યાકકોંકણીકોસરિયનક્પેલ્લેકરાચય-બલ્કારકરેલિયનકુરૂ" + - "ખશમ્બાલાબફિયાકોલોગ્નિયનકુમીકકુતેનાઇલાદીનોલંગીલાહન્ડાલામ્બાલેઝધીયનલિંગ્" + - "વા ફેન્કા નોવાલાકોટામોંગોલોઝીઉત્તરીય લુરીલૂબા-લુલુઆલુઇસેનોલુન્ડાલ્યુઓમ" + - "િઝોલુઈયામાદુરીસમગહીમૈથિલીમકાસરમન્ડિન્ગોમસાઇમોક્ષમંદારમેન્ડેમેરુમોરીસ્ય" + - "ેનમધ્ય આઈરિશમાખુવા-મીટ્ટુમેતામિકમેકમિનાંગ્કાબાઉમાન્ચુમણિપુરીમોહૌકમોસ્સ" + - "ીપશ્ચિમી મારીમુનડાન્ગબહુવિધ ભાષાઓક્રિકમિરાંડીમારવાડીએર્ઝયામઝાન્દેરાનીn" + - "anનેપોલિટાનનમાલો જર્મનનેવારીનિયાસનિયુઆનક્વાસિઓનીએમબુનનોગાઇજૂની નોર્સએન’ક" + - "ોઉતરી સોથોનુએરપરંપરાગત નેવારીન્યામવેઝીન્યાનકોલન્યોરોન્ઝિમાઓસેજઓટોમાન ત" + - "ુર્કિશપંગાસીનાનપહલવીપમ્પાન્ગાપાપિયામેન્ટોપલાઉઆનનાજેરીયન પીજીનજૂની ફારસ" + - "ીફોનિશિયનપોહપિએનપ્રુસ્સીયનજુની પ્રોવેન્સલકિચેરાજસ્થાનીરાપાનુઇરારોટોંગન" + - "રોમ્બોરોમાનીઅરોમેનિયનરવાસોંડવેસખાસામરિટાન અરેમિકસમ્બુરુસાસાકસંતાલીન્ગા" + - "મ્બેયસાંગુસિસિલિયાનસ્કોટ્સસર્ઘન કુર્દીશસેનાસેલ્કપકોયરાબોરો સેન્નીજૂની " + - "આયરિશતેશીલહિટશેનસિદામોદક્ષિણ સામીલ્યુલ સામીઇનારી સામીસ્કોલ્ટ સામીસોનિન" + - "્કેસોગ્ડિએનસ્રાનન ટોન્ગોસેરેરસાહોસુકુમાસુસુસુમેરિયનકોમોરિયનપરંપરાગત સિ" + - "રિએકસિરિએકતુલુટિમ્નેતેસોતેરેનોતેતુમટાઇગ્રેતિવતોકેલાઉક્લિન્ગોનક્લીન્ગકિ" + - "ટતામાશેખન્યાસા ટોન્ગાટોક પિસિનટારોકોસિમ્શિયનમુસ્લિમ તાટતુમ્બુકાતુવાલુત" + - "સાવાકટુવીનિયનસેન્ટ્રલ ઍટ્લસ તામાઝિગ્ટઉદમુર્તયુગેરિટિકઉમ્બુન્ડૂરૂટવાઇવો" + - "ટિકવુન્જોવેલ્સેરવોલાયટ્ટાવારેયવાશોવાર્લ્પીરીwuuકાલ્મિકસોગાયાઓયાપીસયાન્" + - "ગબેનયેમ્બાકેંટોનીઝઝેપોટેકબ્લિસિમ્બોલ્સઝેનાગાપ્રમાણભૂત મોરોક્કન તામાઝિગ" + - "્ટઝૂનીકોઇ ભાષાશાસ્ત્રીય સામગ્રી નથીઝાઝામોડર્ન સ્ટાન્ડર્ડ અરબીઓસ્ટ્રિઅન" + - " જર્મનસ્વિસ હાય જર્મનઓસ્ટ્રેલિયન અંગ્રેજીકેનેડિયન અંગ્રેજીબ્રિટિશ અંગ્રે" + - "જીઅમેરિકન અંગ્રેજીલેટિન અમેરિકન સ્પેનિશયુરોપિયન સ્પેનિશમેક્સિકન સ્પેનિ" + - "શકેનેડિયન ફ્રેંચસ્વિસ ફ્રેંચલો સેક્સોનફ્લેમિશબ્રાઝિલીયન પોર્ટુગીઝયુરોપ" + - "િયન પોર્ટુગીઝમોલડાવિયનસર્બો-ક્રોએશિયનકોંગો સ્વાહિલીસરળીકૃત ચાઇનીઝપારંપ" + - "રિક ચાઇનીઝ" - -var guLangIdx = []uint16{ // 613 elements + "બૈજાનીબશ્કીરબેલારુશિયનબલ્ગેરિયનબિસ્લામાબામ્બારાબાંગ્લાતિબેટીયનબ્રેટોનબ" + + "ોસ્નિયનકતલાનચેચનકેમોરોકોર્સિકનક્રીચેકચર્ચ સ્લાવિકચૂવાશવેલ્શડેનિશજર્મનદ" + + "િવેહીડ્ઝોંગ્ખાઈવગ્રીકઅંગ્રેજીએસ્પેરાન્ટોસ્પેનિશએસ્ટોનિયનબાસ્કફારસીફુલા" + + "હફિનિશફીજીયનફોરિસ્તફ્રેન્ચપશ્ચિમી ફ્રિસિયનઆઇરિશસ્કોટીસ ગેલિકગેલિશિયનગુ" + + "આરાનીગુજરાતીમાંક્સહૌસાહીબ્રુહિન્દીહિરી મોટૂક્રોએશિયનહૈતિઅન ક્રેઓલેહંગે" + + "રિયનઆર્મેનિયનહેરેરોઇંટરલિંગુઆઇન્ડોનેશિયનઇંટરલિંગઇગ્બોસિચુઆન યીઇનુપિયાક" + + "ઈડોઆઇસલેન્ડિકઇટાલિયનઇનુકિટૂટજાપાનીઝજાવાનીસજ્યોર્જિયનકોંગોકિકુયૂક્વાન્ય" + + "ામાકઝાખકલાલ્લિસુતખ્મેરકન્નડકોરિયનકનુરીકાશ્મીરીકુર્દિશકોમીકોર્નિશકિર્ગી" + + "ઝલેટિનલક્ઝેમબર્ગિશગાંડાલિંબૂર્ગિશલિંગાલાલાઓલિથુઆનિયનલૂબા-કટાંગાલાતવિયન" + + "મલાગસીમાર્શલીઝમાઓરીમેસેડોનિયનમલયાલમમોંગોલિયનમરાઠીમલયમાલ્ટિઝબર્મીઝનાઉરૂ" + + "ઉત્તર દેબેલનેપાળીડોન્ગાડચનોર્વેજિયન નાયનૉર્સ્કનોર્વેજિયન બોકમાલદક્ષિણ " + + "દેબેલનાવાજોન્યાન્જાઓક્સિટનઓજિબ્વાઓરોમોઉડિયાઓસ્સેટિકપંજાબીપાલીપોલીશપશ્ત" + + "ોપોર્ટુગીઝક્વેચુઆરોમાન્શરૂન્દીરોમાનિયનરશિયનકિન્યારવાન્ડાસંસ્કૃતસાર્દિન" + + "િયનસિંધીઉત્તરી સામીસાંગોસિંહાલીસ્લોવૅકસ્લોવેનિયનસામોનશોનાસોમાલીઅલ્બેનિ" + + "યનસર્બિયનસ્વાતીદક્ષિણ સોથોસંડેનીઝસ્વીડિશસ્વાહિલીતમિલતેલુગુતાજીકથાઈટાઇગ" + + "્રિનિયાતુર્કમેનત્સ્વાનાટોંગાનટર્કિશસોંગાતતારતાહિતિયનઉઇગુરયુક્રેનિયનઉર્" + + "દૂઉઝ્બેકવેન્દાવિયેતનામીસવોલાપુકવાલૂનવોલોફખોસાયિદ્દિશયોરૂબાઝુઆગચાઇનીઝઝુ" + + "લુઅચીનીએકોલીઅદાંગ્મીઅદિઘેઅફ્રિહિલીઅઘેમઐનુઅક્કાદીયાનઅલેઉતદક્ષિણ અલ્તાઇજ" + + "ુની અંગ્રેજીઅંગીકાએરમૈકમેપુચેઅરાપાહોઆલ્જેરિયન અરબીઅરાવકમોરોક્કન અરબીઈજ" + + "િપ્શિયન અરબીઅસુઅસ્તુરિયનઅવધીબલૂચીબાલિનીસબસાબામનબેજાબેમ્બાબેનાપશ્ચિમી બ" + + "ાલોચીભોજપુરીબિકોલબિનીસિક્સિકાબિષ્નુપ્રિયાવ્રજબ્રાહુઈબોડોબુરિયાતબુગિનીસ" + + "બ્લિનકડ્ડોકરિબઅત્સમસિબુઆનોચિગાચિબ્ચાછગાતાઇચૂકીસમારીચિનૂક જાર્ગનચોક્તૌશ" + + "િપેવ્યાનશેરોકીશેયેન્નસેન્ટ્રલ કુર્દિશકોપ્ટિકક્રિમિયન તુર્કીસેસેલ્વા ક્" + + "રેઓલે ફ્રેન્ચકાશુબિયનદાકોતાદાર્ગવાતૈતાદેલવેરસ્લેવડોગ્રિબદિન્કાઝર્માડોગ" + + "્રીલોઅર સોર્બિયનદુઆલામધ્ય ડચજોલા-ફોન્યીડ્યુલાદાઝાગાઍમ્બુએફિકપ્રાચીન ઇજ" + + "ીપ્શિયનએકાજુકએલામાઇટમિડિલ અંગ્રેજીઇવોન્ડોફેંગફિલિપિનોફોનકાજૂન ફ્રેન્ચમ" + + "િડિલ ફ્રેંચજૂની ફ્રેંચઉત્તરીય ફ્રિશિયનપૂર્વ ફ્રિશિયનફ્રિયુલિયાનગાગાગાઝ" + + "ganગાયોબાયાઝોરોસ્ટ્રિઅન દારીગીઝજિલ્બરટીઝમધ્ય હાઇ જર્મનજૂની હાઇ જર્મનગોઅન" + + " કોંકણીગોંડીગોરોન્તાલોગોથિકગ્રેબોપ્રાચીન ગ્રીકસ્વિસ જર્મનગુસીગ્વિચ’ઇનહૈડ" + + "ાhakહવાઇયનફીજી હિંદીહિલિગેનોનહિટ્ટિતેહમોંગઅપર સોર્બિયનhsnહૂપાઇબાનઇબિબિ" + + "ઓઇલોકોઇંગુશલોજ્બાનનગોમ્બામકામેજુદેઓ-પર્શિયનજુદેઓ-અરબીકારા-કલ્પકકબાઇલકા" + + "ચિનજ્જુકમ્બાકાવીકબાર્ડિયનત્યાપમકોન્ડેકાબુવર્ડિઆનુકોરોખાસીખોતાનીસકોયરા " + + "ચિનિકાકોકલેજિનકિમ્બન્દુકોમી-પર્મ્યાકકોંકણીકોસરિયનક્પેલ્લેકરાચય-બલ્કારક" + + "રેલિયનકુરૂખશમ્બાલાબફિયાકોલોગ્નિયનકુમીકકુતેનાઇલાદીનોલંગીલાહન્ડાલામ્બાલે" + + "ઝધીયનલિંગ્વા ફેન્કા નોવાલાકોટામોંગોલ્યુઇસિયાના ક્રેઓલલોઝીઉત્તરી લુરીલૂ" + + "બા-લુલુઆલુઇસેનોલુન્ડાલ્યુઓમિઝોલુઈયામાદુરીસમગહીમૈથિલીમકાસરમન્ડિન્ગોમસાઇ" + + "મોક્ષમંદારમેન્ડેમેરુમોરીસ્યેનમધ્ય આઈરિશમાખુવા-મીટ્ટુમેતામિકમેકમિનાંગ્ક" + + "ાબાઉમાન્ચુમણિપુરીમોહૌકમોસ્સીપશ્ચિમી મારીમુનડાન્ગબહુવિધ ભાષાઓક્રિકમિરાં" + + "ડીમારવાડીએર્ઝયામઝાન્દેરાનીnanનેપોલિટાનનમાલો જર્મનનેવારીનિયાસનિયુઆનક્વા" + + "સિઓનીએમબુનનોગાઇજૂની નોર્સએન’કોઉત્તરી સોથોનુએરપરંપરાગત નેવારીન્યામવેઝીન" + + "્યાનકોલન્યોરોન્ઝિમાઓસેજઓટોમાન તુર્કિશપંગાસીનાનપહલવીપમ્પાન્ગાપાપિયામેન્" + + "ટોપલાઉઆનનાઇજેરિયન પીજીનજૂની ફારસીફોનિશિયનપોહપિએનપ્રુસ્સીયનજુની પ્રોવેન" + + "્સલકિચેરાજસ્થાનીરાપાનુઇરારોટોંગનરોમ્બોરોમાનીઅરોમેનિયનરવાસોંડવેસખાસામરિ" + + "ટાન અરેમિકસમ્બુરુસાસાકસંતાલીન્ગામ્બેયસાંગુસિસિલિયાનસ્કોટ્સસર્ઘન કુર્દી" + + "શસેનાસેલ્કપકોયરાબોરો સેન્નીજૂની આયરિશતેશીલહિટશેનસિદામોદક્ષિણ સામીલુલે " + + "સામીઇનારી સામીસ્કોલ્ટ સામીસોનિન્કેસોગ્ડિએનસ્રાનન ટોન્ગોસેરેરસાહોસુકુમા" + + "સુસુસુમેરિયનકોમોરિયનપરંપરાગત સિરિએકસિરિએકતુલુટિમ્નેતેસોતેરેનોતેતુમટાઇગ" + + "્રેતિવતોકેલાઉક્લિન્ગોનક્લીન્ગકિટતામાશેખન્યાસા ટોન્ગાટોક પિસિનટારોકોસિમ" + + "્શિયનમુસ્લિમ તાટતુમ્બુકાતુવાલુતસાવાકટુવીનિયનસેન્ટ્રલ એટલાસ તામાઝિટઉદમુ" + + "ર્તયુગેરિટિકઉમ્બુન્ડૂઅજ્ઞાત ભાષાવાઇવોટિકવુન્જોવેલ્સેરવોલાયટ્ટાવારેયવાશ" + + "ોવાર્લ્પીરીwuuકાલ્મિકસોગાયાઓયાપીસયાન્ગબેનયેમ્બાકેંટોનીઝઝેપોટેકબ્લિસિમ્" + + "બોલ્સઝેનાગામાનક મોરોક્કન તામાઝિટઝૂનીકોઇ ભાષાશાસ્ત્રીય સામગ્રી નથીઝાઝામ" + + "ોડર્ન સ્ટાન્ડર્ડ અરબીઓસ્ટ્રિઅન જર્મનસ્વિસ હાય જર્મનઓસ્ટ્રેલિયન અંગ્રેજ" + + "ીકેનેડિયન અંગ્રેજીબ્રિટિશ અંગ્રેજીઅમેરિકન અંગ્રેજીલેટિન અમેરિકન સ્પેનિ" + + "શયુરોપિયન સ્પેનિશમેક્સિકન સ્પેનિશકેનેડિયન ફ્રેંચસ્વિસ ફ્રેંચલો સેક્સોન" + + "ફ્લેમિશબ્રાઝિલીયન પોર્ટુગીઝયુરોપિયન પોર્ટુગીઝમોલડાવિયનસર્બો-ક્રોએશિયનક" + + "ોંગો સ્વાહિલીસરળીકૃત ચાઇનીઝપારંપરિક ચાઇનીઝ" + +var guLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x000c, 0x0024, 0x0039, 0x0054, 0x0060, 0x0078, 0x0090, 0x009c, 0x00ab, 0x00bd, 0x00cf, 0x00ea, 0x00fc, 0x011a, 0x0135, - 0x014d, 0x0165, 0x0177, 0x018f, 0x01a4, 0x01bc, 0x01cb, 0x01d7, - 0x01e9, 0x0201, 0x020d, 0x0216, 0x0238, 0x0247, 0x0256, 0x0265, - 0x0274, 0x0286, 0x02a1, 0x02a7, 0x02b6, 0x02ce, 0x02ef, 0x0304, - 0x031f, 0x032e, 0x033d, 0x034c, 0x035b, 0x036d, 0x0382, 0x0397, - 0x03c5, 0x03d4, 0x03f9, 0x0411, 0x0426, 0x043b, 0x044d, 0x0459, - 0x046b, 0x047d, 0x0496, 0x04b1, 0x04c3, 0x04db, 0x04f6, 0x0508, + 0x014d, 0x0165, 0x017a, 0x0192, 0x01a7, 0x01bf, 0x01ce, 0x01da, + 0x01ec, 0x0204, 0x0210, 0x0219, 0x023b, 0x024a, 0x0259, 0x0268, + 0x0277, 0x0289, 0x02a4, 0x02aa, 0x02b9, 0x02d1, 0x02f2, 0x0307, + 0x0322, 0x0331, 0x0340, 0x034f, 0x035e, 0x0370, 0x0385, 0x039a, + 0x03c8, 0x03d7, 0x03fc, 0x0414, 0x0429, 0x043e, 0x0450, 0x045c, + 0x046e, 0x0480, 0x0499, 0x04b4, 0x04dc, 0x04f4, 0x050f, 0x0521, // Entry 40 - 7F - 0x0526, 0x0547, 0x055f, 0x056e, 0x0587, 0x059f, 0x05a8, 0x05c6, - 0x05db, 0x05f3, 0x0608, 0x061d, 0x063b, 0x064a, 0x065c, 0x067a, - 0x0686, 0x06a4, 0x06b3, 0x06c2, 0x06d4, 0x06e3, 0x06fb, 0x0710, - 0x071c, 0x0731, 0x0746, 0x0755, 0x0779, 0x0788, 0x07a6, 0x07bb, - 0x07d0, 0x07e8, 0x0807, 0x081c, 0x082e, 0x0846, 0x0855, 0x0873, - 0x0885, 0x08a0, 0x08af, 0x08b8, 0x08cd, 0x08df, 0x08ee, 0x090d, - 0x091f, 0x0931, 0x0937, 0x0974, 0x09a5, 0x09c7, 0x09d9, 0x09f1, - 0x0a06, 0x0a1b, 0x0a2a, 0x0a39, 0x0a51, 0x0a63, 0x0a6f, 0x0a7e, + 0x053f, 0x0560, 0x0578, 0x0587, 0x05a0, 0x05b8, 0x05c1, 0x05df, + 0x05f4, 0x060c, 0x0621, 0x0636, 0x0654, 0x0663, 0x0675, 0x0693, + 0x069f, 0x06bd, 0x06cc, 0x06db, 0x06ed, 0x06fc, 0x0714, 0x0729, + 0x0735, 0x074a, 0x075f, 0x076e, 0x0792, 0x07a1, 0x07bf, 0x07d4, + 0x07dd, 0x07f8, 0x0817, 0x082c, 0x083e, 0x0856, 0x0865, 0x0883, + 0x0895, 0x08b0, 0x08bf, 0x08c8, 0x08dd, 0x08ef, 0x08fe, 0x091d, + 0x092f, 0x0941, 0x0947, 0x0984, 0x09b5, 0x09d7, 0x09e9, 0x0a01, + 0x0a16, 0x0a2b, 0x0a3a, 0x0a49, 0x0a61, 0x0a73, 0x0a7f, 0x0a8e, // Entry 80 - BF - 0x0a8d, 0x0aa8, 0x0abd, 0x0ad2, 0x0ae4, 0x0afc, 0x0b0b, 0x0b32, - 0x0b47, 0x0b65, 0x0b74, 0x0b96, 0x0ba5, 0x0bba, 0x0bcf, 0x0bed, - 0x0bfc, 0x0c08, 0x0c1a, 0x0c35, 0x0c4a, 0x0c5c, 0x0c78, 0x0c8d, - 0x0ca2, 0x0cba, 0x0cc6, 0x0cd8, 0x0ce7, 0x0cf0, 0x0d11, 0x0d29, - 0x0d41, 0x0d53, 0x0d65, 0x0d74, 0x0d80, 0x0d98, 0x0da7, 0x0dc5, - 0x0dd4, 0x0de6, 0x0df8, 0x0e16, 0x0e2b, 0x0e3a, 0x0e49, 0x0e55, - 0x0e6a, 0x0e7c, 0x0e88, 0x0e9a, 0x0ea6, 0x0eb5, 0x0ec4, 0x0edc, - 0x0eeb, 0x0eeb, 0x0f06, 0x0f12, 0x0f1b, 0x0f39, 0x0f39, 0x0f48, + 0x0a9d, 0x0ab8, 0x0acd, 0x0ae2, 0x0af4, 0x0b0c, 0x0b1b, 0x0b42, + 0x0b57, 0x0b75, 0x0b84, 0x0ba3, 0x0bb2, 0x0bc7, 0x0bdc, 0x0bfa, + 0x0c09, 0x0c15, 0x0c27, 0x0c42, 0x0c57, 0x0c69, 0x0c88, 0x0c9d, + 0x0cb2, 0x0cca, 0x0cd6, 0x0ce8, 0x0cf7, 0x0d00, 0x0d21, 0x0d39, + 0x0d51, 0x0d63, 0x0d75, 0x0d84, 0x0d90, 0x0da8, 0x0db7, 0x0dd5, + 0x0de4, 0x0df6, 0x0e08, 0x0e26, 0x0e3b, 0x0e4a, 0x0e59, 0x0e65, + 0x0e7a, 0x0e8c, 0x0e98, 0x0eaa, 0x0eb6, 0x0ec5, 0x0ed4, 0x0eec, + 0x0efb, 0x0efb, 0x0f16, 0x0f22, 0x0f2b, 0x0f49, 0x0f49, 0x0f58, // Entry C0 - FF - 0x0f48, 0x0f6d, 0x0f92, 0x0fa4, 0x0fb3, 0x0fc5, 0x0fc5, 0x0fda, - 0x1002, 0x1002, 0x1011, 0x1036, 0x105e, 0x1067, 0x1067, 0x1082, - 0x1082, 0x108e, 0x109d, 0x10b2, 0x10b2, 0x10bb, 0x10c7, 0x10c7, - 0x10c7, 0x10d3, 0x10e5, 0x10e5, 0x10f1, 0x10f1, 0x10f1, 0x1119, - 0x112e, 0x113d, 0x1149, 0x1149, 0x1149, 0x1161, 0x1185, 0x1185, - 0x1191, 0x11a6, 0x11b2, 0x11b2, 0x11c7, 0x11dc, 0x11dc, 0x11eb, - 0x11eb, 0x11fa, 0x1206, 0x1206, 0x1215, 0x122a, 0x1236, 0x1248, - 0x125a, 0x1269, 0x1275, 0x1297, 0x12a9, 0x12c4, 0x12d6, 0x12eb, + 0x0f58, 0x0f7d, 0x0fa2, 0x0fb4, 0x0fc3, 0x0fd5, 0x0fd5, 0x0fea, + 0x1012, 0x1012, 0x1021, 0x1046, 0x106e, 0x1077, 0x1077, 0x1092, + 0x1092, 0x109e, 0x10ad, 0x10c2, 0x10c2, 0x10cb, 0x10d7, 0x10d7, + 0x10d7, 0x10e3, 0x10f5, 0x10f5, 0x1101, 0x1101, 0x1101, 0x1129, + 0x113e, 0x114d, 0x1159, 0x1159, 0x1159, 0x1171, 0x1195, 0x1195, + 0x11a1, 0x11b6, 0x11c2, 0x11c2, 0x11d7, 0x11ec, 0x11ec, 0x11fb, + 0x11fb, 0x120a, 0x1216, 0x1216, 0x1225, 0x1225, 0x123a, 0x1246, + 0x1258, 0x126a, 0x1279, 0x1285, 0x12a7, 0x12b9, 0x12d4, 0x12e6, // Entry 100 - 13F - 0x1319, 0x132e, 0x132e, 0x1359, 0x139d, 0x13b5, 0x13c7, 0x13dc, - 0x13e8, 0x13fa, 0x1409, 0x141e, 0x1430, 0x143f, 0x1451, 0x1479, - 0x1479, 0x1488, 0x149b, 0x14ba, 0x14cc, 0x14de, 0x14ed, 0x14f9, - 0x14f9, 0x152a, 0x153c, 0x1551, 0x1579, 0x1579, 0x158e, 0x158e, - 0x159a, 0x15b2, 0x15b2, 0x15bb, 0x15bb, 0x15dd, 0x15fc, 0x15fc, - 0x162a, 0x1652, 0x1673, 0x1679, 0x1688, 0x168b, 0x1697, 0x16a3, - 0x16d4, 0x16dd, 0x16f8, 0x16f8, 0x171e, 0x1744, 0x1763, 0x1772, - 0x1790, 0x179f, 0x17b1, 0x17d6, 0x17f5, 0x17f5, 0x17f5, 0x1801, + 0x12fb, 0x1329, 0x133e, 0x133e, 0x1369, 0x13ad, 0x13c5, 0x13d7, + 0x13ec, 0x13f8, 0x140a, 0x1419, 0x142e, 0x1440, 0x144f, 0x1461, + 0x1486, 0x1486, 0x1495, 0x14a8, 0x14c7, 0x14d9, 0x14eb, 0x14fa, + 0x1506, 0x1506, 0x1537, 0x1549, 0x155e, 0x1586, 0x1586, 0x159b, + 0x159b, 0x15a7, 0x15bf, 0x15bf, 0x15c8, 0x15ed, 0x160f, 0x162e, + 0x162e, 0x165c, 0x1684, 0x16a5, 0x16ab, 0x16ba, 0x16bd, 0x16c9, + 0x16d5, 0x1706, 0x170f, 0x172a, 0x172a, 0x1750, 0x1776, 0x1795, + 0x17a4, 0x17c2, 0x17d1, 0x17e3, 0x1808, 0x1827, 0x1827, 0x1827, // Entry 140 - 17F - 0x1819, 0x1825, 0x1828, 0x183d, 0x1859, 0x1874, 0x188c, 0x189b, - 0x18c3, 0x18c6, 0x18d2, 0x18de, 0x18f3, 0x1902, 0x1911, 0x1911, - 0x1911, 0x1926, 0x193b, 0x194a, 0x196f, 0x198b, 0x198b, 0x19a7, - 0x19b6, 0x19c5, 0x19d1, 0x19e0, 0x19ec, 0x1a07, 0x1a07, 0x1a16, - 0x1a2b, 0x1a4f, 0x1a4f, 0x1a5b, 0x1a5b, 0x1a67, 0x1a7c, 0x1a98, - 0x1a98, 0x1a98, 0x1aa4, 0x1ab6, 0x1ad1, 0x1af6, 0x1b08, 0x1b1d, - 0x1b35, 0x1b57, 0x1b57, 0x1b57, 0x1b6c, 0x1b7b, 0x1b90, 0x1b9f, - 0x1bbd, 0x1bcc, 0x1be1, 0x1bf3, 0x1bff, 0x1c14, 0x1c26, 0x1c3b, + 0x1833, 0x184b, 0x1857, 0x185a, 0x186c, 0x1888, 0x18a3, 0x18bb, + 0x18ca, 0x18ec, 0x18ef, 0x18fb, 0x1907, 0x1919, 0x1928, 0x1937, + 0x1937, 0x1937, 0x194c, 0x1961, 0x1970, 0x1995, 0x19b1, 0x19b1, + 0x19cd, 0x19dc, 0x19eb, 0x19f7, 0x1a06, 0x1a12, 0x1a2d, 0x1a2d, + 0x1a3c, 0x1a51, 0x1a75, 0x1a75, 0x1a81, 0x1a81, 0x1a8d, 0x1aa2, + 0x1abe, 0x1abe, 0x1abe, 0x1aca, 0x1adc, 0x1af7, 0x1b1c, 0x1b2e, + 0x1b43, 0x1b5b, 0x1b7d, 0x1b7d, 0x1b7d, 0x1b92, 0x1ba1, 0x1bb6, + 0x1bc5, 0x1be3, 0x1bf2, 0x1c07, 0x1c19, 0x1c25, 0x1c3a, 0x1c4c, // Entry 180 - 1BF - 0x1c70, 0x1c70, 0x1c70, 0x1c82, 0x1c82, 0x1c91, 0x1c9d, 0x1cbf, - 0x1cbf, 0x1cdb, 0x1cf0, 0x1d02, 0x1d11, 0x1d1d, 0x1d2c, 0x1d2c, - 0x1d2c, 0x1d41, 0x1d41, 0x1d4d, 0x1d5f, 0x1d6e, 0x1d89, 0x1d95, - 0x1d95, 0x1da4, 0x1db3, 0x1dc5, 0x1dd1, 0x1dec, 0x1e08, 0x1e2d, - 0x1e39, 0x1e4b, 0x1e6f, 0x1e81, 0x1e96, 0x1ea5, 0x1eb7, 0x1ed9, - 0x1ef1, 0x1f13, 0x1f22, 0x1f37, 0x1f4c, 0x1f4c, 0x1f4c, 0x1f5e, - 0x1f7f, 0x1f82, 0x1f9d, 0x1fa6, 0x1fbc, 0x1fce, 0x1fdd, 0x1fef, - 0x1fef, 0x2004, 0x2019, 0x2028, 0x2044, 0x2044, 0x2053, 0x206c, + 0x1c61, 0x1c96, 0x1c96, 0x1c96, 0x1ca8, 0x1ca8, 0x1cb7, 0x1ceb, + 0x1cf7, 0x1d16, 0x1d16, 0x1d32, 0x1d47, 0x1d59, 0x1d68, 0x1d74, + 0x1d83, 0x1d83, 0x1d83, 0x1d98, 0x1d98, 0x1da4, 0x1db6, 0x1dc5, + 0x1de0, 0x1dec, 0x1dec, 0x1dfb, 0x1e0a, 0x1e1c, 0x1e28, 0x1e43, + 0x1e5f, 0x1e84, 0x1e90, 0x1ea2, 0x1ec6, 0x1ed8, 0x1eed, 0x1efc, + 0x1f0e, 0x1f30, 0x1f48, 0x1f6a, 0x1f79, 0x1f8e, 0x1fa3, 0x1fa3, + 0x1fa3, 0x1fb5, 0x1fd6, 0x1fd9, 0x1ff4, 0x1ffd, 0x2013, 0x2025, + 0x2034, 0x2046, 0x2046, 0x205b, 0x2070, 0x207f, 0x209b, 0x209b, // Entry 1C0 - 1FF - 0x2078, 0x20a3, 0x20be, 0x20d6, 0x20e8, 0x20fa, 0x2106, 0x212e, - 0x2149, 0x2158, 0x2173, 0x2197, 0x21a9, 0x21a9, 0x21d1, 0x21d1, - 0x21d1, 0x21ed, 0x21ed, 0x2205, 0x2205, 0x2205, 0x221a, 0x2238, - 0x2263, 0x226f, 0x226f, 0x228a, 0x229f, 0x22ba, 0x22ba, 0x22ba, - 0x22cc, 0x22de, 0x22de, 0x22de, 0x22de, 0x22f9, 0x2302, 0x2314, - 0x231d, 0x2348, 0x235d, 0x236c, 0x237e, 0x237e, 0x2399, 0x23a8, - 0x23c3, 0x23d8, 0x23d8, 0x23fd, 0x23fd, 0x2409, 0x2409, 0x241b, - 0x2449, 0x2465, 0x2465, 0x247d, 0x2486, 0x2486, 0x2498, 0x2498, + 0x20aa, 0x20c9, 0x20d5, 0x2100, 0x211b, 0x2133, 0x2145, 0x2157, + 0x2163, 0x218b, 0x21a6, 0x21b5, 0x21d0, 0x21f4, 0x2206, 0x2206, + 0x2231, 0x2231, 0x2231, 0x224d, 0x224d, 0x2265, 0x2265, 0x2265, + 0x227a, 0x2298, 0x22c3, 0x22cf, 0x22cf, 0x22ea, 0x22ff, 0x231a, + 0x231a, 0x231a, 0x232c, 0x233e, 0x233e, 0x233e, 0x233e, 0x2359, + 0x2362, 0x2374, 0x237d, 0x23a8, 0x23bd, 0x23cc, 0x23de, 0x23de, + 0x23f9, 0x2408, 0x2423, 0x2438, 0x2438, 0x245d, 0x245d, 0x2469, + 0x2469, 0x247b, 0x24a9, 0x24c5, 0x24c5, 0x24dd, 0x24e6, 0x24e6, // Entry 200 - 23F - 0x2498, 0x24b7, 0x24d3, 0x24ef, 0x2511, 0x2529, 0x2541, 0x2566, - 0x2575, 0x2581, 0x2581, 0x2593, 0x259f, 0x25b7, 0x25cf, 0x25fa, - 0x260c, 0x260c, 0x2618, 0x262a, 0x2636, 0x2648, 0x2657, 0x266c, - 0x2675, 0x268a, 0x268a, 0x26a5, 0x26c3, 0x26c3, 0x26d8, 0x26fd, - 0x2716, 0x2716, 0x2728, 0x2728, 0x2740, 0x275f, 0x2777, 0x2789, - 0x279b, 0x27b3, 0x27f7, 0x280c, 0x2827, 0x2842, 0x284b, 0x2854, - 0x2854, 0x2854, 0x2854, 0x2854, 0x2863, 0x2863, 0x2875, 0x288a, - 0x28a5, 0x28b4, 0x28c0, 0x28de, 0x28e1, 0x28f6, 0x28f6, 0x2902, + 0x24f8, 0x24f8, 0x24f8, 0x2517, 0x2530, 0x254c, 0x256e, 0x2586, + 0x259e, 0x25c3, 0x25d2, 0x25de, 0x25de, 0x25f0, 0x25fc, 0x2614, + 0x262c, 0x2657, 0x2669, 0x2669, 0x2675, 0x2687, 0x2693, 0x26a5, + 0x26b4, 0x26c9, 0x26d2, 0x26e7, 0x26e7, 0x2702, 0x2720, 0x2720, + 0x2735, 0x275a, 0x2773, 0x2773, 0x2785, 0x2785, 0x279d, 0x27bc, + 0x27d4, 0x27e6, 0x27f8, 0x2810, 0x284e, 0x2863, 0x287e, 0x2899, + 0x28b8, 0x28c1, 0x28c1, 0x28c1, 0x28c1, 0x28c1, 0x28d0, 0x28d0, + 0x28e2, 0x28f7, 0x2912, 0x2921, 0x292d, 0x294b, 0x294e, 0x2963, // Entry 240 - 27F - 0x290b, 0x291a, 0x2932, 0x2944, 0x2944, 0x295c, 0x2971, 0x2998, - 0x2998, 0x29aa, 0x29fa, 0x2a06, 0x2a57, 0x2a63, 0x2aa1, 0x2aa1, - 0x2acc, 0x2af5, 0x2b2f, 0x2b60, 0x2b8e, 0x2bbc, 0x2bf7, 0x2c25, - 0x2c53, 0x2c53, 0x2c7e, 0x2ca0, 0x2cbc, 0x2cd1, 0x2d0b, 0x2d3f, - 0x2d5a, 0x2d85, 0x2dad, 0x2dd5, 0x2e00, -} // Size: 1250 bytes - -const heLangStr string = "" + // Size: 7096 bytes - "אפאריתאבחזיתאבסטןאפריקאנסאקאןאמהריתאראגוניתערביתאסאמיתאבאריתאיימאריתאזרי" + - "תבשקיריתבלארוסיתבולגריתביסלמהבמבארהבנגליתטיבטיתברטוניתבוסניתקטלאניתצ׳צ׳" + - "ניתצ׳מורוקורסיקניתקריצ׳כיתסלאבית כנסייתית עתיקהצ׳ובאשוולשיתדניתגרמניתדי" + - "בהידזונקהאווהיווניתאנגליתאספרנטוספרדיתאסטוניתבסקיתפרסיתפולהפיניתפיג׳יתפ" + - "ארואזיתצרפתיתפריזית מערביתאיריתגאלית סקוטיתגליציאניתגוארניגוג׳ארטימאנית" + - "האוסהעבריתהינדיהירי מוטוקרואטיתקריאולית (האיטי)הונגריתארמניתהררו\u200fא" + - "ינטרלינגואהאינדונזיתאינטרלינגהאיגבוסצ׳ואן ייאינופיאקאידואיסלנדיתאיטלקית" + - "אינוקטיטוטיפניתיאוואיתגאורגיתקונגוקיקויוקואניאמהקזחיתגרינלנדיתחמריתקנאד" + - "הקוריאניתקאנוריקשמיריתכורדיתקומיקורניתקירגיזיתלטיניתלוקסמבורגיתגאנדהלימ" + - "בורגיתלינגלהלאוליטאיתלובה-קטנגהלטביתמלגשיתמרשליתמאוריתמקדוניתמליאלאםמונ" + - "גוליתמראטהימלאיתמלטיתבורמזיתנאוריתנדבלה צפוניתנפאליתנדונגההולנדיתנורווג" + - "ית חדשהנורווגית ספרותיתנדבלה דרומיתנאוואחוניאנג׳האוקסיטניתאוג׳יבווהאורו" + - "מואוריהאוסטיתפנג׳אביפאליפולניתפאשטופורטוגזיתקצ׳ואהרומאנשקירונדירומניתרו" + - "סיתקנירואנדיתסנסקריטסרדיניתסינדהיתסמי צפוניתסנגוסינהלהסלובקיתסלובניתסמו" + - "איתשונהסומליתאלבניתסרביתסאווזיסותו דרומיתסונדנזיתשוודיתסווהיליטמיליתטלו" + - "גוטג׳יקיתתאיתתיגריניתטורקמניתסוואנהטונגאיתטורקיתטסונגהטטריתטהיטיתאויגור" + - "אוקראיניתאורדואוזבקיתוונדהויאטנמית\u200fוולאפיקוואלוןוולוףקוסהיידישיורו" + - "בהזואנגסיניתזולואכינזיתאקוליאדנמהאדיגיתאפריהיליאהייםאינואכדיתאלאוטאלטאי" + - " דרומיתאנגלית עתיקהאנג׳יקהארמיתאראוקניתארפהוארוואקאסואסטוריתאוואדיתבאלוצ" + - "׳יבלינזיתבוואריתבסאאבמוםגומאלהבז׳הבמבהבנהבאפוטבאלוצ׳י מערביתבוג׳פוריביק" + - "ולביניקוםסיקסיקהבראג׳בודואקוסהבוריאטבוגינזיתבולובליןמדומבהקאדוקאריבקאיו" + - "גהאטסםקבואנוצ׳יגהצ׳יבצ׳הצ׳אגאטאיצ׳וקסהמאריניב צ׳ינוקצ׳וקטאוצ׳יפוויאןצ׳ר" + - "וקישאייןכורדית סוראניתקופטיתטטרית של קריםקריאולית (סיישל)קשוביתדקוטהדרג" + - "ווהטאיטהדלאוורסלאביתדוגריבדינקהזארמהדוגריסורבית נמוכהדואלההולנדית תיכונ" + - "הג׳ולה פוניתדיולהדזאנגהאמבואפיקמצרית עתיקהאקיוקעילמיתאנגלית תיכונהאוונד" + - "ופנגפיליפיניתפוןצרפתית תיכונהצרפתית עתיקהפריזית צפוניתפריזית מזרחיתפריו" + - "ליתגאגגאוזיתסינית גאןגאיוגבאיהגעזקיריבטיתגרמנית בינונית-גבוההגרמנית עתי" + - "קה גבוההגונדיגורונטאלוגותיתגרבויוונית עתיקהגרמנית שוויצריתגוסיגוויצ׳ןהא" + - "ידהסינית האקההוואיתהיליגאינוןחתיתהמונגסורבית גבוההסינית שיאנגהופהאיבאןא" + - "יביביואילוקואינגושיתלוז׳באןנגומבהמאקאמהפרסית יהודיתערבית יהודיתקארא-קלפ" + - "אקקבילהקצ׳יןג׳וקמבהקאוויקברדיתקנמבוטיאפמקונדהקאבוורדיאנוקורוקהאסיקוטאנז" + - "יתקוירה צ׳יניקאקוקלנג׳יןקימבונדוקומי-פרמיאקיתקונקאניקוסראיאןקפלהקראצ׳י-" + - "בלקרקארליתקורוקשמבאלהבאפיהקולוניאןקומיקיתקוטנאילדינולאנגילנדהלמבהלזגיתל" + - "קוטהמונגולוזיתלורית צפוניתלובה-לולואהלויסנולונדהלואומיזולויהמדורזיתמאפא" + - "המאגאהיתמאיטיליתמקסארמנדינגומסאיתמאבאמוקשהמנדארמנדהמרוקריאולית מאוריציא" + - "ניתאירית תיכונהמאקוואה מטומטאמיקמקמיננגקבאומנצ׳ומניפוריתמוהוקמוסימונדאנ" + - "גמספר שפותקריקמירנדזיתמרווארימאייןארזיהמאזאנדראניסינית מין נאןנפוליטנית" + - "נאמהגרמנית תחתיתנוואריניאסניואןקוואסיונגיאמבוןנוגאי\u200fנורדית עתיקהנ׳" + - "קוסותו צפוניתנוארנווארית קלאסיתניאמווזיניאנקולהניורונזימהאוסג׳טורקית עו" + - "תומניתפנגסינאןפלאביפמפאניהפפיאמנטופלוואןניגרית פידג׳יתפרסית עתיקהפיניקי" + - "תפונפיאןפרוסיתפרובנסאל עתיקהקיצ׳הראג׳סטאנירפאנויררוטונגאןרומבורומאניארו" + - "מניתראווהסנדאווהסאחהארמית שומרוניתסמבורוסאסקסאנטאלינגמבאיסאנגוסיציליאני" + - "תסקוטיתכורדית דרומיתסנקהסנהסלקופקויראבורו סניאירית עתיקהשילהשאןערבית צ׳" + - "אדיתסידאמוסאמי דרומיתלולה סאמיאינארי סאמיסקולט סאמיסונינקהסוגדיאןסרנאן " + - "טונגוסררסאהוסוקומהסוסושומריתסירית קלאסיתסוריתטימנהטסוטרנוטטוםטיגריתטיבט" + - "וקלאוקלינגוןטלינגיטטמאשקניאסה טונגהטוק פיסיןטרוקוטסימשיאןטומבוקהטובאלוט" + - "סוואקטוביניתטמזייט של מרכז מרוקואודמורטאוגריתיתאומבונדורוטוואיווטיקוונג" + - "׳ווואלסרווליאטהווראיוואשווורלפיריסינית ווקלמיקיתסוגהיאויאפזיתיאנגבןימבה" + - "קנטונזיתזאפוטקבליסימבולסזנאגהתמזיע׳ת מרוקאית תקניתזוניללא תוכן לשוניזאז" + - "אערבית ספרותיתגרמנית (שוויץ)אנגלית (בריטניה)צרפתית (שוויץ)סקסונית תחתית" + - "פלמיתמולדביתסרבו-קרואטיתסווהילי קונגוסינית פשוטהסינית מסורתית" - -var heLangIdx = []uint16{ // 613 elements + 0x2963, 0x296f, 0x2978, 0x2987, 0x299f, 0x29b1, 0x29b1, 0x29c9, + 0x29de, 0x2a05, 0x2a05, 0x2a17, 0x2a52, 0x2a5e, 0x2aaf, 0x2abb, + 0x2af9, 0x2af9, 0x2b24, 0x2b4d, 0x2b87, 0x2bb8, 0x2be6, 0x2c14, + 0x2c4f, 0x2c7d, 0x2cab, 0x2cab, 0x2cd6, 0x2cf8, 0x2d14, 0x2d29, + 0x2d63, 0x2d97, 0x2db2, 0x2ddd, 0x2e05, 0x2e2d, 0x2e58, +} // Size: 1254 bytes + +const heLangStr string = "" + // Size: 7204 bytes + "אפאריתאבחזיתאבסטןאפריקאנסאקאןאמהריתאראגוניתערביתאסאמיתאוואריתאיימאריתאזר" + + "יתבשקיריתבלארוסיתבולגריתביסלמהבמבארהבנגליתטיבטיתברטוניתבוסניתקטלאניתצ׳צ" + + "׳ניתצ׳מורוקורסיקניתקריצ׳כיתסלאבית כנסייתית עתיקהצ׳ובאשוולשיתדניתגרמניתד" + + "יבהידזונקהאווהיווניתאנגליתאספרנטוספרדיתאסטוניתבסקיתפרסיתפולהפיניתפיג׳ית" + + "פארואזיתצרפתיתפריזית מערביתאיריתגאלית סקוטיתגליציאניתגוארניגוג׳ארטימאני" + + "תהאוסהעבריתהינדיהירי מוטוקרואטיתקריאולית (האיטי)הונגריתארמניתהררו\u200f" + + "אינטרלינגואהאינדונזיתאינטרלינגהאיגבוסצ׳ואן ייאינופיאקאידואיסלנדיתאיטלקי" + + "תאינוקטיטוטיפניתיאוואיתגאורגיתקונגוקיקויוקואניאמהקזחיתגרינלנדיתחמריתקנא" + + "דהקוריאניתקאנוריקשמיריתכורדיתקומיקורניתקירגיזיתלטיניתלוקסמבורגיתגאנדהלי" + + "מבורגיתלינגלהלאוליטאיתלובה-קטנגהלטביתמלגשיתמרשליתמאוריתמקדוניתמליאלאםמו" + + "נגוליתמראטהימלאיתמלטיתבורמזיתנאוריתנדבלה צפוניתנפאליתנדונגההולנדיתנורוו" + + "גית חדשהנורווגית ספרותיתנדבלה דרומיתנאוואחוניאנג׳האוקסיטניתאוג׳יבווהאור" + + "ומואורייהאוסטיתפנג׳אביפאליפולניתפאשטופורטוגזיתקצ׳ואהרומאנשקירונדירומנית" + + "רוסיתקנירואנדיתסנסקריטסרדיניתסינדהיתסמי צפוניתסנגוסינהלהסלובקיתסלובניתס" + + "מואיתשונהסומליתאלבניתסרביתסאווזיסותו דרומיתסונדנזיתשוודיתסווהיליטמיליתט" + + "לוגוטג׳יקיתתאיתתיגריניתטורקמניתסוואנהטונגאיתטורקיתטסונגהטטריתטהיטיתאויג" + + "וראוקראיניתאורדואוזבקיתוונדהויאטנמית\u200fוולאפיקולוניתוולוףקוסהיידישיו" + + "רובהזואנגסיניתזולואכינזיתאקצ׳וליאדנמהאדיגיתאפריהיליאע׳םאינואכדיתאלאוטאל" + + "טאי דרומיתאנגלית עתיקהאנג׳יקהארמיתאראוקניתאראפהוארוואקאסואסטוריתאוואדית" + + "באלוצ׳יבלינזיתבוואריתבסאאבמוםגומאלהבז׳הבמבהבנהבאפוטבאלוצ׳י מערביתבוג׳פו" + + "ריביקולביניקוםסיקסיקהבראג׳בודואקוסהבוריאטבוגינזיתבולובליןמדומבהקאדוקארי" + + "בקאיוגהאטסםסבואנוצ׳יגהצ׳יבצ׳הצ׳אגאטאיצ׳וקסהמאריניב צ׳ינוקצ׳וקטאוצ׳יפווי" + + "אןצ׳רוקישאייןכורדית סוראניתקופטיתטטרית של קריםקריאולית (סיישל)קשוביתדקו" + + "טהדרגווהטאיטהדלאוורסלאביתדוגריבדינקהזארמהדוגריסורבית תחתיתדואלההולנדית " + + "תיכונהג׳ולה פוניתדיולהדזאנגהאמבואפיקמצרית עתיקהאקיוקעילמיתאנגלית תיכונה" + + "אוונדופנגפיליפיניתפוןצרפתית קייג׳וניתצרפתית תיכונהצרפתית עתיקהפריזית צפ" + + "וניתפריזית מזרחיתפריוליתגאגגאוזיתסינית גאןגאיוגבאיהגעזקיריבטיתגרמנית בי" + + "נונית-גבוההגרמנית עתיקה גבוההגונדיגורונטאלוגותיתגרבויוונית עתיקהגרמנית " + + "שוויצריתגוסיגוויצ׳ןהאידהסינית האקההוואיתהיליגאינוןחתיתהמונגסורבית גבוהה" + + "סינית שיאנגהופהאיבאןאיביביואילוקואינגושיתלוז׳באןנגומבהמאקאמהפרסית יהודי" + + "תערבית יהודיתקארא-קלפאקקבילהקצ׳יןג׳וקמבהקאוויקברדיתקנמבוטיאפמקונדהקאבוו" + + "רדיאנוקורוקהאסיקוטאנזיתקוירה צ׳יניקאקוקלנג׳יןקימבונדוקומי-פרמיאקיתקונקא" + + "ניקוסראיאןקפלהקראצ׳י-בלקרקארליתקורוקשמבאלהבאפיהקולוניאןקומיקיתקוטנאילדי" + + "נולאנגילנדהלמבהלזגיתלקוטהמונגוקריאולית לואיזיאניתלוזיתלורית צפוניתלובה-" + + "לולואהלויסנולונדהלואומיזולויהמדורזיתמאפאהמאגאהיתמאיטיליתמקסארמנדינגומסא" + + "יתמאבאמוקשהמנדארמנדהמרוקריאולית מאוריציאניתאירית תיכונהמאקוואה מטומטאמי" + + "קמקמיננגקבאומנצ׳ומניפוריתמוהוקמוסימונדאנגמספר שפותקריקמירנדזיתמרווארימא" + + "ייןארזיהמאזאנדראניסינית מין נאןנפוליטניתנאמהגרמנית תחתיתנוואריניאסניואן" + + "קוואסיונגיאמבוןנוגאי\u200fנורדית עתיקהנ׳קוסותו צפוניתנוארנווארית קלאסית" + + "ניאמווזיניאנקולהניורונזימהאוסג׳טורקית עות׳מניתפנגסינאןפלאביפמפאניהפפיאמ" + + "נטופלוואןניגרית פידג׳יתפרסית עתיקהפיניקיתפונפיאןפרוסיתפרובנסאל עתיקהקיצ" + + "׳הראג׳סטאנירפאנויררוטונגאןרומבורומאניארומניתראווהסנדאווהסאחהארמית שומרו" + + "ניתסמבורוסאסקסאנטאלינגמבאיסאנגוסיציליאניתסקוטיתכורדית דרומיתסנקהסנהסלקו" + + "פקויראבורו סניאירית עתיקהשילהשאןערבית צ׳אדיתסידאמוסאמי דרומיתלולה סאמיא" + + "ינארי סאמיסקולט סאמיסונינקהסוגדיאןסרנאן טונגוסררסאהוסוקומהסוסושומריתקומ" + + "וריתסירית קלאסיתסוריתטימנהטסוטרנוטטוםטיגריתטיבטוקלאוקלינגוןטלינגיטטמאשק" + + "ניאסה טונגהטוק פיסיןטרוקוטסימשיאןטומבוקהטובאלוטסוואקטוביניתתמאזיגת של מ" + + "רכז מרוקואודמורטאוגריתיתאומבונדושפה לא ידועהוואיווטיקוונג׳ווואלסרווליאט" + + "הווראיוואשווורלפיריסינית ווקלמיקיתסוגהיאויאפזיתיאנגבןימבהקנטונזיתזאפוטק" + + "בליסימבולסזנאגהתמזיע׳ת מרוקאית תקניתזוניללא תוכן לשוניזאזאערבית ספרותית" + + "גרמנית (שוויץ)אנגלית (בריטניה)צרפתית (שוויץ)סקסונית תחתיתפלמיתמולדביתסר" + + "בו-קרואטיתסווהילי קונגוסינית פשוטהסינית מסורתית" + +var heLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x000c, 0x0018, 0x0022, 0x0032, 0x003a, 0x0046, 0x0056, - 0x0060, 0x006c, 0x0078, 0x0088, 0x0092, 0x00a0, 0x00b0, 0x00be, - 0x00ca, 0x00d6, 0x00e2, 0x00ee, 0x00fc, 0x0108, 0x0116, 0x0124, - 0x0130, 0x0142, 0x0148, 0x0152, 0x017a, 0x0186, 0x0192, 0x019a, - 0x01a6, 0x01b0, 0x01bc, 0x01c4, 0x01d0, 0x01dc, 0x01ea, 0x01f6, - 0x0204, 0x020e, 0x0218, 0x0220, 0x022a, 0x0236, 0x0246, 0x0252, - 0x026b, 0x0275, 0x028c, 0x029e, 0x02aa, 0x02ba, 0x02c4, 0x02ce, - 0x02d8, 0x02e2, 0x02f3, 0x0301, 0x031e, 0x032c, 0x0338, 0x0340, + 0x0060, 0x006c, 0x007a, 0x008a, 0x0094, 0x00a2, 0x00b2, 0x00c0, + 0x00cc, 0x00d8, 0x00e4, 0x00f0, 0x00fe, 0x010a, 0x0118, 0x0126, + 0x0132, 0x0144, 0x014a, 0x0154, 0x017c, 0x0188, 0x0194, 0x019c, + 0x01a8, 0x01b2, 0x01be, 0x01c6, 0x01d2, 0x01de, 0x01ec, 0x01f8, + 0x0206, 0x0210, 0x021a, 0x0222, 0x022c, 0x0238, 0x0248, 0x0254, + 0x026d, 0x0277, 0x028e, 0x02a0, 0x02ac, 0x02bc, 0x02c6, 0x02d0, + 0x02da, 0x02e4, 0x02f5, 0x0303, 0x0320, 0x032e, 0x033a, 0x0342, // Entry 40 - 7F - 0x035b, 0x036d, 0x0381, 0x038b, 0x039c, 0x03ac, 0x03b4, 0x03c4, - 0x03d2, 0x03e6, 0x03f0, 0x03fe, 0x040c, 0x0416, 0x0422, 0x0432, - 0x043c, 0x044e, 0x0458, 0x0462, 0x0472, 0x047e, 0x048c, 0x0498, - 0x04a0, 0x04ac, 0x04bc, 0x04c8, 0x04de, 0x04e8, 0x04fa, 0x0506, - 0x050c, 0x0518, 0x052b, 0x0535, 0x0541, 0x054d, 0x0559, 0x0567, - 0x0575, 0x0585, 0x0591, 0x059b, 0x05a5, 0x05b3, 0x05bf, 0x05d6, - 0x05e2, 0x05ee, 0x05fc, 0x0615, 0x0634, 0x064b, 0x0659, 0x0667, - 0x0679, 0x068b, 0x0697, 0x06a1, 0x06ad, 0x06bb, 0x06c3, 0x06cf, + 0x035d, 0x036f, 0x0383, 0x038d, 0x039e, 0x03ae, 0x03b6, 0x03c6, + 0x03d4, 0x03e8, 0x03f2, 0x0400, 0x040e, 0x0418, 0x0424, 0x0434, + 0x043e, 0x0450, 0x045a, 0x0464, 0x0474, 0x0480, 0x048e, 0x049a, + 0x04a2, 0x04ae, 0x04be, 0x04ca, 0x04e0, 0x04ea, 0x04fc, 0x0508, + 0x050e, 0x051a, 0x052d, 0x0537, 0x0543, 0x054f, 0x055b, 0x0569, + 0x0577, 0x0587, 0x0593, 0x059d, 0x05a7, 0x05b5, 0x05c1, 0x05d8, + 0x05e4, 0x05f0, 0x05fe, 0x0617, 0x0636, 0x064d, 0x065b, 0x0669, + 0x067b, 0x068d, 0x0699, 0x06a5, 0x06b1, 0x06bf, 0x06c7, 0x06d3, // Entry 80 - BF - 0x06d9, 0x06eb, 0x06f7, 0x0703, 0x0711, 0x071d, 0x0727, 0x073b, - 0x0749, 0x0757, 0x0765, 0x0778, 0x0780, 0x078c, 0x079a, 0x07a8, - 0x07b4, 0x07bc, 0x07c8, 0x07d4, 0x07de, 0x07ea, 0x07ff, 0x080f, - 0x081b, 0x0829, 0x0835, 0x083f, 0x084d, 0x0855, 0x0865, 0x0875, - 0x0881, 0x088f, 0x089b, 0x08a7, 0x08b1, 0x08bd, 0x08c9, 0x08db, - 0x08e5, 0x08f3, 0x08fd, 0x090d, 0x091e, 0x092a, 0x0934, 0x093c, - 0x0946, 0x0952, 0x095c, 0x0966, 0x096e, 0x097c, 0x0986, 0x0990, - 0x099c, 0x099c, 0x09ac, 0x09b6, 0x09be, 0x09c8, 0x09c8, 0x09d2, + 0x06dd, 0x06ef, 0x06fb, 0x0707, 0x0715, 0x0721, 0x072b, 0x073f, + 0x074d, 0x075b, 0x0769, 0x077c, 0x0784, 0x0790, 0x079e, 0x07ac, + 0x07b8, 0x07c0, 0x07cc, 0x07d8, 0x07e2, 0x07ee, 0x0803, 0x0813, + 0x081f, 0x082d, 0x0839, 0x0843, 0x0851, 0x0859, 0x0869, 0x0879, + 0x0885, 0x0893, 0x089f, 0x08ab, 0x08b5, 0x08c1, 0x08cd, 0x08df, + 0x08e9, 0x08f7, 0x0901, 0x0911, 0x0922, 0x092e, 0x0938, 0x0940, + 0x094a, 0x0956, 0x0960, 0x096a, 0x0972, 0x0980, 0x098e, 0x0998, + 0x09a4, 0x09a4, 0x09b4, 0x09bc, 0x09c4, 0x09ce, 0x09ce, 0x09d8, // Entry C0 - FF - 0x09d2, 0x09e9, 0x0a00, 0x0a0e, 0x0a18, 0x0a28, 0x0a28, 0x0a32, - 0x0a32, 0x0a32, 0x0a3e, 0x0a3e, 0x0a3e, 0x0a44, 0x0a44, 0x0a52, - 0x0a52, 0x0a60, 0x0a6e, 0x0a7c, 0x0a8a, 0x0a92, 0x0a9a, 0x0a9a, - 0x0aa6, 0x0aae, 0x0ab6, 0x0ab6, 0x0abc, 0x0ac6, 0x0ac6, 0x0ae1, - 0x0af1, 0x0afb, 0x0b03, 0x0b03, 0x0b09, 0x0b17, 0x0b17, 0x0b17, - 0x0b21, 0x0b21, 0x0b29, 0x0b33, 0x0b3f, 0x0b4f, 0x0b57, 0x0b5f, - 0x0b6b, 0x0b73, 0x0b7d, 0x0b89, 0x0b91, 0x0b9d, 0x0ba7, 0x0bb5, - 0x0bc5, 0x0bd1, 0x0bd9, 0x0bec, 0x0bfa, 0x0c0c, 0x0c18, 0x0c22, + 0x09d8, 0x09ef, 0x0a06, 0x0a14, 0x0a1e, 0x0a2e, 0x0a2e, 0x0a3a, + 0x0a3a, 0x0a3a, 0x0a46, 0x0a46, 0x0a46, 0x0a4c, 0x0a4c, 0x0a5a, + 0x0a5a, 0x0a68, 0x0a76, 0x0a84, 0x0a92, 0x0a9a, 0x0aa2, 0x0aa2, + 0x0aae, 0x0ab6, 0x0abe, 0x0abe, 0x0ac4, 0x0ace, 0x0ace, 0x0ae9, + 0x0af9, 0x0b03, 0x0b0b, 0x0b0b, 0x0b11, 0x0b1f, 0x0b1f, 0x0b1f, + 0x0b29, 0x0b29, 0x0b31, 0x0b3b, 0x0b47, 0x0b57, 0x0b5f, 0x0b67, + 0x0b73, 0x0b7b, 0x0b85, 0x0b91, 0x0b99, 0x0b99, 0x0ba5, 0x0baf, + 0x0bbd, 0x0bcd, 0x0bd9, 0x0be1, 0x0bf4, 0x0c02, 0x0c14, 0x0c20, // Entry 100 - 13F - 0x0c3d, 0x0c49, 0x0c49, 0x0c61, 0x0c7e, 0x0c8a, 0x0c94, 0x0ca0, - 0x0caa, 0x0cb6, 0x0cc2, 0x0cce, 0x0cd8, 0x0ce2, 0x0cec, 0x0d03, - 0x0d03, 0x0d0d, 0x0d28, 0x0d3d, 0x0d47, 0x0d53, 0x0d5b, 0x0d63, - 0x0d63, 0x0d78, 0x0d82, 0x0d8e, 0x0da7, 0x0da7, 0x0db3, 0x0db3, - 0x0db9, 0x0dcb, 0x0dcb, 0x0dd1, 0x0dd1, 0x0dea, 0x0e01, 0x0e01, - 0x0e1a, 0x0e33, 0x0e41, 0x0e45, 0x0e53, 0x0e64, 0x0e6c, 0x0e76, - 0x0e76, 0x0e7c, 0x0e8c, 0x0e8c, 0x0eb2, 0x0ed4, 0x0ed4, 0x0ede, - 0x0ef0, 0x0efa, 0x0f02, 0x0f19, 0x0f36, 0x0f36, 0x0f36, 0x0f3e, + 0x0c2a, 0x0c45, 0x0c51, 0x0c51, 0x0c69, 0x0c86, 0x0c92, 0x0c9c, + 0x0ca8, 0x0cb2, 0x0cbe, 0x0cca, 0x0cd6, 0x0ce0, 0x0cea, 0x0cf4, + 0x0d0b, 0x0d0b, 0x0d15, 0x0d30, 0x0d45, 0x0d4f, 0x0d5b, 0x0d63, + 0x0d6b, 0x0d6b, 0x0d80, 0x0d8a, 0x0d96, 0x0daf, 0x0daf, 0x0dbb, + 0x0dbb, 0x0dc1, 0x0dd3, 0x0dd3, 0x0dd9, 0x0df8, 0x0e11, 0x0e28, + 0x0e28, 0x0e41, 0x0e5a, 0x0e68, 0x0e6c, 0x0e7a, 0x0e8b, 0x0e93, + 0x0e9d, 0x0e9d, 0x0ea3, 0x0eb3, 0x0eb3, 0x0ed9, 0x0efb, 0x0efb, + 0x0f05, 0x0f17, 0x0f21, 0x0f29, 0x0f40, 0x0f5d, 0x0f5d, 0x0f5d, // Entry 140 - 17F - 0x0f4c, 0x0f56, 0x0f69, 0x0f75, 0x0f75, 0x0f89, 0x0f91, 0x0f9b, - 0x0fb2, 0x0fc7, 0x0fcf, 0x0fd9, 0x0fe7, 0x0ff3, 0x1003, 0x1003, - 0x1003, 0x1011, 0x101d, 0x1029, 0x1040, 0x1057, 0x1057, 0x106a, - 0x1074, 0x107e, 0x1084, 0x108c, 0x1096, 0x10a2, 0x10ac, 0x10b4, - 0x10c0, 0x10d6, 0x10d6, 0x10de, 0x10de, 0x10e8, 0x10f8, 0x110d, - 0x110d, 0x110d, 0x1115, 0x1123, 0x1133, 0x114c, 0x115a, 0x116a, - 0x1172, 0x1187, 0x1187, 0x1187, 0x1193, 0x119d, 0x11a9, 0x11b3, - 0x11c3, 0x11d1, 0x11dd, 0x11e7, 0x11f1, 0x11f9, 0x1201, 0x120b, + 0x0f65, 0x0f73, 0x0f7d, 0x0f90, 0x0f9c, 0x0f9c, 0x0fb0, 0x0fb8, + 0x0fc2, 0x0fd9, 0x0fee, 0x0ff6, 0x1000, 0x100e, 0x101a, 0x102a, + 0x102a, 0x102a, 0x1038, 0x1044, 0x1050, 0x1067, 0x107e, 0x107e, + 0x1091, 0x109b, 0x10a5, 0x10ab, 0x10b3, 0x10bd, 0x10c9, 0x10d3, + 0x10db, 0x10e7, 0x10fd, 0x10fd, 0x1105, 0x1105, 0x110f, 0x111f, + 0x1134, 0x1134, 0x1134, 0x113c, 0x114a, 0x115a, 0x1173, 0x1181, + 0x1191, 0x1199, 0x11ae, 0x11ae, 0x11ae, 0x11ba, 0x11c4, 0x11d0, + 0x11da, 0x11ea, 0x11f8, 0x1204, 0x120e, 0x1218, 0x1220, 0x1228, // Entry 180 - 1BF - 0x120b, 0x120b, 0x120b, 0x1215, 0x1215, 0x121f, 0x1229, 0x1240, - 0x1240, 0x1255, 0x1261, 0x126b, 0x1273, 0x127b, 0x1283, 0x1283, - 0x1283, 0x1291, 0x129b, 0x12a9, 0x12b9, 0x12c3, 0x12d1, 0x12db, - 0x12e3, 0x12ed, 0x12f7, 0x12ff, 0x1305, 0x132c, 0x1343, 0x1358, - 0x135e, 0x1368, 0x137a, 0x1384, 0x1394, 0x139e, 0x13a6, 0x13a6, - 0x13b4, 0x13c5, 0x13cd, 0x13dd, 0x13eb, 0x13eb, 0x13f5, 0x13ff, - 0x1413, 0x142b, 0x143d, 0x1445, 0x145c, 0x1468, 0x1470, 0x147a, - 0x147a, 0x1488, 0x1498, 0x14a2, 0x14bc, 0x14bc, 0x14c4, 0x14d9, + 0x1232, 0x1232, 0x1232, 0x1232, 0x123c, 0x123c, 0x1246, 0x126b, + 0x1275, 0x128c, 0x128c, 0x12a1, 0x12ad, 0x12b7, 0x12bf, 0x12c7, + 0x12cf, 0x12cf, 0x12cf, 0x12dd, 0x12e7, 0x12f5, 0x1305, 0x130f, + 0x131d, 0x1327, 0x132f, 0x1339, 0x1343, 0x134b, 0x1351, 0x1378, + 0x138f, 0x13a4, 0x13aa, 0x13b4, 0x13c6, 0x13d0, 0x13e0, 0x13ea, + 0x13f2, 0x13f2, 0x1400, 0x1411, 0x1419, 0x1429, 0x1437, 0x1437, + 0x1441, 0x144b, 0x145f, 0x1477, 0x1489, 0x1491, 0x14a8, 0x14b4, + 0x14bc, 0x14c6, 0x14c6, 0x14d4, 0x14e4, 0x14ee, 0x1508, 0x1508, // Entry 1C0 - 1FF - 0x14e1, 0x14fc, 0x150c, 0x151c, 0x1526, 0x1530, 0x153a, 0x1557, - 0x1567, 0x1571, 0x157f, 0x158f, 0x159b, 0x159b, 0x15b6, 0x15b6, - 0x15b6, 0x15cb, 0x15cb, 0x15d9, 0x15d9, 0x15d9, 0x15e7, 0x15f3, - 0x160e, 0x1618, 0x1618, 0x162a, 0x1636, 0x1648, 0x1648, 0x1648, - 0x1652, 0x165e, 0x165e, 0x165e, 0x165e, 0x166c, 0x1676, 0x1684, - 0x168c, 0x16a7, 0x16b3, 0x16bb, 0x16c9, 0x16c9, 0x16d5, 0x16df, - 0x16f3, 0x16ff, 0x16ff, 0x1718, 0x1720, 0x1726, 0x1726, 0x1730, - 0x1749, 0x175e, 0x175e, 0x1766, 0x176c, 0x1783, 0x178f, 0x178f, + 0x1510, 0x1525, 0x152d, 0x1548, 0x1558, 0x1568, 0x1572, 0x157c, + 0x1586, 0x15a3, 0x15b3, 0x15bd, 0x15cb, 0x15db, 0x15e7, 0x15e7, + 0x1602, 0x1602, 0x1602, 0x1617, 0x1617, 0x1625, 0x1625, 0x1625, + 0x1633, 0x163f, 0x165a, 0x1664, 0x1664, 0x1676, 0x1682, 0x1694, + 0x1694, 0x1694, 0x169e, 0x16aa, 0x16aa, 0x16aa, 0x16aa, 0x16b8, + 0x16c2, 0x16d0, 0x16d8, 0x16f3, 0x16ff, 0x1707, 0x1715, 0x1715, + 0x1721, 0x172b, 0x173f, 0x174b, 0x174b, 0x1764, 0x176c, 0x1772, + 0x1772, 0x177c, 0x1795, 0x17aa, 0x17aa, 0x17b2, 0x17b8, 0x17cf, // Entry 200 - 23F - 0x178f, 0x17a4, 0x17b5, 0x17ca, 0x17dd, 0x17eb, 0x17f9, 0x180e, - 0x1814, 0x181c, 0x181c, 0x1828, 0x1830, 0x183c, 0x183c, 0x1853, - 0x185d, 0x185d, 0x185d, 0x1867, 0x186d, 0x1875, 0x187d, 0x1889, - 0x188f, 0x189b, 0x189b, 0x18a9, 0x18b7, 0x18b7, 0x18c1, 0x18d6, - 0x18e7, 0x18e7, 0x18f1, 0x18f1, 0x1901, 0x1901, 0x190f, 0x191b, - 0x1927, 0x1935, 0x195a, 0x1968, 0x1978, 0x1988, 0x198e, 0x1996, - 0x1996, 0x1996, 0x1996, 0x1996, 0x19a0, 0x19a0, 0x19ac, 0x19b8, - 0x19c6, 0x19d0, 0x19da, 0x19ea, 0x19f9, 0x1a07, 0x1a07, 0x1a0f, + 0x17db, 0x17db, 0x17db, 0x17f0, 0x1801, 0x1816, 0x1829, 0x1837, + 0x1845, 0x185a, 0x1860, 0x1868, 0x1868, 0x1874, 0x187c, 0x1888, + 0x1896, 0x18ad, 0x18b7, 0x18b7, 0x18b7, 0x18c1, 0x18c7, 0x18cf, + 0x18d7, 0x18e3, 0x18e9, 0x18f5, 0x18f5, 0x1903, 0x1911, 0x1911, + 0x191b, 0x1930, 0x1941, 0x1941, 0x194b, 0x194b, 0x195b, 0x195b, + 0x1969, 0x1975, 0x1981, 0x198f, 0x19b6, 0x19c4, 0x19d4, 0x19e4, + 0x19fa, 0x1a02, 0x1a02, 0x1a02, 0x1a02, 0x1a02, 0x1a0c, 0x1a0c, + 0x1a18, 0x1a24, 0x1a32, 0x1a3c, 0x1a46, 0x1a56, 0x1a65, 0x1a73, // Entry 240 - 27F - 0x1a15, 0x1a21, 0x1a2d, 0x1a35, 0x1a35, 0x1a45, 0x1a51, 0x1a65, - 0x1a65, 0x1a6f, 0x1a97, 0x1a9f, 0x1ab9, 0x1ac1, 0x1ada, 0x1ada, - 0x1ada, 0x1af3, 0x1af3, 0x1af3, 0x1b10, 0x1b10, 0x1b10, 0x1b10, - 0x1b10, 0x1b10, 0x1b10, 0x1b29, 0x1b42, 0x1b4c, 0x1b4c, 0x1b4c, - 0x1b5a, 0x1b71, 0x1b8a, 0x1b9f, 0x1bb8, -} // Size: 1250 bytes - -const hiLangStr string = "" + // Size: 11573 bytes + 0x1a73, 0x1a7b, 0x1a81, 0x1a8d, 0x1a99, 0x1aa1, 0x1aa1, 0x1ab1, + 0x1abd, 0x1ad1, 0x1ad1, 0x1adb, 0x1b03, 0x1b0b, 0x1b25, 0x1b2d, + 0x1b46, 0x1b46, 0x1b46, 0x1b5f, 0x1b5f, 0x1b5f, 0x1b7c, 0x1b7c, + 0x1b7c, 0x1b7c, 0x1b7c, 0x1b7c, 0x1b7c, 0x1b95, 0x1bae, 0x1bb8, + 0x1bb8, 0x1bb8, 0x1bc6, 0x1bdd, 0x1bf6, 0x1c0b, 0x1c24, +} // Size: 1254 bytes + +const hiLangStr string = "" + // Size: 11700 bytes "अफ़ारअब्ख़ाज़ियनअवस्ताईअफ़्रीकीअकनअम्हेरीअर्गोनीअरबीअसमियाअवेरिकआयमाराअज" + "़रबैजानीबशख़िरबेलारूसीबुल्गारियाईबिस्लामाबाम्बाराबंगालीतिब्बतीब्रेटनबो" + "स्नियाईकातालानचेचनकमोरोकोर्सीकनक्रीचेकचर्च साल्विकचूवाशवेल्शडेनिशजर्मन" + "दिवेहीज़ोन्गखाईवेयूनानीअंग्रेज़ीएस्पेरेंतोस्पेनीएस्टोनियाईबास्कफ़ारसीफ" + - "ुलाहफ़िनिशफ़ीजीफ़ैरोइज़फ़्रेंचपश्चिमी फ़्रिसियाईआइरिशस्कॉटिश गाएलिकगैल" + - "िशियनगुआरानीगुजरातीमैंक्सहौसाहिब्रूहिन्दीहिरी मोटूक्रोएशियाईहैतियाईहंग" + - "ेरियाईआर्मेनियाईहरैरोईन्टरलिंगुआइंडोनेशियाईईन्टरलिंगुइईग्बोसिचुआन यीइन" + + "ुलाहफ़िनिशफिजियनफ़ैरोइज़फ़्रेंचपश्चिमी फ़्रिसियाईआइरिशस्कॉटिश गाएलिकगै" + + "लिशियनगुआरानीगुजरातीमैंक्सहौसाहिब्रूहिन्दीहिरी मोटूक्रोएशियाईहैतियाईहं" + + "गेरियाईआर्मेनियाईहरैरोइंटरलिंगुआइंडोनेशियाईईन्टरलिंगुइईग्बोसिचुआन यीइन" + "ुपियाक्इडौआइसलैंडिकइतालवीइनूकीटूत्जापानीजावानीज़जॉर्जियाईकोंगोकिकुयूक्" + "वान्यामाकज़ाख़कलालीसुतखमेरकन्नड़कोरियाईकनुरीकश्मीरीकुर्दिशकोमीकोर्निशक" + "िर्गीज़लैटिनलग्ज़मबर्गीगांडालिंबर्गिशलिंगालालाओलिथुआनियाईल्यूबा-कटांगा" + - "लातवियाईमालागासीमार्शलीज़माओरीमैसिडोनियाईमलयालममंगोलियाईमराठीमलयमाल्टी" + - "ज़बर्मीज़नाउरूउत्तरी देबेलनेपालीडोन्गाडचनॉर्वेजियाई नॉयनॉर्स्कनॉर्वेजि" + - "याई बोकमालदक्षिण देबेलनावाजोन्यानजाओसीटानओजिब्वाओरोमोउड़ियाओस्सेटिकपंज" + - "ाबीपालीपोलिशपश्तोपुर्तगालीक्वेचुआरोमान्शरुन्दीरोमानियाईरूसीकिन्यारवांड" + - "ासंस्कृतसार्दिनियनसिंधीनॉर्दन सामीसांगोसिंहलीस्लोवाकस्लोवेनियाईसामोनशो" + - "णासोमालीअल्बानियाईसर्बियाईस्वातीसेसोथोसुंडानीस्वीडिशस्वाहिलीतमिलतेलुगू" + - "ताजिकथाईतिग्रीन्यातुर्कमेनसेत्स्वानाटोंगनतुर्कीसोंगातातारताहितियनविघुर" + - "यूक्रेनियाईउर्दूउज़्बेकवेन्दावियतनामीवोलापुकवाल्लूनवोलोफ़ख़ोसायहूदीयोर" + - "ूबाज़ुआंगचीनीज़ुलूअचाइनीसअकोलीअदान्गमेअदिघेअफ्रिहिलीअग्हेमऐनूअक्कादीअल" + - "ेउतदक्षिणी अल्ताईपुरानी अंग्रेज़ीअंगिकाऐरेमेकमापूचेअराफाओअरावकअसुअस्तु" + - "रियनअवधीबलूचीबालिनीसबसाबेजाबेम्बाबेनापश्चिमी बलोचीभोजपुरीबिकोलबिनीसिक्" + - "सिकाब्रजबोडोबुरियातबगिनीसब्लिनकैड्डोकैरिबअत्समसिबुआनोशिगाचिब्चाछगाताईच" + - "ूकीसमारीचिनूक जारगॉनचोक्तौशिपेव्यानशेरोकीशेयेन्नसोरानी कुर्दिशकॉप्टिकक" + - "्रीमीन तुर्कीसेसेल्वा क्रिओल फ्रेंचकाशुबियनदाकोतादार्गवातैताडिलैवेयरस्" + - "लेवडोग्रिबदिन्काझार्माडोग्रीनिचला सॉर्बियनदुआलामध्यकालीन पुर्तगालीजोला" + - "-फोंईड्युलादज़ागाएम्बुएफिकप्राचीन मिस्रीएकाजुकएलामाइटमध्यकालीन अंग्रेज़ी" + - "इवोन्डोफैन्गफ़िलिपीनोफॉनमध्यकालीन फ़्रांसीसीपुरातन फ़्रांसीसीउत्तरी फ़" + - "्रीसियाईपूर्वी फ़्रीसियाईफ्रीयुलीयानगागागौज़गायोग्बायागीज़गिल्बरतीसमध्" + - "यकालीन हाइ जर्मनपुरातन हाइ जर्मनगाँडीगोरोन्तालोगॉथिकग्रेबोप्राचीन यूना" + - "नीस्विस जर्मनगुसीग्विच’इनहैडाहवाईहिलिगेननहिताइतह्मॉंगऊपरी सॉर्बियनहूपा" + - "इबानइबिबियोइलोकोइंगुशलोज्बाननगोंबामैकहैमेजुदेओ-पर्शियनजुदेओ-अरेबिककारा" + - "-कल्पककबाइलकाचिनज्जुकम्बाकावीकबार्डियनत्यापमैकोंडकाबुवेर्दियानुकोरोखासीख" + - "ोतानीसकोयरा चीनीकाकोकलेंजिनकिम्बन्दुकोमी-पर्मयाककोंकणीकोसरैनक्पेलकराचय" + - "-बल्कारकरेलियनकुरूखशम्बालाबफिआकोलोनियाईकुमीकक्यूतनाईलादीनोलांगिलाह्न्डाल" + - "ाम्बालेज़्घीयनलैकोटामोंगोलोज़ीउत्तरी लूरील्यूबा-लुलुआलुइसेनोलुन्डाल्यु" + - "ओलुशाईल्युईआमादुरीसमगहीमैथिलीमकासरमन्डिन्गोमसाईमोक्षमंदारमेन्डेमेरुमोर" + - "ीस्येनमध्यकालीन आइरिशमैखुवा-मीट्टोमेटामिकमैकमिनांग्काबाउमन्चुमणिपुरीमो" + - "हौकमोस्सीमुंडैंगएकाधिक भाषाएँक्रीकमिरांडीमारवाड़ीएर्ज़यामाज़न्देरानीna" + - "nनीपोलिटननामानिचला जर्मननेवाड़ीनियासनियुआनक्वासिओगैम्बूनोगाईपुराना नॉर्स" + - "एन्कोउत्तरी सोथोनुएरपारम्परिक नेवारीन्यामवेज़ीन्यानकोलन्योरोन्ज़ीमाओसे" + - "जओटोमान तुर्किशपंगासीनानपाह्लावीपाम्पान्गापापियामेन्टोपलोउआननाइजीरियाई" + - " पिडगिनपुरानी फारसीफोएनिशियनपोह्नपिएनप्रुशियाईपुरानी प्रोवेन्सलकिशराजस्थ" + - "ानीरापानुईरारोतोंगनरोम्बोरोमानीअरोमानियनरवासन्डावेयाकूतसामैरिटन अरैमिक" + - "सैम्बुरुसासाकसंतालीन्गाम्बेसैंगुसिसिलियनस्कॉट्सदक्षिणी कार्डिशसेनासेल्" + - "कपकोयराबोरो सेन्नीपुरानी आइरिशतैचेल्हितशैनसिदामोदक्षिण सामील्युल सामीइ" + - "नारी सामीस्कोल्ट सामीसोनिन्केसोग्डिएनस्रानान टॉन्गोसेरेरसाहोसुकुमासुसु" + - "सुमेरियनकोमोरियनक्लासिकल सिरिएकसिरिएकटिम्नेटेसोतेरेनोतेतुमटाइग्रेतिवतो" + - "केलाऊक्लिंगनत्लिंगिततामाशेकन्यासा टोन्गाटोक पिसिनतारोकोत्सिमीशियनतम्बू" + - "कातुवालुटासवाकतुवीनियनमध्य एटलस तमाज़ितउदमुर्तयुगैरिटिकउम्बुन्डुरूटवाई" + - "वॉटिकवुंजोवाल्सरवलामोवारैवाशोवॉल्पेरीकाल्मिकसोगायाओयापीसयांगबेनयेंबाकै" + - "ंटोनीज़ज़ेपोटेकब्लिसिम्बॉल्सज़ेनान्गामानक मोरक्कन तामाज़ाइटज़ूनीकोई भा" + - "षा सामग्री नहींज़ाज़ाआधुनिक मानक अरबीऑस्ट्रियाई जर्मनस्विस उच्च जर्मनऑ" + - "स्ट्रेलियाई अंग्रेज़ीकनाडाई अंग्रेज़ीब्रिटिश अंग्रेज़ीअमेरिकी अंग्रेज़" + - "ीलैटिन अमेरिकी स्पेनिशयूरोपीय स्पेनिशमैक्सिकन स्पेनिशकनाडाई फ़्रेंचस्व" + - "िस फ़्रेंचनिचली सैक्सनफ़्लेमिशब्राज़ीली पुर्तगालीयूरोपीय पुर्तगालीमोलड" + - "ावियनसेर्बो-क्रोएशियाईकांगो स्वाहिलीसरलीकृत चीनीपारंपरिक चीनी" - -var hiLangIdx = []uint16{ // 613 elements + "लातवियाईमालागासीमार्शलीज़माओरीमकदूनियाईमलयालममंगोलियाईमराठीमलयमाल्टीज़" + + "बर्मीज़नाउरूउत्तरी देबेलनेपालीडोन्गाडचनॉर्वेजियाई नॉयनॉर्स्कनॉर्वेजिया" + + "ई बोकमालदक्षिण देबेलनावाजोन्यानजाओसीटानओजिब्वाओरोमोउड़ियाओस्सेटिकपंजाब" + + "ीपालीपोलिशपश्तोपुर्तगालीक्वेचुआरोमान्शरुन्दीरोमानियाईरूसीकिन्यारवांडास" + + "ंस्कृतसार्दिनियनसिंधीनॉर्दन सामीसांगोसिंहलीस्लोवाकस्लोवेनियाईसामोनशोणा" + + "सोमालीअल्बानियाईसर्बियाईस्वातीदक्षिणी सेसेथोसुंडानीस्वीडिशस्वाहिलीतमिल" + + "तेलुगूताजिकथाईतिग्रीन्यातुर्कमेनसेत्स्वानाटोंगनतुर्कीसोंगातातारताहितिय" + + "नविघुरयूक्रेनियाईउर्दूउज़्बेकवेन्दावियतनामीवोलापुकवाल्लूनवोलोफ़ख़ोसायह" + + "ूदीयोरूबाज़ुआंगचीनीज़ुलूअचाइनीसअकोलीअदान्गमेअदिघेअफ्रिहिलीअग्हेमऐनूअक्" + + "कादीअलेउतदक्षिणी अल्ताईपुरानी अंग्रेज़ीअंगिकाऐरेमेकमापूचेअरापाहोअरावकअ" + + "सुअस्तुरियनअवधीबलूचीबालिनीसबसाबेजाबेम्बाबेनापश्चिमी बलोचीभोजपुरीबिकोलब" + + "िनीसिक्सिकाब्रजबोडोबुरियातबगिनीसब्लिनकैड्डोकैरिबअत्समसिबुआनोशिगाचिब्चा" + + "छगाताईचूकीसमारीचिनूक जारगॉनचोक्तौशिपेव्यानचेरोकीशेयेन्नसोरानी कुर्दिशक" + + "ॉप्टिकक्रीमीन तुर्कीसेसेल्वा क्रिओल फ्रेंचकाशुबियनदाकोतादार्गवातैताडिल" + + "ैवेयरस्लेवडोग्रिबदिन्काझार्माडोग्रीनिचला सॉर्बियनदुआलामध्यकालीन पुर्तग" + + "ालीजोला-फोंईड्युलादज़ागाएम्बुएफिकप्राचीन मिस्रीएकाजुकएलामाइटमध्यकालीन " + + "अंग्रेज़ीइवोन्डोफैन्गफ़िलिपीनोफॉनकेजन फ़्रेंचमध्यकालीन फ़्रांसीसीपुरात" + + "न फ़्रांसीसीउत्तरी फ़्रीसियाईपूर्वी फ़्रीसियाईफ्रीयुलीयानगागागौज़गायोग" + + "्बायागीज़गिल्बरतीसमध्यकालीन हाइ जर्मनपुरातन हाइ जर्मनगाँडीगोरोन्तालोगॉ" + + "थिकग्रेबोप्राचीन यूनानीस्विस जर्मनगुसीग्विचइनहैडाहवाईहिलिगेननहिताइतह्म" + + "ॉंगऊपरी सॉर्बियनहूपाइबानइबिबियोइलोकोइंगुशलोज्बाननगोंबामैकहैमेजुदेओ-पर्" + + "शियनजुदेओ-अरेबिककारा-कल्पककबाइलकाचिनज्जुकम्बाकावीकबार्डियनत्यापमैकोंडक" + + "ाबुवेर्दियानुकोरोखासीखोतानीसकोयरा चीनीकाकोकलेंजिनकिम्बन्दुकोमी-पर्मयाक" + + "कोंकणीकोसरैनक्पेलकराचय-बल्कारकरेलियनकुरूखशम्बालाबफिआकोलोनियाईकुमीकक्यू" + + "तनाईलादीनोलांगिलाह्न्डालाम्बालेज़्घीयनलैकोटामोंगोलुईज़ियाना क्रियोललोज" + + "़ीउत्तरी लूरील्यूबा-लुलुआलुइसेनोलुन्डाल्युओमिज़ोल्युईआमादुरीसमगहीमैथिल" + + "ीमकासरमन्डिन्गोमसाईमोक्षमंदारमेन्डेमेरुमोरीस्येनमध्यकालीन आइरिशमैखुवा-" + + "मीट्टोमेटामिकमैकमिनांग्काबाउमन्चुमणिपुरीमोहौकमोस्सीमुंडैंगएकाधिक भाषाए" + + "ँक्रीकमिरांडीमारवाड़ीएर्ज़यामाज़न्देरानीnanनीपोलिटननामानिचला जर्मननेवा" + + "ड़ीनियासनियुआनक्वासिओगैम्बूनोगाईपुराना नॉर्सएन्कोउत्तरी सोथोनुएरपारम्प" + + "रिक नेवारीन्यामवेज़ीन्यानकोलन्योरोन्ज़ीमाओसेजओटोमान तुर्किशपंगासीनानपा" + + "ह्लावीपाम्पान्गापापियामेन्टोपलोउआननाइजीरियाई पिडगिनपुरानी फारसीफोएनिशि" + + "यनपोह्नपिएनप्रुशियाईपुरानी प्रोवेन्सलकिशराजस्थानीरापानुईरारोतोंगनरोम्ब" + + "ोरोमानीअरोमानियनरवासन्डावेयाकूतसामैरिटन अरैमिकसैम्बुरुसासाकसंथालीन्गाम" + + "्बेसैंगुसिसिलियनस्कॉट्सदक्षिणी कार्डिशसेनासेल्कपकोयराबोरो सेन्नीपुरानी" + + " आइरिशतैचेल्हितशैनसिदामोदक्षिणी सामील्युल सामीइनारी सामीस्कोल्ट सामीसोनि" + + "न्केसोग्डिएनस्रानान टॉन्गोसेरेरसाहोसुकुमासुसुसुमेरियनकोमोरियनक्लासिकल " + + "सिरिएकसिरिएकटिम्नेटेसोतेरेनोतेतुमटाइग्रेतिवतोकेलाऊक्लिंगनत्लिंगिततामाश" + + "ेकन्यासा टोन्गाटोक पिसिनतारोकोत्सिमीशियनतम्बूकातुवालुटासवाकतुवीनियनमध्" + + "य एटलस तमाज़ितउदमुर्तयुगैरिटिकउम्बुन्डुअज्ञात भाषावाईवॉटिकवुंजोवाल्सरव" + + "लामोवारैवाशोवॉल्पेरीकाल्मिकसोगायाओयापीसयांगबेनयेंबाकैंटोनीज़ज़ेपोटेकब्" + + "लिसिम्बॉल्सज़ेनान्गामानक मोरक्कन तामाज़ाइटज़ूनीकोई भाषा सामग्री नहींज़" + + "ाज़ाआधुनिक मानक अरबीऑस्ट्रियाई जर्मनस्विस उच्च जर्मनऑस्ट्रेलियाई अंग्र" + + "ेज़ीकनाडाई अंग्रेज़ीब्रिटिश अंग्रेज़ीअमेरिकी अंग्रेज़ीलैटिन अमेरिकी स्" + + "पेनिशयूरोपीय स्पेनिशमैक्सिकन स्पेनिशकनाडाई फ़्रेंचस्विस फ़्रेंचनिचली स" + + "ैक्सनफ़्लेमिशब्राज़ीली पुर्तगालीयूरोपीय पुर्तगालीमोलडावियनसेर्बो-क्रोए" + + "शियाईकांगो स्वाहिलीसरलीकृत चीनीपारंपरिक चीनी" + +var hiLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x000f, 0x0030, 0x0045, 0x005d, 0x0066, 0x007b, 0x0090, 0x009c, 0x00ae, 0x00c0, 0x00d2, 0x00f0, 0x0102, 0x011a, 0x013b, 0x0153, 0x016b, 0x017d, 0x0192, 0x01a4, 0x01bf, 0x01d4, 0x01e0, 0x01ef, 0x0207, 0x0213, 0x021c, 0x023e, 0x024d, 0x025c, 0x026b, 0x027a, 0x028c, 0x02a4, 0x02ad, 0x02bf, 0x02da, 0x02f8, 0x030a, - 0x0328, 0x0337, 0x0349, 0x0358, 0x036a, 0x0379, 0x0391, 0x03a6, - 0x03da, 0x03e9, 0x0411, 0x0429, 0x043e, 0x0453, 0x0465, 0x0471, - 0x0483, 0x0495, 0x04ae, 0x04cc, 0x04e1, 0x04fc, 0x051a, 0x0529, + 0x0328, 0x0337, 0x0349, 0x0358, 0x036a, 0x037c, 0x0394, 0x03a9, + 0x03dd, 0x03ec, 0x0414, 0x042c, 0x0441, 0x0456, 0x0468, 0x0474, + 0x0486, 0x0498, 0x04b1, 0x04cf, 0x04e4, 0x04ff, 0x051d, 0x052c, // Entry 40 - 7F 0x054a, 0x056b, 0x058c, 0x059b, 0x05b4, 0x05cf, 0x05d8, 0x05f3, 0x0605, 0x0620, 0x0632, 0x064a, 0x0665, 0x0674, 0x0686, 0x06a4, 0x06b6, 0x06ce, 0x06da, 0x06ec, 0x0701, 0x0710, 0x0725, 0x073a, 0x0746, 0x075b, 0x0773, 0x0782, 0x07a3, 0x07b2, 0x07cd, 0x07e2, - 0x07eb, 0x0809, 0x082e, 0x0846, 0x085e, 0x0879, 0x0888, 0x08a9, - 0x08bb, 0x08d6, 0x08e5, 0x08ee, 0x0906, 0x091b, 0x092a, 0x094c, - 0x095e, 0x0970, 0x0976, 0x09b6, 0x09ea, 0x0a0c, 0x0a1e, 0x0a33, - 0x0a45, 0x0a5a, 0x0a69, 0x0a7b, 0x0a93, 0x0aa5, 0x0ab1, 0x0ac0, + 0x07eb, 0x0809, 0x082e, 0x0846, 0x085e, 0x0879, 0x0888, 0x08a3, + 0x08b5, 0x08d0, 0x08df, 0x08e8, 0x0900, 0x0915, 0x0924, 0x0946, + 0x0958, 0x096a, 0x0970, 0x09b0, 0x09e4, 0x0a06, 0x0a18, 0x0a2d, + 0x0a3f, 0x0a54, 0x0a63, 0x0a75, 0x0a8d, 0x0a9f, 0x0aab, 0x0aba, // Entry 80 - BF - 0x0acf, 0x0aea, 0x0aff, 0x0b14, 0x0b26, 0x0b41, 0x0b4d, 0x0b71, - 0x0b86, 0x0ba4, 0x0bb3, 0x0bd2, 0x0be1, 0x0bf3, 0x0c08, 0x0c29, - 0x0c38, 0x0c44, 0x0c56, 0x0c74, 0x0c8c, 0x0c9e, 0x0cb0, 0x0cc5, - 0x0cda, 0x0cf2, 0x0cfe, 0x0d10, 0x0d1f, 0x0d28, 0x0d46, 0x0d5e, - 0x0d7c, 0x0d8b, 0x0d9d, 0x0dac, 0x0dbb, 0x0dd3, 0x0de2, 0x0e03, - 0x0e12, 0x0e27, 0x0e39, 0x0e51, 0x0e66, 0x0e7b, 0x0e8d, 0x0e9c, - 0x0eab, 0x0ebd, 0x0ecf, 0x0edb, 0x0eea, 0x0eff, 0x0f0e, 0x0f26, - 0x0f35, 0x0f35, 0x0f50, 0x0f62, 0x0f6b, 0x0f80, 0x0f80, 0x0f8f, + 0x0ac9, 0x0ae4, 0x0af9, 0x0b0e, 0x0b20, 0x0b3b, 0x0b47, 0x0b6b, + 0x0b80, 0x0b9e, 0x0bad, 0x0bcc, 0x0bdb, 0x0bed, 0x0c02, 0x0c23, + 0x0c32, 0x0c3e, 0x0c50, 0x0c6e, 0x0c86, 0x0c98, 0x0cc0, 0x0cd5, + 0x0cea, 0x0d02, 0x0d0e, 0x0d20, 0x0d2f, 0x0d38, 0x0d56, 0x0d6e, + 0x0d8c, 0x0d9b, 0x0dad, 0x0dbc, 0x0dcb, 0x0de3, 0x0df2, 0x0e13, + 0x0e22, 0x0e37, 0x0e49, 0x0e61, 0x0e76, 0x0e8b, 0x0e9d, 0x0eac, + 0x0ebb, 0x0ecd, 0x0edf, 0x0eeb, 0x0efa, 0x0f0f, 0x0f1e, 0x0f36, + 0x0f45, 0x0f45, 0x0f60, 0x0f72, 0x0f7b, 0x0f90, 0x0f90, 0x0f9f, // Entry C0 - FF - 0x0f8f, 0x0fb7, 0x0fe5, 0x0ff7, 0x1009, 0x101b, 0x101b, 0x102d, - 0x102d, 0x102d, 0x103c, 0x103c, 0x103c, 0x1045, 0x1045, 0x1060, - 0x1060, 0x106c, 0x107b, 0x1090, 0x1090, 0x1099, 0x1099, 0x1099, - 0x1099, 0x10a5, 0x10b7, 0x10b7, 0x10c3, 0x10c3, 0x10c3, 0x10e8, - 0x10fd, 0x110c, 0x1118, 0x1118, 0x1118, 0x1130, 0x1130, 0x1130, - 0x113c, 0x113c, 0x1148, 0x1148, 0x115d, 0x116f, 0x116f, 0x117e, - 0x117e, 0x1190, 0x119f, 0x119f, 0x11ae, 0x11c3, 0x11cf, 0x11e1, - 0x11f3, 0x1202, 0x120e, 0x1230, 0x1242, 0x125d, 0x126f, 0x1284, + 0x0f9f, 0x0fc7, 0x0ff5, 0x1007, 0x1019, 0x102b, 0x102b, 0x1040, + 0x1040, 0x1040, 0x104f, 0x104f, 0x104f, 0x1058, 0x1058, 0x1073, + 0x1073, 0x107f, 0x108e, 0x10a3, 0x10a3, 0x10ac, 0x10ac, 0x10ac, + 0x10ac, 0x10b8, 0x10ca, 0x10ca, 0x10d6, 0x10d6, 0x10d6, 0x10fb, + 0x1110, 0x111f, 0x112b, 0x112b, 0x112b, 0x1143, 0x1143, 0x1143, + 0x114f, 0x114f, 0x115b, 0x115b, 0x1170, 0x1182, 0x1182, 0x1191, + 0x1191, 0x11a3, 0x11b2, 0x11b2, 0x11c1, 0x11c1, 0x11d6, 0x11e2, + 0x11f4, 0x1206, 0x1215, 0x1221, 0x1243, 0x1255, 0x1270, 0x1282, // Entry 100 - 13F - 0x12ac, 0x12c1, 0x12c1, 0x12e9, 0x1327, 0x133f, 0x1351, 0x1366, - 0x1372, 0x138a, 0x1399, 0x13ae, 0x13c0, 0x13d2, 0x13e4, 0x140c, - 0x140c, 0x141b, 0x1452, 0x146b, 0x147d, 0x148f, 0x149e, 0x14aa, - 0x14aa, 0x14d2, 0x14e4, 0x14f9, 0x1530, 0x1530, 0x1545, 0x1545, - 0x1554, 0x156f, 0x156f, 0x1578, 0x1578, 0x15b2, 0x15e3, 0x15e3, - 0x1614, 0x1645, 0x1666, 0x166c, 0x167e, 0x167e, 0x168a, 0x169c, - 0x169c, 0x16a8, 0x16c3, 0x16c3, 0x16f8, 0x1724, 0x1724, 0x1733, - 0x1751, 0x1760, 0x1772, 0x179a, 0x17b9, 0x17b9, 0x17b9, 0x17c5, + 0x1297, 0x12bf, 0x12d4, 0x12d4, 0x12fc, 0x133a, 0x1352, 0x1364, + 0x1379, 0x1385, 0x139d, 0x13ac, 0x13c1, 0x13d3, 0x13e5, 0x13f7, + 0x141f, 0x141f, 0x142e, 0x1465, 0x147e, 0x1490, 0x14a2, 0x14b1, + 0x14bd, 0x14bd, 0x14e5, 0x14f7, 0x150c, 0x1543, 0x1543, 0x1558, + 0x1558, 0x1567, 0x1582, 0x1582, 0x158b, 0x15ad, 0x15e7, 0x1618, + 0x1618, 0x1649, 0x167a, 0x169b, 0x16a1, 0x16b3, 0x16b3, 0x16bf, + 0x16d1, 0x16d1, 0x16dd, 0x16f8, 0x16f8, 0x172d, 0x1759, 0x1759, + 0x1768, 0x1786, 0x1795, 0x17a7, 0x17cf, 0x17ee, 0x17ee, 0x17ee, // Entry 140 - 17F - 0x17dd, 0x17e9, 0x17e9, 0x17f5, 0x17f5, 0x180d, 0x181f, 0x1831, - 0x1856, 0x1856, 0x1862, 0x186e, 0x1883, 0x1892, 0x18a1, 0x18a1, - 0x18a1, 0x18b6, 0x18c8, 0x18dd, 0x1902, 0x1924, 0x1924, 0x1940, - 0x194f, 0x195e, 0x196a, 0x1979, 0x1985, 0x19a0, 0x19a0, 0x19af, - 0x19c1, 0x19eb, 0x19eb, 0x19f7, 0x19f7, 0x1a03, 0x1a18, 0x1a34, - 0x1a34, 0x1a34, 0x1a40, 0x1a55, 0x1a70, 0x1a92, 0x1aa4, 0x1ab6, - 0x1ac5, 0x1ae7, 0x1ae7, 0x1ae7, 0x1afc, 0x1b0b, 0x1b20, 0x1b2c, - 0x1b47, 0x1b56, 0x1b6e, 0x1b80, 0x1b8f, 0x1ba7, 0x1bb9, 0x1bd4, + 0x17fa, 0x180f, 0x181b, 0x181b, 0x1827, 0x1827, 0x183f, 0x1851, + 0x1863, 0x1888, 0x1888, 0x1894, 0x18a0, 0x18b5, 0x18c4, 0x18d3, + 0x18d3, 0x18d3, 0x18e8, 0x18fa, 0x190f, 0x1934, 0x1956, 0x1956, + 0x1972, 0x1981, 0x1990, 0x199c, 0x19ab, 0x19b7, 0x19d2, 0x19d2, + 0x19e1, 0x19f3, 0x1a1d, 0x1a1d, 0x1a29, 0x1a29, 0x1a35, 0x1a4a, + 0x1a66, 0x1a66, 0x1a66, 0x1a72, 0x1a87, 0x1aa2, 0x1ac4, 0x1ad6, + 0x1ae8, 0x1af7, 0x1b19, 0x1b19, 0x1b19, 0x1b2e, 0x1b3d, 0x1b52, + 0x1b5e, 0x1b79, 0x1b88, 0x1ba0, 0x1bb2, 0x1bc1, 0x1bd9, 0x1beb, // Entry 180 - 1BF - 0x1bd4, 0x1bd4, 0x1bd4, 0x1be6, 0x1be6, 0x1bf5, 0x1c04, 0x1c23, - 0x1c23, 0x1c45, 0x1c5a, 0x1c6c, 0x1c7b, 0x1c8a, 0x1c9c, 0x1c9c, - 0x1c9c, 0x1cb1, 0x1cb1, 0x1cbd, 0x1ccf, 0x1cde, 0x1cf9, 0x1d05, - 0x1d05, 0x1d14, 0x1d23, 0x1d35, 0x1d41, 0x1d5c, 0x1d87, 0x1dac, - 0x1db8, 0x1dca, 0x1dee, 0x1dfd, 0x1e12, 0x1e21, 0x1e33, 0x1e33, - 0x1e48, 0x1e6d, 0x1e7c, 0x1e91, 0x1ea9, 0x1ea9, 0x1ea9, 0x1ebe, - 0x1ee2, 0x1ee5, 0x1efd, 0x1f09, 0x1f28, 0x1f3d, 0x1f4c, 0x1f5e, - 0x1f5e, 0x1f73, 0x1f85, 0x1f94, 0x1fb6, 0x1fb6, 0x1fc5, 0x1fe4, + 0x1c06, 0x1c06, 0x1c06, 0x1c06, 0x1c18, 0x1c18, 0x1c27, 0x1c5b, + 0x1c6a, 0x1c89, 0x1c89, 0x1cab, 0x1cc0, 0x1cd2, 0x1ce1, 0x1cf0, + 0x1d02, 0x1d02, 0x1d02, 0x1d17, 0x1d17, 0x1d23, 0x1d35, 0x1d44, + 0x1d5f, 0x1d6b, 0x1d6b, 0x1d7a, 0x1d89, 0x1d9b, 0x1da7, 0x1dc2, + 0x1ded, 0x1e12, 0x1e1e, 0x1e30, 0x1e54, 0x1e63, 0x1e78, 0x1e87, + 0x1e99, 0x1e99, 0x1eae, 0x1ed3, 0x1ee2, 0x1ef7, 0x1f0f, 0x1f0f, + 0x1f0f, 0x1f24, 0x1f48, 0x1f4b, 0x1f63, 0x1f6f, 0x1f8e, 0x1fa3, + 0x1fb2, 0x1fc4, 0x1fc4, 0x1fd9, 0x1feb, 0x1ffa, 0x201c, 0x201c, // Entry 1C0 - 1FF - 0x1ff0, 0x201e, 0x203c, 0x2054, 0x2066, 0x207b, 0x2087, 0x20af, - 0x20ca, 0x20e2, 0x2100, 0x2124, 0x2136, 0x2136, 0x2167, 0x2167, - 0x2167, 0x2189, 0x2189, 0x21a4, 0x21a4, 0x21a4, 0x21bf, 0x21da, - 0x220b, 0x2214, 0x2214, 0x222f, 0x2244, 0x225f, 0x225f, 0x225f, - 0x2271, 0x2283, 0x2283, 0x2283, 0x2283, 0x229e, 0x22a7, 0x22bc, - 0x22cb, 0x22f6, 0x230e, 0x231d, 0x232f, 0x232f, 0x2347, 0x2356, - 0x236e, 0x2383, 0x2383, 0x23ae, 0x23ae, 0x23ba, 0x23ba, 0x23cc, - 0x23fa, 0x241c, 0x241c, 0x2437, 0x2440, 0x2440, 0x2452, 0x2452, + 0x202b, 0x204a, 0x2056, 0x2084, 0x20a2, 0x20ba, 0x20cc, 0x20e1, + 0x20ed, 0x2115, 0x2130, 0x2148, 0x2166, 0x218a, 0x219c, 0x219c, + 0x21cd, 0x21cd, 0x21cd, 0x21ef, 0x21ef, 0x220a, 0x220a, 0x220a, + 0x2225, 0x2240, 0x2271, 0x227a, 0x227a, 0x2295, 0x22aa, 0x22c5, + 0x22c5, 0x22c5, 0x22d7, 0x22e9, 0x22e9, 0x22e9, 0x22e9, 0x2304, + 0x230d, 0x2322, 0x2331, 0x235c, 0x2374, 0x2383, 0x2395, 0x2395, + 0x23ad, 0x23bc, 0x23d4, 0x23e9, 0x23e9, 0x2414, 0x2414, 0x2420, + 0x2420, 0x2432, 0x2460, 0x2482, 0x2482, 0x249d, 0x24a6, 0x24a6, // Entry 200 - 23F - 0x2452, 0x2471, 0x248d, 0x24a9, 0x24cb, 0x24e3, 0x24fb, 0x2523, - 0x2532, 0x253e, 0x253e, 0x2550, 0x255c, 0x2574, 0x258c, 0x25b7, - 0x25c9, 0x25c9, 0x25c9, 0x25db, 0x25e7, 0x25f9, 0x2608, 0x261d, - 0x2626, 0x263b, 0x263b, 0x2650, 0x2668, 0x2668, 0x267d, 0x26a2, - 0x26bb, 0x26bb, 0x26cd, 0x26cd, 0x26eb, 0x26eb, 0x2700, 0x2712, - 0x2724, 0x273c, 0x276b, 0x2780, 0x279b, 0x27b6, 0x27bf, 0x27c8, - 0x27c8, 0x27c8, 0x27c8, 0x27c8, 0x27d7, 0x27d7, 0x27e6, 0x27f8, - 0x2807, 0x2813, 0x281f, 0x2837, 0x2837, 0x284c, 0x284c, 0x2858, + 0x24b8, 0x24b8, 0x24b8, 0x24da, 0x24f6, 0x2512, 0x2534, 0x254c, + 0x2564, 0x258c, 0x259b, 0x25a7, 0x25a7, 0x25b9, 0x25c5, 0x25dd, + 0x25f5, 0x2620, 0x2632, 0x2632, 0x2632, 0x2644, 0x2650, 0x2662, + 0x2671, 0x2686, 0x268f, 0x26a4, 0x26a4, 0x26b9, 0x26d1, 0x26d1, + 0x26e6, 0x270b, 0x2724, 0x2724, 0x2736, 0x2736, 0x2754, 0x2754, + 0x2769, 0x277b, 0x278d, 0x27a5, 0x27d4, 0x27e9, 0x2804, 0x281f, + 0x283e, 0x2847, 0x2847, 0x2847, 0x2847, 0x2847, 0x2856, 0x2856, + 0x2865, 0x2877, 0x2886, 0x2892, 0x289e, 0x28b6, 0x28b6, 0x28cb, // Entry 240 - 27F - 0x2861, 0x2870, 0x2885, 0x2894, 0x2894, 0x28af, 0x28c7, 0x28ee, - 0x28ee, 0x2909, 0x2947, 0x2956, 0x298f, 0x29a1, 0x29cd, 0x29cd, - 0x29fb, 0x2a27, 0x2a67, 0x2a95, 0x2ac6, 0x2af7, 0x2b32, 0x2b5d, - 0x2b8b, 0x2b8b, 0x2bb3, 0x2bd8, 0x2bfa, 0x2c12, 0x2c49, 0x2c7a, - 0x2c95, 0x2cc6, 0x2cee, 0x2d10, 0x2d35, -} // Size: 1250 bytes - -const hrLangStr string = "" + // Size: 4630 bytes + 0x28cb, 0x28d7, 0x28e0, 0x28ef, 0x2904, 0x2913, 0x2913, 0x292e, + 0x2946, 0x296d, 0x296d, 0x2988, 0x29c6, 0x29d5, 0x2a0e, 0x2a20, + 0x2a4c, 0x2a4c, 0x2a7a, 0x2aa6, 0x2ae6, 0x2b14, 0x2b45, 0x2b76, + 0x2bb1, 0x2bdc, 0x2c0a, 0x2c0a, 0x2c32, 0x2c57, 0x2c79, 0x2c91, + 0x2cc8, 0x2cf9, 0x2d14, 0x2d45, 0x2d6d, 0x2d8f, 0x2db4, +} // Size: 1254 bytes + +const hrLangStr string = "" + // Size: 4673 bytes "afarskiabhaskiavestičkiafrikaansakanskiamharskiaragonskiarapskiasamskiav" + "arskiajmarskiazerbajdžanskibaškirskibjeloruskibugarskibislamabambarabang" + "latibetskibretonskibosanskikatalonskičečenskichamorrokorzičkicreečeškicr" + @@ -18884,7 +20245,7 @@ const hrLangStr string = "" + // Size: 4630 bytes "sperantošpanjolskiestonskibaskijskiperzijskifulafinskifidžijskiferojskif" + "rancuskizapadnofrizijskiirskiškotski gaelskigalicijskigvaranskigudžarats" + "kimanskihausahebrejskihindskihiri motuhrvatskihaićanski kreolskimađarski" + - "armenskihererointerlinguaindonezijskiinterliguaigbosichuan yiinupiaqidoi" + + "armenskihererointerlinguaindonezijskiinterliguaigbosichuan jiinupiaqidoi" + "slandskitalijanskiinuktitutjapanskijavanskigruzijskikongokikuyukuanyamak" + "azaškikalaallisutkmerskikarnatačkikorejskikanurikašmirskikurdskikomikorn" + "skikirgiskilatinskiluksemburškigandalimburškilingalalaoskilitavskiluba-k" + @@ -18906,42 +20267,43 @@ const hrLangStr string = "" + // Size: 4630 bytes "anski kurdskikoptskikrimski turskisejšelski kreolskikašupskidakota jezik" + "dargwataitadelavarskislavedogribdinkazarmadogridonjolužičkidualasrednjon" + "izozemskijola-fonyidyuladazagaembuefikstaroegipatskiekajukelamitskisredn" + - "joengleskiewondofangfilipinskifonsrednjofrancuskistarofrancuskisjevernof" + - "rizijskiistočnofrizijskifurlanskigagagauskigan kineskigayogbayageezgilbe" + - "rtskisrednjogornjonjemačkistarovisokonjemačkigondigorontalogotskigrebost" + - "arogrčkišvicarski njemačkigusiigwich’inhaidihakka kineskihavajskihiligay" + - "nonskihetitskihmonggornjolužičkixiang kineskihupaibanibibioilokoingušets" + - "kilojbanngombamachamejudejsko-perzijskijudejsko-arapskikara-kalpakkabils" + - "kikačinskikajekambakawikabardinskikanembutyapmakondezelenortskikorokhasi" + - "khotanesekoyra chiinikakokalenjinkimbundukomi-permskikonkaninaurskikpell" + - "ekarachay-balkarkarelijskikuruškishambalabafiakelnskikumykkutenailadinol" + - "angilahndalambalezgiškilakotamongolozisjevernolurskiluba-lulualuisenolun" + - "daluolushailuyiamadurskimafamagahimaithilimakasarmandingomasajskimabamok" + - "shamandarmendemerumauricijski kreolskisrednjoirskimakhuwa-meettometa’mic" + - "macminangkabaumandžurskimanipurskimohokmossimundangviše jezikacreekmiran" + - "dskimarwarimyenemordvinskimazanderanskimin nan kineskinapolitanskinamado" + - "njonjemačkinewariniasniujskikwasiongiemboonnogajskistaronorveškin’kosjev" + - "erni sotskinuerskiklasični newarinyamwezinyankolenyoronzimaosageturski -" + - " otomanskipangasinanpahlavipampangapapiamentopalauanskinigerijski pidžin" + - "staroperzijskifeničkipohnpeianpruskistaroprovansalskikičerajasthanirapa " + - "nuirarotonškiromboromskiaromunskirwasandawejakutskisamarijanski aramejsk" + - "isamburusasaksantalskingambaysangusicilijskiškotskijužnokurdskisenecasen" + - "aselkupskikoyraboro sennistaroirskitachelhitshančadski arapskisidamojužn" + - "i samilule samiinari samiskolt samisoninkesogdiensranan tongoserersahosu" + - "kumasususumerskikomorskiklasični sirskisirijskitemnetesoterenotetumtigri" + - "škitivtokelaunskiklingonskitlingittamašečkinyasa tongatok pisintarokots" + - "imshiantumbukatuvaluanskitasawaqtuvinskitamašek (Srednji Atlas)udmurtski" + - "ugaritskiumbundukorijenskivaivotskivunjowalserskiwalamowaraywashowarlpir" + - "iwu kineskikalmyksogayaojapskiyangbenyembakantonskizapotečkiBlissovi sim" + - "bolizenagastandardni marokanski tamašekzunibez jezičnog sadržajazazakimo" + - "derni standardni arapskijužnoazerbajdžanskiaustrijski njemačkigornjonjem" + - "ački (švicarski)australski engleskikanadski engleskibritanski engleskiam" + - "erički engleskilatinoamerički španjolskieuropski španjolskimeksički špan" + - "jolskikanadski francuskišvicarski francuskidonjosaksonskiflamanskibrazil" + - "ski portugalskieuropski portugalskimoldavskisrpsko-hrvatskikongoanski sv" + - "ahilikineski (pojednostavljeni)kineski (tradicionalni)" - -var hrLangIdx = []uint16{ // 613 elements + "joengleskiewondofangfilipinskifonkajunski francuskisrednjofrancuskistaro" + + "francuskisjevernofrizijskiistočnofrizijskifurlanskigagagauskigan kineski" + + "gayogbayageezgilbertskisrednjogornjonjemačkistarovisokonjemačkigondigoro" + + "ntalogotskigrebostarogrčkišvicarski njemačkigusiigwich’inhaidihakka kine" + + "skihavajskihiligaynonskihetitskihmonggornjolužičkixiang kineskihupaibani" + + "bibioilokoingušetskilojbanngombamachamejudejsko-perzijskijudejsko-arapsk" + + "ikara-kalpakkabilskikačinskikajekambakawikabardinskikanembutyapmakondeze" + + "lenortskikorokhasikhotanesekoyra chiinikakokalenjinkimbundukomi-permskik" + + "onkaninaurskikpellekarachay-balkarkarelijskikuruškishambalabafiakelnskik" + + "umykkutenailadinolangilahndalambalezgiškilakotamongolujzijanski kreolski" + + "lozisjevernolurskiluba-lulualuisenolundaluolushailuyiamadurskimafamagahi" + + "maithilimakasarmandingomasajskimabamokshamandarmendemerumauricijski kreo" + + "lskisrednjoirskimakhuwa-meettometa’micmacminangkabaumandžurskimanipurski" + + "mohokmossimundangviše jezikacreekmirandskimarwarimyenemordvinskimazander" + + "anskimin nan kineskinapolitanskinamadonjonjemačkinewariniasniujskikwasio" + + "ngiemboonnogajskistaronorveškin’kosjeverni sotskinuerskiklasični newarin" + + "yamwezinyankolenyoronzimaosageturski - otomanskipangasinanpahlavipampang" + + "apapiamentopalauanskinigerijski pidžinstaroperzijskifeničkipohnpeianprus" + + "kistaroprovansalskikičerajasthanirapa nuirarotonškiromboromskiaromunskir" + + "wasandawejakutskisamarijanski aramejskisamburusasaksantalskingambaysangu" + + "sicilijskiškotskijužnokurdskisenecasenaselkupskikoyraboro sennistaroirsk" + + "itachelhitshančadski arapskisidamojužni samilule samiinari samiskolt sam" + + "isoninkesogdiensranan tongoserersahosukumasususumerskikomorskiklasični s" + + "irskisirijskitemnetesoterenotetumtigriškitivtokelaunskiklingonskitlingit" + + "tamašečkinyasa tongatok pisintarokotsimshiantumbukatuvaluanskitasawaqtuv" + + "inskitamašek (Srednji Atlas)udmurtskiugaritskiumbundunepoznati jezikvaiv" + + "otskivunjowalserskiwalamowaraywashowarlpiriwu kineskikalmyksogayaojapski" + + "yangbenyembakantonskizapotečkiBlissovi simbolizenagastandardni marokansk" + + "i tamašekzunibez jezičnog sadržajazazakimoderni standardni arapskijužnoa" + + "zerbajdžanskiaustrijski njemačkigornjonjemački (švicarski)australski eng" + + "leskikanadski engleskibritanski engleskiamerički engleskilatinoamerički " + + "španjolskieuropski španjolskimeksički španjolskikanadski francuskišvica" + + "rski francuskidonjosaksonskiflamanskibrazilski portugalskieuropski portu" + + "galskimoldavskisrpsko-hrvatskikongoanski svahilikineski (pojednostavljen" + + "i)kineski (tradicionalni)" + +var hrLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0007, 0x000e, 0x0018, 0x0021, 0x0028, 0x0030, 0x0039, 0x0040, 0x0047, 0x004e, 0x0056, 0x0065, 0x006f, 0x0079, 0x0081, @@ -18976,62 +20338,62 @@ var hrLangIdx = []uint16{ // 613 elements 0x069c, 0x06a0, 0x06a5, 0x06a5, 0x06a9, 0x06ae, 0x06ae, 0x06c1, 0x06c9, 0x06d1, 0x06d5, 0x06d5, 0x06d8, 0x06df, 0x06df, 0x06df, 0x06e3, 0x06e3, 0x06e7, 0x06ed, 0x06f6, 0x06fe, 0x0702, 0x0706, - 0x070d, 0x0712, 0x071a, 0x0720, 0x0725, 0x072c, 0x0731, 0x0738, - 0x0743, 0x074b, 0x0753, 0x0762, 0x0769, 0x0772, 0x077d, 0x0786, + 0x070d, 0x0712, 0x071a, 0x0720, 0x0725, 0x0725, 0x072c, 0x0731, + 0x0738, 0x0743, 0x074b, 0x0753, 0x0762, 0x0769, 0x0772, 0x077d, // Entry 100 - 13F - 0x0796, 0x079d, 0x079d, 0x07ab, 0x07be, 0x07c7, 0x07d3, 0x07d9, - 0x07de, 0x07e8, 0x07ed, 0x07f3, 0x07f8, 0x07fd, 0x0802, 0x0810, - 0x0810, 0x0815, 0x0826, 0x0830, 0x0835, 0x083b, 0x083f, 0x0843, - 0x0843, 0x0851, 0x0857, 0x0860, 0x086f, 0x086f, 0x0875, 0x0875, - 0x0879, 0x0883, 0x0883, 0x0886, 0x0886, 0x0896, 0x08a4, 0x08a4, - 0x08b5, 0x08c6, 0x08cf, 0x08d1, 0x08d9, 0x08e4, 0x08e8, 0x08ed, - 0x08ed, 0x08f1, 0x08fb, 0x08fb, 0x0911, 0x0925, 0x0925, 0x092a, - 0x0933, 0x0939, 0x093e, 0x0949, 0x095d, 0x095d, 0x095d, 0x0962, + 0x0786, 0x0796, 0x079d, 0x079d, 0x07ab, 0x07be, 0x07c7, 0x07d3, + 0x07d9, 0x07de, 0x07e8, 0x07ed, 0x07f3, 0x07f8, 0x07fd, 0x0802, + 0x0810, 0x0810, 0x0815, 0x0826, 0x0830, 0x0835, 0x083b, 0x083f, + 0x0843, 0x0843, 0x0851, 0x0857, 0x0860, 0x086f, 0x086f, 0x0875, + 0x0875, 0x0879, 0x0883, 0x0883, 0x0886, 0x0898, 0x08a8, 0x08b6, + 0x08b6, 0x08c7, 0x08d8, 0x08e1, 0x08e3, 0x08eb, 0x08f6, 0x08fa, + 0x08ff, 0x08ff, 0x0903, 0x090d, 0x090d, 0x0923, 0x0937, 0x0937, + 0x093c, 0x0945, 0x094b, 0x0950, 0x095b, 0x096f, 0x096f, 0x096f, // Entry 140 - 17F - 0x096c, 0x0971, 0x097e, 0x0986, 0x0986, 0x0993, 0x099b, 0x09a0, - 0x09af, 0x09bc, 0x09c0, 0x09c4, 0x09ca, 0x09cf, 0x09da, 0x09da, - 0x09da, 0x09e0, 0x09e6, 0x09ed, 0x09ff, 0x0a0f, 0x0a0f, 0x0a1a, - 0x0a22, 0x0a2b, 0x0a2f, 0x0a34, 0x0a38, 0x0a43, 0x0a4a, 0x0a4e, - 0x0a55, 0x0a60, 0x0a60, 0x0a64, 0x0a64, 0x0a69, 0x0a72, 0x0a7e, - 0x0a7e, 0x0a7e, 0x0a82, 0x0a8a, 0x0a92, 0x0a9e, 0x0aa5, 0x0aac, - 0x0ab2, 0x0ac1, 0x0ac1, 0x0ac1, 0x0acb, 0x0ad3, 0x0adb, 0x0ae0, - 0x0ae7, 0x0aec, 0x0af3, 0x0af9, 0x0afe, 0x0b04, 0x0b09, 0x0b12, + 0x0974, 0x097e, 0x0983, 0x0990, 0x0998, 0x0998, 0x09a5, 0x09ad, + 0x09b2, 0x09c1, 0x09ce, 0x09d2, 0x09d6, 0x09dc, 0x09e1, 0x09ec, + 0x09ec, 0x09ec, 0x09f2, 0x09f8, 0x09ff, 0x0a11, 0x0a21, 0x0a21, + 0x0a2c, 0x0a34, 0x0a3d, 0x0a41, 0x0a46, 0x0a4a, 0x0a55, 0x0a5c, + 0x0a60, 0x0a67, 0x0a72, 0x0a72, 0x0a76, 0x0a76, 0x0a7b, 0x0a84, + 0x0a90, 0x0a90, 0x0a90, 0x0a94, 0x0a9c, 0x0aa4, 0x0ab0, 0x0ab7, + 0x0abe, 0x0ac4, 0x0ad3, 0x0ad3, 0x0ad3, 0x0add, 0x0ae5, 0x0aed, + 0x0af2, 0x0af9, 0x0afe, 0x0b05, 0x0b0b, 0x0b10, 0x0b16, 0x0b1b, // Entry 180 - 1BF - 0x0b12, 0x0b12, 0x0b12, 0x0b18, 0x0b18, 0x0b1d, 0x0b21, 0x0b2f, - 0x0b2f, 0x0b39, 0x0b40, 0x0b45, 0x0b48, 0x0b4e, 0x0b53, 0x0b53, - 0x0b53, 0x0b5b, 0x0b5f, 0x0b65, 0x0b6d, 0x0b74, 0x0b7c, 0x0b84, - 0x0b88, 0x0b8e, 0x0b94, 0x0b99, 0x0b9d, 0x0bb1, 0x0bbd, 0x0bcb, - 0x0bd2, 0x0bd8, 0x0be3, 0x0bee, 0x0bf8, 0x0bfd, 0x0c02, 0x0c02, - 0x0c09, 0x0c15, 0x0c1a, 0x0c23, 0x0c2a, 0x0c2a, 0x0c2f, 0x0c39, - 0x0c46, 0x0c55, 0x0c61, 0x0c65, 0x0c73, 0x0c79, 0x0c7d, 0x0c84, - 0x0c84, 0x0c8a, 0x0c93, 0x0c9b, 0x0ca9, 0x0ca9, 0x0caf, 0x0cbe, + 0x0b24, 0x0b24, 0x0b24, 0x0b24, 0x0b2a, 0x0b2a, 0x0b2f, 0x0b43, + 0x0b47, 0x0b55, 0x0b55, 0x0b5f, 0x0b66, 0x0b6b, 0x0b6e, 0x0b74, + 0x0b79, 0x0b79, 0x0b79, 0x0b81, 0x0b85, 0x0b8b, 0x0b93, 0x0b9a, + 0x0ba2, 0x0baa, 0x0bae, 0x0bb4, 0x0bba, 0x0bbf, 0x0bc3, 0x0bd7, + 0x0be3, 0x0bf1, 0x0bf8, 0x0bfe, 0x0c09, 0x0c14, 0x0c1e, 0x0c23, + 0x0c28, 0x0c28, 0x0c2f, 0x0c3b, 0x0c40, 0x0c49, 0x0c50, 0x0c50, + 0x0c55, 0x0c5f, 0x0c6c, 0x0c7b, 0x0c87, 0x0c8b, 0x0c99, 0x0c9f, + 0x0ca3, 0x0caa, 0x0caa, 0x0cb0, 0x0cb9, 0x0cc1, 0x0ccf, 0x0ccf, // Entry 1C0 - 1FF - 0x0cc5, 0x0cd5, 0x0cdd, 0x0ce5, 0x0cea, 0x0cef, 0x0cf4, 0x0d06, - 0x0d10, 0x0d17, 0x0d1f, 0x0d29, 0x0d33, 0x0d33, 0x0d45, 0x0d45, - 0x0d45, 0x0d53, 0x0d53, 0x0d5b, 0x0d5b, 0x0d5b, 0x0d64, 0x0d6a, - 0x0d7b, 0x0d80, 0x0d80, 0x0d8a, 0x0d92, 0x0d9d, 0x0d9d, 0x0d9d, - 0x0da2, 0x0da8, 0x0da8, 0x0da8, 0x0da8, 0x0db1, 0x0db4, 0x0dbb, - 0x0dc3, 0x0dd9, 0x0de0, 0x0de5, 0x0dee, 0x0dee, 0x0df5, 0x0dfa, - 0x0e04, 0x0e0c, 0x0e0c, 0x0e19, 0x0e1f, 0x0e23, 0x0e23, 0x0e2c, - 0x0e3b, 0x0e45, 0x0e45, 0x0e4e, 0x0e52, 0x0e61, 0x0e67, 0x0e67, + 0x0cd5, 0x0ce4, 0x0ceb, 0x0cfb, 0x0d03, 0x0d0b, 0x0d10, 0x0d15, + 0x0d1a, 0x0d2c, 0x0d36, 0x0d3d, 0x0d45, 0x0d4f, 0x0d59, 0x0d59, + 0x0d6b, 0x0d6b, 0x0d6b, 0x0d79, 0x0d79, 0x0d81, 0x0d81, 0x0d81, + 0x0d8a, 0x0d90, 0x0da1, 0x0da6, 0x0da6, 0x0db0, 0x0db8, 0x0dc3, + 0x0dc3, 0x0dc3, 0x0dc8, 0x0dce, 0x0dce, 0x0dce, 0x0dce, 0x0dd7, + 0x0dda, 0x0de1, 0x0de9, 0x0dff, 0x0e06, 0x0e0b, 0x0e14, 0x0e14, + 0x0e1b, 0x0e20, 0x0e2a, 0x0e32, 0x0e32, 0x0e3f, 0x0e45, 0x0e49, + 0x0e49, 0x0e52, 0x0e61, 0x0e6b, 0x0e6b, 0x0e74, 0x0e78, 0x0e87, // Entry 200 - 23F - 0x0e67, 0x0e72, 0x0e7b, 0x0e85, 0x0e8f, 0x0e96, 0x0e9d, 0x0ea9, - 0x0eae, 0x0eb2, 0x0eb2, 0x0eb8, 0x0ebc, 0x0ec4, 0x0ecc, 0x0edc, - 0x0ee4, 0x0ee4, 0x0ee4, 0x0ee9, 0x0eed, 0x0ef3, 0x0ef8, 0x0f01, - 0x0f04, 0x0f0f, 0x0f0f, 0x0f19, 0x0f20, 0x0f20, 0x0f2b, 0x0f36, - 0x0f3f, 0x0f3f, 0x0f45, 0x0f45, 0x0f4e, 0x0f4e, 0x0f55, 0x0f60, - 0x0f67, 0x0f6f, 0x0f87, 0x0f90, 0x0f99, 0x0fa0, 0x0faa, 0x0fad, - 0x0fad, 0x0fad, 0x0fad, 0x0fad, 0x0fb3, 0x0fb3, 0x0fb8, 0x0fc1, - 0x0fc7, 0x0fcc, 0x0fd1, 0x0fd9, 0x0fe3, 0x0fe9, 0x0fe9, 0x0fed, + 0x0e8d, 0x0e8d, 0x0e8d, 0x0e98, 0x0ea1, 0x0eab, 0x0eb5, 0x0ebc, + 0x0ec3, 0x0ecf, 0x0ed4, 0x0ed8, 0x0ed8, 0x0ede, 0x0ee2, 0x0eea, + 0x0ef2, 0x0f02, 0x0f0a, 0x0f0a, 0x0f0a, 0x0f0f, 0x0f13, 0x0f19, + 0x0f1e, 0x0f27, 0x0f2a, 0x0f35, 0x0f35, 0x0f3f, 0x0f46, 0x0f46, + 0x0f51, 0x0f5c, 0x0f65, 0x0f65, 0x0f6b, 0x0f6b, 0x0f74, 0x0f74, + 0x0f7b, 0x0f86, 0x0f8d, 0x0f95, 0x0fad, 0x0fb6, 0x0fbf, 0x0fc6, + 0x0fd5, 0x0fd8, 0x0fd8, 0x0fd8, 0x0fd8, 0x0fd8, 0x0fde, 0x0fde, + 0x0fe3, 0x0fec, 0x0ff2, 0x0ff7, 0x0ffc, 0x1004, 0x100e, 0x1014, // Entry 240 - 27F - 0x0ff0, 0x0ff6, 0x0ffd, 0x1002, 0x1002, 0x100b, 0x1015, 0x1025, - 0x1025, 0x102b, 0x1049, 0x104d, 0x1064, 0x106a, 0x1084, 0x1099, - 0x10ad, 0x10c9, 0x10dc, 0x10ed, 0x10ff, 0x1111, 0x112c, 0x1140, - 0x1155, 0x1155, 0x1167, 0x117b, 0x1189, 0x1192, 0x11a7, 0x11bb, - 0x11c4, 0x11d3, 0x11e5, 0x11ff, 0x1216, -} // Size: 1250 bytes - -const huLangStr string = "" + // Size: 4071 bytes + 0x1014, 0x1018, 0x101b, 0x1021, 0x1028, 0x102d, 0x102d, 0x1036, + 0x1040, 0x1050, 0x1050, 0x1056, 0x1074, 0x1078, 0x108f, 0x1095, + 0x10af, 0x10c4, 0x10d8, 0x10f4, 0x1107, 0x1118, 0x112a, 0x113c, + 0x1157, 0x116b, 0x1180, 0x1180, 0x1192, 0x11a6, 0x11b4, 0x11bd, + 0x11d2, 0x11e6, 0x11ef, 0x11fe, 0x1210, 0x122a, 0x1241, +} // Size: 1254 bytes + +const huLangStr string = "" + // Size: 4112 bytes "afarabházavesztánafrikaansakanamharaaragonézarabasszámiavarajmaraazerbaj" + "dzsánibaskírbelaruszbolgárbislamabambarabanglatibetibretonbosnyákkatalán" + "csecsencsamorókorzikaikrícsehegyházi szlávcsuvaswalesidánnémetdivehidzso" + @@ -19042,7 +20404,7 @@ const huLangStr string = "" + // Size: 4071 bytes "úzkongokikujukuanyamakazahgrönlandikhmerkannadakoreaikanurikasmírikurdk" + "omikornikirgizlatinluxemburgigandalimburgilingalalaolitvánluba-katangale" + "ttmalgasmarshallimaorimacedónmalajálammongolmaráthimalájmáltaiburmainaur" + - "uiészaki ndebelenepálindongahollandnorvég (nynrosk)norvég (bokmál)déli n" + + "uiészaki ndebelenepálindongahollandnorvég (nynorsk)norvég (bokmål)déli n" + "debelenavahónyandzsaokszitánojibvaoromoodiaoszétpandzsábipalilengyelpast" + "uportugálkecsuarétorománkirundirománoroszkinyarvandaszanszkritszardíniai" + "szindhiészaki számiszangószingalézszlovákszlovénszamoaisonaszomálialbáns" + @@ -19056,38 +20418,38 @@ const huLangStr string = "" + // Size: 4071 bytes "zmaricsinuk zsargoncsoktócsipevécserokicsejenközép-ázsiai kurdkoptkrími " + "tatárszeszelva kreol franciakasubdakotadargvataitadelavárszlevidogribdin" + "kazarmadogrialsó-szorbdualaközép hollandjola-fonyidiuladazagaembuefikóeg" + - "yiptomiekadzsukelamitközép angolevondofangfilippínófonközép franciaófran" + - "ciaészaki frízkeleti frízfriuligagagauzgan kínaigajogbajageezikiribatikö" + - "zép felső németófelső németgondigorontalogótgrebóógörögsvájci németguszi" + - "igvicsinhaidahakka kínaihawaiiilokanohittitehmongfelső-szorbxiang kínaih" + - "upaibanibibioilokóinguslojbanngombamachamezsidó-perzsazsidó-arabkara-kal" + - "pakkabijekacsinjjukambakawikabardikanembutyapmakondekabuverdianukorokasz" + - "ikotanézkojra-csínikakókalendzsinkimbundukomi-permjákkonkanikosreikpelle" + - "karacsáj-balkárkarelaikuruhsambalabafiakölschkumükkutenailadinolangilahn" + - "dalambalezglakotamongóloziészaki luriluba-lulualuisenolundaluolushailuji" + - "amaduraimafamagahimaithilimakaszarmandingómasaimabamoksánmandarmendemeru" + - "mauritiusi kreolközép írmakua-metómeta’mikmakminangkabaumandzsumanipurim" + - "ohawkmoszimundangtöbbszörös nyelvekkríkmirandézmárvárimyeneerzjánymázand" + - "eránimin nan kínainápolyinamaalsónémetnevariniasniueingumbangiemboonnoga" + - "jóskandinávn’kóészaki szeszotónuerklasszikus newarinyamvézinyankolenyoró" + - "nzimaosageottomán törökpangaszinanpahlavipampanganpapiamentopalauinigéri" + - "ai pidginóperzsafőniciaipohnpeiporoszóprovánszikicseradzsasztánirapanuir" + - "arotongairomboromaarománrwoszandaveszahaszamaritánus arámiszamburusasaks" + - "zantálingambayszanguszicíliaiskótdél-kurdszenekaszenaszölkupkojra-szenni" + - "óírtachelhitsancsádi arabszidamódéli számilulei számiinari számikolta s" + - "zámiszoninkesogdienszranai tongószererszahószukumaszuszusumércomoreiklas" + - "szikus szírszírtemneteszóterenótetumtigrétivtokelauiklingontlingittamase" + - "knyugati nyaszatok pisintarokócsimsiánitumbukatuvaluszaváktuvaiközép-atl" + - "aszi tamazigtudmurtugaritiumbunduősivaivotjákvunjowalservalamovaraóvasów" + - "arlpiriwu kínaikalmükszogajaójapijangbenjembakantonizapotékBliss jelképr" + - "endszerzenagamarokkói tamazightzuninincs nyelvészeti tartalomzazamodern " + - "szabányos arabosztrák németsvájci felnémetausztrál angolkanadai angolbri" + - "t angolamerikai angollatin-amerikai spanyoleurópai spanyolspanyol (mexik" + - "ói)kanadai franciasvájci franciaalsószászflamandbrazíliai portugáleuróp" + - "ai portugálmoldvaiszerbhorvátkongói szuahéliegyszerűsített kínaihagyomán" + - "yos kínai" - -var huLangIdx = []uint16{ // 613 elements + "yiptomiekadzsukelamitközép angolevondofangfilippínófoncajun franciaközép" + + " franciaófranciaészaki frízkeleti frízfriuligagagauzgan kínaigajogbajage" + + "ezikiribatiközép felső németófelső németgondigorontalogótgrebóógörögsváj" + + "ci németgusziigvicsinhaidahakka kínaihawaiiilokanohittitehmongfelső-szor" + + "bxiang kínaihupaibanibibioilokóinguslojbanngombamachamezsidó-perzsazsidó" + + "-arabkara-kalpakkabijekacsinjjukambakawikabardikanembutyapmakondekabuver" + + "dianukorokaszikotanézkojra-csínikakókalendzsinkimbundukomi-permjákkonkan" + + "ikosreikpellekaracsáj-balkárkarelaikuruhsambalabafiakölschkumükkutenaila" + + "dinolangilahndalambalezglakotamongólouisianai kreolloziészaki luriluba-l" + + "ulualuisenolundaluolushailujiamaduraimafamagahimaithilimakaszarmandingóm" + + "asaimabamoksánmandarmendemerumauritiusi kreolközép írmakua-metómeta’mikm" + + "akminangkabaumandzsumanipurimohawkmoszimundangtöbbszörös nyelvekkríkmira" + + "ndézmárvárimyeneerzjánymázanderánimin nan kínainápolyinamaalsónémetnevar" + + "iniasniueingumbangiemboonnogajóskandinávn’kóészaki szeszotónuerklassziku" + + "s newarinyamvézinyankolenyorónzimaosageottomán törökpangaszinanpahlavipa" + + "mpanganpapiamentopalauinigériai pidginóperzsafőniciaipohnpeiporoszóprová" + + "nszikicseradzsasztánirapanuirarotongairomboromaarománrwoszandaveszahasza" + + "maritánus arámiszamburusasakszantálingambayszanguszicíliaiskótdél-kurdsz" + + "enekaszenaszölkupkojra-szennióírtachelhitsancsádi arabszidamódéli számil" + + "ulei számiinari számikolta számiszoninkesogdienszranai tongószererszahós" + + "zukumaszuszusumércomoreiklasszikus szírszírtemneteszóterenótetumtigrétiv" + + "tokelauiklingontlingittamaseknyugati nyaszatok pisintarokócsimsiánitumbu" + + "katuvaluszaváktuvaiközép-atlaszi tamazigtudmurtugaritiumbunduismeretlen " + + "nyelvvaivotjákvunjowalservalamovaraóvasówarlpiriwu kínaikalmükszogajaója" + + "pijangbenjembakantonizapotékBliss jelképrendszerzenagamarokkói tamazight" + + "zuninincs nyelvészeti tartalomzazamodern szabányos arabosztrák németsváj" + + "ci felnémetausztrál angolkanadai angolbrit angolamerikai angollatin-amer" + + "ikai spanyoleurópai spanyolspanyol (mexikói)kanadai franciasvájci franci" + + "aalsószászflamandbrazíliai portugáleurópai portugálmoldvaiszerbhorvátkon" + + "gói szuahéliegyszerűsített kínaihagyományos kínai" + +var huLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0004, 0x000a, 0x0013, 0x001c, 0x0020, 0x0026, 0x002f, 0x0033, 0x003b, 0x003f, 0x0045, 0x0053, 0x005a, 0x0062, 0x0069, @@ -19122,125 +20484,127 @@ var huLangIdx = []uint16{ // 613 elements 0x05a1, 0x05a7, 0x05ac, 0x05ac, 0x05b0, 0x05b5, 0x05b5, 0x05c4, 0x05cd, 0x05d2, 0x05d6, 0x05d6, 0x05d9, 0x05e0, 0x05e0, 0x05e0, 0x05e4, 0x05e4, 0x05e8, 0x05ed, 0x05f4, 0x05fc, 0x0600, 0x0604, - 0x060b, 0x0610, 0x0615, 0x061b, 0x0621, 0x0629, 0x062d, 0x0634, - 0x063d, 0x0644, 0x0648, 0x0656, 0x065d, 0x0665, 0x066c, 0x0672, + 0x060b, 0x0610, 0x0615, 0x061b, 0x0621, 0x0621, 0x0629, 0x062d, + 0x0634, 0x063d, 0x0644, 0x0648, 0x0656, 0x065d, 0x0665, 0x066c, // Entry 100 - 13F - 0x0686, 0x068a, 0x068a, 0x0697, 0x06ae, 0x06b3, 0x06b9, 0x06bf, - 0x06c4, 0x06cc, 0x06d2, 0x06d8, 0x06dd, 0x06e2, 0x06e7, 0x06f2, - 0x06f2, 0x06f7, 0x0706, 0x0710, 0x0715, 0x071b, 0x071f, 0x0723, - 0x0723, 0x072e, 0x0736, 0x073c, 0x0749, 0x0749, 0x074f, 0x074f, - 0x0753, 0x075e, 0x075e, 0x0761, 0x0761, 0x0770, 0x0779, 0x0779, - 0x0786, 0x0792, 0x0798, 0x079a, 0x07a0, 0x07aa, 0x07ae, 0x07b3, - 0x07b3, 0x07b7, 0x07c0, 0x07c0, 0x07d5, 0x07e4, 0x07e4, 0x07e9, - 0x07f2, 0x07f6, 0x07fc, 0x0805, 0x0813, 0x0813, 0x0813, 0x0819, + 0x0672, 0x0686, 0x068a, 0x068a, 0x0697, 0x06ae, 0x06b3, 0x06b9, + 0x06bf, 0x06c4, 0x06cc, 0x06d2, 0x06d8, 0x06dd, 0x06e2, 0x06e7, + 0x06f2, 0x06f2, 0x06f7, 0x0706, 0x0710, 0x0715, 0x071b, 0x071f, + 0x0723, 0x0723, 0x072e, 0x0736, 0x073c, 0x0749, 0x0749, 0x074f, + 0x074f, 0x0753, 0x075e, 0x075e, 0x0761, 0x076e, 0x077d, 0x0786, + 0x0786, 0x0793, 0x079f, 0x07a5, 0x07a7, 0x07ad, 0x07b7, 0x07bb, + 0x07c0, 0x07c0, 0x07c4, 0x07cd, 0x07cd, 0x07e2, 0x07f1, 0x07f1, + 0x07f6, 0x07ff, 0x0803, 0x0809, 0x0812, 0x0820, 0x0820, 0x0820, // Entry 140 - 17F - 0x0820, 0x0825, 0x0831, 0x0837, 0x0837, 0x083e, 0x0845, 0x084a, - 0x0856, 0x0862, 0x0866, 0x086a, 0x0870, 0x0876, 0x087b, 0x087b, - 0x087b, 0x0881, 0x0887, 0x088e, 0x089b, 0x08a6, 0x08a6, 0x08b1, - 0x08b7, 0x08bd, 0x08c0, 0x08c5, 0x08c9, 0x08d0, 0x08d7, 0x08db, - 0x08e2, 0x08ee, 0x08ee, 0x08f2, 0x08f2, 0x08f7, 0x08ff, 0x090b, - 0x090b, 0x090b, 0x0910, 0x091a, 0x0922, 0x092f, 0x0936, 0x093c, - 0x0942, 0x0953, 0x0953, 0x0953, 0x095a, 0x095f, 0x0966, 0x096b, - 0x0972, 0x0978, 0x097f, 0x0985, 0x098a, 0x0990, 0x0995, 0x0999, + 0x0826, 0x082d, 0x0832, 0x083e, 0x0844, 0x0844, 0x084b, 0x0852, + 0x0857, 0x0863, 0x086f, 0x0873, 0x0877, 0x087d, 0x0883, 0x0888, + 0x0888, 0x0888, 0x088e, 0x0894, 0x089b, 0x08a8, 0x08b3, 0x08b3, + 0x08be, 0x08c4, 0x08ca, 0x08cd, 0x08d2, 0x08d6, 0x08dd, 0x08e4, + 0x08e8, 0x08ef, 0x08fb, 0x08fb, 0x08ff, 0x08ff, 0x0904, 0x090c, + 0x0918, 0x0918, 0x0918, 0x091d, 0x0927, 0x092f, 0x093c, 0x0943, + 0x0949, 0x094f, 0x0960, 0x0960, 0x0960, 0x0967, 0x096c, 0x0973, + 0x0978, 0x097f, 0x0985, 0x098c, 0x0992, 0x0997, 0x099d, 0x09a2, // Entry 180 - 1BF - 0x0999, 0x0999, 0x0999, 0x099f, 0x099f, 0x09a5, 0x09a9, 0x09b5, - 0x09b5, 0x09bf, 0x09c6, 0x09cb, 0x09ce, 0x09d4, 0x09d9, 0x09d9, - 0x09d9, 0x09e0, 0x09e4, 0x09ea, 0x09f2, 0x09fa, 0x0a03, 0x0a08, - 0x0a0c, 0x0a13, 0x0a19, 0x0a1e, 0x0a22, 0x0a32, 0x0a3d, 0x0a48, - 0x0a4f, 0x0a55, 0x0a60, 0x0a67, 0x0a6f, 0x0a75, 0x0a7a, 0x0a7a, - 0x0a81, 0x0a96, 0x0a9b, 0x0aa4, 0x0aad, 0x0aad, 0x0ab2, 0x0aba, - 0x0ac7, 0x0ad5, 0x0add, 0x0ae1, 0x0aec, 0x0af2, 0x0af6, 0x0afb, - 0x0afb, 0x0b01, 0x0b0a, 0x0b0f, 0x0b1b, 0x0b1b, 0x0b22, 0x0b33, + 0x09a6, 0x09a6, 0x09a6, 0x09a6, 0x09ac, 0x09ac, 0x09b2, 0x09c2, + 0x09c6, 0x09d2, 0x09d2, 0x09dc, 0x09e3, 0x09e8, 0x09eb, 0x09f1, + 0x09f6, 0x09f6, 0x09f6, 0x09fd, 0x0a01, 0x0a07, 0x0a0f, 0x0a17, + 0x0a20, 0x0a25, 0x0a29, 0x0a30, 0x0a36, 0x0a3b, 0x0a3f, 0x0a4f, + 0x0a5a, 0x0a65, 0x0a6c, 0x0a72, 0x0a7d, 0x0a84, 0x0a8c, 0x0a92, + 0x0a97, 0x0a97, 0x0a9e, 0x0ab3, 0x0ab8, 0x0ac1, 0x0aca, 0x0aca, + 0x0acf, 0x0ad7, 0x0ae4, 0x0af2, 0x0afa, 0x0afe, 0x0b09, 0x0b0f, + 0x0b13, 0x0b18, 0x0b18, 0x0b1e, 0x0b27, 0x0b2c, 0x0b38, 0x0b38, // Entry 1C0 - 1FF - 0x0b37, 0x0b48, 0x0b51, 0x0b59, 0x0b5f, 0x0b64, 0x0b69, 0x0b79, - 0x0b84, 0x0b8b, 0x0b94, 0x0b9e, 0x0ba4, 0x0ba4, 0x0bb4, 0x0bb4, - 0x0bb4, 0x0bbc, 0x0bbc, 0x0bc5, 0x0bc5, 0x0bc5, 0x0bcc, 0x0bd2, - 0x0bde, 0x0be3, 0x0be3, 0x0bf0, 0x0bf7, 0x0c01, 0x0c01, 0x0c01, - 0x0c06, 0x0c0a, 0x0c0a, 0x0c0a, 0x0c0a, 0x0c11, 0x0c14, 0x0c1c, - 0x0c21, 0x0c35, 0x0c3d, 0x0c42, 0x0c4b, 0x0c4b, 0x0c52, 0x0c58, - 0x0c62, 0x0c67, 0x0c67, 0x0c70, 0x0c77, 0x0c7c, 0x0c7c, 0x0c84, - 0x0c90, 0x0c95, 0x0c95, 0x0c9e, 0x0ca1, 0x0cac, 0x0cb4, 0x0cb4, + 0x0b3f, 0x0b50, 0x0b54, 0x0b65, 0x0b6e, 0x0b76, 0x0b7c, 0x0b81, + 0x0b86, 0x0b96, 0x0ba1, 0x0ba8, 0x0bb1, 0x0bbb, 0x0bc1, 0x0bc1, + 0x0bd1, 0x0bd1, 0x0bd1, 0x0bd9, 0x0bd9, 0x0be2, 0x0be2, 0x0be2, + 0x0be9, 0x0bef, 0x0bfb, 0x0c00, 0x0c00, 0x0c0d, 0x0c14, 0x0c1e, + 0x0c1e, 0x0c1e, 0x0c23, 0x0c27, 0x0c27, 0x0c27, 0x0c27, 0x0c2e, + 0x0c31, 0x0c39, 0x0c3e, 0x0c52, 0x0c5a, 0x0c5f, 0x0c68, 0x0c68, + 0x0c6f, 0x0c75, 0x0c7f, 0x0c84, 0x0c84, 0x0c8d, 0x0c94, 0x0c99, + 0x0c99, 0x0ca1, 0x0cad, 0x0cb2, 0x0cb2, 0x0cbb, 0x0cbe, 0x0cc9, // Entry 200 - 23F - 0x0cb4, 0x0cc0, 0x0ccc, 0x0cd8, 0x0ce4, 0x0cec, 0x0cf3, 0x0d01, - 0x0d07, 0x0d0d, 0x0d0d, 0x0d14, 0x0d1a, 0x0d20, 0x0d27, 0x0d37, - 0x0d3c, 0x0d3c, 0x0d3c, 0x0d41, 0x0d47, 0x0d4e, 0x0d53, 0x0d59, - 0x0d5c, 0x0d64, 0x0d64, 0x0d6b, 0x0d72, 0x0d72, 0x0d79, 0x0d87, - 0x0d90, 0x0d90, 0x0d97, 0x0d97, 0x0da1, 0x0da1, 0x0da8, 0x0dae, - 0x0db5, 0x0dba, 0x0dd2, 0x0dd8, 0x0ddf, 0x0de6, 0x0dea, 0x0ded, - 0x0ded, 0x0ded, 0x0ded, 0x0ded, 0x0df4, 0x0df4, 0x0df9, 0x0dff, - 0x0e05, 0x0e0b, 0x0e10, 0x0e18, 0x0e21, 0x0e28, 0x0e28, 0x0e2d, + 0x0cd1, 0x0cd1, 0x0cd1, 0x0cdd, 0x0ce9, 0x0cf5, 0x0d01, 0x0d09, + 0x0d10, 0x0d1e, 0x0d24, 0x0d2a, 0x0d2a, 0x0d31, 0x0d37, 0x0d3d, + 0x0d44, 0x0d54, 0x0d59, 0x0d59, 0x0d59, 0x0d5e, 0x0d64, 0x0d6b, + 0x0d70, 0x0d76, 0x0d79, 0x0d81, 0x0d81, 0x0d88, 0x0d8f, 0x0d8f, + 0x0d96, 0x0da4, 0x0dad, 0x0dad, 0x0db4, 0x0db4, 0x0dbe, 0x0dbe, + 0x0dc5, 0x0dcb, 0x0dd2, 0x0dd7, 0x0def, 0x0df5, 0x0dfc, 0x0e03, + 0x0e13, 0x0e16, 0x0e16, 0x0e16, 0x0e16, 0x0e16, 0x0e1d, 0x0e1d, + 0x0e22, 0x0e28, 0x0e2e, 0x0e34, 0x0e39, 0x0e41, 0x0e4a, 0x0e51, // Entry 240 - 27F - 0x0e31, 0x0e35, 0x0e3c, 0x0e41, 0x0e41, 0x0e48, 0x0e50, 0x0e65, - 0x0e65, 0x0e6b, 0x0e7e, 0x0e82, 0x0e9d, 0x0ea1, 0x0eb7, 0x0eb7, - 0x0ec6, 0x0ed7, 0x0ee6, 0x0ef3, 0x0efd, 0x0f0b, 0x0f21, 0x0f31, - 0x0f43, 0x0f43, 0x0f52, 0x0f61, 0x0f6c, 0x0f73, 0x0f87, 0x0f99, - 0x0fa0, 0x0fac, 0x0fbd, 0x0fd4, 0x0fe7, -} // Size: 1250 bytes - -const hyLangStr string = "" + // Size: 8542 bytes + 0x0e51, 0x0e56, 0x0e5a, 0x0e5e, 0x0e65, 0x0e6a, 0x0e6a, 0x0e71, + 0x0e79, 0x0e8e, 0x0e8e, 0x0e94, 0x0ea7, 0x0eab, 0x0ec6, 0x0eca, + 0x0ee0, 0x0ee0, 0x0eef, 0x0f00, 0x0f0f, 0x0f1c, 0x0f26, 0x0f34, + 0x0f4a, 0x0f5a, 0x0f6c, 0x0f6c, 0x0f7b, 0x0f8a, 0x0f95, 0x0f9c, + 0x0fb0, 0x0fc2, 0x0fc9, 0x0fd5, 0x0fe6, 0x0ffd, 0x1010, +} // Size: 1254 bytes + +const hyLangStr string = "" + // Size: 8733 bytes "աֆարերենաբխազերենաֆրիկաանսաքանամհարերենարագոներենարաբերենասամերենավարերե" + "նայմարաադրբեջաներենբաշկիրերենբելառուսերենբուլղարերենբիսլամաբամբարաբենգա" + "լերենտիբեթերենբրետոներենբոսնիերենկատալաներենչեչեներենչամոռոկորսիկերենչե" + "խերենեկեղեցական սլավոներենչուվաշերենուելսերենդանիերենգերմաներենմալդիվեր" + "ենջոնգքհաէվեհունարենանգլերենէսպերանտոիսպաներենէստոներենբասկերենպարսկերե" + - "նֆուլահֆիններենֆիջիերենֆարյորերենֆրանսերենարևմտաֆրիզերենիռլանդերենգաելե" + - "րենգալիսերենգուարանիգուջարաթիմեներենհաուսաեբրայերենհինդիխորվաթերենխառնա" + - "կերտ հայիթերենհունգարերենհայերենհերերոինդոնեզերենիգբոսիչուանիդոիսլանդեր" + - "ենիտալերենինուկտիտուտճապոներենճավայերենվրացերենկիկույուկուանյամաղազախեր" + - "ենկալաալիսուտքմերերենկաննադակորեերենկանուրիքաշմիրերենքրդերենկոմիերենկոռ" + - "ներենղրղզերենլատիներենլյուքսեմբուրգերենգանդալիմբուրգերենլինգալալաոսերեն" + - "լիտվերենլուբա-կատանգալատվիերենմալգաշերենմարշալերենմաորիմակեդոներենմալայ" + - "ալամմոնղոլերենմարաթիմալայերենմալթայերենբիրմայերեննաուրուհյուսիսային նդե" + - "բելենեպալերեննդոնգահոլանդերեննորվեգերեն նյունորսկնորվեգերեն բուկմոլհարա" + - "վային նդեբելենավախոնյանջաօքսիտաներենօջիբվաօրոմոօրիյաօսերենփենջաբերենպալ" + - "իլեհերենփուշթուպորտուգալերենկեչուառոմանշերենռունդիռումիներենռուսերենկին" + - "յառուանդասանսկրիտսարդիներենսինդհիհյուսիսային սաամիսանգոսինհալերենսլովակ" + - "երենսլովեներենշոնասոմալիերենալբաներենսերբերենսվազերենհարավային սոթոսուն" + - "դաներենշվեդերենսուահիլիթամիլերենթելուգուտաջիկերենթայերենտիգրինյաթուրքմե" + - "ներենցվանատոնգերենթուրքերենցոնգաթաթարերենթաիտերենույղուրերենուկրաիներեն" + - "ուրդուուզբեկերենվենդավիետնամերենվոլապյուկվալոներենվոլոֆքոսաիդիշյորուբաժ" + - "ուանգչինարենզուլուերենաչեհերենաչոլիադանգմերենադիղերենթունիսական արաբերե" + - "նաղեմայներենաքքադերենալեութերենհարավային ալթայերենհին անգլերենանգիկաարա" + - "մեերենմապուչիարապահոալժիրական արաբերենեգիպտական արաբերենասուամերիկյան ժ" + - "եստերի լեզուաստուրերենավադհիբալիերենբասաաբեմբաբենաարևմտաբելուջիերենբինի" + - "սիկսիկաբոդոաքուզբուգիերենբիլինկաբուաներենչիգատրուկերենմարիչոկտոչերոկիշա" + - "յենսորանի քրդերենղպտերենղրիմյան թուրքերենդակոտադարգիներենթաիթադոգրիբզար" + - "մաստորին սորբերենդուալաջոլա-ֆոնյիդազագաէմբուէֆիկհին եգիպտերենէկաջուկէվո" + - "նդոֆիլիպիներենտորնադելեն ֆիններենֆոնհին ֆրանսերենարևելաֆրիզերենֆրիուլիե" + - "րենգայերենգագաուզերենզրադաշտական դարիգեեզկիրիբատիհին վերին գերմաներենգո" + - "րոնտալոգոթերենհին հունարենշվեյցարական գերմաներենվայուուգուսիգվիչինհավայ" + - "իերենհիլիգայնոնհմոնգվերին սորբերենսյան չինարենհուպաիբաներենիբիբիոիլոկեր" + - "ենինգուշերենլոժբաննգոմբամաշամեկաբիլերենկաչիներենջյուկամբատիապմակոնդեկաբ" + - "ուվերդյանուկորոկխասիկոյրա չինիկակոկալենջինկիմբունդուպերմյակ կոմիերենկոն" + - "կանիկպելլեերենկարաչայ-բալկարերենկարելերենկուրուխշամբալաբաֆիաքյոլներենկո" + - "ւմիկերենլադինոլանգիլեզգիերենլակոտալոզիհյուսիսային լուրիերենլուբա-լուլու" + - "ալունդալուոմիզոլույամադուրերենմագահիմայթիլիմակասարերենմասաիմոկշայերենմե" + - "նդեմերումորիսյենմաքուա-մետտոմետամիկմակմինանգկաբաումանիպուրիմոհավքմոսսիա" + - "րևմտամարիերենմունդանգբազմալեզուկրիկմիրանդերենէրզյամազանդարաներեննեապոլե" + - "րեննամանեվարերեննիասերեննիուերենկվասիոնգիեմբուննոգայերենհին նորվեգերենն" + - "կոհյուսիսային սոթոնուերնյանկոլեօսեյջօսմաներենպանգասինաներենպահլավերենպա" + - "մպանգաերենպապյամենտուպալաուերենպիկարդերենփենսիլվանական գերմաներենպլատագ" + - "երմաներենհին պարսկերենպալատինյան գերմաներենփյունիկերենպիեմոնտերենպոնտեր" + - "ենպոնպեերենպրուսերենհին պրովանսերենքիչեռաջաստաներենռապանուիռարոտոնգաներ" + - "ենռոմանիոլերենռիֆերենռոմբոռոմաներենռոտումանռուսիներենռովիանաարոմաներենռ" + - "վասանդավեյակուտերենսամբուրուսանտալինգամբայսանգուսիցիլիերենշոտլանդերենհա" + - "րավային քրդերենսենակոյրաբորո սեննիհին իռլանդերենտաշելհիթշաներենհարավայի" + - "ն սաամերենլուլե սաամիինարի սաամերենսկոլտ սաամերենսոնինկեսրանան տոնգոսահ" + - "ոերենսուկումակոմորերենասորերենտուլուտեմնետեսոտերենոտետումտիգրետիվերենտո" + - "կելաուցախուրկլինգոնտլինգիտթալիշերենտամաշեկտոկ փիսինտուրոյոտարոկոցակոներ" + - "ենցիմշյանտումբուկաթուվալուերենտասավաքտուվերենկենտրոնատլասյան թամազիղտու" + - "դմուրտերենուգարիտերենումբունդուռուտերենվաիվենետերենվեպսերենարևմտաֆլաման" + - "դերենվոդերենվորովունջովալսերենվոլայտավարայերենվաշովարլպիրիվու չինարենկա" + - "լմիկերենսոգայաոյափերենյանգբենեմբականտոներենսապոտեկերենզեյլանդերենզենագա" + - "ընդհանուր մարոկյան թամազիղտզունիերենառանց լեզվային բովանդակությանզազաեր" + - "ենարդի ընդհանուր արաբերենավստրիական գերմաներենշվեյցարական վերին գերմանե" + - "րենավստրալիական անգլերենկանադական անգլերենբրիտանական անգլերենամերիկյան " + - "անգլերենլատինամերիկյան իսպաներենեվրոպական իսպաներենմեքսիկական իսպաներեն" + - "կանադական ֆրանսերենշվեյցարական ֆրանսերենստորին սաքսոներենֆլամանդերենբրա" + - "զիլական պորտուգալերենեվրոպական պորտուգալերենմոլդովերենսերբա-խորվաթերենկ" + - "ոնգոյի սուահիլիպարզեցված չինարենավանդական չինարեն" - -var hyLangIdx = []uint16{ // 613 elements + "նֆուլահֆիններենֆիջիերենֆարյորերենֆրանսերենարևմտաֆրիզերենիռլանդերենշոտլա" + + "նդական գաելերենգալիսերենգուարանիգուջարաթիմեներենհաուսաեբրայերենհինդիխոր" + + "վաթերենխառնակերտ հայիթերենհունգարերենհայերենհերերոինտերլինգուաինդոնեզեր" + + "ենինտերլինգուեիգբոսիչուանիդոիսլանդերենիտալերենինուկտիտուտճապոներենճավայ" + + "երենվրացերենկիկույուկուանյամաղազախերենկալաալիսուտքմերերենկաննադակորեերե" + + "նկանուրիքաշմիրերենքրդերենկոմիերենկոռներենղրղզերենլատիներենլյուքսեմբուրգ" + + "երենգանդալիմբուրգերենլինգալալաոսերենլիտվերենլուբա-կատանգալատվիերենմալգա" + + "շերենմարշալերենմաորիմակեդոներենմալայալամմոնղոլերենմարաթիմալայերենմալթայ" + + "երենբիրմայերեննաուրուհյուսիսային նդեբելենեպալերեննդոնգահոլանդերեննոր նո" + + "րվեգերենգրքային նորվեգերենհարավային նդեբելենավախոնյանջաօքսիտաներենօջիբվ" + + "աօրոմոօրիյաօսերենփենջաբերենպալիլեհերենփուշթուպորտուգալերենկեչուառոմանշե" + + "րենռունդիռումիներենռուսերենկինյառուանդասանսկրիտսարդիներենսինդհիհյուսիսա" + + "յին սաամիսանգոսինհալերենսլովակերենսլովեներենսամոաերենշոնասոմալիերենալբա" + + "ներենսերբերենսվազերենհարավային սոթոսունդաներենշվեդերենսուահիլիթամիլերեն" + + "թելուգուտաջիկերենթայերենտիգրինյաթուրքմեներենցվանատոնգերենթուրքերենցոնգա" + + "թաթարերենթաիտերենույղուրերենուկրաիներենուրդուուզբեկերենվենդավիետնամերեն" + + "վոլապյուկվալոներենվոլոֆքոսաիդիշյորուբաժուանգչինարենզուլուերենաչեհերենաչ" + + "ոլիադանգմերենադիղերենթունիսական արաբերենաղեմայներենաքքադերենալեութերենհ" + + "արավային ալթայերենհին անգլերենանգիկաարամեերենմապուչիարապահոալժիրական ար" + + "աբերենեգիպտական արաբերենասուամերիկյան ժեստերի լեզուաստուրերենավադհիբալի" + + "երենբասաաբեմբաբենաարևմտաբելուջիերենբհոպուրիբինիսիկսիկաբոդոաքուզբուգիերե" + + "նբիլինսեբուերենչիգատրուկերենմարիչոկտոչերոկիշայենսորանի քրդերենղպտերենղր" + + "իմյան թուրքերենսեյշելյան խառնակերտ ֆրանսերենդակոտադարգիներենթաիթադոգրիբ" + + "զարմաստորին սորբերենդուալաջոլա-ֆոնյիդազագաէմբուէֆիկհին եգիպտերենէկաջուկ" + + "էվոնդոֆիլիպիներենտորնադելեն ֆիններենֆոնհին ֆրանսերենարևելաֆրիզերենֆրիու" + + "լիերենգայերենգագաուզերենզրադաշտական դարիգեեզկիրիբատիհին վերին գերմաներե" + + "նգորոնտալոգոթերենհին հունարենշվեյցարական գերմաներենվայուուգուսիգվիչինհա" + + "վայիերենհիլիգայնոնհմոնգվերին սորբերենսյան չինարենհուպաիբաներենիբիբիոիլո" + + "կերենինգուշերենլոժբաննգոմբամաշամեկաբիլերենկաչիներենջյուկամբակաբարդերենտ" + + "իապմակոնդեկաբուվերդերենկորոքասիերենկոյրա չինիկակոկալենջինկիմբունդուպերմ" + + "յակ կոմիերենկոնկանիկպելլեերենկարաչայ-բալկարերենկարելերենկուրուխշամբալաբ" + + "աֆիաքյոլներենկումիկերենլադինոլանգիլեզգիերենլակոտալոզիհյուսիսային լուրիե" + + "րենլուբա-լուլուալունդալուոմիզոլույամադուրերենմագահիմայթիլիմակասարերենմա" + + "սաիմոկշայերենմենդեմերումորիսյենմաքուա-մետտոմետամիկմակմինանգկաբաումանիպո" + + "ւրիմոհավքմոսսիարևմտամարիերենմունդանգբազմալեզուկրիկմիրանդերենէրզյամազանդ" + + "արաներեննեապոլերեննամանեվարերեննիասերեննիուերենկվասիոնգիեմբուննոգայերեն" + + "հին նորվեգերեննկոհյուսիսային սոթոնուերնյանկոլեօսեյջօսմաներենպանգասինանե" + + "րենպահլավերենպամպանգաերենպապյամենտոպալաուերենպիկարդերեննիգերյան կրեոլեր" + + "ենփենսիլվանական գերմաներենպլատագերմաներենհին պարսկերենպալատինյան գերման" + + "երենփյունիկերենպիեմոնտերենպոնտերենպոնպեերենպրուսերենհին պրովանսերենքիչե" + + "ռաջաստաներենռապանուիռարոտոնգաներենռոմանիոլերենռիֆերենռոմբոռոմաներենռոտո" + + "ւմանռուսիներենռովիանաարոմաներենռվասանդավեյակուտերենսամբուրուսանտալինգամ" + + "բայսանգուսիցիլիերենշոտլանդերենհարավային քրդերենսենակոյրաբորո սեննիհին ի" + + "ռլանդերենտաշելհիթշաներենհարավային սաամիլուլե սաամիինարի սաամիսկոլտ սաամ" + + "իսոնինկեսրանան տոնգոսահոերենսուկումակոմորերենասորերենտուլուտեմնետեսոտեր" + + "ենոտետումտիգրետիվերենտոկելաուցախուրկլինգոնտլինգիտթալիշերենտամաշեկտոկ փի" + + "սինտուրոյոտարոկոցակոներենցիմշյանտումբուկաթուվալուերենտասավաքտուվերենկեն" + + "տրոնատլասյան թամազիղտուդմուրտերենուգարիտերենումբունդուանհայտ լեզուվաիվե" + + "նետերենվեպսերենարևմտաֆլամանդերենվոդերենվորովունջովալսերենվոլայտավարայեր" + + "ենվաշովարլպիրիվու չինարենկալմիկերենսոգայաոյափերենյանգբենեմբականտոներենս" + + "ապոտեկերենզեյլանդերենզենագաընդհանուր մարոկյան թամազիղտզունիերենառանց լե" + + "զվային բովանդակությանզազաերենարդի ընդհանուր արաբերենավստրիական գերմաներ" + + "ենշվեյցարական վերին գերմաներենավստրալիական անգլերենկանադական անգլերենբր" + + "իտանական անգլերենամերիկյան անգլերենլատինամերիկյան իսպաներենեվրոպական իս" + + "պաներենմեքսիկական իսպաներենկանադական ֆրանսերենշվեյցարական ֆրանսերենստոր" + + "ին սաքսոներենֆլամանդերենբրազիլական պորտուգալերենեվրոպական պորտուգալերեն" + + "մոլդովերենսերբա-խորվաթերենկոնգոյի սուահիլիպարզեցված չինարենավանդական չի" + + "նարեն" + +var hyLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0010, 0x0022, 0x0022, 0x0034, 0x003c, 0x004e, 0x0062, 0x0072, 0x0082, 0x0092, 0x009e, 0x00b6, 0x00ca, 0x00e2, 0x00f8, @@ -19248,89 +20612,89 @@ var hyLangIdx = []uint16{ // 613 elements 0x0194, 0x01a8, 0x01a8, 0x01b6, 0x01df, 0x01f3, 0x0205, 0x0215, 0x0229, 0x023d, 0x024b, 0x0251, 0x0261, 0x0271, 0x0283, 0x0295, 0x02a7, 0x02b7, 0x02c9, 0x02d5, 0x02e5, 0x02f5, 0x0309, 0x031b, - 0x0337, 0x034b, 0x035b, 0x036d, 0x037d, 0x038f, 0x039d, 0x03a9, - 0x03bb, 0x03c5, 0x03c5, 0x03d9, 0x03fe, 0x0414, 0x0422, 0x042e, + 0x0337, 0x034b, 0x0372, 0x0384, 0x0394, 0x03a6, 0x03b4, 0x03c0, + 0x03d2, 0x03dc, 0x03dc, 0x03f0, 0x0415, 0x042b, 0x0439, 0x0445, // Entry 40 - 7F - 0x042e, 0x0444, 0x0444, 0x044c, 0x045a, 0x045a, 0x0460, 0x0474, - 0x0484, 0x049a, 0x04ac, 0x04be, 0x04ce, 0x04ce, 0x04de, 0x04f0, - 0x0502, 0x0518, 0x0528, 0x0536, 0x0546, 0x0554, 0x0568, 0x0576, - 0x0586, 0x0596, 0x05a6, 0x05b8, 0x05da, 0x05e4, 0x05fc, 0x060a, - 0x061a, 0x062a, 0x0643, 0x0655, 0x0669, 0x067d, 0x0687, 0x069d, - 0x06af, 0x06c3, 0x06cf, 0x06e1, 0x06f5, 0x0709, 0x0717, 0x073c, - 0x074e, 0x075a, 0x076e, 0x0795, 0x07b8, 0x07d9, 0x07e5, 0x07f1, - 0x0807, 0x0813, 0x081d, 0x0827, 0x0833, 0x0847, 0x084f, 0x085d, + 0x045d, 0x0473, 0x048b, 0x0493, 0x04a1, 0x04a1, 0x04a7, 0x04bb, + 0x04cb, 0x04e1, 0x04f3, 0x0505, 0x0515, 0x0515, 0x0525, 0x0537, + 0x0549, 0x055f, 0x056f, 0x057d, 0x058d, 0x059b, 0x05af, 0x05bd, + 0x05cd, 0x05dd, 0x05ed, 0x05ff, 0x0621, 0x062b, 0x0643, 0x0651, + 0x0661, 0x0671, 0x068a, 0x069c, 0x06b0, 0x06c4, 0x06ce, 0x06e4, + 0x06f6, 0x070a, 0x0716, 0x0728, 0x073c, 0x0750, 0x075e, 0x0783, + 0x0795, 0x07a1, 0x07b5, 0x07d0, 0x07f3, 0x0814, 0x0820, 0x082c, + 0x0842, 0x084e, 0x0858, 0x0862, 0x086e, 0x0882, 0x088a, 0x0898, // Entry 80 - BF - 0x086b, 0x0885, 0x0891, 0x08a5, 0x08b1, 0x08c5, 0x08d5, 0x08ed, - 0x08fd, 0x0911, 0x091d, 0x093e, 0x0948, 0x095c, 0x0970, 0x0984, - 0x0984, 0x098c, 0x09a0, 0x09b2, 0x09c2, 0x09d2, 0x09ed, 0x0a03, - 0x0a13, 0x0a23, 0x0a35, 0x0a45, 0x0a57, 0x0a65, 0x0a75, 0x0a8d, - 0x0a97, 0x0aa7, 0x0ab9, 0x0ac3, 0x0ad5, 0x0ae5, 0x0afb, 0x0b11, - 0x0b1d, 0x0b31, 0x0b3b, 0x0b51, 0x0b63, 0x0b75, 0x0b7f, 0x0b87, - 0x0b8f, 0x0b9d, 0x0ba9, 0x0bb7, 0x0bcb, 0x0bdb, 0x0be5, 0x0bf9, - 0x0c09, 0x0c2e, 0x0c2e, 0x0c36, 0x0c44, 0x0c56, 0x0c56, 0x0c6a, + 0x08a6, 0x08c0, 0x08cc, 0x08e0, 0x08ec, 0x0900, 0x0910, 0x0928, + 0x0938, 0x094c, 0x0958, 0x0979, 0x0983, 0x0997, 0x09ab, 0x09bf, + 0x09d1, 0x09d9, 0x09ed, 0x09ff, 0x0a0f, 0x0a1f, 0x0a3a, 0x0a50, + 0x0a60, 0x0a70, 0x0a82, 0x0a92, 0x0aa4, 0x0ab2, 0x0ac2, 0x0ada, + 0x0ae4, 0x0af4, 0x0b06, 0x0b10, 0x0b22, 0x0b32, 0x0b48, 0x0b5e, + 0x0b6a, 0x0b7e, 0x0b88, 0x0b9e, 0x0bb0, 0x0bc2, 0x0bcc, 0x0bd4, + 0x0bdc, 0x0bea, 0x0bf6, 0x0c04, 0x0c18, 0x0c28, 0x0c32, 0x0c46, + 0x0c56, 0x0c7b, 0x0c7b, 0x0c83, 0x0c91, 0x0ca3, 0x0ca3, 0x0cb7, // Entry C0 - FF - 0x0c6a, 0x0c8f, 0x0ca6, 0x0cb2, 0x0cc4, 0x0cd2, 0x0cd2, 0x0ce0, - 0x0d03, 0x0d03, 0x0d03, 0x0d03, 0x0d26, 0x0d2e, 0x0d5a, 0x0d6e, - 0x0d6e, 0x0d7a, 0x0d7a, 0x0d8a, 0x0d8a, 0x0d94, 0x0d94, 0x0d94, - 0x0d94, 0x0d94, 0x0d9e, 0x0d9e, 0x0da6, 0x0da6, 0x0da6, 0x0dc8, - 0x0dc8, 0x0dc8, 0x0dd0, 0x0dd0, 0x0dd0, 0x0dde, 0x0dde, 0x0dde, - 0x0dde, 0x0dde, 0x0de6, 0x0df0, 0x0df0, 0x0e02, 0x0e02, 0x0e0c, - 0x0e0c, 0x0e0c, 0x0e0c, 0x0e0c, 0x0e0c, 0x0e22, 0x0e2a, 0x0e2a, - 0x0e2a, 0x0e3c, 0x0e44, 0x0e44, 0x0e4e, 0x0e4e, 0x0e5a, 0x0e64, + 0x0cb7, 0x0cdc, 0x0cf3, 0x0cff, 0x0d11, 0x0d1f, 0x0d1f, 0x0d2d, + 0x0d50, 0x0d50, 0x0d50, 0x0d50, 0x0d73, 0x0d7b, 0x0da7, 0x0dbb, + 0x0dbb, 0x0dc7, 0x0dc7, 0x0dd7, 0x0dd7, 0x0de1, 0x0de1, 0x0de1, + 0x0de1, 0x0de1, 0x0deb, 0x0deb, 0x0df3, 0x0df3, 0x0df3, 0x0e15, + 0x0e25, 0x0e25, 0x0e2d, 0x0e2d, 0x0e2d, 0x0e3b, 0x0e3b, 0x0e3b, + 0x0e3b, 0x0e3b, 0x0e43, 0x0e4d, 0x0e4d, 0x0e5f, 0x0e5f, 0x0e69, + 0x0e69, 0x0e69, 0x0e69, 0x0e69, 0x0e69, 0x0e69, 0x0e7b, 0x0e83, + 0x0e83, 0x0e83, 0x0e95, 0x0e9d, 0x0e9d, 0x0ea7, 0x0ea7, 0x0eb3, // Entry 100 - 13F - 0x0e7f, 0x0e8d, 0x0e8d, 0x0eae, 0x0eae, 0x0eae, 0x0eba, 0x0ece, - 0x0ed8, 0x0ed8, 0x0ed8, 0x0ee4, 0x0ee4, 0x0eee, 0x0eee, 0x0f0b, - 0x0f0b, 0x0f17, 0x0f17, 0x0f2a, 0x0f2a, 0x0f36, 0x0f40, 0x0f48, - 0x0f48, 0x0f61, 0x0f6f, 0x0f6f, 0x0f6f, 0x0f6f, 0x0f7b, 0x0f7b, - 0x0f7b, 0x0f91, 0x0fb6, 0x0fbc, 0x0fbc, 0x0fbc, 0x0fd5, 0x0fd5, - 0x0fd5, 0x0ff1, 0x1007, 0x1015, 0x102b, 0x102b, 0x102b, 0x102b, - 0x104a, 0x1052, 0x1062, 0x1062, 0x1062, 0x1088, 0x1088, 0x1088, - 0x109a, 0x10a8, 0x10a8, 0x10bf, 0x10ea, 0x10f8, 0x10f8, 0x1102, + 0x0ebd, 0x0ed8, 0x0ee6, 0x0ee6, 0x0f07, 0x0f3f, 0x0f3f, 0x0f4b, + 0x0f5f, 0x0f69, 0x0f69, 0x0f69, 0x0f75, 0x0f75, 0x0f7f, 0x0f7f, + 0x0f9c, 0x0f9c, 0x0fa8, 0x0fa8, 0x0fbb, 0x0fbb, 0x0fc7, 0x0fd1, + 0x0fd9, 0x0fd9, 0x0ff2, 0x1000, 0x1000, 0x1000, 0x1000, 0x100c, + 0x100c, 0x100c, 0x1022, 0x1047, 0x104d, 0x104d, 0x104d, 0x1066, + 0x1066, 0x1066, 0x1082, 0x1098, 0x10a6, 0x10bc, 0x10bc, 0x10bc, + 0x10bc, 0x10db, 0x10e3, 0x10f3, 0x10f3, 0x10f3, 0x1119, 0x1119, + 0x1119, 0x112b, 0x1139, 0x1139, 0x1150, 0x117b, 0x1189, 0x1189, // Entry 140 - 17F - 0x110e, 0x110e, 0x110e, 0x1122, 0x1122, 0x1136, 0x1136, 0x1140, - 0x115b, 0x1172, 0x117c, 0x118c, 0x1198, 0x11a8, 0x11bc, 0x11bc, - 0x11bc, 0x11c8, 0x11d4, 0x11e0, 0x11e0, 0x11e0, 0x11e0, 0x11e0, - 0x11f2, 0x1204, 0x120c, 0x1216, 0x1216, 0x1216, 0x1216, 0x121e, - 0x122c, 0x1248, 0x1248, 0x1250, 0x1250, 0x125a, 0x125a, 0x126d, - 0x126d, 0x126d, 0x1275, 0x1285, 0x1299, 0x12b8, 0x12c6, 0x12c6, - 0x12da, 0x12fd, 0x12fd, 0x12fd, 0x130f, 0x131d, 0x132b, 0x1335, - 0x1347, 0x135b, 0x135b, 0x1367, 0x1371, 0x1371, 0x1371, 0x1383, + 0x1193, 0x119f, 0x119f, 0x119f, 0x11b3, 0x11b3, 0x11c7, 0x11c7, + 0x11d1, 0x11ec, 0x1203, 0x120d, 0x121d, 0x1229, 0x1239, 0x124d, + 0x124d, 0x124d, 0x1259, 0x1265, 0x1271, 0x1271, 0x1271, 0x1271, + 0x1271, 0x1283, 0x1295, 0x129d, 0x12a7, 0x12a7, 0x12bb, 0x12bb, + 0x12c3, 0x12d1, 0x12eb, 0x12eb, 0x12f3, 0x12f3, 0x1303, 0x1303, + 0x1316, 0x1316, 0x1316, 0x131e, 0x132e, 0x1342, 0x1361, 0x136f, + 0x136f, 0x1383, 0x13a6, 0x13a6, 0x13a6, 0x13b8, 0x13c6, 0x13d4, + 0x13de, 0x13f0, 0x1404, 0x1404, 0x1410, 0x141a, 0x141a, 0x141a, // Entry 180 - 1BF - 0x1383, 0x1383, 0x1383, 0x138f, 0x138f, 0x138f, 0x1397, 0x13c0, - 0x13c0, 0x13d9, 0x13d9, 0x13e5, 0x13ed, 0x13f5, 0x13ff, 0x13ff, - 0x13ff, 0x1413, 0x1413, 0x141f, 0x142d, 0x1443, 0x1443, 0x144d, - 0x144d, 0x1461, 0x1461, 0x146b, 0x1475, 0x1485, 0x1485, 0x149c, - 0x14a4, 0x14b0, 0x14c8, 0x14c8, 0x14da, 0x14e6, 0x14f0, 0x150c, - 0x151c, 0x1530, 0x1538, 0x154c, 0x154c, 0x154c, 0x154c, 0x1556, - 0x1572, 0x1572, 0x1586, 0x158e, 0x158e, 0x15a0, 0x15b0, 0x15c0, - 0x15c0, 0x15cc, 0x15de, 0x15f0, 0x160b, 0x160b, 0x1611, 0x1630, + 0x142c, 0x142c, 0x142c, 0x142c, 0x1438, 0x1438, 0x1438, 0x1438, + 0x1440, 0x1469, 0x1469, 0x1482, 0x1482, 0x148e, 0x1496, 0x149e, + 0x14a8, 0x14a8, 0x14a8, 0x14bc, 0x14bc, 0x14c8, 0x14d6, 0x14ec, + 0x14ec, 0x14f6, 0x14f6, 0x150a, 0x150a, 0x1514, 0x151e, 0x152e, + 0x152e, 0x1545, 0x154d, 0x1559, 0x1571, 0x1571, 0x1583, 0x158f, + 0x1599, 0x15b5, 0x15c5, 0x15d9, 0x15e1, 0x15f5, 0x15f5, 0x15f5, + 0x15f5, 0x15ff, 0x161b, 0x161b, 0x162f, 0x1637, 0x1637, 0x1649, + 0x1659, 0x1669, 0x1669, 0x1675, 0x1687, 0x1699, 0x16b4, 0x16b4, // Entry 1C0 - 1FF - 0x163a, 0x163a, 0x163a, 0x164a, 0x164a, 0x164a, 0x1654, 0x1666, - 0x1682, 0x1696, 0x16ae, 0x16c4, 0x16d8, 0x16ec, 0x16ec, 0x171b, - 0x1739, 0x1752, 0x177b, 0x1791, 0x17a7, 0x17b7, 0x17c9, 0x17db, - 0x17f8, 0x1800, 0x1800, 0x1818, 0x1828, 0x1844, 0x185c, 0x186a, - 0x1874, 0x1886, 0x1896, 0x18aa, 0x18b8, 0x18cc, 0x18d2, 0x18e0, - 0x18f4, 0x18f4, 0x1906, 0x1906, 0x1914, 0x1914, 0x1922, 0x192e, - 0x1942, 0x1958, 0x1958, 0x1979, 0x1979, 0x1981, 0x1981, 0x1981, - 0x199e, 0x19b9, 0x19b9, 0x19c9, 0x19d7, 0x19d7, 0x19d7, 0x19d7, + 0x16ba, 0x16d9, 0x16e3, 0x16e3, 0x16e3, 0x16f3, 0x16f3, 0x16f3, + 0x16fd, 0x170f, 0x172b, 0x173f, 0x1757, 0x176b, 0x177f, 0x1793, + 0x17b6, 0x17e5, 0x1803, 0x181c, 0x1845, 0x185b, 0x1871, 0x1881, + 0x1893, 0x18a5, 0x18c2, 0x18ca, 0x18ca, 0x18e2, 0x18f2, 0x190e, + 0x1926, 0x1934, 0x193e, 0x1950, 0x1960, 0x1974, 0x1982, 0x1996, + 0x199c, 0x19aa, 0x19be, 0x19be, 0x19d0, 0x19d0, 0x19de, 0x19de, + 0x19ec, 0x19f8, 0x1a0c, 0x1a22, 0x1a22, 0x1a43, 0x1a43, 0x1a4b, + 0x1a4b, 0x1a4b, 0x1a68, 0x1a83, 0x1a83, 0x1a93, 0x1aa1, 0x1aa1, // Entry 200 - 23F - 0x19d7, 0x19fa, 0x1a0f, 0x1a2a, 0x1a45, 0x1a53, 0x1a53, 0x1a6a, - 0x1a6a, 0x1a7a, 0x1a7a, 0x1a8a, 0x1a8a, 0x1a8a, 0x1a9c, 0x1a9c, - 0x1aac, 0x1aac, 0x1ab8, 0x1ac2, 0x1aca, 0x1ad6, 0x1ae2, 0x1aec, - 0x1afa, 0x1b0a, 0x1b16, 0x1b24, 0x1b32, 0x1b44, 0x1b52, 0x1b52, - 0x1b63, 0x1b71, 0x1b7d, 0x1b8f, 0x1b9d, 0x1b9d, 0x1baf, 0x1bc7, - 0x1bd5, 0x1be5, 0x1c14, 0x1c2c, 0x1c42, 0x1c56, 0x1c66, 0x1c6c, - 0x1c7e, 0x1c8e, 0x1cb0, 0x1cb0, 0x1cbe, 0x1cc6, 0x1cd2, 0x1ce2, - 0x1cf0, 0x1d02, 0x1d0a, 0x1d1a, 0x1d2f, 0x1d43, 0x1d43, 0x1d4b, + 0x1aa1, 0x1aa1, 0x1aa1, 0x1abe, 0x1ad3, 0x1ae8, 0x1afd, 0x1b0b, + 0x1b0b, 0x1b22, 0x1b22, 0x1b32, 0x1b32, 0x1b42, 0x1b42, 0x1b42, + 0x1b54, 0x1b54, 0x1b64, 0x1b64, 0x1b70, 0x1b7a, 0x1b82, 0x1b8e, + 0x1b9a, 0x1ba4, 0x1bb2, 0x1bc2, 0x1bce, 0x1bdc, 0x1bea, 0x1bfc, + 0x1c0a, 0x1c0a, 0x1c1b, 0x1c29, 0x1c35, 0x1c47, 0x1c55, 0x1c55, + 0x1c67, 0x1c7f, 0x1c8d, 0x1c9d, 0x1ccc, 0x1ce4, 0x1cfa, 0x1d0e, + 0x1d25, 0x1d2b, 0x1d3d, 0x1d4d, 0x1d6f, 0x1d6f, 0x1d7d, 0x1d85, + 0x1d91, 0x1da1, 0x1daf, 0x1dc1, 0x1dc9, 0x1dd9, 0x1dee, 0x1e02, // Entry 240 - 27F - 0x1d51, 0x1d5f, 0x1d6d, 0x1d75, 0x1d75, 0x1d89, 0x1d9f, 0x1d9f, - 0x1db5, 0x1dc1, 0x1df5, 0x1e07, 0x1e3f, 0x1e4f, 0x1e7b, 0x1e7b, - 0x1ea4, 0x1eda, 0x1f03, 0x1f26, 0x1f4b, 0x1f6e, 0x1f9d, 0x1fc2, - 0x1fe9, 0x1fe9, 0x200e, 0x2037, 0x2058, 0x206e, 0x209d, 0x20ca, - 0x20de, 0x20fd, 0x211c, 0x213d, 0x215e, -} // Size: 1250 bytes - -const idLangStr string = "" + // Size: 3994 bytes + 0x1e02, 0x1e0a, 0x1e10, 0x1e1e, 0x1e2c, 0x1e34, 0x1e34, 0x1e48, + 0x1e5e, 0x1e5e, 0x1e74, 0x1e80, 0x1eb4, 0x1ec6, 0x1efe, 0x1f0e, + 0x1f3a, 0x1f3a, 0x1f63, 0x1f99, 0x1fc2, 0x1fe5, 0x200a, 0x202d, + 0x205c, 0x2081, 0x20a8, 0x20a8, 0x20cd, 0x20f6, 0x2117, 0x212d, + 0x215c, 0x2189, 0x219d, 0x21bc, 0x21db, 0x21fc, 0x221d, +} // Size: 1254 bytes + +const idLangStr string = "" + // Size: 4042 bytes "AfarAbkhazAvestaAfrikaansAkanAmharikAragonArabAssamAvarAymaraAzerbaijani" + "BashkirBelarusiaBulgariaBislamaBambaraBengaliTibetBretonBosniaKatalanChe" + "chenChamorroKorsikaKreeCheskaBahasa Gereja SlavoniaChuvashWelshDanskJerm" + @@ -19345,50 +20709,51 @@ const idLangStr string = "" + // Size: 3994 bytes "NorwegiaBokmål NorwegiaNdebele SelatanNavajoNyanjaOsitaniaOjibwaOromoOri" + "yaOssetiaPunjabiPaliPolskiPashtoPortugisQuechuaReto-RomanRundiRumaniaRus" + "iaKinyarwandaSanskertaSardiniaSindhiSami UtaraSangoSinhalaSlovakSlovenSa" + - "moaShonaSomaliAlbaniaSerbSwatiSotho SelatanSundaSwediaSwahiliTamilTelugu" + - "TajikThaiTigrinyaTurkmenTswanaTongaTurkiTsongaTatarTahitiUyghurUkrainaUr" + - "duUzbekVendaVietnamVolapukWalloonWolofXhosaYiddishYorubaZhuangTionghoaZu" + - "luAcehAcoliAdangmeAdygeiArab TunisiaAfrihiliAghemAinuAkkadiaAlabamaAleut" + - "Altai SelatanInggris KunoAngikaAramMapucheArapahoArab AljazairArawakArab" + - " MarokoArab MesirAsuBahasa Isyarat AmerikaAsturiaAwadhiBaluchiBaliBavari" + - "aBasaBamunBatak TobaGhomalaBejaBembaBetawiBenaBafutBalochi BaratBhojpuri" + - "BikolBiniBanjarKomSiksikaBrajBodoAkooseBuriatBugisBuluBlinMedumbaKadoKar" + - "ibCayugaAtsamCebuanoKigaChibchaChagataiChuukeMariJargon ChinookKoktawChi" + - "pewyanCherokeeCheyenneKurdi SoraniKoptikTatar KrimeaSeselwa Kreol Pranci" + - "sKashubiaDakotaDargwaTaitaDelawareSlaveDogribDinkaZarmaDogriSorbia Renda" + - "hDualaBelanda Abad PertengahanJola-FonyiDyulaDazagaEmbuEfikMesir KunoEka" + - "jukElamInggris Abad PertengahanEwondoFangFilipinoFonPrancis Abad Perteng" + - "ahanPrancis KunoArpitanFrisia UtaraFrisia TimurFriuliGaGagauzGayoGbayaGe" + - "ezGilbertGilakiJerman Abad PertengahanJerman KunoGondiGorontaloGotikGreb" + - "oYunani KunoJerman (Swiss)GusiiGwich’inHaidaHawaiiHindi FijiHiligaynonHi" + - "titHmongSorbia AtasHupaIbanIbibioIlokoIngushetiaLojbanNgombaMachameIbran" + - "i-PersiaIbrani-ArabKara-KalpakKabyleKachinJjuKambaKawiKabardiKanembuTyap" + - "MakondeKabuverdianuKenyangKoroKhasiKhotanKoyra ChiiniKakoKalenjinKimbund" + - "uKomi-PermyakKonkaniKosreKpelleKarachai BalkarKrioKareliaKurukShambalaBa" + - "fiaDialek KolschKumykKutenaiLadinoLangiLahndaLambaLezghiaLiguriaLakotaMo" + - "ngoLoziLuri UtaraLuba-LuluaLuisenoLundaLuoMizoLuyiaLazMaduraMafaMagahiMa" + - "ithiliMakasarMandingoMasaiMabaMokshaMandarMendeMeruMorisienIrlandia Abad" + - " PertengahanMakhuwa-MeettoMeta’MikmakMinangkabauManchuriaManipuriMohawkM" + - "ossiMundangBeberapa BahasaBahasa MuskogeeMirandaMarwariMentawaiMyeneEryz" + - "aMazanderaniNeapolitanNamaJerman RendahNewariNiasNiueaKwasioNgiemboonNog" + - "aiNorse KunoN’KoSotho UtaraNuerNewari KlasikNyamweziNyankoleNyoroNzimaOs" + - "ageTurki OsmaniPangasinaPahleviPampangaPapiamentoPalauPidgin NigeriaJerm" + - "an PennsylvaniaPersia KunoFunisiaPohnpeiaPrusiaProvencal LamaKʼicheʼRaja" + - "sthaniRapanuiRarotongaRomboRomaniRotumaAromaniaRwaSandaweSakhaAram Samar" + - "iaSamburuSasakSantaliNgambaiSanguSisiliaSkotlandiaKurdi SelatanSenecaSen" + - "aSeriSelkupKoyraboro SenniIrlandia KunoTachelhitShanArab SuwaSidamoSiles" + - "ia RendahSelayarSami SelatanLule SamiInari SamiSkolt SamiSoninkeSogdienS" + - "ranan TongoSererSahoSukumaSusuSumeriaKomoriaSuriah KlasikSuriahSilesiaTu" + - "luTimneTesoTerenoTetunTigreTivTokelauKlingonTlingitTamashekNyasa TongaTo" + - "k PisinTuroyoTarokoTsimshiaTat MuslimTumbukaTuvaluTasawaqTuviniaTamazigh" + - "t Maroko TengahUdmurtUgaritUmbunduRootVaiVenesiaVotiaVunjoWalserWalamoWa" + - "raiWashoWarlpiriKalmukSogaYaoYapoisYangbenYembaKantonZapotekBlissymbolZe" + - "nagaTamazight Maroko StandarZuniTidak ada konten linguistikZazaArab Stan" + - "dar ModernJerman Tinggi (Swiss)Inggris (Inggris)Spanyol (Eropa)Portugis " + - "(Eropa)MoldaviaSerbo-KroasiaKongo SwahiliTionghoa (Aksara Sederhana)Tion" + - "ghoa (Aksara Tradisional)" - -var idLangIdx = []uint16{ // 613 elements + "moaShonaSomaliaAlbaniaSerbiaSwatiSotho SelatanSundaSwediaSwahiliTamilTel" + + "uguTajikThaiTigrinyaTurkmenTswanaTongaTurkiTsongaTatarTahitiUyghurUkrain" + + "aUrduUzbekVendaVietnamVolapukWalloonWolofXhosaYiddishYorubaZhuangTiongho" + + "aZuluAcehAcoliAdangmeAdygeiArab TunisiaAfrihiliAghemAinuAkkadiaAlabamaAl" + + "eutAltai SelatanInggris KunoAngikaAramMapucheArapahoArab AljazairArawakA" + + "rab MarokoArab MesirAsuBahasa Isyarat AmerikaAsturiaAwadhiBaluchiBaliBav" + + "ariaBasaBamunBatak TobaGhomalaBejaBembaBetawiBenaBafutBalochi BaratBhojp" + + "uriBikolBiniBanjarKomSiksikaBrajBodoAkooseBuriatBugisBuluBlinMedumbaKado" + + "KaribCayugaAtsamCebuanoKigaChibchaChagataiChuukeMariJargon ChinookKoktaw" + + "ChipewyanCherokeeCheyenneKurdi SoraniKoptikTatar KrimeaSeselwa Kreol Pra" + + "ncisKashubiaDakotaDargwaTaitaDelawareSlaveDogribDinkaZarmaDogriSorbia Hi" + + "lirDualaBelanda Abad PertengahanJola-FonyiDyulaDazagaEmbuEfikMesir KunoE" + + "kajukElamInggris Abad PertengahanEwondoFangFilipinoFonPrancis CajunPranc" + + "is Abad PertengahanPrancis KunoArpitanFrisia UtaraFrisia TimurFriuliGaGa" + + "gauzGayoGbayaGeezGilbertGilakiJerman Abad PertengahanJerman KunoGondiGor" + + "ontaloGotikGreboYunani KunoJerman (Swiss)GusiiGwich’inHaidaHawaiiHindi F" + + "ijiHiligaynonHititHmongSorbia HuluHupaIbanIbibioIlokoIngushetiaLojbanNgo" + + "mbaMachameIbrani-PersiaIbrani-ArabKara-KalpakKabyleKachinJjuKambaKawiKab" + + "ardiKanembuTyapMakondeKabuverdianuKenyangKoroKhasiKhotanKoyra ChiiniKako" + + "KalenjinKimbunduKomi-PermyakKonkaniKosreKpelleKarachai BalkarKrioKarelia" + + "KurukShambalaBafiaDialek KolschKumykKutenaiLadinoLangiLahndaLambaLezghia" + + "LiguriaLakotaMongoKreol LouisianaLoziLuri UtaraLuba-LuluaLuisenoLundaLuo" + + "MizoLuyiaLazMaduraMafaMagahiMaithiliMakasarMandingoMasaiMabaMokshaMandar" + + "MendeMeruMorisienIrlandia Abad PertengahanMakhuwa-MeettoMeta’MikmakMinan" + + "gkabauManchuriaManipuriMohawkMossiMundangBeberapa BahasaBahasa MuskogeeM" + + "irandaMarwariMentawaiMyeneEryzaMazanderaniNeapolitanNamaJerman RendahNew" + + "ariNiasNiueaKwasioNgiemboonNogaiNorse KunoN’KoSotho UtaraNuerNewari Klas" + + "ikNyamweziNyankoleNyoroNzimaOsageTurki OsmaniPangasinaPahleviPampangaPap" + + "iamentoPalauPidgin NigeriaJerman PennsylvaniaPersia KunoFunisiaPohnpeiaP" + + "rusiaProvencal LamaKʼicheʼRajasthaniRapanuiRarotongaRomboRomaniRotumaAro" + + "maniaRwaSandaweSakhaAram SamariaSamburuSasakSantaliNgambaiSanguSisiliaSk" + + "otlandiaKurdi SelatanSenecaSenaSeriSelkupKoyraboro SenniIrlandia KunoTac" + + "helhitShanArab SuwaSidamoSilesia RendahSelayarSami SelatanLule SamiInari" + + " SamiSkolt SamiSoninkeSogdienSranan TongoSererSahoSukumaSusuSumeriaKomor" + + "iaSuriah KlasikSuriahSilesiaTuluTimneTesoTerenoTetunTigreTivTokelauKling" + + "onTlingitTamashekNyasa TongaTok PisinTuroyoTarokoTsimshiaTat MuslimTumbu" + + "kaTuvaluTasawaqTuviniaTamazight Maroko TengahUdmurtUgaritUmbunduBahasa T" + + "idak DikenalVaiVenesiaVotiaVunjoWalserWalamoWaraiWashoWarlpiriKalmukSoga" + + "YaoYapoisYangbenYembaKantonZapotekBlissymbolZenagaTamazight Maroko Stand" + + "arZuniTidak ada konten linguistikZazaArab Standar ModernJerman Tinggi (S" + + "wiss)Inggris (Inggris)Spanyol (Eropa)Portugis (Eropa)MoldaviaSerbo-Kroas" + + "iaSwahili (Kongo)Tionghoa (Aksara Sederhana)Tionghoa (Aksara Tradisional" + + ")" + +var idLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0004, 0x000a, 0x0010, 0x0019, 0x001d, 0x0024, 0x002a, 0x002e, 0x0033, 0x0037, 0x003d, 0x0048, 0x004f, 0x0058, 0x0060, @@ -19410,75 +20775,75 @@ var idLangIdx = []uint16{ // 613 elements // Entry 80 - BF 0x0381, 0x0389, 0x0390, 0x039a, 0x039f, 0x03a6, 0x03ab, 0x03b6, 0x03bf, 0x03c7, 0x03cd, 0x03d7, 0x03dc, 0x03e3, 0x03e9, 0x03ef, - 0x03f4, 0x03f9, 0x03ff, 0x0406, 0x040a, 0x040f, 0x041c, 0x0421, - 0x0427, 0x042e, 0x0433, 0x0439, 0x043e, 0x0442, 0x044a, 0x0451, - 0x0457, 0x045c, 0x0461, 0x0467, 0x046c, 0x0472, 0x0478, 0x047f, - 0x0483, 0x0488, 0x048d, 0x0494, 0x049b, 0x04a2, 0x04a7, 0x04ac, - 0x04b3, 0x04b9, 0x04bf, 0x04c7, 0x04cb, 0x04cf, 0x04d4, 0x04db, - 0x04e1, 0x04ed, 0x04f5, 0x04fa, 0x04fe, 0x0505, 0x050c, 0x0511, + 0x03f4, 0x03f9, 0x0400, 0x0407, 0x040d, 0x0412, 0x041f, 0x0424, + 0x042a, 0x0431, 0x0436, 0x043c, 0x0441, 0x0445, 0x044d, 0x0454, + 0x045a, 0x045f, 0x0464, 0x046a, 0x046f, 0x0475, 0x047b, 0x0482, + 0x0486, 0x048b, 0x0490, 0x0497, 0x049e, 0x04a5, 0x04aa, 0x04af, + 0x04b6, 0x04bc, 0x04c2, 0x04ca, 0x04ce, 0x04d2, 0x04d7, 0x04de, + 0x04e4, 0x04f0, 0x04f8, 0x04fd, 0x0501, 0x0508, 0x050f, 0x0514, // Entry C0 - FF - 0x0511, 0x051e, 0x052a, 0x0530, 0x0534, 0x053b, 0x053b, 0x0542, - 0x054f, 0x054f, 0x0555, 0x0560, 0x056a, 0x056d, 0x0583, 0x058a, - 0x058a, 0x0590, 0x0597, 0x059b, 0x05a2, 0x05a6, 0x05ab, 0x05b5, - 0x05bc, 0x05c0, 0x05c5, 0x05cb, 0x05cf, 0x05d4, 0x05d4, 0x05e1, - 0x05e9, 0x05ee, 0x05f2, 0x05f8, 0x05fb, 0x0602, 0x0602, 0x0602, - 0x0606, 0x0606, 0x060a, 0x0610, 0x0616, 0x061b, 0x061f, 0x0623, - 0x062a, 0x062e, 0x0633, 0x0639, 0x063e, 0x0645, 0x0649, 0x0650, - 0x0658, 0x065e, 0x0662, 0x0670, 0x0676, 0x067f, 0x0687, 0x068f, + 0x0514, 0x0521, 0x052d, 0x0533, 0x0537, 0x053e, 0x053e, 0x0545, + 0x0552, 0x0552, 0x0558, 0x0563, 0x056d, 0x0570, 0x0586, 0x058d, + 0x058d, 0x0593, 0x059a, 0x059e, 0x05a5, 0x05a9, 0x05ae, 0x05b8, + 0x05bf, 0x05c3, 0x05c8, 0x05ce, 0x05d2, 0x05d7, 0x05d7, 0x05e4, + 0x05ec, 0x05f1, 0x05f5, 0x05fb, 0x05fe, 0x0605, 0x0605, 0x0605, + 0x0609, 0x0609, 0x060d, 0x0613, 0x0619, 0x061e, 0x0622, 0x0626, + 0x062d, 0x0631, 0x0636, 0x063c, 0x0641, 0x0641, 0x0648, 0x064c, + 0x0653, 0x065b, 0x0661, 0x0665, 0x0673, 0x0679, 0x0682, 0x068a, // Entry 100 - 13F - 0x069b, 0x06a1, 0x06a1, 0x06ad, 0x06c2, 0x06ca, 0x06d0, 0x06d6, - 0x06db, 0x06e3, 0x06e8, 0x06ee, 0x06f3, 0x06f8, 0x06fd, 0x070a, - 0x070a, 0x070f, 0x0727, 0x0731, 0x0736, 0x073c, 0x0740, 0x0744, - 0x0744, 0x074e, 0x0754, 0x0758, 0x0770, 0x0770, 0x0776, 0x0776, - 0x077a, 0x0782, 0x0782, 0x0785, 0x0785, 0x079d, 0x07a9, 0x07b0, - 0x07bc, 0x07c8, 0x07ce, 0x07d0, 0x07d6, 0x07d6, 0x07da, 0x07df, - 0x07df, 0x07e3, 0x07ea, 0x07f0, 0x0807, 0x0812, 0x0812, 0x0817, - 0x0820, 0x0825, 0x082a, 0x0835, 0x0843, 0x0843, 0x0843, 0x0848, + 0x0692, 0x069e, 0x06a4, 0x06a4, 0x06b0, 0x06c5, 0x06cd, 0x06d3, + 0x06d9, 0x06de, 0x06e6, 0x06eb, 0x06f1, 0x06f6, 0x06fb, 0x0700, + 0x070c, 0x070c, 0x0711, 0x0729, 0x0733, 0x0738, 0x073e, 0x0742, + 0x0746, 0x0746, 0x0750, 0x0756, 0x075a, 0x0772, 0x0772, 0x0778, + 0x0778, 0x077c, 0x0784, 0x0784, 0x0787, 0x0794, 0x07ac, 0x07b8, + 0x07bf, 0x07cb, 0x07d7, 0x07dd, 0x07df, 0x07e5, 0x07e5, 0x07e9, + 0x07ee, 0x07ee, 0x07f2, 0x07f9, 0x07ff, 0x0816, 0x0821, 0x0821, + 0x0826, 0x082f, 0x0834, 0x0839, 0x0844, 0x0852, 0x0852, 0x0852, // Entry 140 - 17F - 0x0852, 0x0857, 0x0857, 0x085d, 0x0867, 0x0871, 0x0876, 0x087b, - 0x0886, 0x0886, 0x088a, 0x088e, 0x0894, 0x0899, 0x08a3, 0x08a3, - 0x08a3, 0x08a9, 0x08af, 0x08b6, 0x08c3, 0x08ce, 0x08ce, 0x08d9, - 0x08df, 0x08e5, 0x08e8, 0x08ed, 0x08f1, 0x08f8, 0x08ff, 0x0903, - 0x090a, 0x0916, 0x091d, 0x0921, 0x0921, 0x0926, 0x092c, 0x0938, - 0x0938, 0x0938, 0x093c, 0x0944, 0x094c, 0x0958, 0x095f, 0x0964, - 0x096a, 0x0979, 0x097d, 0x097d, 0x0984, 0x0989, 0x0991, 0x0996, - 0x09a3, 0x09a8, 0x09af, 0x09b5, 0x09ba, 0x09c0, 0x09c5, 0x09cc, + 0x0857, 0x0861, 0x0866, 0x0866, 0x086c, 0x0876, 0x0880, 0x0885, + 0x088a, 0x0895, 0x0895, 0x0899, 0x089d, 0x08a3, 0x08a8, 0x08b2, + 0x08b2, 0x08b2, 0x08b8, 0x08be, 0x08c5, 0x08d2, 0x08dd, 0x08dd, + 0x08e8, 0x08ee, 0x08f4, 0x08f7, 0x08fc, 0x0900, 0x0907, 0x090e, + 0x0912, 0x0919, 0x0925, 0x092c, 0x0930, 0x0930, 0x0935, 0x093b, + 0x0947, 0x0947, 0x0947, 0x094b, 0x0953, 0x095b, 0x0967, 0x096e, + 0x0973, 0x0979, 0x0988, 0x098c, 0x098c, 0x0993, 0x0998, 0x09a0, + 0x09a5, 0x09b2, 0x09b7, 0x09be, 0x09c4, 0x09c9, 0x09cf, 0x09d4, // Entry 180 - 1BF - 0x09cc, 0x09d3, 0x09d3, 0x09d9, 0x09d9, 0x09de, 0x09e2, 0x09ec, - 0x09ec, 0x09f6, 0x09fd, 0x0a02, 0x0a05, 0x0a09, 0x0a0e, 0x0a0e, - 0x0a11, 0x0a17, 0x0a1b, 0x0a21, 0x0a29, 0x0a30, 0x0a38, 0x0a3d, - 0x0a41, 0x0a47, 0x0a4d, 0x0a52, 0x0a56, 0x0a5e, 0x0a77, 0x0a85, - 0x0a8c, 0x0a92, 0x0a9d, 0x0aa6, 0x0aae, 0x0ab4, 0x0ab9, 0x0ab9, - 0x0ac0, 0x0acf, 0x0ade, 0x0ae5, 0x0aec, 0x0af4, 0x0af9, 0x0afe, - 0x0b09, 0x0b09, 0x0b13, 0x0b17, 0x0b24, 0x0b2a, 0x0b2e, 0x0b33, - 0x0b33, 0x0b39, 0x0b42, 0x0b47, 0x0b51, 0x0b51, 0x0b57, 0x0b62, + 0x09db, 0x09db, 0x09e2, 0x09e2, 0x09e8, 0x09e8, 0x09ed, 0x09fc, + 0x0a00, 0x0a0a, 0x0a0a, 0x0a14, 0x0a1b, 0x0a20, 0x0a23, 0x0a27, + 0x0a2c, 0x0a2c, 0x0a2f, 0x0a35, 0x0a39, 0x0a3f, 0x0a47, 0x0a4e, + 0x0a56, 0x0a5b, 0x0a5f, 0x0a65, 0x0a6b, 0x0a70, 0x0a74, 0x0a7c, + 0x0a95, 0x0aa3, 0x0aaa, 0x0ab0, 0x0abb, 0x0ac4, 0x0acc, 0x0ad2, + 0x0ad7, 0x0ad7, 0x0ade, 0x0aed, 0x0afc, 0x0b03, 0x0b0a, 0x0b12, + 0x0b17, 0x0b1c, 0x0b27, 0x0b27, 0x0b31, 0x0b35, 0x0b42, 0x0b48, + 0x0b4c, 0x0b51, 0x0b51, 0x0b57, 0x0b60, 0x0b65, 0x0b6f, 0x0b6f, // Entry 1C0 - 1FF - 0x0b66, 0x0b73, 0x0b7b, 0x0b83, 0x0b88, 0x0b8d, 0x0b92, 0x0b9e, - 0x0ba7, 0x0bae, 0x0bb6, 0x0bc0, 0x0bc5, 0x0bc5, 0x0bd3, 0x0be6, - 0x0be6, 0x0bf1, 0x0bf1, 0x0bf8, 0x0bf8, 0x0bf8, 0x0c00, 0x0c06, - 0x0c14, 0x0c1d, 0x0c1d, 0x0c27, 0x0c2e, 0x0c37, 0x0c37, 0x0c37, - 0x0c3c, 0x0c42, 0x0c48, 0x0c48, 0x0c48, 0x0c50, 0x0c53, 0x0c5a, - 0x0c5f, 0x0c6b, 0x0c72, 0x0c77, 0x0c7e, 0x0c7e, 0x0c85, 0x0c8a, - 0x0c91, 0x0c9b, 0x0c9b, 0x0ca8, 0x0cae, 0x0cb2, 0x0cb6, 0x0cbc, - 0x0ccb, 0x0cd8, 0x0cd8, 0x0ce1, 0x0ce5, 0x0cee, 0x0cf4, 0x0d02, + 0x0b75, 0x0b80, 0x0b84, 0x0b91, 0x0b99, 0x0ba1, 0x0ba6, 0x0bab, + 0x0bb0, 0x0bbc, 0x0bc5, 0x0bcc, 0x0bd4, 0x0bde, 0x0be3, 0x0be3, + 0x0bf1, 0x0c04, 0x0c04, 0x0c0f, 0x0c0f, 0x0c16, 0x0c16, 0x0c16, + 0x0c1e, 0x0c24, 0x0c32, 0x0c3b, 0x0c3b, 0x0c45, 0x0c4c, 0x0c55, + 0x0c55, 0x0c55, 0x0c5a, 0x0c60, 0x0c66, 0x0c66, 0x0c66, 0x0c6e, + 0x0c71, 0x0c78, 0x0c7d, 0x0c89, 0x0c90, 0x0c95, 0x0c9c, 0x0c9c, + 0x0ca3, 0x0ca8, 0x0caf, 0x0cb9, 0x0cb9, 0x0cc6, 0x0ccc, 0x0cd0, + 0x0cd4, 0x0cda, 0x0ce9, 0x0cf6, 0x0cf6, 0x0cff, 0x0d03, 0x0d0c, // Entry 200 - 23F - 0x0d09, 0x0d15, 0x0d1e, 0x0d28, 0x0d32, 0x0d39, 0x0d40, 0x0d4c, - 0x0d51, 0x0d55, 0x0d55, 0x0d5b, 0x0d5f, 0x0d66, 0x0d6d, 0x0d7a, - 0x0d80, 0x0d87, 0x0d8b, 0x0d90, 0x0d94, 0x0d9a, 0x0d9f, 0x0da4, - 0x0da7, 0x0dae, 0x0dae, 0x0db5, 0x0dbc, 0x0dbc, 0x0dc4, 0x0dcf, - 0x0dd8, 0x0dde, 0x0de4, 0x0de4, 0x0dec, 0x0df6, 0x0dfd, 0x0e03, - 0x0e0a, 0x0e11, 0x0e28, 0x0e2e, 0x0e34, 0x0e3b, 0x0e3f, 0x0e42, - 0x0e49, 0x0e49, 0x0e49, 0x0e49, 0x0e4e, 0x0e4e, 0x0e53, 0x0e59, - 0x0e5f, 0x0e64, 0x0e69, 0x0e71, 0x0e71, 0x0e77, 0x0e77, 0x0e7b, + 0x0d12, 0x0d20, 0x0d27, 0x0d33, 0x0d3c, 0x0d46, 0x0d50, 0x0d57, + 0x0d5e, 0x0d6a, 0x0d6f, 0x0d73, 0x0d73, 0x0d79, 0x0d7d, 0x0d84, + 0x0d8b, 0x0d98, 0x0d9e, 0x0da5, 0x0da9, 0x0dae, 0x0db2, 0x0db8, + 0x0dbd, 0x0dc2, 0x0dc5, 0x0dcc, 0x0dcc, 0x0dd3, 0x0dda, 0x0dda, + 0x0de2, 0x0ded, 0x0df6, 0x0dfc, 0x0e02, 0x0e02, 0x0e0a, 0x0e14, + 0x0e1b, 0x0e21, 0x0e28, 0x0e2f, 0x0e46, 0x0e4c, 0x0e52, 0x0e59, + 0x0e6d, 0x0e70, 0x0e77, 0x0e77, 0x0e77, 0x0e77, 0x0e7c, 0x0e7c, + 0x0e81, 0x0e87, 0x0e8d, 0x0e92, 0x0e97, 0x0e9f, 0x0e9f, 0x0ea5, // Entry 240 - 27F - 0x0e7e, 0x0e84, 0x0e8b, 0x0e90, 0x0e90, 0x0e96, 0x0e9d, 0x0ea7, - 0x0ea7, 0x0ead, 0x0ec5, 0x0ec9, 0x0ee4, 0x0ee8, 0x0efb, 0x0efb, - 0x0efb, 0x0f10, 0x0f10, 0x0f10, 0x0f21, 0x0f21, 0x0f21, 0x0f30, - 0x0f30, 0x0f30, 0x0f30, 0x0f30, 0x0f30, 0x0f30, 0x0f30, 0x0f40, - 0x0f48, 0x0f55, 0x0f62, 0x0f7d, 0x0f9a, -} // Size: 1250 bytes - -const isLangStr string = "" + // Size: 4605 bytes + 0x0ea5, 0x0ea9, 0x0eac, 0x0eb2, 0x0eb9, 0x0ebe, 0x0ebe, 0x0ec4, + 0x0ecb, 0x0ed5, 0x0ed5, 0x0edb, 0x0ef3, 0x0ef7, 0x0f12, 0x0f16, + 0x0f29, 0x0f29, 0x0f29, 0x0f3e, 0x0f3e, 0x0f3e, 0x0f4f, 0x0f4f, + 0x0f4f, 0x0f5e, 0x0f5e, 0x0f5e, 0x0f5e, 0x0f5e, 0x0f5e, 0x0f5e, + 0x0f5e, 0x0f6e, 0x0f76, 0x0f83, 0x0f92, 0x0fad, 0x0fca, +} // Size: 1254 bytes + +const isLangStr string = "" + // Size: 4650 bytes "afárabkasískaavestískaafríkanskaakanamharískaaragonskaarabískaassamskaav" + "arískaaímaraaserskabaskírhvítrússneskabúlgarskabíslamabambarabengalskatí" + "beskabretónskabosnískakatalónskatsjetsjenskakamorrókorsískakrítékkneskak" + @@ -19500,44 +20865,45 @@ const isLangStr string = "" + // Size: 4605 bytes "skatsongatatarskatahítískaúígúrúkraínskaúrdúúsbekskavendavíetnamskavolap" + "ykvallónskavolofsósajiddískajórúbasúangkínverskasúlúakkískaacoliadangmea" + "dýgeafríhílíaghemaínu (Japan)akkadískaaleúskasuðuraltaískafornenskaangík" + - "aarameískaarákanískaarapahóaravakskaasuastúrískaavadíbalúkíbalískabasaba" + - "munbejabembabenavesturbalotsíbojpúríbíkolbínísiksikabraíbódóbakossibúría" + - "tbúgískablínkaddókaríbamálkajúgaatsamkebúanókígasíbsjasjagataísjúkískama" + - "rísínúksjoktásípevískaCherokee-málsjeyensorani-kúrdískakoptískakrímtyrkn" + - "eskaSeselwa kreólsk franskakasúbískadakótadargvataítadelaverslavneskadog" + - "ríbdinkazarmadogrílágsorbneskadúalamiðhollenskajola-fonyidjúladazagaembu" + - "efíkfornegypskaekajúkelamítmiðenskaevondófangfilippseyskafónmiðfranskafo" + - "rnfranskanorðurfrísneskaausturfrísneskafríúlskagagagásgajógbajagísgilber" + - "skamiðháþýskafornháþýskagondígorontalógotneskagerbóforngrískasvissnesk þ" + - "ýskagusiigvísínhaídahavaískahíligaínonhettitískahmonghásorbneskahúpaíba" + - "nibibioílokóingúslojbanngombamasjámegyðingapersneskagyðingaarabískakarak" + - "alpakkabílekasínjjukambakavíkabardískatyapmakondegrænhöfðeyskakorokasíko" + - "taskakoyra chiinikakokalenjinkimbúndúkómí-permyakkonkaníkosraskakpelleka" + - "rasaíbalkarkarélskakúrúksjambalabafíakölnískakúmíkkútenaíladínskalangíla" + - "ndalambalesgískalakótamongólozinorðurlúríluba-lulualúisenólúndalúólúsaíl" + - "uyiamadúrskamagahímaítílímakasarmandingómasaímoksamandarmendemerúmáritís" + - "kamiðírskamakhuwa-meettometa’mikmakmínangkabámansjúmanípúrímóhískamossím" + - "undangmargvísleg málkríkmirandesískamarvaríersjamasanderanínapólískanama" + - "lágþýska; lágsaxneskanevaríníasníveskakwasiongiemboonnógaínorrænan’konor" + - "ðursótónúerklassísk nevarískanjamvesínyankolenjórónsímaósagetyrkneska, " + - "ottómanpangasínmálpalavípampangapapíamentópaláskanígerískt pidginfornper" + - "sneskafönikískaponpeiskaprússneskafornpróvensalskakicherajastanírapanúír" + - "arótongskarombóromaníarúmenskarúasandavejakútsamversk arameískasambúrúsa" + - "saksantalíngambaysangúsikileyskaskoskasuðurkúrdískasenaselkúpkoíraboró-s" + - "ennífornírskatachelhitsjansídamósuðursamískalúlesamískaenaresamískaskolt" + - "esamískasóninkesogdíensranan tongoserersahosúkúmasúsúsúmerskashimaoríska" + - "klassísk sýrlenskasýrlenskatímnetesóterenótetúmtígretívtókeláskaklingons" + - "katlingittamasjektongverska (nyasa)tokpisintarókótsimsískatúmbúkatúvalús" + - "katasawaqtúvínskatamazightúdmúrtúgarítískaúmbúndúrótvaívotískavunjóvalse" + - "rvalamóvaraívasjóvarlpirikalmúkskasógajaójapískayangbenyembakantoneskasa" + - "pótekblisstáknsenagastaðlað marokkóskt tamazightsúníekkert tungumálaefni" + - "zázáískastöðluð nútímaarabískaausturrísk þýskasvissnesk háþýskaáströlsk " + - "enskakanadísk enskabresk enskabandarísk enskarómönsk-amerísk spænskaevró" + - "psk spænskamexíkósk spænskakanadísk franskasvissnesk franskalágsaxneskaf" + - "læmskabrasílísk portúgalskaevrópsk portúgalskamoldóvskaserbókróatískaKon" + - "gó-svahílíkínverska (einfölduð)kínverska (hefðbundin)" - -var isLangIdx = []uint16{ // 613 elements + "aarameískamapuchearapahóaravakskaasuastúrískaavadíbalúkíbalískabasabamun" + + "bejabembabenavesturbalotsíbojpúríbíkolbínísiksikabraíbódóbakossibúríatbú" + + "gískablínkaddókaríbamálkajúgaatsamkebúanókígasíbsjasjagataísjúkískamarís" + + "ínúksjoktásípevískaCherokee-málsjeyensorani-kúrdískakoptískakrímtyrknes" + + "kaSeselwa kreólsk franskakasúbískadakótadargvataítadelaverslavneskadogrí" + + "bdinkazarmadogrílágsorbneskadúalamiðhollenskajola-fonyidjúladazagaembuef" + + "íkfornegypskaekajúkelamítmiðenskaevondófangfilippseyskafóncajun-franska" + + "miðfranskafornfranskanorðurfrísneskaausturfrísneskafríúlskagagagásgajógb" + + "ajagísgilberskamiðháþýskafornháþýskagondígorontalógotneskagerbóforngrísk" + + "asvissnesk þýskagusiigvísínhaídahavaískahíligaínonhettitískahmonghásorbn" + + "eskahúpaíbanibibioílokóingúslojbanngombamasjámegyðingapersneskagyðingaar" + + "abískakarakalpakkabílekasínjjukambakavíkabardískatyapmakondegrænhöfðeysk" + + "akorokasíkotaskakoyra chiinikakokalenjinkimbúndúkómí-permyakkonkaníkosra" + + "skakpellekarasaíbalkarkarélskakúrúksjambalabafíakölnískakúmíkkútenaíladí" + + "nskalangílandalambalesgískalakótamongókreólska (Louisiana)lozinorðurlúrí" + + "luba-lulualúisenólúndalúólúsaíluyiamadúrskamagahímaítílímakasarmandingóm" + + "asaímoksamandarmendemerúmáritískamiðírskamakhuwa-meettometa’mikmakmínang" + + "kabámansjúmanípúrímóhískamossímundangmargvísleg málkríkmirandesískamarva" + + "ríersjamasanderanínapólískanamalágþýska; lágsaxneskanevaríníasníveskakwa" + + "siongiemboonnógaínorrænan’konorðursótónúerklassísk nevarískanjamvesínyan" + + "kolenjórónsímaósagetyrkneska, ottómanpangasínmálpalavípampangapapíamentó" + + "paláskanígerískt pidginfornpersneskafönikískaponpeiskaprússneskafornpróv" + + "ensalskakicherajastanírapanúírarótongskarombóromaníarúmenskarúasandaveja" + + "kútsamversk arameískasambúrúsasaksantalíngambaysangúsikileyskaskoskasuðu" + + "rkúrdískasenaselkúpkoíraboró-sennífornírskatachelhitsjansídamósuðursamís" + + "kalúlesamískaenaresamískaskoltesamískasóninkesogdíensranan tongoserersah" + + "osúkúmasúsúsúmerskashimaorískaklassísk sýrlenskasýrlenskatímnetesóterenó" + + "tetúmtígretívtókeláskaklingonskatlingittamasjektongverska (nyasa)tokpisi" + + "ntarókótsimsískatúmbúkatúvalúskatasawaqtúvínskatamazightúdmúrtúgarítíska" + + "úmbúndúóþekkt tungumálvaívotískavunjóvalservolayattavaraívasjóvarlpirik" + + "almúkskasógajaójapískayangbenyembakantoneskasapótekblisstáknsenagastaðla" + + "ð marokkóskt tamazightsúníekkert tungumálaefnizázáískastöðluð nútímaara" + + "bískaausturrísk þýskasvissnesk háþýskaáströlsk enskakanadísk enskabresk " + + "enskabandarísk enskarómönsk-amerísk spænskaevrópsk spænskamexíkósk spæns" + + "kakanadísk franskasvissnesk franskalágsaxneskaflæmskabrasílísk portúgals" + + "kaevrópsk portúgalskamoldóvskaserbókróatískaKongó-svahílíkínverska (einf" + + "ölduð)kínverska (hefðbundin)" + +var isLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0005, 0x000f, 0x0019, 0x0024, 0x0028, 0x0032, 0x003b, 0x0044, 0x004c, 0x0055, 0x005c, 0x0063, 0x006a, 0x0079, 0x0083, @@ -19566,68 +20932,68 @@ var isLangIdx = []uint16{ // 613 elements 0x0618, 0x0620, 0x0626, 0x0630, 0x0636, 0x063e, 0x0643, 0x064a, 0x0650, 0x0650, 0x065b, 0x0660, 0x066d, 0x0677, 0x0677, 0x067f, // Entry C0 - FF - 0x067f, 0x068e, 0x0697, 0x069e, 0x06a8, 0x06b4, 0x06b4, 0x06bc, - 0x06bc, 0x06bc, 0x06c5, 0x06c5, 0x06c5, 0x06c8, 0x06c8, 0x06d3, - 0x06d3, 0x06d9, 0x06e1, 0x06e9, 0x06e9, 0x06ed, 0x06f2, 0x06f2, - 0x06f2, 0x06f6, 0x06fb, 0x06fb, 0x06ff, 0x06ff, 0x06ff, 0x070d, - 0x0716, 0x071c, 0x0722, 0x0722, 0x0722, 0x0729, 0x0729, 0x0729, - 0x072e, 0x072e, 0x0734, 0x073b, 0x0743, 0x074c, 0x074c, 0x0751, - 0x0751, 0x0757, 0x0762, 0x0769, 0x076e, 0x0777, 0x077c, 0x0783, - 0x078c, 0x0796, 0x079b, 0x07a2, 0x07a9, 0x07b4, 0x07c1, 0x07c7, + 0x067f, 0x068e, 0x0697, 0x069e, 0x06a8, 0x06af, 0x06af, 0x06b7, + 0x06b7, 0x06b7, 0x06c0, 0x06c0, 0x06c0, 0x06c3, 0x06c3, 0x06ce, + 0x06ce, 0x06d4, 0x06dc, 0x06e4, 0x06e4, 0x06e8, 0x06ed, 0x06ed, + 0x06ed, 0x06f1, 0x06f6, 0x06f6, 0x06fa, 0x06fa, 0x06fa, 0x0708, + 0x0711, 0x0717, 0x071d, 0x071d, 0x071d, 0x0724, 0x0724, 0x0724, + 0x0729, 0x0729, 0x072f, 0x0736, 0x073e, 0x0747, 0x0747, 0x074c, + 0x074c, 0x0752, 0x075d, 0x0764, 0x0769, 0x0769, 0x0772, 0x0777, + 0x077e, 0x0787, 0x0791, 0x0796, 0x079d, 0x07a4, 0x07af, 0x07bc, // Entry 100 - 13F - 0x07d8, 0x07e1, 0x07e1, 0x07ef, 0x0807, 0x0812, 0x0819, 0x081f, - 0x0825, 0x082c, 0x0835, 0x083c, 0x0841, 0x0846, 0x084c, 0x0859, - 0x0859, 0x085f, 0x086c, 0x0876, 0x087c, 0x0882, 0x0886, 0x088b, - 0x088b, 0x0896, 0x089d, 0x08a4, 0x08ad, 0x08ad, 0x08b4, 0x08b4, - 0x08b8, 0x08c4, 0x08c4, 0x08c8, 0x08c8, 0x08d3, 0x08de, 0x08de, - 0x08ef, 0x08ff, 0x0909, 0x090b, 0x0911, 0x0911, 0x0916, 0x091b, - 0x091b, 0x091f, 0x0928, 0x0928, 0x0936, 0x0944, 0x0944, 0x094a, - 0x0954, 0x095c, 0x0962, 0x096d, 0x097e, 0x097e, 0x097e, 0x0983, + 0x07c2, 0x07d3, 0x07dc, 0x07dc, 0x07ea, 0x0802, 0x080d, 0x0814, + 0x081a, 0x0820, 0x0827, 0x0830, 0x0837, 0x083c, 0x0841, 0x0847, + 0x0854, 0x0854, 0x085a, 0x0867, 0x0871, 0x0877, 0x087d, 0x0881, + 0x0886, 0x0886, 0x0891, 0x0898, 0x089f, 0x08a8, 0x08a8, 0x08af, + 0x08af, 0x08b3, 0x08bf, 0x08bf, 0x08c3, 0x08d0, 0x08db, 0x08e6, + 0x08e6, 0x08f7, 0x0907, 0x0911, 0x0913, 0x0919, 0x0919, 0x091e, + 0x0923, 0x0923, 0x0927, 0x0930, 0x0930, 0x093e, 0x094c, 0x094c, + 0x0952, 0x095c, 0x0964, 0x096a, 0x0975, 0x0986, 0x0986, 0x0986, // Entry 140 - 17F - 0x098b, 0x0991, 0x0991, 0x099a, 0x099a, 0x09a6, 0x09b1, 0x09b6, - 0x09c2, 0x09c2, 0x09c7, 0x09cc, 0x09d2, 0x09d9, 0x09df, 0x09df, - 0x09df, 0x09e5, 0x09eb, 0x09f3, 0x0a04, 0x0a15, 0x0a15, 0x0a1f, - 0x0a26, 0x0a2c, 0x0a2f, 0x0a34, 0x0a39, 0x0a44, 0x0a44, 0x0a48, - 0x0a4f, 0x0a5f, 0x0a5f, 0x0a63, 0x0a63, 0x0a68, 0x0a6f, 0x0a7b, - 0x0a7b, 0x0a7b, 0x0a7f, 0x0a87, 0x0a91, 0x0a9f, 0x0aa7, 0x0aaf, - 0x0ab5, 0x0ac3, 0x0ac3, 0x0ac3, 0x0acc, 0x0ad3, 0x0adb, 0x0ae1, - 0x0aeb, 0x0af2, 0x0afb, 0x0b04, 0x0b0a, 0x0b0f, 0x0b14, 0x0b1d, + 0x098b, 0x0993, 0x0999, 0x0999, 0x09a2, 0x09a2, 0x09ae, 0x09b9, + 0x09be, 0x09ca, 0x09ca, 0x09cf, 0x09d4, 0x09da, 0x09e1, 0x09e7, + 0x09e7, 0x09e7, 0x09ed, 0x09f3, 0x09fb, 0x0a0c, 0x0a1d, 0x0a1d, + 0x0a27, 0x0a2e, 0x0a34, 0x0a37, 0x0a3c, 0x0a41, 0x0a4c, 0x0a4c, + 0x0a50, 0x0a57, 0x0a67, 0x0a67, 0x0a6b, 0x0a6b, 0x0a70, 0x0a77, + 0x0a83, 0x0a83, 0x0a83, 0x0a87, 0x0a8f, 0x0a99, 0x0aa7, 0x0aaf, + 0x0ab7, 0x0abd, 0x0acb, 0x0acb, 0x0acb, 0x0ad4, 0x0adb, 0x0ae3, + 0x0ae9, 0x0af3, 0x0afa, 0x0b03, 0x0b0c, 0x0b12, 0x0b17, 0x0b1c, // Entry 180 - 1BF - 0x0b1d, 0x0b1d, 0x0b1d, 0x0b24, 0x0b24, 0x0b2a, 0x0b2e, 0x0b3b, - 0x0b3b, 0x0b45, 0x0b4e, 0x0b54, 0x0b59, 0x0b60, 0x0b65, 0x0b65, - 0x0b65, 0x0b6e, 0x0b6e, 0x0b75, 0x0b7f, 0x0b86, 0x0b8f, 0x0b95, - 0x0b95, 0x0b9a, 0x0ba0, 0x0ba5, 0x0baa, 0x0bb5, 0x0bbf, 0x0bcd, - 0x0bd4, 0x0bda, 0x0be6, 0x0bed, 0x0bf8, 0x0c01, 0x0c07, 0x0c07, - 0x0c0e, 0x0c1e, 0x0c23, 0x0c30, 0x0c38, 0x0c38, 0x0c38, 0x0c3d, - 0x0c49, 0x0c49, 0x0c54, 0x0c58, 0x0c71, 0x0c78, 0x0c7d, 0x0c85, - 0x0c85, 0x0c8b, 0x0c94, 0x0c9b, 0x0ca3, 0x0ca3, 0x0ca9, 0x0cb6, + 0x0b25, 0x0b25, 0x0b25, 0x0b25, 0x0b2c, 0x0b2c, 0x0b32, 0x0b47, + 0x0b4b, 0x0b58, 0x0b58, 0x0b62, 0x0b6b, 0x0b71, 0x0b76, 0x0b7d, + 0x0b82, 0x0b82, 0x0b82, 0x0b8b, 0x0b8b, 0x0b92, 0x0b9c, 0x0ba3, + 0x0bac, 0x0bb2, 0x0bb2, 0x0bb7, 0x0bbd, 0x0bc2, 0x0bc7, 0x0bd2, + 0x0bdc, 0x0bea, 0x0bf1, 0x0bf7, 0x0c03, 0x0c0a, 0x0c15, 0x0c1e, + 0x0c24, 0x0c24, 0x0c2b, 0x0c3b, 0x0c40, 0x0c4d, 0x0c55, 0x0c55, + 0x0c55, 0x0c5a, 0x0c66, 0x0c66, 0x0c71, 0x0c75, 0x0c8e, 0x0c95, + 0x0c9a, 0x0ca2, 0x0ca2, 0x0ca8, 0x0cb1, 0x0cb8, 0x0cc0, 0x0cc0, // Entry 1C0 - 1FF - 0x0cbb, 0x0ccf, 0x0cd8, 0x0ce0, 0x0ce7, 0x0ced, 0x0cf3, 0x0d06, - 0x0d13, 0x0d1a, 0x0d22, 0x0d2e, 0x0d36, 0x0d36, 0x0d48, 0x0d48, - 0x0d48, 0x0d55, 0x0d55, 0x0d60, 0x0d60, 0x0d60, 0x0d69, 0x0d74, - 0x0d85, 0x0d8a, 0x0d8a, 0x0d94, 0x0d9d, 0x0da9, 0x0da9, 0x0da9, - 0x0daf, 0x0db6, 0x0db6, 0x0db6, 0x0db6, 0x0dc0, 0x0dc4, 0x0dcb, - 0x0dd1, 0x0de4, 0x0ded, 0x0df2, 0x0dfa, 0x0dfa, 0x0e01, 0x0e07, - 0x0e11, 0x0e17, 0x0e17, 0x0e27, 0x0e27, 0x0e2b, 0x0e2b, 0x0e32, - 0x0e44, 0x0e4e, 0x0e4e, 0x0e57, 0x0e5b, 0x0e5b, 0x0e63, 0x0e63, + 0x0cc6, 0x0cd3, 0x0cd8, 0x0cec, 0x0cf5, 0x0cfd, 0x0d04, 0x0d0a, + 0x0d10, 0x0d23, 0x0d30, 0x0d37, 0x0d3f, 0x0d4b, 0x0d53, 0x0d53, + 0x0d65, 0x0d65, 0x0d65, 0x0d72, 0x0d72, 0x0d7d, 0x0d7d, 0x0d7d, + 0x0d86, 0x0d91, 0x0da2, 0x0da7, 0x0da7, 0x0db1, 0x0dba, 0x0dc6, + 0x0dc6, 0x0dc6, 0x0dcc, 0x0dd3, 0x0dd3, 0x0dd3, 0x0dd3, 0x0ddd, + 0x0de1, 0x0de8, 0x0dee, 0x0e01, 0x0e0a, 0x0e0f, 0x0e17, 0x0e17, + 0x0e1e, 0x0e24, 0x0e2e, 0x0e34, 0x0e34, 0x0e44, 0x0e44, 0x0e48, + 0x0e48, 0x0e4f, 0x0e61, 0x0e6b, 0x0e6b, 0x0e74, 0x0e78, 0x0e78, // Entry 200 - 23F - 0x0e63, 0x0e71, 0x0e7e, 0x0e8b, 0x0e99, 0x0ea1, 0x0ea9, 0x0eb5, - 0x0eba, 0x0ebe, 0x0ebe, 0x0ec6, 0x0ecc, 0x0ed5, 0x0ee1, 0x0ef5, - 0x0eff, 0x0eff, 0x0eff, 0x0f05, 0x0f0a, 0x0f11, 0x0f17, 0x0f1d, - 0x0f21, 0x0f2c, 0x0f2c, 0x0f36, 0x0f3d, 0x0f3d, 0x0f45, 0x0f57, - 0x0f5f, 0x0f5f, 0x0f67, 0x0f67, 0x0f71, 0x0f71, 0x0f7a, 0x0f85, - 0x0f8c, 0x0f96, 0x0f9f, 0x0fa7, 0x0fb4, 0x0fbe, 0x0fc2, 0x0fc6, - 0x0fc6, 0x0fc6, 0x0fc6, 0x0fc6, 0x0fce, 0x0fce, 0x0fd4, 0x0fda, - 0x0fe1, 0x0fe7, 0x0fed, 0x0ff5, 0x0ff5, 0x0fff, 0x0fff, 0x1004, + 0x0e80, 0x0e80, 0x0e80, 0x0e8e, 0x0e9b, 0x0ea8, 0x0eb6, 0x0ebe, + 0x0ec6, 0x0ed2, 0x0ed7, 0x0edb, 0x0edb, 0x0ee3, 0x0ee9, 0x0ef2, + 0x0efe, 0x0f12, 0x0f1c, 0x0f1c, 0x0f1c, 0x0f22, 0x0f27, 0x0f2e, + 0x0f34, 0x0f3a, 0x0f3e, 0x0f49, 0x0f49, 0x0f53, 0x0f5a, 0x0f5a, + 0x0f62, 0x0f74, 0x0f7c, 0x0f7c, 0x0f84, 0x0f84, 0x0f8e, 0x0f8e, + 0x0f97, 0x0fa2, 0x0fa9, 0x0fb3, 0x0fbc, 0x0fc4, 0x0fd1, 0x0fdb, + 0x0fed, 0x0ff1, 0x0ff1, 0x0ff1, 0x0ff1, 0x0ff1, 0x0ff9, 0x0ff9, + 0x0fff, 0x1005, 0x100e, 0x1014, 0x101a, 0x1022, 0x1022, 0x102c, // Entry 240 - 27F - 0x1008, 0x1010, 0x1017, 0x101c, 0x101c, 0x1026, 0x102e, 0x1038, - 0x1038, 0x103e, 0x105d, 0x1063, 0x1078, 0x1083, 0x109f, 0x109f, - 0x10b2, 0x10c6, 0x10d6, 0x10e5, 0x10f0, 0x1100, 0x111b, 0x112c, - 0x113f, 0x113f, 0x1150, 0x1161, 0x116d, 0x1175, 0x118d, 0x11a2, - 0x11ac, 0x11bd, 0x11cd, 0x11e5, 0x11fd, -} // Size: 1250 bytes - -const itLangStr string = "" + // Size: 5026 bytes + 0x102c, 0x1031, 0x1035, 0x103d, 0x1044, 0x1049, 0x1049, 0x1053, + 0x105b, 0x1065, 0x1065, 0x106b, 0x108a, 0x1090, 0x10a5, 0x10b0, + 0x10cc, 0x10cc, 0x10df, 0x10f3, 0x1103, 0x1112, 0x111d, 0x112d, + 0x1148, 0x1159, 0x116c, 0x116c, 0x117d, 0x118e, 0x119a, 0x11a2, + 0x11ba, 0x11cf, 0x11d9, 0x11ea, 0x11fa, 0x1212, 0x122a, +} // Size: 1254 bytes + +const itLangStr string = "" + // Size: 5065 bytes "afarabcasoavestanafrikaansakanamaricoaragonesearaboassameseavaroaymaraaz" + "erbaigianobaschirobielorussobulgarobislamabambarabengalesetibetanobreton" + "ebosniacocatalanocecenochamorrocorsocreececoslavo della Chiesaciuvasciog" + @@ -19645,61 +21011,62 @@ const itLangStr string = "" + // Size: 5026 bytes "ciorundirumenorussokinyarwandasanscritosardosindhisami del nordsangosing" + "aleseslovaccoslovenosamoanoshonasomaloalbaneseserboswatisotho del sudsun" + "danesesvedeseswahilitamiltelugutagicothaitigrinoturcomannotswanatonganot" + - "urcotsongatatarotaitianouiguroucrainourduusbecovendavietnamitavolapükval" + + "urcotsongatatarotaitianouiguroucrainourduuzbecovendavietnamitavolapükval" + "lonewolofxhosayiddishyorubazhuangcinesezuluaccineseacioliadangmeadyghear" + "abo tunisinoafrihiliaghemainuaccadoalabamaaleutoalbanese ghegoaltai meri" + - "dionaleinglese anticoangikaaramaicomapuchearaonaarapahoarabo algerinoaru" + - "acoarabo marocchinoarabo egizianoasulingua dei segni americanaasturianok" + - "otavaawadhibelucibalinesebavaresebasabamunbatak tobaghomalabegiawembabet" + - "awibenabafutbadagabeluci occidentalebhojpuribicolbinibanjarkomsiksikabis" + - "hnupriyabakhtiaribrajbrahuibodoakooseburiatbugibulublinmedumbacaddocarib" + - "icocayugaatsamcebuanochigachibchaciagataicochuukesemarigergo chinookchoc" + - "tawchipewyancherokeecheyennecurdo soranicoptocapiznonturco crimeocreolo " + - "delle Seychelleskashubiandakotadargwataitadelawareslavedogribdincazarmad" + - "ogribasso sorabodusun centraledualaolandese mediojola-fonydiuladazagaemb" + - "uefikemilianoegiziano anticoekajukaelamiticoinglese medioyupik centralee" + - "wondoestremegnofangfilippinofinlandese del Tornedalenfonfrancese cajunfr" + - "ancese mediofrancese anticofrancoprovenzalefrisone settentrionalefrisone" + - " orientalefriulanogagagauzogangayogbayadari zoroastrianogeezgilbertesegi" + - "lakitedesco medio altotedesco antico altokonkani goanogondigorontalogoti" + - "cogrebogreco anticotedesco svizzerowayuugusiigwichʼinhaidahakkahawaianoh" + - "indi figianoilongohittitehmongalto soraboxianghupaibanibibioilocanoingus" + - "hingricocreolo giamaicanolojbanngamambomachamegiudeo persianogiudeo arab" + - "ojutlandicokara-kalpakcabilokachinkaikambakawicabardinokanembutyapmakond" + - "ecapoverdianokorokaingangkhasikhotanesekoyra chiinikhowarkirmanjkikakoka" + - "lenjinkimbundupermiacokonkanikosraeankpellekarachay-Balkarcarelianokuruk" + - "hshambalabafiacoloniesekumykkutenaigiudeo-spagnololangilahndalambalesgoL" + - "ingua Franca Novaligurelivonelakotalombardololo bantuloziluri settentrio" + - "naleletgalloluba-lulualuisenolundaluolushailuyiacinese classicolazmadure" + - "semafamagahimaithilimakasarmandingomasaimabamokshamandarmendemerucreolo " + - "maurizianoirlandese mediomakhuwa-meettometa’micmacmenangkabaumanchumanip" + - "urimohawkmossimari occidentalemundangmultilinguacreekmirandesemarwarimen" + - "tawaimyeneerzyamazandaranimin nannapoletanonamabasso tedesconewariniasni" + - "ueaokwasiongiemboonnogainorse anticonovialn’kosotho del nordnuernewari c" + - "lassiconyamwezinyankolenyoronzimaosageturco ottomanopangasinanpahlavipam" + - "pangapapiamentopalaupiccardopidgin nigerianotedesco della Pennsylvaniape" + - "rsiano anticotedesco palatinofeniciopiemonteseponticoponapeprussianoprov" + - "enzale anticok’iche’quechua dell’altopiano del Chimborazorajasthanirapan" + - "uirarotongaromagnolotarifitromboromanirotumanorutenorovianaarumenorwasan" + - "daweyakutaramaico samaritanosamburusasaksantalisaurashtrangambaysangusic" + - "ilianoscozzesesassaresecurdo meridionalesenecasenaseriselkupkoyraboro se" + - "nniirlandese anticosamogiticotashelhitshanarabo ciadianosidamotedesco sl" + - "esianoselayarsami del sudsami di Lulesami di Inarisami skoltsoninkesogdi" + - "anosranan tongoserersahosaterfriesischsukumasususumerocomorianosiriaco c" + - "lassicosiriacoslesianotulutemnetesoterenotetumtigretivtokelautsakhurklin" + - "gontlingittalisciotamasheknyasa del Tongatok pisinturoyotarokozaconicots" + - "imshiantat islamicotumbukatuvalutasawaqtuviniantamazightudmurtugariticom" + - "bundurootvaivenetovepsofiammingo occidentalevotovõrovunjowalserwalamowar" + - "aywashowarlpiriwukalmykmengreliosogayao (bantu)yapeseyangbenyembanheenga" + - "tucantonesezapotecblissymbolzelandesezenagatamazight del Marocco standar" + - "dzuninessun contenuto linguisticozazaarabo moderno standardtedesco austr" + - "iacoalto tedesco svizzeroinglese australianoinglese canadeseinglese brit" + - "annicoinglese americanospagnolo latinoamericanospagnolo europeospagnolo " + - "messicanofrancese canadesefrancese svizzerobasso tedesco olandesefiammin" + - "goportoghese brasilianoportoghese europeomoldavoserbo-croatoswahili del " + - "Congocinese semplificatocinese tradizionale" - -var itLangIdx = []uint16{ // 613 elements + "dionaleinglese anticoangikaaramaicomapudungunaraonaarapahoarabo algerino" + + "aruacoarabo marocchinoarabo egizianoasulingua dei segni americanaasturia" + + "nokotavaawadhibelucibalinesebavaresebasabamunbatak tobaghomalabegiawemba" + + "betawibenabafutbadagabeluci occidentalebhojpuribicolbinibanjarkomsiksika" + + "bishnupriyabakhtiaribrajbrahuibodoakooseburiatbugibulublinmedumbacaddoca" + + "ribicocayugaatsamcebuanochigachibchaciagataicochuukesemarigergo chinookc" + + "hoctawchipewyancherokeecheyennecurdo soranicoptocapiznonturco crimeocreo" + + "lo delle Seychelleskashubiandakotadargwataitadelawareslavedogribdincazar" + + "madogribasso sorabodusun centraledualaolandese mediojola-fonydiuladazaga" + + "embuefikemilianoegiziano anticoekajukaelamiticoinglese medioyupik centra" + + "leewondoestremegnofangfilippinofinlandese del Tornedalenfonfrancese caju" + + "nfrancese mediofrancese anticofrancoprovenzalefrisone settentrionalefris" + + "one orientalefriulanogagagauzogangayogbayadari zoroastrianogeezgilbertes" + + "egilakitedesco medio altotedesco antico altokonkani goanogondigorontalog" + + "oticogrebogreco anticotedesco svizzerowayuugusiigwichʼinhaidahakkahawaia" + + "nohindi figianoilongohittitehmongalto soraboxianghupaibanibibioilocanoin" + + "gushingricocreolo giamaicanolojbanngamambomachamegiudeo persianogiudeo a" + + "rabojutlandicokara-kalpakcabilokachinkaikambakawicabardinokanembutyapmak" + + "ondecapoverdianokorokaingangkhasikhotanesekoyra chiinikhowarkirmanjkikak" + + "okalenjinkimbundupermiacokonkanikosraeankpellekarachay-Balkarcarelianoku" + + "rukhshambalabafiacoloniesekumykkutenaigiudeo-spagnololangilahndalambales" + + "goLingua Franca Novaligurelivonelakotalombardololo bantucreolo della Lou" + + "isianaloziluri settentrionaleletgalloluba-lulualuisenolundaluolushailuyi" + + "acinese classicolazmaduresemafamagahimaithilimakasarmandingomasaimabamok" + + "shamandarmendemerucreolo maurizianoirlandese mediomakhuwa-meettometa’mic" + + "macmenangkabaumanchumanipurimohawkmossimari occidentalemundangmultilingu" + + "acreekmirandesemarwarimentawaimyeneerzyamazandaranimin nannapoletanonama" + + "basso tedesconewariniasniueaokwasiongiemboonnogainorse anticonovialn’kos" + + "otho del nordnuernewari classiconyamwezinyankolenyoronzimaosageturco ott" + + "omanopangasinanpahlavipampangapapiamentopalaupiccardopidgin nigerianoted" + + "esco della Pennsylvaniapersiano anticotedesco palatinofeniciopiemontesep" + + "onticoponapeprussianoprovenzale anticok’iche’quechua dell’altopiano del " + + "Chimborazorajasthanirapanuirarotongaromagnolotarifitromboromanirotumanor" + + "utenorovianaarumenorwasandaweyakutaramaico samaritanosamburusasaksantali" + + "saurashtrangambaysangusicilianoscozzesesassaresecurdo meridionalesenecas" + + "enaseriselkupkoyraboro senniirlandese anticosamogiticotashelhitshanarabo" + + " ciadianosidamotedesco slesianoselayarsami del sudsami di Lulesami di In" + + "arisami skoltsoninkesogdianosranan tongoserersahosaterfriesischsukumasus" + + "usumerocomorianosiriaco classicosiriacoslesianotulutemnetesoterenotetumt" + + "igretivtokelautsakhurklingontlingittalisciotamasheknyasa del Tongatok pi" + + "sinturoyotarokozaconicotsimshiantat islamicotumbukatuvalutasawaqtuvinian" + + "tamazightudmurtugariticombundulingua imprecisatavaivenetovepsofiammingo " + + "occidentalevotovõrovunjowalserwalamowaraywashowarlpiriwukalmykmengrelios" + + "ogayao (bantu)yapeseyangbenyembanheengatucantonesezapotecblissymbolzelan" + + "desezenagatamazight del Marocco standardzuninessun contenuto linguistico" + + "zazaarabo moderno standardtedesco austriacoalto tedesco svizzeroinglese " + + "australianoinglese canadeseinglese britannicoinglese americanospagnolo l" + + "atinoamericanospagnolo europeospagnolo messicanofrancese canadesefrances" + + "e svizzerobasso tedesco olandesefiammingoportoghese brasilianoportoghese" + + " europeomoldavoserbo-croatoswahili del Congocinese semplificatocinese tr" + + "adizionale" + +var itLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0004, 0x000a, 0x0011, 0x001a, 0x001e, 0x0025, 0x002e, 0x0033, 0x003b, 0x0040, 0x0046, 0x0052, 0x005a, 0x0064, 0x006b, @@ -19728,119 +21095,119 @@ var itLangIdx = []uint16{ // 613 elements 0x0528, 0x052e, 0x0534, 0x053a, 0x053e, 0x0546, 0x054c, 0x0553, 0x0559, 0x0567, 0x056f, 0x0574, 0x0578, 0x057e, 0x0585, 0x058b, // Entry C0 - FF - 0x0599, 0x05aa, 0x05b8, 0x05be, 0x05c6, 0x05cd, 0x05d3, 0x05da, - 0x05e8, 0x05e8, 0x05ee, 0x05fe, 0x060c, 0x060f, 0x0629, 0x0632, - 0x0638, 0x063e, 0x0644, 0x064c, 0x0654, 0x0658, 0x065d, 0x0667, - 0x066e, 0x0673, 0x0678, 0x067e, 0x0682, 0x0687, 0x068d, 0x069f, - 0x06a7, 0x06ac, 0x06b0, 0x06b6, 0x06b9, 0x06c0, 0x06cb, 0x06d4, - 0x06d8, 0x06de, 0x06e2, 0x06e8, 0x06ee, 0x06f2, 0x06f6, 0x06fa, - 0x0701, 0x0706, 0x070e, 0x0714, 0x0719, 0x0720, 0x0725, 0x072c, - 0x0736, 0x073e, 0x0742, 0x074f, 0x0756, 0x075f, 0x0767, 0x076f, + 0x0599, 0x05aa, 0x05b8, 0x05be, 0x05c6, 0x05d0, 0x05d6, 0x05dd, + 0x05eb, 0x05eb, 0x05f1, 0x0601, 0x060f, 0x0612, 0x062c, 0x0635, + 0x063b, 0x0641, 0x0647, 0x064f, 0x0657, 0x065b, 0x0660, 0x066a, + 0x0671, 0x0676, 0x067b, 0x0681, 0x0685, 0x068a, 0x0690, 0x06a2, + 0x06aa, 0x06af, 0x06b3, 0x06b9, 0x06bc, 0x06c3, 0x06ce, 0x06d7, + 0x06db, 0x06e1, 0x06e5, 0x06eb, 0x06f1, 0x06f5, 0x06f9, 0x06fd, + 0x0704, 0x0709, 0x0711, 0x0717, 0x071c, 0x071c, 0x0723, 0x0728, + 0x072f, 0x0739, 0x0741, 0x0745, 0x0752, 0x0759, 0x0762, 0x076a, // Entry 100 - 13F - 0x077b, 0x0780, 0x0788, 0x0794, 0x07ab, 0x07b4, 0x07ba, 0x07c0, - 0x07c5, 0x07cd, 0x07d2, 0x07d8, 0x07dd, 0x07e2, 0x07e7, 0x07f3, - 0x0801, 0x0806, 0x0814, 0x081d, 0x0822, 0x0828, 0x082c, 0x0830, - 0x0838, 0x0847, 0x084e, 0x0857, 0x0864, 0x0872, 0x0878, 0x0882, - 0x0886, 0x088f, 0x08a8, 0x08ab, 0x08b9, 0x08c7, 0x08d6, 0x08e6, - 0x08fc, 0x090d, 0x0915, 0x0917, 0x091e, 0x0921, 0x0925, 0x092a, - 0x093b, 0x093f, 0x0949, 0x094f, 0x0961, 0x0974, 0x0981, 0x0986, - 0x098f, 0x0995, 0x099a, 0x09a6, 0x09b6, 0x09bb, 0x09bb, 0x09c0, + 0x0772, 0x077e, 0x0783, 0x078b, 0x0797, 0x07ae, 0x07b7, 0x07bd, + 0x07c3, 0x07c8, 0x07d0, 0x07d5, 0x07db, 0x07e0, 0x07e5, 0x07ea, + 0x07f6, 0x0804, 0x0809, 0x0817, 0x0820, 0x0825, 0x082b, 0x082f, + 0x0833, 0x083b, 0x084a, 0x0851, 0x085a, 0x0867, 0x0875, 0x087b, + 0x0885, 0x0889, 0x0892, 0x08ab, 0x08ae, 0x08bc, 0x08ca, 0x08d9, + 0x08e9, 0x08ff, 0x0910, 0x0918, 0x091a, 0x0921, 0x0924, 0x0928, + 0x092d, 0x093e, 0x0942, 0x094c, 0x0952, 0x0964, 0x0977, 0x0984, + 0x0989, 0x0992, 0x0998, 0x099d, 0x09a9, 0x09b9, 0x09be, 0x09be, // Entry 140 - 17F - 0x09c9, 0x09ce, 0x09d3, 0x09db, 0x09e8, 0x09ee, 0x09f5, 0x09fa, - 0x0a05, 0x0a0a, 0x0a0e, 0x0a12, 0x0a18, 0x0a1f, 0x0a25, 0x0a2c, - 0x0a3d, 0x0a43, 0x0a4b, 0x0a52, 0x0a61, 0x0a6d, 0x0a77, 0x0a82, - 0x0a88, 0x0a8e, 0x0a91, 0x0a96, 0x0a9a, 0x0aa3, 0x0aaa, 0x0aae, - 0x0ab5, 0x0ac1, 0x0ac1, 0x0ac5, 0x0acd, 0x0ad2, 0x0adb, 0x0ae7, - 0x0aed, 0x0af6, 0x0afa, 0x0b02, 0x0b0a, 0x0b12, 0x0b19, 0x0b21, - 0x0b27, 0x0b36, 0x0b36, 0x0b36, 0x0b3f, 0x0b45, 0x0b4d, 0x0b52, - 0x0b5b, 0x0b60, 0x0b67, 0x0b76, 0x0b7b, 0x0b81, 0x0b86, 0x0b8b, + 0x09c3, 0x09cc, 0x09d1, 0x09d6, 0x09de, 0x09eb, 0x09f1, 0x09f8, + 0x09fd, 0x0a08, 0x0a0d, 0x0a11, 0x0a15, 0x0a1b, 0x0a22, 0x0a28, + 0x0a2f, 0x0a40, 0x0a46, 0x0a4e, 0x0a55, 0x0a64, 0x0a70, 0x0a7a, + 0x0a85, 0x0a8b, 0x0a91, 0x0a94, 0x0a99, 0x0a9d, 0x0aa6, 0x0aad, + 0x0ab1, 0x0ab8, 0x0ac4, 0x0ac4, 0x0ac8, 0x0ad0, 0x0ad5, 0x0ade, + 0x0aea, 0x0af0, 0x0af9, 0x0afd, 0x0b05, 0x0b0d, 0x0b15, 0x0b1c, + 0x0b24, 0x0b2a, 0x0b39, 0x0b39, 0x0b39, 0x0b42, 0x0b48, 0x0b50, + 0x0b55, 0x0b5e, 0x0b63, 0x0b6a, 0x0b79, 0x0b7e, 0x0b84, 0x0b89, // Entry 180 - 1BF - 0x0b9d, 0x0ba3, 0x0ba9, 0x0baf, 0x0bb7, 0x0bc1, 0x0bc5, 0x0bd8, - 0x0be0, 0x0bea, 0x0bf1, 0x0bf6, 0x0bf9, 0x0bff, 0x0c04, 0x0c13, - 0x0c16, 0x0c1e, 0x0c22, 0x0c28, 0x0c30, 0x0c37, 0x0c3f, 0x0c44, - 0x0c48, 0x0c4e, 0x0c54, 0x0c59, 0x0c5d, 0x0c6e, 0x0c7d, 0x0c8b, - 0x0c92, 0x0c98, 0x0ca3, 0x0ca9, 0x0cb1, 0x0cb7, 0x0cbc, 0x0ccc, - 0x0cd3, 0x0cde, 0x0ce3, 0x0cec, 0x0cf3, 0x0cfb, 0x0d00, 0x0d05, - 0x0d10, 0x0d17, 0x0d21, 0x0d25, 0x0d32, 0x0d38, 0x0d3c, 0x0d40, - 0x0d42, 0x0d48, 0x0d51, 0x0d56, 0x0d62, 0x0d68, 0x0d6e, 0x0d7c, + 0x0b8e, 0x0ba0, 0x0ba6, 0x0bac, 0x0bb2, 0x0bba, 0x0bc4, 0x0bda, + 0x0bde, 0x0bf1, 0x0bf9, 0x0c03, 0x0c0a, 0x0c0f, 0x0c12, 0x0c18, + 0x0c1d, 0x0c2c, 0x0c2f, 0x0c37, 0x0c3b, 0x0c41, 0x0c49, 0x0c50, + 0x0c58, 0x0c5d, 0x0c61, 0x0c67, 0x0c6d, 0x0c72, 0x0c76, 0x0c87, + 0x0c96, 0x0ca4, 0x0cab, 0x0cb1, 0x0cbc, 0x0cc2, 0x0cca, 0x0cd0, + 0x0cd5, 0x0ce5, 0x0cec, 0x0cf7, 0x0cfc, 0x0d05, 0x0d0c, 0x0d14, + 0x0d19, 0x0d1e, 0x0d29, 0x0d30, 0x0d3a, 0x0d3e, 0x0d4b, 0x0d51, + 0x0d55, 0x0d59, 0x0d5b, 0x0d61, 0x0d6a, 0x0d6f, 0x0d7b, 0x0d81, // Entry 1C0 - 1FF - 0x0d80, 0x0d8f, 0x0d97, 0x0d9f, 0x0da4, 0x0da9, 0x0dae, 0x0dbc, - 0x0dc6, 0x0dcd, 0x0dd5, 0x0ddf, 0x0de4, 0x0dec, 0x0dfc, 0x0e16, - 0x0e16, 0x0e25, 0x0e35, 0x0e3c, 0x0e46, 0x0e4d, 0x0e53, 0x0e5c, - 0x0e6d, 0x0e78, 0x0e9f, 0x0ea9, 0x0eb0, 0x0eb9, 0x0ec2, 0x0ec9, - 0x0ece, 0x0ed4, 0x0edc, 0x0ee2, 0x0ee9, 0x0ef0, 0x0ef3, 0x0efa, - 0x0eff, 0x0f12, 0x0f19, 0x0f1e, 0x0f25, 0x0f2f, 0x0f36, 0x0f3b, - 0x0f44, 0x0f4c, 0x0f55, 0x0f66, 0x0f6c, 0x0f70, 0x0f74, 0x0f7a, - 0x0f89, 0x0f99, 0x0fa3, 0x0fac, 0x0fb0, 0x0fbe, 0x0fc4, 0x0fd4, + 0x0d87, 0x0d95, 0x0d99, 0x0da8, 0x0db0, 0x0db8, 0x0dbd, 0x0dc2, + 0x0dc7, 0x0dd5, 0x0ddf, 0x0de6, 0x0dee, 0x0df8, 0x0dfd, 0x0e05, + 0x0e15, 0x0e2f, 0x0e2f, 0x0e3e, 0x0e4e, 0x0e55, 0x0e5f, 0x0e66, + 0x0e6c, 0x0e75, 0x0e86, 0x0e91, 0x0eb8, 0x0ec2, 0x0ec9, 0x0ed2, + 0x0edb, 0x0ee2, 0x0ee7, 0x0eed, 0x0ef5, 0x0efb, 0x0f02, 0x0f09, + 0x0f0c, 0x0f13, 0x0f18, 0x0f2b, 0x0f32, 0x0f37, 0x0f3e, 0x0f48, + 0x0f4f, 0x0f54, 0x0f5d, 0x0f65, 0x0f6e, 0x0f7f, 0x0f85, 0x0f89, + 0x0f8d, 0x0f93, 0x0fa2, 0x0fb2, 0x0fbc, 0x0fc5, 0x0fc9, 0x0fd7, // Entry 200 - 23F - 0x0fdb, 0x0fe7, 0x0ff3, 0x1000, 0x100a, 0x1011, 0x1019, 0x1025, - 0x102a, 0x102e, 0x103c, 0x1042, 0x1046, 0x104c, 0x1055, 0x1065, - 0x106c, 0x1074, 0x1078, 0x107d, 0x1081, 0x1087, 0x108c, 0x1091, - 0x1094, 0x109b, 0x10a2, 0x10a9, 0x10b0, 0x10b8, 0x10c0, 0x10cf, - 0x10d8, 0x10de, 0x10e4, 0x10ec, 0x10f5, 0x1101, 0x1108, 0x110e, - 0x1115, 0x111d, 0x1126, 0x112c, 0x1135, 0x113b, 0x113f, 0x1142, - 0x1148, 0x114d, 0x1162, 0x1162, 0x1166, 0x116b, 0x1170, 0x1176, - 0x117c, 0x1181, 0x1186, 0x118e, 0x1190, 0x1196, 0x119f, 0x11a3, + 0x0fdd, 0x0fed, 0x0ff4, 0x1000, 0x100c, 0x1019, 0x1023, 0x102a, + 0x1032, 0x103e, 0x1043, 0x1047, 0x1055, 0x105b, 0x105f, 0x1065, + 0x106e, 0x107e, 0x1085, 0x108d, 0x1091, 0x1096, 0x109a, 0x10a0, + 0x10a5, 0x10aa, 0x10ad, 0x10b4, 0x10bb, 0x10c2, 0x10c9, 0x10d1, + 0x10d9, 0x10e8, 0x10f1, 0x10f7, 0x10fd, 0x1105, 0x110e, 0x111a, + 0x1121, 0x1127, 0x112e, 0x1136, 0x113f, 0x1145, 0x114e, 0x1154, + 0x1166, 0x1169, 0x116f, 0x1174, 0x1189, 0x1189, 0x118d, 0x1192, + 0x1197, 0x119d, 0x11a3, 0x11a8, 0x11ad, 0x11b5, 0x11b7, 0x11bd, // Entry 240 - 27F - 0x11ae, 0x11b4, 0x11bb, 0x11c0, 0x11c9, 0x11d2, 0x11d9, 0x11e3, - 0x11ec, 0x11f2, 0x1210, 0x1214, 0x1230, 0x1234, 0x124a, 0x124a, - 0x125b, 0x1270, 0x1283, 0x1293, 0x12a5, 0x12b6, 0x12ce, 0x12de, - 0x12f0, 0x12f0, 0x1301, 0x1312, 0x1328, 0x1331, 0x1346, 0x1358, - 0x135f, 0x136b, 0x137c, 0x138f, 0x13a2, -} // Size: 1250 bytes - -const jaLangStr string = "" + // Size: 10070 bytes + 0x11c6, 0x11ca, 0x11d5, 0x11db, 0x11e2, 0x11e7, 0x11f0, 0x11f9, + 0x1200, 0x120a, 0x1213, 0x1219, 0x1237, 0x123b, 0x1257, 0x125b, + 0x1271, 0x1271, 0x1282, 0x1297, 0x12aa, 0x12ba, 0x12cc, 0x12dd, + 0x12f5, 0x1305, 0x1317, 0x1317, 0x1328, 0x1339, 0x134f, 0x1358, + 0x136d, 0x137f, 0x1386, 0x1392, 0x13a3, 0x13b6, 0x13c9, +} // Size: 1254 bytes + +const jaLangStr string = "" + // Size: 10113 bytes "アファル語アブハズ語アヴェスタ語アフリカーンス語アカン語アムハラ語アラゴン語アラビア語アッサム語アヴァル語アイマラ語アゼルバイジャン語バシキール" + "語ベラルーシ語ブルガリア語ビスラマ語バンバラ語ベンガル語チベット語ブルトン語ボスニア語カタロニア語チェチェン語チャモロ語コルシカ語クリー語チ" + "ェコ語教会スラブ語チュヴァシ語ウェールズ語デンマーク語ドイツ語ディベヒ語ゾンカ語エウェ語ギリシャ語英語エスペラント語スペイン語エストニア語バ" + "スク語ペルシア語フラ語フィンランド語フィジー語フェロー語フランス語西フリジア語アイルランド語スコットランド・ゲール語ガリシア語グアラニー語グ" + - "ジャラート語マン島語ハウサ語ヘブライ語ヒンディー語ヒリモツ語クロアチア語ハイチ語ハンガリー語アルメニア語ヘレロ語インターリングアインドネシア" + - "語インターリングイボ語四川イ語イヌピアック語イド語アイスランド語イタリア語イヌクウティトット語日本語ジャワ語ジョージア語コンゴ語キクユ語クワ" + - "ニャマ語カザフ語グリーンランド語クメール語カンナダ語韓国語カヌリ語カシミール語クルド語コミ語コーンウォール語キルギス語ラテン語ルクセンブルク" + - "語ガンダ語リンブルフ語リンガラ語ラオ語リトアニア語ルバ・カタンガ語ラトビア語マダガスカル語マーシャル語マオリ語マケドニア語マラヤーラム語モン" + - "ゴル語マラーティー語マレー語マルタ語ミャンマー語ナウル語北ンデベレ語ネパール語ンドンガ語オランダ語ノルウェー語(ニーノシュク)ノルウェー語(" + - "ブークモール)南ンデベレ語ナバホ語ニャンジャ語オック語オジブウェー語オロモ語オリヤー語オセット語パンジャブ語パーリ語ポーランド語パシュトゥー" + - "語ポルトガル語ケチュア語ロマンシュ語ルンディ語ルーマニア語ロシア語キニアルワンダ語サンスクリット語サルデーニャ語シンド語北サーミ語サンゴ語シ" + - "ンハラ語スロバキア語スロベニア語サモア語ショナ語ソマリ語アルバニア語セルビア語スワジ語南部ソト語スンダ語スウェーデン語スワヒリ語タミル語テル" + - "グ語タジク語タイ語ティグリニア語トルクメン語ツワナ語トンガ語トルコ語ツォンガ語タタール語タヒチ語ウイグル語ウクライナ語ウルドゥー語ウズベク語" + - "ベンダ語ベトナム語ヴォラピュク語ワロン語ウォロフ語コサ語イディッシュ語ヨルバ語チワン語中国語ズールー語アチェ語アチョリ語アダングメ語アディゲ" + - "語チュニジア・アラビア語アフリヒリ語アゲム語アイヌ語アッカド語アラバマ語アレウト語ゲグ・アルバニア語南アルタイ語古英語アンギカ語アラム語マプ" + - "チェ語アラオナ語アラパホー語アルジェリア・アラビア語アラワク語モロッコ・アラビア語エジプト・アラビア語アス語アメリカ手話アストゥリアス語コタ" + - "ヴァアワディー語バルーチー語バリ語バイエルン・オーストリア語バサ語バムン語トバ・バタク語ゴーマラ語ベジャ語ベンバ語ベタウィ語ベナ語バフット語" + - "バダガ語西バローチー語ボージュプリー語ビコル語ビニ語バンジャル語コム語シクシカ語ビシュヌプリヤ・マニプリ語バフティヤーリー語ブラジ語ブラフイ" + - "語ボド語アコース語ブリヤート語ブギ語ブル語ビリン語メドゥンバ語カドー語カリブ語カユーガ語チャワイ語セブアノ語チガ語チブチャ語チャガタイ語チュ" + - "ーク語マリ語チヌーク混成語チョクトー語チペワイアン語チェロキー語シャイアン語クルド語(ソラニー)コプト語カピス語クリミア・タタール語セーシェ" + - "ル・クレオール語カシューブ語ダコタ語ダルガン語タイタ語デラウェア語スレイビー語ドグリブ語ディンカ語ザルマ語ドーグリー語低地ソルブ語中央ドゥス" + - "ン語ドゥアラ語中世オランダ語ジョラ=フォニィ語ジュラ語ダザガ語エンブ語エフィク語エミリア語古代エジプト語エカジュク語エラム語中英語中央アラス" + - "カ・ユピック語エウォンド語エストレマドゥーラ語ファング語フィリピノ語トルネダール・フィンランド語フォン語ケイジャン・フランス語中期フランス語" + - "古フランス語アルピタン語北フリジア語東フリジア語フリウリ語ガ語ガガウズ語贛語ガヨ語バヤ語ダリー語(ゾロアスター教)ゲエズ語キリバス語ギラキ語" + - "中高ドイツ語古高ドイツ語ゴア・コンカニ語ゴーンディー語ゴロンタロ語ゴート語グレボ語古代ギリシャ語スイスドイツ語ワユ語フラフラ語グシイ語グウィ" + - "ッチン語ハイダ語客家語ハワイ語フィジー・ヒンディー語ヒリガイノン語ヒッタイト語フモン語高地ソルブ語湘語フパ語イバン語イビビオ語イロカノ語イン" + - "グーシ語イングリア語ジャマイカ・クレオール語ロジバン語ンゴンバ語マチャメ語ユダヤ・ペルシア語ユダヤ・アラビア語ユトランド語カラカルパク語カビ" + - "ル語カチン語カジェ語カンバ語カウィ語カバルド語カネンブ語カタブ語マコンデ語カーボベルデ・クレオール語ニャン語コロ語カインガング語カシ語コータ" + - "ン語コイラ・チーニ語コワール語キルマンジュキ語カコ語カレンジン語キンブンド語コミ・ペルミャク語コンカニ語コスラエ語クペレ語カラチャイ・バルカ" + - "ル語クリオ語キナライア語カレリア語クルク語サンバー語バフィア語ケルン語クムク語クテナイ語ラディノ語ランギ語ラフンダー語ランバ語レズギ語リング" + - "ア・フランカ・ノバリグリア語リヴォニア語ラコタ語ロンバルド語モンゴ語ロジ語北ロル語ラトガリア語ルバ・ルルア語ルイセーニョ語ルンダ語ルオ語ルシ" + - "ャイ語ルヒヤ語漢文ラズ語マドゥラ語マファ語マガヒー語マイティリー語マカッサル語マンディンゴ語マサイ語マバ語モクシャ語マンダル語メンデ語メル語" + - "モーリシャス・クレオール語中期アイルランド語マクア・ミート語メタ語ミクマク語ミナンカバウ語満州語マニプリ語モーホーク語モシ語山地マリ語ムンダ" + - "ン語複数言語クリーク語ミランダ語マールワーリー語メンタワイ語ミエネ語エルジャ語マーザンダラーン語閩南語ナポリ語ナマ語低地ドイツ語ネワール語ニ" + - "アス語ニウーエイ語アオ・ナガ語クワシオ語ンジエムブーン語ノガイ語古ノルド語ノヴィアルンコ語北部ソト語ヌエル語古典ネワール語ニャムウェジ語ニャ" + - "ンコレ語ニョロ語ンゼマ語オセージ語オスマントルコ語パンガシナン語パフラヴィー語パンパンガ語パピアメント語パラオ語ピカルディ語ナイジェリア・ピ" + - "ジン語ペンシルベニア・ドイツ語メノナイト低地ドイツ語古代ペルシア語プファルツ語フェニキア語ピエモンテ語ポントス・ギリシャ語ポンペイ語プロシア" + - "語古期プロバンス語キチェ語チンボラソ高地ケチュア語ラージャスターン語ラパヌイ語ラロトンガ語ロマーニャ語リーフ語ロンボ語ロマーニー語ロツマ語ル" + - "シン語ロヴィアナ語アルーマニア語ルワ語サンダウェ語サハ語サマリア・アラム語サンブル語ササク語サンターリー語サウラーシュトラ語ンガムバイ語サン" + - "グ語シチリア語スコットランド語サッサリ・サルデーニャ語南部クルド語セネカ語セナ語セリ語セリクプ語コイラボロ・センニ語古アイルランド語サモギテ" + - "ィア語タシルハイト語シャン語チャド・アラビア語シダモ語低シレジア語スラヤール語南サーミ語ルレ・サーミ語イナリ・サーミ語スコルト・サーミ語ソニ" + - "ンケ語ソグド語スリナム語セレル語サホ語ザーターフリジア語スクマ語スス語シュメール語コモロ語古典シリア語シリア語シレジア語トゥル語テムネ語テソ" + - "語テレーノ語テトゥン語ティグレ語ティブ語トケラウ語ツァフル語クリンゴン語トリンギット語タリシュ語タマシェク語トンガ語(ニアサ)トク・ピシン語" + - "トゥロヨ語タロコ語ツァコン語チムシュ語ムスリム・タタール語トゥンブカ語ツバル語タサワク語トゥヴァ語中央アトラス・タマジクト語ウドムルト語ウガ" + - "リト語ムブンドゥ語ルートヴァイ語ヴェネト語ヴェプス語西フラマン語マインフランク語ヴォート語ヴォロ語ヴンジョ語ヴァリス語ウォライタ語ワライ語ワ" + - "ショ語ワルピリ語呉語カルムイク語メグレル語ソガ語ヤオ語ヤップ語ヤンベン語イエンバ語ニェエンガトゥ語広東語サポテカ語ブリスシンボルゼーラント語" + - "ゼナガ語標準モロッコ タマジクト語ズニ語言語的内容なしザザ語現代標準アラビア語標準ドイツ語 (スイス)オーストラリア英語カナダ英語イギリス英" + - "語アメリカ英語スペイン語 (イベリア半島)フレミッシュ語ポルトガル語 (イベリア半島)モルダビア語セルボ・クロアチア語コンゴ・スワヒリ語簡体" + - "中国語繁体中国語" - -var jaLangIdx = []uint16{ // 613 elements + "ジャラート語マン島語ハウサ語ヘブライ語ヒンディー語ヒリモツ語クロアチア語ハイチ・クレオール語ハンガリー語アルメニア語ヘレロ語インターリングア" + + "インドネシア語インターリングイボ語四川イ語イヌピアック語イド語アイスランド語イタリア語イヌクウティトット語日本語ジャワ語ジョージア語コンゴ語" + + "キクユ語クワニャマ語カザフ語グリーンランド語クメール語カンナダ語韓国語カヌリ語カシミール語クルド語コミ語コーンウォール語キルギス語ラテン語ル" + + "クセンブルク語ガンダ語リンブルフ語リンガラ語ラオ語リトアニア語ルバ・カタンガ語ラトビア語マダガスカル語マーシャル語マオリ語マケドニア語マラヤ" + + "ーラム語モンゴル語マラーティー語マレー語マルタ語ミャンマー語ナウル語北ンデベレ語ネパール語ンドンガ語オランダ語ノルウェー語(ニーノシュク)ノ" + + "ルウェー語(ブークモール)南ンデベレ語ナバホ語ニャンジャ語オック語オジブウェー語オロモ語オリヤー語オセット語パンジャブ語パーリ語ポーランド語" + + "パシュトゥー語ポルトガル語ケチュア語ロマンシュ語ルンディ語ルーマニア語ロシア語キニアルワンダ語サンスクリット語サルデーニャ語シンド語北サーミ" + + "語サンゴ語シンハラ語スロバキア語スロベニア語サモア語ショナ語ソマリ語アルバニア語セルビア語スワジ語南部ソト語スンダ語スウェーデン語スワヒリ語" + + "タミル語テルグ語タジク語タイ語ティグリニア語トルクメン語ツワナ語トンガ語トルコ語ツォンガ語タタール語タヒチ語ウイグル語ウクライナ語ウルドゥー" + + "語ウズベク語ベンダ語ベトナム語ヴォラピュク語ワロン語ウォロフ語コサ語イディッシュ語ヨルバ語チワン語中国語ズールー語アチェ語アチョリ語アダング" + + "メ語アディゲ語チュニジア・アラビア語アフリヒリ語アゲム語アイヌ語アッカド語アラバマ語アレウト語ゲグ・アルバニア語南アルタイ語古英語アンギカ語" + + "アラム語マプチェ語アラオナ語アラパホー語アルジェリア・アラビア語アラワク語モロッコ・アラビア語エジプト・アラビア語アス語アメリカ手話アストゥ" + + "リアス語コタヴァアワディー語バルーチー語バリ語バイエルン・オーストリア語バサ語バムン語トバ・バタク語ゴーマラ語ベジャ語ベンバ語ベタウィ語ベナ" + + "語バフット語バダガ語西バローチー語ボージュプリー語ビコル語ビニ語バンジャル語コム語シクシカ語ビシュヌプリヤ・マニプリ語バフティヤーリー語ブラ" + + "ジ語ブラフイ語ボド語アコース語ブリヤート語ブギ語ブル語ビリン語メドゥンバ語カドー語カリブ語カユーガ語チャワイ語セブアノ語チガ語チブチャ語チャ" + + "ガタイ語チューク語マリ語チヌーク混成語チョクトー語チペワイアン語チェロキー語シャイアン語中央クルド語コプト語カピス語クリミア・タタール語セー" + + "シェル・クレオール語カシューブ語ダコタ語ダルガン語タイタ語デラウェア語スレイビー語ドグリブ語ディンカ語ザルマ語ドーグリー語低地ソルブ語中央ド" + + "ゥスン語ドゥアラ語中世オランダ語ジョラ=フォニィ語ジュラ語ダザガ語エンブ語エフィク語エミリア語古代エジプト語エカジュク語エラム語中英語中央ア" + + "ラスカ・ユピック語エウォンド語エストレマドゥーラ語ファング語フィリピノ語トルネダール・フィンランド語フォン語ケイジャン・フランス語中期フラン" + + "ス語古フランス語アルピタン語北フリジア語東フリジア語フリウリ語ガ語ガガウズ語贛語ガヨ語バヤ語ダリー語(ゾロアスター教)ゲエズ語キリバス語ギラ" + + "キ語中高ドイツ語古高ドイツ語ゴア・コンカニ語ゴーンディー語ゴロンタロ語ゴート語グレボ語古代ギリシャ語スイスドイツ語ワユ語フラフラ語グシイ語グ" + + "ウィッチン語ハイダ語客家語ハワイ語フィジー・ヒンディー語ヒリガイノン語ヒッタイト語フモン語高地ソルブ語湘語フパ語イバン語イビビオ語イロカノ語" + + "イングーシ語イングリア語ジャマイカ・クレオール語ロジバン語ンゴンバ語マチャメ語ユダヤ・ペルシア語ユダヤ・アラビア語ユトランド語カラカルパク語" + + "カビル語カチン語カジェ語カンバ語カウィ語カバルド語カネンブ語カタブ語マコンデ語カーボベルデ・クレオール語ニャン語コロ語カインガング語カシ語コ" + + "ータン語コイラ・チーニ語コワール語キルマンジュキ語カコ語カレンジン語キンブンド語コミ・ペルミャク語コンカニ語コスラエ語クペレ語カラチャイ・バ" + + "ルカル語クリオ語キナライア語カレリア語クルク語サンバー語バフィア語ケルン語クムク語クテナイ語ラディノ語ランギ語ラフンダー語ランバ語レズギ語リ" + + "ングア・フランカ・ノバリグリア語リヴォニア語ラコタ語ロンバルド語モンゴ語ルイジアナ・クレオール語ロジ語北ロル語ラトガリア語ルバ・ルルア語ルイ" + + "セーニョ語ルンダ語ルオ語ミゾ語ルヒヤ語漢文ラズ語マドゥラ語マファ語マガヒー語マイティリー語マカッサル語マンディンゴ語マサイ語マバ語モクシャ語" + + "マンダル語メンデ語メル語モーリシャス・クレオール語中期アイルランド語マクア・ミート語メタ語ミクマク語ミナンカバウ語満州語マニプリ語モーホーク" + + "語モシ語山地マリ語ムンダン語複数言語クリーク語ミランダ語マールワーリー語メンタワイ語ミエネ語エルジャ語マーザンダラーン語閩南語ナポリ語ナマ語" + + "低地ドイツ語ネワール語ニアス語ニウーエイ語アオ・ナガ語クワシオ語ンジエムブーン語ノガイ語古ノルド語ノヴィアルンコ語北部ソト語ヌエル語古典ネワ" + + "ール語ニャムウェジ語ニャンコレ語ニョロ語ンゼマ語オセージ語オスマントルコ語パンガシナン語パフラヴィー語パンパンガ語パピアメント語パラオ語ピカ" + + "ルディ語ナイジェリア・ピジン語ペンシルベニア・ドイツ語メノナイト低地ドイツ語古代ペルシア語プファルツ語フェニキア語ピエモンテ語ポントス・ギリ" + + "シャ語ポンペイ語プロシア語古期プロバンス語キチェ語チンボラソ高地ケチュア語ラージャスターン語ラパヌイ語ラロトンガ語ロマーニャ語リーフ語ロンボ" + + "語ロマーニー語ロツマ語ルシン語ロヴィアナ語アルーマニア語ルワ語サンダウェ語サハ語サマリア・アラム語サンブル語ササク語サンターリー語サウラーシ" + + "ュトラ語ンガムバイ語サング語シチリア語スコットランド語サッサリ・サルデーニャ語南部クルド語セネカ語セナ語セリ語セリクプ語コイラボロ・センニ語" + + "古アイルランド語サモギティア語タシルハイト語シャン語チャド・アラビア語シダモ語低シレジア語スラヤール語南サーミ語ルレ・サーミ語イナリ・サーミ" + + "語スコルト・サーミ語ソニンケ語ソグド語スリナム語セレル語サホ語ザーターフリジア語スクマ語スス語シュメール語コモロ語古典シリア語シリア語シレジ" + + "ア語トゥル語テムネ語テソ語テレーノ語テトゥン語ティグレ語ティブ語トケラウ語ツァフル語クリンゴン語トリンギット語タリシュ語タマシェク語トンガ語" + + "(ニアサ)トク・ピシン語トゥロヨ語タロコ語ツァコン語チムシュ語ムスリム・タタール語トゥンブカ語ツバル語タサワク語トゥヴァ語中央アトラス・タマジク" + + "ト語ウドムルト語ウガリト語ムブンドゥ語言語不明ヴァイ語ヴェネト語ヴェプス語西フラマン語マインフランク語ヴォート語ヴォロ語ヴンジョ語ヴァリス語" + + "ウォライタ語ワライ語ワショ語ワルピリ語呉語カルムイク語メグレル語ソガ語ヤオ語ヤップ語ヤンベン語イエンバ語ニェエンガトゥ語広東語サポテカ語ブリ" + + "スシンボルゼーラント語ゼナガ語標準モロッコ タマジクト語ズニ語言語的内容なしザザ語現代標準アラビア語標準ドイツ語 (スイス)オーストラリア英" + + "語カナダ英語イギリス英語アメリカ英語スペイン語 (イベリア半島)フレミッシュ語ポルトガル語 (イベリア半島)モルダビア語セルボ・クロアチア語" + + "コンゴ・スワヒリ語簡体中国語繁体中国語" + +var jaLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x000f, 0x001e, 0x0030, 0x0048, 0x0054, 0x0063, 0x0072, 0x0081, 0x0090, 0x009f, 0x00ae, 0x00c9, 0x00db, 0x00ed, 0x00ff, @@ -19849,88 +21216,88 @@ var jaLangIdx = []uint16{ // 613 elements 0x0207, 0x0216, 0x0222, 0x022e, 0x023d, 0x0243, 0x0258, 0x0267, 0x0279, 0x0285, 0x0294, 0x029d, 0x02b2, 0x02c1, 0x02d0, 0x02df, 0x02f1, 0x0306, 0x032a, 0x0339, 0x034b, 0x0360, 0x036c, 0x0378, - 0x0387, 0x0399, 0x03a8, 0x03ba, 0x03c6, 0x03d8, 0x03ea, 0x03f6, + 0x0387, 0x0399, 0x03a8, 0x03ba, 0x03d8, 0x03ea, 0x03fc, 0x0408, // Entry 40 - 7F - 0x040e, 0x0423, 0x0438, 0x0441, 0x044d, 0x0462, 0x046b, 0x0480, - 0x048f, 0x04ad, 0x04b6, 0x04c2, 0x04d4, 0x04e0, 0x04ec, 0x04fe, - 0x050a, 0x0522, 0x0531, 0x0540, 0x0549, 0x0555, 0x0567, 0x0573, - 0x057c, 0x0594, 0x05a3, 0x05af, 0x05c7, 0x05d3, 0x05e5, 0x05f4, - 0x05fd, 0x060f, 0x0627, 0x0636, 0x064b, 0x065d, 0x0669, 0x067b, - 0x0690, 0x069f, 0x06b4, 0x06c0, 0x06cc, 0x06de, 0x06ea, 0x06fc, - 0x070b, 0x071a, 0x0729, 0x074f, 0x0775, 0x0787, 0x0793, 0x07a5, - 0x07b1, 0x07c6, 0x07d2, 0x07e1, 0x07f0, 0x0802, 0x080e, 0x0820, + 0x0420, 0x0435, 0x044a, 0x0453, 0x045f, 0x0474, 0x047d, 0x0492, + 0x04a1, 0x04bf, 0x04c8, 0x04d4, 0x04e6, 0x04f2, 0x04fe, 0x0510, + 0x051c, 0x0534, 0x0543, 0x0552, 0x055b, 0x0567, 0x0579, 0x0585, + 0x058e, 0x05a6, 0x05b5, 0x05c1, 0x05d9, 0x05e5, 0x05f7, 0x0606, + 0x060f, 0x0621, 0x0639, 0x0648, 0x065d, 0x066f, 0x067b, 0x068d, + 0x06a2, 0x06b1, 0x06c6, 0x06d2, 0x06de, 0x06f0, 0x06fc, 0x070e, + 0x071d, 0x072c, 0x073b, 0x0761, 0x0787, 0x0799, 0x07a5, 0x07b7, + 0x07c3, 0x07d8, 0x07e4, 0x07f3, 0x0802, 0x0814, 0x0820, 0x0832, // Entry 80 - BF - 0x0835, 0x0847, 0x0856, 0x0868, 0x0877, 0x0889, 0x0895, 0x08ad, - 0x08c5, 0x08da, 0x08e6, 0x08f5, 0x0901, 0x0910, 0x0922, 0x0934, - 0x0940, 0x094c, 0x0958, 0x096a, 0x0979, 0x0985, 0x0994, 0x09a0, - 0x09b5, 0x09c4, 0x09d0, 0x09dc, 0x09e8, 0x09f1, 0x0a06, 0x0a18, - 0x0a24, 0x0a30, 0x0a3c, 0x0a4b, 0x0a5a, 0x0a66, 0x0a75, 0x0a87, - 0x0a99, 0x0aa8, 0x0ab4, 0x0ac3, 0x0ad8, 0x0ae4, 0x0af3, 0x0afc, - 0x0b11, 0x0b1d, 0x0b29, 0x0b32, 0x0b41, 0x0b4d, 0x0b5c, 0x0b6e, - 0x0b7d, 0x0b9e, 0x0bb0, 0x0bbc, 0x0bc8, 0x0bd7, 0x0be6, 0x0bf5, + 0x0847, 0x0859, 0x0868, 0x087a, 0x0889, 0x089b, 0x08a7, 0x08bf, + 0x08d7, 0x08ec, 0x08f8, 0x0907, 0x0913, 0x0922, 0x0934, 0x0946, + 0x0952, 0x095e, 0x096a, 0x097c, 0x098b, 0x0997, 0x09a6, 0x09b2, + 0x09c7, 0x09d6, 0x09e2, 0x09ee, 0x09fa, 0x0a03, 0x0a18, 0x0a2a, + 0x0a36, 0x0a42, 0x0a4e, 0x0a5d, 0x0a6c, 0x0a78, 0x0a87, 0x0a99, + 0x0aab, 0x0aba, 0x0ac6, 0x0ad5, 0x0aea, 0x0af6, 0x0b05, 0x0b0e, + 0x0b23, 0x0b2f, 0x0b3b, 0x0b44, 0x0b53, 0x0b5f, 0x0b6e, 0x0b80, + 0x0b8f, 0x0bb0, 0x0bc2, 0x0bce, 0x0bda, 0x0be9, 0x0bf8, 0x0c07, // Entry C0 - FF - 0x0c10, 0x0c22, 0x0c2b, 0x0c3a, 0x0c46, 0x0c55, 0x0c64, 0x0c76, - 0x0c9a, 0x0c9a, 0x0ca9, 0x0cc7, 0x0ce5, 0x0cee, 0x0d00, 0x0d18, - 0x0d24, 0x0d36, 0x0d48, 0x0d51, 0x0d78, 0x0d81, 0x0d8d, 0x0da2, - 0x0db1, 0x0dbd, 0x0dc9, 0x0dd8, 0x0de1, 0x0df0, 0x0dfc, 0x0e11, - 0x0e29, 0x0e35, 0x0e3e, 0x0e50, 0x0e59, 0x0e68, 0x0e8f, 0x0eaa, - 0x0eb6, 0x0ec5, 0x0ece, 0x0edd, 0x0eef, 0x0ef8, 0x0f01, 0x0f0d, - 0x0f1f, 0x0f2b, 0x0f37, 0x0f46, 0x0f55, 0x0f64, 0x0f6d, 0x0f7c, - 0x0f8e, 0x0f9d, 0x0fa6, 0x0fbb, 0x0fcd, 0x0fe2, 0x0ff4, 0x1006, + 0x0c22, 0x0c34, 0x0c3d, 0x0c4c, 0x0c58, 0x0c67, 0x0c76, 0x0c88, + 0x0cac, 0x0cac, 0x0cbb, 0x0cd9, 0x0cf7, 0x0d00, 0x0d12, 0x0d2a, + 0x0d36, 0x0d48, 0x0d5a, 0x0d63, 0x0d8a, 0x0d93, 0x0d9f, 0x0db4, + 0x0dc3, 0x0dcf, 0x0ddb, 0x0dea, 0x0df3, 0x0e02, 0x0e0e, 0x0e23, + 0x0e3b, 0x0e47, 0x0e50, 0x0e62, 0x0e6b, 0x0e7a, 0x0ea1, 0x0ebc, + 0x0ec8, 0x0ed7, 0x0ee0, 0x0eef, 0x0f01, 0x0f0a, 0x0f13, 0x0f1f, + 0x0f31, 0x0f3d, 0x0f49, 0x0f58, 0x0f67, 0x0f67, 0x0f76, 0x0f7f, + 0x0f8e, 0x0fa0, 0x0faf, 0x0fb8, 0x0fcd, 0x0fdf, 0x0ff4, 0x1006, // Entry 100 - 13F - 0x1020, 0x102c, 0x1038, 0x1056, 0x107a, 0x108c, 0x1098, 0x10a7, - 0x10b3, 0x10c5, 0x10d7, 0x10e6, 0x10f5, 0x1101, 0x1113, 0x1125, - 0x113a, 0x1149, 0x115e, 0x1179, 0x1185, 0x1191, 0x119d, 0x11ac, - 0x11bb, 0x11d0, 0x11e2, 0x11ee, 0x11f7, 0x121b, 0x122d, 0x124b, - 0x125a, 0x126c, 0x1296, 0x12a2, 0x12c3, 0x12d8, 0x12ea, 0x12fc, - 0x130e, 0x1320, 0x132f, 0x1335, 0x1344, 0x134a, 0x1353, 0x135c, - 0x137f, 0x138b, 0x139a, 0x13a6, 0x13b8, 0x13ca, 0x13e2, 0x13f7, - 0x1409, 0x1415, 0x1421, 0x1436, 0x144b, 0x1454, 0x1463, 0x146f, + 0x1018, 0x102a, 0x1036, 0x1042, 0x1060, 0x1084, 0x1096, 0x10a2, + 0x10b1, 0x10bd, 0x10cf, 0x10e1, 0x10f0, 0x10ff, 0x110b, 0x111d, + 0x112f, 0x1144, 0x1153, 0x1168, 0x1183, 0x118f, 0x119b, 0x11a7, + 0x11b6, 0x11c5, 0x11da, 0x11ec, 0x11f8, 0x1201, 0x1225, 0x1237, + 0x1255, 0x1264, 0x1276, 0x12a0, 0x12ac, 0x12cd, 0x12e2, 0x12f4, + 0x1306, 0x1318, 0x132a, 0x1339, 0x133f, 0x134e, 0x1354, 0x135d, + 0x1366, 0x1389, 0x1395, 0x13a4, 0x13b0, 0x13c2, 0x13d4, 0x13ec, + 0x1401, 0x1413, 0x141f, 0x142b, 0x1440, 0x1455, 0x145e, 0x146d, // Entry 140 - 17F - 0x1484, 0x1490, 0x1499, 0x14a5, 0x14c6, 0x14db, 0x14ed, 0x14f9, - 0x150b, 0x1511, 0x151a, 0x1526, 0x1535, 0x1544, 0x1556, 0x1568, - 0x158c, 0x159b, 0x15aa, 0x15b9, 0x15d4, 0x15ef, 0x1601, 0x1616, - 0x1622, 0x162e, 0x163a, 0x1646, 0x1652, 0x1661, 0x1670, 0x167c, - 0x168b, 0x16b2, 0x16be, 0x16c7, 0x16dc, 0x16e5, 0x16f4, 0x170c, - 0x171b, 0x1733, 0x173c, 0x174e, 0x1760, 0x177b, 0x178a, 0x1799, - 0x17a5, 0x17c6, 0x17d2, 0x17e4, 0x17f3, 0x17ff, 0x180e, 0x181d, - 0x1829, 0x1835, 0x1844, 0x1853, 0x185f, 0x1871, 0x187d, 0x1889, + 0x1479, 0x148e, 0x149a, 0x14a3, 0x14af, 0x14d0, 0x14e5, 0x14f7, + 0x1503, 0x1515, 0x151b, 0x1524, 0x1530, 0x153f, 0x154e, 0x1560, + 0x1572, 0x1596, 0x15a5, 0x15b4, 0x15c3, 0x15de, 0x15f9, 0x160b, + 0x1620, 0x162c, 0x1638, 0x1644, 0x1650, 0x165c, 0x166b, 0x167a, + 0x1686, 0x1695, 0x16bc, 0x16c8, 0x16d1, 0x16e6, 0x16ef, 0x16fe, + 0x1716, 0x1725, 0x173d, 0x1746, 0x1758, 0x176a, 0x1785, 0x1794, + 0x17a3, 0x17af, 0x17d0, 0x17dc, 0x17ee, 0x17fd, 0x1809, 0x1818, + 0x1827, 0x1833, 0x183f, 0x184e, 0x185d, 0x1869, 0x187b, 0x1887, // Entry 180 - 1BF - 0x18ad, 0x18bc, 0x18ce, 0x18da, 0x18ec, 0x18f8, 0x1901, 0x190d, - 0x191f, 0x1934, 0x1949, 0x1955, 0x195e, 0x196d, 0x1979, 0x197f, - 0x1988, 0x1997, 0x19a3, 0x19b2, 0x19c7, 0x19d9, 0x19ee, 0x19fa, - 0x1a03, 0x1a12, 0x1a21, 0x1a2d, 0x1a36, 0x1a5d, 0x1a78, 0x1a90, - 0x1a99, 0x1aa8, 0x1abd, 0x1ac6, 0x1ad5, 0x1ae7, 0x1af0, 0x1aff, - 0x1b0e, 0x1b1a, 0x1b29, 0x1b38, 0x1b50, 0x1b62, 0x1b6e, 0x1b7d, - 0x1b98, 0x1ba1, 0x1bad, 0x1bb6, 0x1bc8, 0x1bd7, 0x1be3, 0x1bf5, - 0x1c07, 0x1c16, 0x1c2e, 0x1c3a, 0x1c49, 0x1c58, 0x1c61, 0x1c70, + 0x1893, 0x18b7, 0x18c6, 0x18d8, 0x18e4, 0x18f6, 0x1902, 0x1926, + 0x192f, 0x193b, 0x194d, 0x1962, 0x1977, 0x1983, 0x198c, 0x1995, + 0x19a1, 0x19a7, 0x19b0, 0x19bf, 0x19cb, 0x19da, 0x19ef, 0x1a01, + 0x1a16, 0x1a22, 0x1a2b, 0x1a3a, 0x1a49, 0x1a55, 0x1a5e, 0x1a85, + 0x1aa0, 0x1ab8, 0x1ac1, 0x1ad0, 0x1ae5, 0x1aee, 0x1afd, 0x1b0f, + 0x1b18, 0x1b27, 0x1b36, 0x1b42, 0x1b51, 0x1b60, 0x1b78, 0x1b8a, + 0x1b96, 0x1ba5, 0x1bc0, 0x1bc9, 0x1bd5, 0x1bde, 0x1bf0, 0x1bff, + 0x1c0b, 0x1c1d, 0x1c2f, 0x1c3e, 0x1c56, 0x1c62, 0x1c71, 0x1c80, // Entry 1C0 - 1FF - 0x1c7c, 0x1c91, 0x1ca6, 0x1cb8, 0x1cc4, 0x1cd0, 0x1cdf, 0x1cf7, - 0x1d0c, 0x1d21, 0x1d33, 0x1d48, 0x1d54, 0x1d66, 0x1d87, 0x1dab, - 0x1dcc, 0x1de1, 0x1df3, 0x1e05, 0x1e17, 0x1e35, 0x1e44, 0x1e53, - 0x1e6b, 0x1e77, 0x1e9b, 0x1eb6, 0x1ec5, 0x1ed7, 0x1ee9, 0x1ef5, - 0x1f01, 0x1f13, 0x1f1f, 0x1f2b, 0x1f3d, 0x1f52, 0x1f5b, 0x1f6d, - 0x1f76, 0x1f91, 0x1fa0, 0x1fac, 0x1fc1, 0x1fdc, 0x1fee, 0x1ffa, - 0x2009, 0x2021, 0x2045, 0x2057, 0x2063, 0x206c, 0x2075, 0x2084, - 0x20a2, 0x20ba, 0x20cf, 0x20e4, 0x20f0, 0x210b, 0x2117, 0x2129, + 0x1c89, 0x1c98, 0x1ca4, 0x1cb9, 0x1cce, 0x1ce0, 0x1cec, 0x1cf8, + 0x1d07, 0x1d1f, 0x1d34, 0x1d49, 0x1d5b, 0x1d70, 0x1d7c, 0x1d8e, + 0x1daf, 0x1dd3, 0x1df4, 0x1e09, 0x1e1b, 0x1e2d, 0x1e3f, 0x1e5d, + 0x1e6c, 0x1e7b, 0x1e93, 0x1e9f, 0x1ec3, 0x1ede, 0x1eed, 0x1eff, + 0x1f11, 0x1f1d, 0x1f29, 0x1f3b, 0x1f47, 0x1f53, 0x1f65, 0x1f7a, + 0x1f83, 0x1f95, 0x1f9e, 0x1fb9, 0x1fc8, 0x1fd4, 0x1fe9, 0x2004, + 0x2016, 0x2022, 0x2031, 0x2049, 0x206d, 0x207f, 0x208b, 0x2094, + 0x209d, 0x20ac, 0x20ca, 0x20e2, 0x20f7, 0x210c, 0x2118, 0x2133, // Entry 200 - 23F - 0x213b, 0x214a, 0x215f, 0x2177, 0x2192, 0x21a1, 0x21ad, 0x21bc, - 0x21c8, 0x21d1, 0x21ec, 0x21f8, 0x2201, 0x2213, 0x221f, 0x2231, - 0x223d, 0x224c, 0x2258, 0x2264, 0x226d, 0x227c, 0x228b, 0x229a, - 0x22a6, 0x22b5, 0x22c4, 0x22d6, 0x22eb, 0x22fa, 0x230c, 0x2323, - 0x2338, 0x2347, 0x2353, 0x2362, 0x2371, 0x238f, 0x23a1, 0x23ad, - 0x23bc, 0x23cb, 0x23f2, 0x2404, 0x2413, 0x2425, 0x242e, 0x243a, - 0x2449, 0x2458, 0x246a, 0x2482, 0x2491, 0x249d, 0x24ac, 0x24bb, - 0x24cd, 0x24d9, 0x24e5, 0x24f4, 0x24fa, 0x250c, 0x251b, 0x2524, + 0x213f, 0x2151, 0x2163, 0x2172, 0x2187, 0x219f, 0x21ba, 0x21c9, + 0x21d5, 0x21e4, 0x21f0, 0x21f9, 0x2214, 0x2220, 0x2229, 0x223b, + 0x2247, 0x2259, 0x2265, 0x2274, 0x2280, 0x228c, 0x2295, 0x22a4, + 0x22b3, 0x22c2, 0x22ce, 0x22dd, 0x22ec, 0x22fe, 0x2313, 0x2322, + 0x2334, 0x234b, 0x2360, 0x236f, 0x237b, 0x238a, 0x2399, 0x23b7, + 0x23c9, 0x23d5, 0x23e4, 0x23f3, 0x241a, 0x242c, 0x243b, 0x244d, + 0x2459, 0x2465, 0x2474, 0x2483, 0x2495, 0x24ad, 0x24bc, 0x24c8, + 0x24d7, 0x24e6, 0x24f8, 0x2504, 0x2510, 0x251f, 0x2525, 0x2537, // Entry 240 - 27F - 0x252d, 0x2539, 0x2548, 0x2557, 0x256f, 0x2578, 0x2587, 0x259c, - 0x25ae, 0x25ba, 0x25df, 0x25e8, 0x25fd, 0x2606, 0x2621, 0x2621, - 0x2621, 0x263f, 0x265a, 0x2669, 0x267b, 0x268d, 0x268d, 0x26b1, - 0x26b1, 0x26b1, 0x26b1, 0x26b1, 0x26b1, 0x26c6, 0x26c6, 0x26ed, - 0x26ff, 0x271d, 0x2738, 0x2747, 0x2756, -} // Size: 1250 bytes - -const kaLangStr string = "" + // Size: 12200 bytes + 0x2546, 0x254f, 0x2558, 0x2564, 0x2573, 0x2582, 0x259a, 0x25a3, + 0x25b2, 0x25c7, 0x25d9, 0x25e5, 0x260a, 0x2613, 0x2628, 0x2631, + 0x264c, 0x264c, 0x264c, 0x266a, 0x2685, 0x2694, 0x26a6, 0x26b8, + 0x26b8, 0x26dc, 0x26dc, 0x26dc, 0x26dc, 0x26dc, 0x26dc, 0x26f1, + 0x26f1, 0x2718, 0x272a, 0x2748, 0x2763, 0x2772, 0x2781, +} // Size: 1254 bytes + +const kaLangStr string = "" + // Size: 12209 bytes "აფარიაფხაზურიავესტურიაფრიკაანსიაკანიამჰარულიარაგონულიარაბულიასამურიხუნძუ" + "რიაიმარააზერბაიჯანულიბაშკირულიბელორუსულიბულგარულიბისლამაბამბარაბენგალუ" + "რიტიბეტურიბრეტონულიბოსნიურიკატალანურიჩეჩნურიჩამოროკორსიკულიკრიჩეხურისა" + @@ -19955,43 +21322,43 @@ const kaLangStr string = "" + // Size: 12200 bytes "იალეუტურისამხრეთ ალთაურიძველი ინგლისურიანგიკაარამეულიმაპუდუნგუნიარაპაჰ" + "ოარავაკიასუასტურიულიავადიბელუჯიბალინურიბასაბამუნიბეჯაბემბაბენადასავლეთ" + " ბელუჯიბოჯპურიბინისიკსიკაბრაჯიბოდობურიატულიბუგინურიბილინიკაიუგასებუანოჩი" + - "გაჩიბჩაჩუკოტკურიმარიულიჩინუკის ჟარგონიჩოკტოჩიპევიანიჩეროკიჩეიენისორანი" + - " ქურთულიკოპტურიყირიმულ-თურქულისესელვა-კრეოლური ფრანგულიკაშუბურიდაკოტურიდ" + - "არგუულიტაიტადელავერულისლეივიდოგრიბიდინკაზარმადოგრიქვემოსორბულიდუალასაშ" + - "უალო ჰოლანდიურიდიოლადიულადაზაგაემბუეფიკიძველეგვიპტურიეკაჯუკისაშუალო ინ" + - "გლისურიევონდოფილიპინურიფონისაშუალო ფრანგულიძველი ფრანგულიჩრდილოფრიზიულ" + - "იაღმოსავლეთფრიზიულიფრიულურიგაგაგაუზურიგბაიაგეეზიგილბერტულისაშუალო ზემო" + - "გერმანულიძველი ზემოგერმანულიგონდიგორონტალოგოთურიძველი ბერძნულიშვეიცარი" + - "ული გერმანულიგუსიიგვიჩინიჰავაიურიჰილიგაინონიხეთურიჰმონგიზემოსორბულიჰუპ" + - "აიბანიიბიბიოილოკოინგუშურილოჟბანინგომბაკიმაშამიიუდეო-სპარსულიიუდეო-არაბ" + - "ულიყარაყალფახურიკაბილურიკაჩინიკაჯიკამბაყაბარდოულიტიაპიმაკონდეკაბუვერდი" + - "ანუკოროხასიკოირა-ჩიინიკაკოკალენჯინიკიმბუნდუკომი-პერმიაკულიკონკანიკუსაი" + - "ეკპელეყარაჩაულ-ბალყარულიკარელიურიკურუქიშამბალაბაფიაკიოლშიყუმუხურიკუტენ" + - "აილადინოლანგილანდალამბალეზგიურილაკოტამონგოლოზიჩრდილოეთ ლურილუბა-ლულუალ" + - "უისენიოლუნდალუომიზოლუჰიამადურულიმაფამაგაჰიმაითილიმაკასარიმასაიმაბამოქშ" + - "ამენდემერუმორისიენისაშუალო ირლანდიურიმაქუვა-მეეტომეტა-ენამიკმაკიმინანგ" + - "კაბაუმანჯურიულიმანიპურიმოჰაუკურიმოსიმუნდანგისხვადასხვა ენაკრიკიმირანდუ" + - "ლიმარვარიმიენეერზიამაზანდერანულინეაპოლიტანურინამაქვემოგერმანულინევარინ" + - "იასინიუეკვასიონგიმბუნინოღაურიძველსკანდინავიურინკოჩრდილოეთ სოთონუერიკლა" + - "სიკური ნევარულინიამვეზინიანკოლენიორონზიმაპანგასინანიფალაურიპამპანგაპაპ" + - "იამენტოფალაუანინიგერიული კრეოლურიძველი სპარსულიფინიკიურიპრუსიულიძველი " + - "პროვანსულიკიჩერაჯასთანირაპანუირაროტონგულირომბობოშურიარომანულირუასანდავ" + - "ეიაკუტურისამარიულ-არამეულისამბურუსანტალინგამბაისანგუსიცილიურიშოტლანდიუ" + - "რისამხრეთქურთულისენეკასენასელკუპურიკოირაბორო-სენიძველი ირლანდიურიშილჰა" + - "შანიჩადური არაბულისამხრეთსამურილულე-საამურიინარი-საამურისკოლტ-საამურის" + - "ონინკესრანან ტონგოსაჰოსუკუმაშუმერულიკომორულიკლასიკური სირიულისირიულიტი" + - "ნმეტესოტეტუმითიგრეკლინგონიტოკ-პისინიტაროკოტუმბუკატუვალუტასავაქიტუვაცენ" + - "ტრალური მოროკოს ტამაზიგხტიუდმურტულიუგარითულიუმბუნდუძირეული ენავაივუნჯო" + - "ვალსერიველაითავარაივალპირიყალმუხურისოგაიანგბენიიემბაკანტონურიბლისსიმბო" + - "ლოებიზენაგასტანდარტული მაროკოული ტამაზიგხტიზუნილინგვისტური შიგთავსი არ" + - " არისზაზაკითანამედროვე სტანდარტული არაბულიავსტრიული გერმანულიშვეიცარიული" + - " ზემოგერმანულიავსტრალიური ინგლისურიკანადური ინგლისურიბრიტანული ინგლისური" + - "ამერიკული ინგლისურილათინურ ამერიკული ესპანურიევროპული ესპანურიმექსიკურ" + - "ი ესპანურიკანადური ფრანგულიშვეიცარიული ფრანგულიქვემოსაქსონურიფლამანდიუ" + - "რიბრაზილიური პორტუგალიურიევროპული პორტუგალიურიმოლდავურისერბულ-ხორვატულ" + - "იკონგოს სუაჰილიგამარტივებული ჩინურიტრადიციული ჩინური" - -var kaLangIdx = []uint16{ // 613 elements + "გაჩიბჩაჩუკოტკურიმარიულიჩინუკის ჟარგონიჩოკტოჩიპევიანიჩეროკიჩეიენიცენტრა" + + "ლური ქურთულიკოპტურიყირიმულ-თურქულისესელვა-კრეოლური ფრანგულიკაშუბურიდაკ" + + "ოტურიდარგუულიტაიტადელავერულისლეივიდოგრიბიდინკაზარმადოგრიქვემოსორბულიდუ" + + "ალასაშუალო ჰოლანდიურიდიოლადიულადაზაგაემბუეფიკიძველეგვიპტურიეკაჯუკისაშუ" + + "ალო ინგლისურიევონდოფილიპინურიფონისაშუალო ფრანგულიძველი ფრანგულიჩრდილოფ" + + "რიზიულიაღმოსავლეთფრიზიულიფრიულურიგაგაგაუზურიგბაიაგეეზიგილბერტულისაშუალ" + + "ო ზემოგერმანულიძველი ზემოგერმანულიგონდიგორონტალოგოთურიძველი ბერძნულიშვ" + + "ეიცარიული გერმანულიგუსიიგვიჩინიჰავაიურიჰილიგაინონიხეთურიჰმონგიზემოსორბ" + + "ულიჰუპაიბანიიბიბიოილოკოინგუშურილოჟბანინგომბაკიმაშამიიუდეო-სპარსულიიუდე" + + "ო-არაბულიყარაყალფახურიკაბილურიკაჩინიკაჯიკამბაყაბარდოულიტიაპიმაკონდეკაბ" + + "უვერდიანუკოროხასიკოირა-ჩიინიკაკოკალენჯინიკიმბუნდუკომი-პერმიაკულიკონკან" + + "იკუსაიეკპელეყარაჩაულ-ბალყარულიკარელიურიკურუქიშამბალაბაფიაკიოლშიყუმუხურ" + + "იკუტენაილადინოლანგილანდალამბალეზგიურილაკოტამონგოლოზიჩრდილოეთ ლურილუბა-" + + "ლულუალუისენიოლუნდალუომიზოლუჰიამადურულიმაფამაგაჰიმაითილიმაკასარიმასაიმა" + + "ბამოქშამენდემერუმორისიენისაშუალო ირლანდიურიმაქუვა-მეეტომეტა-ენამიკმაკი" + + "მინანგკაბაუმანჯურიულიმანიპურიმოჰაუკურიმოსიმუნდანგისხვადასხვა ენაკრიკიმ" + + "ირანდულიმარვარიმიენეერზიამაზანდერანულინეაპოლიტანურინამაქვემოგერმანულინ" + + "ევარინიასინიუეკვასიონგიმბუნინოღაურიძველსკანდინავიურინკოჩრდილოეთ სოთონუ" + + "ერიკლასიკური ნევარულინიამვეზინიანკოლენიორონზიმაპანგასინანიფალაურიპამპა" + + "ნგაპაპიამენტოფალაუანინიგერიული კრეოლურიძველი სპარსულიფინიკიურიპრუსიული" + + "ძველი პროვანსულიკიჩერაჯასთანირაპანუირაროტონგულირომბობოშურიარომანულირუა" + + "სანდავეიაკუტურისამარიულ-არამეულისამბურუსანტალინგამბაისანგუსიცილიურიშოტ" + + "ლანდიურისამხრეთქურთულისენეკასენასელკუპურიკოირაბორო-სენიძველი ირლანდიურ" + + "იშილჰაშანიჩადური არაბულისამხრეთსამურილულე-საამურიინარი-საამურისკოლტ-სა" + + "ამურისონინკესრანან ტონგოსაჰოსუკუმაშუმერულიკომორულიკლასიკური სირიულისირ" + + "იულიტინმეტესოტეტუმითიგრეკლინგონიტოკ-პისინიტაროკოტუმბუკატუვალუტასავაქიტ" + + "უვაცენტრალური მოროკოს ტამაზიგხტიუდმურტულიუგარითულიუმბუნდუუცნობი ენავაი" + + "ვუნჯოვალსერიველაითავარაივალპირიყალმუხურისოგაიანგბენიიემბაკანტონურიბლის" + + "სიმბოლოებიზენაგასტანდარტული მაროკოული ტამაზიგხტიზუნილინგვისტური შიგთავ" + + "სი არ არისზაზაკითანამედროვე სტანდარტული არაბულიავსტრიული გერმანულიშვეი" + + "ცარიული ზემოგერმანულიავსტრალიური ინგლისურიკანადური ინგლისურიბრიტანული " + + "ინგლისურიამერიკული ინგლისურილათინურ ამერიკული ესპანურიევროპული ესპანურ" + + "იმექსიკური ესპანურიკანადური ფრანგულიშვეიცარიული ფრანგულიქვემოსაქსონური" + + "ფლამანდიურიბრაზილიური პორტუგალიურიევროპული პორტუგალიურიმოლდავურისერბულ" + + "-ხორვატულიკონგოს სუაჰილიგამარტივებული ჩინურიტრადიციული ჩინური" + +var kaLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x000f, 0x0027, 0x003f, 0x005d, 0x006c, 0x0084, 0x009f, 0x00b4, 0x00c9, 0x00de, 0x00f0, 0x0117, 0x0132, 0x0150, 0x016b, @@ -20026,62 +21393,62 @@ var kaLangIdx = []uint16{ // 613 elements 0x1287, 0x1293, 0x12a2, 0x12a2, 0x12ae, 0x12ae, 0x12ae, 0x12d9, 0x12ee, 0x12ee, 0x12fa, 0x12fa, 0x12fa, 0x130f, 0x130f, 0x130f, 0x131e, 0x131e, 0x132a, 0x132a, 0x1345, 0x135d, 0x135d, 0x136f, - 0x136f, 0x136f, 0x136f, 0x1381, 0x1381, 0x1396, 0x13a2, 0x13b1, - 0x13b1, 0x13cc, 0x13e1, 0x140c, 0x141b, 0x1436, 0x1448, 0x145a, + 0x136f, 0x136f, 0x136f, 0x1381, 0x1381, 0x1381, 0x1396, 0x13a2, + 0x13b1, 0x13b1, 0x13cc, 0x13e1, 0x140c, 0x141b, 0x1436, 0x1448, // Entry 100 - 13F - 0x1482, 0x1497, 0x1497, 0x14c2, 0x1509, 0x1521, 0x1539, 0x1551, - 0x1560, 0x157e, 0x1590, 0x15a5, 0x15b4, 0x15c3, 0x15d2, 0x15f6, - 0x15f6, 0x1605, 0x1639, 0x1648, 0x1657, 0x1669, 0x1675, 0x1684, - 0x1684, 0x16ab, 0x16c0, 0x16c0, 0x16f1, 0x16f1, 0x1703, 0x1703, - 0x1703, 0x1721, 0x1721, 0x172d, 0x172d, 0x175b, 0x1783, 0x1783, - 0x17ad, 0x17e3, 0x17fb, 0x1801, 0x181c, 0x181c, 0x181c, 0x182b, - 0x182b, 0x183a, 0x1858, 0x1858, 0x1895, 0x18cc, 0x18cc, 0x18db, - 0x18f6, 0x1908, 0x1908, 0x1930, 0x196d, 0x196d, 0x196d, 0x197c, + 0x145a, 0x148e, 0x14a3, 0x14a3, 0x14ce, 0x1515, 0x152d, 0x1545, + 0x155d, 0x156c, 0x158a, 0x159c, 0x15b1, 0x15c0, 0x15cf, 0x15de, + 0x1602, 0x1602, 0x1611, 0x1645, 0x1654, 0x1663, 0x1675, 0x1681, + 0x1690, 0x1690, 0x16b7, 0x16cc, 0x16cc, 0x16fd, 0x16fd, 0x170f, + 0x170f, 0x170f, 0x172d, 0x172d, 0x1739, 0x1739, 0x1767, 0x178f, + 0x178f, 0x17b9, 0x17ef, 0x1807, 0x180d, 0x1828, 0x1828, 0x1828, + 0x1837, 0x1837, 0x1846, 0x1864, 0x1864, 0x18a1, 0x18d8, 0x18d8, + 0x18e7, 0x1902, 0x1914, 0x1914, 0x193c, 0x1979, 0x1979, 0x1979, // Entry 140 - 17F - 0x1991, 0x1991, 0x1991, 0x19a9, 0x19a9, 0x19ca, 0x19dc, 0x19ee, - 0x1a0f, 0x1a0f, 0x1a1b, 0x1a2a, 0x1a3c, 0x1a4b, 0x1a63, 0x1a63, - 0x1a63, 0x1a78, 0x1a8a, 0x1aa2, 0x1aca, 0x1aef, 0x1aef, 0x1b16, - 0x1b2e, 0x1b40, 0x1b4c, 0x1b5b, 0x1b5b, 0x1b79, 0x1b79, 0x1b88, - 0x1b9d, 0x1bc1, 0x1bc1, 0x1bcd, 0x1bcd, 0x1bd9, 0x1bd9, 0x1bf8, - 0x1bf8, 0x1bf8, 0x1c04, 0x1c1f, 0x1c37, 0x1c62, 0x1c77, 0x1c89, - 0x1c98, 0x1ccc, 0x1ccc, 0x1ccc, 0x1ce7, 0x1cf9, 0x1d0e, 0x1d1d, - 0x1d2f, 0x1d47, 0x1d5c, 0x1d6e, 0x1d7d, 0x1d8c, 0x1d9b, 0x1db3, + 0x1988, 0x199d, 0x199d, 0x199d, 0x19b5, 0x19b5, 0x19d6, 0x19e8, + 0x19fa, 0x1a1b, 0x1a1b, 0x1a27, 0x1a36, 0x1a48, 0x1a57, 0x1a6f, + 0x1a6f, 0x1a6f, 0x1a84, 0x1a96, 0x1aae, 0x1ad6, 0x1afb, 0x1afb, + 0x1b22, 0x1b3a, 0x1b4c, 0x1b58, 0x1b67, 0x1b67, 0x1b85, 0x1b85, + 0x1b94, 0x1ba9, 0x1bcd, 0x1bcd, 0x1bd9, 0x1bd9, 0x1be5, 0x1be5, + 0x1c04, 0x1c04, 0x1c04, 0x1c10, 0x1c2b, 0x1c43, 0x1c6e, 0x1c83, + 0x1c95, 0x1ca4, 0x1cd8, 0x1cd8, 0x1cd8, 0x1cf3, 0x1d05, 0x1d1a, + 0x1d29, 0x1d3b, 0x1d53, 0x1d68, 0x1d7a, 0x1d89, 0x1d98, 0x1da7, // Entry 180 - 1BF - 0x1db3, 0x1db3, 0x1db3, 0x1dc5, 0x1dc5, 0x1dd4, 0x1de0, 0x1e05, - 0x1e05, 0x1e21, 0x1e39, 0x1e48, 0x1e51, 0x1e5d, 0x1e6c, 0x1e6c, - 0x1e6c, 0x1e84, 0x1e90, 0x1ea2, 0x1eb7, 0x1ecf, 0x1ecf, 0x1ede, - 0x1eea, 0x1ef9, 0x1ef9, 0x1f08, 0x1f14, 0x1f2f, 0x1f63, 0x1f85, - 0x1f9b, 0x1fb0, 0x1fd1, 0x1fef, 0x2007, 0x2022, 0x202e, 0x202e, - 0x2046, 0x206e, 0x207d, 0x2098, 0x20ad, 0x20ad, 0x20bc, 0x20cb, - 0x20f2, 0x20f2, 0x2119, 0x2125, 0x214f, 0x2161, 0x2170, 0x217c, - 0x217c, 0x218e, 0x21a6, 0x21bb, 0x21ee, 0x21ee, 0x21f7, 0x221c, + 0x1dbf, 0x1dbf, 0x1dbf, 0x1dbf, 0x1dd1, 0x1dd1, 0x1de0, 0x1de0, + 0x1dec, 0x1e11, 0x1e11, 0x1e2d, 0x1e45, 0x1e54, 0x1e5d, 0x1e69, + 0x1e78, 0x1e78, 0x1e78, 0x1e90, 0x1e9c, 0x1eae, 0x1ec3, 0x1edb, + 0x1edb, 0x1eea, 0x1ef6, 0x1f05, 0x1f05, 0x1f14, 0x1f20, 0x1f3b, + 0x1f6f, 0x1f91, 0x1fa7, 0x1fbc, 0x1fdd, 0x1ffb, 0x2013, 0x202e, + 0x203a, 0x203a, 0x2052, 0x207a, 0x2089, 0x20a4, 0x20b9, 0x20b9, + 0x20c8, 0x20d7, 0x20fe, 0x20fe, 0x2125, 0x2131, 0x215b, 0x216d, + 0x217c, 0x2188, 0x2188, 0x219a, 0x21b2, 0x21c7, 0x21fa, 0x21fa, // Entry 1C0 - 1FF - 0x222b, 0x225f, 0x2277, 0x228f, 0x229e, 0x22ad, 0x22ad, 0x22ad, - 0x22ce, 0x22e3, 0x22fb, 0x2319, 0x2331, 0x2331, 0x2365, 0x2365, - 0x2365, 0x238d, 0x238d, 0x23a8, 0x23a8, 0x23a8, 0x23a8, 0x23c0, - 0x23ee, 0x23fa, 0x23fa, 0x2415, 0x242a, 0x244b, 0x244b, 0x244b, - 0x245a, 0x246c, 0x246c, 0x246c, 0x246c, 0x2487, 0x2490, 0x24a5, - 0x24bd, 0x24ee, 0x2503, 0x2503, 0x2518, 0x2518, 0x252d, 0x253c, - 0x2557, 0x2578, 0x2578, 0x25a2, 0x25b4, 0x25c0, 0x25c0, 0x25db, - 0x2603, 0x2631, 0x2631, 0x2640, 0x264c, 0x2674, 0x2674, 0x2674, + 0x2203, 0x2228, 0x2237, 0x226b, 0x2283, 0x229b, 0x22aa, 0x22b9, + 0x22b9, 0x22b9, 0x22da, 0x22ef, 0x2307, 0x2325, 0x233d, 0x233d, + 0x2371, 0x2371, 0x2371, 0x2399, 0x2399, 0x23b4, 0x23b4, 0x23b4, + 0x23b4, 0x23cc, 0x23fa, 0x2406, 0x2406, 0x2421, 0x2436, 0x2457, + 0x2457, 0x2457, 0x2466, 0x2478, 0x2478, 0x2478, 0x2478, 0x2493, + 0x249c, 0x24b1, 0x24c9, 0x24fa, 0x250f, 0x250f, 0x2524, 0x2524, + 0x2539, 0x2548, 0x2563, 0x2584, 0x2584, 0x25ae, 0x25c0, 0x25cc, + 0x25cc, 0x25e7, 0x260f, 0x263d, 0x263d, 0x264c, 0x2658, 0x2680, // Entry 200 - 23F - 0x2674, 0x269b, 0x26bd, 0x26e2, 0x2707, 0x271c, 0x271c, 0x273e, - 0x273e, 0x274a, 0x274a, 0x275c, 0x275c, 0x2774, 0x278c, 0x27bd, - 0x27d2, 0x27d2, 0x27d2, 0x27e1, 0x27ed, 0x27ed, 0x27ff, 0x280e, - 0x280e, 0x280e, 0x280e, 0x2826, 0x2826, 0x2826, 0x2826, 0x2826, - 0x2842, 0x2842, 0x2854, 0x2854, 0x2854, 0x2854, 0x2869, 0x287b, - 0x2893, 0x289f, 0x28f2, 0x290d, 0x2928, 0x293d, 0x295c, 0x2965, - 0x2965, 0x2965, 0x2965, 0x2965, 0x2965, 0x2965, 0x2974, 0x2989, - 0x299e, 0x29ad, 0x29ad, 0x29c2, 0x29c2, 0x29dd, 0x29dd, 0x29e9, + 0x2680, 0x2680, 0x2680, 0x26a7, 0x26c9, 0x26ee, 0x2713, 0x2728, + 0x2728, 0x274a, 0x274a, 0x2756, 0x2756, 0x2768, 0x2768, 0x2780, + 0x2798, 0x27c9, 0x27de, 0x27de, 0x27de, 0x27ed, 0x27f9, 0x27f9, + 0x280b, 0x281a, 0x281a, 0x281a, 0x281a, 0x2832, 0x2832, 0x2832, + 0x2832, 0x2832, 0x284e, 0x284e, 0x2860, 0x2860, 0x2860, 0x2860, + 0x2875, 0x2887, 0x289f, 0x28ab, 0x28fe, 0x2919, 0x2934, 0x2949, + 0x2965, 0x296e, 0x296e, 0x296e, 0x296e, 0x296e, 0x296e, 0x296e, + 0x297d, 0x2992, 0x29a7, 0x29b6, 0x29b6, 0x29cb, 0x29cb, 0x29e6, // Entry 240 - 27F - 0x29e9, 0x29e9, 0x2a01, 0x2a10, 0x2a10, 0x2a2b, 0x2a2b, 0x2a55, - 0x2a55, 0x2a67, 0x2ac3, 0x2acf, 0x2b1d, 0x2b2f, 0x2b88, 0x2b88, - 0x2bbf, 0x2c08, 0x2c45, 0x2c79, 0x2cb0, 0x2ce7, 0x2d31, 0x2d62, - 0x2d96, 0x2d96, 0x2dc7, 0x2e01, 0x2e2b, 0x2e4c, 0x2e8f, 0x2ecc, - 0x2ee7, 0x2f15, 0x2f3d, 0x2f77, 0x2fa8, -} // Size: 1250 bytes - -const kkLangStr string = "" + // Size: 8563 bytes + 0x29e6, 0x29f2, 0x29f2, 0x29f2, 0x2a0a, 0x2a19, 0x2a19, 0x2a34, + 0x2a34, 0x2a5e, 0x2a5e, 0x2a70, 0x2acc, 0x2ad8, 0x2b26, 0x2b38, + 0x2b91, 0x2b91, 0x2bc8, 0x2c11, 0x2c4e, 0x2c82, 0x2cb9, 0x2cf0, + 0x2d3a, 0x2d6b, 0x2d9f, 0x2d9f, 0x2dd0, 0x2e0a, 0x2e34, 0x2e55, + 0x2e98, 0x2ed5, 0x2ef0, 0x2f1e, 0x2f46, 0x2f80, 0x2fb1, +} // Size: 1254 bytes + +const kkLangStr string = "" + // Size: 9155 bytes "афар тіліабхаз тіліафрикаанс тіліакан тіліамхар тіліарагон тіліараб тілі" + "ассам тіліавар тіліаймара тіліәзірбайжан тілібашқұрт тілібеларусь тіліб" + "олгар тілібислама тілібамбара тілібенгал тілітибет тілібретон тілібосни" + @@ -20089,65 +21456,69 @@ const kkLangStr string = "" + // Size: 8563 bytes "лавян тілічуваш тіліваллий тілідат тілінеміс тілідивехи тілідзонг-кэ ті" + "ліэве тілігрек тіліағылшын тіліэсперанто тіліиспан тіліэстон тілібаск т" + "іліпарсы тіліфула тіліфин тіліфиджи тіліфарер тіліфранцуз тілібатыс фри" + - "з тіліирланд тілігэль тілігалисия тілігуарани тілігуджарати тілімэн тіл" + - "іхауса тіліиврит тіліхинди тіліхорват тілігаити тілівенгр тіліармян тіл" + - "ігереро тіліинтерлингва тіліиндонезия тіліинтерлингве тіліигбо тілісычу" + - "ан и тіліидо тіліисланд тіліитальян тіліинуктитут тіліжапон тіліява тіл" + - "ігрузин тілікикуйю тілікваньяма тіліқазақ тілікалаалисут тілікхмер тілі" + - "каннада тілікорей тіліканури тілікашмир тілікүрд тілікоми тілікорн тілі" + - "қырғыз тілілатын тілілюксембург тіліганда тілілимбург тілілингала тіліл" + - "аос тілілитва тілілуба-катанга тілілатыш тілімалагаси тілімаршалл тілім" + - "аори тілімакедон тілімалаялам тілімоңғол тілімаратхи тілімалай тілімаль" + - "та тілібирма тілінауру тілісолтүстік ндебеле тілінепал тіліндонга тілін" + - "идерланд тілінорвегиялық нюнорск тілінорвегиялық букмол тіліоңтүстік нд" + - "ебеле тілінавахо тіліньянджа тіліокситан тіліоромо тіліория тіліосетин " + - "тіліпенджаб тіліполяк тіліпушту тіліпортугал тілікечуа тіліроманш тілір" + - "унди тілірумын тіліорыс тілікиньяруанда тілісанскрит тілісардин тілісин" + - "дхи тілісолтүстік саам тілісанго тілісингал тілісловак тілісловен тіліс" + - "амоа тілішона тілісомали тіліалбан тілісерб тілісвати тілісесото тілісу" + - "ндан тілішвед тілісуахили тілітамил тілітелугу тілітәжік тілітай тіліти" + - "гринья тілітүрікмен тілітсвана тілітонган тілітүрік тілітсонга тілітата" + - "р тілітаити тіліұйғыр тіліукраин тіліурду тіліөзбек тілівенда тілівьетн" + - "ам тіліволапюк тіліваллон тіліволоф тілікхоса тіліидиш тілійоруба тіліқ" + - "ытай тілізулу тіліачех тіліадангме тіліадыгей тіліагхем тіліайну тіліал" + - "еут тіліоңтүстік алтай тіліангика тілімапуче тіліарапахо тіліасу тіліас" + - "турия тіліавадхи тілібали тілібаса тілібемба тілібена тілібатыс балучи " + - "тілібходжпури тілібини тілісиксика тілібодо тілібугис тіліблин тілісебу" + - "ано тілікига тілічуук тілімари тілічокто тілічероки тілішайен тілісоран" + - "и тілісейшельдік креол тілідакота тілідаргин тілітаита тілідогриб тіліз" + - "арма тілітөменгі лужица тілідуала тілідиола тілідазага тіліэмбу тіліэфи" + - "к тіліэкаджук тіліэвондо тіліфилиппин тіліфон тіліфриуль тіліга тілігаг" + - "ауз тілігеэз тілігильберт тілігоронтало тілішвейцариялық неміс тілігуси" + - "и тілігвичин тілігавайи тіліхилигайнон тіліхмонг тіліжоғарғы лужица тіл" + - "іхупа тіліибан тіліибибио тіліилоко тіліингуш тіліложбан тілінгомба тіл" + - "імачаме тілікабил тілікачин тіліджу тілікамба тілікабардин тілітьяп тіл" + - "імаконде тілікабувердьяну тілікоро тілікхаси тілікойра чини тілікако ті" + - "лікаленжин тілікимбунду тілікоми-пермяк тіліконкани тілікпелле тіліқара" + - "шай-балқар тілікарель тілікурух тілішамбала тілібафиа тілікёльн тіліқұм" + - "ық тіліладино тіліланги тілілезгин тілілакота тілілози тілісолтүстік лю" + - "ри тілілуба-лулуа тілілунда тілілуо тілімизо тілілухиа тілімадур тіліма" + - "гахи тілімайтхили тілімакасар тілімасай тілімокша тіліменде тілімеру ті" + - "ліморисиен тілімакуа-меетто тілімета тілімикмак тіліминангкабау тіліман" + - "ипури тілімогавк тілімосси тілімунданг тілібірнеше тілкрик тілімиранд т" + - "іліэрзян тілімазандеран тілінеаполитан тілінама тілітөменгі неміс тілін" + - "евар тіліниас тіліниуэ тіліквасио тілінгиембун тіліноғай тілінко тілісо" + - "лтүстік сото тілінуэр тілінианколе тіліпангасинан тіліпампанга тіліпапь" + - "яменто тіліпалау тілінигериялық пиджин тіліпруссия тілікиче тілірапануй" + - " тіліраротонган тіліромбо тіліарумын тіліруа тілісандаве тіліякут тіліса" + - "мбуру тілісантали тілінгамбай тілісангу тілісицилия тілішотланд тіліоңт" + - "үстік күрд тілісена тілікойраборо сенни тіліташелхит тілішан тіліоңтүст" + - "ік саам тілілуле саам тіліинари саам тіліколтта саам тілісонинке тіліср" + - "анан тонго тілісахо тілісукума тілікомор тілісирия тілітемне тілітесо т" + - "ілітетум тілітигре тіліклингон тіліток-писин тілітароко тілітумбука тіл" + - "ітувалу тілітасавак тілітувин тіліорталық атлас тамазигхт тіліудмурт ті" + - "ліумбунду тіліата тілвай тілівунджо тілівальзер тіліволайта тіліварай т" + - "ілівальбири тіліқалмақ тілісога тіліянгбен тілійемба тілікантон тілімар" + - "окколық стандартты тамазигхт тілізуни тілітілдік мазмұны жоқзаза тіліқа" + - "зіргі стандартты араб тіліағылшын тілі (АҚШ)төменгі саксон тіліфламанд " + - "тілімолдован тілісерб-хорват тіліконго суахили тіліжеңілдетілген қытай " + - "тілідәстүрлі қытай тілі" - -var kkLangIdx = []uint16{ // 613 elements + "з тіліирланд тілішотландиялық гэль тілігалисия тілігуарани тілігуджарат" + + "и тілімэн тіліхауса тіліиврит тіліхинди тіліхорват тілігаити тілівенгр " + + "тіліармян тілігереро тіліинтерлингва тіліиндонезия тіліинтерлингве тілі" + + "игбо тілісычуан и тіліидо тіліисланд тіліитальян тіліинуктитут тіліжапо" + + "н тіліява тілігрузин тілікикуйю тілікваньяма тіліқазақ тілікалаалисут т" + + "ілікхмер тіліканнада тілікорей тіліканури тілікашмир тілікүрд тілікоми " + + "тілікорн тіліқырғыз тілілатын тілілюксембург тіліганда тілілимбург тілі" + + "лингала тілілаос тілілитва тілілуба-катанга тілілатыш тілімалагаси тілі" + + "маршалл тілімаори тілімакедон тілімалаялам тілімоңғол тілімаратхи тілім" + + "алай тілімальта тілібирма тілінауру тілісолтүстік ндебеле тілінепал тіл" + + "індонга тілінидерланд тілінорвегиялық нюнорск тілінорвегиялық букмол ті" + + "ліоңтүстік ндебеле тілінавахо тіліньянджа тіліокситан тіліоромо тіліори" + + "я тіліосетин тіліпенджаб тіліполяк тіліпушту тіліпортугал тілікечуа тіл" + + "іроманш тілірунди тілірумын тіліорыс тілікиньяруанда тілісанскрит тіліс" + + "ардин тілісиндхи тілісолтүстік саам тілісанго тілісингал тілісловак тіл" + + "ісловен тілісамоа тілішона тілісомали тіліалбан тілісерб тілісвати тілі" + + "сесото тілісундан тілішвед тілісуахили тілітамил тілітелугу тілітәжік т" + + "ілітай тілітигринья тілітүрікмен тілітсвана тілітонган тілітүрік тілітс" + + "онга тілітатар тілітаити тіліұйғыр тіліукраин тіліурду тіліөзбек тіліве" + + "нда тілівьетнам тіліволапюк тіліваллон тіліволоф тілікхоса тіліидиш тіл" + + "ійоруба тіліқытай тілізулу тіліачех тіліадангме тіліадыгей тіліагхем ті" + + "ліайну тіліалеут тіліоңтүстік алтай тіліангика тілімапуче тіліарапахо т" + + "іліасу тіліастурия тіліавадхи тілібали тілібаса тілібемба тілібена тілі" + + "батыс балучи тілібходжпури тілібини тілісиксика тілібодо тілібугис тілі" + + "блин тілісебуано тілікига тілічуук тілімари тілічокто тілічероки тіліша" + + "йен тілісорани тілісейшельдік креол тілідакота тілідаргин тілітаита тіл" + + "ідогриб тілізарма тілітөменгі лужица тілідуала тілідиола тілідазага тіл" + + "іэмбу тіліэфик тіліэкаджук тіліэвондо тіліфилиппин тіліфон тіліфриуль т" + + "іліга тілігагауз тілігеэз тілігильберт тілігоронтало тілішвейцариялық н" + + "еміс тілігусии тілігвичин тілігавайи тіліхилигайнон тіліхмонг тіліжоғар" + + "ғы лужица тіліхупа тіліибан тіліибибио тіліилоко тіліингуш тіліложбан т" + + "ілінгомба тілімачаме тілікабил тілікачин тілікаджи тілікамба тілікабард" + + "ин тілітьяп тілімаконде тілікабувердьяну тілікоро тілікхаси тілікойра ч" + + "ини тілікако тілікаленжин тілікимбунду тілікоми-пермяк тіліконкани тілі" + + "кпелле тіліқарашай-балқар тілікарель тілікурух тілішамбала тілібафиа ті" + + "лікёльн тіліқұмық тіліладино тіліланги тілілезгин тілілакота тілілози т" + + "ілісолтүстік люри тілілуба-лулуа тілілунда тілілуо тілімизо тілілухиа т" + + "ілімадур тілімагахи тілімайтхили тілімакасар тілімасай тілімокша тіліме" + + "нде тілімеру тіліморисиен тілімакуа-меетто тілімета тілімикмак тілімина" + + "нгкабау тіліманипури тілімогавк тілімосси тілімунданг тілібірнеше тілкр" + + "ик тілімиранд тіліэрзян тілімазандеран тілінеаполитан тілінама тілітөме" + + "нгі неміс тіліневар тіліниас тіліниуэ тіліквасио тілінгиембун тіліноғай" + + " тілінко тілісолтүстік сото тілінуэр тілінианколе тіліпангасинан тіліпам" + + "панга тіліпапьяменто тіліпалау тілінигериялық пиджин тіліпруссия тіліки" + + "че тілірапануй тіліраротонган тіліромбо тіліарумын тіліруа тілісандаве " + + "тіліякут тілісамбуру тілісантали тілінгамбай тілісангу тілісицилия тілі" + + "шотланд тіліоңтүстік күрд тілісена тілікойраборо сенни тіліташелхит тіл" + + "ішан тіліоңтүстік саам тілілуле саам тіліинари саам тіліколтта саам тіл" + + "ісонинке тілісранан тонго тілісахо тілісукума тілікомор тілісирия тіліт" + + "емне тілітесо тілітетум тілітигре тіліклингон тіліток-писин тілітароко " + + "тілітумбука тілітувалу тілітасавак тілітувин тіліорталық атлас тамазигх" + + "т тіліудмурт тіліумбунду тілібелгісіз тілвай тілівунджо тілівальзер тіл" + + "іволайта тіліварай тілівальбири тіліқалмақ тілісога тіліянгбен тілійемб" + + "а тілікантон тілімарокколық стандартты тамазигхт тілізуни тілітілдік ма" + + "змұны жоқзаза тіліқазіргі стандартты араб тіліавстриялық неміс тілішвей" + + "цариялық әдеби неміс тіліавстралиялық ағылшын тіліканадалық ағылшын тіл" + + "ібританиялық ағылшын тіліамерикалық ағылшын тілілатынамерикалық испан т" + + "іліеуропалық испан тілімексикалық испан тіліканадалық француз тілішвейц" + + "ариялық француз тілітөменгі саксон тіліфламанд тілібразилиялық португал" + + " тіліеуропалық португал тілімолдован тілісерб-хорват тіліконго суахили т" + + "іліжеңілдетілген қытай тілідәстүрлі қытай тілі" + +var kkLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0011, 0x0024, 0x0024, 0x003f, 0x0050, 0x0063, 0x0078, 0x0089, 0x009c, 0x00ad, 0x00c2, 0x00df, 0x00f6, 0x010f, 0x0124, @@ -20155,148 +21526,148 @@ var kkLangIdx = []uint16{ // 613 elements 0x01e5, 0x01fc, 0x01fc, 0x020b, 0x0233, 0x0246, 0x025b, 0x026a, 0x027d, 0x0292, 0x02aa, 0x02b9, 0x02ca, 0x02e1, 0x02fc, 0x030f, 0x0322, 0x0333, 0x0346, 0x0357, 0x0366, 0x0379, 0x038c, 0x03a3, - 0x03bf, 0x03d4, 0x03e5, 0x03fc, 0x0413, 0x042e, 0x043d, 0x0450, - 0x0463, 0x0476, 0x0476, 0x048b, 0x049e, 0x04b1, 0x04c4, 0x04d9, + 0x03bf, 0x03d4, 0x03fe, 0x0415, 0x042c, 0x0447, 0x0456, 0x0469, + 0x047c, 0x048f, 0x048f, 0x04a4, 0x04b7, 0x04ca, 0x04dd, 0x04f2, // Entry 40 - 7F - 0x04f8, 0x0513, 0x0532, 0x0543, 0x055b, 0x055b, 0x056a, 0x057f, - 0x0596, 0x05b1, 0x05c4, 0x05d3, 0x05e8, 0x05e8, 0x05fd, 0x0616, - 0x0629, 0x0646, 0x0659, 0x0670, 0x0683, 0x0698, 0x06ad, 0x06be, - 0x06cf, 0x06e0, 0x06f5, 0x0708, 0x0725, 0x0738, 0x074f, 0x0766, - 0x0777, 0x078a, 0x07aa, 0x07bd, 0x07d6, 0x07ed, 0x0800, 0x0817, - 0x0830, 0x0845, 0x085c, 0x086f, 0x0884, 0x0897, 0x08aa, 0x08d4, - 0x08e7, 0x08fc, 0x0917, 0x0945, 0x0971, 0x0999, 0x09ae, 0x09c5, - 0x09dc, 0x09dc, 0x09ef, 0x0a00, 0x0a15, 0x0a2c, 0x0a2c, 0x0a3f, + 0x0511, 0x052c, 0x054b, 0x055c, 0x0574, 0x0574, 0x0583, 0x0598, + 0x05af, 0x05ca, 0x05dd, 0x05ec, 0x0601, 0x0601, 0x0616, 0x062f, + 0x0642, 0x065f, 0x0672, 0x0689, 0x069c, 0x06b1, 0x06c6, 0x06d7, + 0x06e8, 0x06f9, 0x070e, 0x0721, 0x073e, 0x0751, 0x0768, 0x077f, + 0x0790, 0x07a3, 0x07c3, 0x07d6, 0x07ef, 0x0806, 0x0819, 0x0830, + 0x0849, 0x085e, 0x0875, 0x0888, 0x089d, 0x08b0, 0x08c3, 0x08ed, + 0x0900, 0x0915, 0x0930, 0x095e, 0x098a, 0x09b2, 0x09c7, 0x09de, + 0x09f5, 0x09f5, 0x0a08, 0x0a19, 0x0a2e, 0x0a45, 0x0a45, 0x0a58, // Entry 80 - BF - 0x0a52, 0x0a6b, 0x0a7e, 0x0a93, 0x0aa6, 0x0ab9, 0x0aca, 0x0ae9, - 0x0b02, 0x0b17, 0x0b2c, 0x0b50, 0x0b63, 0x0b78, 0x0b8d, 0x0ba2, - 0x0bb5, 0x0bc6, 0x0bdb, 0x0bee, 0x0bff, 0x0c12, 0x0c27, 0x0c3c, - 0x0c4d, 0x0c64, 0x0c77, 0x0c8c, 0x0c9f, 0x0cae, 0x0cc7, 0x0ce0, - 0x0cf5, 0x0d0a, 0x0d1d, 0x0d32, 0x0d45, 0x0d58, 0x0d6b, 0x0d80, - 0x0d91, 0x0da4, 0x0db7, 0x0dce, 0x0de5, 0x0dfa, 0x0e0d, 0x0e20, - 0x0e31, 0x0e46, 0x0e46, 0x0e59, 0x0e6a, 0x0e7b, 0x0e7b, 0x0e92, - 0x0ea7, 0x0ea7, 0x0ea7, 0x0eba, 0x0ecb, 0x0ecb, 0x0ecb, 0x0ede, + 0x0a6b, 0x0a84, 0x0a97, 0x0aac, 0x0abf, 0x0ad2, 0x0ae3, 0x0b02, + 0x0b1b, 0x0b30, 0x0b45, 0x0b69, 0x0b7c, 0x0b91, 0x0ba6, 0x0bbb, + 0x0bce, 0x0bdf, 0x0bf4, 0x0c07, 0x0c18, 0x0c2b, 0x0c40, 0x0c55, + 0x0c66, 0x0c7d, 0x0c90, 0x0ca5, 0x0cb8, 0x0cc7, 0x0ce0, 0x0cf9, + 0x0d0e, 0x0d23, 0x0d36, 0x0d4b, 0x0d5e, 0x0d71, 0x0d84, 0x0d99, + 0x0daa, 0x0dbd, 0x0dd0, 0x0de7, 0x0dfe, 0x0e13, 0x0e26, 0x0e39, + 0x0e4a, 0x0e5f, 0x0e5f, 0x0e72, 0x0e83, 0x0e94, 0x0e94, 0x0eab, + 0x0ec0, 0x0ec0, 0x0ec0, 0x0ed3, 0x0ee4, 0x0ee4, 0x0ee4, 0x0ef7, // Entry C0 - FF - 0x0ede, 0x0f02, 0x0f02, 0x0f17, 0x0f17, 0x0f2c, 0x0f2c, 0x0f43, - 0x0f43, 0x0f43, 0x0f43, 0x0f43, 0x0f43, 0x0f52, 0x0f52, 0x0f69, - 0x0f69, 0x0f7e, 0x0f7e, 0x0f8f, 0x0f8f, 0x0fa0, 0x0fa0, 0x0fa0, - 0x0fa0, 0x0fa0, 0x0fb3, 0x0fb3, 0x0fc4, 0x0fc4, 0x0fc4, 0x0fe4, - 0x0fff, 0x0fff, 0x1010, 0x1010, 0x1010, 0x1027, 0x1027, 0x1027, - 0x1027, 0x1027, 0x1038, 0x1038, 0x1038, 0x104b, 0x104b, 0x105c, - 0x105c, 0x105c, 0x105c, 0x105c, 0x105c, 0x1073, 0x1084, 0x1084, - 0x1084, 0x1095, 0x10a6, 0x10a6, 0x10b9, 0x10b9, 0x10ce, 0x10e1, + 0x0ef7, 0x0f1b, 0x0f1b, 0x0f30, 0x0f30, 0x0f45, 0x0f45, 0x0f5c, + 0x0f5c, 0x0f5c, 0x0f5c, 0x0f5c, 0x0f5c, 0x0f6b, 0x0f6b, 0x0f82, + 0x0f82, 0x0f97, 0x0f97, 0x0fa8, 0x0fa8, 0x0fb9, 0x0fb9, 0x0fb9, + 0x0fb9, 0x0fb9, 0x0fcc, 0x0fcc, 0x0fdd, 0x0fdd, 0x0fdd, 0x0ffd, + 0x1018, 0x1018, 0x1029, 0x1029, 0x1029, 0x1040, 0x1040, 0x1040, + 0x1040, 0x1040, 0x1051, 0x1051, 0x1051, 0x1064, 0x1064, 0x1075, + 0x1075, 0x1075, 0x1075, 0x1075, 0x1075, 0x1075, 0x108c, 0x109d, + 0x109d, 0x109d, 0x10ae, 0x10bf, 0x10bf, 0x10d2, 0x10d2, 0x10e7, // Entry 100 - 13F - 0x10f6, 0x10f6, 0x10f6, 0x10f6, 0x111e, 0x111e, 0x1133, 0x1148, - 0x115b, 0x115b, 0x115b, 0x1170, 0x1170, 0x1183, 0x1183, 0x11a7, - 0x11a7, 0x11ba, 0x11ba, 0x11cd, 0x11cd, 0x11e2, 0x11f3, 0x1204, - 0x1204, 0x1204, 0x121b, 0x121b, 0x121b, 0x121b, 0x1230, 0x1230, - 0x1230, 0x1249, 0x1249, 0x1258, 0x1258, 0x1258, 0x1258, 0x1258, - 0x1258, 0x1258, 0x126d, 0x127a, 0x128f, 0x128f, 0x128f, 0x128f, - 0x128f, 0x12a0, 0x12b9, 0x12b9, 0x12b9, 0x12b9, 0x12b9, 0x12b9, - 0x12d4, 0x12d4, 0x12d4, 0x12d4, 0x1300, 0x1300, 0x1300, 0x1313, + 0x10fa, 0x110f, 0x110f, 0x110f, 0x110f, 0x1137, 0x1137, 0x114c, + 0x1161, 0x1174, 0x1174, 0x1174, 0x1189, 0x1189, 0x119c, 0x119c, + 0x11c0, 0x11c0, 0x11d3, 0x11d3, 0x11e6, 0x11e6, 0x11fb, 0x120c, + 0x121d, 0x121d, 0x121d, 0x1234, 0x1234, 0x1234, 0x1234, 0x1249, + 0x1249, 0x1249, 0x1262, 0x1262, 0x1271, 0x1271, 0x1271, 0x1271, + 0x1271, 0x1271, 0x1271, 0x1286, 0x1293, 0x12a8, 0x12a8, 0x12a8, + 0x12a8, 0x12a8, 0x12b9, 0x12d2, 0x12d2, 0x12d2, 0x12d2, 0x12d2, + 0x12d2, 0x12ed, 0x12ed, 0x12ed, 0x12ed, 0x1319, 0x1319, 0x1319, // Entry 140 - 17F - 0x1328, 0x1328, 0x1328, 0x133d, 0x133d, 0x135a, 0x135a, 0x136d, - 0x1391, 0x1391, 0x13a2, 0x13b3, 0x13c8, 0x13db, 0x13ee, 0x13ee, - 0x13ee, 0x1403, 0x1418, 0x142d, 0x142d, 0x142d, 0x142d, 0x142d, - 0x1440, 0x1453, 0x1462, 0x1475, 0x1475, 0x148e, 0x148e, 0x149f, - 0x14b6, 0x14d7, 0x14d7, 0x14e8, 0x14e8, 0x14fb, 0x14fb, 0x1517, - 0x1517, 0x1517, 0x1528, 0x1541, 0x155a, 0x1578, 0x158f, 0x158f, - 0x15a4, 0x15c8, 0x15c8, 0x15c8, 0x15dd, 0x15f0, 0x1607, 0x161a, - 0x162d, 0x1640, 0x1640, 0x1655, 0x1668, 0x1668, 0x1668, 0x167d, + 0x132c, 0x1341, 0x1341, 0x1341, 0x1356, 0x1356, 0x1373, 0x1373, + 0x1386, 0x13aa, 0x13aa, 0x13bb, 0x13cc, 0x13e1, 0x13f4, 0x1407, + 0x1407, 0x1407, 0x141c, 0x1431, 0x1446, 0x1446, 0x1446, 0x1446, + 0x1446, 0x1459, 0x146c, 0x147f, 0x1492, 0x1492, 0x14ab, 0x14ab, + 0x14bc, 0x14d3, 0x14f4, 0x14f4, 0x1505, 0x1505, 0x1518, 0x1518, + 0x1534, 0x1534, 0x1534, 0x1545, 0x155e, 0x1577, 0x1595, 0x15ac, + 0x15ac, 0x15c1, 0x15e5, 0x15e5, 0x15e5, 0x15fa, 0x160d, 0x1624, + 0x1637, 0x164a, 0x165d, 0x165d, 0x1672, 0x1685, 0x1685, 0x1685, // Entry 180 - 1BF - 0x167d, 0x167d, 0x167d, 0x1692, 0x1692, 0x1692, 0x16a3, 0x16c7, - 0x16c7, 0x16e3, 0x16e3, 0x16f6, 0x1705, 0x1716, 0x1729, 0x1729, - 0x1729, 0x173c, 0x173c, 0x1751, 0x176a, 0x1781, 0x1781, 0x1794, - 0x1794, 0x17a7, 0x17a7, 0x17ba, 0x17cb, 0x17e4, 0x17e4, 0x1804, - 0x1815, 0x182a, 0x1849, 0x1849, 0x1862, 0x1877, 0x188a, 0x188a, - 0x18a1, 0x18b6, 0x18c7, 0x18dc, 0x18dc, 0x18dc, 0x18dc, 0x18ef, - 0x190c, 0x190c, 0x1929, 0x193a, 0x195c, 0x196f, 0x1980, 0x1991, - 0x1991, 0x19a6, 0x19bf, 0x19d2, 0x19d2, 0x19d2, 0x19e1, 0x1a05, + 0x169a, 0x169a, 0x169a, 0x169a, 0x16af, 0x16af, 0x16af, 0x16af, + 0x16c0, 0x16e4, 0x16e4, 0x1700, 0x1700, 0x1713, 0x1722, 0x1733, + 0x1746, 0x1746, 0x1746, 0x1759, 0x1759, 0x176e, 0x1787, 0x179e, + 0x179e, 0x17b1, 0x17b1, 0x17c4, 0x17c4, 0x17d7, 0x17e8, 0x1801, + 0x1801, 0x1821, 0x1832, 0x1847, 0x1866, 0x1866, 0x187f, 0x1894, + 0x18a7, 0x18a7, 0x18be, 0x18d3, 0x18e4, 0x18f9, 0x18f9, 0x18f9, + 0x18f9, 0x190c, 0x1929, 0x1929, 0x1946, 0x1957, 0x1979, 0x198c, + 0x199d, 0x19ae, 0x19ae, 0x19c3, 0x19dc, 0x19ef, 0x19ef, 0x19ef, // Entry 1C0 - 1FF - 0x1a16, 0x1a16, 0x1a16, 0x1a2f, 0x1a2f, 0x1a2f, 0x1a2f, 0x1a2f, - 0x1a4c, 0x1a4c, 0x1a65, 0x1a82, 0x1a95, 0x1a95, 0x1abf, 0x1abf, - 0x1abf, 0x1abf, 0x1abf, 0x1abf, 0x1abf, 0x1abf, 0x1abf, 0x1ad6, - 0x1ad6, 0x1ae7, 0x1ae7, 0x1ae7, 0x1afe, 0x1b1b, 0x1b1b, 0x1b1b, - 0x1b2e, 0x1b2e, 0x1b2e, 0x1b2e, 0x1b2e, 0x1b43, 0x1b52, 0x1b69, - 0x1b7a, 0x1b7a, 0x1b91, 0x1b91, 0x1ba8, 0x1ba8, 0x1bbf, 0x1bd2, - 0x1be9, 0x1c00, 0x1c00, 0x1c22, 0x1c22, 0x1c33, 0x1c33, 0x1c33, - 0x1c59, 0x1c59, 0x1c59, 0x1c72, 0x1c81, 0x1c81, 0x1c81, 0x1c81, + 0x19fe, 0x1a22, 0x1a33, 0x1a33, 0x1a33, 0x1a4c, 0x1a4c, 0x1a4c, + 0x1a4c, 0x1a4c, 0x1a69, 0x1a69, 0x1a82, 0x1a9f, 0x1ab2, 0x1ab2, + 0x1adc, 0x1adc, 0x1adc, 0x1adc, 0x1adc, 0x1adc, 0x1adc, 0x1adc, + 0x1adc, 0x1af3, 0x1af3, 0x1b04, 0x1b04, 0x1b04, 0x1b1b, 0x1b38, + 0x1b38, 0x1b38, 0x1b4b, 0x1b4b, 0x1b4b, 0x1b4b, 0x1b4b, 0x1b60, + 0x1b6f, 0x1b86, 0x1b97, 0x1b97, 0x1bae, 0x1bae, 0x1bc5, 0x1bc5, + 0x1bdc, 0x1bef, 0x1c06, 0x1c1d, 0x1c1d, 0x1c3f, 0x1c3f, 0x1c50, + 0x1c50, 0x1c50, 0x1c76, 0x1c76, 0x1c76, 0x1c8f, 0x1c9e, 0x1c9e, // Entry 200 - 23F - 0x1c81, 0x1ca3, 0x1cbd, 0x1cd9, 0x1cf7, 0x1d0e, 0x1d0e, 0x1d2e, - 0x1d2e, 0x1d3f, 0x1d3f, 0x1d54, 0x1d54, 0x1d54, 0x1d67, 0x1d67, - 0x1d7a, 0x1d7a, 0x1d7a, 0x1d8d, 0x1d9e, 0x1d9e, 0x1db1, 0x1dc4, - 0x1dc4, 0x1dc4, 0x1dc4, 0x1ddb, 0x1ddb, 0x1ddb, 0x1ddb, 0x1ddb, - 0x1df5, 0x1df5, 0x1e0a, 0x1e0a, 0x1e0a, 0x1e0a, 0x1e21, 0x1e36, - 0x1e4d, 0x1e60, 0x1e95, 0x1eaa, 0x1eaa, 0x1ec1, 0x1ece, 0x1edd, - 0x1edd, 0x1edd, 0x1edd, 0x1edd, 0x1edd, 0x1edd, 0x1ef2, 0x1f09, - 0x1f20, 0x1f33, 0x1f33, 0x1f4c, 0x1f4c, 0x1f61, 0x1f61, 0x1f72, + 0x1c9e, 0x1c9e, 0x1c9e, 0x1cc0, 0x1cda, 0x1cf6, 0x1d14, 0x1d2b, + 0x1d2b, 0x1d4b, 0x1d4b, 0x1d5c, 0x1d5c, 0x1d71, 0x1d71, 0x1d71, + 0x1d84, 0x1d84, 0x1d97, 0x1d97, 0x1d97, 0x1daa, 0x1dbb, 0x1dbb, + 0x1dce, 0x1de1, 0x1de1, 0x1de1, 0x1de1, 0x1df8, 0x1df8, 0x1df8, + 0x1df8, 0x1df8, 0x1e12, 0x1e12, 0x1e27, 0x1e27, 0x1e27, 0x1e27, + 0x1e3e, 0x1e53, 0x1e6a, 0x1e7d, 0x1eb2, 0x1ec7, 0x1ec7, 0x1ede, + 0x1ef5, 0x1f04, 0x1f04, 0x1f04, 0x1f04, 0x1f04, 0x1f04, 0x1f04, + 0x1f19, 0x1f30, 0x1f47, 0x1f5a, 0x1f5a, 0x1f73, 0x1f73, 0x1f88, // Entry 240 - 27F - 0x1f72, 0x1f72, 0x1f87, 0x1f9a, 0x1f9a, 0x1faf, 0x1faf, 0x1faf, - 0x1faf, 0x1faf, 0x1ff4, 0x2005, 0x2027, 0x2038, 0x206d, 0x206d, - 0x206d, 0x206d, 0x206d, 0x206d, 0x206d, 0x208d, 0x208d, 0x208d, - 0x208d, 0x208d, 0x208d, 0x208d, 0x20b1, 0x20c8, 0x20c8, 0x20c8, - 0x20e1, 0x20ff, 0x2121, 0x214f, 0x2173, -} // Size: 1250 bytes - -const kmLangStr string = "" + // Size: 8834 bytes - "អាហ្វារអាប់ខាហ៊្សានអាវេស្ថានអាហ្វ្រិកានអាកានអំហារិកអារ៉ាហ្គោនអារ៉ាប់អាសា" + - "មីសអាវ៉ារីកអីម៉ារ៉ាអាស៊ែបៃហ្សង់បាស្គៀបេឡារុស្សប៊ុលហ្គារីប៊ីស្លាម៉ាបាម្" + - "បារាបង់ក្លាដែសទីបេប្រីស្តុនបូស្នីកាតាឡានឈីឆេនឈីម៉ូរ៉ូកូស៊ីខានឆេកឈឺជស្ល" + - "ាវិកឈូវ៉ាសវេលដាណឺម៉ាកអាល្លឺម៉ង់ឌីវីហ៊ីដុងខាអ៊ីវក្រិកអង់គ្លេសអេស្ពេរ៉ាន" + - "់តូអេស្ប៉ាញអេស្តូនីបាសខ៍ភឺសៀនហ្វ៊ូឡាហ្វាំងឡង់ហ៊្វីជីហ្វារូសបារាំងហ្វ្រ" + - "ីស៊ានខាងលិចអៀរឡង់ស្កុតហ្កែលិគហ្គាលីស្យានហ្គូរ៉ានីហ្កុយ៉ារាទីមេនហូសាអ៊ី" + - "ស្រាអែលហិណ្ឌីក្រូអាតហៃទីហុងគ្រីអាមេនីហឺរីរ៉ូឥណ្ឌូណេស៊ីអ៊ីកបូស៊ីឈាន់យីអ" + - "៊ីដូអ៊ីស្លង់អ៊ីតាលីអ៊ីនុកទីទុតជប៉ុនជ្វាហ្សក\u200bហ្ស៊ីគីគូយូគូនយ៉ាម៉ាក" + - "ាហ្សាក់កាឡាលលីស៊ុតខ្មែរខាណាដាកូរ៉េកានូរីកាស្មៀរឃឺដកូមីកូនីស\u200bកៀហ្ស" + - "៊ីសឡាតំាងលុចហ្សំបួរហ្គាន់ដាលីមប៊ូសលីនកាឡាឡាវលីទុយអានីលូបាកាតានហ្គាឡាតវ" + + 0x1f88, 0x1f99, 0x1f99, 0x1f99, 0x1fae, 0x1fc1, 0x1fc1, 0x1fd6, + 0x1fd6, 0x1fd6, 0x1fd6, 0x1fd6, 0x201b, 0x202c, 0x204e, 0x205f, + 0x2094, 0x2094, 0x20bc, 0x20f3, 0x2123, 0x214d, 0x217b, 0x21a7, + 0x21d9, 0x21ff, 0x2227, 0x2227, 0x2251, 0x2281, 0x22a5, 0x22bc, + 0x22ec, 0x2318, 0x2331, 0x234f, 0x2371, 0x239f, 0x23c3, +} // Size: 1254 bytes + +const kmLangStr string = "" + // Size: 8873 bytes + "អាហ្វារអាប់ខាហ៊្សានអាវេស្ថានអាហ្វ្រិកានអាកានអាំហារិកអារ៉ាហ្គោនអារ៉ាប់អាស" + + "ាមីសអាវ៉ារីកអីម៉ារ៉ាអាស៊ែបៃហ្សង់បាស្គៀបេឡារុសប៊ុលហ្គារីប៊ីស្លាម៉ាបាម្ប" + + "ារាបង់ក្លាដែសទីបេប្រីស្តុនបូស្នីកាតាឡានឈីឆេនឈីម៉ូរ៉ូកូស៊ីខានឆែកឈឺជស្លា" + + "វិកឈូវ៉ាសវេលដាណឺម៉ាកអាល្លឺម៉ង់ទេវីហ៊ីដុងខាអ៊ីវក្រិកអង់គ្លេសអេស្ពេរ៉ាន់" + + "តូអេស្ប៉ាញអេស្តូនីបាសខ៍ភឺសៀនហ្វ៊ូឡាហ្វាំងឡង់ហ៊្វីជីហ្វារូសបារាំងហ្វ្រី" + + "ស៊ានខាងលិចអៀរឡង់ស្កុតហ្កែលិគហ្គាលីស្យានហ្គូរ៉ានីហ្កុយ៉ារាទីមេនហូសាហេប្" + + "រឺហិណ្ឌីក្រូអាតហៃទីហុងគ្រីអាមេនីហឺរីរ៉ូអីនធើលីងឥណ្ឌូណេស៊ីអ៊ីកបូស៊ីឈាន់" + + "យីអ៊ីដូអ៊ីស្លង់អ៊ីតាលីអ៊ីនុកទីទុតជប៉ុនជ្វាហ្សក\u200bហ្ស៊ីគីគូយូគូនយ៉ាម" + + "៉ាកាហ្សាក់កាឡាលលីស៊ុតខ្មែរខាណាដាកូរ៉េកានូរីកាស្មៀរឃឺដកូមីកូនីស\u200bកៀ" + + "ហ្ស៊ីសឡាតំាងលុចសំបួហ្គាន់ដាលីមប៊ូសលីនកាឡាឡាវលីទុយអានីលូបាកាតានហ្គាឡាតវ" + "ីម៉ាឡាហ្គាស៊ីម៉ាស់សលម៉ោរីម៉ាសេដូនីម៉ាឡាយ៉ាឡាមម៉ុងហ្គោលីម៉ារ៉ាធីម៉ាឡេម៉" + "ាល់តាភូមាណូរូនេបេលេខាងជើងនេប៉ាល់នុនហ្គាហូឡង់ន័រវែស នីនូសន័រវែស បុកម៉ាល" + "់នេប៊េលខាងត្បូងណាវ៉ាចូណានចាអូសីតាន់អូរ៉ូម៉ូអូឌៀអូស៊ីទិកបឹនជាពិប៉ូឡូញបា" + - "ស្តូព័រទុយហ្គាល់ហ្គិកឈួរ៉ូម៉ង់រូន្ឌីរូម៉ានីរុស្ស៊ីគិនយ៉ាវ៉ាន់ដាសំស្ក្រ" + - "ឹតសាឌីនាស៊ីនឌីសាមីខាងជើងសានហ្គោស្រីលង្កាស្លូវ៉ាគីស្លូវ៉ានីភាសាសាមូអាសូ" + - "ណាសូម៉ាលីអាល់បានីស៊ែបស្វាទីសូថូខាងត្បូងស៊ូដង់ស៊ុយអែតស្វាហ៊ីលីតាមីលតេលុ" + - "គុតាហ្ស៊ីគថៃទីហ្គ្រីញ៉ាតួកម៉េនស្វាណាតុងហ្គាទួរគីសុងហ្គាតាតាតាហ៊ីទីអ៊ុយ" + - "ហ្គឺរអ៊ុយក្រែនអ៊ូរឌូអ៊ូសបេគវេនដាវៀតណាមវូឡាពូកវ៉ាលូនវូឡុហ្វឃសាយីឌីហ្សយរ" + - "ូបាហ្សួងចិនសូលូអាកហ៊ីនឺសអាដេងមីអាឌីហ្គីអាហ្គីមអាយនូអាលូតអាល់តៃខាងត្បូង" + - "អាហ្គីកាម៉ាពូឈីអារ៉ាប៉ាហូអាស៊ូអាស្ទូរីអាវ៉ាឌីបាលីបាសាបេមបាបេណាបាឡូជីខា" + - "ងលិចបូចពូរីប៊ីនីស៊ីកស៊ីកាបូដូប៊ុកហ្គីប្ល៊ីនស៊ីប៊ូអាណូឈីហ្គាឈូគីម៉ារីឆុ" + - "កតាវឆេរូគីឈីយីនីឃឺដកណ្ដាលសេសេលវ៉ាគ្រីអូល (បារាំង)ដាកូតាដាចវ៉ាតៃតាដូគ្រ" + - "ីបហ្សាម៉ាសូប៊ីក្រោមឌួលឡាចូឡាហ៊្វុនយីដាហ្សាហ្គាអេមប៊ូអ៊ីហ្វិកអ៊ីកាជុកអ៊" + - "ីវ៉ុនដូហ្វីលីពីនហ្វ៊ុនហ៊្វ្រូលានហ្គាកាគូសជីសហ្គីលបឺទហ្គូរុនតាឡូអាល្លឺម" + - "៉ង (ស្វីស)ហ្គូស៊ីហ្គីចឈីនហាវៃហ៊ីលីហ្គេណុនម៉ុងសូប៊ីលើហ៊ូប៉ាអ៊ីបានអាយប៊ី" + - "ប៊ីអូអ៊ីឡូកូអ៊ិនហ្គូសលុចបានងុំបាម៉ាឆាំកាប៊ីឡេកាឈីនជូកាំបាកាបាឌៀយ៉ាប់ម៉" + - "ាកូនដេកាប៊ូវឺឌៀនូគូរូកាស៊ីគុយរ៉ាឈីនីកាកូកាលែនជីនគីមប៊ុនឌូគូមីភឹមយ៉ាគគុ" + - "នកានីគ្លីបការ៉ាឆាយបាល់កាការីលាគូរូកសាមបាឡាបាហ្វៀកូឡូញគូមីគឡាឌីណូឡានហ្គ" + - "ីឡេសហ្គីឡាកូតាឡូហ្ស៊ីលូរីខាងជើងលូបាលូឡាលុនដាលូអូមីហ្សូលូយ៉ាម៉ាឌូរីសម៉ា" + - "ហ្គាហ៊ីម៉ៃធីលីម៉ាកាសាម៉ាសៃមុខសាមេនឌីមេរូម៉ូរីស៊ីនម៉ាកគូវ៉ាមីតូមេតាមិកម" + - "េកមីណាងកាប៊ូម៉ានីពូរីម៊ូហាគមូស៊ីមុនដាងពហុភាសាគ្រីកមីរ៉ានដេសអឺហ្ស៊ីយ៉ាម" + - "៉ាហ្សានដឺរេនីនាប៉ូលីតានណាម៉ាអាល្លឺម៉ង់ក្រោមនេវ៉ាវីនីអាសនូអៀនក្វាស្យូងៀ" + - "មប៊ូនណូហ្គៃនគោសូថូខាងជើងនូអ័រណានកូលេភេនហ្គាស៊ីណានផាមភេនហ្គាប៉ាប៉ៃមេនតូ" + - "ប៉ាលូអានភាសាទំនាក់ទំនងនីហ្សេរីយ៉ាព្រូស៊ានគីចឈីរ៉ាប៉ានូរ៉ារ៉ូតុងហ្គានរុ" + - "មបូអារ៉ូម៉ានីរ៉្វាសានដាវីសាខាសាមបូរូសានតាលីងាំបេយសានហ្គូស៊ីស៊ីលានស្កុត" + - "ឃឺដខាងត្បូងស៊ីណាគុយរ៉ាបូរ៉ុស៊ីនីតាឈីលហ៊ីតសានសាមីខាងត្បូងលូលីសាមីអ៊ីណារ" + - "ីសាម៉ីស្កុលសាមីសូនីនគេស្រាណានតុងហ្គោសាហូស៊ូគូម៉ាកូម៉ូរីស៊ីរៀគធីមនីតេសូ" + - "ទីទុំធីហ្គ្រាឃ្លីនហ្គុនថុកពីស៊ីនតារ៉ូកូទុមប៊ូកាទូវ៉ាលូតាសាវ៉ាក់ទូវីនៀត" + - "ាម៉ាសាយអាត្លាសកណ្តាលអាត់មូដអាម់ប៊ុនឌូរូតវៃវុនចូវេលសឺវ៉ូឡាយតាវ៉ារេយវ៉ារ" + - "ីប៉ារីកាលមីគសូហ្គាយ៉ាងបេនយេមបាកន្តាំងតាម៉ាហ្សៃម៉ារ៉ុកស្តង់ដាហ្សូនីគ្មា" + - "ន\u200bទិន្នន័យ\u200bភាសាហ្សាហ្សាអារ៉ាប់ផ្លូវការអេស្ប៉ាញ (អ៊ឺរ៉ុប)ហ្សា" + - "ក់ស្យុងក្រោមផ្លាមីសព័រទុយហ្គាល់ (អឺរ៉ុប)ម៉ុលដាវីសឺបូក្រូអាតកុងហ្គោស្វា" + - "ហ៊ីលីចិន\u200bអក្សរ\u200bកាត់ចិន\u200bអក្សរ\u200bពេញ" - -var kmLangIdx = []uint16{ // 613 elements + "ស្តូព័រទុយហ្គាល់ហ្គិកឈួរ៉ូម៉ង់រុណ្ឌីរូម៉ានីរុស្ស៊ីគិនយ៉ាវ៉ាន់ដាសំស្ក្រ" + + "ឹតសាឌីនាស៊ីនឌីសាមីខាងជើងសានហ្គោស្រីលង្កាស្លូវ៉ាគីស្លូវ៉ានីសាម័រសូណាសូម" + + "៉ាលីអាល់បានីស៊ែបស្វាទីសូថូខាងត្បូងស៊ូដង់ស៊ុយអែតស្វាហ៊ីលីតាមីលតេលុគុតាហ" + + "្ស៊ីគថៃទីហ្គ្រីញ៉ាតួកម៉េនស្វាណាតុងហ្គាទួរគីសុងហ្គាតាតាតាហ៊ីទីអ៊ុយហ្គឺរ" + + "អ៊ុយក្រែនអ៊ូរឌូអ៊ូសបេគវេនដាវៀតណាមវូឡាពូកវ៉ាលូនវូឡុហ្វឃសាយ៉ីឌីសយរូបាហ្ស" + + "ួងចិនហ្សូលូអាកហ៊ីនឺសអាដេងមីអាឌីហ្គីអាហ្គីមអាយនូអាលូតអាល់តៃខាងត្បូងអាហ្" + + "គីកាម៉ាពូឈីអារ៉ាប៉ាហូអាស៊ូអាស្ទូរីអាវ៉ាឌីបាលីបាសាបេមបាបេណាបាឡូជីខាងលិច" + + "បូចពូរីប៊ីនីស៊ីកស៊ីកាបូដូប៊ុកហ្គីប្ល៊ីនស៊ីប៊ូអាណូឈីហ្គាឈូគីម៉ារីឆុកតាវ" + + "ឆេរូគីឈីយីនីឃើដភាគកណ្តាលសេសេលវ៉ាគ្រីអូល (បារាំង)ដាកូតាដាចវ៉ាតៃតាដូគ្រី" + + "បហ្សាម៉ាសូប៊ីក្រោមឌួលឡាចូឡាហ៊្វុនយីដាហ្សាហ្គាអេមប៊ូអ៊ីហ្វិកអ៊ីកាជុកអ៊ី" + + "វ៉ុនដូហ្វីលីពីនហ្វ៊ុនហ៊្វ្រូលានហ្គាកាគូសជីសហ្គីលបឺទហ្គូរុនតាឡូអាល្លឺម៉" + + "ង (ស្វីស)ហ្គូស៊ីហ្គីចឈីនហាវៃហ៊ីលីហ្គេណុនម៉ុងសូប៊ីលើហ៊ូប៉ាអ៊ីបានអាយប៊ីប" + + "៊ីអូអ៊ីឡូកូអ៊ិនហ្គូសលុចបានងុំបាម៉ាឆាំកាប៊ីឡេកាឈីនជូកាំបាកាបាឌៀយ៉ាប់ម៉ា" + + "កូនដេកាប៊ូវឺឌៀនូគូរូកាស៊ីគុយរ៉ាឈីនីកាកូកាលែនជីនគីមប៊ុនឌូគូមីភឹមយ៉ាគគុន" + + "កានីគ្លីបការ៉ាឆាយបាល់កាការីលាគូរូកសាមបាឡាបាហ្វៀកូឡូញគូមីគឡាឌីណូឡានហ្គី" + + "ឡេសហ្គីឡាកូតាឡូហ្ស៊ីលូរីខាងជើងលូបាលូឡាលុនដាលូអូមីហ្សូលូយ៉ាម៉ាឌូរីសម៉ាហ" + + "្គាហ៊ីម៉ៃធីលីម៉ាកាសាម៉ាសៃមុខសាមេនឌីមេរូម៉ូរីស៊ីនម៉ាកគូវ៉ាមីតូមេតាមិកមេ" + + "កមីណាងកាប៊ូម៉ានីពូរីម៊ូហាគមូស៊ីមុនដាងពហុភាសាគ្រីកមីរ៉ានដេសអឺហ្ស៊ីយ៉ាម៉" + + "ាហ្សានដឺរេនីនាប៉ូលីតានណាម៉ាអាល្លឺម៉ង់ក្រោមនេវ៉ាវីនីអាសនូអៀនក្វាស្យូងៀម" + + "ប៊ូនណូហ្គៃនគោសូថូខាងជើងនូអ័រណានកូលេភេនហ្គាស៊ីណានផាមភេនហ្គាប៉ាប៉ៃមេនតូប" + + "៉ាលូអានភាសាទំនាក់ទំនងនីហ្សេរីយ៉ាព្រូស៊ានគីចឈីរ៉ាប៉ានូរ៉ារ៉ូតុងហ្គានរុម" + + "បូអារ៉ូម៉ានីរ៉្វាសានដាវីសាខាសាមបូរូសាន់តាលីងាំបេយសានហ្គូស៊ីស៊ីលានស្កុត" + + "ឃើដភាគខាងត្បូងស៊ីណាគុយរ៉ាបូរ៉ុស៊ីនីតាឈីលហ៊ីតសានសាមីខាងត្បូងលូលីសាមីអ៊ី" + + "ណារីសាម៉ីស្កុលសាមីសូនីនគេស្រាណានតុងហ្គោសាហូស៊ូគូម៉ាកូម៉ូរីស៊ីរីធីមនីតេ" + + "សូទីទុំធីហ្គ្រាឃ្លីនហ្គុនថុកពីស៊ីនតារ៉ូកូទុមប៊ូកាទូវ៉ាលូតាសាវ៉ាក់ទូវីន" + + "ៀតាម៉ាសាយអាត្លាសកណ្តាលអាត់មូដអាម់ប៊ុនឌូភាសាមិនស្គាល់វៃវុនចូវេលសឺវ៉ូឡាយ" + + "តាវ៉ារេយវ៉ារីប៉ារីកាលមីគសូហ្គាយ៉ាងបេនយេមបាកន្តាំងតាម៉ាហ្សៃម៉ារ៉ុកស្តង់" + + "ដាហ្សូនីគ្មាន\u200bទិន្នន័យ\u200bភាសាហ្សាហ្សាអារ៉ាប់ (ស្តង់ដារ)អេស្ប៉ា" + + "ញ (អ៊ឺរ៉ុប)ហ្សាក់ស្យុងក្រោមផ្លាមីសព័រទុយហ្គាល់ (អឺរ៉ុប)ម៉ុលដាវីសឺបូក្រ" + + "ូអាតកុងហ្គោស្វាហ៊ីលីចិន\u200bអក្សរ\u200bកាត់ចិន\u200bអក្សរ\u200bពេញ" + +var kmLangIdx = []uint16{ // 615 elements // Entry 0 - 3F - 0x0000, 0x0015, 0x0039, 0x0054, 0x0075, 0x0084, 0x0099, 0x00b7, - 0x00cc, 0x00e1, 0x00f9, 0x0111, 0x0135, 0x0147, 0x0162, 0x0180, - 0x019e, 0x01b6, 0x01d4, 0x01e0, 0x01fb, 0x020d, 0x0222, 0x0231, - 0x0249, 0x0261, 0x0261, 0x026a, 0x0288, 0x029a, 0x02a3, 0x02bb, - 0x02d9, 0x02ee, 0x02fd, 0x0309, 0x0318, 0x0330, 0x0357, 0x036f, - 0x0387, 0x0396, 0x03a5, 0x03ba, 0x03d5, 0x03ea, 0x03ff, 0x0411, - 0x0441, 0x0453, 0x0477, 0x0498, 0x04b3, 0x04d4, 0x04dd, 0x04e9, - 0x0507, 0x0519, 0x0519, 0x052e, 0x053a, 0x054f, 0x0561, 0x0576, + 0x0000, 0x0015, 0x0039, 0x0054, 0x0075, 0x0084, 0x009c, 0x00ba, + 0x00cf, 0x00e4, 0x00fc, 0x0114, 0x0138, 0x014a, 0x015f, 0x017d, + 0x019b, 0x01b3, 0x01d1, 0x01dd, 0x01f8, 0x020a, 0x021f, 0x022e, + 0x0246, 0x025e, 0x025e, 0x0267, 0x0285, 0x0297, 0x02a0, 0x02b8, + 0x02d6, 0x02eb, 0x02fa, 0x0306, 0x0315, 0x032d, 0x0354, 0x036c, + 0x0384, 0x0393, 0x03a2, 0x03b7, 0x03d2, 0x03e7, 0x03fc, 0x040e, + 0x043e, 0x0450, 0x0474, 0x0495, 0x04b0, 0x04d1, 0x04da, 0x04e6, + 0x04f8, 0x050a, 0x050a, 0x051f, 0x052b, 0x0540, 0x0552, 0x0567, // Entry 40 - 7F - 0x0576, 0x0594, 0x0594, 0x05a6, 0x05c1, 0x05c1, 0x05d0, 0x05e8, - 0x05fd, 0x061e, 0x062d, 0x0639, 0x0657, 0x0657, 0x0669, 0x0684, - 0x069c, 0x06bd, 0x06cc, 0x06de, 0x06ed, 0x06ff, 0x0714, 0x071d, - 0x0729, 0x0738, 0x0753, 0x0765, 0x0783, 0x079b, 0x07b0, 0x07c5, + 0x057f, 0x059d, 0x059d, 0x05af, 0x05ca, 0x05ca, 0x05d9, 0x05f1, + 0x0606, 0x0627, 0x0636, 0x0642, 0x0660, 0x0660, 0x0672, 0x068d, + 0x06a5, 0x06c6, 0x06d5, 0x06e7, 0x06f6, 0x0708, 0x071d, 0x0726, + 0x0732, 0x0741, 0x075c, 0x076e, 0x0783, 0x079b, 0x07b0, 0x07c5, 0x07ce, 0x07e9, 0x0810, 0x081f, 0x0843, 0x0858, 0x0867, 0x0882, 0x08a3, 0x08c1, 0x08d9, 0x08e8, 0x08fd, 0x0909, 0x0915, 0x0939, 0x094e, 0x0963, 0x0972, 0x0994, 0x09bf, 0x09e9, 0x09fe, 0x0a0d, @@ -20304,228 +21675,229 @@ var kmLangIdx = []uint16{ // 613 elements // Entry 80 - BF 0x0a9a, 0x0abe, 0x0ad3, 0x0ae8, 0x0afa, 0x0b0f, 0x0b24, 0x0b4b, 0x0b66, 0x0b78, 0x0b8a, 0x0ba8, 0x0bbd, 0x0bd8, 0x0bf3, 0x0c0e, - 0x0c2c, 0x0c38, 0x0c4d, 0x0c65, 0x0c71, 0x0c83, 0x0ca7, 0x0cb9, - 0x0cce, 0x0ce9, 0x0cf8, 0x0d0a, 0x0d22, 0x0d28, 0x0d49, 0x0d5e, - 0x0d70, 0x0d85, 0x0d94, 0x0da9, 0x0db5, 0x0dca, 0x0de5, 0x0e00, - 0x0e12, 0x0e27, 0x0e36, 0x0e48, 0x0e5d, 0x0e6f, 0x0e84, 0x0e8d, - 0x0ea2, 0x0eb1, 0x0ec0, 0x0ec9, 0x0ed5, 0x0ef0, 0x0ef0, 0x0f05, - 0x0f1d, 0x0f1d, 0x0f1d, 0x0f32, 0x0f41, 0x0f41, 0x0f41, 0x0f50, + 0x0c1d, 0x0c29, 0x0c3e, 0x0c56, 0x0c62, 0x0c74, 0x0c98, 0x0caa, + 0x0cbf, 0x0cda, 0x0ce9, 0x0cfb, 0x0d13, 0x0d19, 0x0d3a, 0x0d4f, + 0x0d61, 0x0d76, 0x0d85, 0x0d9a, 0x0da6, 0x0dbb, 0x0dd6, 0x0df1, + 0x0e03, 0x0e18, 0x0e27, 0x0e39, 0x0e4e, 0x0e60, 0x0e75, 0x0e7e, + 0x0e90, 0x0e9f, 0x0eae, 0x0eb7, 0x0ec9, 0x0ee4, 0x0ee4, 0x0ef9, + 0x0f11, 0x0f11, 0x0f11, 0x0f26, 0x0f35, 0x0f35, 0x0f35, 0x0f44, // Entry C0 - FF - 0x0f50, 0x0f7a, 0x0f7a, 0x0f92, 0x0f92, 0x0fa7, 0x0fa7, 0x0fc5, - 0x0fc5, 0x0fc5, 0x0fc5, 0x0fc5, 0x0fc5, 0x0fd4, 0x0fd4, 0x0fec, - 0x0fec, 0x1001, 0x1001, 0x100d, 0x100d, 0x1019, 0x1019, 0x1019, - 0x1019, 0x1019, 0x1028, 0x1028, 0x1034, 0x1034, 0x1034, 0x1058, - 0x106d, 0x106d, 0x107c, 0x107c, 0x107c, 0x1097, 0x1097, 0x1097, - 0x1097, 0x1097, 0x10a3, 0x10a3, 0x10a3, 0x10bb, 0x10bb, 0x10cd, - 0x10cd, 0x10cd, 0x10cd, 0x10cd, 0x10cd, 0x10eb, 0x10fd, 0x10fd, - 0x10fd, 0x1109, 0x1118, 0x1118, 0x112a, 0x112a, 0x113c, 0x114e, + 0x0f44, 0x0f6e, 0x0f6e, 0x0f86, 0x0f86, 0x0f9b, 0x0f9b, 0x0fb9, + 0x0fb9, 0x0fb9, 0x0fb9, 0x0fb9, 0x0fb9, 0x0fc8, 0x0fc8, 0x0fe0, + 0x0fe0, 0x0ff5, 0x0ff5, 0x1001, 0x1001, 0x100d, 0x100d, 0x100d, + 0x100d, 0x100d, 0x101c, 0x101c, 0x1028, 0x1028, 0x1028, 0x104c, + 0x1061, 0x1061, 0x1070, 0x1070, 0x1070, 0x108b, 0x108b, 0x108b, + 0x108b, 0x108b, 0x1097, 0x1097, 0x1097, 0x10af, 0x10af, 0x10c1, + 0x10c1, 0x10c1, 0x10c1, 0x10c1, 0x10c1, 0x10c1, 0x10df, 0x10f1, + 0x10f1, 0x10f1, 0x10fd, 0x110c, 0x110c, 0x111e, 0x111e, 0x1130, // Entry 100 - 13F - 0x1169, 0x1169, 0x1169, 0x1169, 0x11ab, 0x11ab, 0x11bd, 0x11cf, - 0x11db, 0x11db, 0x11db, 0x11f0, 0x11f0, 0x1205, 0x1205, 0x1223, - 0x1223, 0x1232, 0x1232, 0x1256, 0x1256, 0x1274, 0x1286, 0x129e, - 0x129e, 0x129e, 0x12b6, 0x12b6, 0x12b6, 0x12b6, 0x12d1, 0x12d1, - 0x12d1, 0x12ec, 0x12ec, 0x12fe, 0x12fe, 0x12fe, 0x12fe, 0x12fe, - 0x12fe, 0x12fe, 0x131c, 0x1328, 0x1337, 0x1337, 0x1337, 0x1337, - 0x1337, 0x1340, 0x1358, 0x1358, 0x1358, 0x1358, 0x1358, 0x1358, - 0x1379, 0x1379, 0x1379, 0x1379, 0x13a6, 0x13a6, 0x13a6, 0x13bb, + 0x1142, 0x1166, 0x1166, 0x1166, 0x1166, 0x11a8, 0x11a8, 0x11ba, + 0x11cc, 0x11d8, 0x11d8, 0x11d8, 0x11ed, 0x11ed, 0x1202, 0x1202, + 0x1220, 0x1220, 0x122f, 0x122f, 0x1253, 0x1253, 0x1271, 0x1283, + 0x129b, 0x129b, 0x129b, 0x12b3, 0x12b3, 0x12b3, 0x12b3, 0x12ce, + 0x12ce, 0x12ce, 0x12e9, 0x12e9, 0x12fb, 0x12fb, 0x12fb, 0x12fb, + 0x12fb, 0x12fb, 0x12fb, 0x1319, 0x1325, 0x1334, 0x1334, 0x1334, + 0x1334, 0x1334, 0x133d, 0x1355, 0x1355, 0x1355, 0x1355, 0x1355, + 0x1355, 0x1376, 0x1376, 0x1376, 0x1376, 0x13a3, 0x13a3, 0x13a3, // Entry 140 - 17F - 0x13d3, 0x13d3, 0x13d3, 0x13df, 0x13df, 0x1403, 0x1403, 0x140f, - 0x1424, 0x1424, 0x1436, 0x1448, 0x1469, 0x147e, 0x1499, 0x1499, - 0x1499, 0x14ab, 0x14ba, 0x14cc, 0x14cc, 0x14cc, 0x14cc, 0x14cc, - 0x14e1, 0x14f0, 0x14f6, 0x1505, 0x1505, 0x1517, 0x1517, 0x1526, - 0x153e, 0x155f, 0x155f, 0x156b, 0x156b, 0x157a, 0x157a, 0x1598, - 0x1598, 0x1598, 0x15a4, 0x15bc, 0x15d7, 0x15f8, 0x160d, 0x160d, - 0x161c, 0x1646, 0x1646, 0x1646, 0x1658, 0x1667, 0x167c, 0x168e, - 0x169d, 0x16ac, 0x16ac, 0x16be, 0x16d3, 0x16d3, 0x16d3, 0x16e8, + 0x13b8, 0x13d0, 0x13d0, 0x13d0, 0x13dc, 0x13dc, 0x1400, 0x1400, + 0x140c, 0x1421, 0x1421, 0x1433, 0x1445, 0x1466, 0x147b, 0x1496, + 0x1496, 0x1496, 0x14a8, 0x14b7, 0x14c9, 0x14c9, 0x14c9, 0x14c9, + 0x14c9, 0x14de, 0x14ed, 0x14f3, 0x1502, 0x1502, 0x1514, 0x1514, + 0x1523, 0x153b, 0x155c, 0x155c, 0x1568, 0x1568, 0x1577, 0x1577, + 0x1595, 0x1595, 0x1595, 0x15a1, 0x15b9, 0x15d4, 0x15f5, 0x160a, + 0x160a, 0x1619, 0x1643, 0x1643, 0x1643, 0x1655, 0x1664, 0x1679, + 0x168b, 0x169a, 0x16a9, 0x16a9, 0x16bb, 0x16d0, 0x16d0, 0x16d0, // Entry 180 - 1BF - 0x16e8, 0x16e8, 0x16e8, 0x16fa, 0x16fa, 0x16fa, 0x170f, 0x172d, - 0x172d, 0x1745, 0x1745, 0x1754, 0x1760, 0x1772, 0x1781, 0x1781, - 0x1781, 0x1799, 0x1799, 0x17b7, 0x17cc, 0x17e1, 0x17e1, 0x17f0, - 0x17f0, 0x17ff, 0x17ff, 0x180e, 0x181a, 0x1835, 0x1835, 0x185c, - 0x1868, 0x187a, 0x1898, 0x1898, 0x18b3, 0x18c5, 0x18d4, 0x18d4, - 0x18e6, 0x18fb, 0x190a, 0x1925, 0x1925, 0x1925, 0x1925, 0x1943, - 0x196d, 0x196d, 0x198b, 0x199a, 0x19c7, 0x19dc, 0x19eb, 0x19fa, - 0x19fa, 0x1a12, 0x1a27, 0x1a39, 0x1a39, 0x1a39, 0x1a42, 0x1a60, + 0x16e5, 0x16e5, 0x16e5, 0x16e5, 0x16f7, 0x16f7, 0x16f7, 0x16f7, + 0x170c, 0x172a, 0x172a, 0x1742, 0x1742, 0x1751, 0x175d, 0x176f, + 0x177e, 0x177e, 0x177e, 0x1796, 0x1796, 0x17b4, 0x17c9, 0x17de, + 0x17de, 0x17ed, 0x17ed, 0x17fc, 0x17fc, 0x180b, 0x1817, 0x1832, + 0x1832, 0x1859, 0x1865, 0x1877, 0x1895, 0x1895, 0x18b0, 0x18c2, + 0x18d1, 0x18d1, 0x18e3, 0x18f8, 0x1907, 0x1922, 0x1922, 0x1922, + 0x1922, 0x1940, 0x196a, 0x196a, 0x1988, 0x1997, 0x19c4, 0x19d9, + 0x19e8, 0x19f7, 0x19f7, 0x1a0f, 0x1a24, 0x1a36, 0x1a36, 0x1a36, // Entry 1C0 - 1FF - 0x1a6f, 0x1a6f, 0x1a6f, 0x1a84, 0x1a84, 0x1a84, 0x1a84, 0x1a84, - 0x1aab, 0x1aab, 0x1ac9, 0x1aea, 0x1b02, 0x1b02, 0x1b4d, 0x1b4d, - 0x1b4d, 0x1b4d, 0x1b4d, 0x1b4d, 0x1b4d, 0x1b4d, 0x1b4d, 0x1b65, - 0x1b65, 0x1b74, 0x1b74, 0x1b74, 0x1b8c, 0x1bb6, 0x1bb6, 0x1bb6, - 0x1bc5, 0x1bc5, 0x1bc5, 0x1bc5, 0x1bc5, 0x1be3, 0x1bf2, 0x1c07, - 0x1c13, 0x1c13, 0x1c28, 0x1c28, 0x1c3d, 0x1c3d, 0x1c4f, 0x1c64, - 0x1c7f, 0x1c8e, 0x1c8e, 0x1caf, 0x1caf, 0x1cbe, 0x1cbe, 0x1cbe, - 0x1cee, 0x1cee, 0x1cee, 0x1d09, 0x1d12, 0x1d12, 0x1d12, 0x1d12, + 0x1a3f, 0x1a5d, 0x1a6c, 0x1a6c, 0x1a6c, 0x1a81, 0x1a81, 0x1a81, + 0x1a81, 0x1a81, 0x1aa8, 0x1aa8, 0x1ac6, 0x1ae7, 0x1aff, 0x1aff, + 0x1b4a, 0x1b4a, 0x1b4a, 0x1b4a, 0x1b4a, 0x1b4a, 0x1b4a, 0x1b4a, + 0x1b4a, 0x1b62, 0x1b62, 0x1b71, 0x1b71, 0x1b71, 0x1b89, 0x1bb3, + 0x1bb3, 0x1bb3, 0x1bc2, 0x1bc2, 0x1bc2, 0x1bc2, 0x1bc2, 0x1be0, + 0x1bef, 0x1c04, 0x1c10, 0x1c10, 0x1c25, 0x1c25, 0x1c3d, 0x1c3d, + 0x1c4f, 0x1c64, 0x1c7f, 0x1c8e, 0x1c8e, 0x1cb8, 0x1cb8, 0x1cc7, + 0x1cc7, 0x1cc7, 0x1cf7, 0x1cf7, 0x1cf7, 0x1d12, 0x1d1b, 0x1d1b, // Entry 200 - 23F - 0x1d12, 0x1d36, 0x1d4e, 0x1d72, 0x1d8d, 0x1da2, 0x1da2, 0x1dcc, - 0x1dcc, 0x1dd8, 0x1dd8, 0x1df0, 0x1df0, 0x1df0, 0x1e05, 0x1e05, - 0x1e17, 0x1e17, 0x1e17, 0x1e26, 0x1e32, 0x1e32, 0x1e41, 0x1e59, - 0x1e59, 0x1e59, 0x1e59, 0x1e77, 0x1e77, 0x1e77, 0x1e77, 0x1e77, - 0x1e92, 0x1e92, 0x1ea7, 0x1ea7, 0x1ea7, 0x1ea7, 0x1ebf, 0x1ed4, - 0x1eef, 0x1f01, 0x1f40, 0x1f55, 0x1f55, 0x1f73, 0x1f7c, 0x1f82, - 0x1f82, 0x1f82, 0x1f82, 0x1f82, 0x1f82, 0x1f82, 0x1f91, 0x1fa0, - 0x1fb8, 0x1fca, 0x1fca, 0x1fe8, 0x1fe8, 0x1ffa, 0x1ffa, 0x200c, + 0x1d1b, 0x1d1b, 0x1d1b, 0x1d3f, 0x1d57, 0x1d7b, 0x1d96, 0x1dab, + 0x1dab, 0x1dd5, 0x1dd5, 0x1de1, 0x1de1, 0x1df9, 0x1df9, 0x1df9, + 0x1e0e, 0x1e0e, 0x1e1d, 0x1e1d, 0x1e1d, 0x1e2c, 0x1e38, 0x1e38, + 0x1e47, 0x1e5f, 0x1e5f, 0x1e5f, 0x1e5f, 0x1e7d, 0x1e7d, 0x1e7d, + 0x1e7d, 0x1e7d, 0x1e98, 0x1e98, 0x1ead, 0x1ead, 0x1ead, 0x1ead, + 0x1ec5, 0x1eda, 0x1ef5, 0x1f07, 0x1f46, 0x1f5b, 0x1f5b, 0x1f79, + 0x1fa0, 0x1fa6, 0x1fa6, 0x1fa6, 0x1fa6, 0x1fa6, 0x1fa6, 0x1fa6, + 0x1fb5, 0x1fc4, 0x1fdc, 0x1fee, 0x1fee, 0x200c, 0x200c, 0x201e, // Entry 240 - 27F - 0x200c, 0x200c, 0x2021, 0x2030, 0x2030, 0x2045, 0x2045, 0x2045, - 0x2045, 0x2045, 0x208a, 0x209c, 0x20d5, 0x20ed, 0x211a, 0x211a, - 0x211a, 0x211a, 0x211a, 0x211a, 0x211a, 0x211a, 0x211a, 0x214a, - 0x214a, 0x214a, 0x214a, 0x214a, 0x217a, 0x218f, 0x218f, 0x21c8, - 0x21e0, 0x2201, 0x2231, 0x225b, 0x2282, -} // Size: 1250 bytes - -const knLangStr string = "" + // Size: 12261 bytes + 0x201e, 0x2030, 0x2030, 0x2030, 0x2045, 0x2054, 0x2054, 0x2069, + 0x2069, 0x2069, 0x2069, 0x2069, 0x20ae, 0x20c0, 0x20f9, 0x2111, + 0x2141, 0x2141, 0x2141, 0x2141, 0x2141, 0x2141, 0x2141, 0x2141, + 0x2141, 0x2171, 0x2171, 0x2171, 0x2171, 0x2171, 0x21a1, 0x21b6, + 0x21b6, 0x21ef, 0x2207, 0x2228, 0x2258, 0x2282, 0x22a9, +} // Size: 1254 bytes + +const knLangStr string = "" + // Size: 12372 bytes "ಅಫಾರ್ಅಬ್ಖಾಜಿಯನ್ಅವೆಸ್ಟನ್ಆಫ್ರಿಕಾನ್ಸ್ಅಕಾನ್ಅಂಹರಿಕ್ಅರಗೊನೀಸ್ಅರೇಬಿಕ್ಅಸ್ಸಾಮೀಸ್ಅವ" + "ರಿಕ್ಅಯ್ಮಾರಾಅಜೆರ್ಬೈಜಾನಿಬಶ್ಕಿರ್ಬೆಲರೂಸಿಯನ್ಬಲ್ಗೇರಿಯನ್ಬಿಸ್ಲಾಮಾಬಂಬಾರಾಬಾಂಗ್ಲಾ" + "ಟಿಬೇಟಿಯನ್ಬ್ರೆಟನ್ಬೋಸ್ನಿಯನ್ಕೆಟಲಾನ್ಚೆಚನ್ಕಮೊರೊಕೋರ್ಸಿಕನ್ಕ್ರೀಜೆಕ್ಚರ್ಚ್ ಸ್ಲಾವ" + - "ಿಕ್ಚುವಾಶ್ವೆಲ್ಶ್ಡ್ಯಾನಿಶ್ಜರ್ಮನ್ದಿವೆಹಿಜೋಂಗ್\u200cಖಾಈವ್ಗ್ರೀಕ್ಇಂಗ್ಲೀಷ್ಎಸ್ಪೆ" + - "ರಾಂಟೊಸ್ಪ್ಯಾನಿಷ್ಎಸ್ಟೊನಿಯನ್ಬಾಸ್ಕ್ಪರ್ಶಿಯನ್ಫುಲಾಹ್ಫಿನ್ನಿಶ್ಫಿಜಿಯನ್ಫರೋಸಿಫ್ರೆಂ" + - "ಚ್ಪಶ್ಚಿಮ ಫ್ರಿಸಿಯನ್ಐರಿಷ್ಸ್ಕಾಟಿಶ್ ಗ್ಯಾಲಿಕ್ಗ್ಯಾಲಿಶಿಯನ್ಗೌರಾನಿಗುಜರಾತಿಮ್ಯಾಂಕ" + - "್ಸ್ಹೌಸಾಹೀಬ್ರ್ಯೂಹಿಂದಿಹಿರಿ ಮೊಟುಕ್ರೊಯೇಶಿಯನ್ಹೈಷಿಯನ್ ಕ್ರಿಯೋಲ್ಹಂಗೇರಿಯನ್ಅರ್ಮೇ" + - "ನಿಯನ್ಹೆರೆರೊಇಂಟರ್\u200cಲಿಂಗ್ವಾಇಂಡೋನೇಶಿಯನ್ಇಂಟರ್ಲಿಂಗ್ಇಗ್ಬೊಸಿಚುಅನ್ ಯಿಇನುಪಿ" + - "ಯಾಕ್ಇಡೊಐಸ್ಲಾಂಡಿಕ್ಇಟಾಲಿಯನ್ಇನುಕ್ಟಿಟುಟ್ಜಾಪನೀಸ್ಜಾವಾನೀಸ್ಜಾರ್ಜಿಯನ್ಕಾಂಗೋಕಿಕುಯ" + - "ುಕ್ವಾನ್\u200cಯಾಮಾಕಝಕ್ಕಲಾಲ್ಲಿಸುಟ್ಖಮೇರ್ಕನ್ನಡಕೊರಿಯನ್ಕನುರಿಕಾಶ್ಮೀರಿಕುರ್ದಿಷ್" + - "ಕೋಮಿಕಾರ್ನಿಷ್ಕಿರ್ಗಿಜ್ಲ್ಯಾಟಿನ್ಲಕ್ಸಂಬರ್ಗಿಷ್ಗಾಂಡಾಲಿಂಬರ್ಗಿಶ್ಲಿಂಗಾಲಲಾವೋಲಿಥುವ" + - "ೇನಿಯನ್ಲೂಬಾ-ಕಟಾಂಗಾಲಟ್ವಿಯನ್ಮಲಗಾಸಿಮಾರ್ಶಲ್ಲೀಸ್ಮಾವೋರಿಮೆಸಿಡೋನಿಯನ್ಮಲಯಾಳಂಮಂಗೋಲ" + - "ಿಯನ್ಮರಾಠಿಮಲಯ್ಮಾಲ್ಟೀಸ್ಬರ್ಮೀಸ್ನೌರುಉತ್ತರ ದೆಬೆಲೆನೇಪಾಳಿಡೋಂಗಾಡಚ್ನಾರ್ವೇಜಿಯನ್ " + - "ನೈನಾರ್ಸ್ಕ್ನಾರ್ವೆಜಿಯನ್ ಬೊಕ್ಮಲ್ದಕ್ಷಿಣ ದೆಬೆಲೆನವಾಜೊನ್ಯಾಂಜಾಒಸಿಟನ್ಒಜಿಬ್ವಾಓರೊ" + - "ಮೋಒರಿಯಾಒಸ್ಸೆಟಿಕ್ಪಂಜಾಬಿಪಾಲಿಪಾಲಿಷ್ಪಾಷ್ಟೋಪೋರ್ಚುಗೀಸ್ಕ್ವೆಚುವಾರೊಮಾನ್ಷ್ರುಂಡಿರ" + - "ೊಮೇನಿಯನ್ರಷ್ಯನ್ಕೀನ್ಯಾರುವಾಂಡಾಸಂಸ್ಕೃತಸರ್ಡೀನಿಯನ್ಸಿಂಧಿಉತ್ತರ ಸಾಮಿಸಾಂಗೋಸಿಂಹಳಸ" + - "್ಲೋವಾಕ್ಸ್ಲೋವೇನಿಯನ್ಸಮೋವನ್ಶೋನಾಸೊಮಾಲಿಅಲ್ಬೇನಿಯನ್ಸರ್ಬಿಯನ್ಸ್ವಾತಿದಕ್ಷಿಣ ಸೋಥೋಸ" + - "ುಂಡಾನೀಸ್ಸ್ವೀಡಿಷ್ಸ್ವಹಿಲಿತಮಿಳುತೆಲುಗುತಾಜಿಕ್ಥಾಯ್ಟಿಗ್ರಿನ್ಯಾಟರ್ಕ್\u200cಮೆನ್ಸ" + - "್ವಾನಾಟೋಂಗನ್ಟರ್ಕಿಶ್ಸೋಂಗಾಟಾಟರ್ಟಹೀಟಿಯನ್ಉಯಿಘರ್ಉಕ್ರೈನಿಯನ್ಉರ್ದುಉಜ್ಬೇಕ್ವೆಂಡಾವ" + - "ಿಯೇಟ್ನಾಮೀಸ್ವೋಲಾಪುಕ್ವಾಲೂನ್ವೋಲೋಫ್ಕ್ಸೋಸಯಿಡ್ಡಿಶ್ಯೊರುಬಾಝೂವಾಂಗ್ಚೈನೀಸ್ಜುಲುಅಛಿ" + - "ನೀಸ್ಅಕೋಲಿಅಡಂಗ್ಮೆಅಡೈಘೆಆಫ್ರಿಹಿಲಿಅಘೆಮ್ಐನುಅಕ್ಕಾಡಿಯನ್ಅಲೆಯುಟ್ದಕ್ಷಿಣ ಅಲ್ಟಾಯ್ಪ" + - "್ರಾಚೀನ ಇಂಗ್ಲೀಷ್ಆಂಗಿಕಾಅರಾಮಿಕ್ಮಪುಚೆಅರಪಾಹೋಅರಾವಾಕ್ಅಸುಆಸ್ಟುರಿಯನ್ಅವಧಿಬಲೂಚಿಬಲ" + - "ಿನೀಸ್ಬಸಾಬೇಜಾಬೆಂಬಾಬೆನಪಶ್ಚಿಮ ಬಲೊಚಿಭೋಜಪುರಿಬಿಕೊಲ್ಬಿನಿಸಿಕ್ಸಿಕಾಬ್ರಜ್ಬೋಡೊಬುರಿ" + - "ಯಟ್ಬುಗಿನೀಸ್ಬ್ಲಿನ್ಕ್ಯಾಡ್ಡೋಕಾರಿಬ್ಅಟ್ಸಮ್ಸೆಬುಆನೋಚಿಗಾಚಿಬ್ಚಾಚಗಟಾಯ್ಚೂಕಿಸೆಮಾರಿ" + - "ಚಿನೂಕ್ ಜಾರ್ಗೋನ್ಚೋಕ್ಟಾವ್ಚಿಪೆವ್ಯಾನ್ಚೆರೋಕೀಚೀಯೆನ್ನೇಸೊರಾನಿ ಕುರ್ದಿಷ್ಕೊಪ್ಟಿಕ್" + - "ಕ್ರಿಮೀಯನ್ ಟರ್ಕಿಷ್ಸೆಸೆಲ್ವಾ ಕ್ರಯೋಲ್ ಫ್ರೆಂಚ್ಕಶುಬಿಯನ್ಡಕೋಟಾದರ್ಗ್ವಾಟೈಟಡೆಲಾವೇ" + - "ರ್ಸ್ಲೇವ್ಡೋಗ್ರಿಬ್ಡಿಂಕಾಜರ್ಮಾಡೋಗ್ರಿಲೋವರ್ ಸೋರ್ಬಿಯನ್ಡುವಾಲಾಮಧ್ಯ ಡಚ್ಜೊಲ-ಫೊನ್ಯ" + - "ಿಡ್ಯೂಲಾಡಜಾಗಎಂಬುಎಫಿಕ್ಪ್ರಾಚೀನ ಈಜಿಪ್ಟಿಯನ್ಎಕಾಜುಕ್ಎಲಾಮೈಟ್ಮಧ್ಯ ಇಂಗ್ಲೀಷ್ಇವಾಂಡ" + - "ೋಫಾಂಗ್ಫಿಲಿಪಿನೊಫೋನ್ಮಧ್ಯ ಫ್ರೆಂಚ್ಪ್ರಾಚೀನ ಫ್ರೆಂಚ್ಉತ್ತರ ಫ್ರಿಸಿಯನ್ಪೂರ್ವ ಫ್ರಿ" + - "ಸಿಯನ್ಫ್ರಿಯುಲಿಯನ್ಗಗಗೌಜ್ಗಾನ್ ಚೀನೀಸ್ಗಾಯೋಗ್ಬಾಯಾಗೀಝ್ಗಿಲ್ಬರ್ಟೀಸ್ಮಧ್ಯ ಹೈ ಜರ್ಮ" + - "ನ್ಪ್ರಾಚೀನ ಹೈ ಜರ್ಮನ್ಗೊಂಡಿಗೊರೊಂಟಾಲೋಗೋಥಿಕ್ಗ್ರೇಬೋಪ್ರಾಚೀನ ಗ್ರೀಕ್ಸ್ವಿಸ್ ಜರ್ಮ" + - "ನ್ಗುಸಿಗ್ವಿಚ್\u200cಇನ್ಹೈಡಾಹಕ್ಹವಾಯಿಯನ್ಹಿಲಿಗೇನನ್ಹಿಟ್ಟಿಟೆಮೋಂಗ್ಅಪ್ಪರ್ ಸರ್ಬಿ" + - "ಯನ್ಶಯಾಂಗ್ ಚೀನೀಸೇಹೂಪಾಇಬಾನ್ಇಬಿಬಿಯೋಇಲ್ಲಿಕೋಇಂಗುಷ್ಲೊಜ್ಬಾನ್ನೊಂಬಾಮ್ಯಕಮೆಜೂಡಿಯೋ" + - "-ಪರ್ಶಿಯನ್ಜೂಡಿಯೋ-ಅರೇಬಿಕ್ಕಾರಾ-ಕಲ್ಪಾಕ್ಕಬೈಲ್ಕಚಿನ್ಜ್ಜುಕಂಬಾಕಾವಿಕಬರ್ಡಿಯನ್ಟ್ಯಾಪ್" + - "ಮ್ಯಾಕೊಂಡ್ಕಬುವೆರ್ಡಿಯನುಕೋರೋಖಾಸಿಖೋಟಾನೀಸ್ಕೊಯ್ರ ಚೀನಿಕಾಕೊಕಲೆಂಜಿನ್ಕಿಂಬುಂಡುಕೋಮ" + - "ಿ-ಪರ್ಮ್ಯಕ್ಕೊಂಕಣಿಕೊಸರಿಯನ್ಕಪೆಲ್ಲೆಕರಚಯ್-ಬಲ್ಕಾರ್ಕರೇಲಿಯನ್ಕುರುಖ್ಶಂಬಲಬಫಿಯಕಲೊಗ" + - "್ನಿಯನ್ಕುಮೈಕ್ಕುಟೇನಾಯ್ಲ್ಯಾಡಿನೋಲಾಂಗಿಲಹಂಡಾಲಂಬಾಲೆಜ್ಘಿಯನ್ಲಕೊಟಮೊಂಗೋಲೋಝಿಉತ್ತರ " + - "ಲೂರಿಲುಬ-ಲುಲಾಲೂಯಿಸೆನೋಲುಂಡಾಲುವೋಮಿಝೋಲುಯಿಯಮದುರೀಸ್ಮಗಾಹಿಮೈಥಿಲಿಮಕಾಸರ್ಮಂಡಿಂಗೊಮ" + - "ಸಾಯ್ಮೋಕ್ಷಮಂದಾರ್ಮೆಂಡೆಮೆರುಮೊರಿಸನ್ಮಧ್ಯ ಐರಿಷ್ಮ್ಯಖುವಾ- ಮೀಟ್ಟೊಮೆಟಾಮಿಕ್\u200c" + - "ಮ್ಯಾಕ್ಮಿನಂಗ್\u200cಕಬಾವುಮಂಚುಮಣಿಪುರಿಮೊಹಾವ್ಕ್ಮೊಸ್ಸಿಮುಂಡಂಗ್ಬಹುಸಂಖ್ಯೆಯ ಭಾಷೆ" + - "ಗಳುಕ್ರೀಕ್ಮಿರಾಂಡೀಸ್ಮಾರ್ವಾಡಿಎರ್ಝ್ಯಾಮಜಂದೆರಾನಿನಾನ್ನಿಯಾಪೊಲಿಟನ್ನಮಲೋ ಜರ್ಮನ್ನೇ" + - "ವಾರೀನಿಯಾಸ್ನಿಯುವನ್ಖ್ವಾಸಿಯೊನಿಂಬೂನ್ನೊಗಾಯ್ಪ್ರಾಚೀನ ನೋರ್ಸ್ಎನ್\u200cಕೋಉತ್ತರ ಸ" + - "ೋಥೋನೂಯರ್ಶಾಸ್ತ್ರೀಯ ನೇವಾರಿನ್ಯಾಮ್\u200cವೆಂಜಿನ್ಯಾನ್\u200cಕೋಲೆನ್ಯೋರೋಜೀಮಾಓಸಾ" + - "ಜ್ಒಟ್ಟೋಮನ್ ತುರ್ಕಿಷ್ಪಂಗಾಸಿನನ್ಪಹ್ಲವಿಪಂಪಾಂಗಾಪಾಪಿಯಮೆಂಟೋಪಲುಆನ್ನೈಜೀರಿಯನ್ ಪಿಡ" + - "್ಗಿನ್ಪ್ರಾಚೀನ ಪರ್ಶಿಯನ್ಫೀನಿಷಿಯನ್ಪೋನ್\u200c\u200cಪಿಯನ್ಪ್ರಶಿಯನ್ಪ್ರಾಚೀನ ಪ್ರ" + - "ೊವೆನ್ಶಿಯಲ್ಕಿಷೆರಾಜಸ್ಥಾನಿರಾಪಾನುಯಿರಾರೋಟೊಂಗನ್ರೊಂಬೊರೋಮಾನಿಅರೋಮಾನಿಯನ್ರುವಸಂಡಾವ" + - "ೇಸಖಾಸಮರಿಟನ್ ಅರಾಮಿಕ್ಸಂಬುರುಸಸಾಕ್ಸಂತಾಲಿನಂಬೇಸಂಗುಸಿಸಿಲಿಯನ್ಸ್ಕೋಟ್ಸ್ದಕ್ಷಿಣ ಕು" + - "ರ್ದಿಶ್ಸೆನಸೆಲ್ಕಪ್ಕೊಯ್ರಬೊರೊ ಸೆನ್ನಿಪ್ರಾಚೀನ ಐರಿಷ್ಟಷೆಲ್\u200dಹಿಟ್ಶಾನ್ಸಿಡಾಮೋ" + - "ದಕ್ಷಿಣ ಸಾಮಿಲೂಲ್ ಸಾಮಿಇನರಿ ಸಾಮಿಸ್ಕೋಟ್ ಸಾಮಿಸೋನಿಂಕೆಸೋಗ್ಡಿಯನ್ಸ್ರಾನನ್ ಟೋಂಗೋಸ" + - "ೇರೇರ್ಸಹೊಸುಕುಮಾಸುಸುಸುಮೇರಿಯನ್ಕೊಮೊರಿಯನ್ಶಾಸ್ತ್ರೀಯ ಸಿರಿಯಕ್ಸಿರಿಯಕ್ಟಿಮ್ನೆಟೆಸೊ" + - "ಟೆರೆನೋಟೇಟಮ್ಟೈಗ್ರೆಟಿವ್ಟೊಕೆಲಾವ್ಕ್ಲಿಂಗನ್ಟ್ಲಿಂಗಿಟ್ಟಮಾಷೆಕ್ನ್ಯಾಸಾ ಟೋಂಗಾಟೋಕ್ " + - "ಪಿಸಿನ್ಟರೊಕೊಸಿಂಶಿಯನ್ತುಂಬುಕಾಟುವಾಲುಟಸವಕ್ಟುವಿನಿಯನ್ಮಧ್ಯ ಅಟ್ಲಾಸ್ ಟಮಜೈಟ್ಉಡ್" + - "\u200cಮುರ್ಟ್ಉಗಾರಿಟಿಕ್ಉಂಬುಂಡುರೂಟ್ವಾಯಿವೋಟಿಕ್ವುಂಜೊವಾಲ್ಸರ್ವಲಾಯ್ತಾವರಾಯ್ವಾಷೋವಾ" + - "ರ್ಲ್\u200cಪಿರಿವುಕಲ್ಮೈಕ್ಸೊಗಯಾವೊಯಪೀಸೆಯಾಂಗ್ಬೆನ್ಯೆಂಬಾಕ್ಯಾಂಟನೀಸ್ಝೋಪೊಟೆಕ್ಬ್ಲ" + - "ಿಸ್ಸಿಂಬಲ್ಸ್ಝೆನಾಗಾಸ್ಟ್ಯಾಂಡರ್ಡ್ ಮೊರೊಕ್ಕನ್ ಟಮಜೈಟ್ಝೂನಿಯಾವುದೇ ಭಾಷಾಸಂಬಂಧಿ ವಿ" + - "ಷಯವಿಲ್ಲಜಾಝಾಆಧುನಿಕ ಪ್ರಮಾಣಿತ ಅರೇಬಿಕ್ಆಸ್ಟ್ರಿಯನ್ ಜರ್ಮನ್ಸ್ವಿಸ್ ಹೈ ಜರ್ಮನ್ಆಸ್" + - "ಟ್ರೇಲಿಯನ್ ಇಂಗ್ಲೀಷ್ಕೆನೆಡಿಯನ್ ಇಂಗ್ಲೀಷ್ಬ್ರಿಟಿಷ್ ಇಂಗ್ಲೀಷ್ಅಮೆರಿಕನ್ ಇಂಗ್ಲೀಷ್" + - "ಲ್ಯಾಟಿನ್ ಅಮೇರಿಕನ್ ಸ್ಪ್ಯಾನಿಷ್ಯುರೋಪಿಯನ್ ಸ್ಪ್ಯಾನಿಷ್ಮೆಕ್ಸಿಕನ್ ಸ್ಪ್ಯಾನಿಷ್ಕೆ" + - "ನೆಡಿಯನ್ ಫ್ರೆಂಚ್ಸ್ವಿಸ್ ಫ್ರೆಂಚ್ಲೋ ಸ್ಯಾಕ್ಸನ್ಫ್ಲೆಮಿಷ್ಬ್ರೆಜಿಲಿಯನ್ ಪೋರ್ಚುಗೀಸ" + - "್ಯೂರೋಪಿಯನ್ ಪೋರ್ಚುಗೀಸ್ಮಾಲ್ಡೇವಿಯನ್ಸರ್ಬೋ-ಕ್ರೊಯೇಶಿಯನ್ಕಾಂಗೊ ಸ್ವಹಿಲಿಸರಳೀಕೃತ " + - "ಚೈನೀಸ್ಸಾಂಪ್ರದಾಯಿಕ ಚೈನೀಸ್" - -var knLangIdx = []uint16{ // 613 elements + "ಿಕ್ಚುವಾಶ್ವೆಲ್ಶ್ಡ್ಯಾನಿಶ್ಜರ್ಮನ್ದಿವೆಹಿಜೋಂಗ್\u200cಖಾಈವ್ಗ್ರೀಕ್ಇಂಗ್ಲಿಷ್ಎಸ್ಪೆ" + + "ರಾಂಟೊಸ್ಪ್ಯಾನಿಷ್ಎಸ್ಟೊನಿಯನ್ಬಾಸ್ಕ್ಪರ್ಶಿಯನ್ಫುಲಾಫಿನ್ನಿಶ್ಫಿಜಿಯನ್ಫರೋಸಿಫ್ರೆಂಚ್" + + "ಪಶ್ಚಿಮ ಫ್ರಿಸಿಯನ್ಐರಿಷ್ಸ್ಕಾಟಿಶ್ ಗೆಲಿಕ್ಗ್ಯಾಲಿಶಿಯನ್ಗೌರಾನಿಗುಜರಾತಿಮ್ಯಾಂಕ್ಸ್ಹ" + + "ೌಸಾಹೀಬ್ರೂಹಿಂದಿಹಿರಿ ಮೊಟುಕ್ರೊಯೇಶಿಯನ್ಹೈಟಿಯನ್ ಕ್ರಿಯೋಲಿಹಂಗೇರಿಯನ್ಅರ್ಮೇನಿಯನ್ಹ" + + "ೆರೆರೊಇಂಟರ್\u200cಲಿಂಗ್ವಾಇಂಡೋನೇಶಿಯನ್ಇಂಟರ್ಲಿಂಗ್ಇಗ್ಬೊಸಿಚುಅನ್ ಯಿಇನುಪಿಯಾಕ್ಇಡ" + + "ೊಐಸ್\u200cಲ್ಯಾಂಡಿಕ್ಇಟಾಲಿಯನ್ಇನುಕ್ಟಿಟುಟ್ಜಾಪನೀಸ್ಜಾವಾನೀಸ್ಜಾರ್ಜಿಯನ್ಕಾಂಗೋಕಿಕ" + + "ುಯುಕ್ವಾನ್\u200cಯಾಮಾಕಝಕ್ಕಲಾಲ್ಲಿಸುಟ್ಖಮೇರ್ಕನ್ನಡಕೊರಿಯನ್ಕನುರಿಕಾಶ್ಮೀರಿಕುರ್ದಿ" + + "ಷ್ಕೋಮಿಕಾರ್ನಿಷ್ಕಿರ್ಗಿಜ್ಲ್ಯಾಟಿನ್ಲಕ್ಸಂಬರ್ಗಿಷ್ಗಾಂಡಾಲಿಂಬರ್ಗಿಶ್ಲಿಂಗಾಲಲಾವೋಲಿಥ" + + "ುವೇನಿಯನ್ಲೂಬಾ-ಕಟಾಂಗಾಲಾಟ್ವಿಯನ್ಮಲಗಾಸಿಮಾರ್ಶಲ್ಲೀಸ್ಮಾವೋರಿಮೆಸಿಡೋನಿಯನ್ಮಲಯಾಳಂಮಂ" + + "ಗೋಲಿಯನ್ಮರಾಠಿಮಲಯ್ಮಾಲ್ಟೀಸ್ಬರ್ಮೀಸ್ನೌರುಉತ್ತರ ದೆಬೆಲೆನೇಪಾಳಿಡೋಂಗಾಡಚ್ನಾರ್ವೇಜಿಯ" + + "ನ್ ನೈನಾರ್ಸ್ಕ್ನಾರ್ವೆಜಿಯನ್ ಬೊಕ್ಮಲ್ದಕ್ಷಿಣ ದೆಬೆಲೆನವಾಜೊನ್ಯಾಂಜಾಒಸಿಟನ್ಒಜಿಬ್ವಾ" + + "ಒರೊಮೊಒಡಿಯಒಸ್ಸೆಟಿಕ್ಪಂಜಾಬಿಪಾಲಿಪೊಲಿಶ್ಪಾಷ್ಟೋಪೋರ್ಚುಗೀಸ್ಕ್ವೆಚುವಾರೊಮಾನ್ಶ್ರುಂಡ" + + "ಿರೊಮೇನಿಯನ್ರಷ್ಯನ್ಕಿನ್ಯಾರ್\u200cವಾಂಡಾಸಂಸ್ಕೃತಸರ್ಡೀನಿಯನ್ಸಿಂಧಿಉತ್ತರ ಸಾಮಿಸಾಂ" + + "ಗೋಸಿಂಹಳಸ್ಲೋವಾಕ್ಸ್ಲೋವೇನಿಯನ್ಸಮೋವನ್ಶೋನಾಸೊಮಾಲಿಅಲ್ಬೇನಿಯನ್ಸೆರ್ಬಿಯನ್ಸ್ವಾತಿದಕ್" + + "ಷಿಣ ಸೋಥೋಸುಂಡಾನೀಸ್ಸ್ವೀಡಿಷ್ಸ್ವಹಿಲಿತಮಿಳುತೆಲುಗುತಾಜಿಕ್ಥಾಯ್ಟಿಗ್ರಿನ್ಯಾಟರ್ಕ್" + + "\u200cಮೆನ್ಸ್ವಾನಾಟೋಂಗನ್ಟರ್ಕಿಶ್ಸೋಂಗಾಟಾಟರ್ಟಹೀಟಿಯನ್ಉಯಿಘರ್ಉಕ್ರೇನಿಯನ್ಉರ್ದುಉಜ್ಬ" + + "ೇಕ್ವೆಂಡಾವಿಯೆಟ್ನಾಮೀಸ್ವೋಲಾಪುಕ್ವಾಲೂನ್ವೋಲೋಫ್ಕ್ಸೋಸಯಿಡ್ಡಿಶ್ಯೊರುಬಾಝೂವಾಂಗ್ಚೈನೀ" + + "ಸ್ಜುಲುಅಛಿನೀಸ್ಅಕೋಲಿಅಡಂಗ್ಮೆಅಡೈಘೆಆಫ್ರಿಹಿಲಿಅಘೆಮ್ಐನುಅಕ್ಕಾಡಿಯನ್ಅಲೆಯುಟ್ದಕ್ಷಿಣ" + + " ಅಲ್ಟಾಯ್ಪ್ರಾಚೀನ ಇಂಗ್ಲೀಷ್ಆಂಗಿಕಾಅರಾಮಿಕ್ಮಪುಚೆಅರಪಾಹೋಅರಾವಾಕ್ಅಸುಆಸ್ಟುರಿಯನ್ಅವಧಿ" + + "ಬಲೂಚಿಬಲಿನೀಸ್ಬಸಾಬೇಜಾಬೆಂಬಾಬೆನಪಶ್ಚಿಮ ಬಲೊಚಿಭೋಜಪುರಿಬಿಕೊಲ್ಬಿನಿಸಿಕ್ಸಿಕಾಬ್ರಜ್ಬ" + + "ೋಡೊಬುರಿಯಟ್ಬುಗಿನೀಸ್ಬ್ಲಿನ್ಕ್ಯಾಡ್ಡೋಕಾರಿಬ್ಅಟ್ಸಮ್ಸೆಬುವಾನೊಚಿಗಾಚಿಬ್ಚಾಚಗಟಾಯ್ಚೂ" + + "ಕಿಸೆಮಾರಿಚಿನೂಕ್ ಜಾರ್ಗೋನ್ಚೋಕ್ಟಾವ್ಚಿಪೆವ್ಯಾನ್ಚೆರೋಕಿಚೀಯೆನ್ನೇಮಧ್ಯ ಕುರ್ದಿಶ್ಕೊ" + + "ಪ್ಟಿಕ್ಕ್ರಿಮೀಯನ್ ಟರ್ಕಿಷ್ಸೆಸೆಲ್ವಾ ಕ್ರಯೋಲ್ ಫ್ರೆಂಚ್ಕಶುಬಿಯನ್ಡಕೋಟಾದರ್ಗ್ವಾಟೈಟ" + + "ಡೆಲಾವೇರ್ಸ್ಲೇವ್ಡೋಗ್ರಿಬ್ಡಿಂಕಾಜರ್ಮಾಡೋಗ್ರಿಲೋವರ್ ಸೋರ್ಬಿಯನ್ಡುವಾಲಾಮಧ್ಯ ಡಚ್ಜೊಲ" + + "-ಫೊನ್ಯಿಡ್ಯೂಲಾಡಜಾಗಎಂಬುಎಫಿಕ್ಪ್ರಾಚೀನ ಈಜಿಪ್ಟಿಯನ್ಎಕಾಜುಕ್ಎಲಾಮೈಟ್ಮಧ್ಯ ಇಂಗ್ಲೀಷ್ಇ" + + "ವಾಂಡೋಫಾಂಗ್ಫಿಲಿಪಿನೊಫೋನ್ಕಾಜುನ್ ಫ್ರೆಂಚ್ಮಧ್ಯ ಫ್ರೆಂಚ್ಪ್ರಾಚೀನ ಫ್ರೆಂಚ್ಉತ್ತರ ಫ" + + "್ರಿಸಿಯನ್ಪೂರ್ವ ಫ್ರಿಸಿಯನ್ಫ್ರಿಯುಲಿಯನ್ಗಗಗೌಜ್ಗಾನ್ ಚೀನೀಸ್ಗಾಯೋಗ್ಬಾಯಾಗೀಝ್ಗಿಲ್ಬ" + + "ರ್ಟೀಸ್ಮಧ್ಯ ಹೈ ಜರ್ಮನ್ಪ್ರಾಚೀನ ಹೈ ಜರ್ಮನ್ಗೊಂಡಿಗೊರೊಂಟಾಲೋಗೋಥಿಕ್ಗ್ರೇಬೋಪ್ರಾಚೀನ" + + " ಗ್ರೀಕ್ಸ್ವಿಸ್ ಜರ್ಮನ್ಗುಸಿಗ್ವಿಚ್\u200cಇನ್ಹೈಡಾಹಕ್ಹವಾಯಿಯನ್ಹಿಲಿಗೇನನ್ಹಿಟ್ಟಿಟೆಮ" + + "ೋಂಗ್ಅಪ್ಪರ್ ಸರ್ಬಿಯನ್ಶಯಾಂಗ್ ಚೀನೀಸೇಹೂಪಾಇಬಾನ್ಇಬಿಬಿಯೋಇಲ್ಲಿಕೋಇಂಗುಷ್ಲೊಜ್ಬಾನ್ನ" + + "ೊಂಬಾಮ್ಯಕಮೆಜೂಡಿಯೋ-ಪರ್ಶಿಯನ್ಜೂಡಿಯೋ-ಅರೇಬಿಕ್ಕಾರಾ-ಕಲ್ಪಾಕ್ಕಬೈಲ್ಕಚಿನ್ಜ್ಜುಕಂಬಾಕ" + + "ಾವಿಕಬರ್ಡಿಯನ್ಟ್ಯಾಪ್ಮ್ಯಾಕೊಂಡ್ಕಬುವೆರ್ಡಿಯನುಕೋರೋಖಾಸಿಖೋಟಾನೀಸ್ಕೊಯ್ರ ಚೀನಿಕಾಕೊಕ" + + "ಲೆಂಜಿನ್ಕಿಂಬುಂಡುಕೋಮಿ-ಪರ್ಮ್ಯಕ್ಕೊಂಕಣಿಕೊಸರಿಯನ್ಕಪೆಲ್ಲೆಕರಚಯ್-ಬಲ್ಕಾರ್ಕರೇಲಿಯನ್" + + "ಕುರುಖ್ಶಂಬಲಬಫಿಯಕಲೊಗ್ನಿಯನ್ಕುಮೈಕ್ಕುಟೇನಾಯ್ಲ್ಯಾಡಿನೋಲಾಂಗಿಲಹಂಡಾಲಂಬಾಲೆಜ್ಘಿಯನ್ಲ" + + "ಕೊಟಮೊಂಗೋಲೂಯಿಸಿಯಾನ ಕ್ರಿಯೋಲ್ಲೋಝಿಉತ್ತರ ಲೂರಿಲುಬ-ಲುಲಾಲೂಯಿಸೆನೋಲುಂಡಾಲುವೋಮಿಝೋಲ" + + "ುಯಿಯಮದುರೀಸ್ಮಗಾಹಿಮೈಥಿಲಿಮಕಾಸರ್ಮಂಡಿಂಗೊಮಸಾಯ್ಮೋಕ್ಷಮಂದಾರ್ಮೆಂಡೆಮೆರುಮೊರಿಸನ್ಮಧ್" + + "ಯ ಐರಿಷ್ಮ್ಯಖುವಾ- ಮೀಟ್ಟೊಮೆಟಾಮಿಕ್\u200cಮ್ಯಾಕ್ಮಿನಂಗ್\u200cಕಬಾವುಮಂಚುಮಣಿಪುರಿ" + + "ಮೊಹಾವ್ಕ್ಮೊಸ್ಸಿಮುಂಡಂಗ್ಬಹುಸಂಖ್ಯೆಯ ಭಾಷೆಗಳುಕ್ರೀಕ್ಮಿರಾಂಡೀಸ್ಮಾರ್ವಾಡಿಎರ್ಝ್ಯಾಮ" + + "ಜಂದೆರಾನಿನಾನ್ನಿಯಾಪೊಲಿಟನ್ನಮಲೋ ಜರ್ಮನ್ನೇವಾರೀನಿಯಾಸ್ನಿಯುವನ್ಖ್ವಾಸಿಯೊನಿಂಬೂನ್ನೊ" + + "ಗಾಯ್ಪ್ರಾಚೀನ ನೋರ್ಸ್ಎನ್\u200cಕೋಉತ್ತರ ಸೋಥೋನೂಯರ್ಶಾಸ್ತ್ರೀಯ ನೇವಾರಿನ್ಯಾಮ್" + + "\u200cವೆಂಜಿನ್ಯಾನ್\u200cಕೋಲೆನ್ಯೋರೋಜೀಮಾಓಸಾಜ್ಒಟ್ಟೋಮನ್ ತುರ್ಕಿಷ್ಪಂಗಾಸಿನನ್ಪಹ್ಲ" + + "ವಿಪಂಪಾಂಗಾಪಪಿಯಾಮೆಂಟೊಪಲುಆನ್ನೈಜೀರಿಯನ್ ಪಿಡ್ಗಿನ್ಪ್ರಾಚೀನ ಪರ್ಶಿಯನ್ಫೀನಿಷಿಯನ್ಪೋ" + + "ನ್\u200c\u200cಪಿಯನ್ಪ್ರಶಿಯನ್ಪ್ರಾಚೀನ ಪ್ರೊವೆನ್ಶಿಯಲ್ಕಿಷೆರಾಜಸ್ಥಾನಿರಾಪಾನುಯಿರ" + + "ಾರೋಟೊಂಗನ್ರೊಂಬೊರೋಮಾನಿಅರೋಮಾನಿಯನ್ರುವಸಂಡಾವೇಸಖಾಸಮರಿಟನ್ ಅರಾಮಿಕ್ಸಂಬುರುಸಸಾಕ್ಸಂ" + + "ತಾಲಿನಂಬೇಸಂಗುಸಿಸಿಲಿಯನ್ಸ್ಕೋಟ್ಸ್ದಕ್ಷಿಣ ಕುರ್ದಿಶ್ಸೆನಸೆಲ್ಕಪ್ಕೊಯ್ರಬೊರೊ ಸೆನ್ನಿ" + + "ಪ್ರಾಚೀನ ಐರಿಷ್ಟಷೆಲ್\u200dಹಿಟ್ಶಾನ್ಸಿಡಾಮೋದಕ್ಷಿಣ ಸಾಮಿಲೂಲ್ ಸಾಮಿಇನಾರಿ ಸಮೀಸ್ಕ" + + "ೋಟ್ ಸಾಮಿಸೋನಿಂಕೆಸೋಗ್ಡಿಯನ್ಸ್ರಾನನ್ ಟೋಂಗೋಸೇರೇರ್ಸಹೊಸುಕುಮಾಸುಸುಸುಮೇರಿಯನ್ಕೊಮೊರ" + + "ಿಯನ್ಶಾಸ್ತ್ರೀಯ ಸಿರಿಯಕ್ಸಿರಿಯಾಕ್ಟಿಮ್ನೆಟೆಸೊಟೆರೆನೋಟೇಟಮ್ಟೈಗ್ರೆಟಿವ್ಟೊಕೆಲಾವ್ಕ್" + + "ಲಿಂಗನ್ಟ್ಲಿಂಗಿಟ್ಟಮಾಷೆಕ್ನ್ಯಾಸಾ ಟೋಂಗಾಟೋಕ್ ಪಿಸಿನ್ಟರೊಕೊಸಿಂಶಿಯನ್ತುಂಬುಕಾಟುವಾಲ" + + "ುಟಸವಕ್ಟುವಿನಿಯನ್ಮಧ್ಯ ಅಟ್ಲಾಸ್ ಟಮಜೈಟ್ಉಡ್\u200cಮುರ್ಟ್ಉಗಾರಿಟಿಕ್ಉಂಬುಂಡುಅಪರಿಚ" + + "ಿತ ಭಾಷೆವಾಯಿವೋಟಿಕ್ವುಂಜೊವಾಲ್ಸರ್ವಲಾಯ್ತಾವರಾಯ್ವಾಷೋವಾರ್ಲ್\u200cಪಿರಿವುಕಲ್ಮೈಕ್" + + "ಸೊಗಯಾವೊಯಪೀಸೆಯಾಂಗ್ಬೆನ್ಯೆಂಬಾಕ್ಯಾಂಟನೀಸ್ಝೋಪೊಟೆಕ್ಬ್ಲಿಸ್ಸಿಂಬಲ್ಸ್ಝೆನಾಗಾಸ್ಟ್ಯಾ" + + "ಂಡರ್ಡ್ ಮೊರೊಕ್ಕನ್ ಟಮಜೈಟ್ಝೂನಿಯಾವುದೇ ಭಾಷಾಸಂಬಂಧಿ ವಿಷಯವಿಲ್ಲಜಾಝಾಆಧುನಿಕ ಪ್ರಮಾ" + + "ಣಿತ ಅರೇಬಿಕ್ಆಸ್ಟ್ರಿಯನ್ ಜರ್ಮನ್ಸ್ವಿಸ್ ಹೈ ಜರ್ಮನ್ಆಸ್ಟ್ರೇಲಿಯನ್ ಇಂಗ್ಲಿಷ್ಕೆನೆಡ" + + "ಿಯನ್ ಇಂಗ್ಲಿಷ್ಬ್ರಿಟಿಷ್ ಇಂಗ್ಲಿಷ್ಅಮೆರಿಕನ್ ಇಂಗ್ಲಿಷ್ಲ್ಯಾಟಿನ್ ಅಮೇರಿಕನ್ ಸ್ಪ್ಯ" + + "ಾನಿಷ್ಯುರೋಪಿಯನ್ ಸ್ಪ್ಯಾನಿಷ್ಮೆಕ್ಸಿಕನ್ ಸ್ಪ್ಯಾನಿಷ್ಕೆನೆಡಿಯನ್ ಫ್ರೆಂಚ್ಸ್ವಿಸ್ ಫ" + + "್ರೆಂಚ್ಲೋ ಸ್ಯಾಕ್ಸನ್ಫ್ಲೆಮಿಷ್ಬ್ರೆಜಿಲಿಯನ್ ಪೋರ್ಚುಗೀಸ್ಯೂರೋಪಿಯನ್ ಪೋರ್ಚುಗೀಸ್ಮಾ" + + "ಲ್ಡೇವಿಯನ್ಸರ್ಬೋ-ಕ್ರೊಯೇಶಿಯನ್ಕಾಂಗೊ ಸ್ವಹಿಲಿಸರಳೀಕೃತ ಚೈನೀಸ್ಸಾಂಪ್ರದಾಯಿಕ ಚೈನೀಸ" + + "್" + +var knLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x000f, 0x002d, 0x0045, 0x0066, 0x0075, 0x008a, 0x00a2, 0x00b7, 0x00d2, 0x00e4, 0x00f9, 0x011a, 0x012f, 0x014d, 0x016b, 0x0183, 0x0195, 0x01aa, 0x01c5, 0x01da, 0x01f5, 0x020a, 0x0219, 0x0228, 0x0243, 0x024f, 0x025b, 0x0283, 0x0295, 0x02a7, 0x02bf, 0x02d1, 0x02e3, 0x02fb, 0x0304, 0x0316, 0x032e, 0x034c, 0x036a, - 0x0388, 0x039a, 0x03b2, 0x03c4, 0x03dc, 0x03f1, 0x0400, 0x0415, - 0x0443, 0x0452, 0x0483, 0x04a4, 0x04b6, 0x04cb, 0x04e6, 0x04f2, - 0x050a, 0x0519, 0x0532, 0x0553, 0x0581, 0x059c, 0x05ba, 0x05cc, + 0x0388, 0x039a, 0x03b2, 0x03be, 0x03d6, 0x03eb, 0x03fa, 0x040f, + 0x043d, 0x044c, 0x0477, 0x0498, 0x04aa, 0x04bf, 0x04da, 0x04e6, + 0x04f8, 0x0507, 0x0520, 0x0541, 0x056f, 0x058a, 0x05a8, 0x05ba, // Entry 40 - 7F - 0x05f3, 0x0614, 0x0632, 0x0641, 0x065d, 0x0678, 0x0681, 0x069f, - 0x06b7, 0x06d8, 0x06ed, 0x0705, 0x0720, 0x072f, 0x0741, 0x0762, - 0x076e, 0x078f, 0x079e, 0x07ad, 0x07c2, 0x07d1, 0x07e9, 0x0801, - 0x080d, 0x0825, 0x083d, 0x0855, 0x0879, 0x0888, 0x08a6, 0x08b8, - 0x08c4, 0x08e5, 0x0904, 0x091c, 0x092e, 0x094f, 0x0961, 0x0982, - 0x0994, 0x09af, 0x09be, 0x09ca, 0x09e2, 0x09f7, 0x0a03, 0x0a25, - 0x0a37, 0x0a46, 0x0a4f, 0x0a8f, 0x0ac6, 0x0aeb, 0x0afa, 0x0b0f, - 0x0b21, 0x0b36, 0x0b45, 0x0b54, 0x0b6f, 0x0b81, 0x0b8d, 0x0b9f, + 0x05e1, 0x0602, 0x0620, 0x062f, 0x064b, 0x0666, 0x066f, 0x0696, + 0x06ae, 0x06cf, 0x06e4, 0x06fc, 0x0717, 0x0726, 0x0738, 0x0759, + 0x0765, 0x0786, 0x0795, 0x07a4, 0x07b9, 0x07c8, 0x07e0, 0x07f8, + 0x0804, 0x081c, 0x0834, 0x084c, 0x0870, 0x087f, 0x089d, 0x08af, + 0x08bb, 0x08dc, 0x08fb, 0x0916, 0x0928, 0x0949, 0x095b, 0x097c, + 0x098e, 0x09a9, 0x09b8, 0x09c4, 0x09dc, 0x09f1, 0x09fd, 0x0a1f, + 0x0a31, 0x0a40, 0x0a49, 0x0a89, 0x0ac0, 0x0ae5, 0x0af4, 0x0b09, + 0x0b1b, 0x0b30, 0x0b3f, 0x0b4b, 0x0b66, 0x0b78, 0x0b84, 0x0b96, // Entry 80 - BF - 0x0bb1, 0x0bcf, 0x0be7, 0x0bff, 0x0c0e, 0x0c29, 0x0c3b, 0x0c62, - 0x0c77, 0x0c95, 0x0ca4, 0x0cc0, 0x0ccf, 0x0cde, 0x0cf6, 0x0d17, - 0x0d29, 0x0d35, 0x0d47, 0x0d65, 0x0d7d, 0x0d8f, 0x0dae, 0x0dc9, - 0x0de1, 0x0df6, 0x0e05, 0x0e17, 0x0e29, 0x0e35, 0x0e53, 0x0e71, - 0x0e83, 0x0e95, 0x0eaa, 0x0eb9, 0x0ec8, 0x0ee0, 0x0ef2, 0x0f10, - 0x0f1f, 0x0f34, 0x0f43, 0x0f67, 0x0f7f, 0x0f91, 0x0fa3, 0x0fb2, - 0x0fca, 0x0fdc, 0x0ff1, 0x1003, 0x100f, 0x1024, 0x1033, 0x1048, - 0x1057, 0x1057, 0x1072, 0x1081, 0x108a, 0x10a8, 0x10a8, 0x10bd, + 0x0ba8, 0x0bc6, 0x0bde, 0x0bf6, 0x0c05, 0x0c20, 0x0c32, 0x0c5c, + 0x0c71, 0x0c8f, 0x0c9e, 0x0cba, 0x0cc9, 0x0cd8, 0x0cf0, 0x0d11, + 0x0d23, 0x0d2f, 0x0d41, 0x0d5f, 0x0d7a, 0x0d8c, 0x0dab, 0x0dc6, + 0x0dde, 0x0df3, 0x0e02, 0x0e14, 0x0e26, 0x0e32, 0x0e50, 0x0e6e, + 0x0e80, 0x0e92, 0x0ea7, 0x0eb6, 0x0ec5, 0x0edd, 0x0eef, 0x0f0d, + 0x0f1c, 0x0f31, 0x0f40, 0x0f64, 0x0f7c, 0x0f8e, 0x0fa0, 0x0faf, + 0x0fc7, 0x0fd9, 0x0fee, 0x1000, 0x100c, 0x1021, 0x1030, 0x1045, + 0x1054, 0x1054, 0x106f, 0x107e, 0x1087, 0x10a5, 0x10a5, 0x10ba, // Entry C0 - FF - 0x10bd, 0x10e5, 0x1113, 0x1125, 0x113a, 0x1149, 0x1149, 0x115b, - 0x115b, 0x115b, 0x1170, 0x1170, 0x1170, 0x1179, 0x1179, 0x1197, - 0x1197, 0x11a3, 0x11b2, 0x11c7, 0x11c7, 0x11d0, 0x11d0, 0x11d0, - 0x11d0, 0x11dc, 0x11eb, 0x11eb, 0x11f4, 0x11f4, 0x11f4, 0x1216, - 0x122b, 0x123d, 0x1249, 0x1249, 0x1249, 0x1261, 0x1261, 0x1261, - 0x1270, 0x1270, 0x127c, 0x127c, 0x1291, 0x12a9, 0x12a9, 0x12bb, - 0x12bb, 0x12d3, 0x12e5, 0x12e5, 0x12f7, 0x130c, 0x1318, 0x132a, - 0x133c, 0x134e, 0x135a, 0x1385, 0x139d, 0x13bb, 0x13cd, 0x13e5, + 0x10ba, 0x10e2, 0x1110, 0x1122, 0x1137, 0x1146, 0x1146, 0x1158, + 0x1158, 0x1158, 0x116d, 0x116d, 0x116d, 0x1176, 0x1176, 0x1194, + 0x1194, 0x11a0, 0x11af, 0x11c4, 0x11c4, 0x11cd, 0x11cd, 0x11cd, + 0x11cd, 0x11d9, 0x11e8, 0x11e8, 0x11f1, 0x11f1, 0x11f1, 0x1213, + 0x1228, 0x123a, 0x1246, 0x1246, 0x1246, 0x125e, 0x125e, 0x125e, + 0x126d, 0x126d, 0x1279, 0x1279, 0x128e, 0x12a6, 0x12a6, 0x12b8, + 0x12b8, 0x12d0, 0x12e2, 0x12e2, 0x12f4, 0x12f4, 0x130c, 0x1318, + 0x132a, 0x133c, 0x134e, 0x135a, 0x1385, 0x139d, 0x13bb, 0x13cd, // Entry 100 - 13F - 0x1410, 0x1428, 0x1428, 0x1459, 0x149d, 0x14b5, 0x14c4, 0x14d9, - 0x14e2, 0x14fa, 0x150c, 0x1524, 0x1533, 0x1542, 0x1554, 0x157f, - 0x157f, 0x1591, 0x15a7, 0x15c3, 0x15d5, 0x15e1, 0x15ed, 0x15fc, - 0x15fc, 0x1630, 0x1645, 0x165a, 0x167f, 0x167f, 0x1691, 0x1691, - 0x16a0, 0x16b8, 0x16b8, 0x16c4, 0x16c4, 0x16e6, 0x1711, 0x1711, - 0x173c, 0x1767, 0x1788, 0x178b, 0x179a, 0x17b9, 0x17c5, 0x17d7, - 0x17d7, 0x17e3, 0x1804, 0x1804, 0x182a, 0x1859, 0x1859, 0x1868, - 0x1883, 0x1895, 0x18a7, 0x18cf, 0x18f4, 0x18f4, 0x18f4, 0x1900, + 0x13e5, 0x140a, 0x1422, 0x1422, 0x1453, 0x1497, 0x14af, 0x14be, + 0x14d3, 0x14dc, 0x14f4, 0x1506, 0x151e, 0x152d, 0x153c, 0x154e, + 0x1579, 0x1579, 0x158b, 0x15a1, 0x15bd, 0x15cf, 0x15db, 0x15e7, + 0x15f6, 0x15f6, 0x162a, 0x163f, 0x1654, 0x1679, 0x1679, 0x168b, + 0x168b, 0x169a, 0x16b2, 0x16b2, 0x16be, 0x16e6, 0x1708, 0x1733, + 0x1733, 0x175e, 0x1789, 0x17aa, 0x17ad, 0x17bc, 0x17db, 0x17e7, + 0x17f9, 0x17f9, 0x1805, 0x1826, 0x1826, 0x184c, 0x187b, 0x187b, + 0x188a, 0x18a5, 0x18b7, 0x18c9, 0x18f1, 0x1916, 0x1916, 0x1916, // Entry 140 - 17F - 0x191e, 0x192a, 0x1933, 0x194b, 0x194b, 0x1966, 0x197e, 0x198d, - 0x19b8, 0x19dd, 0x19e9, 0x19f8, 0x1a0d, 0x1a22, 0x1a34, 0x1a34, - 0x1a34, 0x1a4c, 0x1a5b, 0x1a6d, 0x1a98, 0x1ac0, 0x1ac0, 0x1ae2, - 0x1af1, 0x1b00, 0x1b0c, 0x1b18, 0x1b24, 0x1b3f, 0x1b3f, 0x1b51, - 0x1b6c, 0x1b90, 0x1b90, 0x1b9c, 0x1b9c, 0x1ba8, 0x1bc0, 0x1bdc, - 0x1bdc, 0x1bdc, 0x1be8, 0x1c00, 0x1c18, 0x1c3d, 0x1c4f, 0x1c67, - 0x1c7c, 0x1ca1, 0x1ca1, 0x1ca1, 0x1cb9, 0x1ccb, 0x1cd7, 0x1ce3, - 0x1d01, 0x1d13, 0x1d2b, 0x1d43, 0x1d52, 0x1d61, 0x1d6d, 0x1d88, + 0x1922, 0x1940, 0x194c, 0x1955, 0x196d, 0x196d, 0x1988, 0x19a0, + 0x19af, 0x19da, 0x19ff, 0x1a0b, 0x1a1a, 0x1a2f, 0x1a44, 0x1a56, + 0x1a56, 0x1a56, 0x1a6e, 0x1a7d, 0x1a8f, 0x1aba, 0x1ae2, 0x1ae2, + 0x1b04, 0x1b13, 0x1b22, 0x1b2e, 0x1b3a, 0x1b46, 0x1b61, 0x1b61, + 0x1b73, 0x1b8e, 0x1bb2, 0x1bb2, 0x1bbe, 0x1bbe, 0x1bca, 0x1be2, + 0x1bfe, 0x1bfe, 0x1bfe, 0x1c0a, 0x1c22, 0x1c3a, 0x1c5f, 0x1c71, + 0x1c89, 0x1c9e, 0x1cc3, 0x1cc3, 0x1cc3, 0x1cdb, 0x1ced, 0x1cf9, + 0x1d05, 0x1d23, 0x1d35, 0x1d4d, 0x1d65, 0x1d74, 0x1d83, 0x1d8f, // Entry 180 - 1BF - 0x1d88, 0x1d88, 0x1d88, 0x1d94, 0x1d94, 0x1da3, 0x1daf, 0x1dcb, - 0x1dcb, 0x1de1, 0x1df9, 0x1e08, 0x1e14, 0x1e20, 0x1e2f, 0x1e2f, - 0x1e2f, 0x1e44, 0x1e44, 0x1e53, 0x1e65, 0x1e77, 0x1e8c, 0x1e9b, - 0x1e9b, 0x1eaa, 0x1ebc, 0x1ecb, 0x1ed7, 0x1eec, 0x1f08, 0x1f31, - 0x1f3d, 0x1f5e, 0x1f82, 0x1f8e, 0x1fa3, 0x1fbb, 0x1fcd, 0x1fcd, - 0x1fe2, 0x2016, 0x2028, 0x2043, 0x205b, 0x205b, 0x205b, 0x2070, - 0x208b, 0x2097, 0x20b8, 0x20be, 0x20d7, 0x20e9, 0x20fb, 0x2110, - 0x2110, 0x2128, 0x213d, 0x214f, 0x2177, 0x2177, 0x2189, 0x21a5, + 0x1daa, 0x1daa, 0x1daa, 0x1daa, 0x1db6, 0x1db6, 0x1dc5, 0x1df9, + 0x1e05, 0x1e21, 0x1e21, 0x1e37, 0x1e4f, 0x1e5e, 0x1e6a, 0x1e76, + 0x1e85, 0x1e85, 0x1e85, 0x1e9a, 0x1e9a, 0x1ea9, 0x1ebb, 0x1ecd, + 0x1ee2, 0x1ef1, 0x1ef1, 0x1f00, 0x1f12, 0x1f21, 0x1f2d, 0x1f42, + 0x1f5e, 0x1f87, 0x1f93, 0x1fb4, 0x1fd8, 0x1fe4, 0x1ff9, 0x2011, + 0x2023, 0x2023, 0x2038, 0x206c, 0x207e, 0x2099, 0x20b1, 0x20b1, + 0x20b1, 0x20c6, 0x20e1, 0x20ed, 0x210e, 0x2114, 0x212d, 0x213f, + 0x2151, 0x2166, 0x2166, 0x217e, 0x2193, 0x21a5, 0x21cd, 0x21cd, // Entry 1C0 - 1FF - 0x21b4, 0x21e2, 0x2206, 0x2227, 0x2239, 0x2245, 0x2254, 0x2285, - 0x22a0, 0x22b2, 0x22c7, 0x22e5, 0x22f7, 0x22f7, 0x232b, 0x232b, - 0x232b, 0x2359, 0x2359, 0x2374, 0x2374, 0x2374, 0x2395, 0x23ad, - 0x23ea, 0x23f6, 0x23f6, 0x2411, 0x2429, 0x2447, 0x2447, 0x2447, - 0x2456, 0x2468, 0x2468, 0x2468, 0x2468, 0x2486, 0x248f, 0x24a1, - 0x24aa, 0x24d5, 0x24e7, 0x24f6, 0x2508, 0x2508, 0x2514, 0x2520, - 0x253b, 0x2553, 0x2553, 0x257e, 0x257e, 0x2587, 0x2587, 0x259c, - 0x25ca, 0x25ef, 0x25ef, 0x260d, 0x2619, 0x2619, 0x262b, 0x262b, + 0x21df, 0x21fb, 0x220a, 0x2238, 0x225c, 0x227d, 0x228f, 0x229b, + 0x22aa, 0x22db, 0x22f6, 0x2308, 0x231d, 0x233b, 0x234d, 0x234d, + 0x2381, 0x2381, 0x2381, 0x23af, 0x23af, 0x23ca, 0x23ca, 0x23ca, + 0x23eb, 0x2403, 0x2440, 0x244c, 0x244c, 0x2467, 0x247f, 0x249d, + 0x249d, 0x249d, 0x24ac, 0x24be, 0x24be, 0x24be, 0x24be, 0x24dc, + 0x24e5, 0x24f7, 0x2500, 0x252b, 0x253d, 0x254c, 0x255e, 0x255e, + 0x256a, 0x2576, 0x2591, 0x25a9, 0x25a9, 0x25d4, 0x25d4, 0x25dd, + 0x25dd, 0x25f2, 0x2620, 0x2645, 0x2645, 0x2663, 0x266f, 0x266f, // Entry 200 - 23F - 0x262b, 0x264a, 0x2663, 0x267c, 0x269b, 0x26b0, 0x26cb, 0x26f0, - 0x2702, 0x270b, 0x270b, 0x271d, 0x2729, 0x2744, 0x275f, 0x2790, - 0x27a5, 0x27a5, 0x27a5, 0x27b7, 0x27c3, 0x27d5, 0x27e4, 0x27f6, - 0x2802, 0x281a, 0x281a, 0x2832, 0x284d, 0x284d, 0x2862, 0x2884, - 0x28a3, 0x28a3, 0x28b2, 0x28b2, 0x28ca, 0x28ca, 0x28df, 0x28f1, - 0x2900, 0x291b, 0x2950, 0x296e, 0x2989, 0x299e, 0x29aa, 0x29b6, - 0x29b6, 0x29b6, 0x29b6, 0x29b6, 0x29c8, 0x29c8, 0x29d7, 0x29ec, - 0x2a01, 0x2a10, 0x2a1c, 0x2a3d, 0x2a43, 0x2a58, 0x2a58, 0x2a61, + 0x2681, 0x2681, 0x2681, 0x26a0, 0x26b9, 0x26d2, 0x26f1, 0x2706, + 0x2721, 0x2746, 0x2758, 0x2761, 0x2761, 0x2773, 0x277f, 0x279a, + 0x27b5, 0x27e6, 0x27fe, 0x27fe, 0x27fe, 0x2810, 0x281c, 0x282e, + 0x283d, 0x284f, 0x285b, 0x2873, 0x2873, 0x288b, 0x28a6, 0x28a6, + 0x28bb, 0x28dd, 0x28fc, 0x28fc, 0x290b, 0x290b, 0x2923, 0x2923, + 0x2938, 0x294a, 0x2959, 0x2974, 0x29a9, 0x29c7, 0x29e2, 0x29f7, + 0x2a19, 0x2a25, 0x2a25, 0x2a25, 0x2a25, 0x2a25, 0x2a37, 0x2a37, + 0x2a46, 0x2a5b, 0x2a70, 0x2a7f, 0x2a8b, 0x2aac, 0x2ab2, 0x2ac7, // Entry 240 - 27F - 0x2a6d, 0x2a7c, 0x2a97, 0x2aa6, 0x2aa6, 0x2ac4, 0x2adc, 0x2b06, - 0x2b06, 0x2b18, 0x2b6b, 0x2b77, 0x2bc4, 0x2bd0, 0x2c11, 0x2c11, - 0x2c42, 0x2c6e, 0x2cab, 0x2cdf, 0x2d10, 0x2d41, 0x2d91, 0x2dcb, - 0x2e05, 0x2e05, 0x2e36, 0x2e5e, 0x2e80, 0x2e98, 0x2ed8, 0x2f12, - 0x2f33, 0x2f64, 0x2f89, 0x2fb1, 0x2fe5, -} // Size: 1250 bytes - -const koLangStr string = "" + // Size: 7030 bytes + 0x2ac7, 0x2ad0, 0x2adc, 0x2aeb, 0x2b06, 0x2b15, 0x2b15, 0x2b33, + 0x2b4b, 0x2b75, 0x2b75, 0x2b87, 0x2bda, 0x2be6, 0x2c33, 0x2c3f, + 0x2c80, 0x2c80, 0x2cb1, 0x2cdd, 0x2d1a, 0x2d4e, 0x2d7f, 0x2db0, + 0x2e00, 0x2e3a, 0x2e74, 0x2e74, 0x2ea5, 0x2ecd, 0x2eef, 0x2f07, + 0x2f47, 0x2f81, 0x2fa2, 0x2fd3, 0x2ff8, 0x3020, 0x3054, +} // Size: 1254 bytes + +const koLangStr string = "" + // Size: 7095 bytes "아파르어압카즈어아베스타어아프리칸스어아칸어암하라어아라곤어아랍어아삼어아바릭어아이마라어아제르바이잔어바슈키르어벨라루스어불가리아어비슬라마어" + "밤바라어벵골어티베트어브르타뉴어보스니아어카탈로니아어체첸어차모로어코르시카어크리어체코어교회 슬라브어추바시어웨일스어덴마크어독일어디베히" + "어종카어에웨어그리스어영어에스페란토어스페인어에스토니아어바스크어페르시아어풀라어핀란드어피지어페로어프랑스어서부 프리지아어아일랜드어스코" + @@ -20538,31 +21910,31 @@ const koLangStr string = "" + // Size: 7030 bytes "바키아어슬로베니아어사모아어쇼나어소말리아어알바니아어세르비아어시스와티어남부 소토어순다어스웨덴어스와힐리어타밀어텔루구어타지크어태국어티" + "그리냐어투르크멘어츠와나어통가어터키어총가어타타르어타히티어위구르어우크라이나어우르두어우즈베크어벤다어베트남어볼라퓌크어왈론어월로프어코사" + "어이디시어요루바어주앙어중국어줄루어아체어아콜리어아당메어아디게어튀니지 아랍어아프리힐리어아그햄어아이누어아카드어알류트어남부 알타이어고" + - "대 영어앙가어아람어아라우칸어아라파호어알제리 아랍어아라와크어모로코 아랍어이집트 아랍어아수어아스투리아어아와히어발루치어발리어바사어바" + + "대 영어앙가어아람어마푸둔군어아라파호어알제리 아랍어아라와크어모로코 아랍어이집트 아랍어아수어아스투리아어아와히어발루치어발리어바사어바" + "문어고말라어베자어벰바어베나어바푸트어서부 발로치어호즈푸리어비콜어비니어콤어식시카어브라지어브라후이어보도어아쿠즈어부리아타부기어불루어브" + "린어메둠바어카도어카리브어카유가어앗삼어세부아노어치가어치브차어차가타이어추크어마리어치누크 자곤촉토어치페우얀체로키어샤이엔어소라니 쿠르" + "드어콥트어크리민 터키어; 크리민 타타르어세이셸 크리올 프랑스어카슈비아어다코타어다르그와어타이타어델라웨어어슬라브어도그리브어딩카어자" + "르마어도그리어저지 소르비아어두알라어중세 네덜란드어졸라 포니어드율라어다장가어엠부어이픽어고대 이집트어이카죽어엘람어중세 영어이원도어" + - "팡그어필리핀어폰어중세 프랑스어고대 프랑스어북부 프리지아어동부 프리슬란드어프리울리어가어가가우스어간어가요어그바야어조로아스터 다리어" + - "게이즈어키리바시어길라키어중세 고지 독일어고대 고지 독일어고아 콘칸어곤디어고론탈로어고트어게르보어고대 그리스어독일어(스위스)구시어" + - "그위친어하이다어하카어하와이어피지 힌디어헤리가뇬어하타이트어히몸어고지 소르비아어샹어후파어이반어이비비오어이로코어인귀시어로반어응곰바어" + - "마차메어유대-페르시아어유대-아라비아어카라칼파크어커바일어카친어까꼬토끄어캄바어카위어카바르디어카넴부어티얍어마콘데어크리올어코로어카시어" + - "호탄어코이라 친니어코와르어카코어칼렌진어킴분두어코미페르먀크어코카니어코스라이엔어크펠레어카라챠이-발카르어카렐리야어쿠르크어샴발라어바피" + - "아어콜로그니안어쿠믹어쿠테네어라디노어랑기어라한다어람바어레즈기안어링구아 프랑카 노바라코타어몽고어로지어북부 루리어루바-룰루아어루이세" + - "노어룬다어루오어루샤이어루야어마두라어마파어마가히어마이틸리어마카사어만딩고어마사이어마바어모크샤어만다르어멘데어메루어모리스얀어중세 아일" + - "랜드어마크후와-메토어메타어미크맥어미낭카바우어만주어마니푸리어모호크어모시어서부 마리어문당어다중 언어크리크어미란데어마르와리어미예네어" + - "엘즈야어마잔데라니어민난어나폴리어나마어저지 독일어네와르어니아스어니웨언어크와시오어느기엠본어노가이어고대 노르웨이어응코어북부 소토어누" + - "에르어고전 네와르어니암웨지어니안콜어뉴로어느지마어오세이지어오스만 터키어판가시난어팔레비어팜팡가어파피아먼토어팔라우어나이지리아 피진어" + - "고대 페르시아어페니키아어폰틱어폼페이어프러시아어고대 프로방스어키체어라자스탄어라파뉴이라로통가어롬보어집시어루신어아로마니아어르와어산다" + - "웨어야쿠트어사마리아 아랍어삼부루어사사크어산탈리어느감바이어상구어시칠리아어스코틀랜드어남부 쿠르드어세네카어세나어셀쿠프어코이야보로 세" + - "니어고대 아일랜드어타셸히트어샨어차디언 아라비아어시다모어남부 사미어룰레 사미어이나리 사미어스콜트 사미어소닌케어소그디엔어스라난 통" + - "가어세레르어사호어수쿠마어수수어수메르어코모로어고전 시리아어시리아어팀니어테조어테레노어테툼어티그레어티브어토켈라우제도어차후르어클링온어" + - "틀링깃족어탈리쉬어타마섹어니아사 통가어토크 피신어타로코어트심시안어툼부카어투발루어타사와크어투비니안어중앙 모로코 타마지트어우드말트어" + - "유가리틱어움분두어어근바이어보틱어분조어월저어월라이타어와라이어와쇼어왈피리어우어칼미크어소가어야오족어얍페세어양본어옘바어광둥어사포테크어" + - "블리스 심볼제나가어표준 모로코 타마지트어주니어언어 관련 내용 없음자자어현대 표준 아랍어고지 독일어(스위스)영어(호주)저지 색슨" + - "어플라망어몰도바어세르비아-크로아티아어콩고 스와힐리어" - -var koLangIdx = []uint16{ // 611 elements + "팡그어필리핀어폰어케이준 프랑스어중세 프랑스어고대 프랑스어북부 프리지아어동부 프리슬란드어프리울리어가어가가우스어간어가요어그바야어조" + + "로아스터 다리어게이즈어키리바시어길라키어중세 고지 독일어고대 고지 독일어고아 콘칸어곤디어고론탈로어고트어게르보어고대 그리스어독일어" + + "(스위스)구시어그위친어하이다어하카어하와이어피지 힌디어헤리가뇬어하타이트어히몸어고지 소르비아어샹어후파어이반어이비비오어이로코어인귀시어로" + + "반어응곰바어마차메어유대-페르시아어유대-아라비아어카라칼파크어커바일어카친어까꼬토끄어캄바어카위어카바르디어카넴부어티얍어마콘데어크리올어" + + "코로어카시어호탄어코이라 친니어코와르어카코어칼렌진어킴분두어코미페르먀크어코카니어코스라이엔어크펠레어카라챠이-발카르어카렐리야어쿠르크어" + + "샴발라어바피아어콜로그니안어쿠믹어쿠테네어라디노어랑기어라한다어람바어레즈기안어링구아 프랑카 노바라코타어몽고어루이지애나 크리올어로지어" + + "북부 루리어루바-룰루아어루이세노어룬다어루오어루샤이어루야어마두라어마파어마가히어마이틸리어마카사어만딩고어마사이어마바어모크샤어만다르어" + + "멘데어메루어모리스얀어중세 아일랜드어마크후와-메토어메타어미크맥어미낭카바우어만주어마니푸리어모호크어모시어서부 마리어문당어다중 언어크" + + "리크어미란데어마르와리어미예네어엘즈야어마잔데라니어민난어나폴리어나마어저지 독일어네와르어니아스어니웨언어크와시오어느기엠본어노가이어고대" + + " 노르웨이어응코어북부 소토어누에르어고전 네와르어니암웨지어니안콜어뉴로어느지마어오세이지어오스만 터키어판가시난어팔레비어팜팡가어파피아먼토" + + "어팔라우어나이지리아 피진어고대 페르시아어페니키아어폰틱어폼페이어프러시아어고대 프로방스어키체어라자스탄어라파뉴이라로통가어롬보어집시어" + + "루신어아로마니아어르와어산다웨어야쿠트어사마리아 아랍어삼부루어사사크어산탈리어느감바이어상구어시칠리아어스코틀랜드어남부 쿠르드어세네카어" + + "세나어셀쿠프어코이야보로 세니어고대 아일랜드어타셸히트어샨어차디언 아라비아어시다모어남부 사미어룰레 사미어이나리 사미어스콜트 사미어" + + "소닌케어소그디엔어스라난 통가어세레르어사호어수쿠마어수수어수메르어코모로어고전 시리아어시리아어팀니어테조어테레노어테툼어티그레어티브어토" + + "켈라우제도어차후르어클링온어틀링깃족어탈리쉬어타마섹어니아사 통가어토크 피신어타로코어트심시안어툼부카어투발루어타사와크어투비니안어중앙 " + + "모로코 타마지트어우드말트어유가리틱어움분두어알 수 없는 언어바이어보틱어분조어월저어월라이타어와라이어와쇼어왈피리어우어칼미크어소가어야" + + "오족어얍페세어양본어옘바어광둥어사포테크어블리스 심볼제나가어표준 모로코 타마지트어주니어언어 관련 내용 없음자자어현대 표준 아랍어고" + + "지 독일어(스위스)영어(호주)저지 색슨어플라망어몰도바어세르비아-크로아티아어콩고 스와힐리어" + +var koLangIdx = []uint16{ // 613 elements // Entry 0 - 3F 0x0000, 0x000c, 0x0018, 0x0027, 0x0039, 0x0042, 0x004e, 0x005a, 0x0063, 0x006c, 0x0078, 0x0087, 0x009c, 0x00ab, 0x00ba, 0x00c9, @@ -20597,112 +21969,113 @@ var koLangIdx = []uint16{ // 611 elements 0x0a9a, 0x0aa3, 0x0aac, 0x0aac, 0x0ab5, 0x0ac1, 0x0ac1, 0x0ad4, 0x0ae3, 0x0aec, 0x0af5, 0x0af5, 0x0afb, 0x0b07, 0x0b07, 0x0b07, 0x0b13, 0x0b22, 0x0b2b, 0x0b37, 0x0b43, 0x0b4c, 0x0b55, 0x0b5e, - 0x0b6a, 0x0b73, 0x0b7f, 0x0b8b, 0x0b94, 0x0ba3, 0x0bac, 0x0bb8, - 0x0bc7, 0x0bd0, 0x0bd9, 0x0be9, 0x0bf2, 0x0bfe, 0x0c0a, 0x0c16, + 0x0b6a, 0x0b73, 0x0b7f, 0x0b8b, 0x0b94, 0x0b94, 0x0ba3, 0x0bac, + 0x0bb8, 0x0bc7, 0x0bd0, 0x0bd9, 0x0be9, 0x0bf2, 0x0bfe, 0x0c0a, // Entry 100 - 13F - 0x0c2c, 0x0c35, 0x0c35, 0x0c60, 0x0c80, 0x0c8f, 0x0c9b, 0x0caa, - 0x0cb6, 0x0cc5, 0x0cd1, 0x0ce0, 0x0ce9, 0x0cf5, 0x0d01, 0x0d17, - 0x0d17, 0x0d23, 0x0d39, 0x0d49, 0x0d55, 0x0d61, 0x0d6a, 0x0d73, - 0x0d73, 0x0d86, 0x0d92, 0x0d9b, 0x0da8, 0x0da8, 0x0db4, 0x0db4, - 0x0dbd, 0x0dc9, 0x0dc9, 0x0dcf, 0x0dcf, 0x0de2, 0x0df5, 0x0df5, - 0x0e0b, 0x0e24, 0x0e33, 0x0e39, 0x0e48, 0x0e4e, 0x0e57, 0x0e63, - 0x0e7c, 0x0e88, 0x0e97, 0x0ea3, 0x0eba, 0x0ed1, 0x0ee1, 0x0eea, - 0x0ef9, 0x0f02, 0x0f0e, 0x0f21, 0x0f35, 0x0f35, 0x0f35, 0x0f3e, + 0x0c16, 0x0c2c, 0x0c35, 0x0c35, 0x0c60, 0x0c80, 0x0c8f, 0x0c9b, + 0x0caa, 0x0cb6, 0x0cc5, 0x0cd1, 0x0ce0, 0x0ce9, 0x0cf5, 0x0d01, + 0x0d17, 0x0d17, 0x0d23, 0x0d39, 0x0d49, 0x0d55, 0x0d61, 0x0d6a, + 0x0d73, 0x0d73, 0x0d86, 0x0d92, 0x0d9b, 0x0da8, 0x0da8, 0x0db4, + 0x0db4, 0x0dbd, 0x0dc9, 0x0dc9, 0x0dcf, 0x0de5, 0x0df8, 0x0e0b, + 0x0e0b, 0x0e21, 0x0e3a, 0x0e49, 0x0e4f, 0x0e5e, 0x0e64, 0x0e6d, + 0x0e79, 0x0e92, 0x0e9e, 0x0ead, 0x0eb9, 0x0ed0, 0x0ee7, 0x0ef7, + 0x0f00, 0x0f0f, 0x0f18, 0x0f24, 0x0f37, 0x0f4b, 0x0f4b, 0x0f4b, // Entry 140 - 17F - 0x0f4a, 0x0f56, 0x0f5f, 0x0f6b, 0x0f7b, 0x0f8a, 0x0f99, 0x0fa2, - 0x0fb8, 0x0fbe, 0x0fc7, 0x0fd0, 0x0fdf, 0x0feb, 0x0ff7, 0x0ff7, - 0x0ff7, 0x1000, 0x100c, 0x1018, 0x102e, 0x1044, 0x1044, 0x1056, - 0x1062, 0x106b, 0x107a, 0x1083, 0x108c, 0x109b, 0x10a7, 0x10b0, - 0x10bc, 0x10c8, 0x10c8, 0x10d1, 0x10d1, 0x10da, 0x10e3, 0x10f6, - 0x1102, 0x1102, 0x110b, 0x1117, 0x1123, 0x1138, 0x1144, 0x1156, - 0x1162, 0x117b, 0x117b, 0x117b, 0x118a, 0x1196, 0x11a2, 0x11ae, - 0x11c0, 0x11c9, 0x11d5, 0x11e1, 0x11ea, 0x11f6, 0x11ff, 0x120e, + 0x0f54, 0x0f60, 0x0f6c, 0x0f75, 0x0f81, 0x0f91, 0x0fa0, 0x0faf, + 0x0fb8, 0x0fce, 0x0fd4, 0x0fdd, 0x0fe6, 0x0ff5, 0x1001, 0x100d, + 0x100d, 0x100d, 0x1016, 0x1022, 0x102e, 0x1044, 0x105a, 0x105a, + 0x106c, 0x1078, 0x1081, 0x1090, 0x1099, 0x10a2, 0x10b1, 0x10bd, + 0x10c6, 0x10d2, 0x10de, 0x10de, 0x10e7, 0x10e7, 0x10f0, 0x10f9, + 0x110c, 0x1118, 0x1118, 0x1121, 0x112d, 0x1139, 0x114e, 0x115a, + 0x116c, 0x1178, 0x1191, 0x1191, 0x1191, 0x11a0, 0x11ac, 0x11b8, + 0x11c4, 0x11d6, 0x11df, 0x11eb, 0x11f7, 0x1200, 0x120c, 0x1215, // Entry 180 - 1BF - 0x1228, 0x1228, 0x1228, 0x1234, 0x1234, 0x123d, 0x1246, 0x1256, - 0x1256, 0x1269, 0x1278, 0x1281, 0x128a, 0x1296, 0x129f, 0x129f, - 0x129f, 0x12ab, 0x12b4, 0x12c0, 0x12cf, 0x12db, 0x12e7, 0x12f3, - 0x12fc, 0x1308, 0x1314, 0x131d, 0x1326, 0x1335, 0x134b, 0x1361, - 0x136a, 0x1376, 0x1388, 0x1391, 0x13a0, 0x13ac, 0x13b5, 0x13c5, - 0x13ce, 0x13db, 0x13e7, 0x13f3, 0x1402, 0x1402, 0x140e, 0x141a, - 0x142c, 0x1435, 0x1441, 0x144a, 0x145a, 0x1466, 0x1472, 0x147e, - 0x147e, 0x148d, 0x149c, 0x14a8, 0x14be, 0x14be, 0x14c7, 0x14d7, + 0x1224, 0x123e, 0x123e, 0x123e, 0x124a, 0x124a, 0x1253, 0x126f, + 0x1278, 0x1288, 0x1288, 0x129b, 0x12aa, 0x12b3, 0x12bc, 0x12c8, + 0x12d1, 0x12d1, 0x12d1, 0x12dd, 0x12e6, 0x12f2, 0x1301, 0x130d, + 0x1319, 0x1325, 0x132e, 0x133a, 0x1346, 0x134f, 0x1358, 0x1367, + 0x137d, 0x1393, 0x139c, 0x13a8, 0x13ba, 0x13c3, 0x13d2, 0x13de, + 0x13e7, 0x13f7, 0x1400, 0x140d, 0x1419, 0x1425, 0x1434, 0x1434, + 0x1440, 0x144c, 0x145e, 0x1467, 0x1473, 0x147c, 0x148c, 0x1498, + 0x14a4, 0x14b0, 0x14b0, 0x14bf, 0x14ce, 0x14da, 0x14f0, 0x14f0, // Entry 1C0 - 1FF - 0x14e3, 0x14f6, 0x1505, 0x1511, 0x151a, 0x1526, 0x1535, 0x1548, - 0x1557, 0x1563, 0x156f, 0x1581, 0x158d, 0x158d, 0x15a6, 0x15a6, - 0x15a6, 0x15bc, 0x15bc, 0x15cb, 0x15cb, 0x15d4, 0x15e0, 0x15ef, - 0x1605, 0x160e, 0x160e, 0x161d, 0x1629, 0x1638, 0x1638, 0x1638, - 0x1641, 0x164a, 0x164a, 0x1653, 0x1653, 0x1665, 0x166e, 0x167a, - 0x1686, 0x169c, 0x16a8, 0x16b4, 0x16c0, 0x16c0, 0x16cf, 0x16d8, - 0x16e7, 0x16f9, 0x16f9, 0x170c, 0x1718, 0x1721, 0x1721, 0x172d, - 0x1746, 0x175c, 0x175c, 0x176b, 0x1771, 0x178a, 0x1796, 0x1796, + 0x14f9, 0x1509, 0x1515, 0x1528, 0x1537, 0x1543, 0x154c, 0x1558, + 0x1567, 0x157a, 0x1589, 0x1595, 0x15a1, 0x15b3, 0x15bf, 0x15bf, + 0x15d8, 0x15d8, 0x15d8, 0x15ee, 0x15ee, 0x15fd, 0x15fd, 0x1606, + 0x1612, 0x1621, 0x1637, 0x1640, 0x1640, 0x164f, 0x165b, 0x166a, + 0x166a, 0x166a, 0x1673, 0x167c, 0x167c, 0x1685, 0x1685, 0x1697, + 0x16a0, 0x16ac, 0x16b8, 0x16ce, 0x16da, 0x16e6, 0x16f2, 0x16f2, + 0x1701, 0x170a, 0x1719, 0x172b, 0x172b, 0x173e, 0x174a, 0x1753, + 0x1753, 0x175f, 0x1778, 0x178e, 0x178e, 0x179d, 0x17a3, 0x17bc, // Entry 200 - 23F - 0x1796, 0x17a6, 0x17b6, 0x17c9, 0x17dc, 0x17e8, 0x17f7, 0x180a, - 0x1816, 0x181f, 0x181f, 0x182b, 0x1834, 0x1840, 0x184c, 0x185f, - 0x186b, 0x186b, 0x186b, 0x1874, 0x187d, 0x1889, 0x1892, 0x189e, - 0x18a7, 0x18bc, 0x18c8, 0x18d4, 0x18e3, 0x18ef, 0x18fb, 0x190e, - 0x191e, 0x191e, 0x192a, 0x192a, 0x1939, 0x1939, 0x1945, 0x1951, - 0x1960, 0x196f, 0x198f, 0x199e, 0x19ad, 0x19b9, 0x19bf, 0x19c8, - 0x19c8, 0x19c8, 0x19c8, 0x19c8, 0x19d1, 0x19d1, 0x19da, 0x19e3, - 0x19f2, 0x19fe, 0x1a07, 0x1a13, 0x1a19, 0x1a25, 0x1a25, 0x1a2e, + 0x17c8, 0x17c8, 0x17c8, 0x17d8, 0x17e8, 0x17fb, 0x180e, 0x181a, + 0x1829, 0x183c, 0x1848, 0x1851, 0x1851, 0x185d, 0x1866, 0x1872, + 0x187e, 0x1891, 0x189d, 0x189d, 0x189d, 0x18a6, 0x18af, 0x18bb, + 0x18c4, 0x18d0, 0x18d9, 0x18ee, 0x18fa, 0x1906, 0x1915, 0x1921, + 0x192d, 0x1940, 0x1950, 0x1950, 0x195c, 0x195c, 0x196b, 0x196b, + 0x1977, 0x1983, 0x1992, 0x19a1, 0x19c1, 0x19d0, 0x19df, 0x19eb, + 0x1a00, 0x1a09, 0x1a09, 0x1a09, 0x1a09, 0x1a09, 0x1a12, 0x1a12, + 0x1a1b, 0x1a24, 0x1a33, 0x1a3f, 0x1a48, 0x1a54, 0x1a5a, 0x1a66, // Entry 240 - 27F - 0x1a3a, 0x1a46, 0x1a4f, 0x1a58, 0x1a58, 0x1a61, 0x1a70, 0x1a80, - 0x1a80, 0x1a8c, 0x1aac, 0x1ab5, 0x1ad0, 0x1ad9, 0x1af0, 0x1af0, - 0x1af0, 0x1b0b, 0x1b19, 0x1b19, 0x1b19, 0x1b19, 0x1b19, 0x1b19, - 0x1b19, 0x1b19, 0x1b19, 0x1b19, 0x1b29, 0x1b35, 0x1b35, 0x1b35, - 0x1b41, 0x1b60, 0x1b76, -} // Size: 1246 bytes - -const kyLangStr string = "" + // Size: 6711 bytes + 0x1a66, 0x1a6f, 0x1a7b, 0x1a87, 0x1a90, 0x1a99, 0x1a99, 0x1aa2, + 0x1ab1, 0x1ac1, 0x1ac1, 0x1acd, 0x1aed, 0x1af6, 0x1b11, 0x1b1a, + 0x1b31, 0x1b31, 0x1b31, 0x1b4c, 0x1b5a, 0x1b5a, 0x1b5a, 0x1b5a, + 0x1b5a, 0x1b5a, 0x1b5a, 0x1b5a, 0x1b5a, 0x1b5a, 0x1b6a, 0x1b76, + 0x1b76, 0x1b76, 0x1b82, 0x1ba1, 0x1bb7, +} // Size: 1250 bytes + +const kyLangStr string = "" + // Size: 6763 bytes "афарчаабхазчаафрикаанчааканчаамхарчаарагончоарабчаассамчааварикчеаймарач" + "аазербайжанчабашкырчабеларусчаболгарчабисламачабамбарачабангладешчетибе" + - "тчебретончобоснийчекаталанчачеченчечаморрочокорсиканчачехчечиркөө славя" + + "тчебретончобоснийчекаталончачеченчечаморрочокорсиканчачехчечиркөө славя" + "нчачувашчауелшчедатчанемисчедивехичежонгучаэбечегрекчеанглисчеэсперанто" + - "испанчаэстончобаскчафарсчафулачафинчефижичефароэчефранцузчабатыш фризче" + - "ирландчакельтчегалисиячагуарашгужаратчаманксычахаусачаивриттехиндичехор" + - "ватчагаитичевенгерчеармянчагерерочоинтерлингваиндонезчеигбочосычуань йи" + - "чеидочоисландчаиталиянчаинуктитутчажапончожаванизчегрузинчекикуйичекуан" + - "ьямачаказакчакалаалисутчакмерчеканнадачакорейчекануричекашмирчекурдчако" + - "мичекорнишчекыргызчалатынчалюксембургчагандачалимбургичелингалачалаочол" + - "итовчолуба-катангачалатышчамалагасчамаршаллчамаоричемакедончомалайаламч" + - "амонголчомаратичемалайчамалтизчебурмачанауручатүндүк ндыбелченепалчандо" + - "нгачаголландчанорвежче (Нинорск)норвежче (Букмал)түштүк ндебелеченавадж" + - "очоньянджачаокситанчаоромочоориячаосетинчепунжабичеполякчапуштучапортуг" + - "алчакечуачароманшчарундичерумынчаорусчаруандачасанскритчесардинчесиндхи" + - "четүндүк самичесангочосингалачасловакчасловенчесамоанчашоначасомаличеал" + - "банчасербчесватичесесоточосунданчашведчесуахиличетамилчетелугучатажикче" + - "тайчатигриниачатүркмөнчөтсваначатонгачатүркчөтсонгачататарчатаитичеуйгу" + - "рчаукраинчеурдучаөзбекчевендачавьетнамчаволапюкчаваллончоуолофчокосачаи" + - "дишчейорубачакытайчазулучаачехчеадаңмечеадыгейчеагемчеайнучаалеутчатүшт" + - "үк алтайчаангикачамапучечеарапахочоасучаастурийчеавадхичебаличебасаачаб" + - "ембачабеначачыгыш балучичебхожпуричебиничесиксикачабодочобугийчеблинчес" + - "ебуанчачигачачуукичемаричечокточочерокичешайеннчеборбордук курдчасеселв" + - "а креол французчадакотачадаргинчетаитачадогрибчезамрачатөмөнкү сорбианч" + - "адуалачажола-фоничедазагачаэмбучаэфикчеэкажукчаэвондочофилипинчефончофр" + - "иулчагачагагаузчаГань Кытайчагиизчегилбертчегоронталочонемисче (Швейцар" + - "ия)гусичегвичинчеХакка кытайчагавайчахилигайнончохмонгчожогорку сорбиан" + - "чаСянь Кытайчахупачаибанчаибибиочоилокочоингушчаложбанчангомбачамачамеч" + - "екабылчакахинчеджучакамбачакабардинчетяпчамакондечекабувердичекорочохас" + - "ичекойра чиничекакочокаленжичекимбундучакоми-пермякчаконканичекпеллечек" + - "арачай-балкарчакарелчекурухчашамабалачабафиячаколоньячакумыкчаладиночол" + - "ангичелезгинчелакотачалозичетүндүк луричелуба-лулуачалундачалуочомизочо" + - "лухиячамадурисчемагахичемаитиличемакасарчамасайчамокшачамендечемеручамо" + - "рисианчамакуачаметачамикмакчаминанкабаучаманипуричемохаукчамоссичемунда" + - "нгчабир нече тилдекрикчемирандизчеэрзянчамазандераничеnanнеополитанчана" + - "мачатөмөнкү немисченеваричениасчаньюанчаквасиочонгимбунчаногайчанкочотү" + - "ндүк сохочонуерченыйанколчопангасичепампангачапапиаменточопалауанчааргы" + - "ндашкан тил (Нигерия)пруссчакичечерапаньючараротонгачаромбочоаромунчару" + - "ачасандавечесахачасамбуручасанталиченгамбайчасангучасицилийчешотландчат" + - "үштүк курдчасеначакойраборо сенничеташелитчешанчатүштүк саамичелуле-сам" + - "ичеинари саамическолт саамичесонинкечесранан тонгочосахочосукумачакомор" + - "чосириячатимнечетесочотетумчатигречеклингончоток-писинчетарокочотумбука" + - "чатувалучатасабакчатувинчеБорбордук Атлас тамазитчеудмуртчаумбундучатүп" + - "күвайичевунжочовалцерчевольяттачаварайчаворлпиричеwuuкалмыкчасогачаянгб" + - "енчейембачакантончомарокко тамазигт адабий тилиндезуничетилдик мазмун ж" + - "окзазачаазыркы адабий араб тилиндеадабий немисче (Швейцария)испанча (Ев" + - "ропа)төмөнкү саксончофламандчапортугалча (Европа)молдованчасерб-хорватк" + - "онго суахаличекытайча (жөнөкөйлөштүрүлгөн)кытайча (салттуу)" - -var kyLangIdx = []uint16{ // 613 elements + "испанчаэстончобаскчафарсчафулачафинчефижичефарерчефранцузчабатыш фризче" + + "ирландчашотладиялык гелчагалисиячагуараничегужаратчамэнксычахаусачаиври" + + "тчехиндичехорватчагаитичевенгерчеармянчагерерочоинтерлингваиндонезиячаи" + + "гбочосычуань йичеидочоисландчаиталиянчаинуктитутчажапончожаванизчегрузи" + + "нчекикуйичекуаньямачаказакчакалаалисутчакмерчеканнадачакорейчекануричек" + + "ашмирчекурдчакомичекорнишчекыргызчалатынчалюксембургчагандачалимбургиче" + + "лингалачалаочолитовчолуба-катангачалатышчамалагасчамаршаллчамаоричемаке" + + "дончомалайаламчамонголчомаратичемалайчамалтизчебурмачанауручатүндүк нды" + + "белченепалчандонгачаголландчанорвежче (нинорск)норвежче (Букмал)түштүк " + + "ндебелеченаваджочоньянджачаокситанчаоромочоориячаосетинчепунжабичеполяк" + + "чапуштучапортугалчакечуачароманшчарундичерумынчаорусчаруандачасанскритч" + + "есардинчесиндхичетүндүк саамичесангочосингалачасловакчасловенчесамоанча" + + "шоначасомаличеалбанчасербчесватичесесоточосунданчашведчесуахиличетамилч" + + "етелугучатажикчетайчатигриниачатүркмөнчөтсваначатонгачатүркчөтсонгачата" + + "тарчатаитичеуйгурчаукраинчеурдучаөзбекчевендачавьетнамчаволапюкчаваллон" + + "чоуолофчокосачаидишчейорубачакытайчазулучаачехчеадаңмечеадыгейчеагемчеа" + + "йнучаалеутчатүштүк алтайчаангикачамапучечеарапахочоасучаастурийчеавадхи" + + "чебаличебасаачабембачабеначачыгыш балучичебхожпуричебиничесиксикачабодо" + + "чобугийчеблинчесебуанчачигачачуукичемаричечокточочерокичешайеннчеборбор" + + "дук курдчасеселва креол французчадакотачадаргинчетаитачадогрибчезармача" + + "төмөнкү сорбианчадуалачажола-фоничедазагачаэмбучаэфикчеэкажукчаэвондочо" + + "филипинчефончофриулчагачагагаузчаГань Кытайчагиизчегилбертчегоронталочо" + + "немисче (Швейцария)гусичегвичинчеХакка кытайчагавайчахилигайнончохмонгч" + + "ожогорку сорбианчаСянь Кытайчахупачаибанчаибибиочоилокочоингушчаложбанч" + + "ангомбачамачамечекабылчакахинчеджучакамбачакабардинчетяпчамакондечекабу" + + "вердичекорочохасичекойра чиничекакочокаленжичекимбундучакоми-пермякчако" + + "нканичекпеллечекарачай-балкарчакарелчекурухчашамабалачабафиячаколоньяча" + + "кумыкчаладиночолангичелезгинчелакотачалозичетүндүк луричелуба-лулуачалу" + + "ндачалуочомизочолухиячамадурисчемагахичемаитиличемакасарчамасайчамокшач" + + "амендечемеручаморисианчамакуачаметачамикмакчаминанкабаучаманипуричемоха" + + "укчамоссичемундангчабир нече тилдекрикчемирандизчеэрзянчамазандераничеn" + + "anнеополитанчанамачатөмөнкү немисченеваричениасчаньюанчаквасиочонгимбунч" + + "аногайчанкочотүндүк соточонуерченыйанколчопангасичепампангачапапиаменто" + + "чопалауанчааргындашкан тил (Нигерия)пруссчакичечерапаньючараротонгачаро" + + "мбочоаромунчаруачасандавечесахачасамбуручасанталиченгамбайчасангучасици" + + "лийчешотландчатүштүк курдчасеначакойраборо сенничеташелитчешанчатүштүк " + + "саамичелуле саамичеинари саамическолт саамичесонинкечесранан тонгочосах" + + "очосукумачакоморчосириячатимнечетесочотетумчатигречеклингончоток-писинч" + + "етарокочотумбукачатувалучатасабакчатувинчеборбордук Атлас тамазигтчеудм" + + "уртчаумбундучабелгисиз тилдевайичевунжочовалцерчевольяттачаварайчаворлп" + + "иричеwuuкалмыкчасогачаянгбенчейембачакантончомарокко тамазигт адабий ти" + + "линдезуничетилдик мазмун жокзазачаазыркы адабий араб тилиндеадабий неми" + + "сче (Швейцария)испанча (Европа)төмөнкү саксончофламандчапортугалча (Евр" + + "опа)молдованчасерб-хорватконго суахаличекытайча (жөнөкөйлөштүрүлгөн)кыт" + + "айча (салттуу)" + +var kyLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x000c, 0x001a, 0x001a, 0x002e, 0x003a, 0x0048, 0x0058, 0x0064, 0x0072, 0x0082, 0x0092, 0x00aa, 0x00ba, 0x00cc, 0x00dc, @@ -20710,89 +22083,89 @@ var kyLangIdx = []uint16{ // 613 elements 0x0176, 0x018a, 0x018a, 0x0194, 0x01b1, 0x01bf, 0x01cb, 0x01d5, 0x01e3, 0x01f3, 0x0201, 0x020b, 0x0217, 0x0227, 0x0239, 0x0247, 0x0255, 0x0261, 0x026d, 0x0279, 0x0283, 0x028f, 0x029d, 0x02af, - 0x02c6, 0x02d6, 0x02e4, 0x02f6, 0x0302, 0x0314, 0x0324, 0x0332, - 0x0340, 0x034e, 0x034e, 0x035e, 0x036c, 0x037c, 0x038a, 0x039a, + 0x02c6, 0x02d6, 0x02f7, 0x0309, 0x031b, 0x032d, 0x033d, 0x034b, + 0x0359, 0x0367, 0x0367, 0x0377, 0x0385, 0x0395, 0x03a3, 0x03b3, // Entry 40 - 7F - 0x03b0, 0x03c2, 0x03c2, 0x03ce, 0x03e5, 0x03e5, 0x03ef, 0x03ff, - 0x0411, 0x0427, 0x0435, 0x0447, 0x0457, 0x0457, 0x0467, 0x047b, - 0x0489, 0x04a1, 0x04ad, 0x04bf, 0x04cd, 0x04dd, 0x04ed, 0x04f9, - 0x0505, 0x0515, 0x0525, 0x0533, 0x054b, 0x0559, 0x056d, 0x057f, - 0x0589, 0x0597, 0x05b2, 0x05c0, 0x05d2, 0x05e4, 0x05f2, 0x0604, - 0x061a, 0x062a, 0x063a, 0x0648, 0x0658, 0x0666, 0x0674, 0x0691, - 0x069f, 0x06af, 0x06c1, 0x06e2, 0x0701, 0x0720, 0x0732, 0x0744, - 0x0756, 0x0756, 0x0764, 0x0770, 0x0780, 0x0792, 0x0792, 0x07a0, + 0x03c9, 0x03df, 0x03df, 0x03eb, 0x0402, 0x0402, 0x040c, 0x041c, + 0x042e, 0x0444, 0x0452, 0x0464, 0x0474, 0x0474, 0x0484, 0x0498, + 0x04a6, 0x04be, 0x04ca, 0x04dc, 0x04ea, 0x04fa, 0x050a, 0x0516, + 0x0522, 0x0532, 0x0542, 0x0550, 0x0568, 0x0576, 0x058a, 0x059c, + 0x05a6, 0x05b4, 0x05cf, 0x05dd, 0x05ef, 0x0601, 0x060f, 0x0621, + 0x0637, 0x0647, 0x0657, 0x0665, 0x0675, 0x0683, 0x0691, 0x06ae, + 0x06bc, 0x06cc, 0x06de, 0x06ff, 0x071e, 0x073d, 0x074f, 0x0761, + 0x0773, 0x0773, 0x0781, 0x078d, 0x079d, 0x07af, 0x07af, 0x07bd, // Entry 80 - BF - 0x07ae, 0x07c2, 0x07d0, 0x07e0, 0x07ee, 0x07fc, 0x0808, 0x0818, - 0x082c, 0x083c, 0x084c, 0x0865, 0x0873, 0x0885, 0x0895, 0x08a5, - 0x08b5, 0x08c1, 0x08d1, 0x08df, 0x08eb, 0x08f9, 0x0909, 0x0919, - 0x0925, 0x0937, 0x0945, 0x0955, 0x0963, 0x096d, 0x0981, 0x0993, - 0x09a3, 0x09b1, 0x09bd, 0x09cd, 0x09db, 0x09e9, 0x09f7, 0x0a07, - 0x0a13, 0x0a21, 0x0a2f, 0x0a41, 0x0a53, 0x0a63, 0x0a71, 0x0a7d, - 0x0a89, 0x0a99, 0x0a99, 0x0aa7, 0x0ab3, 0x0abf, 0x0abf, 0x0acf, - 0x0adf, 0x0adf, 0x0adf, 0x0aeb, 0x0af7, 0x0af7, 0x0af7, 0x0b05, + 0x07cb, 0x07df, 0x07ed, 0x07fd, 0x080b, 0x0819, 0x0825, 0x0835, + 0x0849, 0x0859, 0x0869, 0x0884, 0x0892, 0x08a4, 0x08b4, 0x08c4, + 0x08d4, 0x08e0, 0x08f0, 0x08fe, 0x090a, 0x0918, 0x0928, 0x0938, + 0x0944, 0x0956, 0x0964, 0x0974, 0x0982, 0x098c, 0x09a0, 0x09b2, + 0x09c2, 0x09d0, 0x09dc, 0x09ec, 0x09fa, 0x0a08, 0x0a16, 0x0a26, + 0x0a32, 0x0a40, 0x0a4e, 0x0a60, 0x0a72, 0x0a82, 0x0a90, 0x0a9c, + 0x0aa8, 0x0ab8, 0x0ab8, 0x0ac6, 0x0ad2, 0x0ade, 0x0ade, 0x0aee, + 0x0afe, 0x0afe, 0x0afe, 0x0b0a, 0x0b16, 0x0b16, 0x0b16, 0x0b24, // Entry C0 - FF - 0x0b05, 0x0b20, 0x0b20, 0x0b30, 0x0b30, 0x0b40, 0x0b40, 0x0b52, - 0x0b52, 0x0b52, 0x0b52, 0x0b52, 0x0b52, 0x0b5c, 0x0b5c, 0x0b6e, - 0x0b6e, 0x0b7e, 0x0b7e, 0x0b8a, 0x0b8a, 0x0b98, 0x0b98, 0x0b98, - 0x0b98, 0x0b98, 0x0ba6, 0x0ba6, 0x0bb2, 0x0bb2, 0x0bb2, 0x0bcd, - 0x0be1, 0x0be1, 0x0bed, 0x0bed, 0x0bed, 0x0bff, 0x0bff, 0x0bff, - 0x0bff, 0x0bff, 0x0c0b, 0x0c0b, 0x0c0b, 0x0c19, 0x0c19, 0x0c25, - 0x0c25, 0x0c25, 0x0c25, 0x0c25, 0x0c25, 0x0c35, 0x0c41, 0x0c41, - 0x0c41, 0x0c4f, 0x0c5b, 0x0c5b, 0x0c69, 0x0c69, 0x0c79, 0x0c89, + 0x0b24, 0x0b3f, 0x0b3f, 0x0b4f, 0x0b4f, 0x0b5f, 0x0b5f, 0x0b71, + 0x0b71, 0x0b71, 0x0b71, 0x0b71, 0x0b71, 0x0b7b, 0x0b7b, 0x0b8d, + 0x0b8d, 0x0b9d, 0x0b9d, 0x0ba9, 0x0ba9, 0x0bb7, 0x0bb7, 0x0bb7, + 0x0bb7, 0x0bb7, 0x0bc5, 0x0bc5, 0x0bd1, 0x0bd1, 0x0bd1, 0x0bec, + 0x0c00, 0x0c00, 0x0c0c, 0x0c0c, 0x0c0c, 0x0c1e, 0x0c1e, 0x0c1e, + 0x0c1e, 0x0c1e, 0x0c2a, 0x0c2a, 0x0c2a, 0x0c38, 0x0c38, 0x0c44, + 0x0c44, 0x0c44, 0x0c44, 0x0c44, 0x0c44, 0x0c44, 0x0c54, 0x0c60, + 0x0c60, 0x0c60, 0x0c6e, 0x0c7a, 0x0c7a, 0x0c88, 0x0c88, 0x0c98, // Entry 100 - 13F - 0x0ca8, 0x0ca8, 0x0ca8, 0x0ca8, 0x0cd4, 0x0cd4, 0x0ce4, 0x0cf4, - 0x0d02, 0x0d02, 0x0d02, 0x0d12, 0x0d12, 0x0d20, 0x0d20, 0x0d41, - 0x0d41, 0x0d4f, 0x0d4f, 0x0d64, 0x0d64, 0x0d74, 0x0d80, 0x0d8c, - 0x0d8c, 0x0d8c, 0x0d9c, 0x0d9c, 0x0d9c, 0x0d9c, 0x0dac, 0x0dac, - 0x0dac, 0x0dbe, 0x0dbe, 0x0dc8, 0x0dc8, 0x0dc8, 0x0dc8, 0x0dc8, - 0x0dc8, 0x0dc8, 0x0dd6, 0x0dde, 0x0dee, 0x0e05, 0x0e05, 0x0e05, - 0x0e05, 0x0e11, 0x0e23, 0x0e23, 0x0e23, 0x0e23, 0x0e23, 0x0e23, - 0x0e39, 0x0e39, 0x0e39, 0x0e39, 0x0e5c, 0x0e5c, 0x0e5c, 0x0e68, + 0x0ca8, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cc7, 0x0cf3, 0x0cf3, 0x0d03, + 0x0d13, 0x0d21, 0x0d21, 0x0d21, 0x0d31, 0x0d31, 0x0d3f, 0x0d3f, + 0x0d60, 0x0d60, 0x0d6e, 0x0d6e, 0x0d83, 0x0d83, 0x0d93, 0x0d9f, + 0x0dab, 0x0dab, 0x0dab, 0x0dbb, 0x0dbb, 0x0dbb, 0x0dbb, 0x0dcb, + 0x0dcb, 0x0dcb, 0x0ddd, 0x0ddd, 0x0de7, 0x0de7, 0x0de7, 0x0de7, + 0x0de7, 0x0de7, 0x0de7, 0x0df5, 0x0dfd, 0x0e0d, 0x0e24, 0x0e24, + 0x0e24, 0x0e24, 0x0e30, 0x0e42, 0x0e42, 0x0e42, 0x0e42, 0x0e42, + 0x0e42, 0x0e58, 0x0e58, 0x0e58, 0x0e58, 0x0e7b, 0x0e7b, 0x0e7b, // Entry 140 - 17F - 0x0e78, 0x0e78, 0x0e91, 0x0e9f, 0x0e9f, 0x0eb7, 0x0eb7, 0x0ec5, - 0x0ee6, 0x0efd, 0x0f09, 0x0f15, 0x0f25, 0x0f33, 0x0f41, 0x0f41, - 0x0f41, 0x0f51, 0x0f61, 0x0f71, 0x0f71, 0x0f71, 0x0f71, 0x0f71, - 0x0f7f, 0x0f8d, 0x0f97, 0x0fa5, 0x0fa5, 0x0fb9, 0x0fb9, 0x0fc3, - 0x0fd5, 0x0feb, 0x0feb, 0x0ff7, 0x0ff7, 0x1003, 0x1003, 0x101a, - 0x101a, 0x101a, 0x1026, 0x1038, 0x104c, 0x1065, 0x1077, 0x1077, - 0x1087, 0x10a6, 0x10a6, 0x10a6, 0x10b4, 0x10c2, 0x10d6, 0x10e4, - 0x10f6, 0x1104, 0x1104, 0x1114, 0x1122, 0x1122, 0x1122, 0x1132, + 0x0e87, 0x0e97, 0x0e97, 0x0eb0, 0x0ebe, 0x0ebe, 0x0ed6, 0x0ed6, + 0x0ee4, 0x0f05, 0x0f1c, 0x0f28, 0x0f34, 0x0f44, 0x0f52, 0x0f60, + 0x0f60, 0x0f60, 0x0f70, 0x0f80, 0x0f90, 0x0f90, 0x0f90, 0x0f90, + 0x0f90, 0x0f9e, 0x0fac, 0x0fb6, 0x0fc4, 0x0fc4, 0x0fd8, 0x0fd8, + 0x0fe2, 0x0ff4, 0x100a, 0x100a, 0x1016, 0x1016, 0x1022, 0x1022, + 0x1039, 0x1039, 0x1039, 0x1045, 0x1057, 0x106b, 0x1084, 0x1096, + 0x1096, 0x10a6, 0x10c5, 0x10c5, 0x10c5, 0x10d3, 0x10e1, 0x10f5, + 0x1103, 0x1115, 0x1123, 0x1123, 0x1133, 0x1141, 0x1141, 0x1141, // Entry 180 - 1BF - 0x1132, 0x1132, 0x1132, 0x1142, 0x1142, 0x1142, 0x114e, 0x1167, - 0x1167, 0x117e, 0x117e, 0x118c, 0x1196, 0x11a2, 0x11b0, 0x11b0, - 0x11b0, 0x11c2, 0x11c2, 0x11d2, 0x11e4, 0x11f6, 0x11f6, 0x1204, - 0x1204, 0x1212, 0x1212, 0x1220, 0x122c, 0x1240, 0x1240, 0x124e, - 0x125a, 0x126a, 0x1282, 0x1282, 0x1296, 0x12a6, 0x12b4, 0x12b4, - 0x12c6, 0x12e0, 0x12ec, 0x1300, 0x1300, 0x1300, 0x1300, 0x130e, - 0x1328, 0x132b, 0x1343, 0x134f, 0x136c, 0x137c, 0x1388, 0x1396, - 0x1396, 0x13a6, 0x13b8, 0x13c6, 0x13c6, 0x13c6, 0x13d0, 0x13e9, + 0x1151, 0x1151, 0x1151, 0x1151, 0x1161, 0x1161, 0x1161, 0x1161, + 0x116d, 0x1186, 0x1186, 0x119d, 0x119d, 0x11ab, 0x11b5, 0x11c1, + 0x11cf, 0x11cf, 0x11cf, 0x11e1, 0x11e1, 0x11f1, 0x1203, 0x1215, + 0x1215, 0x1223, 0x1223, 0x1231, 0x1231, 0x123f, 0x124b, 0x125f, + 0x125f, 0x126d, 0x1279, 0x1289, 0x12a1, 0x12a1, 0x12b5, 0x12c5, + 0x12d3, 0x12d3, 0x12e5, 0x12ff, 0x130b, 0x131f, 0x131f, 0x131f, + 0x131f, 0x132d, 0x1347, 0x134a, 0x1362, 0x136e, 0x138b, 0x139b, + 0x13a7, 0x13b5, 0x13b5, 0x13c5, 0x13d7, 0x13e5, 0x13e5, 0x13e5, // Entry 1C0 - 1FF - 0x13f5, 0x13f5, 0x13f5, 0x1409, 0x1409, 0x1409, 0x1409, 0x1409, - 0x141b, 0x141b, 0x142f, 0x1447, 0x1459, 0x1459, 0x1487, 0x1487, - 0x1487, 0x1487, 0x1487, 0x1487, 0x1487, 0x1487, 0x1487, 0x1495, - 0x1495, 0x14a1, 0x14a1, 0x14a1, 0x14b3, 0x14c9, 0x14c9, 0x14c9, - 0x14d7, 0x14d7, 0x14d7, 0x14d7, 0x14d7, 0x14e7, 0x14f1, 0x1503, - 0x150f, 0x150f, 0x1521, 0x1521, 0x1533, 0x1533, 0x1545, 0x1553, - 0x1565, 0x1577, 0x1577, 0x1590, 0x1590, 0x159c, 0x159c, 0x159c, - 0x15bd, 0x15bd, 0x15bd, 0x15cf, 0x15d9, 0x15d9, 0x15d9, 0x15d9, + 0x13ef, 0x1408, 0x1414, 0x1414, 0x1414, 0x1428, 0x1428, 0x1428, + 0x1428, 0x1428, 0x143a, 0x143a, 0x144e, 0x1466, 0x1478, 0x1478, + 0x14a6, 0x14a6, 0x14a6, 0x14a6, 0x14a6, 0x14a6, 0x14a6, 0x14a6, + 0x14a6, 0x14b4, 0x14b4, 0x14c0, 0x14c0, 0x14c0, 0x14d2, 0x14e8, + 0x14e8, 0x14e8, 0x14f6, 0x14f6, 0x14f6, 0x14f6, 0x14f6, 0x1506, + 0x1510, 0x1522, 0x152e, 0x152e, 0x1540, 0x1540, 0x1552, 0x1552, + 0x1564, 0x1572, 0x1584, 0x1596, 0x1596, 0x15af, 0x15af, 0x15bb, + 0x15bb, 0x15bb, 0x15dc, 0x15dc, 0x15dc, 0x15ee, 0x15f8, 0x15f8, // Entry 200 - 23F - 0x15d9, 0x15f4, 0x1609, 0x1622, 0x163b, 0x164d, 0x164d, 0x1668, - 0x1668, 0x1674, 0x1674, 0x1684, 0x1684, 0x1684, 0x1692, 0x1692, - 0x16a0, 0x16a0, 0x16a0, 0x16ae, 0x16ba, 0x16ba, 0x16c8, 0x16d6, - 0x16d6, 0x16d6, 0x16d6, 0x16e8, 0x16e8, 0x16e8, 0x16e8, 0x16e8, - 0x16fd, 0x16fd, 0x170d, 0x170d, 0x170d, 0x170d, 0x171f, 0x172f, - 0x1741, 0x174f, 0x177f, 0x178f, 0x178f, 0x17a1, 0x17ab, 0x17b7, - 0x17b7, 0x17b7, 0x17b7, 0x17b7, 0x17b7, 0x17b7, 0x17c5, 0x17d5, - 0x17e9, 0x17f7, 0x17f7, 0x180b, 0x180e, 0x181e, 0x181e, 0x182a, + 0x15f8, 0x15f8, 0x15f8, 0x1613, 0x162a, 0x1643, 0x165c, 0x166e, + 0x166e, 0x1689, 0x1689, 0x1695, 0x1695, 0x16a5, 0x16a5, 0x16a5, + 0x16b3, 0x16b3, 0x16c1, 0x16c1, 0x16c1, 0x16cf, 0x16db, 0x16db, + 0x16e9, 0x16f7, 0x16f7, 0x16f7, 0x16f7, 0x1709, 0x1709, 0x1709, + 0x1709, 0x1709, 0x171e, 0x171e, 0x172e, 0x172e, 0x172e, 0x172e, + 0x1740, 0x1750, 0x1762, 0x1770, 0x17a2, 0x17b2, 0x17b2, 0x17c4, + 0x17df, 0x17eb, 0x17eb, 0x17eb, 0x17eb, 0x17eb, 0x17eb, 0x17eb, + 0x17f9, 0x1809, 0x181d, 0x182b, 0x182b, 0x183f, 0x1842, 0x1852, // Entry 240 - 27F - 0x182a, 0x182a, 0x183a, 0x1848, 0x1848, 0x1858, 0x1858, 0x1858, - 0x1858, 0x1858, 0x1893, 0x189f, 0x18bf, 0x18cb, 0x18fc, 0x18fc, - 0x18fc, 0x192c, 0x192c, 0x192c, 0x192c, 0x192c, 0x192c, 0x1949, - 0x1949, 0x1949, 0x1949, 0x1949, 0x1968, 0x197a, 0x197a, 0x199d, - 0x19b1, 0x19c6, 0x19e3, 0x1a18, 0x1a37, -} // Size: 1250 bytes - -const loLangStr string = "" + // Size: 10855 bytes + 0x1852, 0x185e, 0x185e, 0x185e, 0x186e, 0x187c, 0x187c, 0x188c, + 0x188c, 0x188c, 0x188c, 0x188c, 0x18c7, 0x18d3, 0x18f3, 0x18ff, + 0x1930, 0x1930, 0x1930, 0x1960, 0x1960, 0x1960, 0x1960, 0x1960, + 0x1960, 0x197d, 0x197d, 0x197d, 0x197d, 0x197d, 0x199c, 0x19ae, + 0x19ae, 0x19d1, 0x19e5, 0x19fa, 0x1a17, 0x1a4c, 0x1a6b, +} // Size: 1254 bytes + +const loLangStr string = "" + // Size: 10930 bytes "ອະຟາແອບຄາຊຽນອາເວັສແຕນອາຟຣິການອາການອຳຮາຣິກອາຣາໂກເນັດອາຣັບອັສຊາມີສອາວາຣິກອ" + "າຍມາລາອາເຊີໄບຈານິບາຣກີເບລາຣັສຊຽນບັງກາຣຽນບິສລະມາບາມບາຣາເບັງກາລີທິເບທັນເ" + "ບຣຕັນບອສນຽນຄາຕາລານຊີເຄນຊາມໍໂຣຄໍຊິກາຄີເຊກໂບດສລາວິກຊູວາຊເວວແດນິຊເຢຍລະມັນ" + @@ -20838,16 +22211,16 @@ const loLangStr string = "" + // Size: 10855 bytes "າດຊິດາໂມຊາມິໃຕ້ລຸນຊາມິອີນາຣິຊາມິສກອດຊາມິໂຊນິນກີຊອກດິນສຣານນານຕອນໂກເຊເລີ" + "ຊາໂຮຊູຄູມ້າຊູຊູຊູເມີເລຍໂຄໂນຣຽນຊີເລຍແບບດັ້ງເດີມຊີເລຍທີມເນເຕໂຊເຕເລໂນເຕຕູ" + "ມໄທກຣີຕີວໂຕເກເລົາຄຣິງກອນທລີງກິດທາມາກເຊກນາຍອາຊາຕອງກາທອກພີຊິນຕາໂລໂກຊີມຊີ" + - "ແອນຕຳບູກາຕູວາລູຕາຊາວັກຕູວີນຽນອັດລາສ ທາມາຊີກ ກາງອຸດມັດຢູກາລິກອຳບັນດູລູດ" + - "ໄວໂວຕິກວັນໂຈວາເຊີວາລາໂມວາເລວາໂຊວາຣພິຣິການມິກໂຊກາເຢົ້າຢັບແຍງເບນແຢມບາກວາ" + - "ງຕຸ້ງຊາໂປແຕບສັນຍາລັກບລີຊິມເຊນາກາໂມຣັອກແຄນ ທາມາຊີກ ມາດຕະຖານຊູນີບໍ່ມີເນື" + - "້ອຫາພາສາຊາຊາອາຣາບິກມາດຕະຖານສະໄໝໃໝ່ເຢຍລະມັນ (ໂອສຕຣິດ)ສະວິສ ໄຮ ເຈີແມນອັງ" + - "ກິດ (ໂອດສະຕາລີ)ອັງກິດ (ບຣິດທິຊ)ອັງກິດ (ອາເມລິກັນ)ລາຕິນ ອາເມຣິກັນ ສະແປນ" + - "ນິຊສະເປັນ ຢຸໂຣບເມັກຊິກັນ ສະແປນນິຊຟລັງ(ການາດາ)ຊາຊອນ ຕອນໄຕຟລີມິຊປອກຕຸຍກິ" + - "ສ ບະເລຊີ່ນປອກຕຸຍກິສ ຢຸໂຣບໂມດາວຽນເຊີໂບ-ໂກເຊຍຄອງໂກ ຊວາຮີລິຈີນແບບຮຽບງ່າຍຈ" + - "ີນແບບດັ້ງເດີມ" - -var loLangIdx = []uint16{ // 613 elements + "ແອນຕຳບູກາຕູວາລູຕາຊາວັກຕູວີນຽນອັດລາສ ທາມາຊີກ ກາງອຸດມັດຢູກາລິກອຳບັນດູບໍ່" + + "ສາມາດລະບຸພາສາໄວໂວຕິກວັນໂຈວາເຊີວາລາໂມວາເລວາໂຊວາຣພິຣິການມິກໂຊກາເຢົ້າຢັບແ" + + "ຍງເບນແຢມບາກວາງຕຸ້ງຊາໂປແຕບສັນຍາລັກບລີຊິມເຊນາກາໂມຣັອກແຄນ ທາມາຊີກ ມາດຕະຖາ" + + "ນຊູນີບໍ່ມີເນື້ອຫາພາສາຊາຊາອາຣາບິກມາດຕະຖານສະໄໝໃໝ່ເຢຍລະມັນ (ໂອສຕຣິດ)ສະວິສ" + + " ໄຮ ເຈີແມນອັງກິດ (ໂອດສະຕາລີ)ອັງກິດແຄນາດາອັງກິດ (ບຣິດທິຊ)ອັງກິດ (ອາເມລິກັ" + + "ນ)ລາຕິນ ອາເມຣິກັນ ສະແປນນິຊສະເປັນ ຢຸໂຣບເມັກຊິກັນ ສະແປນນິຊຟລັງ(ການາດາ)ຊາ" + + "ຊອນ ຕອນໄຕຟລີມິຊປອກຕຸຍກິສ ບະເລຊີ່ນປອກຕຸຍກິສ ຢຸໂຣບໂມດາວຽນເຊີໂບ-ໂກເຊຍຄອງໂ" + + "ກ ຊວາຮີລິຈີນແບບຮຽບງ່າຍຈີນແບບດັ້ງເດີມ" + +var loLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x000c, 0x0024, 0x003f, 0x0057, 0x0066, 0x007b, 0x0099, 0x00a8, 0x00c0, 0x00d5, 0x00ea, 0x010b, 0x011a, 0x0138, 0x0150, @@ -20882,62 +22255,62 @@ var loLangIdx = []uint16{ // 613 elements 0x1006, 0x1012, 0x1024, 0x1024, 0x1030, 0x103f, 0x103f, 0x1076, 0x1088, 0x1097, 0x10a3, 0x10a3, 0x10ac, 0x10c1, 0x10c1, 0x10c1, 0x10ca, 0x10ca, 0x10d6, 0x10e5, 0x10f4, 0x110c, 0x1118, 0x1124, - 0x1139, 0x1148, 0x1157, 0x1169, 0x117b, 0x118d, 0x1199, 0x11a8, - 0x11ba, 0x11c9, 0x11d5, 0x11f3, 0x1205, 0x121d, 0x122f, 0x1244, + 0x1139, 0x1148, 0x1157, 0x1169, 0x117b, 0x117b, 0x118d, 0x1199, + 0x11a8, 0x11ba, 0x11c9, 0x11d5, 0x11f3, 0x1205, 0x121d, 0x122f, // Entry 100 - 13F - 0x1269, 0x127b, 0x127b, 0x129f, 0x12ce, 0x12e3, 0x12f5, 0x1304, - 0x1310, 0x1322, 0x1334, 0x1346, 0x1355, 0x1361, 0x1370, 0x1394, - 0x1394, 0x13a3, 0x13b5, 0x13d1, 0x13dd, 0x13ef, 0x1401, 0x1410, - 0x1410, 0x142e, 0x1443, 0x1455, 0x1470, 0x1470, 0x1485, 0x1485, - 0x148e, 0x14a6, 0x14a6, 0x14af, 0x14af, 0x14d0, 0x14f7, 0x14f7, - 0x1515, 0x1542, 0x1554, 0x155a, 0x156f, 0x156f, 0x157b, 0x1587, - 0x1587, 0x158d, 0x15ab, 0x15ab, 0x15d5, 0x1605, 0x1605, 0x1614, - 0x162f, 0x1641, 0x1650, 0x166e, 0x1690, 0x1690, 0x1690, 0x169c, + 0x1244, 0x1269, 0x127b, 0x127b, 0x129f, 0x12ce, 0x12e3, 0x12f5, + 0x1304, 0x1310, 0x1322, 0x1334, 0x1346, 0x1355, 0x1361, 0x1370, + 0x1394, 0x1394, 0x13a3, 0x13b5, 0x13d1, 0x13dd, 0x13ef, 0x1401, + 0x1410, 0x1410, 0x142e, 0x1443, 0x1455, 0x1470, 0x1470, 0x1485, + 0x1485, 0x148e, 0x14a6, 0x14a6, 0x14af, 0x14af, 0x14d0, 0x14f7, + 0x14f7, 0x1515, 0x1542, 0x1554, 0x155a, 0x156f, 0x156f, 0x157b, + 0x1587, 0x1587, 0x158d, 0x15ab, 0x15ab, 0x15d5, 0x1605, 0x1605, + 0x1614, 0x162f, 0x1641, 0x1650, 0x166e, 0x1690, 0x1690, 0x1690, // Entry 140 - 17F - 0x16ae, 0x16ba, 0x16ba, 0x16cf, 0x16cf, 0x16ea, 0x16f9, 0x1702, - 0x1730, 0x1730, 0x173c, 0x174b, 0x1763, 0x1775, 0x1787, 0x1787, - 0x1787, 0x1799, 0x17a8, 0x17b7, 0x17d9, 0x17fe, 0x17fe, 0x181d, - 0x182f, 0x183e, 0x1847, 0x1856, 0x1862, 0x1877, 0x188c, 0x1895, - 0x18aa, 0x18c8, 0x18c8, 0x18d4, 0x18d4, 0x18e0, 0x18ef, 0x190b, - 0x190b, 0x190b, 0x1917, 0x1932, 0x194a, 0x196c, 0x1981, 0x1990, - 0x199f, 0x19c1, 0x19c1, 0x19c1, 0x19d6, 0x19e5, 0x19fa, 0x1a09, - 0x1a21, 0x1a30, 0x1a42, 0x1a54, 0x1a63, 0x1a72, 0x1a81, 0x1a90, + 0x169c, 0x16ae, 0x16ba, 0x16ba, 0x16cf, 0x16cf, 0x16ea, 0x16f9, + 0x1702, 0x1730, 0x1730, 0x173c, 0x174b, 0x1763, 0x1775, 0x1787, + 0x1787, 0x1787, 0x1799, 0x17a8, 0x17b7, 0x17d9, 0x17fe, 0x17fe, + 0x181d, 0x182f, 0x183e, 0x1847, 0x1856, 0x1862, 0x1877, 0x188c, + 0x1895, 0x18aa, 0x18c8, 0x18c8, 0x18d4, 0x18d4, 0x18e0, 0x18ef, + 0x190b, 0x190b, 0x190b, 0x1917, 0x1932, 0x194a, 0x196c, 0x1981, + 0x1990, 0x199f, 0x19c1, 0x19c1, 0x19c1, 0x19d6, 0x19e5, 0x19fa, + 0x1a09, 0x1a21, 0x1a30, 0x1a42, 0x1a54, 0x1a63, 0x1a72, 0x1a81, // Entry 180 - 1BF - 0x1a90, 0x1a90, 0x1a90, 0x1aa2, 0x1aa2, 0x1ab7, 0x1ac3, 0x1aee, - 0x1aee, 0x1b0a, 0x1b1c, 0x1b2b, 0x1b34, 0x1b40, 0x1b4c, 0x1b4c, - 0x1b4c, 0x1b5e, 0x1b6a, 0x1b7c, 0x1b8e, 0x1ba3, 0x1bbb, 0x1bc7, - 0x1bd3, 0x1be2, 0x1bf4, 0x1c03, 0x1c0f, 0x1c27, 0x1c3f, 0x1c61, - 0x1c6d, 0x1c7f, 0x1c9a, 0x1ca9, 0x1cc1, 0x1ccd, 0x1cdc, 0x1cdc, - 0x1cee, 0x1d06, 0x1d12, 0x1d27, 0x1d39, 0x1d39, 0x1d48, 0x1d57, - 0x1d78, 0x1d78, 0x1d8a, 0x1d96, 0x1dc1, 0x1dd3, 0x1de5, 0x1df4, - 0x1df4, 0x1e09, 0x1e1e, 0x1e2a, 0x1e3f, 0x1e3f, 0x1e51, 0x1e69, + 0x1a90, 0x1a90, 0x1a90, 0x1a90, 0x1aa2, 0x1aa2, 0x1ab7, 0x1ab7, + 0x1ac3, 0x1aee, 0x1aee, 0x1b0a, 0x1b1c, 0x1b2b, 0x1b34, 0x1b40, + 0x1b4c, 0x1b4c, 0x1b4c, 0x1b5e, 0x1b6a, 0x1b7c, 0x1b8e, 0x1ba3, + 0x1bbb, 0x1bc7, 0x1bd3, 0x1be2, 0x1bf4, 0x1c03, 0x1c0f, 0x1c27, + 0x1c3f, 0x1c61, 0x1c6d, 0x1c7f, 0x1c9a, 0x1ca9, 0x1cc1, 0x1ccd, + 0x1cdc, 0x1cdc, 0x1cee, 0x1d06, 0x1d12, 0x1d27, 0x1d39, 0x1d39, + 0x1d48, 0x1d57, 0x1d78, 0x1d78, 0x1d8a, 0x1d96, 0x1dc1, 0x1dd3, + 0x1de5, 0x1df4, 0x1df4, 0x1e09, 0x1e1e, 0x1e2a, 0x1e3f, 0x1e3f, // Entry 1C0 - 1FF - 0x1e72, 0x1e96, 0x1eab, 0x1ebd, 0x1ec9, 0x1ed5, 0x1ee4, 0x1f08, - 0x1f26, 0x1f38, 0x1f50, 0x1f74, 0x1f8c, 0x1f8c, 0x1fb3, 0x1fb3, - 0x1fb3, 0x1fd4, 0x1fd4, 0x1fe9, 0x1fe9, 0x1fe9, 0x1ff8, 0x1ff8, - 0x201f, 0x2028, 0x2028, 0x2043, 0x2058, 0x2076, 0x2076, 0x2076, - 0x2085, 0x2097, 0x2097, 0x2097, 0x2097, 0x20b2, 0x20c1, 0x20d3, - 0x20df, 0x20fb, 0x210d, 0x211c, 0x2131, 0x2131, 0x213d, 0x214c, - 0x2161, 0x216d, 0x216d, 0x2199, 0x21ab, 0x21b7, 0x21b7, 0x21c9, - 0x21f4, 0x2212, 0x2212, 0x222a, 0x2233, 0x224c, 0x225e, 0x225e, + 0x1e51, 0x1e69, 0x1e72, 0x1e96, 0x1eab, 0x1ebd, 0x1ec9, 0x1ed5, + 0x1ee4, 0x1f08, 0x1f26, 0x1f38, 0x1f50, 0x1f74, 0x1f8c, 0x1f8c, + 0x1fb3, 0x1fb3, 0x1fb3, 0x1fd4, 0x1fd4, 0x1fe9, 0x1fe9, 0x1fe9, + 0x1ff8, 0x1ff8, 0x201f, 0x2028, 0x2028, 0x2043, 0x2058, 0x2076, + 0x2076, 0x2076, 0x2085, 0x2097, 0x2097, 0x2097, 0x2097, 0x20b2, + 0x20c1, 0x20d3, 0x20df, 0x20fb, 0x210d, 0x211c, 0x2131, 0x2131, + 0x213d, 0x214c, 0x2161, 0x216d, 0x216d, 0x2199, 0x21ab, 0x21b7, + 0x21b7, 0x21c9, 0x21f4, 0x2212, 0x2212, 0x222a, 0x2233, 0x224c, // Entry 200 - 23F - 0x225e, 0x2273, 0x2288, 0x22a6, 0x22be, 0x22d3, 0x22e5, 0x2309, - 0x2318, 0x2324, 0x2324, 0x2339, 0x2345, 0x235d, 0x2372, 0x23a2, - 0x23b1, 0x23b1, 0x23b1, 0x23c0, 0x23cc, 0x23de, 0x23ed, 0x23fc, - 0x2405, 0x241d, 0x241d, 0x2432, 0x2447, 0x2447, 0x245f, 0x2483, - 0x249b, 0x249b, 0x24ad, 0x24ad, 0x24c5, 0x24c5, 0x24d7, 0x24e9, - 0x24fe, 0x2513, 0x2545, 0x2557, 0x256c, 0x2581, 0x258a, 0x2590, - 0x2590, 0x2590, 0x2590, 0x2590, 0x259f, 0x259f, 0x25ae, 0x25bd, - 0x25cf, 0x25db, 0x25e7, 0x25fc, 0x25fc, 0x260e, 0x260e, 0x261a, + 0x225e, 0x225e, 0x225e, 0x2273, 0x2288, 0x22a6, 0x22be, 0x22d3, + 0x22e5, 0x2309, 0x2318, 0x2324, 0x2324, 0x2339, 0x2345, 0x235d, + 0x2372, 0x23a2, 0x23b1, 0x23b1, 0x23b1, 0x23c0, 0x23cc, 0x23de, + 0x23ed, 0x23fc, 0x2405, 0x241d, 0x241d, 0x2432, 0x2447, 0x2447, + 0x245f, 0x2483, 0x249b, 0x249b, 0x24ad, 0x24ad, 0x24c5, 0x24c5, + 0x24d7, 0x24e9, 0x24fe, 0x2513, 0x2545, 0x2557, 0x256c, 0x2581, + 0x25b1, 0x25b7, 0x25b7, 0x25b7, 0x25b7, 0x25b7, 0x25c6, 0x25c6, + 0x25d5, 0x25e4, 0x25f6, 0x2602, 0x260e, 0x2623, 0x2623, 0x2635, // Entry 240 - 27F - 0x2629, 0x2632, 0x2644, 0x2653, 0x2653, 0x266b, 0x2680, 0x26aa, - 0x26aa, 0x26bc, 0x2706, 0x2712, 0x2742, 0x274e, 0x2790, 0x2790, - 0x27c0, 0x27e9, 0x2819, 0x2819, 0x2843, 0x2873, 0x28b7, 0x28d9, - 0x290d, 0x290d, 0x292d, 0x292d, 0x294c, 0x295e, 0x2992, 0x29bd, - 0x29d2, 0x29f1, 0x2a16, 0x2a3d, 0x2a67, -} // Size: 1250 bytes - -const ltLangStr string = "" + // Size: 5947 bytes + 0x2635, 0x2641, 0x2650, 0x2659, 0x266b, 0x267a, 0x267a, 0x2692, + 0x26a7, 0x26d1, 0x26d1, 0x26e3, 0x272d, 0x2739, 0x2769, 0x2775, + 0x27b7, 0x27b7, 0x27e7, 0x2810, 0x2840, 0x2864, 0x288e, 0x28be, + 0x2902, 0x2924, 0x2958, 0x2958, 0x2978, 0x2978, 0x2997, 0x29a9, + 0x29dd, 0x2a08, 0x2a1d, 0x2a3c, 0x2a61, 0x2a88, 0x2ab2, +} // Size: 1254 bytes + +const ltLangStr string = "" + // Size: 5975 bytes "afarųabchazųavestųafrikanųakanųamharųaragonesųarabųasamųavarikųaimarųaze" + "rbaidžaniečiųbaškirųbaltarusiųbulgarųbislamabambarųbengalųtibetiečiųbret" + "onųbosniųkatalonųčečėnųčamorųkorsikiečiųkryčekųbažnytinė slavųčiuvašųval" + @@ -20981,39 +22354,39 @@ const ltLangStr string = "" + // Size: 5947 bytes "angkasikotanezųkojra činikhovarųkirmanjkikakokalenjinųkimbundukomių-perm" + "iųkonkaniųkosreanųkpeliųkaračiajų balkarijoskriokinaray-akarelųkurukšamb" + "alųbafųkolognųkumikųkutenailadinolangilandalambalezginųnaujoji frankų ka" + - "lbaligūrųlyviųlakotųlombardųmongųloziųšiaurės lurilatgaliųluba lulualuis" + - "enoLundosluomizolujaklasikinė kinųlazmadurezųmafųmagahimaithiliMakasarom" + - "andingųmasajųmabųmokšamandarųmendemerųmorisijųVidurio Airijosmakua-maeto" + - "metamikmakųminangkabaumančumanipuriųmohokmosivakarų marimundangųkelios k" + - "alboskrykųmirandezųmarvarimentavaimjenųerzyjųmazenderaniųkinų kalbos pie" + - "tų minų tarmėneapoliečiųnamaŽemutinės Vokietijosnevariniasniujiečiųao na" + - "gakvasiųngiembūnųnogųsenoji norsųnovialenkošiaurės Sotonuerųklasikinė ne" + - "variniamveziniankolųniorųnzimaosageosmanų turkųpangasinanųvidurinė persų" + - " kalbapampangųpapiamentopalauliečiųpikardųNigerijos pidžinųPensilvanijos" + - " vokiečiųvokiečių kalbos žemaičių tarmėsenoji persųvokiečių kalbos Pfalc" + - "o tarmėfinikiečiųitalų kalbos Pjemonto tarmėPontoPonapėsprūsųsenovės pro" + - "vansalųkičiųČimboraso aukštumų kečujųRadžastanorapanuirarotonganųitalų k" + - "albos Romanijos tarmėrifųromboromųrotumanųrusinųRovianosaromaniųruasanda" + - "viųjakutųsamarėjų aramiųsambūrųsasaksantaliųsauraštrųngambajųsangųsicili" + - "ečiųškotųsasaresų sardinųpietų kurdųsenecųsenųseriselkupkojraboro senise" + - "noji airiųžemaičiųtachelhitųšanchadian arabųsidamųsileziečių žemaičiųsel" + - "ajarųpietų samiųLiuleo samiųInario samiųSkolto samiųsoninkesogdiensranan" + - " tongosererųsahoSaterlendo fryzųsukumasusušumerųkomorųklasikinė sirųsirų" + - "sileziečiųtulųtimnetesoTerenotetumtigretivTokelautsakurųklingonųtlingitų" + - "talyšųtamašekniasa tongųPapua pidžinųturoyoTarokotsakonųtsimšianmusulmon" + - "ų tatųtumbukųTuvalutasavakųtuviųCentrinio Maroko tamazitųudmurtųugaritų" + - "umbundurūtvaivenetųvepsųvakarų flamandųpagrindinė frankonųVotikveruvunjo" + - "valserųvalamovaraiVašovalrpirikinų kalbos vu tarmėkalmukųmegrelųsogųjaoj" + - "apezųjangbenųjembųnjengatukinų kalbos Kantono tarmėzapotekųBLISS simboli" + - "ųzelandųzenagastandartinė Maroko tamazigtųZuninėra kalbinio turiniozaza" + - "šiuolaikinė standartinė arabųAustrijos vokiečiųŠveicarijos aukštutinė v" + - "okiečiųAustralijos anglųKanados anglųDidžiosios Britanijos anglųJungtini" + - "ų Valstijų anglųLotynų Amerikos ispanųEuropos ispanųMeksikos ispanųKana" + - "dos prancūzųŠveicarijos prancūzųŽemutinės Saksonijos (Nyderlandai)flaman" + - "dųBrazilijos portugalųEuropos portugalųmoldavųserbų-kroatųKongo suahilių" + - "supaprastintoji kinųtradicinė kinų" - -var ltLangIdx = []uint16{ // 613 elements + "lbaligūrųlyviųlakotųlombardųmongųLuizianos kreolųloziųšiaurės lurilatgal" + + "iųluba lulualuisenoLundosluomizolujaklasikinė kinųlazmadurezųmafųmagahim" + + "aithiliMakasaromandingųmasajųmabųmokšamandarųmendemerųmorisijųVidurio Ai" + + "rijosmakua-maetometamikmakųminangkabaumančumanipuriųmohokmosivakarų mari" + + "mundangųkelios kalboskrykųmirandezųmarvarimentavaimjenųerzyjųmazenderani" + + "ųkinų kalbos pietų minų tarmėneapoliečiųnamaŽemutinės Vokietijosnevarin" + + "iasniujiečiųao nagakvasiųngiembūnųnogųsenoji norsųnovialenkošiaurės Soto" + + "nuerųklasikinė nevariniamveziniankolųniorųnzimaosageosmanų turkųpangasin" + + "anųvidurinė persų kalbapampangųpapiamentopalauliečiųpikardųNigerijos pid" + + "žinųPensilvanijos vokiečiųvokiečių kalbos žemaičių tarmėsenoji persųvok" + + "iečių kalbos Pfalco tarmėfinikiečiųitalų kalbos Pjemonto tarmėPontoPonap" + + "ėsprūsųsenovės provansalųkičiųČimboraso aukštumų kečujųRadžastanorapanu" + + "irarotonganųitalų kalbos Romanijos tarmėrifųromboromųrotumanųrusinųRovia" + + "nosaromaniųruasandaviųjakutųsamarėjų aramiųsambūrųsasaksantaliųsauraštrų" + + "ngambajųsangųsiciliečiųškotųsasaresų sardinųpietų kurdųsenecųsenųserisel" + + "kupkojraboro senisenoji airiųžemaičiųtachelhitųšanchadian arabųsidamųsil" + + "eziečių žemaičiųselajarųpietų samiųLiuleo samiųInario samiųSkolto samiųs" + + "oninkesogdiensranan tongosererųsahoSaterlendo fryzųsukumasusušumerųKomor" + + "ųklasikinė sirųsirųsileziečiųtulųtimnetesoTerenotetumtigretivTokelautsa" + + "kurųklingonųtlingitųtalyšųtamašekniasa tongųPapua pidžinųturoyoTarokotsa" + + "konųtsimšianmusulmonų tatųtumbukųTuvalutasavakųtuviųCentrinio Maroko tam" + + "azitųudmurtųugaritųumbundunežinoma kalbavaivenetųvepsųvakarų flamandųpag" + + "rindinė frankonųVotikveruvunjovalserųvalamovaraiVašovalrpirikinų kalbos " + + "vu tarmėkalmukųmegrelųsogųjaojapezųjangbenųjembųnjengatukinų kalbos Kant" + + "ono tarmėzapotekųBLISS simboliųzelandųzenagastandartinė Maroko tamazigtų" + + "Zuninėra kalbinio turiniozazašiuolaikinė standartinė arabųAustrijos voki" + + "ečiųŠveicarijos aukštutinė vokiečiųAustralijos anglųKanados anglųDidžios" + + "ios Britanijos anglųJungtinių Valstijų anglųLotynų Amerikos ispanųEuropo" + + "s ispanųMeksikos ispanųKanados prancūzųŠveicarijos prancūzųŽemutinės Sak" + + "sonijos (Nyderlandai)flamandųBrazilijos portugalųEuropos portugalųmoldav" + + "ųserbų-kroatųKongo suahiliųsupaprastintoji kinųtradicinė kinų" + +var ltLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0006, 0x000e, 0x0015, 0x001e, 0x0024, 0x002b, 0x0035, 0x003b, 0x0041, 0x0049, 0x0050, 0x0063, 0x006c, 0x0077, 0x007f, @@ -21048,120 +22421,118 @@ var ltLangIdx = []uint16{ // 613 elements 0x0733, 0x0739, 0x073f, 0x0745, 0x074a, 0x0751, 0x0757, 0x0769, 0x0772, 0x0779, 0x077d, 0x0787, 0x078c, 0x0794, 0x07a0, 0x07a9, 0x07af, 0x07b7, 0x07bb, 0x07c2, 0x07ca, 0x07d3, 0x07d7, 0x07db, - 0x07e3, 0x07e7, 0x07ee, 0x07f7, 0x07fe, 0x0806, 0x080c, 0x0814, - 0x081c, 0x0824, 0x082a, 0x083a, 0x0841, 0x084b, 0x0854, 0x085c, + 0x07e3, 0x07e7, 0x07ee, 0x07f7, 0x07fe, 0x07fe, 0x0806, 0x080c, + 0x0814, 0x081c, 0x0824, 0x082a, 0x083a, 0x0841, 0x084b, 0x0854, // Entry 100 - 13F - 0x086b, 0x0871, 0x0879, 0x0885, 0x08a5, 0x08ad, 0x08b4, 0x08ba, - 0x08c0, 0x08c8, 0x08cd, 0x08d5, 0x08db, 0x08e1, 0x08e6, 0x08f8, - 0x0908, 0x090e, 0x0920, 0x092c, 0x0932, 0x0939, 0x093d, 0x0941, - 0x095e, 0x0973, 0x0979, 0x0981, 0x0991, 0x09ac, 0x09b2, 0x09d6, - 0x09dc, 0x09ea, 0x0a0a, 0x0a0d, 0x0a21, 0x0a35, 0x0a46, 0x0a4e, - 0x0a60, 0x0a6c, 0x0a74, 0x0a76, 0x0a7f, 0x0a9b, 0x0a9f, 0x0aa4, - 0x0ab3, 0x0ab6, 0x0abe, 0x0ac4, 0x0ae2, 0x0aff, 0x0b0c, 0x0b11, - 0x0b1a, 0x0b1f, 0x0b24, 0x0b34, 0x0b4b, 0x0b50, 0x0b56, 0x0b5a, + 0x085c, 0x086b, 0x0871, 0x0879, 0x0885, 0x08a5, 0x08ad, 0x08b4, + 0x08ba, 0x08c0, 0x08c8, 0x08cd, 0x08d5, 0x08db, 0x08e1, 0x08e6, + 0x08f8, 0x0908, 0x090e, 0x0920, 0x092c, 0x0932, 0x0939, 0x093d, + 0x0941, 0x095e, 0x0973, 0x0979, 0x0981, 0x0991, 0x09ac, 0x09b2, + 0x09d6, 0x09dc, 0x09ea, 0x0a0a, 0x0a0d, 0x0a21, 0x0a35, 0x0a46, + 0x0a4e, 0x0a60, 0x0a6c, 0x0a74, 0x0a76, 0x0a7f, 0x0a9b, 0x0a9f, + 0x0aa4, 0x0ab3, 0x0ab6, 0x0abe, 0x0ac4, 0x0ae2, 0x0aff, 0x0b0c, + 0x0b11, 0x0b1a, 0x0b1f, 0x0b24, 0x0b34, 0x0b4b, 0x0b50, 0x0b56, // Entry 140 - 17F - 0x0b62, 0x0b67, 0x0b80, 0x0b8c, 0x0b99, 0x0ba5, 0x0bac, 0x0bb1, - 0x0bc5, 0x0bdf, 0x0be3, 0x0be7, 0x0bef, 0x0bf5, 0x0bfd, 0x0c03, - 0x0c1a, 0x0c20, 0x0c27, 0x0c2f, 0x0c3e, 0x0c4d, 0x0c66, 0x0c72, - 0x0c7a, 0x0c82, 0x0c84, 0x0c8a, 0x0c90, 0x0c9a, 0x0ca2, 0x0ca6, - 0x0cae, 0x0cc7, 0x0cce, 0x0cd2, 0x0cda, 0x0cde, 0x0ce7, 0x0cf2, - 0x0cfa, 0x0d03, 0x0d07, 0x0d11, 0x0d19, 0x0d27, 0x0d30, 0x0d39, - 0x0d40, 0x0d56, 0x0d5a, 0x0d63, 0x0d6a, 0x0d6f, 0x0d78, 0x0d7d, - 0x0d85, 0x0d8c, 0x0d93, 0x0d99, 0x0d9e, 0x0da3, 0x0da8, 0x0db0, + 0x0b5a, 0x0b62, 0x0b67, 0x0b80, 0x0b8c, 0x0b99, 0x0ba5, 0x0bac, + 0x0bb1, 0x0bc5, 0x0bdf, 0x0be3, 0x0be7, 0x0bef, 0x0bf5, 0x0bfd, + 0x0c03, 0x0c1a, 0x0c20, 0x0c27, 0x0c2f, 0x0c3e, 0x0c4d, 0x0c66, + 0x0c72, 0x0c7a, 0x0c82, 0x0c84, 0x0c8a, 0x0c90, 0x0c9a, 0x0ca2, + 0x0ca6, 0x0cae, 0x0cc7, 0x0cce, 0x0cd2, 0x0cda, 0x0cde, 0x0ce7, + 0x0cf2, 0x0cfa, 0x0d03, 0x0d07, 0x0d11, 0x0d19, 0x0d27, 0x0d30, + 0x0d39, 0x0d40, 0x0d56, 0x0d5a, 0x0d63, 0x0d6a, 0x0d6f, 0x0d78, + 0x0d7d, 0x0d85, 0x0d8c, 0x0d93, 0x0d99, 0x0d9e, 0x0da3, 0x0da8, // Entry 180 - 1BF - 0x0dc5, 0x0dcd, 0x0dd3, 0x0dda, 0x0de3, 0x0de9, 0x0def, 0x0dfd, - 0x0e06, 0x0e10, 0x0e17, 0x0e1d, 0x0e20, 0x0e24, 0x0e28, 0x0e38, - 0x0e3b, 0x0e44, 0x0e49, 0x0e4f, 0x0e57, 0x0e5f, 0x0e68, 0x0e6f, - 0x0e74, 0x0e7a, 0x0e82, 0x0e87, 0x0e8c, 0x0e95, 0x0ea4, 0x0eaf, - 0x0eb3, 0x0ebb, 0x0ec6, 0x0ecc, 0x0ed6, 0x0edb, 0x0edf, 0x0eeb, - 0x0ef4, 0x0f01, 0x0f07, 0x0f11, 0x0f18, 0x0f20, 0x0f26, 0x0f2d, - 0x0f3a, 0x0f5a, 0x0f67, 0x0f6b, 0x0f81, 0x0f87, 0x0f8b, 0x0f96, - 0x0f9d, 0x0fa4, 0x0faf, 0x0fb4, 0x0fc1, 0x0fc7, 0x0fcb, 0x0fd9, + 0x0db0, 0x0dc5, 0x0dcd, 0x0dd3, 0x0dda, 0x0de3, 0x0de9, 0x0dfa, + 0x0e00, 0x0e0e, 0x0e17, 0x0e21, 0x0e28, 0x0e2e, 0x0e31, 0x0e35, + 0x0e39, 0x0e49, 0x0e4c, 0x0e55, 0x0e5a, 0x0e60, 0x0e68, 0x0e70, + 0x0e79, 0x0e80, 0x0e85, 0x0e8b, 0x0e93, 0x0e98, 0x0e9d, 0x0ea6, + 0x0eb5, 0x0ec0, 0x0ec4, 0x0ecc, 0x0ed7, 0x0edd, 0x0ee7, 0x0eec, + 0x0ef0, 0x0efc, 0x0f05, 0x0f12, 0x0f18, 0x0f22, 0x0f29, 0x0f31, + 0x0f37, 0x0f3e, 0x0f4b, 0x0f6b, 0x0f78, 0x0f7c, 0x0f92, 0x0f98, + 0x0f9c, 0x0fa7, 0x0fae, 0x0fb5, 0x0fc0, 0x0fc5, 0x0fd2, 0x0fd8, // Entry 1C0 - 1FF - 0x0fdf, 0x0ff0, 0x0ff8, 0x1001, 0x1007, 0x100c, 0x1011, 0x101f, - 0x102b, 0x1041, 0x104a, 0x1054, 0x1061, 0x1069, 0x107c, 0x1094, - 0x10b8, 0x10c5, 0x10e4, 0x10f0, 0x110d, 0x1112, 0x111a, 0x1121, - 0x1135, 0x113c, 0x115a, 0x1165, 0x116c, 0x1178, 0x1196, 0x119b, - 0x11a0, 0x11a5, 0x11ae, 0x11b5, 0x11bd, 0x11c6, 0x11c9, 0x11d2, - 0x11d9, 0x11eb, 0x11f4, 0x11f9, 0x1202, 0x120d, 0x1216, 0x121c, - 0x1228, 0x122f, 0x1241, 0x124e, 0x1255, 0x125a, 0x125e, 0x1264, - 0x1272, 0x127f, 0x128a, 0x1295, 0x1299, 0x12a7, 0x12ae, 0x12c6, + 0x0fdc, 0x0fea, 0x0ff0, 0x1001, 0x1009, 0x1012, 0x1018, 0x101d, + 0x1022, 0x1030, 0x103c, 0x1052, 0x105b, 0x1065, 0x1072, 0x107a, + 0x108d, 0x10a5, 0x10c9, 0x10d6, 0x10f5, 0x1101, 0x111e, 0x1123, + 0x112b, 0x1132, 0x1146, 0x114d, 0x116b, 0x1176, 0x117d, 0x1189, + 0x11a7, 0x11ac, 0x11b1, 0x11b6, 0x11bf, 0x11c6, 0x11ce, 0x11d7, + 0x11da, 0x11e3, 0x11ea, 0x11fc, 0x1205, 0x120a, 0x1213, 0x121e, + 0x1227, 0x122d, 0x1239, 0x1240, 0x1252, 0x125f, 0x1266, 0x126b, + 0x126f, 0x1275, 0x1283, 0x1290, 0x129b, 0x12a6, 0x12aa, 0x12b8, // Entry 200 - 23F - 0x12cf, 0x12dc, 0x12e9, 0x12f6, 0x1303, 0x130a, 0x1311, 0x131d, - 0x1324, 0x1328, 0x1339, 0x133f, 0x1343, 0x134b, 0x1352, 0x1362, - 0x1367, 0x1373, 0x1378, 0x137d, 0x1381, 0x1387, 0x138c, 0x1391, - 0x1394, 0x139b, 0x13a3, 0x13ac, 0x13b5, 0x13bd, 0x13c5, 0x13d1, - 0x13e0, 0x13e6, 0x13ec, 0x13f4, 0x13fd, 0x140d, 0x1415, 0x141b, - 0x1424, 0x142a, 0x1444, 0x144c, 0x1454, 0x145b, 0x145f, 0x1462, - 0x1469, 0x146f, 0x1480, 0x1495, 0x149a, 0x149e, 0x14a3, 0x14ab, - 0x14b1, 0x14b6, 0x14bb, 0x14c3, 0x14d9, 0x14e1, 0x14e9, 0x14ee, + 0x12bf, 0x12d7, 0x12e0, 0x12ed, 0x12fa, 0x1307, 0x1314, 0x131b, + 0x1322, 0x132e, 0x1335, 0x1339, 0x134a, 0x1350, 0x1354, 0x135c, + 0x1363, 0x1373, 0x1378, 0x1384, 0x1389, 0x138e, 0x1392, 0x1398, + 0x139d, 0x13a2, 0x13a5, 0x13ac, 0x13b4, 0x13bd, 0x13c6, 0x13ce, + 0x13d6, 0x13e2, 0x13f1, 0x13f7, 0x13fd, 0x1405, 0x140e, 0x141e, + 0x1426, 0x142c, 0x1435, 0x143b, 0x1455, 0x145d, 0x1465, 0x146c, + 0x147b, 0x147e, 0x1485, 0x148b, 0x149c, 0x14b1, 0x14b6, 0x14ba, + 0x14bf, 0x14c7, 0x14cd, 0x14d2, 0x14d7, 0x14df, 0x14f5, 0x14fd, // Entry 240 - 27F - 0x14f1, 0x14f8, 0x1501, 0x1507, 0x150f, 0x152a, 0x1533, 0x1542, - 0x154a, 0x1550, 0x156e, 0x1572, 0x1588, 0x158c, 0x15ad, 0x15ad, - 0x15c1, 0x15e5, 0x15f7, 0x1605, 0x1622, 0x163d, 0x1655, 0x1664, - 0x1674, 0x1674, 0x1686, 0x169d, 0x16c1, 0x16ca, 0x16df, 0x16f1, - 0x16f9, 0x1707, 0x1716, 0x172b, 0x173b, -} // Size: 1250 bytes - -const lvLangStr string = "" + // Size: 4356 bytes + 0x1505, 0x150a, 0x150d, 0x1514, 0x151d, 0x1523, 0x152b, 0x1546, + 0x154f, 0x155e, 0x1566, 0x156c, 0x158a, 0x158e, 0x15a4, 0x15a8, + 0x15c9, 0x15c9, 0x15dd, 0x1601, 0x1613, 0x1621, 0x163e, 0x1659, + 0x1671, 0x1680, 0x1690, 0x1690, 0x16a2, 0x16b9, 0x16dd, 0x16e6, + 0x16fb, 0x170d, 0x1715, 0x1723, 0x1732, 0x1747, 0x1757, +} // Size: 1254 bytes + +const lvLangStr string = "" + // Size: 4185 bytes "afāruabhāzuavestaafrikanduakanuamharuaragoniešuarābuasamiešuavāruaimarua" + "zerbaidžāņubaškīrubaltkrievubulgārubišlamābambarubengāļutibetiešubretoņu" + "bosniešukatalāņučečenučamorrukorsikāņukrīčehubaznīcslāvučuvašuvelsiešudā" + "ņuvācumaldīviešudzongkeevugrieķuangļuesperantospāņuigauņubaskupersiešuf" + "ulusomufidžiešufērufrančurietumfrīzuīrugēlugalisiešugvaranugudžaratumeni" + "ešuhausuivritshindihirimotuhorvātuhaitiešuungāruarmēņuhereruinterlingvai" + - "ndonēziešuinterlingveigboSičuaņas jiinupiakuidoīslandiešuitāļuinuītujapā" + + "ndonēziešuinterlingveigboSičuaņas jiinupiakuidoislandiešuitāļuinuītujapā" + "ņujaviešugruzīnukongukikujukvaņamukazahugrenlandiešukhmerukannadukoreji" + "ešukanurukašmiriešukurdukomiešukorniešukirgīzulatīņuluksemburgiešugandul" + "imburgiešulingalalaosiešulietuviešulubakatangalatviešumalagasumāršaliešu" + - "maorumaķedoniešumalajalumongoļumaratumalajiešumaltiešubirmiešunauruiešuz" + - "iemeļndebelunepāliešundonguholandiešujaunnorvēģunorvēģu bukmolsdienvidnd" + - "ebelunavahučičevaoksitāņuodžibvuoromuorijuosetīnupandžabupālipoļupuštupo" + - "rtugāļukečvuretoromāņurundurumāņukrievukiņaruandasanskritssardīniešusind" + - "huziemeļsāmusangosingāļuslovākuslovēņusamoāņušonusomāļualbāņuserbusvatud" + - "ienvidsotuzunduzviedrusvahilitamilutelugutadžikutajutigrinjaturkmēņucvan" + - "utongiešuturkucongutatārutaitiešuuiguruukraiņuurduuzbekuvenduvjetnamiešu" + - "volapiksvaloņuvolofukhosujidišsjorubudžuanuķīniešuzuluačinuačoluadangmua" + - "diguafrihiliaghemuainuakadiešualeutudienvidaltajiešusenangļuangikaaramie" + - "šuaraukāņuarapahuaravakuasuastūriešuavadhubeludžubaliešubasubamumugomal" + + "maorumaķedoniešumalajalumongoļumarathumalajiešumaltiešubirmiešunauruiešu" + + "ziemeļndebelunepāliešundonguholandiešujaunnorvēģunorvēģu bukmolsdienvidn" + + "debelunavahučičevaoksitāņuodžibvuoromuorijuosetīnupandžabupālipoļupuštup" + + "ortugāļukečvuretoromāņurundurumāņukrievukiņaruandasanskritssardīniešusin" + + "dhuziemeļsāmusangosingāļuslovākuslovēņusamoāņušonusomāļualbāņuserbusvatu" + + "dienvidsotuzunduzviedrusvahilitamilutelugutadžikutajutigrinjaturkmēņucva" + + "nutongiešuturkucongutatārutaitiešuuiguruukraiņuurduuzbekuvenduvjetnamieš" + + "uvolapiksvaloņuvolofukhosujidišsjorubudžuanuķīniešuzuluačinuačoluadangmu" + + "adiguafrihiliaghemuainuakadiešualeutudienvidaltajiešusenangļuangikaarami" + + "ešuaraukāņuarapahuaravakuasuastūriešuavadhubeludžubaliešubasubamumugomal" + "ubedžubembubenabafuturietumbeludžubhodžpūrubikolubinukomusiksikubradžieš" + "ubodonkosiburjatubugubulubilinumedumbukadukarībukajugaatsamusebuāņukigač" + "ibčudžagatajsčūkumariešučinuku žargonsčoktavučipevaianučirokušejenucentr" + "ālkurdukoptuKrimas tatārukreolu frančukašubudakotudargutaitudelavērusle" + "ivudogribudinkuzarmudogrulejassorbudualuvidusholandiešudiola-fonjīdiūlud" + "azukjembuefikuēģiptiešuekadžukuelamiešuvidusangļuevondufangufilipīniešuf" + - "onuvidusfrančusenfrančuziemeļfrīzuaustrumfrīzufriūlugagagauzugajogbajugē" + - "zukiribatiešuvidusaugšvācusenaugšvācugondu valodasgorontalugotugreboseng" + - "rieķuŠveices vācugusiikučinuhaiduhavajiešuhiligainonuhetuhmonguaugšsorbu" + - "hupuibanuibibioilokuingušuložbansjgomačamujūdpersiešujūdarābukarakalpaku" + - "kabilukačinukadžikambukāvikabardiešukaņembukatabumakondekaboverdiešukoru" + - "khasuhotaniešukoiračiinīkakokalendžīnukimbundukomiešu-permiešukonkanukos" + - "rājiešukpellukaračaju un balkārukarēļukuruhušambalubafijuĶelnes vācukumi" + - "kukutenajuladinolangilandulambulezgīnulakotumongulozuziemeļlurulubalulva" + - "luisenulunduluolušejuluhjumaduriešumafumagahiešumaithilimakasarumandingu" + - "masajumabumokšumandarumendumeruMaurīcijas kreoluvidusīrumakua-meettomgom" + - "ikmakuminangkabavumandžūrumanipūrumohaukumosumundanguvairākas valodaskrī" + - "kumirandiešumarvarumjenuerzjumazanderāņuneapoliešunamalejasvācunevarunja" + - "suniuāņukvasiongjembūnunogajusennorvēģunkoziemeļsotunueruklasiskā nevaru" + - "ņamvezuņankoluņorunzemuvažāžuturku osmaņupangasinanupehlevipampanganupa" + - "pjamentopalaviešupidžinssenpersufeniķiešuponapiešuprūšusenprovansiešukič" + - "eradžastāņurapanujurarotongiešurombočigānuaromūnuruandasandavujakutuSamā" + - "rijas aramiešusamburusasakusantalungambejusangusicīliešuskotudienvidkurd" + - "usenekusenuselkupukoiraboro sennisenīrušilhušanuČadas arābusidamudienvid" + - "sāmuLuleo sāmuInari sāmuskoltsāmusoninkusogdiešusranantogoserērusahosuku" + - "mususušumerukomoruklasiskā sīriešusīriešutemnutesoterenotetumutigrutivut" + - "okelaviešuklingoņutlinkitutuareguNjasas tongutokpisinstarokocimšiāņutumb" + - "ukutuvaliešutasavakutuviešuCentrālmarokas tamazītsudmurtuugaritiešuumbun" + - "dusaknevajuvotuvundžoVallisas vācuvalamuvarajuvašovarlpirīkalmikusogujao" + - "japiešujanbaņujembukantoniešusapotekublissimbolikazenagustandarta marokā" + - "ņu berberuzunjubez lingvistiska saturazazakimūsdienu standarta arābudie" + - "nvidazerbaidžāņuAustrijas vācuŠveices augšvācuAustrālijas angļuKanādas a" + - "ngļuLielbritānijas angļuASV angļuLatīņamerikas spāņuEiropas spāņuMeksika" + - "s spāņuKanādas frančuŠveices frančulejassakšuflāmuBrazīlijas portugāļuEi" + - "ropas portugāļumoldāvuserbu–horvātuKongo svahiliķīniešu vienkāršotāķīnie" + - "šu tradicionālā" - -var lvLangIdx = []uint16{ // 613 elements + "onukadžūnu frančuvidusfrančusenfrančuziemeļfrīzuaustrumfrīzufriūlugagaga" + + "uzugajogbajugēzukiribatiešuvidusaugšvācusenaugšvācugondu valodasgorontal" + + "ugotugrebosengrieķuŠveices vācugusiikučinuhaiduhavajiešuhiligainonuhetuh" + + "monguaugšsorbuhupuibanuibibioilokuingušuložbansjgomačamujūdpersiešujūdar" + + "ābukarakalpakukabilukačinukadžikambukāvikabardiešukaņembukatabumakondek" + + "aboverdiešukorukhasuhotaniešukoiračiinīkakokalendžīnukimbundukomiešu-per" + + "miešukonkanukosrājiešukpellukaračaju un balkārukarēļukuruhušambalubafiju" + + "Ķelnes vācukumikukutenajuladinolangilandulambulezgīnulakotumonguLuiziān" + + "as kreolulozuziemeļlurulubalulvaluisenulunduluolušejuluhjumaduriešumafum" + + "agahiešumaithilimakasarumandingumasajumabumokšumandarumendumeruMaurīcija" + + "s kreoluvidusīrumakuamgomikmakuminangkabavumandžūrumanipūrumohaukumosumu" + + "ndanguvairākas valodaskrīkumirandiešumarvarumjenuerzjumazanderāņuneapoli" + + "ešunamalejasvācunevarunjasuniuāņukvasiongjembūnunogajusennorvēģunkozieme" + + "ļsotunueruklasiskā nevaruņamvezuņankoluņorunzemuvažāžuturku osmaņupanga" + + "sinanupehlevipampanganupapjamentopalaviešupidžinssenpersufeniķiešuponapi" + + "ešuprūšusenprovansiešukičeradžastāņurapanujurarotongiešurombočigānuaromū" + + "nuruandasandavujakutuSamārijas aramiešusamburusasakusantalungambejusangu" + + "sicīliešuskotudienvidkurdusenekusenuselkupukoiraboro sennisenīrušilhušan" + + "uČadas arābusidamudienvidsāmuLuleo sāmuInari sāmuskoltsāmusoninkusogdieš" + + "usranantogoserērusahosukumususušumerukomoruklasiskā sīriešusīriešutemnut" + + "esoterenotetumutigrutivutokelaviešuklingoņutlinkitutuareguNjasas tonguto" + + "kpisinstarokocimšiāņutumbukutuvaliešutasavakutuviešuCentrālmarokas tamaz" + + "ītsudmurtuugaritiešuumbundunezināma valodavajuvotuvundžoVallisas vācuva" + + "lamuvarajuvašovarlpirīkalmikusogujaojapiešujanbaņujembukantoniešusapotek" + + "ublissimbolikazenagustandarta marokāņu berberuzunjubez lingvistiska satu" + + "razazakimūsdienu standarta arābudienvidazerbaidžāņuŠveices augšvāculejas" + + "sakšuflāmumoldāvuserbu–horvātuKongo svahiliķīniešu vienkāršotāķīniešu tr" + + "adicionālā" + +var lvLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0006, 0x000d, 0x0013, 0x001c, 0x0021, 0x0027, 0x0032, 0x0038, 0x0041, 0x0047, 0x004d, 0x005c, 0x0065, 0x006f, 0x0077, @@ -21172,12 +22543,12 @@ var lvLangIdx = []uint16{ // 613 elements 0x0174, 0x0178, 0x017d, 0x0187, 0x018e, 0x0198, 0x01a0, 0x01a5, 0x01ab, 0x01b0, 0x01b8, 0x01c0, 0x01c9, 0x01d0, 0x01d8, 0x01de, // Entry 40 - 7F - 0x01e9, 0x01f6, 0x0201, 0x0205, 0x0212, 0x021a, 0x021d, 0x0229, - 0x0230, 0x0237, 0x023f, 0x0247, 0x024f, 0x0254, 0x025a, 0x0262, - 0x0268, 0x0275, 0x027b, 0x0282, 0x028c, 0x0292, 0x029e, 0x02a3, - 0x02ab, 0x02b4, 0x02bc, 0x02c4, 0x02d3, 0x02d8, 0x02e4, 0x02eb, - 0x02f4, 0x02ff, 0x030a, 0x0313, 0x031b, 0x0328, 0x032d, 0x033a, - 0x0342, 0x034a, 0x0350, 0x035a, 0x0363, 0x036c, 0x0376, 0x0384, + 0x01e9, 0x01f6, 0x0201, 0x0205, 0x0212, 0x021a, 0x021d, 0x0228, + 0x022f, 0x0236, 0x023e, 0x0246, 0x024e, 0x0253, 0x0259, 0x0261, + 0x0267, 0x0274, 0x027a, 0x0281, 0x028b, 0x0291, 0x029d, 0x02a2, + 0x02aa, 0x02b3, 0x02bb, 0x02c3, 0x02d2, 0x02d7, 0x02e3, 0x02ea, + 0x02f3, 0x02fe, 0x0309, 0x0312, 0x031a, 0x0327, 0x032c, 0x0339, + 0x0341, 0x0349, 0x0350, 0x035a, 0x0363, 0x036c, 0x0376, 0x0384, 0x038f, 0x0395, 0x03a0, 0x03ad, 0x03be, 0x03cc, 0x03d2, 0x03da, 0x03e4, 0x03ec, 0x03f1, 0x03f6, 0x03fe, 0x0407, 0x040c, 0x0411, // Entry 80 - BF @@ -21196,62 +22567,62 @@ var lvLangIdx = []uint16{ // 613 elements 0x0643, 0x0649, 0x064e, 0x064e, 0x0652, 0x0658, 0x0658, 0x0666, 0x0671, 0x0677, 0x067b, 0x067b, 0x067f, 0x0686, 0x0686, 0x0686, 0x0691, 0x0691, 0x0695, 0x069a, 0x06a1, 0x06a5, 0x06a9, 0x06af, - 0x06b6, 0x06ba, 0x06c1, 0x06c7, 0x06cd, 0x06d6, 0x06da, 0x06e1, - 0x06eb, 0x06f1, 0x06f9, 0x0709, 0x0711, 0x071c, 0x0723, 0x072a, + 0x06b6, 0x06ba, 0x06c1, 0x06c7, 0x06cd, 0x06cd, 0x06d6, 0x06da, + 0x06e1, 0x06eb, 0x06f1, 0x06f9, 0x0709, 0x0711, 0x071c, 0x0723, // Entry 100 - 13F - 0x0737, 0x073c, 0x073c, 0x074a, 0x0758, 0x075f, 0x0765, 0x076a, - 0x076f, 0x0778, 0x077e, 0x0785, 0x078a, 0x078f, 0x0794, 0x079e, - 0x079e, 0x07a3, 0x07b3, 0x07bf, 0x07c5, 0x07c9, 0x07cf, 0x07d4, - 0x07d4, 0x07e0, 0x07e9, 0x07f2, 0x07fd, 0x07fd, 0x0803, 0x0803, - 0x0808, 0x0815, 0x0815, 0x0819, 0x0819, 0x0825, 0x082f, 0x082f, - 0x083c, 0x0849, 0x0850, 0x0852, 0x0859, 0x0859, 0x085d, 0x0862, - 0x0862, 0x0867, 0x0873, 0x0873, 0x0882, 0x088f, 0x088f, 0x089c, - 0x08a5, 0x08a9, 0x08ae, 0x08b8, 0x08c6, 0x08c6, 0x08c6, 0x08cb, + 0x072a, 0x0737, 0x073c, 0x073c, 0x074a, 0x0758, 0x075f, 0x0765, + 0x076a, 0x076f, 0x0778, 0x077e, 0x0785, 0x078a, 0x078f, 0x0794, + 0x079e, 0x079e, 0x07a3, 0x07b3, 0x07bf, 0x07c5, 0x07c9, 0x07cf, + 0x07d4, 0x07d4, 0x07e0, 0x07e9, 0x07f2, 0x07fd, 0x07fd, 0x0803, + 0x0803, 0x0808, 0x0815, 0x0815, 0x0819, 0x082a, 0x0836, 0x0840, + 0x0840, 0x084d, 0x085a, 0x0861, 0x0863, 0x086a, 0x086a, 0x086e, + 0x0873, 0x0873, 0x0878, 0x0884, 0x0884, 0x0893, 0x08a0, 0x08a0, + 0x08ad, 0x08b6, 0x08ba, 0x08bf, 0x08c9, 0x08d7, 0x08d7, 0x08d7, // Entry 140 - 17F - 0x08d2, 0x08d7, 0x08d7, 0x08e1, 0x08e1, 0x08ec, 0x08f0, 0x08f6, - 0x0900, 0x0900, 0x0904, 0x0909, 0x090f, 0x0914, 0x091b, 0x091b, - 0x091b, 0x0923, 0x0926, 0x092d, 0x093a, 0x0944, 0x0944, 0x094f, - 0x0955, 0x095c, 0x0962, 0x0967, 0x096c, 0x0977, 0x097f, 0x0985, - 0x098c, 0x0999, 0x0999, 0x099d, 0x099d, 0x09a2, 0x09ac, 0x09b8, - 0x09b8, 0x09b8, 0x09bc, 0x09c8, 0x09d0, 0x09e2, 0x09e9, 0x09f5, - 0x09fb, 0x0a10, 0x0a10, 0x0a10, 0x0a18, 0x0a1e, 0x0a26, 0x0a2c, - 0x0a39, 0x0a3f, 0x0a47, 0x0a4d, 0x0a52, 0x0a57, 0x0a5c, 0x0a64, + 0x08dc, 0x08e3, 0x08e8, 0x08e8, 0x08f2, 0x08f2, 0x08fd, 0x0901, + 0x0907, 0x0911, 0x0911, 0x0915, 0x091a, 0x0920, 0x0925, 0x092c, + 0x092c, 0x092c, 0x0934, 0x0937, 0x093e, 0x094b, 0x0955, 0x0955, + 0x0960, 0x0966, 0x096d, 0x0973, 0x0978, 0x097d, 0x0988, 0x0990, + 0x0996, 0x099d, 0x09aa, 0x09aa, 0x09ae, 0x09ae, 0x09b3, 0x09bd, + 0x09c9, 0x09c9, 0x09c9, 0x09cd, 0x09d9, 0x09e1, 0x09f3, 0x09fa, + 0x0a06, 0x0a0c, 0x0a21, 0x0a21, 0x0a21, 0x0a29, 0x0a2f, 0x0a37, + 0x0a3d, 0x0a4a, 0x0a50, 0x0a58, 0x0a5e, 0x0a63, 0x0a68, 0x0a6d, // Entry 180 - 1BF - 0x0a64, 0x0a64, 0x0a64, 0x0a6a, 0x0a6a, 0x0a6f, 0x0a73, 0x0a7e, - 0x0a7e, 0x0a87, 0x0a8e, 0x0a93, 0x0a96, 0x0a9d, 0x0aa2, 0x0aa2, - 0x0aa2, 0x0aac, 0x0ab0, 0x0aba, 0x0ac2, 0x0aca, 0x0ad2, 0x0ad8, - 0x0adc, 0x0ae2, 0x0ae9, 0x0aee, 0x0af2, 0x0b04, 0x0b0d, 0x0b19, - 0x0b1c, 0x0b23, 0x0b2f, 0x0b39, 0x0b42, 0x0b49, 0x0b4d, 0x0b4d, - 0x0b55, 0x0b66, 0x0b6c, 0x0b77, 0x0b7e, 0x0b7e, 0x0b83, 0x0b88, - 0x0b95, 0x0b95, 0x0ba0, 0x0ba4, 0x0bae, 0x0bb4, 0x0bb9, 0x0bc1, - 0x0bc1, 0x0bc7, 0x0bd1, 0x0bd7, 0x0be3, 0x0be3, 0x0be6, 0x0bf1, + 0x0a75, 0x0a75, 0x0a75, 0x0a75, 0x0a7b, 0x0a7b, 0x0a80, 0x0a91, + 0x0a95, 0x0aa0, 0x0aa0, 0x0aa9, 0x0ab0, 0x0ab5, 0x0ab8, 0x0abf, + 0x0ac4, 0x0ac4, 0x0ac4, 0x0ace, 0x0ad2, 0x0adc, 0x0ae4, 0x0aec, + 0x0af4, 0x0afa, 0x0afe, 0x0b04, 0x0b0b, 0x0b10, 0x0b14, 0x0b26, + 0x0b2f, 0x0b34, 0x0b37, 0x0b3e, 0x0b4a, 0x0b54, 0x0b5d, 0x0b64, + 0x0b68, 0x0b68, 0x0b70, 0x0b81, 0x0b87, 0x0b92, 0x0b99, 0x0b99, + 0x0b9e, 0x0ba3, 0x0bb0, 0x0bb0, 0x0bbb, 0x0bbf, 0x0bc9, 0x0bcf, + 0x0bd4, 0x0bdc, 0x0bdc, 0x0be2, 0x0bec, 0x0bf2, 0x0bfe, 0x0bfe, // Entry 1C0 - 1FF - 0x0bf6, 0x0c06, 0x0c0e, 0x0c16, 0x0c1b, 0x0c20, 0x0c29, 0x0c36, - 0x0c41, 0x0c48, 0x0c52, 0x0c5c, 0x0c66, 0x0c66, 0x0c6e, 0x0c6e, - 0x0c6e, 0x0c76, 0x0c76, 0x0c81, 0x0c81, 0x0c81, 0x0c8b, 0x0c92, - 0x0ca1, 0x0ca6, 0x0ca6, 0x0cb3, 0x0cbb, 0x0cc8, 0x0cc8, 0x0cc8, - 0x0ccd, 0x0cd5, 0x0cd5, 0x0cd5, 0x0cd5, 0x0cdd, 0x0ce3, 0x0cea, - 0x0cf0, 0x0d04, 0x0d0b, 0x0d11, 0x0d18, 0x0d18, 0x0d20, 0x0d25, - 0x0d30, 0x0d35, 0x0d35, 0x0d41, 0x0d47, 0x0d4b, 0x0d4b, 0x0d52, - 0x0d61, 0x0d68, 0x0d68, 0x0d6e, 0x0d73, 0x0d80, 0x0d86, 0x0d86, + 0x0c01, 0x0c0c, 0x0c11, 0x0c21, 0x0c29, 0x0c31, 0x0c36, 0x0c3b, + 0x0c44, 0x0c51, 0x0c5c, 0x0c63, 0x0c6d, 0x0c77, 0x0c81, 0x0c81, + 0x0c89, 0x0c89, 0x0c89, 0x0c91, 0x0c91, 0x0c9c, 0x0c9c, 0x0c9c, + 0x0ca6, 0x0cad, 0x0cbc, 0x0cc1, 0x0cc1, 0x0cce, 0x0cd6, 0x0ce3, + 0x0ce3, 0x0ce3, 0x0ce8, 0x0cf0, 0x0cf0, 0x0cf0, 0x0cf0, 0x0cf8, + 0x0cfe, 0x0d05, 0x0d0b, 0x0d1f, 0x0d26, 0x0d2c, 0x0d33, 0x0d33, + 0x0d3b, 0x0d40, 0x0d4b, 0x0d50, 0x0d50, 0x0d5c, 0x0d62, 0x0d66, + 0x0d66, 0x0d6d, 0x0d7c, 0x0d83, 0x0d83, 0x0d89, 0x0d8e, 0x0d9b, // Entry 200 - 23F - 0x0d86, 0x0d92, 0x0d9d, 0x0da8, 0x0db2, 0x0db9, 0x0dc2, 0x0dcc, - 0x0dd3, 0x0dd7, 0x0dd7, 0x0ddd, 0x0de1, 0x0de8, 0x0dee, 0x0e01, - 0x0e0a, 0x0e0a, 0x0e0a, 0x0e0f, 0x0e13, 0x0e19, 0x0e1f, 0x0e24, - 0x0e28, 0x0e34, 0x0e34, 0x0e3d, 0x0e45, 0x0e45, 0x0e4c, 0x0e58, - 0x0e61, 0x0e61, 0x0e67, 0x0e67, 0x0e72, 0x0e72, 0x0e79, 0x0e83, - 0x0e8b, 0x0e93, 0x0eac, 0x0eb3, 0x0ebe, 0x0ec5, 0x0eca, 0x0ece, - 0x0ece, 0x0ece, 0x0ece, 0x0ece, 0x0ed2, 0x0ed2, 0x0ed9, 0x0ee7, - 0x0eed, 0x0ef3, 0x0ef8, 0x0f01, 0x0f01, 0x0f08, 0x0f08, 0x0f0c, + 0x0da1, 0x0da1, 0x0da1, 0x0dad, 0x0db8, 0x0dc3, 0x0dcd, 0x0dd4, + 0x0ddd, 0x0de7, 0x0dee, 0x0df2, 0x0df2, 0x0df8, 0x0dfc, 0x0e03, + 0x0e09, 0x0e1c, 0x0e25, 0x0e25, 0x0e25, 0x0e2a, 0x0e2e, 0x0e34, + 0x0e3a, 0x0e3f, 0x0e43, 0x0e4f, 0x0e4f, 0x0e58, 0x0e60, 0x0e60, + 0x0e67, 0x0e73, 0x0e7c, 0x0e7c, 0x0e82, 0x0e82, 0x0e8d, 0x0e8d, + 0x0e94, 0x0e9e, 0x0ea6, 0x0eae, 0x0ec7, 0x0ece, 0x0ed9, 0x0ee0, + 0x0ef0, 0x0ef4, 0x0ef4, 0x0ef4, 0x0ef4, 0x0ef4, 0x0ef8, 0x0ef8, + 0x0eff, 0x0f0d, 0x0f13, 0x0f19, 0x0f1e, 0x0f27, 0x0f27, 0x0f2e, // Entry 240 - 27F - 0x0f0f, 0x0f17, 0x0f1f, 0x0f24, 0x0f24, 0x0f2f, 0x0f37, 0x0f44, - 0x0f44, 0x0f4a, 0x0f66, 0x0f6b, 0x0f82, 0x0f88, 0x0fa2, 0x0fb8, - 0x0fc7, 0x0fda, 0x0fed, 0x0ffc, 0x1012, 0x101c, 0x1033, 0x1042, - 0x1052, 0x1052, 0x1062, 0x1072, 0x107d, 0x1083, 0x109a, 0x10ad, - 0x10b5, 0x10c5, 0x10d2, 0x10eb, 0x1104, -} // Size: 1250 bytes - -const mkLangStr string = "" + // Size: 10280 bytes + 0x0f2e, 0x0f32, 0x0f35, 0x0f3d, 0x0f45, 0x0f4a, 0x0f4a, 0x0f55, + 0x0f5d, 0x0f6a, 0x0f6a, 0x0f70, 0x0f8c, 0x0f91, 0x0fa8, 0x0fae, + 0x0fc8, 0x0fde, 0x0fde, 0x0ff1, 0x0ff1, 0x0ff1, 0x0ff1, 0x0ff1, + 0x0ff1, 0x0ff1, 0x0ff1, 0x0ff1, 0x0ff1, 0x0ff1, 0x0ffc, 0x1002, + 0x1002, 0x1002, 0x100a, 0x101a, 0x1027, 0x1040, 0x1059, +} // Size: 1254 bytes + +const mkLangStr string = "" + // Size: 10580 bytes "афарскиапхаскиавестанскиафрикансаканскиамхарскиарагонскиарапскиасамскиав" + "арскиајмарскиазербејџанскибашкирскибелорускибугарскибисламабамбарабенга" + "лскитибетскибретонскибосанскикаталонскичеченскичаморскикорзиканскикриче" + @@ -21296,37 +22667,40 @@ const mkLangStr string = "" + // Size: 10280 bytes "сихотанскикојра чииниковарскизазакикакокаленџинкимбундукоми-пермјачкико" + "нканикозрејскикпелекарачаевско-балкарскикриокинарајскикарелскикурухшамб" + "алабафијаколоњскикумичкикутенајскиладинолангиландаламбалезгинскилингва " + - "франка новалигурскиливонскилакотскиломбардискимонголозисевернолурискила" + - "тгалскилуба-лулуалујсењскилундалуомизолујакнижевен кинескиласкимадурски" + - "мафамагахимаитилимакасарскимандингомасајскимабамокшанскимандарскимендем" + - "еруморисјенсредноирскимакува-митометамикмакминангкабауманџурскиманипурс" + - "кимохавскимосизападномарискимундангповеќе јазицикрикмирандскимарваримје" + - "неерзјанскимазендеранскијужноминскинеаполскинамадолногерманскиневарскин" + - "ијасниујескиао нагаквазионгиембунногајскистаронордискиновијалнкосеверно" + - "сотскинуеркласичен неварскињамвезињанколењоронзимаосашкиотомански турск" + - "ипангасинанскисредноперсискипампангапапијаментопалауанскипикардскинигер" + - "иски пиџинпенсилваниски германскименонитски долногерманскистароперсиски" + - "фалечкогерманскифеникискипиемонтскипонтскипонпејскипрускистаропровансал" + - "скикичекичванскираџастанскирапанујскираротонганскиромањолскирифскиромбо" + - "ромскиротуманскирусинскировијанскивлашкируасандавејакутскисамарјански а" + - "рамејскисамбурусасачкисанталисаураштрангембејсангусицилијанскишкотски г" + - "ерманскисасарски сардинскијужнокурдскисенекасенасериселкупскикојраборо " + - "сенистароирскисамогитскитачелхитшанчадски арапскисидамодолношлезискисел" + - "ајарскијужен самилуле самиинари самисколт самисонинкезогдијанскисрански" + - " тонгосерерсахозатерландски фризискисукумасусусумерскикоморијанскикласич" + - "ен сирискисирискишлезискитулутимнетесотеренотетумтигретивтокелауанскица" + - "хурскиклингонскитлингитталишкитамашекњаса тонгаток писинтуројотарокоцак" + - "онскицимшијанскитатскитумбукатувалуанскитазавактуванскицентралноатланск" + - "и тамазитскиудмуртскиугаритскиумбундукоренвајвенетскивепшкизападнофлама" + - "нскимајнскофранконскивотскивирувунџовалсерволамоварајскивашоварлпиривук" + - "алмичкимегрелскисогајаојапскијенгбенјембањенгатукантонскизапотечкиблисс" + - "имболизеландскизенагастандарден марокански тамазитскизунибез лингвистич" + - "ка содржиназазалитературен арапскиавстралиски англискиканадски англиски" + - "британски англискиамерикански англискишпански (во Европа)канадски франц" + - "ускишвајцарски францускифламанскипортугалски (во Европа)молдавскисрпско" + - "хрватскиконгоански свахилипоедноставен кинескитрадиционален кинески" - -var mkLangIdx = []uint16{ // 613 elements + "франка новалигурскиливонскилакотскиломбардискимонголуизијански креолски" + + "лозисевернолурискилатгалскилуба-лулуалујсењскилундалуомизолујакнижевен " + + "кинескиласкимадурскимафамагахимаитилимакасарскимандингомасајскимабамокш" + + "анскимандарскимендемеруморисјенсредноирскимакува-митометамикмакминангка" + + "бауманџурскиманипурскимохавскимосизападномарискимундангповеќе јазицикри" + + "кмирандскимарваримјенеерзјанскимазендеранскијужноминскинеаполскинамадол" + + "ногерманскиневарскинијасниујескиао нагаквазионгиембунногајскистаронорди" + + "скиновијалнкосеверносотскинуеркласичен неварскињамвезињанколењоронзимао" + + "сашкиотомански турскипангасинанскисредноперсискипампангапапијаментопала" + + "уанскипикардскинигериски пиџинпенсилваниски германскименонитски долноге" + + "рманскистароперсискифалечкогерманскифеникискипиемонтскипонтскипонпејски" + + "прускистаропровансалскикичекичванскираџастанскирапанујскираротонганскир" + + "омањолскирифскиромборомскиротуманскирусинскировијанскивлашкируасандавеј" + + "акутскисамарјански арамејскисамбурусасачкисанталисаураштрангембејсангус" + + "ицилијанскишкотски германскисасарски сардинскијужнокурдскисенекасенасер" + + "иселкупскикојраборо сенистароирскисамогитскитачелхитшанчадски арапскиси" + + "дамодолношлезискиселајарскијужен самилуле самиинари самисколт самисонин" + + "кезогдијанскисрански тонгосерерсахозатерландски фризискисукумасусусумер" + + "скикоморијанскикласичен сирискисирискишлезискитулутимнетесотеренотетумт" + + "игретивтокелауанскицахурскиклингонскитлингитталишкитамашекњаса тонгаток" + + " писинтуројотарокоцаконскицимшијанскитатскитумбукатувалуанскитазавактува" + + "нскицентралноатлански тамазитскиудмуртскиугаритскиумбундунепознат јазик" + + "вајвенетскивепшкизападнофламанскимајнскофранконскивотскивирувунџовалсер" + + "воламоварајскивашоварлпиривукалмичкимегрелскисогајаојапскијенгбенјембањ" + + "енгатукантонскизапотечкиблиссимболизеландскизенагастандарден марокански" + + " тамазитскизунибез лингвистичка содржиназазалитературен арапскиавстриски" + + " германскишвајцарски високо-германскиавстралиски англискиканадски англис" + + "кибритански англискиамерикански англискилатиноамерикански шпанскишпанск" + + "и (во Европа)мексикански шпанскиканадски францускишвајцарски францускид" + + "олносаксонскифламанскибразилски португалскипортугалски (во Европа)молда" + + "вскисрпскохрватскиконгоански свахилипоедноставен кинескитрадиционален к" + + "инески" + +var mkLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x000e, 0x001c, 0x0030, 0x0040, 0x004e, 0x005e, 0x0070, 0x007e, 0x008c, 0x009a, 0x00aa, 0x00c4, 0x00d6, 0x00e8, 0x00f8, @@ -21361,62 +22735,62 @@ var mkLangIdx = []uint16{ // 613 elements 0x0d68, 0x0d70, 0x0d7a, 0x0d8a, 0x0d92, 0x0d9c, 0x0da8, 0x0dc3, 0x0dd1, 0x0de1, 0x0de9, 0x0dfb, 0x0e01, 0x0e0f, 0x0e23, 0x0e39, 0x0e41, 0x0e53, 0x0e5b, 0x0e65, 0x0e77, 0x0e85, 0x0e8d, 0x0e9d, - 0x0eab, 0x0eb3, 0x0ec3, 0x0ecf, 0x0ed7, 0x0ee9, 0x0ef1, 0x0efb, - 0x0f0f, 0x0f19, 0x0f27, 0x0f42, 0x0f54, 0x0f6a, 0x0f7c, 0x0f8c, + 0x0eab, 0x0eb3, 0x0ec3, 0x0ecf, 0x0ed7, 0x0ed7, 0x0ee9, 0x0ef1, + 0x0efb, 0x0f0f, 0x0f19, 0x0f27, 0x0f42, 0x0f54, 0x0f6a, 0x0f7c, // Entry 100 - 13F - 0x0fac, 0x0fba, 0x0fca, 0x0fe4, 0x1014, 0x1024, 0x1030, 0x103c, - 0x1046, 0x1054, 0x1060, 0x1072, 0x107c, 0x1086, 0x1090, 0x10a8, - 0x10b8, 0x10c2, 0x10e0, 0x10f1, 0x10f9, 0x1105, 0x110d, 0x1115, - 0x112b, 0x1147, 0x1153, 0x1161, 0x117d, 0x119d, 0x11a9, 0x11c5, - 0x11cd, 0x11e1, 0x1208, 0x120e, 0x1231, 0x124f, 0x126b, 0x128f, - 0x12ad, 0x12cb, 0x12dd, 0x12e1, 0x12f1, 0x12f7, 0x12ff, 0x1309, - 0x132a, 0x1330, 0x1348, 0x1358, 0x1380, 0x13a6, 0x13c3, 0x13cd, - 0x13df, 0x13eb, 0x13f5, 0x1409, 0x1430, 0x143e, 0x144e, 0x1456, + 0x0f8c, 0x0fac, 0x0fba, 0x0fca, 0x0fe4, 0x1014, 0x1024, 0x1030, + 0x103c, 0x1046, 0x1054, 0x1060, 0x1072, 0x107c, 0x1086, 0x1090, + 0x10a8, 0x10b8, 0x10c2, 0x10e0, 0x10f1, 0x10f9, 0x1105, 0x110d, + 0x1115, 0x112b, 0x1147, 0x1153, 0x1161, 0x117d, 0x119d, 0x11a9, + 0x11c5, 0x11cd, 0x11e1, 0x1208, 0x120e, 0x1231, 0x124f, 0x126b, + 0x128f, 0x12ad, 0x12cb, 0x12dd, 0x12e1, 0x12f1, 0x12f7, 0x12ff, + 0x1309, 0x132a, 0x1330, 0x1348, 0x1358, 0x1380, 0x13a6, 0x13c3, + 0x13cd, 0x13df, 0x13eb, 0x13f5, 0x1409, 0x1430, 0x143e, 0x144e, // Entry 140 - 17F - 0x1468, 0x1472, 0x147a, 0x148a, 0x14a3, 0x14bd, 0x14cd, 0x14d7, - 0x14ef, 0x14f9, 0x1501, 0x1509, 0x1515, 0x1527, 0x1535, 0x1543, - 0x1564, 0x1570, 0x157c, 0x1588, 0x15a8, 0x15c6, 0x15d2, 0x15ea, - 0x15fa, 0x160a, 0x1612, 0x161c, 0x1624, 0x163a, 0x1648, 0x1650, - 0x165e, 0x1676, 0x1682, 0x168a, 0x169e, 0x16a6, 0x16b6, 0x16cb, - 0x16db, 0x16e7, 0x16ef, 0x16ff, 0x170f, 0x172a, 0x1738, 0x174a, - 0x1754, 0x177d, 0x1785, 0x1799, 0x17a9, 0x17b3, 0x17c1, 0x17cd, - 0x17dd, 0x17eb, 0x17ff, 0x180b, 0x1815, 0x181f, 0x1829, 0x183b, + 0x1456, 0x1468, 0x1472, 0x147a, 0x148a, 0x14a3, 0x14bd, 0x14cd, + 0x14d7, 0x14ef, 0x14f9, 0x1501, 0x1509, 0x1515, 0x1527, 0x1535, + 0x1543, 0x1564, 0x1570, 0x157c, 0x1588, 0x15a8, 0x15c6, 0x15d2, + 0x15ea, 0x15fa, 0x160a, 0x1612, 0x161c, 0x1624, 0x163a, 0x1648, + 0x1650, 0x165e, 0x1676, 0x1682, 0x168a, 0x169e, 0x16a6, 0x16b6, + 0x16cb, 0x16db, 0x16e7, 0x16ef, 0x16ff, 0x170f, 0x172a, 0x1738, + 0x174a, 0x1754, 0x177d, 0x1785, 0x1799, 0x17a9, 0x17b3, 0x17c1, + 0x17cd, 0x17dd, 0x17eb, 0x17ff, 0x180b, 0x1815, 0x181f, 0x1829, // Entry 180 - 1BF - 0x185d, 0x186d, 0x187d, 0x188d, 0x18a3, 0x18ad, 0x18b5, 0x18d1, - 0x18e3, 0x18f6, 0x1908, 0x1912, 0x1918, 0x1920, 0x1928, 0x1947, - 0x1951, 0x1961, 0x1969, 0x1975, 0x1983, 0x1997, 0x19a7, 0x19b7, - 0x19bf, 0x19d1, 0x19e3, 0x19ed, 0x19f5, 0x1a05, 0x1a1b, 0x1a30, - 0x1a38, 0x1a44, 0x1a5a, 0x1a6c, 0x1a80, 0x1a90, 0x1a98, 0x1ab4, - 0x1ac2, 0x1adb, 0x1ae3, 0x1af5, 0x1b03, 0x1b03, 0x1b0d, 0x1b1f, - 0x1b39, 0x1b4f, 0x1b61, 0x1b69, 0x1b85, 0x1b95, 0x1b9f, 0x1baf, - 0x1bbc, 0x1bc8, 0x1bd8, 0x1be8, 0x1c02, 0x1c10, 0x1c16, 0x1c30, + 0x183b, 0x185d, 0x186d, 0x187d, 0x188d, 0x18a3, 0x18ad, 0x18d4, + 0x18dc, 0x18f8, 0x190a, 0x191d, 0x192f, 0x1939, 0x193f, 0x1947, + 0x194f, 0x196e, 0x1978, 0x1988, 0x1990, 0x199c, 0x19aa, 0x19be, + 0x19ce, 0x19de, 0x19e6, 0x19f8, 0x1a0a, 0x1a14, 0x1a1c, 0x1a2c, + 0x1a42, 0x1a57, 0x1a5f, 0x1a6b, 0x1a81, 0x1a93, 0x1aa7, 0x1ab7, + 0x1abf, 0x1adb, 0x1ae9, 0x1b02, 0x1b0a, 0x1b1c, 0x1b2a, 0x1b2a, + 0x1b34, 0x1b46, 0x1b60, 0x1b76, 0x1b88, 0x1b90, 0x1bac, 0x1bbc, + 0x1bc6, 0x1bd6, 0x1be3, 0x1bef, 0x1bff, 0x1c0f, 0x1c29, 0x1c37, // Entry 1C0 - 1FF - 0x1c38, 0x1c59, 0x1c67, 0x1c75, 0x1c7d, 0x1c87, 0x1c93, 0x1cb2, - 0x1ccc, 0x1ce8, 0x1cf8, 0x1d0e, 0x1d22, 0x1d34, 0x1d51, 0x1d7e, - 0x1daf, 0x1dc9, 0x1de9, 0x1dfb, 0x1e0f, 0x1e1d, 0x1e2f, 0x1e3b, - 0x1e5d, 0x1e65, 0x1e77, 0x1e8d, 0x1ea1, 0x1ebb, 0x1ecf, 0x1edb, - 0x1ee5, 0x1ef1, 0x1f05, 0x1f15, 0x1f29, 0x1f35, 0x1f3b, 0x1f49, - 0x1f59, 0x1f82, 0x1f90, 0x1f9e, 0x1fac, 0x1fbe, 0x1fcc, 0x1fd6, - 0x1fee, 0x200f, 0x2032, 0x204a, 0x2056, 0x205e, 0x2066, 0x2078, - 0x2093, 0x20a7, 0x20bb, 0x20cb, 0x20d1, 0x20ec, 0x20f8, 0x2112, + 0x1c3d, 0x1c57, 0x1c5f, 0x1c80, 0x1c8e, 0x1c9c, 0x1ca4, 0x1cae, + 0x1cba, 0x1cd9, 0x1cf3, 0x1d0f, 0x1d1f, 0x1d35, 0x1d49, 0x1d5b, + 0x1d78, 0x1da5, 0x1dd6, 0x1df0, 0x1e10, 0x1e22, 0x1e36, 0x1e44, + 0x1e56, 0x1e62, 0x1e84, 0x1e8c, 0x1e9e, 0x1eb4, 0x1ec8, 0x1ee2, + 0x1ef6, 0x1f02, 0x1f0c, 0x1f18, 0x1f2c, 0x1f3c, 0x1f50, 0x1f5c, + 0x1f62, 0x1f70, 0x1f80, 0x1fa9, 0x1fb7, 0x1fc5, 0x1fd3, 0x1fe5, + 0x1ff3, 0x1ffd, 0x2015, 0x2036, 0x2059, 0x2071, 0x207d, 0x2085, + 0x208d, 0x209f, 0x20ba, 0x20ce, 0x20e2, 0x20f2, 0x20f8, 0x2113, // Entry 200 - 23F - 0x2126, 0x2139, 0x214a, 0x215d, 0x2170, 0x217e, 0x2194, 0x21ad, - 0x21b7, 0x21bf, 0x21e8, 0x21f4, 0x21fc, 0x220c, 0x2224, 0x2243, - 0x2251, 0x2261, 0x2269, 0x2273, 0x227b, 0x2287, 0x2291, 0x229b, - 0x22a1, 0x22b9, 0x22c9, 0x22dd, 0x22eb, 0x22f9, 0x2307, 0x231a, - 0x232b, 0x2337, 0x2343, 0x2353, 0x2369, 0x2375, 0x2383, 0x2399, - 0x23a7, 0x23b7, 0x23ee, 0x2400, 0x2412, 0x2420, 0x242a, 0x2430, - 0x2440, 0x244c, 0x246c, 0x248e, 0x249a, 0x24a2, 0x24ac, 0x24b8, - 0x24c4, 0x24d4, 0x24dc, 0x24ec, 0x24f0, 0x2500, 0x2512, 0x251a, + 0x211f, 0x2139, 0x214d, 0x2160, 0x2171, 0x2184, 0x2197, 0x21a5, + 0x21bb, 0x21d4, 0x21de, 0x21e6, 0x220f, 0x221b, 0x2223, 0x2233, + 0x224b, 0x226a, 0x2278, 0x2288, 0x2290, 0x229a, 0x22a2, 0x22ae, + 0x22b8, 0x22c2, 0x22c8, 0x22e0, 0x22f0, 0x2304, 0x2312, 0x2320, + 0x232e, 0x2341, 0x2352, 0x235e, 0x236a, 0x237a, 0x2390, 0x239c, + 0x23aa, 0x23c0, 0x23ce, 0x23de, 0x2415, 0x2427, 0x2439, 0x2447, + 0x2462, 0x2468, 0x2478, 0x2484, 0x24a4, 0x24c6, 0x24d2, 0x24da, + 0x24e4, 0x24f0, 0x24fc, 0x250c, 0x2514, 0x2524, 0x2528, 0x2538, // Entry 240 - 27F - 0x2520, 0x252c, 0x253a, 0x2544, 0x2552, 0x2564, 0x2576, 0x258c, - 0x259e, 0x25aa, 0x25e8, 0x25f0, 0x2620, 0x2628, 0x264d, 0x264d, - 0x264d, 0x264d, 0x2674, 0x2695, 0x26b8, 0x26df, 0x26df, 0x2701, - 0x2701, 0x2701, 0x2724, 0x274b, 0x274b, 0x275d, 0x275d, 0x2787, - 0x2799, 0x27b5, 0x27d8, 0x27ff, 0x2828, -} // Size: 1250 bytes - -const mlLangStr string = "" + // Size: 12319 bytes + 0x254a, 0x2552, 0x2558, 0x2564, 0x2572, 0x257c, 0x258a, 0x259c, + 0x25ae, 0x25c4, 0x25d6, 0x25e2, 0x2620, 0x2628, 0x2658, 0x2660, + 0x2685, 0x2685, 0x26aa, 0x26de, 0x2705, 0x2726, 0x2749, 0x2770, + 0x27a1, 0x27c3, 0x27e8, 0x27e8, 0x280b, 0x2832, 0x284e, 0x2860, + 0x2889, 0x28b3, 0x28c5, 0x28e1, 0x2904, 0x292b, 0x2954, +} // Size: 1254 bytes + +const mlLangStr string = "" + // Size: 12409 bytes "അഫാർഅബ്\u200cഖാസിയൻഅവസ്റ്റാൻആഫ്രിക്കാൻസ്അകാൻ\u200cഅംഹാരിക്അരഗോണീസ്അറബിക്" + "ആസ്സാമീസ്അവാരിക്അയ്മാറഅസർബൈജാനിബഷ്ഖിർബെലാറുഷ്യൻബൾഗേറിയൻബിസ്\u200cലാമബം" + "ബാറബംഗാളിടിബറ്റൻബ്രെട്ടൺബോസ്നിയൻകറ്റാലാൻചെചൻചമോറോകോർസിക്കൻക്രീചെക്ക്ചർ" + @@ -21424,15 +22798,15 @@ const mlLangStr string = "" + // Size: 12319 bytes "\u200cപരാന്റോസ്\u200cപാനിഷ്എസ്റ്റോണിയൻബാസ്\u200cക്പേർഷ്യൻഫുലഫിന്നിഷ്ഫിജി" + "യൻഫാറോസ്ഫ്രഞ്ച്പശ്ചിമ ഫ്രിഷിയൻഐറിഷ്സ്കോട്ടിഷ് ഗൈലിക്ഗലീഷ്യൻഗ്വരനീഗുജറാ" + "ത്തിമാൻസ്ഹൗസഹീബ്രുഹിന്ദിഹിരി മോതുക്രൊയേഷ്യൻഹെയ്\u200cതിയൻ ക്രിയോൾഹംഗേറ" + - "ിയൻഅർമേനിയൻഹെരേരൊഇന്റർലിംഗ്വഇൻഡോനേഷ്യൻഇന്റർലിംഗ്വേഇഗ്ബോഷുവാൻയിഇനുപിയാക" + - "്ഇഡോഐസ്\u200cലാൻഡിക്ഇറ്റാലിയൻഇനുക്റ്റിറ്റട്ട്ജാപ്പനീസ്ജാവാനീസ്ജോർജിയൻക" + - "ോംഗോകികൂയുക്വാന്യമകസാഖ്കലാല്ലിസട്ട്ഖമെർകന്നഡകൊറിയൻകനൂറികാശ്\u200cമീരിക" + - "ുർദ്ദിഷ്കോമികോർണിഷ്കിർഗിസ്ലാറ്റിൻലക്\u200cസംബർഗിഷ്ഗാണ്ടലിംബർഗിഷ്ലിംഗാല" + - "ലാവോലിത്വാനിയൻലുബ-കറ്റംഗലാറ്റ്വിയൻമലഗാസിമാർഷല്ലീസ്മവോറിമാസിഡോണിയൻമലയാള" + - "ംമംഗോളിയൻമറാത്തിമലെയ്മാൾട്ടീസ്ബർമീസ്നൗറുനോർത്ത് ഡെബിൾനേപ്പാളിഡോങ്കഡച്ച" + - "്നോർവീജിയൻ നൈനോർക്\u200cസ്നോർവീജിയൻ ബുക്\u200cമൽദക്ഷിണ നെഡിബിൾനവാജോന്യ" + - "ൻജഓക്\u200cസിറ്റൻഓജിബ്വാഒറോമോഒഡിയഒസ്സെറ്റിക്പഞ്ചാബിപാലിപോളിഷ്പഷ്\u200c" + - "തോപോർച്ചുഗീസ്ക്വെച്ചുവറൊമാഞ്ച്റുണ്ടിറൊമാനിയൻറഷ്യൻകിന്യാർവാണ്ടസംസ്" + + "ിയൻഅർമേനിയൻഹെരേരൊഇന്റർലിംഗ്വഇന്തോനേഷ്യൻഇന്റർലിംഗ്വേഇഗ്ബോഷുവാൻയിഇനുപിയാ" + + "ക്ഇഡോഐസ്\u200cലാൻഡിക്ഇറ്റാലിയൻഇനുക്റ്റിറ്റട്ട്ജാപ്പനീസ്ജാവാനീസ്ജോർജിയൻ" + + "കോംഗോകികൂയുക്വാന്യമകസാഖ്കലാല്ലിസട്ട്ഖമെർകന്നഡകൊറിയൻകനൂറികാശ്\u200cമീരി" + + "കുർദ്ദിഷ്കോമികോർണിഷ്കിർഗിസ്ലാറ്റിൻലക്\u200cസംബർഗിഷ്ഗാണ്ടലിംബർഗിഷ്ലിംഗാ" + + "ലലാവോലിത്വാനിയൻലുബ-കറ്റംഗലാറ്റ്വിയൻമലഗാസിമാർഷല്ലീസ്മവോറിമാസിഡോണിയൻമലയാ" + + "ളംമംഗോളിയൻമറാത്തിമലെയ്മാൾട്ടീസ്ബർമീസ്നൗറുനോർത്ത് ഡെബിൾനേപ്പാളിഡോങ്കഡച്" + + "ച്നോർവീജിയൻ നൈനോർക്\u200cസ്നോർവീജിയൻ ബുക്\u200cമൽദക്ഷിണ നെഡിബിൾനവാജോന്" + + "യൻജഓക്\u200cസിറ്റൻഓജിബ്വാഒറോമോഒഡിയഒസ്സെറ്റിക്പഞ്ചാബിപാലിപോളിഷ്പഷ്" + + "\u200cതോപോർച്ചുഗീസ്ക്വെച്ചുവറൊമാഞ്ച്റുണ്ടിറൊമാനിയൻറഷ്യൻകിന്യാർവാണ്ടസംസ്" + "\u200cകൃതംസർഡിനിയാൻസിന്ധിവടക്കൻ സമിസാംഗോസിംഹളസ്ലോവാക്സ്ലോവേനിയൻസമോവൻഷോണസ" + "ോമാലിഅൽബേനിയൻസെർബിയൻസ്വാറ്റിതെക്കൻ സോതോസുണ്ടാനീസ്സ്വീഡിഷ്സ്വാഹിലിതമിഴ്" + "തെലുങ്ക്താജിക്തായ്ടൈഗ്രിന്യതുർക്\u200cമെൻസ്വാനടോംഗൻടർക്കിഷ്സോംഗടാട്ടർത" + @@ -21442,45 +22816,46 @@ const mlLangStr string = "" + // Size: 12319 bytes "മായമാപുചിഅറാപഹോഅറാവക്ആസുഓസ്\u200cട്രിയൻഅവാധിബലൂചിബാലിനീസ്ബസബാമുൻഘോമാലബ" + "േജബേംബബെനാബാഫട്ട്പശ്ചിമ ബലൂചിഭോജ്\u200cപുരിബികോൽബിനികോംസിക്സികബ്രജ്ബോഡ" + "ോഅക്കൂസ്ബുറിയത്ത്ബുഗിനീസ്ബുളുബ്ലിൻമെഡുംബകാഡോകാരിബ്കയൂഗഅറ്റ്സാംസെബുവാനോ" + - "ചിഗചിബ്ചഷാഗതായ്ചൂകീസ്മാരിചിനൂഗ് ജാർഗൺചോക്റ്റാവ്ചിപേവ്യൻഷെരോക്കിഷായാൻസൊ" + - "റാനി കുർദിഷ്കോപ്റ്റിക്ക്രിമിയൻ ടർക്കിഷ്സെഷൽവ ക്രിയോൾ ഫ്രഞ്ച്കാഷുബിയാൻഡ" + - "കോട്ടഡർഗ്വാതൈതദെലവേർസ്ലേവ്ഡോഗ്രിബ്ദിൻകസാർമ്മഡോഗ്രിലോവർ സോർബിയൻദ്വാലമദ്" + - "ധ്യ ഡച്ച്യോല-ഫോന്യിദ്വൈലഡാസാഗഎംബുഎഫിക്പ്രാചീന ഈജിപ്ഷ്യൻഎകാജുക്എലാമൈറ്റ" + - "്മദ്ധ്യ ഇംഗ്ലീഷ്എവോൻഡോഫങ്ഫിലിപ്പിനോഫോൻമദ്ധ്യ ഫ്രഞ്ച്പഴയ ഫ്രഞ്ച്നോർത്തേ" + - "ൻ ഫ്രിഷ്യൻഈസ്റ്റേൺ ഫ്രിഷ്യൻഫ്രിയുലിയാൻഗാഗാഗൂസ്ഗാൻ ചൈനീസ്ഗയൊഗബ്യഗീസ്ഗിൽ" + - "ബർട്ടീസ്മദ്ധ്യ ഉച്ച ജർമൻഓൾഡ് ഹൈ ജർമൻഗോണ്ഡിഗൊറോൻറാലോഗോഥിക്ക്ഗ്രബൊപുരാതന" + - " ഗ്രീക്ക്സ്വിസ് ജർമ്മൻഗുസീഗ്വിച്ചിൻഹൈഡഹാക്ക ചൈനീസ്ഹവായിയൻഹിലിഗയ്നോൺഹിറ്റ" + - "ൈറ്റ്മോങ്അപ്പർ സോർബിയൻഷ്യാങ് ചൈനീസ്ഹൂപഇബാൻഇബീബിയോഇലോകോഇംഗ്വിഷ്ലോജ്ബാൻഗ" + - "ോമ്പമചേംജൂഡിയോ-പേർഷ്യൻജൂഡിയോ-അറബിക്കര-കാൽപ്പക്കബൈൽകാചിൻജ്ജുകംബകാവികബർഡ" + - "ിയാൻകനെംബുട്യാപ്മക്കോണ്ടെകബുവെർദിയാനുകോറോഘാസിഘോറ്റാനേസേകൊയ്റ ചീനികാകോക" + - "ലെഞ്ഞിൻകിംബുണ്ടുകോമി-പെർമ്യാക്ക്കൊങ്കണികൊസറേയൻകപെല്ലേകരചൈ-ബാൽകർകരീലിയൻ" + - "കുരുഖ്ഷംഭാളബാഫിയകൊളോണിയൻകുമൈക്കുതേനൈലാഡിനോലാംഗിലഹ്\u200cൻഡലംബലഹ്ഗിയാൻല" + - "ഗോത്തമോങ്കോലൊസിവടക്കൻ ലൂറിലൂബ-ലുലുവലൂയിസെനോലുൻഡലുവോമിസോലുയിയമദുരേസേമാഫ" + - "മഗാഹിമൈഥിലിമകാസർമണ്ഡിൻഗോമസായ്മാബമോക്ഷമണ്ഡാർമെൻഡെമേരുമൊറിസിൻമദ്ധ്യ ഐറിഷ" + - "്മാഖുവാ-മീത്തോമേത്താമിക്മാക്മിനാങ്കബൗമാൻ\u200cചുമണിപ്പൂരിമോഹാക്മൊസ്സിമ" + - "ുന്ദാംഗ്പലഭാഷകൾക്രീക്ക്മിരാൻറസേമർവാരിമയീൻഏഴ്സ്യമസന്ററാനിമിൻ നാൻ ചൈനീസ്" + - "നെപ്പോളിറ്റാൻനാമലോ ജർമൻനേവാരിനിയാസ്ന്യുവാൻക്വാസിയോഗീംബൂൺനോഗൈപഴയ നോഴ്" + - "\u200cസ്ഇൻകോനോർത്തേൻ സോതോനുവേർക്ലാസിക്കൽ നേവാരിന്യാംവേസിന്യാൻകോൾന്യോറോസി" + - "മഒസേജ്ഓട്ടോമൻ തുർക്കിഷ്പങ്കാസിനൻപാഹ്ലവിപാംപൻഗപാപിയാമെന്റൊപലാവുൻനൈജീരിയ" + - "ൻ പിഡ്\u200cഗിൻപഴയ പേർഷ്യൻഫീനിഷ്യൻപൊൻപിയൻപ്രഷ്യൻപഴയ പ്രൊവൻഷ്ൽക്വിച്ചെര" + - "ാജസ്ഥാനിരാപനൂയിരാരോടോങ്കൻറോംബോറൊമാനിആരോമാനിയൻറുവാസാൻഡവേസാഖസമരിയാക്കാരു" + - "ടെ അരമായസംബുരുസസാക്സന്താലിഗംബായ്സംഗുസിസിലിയൻസ്കോട്സ്തെക്കൻ കുർദ്ദിഷ്സെ" + - "നേകസേനസെൽകപ്കൊയ്റാബൊറോ സെന്നിപഴയ ഐറിഷ്താച്ചലിറ്റ്ഷാൻചാഡിയൻ അറബിസിഡാമോത" + - "െക്കൻ സാമിലൂലീ സമിഇനാരി സാമിസ്കോൾട്ട് സമിസോണിൻകെസോജിഡിയൻശ്രാനൻ ഡോങ്കോസ" + - "െറർസാഹോസുകുമസുസുസുമേരിയൻകൊമോറിയൻപുരാതന സുറിയാനിഭാഷസുറിയാനിടിംനേടെസോടെറ" + - "േനോടെറ്റുംടൈഗ്രിടിവ്ടൊക്കേലൗക്ലിംഗോൺലിംഗ്വിറ്റ്ടമഷേക്ന്യാസാ ഡോങ്കടോക് " + - "പിസിൻതരോക്കോസിംഷ്യൻടുംബുകടുവാലുടസവാക്ക്തുവിനിയൻമധ്യ അറ്റ്\u200cലസ് ടമാ" + - "സൈറ്റ്ഉഡ്മുർട്ട്ഉഗറിട്ടിക്ഉംബുന്ദുമൂലഭാഷവൈവോട്ടിക്വുൻജോവാൾസർവൊലൈറ്റവാര" + - "േയ്വാഷൊവൂൾപിരിവു ചൈനീസ്കൽമൈക്സോഗോയാവോയെപ്പീസ്യാംഗ്ബെൻയംബകാന്റണീസ്സാപ്പ" + - "ോടെക്ബ്ലിസ്സിംബൽസ്സെനഗസ്റ്റാൻഡേർഡ് മൊറോക്കൻ റ്റാമസിയറ്റ്സുനിഭാഷാപരമായ " + - "ഉള്ളടക്കമൊന്നുമില്ലസാസാആധുനിക സ്റ്റാൻഡേർഡ് അറബിക്ഓസ്\u200cട്രിയൻ ജർമൻസ" + - "്വിസ് ഹൈ ജർമൻഓസ്\u200cട്രേലിയൻ ഇംഗ്ലീഷ്കനേഡിയൻ ഇംഗ്ലീഷ്ബ്രിട്ടീഷ് ഇംഗ്" + - "ലീഷ്അമേരിക്കൻ ഇംഗ്ലീഷ്ലാറ്റിൻ അമേരിക്കൻ സ്\u200cപാനിഷ്യൂറോപ്യൻ സ്" + - "\u200cപാനിഷ്മെക്സിക്കൻ സ്പാനിഷ്കനേഡിയൻ ഫ്രഞ്ച്സ്വിസ് ഫ്രഞ്ച്ലോ സാക്സൺഫ്ല" + - "മിഷ്ബ്രസീലിയൻ പോർച്ചുഗീസ്യൂറോപ്യൻ പോർച്ചുഗീസ്മോൾഡാവിയൻസെർബോ-ക്രൊയേഷ്യൻ" + - "കോംഗോ സ്വാഹിലിലളിതമാക്കിയ ചൈനീസ്പരമ്പരാഗത ചൈനീസ്" - -var mlLangIdx = []uint16{ // 613 elements + "ചിഗചിബ്ചഷാഗതായ്ചൂകീസ്മാരിചിനൂഗ് ജാർഗൺചോക്റ്റാവ്ചിപേവ്യൻഷെരോക്കിഷായാൻസെ" + + "ൻട്രൽ കുർദിഷ്കോപ്റ്റിക്ക്രിമിയൻ ടർക്കിഷ്സെഷൽവ ക്രിയോൾ ഫ്രഞ്ച്കാഷുബിയാൻ" + + "ഡകോട്ടഡർഗ്വാതൈതദെലവേർസ്ലേവ്ഡോഗ്രിബ്ദിൻകസാർമ്മഡോഗ്രിലോവർ സോർബിയൻദ്വാലമദ" + + "്ധ്യ ഡച്ച്യോല-ഫോന്യിദ്വൈലഡാസാഗഎംബുഎഫിക്പ്രാചീന ഈജിപ്ഷ്യൻഎകാജുക്എലാമൈറ്" + + "റ്മദ്ധ്യ ഇംഗ്ലീഷ്എവോൻഡോഫങ്ഫിലിപ്പിനോഫോൻകേജൺ ഫ്രഞ്ച്മദ്ധ്യ ഫ്രഞ്ച്പഴയ ഫ" + + "്രഞ്ച്നോർത്തേൻ ഫ്രിഷ്യൻഈസ്റ്റേൺ ഫ്രിഷ്യൻഫ്രിയുലിയാൻഗാഗാഗൂസ്ഗാൻ ചൈനീസ്ഗ" + + "യൊഗബ്യഗീസ്ഗിൽബർട്ടീസ്മദ്ധ്യ ഉച്ച ജർമൻഓൾഡ് ഹൈ ജർമൻഗോണ്ഡിഗൊറോന്റാലോഗോഥിക" + + "്ക്ഗ്രബൊപുരാതന ഗ്രീക്ക്സ്വിസ് ജർമ്മൻഗുസീഗ്വിച്ചിൻഹൈഡഹാക്ക ചൈനീസ്ഹവായിയ" + + "ൻഹിലിഗയ്നോൺഹിറ്റൈറ്റ്മോങ്അപ്പർ സോർബിയൻഷ്യാങ് ചൈനീസ്ഹൂപഇബാൻഇബീബിയോഇലോകോ" + + "ഇംഗ്വിഷ്ലോജ്ബാൻഗോമ്പമചേംജൂഡിയോ-പേർഷ്യൻജൂഡിയോ-അറബിക്കര-കാൽപ്പക്കബൈൽകാചി" + + "ൻജ്ജുകംബകാവികബർഡിയാൻകനെംബുട്യാപ്മക്കോണ്ടെകബുവെർദിയാനുകോറോഘാസിഘോറ്റാനേസ" + + "േകൊയ്റ ചീനികാകോകലെഞ്ഞിൻകിംബുണ്ടുകോമി-പെർമ്യാക്ക്കൊങ്കണികൊസറേയൻകപെല്ലേക" + + "രചൈ-ബാൽകർകരീലിയൻകുരുഖ്ഷംഭാളബാഫിയകൊളോണിയൻകുമൈക്കുതേനൈലാഡിനോലാംഗിലഹ്" + + "\u200cൻഡലംബലഹ്ഗിയാൻലഗോത്തമോങ്കോലൂസിയാന ക്രിയോൾലൊസിവടക്കൻ ലൂറിലൂബ-ലുലുവലൂ" + + "യിസെനോലുൻഡലുവോമിസോലുയിയമദുരേസേമാഫമഗാഹിമൈഥിലിമകാസർമണ്ഡിൻഗോമസായ്മാബമോക്ഷ" + + "മണ്ഡാർമെൻഡെമേരുമൊറിസിൻമദ്ധ്യ ഐറിഷ്മാഖുവാ-മീത്തോമേത്താമിക്മാക്മിനാങ്കബൗ" + + "മാൻ\u200cചുമണിപ്പൂരിമോഹാക്മൊസ്സിമുന്ദാംഗ്പലഭാഷകൾക്രീക്ക്മിരാൻറസേമർവാരി" + + "മയീൻഏഴ്സ്യമസന്ററാനിമിൻ നാൻ ചൈനീസ്നെപ്പോളിറ്റാൻനാമലോ ജർമൻനേവാരിനിയാസ്ന്" + + "യുവാൻക്വാസിയോഗീംബൂൺനോഗൈപഴയ നോഴ്\u200cസ്ഇൻകോനോർത്തേൻ സോതോനുവേർക്ലാസിക്ക" + + "ൽ നേവാരിന്യാംവേസിന്യാൻകോൾന്യോറോസിമഒസേജ്ഓട്ടോമൻ തുർക്കിഷ്പങ്കാസിനൻപാഹ്ല" + + "വിപാംപൻഗപാപിയാമെന്റൊപലാവുൻനൈജീരിയൻ പിഡ്\u200cഗിൻപഴയ പേർഷ്യൻഫീനിഷ്യൻപൊൻ" + + "പിയൻപ്രഷ്യൻപഴയ പ്രൊവൻഷ്ൽക്വിച്ചെരാജസ്ഥാനിരാപനൂയിരാരോടോങ്കൻറോംബോറൊമാനിആ" + + "രോമാനിയൻറുവാസാൻഡവേസാഖസമരിയാക്കാരുടെ അരമായസംബുരുസസാക്സന്താലിഗംബായ്സംഗുസ" + + "ിസിലിയൻസ്കോട്സ്തെക്കൻ കുർദ്ദിഷ്സെനേകസേനസെൽകപ്കൊയ്റാബൊറോ സെന്നിപഴയ ഐറിഷ" + + "്താച്ചലിറ്റ്ഷാൻചാഡിയൻ അറബിസിഡാമോതെക്കൻ സമിലൂലീ സമിഇനാരി സമിസ്കോൾട്ട് സ" + + "മിസോണിൻകെസോജിഡിയൻശ്രാനൻ ഡോങ്കോസെറർസാഹോസുകുമസുസുസുമേരിയൻകൊമോറിയൻപുരാതന " + + "സുറിയാനിഭാഷസുറിയാനിടിംനേടെസോടെറേനോടെറ്റുംടൈഗ്രിടിവ്ടൊക്കേലൗക്ലിംഗോൺലിം" + + "ഗ്വിറ്റ്ടമഷേക്ന്യാസാ ഡോങ്കടോക് പിസിൻതരോക്കോസിംഷ്യൻടുംബുകടുവാലുടസവാക്ക്" + + "തുവിനിയൻമധ്യ അറ്റ്\u200cലസ് ടമാസൈറ്റ്ഉഡ്മുർട്ട്ഉഗറിട്ടിക്ഉംബുന്ദുഅജ്ഞാ" + + "ത ഭാഷവൈവോട്ടിക്വുൻജോവാൾസർവൊലൈറ്റവാരേയ്വാഷൊവൂൾപിരിവു ചൈനീസ്കൽമൈക്സോഗോയാ" + + "വോയെപ്പീസ്യാംഗ്ബെൻയംബകാന്റണീസ്സാപ്പോടെക്ബ്ലിസ്സിംബൽസ്സെനഗസ്റ്റാൻഡേർഡ് " + + "മൊറോക്കൻ റ്റാമസിയറ്റ്സുനിഭാഷാപരമായ ഉള്ളടക്കമൊന്നുമില്ലസാസാആധുനിക സ്റ്റ" + + "ാൻഡേർഡ് അറബിക്ഓസ്\u200cട്രിയൻ ജർമൻസ്വിസ് ഹൈ ജർമൻഓസ്\u200cട്രേലിയൻ ഇംഗ്" + + "ലീഷ്കനേഡിയൻ ഇംഗ്ലീഷ്ബ്രിട്ടീഷ് ഇംഗ്ലീഷ്അമേരിക്കൻ ഇംഗ്ലീഷ്ലാറ്റിൻ അമേരി" + + "ക്കൻ സ്\u200cപാനിഷ്യൂറോപ്യൻ സ്\u200cപാനിഷ്മെക്സിക്കൻ സ്പാനിഷ്കനേഡിയൻ ഫ" + + "്രഞ്ച്സ്വിസ് ഫ്രഞ്ച്ലോ സാക്സൺഫ്ലമിഷ്ബ്രസീലിയൻ പോർച്ചുഗീസ്യൂറോപ്യൻ പോർച" + + "്ചുഗീസ്മോൾഡാവിയൻസെർബോ-ക്രൊയേഷ്യൻകോംഗോ സ്വാഹിലിലളിതമാക്കിയ ചൈനീസ്പരമ്പര" + + "ാഗത ചൈനീസ്" + +var mlLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x000c, 0x002a, 0x0045, 0x0069, 0x0078, 0x0090, 0x00a8, 0x00ba, 0x00d5, 0x00ea, 0x00fc, 0x0117, 0x0129, 0x0147, 0x015f, @@ -21491,219 +22866,214 @@ var mlLangIdx = []uint16{ // 613 elements 0x0422, 0x0431, 0x0462, 0x0477, 0x0489, 0x04a4, 0x04b3, 0x04bc, 0x04ce, 0x04e0, 0x04f9, 0x0517, 0x0548, 0x0560, 0x0578, 0x058a, // Entry 40 - 7F - 0x05ab, 0x05c9, 0x05ed, 0x05fc, 0x0611, 0x062c, 0x0635, 0x0656, - 0x0671, 0x06a1, 0x06bc, 0x06d4, 0x06e9, 0x06f8, 0x070a, 0x0722, - 0x0731, 0x0755, 0x0761, 0x0770, 0x0782, 0x0791, 0x07ac, 0x07c7, - 0x07d3, 0x07e8, 0x07fd, 0x0812, 0x0836, 0x0845, 0x0860, 0x0872, - 0x087e, 0x089c, 0x08b8, 0x08d6, 0x08e8, 0x0906, 0x0915, 0x0933, - 0x0945, 0x095d, 0x0972, 0x0981, 0x099c, 0x09ae, 0x09ba, 0x09df, - 0x09f7, 0x0a06, 0x0a15, 0x0a4f, 0x0a80, 0x0aa8, 0x0ab7, 0x0ac6, - 0x0ae4, 0x0af9, 0x0b08, 0x0b14, 0x0b35, 0x0b4a, 0x0b56, 0x0b68, + 0x05ab, 0x05cc, 0x05f0, 0x05ff, 0x0614, 0x062f, 0x0638, 0x0659, + 0x0674, 0x06a4, 0x06bf, 0x06d7, 0x06ec, 0x06fb, 0x070d, 0x0725, + 0x0734, 0x0758, 0x0764, 0x0773, 0x0785, 0x0794, 0x07af, 0x07ca, + 0x07d6, 0x07eb, 0x0800, 0x0815, 0x0839, 0x0848, 0x0863, 0x0875, + 0x0881, 0x089f, 0x08bb, 0x08d9, 0x08eb, 0x0909, 0x0918, 0x0936, + 0x0948, 0x0960, 0x0975, 0x0984, 0x099f, 0x09b1, 0x09bd, 0x09e2, + 0x09fa, 0x0a09, 0x0a18, 0x0a52, 0x0a83, 0x0aab, 0x0aba, 0x0ac9, + 0x0ae7, 0x0afc, 0x0b0b, 0x0b17, 0x0b38, 0x0b4d, 0x0b59, 0x0b6b, // Entry 80 - BF - 0x0b7a, 0x0b9b, 0x0bb6, 0x0bce, 0x0be0, 0x0bf8, 0x0c07, 0x0c2b, - 0x0c46, 0x0c61, 0x0c73, 0x0c8f, 0x0c9e, 0x0cad, 0x0cc5, 0x0ce3, - 0x0cf2, 0x0cfb, 0x0d0d, 0x0d25, 0x0d3a, 0x0d52, 0x0d71, 0x0d8f, - 0x0da7, 0x0dbf, 0x0dce, 0x0de6, 0x0df8, 0x0e04, 0x0e1f, 0x0e3a, - 0x0e49, 0x0e58, 0x0e70, 0x0e7c, 0x0e8e, 0x0ea6, 0x0eb8, 0x0ed3, - 0x0ee2, 0x0f00, 0x0f0f, 0x0f36, 0x0f4e, 0x0f60, 0x0f72, 0x0f7b, - 0x0f93, 0x0fa5, 0x0fba, 0x0fcc, 0x0fd8, 0x0fed, 0x0ffc, 0x1014, - 0x1023, 0x1023, 0x103e, 0x104a, 0x1053, 0x106e, 0x106e, 0x1083, + 0x0b7d, 0x0b9e, 0x0bb9, 0x0bd1, 0x0be3, 0x0bfb, 0x0c0a, 0x0c2e, + 0x0c49, 0x0c64, 0x0c76, 0x0c92, 0x0ca1, 0x0cb0, 0x0cc8, 0x0ce6, + 0x0cf5, 0x0cfe, 0x0d10, 0x0d28, 0x0d3d, 0x0d55, 0x0d74, 0x0d92, + 0x0daa, 0x0dc2, 0x0dd1, 0x0de9, 0x0dfb, 0x0e07, 0x0e22, 0x0e3d, + 0x0e4c, 0x0e5b, 0x0e73, 0x0e7f, 0x0e91, 0x0ea9, 0x0ebb, 0x0ed6, + 0x0ee5, 0x0f03, 0x0f12, 0x0f39, 0x0f51, 0x0f63, 0x0f75, 0x0f7e, + 0x0f96, 0x0fa8, 0x0fbd, 0x0fcf, 0x0fdb, 0x0ff0, 0x0fff, 0x1017, + 0x1026, 0x1026, 0x1041, 0x104d, 0x1056, 0x1071, 0x1071, 0x1086, // Entry C0 - FF - 0x1083, 0x10ae, 0x10d0, 0x10df, 0x10ee, 0x1100, 0x1100, 0x1112, - 0x1112, 0x1112, 0x1124, 0x1124, 0x1124, 0x112d, 0x112d, 0x114b, - 0x114b, 0x115a, 0x1169, 0x1181, 0x1181, 0x1187, 0x1196, 0x1196, - 0x11a5, 0x11ae, 0x11ba, 0x11ba, 0x11c6, 0x11db, 0x11db, 0x11fd, - 0x1218, 0x1227, 0x1233, 0x1233, 0x123c, 0x1251, 0x1251, 0x1251, - 0x1260, 0x1260, 0x126c, 0x1281, 0x129c, 0x12b4, 0x12c0, 0x12cf, - 0x12e1, 0x12ed, 0x12ff, 0x130b, 0x1323, 0x133b, 0x1344, 0x1353, - 0x1368, 0x137a, 0x1386, 0x13a8, 0x13c6, 0x13de, 0x13f6, 0x1405, + 0x1086, 0x10b1, 0x10d3, 0x10e2, 0x10f1, 0x1103, 0x1103, 0x1115, + 0x1115, 0x1115, 0x1127, 0x1127, 0x1127, 0x1130, 0x1130, 0x114e, + 0x114e, 0x115d, 0x116c, 0x1184, 0x1184, 0x118a, 0x1199, 0x1199, + 0x11a8, 0x11b1, 0x11bd, 0x11bd, 0x11c9, 0x11de, 0x11de, 0x1200, + 0x121b, 0x122a, 0x1236, 0x1236, 0x123f, 0x1254, 0x1254, 0x1254, + 0x1263, 0x1263, 0x126f, 0x1284, 0x129f, 0x12b7, 0x12c3, 0x12d2, + 0x12e4, 0x12f0, 0x1302, 0x130e, 0x1326, 0x1326, 0x133e, 0x1347, + 0x1356, 0x136b, 0x137d, 0x1389, 0x13ab, 0x13c9, 0x13e1, 0x13f9, // Entry 100 - 13F - 0x142d, 0x144b, 0x144b, 0x147c, 0x14b7, 0x14d2, 0x14e4, 0x14f6, - 0x14ff, 0x1511, 0x1523, 0x153b, 0x1547, 0x1559, 0x156b, 0x158d, - 0x158d, 0x159c, 0x15be, 0x15da, 0x15e9, 0x15f8, 0x1604, 0x1613, - 0x1613, 0x1644, 0x1659, 0x1674, 0x169f, 0x169f, 0x16b1, 0x16b1, - 0x16ba, 0x16d8, 0x16d8, 0x16e1, 0x16e1, 0x1709, 0x1728, 0x1728, - 0x1759, 0x178a, 0x17ab, 0x17b1, 0x17c3, 0x17df, 0x17e8, 0x17f4, - 0x17f4, 0x1800, 0x1821, 0x1821, 0x184d, 0x186d, 0x186d, 0x187f, - 0x189a, 0x18b2, 0x18c1, 0x18ec, 0x1911, 0x1911, 0x1911, 0x191d, + 0x1408, 0x1433, 0x1451, 0x1451, 0x1482, 0x14bd, 0x14d8, 0x14ea, + 0x14fc, 0x1505, 0x1517, 0x1529, 0x1541, 0x154d, 0x155f, 0x1571, + 0x1593, 0x1593, 0x15a2, 0x15c4, 0x15e0, 0x15ef, 0x15fe, 0x160a, + 0x1619, 0x1619, 0x164a, 0x165f, 0x167a, 0x16a5, 0x16a5, 0x16b7, + 0x16b7, 0x16c0, 0x16de, 0x16de, 0x16e7, 0x1709, 0x1731, 0x1750, + 0x1750, 0x1781, 0x17b2, 0x17d3, 0x17d9, 0x17eb, 0x1807, 0x1810, + 0x181c, 0x181c, 0x1828, 0x1849, 0x1849, 0x1875, 0x1895, 0x1895, + 0x18a7, 0x18c5, 0x18dd, 0x18ec, 0x1917, 0x193c, 0x193c, 0x193c, // Entry 140 - 17F - 0x1938, 0x1941, 0x1963, 0x1978, 0x1978, 0x1996, 0x19b4, 0x19c0, - 0x19e5, 0x1a0a, 0x1a13, 0x1a1f, 0x1a34, 0x1a43, 0x1a5b, 0x1a5b, - 0x1a5b, 0x1a70, 0x1a7f, 0x1a8b, 0x1ab3, 0x1ad8, 0x1ad8, 0x1af7, - 0x1b03, 0x1b12, 0x1b1e, 0x1b27, 0x1b33, 0x1b4b, 0x1b5d, 0x1b6f, - 0x1b8a, 0x1bae, 0x1bae, 0x1bba, 0x1bba, 0x1bc6, 0x1be4, 0x1c00, - 0x1c00, 0x1c00, 0x1c0c, 0x1c24, 0x1c3f, 0x1c6d, 0x1c82, 0x1c97, - 0x1cac, 0x1cc8, 0x1cc8, 0x1cc8, 0x1cdd, 0x1cef, 0x1cfe, 0x1d0d, - 0x1d25, 0x1d37, 0x1d49, 0x1d5b, 0x1d6a, 0x1d7c, 0x1d85, 0x1d9d, + 0x1948, 0x1963, 0x196c, 0x198e, 0x19a3, 0x19a3, 0x19c1, 0x19df, + 0x19eb, 0x1a10, 0x1a35, 0x1a3e, 0x1a4a, 0x1a5f, 0x1a6e, 0x1a86, + 0x1a86, 0x1a86, 0x1a9b, 0x1aaa, 0x1ab6, 0x1ade, 0x1b03, 0x1b03, + 0x1b22, 0x1b2e, 0x1b3d, 0x1b49, 0x1b52, 0x1b5e, 0x1b76, 0x1b88, + 0x1b9a, 0x1bb5, 0x1bd9, 0x1bd9, 0x1be5, 0x1be5, 0x1bf1, 0x1c0f, + 0x1c2b, 0x1c2b, 0x1c2b, 0x1c37, 0x1c4f, 0x1c6a, 0x1c98, 0x1cad, + 0x1cc2, 0x1cd7, 0x1cf3, 0x1cf3, 0x1cf3, 0x1d08, 0x1d1a, 0x1d29, + 0x1d38, 0x1d50, 0x1d62, 0x1d74, 0x1d86, 0x1d95, 0x1da7, 0x1db0, // Entry 180 - 1BF - 0x1d9d, 0x1d9d, 0x1d9d, 0x1daf, 0x1daf, 0x1dc1, 0x1dcd, 0x1dec, - 0x1dec, 0x1e05, 0x1e1d, 0x1e29, 0x1e35, 0x1e41, 0x1e50, 0x1e50, - 0x1e50, 0x1e65, 0x1e6e, 0x1e7d, 0x1e8f, 0x1e9e, 0x1eb6, 0x1ec5, - 0x1ece, 0x1edd, 0x1eef, 0x1efe, 0x1f0a, 0x1f1f, 0x1f41, 0x1f66, - 0x1f78, 0x1f90, 0x1fab, 0x1fbd, 0x1fd8, 0x1fea, 0x1ffc, 0x1ffc, - 0x2017, 0x202c, 0x2044, 0x205c, 0x206e, 0x206e, 0x207a, 0x208c, - 0x20a7, 0x20cd, 0x20f4, 0x20fd, 0x2110, 0x2122, 0x2134, 0x2149, - 0x2149, 0x2161, 0x2173, 0x217f, 0x219e, 0x219e, 0x21aa, 0x21cf, + 0x1dc8, 0x1dc8, 0x1dc8, 0x1dc8, 0x1dda, 0x1dda, 0x1dec, 0x1e17, + 0x1e23, 0x1e42, 0x1e42, 0x1e5b, 0x1e73, 0x1e7f, 0x1e8b, 0x1e97, + 0x1ea6, 0x1ea6, 0x1ea6, 0x1ebb, 0x1ec4, 0x1ed3, 0x1ee5, 0x1ef4, + 0x1f0c, 0x1f1b, 0x1f24, 0x1f33, 0x1f45, 0x1f54, 0x1f60, 0x1f75, + 0x1f97, 0x1fbc, 0x1fce, 0x1fe6, 0x2001, 0x2013, 0x202e, 0x2040, + 0x2052, 0x2052, 0x206d, 0x2082, 0x209a, 0x20b2, 0x20c4, 0x20c4, + 0x20d0, 0x20e2, 0x20fd, 0x2123, 0x214a, 0x2153, 0x2166, 0x2178, + 0x218a, 0x219f, 0x219f, 0x21b7, 0x21c9, 0x21d5, 0x21f4, 0x21f4, // Entry 1C0 - 1FF - 0x21de, 0x220f, 0x222a, 0x2242, 0x2254, 0x225d, 0x226c, 0x229d, - 0x22b8, 0x22cd, 0x22df, 0x2303, 0x2315, 0x2315, 0x2346, 0x2346, - 0x2346, 0x2365, 0x2365, 0x237d, 0x237d, 0x237d, 0x2392, 0x23a7, - 0x23cc, 0x23e4, 0x23e4, 0x23ff, 0x2414, 0x2432, 0x2432, 0x2432, - 0x2441, 0x2453, 0x2453, 0x2453, 0x2453, 0x246e, 0x247a, 0x248c, - 0x2495, 0x24cf, 0x24e1, 0x24f0, 0x2505, 0x2505, 0x2517, 0x2523, - 0x253b, 0x2553, 0x2553, 0x2581, 0x2590, 0x2599, 0x2599, 0x25ab, - 0x25dc, 0x25f5, 0x25f5, 0x2616, 0x261f, 0x263e, 0x2650, 0x2650, + 0x2200, 0x2225, 0x2234, 0x2265, 0x2280, 0x2298, 0x22aa, 0x22b3, + 0x22c2, 0x22f3, 0x230e, 0x2323, 0x2335, 0x2359, 0x236b, 0x236b, + 0x239c, 0x239c, 0x239c, 0x23bb, 0x23bb, 0x23d3, 0x23d3, 0x23d3, + 0x23e8, 0x23fd, 0x2422, 0x243a, 0x243a, 0x2455, 0x246a, 0x2488, + 0x2488, 0x2488, 0x2497, 0x24a9, 0x24a9, 0x24a9, 0x24a9, 0x24c4, + 0x24d0, 0x24e2, 0x24eb, 0x2525, 0x2537, 0x2546, 0x255b, 0x255b, + 0x256d, 0x2579, 0x2591, 0x25a9, 0x25a9, 0x25d7, 0x25e6, 0x25ef, + 0x25ef, 0x2601, 0x2632, 0x264b, 0x264b, 0x266c, 0x2675, 0x2694, // Entry 200 - 23F - 0x2650, 0x266f, 0x2685, 0x26a1, 0x26c6, 0x26db, 0x26f3, 0x2718, - 0x2724, 0x2730, 0x2730, 0x273f, 0x274b, 0x2763, 0x277b, 0x27af, - 0x27c7, 0x27c7, 0x27c7, 0x27d6, 0x27e2, 0x27f4, 0x2809, 0x281b, - 0x2827, 0x283f, 0x283f, 0x2857, 0x2878, 0x2878, 0x288a, 0x28ac, - 0x28c8, 0x28c8, 0x28dd, 0x28dd, 0x28f2, 0x28f2, 0x2904, 0x2916, - 0x292e, 0x2946, 0x298a, 0x29a8, 0x29c6, 0x29de, 0x29f0, 0x29f6, - 0x29f6, 0x29f6, 0x29f6, 0x29f6, 0x2a0e, 0x2a0e, 0x2a1d, 0x2a2c, - 0x2a41, 0x2a53, 0x2a5f, 0x2a74, 0x2a8d, 0x2a9f, 0x2a9f, 0x2aab, + 0x26a6, 0x26a6, 0x26a6, 0x26c2, 0x26d8, 0x26f1, 0x2716, 0x272b, + 0x2743, 0x2768, 0x2774, 0x2780, 0x2780, 0x278f, 0x279b, 0x27b3, + 0x27cb, 0x27ff, 0x2817, 0x2817, 0x2817, 0x2826, 0x2832, 0x2844, + 0x2859, 0x286b, 0x2877, 0x288f, 0x288f, 0x28a7, 0x28c8, 0x28c8, + 0x28da, 0x28fc, 0x2918, 0x2918, 0x292d, 0x292d, 0x2942, 0x2942, + 0x2954, 0x2966, 0x297e, 0x2996, 0x29da, 0x29f8, 0x2a16, 0x2a2e, + 0x2a4a, 0x2a50, 0x2a50, 0x2a50, 0x2a50, 0x2a50, 0x2a68, 0x2a68, + 0x2a77, 0x2a86, 0x2a9b, 0x2aad, 0x2ab9, 0x2ace, 0x2ae7, 0x2af9, // Entry 240 - 27F - 0x2ab7, 0x2acf, 0x2ae7, 0x2af0, 0x2af0, 0x2b0b, 0x2b29, 0x2b50, - 0x2b50, 0x2b5c, 0x2bbe, 0x2bca, 0x2c1f, 0x2c2b, 0x2c75, 0x2c75, - 0x2ca0, 0x2cc6, 0x2d03, 0x2d31, 0x2d68, 0x2d9c, 0x2de9, 0x2e1d, - 0x2e54, 0x2e54, 0x2e7f, 0x2ea7, 0x2ec0, 0x2ed5, 0x2f12, 0x2f4c, - 0x2f67, 0x2f95, 0x2fbd, 0x2ff1, 0x301f, -} // Size: 1250 bytes - -const mnLangStr string = "" + // Size: 5582 bytes - "афарабхазафрикаканамхарарагонарабассамавар хэлаймараазербайжанбашкирбела" + - "русьболгарбисламбамбарабенгалтөвдбретонбосникаталанчеченьчаморро хэлкор" + - "сикчехсүмийн славян хэлчувашуэльсданигермандивехи хэлжонхаэвэгреканглиэ" + - "сперантоиспаниэстонибаскперсфулафинляндфижифарерфранцбаруун фризынирлан" + - "дшотланд келтгаликгуаранигужаратиманксхаусаеврейхиндихорватгаитийн крео" + - "лунгарарменхерероинтерлингвоиндонезинэгдмэл хэлигбосычуань иидоисландит" + - "алиинуктитутяпонявагүржкикуюүкуаньямахасагкалалисуткамбожканнадасолонго" + - "сканури хэлкашмиркүрдкоми хэлкорныкыргызлатинлюксембурггандалимбург хэл" + - "лингалалаослитвалуба-катангалатвималагасимаршаллын хэлмаоримакедонмалай" + - "ламмонголмаратималаймалтибирмнаурухойд ндебелебалбандонгаголланднорвеги" + - "йн нинорскнорвегийн букмолөмнөд ндебеленавахонянжафранцын окситаноромоо" + - "рияоссетийнпанжабпольшпаштопортугалькечуароманшрундирумынороскинярванда" + - "санскритсардинысиндхихойд самисангосинхаласловаксловенисамоагийншонасом" + - "алиалбанисербсватисесотосунданшведсвахилитамилтэлүгүтажиктайтигринатурк" + - "менцванатонгатуркцонгататартаитынуйгарукраинурдуузбеквендавьетнамволапю" + - "куоллунволофхосаиддишёрубахятадзулуачин хэладангмэадигэагемайнуалютөмнө" + - "д алтайангикмапүчиарапагоасуастури хэлавадхибали хэлбасаа хэлбембабенаб" + - "ожпурибинисиксикабодобуги хэлблин хэлсебуано хэлчигачуук хэлмари хэлчок" + - "тау хэлчирокичэеннсорани күрдсеселва креолын франц хэлдакотадаргва хэлт" + - "айтадогриб хэлзармаловер-сорбидуалажола-фонидазага хэлэмбуэфикэкажукэво" + - "ндофилиппинфонфриулийнгагагузгийзгилбертийнгоронталошвейцари германгузы" + - "гвичинхавайхилигайныхмонгдээд сорбихупаибанибибиоилокоингушложбан хэлнг" + - "омбамачамэкабилекачин хэлжжу хэлкамбакабардин хэлтяпмакондекабүвердиану" + - "корокаси хэлкойра чиникако хэлкаленжинкимбунду хэлкоми-пермякконканикпе" + - "ллекарачай-балкаркарель хэлкурукшамбалабафиакёльш хэлкумукладинлангилез" + - "ги хэллакоталозихойд лурилуба-лулуалундалуомизолуяамадури хэлмагахи хэл" + - "маймакасармасаймокшамендэ хэлмеруморисенмакува-митометамикмак хэлминанг" + - "кабауманипуримохаукмосси хэлмунданголон хэлкрийк хэлмеранди хэлэрзямаза" + - "ндеранинеаполитан хэлнаманевариниас хэлниуи хэлквазионгиембүүнногаи хэл" + - "нкохойд сотонуернянколепангасинпампангапапьяментопалаугийннигерийн пидж" + - "ин хэлпруссийнкичерапануираротонгийнромбоароманырвасандавэсахасамбүрүса" + - "нталингамбайсангүсицилийншотландуудсенакёраборо сенитачелхитшаньөмнөд с" + - "амилюле самиинари самисколт самисонинкесранан тонгосахосукумакомори хэл" + - "сирийнтимнтэсотетумтигрклингон хэлток писинтарокотумбулатувалутасавакту" + - "ватөв атласын тамазайтудмуртумбундурутвайвунжоуолсэруоллайттаварайхалим" + - "аг хэлсогаянгбенембакантон хэлтамазитзунихэл зүйн агуулгагүйзазастандар" + - "т арабавстри германшвейцари дээр германавстрали англиканад англибритани" + - "йн англиамерикийн англилатин америкийн испаниевропын испанимексикийн ис" + - "паниканад францшвейцари францбага саксонфламандпортугаль (бразил)европы" + - "н португальмолдавхорватын сербконго свахилихялбаршуулсан хятадуламжлалт" + - " хятад" - -var mnLangIdx = []uint16{ // 613 elements + 0x2af9, 0x2b05, 0x2b11, 0x2b29, 0x2b41, 0x2b4a, 0x2b4a, 0x2b65, + 0x2b83, 0x2baa, 0x2baa, 0x2bb6, 0x2c18, 0x2c24, 0x2c79, 0x2c85, + 0x2ccf, 0x2ccf, 0x2cfa, 0x2d20, 0x2d5d, 0x2d8b, 0x2dc2, 0x2df6, + 0x2e43, 0x2e77, 0x2eae, 0x2eae, 0x2ed9, 0x2f01, 0x2f1a, 0x2f2f, + 0x2f6c, 0x2fa6, 0x2fc1, 0x2fef, 0x3017, 0x304b, 0x3079, +} // Size: 1254 bytes + +const mnLangStr string = "" + // Size: 5041 bytes + "афарабхазафрикаканамхарарагонарабассамавараймараазербайжанбашкирбеларусь" + + "болгарбисламбамбарабенгалтөвдбретонбосникаталанчеченьчаморрокорсикчехсү" + + "мийн славянчувашуэльсданигермандивехизонхаэвэгреканглиэсперантоиспаниэс" + + "тонибаскперсфулафинляндфижифарерфранцбаруун фризирландшотландын гелгале" + + "гогуаранигужаратиманксхаусаеврейхиндихорватгаитийн креолунгарарменхерер" + + "оинтерлингвоиндонезинэгдмэл хэлигбосычуань иидоисландиталиинуктитутяпон" + + "явагүржкикуюүкуаньямахасагкалалисуткхмерканнадасолонгосканурикашмиркурд" + + "комикорнкиргизлатинлюксембурггандалимбурглингалалаослитвалуба-катангала" + + "твималагасимаршаллмаоримакедонмалаяламмонголмаратималаймалтабирмнаурухо" + + "йд ндебелебалбандонганидерланднорвегийн нинорскнорвегийн букмолөмнөд нд" + + "ебеленавахонянжаокситаноромоорияоссетинпанжабипольшпаштопортугалкечуаро" + + "маншрундирумынороскиньяруандасанскритсардинсиндхихойд самисангосинхалас" + + "ловаксловенисамоашонасомалиалбанисербсватисесотосунданшведсвахилитамилт" + + "элүгүтажиктайтигриньятуркменцванатонгатуркцонгататартаитиуйгурукраинурд" + + "уузбеквендавьетнамволапюкуоллунволофхосаиддишёрубахятадзулуачинадангмэа" + + "дигэагемайнуалютөмнөд алтайангикмапүчиарапагоасуастуриавадхибалибасаабе" + + "мбабенабожпурибинисиксикабодобугиблинсебуаночигачуукмари хэлчоктаучирок" + + "ичэеннтөв курдсеселва креолын францдакотадаргватайтадогрибзармадоод сор" + + "бидуалажола-фонидазагаэмбуэфикэкажукэвондофилиппинфонфриулангагагузгийз" + + "гилбертгоронталошвейцари-германгузыгвичинхавайхилигайнонхмонгдээд сорби" + + "хупаибанибибиоилокоингушложбаннгомбамачамэкабилекачинжжукамбакабардинтя" + + "пмакондекабүвердианукорокасикойра чиникакокаленжинкимбундукоми-пермякко" + + "нканикпеллекарачай-балкаркарелькурукшамбалабафиакёльшкумукладинлангилез" + + "гилакоталозихойд лурилуба-лулуалундалуомизолуяамадури хэлмагахимаймакас" + + "армасаймокшамендемеруморисенмакува-митометамикмакминангкабауманипуримох" + + "аукмоссимунданголон хэлкрикмерандиэрзямазандеранинеаполитаннаманеварини" + + "ас хэлниуэквазионгиембүүнногаинкохойд сотонуернянколепангасинпампангапа" + + "пьяментопалаунигерийн пиджинпрусскичерапануираротонгромбоароманырвасанд" + + "авэсахасамбүрүсанталингамбайсангүсицилшотландсенакёраборо сенитачелхитш" + + "аньөмнөд самилюле самиинари самисколт самисонинкесранан тонгосахосукума" + + "коморисиритимнтэсотетумтигрклингонток писинтарокотумбулатувалутасавакту" + + "ватөв атласын тамазайтудмуртумбундутодорхойгүй хэлвайвунжоуолсэруоллайт" + + "таварайхалимагсогаянгбенембакантонтамазитзунихэл зүйн агуулгагүйзазаста" + + "ндарт арабавстри-германшвейцари дээр германавстрали-англиканад-англибри" + + "тани-англиамерик-англиканад-францшвейцари-францбага саксонфламандмолдав" + + "хорватын сербконгогийн свахилихялбаршуулсан хятадуламжлалт хятад" + +var mnLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0008, 0x0012, 0x0012, 0x001c, 0x0024, 0x002e, 0x003a, - 0x0042, 0x004c, 0x005b, 0x0067, 0x007b, 0x0087, 0x0097, 0x00a3, - 0x00af, 0x00bd, 0x00c9, 0x00d1, 0x00dd, 0x00e7, 0x00f5, 0x0101, - 0x0116, 0x0122, 0x0122, 0x0128, 0x0148, 0x0152, 0x015c, 0x0164, - 0x0170, 0x0183, 0x018d, 0x0193, 0x019b, 0x01a5, 0x01b7, 0x01c3, - 0x01cf, 0x01d7, 0x01df, 0x01e7, 0x01f5, 0x01fd, 0x0207, 0x0211, - 0x022a, 0x0236, 0x024d, 0x0257, 0x0265, 0x0275, 0x027f, 0x0289, - 0x0293, 0x029d, 0x029d, 0x02a9, 0x02c2, 0x02cc, 0x02d6, 0x02e2, + 0x0042, 0x004c, 0x0054, 0x0060, 0x0074, 0x0080, 0x0090, 0x009c, + 0x00a8, 0x00b6, 0x00c2, 0x00ca, 0x00d6, 0x00e0, 0x00ee, 0x00fa, + 0x0108, 0x0114, 0x0114, 0x011a, 0x0133, 0x013d, 0x0147, 0x014f, + 0x015b, 0x0167, 0x0171, 0x0177, 0x017f, 0x0189, 0x019b, 0x01a7, + 0x01b3, 0x01bb, 0x01c3, 0x01cb, 0x01d9, 0x01e1, 0x01eb, 0x01f5, + 0x020a, 0x0216, 0x022f, 0x023b, 0x0249, 0x0259, 0x0263, 0x026d, + 0x0277, 0x0281, 0x0281, 0x028d, 0x02a6, 0x02b0, 0x02ba, 0x02c6, // Entry 40 - 7F - 0x02f8, 0x0308, 0x031d, 0x0325, 0x0336, 0x0336, 0x033c, 0x0348, - 0x0352, 0x0364, 0x036c, 0x0372, 0x037a, 0x037a, 0x0386, 0x0396, - 0x03a0, 0x03b2, 0x03be, 0x03cc, 0x03dc, 0x03ef, 0x03fb, 0x0403, - 0x0412, 0x041c, 0x0428, 0x0432, 0x0446, 0x0450, 0x0465, 0x0473, - 0x047b, 0x0485, 0x049c, 0x04a6, 0x04b6, 0x04cf, 0x04d9, 0x04e7, - 0x04f7, 0x0503, 0x050f, 0x0519, 0x0523, 0x052b, 0x0535, 0x054c, - 0x0556, 0x0562, 0x0570, 0x0591, 0x05b0, 0x05c9, 0x05d5, 0x05df, - 0x05fc, 0x05fc, 0x0606, 0x060e, 0x061e, 0x062a, 0x062a, 0x0634, + 0x02dc, 0x02ec, 0x0301, 0x0309, 0x031a, 0x031a, 0x0320, 0x032c, + 0x0336, 0x0348, 0x0350, 0x0356, 0x035e, 0x035e, 0x036a, 0x037a, + 0x0384, 0x0396, 0x03a0, 0x03ae, 0x03be, 0x03ca, 0x03d6, 0x03de, + 0x03e6, 0x03ee, 0x03fa, 0x0404, 0x0418, 0x0422, 0x0430, 0x043e, + 0x0446, 0x0450, 0x0467, 0x0471, 0x0481, 0x048f, 0x0499, 0x04a7, + 0x04b7, 0x04c3, 0x04cf, 0x04d9, 0x04e3, 0x04eb, 0x04f5, 0x050c, + 0x0516, 0x0522, 0x0534, 0x0555, 0x0574, 0x058d, 0x0599, 0x05a3, + 0x05b1, 0x05b1, 0x05bb, 0x05c3, 0x05d1, 0x05df, 0x05df, 0x05e9, // Entry 80 - BF - 0x063e, 0x0650, 0x065a, 0x0666, 0x0670, 0x067a, 0x0682, 0x0696, - 0x06a6, 0x06b4, 0x06c0, 0x06d1, 0x06db, 0x06e9, 0x06f5, 0x0703, - 0x0715, 0x071d, 0x0729, 0x0735, 0x073d, 0x0747, 0x0753, 0x075f, - 0x0767, 0x0775, 0x077f, 0x078b, 0x0795, 0x079b, 0x07a9, 0x07b7, - 0x07c1, 0x07cb, 0x07d3, 0x07dd, 0x07e7, 0x07f3, 0x07fd, 0x0809, - 0x0811, 0x081b, 0x0825, 0x0833, 0x0841, 0x084d, 0x0857, 0x085f, - 0x0869, 0x0873, 0x0873, 0x087d, 0x0885, 0x0894, 0x0894, 0x08a2, - 0x08ac, 0x08ac, 0x08ac, 0x08b4, 0x08bc, 0x08bc, 0x08bc, 0x08c4, + 0x05f3, 0x0603, 0x060d, 0x0619, 0x0623, 0x062d, 0x0635, 0x064b, + 0x065b, 0x0667, 0x0673, 0x0684, 0x068e, 0x069c, 0x06a8, 0x06b6, + 0x06c0, 0x06c8, 0x06d4, 0x06e0, 0x06e8, 0x06f2, 0x06fe, 0x070a, + 0x0712, 0x0720, 0x072a, 0x0736, 0x0740, 0x0746, 0x0756, 0x0764, + 0x076e, 0x0778, 0x0780, 0x078a, 0x0794, 0x079e, 0x07a8, 0x07b4, + 0x07bc, 0x07c6, 0x07d0, 0x07de, 0x07ec, 0x07f8, 0x0802, 0x080a, + 0x0814, 0x081e, 0x081e, 0x0828, 0x0830, 0x0838, 0x0838, 0x0846, + 0x0850, 0x0850, 0x0850, 0x0858, 0x0860, 0x0860, 0x0860, 0x0868, // Entry C0 - FF - 0x08c4, 0x08d9, 0x08d9, 0x08e3, 0x08e3, 0x08ef, 0x08ef, 0x08fd, - 0x08fd, 0x08fd, 0x08fd, 0x08fd, 0x08fd, 0x0903, 0x0903, 0x0916, - 0x0916, 0x0922, 0x0922, 0x0931, 0x0931, 0x0942, 0x0942, 0x0942, - 0x0942, 0x0942, 0x094c, 0x094c, 0x0954, 0x0954, 0x0954, 0x0954, - 0x0962, 0x0962, 0x096a, 0x096a, 0x096a, 0x0978, 0x0978, 0x0978, - 0x0978, 0x0978, 0x0980, 0x0980, 0x0980, 0x098f, 0x098f, 0x099e, - 0x099e, 0x099e, 0x099e, 0x099e, 0x099e, 0x09b3, 0x09bb, 0x09bb, - 0x09bb, 0x09ca, 0x09d9, 0x09d9, 0x09ec, 0x09ec, 0x09f8, 0x0a02, + 0x0868, 0x087d, 0x087d, 0x0887, 0x0887, 0x0893, 0x0893, 0x08a1, + 0x08a1, 0x08a1, 0x08a1, 0x08a1, 0x08a1, 0x08a7, 0x08a7, 0x08b3, + 0x08b3, 0x08bf, 0x08bf, 0x08c7, 0x08c7, 0x08d1, 0x08d1, 0x08d1, + 0x08d1, 0x08d1, 0x08db, 0x08db, 0x08e3, 0x08e3, 0x08e3, 0x08e3, + 0x08f1, 0x08f1, 0x08f9, 0x08f9, 0x08f9, 0x0907, 0x0907, 0x0907, + 0x0907, 0x0907, 0x090f, 0x090f, 0x090f, 0x0917, 0x0917, 0x091f, + 0x091f, 0x091f, 0x091f, 0x091f, 0x091f, 0x091f, 0x092d, 0x0935, + 0x0935, 0x0935, 0x093d, 0x094c, 0x094c, 0x0958, 0x0958, 0x0964, // Entry 100 - 13F - 0x0a17, 0x0a17, 0x0a17, 0x0a17, 0x0a46, 0x0a46, 0x0a52, 0x0a65, - 0x0a6f, 0x0a6f, 0x0a6f, 0x0a82, 0x0a82, 0x0a8c, 0x0a8c, 0x0aa1, - 0x0aa1, 0x0aab, 0x0aab, 0x0abc, 0x0abc, 0x0acf, 0x0ad7, 0x0adf, - 0x0adf, 0x0adf, 0x0aeb, 0x0aeb, 0x0aeb, 0x0aeb, 0x0af7, 0x0af7, - 0x0af7, 0x0b07, 0x0b07, 0x0b0d, 0x0b0d, 0x0b0d, 0x0b0d, 0x0b0d, - 0x0b0d, 0x0b0d, 0x0b1d, 0x0b21, 0x0b2b, 0x0b2b, 0x0b2b, 0x0b2b, - 0x0b2b, 0x0b33, 0x0b47, 0x0b47, 0x0b47, 0x0b47, 0x0b47, 0x0b47, - 0x0b59, 0x0b59, 0x0b59, 0x0b59, 0x0b76, 0x0b76, 0x0b76, 0x0b7e, + 0x096e, 0x097d, 0x097d, 0x097d, 0x097d, 0x09a5, 0x09a5, 0x09b1, + 0x09bd, 0x09c7, 0x09c7, 0x09c7, 0x09d3, 0x09d3, 0x09dd, 0x09dd, + 0x09f0, 0x09f0, 0x09fa, 0x09fa, 0x0a0b, 0x0a0b, 0x0a17, 0x0a1f, + 0x0a27, 0x0a27, 0x0a27, 0x0a33, 0x0a33, 0x0a33, 0x0a33, 0x0a3f, + 0x0a3f, 0x0a3f, 0x0a4f, 0x0a4f, 0x0a55, 0x0a55, 0x0a55, 0x0a55, + 0x0a55, 0x0a55, 0x0a55, 0x0a63, 0x0a67, 0x0a71, 0x0a71, 0x0a71, + 0x0a71, 0x0a71, 0x0a79, 0x0a87, 0x0a87, 0x0a87, 0x0a87, 0x0a87, + 0x0a87, 0x0a99, 0x0a99, 0x0a99, 0x0a99, 0x0ab6, 0x0ab6, 0x0ab6, // Entry 140 - 17F - 0x0b8a, 0x0b8a, 0x0b8a, 0x0b94, 0x0b94, 0x0ba6, 0x0ba6, 0x0bb0, - 0x0bc3, 0x0bc3, 0x0bcb, 0x0bd3, 0x0bdf, 0x0be9, 0x0bf3, 0x0bf3, - 0x0bf3, 0x0c06, 0x0c12, 0x0c1e, 0x0c1e, 0x0c1e, 0x0c1e, 0x0c1e, - 0x0c2a, 0x0c3b, 0x0c48, 0x0c52, 0x0c52, 0x0c69, 0x0c69, 0x0c6f, - 0x0c7d, 0x0c95, 0x0c95, 0x0c9d, 0x0c9d, 0x0cac, 0x0cac, 0x0cbf, - 0x0cbf, 0x0cbf, 0x0cce, 0x0cde, 0x0cf5, 0x0d0a, 0x0d18, 0x0d18, - 0x0d24, 0x0d3f, 0x0d3f, 0x0d3f, 0x0d52, 0x0d5c, 0x0d6a, 0x0d74, - 0x0d85, 0x0d8f, 0x0d8f, 0x0d99, 0x0da3, 0x0da3, 0x0da3, 0x0db4, + 0x0abe, 0x0aca, 0x0aca, 0x0aca, 0x0ad4, 0x0ad4, 0x0ae8, 0x0ae8, + 0x0af2, 0x0b05, 0x0b05, 0x0b0d, 0x0b15, 0x0b21, 0x0b2b, 0x0b35, + 0x0b35, 0x0b35, 0x0b41, 0x0b4d, 0x0b59, 0x0b59, 0x0b59, 0x0b59, + 0x0b59, 0x0b65, 0x0b6f, 0x0b75, 0x0b7f, 0x0b7f, 0x0b8f, 0x0b8f, + 0x0b95, 0x0ba3, 0x0bbb, 0x0bbb, 0x0bc3, 0x0bc3, 0x0bcb, 0x0bcb, + 0x0bde, 0x0bde, 0x0bde, 0x0be6, 0x0bf6, 0x0c06, 0x0c1b, 0x0c29, + 0x0c29, 0x0c35, 0x0c50, 0x0c50, 0x0c50, 0x0c5c, 0x0c66, 0x0c74, + 0x0c7e, 0x0c88, 0x0c92, 0x0c92, 0x0c9c, 0x0ca6, 0x0ca6, 0x0ca6, // Entry 180 - 1BF - 0x0db4, 0x0db4, 0x0db4, 0x0dc0, 0x0dc0, 0x0dc0, 0x0dc8, 0x0dd9, - 0x0dd9, 0x0dec, 0x0dec, 0x0df6, 0x0dfc, 0x0e04, 0x0e0c, 0x0e0c, - 0x0e0c, 0x0e1f, 0x0e1f, 0x0e32, 0x0e38, 0x0e46, 0x0e46, 0x0e50, - 0x0e50, 0x0e5a, 0x0e5a, 0x0e6b, 0x0e73, 0x0e81, 0x0e81, 0x0e96, - 0x0e9e, 0x0eb1, 0x0ec7, 0x0ec7, 0x0ed7, 0x0ee3, 0x0ef4, 0x0ef4, - 0x0f02, 0x0f11, 0x0f22, 0x0f37, 0x0f37, 0x0f37, 0x0f37, 0x0f3f, - 0x0f55, 0x0f55, 0x0f70, 0x0f78, 0x0f78, 0x0f84, 0x0f93, 0x0fa2, - 0x0fa2, 0x0fae, 0x0fc0, 0x0fd1, 0x0fd1, 0x0fd1, 0x0fd7, 0x0fe8, + 0x0cb0, 0x0cb0, 0x0cb0, 0x0cb0, 0x0cbc, 0x0cbc, 0x0cbc, 0x0cbc, + 0x0cc4, 0x0cd5, 0x0cd5, 0x0ce8, 0x0ce8, 0x0cf2, 0x0cf8, 0x0d00, + 0x0d08, 0x0d08, 0x0d08, 0x0d1b, 0x0d1b, 0x0d27, 0x0d2d, 0x0d3b, + 0x0d3b, 0x0d45, 0x0d45, 0x0d4f, 0x0d4f, 0x0d59, 0x0d61, 0x0d6f, + 0x0d6f, 0x0d84, 0x0d8c, 0x0d98, 0x0dae, 0x0dae, 0x0dbe, 0x0dca, + 0x0dd4, 0x0dd4, 0x0de2, 0x0df1, 0x0df9, 0x0e07, 0x0e07, 0x0e07, + 0x0e07, 0x0e0f, 0x0e25, 0x0e25, 0x0e39, 0x0e41, 0x0e41, 0x0e4d, + 0x0e5c, 0x0e64, 0x0e64, 0x0e70, 0x0e82, 0x0e8c, 0x0e8c, 0x0e8c, // Entry 1C0 - 1FF - 0x0ff0, 0x0ff0, 0x0ff0, 0x0ffe, 0x0ffe, 0x0ffe, 0x0ffe, 0x0ffe, - 0x100e, 0x100e, 0x101e, 0x1032, 0x1044, 0x1044, 0x1068, 0x1068, - 0x1068, 0x1068, 0x1068, 0x1068, 0x1068, 0x1068, 0x1068, 0x1078, - 0x1078, 0x1080, 0x1080, 0x1080, 0x108e, 0x10a4, 0x10a4, 0x10a4, - 0x10ae, 0x10ae, 0x10ae, 0x10ae, 0x10ae, 0x10bc, 0x10c2, 0x10d0, - 0x10d8, 0x10d8, 0x10e6, 0x10e6, 0x10f4, 0x10f4, 0x1102, 0x110c, - 0x111c, 0x1130, 0x1130, 0x1130, 0x1130, 0x1138, 0x1138, 0x1138, - 0x1151, 0x1151, 0x1151, 0x1161, 0x1169, 0x1169, 0x1169, 0x1169, + 0x0e92, 0x0ea3, 0x0eab, 0x0eab, 0x0eab, 0x0eb9, 0x0eb9, 0x0eb9, + 0x0eb9, 0x0eb9, 0x0ec9, 0x0ec9, 0x0ed9, 0x0eed, 0x0ef7, 0x0ef7, + 0x0f14, 0x0f14, 0x0f14, 0x0f14, 0x0f14, 0x0f14, 0x0f14, 0x0f14, + 0x0f14, 0x0f1e, 0x0f1e, 0x0f26, 0x0f26, 0x0f26, 0x0f34, 0x0f44, + 0x0f44, 0x0f44, 0x0f4e, 0x0f4e, 0x0f4e, 0x0f4e, 0x0f4e, 0x0f5c, + 0x0f62, 0x0f70, 0x0f78, 0x0f78, 0x0f86, 0x0f86, 0x0f94, 0x0f94, + 0x0fa2, 0x0fac, 0x0fb6, 0x0fc4, 0x0fc4, 0x0fc4, 0x0fc4, 0x0fcc, + 0x0fcc, 0x0fcc, 0x0fe5, 0x0fe5, 0x0fe5, 0x0ff5, 0x0ffd, 0x0ffd, // Entry 200 - 23F - 0x1169, 0x117c, 0x118d, 0x11a0, 0x11b3, 0x11c1, 0x11c1, 0x11d8, - 0x11d8, 0x11e0, 0x11e0, 0x11ec, 0x11ec, 0x11ec, 0x11ff, 0x11ff, - 0x120b, 0x120b, 0x120b, 0x1213, 0x121b, 0x121b, 0x1225, 0x122d, - 0x122d, 0x122d, 0x122d, 0x1242, 0x1242, 0x1242, 0x1242, 0x1242, - 0x1253, 0x1253, 0x125f, 0x125f, 0x125f, 0x125f, 0x126d, 0x1279, - 0x1287, 0x128f, 0x12b5, 0x12c1, 0x12c1, 0x12cf, 0x12d5, 0x12db, - 0x12db, 0x12db, 0x12db, 0x12db, 0x12db, 0x12db, 0x12e5, 0x12f1, - 0x1303, 0x130d, 0x130d, 0x130d, 0x130d, 0x1322, 0x1322, 0x132a, + 0x0ffd, 0x0ffd, 0x0ffd, 0x1010, 0x1021, 0x1034, 0x1047, 0x1055, + 0x1055, 0x106c, 0x106c, 0x1074, 0x1074, 0x1080, 0x1080, 0x1080, + 0x108c, 0x108c, 0x1094, 0x1094, 0x1094, 0x109c, 0x10a4, 0x10a4, + 0x10ae, 0x10b6, 0x10b6, 0x10b6, 0x10b6, 0x10c4, 0x10c4, 0x10c4, + 0x10c4, 0x10c4, 0x10d5, 0x10d5, 0x10e1, 0x10e1, 0x10e1, 0x10e1, + 0x10ef, 0x10fb, 0x1109, 0x1111, 0x1137, 0x1143, 0x1143, 0x1151, + 0x116e, 0x1174, 0x1174, 0x1174, 0x1174, 0x1174, 0x1174, 0x1174, + 0x117e, 0x118a, 0x119c, 0x11a6, 0x11a6, 0x11a6, 0x11a6, 0x11b4, // Entry 240 - 27F - 0x132a, 0x132a, 0x1336, 0x133e, 0x133e, 0x1351, 0x1351, 0x1351, - 0x1351, 0x1351, 0x135f, 0x1367, 0x138b, 0x1393, 0x13ac, 0x13ac, - 0x13c5, 0x13eb, 0x1406, 0x141b, 0x1438, 0x1455, 0x147f, 0x149a, - 0x14b9, 0x14b9, 0x14ce, 0x14e9, 0x14fe, 0x150c, 0x152d, 0x154e, - 0x155a, 0x1573, 0x158c, 0x15b1, 0x15ce, -} // Size: 1250 bytes - -const mrLangStr string = "" + // Size: 11500 bytes + 0x11b4, 0x11bc, 0x11bc, 0x11bc, 0x11c8, 0x11d0, 0x11d0, 0x11dc, + 0x11dc, 0x11dc, 0x11dc, 0x11dc, 0x11ea, 0x11f2, 0x1216, 0x121e, + 0x1237, 0x1237, 0x1250, 0x1276, 0x1291, 0x12a6, 0x12bf, 0x12d6, + 0x12d6, 0x12d6, 0x12d6, 0x12d6, 0x12eb, 0x1306, 0x131b, 0x1329, + 0x1329, 0x1329, 0x1335, 0x134e, 0x136f, 0x1394, 0x13b1, +} // Size: 1254 bytes + +const mrLangStr string = "" + // Size: 11611 bytes "अफारअबखेजियनअवेस्तनअफ्रिकान्सअकानअम्हारिकअर्गोनीजअरबीआसामीअ\u200dॅव्हेरि" + "कऐमराअझरबैजानीबष्किरबेलारुशियनबल्गेरियनबिस्लामाबाम्बाराबंगालीतिबेटीब्र" + "ेतॉनबोस्नियनकातालानचेचेनकॅमोरोकॉर्सिकनक्रीझेकचर्च स्लाव्हिकचूवाशवेल्शड" + @@ -21711,57 +23081,58 @@ const mrLangStr string = "" + // Size: 11500 bytes "सीफुलाहफिन्निशफिजियनफरोइजफ्रेंचपश्चिमी फ्रिशियनआयरिशस्कॉट्स गेलिकगॅलिश" + "ियनगुआरनीगुजरातीमांक्सहौसाहिब्रूहिंदीहिरी मॉटूक्रोएशियनहैतीयनहंगेरियनआ" + "र्मेनियनहरेरोइंटरलिंग्वाइंडोनेशियनइन्टरलिंगईग्बोसिचुआन यीइनूपियाकइडौआई" + - "सलँडिकइटालियनइनुकिटुट्जपानीजावानीजजॉर्जियनकाँगोकिकुयूक्वान्यामाकझाककला" + - "ल्लिसतख्मेरकन्नडकोरियनकनुरीकाश्मीरीकुर्दिशकोमीकोर्निशकिरगीझलॅटिनलक्झें" + - "बर्गिशगांडालिंबूर्गिशलिंगालालाओलिथुआनियनल्यूबा-कटांगालात्व्हियनमलागसीम" + - "ार्शलीजमाओरीमॅसेडोनियनमल्याळममंगोलियनमराठीमलयमाल्टिज्बर्मीनउरूउत्तर दे" + - "बेलीनेपाळीडोंगाडचनॉर्वेजियन न्योर्स्कनॉर्वेजियन बोकमालदक्षिणात्य देबेल" + - "ीनावाजोन्यान्जाऑक्सितानओजिब्वाओरोमोउडियाओस्सेटिकपंजाबीपालीपोलिशपश्तोपो" + - "र्तुगीजक्वेचुआरोमान्शरुन्दीरोमानियनरशियनकिन्यार्वान्डासंस्कृतसर्दिनियन" + - "सिंधीउत्तरी सामीसांगोसिंहलास्लोव्हाकस्लोव्हेनियनसामोअनशोनासोमालीअल्बान" + - "ियनसर्बियनस्वातीसेसोथोसुंदानीजस्वीडिशस्वाहिलीतामिळतेलगूताजिकथाईतिग्रिन" + - "्यातुर्कमेनत्स्वानाटोंगनतुर्कीसोंगातातरताहितीयनउइगुरयुक्रेनियनउर्दूउझ्" + - "बेकव्हेंदाव्हिएतनामीओलापुकवालूनवोलोफखोसायिद्दिशयोरुबाझुआंगचीनीझुलूअचीन" + - "ीअकोलीअडांग्मेअडिघेअफ्रिहिलीअघेमऐनूअक्केडियनअलेउतदक्षिणात्य अल्ताईपुरा" + - "तन इंग्रजीअंगिकाअ\u200dॅरेमाइकमापुचीआरापाहोआरावाकअसुअस्तुरियनअवधीबलुची" + - "बालिनीजबसाबेजाबेम्बाबेनापश्चिमी बालोचीभोजपुरीबिकोलबिनीसिक्सिकाब्रजबोडो" + - "बुरियातबगिनीसब्लिनकॅड्डोकॅरिबअत्समसिबुआनोकिगाचिब्चाछागाताइचूकीसेमारीचि" + - "नूक जारगॉनचोक्तौशिपेव्यानचेरोकीशेयेन्नमध्य कुर्दिशकॉप्टिकक्राइमीन तुर्" + - "कीसेसेल्वा क्रिओल फ्रेंचकाशुबियनडाकोटादार्गवातायताडेलावेयरस्लाव्हडोग्र" + - "िबडिन्काझार्माडोगरीलोअर सोर्बियनदुआलामिडल डचजोला-फोंयीड्युलादाझागाएम्ब" + - "ूएफिकप्राचीन इजिप्शियनएकाजुकएलामाइटमिडल इंग्रजीइवोन्डोफँगफिलिपिनोफॉनमि" + - "डल फ्रेंचपुरातन फ्रेंचउत्तरी फ्रिशियनपौर्वात्य फ्रिशियनफ्रियुलियानगागा" + - "गाउझगॅन चिनीगायोबायागीझजिल्बरटीजमिडल हाय जर्मनपुरातन हाइ जर्मनगाँडीगोर" + - "ोन्तालोगॉथिकग्रेबोप्राचीन ग्रीकस्विस जर्मनगसीग्विच’इनहैडाहाक्का चिनीहव" + - "ाईयनहिलीगेनॉनहिट्टितेमाँगअप्पर सॉर्बियनशियांग चिनीहूपाइबानइबिबिओइलोकोइ" + - "ंगुशलोज्बानगोम्बामशामेजुदेओ-फारसीजुदेओ-अरबीकारा-कल्पककबाइलकाचिनज्जुकाम" + - "्बाकावीकबार्डियनत्यापमाकोन्देकाबवर्दियानुकोरोखासीखोतानीसकोयरा चीनीकाको" + - "कालेंजीनकिम्बन्दुकोमी-परम्याककोंकणीकोसरियनक्पेल्लेकराचय-बाल्करकरेलियनक" + - "ुरूखशांबालाबाफियाकोलोग्नियनकुमीककुतेनाईलादीनोलांगीलाह्न्डालाम्बालेझ्घी" + - "यनलाकोटामोंगोलोझिउत्तरी ल्युरीलुबा-लुलुआलुइसेनोलुन्डाल्युओमिझोल्युइयाम" + - "ादुरीसमगहीमैथिलीमकस्सरमन्डिन्गोमसाईमोक्षमंडारमेन्डेमेरूमोरिस्येनमिडल आ" + - "यरिशमाखुव्हा-मीट्टोमीटामिकमॅकमिनांग्काबाउमान्चुमणिपुरीमोहॉकमोस्सीमुंडा" + - "ंगएकविध भाषाक्रीकमिरांडिज्मारवाडीएर्झ्यामाझानदेरानीमिन नान चिनीनेपोलिट" + - "ाननामालो जर्मननेवारीनियासनियुआनक्वासिओजिएम्बूननोगाईपुरातन नॉर्सएन्कोउत" + - "्तरी सोथोनुएरअभिजात नेवारीन्यामवेझीन्यानकोलन्योरोन्झिमाओसेजओटोमान तुर्" + - "किशपंगासीनानपहलवीपाम्पान्गापापियामेन्टोपालाउआननायजिरिअन पिजिनपुरातन फा" + - "रसीफोनिशियनपोह्नपियनप्रुशियनपुरातन प्रोव्हेन्सलकीशेइराजस्थानीरापानुईरा" + - "रोटोंगनरोम्बोरोमानीअरोमानियनरव्हासँडवेसाखासामरिटान अरॅमिकसांबुरूसासाकस" + - "ंतालीगाम्बेसांगुसिसिलियनस्कॉट्सदक्षिणी कुर्दिशसेनासेल्कपकोयराबोरो सेन्" + - "नीपुरातन आयरिशताशेल्हिटशॅनसिदामोदक्षिणात्य सामील्युल सामीइनारी सामीस्क" + - "ोल्ट सामीसोनिन्केसोग्डिएनस्रानान टॉन्गोसेरेरसाहोसुकुमासुसुसुमेरियनकोमो" + - "रियनअभिजात सिरियाकसिरियाकटिम्नेतेसोतेरेनोतेतुमटाइग्रेतिवटोकेलाऊक्लिंगो" + - "नलिंगिततामाशेकन्यासा टोन्गाटोक पिसिनतारोकोसिम्शियनतुम्बुकाटुवालुतासाव्" + - "हाकटुवीनियनमध्य ऍटलास तॅमॅझायटउदमुर्तयुगॅरिटिकउम्बुन्डुरूटवाईवॉटिकवुंज" + - "ोवालसेरवोलायतावारेवाशोवार्लपिरीव्हू चिनीकाल्मिकसोगायाओयापीसयानगबेनयेमब" + - "ाकँटोनीजझेपोटेकब्लिसिम्बॉल्सझेनान्गाप्रमाण मोरोक्कन तॅमॅझायटझुनीभाषावै" + - "ज्ञानिक सामग्री नाहीझाझाआधुनिक प्रमाणित अरबीऑस्ट्रियन जर्मनस्विस हाय ज" + - "र्मनऑस्ट्रेलियन इंग्रजीकॅनडियन इंग्रजीब्रिटिश इंग्रजीअमेरिकन इंग्रजीलॅ" + - "टिन अमेरिकन स्पॅनिशयुरोपियन स्पॅनिशमेक्सिकन स्पॅनिशकॅनडियन फ्रेंचस्विस" + - " फ्रेंचलो सॅक्सनफ्लेमिशब्राझिलियन पोर्तुगीजयुरोपियन पोर्तुगीजमोल्डाव्हिय" + - "नसर्बो-क्रोएशियनकाँगो स्वाहिलीसरलीकृत चीनीपारंपारिक चीनी" - -var mrLangIdx = []uint16{ // 613 elements + "सलँडिकइटालियनइनुक्तीटुटजपानीजावानीजजॉर्जियनकाँगोकिकुयूक्वान्यामाकझाककल" + + "ाल्लिसतख्मेरकन्नडकोरियनकनुरीकाश्मीरीकुर्दिशकोमीकोर्निशकिरगीझलॅटिनलक्झे" + + "ंबर्गिशगांडालिंबूर्गिशलिंगालालाओलिथुआनियनल्यूबा-कटांगालात्व्हियनमलागसी" + + "मार्शलीजमाओरीमॅसेडोनियनमल्याळममंगोलियनमराठीमलयमाल्टिज्बर्मीनउरूउत्तर द" + + "ेबेलीनेपाळीडोंगाडचनॉर्वेजियन न्योर्स्कनॉर्वेजियन बोकमालदक्षिणात्य देबे" + + "लीनावाजोन्यान्जाऑक्सितानओजिब्वाओरोमोउडियाओस्सेटिकपंजाबीपालीपोलिशपश्तोप" + + "ोर्तुगीजक्वेचुआरोमान्शरुन्दीरोमानियनरशियनकिन्यार्वान्डासंस्कृतसर्दिनिय" + + "नसिंधीउत्तरी सामीसांगोसिंहलास्लोव्हाकस्लोव्हेनियनसामोअनशोनासोमालीअल्बा" + + "नियनसर्बियनस्वातीसेसोथोसुंदानीजस्वीडिशस्वाहिलीतामिळतेलगूताजिकथाईतिग्रि" + + "न्यातुर्कमेनत्स्वानाटोंगनतुर्कीसोंगातातरताहितीयनउइगुरयुक्रेनियनउर्दूउझ" + + "्बेकव्हेंदाव्हिएतनामीओलापुकवालूनवोलोफखोसायिद्दिशयोरुबाझुआंगचीनीझुलूअची" + + "नीअकोलीअडांग्मेअडिघेअफ्रिहिलीअघेमऐनूअक्केडियनअलेउतदक्षिणात्य अल्ताईपुर" + + "ातन इंग्रजीअंगिकाअ\u200dॅरेमाइकमापुचीआरापाहोआरावाकअसुअस्तुरियनअवधीबलुच" + + "ीबालिनीजबसाबेजाबेम्बाबेनापश्चिमी बालोचीभोजपुरीबिकोलबिनीसिक्सिकाब्रजबोड" + + "ोबुरियातबगिनीसब्लिनकॅड्डोकॅरिबअत्समसिबुआनोकिगाचिब्चाछागाताइचूकीसेमारीच" + + "िनूक जारगॉनचोक्तौशिपेव्यानचेरोकीशेयेन्नमध्य कुर्दिशकॉप्टिकक्राइमीन तुर" + + "्कीसेसेल्वा क्रिओल फ्रेंचकाशुबियनडाकोटादार्गवातायताडेलावेयरस्लाव्हडोग्" + + "रिबडिन्काझार्माडोगरीलोअर सोर्बियनदुआलामिडल डचजोला-फोंयीड्युलादाझागाएम्" + + "बूएफिकप्राचीन इजिप्शियनएकाजुकएलामाइटमिडल इंग्रजीइवोन्डोफँगफिलिपिनोफॉनक" + + "ेजॉन फ्रेंचमिडल फ्रेंचपुरातन फ्रेंचउत्तरी फ्रिशियनपौर्वात्य फ्रिशियनफ्" + + "रियुलियानगागागाउझगॅन चिनीगायोबायागीझजिल्बरटीजमिडल हाय जर्मनपुरातन हाइ " + + "जर्मनगाँडीगोरोन्तालोगॉथिकग्रेबोप्राचीन ग्रीकस्विस जर्मनगसीग्विच’इनहैडा" + + "हाक्का चिनीहवाईयनहिलीगेनॉनहिट्टितेमाँगअप्पर सॉर्बियनशियांग चिनीहूपाइबा" + + "नइबिबिओइलोकोइंगुशलोज्बानगोम्बामशामेजुदेओ-फारसीजुदेओ-अरबीकारा-कल्पककबाइ" + + "लकाचिनज्जुकाम्बाकावीकबार्डियनत्यापमाकोन्देकाबवर्दियानुकोरोखासीखोतानीसक" + + "ोयरा चीनीकाकोकालेंजीनकिम्बन्दुकोमी-परम्याककोंकणीकोसरियनक्पेल्लेकराचय-ब" + + "ाल्करकरेलियनकुरूखशांबालाबाफियाकोलोग्नियनकुमीककुतेनाईलादीनोलांगीलाह्न्ड" + + "ालाम्बालेझ्घीयनलाकोटामोंगोल्युसियाना क्रिओललोझिउत्तरी ल्युरीलुबा-लुलुआ" + + "लुइसेनोलुन्डाल्युओमिझोल्युइयामादुरीसमगहीमैथिलीमकस्सरमन्डिन्गोमसाईमोक्ष" + + "मंडारमेन्डेमेरूमोरिस्येनमिडल आयरिशमाखुव्हा-मीट्टोमीटामिकमॅकमिनांग्काबा" + + "उमान्चुमणिपुरीमोहॉकमोस्सीमुंडांगएकाधिक भाषाक्रीकमिरांडिज्मारवाडीएर्झ्य" + + "ामाझानदेरानीमिन नान चिनीनेपोलिटाननामालो जर्मननेवारीनियासनियुआनक्वासिओज" + + "िएम्बूननोगाईपुरातन नॉर्सएन्कोउत्तरी सोथोनुएरअभिजात नेवारीन्यामवेझीन्या" + + "नकोलन्योरोन्झिमाओसेजओटोमान तुर्किशपंगासीनानपहलवीपाम्पान्गापापियामेन्टो" + + "पालाउआननायजिरिअन पिजिनपुरातन फारसीफोनिशियनपोह्नपियनप्रुशियनपुरातन प्रो" + + "व्हेन्सलकीशेइराजस्थानीरापानुईरारोटोंगनरोम्बोरोमानीअरोमानियनरव्हासँडवेस" + + "ाखासामरिटान अरॅमिकसांबुरूसासाकसंतालीगाम्बेसांगुसिसिलियनस्कॉट्सदक्षिणी " + + "कुर्दिशसेनासेल्कपकोयराबोरो सेन्नीपुरातन आयरिशताशेल्हिटशॅनसिदामोदक्षिणा" + + "त्य सामील्युल सामीइनारी सामीस्कोल्ट सामीसोनिन्केसोग्डिएनस्रानान टॉन्गो" + + "सेरेरसाहोसुकुमासुसुसुमेरियनकोमोरियनअभिजात सिरियाकसिरियाकटिम्नेतेसोतेरे" + + "नोतेतुमटाइग्रेतिवटोकेलाऊक्लिंगोनलिंगिततामाशेकन्यासा टोन्गाटोक पिसिनतार" + + "ोकोसिम्शियनतुम्बुकाटुवालुतासाव्हाकटुवीनियनमध्य ऍटलास तॅमॅझायटउदमुर्तयु" + + "गॅरिटिकउम्बुन्डुअज्ञात भाषावाईवॉटिकवुंजोवालसेरवोलायतावारेवाशोवार्लपिरी" + + "व्हू चिनीकाल्मिकसोगायाओयापीसयांगबेनयेमबाकँटोनीजझेपोटेकब्लिसिम्बॉल्सझेन" + + "ान्गाप्रमाण मोरोक्कन तॅमॅझायटझुनीभाषावैज्ञानिक सामग्री नाहीझाझाआधुनिक " + + "प्रमाणित अरबीऑस्ट्रियन जर्मनस्विस हाय जर्मनऑस्ट्रेलियन इंग्रजीकॅनडियन " + + "इंग्रजीब्रिटिश इंग्रजीअमेरिकन इंग्रजीलॅटिन अमेरिकन स्पॅनिशयुरोपियन स्प" + + "ॅनिशमेक्सिकन स्पॅनिशकॅनडियन फ्रेंचस्विस फ्रेंचलो सॅक्सनफ्लेमिशब्राझिलि" + + "यन पोर्तुगीजयुरोपियन पोर्तुगीजमोल्डाव्हियनसर्बो-क्रोएशियनकाँगो स्वाहिल" + + "ीसरलीकृत चीनीपारंपारिक चीनी" + +var mrLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x000c, 0x0024, 0x0039, 0x0057, 0x0063, 0x007b, 0x0093, 0x009f, 0x00ae, 0x00cc, 0x00d8, 0x00f3, 0x0105, 0x0123, 0x013e, @@ -21773,225 +23144,225 @@ var mrLangIdx = []uint16{ // 613 elements 0x046b, 0x047a, 0x0493, 0x04ae, 0x04c0, 0x04d8, 0x04f3, 0x0502, // Entry 40 - 7F 0x0523, 0x0541, 0x055c, 0x056b, 0x0584, 0x059c, 0x05a5, 0x05bd, - 0x05d2, 0x05ed, 0x05fc, 0x0611, 0x0629, 0x0638, 0x064a, 0x0668, - 0x0674, 0x068f, 0x069e, 0x06ad, 0x06bf, 0x06ce, 0x06e6, 0x06fb, - 0x0707, 0x071c, 0x072e, 0x073d, 0x0761, 0x0770, 0x078e, 0x07a3, - 0x07ac, 0x07c7, 0x07ec, 0x080a, 0x081c, 0x0834, 0x0843, 0x0861, - 0x0876, 0x088e, 0x089d, 0x08a6, 0x08be, 0x08cd, 0x08d9, 0x08fb, - 0x090d, 0x091c, 0x0922, 0x095c, 0x098d, 0x09be, 0x09d0, 0x09e8, - 0x0a00, 0x0a15, 0x0a24, 0x0a33, 0x0a4b, 0x0a5d, 0x0a69, 0x0a78, + 0x05d2, 0x05f0, 0x05ff, 0x0614, 0x062c, 0x063b, 0x064d, 0x066b, + 0x0677, 0x0692, 0x06a1, 0x06b0, 0x06c2, 0x06d1, 0x06e9, 0x06fe, + 0x070a, 0x071f, 0x0731, 0x0740, 0x0764, 0x0773, 0x0791, 0x07a6, + 0x07af, 0x07ca, 0x07ef, 0x080d, 0x081f, 0x0837, 0x0846, 0x0864, + 0x0879, 0x0891, 0x08a0, 0x08a9, 0x08c1, 0x08d0, 0x08dc, 0x08fe, + 0x0910, 0x091f, 0x0925, 0x095f, 0x0990, 0x09c1, 0x09d3, 0x09eb, + 0x0a03, 0x0a18, 0x0a27, 0x0a36, 0x0a4e, 0x0a60, 0x0a6c, 0x0a7b, // Entry 80 - BF - 0x0a87, 0x0aa2, 0x0ab7, 0x0acc, 0x0ade, 0x0af6, 0x0b05, 0x0b2f, - 0x0b44, 0x0b5f, 0x0b6e, 0x0b8d, 0x0b9c, 0x0bae, 0x0bc9, 0x0bed, - 0x0bff, 0x0c0b, 0x0c1d, 0x0c38, 0x0c4d, 0x0c5f, 0x0c71, 0x0c89, - 0x0c9e, 0x0cb6, 0x0cc5, 0x0cd4, 0x0ce3, 0x0cec, 0x0d0a, 0x0d22, - 0x0d3a, 0x0d49, 0x0d5b, 0x0d6a, 0x0d76, 0x0d8e, 0x0d9d, 0x0dbb, - 0x0dca, 0x0ddc, 0x0df1, 0x0e0f, 0x0e21, 0x0e30, 0x0e3f, 0x0e4b, - 0x0e60, 0x0e72, 0x0e81, 0x0e8d, 0x0e99, 0x0ea8, 0x0eb7, 0x0ecf, - 0x0ede, 0x0ede, 0x0ef9, 0x0f05, 0x0f0e, 0x0f29, 0x0f29, 0x0f38, + 0x0a8a, 0x0aa5, 0x0aba, 0x0acf, 0x0ae1, 0x0af9, 0x0b08, 0x0b32, + 0x0b47, 0x0b62, 0x0b71, 0x0b90, 0x0b9f, 0x0bb1, 0x0bcc, 0x0bf0, + 0x0c02, 0x0c0e, 0x0c20, 0x0c3b, 0x0c50, 0x0c62, 0x0c74, 0x0c8c, + 0x0ca1, 0x0cb9, 0x0cc8, 0x0cd7, 0x0ce6, 0x0cef, 0x0d0d, 0x0d25, + 0x0d3d, 0x0d4c, 0x0d5e, 0x0d6d, 0x0d79, 0x0d91, 0x0da0, 0x0dbe, + 0x0dcd, 0x0ddf, 0x0df4, 0x0e12, 0x0e24, 0x0e33, 0x0e42, 0x0e4e, + 0x0e63, 0x0e75, 0x0e84, 0x0e90, 0x0e9c, 0x0eab, 0x0eba, 0x0ed2, + 0x0ee1, 0x0ee1, 0x0efc, 0x0f08, 0x0f11, 0x0f2c, 0x0f2c, 0x0f3b, // Entry C0 - FF - 0x0f38, 0x0f69, 0x0f91, 0x0fa3, 0x0fbe, 0x0fd0, 0x0fd0, 0x0fe5, - 0x0fe5, 0x0fe5, 0x0ff7, 0x0ff7, 0x0ff7, 0x1000, 0x1000, 0x101b, - 0x101b, 0x1027, 0x1036, 0x104b, 0x104b, 0x1054, 0x1054, 0x1054, - 0x1054, 0x1060, 0x1072, 0x1072, 0x107e, 0x107e, 0x107e, 0x10a6, - 0x10bb, 0x10ca, 0x10d6, 0x10d6, 0x10d6, 0x10ee, 0x10ee, 0x10ee, - 0x10fa, 0x10fa, 0x1106, 0x1106, 0x111b, 0x112d, 0x112d, 0x113c, - 0x113c, 0x114e, 0x115d, 0x115d, 0x116c, 0x1181, 0x118d, 0x119f, - 0x11b4, 0x11c6, 0x11d2, 0x11f4, 0x1206, 0x1221, 0x1233, 0x1248, + 0x0f3b, 0x0f6c, 0x0f94, 0x0fa6, 0x0fc1, 0x0fd3, 0x0fd3, 0x0fe8, + 0x0fe8, 0x0fe8, 0x0ffa, 0x0ffa, 0x0ffa, 0x1003, 0x1003, 0x101e, + 0x101e, 0x102a, 0x1039, 0x104e, 0x104e, 0x1057, 0x1057, 0x1057, + 0x1057, 0x1063, 0x1075, 0x1075, 0x1081, 0x1081, 0x1081, 0x10a9, + 0x10be, 0x10cd, 0x10d9, 0x10d9, 0x10d9, 0x10f1, 0x10f1, 0x10f1, + 0x10fd, 0x10fd, 0x1109, 0x1109, 0x111e, 0x1130, 0x1130, 0x113f, + 0x113f, 0x1151, 0x1160, 0x1160, 0x116f, 0x116f, 0x1184, 0x1190, + 0x11a2, 0x11b7, 0x11c9, 0x11d5, 0x11f7, 0x1209, 0x1224, 0x1236, // Entry 100 - 13F - 0x126a, 0x127f, 0x127f, 0x12aa, 0x12e8, 0x1300, 0x1312, 0x1327, - 0x1336, 0x134e, 0x1363, 0x1378, 0x138a, 0x139c, 0x13ab, 0x13d0, - 0x13d0, 0x13df, 0x13f2, 0x140e, 0x1420, 0x1432, 0x1441, 0x144d, - 0x144d, 0x147e, 0x1490, 0x14a5, 0x14c7, 0x14c7, 0x14dc, 0x14dc, - 0x14e5, 0x14fd, 0x14fd, 0x1506, 0x1506, 0x1525, 0x154a, 0x154a, - 0x1575, 0x15a9, 0x15ca, 0x15d0, 0x15e2, 0x15f8, 0x1604, 0x1610, - 0x1610, 0x1619, 0x1634, 0x1634, 0x165a, 0x1686, 0x1686, 0x1695, - 0x16b3, 0x16c2, 0x16d4, 0x16f9, 0x1718, 0x1718, 0x1718, 0x1721, + 0x124b, 0x126d, 0x1282, 0x1282, 0x12ad, 0x12eb, 0x1303, 0x1315, + 0x132a, 0x1339, 0x1351, 0x1366, 0x137b, 0x138d, 0x139f, 0x13ae, + 0x13d3, 0x13d3, 0x13e2, 0x13f5, 0x1411, 0x1423, 0x1435, 0x1444, + 0x1450, 0x1450, 0x1481, 0x1493, 0x14a8, 0x14ca, 0x14ca, 0x14df, + 0x14df, 0x14e8, 0x1500, 0x1500, 0x1509, 0x152b, 0x154a, 0x156f, + 0x156f, 0x159a, 0x15ce, 0x15ef, 0x15f5, 0x1607, 0x161d, 0x1629, + 0x1635, 0x1635, 0x163e, 0x1659, 0x1659, 0x167f, 0x16ab, 0x16ab, + 0x16ba, 0x16d8, 0x16e7, 0x16f9, 0x171e, 0x173d, 0x173d, 0x173d, // Entry 140 - 17F - 0x1739, 0x1745, 0x1764, 0x1776, 0x1776, 0x1791, 0x17a9, 0x17b5, - 0x17dd, 0x17fc, 0x1808, 0x1814, 0x1826, 0x1835, 0x1844, 0x1844, - 0x1844, 0x1859, 0x186b, 0x187a, 0x1899, 0x18b5, 0x18b5, 0x18d1, - 0x18e0, 0x18ef, 0x18fb, 0x190d, 0x1919, 0x1934, 0x1934, 0x1943, - 0x195b, 0x197f, 0x197f, 0x198b, 0x198b, 0x1997, 0x19ac, 0x19c8, - 0x19c8, 0x19c8, 0x19d4, 0x19ec, 0x1a07, 0x1a29, 0x1a3b, 0x1a50, - 0x1a68, 0x1a8a, 0x1a8a, 0x1a8a, 0x1a9f, 0x1aae, 0x1ac3, 0x1ad5, - 0x1af3, 0x1b02, 0x1b17, 0x1b29, 0x1b38, 0x1b50, 0x1b62, 0x1b7a, + 0x1746, 0x175e, 0x176a, 0x1789, 0x179b, 0x179b, 0x17b6, 0x17ce, + 0x17da, 0x1802, 0x1821, 0x182d, 0x1839, 0x184b, 0x185a, 0x1869, + 0x1869, 0x1869, 0x187e, 0x1890, 0x189f, 0x18be, 0x18da, 0x18da, + 0x18f6, 0x1905, 0x1914, 0x1920, 0x1932, 0x193e, 0x1959, 0x1959, + 0x1968, 0x1980, 0x19a4, 0x19a4, 0x19b0, 0x19b0, 0x19bc, 0x19d1, + 0x19ed, 0x19ed, 0x19ed, 0x19f9, 0x1a11, 0x1a2c, 0x1a4e, 0x1a60, + 0x1a75, 0x1a8d, 0x1aaf, 0x1aaf, 0x1aaf, 0x1ac4, 0x1ad3, 0x1ae8, + 0x1afa, 0x1b18, 0x1b27, 0x1b3c, 0x1b4e, 0x1b5d, 0x1b75, 0x1b87, // Entry 180 - 1BF - 0x1b7a, 0x1b7a, 0x1b7a, 0x1b8c, 0x1b8c, 0x1b9b, 0x1ba7, 0x1bcc, - 0x1bcc, 0x1be8, 0x1bfd, 0x1c0f, 0x1c1e, 0x1c2a, 0x1c3f, 0x1c3f, - 0x1c3f, 0x1c54, 0x1c54, 0x1c60, 0x1c72, 0x1c84, 0x1c9f, 0x1cab, - 0x1cab, 0x1cba, 0x1cc9, 0x1cdb, 0x1ce7, 0x1d02, 0x1d1e, 0x1d49, - 0x1d55, 0x1d67, 0x1d8b, 0x1d9d, 0x1db2, 0x1dc1, 0x1dd3, 0x1dd3, - 0x1de8, 0x1e04, 0x1e13, 0x1e2e, 0x1e43, 0x1e43, 0x1e43, 0x1e58, - 0x1e79, 0x1e99, 0x1eb4, 0x1ec0, 0x1ed6, 0x1ee8, 0x1ef7, 0x1f09, - 0x1f09, 0x1f1e, 0x1f36, 0x1f45, 0x1f67, 0x1f67, 0x1f76, 0x1f95, + 0x1b9f, 0x1b9f, 0x1b9f, 0x1b9f, 0x1bb1, 0x1bb1, 0x1bc0, 0x1bf1, + 0x1bfd, 0x1c22, 0x1c22, 0x1c3e, 0x1c53, 0x1c65, 0x1c74, 0x1c80, + 0x1c95, 0x1c95, 0x1c95, 0x1caa, 0x1caa, 0x1cb6, 0x1cc8, 0x1cda, + 0x1cf5, 0x1d01, 0x1d01, 0x1d10, 0x1d1f, 0x1d31, 0x1d3d, 0x1d58, + 0x1d74, 0x1d9f, 0x1dab, 0x1dbd, 0x1de1, 0x1df3, 0x1e08, 0x1e17, + 0x1e29, 0x1e29, 0x1e3e, 0x1e5d, 0x1e6c, 0x1e87, 0x1e9c, 0x1e9c, + 0x1e9c, 0x1eb1, 0x1ed2, 0x1ef2, 0x1f0d, 0x1f19, 0x1f2f, 0x1f41, + 0x1f50, 0x1f62, 0x1f62, 0x1f77, 0x1f8f, 0x1f9e, 0x1fc0, 0x1fc0, // Entry 1C0 - 1FF - 0x1fa1, 0x1fc6, 0x1fe1, 0x1ff9, 0x200b, 0x201d, 0x2029, 0x2051, - 0x206c, 0x207b, 0x2099, 0x20bd, 0x20d2, 0x20d2, 0x20fd, 0x20fd, - 0x20fd, 0x211f, 0x211f, 0x2137, 0x2137, 0x2137, 0x2152, 0x216a, - 0x21a1, 0x21b0, 0x21b0, 0x21cb, 0x21e0, 0x21fb, 0x21fb, 0x21fb, - 0x220d, 0x221f, 0x221f, 0x221f, 0x221f, 0x223a, 0x2249, 0x2258, - 0x2264, 0x228f, 0x22a4, 0x22b3, 0x22c5, 0x22c5, 0x22d7, 0x22e6, - 0x22fe, 0x2313, 0x2313, 0x233e, 0x233e, 0x234a, 0x234a, 0x235c, - 0x238a, 0x23ac, 0x23ac, 0x23c7, 0x23d0, 0x23d0, 0x23e2, 0x23e2, + 0x1fcf, 0x1fee, 0x1ffa, 0x201f, 0x203a, 0x2052, 0x2064, 0x2076, + 0x2082, 0x20aa, 0x20c5, 0x20d4, 0x20f2, 0x2116, 0x212b, 0x212b, + 0x2156, 0x2156, 0x2156, 0x2178, 0x2178, 0x2190, 0x2190, 0x2190, + 0x21ab, 0x21c3, 0x21fa, 0x2209, 0x2209, 0x2224, 0x2239, 0x2254, + 0x2254, 0x2254, 0x2266, 0x2278, 0x2278, 0x2278, 0x2278, 0x2293, + 0x22a2, 0x22b1, 0x22bd, 0x22e8, 0x22fd, 0x230c, 0x231e, 0x231e, + 0x2330, 0x233f, 0x2357, 0x236c, 0x236c, 0x2397, 0x2397, 0x23a3, + 0x23a3, 0x23b5, 0x23e3, 0x2405, 0x2405, 0x2420, 0x2429, 0x2429, // Entry 200 - 23F - 0x23e2, 0x240d, 0x2429, 0x2445, 0x2467, 0x247f, 0x2497, 0x24bf, - 0x24ce, 0x24da, 0x24da, 0x24ec, 0x24f8, 0x2510, 0x2528, 0x2550, - 0x2565, 0x2565, 0x2565, 0x2577, 0x2583, 0x2595, 0x25a4, 0x25b9, - 0x25c2, 0x25d7, 0x25d7, 0x25ef, 0x2601, 0x2601, 0x2616, 0x263b, - 0x2654, 0x2654, 0x2666, 0x2666, 0x267e, 0x267e, 0x2696, 0x26a8, - 0x26c3, 0x26db, 0x2710, 0x2725, 0x2740, 0x275b, 0x2764, 0x276d, - 0x276d, 0x276d, 0x276d, 0x276d, 0x277c, 0x277c, 0x278b, 0x279d, - 0x27b2, 0x27be, 0x27ca, 0x27e5, 0x27fe, 0x2813, 0x2813, 0x281f, + 0x243b, 0x243b, 0x243b, 0x2466, 0x2482, 0x249e, 0x24c0, 0x24d8, + 0x24f0, 0x2518, 0x2527, 0x2533, 0x2533, 0x2545, 0x2551, 0x2569, + 0x2581, 0x25a9, 0x25be, 0x25be, 0x25be, 0x25d0, 0x25dc, 0x25ee, + 0x25fd, 0x2612, 0x261b, 0x2630, 0x2630, 0x2648, 0x265a, 0x265a, + 0x266f, 0x2694, 0x26ad, 0x26ad, 0x26bf, 0x26bf, 0x26d7, 0x26d7, + 0x26ef, 0x2701, 0x271c, 0x2734, 0x2769, 0x277e, 0x2799, 0x27b4, + 0x27d3, 0x27dc, 0x27dc, 0x27dc, 0x27dc, 0x27dc, 0x27eb, 0x27eb, + 0x27fa, 0x280c, 0x2821, 0x282d, 0x2839, 0x2854, 0x286d, 0x2882, // Entry 240 - 27F - 0x2828, 0x2837, 0x284c, 0x285b, 0x285b, 0x2870, 0x2885, 0x28ac, - 0x28ac, 0x28c4, 0x2908, 0x2914, 0x295e, 0x296a, 0x29a2, 0x29a2, - 0x29cd, 0x29f6, 0x2a2d, 0x2a58, 0x2a83, 0x2aae, 0x2ae9, 0x2b17, - 0x2b45, 0x2b45, 0x2b6d, 0x2b8f, 0x2ba8, 0x2bbd, 0x2bf7, 0x2c2b, - 0x2c4f, 0x2c7a, 0x2ca2, 0x2cc4, 0x2cec, -} // Size: 1250 bytes - -const msLangStr string = "" + // Size: 3266 bytes - "aaAbkhaziaAvestanAfrikaansAkanAmharicAragonArabAssamAvaricAymaraAzerbaij" + - "anBashkirBelarusBulgariaBislamaBambaraBenggalaTibetBretonBosniaCatalonia" + - "ChechenChamorroCorsicaCzechSlavik GerejaChuvashWalesDenmarkJermanDivehiD" + - "zongkhaEweGreekInggerisEsperantoSepanyolEstoniaBasqueParsiFulahFinlandFi" + - "jiFaroePerancisFrisian BaratIrelandScots GaelicGaliciaGuaraniGujeratManx" + - "HausaIbraniHindiCroatiaHaitiHungaryArmeniaHereroInterlinguaIndonesiaInte" + - "rlingueIgboSichuan YiIdoIcelandItaliInuktitutJepunJawaGeorgiaKongoKikuya" + - "KuanyamaKazakhstanKalaallisutKhmerKannadaKoreaKanuriKashmirKurdishKomiCo" + - "rnishKirghizLatinLuxembourgGandaLimburgishLingalaLaosLithuaniaLuba-Katan" + - "gaLatviaMalagasyMarshallMaoriMacedoniaMalayalamMongoliaMarathiBahasa Mel" + - "ayuMaltaBurmaNauruNdebele UtaraNepalNdongaBelandaNynorsk NorwayBokmål No" + - "rwayNdebele SelatanNavajoNyanjaOccitaniaOromoOriyaOssetePunjabiPolandPas" + - "htoPortugisQuechuaRomanshRundiRomaniaRusiaKinyarwandaSanskritSardiniaSin" + - "dhiSami UtaraSangoSinhalaSlovakSloveniaSamoaShonaSomaliAlbaniaSerbiaSwat" + - "iSotho SelatanSundaSwedenSwahiliTamilTeluguTajikThaiTigrinyaTurkmenTswan" + - "aTongaTurkiTsongaTatarTahitiUyghurUkraineUrduUzbekistanVendaVietnamVolap" + - "ükWalloonWolofXhosaYiddishYorubaCinaZuluAcehAkoliAdangmeAdygheArab Tuni" + - "siaAghemAinualeAltai SelatananpMapucheArapahoArab AlgeriaArab MaghribiAr" + - "ab MesirAsuAsturiaAwadhiBaluchiBaliBasaaBamunGhomalaBejaBembaBenaBafutBa" + - "lochi BaratBhojpuriBiniKomSiksikaBishnupriyaBrahuiBodoAkooseBuriatBugisB" + - "uluBlinMedumbaCayugaCebuanoChigaChukeseMariChoctawCherokeeCheyenneKurdi " + - "SoraniCopticTurki KrimeaPerancis Seselwa CreoleDakotaDargwaTaitaDogribZa" + - "rmaDogriSorbian RendahDualaJola-FonyiDazagaEmbuEfikEkajukEwondoFilipinaF" + - "onFriulianGaGagauzCina GanGbayaZoroastrian DariGeezKiribatiGilakiGoronta" + - "loGreek PurbaJerman SwitzerlandGusiiGwichʼinCina HakkaHawaiiHiligaynonHm" + - "ongSorbian AtasCina XiangHupaIbanIbibioIlokoIngushLojbanNgombaMachameKab" + - "yleKachinJjuKambaKabardianKanembuTyapMakondeKabuverdianuKoroKhasiKoyra C" + - "hiiniKhowarKakoKalenjinKimbunduKomi-PermyakKonkaniKpelleKarachay-BalkarK" + - "arelianKurukhShambalaBafiaColognianKumykLadinoLangiLahndaLezghianLakotaL" + - "oziLuri UtaraLuba-LuluaLundaLuoMizoLuyiaMaduraMafaMagahiMaithiliMakasarM" + - "asaiMabaMokshaMendeMeruMorisyenMakhuwa-MeettoMeta’MicmacMinangkabauManip" + - "uriMohawkMossiMundangPelbagai BahasaCreekMirandeseMyeneErzyaMazanderaniC" + - "ina Min NanNeapolitanNamaJerman RendahNewariNiasNiuKwasioNgiemboonNogaiN" + - "’koSotho UtaraNuerNyankolePangasinanPampangaPapiamentoPalauanNigerian " + - "PidginPrussianKʼicheʼRapanuiRarotongaRomboAromanianRwaSandaweSakhaSambur" + - "uSantaliNgambaySanguSiciliScotsKurdish SelatanSenecaSenaKoyraboro SenniT" + - "achelhitShanArab ChadianSami SelatanLule SamiInari SamiSkolt SamiSoninke" + - "Sranan TongoSahoSukumaComoriaSyriacTimneTesoTetumTigreKlingonTalyshTok P" + - "isinTarokoTumbukaTuvaluTasawaqTuvinianTamazight Atlas TengahUdmurtUmbund" + - "uRootVaiVunjoWalserWolayttaWarayWarlpiriCina WuKalmykSogaYangbenYembaKan" + - "tonisTamazight Maghribi StandardZuniTiada kandungan linguistikZazaArab S" + - "tandard ModenJerman AustriaJerman Halus SwitzerlandInggeris AustraliaIng" + - "geris KanadaInggeris BritishInggeris ASSepanyol Amerika LatinSepanyol Er" + - "opahSepanyol MexicoPerancis KanadaPerancis SwitzerlandSaxon RendahFlemis" + - "hPortugis BrazilPortugis EropahMoldaviaSerboCroatiaCongo SwahiliCina Rin" + - "gkasCina Tradisional" - -var msLangIdx = []uint16{ // 613 elements + 0x2882, 0x288e, 0x2897, 0x28a6, 0x28bb, 0x28ca, 0x28ca, 0x28df, + 0x28f4, 0x291b, 0x291b, 0x2933, 0x2977, 0x2983, 0x29cd, 0x29d9, + 0x2a11, 0x2a11, 0x2a3c, 0x2a65, 0x2a9c, 0x2ac7, 0x2af2, 0x2b1d, + 0x2b58, 0x2b86, 0x2bb4, 0x2bb4, 0x2bdc, 0x2bfe, 0x2c17, 0x2c2c, + 0x2c66, 0x2c9a, 0x2cbe, 0x2ce9, 0x2d11, 0x2d33, 0x2d5b, +} // Size: 1254 bytes + +const msLangStr string = "" + // Size: 3309 bytes + "AfarAbkhaziaAvestanAfrikaansAkanAmharicAragonArabAssamAvaricAymaraAzerba" + + "ijanBashkirBelarusBulgariaBislamaBambaraBenggalaTibetBretonBosniaCatalon" + + "iaChechenChamorroCorsicaCzechSlavik GerejaChuvashWalesDenmarkJermanDiveh" + + "iDzongkhaEweGreekInggerisEsperantoSepanyolEstoniaBasqueParsiFulahFinland" + + "FijiFaroePerancisFrisian BaratIrelandScots GaelicGaliciaGuaraniGujeratMa" + + "nxHausaIbraniHindiCroatiaHaitiHungaryArmeniaHereroInterlinguaIndonesiaIn" + + "terlingueIgboSichuan YiIdoIcelandItaliInuktitutJepunJawaGeorgiaKongoKiku" + + "yaKuanyamaKazakhstanKalaallisutKhmerKannadaKoreaKanuriKashmirKurdishKomi" + + "CornishKirghizLatinLuxembourgGandaLimburgishLingalaLaosLithuaniaLuba-Kat" + + "angaLatviaMalagasyMarshallMaoriMacedoniaMalayalamMongoliaMarathiMelayuMa" + + "ltaBurmaNauruNdebele UtaraNepalNdongaBelandaNynorsk NorwayBokmål NorwayN" + + "debele SelatanNavajoNyanjaOccitaniaOromoOdiaOssetePunjabiPolandPashtoPor" + + "tugisQuechuaRomanshRundiRomaniaRusiaKinyarwandaSanskritSardiniaSindhiSam" + + "i UtaraSangoSinhalaSlovakSloveniaSamoaShonaSomaliAlbaniaSerbiaSwatiSotho" + + " SelatanSundaSwedenSwahiliTamilTeluguTajikThaiTigrinyaTurkmenTswanaTonga" + + "TurkiTsongaTatarTahitiUyghurUkraineUrduUzbekistanVendaVietnamVolapükWall" + + "oonWolofXhosaYiddishYorubaCinaZuluAcehAkoliAdangmeAdygheArab TunisiaAghe" + + "mAinuAleutAltai SelatanAngikaMapucheArapahoArab AlgeriaArab MaghribiArab" + + " MesirAsuAsturiaAwadhiBaluchiBaliBasaaBamunGhomalaBejaBembaBenaBafutBalo" + + "chi BaratBhojpuriBiniKomSiksikaBishnupriyaBrahuiBodoAkooseBuriatBugisBul" + + "uBlinMedumbaCayugaCebuanoChigaChukeseMariChoctawCherokeeCheyenneKurdi So" + + "raniCopticTurki KrimeaPerancis Seselwa CreoleDakotaDargwaTaitaDogribZarm" + + "aDogriSorbian RendahDualaJola-FonyiDazagaEmbuEfikEkajukEwondoFilipinaFon" + + "Perancis CajunFriulianGaGagauzCina GanGbayaZoroastrian DariGeezKiribatiG" + + "ilakiGorontaloGreek PurbaJerman SwitzerlandGusiiGwichʼinCina HakkaHawaii" + + "HiligaynonHmongSorbian AtasCina XiangHupaIbanIbibioIlokoIngushLojbanNgom" + + "baMachameKabyleKachinJjuKambaKabardiaKanembuTyapMakondeKabuverdianuKoroK" + + "hasiKoyra ChiiniKhowarKakoKalenjinKimbunduKomi-PermyakKonkaniKpelleKarac" + + "hay-BalkarKarelianKurukhShambalaBafiaColognianKumykLadinoLangiLahndaLezg" + + "hianLakotaKreol LouisianaLoziLuri UtaraLuba-LuluaLundaLuoMizoLuyiaMadura" + + "MafaMagahiMaithiliMakasarMasaiMabaMokshaMendeMeruMorisyenMakhuwa-MeettoM" + + "eta’MicmacMinangkabauManipuriMohawkMossiMundangPelbagai BahasaCreekMiran" + + "deseMyeneErzyaMazanderaniCina Min NanNeapolitanNamaJerman RendahNewariNi" + + "asNiuKwasioNgiemboonNogaiN’koSotho UtaraNuerNyankolePangasinanPampangaPa" + + "piamentoPalauanNigerian PidginPrusiaKʼicheʼRapanuiRarotongaRomboAromania" + + "nRwaSandaweSakhaSamburuSantaliNgambaySanguSiciliScotsKurdish SelatanSene" + + "caSenaKoyraboro SenniTachelhitShanArab ChadianSami SelatanLule SamiInari" + + " SamiSkolt SamiSoninkeSranan TongoSahoSukumaComoriaSyriacTimneTesoTetumT" + + "igreKlingonTalyshTok PisinTarokoTumbukaTuvaluTasawaqTuvinianTamazight At" + + "las TengahUdmurtUmbunduBahasa Tidak DiketahuiVaiVunjoWalserWolayttaWaray" + + "WarlpiriCina WuKalmykSogaYangbenYembaKantonisTamazight Maghribi Standard" + + "ZuniTiada kandungan linguistikZazaArab Standard ModenJerman AustriaJerma" + + "n Halus SwitzerlandInggeris AustraliaInggeris KanadaInggeris BritishIngg" + + "eris ASSepanyol Amerika LatinSepanyol EropahSepanyol MexicoPerancis Kana" + + "daPerancis SwitzerlandSaxon RendahFlemishPortugis BrazilPortugis EropahM" + + "oldaviaSerboCroatiaCongo SwahiliCina RingkasCina Tradisional" + +var msLangIdx = []uint16{ // 615 elements // Entry 0 - 3F - 0x0000, 0x0002, 0x000a, 0x0011, 0x001a, 0x001e, 0x0025, 0x002b, - 0x002f, 0x0034, 0x003a, 0x0040, 0x004a, 0x0051, 0x0058, 0x0060, - 0x0067, 0x006e, 0x0076, 0x007b, 0x0081, 0x0087, 0x0090, 0x0097, - 0x009f, 0x00a6, 0x00a6, 0x00ab, 0x00b8, 0x00bf, 0x00c4, 0x00cb, - 0x00d1, 0x00d7, 0x00df, 0x00e2, 0x00e7, 0x00ef, 0x00f8, 0x0100, - 0x0107, 0x010d, 0x0112, 0x0117, 0x011e, 0x0122, 0x0127, 0x012f, - 0x013c, 0x0143, 0x014f, 0x0156, 0x015d, 0x0164, 0x0168, 0x016d, - 0x0173, 0x0178, 0x0178, 0x017f, 0x0184, 0x018b, 0x0192, 0x0198, + 0x0000, 0x0004, 0x000c, 0x0013, 0x001c, 0x0020, 0x0027, 0x002d, + 0x0031, 0x0036, 0x003c, 0x0042, 0x004c, 0x0053, 0x005a, 0x0062, + 0x0069, 0x0070, 0x0078, 0x007d, 0x0083, 0x0089, 0x0092, 0x0099, + 0x00a1, 0x00a8, 0x00a8, 0x00ad, 0x00ba, 0x00c1, 0x00c6, 0x00cd, + 0x00d3, 0x00d9, 0x00e1, 0x00e4, 0x00e9, 0x00f1, 0x00fa, 0x0102, + 0x0109, 0x010f, 0x0114, 0x0119, 0x0120, 0x0124, 0x0129, 0x0131, + 0x013e, 0x0145, 0x0151, 0x0158, 0x015f, 0x0166, 0x016a, 0x016f, + 0x0175, 0x017a, 0x017a, 0x0181, 0x0186, 0x018d, 0x0194, 0x019a, // Entry 40 - 7F - 0x01a3, 0x01ac, 0x01b7, 0x01bb, 0x01c5, 0x01c5, 0x01c8, 0x01cf, - 0x01d4, 0x01dd, 0x01e2, 0x01e6, 0x01ed, 0x01f2, 0x01f8, 0x0200, - 0x020a, 0x0215, 0x021a, 0x0221, 0x0226, 0x022c, 0x0233, 0x023a, - 0x023e, 0x0245, 0x024c, 0x0251, 0x025b, 0x0260, 0x026a, 0x0271, - 0x0275, 0x027e, 0x028a, 0x0290, 0x0298, 0x02a0, 0x02a5, 0x02ae, - 0x02b7, 0x02bf, 0x02c6, 0x02d3, 0x02d8, 0x02dd, 0x02e2, 0x02ef, - 0x02f4, 0x02fa, 0x0301, 0x030f, 0x031d, 0x032c, 0x0332, 0x0338, - 0x0341, 0x0341, 0x0346, 0x034b, 0x0351, 0x0358, 0x0358, 0x035e, + 0x01a5, 0x01ae, 0x01b9, 0x01bd, 0x01c7, 0x01c7, 0x01ca, 0x01d1, + 0x01d6, 0x01df, 0x01e4, 0x01e8, 0x01ef, 0x01f4, 0x01fa, 0x0202, + 0x020c, 0x0217, 0x021c, 0x0223, 0x0228, 0x022e, 0x0235, 0x023c, + 0x0240, 0x0247, 0x024e, 0x0253, 0x025d, 0x0262, 0x026c, 0x0273, + 0x0277, 0x0280, 0x028c, 0x0292, 0x029a, 0x02a2, 0x02a7, 0x02b0, + 0x02b9, 0x02c1, 0x02c8, 0x02ce, 0x02d3, 0x02d8, 0x02dd, 0x02ea, + 0x02ef, 0x02f5, 0x02fc, 0x030a, 0x0318, 0x0327, 0x032d, 0x0333, + 0x033c, 0x033c, 0x0341, 0x0345, 0x034b, 0x0352, 0x0352, 0x0358, // Entry 80 - BF - 0x0364, 0x036c, 0x0373, 0x037a, 0x037f, 0x0386, 0x038b, 0x0396, - 0x039e, 0x03a6, 0x03ac, 0x03b6, 0x03bb, 0x03c2, 0x03c8, 0x03d0, - 0x03d5, 0x03da, 0x03e0, 0x03e7, 0x03ed, 0x03f2, 0x03ff, 0x0404, - 0x040a, 0x0411, 0x0416, 0x041c, 0x0421, 0x0425, 0x042d, 0x0434, - 0x043a, 0x043f, 0x0444, 0x044a, 0x044f, 0x0455, 0x045b, 0x0462, - 0x0466, 0x0470, 0x0475, 0x047c, 0x0484, 0x048b, 0x0490, 0x0495, - 0x049c, 0x04a2, 0x04a2, 0x04a6, 0x04aa, 0x04ae, 0x04b3, 0x04ba, - 0x04c0, 0x04cc, 0x04cc, 0x04d1, 0x04d5, 0x04d5, 0x04d5, 0x04d8, + 0x035e, 0x0366, 0x036d, 0x0374, 0x0379, 0x0380, 0x0385, 0x0390, + 0x0398, 0x03a0, 0x03a6, 0x03b0, 0x03b5, 0x03bc, 0x03c2, 0x03ca, + 0x03cf, 0x03d4, 0x03da, 0x03e1, 0x03e7, 0x03ec, 0x03f9, 0x03fe, + 0x0404, 0x040b, 0x0410, 0x0416, 0x041b, 0x041f, 0x0427, 0x042e, + 0x0434, 0x0439, 0x043e, 0x0444, 0x0449, 0x044f, 0x0455, 0x045c, + 0x0460, 0x046a, 0x046f, 0x0476, 0x047e, 0x0485, 0x048a, 0x048f, + 0x0496, 0x049c, 0x049c, 0x04a0, 0x04a4, 0x04a8, 0x04ad, 0x04b4, + 0x04ba, 0x04c6, 0x04c6, 0x04cb, 0x04cf, 0x04cf, 0x04cf, 0x04d4, // Entry C0 - FF - 0x04d8, 0x04e5, 0x04e5, 0x04e8, 0x04e8, 0x04ef, 0x04ef, 0x04f6, - 0x0502, 0x0502, 0x0502, 0x050f, 0x0519, 0x051c, 0x051c, 0x0523, - 0x0523, 0x0529, 0x0530, 0x0534, 0x0534, 0x0539, 0x053e, 0x053e, - 0x0545, 0x0549, 0x054e, 0x054e, 0x0552, 0x0557, 0x0557, 0x0564, - 0x056c, 0x056c, 0x0570, 0x0570, 0x0573, 0x057a, 0x0585, 0x0585, - 0x0585, 0x058b, 0x058f, 0x0595, 0x059b, 0x05a0, 0x05a4, 0x05a8, - 0x05af, 0x05af, 0x05af, 0x05b5, 0x05b5, 0x05bc, 0x05c1, 0x05c1, - 0x05c1, 0x05c8, 0x05cc, 0x05cc, 0x05d3, 0x05d3, 0x05db, 0x05e3, + 0x04d4, 0x04e1, 0x04e1, 0x04e7, 0x04e7, 0x04ee, 0x04ee, 0x04f5, + 0x0501, 0x0501, 0x0501, 0x050e, 0x0518, 0x051b, 0x051b, 0x0522, + 0x0522, 0x0528, 0x052f, 0x0533, 0x0533, 0x0538, 0x053d, 0x053d, + 0x0544, 0x0548, 0x054d, 0x054d, 0x0551, 0x0556, 0x0556, 0x0563, + 0x056b, 0x056b, 0x056f, 0x056f, 0x0572, 0x0579, 0x0584, 0x0584, + 0x0584, 0x058a, 0x058e, 0x0594, 0x059a, 0x059f, 0x05a3, 0x05a7, + 0x05ae, 0x05ae, 0x05ae, 0x05b4, 0x05b4, 0x05b4, 0x05bb, 0x05c0, + 0x05c0, 0x05c0, 0x05c7, 0x05cb, 0x05cb, 0x05d2, 0x05d2, 0x05da, // Entry 100 - 13F - 0x05ef, 0x05f5, 0x05f5, 0x0601, 0x0618, 0x0618, 0x061e, 0x0624, - 0x0629, 0x0629, 0x0629, 0x062f, 0x062f, 0x0634, 0x0639, 0x0647, - 0x0647, 0x064c, 0x064c, 0x0656, 0x0656, 0x065c, 0x0660, 0x0664, - 0x0664, 0x0664, 0x066a, 0x066a, 0x066a, 0x066a, 0x0670, 0x0670, - 0x0670, 0x0678, 0x0678, 0x067b, 0x067b, 0x067b, 0x067b, 0x067b, - 0x067b, 0x067b, 0x0683, 0x0685, 0x068b, 0x0693, 0x0693, 0x0698, - 0x06a8, 0x06ac, 0x06b4, 0x06ba, 0x06ba, 0x06ba, 0x06ba, 0x06ba, - 0x06c3, 0x06c3, 0x06c3, 0x06ce, 0x06e0, 0x06e0, 0x06e0, 0x06e5, + 0x05e2, 0x05ee, 0x05f4, 0x05f4, 0x0600, 0x0617, 0x0617, 0x061d, + 0x0623, 0x0628, 0x0628, 0x0628, 0x062e, 0x062e, 0x0633, 0x0638, + 0x0646, 0x0646, 0x064b, 0x064b, 0x0655, 0x0655, 0x065b, 0x065f, + 0x0663, 0x0663, 0x0663, 0x0669, 0x0669, 0x0669, 0x0669, 0x066f, + 0x066f, 0x066f, 0x0677, 0x0677, 0x067a, 0x0688, 0x0688, 0x0688, + 0x0688, 0x0688, 0x0688, 0x0690, 0x0692, 0x0698, 0x06a0, 0x06a0, + 0x06a5, 0x06b5, 0x06b9, 0x06c1, 0x06c7, 0x06c7, 0x06c7, 0x06c7, + 0x06c7, 0x06d0, 0x06d0, 0x06d0, 0x06db, 0x06ed, 0x06ed, 0x06ed, // Entry 140 - 17F - 0x06ee, 0x06ee, 0x06f8, 0x06fe, 0x06fe, 0x0708, 0x0708, 0x070d, - 0x0719, 0x0723, 0x0727, 0x072b, 0x0731, 0x0736, 0x073c, 0x073c, - 0x073c, 0x0742, 0x0748, 0x074f, 0x074f, 0x074f, 0x074f, 0x074f, - 0x0755, 0x075b, 0x075e, 0x0763, 0x0763, 0x076c, 0x0773, 0x0777, - 0x077e, 0x078a, 0x078a, 0x078e, 0x078e, 0x0793, 0x0793, 0x079f, - 0x07a5, 0x07a5, 0x07a9, 0x07b1, 0x07b9, 0x07c5, 0x07cc, 0x07cc, - 0x07d2, 0x07e1, 0x07e1, 0x07e1, 0x07e9, 0x07ef, 0x07f7, 0x07fc, - 0x0805, 0x080a, 0x080a, 0x0810, 0x0815, 0x081b, 0x081b, 0x0823, + 0x06f2, 0x06fb, 0x06fb, 0x0705, 0x070b, 0x070b, 0x0715, 0x0715, + 0x071a, 0x0726, 0x0730, 0x0734, 0x0738, 0x073e, 0x0743, 0x0749, + 0x0749, 0x0749, 0x074f, 0x0755, 0x075c, 0x075c, 0x075c, 0x075c, + 0x075c, 0x0762, 0x0768, 0x076b, 0x0770, 0x0770, 0x0778, 0x077f, + 0x0783, 0x078a, 0x0796, 0x0796, 0x079a, 0x079a, 0x079f, 0x079f, + 0x07ab, 0x07b1, 0x07b1, 0x07b5, 0x07bd, 0x07c5, 0x07d1, 0x07d8, + 0x07d8, 0x07de, 0x07ed, 0x07ed, 0x07ed, 0x07f5, 0x07fb, 0x0803, + 0x0808, 0x0811, 0x0816, 0x0816, 0x081c, 0x0821, 0x0827, 0x0827, // Entry 180 - 1BF - 0x0823, 0x0823, 0x0823, 0x0829, 0x0829, 0x0829, 0x082d, 0x0837, - 0x0837, 0x0841, 0x0841, 0x0846, 0x0849, 0x084d, 0x0852, 0x0852, - 0x0852, 0x0858, 0x085c, 0x0862, 0x086a, 0x0871, 0x0871, 0x0876, - 0x087a, 0x0880, 0x0880, 0x0885, 0x0889, 0x0891, 0x0891, 0x089f, - 0x08a6, 0x08ac, 0x08b7, 0x08b7, 0x08bf, 0x08c5, 0x08ca, 0x08ca, - 0x08d1, 0x08e0, 0x08e5, 0x08ee, 0x08ee, 0x08ee, 0x08f3, 0x08f8, - 0x0903, 0x090f, 0x0919, 0x091d, 0x092a, 0x0930, 0x0934, 0x0937, - 0x0937, 0x093d, 0x0946, 0x094b, 0x094b, 0x094b, 0x0951, 0x095c, + 0x082f, 0x082f, 0x082f, 0x082f, 0x0835, 0x0835, 0x0835, 0x0844, + 0x0848, 0x0852, 0x0852, 0x085c, 0x085c, 0x0861, 0x0864, 0x0868, + 0x086d, 0x086d, 0x086d, 0x0873, 0x0877, 0x087d, 0x0885, 0x088c, + 0x088c, 0x0891, 0x0895, 0x089b, 0x089b, 0x08a0, 0x08a4, 0x08ac, + 0x08ac, 0x08ba, 0x08c1, 0x08c7, 0x08d2, 0x08d2, 0x08da, 0x08e0, + 0x08e5, 0x08e5, 0x08ec, 0x08fb, 0x0900, 0x0909, 0x0909, 0x0909, + 0x090e, 0x0913, 0x091e, 0x092a, 0x0934, 0x0938, 0x0945, 0x094b, + 0x094f, 0x0952, 0x0952, 0x0958, 0x0961, 0x0966, 0x0966, 0x0966, // Entry 1C0 - 1FF - 0x0960, 0x0960, 0x0960, 0x0968, 0x0968, 0x0968, 0x0968, 0x0968, - 0x0972, 0x0972, 0x097a, 0x0984, 0x098b, 0x098b, 0x099a, 0x099a, - 0x099a, 0x099a, 0x099a, 0x099a, 0x099a, 0x099a, 0x099a, 0x09a2, - 0x09a2, 0x09ab, 0x09ab, 0x09ab, 0x09b2, 0x09bb, 0x09bb, 0x09bb, - 0x09c0, 0x09c0, 0x09c0, 0x09c0, 0x09c0, 0x09c9, 0x09cc, 0x09d3, - 0x09d8, 0x09d8, 0x09df, 0x09df, 0x09e6, 0x09e6, 0x09ed, 0x09f2, - 0x09f8, 0x09fd, 0x09fd, 0x0a0c, 0x0a12, 0x0a16, 0x0a16, 0x0a16, - 0x0a25, 0x0a25, 0x0a25, 0x0a2e, 0x0a32, 0x0a3e, 0x0a3e, 0x0a3e, + 0x096c, 0x0977, 0x097b, 0x097b, 0x097b, 0x0983, 0x0983, 0x0983, + 0x0983, 0x0983, 0x098d, 0x098d, 0x0995, 0x099f, 0x09a6, 0x09a6, + 0x09b5, 0x09b5, 0x09b5, 0x09b5, 0x09b5, 0x09b5, 0x09b5, 0x09b5, + 0x09b5, 0x09bb, 0x09bb, 0x09c4, 0x09c4, 0x09c4, 0x09cb, 0x09d4, + 0x09d4, 0x09d4, 0x09d9, 0x09d9, 0x09d9, 0x09d9, 0x09d9, 0x09e2, + 0x09e5, 0x09ec, 0x09f1, 0x09f1, 0x09f8, 0x09f8, 0x09ff, 0x09ff, + 0x0a06, 0x0a0b, 0x0a11, 0x0a16, 0x0a16, 0x0a25, 0x0a2b, 0x0a2f, + 0x0a2f, 0x0a2f, 0x0a3e, 0x0a3e, 0x0a3e, 0x0a47, 0x0a4b, 0x0a57, // Entry 200 - 23F - 0x0a3e, 0x0a4a, 0x0a53, 0x0a5d, 0x0a67, 0x0a6e, 0x0a6e, 0x0a7a, - 0x0a7a, 0x0a7e, 0x0a7e, 0x0a84, 0x0a84, 0x0a84, 0x0a8b, 0x0a8b, - 0x0a91, 0x0a91, 0x0a91, 0x0a96, 0x0a9a, 0x0a9a, 0x0a9f, 0x0aa4, - 0x0aa4, 0x0aa4, 0x0aa4, 0x0aab, 0x0aab, 0x0ab1, 0x0ab1, 0x0ab1, - 0x0aba, 0x0aba, 0x0ac0, 0x0ac0, 0x0ac0, 0x0ac0, 0x0ac7, 0x0acd, - 0x0ad4, 0x0adc, 0x0af2, 0x0af8, 0x0af8, 0x0aff, 0x0b03, 0x0b06, - 0x0b06, 0x0b06, 0x0b06, 0x0b06, 0x0b06, 0x0b06, 0x0b0b, 0x0b11, - 0x0b19, 0x0b1e, 0x0b1e, 0x0b26, 0x0b2d, 0x0b33, 0x0b33, 0x0b37, + 0x0a57, 0x0a57, 0x0a57, 0x0a63, 0x0a6c, 0x0a76, 0x0a80, 0x0a87, + 0x0a87, 0x0a93, 0x0a93, 0x0a97, 0x0a97, 0x0a9d, 0x0a9d, 0x0a9d, + 0x0aa4, 0x0aa4, 0x0aaa, 0x0aaa, 0x0aaa, 0x0aaf, 0x0ab3, 0x0ab3, + 0x0ab8, 0x0abd, 0x0abd, 0x0abd, 0x0abd, 0x0ac4, 0x0ac4, 0x0aca, + 0x0aca, 0x0aca, 0x0ad3, 0x0ad3, 0x0ad9, 0x0ad9, 0x0ad9, 0x0ad9, + 0x0ae0, 0x0ae6, 0x0aed, 0x0af5, 0x0b0b, 0x0b11, 0x0b11, 0x0b18, + 0x0b2e, 0x0b31, 0x0b31, 0x0b31, 0x0b31, 0x0b31, 0x0b31, 0x0b31, + 0x0b36, 0x0b3c, 0x0b44, 0x0b49, 0x0b49, 0x0b51, 0x0b58, 0x0b5e, // Entry 240 - 27F - 0x0b37, 0x0b37, 0x0b3e, 0x0b43, 0x0b43, 0x0b4b, 0x0b4b, 0x0b4b, - 0x0b4b, 0x0b4b, 0x0b66, 0x0b6a, 0x0b84, 0x0b88, 0x0b9b, 0x0b9b, - 0x0ba9, 0x0bc1, 0x0bd3, 0x0be2, 0x0bf2, 0x0bfd, 0x0c13, 0x0c22, - 0x0c31, 0x0c31, 0x0c40, 0x0c54, 0x0c60, 0x0c67, 0x0c76, 0x0c85, - 0x0c8d, 0x0c99, 0x0ca6, 0x0cb2, 0x0cc2, -} // Size: 1250 bytes - -const myLangStr string = "" + // Size: 10322 bytes + 0x0b5e, 0x0b62, 0x0b62, 0x0b62, 0x0b69, 0x0b6e, 0x0b6e, 0x0b76, + 0x0b76, 0x0b76, 0x0b76, 0x0b76, 0x0b91, 0x0b95, 0x0baf, 0x0bb3, + 0x0bc6, 0x0bc6, 0x0bd4, 0x0bec, 0x0bfe, 0x0c0d, 0x0c1d, 0x0c28, + 0x0c3e, 0x0c4d, 0x0c5c, 0x0c5c, 0x0c6b, 0x0c7f, 0x0c8b, 0x0c92, + 0x0ca1, 0x0cb0, 0x0cb8, 0x0cc4, 0x0cd1, 0x0cdd, 0x0ced, +} // Size: 1254 bytes + +const myLangStr string = "" + // Size: 10308 bytes "အာဖာအဘ်ခါဇီရာတောင်အာဖရိကအာကန်အမ်ဟာရစ်ခ်အာရာဂွန်အာရဗီအာသံအာဗာရစ်ခ်အိုင်မာ" + - "ရအဇာဘိုင်ဂျန်ဘက်ရှ်ကာဘီလာရုဇ်ဘူလ်ဂေးရီးယားဘစ်စ်လာမာဘန်ဘာရာဘင်္ဂါလီတိဘက" + + "ရအဇာဘိုင်ဂျန်ဘက်ရှ်ကာဘီလာရုစ်ဘူလ်ဂေးရီးယားဘစ်စ်လာမာဘန်ဘာရာဘင်္ဂါလီတိဘက" + "်ဘရီတွန်ဘော့စ်နီးယားကတ်တလန်ချက်ချန်းချမိုရိုခိုစီကန်ခရီးချက်ချပ်ချ် စလ" + "ာဗစ်ချူဗက်ရှ်ဝေလဒိန်းမတ်ဂျာမန်ဒီဗာဟီဒဇွန်ကာအီဝီဂရိအင်္ဂလိပ်အက်စ်ပရန်တိ" + "ုစပိန်အက်စ်တိုးနီးယားဘာစ်ခ်ပါရှန်ဖူလာဖင်လန်ဖီဂျီဖာရိုပြင်သစ်အနောက် ဖရီ" + @@ -22000,48 +23371,48 @@ const myLangStr string = "" + // Size: 10322 bytes "ိုနီးရှားအစ္ဂဘိုစီချွမ် ရီအီဒိုအိုက်စ်လန်အီတလီအီနုခ်တီတုဂျပန်ဂျာဗားဂျေ" + "ာ်ဂျီယာကွန်ဂိုကီကူယူကွန်းယာမာကာဇာခ်ကလာအ်လီဆပ်ခမာကန္နာဒါကိုရီးယားကနူရီက" + "က်ရှ်မီးယားကဒ်ကိုမီခိုနီရှ်ကာဂျစ်လက်တင်လူဇင်ဘတ်ဂန်ဒါလင်ဘာဂစ်ရှ်လင်ဂါလာ" + - "လာအိုလစ်သူဝေးနီးယားလူဘာ-ကတန်ဂါလတ်ဗီးယားမာလဂက်စီမာရှယ်လိဇ်မာအိုရီမက်စီဒ" + - "ိုးနီးယားမလေးရာလမ်မွန်ဂိုလီးယားမာရသီမလေးမော်လ်တာမြန်မာနော်ရူးတောင် အွန" + - "်န်ဒီဘီလီနီပေါအွန်ဒွန်ဂါဒတ်ချ်နော်ဝေး နီးနောစ်နော်ဝေး ဘွတ်ခ်မော်လ်တောင" + - "် အွန်န်ဘီလီနာဗာဟိုနရန်ဂျာအိုစီတန်အိုရိုမိုအိုရီရာအိုဆဲတစ်ခ်ပန်ချာပီပါ" + - "ဠိပိုလန်ပက်ရှ်တွန်းပေါ်တူဂီခီချူဝါအိုဝါရောမရွန်ဒီရိုမေနီယားရုရှကင်ရာဝန" + - "်ဒါသင်္သကရိုက်ဆာဒီနီးယားစင်ဒီမြောက် ဆာမိဆန်ဂိုစင်ဟာလာစလိုဗက်စလိုဗေးနီး" + - "ယားဆမိုအာရှိုနာဆိုမာလီအယ်လ်ဘေးနီးယားဆားဘီးယားဆွာဇီလန်တောင်ပိုင်း ဆိုသိ" + - "ုဆူဒန်ဆွီဒင်ဆွာဟီလီတမီးလ်တီလီဂူတာဂျစ်ထိုင်းတီဂ်ရင်ရာတာ့ခ်မင်နစ္စတန်တီဆ" + - "ဝါနာတွန်ဂါတူရကီဆွန်ဂါတာတာတဟီတီဝီဂါယူကရိန်းအူရ်ဒူဦးဇ်ဘက်ဗင်န်ဒါဗီယက်နမ်" + - "ဗိုလာပိုက်ဝါလူးန်ဝူလိုဖ်ဇိုစာဂျူးယိုရူဘာတရုတ်ဇူးလူးအာချေးဒန်မဲအဒိုင်ဂီ" + - "အာဂ်ဟိန်းအိန်နုအာလီယုတောင် အာလ်တိုင်းအင်ဂလို ဆက္ကစွန်အန်ဂီကာမာပုချီအာရ" + - "ာပါဟိုအာစုအက်စတူရီယန်းအာဝါဒီဘာလီဘာဆာဘိန်ဘာဘီနာအနောက် ဘဲလိုချီဘို့ဂျ်ပူ" + - "ရီဘီနီစစ္စီကာဗိုဒိုဘူဂစ်စ်ဘလင်စီဗူအာနိုချီဂါချူကီးစ်မာရီချော့တိုချာရို" + - "ကီချေယန်းဆိုရာနီခရီအိုလီဒါကိုတာဒါဂ်ဝါတိုင်တာဒယ်လာဝဲလ်ဒေါ့ဂ်ရစ်ဘ်ဇာမာအန" + - "ိမ့် ဆိုဘီယန်းဒူအလာအလယ်ပိုင်း ဒတ်ချ်ဂျိုလာ-ဖွန်ရီဒဇာဂါအမ်ဘူအာဖိခ်ရှေးဟ" + - "ောင်း အီဂျစ်အီကာဂျုခ်အလယ်ပိုင်း အင်္ဂလိပ်အီဝန်ဒိုဖိလစ်ပိုင်ဖော်န်အလယ်ပ" + - "ိုင်း ပြင်သစ်ဖရန်စီစ်မြောက် ဖရီစီရန်အရှေ့ ဖရီစီရန်ဖရူလီယန်းဂါဂါဂုဇ်ဂီး" + - "ဇ်ကာရီဗာတီအလယ်ပိုင်း အမြင့် ဂျာမန်ဂိုရိုတာလိုရှေးဟောင်း ဂရိဆွစ် ဂျာမန်" + - "ဂူစီးဂွစ်ချင်ဟာဝိုင်ယီဟီလီဂေနွန်မုံဆက္ကဆိုနီဟူပါအီဗန်အီဘီဘီယိုအီလိုကို" + - "အင်ဂုရှ်လိုဂျ်ဘန်ဂွမ်ဘာမချာမီဂျူဒီယို-ပါရှန်ဂျူဒီယို-အာရဗီကဘိုင်လ်ကချင" + - "်ဂျူအူကမ်ဘာကဘာဒင်တိုင်အပ်မာခွန်ဒီကဘူဗာဒီအာနူကိုရိုခါစီကိုရာ ချီအီနီကကိ" + - "ုကလန်ဂျင်ကင်ဘွန်ဒူကိုမီ-ပါမြက်ကွန်ကနီကပ်ပဲလ်ကရာချေး-ဘာကာကာရီလီယန်ကူရုပ" + - "်ခ်ရှန်ဘာလာဘာဖီအာကိုလိုနီယန်းကွမ်မိုက်လာဒီနိုလန်ဂီလက်ဇ်ဂီးယားလာကိုတာလိ" + - "ုဇီမြောက်လူရီလူဘာ-လူလူအာလွန်ဒါလူအိုမီဇိုလူရီအာမဒူရာမဂါဟီမိုင်သီလီမကာဆာ" + - "မာဆိုင်မို့ခ်ရှာမန်ဒဲမီရုမောရစ်ရှအလယ်ပိုင်း အိုင်းရစ်ရှ်မာခူဝါ-မီအီတို" + - "မီတာမစ်ခ်မက်ခ်စူကူမီနန်မန်ချူးမနိပူရမိုဟော့ခ်မိုစီမွန်ဒန်းဘာသာစကား အမျ" + - "ိုးမျိုးခရိခ်မီရန်ဒီးဇ်အီဇယာမာဇန်ဒါရန်နီနပိုလီတန်နာမာအနိမ့် ဂျာမန်နီဝါ" + - "ရီနီးရပ်စ်နူအဲယန်းကွာစီအိုအွန်ရဲဘွန်းနိုဂိုင်အွန်ကိုမြောက် ဆိုသိုနူအာန" + - "ရန်ကိုလီပန်ဂါစီနန်ပမ်ပန်ညာပါပီမင်တိုပလာအိုနိုင်ဂျီးရီးယား ပစ်ဂျင်ပါရှန" + - "် အဟောင်းပရူရှန်ကီခ်အီချီရပန်နူအီရရိုတွန်ဂန်ရွမ်ဘိုအာရိုမန်းနီးယန်းရူဝ" + - "မ်ဆန်ဒါဝီဆခါဆမ်ဘူရူဆန်တာလီအွန်ဂမ်းဘေးဆန်ဂုစစ္စလီစကော့တ်စီနာကိုရာဘိုရို" + - " ဆမ်နီအိုင်းရစ် ဟောင်းတာချယ်လ်ဟစ်ရှမ်းတောင် ဆာမိလူလီ ဆာမိအီနာရီ ဆာမိစခို" + - "းလ် ဆမ်မီဆိုနင်ကေးဆရာနန် တွန်ဂိုဆာဟိုဆူကူမာကိုမိုရီးယန်းဆီးရီးယားတင်မ်" + - "နဲတီဆိုတီတွမ်တီဂရီကလင်ဂွန်တော့ခ် ပိစင်တရိုကိုတမ်ဘူကာတူဗာလူတာဆာဝါခ်တူဗန" + - "်အလယ်အာ့တလာစ် တာမာဇိုက်အူမူရတ်အူဘန်ဒူမူလရင်းမြစ်ဗိုင်ဗွန်ဂျိုဝေါလ်ဆာဝိ" + - "ုလက်တာဝါရေးဝေါလ်ပီရီကာလ်မိုက်ဆိုဂါရန်ဘဲန်ရမ်ဘာကွမ်တုံမိုရိုကို တမဇိုက်" + - "ဇူနီဘာသာစကားနှင့် ပတ်သက်သောအရာ မရှိပါဇာဇာဩစတြီးယား ဂျာမန်အလီမဲန်နစ် ဂျ" + - "ာမန်ဩစတြေးလျှ အင်္ဂလိပ်ကနေဒါ အင်္ဂလိပ်ဗြိတိသျှ အင်္ဂလိပ်အမေရိကန် အင်္ဂ" + - "လိပ်စပိန် (ဥရောပ)ကနေဒါ ပြင်သစ်ဆွစ် ပြင်သစ်ဂျာမန် (နယ်သာလန်)ဖလီမစ်ရှ်ဘရ" + - "ာဇီး ပေါ်တူဂီဥရောပ ပေါ်တူဂီမော်လဒိုဗာကွန်ဂို ဆွာဟီလီ" - -var myLangIdx = []uint16{ // 611 elements + "လာအိုလစ်သူဝေးနီးယားလူဘာ-ကတန်ဂါလတ်ဗီးယားမာလဂက်စီမာရှယ်လိဇ်မာအိုရီမက်ဆီဒ" + + "ိုးနီးယားမလေယာလမ်မွန်ဂိုလီးယားမာရသီမလေးမော်လ်တာမြန်မာနော်ရူးမြောက် အွန" + + "်န်ဒီဘီလီနီပေါအွန်ဒွန်ဂါဒတ်ခ်ျနော်ဝေ နီးနောစ်နော်ဝေ ဘွတ်ခ်မော်လ်တောင် " + + "အွန်န်ဘီလီနာဗာဟိုနရန်ဂျာအိုစီတန်အိုရိုမိုအိုရီရာအိုဆဲတစ်ခ်ပန်ချာပီပါဠိ" + + "ပိုလန်ပက်ရှ်တွန်းပေါ်တူဂီခီချူဝါအိုဝါရောမရွန်ဒီရိုမေနီယားရုရှကင်ရာဝန်ဒ" + + "ါသင်္သကရိုက်ဆာဒီနီးယားစင်ဒီမြောက် ဆာမိဆန်ဂိုစင်ဟာလာဆလိုဗက်ဆလိုဗေးနီးယာ" + + "းဆမိုအာရှိုနာဆိုမာလီအယ်လ်ဘေးနီးယားဆားဘီးယားဆွာဇီလန်တောင်ပိုင်း ဆိုသိုဆ" + + "ူဒန်ဆွီဒင်ဆွာဟီလီတမီးလ်တီလီဂူတာဂျစ်ထိုင်းတီဂ်ရင်ယာတာ့ခ်မင်နစ္စတန်တီဆဝါ" + + "နာတွန်ဂါတူရကီဆွန်ဂါတာတာတဟီတီဝီဂါယူကရိန်းအူရ်ဒူဥဇဘတ်ဗင်န်ဒါဗီယက်နမ်ဗိုလ" + + "ာပိုက်ဝါလူးန်ဝူလိုဖ်ဇိုစာဂျူးယိုရူဘာတရုတ်ဇူးလူးအာချေးဒန်မဲအဒိုင်ဂီအာဂ်" + + "ဟိန်းအိန်နုအာလီယုတောင် အာလ်တိုင်းအင်ဂလို ဆက္ကစွန်အန်ဂီကာမာပုချီအာရာပါဟ" + + "ိုအာစုအက်စတူရီယန်းအာဝါဒီဘာလီဘာဆာဘိန်ဘာဘီနာအနောက် ဘဲလိုချီဘို့ဂျ်ပူရီဘီ" + + "နီစစ္စီကာဗိုဒိုဘူဂစ်စ်ဘလင်စီဗူအာနိုချီဂါချူကီးစ်မာရီချော့တိုချာရိုကီချ" + + "ေယန်းဆိုရာနီခရီအိုလီဒါကိုတာဒါဂ်ဝါတိုင်တာဒယ်လာဝဲလ်ဒေါ့ဂ်ရစ်ဘ်ဇာမာအနိမ့်" + + " ဆိုဘီယန်းဒူအလာအလယ်ပိုင်း ဒတ်ချ်ဂျိုလာ-ဖွန်ရီဒဇာဂါအမ်ဘူအာဖိခ်ရှေးဟောင်း " + + "အီဂျစ်အီကာဂျုခ်အလယ်ပိုင်း အင်္ဂလိပ်အီဝန်ဒိုဖိလစ်ပိုင်ဖော်န်အလယ်ပိုင်း " + + "ပြင်သစ်ဖရန်စီစ်မြောက် ဖရီစီရန်အရှေ့ ဖရီစီရန်ဖရူလီယန်းဂါဂါဂုဇ်ဂီးဇ်ကာရီ" + + "ဗာတီအလယ်ပိုင်း အမြင့် ဂျာမန်ဂိုရိုတာလိုရှေးဟောင်း ဂရိဆွစ် ဂျာမန်ဂူစီးဂ" + + "ွစ်ချင်ဟာဝိုင်ယီဟီလီဂေနွန်မုံဆက္ကဆိုနီဟူပါအီဗန်အီဘီဘီယိုအီလိုကိုအင်ဂုရ" + + "ှ်လိုဂျ်ဘန်ဂွမ်ဘာမချာမီဂျူဒီယို-ပါရှန်ဂျူဒီယို-အာရဗီကဘိုင်လ်ကချင်ဂျူအူ" + + "ကမ်ဘာကဘာဒင်တိုင်အပ်မာခွန်ဒီကဘူဗာဒီအာနူကိုရိုခါစီကိုရာ ချီအီနီကကိုကလန်ဂ" + + "ျင်ကင်ဘွန်ဒူကိုမီ-ပါမြက်ကွန်ကနီကပ်ပဲလ်ကရာချေး-ဘာကာကာရီလီယန်ကူရုပ်ခ်ရှန" + + "်ဘာလာဘာဖီအာကိုလိုနီယန်းကွမ်မိုက်လာဒီနိုလန်ဂီလက်ဇ်ဂီးယားလာကိုတာလိုဇီမြေ" + + "ာက်လူရီလူဘာ-လူလူအာလွန်ဒါလူအိုမီဇိုလူရီအာမဒူရာမဂါဟီမိုင်သီလီမကာဆာမာဆိုင" + + "်မို့ခ်ရှာမန်ဒဲမီရုမောရစ်ရှအလယ်ပိုင်း အိုင်းရစ်ရှ်မာခူဝါ-မီအီတိုမီတာမစ" + + "်ခ်မက်ခ်စူကူမီနန်မန်ချူးမနိပူရမိုဟော့ခ်မိုစီမွန်ဒန်းဘာသာစကား အမျိုးမျိ" + + "ုးခရိခ်မီရန်ဒီးဇ်အီဇယာမာဇန်ဒါရန်နီနပိုလီတန်နာမာအနိမ့် ဂျာမန်နီဝါရီနီးရ" + + "ပ်စ်နူအဲယန်းကွာစီအိုအွန်ရဲဘွန်းနိုဂိုင်အွန်ကိုမြောက် ဆိုသိုနူအာနရန်ကို" + + "လီပန်ဂါစီနန်ပမ်ပန်ညာပါပီမင်တိုပလာအိုနိုင်ဂျီးရီးယား ပစ်ဂျင်ပါရှန် အဟော" + + "င်းပရူရှန်ကီခ်အီချီရပန်နူအီရရိုတွန်ဂန်ရွမ်ဘိုအာရိုမန်းနီးယန်းရူဝမ်ဆန်ဒ" + + "ါဝီဆခါဆမ်ဘူရူဆန်တာလီအွန်ဂမ်းဘေးဆန်ဂုစစ္စလီစကော့တ်စီနာကိုရာဘိုရို ဆမ်နီ" + + "အိုင်းရစ် ဟောင်းတာချယ်လ်ဟစ်ရှမ်းတောင် ဆာမိလူလီ ဆာမိအီနာရီ ဆာမိစခိုးလ် " + + "ဆမ်မီဆိုနင်ကေးဆရာနန် တွန်ဂိုဆာဟိုဆူကူမာကိုမိုရီးယန်းဆီးရီးယားတင်မ်နဲတီ" + + "ဆိုတီတွမ်တီဂရီကလင်ဂွန်တော့ခ် ပိစင်တရိုကိုတမ်ဘူကာတူဗာလူတာဆာဝါခ်တူဗန်အလယ" + + "်အာ့တလာစ် တာမာဇိုက်အူမူရတ်အူဘန်ဒူမသိသော ဘာသာဗိုင်ဗွန်ဂျိုဝေါလ်ဆာဝိုလက်" + + "တာဝါရေးဝေါလ်ပီရီကာလ်မိုက်ဆိုဂါရန်ဘဲန်ရမ်ဘာကွမ်တုံမိုရိုကို တမဇိုက်ဇူနီ" + + "ဘာသာစကားနှင့် ပတ်သက်သောအရာ မရှိပါဇာဇာဩစတြီးယား ဂျာမန်အလီမဲန်နစ် ဂျာမန်" + + "ဩစတြေးလျှ အင်္ဂလိပ်ကနေဒါ အင်္ဂလိပ်ဗြိတိသျှ အင်္ဂလိပ်အမေရိကန် အင်္ဂလိပ်" + + "စပိန် (ဥရောပ)ကနေဒါ ပြင်သစ်ဆွစ် ပြင်သစ်ဂျာမန် (နယ်သာလန်)ဖလီမစ်ရှ်ဘရာဇီး" + + " ပေါ်တူဂီဥရောပ ပေါ်တူဂီမော်လဒိုဗာကွန်ဂို ဆွာဟီလီ" + +var myLangIdx = []uint16{ // 613 elements // Entry 0 - 3F 0x0000, 0x000c, 0x0027, 0x0027, 0x0048, 0x0057, 0x0075, 0x008d, 0x009c, 0x00a8, 0x00c3, 0x00db, 0x00ff, 0x0117, 0x012f, 0x0156, @@ -22057,239 +23428,239 @@ var myLangIdx = []uint16{ // 611 elements 0x06f7, 0x0715, 0x071e, 0x0733, 0x074e, 0x075d, 0x0781, 0x078a, 0x0799, 0x07b1, 0x07c3, 0x07d5, 0x07ed, 0x07fc, 0x081d, 0x0832, 0x0841, 0x086b, 0x088a, 0x08a5, 0x08bd, 0x08db, 0x08f0, 0x091d, - 0x0938, 0x095f, 0x096e, 0x097a, 0x0992, 0x09a4, 0x09b9, 0x09ed, - 0x09fc, 0x0a1a, 0x0a2c, 0x0a5a, 0x0a94, 0x0ac2, 0x0ad7, 0x0aec, - 0x0b04, 0x0b04, 0x0b1f, 0x0b34, 0x0b52, 0x0b6a, 0x0b76, 0x0b88, + 0x0935, 0x095c, 0x096b, 0x0977, 0x098f, 0x09a1, 0x09b6, 0x09ed, + 0x09fc, 0x0a1a, 0x0a2c, 0x0a57, 0x0a8e, 0x0abc, 0x0ad1, 0x0ae6, + 0x0afe, 0x0afe, 0x0b19, 0x0b2e, 0x0b4c, 0x0b64, 0x0b70, 0x0b82, // Entry 80 - BF - 0x0ba9, 0x0bc1, 0x0be5, 0x0bf1, 0x0c03, 0x0c21, 0x0c2d, 0x0c4b, - 0x0c6c, 0x0c8a, 0x0c99, 0x0cb8, 0x0cca, 0x0cdf, 0x0cf4, 0x0d1b, - 0x0d2d, 0x0d3f, 0x0d54, 0x0d7e, 0x0d99, 0x0db1, 0x0de5, 0x0df4, - 0x0e06, 0x0e1b, 0x0e2d, 0x0e3f, 0x0e51, 0x0e63, 0x0e7e, 0x0eab, - 0x0ec0, 0x0ed2, 0x0ee1, 0x0ef3, 0x0eff, 0x0f0e, 0x0f1a, 0x0f32, - 0x0f44, 0x0f59, 0x0f6e, 0x0f86, 0x0fa4, 0x0fb9, 0x0fce, 0x0fdd, - 0x0fe9, 0x0ffe, 0x0ffe, 0x100d, 0x101f, 0x1031, 0x1031, 0x1040, - 0x1058, 0x1058, 0x1058, 0x1073, 0x1085, 0x1085, 0x1085, 0x1097, + 0x0ba3, 0x0bbb, 0x0bdf, 0x0beb, 0x0bfd, 0x0c1b, 0x0c27, 0x0c45, + 0x0c66, 0x0c84, 0x0c93, 0x0cb2, 0x0cc4, 0x0cd9, 0x0cee, 0x0d15, + 0x0d27, 0x0d39, 0x0d4e, 0x0d78, 0x0d93, 0x0dab, 0x0ddf, 0x0dee, + 0x0e00, 0x0e15, 0x0e27, 0x0e39, 0x0e4b, 0x0e5d, 0x0e78, 0x0ea5, + 0x0eba, 0x0ecc, 0x0edb, 0x0eed, 0x0ef9, 0x0f08, 0x0f14, 0x0f2c, + 0x0f3e, 0x0f4d, 0x0f62, 0x0f7a, 0x0f98, 0x0fad, 0x0fc2, 0x0fd1, + 0x0fdd, 0x0ff2, 0x0ff2, 0x1001, 0x1013, 0x1025, 0x1025, 0x1034, + 0x104c, 0x104c, 0x104c, 0x1067, 0x1079, 0x1079, 0x1079, 0x108b, // Entry C0 - FF - 0x1097, 0x10c5, 0x10f3, 0x1108, 0x1108, 0x111d, 0x111d, 0x1138, - 0x1138, 0x1138, 0x1138, 0x1138, 0x1138, 0x1144, 0x1144, 0x1168, - 0x1168, 0x117a, 0x117a, 0x1186, 0x1186, 0x1192, 0x1192, 0x1192, - 0x1192, 0x1192, 0x11a4, 0x11a4, 0x11b0, 0x11b0, 0x11b0, 0x11db, - 0x11fc, 0x11fc, 0x1208, 0x1208, 0x1208, 0x121d, 0x121d, 0x121d, - 0x121d, 0x121d, 0x122f, 0x122f, 0x122f, 0x1244, 0x1244, 0x1250, - 0x1250, 0x1250, 0x1250, 0x1250, 0x1250, 0x126b, 0x127a, 0x127a, - 0x127a, 0x1292, 0x129e, 0x129e, 0x12b6, 0x12b6, 0x12ce, 0x12e3, + 0x108b, 0x10b9, 0x10e7, 0x10fc, 0x10fc, 0x1111, 0x1111, 0x112c, + 0x112c, 0x112c, 0x112c, 0x112c, 0x112c, 0x1138, 0x1138, 0x115c, + 0x115c, 0x116e, 0x116e, 0x117a, 0x117a, 0x1186, 0x1186, 0x1186, + 0x1186, 0x1186, 0x1198, 0x1198, 0x11a4, 0x11a4, 0x11a4, 0x11cf, + 0x11f0, 0x11f0, 0x11fc, 0x11fc, 0x11fc, 0x1211, 0x1211, 0x1211, + 0x1211, 0x1211, 0x1223, 0x1223, 0x1223, 0x1238, 0x1238, 0x1244, + 0x1244, 0x1244, 0x1244, 0x1244, 0x1244, 0x1244, 0x125f, 0x126e, + 0x126e, 0x126e, 0x1286, 0x1292, 0x1292, 0x12aa, 0x12aa, 0x12c2, // Entry 100 - 13F - 0x12f8, 0x12f8, 0x12f8, 0x12f8, 0x1310, 0x1310, 0x1325, 0x1337, - 0x134c, 0x1367, 0x1367, 0x1388, 0x1388, 0x1394, 0x1394, 0x13c2, - 0x13c2, 0x13d1, 0x1402, 0x1427, 0x1427, 0x1436, 0x1445, 0x1457, - 0x1457, 0x1488, 0x14a3, 0x14a3, 0x14dd, 0x14dd, 0x14f5, 0x14f5, - 0x14f5, 0x1513, 0x1513, 0x1525, 0x1525, 0x1559, 0x1571, 0x1571, - 0x159c, 0x15c4, 0x15df, 0x15e5, 0x15f7, 0x15f7, 0x15f7, 0x15f7, - 0x15f7, 0x1606, 0x161e, 0x161e, 0x1662, 0x1662, 0x1662, 0x1662, - 0x1683, 0x1683, 0x1683, 0x16ab, 0x16ca, 0x16ca, 0x16ca, 0x16d9, + 0x12d7, 0x12ec, 0x12ec, 0x12ec, 0x12ec, 0x1304, 0x1304, 0x1319, + 0x132b, 0x1340, 0x135b, 0x135b, 0x137c, 0x137c, 0x1388, 0x1388, + 0x13b6, 0x13b6, 0x13c5, 0x13f6, 0x141b, 0x141b, 0x142a, 0x1439, + 0x144b, 0x144b, 0x147c, 0x1497, 0x1497, 0x14d1, 0x14d1, 0x14e9, + 0x14e9, 0x14e9, 0x1507, 0x1507, 0x1519, 0x1519, 0x154d, 0x1565, + 0x1565, 0x1590, 0x15b8, 0x15d3, 0x15d9, 0x15eb, 0x15eb, 0x15eb, + 0x15eb, 0x15eb, 0x15fa, 0x1612, 0x1612, 0x1656, 0x1656, 0x1656, + 0x1656, 0x1677, 0x1677, 0x1677, 0x169f, 0x16be, 0x16be, 0x16be, // Entry 140 - 17F - 0x16f1, 0x16f1, 0x16f1, 0x170c, 0x170c, 0x172a, 0x172a, 0x1733, - 0x174e, 0x174e, 0x175a, 0x1769, 0x1784, 0x179c, 0x17b4, 0x17b4, - 0x17b4, 0x17cf, 0x17e1, 0x17f3, 0x181e, 0x1846, 0x1846, 0x1846, - 0x185e, 0x186d, 0x187c, 0x188b, 0x188b, 0x189d, 0x189d, 0x18b5, - 0x18cd, 0x18ee, 0x18ee, 0x1900, 0x1900, 0x190c, 0x190c, 0x1931, - 0x1931, 0x1931, 0x193d, 0x1955, 0x1970, 0x1992, 0x19a7, 0x19a7, - 0x19bc, 0x19de, 0x19de, 0x19de, 0x19f9, 0x1a11, 0x1a29, 0x1a3b, - 0x1a5f, 0x1a7a, 0x1a7a, 0x1a8f, 0x1a9e, 0x1a9e, 0x1a9e, 0x1abf, + 0x16cd, 0x16e5, 0x16e5, 0x16e5, 0x1700, 0x1700, 0x171e, 0x171e, + 0x1727, 0x1742, 0x1742, 0x174e, 0x175d, 0x1778, 0x1790, 0x17a8, + 0x17a8, 0x17a8, 0x17c3, 0x17d5, 0x17e7, 0x1812, 0x183a, 0x183a, + 0x183a, 0x1852, 0x1861, 0x1870, 0x187f, 0x187f, 0x1891, 0x1891, + 0x18a9, 0x18c1, 0x18e2, 0x18e2, 0x18f4, 0x18f4, 0x1900, 0x1900, + 0x1925, 0x1925, 0x1925, 0x1931, 0x1949, 0x1964, 0x1986, 0x199b, + 0x199b, 0x19b0, 0x19d2, 0x19d2, 0x19d2, 0x19ed, 0x1a05, 0x1a1d, + 0x1a2f, 0x1a53, 0x1a6e, 0x1a6e, 0x1a83, 0x1a92, 0x1a92, 0x1a92, // Entry 180 - 1BF - 0x1abf, 0x1abf, 0x1abf, 0x1ad4, 0x1ad4, 0x1ad4, 0x1ae3, 0x1b01, - 0x1b01, 0x1b20, 0x1b20, 0x1b32, 0x1b41, 0x1b50, 0x1b62, 0x1b62, - 0x1b62, 0x1b71, 0x1b71, 0x1b80, 0x1b9b, 0x1baa, 0x1baa, 0x1bbf, - 0x1bbf, 0x1bda, 0x1bda, 0x1be9, 0x1bf5, 0x1c0d, 0x1c50, 0x1c78, - 0x1c84, 0x1ca2, 0x1cbd, 0x1cd2, 0x1ce4, 0x1cff, 0x1d0e, 0x1d0e, - 0x1d26, 0x1d60, 0x1d6f, 0x1d8d, 0x1d8d, 0x1d8d, 0x1d8d, 0x1d9c, - 0x1dc0, 0x1dc0, 0x1ddb, 0x1de7, 0x1e0c, 0x1e1e, 0x1e36, 0x1e4e, - 0x1e4e, 0x1e66, 0x1e87, 0x1e9f, 0x1e9f, 0x1e9f, 0x1eb4, 0x1ed9, + 0x1ab3, 0x1ab3, 0x1ab3, 0x1ab3, 0x1ac8, 0x1ac8, 0x1ac8, 0x1ac8, + 0x1ad7, 0x1af5, 0x1af5, 0x1b14, 0x1b14, 0x1b26, 0x1b35, 0x1b44, + 0x1b56, 0x1b56, 0x1b56, 0x1b65, 0x1b65, 0x1b74, 0x1b8f, 0x1b9e, + 0x1b9e, 0x1bb3, 0x1bb3, 0x1bce, 0x1bce, 0x1bdd, 0x1be9, 0x1c01, + 0x1c44, 0x1c6c, 0x1c78, 0x1c96, 0x1cb1, 0x1cc6, 0x1cd8, 0x1cf3, + 0x1d02, 0x1d02, 0x1d1a, 0x1d54, 0x1d63, 0x1d81, 0x1d81, 0x1d81, + 0x1d81, 0x1d90, 0x1db4, 0x1db4, 0x1dcf, 0x1ddb, 0x1e00, 0x1e12, + 0x1e2a, 0x1e42, 0x1e42, 0x1e5a, 0x1e7b, 0x1e93, 0x1e93, 0x1e93, // Entry 1C0 - 1FF - 0x1ee5, 0x1ee5, 0x1ee5, 0x1f00, 0x1f00, 0x1f00, 0x1f00, 0x1f00, - 0x1f1e, 0x1f1e, 0x1f36, 0x1f54, 0x1f66, 0x1f66, 0x1fa9, 0x1fa9, - 0x1fa9, 0x1fd1, 0x1fd1, 0x1fd1, 0x1fd1, 0x1fd1, 0x1fd1, 0x1fe6, - 0x1fe6, 0x2001, 0x2001, 0x2001, 0x2019, 0x203a, 0x203a, 0x203a, - 0x204f, 0x204f, 0x204f, 0x204f, 0x204f, 0x207f, 0x208e, 0x20a3, - 0x20ac, 0x20ac, 0x20c1, 0x20c1, 0x20d6, 0x20d6, 0x20f7, 0x2106, - 0x2118, 0x212d, 0x212d, 0x212d, 0x212d, 0x2139, 0x2139, 0x2139, - 0x216a, 0x2198, 0x2198, 0x21b9, 0x21c8, 0x21c8, 0x21c8, 0x21c8, + 0x1ea8, 0x1ecd, 0x1ed9, 0x1ed9, 0x1ed9, 0x1ef4, 0x1ef4, 0x1ef4, + 0x1ef4, 0x1ef4, 0x1f12, 0x1f12, 0x1f2a, 0x1f48, 0x1f5a, 0x1f5a, + 0x1f9d, 0x1f9d, 0x1f9d, 0x1fc5, 0x1fc5, 0x1fc5, 0x1fc5, 0x1fc5, + 0x1fc5, 0x1fda, 0x1fda, 0x1ff5, 0x1ff5, 0x1ff5, 0x200d, 0x202e, + 0x202e, 0x202e, 0x2043, 0x2043, 0x2043, 0x2043, 0x2043, 0x2073, + 0x2082, 0x2097, 0x20a0, 0x20a0, 0x20b5, 0x20b5, 0x20ca, 0x20ca, + 0x20eb, 0x20fa, 0x210c, 0x2121, 0x2121, 0x2121, 0x2121, 0x212d, + 0x212d, 0x212d, 0x215e, 0x218c, 0x218c, 0x21ad, 0x21bc, 0x21bc, // Entry 200 - 23F - 0x21c8, 0x21e4, 0x21fd, 0x221c, 0x2241, 0x225c, 0x225c, 0x2284, - 0x2284, 0x2293, 0x2293, 0x22a5, 0x22a5, 0x22a5, 0x22cc, 0x22cc, - 0x22e7, 0x22e7, 0x22e7, 0x22fc, 0x230b, 0x230b, 0x231d, 0x232c, - 0x232c, 0x232c, 0x232c, 0x2344, 0x2344, 0x2344, 0x2344, 0x2344, - 0x2366, 0x2366, 0x237b, 0x237b, 0x237b, 0x237b, 0x2390, 0x23a2, - 0x23ba, 0x23c9, 0x2409, 0x241e, 0x241e, 0x2433, 0x2454, 0x2463, - 0x2463, 0x2463, 0x2463, 0x2463, 0x2463, 0x2463, 0x247b, 0x2490, - 0x24a8, 0x24b7, 0x24b7, 0x24d2, 0x24d2, 0x24ed, 0x24ed, 0x24fc, + 0x21bc, 0x21bc, 0x21bc, 0x21d8, 0x21f1, 0x2210, 0x2235, 0x2250, + 0x2250, 0x2278, 0x2278, 0x2287, 0x2287, 0x2299, 0x2299, 0x2299, + 0x22c0, 0x22c0, 0x22db, 0x22db, 0x22db, 0x22f0, 0x22ff, 0x22ff, + 0x2311, 0x2320, 0x2320, 0x2320, 0x2320, 0x2338, 0x2338, 0x2338, + 0x2338, 0x2338, 0x235a, 0x235a, 0x236f, 0x236f, 0x236f, 0x236f, + 0x2384, 0x2396, 0x23ae, 0x23bd, 0x23fd, 0x2412, 0x2412, 0x2427, + 0x2446, 0x2455, 0x2455, 0x2455, 0x2455, 0x2455, 0x2455, 0x2455, + 0x246d, 0x2482, 0x249a, 0x24a9, 0x24a9, 0x24c4, 0x24c4, 0x24df, // Entry 240 - 27F - 0x24fc, 0x24fc, 0x2511, 0x2520, 0x2520, 0x2535, 0x2535, 0x2535, - 0x2535, 0x2535, 0x2566, 0x2572, 0x25d1, 0x25dd, 0x25dd, 0x25dd, - 0x260b, 0x263c, 0x2673, 0x269e, 0x26d2, 0x2706, 0x2706, 0x2727, - 0x2727, 0x2727, 0x274c, 0x276e, 0x279b, 0x27b6, 0x27e1, 0x2809, - 0x2827, 0x2827, 0x2852, -} // Size: 1246 bytes - -const neLangStr string = "" + // Size: 13512 bytes + 0x24df, 0x24ee, 0x24ee, 0x24ee, 0x2503, 0x2512, 0x2512, 0x2527, + 0x2527, 0x2527, 0x2527, 0x2527, 0x2558, 0x2564, 0x25c3, 0x25cf, + 0x25cf, 0x25cf, 0x25fd, 0x262e, 0x2665, 0x2690, 0x26c4, 0x26f8, + 0x26f8, 0x2719, 0x2719, 0x2719, 0x273e, 0x2760, 0x278d, 0x27a8, + 0x27d3, 0x27fb, 0x2819, 0x2819, 0x2844, +} // Size: 1250 bytes + +const neLangStr string = "" + // Size: 13518 bytes "अफारअब्खाजियालीअवेस्तानअफ्रिकान्सआकानअम्हारिकअरागोनीअरबीआसामीअवारिकऐमारा" + "अजरबैजानीबास्किरबेलारुसीबुल्गेरियालीबिस्लामबाम्बाराबंगालीतिब्बतीब्रेटन" + "बोस्नियालीक्याटालनचेचेनचामोर्रोकोर्सिकनक्रीचेकचर्च स्लाभिकचुभासवेल्शडे" + - "निसजर्मनदिबेहीजोङ्खाइवीग्रीकअङ्ग्रेजीएस्पेरान्तोस्पेनीइस्टोनियालीबास्क" + - "फारसीफुलाहफिनिसफिजियालीफारोजफ्रान्सेलीफ्रिजियनआयरिसस्कटिस गाएलिकगलिसिय" + - "ालीगुवारानीगुजरातीमान्क्सहाउसाहिब्रुहिन्दीहिरी मोटुक्रोयसियालीहैटियाली" + - " क्रियोलहङ्गेरियालीआर्मेनियालीहेरेरोइन्टर्लिङ्गुआइन्डोनेसियालीइन्टरलिङ्ग" + - "्वेइग्बोसिचुआन यिइनुपिआक्इडोआइसल्यान्डियालीइटालेलीइनुक्टिटुटजापानीजाभा" + - "नीजर्जियालीकोङ्गोकिकुयुकुआन्यामाकाजाखकालालिसुटखमेरकन्नाडाकोरियालीकानुर" + - "ीकास्मिरीकुर्दीकोमीकोर्निसकिर्गिजल्याटिनलक्जेम्बर्गीगान्डालिम्बुर्गीलि" + - "ङ्गालालाओलिथुआनियालीलुबा-काताङ्गालात्भियालीमलागासीमार्सालीमाओरीम्यासेड" + - "ोनियालीमलयालममङ्गोलियालीमराठीमलायमाल्टिजबर्मेलीनाउरूउत्तरी न्डेबेलेनेप" + - "ालीन्दोन्गाडचनर्वेली नाइनोर्स्कनर्वेली बोकमालदक्षिण न्देबेलेनाभाजोन्या" + - "न्जाअक्सिटनओजिब्वाओरोमोउडियाअोस्सेटिकपंजाबीपालीपोलिसपास्तोपोर्तुगीक्वे" + - "चुवारोमानिसरुन्डीरोमानियालीरसियालीकिन्यारवान्डासंस्कृतसार्डिनियालीसिन्" + - "धीउत्तरी सामीसाङ्गोसिन्हालीस्लोभाकियालीस्लोभेनियालीसामोआशोनासोमालीअल्ब" + - "ानियालीसर्बियालीस्वातीदक्षिणी सोथोसुडानीस्विडिसस्वाहिलीतामिलतेलुगुताजि" + - "कथाईटिग्रिन्याटर्कमेनट्स्वानाटोङ्गनटर्किशट्सोङ्गातातारटाहिटियनउइघुरयुक" + - "्रेनीउर्दुउज्बेकीभेन्डाभियतनामीभोलापिकवाल्लुनवुलुफखोसायिद्दिसयोरूवाचिन" + - "ियाँजुलुअचाइनिजअकोलीअदाङमेअदिघेअफ्रिहिलीआघेमअइनुअक्कादियालीअलाबामाअलेउ" + - "टघेग अल्बानियालीदक्षिणी आल्टाइपुरातन अङ्ग्रेजीअङ्गिकाअरामाइकमापुचेअराओ" + - "नाअरापाहोअल्जेरियाली अरबीअरावाकमोरोक्कोली अरबीइजिप्ट अरबीआसुअमेरिकी सा" + - "ङ्केतिक भाषाअस्टुरियालीकोटावाअवधीबालुचीबालीबाभारियालीबासाबामुनबाताक तो" + - "बाघोमालाबेजाबेम्बाबेटावीबेनाबाफुटबडागापश्चिम बालोचीभोजपुरीबिकोलबिनीबन्" + - "जारकोमसिक्सिकाविष्णुप्रियाबाख्तिआरीब्रजब्राहुइबोडोअकुजबुरिआतबुगिनियाली" + - "बुलुब्लिनमेडुम्बाकाड्डोक्यारिबकायुगाअट्सामसेबुआनोचिगाचिब्चाचागाटाईचुके" + - "सेमारीचिनुक जार्गनचोक्टावचिपेव्यानचेरोकीचेयेन्नेकेन्द्रीय कुर्दीकोप्टि" + - "ककापिज्नोनक्रिमियाली तुर्कसेसेल्वा क्रिओल फ्रान्सेलीकासुवियनडाकोटादार्" + - "ग्वाताइतादेलावरदोग्रिबदिन्काजर्माडोगरीतल्लो सोर्बियनकेन्द्रीय दुसुनदुव" + - "ालामध्य डचजोला-फोनिलद्युलादाजागाएम्बुएफिकएमिलियालीपुरातन इजिप्टीएकाजुक" + - "एलामाइटमध्य अङ्ग्रेजीकेन्द्रीय युपिकइवोन्डोएक्सट्रेमादुरालीफाङफिलिपिनी" + - "फोनकाहुन फ्रान्सेलीमध्य फ्रान्सेलीपुरातन फ्रान्सेलीअर्पितानउत्तरी फ्रि" + - "जीपूर्वी फ्रिसियालीफ्रिउलियालीगागगाउजगान चिनियाँगायोग्बायागिजगिल्बर्टी" + - "गिलाकीमध्य उच्च जर्मनपुरातन उच्च जर्मनगोवा कोन्कानीगोन्डीगोरोन्टालोगोथ" + - "िकग्रेबोपुरातन ग्रिकस्वीस जर्मनफ्राफ्रागुसीगुइचिनहाइदाहक्का चिनियाँहवा" + - "इयनफिजी हिन्दीहिलिगायनोनहिट्टिटेहमोङमाथिल्लो सोर्बियनहुपाइबानइबिबियोइय" + - "ोकोइन्गसइन्ग्रियालीजमैकाली क्रेओले अङ्ग्रेजीलोज्बानन्गोम्बामाचामेजुडिय" + - "ो-फारसीजुडियो-अरबीजुटिसकारा-काल्पाककाबिलकाचिनज्जुकाम्बाकावीकाबार्दियाल" + - "ीकानेम्बुटुआपमाकोन्डेकाबुभेर्डियानुकेनयाङकोरोकाइनगाङखासीखोटानीकोयरा चि" + - "नीखोवारकिर्मान्जकीकाकोकालेन्जिनकिम्बुन्डुकोमी-पर्म्याककोन्कानीकोस्राली" + - "क्पेल्लेकाराचाय-बाल्करक्रिओकिनाराय-एकारेलियालीकुरुखशाम्बालाबाफियाकोलोग" + - "्नियालीकुमिककुतेनाइलाडिनोलाङ्गीलाहन्डालाम्बालाज्घियालीलिङ्गुवा फ्राङ्क" + - "ा नोभालिगुरियालीलिभोनियालीलाकोतालोम्बार्डमोङ्गोलोजीउत्तरी लुरीलाट्गाली" + - "लुबा-लुलुआलुइसेनोलुन्डालुओमिजोलुइयासाहित्यिक चिनियाँलाजमादुरेसेमाफामगध" + - "ीमैथिलीमाकासारमान्दिङोमसाईमाबामोक्षमन्दरमेन्डेमेरूमोरिसेनमध्य आयरिसमाख" + - "ुवा-मिट्टोमेटामिकमाकमिनाङकाबाउमान्चुमनिपुरीमोहकमोस्सीमुन्डाङबहुभाषाक्र" + - "िकमिरान्डीमाडवारीमेन्टावाईम्येनेइर्ज्यामजानडेरानीमिन नान चिनियाँनेपोलि" + - "टाननामातल्लो जर्मननेवारीनियासनिउएनअओ नागाक्वासियोन्गिएम्बुननोगाइपुरानो" + - " नोर्सेनोभियलनकोउत्तरी सोथोनुएरपरम्परागत नेवारीन्यामवेजीन्यान्कोलन्योरोन" + - "जिमाओसागेअटोमन तुर्कीपाङ्गासिनानपाहलावीपामपाङ्गापापियामेन्तोपालाउवालीप" + - "िकार्डनाइजेरियाली पिड्जिनपेन्सिलभानियाली जर्मनपुरातन फारसीपालाटिन जर्म" + - "नफोनिसियालीपिएडमोन्तेसेपोन्टिकप्रसियालीपुरातन प्रोभेन्कालकिचेचिम्बोराज" + - "ो उच्चस्थान किचुआराजस्थानीरापानुईरारोटोङ्गानरोम्बोअरोमानीयालीर्\u200cव" + - "ासान्डेअसाखासाम्बुरूसान्तालीन्गामबायसाङ्गुसिसिलियालीस्कट्सदक्षिणी कुर्" + - "दिशसेनाकोयराबोरो सेन्नीपुरातन आयरीसटाचेल्हिटशानचाड अरबीतल्लो सिलेसियाल" + - "ीदक्षिणी सामीलुले सामीइनारी सामीस्कोइट सामीसोनिन्केस्रानान टोङ्गोसाहोस" + - "ुकुमासुसूसुमेरियालीकोमोरीपरम्परागत सिरियाकसिरियाकटिम्नेटेसोटेटुमटिग्रे" + - "क्लिङ्गनन्यास टोङ्गाटोक पिसिनटारोकोमुस्लिम टाटटुम्बुकाटुभालुतासावाकटुभ" + - "िनियालीकेन्द्रीय एट्लास टामाजिघटउड्मुर्टउम्बुन्डीrootभाइमुख्य-फ्राङ्को" + - "नियालीभुन्जोवाल्सरवोलेट्टावारेवार्ल्पिरीकाल्मिकमिनग्रेलियालीसोगायाङ्बे" + - "नयेम्बान्हिनगातुकान्टोनियालीब्लिससिम्बोल्समानक मोरोक्कोन तामाजिघटजुनीभ" + - "ाषिक सामग्री छैनजाजाआधुनिक मानक अरबीअस्ट्रियाली जर्मनस्वीस हाई जर्मनअस" + - "्ट्रेलियाली अङ्ग्रेजीक्यानाडेली अङ्ग्रेजीबेलायती अङ्ग्रेजीअमेरिकी अङ्ग" + - "्रेजील्याटिन अमेरिकी स्पेनीयुरोपेली स्पेनीमेक्सिकन स्पेनीक्यानेडाली फ्" + - "रान्सेलीतल्लो साक्सनफ्लेमिसब्राजिली पोर्तुगीयुरोपेली पोर्तुगीकङ्गो स्व" + - "ाहिलीसरलिकृत चिनियाँपरम्परागत चिनियाँ" - -var neLangIdx = []uint16{ // 613 elements + "निसजर्मनदिबेहीजोङ्खाइवीग्रीकअङ्ग्रेजीएस्पेरान्तोस्पेनीइस्टोनियनबास्कफा" + + "रसीफुलाहफिनिसफिजियनफारोजफ्रान्सेलीपश्चिमी फ्रिसियनआइरिसस्कटिस गाएलिकगल" + + "िसियालीगुवारानीगुजरातीमान्क्सहाउसाहिब्रुहिन्दीहिरी मोटुक्रोयसियालीहैटि" + + "याली क्रियोलहङ्गेरियालीआर्मेनियालीहेरेरोइन्टर्लिङ्गुआइन्डोनेसियालीइन्ट" + + "रलिङ्ग्वेइग्बोसिचुआन यिइनुपिआक्इडोआइसल्यान्डियालीइटालेलीइनुक्टिटुटजापा" + + "नीजाभानीजर्जियालीकोङ्गोकिकुयुकुआन्यामाकाजाखकालालिसुटखमेरकन्नाडाकोरियाल" + + "ीकानुरीकास्मिरीकुर्दीकोमीकोर्निसकिर्गिजल्याटिनलक्जेम्बर्गीगान्डालिम्बु" + + "र्गीलिङ्गालालाओलिथुआनियालीलुबा-काताङ्गालात्भियालीमलागासीमार्सालीमाओरीम" + + "्यासेडोनियनमलयालममङ्गोलियालीमराठीमलायमाल्टिजबर्मेलीनाउरूउत्तरी न्डेबेल" + + "ेनेपालीन्दोन्गाडचनर्वेली नाइनोर्स्कनर्वेली बोकमालदक्षिण न्देबेलेनाभाजो" + + "न्यान्जाअक्सिटनओजिब्वाओरोमोउडियाअोस्सेटिकपंजाबीपालीपोलिसपास्तोपोर्तुगी" + + "क्वेचुवारोमानिसरुन्डीरोमानियालीरसियालीकिन्यारवान्डासंस्कृतसार्डिनियाली" + + "सिन्धीउत्तरी सामीसाङ्गोसिन्हालीस्लोभाकियालीस्लोभेनियालीसामोआशोनासोमाली" + + "अल्बानियालीसर्बियालीस्वातीदक्षिणी सोथोसुडानीस्विडिसस्वाहिलीतामिलतेलुगु" + + "ताजिकथाईटिग्रिन्याटर्कमेनट्स्वानाटोङ्गनटर्किशट्सोङ्गातातारटाहिटियनउइघु" + + "रयुक्रेनीउर्दुउज्बेकीभेन्डाभियतनामीभोलापिकवाल्लुनवुलुफखोसायिद्दिसयोरूव" + + "ाचिनियाँजुलुअचाइनिजअकोलीअदाङमेअदिघेअफ्रिहिलीआघेमअइनुअक्कादियालीअलाबामा" + + "अलेउटघेग अल्बानियालीदक्षिणी आल्टाइपुरातन अङ्ग्रेजीअङ्गिकाअरामाइकमापुचे" + + "अराओनाअरापाहोअल्जेरियाली अरबीअरावाकमोरोक्कोली अरबीइजिप्ट अरबीआसुअमेरिक" + + "ी साङ्केतिक भाषाअस्टुरियालीकोटावाअवधीबालुचीबालीबाभारियालीबासाबामुनबाता" + + "क तोबाघोमालाबेजाबेम्बाबेटावीबेनाबाफुटबडागापश्चिम बालोचीभोजपुरीबिकोलबिन" + + "ीबन्जारकोमसिक्सिकाविष्णुप्रियाबाख्तिआरीब्रजब्राहुइबोडोअकुजबुरिआतबुगिनि" + + "यालीबुलुब्लिनमेडुम्बाकाड्डोक्यारिबकायुगाअट्सामसेबुआनोचिगाचिब्चाचागाटाई" + + "चुकेसेमारीचिनुक जार्गनचोक्टावचिपेव्यानचेरोकीचेयेन्नेकेन्द्रीय कुर्दीको" + + "प्टिककापिज्नोनक्रिमियाली तुर्कसेसेल्वा क्रिओल फ्रान्सेलीकासुवियनडाकोटा" + + "दार्ग्वाताइतादेलावरदोग्रिबदिन्काजर्माडोगरीतल्लो सोर्बियनकेन्द्रीय दुसु" + + "नदुवालामध्य डचजोला-फोनिलद्युलादाजागाएम्बुएफिकएमिलियालीपुरातन इजिप्टीएक" + + "ाजुकएलामाइटमध्य अङ्ग्रेजीकेन्द्रीय युपिकइवोन्डोएक्सट्रेमादुरालीफाङफिलि" + + "पिनीफोनकाहुन फ्रान्सेलीमध्य फ्रान्सेलीपुरातन फ्रान्सेलीअर्पितानउत्तरी " + + "फ्रिजीपूर्वी फ्रिसियालीफ्रिउलियालीगागगाउजगान चिनियाँगायोग्बायागिजगिल्ब" + + "र्टीगिलाकीमध्य उच्च जर्मनपुरातन उच्च जर्मनगोवा कोन्कानीगोन्डीगोरोन्टाल" + + "ोगोथिकग्रेबोपुरातन ग्रिकस्वीस जर्मनफ्राफ्रागुसीगुइचिनहाइदाहक्का चिनिया" + + "ँहवाइयनफिजी हिन्दीहिलिगायनोनहिट्टिटेहमोङमाथिल्लो सोर्बियनहुपाइबानइबिबि" + + "योइयोकोइन्गसइन्ग्रियालीजमैकाली क्रेओले अङ्ग्रेजीलोज्बानन्गोम्बामाचामेज" + + "ुडियो-फारसीजुडियो-अरबीजुटिसकारा-काल्पाककाबिलकाचिनज्जुकाम्बाकावीकाबार्द" + + "ियालीकानेम्बुटुआपमाकोन्डेकाबुभेर्डियानुकेनयाङकोरोकाइनगाङखासीखोटानीकोयर" + + "ा चिनीखोवारकिर्मान्जकीकाकोकालेन्जिनकिम्बुन्डुकोमी-पर्म्याककोन्कानीकोस्" + + "रालीक्पेल्लेकाराचाय-बाल्करक्रिओकिनाराय-एकरेलियनकुरुखशाम्बालाबाफियाकोलो" + + "ग्नियालीकुमिककुतेनाइलाडिनोलाङ्गीलाहन्डालाम्बालाज्घियालीलिङ्गुवा फ्राङ्" + + "का नोभालिगुरियालीलिभोनियालीलाकोतालोम्बार्डमोङ्गोलोजीउत्तरी लुरीलाट्गाल" + + "ीलुबा-लुलुआलुइसेनोलुन्डालुओमिजोलुइयासाहित्यिक चिनियाँलाजमादुरेसेमाफामग" + + "धीमैथिलीमाकासारमान्दिङोमसाईमाबामोक्षमन्दरमेन्डेमेरूमोरिसेनमध्य आयरिसमा" + + "खुवा-मिट्टोमेटामिकमाकमिनाङकाबाउमान्चुमनिपुरीमोहकमोस्सीमुन्डाङबहुभाषाक्" + + "रिकमिरान्डीमाडवारीमेन्टावाईम्येनेइर्ज्यामजानडेरानीमिन नान चिनियाँनेपोल" + + "िटाननामातल्लो जर्मननेवारीनियासनिउएनअओ नागाक्वासियोन्गिएम्बुननोगाइपुरान" + + "ो नोर्सेनोभियलनकोउत्तरी सोथोनुएरपरम्परागत नेवारीन्यामवेजीन्यान्कोलन्यो" + + "रोनजिमाओसागेअटोमन तुर्कीपाङ्गासिनानपाहलावीपामपाङ्गापापियामेन्तोपालाउवा" + + "लीपिकार्डनाइजेरियाली पिड्जिनपेन्सिलभानियाली जर्मनपुरातन फारसीपालाटिन ज" + + "र्मनफोनिसियालीपिएडमोन्तेसेपोन्टिकप्रसियालीपुरातन प्रोभेन्कालकिचेचिम्बो" + + "राजो उच्चस्थान किचुआराजस्थानीरापानुईरारोटोङ्गानरोम्बोअरोमानीयालीर्" + + "\u200cवासान्डेअसाखासाम्बुरूसान्तालीन्गामबायसाङ्गुसिसिलियालीस्कट्सदक्षिणी" + + " कुर्दिशसेनाकोयराबोरो सेन्नीपुरातन आयरीसटाचेल्हिटशानचाड अरबीतल्लो सिलेसि" + + "यालीदक्षिणी सामीलुले सामीइनारी सामीस्कोइट सामीसोनिन्केस्रानान टोङ्गोसा" + + "होसुकुमासुसूसुमेरियालीकोमोरीपरम्परागत सिरियाकसिरियाकटिम्नेटेसोटेटुमटिग" + + "्रेक्लिङ्गनन्यास टोङ्गाटोक पिसिनटारोकोमुस्लिम टाटटुम्बुकाटुभालुतासावाक" + + "टुभिनियालीकेन्द्रीय एट्लास टामाजिघटउड्मुर्टउम्बुन्डीअज्ञात भाषाभाइमुख्" + + "य-फ्राङ्कोनियालीभुन्जोवाल्सरवोलेट्टावारेवार्ल्पिरीकाल्मिकमिनग्रेलियाली" + + "सोगायाङ्बेनयेम्बान्हिनगातुक्यान्टोनिजब्लिससिम्बोल्समानक मोरोक्कोन तामा" + + "जिघटजुनीभाषिक सामग्री छैनजाजाआधुनिक मानक अरबीस्वीस हाई जर्मनअस्ट्रेलिय" + + "ाली अङ्ग्रेजीक्यानाडेली अङ्ग्रेजीबेलायती अङ्ग्रेजीअमेरिकी अङ्ग्रेजील्य" + + "ाटिन अमेरिकी स्पेनीयुरोपेली स्पेनीमेक्सिकन स्पेनीक्यानेडाली फ्रान्सेली" + + "तल्लो साक्सनफ्लेमिसब्राजिली पोर्तुगीयुरोपेली पोर्तुगीमोल्डाभियालीकङ्गो" + + " स्वाहिलीसरलिकृत चिनियाँपरम्परागत चिनियाँ" + +var neLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x000c, 0x002d, 0x0045, 0x0063, 0x006f, 0x0087, 0x009c, 0x00a8, 0x00b7, 0x00c9, 0x00d8, 0x00f3, 0x0108, 0x0120, 0x0144, 0x0159, 0x0171, 0x0183, 0x0198, 0x01aa, 0x01c8, 0x01e0, 0x01ef, 0x0207, 0x021f, 0x022b, 0x0234, 0x0256, 0x0265, 0x0274, 0x0283, 0x0292, 0x02a4, 0x02b6, 0x02bf, 0x02ce, 0x02e9, 0x030a, 0x031c, - 0x033d, 0x034c, 0x035b, 0x036a, 0x0379, 0x0391, 0x03a0, 0x03be, - 0x03d6, 0x03e5, 0x040a, 0x0425, 0x043d, 0x0452, 0x0467, 0x0476, - 0x0488, 0x049a, 0x04b3, 0x04d4, 0x0502, 0x0523, 0x0544, 0x0556, + 0x0337, 0x0346, 0x0355, 0x0364, 0x0373, 0x0385, 0x0394, 0x03b2, + 0x03e0, 0x03ef, 0x0414, 0x042f, 0x0447, 0x045c, 0x0471, 0x0480, + 0x0492, 0x04a4, 0x04bd, 0x04de, 0x050c, 0x052d, 0x054e, 0x0560, // Entry 40 - 7F - 0x057d, 0x05a4, 0x05cb, 0x05da, 0x05f3, 0x060b, 0x0614, 0x0641, - 0x0656, 0x0674, 0x0686, 0x0698, 0x06b3, 0x06c5, 0x06d7, 0x06f2, - 0x0701, 0x071c, 0x0728, 0x073d, 0x0755, 0x0767, 0x077f, 0x0791, - 0x079d, 0x07b2, 0x07c7, 0x07dc, 0x0800, 0x0812, 0x0830, 0x0848, - 0x0851, 0x0872, 0x0897, 0x08b5, 0x08ca, 0x08e2, 0x08f1, 0x091b, - 0x092d, 0x094e, 0x095d, 0x0969, 0x097e, 0x0993, 0x09a2, 0x09cd, - 0x09df, 0x09f7, 0x09fd, 0x0a31, 0x0a59, 0x0a84, 0x0a96, 0x0aae, - 0x0ac3, 0x0ad8, 0x0ae7, 0x0af6, 0x0b11, 0x0b23, 0x0b2f, 0x0b3e, + 0x0587, 0x05ae, 0x05d5, 0x05e4, 0x05fd, 0x0615, 0x061e, 0x064b, + 0x0660, 0x067e, 0x0690, 0x06a2, 0x06bd, 0x06cf, 0x06e1, 0x06fc, + 0x070b, 0x0726, 0x0732, 0x0747, 0x075f, 0x0771, 0x0789, 0x079b, + 0x07a7, 0x07bc, 0x07d1, 0x07e6, 0x080a, 0x081c, 0x083a, 0x0852, + 0x085b, 0x087c, 0x08a1, 0x08bf, 0x08d4, 0x08ec, 0x08fb, 0x091f, + 0x0931, 0x0952, 0x0961, 0x096d, 0x0982, 0x0997, 0x09a6, 0x09d1, + 0x09e3, 0x09fb, 0x0a01, 0x0a35, 0x0a5d, 0x0a88, 0x0a9a, 0x0ab2, + 0x0ac7, 0x0adc, 0x0aeb, 0x0afa, 0x0b15, 0x0b27, 0x0b33, 0x0b42, // Entry 80 - BF - 0x0b50, 0x0b68, 0x0b80, 0x0b95, 0x0ba7, 0x0bc5, 0x0bda, 0x0c01, - 0x0c16, 0x0c3a, 0x0c4c, 0x0c6b, 0x0c7d, 0x0c95, 0x0cb9, 0x0cdd, - 0x0cec, 0x0cf8, 0x0d0a, 0x0d2b, 0x0d46, 0x0d58, 0x0d7a, 0x0d8c, - 0x0da1, 0x0db9, 0x0dc8, 0x0dda, 0x0de9, 0x0df2, 0x0e10, 0x0e25, - 0x0e3d, 0x0e4f, 0x0e61, 0x0e79, 0x0e88, 0x0ea0, 0x0eaf, 0x0ec7, - 0x0ed6, 0x0eeb, 0x0efd, 0x0f15, 0x0f2a, 0x0f3f, 0x0f4e, 0x0f5a, - 0x0f6f, 0x0f81, 0x0f81, 0x0f96, 0x0fa2, 0x0fb7, 0x0fc6, 0x0fd8, - 0x0fe7, 0x0fe7, 0x1002, 0x100e, 0x101a, 0x103b, 0x1050, 0x105f, + 0x0b54, 0x0b6c, 0x0b84, 0x0b99, 0x0bab, 0x0bc9, 0x0bde, 0x0c05, + 0x0c1a, 0x0c3e, 0x0c50, 0x0c6f, 0x0c81, 0x0c99, 0x0cbd, 0x0ce1, + 0x0cf0, 0x0cfc, 0x0d0e, 0x0d2f, 0x0d4a, 0x0d5c, 0x0d7e, 0x0d90, + 0x0da5, 0x0dbd, 0x0dcc, 0x0dde, 0x0ded, 0x0df6, 0x0e14, 0x0e29, + 0x0e41, 0x0e53, 0x0e65, 0x0e7d, 0x0e8c, 0x0ea4, 0x0eb3, 0x0ecb, + 0x0eda, 0x0eef, 0x0f01, 0x0f19, 0x0f2e, 0x0f43, 0x0f52, 0x0f5e, + 0x0f73, 0x0f85, 0x0f85, 0x0f9a, 0x0fa6, 0x0fbb, 0x0fca, 0x0fdc, + 0x0feb, 0x0feb, 0x1006, 0x1012, 0x101e, 0x103f, 0x1054, 0x1063, // Entry C0 - FF - 0x108a, 0x10b2, 0x10e0, 0x10f5, 0x110a, 0x111c, 0x112e, 0x1143, - 0x1171, 0x1171, 0x1183, 0x11ae, 0x11cd, 0x11d6, 0x1214, 0x1235, - 0x1247, 0x1253, 0x1265, 0x1271, 0x128f, 0x129b, 0x12aa, 0x12c6, - 0x12d8, 0x12e4, 0x12f6, 0x1308, 0x1314, 0x1323, 0x1332, 0x1357, - 0x136c, 0x137b, 0x1387, 0x1399, 0x13a2, 0x13ba, 0x13de, 0x13f9, - 0x1405, 0x141a, 0x1426, 0x1432, 0x1444, 0x1462, 0x146e, 0x147d, - 0x1495, 0x14a7, 0x14bc, 0x14ce, 0x14e0, 0x14f5, 0x1501, 0x1513, - 0x1528, 0x153a, 0x1546, 0x1568, 0x157d, 0x1598, 0x15aa, 0x15c2, + 0x108e, 0x10b6, 0x10e4, 0x10f9, 0x110e, 0x1120, 0x1132, 0x1147, + 0x1175, 0x1175, 0x1187, 0x11b2, 0x11d1, 0x11da, 0x1218, 0x1239, + 0x124b, 0x1257, 0x1269, 0x1275, 0x1293, 0x129f, 0x12ae, 0x12ca, + 0x12dc, 0x12e8, 0x12fa, 0x130c, 0x1318, 0x1327, 0x1336, 0x135b, + 0x1370, 0x137f, 0x138b, 0x139d, 0x13a6, 0x13be, 0x13e2, 0x13fd, + 0x1409, 0x141e, 0x142a, 0x1436, 0x1448, 0x1466, 0x1472, 0x1481, + 0x1499, 0x14ab, 0x14c0, 0x14d2, 0x14e4, 0x14e4, 0x14f9, 0x1505, + 0x1517, 0x152c, 0x153e, 0x154a, 0x156c, 0x1581, 0x159c, 0x15ae, // Entry 100 - 13F - 0x15f0, 0x1605, 0x1620, 0x164e, 0x1698, 0x16b0, 0x16c2, 0x16da, - 0x16e9, 0x16fb, 0x16fb, 0x1710, 0x1722, 0x1731, 0x1740, 0x1768, - 0x1793, 0x17a5, 0x17b8, 0x17d4, 0x17e6, 0x17f8, 0x1807, 0x1813, - 0x182e, 0x1856, 0x1868, 0x187d, 0x18a5, 0x18d0, 0x18e5, 0x1915, - 0x191e, 0x1936, 0x1936, 0x193f, 0x196d, 0x1998, 0x19c9, 0x19e1, - 0x1a06, 0x1a37, 0x1a58, 0x1a5e, 0x1a6d, 0x1a8c, 0x1a98, 0x1aaa, - 0x1aaa, 0x1ab3, 0x1ace, 0x1ae0, 0x1b09, 0x1b38, 0x1b5d, 0x1b6f, - 0x1b8d, 0x1b9c, 0x1bae, 0x1bd0, 0x1bef, 0x1bef, 0x1c07, 0x1c13, + 0x15c6, 0x15f4, 0x1609, 0x1624, 0x1652, 0x169c, 0x16b4, 0x16c6, + 0x16de, 0x16ed, 0x16ff, 0x16ff, 0x1714, 0x1726, 0x1735, 0x1744, + 0x176c, 0x1797, 0x17a9, 0x17bc, 0x17d8, 0x17ea, 0x17fc, 0x180b, + 0x1817, 0x1832, 0x185a, 0x186c, 0x1881, 0x18a9, 0x18d4, 0x18e9, + 0x1919, 0x1922, 0x193a, 0x193a, 0x1943, 0x1971, 0x199c, 0x19cd, + 0x19e5, 0x1a0a, 0x1a3b, 0x1a5c, 0x1a62, 0x1a71, 0x1a90, 0x1a9c, + 0x1aae, 0x1aae, 0x1ab7, 0x1ad2, 0x1ae4, 0x1b0d, 0x1b3c, 0x1b61, + 0x1b73, 0x1b91, 0x1ba0, 0x1bb2, 0x1bd4, 0x1bf3, 0x1bf3, 0x1c0b, // Entry 140 - 17F - 0x1c25, 0x1c34, 0x1c59, 0x1c6b, 0x1c8a, 0x1ca8, 0x1cc0, 0x1ccc, - 0x1cfd, 0x1cfd, 0x1d09, 0x1d15, 0x1d2a, 0x1d39, 0x1d48, 0x1d69, - 0x1db0, 0x1dc5, 0x1ddd, 0x1def, 0x1e11, 0x1e30, 0x1e3f, 0x1e61, - 0x1e70, 0x1e7f, 0x1e8b, 0x1e9d, 0x1ea9, 0x1ecd, 0x1ee5, 0x1ef1, - 0x1f09, 0x1f33, 0x1f45, 0x1f51, 0x1f66, 0x1f72, 0x1f84, 0x1fa0, - 0x1faf, 0x1fd0, 0x1fdc, 0x1ff7, 0x2015, 0x203a, 0x2052, 0x206a, - 0x2082, 0x20aa, 0x20b9, 0x20d2, 0x20f0, 0x20ff, 0x2117, 0x2129, - 0x214d, 0x215c, 0x2171, 0x2183, 0x2195, 0x21aa, 0x21bc, 0x21da, + 0x1c17, 0x1c29, 0x1c38, 0x1c5d, 0x1c6f, 0x1c8e, 0x1cac, 0x1cc4, + 0x1cd0, 0x1d01, 0x1d01, 0x1d0d, 0x1d19, 0x1d2e, 0x1d3d, 0x1d4c, + 0x1d6d, 0x1db4, 0x1dc9, 0x1de1, 0x1df3, 0x1e15, 0x1e34, 0x1e43, + 0x1e65, 0x1e74, 0x1e83, 0x1e8f, 0x1ea1, 0x1ead, 0x1ed1, 0x1ee9, + 0x1ef5, 0x1f0d, 0x1f37, 0x1f49, 0x1f55, 0x1f6a, 0x1f76, 0x1f88, + 0x1fa4, 0x1fb3, 0x1fd4, 0x1fe0, 0x1ffb, 0x2019, 0x203e, 0x2056, + 0x206e, 0x2086, 0x20ae, 0x20bd, 0x20d6, 0x20eb, 0x20fa, 0x2112, + 0x2124, 0x2148, 0x2157, 0x216c, 0x217e, 0x2190, 0x21a5, 0x21b7, // Entry 180 - 1BF - 0x2218, 0x2236, 0x2254, 0x2266, 0x2281, 0x2293, 0x229f, 0x22be, - 0x22d6, 0x22f2, 0x2307, 0x2319, 0x2322, 0x232e, 0x233d, 0x236e, - 0x2377, 0x238f, 0x239b, 0x23a7, 0x23b9, 0x23ce, 0x23e6, 0x23f2, - 0x23fe, 0x240d, 0x241c, 0x242e, 0x243a, 0x244f, 0x246b, 0x2490, - 0x249c, 0x24ae, 0x24cc, 0x24de, 0x24f3, 0x24ff, 0x2511, 0x2511, - 0x2526, 0x253b, 0x254a, 0x2562, 0x2577, 0x2592, 0x25a4, 0x25b9, - 0x25d7, 0x2600, 0x261b, 0x2627, 0x2646, 0x2658, 0x2667, 0x2676, - 0x2689, 0x26a1, 0x26bf, 0x26ce, 0x26f3, 0x2705, 0x270e, 0x272d, + 0x21d5, 0x2213, 0x2231, 0x224f, 0x2261, 0x227c, 0x228e, 0x228e, + 0x229a, 0x22b9, 0x22d1, 0x22ed, 0x2302, 0x2314, 0x231d, 0x2329, + 0x2338, 0x2369, 0x2372, 0x238a, 0x2396, 0x23a2, 0x23b4, 0x23c9, + 0x23e1, 0x23ed, 0x23f9, 0x2408, 0x2417, 0x2429, 0x2435, 0x244a, + 0x2466, 0x248b, 0x2497, 0x24a9, 0x24c7, 0x24d9, 0x24ee, 0x24fa, + 0x250c, 0x250c, 0x2521, 0x2536, 0x2545, 0x255d, 0x2572, 0x258d, + 0x259f, 0x25b4, 0x25d2, 0x25fb, 0x2616, 0x2622, 0x2641, 0x2653, + 0x2662, 0x2671, 0x2684, 0x269c, 0x26ba, 0x26c9, 0x26ee, 0x2700, // Entry 1C0 - 1FF - 0x2739, 0x2767, 0x2782, 0x279d, 0x27af, 0x27be, 0x27cd, 0x27ef, - 0x2810, 0x2825, 0x2840, 0x2864, 0x287f, 0x2894, 0x28cb, 0x2908, - 0x2908, 0x292a, 0x294f, 0x296d, 0x2991, 0x29a6, 0x29a6, 0x29c1, - 0x29f5, 0x2a01, 0x2a4b, 0x2a66, 0x2a7b, 0x2a9c, 0x2a9c, 0x2a9c, - 0x2aae, 0x2aae, 0x2aae, 0x2aae, 0x2aae, 0x2acf, 0x2ade, 0x2af3, - 0x2aff, 0x2aff, 0x2b17, 0x2b17, 0x2b2f, 0x2b2f, 0x2b47, 0x2b59, - 0x2b77, 0x2b89, 0x2b89, 0x2bb4, 0x2bb4, 0x2bc0, 0x2bc0, 0x2bc0, - 0x2bee, 0x2c10, 0x2c10, 0x2c2b, 0x2c34, 0x2c4a, 0x2c4a, 0x2c78, + 0x2709, 0x2728, 0x2734, 0x2762, 0x277d, 0x2798, 0x27aa, 0x27b9, + 0x27c8, 0x27ea, 0x280b, 0x2820, 0x283b, 0x285f, 0x287a, 0x288f, + 0x28c6, 0x2903, 0x2903, 0x2925, 0x294a, 0x2968, 0x298c, 0x29a1, + 0x29a1, 0x29bc, 0x29f0, 0x29fc, 0x2a46, 0x2a61, 0x2a76, 0x2a97, + 0x2a97, 0x2a97, 0x2aa9, 0x2aa9, 0x2aa9, 0x2aa9, 0x2aa9, 0x2aca, + 0x2ad9, 0x2aee, 0x2afa, 0x2afa, 0x2b12, 0x2b12, 0x2b2a, 0x2b2a, + 0x2b42, 0x2b54, 0x2b72, 0x2b84, 0x2b84, 0x2baf, 0x2baf, 0x2bbb, + 0x2bbb, 0x2bbb, 0x2be9, 0x2c0b, 0x2c0b, 0x2c26, 0x2c2f, 0x2c45, // Entry 200 - 23F - 0x2c78, 0x2c9a, 0x2cb3, 0x2ccf, 0x2cee, 0x2d06, 0x2d06, 0x2d2e, - 0x2d2e, 0x2d3a, 0x2d3a, 0x2d4c, 0x2d58, 0x2d76, 0x2d88, 0x2db9, - 0x2dce, 0x2dce, 0x2dce, 0x2de0, 0x2dec, 0x2dec, 0x2dfb, 0x2e0d, - 0x2e0d, 0x2e0d, 0x2e0d, 0x2e25, 0x2e25, 0x2e25, 0x2e25, 0x2e47, - 0x2e60, 0x2e60, 0x2e72, 0x2e72, 0x2e72, 0x2e91, 0x2ea9, 0x2ebb, - 0x2ed0, 0x2eee, 0x2f35, 0x2f4d, 0x2f4d, 0x2f68, 0x2f6c, 0x2f75, - 0x2f75, 0x2f75, 0x2f75, 0x2faf, 0x2faf, 0x2faf, 0x2fc1, 0x2fd3, - 0x2feb, 0x2ff7, 0x2ff7, 0x3015, 0x3015, 0x302a, 0x3051, 0x305d, + 0x2c45, 0x2c73, 0x2c73, 0x2c95, 0x2cae, 0x2cca, 0x2ce9, 0x2d01, + 0x2d01, 0x2d29, 0x2d29, 0x2d35, 0x2d35, 0x2d47, 0x2d53, 0x2d71, + 0x2d83, 0x2db4, 0x2dc9, 0x2dc9, 0x2dc9, 0x2ddb, 0x2de7, 0x2de7, + 0x2df6, 0x2e08, 0x2e08, 0x2e08, 0x2e08, 0x2e20, 0x2e20, 0x2e20, + 0x2e20, 0x2e42, 0x2e5b, 0x2e5b, 0x2e6d, 0x2e6d, 0x2e6d, 0x2e8c, + 0x2ea4, 0x2eb6, 0x2ecb, 0x2ee9, 0x2f30, 0x2f48, 0x2f48, 0x2f63, + 0x2f82, 0x2f8b, 0x2f8b, 0x2f8b, 0x2f8b, 0x2fc5, 0x2fc5, 0x2fc5, + 0x2fd7, 0x2fe9, 0x3001, 0x300d, 0x300d, 0x302b, 0x302b, 0x3040, // Entry 240 - 27F - 0x305d, 0x305d, 0x3072, 0x3084, 0x309f, 0x30c3, 0x30c3, 0x30ed, - 0x30ed, 0x30ed, 0x312e, 0x313a, 0x3169, 0x3175, 0x31a1, 0x31a1, - 0x31d2, 0x31fb, 0x323e, 0x3278, 0x32a9, 0x32da, 0x3318, 0x3343, - 0x336e, 0x336e, 0x33ab, 0x33ab, 0x33cd, 0x33e2, 0x3413, 0x3444, - 0x3444, 0x3444, 0x346c, 0x3497, 0x34c8, -} // Size: 1250 bytes - -const nlLangStr string = "" + // Size: 4728 bytes + 0x3067, 0x3073, 0x3073, 0x3073, 0x3088, 0x309a, 0x30b5, 0x30d6, + 0x30d6, 0x3100, 0x3100, 0x3100, 0x3141, 0x314d, 0x317c, 0x3188, + 0x31b4, 0x31b4, 0x31b4, 0x31dd, 0x3220, 0x325a, 0x328b, 0x32bc, + 0x32fa, 0x3325, 0x3350, 0x3350, 0x338d, 0x338d, 0x33af, 0x33c4, + 0x33f5, 0x3426, 0x344a, 0x344a, 0x3472, 0x349d, 0x34ce, +} // Size: 1254 bytes + +const nlLangStr string = "" + // Size: 4765 bytes "AfarAbchazischAvestischAfrikaansAkanAmhaarsAragoneesArabischAssameesAvar" + "ischAymaraAzerbeidzjaansBasjkiersWit-RussischBulgaarsBislamaBambaraBenga" + "alsTibetaansBretonsBosnischCatalaansTsjetsjeensChamorroCorsicaansCreeTsj" + @@ -22310,7 +23681,7 @@ const nlLangStr string = "" + // Size: 4728 bytes "iTigrinyaTurkmeensTswanaTongaansTurksTsongaTataarsTahitiaansOeigoersOekr" + "aïensUrduOezbeeksVendaVietnameesVolapükWaalsWolofXhosaJiddischYorubaZhua" + "ngChineesZoeloeAtjehsAkoliAdangmeAdygeesTunesisch ArabischAfrihiliAghemA" + - "inuAkkadischAlabamaAleoetischGegischZuid-AltaïschOudengelsAngikaArameesM" + + "inoAkkadischAlabamaAleoetischGegischZuid-AltaïschOudengelsAngikaArameesM" + "apudungunAraonaArapahoAlgerijns ArabischArawakMarokkaans ArabischEgyptis" + "ch ArabischAsuAmerikaanse GebarentaalAsturischKotavaAwadhiBeloetsjiBalin" + "eesBeiersBasaBamounBatak TobaGhomala’BejaBembaBetawiBenaBafutBadagaWeste" + @@ -22332,32 +23703,32 @@ const nlLangStr string = "" + // Size: 4728 bytes "KirmanckîKakoKalenjinKimbunduKomi-PermjaaksKonkaniKosraeaansKpelleKarats" + "jaj-BalkarischKrioKinaray-aKarelischKurukhShambalaBafiaKölschKoemuksKute" + "naiLadinoLangiLahndaLambaLezgischLingua Franca NovaLigurischLijfsLakotaL" + - "ombardischMongoLoziNoordelijk LuriLetgaalsLuba-LuluaLuisenoLundaLuoMizoL" + - "uyiaKlassiek ChineesLazischMadoereesMafaMagahiMaithiliMakassaarsMandingo" + - "MaaMabaMoksjaMandarMendeMeruMorisyenMiddeliersMakhuwa-MeettoMeta’Mi’kmaq" + - "MinangkabauMantsjoeMeiteiMohawkMossiWest-MariMundangMeerdere talenCreekM" + - "irandeesMarwariMentawaiMyeneErzjaMazanderaniMinnanyuNapolitaansNamaNeder" + - "saksischNewariNiasNiueaansAo NagaNgumbaNgiemboonNogaiOudnoorsNovialN’KoN" + - "oord-SothoNuerKlassiek NepalbhasaNyamweziNyankoleNyoroNzimaOsageOttomaan" + - "s-TurksPangasinanPahlaviPampangaPapiamentsPalausPicardischNigeriaans Pid" + - "ginPennsylvania-DuitsPlautdietschOudperzischPaltsischFoenicischPiëmontee" + - "sPontischPohnpeiaansOudpruisischOudprovençaalsK’iche’KichwaRajasthaniRap" + - "anuiRarotonganRomagnolRiffijnsRomboRomaniRotumaansRoetheensRovianaAroeme" + - "ensRwaSandaweJakoetsSamaritaans-ArameesSamburuSasakSantaliSaurashtraNgam" + - "baySanguSiciliaansSchotsSassareesPahlavaniSenecaSenaSeriSelkoepsKoyrabor" + - "o SenniOudiersSamogitischTashelhiytShanTsjadisch ArabischSidamoSilezisch" + - " DuitsSelayarZuid-SamischLule-SamischInari-SamischSkolt-SamischSoninkeSo" + - "gdischSranantongoSererSahoSaterfriesSukumaSoesoeSoemerischShimaoreKlassi" + - "ek SyrischSyrischSilezischTuluTimneTesoTerenoTetunTigreTivTokelausTsakhu" + - "rKlingonTlingitTalyshTamashekNyasa TongaTok PisinTuroyoTarokoTsakonischT" + - "simshianMoslim TatToemboekaTuvaluaansTasawaqToevaansTamazight (Centraal-" + - "Marokko)OedmoertsOegaritischUmbunduRootVaiVenetiaansWepsischWest-VlaamsO" + - "pperfrankischVotischVõroVunjoWalserWolayttaWarayWashoWarlpiriWuyuKalmuks" + - "MingreelsSogaYaoYapeesYangbenYembaNheengatuKantoneesZapotecBlissymbolenZ" + - "eeuwsZenagaStandaard Marokkaanse TamazightZunigeen linguïstische inhoudZ" + - "azaServo-Kroatisch" - -var nlLangIdx = []uint16{ // 610 elements + "ombardischMongoLouisiana-CreoolsLoziNoordelijk LuriLetgaalsLuba-LuluaLui" + + "senoLundaLuoMizoLuyiaKlassiek ChineesLazischMadoereesMafaMagahiMaithiliM" + + "akassaarsMandingoMaaMabaMoksjaMandarMendeMeruMorisyenMiddeliersMakhuwa-M" + + "eettoMeta’Mi’kmaqMinangkabauMantsjoeMeiteiMohawkMossiWest-MariMundangMee" + + "rdere talenCreekMirandeesMarwariMentawaiMyeneErzjaMazanderaniMinnanyuNap" + + "olitaansNamaNedersaksischNewariNiasNiueaansAo NagaNgumbaNgiemboonNogaiOu" + + "dnoorsNovialN’KoNoord-SothoNuerKlassiek NepalbhasaNyamweziNyankoleNyoroN" + + "zimaOsageOttomaans-TurksPangasinanPahlaviPampangaPapiamentsPalausPicardi" + + "schNigeriaans PidginPennsylvania-DuitsPlautdietschOudperzischPaltsischFo" + + "enicischPiëmonteesPontischPohnpeiaansOudpruisischOudprovençaalsK’iche’Ki" + + "chwaRajasthaniRapanuiRarotonganRomagnolRiffijnsRomboRomaniRotumaansRoeth" + + "eensRovianaAroemeensRwaSandaweJakoetsSamaritaans-ArameesSamburuSasakSant" + + "aliSaurashtraNgambaySanguSiciliaansSchotsSassareesPahlavaniSenecaSenaSer" + + "iSelkoepsKoyraboro SenniOudiersSamogitischTashelhiytShanTsjadisch Arabis" + + "chSidamoSilezisch DuitsSelayarZuid-SamischLule-SamischInari-SamischSkolt" + + "-SamischSoninkeSogdischSranantongoSererSahoSaterfriesSukumaSoesoeSoemeri" + + "schShimaoreKlassiek SyrischSyrischSilezischTuluTimneTesoTerenoTetunTigre" + + "TivTokelausTsakhurKlingonTlingitTalyshTamashekNyasa TongaTok PisinTuroyo" + + "TarokoTsakonischTsimshianMoslim TatToemboekaTuvaluaansTasawaqToevaansTam" + + "azight (Centraal-Marokko)OedmoertsOegaritischUmbunduonbekende taalVaiVen" + + "etiaansWepsischWest-VlaamsOpperfrankischVotischVõroVunjoWalserWolayttaWa" + + "rayWashoWarlpiriWuyuKalmuksMingreelsSogaYaoYapeesYangbenYembaNheengatuKa" + + "ntoneesZapotecBlissymbolenZeeuwsZenagaStandaard Marokkaanse TamazightZun" + + "igeen linguïstische inhoudZazaNederduitsServo-Kroatisch" + +var nlLangIdx = []uint16{ // 612 elements // Entry 0 - 3F 0x0000, 0x0004, 0x000e, 0x0017, 0x0020, 0x0024, 0x002b, 0x0034, 0x003c, 0x0044, 0x004c, 0x0052, 0x0060, 0x0069, 0x0075, 0x007d, @@ -22392,221 +23763,221 @@ var nlLangIdx = []uint16{ // 610 elements 0x06a6, 0x06aa, 0x06af, 0x06b5, 0x06b9, 0x06be, 0x06c4, 0x06d5, 0x06dd, 0x06e2, 0x06e6, 0x06ec, 0x06ef, 0x06f6, 0x0701, 0x070a, 0x070e, 0x0714, 0x0718, 0x071e, 0x0729, 0x0731, 0x0735, 0x0739, - 0x0740, 0x0745, 0x074e, 0x0754, 0x0759, 0x0760, 0x0765, 0x076c, - 0x0774, 0x077c, 0x0780, 0x078e, 0x0795, 0x079e, 0x07a6, 0x07ae, + 0x0740, 0x0745, 0x074e, 0x0754, 0x0759, 0x0759, 0x0760, 0x0765, + 0x076c, 0x0774, 0x077c, 0x0780, 0x078e, 0x0795, 0x079e, 0x07a6, // Entry 100 - 13F - 0x07b5, 0x07bd, 0x07c5, 0x07d1, 0x07e2, 0x07ed, 0x07f3, 0x07f9, - 0x07fe, 0x0806, 0x080c, 0x0812, 0x0817, 0x081c, 0x0821, 0x082e, - 0x0833, 0x0838, 0x0848, 0x0852, 0x0857, 0x085d, 0x0861, 0x0865, - 0x086d, 0x0879, 0x087f, 0x0889, 0x0895, 0x089a, 0x08a0, 0x08aa, - 0x08ae, 0x08b7, 0x08c4, 0x08c7, 0x08d2, 0x08dd, 0x08e5, 0x08ee, - 0x08f9, 0x0903, 0x090c, 0x090e, 0x0919, 0x091e, 0x0922, 0x0927, - 0x0938, 0x093f, 0x0949, 0x094f, 0x095e, 0x096a, 0x0975, 0x097a, - 0x0983, 0x098b, 0x0990, 0x0999, 0x09a5, 0x09aa, 0x09b0, 0x09b5, + 0x07ae, 0x07b5, 0x07bd, 0x07c5, 0x07d1, 0x07e2, 0x07ed, 0x07f3, + 0x07f9, 0x07fe, 0x0806, 0x080c, 0x0812, 0x0817, 0x081c, 0x0821, + 0x082e, 0x0833, 0x0838, 0x0848, 0x0852, 0x0857, 0x085d, 0x0861, + 0x0865, 0x086d, 0x0879, 0x087f, 0x0889, 0x0895, 0x089a, 0x08a0, + 0x08aa, 0x08ae, 0x08b7, 0x08c4, 0x08c7, 0x08d2, 0x08dd, 0x08e5, + 0x08ee, 0x08f9, 0x0903, 0x090c, 0x090e, 0x0919, 0x091e, 0x0922, + 0x0927, 0x0938, 0x093f, 0x0949, 0x094f, 0x095e, 0x096a, 0x0975, + 0x097a, 0x0983, 0x098b, 0x0990, 0x0999, 0x09a5, 0x09aa, 0x09b0, // Entry 140 - 17F - 0x09be, 0x09c3, 0x09c8, 0x09d2, 0x09df, 0x09e9, 0x09f3, 0x09f8, - 0x0a05, 0x0a0c, 0x0a10, 0x0a14, 0x0a1a, 0x0a1f, 0x0a2c, 0x0a34, - 0x0a46, 0x0a4c, 0x0a52, 0x0a59, 0x0a67, 0x0a75, 0x0a7d, 0x0a88, - 0x0a91, 0x0a97, 0x0a9a, 0x0a9f, 0x0aa3, 0x0aad, 0x0ab4, 0x0ab8, - 0x0abf, 0x0ad3, 0x0ada, 0x0ade, 0x0ae6, 0x0aeb, 0x0af4, 0x0b00, - 0x0b06, 0x0b10, 0x0b14, 0x0b1c, 0x0b24, 0x0b32, 0x0b39, 0x0b43, - 0x0b49, 0x0b5d, 0x0b61, 0x0b6a, 0x0b73, 0x0b79, 0x0b81, 0x0b86, - 0x0b8d, 0x0b94, 0x0b9b, 0x0ba1, 0x0ba6, 0x0bac, 0x0bb1, 0x0bb9, + 0x09b5, 0x09be, 0x09c3, 0x09c8, 0x09d2, 0x09df, 0x09e9, 0x09f3, + 0x09f8, 0x0a05, 0x0a0c, 0x0a10, 0x0a14, 0x0a1a, 0x0a1f, 0x0a2c, + 0x0a34, 0x0a46, 0x0a4c, 0x0a52, 0x0a59, 0x0a67, 0x0a75, 0x0a7d, + 0x0a88, 0x0a91, 0x0a97, 0x0a9a, 0x0a9f, 0x0aa3, 0x0aad, 0x0ab4, + 0x0ab8, 0x0abf, 0x0ad3, 0x0ada, 0x0ade, 0x0ae6, 0x0aeb, 0x0af4, + 0x0b00, 0x0b06, 0x0b10, 0x0b14, 0x0b1c, 0x0b24, 0x0b32, 0x0b39, + 0x0b43, 0x0b49, 0x0b5d, 0x0b61, 0x0b6a, 0x0b73, 0x0b79, 0x0b81, + 0x0b86, 0x0b8d, 0x0b94, 0x0b9b, 0x0ba1, 0x0ba6, 0x0bac, 0x0bb1, // Entry 180 - 1BF - 0x0bcb, 0x0bd4, 0x0bd9, 0x0bdf, 0x0bea, 0x0bef, 0x0bf3, 0x0c02, - 0x0c0a, 0x0c14, 0x0c1b, 0x0c20, 0x0c23, 0x0c27, 0x0c2c, 0x0c3c, - 0x0c43, 0x0c4c, 0x0c50, 0x0c56, 0x0c5e, 0x0c68, 0x0c70, 0x0c73, - 0x0c77, 0x0c7d, 0x0c83, 0x0c88, 0x0c8c, 0x0c94, 0x0c9e, 0x0cac, - 0x0cb3, 0x0cbc, 0x0cc7, 0x0ccf, 0x0cd5, 0x0cdb, 0x0ce0, 0x0ce9, - 0x0cf0, 0x0cfe, 0x0d03, 0x0d0c, 0x0d13, 0x0d1b, 0x0d20, 0x0d25, - 0x0d30, 0x0d38, 0x0d43, 0x0d47, 0x0d54, 0x0d5a, 0x0d5e, 0x0d66, - 0x0d6d, 0x0d73, 0x0d7c, 0x0d81, 0x0d89, 0x0d8f, 0x0d95, 0x0da0, + 0x0bb9, 0x0bcb, 0x0bd4, 0x0bd9, 0x0bdf, 0x0bea, 0x0bef, 0x0c00, + 0x0c04, 0x0c13, 0x0c1b, 0x0c25, 0x0c2c, 0x0c31, 0x0c34, 0x0c38, + 0x0c3d, 0x0c4d, 0x0c54, 0x0c5d, 0x0c61, 0x0c67, 0x0c6f, 0x0c79, + 0x0c81, 0x0c84, 0x0c88, 0x0c8e, 0x0c94, 0x0c99, 0x0c9d, 0x0ca5, + 0x0caf, 0x0cbd, 0x0cc4, 0x0ccd, 0x0cd8, 0x0ce0, 0x0ce6, 0x0cec, + 0x0cf1, 0x0cfa, 0x0d01, 0x0d0f, 0x0d14, 0x0d1d, 0x0d24, 0x0d2c, + 0x0d31, 0x0d36, 0x0d41, 0x0d49, 0x0d54, 0x0d58, 0x0d65, 0x0d6b, + 0x0d6f, 0x0d77, 0x0d7e, 0x0d84, 0x0d8d, 0x0d92, 0x0d9a, 0x0da0, // Entry 1C0 - 1FF - 0x0da4, 0x0db7, 0x0dbf, 0x0dc7, 0x0dcc, 0x0dd1, 0x0dd6, 0x0de5, - 0x0def, 0x0df6, 0x0dfe, 0x0e08, 0x0e0e, 0x0e18, 0x0e29, 0x0e3b, - 0x0e47, 0x0e52, 0x0e5b, 0x0e65, 0x0e70, 0x0e78, 0x0e83, 0x0e8f, - 0x0e9e, 0x0ea9, 0x0eaf, 0x0eb9, 0x0ec0, 0x0eca, 0x0ed2, 0x0eda, - 0x0edf, 0x0ee5, 0x0eee, 0x0ef7, 0x0efe, 0x0f07, 0x0f0a, 0x0f11, - 0x0f18, 0x0f2b, 0x0f32, 0x0f37, 0x0f3e, 0x0f48, 0x0f4f, 0x0f54, - 0x0f5e, 0x0f64, 0x0f6d, 0x0f76, 0x0f7c, 0x0f80, 0x0f84, 0x0f8c, - 0x0f9b, 0x0fa2, 0x0fad, 0x0fb7, 0x0fbb, 0x0fcd, 0x0fd3, 0x0fe2, + 0x0da6, 0x0db1, 0x0db5, 0x0dc8, 0x0dd0, 0x0dd8, 0x0ddd, 0x0de2, + 0x0de7, 0x0df6, 0x0e00, 0x0e07, 0x0e0f, 0x0e19, 0x0e1f, 0x0e29, + 0x0e3a, 0x0e4c, 0x0e58, 0x0e63, 0x0e6c, 0x0e76, 0x0e81, 0x0e89, + 0x0e94, 0x0ea0, 0x0eaf, 0x0eba, 0x0ec0, 0x0eca, 0x0ed1, 0x0edb, + 0x0ee3, 0x0eeb, 0x0ef0, 0x0ef6, 0x0eff, 0x0f08, 0x0f0f, 0x0f18, + 0x0f1b, 0x0f22, 0x0f29, 0x0f3c, 0x0f43, 0x0f48, 0x0f4f, 0x0f59, + 0x0f60, 0x0f65, 0x0f6f, 0x0f75, 0x0f7e, 0x0f87, 0x0f8d, 0x0f91, + 0x0f95, 0x0f9d, 0x0fac, 0x0fb3, 0x0fbe, 0x0fc8, 0x0fcc, 0x0fde, // Entry 200 - 23F - 0x0fe9, 0x0ff5, 0x1001, 0x100e, 0x101b, 0x1022, 0x102a, 0x1035, - 0x103a, 0x103e, 0x1048, 0x104e, 0x1054, 0x105e, 0x1066, 0x1076, - 0x107d, 0x1086, 0x108a, 0x108f, 0x1093, 0x1099, 0x109e, 0x10a3, - 0x10a6, 0x10ae, 0x10b5, 0x10bc, 0x10c3, 0x10c9, 0x10d1, 0x10dc, - 0x10e5, 0x10eb, 0x10f1, 0x10fb, 0x1104, 0x110e, 0x1117, 0x1121, - 0x1128, 0x1130, 0x114c, 0x1155, 0x1160, 0x1167, 0x116b, 0x116e, - 0x1178, 0x1180, 0x118b, 0x1199, 0x11a0, 0x11a5, 0x11aa, 0x11b0, - 0x11b8, 0x11bd, 0x11c2, 0x11ca, 0x11ce, 0x11d5, 0x11de, 0x11e2, + 0x0fe4, 0x0ff3, 0x0ffa, 0x1006, 0x1012, 0x101f, 0x102c, 0x1033, + 0x103b, 0x1046, 0x104b, 0x104f, 0x1059, 0x105f, 0x1065, 0x106f, + 0x1077, 0x1087, 0x108e, 0x1097, 0x109b, 0x10a0, 0x10a4, 0x10aa, + 0x10af, 0x10b4, 0x10b7, 0x10bf, 0x10c6, 0x10cd, 0x10d4, 0x10da, + 0x10e2, 0x10ed, 0x10f6, 0x10fc, 0x1102, 0x110c, 0x1115, 0x111f, + 0x1128, 0x1132, 0x1139, 0x1141, 0x115d, 0x1166, 0x1171, 0x1178, + 0x1186, 0x1189, 0x1193, 0x119b, 0x11a6, 0x11b4, 0x11bb, 0x11c0, + 0x11c5, 0x11cb, 0x11d3, 0x11d8, 0x11dd, 0x11e5, 0x11e9, 0x11f0, // Entry 240 - 27F - 0x11e5, 0x11eb, 0x11f2, 0x11f7, 0x1200, 0x1209, 0x1210, 0x121c, - 0x1222, 0x1228, 0x1247, 0x124b, 0x1265, 0x1269, 0x1269, 0x1269, - 0x1269, 0x1269, 0x1269, 0x1269, 0x1269, 0x1269, 0x1269, 0x1269, - 0x1269, 0x1269, 0x1269, 0x1269, 0x1269, 0x1269, 0x1269, 0x1269, - 0x1269, 0x1278, -} // Size: 1244 bytes + 0x11f9, 0x11fd, 0x1200, 0x1206, 0x120d, 0x1212, 0x121b, 0x1224, + 0x122b, 0x1237, 0x123d, 0x1243, 0x1262, 0x1266, 0x1280, 0x1284, + 0x1284, 0x1284, 0x1284, 0x1284, 0x1284, 0x1284, 0x1284, 0x1284, + 0x1284, 0x1284, 0x1284, 0x1284, 0x1284, 0x1284, 0x128e, 0x128e, + 0x128e, 0x128e, 0x128e, 0x129d, +} // Size: 1248 bytes -const noLangStr string = "" + // Size: 4834 bytes +const noLangStr string = "" + // Size: 4856 bytes "afarabkhasiskavestiskafrikaansakanamhariskaragonskarabiskassamesiskavari" + "skaymaraaserbajdsjanskbasjkirskhviterussiskbulgarskbislamabambarabengali" + "tibetanskbretonskbosniskkatalansktsjetsjenskchamorrokorsikanskcreetsjekk" + - "iskkirkeslavisktsjuvasjiskwalisiskdansktyskdhivehidzongkhaewegreskengels" + - "kesperantospanskestiskbaskiskpersiskfulfuldefinskfijianskfærøyskfranskve" + - "stfrisiskirskskotsk-gæliskgalisiskguaranigujaratimanskhausahebraiskhindi" + - "hiri motukroatiskhaitiskungarskarmenskhererointerlinguaindonesiskinterli" + - "ngueibosichuan-yiinupiakidoislandskitalienskinuittiskjapanskjavanesiskge" + - "orgiskkikongokikuyukuanyamakasakhiskgrønlandskkhmerkannadakoreanskkanuri" + - "kasjmirikurdiskkomikorniskkirgisisklatinluxemburgskgandalimburgsklingala" + - "laotisklitauiskluba-katangalatviskgassiskmarshallesiskmaorimakedonskmala" + - "yalammongolskmarathimalayiskmaltesiskburmesisknaurunord-ndebelenepalindo" + - "nganederlandsknorsk nynorsknorsk bokmålsør-ndebelenavajonyanjaoksitansko" + - "jibwaoromooriyaossetiskpunjabipalipolskpashtoportugisiskquechuaretoroman" + - "skrundirumenskrussiskkinyarwandasanskritsardisksindhinordsamisksangosing" + - "alesiskslovakiskslovensksamoanskshonasomalialbanskserbiskswatisør-sothos" + - "undanesisksvenskswahilitamiltelugutadsjikiskthaitigrinjaturkmensksetswan" + - "atongansktyrkisktsongatatarisktahitiskuiguriskukrainskurduusbekiskvendav" + - "ietnamesiskvolapykvallonskwolofxhosajiddiskjorubazhuangkinesiskzuluachin" + - "esiskacoliadangmeadygeisktunisisk-arabiskafrihiliaghemainuakkadiskalabam" + - "aaleutiskgegisk-albansksøraltaiskgammelengelskangikaarameiskmapudungunar" + - "aonaarapahoalgerisk arabiskarawakmarokkansk-arabiskegyptisk arabiskasuam" + - "erikansk tegnspråkasturiskkotavaavadhibaluchibalinesiskbairiskbasaabamun" + - "batak tobaghomalabejabembabetawibenabafutbadagavestbalutsjibhojpuribikol" + - "binibanjarkomsiksikabishnupriyabakhtiaribrajbrahuibodoakoseburjatiskbugi" + - "nesiskbulublinmedumbacaddokaribiskcayugaatsamcebuanskkigachibchatsjagata" + - "ichuukesiskmarichinookchoctawchipewianskcherokesiskcheyennekurdisk (sora" + - "ni)koptiskkapizkrimtatariskseselwakasjubiskdakotadargwataitadelawareslav" + - "eydogribdinkazarmadogrilavsorbisksentraldusundualamellomnederlandskjola-" + - "fonyidyuladazagakiembuefikemilianskgammelegyptiskekajukelamittiskmellome" + - "ngelsksentralyupikewondoekstremaduranskfangfilipinotornedalsfinskfoncaju" + - "nfranskmellomfranskgammelfranskarpitansknordfrisiskøstfrisiskfriulianskg" + - "agagausiskgangayogbayazoroastrisk darigeezkiribatiskgilekimellomhøytyskg" + - "ammelhøytyskgoansk konkanigondigorontalogotiskgrebogammelgresksveitserty" + - "skwayuufrafragusiigwichinhaidahakkahawaiiskfijiansk hindihiligaynonhetti" + - "ttiskhmonghøysorbiskxianghupaibanibibioilokoingusjiskingriskjamaicansk k" + - "reolengelsklojbanngombamachamejødepersiskjødearabiskjyskkarakalpakiskkab" + - "ylskkachinjjukambakawikabardiskkanembutyapmakondekappverdiskkenyangkorok" + - "aingangkhasikhotanesiskkoyra chiinikhowarkirmanckikakokalenjinkimbunduko" + - "mipermjakiskkonkanikosraeanskkpellekaratsjajbalkarskkriokinaray-akarelsk" + - "kurukhshambalabafiakølnskkumykiskkutenailadinsklangilahndalambalesgiskli" + - "ngua franca novaligurisklivisklakotalombardiskmongolozinord-lurilatgalli" + - "skluba-lulualuisenolundaluomizoluhyaklassisk kinesisklaziskmaduresiskmaf" + - "amagahimaithilimakasarmandingomasaimabamoksjamandarmendemerumauritisk-kr" + - "eolskmellomirskmakhuwa-meettometa’micmacminangkabaumandsjumanipurimohawk" + - "mossivestmariskmundangflere språkcreekmirandesiskmarwarimentawaimyeneerz" + - "iamazandaraniminnannapolitansknamanedertysknewariniasniueanskao nagakwas" + - "iongiemboonnogaiskgammelnorsknovialnʼkonord-sothonuerklassisk newarinyam" + - "wezinyankolenyoronzimaosageottomansk tyrkiskpangasinanpahlavipampangapap" + - "iamentopalauiskpikardisknigeriansk pidginspråkpennsylvaniatyskplautdiets" + - "chgammelpersiskpalatintyskfønikiskpiemontesiskpontiskponapiskprøyssiskga" + - "mmelprovençalskquichékichwa (Chimborazo-høylandet)rajasthanirapanuirarot" + - "onganskromagnolskriffromboromanirotumanskrusinskrovianaaromanskrwasandaw" + - "ejakutisksamaritansk arameisksamburusasaksantalisaurashtrangambaysangusi" + - "cilianskskotsksassaresisk sardisksørkurdisksenecasenaseriselkupiskkoyrab" + - "oro sennigammelirsksamogitisktachelhitshantsjadisk arabisksidamolavschle" + - "siskselayarsørsamisklulesamiskenaresamiskskoltesamisksoninkesogdisksrana" + - "nserersahosaterfrisisksukumasususumeriskkomoriskklassisk syriskgammelsyr" + - "iskschlesisktulutemnetesoterenotetumtigrétivtokelauisktsakhurskklingontl" + - "ingittalysjtamasjeknyasa-tongansktok pisinturoyotarokotsakonisktsimshian" + - "muslimsk tattumbukatuvalsktasawaqtuvinsksentralmarokkansk tamazightudmur" + - "tiskugaritiskumbundurotvaivenetianskvepsiskvestflamskMain-frankiskvotisk" + - "sørestiskvunjowalsertyskwolayttawaray-waraywashowarlpiriwukalmukkiskming" + - "relsksogayaoyapesiskyangbenyembanheengatukantonesiskzapotekiskblissymbol" + - "erzeeuwszenagastandard marrokansk tamazightzuniuten språklig innholdzaza" + - "iskmoderne standardarabisknedersaksiskflamskmoldovskserbokroatiskkongole" + - "sisk swahiliforenklet kinesisktradisjonell kinesisk" - -var noLangIdx = []uint16{ // 613 elements + "iskkirkeslavisktsjuvasjiskwalisiskdansktyskdivehidzongkhaewegreskengelsk" + + "esperantospanskestiskbaskiskpersiskfulfuldefinskfijianskfærøyskfranskves" + + "tfrisiskirskskotsk-gæliskgalisiskguaranigujaratimanskhausahebraiskhindih" + + "iri motukroatiskhaitiskungarskarmenskhererointerlinguaindonesiskinterlin" + + "gueibosichuan-yiinupiakidoislandskitalienskinuktitutjapanskjavanesiskgeo" + + "rgiskkikongokikuyukuanyamakasakhiskgrønlandskkhmerkannadakoreanskkanurik" + + "asjmirikurdiskkomikorniskkirgisisklatinluxemburgskgandalimburgsklingalal" + + "aotisklitauiskluba-katangalatviskgassiskmarshallesiskmaorimakedonskmalay" + + "alammongolskmarathimalayiskmaltesiskburmesisknaurunord-ndebelenepalindon" + + "ganederlandsknorsk nynorsknorsk bokmålsør-ndebelenavajonyanjaoksitanskoj" + + "ibwaoromoodiaossetiskpanjabipalipolskpashtoportugisiskquechuaretoromansk" + + "rundirumenskrussiskkinyarwandasanskritsardisksindhinordsamisksangosingal" + + "esiskslovakiskslovensksamoanskshonasomalialbanskserbiskswatisør-sothosun" + + "danesisksvenskswahilitamiltelugutadsjikiskthaitigrinjaturkmensksetswanat" + + "ongansktyrkisktsongatatarisktahitiskuiguriskukrainskurduusbekiskvendavie" + + "tnamesiskvolapykvallonskwolofxhosajiddiskjorubazhuangkinesiskzuluachines" + + "iskacoliadangmeadygeisktunisisk-arabiskafrihiliaghemainuakkadiskalabamaa" + + "leutiskgegisk-albansksøraltaiskgammelengelskangikaarameiskmapudungunarao" + + "naarapahoalgerisk arabiskarawakmarokkansk-arabiskegyptisk arabiskasuamer" + + "ikansk tegnspråkasturiskkotavaavadhibaluchibalinesiskbairiskbasaabamunba" + + "tak tobaghomalabejabembabetawibenabafutbadagavestbalutsjibhojpuribikolbi" + + "nibanjarkomsiksikabishnupriyabakhtiaribrajbrahuibodoakoseburjatiskbugine" + + "siskbulublinmedumbacaddokaribiskcayugaatsamcebuanskkigachibchatsjagataic" + + "huukesiskmarichinookchoctawchipewianskcherokesiskcheyennekurdisk (sorani" + + ")koptiskkapizkrimtatariskseselwakasjubiskdakotadargwataitadelawareslavey" + + "dogribdinkazarmadogrilavsorbisksentraldusundualamellomnederlandskjola-fo" + + "nyidyuladazagakiembuefikemilianskgammelegyptiskekajukelamittiskmellomeng" + + "elsksentralyupikewondoekstremaduranskfangfilipinotornedalsfinskfoncajunf" + + "ranskmellomfranskgammelfranskarpitansknordfrisiskøstfrisiskfriulianskgag" + + "agausiskgangayogbayazoroastrisk darigeezkiribatiskgilekimellomhøytyskgam" + + "melhøytyskgoansk konkanigondigorontalogotiskgrebogammelgresksveitsertysk" + + "wayuufrafragusiigwichinhaidahakkahawaiiskfijiansk hindihiligaynonhettitt" + + "iskhmonghøysorbiskxianghupaibanibibioilokoingusjiskingriskjamaicansk kre" + + "olengelsklojbanngombamachamejødepersiskjødearabiskjyskkarakalpakiskkabyl" + + "skkachinjjukambakawikabardiskkanembutyapmakondekappverdiskkenyangkorokai" + + "ngangkhasikhotanesiskkoyra chiinikhowarkirmanckikakokalenjinkimbundukomi" + + "permjakiskkonkanikosraeanskkpellekaratsjajbalkarskkriokinaray-akarelskku" + + "rukhshambalabafiakølnskkumykiskkutenailadinsklangilahndalambalesgiskling" + + "ua franca novaligurisklivisklakotalombardiskmongolouisianakreolsklozinor" + + "d-lurilatgalliskluba-lulualuisenolundaluomizoluhyaklassisk kinesisklazis" + + "kmaduresiskmafamagahimaithilimakasarmandingomasaimabamoksjamandarmendeme" + + "rumauritisk-kreolskmellomirskmakhuwa-meettometa’micmacminangkabaumandsju" + + "manipurimohawkmossivestmariskmundangflere språkcreekmirandesiskmarwarime" + + "ntawaimyeneerziamazandaraniminnannapolitansknamanedertysknewariniasniuea" + + "nskao nagakwasiongiemboonnogaiskgammelnorsknovialnʼkonord-sothonuerklass" + + "isk newarinyamwezinyankolenyoronzimaosageottomansk tyrkiskpangasinanpahl" + + "avipampangapapiamentopalauiskpikardisknigeriansk pidginspråkpennsylvania" + + "tyskplautdietschgammelpersiskpalatintyskfønikiskpiemontesiskpontiskponap" + + "iskprøyssiskgammelprovençalskk’iche’kichwa (Chimborazo-høylandet)rajasth" + + "anirapanuirarotonganskromagnolskriffromboromanirotumanskrusinskrovianaar" + + "omanskrwasandawesakhasamaritansk arameisksamburusasaksantalisaurashtrang" + + "ambaysangusicilianskskotsksassaresisk sardisksørkurdisksenecasenaserisel" + + "kupiskkoyraboro sennigammelirsksamogitisktachelhitshantsjadisk arabisksi" + + "damolavschlesiskselayarsørsamisklulesamiskenaresamiskskoltesamisksoninke" + + "sogdisksrananserersahosaterfrisisksukumasususumeriskkomoriskklassisk syr" + + "isksyriakiskschlesisktulutemnetesoterenotetumtigrétivtokelauisktsakhursk" + + "klingontlingittalysjtamasjeknyasa-tongansktok pisinturoyotarokotsakonisk" + + "tsimshianmuslimsk tattumbukatuvalsktasawaqtuvinsksentralmarokkansk tamaz" + + "ightudmurtiskugaritiskumbunduukjent språkvaivenetianskvepsiskvestflamskM" + + "ain-frankiskvotisksørestiskvunjowalsertyskwolayttawaray-waraywashowarlpi" + + "riwukalmukkiskmingrelsksogayaoyapesiskyangbenyembanheengatukantonesiskza" + + "potekiskblissymbolerzeeuwszenagastandard marrokansk tamazightzuniuten sp" + + "råklig innholdzazaiskmoderne standardarabisknedersaksiskflamskmoldovskse" + + "rbokroatiskkongolesisk swahiliforenklet kinesisktradisjonell kinesisk" + +var noLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0004, 0x000d, 0x0015, 0x001e, 0x0022, 0x002a, 0x0032, 0x0039, 0x0043, 0x004a, 0x0050, 0x005e, 0x0067, 0x0073, 0x007b, 0x0082, 0x0089, 0x0090, 0x0099, 0x00a1, 0x00a8, 0x00b1, 0x00bc, 0x00c4, 0x00ce, 0x00d2, 0x00db, 0x00e7, 0x00f2, 0x00fa, 0x00ff, - 0x0103, 0x010a, 0x0112, 0x0115, 0x011a, 0x0121, 0x012a, 0x0130, - 0x0136, 0x013d, 0x0144, 0x014c, 0x0151, 0x0159, 0x0162, 0x0168, - 0x0173, 0x0177, 0x0185, 0x018d, 0x0194, 0x019c, 0x01a1, 0x01a6, - 0x01ae, 0x01b3, 0x01bc, 0x01c4, 0x01cb, 0x01d2, 0x01d9, 0x01df, + 0x0103, 0x0109, 0x0111, 0x0114, 0x0119, 0x0120, 0x0129, 0x012f, + 0x0135, 0x013c, 0x0143, 0x014b, 0x0150, 0x0158, 0x0161, 0x0167, + 0x0172, 0x0176, 0x0184, 0x018c, 0x0193, 0x019b, 0x01a0, 0x01a5, + 0x01ad, 0x01b2, 0x01bb, 0x01c3, 0x01ca, 0x01d1, 0x01d8, 0x01de, // Entry 40 - 7F - 0x01ea, 0x01f4, 0x01ff, 0x0202, 0x020c, 0x0213, 0x0216, 0x021e, - 0x0227, 0x0230, 0x0237, 0x0241, 0x0249, 0x0250, 0x0256, 0x025e, - 0x0267, 0x0272, 0x0277, 0x027e, 0x0286, 0x028c, 0x0294, 0x029b, - 0x029f, 0x02a6, 0x02af, 0x02b4, 0x02bf, 0x02c4, 0x02cd, 0x02d4, - 0x02db, 0x02e3, 0x02ef, 0x02f6, 0x02fd, 0x030a, 0x030f, 0x0318, - 0x0321, 0x0329, 0x0330, 0x0338, 0x0341, 0x034a, 0x034f, 0x035b, - 0x0361, 0x0367, 0x0372, 0x037f, 0x038c, 0x0398, 0x039e, 0x03a4, - 0x03ad, 0x03b3, 0x03b8, 0x03bd, 0x03c5, 0x03cc, 0x03d0, 0x03d5, + 0x01e9, 0x01f3, 0x01fe, 0x0201, 0x020b, 0x0212, 0x0215, 0x021d, + 0x0226, 0x022f, 0x0236, 0x0240, 0x0248, 0x024f, 0x0255, 0x025d, + 0x0266, 0x0271, 0x0276, 0x027d, 0x0285, 0x028b, 0x0293, 0x029a, + 0x029e, 0x02a5, 0x02ae, 0x02b3, 0x02be, 0x02c3, 0x02cc, 0x02d3, + 0x02da, 0x02e2, 0x02ee, 0x02f5, 0x02fc, 0x0309, 0x030e, 0x0317, + 0x0320, 0x0328, 0x032f, 0x0337, 0x0340, 0x0349, 0x034e, 0x035a, + 0x0360, 0x0366, 0x0371, 0x037e, 0x038b, 0x0397, 0x039d, 0x03a3, + 0x03ac, 0x03b2, 0x03b7, 0x03bb, 0x03c3, 0x03ca, 0x03ce, 0x03d3, // Entry 80 - BF - 0x03db, 0x03e6, 0x03ed, 0x03f8, 0x03fd, 0x0404, 0x040b, 0x0416, - 0x041e, 0x0425, 0x042b, 0x0435, 0x043a, 0x0445, 0x044e, 0x0456, - 0x045e, 0x0463, 0x0469, 0x0470, 0x0477, 0x047c, 0x0486, 0x0491, - 0x0497, 0x049e, 0x04a3, 0x04a9, 0x04b3, 0x04b7, 0x04bf, 0x04c8, - 0x04d0, 0x04d8, 0x04df, 0x04e5, 0x04ed, 0x04f5, 0x04fd, 0x0505, - 0x0509, 0x0511, 0x0516, 0x0522, 0x0529, 0x0531, 0x0536, 0x053b, - 0x0542, 0x0548, 0x054e, 0x0556, 0x055a, 0x0564, 0x0569, 0x0570, - 0x0578, 0x0588, 0x0590, 0x0595, 0x0599, 0x05a1, 0x05a8, 0x05b0, + 0x03d9, 0x03e4, 0x03eb, 0x03f6, 0x03fb, 0x0402, 0x0409, 0x0414, + 0x041c, 0x0423, 0x0429, 0x0433, 0x0438, 0x0443, 0x044c, 0x0454, + 0x045c, 0x0461, 0x0467, 0x046e, 0x0475, 0x047a, 0x0484, 0x048f, + 0x0495, 0x049c, 0x04a1, 0x04a7, 0x04b1, 0x04b5, 0x04bd, 0x04c6, + 0x04ce, 0x04d6, 0x04dd, 0x04e3, 0x04eb, 0x04f3, 0x04fb, 0x0503, + 0x0507, 0x050f, 0x0514, 0x0520, 0x0527, 0x052f, 0x0534, 0x0539, + 0x0540, 0x0546, 0x054c, 0x0554, 0x0558, 0x0562, 0x0567, 0x056e, + 0x0576, 0x0586, 0x058e, 0x0593, 0x0597, 0x059f, 0x05a6, 0x05ae, // Entry C0 - FF - 0x05be, 0x05c9, 0x05d6, 0x05dc, 0x05e4, 0x05ee, 0x05f4, 0x05fb, - 0x060b, 0x060b, 0x0611, 0x0623, 0x0633, 0x0636, 0x064b, 0x0653, - 0x0659, 0x065f, 0x0666, 0x0670, 0x0677, 0x067c, 0x0681, 0x068b, - 0x0692, 0x0696, 0x069b, 0x06a1, 0x06a5, 0x06aa, 0x06b0, 0x06bc, - 0x06c4, 0x06c9, 0x06cd, 0x06d3, 0x06d6, 0x06dd, 0x06e8, 0x06f1, - 0x06f5, 0x06fb, 0x06ff, 0x0704, 0x070d, 0x0717, 0x071b, 0x071f, - 0x0726, 0x072b, 0x0733, 0x0739, 0x073e, 0x0746, 0x074a, 0x0751, - 0x075a, 0x0764, 0x0768, 0x076f, 0x0776, 0x0781, 0x078c, 0x0794, + 0x05bc, 0x05c7, 0x05d4, 0x05da, 0x05e2, 0x05ec, 0x05f2, 0x05f9, + 0x0609, 0x0609, 0x060f, 0x0621, 0x0631, 0x0634, 0x0649, 0x0651, + 0x0657, 0x065d, 0x0664, 0x066e, 0x0675, 0x067a, 0x067f, 0x0689, + 0x0690, 0x0694, 0x0699, 0x069f, 0x06a3, 0x06a8, 0x06ae, 0x06ba, + 0x06c2, 0x06c7, 0x06cb, 0x06d1, 0x06d4, 0x06db, 0x06e6, 0x06ef, + 0x06f3, 0x06f9, 0x06fd, 0x0702, 0x070b, 0x0715, 0x0719, 0x071d, + 0x0724, 0x0729, 0x0731, 0x0737, 0x073c, 0x073c, 0x0744, 0x0748, + 0x074f, 0x0758, 0x0762, 0x0766, 0x076d, 0x0774, 0x077f, 0x078a, // Entry 100 - 13F - 0x07a4, 0x07ab, 0x07b0, 0x07bc, 0x07c3, 0x07cc, 0x07d2, 0x07d8, - 0x07dd, 0x07e5, 0x07eb, 0x07f1, 0x07f6, 0x07fb, 0x0800, 0x080a, - 0x0816, 0x081b, 0x082c, 0x0836, 0x083b, 0x0841, 0x0847, 0x084b, - 0x0854, 0x0862, 0x0868, 0x0872, 0x087f, 0x088b, 0x0891, 0x08a0, - 0x08a4, 0x08ac, 0x08ba, 0x08bd, 0x08c8, 0x08d4, 0x08e0, 0x08e9, - 0x08f4, 0x08ff, 0x0909, 0x090b, 0x0914, 0x0917, 0x091b, 0x0920, - 0x0930, 0x0934, 0x093e, 0x0944, 0x0952, 0x0960, 0x096e, 0x0973, - 0x097c, 0x0982, 0x0987, 0x0992, 0x099e, 0x09a3, 0x09a9, 0x09ae, + 0x0792, 0x07a2, 0x07a9, 0x07ae, 0x07ba, 0x07c1, 0x07ca, 0x07d0, + 0x07d6, 0x07db, 0x07e3, 0x07e9, 0x07ef, 0x07f4, 0x07f9, 0x07fe, + 0x0808, 0x0814, 0x0819, 0x082a, 0x0834, 0x0839, 0x083f, 0x0845, + 0x0849, 0x0852, 0x0860, 0x0866, 0x0870, 0x087d, 0x0889, 0x088f, + 0x089e, 0x08a2, 0x08aa, 0x08b8, 0x08bb, 0x08c6, 0x08d2, 0x08de, + 0x08e7, 0x08f2, 0x08fd, 0x0907, 0x0909, 0x0912, 0x0915, 0x0919, + 0x091e, 0x092e, 0x0932, 0x093c, 0x0942, 0x0950, 0x095e, 0x096c, + 0x0971, 0x097a, 0x0980, 0x0985, 0x0990, 0x099c, 0x09a1, 0x09a7, // Entry 140 - 17F - 0x09b5, 0x09ba, 0x09bf, 0x09c7, 0x09d5, 0x09df, 0x09e9, 0x09ee, - 0x09f9, 0x09fe, 0x0a02, 0x0a06, 0x0a0c, 0x0a11, 0x0a1a, 0x0a21, - 0x0a38, 0x0a3e, 0x0a44, 0x0a4b, 0x0a57, 0x0a63, 0x0a67, 0x0a74, - 0x0a7b, 0x0a81, 0x0a84, 0x0a89, 0x0a8d, 0x0a96, 0x0a9d, 0x0aa1, - 0x0aa8, 0x0ab3, 0x0aba, 0x0abe, 0x0ac6, 0x0acb, 0x0ad6, 0x0ae2, - 0x0ae8, 0x0af1, 0x0af5, 0x0afd, 0x0b05, 0x0b13, 0x0b1a, 0x0b24, - 0x0b2a, 0x0b3b, 0x0b3f, 0x0b48, 0x0b4f, 0x0b55, 0x0b5d, 0x0b62, - 0x0b69, 0x0b71, 0x0b78, 0x0b7f, 0x0b84, 0x0b8a, 0x0b8f, 0x0b96, + 0x09ac, 0x09b3, 0x09b8, 0x09bd, 0x09c5, 0x09d3, 0x09dd, 0x09e7, + 0x09ec, 0x09f7, 0x09fc, 0x0a00, 0x0a04, 0x0a0a, 0x0a0f, 0x0a18, + 0x0a1f, 0x0a36, 0x0a3c, 0x0a42, 0x0a49, 0x0a55, 0x0a61, 0x0a65, + 0x0a72, 0x0a79, 0x0a7f, 0x0a82, 0x0a87, 0x0a8b, 0x0a94, 0x0a9b, + 0x0a9f, 0x0aa6, 0x0ab1, 0x0ab8, 0x0abc, 0x0ac4, 0x0ac9, 0x0ad4, + 0x0ae0, 0x0ae6, 0x0aef, 0x0af3, 0x0afb, 0x0b03, 0x0b11, 0x0b18, + 0x0b22, 0x0b28, 0x0b39, 0x0b3d, 0x0b46, 0x0b4d, 0x0b53, 0x0b5b, + 0x0b60, 0x0b67, 0x0b6f, 0x0b76, 0x0b7d, 0x0b82, 0x0b88, 0x0b8d, // Entry 180 - 1BF - 0x0ba8, 0x0bb0, 0x0bb6, 0x0bbc, 0x0bc6, 0x0bcb, 0x0bcf, 0x0bd8, - 0x0be2, 0x0bec, 0x0bf3, 0x0bf8, 0x0bfb, 0x0bff, 0x0c04, 0x0c15, - 0x0c1b, 0x0c25, 0x0c29, 0x0c2f, 0x0c37, 0x0c3e, 0x0c46, 0x0c4b, - 0x0c4f, 0x0c55, 0x0c5b, 0x0c60, 0x0c64, 0x0c75, 0x0c7f, 0x0c8d, - 0x0c94, 0x0c9a, 0x0ca5, 0x0cac, 0x0cb4, 0x0cba, 0x0cbf, 0x0cc9, - 0x0cd0, 0x0cdc, 0x0ce1, 0x0cec, 0x0cf3, 0x0cfb, 0x0d00, 0x0d05, - 0x0d10, 0x0d16, 0x0d21, 0x0d25, 0x0d2e, 0x0d34, 0x0d38, 0x0d40, - 0x0d47, 0x0d4d, 0x0d56, 0x0d5d, 0x0d68, 0x0d6e, 0x0d73, 0x0d7d, + 0x0b94, 0x0ba6, 0x0bae, 0x0bb4, 0x0bba, 0x0bc4, 0x0bc9, 0x0bd9, + 0x0bdd, 0x0be6, 0x0bf0, 0x0bfa, 0x0c01, 0x0c06, 0x0c09, 0x0c0d, + 0x0c12, 0x0c23, 0x0c29, 0x0c33, 0x0c37, 0x0c3d, 0x0c45, 0x0c4c, + 0x0c54, 0x0c59, 0x0c5d, 0x0c63, 0x0c69, 0x0c6e, 0x0c72, 0x0c83, + 0x0c8d, 0x0c9b, 0x0ca2, 0x0ca8, 0x0cb3, 0x0cba, 0x0cc2, 0x0cc8, + 0x0ccd, 0x0cd7, 0x0cde, 0x0cea, 0x0cef, 0x0cfa, 0x0d01, 0x0d09, + 0x0d0e, 0x0d13, 0x0d1e, 0x0d24, 0x0d2f, 0x0d33, 0x0d3c, 0x0d42, + 0x0d46, 0x0d4e, 0x0d55, 0x0d5b, 0x0d64, 0x0d6b, 0x0d76, 0x0d7c, // Entry 1C0 - 1FF - 0x0d81, 0x0d90, 0x0d98, 0x0da0, 0x0da5, 0x0daa, 0x0daf, 0x0dc0, - 0x0dca, 0x0dd1, 0x0dd9, 0x0de3, 0x0deb, 0x0df4, 0x0e0b, 0x0e1b, - 0x0e27, 0x0e34, 0x0e3f, 0x0e48, 0x0e54, 0x0e5b, 0x0e63, 0x0e6d, - 0x0e7f, 0x0e86, 0x0ea4, 0x0eae, 0x0eb5, 0x0ec1, 0x0ecb, 0x0ecf, - 0x0ed4, 0x0eda, 0x0ee3, 0x0eea, 0x0ef1, 0x0ef9, 0x0efc, 0x0f03, - 0x0f0b, 0x0f1f, 0x0f26, 0x0f2b, 0x0f32, 0x0f3c, 0x0f43, 0x0f48, - 0x0f52, 0x0f58, 0x0f6b, 0x0f76, 0x0f7c, 0x0f80, 0x0f84, 0x0f8d, - 0x0f9c, 0x0fa6, 0x0fb0, 0x0fb9, 0x0fbd, 0x0fcd, 0x0fd3, 0x0fdf, + 0x0d81, 0x0d8b, 0x0d8f, 0x0d9e, 0x0da6, 0x0dae, 0x0db3, 0x0db8, + 0x0dbd, 0x0dce, 0x0dd8, 0x0ddf, 0x0de7, 0x0df1, 0x0df9, 0x0e02, + 0x0e19, 0x0e29, 0x0e35, 0x0e42, 0x0e4d, 0x0e56, 0x0e62, 0x0e69, + 0x0e71, 0x0e7b, 0x0e8d, 0x0e98, 0x0eb6, 0x0ec0, 0x0ec7, 0x0ed3, + 0x0edd, 0x0ee1, 0x0ee6, 0x0eec, 0x0ef5, 0x0efc, 0x0f03, 0x0f0b, + 0x0f0e, 0x0f15, 0x0f1a, 0x0f2e, 0x0f35, 0x0f3a, 0x0f41, 0x0f4b, + 0x0f52, 0x0f57, 0x0f61, 0x0f67, 0x0f7a, 0x0f85, 0x0f8b, 0x0f8f, + 0x0f93, 0x0f9c, 0x0fab, 0x0fb5, 0x0fbf, 0x0fc8, 0x0fcc, 0x0fdc, // Entry 200 - 23F - 0x0fe6, 0x0ff0, 0x0ffa, 0x1005, 0x1011, 0x1018, 0x101f, 0x1025, - 0x102a, 0x102e, 0x103a, 0x1040, 0x1044, 0x104c, 0x1054, 0x1063, - 0x106f, 0x1078, 0x107c, 0x1081, 0x1085, 0x108b, 0x1090, 0x1096, - 0x1099, 0x10a3, 0x10ac, 0x10b3, 0x10ba, 0x10c0, 0x10c8, 0x10d6, - 0x10df, 0x10e5, 0x10eb, 0x10f4, 0x10fd, 0x1109, 0x1110, 0x1117, - 0x111e, 0x1125, 0x1140, 0x1149, 0x1152, 0x1159, 0x115c, 0x115f, - 0x1169, 0x1170, 0x117a, 0x1187, 0x118d, 0x1197, 0x119c, 0x11a6, - 0x11ae, 0x11b9, 0x11be, 0x11c6, 0x11c8, 0x11d2, 0x11db, 0x11df, + 0x0fe2, 0x0fee, 0x0ff5, 0x0fff, 0x1009, 0x1014, 0x1020, 0x1027, + 0x102e, 0x1034, 0x1039, 0x103d, 0x1049, 0x104f, 0x1053, 0x105b, + 0x1063, 0x1072, 0x107b, 0x1084, 0x1088, 0x108d, 0x1091, 0x1097, + 0x109c, 0x10a2, 0x10a5, 0x10af, 0x10b8, 0x10bf, 0x10c6, 0x10cc, + 0x10d4, 0x10e2, 0x10eb, 0x10f1, 0x10f7, 0x1100, 0x1109, 0x1115, + 0x111c, 0x1123, 0x112a, 0x1131, 0x114c, 0x1155, 0x115e, 0x1165, + 0x1172, 0x1175, 0x117f, 0x1186, 0x1190, 0x119d, 0x11a3, 0x11ad, + 0x11b2, 0x11bc, 0x11c4, 0x11cf, 0x11d4, 0x11dc, 0x11de, 0x11e8, // Entry 240 - 27F - 0x11e2, 0x11ea, 0x11f1, 0x11f6, 0x11ff, 0x120a, 0x1214, 0x1220, - 0x1226, 0x122c, 0x1249, 0x124d, 0x1263, 0x126a, 0x1281, 0x1281, - 0x1281, 0x1281, 0x1281, 0x1281, 0x1281, 0x1281, 0x1281, 0x1281, - 0x1281, 0x1281, 0x1281, 0x1281, 0x128d, 0x1293, 0x1293, 0x1293, - 0x129b, 0x12a8, 0x12bb, 0x12cd, 0x12e2, -} // Size: 1250 bytes - -const paLangStr string = "" + // Size: 8148 bytes + 0x11f1, 0x11f5, 0x11f8, 0x1200, 0x1207, 0x120c, 0x1215, 0x1220, + 0x122a, 0x1236, 0x123c, 0x1242, 0x125f, 0x1263, 0x1279, 0x1280, + 0x1297, 0x1297, 0x1297, 0x1297, 0x1297, 0x1297, 0x1297, 0x1297, + 0x1297, 0x1297, 0x1297, 0x1297, 0x1297, 0x1297, 0x12a3, 0x12a9, + 0x12a9, 0x12a9, 0x12b1, 0x12be, 0x12d1, 0x12e3, 0x12f8, +} // Size: 1254 bytes + +const paLangStr string = "" + // Size: 8284 bytes "ਅਫ਼ਾਰਅਬਖਾਜ਼ੀਅਨਅਫ਼ਰੀਕੀਅਕਾਨਅਮਹਾਰਿਕਅਰਾਗੋਨੀਅਰਬੀਅਸਾਮੀਅਵਾਰਿਕਅਈਮਾਰਾਅਜ਼ਰਬਾਈਜਾਨੀਬ" + "ਸ਼ਕੀਰਬੇਲਾਰੂਸੀਬੁਲਗਾਰੀਆਈਬਿਸਲਾਮਾਬੰਬਾਰਾਬੰਗਾਲੀਤਿੱਬਤੀਬਰੇਟਨਬੋਸਨੀਆਈਕੈਟਾਲਾਨਚੇਚਨ" + "ਚਮੋਰੋਕੋਰਸੀਕਨਚੈੱਕਚਰਚ ਸਲਾਵੀਚੁਵਾਸ਼ਵੈਲਸ਼ਡੈਨਿਸ਼ਜਰਮਨਦਿਵੇਹੀਜ਼ੋਂਗਖਾਈਵਈਯੂਨਾਨੀਅੰ" + @@ -22627,28 +23998,29 @@ const paLangStr string = "" + // Size: 8148 bytes "ਅੰਗਰੇਜ਼ੀਅੰਗਿਕਾਮਾਪੁਚੇਅਰਾਫਾਓਅਸੂਅਸਤੂਰੀਅਵਧੀਬਾਲੀਨੀਜ਼ਬਾਸਾਬੇਮਬਾਬੇਨਾਪੱਛਮੀ ਬਲੂਚ" + "ੀਭੋਜਪੁਰੀਬਿਨੀਸਿਕਸਿਕਾਬੋਡੋਬਗਨੀਜ਼ਬਲਿਨਸੀਬੂਆਨੋਚੀਗਾਚੂਕੀਸਮਾਰੀਚੌਕਟੋਚੇਰੋਕੀਛਾਇਆਨਕ" + "ੇਂਦਰੀ ਕੁਰਦਿਸ਼ਸੇਸੇਲਵਾ ਕ੍ਰਿਓਲ ਫ੍ਰੈਂਚਡਕੋਟਾਦਾਰਗਵਾਟੇਟਾਡੋਗਰਿੱਬਜ਼ਾਰਮਾਲੋਅਰ ਸੋਰ" + - "ਬੀਅਨਡੂਆਲਾਜੋਲਾ-ਫੋਇਨੀਡਜ਼ਾਗਾਇੰਬੂਐਫਿਕਪੁਰਾਤਨ ਮਿਸਰੀਏਕਾਜੁਕਇਵੋਂਡੋਫਿਲੀਪਿਨੋਫੌਨਫਰ" + - "ੀਉਲੀਅਨਗਾਗਾਗੌਜ਼ਚੀਨੀ ਗਾਨਜੀਜ਼ਗਿਲਬਰਤੀਜ਼ਗੋਰੋਂਤਾਲੋਪੁਰਾਤਨ ਯੂਨਾਨੀਜਰਮਨ (ਸਵਿਸ)ਗੁ" + - "ਸੀਗਵਿਚ’ਇਨਚੀਨੀ ਹਾਕਾਹਵਾਈਫਿਜੀ ਹਿੰਦੀਹਿਲੀਗੇਨਨਹਮੋਂਗਅੱਪਰ ਸੋਰਬੀਅਨਚੀਨੀ ਜ਼ਿਆਂਗਹੂ" + - "ਪਾਇਬਾਨਇਬੀਬੀਓਇਲੋਕੋਇੰਗੁਸ਼ਲੋਜਬਾਨਨਗੋਂਬਾਮਚਾਮੇਕਬਾਇਲਕਾਚਿਨਜਜੂਕੰਬਾਕਬਾਰਦੀਟਾਇਪਮਕੋ" + - "ਂਡਕਾਬੁਵੇਰਦਿਆਨੂਕੋਰੋਖਾਸੀਕੋਯਰਾ ਚੀਨੀਕਾਕੋਕਲੇਜਿਨਕਿਮਬੁੰਦੂਕੋਮੀ-ਪੇਰਮਿਆਕਕੋਂਕਣੀਕਪ" + - "ੇਲਕਰਾਚੇ ਬਲਕਾਰਕਰੀਲੀਅਨਕੁਰੁਖਸ਼ੰਬਾਲਾਬਫ਼ੀਆਕਲੋਗਨੀਅਨਕੁਮੀਕਲੈਡੀਨੋਲੰਗਾਈਲੈਜ਼ਗੀਲਕੋ" + - "ਟਾਲੋਜ਼ੀਉੱਤਰੀ ਲੁਰੀਲੁੰਡਾਲੂਓਮਿਜ਼ੋਲੂਈਆਮਾਡੂਰੀਸਮਗਾਹੀਮੈਥਲੀਮਕਾਸਰਮਸਾਈਮੋਕਸ਼ਾਮੇਂਡ" + - "ੇਮੇਰੂਮੋਰੀਸਿਅਨਮਖੋਵਾ-ਮਿੱਟੋਮੇਟਾਮਾਇਮੈਕਮਿਨਾਂਗਕਾਬਾਓਮਨੀਪੁਰੀਮੋਹਆਕਮੋਸੀਮੁੰਡੇਂਗਬਹ" + - "ੁਤੀਆਂ ਬੋਲੀਆਂਕ੍ਰੀਕਮਿਰਾਂਡੀਇਰਜ਼ੀਆਮੇਜ਼ੈਂਡਰਾਨੀਚੀਨੀ ਮਿਨ ਨਾਨਨਿਆਪੋਲੀਟਨਨਾਮਾਲੋ ਜ" + - "ਰਮਨਨੇਵਾਰੀਨਿਆਸਨਿਊਏਈਕਵਾਸਿਓਨਿਓਮਬੂਨਨੋਗਾਈਐਂਕੋਉੱਤਰੀ ਸੋਥੋਨੁਏਰਨਿਆਂਕੋਲੇਪੰਗਾਸੀਨਾ" + - "ਨਪੈਂਪਾਂਗਾਪਾਪਿਆਮੈਂਟੋਪਲਾਊਵੀਨਾਇਜੀਰੀਆਈ ਪਿਡਗਿਨਪਰੂਸ਼ੀਆਕੇਸ਼ਰਾਜਸਥਾਨੀਰਾਪਾਨੁਈਰਾਰ" + - "ੋਤੋਂਗਨਰੋਮਬੋਅਰੋਮੀਨੀਆਈਰਵਾਸਾਂਡੋਸਾਖਾਸਮਬੁਰੂਸੰਥਾਲੀਨਗਾਂਬੇਸੇਂਗੋਸਿਸੀਲੀਅਨਸਕਾਟਸਦੱ" + - "ਖਣੀ ਕੁਰਦਿਸ਼ਸੇਨਾਕੋਇਰਾਬੋਰੋ ਸੇਂਨੀਟਚੇਲਹਿਟਸ਼ਾਨਦੱਖਣੀ ਸਾਮੀਲਿਊਲ ਸਾਮੀਇਨਾਰੀ ਸਾਮੀ" + - "ਸਕੌਲਟ ਸਾਮੀਸੋਨਿੰਕੇਸ੍ਰਾਨਾਨ ਟੋਂਗੋਸਾਹੋਸੁਕੁਮਾਕੋਮੋਰੀਅਨਸੀਰੀਆਈਟਿਮਨੇਟੇਸੋਟੇਟਮਟਿਗ" + - "ਰਾਕਲਿੰਗਨਟੋਕ ਪਿਸਿਨਟਾਰੋਕੋਤੁੰਬੁਕਾਟਿਊਵਾਲੂਤਾਸਾਵਿਕਤੁਵੀਨੀਅਨਮੱਧ ਐਟਲਸ ਤਮਾਜ਼ਿਤਉਦ" + - "ਮੁਰਤਉਮਬੁੰਡੂਰੂਟਵਾਈਵੂੰਜੋਵਾਲਸਰਵੋਲਾਏਟਾਵੈਰੇਵਾਲਪੁਰੀਚੀਨੀ ਵੂਕਾਲਮਿਕਸੋਗਾਯਾਂਗਬੇਨਯ" + - "ੇਂਬਾਕੈਂਟੋਨੀਜ਼ਮਿਆਰੀ ਮੋਰੋਕੇਨ ਟਾਮਾਜ਼ਿਕਜ਼ੂਨੀਬੋਲੀ ਸੰਬੰਧੀ ਕੋਈ ਸਮੱਗਰੀ ਨਹੀਂਜ਼ਾ" + - "ਜ਼ਾਆਧੁਨਿਕ ਮਿਆਰੀ ਅਰਬੀਜਰਮਨ (ਆਸਟਰੀਆਈ)ਅੰਗਰੇਜ਼ੀ (ਬਰਤਾਨਵੀ)ਅੰਗਰੇਜ਼ੀ (ਅਮਰੀਕੀ)ਸ" + - "ਪੇਨੀ (ਯੂਰਪੀ)ਫਰਾਂਸੀਸੀ (ਕੈਨੇਡੀਅਨ)ਲੋ ਸੈਕਸਨਫਲੈਮਿਸ਼ਪੁਰਤਗਾਲੀ (ਬ੍ਰਾਜ਼ੀਲੀ)ਪੁਰਤ" + - "ਗਾਲੀ (ਯੂਰਪੀ)ਮੋਲਡਾਵੀਆਈਚੀਨੀ (ਸਰਲ)ਚੀਨੀ (ਰਵਾਇਤੀ)" - -var paLangIdx = []uint16{ // 613 elements + "ਬੀਅਨਡੂਆਲਾਜੋਲਾ-ਫੋਇਨੀਡਜ਼ਾਗਾਇੰਬੂਐਫਿਕਪੁਰਾਤਨ ਮਿਸਰੀਏਕਾਜੁਕਇਵੋਂਡੋਫਿਲੀਪਿਨੋਫੌਨਕੇ" + + "ਜੁਨ ਫ੍ਰੇੰਚਫਰੀਉਲੀਅਨਗਾਗਾਗੌਜ਼ਚੀਨੀ ਗਾਨਜੀਜ਼ਗਿਲਬਰਤੀਜ਼ਗੋਰੋਂਤਾਲੋਪੁਰਾਤਨ ਯੂਨਾਨੀਜ" + + "ਰਮਨ (ਸਵਿਸ)ਗੁਸੀਗਵਿਚ’ਇਨਚੀਨੀ ਹਾਕਾਹਵਾਈਫਿਜੀ ਹਿੰਦੀਹਿਲੀਗੇਨਨਹਮੋਂਗਅੱਪਰ ਸੋਰਬੀਅਨਚ" + + "ੀਨੀ ਜ਼ਿਆਂਗਹੂਪਾਇਬਾਨਇਬੀਬੀਓਇਲੋਕੋਇੰਗੁਸ਼ਲੋਜਬਾਨਨਗੋਂਬਾਮਚਾਮੇਕਬਾਇਲਕਾਚਿਨਜਜੂਕੰਬਾਕ" + + "ਬਾਰਦੀਟਾਇਪਮਕੋਂਡਕਾਬੁਵੇਰਦਿਆਨੂਕੋਰੋਖਾਸੀਕੋਯਰਾ ਚੀਨੀਕਾਕੋਕਲੇਜਿਨਕਿਮਬੁੰਦੂਕੋਮੀ-ਪੇਰ" + + "ਮਿਆਕਕੋਂਕਣੀਕਪੇਲਕਰਾਚੇ ਬਲਕਾਰਕਰੀਲੀਅਨਕੁਰੁਖਸ਼ੰਬਾਲਾਬਫ਼ੀਆਕਲੋਗਨੀਅਨਕੁਮੀਕਲੈਡੀਨੋਲੰ" + + "ਗਾਈਲੈਜ਼ਗੀਲਕੋਟਾਲੇਉਲੋਜ਼ੀਉੱਤਰੀ ਲੁਰੀਲਿਊਬਾ-ਲਿਊਲਿਆਲੁੰਡਾਲੂਓਮਿਜ਼ੋਲੂਈਆਮਾਡੂਰੀਸਮਗ" + + "ਾਹੀਮੈਥਲੀਮਕਾਸਰਮਸਾਈਮੋਕਸ਼ਾਮੇਂਡੇਮੇਰੂਮੋਰੀਸਿਅਨਮਖੋਵਾ-ਮਿੱਟੋਮੇਟਾਮਾਇਮੈਕਮਿਨਾਂਗਕਾਬ" + + "ਾਓਮਨੀਪੁਰੀਮੋਹਆਕਮੋਸੀਮੁੰਡੇਂਗਬਹੁਤੀਆਂ ਬੋਲੀਆਂਕ੍ਰੀਕਮਿਰਾਂਡੀਇਰਜ਼ੀਆਮੇਜ਼ੈਂਡਰਾਨੀਚੀ" + + "ਨੀ ਮਿਨ ਨਾਨਨਿਆਪੋਲੀਟਨਨਾਮਾਲੋ ਜਰਮਨਨੇਵਾਰੀਨਿਆਸਨਿਊਏਈਕਵਾਸਿਓਨਿਓਮਬੂਨਨੋਗਾਈਐਂਕੋਉੱਤ" + + "ਰੀ ਸੋਥੋਨੁਏਰਨਿਆਂਕੋਲੇਪੰਗਾਸੀਨਾਨਪੈਂਪਾਂਗਾਪਾਪਿਆਮੈਂਟੋਪਲਾਊਵੀਨਾਇਜੀਰੀਆਈ ਪਿਡਗਿਨਪਰ" + + "ੂਸ਼ੀਆਕੇਸ਼ਰਾਜਸਥਾਨੀਰਾਪਾਨੁਈਰਾਰੋਤੋਂਗਨਰੋਮਬੋਅਰੋਮੀਨੀਆਈਰਵਾਸਾਂਡੋਸਾਖਾਸਮਬੁਰੂਸੰਥਾਲ" + + "ੀਨਗਾਂਬੇਸੇਂਗੋਸਿਸੀਲੀਅਨਸਕਾਟਸਦੱਖਣੀ ਕੁਰਦਿਸ਼ਸੇਨਾਕੋਇਰਾਬੋਰੋ ਸੇਂਨੀਟਚੇਲਹਿਟਸ਼ਾਨਦੱ" + + "ਖਣੀ ਸਾਮੀਲਿਊਲ ਸਾਮੀਇਨਾਰੀ ਸਾਮੀਸਕੌਲਟ ਸਾਮੀਸੋਨਿੰਕੇਸ੍ਰਾਨਾਨ ਟੋਂਗੋਸਾਹੋਸੁਕੁਮਾਕੋਮ" + + "ੋਰੀਅਨਸੀਰੀਆਈਟਿਮਨੇਟੇਸੋਟੇਟਮਟਿਗਰਾਕਲਿੰਗਨਟੋਕ ਪਿਸਿਨਟਾਰੋਕੋਤੁੰਬੁਕਾਟਿਊਵਾਲੂਤਾਸਾਵਿ" + + "ਕਤੁਵੀਨੀਅਨਮੱਧ ਐਟਲਸ ਤਮਾਜ਼ਿਤਉਦਮੁਰਤਉਮਬੁੰਡੂਅਣਪਛਾਤੀ ਬੋਲੀਵਾਈਵੂੰਜੋਵਾਲਸਰਵੋਲਾਏਟਾ" + + "ਵੈਰੇਵਾਲਪੁਰੀਚੀਨੀ ਵੂਕਾਲਮਿਕਸੋਗਾਯਾਂਗਬੇਨਯੇਂਬਾਕੈਂਟੋਨੀਜ਼ਮਿਆਰੀ ਮੋਰੋਕੇਨ ਟਾਮਾਜ਼ਿ" + + "ਕਜ਼ੂਨੀਬੋਲੀ ਸੰਬੰਧੀ ਕੋਈ ਸਮੱਗਰੀ ਨਹੀਂਜ਼ਾਜ਼ਾਆਧੁਨਿਕ ਮਿਆਰੀ ਅਰਬੀਜਰਮਨ (ਆਸਟਰੀਆਈ)" + + "ਅੰਗਰੇਜ਼ੀ (ਬਰਤਾਨਵੀ)ਅੰਗਰੇਜ਼ੀ (ਅਮਰੀਕੀ)ਸਪੇਨੀ (ਯੂਰਪੀ)ਫਰਾਂਸੀਸੀ (ਕੈਨੇਡੀਅਨ)ਲੋ " + + "ਸੈਕਸਨਫਲੈਮਿਸ਼ਪੁਰਤਗਾਲੀ (ਬ੍ਰਾਜ਼ੀਲੀ)ਪੁਰਤਗਾਲੀ (ਯੂਰਪੀ)ਮੋਲਡਾਵੀਆਈਕਾਂਗੋ ਸਵਾਇਲੀਚ" + + "ੀਨੀ (ਸਰਲ)ਚੀਨੀ (ਰਵਾਇਤੀ)" + +var paLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x000f, 0x002a, 0x002a, 0x003f, 0x004b, 0x0060, 0x0075, 0x0081, 0x0090, 0x00a2, 0x00b4, 0x00d5, 0x00e7, 0x00ff, 0x011a, @@ -22683,62 +24055,62 @@ var paLangIdx = []uint16{ // 613 elements 0x0e71, 0x0e71, 0x0e80, 0x0e80, 0x0e8c, 0x0e8c, 0x0e8c, 0x0eab, 0x0ec0, 0x0ec0, 0x0ecc, 0x0ecc, 0x0ecc, 0x0ee1, 0x0ee1, 0x0ee1, 0x0ee1, 0x0ee1, 0x0eed, 0x0eed, 0x0eed, 0x0eff, 0x0eff, 0x0f0b, - 0x0f0b, 0x0f0b, 0x0f0b, 0x0f0b, 0x0f0b, 0x0f20, 0x0f2c, 0x0f2c, - 0x0f2c, 0x0f3b, 0x0f47, 0x0f47, 0x0f56, 0x0f56, 0x0f68, 0x0f77, + 0x0f0b, 0x0f0b, 0x0f0b, 0x0f0b, 0x0f0b, 0x0f0b, 0x0f20, 0x0f2c, + 0x0f2c, 0x0f2c, 0x0f3b, 0x0f47, 0x0f47, 0x0f56, 0x0f56, 0x0f68, // Entry 100 - 13F - 0x0f9f, 0x0f9f, 0x0f9f, 0x0f9f, 0x0fda, 0x0fda, 0x0fe9, 0x0ffb, - 0x1007, 0x1007, 0x1007, 0x101c, 0x101c, 0x102e, 0x102e, 0x1050, - 0x1050, 0x105f, 0x105f, 0x107b, 0x107b, 0x108d, 0x1099, 0x10a5, - 0x10a5, 0x10c7, 0x10d9, 0x10d9, 0x10d9, 0x10d9, 0x10eb, 0x10eb, - 0x10eb, 0x1103, 0x1103, 0x110c, 0x110c, 0x110c, 0x110c, 0x110c, - 0x110c, 0x110c, 0x1124, 0x112a, 0x113c, 0x1152, 0x1152, 0x1152, - 0x1152, 0x115e, 0x1179, 0x1179, 0x1179, 0x1179, 0x1179, 0x1179, - 0x1194, 0x1194, 0x1194, 0x11b9, 0x11d4, 0x11d4, 0x11d4, 0x11e0, + 0x0f77, 0x0f9f, 0x0f9f, 0x0f9f, 0x0f9f, 0x0fda, 0x0fda, 0x0fe9, + 0x0ffb, 0x1007, 0x1007, 0x1007, 0x101c, 0x101c, 0x102e, 0x102e, + 0x1050, 0x1050, 0x105f, 0x105f, 0x107b, 0x107b, 0x108d, 0x1099, + 0x10a5, 0x10a5, 0x10c7, 0x10d9, 0x10d9, 0x10d9, 0x10d9, 0x10eb, + 0x10eb, 0x10eb, 0x1103, 0x1103, 0x110c, 0x112e, 0x112e, 0x112e, + 0x112e, 0x112e, 0x112e, 0x1146, 0x114c, 0x115e, 0x1174, 0x1174, + 0x1174, 0x1174, 0x1180, 0x119b, 0x119b, 0x119b, 0x119b, 0x119b, + 0x119b, 0x11b6, 0x11b6, 0x11b6, 0x11db, 0x11f6, 0x11f6, 0x11f6, // Entry 140 - 17F - 0x11f5, 0x11f5, 0x120e, 0x121a, 0x1236, 0x124e, 0x124e, 0x125d, - 0x127f, 0x129e, 0x12aa, 0x12b6, 0x12c8, 0x12d7, 0x12e9, 0x12e9, - 0x12e9, 0x12fb, 0x130d, 0x131c, 0x131c, 0x131c, 0x131c, 0x131c, - 0x132b, 0x133a, 0x1343, 0x134f, 0x134f, 0x1361, 0x1361, 0x136d, - 0x137c, 0x13a0, 0x13a0, 0x13ac, 0x13ac, 0x13b8, 0x13b8, 0x13d4, - 0x13d4, 0x13d4, 0x13e0, 0x13f2, 0x140a, 0x142c, 0x143e, 0x143e, - 0x144a, 0x1469, 0x1469, 0x1469, 0x147e, 0x148d, 0x14a2, 0x14b1, - 0x14c9, 0x14d8, 0x14d8, 0x14ea, 0x14f9, 0x14f9, 0x14f9, 0x150b, + 0x1202, 0x1217, 0x1217, 0x1230, 0x123c, 0x1258, 0x1270, 0x1270, + 0x127f, 0x12a1, 0x12c0, 0x12cc, 0x12d8, 0x12ea, 0x12f9, 0x130b, + 0x130b, 0x130b, 0x131d, 0x132f, 0x133e, 0x133e, 0x133e, 0x133e, + 0x133e, 0x134d, 0x135c, 0x1365, 0x1371, 0x1371, 0x1383, 0x1383, + 0x138f, 0x139e, 0x13c2, 0x13c2, 0x13ce, 0x13ce, 0x13da, 0x13da, + 0x13f6, 0x13f6, 0x13f6, 0x1402, 0x1414, 0x142c, 0x144e, 0x1460, + 0x1460, 0x146c, 0x148b, 0x148b, 0x148b, 0x14a0, 0x14af, 0x14c4, + 0x14d3, 0x14eb, 0x14fa, 0x14fa, 0x150c, 0x151b, 0x151b, 0x151b, // Entry 180 - 1BF - 0x150b, 0x150b, 0x150b, 0x151a, 0x151a, 0x151a, 0x1529, 0x1545, - 0x1545, 0x1545, 0x1545, 0x1554, 0x155d, 0x156c, 0x1578, 0x1578, - 0x1578, 0x158d, 0x158d, 0x159c, 0x15ab, 0x15ba, 0x15ba, 0x15c6, - 0x15c6, 0x15d8, 0x15d8, 0x15e7, 0x15f3, 0x160b, 0x160b, 0x162a, - 0x1636, 0x1648, 0x1669, 0x1669, 0x167e, 0x168d, 0x1699, 0x1699, - 0x16ae, 0x16d6, 0x16e5, 0x16fa, 0x16fa, 0x16fa, 0x16fa, 0x170c, - 0x172d, 0x174d, 0x1768, 0x1774, 0x1787, 0x1799, 0x17a5, 0x17b4, - 0x17b4, 0x17c6, 0x17db, 0x17ea, 0x17ea, 0x17ea, 0x17f6, 0x1812, + 0x152d, 0x152d, 0x152d, 0x152d, 0x153c, 0x153c, 0x153c, 0x1545, + 0x1554, 0x1570, 0x1570, 0x1592, 0x1592, 0x15a1, 0x15aa, 0x15b9, + 0x15c5, 0x15c5, 0x15c5, 0x15da, 0x15da, 0x15e9, 0x15f8, 0x1607, + 0x1607, 0x1613, 0x1613, 0x1625, 0x1625, 0x1634, 0x1640, 0x1658, + 0x1658, 0x1677, 0x1683, 0x1695, 0x16b6, 0x16b6, 0x16cb, 0x16da, + 0x16e6, 0x16e6, 0x16fb, 0x1723, 0x1732, 0x1747, 0x1747, 0x1747, + 0x1747, 0x1759, 0x177a, 0x179a, 0x17b5, 0x17c1, 0x17d4, 0x17e6, + 0x17f2, 0x1801, 0x1801, 0x1813, 0x1828, 0x1837, 0x1837, 0x1837, // Entry 1C0 - 1FF - 0x181e, 0x181e, 0x181e, 0x1836, 0x1836, 0x1836, 0x1836, 0x1836, - 0x1851, 0x1851, 0x1869, 0x1887, 0x1899, 0x1899, 0x18c7, 0x18c7, - 0x18c7, 0x18c7, 0x18c7, 0x18c7, 0x18c7, 0x18c7, 0x18c7, 0x18dc, - 0x18dc, 0x18e8, 0x18e8, 0x1900, 0x1915, 0x1930, 0x1930, 0x1930, - 0x193f, 0x193f, 0x193f, 0x193f, 0x193f, 0x195a, 0x1963, 0x1972, - 0x197e, 0x197e, 0x1990, 0x1990, 0x19a2, 0x19a2, 0x19b4, 0x19c3, - 0x19db, 0x19ea, 0x19ea, 0x1a0f, 0x1a0f, 0x1a1b, 0x1a1b, 0x1a1b, - 0x1a46, 0x1a46, 0x1a46, 0x1a5b, 0x1a67, 0x1a67, 0x1a67, 0x1a67, + 0x1843, 0x185f, 0x186b, 0x186b, 0x186b, 0x1883, 0x1883, 0x1883, + 0x1883, 0x1883, 0x189e, 0x189e, 0x18b6, 0x18d4, 0x18e6, 0x18e6, + 0x1914, 0x1914, 0x1914, 0x1914, 0x1914, 0x1914, 0x1914, 0x1914, + 0x1914, 0x1929, 0x1929, 0x1935, 0x1935, 0x194d, 0x1962, 0x197d, + 0x197d, 0x197d, 0x198c, 0x198c, 0x198c, 0x198c, 0x198c, 0x19a7, + 0x19b0, 0x19bf, 0x19cb, 0x19cb, 0x19dd, 0x19dd, 0x19ef, 0x19ef, + 0x1a01, 0x1a10, 0x1a28, 0x1a37, 0x1a37, 0x1a5c, 0x1a5c, 0x1a68, + 0x1a68, 0x1a68, 0x1a93, 0x1a93, 0x1a93, 0x1aa8, 0x1ab4, 0x1ab4, // Entry 200 - 23F - 0x1a67, 0x1a83, 0x1a9c, 0x1ab8, 0x1ad4, 0x1ae9, 0x1ae9, 0x1b0e, - 0x1b0e, 0x1b1a, 0x1b1a, 0x1b2c, 0x1b2c, 0x1b2c, 0x1b44, 0x1b44, - 0x1b56, 0x1b56, 0x1b56, 0x1b65, 0x1b71, 0x1b71, 0x1b7d, 0x1b8c, - 0x1b8c, 0x1b8c, 0x1b8c, 0x1b9e, 0x1b9e, 0x1b9e, 0x1b9e, 0x1b9e, - 0x1bb7, 0x1bb7, 0x1bc9, 0x1bc9, 0x1bc9, 0x1bc9, 0x1bde, 0x1bf3, - 0x1c08, 0x1c20, 0x1c4c, 0x1c5e, 0x1c5e, 0x1c73, 0x1c7c, 0x1c85, - 0x1c85, 0x1c85, 0x1c85, 0x1c85, 0x1c85, 0x1c85, 0x1c94, 0x1ca3, - 0x1cb8, 0x1cc4, 0x1cc4, 0x1cd9, 0x1cec, 0x1cfe, 0x1cfe, 0x1d0a, + 0x1ab4, 0x1ab4, 0x1ab4, 0x1ad0, 0x1ae9, 0x1b05, 0x1b21, 0x1b36, + 0x1b36, 0x1b5b, 0x1b5b, 0x1b67, 0x1b67, 0x1b79, 0x1b79, 0x1b79, + 0x1b91, 0x1b91, 0x1ba3, 0x1ba3, 0x1ba3, 0x1bb2, 0x1bbe, 0x1bbe, + 0x1bca, 0x1bd9, 0x1bd9, 0x1bd9, 0x1bd9, 0x1beb, 0x1beb, 0x1beb, + 0x1beb, 0x1beb, 0x1c04, 0x1c04, 0x1c16, 0x1c16, 0x1c16, 0x1c16, + 0x1c2b, 0x1c40, 0x1c55, 0x1c6d, 0x1c99, 0x1cab, 0x1cab, 0x1cc0, + 0x1ce2, 0x1ceb, 0x1ceb, 0x1ceb, 0x1ceb, 0x1ceb, 0x1ceb, 0x1ceb, + 0x1cfa, 0x1d09, 0x1d1e, 0x1d2a, 0x1d2a, 0x1d3f, 0x1d52, 0x1d64, // Entry 240 - 27F - 0x1d0a, 0x1d0a, 0x1d1f, 0x1d2e, 0x1d2e, 0x1d49, 0x1d49, 0x1d49, - 0x1d49, 0x1d49, 0x1d87, 0x1d96, 0x1ddf, 0x1df1, 0x1e20, 0x1e20, - 0x1e44, 0x1e44, 0x1e44, 0x1e44, 0x1e74, 0x1ea1, 0x1ea1, 0x1ec2, - 0x1ec2, 0x1ec2, 0x1ef5, 0x1ef5, 0x1f0b, 0x1f20, 0x1f56, 0x1f80, - 0x1f9b, 0x1f9b, 0x1f9b, 0x1fb3, 0x1fd4, -} // Size: 1250 bytes - -const plLangStr string = "" + // Size: 5567 bytes + 0x1d64, 0x1d70, 0x1d70, 0x1d70, 0x1d85, 0x1d94, 0x1d94, 0x1daf, + 0x1daf, 0x1daf, 0x1daf, 0x1daf, 0x1ded, 0x1dfc, 0x1e45, 0x1e57, + 0x1e86, 0x1e86, 0x1eaa, 0x1eaa, 0x1eaa, 0x1eaa, 0x1eda, 0x1f07, + 0x1f07, 0x1f28, 0x1f28, 0x1f28, 0x1f5b, 0x1f5b, 0x1f71, 0x1f86, + 0x1fbc, 0x1fe6, 0x2001, 0x2001, 0x2023, 0x203b, 0x205c, +} // Size: 1254 bytes + +const plLangStr string = "" + // Size: 5587 bytes "afarabchaskiawestyjskiafrikaansakanamharskiaragońskiarabskiasamskiawarsk" + "iajmaraazerbejdżańskibaszkirskibiałoruskibułgarskibislamabambarabengalsk" + "itybetańskibretońskibośniackikatalońskiczeczeńskiczamorrokorsykańskikric" + @@ -22784,39 +24156,39 @@ const plLangStr string = "" + // Size: 5567 bytes "angkorokaingangkhasichotańskikoyra chiinikhowarkirmandżkikakokalenjinkim" + "bundukomi-permiackikonkanikosraekpellekaraczajsko-bałkarskikriokinarayak" + "arelskikurukhsambalabafiagwara kolońskakumyckikutenailadyńskilangilahnda" + - "lambalezgijskiLingua Franca Novaliguryjskiliwskilakotalombardzkimongoloz" + - "iluryjski północnyłatgalskiluba-lulualuisenolundaluomizoluhyachiński kla" + - "sycznylazyjskimadurajskimafamagahimaithilimakasarmandingomasajskimabamok" + - "szamandarmendemerukreolski Mauritiusaśrednioirlandzkimakuametamikmakmina" + - "ngkabumanchumanipurimohawkmossizachodniomaryjskimundangwiele językówkrik" + - "mirandyjskimarwarimentawaimyeneerzjamazanderańskiminnańskineapolitańskin" + - "amadolnoniemieckinewarskiniasniueaongumbangiemboonnogajskistaronordyjski" + - "novialn’kosotho północnynuernewarski klasycznyniamwezinyankolenyoronzema" + - "osageosmańsko-tureckipangasinopahlavipampangopapiamentopalaupikardyjskip" + - "idżyn nigeryjskipensylwańskiplautdietschstaroperskipalatynackifenickipie" + - "monckipontyjskiponpejskipruskistaroprowansalskikiczekeczua górski (Chimb" + - "orazo)radźasthanirapanuirarotongaromagnoltarifitrombocygańskirotumańskir" + - "usińskirovianaarumuńskirwasandawejakuckisamarytański aramejskisamburusas" + - "aksantalisaurasztryjskingambaysangusycylijskiscotssassarskipołudniowokur" + - "dyjskisenekasenaseriselkupskikoyraboro sennistaroirlandzkiżmudzkitashelh" + - "iytszanarabski (Czad)sidamodolnośląskiselayarpołudniowolapońskiluleinari" + - "skoltsoninkesogdyjskisranan tongoserersahofryzyjski saterlandzkisukumasu" + - "susumeryjskikomoryjskisyriackisyryjskiśląskitulutemneatesoterenotetumtig" + - "retiwtokelaucachurskiklingońskitlingittałyskitamaszektonga (Niasa)tok pi" + - "sinturoyotarokocakońskitsimshiantackitumbukatuvalutasawaqtuwińskitamazig" + - "ht (Atlas Środkowy)udmurckiugaryckiumbundujęzyk rdzennywaiweneckiwepskiz" + - "achodnioflamandzkimeński frankońskiwotiackivõrovunjowalserwolaytawarajwa" + - "showarlpiriwukałmuckimegrelskisogayaojapskiyangbenyembanheengatukantońsk" + - "izapoteckiblisszelandzkizenagastandardowy marokański tamazightzunibrak t" + - "reści o charakterze językowymzazakiwspółczesny arabskiaustriacki niemiec" + - "kiwysokoniemiecki (Szwajcaria)australijski angielskikanadyjski angielski" + - "brytyjski angielskiamerykański angielskiamerykański hiszpańskieuropejski" + - " hiszpańskimeksykański hiszpańskikanadyjski francuskiszwajcarski francus" + - "kidolnosaksońskiflamandzkibrazylijski portugalskieuropejski portugalskim" + - "ołdawskiserbsko-chorwackikongijski suahilichiński uproszczonychiński tra" + - "dycyjny" - -var plLangIdx = []uint16{ // 613 elements + "lambalezgijskiLingua Franca Novaliguryjskiliwskilakotalombardzkimongokre" + + "olski luizjańskiloziluryjski północnyłatgalskiluba-lulualuisenolundaluom" + + "izoluhyachiński klasycznylazyjskimadurajskimafamagahimaithilimakasarmand" + + "ingomasajskimabamokszamandarmendemerukreolski Mauritiusaśrednioirlandzki" + + "makuametamikmakminangkabumanchumanipurimohawkmossizachodniomaryjskimunda" + + "ngwiele językówkrikmirandyjskimarwarimentawaimyeneerzjamazanderańskiminn" + + "ańskineapolitańskinamadolnoniemieckinewarskiniasniueaongumbangiemboonnog" + + "ajskistaronordyjskinovialn’kosotho północnynuernewarski klasycznyniamwez" + + "inyankolenyoronzemaosageosmańsko-tureckipangasinopahlavipampangopapiamen" + + "topalaupikardyjskipidżyn nigeryjskipensylwańskiplautdietschstaroperskipa" + + "latynackifenickipiemonckipontyjskiponpejskipruskistaroprowansalskikiczek" + + "eczua górski (Chimborazo)radźasthanirapanuirarotongaromagnoltarifitrombo" + + "cygańskirotumańskirusińskirovianaarumuńskirwasandawejakuckisamarytański " + + "aramejskisamburusasaksantalisaurasztryjskingambaysangusycylijskiscotssas" + + "sarskipołudniowokurdyjskisenekasenaseriselkupskikoyraboro sennistaroirla" + + "ndzkiżmudzkitashelhiytszanarabski (Czad)sidamodolnośląskiselayarpołudnio" + + "wolapońskiluleinariskoltsoninkesogdyjskisranan tongoserersahofryzyjski s" + + "aterlandzkisukumasususumeryjskikomoryjskisyriackisyryjskiśląskitulutemne" + + "atesoterenotetumtigretiwtokelaucachurskiklingońskitlingittałyskitamaszek" + + "tonga (Niasa)tok pisinturoyotarokocakońskitsimshiantackitumbukatuvalutas" + + "awaqtuwińskitamazight (Atlas Środkowy)udmurckiugaryckiumbundunieznany ję" + + "zykwaiweneckiwepskizachodnioflamandzkimeński frankońskiwotiackivõrovunjo" + + "walserwolaytawarajwashowarlpiriwukałmuckimegrelskisogayaojapskiyangbenye" + + "mbanheengatukantońskizapoteckiblisszelandzkizenagastandardowy marokański" + + " tamazightzunibrak treści o charakterze językowymzazakiwspółczesny arabs" + + "kiaustriacki niemieckiszwajcarski wysokoniemieckiaustralijski angielskik" + + "anadyjski angielskibrytyjski angielskiamerykański angielskiamerykański h" + + "iszpańskieuropejski hiszpańskimeksykański hiszpańskikanadyjski francuski" + + "szwajcarski francuskidolnosaksońskiflamandzkibrazylijski portugalskieuro" + + "pejski portugalskimołdawskiserbsko-chorwackikongijski suahilichiński upr" + + "oszczonychiński tradycyjny" + +var plLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0004, 0x000c, 0x0016, 0x001f, 0x0023, 0x002b, 0x0035, 0x003c, 0x0043, 0x004a, 0x0050, 0x0060, 0x006a, 0x0075, 0x007f, @@ -22851,312 +24223,317 @@ var plLangIdx = []uint16{ // 613 elements 0x0769, 0x076f, 0x0774, 0x077a, 0x077e, 0x0783, 0x0789, 0x079c, 0x07a6, 0x07ab, 0x07af, 0x07b5, 0x07b8, 0x07bf, 0x07d3, 0x07de, 0x07e4, 0x07ea, 0x07ee, 0x07f4, 0x07fc, 0x0804, 0x0808, 0x080c, - 0x0813, 0x0818, 0x0821, 0x0827, 0x082c, 0x0833, 0x0838, 0x083f, - 0x084a, 0x084f, 0x0857, 0x0867, 0x0871, 0x087e, 0x0888, 0x0892, + 0x0813, 0x0818, 0x0821, 0x0827, 0x082c, 0x082c, 0x0833, 0x0838, + 0x083f, 0x084a, 0x084f, 0x0857, 0x0867, 0x0871, 0x087e, 0x0888, // Entry 100 - 13F - 0x0898, 0x08a1, 0x08a9, 0x08b8, 0x08ca, 0x08d3, 0x08d9, 0x08e3, - 0x08e8, 0x08f0, 0x08f5, 0x08fb, 0x0900, 0x0907, 0x090c, 0x091a, - 0x0929, 0x092e, 0x094a, 0x094f, 0x0954, 0x095a, 0x095e, 0x0962, - 0x096b, 0x0977, 0x097d, 0x0985, 0x0996, 0x09af, 0x09b5, 0x09c2, - 0x09c6, 0x09ce, 0x09d8, 0x09db, 0x09e4, 0x09f5, 0x0a03, 0x0a16, - 0x0a29, 0x0a3b, 0x0a43, 0x0a45, 0x0a4d, 0x0a50, 0x0a54, 0x0a59, - 0x0a6f, 0x0a73, 0x0a80, 0x0a8a, 0x0aa3, 0x0ab9, 0x0ac6, 0x0acb, - 0x0ad4, 0x0ad9, 0x0ade, 0x0ae9, 0x0afe, 0x0b04, 0x0b0a, 0x0b0f, + 0x0892, 0x0898, 0x08a1, 0x08a9, 0x08b8, 0x08ca, 0x08d3, 0x08d9, + 0x08e3, 0x08e8, 0x08f0, 0x08f5, 0x08fb, 0x0900, 0x0907, 0x090c, + 0x091a, 0x0929, 0x092e, 0x094a, 0x094f, 0x0954, 0x095a, 0x095e, + 0x0962, 0x096b, 0x0977, 0x097d, 0x0985, 0x0996, 0x09af, 0x09b5, + 0x09c2, 0x09c6, 0x09ce, 0x09d8, 0x09db, 0x09e4, 0x09f5, 0x0a03, + 0x0a16, 0x0a29, 0x0a3b, 0x0a43, 0x0a45, 0x0a4d, 0x0a50, 0x0a54, + 0x0a59, 0x0a6f, 0x0a73, 0x0a80, 0x0a8a, 0x0aa3, 0x0ab9, 0x0ac6, + 0x0acb, 0x0ad4, 0x0ad9, 0x0ade, 0x0ae9, 0x0afe, 0x0b04, 0x0b0a, // Entry 140 - 17F - 0x0b18, 0x0b1d, 0x0b22, 0x0b2a, 0x0b3b, 0x0b45, 0x0b4c, 0x0b51, - 0x0b60, 0x0b65, 0x0b69, 0x0b6d, 0x0b73, 0x0b7a, 0x0b81, 0x0b8a, - 0x0b92, 0x0b98, 0x0b9e, 0x0ba5, 0x0bb1, 0x0bbd, 0x0bc7, 0x0bd4, - 0x0bdc, 0x0be2, 0x0be5, 0x0bea, 0x0bee, 0x0bf9, 0x0c00, 0x0c04, - 0x0c0b, 0x0c2d, 0x0c34, 0x0c38, 0x0c40, 0x0c45, 0x0c4f, 0x0c5b, - 0x0c61, 0x0c6c, 0x0c70, 0x0c78, 0x0c80, 0x0c8e, 0x0c95, 0x0c9b, - 0x0ca1, 0x0cb7, 0x0cbb, 0x0cc3, 0x0ccb, 0x0cd1, 0x0cd8, 0x0cdd, - 0x0cec, 0x0cf3, 0x0cfa, 0x0d03, 0x0d08, 0x0d0e, 0x0d13, 0x0d1c, + 0x0b0f, 0x0b18, 0x0b1d, 0x0b22, 0x0b2a, 0x0b3b, 0x0b45, 0x0b4c, + 0x0b51, 0x0b60, 0x0b65, 0x0b69, 0x0b6d, 0x0b73, 0x0b7a, 0x0b81, + 0x0b8a, 0x0b92, 0x0b98, 0x0b9e, 0x0ba5, 0x0bb1, 0x0bbd, 0x0bc7, + 0x0bd4, 0x0bdc, 0x0be2, 0x0be5, 0x0bea, 0x0bee, 0x0bf9, 0x0c00, + 0x0c04, 0x0c0b, 0x0c2d, 0x0c34, 0x0c38, 0x0c40, 0x0c45, 0x0c4f, + 0x0c5b, 0x0c61, 0x0c6c, 0x0c70, 0x0c78, 0x0c80, 0x0c8e, 0x0c95, + 0x0c9b, 0x0ca1, 0x0cb7, 0x0cbb, 0x0cc3, 0x0ccb, 0x0cd1, 0x0cd8, + 0x0cdd, 0x0cec, 0x0cf3, 0x0cfa, 0x0d03, 0x0d08, 0x0d0e, 0x0d13, // Entry 180 - 1BF - 0x0d2e, 0x0d38, 0x0d3e, 0x0d44, 0x0d4e, 0x0d53, 0x0d57, 0x0d6a, - 0x0d74, 0x0d7e, 0x0d85, 0x0d8a, 0x0d8d, 0x0d91, 0x0d96, 0x0da8, - 0x0db0, 0x0dba, 0x0dbe, 0x0dc4, 0x0dcc, 0x0dd3, 0x0ddb, 0x0de3, - 0x0de7, 0x0ded, 0x0df3, 0x0df8, 0x0dfc, 0x0e0f, 0x0e20, 0x0e25, - 0x0e29, 0x0e2f, 0x0e39, 0x0e3f, 0x0e47, 0x0e4d, 0x0e52, 0x0e63, - 0x0e6a, 0x0e79, 0x0e7d, 0x0e88, 0x0e8f, 0x0e97, 0x0e9c, 0x0ea1, - 0x0eaf, 0x0eb9, 0x0ec7, 0x0ecb, 0x0ed9, 0x0ee1, 0x0ee5, 0x0ee9, - 0x0eeb, 0x0ef1, 0x0efa, 0x0f02, 0x0f10, 0x0f16, 0x0f1c, 0x0f2c, + 0x0d1c, 0x0d2e, 0x0d38, 0x0d3e, 0x0d44, 0x0d4e, 0x0d53, 0x0d67, + 0x0d6b, 0x0d7e, 0x0d88, 0x0d92, 0x0d99, 0x0d9e, 0x0da1, 0x0da5, + 0x0daa, 0x0dbc, 0x0dc4, 0x0dce, 0x0dd2, 0x0dd8, 0x0de0, 0x0de7, + 0x0def, 0x0df7, 0x0dfb, 0x0e01, 0x0e07, 0x0e0c, 0x0e10, 0x0e23, + 0x0e34, 0x0e39, 0x0e3d, 0x0e43, 0x0e4d, 0x0e53, 0x0e5b, 0x0e61, + 0x0e66, 0x0e77, 0x0e7e, 0x0e8d, 0x0e91, 0x0e9c, 0x0ea3, 0x0eab, + 0x0eb0, 0x0eb5, 0x0ec3, 0x0ecd, 0x0edb, 0x0edf, 0x0eed, 0x0ef5, + 0x0ef9, 0x0efd, 0x0eff, 0x0f05, 0x0f0e, 0x0f16, 0x0f24, 0x0f2a, // Entry 1C0 - 1FF - 0x0f30, 0x0f42, 0x0f4a, 0x0f52, 0x0f57, 0x0f5c, 0x0f61, 0x0f72, - 0x0f7b, 0x0f82, 0x0f8a, 0x0f94, 0x0f99, 0x0fa4, 0x0fb6, 0x0fc3, - 0x0fcf, 0x0fda, 0x0fe5, 0x0fec, 0x0ff5, 0x0ffe, 0x1007, 0x100d, - 0x101e, 0x1023, 0x103e, 0x104a, 0x1051, 0x105a, 0x1062, 0x1069, - 0x106e, 0x1077, 0x1082, 0x108b, 0x1092, 0x109c, 0x109f, 0x10a6, - 0x10ad, 0x10c4, 0x10cb, 0x10d0, 0x10d7, 0x10e5, 0x10ec, 0x10f1, - 0x10fb, 0x1100, 0x1109, 0x111d, 0x1123, 0x1127, 0x112b, 0x1134, - 0x1143, 0x1151, 0x1159, 0x1163, 0x1167, 0x1175, 0x117b, 0x1188, + 0x0f30, 0x0f40, 0x0f44, 0x0f56, 0x0f5e, 0x0f66, 0x0f6b, 0x0f70, + 0x0f75, 0x0f86, 0x0f8f, 0x0f96, 0x0f9e, 0x0fa8, 0x0fad, 0x0fb8, + 0x0fca, 0x0fd7, 0x0fe3, 0x0fee, 0x0ff9, 0x1000, 0x1009, 0x1012, + 0x101b, 0x1021, 0x1032, 0x1037, 0x1052, 0x105e, 0x1065, 0x106e, + 0x1076, 0x107d, 0x1082, 0x108b, 0x1096, 0x109f, 0x10a6, 0x10b0, + 0x10b3, 0x10ba, 0x10c1, 0x10d8, 0x10df, 0x10e4, 0x10eb, 0x10f9, + 0x1100, 0x1105, 0x110f, 0x1114, 0x111d, 0x1131, 0x1137, 0x113b, + 0x113f, 0x1148, 0x1157, 0x1165, 0x116d, 0x1177, 0x117b, 0x1189, // Entry 200 - 23F - 0x118f, 0x11a3, 0x11a7, 0x11ac, 0x11b1, 0x11b8, 0x11c1, 0x11cd, - 0x11d2, 0x11d6, 0x11ec, 0x11f2, 0x11f6, 0x1200, 0x120a, 0x1212, - 0x121a, 0x1222, 0x1226, 0x122b, 0x1230, 0x1236, 0x123b, 0x1240, - 0x1243, 0x124a, 0x1253, 0x125e, 0x1265, 0x126d, 0x1275, 0x1282, - 0x128b, 0x1291, 0x1297, 0x12a0, 0x12a9, 0x12ae, 0x12b5, 0x12bb, - 0x12c2, 0x12cb, 0x12e6, 0x12ee, 0x12f6, 0x12fd, 0x130b, 0x130e, - 0x1315, 0x131b, 0x132e, 0x1341, 0x1349, 0x134e, 0x1353, 0x1359, - 0x1360, 0x1365, 0x136a, 0x1372, 0x1374, 0x137d, 0x1386, 0x138a, + 0x118f, 0x119c, 0x11a3, 0x11b7, 0x11bb, 0x11c0, 0x11c5, 0x11cc, + 0x11d5, 0x11e1, 0x11e6, 0x11ea, 0x1200, 0x1206, 0x120a, 0x1214, + 0x121e, 0x1226, 0x122e, 0x1236, 0x123a, 0x123f, 0x1244, 0x124a, + 0x124f, 0x1254, 0x1257, 0x125e, 0x1267, 0x1272, 0x1279, 0x1281, + 0x1289, 0x1296, 0x129f, 0x12a5, 0x12ab, 0x12b4, 0x12bd, 0x12c2, + 0x12c9, 0x12cf, 0x12d6, 0x12df, 0x12fa, 0x1302, 0x130a, 0x1311, + 0x1320, 0x1323, 0x132a, 0x1330, 0x1343, 0x1356, 0x135e, 0x1363, + 0x1368, 0x136e, 0x1375, 0x137a, 0x137f, 0x1387, 0x1389, 0x1392, // Entry 240 - 27F - 0x138d, 0x1393, 0x139a, 0x139f, 0x13a8, 0x13b2, 0x13bb, 0x13c0, - 0x13c9, 0x13cf, 0x13f0, 0x13f4, 0x1419, 0x141f, 0x1434, 0x1434, - 0x1448, 0x1464, 0x147a, 0x148e, 0x14a1, 0x14b7, 0x14cf, 0x14e5, - 0x14fd, 0x14fd, 0x1511, 0x1526, 0x1535, 0x153f, 0x1556, 0x156c, - 0x1576, 0x1587, 0x1598, 0x15ac, 0x15bf, -} // Size: 1250 bytes - -const ptLangStr string = "" + // Size: 4104 bytes - "afarabcázioavésticoafricânerakanamáricoaragonêsárabeassamêsavaricaimaraa" + - "zerbaijanobashkirbielorrussobúlgarobislamábambarabengalitibetanobretãobó" + - "sniocatalãochechenochamorrocórsicocreetchecoeslavo eclesiásticotchuvache" + + 0x139b, 0x139f, 0x13a2, 0x13a8, 0x13af, 0x13b4, 0x13bd, 0x13c7, + 0x13d0, 0x13d5, 0x13de, 0x13e4, 0x1405, 0x1409, 0x142e, 0x1434, + 0x1449, 0x1449, 0x145d, 0x1478, 0x148e, 0x14a2, 0x14b5, 0x14cb, + 0x14e3, 0x14f9, 0x1511, 0x1511, 0x1525, 0x153a, 0x1549, 0x1553, + 0x156a, 0x1580, 0x158a, 0x159b, 0x15ac, 0x15c0, 0x15d3, +} // Size: 1254 bytes + +const ptLangStr string = "" + // Size: 4157 bytes + "afarabcázioavésticoafricânerakanamáricoaragonêsárabeassamêsaváricoaimará" + + "azerbaijanobashkirbielorrussobúlgarobislamábambarabengalitibetanobretãob" + + "ósniocatalãochechenochamorrocorsocreetchecoeslavo eclesiásticotchuvache" + "galêsdinamarquêsalemãodivehidzongaevegregoinglêsesperantoespanholestonia" + "nobascopersafulafinlandêsfijianoferoêsfrancêsfrísio ocidentalirlandêsgaé" + "lico escocêsgalegoguaraniguzeratemanxhauçáhebraicohíndihiri motucroataha" + - "itianohúngaroarmêniohererointerlínguaindonésiointerlingueibosichuan yiin" + - "upiaqueidoislandêsitalianoinuktitutjaponêsjavanêsgeorgianocongolêsquicui" + - "okuanyamacazaquegroenlandêskhmercanarêscoreanocanúricaxemiracurdokomicór" + - "nicoquirguizlatimluxemburguêslugandalimburguêslingalalaosianolituanoluba" + - "-catangaletãomalgaxemarshalêsmaorimacedôniomalaialamongolmaratamalaiomal" + - "têsbirmanêsnauruanondebele do nortenepalidongoholandêsnynorsk norueguêsb" + - "okmål norueguêsndebele do sulnavajonianjaoccitânicoojibwaoromooriyaosset" + - "opanjabipálipolonêspashtoportuguêsquíchuaromancherundiromenorussoquiniar" + - "uandasânscritosardosindisami setentrionalsangocingalêseslovacoeslovenosa" + - "moanoshonasomalialbanêssérviosuázisoto do sulsundanêssuecosuaílitâmiltel" + - "ugutajiquetailandêstigrínioturcomenotswanatonganêsturcotsongatatartaitia" + - "nouigurucranianourduusbequevendavietnamitavolapuquevalãouólofexosaiídich" + - "eiorubázhuangchinêszuluachémacoliadangmeadigueafrihiliaghemainuacadianoa" + - "leútealtai do sulinglês arcaicoangikaaramaicomapudungunarapahoarauaquias" + - "uasturianoawadhibalúchibalinêsbasabamumghomala’bejabembabenabafutbalúchi" + - " ocidentalbhojpuribikolbinikomsiksikabrajbodoakooseburiatobuginêsbulubli" + - "nmedumbacaddocaribecayugaatsamcebuanochigachibchachagataichuukesemarijar" + - "gão Chinookchoctawchipewyancherokeecheienesorâni curdocoptaturco da Crim" + - "eiacrioulo francês seichelensekashubiandacotadargwataitadelawareslavedog" + - "ribdinkazarmadogribaixo sorábiodualaholandês médiojola-fonyidiúladazagae" + - "mbuefiqueegípcio arcaicoekajukelamiteinglês médioewondofanguefilipinofom" + - "francês médiofrancês arcaicofrísio setentrionalfrisão orientalfriulanoga" + - "gagauzgangayogbaiageezgilbertêsalto alemão médioalemão arcaico altogondi" + - "gorontalogóticogrebogrego arcaicoalemão (Suíça)gusiigwichʼinhaidahacáhav" + - "aianohiligaynonhititahmongalto sorábioxianghupaibanibibioilocanoinguchel" + - "ojbannguembamachamejudaico-persajudaico-arábicokara-kalpakkabylekachinjj" + - "ukambakawikabardianokanembutyapmacondekabuverdianukorokhasikhotanêskoyra" + - " chiinikakokalenjinquimbundokomi-permyakconcanikosraeankpellekarachay-ba" + - "lkarcaréliokurukhshambalabafiakölschkumykkutenailadinolangilahndalambale" + - "zghianlacotamongoloziluri setentrionalluba-lulualuisenolundaluolushailuy" + - "iamadurêsmafamagahimaithilimakasarmandingamassaimabamocsamandarmendemeru" + - "morisyenirlandês médiomacuameta’miquemaqueminangkabaumanchumanipurimoica" + - "nomossimundangmúltiplos idiomascreekmirandêsmarwarimyeneerzyamazandarani" + - "min nannapolitanonamabaixo alemãonewariniasniueanokwasiongiemboonnogainó" + - "rdico arcaicon’kosoto setentrionalnuernewari clássiconyamwezinyankolenyo" + - "ronzimaosageturco otomanopangasinãpálavipampangapapiamentopalauanopidgin" + - " nigerianopersa arcaicofeníciopohnpeianoprussianoprovençal arcaicoquiché" + - "rajastanirapanuirarotonganoromboromaniaromenorwasandaweiacutoaramaico sa" + - "maritanosamburusasaksantalingambaysangusicilianoscotscurdo meridionalsen" + - "ecasenaselkupkoyraboro senniirlandês arcaicotachelhitshanárabe chadianos" + - "idamosami do sulsami de Lulesami de Inarisami de Skoltsoninquêsogdianosu" + - "rinamêssereresahosukumasususumériocomorianosiríaco clássicosiríacotimnet" + - "esoterenotétumtigrétivtoquelauanoklingontlinguitetamaxequetonganês de Ny" + - "asatok pisintarokotsimshianotumbukatuvaluanotasawaqtuvinianotamazight do" + - " Atlas Centraludmurteugaríticoumbunduraizvaivóticovunjowalserwolayttawar" + - "aywashowarlpiriwukalmyklusogayaoyapeseyangbenyembacantonêszapotecosímbol" + - "os bliszenagatamazight marroquino padrãozunhisem conteúdo linguísticozaz" + - "aárabe modernoazeri sulalto alemão (Suíça)baixo saxãoflamengomoldávioser" + - "vo-croatasuaíli do Congochinês simplificadochinês tradicional" - -var ptLangIdx = []uint16{ // 613 elements + "itianohúngaroarmêniohererointerlínguaindonésiointerlingueigbosichuan yii" + + "nupiaqueidoislandêsitalianoinuktitutjaponêsjavanêsgeorgianocongolêsquicu" + + "iocuanhamacazaquegroenlandêskhmercanarimcoreanocanúricaxemiracurdokomicó" + + "rnicoquirguizlatimluxemburguêslugandalimburguêslingalalaosianolituanolub" + + "a-catangaletãomalgaxemarshalêsmaorimacedôniomalaialamongolmaratimalaioma" + + "ltêsbirmanêsnauruanondebele do nortenepalêsdongoholandêsnynorsk norueguê" + + "sbokmål norueguêsndebele do sulnavajonianjaoccitânicoojibwaoromooriáosse" + + "topanjabipálipolonêspashtoportuguêsquíchuaromancherundiromenorussoquinia" + + "ruandasânscritosardosindisami setentrionalsangocingalêseslovacoeslovenos" + + "amoanoxonasomalialbanêssérviosuázisoto do sulsundanêssuecosuaílitâmiltél" + + "ugotadjiquetailandêstigríniaturcomenotswanatonganêsturcotsongatártarotai" + + "tianouigurucranianourduuzbequevendavietnamitavolapuquevalãouolofexhosaií" + + "dicheiorubázhuangchinêszuluachémacoliadangmeadigueafrihiliaghemainuacadi" + + "anoaleútealtai do sulinglês arcaicoangikaaramaicomapudungunarapahoarauaq" + + "uiasuasturianoawadhibalúchibalinêsbasabamumghomala’bejabembabenabafutbal" + + "úchi ocidentalbhojpuribikolbinikomsiksikabrajbodoakooseburiatobuginêsbu" + + "lublinmedumbacaddocaribecayugaatsamcebuanochigachibchachagataichuukesema" + + "rijargão Chinookchoctawchipewyancherokeecheienecurdo centralcoptaturco d" + + "a Crimeiacrioulo francês seichelensekashubiandacotadargwataitadelawaresl" + + "avedogribdinkazarmadogribaixo sorábiodualaholandês médiojola-fonyidiúlad" + + "azagaembuefiqueegípcio arcaicoekajukelamiteinglês médioewondofanguefilip" + + "inofomfrancês cajunfrancês médiofrancês arcaicofrísio setentrionalfrisão" + + " orientalfriulanogagagauzgangayogbaiageezgilbertêsalto alemão médioalemã" + + "o arcaico altogondigorontalogóticogrebogrego arcaicoalemão (Suíça)gusiig" + + "wichʼinhaidahacáhavaianohiligaynonhititahmongalto sorábioxianghupaibanib" + + "ibioilocanoinguchelojbannguembamachamejudaico-persajudaico-arábicokara-k" + + "alpakkabylekachinjjukambakawikabardianokanembutyapmacondekabuverdianukor" + + "okhasikhotanêskoyra chiinikakokalenjinquimbundokomi-permyakconcanikosrae" + + "ankpellekarachay-balkarcaréliokurukhshambalabafiakölschkumykkutenailadin" + + "olangilahndalambalezguilacotamongocrioulo da Louisianaloziluri setentrio" + + "nalluba-lulualuisenolundaluolushailuyiamadurêsmafamagahimaithilimakasarm" + + "andingamassaimabamocsamandarmendemerumorisyenirlandês médiomacuameta’miq" + + "uemaqueminangkabaumanchumanipurimoicanomossimundangmúltiplos idiomascree" + + "kmirandêsmarwarimyeneerzyamazandaranimin nannapolitanonamabaixo alemãone" + + "wariniasniueanokwasiongiemboonnogainórdico arcaicon’kosoto setentrionaln" + + "uernewari clássiconyamwezinyankolenyoronzimaosageturco otomanopangasinãp" + + "álavipampangapapiamentopalauanopidgin nigerianopersa arcaicofeníciopohn" + + "peianoprussianoprovençal arcaicoquichérajastanirapanuirarotonganoromboro" + + "maniaromenorwasandawesakhaaramaico samaritanosamburusasaksantalingambays" + + "angusicilianoscotscurdo meridionalsenecasenaselkupkoyraboro senniirlandê" + + "s arcaicotachelhitshanárabe chadianosidamosami do sulsami de Lulesami de" + + " Inarisami de Skoltsoninquêsogdianosurinamêssereresahosukumasususumérioc" + + "omorianosiríaco clássicosiríacotimnetesoterenotétumtigrétivtoquelauanokl" + + "ingontlinguitetamaxequetonganês de Nyasatok pisintarokotsimshianotumbuka" + + "tuvaluanotasawaqtuvinianotamazirte do Atlas Centraludmurteugaríticoumbun" + + "duidioma desconhecidovaivóticovunjowalserwolayttawaraywashowarlpiriwukal" + + "myklusogayaoyapeseyangbenyembacantonêszapotecosímbolos bliszenagatamazir" + + "te marroqino padrãozunhisem conteúdo linguísticozazakiárabe modernoazeri" + + " sulalto alemão (Suíça)baixo saxãoflamengomoldávioservo-croatasuaíli do " + + "Congochinês simplificadochinês tradicional" + +var ptLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0004, 0x000c, 0x0015, 0x001f, 0x0023, 0x002b, 0x0034, - 0x003a, 0x0042, 0x0048, 0x004e, 0x0059, 0x0060, 0x006b, 0x0073, - 0x007b, 0x0082, 0x0089, 0x0091, 0x0098, 0x009f, 0x00a7, 0x00af, - 0x00b7, 0x00bf, 0x00c3, 0x00c9, 0x00dd, 0x00e6, 0x00ec, 0x00f8, + 0x003a, 0x0042, 0x004a, 0x0051, 0x005c, 0x0063, 0x006e, 0x0076, + 0x007e, 0x0085, 0x008c, 0x0094, 0x009b, 0x00a2, 0x00aa, 0x00b2, + 0x00ba, 0x00bf, 0x00c3, 0x00c9, 0x00dd, 0x00e6, 0x00ec, 0x00f8, 0x00ff, 0x0105, 0x010b, 0x010e, 0x0113, 0x011a, 0x0123, 0x012b, 0x0134, 0x0139, 0x013e, 0x0142, 0x014c, 0x0153, 0x015a, 0x0162, 0x0173, 0x017c, 0x018d, 0x0193, 0x019a, 0x01a2, 0x01a6, 0x01ad, 0x01b5, 0x01bb, 0x01c4, 0x01ca, 0x01d2, 0x01da, 0x01e2, 0x01e8, // Entry 40 - 7F - 0x01f4, 0x01fe, 0x0209, 0x020c, 0x0216, 0x021f, 0x0222, 0x022b, - 0x0233, 0x023c, 0x0244, 0x024c, 0x0255, 0x025e, 0x0265, 0x026d, - 0x0274, 0x0280, 0x0285, 0x028d, 0x0294, 0x029b, 0x02a3, 0x02a8, + 0x01f4, 0x01fe, 0x0209, 0x020d, 0x0217, 0x0220, 0x0223, 0x022c, + 0x0234, 0x023d, 0x0245, 0x024d, 0x0256, 0x025f, 0x0266, 0x026e, + 0x0275, 0x0281, 0x0286, 0x028d, 0x0294, 0x029b, 0x02a3, 0x02a8, 0x02ac, 0x02b4, 0x02bc, 0x02c1, 0x02ce, 0x02d5, 0x02e0, 0x02e7, 0x02ef, 0x02f6, 0x0302, 0x0308, 0x030f, 0x0319, 0x031e, 0x0328, 0x0330, 0x0336, 0x033c, 0x0342, 0x0349, 0x0352, 0x035a, 0x036a, - 0x0370, 0x0375, 0x037e, 0x0390, 0x03a2, 0x03b0, 0x03b6, 0x03bc, - 0x03c7, 0x03cd, 0x03d2, 0x03d7, 0x03dd, 0x03e4, 0x03e9, 0x03f1, + 0x0372, 0x0377, 0x0380, 0x0392, 0x03a4, 0x03b2, 0x03b8, 0x03be, + 0x03c9, 0x03cf, 0x03d4, 0x03d9, 0x03df, 0x03e6, 0x03eb, 0x03f3, // Entry 80 - BF - 0x03f7, 0x0401, 0x0409, 0x0411, 0x0416, 0x041c, 0x0421, 0x042d, - 0x0437, 0x043c, 0x0441, 0x0452, 0x0457, 0x0460, 0x0468, 0x0470, - 0x0477, 0x047c, 0x0482, 0x048a, 0x0491, 0x0497, 0x04a2, 0x04ab, - 0x04b0, 0x04b7, 0x04bd, 0x04c3, 0x04ca, 0x04d4, 0x04dd, 0x04e6, - 0x04ec, 0x04f5, 0x04fa, 0x0500, 0x0505, 0x050d, 0x0512, 0x051b, - 0x051f, 0x0526, 0x052b, 0x0535, 0x053e, 0x0544, 0x054b, 0x054f, - 0x0557, 0x055e, 0x0564, 0x056b, 0x056f, 0x0575, 0x057a, 0x0581, - 0x0587, 0x0587, 0x058f, 0x0594, 0x0598, 0x05a0, 0x05a0, 0x05a7, + 0x03f9, 0x0403, 0x040b, 0x0413, 0x0418, 0x041e, 0x0423, 0x042f, + 0x0439, 0x043e, 0x0443, 0x0454, 0x0459, 0x0462, 0x046a, 0x0472, + 0x0479, 0x047d, 0x0483, 0x048b, 0x0492, 0x0498, 0x04a3, 0x04ac, + 0x04b1, 0x04b8, 0x04be, 0x04c5, 0x04cd, 0x04d7, 0x04e0, 0x04e9, + 0x04ef, 0x04f8, 0x04fd, 0x0503, 0x050b, 0x0513, 0x0518, 0x0521, + 0x0525, 0x052c, 0x0531, 0x053b, 0x0544, 0x054a, 0x0550, 0x0555, + 0x055d, 0x0564, 0x056a, 0x0571, 0x0575, 0x057b, 0x0580, 0x0587, + 0x058d, 0x058d, 0x0595, 0x059a, 0x059e, 0x05a6, 0x05a6, 0x05ad, // Entry C0 - FF - 0x05a7, 0x05b3, 0x05c2, 0x05c8, 0x05d0, 0x05da, 0x05da, 0x05e1, - 0x05e1, 0x05e1, 0x05e9, 0x05e9, 0x05e9, 0x05ec, 0x05ec, 0x05f5, - 0x05f5, 0x05fb, 0x0603, 0x060b, 0x060b, 0x060f, 0x0614, 0x0614, - 0x061e, 0x0622, 0x0627, 0x0627, 0x062b, 0x0630, 0x0630, 0x0642, - 0x064a, 0x064f, 0x0653, 0x0653, 0x0656, 0x065d, 0x065d, 0x065d, - 0x0661, 0x0661, 0x0665, 0x066b, 0x0672, 0x067a, 0x067e, 0x0682, - 0x0689, 0x068e, 0x0694, 0x069a, 0x069f, 0x06a6, 0x06ab, 0x06b2, - 0x06ba, 0x06c2, 0x06c6, 0x06d5, 0x06dc, 0x06e5, 0x06ed, 0x06f4, + 0x05ad, 0x05b9, 0x05c8, 0x05ce, 0x05d6, 0x05e0, 0x05e0, 0x05e7, + 0x05e7, 0x05e7, 0x05ef, 0x05ef, 0x05ef, 0x05f2, 0x05f2, 0x05fb, + 0x05fb, 0x0601, 0x0609, 0x0611, 0x0611, 0x0615, 0x061a, 0x061a, + 0x0624, 0x0628, 0x062d, 0x062d, 0x0631, 0x0636, 0x0636, 0x0648, + 0x0650, 0x0655, 0x0659, 0x0659, 0x065c, 0x0663, 0x0663, 0x0663, + 0x0667, 0x0667, 0x066b, 0x0671, 0x0678, 0x0680, 0x0684, 0x0688, + 0x068f, 0x0694, 0x069a, 0x06a0, 0x06a5, 0x06a5, 0x06ac, 0x06b1, + 0x06b8, 0x06c0, 0x06c8, 0x06cc, 0x06db, 0x06e2, 0x06eb, 0x06f3, // Entry 100 - 13F - 0x0701, 0x0706, 0x0706, 0x0716, 0x0732, 0x073b, 0x0741, 0x0747, - 0x074c, 0x0754, 0x0759, 0x075f, 0x0764, 0x0769, 0x076e, 0x077c, - 0x077c, 0x0781, 0x0791, 0x079b, 0x07a1, 0x07a7, 0x07ab, 0x07b1, - 0x07b1, 0x07c1, 0x07c7, 0x07ce, 0x07dc, 0x07dc, 0x07e2, 0x07e2, - 0x07e8, 0x07f0, 0x07f0, 0x07f3, 0x07f3, 0x0802, 0x0812, 0x0812, - 0x0826, 0x0836, 0x083e, 0x0840, 0x0846, 0x0849, 0x084d, 0x0852, - 0x0852, 0x0856, 0x0860, 0x0860, 0x0873, 0x0887, 0x0887, 0x088c, - 0x0895, 0x089c, 0x08a1, 0x08ae, 0x08bf, 0x08bf, 0x08bf, 0x08c4, + 0x06fa, 0x0707, 0x070c, 0x070c, 0x071c, 0x0738, 0x0741, 0x0747, + 0x074d, 0x0752, 0x075a, 0x075f, 0x0765, 0x076a, 0x076f, 0x0774, + 0x0782, 0x0782, 0x0787, 0x0797, 0x07a1, 0x07a7, 0x07ad, 0x07b1, + 0x07b7, 0x07b7, 0x07c7, 0x07cd, 0x07d4, 0x07e2, 0x07e2, 0x07e8, + 0x07e8, 0x07ee, 0x07f6, 0x07f6, 0x07f9, 0x0807, 0x0816, 0x0826, + 0x0826, 0x083a, 0x084a, 0x0852, 0x0854, 0x085a, 0x085d, 0x0861, + 0x0866, 0x0866, 0x086a, 0x0874, 0x0874, 0x0887, 0x089b, 0x089b, + 0x08a0, 0x08a9, 0x08b0, 0x08b5, 0x08c2, 0x08d3, 0x08d3, 0x08d3, // Entry 140 - 17F - 0x08cd, 0x08d2, 0x08d7, 0x08df, 0x08df, 0x08e9, 0x08ef, 0x08f4, - 0x0901, 0x0906, 0x090a, 0x090e, 0x0914, 0x091b, 0x0922, 0x0922, - 0x0922, 0x0928, 0x092f, 0x0936, 0x0943, 0x0953, 0x0953, 0x095e, - 0x0964, 0x096a, 0x096d, 0x0972, 0x0976, 0x0980, 0x0987, 0x098b, - 0x0992, 0x099e, 0x099e, 0x09a2, 0x09a2, 0x09a7, 0x09b0, 0x09bc, - 0x09bc, 0x09bc, 0x09c0, 0x09c8, 0x09d1, 0x09dd, 0x09e4, 0x09ec, - 0x09f2, 0x0a01, 0x0a01, 0x0a01, 0x0a09, 0x0a0f, 0x0a17, 0x0a1c, - 0x0a23, 0x0a28, 0x0a2f, 0x0a35, 0x0a3a, 0x0a40, 0x0a45, 0x0a4d, + 0x08d8, 0x08e1, 0x08e6, 0x08eb, 0x08f3, 0x08f3, 0x08fd, 0x0903, + 0x0908, 0x0915, 0x091a, 0x091e, 0x0922, 0x0928, 0x092f, 0x0936, + 0x0936, 0x0936, 0x093c, 0x0943, 0x094a, 0x0957, 0x0967, 0x0967, + 0x0972, 0x0978, 0x097e, 0x0981, 0x0986, 0x098a, 0x0994, 0x099b, + 0x099f, 0x09a6, 0x09b2, 0x09b2, 0x09b6, 0x09b6, 0x09bb, 0x09c4, + 0x09d0, 0x09d0, 0x09d0, 0x09d4, 0x09dc, 0x09e5, 0x09f1, 0x09f8, + 0x0a00, 0x0a06, 0x0a15, 0x0a15, 0x0a15, 0x0a1d, 0x0a23, 0x0a2b, + 0x0a30, 0x0a37, 0x0a3c, 0x0a43, 0x0a49, 0x0a4e, 0x0a54, 0x0a59, // Entry 180 - 1BF - 0x0a4d, 0x0a4d, 0x0a4d, 0x0a53, 0x0a53, 0x0a58, 0x0a5c, 0x0a6d, - 0x0a6d, 0x0a77, 0x0a7e, 0x0a83, 0x0a86, 0x0a8c, 0x0a91, 0x0a91, - 0x0a91, 0x0a99, 0x0a9d, 0x0aa3, 0x0aab, 0x0ab2, 0x0aba, 0x0ac0, - 0x0ac4, 0x0ac9, 0x0acf, 0x0ad4, 0x0ad8, 0x0ae0, 0x0af0, 0x0af5, - 0x0afc, 0x0b06, 0x0b11, 0x0b17, 0x0b1f, 0x0b26, 0x0b2b, 0x0b2b, - 0x0b32, 0x0b44, 0x0b49, 0x0b52, 0x0b59, 0x0b59, 0x0b5e, 0x0b63, - 0x0b6e, 0x0b75, 0x0b7f, 0x0b83, 0x0b90, 0x0b96, 0x0b9a, 0x0ba1, - 0x0ba1, 0x0ba7, 0x0bb0, 0x0bb5, 0x0bc5, 0x0bc5, 0x0bcb, 0x0bdc, + 0x0a5f, 0x0a5f, 0x0a5f, 0x0a5f, 0x0a65, 0x0a65, 0x0a6a, 0x0a7e, + 0x0a82, 0x0a93, 0x0a93, 0x0a9d, 0x0aa4, 0x0aa9, 0x0aac, 0x0ab2, + 0x0ab7, 0x0ab7, 0x0ab7, 0x0abf, 0x0ac3, 0x0ac9, 0x0ad1, 0x0ad8, + 0x0ae0, 0x0ae6, 0x0aea, 0x0aef, 0x0af5, 0x0afa, 0x0afe, 0x0b06, + 0x0b16, 0x0b1b, 0x0b22, 0x0b2c, 0x0b37, 0x0b3d, 0x0b45, 0x0b4c, + 0x0b51, 0x0b51, 0x0b58, 0x0b6a, 0x0b6f, 0x0b78, 0x0b7f, 0x0b7f, + 0x0b84, 0x0b89, 0x0b94, 0x0b9b, 0x0ba5, 0x0ba9, 0x0bb6, 0x0bbc, + 0x0bc0, 0x0bc7, 0x0bc7, 0x0bcd, 0x0bd6, 0x0bdb, 0x0beb, 0x0beb, // Entry 1C0 - 1FF - 0x0be0, 0x0bf0, 0x0bf8, 0x0c00, 0x0c05, 0x0c0a, 0x0c0f, 0x0c1c, - 0x0c26, 0x0c2d, 0x0c35, 0x0c3f, 0x0c47, 0x0c47, 0x0c57, 0x0c57, - 0x0c57, 0x0c64, 0x0c64, 0x0c6c, 0x0c6c, 0x0c6c, 0x0c76, 0x0c7f, - 0x0c91, 0x0c98, 0x0c98, 0x0ca1, 0x0ca8, 0x0cb3, 0x0cb3, 0x0cb3, - 0x0cb8, 0x0cbe, 0x0cbe, 0x0cbe, 0x0cbe, 0x0cc5, 0x0cc8, 0x0ccf, - 0x0cd5, 0x0ce8, 0x0cef, 0x0cf4, 0x0cfb, 0x0cfb, 0x0d02, 0x0d07, - 0x0d10, 0x0d15, 0x0d15, 0x0d25, 0x0d2b, 0x0d2f, 0x0d2f, 0x0d35, - 0x0d44, 0x0d55, 0x0d55, 0x0d5e, 0x0d62, 0x0d71, 0x0d77, 0x0d77, + 0x0bf1, 0x0c02, 0x0c06, 0x0c16, 0x0c1e, 0x0c26, 0x0c2b, 0x0c30, + 0x0c35, 0x0c42, 0x0c4c, 0x0c53, 0x0c5b, 0x0c65, 0x0c6d, 0x0c6d, + 0x0c7d, 0x0c7d, 0x0c7d, 0x0c8a, 0x0c8a, 0x0c92, 0x0c92, 0x0c92, + 0x0c9c, 0x0ca5, 0x0cb7, 0x0cbe, 0x0cbe, 0x0cc7, 0x0cce, 0x0cd9, + 0x0cd9, 0x0cd9, 0x0cde, 0x0ce4, 0x0ce4, 0x0ce4, 0x0ce4, 0x0ceb, + 0x0cee, 0x0cf5, 0x0cfa, 0x0d0d, 0x0d14, 0x0d19, 0x0d20, 0x0d20, + 0x0d27, 0x0d2c, 0x0d35, 0x0d3a, 0x0d3a, 0x0d4a, 0x0d50, 0x0d54, + 0x0d54, 0x0d5a, 0x0d69, 0x0d7a, 0x0d7a, 0x0d83, 0x0d87, 0x0d96, // Entry 200 - 23F - 0x0d77, 0x0d82, 0x0d8e, 0x0d9b, 0x0da8, 0x0db1, 0x0db9, 0x0dc3, - 0x0dc9, 0x0dcd, 0x0dcd, 0x0dd3, 0x0dd7, 0x0ddf, 0x0de8, 0x0dfa, - 0x0e02, 0x0e02, 0x0e02, 0x0e07, 0x0e0b, 0x0e11, 0x0e17, 0x0e1d, - 0x0e20, 0x0e2b, 0x0e2b, 0x0e32, 0x0e3b, 0x0e3b, 0x0e44, 0x0e56, - 0x0e5f, 0x0e5f, 0x0e65, 0x0e65, 0x0e6f, 0x0e6f, 0x0e76, 0x0e7f, - 0x0e86, 0x0e8f, 0x0ea9, 0x0eb0, 0x0eba, 0x0ec1, 0x0ec5, 0x0ec8, - 0x0ec8, 0x0ec8, 0x0ec8, 0x0ec8, 0x0ecf, 0x0ecf, 0x0ed4, 0x0eda, - 0x0ee2, 0x0ee7, 0x0eec, 0x0ef4, 0x0ef6, 0x0efc, 0x0efc, 0x0f02, + 0x0d9c, 0x0d9c, 0x0d9c, 0x0da7, 0x0db3, 0x0dc0, 0x0dcd, 0x0dd6, + 0x0dde, 0x0de8, 0x0dee, 0x0df2, 0x0df2, 0x0df8, 0x0dfc, 0x0e04, + 0x0e0d, 0x0e1f, 0x0e27, 0x0e27, 0x0e27, 0x0e2c, 0x0e30, 0x0e36, + 0x0e3c, 0x0e42, 0x0e45, 0x0e50, 0x0e50, 0x0e57, 0x0e60, 0x0e60, + 0x0e69, 0x0e7b, 0x0e84, 0x0e84, 0x0e8a, 0x0e8a, 0x0e94, 0x0e94, + 0x0e9b, 0x0ea4, 0x0eab, 0x0eb4, 0x0ece, 0x0ed5, 0x0edf, 0x0ee6, + 0x0ef9, 0x0efc, 0x0efc, 0x0efc, 0x0efc, 0x0efc, 0x0f03, 0x0f03, + 0x0f08, 0x0f0e, 0x0f16, 0x0f1b, 0x0f20, 0x0f28, 0x0f2a, 0x0f30, // Entry 240 - 27F - 0x0f05, 0x0f0b, 0x0f12, 0x0f17, 0x0f17, 0x0f20, 0x0f28, 0x0f36, - 0x0f36, 0x0f3c, 0x0f58, 0x0f5d, 0x0f77, 0x0f7b, 0x0f89, 0x0f92, - 0x0f92, 0x0fa8, 0x0fa8, 0x0fa8, 0x0fa8, 0x0fa8, 0x0fa8, 0x0fa8, - 0x0fa8, 0x0fa8, 0x0fa8, 0x0fa8, 0x0fb4, 0x0fbc, 0x0fbc, 0x0fbc, - 0x0fc5, 0x0fd1, 0x0fe1, 0x0ff5, 0x1008, -} // Size: 1250 bytes - -const ptPTLangStr string = "" + // Size: 882 bytes - "africanêschecochuvasheweestóniofrísico ocidentalhaúçahindiarménioigbocan" + - "arimgandamacedónionorueguês nynorsknorueguês bokmåloccitanoosséticopolac" + - "opastókinyarwandasami do nortetigríniaturcomanotongaiorubainglês antigom" + - "apuchebamunghomalaburiatjargão chinooksorani curdofrancês crioulo seselw" + - "aegípcio clássicofrancês antigofrísio orientalalemão alto antigogrego cl" + - "ássicoalemão suíçocabardianocrioulo cabo-verdianolezghianoluri do norte" + - "luomohawkbaixo-alemãonórdico antigolíngua pangasinesapersa antigolíngua " + - "pohnpeicaprovençal antigorajastanêssakhairlandês antigoárabe do Chadeina" + - "ri samirootvaisogaárabe moderno padrãoalemão austríacoalto alemão suíçoi" + - "nglês australianoinglês canadianoinglês britânicoinglês americanoespanho" + - "l latino-americanoespanhol europeufrancês canadianofrancês suíçobaixo-sa" + - "xãoportuguês do Brasilportuguês europeu" - -var ptPTLangIdx = []uint16{ // 608 elements + 0x0f30, 0x0f36, 0x0f39, 0x0f3f, 0x0f46, 0x0f4b, 0x0f4b, 0x0f54, + 0x0f5c, 0x0f6a, 0x0f6a, 0x0f70, 0x0f8b, 0x0f90, 0x0faa, 0x0fb0, + 0x0fbe, 0x0fc7, 0x0fc7, 0x0fdd, 0x0fdd, 0x0fdd, 0x0fdd, 0x0fdd, + 0x0fdd, 0x0fdd, 0x0fdd, 0x0fdd, 0x0fdd, 0x0fdd, 0x0fe9, 0x0ff1, + 0x0ff1, 0x0ff1, 0x0ffa, 0x1006, 0x1016, 0x102a, 0x103d, +} // Size: 1254 bytes + +const ptPTLangStr string = "" + // Size: 1082 bytes + "africanêsavariccórsicochecochuvasheweestóniofrísico ocidentalhaúçahindia" + + "rméniogandamacedóniomaratanepalinorueguês nynorsknorueguês bokmåloccitan" + + "ooriyaosséticopolacopastósami do norteshonatelugutajiqueturcomanotongata" + + "tarusbequeuólofexosaiorubainglês antigomapuchebamunghomalaburiatchuquêsj" + + "argão chinookcheyennesorani curdofrancês crioulo seselwaefikegípcio clás" + + "sicofonfrancês antigofrísio orientalgeʼezalemão alto antigogrego clássic" + + "oalemão suíçocabardianocrioulo cabo-verdianocarachaio-bálcarolezghianocr" + + "ioulo de Louisianaluri do norteluomakassarêsmohawkvários idiomasbaixo-al" + + "emãonórdico antigolíngua pangasinesapampangopersa antigolíngua pohnpeica" + + "provençal antigorajastanêsirlandês antigoárabe do Chadeinari samitemneta" + + "mazight do Atlas Centralvaisogatamazight marroquino padrãozunizazaárabe " + + "moderno padrãoalemão austríacoalto alemão suíçoinglês australianoinglês " + + "canadianoinglês britânicoinglês americanoespanhol latino-americanoespanh" + + "ol europeufrancês canadianofrancês suíçobaixo-saxãoportuguês do Brasilpo" + + "rtuguês europeu" + +var ptPTLangIdx = []uint16{ // 610 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x000a, 0x000a, 0x000a, - 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, - 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, - 0x000a, 0x000a, 0x000a, 0x000f, 0x000f, 0x0016, 0x0016, 0x0016, - 0x0016, 0x0016, 0x0016, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, - 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, - 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x003a, - 0x003a, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0047, 0x0047, + 0x000a, 0x000a, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0018, 0x0018, 0x001d, 0x001d, 0x0024, 0x0024, 0x0024, + 0x0024, 0x0024, 0x0024, 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0048, + 0x0048, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x0055, 0x0055, // Entry 40 - 7F - 0x0047, 0x0047, 0x0047, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, - 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, - 0x004b, 0x004b, 0x004b, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, - 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0057, 0x0057, 0x0057, - 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0061, - 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, - 0x0061, 0x0061, 0x0061, 0x0073, 0x0085, 0x0085, 0x0085, 0x0085, - 0x008d, 0x008d, 0x008d, 0x008d, 0x0096, 0x0096, 0x0096, 0x009c, + 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, + 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, + 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, + 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x005a, 0x005a, 0x005a, + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x0064, + 0x0064, 0x0064, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, + 0x0070, 0x0070, 0x0070, 0x0082, 0x0094, 0x0094, 0x0094, 0x0094, + 0x009c, 0x009c, 0x009c, 0x00a1, 0x00aa, 0x00aa, 0x00aa, 0x00b0, // Entry 80 - BF - 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00ad, - 0x00ad, 0x00ad, 0x00ad, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, - 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, - 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00ba, 0x00c3, 0x00cc, - 0x00cc, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, - 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, - 0x00d1, 0x00d7, 0x00d7, 0x00d7, 0x00d7, 0x00d7, 0x00d7, 0x00d7, - 0x00d7, 0x00d7, 0x00d7, 0x00d7, 0x00d7, 0x00d7, 0x00d7, 0x00d7, + 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, + 0x00b6, 0x00b6, 0x00b6, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, + 0x00c3, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, + 0x00c8, 0x00c8, 0x00c8, 0x00ce, 0x00d5, 0x00d5, 0x00d5, 0x00de, + 0x00de, 0x00e3, 0x00e3, 0x00e3, 0x00e8, 0x00e8, 0x00e8, 0x00e8, + 0x00e8, 0x00ef, 0x00ef, 0x00ef, 0x00ef, 0x00ef, 0x00f6, 0x00fa, + 0x00fa, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, + 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, // Entry C0 - FF - 0x00d7, 0x00d7, 0x00e5, 0x00e5, 0x00e5, 0x00ec, 0x00ec, 0x00ec, - 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, - 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00f1, 0x00f1, - 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, - 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, - 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00fe, 0x00fe, 0x00fe, 0x00fe, - 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, - 0x00fe, 0x00fe, 0x00fe, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, + 0x0100, 0x0100, 0x010e, 0x010e, 0x010e, 0x0115, 0x0115, 0x0115, + 0x0115, 0x0115, 0x0115, 0x0115, 0x0115, 0x0115, 0x0115, 0x0115, + 0x0115, 0x0115, 0x0115, 0x0115, 0x0115, 0x0115, 0x011a, 0x011a, + 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, + 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, 0x0121, + 0x0121, 0x0121, 0x0121, 0x0121, 0x0127, 0x0127, 0x0127, 0x0127, + 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, + 0x0127, 0x0127, 0x012f, 0x012f, 0x013e, 0x013e, 0x013e, 0x013e, // Entry 100 - 13F - 0x0119, 0x0119, 0x0119, 0x0119, 0x0131, 0x0131, 0x0131, 0x0131, - 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, - 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, - 0x0131, 0x0143, 0x0143, 0x0143, 0x0143, 0x0143, 0x0143, 0x0143, - 0x0143, 0x0143, 0x0143, 0x0143, 0x0143, 0x0143, 0x0152, 0x0152, - 0x0152, 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, - 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, 0x0175, 0x0175, 0x0175, - 0x0175, 0x0175, 0x0175, 0x0184, 0x0193, 0x0193, 0x0193, 0x0193, + 0x0146, 0x0152, 0x0152, 0x0152, 0x0152, 0x016a, 0x016a, 0x016a, + 0x016a, 0x016a, 0x016a, 0x016a, 0x016a, 0x016a, 0x016a, 0x016a, + 0x016a, 0x016a, 0x016a, 0x016a, 0x016a, 0x016a, 0x016a, 0x016a, + 0x016e, 0x016e, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, + 0x0180, 0x0180, 0x0180, 0x0180, 0x0183, 0x0183, 0x0183, 0x0192, + 0x0192, 0x0192, 0x01a2, 0x01a2, 0x01a2, 0x01a2, 0x01a2, 0x01a2, + 0x01a2, 0x01a2, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01bb, 0x01bb, + 0x01bb, 0x01bb, 0x01bb, 0x01bb, 0x01ca, 0x01d9, 0x01d9, 0x01d9, // Entry 140 - 17F - 0x0193, 0x0193, 0x0193, 0x0193, 0x0193, 0x0193, 0x0193, 0x0193, - 0x0193, 0x0193, 0x0193, 0x0193, 0x0193, 0x0193, 0x0193, 0x0193, - 0x0193, 0x0193, 0x0193, 0x0193, 0x0193, 0x0193, 0x0193, 0x0193, - 0x0193, 0x0193, 0x0193, 0x0193, 0x0193, 0x019d, 0x019d, 0x019d, - 0x019d, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, - 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, - 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, - 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01bb, + 0x01d9, 0x01d9, 0x01d9, 0x01d9, 0x01d9, 0x01d9, 0x01d9, 0x01d9, + 0x01d9, 0x01d9, 0x01d9, 0x01d9, 0x01d9, 0x01d9, 0x01d9, 0x01d9, + 0x01d9, 0x01d9, 0x01d9, 0x01d9, 0x01d9, 0x01d9, 0x01d9, 0x01d9, + 0x01d9, 0x01d9, 0x01d9, 0x01d9, 0x01d9, 0x01d9, 0x01e3, 0x01e3, + 0x01e3, 0x01e3, 0x01f8, 0x01f8, 0x01f8, 0x01f8, 0x01f8, 0x01f8, + 0x01f8, 0x01f8, 0x01f8, 0x01f8, 0x01f8, 0x01f8, 0x01f8, 0x01f8, + 0x01f8, 0x01f8, 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, + 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, // Entry 180 - 1BF - 0x01bb, 0x01bb, 0x01bb, 0x01bb, 0x01bb, 0x01bb, 0x01bb, 0x01c8, - 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01cb, 0x01cb, 0x01cb, 0x01cb, - 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01cb, - 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01cb, - 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01cb, 0x01d1, 0x01d1, 0x01d1, - 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, - 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01de, 0x01de, 0x01de, 0x01de, - 0x01de, 0x01de, 0x01de, 0x01de, 0x01ed, 0x01ed, 0x01ed, 0x01ed, + 0x0213, 0x0213, 0x0213, 0x0213, 0x0213, 0x0213, 0x0213, 0x0227, + 0x0227, 0x0234, 0x0234, 0x0234, 0x0234, 0x0234, 0x0237, 0x0237, + 0x0237, 0x0237, 0x0237, 0x0237, 0x0237, 0x0237, 0x0237, 0x0242, + 0x0242, 0x0242, 0x0242, 0x0242, 0x0242, 0x0242, 0x0242, 0x0242, + 0x0242, 0x0242, 0x0242, 0x0242, 0x0242, 0x0242, 0x0242, 0x0248, + 0x0248, 0x0248, 0x0248, 0x0257, 0x0257, 0x0257, 0x0257, 0x0257, + 0x0257, 0x0257, 0x0257, 0x0257, 0x0257, 0x0257, 0x0264, 0x0264, + 0x0264, 0x0264, 0x0264, 0x0264, 0x0264, 0x0264, 0x0273, 0x0273, // Entry 1C0 - 1FF - 0x01ed, 0x01ed, 0x01ed, 0x01ed, 0x01ed, 0x01ed, 0x01ed, 0x01ed, - 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, 0x0200, - 0x0200, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x021d, 0x021d, - 0x022e, 0x022e, 0x022e, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, - 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, - 0x023e, 0x023e, 0x023e, 0x023e, 0x023e, 0x023e, 0x023e, 0x023e, - 0x023e, 0x023e, 0x023e, 0x023e, 0x023e, 0x023e, 0x023e, 0x023e, - 0x023e, 0x024e, 0x024e, 0x024e, 0x024e, 0x025d, 0x025d, 0x025d, + 0x0273, 0x0273, 0x0273, 0x0273, 0x0273, 0x0273, 0x0273, 0x0273, + 0x0273, 0x0273, 0x0286, 0x0286, 0x028e, 0x028e, 0x028e, 0x028e, + 0x028e, 0x028e, 0x028e, 0x029a, 0x029a, 0x029a, 0x029a, 0x029a, + 0x02ab, 0x02ab, 0x02bc, 0x02bc, 0x02bc, 0x02c7, 0x02c7, 0x02c7, + 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, + 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, + 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, + 0x02c7, 0x02c7, 0x02c7, 0x02d7, 0x02d7, 0x02d7, 0x02d7, 0x02e6, // Entry 200 - 23F - 0x025d, 0x025d, 0x025d, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, - 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, - 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, - 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, - 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, - 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x026b, 0x026e, - 0x026e, 0x026e, 0x026e, 0x026e, 0x026e, 0x026e, 0x026e, 0x026e, - 0x026e, 0x026e, 0x026e, 0x026e, 0x026e, 0x026e, 0x026e, 0x0272, + 0x02e6, 0x02e6, 0x02e6, 0x02e6, 0x02e6, 0x02f0, 0x02f0, 0x02f0, + 0x02f0, 0x02f0, 0x02f0, 0x02f0, 0x02f0, 0x02f0, 0x02f0, 0x02f0, + 0x02f0, 0x02f0, 0x02f0, 0x02f0, 0x02f0, 0x02f5, 0x02f5, 0x02f5, + 0x02f5, 0x02f5, 0x02f5, 0x02f5, 0x02f5, 0x02f5, 0x02f5, 0x02f5, + 0x02f5, 0x02f5, 0x02f5, 0x02f5, 0x02f5, 0x02f5, 0x02f5, 0x02f5, + 0x02f5, 0x02f5, 0x02f5, 0x02f5, 0x030f, 0x030f, 0x030f, 0x030f, + 0x030f, 0x0312, 0x0312, 0x0312, 0x0312, 0x0312, 0x0312, 0x0312, + 0x0312, 0x0312, 0x0312, 0x0312, 0x0312, 0x0312, 0x0312, 0x0312, // Entry 240 - 27F - 0x0272, 0x0272, 0x0272, 0x0272, 0x0272, 0x0272, 0x0272, 0x0272, - 0x0272, 0x0272, 0x0272, 0x0272, 0x0272, 0x0272, 0x0288, 0x0288, - 0x029a, 0x02ae, 0x02c1, 0x02d2, 0x02e4, 0x02f5, 0x030e, 0x031e, - 0x031e, 0x031e, 0x0330, 0x0340, 0x034c, 0x034c, 0x0360, 0x0372, -} // Size: 1240 bytes + 0x0312, 0x0316, 0x0316, 0x0316, 0x0316, 0x0316, 0x0316, 0x0316, + 0x0316, 0x0316, 0x0316, 0x0316, 0x0332, 0x0336, 0x0336, 0x033a, + 0x0350, 0x0350, 0x0362, 0x0376, 0x0389, 0x039a, 0x03ac, 0x03bd, + 0x03d6, 0x03e6, 0x03e6, 0x03e6, 0x03f8, 0x0408, 0x0414, 0x0414, + 0x0428, 0x043a, +} // Size: 1244 bytes -const roLangStr string = "" + // Size: 4228 bytes +const roLangStr string = "" + // Size: 4259 bytes "afarabhazăavestanăafrikaansakanamharicăaragonezăarabăasamezăavarăaymaraa" + "zerăbașkirăbielorusăbulgarăbislamabambarabengalezătibetanăbretonăbosniac" + "ăcatalanăcecenăchamorrocorsicanăcreecehăslavonăciuvașăgalezădanezăgerma" + @@ -23170,51 +24547,51 @@ const roLangStr string = "" + // Size: 4228 bytes "ba-katangaletonămalgașămarshallezămaorimacedoneanămalayalammongolămarath" + "imalaezămaltezăbirmanănaurundebele de nordnepalezăndonganeerlandezănorve" + "giană nynorsknorvegiană bokmålndebele de sudnavajonyanjaoccitanăojibwaor" + - "omooriyaosetăpunjabipalipolonezăpaștunăportughezăquechuaromanșăkirundiro" + - "mânărusăkinyarwandasanscrităsardinianăsindhisami de nordsangosingalezăsl" + - "ovacăslovenăsamoanăshonasomalezăalbanezăsârbăswatisesothosundanezăsuedez" + - "ăswahilitamilătelugutadjicăthailandezătigrinăturkmenăsetswanatonganătur" + + "omoodiaosetăpunjabipalipolonezăpaștunăportughezăquechuaromanșăkirundirom" + + "ânărusăkinyarwandasanscrităsardinianăsindhisami de nordsangosinghalezăs" + + "lovacăslovenăsamoanăshonasomalezăalbanezăsârbăswatisesothosundanezăsuede" + + "zăswahilitamilătelugutadjicăthailandezătigrinăturkmenăsetswanatonganătur" + "cătsongatătarătahitianăuigurăucraineanăurduuzbecăvendavietnamezăvolapukv" + "alonăwolofxhosaidișyorubazhuangchinezăzuluacehacoliadangmeadygheafrihili" + - "aghemainuakkadianăaleutăaltaică meridionalăengleză vecheangikaaramaicăar" + - "aucanianăarapahoarawakasuasturianăawadhibaluchibalinezăbasaabamunghomala" + - "bejabembabenabafutbaluchi occidentalăbhojpuribikolbinikomsiksikabrajbodo" + - "akooseburiatbuginezăbulublinmedumbacaddocaribcayugaatsamcebuanăchigachib" + - "chachagataichuukesemarijargon chinookchoctawchipewyancherokeecheyennekur" + - "dă centralăcoptăturcă crimeeanăcreolă franceză seselwacașubianădakotadar" + - "gwataitadelawareslavedogribdinkazarmadogrisorabă de josdualaneerlandeză " + - "mediejola-fonyidyuladazagaembuefikegipteană vecheekajukelamităengleză me" + - "dieewondofangfilipinezăfonfranceză mediefranceză vechefrizonă nordicăfri" + - "zonă orientalăfriulanăgagăgăuzăchineză gangayogbayageezgilbertinăgermană" + - " înaltă mediegermană înaltă vechegondigorontalogoticăgrebogreacă vechege" + - "rmană (Elveția)gusiigwichʼinhaidachineză hakkahawaiianăhiligaynonhitităh" + - "mongsorabă de suschineză xianghupaibanibibioilokoingușălojbanngombamacha" + - "meiudeo-persanăiudeo-arabăkarakalpakkabylekachinjjukambakawikabardiankan" + - "embutyapmakondekabuverdianukorokhasikhotanezăkoyra chiinikakokalenjinkim" + - "bundukomi-permiakkonkanikosraekpellekaraceai-balkarkarelianăkurukhshamba" + - "labafiakölschkumykkutenailadinolangilahndalambalezghianlakotamongolozilu" + - "ri de nordluba-lulualuisenolundaluomizoluyiamadurezămafamagahimaithilima" + - "kasarmandingomasaimabamokshamandarmendemerumorisyenirlandeză mediemakhuw" + - "a-meettometa’micmacminangkabaumanciurianămanipurimohawkmossimundangmai m" + - "ulte limbicreekmirandezămarwarimyeneerzyamazanderanichineză min nannapol" + - "itanănamagermana de josnewariniasniueanăkwasiongiemboonnogainordică vech" + - "en’kosotho de nordnuernewari clasicănyamwezinyankolenyoronzimaosageturcă" + - " otomanăpangasinanpahlavipampangapapiamentopalauanăpidgin nigerianpersan" + - "ă vechefenicianăpohnpeianăprusacăprovensală vechequichérajasthanirapanu" + - "irarotonganromboromaniaromânărwasandawesakhaaramaică samariteanăsamburus" + - "asaksantalingambaysangusicilianăscotskurdă de sudsenecasenaselkupkoyrabo" + - "ro Senniirlandeză vechetachelhitshanarabă ciadianăsidamosami de sudlule " + - "samiinari samiskolt samisoninkesogdiensranan tongoserersahosukumasususum" + - "erianăcomorezăsiriacă clasicăsiriacătimnetesoterenotetumtigretivtokelauk" + - "lingonianătlingittamasheknyasa tongatok pisintarokotsimshiantumbukatuval" + - "utasawaqtuvanătamazight central marocanăudmurtugariticăumbundurootvaivot" + - "icăvunjowalserwolaitawaraywashowarlpirichineză wucalmucăsogayaoyapezăyan" + - "gbenyembacantonezăzapotecăsimboluri Bilsszenagatamazight standard maroca" + - "năzunifară conținut lingvisticzazaarabă standard modernăgermană standard" + - " (Elveția)saxona de josflamandămoldoveneascăsârbo-croatăswahili (R.D. Co" + - "ngo)chineză tradițională" - -var roLangIdx = []uint16{ // 613 elements + "aghemainuakkadianăaleutăaltaică meridionalăengleză vecheangikaaramaicăma" + + "puchearapahoarawakasuasturianăawadhibaluchibalinezăbasaabamunghomalabeja" + + "bembabenabafutbaluchi occidentalăbhojpuribikolbinikomsiksikabrajbodoakoo" + + "seburiatbuginezăbulublinmedumbacaddocaribcayugaatsamcebuanăchigachibchac" + + "hagataichuukesemarijargon chinookchoctawchipewyancherokeecheyennekurdă c" + + "entralăcoptăturcă crimeeanăcreolă franceză seselwacașubianădakotadargwat" + + "aitadelawareslavedogribdinkazarmadogrisorabă de josdualaneerlandeză medi" + + "ejola-fonyidyuladazagaembuefikegipteană vecheekajukelamităengleză mediee" + + "wondofangfilipinezăfonfranceză cajunfranceză mediefranceză vechefrizonă " + + "nordicăfrizonă orientalăfriulanăgagăgăuzăchineză gangayogbayageezgilbert" + + "inăgermană înaltă mediegermană înaltă vechegondigorontalogoticăgrebogrea" + + "că vechegermană (Elveția)gusiigwichʼinhaidachineză hakkahawaiianăhiligay" + + "nonhitităhmongsorabă de suschineză xianghupaibanibibioilokoingușălojbann" + + "gombamachameiudeo-persanăiudeo-arabăkarakalpakkabylekachinjjukambakawika" + + "bardiankanembutyapmakondekabuverdianukorokhasikhotanezăkoyra chiinikakok" + + "alenjinkimbundukomi-permiakkonkanikosraekpellekaraceai-balkarkarelianăku" + + "rukhshambalabafiakölschkumykkutenailadinolangilahndalambalezghianlakotam" + + "ongocreolă louisianezăloziluri de nordluba-lulualuisenolundaluomizoluyia" + + "madurezămafamagahimaithilimakasarmandingomasaimabamokshamandarmendemerum" + + "orisyenirlandeză mediemakhuwa-meettometa’micmacminangkabaumanciurianăman" + + "ipurimohawkmossimundangmai multe limbicreekmirandezămarwarimyeneerzyamaz" + + "anderanichineză min nannapolitanănamagermana de josnewariniasniueanăkwas" + + "iongiemboonnogainordică vechen’kosotho de nordnuernewari clasicănyamwezi" + + "nyankolenyoronzimaosageturcă otomanăpangasinanpahlavipampangapapiamentop" + + "alauanăpidgin nigerianpersană vechefenicianăpohnpeianăprusacăprovensală " + + "vechequichérajasthanirapanuirarotonganromboromaniaromânărwasandawesakhaa" + + "ramaică samariteanăsamburusasaksantalingambaysangusicilianăscotskurdă de" + + " sudsenecasenaselkupkoyraboro Senniirlandeză vechetachelhitshanarabă cia" + + "dianăsidamosami de sudlule samiinari samiskolt samisoninkesogdiensranan " + + "tongoserersahosukumasususumerianăcomorezăsiriacă clasicăsiriacătimneteso" + + "terenotetumtigretivtokelauklingonianătlingittamasheknyasa tongatok pisin" + + "tarokotsimshiantumbukatuvalutasawaqtuvanătamazight central marocanăudmur" + + "tugariticăumbundulimbă necunoscutăvaivoticăvunjowalserwolaitawaraywashow" + + "arlpirichineză wucalmucăsogayaoyapezăyangbenyembacantonezăzapotecăsimbol" + + "uri Bilsszenagatamazight standard marocanăzunifară conținut lingvisticza" + + "zaarabă standard modernăgermană standard (Elveția)saxona de josflamandăs" + + "ârbo-croatăswahili (R.D. Congo)chineză tradițională" + +var roLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0004, 0x000b, 0x0014, 0x001d, 0x0021, 0x002a, 0x0034, 0x003a, 0x0042, 0x0048, 0x004e, 0x0054, 0x005d, 0x0067, 0x006f, @@ -23232,10 +24609,10 @@ var roLangIdx = []uint16{ // 613 elements 0x0309, 0x0314, 0x0320, 0x0327, 0x0330, 0x033c, 0x0341, 0x034d, 0x0356, 0x035e, 0x0365, 0x036d, 0x0375, 0x037d, 0x0382, 0x0391, 0x039a, 0x03a0, 0x03ac, 0x03bf, 0x03d2, 0x03e0, 0x03e6, 0x03ec, - 0x03f5, 0x03fb, 0x0400, 0x0405, 0x040b, 0x0412, 0x0416, 0x041f, + 0x03f5, 0x03fb, 0x0400, 0x0404, 0x040a, 0x0411, 0x0415, 0x041e, // Entry 80 - BF - 0x0428, 0x0433, 0x043a, 0x0443, 0x044a, 0x0452, 0x0457, 0x0462, - 0x046c, 0x0477, 0x047d, 0x0489, 0x048e, 0x0498, 0x04a0, 0x04a8, + 0x0427, 0x0432, 0x0439, 0x0442, 0x0449, 0x0451, 0x0456, 0x0461, + 0x046b, 0x0476, 0x047c, 0x0488, 0x048d, 0x0498, 0x04a0, 0x04a8, 0x04b0, 0x04b5, 0x04be, 0x04c7, 0x04ce, 0x04d3, 0x04da, 0x04e4, 0x04ec, 0x04f3, 0x04fa, 0x0500, 0x0508, 0x0514, 0x051c, 0x0525, 0x052d, 0x0535, 0x053b, 0x0541, 0x0549, 0x0553, 0x055a, 0x0565, @@ -23243,137 +24620,138 @@ var roLangIdx = []uint16{ // 613 elements 0x059d, 0x05a3, 0x05a9, 0x05b1, 0x05b5, 0x05b9, 0x05be, 0x05c5, 0x05cb, 0x05cb, 0x05d3, 0x05d8, 0x05dc, 0x05e6, 0x05e6, 0x05ed, // Entry C0 - FF - 0x05ed, 0x0602, 0x0610, 0x0616, 0x061f, 0x062b, 0x062b, 0x0632, - 0x0632, 0x0632, 0x0638, 0x0638, 0x0638, 0x063b, 0x063b, 0x0645, - 0x0645, 0x064b, 0x0652, 0x065b, 0x065b, 0x0660, 0x0665, 0x0665, - 0x066c, 0x0670, 0x0675, 0x0675, 0x0679, 0x067e, 0x067e, 0x0692, - 0x069a, 0x069f, 0x06a3, 0x06a3, 0x06a6, 0x06ad, 0x06ad, 0x06ad, - 0x06b1, 0x06b1, 0x06b5, 0x06bb, 0x06c1, 0x06ca, 0x06ce, 0x06d2, - 0x06d9, 0x06de, 0x06e3, 0x06e9, 0x06ee, 0x06f6, 0x06fb, 0x0702, - 0x070a, 0x0712, 0x0716, 0x0724, 0x072b, 0x0734, 0x073c, 0x0744, + 0x05ed, 0x0602, 0x0610, 0x0616, 0x061f, 0x0626, 0x0626, 0x062d, + 0x062d, 0x062d, 0x0633, 0x0633, 0x0633, 0x0636, 0x0636, 0x0640, + 0x0640, 0x0646, 0x064d, 0x0656, 0x0656, 0x065b, 0x0660, 0x0660, + 0x0667, 0x066b, 0x0670, 0x0670, 0x0674, 0x0679, 0x0679, 0x068d, + 0x0695, 0x069a, 0x069e, 0x069e, 0x06a1, 0x06a8, 0x06a8, 0x06a8, + 0x06ac, 0x06ac, 0x06b0, 0x06b6, 0x06bc, 0x06c5, 0x06c9, 0x06cd, + 0x06d4, 0x06d9, 0x06de, 0x06e4, 0x06e9, 0x06e9, 0x06f1, 0x06f6, + 0x06fd, 0x0705, 0x070d, 0x0711, 0x071f, 0x0726, 0x072f, 0x0737, // Entry 100 - 13F - 0x0754, 0x075a, 0x075a, 0x076b, 0x0784, 0x078f, 0x0795, 0x079b, - 0x07a0, 0x07a8, 0x07ad, 0x07b3, 0x07b8, 0x07bd, 0x07c2, 0x07d0, - 0x07d0, 0x07d5, 0x07e7, 0x07f1, 0x07f6, 0x07fc, 0x0800, 0x0804, - 0x0804, 0x0814, 0x081a, 0x0822, 0x0830, 0x0830, 0x0836, 0x0836, - 0x083a, 0x0845, 0x0845, 0x0848, 0x0848, 0x0857, 0x0866, 0x0866, - 0x0877, 0x088a, 0x0893, 0x0895, 0x089f, 0x08ab, 0x08af, 0x08b4, - 0x08b4, 0x08b8, 0x08c3, 0x08c3, 0x08da, 0x08f1, 0x08f1, 0x08f6, - 0x08ff, 0x0906, 0x090b, 0x0918, 0x092b, 0x092b, 0x092b, 0x0930, + 0x073f, 0x074f, 0x0755, 0x0755, 0x0766, 0x077f, 0x078a, 0x0790, + 0x0796, 0x079b, 0x07a3, 0x07a8, 0x07ae, 0x07b3, 0x07b8, 0x07bd, + 0x07cb, 0x07cb, 0x07d0, 0x07e2, 0x07ec, 0x07f1, 0x07f7, 0x07fb, + 0x07ff, 0x07ff, 0x080f, 0x0815, 0x081d, 0x082b, 0x082b, 0x0831, + 0x0831, 0x0835, 0x0840, 0x0840, 0x0843, 0x0852, 0x0861, 0x0870, + 0x0870, 0x0881, 0x0894, 0x089d, 0x089f, 0x08a9, 0x08b5, 0x08b9, + 0x08be, 0x08be, 0x08c2, 0x08cd, 0x08cd, 0x08e4, 0x08fb, 0x08fb, + 0x0900, 0x0909, 0x0910, 0x0915, 0x0922, 0x0935, 0x0935, 0x0935, // Entry 140 - 17F - 0x0939, 0x093e, 0x094c, 0x0956, 0x0956, 0x0960, 0x0967, 0x096c, - 0x097a, 0x0988, 0x098c, 0x0990, 0x0996, 0x099b, 0x09a3, 0x09a3, - 0x09a3, 0x09a9, 0x09af, 0x09b6, 0x09c4, 0x09d0, 0x09d0, 0x09da, - 0x09e0, 0x09e6, 0x09e9, 0x09ee, 0x09f2, 0x09fb, 0x0a02, 0x0a06, - 0x0a0d, 0x0a19, 0x0a19, 0x0a1d, 0x0a1d, 0x0a22, 0x0a2c, 0x0a38, - 0x0a38, 0x0a38, 0x0a3c, 0x0a44, 0x0a4c, 0x0a58, 0x0a5f, 0x0a65, - 0x0a6b, 0x0a7a, 0x0a7a, 0x0a7a, 0x0a84, 0x0a8a, 0x0a92, 0x0a97, - 0x0a9e, 0x0aa3, 0x0aaa, 0x0ab0, 0x0ab5, 0x0abb, 0x0ac0, 0x0ac8, + 0x093a, 0x0943, 0x0948, 0x0956, 0x0960, 0x0960, 0x096a, 0x0971, + 0x0976, 0x0984, 0x0992, 0x0996, 0x099a, 0x09a0, 0x09a5, 0x09ad, + 0x09ad, 0x09ad, 0x09b3, 0x09b9, 0x09c0, 0x09ce, 0x09da, 0x09da, + 0x09e4, 0x09ea, 0x09f0, 0x09f3, 0x09f8, 0x09fc, 0x0a05, 0x0a0c, + 0x0a10, 0x0a17, 0x0a23, 0x0a23, 0x0a27, 0x0a27, 0x0a2c, 0x0a36, + 0x0a42, 0x0a42, 0x0a42, 0x0a46, 0x0a4e, 0x0a56, 0x0a62, 0x0a69, + 0x0a6f, 0x0a75, 0x0a84, 0x0a84, 0x0a84, 0x0a8e, 0x0a94, 0x0a9c, + 0x0aa1, 0x0aa8, 0x0aad, 0x0ab4, 0x0aba, 0x0abf, 0x0ac5, 0x0aca, // Entry 180 - 1BF - 0x0ac8, 0x0ac8, 0x0ac8, 0x0ace, 0x0ace, 0x0ad3, 0x0ad7, 0x0ae3, - 0x0ae3, 0x0aed, 0x0af4, 0x0af9, 0x0afc, 0x0b00, 0x0b05, 0x0b05, - 0x0b05, 0x0b0e, 0x0b12, 0x0b18, 0x0b20, 0x0b27, 0x0b2f, 0x0b34, - 0x0b38, 0x0b3e, 0x0b44, 0x0b49, 0x0b4d, 0x0b55, 0x0b65, 0x0b73, - 0x0b7a, 0x0b80, 0x0b8b, 0x0b97, 0x0b9f, 0x0ba5, 0x0baa, 0x0baa, - 0x0bb1, 0x0bc0, 0x0bc5, 0x0bcf, 0x0bd6, 0x0bd6, 0x0bdb, 0x0be0, - 0x0beb, 0x0bfb, 0x0c06, 0x0c0a, 0x0c18, 0x0c1e, 0x0c22, 0x0c2a, - 0x0c2a, 0x0c30, 0x0c39, 0x0c3e, 0x0c4c, 0x0c4c, 0x0c52, 0x0c5f, + 0x0ad2, 0x0ad2, 0x0ad2, 0x0ad2, 0x0ad8, 0x0ad8, 0x0add, 0x0af1, + 0x0af5, 0x0b01, 0x0b01, 0x0b0b, 0x0b12, 0x0b17, 0x0b1a, 0x0b1e, + 0x0b23, 0x0b23, 0x0b23, 0x0b2c, 0x0b30, 0x0b36, 0x0b3e, 0x0b45, + 0x0b4d, 0x0b52, 0x0b56, 0x0b5c, 0x0b62, 0x0b67, 0x0b6b, 0x0b73, + 0x0b83, 0x0b91, 0x0b98, 0x0b9e, 0x0ba9, 0x0bb5, 0x0bbd, 0x0bc3, + 0x0bc8, 0x0bc8, 0x0bcf, 0x0bde, 0x0be3, 0x0bed, 0x0bf4, 0x0bf4, + 0x0bf9, 0x0bfe, 0x0c09, 0x0c19, 0x0c24, 0x0c28, 0x0c36, 0x0c3c, + 0x0c40, 0x0c48, 0x0c48, 0x0c4e, 0x0c57, 0x0c5c, 0x0c6a, 0x0c6a, // Entry 1C0 - 1FF - 0x0c63, 0x0c72, 0x0c7a, 0x0c82, 0x0c87, 0x0c8c, 0x0c91, 0x0ca0, - 0x0caa, 0x0cb1, 0x0cb9, 0x0cc3, 0x0ccc, 0x0ccc, 0x0cdb, 0x0cdb, - 0x0cdb, 0x0ce9, 0x0ce9, 0x0cf3, 0x0cf3, 0x0cf3, 0x0cfe, 0x0d06, - 0x0d17, 0x0d1e, 0x0d1e, 0x0d28, 0x0d2f, 0x0d39, 0x0d39, 0x0d39, - 0x0d3e, 0x0d44, 0x0d44, 0x0d44, 0x0d44, 0x0d4d, 0x0d50, 0x0d57, - 0x0d5c, 0x0d72, 0x0d79, 0x0d7e, 0x0d85, 0x0d85, 0x0d8c, 0x0d91, - 0x0d9b, 0x0da0, 0x0da0, 0x0dad, 0x0db3, 0x0db7, 0x0db7, 0x0dbd, - 0x0dcc, 0x0ddc, 0x0ddc, 0x0de5, 0x0de9, 0x0df9, 0x0dff, 0x0dff, + 0x0c70, 0x0c7d, 0x0c81, 0x0c90, 0x0c98, 0x0ca0, 0x0ca5, 0x0caa, + 0x0caf, 0x0cbe, 0x0cc8, 0x0ccf, 0x0cd7, 0x0ce1, 0x0cea, 0x0cea, + 0x0cf9, 0x0cf9, 0x0cf9, 0x0d07, 0x0d07, 0x0d11, 0x0d11, 0x0d11, + 0x0d1c, 0x0d24, 0x0d35, 0x0d3c, 0x0d3c, 0x0d46, 0x0d4d, 0x0d57, + 0x0d57, 0x0d57, 0x0d5c, 0x0d62, 0x0d62, 0x0d62, 0x0d62, 0x0d6b, + 0x0d6e, 0x0d75, 0x0d7a, 0x0d90, 0x0d97, 0x0d9c, 0x0da3, 0x0da3, + 0x0daa, 0x0daf, 0x0db9, 0x0dbe, 0x0dbe, 0x0dcb, 0x0dd1, 0x0dd5, + 0x0dd5, 0x0ddb, 0x0dea, 0x0dfa, 0x0dfa, 0x0e03, 0x0e07, 0x0e17, // Entry 200 - 23F - 0x0dff, 0x0e0a, 0x0e13, 0x0e1d, 0x0e27, 0x0e2e, 0x0e35, 0x0e41, - 0x0e46, 0x0e4a, 0x0e4a, 0x0e50, 0x0e54, 0x0e5e, 0x0e67, 0x0e78, - 0x0e80, 0x0e80, 0x0e80, 0x0e85, 0x0e89, 0x0e8f, 0x0e94, 0x0e99, - 0x0e9c, 0x0ea3, 0x0ea3, 0x0eaf, 0x0eb6, 0x0eb6, 0x0ebe, 0x0ec9, - 0x0ed2, 0x0ed2, 0x0ed8, 0x0ed8, 0x0ee1, 0x0ee1, 0x0ee8, 0x0eee, - 0x0ef5, 0x0efc, 0x0f17, 0x0f1d, 0x0f27, 0x0f2e, 0x0f32, 0x0f35, - 0x0f35, 0x0f35, 0x0f35, 0x0f35, 0x0f3c, 0x0f3c, 0x0f41, 0x0f47, - 0x0f4e, 0x0f53, 0x0f58, 0x0f60, 0x0f6b, 0x0f73, 0x0f73, 0x0f77, + 0x0e1d, 0x0e1d, 0x0e1d, 0x0e28, 0x0e31, 0x0e3b, 0x0e45, 0x0e4c, + 0x0e53, 0x0e5f, 0x0e64, 0x0e68, 0x0e68, 0x0e6e, 0x0e72, 0x0e7c, + 0x0e85, 0x0e96, 0x0e9e, 0x0e9e, 0x0e9e, 0x0ea3, 0x0ea7, 0x0ead, + 0x0eb2, 0x0eb7, 0x0eba, 0x0ec1, 0x0ec1, 0x0ecd, 0x0ed4, 0x0ed4, + 0x0edc, 0x0ee7, 0x0ef0, 0x0ef0, 0x0ef6, 0x0ef6, 0x0eff, 0x0eff, + 0x0f06, 0x0f0c, 0x0f13, 0x0f1a, 0x0f35, 0x0f3b, 0x0f45, 0x0f4c, + 0x0f5f, 0x0f62, 0x0f62, 0x0f62, 0x0f62, 0x0f62, 0x0f69, 0x0f69, + 0x0f6e, 0x0f74, 0x0f7b, 0x0f80, 0x0f85, 0x0f8d, 0x0f98, 0x0fa0, // Entry 240 - 27F - 0x0f7a, 0x0f81, 0x0f88, 0x0f8d, 0x0f8d, 0x0f97, 0x0fa0, 0x0faf, - 0x0faf, 0x0fb5, 0x0fd1, 0x0fd5, 0x0fef, 0x0ff3, 0x100b, 0x100b, - 0x100b, 0x1027, 0x1027, 0x1027, 0x1027, 0x1027, 0x1027, 0x1027, - 0x1027, 0x1027, 0x1027, 0x1027, 0x1034, 0x103d, 0x103d, 0x103d, - 0x104b, 0x1059, 0x106d, 0x106d, 0x1084, -} // Size: 1250 bytes - -const ruLangStr string = "" + // Size: 9389 bytes + 0x0fa0, 0x0fa4, 0x0fa7, 0x0fae, 0x0fb5, 0x0fba, 0x0fba, 0x0fc4, + 0x0fcd, 0x0fdc, 0x0fdc, 0x0fe2, 0x0ffe, 0x1002, 0x101c, 0x1020, + 0x1038, 0x1038, 0x1038, 0x1054, 0x1054, 0x1054, 0x1054, 0x1054, + 0x1054, 0x1054, 0x1054, 0x1054, 0x1054, 0x1054, 0x1061, 0x106a, + 0x106a, 0x106a, 0x106a, 0x1078, 0x108c, 0x108c, 0x10a3, +} // Size: 1254 bytes + +const ruLangStr string = "" + // Size: 9488 bytes "афарскийабхазскийавестийскийафрикаансаканамхарскийарагонскийарабскийасса" + "мскийаварскийаймараазербайджанскийбашкирскийбелорусскийболгарскийбислам" + "абамбарабенгальскийтибетскийбретонскийбоснийскийкаталанскийчеченскийчам" + "оррокорсиканскийкричешскийцерковнославянскийчувашскийваллийскийдатскийн" + "емецкиймальдивскийдзонг-кээвегреческийанглийскийэсперантоиспанскийэстон" + - "скийбаскскийперсидскийфулахфинскийфиджифарерскийфранцузскийзападный фри" + - "зскийирландскийгэльскийгалисийскийгуаранигуджаратимэнскийхаусаивритхинд" + - "ихиримотухорватскийгаитянскийвенгерскийармянскийгерероинтерлингваиндоне" + - "зийскийинтерлингвеигбоносуинупиакидоисландскийитальянскийинуктитутяпонс" + - "кийяванскийгрузинскийконгокикуйюкунамаказахскийгренландскийкхмерскийкан" + - "надакорейскийканурикашмирикурдскийкомикорнскийкиргизскийлатинскийлюксем" + - "бургскийгандалимбургскийлингалалаосскийлитовскийлуба-катангалатышскийма" + - "лагасийскиймаршалльскиймаоримакедонскиймалаяламмонгольскиймаратхималайс" + - "киймальтийскийбирманскийнаурусеверный ндебеленепальскийндонганидерландс" + - "кийнюнорскнорвежский букмолюжный ндебеленавахоньянджаокситанскийоджибва" + - "оромоорияосетинскийпанджабипалипольскийпуштупортугальскийкечуароманшски" + - "йрундирумынскийрусскийкиньяруандасанскритсардинскийсиндхисеверносаамски" + - "йсангосингальскийсловацкийсловенскийсамоанскийшонасомалиалбанскийсербск" + - "ийсвазиюжный сотосунданскийшведскийсуахилитамильскийтелугутаджикскийтай" + - "скийтигриньятуркменскийтсванатонганскийтурецкийтсонгататарскийтаитянски" + - "йуйгурскийукраинскийурдуузбекскийвендавьетнамскийволапюкваллонскийволоф" + - "косаидишйорубачжуанькитайскийзулуачехскийачолиадангмеадыгейскийафрихили" + - "агхемайнуаккадскийалеутскийюжноалтайскийстароанглийскийангикаарамейский" + + "скийбаскскийперсидскийфулахфинскийфиджифарерскийфранцузскийзападнофризс" + + "кийирландскийгэльскийгалисийскийгуаранигуджаратимэнскийхаусаивритхиндих" + + "иримотухорватскийгаитянскийвенгерскийармянскийгерероинтерлингваиндонези" + + "йскийинтерлингвеигбоносуинупиакидоисландскийитальянскийинуктитутяпонски" + + "йяванскийгрузинскийконгокикуйюкунамаказахскийгренландскийкхмерскийканна" + + "дакорейскийканурикашмирикурдскийкомикорнскийкиргизскийлатинскийлюксембу" + + "ргскийгандалимбургскийлингалалаосскийлитовскийлуба-катангалатышскиймала" + + "гасийскиймаршалльскиймаоримакедонскиймалаяламмонгольскиймаратхималайски" + + "ймальтийскийбирманскийнаурусеверный ндебеленепальскийндонганидерландски" + + "йнюнорскнорвежский букмолюжный ндебеленавахоньянджаокситанскийоджибваор" + + "омоорияосетинскийпанджабипалипольскийпуштупортугальскийкечуароманшскийр" + + "ундирумынскийрусскийкиньяруандасанскритсардинскийсиндхисеверносаамскийс" + + "ангосингальскийсловацкийсловенскийсамоанскийшонасомалиалбанскийсербский" + + "свазиюжный сотосунданскийшведскийсуахилитамильскийтелугутаджикскийтайск" + + "ийтигриньятуркменскийтсванатонганскийтурецкийтсонгататарскийтаитянскийу" + + "йгурскийукраинскийурдуузбекскийвендавьетнамскийволапюкваллонскийволофко" + + "саидишйорубачжуанькитайскийзулуачехскийачолиадангмеадыгейскийафрихилиаг" + + "емайнскийаккадскийалеутскийюжноалтайскийстароанглийскийангикаарамейский" + "мапучеарапахоаравакскийасуастурийскийавадхибелуджскийбалийскийбасабамум" + "гомалабеджабембабенабафутзападный белуджскийбходжпурибикольскийбиникомс" + "иксикабрауибодоакоосебурятскийбугийскийбулубилинмедумбакаддокарибкайюга" + - "атсамсебуанокигачибчачагатайскийчукотскиймарийскийчинук жаргончоктавчип" + - "евьянчерокичейеннсораникоптскийкрымско-татарскийсейшельский креольскийк" + - "ашубскийдакотадаргинскийтаитаделаварскийслейвидогрибдинкаджермадогриниж" + - "нелужицкийдуаласредненидерландскийдиола-фоньидиуладазаэмбуэфикдревнееги" + - "петскийэкаджукэламскийсреднеанглийскийэвондофангфилиппинскийфонсреднефр" + - "анцузскийстарофранцузскийсеверный фризскийвосточный фризскийфриульскийг" + - "агагаузскийганьгайогбаягеэзгильбертскийсредневерхненемецкийдревневерхне" + - "немецкийгондигоронталоготскийгребодревнегреческийшвейцарский немецкийгу" + - "сиигвичинхайдахаккагавайскийхилигайнонхеттскийхмонгверхнелужицкийсянхуп" + - "аибанскийибибиоилокоингушскийложбаннгомбамачамееврейско-персидскийеврей" + - "ско-арабскийкаракалпакскийкабильскийкачинскийкаджикамбакавикабардинский" + - "канембутьяпмакондекабувердьянукорокхасихотанскийкойра чииникакокаленджи" + - "нкимбундукоми-пермяцкийконканикосраенскийкпеллекарачаево-балкарскийкаре" + - "льскийкурухшамбалабафиякёльнскийкумыкскийкутенаиладиноланголахндаламбал" + - "езгинскийлакотамонголозисевернолурскийлуба-лулуалуисеньолундалуолушейлу" + - "хьямадурскиймафамагахимайтхилимакассарскиймандингомасаимабамокшанскийма" + - "ндарскиймендемерумаврикийский креольскийсреднеирландскиймакуа-мееттомет" + - "амикмакминангкабауманьчжурскийманипурскиймохаукмосимундангязыки разных " + - "семейкрикмирандскиймарваримиенеэрзянскиймазендеранскийминьнаньнеаполита" + - "нскийнаманижнегерманскийневарскийниасниуэквасионгиембундногайскийстарон" + - "орвежскийнкосеверный сотонуэрклассический невариньямвезиньянколеньоронз" + - "имаоседжистаротурецкийпангасинанпехлевийскийпампангапапьяментопалауниге" + - "рийско-креольскийстароперсидскийфиникийскийпонапепрусскийстаропровансал" + - "ьскийкичераджастханирапануйскийраротонгаромбоцыганскийарумынскийруандас" + - "андавеякутскийсамаритянский арамейскийсамбурусасакскийсанталингамбайски" + - "йсангусицилийскийшотландскийюжнокурдскийсенекасенаселькупскийкойраборо " + - "сеннистароирландскийташельхитшанскийчадский арабскийсидамаюжносаамскийл" + - "уле-саамскийинари-саамскийколтта-саамскийсонинкесогдийскийсранан-тонгос" + - "ерерсахосукумасусушумерскийкоморскийклассический сирийскийсирийскийтемн" + - "етесотеренотетумтигретивитокелайскийклингонскийтлингиттамашектонгаток-п" + - "исинтуройоседекскийцимшиантумбукатувалутасавактувинскийсреднеатласский " + - "тамазигхтскийудмуртскийугаритскийумбундукорневой языкваиводскийвунджова" + - "ллисскийволамоварайвашовальбиривукалмыцкийсогаяояпянгбенйембакантонский" + - "сапотекскийблиссимволиказенагскийтамазигхтскийзуньинет языкового матери" + - "алазазаарабский литературныйавстрийский немецкийлитературный швейцарски" + - "й немецкийавстралийский английскийканадский английскийбританский англий" + - "скийамериканский английскийлатиноамериканский испанскийевропейский испа" + - "нскиймексиканский испанскийканадский французскийшвейцарский французский" + - "нижнесаксонскийфламандскийбразильский португальскийевропейский португал" + - "ьскиймолдавскийсербскохорватскийконголезский суахиликитайский, упрощенн" + - "ое письмокитайский, традиционное письмо" - -var ruLangIdx = []uint16{ // 613 elements + "атсамсебуанокигачибчачагатайскийчукотскиймарийскийчинук жаргончоктавски" + + "йчипевьянчерокишайенскийсораникоптскийкрымско-татарскийсейшельский крео" + + "льскийкашубскийдакотадаргинскийтаитаделаварскийслейвидогрибдинкаджермад" + + "огринижнелужицкийдуаласредненидерландскийдиола-фоньидиуладазаэмбуэфикдр" + + "евнеегипетскийэкаджукэламскийсреднеанглийскийэвондофангфилиппинскийфонк" + + "аджунский французскийсреднефранцузскийстарофранцузскийсеверный фризский" + + "восточный фризскийфриульскийгагагаузскийганьгайогбаягеэзгильбертскийсре" + + "дневерхненемецкийдревневерхненемецкийгондигоронталоготскийгребодревнегр" + + "еческийшвейцарский немецкийгусиигвичинхайдахаккагавайскийхилигайнонхетт" + + "скийхмонгверхнелужицкийсянхупаибанскийибибиоилокоингушскийложбаннгомбам" + + "ачамееврейско-персидскийеврейско-арабскийкаракалпакскийкабильскийкачинс" + + "кийкаджикамбакавикабардинскийканембутьяпмакондекабувердьянукорокхасихот" + + "анскийкойра чииникакокаленджинкимбундукоми-пермяцкийконканикосраенскийк" + + "пеллекарачаево-балкарскийкарельскийкурухшамбалабафиякёльнскийкумыкскийк" + + "утенаиладиноланголахндаламбалезгинскийлакотамонголуизианский креольский" + + "лозисевернолурскийлуба-лулуалуисеньолундалуолушейлухьямадурскиймафамага" + + "химайтхилимакассарскиймандингомасаимабамокшанскиймандарскиймендемерумав" + + "рикийский креольскийсреднеирландскиймакуа-мееттометамикмакминангкабаума" + + "ньчжурскийманипурскиймохаукмосимундангязыки разных семейкрикмирандскийм" + + "арваримиенеэрзянскиймазендеранскийминьнаньнеаполитанскийнаманижнегерман" + + "скийневарскийниасниуэквасионгиембундногайскийстаронорвежскийнкосеверный" + + " сотонуэрклассический невариньямвезиньянколеньоронзимаоседжистаротурецки" + + "йпангасинанпехлевийскийпампангапапьяментопалаунигерийско-креольскийстар" + + "оперсидскийфиникийскийпонапепрусскийстаропровансальскийкичераджастханир" + + "апануйскийраротонгаромбоцыганскийарумынскийруандасандавесахасамаритянск" + + "ий арамейскийсамбурусасакскийсанталингамбайскийсангусицилийскийшотландс" + + "кийюжнокурдскийсенекасенаселькупскийкойраборо сеннистароирландскийташел" + + "ьхитшанскийчадский арабскийсидамаюжносаамскийлуле-саамскийинари-саамски" + + "йколтта-саамскийсонинкесогдийскийсранан-тонгосерерсахосукумасусушумерск" + + "ийкоморскийклассический сирийскийсирийскийтемнетесотеренотетумтигретиви" + + "токелайскийклингонскийтлингиттамашектонгаток-писинтуройоседекскийцимшиа" + + "нтумбукатувалутасавактувинскийсреднеатласский тамазигхтскийудмуртскийуг" + + "аритскийумбундунеизвестный языкваиводскийвунджоваллисскийволамоварайваш" + + "овальбиривукалмыцкийсогаяояпянгбенйембакантонскийсапотекскийблиссимволи" + + "казенагскийтамазигхтскийзуньинет языкового материалазазаарабский литера" + + "турныйавстрийский немецкийлитературный швейцарский немецкийавстралийски" + + "й английскийканадский английскийбританский английскийамериканский англи" + + "йскийлатиноамериканский испанскийевропейский испанскиймексиканский испа" + + "нскийканадский французскийшвейцарский французскийнижнесаксонскийфламанд" + + "скийбразильский португальскийевропейский португальскиймолдавскийсербско" + + "хорватскийконголезский суахиликитайский, упрощенное письмокитайский, тр" + + "адиционное письмо" + +var ruLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0010, 0x0022, 0x0038, 0x004a, 0x0052, 0x0064, 0x0078, 0x0088, 0x009a, 0x00aa, 0x00b6, 0x00d4, 0x00e8, 0x00fe, 0x0112, @@ -23381,229 +24759,229 @@ var ruLangIdx = []uint16{ // 613 elements 0x01b4, 0x01cc, 0x01d2, 0x01e0, 0x0204, 0x0216, 0x022a, 0x0238, 0x0248, 0x025e, 0x026d, 0x0273, 0x0285, 0x0299, 0x02ab, 0x02bd, 0x02cf, 0x02df, 0x02f3, 0x02fd, 0x030b, 0x0315, 0x0327, 0x033d, - 0x035e, 0x0372, 0x0382, 0x0398, 0x03a6, 0x03b8, 0x03c6, 0x03d0, - 0x03da, 0x03e4, 0x03f4, 0x0408, 0x041c, 0x0430, 0x0442, 0x044e, + 0x035b, 0x036f, 0x037f, 0x0395, 0x03a3, 0x03b5, 0x03c3, 0x03cd, + 0x03d7, 0x03e1, 0x03f1, 0x0405, 0x0419, 0x042d, 0x043f, 0x044b, // Entry 40 - 7F - 0x0464, 0x047e, 0x0494, 0x049c, 0x04a4, 0x04b2, 0x04b8, 0x04cc, - 0x04e2, 0x04f4, 0x0504, 0x0514, 0x0528, 0x0532, 0x053e, 0x054a, - 0x055c, 0x0574, 0x0586, 0x0594, 0x05a6, 0x05b2, 0x05c0, 0x05d0, - 0x05d8, 0x05e8, 0x05fc, 0x060e, 0x062a, 0x0634, 0x064a, 0x0658, - 0x0668, 0x067a, 0x0691, 0x06a3, 0x06bd, 0x06d5, 0x06df, 0x06f5, - 0x0705, 0x071b, 0x0729, 0x073b, 0x0751, 0x0765, 0x076f, 0x078e, - 0x07a2, 0x07ae, 0x07c8, 0x07d6, 0x07f7, 0x0810, 0x081c, 0x082a, - 0x0840, 0x084e, 0x0858, 0x0860, 0x0874, 0x0884, 0x088c, 0x089c, + 0x0461, 0x047b, 0x0491, 0x0499, 0x04a1, 0x04af, 0x04b5, 0x04c9, + 0x04df, 0x04f1, 0x0501, 0x0511, 0x0525, 0x052f, 0x053b, 0x0547, + 0x0559, 0x0571, 0x0583, 0x0591, 0x05a3, 0x05af, 0x05bd, 0x05cd, + 0x05d5, 0x05e5, 0x05f9, 0x060b, 0x0627, 0x0631, 0x0647, 0x0655, + 0x0665, 0x0677, 0x068e, 0x06a0, 0x06ba, 0x06d2, 0x06dc, 0x06f2, + 0x0702, 0x0718, 0x0726, 0x0738, 0x074e, 0x0762, 0x076c, 0x078b, + 0x079f, 0x07ab, 0x07c5, 0x07d3, 0x07f4, 0x080d, 0x0819, 0x0827, + 0x083d, 0x084b, 0x0855, 0x085d, 0x0871, 0x0881, 0x0889, 0x0899, // Entry 80 - BF - 0x08a6, 0x08c0, 0x08ca, 0x08de, 0x08e8, 0x08fa, 0x0908, 0x091e, - 0x092e, 0x0942, 0x094e, 0x096c, 0x0976, 0x098c, 0x099e, 0x09b2, - 0x09c6, 0x09ce, 0x09da, 0x09ec, 0x09fc, 0x0a06, 0x0a19, 0x0a2d, - 0x0a3d, 0x0a4b, 0x0a5f, 0x0a6b, 0x0a7f, 0x0a8d, 0x0a9d, 0x0ab3, - 0x0abf, 0x0ad3, 0x0ae3, 0x0aef, 0x0b01, 0x0b15, 0x0b27, 0x0b3b, - 0x0b43, 0x0b55, 0x0b5f, 0x0b75, 0x0b83, 0x0b97, 0x0ba1, 0x0ba9, - 0x0bb1, 0x0bbd, 0x0bc9, 0x0bdb, 0x0be3, 0x0bf3, 0x0bfd, 0x0c0b, - 0x0c1f, 0x0c1f, 0x0c2f, 0x0c39, 0x0c41, 0x0c53, 0x0c53, 0x0c65, + 0x08a3, 0x08bd, 0x08c7, 0x08db, 0x08e5, 0x08f7, 0x0905, 0x091b, + 0x092b, 0x093f, 0x094b, 0x0969, 0x0973, 0x0989, 0x099b, 0x09af, + 0x09c3, 0x09cb, 0x09d7, 0x09e9, 0x09f9, 0x0a03, 0x0a16, 0x0a2a, + 0x0a3a, 0x0a48, 0x0a5c, 0x0a68, 0x0a7c, 0x0a8a, 0x0a9a, 0x0ab0, + 0x0abc, 0x0ad0, 0x0ae0, 0x0aec, 0x0afe, 0x0b12, 0x0b24, 0x0b38, + 0x0b40, 0x0b52, 0x0b5c, 0x0b72, 0x0b80, 0x0b94, 0x0b9e, 0x0ba6, + 0x0bae, 0x0bba, 0x0bc6, 0x0bd8, 0x0be0, 0x0bf0, 0x0bfa, 0x0c08, + 0x0c1c, 0x0c1c, 0x0c2c, 0x0c34, 0x0c42, 0x0c54, 0x0c54, 0x0c66, // Entry C0 - FF - 0x0c65, 0x0c7f, 0x0c9d, 0x0ca9, 0x0cbd, 0x0cc9, 0x0cc9, 0x0cd7, - 0x0cd7, 0x0cd7, 0x0ceb, 0x0ceb, 0x0ceb, 0x0cf1, 0x0cf1, 0x0d07, - 0x0d07, 0x0d13, 0x0d27, 0x0d39, 0x0d39, 0x0d41, 0x0d4b, 0x0d4b, - 0x0d57, 0x0d61, 0x0d6b, 0x0d6b, 0x0d73, 0x0d7d, 0x0d7d, 0x0da2, - 0x0db4, 0x0dc8, 0x0dd0, 0x0dd0, 0x0dd6, 0x0de4, 0x0de4, 0x0de4, - 0x0dee, 0x0dee, 0x0df6, 0x0e02, 0x0e14, 0x0e26, 0x0e2e, 0x0e38, - 0x0e46, 0x0e50, 0x0e5a, 0x0e66, 0x0e70, 0x0e7e, 0x0e86, 0x0e90, - 0x0ea6, 0x0eb8, 0x0eca, 0x0ee1, 0x0eed, 0x0efd, 0x0f09, 0x0f15, + 0x0c66, 0x0c80, 0x0c9e, 0x0caa, 0x0cbe, 0x0cca, 0x0cca, 0x0cd8, + 0x0cd8, 0x0cd8, 0x0cec, 0x0cec, 0x0cec, 0x0cf2, 0x0cf2, 0x0d08, + 0x0d08, 0x0d14, 0x0d28, 0x0d3a, 0x0d3a, 0x0d42, 0x0d4c, 0x0d4c, + 0x0d58, 0x0d62, 0x0d6c, 0x0d6c, 0x0d74, 0x0d7e, 0x0d7e, 0x0da3, + 0x0db5, 0x0dc9, 0x0dd1, 0x0dd1, 0x0dd7, 0x0de5, 0x0de5, 0x0de5, + 0x0def, 0x0def, 0x0df7, 0x0e03, 0x0e15, 0x0e27, 0x0e2f, 0x0e39, + 0x0e47, 0x0e51, 0x0e5b, 0x0e67, 0x0e71, 0x0e71, 0x0e7f, 0x0e87, + 0x0e91, 0x0ea7, 0x0eb9, 0x0ecb, 0x0ee2, 0x0ef6, 0x0f06, 0x0f12, // Entry 100 - 13F - 0x0f21, 0x0f31, 0x0f31, 0x0f52, 0x0f7d, 0x0f8f, 0x0f9b, 0x0faf, - 0x0fb9, 0x0fcf, 0x0fdb, 0x0fe7, 0x0ff1, 0x0ffd, 0x1007, 0x1021, - 0x1021, 0x102b, 0x1051, 0x1066, 0x1070, 0x1078, 0x1080, 0x1088, - 0x1088, 0x10a8, 0x10b6, 0x10c6, 0x10e6, 0x10e6, 0x10f2, 0x10f2, - 0x10fa, 0x1112, 0x1112, 0x1118, 0x1118, 0x113a, 0x115a, 0x115a, - 0x117b, 0x119e, 0x11b2, 0x11b6, 0x11ca, 0x11d2, 0x11da, 0x11e2, - 0x11e2, 0x11ea, 0x1202, 0x1202, 0x122a, 0x1252, 0x1252, 0x125c, - 0x126e, 0x127c, 0x1286, 0x12a4, 0x12cb, 0x12cb, 0x12cb, 0x12d5, + 0x0f24, 0x0f30, 0x0f40, 0x0f40, 0x0f61, 0x0f8c, 0x0f9e, 0x0faa, + 0x0fbe, 0x0fc8, 0x0fde, 0x0fea, 0x0ff6, 0x1000, 0x100c, 0x1016, + 0x1030, 0x1030, 0x103a, 0x1060, 0x1075, 0x107f, 0x1087, 0x108f, + 0x1097, 0x1097, 0x10b7, 0x10c5, 0x10d5, 0x10f5, 0x10f5, 0x1101, + 0x1101, 0x1109, 0x1121, 0x1121, 0x1127, 0x1152, 0x1174, 0x1194, + 0x1194, 0x11b5, 0x11d8, 0x11ec, 0x11f0, 0x1204, 0x120c, 0x1214, + 0x121c, 0x121c, 0x1224, 0x123c, 0x123c, 0x1264, 0x128c, 0x128c, + 0x1296, 0x12a8, 0x12b6, 0x12c0, 0x12de, 0x1305, 0x1305, 0x1305, // Entry 140 - 17F - 0x12e1, 0x12eb, 0x12f5, 0x1307, 0x1307, 0x131b, 0x132b, 0x1335, - 0x1351, 0x1357, 0x135f, 0x136f, 0x137b, 0x1385, 0x1397, 0x1397, - 0x1397, 0x13a3, 0x13af, 0x13bb, 0x13e0, 0x1401, 0x1401, 0x141d, - 0x1431, 0x1443, 0x144d, 0x1457, 0x145f, 0x1477, 0x1485, 0x148d, - 0x149b, 0x14b3, 0x14b3, 0x14bb, 0x14bb, 0x14c5, 0x14d7, 0x14ec, - 0x14ec, 0x14ec, 0x14f4, 0x1506, 0x1516, 0x1531, 0x153f, 0x1555, - 0x1561, 0x1588, 0x1588, 0x1588, 0x159c, 0x15a6, 0x15b4, 0x15be, - 0x15d0, 0x15e2, 0x15f0, 0x15fc, 0x1606, 0x1612, 0x161c, 0x1630, + 0x130f, 0x131b, 0x1325, 0x132f, 0x1341, 0x1341, 0x1355, 0x1365, + 0x136f, 0x138b, 0x1391, 0x1399, 0x13a9, 0x13b5, 0x13bf, 0x13d1, + 0x13d1, 0x13d1, 0x13dd, 0x13e9, 0x13f5, 0x141a, 0x143b, 0x143b, + 0x1457, 0x146b, 0x147d, 0x1487, 0x1491, 0x1499, 0x14b1, 0x14bf, + 0x14c7, 0x14d5, 0x14ed, 0x14ed, 0x14f5, 0x14f5, 0x14ff, 0x1511, + 0x1526, 0x1526, 0x1526, 0x152e, 0x1540, 0x1550, 0x156b, 0x1579, + 0x158f, 0x159b, 0x15c2, 0x15c2, 0x15c2, 0x15d6, 0x15e0, 0x15ee, + 0x15f8, 0x160a, 0x161c, 0x162a, 0x1636, 0x1640, 0x164c, 0x1656, // Entry 180 - 1BF - 0x1630, 0x1630, 0x1630, 0x163c, 0x163c, 0x1646, 0x164e, 0x166a, - 0x166a, 0x167d, 0x168d, 0x1697, 0x169d, 0x16a7, 0x16b1, 0x16b1, - 0x16b1, 0x16c3, 0x16cb, 0x16d7, 0x16e7, 0x16ff, 0x170f, 0x1719, - 0x1721, 0x1735, 0x1749, 0x1753, 0x175b, 0x1788, 0x17a8, 0x17bf, - 0x17c7, 0x17d3, 0x17e9, 0x1801, 0x1817, 0x1823, 0x182b, 0x182b, - 0x1839, 0x185b, 0x1863, 0x1877, 0x1885, 0x1885, 0x188f, 0x18a1, - 0x18bd, 0x18cd, 0x18e9, 0x18f1, 0x190f, 0x1921, 0x1929, 0x1931, - 0x1931, 0x193d, 0x194f, 0x1961, 0x197f, 0x197f, 0x1985, 0x199e, + 0x166a, 0x166a, 0x166a, 0x166a, 0x1676, 0x1676, 0x1680, 0x16ab, + 0x16b3, 0x16cf, 0x16cf, 0x16e2, 0x16f2, 0x16fc, 0x1702, 0x170c, + 0x1716, 0x1716, 0x1716, 0x1728, 0x1730, 0x173c, 0x174c, 0x1764, + 0x1774, 0x177e, 0x1786, 0x179a, 0x17ae, 0x17b8, 0x17c0, 0x17ed, + 0x180d, 0x1824, 0x182c, 0x1838, 0x184e, 0x1866, 0x187c, 0x1888, + 0x1890, 0x1890, 0x189e, 0x18c0, 0x18c8, 0x18dc, 0x18ea, 0x18ea, + 0x18f4, 0x1906, 0x1922, 0x1932, 0x194e, 0x1956, 0x1974, 0x1986, + 0x198e, 0x1996, 0x1996, 0x19a2, 0x19b4, 0x19c6, 0x19e4, 0x19e4, // Entry 1C0 - 1FF - 0x19a6, 0x19cb, 0x19db, 0x19eb, 0x19f5, 0x19ff, 0x1a0b, 0x1a25, - 0x1a39, 0x1a51, 0x1a61, 0x1a75, 0x1a7f, 0x1a7f, 0x1aa8, 0x1aa8, - 0x1aa8, 0x1ac6, 0x1ac6, 0x1adc, 0x1adc, 0x1adc, 0x1ae8, 0x1af8, - 0x1b1e, 0x1b26, 0x1b26, 0x1b3c, 0x1b52, 0x1b64, 0x1b64, 0x1b64, - 0x1b6e, 0x1b80, 0x1b80, 0x1b80, 0x1b80, 0x1b94, 0x1ba0, 0x1bae, - 0x1bbe, 0x1bed, 0x1bfb, 0x1c0d, 0x1c1b, 0x1c1b, 0x1c31, 0x1c3b, - 0x1c51, 0x1c67, 0x1c67, 0x1c7f, 0x1c8b, 0x1c93, 0x1c93, 0x1ca9, - 0x1cc6, 0x1ce4, 0x1ce4, 0x1cf6, 0x1d04, 0x1d23, 0x1d2f, 0x1d2f, + 0x19ea, 0x1a03, 0x1a0b, 0x1a30, 0x1a40, 0x1a50, 0x1a5a, 0x1a64, + 0x1a70, 0x1a8a, 0x1a9e, 0x1ab6, 0x1ac6, 0x1ada, 0x1ae4, 0x1ae4, + 0x1b0d, 0x1b0d, 0x1b0d, 0x1b2b, 0x1b2b, 0x1b41, 0x1b41, 0x1b41, + 0x1b4d, 0x1b5d, 0x1b83, 0x1b8b, 0x1b8b, 0x1ba1, 0x1bb7, 0x1bc9, + 0x1bc9, 0x1bc9, 0x1bd3, 0x1be5, 0x1be5, 0x1be5, 0x1be5, 0x1bf9, + 0x1c05, 0x1c13, 0x1c1b, 0x1c4a, 0x1c58, 0x1c6a, 0x1c78, 0x1c78, + 0x1c8e, 0x1c98, 0x1cae, 0x1cc4, 0x1cc4, 0x1cdc, 0x1ce8, 0x1cf0, + 0x1cf0, 0x1d06, 0x1d23, 0x1d41, 0x1d41, 0x1d53, 0x1d61, 0x1d80, // Entry 200 - 23F - 0x1d2f, 0x1d47, 0x1d60, 0x1d7b, 0x1d98, 0x1da6, 0x1dba, 0x1dd1, - 0x1ddb, 0x1de3, 0x1de3, 0x1def, 0x1df7, 0x1e09, 0x1e1b, 0x1e46, - 0x1e58, 0x1e58, 0x1e58, 0x1e62, 0x1e6a, 0x1e76, 0x1e80, 0x1e8a, - 0x1e92, 0x1ea8, 0x1ea8, 0x1ebe, 0x1ecc, 0x1ecc, 0x1eda, 0x1ee4, - 0x1ef5, 0x1f01, 0x1f13, 0x1f13, 0x1f21, 0x1f21, 0x1f2f, 0x1f3b, - 0x1f49, 0x1f5b, 0x1f94, 0x1fa8, 0x1fbc, 0x1fca, 0x1fe3, 0x1fe9, - 0x1fe9, 0x1fe9, 0x1fe9, 0x1fe9, 0x1ff7, 0x1ff7, 0x2003, 0x2017, - 0x2023, 0x202d, 0x2035, 0x2045, 0x2049, 0x205b, 0x205b, 0x2063, + 0x1d8c, 0x1d8c, 0x1d8c, 0x1da4, 0x1dbd, 0x1dd8, 0x1df5, 0x1e03, + 0x1e17, 0x1e2e, 0x1e38, 0x1e40, 0x1e40, 0x1e4c, 0x1e54, 0x1e66, + 0x1e78, 0x1ea3, 0x1eb5, 0x1eb5, 0x1eb5, 0x1ebf, 0x1ec7, 0x1ed3, + 0x1edd, 0x1ee7, 0x1eef, 0x1f05, 0x1f05, 0x1f1b, 0x1f29, 0x1f29, + 0x1f37, 0x1f41, 0x1f52, 0x1f5e, 0x1f70, 0x1f70, 0x1f7e, 0x1f7e, + 0x1f8c, 0x1f98, 0x1fa6, 0x1fb8, 0x1ff1, 0x2005, 0x2019, 0x2027, + 0x2046, 0x204c, 0x204c, 0x204c, 0x204c, 0x204c, 0x205a, 0x205a, + 0x2066, 0x207a, 0x2086, 0x2090, 0x2098, 0x20a8, 0x20ac, 0x20be, // Entry 240 - 27F - 0x2067, 0x206b, 0x2077, 0x2081, 0x2081, 0x2095, 0x20ab, 0x20c5, - 0x20c5, 0x20d7, 0x20f1, 0x20fb, 0x2127, 0x212f, 0x2158, 0x2158, - 0x217f, 0x21bf, 0x21ee, 0x2215, 0x223e, 0x226b, 0x22a2, 0x22cb, - 0x22f6, 0x22f6, 0x231f, 0x234c, 0x236a, 0x2380, 0x23b1, 0x23e2, - 0x23f6, 0x2418, 0x243f, 0x2474, 0x24ad, -} // Size: 1250 bytes - -const siLangStr string = "" + // Size: 9440 bytes - "අෆාර්ඇබ්කාසියානුඅප්\u200dරිකානුඅකාන්ඇම්හාරික්ඇරගොනීස්අරාබිඇසමියානුඇවරික්" + - "අයිමරාඅසර්බයිජාන්බාෂ්කිර්බෙලරුසියානුබල්ගේරියානුබිස්ලමාබම්බරාබෙංගාලිටිබ" + - "ෙට්බ්\u200dරේටොන්බොස්නියානුකැටලන්චෙච්නියානුචමොරොක්\u200dරොඑශියානුචෙත්ච" + - "ර්ච් ස්ලැවික්චවේෂ්වේල්ස්ඩැනිශ්ජර්මන්දිවෙහිඩිසොන්කාඉව්ග්\u200dරීකඉංග්" + - "\u200dරීසිඑස්පැරන්ටෝස්පාඤ්ඤඑස්තෝනියානුබොස්කෝපර්සියානුෆුලාහ්ෆින්ලන්තෆීජිෆ" + - "ාරෝස්ප්\u200dරංශබටහිර ෆ්\u200dරිසියානුඅයර්ලන්තස්කොට්ටිශ් ගෙලික්ගැලීසිය" + - "ානුගුවාරනිගුජරාටිමැන්ක්ස්හෝසාහීබෲහින්දික්\u200dරෝයේශියානුහයිටිහන්ගේරිය" + - "ානුආර්මේනියානුහෙරෙරොඉන්ටලින්ගුආඉන්දුනීසියානුඉග්බෝසිචුආන් යීඉඩොඅයිස්ලන්" + - "තඉතාලිඉනුක්ටිටුට්ජපන්ජාවාජෝර්ජියානුකිකුයුකුයන්යමාකසාඛ්කලාලිසට්කමර්කණ්ණ" + - "ඩකොරියානුකනුරිකාෂ්මීර්කුර්දිකොමිකෝනීසියානුකිර්ගිස්ලතින්ලක්සැම්බර්ග්ගන්" + - "ඩාලිම්බර්ගිශ්ලින්ගලාලාඕලිතුවේනියානුලුලැට්වියානුමලගාසිමාශලීස්මාවොරිමැසි" + - "ඩෝනියානුමලයාලම්මොංගෝලියානුමරාතිමැලේමොල්ටිස්බුරුමනෞරුඋතුරු එන්ඩිබෙලෙනේප" + - "ාලන්ඩොන්ගාලන්දේසිනොවේර්ජියානු නයිනෝර්ස්ක්නෝවේජියානු බොක්මාල්සෞත් ඩ්බේල" + - "්නවාජොන්යන්ජාඔසිටාන්ඔරොමෝඔරියාඔසිටෙක්පන්ජාබිපෝලන්තපෂ්ටොපෘතුගීසික්වීචුව" + - "ාරොමෑන්ශ්රුන්ඩිරොමේනියානුරුසියානුකින්යර්වන්ඩාසංස්කෘතසාර්ඩිනිඅන්සින්ධිඋ" + - "තුරු සාමිසන්ග්\u200dරෝසිංහලස්ලෝවැක්ස්ලෝවේනියානුසෑමොඅන්ශෝනාසෝමාලිඇල්බේන" + - "ියානුසර්බියානුස්වතිසතර්න් සොතොසන්ඩනීසියානුස්වීඩන්ස්වාහිලිදෙමළතෙළිඟුටජි" + - "ක්තායිටිග්\u200dරින්යාටර්ක්මෙන්ස්වනාටොංගාතුර්කිසොන්ගටාටර්ටහිටියන්උයිගර" + - "්යුක්රේනියානුඋර්දුඋස්බෙක්වෙන්ඩාවියට්නාම්වොලපූක්වෑලූන්වොලොෆ්ශෝසායිඩිශ්ය" + - "ොරූබාචීනසුලුඅචයිනිස්අඩන්ග්මෙඅඩිඝෙටියුනිසියනු අරාබිඇගම්අයිනුඇලුඑට්සතර්න" + - "් අල්ටය්අන්ගිකමපුචෙඇරපහොඅසුඇස්ටියුරියන්අවදිබැලිනීස්බසාබෙම්බාබෙනාබටහිර " + - "බලොචිබොජ්පුරිබිනිසික්සිකාබොඩොබුගිනීස්බ්ලින්සෙබුඅනොචිගාචූකීස්මරිචොක්ටොව" + - "්චෙරොකීචෙයෙන්නෙසොරානි කුර්දිෂ්සෙසෙල්ව ක්\u200dරොල් ෆ්\u200dරෙන්ච්ඩකොටා" + - "ඩාර්ග්වාටයිටාඩොග්\u200dරිබ්සර්මාපහළ සෝබියානුඩුආලාජොල-ෆෝනියිඩසාගාඑම්බුඑ" + - "ෆික්එකජුක්එවොන්ඩොපිලිපීනෆොන්ෆ්\u200dරියුලියන්ගාගගාස්ගැන් චයිනිස්ගීස්ගි" + - "ල්බර්ටීස්ගොරොන්ටාලොස්විස් ජර්මානුගුසීග්විචින්හකා චයිනිස්හවායිහිලිගෙනන්" + - "මොන්ග්ඉහළ සෝබියානුසියැන් චීනහුපාඉබන්ඉබිබියොඉලොකොඉන්ගුෂ්ලොජ්බන්නොම්බාමැ" + - "කාමීකැබලාකචින්ජ්ජුකැම්බාකබාර්ඩියන්ට්යප්මැකොන්ඩ්කබුවෙර්ඩියානෝකොරොඛසිකොය" + - "ිරා චිනිකකොකලෙන්ජන්කිම්බුන්ඩුකොමි-පර්මියාක්කොන්කනික්පෙලෙකරන්චි-බාකර්කැ" + - "රෙලියන්කුරුඛ්ශාම්බලාබාෆියාකොලොග්නියන්කුමික්ලඩිනොලංගිලෙස්ගියන්ලකොටලොසිඋ" + - "තුරු ලුරිලුබ-ලුලුඅලුන්ඩලුඔමිසොලුයියාමදුරීස්මඝහිමයිතිලිමකාසාර්මසායිමොක්" + - "ශාමෙන්ඩෙමෙරුමොරිස්යෙම්මඛුවා-මීටෝමෙටාමික්මැක්මිනන්ග්කබාවුමනිපුරිමොහොව්ක" + - "්මොස්සිමුන්ඩන්බහු භාෂාක්\u200dරීක්මිරන්ඩීස්එර්ස්යාමැසන්ඩරනිමින් නන් චය" + - "ිනිස්නියාපොලිටන්නාමාපහළ ජර්මන්නෙවාරිනියාස්නියුඑන්කුවාසිඔන්ගියාම්බූන්නො" + - "ගායිඑන්‘කෝනොදර්න් සොතොනොයර්නයන්කොළේපන්ගසීනන්පන්පන්ගපපියමෙන්ටොපලවුවන්නෛ" + - "ජීරියන් පෙන්ගින්පෘශියන්කියිචේරපනුයිරරොටොන්ගන්රෝම්බෝඇරොමෙන්යන්ර්වාසන්ඩව" + - "ෙසඛාසම්බුරුසෑන්ටලින්ගම්බෙසංගුසිසිලියන්ස්කොට්ස්දකුණු කුර්දිසෙනාකෝයිරාබො" + - "රො සෙන්නිටචේල්හිට්ශාන්දකුණු සාමිලුලේ සාමිඉනාරි සාමිස්කොල්ට් සාමිසොනින්" + - "කෙස්\u200dරන් ටොන්ගොසහොසුකුමාකොමොරියන්ස්\u200dරයෑක්ටිම්නෙටෙසෝටේටම්ටීග්" + - "\u200dරෙක්ලින්ගොන්ටොක් පිසින්ටරොකොටුම්බුකාටුවාලුටසවාක්ටුවිනියන්මධ්\u200d" + - "යම ඇට්ලස් ටමසිට්අඩ්මර්ට්උබුන්ඩුරූට්වයිවුන්ජෝවොල්සර්වොලෙට්ටවොරෙය්වොපිරි" + - "වූ චයිනිස්කල්මික්සොගායන්ග්බෙන්යෙම්බාකැන්ටොනීස්සම්මත මොරොක්කෝ ටමසිග්ත්ස" + - "ුනිවාග් විද්\u200dයා අන්තර්ගතයක් නැතසාසානවීන සම්මත අරාබිඔස්ට්\u200dරිය" + - "ානු ජර්මන්ස්විස් උසස් ජර්මන්ඕස්ට්\u200dරේලියානු ඉංග්\u200dරීසිකැනේඩියා" + - "නු ඉංග්\u200dරීසිබ්\u200dරිතාන්\u200dය ඉංග්\u200dරීසිඇමෙරිකානු ඉංග්" + - "\u200dරීසිලතින් ඇමරිකානු ස්පාඤ්ඤයුරෝපීය ස්පාඤ්ඤමෙක්සිකානු ස්පාඤ්ඤකැනේඩිය" + - "ානු ප්\u200dරංශස්විස් ප්\u200dරංශපහළ සැක්සන්ෆ්ලෙමිශ්බ්\u200dරසීල පෘතුග" + - "ීසියුරෝපීය පෘතුගීසිමොල්ඩවිආනුසුළුකළ චීනසාම්ප්\u200dරදායික චීන" - -var siLangIdx = []uint16{ // 613 elements + 0x20be, 0x20c6, 0x20ca, 0x20ce, 0x20da, 0x20e4, 0x20e4, 0x20f8, + 0x210e, 0x2128, 0x2128, 0x213a, 0x2154, 0x215e, 0x218a, 0x2192, + 0x21bb, 0x21bb, 0x21e2, 0x2222, 0x2251, 0x2278, 0x22a1, 0x22ce, + 0x2305, 0x232e, 0x2359, 0x2359, 0x2382, 0x23af, 0x23cd, 0x23e3, + 0x2414, 0x2445, 0x2459, 0x247b, 0x24a2, 0x24d7, 0x2510, +} // Size: 1254 bytes + +const siLangStr string = "" + // Size: 9500 bytes + "අෆාර්ඇබ්කාසියානුඅෆ්රිකාන්ස්අකාන්ඇම්හාරික්ඇරගොනීස්අරාබිඇසෑම්ඇවරික්අයිමරාඅ" + + "සර්බයිජාන්බාෂ්කිර්බෙලරුසියානුබල්ගේරියානුබිස්ලමාබම්බරාබෙංගාලිටිබෙට්බ්" + + "\u200dරේටොන්බොස්නියානුකැටලන්චෙච්නියානුචමොරොකෝසිකානුචෙක්චර්ච් ස්ලැවික්චවේ" + + "ෂ්වෙල්ෂ්ඩැනිශ්ජර්මන්ඩිවෙහිඩිසොන්කාඉව්ග්\u200dරීකඉංග්\u200dරීසිඑස්පැරන්" + + "ටෝස්පාඤ්ඤඑස්තෝනියානුබාස්ක්පර්සියානුෆුලාහ්ෆින්ලන්තෆීජිෆාරෝස්ප්\u200dරංශ" + + "බටහිර ෆ්\u200dරිසියානුඅයර්ලන්තස්කොට්ටිශ් ගෙලික්ගැලීසියානුගුවාරනිගුජරාට" + + "ිමැන්ක්ස්හෝසාහීබෲහින්දිකෝඒෂියානුහයිටිහන්ගේරියානුආර්මේනියානුහෙරෙරොඉන්ටල" + + "ින්ගුආඉන්දුනීසියානුඉග්බෝසිචුආන් යීඉඩොඅයිස්ලන්තඉතාලිඉනුක්ටිටුට්ජපන්ජාවා" + + "ජෝර්ජියානුකිකුයුකුයන්යමාකසාඛ්කලාලිසට්කමර්කණ්ණඩකොරියානුකනුරිකාෂ්මීර්කුර" + + "්දිකොමිකෝනීසියානුකිර්ගිස්ලතින්ලක්සැම්බර්ග්ගන්ඩාලිම්බර්ගිශ්ලින්ගලාලාඕලි" + + "තුවේනියානුලුබා-කටන්ගාලැට්වියානුමලගාසිමාශලීස්මාවොරිමැසිඩෝනියානුමලයාලම්ම" + + "ොංගෝලියානුමරාතිමැලේමොල්ටිස්බුරුමනෞරුඋතුරු එන්ඩිබෙලෙනේපාලන්ඩොන්ගාලන්දේස" + + "ිනෝර්වීජියානු නයිනෝර්ස්ක්නෝර්වීජියානු බොක්මල්සෞත් ඩ්බේල්නවාජොන්යන්ජාඔස" + + "ිටාන්ඔරොමෝඔරියාඔසිටෙක්පන්ජාබිපෝලන්තපෂ්ටොපෘතුගීසික්වීචුවාරොමෑන්ශ්රුන්ඩි" + + "රොමේනියානුරුසියානුකින්යර්වන්ඩාසංස්කෘතසාර්ඩිනිඅන්සින්ධිඋතුරු සාමිසන්ග්" + + "\u200dරෝසිංහලස්ලෝවැක්ස්ලෝවේනියානුසෑමොඅන්ශෝනාසෝමාලිඇල්බේනියානුසර්බියානුස්" + + "වතිසතර්න් සොතොසන්ඩනීසියානුස්වීඩන්ස්වාහිලිදෙමළතෙළිඟුටජික්තායිටිග්\u200d" + + "රින්යාටර්ක්මෙන්ස්වනාටොංගාතුර්කිසොන්ගටාටර්ටහිටියන්උයිගර්යුක්රේනියානුඋර්" + + "දුඋස්බෙක්වෙන්ඩාවියට්නාම්වොලපූක්වෑලූන්වොලොෆ්ශෝසායිඩිශ්යොරූබාචීනසුලුඅචයි" + + "නිස්අඩන්ග්මෙඅඩිඝෙටියුනිසියනු අරාබිඇගම්අයිනුඇලුඑට්සතර්න් අල්ටය්අන්ගිකමප" + + "ුචෙඇරපහොඅසුඇස්ටියුරියන්අවදිබැලිනීස්බසාබෙම්බාබෙනාබටහිර බලොචිබොජ්පුරිබින" + + "ිසික්සිකාබොඩොබුගිනීස්බ්ලින්සෙබුඅනොචිගාචූකීස්මරිචොක්ටොව්චෙරොකීචෙයෙන්නෙස" + + "ොරානි කුර්දිෂ්සෙසෙල්ව ක්\u200dරොල් ෆ්\u200dරෙන්ච්ඩකොටාඩාර්ග්වාටයිටාඩොග" + + "්\u200dරිබ්සර්මාපහළ සෝබියානුඩුආලාජොල-ෆෝනියිඩසාගාඑම්බුඑෆික්එකජුක්එවොන්ඩ" + + "ොපිලිපීනෆොන්ෆ්\u200dරියුලියන්ගාගගාස්ගැන් චයිනිස්ගීස්ගිල්බර්ටීස්ගොරොන්ට" + + "ාලොස්විස් ජර්මානුගුසීග්විචින්හකා චයිනිස්හවායිහිලිගෙනන්මොන්ග්ඉහළ සෝබියා" + + "නුසියැන් චීනහුපාඉබන්ඉබිබියොඉලොකොඉන්ගුෂ්ලොජ්බන්නොම්බාමැකාමීකාබිල්කචින්ජ" + + "්ජුකැම්බාකබාර්ඩියන්ට්යප්මැකොන්ඩ්කබුවෙර්ඩියානුකොරොඛසිකොයිරා චිනිකකොකලෙන" + + "්ජන්කිම්බුන්ඩුකොමි-පර්මියාක්කොන්කනික්පෙලෙකරන්චි-බාකර්කැරෙලියන්කුරුඛ්ශා" + + "ම්බලාබාෆියාකොලොග්නියන්කුමික්ලඩිනොලංගිලෙස්ගියන්ලකොටලොසිඋතුරු ලුරිලුබ-ලු" + + "ලුඅලුන්ඩලුඔමිසොලුයියාමදුරීස්මඝහිමයිතිලිමකාසාර්මසායිමොක්ශාමෙන්ඩෙමෙරුමොර" + + "ිස්යෙම්මඛුවා-මීටෝමෙටාමික්මැක්මිනන්ග්කබාවුමනිපුරිමොහොව්ක්මොස්සිමුන්ඩන්බ" + + "හු භාෂාක්\u200dරීක්මිරන්ඩීස්එර්ස්යාමැසන්ඩරනිමින් නන් චයිනිස්නියාපොලිටන" + + "්නාමාපහළ ජර්මන්නෙවාරිනියාස්නියුඑන්කුවාසිඔන්ගියාම්බූන්නොගායිඑන්‘කෝනොදර්" + + "න් සොතොනොයර්නයන්කෝලෙපන්ගසීනන්පන්පන්ගපපියමෙන්ටොපලවුවන්නෛජීරියන් පෙන්ගින" + + "්පෘශියන්කියිචේරපනුයිරරොටොන්ගන්රෝම්බෝඇරොමානියානුර්වාසන්ඩවෙසඛාසම්බුරුසෑන" + + "්ටලින්ගම්බෙසංගුසිසිලියන්ස්කොට්ස්දකුණු කුර්දිසෙනාකෝයිරාබොරො සෙන්නිටචේල්" + + "හිට්ශාන්දකුණු සාමිලුලේ සාමිඉනාරි සාමිස්කොල්ට් සාමිසොනින්කෙස්\u200dරන් " + + "ටොන්ගොසහොසුකුමාකොමොරියන්ස්\u200dරයෑක්ටිම්නෙටෙසෝටේටම්ටීග්\u200dරෙක්ලින්" + + "ගොන්ටොක් පිසින්ටරොකොටුම්බුකාටුවාලුටසවාක්ටුවිනියන්මධ්\u200dයම ඇට්ලස් ටම" + + "සිට්අඩ්මර්ට්උබුන්ඩුනොදන්නා භාෂාවවයිවුන්ජෝවොල්සර්වොලෙට්ටවොරෙය්වොපිරිවූ " + + "චයිනිස්කල්මික්සොගායන්ග්බෙන්යෙම්බාකැන්ටොනීස්සම්මත මොරොක්කෝ ටමසිග්ත්සුනි" + + "වාග් විද්\u200dයා අන්තර්ගතයක් නැතසාසානූතන සම්මත අරාබිඔස්ට්\u200dරියානු" + + " ජර්මන්ස්විස් උසස් ජර්මන්ඕස්ට්\u200dරේලියානු ඉංග්\u200dරීසිකැනේඩියානු ඉං" + + "ග්\u200dරීසිබ්\u200dරිතාන්\u200dය ඉංග්\u200dරීසිඇමෙරිකානු ඉංග්\u200dරී" + + "සිලතින් ඇමරිකානු ස්පාඤ්ඤයුරෝපීය ස්පාඤ්ඤමෙක්සිකානු ස්පාඤ්ඤකැනේඩියානු ප්" + + "\u200dරංශස්විස් ප්\u200dරංශපහළ සැක්සන්ෆ්ලෙමිශ්බ්\u200dරසීල පෘතුගීසියුරෝප" + + "ීය පෘතුගීසිමොල්ඩවිආනුකොංගෝ ස්වාහිලිසරල චීනසාම්ප්\u200dරදායික චීන" + +var siLangIdx = []uint16{ // 615 elements // Entry 0 - 3F - 0x0000, 0x000f, 0x0030, 0x0030, 0x004e, 0x005d, 0x0078, 0x0090, - 0x009f, 0x00b7, 0x00c9, 0x00db, 0x00fc, 0x0114, 0x0135, 0x0156, - 0x016b, 0x017d, 0x0192, 0x01a4, 0x01bf, 0x01dd, 0x01ef, 0x020d, - 0x021c, 0x0240, 0x0240, 0x024c, 0x0274, 0x0283, 0x0295, 0x02a7, - 0x02b9, 0x02cb, 0x02e3, 0x02ec, 0x02fe, 0x0319, 0x0337, 0x034c, - 0x036d, 0x037f, 0x039a, 0x03ac, 0x03c4, 0x03d0, 0x03e2, 0x03f4, - 0x0425, 0x043d, 0x046e, 0x048c, 0x04a1, 0x04b6, 0x04ce, 0x04da, - 0x04e6, 0x04f8, 0x04f8, 0x051f, 0x052e, 0x054f, 0x0570, 0x0582, + 0x0000, 0x000f, 0x0030, 0x0030, 0x0051, 0x0060, 0x007b, 0x0093, + 0x00a2, 0x00b1, 0x00c3, 0x00d5, 0x00f6, 0x010e, 0x012f, 0x0150, + 0x0165, 0x0177, 0x018c, 0x019e, 0x01b9, 0x01d7, 0x01e9, 0x0207, + 0x0216, 0x022e, 0x022e, 0x023a, 0x0262, 0x0271, 0x0283, 0x0295, + 0x02a7, 0x02b9, 0x02d1, 0x02da, 0x02ec, 0x0307, 0x0325, 0x033a, + 0x035b, 0x036d, 0x0388, 0x039a, 0x03b2, 0x03be, 0x03d0, 0x03e2, + 0x0413, 0x042b, 0x045c, 0x047a, 0x048f, 0x04a4, 0x04bc, 0x04c8, + 0x04d4, 0x04e6, 0x04e6, 0x0501, 0x0510, 0x0531, 0x0552, 0x0564, // Entry 40 - 7F - 0x05a3, 0x05ca, 0x05ca, 0x05d9, 0x05f5, 0x05f5, 0x05fe, 0x0619, - 0x0628, 0x0649, 0x0655, 0x0661, 0x067f, 0x067f, 0x0691, 0x06a9, - 0x06b8, 0x06d0, 0x06dc, 0x06eb, 0x0703, 0x0712, 0x072a, 0x073c, - 0x0748, 0x0766, 0x077e, 0x078d, 0x07b1, 0x07c0, 0x07e1, 0x07f6, - 0x07ff, 0x0823, 0x0829, 0x0847, 0x0859, 0x086e, 0x0880, 0x08a4, - 0x08b9, 0x08da, 0x08e9, 0x08f5, 0x090d, 0x091c, 0x0928, 0x0953, - 0x0962, 0x097a, 0x098f, 0x09d5, 0x0a0c, 0x0a2b, 0x0a3a, 0x0a4f, - 0x0a64, 0x0a64, 0x0a73, 0x0a82, 0x0a97, 0x0aac, 0x0aac, 0x0abe, + 0x0585, 0x05ac, 0x05ac, 0x05bb, 0x05d7, 0x05d7, 0x05e0, 0x05fb, + 0x060a, 0x062b, 0x0637, 0x0643, 0x0661, 0x0661, 0x0673, 0x068b, + 0x069a, 0x06b2, 0x06be, 0x06cd, 0x06e5, 0x06f4, 0x070c, 0x071e, + 0x072a, 0x0748, 0x0760, 0x076f, 0x0793, 0x07a2, 0x07c3, 0x07d8, + 0x07e1, 0x0805, 0x0824, 0x0842, 0x0854, 0x0869, 0x087b, 0x089f, + 0x08b4, 0x08d5, 0x08e4, 0x08f0, 0x0908, 0x0917, 0x0923, 0x094e, + 0x095d, 0x0975, 0x098a, 0x09d0, 0x0a0a, 0x0a29, 0x0a38, 0x0a4d, + 0x0a62, 0x0a62, 0x0a71, 0x0a80, 0x0a95, 0x0aaa, 0x0aaa, 0x0abc, // Entry 80 - BF - 0x0acd, 0x0ae5, 0x0afd, 0x0b15, 0x0b27, 0x0b45, 0x0b5d, 0x0b81, - 0x0b96, 0x0bb7, 0x0bc9, 0x0be5, 0x0bfd, 0x0c0c, 0x0c24, 0x0c48, - 0x0c5d, 0x0c69, 0x0c7b, 0x0c9c, 0x0cb7, 0x0cc6, 0x0ce5, 0x0d09, - 0x0d1e, 0x0d36, 0x0d42, 0x0d54, 0x0d63, 0x0d6f, 0x0d90, 0x0dab, - 0x0dba, 0x0dc9, 0x0ddb, 0x0dea, 0x0df9, 0x0e11, 0x0e23, 0x0e47, - 0x0e56, 0x0e6b, 0x0e7d, 0x0e98, 0x0ead, 0x0ebf, 0x0ed1, 0x0edd, - 0x0eef, 0x0f01, 0x0f01, 0x0f0a, 0x0f16, 0x0f2e, 0x0f2e, 0x0f46, - 0x0f55, 0x0f86, 0x0f86, 0x0f92, 0x0fa1, 0x0fa1, 0x0fa1, 0x0fb3, + 0x0acb, 0x0ae3, 0x0afb, 0x0b13, 0x0b25, 0x0b43, 0x0b5b, 0x0b7f, + 0x0b94, 0x0bb5, 0x0bc7, 0x0be3, 0x0bfb, 0x0c0a, 0x0c22, 0x0c46, + 0x0c5b, 0x0c67, 0x0c79, 0x0c9a, 0x0cb5, 0x0cc4, 0x0ce3, 0x0d07, + 0x0d1c, 0x0d34, 0x0d40, 0x0d52, 0x0d61, 0x0d6d, 0x0d8e, 0x0da9, + 0x0db8, 0x0dc7, 0x0dd9, 0x0de8, 0x0df7, 0x0e0f, 0x0e21, 0x0e45, + 0x0e54, 0x0e69, 0x0e7b, 0x0e96, 0x0eab, 0x0ebd, 0x0ecf, 0x0edb, + 0x0eed, 0x0eff, 0x0eff, 0x0f08, 0x0f14, 0x0f2c, 0x0f2c, 0x0f44, + 0x0f53, 0x0f84, 0x0f84, 0x0f90, 0x0f9f, 0x0f9f, 0x0f9f, 0x0fb1, // Entry C0 - FF - 0x0fb3, 0x0fd8, 0x0fd8, 0x0fea, 0x0fea, 0x0ff9, 0x0ff9, 0x1008, - 0x1008, 0x1008, 0x1008, 0x1008, 0x1008, 0x1011, 0x1011, 0x1035, - 0x1035, 0x1041, 0x1041, 0x1059, 0x1059, 0x1062, 0x1062, 0x1062, - 0x1062, 0x1062, 0x1074, 0x1074, 0x1080, 0x1080, 0x1080, 0x109f, - 0x10b7, 0x10b7, 0x10c3, 0x10c3, 0x10c3, 0x10db, 0x10db, 0x10db, - 0x10db, 0x10db, 0x10e7, 0x10e7, 0x10e7, 0x10ff, 0x10ff, 0x1111, - 0x1111, 0x1111, 0x1111, 0x1111, 0x1111, 0x1126, 0x1132, 0x1132, - 0x1132, 0x1144, 0x114d, 0x114d, 0x1165, 0x1165, 0x1177, 0x118f, + 0x0fb1, 0x0fd6, 0x0fd6, 0x0fe8, 0x0fe8, 0x0ff7, 0x0ff7, 0x1006, + 0x1006, 0x1006, 0x1006, 0x1006, 0x1006, 0x100f, 0x100f, 0x1033, + 0x1033, 0x103f, 0x103f, 0x1057, 0x1057, 0x1060, 0x1060, 0x1060, + 0x1060, 0x1060, 0x1072, 0x1072, 0x107e, 0x107e, 0x107e, 0x109d, + 0x10b5, 0x10b5, 0x10c1, 0x10c1, 0x10c1, 0x10d9, 0x10d9, 0x10d9, + 0x10d9, 0x10d9, 0x10e5, 0x10e5, 0x10e5, 0x10fd, 0x10fd, 0x110f, + 0x110f, 0x110f, 0x110f, 0x110f, 0x110f, 0x110f, 0x1124, 0x1130, + 0x1130, 0x1130, 0x1142, 0x114b, 0x114b, 0x1163, 0x1163, 0x1175, // Entry 100 - 13F - 0x11ba, 0x11ba, 0x11ba, 0x11ba, 0x1201, 0x1201, 0x1210, 0x1228, - 0x1237, 0x1237, 0x1237, 0x1252, 0x1252, 0x1261, 0x1261, 0x1283, - 0x1283, 0x1292, 0x1292, 0x12ae, 0x12ae, 0x12bd, 0x12cc, 0x12db, - 0x12db, 0x12db, 0x12ed, 0x12ed, 0x12ed, 0x12ed, 0x1302, 0x1302, - 0x1302, 0x1317, 0x1317, 0x1323, 0x1323, 0x1323, 0x1323, 0x1323, - 0x1323, 0x1323, 0x1347, 0x134d, 0x135c, 0x137e, 0x137e, 0x137e, - 0x137e, 0x138a, 0x13ab, 0x13ab, 0x13ab, 0x13ab, 0x13ab, 0x13ab, - 0x13c9, 0x13c9, 0x13c9, 0x13c9, 0x13f1, 0x13f1, 0x13f1, 0x13fd, + 0x118d, 0x11b8, 0x11b8, 0x11b8, 0x11b8, 0x11ff, 0x11ff, 0x120e, + 0x1226, 0x1235, 0x1235, 0x1235, 0x1250, 0x1250, 0x125f, 0x125f, + 0x1281, 0x1281, 0x1290, 0x1290, 0x12ac, 0x12ac, 0x12bb, 0x12ca, + 0x12d9, 0x12d9, 0x12d9, 0x12eb, 0x12eb, 0x12eb, 0x12eb, 0x1300, + 0x1300, 0x1300, 0x1315, 0x1315, 0x1321, 0x1321, 0x1321, 0x1321, + 0x1321, 0x1321, 0x1321, 0x1345, 0x134b, 0x135a, 0x137c, 0x137c, + 0x137c, 0x137c, 0x1388, 0x13a9, 0x13a9, 0x13a9, 0x13a9, 0x13a9, + 0x13a9, 0x13c7, 0x13c7, 0x13c7, 0x13c7, 0x13ef, 0x13ef, 0x13ef, // Entry 140 - 17F - 0x1415, 0x1415, 0x1434, 0x1443, 0x1443, 0x145e, 0x145e, 0x1470, - 0x1492, 0x14ae, 0x14ba, 0x14c6, 0x14db, 0x14ea, 0x14ff, 0x14ff, - 0x14ff, 0x1514, 0x1526, 0x1538, 0x1538, 0x1538, 0x1538, 0x1538, - 0x1547, 0x1556, 0x1562, 0x1574, 0x1574, 0x1592, 0x1592, 0x15a1, - 0x15b9, 0x15e0, 0x15e0, 0x15ec, 0x15ec, 0x15f5, 0x15f5, 0x1614, - 0x1614, 0x1614, 0x161d, 0x1635, 0x1653, 0x167b, 0x1690, 0x1690, - 0x16a2, 0x16c4, 0x16c4, 0x16c4, 0x16df, 0x16f1, 0x1706, 0x1718, - 0x1739, 0x174b, 0x174b, 0x175a, 0x1766, 0x1766, 0x1766, 0x1781, + 0x13fb, 0x1413, 0x1413, 0x1432, 0x1441, 0x1441, 0x145c, 0x145c, + 0x146e, 0x1490, 0x14ac, 0x14b8, 0x14c4, 0x14d9, 0x14e8, 0x14fd, + 0x14fd, 0x14fd, 0x1512, 0x1524, 0x1536, 0x1536, 0x1536, 0x1536, + 0x1536, 0x1548, 0x1557, 0x1563, 0x1575, 0x1575, 0x1593, 0x1593, + 0x15a2, 0x15ba, 0x15e1, 0x15e1, 0x15ed, 0x15ed, 0x15f6, 0x15f6, + 0x1615, 0x1615, 0x1615, 0x161e, 0x1636, 0x1654, 0x167c, 0x1691, + 0x1691, 0x16a3, 0x16c5, 0x16c5, 0x16c5, 0x16e0, 0x16f2, 0x1707, + 0x1719, 0x173a, 0x174c, 0x174c, 0x175b, 0x1767, 0x1767, 0x1767, // Entry 180 - 1BF - 0x1781, 0x1781, 0x1781, 0x178d, 0x178d, 0x178d, 0x1799, 0x17b5, - 0x17b5, 0x17ce, 0x17ce, 0x17dd, 0x17e6, 0x17f2, 0x1804, 0x1804, - 0x1804, 0x1819, 0x1819, 0x1825, 0x183a, 0x184f, 0x184f, 0x185e, - 0x185e, 0x1870, 0x1870, 0x1882, 0x188e, 0x18ac, 0x18ac, 0x18c8, - 0x18d4, 0x18ec, 0x1910, 0x1910, 0x1925, 0x193d, 0x194f, 0x194f, - 0x1964, 0x197a, 0x198f, 0x19aa, 0x19aa, 0x19aa, 0x19aa, 0x19bf, - 0x19da, 0x1a06, 0x1a27, 0x1a33, 0x1a4f, 0x1a61, 0x1a73, 0x1a88, - 0x1a88, 0x1a9d, 0x1ac1, 0x1ad3, 0x1ad3, 0x1ad3, 0x1ae5, 0x1b07, + 0x1782, 0x1782, 0x1782, 0x1782, 0x178e, 0x178e, 0x178e, 0x178e, + 0x179a, 0x17b6, 0x17b6, 0x17cf, 0x17cf, 0x17de, 0x17e7, 0x17f3, + 0x1805, 0x1805, 0x1805, 0x181a, 0x181a, 0x1826, 0x183b, 0x1850, + 0x1850, 0x185f, 0x185f, 0x1871, 0x1871, 0x1883, 0x188f, 0x18ad, + 0x18ad, 0x18c9, 0x18d5, 0x18ed, 0x1911, 0x1911, 0x1926, 0x193e, + 0x1950, 0x1950, 0x1965, 0x197b, 0x1990, 0x19ab, 0x19ab, 0x19ab, + 0x19ab, 0x19c0, 0x19db, 0x1a07, 0x1a28, 0x1a34, 0x1a50, 0x1a62, + 0x1a74, 0x1a89, 0x1a89, 0x1a9e, 0x1ac2, 0x1ad4, 0x1ad4, 0x1ad4, // Entry 1C0 - 1FF - 0x1b16, 0x1b16, 0x1b16, 0x1b2e, 0x1b2e, 0x1b2e, 0x1b2e, 0x1b2e, - 0x1b49, 0x1b49, 0x1b5e, 0x1b7c, 0x1b91, 0x1b91, 0x1bc5, 0x1bc5, - 0x1bc5, 0x1bc5, 0x1bc5, 0x1bc5, 0x1bc5, 0x1bc5, 0x1bc5, 0x1bda, - 0x1bda, 0x1bec, 0x1bec, 0x1bec, 0x1bfe, 0x1c1c, 0x1c1c, 0x1c1c, - 0x1c2e, 0x1c2e, 0x1c2e, 0x1c2e, 0x1c2e, 0x1c4c, 0x1c58, 0x1c6a, - 0x1c73, 0x1c73, 0x1c88, 0x1c88, 0x1c9d, 0x1c9d, 0x1cb2, 0x1cbe, - 0x1cd9, 0x1cf1, 0x1cf1, 0x1d13, 0x1d13, 0x1d1f, 0x1d1f, 0x1d1f, - 0x1d50, 0x1d50, 0x1d50, 0x1d6b, 0x1d77, 0x1d77, 0x1d77, 0x1d77, + 0x1ae6, 0x1b08, 0x1b17, 0x1b17, 0x1b17, 0x1b2f, 0x1b2f, 0x1b2f, + 0x1b2f, 0x1b2f, 0x1b4a, 0x1b4a, 0x1b5f, 0x1b7d, 0x1b92, 0x1b92, + 0x1bc6, 0x1bc6, 0x1bc6, 0x1bc6, 0x1bc6, 0x1bc6, 0x1bc6, 0x1bc6, + 0x1bc6, 0x1bdb, 0x1bdb, 0x1bed, 0x1bed, 0x1bed, 0x1bff, 0x1c1d, + 0x1c1d, 0x1c1d, 0x1c2f, 0x1c2f, 0x1c2f, 0x1c2f, 0x1c2f, 0x1c50, + 0x1c5c, 0x1c6e, 0x1c77, 0x1c77, 0x1c8c, 0x1c8c, 0x1ca1, 0x1ca1, + 0x1cb6, 0x1cc2, 0x1cdd, 0x1cf5, 0x1cf5, 0x1d17, 0x1d17, 0x1d23, + 0x1d23, 0x1d23, 0x1d54, 0x1d54, 0x1d54, 0x1d6f, 0x1d7b, 0x1d7b, // Entry 200 - 23F - 0x1d77, 0x1d93, 0x1dac, 0x1dc8, 0x1ded, 0x1e05, 0x1e05, 0x1e2a, - 0x1e2a, 0x1e33, 0x1e33, 0x1e45, 0x1e45, 0x1e45, 0x1e60, 0x1e60, - 0x1e78, 0x1e78, 0x1e78, 0x1e8a, 0x1e96, 0x1e96, 0x1ea5, 0x1eba, - 0x1eba, 0x1eba, 0x1eba, 0x1ed8, 0x1ed8, 0x1ed8, 0x1ed8, 0x1ed8, - 0x1ef7, 0x1ef7, 0x1f06, 0x1f06, 0x1f06, 0x1f06, 0x1f1e, 0x1f30, - 0x1f42, 0x1f5d, 0x1f95, 0x1fad, 0x1fad, 0x1fc2, 0x1fce, 0x1fd7, - 0x1fd7, 0x1fd7, 0x1fd7, 0x1fd7, 0x1fd7, 0x1fd7, 0x1fe9, 0x1ffe, - 0x2013, 0x2025, 0x2025, 0x2037, 0x2053, 0x2068, 0x2068, 0x2074, + 0x1d7b, 0x1d7b, 0x1d7b, 0x1d97, 0x1db0, 0x1dcc, 0x1df1, 0x1e09, + 0x1e09, 0x1e2e, 0x1e2e, 0x1e37, 0x1e37, 0x1e49, 0x1e49, 0x1e49, + 0x1e64, 0x1e64, 0x1e7c, 0x1e7c, 0x1e7c, 0x1e8e, 0x1e9a, 0x1e9a, + 0x1ea9, 0x1ebe, 0x1ebe, 0x1ebe, 0x1ebe, 0x1edc, 0x1edc, 0x1edc, + 0x1edc, 0x1edc, 0x1efb, 0x1efb, 0x1f0a, 0x1f0a, 0x1f0a, 0x1f0a, + 0x1f22, 0x1f34, 0x1f46, 0x1f61, 0x1f99, 0x1fb1, 0x1fb1, 0x1fc6, + 0x1feb, 0x1ff4, 0x1ff4, 0x1ff4, 0x1ff4, 0x1ff4, 0x1ff4, 0x1ff4, + 0x2006, 0x201b, 0x2030, 0x2042, 0x2042, 0x2054, 0x2070, 0x2085, // Entry 240 - 27F - 0x2074, 0x2074, 0x208f, 0x20a1, 0x20a1, 0x20bf, 0x20bf, 0x20bf, - 0x20bf, 0x20bf, 0x2100, 0x210c, 0x215a, 0x2166, 0x2192, 0x2192, - 0x21c9, 0x21fb, 0x2241, 0x227b, 0x22b8, 0x22ef, 0x232d, 0x2358, - 0x238c, 0x238c, 0x23bd, 0x23e2, 0x2401, 0x2419, 0x2447, 0x2475, - 0x2493, 0x2493, 0x2493, 0x24af, 0x24e0, -} // Size: 1250 bytes - -const skLangStr string = "" + // Size: 5794 bytes + 0x2085, 0x2091, 0x2091, 0x2091, 0x20ac, 0x20be, 0x20be, 0x20dc, + 0x20dc, 0x20dc, 0x20dc, 0x20dc, 0x211d, 0x2129, 0x2177, 0x2183, + 0x21af, 0x21af, 0x21e6, 0x2218, 0x225e, 0x2298, 0x22d5, 0x230c, + 0x234a, 0x2375, 0x23a9, 0x23a9, 0x23da, 0x23ff, 0x241e, 0x2436, + 0x2464, 0x2492, 0x24b0, 0x24b0, 0x24d8, 0x24eb, 0x251c, +} // Size: 1254 bytes + +const skLangStr string = "" + // Size: 5832 bytes "afarčinaabcházčinaavestčinaafrikánčinaakančinaamharčinaaragónčinaarabčin" + "aásamčinaavarčinaaymarčinaazerbajdžančinabaškirčinabieloruštinabulharčin" + "abislamabambarčinabengálčinatibetčinabretónčinabosniačtinakatalánčinačeč" + @@ -23622,15 +25000,15 @@ const skLangStr string = "" + // Size: 5794 bytes "činanepálčinandongaholandčinanórčina (nynorsk)nórčina (bokmal)južná nde" + "belčinanavahoňandžaokcitánčinaodžibvaoromčinauríjčinaosetčinapandžábčina" + "pálípoľštinapaštčinaportugalčinakečuánčinarétorománčinarundčinarumunčina" + - "ruštinarwandčinasanskritsardínčinasindhčinaseverná lapončinasangosinhalč" + - "inaslovenčinaslovinčinasamojčinašončinasomálčinaalbánčinasrbčinasvazijči" + - "najužná sothčinasundčinašvédčinaswahilčinatamilčinatelugčinatadžičtinath" + - "ajčinatigriňaturkménčinatswančinatongčinaturečtinatsongčinatatárčinatahi" + - "tčinaujgurčinaukrajinčinaurdčinauzbečtinavendčinavietnamčinavolapükvalón" + + "ruštinarwandčinasanskritsardínčinasindhčinaseverná saamčinasangosinhalči" + + "naslovenčinaslovinčinasamojčinašončinasomálčinaalbánčinasrbčinasvazijčin" + + "ajužná sothčinasundčinašvédčinaswahilčinatamilčinatelugčinatadžičtinatha" + + "jčinatigriňaturkménčinatswančinatongčinaturečtinatsongčinatatárčinatahit" + + "činaujgurčinaukrajinčinaurdčinauzbečtinavendčinavietnamčinavolapükvalón" + "činawolofčinaxhoštinajidišjorubčinačuangčinačínštinazuluštinaacehčinaač" + "oliadangmeadygejčinaafrihiliaghemainčinaakkadčinaaleutčinajužná altajčin" + - "astará angličtinaangikaaramejčinaaraukánčinaarapažštinaarawačtinaasuastú" + - "rčinaawadhibalúčtinabalijčinabasabamunghomalabedžabembabenabafutzápadná " + + "astará angličtinaangikaaramejčinamapudungunarapažštinaarawačtinaasuastúr" + + "činaawadhibalúčtinabalijčinabasabamunghomalabedžabembabenabafutzápadná " + "balúčtinabhódžpurčinabikolčinabinikomsiksikabradžčinabodoakooseburiatčin" + "abugištinabulublinmedumbakaddokaribčinakajugčinaatsamcebuánčinakigačibča" + "čagatajčinachuukmarijčinačinucký žargónčoktčinačipevajčinačerokíčejenči" + @@ -23638,46 +25016,47 @@ const skLangStr string = "" + // Size: 5794 bytes "adakotčinadarginčinataitadelawarčinaslavédogribčinadinkčinazarmadógrídol" + "nolužická srbčinadualastredná holandčinajola-fonyiďuladazagaembuefikstar" + "oegyptčinaekadžukelamčinastredná angličtinaewondofangčinafilipínčinafonč" + - "inastredná francúzštinastará francúzštinaseverná frízštinavýchodofrízšti" + - "nafriulčinagagagauzštinagayogbajaetiópčinakiribatčinastredná horná nemči" + - "nastará horná nemčinagóndčinagorontalogótčinagrebostarogréčtinanemčina (" + - "švajčiarska)gusiikučinčinahaidahavajčinahiligajnončinachetitčinahmongči" + - "nahornolužická srbčinahupčinaibančinaibibioilokánčinainguštinalojbanngom" + - "bamašamežidovská perzštinažidovská arabčinakarakalpačtinakabylčinakačjin" + - "činajjukambakawikabardčinakanembutyapmakondekapverdčinakorokhasijčinach" + - "otančinazápadná songhajčinakakokalendžinkimbundukomi-permiačtinakonkánči" + - "nakusaiekpellekaračajevsko-balkarčinakarelčinakuruchčinašambalabafiakolí" + - "nčinakumyčtinakutenajčinažidovská španielčinalangilahandčinalambalezginč" + - "inalakotčinamongoloziseverné lurilubčina (luluánska)luiseňolundaluomizor" + - "ámčinaluhjamadurčinamafamagadhčinamaithilčinamakasarčinamandingomasajči" + - "namabamokšiančinamandarčinamendejčinamerumaurícijská kreolčinastredná ír" + - "činamakua-meettometa’mikmakčinaminangkabaučinamandžuštinamanípurčinamoh" + - "awkčinamossimundangviaceré jazykykríkčinamirandčinamarwarimyeneerzjančin" + - "amázandaránčinaneapolčinanamadolná nemčinanevárčinaniasánčinaniueštinakw" + - "asiongiemboonnogajčinastará nórčinan’koseverná sothčinanuerklasická nevá" + - "rčinaňamweziňankoleňoronzimaosedžštinaosmanská turečtinapangasinančinapa" + - "hlavíkapampangančinapapiamentopalaučinanigerijský pidžinstará perzštinaf" + - "eničtinapohnpeištinapruštinastará okcitánčinaquichéradžastančinarapanujč" + - "inararotongská maorijčinaromborómčinaarumunčinarwasandaweštinajakutčinas" + - "amaritánska aramejčinasamburusasačtinasantalčinangambaysangusicílčinaškó" + - "tčinajužná kurdčinasenekčinasenaselkupčinakoyraboro sennistará írčinatac" + - "helhitšančinačadská arabčinasidamojužná lapončinalapončina (lulská)lapon" + - "čina (inarijská)lapončina (skoltská)soninkesogdijčinasurinamčinasererči" + - "nasahosukumasususumerčinakomorčinasýrčina (klasická)sýrčinatemnetesoterê" + - "natetumčinatigrejčinativtokelauštinaklingónčinatlingitčinatuaregčinaňasa" + - " tonganovoguinejský pidžintarokocimšjančinatumbukatuvalčinatasawaqtuvian" + - "činastredomarocká tuaregčinaudmurtčinaugaritčinaumbundukoreňvaivodčinav" + - "unjowalserčinawalamčinawaraywashowarlpirikalmyčtinasogajaojapčinajangben" + - "yembakantončinazapotéčtinasystém Blisszenagatuaregčina (štandardná maroc" + - "ká)zuništinabez jazykového obsahuzazaarabčina (moderná štandardná)nemčin" + - "a (rakúska)nemčina (švajčiarska spisovná)angličtina (austrálska)angličti" + - "na (kanadská)angličtina (britská)angličtina (americká)španielčina (latin" + - "skoamerická)španielčina (európska)španielčina (mexická)francúzština (kan" + - "adská)francúzština (švajčiarska)dolná saštinaflámčinaportugalčina (brazí" + - "lska)portugalčina (európska)moldavčinasrbochorvátčinasvahilčina (konžská" + - ")čínština (zjednodušená)čínština (tradičná)" - -var skLangIdx = []uint16{ // 613 elements + "inafrancúzština (Cajun)stredná francúzštinastará francúzštinaseverná frí" + + "zštinavýchodofrízštinafriulčinagagagauzštinagayogbajaetiópčinakiribatčin" + + "astredná horná nemčinastará horná nemčinagóndčinagorontalogótčinagrebost" + + "arogréčtinanemčina (švajčiarska)gusiikučinčinahaidahavajčinahiligajnonči" + + "nachetitčinahmongčinahornolužická srbčinahupčinaibančinaibibioilokánčina" + + "inguštinalojbanngombamašamežidovská perzštinažidovská arabčinakarakalpač" + + "tinakabylčinakačjinčinajjukambakawikabardčinakanembutyapmakondekapverdči" + + "nakorokhasijčinachotančinazápadná songhajčinakakokalendžinkimbundukomi-p" + + "ermiačtinakonkánčinakusaiekpellekaračajevsko-balkarčinakarelčinakuruchči" + + "našambalabafiakolínčinakumyčtinakutenajčinažidovská španielčinalangilaha" + + "ndčinalambalezginčinalakotčinamongokreolčina (Louisiana)loziseverné luri" + + "lubčina (luluánska)luiseňolundaluomizorámčinaluhjamadurčinamafamagadhčin" + + "amaithilčinamakasarčinamandingomasajčinamabamokšiančinamandarčinamendejč" + + "inamerumaurícijská kreolčinastredná írčinamakua-meettometa’mikmakčinamin" + + "angkabaučinamandžuštinamanípurčinamohawkčinamossimundangviaceré jazykykr" + + "íkčinamirandčinamarwarimyeneerzjančinamázandaránčinaneapolčinanamadolná" + + " nemčinanevárčinaniasánčinaniueštinakwasiongiemboonnogajčinastará nórčin" + + "an’koseverná sothčinanuerklasická nevárčinaňamweziňankoleňoronzimaosedžš" + + "tinaosmanská turečtinapangasinančinapahlavíkapampangančinapapiamentopala" + + "učinanigerijský pidžinstará perzštinafeničtinapohnpeištinapruštinastará " + + "okcitánčinaquichéradžastančinarapanujčinararotongská maorijčinaromborómč" + + "inaarumunčinarwasandaweštinajakutčinasamaritánska aramejčinasamburusasač" + + "tinasantalčinangambaysangusicílčinaškótčinajužná kurdčinasenekčinasenase" + + "lkupčinakoyraboro sennistará írčinatachelhitšančinačadská arabčinasidamo" + + "južná saamčinalulská saamčinainarijská saamčinaskoltská saamčinasoninkes" + + "ogdijčinasurinamčinasererčinasahosukumasususumerčinakomorčinasýrčina (kl" + + "asická)sýrčinatemnetesoterênatetumčinatigrejčinativtokelauštinaklingónči" + + "natlingitčinatuaregčinaňasa tonganovoguinejský pidžintarokocimšjančinatu" + + "mbukatuvalčinatasawaqtuviančinastredomarocká tuaregčinaudmurtčinaugaritč" + + "inaumbunduneznámy jazykvaivodčinavunjowalserčinawalamčinawaraywashowarlp" + + "irikalmyčtinasogajaojapčinajangbenyembakantončinazapotéčtinasystém Bliss" + + "zenagatuaregčina (štandardná marocká)zuništinabez jazykového obsahuzazaa" + + "rabčina (moderná štandardná)nemčina (rakúska)nemčina (švajčiarska spisov" + + "ná)angličtina (austrálska)angličtina (kanadská)angličtina (britská)angli" + + "čtina (americká)španielčina (latinskoamerická)španielčina (európska)špa" + + "nielčina (mexická)francúzština (kanadská)francúzština (švajčiarska)dolná" + + " saštinaflámčinaportugalčina (brazílska)portugalčina (európska)moldavčin" + + "asrbochorvátčinasvahilčina (konžská)čínština (zjednodušená)čínština (tra" + + "dičná)" + +var skLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0009, 0x0015, 0x001f, 0x002c, 0x0035, 0x003f, 0x004b, 0x0054, 0x005e, 0x0067, 0x0071, 0x0082, 0x008e, 0x009b, 0x00a6, @@ -23698,76 +25077,76 @@ var skLangIdx = []uint16{ // 613 elements 0x0544, 0x054c, 0x0555, 0x055f, 0x0568, 0x0576, 0x057c, 0x0586, // Entry 80 - BF 0x0590, 0x059d, 0x05aa, 0x05ba, 0x05c3, 0x05cd, 0x05d5, 0x05df, - 0x05e7, 0x05f3, 0x05fd, 0x0610, 0x0615, 0x0620, 0x062b, 0x0636, - 0x0640, 0x0649, 0x0654, 0x065f, 0x0667, 0x0672, 0x0683, 0x068c, - 0x0697, 0x06a2, 0x06ac, 0x06b6, 0x06c2, 0x06cb, 0x06d3, 0x06e0, - 0x06ea, 0x06f3, 0x06fd, 0x0707, 0x0712, 0x071c, 0x0726, 0x0732, - 0x073a, 0x0744, 0x074d, 0x0759, 0x0761, 0x076c, 0x0776, 0x077f, - 0x0785, 0x078f, 0x079a, 0x07a5, 0x07af, 0x07b8, 0x07be, 0x07c5, - 0x07d0, 0x07d0, 0x07d8, 0x07dd, 0x07e5, 0x07ef, 0x07ef, 0x07f9, + 0x05e7, 0x05f3, 0x05fd, 0x060f, 0x0614, 0x061f, 0x062a, 0x0635, + 0x063f, 0x0648, 0x0653, 0x065e, 0x0666, 0x0671, 0x0682, 0x068b, + 0x0696, 0x06a1, 0x06ab, 0x06b5, 0x06c1, 0x06ca, 0x06d2, 0x06df, + 0x06e9, 0x06f2, 0x06fc, 0x0706, 0x0711, 0x071b, 0x0725, 0x0731, + 0x0739, 0x0743, 0x074c, 0x0758, 0x0760, 0x076b, 0x0775, 0x077e, + 0x0784, 0x078e, 0x0799, 0x07a4, 0x07ae, 0x07b7, 0x07bd, 0x07c4, + 0x07cf, 0x07cf, 0x07d7, 0x07dc, 0x07e4, 0x07ee, 0x07ee, 0x07f8, // Entry C0 - FF - 0x07f9, 0x080b, 0x081d, 0x0823, 0x082e, 0x083b, 0x083b, 0x0848, - 0x0848, 0x0848, 0x0853, 0x0853, 0x0853, 0x0856, 0x0856, 0x0861, - 0x0861, 0x0867, 0x0872, 0x087c, 0x087c, 0x0880, 0x0885, 0x0885, - 0x088c, 0x0892, 0x0897, 0x0897, 0x089b, 0x08a0, 0x08a0, 0x08b5, - 0x08c4, 0x08ce, 0x08d2, 0x08d2, 0x08d5, 0x08dc, 0x08dc, 0x08dc, - 0x08e7, 0x08e7, 0x08eb, 0x08f1, 0x08fc, 0x0906, 0x090a, 0x090e, - 0x0915, 0x091a, 0x0924, 0x092e, 0x0933, 0x093f, 0x0943, 0x094a, - 0x0957, 0x095c, 0x0966, 0x0978, 0x0982, 0x098f, 0x0997, 0x09a2, + 0x07f8, 0x080a, 0x081c, 0x0822, 0x082d, 0x0837, 0x0837, 0x0844, + 0x0844, 0x0844, 0x084f, 0x084f, 0x084f, 0x0852, 0x0852, 0x085d, + 0x085d, 0x0863, 0x086e, 0x0878, 0x0878, 0x087c, 0x0881, 0x0881, + 0x0888, 0x088e, 0x0893, 0x0893, 0x0897, 0x089c, 0x089c, 0x08b1, + 0x08c0, 0x08ca, 0x08ce, 0x08ce, 0x08d1, 0x08d8, 0x08d8, 0x08d8, + 0x08e3, 0x08e3, 0x08e7, 0x08ed, 0x08f8, 0x0902, 0x0906, 0x090a, + 0x0911, 0x0916, 0x0920, 0x092a, 0x092f, 0x092f, 0x093b, 0x093f, + 0x0946, 0x0953, 0x0958, 0x0962, 0x0974, 0x097e, 0x098b, 0x0993, // Entry 100 - 13F - 0x09b6, 0x09bf, 0x09bf, 0x09d3, 0x09e9, 0x09f4, 0x09fe, 0x0a09, - 0x0a0e, 0x0a1a, 0x0a20, 0x0a2b, 0x0a34, 0x0a39, 0x0a40, 0x0a57, - 0x0a57, 0x0a5c, 0x0a70, 0x0a7a, 0x0a7f, 0x0a85, 0x0a89, 0x0a8d, - 0x0a8d, 0x0a9c, 0x0aa4, 0x0aad, 0x0ac1, 0x0ac1, 0x0ac7, 0x0ac7, - 0x0ad0, 0x0add, 0x0add, 0x0ae5, 0x0ae5, 0x0afc, 0x0b11, 0x0b11, - 0x0b25, 0x0b38, 0x0b42, 0x0b44, 0x0b50, 0x0b50, 0x0b54, 0x0b59, - 0x0b59, 0x0b64, 0x0b70, 0x0b70, 0x0b88, 0x0b9e, 0x0b9e, 0x0ba8, - 0x0bb1, 0x0bba, 0x0bbf, 0x0bce, 0x0be6, 0x0be6, 0x0be6, 0x0beb, + 0x099e, 0x09b2, 0x09bb, 0x09bb, 0x09cf, 0x09e5, 0x09f0, 0x09fa, + 0x0a05, 0x0a0a, 0x0a16, 0x0a1c, 0x0a27, 0x0a30, 0x0a35, 0x0a3c, + 0x0a53, 0x0a53, 0x0a58, 0x0a6c, 0x0a76, 0x0a7b, 0x0a81, 0x0a85, + 0x0a89, 0x0a89, 0x0a98, 0x0aa0, 0x0aa9, 0x0abd, 0x0abd, 0x0ac3, + 0x0ac3, 0x0acc, 0x0ad9, 0x0ad9, 0x0ae1, 0x0af7, 0x0b0e, 0x0b23, + 0x0b23, 0x0b37, 0x0b4a, 0x0b54, 0x0b56, 0x0b62, 0x0b62, 0x0b66, + 0x0b6b, 0x0b6b, 0x0b76, 0x0b82, 0x0b82, 0x0b9a, 0x0bb0, 0x0bb0, + 0x0bba, 0x0bc3, 0x0bcc, 0x0bd1, 0x0be0, 0x0bf8, 0x0bf8, 0x0bf8, // Entry 140 - 17F - 0x0bf6, 0x0bfb, 0x0bfb, 0x0c05, 0x0c05, 0x0c14, 0x0c1f, 0x0c29, - 0x0c40, 0x0c40, 0x0c48, 0x0c51, 0x0c57, 0x0c63, 0x0c6d, 0x0c6d, - 0x0c6d, 0x0c73, 0x0c79, 0x0c80, 0x0c95, 0x0ca9, 0x0ca9, 0x0cb8, - 0x0cc2, 0x0cce, 0x0cd1, 0x0cd6, 0x0cda, 0x0ce5, 0x0cec, 0x0cf0, - 0x0cf7, 0x0d03, 0x0d03, 0x0d07, 0x0d07, 0x0d12, 0x0d1d, 0x0d33, - 0x0d33, 0x0d33, 0x0d37, 0x0d41, 0x0d49, 0x0d5a, 0x0d66, 0x0d6c, - 0x0d72, 0x0d8b, 0x0d8b, 0x0d8b, 0x0d95, 0x0da0, 0x0da8, 0x0dad, - 0x0db8, 0x0dc2, 0x0dce, 0x0de6, 0x0deb, 0x0df6, 0x0dfb, 0x0e06, + 0x0bfd, 0x0c08, 0x0c0d, 0x0c0d, 0x0c17, 0x0c17, 0x0c26, 0x0c31, + 0x0c3b, 0x0c52, 0x0c52, 0x0c5a, 0x0c63, 0x0c69, 0x0c75, 0x0c7f, + 0x0c7f, 0x0c7f, 0x0c85, 0x0c8b, 0x0c92, 0x0ca7, 0x0cbb, 0x0cbb, + 0x0cca, 0x0cd4, 0x0ce0, 0x0ce3, 0x0ce8, 0x0cec, 0x0cf7, 0x0cfe, + 0x0d02, 0x0d09, 0x0d15, 0x0d15, 0x0d19, 0x0d19, 0x0d24, 0x0d2f, + 0x0d45, 0x0d45, 0x0d45, 0x0d49, 0x0d53, 0x0d5b, 0x0d6c, 0x0d78, + 0x0d7e, 0x0d84, 0x0d9d, 0x0d9d, 0x0d9d, 0x0da7, 0x0db2, 0x0dba, + 0x0dbf, 0x0dca, 0x0dd4, 0x0de0, 0x0df8, 0x0dfd, 0x0e08, 0x0e0d, // Entry 180 - 1BF - 0x0e06, 0x0e06, 0x0e06, 0x0e10, 0x0e10, 0x0e15, 0x0e19, 0x0e26, - 0x0e26, 0x0e3b, 0x0e43, 0x0e48, 0x0e4b, 0x0e58, 0x0e5d, 0x0e5d, - 0x0e5d, 0x0e67, 0x0e6b, 0x0e76, 0x0e82, 0x0e8e, 0x0e96, 0x0ea0, - 0x0ea4, 0x0eb1, 0x0ebc, 0x0ec7, 0x0ecb, 0x0ee3, 0x0ef4, 0x0f00, - 0x0f07, 0x0f12, 0x0f22, 0x0f2f, 0x0f3c, 0x0f47, 0x0f4c, 0x0f4c, - 0x0f53, 0x0f62, 0x0f6c, 0x0f77, 0x0f7e, 0x0f7e, 0x0f83, 0x0f8e, - 0x0f9f, 0x0f9f, 0x0faa, 0x0fae, 0x0fbd, 0x0fc8, 0x0fd4, 0x0fde, - 0x0fde, 0x0fe4, 0x0fed, 0x0ff7, 0x1007, 0x1007, 0x100d, 0x101f, + 0x0e18, 0x0e18, 0x0e18, 0x0e18, 0x0e22, 0x0e22, 0x0e27, 0x0e3d, + 0x0e41, 0x0e4e, 0x0e4e, 0x0e63, 0x0e6b, 0x0e70, 0x0e73, 0x0e80, + 0x0e85, 0x0e85, 0x0e85, 0x0e8f, 0x0e93, 0x0e9e, 0x0eaa, 0x0eb6, + 0x0ebe, 0x0ec8, 0x0ecc, 0x0ed9, 0x0ee4, 0x0eef, 0x0ef3, 0x0f0b, + 0x0f1c, 0x0f28, 0x0f2f, 0x0f3a, 0x0f4a, 0x0f57, 0x0f64, 0x0f6f, + 0x0f74, 0x0f74, 0x0f7b, 0x0f8a, 0x0f94, 0x0f9f, 0x0fa6, 0x0fa6, + 0x0fab, 0x0fb6, 0x0fc7, 0x0fc7, 0x0fd2, 0x0fd6, 0x0fe5, 0x0ff0, + 0x0ffc, 0x1006, 0x1006, 0x100c, 0x1015, 0x101f, 0x102f, 0x102f, // Entry 1C0 - 1FF - 0x1023, 0x1038, 0x1040, 0x1048, 0x104d, 0x1052, 0x105e, 0x1072, - 0x1081, 0x1089, 0x1099, 0x10a3, 0x10ad, 0x10ad, 0x10c0, 0x10c0, - 0x10c0, 0x10d1, 0x10d1, 0x10db, 0x10db, 0x10db, 0x10e8, 0x10f1, - 0x1105, 0x110c, 0x110c, 0x111b, 0x1127, 0x113f, 0x113f, 0x113f, - 0x1144, 0x114d, 0x114d, 0x114d, 0x114d, 0x1158, 0x115b, 0x1168, - 0x1172, 0x118b, 0x1192, 0x119c, 0x11a7, 0x11a7, 0x11ae, 0x11b3, - 0x11be, 0x11c9, 0x11c9, 0x11da, 0x11e4, 0x11e8, 0x11e8, 0x11f3, - 0x1202, 0x1211, 0x1211, 0x121a, 0x1223, 0x1235, 0x123b, 0x123b, + 0x1035, 0x1047, 0x104b, 0x1060, 0x1068, 0x1070, 0x1075, 0x107a, + 0x1086, 0x109a, 0x10a9, 0x10b1, 0x10c1, 0x10cb, 0x10d5, 0x10d5, + 0x10e8, 0x10e8, 0x10e8, 0x10f9, 0x10f9, 0x1103, 0x1103, 0x1103, + 0x1110, 0x1119, 0x112d, 0x1134, 0x1134, 0x1143, 0x114f, 0x1167, + 0x1167, 0x1167, 0x116c, 0x1175, 0x1175, 0x1175, 0x1175, 0x1180, + 0x1183, 0x1190, 0x119a, 0x11b3, 0x11ba, 0x11c4, 0x11cf, 0x11cf, + 0x11d6, 0x11db, 0x11e6, 0x11f1, 0x11f1, 0x1202, 0x120c, 0x1210, + 0x1210, 0x121b, 0x122a, 0x1239, 0x1239, 0x1242, 0x124b, 0x125d, // Entry 200 - 23F - 0x123b, 0x124d, 0x1261, 0x1278, 0x128e, 0x1295, 0x12a0, 0x12ac, - 0x12b6, 0x12ba, 0x12ba, 0x12c0, 0x12c4, 0x12ce, 0x12d8, 0x12ed, - 0x12f6, 0x12f6, 0x12f6, 0x12fb, 0x12ff, 0x1306, 0x1310, 0x131b, - 0x131e, 0x132b, 0x132b, 0x1338, 0x1344, 0x1344, 0x134f, 0x135a, - 0x1370, 0x1370, 0x1376, 0x1376, 0x1383, 0x1383, 0x138a, 0x1394, - 0x139b, 0x13a6, 0x13c0, 0x13cb, 0x13d6, 0x13dd, 0x13e3, 0x13e6, - 0x13e6, 0x13e6, 0x13e6, 0x13e6, 0x13ee, 0x13ee, 0x13f3, 0x13fe, - 0x1408, 0x140d, 0x1412, 0x141a, 0x141a, 0x1425, 0x1425, 0x1429, + 0x1263, 0x1263, 0x1263, 0x1274, 0x1285, 0x1299, 0x12ac, 0x12b3, + 0x12be, 0x12ca, 0x12d4, 0x12d8, 0x12d8, 0x12de, 0x12e2, 0x12ec, + 0x12f6, 0x130b, 0x1314, 0x1314, 0x1314, 0x1319, 0x131d, 0x1324, + 0x132e, 0x1339, 0x133c, 0x1349, 0x1349, 0x1356, 0x1362, 0x1362, + 0x136d, 0x1378, 0x138e, 0x138e, 0x1394, 0x1394, 0x13a1, 0x13a1, + 0x13a8, 0x13b2, 0x13b9, 0x13c4, 0x13de, 0x13e9, 0x13f4, 0x13fb, + 0x1409, 0x140c, 0x140c, 0x140c, 0x140c, 0x140c, 0x1414, 0x1414, + 0x1419, 0x1424, 0x142e, 0x1433, 0x1438, 0x1440, 0x1440, 0x144b, // Entry 240 - 27F - 0x142c, 0x1434, 0x143b, 0x1440, 0x1440, 0x144b, 0x1458, 0x1465, - 0x1465, 0x146b, 0x148e, 0x1498, 0x14ae, 0x14b2, 0x14d3, 0x14d3, - 0x14e6, 0x1508, 0x1521, 0x1538, 0x154e, 0x1565, 0x1586, 0x159f, - 0x15b7, 0x15b7, 0x15d1, 0x15ef, 0x15fe, 0x1608, 0x1622, 0x163b, - 0x1646, 0x1657, 0x166e, 0x168a, 0x16a2, -} // Size: 1250 bytes - -const slLangStr string = "" + // Size: 6423 bytes + 0x144b, 0x144f, 0x1452, 0x145a, 0x1461, 0x1466, 0x1466, 0x1471, + 0x147e, 0x148b, 0x148b, 0x1491, 0x14b4, 0x14be, 0x14d4, 0x14d8, + 0x14f9, 0x14f9, 0x150c, 0x152e, 0x1547, 0x155e, 0x1574, 0x158b, + 0x15ac, 0x15c5, 0x15dd, 0x15dd, 0x15f7, 0x1615, 0x1624, 0x162e, + 0x1648, 0x1661, 0x166c, 0x167d, 0x1694, 0x16b0, 0x16c8, +} // Size: 1254 bytes + +const slLangStr string = "" + // Size: 6475 bytes "afarščinaabhaščinaavestijščinaafrikanščinaakanščinaamharščinaaragonščina" + "arabščinaasamščinaavarščinaajmarščinaazerbajdžanščinabaškirščinabelorušč" + "inabolgarščinabislamščinabambarščinabengalščinatibetanščinabretonščinabo" + @@ -23780,74 +25159,74 @@ const slLangStr string = "" + // Size: 6423 bytes "činaarmenščinahererointerlingvaindonezijščinainterlingveigboščinasečuan" + "ska jiščinainupiaščinaidoislandščinaitalijanščinainuktitutščinajaponščin" + "ajavanščinagruzijščinakongovščinakikujščinakvanjamakazaščinagrenlandščin" + - "akmerščinakanadakorejščinakanurščinakašmirščinakurdščinakomijščinakornij" + - "ščinakirgiščinalatinščinaluksemburščinagandalimburščinalingalalaoščinal" + - "itovščinaluba-katangalatvijščinamalagaščinamarshallovščinamaorščinamaked" + - "onščinamalajalamščinamongolščinamaratščinamalajščinamalteščinaburmanščin" + - "anaurujščinaseverna ndebelščinanepalščinandonganizozemščinanovonorveščin" + - "aknjižna norveščinajužna ndebelščinanavajščinanjanščinaokcitanščinaanaši" + - "nabščinaoromoodijščinaosetinščinapandžabščinapalijščinapoljščinapaštunšč" + - "inaportugalščinakečuanščinaretoromanščinarundščinaromunščinaruščinaruand" + - "ščinasanskrtsardinščinasindščinaseverna samijščinasangosinhalščinaslova" + - "ščinaslovenščinasamoanščinašonščinasomalščinaalbanščinasrbščinasvazijšč" + - "inasesotosundanščinašvedščinasvahilitamilščinatelugijščinatadžiščinatajš" + - "činatigrajščinaturkmenščinacvanščinatongščinaturščinatsongatatarščinata" + - "hitščinaujgurščinaukrajinščinaurdujščinauzbeščinavendavietnamščinavolapu" + - "kvalonščinavolofščinakoščinajidišjorubščinakitajščinazulujščinaačejščina" + - "ačolijščinaadangmejščinaadigejščinaafrihiliaghemščinaainujščinaakadščina" + - "aleutščinajužna altajščinastara angleščinaangikaščinaaramejščinamapudung" + - "unščinaarapaščinaaravaščinaasujščinaasturijščinaavadščinabeludžijščinaba" + - "lijščinabasabedžabembabenajščinazahodnobalučijščinabodžpuribikolski jezi" + - "kedosiksikabradžbakanščinabodojščinaburjatščinabuginščinablinščinakadošč" + - "inakaribski jeziksebuanščinačigajščinačibčevščinačagatajščinatrukeščinam" + - "arijščinačinuški žargončoktavščinačipevščinačerokeščinačejenščinasoransk" + - "a kurdščinakoptščinakrimska tatarščinasejšelska francoska kreolščinakašu" + - "bščinadakotščinadarginščinataitajščinadelavarščinaslavejščinadogribdinka" + - "zarmajščinadogridolnja lužiška srbščinadualasrednja nizozemščinajola-fon" + - "jiščinadiuladazagaembujščinaefiščinastara egipčanščinaekajukelamščinasre" + - "dnja angleščinaevondovščinafangijščinafilipinščinafonščinasrednja franco" + - "ščinastara francoščinaseverna frizijščinavzhodna frizijščinafurlanščina" + - "gagagavščinagajščinagbajščinaetiopščinakiribatščinasrednja visoka nemšči" + - "nastara visoka nemščinagondigorontalščinagotščinagrebščinastara grščinan" + - "emščina (Švica)gusijščinagvičinhaidščinahavajščinahiligajnonščinahetitšč" + - "inahmonščinagornja lužiška srbščinahupaibanščinaibibijščinailokanščinain" + - "guščinalojbanngombamačamejščinajudovska perzijščinajudovska arabščinakar" + - "akalpaščinakabilščinakačinščinajjukambaščinakavikabardinščinatjapska nig" + - "erijščinamakondščinazelenortskootoška kreolščinakorokasikotanščinakoyra " + - "chiinikakokalenjinščinakimbundukomi-permjaščinakonkanščinakosrajščinakpe" + - "lejščinakaračaj-balkarščinakarelščinakurukšambalabafiakölnsko narečjekum" + - "iščinakutenajščinaladinščinalangijščinalandalambalezginščinalakotščinamo" + - "ngolozisevernolurijščinaluba-lulualuisenščinalundaluolushailuhijščinamad" + - "urščinamagadščinamaitilimakasarščinamandingomasajščinamokšavščinamandarš" + - "činamendemerumorisjenščinasrednja irščinamakuva-metometamikmaščinaminan" + - "gkabaumandžurščinamanipurščinamohoščinamosijščinamundangveč jezikovcreek" + - "ovščinamirandeščinamarvarščinaerzjanščinamazanderanščinanapolitanščinakh" + - "oekhoenizka nemščinanevarščinaniaščinaniuejščinakwasiongiemboonščinanoga" + - "jščinastara nordijščinan’koseverna sotščinanuerščinaklasična nevarščinan" + - "jamveščinanjankolenjoronzimaosageotomanska turščinapangasinanščinapampan" + - "ščinapapiamentupalavanščinanigerijski pidžinstara perzijščinafeničanšči" + - "naponpejščinastara pruščinastara provansalščinaquicheradžastanščinarapan" + - "ujščinararotongščinaromboromščinaaromunščinarwasandavščinajakutščinasama" + - "ritanska aramejščinasamburščinasasaščinasantalščinangambajščinasangujšči" + - "nasicilijanščinaškotščinajužna kurdščinasenaselkupščinakoyraboro sennist" + - "ara irščinatahelitska berberščinašanščinasidamščinajužna samijščinaluleš" + - "ka samijščinainarska samijščinasamijščina Skoltsoninkesurinamska kreolšč" + - "inasererščinasahosukumasusujščinasumerščinašikomorklasična sirščinasiršč" + - "inatemnejščinatesotetumščinatigrejščinativščinatokelavščinaklingonščinat" + - "lingitščinatamajaščinamalavijska tongščinatok pisintarokotsimščinatumbuk" + - "ščinatuvalujščinatasawaqtuvinščinatamašek (srednji atlas)udmurtščinauga" + - "ritski jezikumbundščinarootščinavajščinavotjaščinavunjowalservalamščinav" + - "arajščinavašajščinavarlpirščinakalmiščinasogščinajaojščinajapščinajangbe" + - "njembajščinakantonščinazapoteščinaznakovni jezik Blisszenaščinastandardn" + - "i maroški tamazigzunijščinabrez jezikoslovne vsebinezazajščinasodobna st" + - "andardna arabščinaavstrijska nemščinavisoka nemščina (Švica)avstralska a" + - "ngleščinakanadska angleščinaangleščina (VB)angleščina (ZDA)latinskoameri" + - "ška španščinaiberska španščinakanadska francoščinašvicarska francoščina" + - "nizka saščinaflamščinabrazilska portugalščinaiberska portugalščinamoldav" + - "ščinasrbohrvaščinakongoška svahilščinapoenostavljena kitajščinatradicio" + - "nalna kitajščina" - -var slLangIdx = []uint16{ // 613 elements + "akmerščinakanareščinakorejščinakanurščinakašmirščinakurdščinakomijščinak" + + "ornijščinakirgiščinalatinščinaluksemburščinagandalimburščinalingalalaošč" + + "inalitovščinaluba-katangalatvijščinamalagaščinamarshallovščinamaorščinam" + + "akedonščinamalajalamščinamongolščinamaratščinamalajščinamalteščinaburman" + + "ščinanaurujščinaseverna ndebelščinanepalščinandonganizozemščinanovonorv" + + "eščinaknjižna norveščinajužna ndebelščinanavajščinanjanščinaokcitanščina" + + "anašinabščinaoromoodijščinaosetinščinapandžabščinapalijščinapoljščinapaš" + + "tunščinaportugalščinakečuanščinaretoromanščinarundščinaromunščinaruščina" + + "ruandščinasanskrtsardinščinasindščinaseverna samijščinasangosinhalščinas" + + "lovaščinaslovenščinasamoanščinašonščinasomalščinaalbanščinasrbščinasvazi" + + "jščinasesotosundanščinašvedščinasvahilitamilščinatelugijščinatadžiščinat" + + "ajščinatigrajščinaturkmenščinacvanščinatongščinaturščinacongščinatataršč" + + "inatahitščinaujgurščinaukrajinščinaurdujščinauzbeščinavendavietnamščinav" + + "olapukvalonščinavolofščinakoščinajidišjorubščinakitajščinazulujščinaačej" + + "ščinaačolijščinaadangmejščinaadigejščinaafrihiliaghemščinaainujščinaaka" + + "dščinaaleutščinajužna altajščinastara angleščinaangikaščinaaramejščinama" + + "pudungunščinaarapaščinaaravaščinaasujščinaasturijščinaavadščinabeludžijš" + + "činabalijščinabasabedžabembabenajščinazahodnobalučijščinabodžpuribikols" + + "ki jezikedosiksikabradžbakanščinabodojščinaburjatščinabuginščinablinščin" + + "akadoščinakaribski jeziksebuanščinačigajščinačibčevščinačagatajščinatruk" + + "eščinamarijščinačinuški žargončoktavščinačipevščinačerokeščinačejenščina" + + "soranska kurdščinakoptščinakrimska tatarščinasejšelska francoska kreolšč" + + "inakašubščinadakotščinadarginščinataitajščinadelavarščinaslavejščinadogr" + + "ibdinkazarmajščinadogridolnja lužiška srbščinadualasrednja nizozemščinaj" + + "ola-fonjiščinadiuladazagaembujščinaefiščinastara egipčanščinaekajukelamš" + + "činasrednja angleščinaevondovščinafangijščinafilipinščinafonščinacajuns" + + "ka francoščinasrednja francoščinastara francoščinaseverna frizijščinavzh" + + "odna frizijščinafurlanščinagagagavščinagajščinagbajščinaetiopščinakiriba" + + "tščinasrednja visoka nemščinastara visoka nemščinagondigorontalščinagotš" + + "činagrebščinastara grščinanemščina (Švica)gusijščinagvičinhaidščinahava" + + "jščinahiligajnonščinahetitščinahmonščinagornja lužiška srbščinahupaibanš" + + "činaibibijščinailokanščinainguščinalojbanngombamačamejščinajudovska per" + + "zijščinajudovska arabščinakarakalpaščinakabilščinakačinščinajjukambaščin" + + "akavikabardinščinatjapska nigerijščinamakondščinazelenortskootoška kreol" + + "ščinakorokasikotanščinakoyra chiinikakokalenjinščinakimbundukomi-permja" + + "ščinakonkanščinakosrajščinakpelejščinakaračaj-balkarščinakarelščinakuru" + + "kšambalabafiakölnsko narečjekumiščinakutenajščinaladinščinalangijščinala" + + "ndalambalezginščinalakotščinamongolouisianska kreolščinaloziseverna luri" + + "jščinaluba-lulualuisenščinalundaluomizojščinaluhijščinamadurščinamagadšč" + + "inamaitilimakasarščinamandingomasajščinamokšavščinamandarščinamendemerum" + + "orisjenščinasrednja irščinamakuva-metometamikmaščinaminangkabaumandžuršč" + + "inamanipurščinamohoščinamosijščinamundangveč jezikovcreekovščinamirandeš" + + "činamarvarščinaerzjanščinamazanderanščinamin nan kitajščinanapolitanšči" + + "nakhoekhoenizka nemščinanevarščinaniaščinaniuejščinakwasiongiemboonščina" + + "nogajščinastara nordijščinan’koseverna sotščinanuerščinaklasična nevaršč" + + "inanjamveščinanjankolenjoronzimaosageotomanska turščinapangasinanščinapa" + + "mpanščinapapiamentupalavanščinanigerijski pidžinstara perzijščinafeničan" + + "ščinaponpejščinastara pruščinastara provansalščinaquicheradžastanščinar" + + "apanujščinararotongščinaromboromščinaaromunščinarwasandavščinajakutščina" + + "samaritanska aramejščinasamburščinasasaščinasantalščinangambajščinasangu" + + "jščinasicilijanščinaškotščinajužna kurdščinasenaselkupščinakoyraboro sen" + + "nistara irščinatahelitska berberščinašanščinasidamščinajužna samijščinal" + + "uleška samijščinainarska samijščinasamijščina Skoltsoninkesurinamska kre" + + "olščinasererščinasahosukumasusujščinasumerščinašikomorklasična sirščinas" + + "irščinatemnejščinatesotetumščinatigrejščinativščinatokelavščinaklingonšč" + + "inatlingitščinatamajaščinamalavijska tongščinatok pisintarokotsimščinatu" + + "mbukščinatuvalujščinatasawaqtuvinščinatamašek (srednji atlas)udmurtščina" + + "ugaritski jezikumbundščinaneznan jezikvajščinavotjaščinavunjowalservalam" + + "ščinavarajščinavašajščinavarlpirščinakalmiščinasogščinajaojščinajapščin" + + "ajangbenjembajščinakantonščinazapoteščinaznakovni jezik Blisszenaščinast" + + "andardni maroški tamazigzunijščinabrez jezikoslovne vsebinezazajščinasod" + + "obna standardna arabščinaavstrijska nemščinavisoka nemščina (Švica)avstr" + + "alska angleščinakanadska angleščinaangleščina (VB)angleščina (ZDA)latins" + + "koameriška španščinaevropska španščinakanadska francoščinašvicarska fran" + + "coščinanizka saščinaflamščinabrazilska portugalščinaevropska portugalšči" + + "nasrbohrvaščinapoenostavljena kitajščinatradicionalna kitajščina" + +var slLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x000b, 0x0016, 0x0024, 0x0032, 0x003d, 0x0049, 0x0056, 0x0061, 0x006c, 0x0077, 0x0083, 0x0096, 0x00a4, 0x00b1, 0x00be, @@ -23860,237 +25239,238 @@ var slLangIdx = []uint16{ // 613 elements // Entry 40 - 7F 0x0327, 0x0337, 0x0342, 0x034d, 0x0361, 0x036e, 0x0371, 0x037e, 0x038d, 0x039d, 0x03a9, 0x03b5, 0x03c2, 0x03cf, 0x03db, 0x03e3, - 0x03ee, 0x03fd, 0x0408, 0x040e, 0x041a, 0x0426, 0x0434, 0x043f, - 0x044b, 0x0458, 0x0464, 0x0470, 0x0480, 0x0485, 0x0492, 0x0499, - 0x04a3, 0x04af, 0x04bb, 0x04c8, 0x04d5, 0x04e6, 0x04f1, 0x04ff, - 0x050f, 0x051c, 0x0528, 0x0534, 0x0540, 0x054d, 0x055a, 0x056f, - 0x057b, 0x0581, 0x058f, 0x059f, 0x05b4, 0x05c8, 0x05d4, 0x05df, - 0x05ed, 0x05fd, 0x0602, 0x060d, 0x061a, 0x0629, 0x0635, 0x0640, + 0x03ee, 0x03fd, 0x0408, 0x0415, 0x0421, 0x042d, 0x043b, 0x0446, + 0x0452, 0x045f, 0x046b, 0x0477, 0x0487, 0x048c, 0x0499, 0x04a0, + 0x04aa, 0x04b6, 0x04c2, 0x04cf, 0x04dc, 0x04ed, 0x04f8, 0x0506, + 0x0516, 0x0523, 0x052f, 0x053b, 0x0547, 0x0554, 0x0561, 0x0576, + 0x0582, 0x0588, 0x0596, 0x05a6, 0x05bb, 0x05cf, 0x05db, 0x05e6, + 0x05f4, 0x0604, 0x0609, 0x0614, 0x0621, 0x0630, 0x063c, 0x0647, // Entry 80 - BF - 0x064e, 0x065d, 0x066b, 0x067b, 0x0686, 0x0692, 0x069b, 0x06a7, - 0x06ae, 0x06bb, 0x06c6, 0x06da, 0x06df, 0x06ec, 0x06f8, 0x0705, - 0x0712, 0x071d, 0x0729, 0x0735, 0x073f, 0x074c, 0x0752, 0x075f, - 0x076b, 0x0772, 0x077e, 0x078c, 0x0799, 0x07a3, 0x07b0, 0x07be, - 0x07c9, 0x07d4, 0x07de, 0x07e4, 0x07f0, 0x07fc, 0x0808, 0x0816, - 0x0822, 0x082d, 0x0832, 0x0840, 0x0847, 0x0853, 0x085f, 0x0868, - 0x086e, 0x087a, 0x087a, 0x0886, 0x0892, 0x089e, 0x08ac, 0x08bb, - 0x08c8, 0x08c8, 0x08d0, 0x08dc, 0x08e8, 0x08f3, 0x08f3, 0x08ff, + 0x0655, 0x0664, 0x0672, 0x0682, 0x068d, 0x0699, 0x06a2, 0x06ae, + 0x06b5, 0x06c2, 0x06cd, 0x06e1, 0x06e6, 0x06f3, 0x06ff, 0x070c, + 0x0719, 0x0724, 0x0730, 0x073c, 0x0746, 0x0753, 0x0759, 0x0766, + 0x0772, 0x0779, 0x0785, 0x0793, 0x07a0, 0x07aa, 0x07b7, 0x07c5, + 0x07d0, 0x07db, 0x07e5, 0x07f0, 0x07fc, 0x0808, 0x0814, 0x0822, + 0x082e, 0x0839, 0x083e, 0x084c, 0x0853, 0x085f, 0x086b, 0x0874, + 0x087a, 0x0886, 0x0886, 0x0892, 0x089e, 0x08aa, 0x08b8, 0x08c7, + 0x08d4, 0x08d4, 0x08dc, 0x08e8, 0x08f4, 0x08ff, 0x08ff, 0x090b, // Entry C0 - FF - 0x08ff, 0x0912, 0x0924, 0x0931, 0x093e, 0x094f, 0x094f, 0x095b, - 0x095b, 0x095b, 0x0967, 0x0967, 0x0967, 0x0972, 0x0972, 0x0980, - 0x0980, 0x098b, 0x099b, 0x09a7, 0x09a7, 0x09ab, 0x09ab, 0x09ab, - 0x09ab, 0x09b1, 0x09b6, 0x09b6, 0x09c2, 0x09c2, 0x09c2, 0x09d8, - 0x09e1, 0x09ef, 0x09f2, 0x09f2, 0x09f2, 0x09f9, 0x09f9, 0x09f9, - 0x0a0b, 0x0a0b, 0x0a17, 0x0a17, 0x0a24, 0x0a30, 0x0a30, 0x0a3b, - 0x0a3b, 0x0a46, 0x0a54, 0x0a54, 0x0a54, 0x0a61, 0x0a6e, 0x0a7d, - 0x0a8c, 0x0a98, 0x0aa4, 0x0ab5, 0x0ac3, 0x0ad0, 0x0ade, 0x0aeb, + 0x090b, 0x091e, 0x0930, 0x093d, 0x094a, 0x095b, 0x095b, 0x0967, + 0x0967, 0x0967, 0x0973, 0x0973, 0x0973, 0x097e, 0x097e, 0x098c, + 0x098c, 0x0997, 0x09a7, 0x09b3, 0x09b3, 0x09b7, 0x09b7, 0x09b7, + 0x09b7, 0x09bd, 0x09c2, 0x09c2, 0x09ce, 0x09ce, 0x09ce, 0x09e4, + 0x09ed, 0x09fb, 0x09fe, 0x09fe, 0x09fe, 0x0a05, 0x0a05, 0x0a05, + 0x0a17, 0x0a17, 0x0a23, 0x0a23, 0x0a30, 0x0a3c, 0x0a3c, 0x0a47, + 0x0a47, 0x0a52, 0x0a60, 0x0a60, 0x0a60, 0x0a60, 0x0a6d, 0x0a7a, + 0x0a89, 0x0a98, 0x0aa4, 0x0ab0, 0x0ac1, 0x0acf, 0x0adc, 0x0aea, // Entry 100 - 13F - 0x0aff, 0x0b0a, 0x0b0a, 0x0b1e, 0x0b3f, 0x0b4c, 0x0b58, 0x0b65, - 0x0b72, 0x0b80, 0x0b8d, 0x0b93, 0x0b98, 0x0ba5, 0x0baa, 0x0bc5, - 0x0bc5, 0x0bca, 0x0be0, 0x0bf1, 0x0bf6, 0x0bfc, 0x0c08, 0x0c12, - 0x0c12, 0x0c27, 0x0c2d, 0x0c38, 0x0c4c, 0x0c4c, 0x0c5a, 0x0c5a, - 0x0c67, 0x0c75, 0x0c75, 0x0c7f, 0x0c7f, 0x0c94, 0x0ca7, 0x0ca7, - 0x0cbc, 0x0cd1, 0x0cde, 0x0ce0, 0x0cec, 0x0cec, 0x0cf6, 0x0d01, - 0x0d01, 0x0d0d, 0x0d1b, 0x0d1b, 0x0d34, 0x0d4b, 0x0d4b, 0x0d50, - 0x0d5f, 0x0d69, 0x0d74, 0x0d83, 0x0d96, 0x0d96, 0x0d96, 0x0da2, + 0x0af7, 0x0b0b, 0x0b16, 0x0b16, 0x0b2a, 0x0b4b, 0x0b58, 0x0b64, + 0x0b71, 0x0b7e, 0x0b8c, 0x0b99, 0x0b9f, 0x0ba4, 0x0bb1, 0x0bb6, + 0x0bd1, 0x0bd1, 0x0bd6, 0x0bec, 0x0bfd, 0x0c02, 0x0c08, 0x0c14, + 0x0c1e, 0x0c1e, 0x0c33, 0x0c39, 0x0c44, 0x0c58, 0x0c58, 0x0c66, + 0x0c66, 0x0c73, 0x0c81, 0x0c81, 0x0c8b, 0x0ca1, 0x0cb6, 0x0cc9, + 0x0cc9, 0x0cde, 0x0cf3, 0x0d00, 0x0d02, 0x0d0e, 0x0d0e, 0x0d18, + 0x0d23, 0x0d23, 0x0d2f, 0x0d3d, 0x0d3d, 0x0d56, 0x0d6d, 0x0d6d, + 0x0d72, 0x0d81, 0x0d8b, 0x0d96, 0x0da5, 0x0db8, 0x0db8, 0x0db8, // Entry 140 - 17F - 0x0da9, 0x0db4, 0x0db4, 0x0dc0, 0x0dc0, 0x0dd1, 0x0ddd, 0x0de8, - 0x0e03, 0x0e03, 0x0e07, 0x0e12, 0x0e1f, 0x0e2c, 0x0e37, 0x0e37, - 0x0e37, 0x0e3d, 0x0e43, 0x0e52, 0x0e68, 0x0e7c, 0x0e7c, 0x0e8c, - 0x0e98, 0x0ea5, 0x0ea8, 0x0eb4, 0x0eb8, 0x0ec7, 0x0ec7, 0x0edd, - 0x0eea, 0x0f09, 0x0f09, 0x0f0d, 0x0f0d, 0x0f11, 0x0f1d, 0x0f29, - 0x0f29, 0x0f29, 0x0f2d, 0x0f3c, 0x0f44, 0x0f56, 0x0f63, 0x0f70, - 0x0f7d, 0x0f93, 0x0f93, 0x0f93, 0x0f9f, 0x0fa4, 0x0fac, 0x0fb1, - 0x0fc2, 0x0fcd, 0x0fdb, 0x0fe7, 0x0ff4, 0x0ff9, 0x0ffe, 0x100b, + 0x0dc4, 0x0dcb, 0x0dd6, 0x0dd6, 0x0de2, 0x0de2, 0x0df3, 0x0dff, + 0x0e0a, 0x0e25, 0x0e25, 0x0e29, 0x0e34, 0x0e41, 0x0e4e, 0x0e59, + 0x0e59, 0x0e59, 0x0e5f, 0x0e65, 0x0e74, 0x0e8a, 0x0e9e, 0x0e9e, + 0x0eae, 0x0eba, 0x0ec7, 0x0eca, 0x0ed6, 0x0eda, 0x0ee9, 0x0ee9, + 0x0eff, 0x0f0c, 0x0f2b, 0x0f2b, 0x0f2f, 0x0f2f, 0x0f33, 0x0f3f, + 0x0f4b, 0x0f4b, 0x0f4b, 0x0f4f, 0x0f5e, 0x0f66, 0x0f78, 0x0f85, + 0x0f92, 0x0f9f, 0x0fb5, 0x0fb5, 0x0fb5, 0x0fc1, 0x0fc6, 0x0fce, + 0x0fd3, 0x0fe4, 0x0fef, 0x0ffd, 0x1009, 0x1016, 0x101b, 0x1020, // Entry 180 - 1BF - 0x100b, 0x100b, 0x100b, 0x1017, 0x1017, 0x101c, 0x1020, 0x1033, - 0x1033, 0x103d, 0x104a, 0x104f, 0x1052, 0x1058, 0x1064, 0x1064, - 0x1064, 0x1070, 0x1070, 0x107c, 0x1083, 0x1091, 0x1099, 0x10a5, - 0x10a5, 0x10b3, 0x10c0, 0x10c5, 0x10c9, 0x10d8, 0x10e9, 0x10f4, - 0x10f8, 0x1104, 0x110f, 0x111e, 0x112c, 0x1137, 0x1143, 0x1143, - 0x114a, 0x1156, 0x1164, 0x1172, 0x117f, 0x117f, 0x117f, 0x118c, - 0x119d, 0x119d, 0x11ad, 0x11b5, 0x11c5, 0x11d1, 0x11db, 0x11e7, - 0x11e7, 0x11ed, 0x11fd, 0x1209, 0x121c, 0x121c, 0x1222, 0x1234, + 0x102d, 0x102d, 0x102d, 0x102d, 0x1039, 0x1039, 0x103e, 0x1056, + 0x105a, 0x106e, 0x106e, 0x1078, 0x1085, 0x108a, 0x108d, 0x1099, + 0x10a5, 0x10a5, 0x10a5, 0x10b1, 0x10b1, 0x10bd, 0x10c4, 0x10d2, + 0x10da, 0x10e6, 0x10e6, 0x10f4, 0x1101, 0x1106, 0x110a, 0x1119, + 0x112a, 0x1135, 0x1139, 0x1145, 0x1150, 0x115f, 0x116d, 0x1178, + 0x1184, 0x1184, 0x118b, 0x1197, 0x11a5, 0x11b3, 0x11c0, 0x11c0, + 0x11c0, 0x11cd, 0x11de, 0x11f2, 0x1202, 0x120a, 0x121a, 0x1226, + 0x1230, 0x123c, 0x123c, 0x1242, 0x1252, 0x125e, 0x1271, 0x1271, // Entry 1C0 - 1FF - 0x123f, 0x1255, 0x1262, 0x126a, 0x126f, 0x1274, 0x1279, 0x128d, - 0x129e, 0x129e, 0x12ab, 0x12b5, 0x12c3, 0x12c3, 0x12d5, 0x12d5, - 0x12d5, 0x12e8, 0x12e8, 0x12f7, 0x12f7, 0x12f7, 0x1304, 0x1314, - 0x132a, 0x1330, 0x1330, 0x1341, 0x134f, 0x135e, 0x135e, 0x135e, - 0x1363, 0x136d, 0x136d, 0x136d, 0x136d, 0x137a, 0x137d, 0x138a, - 0x1396, 0x13b0, 0x13bd, 0x13c8, 0x13d5, 0x13d5, 0x13e3, 0x13f0, - 0x1400, 0x140c, 0x140c, 0x141e, 0x141e, 0x1422, 0x1422, 0x142f, - 0x143e, 0x144d, 0x144d, 0x1465, 0x1470, 0x1470, 0x147c, 0x147c, + 0x1277, 0x1289, 0x1294, 0x12aa, 0x12b7, 0x12bf, 0x12c4, 0x12c9, + 0x12ce, 0x12e2, 0x12f3, 0x12f3, 0x1300, 0x130a, 0x1318, 0x1318, + 0x132a, 0x132a, 0x132a, 0x133d, 0x133d, 0x134c, 0x134c, 0x134c, + 0x1359, 0x1369, 0x137f, 0x1385, 0x1385, 0x1396, 0x13a4, 0x13b3, + 0x13b3, 0x13b3, 0x13b8, 0x13c2, 0x13c2, 0x13c2, 0x13c2, 0x13cf, + 0x13d2, 0x13df, 0x13eb, 0x1405, 0x1412, 0x141d, 0x142a, 0x142a, + 0x1438, 0x1445, 0x1455, 0x1461, 0x1461, 0x1473, 0x1473, 0x1477, + 0x1477, 0x1484, 0x1493, 0x14a2, 0x14a2, 0x14ba, 0x14c5, 0x14c5, // Entry 200 - 23F - 0x147c, 0x148f, 0x14a4, 0x14b8, 0x14ca, 0x14d1, 0x14d1, 0x14e8, - 0x14f4, 0x14f8, 0x14f8, 0x14fe, 0x150a, 0x1516, 0x151e, 0x1532, - 0x153c, 0x153c, 0x153c, 0x1549, 0x154d, 0x154d, 0x1559, 0x1566, - 0x1570, 0x157e, 0x157e, 0x158c, 0x159a, 0x159a, 0x15a7, 0x15bd, - 0x15c6, 0x15c6, 0x15cc, 0x15cc, 0x15d7, 0x15d7, 0x15e4, 0x15f2, - 0x15f9, 0x1605, 0x161d, 0x162a, 0x1639, 0x1646, 0x1651, 0x165b, - 0x165b, 0x165b, 0x165b, 0x165b, 0x1667, 0x1667, 0x166c, 0x1672, - 0x167e, 0x168a, 0x1697, 0x16a5, 0x16a5, 0x16b1, 0x16b1, 0x16bb, + 0x14d1, 0x14d1, 0x14d1, 0x14e4, 0x14f9, 0x150d, 0x151f, 0x1526, + 0x1526, 0x153d, 0x1549, 0x154d, 0x154d, 0x1553, 0x155f, 0x156b, + 0x1573, 0x1587, 0x1591, 0x1591, 0x1591, 0x159e, 0x15a2, 0x15a2, + 0x15ae, 0x15bb, 0x15c5, 0x15d3, 0x15d3, 0x15e1, 0x15ef, 0x15ef, + 0x15fc, 0x1612, 0x161b, 0x161b, 0x1621, 0x1621, 0x162c, 0x162c, + 0x1639, 0x1647, 0x164e, 0x165a, 0x1672, 0x167f, 0x168e, 0x169b, + 0x16a7, 0x16b1, 0x16b1, 0x16b1, 0x16b1, 0x16b1, 0x16bd, 0x16bd, + 0x16c2, 0x16c8, 0x16d4, 0x16e0, 0x16ed, 0x16fb, 0x16fb, 0x1707, // Entry 240 - 27F - 0x16c6, 0x16d0, 0x16d7, 0x16e4, 0x16e4, 0x16f1, 0x16fe, 0x1712, - 0x1712, 0x171d, 0x1738, 0x1744, 0x175d, 0x1769, 0x1787, 0x1787, - 0x179c, 0x17b6, 0x17cd, 0x17e2, 0x17f3, 0x1805, 0x1823, 0x1837, - 0x1837, 0x1837, 0x184d, 0x1865, 0x1874, 0x187f, 0x1898, 0x18af, - 0x18bc, 0x18cb, 0x18e2, 0x18fd, 0x1917, -} // Size: 1250 bytes - -const sqLangStr string = "" + // Size: 4427 bytes + 0x1707, 0x1711, 0x171c, 0x1726, 0x172d, 0x173a, 0x173a, 0x1747, + 0x1754, 0x1768, 0x1768, 0x1773, 0x178e, 0x179a, 0x17b3, 0x17bf, + 0x17dd, 0x17dd, 0x17f2, 0x180c, 0x1823, 0x1838, 0x1849, 0x185b, + 0x1879, 0x188e, 0x188e, 0x188e, 0x18a4, 0x18bc, 0x18cb, 0x18d6, + 0x18ef, 0x1907, 0x1907, 0x1916, 0x1916, 0x1931, 0x194b, +} // Size: 1254 bytes + +const sqLangStr string = "" + // Size: 4443 bytes "afarishtabkazishtafrikanishtakanishtamarishtaragonezishtarabishtasamezis" + "htavarikishtajmarishtazerbajxhanishtbashkirishtbjellorusishtbullgarishtb" + "islamishtbambarishtbengalishttibetishtbretonishtboshnjakishtkatalonishtç" + - "eçenishtkamoroishtkorsikishtçekishtsllavishte kisheçuvashishtuellsishtda" + - "nishtgjermanishtdivehishtxhongaishteveishtgreqishtanglishtesperantospanj" + - "ishtestonishtbaskishtpersishtfulaishtfinlandishtfixhianishtfaroishtfrëng" + - "jishtfrizianishte perëndimoreirlandishtgalishte skocezegalicishtguaranis" + - "htguxharatishtmanksishthausishthebraishtindishtkroatishthaitishthungaris" + - "htarmenishthereroishtinterlinguaindonezishtgjuha oksidentaleigboishtsish" + - "uanishtidoishtislandishtitalishtinuktitutishtjaponishtjavanishtgjeorgjis" + - "htkikujuishtkuanjamaishtkazakishtkalalisutishtkmerishtkanadishtkoreanish" + - "tkanurishtkashmirishtkurdishtkomishtkornishtkirgizishtlatinishtluksembur" + - "gishtgandaishtlimburgishtlingalishtlaosishtlituanishtluba-katangaishtlet" + - "onishtmalagezishtmarshallishtmaorishtmaqedonishtmalajalamishtmongolishtm" + - "aratishtmalajishtmaltishtbirmanishtnauruishtndebelishte veriorenepalisht" + - "ndongaishtholandishtnorvegjishte nynorsknorvegjishte letrarendebelishte " + - "jugorenavahoishtnianjishtoksitanishtoromoishtodishtosetishtpanxhabishtpo" + - "lonishtpashtoishtportugalishtkeçuaishtretoromanishtrundishtrumanishtrusi" + - "shtkiniaruandishtsanskritishtsardenjishtsindishtsamishte verioresangoish" + - "tsinhalishtsllovakishtsllovenishtsamoanishtshonishtsomalishtshqipserbish" + - "tsuatishtsotoishte jugoresundanishtsuedishtsuahilishttamilishtteluguisht" + - "taxhikishttajlandishttigrinjaishtturkmenishtcuanaishttonganishtturqishtc" + - "ongaishttatarishttahitishtujgurishtukrainishturduishtuzbekishtvendaishtv" + - "ietnamishtvolapykishtualunishtulufishtkosaishtjidishtjorubaishtkinezisht" + - "zuluishtakinezishtandangmeishtadigishtagemishtajnuishtaleutishtaltaishte" + - " jugoreangikishtmapuçishtarapahoishtasuishtasturishtauadhishtbalinezisht" + - "basaishtbembaishtbenaishtbalokishte perëndimoreboxhpurishtbinishtsiksika" + - "ishtbodoishtbuginezishtblinishtsebuanishtçigishtçukezishtmarishtçoktauis" + - "htçerokishtçejenishtkurdishte qendrorefrëngjishte kreole seselvedakotish" + - "tdarguaishttajtaishtdogribishtzarmaishtsorbishte e poshtmedualaishtxhula" + - "fonjishtdazagauishtembuishtefikishtekajukishteuondoishtfilipinishtfonish" + - "tfriulianishtgaishtgagauzishtgizishtgilbertazishtgorontaloishtgjermanish" + - "te zviceranegusishtguiçinishthavaishthiligajnonishthmongishtsorbishte e " + - "sipërmehupaishtibanishtibibioishtilokoishtingushishtlojbanishtngombishtm" + - "açamishtkabilishtkaçinishtkajeishtkambaishtkabardianishttjapishtmakondis" + - "htkreolishte e Kepit të Gjelbërkoroishtkasishtkojraçinishtkakoishtkalenx" + - "hinishtkimbunduishtkomi-parmjakishtkonkanishtkpeleishtkaraçaj-balkarisht" + - "karelianishtkurukishtshambalishtbafianishtkëlnishtkumikishtladinoishtlan" + - "gishtlezgianishtlakotishtlozishtlurishte verioreluba-luluaishtlundaishtl" + - "uoishtmizoishtlujaishtmadurezishtmagaishtmaitilishtmakasarishtmasaishtmo" + - "kshaishtmendishtmeruishtmorisjenishtmakua-mitoishtmetaishtmikmakishtmina" + - "ngkabauishtmanipurishtmohokishtmosishtmundangishtgjuhë të shumëfishtakri" + - "kishtmirandishterzjaishtmazanderanishtnapoletanishtnamaishtgjermanishte " + - "e vendeve të ulëtaneuarishtniasishtniueanishtkuasishtngiembunishtnogajis" + - "htnkoishtsotoishte veriorenuerishtniankolishtpangasinanishtpampangaishtp" + - "apiamentishtpaluanishtpixhinishte nigerianeprusishtkiçeishtrapanuishtrar" + - "ontonganishtromboishtarumuneruaishtsandauishtsakaishtsamburishtsantalish" + - "tngambajishtsanguishtsiçilianishtskotishtkurdishte jugoresenaishtsenisht" + - "e kojraboretaçelitishtshanishtsamishte jugoresamishte lulesamishte inari" + - "samishte skoltisoninkishtsrananisht (sranantongoisht)sahoishtsukumaishtk" + - "amorianishtsiriakishttimneishttesoishttetumishttigreishtklingonishtpisin" + - "ishte tokutorokoishttumbukaishttuvaluishttasavakishttuvinianishttamaziat" + - "ishte atlase qendroreudmurtishtumbunduishtrutishtvaishtvunxhoishtualseri" + - "shtulajtaishtuarajishtuarlpirishtkalmikishtsogishtjangbenishtjembaishtka" + - "ntonezishttamaziatishte standarde marokenezunishtnuk ka përmbajtje gjuhë" + - "sorezazaishtarabishte standarde modernegjermanishte austriakegjermanisht" + - "e zvicerane (dialekti i Alpeve)anglishte australianeanglishte kanadezean" + - "glishte britanikeanglishte amerikanespanjishte amerikano-latinespanjisht" + - "e evropianespanjishte meksikanefrëngjishte kanadezefrëngjishte zvicerane" + - "gjermanishte saksone e vendeve të ulëtaflamandishtportugalishte brazilia" + - "neportugalishte evropianemoldavishtserbo-kroatishtsuahilishte kongoje" - -var sqLangIdx = []uint16{ // 611 elements + "eçenishtkamoroishtkorsikishtçekishtsllavishte kishtareçuvashishtuellsish" + + "tdanishtgjermanishtdivehishtxhongaishteveishtgreqishtanglishtesperantosp" + + "anjishtestonishtbaskishtpersishtfulaishtfinlandishtfixhianishtfaroishtfr" + + "ëngjishtfrizianishte perëndimoreirlandishtgalishte skocezegalicishtguar" + + "anishtguxharatishtmanksishthausishthebraishtindishtkroatishthaitishthung" + + "arishtarmenishthereroishtinterlinguaindonezishtgjuha oksidentaleigboisht" + + "sishuanishtidoishtislandishtitalishtinuktitutishtjaponishtjavanishtgjeor" + + "gjishtkikujuishtkuanjamaishtkazakishtkalalisutishtkmerishtkanadishtkorea" + + "nishtkanurishtkashmirishtkurdishtkomishtkornishtkirgizishtlatinishtlukse" + + "mburgishtgandaishtlimburgishtlingalishtlaosishtlituanishtluba-katangaish" + + "tletonishtmadagaskarishtmarshallishtmaorishtmaqedonishtmalajalamishtmong" + + "olishtmaratishtmalajishtmaltishtbirmanishtnauruishtndebelishte veriorene" + + "palishtndongaishtholandishtnorvegjishte nynorsknorvegjishte letrarendebe" + + "lishte jugorenavahoishtnianjishtoksitanishtoromoishtodishtosetishtpunxha" + + "bishtpolonishtpashtoishtportugalishtkeçuaishtretoromanishtrundishtrumani" + + "shtrusishtkiniaruandishtsanskritishtsardenjishtsindishtsamishte veriores" + + "angoishtsinhalishtsllovakishtsllovenishtsamoanishtshonishtsomalishtshqip" + + "serbishtsuatishtsotoishte jugoresundanishtsuedishtsuahilishttamilishttel" + + "uguishttaxhikishttajlandishttigrinjaishtturkmenishtcuanaishttonganishttu" + + "rqishtcongaishttatarishttahitishtujgurishtukrainishturduishtuzbekishtven" + + "daishtvietnamishtvolapykishtualunishtuolofishtxhosaishtjidishtjorubaisht" + + "kinezishtzuluishtakinezishtandangmeishtadigishtagemishtajnuishtaleutisht" + + "altaishte jugoreangikishtmapuçishtarapahoishtasuishtasturishtauadhishtba" + + "linezishtbasaishtbembaishtbenaishtbalokishte perëndimoreboxhpurishtbinis" + + "htsiksikaishtbodoishtbuginezishtblinishtsebuanishtçigishtçukezishtmarish" + + "tçoktauishtçerokishtçejenishtkurdishte qendrorefrëngjishte kreole seselv" + + "edakotishtdarguaishttajtaishtdogribishtzarmaishtsorbishte e poshtmeduala" + + "ishtxhulafonjishtdazagauishtembuishtefikishtekajukishteuondoishtfilipini" + + "shtfonishtfriulianishtgaishtgagauzishtgizishtgilbertazishtgorontaloishtg" + + "jermanishte zviceranegusishtguiçinishthavaishthiligajnonishthmongishtsor" + + "bishte e sipërmehupaishtibanishtibibioishtilokoishtingushishtlojbanishtn" + + "gombishtmaçamishtkabilishtkaçinishtkajeishtkambaishtkabardianishttjapish" + + "tmakondishtkreolishte e Kepit të Gjelbërkoroishtkasishtkojraçinishtkakoi" + + "shtkalenxhinishtkimbunduishtkomi-parmjakishtkonkanishtkpeleishtkaraçaj-b" + + "alkarishtkarelianishtkurukishtshambalishtbafianishtkëlnishtkumikishtladi" + + "noishtlangishtlezgianishtlakotishtlozishtlurishte verioreluba-luluaishtl" + + "undaishtluoishtmizoishtlujaishtmadurezishtmagaishtmaitilishtmakasarishtm" + + "asaishtmokshaishtmendishtmeruishtmorisjenishtmakua-mitoishtmetaishtmikma" + + "kishtminangkabauishtmanipurishtmohokishtmosishtmundangishtgjuhë të shumë" + + "fishtakrikishtmirandishterzjaishtmazanderanishtnapoletanishtnamaishtgjer" + + "manishte e vendeve të ulëtaneuarishtniasishtniueanishtkuasishtngiembunis" + + "htnogajishtnkoishtsotoishte veriorenuerishtniankolishtpangasinanishtpamp" + + "angaishtpapiamentishtpaluanishtpixhinishte nigerianeprusishtkiçeishtrapa" + + "nuishtrarontonganishtromboishtvllahishtruaishtsandauishtsakaishtsamburis" + + "htsantalishtngambajishtsanguishtsiçilianishtskotishtkurdishte jugoresena" + + "ishtsenishte kojraboretaçelitishtshanishtsamishte jugoresamishte lulesam" + + "ishte inarisamishte skoltisoninkishtsrananisht (sranantongoisht)sahoisht" + + "sukumaishtkamorianishtsiriakishttimneishttesoishttetumishttigreishtkling" + + "onishtpisinishte tokutorokoishttumbukaishttuvaluishttasavakishttuviniani" + + "shttamazajtisht e Atlasit QendrorudmurtishtumbunduishtE panjohurvaishtvu" + + "nxhoishtualserishtulajtaishtuarajishtuarlpirishtkalmikishtsogishtjangben" + + "ishtjembaishtkantonezishttamaziatishte standarde marokenezunishtnuk ka p" + + "ërmbajtje gjuhësorezazaishtarabishte standarde modernegjermanishte aust" + + "riakegjermanishte zvicerane (dialekti i Alpeve)anglishte australianeangl" + + "ishte kanadezeanglishte britanikeanglishte amerikanespanjishte amerikano" + + "-latinespanjishte evropianespanjishte meksikanefrëngjishte kanadezefrëng" + + "jishte zviceranegjermanishte saksone e vendeve të ulëtaflamandishtportug" + + "alishte brazilianeportugalishte evropianemoldavishtserbo-kroatishtsuahil" + + "ishte kongoleze" + +var sqLangIdx = []uint16{ // 613 elements // Entry 0 - 3F 0x0000, 0x0008, 0x0011, 0x0011, 0x001c, 0x0024, 0x002c, 0x0038, 0x0040, 0x004a, 0x0054, 0x005d, 0x006c, 0x0077, 0x0084, 0x008f, 0x0099, 0x00a3, 0x00ad, 0x00b6, 0x00c0, 0x00cc, 0x00d7, 0x00e2, - 0x00ec, 0x00f6, 0x00f6, 0x00fe, 0x010e, 0x0119, 0x0122, 0x0129, - 0x0134, 0x013d, 0x0147, 0x014e, 0x0156, 0x015e, 0x0167, 0x0170, - 0x0179, 0x0181, 0x0189, 0x0191, 0x019c, 0x01a7, 0x01af, 0x01ba, - 0x01d3, 0x01dd, 0x01ed, 0x01f6, 0x0200, 0x020c, 0x0215, 0x021d, - 0x0226, 0x022d, 0x022d, 0x0236, 0x023e, 0x0248, 0x0251, 0x025b, + 0x00ec, 0x00f6, 0x00f6, 0x00fe, 0x0111, 0x011c, 0x0125, 0x012c, + 0x0137, 0x0140, 0x014a, 0x0151, 0x0159, 0x0161, 0x016a, 0x0173, + 0x017c, 0x0184, 0x018c, 0x0194, 0x019f, 0x01aa, 0x01b2, 0x01bd, + 0x01d6, 0x01e0, 0x01f0, 0x01f9, 0x0203, 0x020f, 0x0218, 0x0220, + 0x0229, 0x0230, 0x0230, 0x0239, 0x0241, 0x024b, 0x0254, 0x025e, // Entry 40 - 7F - 0x0266, 0x0271, 0x0282, 0x028a, 0x0295, 0x0295, 0x029c, 0x02a6, - 0x02ae, 0x02bb, 0x02c4, 0x02cd, 0x02d8, 0x02d8, 0x02e2, 0x02ee, - 0x02f7, 0x0304, 0x030c, 0x0315, 0x031f, 0x0328, 0x0333, 0x033b, - 0x0342, 0x034a, 0x0354, 0x035d, 0x036b, 0x0374, 0x037f, 0x0389, - 0x0391, 0x039b, 0x03ab, 0x03b4, 0x03bf, 0x03cb, 0x03d3, 0x03de, - 0x03eb, 0x03f5, 0x03fe, 0x0407, 0x040f, 0x0419, 0x0422, 0x0435, - 0x043e, 0x0448, 0x0452, 0x0466, 0x047a, 0x048c, 0x0496, 0x049f, - 0x04aa, 0x04aa, 0x04b3, 0x04b9, 0x04c1, 0x04cc, 0x04cc, 0x04d5, + 0x0269, 0x0274, 0x0285, 0x028d, 0x0298, 0x0298, 0x029f, 0x02a9, + 0x02b1, 0x02be, 0x02c7, 0x02d0, 0x02db, 0x02db, 0x02e5, 0x02f1, + 0x02fa, 0x0307, 0x030f, 0x0318, 0x0322, 0x032b, 0x0336, 0x033e, + 0x0345, 0x034d, 0x0357, 0x0360, 0x036e, 0x0377, 0x0382, 0x038c, + 0x0394, 0x039e, 0x03ae, 0x03b7, 0x03c5, 0x03d1, 0x03d9, 0x03e4, + 0x03f1, 0x03fb, 0x0404, 0x040d, 0x0415, 0x041f, 0x0428, 0x043b, + 0x0444, 0x044e, 0x0458, 0x046c, 0x0480, 0x0492, 0x049c, 0x04a5, + 0x04b0, 0x04b0, 0x04b9, 0x04bf, 0x04c7, 0x04d2, 0x04d2, 0x04db, // Entry 80 - BF - 0x04df, 0x04eb, 0x04f5, 0x0502, 0x050a, 0x0513, 0x051a, 0x0528, - 0x0534, 0x053f, 0x0547, 0x0557, 0x0560, 0x056a, 0x0575, 0x0580, - 0x058a, 0x0592, 0x059b, 0x05a0, 0x05a8, 0x05b0, 0x05c0, 0x05ca, - 0x05d2, 0x05dc, 0x05e5, 0x05ef, 0x05f9, 0x0604, 0x0610, 0x061b, - 0x0624, 0x062e, 0x0636, 0x063f, 0x0648, 0x0651, 0x065a, 0x0664, - 0x066c, 0x0675, 0x067e, 0x0689, 0x0694, 0x069d, 0x06a5, 0x06ad, - 0x06b4, 0x06be, 0x06be, 0x06c7, 0x06cf, 0x06d9, 0x06d9, 0x06e5, - 0x06ed, 0x06ed, 0x06ed, 0x06f5, 0x06fd, 0x06fd, 0x06fd, 0x0706, + 0x04e5, 0x04f1, 0x04fb, 0x0508, 0x0510, 0x0519, 0x0520, 0x052e, + 0x053a, 0x0545, 0x054d, 0x055d, 0x0566, 0x0570, 0x057b, 0x0586, + 0x0590, 0x0598, 0x05a1, 0x05a6, 0x05ae, 0x05b6, 0x05c6, 0x05d0, + 0x05d8, 0x05e2, 0x05eb, 0x05f5, 0x05ff, 0x060a, 0x0616, 0x0621, + 0x062a, 0x0634, 0x063c, 0x0645, 0x064e, 0x0657, 0x0660, 0x066a, + 0x0672, 0x067b, 0x0684, 0x068f, 0x069a, 0x06a3, 0x06ac, 0x06b5, + 0x06bc, 0x06c6, 0x06c6, 0x06cf, 0x06d7, 0x06e1, 0x06e1, 0x06ed, + 0x06f5, 0x06f5, 0x06f5, 0x06fd, 0x0705, 0x0705, 0x0705, 0x070e, // Entry C0 - FF - 0x0706, 0x0716, 0x0716, 0x071f, 0x071f, 0x0729, 0x0729, 0x0734, - 0x0734, 0x0734, 0x0734, 0x0734, 0x0734, 0x073b, 0x073b, 0x0744, - 0x0744, 0x074d, 0x074d, 0x0758, 0x0758, 0x0760, 0x0760, 0x0760, - 0x0760, 0x0760, 0x0769, 0x0769, 0x0771, 0x0771, 0x0771, 0x0788, - 0x0793, 0x0793, 0x079a, 0x079a, 0x079a, 0x07a5, 0x07a5, 0x07a5, - 0x07a5, 0x07a5, 0x07ad, 0x07ad, 0x07ad, 0x07b8, 0x07b8, 0x07c0, - 0x07c0, 0x07c0, 0x07c0, 0x07c0, 0x07c0, 0x07ca, 0x07d2, 0x07d2, - 0x07d2, 0x07dc, 0x07e3, 0x07e3, 0x07ee, 0x07ee, 0x07f8, 0x0802, + 0x070e, 0x071e, 0x071e, 0x0727, 0x0727, 0x0731, 0x0731, 0x073c, + 0x073c, 0x073c, 0x073c, 0x073c, 0x073c, 0x0743, 0x0743, 0x074c, + 0x074c, 0x0755, 0x0755, 0x0760, 0x0760, 0x0768, 0x0768, 0x0768, + 0x0768, 0x0768, 0x0771, 0x0771, 0x0779, 0x0779, 0x0779, 0x0790, + 0x079b, 0x079b, 0x07a2, 0x07a2, 0x07a2, 0x07ad, 0x07ad, 0x07ad, + 0x07ad, 0x07ad, 0x07b5, 0x07b5, 0x07b5, 0x07c0, 0x07c0, 0x07c8, + 0x07c8, 0x07c8, 0x07c8, 0x07c8, 0x07c8, 0x07c8, 0x07d2, 0x07da, + 0x07da, 0x07da, 0x07e4, 0x07eb, 0x07eb, 0x07f6, 0x07f6, 0x0800, // Entry 100 - 13F - 0x0814, 0x0814, 0x0814, 0x0814, 0x082f, 0x082f, 0x0838, 0x0842, - 0x084b, 0x084b, 0x084b, 0x0855, 0x0855, 0x085e, 0x085e, 0x0871, - 0x0871, 0x087a, 0x087a, 0x0887, 0x0887, 0x0892, 0x089a, 0x08a2, - 0x08a2, 0x08a2, 0x08ac, 0x08ac, 0x08ac, 0x08ac, 0x08b6, 0x08b6, - 0x08b6, 0x08c1, 0x08c1, 0x08c8, 0x08c8, 0x08c8, 0x08c8, 0x08c8, - 0x08c8, 0x08c8, 0x08d4, 0x08da, 0x08e4, 0x08e4, 0x08e4, 0x08e4, - 0x08e4, 0x08eb, 0x08f8, 0x08f8, 0x08f8, 0x08f8, 0x08f8, 0x08f8, - 0x0905, 0x0905, 0x0905, 0x0905, 0x091b, 0x091b, 0x091b, 0x0922, + 0x080a, 0x081c, 0x081c, 0x081c, 0x081c, 0x0837, 0x0837, 0x0840, + 0x084a, 0x0853, 0x0853, 0x0853, 0x085d, 0x085d, 0x0866, 0x0866, + 0x0879, 0x0879, 0x0882, 0x0882, 0x088f, 0x088f, 0x089a, 0x08a2, + 0x08aa, 0x08aa, 0x08aa, 0x08b4, 0x08b4, 0x08b4, 0x08b4, 0x08be, + 0x08be, 0x08be, 0x08c9, 0x08c9, 0x08d0, 0x08d0, 0x08d0, 0x08d0, + 0x08d0, 0x08d0, 0x08d0, 0x08dc, 0x08e2, 0x08ec, 0x08ec, 0x08ec, + 0x08ec, 0x08ec, 0x08f3, 0x0900, 0x0900, 0x0900, 0x0900, 0x0900, + 0x0900, 0x090d, 0x090d, 0x090d, 0x090d, 0x0923, 0x0923, 0x0923, // Entry 140 - 17F - 0x092d, 0x092d, 0x092d, 0x0935, 0x0935, 0x0943, 0x0943, 0x094c, - 0x0960, 0x0960, 0x0968, 0x0970, 0x097a, 0x0983, 0x098d, 0x098d, - 0x098d, 0x0997, 0x09a0, 0x09aa, 0x09aa, 0x09aa, 0x09aa, 0x09aa, - 0x09b3, 0x09bd, 0x09c5, 0x09ce, 0x09ce, 0x09db, 0x09db, 0x09e3, - 0x09ed, 0x0a0c, 0x0a0c, 0x0a14, 0x0a14, 0x0a1b, 0x0a1b, 0x0a28, - 0x0a28, 0x0a28, 0x0a30, 0x0a3d, 0x0a49, 0x0a59, 0x0a63, 0x0a63, - 0x0a6c, 0x0a7f, 0x0a7f, 0x0a7f, 0x0a8b, 0x0a94, 0x0a9f, 0x0aa9, - 0x0ab2, 0x0abb, 0x0abb, 0x0ac5, 0x0acd, 0x0acd, 0x0acd, 0x0ad8, + 0x092a, 0x0935, 0x0935, 0x0935, 0x093d, 0x093d, 0x094b, 0x094b, + 0x0954, 0x0968, 0x0968, 0x0970, 0x0978, 0x0982, 0x098b, 0x0995, + 0x0995, 0x0995, 0x099f, 0x09a8, 0x09b2, 0x09b2, 0x09b2, 0x09b2, + 0x09b2, 0x09bb, 0x09c5, 0x09cd, 0x09d6, 0x09d6, 0x09e3, 0x09e3, + 0x09eb, 0x09f5, 0x0a14, 0x0a14, 0x0a1c, 0x0a1c, 0x0a23, 0x0a23, + 0x0a30, 0x0a30, 0x0a30, 0x0a38, 0x0a45, 0x0a51, 0x0a61, 0x0a6b, + 0x0a6b, 0x0a74, 0x0a87, 0x0a87, 0x0a87, 0x0a93, 0x0a9c, 0x0aa7, + 0x0ab1, 0x0aba, 0x0ac3, 0x0ac3, 0x0acd, 0x0ad5, 0x0ad5, 0x0ad5, // Entry 180 - 1BF - 0x0ad8, 0x0ad8, 0x0ad8, 0x0ae1, 0x0ae1, 0x0ae1, 0x0ae8, 0x0af8, - 0x0af8, 0x0b06, 0x0b06, 0x0b0f, 0x0b16, 0x0b1e, 0x0b26, 0x0b26, - 0x0b26, 0x0b31, 0x0b31, 0x0b39, 0x0b43, 0x0b4e, 0x0b4e, 0x0b56, - 0x0b56, 0x0b60, 0x0b60, 0x0b68, 0x0b70, 0x0b7c, 0x0b7c, 0x0b8a, - 0x0b92, 0x0b9c, 0x0bab, 0x0bab, 0x0bb6, 0x0bbf, 0x0bc6, 0x0bc6, - 0x0bd1, 0x0be8, 0x0bf0, 0x0bfa, 0x0bfa, 0x0bfa, 0x0bfa, 0x0c03, - 0x0c11, 0x0c11, 0x0c1e, 0x0c26, 0x0c47, 0x0c50, 0x0c58, 0x0c62, - 0x0c62, 0x0c6a, 0x0c76, 0x0c7f, 0x0c7f, 0x0c7f, 0x0c86, 0x0c97, + 0x0ae0, 0x0ae0, 0x0ae0, 0x0ae0, 0x0ae9, 0x0ae9, 0x0ae9, 0x0ae9, + 0x0af0, 0x0b00, 0x0b00, 0x0b0e, 0x0b0e, 0x0b17, 0x0b1e, 0x0b26, + 0x0b2e, 0x0b2e, 0x0b2e, 0x0b39, 0x0b39, 0x0b41, 0x0b4b, 0x0b56, + 0x0b56, 0x0b5e, 0x0b5e, 0x0b68, 0x0b68, 0x0b70, 0x0b78, 0x0b84, + 0x0b84, 0x0b92, 0x0b9a, 0x0ba4, 0x0bb3, 0x0bb3, 0x0bbe, 0x0bc7, + 0x0bce, 0x0bce, 0x0bd9, 0x0bf0, 0x0bf8, 0x0c02, 0x0c02, 0x0c02, + 0x0c02, 0x0c0b, 0x0c19, 0x0c19, 0x0c26, 0x0c2e, 0x0c4f, 0x0c58, + 0x0c60, 0x0c6a, 0x0c6a, 0x0c72, 0x0c7e, 0x0c87, 0x0c87, 0x0c87, // Entry 1C0 - 1FF - 0x0c9f, 0x0c9f, 0x0c9f, 0x0caa, 0x0caa, 0x0caa, 0x0caa, 0x0caa, - 0x0cb8, 0x0cb8, 0x0cc4, 0x0cd1, 0x0cdb, 0x0cdb, 0x0cf0, 0x0cf0, - 0x0cf0, 0x0cf0, 0x0cf0, 0x0cf0, 0x0cf0, 0x0cf0, 0x0cf0, 0x0cf8, - 0x0cf8, 0x0d01, 0x0d01, 0x0d01, 0x0d0b, 0x0d1a, 0x0d1a, 0x0d1a, - 0x0d23, 0x0d23, 0x0d23, 0x0d23, 0x0d23, 0x0d2a, 0x0d31, 0x0d3b, - 0x0d43, 0x0d43, 0x0d4d, 0x0d4d, 0x0d57, 0x0d57, 0x0d62, 0x0d6b, - 0x0d78, 0x0d80, 0x0d80, 0x0d90, 0x0d90, 0x0d98, 0x0d98, 0x0d98, - 0x0daa, 0x0daa, 0x0daa, 0x0db6, 0x0dbe, 0x0dbe, 0x0dbe, 0x0dbe, + 0x0c8e, 0x0c9f, 0x0ca7, 0x0ca7, 0x0ca7, 0x0cb2, 0x0cb2, 0x0cb2, + 0x0cb2, 0x0cb2, 0x0cc0, 0x0cc0, 0x0ccc, 0x0cd9, 0x0ce3, 0x0ce3, + 0x0cf8, 0x0cf8, 0x0cf8, 0x0cf8, 0x0cf8, 0x0cf8, 0x0cf8, 0x0cf8, + 0x0cf8, 0x0d00, 0x0d00, 0x0d09, 0x0d09, 0x0d09, 0x0d13, 0x0d22, + 0x0d22, 0x0d22, 0x0d2b, 0x0d2b, 0x0d2b, 0x0d2b, 0x0d2b, 0x0d34, + 0x0d3b, 0x0d45, 0x0d4d, 0x0d4d, 0x0d57, 0x0d57, 0x0d61, 0x0d61, + 0x0d6c, 0x0d75, 0x0d82, 0x0d8a, 0x0d8a, 0x0d9a, 0x0d9a, 0x0da2, + 0x0da2, 0x0da2, 0x0db4, 0x0db4, 0x0db4, 0x0dc0, 0x0dc8, 0x0dc8, // Entry 200 - 23F - 0x0dbe, 0x0dcd, 0x0dda, 0x0de8, 0x0df7, 0x0e01, 0x0e01, 0x0e1d, - 0x0e1d, 0x0e25, 0x0e25, 0x0e2f, 0x0e2f, 0x0e2f, 0x0e3b, 0x0e3b, - 0x0e45, 0x0e45, 0x0e45, 0x0e4e, 0x0e56, 0x0e56, 0x0e5f, 0x0e68, - 0x0e68, 0x0e68, 0x0e68, 0x0e73, 0x0e73, 0x0e73, 0x0e73, 0x0e73, - 0x0e82, 0x0e82, 0x0e8c, 0x0e8c, 0x0e8c, 0x0e8c, 0x0e97, 0x0ea1, - 0x0eac, 0x0eb8, 0x0ed5, 0x0edf, 0x0edf, 0x0eea, 0x0ef1, 0x0ef7, - 0x0ef7, 0x0ef7, 0x0ef7, 0x0ef7, 0x0ef7, 0x0ef7, 0x0f01, 0x0f0b, - 0x0f15, 0x0f1e, 0x0f1e, 0x0f29, 0x0f29, 0x0f33, 0x0f33, 0x0f3a, + 0x0dc8, 0x0dc8, 0x0dc8, 0x0dd7, 0x0de4, 0x0df2, 0x0e01, 0x0e0b, + 0x0e0b, 0x0e27, 0x0e27, 0x0e2f, 0x0e2f, 0x0e39, 0x0e39, 0x0e39, + 0x0e45, 0x0e45, 0x0e4f, 0x0e4f, 0x0e4f, 0x0e58, 0x0e60, 0x0e60, + 0x0e69, 0x0e72, 0x0e72, 0x0e72, 0x0e72, 0x0e7d, 0x0e7d, 0x0e7d, + 0x0e7d, 0x0e7d, 0x0e8c, 0x0e8c, 0x0e96, 0x0e96, 0x0e96, 0x0e96, + 0x0ea1, 0x0eab, 0x0eb6, 0x0ec2, 0x0ee0, 0x0eea, 0x0eea, 0x0ef5, + 0x0eff, 0x0f05, 0x0f05, 0x0f05, 0x0f05, 0x0f05, 0x0f05, 0x0f05, + 0x0f0f, 0x0f19, 0x0f23, 0x0f2c, 0x0f2c, 0x0f37, 0x0f37, 0x0f41, // Entry 240 - 27F - 0x0f3a, 0x0f3a, 0x0f45, 0x0f4e, 0x0f4e, 0x0f5a, 0x0f5a, 0x0f5a, - 0x0f5a, 0x0f5a, 0x0f7a, 0x0f81, 0x0f9e, 0x0fa6, 0x0fc1, 0x0fc1, - 0x0fd7, 0x1001, 0x1016, 0x1028, 0x103b, 0x104e, 0x1069, 0x107d, - 0x1091, 0x1091, 0x10a6, 0x10bc, 0x10e5, 0x10f0, 0x1108, 0x111f, - 0x1129, 0x1138, 0x114b, -} // Size: 1246 bytes - -const srLangStr string = "" + // Size: 8071 bytes + 0x0f41, 0x0f48, 0x0f48, 0x0f48, 0x0f53, 0x0f5c, 0x0f5c, 0x0f68, + 0x0f68, 0x0f68, 0x0f68, 0x0f68, 0x0f88, 0x0f8f, 0x0fac, 0x0fb4, + 0x0fcf, 0x0fcf, 0x0fe5, 0x100f, 0x1024, 0x1036, 0x1049, 0x105c, + 0x1077, 0x108b, 0x109f, 0x109f, 0x10b4, 0x10ca, 0x10f3, 0x10fe, + 0x1116, 0x112d, 0x1137, 0x1146, 0x115b, +} // Size: 1250 bytes + +const srLangStr string = "" + // Size: 8156 bytes "афарскиабхаскиавестанскиафрикансаканскиамхарскиарагонскиарапскиасамскиав" + "арскиајмараазербејџанскибашкирскибелорускибугарскибисламабамбарабенгалс" + "китибетанскибретонскибосанскикаталонскичеченскичаморокорзиканскикричешк" + @@ -24099,58 +25479,58 @@ const srLangStr string = "" + // Size: 8071 bytes "нцускизападни фризијскиирскишкотски гелскигалицијскигваранигуџаратиманк" + "схаусахебрејскихиндихири мотухрватскихаићанскимађарскијерменскихерероин" + "терлингваиндонежанскиинтерлингвеигбосечуански јиинупикидоисландскиитали" + - "јанскиинуитскијапанскијаванскигрузијскиконгокикујуквањамаказашкигренлан" + - "дскикмерскиканадакорејскиканурикашмирскикурдскикомикорнволскикиргискила" + - "тинскилуксембуршкигандалимбуршкилингалалаоскилитванскилуба-катангалетон" + - "скималгашкимаршалскимаорскимакедонскималајаламмонголскимаратималајскима" + - "лтешкибурманскинаурускисеверни ндебеленепалскиндонгахоландскинорвешки н" + - "инорскнорвешки букмолјужни ндебеленавахоњанџаокситанскиоџибвеоромоодија" + - "осетинскипенџапскипалипољскипаштунскипортугалскикечуароманшкирундирумун" + - "скирускикињаруандасанскритсардинскисиндисеверни самисангосинхалешкислов" + - "ачкисловеначкисамоанскишонасомалскиалбанскисрпскисвазисесотосунданскишв" + - "едскисвахилитамилскителугутаџичкитајскитигрињатуркменскицванатонганскит" + - "урскицонгататарскитахићанскиујгурскиукрајинскиурдуузбечкивендавијетнамс" + - "киволапиквалонскиволофкосајидишјорубаџуаншкикинескизулуацешкиаколиаданг" + - "меадигејскиафрихилиагемаинуакадијскиалеутскијужноалтајскистароенглескиа" + - "нгикаарамејскимапучеарапахоаравачкиасуастуријскиавадибелучкибалијскибас" + - "абеџабембабеназападни белучкибоџпурибиколбинисисикабрајбодобурјатскибуг" + - "ијскиблинскикадокарипскиатсамсебуанскичигачипчачагатајчучкимаричинучкич" + - "октавскичипевјанскичерокичејенскицентрални курдскикоптскикримскотатарск" + - "исејшелски креолски францускикашупскидакотадаргинскитаитаделаверскислеј" + - "видогрипскидинказармадогридоњи лужичкосрпскидуаласредњехоландскиџола фо" + - "њиђуладазагаембуефичкистароегипатскиекаџукеламитскисредњеенглескиевондо" + - "фангфилипинскифонсредњефранцускистарофранцускисевернофризијскиисточнофр" + - "изијскифриулскигагагаузгајогбајагеезгилбертскисредњи високонемачкистаро" + - "немачкигондигоронталоготскигребостарогрчкиШвајцарски немачкигусигвичинс" + - "кихаидахавајскихилигајнонскихетитскихмоншкигорњи лужичкосрпскихупаибанс" + - "киибибиоилокоингушкиложбаннгомбамачамејудео-персијскијудео-арапскикара-" + - "калпашкикабилекачинскиџукамбакавикабардијскитјапмакондезеленортскикорок" + - "асикотанешкикојра чииникакокаленџинскикимбундукоми-пермскиконканикосрен" + - "скикпелекарачајско-балкарскикриокарелскикурукшамбалабафијакелнскикумичк" + - "икутенајладинолангиландаламбалезгинскилакотамонголозисеверни лурилуба-л" + - "улуалуисењолундалуомизолујиамадурскимагахимаитилимакасарскимандингомаса" + - "јскимокшамандармендемеруморисјенсредњеирскимакува-митометамикмакминангк" + - "абауманџурскиманипурскимохочкимосимундангВише језикакришкимирандскимарв" + - "ариерзјамазандеранскинапуљскинаманисконемачкиневариниасниуејскиквасионг" + - "иембунногајскистаронордијскинкосеверни сотонуеркласични неварскињамвези" + - "њанколењоронзимаосагеосмански турскипангасинанскипахлавипампангапапиаме" + - "нтопалаускинигеријски пиџинстароперсијскифеничанскипонпејскипрускистаро" + - "окситанскикичераџастанскирапануираротонганскиромборомскицинцарскируасан" + - "давејакутскисамаријански арамејскисамбурусасаксанталингамбајсангусицили" + - "јанскишкотскијужнокурдскисенаселкупскикојраборо сенистароирскиташелхитш" + - "анскисидамојужни самилуле самиинари самисколтски лапонскисонинкесогдијс" + - "кисранан тонгосерерскисахосукумасусусумерскикоморскисиријачкисиријскити" + - "мнетесотеренотетумтигретивтокелауклингонскитлингиттамашекњаса тонгаток " + - "писинтарокоцимшиантумбукатувалутасавактувинскицентралноатласки тамазигт" + - "удмуртскиугаритскиумбундуРутваиводскивунџовалсерскиволајтаварајскивашов" + - "арлпирикалмичкисогајаојапскијангбенјембакантонскизапотечкиблисимболизен" + - "агастандардни марокански тамазигтзунибез лингвистичког садржајазазасавр" + - "емени стандардни арапскишвајцарски високи немачкиенглески (Велика Брита" + - "нија)енглески (Сједињене Америчке Државе)нискосаксонскифламанскипортуга" + - "лски (Португал)молдавскисрпскохрватскикисвахилипоједностављени кинескит" + - "радиционални кинески" - -var srLangIdx = []uint16{ // 613 elements + "јанскиинуктитутскијапанскијаванскигрузијскиконгокикујуквањамаказашкигре" + + "нландскикмерскиканадакорејскиканурикашмирскикурдскикомикорнволскикиргис" + + "килатинскилуксембуршкигандалимбуршкилингалалаоскилитванскилуба-катангал" + + "етонскималгашкимаршалскимаорскимакедонскималајаламмонголскимаратималајс" + + "кималтешкибурманскинаурускисеверни ндебеленепалскиндонгахоландскинорвеш" + + "ки нинорскнорвешки букмолјужни ндебеленавахоњанџаокситанскиоџибвеоромоо" + + "дијаосетинскипенџапскипалипољскипаштунскипортугалскикечуароманшкирундир" + + "умунскирускикињаруандасанскритсардинскисиндисеверни самисангосинхалешки" + + "словачкисловеначкисамоанскишонасомалскиалбанскисрпскисвазисесотосунданс" + + "кишведскисвахилитамилскителугутаџичкитајскитигрињатуркменскицванатонган" + + "скитурскицонгататарскитахићанскиујгурскиукрајинскиурдуузбечкивендавијет" + + "намскиволапиквалонскиволофкосајидишјорубаџуаншкикинескизулуацешкиаколиа" + + "дангмеадигејскиафрихилиагемаинуакадијскиалеутскијужноалтајскистароенгле" + + "скиангикаарамејскимапучеарапахоаравачкиасуастуријскиавадибелучкибалијск" + + "ибасабеџабембабеназападни белучкибоџпурибиколбинисисикабрајбодобурјатск" + + "ибугијскиблинскикадокарипскиатсамсебуанскичигачипчачагатајчучкимаричину" + + "чкичоктавскичипевјанскичерокичејенскицентрални курдскикоптскикримскотат" + + "арскисејшелски креолски францускикашупскидакотадаргинскитаитаделаверски" + + "слејвидогрипскидинказармадогридоњи лужичкосрпскидуаласредњехоландскиџол" + + "а фоњиђуладазагаембуефичкистароегипатскиекаџукеламитскисредњеенглескиев" + + "ондофангфилипинскифонкајунски францускисредњефранцускистарофранцускисев" + + "ернофризијскиисточнофризијскифриулскигагагаузгајогбајагеезгилбертскисре" + + "дњи високонемачкистаронемачкигондигоронталоготскигребостарогрчкинемачки" + + " (Швајцарска)гусигвичинскихаидахавајскихилигајнонскихетитскихмоншкигорњи" + + " лужичкосрпскихупаибанскиибибиоилокоингушкиложбаннгомбамачамејудео-перси" + + "јскијудео-арапскикара-калпашкикабилекачинскиџукамбакавикабардијскитјапм" + + "акондезеленортскикорокасикотанешкикојра чииникакокаленџинскикимбундуком" + + "и-пермскиконканикосренскикпелекарачајско-балкарскикриокарелскикурукшамб" + + "алабафијакелнскикумичкикутенајладинолангиландаламбалезгинскилакотамонго" + + "луизијански креолскилозисеверни лурилуба-лулуалуисењолундалуомизолујиам" + + "адурскимагахимаитилимакасарскимандингомасајскимокшамандармендемеруморис" + + "јенсредњеирскимакува-митометамикмакминангкабауманџурскиманипурскимохочк" + + "имосимундангВише језикакришкимирандскимарвариерзјамазандеранскинапуљски" + + "наманисконемачкиневариниасниуејскиквасионгиембунногајскистаронордијскин" + + "косеверни сотонуеркласични неварскињамвезињанколењоронзимаосагеосмански" + + " турскипангасинанскипахлавипампангапапијаментопалаускинигеријски пиџинст" + + "ароперсијскифеничанскипонпејскипрускистароокситанскикичераџастанскирапа" + + "нуираротонганскиромборомскицинцарскируасандавесахасамаријански арамејск" + + "исамбурусасаксанталингамбајсангусицилијанскишкотскијужнокурдскисенаселк" + + "упскикојраборо сенистароирскиташелхитшанскисидамојужни самилуле самиина" + + "ри самисколт самисонинкесогдијскисранан тонгосерерскисахосукумасусусуме" + + "рскикоморскисиријачкисиријскитимнетесотеренотетумтигретивтокелауклингон" + + "скитлингиттамашекњаса тонгаток писинтарокоцимшиантумбукатувалутасавакту" + + "винскицентралноатласки тамазигтудмуртскиугаритскиумбундунепознат језикв" + + "аиводскивунџовалсерскиволајтаварајскивашоварлпирикалмичкисогајаојапскиј" + + "ангбенјембакантонскизапотечкиблисимболизенагастандардни марокански тама" + + "зигтзунибез лингвистичког садржајазазасавремени стандардни арапскишвајц" + + "арски високи немачкиенглески (Велика Британија)енглески (Сједињене Амер" + + "ичке Државе)нискосаксонскифламанскипортугалски (Португал)молдавскисрпск" + + "охрватскикисвахилипоједностављени кинескитрадиционални кинески" + +var srLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x000e, 0x001c, 0x0030, 0x0040, 0x004e, 0x005e, 0x0070, 0x007e, 0x008c, 0x009a, 0x00a6, 0x00c0, 0x00d2, 0x00e4, 0x00f4, @@ -24162,85 +25542,85 @@ var srLangIdx = []uint16{ // 613 elements 0x0372, 0x037c, 0x038d, 0x039d, 0x03af, 0x03bf, 0x03d1, 0x03dd, // Entry 40 - 7F 0x03f3, 0x040b, 0x0421, 0x0429, 0x0440, 0x044c, 0x0452, 0x0464, - 0x047a, 0x048a, 0x049a, 0x04aa, 0x04bc, 0x04c6, 0x04d2, 0x04e0, - 0x04ee, 0x0504, 0x0512, 0x051e, 0x052e, 0x053a, 0x054c, 0x055a, - 0x0562, 0x0576, 0x0586, 0x0596, 0x05ae, 0x05b8, 0x05ca, 0x05d8, - 0x05e4, 0x05f6, 0x060d, 0x061d, 0x062d, 0x063f, 0x064d, 0x0661, - 0x0673, 0x0685, 0x0691, 0x06a1, 0x06b1, 0x06c3, 0x06d3, 0x06f0, - 0x0700, 0x070c, 0x071e, 0x073d, 0x075a, 0x0773, 0x077f, 0x0789, - 0x079d, 0x07a9, 0x07b3, 0x07bd, 0x07cf, 0x07e1, 0x07e9, 0x07f5, + 0x047a, 0x0492, 0x04a2, 0x04b2, 0x04c4, 0x04ce, 0x04da, 0x04e8, + 0x04f6, 0x050c, 0x051a, 0x0526, 0x0536, 0x0542, 0x0554, 0x0562, + 0x056a, 0x057e, 0x058e, 0x059e, 0x05b6, 0x05c0, 0x05d2, 0x05e0, + 0x05ec, 0x05fe, 0x0615, 0x0625, 0x0635, 0x0647, 0x0655, 0x0669, + 0x067b, 0x068d, 0x0699, 0x06a9, 0x06b9, 0x06cb, 0x06db, 0x06f8, + 0x0708, 0x0714, 0x0726, 0x0745, 0x0762, 0x077b, 0x0787, 0x0791, + 0x07a5, 0x07b1, 0x07bb, 0x07c5, 0x07d7, 0x07e9, 0x07f1, 0x07fd, // Entry 80 - BF - 0x0807, 0x081d, 0x0827, 0x0833, 0x0841, 0x0851, 0x085b, 0x086f, - 0x087f, 0x0891, 0x089b, 0x08b2, 0x08bc, 0x08d0, 0x08e0, 0x08f4, - 0x0906, 0x090e, 0x091e, 0x092e, 0x093a, 0x0944, 0x0950, 0x0962, - 0x0970, 0x097e, 0x098e, 0x099a, 0x09a8, 0x09b4, 0x09c2, 0x09d6, - 0x09e0, 0x09f2, 0x09fe, 0x0a08, 0x0a18, 0x0a2c, 0x0a3c, 0x0a50, - 0x0a58, 0x0a66, 0x0a70, 0x0a86, 0x0a94, 0x0aa4, 0x0aae, 0x0ab6, - 0x0ac0, 0x0acc, 0x0ada, 0x0ae8, 0x0af0, 0x0afc, 0x0b06, 0x0b14, - 0x0b26, 0x0b26, 0x0b36, 0x0b3e, 0x0b46, 0x0b58, 0x0b58, 0x0b68, + 0x080f, 0x0825, 0x082f, 0x083b, 0x0849, 0x0859, 0x0863, 0x0877, + 0x0887, 0x0899, 0x08a3, 0x08ba, 0x08c4, 0x08d8, 0x08e8, 0x08fc, + 0x090e, 0x0916, 0x0926, 0x0936, 0x0942, 0x094c, 0x0958, 0x096a, + 0x0978, 0x0986, 0x0996, 0x09a2, 0x09b0, 0x09bc, 0x09ca, 0x09de, + 0x09e8, 0x09fa, 0x0a06, 0x0a10, 0x0a20, 0x0a34, 0x0a44, 0x0a58, + 0x0a60, 0x0a6e, 0x0a78, 0x0a8e, 0x0a9c, 0x0aac, 0x0ab6, 0x0abe, + 0x0ac8, 0x0ad4, 0x0ae2, 0x0af0, 0x0af8, 0x0b04, 0x0b0e, 0x0b1c, + 0x0b2e, 0x0b2e, 0x0b3e, 0x0b46, 0x0b4e, 0x0b60, 0x0b60, 0x0b70, // Entry C0 - FF - 0x0b68, 0x0b82, 0x0b9c, 0x0ba8, 0x0bba, 0x0bc6, 0x0bc6, 0x0bd4, - 0x0bd4, 0x0bd4, 0x0be4, 0x0be4, 0x0be4, 0x0bea, 0x0bea, 0x0bfe, - 0x0bfe, 0x0c08, 0x0c16, 0x0c26, 0x0c26, 0x0c2e, 0x0c2e, 0x0c2e, - 0x0c2e, 0x0c36, 0x0c40, 0x0c40, 0x0c48, 0x0c48, 0x0c48, 0x0c65, - 0x0c73, 0x0c7d, 0x0c85, 0x0c85, 0x0c85, 0x0c91, 0x0c91, 0x0c91, - 0x0c99, 0x0c99, 0x0ca1, 0x0ca1, 0x0cb3, 0x0cc3, 0x0cc3, 0x0cd1, - 0x0cd1, 0x0cd9, 0x0ce9, 0x0ce9, 0x0cf3, 0x0d05, 0x0d0d, 0x0d17, - 0x0d25, 0x0d2f, 0x0d37, 0x0d45, 0x0d57, 0x0d6d, 0x0d79, 0x0d89, + 0x0b70, 0x0b8a, 0x0ba4, 0x0bb0, 0x0bc2, 0x0bce, 0x0bce, 0x0bdc, + 0x0bdc, 0x0bdc, 0x0bec, 0x0bec, 0x0bec, 0x0bf2, 0x0bf2, 0x0c06, + 0x0c06, 0x0c10, 0x0c1e, 0x0c2e, 0x0c2e, 0x0c36, 0x0c36, 0x0c36, + 0x0c36, 0x0c3e, 0x0c48, 0x0c48, 0x0c50, 0x0c50, 0x0c50, 0x0c6d, + 0x0c7b, 0x0c85, 0x0c8d, 0x0c8d, 0x0c8d, 0x0c99, 0x0c99, 0x0c99, + 0x0ca1, 0x0ca1, 0x0ca9, 0x0ca9, 0x0cbb, 0x0ccb, 0x0ccb, 0x0cd9, + 0x0cd9, 0x0ce1, 0x0cf1, 0x0cf1, 0x0cfb, 0x0cfb, 0x0d0d, 0x0d15, + 0x0d1f, 0x0d2d, 0x0d37, 0x0d3f, 0x0d4d, 0x0d5f, 0x0d75, 0x0d81, // Entry 100 - 13F - 0x0daa, 0x0db8, 0x0db8, 0x0dd6, 0x0e0c, 0x0e1c, 0x0e28, 0x0e3a, - 0x0e44, 0x0e58, 0x0e64, 0x0e76, 0x0e80, 0x0e8a, 0x0e94, 0x0eb7, - 0x0eb7, 0x0ec1, 0x0edf, 0x0ef0, 0x0ef8, 0x0f04, 0x0f0c, 0x0f18, - 0x0f18, 0x0f34, 0x0f40, 0x0f52, 0x0f6e, 0x0f6e, 0x0f7a, 0x0f7a, - 0x0f82, 0x0f96, 0x0f96, 0x0f9c, 0x0f9c, 0x0fba, 0x0fd6, 0x0fd6, - 0x0ff6, 0x1016, 0x1026, 0x102a, 0x1036, 0x1036, 0x103e, 0x1048, - 0x1048, 0x1050, 0x1064, 0x1064, 0x108b, 0x10a3, 0x10a3, 0x10ad, - 0x10bf, 0x10cb, 0x10d5, 0x10e9, 0x110c, 0x110c, 0x110c, 0x1114, + 0x0d91, 0x0db2, 0x0dc0, 0x0dc0, 0x0dde, 0x0e14, 0x0e24, 0x0e30, + 0x0e42, 0x0e4c, 0x0e60, 0x0e6c, 0x0e7e, 0x0e88, 0x0e92, 0x0e9c, + 0x0ebf, 0x0ebf, 0x0ec9, 0x0ee7, 0x0ef8, 0x0f00, 0x0f0c, 0x0f14, + 0x0f20, 0x0f20, 0x0f3c, 0x0f48, 0x0f5a, 0x0f76, 0x0f76, 0x0f82, + 0x0f82, 0x0f8a, 0x0f9e, 0x0f9e, 0x0fa4, 0x0fc7, 0x0fe5, 0x1001, + 0x1001, 0x1021, 0x1041, 0x1051, 0x1055, 0x1061, 0x1061, 0x1069, + 0x1073, 0x1073, 0x107b, 0x108f, 0x108f, 0x10b6, 0x10ce, 0x10ce, + 0x10d8, 0x10ea, 0x10f6, 0x1100, 0x1114, 0x1139, 0x1139, 0x1139, // Entry 140 - 17F - 0x1126, 0x1130, 0x1130, 0x1140, 0x1140, 0x115a, 0x116a, 0x1178, - 0x119d, 0x119d, 0x11a5, 0x11b3, 0x11bf, 0x11c9, 0x11d7, 0x11d7, - 0x11d7, 0x11e3, 0x11ef, 0x11fb, 0x1218, 0x1231, 0x1231, 0x124a, - 0x1256, 0x1266, 0x126a, 0x1274, 0x127c, 0x1292, 0x1292, 0x129a, - 0x12a8, 0x12be, 0x12be, 0x12c6, 0x12c6, 0x12ce, 0x12e0, 0x12f5, - 0x12f5, 0x12f5, 0x12fd, 0x1313, 0x1323, 0x133a, 0x1348, 0x135a, - 0x1364, 0x138b, 0x1393, 0x1393, 0x13a3, 0x13ad, 0x13bb, 0x13c7, - 0x13d5, 0x13e3, 0x13f1, 0x13fd, 0x1407, 0x1411, 0x141b, 0x142d, + 0x1141, 0x1153, 0x115d, 0x115d, 0x116d, 0x116d, 0x1187, 0x1197, + 0x11a5, 0x11ca, 0x11ca, 0x11d2, 0x11e0, 0x11ec, 0x11f6, 0x1204, + 0x1204, 0x1204, 0x1210, 0x121c, 0x1228, 0x1245, 0x125e, 0x125e, + 0x1277, 0x1283, 0x1293, 0x1297, 0x12a1, 0x12a9, 0x12bf, 0x12bf, + 0x12c7, 0x12d5, 0x12eb, 0x12eb, 0x12f3, 0x12f3, 0x12fb, 0x130d, + 0x1322, 0x1322, 0x1322, 0x132a, 0x1340, 0x1350, 0x1367, 0x1375, + 0x1387, 0x1391, 0x13b8, 0x13c0, 0x13c0, 0x13d0, 0x13da, 0x13e8, + 0x13f4, 0x1402, 0x1410, 0x141e, 0x142a, 0x1434, 0x143e, 0x1448, // Entry 180 - 1BF - 0x142d, 0x142d, 0x142d, 0x1439, 0x1439, 0x1443, 0x144b, 0x1462, - 0x1462, 0x1475, 0x1483, 0x148d, 0x1493, 0x149b, 0x14a5, 0x14a5, - 0x14a5, 0x14b5, 0x14b5, 0x14c1, 0x14cf, 0x14e3, 0x14f3, 0x1503, - 0x1503, 0x150d, 0x1519, 0x1523, 0x152b, 0x153b, 0x1551, 0x1566, - 0x156e, 0x157a, 0x1590, 0x15a2, 0x15b6, 0x15c4, 0x15cc, 0x15cc, - 0x15da, 0x15ef, 0x15fb, 0x160d, 0x161b, 0x161b, 0x161b, 0x1625, - 0x163f, 0x163f, 0x164f, 0x1657, 0x166f, 0x167b, 0x1683, 0x1693, - 0x1693, 0x169f, 0x16af, 0x16bf, 0x16db, 0x16db, 0x16e1, 0x16f8, + 0x145a, 0x145a, 0x145a, 0x145a, 0x1466, 0x1466, 0x1470, 0x1497, + 0x149f, 0x14b6, 0x14b6, 0x14c9, 0x14d7, 0x14e1, 0x14e7, 0x14ef, + 0x14f9, 0x14f9, 0x14f9, 0x1509, 0x1509, 0x1515, 0x1523, 0x1537, + 0x1547, 0x1557, 0x1557, 0x1561, 0x156d, 0x1577, 0x157f, 0x158f, + 0x15a5, 0x15ba, 0x15c2, 0x15ce, 0x15e4, 0x15f6, 0x160a, 0x1618, + 0x1620, 0x1620, 0x162e, 0x1643, 0x164f, 0x1661, 0x166f, 0x166f, + 0x166f, 0x1679, 0x1693, 0x1693, 0x16a3, 0x16ab, 0x16c3, 0x16cf, + 0x16d7, 0x16e7, 0x16e7, 0x16f3, 0x1703, 0x1713, 0x172f, 0x172f, // Entry 1C0 - 1FF - 0x1700, 0x1721, 0x172f, 0x173d, 0x1745, 0x174f, 0x1759, 0x1776, - 0x1790, 0x179e, 0x17ae, 0x17c2, 0x17d2, 0x17d2, 0x17f1, 0x17f1, - 0x17f1, 0x180d, 0x180d, 0x1821, 0x1821, 0x1821, 0x1833, 0x183f, - 0x185d, 0x1865, 0x1865, 0x187b, 0x1889, 0x18a3, 0x18a3, 0x18a3, - 0x18ad, 0x18b9, 0x18b9, 0x18b9, 0x18b9, 0x18cb, 0x18d1, 0x18df, - 0x18ef, 0x191a, 0x1928, 0x1932, 0x1940, 0x1940, 0x194e, 0x1958, - 0x1970, 0x197e, 0x197e, 0x1996, 0x1996, 0x199e, 0x199e, 0x19b0, - 0x19cb, 0x19df, 0x19df, 0x19ef, 0x19fb, 0x19fb, 0x1a07, 0x1a07, + 0x1735, 0x174c, 0x1754, 0x1775, 0x1783, 0x1791, 0x1799, 0x17a3, + 0x17ad, 0x17ca, 0x17e4, 0x17f2, 0x1802, 0x1818, 0x1828, 0x1828, + 0x1847, 0x1847, 0x1847, 0x1863, 0x1863, 0x1877, 0x1877, 0x1877, + 0x1889, 0x1895, 0x18b3, 0x18bb, 0x18bb, 0x18d1, 0x18df, 0x18f9, + 0x18f9, 0x18f9, 0x1903, 0x190f, 0x190f, 0x190f, 0x190f, 0x1921, + 0x1927, 0x1935, 0x193d, 0x1968, 0x1976, 0x1980, 0x198e, 0x198e, + 0x199c, 0x19a6, 0x19be, 0x19cc, 0x19cc, 0x19e4, 0x19e4, 0x19ec, + 0x19ec, 0x19fe, 0x1a19, 0x1a2d, 0x1a2d, 0x1a3d, 0x1a49, 0x1a49, // Entry 200 - 23F - 0x1a07, 0x1a1a, 0x1a2b, 0x1a3e, 0x1a5f, 0x1a6d, 0x1a7f, 0x1a96, - 0x1aa6, 0x1aae, 0x1aae, 0x1aba, 0x1ac2, 0x1ad2, 0x1ae2, 0x1af4, - 0x1b04, 0x1b04, 0x1b04, 0x1b0e, 0x1b16, 0x1b22, 0x1b2c, 0x1b36, - 0x1b3c, 0x1b4a, 0x1b4a, 0x1b5e, 0x1b6c, 0x1b6c, 0x1b7a, 0x1b8d, - 0x1b9e, 0x1b9e, 0x1baa, 0x1baa, 0x1bb8, 0x1bb8, 0x1bc6, 0x1bd2, - 0x1be0, 0x1bf0, 0x1c21, 0x1c33, 0x1c45, 0x1c53, 0x1c59, 0x1c5f, - 0x1c5f, 0x1c5f, 0x1c5f, 0x1c5f, 0x1c6b, 0x1c6b, 0x1c75, 0x1c87, - 0x1c95, 0x1ca5, 0x1cad, 0x1cbd, 0x1cbd, 0x1ccd, 0x1ccd, 0x1cd5, + 0x1a55, 0x1a55, 0x1a55, 0x1a68, 0x1a79, 0x1a8c, 0x1a9f, 0x1aad, + 0x1abf, 0x1ad6, 0x1ae6, 0x1aee, 0x1aee, 0x1afa, 0x1b02, 0x1b12, + 0x1b22, 0x1b34, 0x1b44, 0x1b44, 0x1b44, 0x1b4e, 0x1b56, 0x1b62, + 0x1b6c, 0x1b76, 0x1b7c, 0x1b8a, 0x1b8a, 0x1b9e, 0x1bac, 0x1bac, + 0x1bba, 0x1bcd, 0x1bde, 0x1bde, 0x1bea, 0x1bea, 0x1bf8, 0x1bf8, + 0x1c06, 0x1c12, 0x1c20, 0x1c30, 0x1c61, 0x1c73, 0x1c85, 0x1c93, + 0x1cae, 0x1cb4, 0x1cb4, 0x1cb4, 0x1cb4, 0x1cb4, 0x1cc0, 0x1cc0, + 0x1cca, 0x1cdc, 0x1cea, 0x1cfa, 0x1d02, 0x1d12, 0x1d12, 0x1d22, // Entry 240 - 27F - 0x1cdb, 0x1ce7, 0x1cf5, 0x1cff, 0x1cff, 0x1d11, 0x1d23, 0x1d37, - 0x1d37, 0x1d43, 0x1d7d, 0x1d85, 0x1db7, 0x1dbf, 0x1df5, 0x1df5, - 0x1df5, 0x1e25, 0x1e25, 0x1e25, 0x1e57, 0x1e9a, 0x1e9a, 0x1e9a, - 0x1e9a, 0x1e9a, 0x1e9a, 0x1e9a, 0x1eb6, 0x1ec8, 0x1ec8, 0x1ef1, - 0x1f03, 0x1f1f, 0x1f31, 0x1f5e, 0x1f87, -} // Size: 1250 bytes - -const srLatnLangStr string = "" + // Size: 4236 bytes + 0x1d22, 0x1d2a, 0x1d30, 0x1d3c, 0x1d4a, 0x1d54, 0x1d54, 0x1d66, + 0x1d78, 0x1d8c, 0x1d8c, 0x1d98, 0x1dd2, 0x1dda, 0x1e0c, 0x1e14, + 0x1e4a, 0x1e4a, 0x1e4a, 0x1e7a, 0x1e7a, 0x1e7a, 0x1eac, 0x1eef, + 0x1eef, 0x1eef, 0x1eef, 0x1eef, 0x1eef, 0x1eef, 0x1f0b, 0x1f1d, + 0x1f1d, 0x1f46, 0x1f58, 0x1f74, 0x1f86, 0x1fb3, 0x1fdc, +} // Size: 1254 bytes + +const srLatnLangStr string = "" + // Size: 4281 bytes "afarskiabhaskiavestanskiafrikansakanskiamharskiaragonskiarapskiasamskiav" + "arskiajmaraazerbejdžanskibaškirskibeloruskibugarskibislamabambarabengals" + "kitibetanskibretonskibosanskikatalonskičečenskičamorokorzikanskikričeški" + @@ -24249,58 +25629,58 @@ const srLatnLangStr string = "" + // Size: 4236 bytes "cuskizapadni frizijskiirskiškotski gelskigalicijskigvaranigudžaratimanks" + "hausahebrejskihindihiri motuhrvatskihaićanskimađarskijermenskihererointe" + "rlingvaindonežanskiinterlingveigbosečuanski jiinupikidoislandskiitalijan" + - "skiinuitskijapanskijavanskigruzijskikongokikujukvanjamakazaškigrenlandsk" + - "ikmerskikanadakorejskikanurikašmirskikurdskikomikornvolskikirgiskilatins" + - "kiluksemburškigandalimburškilingalalaoskilitvanskiluba-katangaletonskima" + - "lgaškimaršalskimaorskimakedonskimalajalammongolskimaratimalajskimalteški" + - "burmanskinauruskiseverni ndebelenepalskindongaholandskinorveški ninorskn" + - "orveški bukmoljužni ndebelenavahonjandžaoksitanskiodžibveoromoodijaoseti" + - "nskipendžapskipalipoljskipaštunskiportugalskikečuaromanškirundirumunskir" + - "uskikinjaruandasanskritsardinskisindiseverni samisangosinhaleškislovački" + - "slovenačkisamoanskišonasomalskialbanskisrpskisvazisesotosundanskišvedski" + - "svahilitamilskitelugutadžičkitajskitigrinjaturkmenskicvanatonganskitursk" + - "icongatatarskitahićanskiujgurskiukrajinskiurduuzbečkivendavijetnamskivol" + - "apikvalonskivolofkosajidišjorubadžuanškikineskizuluaceškiakoliadangmeadi" + - "gejskiafrihiliagemainuakadijskialeutskijužnoaltajskistaroengleskiangikaa" + - "ramejskimapučearapahoaravačkiasuasturijskiavadibelučkibalijskibasabedžab" + - "embabenazapadni belučkibodžpuribikolbinisisikabrajbodoburjatskibugijskib" + - "linskikadokaripskiatsamsebuanskičigačipčačagatajčučkimaričinučkičoktavsk" + - "ičipevjanskičerokičejenskicentralni kurdskikoptskikrimskotatarskisejšels" + - "ki kreolski francuskikašupskidakotadarginskitaitadelaverskislejvidogrips" + - "kidinkazarmadogridonji lužičkosrpskidualasrednjeholandskidžola fonjiđula" + - "dazagaembuefičkistaroegipatskiekadžukelamitskisrednjeengleskievondofangf" + - "ilipinskifonsrednjefrancuskistarofrancuskisevernofrizijskiistočnofrizijs" + - "kifriulskigagagauzgajogbajageezgilbertskisrednji visokonemačkistaronemač" + - "kigondigorontalogotskigrebostarogrčkiŠvajcarski nemačkigusigvičinskihaid" + - "ahavajskihiligajnonskihetitskihmonškigornji lužičkosrpskihupaibanskiibib" + - "ioilokoinguškiložbanngombamačamejudeo-persijskijudeo-arapskikara-kalpašk" + - "ikabilekačinskidžukambakavikabardijskitjapmakondezelenortskikorokasikota" + - "neškikojra čiinikakokalendžinskikimbundukomi-permskikonkanikosrenskikpel" + - "ekaračajsko-balkarskikriokarelskikurukšambalabafijakelnskikumičkikutenaj" + - "ladinolangilandalambalezginskilakotamongoloziseverni luriluba-lulualuise" + - "njolundaluomizolujiamadurskimagahimaitilimakasarskimandingomasajskimokša" + - "mandarmendemerumorisjensrednjeirskimakuva-mitometamikmakminangkabaumandž" + - "urskimanipurskimohočkimosimundangViše jezikakriškimirandskimarvarierzjam" + - "azanderanskinapuljskinamaniskonemačkinevariniasniuejskikvasiongiembunnog" + - "ajskistaronordijskinkoseverni sotonuerklasični nevarskinjamvezinjankolen" + - "joronzimaosageosmanski turskipangasinanskipahlavipampangapapiamentopalau" + - "skinigerijski pidžinstaropersijskifeničanskiponpejskipruskistarooksitans" + - "kikičeradžastanskirapanuirarotonganskiromboromskicincarskiruasandavejaku" + - "tskisamarijanski aramejskisamburusasaksantalingambajsangusicilijanskiško" + - "tskijužnokurdskisenaselkupskikojraboro senistaroirskitašelhitšanskisidam" + - "ojužni samilule samiinari samiskoltski laponskisoninkesogdijskisranan to" + - "ngosererskisahosukumasususumerskikomorskisirijačkisirijskitimnetesoteren" + - "otetumtigretivtokelauklingonskitlingittamašeknjasa tongatok pisintarokoc" + - "imšiantumbukatuvalutasavaktuvinskicentralnoatlaski tamazigtudmurtskiugar" + - "itskiumbunduRutvaivodskivundžovalserskivolajtavarajskivašovarlpirikalmič" + - "kisogajaojapskijangbenjembakantonskizapotečkiblisimbolizenagastandardni " + - "marokanski tamazigtzunibez lingvističkog sadržajazazasavremeni standardn" + - "i arapskišvajcarski visoki nemačkiengleski (Velika Britanija)engleski (S" + - "jedinjene Američke Države)niskosaksonskiflamanskiportugalski (Portugal)m" + - "oldavskisrpskohrvatskikisvahilipojednostavljeni kineskitradicionalni kin" + - "eski" - -var srLatnLangIdx = []uint16{ // 613 elements + "skiinuktitutskijapanskijavanskigruzijskikongokikujukvanjamakazaškigrenla" + + "ndskikmerskikanadakorejskikanurikašmirskikurdskikomikornvolskikirgiskila" + + "tinskiluksemburškigandalimburškilingalalaoskilitvanskiluba-katangaletons" + + "kimalgaškimaršalskimaorskimakedonskimalajalammongolskimaratimalajskimalt" + + "eškiburmanskinauruskiseverni ndebelenepalskindongaholandskinorveški nino" + + "rsknorveški bukmoljužni ndebelenavahonjandžaoksitanskiodžibveoromoodijao" + + "setinskipendžapskipalipoljskipaštunskiportugalskikečuaromanškirundirumun" + + "skiruskikinjaruandasanskritsardinskisindiseverni samisangosinhaleškislov" + + "ačkislovenačkisamoanskišonasomalskialbanskisrpskisvazisesotosundanskišve" + + "dskisvahilitamilskitelugutadžičkitajskitigrinjaturkmenskicvanatonganskit" + + "urskicongatatarskitahićanskiujgurskiukrajinskiurduuzbečkivendavijetnamsk" + + "ivolapikvalonskivolofkosajidišjorubadžuanškikineskizuluaceškiakoliadangm" + + "eadigejskiafrihiliagemainuakadijskialeutskijužnoaltajskistaroengleskiang" + + "ikaaramejskimapučearapahoaravačkiasuasturijskiavadibelučkibalijskibasabe" + + "džabembabenazapadni belučkibodžpuribikolbinisisikabrajbodoburjatskibugij" + + "skiblinskikadokaripskiatsamsebuanskičigačipčačagatajčučkimaričinučkičokt" + + "avskičipevjanskičerokičejenskicentralni kurdskikoptskikrimskotatarskisej" + + "šelski kreolski francuskikašupskidakotadarginskitaitadelaverskislejvido" + + "gripskidinkazarmadogridonji lužičkosrpskidualasrednjeholandskidžola fonj" + + "iđuladazagaembuefičkistaroegipatskiekadžukelamitskisrednjeengleskievondo" + + "fangfilipinskifonkajunski francuskisrednjefrancuskistarofrancuskiseverno" + + "frizijskiistočnofrizijskifriulskigagagauzgajogbajageezgilbertskisrednji " + + "visokonemačkistaronemačkigondigorontalogotskigrebostarogrčkinemački (Šva" + + "jcarska)gusigvičinskihaidahavajskihiligajnonskihetitskihmonškigornji luž" + + "ičkosrpskihupaibanskiibibioilokoinguškiložbanngombamačamejudeo-persijski" + + "judeo-arapskikara-kalpaškikabilekačinskidžukambakavikabardijskitjapmakon" + + "dezelenortskikorokasikotaneškikojra čiinikakokalendžinskikimbundukomi-pe" + + "rmskikonkanikosrenskikpelekaračajsko-balkarskikriokarelskikurukšambalaba" + + "fijakelnskikumičkikutenajladinolangilandalambalezginskilakotamongoluizij" + + "anski kreolskiloziseverni luriluba-lulualuisenjolundaluomizolujiamadursk" + + "imagahimaitilimakasarskimandingomasajskimokšamandarmendemerumorisjensred" + + "njeirskimakuva-mitometamikmakminangkabaumandžurskimanipurskimohočkimosim" + + "undangViše jezikakriškimirandskimarvarierzjamazanderanskinapuljskinamani" + + "skonemačkinevariniasniuejskikvasiongiembunnogajskistaronordijskinkosever" + + "ni sotonuerklasični nevarskinjamvezinjankolenjoronzimaosageosmanski turs" + + "kipangasinanskipahlavipampangapapijamentopalauskinigerijski pidžinstarop" + + "ersijskifeničanskiponpejskipruskistarooksitanskikičeradžastanskirapanuir" + + "arotonganskiromboromskicincarskiruasandavesahasamarijanski aramejskisamb" + + "urusasaksantalingambajsangusicilijanskiškotskijužnokurdskisenaselkupskik" + + "ojraboro senistaroirskitašelhitšanskisidamojužni samilule samiinari sami" + + "skolt samisoninkesogdijskisranan tongosererskisahosukumasususumerskikomo" + + "rskisirijačkisirijskitimnetesoterenotetumtigretivtokelauklingonskitlingi" + + "ttamašeknjasa tongatok pisintarokocimšiantumbukatuvalutasavaktuvinskicen" + + "tralnoatlaski tamazigtudmurtskiugaritskiumbundunepoznat jezikvaivodskivu" + + "ndžovalserskivolajtavarajskivašovarlpirikalmičkisogajaojapskijangbenjemb" + + "akantonskizapotečkiblisimbolizenagastandardni marokanski tamazigtzunibez" + + " lingvističkog sadržajazazasavremeni standardni arapskišvajcarski visoki" + + " nemačkiengleski (Velika Britanija)engleski (Sjedinjene Američke Države)" + + "niskosaksonskiflamanskiportugalski (Portugal)moldavskisrpskohrvatskikisv" + + "ahilipojednostavljeni kineskitradicionalni kineski" + +var srLatnLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0007, 0x000e, 0x0018, 0x0020, 0x0027, 0x002f, 0x0038, 0x003f, 0x0046, 0x004d, 0x0053, 0x0062, 0x006c, 0x0075, 0x007d, @@ -24312,85 +25692,85 @@ var srLatnLangIdx = []uint16{ // 613 elements 0x01cf, 0x01d4, 0x01dd, 0x01e5, 0x01ef, 0x01f8, 0x0201, 0x0207, // Entry 40 - 7F 0x0212, 0x021f, 0x022a, 0x022e, 0x023b, 0x0241, 0x0244, 0x024d, - 0x0258, 0x0260, 0x0268, 0x0270, 0x0279, 0x027e, 0x0284, 0x028c, - 0x0294, 0x029f, 0x02a6, 0x02ac, 0x02b4, 0x02ba, 0x02c4, 0x02cb, - 0x02cf, 0x02d9, 0x02e1, 0x02e9, 0x02f6, 0x02fb, 0x0305, 0x030c, - 0x0312, 0x031b, 0x0327, 0x032f, 0x0338, 0x0342, 0x0349, 0x0353, - 0x035c, 0x0365, 0x036b, 0x0373, 0x037c, 0x0385, 0x038d, 0x039c, - 0x03a4, 0x03aa, 0x03b3, 0x03c4, 0x03d4, 0x03e2, 0x03e8, 0x03f0, - 0x03fa, 0x0402, 0x0407, 0x040c, 0x0415, 0x0420, 0x0424, 0x042b, + 0x0258, 0x0264, 0x026c, 0x0274, 0x027d, 0x0282, 0x0288, 0x0290, + 0x0298, 0x02a3, 0x02aa, 0x02b0, 0x02b8, 0x02be, 0x02c8, 0x02cf, + 0x02d3, 0x02dd, 0x02e5, 0x02ed, 0x02fa, 0x02ff, 0x0309, 0x0310, + 0x0316, 0x031f, 0x032b, 0x0333, 0x033c, 0x0346, 0x034d, 0x0357, + 0x0360, 0x0369, 0x036f, 0x0377, 0x0380, 0x0389, 0x0391, 0x03a0, + 0x03a8, 0x03ae, 0x03b7, 0x03c8, 0x03d8, 0x03e6, 0x03ec, 0x03f4, + 0x03fe, 0x0406, 0x040b, 0x0410, 0x0419, 0x0424, 0x0428, 0x042f, // Entry 80 - BF - 0x0435, 0x0440, 0x0446, 0x044d, 0x0454, 0x045c, 0x0461, 0x046c, - 0x0474, 0x047d, 0x0482, 0x048e, 0x0493, 0x049e, 0x04a7, 0x04b2, - 0x04bb, 0x04c0, 0x04c8, 0x04d0, 0x04d6, 0x04db, 0x04e1, 0x04ea, - 0x04f2, 0x04f9, 0x0501, 0x0507, 0x0511, 0x0517, 0x051f, 0x0529, - 0x052e, 0x0537, 0x053d, 0x0542, 0x054a, 0x0555, 0x055d, 0x0567, - 0x056b, 0x0573, 0x0578, 0x0583, 0x058a, 0x0592, 0x0597, 0x059b, - 0x05a1, 0x05a7, 0x05b1, 0x05b8, 0x05bc, 0x05c3, 0x05c8, 0x05cf, - 0x05d8, 0x05d8, 0x05e0, 0x05e4, 0x05e8, 0x05f1, 0x05f1, 0x05f9, + 0x0439, 0x0444, 0x044a, 0x0451, 0x0458, 0x0460, 0x0465, 0x0470, + 0x0478, 0x0481, 0x0486, 0x0492, 0x0497, 0x04a2, 0x04ab, 0x04b6, + 0x04bf, 0x04c4, 0x04cc, 0x04d4, 0x04da, 0x04df, 0x04e5, 0x04ee, + 0x04f6, 0x04fd, 0x0505, 0x050b, 0x0515, 0x051b, 0x0523, 0x052d, + 0x0532, 0x053b, 0x0541, 0x0546, 0x054e, 0x0559, 0x0561, 0x056b, + 0x056f, 0x0577, 0x057c, 0x0587, 0x058e, 0x0596, 0x059b, 0x059f, + 0x05a5, 0x05ab, 0x05b5, 0x05bc, 0x05c0, 0x05c7, 0x05cc, 0x05d3, + 0x05dc, 0x05dc, 0x05e4, 0x05e8, 0x05ec, 0x05f5, 0x05f5, 0x05fd, // Entry C0 - FF - 0x05f9, 0x0607, 0x0614, 0x061a, 0x0623, 0x062a, 0x062a, 0x0631, - 0x0631, 0x0631, 0x063a, 0x063a, 0x063a, 0x063d, 0x063d, 0x0647, - 0x0647, 0x064c, 0x0654, 0x065c, 0x065c, 0x0660, 0x0660, 0x0660, - 0x0660, 0x0666, 0x066b, 0x066b, 0x066f, 0x066f, 0x066f, 0x067f, - 0x0688, 0x068d, 0x0691, 0x0691, 0x0691, 0x0697, 0x0697, 0x0697, - 0x069b, 0x069b, 0x069f, 0x069f, 0x06a8, 0x06b0, 0x06b0, 0x06b7, - 0x06b7, 0x06bb, 0x06c3, 0x06c3, 0x06c8, 0x06d1, 0x06d6, 0x06dd, - 0x06e5, 0x06ec, 0x06f0, 0x06f9, 0x0703, 0x070f, 0x0716, 0x071f, + 0x05fd, 0x060b, 0x0618, 0x061e, 0x0627, 0x062e, 0x062e, 0x0635, + 0x0635, 0x0635, 0x063e, 0x063e, 0x063e, 0x0641, 0x0641, 0x064b, + 0x064b, 0x0650, 0x0658, 0x0660, 0x0660, 0x0664, 0x0664, 0x0664, + 0x0664, 0x066a, 0x066f, 0x066f, 0x0673, 0x0673, 0x0673, 0x0683, + 0x068c, 0x0691, 0x0695, 0x0695, 0x0695, 0x069b, 0x069b, 0x069b, + 0x069f, 0x069f, 0x06a3, 0x06a3, 0x06ac, 0x06b4, 0x06b4, 0x06bb, + 0x06bb, 0x06bf, 0x06c7, 0x06c7, 0x06cc, 0x06cc, 0x06d5, 0x06da, + 0x06e1, 0x06e9, 0x06f0, 0x06f4, 0x06fd, 0x0707, 0x0713, 0x071a, // Entry 100 - 13F - 0x0730, 0x0737, 0x0737, 0x0746, 0x0763, 0x076c, 0x0772, 0x077b, - 0x0780, 0x078a, 0x0790, 0x0799, 0x079e, 0x07a3, 0x07a8, 0x07bd, - 0x07bd, 0x07c2, 0x07d2, 0x07de, 0x07e3, 0x07e9, 0x07ed, 0x07f4, - 0x07f4, 0x0802, 0x080a, 0x0813, 0x0822, 0x0822, 0x0828, 0x0828, - 0x082c, 0x0836, 0x0836, 0x0839, 0x0839, 0x0849, 0x0857, 0x0857, - 0x0867, 0x0878, 0x0880, 0x0882, 0x0888, 0x0888, 0x088c, 0x0891, - 0x0891, 0x0895, 0x089f, 0x089f, 0x08b5, 0x08c2, 0x08c2, 0x08c7, - 0x08d0, 0x08d6, 0x08db, 0x08e6, 0x08fa, 0x08fa, 0x08fa, 0x08fe, + 0x0723, 0x0734, 0x073b, 0x073b, 0x074a, 0x0767, 0x0770, 0x0776, + 0x077f, 0x0784, 0x078e, 0x0794, 0x079d, 0x07a2, 0x07a7, 0x07ac, + 0x07c1, 0x07c1, 0x07c6, 0x07d6, 0x07e2, 0x07e7, 0x07ed, 0x07f1, + 0x07f8, 0x07f8, 0x0806, 0x080e, 0x0817, 0x0826, 0x0826, 0x082c, + 0x082c, 0x0830, 0x083a, 0x083a, 0x083d, 0x084f, 0x085f, 0x086d, + 0x086d, 0x087d, 0x088e, 0x0896, 0x0898, 0x089e, 0x089e, 0x08a2, + 0x08a7, 0x08a7, 0x08ab, 0x08b5, 0x08b5, 0x08cb, 0x08d8, 0x08d8, + 0x08dd, 0x08e6, 0x08ec, 0x08f1, 0x08fc, 0x0912, 0x0912, 0x0912, // Entry 140 - 17F - 0x0908, 0x090d, 0x090d, 0x0915, 0x0915, 0x0922, 0x092a, 0x0932, - 0x0948, 0x0948, 0x094c, 0x0953, 0x0959, 0x095e, 0x0966, 0x0966, - 0x0966, 0x096d, 0x0973, 0x097a, 0x0989, 0x0996, 0x0996, 0x09a4, - 0x09aa, 0x09b3, 0x09b7, 0x09bc, 0x09c0, 0x09cb, 0x09cb, 0x09cf, - 0x09d6, 0x09e1, 0x09e1, 0x09e5, 0x09e5, 0x09e9, 0x09f3, 0x09ff, - 0x09ff, 0x09ff, 0x0a03, 0x0a10, 0x0a18, 0x0a24, 0x0a2b, 0x0a34, - 0x0a39, 0x0a4e, 0x0a52, 0x0a52, 0x0a5a, 0x0a5f, 0x0a67, 0x0a6d, - 0x0a74, 0x0a7c, 0x0a83, 0x0a89, 0x0a8e, 0x0a93, 0x0a98, 0x0aa1, + 0x0916, 0x0920, 0x0925, 0x0925, 0x092d, 0x092d, 0x093a, 0x0942, + 0x094a, 0x0960, 0x0960, 0x0964, 0x096b, 0x0971, 0x0976, 0x097e, + 0x097e, 0x097e, 0x0985, 0x098b, 0x0992, 0x09a1, 0x09ae, 0x09ae, + 0x09bc, 0x09c2, 0x09cb, 0x09cf, 0x09d4, 0x09d8, 0x09e3, 0x09e3, + 0x09e7, 0x09ee, 0x09f9, 0x09f9, 0x09fd, 0x09fd, 0x0a01, 0x0a0b, + 0x0a17, 0x0a17, 0x0a17, 0x0a1b, 0x0a28, 0x0a30, 0x0a3c, 0x0a43, + 0x0a4c, 0x0a51, 0x0a66, 0x0a6a, 0x0a6a, 0x0a72, 0x0a77, 0x0a7f, + 0x0a85, 0x0a8c, 0x0a94, 0x0a9b, 0x0aa1, 0x0aa6, 0x0aab, 0x0ab0, // Entry 180 - 1BF - 0x0aa1, 0x0aa1, 0x0aa1, 0x0aa7, 0x0aa7, 0x0aac, 0x0ab0, 0x0abc, - 0x0abc, 0x0ac6, 0x0ace, 0x0ad3, 0x0ad6, 0x0ada, 0x0adf, 0x0adf, - 0x0adf, 0x0ae7, 0x0ae7, 0x0aed, 0x0af4, 0x0afe, 0x0b06, 0x0b0e, - 0x0b0e, 0x0b14, 0x0b1a, 0x0b1f, 0x0b23, 0x0b2b, 0x0b37, 0x0b42, - 0x0b46, 0x0b4c, 0x0b57, 0x0b62, 0x0b6c, 0x0b74, 0x0b78, 0x0b78, - 0x0b7f, 0x0b8b, 0x0b92, 0x0b9b, 0x0ba2, 0x0ba2, 0x0ba2, 0x0ba7, - 0x0bb4, 0x0bb4, 0x0bbd, 0x0bc1, 0x0bce, 0x0bd4, 0x0bd8, 0x0be0, - 0x0be0, 0x0be6, 0x0bee, 0x0bf6, 0x0c04, 0x0c04, 0x0c07, 0x0c13, + 0x0ab9, 0x0ab9, 0x0ab9, 0x0ab9, 0x0abf, 0x0abf, 0x0ac4, 0x0ad8, + 0x0adc, 0x0ae8, 0x0ae8, 0x0af2, 0x0afa, 0x0aff, 0x0b02, 0x0b06, + 0x0b0b, 0x0b0b, 0x0b0b, 0x0b13, 0x0b13, 0x0b19, 0x0b20, 0x0b2a, + 0x0b32, 0x0b3a, 0x0b3a, 0x0b40, 0x0b46, 0x0b4b, 0x0b4f, 0x0b57, + 0x0b63, 0x0b6e, 0x0b72, 0x0b78, 0x0b83, 0x0b8e, 0x0b98, 0x0ba0, + 0x0ba4, 0x0ba4, 0x0bab, 0x0bb7, 0x0bbe, 0x0bc7, 0x0bce, 0x0bce, + 0x0bce, 0x0bd3, 0x0be0, 0x0be0, 0x0be9, 0x0bed, 0x0bfa, 0x0c00, + 0x0c04, 0x0c0c, 0x0c0c, 0x0c12, 0x0c1a, 0x0c22, 0x0c30, 0x0c30, // Entry 1C0 - 1FF - 0x0c17, 0x0c29, 0x0c31, 0x0c39, 0x0c3e, 0x0c43, 0x0c48, 0x0c57, - 0x0c64, 0x0c6b, 0x0c73, 0x0c7d, 0x0c85, 0x0c85, 0x0c97, 0x0c97, - 0x0c97, 0x0ca5, 0x0ca5, 0x0cb0, 0x0cb0, 0x0cb0, 0x0cb9, 0x0cbf, - 0x0cce, 0x0cd3, 0x0cd3, 0x0ce0, 0x0ce7, 0x0cf4, 0x0cf4, 0x0cf4, - 0x0cf9, 0x0cff, 0x0cff, 0x0cff, 0x0cff, 0x0d08, 0x0d0b, 0x0d12, - 0x0d1a, 0x0d30, 0x0d37, 0x0d3c, 0x0d43, 0x0d43, 0x0d4a, 0x0d4f, - 0x0d5b, 0x0d63, 0x0d63, 0x0d70, 0x0d70, 0x0d74, 0x0d74, 0x0d7d, - 0x0d8b, 0x0d95, 0x0d95, 0x0d9e, 0x0da5, 0x0da5, 0x0dab, 0x0dab, + 0x0c33, 0x0c3f, 0x0c43, 0x0c55, 0x0c5d, 0x0c65, 0x0c6a, 0x0c6f, + 0x0c74, 0x0c83, 0x0c90, 0x0c97, 0x0c9f, 0x0caa, 0x0cb2, 0x0cb2, + 0x0cc4, 0x0cc4, 0x0cc4, 0x0cd2, 0x0cd2, 0x0cdd, 0x0cdd, 0x0cdd, + 0x0ce6, 0x0cec, 0x0cfb, 0x0d00, 0x0d00, 0x0d0d, 0x0d14, 0x0d21, + 0x0d21, 0x0d21, 0x0d26, 0x0d2c, 0x0d2c, 0x0d2c, 0x0d2c, 0x0d35, + 0x0d38, 0x0d3f, 0x0d43, 0x0d59, 0x0d60, 0x0d65, 0x0d6c, 0x0d6c, + 0x0d73, 0x0d78, 0x0d84, 0x0d8c, 0x0d8c, 0x0d99, 0x0d99, 0x0d9d, + 0x0d9d, 0x0da6, 0x0db4, 0x0dbe, 0x0dbe, 0x0dc7, 0x0dce, 0x0dce, // Entry 200 - 23F - 0x0dab, 0x0db6, 0x0dbf, 0x0dc9, 0x0dda, 0x0de1, 0x0dea, 0x0df6, - 0x0dfe, 0x0e02, 0x0e02, 0x0e08, 0x0e0c, 0x0e14, 0x0e1c, 0x0e26, - 0x0e2e, 0x0e2e, 0x0e2e, 0x0e33, 0x0e37, 0x0e3d, 0x0e42, 0x0e47, - 0x0e4a, 0x0e51, 0x0e51, 0x0e5b, 0x0e62, 0x0e62, 0x0e6a, 0x0e75, - 0x0e7e, 0x0e7e, 0x0e84, 0x0e84, 0x0e8c, 0x0e8c, 0x0e93, 0x0e99, - 0x0ea0, 0x0ea8, 0x0ec1, 0x0eca, 0x0ed3, 0x0eda, 0x0edd, 0x0ee0, - 0x0ee0, 0x0ee0, 0x0ee0, 0x0ee0, 0x0ee6, 0x0ee6, 0x0eed, 0x0ef6, - 0x0efd, 0x0f05, 0x0f0a, 0x0f12, 0x0f12, 0x0f1b, 0x0f1b, 0x0f1f, + 0x0dd4, 0x0dd4, 0x0dd4, 0x0ddf, 0x0de8, 0x0df2, 0x0dfc, 0x0e03, + 0x0e0c, 0x0e18, 0x0e20, 0x0e24, 0x0e24, 0x0e2a, 0x0e2e, 0x0e36, + 0x0e3e, 0x0e48, 0x0e50, 0x0e50, 0x0e50, 0x0e55, 0x0e59, 0x0e5f, + 0x0e64, 0x0e69, 0x0e6c, 0x0e73, 0x0e73, 0x0e7d, 0x0e84, 0x0e84, + 0x0e8c, 0x0e97, 0x0ea0, 0x0ea0, 0x0ea6, 0x0ea6, 0x0eae, 0x0eae, + 0x0eb5, 0x0ebb, 0x0ec2, 0x0eca, 0x0ee3, 0x0eec, 0x0ef5, 0x0efc, + 0x0f0a, 0x0f0d, 0x0f0d, 0x0f0d, 0x0f0d, 0x0f0d, 0x0f13, 0x0f13, + 0x0f1a, 0x0f23, 0x0f2a, 0x0f32, 0x0f37, 0x0f3f, 0x0f3f, 0x0f48, // Entry 240 - 27F - 0x0f22, 0x0f28, 0x0f2f, 0x0f34, 0x0f34, 0x0f3d, 0x0f47, 0x0f51, - 0x0f51, 0x0f57, 0x0f75, 0x0f79, 0x0f95, 0x0f99, 0x0fb5, 0x0fb5, - 0x0fb5, 0x0fd0, 0x0fd0, 0x0fd0, 0x0feb, 0x1012, 0x1012, 0x1012, - 0x1012, 0x1012, 0x1012, 0x1012, 0x1020, 0x1029, 0x1029, 0x103f, - 0x1048, 0x1056, 0x105f, 0x1077, 0x108c, -} // Size: 1250 bytes - -const svLangStr string = "" + // Size: 5455 bytes + 0x0f48, 0x0f4c, 0x0f4f, 0x0f55, 0x0f5c, 0x0f61, 0x0f61, 0x0f6a, + 0x0f74, 0x0f7e, 0x0f7e, 0x0f84, 0x0fa2, 0x0fa6, 0x0fc2, 0x0fc6, + 0x0fe2, 0x0fe2, 0x0fe2, 0x0ffd, 0x0ffd, 0x0ffd, 0x1018, 0x103f, + 0x103f, 0x103f, 0x103f, 0x103f, 0x103f, 0x103f, 0x104d, 0x1056, + 0x1056, 0x106c, 0x1075, 0x1083, 0x108c, 0x10a4, 0x10b9, +} // Size: 1254 bytes + +const svLangStr string = "" + // Size: 5493 bytes "afarabchaziskaavestiskaafrikaansakanamhariskaaragonesiskaarabiskaassames" + "iskaavariskaaymaraazerbajdzjanskabasjkiriskavitryskabulgariskabislamabam" + "barabengalitibetanskabretonskabosniskakatalanskatjetjenskachamorrokorsik" + @@ -24403,71 +25783,72 @@ const svLangStr string = "" + // Size: 5455 bytes "zakiskagrönländskakambodjanskakannadakoreanskakanurikashmiriskakurdiskak" + "omekorniskakirgisiskalatinluxemburgiskalugandalimburgiskalingalalaotiska" + "litauiskaluba-katangalettiskamalagassiskamarshalliskamaorimakedonskamala" + - "yalammongoliskamarathimalajiskamaltesiskaburmesiskanaurunordndebelenepal" + - "esiskandonganederländskanynorskabokmålsydndebelenavahonyanjaoccitanskaod" + - "jibwaoromooriyaossetiskapunjabipalipolskaafghanskaportugisiskaquechuarät" + - "oromanskarundirumänskaryskakinjarwandasanskritsardinskasindhinordsamiska" + - "sangosingalesiskaslovakiskaslovenskasamoanskashonasomaliskaalbanskaserbi" + - "skaswatisydsothosundanesiskasvenskaswahilitamiltelugutadzjikiskathailänd" + - "skatigrinjaturkmeniskatswanatonganskaturkiskatsongatatariskatahitiskauig" + - "uriskaukrainskaurduuzbekiskavendavietnamesiskavolapükvallonskawolofxhosa" + - "jiddischyorubazhuangkinesiskazuluacehnesiskaacholiadangmeadygeiskatunisi" + - "sk arabiskaafrihiliaghemainuakkadiskaAlabama-muskogeealeutiskagegiskasyd" + - "altaiskafornengelskaangikaarameiskamapudungunaraoniskaarapahoalgerisk ar" + - "abiskaarawakiskamarockansk arabiskaegyptisk arabiskaasuamerikanskt tecke" + - "nspråkasturiskakotavaawadhibaluchiskabalinesiskabayerskabasabamunskabata" + - "k-tobaghomalabejabembabetawiskabenabafutbagadavästbaluchiskabhojpuribiko" + - "lbinibanjariskabamekonsiksikabishnupriyabakhtiaribrajbrahuiskabodobakoss" + - "iburjätiskabuginesiskabouloublinbagangtecaddokaribiskacayugaatsamcebuano" + - "chigachibchachagataichuukesiskamariskachinookchoctawchipewyancherokesisk" + - "acheyennesoranisk kurdiskakoptiskakapisnonkrimtatariskaseychellisk kreol" + - "kasjubiskadakotadarginskataitadelawareslavejdogribdinkazarmadogrilågsorb" + - "iskacentraldusundualamedelnederländskajola-fonyidyuladazagaembuefikemili" + - "skafornegyptiskaekajukelamitiskamedelengelskacentralalaskisk jupiskaewon" + - "doextremaduriskafangfilippinskameänkielifonspråketcajun-franskamedelfran" + - "skafornfranskafrankoprovensalskanordfrisiskaöstfrisiskafriulianskagãgaga" + - "uziskagangayogbayazoroastrisk darietiopiskagilbertiskagilakimedelhögtysk" + - "afornhögtyskaGoa-konkanigondigorontalogotiskagreboforngrekiskaschweizert" + - "yskawayuufarefaregusiigwichinhaidahakkahawaiiskaFiji-hindihiligaynonhett" + - "itiskahmongspråkhögsorbiskaxianghupaibanskaibibioilokoingusjiskaingriska" + - "jamaikansk engelsk kreollojbanngombakimashamijudisk persiskajudisk arabi" + - "skajylländskakarakalpakiskakabyliskakachinjjukambakawikabardinskakanembu" + - "tyapmakondekapverdiskakenjangkorokaingangkhasikhotanesiskaTimbuktu-songh" + - "oykhowarkirmanjkimkakokalenjinkimbundukomi-permjakiskakonkanikosreanskak" + - "pellekarachay-balkarkriokinaray-akarelskakurukhkisambaabafiakölniskakumy" + - "kiskakutenajladinolangilahndalambalezghienlingua franca novaliguriskaliv" + - "oniskalakotalombardiskamongolozinordlurilettgalliskaluba-lulualuiseñolun" + - "daluolushailuhyalitterär kineiskalaziskamaduresiskamafamagahimaithilimak" + - "asarmandemassajiskamabamoksjamandarmendemerumauritansk kreolmedeliriskam" + - "akhuwa-meettometa’mi’kmaqminangkabaumanchuriskamanipurimohawkmossivästma" + - "riskamundangflera språkmuskogeemirandesiskamarwarimentawaimyeneerjyamaza" + - "nderanimin nannapolitanskanamalågtyskanewariskaniasniueanskaao-nagakwasi" + - "obamileké-ngiemboonnogaifornnordiskanovialn-kånordsothonuerklassisk newa" + - "riskanyamwezinyankolenyoronzimaosageottomanskapangasinanmedelpersiskapam" + - "pangapapiamentopalaupikardiskaNigeria-pidginPennsylvaniatyskamennonitisk" + - " lågtyskafornpersiskaPfalz-tyskafeniciskapiemontesiskapontiskapohnpeiska" + - "fornpreussiskafornprovensalskaquichéChimborazo-höglandskichwarajasthanir" + - "apanuirarotonganskaromagnolriffianskaromboromanirotumänskarusynrovianska" + - "arumänskarwasandawejakutiskasamaritanskasamburusasaksantalisaurashtranga" + - "mbaysangusicilianskaskotskasassaresisk sardiskasydkurdiskasenecasenaseri" + - "selkupGao-songhayforniriskasamogitiskatachelhitshanTchad-arabiskasidamol" + - "ågsilesiskaselayarsydsamiskalulesamiskaenaresamiskaskoltsamiskasoninkes" + - "ogdiskasranan tongoserersahosaterfrisiskasukumasususumeriskashimaoréklas" + - "sisk syriskasyriskasilesiskatulutemnetesoterenotetumtigrétivitokelauiska" + - "tsakhurklingonskatlingittalyshtamasheknyasatonganskatok pisinturoyotarok" + - "otsakodiskatsimshianmuslimsk tatariskatumbukatuvaluanskatasawaqtuviniska" + - "centralmarockansk tamazightudmurtiskaugaritiskaumbundurotvajvenetianskav" + - "epsvästflamländskaMain-frankiskavotiskavõruvunjowalsertyskawalamowaraywa" + - "showarlpiriwukalmuckiskamingrelianskalusogakiyaojapetiskayangbenbamileké" + - "-jembanheengatukantonesiskazapotekblissymbolerzeeländskazenagamarockansk" + - " standard-tamazightzuniinget språkligt innehållzazaiskamodern standardar" + - "abiskaösterrikisk tyskaschweizisk högtyskaaustralisk engelskakanadensisk" + - " engelskabrittisk engelskaamerikansk engelskalatinamerikansk spanskaeuro" + - "peisk spanskamexikansk spanskakanadensisk franskaschweizisk franskalågsa" + - "xiskaflamländskabrasiliansk portugisiskaeuropeisk portugisiskamoldaviska" + - "serbokroatiskaKongo-swahiliförenklad kinesiskatraditionell kinesiska" - -var svLangIdx = []uint16{ // 613 elements + "yalammongoliskamarathimalajiskamaltesiskaburmesiskanauriskanordndebelene" + + "palesiskandonganederländskanynorskanorskt bokmålsydndebelenavahonyanjaoc" + + "citanskaodjibwaoromooriyaossetiskapunjabipalipolskaafghanskaportugisiska" + + "quechuarätoromanskarundirumänskaryskakinjarwandasanskritsardinskasindhin" + + "ordsamiskasangosingalesiskaslovakiskaslovenskasamoanskashonasomaliskaalb" + + "anskaserbiskaswatisydsothosundanesiskasvenskaswahilitamiltelugutadzjikis" + + "kathailändskatigrinjaturkmeniskatswanatonganskaturkiskatsongatatariskata" + + "hitiskauiguriskaukrainskaurduuzbekiskavendavietnamesiskavolapükvallonska" + + "wolofxhosajiddischyorubazhuangkinesiskazuluacehnesiskaacholiadangmeadyge" + + "iskatunisisk arabiskaafrihiliaghemainuakkadiskaAlabama-muskogeealeutiska" + + "gegiskasydaltaiskafornengelskaangikaarameiskamapudungunaraoniskaarapahoa" + + "lgerisk arabiskaarawakiskamarockansk arabiskaegyptisk arabiskaasuamerika" + + "nskt teckenspråkasturiskakotavaawadhibaluchiskabalinesiskabayerskabasaba" + + "munskabatak-tobaghomalabejabembabetawiskabenabafutbagadavästbaluchiskabh" + + "ojpuribikolbinibanjariskabamekonsiksikabishnupriyabakhtiaribrajbrahuiska" + + "bodobakossiburjätiskabuginesiskabouloublinbagangtecaddokaribiskacayugaat" + + "samcebuanochigachibchachagataichuukesiskamariskachinookchoctawchipewyanc" + + "herokesiskacheyennesoranisk kurdiskakoptiskakapisnonkrimtatariskaseychel" + + "lisk kreolkasjubiskadakotadarginskataitadelawareslavejdogribdinkazarmado" + + "grilågsorbiskacentraldusundualamedelnederländskajola-fonyidyuladazagaemb" + + "uefikemiliskafornegyptiskaekajukelamitiskamedelengelskacentralalaskisk j" + + "upiskaewondoextremaduriskafangfilippinskameänkielifonspråketcajun-fransk" + + "amedelfranskafornfranskafrankoprovensalskanordfrisiskaöstfrisiskafriulia" + + "nskagãgagauziskagangayogbayazoroastrisk darietiopiskagilbertiskagilakime" + + "delhögtyskafornhögtyskaGoa-konkanigondigorontalogotiskagreboforngrekiska" + + "schweizertyskawayuufarefaregusiigwichinhaidahakkahawaiiskaFiji-hindihili" + + "gaynonhettitiskahmongspråkhögsorbiskaxianghupaibanskaibibioilokoingusjis" + + "kaingriskajamaikansk engelsk kreollojbanngombakimashamijudisk persiskaju" + + "disk arabiskajylländskakarakalpakiskakabyliskakachinjjukambakawikabardin" + + "skakanembutyapmakondekapverdiskakenjangkorokaingangkhasikhotanesiskaTimb" + + "uktu-songhoykhowarkirmanjkimkakokalenjinkimbundukomi-permjakiskakonkanik" + + "osreanskakpellekarachay-balkarkriokinaray-akarelskakurukhkisambaabafiakö" + + "lniskakumykiskakutenajladinolangilahndalambalezghienlingua franca novali" + + "guriskalivoniskalakotalombardiskamongolouisiana-kreollozinordlurilettgal" + + "liskaluba-lulualuiseñolundaluolushailuhyalitterär kineiskalaziskamadures" + + "iskamafamagahimaithilimakasarmandemassajiskamabamoksjamandarmendemerumau" + + "ritansk kreolmedeliriskamakhuwa-meettometa’mi’kmaqminangkabaumanchuriska" + + "manipurimohawkmossivästmariskamundangflera språkmuskogeemirandesiskamarw" + + "arimentawaimyeneerjyamazanderanimin nannapolitanskanamalågtyskanewariska" + + "niasniueanskaao-nagakwasiobamileké-ngiemboonnogaifornnordiskanovialn-kån" + + "ordsothonuerklassisk newariskanyamwezinyankolenyoronzimaosageottomanskap" + + "angasinanmedelpersiskapampangapapiamentopalaupikardiskaNigeria-pidginPen" + + "nsylvaniatyskamennonitisk lågtyskafornpersiskaPfalz-tyskafeniciskapiemon" + + "tesiskapontiskapohnpeiskafornpreussiskafornprovensalskaquichéChimborazo-" + + "höglandskichwarajasthanirapanuirarotonganskaromagnolriffianskaromboroman" + + "irotumänskarusynrovianskaarumänskarwasandawejakutiskasamaritanskasamburu" + + "sasaksantalisaurashtrangambaysangusicilianskaskotskasassaresisk sardiska" + + "sydkurdiskasenecasenaseriselkupGao-songhayforniriskasamogitiskatachelhit" + + "shanTchad-arabiskasidamolågsilesiskaselayarsydsamiskalulesamiskaenaresam" + + "iskaskoltsamiskasoninkesogdiskasranan tongoserersahosaterfrisiskasukumas" + + "ususumeriskashimaoréklassisk syriskasyriskasilesiskatulutemnetesoterenot" + + "etumtigrétivitokelauiskatsakhurklingonskatlingittalyshtamasheknyasatonga" + + "nskatok pisinturoyotarokotsakodiskatsimshianmuslimsk tatariskatumbukatuv" + + "aluanskatasawaqtuviniskacentralmarockansk tamazightudmurtiskaugaritiskau" + + "mbunduobestämt språkvajvenetianskavepsvästflamländskaMain-frankiskavotis" + + "kavõruvunjowalsertyskawalamowaraywashowarlpiriwukalmuckiskamingrelianska" + + "lusogakiyaojapetiskayangbenbamileké-jembanheengatukantonesiskazapotekbli" + + "ssymbolerzeeländskazenagamarockansk standard-tamazightzuniinget språklig" + + "t innehållzazaiskamodern standardarabiskaösterrikisk tyskaschweizisk hög" + + "tyskaaustralisk engelskakanadensisk engelskabrittisk engelskaamerikansk " + + "engelskalatinamerikansk spanskaeuropeisk spanskamexikansk spanskakanaden" + + "sisk franskaschweizisk franskalågsaxiskaflamländskabrasiliansk portugisi" + + "skaeuropeisk portugisiskamoldaviskaserbokroatiskaKongo-swahiliförenklad " + + "kinesiskatraditionell kinesiska" + +var svLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0004, 0x000e, 0x0017, 0x0020, 0x0024, 0x002d, 0x0039, 0x0041, 0x004c, 0x0054, 0x005a, 0x0069, 0x0074, 0x007c, 0x0086, @@ -24483,81 +25864,81 @@ var svLangIdx = []uint16{ // 613 elements 0x0295, 0x02a2, 0x02ae, 0x02b5, 0x02be, 0x02c4, 0x02cf, 0x02d7, 0x02db, 0x02e3, 0x02ed, 0x02f2, 0x02ff, 0x0306, 0x0311, 0x0318, 0x0320, 0x0329, 0x0335, 0x033d, 0x0349, 0x0355, 0x035a, 0x0364, - 0x036d, 0x0377, 0x037e, 0x0387, 0x0391, 0x039b, 0x03a0, 0x03ab, - 0x03b6, 0x03bc, 0x03c9, 0x03d1, 0x03d8, 0x03e2, 0x03e8, 0x03ee, - 0x03f8, 0x03ff, 0x0404, 0x0409, 0x0412, 0x0419, 0x041d, 0x0423, + 0x036d, 0x0377, 0x037e, 0x0387, 0x0391, 0x039b, 0x03a3, 0x03ae, + 0x03b9, 0x03bf, 0x03cc, 0x03d4, 0x03e2, 0x03ec, 0x03f2, 0x03f8, + 0x0402, 0x0409, 0x040e, 0x0413, 0x041c, 0x0423, 0x0427, 0x042d, // Entry 80 - BF - 0x042c, 0x0438, 0x043f, 0x044c, 0x0451, 0x045a, 0x045f, 0x046a, - 0x0472, 0x047b, 0x0481, 0x048c, 0x0491, 0x049d, 0x04a7, 0x04b0, - 0x04b9, 0x04be, 0x04c7, 0x04cf, 0x04d7, 0x04dc, 0x04e4, 0x04f0, - 0x04f7, 0x04fe, 0x0503, 0x0509, 0x0514, 0x0520, 0x0528, 0x0533, - 0x0539, 0x0542, 0x054a, 0x0550, 0x0559, 0x0562, 0x056b, 0x0574, - 0x0578, 0x0581, 0x0586, 0x0593, 0x059b, 0x05a4, 0x05a9, 0x05ae, - 0x05b6, 0x05bc, 0x05c2, 0x05cb, 0x05cf, 0x05da, 0x05e0, 0x05e7, - 0x05f0, 0x0601, 0x0609, 0x060e, 0x0612, 0x061b, 0x062b, 0x0634, + 0x0436, 0x0442, 0x0449, 0x0456, 0x045b, 0x0464, 0x0469, 0x0474, + 0x047c, 0x0485, 0x048b, 0x0496, 0x049b, 0x04a7, 0x04b1, 0x04ba, + 0x04c3, 0x04c8, 0x04d1, 0x04d9, 0x04e1, 0x04e6, 0x04ee, 0x04fa, + 0x0501, 0x0508, 0x050d, 0x0513, 0x051e, 0x052a, 0x0532, 0x053d, + 0x0543, 0x054c, 0x0554, 0x055a, 0x0563, 0x056c, 0x0575, 0x057e, + 0x0582, 0x058b, 0x0590, 0x059d, 0x05a5, 0x05ae, 0x05b3, 0x05b8, + 0x05c0, 0x05c6, 0x05cc, 0x05d5, 0x05d9, 0x05e4, 0x05ea, 0x05f1, + 0x05fa, 0x060b, 0x0613, 0x0618, 0x061c, 0x0625, 0x0635, 0x063e, // Entry C0 - FF - 0x063b, 0x0646, 0x0652, 0x0658, 0x0661, 0x066b, 0x0674, 0x067b, - 0x068c, 0x068c, 0x0696, 0x06a9, 0x06ba, 0x06bd, 0x06d5, 0x06de, - 0x06e4, 0x06ea, 0x06f4, 0x06ff, 0x0707, 0x070b, 0x0713, 0x071d, - 0x0724, 0x0728, 0x072d, 0x0736, 0x073a, 0x073f, 0x0745, 0x0754, - 0x075c, 0x0761, 0x0765, 0x076f, 0x0776, 0x077d, 0x0788, 0x0791, - 0x0795, 0x079e, 0x07a2, 0x07a9, 0x07b4, 0x07bf, 0x07c5, 0x07c9, - 0x07d1, 0x07d6, 0x07df, 0x07e5, 0x07ea, 0x07f1, 0x07f6, 0x07fd, - 0x0805, 0x0810, 0x0817, 0x081e, 0x0825, 0x082e, 0x083a, 0x0842, + 0x0645, 0x0650, 0x065c, 0x0662, 0x066b, 0x0675, 0x067e, 0x0685, + 0x0696, 0x0696, 0x06a0, 0x06b3, 0x06c4, 0x06c7, 0x06df, 0x06e8, + 0x06ee, 0x06f4, 0x06fe, 0x0709, 0x0711, 0x0715, 0x071d, 0x0727, + 0x072e, 0x0732, 0x0737, 0x0740, 0x0744, 0x0749, 0x074f, 0x075e, + 0x0766, 0x076b, 0x076f, 0x0779, 0x0780, 0x0787, 0x0792, 0x079b, + 0x079f, 0x07a8, 0x07ac, 0x07b3, 0x07be, 0x07c9, 0x07cf, 0x07d3, + 0x07db, 0x07e0, 0x07e9, 0x07ef, 0x07f4, 0x07f4, 0x07fb, 0x0800, + 0x0807, 0x080f, 0x081a, 0x0821, 0x0828, 0x082f, 0x0838, 0x0844, // Entry 100 - 13F - 0x0853, 0x085b, 0x0863, 0x0870, 0x0881, 0x088b, 0x0891, 0x089a, - 0x089f, 0x08a7, 0x08ad, 0x08b3, 0x08b8, 0x08bd, 0x08c2, 0x08ce, - 0x08da, 0x08df, 0x08f1, 0x08fb, 0x0900, 0x0906, 0x090a, 0x090e, - 0x0916, 0x0923, 0x0929, 0x0933, 0x0940, 0x0957, 0x095d, 0x096b, - 0x096f, 0x097a, 0x0984, 0x098f, 0x099c, 0x09a8, 0x09b3, 0x09c5, - 0x09d1, 0x09dd, 0x09e8, 0x09eb, 0x09f5, 0x09f8, 0x09fc, 0x0a01, - 0x0a11, 0x0a1a, 0x0a25, 0x0a2b, 0x0a39, 0x0a46, 0x0a51, 0x0a56, - 0x0a5f, 0x0a66, 0x0a6b, 0x0a77, 0x0a85, 0x0a8a, 0x0a92, 0x0a97, + 0x084c, 0x085d, 0x0865, 0x086d, 0x087a, 0x088b, 0x0895, 0x089b, + 0x08a4, 0x08a9, 0x08b1, 0x08b7, 0x08bd, 0x08c2, 0x08c7, 0x08cc, + 0x08d8, 0x08e4, 0x08e9, 0x08fb, 0x0905, 0x090a, 0x0910, 0x0914, + 0x0918, 0x0920, 0x092d, 0x0933, 0x093d, 0x094a, 0x0961, 0x0967, + 0x0975, 0x0979, 0x0984, 0x098e, 0x0999, 0x09a6, 0x09b2, 0x09bd, + 0x09cf, 0x09db, 0x09e7, 0x09f2, 0x09f5, 0x09ff, 0x0a02, 0x0a06, + 0x0a0b, 0x0a1b, 0x0a24, 0x0a2f, 0x0a35, 0x0a43, 0x0a50, 0x0a5b, + 0x0a60, 0x0a69, 0x0a70, 0x0a75, 0x0a81, 0x0a8f, 0x0a94, 0x0a9c, // Entry 140 - 17F - 0x0a9e, 0x0aa3, 0x0aa8, 0x0ab1, 0x0abb, 0x0ac5, 0x0acf, 0x0ada, - 0x0ae6, 0x0aeb, 0x0aef, 0x0af6, 0x0afc, 0x0b01, 0x0b0b, 0x0b13, - 0x0b2b, 0x0b31, 0x0b37, 0x0b40, 0x0b4f, 0x0b5e, 0x0b69, 0x0b77, - 0x0b80, 0x0b86, 0x0b89, 0x0b8e, 0x0b92, 0x0b9d, 0x0ba4, 0x0ba8, - 0x0baf, 0x0bba, 0x0bc1, 0x0bc5, 0x0bcd, 0x0bd2, 0x0bde, 0x0bee, - 0x0bf4, 0x0bfd, 0x0c02, 0x0c0a, 0x0c12, 0x0c22, 0x0c29, 0x0c33, - 0x0c39, 0x0c48, 0x0c4c, 0x0c55, 0x0c5d, 0x0c63, 0x0c6b, 0x0c70, - 0x0c79, 0x0c82, 0x0c89, 0x0c8f, 0x0c94, 0x0c9a, 0x0c9f, 0x0ca7, + 0x0aa1, 0x0aa8, 0x0aad, 0x0ab2, 0x0abb, 0x0ac5, 0x0acf, 0x0ad9, + 0x0ae4, 0x0af0, 0x0af5, 0x0af9, 0x0b00, 0x0b06, 0x0b0b, 0x0b15, + 0x0b1d, 0x0b35, 0x0b3b, 0x0b41, 0x0b4a, 0x0b59, 0x0b68, 0x0b73, + 0x0b81, 0x0b8a, 0x0b90, 0x0b93, 0x0b98, 0x0b9c, 0x0ba7, 0x0bae, + 0x0bb2, 0x0bb9, 0x0bc4, 0x0bcb, 0x0bcf, 0x0bd7, 0x0bdc, 0x0be8, + 0x0bf8, 0x0bfe, 0x0c07, 0x0c0c, 0x0c14, 0x0c1c, 0x0c2c, 0x0c33, + 0x0c3d, 0x0c43, 0x0c52, 0x0c56, 0x0c5f, 0x0c67, 0x0c6d, 0x0c75, + 0x0c7a, 0x0c83, 0x0c8c, 0x0c93, 0x0c99, 0x0c9e, 0x0ca4, 0x0ca9, // Entry 180 - 1BF - 0x0cb9, 0x0cc2, 0x0ccb, 0x0cd1, 0x0cdc, 0x0ce1, 0x0ce5, 0x0ced, - 0x0cf9, 0x0d03, 0x0d0b, 0x0d10, 0x0d13, 0x0d19, 0x0d1e, 0x0d30, - 0x0d37, 0x0d42, 0x0d46, 0x0d4c, 0x0d54, 0x0d5b, 0x0d60, 0x0d6a, - 0x0d6e, 0x0d74, 0x0d7a, 0x0d7f, 0x0d83, 0x0d93, 0x0d9e, 0x0dac, - 0x0db3, 0x0dbc, 0x0dc7, 0x0dd2, 0x0dda, 0x0de0, 0x0de5, 0x0df1, - 0x0df8, 0x0e04, 0x0e0c, 0x0e18, 0x0e1f, 0x0e27, 0x0e2c, 0x0e31, - 0x0e3c, 0x0e43, 0x0e4f, 0x0e53, 0x0e5c, 0x0e65, 0x0e69, 0x0e72, - 0x0e79, 0x0e7f, 0x0e92, 0x0e97, 0x0ea3, 0x0ea9, 0x0eae, 0x0eb7, + 0x0cb1, 0x0cc3, 0x0ccc, 0x0cd5, 0x0cdb, 0x0ce6, 0x0ceb, 0x0cfa, + 0x0cfe, 0x0d06, 0x0d12, 0x0d1c, 0x0d24, 0x0d29, 0x0d2c, 0x0d32, + 0x0d37, 0x0d49, 0x0d50, 0x0d5b, 0x0d5f, 0x0d65, 0x0d6d, 0x0d74, + 0x0d79, 0x0d83, 0x0d87, 0x0d8d, 0x0d93, 0x0d98, 0x0d9c, 0x0dac, + 0x0db7, 0x0dc5, 0x0dcc, 0x0dd5, 0x0de0, 0x0deb, 0x0df3, 0x0df9, + 0x0dfe, 0x0e0a, 0x0e11, 0x0e1d, 0x0e25, 0x0e31, 0x0e38, 0x0e40, + 0x0e45, 0x0e4a, 0x0e55, 0x0e5c, 0x0e68, 0x0e6c, 0x0e75, 0x0e7e, + 0x0e82, 0x0e8b, 0x0e92, 0x0e98, 0x0eab, 0x0eb0, 0x0ebc, 0x0ec2, // Entry 1C0 - 1FF - 0x0ebb, 0x0ecd, 0x0ed5, 0x0edd, 0x0ee2, 0x0ee7, 0x0eec, 0x0ef6, - 0x0f00, 0x0f0d, 0x0f15, 0x0f1f, 0x0f24, 0x0f2e, 0x0f3c, 0x0f4d, - 0x0f62, 0x0f6e, 0x0f79, 0x0f82, 0x0f8f, 0x0f97, 0x0fa1, 0x0faf, - 0x0fbf, 0x0fc6, 0x0fe0, 0x0fea, 0x0ff1, 0x0ffe, 0x1006, 0x1010, - 0x1015, 0x101b, 0x1026, 0x102b, 0x1034, 0x103e, 0x1041, 0x1048, - 0x1051, 0x105d, 0x1064, 0x1069, 0x1070, 0x107a, 0x1081, 0x1086, - 0x1091, 0x1098, 0x10ac, 0x10b7, 0x10bd, 0x10c1, 0x10c5, 0x10cb, - 0x10d6, 0x10e0, 0x10eb, 0x10f4, 0x10f8, 0x1106, 0x110c, 0x1119, + 0x0ec7, 0x0ed0, 0x0ed4, 0x0ee6, 0x0eee, 0x0ef6, 0x0efb, 0x0f00, + 0x0f05, 0x0f0f, 0x0f19, 0x0f26, 0x0f2e, 0x0f38, 0x0f3d, 0x0f47, + 0x0f55, 0x0f66, 0x0f7b, 0x0f87, 0x0f92, 0x0f9b, 0x0fa8, 0x0fb0, + 0x0fba, 0x0fc8, 0x0fd8, 0x0fdf, 0x0ff9, 0x1003, 0x100a, 0x1017, + 0x101f, 0x1029, 0x102e, 0x1034, 0x103f, 0x1044, 0x104d, 0x1057, + 0x105a, 0x1061, 0x106a, 0x1076, 0x107d, 0x1082, 0x1089, 0x1093, + 0x109a, 0x109f, 0x10aa, 0x10b1, 0x10c5, 0x10d0, 0x10d6, 0x10da, + 0x10de, 0x10e4, 0x10ef, 0x10f9, 0x1104, 0x110d, 0x1111, 0x111f, // Entry 200 - 23F - 0x1120, 0x112a, 0x1135, 0x1141, 0x114d, 0x1154, 0x115c, 0x1168, - 0x116d, 0x1171, 0x117e, 0x1184, 0x1188, 0x1191, 0x119a, 0x11aa, - 0x11b1, 0x11ba, 0x11be, 0x11c3, 0x11c7, 0x11cd, 0x11d2, 0x11d8, - 0x11dc, 0x11e7, 0x11ee, 0x11f8, 0x11ff, 0x1205, 0x120d, 0x121b, - 0x1224, 0x122a, 0x1230, 0x123a, 0x1243, 0x1255, 0x125c, 0x1267, - 0x126e, 0x1277, 0x1292, 0x129c, 0x12a6, 0x12ad, 0x12b0, 0x12b3, - 0x12be, 0x12c2, 0x12d3, 0x12e1, 0x12e8, 0x12ed, 0x12f2, 0x12fd, - 0x1303, 0x1308, 0x130d, 0x1315, 0x1317, 0x1322, 0x132f, 0x1335, + 0x1125, 0x1132, 0x1139, 0x1143, 0x114e, 0x115a, 0x1166, 0x116d, + 0x1175, 0x1181, 0x1186, 0x118a, 0x1197, 0x119d, 0x11a1, 0x11aa, + 0x11b3, 0x11c3, 0x11ca, 0x11d3, 0x11d7, 0x11dc, 0x11e0, 0x11e6, + 0x11eb, 0x11f1, 0x11f5, 0x1200, 0x1207, 0x1211, 0x1218, 0x121e, + 0x1226, 0x1234, 0x123d, 0x1243, 0x1249, 0x1253, 0x125c, 0x126e, + 0x1275, 0x1280, 0x1287, 0x1290, 0x12ab, 0x12b5, 0x12bf, 0x12c6, + 0x12d6, 0x12d9, 0x12e4, 0x12e8, 0x12f9, 0x1307, 0x130e, 0x1313, + 0x1318, 0x1323, 0x1329, 0x132e, 0x1333, 0x133b, 0x133d, 0x1348, // Entry 240 - 27F - 0x133a, 0x1343, 0x134a, 0x1359, 0x1362, 0x136e, 0x1375, 0x1381, - 0x138c, 0x1392, 0x13af, 0x13b3, 0x13cd, 0x13d5, 0x13ec, 0x13ec, - 0x13fe, 0x1412, 0x1425, 0x1439, 0x144a, 0x145d, 0x1474, 0x1485, - 0x1496, 0x1496, 0x14a9, 0x14bb, 0x14c6, 0x14d2, 0x14ea, 0x1500, - 0x150a, 0x1518, 0x1525, 0x1539, 0x154f, -} // Size: 1250 bytes - -const swLangStr string = "" + // Size: 3904 bytes + 0x1355, 0x135b, 0x1360, 0x1369, 0x1370, 0x137f, 0x1388, 0x1394, + 0x139b, 0x13a7, 0x13b2, 0x13b8, 0x13d5, 0x13d9, 0x13f3, 0x13fb, + 0x1412, 0x1412, 0x1424, 0x1438, 0x144b, 0x145f, 0x1470, 0x1483, + 0x149a, 0x14ab, 0x14bc, 0x14bc, 0x14cf, 0x14e1, 0x14ec, 0x14f8, + 0x1510, 0x1526, 0x1530, 0x153e, 0x154b, 0x155f, 0x1575, +} // Size: 1254 bytes + +const swLangStr string = "" + // Size: 3963 bytes "KiafarKiabkhaziKiafrikanaKiakaniKiamhariKiaragoniKiarabuKiassamKiavariKi" + "aymaraKiazerbaijaniKibashkirKibelarusiKibulgariaKibislamaKibambaraKibeng" + "aliKitibetiKibretoniKibosniaKikatalaniKichecheniaKichamorroKikosikaniKic" + @@ -24569,52 +25950,52 @@ const swLangStr string = "" + // Size: 3904 bytes "chuan YiKiidoKiaisilandiKiitalianoKiinuktitutKijapaniKijavaKijojiaKikong" + "oKikikuyuKikwanyamaKikazakhKikalaallisutKikambodiaKikannadaKikoreaKikanu" + "riKikashmiriKikurdiKikomiKikorniKikyrgyzKilatiniKilasembagiKigandaLimbur" + - "gishKilingalaKilaosiKilithuaniaKiluba-KatangaKilatviaKimalagasiKimaoriKi" + - "macedoniaKimalayalamKimongoliaKimarathiKimaleiKimaltaKiburmaKinauruKinde" + - "bele cha KaskaziniKinepaliKindongaKiholanziKinorwe cha NynorskKinorwe ch" + - "a BokmålKindebeleKinavajoKinyanjaKiokitaniKioromoKioriyaKiosetiaKipunjab" + - "iKipolandiKipashtoKirenoKiquechuaKiromanshiKirundiKiromaniaKirusiKinyarw" + - "andaKisanskritiKisardiniaKisindhiKisami cha KaskaziniKisangoKisinhalaKis" + - "lovakiaKisloveniaKisamoaKishonaKisomaliKialbaniaKiserbiaKiswatiKisothoKi" + - "sundaKiswidiKiswahiliKitamilKiteluguKitajikiKitailandiKitigrinyaKituruki" + - "meniKitswanaKitongaKiturukiKitsongaKitatariKitahitiKiuyghurKiukraineKiur" + - "duKiuzbekiKivendaKivietinamuKivolapükWalloonLugha ya WolofKixhosaKiyiddi" + - "KiyorubaKichinaKizuluKiacheniKiakoliKiadangmeKiadygheKiaghemKiainuKialeu" + - "tKialtaiKiingereza cha KaleKiangikaKiaramuKimapucheKiarapahoKiarabu cha " + - "AlgeriaKiarabu cha MisriKiasuKiasturiaKiawadhiKibaliKibasaaKibamunKighom" + - "alaKibejaKibembaKibenaKibafutKibalochi cha MagharibiKibhojpuriKibiniKiko" + - "mKisiksikaKibodoLugha ya BugineseKibuluKiblinKimedumbaKichebuanoKichigaK" + - "ichukisiKimariKichoktaoKicherokeeKicheyeniKikurdi cha SoraniKikhuftiKrio" + - "li ya ShelisheliKidakotaKidaragwaKitaitaKidogribKizarmaKidolnoserbskiKid" + - "ualaKijola-FonyiKijulaKidazagaKiembuKiefikiKimisriKiekajukKiewondoKifili" + - "pinoKifonKifaransa cha KaleKifrisia cha KaskaziniKifrisia cha MasharikiK" + - "ifriulianKigaKigagauzKigbayaKige’ezKikiribatiKigorontaloKiyunaniKijeruma" + - "ni cha UswisiKikisiiGwichʼinKihawaiKihiligaynonKihitiKihmongKisobia cha " + - "Ukanda wa JuuHupaKiibanKiibibioKiilocanoLojbanKingombaKimachameKikabylia" + - "KachinKijjuKikambaKikanembuKityapKimakondeKikabuverdianuKikoroKikhasiKoy" + - "ra ChiiniLugha ya KakoKikalenjinKimbunduKikomi-PermyakKikonkaniKikpelleK" + - "ikarachay-BalkarKarjalaKurukhKisambaaKibafiaKicologneKumykKiladinoKirang" + - "iLambaKilakotaKimongoKiloziKiluri cha KaskaziniKiluba-LuluaKilundaKijalu" + - "oKimizoKiluhyaKimaduraKimafaKimagahiKimaithiliKimakasarKimaasaiKimabaLug" + - "ha ya MokshaKimendeKimeruKimoriseniKimakhuwa-MeettoKimetaMi’kmaqKiminang" + - "kabauKimanipuriLugha ya MohawkKimooreKimundangLugha NyingiKikrikiKierzya" + - "KimazanderaniKinapoliKinamaKisaksoniKinewariKiniueaKikwasioLugha ya Ngie" + - "mboonKinogaiN’KoKisotho cha KaskaziniKinuerKinewari cha kaleKinyamweziKi" + - "nyankoleKinyoroKinzemaKipangasinanKipampangaKipapiamentoKipalauKiajemi c" + - "ha KaleKiprussiaKʼicheʼKirapanuiKirarotongaKiromboKiaromaniaKirwaKisanda" + - "weKisakhaKiaramu cha WasamariaKisamburuKisantaliKingambayKisanguKisicili" + - "aKiskotiKikurdi cha KusiniKisenaKoyraboro SenniKitachelhitKishanKisami c" + - "ha KusiniKisami cha LuleKisami cha InariKisami cha SkoltKisoninkeLugha y" + - "a Sranan TongoKisahoKisukumaKisusuShikomorLugha ya SyriacKitemneKitesoKi" + - "tetumKitigreKiklingoniKitokpisinKitarokoKitumbukaKituvaluKitasawaqKituva" + - "Central Atlas TamazightUdmurtUmbunduRootKivaiKivunjoWalserKiwolayttaKiwa" + - "rayKiwarlpiriKikalmykKisogaKiyaoKiyangbenKiyembaKikantoniTamaziti Sanifu" + - " ya KimorokoKizuniHakuna maudhui ya lughaKizazaKiarabu Sanifu cha Kisasa" + - "Kihispania (Uhispania)Kihispania (Mexico)Kifaransa (Canada)KiflemiKireno" + - " (Brazil)Kiserbia-kroeshiaKingwanaKichina (Kilichorahisishwa)Kichina cha" + - " Jadi" - -var swLangIdx = []uint16{ // 613 elements + "gishKilingalaKilaosiKilithuaniaKiluba-KatangaKilatviaKimalagasiKimashale" + + "KimaoriKimacedoniaKimalayalamKimongoliaKimarathiKimaleiKimaltaKiburmaKin" + + "auruKindebele cha KaskaziniKinepaliKindongaKiholanziKinorwe cha NynorskK" + + "inorwe cha BokmalKindebeleKinavajoKinyanjaKiokitaniKioromoKioriyaKioseti" + + "aKipunjabiKipolandiKipashtoKirenoKiquechuaKiromanshiKirundiKiromaniaKiru" + + "siKinyarwandaKisanskritiKisardiniaKisindhiKisami cha KaskaziniKisangoKis" + + "inhalaKislovakiaKisloveniaKisamoaKishonaKisomaliKialbaniaKiserbiaKiswati" + + "KisothoKisundaKiswidiKiswahiliKitamilKiteluguKitajikiKitailandiKitigriny" + + "aKiturukimeniKitswanaKitongaKiturukiKitsongaKitatariKitahitiKiuyghurKiuk" + + "raineKiurduKiuzbekiKivendaKivietinamuKivolapukWalloonLugha ya WolofKixho" + + "saKiyiddiKiyorubaKichinaKizuluKiacheniKiakoliKiadangmeKiadygheKiaghemKia" + + "inuKialeutKialtaiKiingereza cha KaleKiangikaKiaramuKimapucheKiarapahoKia" + + "rabu cha AlgeriaKiarabu cha MisriKiasuKiasturiaKiawadhiKibaliKibasaaKiba" + + "munKighomalaKibejaKibembaKibenaKibafutKibalochi cha MagharibiKibhojpuriK" + + "ibiniKikomKisiksikaKibodoLugha ya BugineseKibuluKiblinKimedumbaKichebuan" + + "oKichigaKichukisiKimariKichoktaoKicherokeeKicheyeniKikurdi cha SoraniKik" + + "huftiKrioli ya ShelisheliKidakotaKidaragwaKitaitaKidogribKizarmaKidolnos" + + "erbskiKidualaKijola-FonyiKijulaKidazagaKiembuKiefikKimisriKiekajukKiewon" + + "doKifilipinoKifonKifaransa cha KaleKifrisia cha KaskaziniKifrisia cha Ma" + + "sharikiKifriulianGaKigagauzKigbayaKige’ezKikiribatiKigorontaloKiyunaniKi" + + "jerumani cha UswisiKikisiiGwichʼinKihawaiKihiligaynonKihitiKihmongKisobi" + + "a cha Ukanda wa JuuHupaKiibanKiibibioKiilocanoKiingushLojbanKingombaKima" + + "chameKikabyliaKachinKijjuKikambaKikabardianKikanembuKityapKimakondeKikab" + + "uverdianuKikoroKikhasiKoyra ChiiniLugha ya KakoKikalenjinKimbunduKikomi-" + + "PermyakKikonkaniKikpelleKikarachay-BalkarKarjalaKurukhKisambaaKibafiaKic" + + "ologneKumykKiladinoKirangiLambaKilezighianKilakotaKimongoKiloziKiluri ch" + + "a KaskaziniKiluba-LuluaKilundaKijaluoKimizoKiluhyaKimaduraKimafaKimagahi" + + "KimaithiliKimakasarKimaasaiKimabaLugha ya MokshaKimendeKimeruKimoriseniK" + + "imakhuwa-MeettoKimetaMi’kmaqKiminangkabauKimanipuriLugha ya MohawkKimoor" + + "eKimundangLugha NyingiKikrikiKimirandiKierzyaKimazanderaniKinapoliKinama" + + "KisaksoniKinewariKiniasiKiniueaKikwasioLugha ya NgiemboonKinogaiN’KoKiso" + + "tho cha KaskaziniKinuerKinewari cha kaleKinyamweziKinyankoleKinyoroKinze" + + "maKipangasinanKipampangaKipapiamentoKipalauPijini ya NigeriaKiajemi cha " + + "KaleKiprussiaKʼicheʼKirapanuiKirarotongaKiromboKiaromaniaLugha ya RwaKis" + + "andaweKisakhaKiaramu cha WasamariaKisamburuKisantaliKingambayKisanguKisi" + + "ciliaKiskotiKikurdi cha KusiniKisenaKoyraboro SenniKitachelhitKishanKisa" + + "mi cha KusiniKisami cha LuleKisami cha InariKisami cha SkoltKisoninkeLug" + + "ha ya Sranan TongoKisahoKisukumaKisusuShikomorLugha ya SyriacKitemneKite" + + "soKitetumKitigreKiklingoniKitokpisinKitarokoKitumbukaKituvaluKitasawaqKi" + + "tuvaCentral Atlas TamazightUdmurtUmbunduLugha IsiyojulikanaKivaiKivunjoW" + + "alserKiwolayttaKiwarayKiwarlpiriKikalmykKisogaKiyaoKiyangbenKiyembaKikan" + + "toniKiberber Sanifu cha MorokoKizuniHakuna maudhui ya lughaKizazaKiarabu" + + " sanifuKiingereza (Canada)Kihispania (Mexico)Kifaransa (Canada)KiflemiKi" + + "serbia-kroeshiaKingwanaKichina (Kilichorahisishwa)Kichina cha Jadi" + +var swLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0006, 0x000f, 0x000f, 0x0019, 0x0020, 0x0028, 0x0031, 0x0038, 0x003f, 0x0046, 0x004e, 0x005b, 0x0064, 0x006e, 0x0078, @@ -24629,82 +26010,82 @@ var swLangIdx = []uint16{ // 613 elements 0x0262, 0x026d, 0x0275, 0x027b, 0x0282, 0x0289, 0x0291, 0x029b, 0x02a3, 0x02b0, 0x02ba, 0x02c3, 0x02ca, 0x02d2, 0x02dc, 0x02e3, 0x02e9, 0x02f0, 0x02f8, 0x0300, 0x030b, 0x0312, 0x031c, 0x0325, - 0x032c, 0x0337, 0x0345, 0x034d, 0x0357, 0x0357, 0x035e, 0x0369, - 0x0374, 0x037e, 0x0387, 0x038e, 0x0395, 0x039c, 0x03a3, 0x03ba, - 0x03c2, 0x03ca, 0x03d3, 0x03e6, 0x03f9, 0x0402, 0x040a, 0x0412, - 0x041b, 0x041b, 0x0422, 0x0429, 0x0431, 0x043a, 0x043a, 0x0443, + 0x032c, 0x0337, 0x0345, 0x034d, 0x0357, 0x0360, 0x0367, 0x0372, + 0x037d, 0x0387, 0x0390, 0x0397, 0x039e, 0x03a5, 0x03ac, 0x03c3, + 0x03cb, 0x03d3, 0x03dc, 0x03ef, 0x0401, 0x040a, 0x0412, 0x041a, + 0x0423, 0x0423, 0x042a, 0x0431, 0x0439, 0x0442, 0x0442, 0x044b, // Entry 80 - BF - 0x044b, 0x0451, 0x045a, 0x0464, 0x046b, 0x0474, 0x047a, 0x0485, - 0x0490, 0x049a, 0x04a2, 0x04b6, 0x04bd, 0x04c6, 0x04d0, 0x04da, - 0x04e1, 0x04e8, 0x04f0, 0x04f9, 0x0501, 0x0508, 0x050f, 0x0516, - 0x051d, 0x0526, 0x052d, 0x0535, 0x053d, 0x0547, 0x0551, 0x055d, - 0x0565, 0x056c, 0x0574, 0x057c, 0x0584, 0x058c, 0x0594, 0x059d, - 0x05a3, 0x05ab, 0x05b2, 0x05bd, 0x05c7, 0x05ce, 0x05dc, 0x05e3, - 0x05ea, 0x05f2, 0x05f2, 0x05f9, 0x05ff, 0x0607, 0x060e, 0x0617, - 0x061f, 0x061f, 0x061f, 0x0626, 0x062c, 0x062c, 0x062c, 0x0633, + 0x0453, 0x0459, 0x0462, 0x046c, 0x0473, 0x047c, 0x0482, 0x048d, + 0x0498, 0x04a2, 0x04aa, 0x04be, 0x04c5, 0x04ce, 0x04d8, 0x04e2, + 0x04e9, 0x04f0, 0x04f8, 0x0501, 0x0509, 0x0510, 0x0517, 0x051e, + 0x0525, 0x052e, 0x0535, 0x053d, 0x0545, 0x054f, 0x0559, 0x0565, + 0x056d, 0x0574, 0x057c, 0x0584, 0x058c, 0x0594, 0x059c, 0x05a5, + 0x05ab, 0x05b3, 0x05ba, 0x05c5, 0x05ce, 0x05d5, 0x05e3, 0x05ea, + 0x05f1, 0x05f9, 0x05f9, 0x0600, 0x0606, 0x060e, 0x0615, 0x061e, + 0x0626, 0x0626, 0x0626, 0x062d, 0x0633, 0x0633, 0x0633, 0x063a, // Entry C0 - FF - 0x0633, 0x063a, 0x064d, 0x0655, 0x065c, 0x0665, 0x0665, 0x066e, - 0x0681, 0x0681, 0x0681, 0x0681, 0x0692, 0x0697, 0x0697, 0x06a0, - 0x06a0, 0x06a8, 0x06a8, 0x06ae, 0x06ae, 0x06b5, 0x06bc, 0x06bc, - 0x06c5, 0x06cb, 0x06d2, 0x06d2, 0x06d8, 0x06df, 0x06df, 0x06f6, - 0x0700, 0x0700, 0x0706, 0x0706, 0x070b, 0x0714, 0x0714, 0x0714, - 0x0714, 0x0714, 0x071a, 0x071a, 0x071a, 0x072b, 0x0731, 0x0737, - 0x0740, 0x0740, 0x0740, 0x0740, 0x0740, 0x074a, 0x0751, 0x0751, - 0x0751, 0x075a, 0x0760, 0x0760, 0x0769, 0x0769, 0x0773, 0x077c, + 0x063a, 0x0641, 0x0654, 0x065c, 0x0663, 0x066c, 0x066c, 0x0675, + 0x0688, 0x0688, 0x0688, 0x0688, 0x0699, 0x069e, 0x069e, 0x06a7, + 0x06a7, 0x06af, 0x06af, 0x06b5, 0x06b5, 0x06bc, 0x06c3, 0x06c3, + 0x06cc, 0x06d2, 0x06d9, 0x06d9, 0x06df, 0x06e6, 0x06e6, 0x06fd, + 0x0707, 0x0707, 0x070d, 0x070d, 0x0712, 0x071b, 0x071b, 0x071b, + 0x071b, 0x071b, 0x0721, 0x0721, 0x0721, 0x0732, 0x0738, 0x073e, + 0x0747, 0x0747, 0x0747, 0x0747, 0x0747, 0x0747, 0x0751, 0x0758, + 0x0758, 0x0758, 0x0761, 0x0767, 0x0767, 0x0770, 0x0770, 0x077a, // Entry 100 - 13F - 0x078e, 0x0796, 0x0796, 0x0796, 0x07aa, 0x07aa, 0x07b2, 0x07bb, - 0x07c2, 0x07c2, 0x07c2, 0x07ca, 0x07ca, 0x07d1, 0x07d1, 0x07df, - 0x07df, 0x07e6, 0x07e6, 0x07f2, 0x07f8, 0x0800, 0x0806, 0x080d, - 0x080d, 0x0814, 0x081c, 0x081c, 0x081c, 0x081c, 0x0824, 0x0824, - 0x0824, 0x082e, 0x082e, 0x0833, 0x0833, 0x0833, 0x0845, 0x0845, - 0x085b, 0x0871, 0x087b, 0x087f, 0x0887, 0x0887, 0x0887, 0x088e, - 0x088e, 0x0897, 0x08a1, 0x08a1, 0x08a1, 0x08a1, 0x08a1, 0x08a1, - 0x08ac, 0x08ac, 0x08ac, 0x08b4, 0x08c9, 0x08c9, 0x08c9, 0x08d0, + 0x0783, 0x0795, 0x079d, 0x079d, 0x079d, 0x07b1, 0x07b1, 0x07b9, + 0x07c2, 0x07c9, 0x07c9, 0x07c9, 0x07d1, 0x07d1, 0x07d8, 0x07d8, + 0x07e6, 0x07e6, 0x07ed, 0x07ed, 0x07f9, 0x07ff, 0x0807, 0x080d, + 0x0813, 0x0813, 0x081a, 0x0822, 0x0822, 0x0822, 0x0822, 0x082a, + 0x082a, 0x082a, 0x0834, 0x0834, 0x0839, 0x0839, 0x0839, 0x084b, + 0x084b, 0x0861, 0x0877, 0x0881, 0x0883, 0x088b, 0x088b, 0x088b, + 0x0892, 0x0892, 0x089b, 0x08a5, 0x08a5, 0x08a5, 0x08a5, 0x08a5, + 0x08a5, 0x08b0, 0x08b0, 0x08b0, 0x08b8, 0x08cd, 0x08cd, 0x08cd, // Entry 140 - 17F - 0x08d9, 0x08d9, 0x08d9, 0x08e0, 0x08e0, 0x08ec, 0x08f2, 0x08f9, - 0x0912, 0x0912, 0x0916, 0x091c, 0x0924, 0x092d, 0x092d, 0x092d, - 0x092d, 0x0933, 0x093b, 0x0944, 0x0944, 0x0944, 0x0944, 0x0944, - 0x094d, 0x0953, 0x0958, 0x095f, 0x095f, 0x095f, 0x0968, 0x096e, - 0x0977, 0x0985, 0x0985, 0x098b, 0x098b, 0x0992, 0x0992, 0x099e, - 0x099e, 0x099e, 0x09ab, 0x09b5, 0x09bd, 0x09cb, 0x09d4, 0x09d4, - 0x09dc, 0x09ed, 0x09ed, 0x09ed, 0x09f4, 0x09fa, 0x0a02, 0x0a09, - 0x0a12, 0x0a17, 0x0a17, 0x0a1f, 0x0a26, 0x0a26, 0x0a2b, 0x0a2b, + 0x08d4, 0x08dd, 0x08dd, 0x08dd, 0x08e4, 0x08e4, 0x08f0, 0x08f6, + 0x08fd, 0x0916, 0x0916, 0x091a, 0x0920, 0x0928, 0x0931, 0x0939, + 0x0939, 0x0939, 0x093f, 0x0947, 0x0950, 0x0950, 0x0950, 0x0950, + 0x0950, 0x0959, 0x095f, 0x0964, 0x096b, 0x096b, 0x0976, 0x097f, + 0x0985, 0x098e, 0x099c, 0x099c, 0x09a2, 0x09a2, 0x09a9, 0x09a9, + 0x09b5, 0x09b5, 0x09b5, 0x09c2, 0x09cc, 0x09d4, 0x09e2, 0x09eb, + 0x09eb, 0x09f3, 0x0a04, 0x0a04, 0x0a04, 0x0a0b, 0x0a11, 0x0a19, + 0x0a20, 0x0a29, 0x0a2e, 0x0a2e, 0x0a36, 0x0a3d, 0x0a3d, 0x0a42, // Entry 180 - 1BF - 0x0a2b, 0x0a2b, 0x0a2b, 0x0a33, 0x0a33, 0x0a3a, 0x0a40, 0x0a54, - 0x0a54, 0x0a60, 0x0a60, 0x0a67, 0x0a6e, 0x0a74, 0x0a7b, 0x0a7b, - 0x0a7b, 0x0a83, 0x0a89, 0x0a91, 0x0a9b, 0x0aa4, 0x0aa4, 0x0aac, - 0x0ab2, 0x0ac1, 0x0ac1, 0x0ac8, 0x0ace, 0x0ad8, 0x0ad8, 0x0ae8, - 0x0aee, 0x0af7, 0x0b04, 0x0b04, 0x0b0e, 0x0b1d, 0x0b24, 0x0b24, - 0x0b2d, 0x0b39, 0x0b40, 0x0b40, 0x0b40, 0x0b40, 0x0b40, 0x0b47, - 0x0b54, 0x0b54, 0x0b5c, 0x0b62, 0x0b6b, 0x0b73, 0x0b73, 0x0b7a, - 0x0b7a, 0x0b82, 0x0b94, 0x0b9b, 0x0b9b, 0x0b9b, 0x0ba1, 0x0bb6, + 0x0a4d, 0x0a4d, 0x0a4d, 0x0a4d, 0x0a55, 0x0a55, 0x0a5c, 0x0a5c, + 0x0a62, 0x0a76, 0x0a76, 0x0a82, 0x0a82, 0x0a89, 0x0a90, 0x0a96, + 0x0a9d, 0x0a9d, 0x0a9d, 0x0aa5, 0x0aab, 0x0ab3, 0x0abd, 0x0ac6, + 0x0ac6, 0x0ace, 0x0ad4, 0x0ae3, 0x0ae3, 0x0aea, 0x0af0, 0x0afa, + 0x0afa, 0x0b0a, 0x0b10, 0x0b19, 0x0b26, 0x0b26, 0x0b30, 0x0b3f, + 0x0b46, 0x0b46, 0x0b4f, 0x0b5b, 0x0b62, 0x0b6b, 0x0b6b, 0x0b6b, + 0x0b6b, 0x0b72, 0x0b7f, 0x0b7f, 0x0b87, 0x0b8d, 0x0b96, 0x0b9e, + 0x0ba5, 0x0bac, 0x0bac, 0x0bb4, 0x0bc6, 0x0bcd, 0x0bcd, 0x0bcd, // Entry 1C0 - 1FF - 0x0bbc, 0x0bcd, 0x0bd7, 0x0be1, 0x0be8, 0x0bef, 0x0bef, 0x0bef, - 0x0bfb, 0x0bfb, 0x0c05, 0x0c11, 0x0c18, 0x0c18, 0x0c18, 0x0c18, - 0x0c18, 0x0c28, 0x0c28, 0x0c28, 0x0c28, 0x0c28, 0x0c28, 0x0c31, - 0x0c31, 0x0c3a, 0x0c3a, 0x0c3a, 0x0c43, 0x0c4e, 0x0c4e, 0x0c4e, - 0x0c55, 0x0c55, 0x0c55, 0x0c55, 0x0c55, 0x0c5f, 0x0c64, 0x0c6d, - 0x0c74, 0x0c89, 0x0c92, 0x0c92, 0x0c9b, 0x0c9b, 0x0ca4, 0x0cab, - 0x0cb4, 0x0cbb, 0x0cbb, 0x0ccd, 0x0ccd, 0x0cd3, 0x0cd3, 0x0cd3, - 0x0ce2, 0x0ce2, 0x0ce2, 0x0ced, 0x0cf3, 0x0cf3, 0x0cf3, 0x0cf3, + 0x0bd3, 0x0be8, 0x0bee, 0x0bff, 0x0c09, 0x0c13, 0x0c1a, 0x0c21, + 0x0c21, 0x0c21, 0x0c2d, 0x0c2d, 0x0c37, 0x0c43, 0x0c4a, 0x0c4a, + 0x0c5b, 0x0c5b, 0x0c5b, 0x0c6b, 0x0c6b, 0x0c6b, 0x0c6b, 0x0c6b, + 0x0c6b, 0x0c74, 0x0c74, 0x0c7d, 0x0c7d, 0x0c7d, 0x0c86, 0x0c91, + 0x0c91, 0x0c91, 0x0c98, 0x0c98, 0x0c98, 0x0c98, 0x0c98, 0x0ca2, + 0x0cae, 0x0cb7, 0x0cbe, 0x0cd3, 0x0cdc, 0x0cdc, 0x0ce5, 0x0ce5, + 0x0cee, 0x0cf5, 0x0cfe, 0x0d05, 0x0d05, 0x0d17, 0x0d17, 0x0d1d, + 0x0d1d, 0x0d1d, 0x0d2c, 0x0d2c, 0x0d2c, 0x0d37, 0x0d3d, 0x0d3d, // Entry 200 - 23F - 0x0cf3, 0x0d04, 0x0d13, 0x0d23, 0x0d33, 0x0d3c, 0x0d3c, 0x0d51, - 0x0d51, 0x0d57, 0x0d57, 0x0d5f, 0x0d65, 0x0d65, 0x0d6d, 0x0d6d, - 0x0d7c, 0x0d7c, 0x0d7c, 0x0d83, 0x0d89, 0x0d89, 0x0d90, 0x0d97, - 0x0d97, 0x0d97, 0x0d97, 0x0da1, 0x0da1, 0x0da1, 0x0da1, 0x0da1, - 0x0dab, 0x0dab, 0x0db3, 0x0db3, 0x0db3, 0x0db3, 0x0dbc, 0x0dc4, - 0x0dcd, 0x0dd3, 0x0dea, 0x0df0, 0x0df0, 0x0df7, 0x0dfb, 0x0e00, - 0x0e00, 0x0e00, 0x0e00, 0x0e00, 0x0e00, 0x0e00, 0x0e07, 0x0e0d, - 0x0e17, 0x0e1e, 0x0e1e, 0x0e28, 0x0e28, 0x0e30, 0x0e30, 0x0e36, + 0x0d3d, 0x0d3d, 0x0d3d, 0x0d4e, 0x0d5d, 0x0d6d, 0x0d7d, 0x0d86, + 0x0d86, 0x0d9b, 0x0d9b, 0x0da1, 0x0da1, 0x0da9, 0x0daf, 0x0daf, + 0x0db7, 0x0db7, 0x0dc6, 0x0dc6, 0x0dc6, 0x0dcd, 0x0dd3, 0x0dd3, + 0x0dda, 0x0de1, 0x0de1, 0x0de1, 0x0de1, 0x0deb, 0x0deb, 0x0deb, + 0x0deb, 0x0deb, 0x0df5, 0x0df5, 0x0dfd, 0x0dfd, 0x0dfd, 0x0dfd, + 0x0e06, 0x0e0e, 0x0e17, 0x0e1d, 0x0e34, 0x0e3a, 0x0e3a, 0x0e41, + 0x0e54, 0x0e59, 0x0e59, 0x0e59, 0x0e59, 0x0e59, 0x0e59, 0x0e59, + 0x0e60, 0x0e66, 0x0e70, 0x0e77, 0x0e77, 0x0e81, 0x0e81, 0x0e89, // Entry 240 - 27F - 0x0e3b, 0x0e3b, 0x0e44, 0x0e4b, 0x0e4b, 0x0e54, 0x0e54, 0x0e54, - 0x0e54, 0x0e54, 0x0e6f, 0x0e75, 0x0e8c, 0x0e92, 0x0eab, 0x0eab, - 0x0eab, 0x0eab, 0x0eab, 0x0eab, 0x0eab, 0x0eab, 0x0eab, 0x0ec1, - 0x0ed4, 0x0ed4, 0x0ee6, 0x0ee6, 0x0ee6, 0x0eed, 0x0efc, 0x0efc, - 0x0efc, 0x0f0d, 0x0f15, 0x0f30, 0x0f40, -} // Size: 1250 bytes - -const taLangStr string = "" + // Size: 12975 bytes + 0x0e89, 0x0e8f, 0x0e94, 0x0e94, 0x0e9d, 0x0ea4, 0x0ea4, 0x0ead, + 0x0ead, 0x0ead, 0x0ead, 0x0ead, 0x0ec7, 0x0ecd, 0x0ee4, 0x0eea, + 0x0ef8, 0x0ef8, 0x0ef8, 0x0ef8, 0x0ef8, 0x0f0b, 0x0f0b, 0x0f0b, + 0x0f0b, 0x0f0b, 0x0f1e, 0x0f1e, 0x0f30, 0x0f30, 0x0f30, 0x0f37, + 0x0f37, 0x0f37, 0x0f37, 0x0f48, 0x0f50, 0x0f6b, 0x0f7b, +} // Size: 1254 bytes + +const taLangStr string = "" + // Size: 13092 bytes "அஃபார்அப்காஜியான்அவெஸ்தான்ஆஃப்ரிகான்ஸ்அகான்அம்ஹாரிக்ஆர்கோனீஸ்அரபிக்அஸ்ஸா" + "மீஸ்அவேரிக்அய்மராஅஸர்பைஜானிபஷ்கிர்பெலாருஷியன்பல்கேரியன்பிஸ்லாமாபம்பாரா" + "வங்காளம்திபெத்தியன்பிரெட்டன்போஸ்னியன்கேட்டலான்செச்சென்சாமோரோகார்சிகன்க" + @@ -24734,42 +26115,43 @@ const taLangStr string = "" + // Size: 12975 bytes "ஷ்காப்டிக்கிரிமியன் துர்க்கிசெசெல்வா க்ரெயோல் பிரெஞ்சுகஷுபியன்டகோடாதார" + "்குவாடைடாடெலாவர்ஸ்லாவ்டோக்ரிப்டின்காஸார்மாடோக்ரிலோயர் சோர்பியன்டுவாலாம" + "ிடில் டச்சுஜோலா-ஃபோன்யிட்யூலாடசாகாஎம்புஎஃபிக்பண்டைய எகிப்தியன்ஈகாஜுக்எ" + - "லமைட்மிடில் ஆங்கிலம்எவோன்டோஃபேங்க்ஃபிலிபினோஃபான்மிடில் பிரெஞ்சுபழைய பி" + - "ரெஞ்சுவடக்கு ஃப்ரிஸியான்கிழக்கு ஃப்ரிஸியான்ஃப்ரியூலியன்காகாகௌஸ்கன் சீன" + - "ம்கயோபயாகீஜ்கில்பெர்டீஸ்மிடில் ஹை ஜெர்மன்பழைய ஹை ஜெர்மன்கோன்டிகோரோன்டல" + - "ோகோதிக்க்ரேபோபண்டைய கிரேக்கம்ஸ்விஸ் ஜெர்மன்குஸிகுவிசின்ஹைடாஹக்கா சீனம்" + - "ஹவாயியன்ஃபிஜி இந்திஹிலிகாய்னான்ஹிட்டைட்மாங்க்அப்பர் சோர்பியான்சியாங்க்" + - " சீனம்ஹுபாஇபான்இபிபியோஇலோகோஇங்குஷ்லோஜ்பன்நகொம்பாமாசெம்ஜூதேயோ-பெர்ஷியன்ஜூ" + - "தேயோ-அராபிக்காரா-கல்பாக்கபாய்ல்காசின்ஜ்ஜூகம்பாகாவிகபார்டியன்தையாப்மகொண" + - "்டேகபுவெர்தியானுகோரோகாஸிகோதானீஸ்கொய்ரா சீனீககோகலின்ஜின்கிம்புன்துகொமி-" + - "பெர்ம்யாக்கொங்கணிகோஸ்ரைன்க்பெல்லேகராசே-பல்கார்கரேலியன்குருக்ஷம்பாலாபாஃ" + - "பியாகொலோக்னியன்கும்இக்குடேனைலடினோலங்கிலஹன்டாலம்பாலெஜ்ஜியன்லகோடாமோங்கோல" + - "ோசிவடக்கு லுரிலுபா-லுலுலாலுய்சேனோலூன்டாலுயோமிஸோலுயியாமதுரீஸ்மகாஹிமைதில" + - "ிமகாசார்மான்டிங்கோமாசாய்மோக்க்ஷாமான்டார்மென்டீமெருமொரிசியன்மிடில் ஐரிஷ" + - "்மகுவா-மீட்டோமேடாமிக்மாக்மின்னாங்கபௌமன்சூமணிப்புரிமொஹாக்மோஸ்ஸிமுன்டாங்" + - "பல மொழிகள்க்ரீக்மிரான்டீஸ்மார்வாரிஏர்ஜியாமசந்தேரனிமின் நான் சீனம்நியோப" + - "ோலிடன்நாமாலோ ஜெர்மன்நெவாரிநியாஸ்நியூவான்க்வாசியோநெகெய்ம்பூன்நோகைபழைய ந" + - "ோர்ஸ்என்‘கோவடக்கு சோதோநியூர்பாரம்பரிய நேவாரிநியாம்வேஜிநியான்கோலேநியோரோ" + - "நிஜ்மாஓசேஜ்ஓட்டோமான் துருக்கிஷ்பன்காசினன்பாஹ்லவிபம்பாங்காபபியாமென்டோபல" + - "ௌவன்நைஜீரியன் பிட்கின்பென்சில்வேனிய ஜெர்மன்பழைய பெர்ஷியன்ஃபொனிஷியன்ஃபோ" + - "ன்பெயென்பிரஷ்யன்பழைய ப்ரோவென்சால்கீசீராஜஸ்தானிரபனுய்ரரோடோங்கன்ரோம்போரோ" + - "மானிஅரோமானியன்ருவாசான்டாவேசகாசமாரிடன் அராமைக்சம்புருசாசாக்சான்டாலிசௌரா" + - "ஷ்டிரம்நெகாம்பேசங்குசிசிலியன்ஸ்காட்ஸ்தெற்கு குர்திஷ்செனாசெல்குப்கொய்ரா" + - "போரோ சென்னிபழைய ஐரிஷ்தசேஹித்ஷான்சிடாமோதெற்கு சமிலுலே சமிஇனாரி சமிஸ்கோல" + - "்ட் சமிசோனின்கேசோக்தியன்ஸ்ரானன் டோங்கோசெரெர்சஹோசுகுமாசுசுசுமேரியன்கொமோ" + - "ரியன்பாரம்பரிய சிரியாக்சிரியாக்டிம்னேடெசோடெரெனோடெடும்டைக்ரேடிவ்டோகேலௌக" + - "்ளிங்கோன்லிங்கிட்தமஷேக்நயாசா டோங்காடோக் பிஸின்தரோகோட்ஸிம்ஷியன்தும்புகா" + - "டுவாலுடசவாக்டுவினியன்மத்திய அட்லஸ் டமசைட்உட்முர்ட்உகாரிடிக்அம்பொண்டுரூ" + - "ட்வைவோட்க்வுன்ஜோவால்சேர்வோலாய்ட்டாவாரேவாஷோவல்பிரிவூ சீனம்கல்மிக்சோகாயா" + - "வ்யாபேசேயாங்பென்யெம்பாகாண்டோனீஸ்ஜாபோடெக்ப்லிஸ்ஸிம்பால்ஸ்ஜெனகாஸ்டாண்டர்" + - "ட் மொராக்கன் தமாசைட்ஜூனிமொழி உள்ளடக்கம் ஏதுமில்லைஜாஜாநவீன நிலையான அரபி" + - "க்ஆஸ்திரிய ஜெர்மன்ஸ்விஸ் ஹை ஜெர்மன்ஆஸ்திரேலிய ஆங்கிலம்கனடிய ஆங்கிலம்பி" + - "ரிட்டிஷ் ஆங்கிலம்அமெரிக்க ஆங்கிலம்லத்தின் அமெரிக்க ஸ்பானிஷ்ஐரோப்பிய ஸ்" + - "பானிஷ்மெக்ஸிகன் ஸ்பானிஷ்கனடிய பிரெஞ்சுஸ்விஸ் பிரஞ்சுலோ சாக்ஸன்ஃப்லெமிஷ" + - "்பிரேசிலிய போர்ச்சுகீஸ்ஐரோப்பிய போர்ச்சுகீஸ்மோல்டாவியன்செர்போ-குரோஷியன" + - "்காங்கோ ஸ்வாஹிலிஎளிதாக்கப்பட்ட சீனம்பாரம்பரிய சீனம்" - -var taLangIdx = []uint16{ // 613 elements + "லமைட்மிடில் ஆங்கிலம்எவோன்டோஃபேங்க்ஃபிலிபினோஃபான்கஜுன் பிரெஞ்சுமிடில் ப" + + "ிரெஞ்சுபழைய பிரெஞ்சுவடக்கு ஃப்ரிஸியான்கிழக்கு ஃப்ரிஸியான்ஃப்ரியூலியன்க" + + "ாகாகௌஸ்கன் சீனம்கயோபயாகீஜ்கில்பெர்டீஸ்மிடில் ஹை ஜெர்மன்பழைய ஹை ஜெர்மன்" + + "கோன்டிகோரோன்டலோகோதிக்க்ரேபோபண்டைய கிரேக்கம்ஸ்விஸ் ஜெர்மன்குஸிகுவிசின்ஹ" + + "ைடாஹக்கா சீனம்ஹவாயியன்ஃபிஜி இந்திஹிலிகாய்னான்ஹிட்டைட்மாங்க்அப்பர் சோர்" + + "பியான்சியாங்க் சீனம்ஹுபாஇபான்இபிபியோஇலோகோஇங்குஷ்லோஜ்பன்நகொம்பாமாசெம்ஜூ" + + "தேயோ-பெர்ஷியன்ஜூதேயோ-அராபிக்காரா-கல்பாக்கபாய்ல்காசின்ஜ்ஜூகம்பாகாவிகபார" + + "்டியன்தையாப்மகொண்டேகபுவெர்தியானுகோரோகாஸிகோதானீஸ்கொய்ரா சீனீககோகலின்ஜின" + + "்கிம்புன்துகொமி-பெர்ம்யாக்கொங்கணிகோஸ்ரைன்க்பெல்லேகராசே-பல்கார்கரேலியன்" + + "குருக்ஷம்பாலாபாஃபியாகொலோக்னியன்கும்இக்குடேனைலடினோலங்கிலஹன்டாலம்பாலெஜ்ஜ" + + "ியன்லகோடாமோங்கோலூசியானா க்ரயோல்லோசிவடக்கு லுரிலுபா-லுலுலாலுய்சேனோலூன்ட" + + "ாலுயோமிஸோலுயியாமதுரீஸ்மகாஹிமைதிலிமகாசார்மான்டிங்கோமாசாய்மோக்க்ஷாமான்டா" + + "ர்மென்டீமெருமொரிசியன்மிடில் ஐரிஷ்மகுவா-மீட்டோமேடாமிக்மாக்மின்னாங்கபௌமன" + + "்சூமணிப்புரிமொஹாக்மோஸ்ஸிமுன்டாங்பல மொழிகள்க்ரீக்மிரான்டீஸ்மார்வாரிஏர்ஜ" + + "ியாமசந்தேரனிமின் நான் சீனம்நியோபோலிடன்நாமாலோ ஜெர்மன்நெவாரிநியாஸ்நியூவா" + + "ன்க்வாசியோநெகெய்ம்பூன்நோகைபழைய நோர்ஸ்என்‘கோவடக்கு சோதோநியூர்பாரம்பரிய " + + "நேவாரிநியாம்வேஜிநியான்கோலேநியோரோநிஜ்மாஓசேஜ்ஓட்டோமான் துருக்கிஷ்பன்காசி" + + "னன்பாஹ்லவிபம்பாங்காபபியாமென்டோபலௌவன்நைஜீரியன் பிட்கின்பென்சில்வேனிய ஜெ" + + "ர்மன்பழைய பெர்ஷியன்ஃபொனிஷியன்ஃபோன்பெயென்பிரஷ்யன்பழைய ப்ரோவென்சால்கீசீர" + + "ாஜஸ்தானிரபனுய்ரரோடோங்கன்ரோம்போரோமானிஅரோமானியன்ருவாசான்டாவேசகாசமாரிடன் " + + "அராமைக்சம்புருசாசாக்சான்டாலிசௌராஷ்டிரம்நெகாம்பேசங்குசிசிலியன்ஸ்காட்ஸ்த" + + "ெற்கு குர்திஷ்செனாசெல்குப்கொய்ராபோரோ சென்னிபழைய ஐரிஷ்தசேஹித்ஷான்சிடாமோ" + + "தெற்கு சமிலுலே சமிஇனாரி சமிஸ்கோல்ட் சமிசோனின்கேசோக்தியன்ஸ்ரானன் டோங்கோ" + + "செரெர்சஹோசுகுமாசுசுசுமேரியன்கொமோரியன்பாரம்பரிய சிரியாக்சிரியாக்டிம்னேட" + + "ெசோடெரெனோடெடும்டைக்ரேடிவ்டோகேலௌக்ளிங்கோன்லிங்கிட்தமஷேக்நயாசா டோங்காடோக" + + "் பிஸின்தரோகோட்ஸிம்ஷியன்தும்புகாடுவாலுடசவாக்டுவினியன்மத்திய அட்லஸ் டமச" + + "ைட்உட்முர்ட்உகாரிடிக்அம்பொண்டுஅறியப்படாத மொழிவைவோட்க்வுன்ஜோவால்சேர்வோல" + + "ாய்ட்டாவாரேவாஷோவல்பிரிவூ சீனம்கல்மிக்சோகாயாவ்யாபேசேயாங்பென்யெம்பாகாண்ட" + + "ோனீஸ்ஜாபோடெக்ப்லிஸ்ஸிம்பால்ஸ்ஜெனகாஸ்டாண்டர்ட் மொராக்கன் தமாசைட்ஜூனிமொழ" + + "ி உள்ளடக்கம் ஏதுமில்லைஜாஜாநவீன நிலையான அரபிக்ஆஸ்திரிய ஜெர்மன்ஸ்விஸ் ஹை" + + " ஜெர்மன்ஆஸ்திரேலிய ஆங்கிலம்கனடிய ஆங்கிலம்பிரிட்டிஷ் ஆங்கிலம்அமெரிக்க ஆங்" + + "கிலம்லத்தின் அமெரிக்க ஸ்பானிஷ்ஐரோப்பிய ஸ்பானிஷ்மெக்ஸிகன் ஸ்பானிஷ்கனடிய" + + " பிரெஞ்சுஸ்விஸ் பிரஞ்சுலோ சாக்ஸன்ஃப்லெமிஷ்பிரேசிலிய போர்ச்சுகீஸ்ஐரோப்பிய" + + " போர்ச்சுகீஸ்மோல்டாவியன்செர்போ-குரோஷியன்காங்கோ ஸ்வாஹிலிஎளிதாக்கப்பட்ட சீ" + + "னம்பாரம்பரிய சீனம்" + +var taLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0012, 0x0033, 0x004e, 0x0072, 0x0081, 0x009c, 0x00b7, 0x00c9, 0x00e4, 0x00f9, 0x010b, 0x0129, 0x013e, 0x015f, 0x017d, @@ -24804,444 +26186,445 @@ var taLangIdx = []uint16{ // 613 elements 0x12cd, 0x12d9, 0x12eb, 0x12eb, 0x12f7, 0x12f7, 0x1303, 0x132b, 0x1343, 0x1355, 0x1361, 0x1361, 0x1361, 0x1379, 0x13a3, 0x13a3, 0x13b5, 0x13b5, 0x13c1, 0x13c1, 0x13d9, 0x13f1, 0x13f1, 0x1403, - 0x1403, 0x140f, 0x141e, 0x141e, 0x1430, 0x1448, 0x1454, 0x1466, - 0x1472, 0x1484, 0x1490, 0x14bb, 0x14cd, 0x14eb, 0x14fd, 0x150f, + 0x1403, 0x140f, 0x141e, 0x141e, 0x1430, 0x1430, 0x1448, 0x1454, + 0x1466, 0x1472, 0x1484, 0x1490, 0x14bb, 0x14cd, 0x14eb, 0x14fd, // Entry 100 - 13F - 0x153a, 0x1552, 0x1552, 0x1586, 0x15d0, 0x15e8, 0x15f7, 0x160f, - 0x161b, 0x1630, 0x1642, 0x165a, 0x166c, 0x167e, 0x1690, 0x16bb, - 0x16bb, 0x16cd, 0x16ef, 0x1711, 0x1723, 0x1732, 0x1741, 0x1753, - 0x1753, 0x1784, 0x1799, 0x17ab, 0x17d6, 0x17d6, 0x17eb, 0x17eb, - 0x1800, 0x181b, 0x181b, 0x182a, 0x182a, 0x1855, 0x187a, 0x187a, - 0x18ae, 0x18e5, 0x1909, 0x190f, 0x1921, 0x193a, 0x1943, 0x194c, - 0x194c, 0x1958, 0x197c, 0x197c, 0x19ab, 0x19d4, 0x19d4, 0x19e6, - 0x1a01, 0x1a13, 0x1a25, 0x1a53, 0x1a7b, 0x1a7b, 0x1a7b, 0x1a87, + 0x150f, 0x153a, 0x1552, 0x1552, 0x1586, 0x15d0, 0x15e8, 0x15f7, + 0x160f, 0x161b, 0x1630, 0x1642, 0x165a, 0x166c, 0x167e, 0x1690, + 0x16bb, 0x16bb, 0x16cd, 0x16ef, 0x1711, 0x1723, 0x1732, 0x1741, + 0x1753, 0x1753, 0x1784, 0x1799, 0x17ab, 0x17d6, 0x17d6, 0x17eb, + 0x17eb, 0x1800, 0x181b, 0x181b, 0x182a, 0x1852, 0x187d, 0x18a2, + 0x18a2, 0x18d6, 0x190d, 0x1931, 0x1937, 0x1949, 0x1962, 0x196b, + 0x1974, 0x1974, 0x1980, 0x19a4, 0x19a4, 0x19d3, 0x19fc, 0x19fc, + 0x1a0e, 0x1a29, 0x1a3b, 0x1a4d, 0x1a7b, 0x1aa3, 0x1aa3, 0x1aa3, // Entry 140 - 17F - 0x1a9f, 0x1aab, 0x1aca, 0x1ae2, 0x1b01, 0x1b25, 0x1b3d, 0x1b4f, - 0x1b80, 0x1ba8, 0x1bb4, 0x1bc3, 0x1bd8, 0x1be7, 0x1bfc, 0x1bfc, - 0x1bfc, 0x1c11, 0x1c26, 0x1c38, 0x1c66, 0x1c8e, 0x1c8e, 0x1cb0, - 0x1cc5, 0x1cd7, 0x1ce3, 0x1cf2, 0x1cfe, 0x1d1c, 0x1d1c, 0x1d2e, - 0x1d43, 0x1d6a, 0x1d6a, 0x1d76, 0x1d76, 0x1d82, 0x1d9a, 0x1db9, - 0x1db9, 0x1db9, 0x1dc2, 0x1ddd, 0x1dfb, 0x1e26, 0x1e3b, 0x1e53, - 0x1e6b, 0x1e90, 0x1e90, 0x1e90, 0x1ea8, 0x1eba, 0x1ecf, 0x1ee4, - 0x1f05, 0x1f1a, 0x1f2c, 0x1f3b, 0x1f4a, 0x1f5c, 0x1f6b, 0x1f86, + 0x1aaf, 0x1ac7, 0x1ad3, 0x1af2, 0x1b0a, 0x1b29, 0x1b4d, 0x1b65, + 0x1b77, 0x1ba8, 0x1bd0, 0x1bdc, 0x1beb, 0x1c00, 0x1c0f, 0x1c24, + 0x1c24, 0x1c24, 0x1c39, 0x1c4e, 0x1c60, 0x1c8e, 0x1cb6, 0x1cb6, + 0x1cd8, 0x1ced, 0x1cff, 0x1d0b, 0x1d1a, 0x1d26, 0x1d44, 0x1d44, + 0x1d56, 0x1d6b, 0x1d92, 0x1d92, 0x1d9e, 0x1d9e, 0x1daa, 0x1dc2, + 0x1de1, 0x1de1, 0x1de1, 0x1dea, 0x1e05, 0x1e23, 0x1e4e, 0x1e63, + 0x1e7b, 0x1e93, 0x1eb8, 0x1eb8, 0x1eb8, 0x1ed0, 0x1ee2, 0x1ef7, + 0x1f0c, 0x1f2d, 0x1f42, 0x1f54, 0x1f63, 0x1f72, 0x1f84, 0x1f93, // Entry 180 - 1BF - 0x1f86, 0x1f86, 0x1f86, 0x1f95, 0x1f95, 0x1fa7, 0x1fb3, 0x1fd2, - 0x1fd2, 0x1ff1, 0x2009, 0x201b, 0x2027, 0x2033, 0x2045, 0x2045, - 0x2045, 0x205a, 0x205a, 0x2069, 0x207b, 0x2090, 0x20ae, 0x20c0, - 0x20c0, 0x20d8, 0x20f0, 0x2102, 0x210e, 0x2129, 0x214b, 0x216d, - 0x2179, 0x2191, 0x21b2, 0x21c1, 0x21dc, 0x21ee, 0x2200, 0x2200, - 0x2218, 0x2234, 0x2246, 0x2264, 0x227c, 0x227c, 0x227c, 0x2291, - 0x22ac, 0x22d5, 0x22f6, 0x2302, 0x231e, 0x2330, 0x2342, 0x235a, - 0x235a, 0x2372, 0x2396, 0x23a2, 0x23c1, 0x23c1, 0x23d3, 0x23f2, + 0x1fae, 0x1fae, 0x1fae, 0x1fae, 0x1fbd, 0x1fbd, 0x1fcf, 0x1ffd, + 0x2009, 0x2028, 0x2028, 0x2047, 0x205f, 0x2071, 0x207d, 0x2089, + 0x209b, 0x209b, 0x209b, 0x20b0, 0x20b0, 0x20bf, 0x20d1, 0x20e6, + 0x2104, 0x2116, 0x2116, 0x212e, 0x2146, 0x2158, 0x2164, 0x217f, + 0x21a1, 0x21c3, 0x21cf, 0x21e7, 0x2208, 0x2217, 0x2232, 0x2244, + 0x2256, 0x2256, 0x226e, 0x228a, 0x229c, 0x22ba, 0x22d2, 0x22d2, + 0x22d2, 0x22e7, 0x2302, 0x232b, 0x234c, 0x2358, 0x2374, 0x2386, + 0x2398, 0x23b0, 0x23b0, 0x23c8, 0x23ec, 0x23f8, 0x2417, 0x2417, // Entry 1C0 - 1FF - 0x2404, 0x2432, 0x2450, 0x246e, 0x2480, 0x2492, 0x24a1, 0x24db, - 0x24f9, 0x250e, 0x2529, 0x254a, 0x255c, 0x255c, 0x2590, 0x25cd, - 0x25cd, 0x25f5, 0x25f5, 0x2613, 0x2613, 0x2613, 0x2634, 0x264c, - 0x267d, 0x2689, 0x2689, 0x26a4, 0x26b6, 0x26d4, 0x26d4, 0x26d4, - 0x26e6, 0x26f8, 0x26f8, 0x26f8, 0x26f8, 0x2716, 0x2722, 0x273a, - 0x2743, 0x2771, 0x2786, 0x2798, 0x27b0, 0x27d1, 0x27e9, 0x27f8, - 0x2813, 0x282b, 0x282b, 0x2856, 0x2856, 0x2862, 0x2862, 0x287a, - 0x28ab, 0x28c7, 0x28c7, 0x28dc, 0x28e8, 0x28e8, 0x28fa, 0x28fa, + 0x2429, 0x2448, 0x245a, 0x2488, 0x24a6, 0x24c4, 0x24d6, 0x24e8, + 0x24f7, 0x2531, 0x254f, 0x2564, 0x257f, 0x25a0, 0x25b2, 0x25b2, + 0x25e6, 0x2623, 0x2623, 0x264b, 0x264b, 0x2669, 0x2669, 0x2669, + 0x268a, 0x26a2, 0x26d3, 0x26df, 0x26df, 0x26fa, 0x270c, 0x272a, + 0x272a, 0x272a, 0x273c, 0x274e, 0x274e, 0x274e, 0x274e, 0x276c, + 0x2778, 0x2790, 0x2799, 0x27c7, 0x27dc, 0x27ee, 0x2806, 0x2827, + 0x283f, 0x284e, 0x2869, 0x2881, 0x2881, 0x28ac, 0x28ac, 0x28b8, + 0x28b8, 0x28d0, 0x2901, 0x291d, 0x291d, 0x2932, 0x293e, 0x293e, // Entry 200 - 23F - 0x28fa, 0x2916, 0x292c, 0x2945, 0x2967, 0x297f, 0x299a, 0x29c2, - 0x29d4, 0x29dd, 0x29dd, 0x29ef, 0x29fb, 0x2a16, 0x2a31, 0x2a65, - 0x2a7d, 0x2a7d, 0x2a7d, 0x2a8f, 0x2a9b, 0x2aad, 0x2abf, 0x2ad1, - 0x2add, 0x2aef, 0x2aef, 0x2b0d, 0x2b25, 0x2b25, 0x2b37, 0x2b59, - 0x2b78, 0x2b78, 0x2b87, 0x2b87, 0x2ba8, 0x2ba8, 0x2bc0, 0x2bd2, - 0x2be4, 0x2bff, 0x2c37, 0x2c52, 0x2c6d, 0x2c88, 0x2c94, 0x2c9a, - 0x2c9a, 0x2c9a, 0x2c9a, 0x2c9a, 0x2cac, 0x2cac, 0x2cbe, 0x2cd6, - 0x2cf4, 0x2d00, 0x2d0c, 0x2d21, 0x2d37, 0x2d4c, 0x2d4c, 0x2d58, + 0x2950, 0x2950, 0x2950, 0x296c, 0x2982, 0x299b, 0x29bd, 0x29d5, + 0x29f0, 0x2a18, 0x2a2a, 0x2a33, 0x2a33, 0x2a45, 0x2a51, 0x2a6c, + 0x2a87, 0x2abb, 0x2ad3, 0x2ad3, 0x2ad3, 0x2ae5, 0x2af1, 0x2b03, + 0x2b15, 0x2b27, 0x2b33, 0x2b45, 0x2b45, 0x2b63, 0x2b7b, 0x2b7b, + 0x2b8d, 0x2baf, 0x2bce, 0x2bce, 0x2bdd, 0x2bdd, 0x2bfe, 0x2bfe, + 0x2c16, 0x2c28, 0x2c3a, 0x2c55, 0x2c8d, 0x2ca8, 0x2cc3, 0x2cde, + 0x2d09, 0x2d0f, 0x2d0f, 0x2d0f, 0x2d0f, 0x2d0f, 0x2d21, 0x2d21, + 0x2d33, 0x2d4b, 0x2d69, 0x2d75, 0x2d81, 0x2d96, 0x2dac, 0x2dc1, // Entry 240 - 27F - 0x2d64, 0x2d76, 0x2d8e, 0x2da0, 0x2da0, 0x2dbe, 0x2dd6, 0x2e06, - 0x2e06, 0x2e15, 0x2e68, 0x2e74, 0x2ebb, 0x2ec7, 0x2efc, 0x2efc, - 0x2f2a, 0x2f59, 0x2f90, 0x2fb8, 0x2fef, 0x3020, 0x3067, 0x3098, - 0x30cc, 0x30cc, 0x30f4, 0x311c, 0x3138, 0x3153, 0x3193, 0x31d0, - 0x31f1, 0x321f, 0x324a, 0x3284, 0x32af, -} // Size: 1250 bytes - -const teLangStr string = "" + // Size: 12415 bytes + 0x2dc1, 0x2dcd, 0x2dd9, 0x2deb, 0x2e03, 0x2e15, 0x2e15, 0x2e33, + 0x2e4b, 0x2e7b, 0x2e7b, 0x2e8a, 0x2edd, 0x2ee9, 0x2f30, 0x2f3c, + 0x2f71, 0x2f71, 0x2f9f, 0x2fce, 0x3005, 0x302d, 0x3064, 0x3095, + 0x30dc, 0x310d, 0x3141, 0x3141, 0x3169, 0x3191, 0x31ad, 0x31c8, + 0x3208, 0x3245, 0x3266, 0x3294, 0x32bf, 0x32f9, 0x3324, +} // Size: 1254 bytes + +const teLangStr string = "" + // Size: 12487 bytes "అఫార్అబ్ఖాజియన్అవేస్టాన్ఆఫ్రికాన్స్అకాన్అమ్హారిక్అరగోనిస్అరబిక్అస్సామీస్" + "అవారిక్ఐమారాఅజర్బైజానిబష్కిర్బెలరుషియన్బల్గేరియన్బిస్లామాబంబారాబాంగ్లా" + - "టిబెటన్బ్రెటన్బోస్నియన్కెటలాన్చెచెన్చమర్రోకోర్సికన్క్రిచెక్చర్చ స్లావి" + - "క్చువాష్వెల్ష్డానిష్జర్మన్దివేహిజోంఖాఈవీగ్రీక్ఆంగ్లంఎస్పెరాంటోస్పానిష్" + - "ఈస్టోనియన్బాస్క్యూపర్షియన్ఫ్యులఫిన్నిష్ఫిజియన్ఫారోయీజ్ఫ్రెంచ్పశ్చిమ ఫ్" + - "రిసియన్ఐరిష్స్కాటిష్ గేలిక్గాలిషియన్గురానిగుజరాతిమంకస్హౌసాహీబ్రూహిందీహ" + - "ిరి మోటుక్రోయేషియన్హైటియన్ క్రియోల్హంగేరియన్ఆర్మేనియన్హిరేరోఇంటర్లింగ్" + - "వాఇండోనేషియన్ఇంటర్లింగ్ఇగ్బోశిషువన్ ఈఇనుపైయాక్ఈడౌఐస్లాండిక్ఇటాలియన్ఇంక" + - "్టిటుట్జపనీస్జావనీస్జార్జియన్కోంగోకికుయుక్వాన్యామకజఖ్కలాల్లిసూట్ఖ్మేర్" + - "కన్నడకొరియన్కానురికాశ్మీరికుర్దిష్కోమికోర్నిష్కిర్గిజ్లాటిన్లుక్సంబర్గ" + - "ిష్గాండాలిమ్బర్గిష్లింగాలలావోలిథుయేనియన్లూబ-కటాంగలాట్వియన్మాలాగసిమార్ష" + - "లీస్మయోరిమసడోనియన్మలయాళంమంగోలియన్మరాఠీమలేయ్మాల్టీస్బర్మీస్నౌరుఉత్తర దె" + - "బెలెనేపాలిదోంగాడచ్నార్వేజియాన్ న్యోర్స్క్నార్వేజియన్ బొక్మాల్దక్షిణ దె" + - "బెలెనవాజొన్యాన్జాఆక్సిటన్చేవాఒరోమోఒడియాఒసేటిక్పంజాబీపాలీపోలిష్పాష్టోపో" + - "ర్చుగీస్కెషుయారోమన్ష్రండిరోమానియన్రష్యన్కిన్యర్వాండాసంస్కృతంసార్డీనియన" + - "్సింధీఉత్తర సామిసాంగోసింహళంస్లోవాక్స్లోవేనియాన్సమోవన్షోనసోమాలిఅల్బేనియ" + - "న్సెర్బియన్స్వాతిదక్షిణ సోతోసుడానీస్స్వీడిష్స్వాహిలితమిళముతెలుగుతజిక్థ" + - "ాయ్తిగ్రిన్యాతుర్కమెన్సెటస్వానాటాంగాన్టర్కిష్సోంగాటాటర్తహితియన్ఉయ్" + - "\u200cఘర్ఉక్రేనియన్ఉర్దూఉజ్బెక్వెండావియత్నామీస్వోలాపుక్వాలూన్వొలాఫ్షోసాఇ" + - "డ్డిష్యోరుబాజువాన్చైనీస్జూలూఆఖినీస్అకోలిఅడాంగ్మేఅడిగాబ్జేటునీషియా అరబి" + - "క్అఫ్రిహిలిఅగేమ్ఐనుఅక్కాడియాన్అలియుట్దక్షిణ ఆల్టైప్రాచీన ఆంగ్లంఆంగికఅర" + - "ామేక్అరౌకేనియన్అరాపాహోఅరావాక్ఈజిప్షియన్ అరబిక్అసుఅస్టురియాన్అవధిబాలుచి" + - "బాలినీస్బసాబేజాబెంబాబీనాపశ్చిమ బలూచీభోజ్ పూరిబికోల్బినిసిక్ సికాబిష్ణు" + - "ప్రియబ్రాజ్బోడోబురియట్బ్యుగినిస్బ్లిన్కేడ్డోకేరిబ్అట్సామ్సెబుయానోఛిగాచ" + - "ిబ్చాచాగటైచూకిస్మారిచినూక్ జార్గన్చొచ్కతావ్చిపెవ్యాన్చెరోకీచేయేన్సెంట్" + - "రల్ కుర్దిష్కోప్టిక్క్రిమియన్ టర్కిష్సెసేల్వా క్రియోల్ ఫ్రెంచ్కషుబియన్" + - "డకోటాడార్గ్వాటైటాడెలావేర్స్లేవ్డోగ్రిబ్డింకాజార్మాడోగ్రిలోవర్ సోర్బియన" + - "్దుఆలామధ్యమ డచ్జోలా-ఫోనయిడ్యులాడాజాగాఇంబుఎఫిక్ప్రాచీన ఈజిప్షియన్ఏకాజక్" + - "ఎలామైట్మధ్యమ ఆంగ్లంఎవోండొఫాంగ్ఫిలిపినోఫాన్మధ్యమ ప్రెంచ్ప్రాచీన ఫ్రెంచ్" + - "ఉత్తర ఫ్రిసియన్తూర్పు ఫ్రిసియన్ఫ్రియులియన్గాగాగౌజ్గాన్ చైనీస్గాయోగ్బాయ" + - "ాజీజ్గిల్బర్టీస్మధ్యమ హై జర్మన్ప్రాచీన హై జర్మన్గోండిగోరోంటలాగోథిక్గ్ర" + - "ేబోప్రాచీన గ్రీక్స్విస్ జర్మన్గుస్సీగ్విచిన్హైడాహక్కా చైనీస్హవాయియన్హి" + - "లిగేయినోన్హిట్టిటేమోంగ్అప్పర్ సోర్బియన్జియాంగ్ చైనీస్హుపాఐబాన్ఇబిబియోఐ" + - "యోకోఇంగుష్లోజ్బాన్గోంబామకొమ్జ్యుడియో-పర్షియన్జ్యుడియో-అరబిక్కారా-కల్పా" + - "క్కాబిల్కాచిన్జ్యూకంబాకావికబార్డియన్ట్యాప్మకొండేకాబువేర్దియనుకోరోఖాసిఖ" + - "టోనీస్కొయరా చీన్నీకాకోకలెంజిన్కిమ్బుండుకోమి-పర్మాక్కొంకణికోస్రేయన్పెల్" + - "లేకరచే-బల్కార్కరేలియన్కూరుఖ్శంబాలాబాఫియకొలొజీయన్కుమ్యిక్కుటేనైలాడినోలా" + - "ంగీలాహండాలాంబాలేజ్ఘియన్లకొటామొంగోలోజిఉత్తర లూరీలుబా-లులువలుయిసెనోలుండా" + - "లువోమిజోలుయియమాదురీస్మగాహిమైథిలిమకాసార్మండింగోమాసాయిమొక్షామండార్మెండేమ" + - "ెరుమొరిస్యేన్మధ్యమ ఐరిష్మక్వా-మిట్టోమెటామికమాక్మినాంగ్కాబోమంచుమణిపూరిమ" + - "ోహుక్మోస్సిముదాంగ్బహుళ భాషలుక్రీక్మిరాండిస్మార్వాడిఎర్జియామాసన్\u200cద" + - "ెరానిమిన్ నాన్ చైనీస్నియాపోలిటన్నమలో జర్మన్నెవారినియాస్నియూఇయాన్క్వాసి" + - "యెగింబోన్నోగైప్రాచిన నోర్స్న్కోఉత్తర సోతోన్యుర్సాంప్రదాయ న్యూయారీన్యంవ" + - "ేజిన్యాన్కోలెనేయోరోజీమాఒసాజ్ఒట్టోమన్ టర్కిష్పంగా సినాన్పహ్లావిపంపగ్నపప" + - "ియమేంటోపాలుఆన్నైజీరియా పిడ్గిన్ప్రాచీన పర్షియన్ఫోనికన్పోహ్న్పెయన్ప్రష్" + - "యన్ప్రాచీన ప్రోవెంసాల్కిచేరాజస్తానీరాపన్యుయిరారోటొంగాన్రోంబోరోమానీఆరోమ" + - "ేనియన్ర్వాసండావిసఖాసమారిటన్ అరమేక్సంబురుససక్సంటాలిగాంబేసాంగుసిసిలియన్స" + - "్కాట్స్దక్షిణ కుర్దిష్సెనాసేల్కప్కోయోరాబోరో సెన్నీప్రాచీన ఐరిష్టాచెల్" + - "\u200cహిట్షాన్సిడామోదక్షిణ సామిలులే సామిఇనారి సామిస్కోల్ట్ సామిసోనింకిసో" + - "గ్డియన్స్రానన్ టోనగోసెరేర్సహోసుకుమాసుసుసుమేరియాన్కొమొరియన్సాంప్రదాయ సి" + - "రియాక్సిరియాక్తుళుటింనేటెసోటెరెనోటేటంటీగ్రెటివ్టోకెలావ్క్లింగాన్ట్లింగ" + - "ిట్టామషేక్న్యాసా టోన్గాటోక్ పిసిన్తరోకోశింషీయన్టుంబుకాటువాలుటసావాఖ్టువ" + - "ినియన్సెంట్రల్ అట్లాస్ టామాజైట్ఉడ్ముర్ట్ఉగారిటిక్ఉమ్బుండురూట్వాయివోటిక" + - "్వుంజొవాల్సర్వాలేట్టావారేవాషోవార్లపిరివు చైనీస్కల్మిక్సొగాయాయేయాపిస్యా" + - "ంగ్\u200cబెన్యెంబాకాంటనీస్జపోటెక్బ్లిసింబల్స్జెనాగాప్రామాణిక మొరొకన్ త" + - "మజియట్జునిలిపి లేదుజాజాఆధునిక ప్రామాణిక అరబిక్ఆస్ట్రేలియన్ జర్మన్స్విస" + - "్ హై జర్మన్ఆస్ట్రేలియన్ ఇంగ్లీష్కెనడియన్ ఇంగ్లీష్బ్రిటిష్ ఇంగ్లీష్అమెర" + - "ికన్ ఇంగ్లీష్లాటిన్ అమెరికన్ స్పానిష్యూరోపియన్ స్పానిష్మెక్సికన్ స్పాన" + - "ిష్కెనడియెన్ ఫ్రెంచ్స్విస్ ఫ్రెంచ్లో సాక్సన్ఫ్లెమిష్బ్రెజీలియన్ పోర్చు" + - "గీస్యూరోపియన్ పోర్చుగీస్మొల్డావియన్సేర్బో-క్రొయేషియన్కాంగో స్వాహిలిసరళ" + - "ీకృత చైనీస్సాంప్రదాయక చైనీస్" - -var teLangIdx = []uint16{ // 613 elements + "టిబెటన్బ్రెటన్బోస్నియన్కాటలాన్చెచెన్చమర్రోకోర్సికన్క్రిచెక్చర్చ్ స్లావ" + + "ిక్చువాష్వెల్ష్డానిష్జర్మన్దివేహిజోంఖాయూగ్రీక్ఆంగ్లంఎస్పెరాంటోస్పానిష్" + + "ఎస్టోనియన్బాస్క్యూపర్షియన్ఫ్యులఫిన్నిష్ఫిజియన్ఫారోయీజ్ఫ్రెంచ్పశ్చిమ ఫ్" + + "రిసియన్ఐరిష్స్కాటిష్ గేలిక్గాలిషియన్గ్వారనీగుజరాతిమాంక్స్హౌసాహీబ్రూహిం" + + "దీహిరి మోటుక్రోయేషియన్హైటియన్ క్రియోల్హంగేరియన్ఆర్మేనియన్హిరేరోఇంటర్లి" + + "ంగ్వాఇండోనేషియన్ఇంటర్లింగ్ఇగ్బోశిషువన్ ఈఇనుపైయాక్ఈడోఐస్లాండిక్ఇటాలియన్" + + "ఇనుక్టిటుట్జపనీస్జావనీస్జార్జియన్కోంగోకికుయుక్వాన్యామకజఖ్కలాల్లిసూట్ఖ్" + + "మేర్కన్నడకొరియన్కానురికాశ్మీరికుర్దిష్కోమికోర్నిష్కిర్గిజ్లాటిన్లక్సెం" + + "బర్గిష్గాండాలిమ్బర్గిష్లింగాలలావోలిథువేనియన్లూబ-కటాంగలాట్వియన్మాలాగసిమ" + + "ార్షలీస్మయోరిమసడోనియన్మలయాళంమంగోలియన్మరాఠీమలాయ్మాల్టీస్బర్మీస్నౌరుఉత్త" + + "ర దెబెలెనేపాలిడోంగాడచ్నార్వేజియాన్ న్యోర్స్క్నార్వేజియన్ బొక్మాల్దక్షి" + + "ణ దెబెలెనవాజొన్యాన్జాఆక్సిటన్చేవాఒరోమోఒడియాఒసేటిక్పంజాబీపాలీపోలిష్పాష్" + + "టోపోర్చుగీస్కెచువారోమన్ష్రుండిరోమానియన్రష్యన్కిన్యర్వాండాసంస్కృతంసార్డ" + + "ీనియన్సింధీఉత్తర సామిసాంగోసింహళంస్లోవాక్స్లోవేనియన్సమోవన్షోనసోమాలిఅల్బ" + + "ేనియన్సెర్బియన్స్వాతిదక్షిణ సోతోసండానీస్స్వీడిష్స్వాహిలితమిళముతెలుగుతజ" + + "ిక్థాయ్తిగ్రిన్యాతుర్క్\u200cమెన్స్వానాటాంగాన్టర్కిష్సోంగాటాటర్తహితియన" + + "్ఉయ్\u200cఘర్ఉక్రేనియన్ఉర్దూఉజ్బెక్వెండావియత్నామీస్వోలాపుక్వాలూన్వొలాఫ" + + "్షోసాఇడ్డిష్యోరుబాజువాన్చైనీస్జూలూఆఖినీస్అకోలిఅడాంగ్మేఅడిగాబ్జేటునీషియ" + + "ా అరబిక్అఫ్రిహిలిఅగేమ్ఐనుఅక్కాడియాన్అలియుట్దక్షిణ ఆల్టైప్రాచీన ఆంగ్లంఆ" + + "ంగికఅరామేక్మపుచేఅరాపాహోఅరావాక్ఈజిప్షియన్ అరబిక్అసుఆస్టూరియన్అవధిబాలుచి" + + "బాలినీస్బసాబేజాబెంబాబెనాపశ్చిమ బలూచీభోజ్\u200cపురిబికోల్బినిసిక్సికాబి" + + "ష్ణుప్రియబ్రాజ్బోడోబురియట్బుగినీస్బ్లిన్కేడ్డోకేరిబ్అట్సామ్సెబుయానోఛిగ" + + "ాచిబ్చాచాగటైచూకీస్మారిచినూక్ జార్గన్చక్టాచిపెవ్యాన్చెరోకీచేయేన్సెంట్రల" + + "్ కర్డిష్కోప్టిక్క్రిమియన్ టర్కిష్సెసేల్వా క్రియోల్ ఫ్రెంచ్కషుబియన్డకో" + + "టాడార్గ్వాటైటాడెలావేర్స్లేవ్డోగ్రిబ్డింకాజార్మాడోగ్రిలోయర్ సోర్బియన్డ్" + + "యూలామధ్యమ డచ్జోలా-ఫోనయిడ్యులాడాజాగాఇంబుఎఫిక్ప్రాచీన ఈజిప్షియన్ఏకాజక్ఎల" + + "ామైట్మధ్యమ ఆంగ్లంఎవోండొఫాంగ్ఫిలిపినోఫాన్కాజున్ ఫ్రెంచ్మధ్యమ ప్రెంచ్ప్ర" + + "ాచీన ఫ్రెంచ్ఉత్తర ఫ్రిసియన్తూర్పు ఫ్రిసియన్ఫ్రియులియన్గాగాగౌజ్గాన్ చైన" + + "ీస్గాయోగ్బాయాజీజ్గిల్బర్టీస్మధ్యమ హై జర్మన్ప్రాచీన హై జర్మన్గోండిగోరోం" + + "టలాగోథిక్గ్రేబోప్రాచీన గ్రీక్స్విస్ జర్మన్గుస్సీగ్విచిన్హైడాహక్కా చైనీ" + + "స్హవాయియన్హిలిగేయినోన్హిట్టిటేమోంగ్అప్పర్ సోర్బియన్జియాంగ్ చైనీస్హుపాఐ" + + "బాన్ఇబిబియోఐలోకోఇంగుష్లోజ్బాన్గోంబామకొమ్జ్యుడియో-పర్షియన్జ్యుడియో-అరబి" + + "క్కారా-కల్పాక్కాబిల్కాచిన్జ్యూకంబాకావికబార్డియన్ట్యాప్మకొండేకాబువేర్ది" + + "యనుకోరోఖాసిఖటోనీస్కొయరా చీన్నీకాకోకలెంజిన్కిమ్బుండుకోమి-పర్మాక్కొంకణిక" + + "ోస్రేయన్పెల్లేకరచే-బల్కార్కరేలియన్కూరుఖ్శంబాలాబాఫియకొలోనియన్కుమ్యిక్కు" + + "టేనైలాడినోలాంగీలాహండాలాంబాలేజ్ఘియన్లకొటామొంగోలూసియానా క్రియోల్లోజిఉత్త" + + "ర లూరీలుబా-లులువలుయిసెనోలుండాలువోమిజోలుయియమాదురీస్మగాహిమైథిలిమకాసార్మం" + + "డింగోమాసైమోక్షమండార్మెండేమెరుమొరిస్యేన్మధ్యమ ఐరిష్మక్వా-మిట్టోమెటామికమ" + + "ాక్మినాంగ్\u200cకాబోమంచుమణిపురిమోహాక్మోస్సిమండాంగ్బహుళ భాషలుక్రీక్మిరా" + + "ండిస్మార్వాడిఎర్జియామాసన్\u200cదెరానిమిన్ నాన్ చైనీస్నియాపోలిటన్నమలో జ" + + "ర్మన్నెవారినియాస్నాయియన్క్వాసియెగింబూన్నోగైప్రాచిన నోర్స్న్కోఉత్తర సోత" + + "ోన్యుర్సాంప్రదాయ న్యూయారీన్యంవేజిన్యాన్కోలెనేయోరోజీమాఒసాజ్ఒట్టోమన్ టర్" + + "కిష్పంగాసినాన్పహ్లావిపంపన్గాపపియమేంటోపలావెన్నైజీరియా పిడ్గిన్ప్రాచీన ప" + + "ర్షియన్ఫోనికన్పోహ్న్పెయన్ప్రష్యన్ప్రాచీన ప్రోవెంసాల్కిచేరాజస్తానీరాపన్" + + "యుయిరారోటొంగాన్రోంబోరోమానీఆరోమేనియన్ర్వాసండావిసఖాసమారిటన్ అరమేక్సంబురు" + + "ససక్సంటాలిగాంబేసాంగుసిసిలియన్స్కాట్స్దక్షిణ కుర్దిష్సెనాసేల్కప్కోయోరాబ" + + "ోరో సెన్నీప్రాచీన ఐరిష్టాచెల్\u200cహిట్షాన్సిడామోదక్షిణ సామిలులే సామిఇ" + + "నారి సామిస్కోల్ట్ సామిసోనింకిసోగ్డియన్స్రానన్ టోంగోసెరేర్సాహోసుకుమాసుస" + + "ుసుమేరియాన్కొమొరియన్సాంప్రదాయ సిరియాక్సిరియాక్తుళుటిమ్నేటెసోటెరెనోటేటం" + + "టీగ్రెటివ్టోకెలావ్క్లింగాన్ట్లింగిట్టామషేక్న్యాసా టోన్గాటోక్ పిసిన్తరో" + + "కోశింషీయన్టుంబుకాటువాలుటసావాఖ్టువినియన్సెంట్రల్ అట్లాస్ టామాజైట్ఉడ్ముర" + + "్ట్ఉగారిటిక్ఉమ్బుండుతెలియని భాషవాయివోటిక్వుంజొవాల్సర్వాలేట్టావారేవాషోవ" + + "ార్లపిరివు చైనీస్కల్మిక్సొగాయాయేయాపిస్యాంగ్\u200cబెన్యెంబాకాంటనీస్జపోట" + + "ెక్బ్లిసింబల్స్జెనాగాప్రామాణిక మొరొకన్ టామజైట్జునిలిపి లేదుజాజాఆధునిక " + + "ప్రామాణిక అరబిక్ఆస్ట్రియన్ జర్మన్స్విస్ హై జర్మన్ఆస్ట్రేలియన్ ఇంగ్లీష్" + + "కెనడియన్ ఇంగ్లీష్బ్రిటిష్ ఇంగ్లీష్అమెరికన్ ఇంగ్లీష్లాటిన్ అమెరికన్ స్ప" + + "ానిష్యూరోపియన్ స్పానిష్మెక్సికన్ స్పానిష్కెనడియెన్ ఫ్రెంచ్స్విస్ ఫ్రెం" + + "చ్లో సాక్సన్ఫ్లెమిష్బ్రెజీలియన్ పోర్చుగీస్యూరోపియన్ పోర్చుగీస్మొల్డావి" + + "యన్సేర్బో-క్రొయేషియన్కాంగో స్వాహిలిసరళీకృత చైనీస్సాంప్రదాయక చైనీస్" + +var teLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x000f, 0x002d, 0x0048, 0x0069, 0x0078, 0x0093, 0x00ab, 0x00bd, 0x00d8, 0x00ed, 0x00fc, 0x011a, 0x012f, 0x014d, 0x016b, 0x0183, 0x0195, 0x01aa, 0x01bf, 0x01d4, 0x01ef, 0x0204, 0x0216, - 0x0228, 0x0243, 0x024f, 0x025b, 0x0280, 0x0292, 0x02a4, 0x02b6, - 0x02c8, 0x02da, 0x02e9, 0x02f2, 0x0304, 0x0316, 0x0334, 0x034c, + 0x0228, 0x0243, 0x024f, 0x025b, 0x0283, 0x0295, 0x02a7, 0x02b9, + 0x02cb, 0x02dd, 0x02ec, 0x02f2, 0x0304, 0x0316, 0x0334, 0x034c, 0x036a, 0x0382, 0x039a, 0x03a9, 0x03c1, 0x03d6, 0x03ee, 0x0403, - 0x0431, 0x0440, 0x046b, 0x0486, 0x0498, 0x04ad, 0x04bc, 0x04c8, - 0x04da, 0x04e9, 0x0502, 0x0523, 0x0551, 0x056c, 0x058a, 0x059c, + 0x0431, 0x0440, 0x046b, 0x0486, 0x049b, 0x04b0, 0x04c5, 0x04d1, + 0x04e3, 0x04f2, 0x050b, 0x052c, 0x055a, 0x0575, 0x0593, 0x05a5, // Entry 40 - 7F - 0x05c0, 0x05e1, 0x05ff, 0x060e, 0x0627, 0x0642, 0x064b, 0x0669, - 0x0681, 0x069f, 0x06b1, 0x06c6, 0x06e1, 0x06f0, 0x0702, 0x071d, - 0x0729, 0x074a, 0x075c, 0x076b, 0x0780, 0x0792, 0x07aa, 0x07c2, - 0x07ce, 0x07e6, 0x07fe, 0x0810, 0x0837, 0x0846, 0x0867, 0x0879, - 0x0885, 0x08a6, 0x08bf, 0x08da, 0x08ef, 0x090a, 0x0919, 0x0934, - 0x0946, 0x0961, 0x0970, 0x097f, 0x0997, 0x09ac, 0x09b8, 0x09da, - 0x09ec, 0x09fb, 0x0a04, 0x0a47, 0x0a81, 0x0aa6, 0x0ab5, 0x0acd, - 0x0ae5, 0x0af1, 0x0b00, 0x0b0f, 0x0b24, 0x0b36, 0x0b42, 0x0b54, + 0x05c9, 0x05ea, 0x0608, 0x0617, 0x0630, 0x064b, 0x0654, 0x0672, + 0x068a, 0x06ab, 0x06bd, 0x06d2, 0x06ed, 0x06fc, 0x070e, 0x0729, + 0x0735, 0x0756, 0x0768, 0x0777, 0x078c, 0x079e, 0x07b6, 0x07ce, + 0x07da, 0x07f2, 0x080a, 0x081c, 0x0843, 0x0852, 0x0873, 0x0885, + 0x0891, 0x08b2, 0x08cb, 0x08e6, 0x08fb, 0x0916, 0x0925, 0x0940, + 0x0952, 0x096d, 0x097c, 0x098b, 0x09a3, 0x09b8, 0x09c4, 0x09e6, + 0x09f8, 0x0a07, 0x0a10, 0x0a53, 0x0a8d, 0x0ab2, 0x0ac1, 0x0ad9, + 0x0af1, 0x0afd, 0x0b0c, 0x0b1b, 0x0b30, 0x0b42, 0x0b4e, 0x0b60, // Entry 80 - BF - 0x0b66, 0x0b84, 0x0b96, 0x0bab, 0x0bb7, 0x0bd2, 0x0be4, 0x0c08, - 0x0c20, 0x0c41, 0x0c50, 0x0c6c, 0x0c7b, 0x0c8d, 0x0ca5, 0x0cc9, - 0x0cdb, 0x0ce4, 0x0cf6, 0x0d14, 0x0d2f, 0x0d41, 0x0d60, 0x0d78, - 0x0d90, 0x0da8, 0x0dba, 0x0dcc, 0x0ddb, 0x0de7, 0x0e05, 0x0e20, - 0x0e3b, 0x0e50, 0x0e65, 0x0e74, 0x0e83, 0x0e9b, 0x0eb0, 0x0ece, - 0x0edd, 0x0ef2, 0x0f01, 0x0f22, 0x0f3a, 0x0f4c, 0x0f5e, 0x0f6a, - 0x0f7f, 0x0f91, 0x0fa3, 0x0fb5, 0x0fc1, 0x0fd6, 0x0fe5, 0x0ffd, - 0x1018, 0x1043, 0x105e, 0x106d, 0x1076, 0x1097, 0x1097, 0x10ac, + 0x0b72, 0x0b90, 0x0ba2, 0x0bb7, 0x0bc6, 0x0be1, 0x0bf3, 0x0c17, + 0x0c2f, 0x0c50, 0x0c5f, 0x0c7b, 0x0c8a, 0x0c9c, 0x0cb4, 0x0cd5, + 0x0ce7, 0x0cf0, 0x0d02, 0x0d20, 0x0d3b, 0x0d4d, 0x0d6c, 0x0d84, + 0x0d9c, 0x0db4, 0x0dc6, 0x0dd8, 0x0de7, 0x0df3, 0x0e11, 0x0e32, + 0x0e44, 0x0e59, 0x0e6e, 0x0e7d, 0x0e8c, 0x0ea4, 0x0eb9, 0x0ed7, + 0x0ee6, 0x0efb, 0x0f0a, 0x0f2b, 0x0f43, 0x0f55, 0x0f67, 0x0f73, + 0x0f88, 0x0f9a, 0x0fac, 0x0fbe, 0x0fca, 0x0fdf, 0x0fee, 0x1006, + 0x1021, 0x104c, 0x1067, 0x1076, 0x107f, 0x10a0, 0x10a0, 0x10b5, // Entry C0 - FF - 0x10ac, 0x10ce, 0x10f6, 0x1105, 0x111a, 0x1138, 0x1138, 0x114d, - 0x114d, 0x114d, 0x1162, 0x1162, 0x1193, 0x119c, 0x119c, 0x11bd, - 0x11bd, 0x11c9, 0x11db, 0x11f3, 0x11f3, 0x11fc, 0x11fc, 0x11fc, - 0x11fc, 0x1208, 0x1217, 0x1217, 0x1223, 0x1223, 0x1223, 0x1245, - 0x125e, 0x1270, 0x127c, 0x127c, 0x127c, 0x1295, 0x12b6, 0x12b6, - 0x12c8, 0x12c8, 0x12d4, 0x12d4, 0x12e9, 0x1307, 0x1307, 0x1319, - 0x1319, 0x132b, 0x133d, 0x133d, 0x1352, 0x136a, 0x1376, 0x1388, - 0x1397, 0x13a9, 0x13b5, 0x13dd, 0x13f8, 0x1416, 0x1428, 0x143a, + 0x10b5, 0x10d7, 0x10ff, 0x110e, 0x1123, 0x1132, 0x1132, 0x1147, + 0x1147, 0x1147, 0x115c, 0x115c, 0x118d, 0x1196, 0x1196, 0x11b4, + 0x11b4, 0x11c0, 0x11d2, 0x11ea, 0x11ea, 0x11f3, 0x11f3, 0x11f3, + 0x11f3, 0x11ff, 0x120e, 0x120e, 0x121a, 0x121a, 0x121a, 0x123c, + 0x1257, 0x1269, 0x1275, 0x1275, 0x1275, 0x128d, 0x12ae, 0x12ae, + 0x12c0, 0x12c0, 0x12cc, 0x12cc, 0x12e1, 0x12f9, 0x12f9, 0x130b, + 0x130b, 0x131d, 0x132f, 0x132f, 0x1344, 0x1344, 0x135c, 0x1368, + 0x137a, 0x1389, 0x139b, 0x13a7, 0x13cf, 0x13de, 0x13fc, 0x140e, // Entry 100 - 13F - 0x146b, 0x1483, 0x1483, 0x14b4, 0x14fb, 0x1513, 0x1522, 0x153a, - 0x1546, 0x155e, 0x1570, 0x1588, 0x1597, 0x15a9, 0x15bb, 0x15e6, - 0x15e6, 0x15f5, 0x160e, 0x162a, 0x163c, 0x164e, 0x165a, 0x1669, - 0x1669, 0x169d, 0x16af, 0x16c4, 0x16e6, 0x16e6, 0x16f8, 0x16f8, - 0x1707, 0x171f, 0x171f, 0x172b, 0x172b, 0x1750, 0x177b, 0x177b, - 0x17a6, 0x17d4, 0x17f5, 0x17fb, 0x180d, 0x182c, 0x1838, 0x184a, - 0x184a, 0x1856, 0x1877, 0x1877, 0x18a0, 0x18cf, 0x18cf, 0x18de, - 0x18f6, 0x1908, 0x191a, 0x1942, 0x1967, 0x1967, 0x1967, 0x1979, + 0x1420, 0x144e, 0x1466, 0x1466, 0x1497, 0x14de, 0x14f6, 0x1505, + 0x151d, 0x1529, 0x1541, 0x1553, 0x156b, 0x157a, 0x158c, 0x159e, + 0x15c9, 0x15c9, 0x15db, 0x15f4, 0x1610, 0x1622, 0x1634, 0x1640, + 0x164f, 0x164f, 0x1683, 0x1695, 0x16aa, 0x16cc, 0x16cc, 0x16de, + 0x16de, 0x16ed, 0x1705, 0x1705, 0x1711, 0x1739, 0x175e, 0x1789, + 0x1789, 0x17b4, 0x17e2, 0x1803, 0x1809, 0x181b, 0x183a, 0x1846, + 0x1858, 0x1858, 0x1864, 0x1885, 0x1885, 0x18ae, 0x18dd, 0x18dd, + 0x18ec, 0x1904, 0x1916, 0x1928, 0x1950, 0x1975, 0x1975, 0x1975, // Entry 140 - 17F - 0x1991, 0x199d, 0x19bf, 0x19d7, 0x19d7, 0x19fb, 0x1a13, 0x1a22, - 0x1a50, 0x1a78, 0x1a84, 0x1a93, 0x1aa8, 0x1ab7, 0x1ac9, 0x1ac9, - 0x1ac9, 0x1ae1, 0x1af0, 0x1aff, 0x1b30, 0x1b5b, 0x1b5b, 0x1b7d, - 0x1b8f, 0x1ba1, 0x1bad, 0x1bb9, 0x1bc5, 0x1be3, 0x1be3, 0x1bf5, - 0x1c07, 0x1c2e, 0x1c2e, 0x1c3a, 0x1c3a, 0x1c46, 0x1c5b, 0x1c7d, - 0x1c7d, 0x1c7d, 0x1c89, 0x1ca1, 0x1cbc, 0x1cde, 0x1cf0, 0x1d0b, - 0x1d1d, 0x1d3f, 0x1d3f, 0x1d3f, 0x1d57, 0x1d69, 0x1d7b, 0x1d8a, - 0x1da5, 0x1dbd, 0x1dcf, 0x1de1, 0x1df0, 0x1e02, 0x1e11, 0x1e2c, + 0x1987, 0x199f, 0x19ab, 0x19cd, 0x19e5, 0x19e5, 0x1a09, 0x1a21, + 0x1a30, 0x1a5e, 0x1a86, 0x1a92, 0x1aa1, 0x1ab6, 0x1ac5, 0x1ad7, + 0x1ad7, 0x1ad7, 0x1aef, 0x1afe, 0x1b0d, 0x1b3e, 0x1b69, 0x1b69, + 0x1b8b, 0x1b9d, 0x1baf, 0x1bbb, 0x1bc7, 0x1bd3, 0x1bf1, 0x1bf1, + 0x1c03, 0x1c15, 0x1c3c, 0x1c3c, 0x1c48, 0x1c48, 0x1c54, 0x1c69, + 0x1c8b, 0x1c8b, 0x1c8b, 0x1c97, 0x1caf, 0x1cca, 0x1cec, 0x1cfe, + 0x1d19, 0x1d2b, 0x1d4d, 0x1d4d, 0x1d4d, 0x1d65, 0x1d77, 0x1d89, + 0x1d98, 0x1db3, 0x1dcb, 0x1ddd, 0x1def, 0x1dfe, 0x1e10, 0x1e1f, // Entry 180 - 1BF - 0x1e2c, 0x1e2c, 0x1e2c, 0x1e3b, 0x1e3b, 0x1e4a, 0x1e56, 0x1e72, - 0x1e72, 0x1e8e, 0x1ea6, 0x1eb5, 0x1ec1, 0x1ecd, 0x1edc, 0x1edc, - 0x1edc, 0x1ef4, 0x1ef4, 0x1f03, 0x1f15, 0x1f2a, 0x1f3f, 0x1f51, - 0x1f51, 0x1f63, 0x1f75, 0x1f84, 0x1f90, 0x1fae, 0x1fcd, 0x1fef, - 0x1ffb, 0x2010, 0x2031, 0x203d, 0x2052, 0x2064, 0x2076, 0x2076, - 0x208b, 0x20a7, 0x20b9, 0x20d4, 0x20ec, 0x20ec, 0x20ec, 0x2101, - 0x2125, 0x2151, 0x2172, 0x2178, 0x2191, 0x21a3, 0x21b5, 0x21d0, - 0x21d0, 0x21e8, 0x21fd, 0x2209, 0x2231, 0x2231, 0x223d, 0x2259, + 0x1e3a, 0x1e3a, 0x1e3a, 0x1e3a, 0x1e49, 0x1e49, 0x1e58, 0x1e89, + 0x1e95, 0x1eb1, 0x1eb1, 0x1ecd, 0x1ee5, 0x1ef4, 0x1f00, 0x1f0c, + 0x1f1b, 0x1f1b, 0x1f1b, 0x1f33, 0x1f33, 0x1f42, 0x1f54, 0x1f69, + 0x1f7e, 0x1f8a, 0x1f8a, 0x1f99, 0x1fab, 0x1fba, 0x1fc6, 0x1fe4, + 0x2003, 0x2025, 0x2031, 0x2046, 0x206a, 0x2076, 0x208b, 0x209d, + 0x20af, 0x20af, 0x20c4, 0x20e0, 0x20f2, 0x210d, 0x2125, 0x2125, + 0x2125, 0x213a, 0x215e, 0x218a, 0x21ab, 0x21b1, 0x21ca, 0x21dc, + 0x21ee, 0x2203, 0x2203, 0x221b, 0x2230, 0x223c, 0x2264, 0x2264, // Entry 1C0 - 1FF - 0x226b, 0x229f, 0x22b7, 0x22d5, 0x22e7, 0x22f3, 0x2302, 0x2330, - 0x234f, 0x2364, 0x2376, 0x2391, 0x23a6, 0x23a6, 0x23d7, 0x23d7, - 0x23d7, 0x2405, 0x2405, 0x241a, 0x241a, 0x241a, 0x243b, 0x2453, - 0x248a, 0x2496, 0x2496, 0x24b1, 0x24cc, 0x24ed, 0x24ed, 0x24ed, - 0x24fc, 0x250e, 0x250e, 0x250e, 0x250e, 0x252c, 0x2538, 0x254a, - 0x2553, 0x257e, 0x2590, 0x259c, 0x25ae, 0x25ae, 0x25bd, 0x25cc, - 0x25e7, 0x25ff, 0x25ff, 0x262a, 0x262a, 0x2636, 0x2636, 0x264b, - 0x267c, 0x26a1, 0x26a1, 0x26c2, 0x26ce, 0x26ce, 0x26e0, 0x26e0, + 0x2270, 0x228c, 0x229e, 0x22d2, 0x22ea, 0x2308, 0x231a, 0x2326, + 0x2335, 0x2363, 0x2381, 0x2396, 0x23ab, 0x23c6, 0x23db, 0x23db, + 0x240c, 0x240c, 0x240c, 0x243a, 0x243a, 0x244f, 0x244f, 0x244f, + 0x2470, 0x2488, 0x24bf, 0x24cb, 0x24cb, 0x24e6, 0x2501, 0x2522, + 0x2522, 0x2522, 0x2531, 0x2543, 0x2543, 0x2543, 0x2543, 0x2561, + 0x256d, 0x257f, 0x2588, 0x25b3, 0x25c5, 0x25d1, 0x25e3, 0x25e3, + 0x25f2, 0x2601, 0x261c, 0x2634, 0x2634, 0x265f, 0x265f, 0x266b, + 0x266b, 0x2680, 0x26b1, 0x26d6, 0x26d6, 0x26f7, 0x2703, 0x2703, // Entry 200 - 23F - 0x26e0, 0x26ff, 0x2718, 0x2734, 0x2759, 0x276e, 0x2789, 0x27ae, - 0x27c0, 0x27c9, 0x27c9, 0x27db, 0x27e7, 0x2805, 0x2820, 0x2854, - 0x286c, 0x286c, 0x2878, 0x2887, 0x2893, 0x28a5, 0x28b1, 0x28c3, - 0x28cf, 0x28e7, 0x28e7, 0x2902, 0x291d, 0x291d, 0x2932, 0x2957, - 0x2976, 0x2976, 0x2985, 0x2985, 0x299d, 0x299d, 0x29b2, 0x29c4, - 0x29d9, 0x29f4, 0x2a3b, 0x2a56, 0x2a71, 0x2a89, 0x2a95, 0x2aa1, - 0x2aa1, 0x2aa1, 0x2aa1, 0x2aa1, 0x2ab3, 0x2ab3, 0x2ac2, 0x2ad7, - 0x2aef, 0x2afb, 0x2b07, 0x2b22, 0x2b3b, 0x2b50, 0x2b50, 0x2b5c, + 0x2715, 0x2715, 0x2715, 0x2734, 0x274d, 0x2769, 0x278e, 0x27a3, + 0x27be, 0x27e3, 0x27f5, 0x2801, 0x2801, 0x2813, 0x281f, 0x283d, + 0x2858, 0x288c, 0x28a4, 0x28a4, 0x28b0, 0x28c2, 0x28ce, 0x28e0, + 0x28ec, 0x28fe, 0x290a, 0x2922, 0x2922, 0x293d, 0x2958, 0x2958, + 0x296d, 0x2992, 0x29b1, 0x29b1, 0x29c0, 0x29c0, 0x29d8, 0x29d8, + 0x29ed, 0x29ff, 0x2a14, 0x2a2f, 0x2a76, 0x2a91, 0x2aac, 0x2ac4, + 0x2ae3, 0x2aef, 0x2aef, 0x2aef, 0x2aef, 0x2aef, 0x2b01, 0x2b01, + 0x2b10, 0x2b25, 0x2b3d, 0x2b49, 0x2b55, 0x2b70, 0x2b89, 0x2b9e, // Entry 240 - 27F - 0x2b68, 0x2b7a, 0x2b98, 0x2ba7, 0x2ba7, 0x2bbf, 0x2bd4, 0x2bf8, - 0x2bf8, 0x2c0a, 0x2c51, 0x2c5d, 0x2c76, 0x2c82, 0x2cc3, 0x2cc3, - 0x2cfa, 0x2d26, 0x2d63, 0x2d94, 0x2dc5, 0x2df6, 0x2e3a, 0x2e6e, - 0x2ea2, 0x2ea2, 0x2ed3, 0x2efb, 0x2f17, 0x2f2f, 0x2f6f, 0x2fa9, - 0x2fca, 0x2ffe, 0x3026, 0x304e, 0x307f, -} // Size: 1250 bytes - -const thLangStr string = "" + // Size: 13813 bytes - "อะฟาร์อับคาซอเวสตะแอฟริกานส์อาคันอัมฮาราอารากอนอาหรับอัสสัมอาวาร์ไอย์มาร" + - "าอาเซอร์ไบจานบัชคีร์เบลารุสบัลแกเรียบิสลามาบัมบาราเบงกาลีทิเบตเบรตันบอ" + - "สเนียกาตาลังเชเชนชามอร์โรคอร์ซิกาครีเช็กเชอร์ชสลาวิกชูวัชเวลส์เดนมาร์ก" + - "เยอรมันธิเวหิซองคาเอเวกรีกอังกฤษเอสเปอรันโตสเปนเอสโตเนียบัสเกเปอร์เซีย" + - "ฟูลาฮ์ฟินแลนด์ฟิจิแฟโรฝรั่งเศสฟริเซียนตะวันตกไอริชสกอตส์กาลิกกาลิเซียก" + - "วารานีคุชราตมานซ์เฮาชาฮิบรูฮินดีฮีรีโมตูโครเอเชียเฮติฮังการีอาร์เมเนีย" + - "เฮเรโรอินเตอร์ลิงกัวอินโดนีเชียอินเตอร์ลิงกิวอิกโบเสฉวนยิอีนูเปียกอีโด" + - "ไอซ์แลนด์อิตาลีอินุกติตุตญี่ปุ่นชวาจอร์เจียคองโกกีกูยูกวนยามาคาซัคกรีน" + - "แลนด์เขมรกันนาดาเกาหลีคานูรีกัศมีร์เคิร์ดโกมิคอร์นิชคีร์กีซละตินลักเซม" + - "เบิร์กยูกันดาลิมเบิร์กลิงกาลาลาวลิทัวเนียลูบา-กาตองกาลัตเวียมาลากาซีมา" + - "ร์แชลลิสเมารีมาซิโดเนียมาลายาลัมมองโกเลียมราฐีมาเลย์มอลตาพม่านาอูรูเอ็" + - "นเดเบเลเหนือเนปาลดองกาดัตช์นอร์เวย์นีนอสก์นอร์เวย์บุคมอลเอ็นเดเบเลใต้น" + - "าวาโฮเนียนจาอ็อกซิตันโอจิบวาโอโรโมโอริยาออสเซเตียปัญจาบบาลีโปแลนด์พาชต" + - "ูโปรตุเกสควิชัวโรแมนซ์บุรุนดีโรมาเนียรัสเซียรวันดาสันสกฤตซาร์เดญาสินธุ" + - "ซามิเหนือแซงโกสิงหลสโลวักสโลวีเนียซามัวโชนาโซมาลีแอลเบเนียเซอร์เบียสวา" + - "ติโซโทใต้ซุนดาสวีเดนสวาฮีลีทมิฬเตลูกูทาจิกไทยติกริญญาเติร์กเมนิสถานบอต" + - "สวานาตองกาตุรกีซิตซองกาตาตาร์ตาฮิตีอุยกัวยูเครนอูรดูอุซเบกเวนดาเวียดนา" + - "มโวลาพึควาโลนีโวลอฟคะห์โอซายิวโยรูบาจ้วงจีนซูลูอาเจะห์อาโคลิอาแดงมีอะด" + - "ืยเกอาหรับตูนิเซียแอฟริฮีลีอักเฮมไอนุอักกาดแอละแบมาอาลิวต์เกกแอลเบเนีย" + - "อัลไตใต้อังกฤษโบราณอังคิกาอราเมอิกอาเราคาเนียนอาเรานาอาราปาโฮอาหรับแอล" + - "จีเรียอาราวักอาหรับโมร็อกโกอาหรับพื้นเมืองอียิปต์อาซูภาษามืออเมริกันอั" + - "สตูเรียสโคตาวาอวธีบาลูชิบาหลีบาวาเรียบาสาบามันบาตักโทบาโคมาลาเบจาเบมบา" + - "เบตาวีเบนาบาฟัตพทคะบาลูจิตะวันตกโภชปุรีบิกอลบินีบันจาร์กมสิกสิกาพิศนุป" + - "ริยะบักติยารีพัรชบราฮุยโพโฑอาโคซีบูเรียตบูกิสบูลูบลินเมดุมบาคัดโดคาริบ" + - "คายูกาแอตแซมเซบูคีกาชิบชาชะกะไตชูกมารีชินุกจาร์กอนช็อกทอว์ชิพิวยันเชอโ" + - "รกีเชเยนเนเคิร์ดโซรานีคอปติกกาปิซนอนตุรกีไครเมียครีโอลเซเซลส์ฝรั่งเศสค" + - "าซูเบียนดาโกทาดาร์กินไททาเดลาแวร์สเลวีโดกริบดิงกาซาร์มาโฑครีซอร์บส์ตอน" + - "ล่างดูซุนกลางดัวลาดัตช์กลางโจลา-ฟอนยีดิวลาดาซากาเอ็มบูอีฟิกเอมีเลียอีย" + - "ิปต์โบราณอีกาจุกอีลาไมต์อังกฤษกลางยูพิกกลางอีวันโดเอกซ์เตรมาดูราฟองฟิล" + - "ิปปินส์ฟินแลนด์ทอร์เนดาเล็นฟอนฝรั่งเศสกาฌ็องฝรั่งเศสกลางฝรั่งเศสโบราณอ" + - "าร์พิตาฟริเซียนเหนือฟริเซียนตะวันออกฟรูลีกากากาอุซจีนกั้นกาโยกบายาดารี" + - "โซโรอัสเตอร์กีซกิลเบอร์ตกิลากีเยอรมันสูงกลางเยอรมันสูงโบราณกอนกานีของก" + - "ัวกอนดิกอรอนทาโลโกธิกเกรโบกรีกโบราณเยอรมันสวิสวายูฟราฟรากุซซีกวิชอินไฮ" + - "ดาจีนแคะฮาวายฮินดีฟิจิฮีลีกัยนนฮิตไตต์ม้งซอร์บส์ตอนบนจีนเซียงฮูปาอิบาน" + - "อิบิบิโออีโลโกอินกุชอินเกรียนอังกฤษคลีโอลจาเมกาโลชบันอึนกอมบามาชาเมยิว" + - "-เปอร์เซียยิว-อาหรับจัทการา-กาลพากกาไบลกะฉิ่นคจูคัมบากวีคาร์บาเดียคาเนมบ" + - "ูทีแยปมาคอนเดคาบูเวอร์เดียนูเกินยางโคโรเคนก่างกาสีโคตันโคย์ราชีนีโควาร" + - "์เคอร์มานิกิคาโกคาเลนจินคิมบุนดูโคมิ-เปียร์เมียคกอนกานีคูสไรกาแปลคาราไ" + - "ช-บัลคาร์คริโอกินารายอาแกรเลียนกุรุขชัมบาลาบาเฟียโคโลญคูมืยค์คูเทไนลาด" + - "ิโนแลนจีลาฮ์นดาแลมบาเลซเกียนลิงกัวฟรังกาโนวาลิกูเรียลิโวเนียลาโกตาลอมบ" + - "าร์ดมองโกโลซิลูรีเหนือลัตเกลลูบา-ลูลัวลุยเซโนลันดาลัวลูไชลูเยียจีนคลาส" + - "สิกแลซมาดูรามาฟามคหีไมถิลีมากาซาร์มันดิงกามาไซมาบามอคชามานดาร์เมนเดเมร" + - "ูมอริสเยนไอริชกลางมากัววา-มีทโทเมตามิกแมกมีนังกาเบาแมนจูมณีปุระโมฮอว์ก" + - "โมซีมารีตะวันตกมันดังหลายภาษาครีกมีรันดามารวาฑีเม็นตาไวมยีนเอียร์ซยามา" + - "ซันดารานีจีนมินหนานนาโปลีนามาเยอรมันต่ำ - แซกซอนต่ำเนวาร์นีอัสนีอูอ๋าว" + - "นากากวาซิโอจีมบูนโนไกนอร์สโบราณโนเวียลเอ็นโกโซโทเหนือเนือร์เนวาร์ดั้งเ" + - "ดิมเนียมเวซีเนียนโกเลนิโอโรนซิมาโอซากีตุรกีออตโตมันปางาซีนันปะห์ลาวีปั" + - "มปางาปาเปียเมนโตปาเลาปิการ์พิดจินเยอรมันเพนซิลเวเนียเพลาท์ดิชเปอร์เซีย" + - "โบราณเยอรมันพาลาทิเนตฟินิเชียพีดมอนต์พอนติกพอห์นเพปรัสเซียโปรวองซาลโบร" + - "าณกีเชควิชัวไฮแลนด์ชิมโบราโซราชสถานราปานูราโรทองกาโรมัณโญริฟฟิอันรอมโบ" + - "โรมานีโรทูมันรูซินโรเวียนาอาโรมาเนียนรวาซันดาเวซาฮาอราเมอิกซามาเรียแซม" + - "บูรูซาซักสันตาลีเสาราษฏร์กัมเบแซงกูซิซิลีสกอตส์ซาร์ดิเนียซาสซารีเคอร์ด" + - "ิชใต้เซนิกาเซนาเซรีเซลคุปโคย์ราโบโรเซนนีไอริชโบราณซาโมจิเตียนทาเชลีห์ท" + - "ไทใหญ่อาหรับ-ชาดซิดาโมไซลีเซียตอนล่างเซลายาร์ซามิใต้ซามิลูเลซามิอีนารี" + - "ซามิสคอลต์โซนีนเกซอกดีนซูรินาเมเซแรร์ซาโฮฟรีเซียนซัทเธอร์แลนด์ซูคูมาซู" + - "ซูซูเมอโคเมอเรียนซีเรียแบบดั้งเดิมซีเรียไซลีเซียตูลูทิมเนเตโซเทเรโนเตต" + - "ุมตีเกรทิฟโตเกเลาแซคเซอร์คลิงกอนทลิงกิตทาลิชทามาเชกไนอะซาตองกาท็อกพิซิ" + - "นตูโรโยทาโรโกซาโคเนียซิมชีแอนตัตมุสลิมทุมบูกาตูวาลูตัสซาวัคตูวาทามาไซต" + - "์แอตลาสกลางอุดมูร์ตยูการิตอุมบุนดูรูทไวเวเนโต้เวปส์เฟลมิชตะวันตกเมน-ฟร" + - "านโกเนียโวทิกโวโรวุนจูวัลเซอร์วาลาโมวาเรย์วาโชวอล์เพอร์รีจีนอู๋คัลมืยค" + - "์เมเกรเลียโซกาเย้ายัปแยงเบนเยมบาเหงงกาตุกวางตุ้งซาโปเตกบลิสซิมโบลส์เซแ" + - "ลนด์เซนากาทามาไซต์โมร็อกโกมาตรฐานซูนิไม่มีข้อมูลภาษาซาซาอาหรับมาตรฐานส" + - "มัยใหม่เยอรมัน - ออสเตรียเยอรมันสูง (สวิส)อังกฤษ - ออสเตรเลียอังกฤษ - " + - "แคนาดาอังกฤษ - สหราชอาณาจักรอังกฤษ - อเมริกันสเปน - ละตินอเมริกาสเปน -" + - " ยุโรปสเปน - เม็กซิโกฝรั่งเศส - แคนาดาฝรั่งเศส (สวิส)แซกซอนใต้เฟลมิชโปรต" + - "ุเกส - บราซิลโปรตุเกส - ยุโรปมอลโดวาเซอร์โบ-โครเอเชียสวาฮีลี-คองโกจีนต" + - "ัวย่อจีนตัวเต็ม" - -var thLangIdx = []uint16{ // 613 elements + 0x2b9e, 0x2baa, 0x2bb6, 0x2bc8, 0x2be6, 0x2bf5, 0x2bf5, 0x2c0d, + 0x2c22, 0x2c46, 0x2c46, 0x2c58, 0x2c9f, 0x2cab, 0x2cc4, 0x2cd0, + 0x2d11, 0x2d11, 0x2d42, 0x2d6e, 0x2dab, 0x2ddc, 0x2e0d, 0x2e3e, + 0x2e82, 0x2eb6, 0x2eea, 0x2eea, 0x2f1b, 0x2f43, 0x2f5f, 0x2f77, + 0x2fb7, 0x2ff1, 0x3012, 0x3046, 0x306e, 0x3096, 0x30c7, +} // Size: 1254 bytes + +const thLangStr string = "" + // Size: 13905 bytes + "อะฟาร์อับฮาเซียอเวสตะแอฟริกานส์อาคานอัมฮาราอารากอนอาหรับอัสสัมอาวาร์ไอย์" + + "มาราอาเซอร์ไบจานบัชคีร์เบลารุสบัลแกเรียบิสลามาบัมบาราเบงกาลีทิเบตเบรตั" + + "นบอสเนียกาตาลังเชเชนชามอร์โรคอร์ซิกาครีเช็กเชอร์ชสลาวิกชูวัชเวลส์เดนมา" + + "ร์กเยอรมันธิเวหิซองคาเอเวกรีกอังกฤษเอสเปรันโตสเปนเอสโตเนียบาสก์เปอร์เซ" + + "ียฟูลาห์ฟินแลนด์ฟิจิแฟโรฝรั่งเศสฟริเซียนตะวันตกไอริชเกลิกสกอตกาลิเซียก" + + "ัวรานีคุชราตมานซ์เฮาซาฮิบรูฮินดีฮีรีโมตูโครเอเชียเฮติครีโอลฮังการีอาร์" + + "เมเนียเฮเรโรอินเตอร์ลิงกัวอินโดนีเซียอินเตอร์ลิงกิวอิกโบเสฉวนยิอีนูเปี" + + "ยกอีโดไอซ์แลนด์อิตาลีอินุกติตุตญี่ปุ่นชวาจอร์เจียคองโกกีกูยูกวนยามาคาซ" + + "ัคกรีนแลนด์เขมรกันนาดาเกาหลีคานูรีกัศมีร์เคิร์ดโกมิคอร์นิชคีร์กีซละติน" + + "ลักเซมเบิร์กยูกันดาลิมเบิร์กลิงกาลาลาวลิทัวเนียลูบา-กาตองกาลัตเวียมาลา" + + "กาซีมาร์แชลลิสเมารีมาซิโดเนียมาลายาลัมมองโกเลียมราฐีมาเลย์มอลตาพม่านาอ" + + "ูรูเอ็นเดเบเลเหนือเนปาลดองกาดัตช์นอร์เวย์นีนอสก์นอร์เวย์บุคมอลเอ็นเดเบ" + + "เลใต้นาวาโฮเนียนจาอ็อกซิตันโอจิบวาโอโรโมโอริยาออสเซเตียปัญจาบบาลีโปแลน" + + "ด์พัชโตโปรตุเกสเคชวาโรแมนซ์บุรุนดีโรมาเนียรัสเซียรวันดาสันสกฤตซาร์เดญา" + + "สินธิซามิเหนือซันโกสิงหลสโลวักสโลวีเนียซามัวโชนาโซมาลีแอลเบเนียเซอร์เบ" + + "ียสวาติโซโทใต้ซุนดาสวีเดนสวาฮีลีทมิฬเตลูกูทาจิกไทยติกริญญาเติร์กเมนบอต" + + "สวานาตองกาตุรกีซิตซองกาตาตาร์ตาฮิตีอุยกูร์ยูเครนอูรดูอุซเบกเวนดาเวียดน" + + "ามโวลาพึควาโลนีโวลอฟคะห์โอซายิดดิชโยรูบาจ้วงจีนซูลูอาเจะห์อาโคลิอาแดงม" + + "ีอะดืยเกอาหรับตูนิเซียแอฟริฮีลีอักเฮมไอนุอักกาดแอละแบมาอาลิวต์เกกแอลเบ" + + "เนียอัลไตใต้อังกฤษโบราณอังคิกาอราเมอิกมาปูเชอาเรานาอาราปาโฮอาหรับแอลจี" + + "เรียอาราวักอาหรับโมร็อกโกอาหรับพื้นเมืองอียิปต์อาซูภาษามืออเมริกันอัสต" + + "ูเรียสโคตาวาอวธีบาลูชิบาหลีบาวาเรียบาสาบามันบาตักโทบาโคมาลาเบจาเบมบาเบ" + + "ตาวีเบนาบาฟัตพทคะบาลูจิตะวันตกโภชปุรีบิกอลบินีบันจาร์กมสิกสิกาพิศนุปริ" + + "ยะบักติยารีพัรชบราฮุยโพโฑอาโคซีบูเรียตบูกิสบูลูบลินเมดุมบาคัดโดคาริบคา" + + "ยูกาแอตแซมเซบูคีกาชิบชาชะกะไตชูกมารีชินุกจาร์กอนช็อกทอว์ชิพิวยันเชอโรก" + + "ีเชเยนเนเคิร์ดโซรานีคอปติกกาปิซนอนตุรกีไครเมียครีโอลเซเซลส์ฝรั่งเศสคาซ" + + "ูเบียนดาโกทาดาร์กินไททาเดลาแวร์สเลวีโดกริบดิงกาซาร์มาโฑครีซอร์บส์ตอนล่" + + "างดูซุนกลางดัวลาดัตช์กลางโจลา-ฟอนยีดิวลาดาซากาเอ็มบูอีฟิกเอมีเลียอียิป" + + "ต์โบราณอีกาจุกอีลาไมต์อังกฤษกลางยูพิกกลางอีวันโดเอกซ์เตรมาดูราฟองฟิลิป" + + "ปินส์ฟินแลนด์ทอร์เนดาเล็นฟอนฝรั่งเศสกาฌ็องฝรั่งเศสกลางฝรั่งเศสโบราณอาร" + + "์พิตาฟริเซียนเหนือฟริเซียนตะวันออกฟรูลีกากากาอุซจีนกั้นกาโยกบายาดารีโซ" + + "โรอัสเตอร์กีซกิลเบอร์ตกิลากีเยอรมันสูงกลางเยอรมันสูงโบราณกอนกานีของกัว" + + "กอนดิกอรอนทาโลโกธิกเกรโบกรีกโบราณเยอรมันสวิสวายูฟราฟรากุซซีกวิชอินไฮดา" + + "จีนแคะฮาวายฮินดีฟิจิฮีลีกัยนนฮิตไตต์ม้งซอร์เบียตอนบนจีนเซียงฮูปาอิบานอ" + + "ิบิบิโออีโลโกอินกุชอินเกรียนอังกฤษคลีโอลจาเมกาโลชบันอึนกอมบามาชาเมยิว-" + + "เปอร์เซียยิว-อาหรับจัทการา-กาลพากกาไบลกะฉิ่นคจูคัมบากวีคาร์บาเดียคาเนม" + + "บูทีแยปมาคอนเดคาบูเวอร์เดียนูเกินยางโคโรเคนก่างกาสีโคตันโคย์ราชีนีโควา" + + "ร์เคอร์มานิกิคาโกคาเลนจินคิมบุนดูโคมิ-เปียร์เมียคกอนกานีคูสไรกาแปลคารา" + + "ไช-บัลคาร์คริโอกินารายอาแกรเลียนกุรุขชัมบาลาบาเฟียโคโลญคูมืยค์คูเทไนลา" + + "ดิโนแลนจีลาฮ์นดาแลมบาเลซเกียนลิงกัวฟรังกาโนวาลิกูเรียลิโวเนียลาโกตาลอม" + + "บาร์ดมองโกภาษาครีโอลุยเซียนาโลซิลูรีเหนือลัตเกลลูบา-ลูลัวลุยเซโนลันดาล" + + "ัวลูไชลูเยียจีนคลาสสิกแลซมาดูรามาฟามคหีไมถิลีมากาซาร์มันดิงกามาไซมาบาม" + + "อคชามานดาร์เมนเดเมรูมอริสเยนไอริชกลางมากัววา-มีทโทเมตามิกแมกมีนังกาเบา" + + "แมนจูมณีปุระโมฮอว์กโมซีมารีตะวันตกมันดังหลายภาษาครีกมีรันดามารวาฑีเม็น" + + "ตาไวมยีนเอียร์ซยามาซันดารานีจีนมินหนานนาโปลีนามาเยอรมันต่ำ - แซกซอนต่ำ" + + "เนวาร์นีอัสนีอูอ๋าวนากากวาซิโอจีมบูนโนไกนอร์สโบราณโนเวียลเอ็นโกโซโทเหน" + + "ือเนือร์เนวาร์ดั้งเดิมเนียมเวซีเนียนโกเลนิโอโรนซิมาโอซากีตุรกีออตโตมัน" + + "ปางาซีนันปะห์ลาวีปัมปางาปาเปียเมนโตปาเลาปิการ์พิดจินเยอรมันเพนซิลเวเนี" + + "ยเพลาท์ดิชเปอร์เซียโบราณเยอรมันพาลาทิเนตฟินิเชียพีดมอนต์พอนติกพอห์นเพป" + + "รัสเซียโปรวองซาลโบราณกีเชควิชัวไฮแลนด์ชิมโบราโซราชสถานราปานูราโรทองกาโ" + + "รมัณโญริฟฟิอันรอมโบโรมานีโรทูมันรูซินโรเวียนาอาโรมาเนียนรวาซันดาเวซาคา" + + "อราเมอิกซามาเรียแซมบูรูซาซักสันตาลีเสาราษฏร์กัมเบแซงกูซิซิลีสกอตส์ซาร์" + + "ดิเนียซาสซารีเคอร์ดิชใต้เซนิกาเซนาเซรีเซลคุปโคย์ราโบโรเซนนีไอริชโบราณซ" + + "าโมจิเตียนทาเชลีห์ทไทใหญ่อาหรับ-ชาดซิดาโมไซลีเซียตอนล่างเซลายาร์ซามิใต" + + "้ซามิลูเลซามิอีนารีซามิสคอลต์โซนีนเกซอกดีนซูรินาเมเซแรร์ซาโฮฟรีเซียนซั" + + "ทเธอร์แลนด์ซูคูมาซูซูซูเมอโคเมอเรียนซีเรียแบบดั้งเดิมซีเรียไซลีเซียตูล" + + "ูทิมเนเตโซเทเรโนเตตุมตีเกรทิฟโตเกเลาแซคเซอร์คลิงกอนทลิงกิตทาลิชทามาเชก" + + "ไนอะซาตองกาท็อกพิซินตูโรโยทาโรโกซาโคเนียซิมชีแอนตัตมุสลิมทุมบูกาตูวาลู" + + "ตัสซาวัคตูวาทามาไซต์แอตลาสกลางอุดมูร์ตยูการิตอุมบุนดูภาษาที่ไม่รู้จักไ" + + "วเวเนโต้เวปส์เฟลมิชตะวันตกเมน-ฟรานโกเนียโวทิกโวโรวุนจูวัลเซอร์วาลาโมวา" + + "เรย์วาโชวอล์เพอร์รีจีนอู๋คัลมืยค์เมเกรเลียโซกาเย้ายัปแยงเบนเยมบาเหงงกา" + + "ตุกวางตุ้งซาโปเตกบลิสซิมโบลส์เซแลนด์เซนากาทามาไซต์โมร็อกโกมาตรฐานซูนิไ" + + "ม่มีข้อมูลภาษาซาซาอาหรับมาตรฐานสมัยใหม่เยอรมัน - ออสเตรียเยอรมันสูง (ส" + + "วิส)อังกฤษ - ออสเตรเลียอังกฤษ - แคนาดาอังกฤษ - สหราชอาณาจักรอังกฤษ - อ" + + "เมริกันสเปน - ละตินอเมริกาสเปน - ยุโรปสเปน - เม็กซิโกฝรั่งเศส - แคนาดา" + + "ฝรั่งเศส (สวิส)แซกซอนใต้เฟลมิชโปรตุเกส - บราซิลโปรตุเกส - ยุโรปมอลโดวา" + + "เซอร์โบ-โครเอเชียสวาฮีลี - คองโกจีนตัวย่อจีนตัวเต็ม" + +var thLangIdx = []uint16{ // 615 elements // Entry 0 - 3F - 0x0000, 0x0012, 0x0024, 0x0036, 0x0054, 0x0063, 0x0078, 0x008d, - 0x009f, 0x00b1, 0x00c3, 0x00db, 0x00ff, 0x0114, 0x0129, 0x0144, - 0x0159, 0x016e, 0x0183, 0x0192, 0x01a4, 0x01b9, 0x01ce, 0x01dd, - 0x01f5, 0x020d, 0x0216, 0x0222, 0x0246, 0x0255, 0x0264, 0x027c, - 0x0291, 0x02a3, 0x02b2, 0x02be, 0x02ca, 0x02dc, 0x02fd, 0x0309, - 0x0324, 0x0333, 0x034e, 0x0360, 0x0378, 0x0384, 0x0390, 0x03a8, - 0x03d5, 0x03e4, 0x0405, 0x041d, 0x0432, 0x0444, 0x0453, 0x0462, - 0x0471, 0x0480, 0x0498, 0x04b3, 0x04bf, 0x04d4, 0x04f2, 0x0504, + 0x0000, 0x0012, 0x002d, 0x003f, 0x005d, 0x006c, 0x0081, 0x0096, + 0x00a8, 0x00ba, 0x00cc, 0x00e4, 0x0108, 0x011d, 0x0132, 0x014d, + 0x0162, 0x0177, 0x018c, 0x019b, 0x01ad, 0x01c2, 0x01d7, 0x01e6, + 0x01fe, 0x0216, 0x021f, 0x022b, 0x024f, 0x025e, 0x026d, 0x0285, + 0x029a, 0x02ac, 0x02bb, 0x02c7, 0x02d3, 0x02e5, 0x0303, 0x030f, + 0x032a, 0x0339, 0x0354, 0x0366, 0x037e, 0x038a, 0x0396, 0x03ae, + 0x03db, 0x03ea, 0x0405, 0x041d, 0x0432, 0x0444, 0x0453, 0x0462, + 0x0471, 0x0480, 0x0498, 0x04b3, 0x04d1, 0x04e6, 0x0504, 0x0516, // Entry 40 - 7F - 0x052e, 0x054f, 0x0579, 0x0588, 0x059d, 0x05b8, 0x05c4, 0x05df, - 0x05f1, 0x060f, 0x0624, 0x062d, 0x0645, 0x0654, 0x0666, 0x067b, - 0x068a, 0x06a5, 0x06b1, 0x06c6, 0x06d8, 0x06ea, 0x06ff, 0x0711, - 0x071d, 0x0732, 0x0747, 0x0756, 0x077a, 0x078f, 0x07aa, 0x07bf, - 0x07c8, 0x07e3, 0x0805, 0x081a, 0x0832, 0x0850, 0x085f, 0x087d, - 0x0898, 0x08b3, 0x08c2, 0x08d4, 0x08e3, 0x08ef, 0x0901, 0x092e, - 0x093d, 0x094c, 0x095b, 0x0988, 0x09b2, 0x09d9, 0x09eb, 0x0a00, - 0x0a1b, 0x0a30, 0x0a42, 0x0a54, 0x0a6f, 0x0a81, 0x0a8d, 0x0aa2, + 0x0540, 0x0561, 0x058b, 0x059a, 0x05af, 0x05ca, 0x05d6, 0x05f1, + 0x0603, 0x0621, 0x0636, 0x063f, 0x0657, 0x0666, 0x0678, 0x068d, + 0x069c, 0x06b7, 0x06c3, 0x06d8, 0x06ea, 0x06fc, 0x0711, 0x0723, + 0x072f, 0x0744, 0x0759, 0x0768, 0x078c, 0x07a1, 0x07bc, 0x07d1, + 0x07da, 0x07f5, 0x0817, 0x082c, 0x0844, 0x0862, 0x0871, 0x088f, + 0x08aa, 0x08c5, 0x08d4, 0x08e6, 0x08f5, 0x0901, 0x0913, 0x0940, + 0x094f, 0x095e, 0x096d, 0x099a, 0x09c4, 0x09eb, 0x09fd, 0x0a12, + 0x0a2d, 0x0a42, 0x0a54, 0x0a66, 0x0a81, 0x0a93, 0x0a9f, 0x0ab4, // Entry 80 - BF - 0x0ab1, 0x0ac9, 0x0adb, 0x0af0, 0x0b05, 0x0b1d, 0x0b32, 0x0b44, - 0x0b59, 0x0b71, 0x0b80, 0x0b9b, 0x0baa, 0x0bb9, 0x0bcb, 0x0be6, - 0x0bf5, 0x0c01, 0x0c13, 0x0c2e, 0x0c49, 0x0c58, 0x0c6d, 0x0c7c, - 0x0c8e, 0x0ca3, 0x0caf, 0x0cc1, 0x0cd0, 0x0cd9, 0x0cf1, 0x0d1b, - 0x0d33, 0x0d42, 0x0d51, 0x0d69, 0x0d7b, 0x0d8d, 0x0d9f, 0x0db1, - 0x0dc0, 0x0dd2, 0x0de1, 0x0df9, 0x0e0e, 0x0e20, 0x0e2f, 0x0e47, - 0x0e50, 0x0e62, 0x0e6e, 0x0e77, 0x0e83, 0x0e98, 0x0eaa, 0x0ebf, - 0x0ed4, 0x0efe, 0x0f19, 0x0f2b, 0x0f37, 0x0f49, 0x0f61, 0x0f76, + 0x0ac3, 0x0adb, 0x0aea, 0x0aff, 0x0b14, 0x0b2c, 0x0b41, 0x0b53, + 0x0b68, 0x0b80, 0x0b8f, 0x0baa, 0x0bb9, 0x0bc8, 0x0bda, 0x0bf5, + 0x0c04, 0x0c10, 0x0c22, 0x0c3d, 0x0c58, 0x0c67, 0x0c7c, 0x0c8b, + 0x0c9d, 0x0cb2, 0x0cbe, 0x0cd0, 0x0cdf, 0x0ce8, 0x0d00, 0x0d1b, + 0x0d33, 0x0d42, 0x0d51, 0x0d69, 0x0d7b, 0x0d8d, 0x0da2, 0x0db4, + 0x0dc3, 0x0dd5, 0x0de4, 0x0dfc, 0x0e11, 0x0e23, 0x0e32, 0x0e4a, + 0x0e5c, 0x0e6e, 0x0e7a, 0x0e83, 0x0e8f, 0x0ea4, 0x0eb6, 0x0ecb, + 0x0ee0, 0x0f0a, 0x0f25, 0x0f37, 0x0f43, 0x0f55, 0x0f6d, 0x0f82, // Entry C0 - FF - 0x0f9a, 0x0fb2, 0x0fd3, 0x0fe8, 0x1000, 0x1024, 0x1039, 0x1051, - 0x107e, 0x107e, 0x1093, 0x10bd, 0x10ff, 0x110b, 0x1138, 0x1156, - 0x1168, 0x1174, 0x1186, 0x1195, 0x11ad, 0x11b9, 0x11c8, 0x11e3, - 0x11f5, 0x1201, 0x1210, 0x1222, 0x122e, 0x123d, 0x1249, 0x1270, - 0x1285, 0x1294, 0x12a0, 0x12b5, 0x12bb, 0x12d0, 0x12ee, 0x1309, - 0x1315, 0x1327, 0x1333, 0x1345, 0x135a, 0x1369, 0x1375, 0x1381, - 0x1396, 0x13a5, 0x13b4, 0x13c6, 0x13d8, 0x13e4, 0x13f0, 0x13ff, - 0x1411, 0x141a, 0x1426, 0x144a, 0x1462, 0x147a, 0x148f, 0x14a4, + 0x0fa6, 0x0fbe, 0x0fdf, 0x0ff4, 0x100c, 0x101e, 0x1033, 0x104b, + 0x1078, 0x1078, 0x108d, 0x10b7, 0x10f9, 0x1105, 0x1132, 0x1150, + 0x1162, 0x116e, 0x1180, 0x118f, 0x11a7, 0x11b3, 0x11c2, 0x11dd, + 0x11ef, 0x11fb, 0x120a, 0x121c, 0x1228, 0x1237, 0x1243, 0x126a, + 0x127f, 0x128e, 0x129a, 0x12af, 0x12b5, 0x12ca, 0x12e8, 0x1303, + 0x130f, 0x1321, 0x132d, 0x133f, 0x1354, 0x1363, 0x136f, 0x137b, + 0x1390, 0x139f, 0x13ae, 0x13c0, 0x13d2, 0x13d2, 0x13de, 0x13ea, + 0x13f9, 0x140b, 0x1414, 0x1420, 0x1444, 0x145c, 0x1474, 0x1489, // Entry 100 - 13F - 0x14c8, 0x14da, 0x14f2, 0x1516, 0x1555, 0x1570, 0x1582, 0x1597, - 0x15a3, 0x15bb, 0x15ca, 0x15dc, 0x15eb, 0x15fd, 0x160c, 0x1636, - 0x1651, 0x1660, 0x167b, 0x1697, 0x16a6, 0x16b8, 0x16ca, 0x16d9, - 0x16f1, 0x1715, 0x172a, 0x1742, 0x1760, 0x177b, 0x1790, 0x17ba, - 0x17c3, 0x17e1, 0x181d, 0x1826, 0x1850, 0x1874, 0x189b, 0x18b3, - 0x18da, 0x190a, 0x1919, 0x191f, 0x1934, 0x1949, 0x1955, 0x1964, - 0x1994, 0x199d, 0x19b8, 0x19ca, 0x19f4, 0x1a21, 0x1a48, 0x1a57, - 0x1a72, 0x1a81, 0x1a90, 0x1aab, 0x1acc, 0x1ad8, 0x1aea, 0x1af9, + 0x149e, 0x14c2, 0x14d4, 0x14ec, 0x1510, 0x154f, 0x156a, 0x157c, + 0x1591, 0x159d, 0x15b5, 0x15c4, 0x15d6, 0x15e5, 0x15f7, 0x1606, + 0x1630, 0x164b, 0x165a, 0x1675, 0x1691, 0x16a0, 0x16b2, 0x16c4, + 0x16d3, 0x16eb, 0x170f, 0x1724, 0x173c, 0x175a, 0x1775, 0x178a, + 0x17b4, 0x17bd, 0x17db, 0x1817, 0x1820, 0x184a, 0x186e, 0x1895, + 0x18ad, 0x18d4, 0x1904, 0x1913, 0x1919, 0x192e, 0x1943, 0x194f, + 0x195e, 0x198e, 0x1997, 0x19b2, 0x19c4, 0x19ee, 0x1a1b, 0x1a42, + 0x1a51, 0x1a6c, 0x1a7b, 0x1a8a, 0x1aa5, 0x1ac6, 0x1ad2, 0x1ae4, // Entry 140 - 17F - 0x1b0e, 0x1b1a, 0x1b2c, 0x1b3b, 0x1b56, 0x1b71, 0x1b86, 0x1b8f, - 0x1bb3, 0x1bcb, 0x1bd7, 0x1be6, 0x1bfe, 0x1c10, 0x1c22, 0x1c3d, - 0x1c73, 0x1c85, 0x1c9d, 0x1caf, 0x1cd4, 0x1cf0, 0x1cf9, 0x1d18, - 0x1d27, 0x1d39, 0x1d42, 0x1d51, 0x1d5a, 0x1d78, 0x1d8d, 0x1d9c, - 0x1db1, 0x1dde, 0x1df3, 0x1dff, 0x1e14, 0x1e20, 0x1e2f, 0x1e4d, - 0x1e5f, 0x1e80, 0x1e8c, 0x1ea4, 0x1ebc, 0x1eea, 0x1eff, 0x1f0e, - 0x1f1d, 0x1f45, 0x1f54, 0x1f6f, 0x1f87, 0x1f96, 0x1fab, 0x1fbd, - 0x1fcc, 0x1fe1, 0x1ff3, 0x2005, 0x2014, 0x2029, 0x2038, 0x2050, + 0x1af3, 0x1b08, 0x1b14, 0x1b26, 0x1b35, 0x1b50, 0x1b6b, 0x1b80, + 0x1b89, 0x1bb0, 0x1bc8, 0x1bd4, 0x1be3, 0x1bfb, 0x1c0d, 0x1c1f, + 0x1c3a, 0x1c70, 0x1c82, 0x1c9a, 0x1cac, 0x1cd1, 0x1ced, 0x1cf6, + 0x1d15, 0x1d24, 0x1d36, 0x1d3f, 0x1d4e, 0x1d57, 0x1d75, 0x1d8a, + 0x1d99, 0x1dae, 0x1ddb, 0x1df0, 0x1dfc, 0x1e11, 0x1e1d, 0x1e2c, + 0x1e4a, 0x1e5c, 0x1e7d, 0x1e89, 0x1ea1, 0x1eb9, 0x1ee7, 0x1efc, + 0x1f0b, 0x1f1a, 0x1f42, 0x1f51, 0x1f6c, 0x1f84, 0x1f93, 0x1fa8, + 0x1fba, 0x1fc9, 0x1fde, 0x1ff0, 0x2002, 0x2011, 0x2026, 0x2035, // Entry 180 - 1BF - 0x2080, 0x2098, 0x20b0, 0x20c2, 0x20da, 0x20e9, 0x20f5, 0x2110, - 0x2122, 0x213e, 0x2153, 0x2162, 0x216b, 0x2177, 0x2189, 0x21a7, - 0x21b0, 0x21c2, 0x21ce, 0x21da, 0x21ec, 0x2204, 0x221c, 0x2228, - 0x2234, 0x2243, 0x2258, 0x2267, 0x2273, 0x228b, 0x22a6, 0x22cb, - 0x22d7, 0x22e9, 0x2307, 0x2316, 0x232b, 0x2340, 0x234c, 0x236d, - 0x237f, 0x2397, 0x23a3, 0x23b8, 0x23cd, 0x23e5, 0x23f1, 0x240c, - 0x242d, 0x244b, 0x245d, 0x2469, 0x24a5, 0x24b7, 0x24c6, 0x24d2, - 0x24ea, 0x24ff, 0x2511, 0x251d, 0x253b, 0x2550, 0x2562, 0x257d, + 0x204d, 0x207d, 0x2095, 0x20ad, 0x20bf, 0x20d7, 0x20e6, 0x211c, + 0x2128, 0x2143, 0x2155, 0x2171, 0x2186, 0x2195, 0x219e, 0x21aa, + 0x21bc, 0x21da, 0x21e3, 0x21f5, 0x2201, 0x220d, 0x221f, 0x2237, + 0x224f, 0x225b, 0x2267, 0x2276, 0x228b, 0x229a, 0x22a6, 0x22be, + 0x22d9, 0x22fe, 0x230a, 0x231c, 0x233a, 0x2349, 0x235e, 0x2373, + 0x237f, 0x23a0, 0x23b2, 0x23ca, 0x23d6, 0x23eb, 0x2400, 0x2418, + 0x2424, 0x243f, 0x2460, 0x247e, 0x2490, 0x249c, 0x24d8, 0x24ea, + 0x24f9, 0x2505, 0x251d, 0x2532, 0x2544, 0x2550, 0x256e, 0x2583, // Entry 1C0 - 1FF - 0x258f, 0x25b9, 0x25d4, 0x25ef, 0x2601, 0x2610, 0x2622, 0x2649, - 0x2664, 0x267c, 0x2691, 0x26b2, 0x26c1, 0x26d3, 0x26e5, 0x271e, - 0x2739, 0x2763, 0x2793, 0x27ab, 0x27c3, 0x27d5, 0x27ea, 0x2802, - 0x282c, 0x2838, 0x287a, 0x288f, 0x28a1, 0x28bc, 0x28d1, 0x28e9, - 0x28f8, 0x290a, 0x291f, 0x292e, 0x2946, 0x2967, 0x2970, 0x2985, - 0x2991, 0x29c1, 0x29d6, 0x29e5, 0x29fa, 0x2a15, 0x2a24, 0x2a33, - 0x2a45, 0x2a57, 0x2a8a, 0x2aab, 0x2abd, 0x2ac9, 0x2ad5, 0x2ae7, - 0x2b14, 0x2b32, 0x2b53, 0x2b6e, 0x2b80, 0x2b9c, 0x2bae, 0x2bdb, + 0x2595, 0x25b0, 0x25c2, 0x25ec, 0x2607, 0x2622, 0x2634, 0x2643, + 0x2655, 0x267c, 0x2697, 0x26af, 0x26c4, 0x26e5, 0x26f4, 0x2706, + 0x2718, 0x2751, 0x276c, 0x2796, 0x27c6, 0x27de, 0x27f6, 0x2808, + 0x281d, 0x2835, 0x285f, 0x286b, 0x28ad, 0x28c2, 0x28d4, 0x28ef, + 0x2904, 0x291c, 0x292b, 0x293d, 0x2952, 0x2961, 0x2979, 0x299a, + 0x29a3, 0x29b8, 0x29c4, 0x29f4, 0x2a09, 0x2a18, 0x2a2d, 0x2a48, + 0x2a57, 0x2a66, 0x2a78, 0x2a8a, 0x2abd, 0x2ade, 0x2af0, 0x2afc, + 0x2b08, 0x2b1a, 0x2b47, 0x2b65, 0x2b86, 0x2ba1, 0x2bb3, 0x2bcf, // Entry 200 - 23F - 0x2bf3, 0x2c08, 0x2c20, 0x2c3e, 0x2c5c, 0x2c71, 0x2c83, 0x2c9b, - 0x2cad, 0x2cb9, 0x2cf8, 0x2d0a, 0x2d16, 0x2d25, 0x2d43, 0x2d76, - 0x2d88, 0x2da0, 0x2dac, 0x2dbb, 0x2dc7, 0x2dd9, 0x2de8, 0x2df7, - 0x2e00, 0x2e15, 0x2e2d, 0x2e42, 0x2e57, 0x2e66, 0x2e7b, 0x2e9c, - 0x2eb7, 0x2ec9, 0x2edb, 0x2ef3, 0x2f0b, 0x2f26, 0x2f3b, 0x2f4d, - 0x2f65, 0x2f71, 0x2fa7, 0x2fbf, 0x2fd4, 0x2fec, 0x2ff5, 0x2ffb, - 0x3010, 0x301f, 0x3046, 0x306e, 0x307d, 0x3089, 0x3098, 0x30b0, - 0x30c2, 0x30d4, 0x30e0, 0x3101, 0x3113, 0x312b, 0x3146, 0x3152, + 0x2be1, 0x2c0e, 0x2c26, 0x2c3b, 0x2c53, 0x2c71, 0x2c8f, 0x2ca4, + 0x2cb6, 0x2cce, 0x2ce0, 0x2cec, 0x2d2b, 0x2d3d, 0x2d49, 0x2d58, + 0x2d76, 0x2da9, 0x2dbb, 0x2dd3, 0x2ddf, 0x2dee, 0x2dfa, 0x2e0c, + 0x2e1b, 0x2e2a, 0x2e33, 0x2e48, 0x2e60, 0x2e75, 0x2e8a, 0x2e99, + 0x2eae, 0x2ecf, 0x2eea, 0x2efc, 0x2f0e, 0x2f26, 0x2f3e, 0x2f59, + 0x2f6e, 0x2f80, 0x2f98, 0x2fa4, 0x2fda, 0x2ff2, 0x3007, 0x301f, + 0x304f, 0x3055, 0x306a, 0x3079, 0x30a0, 0x30c8, 0x30d7, 0x30e3, + 0x30f2, 0x310a, 0x311c, 0x312e, 0x313a, 0x315b, 0x316d, 0x3185, // Entry 240 - 27F - 0x315e, 0x3167, 0x3179, 0x3188, 0x31a0, 0x31b8, 0x31cd, 0x31f1, - 0x3206, 0x3218, 0x325d, 0x3269, 0x3296, 0x32a2, 0x32e1, 0x32e1, - 0x3311, 0x333e, 0x3371, 0x3398, 0x33d4, 0x3401, 0x3434, 0x3452, - 0x3479, 0x3479, 0x34a6, 0x34cd, 0x34e8, 0x34fa, 0x3527, 0x3551, - 0x3566, 0x3597, 0x35bc, 0x35d7, 0x35f5, -} // Size: 1250 bytes - -const trLangStr string = "" + // Size: 5927 bytes + 0x31a0, 0x31ac, 0x31b8, 0x31c1, 0x31d3, 0x31e2, 0x31fa, 0x3212, + 0x3227, 0x324b, 0x3260, 0x3272, 0x32b7, 0x32c3, 0x32f0, 0x32fc, + 0x333b, 0x333b, 0x336b, 0x3398, 0x33cb, 0x33f2, 0x342e, 0x345b, + 0x348e, 0x34ac, 0x34d3, 0x34d3, 0x3500, 0x3527, 0x3542, 0x3554, + 0x3581, 0x35ab, 0x35c0, 0x35f1, 0x3618, 0x3633, 0x3651, +} // Size: 1254 bytes + +const trLangStr string = "" + // Size: 5998 bytes "AfarAbhazcaAvestçeAfrikaancaAkanAmharcaAragoncaArapçaAssamcaAvar DiliAym" + "araAzericeBaşkırtçaBelarusçaBulgarcaBislamaBambaraBengalceTibetçeBretonc" + "aBoşnakçaKatalancaÇeçenceÇamorro diliKorsikacaKriceÇekçeKilise SlavcasıÇ" + "uvaşçaGalceDancaAlmancaDivehi diliDzongkhaEweYunancaİngilizceEsperantoİs" + "panyolcaEstoncaBaskçaFarsçaFula diliFinceFiji DiliFaroe DiliFransızcaBat" + - "ı Frizcesiİrlandacaİskoç GaelcesiGaliçyacaGuarani diliGüceratçaManksHau" + - "sa diliİbraniceHintçeHiri MotuHırvatçaHaiti KreyoluMacarcaErmeniceHerero" + - " diliInterlinguaEndonezceInterlingueİbo diliSichuan YiİnyupikçeIdoİzland" + - "acaİtalyancaİnuit diliJaponcaCava DiliGürcüceKongo diliKikuyuKuanyamaKaz" + - "akçaGrönland diliKmerceKannada diliKoreceKanuri diliKeşmir diliKürtçeKom" + - "iKernevekçeKırgızcaLatinceLüksemburgcaGandaLimburgcaLingalaLao diliLitva" + - "ncaLuba-KatangaLetoncaMalgaşçaMarshall Adaları diliMaori diliMakedoncaMa" + - "layalam diliMoğolcaMarathiMalaycaMaltacaBurmacaNauru diliKuzey NdebeleNe" + - "palceNdongaFelemenkçeNorveççe NynorskNorveççe BokmålGüney NdebeleNavaho " + - "diliNyanjaOksitan diliOjibva diliOromo diliOriya DiliOsetçePencapçaPaliL" + - "ehçePeştucaPortekizceKeçuva diliRomanşçaKirundiRumenceRusçaKinyarwandaSa" + - "nskritSardunya diliSindhiKuzey LaponcasıSangoSeylancaSlovakçaSlovenceSam" + - "oa diliShonaSomaliceArnavutçaSırpçaSisvatiGüney Sotho diliSunda Diliİsve" + - "ççeSvahiliTamilceTelugu diliTacikçeTaycaTigrinyaTürkmenceSetsvanaTonga " + - "diliTürkçeTsongaTatarcaTahiti diliUygurcaUkraynacaUrducaÖzbekçeVenda dil" + - "iVietnamcaVolapükValoncaVolofçaZosa diliYidişYorubacaZhuangcaÇinceZuluca" + - "AçeceAcoliAdangmeAdigeceTunus ArapçasıAfrihiliAghemAyni DiliAkad DiliAla" + - "bamacaAleut diliGheg ArnavutçasıGüney AltaycaEski İngilizceAngikaAramice" + - "Mapuçe diliAraonaArapaho DiliCezayir ArapçasıArawak DiliFas ArapçasıMısı" + - "r ArapçasıAsuAmerikan İşaret DiliAsturyascaKotavaAwadhiBeluççaBali diliB" + - "avyera diliBasa DiliBamunBatak TobaGhomalaBeja diliBembaBetawiBenaBafutB" + - "adagaBatı BalochiArayaniceBikolBiniBanjar DiliKomKaraayak diliBishnupriy" + - "aBahtiyariBrajBrohiceBodoAkooseBuryatçaBugisBuluBlinMedumbaKado diliCari" + - "bKayuga diliAtsamSebuano diliKigacaÇibça diliÇağataycaChuukeseMari diliÇ" + - "inuk diliÇoktav diliÇipevya diliÇerokiceŞayenceOrta KürtçeKıpticeCapizno" + - "nKırım TürkçesiSeselwa Kreole FransızcasıKashubianDakotacaDarginceTaitaD" + - "elawareSlavey diliDogribDinka diliZarmaDogriAşağı SorbçaOrta KadazanDual" + - "aOrtaçağ FelemenkçesiJola-FonyiDyulaDazagaEmbuEfikEmilia DiliEski Mısır " + - "DiliEkajukElamOrtaçağ İngilizcesiMerkezi YupikçeEwondoEkstremadura DiliF" + - "angFilipinceTornedalin FincesiFonCajun FransızcasıOrtaçağ FransızcasıEsk" + - "i FransızcaArpitancaKuzey FrizceDoğu FrizcesiFriuli diliGa diliGagavuzca" + - "Gan ÇincesiGayo diliGbayaZerdüşt DaricesiGeezKiribaticeGilaniceOrtaçağ Y" + - "üksek AlmancasıEski Yüksek AlmancaGoa KonkanicesiGondi diliGorontalo di" + - "liGotçaGrebo diliAntik Yunancaİsviçre AlmancasıWayuu diliFrafraGusiiGuçi" + - "nceHaydacaHakka ÇincesiHawaii diliFiji HintçesiHiligaynon diliHititçeHmo" + - "ngYukarı SorbçaXiang ÇincesiHupacaIbanİbibio diliIlokoİnguşçaİngriya Dil" + - "iJamaika Patois DiliLojbanNgombaMachameYahudi FarsçasıYahudi ArapçasıYut" + - "land DiliKarakalpakçaKabiliyeceKaçin diliJjuKambaKawiKabardeyceKanembuTy" + - "apMakondeKabuverdianuKenyangKoroKaingangKhasi diliHotancaKoyra ChiiniÇit" + - "ral DiliKırmanççaKakoKalenjinKimbunduKomi-PermyakKonkani diliKosraeanKpe" + - "lle diliKaraçay-BalkarcaKrioKinaray-aKarelyacaKurukhShambalaBafiaKöln le" + - "hçesiKumukçaKutenai diliLadinoLangiLahndaLamba diliLezgiceLingua Franca " + - "NovaLigurcaLivoncaLakotacaLombardçaMongoLoziKuzey LuriLatgalianLuba-Lulu" + - "aLuisenoLundaLuoLushaiLuyiaEdebi ÇinceLazcaMadura DiliMafaMagahiMaithili" + - "MakasarMandingoMasaiMabaMokşa diliMandarMende diliMeruMorisyenOrtaçağ İr" + - "landacasıMakhuwa-MeettoMeta’MicmacMinangkabauMançurya diliManipuri diliM" + - "ohavk diliMossiOva ÇirmişçesiMundangBirden Fazla DilKrikçeMiranda diliMa" + - "rvariMentawaiMyeneErzyaMazenderancaMin Nan ÇincesiNapoliceNamaAşağı Alma" + - "ncaNevariNiasNiue diliAo NagaKwasioNgiemboonNogaycaEski Nors diliNovialN" + - "’KoKuzey Sotho diliNuerKlasik NevariNyamveziNyankoleNyoroNzima diliOsa" + - "geOsmanlı TürkçesiPangasinan diliPehlevi DiliPampangaPapiamentoPalau dil" + - "iPicard DiliNijerya Pidgin diliPensilvanya AlmancasıPlautdietschEski Far" + - "sçaPalatin AlmancasıFenike diliPiyemonteceKuzeybatı KafkasyaPohnpeianPru" + - "syacaEski ProvensalKiçeceChimborazo Highland QuichuaRajasthaniRapanui di" + - "liRarotonganRomanyolcaRif BerbericesiRomboRomancaRotumanRusinceRovianaUl" + - "ahçaRwaSandaveYakutçaSamarit AramcasıSamburuSasakSantaliSaurashtraNgamba" + - "ySanguSicilyacaİskoççaSassari SarducaGüney KürtçesiSeneca diliSenaSeriSe" + - "lkup diliKoyraboro SenniEski İrlandacaSamogitçeTaşelhitShan diliÇad Arap" + - "çasıSidamo diliAşağı SilezyacaSelayarGüney LaponcasıLule Laponcasıİnari" + - " LaponcasıSkolt LaponcasıSoninkeSogdiana DiliSranan TongoSerer diliSahoS" + - "aterland FrizcesiSukuma diliSusuSümerceKomorcaKlasik SüryaniceSüryaniceS" + - "ilezyacaTulucaTimneTesoTerenoTetumTigreTivTokelau diliSahurcaKlingoncaTl" + - "ingitTalışçaTamaşekNyasa TongaTok PisinTuroyoTarokoTsakoncaTsimshianTatç" + - "aTumbukaTuvalyancaTasawaqTuvacaOrta Atlas TamazigtiUdmurtçaUgarit diliUm" + - "bunduKökenVaiVenedikçeVeps diliBatı FlamancaMain Frankonya DiliVotçaVõro" + + "ı Frizcesiİrlandacaİskoç GaelcesiGaliçyacaGuarani diliGüceratçaMan dili" + + "Hausa diliİbraniceHintçeHiri MotuHırvatçaHaiti KreyoluMacarcaErmeniceHer" + + "ero diliInterlinguaEndonezceInterlingueİbo diliSichuan YiİnyupikçeIdoİzl" + + "andacaİtalyancaİnuktitut diliJaponcaCava DiliGürcüceKongo diliKikuyuKuan" + + "yamaKazakçaGrönland diliKhmer diliKannada diliKoreceKanuri diliKeşmir di" + + "liKürtçeKomiKernevekçeKırgızcaLatinceLüksemburgcaGandaLimburgcaLingalaLa" + + "o diliLitvancaLuba-KatangaLetoncaMalgaşçaMarshall Adaları diliMaori dili" + + "MakedoncaMalayalam diliMoğolcaMarathi diliMalaycaMaltacaBirman diliNauru" + + " diliKuzey NdebeleNepalceNdongaFelemenkçeNorveççe NynorskNorveççe Bokmål" + + "Güney NdebeleNavaho diliNyanjaOksitan diliOjibva diliOromo diliOriya Dil" + + "iOsetçePencapçaPaliLehçePeştucaPortekizceKeçuva diliRomanşçaKirundiRumen" + + "ceRusçaKinyarwandaSanskritSardunya diliSindhi diliKuzey LaponcasıSangoSi" + + "nhali diliSlovakçaSlovenceSamoa diliShonaSomaliceArnavutçaSırpçaSisvatiG" + + "üney Sotho diliSunda DiliİsveççeSvahili diliTamilceTelugu diliTacikçeTa" + + "ycaTigrinya diliTürkmenceSetsvanaTonga diliTürkçeTsongaTatarcaTahiti dil" + + "iUygurcaUkraynacaUrducaÖzbekçeVenda diliVietnamcaVolapükValoncaVolofçaZo" + + "sa diliYidişYorubacaZhuangcaÇinceZulucaAçeceAcoliAdangmeAdigeceTunus Ara" + + "pçasıAfrihiliAghemAyni DiliAkad DiliAlabamacaAleut diliGheg ArnavutçasıG" + + "üney AltaycaEski İngilizceAngikaAramiceMapuçe diliAraonaArapaho DiliCez" + + "ayir ArapçasıArawak DiliFas ArapçasıMısır ArapçasıAsuAmerikan İşaret Dil" + + "iAsturyascaKotavaAwadhiBeluççaBali diliBavyera diliBasa DiliBamunBatak T" + + "obaGhomalaBeja diliBembaBetawiBenaBafutBadagaBatı BalochiArayaniceBikolB" + + "iniBanjar DiliKomKaraayak diliBishnupriyaBahtiyariBrajBrohiceBodoAkooseB" + + "uryatçaBugisBuluBlinMedumbaKado diliCaribKayuga diliAtsamSebuano diliKig" + + "acaÇibça diliÇağataycaChuukeseMari diliÇinuk diliÇoktav diliÇipevya dili" + + "ÇerokiceŞayenceOrta KürtçeKıpticeCapiznonKırım TürkçesiSeselwa Kreole F" + + "ransızcasıKashubianDakotacaDarginceTaitaDelawareSlavey diliDogribDinka d" + + "iliZarmaDogriAşağı SorbçaOrta KadazanDualaOrtaçağ FelemenkçesiJola-Fonyi" + + "DyulaDazagaEmbuEfikEmilia DiliEski Mısır DiliEkajukElamOrtaçağ İngilizce" + + "siMerkezi YupikçeEwondoEkstremadura DiliFangFilipinceTornedalin FincesiF" + + "onCajun FransızcasıOrtaçağ FransızcasıEski FransızcaArpitancaKuzey Frizc" + + "eDoğu FrizcesiFriuli diliGa diliGagavuzcaGan ÇincesiGayo diliGbayaZerdüş" + + "t DaricesiGeezKiribaticeGilaniceOrtaçağ Yüksek AlmancasıEski Yüksek Alma" + + "ncaGoa KonkanicesiGondi diliGorontalo diliGotçaGrebo diliAntik Yunancaİs" + + "viçre AlmancasıWayuu diliFrafraGusiiGuçinceHaydacaHakka ÇincesiHawaii di" + + "liFiji HintçesiHiligaynon diliHititçeHmongYukarı SorbçaXiang ÇincesiHupa" + + "caIbanİbibio diliIlokoİnguşçaİngriya DiliJamaika Patois DiliLojbanNgomba" + + "MachameYahudi FarsçasıYahudi ArapçasıYutland DiliKarakalpakçaKabiliyeceK" + + "açin diliJjuKambaKawiKabardeyceKanembuTyapMakondeKabuverdianuKenyangKoro" + + "KaingangKhasi diliHotancaKoyra ChiiniÇitral DiliKırmanççaKakoKalenjinKim" + + "bunduKomi-PermyakKonkani diliKosraeanKpelle diliKaraçay-BalkarcaKrioKina" + + "ray-aKarelyacaKurukh diliShambalaBafiaKöln lehçesiKumukçaKutenai diliLad" + + "inoLangiLahndaLamba diliLezgiceLingua Franca NovaLigurcaLivoncaLakotacaL" + + "ombardçaMongoLouisiana KreolcesiLoziKuzey LuriLatgalianLuba-LuluaLuiseno" + + "LundaLuoLushaiLuyiaEdebi ÇinceLazcaMadura DiliMafaMagahiMaithiliMakasarM" + + "andingoMasaiMabaMokşa diliMandarMende diliMeruMorisyenOrtaçağ İrlandacas" + + "ıMakhuwa-MeettoMeta’MicmacMinangkabauMançurya diliManipuri diliMohavk d" + + "iliMossiOva ÇirmişçesiMundangBirden Fazla DilKrikçeMiranda diliMarvariMe" + + "ntawaiMyeneErzyaMazenderancaMin Nan ÇincesiNapoliceNamaAşağı AlmancaNeva" + + "riNiasNiue diliAo NagaKwasioNgiemboonNogaycaEski Nors diliNovialN’KoKuze" + + "y Sotho diliNuerKlasik NevariNyamveziNyankoleNyoroNzima diliOsageOsmanlı" + + " TürkçesiPangasinan diliPehlevi DiliPampangaPapiamentoPalau diliPicard D" + + "iliNijerya Pidgin diliPensilvanya AlmancasıPlautdietschEski FarsçaPalati" + + "n AlmancasıFenike diliPiyemonteceKuzeybatı KafkasyaPohnpeianPrusyacaEski" + + " ProvensalKiçeceChimborazo Highland QuichuaRajasthaniRapanui diliRaroton" + + "ganRomanyolcaRif BerbericesiRomboRomancaRotumanRusinceRovianaUlahçaRwaSa" + + "ndaveYakutçaSamarit AramcasıSamburuSasakSantaliSaurashtraNgambaySanguSic" + + "ilyacaİskoççaSassari SarducaGüney KürtçesiSeneca diliSenaSeriSelkup dili" + + "Koyraboro SenniEski İrlandacaSamogitçeTaşelhitShan diliÇad ArapçasıSidam" + + "o diliAşağı SilezyacaSelayarGüney LaponcasıLule Laponcasıİnari Laponcası" + + "Skolt LaponcasıSoninkeSogdiana DiliSranan TongoSerer diliSahoSaterland F" + + "rizcesiSukuma diliSusuSümerceKomorcaKlasik SüryaniceSüryaniceSilezyacaTu" + + "lucaTimneTesoTerenoTetumTigreTivTokelau diliSahurcaKlingoncaTlingitTalış" + + "çaTamaşekNyasa TongaTok PisinTuroyoTarokoTsakoncaTsimshianTatçaTumbukaT" + + "uvalyancaTasawaqTuvacaOrta Atlas TamazigtiUdmurtçaUgarit diliUmbunduBili" + + "nmeyen DilVaiVenedikçeVeps diliBatı FlamancaMain Frankonya DiliVotçaVõro" + "VunjoWalserValamoVarayVaşoWarlpiriWu ÇincesiKalmıkçaMegrelceSogaYaoYapça" + "YangbenYembaNheengatuKantoncaZapotek diliBlis SembolleriZelandacaZenaga " + "diliStandart Fas TamazigtiZuniceDilbilim içeriği yokZazacaModern Standar" + @@ -25252,7 +26635,7 @@ const trLangStr string = "" + // Size: 5927 bytes "Avrupa PortekizcesiMoldovacaSırp-Hırvat DiliKongo SvahiliBasitleştirilmi" + "ş ÇinceGeleneksel Çince" -var trLangIdx = []uint16{ // 613 elements +var trLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0004, 0x000b, 0x0013, 0x001d, 0x0021, 0x0028, 0x0030, 0x0037, 0x003e, 0x0047, 0x004d, 0x0054, 0x0060, 0x006a, 0x0072, @@ -25260,509 +26643,512 @@ var trLangIdx = []uint16{ // 613 elements 0x00c1, 0x00ca, 0x00cf, 0x00d6, 0x00e6, 0x00f0, 0x00f5, 0x00fa, 0x0101, 0x010c, 0x0114, 0x0117, 0x011e, 0x0128, 0x0131, 0x013c, 0x0143, 0x014a, 0x0151, 0x015a, 0x015f, 0x0168, 0x0172, 0x017c, - 0x018a, 0x0194, 0x01a4, 0x01ae, 0x01ba, 0x01c5, 0x01ca, 0x01d4, - 0x01dd, 0x01e4, 0x01ed, 0x01f7, 0x0204, 0x020b, 0x0213, 0x021e, + 0x018a, 0x0194, 0x01a4, 0x01ae, 0x01ba, 0x01c5, 0x01cd, 0x01d7, + 0x01e0, 0x01e7, 0x01f0, 0x01fa, 0x0207, 0x020e, 0x0216, 0x0221, // Entry 40 - 7F - 0x0229, 0x0232, 0x023d, 0x0246, 0x0250, 0x025b, 0x025e, 0x0268, - 0x0272, 0x027d, 0x0284, 0x028d, 0x0296, 0x02a0, 0x02a6, 0x02ae, - 0x02b6, 0x02c4, 0x02ca, 0x02d6, 0x02dc, 0x02e7, 0x02f3, 0x02fb, - 0x02ff, 0x030a, 0x0314, 0x031b, 0x0328, 0x032d, 0x0336, 0x033d, - 0x0345, 0x034d, 0x0359, 0x0360, 0x036a, 0x0380, 0x038a, 0x0393, - 0x03a1, 0x03a9, 0x03b0, 0x03b7, 0x03be, 0x03c5, 0x03cf, 0x03dc, - 0x03e3, 0x03e9, 0x03f4, 0x0406, 0x0418, 0x0426, 0x0431, 0x0437, - 0x0443, 0x044e, 0x0458, 0x0462, 0x0469, 0x0472, 0x0476, 0x047c, + 0x022c, 0x0235, 0x0240, 0x0249, 0x0253, 0x025e, 0x0261, 0x026b, + 0x0275, 0x0284, 0x028b, 0x0294, 0x029d, 0x02a7, 0x02ad, 0x02b5, + 0x02bd, 0x02cb, 0x02d5, 0x02e1, 0x02e7, 0x02f2, 0x02fe, 0x0306, + 0x030a, 0x0315, 0x031f, 0x0326, 0x0333, 0x0338, 0x0341, 0x0348, + 0x0350, 0x0358, 0x0364, 0x036b, 0x0375, 0x038b, 0x0395, 0x039e, + 0x03ac, 0x03b4, 0x03c0, 0x03c7, 0x03ce, 0x03d9, 0x03e3, 0x03f0, + 0x03f7, 0x03fd, 0x0408, 0x041a, 0x042c, 0x043a, 0x0445, 0x044b, + 0x0457, 0x0462, 0x046c, 0x0476, 0x047d, 0x0486, 0x048a, 0x0490, // Entry 80 - BF - 0x0484, 0x048e, 0x049a, 0x04a4, 0x04ab, 0x04b2, 0x04b8, 0x04c3, - 0x04cb, 0x04d8, 0x04de, 0x04ee, 0x04f3, 0x04fb, 0x0504, 0x050c, - 0x0516, 0x051b, 0x0523, 0x052d, 0x0535, 0x053c, 0x054d, 0x0557, - 0x0561, 0x0568, 0x056f, 0x057a, 0x0582, 0x0587, 0x058f, 0x0599, - 0x05a1, 0x05ab, 0x05b3, 0x05b9, 0x05c0, 0x05cb, 0x05d2, 0x05db, - 0x05e1, 0x05ea, 0x05f4, 0x05fd, 0x0605, 0x060c, 0x0614, 0x061d, - 0x0623, 0x062b, 0x0633, 0x0639, 0x063f, 0x0645, 0x064a, 0x0651, - 0x0658, 0x0668, 0x0670, 0x0675, 0x067e, 0x0687, 0x0690, 0x069a, + 0x0498, 0x04a2, 0x04ae, 0x04b8, 0x04bf, 0x04c6, 0x04cc, 0x04d7, + 0x04df, 0x04ec, 0x04f7, 0x0507, 0x050c, 0x0518, 0x0521, 0x0529, + 0x0533, 0x0538, 0x0540, 0x054a, 0x0552, 0x0559, 0x056a, 0x0574, + 0x057e, 0x058a, 0x0591, 0x059c, 0x05a4, 0x05a9, 0x05b6, 0x05c0, + 0x05c8, 0x05d2, 0x05da, 0x05e0, 0x05e7, 0x05f2, 0x05f9, 0x0602, + 0x0608, 0x0611, 0x061b, 0x0624, 0x062c, 0x0633, 0x063b, 0x0644, + 0x064a, 0x0652, 0x065a, 0x0660, 0x0666, 0x066c, 0x0671, 0x0678, + 0x067f, 0x068f, 0x0697, 0x069c, 0x06a5, 0x06ae, 0x06b7, 0x06c1, // Entry C0 - FF - 0x06ac, 0x06ba, 0x06c9, 0x06cf, 0x06d6, 0x06e2, 0x06e8, 0x06f4, - 0x0706, 0x0706, 0x0711, 0x071f, 0x0731, 0x0734, 0x074a, 0x0754, - 0x075a, 0x0760, 0x0769, 0x0772, 0x077e, 0x0787, 0x078c, 0x0796, - 0x079d, 0x07a6, 0x07ab, 0x07b1, 0x07b5, 0x07ba, 0x07c0, 0x07cd, - 0x07d6, 0x07db, 0x07df, 0x07ea, 0x07ed, 0x07fa, 0x0805, 0x080e, - 0x0812, 0x0819, 0x081d, 0x0823, 0x082c, 0x0831, 0x0835, 0x0839, - 0x0840, 0x0849, 0x084e, 0x0859, 0x085e, 0x086a, 0x0870, 0x087c, - 0x0887, 0x088f, 0x0898, 0x08a3, 0x08af, 0x08bc, 0x08c5, 0x08cd, + 0x06d3, 0x06e1, 0x06f0, 0x06f6, 0x06fd, 0x0709, 0x070f, 0x071b, + 0x072d, 0x072d, 0x0738, 0x0746, 0x0758, 0x075b, 0x0771, 0x077b, + 0x0781, 0x0787, 0x0790, 0x0799, 0x07a5, 0x07ae, 0x07b3, 0x07bd, + 0x07c4, 0x07cd, 0x07d2, 0x07d8, 0x07dc, 0x07e1, 0x07e7, 0x07f4, + 0x07fd, 0x0802, 0x0806, 0x0811, 0x0814, 0x0821, 0x082c, 0x0835, + 0x0839, 0x0840, 0x0844, 0x084a, 0x0853, 0x0858, 0x085c, 0x0860, + 0x0867, 0x0870, 0x0875, 0x0880, 0x0885, 0x0885, 0x0891, 0x0897, + 0x08a3, 0x08ae, 0x08b6, 0x08bf, 0x08ca, 0x08d6, 0x08e3, 0x08ec, // Entry 100 - 13F - 0x08da, 0x08e2, 0x08ea, 0x08fc, 0x0918, 0x0921, 0x0929, 0x0931, - 0x0936, 0x093e, 0x0949, 0x094f, 0x0959, 0x095e, 0x0963, 0x0973, - 0x097f, 0x0984, 0x099b, 0x09a5, 0x09aa, 0x09b0, 0x09b4, 0x09b8, - 0x09c3, 0x09d4, 0x09da, 0x09de, 0x09f4, 0x0a04, 0x0a0a, 0x0a1b, - 0x0a1f, 0x0a28, 0x0a3a, 0x0a3d, 0x0a50, 0x0a67, 0x0a76, 0x0a7f, - 0x0a8b, 0x0a99, 0x0aa4, 0x0aab, 0x0ab4, 0x0ac0, 0x0ac9, 0x0ace, - 0x0ae0, 0x0ae4, 0x0aee, 0x0af6, 0x0b12, 0x0b26, 0x0b35, 0x0b3f, - 0x0b4d, 0x0b53, 0x0b5d, 0x0b6a, 0x0b7e, 0x0b88, 0x0b8e, 0x0b93, + 0x08f4, 0x0901, 0x0909, 0x0911, 0x0923, 0x093f, 0x0948, 0x0950, + 0x0958, 0x095d, 0x0965, 0x0970, 0x0976, 0x0980, 0x0985, 0x098a, + 0x099a, 0x09a6, 0x09ab, 0x09c2, 0x09cc, 0x09d1, 0x09d7, 0x09db, + 0x09df, 0x09ea, 0x09fb, 0x0a01, 0x0a05, 0x0a1b, 0x0a2b, 0x0a31, + 0x0a42, 0x0a46, 0x0a4f, 0x0a61, 0x0a64, 0x0a77, 0x0a8e, 0x0a9d, + 0x0aa6, 0x0ab2, 0x0ac0, 0x0acb, 0x0ad2, 0x0adb, 0x0ae7, 0x0af0, + 0x0af5, 0x0b07, 0x0b0b, 0x0b15, 0x0b1d, 0x0b39, 0x0b4d, 0x0b5c, + 0x0b66, 0x0b74, 0x0b7a, 0x0b84, 0x0b91, 0x0ba5, 0x0baf, 0x0bb5, // Entry 140 - 17F - 0x0b9b, 0x0ba2, 0x0bb0, 0x0bbb, 0x0bc9, 0x0bd8, 0x0be0, 0x0be5, - 0x0bf4, 0x0c02, 0x0c08, 0x0c0c, 0x0c18, 0x0c1d, 0x0c27, 0x0c34, - 0x0c47, 0x0c4d, 0x0c53, 0x0c5a, 0x0c6b, 0x0c7c, 0x0c88, 0x0c95, - 0x0c9f, 0x0caa, 0x0cad, 0x0cb2, 0x0cb6, 0x0cc0, 0x0cc7, 0x0ccb, - 0x0cd2, 0x0cde, 0x0ce5, 0x0ce9, 0x0cf1, 0x0cfb, 0x0d02, 0x0d0e, - 0x0d1a, 0x0d26, 0x0d2a, 0x0d32, 0x0d3a, 0x0d46, 0x0d52, 0x0d5a, - 0x0d65, 0x0d76, 0x0d7a, 0x0d83, 0x0d8c, 0x0d92, 0x0d9a, 0x0d9f, - 0x0dad, 0x0db5, 0x0dc1, 0x0dc7, 0x0dcc, 0x0dd2, 0x0ddc, 0x0de3, + 0x0bba, 0x0bc2, 0x0bc9, 0x0bd7, 0x0be2, 0x0bf0, 0x0bff, 0x0c07, + 0x0c0c, 0x0c1b, 0x0c29, 0x0c2f, 0x0c33, 0x0c3f, 0x0c44, 0x0c4e, + 0x0c5b, 0x0c6e, 0x0c74, 0x0c7a, 0x0c81, 0x0c92, 0x0ca3, 0x0caf, + 0x0cbc, 0x0cc6, 0x0cd1, 0x0cd4, 0x0cd9, 0x0cdd, 0x0ce7, 0x0cee, + 0x0cf2, 0x0cf9, 0x0d05, 0x0d0c, 0x0d10, 0x0d18, 0x0d22, 0x0d29, + 0x0d35, 0x0d41, 0x0d4d, 0x0d51, 0x0d59, 0x0d61, 0x0d6d, 0x0d79, + 0x0d81, 0x0d8c, 0x0d9d, 0x0da1, 0x0daa, 0x0db3, 0x0dbe, 0x0dc6, + 0x0dcb, 0x0dd9, 0x0de1, 0x0ded, 0x0df3, 0x0df8, 0x0dfe, 0x0e08, // Entry 180 - 1BF - 0x0df5, 0x0dfc, 0x0e03, 0x0e0b, 0x0e15, 0x0e1a, 0x0e1e, 0x0e28, - 0x0e31, 0x0e3b, 0x0e42, 0x0e47, 0x0e4a, 0x0e50, 0x0e55, 0x0e61, - 0x0e66, 0x0e71, 0x0e75, 0x0e7b, 0x0e83, 0x0e8a, 0x0e92, 0x0e97, - 0x0e9b, 0x0ea6, 0x0eac, 0x0eb6, 0x0eba, 0x0ec2, 0x0ed9, 0x0ee7, - 0x0eee, 0x0ef4, 0x0eff, 0x0f0d, 0x0f1a, 0x0f25, 0x0f2a, 0x0f3b, - 0x0f42, 0x0f52, 0x0f59, 0x0f65, 0x0f6c, 0x0f74, 0x0f79, 0x0f7e, - 0x0f8a, 0x0f9a, 0x0fa2, 0x0fa6, 0x0fb6, 0x0fbc, 0x0fc0, 0x0fc9, - 0x0fd0, 0x0fd6, 0x0fdf, 0x0fe6, 0x0ff4, 0x0ffa, 0x1000, 0x1010, + 0x0e0f, 0x0e21, 0x0e28, 0x0e2f, 0x0e37, 0x0e41, 0x0e46, 0x0e59, + 0x0e5d, 0x0e67, 0x0e70, 0x0e7a, 0x0e81, 0x0e86, 0x0e89, 0x0e8f, + 0x0e94, 0x0ea0, 0x0ea5, 0x0eb0, 0x0eb4, 0x0eba, 0x0ec2, 0x0ec9, + 0x0ed1, 0x0ed6, 0x0eda, 0x0ee5, 0x0eeb, 0x0ef5, 0x0ef9, 0x0f01, + 0x0f18, 0x0f26, 0x0f2d, 0x0f33, 0x0f3e, 0x0f4c, 0x0f59, 0x0f64, + 0x0f69, 0x0f7a, 0x0f81, 0x0f91, 0x0f98, 0x0fa4, 0x0fab, 0x0fb3, + 0x0fb8, 0x0fbd, 0x0fc9, 0x0fd9, 0x0fe1, 0x0fe5, 0x0ff5, 0x0ffb, + 0x0fff, 0x1008, 0x100f, 0x1015, 0x101e, 0x1025, 0x1033, 0x1039, // Entry 1C0 - 1FF - 0x1014, 0x1021, 0x1029, 0x1031, 0x1036, 0x1040, 0x1045, 0x1058, - 0x1067, 0x1073, 0x107b, 0x1085, 0x108f, 0x109a, 0x10ad, 0x10c3, - 0x10cf, 0x10db, 0x10ed, 0x10f8, 0x1103, 0x1116, 0x111f, 0x1127, - 0x1135, 0x113c, 0x1157, 0x1161, 0x116d, 0x1177, 0x1181, 0x1190, - 0x1195, 0x119c, 0x11a3, 0x11aa, 0x11b1, 0x11b8, 0x11bb, 0x11c2, - 0x11ca, 0x11db, 0x11e2, 0x11e7, 0x11ee, 0x11f8, 0x11ff, 0x1204, - 0x120d, 0x1217, 0x1226, 0x1237, 0x1242, 0x1246, 0x124a, 0x1255, - 0x1264, 0x1273, 0x127d, 0x1286, 0x128f, 0x129e, 0x12a9, 0x12bb, + 0x103f, 0x104f, 0x1053, 0x1060, 0x1068, 0x1070, 0x1075, 0x107f, + 0x1084, 0x1097, 0x10a6, 0x10b2, 0x10ba, 0x10c4, 0x10ce, 0x10d9, + 0x10ec, 0x1102, 0x110e, 0x111a, 0x112c, 0x1137, 0x1142, 0x1155, + 0x115e, 0x1166, 0x1174, 0x117b, 0x1196, 0x11a0, 0x11ac, 0x11b6, + 0x11c0, 0x11cf, 0x11d4, 0x11db, 0x11e2, 0x11e9, 0x11f0, 0x11f7, + 0x11fa, 0x1201, 0x1209, 0x121a, 0x1221, 0x1226, 0x122d, 0x1237, + 0x123e, 0x1243, 0x124c, 0x1256, 0x1265, 0x1276, 0x1281, 0x1285, + 0x1289, 0x1294, 0x12a3, 0x12b2, 0x12bc, 0x12c5, 0x12ce, 0x12dd, // Entry 200 - 23F - 0x12c2, 0x12d3, 0x12e2, 0x12f3, 0x1303, 0x130a, 0x1317, 0x1323, - 0x132d, 0x1331, 0x1343, 0x134e, 0x1352, 0x135a, 0x1361, 0x1372, - 0x137c, 0x1385, 0x138b, 0x1390, 0x1394, 0x139a, 0x139f, 0x13a4, - 0x13a7, 0x13b3, 0x13ba, 0x13c3, 0x13ca, 0x13d4, 0x13dc, 0x13e7, - 0x13f0, 0x13f6, 0x13fc, 0x1404, 0x140d, 0x1413, 0x141a, 0x1424, - 0x142b, 0x1431, 0x1445, 0x144e, 0x1459, 0x1460, 0x1466, 0x1469, - 0x1473, 0x147c, 0x148a, 0x149d, 0x14a3, 0x14a8, 0x14ad, 0x14b3, - 0x14b9, 0x14be, 0x14c3, 0x14cb, 0x14d6, 0x14e0, 0x14e8, 0x14ec, + 0x12e8, 0x12fa, 0x1301, 0x1312, 0x1321, 0x1332, 0x1342, 0x1349, + 0x1356, 0x1362, 0x136c, 0x1370, 0x1382, 0x138d, 0x1391, 0x1399, + 0x13a0, 0x13b1, 0x13bb, 0x13c4, 0x13ca, 0x13cf, 0x13d3, 0x13d9, + 0x13de, 0x13e3, 0x13e6, 0x13f2, 0x13f9, 0x1402, 0x1409, 0x1413, + 0x141b, 0x1426, 0x142f, 0x1435, 0x143b, 0x1443, 0x144c, 0x1452, + 0x1459, 0x1463, 0x146a, 0x1470, 0x1484, 0x148d, 0x1498, 0x149f, + 0x14ad, 0x14b0, 0x14ba, 0x14c3, 0x14d1, 0x14e4, 0x14ea, 0x14ef, + 0x14f4, 0x14fa, 0x1500, 0x1505, 0x150a, 0x1512, 0x151d, 0x1527, // Entry 240 - 27F - 0x14ef, 0x14f5, 0x14fc, 0x1501, 0x150a, 0x1512, 0x151e, 0x152d, - 0x1536, 0x1541, 0x1557, 0x155d, 0x1573, 0x1579, 0x1590, 0x159e, - 0x15b2, 0x15ce, 0x15e5, 0x15f8, 0x160d, 0x1622, 0x163e, 0x1653, - 0x1669, 0x1669, 0x167d, 0x1694, 0x16a5, 0x16ad, 0x16c2, 0x16d5, - 0x16de, 0x16f0, 0x16fd, 0x1716, 0x1727, -} // Size: 1250 bytes - -const ukLangStr string = "" + // Size: 9189 bytes + 0x152f, 0x1533, 0x1536, 0x153c, 0x1543, 0x1548, 0x1551, 0x1559, + 0x1565, 0x1574, 0x157d, 0x1588, 0x159e, 0x15a4, 0x15ba, 0x15c0, + 0x15d7, 0x15e5, 0x15f9, 0x1615, 0x162c, 0x163f, 0x1654, 0x1669, + 0x1685, 0x169a, 0x16b0, 0x16b0, 0x16c4, 0x16db, 0x16ec, 0x16f4, + 0x1709, 0x171c, 0x1725, 0x1737, 0x1744, 0x175d, 0x176e, +} // Size: 1254 bytes + +const ukLangStr string = "" + // Size: 9374 bytes "афарськаабхазькаавестійськаафрикаансаканамхарськаарагонськаарабськаассам" + "ськааварськааймараазербайджанськабашкирськабілоруськаболгарськабісламаб" + - "амбарабенгальськатибетськабретонськабоснійськакаталонськачеченськачамор" + - "рокорсиканськакрічеськацерковнословʼянськачуваськаваллійськаданськаніме" + - "цькадівехідзонг-кеевегрецькаанглійськаесперантоіспанськаестонськабасксь" + - "каперськафулафінськафіджіфарерськафранцузьказахіднофризькаірландськагае" + - "льськагалісійськагуаранігуджаратіменкськахаусаівритгіндіхірі-мотухорват" + - "ськагаїтянськаугорськавірменськагерероінтерлінгваіндонезійськаінтерлінг" + - "веігбосичуаньінупіакідоісландськаіталійськаінуктітутяпонськаяванськагру" + - "зинськаконґолезькакікуйюкунамаказахськакалааллісуткхмерськаканнадакорей" + - "ськаканурікашмірськакурдськакомікорнійськакиргизькалатинськалюксембурзь" + - "кагандалімбургійськалінгалалаоськалитовськалуба-катангалатвійськамалага" + - "сійськамаршалльськамаорімакедонськамалаяламмонгольськамаратхімалайськам" + - "альтійськабірманськанаурундебелє північнанепальськандонгаголландськанюн" + - "ошк (Норвегія)букмол (Норвегія)ндебелє південнанавахоньянджаокитаноджіб" + - "ваоромооріяосетинськапанджабіпаліпольськапуштупортугальськакечуаретором" + - "анськарундірумунськаросійськакіньяруандасанскритсардинськасіндхісаамськ" + - "а північнасангосингальськасловацькасловенськасамоанськашонасомаліалбанс" + - "ькасербськасісватісото південнасунданськашведськасуахілітамільськателуг" + - "утаджицькатайськатигриньятуркменськатсванатонганськатурецькатсонгататар" + - "ськатаїтянськауйгурськаукраїнськаурдуузбецькавендавʼєтнамськаволапʼюква" + - "ллонськаволофкхосаідишйорубачжуанкитайськазулуськаачехськаачоліадангмеа" + - "дигейськаафрихіліагемайнськааккадськаалабамаалеутськапівденноалтайськад" + - "авньоанглійськаангікаарамейськаарауканськаараонаарапахоалжирська арабсь" + - "кааравакськаасуамериканська мова рухівастурськаавадхібалучібалійськабае" + - "рішбасабамумбатак тобагомалабеджабембабетавібенабафутбадагасхіднобелудж" + - "ійськабходжпурібікольськабінібанджарськакомсіксікабахтіарібраджбодоакус" + - "бурятськабугійськабулублінмедумбакаддокарібськакайюгаатсамсебуанськакіг" + - "ачібчачагатайськачуукськамарійськачинук жаргончокточіпевʼянчерокічейєнн" + - "курдська (сорані)коптськакримськотатарськасейшельська креольськакашубсь" + - "кадакотадаргінськатаітаделаварськаслейвдогрибськадінкаджермадогрінижньо" + - "лужицькадуаласередньонідерландськадьола-фонідіуладазагаембуефікдавньоєг" + - "ипетськаекаджукеламськасередньоанглійськаевондофангфіліппінськафонсеред" + - "ньофранцузькадавньофранцузькаарпітанськафризька північнафризька східнаф" + - "ріульськагагагаузькагайогбайягєезгільбертськасередньоверхньонімецькадав" + - "ньоверхньонімецькагондігоронталоготськагребодавньогрецьканімецька (Швей" + - "царія)гусіїкучінхайдагавайськахілігайнонхітітіхмонгверхньолужицькахупаі" + - "банськаібібіоілоканськаінгуськаложбаннгомбамачамеюдео-перськаюдео-арабс" + - "ькакаракалпацькакабільськакачінйюкамбакавікабардинськаканембутіапмаконд" + - "екабувердіанукорокхасіхотаносакськакойра чіїнікакокаленджинкімбундукомі" + - "-перм’яцькаконканікосраекпеллєкарачаєво-балкарськакарельськакурукхшамбал" + - "абафіаколоніанкумицькакутенаїладінолангіландаламбалезгінськалакотамонго" + - "лозіпівнічна лурськалуба-лулуалуїсеньолундалуомізолуйямадурськамафамага" + - "дхімайтхілімакасарськамандінгомасаїмабамокшамандарськамендемерумаврикій" + - "ська креольськасередньоірландськамакува-меетометамікмакмінангкабауманчж" + - "урськаманіпурімагавкмоссімундангкілька мовкрікмірандськамарварімиінерзя" + - "мазандеранськанеаполітанськанаманижньонімецьканеварініаськаніуеао нагак" + - "вазіонгємбунногайськадавньонорвезьканкосото північнануерневарі класична" + - "ньямвезіньянколеньоронзімаосейджосманськапангасінанськапехлевіпампангап" + - "апʼяментопалауанськанігерійсько-креольськадавньоперськафінікійсько-пуні" + - "чнапонапепруськадавньопровансальськакічераджастханірапануїраротонгаромб" + - "оциганськаарумунськарвасандавеякутськасамаритянська арамейськасамбуруса" + - "сакськасантальськангамбайсангусицилійськашотландськапівденнокурдськасен" + - "екасенаселькупськакойраборо сенідавньоірландськатачелітшанськачадійська" + - " арабськасідамопівденносаамськасаамська лулесаамська інарісаамська сколь" + - "тсонінкесогдійськасранан тонгосерерсахосукумасусушумерськакоморськасирі" + - "йська класичнасирійськатемнетесотеренотетумтигретівтокелауклінгонтлінгі" + - "ттамашекньяса тонгаток-пісінтарокоцимшиантумбукатувалутасавактувинськац" + - "ентральномароканська тамазітудмуртськаугаритськаумбундукоріньваїводська" + - "вуньовалзерськаваламоварайвашовалпірікалмицькасогаяояпянгбенємбакантонс" + - "ькасапотекськаблісса мовазенагастандартна марокканська берберськазуньїн" + - "емає мовного вмістузазакісучасна стандартна арабськапівденноазербайджан" + - "ськаверхньонімецька (Швейцарія)британська англійськаамериканська англій" + - "ськаіспанська (Європа)нижньосаксонськафламандськапортугальська (Європа)" + - "молдавськасербсько-хорватськаконгійське суахілікитайська спрощенакитайс" + - "ька традиційна" - -var ukLangIdx = []uint16{ // 613 elements + "амбарабанґлатибетськабретонськабоснійськакаталонськачеченськачаморрокор" + + "сиканськакрічеськацерковнословʼянськачуваськаваллійськаданськанімецькад" + + "івехідзонг-кеевегрецькаанглійськаесперантоіспанськаестонськабаскськапер" + + "ськафулафінськафіджіфарерськафранцузьказахіднофризькаірландськагаельськ" + + "агалісійськагуаранігуджаратіменкськахаусаівритгіндіхірі-мотухорватськаг" + + "аїтянськаугорськавірменськагерероінтерлінгваіндонезійськаінтерлінгвеігб" + + "осичуаньінупіакідоісландськаіталійськаінуктітутяпонськаяванськагрузинсь" + + "каконґолезькакікуйюкунамаказахськакалааллісуткхмерськаканнадакорейськак" + + "анурікашмірськакурдськакомікорнійськакиргизькалатинськалюксембурзькаган" + + "далімбургійськалінгалалаоськалитовськалуба-катангалатвійськамалагасійсь" + + "камаршалльськамаорімакедонськамалаяламмонгольськамаратхімалайськамальті" + + "йськабірманськанаурупівнічна ндебеленепальськандонганідерландськанорвез" + + "ька (нюношк)норвезька (букмол)ндебелє південнанавахоньянджаокситанськао" + + "джібваоромоодіяосетинськапанджабіпаліпольськапуштупортуґальськакечуарет" + + "ороманськарундірумунськаросійськакіньяруандасанскритсардинськасіндхіпів" + + "нічносаамськасангосингальськасловацькасловенськасамоанськашонасомаліалб" + + "анськасербськасісватісото південнасунданськашведськасуахілітамільськате" + + "лугутаджицькатайськатигриньятуркменськатсванатонґанськатурецькатсонгата" + + "тарськатаїтянськауйгурськаукраїнськаурдуузбецькавендавʼєтнамськаволапʼю" + + "кваллонськаволофкхосаїдишйорубачжуанкитайськазулуськаачехськаачоліаданг" + + "меадигейськаафрихіліагемайнськааккадськаалабамаалеутськапівденноалтайсь" + + "кадавньоанглійськаангікаарамейськаарауканськаараонаарапахоалжирська ара" + + "бськааравакськаасуамериканська мова рухівастурськаавадхібалучібалійська" + + "баерішбасабамумбатак тобагомалабеджабембабетавібенабафутбадагасхіднобел" + + "уджійськабходжпурібікольськабінібанджарськакомсіксікабахтіарібраджбодоа" + + "кусбурятськабугійськабулублінмедумбакаддокарібськакайюгаатсамсебуанська" + + "кігачібчачагатайськачуукськамарійськачинук жаргончокточіпевʼянчерокічей" + + "єннцентральнокурдськакоптськакримськотатарськасейшельська креольськакаш" + + "убськадакотадаргінськатаітаделаварськаслейвдогрибськадінкаджермадогріни" + + "жньолужицькадуаласередньонідерландськадьола-фонідіуладазагаембуефікдавн" + + "ьоєгипетськаекаджукеламськасередньоанглійськаевондофангфіліппінськафонк" + + "ажунська французькасередньофранцузькадавньофранцузькаарпітанськафризька" + + " північнафризька східнафріульськагагагаузькагайогбайягєезгільбертськасер" + + "едньоверхньонімецькадавньоверхньонімецькагондігоронталоготськагребодавн" + + "ьогрецьканімецька (Швейцарія)гусіїкучінхайдагавайськахілігайнонхітітіхм" + + "онгверхньолужицькасянська китайськахупаібанськаібібіоілоканськаінгуська" + + "ложбаннгомбамачамеюдео-перськаюдео-арабськакаракалпацькакабільськакачін" + + "йюкамбакавікабардинськаканембутіапмакондекабувердіанукорокхасіхотаносак" + + "ськакойра чіїнікакокаленджинкімбундукомі-перм’яцькаконканікосраекпеллєк" + + "арачаєво-балкарськакарельськакурукхшамбалабафіаколоніанкумицькакутенаїл" + + "адінолангіландаламбалезгінськалакотамонголуїзіанська креольськалозіпівн" + + "ічнолурськалуба-лулуалуїсеньолундалуомізолуйямадурськамафамагадхімайтхі" + + "лімакасарськамандінгомасаїмабамокшамандарськамендемерумаврикійська крео" + + "льськасередньоірландськамакува-меетометамікмакмінангкабауманчжурськаман" + + "іпурімагавкмоссімундангкілька мовкрікмірандськамарварімиінерзямазандера" + + "нськапівденноміньськанеаполітанськанаманижньонімецьканеварініаськаніуеа" + + "о нагаквазіонгємбунногайськадавньонорвезьканкопівнічна сотонуерневарі к" + + "ласичнаньямвезіньянколеньоронзімаосейджосманськапангасінанськапехлевіпа" + + "мпангапапʼяментопалауанськанігерійсько-креольськадавньоперськафінікійсь" + + "ко-пунічнапонапепруськадавньопровансальськакічераджастханірапануїрарото" + + "нгаромбоциганськаарумунськарвасандавеякутськасамаритянська арамейськаса" + + "мбурусасакськасантальськангамбайсангусицилійськашотландськапівденнокурд" + + "ськасенекасенаселькупськакойраборо сенідавньоірландськатачелітшанськача" + + "дійська арабськасідамопівденносаамськасаамська лулесаамська інаріскольт" + + "-саамськасонінкесогдійськасранан тонгосерерсахосукумасусушумерськакоморс" + + "ькасирійська класичнасирійськатемнетесотеренотетумтигретівтокелауклінго" + + "нськатлінгіттамашекньяса тонгаток-пісінтарокоцимшиантумбукатувалутасава" + + "ктувинськацентральномароканська тамазітудмуртськаугаритськаумбундуневід" + + "ома моваваїводськавуньовалзерськаволайттаварайвашовалпіріуська китайськ" + + "акалмицькасогаяояпянгбенємбакантонськасапотекськаблісса мовазенагастанд" + + "артна марокканська берберськазуньїнемає мовного вмістузазакісучасна ста" + + "ндартна арабськапівденноазербайджанськаверхньонімецька (Швейцарія)англі" + + "йська (США)іспанська (Європа)нижньосаксонськафламандськаєвропейська пор" + + "туґальськамолдавськасербсько-хорватськасуахілі (Конго)китайська (спроще" + + "не письмо)китайська (традиційне письмо)" + +var ukLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0010, 0x0020, 0x0036, 0x0048, 0x0050, 0x0062, 0x0076, 0x0086, 0x0098, 0x00a8, 0x00b4, 0x00d2, 0x00e6, 0x00fa, 0x010e, - 0x011c, 0x012a, 0x0140, 0x0152, 0x0166, 0x017a, 0x0190, 0x01a2, - 0x01b0, 0x01c8, 0x01ce, 0x01da, 0x0200, 0x0210, 0x0224, 0x0232, - 0x0242, 0x024e, 0x025d, 0x0263, 0x0271, 0x0285, 0x0297, 0x02a9, - 0x02bb, 0x02cb, 0x02d9, 0x02e1, 0x02ef, 0x02f9, 0x030b, 0x031f, - 0x033b, 0x034f, 0x0361, 0x0377, 0x0385, 0x0397, 0x03a7, 0x03b1, - 0x03bb, 0x03c5, 0x03d6, 0x03ea, 0x03fe, 0x040e, 0x0422, 0x042e, + 0x011c, 0x012a, 0x0136, 0x0148, 0x015c, 0x0170, 0x0186, 0x0198, + 0x01a6, 0x01be, 0x01c4, 0x01d0, 0x01f6, 0x0206, 0x021a, 0x0228, + 0x0238, 0x0244, 0x0253, 0x0259, 0x0267, 0x027b, 0x028d, 0x029f, + 0x02b1, 0x02c1, 0x02cf, 0x02d7, 0x02e5, 0x02ef, 0x0301, 0x0315, + 0x0331, 0x0345, 0x0357, 0x036d, 0x037b, 0x038d, 0x039d, 0x03a7, + 0x03b1, 0x03bb, 0x03cc, 0x03e0, 0x03f4, 0x0404, 0x0418, 0x0424, // Entry 40 - 7F - 0x0444, 0x045e, 0x0474, 0x047c, 0x048a, 0x0498, 0x049e, 0x04b2, - 0x04c6, 0x04d8, 0x04e8, 0x04f8, 0x050c, 0x0522, 0x052e, 0x053a, - 0x054c, 0x0562, 0x0574, 0x0582, 0x0594, 0x05a0, 0x05b4, 0x05c4, - 0x05cc, 0x05e0, 0x05f2, 0x0604, 0x061e, 0x0628, 0x0642, 0x0650, - 0x065e, 0x0670, 0x0687, 0x069b, 0x06b5, 0x06cd, 0x06d7, 0x06ed, - 0x06fd, 0x0713, 0x0721, 0x0733, 0x0749, 0x075d, 0x0767, 0x0786, - 0x079a, 0x07a6, 0x07bc, 0x07db, 0x07fa, 0x0819, 0x0825, 0x0833, - 0x083f, 0x084d, 0x0857, 0x085f, 0x0873, 0x0883, 0x088b, 0x089b, + 0x043a, 0x0454, 0x046a, 0x0472, 0x0480, 0x048e, 0x0494, 0x04a8, + 0x04bc, 0x04ce, 0x04de, 0x04ee, 0x0502, 0x0518, 0x0524, 0x0530, + 0x0542, 0x0558, 0x056a, 0x0578, 0x058a, 0x0596, 0x05aa, 0x05ba, + 0x05c2, 0x05d6, 0x05e8, 0x05fa, 0x0614, 0x061e, 0x0638, 0x0646, + 0x0654, 0x0666, 0x067d, 0x0691, 0x06ab, 0x06c3, 0x06cd, 0x06e3, + 0x06f3, 0x0709, 0x0717, 0x0729, 0x073f, 0x0753, 0x075d, 0x077c, + 0x0790, 0x079c, 0x07b6, 0x07d7, 0x07f8, 0x0817, 0x0823, 0x0831, + 0x0847, 0x0855, 0x085f, 0x0867, 0x087b, 0x088b, 0x0893, 0x08a3, // Entry 80 - BF - 0x08a5, 0x08bf, 0x08c9, 0x08e3, 0x08ed, 0x08ff, 0x0911, 0x0927, - 0x0937, 0x094b, 0x0957, 0x0978, 0x0982, 0x0998, 0x09aa, 0x09be, - 0x09d2, 0x09da, 0x09e6, 0x09f8, 0x0a08, 0x0a16, 0x0a2f, 0x0a43, - 0x0a53, 0x0a61, 0x0a75, 0x0a81, 0x0a93, 0x0aa1, 0x0ab1, 0x0ac7, - 0x0ad3, 0x0ae7, 0x0af7, 0x0b03, 0x0b15, 0x0b29, 0x0b3b, 0x0b4f, - 0x0b57, 0x0b67, 0x0b71, 0x0b87, 0x0b97, 0x0bab, 0x0bb5, 0x0bbf, - 0x0bc7, 0x0bd3, 0x0bdd, 0x0bef, 0x0bff, 0x0c0f, 0x0c19, 0x0c27, - 0x0c3b, 0x0c3b, 0x0c4b, 0x0c53, 0x0c61, 0x0c73, 0x0c81, 0x0c93, + 0x08ad, 0x08c7, 0x08d1, 0x08eb, 0x08f5, 0x0907, 0x0919, 0x092f, + 0x093f, 0x0953, 0x095f, 0x097f, 0x0989, 0x099f, 0x09b1, 0x09c5, + 0x09d9, 0x09e1, 0x09ed, 0x09ff, 0x0a0f, 0x0a1d, 0x0a36, 0x0a4a, + 0x0a5a, 0x0a68, 0x0a7c, 0x0a88, 0x0a9a, 0x0aa8, 0x0ab8, 0x0ace, + 0x0ada, 0x0aee, 0x0afe, 0x0b0a, 0x0b1c, 0x0b30, 0x0b42, 0x0b56, + 0x0b5e, 0x0b6e, 0x0b78, 0x0b8e, 0x0b9e, 0x0bb2, 0x0bbc, 0x0bc6, + 0x0bce, 0x0bda, 0x0be4, 0x0bf6, 0x0c06, 0x0c16, 0x0c20, 0x0c2e, + 0x0c42, 0x0c42, 0x0c52, 0x0c5a, 0x0c68, 0x0c7a, 0x0c88, 0x0c9a, // Entry C0 - FF - 0x0c93, 0x0cb5, 0x0cd5, 0x0ce1, 0x0cf5, 0x0d0b, 0x0d17, 0x0d25, - 0x0d48, 0x0d48, 0x0d5c, 0x0d5c, 0x0d5c, 0x0d62, 0x0d8e, 0x0da0, - 0x0da0, 0x0dac, 0x0db8, 0x0dca, 0x0dd6, 0x0dde, 0x0de8, 0x0dfb, - 0x0e07, 0x0e11, 0x0e1b, 0x0e27, 0x0e2f, 0x0e39, 0x0e45, 0x0e69, - 0x0e7b, 0x0e8f, 0x0e97, 0x0ead, 0x0eb3, 0x0ec1, 0x0ec1, 0x0ed1, - 0x0edb, 0x0edb, 0x0ee3, 0x0eeb, 0x0efd, 0x0f0f, 0x0f17, 0x0f1f, - 0x0f2d, 0x0f37, 0x0f49, 0x0f55, 0x0f5f, 0x0f73, 0x0f7b, 0x0f85, - 0x0f9b, 0x0fab, 0x0fbd, 0x0fd4, 0x0fde, 0x0fee, 0x0ffa, 0x1006, + 0x0c9a, 0x0cbc, 0x0cdc, 0x0ce8, 0x0cfc, 0x0d12, 0x0d1e, 0x0d2c, + 0x0d4f, 0x0d4f, 0x0d63, 0x0d63, 0x0d63, 0x0d69, 0x0d95, 0x0da7, + 0x0da7, 0x0db3, 0x0dbf, 0x0dd1, 0x0ddd, 0x0de5, 0x0def, 0x0e02, + 0x0e0e, 0x0e18, 0x0e22, 0x0e2e, 0x0e36, 0x0e40, 0x0e4c, 0x0e70, + 0x0e82, 0x0e96, 0x0e9e, 0x0eb4, 0x0eba, 0x0ec8, 0x0ec8, 0x0ed8, + 0x0ee2, 0x0ee2, 0x0eea, 0x0ef2, 0x0f04, 0x0f16, 0x0f1e, 0x0f26, + 0x0f34, 0x0f3e, 0x0f50, 0x0f5c, 0x0f66, 0x0f66, 0x0f7a, 0x0f82, + 0x0f8c, 0x0fa2, 0x0fb2, 0x0fc4, 0x0fdb, 0x0fe5, 0x0ff5, 0x1001, // Entry 100 - 13F - 0x1025, 0x1035, 0x1035, 0x1057, 0x1082, 0x1094, 0x10a0, 0x10b4, - 0x10be, 0x10d4, 0x10de, 0x10f2, 0x10fc, 0x1108, 0x1112, 0x112e, - 0x112e, 0x1138, 0x1162, 0x1175, 0x117f, 0x118b, 0x1193, 0x119b, - 0x119b, 0x11bb, 0x11c9, 0x11d9, 0x11fd, 0x11fd, 0x1209, 0x1209, - 0x1211, 0x1229, 0x1229, 0x122f, 0x122f, 0x1253, 0x1273, 0x1289, - 0x12a8, 0x12c3, 0x12d7, 0x12db, 0x12ed, 0x12ed, 0x12f5, 0x12ff, - 0x12ff, 0x1307, 0x131f, 0x131f, 0x134d, 0x1377, 0x1377, 0x1381, - 0x1393, 0x13a1, 0x13ab, 0x13c5, 0x13ea, 0x13ea, 0x13ea, 0x13f4, + 0x100d, 0x1031, 0x1041, 0x1041, 0x1063, 0x108e, 0x10a0, 0x10ac, + 0x10c0, 0x10ca, 0x10e0, 0x10ea, 0x10fe, 0x1108, 0x1114, 0x111e, + 0x113a, 0x113a, 0x1144, 0x116e, 0x1181, 0x118b, 0x1197, 0x119f, + 0x11a7, 0x11a7, 0x11c7, 0x11d5, 0x11e5, 0x1209, 0x1209, 0x1215, + 0x1215, 0x121d, 0x1235, 0x1235, 0x123b, 0x1262, 0x1286, 0x12a6, + 0x12bc, 0x12db, 0x12f6, 0x130a, 0x130e, 0x1320, 0x1320, 0x1328, + 0x1332, 0x1332, 0x133a, 0x1352, 0x1352, 0x1380, 0x13aa, 0x13aa, + 0x13b4, 0x13c6, 0x13d4, 0x13de, 0x13f8, 0x141d, 0x141d, 0x141d, // Entry 140 - 17F - 0x13fe, 0x1408, 0x1408, 0x141a, 0x141a, 0x142e, 0x143a, 0x1444, - 0x1462, 0x1462, 0x146a, 0x147a, 0x1486, 0x149a, 0x14aa, 0x14aa, - 0x14aa, 0x14b6, 0x14c2, 0x14ce, 0x14e5, 0x14fe, 0x14fe, 0x1518, - 0x152c, 0x1536, 0x153a, 0x1544, 0x154c, 0x1564, 0x1572, 0x157a, - 0x1588, 0x15a0, 0x15a0, 0x15a8, 0x15a8, 0x15b2, 0x15cc, 0x15e1, - 0x15e1, 0x15e1, 0x15e9, 0x15fb, 0x160b, 0x1629, 0x1637, 0x1643, - 0x164f, 0x1676, 0x1676, 0x1676, 0x168a, 0x1696, 0x16a4, 0x16ae, - 0x16be, 0x16ce, 0x16dc, 0x16e8, 0x16f2, 0x16fc, 0x1706, 0x171a, + 0x1427, 0x1431, 0x143b, 0x143b, 0x144d, 0x144d, 0x1461, 0x146d, + 0x1477, 0x1495, 0x14b6, 0x14be, 0x14ce, 0x14da, 0x14ee, 0x14fe, + 0x14fe, 0x14fe, 0x150a, 0x1516, 0x1522, 0x1539, 0x1552, 0x1552, + 0x156c, 0x1580, 0x158a, 0x158e, 0x1598, 0x15a0, 0x15b8, 0x15c6, + 0x15ce, 0x15dc, 0x15f4, 0x15f4, 0x15fc, 0x15fc, 0x1606, 0x1620, + 0x1635, 0x1635, 0x1635, 0x163d, 0x164f, 0x165f, 0x167d, 0x168b, + 0x1697, 0x16a3, 0x16ca, 0x16ca, 0x16ca, 0x16de, 0x16ea, 0x16f8, + 0x1702, 0x1712, 0x1722, 0x1730, 0x173c, 0x1746, 0x1750, 0x175a, // Entry 180 - 1BF - 0x171a, 0x171a, 0x171a, 0x1726, 0x1726, 0x1730, 0x1738, 0x1757, - 0x1757, 0x176a, 0x177a, 0x1784, 0x178a, 0x1792, 0x179a, 0x179a, - 0x179a, 0x17ac, 0x17b4, 0x17c2, 0x17d2, 0x17e8, 0x17f8, 0x1802, - 0x180a, 0x1814, 0x1828, 0x1832, 0x183a, 0x1867, 0x188b, 0x18a2, - 0x18aa, 0x18b6, 0x18cc, 0x18e2, 0x18f2, 0x18fe, 0x1908, 0x1908, - 0x1916, 0x1929, 0x1931, 0x1945, 0x1953, 0x1953, 0x195b, 0x1963, - 0x197f, 0x197f, 0x199b, 0x19a3, 0x19bf, 0x19cb, 0x19d9, 0x19e1, - 0x19ee, 0x19fa, 0x1a08, 0x1a1a, 0x1a38, 0x1a38, 0x1a3e, 0x1a57, + 0x176e, 0x176e, 0x176e, 0x176e, 0x177a, 0x177a, 0x1784, 0x17af, + 0x17b7, 0x17d5, 0x17d5, 0x17e8, 0x17f8, 0x1802, 0x1808, 0x1810, + 0x1818, 0x1818, 0x1818, 0x182a, 0x1832, 0x1840, 0x1850, 0x1866, + 0x1876, 0x1880, 0x1888, 0x1892, 0x18a6, 0x18b0, 0x18b8, 0x18e5, + 0x1909, 0x1920, 0x1928, 0x1934, 0x194a, 0x1960, 0x1970, 0x197c, + 0x1986, 0x1986, 0x1994, 0x19a7, 0x19af, 0x19c3, 0x19d1, 0x19d1, + 0x19d9, 0x19e1, 0x19fd, 0x1a1d, 0x1a39, 0x1a41, 0x1a5d, 0x1a69, + 0x1a77, 0x1a7f, 0x1a8c, 0x1a98, 0x1aa6, 0x1ab8, 0x1ad6, 0x1ad6, // Entry 1C0 - 1FF - 0x1a5f, 0x1a7c, 0x1a8c, 0x1a9c, 0x1aa6, 0x1ab0, 0x1abc, 0x1ace, - 0x1aea, 0x1af8, 0x1b08, 0x1b1c, 0x1b32, 0x1b32, 0x1b5d, 0x1b5d, - 0x1b5d, 0x1b77, 0x1b77, 0x1b9c, 0x1b9c, 0x1b9c, 0x1ba8, 0x1bb6, - 0x1bde, 0x1be6, 0x1be6, 0x1bfc, 0x1c0a, 0x1c1c, 0x1c1c, 0x1c1c, - 0x1c26, 0x1c38, 0x1c38, 0x1c38, 0x1c38, 0x1c4c, 0x1c52, 0x1c60, - 0x1c70, 0x1c9f, 0x1cad, 0x1cbf, 0x1cd5, 0x1cd5, 0x1ce3, 0x1ced, - 0x1d03, 0x1d19, 0x1d19, 0x1d39, 0x1d45, 0x1d4d, 0x1d4d, 0x1d63, - 0x1d7e, 0x1d9e, 0x1d9e, 0x1dac, 0x1dba, 0x1ddd, 0x1de9, 0x1de9, + 0x1adc, 0x1af5, 0x1afd, 0x1b1a, 0x1b2a, 0x1b3a, 0x1b44, 0x1b4e, + 0x1b5a, 0x1b6c, 0x1b88, 0x1b96, 0x1ba6, 0x1bba, 0x1bd0, 0x1bd0, + 0x1bfb, 0x1bfb, 0x1bfb, 0x1c15, 0x1c15, 0x1c3a, 0x1c3a, 0x1c3a, + 0x1c46, 0x1c54, 0x1c7c, 0x1c84, 0x1c84, 0x1c9a, 0x1ca8, 0x1cba, + 0x1cba, 0x1cba, 0x1cc4, 0x1cd6, 0x1cd6, 0x1cd6, 0x1cd6, 0x1cea, + 0x1cf0, 0x1cfe, 0x1d0e, 0x1d3d, 0x1d4b, 0x1d5d, 0x1d73, 0x1d73, + 0x1d81, 0x1d8b, 0x1da1, 0x1db7, 0x1db7, 0x1dd7, 0x1de3, 0x1deb, + 0x1deb, 0x1e01, 0x1e1c, 0x1e3c, 0x1e3c, 0x1e4a, 0x1e58, 0x1e7b, // Entry 200 - 23F - 0x1de9, 0x1e09, 0x1e22, 0x1e3d, 0x1e5a, 0x1e68, 0x1e7c, 0x1e93, - 0x1e9d, 0x1ea5, 0x1ea5, 0x1eb1, 0x1eb9, 0x1ecb, 0x1edd, 0x1f00, - 0x1f12, 0x1f12, 0x1f12, 0x1f1c, 0x1f24, 0x1f30, 0x1f3a, 0x1f44, - 0x1f4a, 0x1f58, 0x1f58, 0x1f66, 0x1f74, 0x1f74, 0x1f82, 0x1f97, - 0x1fa8, 0x1fa8, 0x1fb4, 0x1fb4, 0x1fc2, 0x1fc2, 0x1fd0, 0x1fdc, - 0x1fea, 0x1ffc, 0x2035, 0x2049, 0x205d, 0x206b, 0x2077, 0x207d, - 0x207d, 0x207d, 0x207d, 0x207d, 0x208b, 0x208b, 0x2095, 0x20a9, - 0x20b5, 0x20bf, 0x20c7, 0x20d5, 0x20d5, 0x20e7, 0x20e7, 0x20ef, + 0x1e87, 0x1e87, 0x1e87, 0x1ea7, 0x1ec0, 0x1edb, 0x1ef8, 0x1f06, + 0x1f1a, 0x1f31, 0x1f3b, 0x1f43, 0x1f43, 0x1f4f, 0x1f57, 0x1f69, + 0x1f7b, 0x1f9e, 0x1fb0, 0x1fb0, 0x1fb0, 0x1fba, 0x1fc2, 0x1fce, + 0x1fd8, 0x1fe2, 0x1fe8, 0x1ff6, 0x1ff6, 0x200c, 0x201a, 0x201a, + 0x2028, 0x203d, 0x204e, 0x204e, 0x205a, 0x205a, 0x2068, 0x2068, + 0x2076, 0x2082, 0x2090, 0x20a2, 0x20db, 0x20ef, 0x2103, 0x2111, + 0x212a, 0x2130, 0x2130, 0x2130, 0x2130, 0x2130, 0x213e, 0x213e, + 0x2148, 0x215c, 0x216c, 0x2176, 0x217e, 0x218c, 0x21a9, 0x21bb, // Entry 240 - 27F - 0x20f3, 0x20f7, 0x2103, 0x210b, 0x210b, 0x211f, 0x2135, 0x214a, - 0x214a, 0x2156, 0x2198, 0x21a2, 0x21c8, 0x21d4, 0x2208, 0x2236, - 0x2236, 0x2269, 0x2269, 0x2269, 0x2292, 0x22bf, 0x22bf, 0x22e0, - 0x22e0, 0x22e0, 0x22e0, 0x22e0, 0x2300, 0x2316, 0x2316, 0x233f, - 0x2353, 0x2378, 0x239b, 0x23be, 0x23e5, -} // Size: 1250 bytes - -const urLangStr string = "" + // Size: 5313 bytes - "افارابقازیانایفریکانزاکانامہاریاراگونیزعربیآسامیاواریایماراآذربائیجانیبا" + - "شکیربیلاروسیبلغاریبسلامابمبارابنگالیتبتیبریٹنبوسنیکیٹالانچیچنکموروکوراس" + - "یکنچیکچرچ سلاؤچوواشویلشڈینشجرمنڈیویہیژونگکھاایویونانیانگریزیایسپرانٹوہس" + - "پانویاسٹونینباسکیفارسیفولہفینیشفجیفیروئیزفرانسیسیمغربی فریسیئنآئیرِشسکا" + - "ٹ گیلِکگالیشیائیگُارانیگجراتیمینکسہؤساعبرانیہندیکراتیہیتیہنگیرینارمینیہ" + - "ریروبین لسانیاتانڈونیثیائیاِگبوسچوان ایایڈوآئس لینڈکاطالویاینُکٹیٹٹجاپا" + - "نیجاویجارجیکانگوکیکویوکونیاماقزاخكالاليستخمیرکنّاڈاکوریائیکانوریکشمیریک" + - "ردشکومیکورنشکرغیزیلاطینیلکسمبرگیشگینڈالیمبرگشلِنگَلالاؤلیتھوینینلبا-كات" + - "انجالیٹوینملاگاسیمارشلیزماؤریمقدونیائیمالایالممنگولینمراٹهیمالےمالٹیبرم" + - "یناؤروشمالی دبیلنیپالینڈونگاڈچنورویجینی نینورسکنارویجین بوکملجنوبی نڈیب" + - "یلینواجونیانجاآكسیٹاناورومواڑیہاوسیٹکپنجابیپولشپشتوپُرتگالیکویچوآرومانش" + - "رونڈیرومینینروسیکینیاروانڈاسنسکرتسردینینسندھیشمالی سامیساںغوسنہالاسلووا" + - "کسلووینیائیساموآنشوناصومالیالبانیسربینسواتیجنوبی سوتھوسنڈانیزسویڈشسواحل" + - "یتملتیلگوتاجکتھائیٹگرینیاترکمانسواناٹونگنترکیزونگاتاتارتاہیتییوئگہریوکر" + - "ینیائیاردوازبیکوینڈاویتنامیوولاپوکوالونوولوفژوسایدشیوروباچینیزولواچائین" + - "یزاکولیادانگمےادیگھےاغماینوالیوتجنوبی الٹائیانگیکاماپوچےاراپاہوآسواسٹور" + - "یائیاوادھیبالینیزباسابیمبابینامغربی بلوچیبھوجپوریبینیسکسیکابوڈوبگینیزبل" + - "ینسیبوآنوچیگاچوکیزماریچاکٹاؤچیروکیچینّےسورانی کردشڈاکوٹادرگواتائتادوگری" + - "بزرماذیلی سربیائیدوالاجولا فونيادزاگاامبوایفِکایکاجویایوانڈوفلیپینوفونف" + - "ریولیائیگاغاغاوزganگیزگلبرتیزگورانٹالوسوئس جرمنگسیگوئچ انhakہوائیحلی گی" + - "ننہمانگاپر سربیائیhsnہیوپاایبانابی بیوایلوکوانگوشلوجباننگومباماشیمقبائل" + - "یکاچنجے جوکامباکبارڈینتیاپماكوندهكابويرديانوکوروکھاسیكويرا شينيکاکوكالي" + - "نجينکیمبونڈوکومی پرمیاککونکنیکیپیلّےکراچے بالکرکیرلینکوروکھشامبالابافيا" + - "کولوگنیائیکومیکلیڈینولانگیلیزگیانلاکوٹالوزیشمالی لریلیوبا لولوآلونڈالوم" + - "یزولویامدورسیمگاہیمیتھیلیمکاسرماسایموکشامیندےمیروموریسیینماخاوا-ميتومیٹ" + - "امکمیکمنانگکباؤمنی پوریموہاکموسیمنڈانگمتعدد زبانیںکریکمیرانڈیزارزیامزند" + - "رانیnanنیاپولیٹنناماادنی جرمننیوارینیاسنیویائیكوايسونگیمبوننوگائیاینکوش" + - "مالی سوتھونویرنینکولپنگاسنانپامپنگاپاپیامینٹوپالاوننائجیریائی پڈگنپارسی" + - "كيشیرپانویراروتونگانرومبوارومانیرواسنڈاوےساکھاسامبوروسنتالینگامبےسانگوس" + - "یسیلینسکاٹجنوبی کردسیناكويرابورو سينیتشلحيتشانجنوبی سامیلول سامیاناری س" + - "امیسکولٹ سامیسوننکےسرانن ٹونگوساہوسکوماکوموریائیسریانیٹمنےتیسوٹیٹمٹگرےک" + - "لنگنٹوک پِسِنٹوروکوٹمبوکاتووالوتاساواقتووینینسینٹرل ایٹلس ٹمازائٹادمورت" + - "اومبوندوروٹوائیونجووالسروولایتاوارےوارلپیریwuuکالمیکسوگایانگبینیمباکینٹ" + - "ونیزاسٹینڈرڈ مراقشی تمازیقیزونیکوئی لسانی مواد نہیںزازاماڈرن اسٹینڈرڈ ع" + - "ربیآزربائیجانی (عربی)آسٹریائی جرمنسوئس ہائی جرمنآسٹریلیائی انگریزیکینیڈ" + - "ین انگریزیبرطانوی انگریزیامریکی انگریزیلاطینی امریکی ہسپانوییورپی ہسپان" + - "ویمیکسیکن ہسپانویکینیڈین فرانسیسیسوئس فرینچادنی سیکسنفلیمِشبرازیلی پرتگ" + - "الییورپی پرتگالیمالدوواسربو-کروئیشینکانگو سواحلیچینی (آسان کردہ)روایتی " + - "چینی" - -var urLangIdx = []uint16{ // 613 elements + 0x21bb, 0x21c3, 0x21c7, 0x21cb, 0x21d7, 0x21df, 0x21df, 0x21f3, + 0x2209, 0x221e, 0x221e, 0x222a, 0x226c, 0x2276, 0x229c, 0x22a8, + 0x22dc, 0x230a, 0x230a, 0x233d, 0x233d, 0x233d, 0x233d, 0x235a, + 0x235a, 0x237b, 0x237b, 0x237b, 0x237b, 0x237b, 0x239b, 0x23b1, + 0x23b1, 0x23e2, 0x23f6, 0x241b, 0x2436, 0x2468, 0x249e, +} // Size: 1254 bytes + +const urLangStr string = "" + // Size: 5431 bytes + "افارابقازیانافریقیاکانامہاریاراگونیزعربیآسامیاواریایماراآذربائیجانیباشکی" + + "ربیلاروسیبلغاریبسلامابمبارابنگالیتبتیبریٹنبوسنیکیٹالانچیچنچیماروکوراسیک" + + "نچیکچرچ سلاوکچوواشویلشڈینشجرمنڈیویہیژونگکھاایویونانیانگریزیایسپرانٹوہسپ" + + "انویاسٹونینباسکیفارسیفولہفینیشفجیفیروئیزفرانسیسیمغربی فریسیئنآئیرِشسکاٹ" + + "ش گیلکگالیشیائیگُارانیگجراتیمینکسہؤساعبرانیہندیکراتیہیتیہنگیرینآرمینیائ" + + "یہریروبین لسانیاتانڈونیثیائیاِگبوسچوان ایایڈوآئس لینڈکاطالویاینُکٹیٹٹجا" + + "پانیجاویجارجیائیکانگوکیکویوکونیاماقزاخكالاليستخمیرکنّاڈاکوریائیکنوریکشم" + + "یریکردشکومیکورنشکرغیزیلاطینیلکسمبرگیشگینڈالیمبرگشلِنگَلالاؤلیتھوینینلبا" + + "-كاتانجالیٹوینملاگاسیمارشلیزماؤریمقدونیائیمالایالممنگولینمراٹهیمالےمالٹی" + + "برمیناؤروشمالی دبیلنیپالینڈونگاڈچنارویجین نینورسکنارویجین بوکملجنوبی نڈ" + + "یبیلینواجونیانجاآكسیٹاناورومواڑیہاوسیٹکپنجابیپولشپشتوپُرتگالیکویچوآروما" + + "نشرونڈیرومینینروسیکینیاروانڈاسنسکرتسردینینسندھیشمالی سامیساںغوسنہالاسلو" + + "واکسلووینیائیساموآنشوناصومالیالبانیسربینسواتیجنوبی سوتھوسنڈانیزسویڈشسوا" + + "حلیتملتیلگوتاجکتھائیٹگرینیاترکمانسواناٹونگنترکیزونگاتاتارتاہیتییوئگہریو" + + "کرینیائیاردوازبیکوینڈاویتنامیوولاپوکوالونوولوفژوسایدشیوروباچینیزولواچائ" + + "ینیزاکولیادانگمےادیگھےاغماینوالیوتجنوبی الٹائیانگیکاماپوچےاراپاہوآسواسٹ" + + "وریائیاوادھیبالینیزباسابیمبابینامغربی بلوچیبھوجپوریبینیسکسیکابوڈوبگینیز" + + "بلینسیبوآنوچیگاچوکیزماریچاکٹاؤچیروکیچینّےسینٹرل کردشسیسلوا کریولے فرانس" + + "یسیڈاکوٹادرگواتائتادوگریبزرماذیلی سربیائیدوالاجولا فونيادزاگاامبوایفِکا" + + "یکاجویایوانڈوفلیپینوفونکاجن فرانسیسیفریولیائیگاغاغاوزganگیزگلبرتیزگوران" + + "ٹالوسوئس جرمنگسیگوئچ انhakہوائیہالیگینونہمانگاپر سربیائیhsnہیوپاایباناب" + + "ی بیوایلوکوانگوشلوجباننگومباماشیمقبائلیکاچنجے جوکامباکبارڈینتیاپماكونده" + + "كابويرديانوکوروکھاسیكويرا شينيکاکوكالينجينکیمبونڈوکومی پرمیاککونکنیکیپی" + + "لّےکراچے بالکرکیرلینکوروکھشامبالابافياکولوگنیائیکومیکلیڈینولانگیلیزگیان" + + "لاکوٹالوزیانا کریوللوزیشمالی لریلیوبا لولوآلونڈالومیزولویامدورسیمگاہیمی" + + "تھیلیمکاسرمسائیموکشامیندےمیروموریسیینماخاوا-ميتومیٹامکمیکمنانگکباؤمنی پ" + + "وریموہاکموسیمنڈانگمتعدد زبانیںکریکمیرانڈیزارزیامزندرانیnanنیاپولیٹنناما" + + "ادنی جرمننیوارینیاسنیویائیكوايسونگیمبوننوگائیاینکوشمالی سوتھونویرنینکول" + + "پنگاسنانپامپنگاپاپیامینٹوپالاوننائجیریائی پڈگنپارسیكيشیرپانویراروتونگان" + + "رومبوارومانیرواسنڈاوےساکھاسامبوروسنتالینگامبےسانگوسیسیلینسکاٹجنوبی کردس" + + "یناكويرابورو سينیتشلحيتشانجنوبی سامیلول سامیاناری سامیسکولٹ سامیسوننکےس" + + "رانن ٹونگوساہوسکوماکوموریائیسریانیٹمنےتیسوٹیٹمٹگرےکلنگنٹوک پِسِنٹوروکوٹ" + + "مبوکاتووالوتاساواقتووینینسینٹرل ایٹلس ٹمازائٹادمورتاومبوندونامعلوم زبان" + + "وائیونجووالسروولایتاوارےوارلپیریwuuکالمیکسوگایانگبینیمباکینٹونیزاسٹینڈر" + + "ڈ مراقشی تمازیقیزونیکوئی لسانی مواد نہیںزازاماڈرن اسٹینڈرڈ عربیآزربائیج" + + "انی (عربی)آسٹریائی جرمنسوئس ہائی جرمنآسٹریلیائی انگریزیکینیڈین انگریزیب" + + "رطانوی انگریزیامریکی انگریزیلاطینی امریکی ہسپانوییورپی ہسپانویمیکسیکن ہ" + + "سپانویکینیڈین فرانسیسیسوئس فرینچادنی سیکسنفلیمِشبرازیلی پرتگالییورپی پر" + + "تگالیمالدوواسربو-کروئیشینکانگو سواحلیچینی (آسان کردہ)روایتی چینی" + +var urLangIdx = []uint16{ // 615 elements // Entry 0 - 3F - 0x0000, 0x0008, 0x0018, 0x0018, 0x002a, 0x0032, 0x003e, 0x004e, - 0x0056, 0x0060, 0x006a, 0x0076, 0x008c, 0x0098, 0x00a8, 0x00b4, - 0x00c0, 0x00cc, 0x00d8, 0x00e0, 0x00ea, 0x00f4, 0x0102, 0x010a, - 0x0114, 0x0124, 0x0124, 0x012a, 0x0139, 0x0143, 0x014b, 0x0153, - 0x015b, 0x0167, 0x0175, 0x017b, 0x0187, 0x0195, 0x01a7, 0x01b5, - 0x01c3, 0x01cd, 0x01d7, 0x01df, 0x01e9, 0x01ef, 0x01fd, 0x020d, - 0x0226, 0x0232, 0x0245, 0x0257, 0x0265, 0x0271, 0x027b, 0x0283, - 0x028f, 0x0297, 0x0297, 0x02a1, 0x02a9, 0x02b7, 0x02c3, 0x02cd, + 0x0000, 0x0008, 0x0018, 0x0018, 0x0024, 0x002c, 0x0038, 0x0048, + 0x0050, 0x005a, 0x0064, 0x0070, 0x0086, 0x0092, 0x00a2, 0x00ae, + 0x00ba, 0x00c6, 0x00d2, 0x00da, 0x00e4, 0x00ee, 0x00fc, 0x0104, + 0x0110, 0x0120, 0x0120, 0x0126, 0x0137, 0x0141, 0x0149, 0x0151, + 0x0159, 0x0165, 0x0173, 0x0179, 0x0185, 0x0193, 0x01a5, 0x01b3, + 0x01c1, 0x01cb, 0x01d5, 0x01dd, 0x01e7, 0x01ed, 0x01fb, 0x020b, + 0x0224, 0x0230, 0x0243, 0x0255, 0x0263, 0x026f, 0x0279, 0x0281, + 0x028d, 0x0295, 0x0295, 0x029f, 0x02a7, 0x02b5, 0x02c7, 0x02d1, // Entry 40 - 7F - 0x02e2, 0x02f8, 0x02f8, 0x0302, 0x0311, 0x0311, 0x0319, 0x032a, - 0x0336, 0x0348, 0x0354, 0x035c, 0x0366, 0x0370, 0x037c, 0x038a, - 0x0392, 0x03a2, 0x03aa, 0x03b6, 0x03c4, 0x03d0, 0x03dc, 0x03e4, - 0x03ec, 0x03f6, 0x0402, 0x040e, 0x0420, 0x042a, 0x0438, 0x0446, - 0x044c, 0x045e, 0x0473, 0x047f, 0x048d, 0x049b, 0x04a5, 0x04b7, - 0x04c7, 0x04d5, 0x04e1, 0x04e9, 0x04f3, 0x04fb, 0x0505, 0x0518, - 0x0524, 0x0530, 0x0534, 0x0555, 0x0570, 0x0589, 0x0593, 0x059f, - 0x05ad, 0x05ad, 0x05b9, 0x05c1, 0x05cd, 0x05d9, 0x05d9, 0x05e1, + 0x02e6, 0x02fc, 0x02fc, 0x0306, 0x0315, 0x0315, 0x031d, 0x032e, + 0x033a, 0x034c, 0x0358, 0x0360, 0x0370, 0x037a, 0x0386, 0x0394, + 0x039c, 0x03ac, 0x03b4, 0x03c0, 0x03ce, 0x03d8, 0x03e4, 0x03ec, + 0x03f4, 0x03fe, 0x040a, 0x0416, 0x0428, 0x0432, 0x0440, 0x044e, + 0x0454, 0x0466, 0x047b, 0x0487, 0x0495, 0x04a3, 0x04ad, 0x04bf, + 0x04cf, 0x04dd, 0x04e9, 0x04f1, 0x04fb, 0x0503, 0x050d, 0x0520, + 0x052c, 0x0538, 0x053c, 0x055b, 0x0576, 0x058f, 0x0599, 0x05a5, + 0x05b3, 0x05b3, 0x05bf, 0x05c7, 0x05d3, 0x05df, 0x05df, 0x05e7, // Entry 80 - BF - 0x05e9, 0x05f9, 0x0605, 0x0611, 0x061b, 0x0629, 0x0631, 0x0647, - 0x0653, 0x0661, 0x066b, 0x067e, 0x0688, 0x0694, 0x06a0, 0x06b4, - 0x06c0, 0x06c8, 0x06d4, 0x06e0, 0x06ea, 0x06f4, 0x0709, 0x0717, - 0x0721, 0x072d, 0x0733, 0x073d, 0x0745, 0x074f, 0x075d, 0x0769, - 0x0773, 0x077d, 0x0785, 0x078f, 0x0799, 0x07a5, 0x07b1, 0x07c5, - 0x07cd, 0x07d7, 0x07e1, 0x07ef, 0x07fd, 0x0807, 0x0811, 0x0819, - 0x081f, 0x082b, 0x082b, 0x0833, 0x083b, 0x084b, 0x0855, 0x0863, - 0x086f, 0x086f, 0x086f, 0x0875, 0x087d, 0x087d, 0x087d, 0x0887, + 0x05ef, 0x05ff, 0x060b, 0x0617, 0x0621, 0x062f, 0x0637, 0x064d, + 0x0659, 0x0667, 0x0671, 0x0684, 0x068e, 0x069a, 0x06a6, 0x06ba, + 0x06c6, 0x06ce, 0x06da, 0x06e6, 0x06f0, 0x06fa, 0x070f, 0x071d, + 0x0727, 0x0733, 0x0739, 0x0743, 0x074b, 0x0755, 0x0763, 0x076f, + 0x0779, 0x0783, 0x078b, 0x0795, 0x079f, 0x07ab, 0x07b7, 0x07cb, + 0x07d3, 0x07dd, 0x07e7, 0x07f5, 0x0803, 0x080d, 0x0817, 0x081f, + 0x0825, 0x0831, 0x0831, 0x0839, 0x0841, 0x0851, 0x085b, 0x0869, + 0x0875, 0x0875, 0x0875, 0x087b, 0x0883, 0x0883, 0x0883, 0x088d, // Entry C0 - FF - 0x0887, 0x089e, 0x089e, 0x08aa, 0x08aa, 0x08b6, 0x08b6, 0x08c4, - 0x08c4, 0x08c4, 0x08c4, 0x08c4, 0x08c4, 0x08ca, 0x08ca, 0x08dc, - 0x08dc, 0x08e8, 0x08e8, 0x08f6, 0x08f6, 0x08fe, 0x08fe, 0x08fe, - 0x08fe, 0x08fe, 0x0908, 0x0908, 0x0910, 0x0910, 0x0910, 0x0925, - 0x0935, 0x0935, 0x093d, 0x093d, 0x093d, 0x0949, 0x0949, 0x0949, - 0x0949, 0x0949, 0x0951, 0x0951, 0x0951, 0x095d, 0x095d, 0x0965, - 0x0965, 0x0965, 0x0965, 0x0965, 0x0965, 0x0973, 0x097b, 0x097b, - 0x097b, 0x0985, 0x098d, 0x098d, 0x0999, 0x0999, 0x09a5, 0x09af, + 0x088d, 0x08a4, 0x08a4, 0x08b0, 0x08b0, 0x08bc, 0x08bc, 0x08ca, + 0x08ca, 0x08ca, 0x08ca, 0x08ca, 0x08ca, 0x08d0, 0x08d0, 0x08e2, + 0x08e2, 0x08ee, 0x08ee, 0x08fc, 0x08fc, 0x0904, 0x0904, 0x0904, + 0x0904, 0x0904, 0x090e, 0x090e, 0x0916, 0x0916, 0x0916, 0x092b, + 0x093b, 0x093b, 0x0943, 0x0943, 0x0943, 0x094f, 0x094f, 0x094f, + 0x094f, 0x094f, 0x0957, 0x0957, 0x0957, 0x0963, 0x0963, 0x096b, + 0x096b, 0x096b, 0x096b, 0x096b, 0x096b, 0x096b, 0x0979, 0x0981, + 0x0981, 0x0981, 0x098b, 0x0993, 0x0993, 0x099f, 0x099f, 0x09ab, // Entry 100 - 13F - 0x09c4, 0x09c4, 0x09c4, 0x09c4, 0x09c4, 0x09c4, 0x09d0, 0x09da, - 0x09e4, 0x09e4, 0x09e4, 0x09f0, 0x09f0, 0x09f8, 0x09f8, 0x0a0f, - 0x0a0f, 0x0a19, 0x0a19, 0x0a2c, 0x0a2c, 0x0a36, 0x0a3e, 0x0a48, - 0x0a48, 0x0a48, 0x0a56, 0x0a56, 0x0a56, 0x0a56, 0x0a64, 0x0a64, - 0x0a64, 0x0a72, 0x0a72, 0x0a78, 0x0a78, 0x0a78, 0x0a78, 0x0a78, - 0x0a78, 0x0a78, 0x0a8a, 0x0a8e, 0x0a9a, 0x0a9d, 0x0a9d, 0x0a9d, - 0x0a9d, 0x0aa3, 0x0ab1, 0x0ab1, 0x0ab1, 0x0ab1, 0x0ab1, 0x0ab1, - 0x0ac3, 0x0ac3, 0x0ac3, 0x0ac3, 0x0ad4, 0x0ad4, 0x0ad4, 0x0ada, + 0x09b5, 0x09ca, 0x09ca, 0x09ca, 0x09ca, 0x09f4, 0x09f4, 0x0a00, + 0x0a0a, 0x0a14, 0x0a14, 0x0a14, 0x0a20, 0x0a20, 0x0a28, 0x0a28, + 0x0a3f, 0x0a3f, 0x0a49, 0x0a49, 0x0a5c, 0x0a5c, 0x0a66, 0x0a6e, + 0x0a78, 0x0a78, 0x0a78, 0x0a86, 0x0a86, 0x0a86, 0x0a86, 0x0a94, + 0x0a94, 0x0a94, 0x0aa2, 0x0aa2, 0x0aa8, 0x0ac1, 0x0ac1, 0x0ac1, + 0x0ac1, 0x0ac1, 0x0ac1, 0x0ad3, 0x0ad7, 0x0ae3, 0x0ae6, 0x0ae6, + 0x0ae6, 0x0ae6, 0x0aec, 0x0afa, 0x0afa, 0x0afa, 0x0afa, 0x0afa, + 0x0afa, 0x0b0c, 0x0b0c, 0x0b0c, 0x0b0c, 0x0b1d, 0x0b1d, 0x0b1d, // Entry 140 - 17F - 0x0ae7, 0x0ae7, 0x0aea, 0x0af4, 0x0af4, 0x0b03, 0x0b03, 0x0b0d, - 0x0b22, 0x0b25, 0x0b2f, 0x0b39, 0x0b46, 0x0b52, 0x0b5c, 0x0b5c, - 0x0b5c, 0x0b68, 0x0b74, 0x0b7e, 0x0b7e, 0x0b7e, 0x0b7e, 0x0b7e, - 0x0b8a, 0x0b92, 0x0b9b, 0x0ba5, 0x0ba5, 0x0bb3, 0x0bb3, 0x0bbb, - 0x0bc9, 0x0bdf, 0x0bdf, 0x0be7, 0x0be7, 0x0bf1, 0x0bf1, 0x0c04, - 0x0c04, 0x0c04, 0x0c0c, 0x0c1c, 0x0c2c, 0x0c41, 0x0c4d, 0x0c4d, - 0x0c5b, 0x0c70, 0x0c70, 0x0c70, 0x0c7c, 0x0c88, 0x0c96, 0x0ca0, - 0x0cb4, 0x0cbe, 0x0cbe, 0x0cca, 0x0cd4, 0x0cd4, 0x0cd4, 0x0ce2, + 0x0b23, 0x0b30, 0x0b30, 0x0b33, 0x0b3d, 0x0b3d, 0x0b4f, 0x0b4f, + 0x0b59, 0x0b6e, 0x0b71, 0x0b7b, 0x0b85, 0x0b92, 0x0b9e, 0x0ba8, + 0x0ba8, 0x0ba8, 0x0bb4, 0x0bc0, 0x0bca, 0x0bca, 0x0bca, 0x0bca, + 0x0bca, 0x0bd6, 0x0bde, 0x0be7, 0x0bf1, 0x0bf1, 0x0bff, 0x0bff, + 0x0c07, 0x0c15, 0x0c2b, 0x0c2b, 0x0c33, 0x0c33, 0x0c3d, 0x0c3d, + 0x0c50, 0x0c50, 0x0c50, 0x0c58, 0x0c68, 0x0c78, 0x0c8d, 0x0c99, + 0x0c99, 0x0ca7, 0x0cbc, 0x0cbc, 0x0cbc, 0x0cc8, 0x0cd4, 0x0ce2, + 0x0cec, 0x0d00, 0x0d0a, 0x0d0a, 0x0d16, 0x0d20, 0x0d20, 0x0d20, // Entry 180 - 1BF - 0x0ce2, 0x0ce2, 0x0ce2, 0x0cee, 0x0cee, 0x0cee, 0x0cf6, 0x0d07, - 0x0d07, 0x0d1c, 0x0d1c, 0x0d26, 0x0d2a, 0x0d32, 0x0d3a, 0x0d3a, - 0x0d3a, 0x0d46, 0x0d46, 0x0d50, 0x0d5e, 0x0d68, 0x0d68, 0x0d72, - 0x0d72, 0x0d7c, 0x0d7c, 0x0d86, 0x0d8e, 0x0d9e, 0x0d9e, 0x0db3, - 0x0dbb, 0x0dc5, 0x0dd7, 0x0dd7, 0x0de6, 0x0df0, 0x0df8, 0x0df8, - 0x0e04, 0x0e1b, 0x0e23, 0x0e33, 0x0e33, 0x0e33, 0x0e33, 0x0e3d, - 0x0e4d, 0x0e50, 0x0e62, 0x0e6a, 0x0e7b, 0x0e87, 0x0e8f, 0x0e9d, - 0x0e9d, 0x0ea9, 0x0eb7, 0x0ec3, 0x0ec3, 0x0ec3, 0x0ecd, 0x0ee2, + 0x0d2e, 0x0d2e, 0x0d2e, 0x0d2e, 0x0d3a, 0x0d3a, 0x0d3a, 0x0d53, + 0x0d5b, 0x0d6c, 0x0d6c, 0x0d81, 0x0d81, 0x0d8b, 0x0d8f, 0x0d97, + 0x0d9f, 0x0d9f, 0x0d9f, 0x0dab, 0x0dab, 0x0db5, 0x0dc3, 0x0dcd, + 0x0dcd, 0x0dd7, 0x0dd7, 0x0de1, 0x0de1, 0x0deb, 0x0df3, 0x0e03, + 0x0e03, 0x0e18, 0x0e20, 0x0e2a, 0x0e3c, 0x0e3c, 0x0e4b, 0x0e55, + 0x0e5d, 0x0e5d, 0x0e69, 0x0e80, 0x0e88, 0x0e98, 0x0e98, 0x0e98, + 0x0e98, 0x0ea2, 0x0eb2, 0x0eb5, 0x0ec7, 0x0ecf, 0x0ee0, 0x0eec, + 0x0ef4, 0x0f02, 0x0f02, 0x0f0e, 0x0f1c, 0x0f28, 0x0f28, 0x0f28, // Entry 1C0 - 1FF - 0x0eea, 0x0eea, 0x0eea, 0x0ef6, 0x0ef6, 0x0ef6, 0x0ef6, 0x0ef6, - 0x0f06, 0x0f06, 0x0f14, 0x0f28, 0x0f34, 0x0f34, 0x0f51, 0x0f51, - 0x0f51, 0x0f51, 0x0f51, 0x0f51, 0x0f51, 0x0f51, 0x0f51, 0x0f5b, - 0x0f5b, 0x0f63, 0x0f63, 0x0f63, 0x0f6f, 0x0f83, 0x0f83, 0x0f83, - 0x0f8d, 0x0f8d, 0x0f8d, 0x0f8d, 0x0f8d, 0x0f9b, 0x0fa1, 0x0fad, - 0x0fb7, 0x0fb7, 0x0fc5, 0x0fc5, 0x0fd1, 0x0fd1, 0x0fdd, 0x0fe7, - 0x0ff5, 0x0ffd, 0x0ffd, 0x100e, 0x100e, 0x1016, 0x1016, 0x1016, - 0x1031, 0x1031, 0x1031, 0x103d, 0x1043, 0x1043, 0x1043, 0x1043, + 0x0f32, 0x0f47, 0x0f4f, 0x0f4f, 0x0f4f, 0x0f5b, 0x0f5b, 0x0f5b, + 0x0f5b, 0x0f5b, 0x0f6b, 0x0f6b, 0x0f79, 0x0f8d, 0x0f99, 0x0f99, + 0x0fb6, 0x0fb6, 0x0fb6, 0x0fb6, 0x0fb6, 0x0fb6, 0x0fb6, 0x0fb6, + 0x0fb6, 0x0fc0, 0x0fc0, 0x0fc8, 0x0fc8, 0x0fc8, 0x0fd4, 0x0fe8, + 0x0fe8, 0x0fe8, 0x0ff2, 0x0ff2, 0x0ff2, 0x0ff2, 0x0ff2, 0x1000, + 0x1006, 0x1012, 0x101c, 0x101c, 0x102a, 0x102a, 0x1036, 0x1036, + 0x1042, 0x104c, 0x105a, 0x1062, 0x1062, 0x1073, 0x1073, 0x107b, + 0x107b, 0x107b, 0x1096, 0x1096, 0x1096, 0x10a2, 0x10a8, 0x10a8, // Entry 200 - 23F - 0x1043, 0x1056, 0x1065, 0x1078, 0x108b, 0x1097, 0x1097, 0x10ac, - 0x10ac, 0x10b4, 0x10b4, 0x10be, 0x10be, 0x10be, 0x10d0, 0x10d0, - 0x10dc, 0x10dc, 0x10dc, 0x10e4, 0x10ec, 0x10ec, 0x10f4, 0x10fc, - 0x10fc, 0x10fc, 0x10fc, 0x1106, 0x1106, 0x1106, 0x1106, 0x1106, - 0x1117, 0x1117, 0x1123, 0x1123, 0x1123, 0x1123, 0x112f, 0x113b, - 0x1149, 0x1157, 0x117d, 0x1189, 0x1189, 0x1199, 0x119f, 0x11a7, - 0x11a7, 0x11a7, 0x11a7, 0x11a7, 0x11a7, 0x11a7, 0x11af, 0x11b9, - 0x11c7, 0x11cf, 0x11cf, 0x11df, 0x11e2, 0x11ee, 0x11ee, 0x11f6, + 0x10a8, 0x10a8, 0x10a8, 0x10bb, 0x10ca, 0x10dd, 0x10f0, 0x10fc, + 0x10fc, 0x1111, 0x1111, 0x1119, 0x1119, 0x1123, 0x1123, 0x1123, + 0x1135, 0x1135, 0x1141, 0x1141, 0x1141, 0x1149, 0x1151, 0x1151, + 0x1159, 0x1161, 0x1161, 0x1161, 0x1161, 0x116b, 0x116b, 0x116b, + 0x116b, 0x116b, 0x117c, 0x117c, 0x1188, 0x1188, 0x1188, 0x1188, + 0x1194, 0x11a0, 0x11ae, 0x11bc, 0x11e2, 0x11ee, 0x11ee, 0x11fe, + 0x1215, 0x121d, 0x121d, 0x121d, 0x121d, 0x121d, 0x121d, 0x121d, + 0x1225, 0x122f, 0x123d, 0x1245, 0x1245, 0x1255, 0x1258, 0x1264, // Entry 240 - 27F - 0x11f6, 0x11f6, 0x1204, 0x120c, 0x120c, 0x121c, 0x121c, 0x121c, - 0x121c, 0x121c, 0x1248, 0x1250, 0x1275, 0x127d, 0x12a1, 0x12c2, - 0x12db, 0x12f5, 0x1318, 0x1335, 0x1352, 0x136d, 0x1395, 0x13ae, - 0x13cb, 0x13cb, 0x13ea, 0x13fd, 0x1410, 0x141c, 0x1439, 0x1452, - 0x1460, 0x1479, 0x1490, 0x14ac, 0x14c1, -} // Size: 1250 bytes - -const uzLangStr string = "" + // Size: 2777 bytes - "abxazafrikaansakanamxararagonarabassamavaraymaraozarbayjonboshqirdbelaru" + - "sbolgarbislamabambarabengaltibetbretonbosniykatalanchechenchamorrokorsik" + - "anchexslavyan (cherkov)chuvashvalliydatnemischadzongkaevegrekinglizchaes" + - "perantoispanchaestonchabaskforsfinchafijifarerchafransuzchag‘arbiy frizi" + - "rlandgalisiyguaranigujarotmenxausaibroniyhindxorvatgaityanvengerarmanger" + - "erointerlingvaindonezigbosichuanidoislanditalyaninuktitutyaponyavangruzi" + - "nchakikuyukvanyamaqozoqchagrenlandxmerchakannadakoreyschakanurikashmirch" + - "akurdchakomikornqirgʻizchalotinchalyuksemburgchagandalimburglingalalaosl" + - "itvaluba-katangalatishchamalagasiymarshallmaorimakedonmalayalammo‘g‘ulma" + - "ratximalaymaltiybirmannaurushimoliy ndebelenepalndongagollandnorveg-nyun" + - "orsknorveg-bokmalnavaxooromooriyaosetinpanjobchapolyakchapushtuportugalc" + - "hakechuaromanshrundirumincharuschakinyaruandasanskritsardinsindxishimoli" + - "y saamsangosingalslovakchaslovenchasamoashonasomalichaalbanserbchajanubi" + - "y sotosundanshvedsuaxilitamiltelugutojiktaytigrinyaturkmantsvanatongantu" + - "rktsongatatartaitiuyg‘urukrainurduo‘zbekvendavyetnamvolapyukvallonvolofk" + - "xosaidishyorubaxitoyzuluachinadangmeadigeyagemaynualeutjanubiy oltoyangi" + - "kaaraukanarapaxoasuasturiyavadxibembabenag‘arbiy balujbxojpuribinisiksik" + - "abodobugichigachukotchoktavcherokicheyennsorani-kurdkreol (Seyshel)dakot" + - "adargvataitadogribzarmaquyi sorbchadualadiola-fogniembuefikekajukfilipin" + - "chafongagagauzgangeezgilbertgorontalonemis (Shveytsariya)gusiigvichinhak" + - "gavaychaxmongyuqori sorbhsnxupaibanibibioilokoingushlojbanngombamachamek" + - "abilkachinkajikambakabardintyapmakondekabuverdianukorokxasikoyra-chiinik" + - "akokalenjinkimbundukomi-permyakkonkankpelleqorachoy-bolqorkarelkuruxsham" + - "balabafiyakyolnqo‘miqladinolangilezginlakotalozishimoliy luriluba-lulual" + - "undaluolushayluhyamadurmagahimaythilimakasarmasaymokshamendemerumorisyen" + - "maxuva-mittometamikmakminangkabaumohaukmossimundangbir nechta tilkrikmir" + - "andaerzyamozandaronnanneapolitannamaquyi nemisnevarniaskvasiongiyembunno" + - "‘g‘aynkoshimoliy sotonuernyankolepangasinanpampangapalaukreol (Nigeriy" + - "a)prusskicherapanuirarotonganromboaruminruandasandavesaxasamburungambays" + - "angusitsiliyashotlandjanubiy kurdsenakoyraboro-sennitashelxitshanjanubiy" + - " saamlule-saaminari-saamskolt-saamsoninkesranan-tongosukumaqamartimnetes" + - "otetumtigreklingontok-piksintarokotumbukatuvalutasavaktuvamarkaziy atlas" + - " tamazigxtudmurtumbundutub aholi tilivaivunjovarayvalbiriwuuqalmoqsogaya" + - "ngbenyembakantontamazigxtzunitil tarkibi yo‘qzazastandart arabnemis (Avs" + - "triya)yuqori nemis (Shveytsariya)ingliz (Avstraliya)ingliz (Kanada)ingli" + - "z (Britaniya)ingliz (Amerika)ispan (Lotin Amerikasi)ispan (Yevropa)ispan" + - " (Meksika)fransuz (Kanada)fransuz (Shveytsariya)quyi saksonflamandportug" + - "al (Braziliya)portugal (Yevropa)moldovansuaxili (Kongo)xitoy (soddalashg" + - "an)xitoy (an’anaviy)" - -var uzLangIdx = []uint16{ // 613 elements + 0x1264, 0x126c, 0x126c, 0x126c, 0x127a, 0x1282, 0x1282, 0x1292, + 0x1292, 0x1292, 0x1292, 0x1292, 0x12be, 0x12c6, 0x12eb, 0x12f3, + 0x1317, 0x1338, 0x1351, 0x136b, 0x138e, 0x13ab, 0x13c8, 0x13e3, + 0x140b, 0x1424, 0x1441, 0x1441, 0x1460, 0x1473, 0x1486, 0x1492, + 0x14af, 0x14c8, 0x14d6, 0x14ef, 0x1506, 0x1522, 0x1537, +} // Size: 1254 bytes + +const uzLangStr string = "" + // Size: 2929 bytes + "afarabxazafrikaansakanamxararagonarabassamavaraymaraozarbayjonboshqirdbe" + + "larusbolgarbislamabambarabengaltibetbretonbosniykatalanchechenchamorroko" + + "rsikanchexslavyan (cherkov)chuvashvalliydannemischadivexidzongkaevegreki" + + "nglizchaesperantoispanchaestonchabaskforsfulafinchafijifarerchafransuzch" + + "ag‘arbiy frizirlandshotland-gelgalisiyguaranigujarotmenxausaivrithindxor" + + "vatgaityanvengerarmangererointerlingvaindonezigbosichuanidoislanditalyan" + + "inuktitutyaponyavangruzinchakikuyukvanyamaqozoqchagrenlandxmerkannadakor" + + "eyschakanurikashmirchakurdchakomikornqirgʻizchalotinchalyuksemburgchagan" + + "dalimburglingalalaoslitvaluba-katangalatishchamalagasiymarshallmaorimake" + + "donmalayalammo‘g‘ulmaratximalaymaltiybirmannaurushimoliy ndebelenepalndo" + + "ngagollandnorveg-nyunorsknorveg-bokmaljanubiy ndebelnavaxochevaoksitanor" + + "omooriyaosetinpanjobchapolyakchapushtuportugalchakechuaromanshrundirumin" + + "charuschakinyaruandasanskritsardinsindxishimoliy saamsangosingalslovakch" + + "aslovenchasamoashonasomalichaalbanserbchasvatijanubiy sotosundanshvedsua" + + "xilitamiltelugutojiktaytigrinyaturkmantsvanatonganturktsongatatartaitiuy" + + "g‘urukrainurduo‘zbekvendavyetnamvolapyukvallonvolofkxosaidishyorubaxitoy" + + "zuluachinadangmeadigeyagemaynualeutjanubiy oltoyangikamapuchearapaxoasua" + + "sturiyavadxibalibasabembabenag‘arbiy balujbxojpuribinisiksikabodobugibli" + + "nsebuanchigachukotmarichoktavcherokicheyennsorani-kurdkreol (Seyshel)dak" + + "otadargvataitadogribzarmaquyi sorbchadualadiola-fognidazagembuefikekajuk" + + "evondofilipinchafonfriulgagagauzgangeezgilbertgorontalonemis (Shveytsari" + + "ya)gusiigvichinhakgavaychahiligaynonxmongyuqori sorbhsnxupaibanibibioilo" + + "koingushlojbanngombamachamekabilkachinkajikambakabardintyapmakondekabuve" + + "rdianukorokxasikoyra-chiinikakokalenjinkimbundukomi-permyakkonkankpelleq" + + "orachoy-bolqorkarelkuruxshambalabafiyakyolnqo‘miqladinolangilezginlakota" + + "lozishimoliy luriluba-lulualundaluolushayluhyamadurmagahimaythilimakasar" + + "masaymokshamendemerumorisyenmaxuva-mittometamikmakminangkabaumanipurmoha" + + "ukmossimundangbir nechta tilkrikmirandaerzyamozandaronnanneapolitannamaq" + + "uyi nemisnevarniasniuekvasiongiyembunno‘g‘aynkoshimoliy sotonuernyankole" + + "pangasinanpampangapapiyamentopalaukreol (Nigeriya)prusskicherapanuirarot" + + "onganromboaruminruandasandavesaxasamburusantalngambaysangusitsiliyashotl" + + "andjanubiy kurdsenakoyraboro-sennitashelxitshanjanubiy saamlule-saaminar" + + "i-saamskolt-saamsoninkesranan-tongosahosukumaqamarsuriyachatimnetesotetu" + + "mtigreklingontok-piksintarokotumbukatuvalutasavaktuvamarkaziy atlas tama" + + "zigxtudmurtumbundunoma’lum tilvaivunjovalisvolamovarayvalbiriwuuqalmoqso" + + "gayangbenyembakantontamazigxtzunitil tarkibi yo‘qzazastandart arabnemis " + + "(Avstriya)yuqori nemis (Shveytsariya)ingliz (Avstraliya)ingliz (Kanada)i" + + "ngliz (Britaniya)ingliz (Amerika)ispan (Lotin Amerikasi)ispan (Yevropa)i" + + "span (Meksika)fransuz (Kanada)fransuz (Shveytsariya)quyi saksonflamandpo" + + "rtugal (Braziliya)portugal (Yevropa)moldovansuaxili (Kongo)xitoy (soddal" + + "ashgan)xitoy (an’anaviy)" + +var uzLangIdx = []uint16{ // 615 elements // Entry 0 - 3F - 0x0000, 0x0000, 0x0005, 0x0005, 0x000e, 0x0012, 0x0017, 0x001d, - 0x0021, 0x0026, 0x002a, 0x0030, 0x003a, 0x0042, 0x0049, 0x004f, - 0x0056, 0x005d, 0x0063, 0x0068, 0x006e, 0x0074, 0x007b, 0x0082, - 0x008a, 0x0092, 0x0092, 0x0096, 0x00a7, 0x00ae, 0x00b4, 0x00b7, - 0x00bf, 0x00bf, 0x00c6, 0x00c9, 0x00cd, 0x00d6, 0x00df, 0x00e7, - 0x00ef, 0x00f3, 0x00f7, 0x00f7, 0x00fd, 0x0101, 0x0109, 0x0113, - 0x0121, 0x0127, 0x0127, 0x012e, 0x0135, 0x013c, 0x013f, 0x0144, - 0x014b, 0x014f, 0x014f, 0x0155, 0x015c, 0x0162, 0x0167, 0x016d, + 0x0000, 0x0004, 0x0009, 0x0009, 0x0012, 0x0016, 0x001b, 0x0021, + 0x0025, 0x002a, 0x002e, 0x0034, 0x003e, 0x0046, 0x004d, 0x0053, + 0x005a, 0x0061, 0x0067, 0x006c, 0x0072, 0x0078, 0x007f, 0x0086, + 0x008e, 0x0096, 0x0096, 0x009a, 0x00ab, 0x00b2, 0x00b8, 0x00bb, + 0x00c3, 0x00c9, 0x00d0, 0x00d3, 0x00d7, 0x00e0, 0x00e9, 0x00f1, + 0x00f9, 0x00fd, 0x0101, 0x0105, 0x010b, 0x010f, 0x0117, 0x0121, + 0x012f, 0x0135, 0x0141, 0x0148, 0x014f, 0x0156, 0x0159, 0x015e, + 0x0163, 0x0167, 0x0167, 0x016d, 0x0174, 0x017a, 0x017f, 0x0185, // Entry 40 - 7F - 0x0178, 0x017f, 0x017f, 0x0183, 0x018a, 0x018a, 0x018d, 0x0193, - 0x019a, 0x01a3, 0x01a8, 0x01ad, 0x01b6, 0x01b6, 0x01bc, 0x01c4, - 0x01cc, 0x01d4, 0x01db, 0x01e2, 0x01eb, 0x01f1, 0x01fb, 0x0202, - 0x0206, 0x020a, 0x0215, 0x021d, 0x022b, 0x0230, 0x0237, 0x023e, - 0x0242, 0x0247, 0x0253, 0x025c, 0x0265, 0x026d, 0x0272, 0x0279, - 0x0282, 0x028d, 0x0294, 0x0299, 0x029f, 0x02a5, 0x02aa, 0x02ba, - 0x02bf, 0x02c5, 0x02cc, 0x02db, 0x02e8, 0x02e8, 0x02ee, 0x02ee, - 0x02ee, 0x02ee, 0x02f3, 0x02f8, 0x02fe, 0x0307, 0x0307, 0x0310, + 0x0190, 0x0197, 0x0197, 0x019b, 0x01a2, 0x01a2, 0x01a5, 0x01ab, + 0x01b2, 0x01bb, 0x01c0, 0x01c5, 0x01ce, 0x01ce, 0x01d4, 0x01dc, + 0x01e4, 0x01ec, 0x01f0, 0x01f7, 0x0200, 0x0206, 0x0210, 0x0217, + 0x021b, 0x021f, 0x022a, 0x0232, 0x0240, 0x0245, 0x024c, 0x0253, + 0x0257, 0x025c, 0x0268, 0x0271, 0x027a, 0x0282, 0x0287, 0x028e, + 0x0297, 0x02a2, 0x02a9, 0x02ae, 0x02b4, 0x02ba, 0x02bf, 0x02cf, + 0x02d4, 0x02da, 0x02e1, 0x02f0, 0x02fd, 0x030b, 0x0311, 0x0316, + 0x031d, 0x031d, 0x0322, 0x0327, 0x032d, 0x0336, 0x0336, 0x033f, // Entry 80 - BF - 0x0316, 0x0321, 0x0327, 0x032e, 0x0333, 0x033b, 0x0341, 0x034c, - 0x0354, 0x035a, 0x0360, 0x036d, 0x0372, 0x0378, 0x0381, 0x038a, - 0x038f, 0x0394, 0x039d, 0x03a2, 0x03a9, 0x03a9, 0x03b5, 0x03bb, - 0x03c0, 0x03c7, 0x03cc, 0x03d2, 0x03d7, 0x03da, 0x03e2, 0x03e9, - 0x03ef, 0x03f5, 0x03f9, 0x03ff, 0x0404, 0x0409, 0x0411, 0x0417, - 0x041b, 0x0423, 0x0428, 0x042f, 0x0437, 0x043d, 0x0442, 0x0447, - 0x044c, 0x0452, 0x0452, 0x0457, 0x045b, 0x0460, 0x0460, 0x0467, - 0x046d, 0x046d, 0x046d, 0x0471, 0x0475, 0x0475, 0x0475, 0x047a, + 0x0345, 0x0350, 0x0356, 0x035d, 0x0362, 0x036a, 0x0370, 0x037b, + 0x0383, 0x0389, 0x038f, 0x039c, 0x03a1, 0x03a7, 0x03b0, 0x03b9, + 0x03be, 0x03c3, 0x03cc, 0x03d1, 0x03d8, 0x03dd, 0x03e9, 0x03ef, + 0x03f4, 0x03fb, 0x0400, 0x0406, 0x040b, 0x040e, 0x0416, 0x041d, + 0x0423, 0x0429, 0x042d, 0x0433, 0x0438, 0x043d, 0x0445, 0x044b, + 0x044f, 0x0457, 0x045c, 0x0463, 0x046b, 0x0471, 0x0476, 0x047b, + 0x0480, 0x0486, 0x0486, 0x048b, 0x048f, 0x0494, 0x0494, 0x049b, + 0x04a1, 0x04a1, 0x04a1, 0x04a5, 0x04a9, 0x04a9, 0x04a9, 0x04ae, // Entry C0 - FF - 0x047a, 0x0487, 0x0487, 0x048d, 0x048d, 0x0494, 0x0494, 0x049b, - 0x049b, 0x049b, 0x049b, 0x049b, 0x049b, 0x049e, 0x049e, 0x04a5, - 0x04a5, 0x04ab, 0x04ab, 0x04ab, 0x04ab, 0x04ab, 0x04ab, 0x04ab, - 0x04ab, 0x04ab, 0x04b0, 0x04b0, 0x04b4, 0x04b4, 0x04b4, 0x04c3, - 0x04cb, 0x04cb, 0x04cf, 0x04cf, 0x04cf, 0x04d6, 0x04d6, 0x04d6, - 0x04d6, 0x04d6, 0x04da, 0x04da, 0x04da, 0x04de, 0x04de, 0x04de, - 0x04de, 0x04de, 0x04de, 0x04de, 0x04de, 0x04de, 0x04e3, 0x04e3, - 0x04e3, 0x04e9, 0x04e9, 0x04e9, 0x04f0, 0x04f0, 0x04f7, 0x04fe, + 0x04ae, 0x04bb, 0x04bb, 0x04c1, 0x04c1, 0x04c8, 0x04c8, 0x04cf, + 0x04cf, 0x04cf, 0x04cf, 0x04cf, 0x04cf, 0x04d2, 0x04d2, 0x04d9, + 0x04d9, 0x04df, 0x04df, 0x04e3, 0x04e3, 0x04e7, 0x04e7, 0x04e7, + 0x04e7, 0x04e7, 0x04ec, 0x04ec, 0x04f0, 0x04f0, 0x04f0, 0x04ff, + 0x0507, 0x0507, 0x050b, 0x050b, 0x050b, 0x0512, 0x0512, 0x0512, + 0x0512, 0x0512, 0x0516, 0x0516, 0x0516, 0x051a, 0x051a, 0x051e, + 0x051e, 0x051e, 0x051e, 0x051e, 0x051e, 0x051e, 0x0524, 0x0529, + 0x0529, 0x0529, 0x052f, 0x0533, 0x0533, 0x053a, 0x053a, 0x0541, // Entry 100 - 13F - 0x0509, 0x0509, 0x0509, 0x0509, 0x0518, 0x0518, 0x051e, 0x0524, - 0x0529, 0x0529, 0x0529, 0x052f, 0x052f, 0x0534, 0x0534, 0x0540, - 0x0540, 0x0545, 0x0545, 0x0550, 0x0550, 0x0550, 0x0554, 0x0558, - 0x0558, 0x0558, 0x055e, 0x055e, 0x055e, 0x055e, 0x055e, 0x055e, - 0x055e, 0x0568, 0x0568, 0x056b, 0x056b, 0x056b, 0x056b, 0x056b, - 0x056b, 0x056b, 0x056b, 0x056d, 0x0573, 0x0576, 0x0576, 0x0576, - 0x0576, 0x057a, 0x0581, 0x0581, 0x0581, 0x0581, 0x0581, 0x0581, - 0x058a, 0x058a, 0x058a, 0x058a, 0x059e, 0x059e, 0x059e, 0x05a3, + 0x0548, 0x0553, 0x0553, 0x0553, 0x0553, 0x0562, 0x0562, 0x0568, + 0x056e, 0x0573, 0x0573, 0x0573, 0x0579, 0x0579, 0x057e, 0x057e, + 0x058a, 0x058a, 0x058f, 0x058f, 0x059a, 0x059a, 0x059f, 0x05a3, + 0x05a7, 0x05a7, 0x05a7, 0x05ad, 0x05ad, 0x05ad, 0x05ad, 0x05b3, + 0x05b3, 0x05b3, 0x05bd, 0x05bd, 0x05c0, 0x05c0, 0x05c0, 0x05c0, + 0x05c0, 0x05c0, 0x05c0, 0x05c5, 0x05c7, 0x05cd, 0x05d0, 0x05d0, + 0x05d0, 0x05d0, 0x05d4, 0x05db, 0x05db, 0x05db, 0x05db, 0x05db, + 0x05db, 0x05e4, 0x05e4, 0x05e4, 0x05e4, 0x05f8, 0x05f8, 0x05f8, // Entry 140 - 17F - 0x05aa, 0x05aa, 0x05ad, 0x05b5, 0x05b5, 0x05b5, 0x05b5, 0x05ba, - 0x05c5, 0x05c8, 0x05cc, 0x05d0, 0x05d6, 0x05db, 0x05e1, 0x05e1, - 0x05e1, 0x05e7, 0x05ed, 0x05f4, 0x05f4, 0x05f4, 0x05f4, 0x05f4, - 0x05f9, 0x05ff, 0x0603, 0x0608, 0x0608, 0x0610, 0x0610, 0x0614, - 0x061b, 0x0627, 0x0627, 0x062b, 0x062b, 0x0630, 0x0630, 0x063c, - 0x063c, 0x063c, 0x0640, 0x0648, 0x0650, 0x065c, 0x0662, 0x0662, - 0x0668, 0x0677, 0x0677, 0x0677, 0x067c, 0x0681, 0x0689, 0x068f, - 0x0694, 0x069c, 0x069c, 0x06a2, 0x06a7, 0x06a7, 0x06a7, 0x06ad, + 0x05fd, 0x0604, 0x0604, 0x0607, 0x060f, 0x060f, 0x0619, 0x0619, + 0x061e, 0x0629, 0x062c, 0x0630, 0x0634, 0x063a, 0x063f, 0x0645, + 0x0645, 0x0645, 0x064b, 0x0651, 0x0658, 0x0658, 0x0658, 0x0658, + 0x0658, 0x065d, 0x0663, 0x0667, 0x066c, 0x066c, 0x0674, 0x0674, + 0x0678, 0x067f, 0x068b, 0x068b, 0x068f, 0x068f, 0x0694, 0x0694, + 0x06a0, 0x06a0, 0x06a0, 0x06a4, 0x06ac, 0x06b4, 0x06c0, 0x06c6, + 0x06c6, 0x06cc, 0x06db, 0x06db, 0x06db, 0x06e0, 0x06e5, 0x06ed, + 0x06f3, 0x06f8, 0x0700, 0x0700, 0x0706, 0x070b, 0x070b, 0x070b, // Entry 180 - 1BF - 0x06ad, 0x06ad, 0x06ad, 0x06b3, 0x06b3, 0x06b3, 0x06b7, 0x06c4, - 0x06c4, 0x06ce, 0x06ce, 0x06d3, 0x06d6, 0x06dc, 0x06e1, 0x06e1, - 0x06e1, 0x06e6, 0x06e6, 0x06ec, 0x06f4, 0x06fb, 0x06fb, 0x0700, - 0x0700, 0x0706, 0x0706, 0x070b, 0x070f, 0x0717, 0x0717, 0x0723, - 0x0727, 0x072d, 0x0738, 0x0738, 0x0738, 0x073e, 0x0743, 0x0743, - 0x074a, 0x0758, 0x075c, 0x0763, 0x0763, 0x0763, 0x0763, 0x0768, - 0x0772, 0x0775, 0x077f, 0x0783, 0x078d, 0x0792, 0x0796, 0x0796, - 0x0796, 0x079c, 0x07a5, 0x07b0, 0x07b0, 0x07b0, 0x07b3, 0x07c0, + 0x0711, 0x0711, 0x0711, 0x0711, 0x0717, 0x0717, 0x0717, 0x0717, + 0x071b, 0x0728, 0x0728, 0x0732, 0x0732, 0x0737, 0x073a, 0x0740, + 0x0745, 0x0745, 0x0745, 0x074a, 0x074a, 0x0750, 0x0758, 0x075f, + 0x075f, 0x0764, 0x0764, 0x076a, 0x076a, 0x076f, 0x0773, 0x077b, + 0x077b, 0x0787, 0x078b, 0x0791, 0x079c, 0x079c, 0x07a3, 0x07a9, + 0x07ae, 0x07ae, 0x07b5, 0x07c3, 0x07c7, 0x07ce, 0x07ce, 0x07ce, + 0x07ce, 0x07d3, 0x07dd, 0x07e0, 0x07ea, 0x07ee, 0x07f8, 0x07fd, + 0x0801, 0x0805, 0x0805, 0x080b, 0x0814, 0x081f, 0x081f, 0x081f, // Entry 1C0 - 1FF - 0x07c4, 0x07c4, 0x07c4, 0x07cc, 0x07cc, 0x07cc, 0x07cc, 0x07cc, - 0x07d6, 0x07d6, 0x07de, 0x07de, 0x07e3, 0x07e3, 0x07f3, 0x07f3, - 0x07f3, 0x07f3, 0x07f3, 0x07f3, 0x07f3, 0x07f3, 0x07f3, 0x07f8, - 0x07f8, 0x07fd, 0x07fd, 0x07fd, 0x0804, 0x080e, 0x080e, 0x080e, - 0x0813, 0x0813, 0x0813, 0x0813, 0x0813, 0x0819, 0x081f, 0x0826, - 0x082a, 0x082a, 0x0831, 0x0831, 0x0831, 0x0831, 0x0838, 0x083d, - 0x0846, 0x084e, 0x084e, 0x085a, 0x085a, 0x085e, 0x085e, 0x085e, - 0x086d, 0x086d, 0x086d, 0x0876, 0x087a, 0x087a, 0x087a, 0x087a, + 0x0822, 0x082f, 0x0833, 0x0833, 0x0833, 0x083b, 0x083b, 0x083b, + 0x083b, 0x083b, 0x0845, 0x0845, 0x084d, 0x0858, 0x085d, 0x085d, + 0x086d, 0x086d, 0x086d, 0x086d, 0x086d, 0x086d, 0x086d, 0x086d, + 0x086d, 0x0872, 0x0872, 0x0877, 0x0877, 0x0877, 0x087e, 0x0888, + 0x0888, 0x0888, 0x088d, 0x088d, 0x088d, 0x088d, 0x088d, 0x0893, + 0x0899, 0x08a0, 0x08a4, 0x08a4, 0x08ab, 0x08ab, 0x08b1, 0x08b1, + 0x08b8, 0x08bd, 0x08c6, 0x08ce, 0x08ce, 0x08da, 0x08da, 0x08de, + 0x08de, 0x08de, 0x08ed, 0x08ed, 0x08ed, 0x08f6, 0x08fa, 0x08fa, // Entry 200 - 23F - 0x087a, 0x0886, 0x088f, 0x0899, 0x08a3, 0x08aa, 0x08aa, 0x08b6, - 0x08b6, 0x08b6, 0x08b6, 0x08bc, 0x08bc, 0x08bc, 0x08c1, 0x08c1, - 0x08c1, 0x08c1, 0x08c1, 0x08c6, 0x08ca, 0x08ca, 0x08cf, 0x08d4, - 0x08d4, 0x08d4, 0x08d4, 0x08db, 0x08db, 0x08db, 0x08db, 0x08db, - 0x08e5, 0x08e5, 0x08eb, 0x08eb, 0x08eb, 0x08eb, 0x08f2, 0x08f8, - 0x08ff, 0x0903, 0x091b, 0x0921, 0x0921, 0x0928, 0x0936, 0x0939, - 0x0939, 0x0939, 0x0939, 0x0939, 0x0939, 0x0939, 0x093e, 0x093e, - 0x093e, 0x0943, 0x0943, 0x094a, 0x094d, 0x0953, 0x0953, 0x0957, + 0x08fa, 0x08fa, 0x08fa, 0x0906, 0x090f, 0x0919, 0x0923, 0x092a, + 0x092a, 0x0936, 0x0936, 0x093a, 0x093a, 0x0940, 0x0940, 0x0940, + 0x0945, 0x0945, 0x094e, 0x094e, 0x094e, 0x0953, 0x0957, 0x0957, + 0x095c, 0x0961, 0x0961, 0x0961, 0x0961, 0x0968, 0x0968, 0x0968, + 0x0968, 0x0968, 0x0972, 0x0972, 0x0978, 0x0978, 0x0978, 0x0978, + 0x097f, 0x0985, 0x098c, 0x0990, 0x09a8, 0x09ae, 0x09ae, 0x09b5, + 0x09c3, 0x09c6, 0x09c6, 0x09c6, 0x09c6, 0x09c6, 0x09c6, 0x09c6, + 0x09cb, 0x09d0, 0x09d6, 0x09db, 0x09db, 0x09e2, 0x09e5, 0x09eb, // Entry 240 - 27F - 0x0957, 0x0957, 0x095e, 0x0963, 0x0963, 0x0969, 0x0969, 0x0969, - 0x0969, 0x0969, 0x0972, 0x0976, 0x0988, 0x098c, 0x0999, 0x0999, - 0x09a9, 0x09c4, 0x09d7, 0x09e6, 0x09f8, 0x0a08, 0x0a1f, 0x0a2e, - 0x0a3d, 0x0a3d, 0x0a4d, 0x0a63, 0x0a6e, 0x0a75, 0x0a89, 0x0a9b, - 0x0aa3, 0x0aa3, 0x0ab2, 0x0ac6, 0x0ad9, -} // Size: 1250 bytes - -const viLangStr string = "" + // Size: 8662 bytes + 0x09eb, 0x09ef, 0x09ef, 0x09ef, 0x09f6, 0x09fb, 0x09fb, 0x0a01, + 0x0a01, 0x0a01, 0x0a01, 0x0a01, 0x0a0a, 0x0a0e, 0x0a20, 0x0a24, + 0x0a31, 0x0a31, 0x0a41, 0x0a5c, 0x0a6f, 0x0a7e, 0x0a90, 0x0aa0, + 0x0ab7, 0x0ac6, 0x0ad5, 0x0ad5, 0x0ae5, 0x0afb, 0x0b06, 0x0b0d, + 0x0b21, 0x0b33, 0x0b3b, 0x0b3b, 0x0b4a, 0x0b5e, 0x0b71, +} // Size: 1254 bytes + +const viLangStr string = "" + // Size: 8700 bytes "Tiếng AfarTiếng AbkhaziaTiếng AvestanTiếng AfrikaansTiếng AkanTiếng Amha" + "ricTiếng AragonTiếng Ả RậpTiếng AssamTiếng AvaricTiếng AymaraTiếng Azerb" + "aijanTiếng BashkirTiếng BelarusTiếng BulgariaTiếng BislamaTiếng BambaraT" + @@ -25775,31 +27161,31 @@ const viLangStr string = "" + // Size: 8662 bytes " GuaraniTiếng GujaratiTiếng ManxTiếng HausaTiếng Do TháiTiếng HindiTiếng" + " Hiri MotuTiếng CroatiaTiếng HaitiTiếng HungaryTiếng ArmeniaTiếng Herero" + "Tiếng Khoa Học Quốc TếTiếng IndonesiaTiếng InterlingueTiếng IgboTiếng Di" + - " Tứ XuyênTiếng InupiaqTiếng IdoTiếng IcelandTiếng ÝTiếng InuktitutTiếng " + - "NhậtTiếng JavaTiếng GruziaTiếng KongoTiếng KikuyuTiếng KuanyamaTiếng Kaz" + - "akhTiếng KalaallisutTiếng Khơ-meTiếng KannadaTiếng HànTiếng KanuriTiếng " + - "KashmirTiếng KurdTiếng KomiTiếng CornwallTiếng KyrgyzTiếng La-tinhTiếng " + - "LuxembourgTiếng GandaTiếng LimburgTiếng LingalaTiếng LàoTiếng LitvaTiếng" + - " Luba-KatangaTiếng LatviaTiếng MalagasyTiếng MarshallTiếng MaoriTiếng Ma" + - "cedoniaTiếng MalayalamTiếng Mông CổTiếng MarathiTiếng Mã LaiTiếng MaltaT" + - "iếng Miến ĐiệnTiếng NauruTiếng Ndebele Miền BắcTiếng NepalTiếng NdongaTi" + - "ếng Hà LanTiếng Na Uy (Nynorsk)Tiếng Na Uy (Bokmål)Tiếng Ndebele Miền " + - "NamTiếng NavajoTiếng NyanjaTiếng OccitanTiếng OjibwaTiếng OromoTiếng Odi" + - "aTiếng OsseticTiếng PunjabTiếng PaliTiếng Ba LanTiếng PashtoTiếng Bồ Đào" + - " NhaTiếng QuechuaTiếng RomanshTiếng RundiTiếng RomaniaTiếng NgaTiếng Kin" + - "yarwandaTiếng PhạnTiếng SardiniaTiếng SindhiTiếng Sami Miền BắcTiếng San" + - "goTiếng SinhalaTiếng SlovakTiếng SloveniaTiếng SamoaTiếng ShonaTiếng Som" + - "aliTiếng AlbaniaTiếng SerbiaTiếng SwatiTiếng Sotho Miền NamTiếng SundaTi" + - "ếng Thụy ĐiểnTiếng SwahiliTiếng TamilTiếng TeluguTiếng TajikTiếng Thái" + - "Tiếng TigrinyaTiếng TurkmenTiếng TswanaTiếng TongaTiếng Thổ Nhĩ KỳTiếng " + - "TsongaTiếng TatarTiếng TahitiTiếng Duy Ngô NhĩTiếng UcrainaTiếng UrduTiế" + - "ng UzbekTiếng VendaTiếng ViệtTiếng VolapükTiếng WalloonTiếng WolofTiếng " + - "XhosaTiếng YiddishTiếng YorubaTiếng ChoangTiếng TrungTiếng ZuluTiếng Ach" + - "ineseTiếng AcoliTiếng AdangmeTiếng AdygheTiếng AfrihiliTiếng AghemTiếng " + - "AinuTiếng AkkadiaTiếng AlabamaTiếng AleutTiếng Gheg AlbaniTiếng Altai Mi" + - "ền NamTiếng Anh cổTiếng AngikaTiếng AramaicTiếng MapucheTiếng AraonaTi" + - "ếng ArapahoTiếng Ả Rập AlgeriaTiếng ArawakTiếng Ả Rập Ai CậpTiếng AsuN" + - "gôn ngữ Ký hiệu MỹTiếng AsturiasTiếng AwadhiTiếng BaluchiTiếng BaliTiếng" + + " Tứ XuyênTiếng InupiaqTiếng IdoTiếng IcelandTiếng ItalyTiếng InuktitutTi" + + "ếng NhậtTiếng JavaTiếng GeorgiaTiếng KongoTiếng KikuyuTiếng KuanyamaTi" + + "ếng KazakhTiếng KalaallisutTiếng KhmerTiếng KannadaTiếng HànTiếng Kanu" + + "riTiếng KashmirTiếng KurdTiếng KomiTiếng CornwallTiếng KyrgyzTiếng La-ti" + + "nhTiếng LuxembourgTiếng GandaTiếng LimburgTiếng LingalaTiếng LàoTiếng Li" + + "tvaTiếng Luba-KatangaTiếng LatviaTiếng MalagasyTiếng MarshallTiếng Maori" + + "Tiếng MacedoniaTiếng MalayalamTiếng Mông CổTiếng MarathiTiếng Mã LaiTiến" + + "g MaltaTiếng Miến ĐiệnTiếng NauruTiếng Ndebele Miền BắcTiếng NepalTiếng " + + "NdongaTiếng Hà LanTiếng Na Uy (Nynorsk)Tiếng Na Uy (Bokmål)Tiếng Ndebele" + + " Miền NamTiếng NavajoTiếng NyanjaTiếng OccitanTiếng OjibwaTiếng OromoTiế" + + "ng OdiaTiếng OsseticTiếng PunjabTiếng PaliTiếng Ba LanTiếng PashtoTiếng " + + "Bồ Đào NhaTiếng QuechuaTiếng RomanshTiếng RundiTiếng RomaniaTiếng NgaTiế" + + "ng KinyarwandaTiếng PhạnTiếng SardiniaTiếng SindhiTiếng Sami Miền BắcTiế" + + "ng SangoTiếng SinhalaTiếng SlovakTiếng SloveniaTiếng SamoaTiếng ShonaTiế" + + "ng SomaliTiếng AlbaniaTiếng SerbiaTiếng SwatiTiếng Sotho Miền NamTiếng S" + + "undaTiếng Thụy ĐiểnTiếng SwahiliTiếng TamilTiếng TeluguTiếng TajikTiếng " + + "TháiTiếng TigrinyaTiếng TurkmenTiếng TswanaTiếng TongaTiếng Thổ Nhĩ KỳTi" + + "ếng TsongaTiếng TatarTiếng TahitiTiếng UyghurTiếng UcrainaTiếng UrduTi" + + "ếng UzbekTiếng VendaTiếng ViệtTiếng VolapükTiếng WalloonTiếng WolofTiế" + + "ng XhosaTiếng YiddishTiếng YorubaTiếng ChoangTiếng TrungTiếng ZuluTiếng " + + "AchineseTiếng AcoliTiếng AdangmeTiếng AdygheTiếng AfrihiliTiếng AghemTiế" + + "ng AinuTiếng AkkadiaTiếng AlabamaTiếng AleutTiếng Gheg AlbaniTiếng Altai" + + " Miền NamTiếng Anh cổTiếng AngikaTiếng AramaicTiếng MapucheTiếng AraonaT" + + "iếng ArapahoTiếng Ả Rập AlgeriaTiếng ArawakTiếng Ả Rập Ai CậpTiếng AsuNg" + + "ôn ngữ Ký hiệu MỹTiếng AsturiasTiếng AwadhiTiếng BaluchiTiếng BaliTiếng" + " BavariaTiếng BasaaTiếng BamunTiếng Batak TobaTiếng GhomalaTiếng BejaTiế" + "ng BembaTiếng BetawiTiếng BenaTiếng BafutTiếng BadagaTiếng Tây BalochiTi" + "ếng BhojpuriTiếng BikolTiếng BiniTiếng BanjarTiếng KomTiếng SiksikaTiế" + @@ -25830,43 +27216,43 @@ const viLangStr string = "" + // Size: 8662 bytes "Tiếng KimbunduTiếng Komi-PermyakTiếng KonkaniTiếng KosraeTiếng KpelleTiế" + "ng Karachay-BalkarTiếng KarelianTiếng KurukhTiếng ShambalaTiếng BafiaTiế" + "ng CologneTiếng KumykTiếng KutenaiTiếng LadinoTiếng LangiTiếng LahndaTiế" + - "ng LambaTiếng LezghianTiếng LakotaTiếng MongoTiếng LoziTiếng Bắc LuriTiế" + - "ng Luba-LuluaTiếng LuisenoTiếng LundaTiếng LuoTiếng LushaiTiếng LuyiaTiế" + - "ng MaduraTiếng MafaTiếng MagahiTiếng MaithiliTiếng MakasarTiếng Mandingo" + - "Tiếng MasaiTiếng MabaTiếng MokshaTiếng MandarTiếng MendeTiếng MeruTiếng " + - "MorisyenTiếng Ai-len Trung cổTiếng Makhuwa-MeettoTiếng Meta’Tiếng Micmac" + - "Tiếng MinangkabauTiếng Mãn ChâuTiếng ManipuriTiếng MohawkTiếng MossiTiến" + - "g MundangNhiều Ngôn ngữTiếng CreekTiếng MirandaTiếng MarwariTiếng MyeneT" + - "iếng ErzyaTiếng MazanderaniTiếng Mân NamTiếng NapoliTiếng NamaTiếng Hạ G" + - "iéc-manTiếng NewariTiếng NiasTiếng NiueanTiếng Ao NagaTiếng KwasioTiếng " + - "NgiemboonTiếng NogaiTiếng Na Uy cổTiếng N’KoTiếng Sotho Miền BắcTiếng Nu" + - "erTiếng Newari cổTiếng NyamweziTiếng NyankoleTiếng NyoroTiếng NzimaTiếng" + - " OsageTiếng Thổ Nhĩ Kỳ OttomanTiếng PangasinanTiếng PahlaviTiếng Pampang" + - "aTiếng PapiamentoTiếng PalauanTiếng Nigeria PidginTiếng Ba Tư cổTiếng Ph" + - "oeniciaTiếng PohnpeianTiếng PrussiaTiếng Provençal cổTiếng KʼicheʼTiếng " + - "Quechua ở Cao nguyên ChimborazoTiếng RajasthaniTiếng RapanuiTiếng Raroto" + - "nganTiếng RomboTiếng RomanyTiếng AromaniaTiếng RwaTiếng SandaweTiếng Sak" + - "haTiếng Samaritan AramaicTiếng SamburuTiếng SasakTiếng SantaliTiếng Ngam" + - "bayTiếng SanguTiếng SiciliaTiếng ScotsTiếng Kurd Miền NamTiếng SenecaTiế" + - "ng SenaTiếng SelkupTiếng Koyraboro SenniTiếng Ai-len cổTiếng TachelhitTi" + - "ếng ShanTiếng Ả-Rập ChadTiếng SidamoTiếng Sami Miền NamTiếng Lule Sami" + - "Tiếng Inari SamiTiếng Skolt SamiTiếng SoninkeTiếng SogdienTiếng Sranan T" + - "ongoTiếng SererTiếng SahoTiếng SukumaTiếng SusuTiếng SumeriaTiếng CômoTi" + - "ếng Syriac cổTiếng SyriacTiếng TimneTiếng TesoTiếng TerenoTiếng TetumT" + - "iếng TigreTiếng TivTiếng TokelauTiếng KlingonTiếng TlingitTiếng Tamashek" + - "Tiếng Nyasa TongaTiếng Tok PisinTiếng TarokoTiếng TsimshianTiếng Tumbuka" + - "Tiếng TuvaluTiếng TasawaqTiếng TuvinianTiếng Tamazight Miền Trung Ma-rốc" + - "Tiếng UdmurtTiếng UgariticTiếng UmbunduTiếng RootTiếng VaiTiếng VoticTiế" + - "ng VunjoTiếng WalserTiếng WalamoTiếng WarayTiếng WashoTiếng WarlpiriTiến" + - "g NgôTiếng KalmykTiếng SogaTiếng YaoTiếng YapTiếng YangbenTiếng YembaTiế" + - "ng Quảng ĐôngTiếng ZapotecKý hiệu BlissymbolsTiếng ZenagaTiếng Tamazight" + - " Chuẩn của Ma-rốcTiếng ZuniKhông có nội dung ngôn ngữTiếng ZazaTiếng Ả R" + - "ập Hiện đạiTiếng Thượng Giéc-man (Thụy Sĩ)Tiếng Anh (Anh)Tiếng Anh (Mỹ" + - ")Tiếng Tây Ban Nha (Mỹ La tinh)Tiếng Tây Ban Nha (Châu Âu)Tiếng Hạ Saxon" + - "Tiếng FlemishTiếng Bồ Đào Nha (Châu Âu)Tiếng MoldovaTiếng Serbo-CroatiaT" + - "iếng Swahili Congo" - -var viLangIdx = []uint16{ // 611 elements + "ng LambaTiếng LezghianTiếng LakotaTiếng MongoTiếng Creole LouisianaTiếng" + + " LoziTiếng Bắc LuriTiếng Luba-LuluaTiếng LuisenoTiếng LundaTiếng LuoTiến" + + "g LushaiTiếng LuyiaTiếng MaduraTiếng MafaTiếng MagahiTiếng MaithiliTiếng" + + " MakasarTiếng MandingoTiếng MasaiTiếng MabaTiếng MokshaTiếng MandarTiếng" + + " MendeTiếng MeruTiếng MorisyenTiếng Ai-len Trung cổTiếng Makhuwa-MeettoT" + + "iếng Meta’Tiếng MicmacTiếng MinangkabauTiếng Mãn ChâuTiếng ManipuriTiếng" + + " MohawkTiếng MossiTiếng MundangNhiều Ngôn ngữTiếng CreekTiếng MirandaTiế" + + "ng MarwariTiếng MyeneTiếng ErzyaTiếng MazanderaniTiếng Mân NamTiếng Napo" + + "liTiếng NamaTiếng Hạ Giéc-manTiếng NewariTiếng NiasTiếng NiueanTiếng Ao " + + "NagaTiếng KwasioTiếng NgiemboonTiếng NogaiTiếng Na Uy cổTiếng N’KoTiếng " + + "Sotho Miền BắcTiếng NuerTiếng Newari cổTiếng NyamweziTiếng NyankoleTiếng" + + " NyoroTiếng NzimaTiếng OsageTiếng Thổ Nhĩ Kỳ OttomanTiếng PangasinanTiến" + + "g PahlaviTiếng PampangaTiếng PapiamentoTiếng PalauanTiếng Nigeria Pidgin" + + "Tiếng Ba Tư cổTiếng PhoeniciaTiếng PohnpeianTiếng PrussiaTiếng Provençal" + + " cổTiếng KʼicheʼTiếng Quechua ở Cao nguyên ChimborazoTiếng RajasthaniTiế" + + "ng RapanuiTiếng RarotonganTiếng RomboTiếng RomanyTiếng AromaniaTiếng Rwa" + + "Tiếng SandaweTiếng SakhaTiếng Samaritan AramaicTiếng SamburuTiếng SasakT" + + "iếng SantaliTiếng NgambayTiếng SanguTiếng SiciliaTiếng ScotsTiếng Kurd M" + + "iền NamTiếng SenecaTiếng SenaTiếng SelkupTiếng Koyraboro SenniTiếng Ai-l" + + "en cổTiếng TachelhitTiếng ShanTiếng Ả-Rập ChadTiếng SidamoTiếng Sami Miề" + + "n NamTiếng Lule SamiTiếng Inari SamiTiếng Skolt SamiTiếng SoninkeTiếng S" + + "ogdienTiếng Sranan TongoTiếng SererTiếng SahoTiếng SukumaTiếng SusuTiếng" + + " SumeriaTiếng CômoTiếng Syriac cổTiếng SyriacTiếng TimneTiếng TesoTiếng " + + "TerenoTiếng TetumTiếng TigreTiếng TivTiếng TokelauTiếng KlingonTiếng Tli" + + "ngitTiếng TamashekTiếng Nyasa TongaTiếng Tok PisinTiếng TarokoTiếng Tsim" + + "shianTiếng TumbukaTiếng TuvaluTiếng TasawaqTiếng TuvinianTiếng Tamazight" + + " Miền Trung Ma-rốcTiếng UdmurtTiếng UgariticTiếng UmbunduNgôn ngữ không " + + "xác địnhTiếng VaiTiếng VoticTiếng VunjoTiếng WalserTiếng WalamoTiếng War" + + "ayTiếng WashoTiếng WarlpiriTiếng NgôTiếng KalmykTiếng SogaTiếng YaoTiếng" + + " YapTiếng YangbenTiếng YembaTiếng Quảng ĐôngTiếng ZapotecKý hiệu Blissym" + + "bolsTiếng ZenagaTiếng Tamazight Chuẩn của Ma-rốcTiếng ZuniKhông có nội d" + + "ung ngôn ngữTiếng ZazaTiếng Ả Rập Hiện đạiTiếng Thượng Giéc-man (Thụy Sĩ" + + ")Tiếng Anh (Anh)Tiếng Anh (Mỹ)Tiếng Tây Ban Nha (Mỹ La tinh)Tiếng Tây Ba" + + "n Nha (Châu Âu)Tiếng Hạ SaxonTiếng FlemishTiếng Bồ Đào Nha (Châu Âu)Tiến" + + "g MoldovaTiếng Serbo-CroatiaTiếng Swahili Congo" + +var viLangIdx = []uint16{ // 613 elements // Entry 0 - 3F 0x0000, 0x000c, 0x001c, 0x002b, 0x003c, 0x0048, 0x0057, 0x0065, 0x0076, 0x0083, 0x0091, 0x009f, 0x00b1, 0x00c0, 0x00cf, 0x00df, @@ -25878,118 +27264,119 @@ var viLangIdx = []uint16{ // 611 elements 0x0350, 0x035d, 0x036e, 0x037d, 0x038a, 0x0399, 0x03a8, 0x03b6, // Entry 40 - 7F 0x03d4, 0x03e5, 0x03f8, 0x0404, 0x041a, 0x0429, 0x0434, 0x0443, - 0x044d, 0x045e, 0x046c, 0x0478, 0x0486, 0x0493, 0x04a1, 0x04b1, - 0x04bf, 0x04d2, 0x04e1, 0x04f0, 0x04fc, 0x050a, 0x0519, 0x0525, - 0x0531, 0x0541, 0x054f, 0x055e, 0x0570, 0x057d, 0x058c, 0x059b, - 0x05a7, 0x05b4, 0x05c8, 0x05d6, 0x05e6, 0x05f6, 0x0603, 0x0614, - 0x0625, 0x0637, 0x0646, 0x0655, 0x0662, 0x0678, 0x0685, 0x06a1, - 0x06ae, 0x06bc, 0x06cb, 0x06e2, 0x06f9, 0x0713, 0x0721, 0x072f, - 0x073e, 0x074c, 0x0759, 0x0765, 0x0774, 0x0782, 0x078e, 0x079c, + 0x0450, 0x0461, 0x046f, 0x047b, 0x048a, 0x0497, 0x04a5, 0x04b5, + 0x04c3, 0x04d6, 0x04e3, 0x04f2, 0x04fe, 0x050c, 0x051b, 0x0527, + 0x0533, 0x0543, 0x0551, 0x0560, 0x0572, 0x057f, 0x058e, 0x059d, + 0x05a9, 0x05b6, 0x05ca, 0x05d8, 0x05e8, 0x05f8, 0x0605, 0x0616, + 0x0627, 0x0639, 0x0648, 0x0657, 0x0664, 0x067a, 0x0687, 0x06a3, + 0x06b0, 0x06be, 0x06cd, 0x06e4, 0x06fb, 0x0715, 0x0723, 0x0731, + 0x0740, 0x074e, 0x075b, 0x0767, 0x0776, 0x0784, 0x0790, 0x079e, // Entry 80 - BF - 0x07aa, 0x07c0, 0x07cf, 0x07de, 0x07eb, 0x07fa, 0x0805, 0x0818, - 0x0826, 0x0836, 0x0844, 0x085d, 0x086a, 0x0879, 0x0887, 0x0897, - 0x08a4, 0x08b1, 0x08bf, 0x08ce, 0x08dc, 0x08e9, 0x0901, 0x090e, - 0x0924, 0x0933, 0x0940, 0x094e, 0x095b, 0x0968, 0x0978, 0x0987, - 0x0995, 0x09a2, 0x09b9, 0x09c7, 0x09d4, 0x09e2, 0x09f7, 0x0a06, - 0x0a12, 0x0a1f, 0x0a2c, 0x0a3a, 0x0a4a, 0x0a59, 0x0a66, 0x0a73, - 0x0a82, 0x0a90, 0x0a9e, 0x0aab, 0x0ab7, 0x0ac7, 0x0ad4, 0x0ae3, - 0x0af1, 0x0af1, 0x0b01, 0x0b0e, 0x0b1a, 0x0b29, 0x0b38, 0x0b45, + 0x07ac, 0x07c2, 0x07d1, 0x07e0, 0x07ed, 0x07fc, 0x0807, 0x081a, + 0x0828, 0x0838, 0x0846, 0x085f, 0x086c, 0x087b, 0x0889, 0x0899, + 0x08a6, 0x08b3, 0x08c1, 0x08d0, 0x08de, 0x08eb, 0x0903, 0x0910, + 0x0926, 0x0935, 0x0942, 0x0950, 0x095d, 0x096a, 0x097a, 0x0989, + 0x0997, 0x09a4, 0x09bb, 0x09c9, 0x09d6, 0x09e4, 0x09f2, 0x0a01, + 0x0a0d, 0x0a1a, 0x0a27, 0x0a35, 0x0a45, 0x0a54, 0x0a61, 0x0a6e, + 0x0a7d, 0x0a8b, 0x0a99, 0x0aa6, 0x0ab2, 0x0ac2, 0x0acf, 0x0ade, + 0x0aec, 0x0aec, 0x0afc, 0x0b09, 0x0b15, 0x0b24, 0x0b33, 0x0b40, // Entry C0 - FF - 0x0b58, 0x0b70, 0x0b80, 0x0b8e, 0x0b9d, 0x0bac, 0x0bba, 0x0bc9, - 0x0be2, 0x0be2, 0x0bf0, 0x0bf0, 0x0c0a, 0x0c15, 0x0c30, 0x0c40, - 0x0c40, 0x0c4e, 0x0c5d, 0x0c69, 0x0c78, 0x0c85, 0x0c92, 0x0ca4, - 0x0cb3, 0x0cbf, 0x0ccc, 0x0cda, 0x0ce6, 0x0cf3, 0x0d01, 0x0d15, - 0x0d25, 0x0d32, 0x0d3e, 0x0d4c, 0x0d57, 0x0d66, 0x0d79, 0x0d8a, - 0x0d96, 0x0da4, 0x0db0, 0x0dbe, 0x0dcc, 0x0dd9, 0x0de5, 0x0df1, - 0x0e00, 0x0e0d, 0x0e1a, 0x0e28, 0x0e35, 0x0e44, 0x0e51, 0x0e60, - 0x0e70, 0x0e7d, 0x0e89, 0x0e9d, 0x0eac, 0x0ebd, 0x0ecd, 0x0edd, + 0x0b53, 0x0b6b, 0x0b7b, 0x0b89, 0x0b98, 0x0ba7, 0x0bb5, 0x0bc4, + 0x0bdd, 0x0bdd, 0x0beb, 0x0beb, 0x0c05, 0x0c10, 0x0c2b, 0x0c3b, + 0x0c3b, 0x0c49, 0x0c58, 0x0c64, 0x0c73, 0x0c80, 0x0c8d, 0x0c9f, + 0x0cae, 0x0cba, 0x0cc7, 0x0cd5, 0x0ce1, 0x0cee, 0x0cfc, 0x0d10, + 0x0d20, 0x0d2d, 0x0d39, 0x0d47, 0x0d52, 0x0d61, 0x0d74, 0x0d85, + 0x0d91, 0x0d9f, 0x0dab, 0x0db9, 0x0dc7, 0x0dd4, 0x0de0, 0x0dec, + 0x0dfb, 0x0e08, 0x0e15, 0x0e23, 0x0e30, 0x0e30, 0x0e3f, 0x0e4c, + 0x0e5b, 0x0e6b, 0x0e78, 0x0e84, 0x0e98, 0x0ea7, 0x0eb8, 0x0ec8, // Entry 100 - 13F - 0x0ef6, 0x0f04, 0x0f14, 0x0f33, 0x0f4f, 0x0f5f, 0x0f6d, 0x0f7b, - 0x0f88, 0x0f98, 0x0fa5, 0x0fb3, 0x0fc0, 0x0fcd, 0x0fda, 0x0fed, - 0x1007, 0x1014, 0x102e, 0x1040, 0x104d, 0x105b, 0x1067, 0x1073, - 0x1081, 0x1096, 0x10a4, 0x10b3, 0x10c9, 0x10e3, 0x10f1, 0x1104, - 0x1110, 0x1123, 0x1123, 0x112e, 0x1141, 0x1159, 0x116b, 0x117a, - 0x1195, 0x11b2, 0x11c2, 0x11cc, 0x11da, 0x11e6, 0x11f2, 0x11ff, - 0x11ff, 0x120b, 0x121a, 0x1228, 0x124e, 0x126e, 0x1282, 0x128f, - 0x12a0, 0x12b1, 0x12be, 0x12d3, 0x12ee, 0x12ee, 0x12fc, 0x1309, + 0x0ed8, 0x0ef1, 0x0eff, 0x0f0f, 0x0f2e, 0x0f4a, 0x0f5a, 0x0f68, + 0x0f76, 0x0f83, 0x0f93, 0x0fa0, 0x0fae, 0x0fbb, 0x0fc8, 0x0fd5, + 0x0fe8, 0x1002, 0x100f, 0x1029, 0x103b, 0x1048, 0x1056, 0x1062, + 0x106e, 0x107c, 0x1091, 0x109f, 0x10ae, 0x10c4, 0x10de, 0x10ec, + 0x10ff, 0x110b, 0x111e, 0x111e, 0x1129, 0x113c, 0x1154, 0x1166, + 0x1175, 0x1190, 0x11ad, 0x11bd, 0x11c7, 0x11d5, 0x11e1, 0x11ed, + 0x11fa, 0x11fa, 0x1206, 0x1215, 0x1223, 0x1249, 0x1269, 0x127d, + 0x128a, 0x129b, 0x12ac, 0x12b9, 0x12ce, 0x12e9, 0x12e9, 0x12f7, // Entry 140 - 17F - 0x131a, 0x1327, 0x1339, 0x1347, 0x1359, 0x136b, 0x137a, 0x1388, - 0x13a0, 0x13af, 0x13bb, 0x13c7, 0x13d5, 0x13e2, 0x13f0, 0x13fe, - 0x1418, 0x1426, 0x1434, 0x1443, 0x1457, 0x146e, 0x147c, 0x148f, - 0x149d, 0x14ab, 0x14b6, 0x14c3, 0x14cf, 0x14e0, 0x14ef, 0x14fb, - 0x150a, 0x151e, 0x151e, 0x152a, 0x152a, 0x1537, 0x1545, 0x1559, - 0x1559, 0x1559, 0x1565, 0x1575, 0x1585, 0x1599, 0x15a8, 0x15b6, - 0x15c4, 0x15db, 0x15db, 0x15db, 0x15eb, 0x15f9, 0x1609, 0x1616, - 0x1625, 0x1632, 0x1641, 0x164f, 0x165c, 0x166a, 0x1677, 0x1687, + 0x1304, 0x1315, 0x1322, 0x1334, 0x1342, 0x1354, 0x1366, 0x1375, + 0x1383, 0x139b, 0x13aa, 0x13b6, 0x13c2, 0x13d0, 0x13dd, 0x13eb, + 0x13f9, 0x1413, 0x1421, 0x142f, 0x143e, 0x1452, 0x1469, 0x1477, + 0x148a, 0x1498, 0x14a6, 0x14b1, 0x14be, 0x14ca, 0x14db, 0x14ea, + 0x14f6, 0x1505, 0x1519, 0x1519, 0x1525, 0x1525, 0x1532, 0x1540, + 0x1554, 0x1554, 0x1554, 0x1560, 0x1570, 0x1580, 0x1594, 0x15a3, + 0x15b1, 0x15bf, 0x15d6, 0x15d6, 0x15d6, 0x15e6, 0x15f4, 0x1604, + 0x1611, 0x1620, 0x162d, 0x163c, 0x164a, 0x1657, 0x1665, 0x1672, // Entry 180 - 1BF - 0x1687, 0x1687, 0x1687, 0x1695, 0x1695, 0x16a2, 0x16ae, 0x16c0, - 0x16c0, 0x16d2, 0x16e1, 0x16ee, 0x16f9, 0x1707, 0x1714, 0x1714, - 0x1714, 0x1722, 0x172e, 0x173c, 0x174c, 0x175b, 0x176b, 0x1778, - 0x1784, 0x1792, 0x17a0, 0x17ad, 0x17b9, 0x17c9, 0x17e2, 0x17f8, - 0x1807, 0x1815, 0x1828, 0x183a, 0x184a, 0x1858, 0x1865, 0x1865, - 0x1874, 0x1887, 0x1894, 0x18a3, 0x18b2, 0x18b2, 0x18bf, 0x18cc, - 0x18df, 0x18ef, 0x18fd, 0x1909, 0x191f, 0x192d, 0x1939, 0x1947, - 0x1956, 0x1964, 0x1975, 0x1982, 0x1994, 0x1994, 0x19a2, 0x19bc, + 0x1682, 0x1682, 0x1682, 0x1682, 0x1690, 0x1690, 0x169d, 0x16b5, + 0x16c1, 0x16d3, 0x16d3, 0x16e5, 0x16f4, 0x1701, 0x170c, 0x171a, + 0x1727, 0x1727, 0x1727, 0x1735, 0x1741, 0x174f, 0x175f, 0x176e, + 0x177e, 0x178b, 0x1797, 0x17a5, 0x17b3, 0x17c0, 0x17cc, 0x17dc, + 0x17f5, 0x180b, 0x181a, 0x1828, 0x183b, 0x184d, 0x185d, 0x186b, + 0x1878, 0x1878, 0x1887, 0x189a, 0x18a7, 0x18b6, 0x18c5, 0x18c5, + 0x18d2, 0x18df, 0x18f2, 0x1902, 0x1910, 0x191c, 0x1932, 0x1940, + 0x194c, 0x195a, 0x1969, 0x1977, 0x1988, 0x1995, 0x19a7, 0x19a7, // Entry 1C0 - 1FF - 0x19c8, 0x19db, 0x19eb, 0x19fb, 0x1a08, 0x1a15, 0x1a22, 0x1a41, - 0x1a53, 0x1a62, 0x1a72, 0x1a84, 0x1a93, 0x1a93, 0x1aa9, 0x1aa9, - 0x1aa9, 0x1abc, 0x1abc, 0x1acd, 0x1acd, 0x1acd, 0x1ade, 0x1aed, - 0x1b04, 0x1b15, 0x1b3f, 0x1b51, 0x1b60, 0x1b72, 0x1b72, 0x1b72, - 0x1b7f, 0x1b8d, 0x1b8d, 0x1b8d, 0x1b8d, 0x1b9d, 0x1ba8, 0x1bb7, - 0x1bc4, 0x1bdd, 0x1bec, 0x1bf9, 0x1c08, 0x1c08, 0x1c17, 0x1c24, - 0x1c33, 0x1c40, 0x1c40, 0x1c57, 0x1c65, 0x1c71, 0x1c71, 0x1c7f, - 0x1c96, 0x1ca9, 0x1ca9, 0x1cba, 0x1cc6, 0x1cdc, 0x1cea, 0x1cea, + 0x19b5, 0x19cf, 0x19db, 0x19ee, 0x19fe, 0x1a0e, 0x1a1b, 0x1a28, + 0x1a35, 0x1a54, 0x1a66, 0x1a75, 0x1a85, 0x1a97, 0x1aa6, 0x1aa6, + 0x1abc, 0x1abc, 0x1abc, 0x1acf, 0x1acf, 0x1ae0, 0x1ae0, 0x1ae0, + 0x1af1, 0x1b00, 0x1b17, 0x1b28, 0x1b52, 0x1b64, 0x1b73, 0x1b85, + 0x1b85, 0x1b85, 0x1b92, 0x1ba0, 0x1ba0, 0x1ba0, 0x1ba0, 0x1bb0, + 0x1bbb, 0x1bca, 0x1bd7, 0x1bf0, 0x1bff, 0x1c0c, 0x1c1b, 0x1c1b, + 0x1c2a, 0x1c37, 0x1c46, 0x1c53, 0x1c53, 0x1c6a, 0x1c78, 0x1c84, + 0x1c84, 0x1c92, 0x1ca9, 0x1cbc, 0x1cbc, 0x1ccd, 0x1cd9, 0x1cef, // Entry 200 - 23F - 0x1cea, 0x1d01, 0x1d12, 0x1d24, 0x1d36, 0x1d45, 0x1d54, 0x1d68, - 0x1d75, 0x1d81, 0x1d81, 0x1d8f, 0x1d9b, 0x1daa, 0x1db7, 0x1dca, - 0x1dd8, 0x1dd8, 0x1dd8, 0x1de5, 0x1df1, 0x1dff, 0x1e0c, 0x1e19, - 0x1e24, 0x1e33, 0x1e33, 0x1e42, 0x1e51, 0x1e51, 0x1e61, 0x1e74, - 0x1e85, 0x1e85, 0x1e93, 0x1e93, 0x1ea4, 0x1ea4, 0x1eb3, 0x1ec1, - 0x1ed0, 0x1ee0, 0x1f07, 0x1f15, 0x1f25, 0x1f34, 0x1f40, 0x1f4b, - 0x1f4b, 0x1f4b, 0x1f4b, 0x1f4b, 0x1f58, 0x1f58, 0x1f65, 0x1f73, - 0x1f81, 0x1f8e, 0x1f9b, 0x1fab, 0x1fb7, 0x1fc5, 0x1fc5, 0x1fd1, + 0x1cfd, 0x1cfd, 0x1cfd, 0x1d14, 0x1d25, 0x1d37, 0x1d49, 0x1d58, + 0x1d67, 0x1d7b, 0x1d88, 0x1d94, 0x1d94, 0x1da2, 0x1dae, 0x1dbd, + 0x1dca, 0x1ddd, 0x1deb, 0x1deb, 0x1deb, 0x1df8, 0x1e04, 0x1e12, + 0x1e1f, 0x1e2c, 0x1e37, 0x1e46, 0x1e46, 0x1e55, 0x1e64, 0x1e64, + 0x1e74, 0x1e87, 0x1e98, 0x1e98, 0x1ea6, 0x1ea6, 0x1eb7, 0x1eb7, + 0x1ec6, 0x1ed4, 0x1ee3, 0x1ef3, 0x1f1a, 0x1f28, 0x1f38, 0x1f47, + 0x1f66, 0x1f71, 0x1f71, 0x1f71, 0x1f71, 0x1f71, 0x1f7e, 0x1f7e, + 0x1f8b, 0x1f99, 0x1fa7, 0x1fb4, 0x1fc1, 0x1fd1, 0x1fdd, 0x1feb, // Entry 240 - 27F - 0x1fdc, 0x1fe7, 0x1ff6, 0x2003, 0x2003, 0x2019, 0x2028, 0x203e, - 0x203e, 0x204c, 0x2074, 0x2080, 0x20a1, 0x20ad, 0x20cc, 0x20cc, - 0x20cc, 0x20f4, 0x20f4, 0x20f4, 0x2105, 0x2117, 0x213a, 0x215a, - 0x215a, 0x215a, 0x215a, 0x215a, 0x216c, 0x217b, 0x217b, 0x219d, - 0x21ac, 0x21c1, 0x21d6, -} // Size: 1246 bytes - -const zhLangStr string = "" + // Size: 6428 bytes - "阿法尔文阿布哈西亚语阿维斯塔文南非荷兰语阿肯文阿姆哈拉文阿拉贡文阿拉伯语阿萨姆文阿瓦尔文艾马拉文阿塞拜疆语巴什基尔文白俄罗斯语保加利亚语比斯拉马" + - "文班巴拉文孟加拉语藏语布列塔尼文波斯尼亚语加泰罗尼亚语车臣文查莫罗文科西嘉文克里族文捷克语教会斯拉夫文楚瓦什文威尔士语丹麦语德文迪维希文宗卡" + - "文埃维文希腊语英语世界语西班牙文爱沙尼亚语巴斯克文波斯文富拉文芬兰语斐济文法罗文法语西弗里西亚文爱尔兰语苏格兰盖尔文加利西亚语瓜拉尼文古吉拉" + - "特语马恩岛文豪萨文希伯来语印地语希里莫图文克罗地亚语海地克里奥尔文匈牙利语亚美尼亚语赫雷罗文国际语印度尼西亚语国际文字(E)伊布文四川彝文伊" + - "努皮克文伊多文冰岛语意大利语因纽特语日语爪哇语格鲁吉亚语刚果语吉库尤文宽亚玛文哈萨克语格陵兰文高棉文卡纳达文韩文卡努里文克什米尔文库尔德文科" + - "米文凯尔特文吉尔吉斯文拉丁语卢森堡语卢干达文林堡文林加拉文老挝语立陶宛语鲁巴加丹加文拉脱维亚语马尔加什文马绍尔文毛利文马其顿文马拉雅拉姆语蒙" + - "古文马拉地文马来语马耳他文缅甸语瑙鲁文北恩德贝勒文尼泊尔语恩东加文荷兰语挪威尼诺斯克文挪威博克马尔语南恩德贝勒文纳瓦霍文尼昂加文奥克西唐文奥" + - "吉布瓦文奥洛莫文奥里亚文奥塞梯文旁遮普文巴利文波兰文普什图文葡萄牙文盖丘亚文罗曼什文隆迪文罗马尼亚文俄文卢旺达语梵文萨丁文信德文北萨米文桑戈" + - "文僧伽罗文斯洛伐克文斯洛文尼亚文萨摩亚文绍纳文索马里文阿尔巴尼亚文塞尔维亚文斯瓦蒂文南索托文巽他文瑞典语斯瓦希里文泰米尔语泰卢固语塔吉克语泰" + - "语提格利尼亚文土库曼文茨瓦纳文汤加文土耳其文聪加文鞑靼文塔西提文维吾尔语乌克兰语乌尔都语乌兹别克语文达文越南语沃拉普克文瓦隆文沃洛夫文科萨文" + - "意第绪文约鲁巴文壮语中文祖鲁语亚齐文阿乔利文阿当梅文阿迪格文阿弗里希利文亚罕文阿伊努文阿卡德文阿留申文南阿尔泰文古英文昂加文阿拉米文马普切文" + - "阿拉帕霍文阿拉瓦克文阿苏文阿斯图里亚斯文阿瓦乔文俾路支文巴里文巴萨文巴姆穆文戈马拉文贝沙文别姆巴文贝纳文巴非特文西俾路支文博杰普尔文比科尔文" + - "比尼文科姆文西克西卡文布拉杰文博多文阿库色文布里亚特文布吉文布鲁文布林文梅敦巴文卡多文加勒比语卡尤加文阿灿文宿务文奇加文奇布查文查加台文丘克" + - "文马里文奇努克混合文乔克托文奇佩维安文彻罗基文夏延文中库尔德文科普特文克里米亚土耳其文塞舌尔克里奥尔文卡舒比文达科他文达尔格瓦文台塔文特拉华" + - "文史拉维文多格里布文丁卡文哲尔马文多格拉文下索布文都阿拉文中古荷兰文朱拉文迪尤拉文达扎葛文恩布文埃菲克文古埃及语艾卡朱克文埃兰文中古英文旺杜" + - "文芳格文菲律宾语丰文中古法文古法文北弗里西亚文东弗里西亚文弗留利文加族文加告兹文赣语迦约文格巴亚文吉兹文吉尔伯特斯文中古高地德文古高地德文冈" + - "德文哥伦打洛文哥特文格列博文古希腊语德语(瑞士)古西文吉维克琴文海达文客家语夏威夷文希利盖农文赫梯文苗族文上索布文湘语胡帕文伊班文伊比比奥文" + - "伊洛干诺文印古什文逻辑文恩艮巴马切姆文犹太波斯语犹太阿拉伯语卡拉卡尔帕克文卡比尔文克钦文卡捷文卡姆巴文卡威文卡巴尔德文加涅姆布文卡塔布文马孔" + - "德文卡布佛得鲁文科罗文卡西文和田文西桑海文卡库文卡伦金文金邦杜文科米-彼尔米亚克文刚卡尼文科斯拉伊文克佩列文卡拉恰伊巴尔卡尔文卡累利阿文库鲁" + - "克文香巴拉文巴菲亚文科隆文库米克文库特奈文拉地诺文朗吉文印度-雅利安文兰巴文列兹金文拉科塔文蒙戈文洛齐文北卢尔文卢巴-卢拉文卢伊塞诺文隆达文" + - "卢奥文米佐文卢雅文马都拉文马法文马加伊文迈蒂利文望加锡文曼丁哥文萨伊文马坝文莫克沙文曼达尔文门德文梅鲁文毛里求斯克里奥尔文中古爱尔兰文马库阿" + - "文梅塔文密克马克文米南卡保文满文曼尼普尔文摩霍克文莫西文蒙当文多种语系克里克文米兰德斯文马尔瓦里文姆耶内文厄尔兹亚文马赞德兰文闽南语那不勒斯" + - "文纳马文低地德文内瓦里文尼亚斯文纽埃文夸西奥文恩甘澎文诺盖文古诺尔斯文西非书面文字北索托文努埃尔文古典尼瓦尔文尼扬韦齐文尼昂科勒文尼奥罗文恩" + - "济马文奥塞治文奥斯曼土耳其文邦阿西南文巴拉维文邦板牙文帕皮阿门托文帕劳文尼日利亚皮钦文古波斯文腓尼基文波纳佩文普鲁士文古普罗文斯文基切文拉贾" + - "斯坦文拉帕努伊文拉罗汤加文兰博文吉普赛文阿罗蒙文罗瓦文桑达韦文萨哈文萨马利亚阿拉姆文桑布鲁文萨萨克文桑塔利文甘拜文桑古文西西里文苏格兰文南库" + - "尔德文塞内卡文塞纳文塞尔库普文东桑海文古爱尔兰文希尔哈文掸文乍得阿拉伯文悉达摩文南萨米文律勒萨米文伊纳里萨米文斯科特萨米文索宁克文粟特文苏里" + - "南汤加文塞雷尔文萨霍文苏库马文苏苏文苏美尔文科摩罗文古典叙利亚文古叙利亚文泰姆奈文特索文特伦诺文德顿文提格雷文蒂夫文托克劳文克林贡文特林吉特" + - "文塔马奇克文尼亚萨汤加文托克皮辛文太鲁阁文钦西安文通布卡文图瓦卢文北桑海文图瓦文塔马齐格特文乌德穆尔特文乌加里特文翁本杜文根语言瓦伊文维普森" + - "文沃提克文温旧文瓦尔瑟文瓦拉莫文瓦瑞文瓦绍文瓦尔皮瑞文吴语卡尔梅克文索加文瑶族语雅浦文洋卞文耶姆巴文粤语萨波蒂克文布里斯符号泽纳加文标准摩洛" + - "哥塔马塞特文祖尼文无语言内容扎扎文现代标准阿拉伯语南阿塞拜疆文奥地利德文瑞士高地德文拉丁美洲西班牙文欧洲西班牙文墨西哥西班牙文低萨克森文佛兰" + - "德文巴西葡萄牙文欧洲葡萄牙文摩尔多瓦文塞尔维亚-克罗地亚文刚果斯瓦希里文简体中文繁体中文" - -var zhLangIdx = []uint16{ // 613 elements + 0x1feb, 0x1ff7, 0x2002, 0x200d, 0x201c, 0x2029, 0x2029, 0x203f, + 0x204e, 0x2064, 0x2064, 0x2072, 0x209a, 0x20a6, 0x20c7, 0x20d3, + 0x20f2, 0x20f2, 0x20f2, 0x211a, 0x211a, 0x211a, 0x212b, 0x213d, + 0x2160, 0x2180, 0x2180, 0x2180, 0x2180, 0x2180, 0x2192, 0x21a1, + 0x21a1, 0x21c3, 0x21d2, 0x21e7, 0x21fc, +} // Size: 1250 bytes + +const zhLangStr string = "" + // Size: 6530 bytes + "阿法尔语阿布哈西亚语阿维斯塔语南非荷兰语阿肯语阿姆哈拉语阿拉贡语阿拉伯语阿萨姆语阿瓦尔语艾马拉语阿塞拜疆语巴什基尔语白俄罗斯语保加利亚语比斯拉马" + + "语班巴拉语孟加拉语藏语布列塔尼语波斯尼亚语加泰罗尼亚语车臣语查莫罗语科西嘉语克里族语捷克语教会斯拉夫语楚瓦什语威尔士语丹麦语德语迪维西语宗卡" + + "语埃维语希腊语英语世界语西班牙语爱沙尼亚语巴斯克语波斯语富拉语芬兰语斐济语法罗语法语西弗里西亚语爱尔兰语苏格兰盖尔语加利西亚语瓜拉尼语古吉拉" + + "特语马恩语豪萨语希伯来语印地语希里莫图语克罗地亚语海地克里奥尔语匈牙利语亚美尼亚语赫雷罗语国际语印度尼西亚语国际文字(E)伊博语四川彝语伊努" + + "皮克语伊多语冰岛语意大利语因纽特语日语爪哇语格鲁吉亚语刚果语吉库尤语宽亚玛语哈萨克语格陵兰语高棉语卡纳达语韩语卡努里语克什米尔语库尔德语科米" + + "语康沃尔语柯尔克孜语拉丁语卢森堡语卢干达语林堡语林加拉语老挝语立陶宛语鲁巴加丹加语拉脱维亚语马拉加斯语马绍尔语毛利语马其顿语马拉雅拉姆语蒙古" + + "语马拉地语马来语马耳他语缅甸语瑙鲁语北恩德贝勒语尼泊尔语恩东加语荷兰语挪威尼诺斯克语书面挪威语南恩德贝勒语纳瓦霍语齐切瓦语奥克语奥吉布瓦语奥" + + "罗莫语奥里亚语奥塞梯语旁遮普语巴利语波兰语普什图语葡萄牙语克丘亚语罗曼什语隆迪语罗马尼亚语俄语卢旺达语梵语萨丁语信德语北方萨米语桑戈语僧伽罗" + + "语斯洛伐克语斯洛文尼亚语萨摩亚语绍纳语索马里语阿尔巴尼亚语塞尔维亚语斯瓦蒂语南索托语巽他语瑞典语斯瓦希里语泰米尔语泰卢固语塔吉克语泰语提格利" + + "尼亚语土库曼语茨瓦纳语汤加语土耳其语聪加语鞑靼语塔希提语维吾尔语乌克兰语乌尔都语乌兹别克语文达语越南语沃拉普克语瓦隆语沃洛夫语科萨语意第绪语" + + "约鲁巴语壮语中文祖鲁语亚齐语阿乔利语阿当梅语阿迪格语阿弗里希利语亚罕语阿伊努语阿卡德语阿留申语南阿尔泰语古英语昂加语阿拉米语马普切语阿拉帕霍" + + "语阿拉瓦克语帕雷语阿斯图里亚斯语阿瓦德语俾路支语巴厘语巴萨语巴姆穆语戈马拉语贝沙语本巴语贝纳语巴非特语西俾路支语博杰普尔语比科尔语比尼语科姆" + + "语西克西卡语布拉杰语博多语阿库色语布里亚特语布吉语布鲁语比林语梅敦巴语卡多语加勒比语卡尤加语阿灿语宿务语奇加语奇布查语察合台语楚克语马里语奇" + + "努克混合语乔克托语奇佩维安语切罗基语夏延语中库尔德语科普特语克里米亚土耳其语塞舌尔克里奥尔语卡舒比语达科他语达尔格瓦语台塔语特拉华语史拉维语" + + "多格里布语丁卡语哲尔马语多格拉语下索布语都阿拉语中古荷兰语朱拉语迪尤拉语达扎葛语恩布语埃菲克语古埃及语艾卡朱克语埃兰语中古英语旺杜语芳格语菲" + + "律宾语丰语卡真法语中古法语古法语北弗里西亚语东弗里西亚语弗留利语加族语加告兹语赣语迦约语格巴亚语吉兹语吉尔伯特语中古高地德语古高地德语冈德语" + + "哥伦打洛语哥特语格列博语古希腊语瑞士德语古西语哥威迅语海达语客家语夏威夷语希利盖农语赫梯语苗语上索布语湘语胡帕语伊班语伊比比奥语伊洛卡诺语印" + + "古什语逻辑语恩艮巴语马切姆语犹太波斯语犹太阿拉伯语卡拉卡尔帕克语卡拜尔语克钦语卡捷语卡姆巴语卡威语卡巴尔德语加涅姆布语卡塔布语马孔德语卡布佛" + + "得鲁语克罗语卡西语和田语西桑海语卡库语卡伦金语金邦杜语科米-彼尔米亚克语孔卡尼语科斯拉伊语克佩列语卡拉恰伊巴尔卡尔语卡累利阿语库鲁克语香巴拉" + + "语巴菲亚语科隆语库梅克语库特奈语拉迪诺语朗吉语印度-雅利安语兰巴语列兹金语拉科塔语蒙戈语路易斯安那克里奥尔语洛齐语北卢尔语卢巴-卢拉语卢伊塞" + + "诺语隆达语卢欧语米佐语卢雅语马都拉语马法语摩揭陀语迈蒂利语望加锡语曼丁哥语马赛语马坝语莫克沙语曼达尔语门德语梅鲁语毛里求斯克里奥尔语中古爱尔" + + "兰语马库阿语梅塔语密克马克语米南佳保语满语曼尼普尔语摩霍克语莫西语蒙当语多语种克里克语米兰德斯语马尔瓦里语姆耶内语厄尔兹亚语马赞德兰语闽南语" + + "那不勒斯语纳马语低地德语尼瓦尔语尼亚斯语纽埃语夸西奥语恩甘澎语诺盖语古诺尔斯语西非书面文字北索托语努埃尔语古典尼瓦尔语尼扬韦齐语尼昂科勒语尼" + + "奥罗语恩济马语奥塞治语奥斯曼土耳其语邦阿西南语巴拉维语邦板牙语帕皮阿门托语帕劳语尼日利亚皮钦语古波斯语腓尼基语波纳佩语普鲁士语古普罗文斯语基" + + "切语拉贾斯坦语拉帕努伊语拉罗汤加语兰博语吉普赛语阿罗马尼亚语罗瓦语桑达韦语萨哈语萨马利亚阿拉姆语桑布鲁语萨萨克文桑塔利语甘拜语桑古语西西里语" + + "苏格兰语南库尔德语塞内卡语塞纳语塞尔库普语东桑海语古爱尔兰语希尔哈语掸语乍得阿拉伯语悉达摩语南萨米语吕勒萨米语伊纳里萨米语斯科特萨米语索宁克" + + "语粟特语苏里南汤加语塞雷尔语萨霍语苏库马语苏苏语苏美尔语科摩罗语古典叙利亚语叙利亚语泰姆奈语特索语特伦诺语德顿语提格雷语蒂夫语托克劳语克林贡" + + "语特林吉特语塔马奇克语尼亚萨汤加语托克皮辛语赛德克语钦西安语通布卡语图瓦卢语北桑海语图瓦语塔马齐格特语乌德穆尔特语乌加里特语翁本杜语未知语言" + + "瓦伊语维普森语沃提克语温旧语瓦尔瑟语瓦拉莫语瓦瑞语瓦绍语瓦尔皮瑞语吴语卡尔梅克语索加语瑶族语雅浦语洋卞语耶姆巴语粤语萨波蒂克语布里斯符号泽纳" + + "加语标准摩洛哥塔马塞特语祖尼语无语言内容扎扎语现代标准阿拉伯语南阿塞拜疆语奥地利德语瑞士高地德语澳大利亚英语加拿大英语英国英语美国英语拉丁美" + + "洲西班牙语欧洲西班牙语墨西哥西班牙语加拿大法语瑞士法语低萨克森语弗拉芒语巴西葡萄牙语欧洲葡萄牙语摩尔多瓦语塞尔维亚-克罗地亚语刚果斯瓦希里语" + + "简体中文繁体中文" + +var zhLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x000c, 0x001e, 0x002d, 0x003c, 0x0045, 0x0054, 0x0060, 0x006c, 0x0078, 0x0084, 0x0090, 0x009f, 0x00ae, 0x00bd, 0x00cc, @@ -25997,128 +27384,128 @@ var zhLangIdx = []uint16{ // 613 elements 0x013e, 0x014a, 0x0156, 0x015f, 0x0171, 0x017d, 0x0189, 0x0192, 0x0198, 0x01a4, 0x01ad, 0x01b6, 0x01bf, 0x01c5, 0x01ce, 0x01da, 0x01e9, 0x01f5, 0x01fe, 0x0207, 0x0210, 0x0219, 0x0222, 0x0228, - 0x023a, 0x0246, 0x0258, 0x0267, 0x0273, 0x0282, 0x028e, 0x0297, - 0x02a3, 0x02ac, 0x02bb, 0x02ca, 0x02df, 0x02eb, 0x02fa, 0x0306, + 0x023a, 0x0246, 0x0258, 0x0267, 0x0273, 0x0282, 0x028b, 0x0294, + 0x02a0, 0x02a9, 0x02b8, 0x02c7, 0x02dc, 0x02e8, 0x02f7, 0x0303, // Entry 40 - 7F - 0x030f, 0x0321, 0x0334, 0x033d, 0x0349, 0x0358, 0x0361, 0x036a, - 0x0376, 0x0382, 0x0388, 0x0391, 0x03a0, 0x03a9, 0x03b5, 0x03c1, - 0x03cd, 0x03d9, 0x03e2, 0x03ee, 0x03f4, 0x0400, 0x040f, 0x041b, - 0x0424, 0x0430, 0x043f, 0x0448, 0x0454, 0x0460, 0x0469, 0x0475, - 0x047e, 0x048a, 0x049c, 0x04ab, 0x04ba, 0x04c6, 0x04cf, 0x04db, - 0x04ed, 0x04f6, 0x0502, 0x050b, 0x0517, 0x0520, 0x0529, 0x053b, - 0x0547, 0x0553, 0x055c, 0x0571, 0x0586, 0x0598, 0x05a4, 0x05b0, - 0x05bf, 0x05ce, 0x05da, 0x05e6, 0x05f2, 0x05fe, 0x0607, 0x0610, + 0x030c, 0x031e, 0x0331, 0x033a, 0x0346, 0x0355, 0x035e, 0x0367, + 0x0373, 0x037f, 0x0385, 0x038e, 0x039d, 0x03a6, 0x03b2, 0x03be, + 0x03ca, 0x03d6, 0x03df, 0x03eb, 0x03f1, 0x03fd, 0x040c, 0x0418, + 0x0421, 0x042d, 0x043c, 0x0445, 0x0451, 0x045d, 0x0466, 0x0472, + 0x047b, 0x0487, 0x0499, 0x04a8, 0x04b7, 0x04c3, 0x04cc, 0x04d8, + 0x04ea, 0x04f3, 0x04ff, 0x0508, 0x0514, 0x051d, 0x0526, 0x0538, + 0x0544, 0x0550, 0x0559, 0x056e, 0x057d, 0x058f, 0x059b, 0x05a7, + 0x05b0, 0x05bf, 0x05cb, 0x05d7, 0x05e3, 0x05ef, 0x05f8, 0x0601, // Entry 80 - BF - 0x061c, 0x0628, 0x0634, 0x0640, 0x0649, 0x0658, 0x065e, 0x066a, - 0x0670, 0x0679, 0x0682, 0x068e, 0x0697, 0x06a3, 0x06b2, 0x06c4, - 0x06d0, 0x06d9, 0x06e5, 0x06f7, 0x0706, 0x0712, 0x071e, 0x0727, - 0x0730, 0x073f, 0x074b, 0x0757, 0x0763, 0x0769, 0x077b, 0x0787, - 0x0793, 0x079c, 0x07a8, 0x07b1, 0x07ba, 0x07c6, 0x07d2, 0x07de, - 0x07ea, 0x07f9, 0x0802, 0x080b, 0x081a, 0x0823, 0x082f, 0x0838, - 0x0844, 0x0850, 0x0856, 0x085c, 0x0865, 0x086e, 0x087a, 0x0886, - 0x0892, 0x0892, 0x08a4, 0x08ad, 0x08b9, 0x08c5, 0x08c5, 0x08d1, + 0x060d, 0x0619, 0x0625, 0x0631, 0x063a, 0x0649, 0x064f, 0x065b, + 0x0661, 0x066a, 0x0673, 0x0682, 0x068b, 0x0697, 0x06a6, 0x06b8, + 0x06c4, 0x06cd, 0x06d9, 0x06eb, 0x06fa, 0x0706, 0x0712, 0x071b, + 0x0724, 0x0733, 0x073f, 0x074b, 0x0757, 0x075d, 0x076f, 0x077b, + 0x0787, 0x0790, 0x079c, 0x07a5, 0x07ae, 0x07ba, 0x07c6, 0x07d2, + 0x07de, 0x07ed, 0x07f6, 0x07ff, 0x080e, 0x0817, 0x0823, 0x082c, + 0x0838, 0x0844, 0x084a, 0x0850, 0x0859, 0x0862, 0x086e, 0x087a, + 0x0886, 0x0886, 0x0898, 0x08a1, 0x08ad, 0x08b9, 0x08b9, 0x08c5, // Entry C0 - FF - 0x08d1, 0x08e0, 0x08e9, 0x08f2, 0x08fe, 0x090a, 0x090a, 0x0919, - 0x0919, 0x0919, 0x0928, 0x0928, 0x0928, 0x0931, 0x0931, 0x0946, - 0x0946, 0x0952, 0x095e, 0x0967, 0x0967, 0x0970, 0x097c, 0x097c, - 0x0988, 0x0991, 0x099d, 0x099d, 0x09a6, 0x09b2, 0x09b2, 0x09c1, - 0x09d0, 0x09dc, 0x09e5, 0x09e5, 0x09ee, 0x09fd, 0x09fd, 0x09fd, - 0x0a09, 0x0a09, 0x0a12, 0x0a1e, 0x0a2d, 0x0a36, 0x0a3f, 0x0a48, - 0x0a54, 0x0a5d, 0x0a69, 0x0a75, 0x0a7e, 0x0a87, 0x0a90, 0x0a9c, - 0x0aa8, 0x0ab1, 0x0aba, 0x0acc, 0x0ad8, 0x0ae7, 0x0af3, 0x0afc, + 0x08c5, 0x08d4, 0x08dd, 0x08e6, 0x08f2, 0x08fe, 0x08fe, 0x090d, + 0x090d, 0x090d, 0x091c, 0x091c, 0x091c, 0x0925, 0x0925, 0x093a, + 0x093a, 0x0946, 0x0952, 0x095b, 0x095b, 0x0964, 0x0970, 0x0970, + 0x097c, 0x0985, 0x098e, 0x098e, 0x0997, 0x09a3, 0x09a3, 0x09b2, + 0x09c1, 0x09cd, 0x09d6, 0x09d6, 0x09df, 0x09ee, 0x09ee, 0x09ee, + 0x09fa, 0x09fa, 0x0a03, 0x0a0f, 0x0a1e, 0x0a27, 0x0a30, 0x0a39, + 0x0a45, 0x0a4e, 0x0a5a, 0x0a66, 0x0a6f, 0x0a6f, 0x0a78, 0x0a81, + 0x0a8d, 0x0a99, 0x0aa2, 0x0aab, 0x0abd, 0x0ac9, 0x0ad8, 0x0ae4, // Entry 100 - 13F - 0x0b0b, 0x0b17, 0x0b17, 0x0b2f, 0x0b47, 0x0b53, 0x0b5f, 0x0b6e, - 0x0b77, 0x0b83, 0x0b8f, 0x0b9e, 0x0ba7, 0x0bb3, 0x0bbf, 0x0bcb, - 0x0bcb, 0x0bd7, 0x0be6, 0x0bef, 0x0bfb, 0x0c07, 0x0c10, 0x0c1c, - 0x0c1c, 0x0c28, 0x0c37, 0x0c40, 0x0c4c, 0x0c4c, 0x0c55, 0x0c55, - 0x0c5e, 0x0c6a, 0x0c6a, 0x0c70, 0x0c70, 0x0c7c, 0x0c85, 0x0c85, - 0x0c97, 0x0ca9, 0x0cb5, 0x0cbe, 0x0cca, 0x0cd0, 0x0cd9, 0x0ce5, - 0x0ce5, 0x0cee, 0x0d00, 0x0d00, 0x0d12, 0x0d21, 0x0d21, 0x0d2a, - 0x0d39, 0x0d42, 0x0d4e, 0x0d5a, 0x0d6c, 0x0d6c, 0x0d6c, 0x0d75, + 0x0aed, 0x0afc, 0x0b08, 0x0b08, 0x0b20, 0x0b38, 0x0b44, 0x0b50, + 0x0b5f, 0x0b68, 0x0b74, 0x0b80, 0x0b8f, 0x0b98, 0x0ba4, 0x0bb0, + 0x0bbc, 0x0bbc, 0x0bc8, 0x0bd7, 0x0be0, 0x0bec, 0x0bf8, 0x0c01, + 0x0c0d, 0x0c0d, 0x0c19, 0x0c28, 0x0c31, 0x0c3d, 0x0c3d, 0x0c46, + 0x0c46, 0x0c4f, 0x0c5b, 0x0c5b, 0x0c61, 0x0c6d, 0x0c79, 0x0c82, + 0x0c82, 0x0c94, 0x0ca6, 0x0cb2, 0x0cbb, 0x0cc7, 0x0ccd, 0x0cd6, + 0x0ce2, 0x0ce2, 0x0ceb, 0x0cfa, 0x0cfa, 0x0d0c, 0x0d1b, 0x0d1b, + 0x0d24, 0x0d33, 0x0d3c, 0x0d48, 0x0d54, 0x0d60, 0x0d60, 0x0d60, // Entry 140 - 17F - 0x0d84, 0x0d8d, 0x0d96, 0x0da2, 0x0da2, 0x0db1, 0x0dba, 0x0dc3, - 0x0dcf, 0x0dd5, 0x0dde, 0x0de7, 0x0df6, 0x0e05, 0x0e11, 0x0e11, - 0x0e11, 0x0e1a, 0x0e23, 0x0e2f, 0x0e3e, 0x0e50, 0x0e50, 0x0e65, - 0x0e71, 0x0e7a, 0x0e83, 0x0e8f, 0x0e98, 0x0ea7, 0x0eb6, 0x0ec2, - 0x0ece, 0x0ee0, 0x0ee0, 0x0ee9, 0x0ee9, 0x0ef2, 0x0efb, 0x0f07, - 0x0f07, 0x0f07, 0x0f10, 0x0f1c, 0x0f28, 0x0f41, 0x0f4d, 0x0f5c, - 0x0f68, 0x0f83, 0x0f83, 0x0f83, 0x0f92, 0x0f9e, 0x0faa, 0x0fb6, - 0x0fbf, 0x0fcb, 0x0fd7, 0x0fe3, 0x0fec, 0x0fff, 0x1008, 0x1014, + 0x0d69, 0x0d75, 0x0d7e, 0x0d87, 0x0d93, 0x0d93, 0x0da2, 0x0dab, + 0x0db1, 0x0dbd, 0x0dc3, 0x0dcc, 0x0dd5, 0x0de4, 0x0df3, 0x0dff, + 0x0dff, 0x0dff, 0x0e08, 0x0e14, 0x0e20, 0x0e2f, 0x0e41, 0x0e41, + 0x0e56, 0x0e62, 0x0e6b, 0x0e74, 0x0e80, 0x0e89, 0x0e98, 0x0ea7, + 0x0eb3, 0x0ebf, 0x0ed1, 0x0ed1, 0x0eda, 0x0eda, 0x0ee3, 0x0eec, + 0x0ef8, 0x0ef8, 0x0ef8, 0x0f01, 0x0f0d, 0x0f19, 0x0f32, 0x0f3e, + 0x0f4d, 0x0f59, 0x0f74, 0x0f74, 0x0f74, 0x0f83, 0x0f8f, 0x0f9b, + 0x0fa7, 0x0fb0, 0x0fbc, 0x0fc8, 0x0fd4, 0x0fdd, 0x0ff0, 0x0ff9, // Entry 180 - 1BF - 0x1014, 0x1014, 0x1014, 0x1020, 0x1020, 0x1029, 0x1032, 0x103e, - 0x103e, 0x104e, 0x105d, 0x1066, 0x106f, 0x1078, 0x1081, 0x1081, - 0x1081, 0x108d, 0x1096, 0x10a2, 0x10ae, 0x10ba, 0x10c6, 0x10cf, - 0x10d8, 0x10e4, 0x10f0, 0x10f9, 0x1102, 0x111d, 0x112f, 0x113b, - 0x1144, 0x1153, 0x1162, 0x1168, 0x1177, 0x1183, 0x118c, 0x118c, - 0x1195, 0x11a1, 0x11ad, 0x11bc, 0x11cb, 0x11cb, 0x11d7, 0x11e6, - 0x11f5, 0x11fe, 0x120d, 0x1216, 0x1222, 0x122e, 0x123a, 0x1243, - 0x1243, 0x124f, 0x125b, 0x1264, 0x1273, 0x1273, 0x1285, 0x1291, + 0x1005, 0x1005, 0x1005, 0x1005, 0x1011, 0x1011, 0x101a, 0x1038, + 0x1041, 0x104d, 0x104d, 0x105d, 0x106c, 0x1075, 0x107e, 0x1087, + 0x1090, 0x1090, 0x1090, 0x109c, 0x10a5, 0x10b1, 0x10bd, 0x10c9, + 0x10d5, 0x10de, 0x10e7, 0x10f3, 0x10ff, 0x1108, 0x1111, 0x112c, + 0x113e, 0x114a, 0x1153, 0x1162, 0x1171, 0x1177, 0x1186, 0x1192, + 0x119b, 0x119b, 0x11a4, 0x11ad, 0x11b9, 0x11c8, 0x11d7, 0x11d7, + 0x11e3, 0x11f2, 0x1201, 0x120a, 0x1219, 0x1222, 0x122e, 0x123a, + 0x1246, 0x124f, 0x124f, 0x125b, 0x1267, 0x1270, 0x127f, 0x127f, // Entry 1C0 - 1FF - 0x129d, 0x12af, 0x12be, 0x12cd, 0x12d9, 0x12e5, 0x12f1, 0x1306, - 0x1315, 0x1321, 0x132d, 0x133f, 0x1348, 0x1348, 0x135d, 0x135d, - 0x135d, 0x1369, 0x1369, 0x1375, 0x1375, 0x1375, 0x1381, 0x138d, - 0x139f, 0x13a8, 0x13a8, 0x13b7, 0x13c6, 0x13d5, 0x13d5, 0x13d5, - 0x13de, 0x13ea, 0x13ea, 0x13ea, 0x13ea, 0x13f6, 0x13ff, 0x140b, - 0x1414, 0x142c, 0x1438, 0x1444, 0x1450, 0x1450, 0x1459, 0x1462, - 0x146e, 0x147a, 0x147a, 0x1489, 0x1495, 0x149e, 0x149e, 0x14ad, - 0x14b9, 0x14c8, 0x14c8, 0x14d4, 0x14da, 0x14ec, 0x14f8, 0x14f8, + 0x1291, 0x129d, 0x12a9, 0x12bb, 0x12ca, 0x12d9, 0x12e5, 0x12f1, + 0x12fd, 0x1312, 0x1321, 0x132d, 0x1339, 0x134b, 0x1354, 0x1354, + 0x1369, 0x1369, 0x1369, 0x1375, 0x1375, 0x1381, 0x1381, 0x1381, + 0x138d, 0x1399, 0x13ab, 0x13b4, 0x13b4, 0x13c3, 0x13d2, 0x13e1, + 0x13e1, 0x13e1, 0x13ea, 0x13f6, 0x13f6, 0x13f6, 0x13f6, 0x1408, + 0x1411, 0x141d, 0x1426, 0x143e, 0x144a, 0x1456, 0x1462, 0x1462, + 0x146b, 0x1474, 0x1480, 0x148c, 0x148c, 0x149b, 0x14a7, 0x14b0, + 0x14b0, 0x14bf, 0x14cb, 0x14da, 0x14da, 0x14e6, 0x14ec, 0x14fe, // Entry 200 - 23F - 0x14f8, 0x1504, 0x1513, 0x1525, 0x1537, 0x1543, 0x154c, 0x155e, - 0x156a, 0x1573, 0x1573, 0x157f, 0x1588, 0x1594, 0x15a0, 0x15b2, - 0x15c1, 0x15c1, 0x15c1, 0x15cd, 0x15d6, 0x15e2, 0x15eb, 0x15f7, - 0x1600, 0x160c, 0x160c, 0x1618, 0x1627, 0x1627, 0x1636, 0x1648, - 0x1657, 0x1657, 0x1663, 0x1663, 0x166f, 0x166f, 0x167b, 0x1687, - 0x1693, 0x169c, 0x16ae, 0x16c0, 0x16cf, 0x16db, 0x16e4, 0x16ed, - 0x16ed, 0x16f9, 0x16f9, 0x16f9, 0x1705, 0x1705, 0x170e, 0x171a, - 0x1726, 0x172f, 0x1738, 0x1747, 0x174d, 0x175c, 0x175c, 0x1765, + 0x150a, 0x150a, 0x150a, 0x1516, 0x1525, 0x1537, 0x1549, 0x1555, + 0x155e, 0x1570, 0x157c, 0x1585, 0x1585, 0x1591, 0x159a, 0x15a6, + 0x15b2, 0x15c4, 0x15d0, 0x15d0, 0x15d0, 0x15dc, 0x15e5, 0x15f1, + 0x15fa, 0x1606, 0x160f, 0x161b, 0x161b, 0x1627, 0x1636, 0x1636, + 0x1645, 0x1657, 0x1666, 0x1666, 0x1672, 0x1672, 0x167e, 0x167e, + 0x168a, 0x1696, 0x16a2, 0x16ab, 0x16bd, 0x16cf, 0x16de, 0x16ea, + 0x16f6, 0x16ff, 0x16ff, 0x170b, 0x170b, 0x170b, 0x1717, 0x1717, + 0x1720, 0x172c, 0x1738, 0x1741, 0x174a, 0x1759, 0x175f, 0x176e, // Entry 240 - 27F - 0x176e, 0x1777, 0x1780, 0x178c, 0x178c, 0x1792, 0x17a1, 0x17b0, - 0x17b0, 0x17bc, 0x17da, 0x17e3, 0x17f2, 0x17fb, 0x1813, 0x1825, - 0x1834, 0x1846, 0x1846, 0x1846, 0x1846, 0x1846, 0x185e, 0x1870, - 0x1885, 0x1885, 0x1885, 0x1885, 0x1894, 0x18a0, 0x18b2, 0x18c4, - 0x18d3, 0x18ef, 0x1904, 0x1910, 0x191c, -} // Size: 1250 bytes - -const zhHantLangStr string = "" + // Size: 7573 bytes + 0x176e, 0x1777, 0x1780, 0x1789, 0x1792, 0x179e, 0x179e, 0x17a4, + 0x17b3, 0x17c2, 0x17c2, 0x17ce, 0x17ec, 0x17f5, 0x1804, 0x180d, + 0x1825, 0x1837, 0x1846, 0x1858, 0x186a, 0x1879, 0x1885, 0x1891, + 0x18a9, 0x18bb, 0x18d0, 0x18d0, 0x18df, 0x18eb, 0x18fa, 0x1906, + 0x1918, 0x192a, 0x1939, 0x1955, 0x196a, 0x1976, 0x1982, +} // Size: 1254 bytes + +const zhHantLangStr string = "" + // Size: 7609 bytes "阿法文阿布哈茲文阿維斯塔文南非荷蘭文阿坎文阿姆哈拉文阿拉貢文阿拉伯文阿薩姆文阿瓦爾文艾馬拉文亞塞拜然文巴什喀爾文白俄羅斯文保加利亞文比斯拉馬文班" + "巴拉文孟加拉文藏文布列塔尼文波士尼亞文加泰蘭文車臣文查莫洛文科西嘉文克里文捷克文宗教斯拉夫文楚瓦什文威爾斯文丹麥文德文迪維西文宗卡文埃維文希" + "臘文英文世界文西班牙文愛沙尼亞文巴斯克文波斯文富拉文芬蘭文斐濟文法羅文法文西弗里西亞文愛爾蘭文蘇格蘭蓋爾文加利西亞文瓜拉尼文古吉拉特文曼島文" + "豪撒文希伯來文印地文西里莫圖土文克羅埃西亞文海地文匈牙利文亞美尼亞文赫雷羅文國際文印尼文國際文(E)伊布文四川彝文依奴皮維克文伊多文冰島文義" + "大利文因紐特文日文爪哇文喬治亞文剛果文吉庫尤文廣亞馬文哈薩克文格陵蘭文高棉文坎那達文韓文卡努里文喀什米爾文庫德文科米文康瓦耳文吉爾吉斯文拉丁" + - "文盧森堡文干達文林堡文林加拉文寮文立陶宛文魯巴加丹加文拉脫維亞文馬拉加什文馬紹爾文毛利文馬其頓文馬來亞拉姆文蒙古文馬拉地文馬來文馬爾他文緬甸" + - "文諾魯文北地畢列文尼泊爾文恩東加文荷蘭文耐諾斯克挪威文巴克摩挪威文南地畢列文納瓦霍文尼揚賈文奧克西坦文奧杰布瓦文奧羅莫文歐迪亞文奧塞提文旁遮" + - "普文巴利文波蘭文普什圖文葡萄牙文蓋楚瓦文羅曼斯文隆迪文羅馬尼亞文俄文盧安達文梵文撒丁文信德文北薩米文桑戈文僧伽羅文斯洛伐克文斯洛維尼亞文薩摩" + - "亞文紹納文索馬利文阿爾巴尼亞文塞爾維亞文斯瓦特文塞索托文巽他文瑞典文史瓦希里文坦米爾文泰盧固文塔吉克文泰文提格利尼亞文土庫曼文突尼西亞文東加" + - "文土耳其文特松加文韃靼文大溪地文維吾爾文烏克蘭文烏都文烏茲別克文溫達文越南文沃拉普克文瓦隆文沃洛夫文科薩文意第緒文約魯巴文壯文中文祖魯文亞齊" + - "文阿僑利文阿當莫文阿迪各文突尼斯阿拉伯文阿弗里希利文亞罕文阿伊努文阿卡德文阿拉巴馬文阿留申文蓋格阿爾巴尼亞文南阿爾泰文古英文昂加文阿拉米文馬" + - "普切文阿拉奧納文阿拉帕霍文阿爾及利亞阿拉伯文阿拉瓦克文摩洛哥阿拉伯文埃及阿拉伯文阿蘇文美國手語阿斯圖里亞文科塔瓦文阿瓦文俾路支文峇里文巴伐利" + - "亞文巴薩文巴姆穆文巴塔克托巴文戈馬拉文貝扎文別姆巴文貝塔維文貝納文富特文巴達加文西俾路支文博傑普爾文比科爾文比尼文班亞爾文康姆文錫克錫卡文比" + - "什奴普萊利亞文巴赫蒂亞里文布拉杰文布拉維文博多文阿庫色文布里阿特文布吉斯文布魯文比林文梅敦巴文卡多文加勒比文卡尤加文阿燦文宿霧文奇加文奇布查" + - "文查加文處奇斯文馬里文契奴克文喬克托文奇佩瓦揚文柴羅基文沙伊安文中庫德文科普特文卡皮茲文土耳其文(克里米亞半島)塞席爾克里奧爾法文卡舒布文達" + - "科他文達爾格瓦文台塔文德拉瓦文斯拉夫多格里布文丁卡文扎爾馬文多格來文下索布文中部杜順文杜亞拉文中古荷蘭文朱拉文迪尤拉文達薩文恩布文埃菲克文埃" + - "米利安文古埃及文艾卡朱克文埃蘭文中古英文中尤皮克文依汪都文埃斯特雷馬杜拉文芳族文菲律賓文托爾訥芬蘭文豐文卡真法文中古法文古法文法蘭克-普羅旺" + - "斯文北弗里西亞文東弗里西亞文弗留利文加族文加告茲文贛語加約文葛巴亞文索羅亞斯德教達里文吉茲文吉爾伯特群島文吉拉基文中古高地德文古高地德文孔卡" + - "尼文岡德文科隆達羅文哥德文格列博文古希臘文德文(瑞士)瓦尤文弗拉弗拉文古西文圭契文海達文客家話夏威夷文斐濟印地文希利蓋農文赫梯文孟文上索布文" + - "湘語胡帕文伊班文伊比比奧文伊洛闊文印古什文英格里亞文牙買加克里奧爾英文邏輯文恩格姆巴文馬恰美文猶太教-波斯文猶太阿拉伯文日德蘭文卡拉卡爾帕克" + - "文卡比爾文卡琴文卡捷文卡姆巴文卡威文卡巴爾達文卡念布文卡塔布文馬孔德文卡布威爾第文肯揚文科羅文坎剛文卡西文和闐文西桑海文科瓦文北紮紮其文卡庫" + - "文卡倫金文金邦杜文科米-彼爾米亞克文貢根文科斯雷恩文克佩列文卡拉柴-包爾卡爾文塞拉利昂克裏奧爾文基那來阿文卡累利阿文庫魯科文尚巴拉文巴菲亞文" + - "科隆文庫密克文庫特奈文拉迪諾文朗吉文拉亨達文蘭巴文列茲干文新共同語言利古里亞文利伏尼亞文拉科塔文倫巴底文芒戈文洛齊文北盧爾文拉特加萊文魯巴魯" + - "魯亞文路易塞諾文盧恩達文盧奧文米佐文盧雅文文言文拉茲文馬都拉文馬法文馬加伊文邁蒂利文望加錫文曼丁哥文馬賽文馬巴文莫克沙文曼達文門德文梅魯文克" + - "里奧文(模里西斯)中古愛爾蘭文馬夸文美塔文米克馬克文米南卡堡文滿族文曼尼普爾文莫霍克文莫西文西馬里文蒙當文多種語言克里克文米蘭德斯文馬瓦里文" + - "明打威文姆耶內文厄爾茲亞文馬贊德蘭文閩南語拿波里文納馬文低地德文尼瓦爾文尼亞斯文紐埃文阿沃那加文夸西奧文恩甘澎文諾蓋文古諾爾斯文諾維亞文曼德" + - "文字 (N’Ko)北索托文努埃爾文古尼瓦爾文尼揚韋齊文尼揚科萊文尼奧囉文尼茲馬文歐塞奇文鄂圖曼土耳其文潘加辛文巴列維文潘帕嘉文帕皮阿門托文帛" + - "琉文庇卡底文奈及利亞皮欽文賓夕法尼亞德文門諾低地德文古波斯文普法爾茨德文腓尼基文皮埃蒙特文旁狄希臘文波那貝文普魯士文古普羅旺斯文基切文欽博拉" + - "索海蘭蓋丘亞文拉賈斯坦諸文復活島文拉羅通加文羅馬格諾里文里菲亞諾文蘭博文吉普賽文羅圖馬島文盧森尼亞文羅維阿納文羅馬尼亞語系羅瓦文桑達韋文雅庫" + - "特文薩瑪利亞阿拉姆文薩布魯文撒撒克文散塔利文索拉什特拉文甘拜文桑古文西西里文蘇格蘭文薩丁尼亞-薩薩里文南庫德文塞訥卡文賽納文瑟里文塞爾庫普文" + - "東桑海文古愛爾蘭文薩莫吉希亞文希爾哈文撣文阿拉伯文(查德)希達摩文下西利西亞文塞拉亞文南薩米文魯勒薩米文伊納里薩米文斯科特薩米文索尼基文索格" + - "底亞納文蘇拉南東墎文塞雷爾文薩霍文沙特菲士蘭文蘇庫馬文蘇蘇文蘇美文葛摩文古敘利亞文敘利亞文西利西亞文圖盧文提姆文特索文泰雷諾文泰頓文蒂格雷文" + - "提夫文托克勞文查庫爾文克林貢文特林基特文塔里什文塔馬奇克文東加文(尼亞薩)托比辛文圖羅尤文太魯閣文特薩克尼恩文欽西安文穆斯林塔特文圖姆布卡文" + - "吐瓦魯文北桑海文圖瓦文中阿特拉斯塔馬塞特文烏德穆爾特文烏加列文姆本杜文根語言瓦伊文威尼斯文維普森文西佛蘭德文美茵-法蘭克尼亞文沃提克文佛羅文" + - "溫舊文瓦爾瑟文瓦拉莫文瓦瑞文瓦紹文沃皮瑞文吳語卡爾梅克文明格列爾文索加文瑤文雅浦文洋卞文耶姆巴文奈恩加圖文粵語薩波特克文布列斯符號西蘭文澤納" + - "加文標準摩洛哥塔馬塞特文祖尼文無語言內容扎扎文現代標準阿拉伯文高地德文(瑞士)低地薩克遜文佛蘭芒文摩爾多瓦文塞爾維亞克羅埃西亞文史瓦希里文(" + - "剛果)簡體中文繁體中文" - -var zhHantLangIdx = []uint16{ // 613 elements + "文盧森堡文干達文林堡文林加拉文寮文立陶宛文魯巴加丹加文拉脫維亞文馬達加斯加文馬紹爾文毛利文馬其頓文馬來亞拉姆文蒙古文馬拉地文馬來文馬爾他文緬" + + "甸文諾魯文北地畢列文尼泊爾文恩東加文荷蘭文耐諾斯克挪威文巴克摩挪威文南地畢列文納瓦霍文尼揚賈文奧克西坦文奧杰布瓦文奧羅莫文歐迪亞文奧塞提文旁" + + "遮普文巴利文波蘭文普什圖文葡萄牙文蓋楚瓦文羅曼斯文隆迪文羅馬尼亞文俄文盧安達文梵文撒丁文信德文北薩米文桑戈文僧伽羅文斯洛伐克文斯洛維尼亞文薩" + + "摩亞文紹納文索馬利文阿爾巴尼亞文塞爾維亞文斯瓦特文塞索托文巽他文瑞典文史瓦希里文坦米爾文泰盧固文塔吉克文泰文提格利尼亞文土庫曼文塞茲瓦納文東" + + "加文土耳其文特松加文韃靼文大溪地文維吾爾文烏克蘭文烏都文烏茲別克文溫達文越南文沃拉普克文瓦隆文沃洛夫文科薩文意第緒文約魯巴文壯文中文祖魯文亞" + + "齊文阿僑利文阿當莫文阿迪各文突尼斯阿拉伯文阿弗里希利文亞罕文阿伊努文阿卡德文阿拉巴馬文阿留申文蓋格阿爾巴尼亞文南阿爾泰文古英文昂加文阿拉米文" + + "馬普切文阿拉奧納文阿拉帕霍文阿爾及利亞阿拉伯文阿拉瓦克文摩洛哥阿拉伯文埃及阿拉伯文阿蘇文美國手語阿斯圖里亞文科塔瓦文阿瓦文俾路支文峇里文巴伐" + + "利亞文巴薩文巴姆穆文巴塔克托巴文戈馬拉文貝扎文別姆巴文貝塔維文貝納文富特文巴達加文西俾路支文博傑普爾文比科爾文比尼文班亞爾文康姆文錫克錫卡文" + + "比什奴普萊利亞文巴赫蒂亞里文布拉杰文布拉維文博多文阿庫色文布里阿特文布吉斯文布魯文比林文梅敦巴文卡多文加勒比文卡尤加文阿燦文宿霧文奇加文奇布" + + "查文查加文處奇斯文馬里文契奴克文喬克托文奇佩瓦揚文柴羅基文沙伊安文中庫德文科普特文卡皮茲文土耳其文(克里米亞半島)塞席爾克里奧爾法文卡舒布文" + + "達科他文達爾格瓦文台塔文德拉瓦文斯拉夫多格里布文丁卡文扎爾馬文多格來文下索布文中部杜順文杜亞拉文中古荷蘭文朱拉文迪尤拉文達薩文恩布文埃菲克文" + + "埃米利安文古埃及文艾卡朱克文埃蘭文中古英文中尤皮克文依汪都文埃斯特雷馬杜拉文芳族文菲律賓文托爾訥芬蘭文豐文卡真法文中古法文古法文法蘭克-普羅" + + "旺斯文北弗里西亞文東弗里西亞文弗留利文加族文加告茲文贛語加約文葛巴亞文索羅亞斯德教達里文吉茲文吉爾伯特群島文吉拉基文中古高地德文古高地德文孔" + + "卡尼文岡德文科隆達羅文哥德文格列博文古希臘文德文(瑞士)瓦尤文弗拉弗拉文古西文圭契文海達文客家話夏威夷文斐濟印地文希利蓋農文赫梯文孟文上索布" + + "文湘語胡帕文伊班文伊比比奧文伊洛闊文印古什文英格里亞文牙買加克里奧爾英文邏輯文恩格姆巴文馬恰美文猶太教-波斯文猶太阿拉伯文日德蘭文卡拉卡爾帕" + + "克文卡比爾文卡琴文卡捷文卡姆巴文卡威文卡巴爾達文卡念布文卡塔布文馬孔德文卡布威爾第文肯揚文科羅文坎剛文卡西文和闐文西桑海文科瓦文北紮紮其文卡" + + "庫文卡倫金文金邦杜文科米-彼爾米亞克文貢根文科斯雷恩文克佩列文卡拉柴-包爾卡爾文塞拉利昂克裏奧爾文基那來阿文卡累利阿文庫魯科文尚巴拉文巴菲亞" + + "文科隆文庫密克文庫特奈文拉迪諾文朗吉文拉亨達文蘭巴文列茲干文新共同語言利古里亞文利伏尼亞文拉科塔文倫巴底文芒戈文路易斯安那克里奧爾文洛齊文北" + + "盧爾文拉特加萊文魯巴魯魯亞文路易塞諾文盧恩達文盧奧文米佐文盧雅文文言文拉茲文馬都拉文馬法文馬加伊文邁蒂利文望加錫文曼丁哥文馬賽文馬巴文莫克沙" + + "文曼達文門德文梅魯文克里奧文(模里西斯)中古愛爾蘭文馬夸文美塔文米克馬克文米南卡堡文滿族文曼尼普爾文莫霍克文莫西文西馬里文蒙當文多種語言克里" + + "克文米蘭德斯文馬瓦里文明打威文姆耶內文厄爾茲亞文馬贊德蘭文閩南語拿波里文納馬文低地德文尼瓦爾文尼亞斯文紐埃文阿沃那加文夸西奧文恩甘澎文諾蓋文" + + "古諾爾斯文諾維亞文曼德文字 (N’Ko)北索托文努埃爾文古尼瓦爾文尼揚韋齊文尼揚科萊文尼奧囉文尼茲馬文歐塞奇文鄂圖曼土耳其文潘加辛文巴列維文" + + "潘帕嘉文帕皮阿門托文帛琉文庇卡底文奈及利亞皮欽文賓夕法尼亞德文門諾低地德文古波斯文普法爾茨德文腓尼基文皮埃蒙特文旁狄希臘文波那貝文普魯士文古" + + "普羅旺斯文基切文欽博拉索海蘭蓋丘亞文拉賈斯坦諸文復活島文拉羅通加文羅馬格諾里文里菲亞諾文蘭博文吉普賽文羅圖馬島文盧森尼亞文羅維阿納文羅馬尼亞" + + "語系羅瓦文桑達韋文雅庫特文薩瑪利亞阿拉姆文薩布魯文撒撒克文桑塔利文索拉什特拉文甘拜文桑古文西西里文蘇格蘭文薩丁尼亞-薩薩里文南庫德文塞訥卡文" + + "賽納文瑟里文塞爾庫普文東桑海文古愛爾蘭文薩莫吉希亞文希爾哈文撣文阿拉伯文(查德)希達摩文下西利西亞文塞拉亞文南薩米文魯勒薩米文伊納里薩米文斯" + + "科特薩米文索尼基文索格底亞納文蘇拉南東墎文塞雷爾文薩霍文沙特菲士蘭文蘇庫馬文蘇蘇文蘇美文葛摩文古敘利亞文敘利亞文西利西亞文圖盧文提姆文特索文" + + "泰雷諾文泰頓文蒂格雷文提夫文托克勞文查庫爾文克林貢文特林基特文塔里什文塔馬奇克文東加文(尼亞薩)托比辛文圖羅尤文太魯閣文特薩克尼恩文欽西安文" + + "穆斯林塔特文圖姆布卡文吐瓦魯文北桑海文圖瓦文中阿特拉斯塔馬塞特文烏德穆爾特文烏加列文姆本杜文未知語言瓦伊文威尼斯文維普森文西佛蘭德文美茵-法" + + "蘭克尼亞文沃提克文佛羅文溫舊文瓦爾瑟文瓦拉莫文瓦瑞文瓦紹文沃皮瑞文吳語卡爾梅克文明格列爾文索加文瑤文雅浦文洋卞文耶姆巴文奈恩加圖文粵語薩波特" + + "克文布列斯符號西蘭文澤納加文標準摩洛哥塔馬塞特文祖尼文無語言內容扎扎文現代標準阿拉伯文高地德文(瑞士)低地薩克遜文佛蘭芒文摩爾多瓦文塞爾維亞" + + "克羅埃西亞文史瓦希里文(剛果)簡體中文繁體中文" + +var zhHantLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0009, 0x0018, 0x0027, 0x0036, 0x003f, 0x004e, 0x005a, 0x0066, 0x0072, 0x007e, 0x008a, 0x0099, 0x00a8, 0x00b7, 0x00c6, @@ -26133,82 +27520,82 @@ var zhHantLangIdx = []uint16{ // 613 elements 0x0355, 0x0361, 0x0367, 0x0370, 0x037c, 0x0385, 0x0391, 0x039d, 0x03a9, 0x03b5, 0x03be, 0x03ca, 0x03d0, 0x03dc, 0x03eb, 0x03f4, 0x03fd, 0x0409, 0x0418, 0x0421, 0x042d, 0x0436, 0x043f, 0x044b, - 0x0451, 0x045d, 0x046f, 0x047e, 0x048d, 0x0499, 0x04a2, 0x04ae, - 0x04c0, 0x04c9, 0x04d5, 0x04de, 0x04ea, 0x04f3, 0x04fc, 0x050b, - 0x0517, 0x0523, 0x052c, 0x0541, 0x0553, 0x0562, 0x056e, 0x057a, - 0x0589, 0x0598, 0x05a4, 0x05b0, 0x05bc, 0x05c8, 0x05d1, 0x05da, + 0x0451, 0x045d, 0x046f, 0x047e, 0x0490, 0x049c, 0x04a5, 0x04b1, + 0x04c3, 0x04cc, 0x04d8, 0x04e1, 0x04ed, 0x04f6, 0x04ff, 0x050e, + 0x051a, 0x0526, 0x052f, 0x0544, 0x0556, 0x0565, 0x0571, 0x057d, + 0x058c, 0x059b, 0x05a7, 0x05b3, 0x05bf, 0x05cb, 0x05d4, 0x05dd, // Entry 80 - BF - 0x05e6, 0x05f2, 0x05fe, 0x060a, 0x0613, 0x0622, 0x0628, 0x0634, - 0x063a, 0x0643, 0x064c, 0x0658, 0x0661, 0x066d, 0x067c, 0x068e, - 0x069a, 0x06a3, 0x06af, 0x06c1, 0x06d0, 0x06dc, 0x06e8, 0x06f1, - 0x06fa, 0x0709, 0x0715, 0x0721, 0x072d, 0x0733, 0x0745, 0x0751, - 0x0760, 0x0769, 0x0775, 0x0781, 0x078a, 0x0796, 0x07a2, 0x07ae, - 0x07b7, 0x07c6, 0x07cf, 0x07d8, 0x07e7, 0x07f0, 0x07fc, 0x0805, - 0x0811, 0x081d, 0x0823, 0x0829, 0x0832, 0x083b, 0x0847, 0x0853, - 0x085f, 0x0874, 0x0886, 0x088f, 0x089b, 0x08a7, 0x08b6, 0x08c2, + 0x05e9, 0x05f5, 0x0601, 0x060d, 0x0616, 0x0625, 0x062b, 0x0637, + 0x063d, 0x0646, 0x064f, 0x065b, 0x0664, 0x0670, 0x067f, 0x0691, + 0x069d, 0x06a6, 0x06b2, 0x06c4, 0x06d3, 0x06df, 0x06eb, 0x06f4, + 0x06fd, 0x070c, 0x0718, 0x0724, 0x0730, 0x0736, 0x0748, 0x0754, + 0x0763, 0x076c, 0x0778, 0x0784, 0x078d, 0x0799, 0x07a5, 0x07b1, + 0x07ba, 0x07c9, 0x07d2, 0x07db, 0x07ea, 0x07f3, 0x07ff, 0x0808, + 0x0814, 0x0820, 0x0826, 0x082c, 0x0835, 0x083e, 0x084a, 0x0856, + 0x0862, 0x0877, 0x0889, 0x0892, 0x089e, 0x08aa, 0x08b9, 0x08c5, // Entry C0 - FF - 0x08da, 0x08e9, 0x08f2, 0x08fb, 0x0907, 0x0913, 0x0922, 0x0931, - 0x094c, 0x094c, 0x095b, 0x0970, 0x0982, 0x098b, 0x0997, 0x09a9, - 0x09b5, 0x09be, 0x09ca, 0x09d3, 0x09e2, 0x09eb, 0x09f7, 0x0a09, - 0x0a15, 0x0a1e, 0x0a2a, 0x0a36, 0x0a3f, 0x0a48, 0x0a54, 0x0a63, - 0x0a72, 0x0a7e, 0x0a87, 0x0a93, 0x0a9c, 0x0aab, 0x0ac3, 0x0ad5, - 0x0ae1, 0x0aed, 0x0af6, 0x0b02, 0x0b11, 0x0b1d, 0x0b26, 0x0b2f, - 0x0b3b, 0x0b44, 0x0b50, 0x0b5c, 0x0b65, 0x0b6e, 0x0b77, 0x0b83, - 0x0b8c, 0x0b98, 0x0ba1, 0x0bad, 0x0bb9, 0x0bc8, 0x0bd4, 0x0be0, + 0x08dd, 0x08ec, 0x08f5, 0x08fe, 0x090a, 0x0916, 0x0925, 0x0934, + 0x094f, 0x094f, 0x095e, 0x0973, 0x0985, 0x098e, 0x099a, 0x09ac, + 0x09b8, 0x09c1, 0x09cd, 0x09d6, 0x09e5, 0x09ee, 0x09fa, 0x0a0c, + 0x0a18, 0x0a21, 0x0a2d, 0x0a39, 0x0a42, 0x0a4b, 0x0a57, 0x0a66, + 0x0a75, 0x0a81, 0x0a8a, 0x0a96, 0x0a9f, 0x0aae, 0x0ac6, 0x0ad8, + 0x0ae4, 0x0af0, 0x0af9, 0x0b05, 0x0b14, 0x0b20, 0x0b29, 0x0b32, + 0x0b3e, 0x0b47, 0x0b53, 0x0b5f, 0x0b68, 0x0b68, 0x0b71, 0x0b7a, + 0x0b86, 0x0b8f, 0x0b9b, 0x0ba4, 0x0bb0, 0x0bbc, 0x0bcb, 0x0bd7, // Entry 100 - 13F - 0x0bec, 0x0bf8, 0x0c04, 0x0c28, 0x0c43, 0x0c4f, 0x0c5b, 0x0c6a, - 0x0c73, 0x0c7f, 0x0c88, 0x0c97, 0x0ca0, 0x0cac, 0x0cb8, 0x0cc4, - 0x0cd3, 0x0cdf, 0x0cee, 0x0cf7, 0x0d03, 0x0d0c, 0x0d15, 0x0d21, - 0x0d30, 0x0d3c, 0x0d4b, 0x0d54, 0x0d60, 0x0d6f, 0x0d7b, 0x0d93, - 0x0d9c, 0x0da8, 0x0dba, 0x0dc0, 0x0dcc, 0x0dd8, 0x0de1, 0x0dfa, - 0x0e0c, 0x0e1e, 0x0e2a, 0x0e33, 0x0e3f, 0x0e45, 0x0e4e, 0x0e5a, - 0x0e75, 0x0e7e, 0x0e93, 0x0e9f, 0x0eb1, 0x0ec0, 0x0ecc, 0x0ed5, - 0x0ee4, 0x0eed, 0x0ef9, 0x0f05, 0x0f17, 0x0f20, 0x0f2f, 0x0f38, + 0x0be3, 0x0bef, 0x0bfb, 0x0c07, 0x0c2b, 0x0c46, 0x0c52, 0x0c5e, + 0x0c6d, 0x0c76, 0x0c82, 0x0c8b, 0x0c9a, 0x0ca3, 0x0caf, 0x0cbb, + 0x0cc7, 0x0cd6, 0x0ce2, 0x0cf1, 0x0cfa, 0x0d06, 0x0d0f, 0x0d18, + 0x0d24, 0x0d33, 0x0d3f, 0x0d4e, 0x0d57, 0x0d63, 0x0d72, 0x0d7e, + 0x0d96, 0x0d9f, 0x0dab, 0x0dbd, 0x0dc3, 0x0dcf, 0x0ddb, 0x0de4, + 0x0dfd, 0x0e0f, 0x0e21, 0x0e2d, 0x0e36, 0x0e42, 0x0e48, 0x0e51, + 0x0e5d, 0x0e78, 0x0e81, 0x0e96, 0x0ea2, 0x0eb4, 0x0ec3, 0x0ecf, + 0x0ed8, 0x0ee7, 0x0ef0, 0x0efc, 0x0f08, 0x0f1a, 0x0f23, 0x0f32, // Entry 140 - 17F - 0x0f41, 0x0f4a, 0x0f53, 0x0f5f, 0x0f6e, 0x0f7d, 0x0f86, 0x0f8c, - 0x0f98, 0x0f9e, 0x0fa7, 0x0fb0, 0x0fbf, 0x0fcb, 0x0fd7, 0x0fe6, - 0x1001, 0x100a, 0x1019, 0x1025, 0x1038, 0x104a, 0x1056, 0x106b, - 0x1077, 0x1080, 0x1089, 0x1095, 0x109e, 0x10ad, 0x10b9, 0x10c5, - 0x10d1, 0x10e3, 0x10ec, 0x10f5, 0x10fe, 0x1107, 0x1110, 0x111c, - 0x1125, 0x1134, 0x113d, 0x1149, 0x1155, 0x116e, 0x1177, 0x1186, - 0x1192, 0x11ab, 0x11c6, 0x11d5, 0x11e4, 0x11f0, 0x11fc, 0x1208, - 0x1211, 0x121d, 0x1229, 0x1235, 0x123e, 0x124a, 0x1253, 0x125f, + 0x0f3b, 0x0f44, 0x0f4d, 0x0f56, 0x0f62, 0x0f71, 0x0f80, 0x0f89, + 0x0f8f, 0x0f9b, 0x0fa1, 0x0faa, 0x0fb3, 0x0fc2, 0x0fce, 0x0fda, + 0x0fe9, 0x1004, 0x100d, 0x101c, 0x1028, 0x103b, 0x104d, 0x1059, + 0x106e, 0x107a, 0x1083, 0x108c, 0x1098, 0x10a1, 0x10b0, 0x10bc, + 0x10c8, 0x10d4, 0x10e6, 0x10ef, 0x10f8, 0x1101, 0x110a, 0x1113, + 0x111f, 0x1128, 0x1137, 0x1140, 0x114c, 0x1158, 0x1171, 0x117a, + 0x1189, 0x1195, 0x11ae, 0x11c9, 0x11d8, 0x11e7, 0x11f3, 0x11ff, + 0x120b, 0x1214, 0x1220, 0x122c, 0x1238, 0x1241, 0x124d, 0x1256, // Entry 180 - 1BF - 0x126e, 0x127d, 0x128c, 0x1298, 0x12a4, 0x12ad, 0x12b6, 0x12c2, - 0x12d1, 0x12e3, 0x12f2, 0x12fe, 0x1307, 0x1310, 0x1319, 0x1322, - 0x132b, 0x1337, 0x1340, 0x134c, 0x1358, 0x1364, 0x1370, 0x1379, - 0x1382, 0x138e, 0x1397, 0x13a0, 0x13a9, 0x13c7, 0x13d9, 0x13e2, - 0x13eb, 0x13fa, 0x1409, 0x1412, 0x1421, 0x142d, 0x1436, 0x1442, - 0x144b, 0x1457, 0x1463, 0x1472, 0x147e, 0x148a, 0x1496, 0x14a5, - 0x14b4, 0x14bd, 0x14c9, 0x14d2, 0x14de, 0x14ea, 0x14f6, 0x14ff, - 0x150e, 0x151a, 0x1526, 0x152f, 0x153e, 0x154a, 0x155f, 0x156b, + 0x1262, 0x1271, 0x1280, 0x128f, 0x129b, 0x12a7, 0x12b0, 0x12ce, + 0x12d7, 0x12e3, 0x12f2, 0x1304, 0x1313, 0x131f, 0x1328, 0x1331, + 0x133a, 0x1343, 0x134c, 0x1358, 0x1361, 0x136d, 0x1379, 0x1385, + 0x1391, 0x139a, 0x13a3, 0x13af, 0x13b8, 0x13c1, 0x13ca, 0x13e8, + 0x13fa, 0x1403, 0x140c, 0x141b, 0x142a, 0x1433, 0x1442, 0x144e, + 0x1457, 0x1463, 0x146c, 0x1478, 0x1484, 0x1493, 0x149f, 0x14ab, + 0x14b7, 0x14c6, 0x14d5, 0x14de, 0x14ea, 0x14f3, 0x14ff, 0x150b, + 0x1517, 0x1520, 0x152f, 0x153b, 0x1547, 0x1550, 0x155f, 0x156b, // Entry 1C0 - 1FF - 0x1577, 0x1586, 0x1595, 0x15a4, 0x15b0, 0x15bc, 0x15c8, 0x15dd, - 0x15e9, 0x15f5, 0x1601, 0x1613, 0x161c, 0x1628, 0x163d, 0x1652, - 0x1664, 0x1670, 0x1682, 0x168e, 0x169d, 0x16ac, 0x16b8, 0x16c4, - 0x16d6, 0x16df, 0x16fd, 0x170f, 0x171b, 0x172a, 0x173c, 0x174b, - 0x1754, 0x1760, 0x176f, 0x177e, 0x178d, 0x179f, 0x17a8, 0x17b4, - 0x17c0, 0x17d8, 0x17e4, 0x17f0, 0x17fc, 0x180e, 0x1817, 0x1820, - 0x182c, 0x1838, 0x1851, 0x185d, 0x1869, 0x1872, 0x187b, 0x188a, - 0x1896, 0x18a5, 0x18b7, 0x18c3, 0x18c9, 0x18e1, 0x18ed, 0x18ff, + 0x1580, 0x158c, 0x1598, 0x15a7, 0x15b6, 0x15c5, 0x15d1, 0x15dd, + 0x15e9, 0x15fe, 0x160a, 0x1616, 0x1622, 0x1634, 0x163d, 0x1649, + 0x165e, 0x1673, 0x1685, 0x1691, 0x16a3, 0x16af, 0x16be, 0x16cd, + 0x16d9, 0x16e5, 0x16f7, 0x1700, 0x171e, 0x1730, 0x173c, 0x174b, + 0x175d, 0x176c, 0x1775, 0x1781, 0x1790, 0x179f, 0x17ae, 0x17c0, + 0x17c9, 0x17d5, 0x17e1, 0x17f9, 0x1805, 0x1811, 0x181d, 0x182f, + 0x1838, 0x1841, 0x184d, 0x1859, 0x1872, 0x187e, 0x188a, 0x1893, + 0x189c, 0x18ab, 0x18b7, 0x18c6, 0x18d8, 0x18e4, 0x18ea, 0x1902, // Entry 200 - 23F - 0x190b, 0x1917, 0x1926, 0x1938, 0x194a, 0x1956, 0x1968, 0x197a, - 0x1986, 0x198f, 0x19a1, 0x19ad, 0x19b6, 0x19bf, 0x19c8, 0x19d7, - 0x19e3, 0x19f2, 0x19fb, 0x1a04, 0x1a0d, 0x1a19, 0x1a22, 0x1a2e, - 0x1a37, 0x1a43, 0x1a4f, 0x1a5b, 0x1a6a, 0x1a76, 0x1a85, 0x1a9d, - 0x1aa9, 0x1ab5, 0x1ac1, 0x1ad3, 0x1adf, 0x1af1, 0x1b00, 0x1b0c, - 0x1b18, 0x1b21, 0x1b3f, 0x1b51, 0x1b5d, 0x1b69, 0x1b72, 0x1b7b, - 0x1b87, 0x1b93, 0x1ba2, 0x1bbb, 0x1bc7, 0x1bd0, 0x1bd9, 0x1be5, - 0x1bf1, 0x1bfa, 0x1c03, 0x1c0f, 0x1c15, 0x1c24, 0x1c33, 0x1c3c, + 0x190e, 0x1920, 0x192c, 0x1938, 0x1947, 0x1959, 0x196b, 0x1977, + 0x1989, 0x199b, 0x19a7, 0x19b0, 0x19c2, 0x19ce, 0x19d7, 0x19e0, + 0x19e9, 0x19f8, 0x1a04, 0x1a13, 0x1a1c, 0x1a25, 0x1a2e, 0x1a3a, + 0x1a43, 0x1a4f, 0x1a58, 0x1a64, 0x1a70, 0x1a7c, 0x1a8b, 0x1a97, + 0x1aa6, 0x1abe, 0x1aca, 0x1ad6, 0x1ae2, 0x1af4, 0x1b00, 0x1b12, + 0x1b21, 0x1b2d, 0x1b39, 0x1b42, 0x1b60, 0x1b72, 0x1b7e, 0x1b8a, + 0x1b96, 0x1b9f, 0x1bab, 0x1bb7, 0x1bc6, 0x1bdf, 0x1beb, 0x1bf4, + 0x1bfd, 0x1c09, 0x1c15, 0x1c1e, 0x1c27, 0x1c33, 0x1c39, 0x1c48, // Entry 240 - 27F - 0x1c42, 0x1c4b, 0x1c54, 0x1c60, 0x1c6f, 0x1c75, 0x1c84, 0x1c93, - 0x1c9c, 0x1ca8, 0x1cc6, 0x1ccf, 0x1cde, 0x1ce7, 0x1cff, 0x1cff, - 0x1cff, 0x1d17, 0x1d17, 0x1d17, 0x1d17, 0x1d17, 0x1d17, 0x1d17, - 0x1d17, 0x1d17, 0x1d17, 0x1d17, 0x1d29, 0x1d35, 0x1d35, 0x1d35, - 0x1d44, 0x1d62, 0x1d7d, 0x1d89, 0x1d95, -} // Size: 1250 bytes - -const zuLangStr string = "" + // Size: 4670 bytes + 0x1c57, 0x1c60, 0x1c66, 0x1c6f, 0x1c78, 0x1c84, 0x1c93, 0x1c99, + 0x1ca8, 0x1cb7, 0x1cc0, 0x1ccc, 0x1cea, 0x1cf3, 0x1d02, 0x1d0b, + 0x1d23, 0x1d23, 0x1d23, 0x1d3b, 0x1d3b, 0x1d3b, 0x1d3b, 0x1d3b, + 0x1d3b, 0x1d3b, 0x1d3b, 0x1d3b, 0x1d3b, 0x1d3b, 0x1d4d, 0x1d59, + 0x1d59, 0x1d59, 0x1d68, 0x1d86, 0x1da1, 0x1dad, 0x1db9, +} // Size: 1254 bytes + +const zuLangStr string = "" + // Size: 4680 bytes "isi-Afarisi-Abkhaziani-Afrikaansisi-Akanisi-Amharicisi-Aragoneseisi-Arab" + "icisi-Assameseisi-Avaricisi-Aymaraisi-Azerbaijaniisi-Bashkirisi-Belarusi" + "anisi-Bulgarii-Bislamaisi-Bambaraisi-Bengaliisi-Tibetanisi-Bretonisi-Bos" + @@ -26265,17 +27652,17 @@ const zuLangStr string = "" + // Size: 4670 bytes "ri Samiisi-Skolt Samii-Soninkei-Sranan Tongoi-Sahoi-Sukumaisi-Comoriani-" + "Syriacisi-Timneisi-Tesoisi-Tetumisi-Tigreisi-Klingonisi-Tok Pisinisi-Tar" + "okoisi-Tumbukaisi-Tuvaluisi-Tasawaqisi-Tuvinianisi-Central Atlas Tamazig" + - "htisi-Udmurtisi-Umbundui-Rootisi-VaiisiVunjoisi-Walserisi-Wolayttaisi-Wa" + - "rayisi-Warlpiriisi-Wu Chineseisi-Kalmykisi-Sogaisi-Yangbenisi-Yembaisi-C" + - "antoneseisi-Moroccan Tamazight esivamileisi-Zuniakukho okuqukethwe kolim" + - "iisi-Zazaisi-Arabic esivamile sesimanjeisi-Austrian Germani-Swiss High G" + - "ermanisi-Austrillian Englishi-Canadian Englishi-British Englishi-America" + - "n Englishisi-Latin American Spanishi-European Spanishi-Mexican Spanishi-" + - "Canadian Frenchi-Swiss Frenchisi-Low Saxonisi-Flemishisi-Brazillian Port" + - "ugueseisi-European Portugueseisi-Moldavianisi-Serbo-Croatianisi-Congo Sw" + - "ahiliisi-Chinese (esenziwe-lula)isi-Chinese (Okosiko)" - -var zuLangIdx = []uint16{ // 613 elements + "htisi-Udmurtisi-Umbunduulimi olungaziwaisi-VaiisiVunjoisi-Walserisi-Wola" + + "yttaisi-Warayisi-Warlpiriisi-Wu Chineseisi-Kalmykisi-Sogaisi-Yangbenisi-" + + "Yembaisi-Cantoneseisi-Moroccan Tamazight esivamileisi-Zuniakukho okuquke" + + "thwe kolimiisi-Zazaisi-Arabic esivamile sesimanjeisi-Austrian Germani-Sw" + + "iss High Germanisi-Austrillian Englishi-Canadian Englishi-British Englis" + + "hi-American Englishisi-Latin American Spanishi-European Spanishi-Mexican" + + " Spanishi-Canadian Frenchi-Swiss Frenchisi-Low Saxonisi-Flemishisi-Brazi" + + "llian Portugueseisi-European Portugueseisi-Moldavianisi-Serbo-Croatianis" + + "i-Congo Swahiliisi-Chinese (esenziwe-lula)isi-Chinese (Okosiko)" + +var zuLangIdx = []uint16{ // 615 elements // Entry 0 - 3F 0x0000, 0x0008, 0x0015, 0x0015, 0x0020, 0x0028, 0x0033, 0x0040, 0x004a, 0x0056, 0x0060, 0x006a, 0x0079, 0x0084, 0x0092, 0x009d, @@ -26310,83 +27697,83 @@ var zuLangIdx = []uint16{ // 613 elements 0x0819, 0x0819, 0x0822, 0x0822, 0x082a, 0x082a, 0x082a, 0x083d, 0x0849, 0x0849, 0x084f, 0x084f, 0x084f, 0x0858, 0x0858, 0x0858, 0x0858, 0x0858, 0x0860, 0x0860, 0x0860, 0x086c, 0x086c, 0x0872, - 0x0872, 0x0872, 0x0872, 0x0872, 0x0872, 0x087d, 0x0886, 0x0886, - 0x0886, 0x0892, 0x089a, 0x089a, 0x08a5, 0x08a5, 0x08b1, 0x08bd, + 0x0872, 0x0872, 0x0872, 0x0872, 0x0872, 0x0872, 0x087d, 0x0886, + 0x0886, 0x0886, 0x0892, 0x089a, 0x089a, 0x08a5, 0x08a5, 0x08b1, // Entry 100 - 13F - 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08e7, 0x08e7, 0x08f1, 0x08fb, - 0x0904, 0x0904, 0x0904, 0x090e, 0x090e, 0x0917, 0x0917, 0x0928, - 0x0928, 0x0931, 0x0931, 0x093f, 0x093f, 0x0949, 0x0951, 0x0959, - 0x0959, 0x0959, 0x0963, 0x0963, 0x0963, 0x0963, 0x096d, 0x096d, - 0x096d, 0x0979, 0x0979, 0x0980, 0x0980, 0x0980, 0x0980, 0x0980, - 0x0980, 0x0980, 0x098c, 0x0992, 0x099c, 0x09ab, 0x09ab, 0x09ab, - 0x09ab, 0x09b3, 0x09c1, 0x09c1, 0x09c1, 0x09c1, 0x09c1, 0x09c1, - 0x09ce, 0x09ce, 0x09ce, 0x09ce, 0x09de, 0x09de, 0x09de, 0x09e7, + 0x08bd, 0x08d0, 0x08d0, 0x08d0, 0x08d0, 0x08e7, 0x08e7, 0x08f1, + 0x08fb, 0x0904, 0x0904, 0x0904, 0x090e, 0x090e, 0x0917, 0x0917, + 0x0928, 0x0928, 0x0931, 0x0931, 0x093f, 0x093f, 0x0949, 0x0951, + 0x0959, 0x0959, 0x0959, 0x0963, 0x0963, 0x0963, 0x0963, 0x096d, + 0x096d, 0x096d, 0x0979, 0x0979, 0x0980, 0x0980, 0x0980, 0x0980, + 0x0980, 0x0980, 0x0980, 0x098c, 0x0992, 0x099c, 0x09ab, 0x09ab, + 0x09ab, 0x09ab, 0x09b3, 0x09c1, 0x09c1, 0x09c1, 0x09c1, 0x09c1, + 0x09c1, 0x09ce, 0x09ce, 0x09ce, 0x09ce, 0x09de, 0x09de, 0x09de, // Entry 140 - 17F - 0x09f4, 0x09f4, 0x0a05, 0x0a11, 0x0a11, 0x0a1f, 0x0a1f, 0x0a28, - 0x0a39, 0x0a4a, 0x0a52, 0x0a5a, 0x0a64, 0x0a6d, 0x0a77, 0x0a77, - 0x0a77, 0x0a81, 0x0a8b, 0x0a96, 0x0a96, 0x0a96, 0x0a96, 0x0a96, - 0x0aa0, 0x0aaa, 0x0ab1, 0x0aba, 0x0aba, 0x0ac7, 0x0ac7, 0x0acf, - 0x0ada, 0x0aea, 0x0aea, 0x0af2, 0x0af2, 0x0afb, 0x0afb, 0x0b0b, - 0x0b0b, 0x0b0b, 0x0b13, 0x0b1f, 0x0b2b, 0x0b3b, 0x0b46, 0x0b46, - 0x0b50, 0x0b63, 0x0b63, 0x0b63, 0x0b6f, 0x0b79, 0x0b84, 0x0b8d, - 0x0b9a, 0x0ba3, 0x0ba3, 0x0bad, 0x0bb6, 0x0bb6, 0x0bb6, 0x0bc2, + 0x09e7, 0x09f4, 0x09f4, 0x0a05, 0x0a11, 0x0a11, 0x0a1f, 0x0a1f, + 0x0a28, 0x0a39, 0x0a4a, 0x0a52, 0x0a5a, 0x0a64, 0x0a6d, 0x0a77, + 0x0a77, 0x0a77, 0x0a81, 0x0a8b, 0x0a96, 0x0a96, 0x0a96, 0x0a96, + 0x0a96, 0x0aa0, 0x0aaa, 0x0ab1, 0x0aba, 0x0aba, 0x0ac7, 0x0ac7, + 0x0acf, 0x0ada, 0x0aea, 0x0aea, 0x0af2, 0x0af2, 0x0afb, 0x0afb, + 0x0b0b, 0x0b0b, 0x0b0b, 0x0b13, 0x0b1f, 0x0b2b, 0x0b3b, 0x0b46, + 0x0b46, 0x0b50, 0x0b63, 0x0b63, 0x0b63, 0x0b6f, 0x0b79, 0x0b84, + 0x0b8d, 0x0b9a, 0x0ba3, 0x0ba3, 0x0bad, 0x0bb6, 0x0bb6, 0x0bb6, // Entry 180 - 1BF - 0x0bc2, 0x0bc2, 0x0bc2, 0x0bcc, 0x0bcc, 0x0bcc, 0x0bd4, 0x0be5, - 0x0be5, 0x0bf3, 0x0bf3, 0x0bfc, 0x0c03, 0x0c0b, 0x0c14, 0x0c14, - 0x0c14, 0x0c20, 0x0c20, 0x0c2a, 0x0c36, 0x0c41, 0x0c41, 0x0c4a, - 0x0c4a, 0x0c54, 0x0c54, 0x0c5d, 0x0c65, 0x0c71, 0x0c71, 0x0c83, - 0x0c8e, 0x0c98, 0x0ca7, 0x0ca7, 0x0cb3, 0x0cbd, 0x0cc6, 0x0cc6, - 0x0cd1, 0x0ce3, 0x0cec, 0x0cf9, 0x0cf9, 0x0cf9, 0x0cf9, 0x0d02, - 0x0d11, 0x0d24, 0x0d32, 0x0d3a, 0x0d48, 0x0d52, 0x0d5a, 0x0d64, - 0x0d64, 0x0d6e, 0x0d7b, 0x0d84, 0x0d84, 0x0d84, 0x0d8e, 0x0da0, + 0x0bc2, 0x0bc2, 0x0bc2, 0x0bc2, 0x0bcc, 0x0bcc, 0x0bcc, 0x0bcc, + 0x0bd4, 0x0be5, 0x0be5, 0x0bf3, 0x0bf3, 0x0bfc, 0x0c03, 0x0c0b, + 0x0c14, 0x0c14, 0x0c14, 0x0c20, 0x0c20, 0x0c2a, 0x0c36, 0x0c41, + 0x0c41, 0x0c4a, 0x0c4a, 0x0c54, 0x0c54, 0x0c5d, 0x0c65, 0x0c71, + 0x0c71, 0x0c83, 0x0c8e, 0x0c98, 0x0ca7, 0x0ca7, 0x0cb3, 0x0cbd, + 0x0cc6, 0x0cc6, 0x0cd1, 0x0ce3, 0x0cec, 0x0cf9, 0x0cf9, 0x0cf9, + 0x0cf9, 0x0d02, 0x0d11, 0x0d24, 0x0d32, 0x0d3a, 0x0d48, 0x0d52, + 0x0d5a, 0x0d64, 0x0d64, 0x0d6e, 0x0d7b, 0x0d84, 0x0d84, 0x0d84, // Entry 1C0 - 1FF - 0x0da8, 0x0da8, 0x0da8, 0x0db4, 0x0db4, 0x0db4, 0x0db4, 0x0db4, - 0x0dc2, 0x0dc2, 0x0dce, 0x0ddc, 0x0de7, 0x0de7, 0x0dfa, 0x0dfa, - 0x0dfa, 0x0dfa, 0x0dfa, 0x0dfa, 0x0dfa, 0x0dfa, 0x0dfa, 0x0e06, - 0x0e06, 0x0e13, 0x0e13, 0x0e13, 0x0e1c, 0x0e28, 0x0e28, 0x0e28, - 0x0e31, 0x0e31, 0x0e31, 0x0e31, 0x0e31, 0x0e3e, 0x0e45, 0x0e4e, - 0x0e55, 0x0e55, 0x0e60, 0x0e60, 0x0e69, 0x0e69, 0x0e74, 0x0e7d, - 0x0e87, 0x0e8e, 0x0e8e, 0x0ea0, 0x0ea0, 0x0ea8, 0x0ea8, 0x0ea8, - 0x0ebb, 0x0ebb, 0x0ebb, 0x0ec8, 0x0ece, 0x0ece, 0x0ece, 0x0ece, + 0x0d8e, 0x0da0, 0x0da8, 0x0da8, 0x0da8, 0x0db4, 0x0db4, 0x0db4, + 0x0db4, 0x0db4, 0x0dc2, 0x0dc2, 0x0dce, 0x0ddc, 0x0de7, 0x0de7, + 0x0dfa, 0x0dfa, 0x0dfa, 0x0dfa, 0x0dfa, 0x0dfa, 0x0dfa, 0x0dfa, + 0x0dfa, 0x0e06, 0x0e06, 0x0e13, 0x0e13, 0x0e13, 0x0e1c, 0x0e28, + 0x0e28, 0x0e28, 0x0e31, 0x0e31, 0x0e31, 0x0e31, 0x0e31, 0x0e3e, + 0x0e45, 0x0e4e, 0x0e55, 0x0e55, 0x0e60, 0x0e60, 0x0e69, 0x0e69, + 0x0e74, 0x0e7d, 0x0e87, 0x0e8e, 0x0e8e, 0x0ea0, 0x0ea0, 0x0ea8, + 0x0ea8, 0x0ea8, 0x0ebb, 0x0ebb, 0x0ebb, 0x0ec8, 0x0ece, 0x0ece, // Entry 200 - 23F - 0x0ece, 0x0edd, 0x0eea, 0x0ef8, 0x0f06, 0x0f0f, 0x0f0f, 0x0f1d, - 0x0f1d, 0x0f23, 0x0f23, 0x0f2b, 0x0f2b, 0x0f2b, 0x0f37, 0x0f37, - 0x0f3f, 0x0f3f, 0x0f3f, 0x0f48, 0x0f50, 0x0f50, 0x0f59, 0x0f62, - 0x0f62, 0x0f62, 0x0f62, 0x0f6d, 0x0f6d, 0x0f6d, 0x0f6d, 0x0f6d, - 0x0f7a, 0x0f7a, 0x0f84, 0x0f84, 0x0f84, 0x0f84, 0x0f8f, 0x0f99, - 0x0fa4, 0x0fb0, 0x0fcb, 0x0fd5, 0x0fd5, 0x0fe0, 0x0fe6, 0x0fed, - 0x0fed, 0x0fed, 0x0fed, 0x0fed, 0x0fed, 0x0fed, 0x0ff5, 0x0fff, - 0x100b, 0x1014, 0x1014, 0x1020, 0x102e, 0x1038, 0x1038, 0x1040, + 0x0ece, 0x0ece, 0x0ece, 0x0edd, 0x0eea, 0x0ef8, 0x0f06, 0x0f0f, + 0x0f0f, 0x0f1d, 0x0f1d, 0x0f23, 0x0f23, 0x0f2b, 0x0f2b, 0x0f2b, + 0x0f37, 0x0f37, 0x0f3f, 0x0f3f, 0x0f3f, 0x0f48, 0x0f50, 0x0f50, + 0x0f59, 0x0f62, 0x0f62, 0x0f62, 0x0f62, 0x0f6d, 0x0f6d, 0x0f6d, + 0x0f6d, 0x0f6d, 0x0f7a, 0x0f7a, 0x0f84, 0x0f84, 0x0f84, 0x0f84, + 0x0f8f, 0x0f99, 0x0fa4, 0x0fb0, 0x0fcb, 0x0fd5, 0x0fd5, 0x0fe0, + 0x0ff0, 0x0ff7, 0x0ff7, 0x0ff7, 0x0ff7, 0x0ff7, 0x0ff7, 0x0ff7, + 0x0fff, 0x1009, 0x1015, 0x101e, 0x101e, 0x102a, 0x1038, 0x1042, // Entry 240 - 27F - 0x1040, 0x1040, 0x104b, 0x1054, 0x1054, 0x1061, 0x1061, 0x1061, - 0x1061, 0x1061, 0x1081, 0x1089, 0x10a2, 0x10aa, 0x10c8, 0x10c8, - 0x10db, 0x10ee, 0x1105, 0x1117, 0x1128, 0x113a, 0x1154, 0x1166, - 0x1177, 0x1177, 0x1188, 0x1196, 0x11a3, 0x11ae, 0x11c7, 0x11de, - 0x11eb, 0x11fd, 0x120e, 0x1229, 0x123e, -} // Size: 1250 bytes + 0x1042, 0x104a, 0x104a, 0x104a, 0x1055, 0x105e, 0x105e, 0x106b, + 0x106b, 0x106b, 0x106b, 0x106b, 0x108b, 0x1093, 0x10ac, 0x10b4, + 0x10d2, 0x10d2, 0x10e5, 0x10f8, 0x110f, 0x1121, 0x1132, 0x1144, + 0x115e, 0x1170, 0x1181, 0x1181, 0x1192, 0x11a0, 0x11ad, 0x11b8, + 0x11d1, 0x11e8, 0x11f5, 0x1207, 0x1218, 0x1233, 0x1248, +} // Size: 1254 bytes -// Total size for lang: 1022817 bytes (1022 KB) +// Total size for lang: 1094462 bytes (1094 KB) -// Number of keys: 175 +// Number of keys: 178 var ( scriptIndex = tagIndex{ "", "", "AdlmAfakAghbAhomArabArmiArmnAvstBaliBamuBassBatkBengBhksBlisBopoBrahBrai" + "BugiBuhdCakmCansCariChamCherCirtCoptCprtCyrlCyrsDevaDsrtDuplEgydEgyh" + - "EgypElbaEthiGeokGeorGlagGothGranGrekGujrGuruHanbHangHaniHanoHansHant" + - "HatrHebrHiraHluwHmngHrktHungIndsItalJamoJavaJpanJurcKaliKanaKharKhmr" + - "KhojKndaKoreKpelKthiLanaLaooLatfLatgLatnLepcLimbLinaLinbLisuLomaLyci" + - "LydiMahjMandManiMarcMayaMendMercMeroMlymModiMongMoonMrooMteiMultMymr" + - "NarbNbatNewaNkgbNkooNshuOgamOlckOrkhOryaOsgeOsmaPalmPaucPermPhagPhli" + - "PhlpPhlvPhnxPlrdPrtiRjngRoroRunrSamrSaraSarbSaurSgnwShawShrdSiddSind" + - "SinhSoraSundSyloSyrcSyreSyrjSyrnTagbTakrTaleTaluTamlTangTavtTeluTeng" + - "TfngTglgThaaThaiTibtTirhUgarVaiiVispWaraWoleXpeoXsuxYiiiZinhZmthZsye" + - "ZsymZxxxZyyyZzzz", + "EgypElbaEthiGeokGeorGlagGonmGothGranGrekGujrGuruHanbHangHaniHanoHans" + + "HantHatrHebrHiraHluwHmngHrktHungIndsItalJamoJavaJpanJurcKaliKanaKhar" + + "KhmrKhojKndaKoreKpelKthiLanaLaooLatfLatgLatnLepcLimbLinaLinbLisuLoma" + + "LyciLydiMahjMandManiMarcMayaMendMercMeroMlymModiMongMoonMrooMteiMult" + + "MymrNarbNbatNewaNkgbNkooNshuOgamOlckOrkhOryaOsgeOsmaPalmPaucPermPhag" + + "PhliPhlpPhlvPhnxPlrdPrtiRjngRoroRunrSamrSaraSarbSaurSgnwShawShrdSidd" + + "SindSinhSoraSoyoSundSyloSyrcSyreSyrjSyrnTagbTakrTaleTaluTamlTangTavt" + + "TeluTengTfngTglgThaaThaiTibtTirhUgarVaiiVispWaraWoleXpeoXsuxYiiiZanb" + + "ZinhZmthZsyeZsymZxxxZyyyZzzz", } ) -var scriptHeaders = [252]header{ +var scriptHeaders = [261]header{ { // af afScriptStr, afScriptIdx, @@ -26439,32 +27826,33 @@ var scriptHeaders = [252]header{ "blevarang kshitiwoleaipersa antiguucuneiforme sumeriu acadiuyiheredá" + "uescritura matemáticaemojisímbolosnon escritucomúnescritura desconoc" + "ida", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0004, 0x0009, 0x001a, 0x001e, 0x0024, 0x0035, 0x003c, 0x0045, 0x004d, 0x0052, 0x005b, 0x0060, 0x0069, 0x006d, 0x007f, 0x0087, 0x008d, 0x0094, 0x009b, 0x00a0, 0x00a6, 0x00d4, 0x00d9, 0x00dd, 0x00e4, 0x00e9, 0x00ee, 0x00f6, 0x00ff, 0x012a, 0x0134, 0x0144, 0x0159, 0x016c, 0x0180, 0x0198, 0x019f, 0x01a6, 0x01b7, - 0x01bf, 0x01cb, 0x01d2, 0x01d9, 0x01df, 0x01e7, 0x01ef, 0x01f3, - 0x01f9, 0x01fc, 0x0207, 0x0217, 0x0226, 0x022d, 0x0234, 0x023e, - 0x0255, 0x0261, 0x0275, 0x0285, 0x028a, 0x029a, 0x029e, 0x02a6, - // Entry 40 - 7F - 0x02ae, 0x02b5, 0x02bd, 0x02c5, 0x02cf, 0x02d6, 0x02dc, 0x02e4, - 0x02eb, 0x02f1, 0x02f7, 0x02fc, 0x0304, 0x0313, 0x0323, 0x032a, - 0x0330, 0x0335, 0x033e, 0x0347, 0x0359, 0x035d, 0x0362, 0x0367, - 0x036f, 0x0376, 0x037f, 0x0383, 0x0396, 0x039b, 0x03b0, 0x03ba, - 0x03c3, 0x03c7, 0x03cd, 0x03d7, 0x03da, 0x03e6, 0x03ed, 0x03f4, - 0x040c, 0x0414, 0x0418, 0x0425, 0x042b, 0x0431, 0x0436, 0x043e, - 0x0444, 0x0449, 0x044d, 0x0454, 0x045d, 0x0468, 0x0478, 0x048d, - 0x04a6, 0x04b9, 0x04cb, 0x04d2, 0x04e6, 0x04fd, 0x0503, 0x050d, - // Entry 80 - BF - 0x0512, 0x051c, 0x0522, 0x0538, 0x0542, 0x0555, 0x055d, 0x0564, - 0x056b, 0x0574, 0x057d, 0x0589, 0x0592, 0x059e, 0x05a5, 0x05b7, - 0x05c9, 0x05d9, 0x05e1, 0x05e6, 0x05ec, 0x05f9, 0x05fe, 0x0604, - 0x060c, 0x0612, 0x0619, 0x0621, 0x0628, 0x062e, 0x0638, 0x0640, - 0x0647, 0x0651, 0x0654, 0x0660, 0x066d, 0x0673, 0x0680, 0x0699, - 0x069b, 0x06a3, 0x06b8, 0x06bd, 0x06c6, 0x06d1, 0x06d7, 0x06ec, + 0x01bf, 0x01cb, 0x01cb, 0x01d2, 0x01d9, 0x01df, 0x01e7, 0x01ef, + 0x01f3, 0x01f9, 0x01fc, 0x0207, 0x0217, 0x0226, 0x022d, 0x0234, + 0x023e, 0x0255, 0x0261, 0x0275, 0x0285, 0x028a, 0x029a, 0x029e, + // Entry 40 - 7F + 0x02a6, 0x02ae, 0x02b5, 0x02bd, 0x02c5, 0x02cf, 0x02d6, 0x02dc, + 0x02e4, 0x02eb, 0x02f1, 0x02f7, 0x02fc, 0x0304, 0x0313, 0x0323, + 0x032a, 0x0330, 0x0335, 0x033e, 0x0347, 0x0359, 0x035d, 0x0362, + 0x0367, 0x036f, 0x0376, 0x037f, 0x0383, 0x0396, 0x039b, 0x03b0, + 0x03ba, 0x03c3, 0x03c7, 0x03cd, 0x03d7, 0x03da, 0x03e6, 0x03ed, + 0x03f4, 0x040c, 0x0414, 0x0418, 0x0425, 0x042b, 0x0431, 0x0436, + 0x043e, 0x0444, 0x0449, 0x044d, 0x0454, 0x045d, 0x0468, 0x0478, + 0x048d, 0x04a6, 0x04b9, 0x04cb, 0x04d2, 0x04e6, 0x04fd, 0x0503, + // Entry 80 - BF + 0x050d, 0x0512, 0x051c, 0x0522, 0x0538, 0x0542, 0x0555, 0x055d, + 0x0564, 0x056b, 0x0574, 0x057d, 0x0589, 0x0589, 0x0592, 0x059e, + 0x05a5, 0x05b7, 0x05c9, 0x05d9, 0x05e1, 0x05e6, 0x05ec, 0x05f9, + 0x05fe, 0x0604, 0x060c, 0x0612, 0x0619, 0x0621, 0x0628, 0x062e, + 0x0638, 0x0640, 0x0647, 0x0651, 0x0654, 0x0660, 0x066d, 0x0673, + 0x0680, 0x0699, 0x069b, 0x069b, 0x06a3, 0x06b8, 0x06bd, 0x06c6, + 0x06d1, 0x06d7, 0x06ec, }, }, { // az @@ -26489,32 +27877,33 @@ var scriptHeaders = [252]header{ "старамангольскаем’янмарскаеорыясінгальскаетамільскаетэлугутанатайск" + "аетыбецкаематэматычныя знакіэмодзісімвалыбеспісьменнаязвычайнаеневя" + "домае пісьмо", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x0010, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0038, 0x0038, 0x0038, 0x0048, 0x0048, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x006f, 0x006f, 0x0083, 0x0083, 0x0083, 0x0083, 0x0083, 0x0083, 0x0083, 0x0095, 0x0095, - 0x00a9, 0x00a9, 0x00a9, 0x00a9, 0x00bb, 0x00cd, 0x00dd, 0x00f7, - 0x0105, 0x010b, 0x010b, 0x0126, 0x0143, 0x0143, 0x0155, 0x0165, - 0x0165, 0x0165, 0x0195, 0x0195, 0x0195, 0x0195, 0x019d, 0x019d, + 0x00a9, 0x00a9, 0x00a9, 0x00a9, 0x00a9, 0x00bb, 0x00cd, 0x00dd, + 0x00f7, 0x0105, 0x010b, 0x010b, 0x0126, 0x0143, 0x0143, 0x0155, + 0x0165, 0x0165, 0x0165, 0x0195, 0x0195, 0x0195, 0x0195, 0x019d, // Entry 40 - 7F - 0x01ad, 0x01ad, 0x01ad, 0x01bd, 0x01bd, 0x01cf, 0x01cf, 0x01db, - 0x01ed, 0x01ed, 0x01ed, 0x01ed, 0x01fb, 0x01fb, 0x01fb, 0x020b, + 0x019d, 0x01ad, 0x01ad, 0x01ad, 0x01bd, 0x01bd, 0x01cf, 0x01cf, + 0x01db, 0x01ed, 0x01ed, 0x01ed, 0x01ed, 0x01fb, 0x01fb, 0x01fb, 0x020b, 0x020b, 0x020b, 0x020b, 0x020b, 0x020b, 0x020b, 0x020b, 0x020b, 0x020b, 0x020b, 0x020b, 0x020b, 0x020b, 0x020b, 0x020b, - 0x021b, 0x021b, 0x023b, 0x023b, 0x023b, 0x023b, 0x023b, 0x0252, + 0x020b, 0x021b, 0x021b, 0x023b, 0x023b, 0x023b, 0x023b, 0x023b, 0x0252, 0x0252, 0x0252, 0x0252, 0x0252, 0x0252, 0x0252, 0x0252, - 0x0252, 0x025a, 0x025a, 0x025a, 0x025a, 0x025a, 0x025a, 0x025a, + 0x0252, 0x0252, 0x025a, 0x025a, 0x025a, 0x025a, 0x025a, 0x025a, 0x025a, 0x025a, 0x025a, 0x025a, 0x025a, 0x025a, 0x025a, 0x025a, // Entry 80 - BF 0x025a, 0x025a, 0x025a, 0x025a, 0x025a, 0x025a, 0x025a, 0x025a, - 0x025a, 0x025a, 0x0270, 0x0270, 0x0270, 0x0270, 0x0270, 0x0270, - 0x0270, 0x0270, 0x0270, 0x0270, 0x0270, 0x0270, 0x0284, 0x0284, - 0x0284, 0x0290, 0x0290, 0x0290, 0x0290, 0x0298, 0x02a6, 0x02b6, - 0x02b6, 0x02b6, 0x02b6, 0x02b6, 0x02b6, 0x02b6, 0x02b6, 0x02b6, - 0x02b6, 0x02b6, 0x02d9, 0x02e5, 0x02f3, 0x030d, 0x031f, 0x033e, + 0x025a, 0x025a, 0x025a, 0x0270, 0x0270, 0x0270, 0x0270, 0x0270, + 0x0270, 0x0270, 0x0270, 0x0270, 0x0270, 0x0270, 0x0270, 0x0270, + 0x0284, 0x0284, 0x0284, 0x0290, 0x0290, 0x0290, 0x0290, 0x0298, + 0x02a6, 0x02b6, 0x02b6, 0x02b6, 0x02b6, 0x02b6, 0x02b6, 0x02b6, + 0x02b6, 0x02b6, 0x02b6, 0x02b6, 0x02b6, 0x02d9, 0x02e5, 0x02f3, + 0x030d, 0x031f, 0x033e, }, }, {}, // bem @@ -26532,7 +27921,7 @@ var scriptHeaders = [252]header{ { // bo "རྒྱ་ཡིག་གསར་པ།རྒྱ་ཡིག་རྙིང་པ།བོད་ཡིག་སྙན་བརྒྱུད། ཡིག་རིགས་སུ་མ་བཀོད་པའི་" + "ཟིན་ཐོ།", - []uint16{ // 174 elements + []uint16{ // 177 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -26540,7 +27929,7 @@ var scriptHeaders = [252]header{ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x002a, 0x0057, 0x0057, 0x0057, 0x0057, + 0x0000, 0x0000, 0x0000, 0x0000, 0x002a, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, // Entry 40 - 7F 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, @@ -26555,9 +27944,10 @@ var scriptHeaders = [252]header{ 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, - 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x006f, + 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, + 0x0057, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, - 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x00eb, + 0x00eb, }, }, {}, // bo-IN @@ -26571,32 +27961,33 @@ var scriptHeaders = [252]header{ "neksirieksiriek Estrangelāsiriek ar C’hornôgsiriek ar Retertamilekte" + "lougoutagalogthaanathaitibetanekougaritekvaipersek kozhnotadur jedon" + "ielarouezioùanskrivetboutinskritur dianav", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0018, 0x0022, 0x0029, 0x0030, 0x0030, 0x0030, 0x0030, 0x0037, 0x0037, 0x0037, 0x003f, 0x003f, 0x0046, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x004d, 0x0053, 0x0053, 0x005b, 0x006f, 0x0079, 0x0079, 0x0079, 0x0079, 0x0079, 0x008d, 0x008d, 0x0094, 0x0094, - 0x009d, 0x00a7, 0x00ac, 0x00ac, 0x00b5, 0x00bd, 0x00c5, 0x00c5, - 0x00cc, 0x00cf, 0x00cf, 0x00da, 0x00e7, 0x00e7, 0x00ee, 0x00f6, - 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x0114, 0x0114, 0x011b, + 0x009d, 0x00a7, 0x00a7, 0x00ac, 0x00ac, 0x00b5, 0x00bd, 0x00c5, + 0x00c5, 0x00cc, 0x00cf, 0x00cf, 0x00da, 0x00e7, 0x00e7, 0x00ee, + 0x00f6, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x0114, 0x0114, // Entry 40 - 7F - 0x0122, 0x0122, 0x0122, 0x012a, 0x012a, 0x012f, 0x012f, 0x0136, - 0x013e, 0x013e, 0x013e, 0x013e, 0x0144, 0x0144, 0x0153, 0x0158, + 0x011b, 0x0122, 0x0122, 0x0122, 0x012a, 0x012a, 0x012f, 0x012f, + 0x0136, 0x013e, 0x013e, 0x013e, 0x013e, 0x0144, 0x0144, 0x0153, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, - 0x0158, 0x0158, 0x0158, 0x0158, 0x016b, 0x016b, 0x016b, 0x016b, - 0x0174, 0x0174, 0x017c, 0x017c, 0x017c, 0x017c, 0x017c, 0x0183, - 0x0183, 0x0183, 0x0183, 0x0183, 0x0183, 0x0183, 0x0187, 0x0187, - 0x0187, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, + 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x016b, 0x016b, 0x016b, + 0x016b, 0x0174, 0x0174, 0x017c, 0x017c, 0x017c, 0x017c, 0x017c, + 0x0183, 0x0183, 0x0183, 0x0183, 0x0183, 0x0183, 0x0183, 0x0187, + 0x0187, 0x0187, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, 0x018c, // Entry 80 - BF - 0x0191, 0x0191, 0x0191, 0x0191, 0x0191, 0x0191, 0x0191, 0x0191, - 0x0191, 0x0191, 0x019a, 0x019a, 0x01a2, 0x01a2, 0x01a8, 0x01ba, - 0x01cf, 0x01de, 0x01de, 0x01de, 0x01de, 0x01de, 0x01e5, 0x01e5, - 0x01e5, 0x01ed, 0x01ed, 0x01ed, 0x01f4, 0x01fa, 0x01fe, 0x0207, - 0x0207, 0x0210, 0x0213, 0x0213, 0x0213, 0x0213, 0x021e, 0x021e, - 0x021e, 0x021e, 0x022e, 0x022e, 0x0238, 0x0241, 0x0247, 0x0255, + 0x018c, 0x0191, 0x0191, 0x0191, 0x0191, 0x0191, 0x0191, 0x0191, + 0x0191, 0x0191, 0x0191, 0x019a, 0x019a, 0x019a, 0x01a2, 0x01a2, + 0x01a8, 0x01ba, 0x01cf, 0x01de, 0x01de, 0x01de, 0x01de, 0x01de, + 0x01e5, 0x01e5, 0x01e5, 0x01ed, 0x01ed, 0x01ed, 0x01f4, 0x01fa, + 0x01fe, 0x0207, 0x0207, 0x0210, 0x0213, 0x0213, 0x0213, 0x0213, + 0x021e, 0x021e, 0x021e, 0x021e, 0x021e, 0x022e, 0x022e, 0x0238, + 0x0241, 0x0247, 0x0255, }, }, { // brx @@ -26616,90 +28007,93 @@ var scriptHeaders = [252]header{ "ीरीआकपूर्वी सीरीआकतागबानवाताई लेनया ताई लुएतमीळतेलुगुतेंगवारतीफीना" + "ग़टागालॉगथानाथाईतिब्बतीऊगारीटीकवाईवीज़ीबल बोलीपुरानी फारसीसुमेरो अ" + "क्काड़ी कुनेईफॉर्मयीविरासतअलिखितआमअज्ञात या अवैध लिपि", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0037, 0x0055, 0x006a, 0x0076, 0x0076, 0x0076, 0x0082, 0x0094, 0x0094, 0x00b3, 0x00cb, 0x00e0, 0x00ef, 0x0101, 0x0110, 0x0110, 0x0179, 0x018b, 0x0194, 0x01a6, 0x01b5, 0x01c4, 0x01df, 0x01f7, 0x022f, 0x0247, 0x025c, 0x025c, 0x0287, 0x02b2, 0x02e6, 0x02e6, 0x02fe, 0x032c, - 0x0344, 0x0365, 0x0374, 0x0374, 0x0383, 0x0398, 0x03ad, 0x03ad, - 0x03bc, 0x03c5, 0x03d7, 0x03f6, 0x041b, 0x041b, 0x042d, 0x0445, - 0x0445, 0x046a, 0x04a2, 0x04cd, 0x04df, 0x0507, 0x0507, 0x051c, - // Entry 40 - 7F - 0x052e, 0x052e, 0x0544, 0x055c, 0x0571, 0x0580, 0x0580, 0x0592, - 0x05a7, 0x05a7, 0x05a7, 0x05b3, 0x05bc, 0x05e7, 0x0606, 0x0615, - 0x0624, 0x0636, 0x064c, 0x0665, 0x0665, 0x0665, 0x0677, 0x0689, - 0x0689, 0x0698, 0x06aa, 0x06aa, 0x06d5, 0x06d5, 0x06d5, 0x06f0, - 0x0705, 0x0705, 0x0720, 0x072c, 0x072c, 0x0748, 0x0748, 0x0763, - 0x0763, 0x0763, 0x0763, 0x0763, 0x0772, 0x0772, 0x0781, 0x0794, - 0x07a3, 0x07b5, 0x07b5, 0x07d0, 0x07d0, 0x07d0, 0x07f8, 0x080e, - 0x080e, 0x080e, 0x0839, 0x0851, 0x087f, 0x087f, 0x0891, 0x08af, - // Entry 80 - BF - 0x08be, 0x08d0, 0x08df, 0x08df, 0x08fa, 0x091c, 0x092e, 0x092e, - 0x092e, 0x092e, 0x0943, 0x0943, 0x0955, 0x097d, 0x098f, 0x09c3, - 0x09eb, 0x0a10, 0x0a28, 0x0a28, 0x0a38, 0x0a55, 0x0a61, 0x0a61, - 0x0a61, 0x0a73, 0x0a88, 0x0aa0, 0x0ab5, 0x0ac1, 0x0aca, 0x0adf, - 0x0adf, 0x0af7, 0x0b00, 0x0b22, 0x0b22, 0x0b22, 0x0b44, 0x0b8e, - 0x0b94, 0x0ba6, 0x0ba6, 0x0ba6, 0x0ba6, 0x0bb8, 0x0bbe, 0x0bf1, + 0x0344, 0x0365, 0x0365, 0x0374, 0x0374, 0x0383, 0x0398, 0x03ad, + 0x03ad, 0x03bc, 0x03c5, 0x03d7, 0x03f6, 0x041b, 0x041b, 0x042d, + 0x0445, 0x0445, 0x046a, 0x04a2, 0x04cd, 0x04df, 0x0507, 0x0507, + // Entry 40 - 7F + 0x051c, 0x052e, 0x052e, 0x0544, 0x055c, 0x0571, 0x0580, 0x0580, + 0x0592, 0x05a7, 0x05a7, 0x05a7, 0x05b3, 0x05bc, 0x05e7, 0x0606, + 0x0615, 0x0624, 0x0636, 0x064c, 0x0665, 0x0665, 0x0665, 0x0677, + 0x0689, 0x0689, 0x0698, 0x06aa, 0x06aa, 0x06d5, 0x06d5, 0x06d5, + 0x06f0, 0x0705, 0x0705, 0x0720, 0x072c, 0x072c, 0x0748, 0x0748, + 0x0763, 0x0763, 0x0763, 0x0763, 0x0763, 0x0772, 0x0772, 0x0781, + 0x0794, 0x07a3, 0x07b5, 0x07b5, 0x07d0, 0x07d0, 0x07d0, 0x07f8, + 0x080e, 0x080e, 0x080e, 0x0839, 0x0851, 0x087f, 0x087f, 0x0891, + // Entry 80 - BF + 0x08af, 0x08be, 0x08d0, 0x08df, 0x08df, 0x08fa, 0x091c, 0x092e, + 0x092e, 0x092e, 0x092e, 0x0943, 0x0943, 0x0943, 0x0955, 0x097d, + 0x098f, 0x09c3, 0x09eb, 0x0a10, 0x0a28, 0x0a28, 0x0a38, 0x0a55, + 0x0a61, 0x0a61, 0x0a61, 0x0a73, 0x0a88, 0x0aa0, 0x0ab5, 0x0ac1, + 0x0aca, 0x0adf, 0x0adf, 0x0af7, 0x0b00, 0x0b22, 0x0b22, 0x0b22, + 0x0b44, 0x0b8e, 0x0b94, 0x0b94, 0x0ba6, 0x0ba6, 0x0ba6, 0x0ba6, + 0x0bb8, 0x0bbe, 0x0bf1, }, }, { // bs "arapsko pismoimperijsko aramejsko pismoarmensko pismoavestansko pismobal" + - "ijsko pismobatak pismobengalsko pismoblisimbolično pismobopomofo pis" + - "mobramansko pismobrajevo pismobuginsko pismobuhidsko pismočakmansko " + + "ijsko pismobatak pismobengalsko pismoblisimbolično pismopismo bopomo" + + "fobramansko pismobrajevo pismobuginsko pismobuhidsko pismočakmansko " + "pismoUjedinjeni kanadski aboridžinski silabicikarijsko pismočamsko p" + "ismočerokicirt pismokoptičko pismokiparsko pismoćirilicaStaroslovens" + - "ka crkvena ćirilicadevanagari pismodezeretegipatsko narodno pismoegi" + + "ka crkvena ćirilicapismo devanagaridezeretegipatsko narodno pismoegi" + "patsko hijeratsko pismoegipatski hijeroglifietiopsko pismogruzijsko " + - "khutsuri pismogruzijsko pismoglagoljicagotikagrčko pismogudžarati pi" + - "smogurmuki pismohanb pismohangul pismohan pismohanuno pismopojednost" + - "avljeno han pismotradicionalno han pismohebrejsko pismohiraganapahaw" + - "h hmong pismokatakana ili hiraganaStaromađarsko pismoinduško ismosta" + - "ro italsko pismojamojavansko pismojapansko pismokajah li pismokataka" + - "nakarošti pismokmersko pismokanada pismokorejsko pismokaićansko pism" + - "olanna pismolaosko pismolatinica (fraktur varijanta)galska latinical" + - "atinicalepča pismolimbu pismolinearno A pismolinearno B pismolisijsk" + - "o pismolidijsko pismomandeansko pismomanihejsko pismomajanski hijero" + - "glifimeroitik pismomalajalamsko pismomongolsko pismomesečevo pismome" + - "itei majek pismomijanmarsko pismon’ko pismoogham pismool čiki pismoo" + - "rkhon pismoorija pismoosmanja pismostaro permiksko pismophags-pa pis" + - "mopisani pahlavipsalter pahlavipahlavi pismofeničansko pismopolard f" + - "onetsko pismopisani partianrejang pismorongorongo pismorunsko pismos" + - "amaritansko pismosarati pismosauraštra pismoznakovno pismošavian pis" + - "mosinhala pismosiloti nagri pismosirijsko pismosirijsko estrangelo p" + - "ismozapadnosirijsko pismopismo istočne Sirijetagbanva pismotai le pi" + - "smonovo tai lue pismotamilsko pismotai viet pismotelugu pismotengvar" + - " pismotifinag pismotagalogtana pismotajlandsko pismotibetansko pismo" + - "ugaritsko pismovai pismovidljivi govorstaropersijsko pismosumersko-a" + - "kadsko kuneiform pismoji pismonasledno pismomatematička notacijaemoj" + - "i sličicesimbolinepisani jezikzajedničko pismonepoznato pismo", - []uint16{ // 176 elements + "khutsuri pismogruzijsko pismoglagoljicagotikagrčko pismopismo gudžar" + + "atipismo gurmukipismo hanbpismo hangulpismo hanhanuno pismopojednost" + + "avljeno pismo hantradicionalno pismo hanhebrejsko pismopismo hiragan" + + "apahawh hmong pismokatakana ili hiraganaStaromađarsko pismoinduško i" + + "smostaro italsko pismopismo jamojavansko pismojapansko pismokajah li" + + " pismopismo katakanakarošti pismokmersko pismopismo kanadakorejsko p" + + "ismokaićansko pismolanna pismolaosko pismolatinica (fraktur varijant" + + "a)galska latinicalatinicalepča pismolimbu pismolinearno A pismolinea" + + "rno B pismolisijsko pismolidijsko pismomandeansko pismomanihejsko pi" + + "smomajanski hijeroglifimeroitik pismomalajalamsko pismomongolsko pis" + + "momesečevo pismomeitei majek pismomijanmarsko pismon’ko pismoogham p" + + "ismool čiki pismoorkhon pismopismo orijaosmanja pismostaro permiksko" + + " pismophags-pa pismopisani pahlavipsalter pahlavipahlavi pismofeniča" + + "nsko pismopolard fonetsko pismopisani partianrejang pismorongorongo " + + "pismorunsko pismosamaritansko pismosarati pismosauraštra pismoznakov" + + "no pismošavian pismopismo sinhalasiloti nagri pismosirijsko pismosir" + + "ijsko estrangelo pismozapadnosirijsko pismopismo istočne Sirijetagba" + + "nva pismotai le pismonovo tai lue pismotamilsko pismotai viet pismop" + + "ismo telugutengvar pismotifinag pismotagalogpismo tanatajlandsko pis" + + "motibetansko pismougaritsko pismovai pismovidljivi govorstaropersijs" + + "ko pismosumersko-akadsko kuneiform pismoji pismonasledno pismomatema" + + "tička notacijaemoji sličicesimbolinepisani jezikzajedničko pismonepo" + + "znato pismo", + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0027, 0x0035, 0x0045, 0x0053, 0x0053, 0x0053, 0x005e, 0x006d, 0x006d, 0x0081, 0x008f, 0x009e, 0x00ab, 0x00b9, 0x00c7, 0x00d7, 0x0101, 0x010f, 0x011c, 0x0123, 0x012d, 0x013c, 0x014a, 0x0153, 0x0173, 0x0183, 0x018a, 0x018a, 0x01a1, 0x01bb, 0x01d0, 0x01d0, 0x01de, 0x01f6, - 0x0205, 0x020f, 0x0215, 0x0215, 0x0221, 0x0231, 0x023e, 0x0248, - 0x0254, 0x025d, 0x0269, 0x0283, 0x029a, 0x029a, 0x02a9, 0x02b1, - 0x02b1, 0x02c3, 0x02d8, 0x02ec, 0x02f9, 0x030c, 0x0310, 0x031e, - // Entry 40 - 7F - 0x032c, 0x032c, 0x033a, 0x0342, 0x0350, 0x035d, 0x035d, 0x0369, - 0x0377, 0x0377, 0x0387, 0x0392, 0x039e, 0x03ba, 0x03c9, 0x03d1, - 0x03dd, 0x03e8, 0x03f8, 0x0408, 0x0408, 0x0408, 0x0416, 0x0424, - 0x0424, 0x0434, 0x0444, 0x0444, 0x0458, 0x0458, 0x0458, 0x0466, - 0x0478, 0x0478, 0x0487, 0x0496, 0x0496, 0x04a8, 0x04a8, 0x04b9, - 0x04b9, 0x04b9, 0x04b9, 0x04b9, 0x04c5, 0x04c5, 0x04d0, 0x04de, - 0x04ea, 0x04f5, 0x04f5, 0x0502, 0x0502, 0x0502, 0x0517, 0x0525, - 0x0533, 0x0542, 0x054f, 0x0560, 0x0575, 0x0583, 0x058f, 0x059f, - // Entry 80 - BF - 0x05ab, 0x05bd, 0x05c9, 0x05c9, 0x05d9, 0x05e7, 0x05f4, 0x05f4, - 0x05f4, 0x05f4, 0x0601, 0x0601, 0x0601, 0x0613, 0x0621, 0x063a, - 0x064f, 0x0664, 0x0672, 0x0672, 0x067e, 0x0690, 0x069e, 0x069e, - 0x06ac, 0x06b8, 0x06c5, 0x06d2, 0x06d9, 0x06e3, 0x06f3, 0x0703, - 0x0703, 0x0712, 0x071b, 0x0729, 0x0729, 0x0729, 0x073d, 0x075d, - 0x0765, 0x0773, 0x0788, 0x0796, 0x079d, 0x07ab, 0x07bc, 0x07cb, + 0x0205, 0x020f, 0x020f, 0x0215, 0x0215, 0x0221, 0x0231, 0x023e, + 0x0248, 0x0254, 0x025d, 0x0269, 0x0283, 0x029a, 0x029a, 0x02a9, + 0x02b7, 0x02b7, 0x02c9, 0x02de, 0x02f2, 0x02ff, 0x0312, 0x031c, + // Entry 40 - 7F + 0x032a, 0x0338, 0x0338, 0x0346, 0x0354, 0x0362, 0x036f, 0x036f, + 0x037b, 0x0389, 0x0389, 0x0399, 0x03a4, 0x03b0, 0x03cc, 0x03db, + 0x03e3, 0x03ef, 0x03fa, 0x040a, 0x041a, 0x041a, 0x041a, 0x0428, + 0x0436, 0x0436, 0x0446, 0x0456, 0x0456, 0x046a, 0x046a, 0x046a, + 0x0478, 0x048a, 0x048a, 0x0499, 0x04a8, 0x04a8, 0x04ba, 0x04ba, + 0x04cb, 0x04cb, 0x04cb, 0x04cb, 0x04cb, 0x04d7, 0x04d7, 0x04e2, + 0x04f0, 0x04fc, 0x0507, 0x0507, 0x0514, 0x0514, 0x0514, 0x0529, + 0x0537, 0x0545, 0x0554, 0x0561, 0x0572, 0x0587, 0x0595, 0x05a1, + // Entry 80 - BF + 0x05b1, 0x05bd, 0x05cf, 0x05db, 0x05db, 0x05eb, 0x05f9, 0x0606, + 0x0606, 0x0606, 0x0606, 0x0613, 0x0613, 0x0613, 0x0613, 0x0625, + 0x0633, 0x064c, 0x0661, 0x0676, 0x0684, 0x0684, 0x0690, 0x06a2, + 0x06b0, 0x06b0, 0x06be, 0x06ca, 0x06d7, 0x06e4, 0x06eb, 0x06f5, + 0x0705, 0x0715, 0x0715, 0x0724, 0x072d, 0x073b, 0x073b, 0x073b, + 0x074f, 0x076f, 0x0777, 0x0777, 0x0785, 0x079a, 0x07a8, 0x07af, + 0x07bd, 0x07ce, 0x07dd, }, }, { // bs-Cyrl @@ -26707,7 +28101,7 @@ var scriptHeaders = [252]header{ "лијско писмобатак писмобенгалско писмоблисимболично писмобопомофо п" + "исмобраманско писмоБрајево писмобугинско писмобухидско писмочакманс" + "ко писмоуједињени канадски абориџински силабицикаријско писмочамско" + - " писмоЧерокицирт писмокоптичко писмокипарско писмоЋирилицаСтарослове" + + " писмоЧерокицирт писмокоптичко писмокипарско писмоћирилицаСтарослове" + "нска црквена ћирилицаДеванагариДезеретегипатско народно писмоегипат" + "ско хијератско писмоегипатски хијероглифиетиопско писмогрузијско кх" + "утсури писмогрузијско писмоглагољицаГотикагрчко писмогујарати писмо" + @@ -26716,7 +28110,7 @@ var scriptHeaders = [252]header{ "рско писмоиндушко писмостари италикЏамојаванско писмојапанско писмо" + "кајах-ли писмоКатаканакарошти писмокмерско писмоканнада писмокорејс" + "ко писмокаитиланна писмолаошко писмолатиница (фрактур варијанта)гал" + - "ска латиницаЛатиницалепча писмолимбу писмолинеарно А писмолинеарно " + + "ска латиницалатиницалепча писмолимбу писмолинеарно А писмолинеарно " + "Б писмолисијско писмолидијско писмомандеанско писмоманихејско писмо" + "мајански хијероглифимероитик писмомалајалам писмомонголско писмомес" + "ечево писмомеитеи мајек писмомијанмарско писмон’ко писмоогамско пис" + @@ -26730,72 +28124,124 @@ var scriptHeaders = [252]header{ "виет писмотелугу писмотенгвар писмотифинаг писмоТагалогтхана писмот" + "ајландско писмотибетанско писмоугаритско писмоваи писмовидљиви гово" + "рстароперсијско писмосумерско-акадско кунеиформ писмоји писмонаслед" + - "но писмоматематичка нотацијасимболиНеписани језикзаједничко писмоНе" + - "познато или неважеће писмо", - []uint16{ // 176 elements + "но писмоматематичка нотацијасимболинеписани језикзаједничко писмоне" + + "познато писмо", + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0019, 0x004b, 0x0068, 0x0087, 0x00a2, 0x00a2, 0x00a2, 0x00b7, 0x00d4, 0x00d4, 0x00f9, 0x0114, 0x0131, 0x014a, 0x0165, 0x0180, 0x019d, 0x01e8, 0x0203, 0x021a, 0x0226, 0x0239, 0x0254, 0x026f, 0x027f, 0x02bb, 0x02cf, 0x02dd, 0x02dd, 0x0309, 0x033b, 0x0364, 0x0364, 0x037f, 0x03ad, - 0x03ca, 0x03dc, 0x03e8, 0x03e8, 0x03fd, 0x0418, 0x0431, 0x0431, - 0x043d, 0x0443, 0x044f, 0x0474, 0x0495, 0x0495, 0x04b2, 0x04c2, - 0x04c2, 0x04e2, 0x050a, 0x052f, 0x0548, 0x055f, 0x0567, 0x0582, - // Entry 40 - 7F - 0x059d, 0x059d, 0x05b7, 0x05c7, 0x05e0, 0x05f9, 0x05f9, 0x0612, - 0x062d, 0x062d, 0x0637, 0x064c, 0x0663, 0x0697, 0x06b4, 0x06c4, - 0x06d9, 0x06ee, 0x070c, 0x072a, 0x072a, 0x072a, 0x0745, 0x0760, - 0x0760, 0x077f, 0x079e, 0x079e, 0x07c5, 0x07c5, 0x07c5, 0x07e0, - 0x07fd, 0x07fd, 0x081a, 0x0835, 0x0835, 0x0857, 0x0857, 0x0878, - 0x0878, 0x0878, 0x0878, 0x0878, 0x088c, 0x088c, 0x08a5, 0x08bd, - 0x08d8, 0x08f5, 0x08f5, 0x0914, 0x0914, 0x0914, 0x093c, 0x0954, - 0x096f, 0x098c, 0x09a5, 0x09c4, 0x09ec, 0x0a07, 0x0a1e, 0x0a3d, - // Entry 80 - BF - 0x0a54, 0x0a77, 0x0a8e, 0x0a8e, 0x0aab, 0x0ac6, 0x0ae5, 0x0ae5, - 0x0ae5, 0x0ae5, 0x0afe, 0x0afe, 0x0afe, 0x0b20, 0x0b3b, 0x0b6b, - 0x0b94, 0x0bba, 0x0bd5, 0x0bd5, 0x0beb, 0x0c01, 0x0c1c, 0x0c1c, - 0x0c36, 0x0c4d, 0x0c66, 0x0c7f, 0x0c8d, 0x0ca2, 0x0cc1, 0x0ce0, - 0x0ce0, 0x0cfd, 0x0d0e, 0x0d27, 0x0d27, 0x0d27, 0x0d4e, 0x0d8b, - 0x0d9a, 0x0db5, 0x0ddc, 0x0ddc, 0x0dea, 0x0e05, 0x0e24, 0x0e59, + 0x03ca, 0x03dc, 0x03dc, 0x03e8, 0x03e8, 0x03fd, 0x0418, 0x0431, + 0x0431, 0x043d, 0x0443, 0x044f, 0x0474, 0x0495, 0x0495, 0x04b2, + 0x04c2, 0x04c2, 0x04e2, 0x050a, 0x052f, 0x0548, 0x055f, 0x0567, + // Entry 40 - 7F + 0x0582, 0x059d, 0x059d, 0x05b7, 0x05c7, 0x05e0, 0x05f9, 0x05f9, + 0x0612, 0x062d, 0x062d, 0x0637, 0x064c, 0x0663, 0x0697, 0x06b4, + 0x06c4, 0x06d9, 0x06ee, 0x070c, 0x072a, 0x072a, 0x072a, 0x0745, + 0x0760, 0x0760, 0x077f, 0x079e, 0x079e, 0x07c5, 0x07c5, 0x07c5, + 0x07e0, 0x07fd, 0x07fd, 0x081a, 0x0835, 0x0835, 0x0857, 0x0857, + 0x0878, 0x0878, 0x0878, 0x0878, 0x0878, 0x088c, 0x088c, 0x08a5, + 0x08bd, 0x08d8, 0x08f5, 0x08f5, 0x0914, 0x0914, 0x0914, 0x093c, + 0x0954, 0x096f, 0x098c, 0x09a5, 0x09c4, 0x09ec, 0x0a07, 0x0a1e, + // Entry 80 - BF + 0x0a3d, 0x0a54, 0x0a77, 0x0a8e, 0x0a8e, 0x0aab, 0x0ac6, 0x0ae5, + 0x0ae5, 0x0ae5, 0x0ae5, 0x0afe, 0x0afe, 0x0afe, 0x0afe, 0x0b20, + 0x0b3b, 0x0b6b, 0x0b94, 0x0bba, 0x0bd5, 0x0bd5, 0x0beb, 0x0c01, + 0x0c1c, 0x0c1c, 0x0c36, 0x0c4d, 0x0c66, 0x0c7f, 0x0c8d, 0x0ca2, + 0x0cc1, 0x0ce0, 0x0ce0, 0x0cfd, 0x0d0e, 0x0d27, 0x0d27, 0x0d27, + 0x0d4e, 0x0d8b, 0x0d9a, 0x0d9a, 0x0db5, 0x0ddc, 0x0ddc, 0x0dea, + 0x0e05, 0x0e24, 0x0e41, }, }, { // ca caScriptStr, caScriptIdx, }, + { // ccp + "𑄃𑄢𑄧𑄝𑄨𑄃𑄢𑄧𑄟𑄨𑄃𑄢𑄴𑄟𑄬𑄚𑄩𑄠𑄧𑄃𑄞𑄬𑄥𑄧𑄖𑄚𑄴𑄝𑄣𑄩𑄠𑄧𑄖𑄑𑄇𑄴𑄝𑄁𑄣𑄝𑄳𑄣𑄨𑄌𑄴𑄛𑄳𑄢𑄧𑄖𑄩𑄇𑄴𑄝𑄮𑄛𑄮𑄟𑄮𑄜𑄮𑄝𑄳𑄢𑄟𑄴𑄦𑄴𑄟𑄩𑄝𑄳" + + "𑄢𑄳𑄆𑄬𑄣𑄴𑄝𑄪𑄉𑄨𑄝𑄪𑄦𑄨𑄓𑄴𑄌𑄋𑄴𑄟𑄳𑄦𑄎𑄧𑄙 𑄇𑄚𑄓𑄨𑄠𑄚𑄴 𑄃𑄳𑄠𑄝𑄳𑄢𑄮𑄎𑄨𑄚𑄨𑄠𑄚𑄴 𑄥𑄨𑄣𑄬𑄝𑄨𑄇𑄴𑄥𑄧𑄇𑄳𑄠𑄢𑄨𑄠" + + "𑄚𑄴𑄌𑄳𑄠𑄟𑄴𑄌𑄬𑄇𑄮𑄇𑄨𑄇𑄨𑄢𑄴𑄑𑄧𑄇𑄮𑄛𑄴𑄑𑄨𑄇𑄴𑄥𑄭𑄛𑄳𑄢𑄮𑄠𑄬𑄖𑄴𑄥𑄨𑄢𑄨𑄣𑄨𑄇𑄴𑄛𑄪𑄢𑄮𑄚𑄨 𑄌𑄢𑄴𑄌𑄧 𑄥𑄳𑄣𑄞𑄮𑄚𑄨" + + "𑄇𑄴 𑄥𑄨𑄢𑄨𑄣𑄨𑄇𑄴𑄘𑄬𑄛𑄴𑄚𑄉𑄧𑄢𑄨𑄘𑄬𑄥𑄬𑄢𑄖𑄴𑄟𑄨𑄥𑄧𑄢𑄩𑄠𑄧 𑄓𑄬𑄟𑄮𑄑𑄨𑄇𑄴𑄟𑄨𑄥𑄧𑄢𑄩𑄠𑄧 𑄦𑄠𑄴𑄢𑄬𑄑𑄨𑄇𑄴𑄟𑄨𑄥" + + "𑄧𑄢𑄩𑄠𑄧 𑄦𑄠𑄢𑄮𑄉𑄳𑄣𑄨𑄛𑄴𑄃𑄨𑄗𑄨𑄃𑄮𑄛𑄨𑄠𑄧𑄎𑄧𑄢𑄴𑄎𑄨𑄠𑄧 𑄈𑄪𑄖𑄴𑄥𑄪𑄢𑄨𑄎𑄧𑄢𑄴𑄎𑄨𑄠𑄚𑄴𑄉𑄳𑄣𑄉𑄮𑄣𑄨𑄑𑄨𑄇𑄴𑄉𑄮" + + "𑄗𑄨𑄇𑄴𑄉𑄳𑄢𑄨𑄇𑄴𑄉𑄪𑄎𑄴𑄢𑄑𑄨𑄉𑄪𑄢𑄪𑄟𑄪𑄈𑄨𑄦𑄳𑄠𑄚𑄴𑄝𑄨𑄦𑄋𑄴𑄉𑄪𑄣𑄴𑄦𑄳𑄠𑄚𑄴𑄦𑄳𑄠𑄚𑄪𑄚𑄪𑄅𑄪𑄎𑄪𑄅𑄪𑄏𑄪 𑄦𑄳𑄠𑄚𑄴" + + "𑄢𑄨𑄘𑄨𑄥𑄪𑄘𑄮𑄟𑄴 𑄦𑄳𑄠𑄚𑄴𑄦𑄨𑄛𑄴𑄝𑄳𑄢𑄪𑄦𑄨𑄢𑄉𑄚𑄜𑄦𑄃𑄮𑄟𑄧𑄋𑄴𑄎𑄛𑄚𑄨 𑄦𑄧𑄢𑄧𑄇𑄴𑄛𑄪𑄢𑄮𑄚𑄴 𑄦𑄋𑄴𑄉𑄬𑄢𑄨𑄠𑄧𑄥" + + "𑄨𑄚𑄴𑄙𑄪𑄛𑄪𑄢𑄮𑄚𑄩 𑄃𑄨𑄖𑄣𑄨𑄎𑄳𑄠𑄟𑄮𑄎𑄞𑄚𑄨𑄎𑄴𑄎𑄛𑄚𑄩𑄇𑄠𑄦𑄧𑄣𑄨𑄇𑄑𑄇𑄚𑄈𑄢𑄮𑄌𑄴𑄒𑄩𑄈𑄬𑄟𑄬𑄢𑄴𑄇𑄚𑄢𑄇𑄮𑄢𑄨𑄠𑄚𑄴" + + "𑄇𑄭𑄗𑄨𑄣𑄚𑄳𑄦𑄣𑄃𑄮𑄜𑄳𑄢𑄇𑄴𑄑𑄪𑄢𑄴 𑄣𑄳𑄠𑄑𑄨𑄚𑄴𑄉𑄳𑄠𑄣𑄨𑄇𑄴 𑄣𑄳𑄠𑄑𑄨𑄚𑄴𑄣𑄳𑄠𑄑𑄨𑄚𑄴𑄣𑄬𑄛𑄴𑄌𑄣𑄨𑄟𑄴𑄝𑄪𑄣𑄨𑄚𑄨" + + "𑄠𑄢𑄴 𑄆𑄣𑄨𑄚𑄨𑄠𑄢𑄴 𑄝𑄨𑄣𑄭𑄥𑄨𑄠𑄚𑄴𑄣𑄭𑄓𑄨𑄠𑄚𑄴𑄟𑄳𑄠𑄚𑄴𑄓𑄠𑄩𑄚𑄴𑄟𑄳𑄠𑄚𑄨𑄌𑄭𑄚𑄴𑄟𑄠𑄚𑄴 𑄦𑄠𑄢𑄮𑄉𑄳𑄣𑄨𑄛𑄴𑄟𑄬" + + "𑄢𑄮𑄃𑄨𑄑𑄨𑄇𑄴𑄟𑄣𑄠𑄣𑄟𑄴𑄟𑄮𑄋𑄴𑄉𑄮𑄣𑄩𑄠𑄧𑄟𑄪𑄚𑄴𑄟𑄳𑄆𑄬𑄑𑄳𑄆𑄬 𑄟𑄠𑄬𑄇𑄴𑄟𑄠𑄚𑄴𑄟𑄢𑄴𑄃𑄬𑄚𑄴𑄇𑄮𑄃𑄮𑄊𑄟𑄴𑄃𑄮𑄣𑄴𑄌" + + "𑄨𑄇𑄨𑄃𑄧𑄢𑄴𑄈𑄮𑄚𑄴𑄃𑄮𑄢𑄨𑄠𑄃𑄮𑄥𑄟𑄚𑄨𑄠𑄧𑄛𑄪𑄢𑄮𑄚𑄴 𑄛𑄢𑄴𑄟𑄨𑄇𑄴𑄜𑄧𑄉𑄴𑄥𑄧-𑄛𑄈𑄧𑄘𑄨𑄖𑄧 𑄛𑄳𑄦𑄣𑄧𑄞𑄩𑄥𑄧𑄣𑄴𑄑" + + "𑄢𑄴 𑄛𑄳𑄦𑄣𑄧𑄞𑄩𑄛𑄪𑄌𑄴𑄖𑄧𑄇𑄴 𑄛𑄳𑄦𑄣𑄧𑄞𑄩𑄜𑄨𑄚𑄨𑄥𑄩𑄠𑄧𑄛𑄮𑄣𑄢𑄴𑄓𑄧 𑄙𑄧𑄚𑄨𑄇𑄴𑄛𑄢𑄴𑄗𑄨𑄠𑄧𑄚𑄴𑄢𑄬𑄎𑄳𑄠𑄋𑄴𑄉" + + "𑄧𑄢𑄮𑄋𑄴𑄉𑄮𑄢𑄮𑄋𑄴𑄉𑄮𑄢𑄪𑄚𑄨𑄇𑄴𑄥𑄧𑄟𑄬𑄢𑄨𑄑𑄧𑄚𑄴𑄥𑄢𑄖𑄨𑄥𑄯𑄢𑄌𑄴𑄑𑄳𑄢𑄧𑄌𑄨𑄚𑄴𑄦𑄧 𑄣𑄨𑄈𑄧𑄚𑄴𑄥𑄞𑄨𑄠𑄚𑄴𑄥𑄨𑄁𑄦" + + "𑄧𑄣𑄨𑄥𑄚𑄴𑄘𑄚𑄨𑄎𑄴𑄥𑄨𑄣𑄬𑄑𑄨 𑄚𑄉𑄧𑄢𑄨𑄥𑄨𑄢𑄨𑄠𑄇𑄴𑄃𑄬𑄌𑄴𑄑𑄳𑄢𑄬𑄋𑄴𑄉𑄬𑄣𑄮 𑄥𑄨𑄢𑄨𑄠𑄇𑄴𑄛𑄧𑄏𑄨𑄟𑄴𑄎𑄉𑄢𑄴 𑄥𑄨" + + "𑄢𑄨𑄠𑄇𑄴𑄛𑄪𑄇𑄴𑄎𑄉𑄧𑄢𑄴 𑄥𑄨𑄢𑄨𑄠𑄇𑄴𑄑𑄉𑄮𑄤𑄚𑄖𑄭𑄣𑄬𑄚𑄱 𑄖𑄭 𑄣𑄪𑄖𑄟𑄨𑄣𑄴𑄖𑄭 𑄞𑄨𑄠𑄬𑄖𑄴𑄖𑄬𑄣𑄬𑄉𑄪𑄖𑄬𑄋𑄴𑄉𑄮" + + "𑄠𑄢𑄴𑄖𑄨𑄜𑄨𑄚𑄉𑄴𑄑𑄉𑄣𑄧𑄉𑄴𑄗𑄚𑄗𑄭𑄖𑄨𑄛𑄴𑄝𑄧𑄖𑄨𑄅𑄪𑄉𑄢𑄨𑄑𑄨𑄇𑄴𑄞𑄭𑄘𑄬𑄉𑄧𑄎𑄭𑄘𑄳𑄠𑄬 𑄞𑄌𑄴𑄛𑄪𑄢𑄮𑄚𑄴 𑄜𑄢𑄴𑄥𑄨" + + "𑄥𑄪𑄟𑄬𑄢𑄧-𑄃𑄇𑄳𑄇𑄘𑄩𑄠𑄧 𑄇𑄩𑄣𑄧𑄇𑄴𑄢𑄪𑄛𑄴𑄅𑄪𑄃𑄨𑄇𑄭𑄚𑄘𑄞𑄬𑄖𑄴 𑄌𑄨𑄚𑄴𑄦𑄧𑄃𑄨𑄟𑄮𑄎𑄨𑄍𑄪𑄝𑄨𑄉𑄪𑄚𑄴𑄚𑄧𑄣𑄬𑄇𑄴" + + "𑄈𑄳𑄠𑄬𑄃𑄧𑄎𑄬𑄃𑄧𑄌𑄴𑄦𑄧𑄝𑄧𑄢𑄴𑄚𑄧𑄛𑄨𑄠𑄬 𑄦𑄧𑄢𑄧𑄇𑄴", + []uint16{ // 179 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0014, 0x0028, 0x004c, + 0x006c, 0x0080, 0x0080, 0x0080, 0x0090, 0x009c, 0x009c, 0x00d4, + 0x00f4, 0x0118, 0x0138, 0x0148, 0x0160, 0x0178, 0x0203, 0x0223, + 0x0237, 0x024f, 0x0267, 0x0287, 0x02af, 0x02cf, 0x0342, 0x0366, + 0x0382, 0x0382, 0x03c3, 0x0408, 0x0451, 0x0451, 0x0479, 0x04ba, + 0x04de, 0x050a, 0x050a, 0x0522, 0x0522, 0x053a, 0x0556, 0x0576, + 0x0592, 0x05ae, 0x05c2, 0x05de, 0x0613, 0x0650, 0x0650, 0x0670, + 0x0684, 0x0684, 0x06a4, 0x06cd, 0x070a, 0x0722, 0x074f, 0x0763, + // Entry 40 - 7F + 0x077b, 0x078b, 0x078b, 0x07a3, 0x07b3, 0x07cf, 0x07e7, 0x07e7, + 0x07f3, 0x080f, 0x080f, 0x081f, 0x082f, 0x083b, 0x087c, 0x08b5, + 0x08d1, 0x08e5, 0x08fd, 0x091e, 0x0943, 0x0943, 0x0943, 0x095f, + 0x097b, 0x097b, 0x09a3, 0x09c7, 0x09c7, 0x0a00, 0x0a00, 0x0a00, + 0x0a28, 0x0a40, 0x0a40, 0x0a68, 0x0a78, 0x0a78, 0x0aad, 0x0aad, + 0x0ac9, 0x0ac9, 0x0ac9, 0x0ac9, 0x0ac9, 0x0ae1, 0x0ae1, 0x0af5, + 0x0b15, 0x0b35, 0x0b49, 0x0b49, 0x0b69, 0x0b69, 0x0b69, 0x0b9e, + 0x0bbb, 0x0bf0, 0x0c29, 0x0c66, 0x0c86, 0x0cbb, 0x0cdf, 0x0d03, + // Entry 80 - BF + 0x0d33, 0x0d4b, 0x0d73, 0x0d83, 0x0d83, 0x0da7, 0x0dd8, 0x0df0, + 0x0df0, 0x0df0, 0x0df0, 0x0e0c, 0x0e0c, 0x0e0c, 0x0e2c, 0x0e59, + 0x0e75, 0x0eca, 0x0f0f, 0x0f50, 0x0f64, 0x0f64, 0x0f74, 0x0f8e, + 0x0fa2, 0x0fa2, 0x0fc3, 0x0fdb, 0x0fff, 0x101b, 0x1033, 0x103b, + 0x1043, 0x1063, 0x1063, 0x1087, 0x108f, 0x10c4, 0x10c4, 0x10c4, + 0x10f1, 0x1153, 0x1163, 0x1163, 0x116b, 0x119c, 0x11b4, 0x11d4, + 0x11fc, 0x121c, 0x1265, + }, + }, { // ce "Ӏаьрбийнэрмалойнбенгалхойнбопомофобрайлякириллицадеванагариэфиопингуьржи" + - "йнгрекийнгуджаратигурмукхихангылькитайнатта китайнламастан китайнжу" + - "гтийнхираганаяпонийнкатаканакхмерийнканнадакорейнлаоссийнлатинанмал" + - "аялийнмонголийнмьянманийнорисингалхойнтамилхойнтелугутаанатайнтибет" + - "хойнсимволашйоза доцумассара а тӀеэцнадоьвзуш доцу йоза", - []uint16{ // 176 elements + "йнгрекийнгуджаратигурмукхиханьбхангылькитайнатта китайнламастан кит" + + "айнжугтийнхираганакатакана я хираганаджамояпонийнкатаканакхмерийнка" + + "ннадакорейнлаоссийнлатинанмалаялийнмонголийнмьянманийнорисингалхойн" + + "тамилхойнтелугутаанатайнтибетхойнматематикан маьӀнаэмодзисимволашйо" + + "за доцумассара а тӀеэцнадоьвзуш доцу йоза", + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x0010, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0034, 0x0034, 0x0034, 0x0044, 0x0044, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0062, 0x0062, 0x0076, 0x0076, 0x0076, 0x0076, 0x0076, 0x0076, 0x0076, 0x0084, 0x0084, - 0x0094, 0x0094, 0x0094, 0x0094, 0x00a2, 0x00b4, 0x00c4, 0x00c4, - 0x00d2, 0x00de, 0x00de, 0x00f3, 0x0110, 0x0110, 0x011e, 0x012e, - 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x00a2, 0x00b4, 0x00c4, + 0x00ce, 0x00dc, 0x00e8, 0x00e8, 0x00fd, 0x011a, 0x011a, 0x0128, + 0x0138, 0x0138, 0x0138, 0x015c, 0x015c, 0x015c, 0x015c, 0x0166, // Entry 40 - 7F - 0x013c, 0x013c, 0x013c, 0x014c, 0x014c, 0x015c, 0x015c, 0x016a, - 0x0176, 0x0176, 0x0176, 0x0176, 0x0186, 0x0186, 0x0186, 0x0194, - 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, - 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, - 0x01a6, 0x01a6, 0x01b8, 0x01b8, 0x01b8, 0x01b8, 0x01b8, 0x01cc, + 0x0166, 0x0174, 0x0174, 0x0174, 0x0184, 0x0184, 0x0194, 0x0194, + 0x01a2, 0x01ae, 0x01ae, 0x01ae, 0x01ae, 0x01be, 0x01be, 0x01be, + 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, 0x01cc, - 0x01cc, 0x01d2, 0x01d2, 0x01d2, 0x01d2, 0x01d2, 0x01d2, 0x01d2, - 0x01d2, 0x01d2, 0x01d2, 0x01d2, 0x01d2, 0x01d2, 0x01d2, 0x01d2, + 0x01cc, 0x01de, 0x01de, 0x01f0, 0x01f0, 0x01f0, 0x01f0, 0x01f0, + 0x0204, 0x0204, 0x0204, 0x0204, 0x0204, 0x0204, 0x0204, 0x0204, + 0x0204, 0x0204, 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, + 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, // Entry 80 - BF - 0x01d2, 0x01d2, 0x01d2, 0x01d2, 0x01d2, 0x01d2, 0x01d2, 0x01d2, - 0x01d2, 0x01d2, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, - 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01f8, 0x01f8, - 0x01f8, 0x0204, 0x0204, 0x0204, 0x0204, 0x020e, 0x0216, 0x0228, - 0x0228, 0x0228, 0x0228, 0x0228, 0x0228, 0x0228, 0x0228, 0x0228, - 0x0228, 0x0228, 0x0228, 0x0228, 0x0238, 0x0249, 0x0269, 0x0289, + 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, + 0x020a, 0x020a, 0x020a, 0x021e, 0x021e, 0x021e, 0x021e, 0x021e, + 0x021e, 0x021e, 0x021e, 0x021e, 0x021e, 0x021e, 0x021e, 0x021e, + 0x0230, 0x0230, 0x0230, 0x023c, 0x023c, 0x023c, 0x023c, 0x0246, + 0x024e, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, + 0x0260, 0x0260, 0x0260, 0x0260, 0x0260, 0x0283, 0x028f, 0x029f, + 0x02b0, 0x02d0, 0x02f0, }, }, {}, // cgg @@ -26804,62 +28250,64 @@ var scriptHeaders = [252]header{ "ᎵᎭᏂᎠᎯᏗᎨ ᎭᏂᎤᏦᏍᏗ ᎭᏂᎠᏂᏈᎵᎯᎳᎦᎾᏣᏩᏂᏏ ᏧᏃᏴᎩᏣᎼᏣᏆᏂᏏᎧᏔᎧᎾᎩᎻᎷᎧᎾᏓᎪᎵᎠᏂᎳᎣᎳᏘᏂᎹᎳᏯᎳᎻᎹᏂ" + "ᎪᎵᎠᏂᎹᎡᏂᎹᎳᎣᏗᎠᏏᏅᎭᎳᏔᎻᎵᏖᎷᎦᏔᎠᎾᏔᏱ ᏔᏯᎴᏂᏘᏇᏔᏂᎠᏰᎦᎴᏴᏫᏍᎩ ᎠᎤᏓᏗᏍᏙᏗᎡᎼᏥᏗᎬᏟᎶᏍᏙᏗᎪᏪᎳᏅ" + " ᏂᎨᏒᎾᏯᏃᏉ ᏱᎬᏍᏛᏭᏄᏬᎵᏍᏛᎾ ᎠᏍᏓᏩᏛᏍᏙᏗ", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x000c, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x001b, 0x0027, 0x0027, 0x0027, 0x0033, 0x0033, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x005b, 0x005b, 0x005b, 0x005b, 0x0071, 0x0071, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x008f, 0x008f, - 0x009b, 0x009b, 0x009b, 0x009b, 0x00a1, 0x00ad, 0x00b6, 0x00c9, - 0x00d5, 0x00db, 0x00db, 0x00ee, 0x0101, 0x0101, 0x010d, 0x0119, - 0x0119, 0x0119, 0x0132, 0x0132, 0x0132, 0x0132, 0x0138, 0x0138, + 0x009b, 0x009b, 0x009b, 0x009b, 0x009b, 0x00a1, 0x00ad, 0x00b6, + 0x00c9, 0x00d5, 0x00db, 0x00db, 0x00ee, 0x0101, 0x0101, 0x010d, + 0x0119, 0x0119, 0x0119, 0x0132, 0x0132, 0x0132, 0x0132, 0x0138, // Entry 40 - 7F - 0x0144, 0x0144, 0x0144, 0x0150, 0x0150, 0x0159, 0x0159, 0x0162, - 0x016e, 0x016e, 0x016e, 0x016e, 0x0174, 0x0174, 0x0174, 0x017d, + 0x0138, 0x0144, 0x0144, 0x0144, 0x0150, 0x0150, 0x0159, 0x0159, + 0x0162, 0x016e, 0x016e, 0x016e, 0x016e, 0x0174, 0x0174, 0x0174, 0x017d, 0x017d, 0x017d, 0x017d, 0x017d, 0x017d, 0x017d, 0x017d, 0x017d, 0x017d, 0x017d, 0x017d, 0x017d, 0x017d, 0x017d, 0x017d, - 0x018c, 0x018c, 0x019e, 0x019e, 0x019e, 0x019e, 0x019e, 0x01ad, + 0x017d, 0x018c, 0x018c, 0x019e, 0x019e, 0x019e, 0x019e, 0x019e, 0x01ad, 0x01ad, 0x01ad, 0x01ad, 0x01ad, 0x01ad, 0x01ad, 0x01ad, - 0x01ad, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, + 0x01ad, 0x01ad, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, // Entry 80 - BF 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, - 0x01b6, 0x01b6, 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01c2, - 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01cb, 0x01cb, - 0x01cb, 0x01d4, 0x01d4, 0x01d4, 0x01d4, 0x01dd, 0x01f0, 0x01fc, - 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, - 0x01fc, 0x01fc, 0x022a, 0x0233, 0x0248, 0x0261, 0x027a, 0x02a5, + 0x01b6, 0x01b6, 0x01b6, 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01c2, + 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01c2, 0x01c2, + 0x01cb, 0x01cb, 0x01cb, 0x01d4, 0x01d4, 0x01d4, 0x01d4, 0x01dd, + 0x01f0, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, + 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x022a, 0x0233, 0x0248, + 0x0261, 0x027a, 0x02a5, }, }, { // ckb "عەرەبیئەرمەنیبەنگالیبۆپۆمۆفۆبرەیلسریلیکدەڤەناگەریئەتیۆپیکگورجییۆنانیگوجە" + "راتیگورموکھیھانگولهیبرێھیراگاناژاپۆنیکاتاکاناخمێریکەنەداکۆریاییلاول" + "اتینیمالایالاممەنگۆلیمیانمارئۆریاسینھالاتامیلیتیلوگوتانەتایلەندی", - []uint16{ // 159 elements + []uint16{ // 161 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x000c, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x0028, 0x0028, 0x0028, 0x0038, 0x0038, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x004e, 0x004e, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0072, 0x0072, - 0x007c, 0x007c, 0x007c, 0x007c, 0x0088, 0x0098, 0x00a8, 0x00a8, - 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00be, 0x00ce, + 0x007c, 0x007c, 0x007c, 0x007c, 0x007c, 0x0088, 0x0098, 0x00a8, + 0x00a8, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00be, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, 0x00ce, // Entry 40 - 7F - 0x00da, 0x00da, 0x00da, 0x00ea, 0x00ea, 0x00f4, 0x00f4, 0x0100, - 0x010e, 0x010e, 0x010e, 0x010e, 0x0114, 0x0114, 0x0114, 0x0120, + 0x00ce, 0x00da, 0x00da, 0x00da, 0x00ea, 0x00ea, 0x00f4, 0x00f4, + 0x0100, 0x010e, 0x010e, 0x010e, 0x010e, 0x0114, 0x0114, 0x0114, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, - 0x0132, 0x0132, 0x0140, 0x0140, 0x0140, 0x0140, 0x0140, 0x014e, + 0x0120, 0x0132, 0x0132, 0x0140, 0x0140, 0x0140, 0x0140, 0x0140, 0x014e, 0x014e, 0x014e, 0x014e, 0x014e, 0x014e, 0x014e, 0x014e, - 0x014e, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, + 0x014e, 0x014e, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, // Entry 80 - BF 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, - 0x0158, 0x0158, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, - 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0172, 0x0172, - 0x0172, 0x017e, 0x017e, 0x017e, 0x017e, 0x0186, 0x0196, + 0x0158, 0x0158, 0x0158, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, + 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, + 0x0172, 0x0172, 0x0172, 0x017e, 0x017e, 0x017e, 0x017e, 0x0186, + 0x0196, }, }, { // cs @@ -26867,38 +28315,39 @@ var scriptHeaders = [252]header{ csScriptIdx, }, { // cy - "ArabaiddArmenaiddBengalaiddBopomofoBrailleCyriligDevanagariEthiopigGeorg" + - "aiddGroegaiddGwjarataiddGwrmwciHanbHangulHanHan symledigHan traddodi" + - "adolHebreigHiraganaSyllwyddor JapaneaiddJamoJapaneaiddCatacanaChmera" + - "iddCanaraiddCoreaiddLaoaiddLladinMalayalamaiddMongolaiddMyanmaraiddO" + - "gamOrïaiddSinhanaiddTamilaiddTeluguThaanaTaiTibetaiddNodiant Mathema" + - "tegolEmojiSymbolauAnysgrifenedigCyffredinSgript anhysbys", - []uint16{ // 176 elements + "ArabaiddArmenaiddBanglaBopomofoBrailleCyriligDevanagariEthiopigGeorgaidd" + + "GroegaiddGwjarataiddGwrmwciHan gyda BopomofoHangulHanHan symledigHan" + + " traddodiadolHebreigHiraganaSyllwyddor JapaneaiddJamoJapaneaiddCatac" + + "anaChmeraiddCanaraiddCoreaiddLaoaiddLladinMalayalamaiddMongolaiddMya" + + "nmaraiddOgamOrïaiddSinhanaiddTamilaiddTeluguThaanaTaiTibetaiddNodian" + + "t MathemategolEmojiSymbolauAnysgrifenedigCyffredinSgript anhysbys", + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0011, - 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x001b, 0x001b, 0x001b, - 0x0023, 0x0023, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, - 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x0031, 0x0031, 0x003b, - 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x0043, 0x0043, - 0x004c, 0x004c, 0x004c, 0x004c, 0x0055, 0x0060, 0x0067, 0x006b, - 0x0071, 0x0074, 0x0074, 0x0080, 0x0090, 0x0090, 0x0097, 0x009f, - 0x009f, 0x009f, 0x00b4, 0x00b4, 0x00b4, 0x00b4, 0x00b8, 0x00b8, - // Entry 40 - 7F - 0x00c2, 0x00c2, 0x00c2, 0x00ca, 0x00ca, 0x00d3, 0x00d3, 0x00dc, - 0x00e4, 0x00e4, 0x00e4, 0x00e4, 0x00eb, 0x00eb, 0x00eb, 0x00f1, - 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f1, - 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f1, - 0x00fe, 0x00fe, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0113, - 0x0113, 0x0113, 0x0113, 0x0113, 0x0113, 0x0113, 0x0117, 0x0117, - 0x0117, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, - 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, + 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0017, 0x0017, 0x0017, + 0x001f, 0x001f, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, + 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x002d, 0x002d, 0x0037, + 0x0037, 0x0037, 0x0037, 0x0037, 0x0037, 0x0037, 0x003f, 0x003f, + 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0051, 0x005c, 0x0063, + 0x0074, 0x007a, 0x007d, 0x007d, 0x0089, 0x0099, 0x0099, 0x00a0, + 0x00a8, 0x00a8, 0x00a8, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00c1, + // Entry 40 - 7F + 0x00c1, 0x00cb, 0x00cb, 0x00cb, 0x00d3, 0x00d3, 0x00dc, 0x00dc, + 0x00e5, 0x00ed, 0x00ed, 0x00ed, 0x00ed, 0x00f4, 0x00f4, 0x00f4, + 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, + 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, + 0x00fa, 0x0107, 0x0107, 0x0111, 0x0111, 0x0111, 0x0111, 0x0111, + 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x011c, 0x0120, + 0x0120, 0x0120, 0x0128, 0x0128, 0x0128, 0x0128, 0x0128, 0x0128, + 0x0128, 0x0128, 0x0128, 0x0128, 0x0128, 0x0128, 0x0128, 0x0128, // Entry 80 - BF - 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, - 0x011f, 0x011f, 0x0129, 0x0129, 0x0129, 0x0129, 0x0129, 0x0129, - 0x0129, 0x0129, 0x0129, 0x0129, 0x0129, 0x0129, 0x0132, 0x0132, - 0x0132, 0x0138, 0x0138, 0x0138, 0x0138, 0x013e, 0x0141, 0x014a, - 0x014a, 0x014a, 0x014a, 0x014a, 0x014a, 0x014a, 0x014a, 0x014a, - 0x014a, 0x014a, 0x015e, 0x0163, 0x016b, 0x0179, 0x0182, 0x0191, + 0x0128, 0x0128, 0x0128, 0x0128, 0x0128, 0x0128, 0x0128, 0x0128, + 0x0128, 0x0128, 0x0128, 0x0132, 0x0132, 0x0132, 0x0132, 0x0132, + 0x0132, 0x0132, 0x0132, 0x0132, 0x0132, 0x0132, 0x0132, 0x0132, + 0x013b, 0x013b, 0x013b, 0x0141, 0x0141, 0x0141, 0x0141, 0x0147, + 0x014a, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, + 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0167, 0x016c, 0x0174, + 0x0182, 0x018b, 0x019a, }, }, { // da @@ -26920,32 +28369,33 @@ var scriptHeaders = [252]header{ "onalne hanhebrejskihiraganajapańskikatakanakhmerkannadakorejskilaosk" + "iłatyńskimalayalamskimongolskiburmaskioriyasinghaleskitamilskitelugu" + "thaanathaiskitibetskisymbolebźez pismapowšyknenjeznate pismo", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0007, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0019, 0x0019, 0x0019, 0x0021, 0x0021, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0039, 0x0039, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x004c, 0x004c, - 0x0055, 0x0055, 0x0055, 0x0055, 0x005e, 0x0066, 0x006e, 0x006e, - 0x0074, 0x0077, 0x0077, 0x0086, 0x0097, 0x0097, 0x00a0, 0x00a8, + 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x005e, 0x0066, 0x006e, + 0x006e, 0x0074, 0x0077, 0x0077, 0x0086, 0x0097, 0x0097, 0x00a0, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, // Entry 40 - 7F - 0x00b1, 0x00b1, 0x00b1, 0x00b9, 0x00b9, 0x00be, 0x00be, 0x00c5, - 0x00cd, 0x00cd, 0x00cd, 0x00cd, 0x00d3, 0x00d3, 0x00d3, 0x00dd, + 0x00a8, 0x00b1, 0x00b1, 0x00b1, 0x00b9, 0x00b9, 0x00be, 0x00be, + 0x00c5, 0x00cd, 0x00cd, 0x00cd, 0x00cd, 0x00d3, 0x00d3, 0x00d3, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, 0x00dd, - 0x00e9, 0x00e9, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00fa, + 0x00dd, 0x00e9, 0x00e9, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, - 0x00fa, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, + 0x00fa, 0x00fa, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, // Entry 80 - BF 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, - 0x00ff, 0x00ff, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, - 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x0112, 0x0112, - 0x0112, 0x0118, 0x0118, 0x0118, 0x0118, 0x011e, 0x0125, 0x012d, - 0x012d, 0x012d, 0x012d, 0x012d, 0x012d, 0x012d, 0x012d, 0x012d, - 0x012d, 0x012d, 0x012d, 0x012d, 0x0134, 0x013f, 0x0148, 0x0156, + 0x00ff, 0x00ff, 0x00ff, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, + 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, + 0x0112, 0x0112, 0x0112, 0x0118, 0x0118, 0x0118, 0x0118, 0x011e, + 0x0125, 0x012d, 0x012d, 0x012d, 0x012d, 0x012d, 0x012d, 0x012d, + 0x012d, 0x012d, 0x012d, 0x012d, 0x012d, 0x012d, 0x012d, 0x0134, + 0x013f, 0x0148, 0x0156, }, }, {}, // dua @@ -26960,32 +28410,33 @@ var scriptHeaders = [252]header{ "ུསོག་པོའི་ཡིག་གུབར་མིས་ཡིག་གུཨོ་རི་ཡ་ཡིག་གུསིན་ཧ་ལ་རིག་གུཏ་མིལ་ཡིག" + "་གུཏེ་ལུ་གུ་ཡིག་གུཐཱ་ན་ཡིག་གུཐཱའི་ཡིག་གུང་བཅས་ཀྱི་ཡིག་གུམཚན་རྟགསཡི" + "ག་ཐོག་མ་བཀོདཔསྤྱིཡིགངོ་མ་ཤེས་པའི་ཡི་གུ", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x002d, 0x002d, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x008a, 0x008a, 0x008a, 0x00c3, 0x00c3, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x010b, 0x010b, 0x0141, 0x0141, 0x0141, 0x0141, 0x0141, 0x0141, 0x0141, 0x017d, 0x017d, - 0x01ad, 0x01ad, 0x01ad, 0x01ad, 0x01ce, 0x01fe, 0x0231, 0x0231, - 0x025b, 0x0282, 0x0282, 0x02b6, 0x02ea, 0x02ea, 0x0311, 0x035c, + 0x01ad, 0x01ad, 0x01ad, 0x01ad, 0x01ad, 0x01ce, 0x01fe, 0x0231, + 0x0231, 0x025b, 0x0282, 0x0282, 0x02b6, 0x02ea, 0x02ea, 0x0311, 0x035c, 0x035c, 0x035c, 0x035c, 0x035c, 0x035c, 0x035c, 0x035c, // Entry 40 - 7F - 0x0380, 0x0380, 0x0380, 0x03c8, 0x03c8, 0x03ef, 0x03ef, 0x0413, - 0x0443, 0x0443, 0x0443, 0x0443, 0x0461, 0x0461, 0x0461, 0x0488, + 0x035c, 0x0380, 0x0380, 0x0380, 0x03c8, 0x03c8, 0x03ef, 0x03ef, + 0x0413, 0x0443, 0x0443, 0x0443, 0x0443, 0x0461, 0x0461, 0x0461, 0x0488, 0x0488, 0x0488, 0x0488, 0x0488, 0x0488, 0x0488, 0x0488, 0x0488, 0x0488, 0x0488, 0x0488, 0x0488, 0x0488, 0x0488, 0x0488, - 0x04b5, 0x04b5, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x0509, + 0x0488, 0x04b5, 0x04b5, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x04e2, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, 0x0509, - 0x0509, 0x0533, 0x0533, 0x0533, 0x0533, 0x0533, 0x0533, 0x0533, + 0x0509, 0x0509, 0x0533, 0x0533, 0x0533, 0x0533, 0x0533, 0x0533, 0x0533, 0x0533, 0x0533, 0x0533, 0x0533, 0x0533, 0x0533, 0x0533, // Entry 80 - BF 0x0533, 0x0533, 0x0533, 0x0533, 0x0533, 0x0533, 0x0533, 0x0533, - 0x0533, 0x0533, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, - 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x0581, 0x0581, - 0x0581, 0x05ae, 0x05ae, 0x05ae, 0x05ae, 0x05cf, 0x05f0, 0x0620, - 0x0620, 0x0620, 0x0620, 0x0620, 0x0620, 0x0620, 0x0620, 0x0620, - 0x0620, 0x0620, 0x0620, 0x0620, 0x0638, 0x0665, 0x067a, 0x06b0, + 0x0533, 0x0533, 0x0533, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, + 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, 0x055d, + 0x0581, 0x0581, 0x0581, 0x05ae, 0x05ae, 0x05ae, 0x05ae, 0x05cf, + 0x05f0, 0x0620, 0x0620, 0x0620, 0x0620, 0x0620, 0x0620, 0x0620, + 0x0620, 0x0620, 0x0620, 0x0620, 0x0620, 0x0620, 0x0620, 0x0638, + 0x0665, 0x067a, 0x06b0, }, }, {}, // ebu @@ -26999,32 +28450,33 @@ var scriptHeaders = [252]header{ "yagbeŋɔŋlɔsinhalagbeŋɔŋlɔtamilgbeŋɔŋlɔtelegugbeŋɔŋlɔthaanagbeŋɔŋlɔta" + "igbeŋɔŋlɔtibetgbeŋɔŋlɔŋɔŋlɔdzesiwogbemaŋlɔgbeŋɔŋlɔ bɔbɔgbeŋɔŋlɔ many" + "a", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0012, 0x0012, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0038, 0x0038, 0x0038, 0x004b, 0x004b, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x0072, 0x0072, 0x0088, 0x0088, 0x0088, 0x0088, 0x0088, 0x0088, 0x0088, 0x009c, 0x009c, - 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00bf, 0x00d4, 0x00e8, 0x00e8, - 0x00fa, 0x0109, 0x0109, 0x0119, 0x012e, 0x012e, 0x013f, 0x0153, + 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00bf, 0x00d4, 0x00e8, + 0x00e8, 0x00fa, 0x0109, 0x0109, 0x0119, 0x012e, 0x012e, 0x013f, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, // Entry 40 - 7F - 0x0167, 0x0167, 0x0167, 0x017b, 0x017b, 0x018c, 0x018c, 0x019f, - 0x01b0, 0x01b0, 0x01b0, 0x01b0, 0x01bf, 0x01bf, 0x01bf, 0x01d0, + 0x0153, 0x0167, 0x0167, 0x0167, 0x017b, 0x017b, 0x018c, 0x018c, + 0x019f, 0x01b0, 0x01b0, 0x01b0, 0x01b0, 0x01bf, 0x01bf, 0x01bf, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d0, - 0x01e2, 0x01e2, 0x01f6, 0x01f6, 0x01f6, 0x01f6, 0x01f6, 0x0209, + 0x01d0, 0x01e2, 0x01e2, 0x01f6, 0x01f6, 0x01f6, 0x01f6, 0x01f6, 0x0209, 0x0209, 0x0209, 0x0209, 0x0209, 0x0209, 0x0209, 0x0209, - 0x0209, 0x021a, 0x021a, 0x021a, 0x021a, 0x021a, 0x021a, 0x021a, + 0x0209, 0x0209, 0x021a, 0x021a, 0x021a, 0x021a, 0x021a, 0x021a, 0x021a, 0x021a, 0x021a, 0x021a, 0x021a, 0x021a, 0x021a, 0x021a, // Entry 80 - BF 0x021a, 0x021a, 0x021a, 0x021a, 0x021a, 0x021a, 0x021a, 0x021a, - 0x021a, 0x021a, 0x022d, 0x022d, 0x022d, 0x022d, 0x022d, 0x022d, - 0x022d, 0x022d, 0x022d, 0x022d, 0x022d, 0x022d, 0x023e, 0x023e, - 0x023e, 0x0250, 0x0250, 0x0250, 0x0250, 0x0262, 0x0271, 0x0282, - 0x0282, 0x0282, 0x0282, 0x0282, 0x0282, 0x0282, 0x0282, 0x0282, - 0x0282, 0x0282, 0x0282, 0x0282, 0x0292, 0x029c, 0x02af, 0x02c1, + 0x021a, 0x021a, 0x021a, 0x022d, 0x022d, 0x022d, 0x022d, 0x022d, + 0x022d, 0x022d, 0x022d, 0x022d, 0x022d, 0x022d, 0x022d, 0x022d, + 0x023e, 0x023e, 0x023e, 0x0250, 0x0250, 0x0250, 0x0250, 0x0262, + 0x0271, 0x0282, 0x0282, 0x0282, 0x0282, 0x0282, 0x0282, 0x0282, + 0x0282, 0x0282, 0x0282, 0x0282, 0x0282, 0x0282, 0x0282, 0x0292, + 0x029c, 0x02af, 0x02c1, }, }, { // el @@ -27035,10 +28487,21 @@ var scriptHeaders = [252]header{ enScriptStr, enScriptIdx, }, - {}, // en-AU + { // en-AU + "Bengali", + []uint16{ // 14 elements + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, + }, + }, + {}, // en-CA + { // en-GB + enGBScriptStr, + enGBScriptIdx, + }, { // en-IN "BengaliOriya", - []uint16{ // 114 elements + []uint16{ // 115 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0007, 0x0007, @@ -27055,7 +28518,7 @@ var scriptHeaders = [252]header{ 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, - 0x0007, 0x000c, + 0x0007, 0x0007, 0x000c, }, }, {}, // en-NZ @@ -27078,8 +28541,8 @@ var scriptHeaders = [252]header{ {}, // es-GT {}, // es-HN { // es-MX - "telugú", - []uint16{ // 154 elements + "hanbmalayálamtelugú", + []uint16{ // 156 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -27087,22 +28550,22 @@ var scriptHeaders = [252]header{ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, + 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, // Entry 40 - 7F - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, + 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, + 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, + 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, + 0x0004, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, // Entry 80 - BF - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0007, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x0015, }, }, {}, // es-NI @@ -27111,7 +28574,26 @@ var scriptHeaders = [252]header{ {}, // es-PR {}, // es-PY {}, // es-SV - {}, // es-US + { // es-US + "hanbmalayálam", + []uint16{ // 98 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, + 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, + // Entry 40 - 7F + 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, + 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, + 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, + 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, + 0x0004, 0x000e, + }, + }, {}, // es-VE { // et etScriptStr, @@ -27126,32 +28608,33 @@ var scriptHeaders = [252]header{ "iarraoriyarrasinhalatamilarrateluguarrathaanathailandiarratibetarram" + "atematikako notazioaemotikonoaikurrakidatzi gabeaohikoaidazkera ezez" + "aguna", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0009, 0x0009, 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, 0x001e, 0x001e, 0x001e, 0x0027, 0x0027, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x0038, 0x0038, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x004d, 0x004d, - 0x0057, 0x0057, 0x0057, 0x0057, 0x0060, 0x006a, 0x0073, 0x007a, - 0x0081, 0x0094, 0x0094, 0x00b3, 0x00d1, 0x00d1, 0x00d9, 0x00e1, - 0x00e1, 0x00e1, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x0101, 0x0101, + 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0060, 0x006a, 0x0073, + 0x007a, 0x0081, 0x0094, 0x0094, 0x00b3, 0x00d1, 0x00d1, 0x00d9, + 0x00e1, 0x00e1, 0x00e1, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x0101, // Entry 40 - 7F - 0x010b, 0x010b, 0x010b, 0x0113, 0x0113, 0x011d, 0x011d, 0x0126, - 0x012e, 0x012e, 0x012e, 0x012e, 0x0136, 0x0136, 0x0136, 0x013c, + 0x0101, 0x010b, 0x010b, 0x010b, 0x0113, 0x0113, 0x011d, 0x011d, + 0x0126, 0x012e, 0x012e, 0x012e, 0x012e, 0x0136, 0x0136, 0x0136, 0x013c, 0x013c, 0x013c, 0x013c, 0x013c, 0x013c, 0x013c, 0x013c, 0x013c, 0x013c, 0x013c, 0x013c, 0x013c, 0x013c, 0x013c, 0x013c, - 0x0148, 0x0148, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x015e, + 0x013c, 0x0148, 0x0148, 0x0153, 0x0153, 0x0153, 0x0153, 0x0153, 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, 0x015e, - 0x015e, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, + 0x015e, 0x015e, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, // Entry 80 - BF 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, 0x0166, - 0x0166, 0x0166, 0x016d, 0x016d, 0x016d, 0x016d, 0x016d, 0x016d, - 0x016d, 0x016d, 0x016d, 0x016d, 0x016d, 0x016d, 0x0176, 0x0176, - 0x0176, 0x0180, 0x0180, 0x0180, 0x0180, 0x0186, 0x0193, 0x019c, - 0x019c, 0x019c, 0x019c, 0x019c, 0x019c, 0x019c, 0x019c, 0x019c, - 0x019c, 0x019c, 0x01b1, 0x01bb, 0x01c2, 0x01ce, 0x01d4, 0x01e6, + 0x0166, 0x0166, 0x0166, 0x016d, 0x016d, 0x016d, 0x016d, 0x016d, + 0x016d, 0x016d, 0x016d, 0x016d, 0x016d, 0x016d, 0x016d, 0x016d, + 0x0176, 0x0176, 0x0176, 0x0180, 0x0180, 0x0180, 0x0180, 0x0186, + 0x0193, 0x019c, 0x019c, 0x019c, 0x019c, 0x019c, 0x019c, 0x019c, + 0x019c, 0x019c, 0x019c, 0x019c, 0x019c, 0x01b1, 0x01bb, 0x01c2, + 0x01ce, 0x01d4, 0x01e6, }, }, {}, // ewo @@ -27161,7 +28644,7 @@ var scriptHeaders = [252]header{ }, { // fa-AF "مغلی", - []uint16{ // 99 elements + []uint16{ // 100 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -27176,7 +28659,7 @@ var scriptHeaders = [252]header{ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0008, + 0x0000, 0x0000, 0x0000, 0x0008, }, }, {}, // ff @@ -27195,32 +28678,33 @@ var scriptHeaders = [252]header{ "eansktlaolatínsktmalayalammongolskmyanmarsktoriyasinhalatamilskttelu" + "guthaanatailendskttibetsktstøddfrøðilig teknskipanemojitekinóskrivav" + "anligókend skrift", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0007, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x0016, 0x0016, 0x0016, 0x001e, 0x001e, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x0034, 0x0034, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x0047, 0x0047, - 0x0052, 0x0052, 0x0052, 0x0052, 0x0059, 0x0061, 0x0069, 0x006d, - 0x0073, 0x0076, 0x0076, 0x0081, 0x008c, 0x008c, 0x0095, 0x009d, - 0x009d, 0x009d, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00b1, 0x00b1, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0059, 0x0061, 0x0069, + 0x006d, 0x0073, 0x0076, 0x0076, 0x0081, 0x008c, 0x008c, 0x0095, + 0x009d, 0x009d, 0x009d, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00b1, // Entry 40 - 7F - 0x00b9, 0x00b9, 0x00b9, 0x00c1, 0x00c1, 0x00c6, 0x00c6, 0x00cd, - 0x00d6, 0x00d6, 0x00d6, 0x00d6, 0x00d9, 0x00d9, 0x00d9, 0x00e2, + 0x00b1, 0x00b9, 0x00b9, 0x00b9, 0x00c1, 0x00c1, 0x00c6, 0x00c6, + 0x00cd, 0x00d6, 0x00d6, 0x00d6, 0x00d6, 0x00d9, 0x00d9, 0x00d9, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, - 0x00eb, 0x00eb, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00fd, + 0x00e2, 0x00eb, 0x00eb, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, - 0x00fd, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, + 0x00fd, 0x00fd, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, // Entry 80 - BF 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, - 0x0102, 0x0102, 0x0109, 0x0109, 0x0109, 0x0109, 0x0109, 0x0109, - 0x0109, 0x0109, 0x0109, 0x0109, 0x0109, 0x0109, 0x0111, 0x0111, - 0x0111, 0x0117, 0x0117, 0x0117, 0x0117, 0x011d, 0x0127, 0x012f, - 0x012f, 0x012f, 0x012f, 0x012f, 0x012f, 0x012f, 0x012f, 0x012f, - 0x012f, 0x012f, 0x014a, 0x014f, 0x0154, 0x015c, 0x0162, 0x016f, + 0x0102, 0x0102, 0x0102, 0x0109, 0x0109, 0x0109, 0x0109, 0x0109, + 0x0109, 0x0109, 0x0109, 0x0109, 0x0109, 0x0109, 0x0109, 0x0109, + 0x0111, 0x0111, 0x0111, 0x0117, 0x0117, 0x0117, 0x0117, 0x011d, + 0x0127, 0x012f, 0x012f, 0x012f, 0x012f, 0x012f, 0x012f, 0x012f, + 0x012f, 0x012f, 0x012f, 0x012f, 0x012f, 0x014a, 0x014f, 0x0154, + 0x015c, 0x0162, 0x016f, }, }, { // fr @@ -27244,32 +28728,33 @@ var scriptHeaders = [252]header{ "iriac ocidentâlsiriac orientâltamiltelegutagalogthaanathaitibetanuga" + "riticvieri persiancuneiform sumeric-acadiccodiç pes lenghis no scrit" + "iscomuncodiç par scrituris no codificadis", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x0004, 0x0009, 0x0009, 0x0011, 0x0011, 0x0011, 0x0011, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x0021, 0x0029, 0x0029, 0x0029, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x0053, 0x005a, 0x0061, 0x0085, 0x008f, 0x008f, 0x008f, 0x009f, 0x00af, 0x00c4, 0x00c4, 0x00cb, 0x00cb, - 0x00d4, 0x00de, 0x00e3, 0x00e3, 0x00e8, 0x00f0, 0x00f0, 0x00f0, - 0x00f0, 0x00f3, 0x00f3, 0x0103, 0x0113, 0x0113, 0x0118, 0x0118, - 0x0118, 0x0118, 0x012b, 0x013a, 0x013a, 0x0146, 0x0146, 0x014f, - // Entry 40 - 7F - 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x015d, 0x015d, 0x0164, - 0x016a, 0x016a, 0x016a, 0x016a, 0x016d, 0x017a, 0x0186, 0x018b, - 0x018b, 0x018b, 0x0194, 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, - 0x019d, 0x019d, 0x019d, 0x019d, 0x01ad, 0x01ad, 0x01ad, 0x01ad, - 0x01b6, 0x01b6, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01c3, + 0x00d4, 0x00de, 0x00de, 0x00e3, 0x00e3, 0x00e8, 0x00f0, 0x00f0, + 0x00f0, 0x00f0, 0x00f3, 0x00f3, 0x0103, 0x0113, 0x0113, 0x0118, + 0x0118, 0x0118, 0x0118, 0x012b, 0x013a, 0x013a, 0x0146, 0x0146, + // Entry 40 - 7F + 0x014f, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x015d, 0x015d, + 0x0164, 0x016a, 0x016a, 0x016a, 0x016a, 0x016d, 0x017a, 0x0186, + 0x018b, 0x018b, 0x018b, 0x0194, 0x019d, 0x019d, 0x019d, 0x019d, + 0x019d, 0x019d, 0x019d, 0x019d, 0x019d, 0x01ad, 0x01ad, 0x01ad, + 0x01ad, 0x01b6, 0x01b6, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01c3, 0x01c3, 0x01c3, 0x01c3, 0x01c3, 0x01c3, 0x01c3, 0x01c3, - 0x01c3, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c8, + 0x01c3, 0x01c3, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01c8, // Entry 80 - BF - 0x01cd, 0x01cd, 0x01cd, 0x01cd, 0x01cd, 0x01cd, 0x01cd, 0x01cd, - 0x01cd, 0x01cd, 0x01d4, 0x01d4, 0x01d4, 0x01d4, 0x01da, 0x01eb, - 0x01fc, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x0211, 0x0211, - 0x0211, 0x0217, 0x0217, 0x0217, 0x021e, 0x0224, 0x0228, 0x022f, - 0x022f, 0x0237, 0x0237, 0x0237, 0x0237, 0x0237, 0x0244, 0x025c, - 0x025c, 0x025c, 0x025c, 0x025c, 0x025c, 0x0279, 0x027e, 0x02a1, + 0x01c8, 0x01cd, 0x01cd, 0x01cd, 0x01cd, 0x01cd, 0x01cd, 0x01cd, + 0x01cd, 0x01cd, 0x01cd, 0x01d4, 0x01d4, 0x01d4, 0x01d4, 0x01d4, + 0x01da, 0x01eb, 0x01fc, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, + 0x0211, 0x0211, 0x0211, 0x0217, 0x0217, 0x0217, 0x021e, 0x0224, + 0x0228, 0x022f, 0x022f, 0x0237, 0x0237, 0x0237, 0x0237, 0x0237, + 0x0244, 0x025c, 0x025c, 0x025c, 0x025c, 0x025c, 0x025c, 0x025c, + 0x0279, 0x027e, 0x02a1, }, }, { // fy @@ -27296,125 +28781,138 @@ var scriptHeaders = [252]header{ "skVaiSichtbere spraakVarang KshitiWoleaiAldperzyskSumero-Akkadian Cu" + "neiformYiOergeërfdWiskundige notatieSymbolenOngeschrevenAlgemeenOnbe" + "kend schriftsysteem", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0006, 0x0006, 0x0006, 0x000d, 0x001f, 0x0026, 0x0030, 0x0039, 0x003f, 0x0048, 0x004d, 0x0056, 0x0056, 0x0062, 0x006a, 0x0070, 0x0077, 0x0080, 0x0085, 0x008b, 0x00b1, 0x00b7, 0x00bb, 0x00c3, 0x00c8, 0x00cf, 0x00d6, 0x00df, 0x00f7, 0x0101, 0x0108, 0x011c, 0x012d, 0x0140, 0x0157, 0x0157, 0x0160, 0x0171, - 0x0179, 0x0184, 0x018b, 0x0192, 0x0198, 0x01a0, 0x01a8, 0x01a8, - 0x01ae, 0x01b1, 0x01b8, 0x01ce, 0x01e2, 0x01e2, 0x01ec, 0x01f4, - 0x020c, 0x0218, 0x022c, 0x0237, 0x023c, 0x0247, 0x024b, 0x0253, - // Entry 40 - 7F - 0x0259, 0x0260, 0x0268, 0x0270, 0x027a, 0x027f, 0x0285, 0x028c, - 0x0295, 0x029b, 0x02a1, 0x02a6, 0x02a9, 0x02b5, 0x02c2, 0x02c7, - 0x02cd, 0x02d2, 0x02db, 0x02e4, 0x02ea, 0x02ee, 0x02f4, 0x02fa, - 0x02fa, 0x0303, 0x030f, 0x030f, 0x0320, 0x0325, 0x0336, 0x0340, - 0x0349, 0x0349, 0x0351, 0x0355, 0x0358, 0x035e, 0x035e, 0x0365, - 0x0376, 0x0381, 0x0381, 0x038a, 0x0390, 0x0396, 0x039b, 0x03a3, - 0x03a9, 0x03ad, 0x03ad, 0x03b4, 0x03be, 0x03be, 0x03c8, 0x03d0, - 0x03e6, 0x03f5, 0x0401, 0x040a, 0x041a, 0x0431, 0x0437, 0x0441, - // Entry 80 - BF - 0x0446, 0x0452, 0x0458, 0x0468, 0x0472, 0x047d, 0x0484, 0x048b, - 0x048b, 0x0491, 0x0498, 0x04a4, 0x04af, 0x04bb, 0x04c1, 0x04d4, - 0x04e1, 0x04ee, 0x04f6, 0x04fb, 0x0501, 0x050c, 0x0511, 0x0517, - 0x051f, 0x0525, 0x052c, 0x0534, 0x053b, 0x0541, 0x0546, 0x0550, - 0x0557, 0x0560, 0x0563, 0x0573, 0x0580, 0x0586, 0x0590, 0x05a9, - 0x05ab, 0x05b5, 0x05c7, 0x05c7, 0x05cf, 0x05db, 0x05e3, 0x05fa, + 0x0179, 0x0184, 0x0184, 0x018b, 0x0192, 0x0198, 0x01a0, 0x01a8, + 0x01a8, 0x01ae, 0x01b1, 0x01b8, 0x01ce, 0x01e2, 0x01e2, 0x01ec, + 0x01f4, 0x020c, 0x0218, 0x022c, 0x0237, 0x023c, 0x0247, 0x024b, + // Entry 40 - 7F + 0x0253, 0x0259, 0x0260, 0x0268, 0x0270, 0x027a, 0x027f, 0x0285, + 0x028c, 0x0295, 0x029b, 0x02a1, 0x02a6, 0x02a9, 0x02b5, 0x02c2, + 0x02c7, 0x02cd, 0x02d2, 0x02db, 0x02e4, 0x02ea, 0x02ee, 0x02f4, + 0x02fa, 0x02fa, 0x0303, 0x030f, 0x030f, 0x0320, 0x0325, 0x0336, + 0x0340, 0x0349, 0x0349, 0x0351, 0x0355, 0x0358, 0x035e, 0x035e, + 0x0365, 0x0376, 0x0381, 0x0381, 0x038a, 0x0390, 0x0396, 0x039b, + 0x03a3, 0x03a9, 0x03ad, 0x03ad, 0x03b4, 0x03be, 0x03be, 0x03c8, + 0x03d0, 0x03e6, 0x03f5, 0x0401, 0x040a, 0x041a, 0x0431, 0x0437, + // Entry 80 - BF + 0x0441, 0x0446, 0x0452, 0x0458, 0x0468, 0x0472, 0x047d, 0x0484, + 0x048b, 0x048b, 0x0491, 0x0498, 0x04a4, 0x04a4, 0x04af, 0x04bb, + 0x04c1, 0x04d4, 0x04e1, 0x04ee, 0x04f6, 0x04fb, 0x0501, 0x050c, + 0x0511, 0x0517, 0x051f, 0x0525, 0x052c, 0x0534, 0x053b, 0x0541, + 0x0546, 0x0550, 0x0557, 0x0560, 0x0563, 0x0573, 0x0580, 0x0586, + 0x0590, 0x05a9, 0x05ab, 0x05ab, 0x05b5, 0x05c7, 0x05c7, 0x05cf, + 0x05db, 0x05e3, 0x05fa, }, }, { // ga - "Albánach CugasachArabachAramach ImpiriúilAirméanachAivéisteachBailíochBa" + - "tacachBeangálachBopomofoBrailleBuigineachButhaideachSeiricíochCoptac" + - "hCipireachCoireallachDéiveanágrachÉigipteach coiteannÉigipteach clia" + - "rúilIairiglifí ÉigipteachaAetópachSeoirseachGlagalachGotachGréagachG" + - "úisearátachGurmúcachHan agus BopomofoHangalachHanHan SimplitheHan T" + - "raidisiúntaEabhrachHireagánachIairiglifí AnatólachaSiollabraí Seapán" + - "achaSean-UngárachSean-IodáilicSeamóIávachSeapánachCatacánachCiméarac" + - "hCannadachCóiréachLaosachCló GaelachLaidineachLiombúchLíneach ALínea" + - "ch BFraserLiciachLidiachMahasánachMainicéasachIairiglifí MáigheachaM" + - "eindeachMailéalamachMongólachMaenmarachSean-Arabach ThuaidhOghamOirí" + - "seachSean-PheirmeachFéiníceachPollard FoghrachPairtiach Inscríbhinni" + - "úilRúnachSamárachSean-Arabach TheasShawachSiolónachSiriceachTamalac" + - "hTeileagúchTifinaghTagálagachTánachTéalannachTibéadachÚgairíteachSea" + - "n-PheirseachDingchruthach Suiméar-AcádachÍsOidhreachtNodaireacht Mha" + - "tamaiticiúilEmojiSiombailíGan ScríobhCoitiantaScript Anaithnid", - []uint16{ // 176 elements - // Entry 0 - 3F - 0x0000, 0x0000, 0x0000, 0x0012, 0x0012, 0x0019, 0x002b, 0x0036, - 0x0042, 0x004b, 0x004b, 0x004b, 0x0053, 0x005e, 0x005e, 0x005e, - 0x0066, 0x0066, 0x006d, 0x0077, 0x0082, 0x0082, 0x0082, 0x0082, - 0x0082, 0x008d, 0x008d, 0x0094, 0x009d, 0x00a8, 0x00a8, 0x00b7, - 0x00b7, 0x00b7, 0x00cb, 0x00e0, 0x00f8, 0x00f8, 0x0101, 0x0101, - 0x010b, 0x0114, 0x011a, 0x011a, 0x0123, 0x0131, 0x013b, 0x014c, - 0x0155, 0x0158, 0x0158, 0x0165, 0x0176, 0x0176, 0x017e, 0x018a, - 0x01a1, 0x01a1, 0x01b8, 0x01c6, 0x01c6, 0x01d4, 0x01da, 0x01e1, - // Entry 40 - 7F - 0x01eb, 0x01eb, 0x01eb, 0x01f6, 0x01f6, 0x0200, 0x0200, 0x0209, - 0x0213, 0x0213, 0x0213, 0x0213, 0x021a, 0x021a, 0x0226, 0x0230, - 0x0230, 0x0239, 0x0243, 0x024d, 0x0253, 0x0253, 0x025a, 0x0261, - 0x026c, 0x026c, 0x0279, 0x0279, 0x0290, 0x0299, 0x0299, 0x0299, - 0x02a6, 0x02a6, 0x02b0, 0x02b0, 0x02b0, 0x02b0, 0x02b0, 0x02ba, - 0x02ce, 0x02ce, 0x02ce, 0x02ce, 0x02ce, 0x02ce, 0x02d3, 0x02d3, - 0x02d3, 0x02dd, 0x02dd, 0x02dd, 0x02dd, 0x02dd, 0x02ec, 0x02ec, - 0x02ec, 0x02ec, 0x02ec, 0x02f8, 0x0308, 0x0323, 0x0323, 0x0323, - // Entry 80 - BF - 0x032a, 0x0333, 0x0333, 0x0345, 0x0345, 0x0345, 0x034c, 0x034c, - 0x034c, 0x034c, 0x0356, 0x0356, 0x0356, 0x0356, 0x035f, 0x035f, - 0x035f, 0x035f, 0x035f, 0x035f, 0x035f, 0x035f, 0x0367, 0x0367, - 0x0367, 0x0372, 0x0372, 0x037a, 0x0385, 0x038c, 0x0397, 0x03a1, - 0x03a1, 0x03ae, 0x03ae, 0x03ae, 0x03ae, 0x03ae, 0x03bd, 0x03dc, - 0x03df, 0x03e9, 0x0405, 0x040a, 0x0414, 0x0420, 0x0429, 0x0439, + "AdlmAlbánach CugasachAhomArabachAramach ImpiriúilAirméanachAivéisteachBa" + + "ilíochBamuBassBatacachBeangálachBhksBopomofoBrahBrailleBuigineachBut" + + "haideachCakmCansCariChamSeiricíochCoptachCipireachCoireallachDéivean" + + "ágrachDsrtDuplÉigipteach coiteannÉigipteach cliarúilIairiglifí Éigi" + + "pteachaElbaAetópachSeoirseachGlagalachGonmGotachGranGréagachGúiseará" + + "tachGurmúcachHan agus BopomofoHangalachHanHanoHan SimplitheHan Traid" + + "isiúntaHatrEabhrachHireagánachIairiglifí AnatólachaHmngSiollabraí Se" + + "apánachaSean-UngárachSean-IodáilicSeamóIávachSeapánachKaliCatacánach" + + "KharCiméarachKhojCannadachCóiréachKthiLanaLaosachCló GaelachLaidinea" + + "chLepcLiombúchLíneach ALíneach BFraserLiciachLidiachMahasánachMandMa" + + "inicéasachMarcIairiglifí MáigheachaMeindeachMercMeroMailéalamachModi" + + "MongólachMrooMteiMultMaenmarachSean-Arabach ThuaidhNbatNewaNkooNshuO" + + "ghamOlckOrkhOiríseachOsgeOsmaPalmPaucSean-PheirmeachPhagPhliPhlpFéin" + + "íceachPollard FoghrachPairtiach InscríbhinniúilRjngRúnachSamárachSe" + + "an-Arabach TheasSaurSgnwShawachShrdSiddSindSiolónachSoraSoyoSundSylo" + + "SiriceachTagbTakrTaleTaluTamalachTangTavtTeileagúchTifinaghTagálagac" + + "hTánachTéalannachTibéadachTirhÚgairíteachVaiiWaraSean-PheirseachDing" + + "chruthach Suiméar-AcádachÍsZanbOidhreachtNodaireacht Mhatamaiticiúil" + + "EmojiSiombailíGan ScríobhCoitiantaScript Anaithnid", + []uint16{ // 179 elements + // Entry 0 - 3F + 0x0000, 0x0004, 0x0004, 0x0016, 0x001a, 0x0021, 0x0033, 0x003e, + 0x004a, 0x0053, 0x0057, 0x005b, 0x0063, 0x006e, 0x0072, 0x0072, + 0x007a, 0x007e, 0x0085, 0x008f, 0x009a, 0x009e, 0x00a2, 0x00a6, + 0x00aa, 0x00b5, 0x00b5, 0x00bc, 0x00c5, 0x00d0, 0x00d0, 0x00df, + 0x00e3, 0x00e7, 0x00fb, 0x0110, 0x0128, 0x012c, 0x0135, 0x0135, + 0x013f, 0x0148, 0x014c, 0x0152, 0x0156, 0x015f, 0x016d, 0x0177, + 0x0188, 0x0191, 0x0194, 0x0198, 0x01a5, 0x01b6, 0x01ba, 0x01c2, + 0x01ce, 0x01e5, 0x01e9, 0x0200, 0x020e, 0x020e, 0x021c, 0x0222, + // Entry 40 - 7F + 0x0229, 0x0233, 0x0233, 0x0237, 0x0242, 0x0246, 0x0250, 0x0254, + 0x025d, 0x0267, 0x0267, 0x026b, 0x026f, 0x0276, 0x0276, 0x0282, + 0x028c, 0x0290, 0x0299, 0x02a3, 0x02ad, 0x02b3, 0x02b3, 0x02ba, + 0x02c1, 0x02cc, 0x02d0, 0x02dd, 0x02e1, 0x02f8, 0x0301, 0x0305, + 0x0309, 0x0316, 0x031a, 0x0324, 0x0324, 0x0328, 0x032c, 0x0330, + 0x033a, 0x034e, 0x0352, 0x0356, 0x0356, 0x035a, 0x035e, 0x0363, + 0x0367, 0x036b, 0x0375, 0x0379, 0x037d, 0x0381, 0x0385, 0x0394, + 0x0398, 0x039c, 0x03a0, 0x03a0, 0x03ac, 0x03bc, 0x03d7, 0x03db, + // Entry 80 - BF + 0x03db, 0x03e2, 0x03eb, 0x03eb, 0x03fd, 0x0401, 0x0405, 0x040c, + 0x0410, 0x0414, 0x0418, 0x0422, 0x0426, 0x042a, 0x042e, 0x0432, + 0x043b, 0x043b, 0x043b, 0x043b, 0x043f, 0x0443, 0x0447, 0x044b, + 0x0453, 0x0457, 0x045b, 0x0466, 0x0466, 0x046e, 0x0479, 0x0480, + 0x048b, 0x0495, 0x0499, 0x04a6, 0x04aa, 0x04aa, 0x04ae, 0x04ae, + 0x04bd, 0x04dc, 0x04df, 0x04e3, 0x04ed, 0x0509, 0x050e, 0x0518, + 0x0524, 0x052d, 0x053d, }, }, { // gd - "AfakaAlbàinis ChabhcasachAhomArabaisAramais impireilAirmeinisAvestanaisB" + - "aliBamumBassa VahBatakBeangailisComharran BlissBopomofoBrahmiBraille" + - "BuhidChakmaSgrìobhadh Lideach Aonaichte nan Tùsanach CanadachChamChe" + - "rokeeCirthCoptaisCìoprasaisCirilisCirilis Seann-Slàbhais na h-Eaglai" + - "seDevanagariDeseretSealbh-sgrìobhadh ÈipheiteachGe’ezCairtbheilisGot" + - "aisGranthaGreugaisGujaratiGurmukhiHangulHanHanunooHan simplichteHan " + - "tradaiseantaEabhraHiraganaDealbh-sgrìobhadh AnatolachPahawh HmongKat" + - "akana no HiraganaSeann-UngaraisSeann-EadailtisJamoDeàbhanaisSeapanai" + - "sJurchenKayah LiKatakanaKharoshthiCmèarKhojkiKannadaCoirèanaisKpelle" + - "KaithiLannaLàthoLaideann frakturLaideann GhàidhealachLaideannLepchaL" + - "imbuLinear ALinear BLomaMahajaniDealbh-sgrìobhadh MayachMendeMalayal" + - "amModiMongolaisMroMeitei MayekMultaniMiànmarSeann-Arabach ThuathachN" + - "axi GebaN’koNüshuOgham-chraobhOl ChikiOrkhonOriyaOsmanyaPau Cin HauP" + - "hags-paPartais snaidh-sgrìobhteRejangRongorongoRùn-sgrìobhadhSaratiS" + - "eann-Arabais DheasachSaurashtraSharadaSiddhamKhudawadiSinhalaSora So" + - "mpengSundaSyloti NagriSuraidheacSuraidheac SiarachSuraidheac EarachT" + - "agbanwaTakriTai LeTai Lue ÙrTaimilTangutTai VietTeluguTengwarTifinag" + - "hTagalogThaanaTàidhTibeitisTirhutaVaiVarang KshitiWoleaiSeann-Pheirs" + - "isYiGnìomhairean matamataigSamhlaidheanGun sgrìobhadhCoitcheannLitre" + - "adh neo-aithnichte", - []uint16{ // 176 elements - // Entry 0 - 3F - 0x0000, 0x0000, 0x0005, 0x001a, 0x001e, 0x0025, 0x0035, 0x003e, - 0x0048, 0x004c, 0x0051, 0x005a, 0x005f, 0x0069, 0x0069, 0x0078, - 0x0080, 0x0086, 0x008d, 0x008d, 0x0092, 0x0098, 0x00cc, 0x00cc, - 0x00d0, 0x00d8, 0x00dd, 0x00e4, 0x00ef, 0x00f6, 0x011b, 0x0125, - 0x012c, 0x012c, 0x012c, 0x012c, 0x014b, 0x014b, 0x0152, 0x0152, - 0x015e, 0x015e, 0x0164, 0x016b, 0x0173, 0x017b, 0x0183, 0x0183, - 0x0189, 0x018c, 0x0193, 0x01a1, 0x01b1, 0x01b1, 0x01b7, 0x01bf, - 0x01db, 0x01e7, 0x01fb, 0x0209, 0x0209, 0x0218, 0x021c, 0x0227, - // Entry 40 - 7F - 0x0230, 0x0237, 0x023f, 0x0247, 0x0251, 0x0257, 0x025d, 0x0264, - 0x026f, 0x0275, 0x027b, 0x0280, 0x0286, 0x0296, 0x02ac, 0x02b4, - 0x02ba, 0x02bf, 0x02c7, 0x02cf, 0x02cf, 0x02d3, 0x02d3, 0x02d3, - 0x02db, 0x02db, 0x02db, 0x02db, 0x02f4, 0x02f9, 0x02f9, 0x02f9, - 0x0302, 0x0306, 0x030f, 0x030f, 0x0312, 0x031e, 0x0325, 0x032d, - 0x0344, 0x0344, 0x0344, 0x034d, 0x0353, 0x0359, 0x0366, 0x036e, - 0x0374, 0x0379, 0x0379, 0x0380, 0x0380, 0x038b, 0x038b, 0x0393, - 0x0393, 0x0393, 0x0393, 0x0393, 0x0393, 0x03ac, 0x03b2, 0x03bc, - // Entry 80 - BF - 0x03cc, 0x03cc, 0x03d2, 0x03e8, 0x03f2, 0x03f2, 0x03f2, 0x03f9, - 0x0400, 0x0409, 0x0410, 0x041c, 0x0421, 0x042d, 0x0437, 0x0437, - 0x0449, 0x045a, 0x0462, 0x0467, 0x046d, 0x0478, 0x047e, 0x0484, - 0x048c, 0x0492, 0x0499, 0x04a1, 0x04a8, 0x04ae, 0x04b4, 0x04bc, - 0x04c3, 0x04c3, 0x04c6, 0x04c6, 0x04d3, 0x04d9, 0x04e7, 0x04e7, - 0x04e9, 0x04e9, 0x0501, 0x0501, 0x050d, 0x051c, 0x0526, 0x053d, + "AdlamAfakaAlbàinis ChabhcasachAhomArabaisAramais impireilAirmeinisAvesta" + + "naisBaliBamumBassa VahBatakBeangailisBhaiksukiComharran BlissBopomof" + + "oBrahmiBrailleLontaraBuhidChakmaSgrìobhadh Lideach Aonaichte nan Tùs" + + "anach CanadachCarianChamCherokeeCirthCoptaisCìoprasaisCirilisCirilis" + + " Seann-Slàbhais na h-EaglaiseDevanagariDeseretGearr-sgrìobhadh Duplo" + + "yéSealbh-sgrìobhadh ÈipheiteachElbasanGe’ezCairtbheilisGlagoliticeac" + + "hMasaram GondiGotaisGranthaGreugaisGujaratiGurmukhiHan le BopomofoHa" + + "ngulHanHanunooHan simplichteHan tradaiseantaHatranEabhraHiraganaDeal" + + "bh-sgrìobhadh AnatolachPahawh HmongKatakana no HiraganaSeann-Ungarai" + + "sSeann-EadailtisJamoDeàbhanaisSeapanaisJurchenKayah LiKatakanaKharos" + + "hthiCmèarKhojkiKannadaCoirèanaisKpelleKaithiLannaLàthoLaideann frakt" + + "urLaideann GhàidhealachLaideannLepchaLimbuLinear ALinear BLisuLomaLy" + + "cianLydianMahajaniMandaeanManichaeanMarchenDealbh-sgrìobhadh MayachM" + + "endeMeroiticeach ceangailteMeroiticeachMalayalamModiMongolaisMroMeit" + + "ei MayekMultaniMiànmarSeann-Arabach ThuathachNabataeanNewaNaxi GebaN" + + "’koNüshuOgham-chraobhOl ChikiOrkhonOriyaOsageOsmanyaPalmyrenePau C" + + "in HauSeann-PhermicPhags-paPahlavi nan snaidh-sgrìobhaidheanPahlavi " + + "nan saltairPheniceachMiao PhollardPartais snaidh-sgrìobhteRejangRong" + + "orongoRùn-sgrìobhadhSamaritanaisSaratiSeann-Arabais DheasachSaurasht" + + "raSgrìobhadh cainnte-sanaisSgrìobhadh an t-SeathaichSharadaSiddhamKh" + + "udawadiSinhalaSora SompengSoyomboSundaSyloti NagriSuraidheacSuraidhe" + + "ac SiarachSuraidheac EarachTagbanwaTakriTai LeTai Lue ÙrTaimilTangut" + + "Tai VietTeluguTengwarTifinaghTagalogThaanaTàidhTibeitisTirhutaUgarit" + + "iceachVaiVarang KshitiWoleaiSeann-PheirsisGèinn-sgrìobhadh Sumer is " + + "AkkadYiZanabazar ceàrnagachDìleabGnìomhairean matamataigEmojiSamhlai" + + "dheanGun sgrìobhadhCoitcheannLitreadh neo-aithnichte", + []uint16{ // 179 elements + // Entry 0 - 3F + 0x0000, 0x0005, 0x000a, 0x001f, 0x0023, 0x002a, 0x003a, 0x0043, + 0x004d, 0x0051, 0x0056, 0x005f, 0x0064, 0x006e, 0x0077, 0x0086, + 0x008e, 0x0094, 0x009b, 0x00a2, 0x00a7, 0x00ad, 0x00e1, 0x00e7, + 0x00eb, 0x00f3, 0x00f8, 0x00ff, 0x010a, 0x0111, 0x0136, 0x0140, + 0x0147, 0x0161, 0x0161, 0x0161, 0x0180, 0x0187, 0x018e, 0x018e, + 0x019a, 0x01a8, 0x01b5, 0x01bb, 0x01c2, 0x01ca, 0x01d2, 0x01da, + 0x01e9, 0x01ef, 0x01f2, 0x01f9, 0x0207, 0x0217, 0x021d, 0x0223, + 0x022b, 0x0247, 0x0253, 0x0267, 0x0275, 0x0275, 0x0284, 0x0288, + // Entry 40 - 7F + 0x0293, 0x029c, 0x02a3, 0x02ab, 0x02b3, 0x02bd, 0x02c3, 0x02c9, + 0x02d0, 0x02db, 0x02e1, 0x02e7, 0x02ec, 0x02f2, 0x0302, 0x0318, + 0x0320, 0x0326, 0x032b, 0x0333, 0x033b, 0x033f, 0x0343, 0x0349, + 0x034f, 0x0357, 0x035f, 0x0369, 0x0370, 0x0389, 0x038e, 0x03a5, + 0x03b1, 0x03ba, 0x03be, 0x03c7, 0x03c7, 0x03ca, 0x03d6, 0x03dd, + 0x03e5, 0x03fc, 0x0405, 0x0409, 0x0412, 0x0418, 0x041e, 0x042b, + 0x0433, 0x0439, 0x043e, 0x0443, 0x044a, 0x0453, 0x045e, 0x046b, + 0x0473, 0x0495, 0x04a8, 0x04a8, 0x04b2, 0x04bf, 0x04d8, 0x04de, + // Entry 80 - BF + 0x04e8, 0x04f8, 0x0504, 0x050a, 0x0520, 0x052a, 0x0544, 0x055e, + 0x0565, 0x056c, 0x0575, 0x057c, 0x0588, 0x058f, 0x0594, 0x05a0, + 0x05aa, 0x05aa, 0x05bc, 0x05cd, 0x05d5, 0x05da, 0x05e0, 0x05eb, + 0x05f1, 0x05f7, 0x05ff, 0x0605, 0x060c, 0x0614, 0x061b, 0x0621, + 0x0627, 0x062f, 0x0636, 0x0642, 0x0645, 0x0645, 0x0652, 0x0658, + 0x0666, 0x0687, 0x0689, 0x069e, 0x06a5, 0x06bd, 0x06c2, 0x06ce, + 0x06dd, 0x06e7, 0x06fe, }, }, { // gl @@ -27422,34 +28920,35 @@ var scriptHeaders = [252]header{ "irílicodevanágarietíopexeorxianogregoguxaratígurmukhihanbhangulhanha" + "n simplificadohan tradicionalhebreohiraganasilabarios xaponesesjamox" + "aponéskatakanakhmercanaréscoreanolaosianolatinomalabarmongolbirmanoo" + - "riácingaléstámiltelugúthaanatailandéstibetanonotación matemáticaemoj" + + "riácingaléstámilteluguthaanatailandéstibetanonotación matemáticaemoj" + "issímbolosnon escritocomúnalfabeto descoñecido", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x0015, 0x0015, 0x0015, 0x001d, 0x001d, 0x0024, 0x0024, 0x0024, 0x0024, 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, 0x0052, 0x0052, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x0064, 0x0064, - 0x006d, 0x006d, 0x006d, 0x006d, 0x0072, 0x007b, 0x0083, 0x0087, - 0x008d, 0x0090, 0x0090, 0x00a0, 0x00af, 0x00af, 0x00b5, 0x00bd, - 0x00bd, 0x00bd, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d5, 0x00d5, + 0x006d, 0x006d, 0x006d, 0x006d, 0x006d, 0x0072, 0x007b, 0x0083, + 0x0087, 0x008d, 0x0090, 0x0090, 0x00a0, 0x00af, 0x00af, 0x00b5, + 0x00bd, 0x00bd, 0x00bd, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d5, // Entry 40 - 7F - 0x00dd, 0x00dd, 0x00dd, 0x00e5, 0x00e5, 0x00ea, 0x00ea, 0x00f2, - 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x0101, 0x0101, 0x0101, 0x0107, + 0x00d5, 0x00dd, 0x00dd, 0x00dd, 0x00e5, 0x00e5, 0x00ea, 0x00ea, + 0x00f2, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x0101, 0x0101, 0x0101, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, 0x0107, - 0x010e, 0x010e, 0x0114, 0x0114, 0x0114, 0x0114, 0x0114, 0x011b, + 0x0107, 0x010e, 0x010e, 0x0114, 0x0114, 0x0114, 0x0114, 0x0114, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, - 0x011b, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, + 0x011b, 0x011b, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, // Entry 80 - BF 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, - 0x0120, 0x0120, 0x0129, 0x0129, 0x0129, 0x0129, 0x0129, 0x0129, - 0x0129, 0x0129, 0x0129, 0x0129, 0x0129, 0x0129, 0x012f, 0x012f, - 0x012f, 0x0136, 0x0136, 0x0136, 0x0136, 0x013c, 0x0146, 0x014e, - 0x014e, 0x014e, 0x014e, 0x014e, 0x014e, 0x014e, 0x014e, 0x014e, - 0x014e, 0x014e, 0x0163, 0x0169, 0x0172, 0x017d, 0x0183, 0x0198, + 0x0120, 0x0120, 0x0120, 0x0129, 0x0129, 0x0129, 0x0129, 0x0129, + 0x0129, 0x0129, 0x0129, 0x0129, 0x0129, 0x0129, 0x0129, 0x0129, + 0x012f, 0x012f, 0x012f, 0x0135, 0x0135, 0x0135, 0x0135, 0x013b, + 0x0145, 0x014d, 0x014d, 0x014d, 0x014d, 0x014d, 0x014d, 0x014d, + 0x014d, 0x014d, 0x014d, 0x014d, 0x014d, 0x0162, 0x0168, 0x0171, + 0x017c, 0x0182, 0x0197, }, }, { // gsw @@ -27473,32 +28972,33 @@ var scriptHeaders = [252]header{ "tischUgaritischVaiSichtbari SchpraachAltpersischSumerisch-akkadischi" + " KeilschriftYiG’eerbtä SchriftwärtSchriftlosi SchpraachUnbeschtimmtU" + "ncodiirti Schrift", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x000c, 0x0015, 0x0020, 0x002b, 0x002b, 0x002b, 0x0035, 0x003f, 0x003f, 0x004c, 0x0054, 0x005a, 0x0068, 0x0073, 0x0078, 0x0078, 0x007c, 0x0083, 0x0087, 0x008f, 0x0094, 0x009c, 0x00a7, 0x00b1, 0x00c1, 0x00cd, 0x00d4, 0x00d4, 0x00e9, 0x00ff, 0x0118, 0x0118, 0x0123, 0x012b, - 0x0134, 0x0140, 0x0147, 0x0147, 0x0151, 0x015b, 0x0163, 0x0163, - 0x0169, 0x0174, 0x017b, 0x019c, 0x01be, 0x01be, 0x01c8, 0x01d0, - 0x01d0, 0x01dc, 0x01f2, 0x01fe, 0x020b, 0x0216, 0x0216, 0x0221, - // Entry 40 - 7F - 0x022a, 0x022a, 0x0232, 0x023a, 0x0244, 0x0249, 0x0249, 0x0250, - 0x025a, 0x025a, 0x025a, 0x025f, 0x0267, 0x0284, 0x02a5, 0x02af, - 0x02b5, 0x02ba, 0x02c2, 0x02ca, 0x02ca, 0x02ca, 0x02d1, 0x02d8, - 0x02d8, 0x02e2, 0x02ee, 0x02ee, 0x02ff, 0x02ff, 0x02ff, 0x0309, - 0x0313, 0x0313, 0x031d, 0x0321, 0x0321, 0x032d, 0x032d, 0x0337, - 0x0337, 0x0337, 0x0337, 0x0337, 0x033d, 0x033d, 0x0342, 0x034a, - 0x0356, 0x035b, 0x035b, 0x0364, 0x0364, 0x0364, 0x036f, 0x0377, - 0x0377, 0x0377, 0x037e, 0x0389, 0x039b, 0x039b, 0x03a1, 0x03ab, - // Entry 80 - BF - 0x03b7, 0x03c4, 0x03ca, 0x03ca, 0x03d4, 0x03e7, 0x03f4, 0x03f4, - 0x03f4, 0x03f4, 0x0401, 0x0401, 0x040d, 0x0419, 0x0420, 0x043f, - 0x044c, 0x0458, 0x0460, 0x0460, 0x0466, 0x046d, 0x0476, 0x0476, - 0x0476, 0x047c, 0x0483, 0x048b, 0x0492, 0x0498, 0x049c, 0x04a6, - 0x04a6, 0x04b0, 0x04b3, 0x04c6, 0x04c6, 0x04c6, 0x04d1, 0x04f1, - 0x04f3, 0x050b, 0x050b, 0x050b, 0x050b, 0x0520, 0x052c, 0x053e, + 0x0134, 0x0140, 0x0140, 0x0147, 0x0147, 0x0151, 0x015b, 0x0163, + 0x0163, 0x0169, 0x0174, 0x017b, 0x019c, 0x01be, 0x01be, 0x01c8, + 0x01d0, 0x01d0, 0x01dc, 0x01f2, 0x01fe, 0x020b, 0x0216, 0x0216, + // Entry 40 - 7F + 0x0221, 0x022a, 0x022a, 0x0232, 0x023a, 0x0244, 0x0249, 0x0249, + 0x0250, 0x025a, 0x025a, 0x025a, 0x025f, 0x0267, 0x0284, 0x02a5, + 0x02af, 0x02b5, 0x02ba, 0x02c2, 0x02ca, 0x02ca, 0x02ca, 0x02d1, + 0x02d8, 0x02d8, 0x02e2, 0x02ee, 0x02ee, 0x02ff, 0x02ff, 0x02ff, + 0x0309, 0x0313, 0x0313, 0x031d, 0x0321, 0x0321, 0x032d, 0x032d, + 0x0337, 0x0337, 0x0337, 0x0337, 0x0337, 0x033d, 0x033d, 0x0342, + 0x034a, 0x0356, 0x035b, 0x035b, 0x0364, 0x0364, 0x0364, 0x036f, + 0x0377, 0x0377, 0x0377, 0x037e, 0x0389, 0x039b, 0x039b, 0x03a1, + // Entry 80 - BF + 0x03ab, 0x03b7, 0x03c4, 0x03ca, 0x03ca, 0x03d4, 0x03e7, 0x03f4, + 0x03f4, 0x03f4, 0x03f4, 0x0401, 0x0401, 0x0401, 0x040d, 0x0419, + 0x0420, 0x043f, 0x044c, 0x0458, 0x0460, 0x0460, 0x0466, 0x046d, + 0x0476, 0x0476, 0x0476, 0x047c, 0x0483, 0x048b, 0x0492, 0x0498, + 0x049c, 0x04a6, 0x04a6, 0x04b0, 0x04b3, 0x04c6, 0x04c6, 0x04c6, + 0x04d1, 0x04f1, 0x04f3, 0x04f3, 0x050b, 0x050b, 0x050b, 0x050b, + 0x0520, 0x052c, 0x053e, }, }, { // gu @@ -27528,32 +29028,33 @@ var scriptHeaders = [252]header{ "merscekannadscekorejscelaoscełaćonscemalayalamscemongolsceburmasceor" + "iyasinghalscetamilsceteluguthaanathailandscetibetscesymbolebjez pism" + "apowšitkownenjeznate pismo", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0007, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x0018, 0x0018, 0x0018, 0x0020, 0x0020, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x0038, 0x0038, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x004b, 0x004b, - 0x0054, 0x0054, 0x0054, 0x0054, 0x005c, 0x0064, 0x006c, 0x006c, - 0x0072, 0x0079, 0x0079, 0x0092, 0x00ad, 0x00ad, 0x00b6, 0x00be, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x005c, 0x0064, 0x006c, + 0x006c, 0x0072, 0x0079, 0x0079, 0x0092, 0x00ad, 0x00ad, 0x00b6, 0x00be, 0x00be, 0x00be, 0x00be, 0x00be, 0x00be, 0x00be, 0x00be, // Entry 40 - 7F - 0x00c6, 0x00c6, 0x00c6, 0x00ce, 0x00ce, 0x00d6, 0x00d6, 0x00df, - 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00ed, 0x00ed, 0x00ed, 0x00f7, + 0x00be, 0x00c6, 0x00c6, 0x00c6, 0x00ce, 0x00ce, 0x00d6, 0x00d6, + 0x00df, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00ed, 0x00ed, 0x00ed, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00f7, - 0x0103, 0x0103, 0x010c, 0x010c, 0x010c, 0x010c, 0x010c, 0x0114, + 0x00f7, 0x0103, 0x0103, 0x010c, 0x010c, 0x010c, 0x010c, 0x010c, 0x0114, 0x0114, 0x0114, 0x0114, 0x0114, 0x0114, 0x0114, 0x0114, - 0x0114, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0114, 0x0114, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, // Entry 80 - BF 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, - 0x0119, 0x0119, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, - 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x012b, 0x012b, - 0x012b, 0x0131, 0x0131, 0x0131, 0x0131, 0x0137, 0x0142, 0x014a, - 0x014a, 0x014a, 0x014a, 0x014a, 0x014a, 0x014a, 0x014a, 0x014a, - 0x014a, 0x014a, 0x014a, 0x014a, 0x0151, 0x015b, 0x0167, 0x0175, + 0x0119, 0x0119, 0x0119, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, + 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, + 0x012b, 0x012b, 0x012b, 0x0131, 0x0131, 0x0131, 0x0131, 0x0137, + 0x0142, 0x014a, 0x014a, 0x014a, 0x014a, 0x014a, 0x014a, 0x014a, + 0x014a, 0x014a, 0x014a, 0x014a, 0x014a, 0x014a, 0x014a, 0x0151, + 0x015b, 0x0167, 0x0175, }, }, { // hu @@ -27571,7 +29072,7 @@ var scriptHeaders = [252]header{ {}, // ig { // ii "ꀊꇁꀨꁱꂷꀊꆨꌦꇁꃚꁱꂷꈝꐯꉌꈲꁱꂷꀎꋏꉌꈲꁱꂷꇁꄀꁱꂷꆈꌠꁱꂷꁱꀋꉆꌠꅉꀋꐚꌠꁱꂷ", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, @@ -27579,11 +29080,11 @@ var scriptHeaders = [252]header{ 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, - 0x0024, 0x0024, 0x0024, 0x0036, 0x0048, 0x0048, 0x0048, 0x0048, + 0x0024, 0x0024, 0x0024, 0x0024, 0x0036, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, // Entry 40 - 7F 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, - 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0054, + 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, @@ -27596,7 +29097,8 @@ var scriptHeaders = [252]header{ 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, - 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x006c, 0x006c, 0x007e, + 0x0054, 0x0054, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, + 0x006c, 0x006c, 0x007e, }, }, { // is @@ -27614,7 +29116,7 @@ var scriptHeaders = [252]header{ { // jgo "mík -ŋwaꞌnɛ yi ɛ́ líŋɛ́nɛ Latɛ̂ŋntúu yi pɛ́ ká ŋwaꞌnεntɛ-ŋwaꞌnɛ yí pɛ́ k" + "á kɛ́ jí", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -27626,7 +29128,7 @@ var scriptHeaders = [252]header{ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // Entry 40 - 7F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x002f, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, @@ -27639,7 +29141,8 @@ var scriptHeaders = [252]header{ 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, - 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x004c, 0x004c, 0x0073, + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + 0x004c, 0x004c, 0x0073, }, }, {}, // jmc @@ -27656,32 +29159,33 @@ var scriptHeaders = [252]header{ "ganajaponeskatakanakmerkanareskorianulausianulatinumalaialammongolbi" + "rmanesoriyasingalestamiltelugutaanatailandestibetanusímbulusnãu skri" + "tukomunskrita diskonxedu", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0017, 0x0017, 0x0017, 0x001f, 0x001f, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x002f, 0x002f, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0039, 0x0042, 0x0042, - 0x004a, 0x004a, 0x004a, 0x004a, 0x004f, 0x0057, 0x005e, 0x005e, - 0x0064, 0x0067, 0x0067, 0x0077, 0x0086, 0x0086, 0x008d, 0x0094, + 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004f, 0x0057, 0x005e, + 0x005e, 0x0064, 0x0067, 0x0067, 0x0077, 0x0086, 0x0086, 0x008d, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, // Entry 40 - 7F - 0x009b, 0x009b, 0x009b, 0x00a3, 0x00a3, 0x00a7, 0x00a7, 0x00ae, - 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00bd, 0x00bd, 0x00bd, 0x00c3, + 0x0094, 0x009b, 0x009b, 0x009b, 0x00a3, 0x00a3, 0x00a7, 0x00a7, + 0x00ae, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00bd, 0x00bd, 0x00bd, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, - 0x00cc, 0x00cc, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00da, + 0x00c3, 0x00cc, 0x00cc, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00d2, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, 0x00da, - 0x00da, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, + 0x00da, 0x00da, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, // Entry 80 - BF 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, 0x00df, - 0x00df, 0x00df, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, - 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00ec, 0x00ec, - 0x00ec, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f7, 0x0100, 0x0108, - 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, - 0x0108, 0x0108, 0x0108, 0x0108, 0x0111, 0x011c, 0x0121, 0x0132, + 0x00df, 0x00df, 0x00df, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, + 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, 0x00e7, + 0x00ec, 0x00ec, 0x00ec, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f7, + 0x0100, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, + 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0111, + 0x011c, 0x0121, 0x0132, }, }, {}, // khq @@ -27706,7 +29210,37 @@ var scriptHeaders = [252]header{ koScriptIdx, }, {}, // ko-KP - {}, // kok + { // kok + "अरेबिकसिरिलिकदेवनागरीसोंपी हॅनपारंपारीक हॅनलॅटीनअलिखीतअज्ञात लिपी", + []uint16{ // 179 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0027, 0x0027, 0x003f, + 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, + 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, + 0x003f, 0x003f, 0x003f, 0x003f, 0x0058, 0x007d, 0x007d, 0x007d, + 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, + // Entry 40 - 7F + 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, + 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, + 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, + 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, + 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, + 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, + 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, + 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, + // Entry 80 - BF + 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, + 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, + 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, + 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, + 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, + 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, 0x008c, + 0x009e, 0x009e, 0x00bd, + }, + }, { // ks "اَربیاَرمانیَناَویستَنبالَنیٖزباتَکبیٚنگٲلۍبِلِس سِمبلزبوپوموفوبرٛاہمیبر" + "یلبُگِنیٖزبُہِدیُنِفایِڑ کنیڑِیَن ایٚب آرجِنَل سِلیبِککاریَنچَمچیٚر" + @@ -27725,32 +29259,33 @@ var scriptHeaders = [252]header{ "و تیلوتَمِلتیلگوٗتیٚنگوارتِفِناگتَگَلوگتھاناتھاےتِبتیاُگارِٹِکواےوِ" + "زِبٕل سپیٖچپرون فارسیسُمیرو اکادیَن کوٗنِفامیٖیلیٚکھنَےعاماَن زٲنۍ " + "یا نا لَگہٕ ہار رَسمُل خظ", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x000a, 0x001c, 0x002c, 0x003c, 0x003c, 0x003c, 0x0046, 0x0056, 0x0056, 0x006d, 0x007d, 0x008b, 0x0093, 0x00a3, 0x00ad, 0x00ad, 0x00f7, 0x0103, 0x0109, 0x0117, 0x0121, 0x012d, 0x013d, 0x014d, 0x017f, 0x018f, 0x01a1, 0x01a1, 0x01c2, 0x01e3, 0x020a, 0x020a, 0x021c, 0x023b, - 0x024b, 0x025f, 0x026b, 0x026b, 0x0279, 0x0283, 0x0291, 0x0291, - 0x029f, 0x02a5, 0x02b3, 0x02d0, 0x02e4, 0x02e4, 0x02f0, 0x0302, - 0x0302, 0x0317, 0x033d, 0x0358, 0x0364, 0x037b, 0x037b, 0x038b, - // Entry 40 - 7F - 0x039d, 0x039d, 0x03aa, 0x03ba, 0x03ca, 0x03d6, 0x03d6, 0x03e2, - 0x03ee, 0x03ee, 0x03ee, 0x03f6, 0x03fc, 0x0415, 0x042a, 0x0434, - 0x0440, 0x044c, 0x045f, 0x0472, 0x0472, 0x0472, 0x0480, 0x048e, - 0x048e, 0x049e, 0x04b0, 0x04b0, 0x04cf, 0x04cf, 0x04cf, 0x04df, - 0x04ef, 0x04ef, 0x0503, 0x050b, 0x050b, 0x051e, 0x051e, 0x052e, - 0x052e, 0x052e, 0x052e, 0x052e, 0x053b, 0x053b, 0x0547, 0x0556, - 0x0564, 0x0570, 0x0570, 0x0580, 0x0580, 0x0580, 0x0595, 0x05a4, - 0x05a4, 0x05a4, 0x05bb, 0x05cf, 0x05ea, 0x05ea, 0x05f8, 0x0611, - // Entry 80 - BF - 0x061b, 0x062d, 0x0639, 0x0639, 0x0649, 0x0666, 0x0672, 0x0672, - 0x0672, 0x0672, 0x0680, 0x0680, 0x0692, 0x06a9, 0x06b9, 0x06e2, - 0x06fd, 0x0718, 0x0728, 0x0728, 0x0734, 0x0745, 0x074f, 0x074f, - 0x074f, 0x075b, 0x076b, 0x0779, 0x0787, 0x0791, 0x0799, 0x07a3, - 0x07a3, 0x07b5, 0x07bb, 0x07d4, 0x07d4, 0x07d4, 0x07e7, 0x0813, - 0x0819, 0x0819, 0x0819, 0x0819, 0x0819, 0x0829, 0x082f, 0x086c, + 0x024b, 0x025f, 0x025f, 0x026b, 0x026b, 0x0279, 0x0283, 0x0291, + 0x0291, 0x029f, 0x02a5, 0x02b3, 0x02d0, 0x02e4, 0x02e4, 0x02f0, + 0x0302, 0x0302, 0x0317, 0x033d, 0x0358, 0x0364, 0x037b, 0x037b, + // Entry 40 - 7F + 0x038b, 0x039d, 0x039d, 0x03aa, 0x03ba, 0x03ca, 0x03d6, 0x03d6, + 0x03e2, 0x03ee, 0x03ee, 0x03ee, 0x03f6, 0x03fc, 0x0415, 0x042a, + 0x0434, 0x0440, 0x044c, 0x045f, 0x0472, 0x0472, 0x0472, 0x0480, + 0x048e, 0x048e, 0x049e, 0x04b0, 0x04b0, 0x04cf, 0x04cf, 0x04cf, + 0x04df, 0x04ef, 0x04ef, 0x0503, 0x050b, 0x050b, 0x051e, 0x051e, + 0x052e, 0x052e, 0x052e, 0x052e, 0x052e, 0x053b, 0x053b, 0x0547, + 0x0556, 0x0564, 0x0570, 0x0570, 0x0580, 0x0580, 0x0580, 0x0595, + 0x05a4, 0x05a4, 0x05a4, 0x05bb, 0x05cf, 0x05ea, 0x05ea, 0x05f8, + // Entry 80 - BF + 0x0611, 0x061b, 0x062d, 0x0639, 0x0639, 0x0649, 0x0666, 0x0672, + 0x0672, 0x0672, 0x0672, 0x0680, 0x0680, 0x0680, 0x0692, 0x06a9, + 0x06b9, 0x06e2, 0x06fd, 0x0718, 0x0728, 0x0728, 0x0734, 0x0745, + 0x074f, 0x074f, 0x074f, 0x075b, 0x076b, 0x0779, 0x0787, 0x0791, + 0x0799, 0x07a3, 0x07a3, 0x07b5, 0x07bb, 0x07d4, 0x07d4, 0x07d4, + 0x07e7, 0x0813, 0x0819, 0x0819, 0x0819, 0x0819, 0x0819, 0x0819, + 0x0829, 0x082f, 0x086c, }, }, {}, // ksb @@ -27770,32 +29305,33 @@ var scriptHeaders = [252]header{ "malledivesche Taana-Schrefftailändesche Schrefftibeetesche Schreff-Z" + "eiche ävver kein Schreff--jaa keij Schreff--öhnß en Schreff--onbikan" + "nte Schreff-", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0013, 0x0013, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x003c, 0x003c, 0x003c, 0x005c, 0x005c, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, 0x007e, 0x007e, 0x0099, 0x0099, 0x0099, 0x0099, 0x0099, 0x0099, 0x0099, 0x00ae, 0x00ae, - 0x00c4, 0x00c4, 0x00c4, 0x00c4, 0x00d8, 0x00ed, 0x0106, 0x0106, - 0x011c, 0x0134, 0x0134, 0x0153, 0x0176, 0x0176, 0x018c, 0x01aa, + 0x00c4, 0x00c4, 0x00c4, 0x00c4, 0x00c4, 0x00d8, 0x00ed, 0x0106, + 0x0106, 0x011c, 0x0134, 0x0134, 0x0153, 0x0176, 0x0176, 0x018c, 0x01aa, 0x01aa, 0x01aa, 0x01aa, 0x01aa, 0x01aa, 0x01aa, 0x01aa, // Entry 40 - 7F - 0x01c0, 0x01c0, 0x01c0, 0x01de, 0x01de, 0x01eb, 0x01eb, 0x0203, - 0x0238, 0x0238, 0x0238, 0x0238, 0x024b, 0x024b, 0x024b, 0x025e, + 0x01aa, 0x01c0, 0x01c0, 0x01c0, 0x01de, 0x01de, 0x01eb, 0x01eb, + 0x0203, 0x0238, 0x0238, 0x0238, 0x0238, 0x024b, 0x024b, 0x024b, 0x025e, 0x025e, 0x025e, 0x025e, 0x025e, 0x025e, 0x025e, 0x025e, 0x025e, 0x025e, 0x025e, 0x025e, 0x025e, 0x025e, 0x025e, 0x025e, - 0x0278, 0x0278, 0x028d, 0x028d, 0x028d, 0x028d, 0x028d, 0x02a1, + 0x025e, 0x0278, 0x0278, 0x028d, 0x028d, 0x028d, 0x028d, 0x028d, 0x02a1, 0x02a1, 0x02a1, 0x02a1, 0x02a1, 0x02a1, 0x02a1, 0x02a1, - 0x02a1, 0x02b7, 0x02b7, 0x02b7, 0x02b7, 0x02b7, 0x02b7, 0x02b7, + 0x02a1, 0x02a1, 0x02b7, 0x02b7, 0x02b7, 0x02b7, 0x02b7, 0x02b7, 0x02b7, 0x02b7, 0x02b7, 0x02b7, 0x02b7, 0x02b7, 0x02b7, 0x02b7, // Entry 80 - BF 0x02b7, 0x02b7, 0x02b7, 0x02b7, 0x02b7, 0x02b7, 0x02b7, 0x02b7, - 0x02b7, 0x02b7, 0x02ce, 0x02ce, 0x02ce, 0x02ce, 0x02ce, 0x02ce, - 0x02ce, 0x02ce, 0x02ce, 0x02ce, 0x02ce, 0x02ce, 0x02e1, 0x02e1, - 0x02e1, 0x02f8, 0x02f8, 0x02f8, 0x02f8, 0x0313, 0x0328, 0x033b, - 0x033b, 0x033b, 0x033b, 0x033b, 0x033b, 0x033b, 0x033b, 0x033b, - 0x033b, 0x033b, 0x033b, 0x033b, 0x0357, 0x0369, 0x037c, 0x0390, + 0x02b7, 0x02b7, 0x02b7, 0x02ce, 0x02ce, 0x02ce, 0x02ce, 0x02ce, + 0x02ce, 0x02ce, 0x02ce, 0x02ce, 0x02ce, 0x02ce, 0x02ce, 0x02ce, + 0x02e1, 0x02e1, 0x02e1, 0x02f8, 0x02f8, 0x02f8, 0x02f8, 0x0313, + 0x0328, 0x033b, 0x033b, 0x033b, 0x033b, 0x033b, 0x033b, 0x033b, + 0x033b, 0x033b, 0x033b, 0x033b, 0x033b, 0x033b, 0x033b, 0x0357, + 0x0369, 0x037c, 0x0390, }, }, {}, // kw @@ -27824,32 +29360,33 @@ var scriptHeaders = [252]header{ "gThaanaThaiTibeteschUgariteschVaiSiichtbar SproochAlperseschSumeresc" + "h-akkadesch KeilschrëftYiGeierfte SchrëftwäertSymbolerOuni SchrëftOn" + "bestëmmtOncodéiert Schrëft", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x000c, 0x0015, 0x001e, 0x0029, 0x0029, 0x0029, 0x0033, 0x003d, 0x003d, 0x004b, 0x0053, 0x0059, 0x0067, 0x0072, 0x0077, 0x0077, 0x007b, 0x0082, 0x0086, 0x008e, 0x0093, 0x009b, 0x00a6, 0x00b0, 0x00c1, 0x00cb, 0x00d2, 0x00d2, 0x00e5, 0x00f9, 0x010f, 0x010f, 0x0119, 0x0121, - 0x012a, 0x0136, 0x013d, 0x013d, 0x0147, 0x014f, 0x0157, 0x0157, - 0x015d, 0x0167, 0x016e, 0x0184, 0x019c, 0x019c, 0x01a6, 0x01ae, - 0x01ae, 0x01ba, 0x01d0, 0x01db, 0x01e9, 0x01f3, 0x01f3, 0x01fe, - // Entry 40 - 7F - 0x0207, 0x0207, 0x020f, 0x0217, 0x0221, 0x0226, 0x0226, 0x022d, - 0x0237, 0x0237, 0x0237, 0x023c, 0x0244, 0x025f, 0x027c, 0x0287, - 0x028d, 0x0292, 0x029a, 0x02a2, 0x02a2, 0x02a2, 0x02a9, 0x02b0, - 0x02b0, 0x02ba, 0x02c6, 0x02c6, 0x02d7, 0x02d7, 0x02d7, 0x02e1, - 0x02eb, 0x02eb, 0x02f5, 0x02f9, 0x02f9, 0x0305, 0x0305, 0x030f, - 0x030f, 0x030f, 0x030f, 0x030f, 0x0315, 0x0315, 0x031a, 0x0322, - 0x032e, 0x0333, 0x0333, 0x033c, 0x033c, 0x033c, 0x0346, 0x034e, - 0x034e, 0x034e, 0x0355, 0x0360, 0x0372, 0x0372, 0x0378, 0x0382, - // Entry 80 - BF - 0x038e, 0x039b, 0x03a1, 0x03a1, 0x03ab, 0x03b8, 0x03c5, 0x03c5, - 0x03c5, 0x03c5, 0x03d2, 0x03d2, 0x03de, 0x03ea, 0x03f1, 0x040b, - 0x0416, 0x0420, 0x0420, 0x0420, 0x0426, 0x042d, 0x0436, 0x0436, - 0x0436, 0x043c, 0x0443, 0x044b, 0x0452, 0x0458, 0x045c, 0x0465, - 0x0465, 0x046f, 0x0472, 0x0483, 0x0483, 0x0483, 0x048d, 0x04ad, - 0x04af, 0x04c6, 0x04c6, 0x04c6, 0x04ce, 0x04db, 0x04e6, 0x04fa, + 0x012a, 0x0136, 0x0136, 0x013d, 0x013d, 0x0147, 0x014f, 0x0157, + 0x0157, 0x015d, 0x0167, 0x016e, 0x0184, 0x019c, 0x019c, 0x01a6, + 0x01ae, 0x01ae, 0x01ba, 0x01d0, 0x01db, 0x01e9, 0x01f3, 0x01f3, + // Entry 40 - 7F + 0x01fe, 0x0207, 0x0207, 0x020f, 0x0217, 0x0221, 0x0226, 0x0226, + 0x022d, 0x0237, 0x0237, 0x0237, 0x023c, 0x0244, 0x025f, 0x027c, + 0x0287, 0x028d, 0x0292, 0x029a, 0x02a2, 0x02a2, 0x02a2, 0x02a9, + 0x02b0, 0x02b0, 0x02ba, 0x02c6, 0x02c6, 0x02d7, 0x02d7, 0x02d7, + 0x02e1, 0x02eb, 0x02eb, 0x02f5, 0x02f9, 0x02f9, 0x0305, 0x0305, + 0x030f, 0x030f, 0x030f, 0x030f, 0x030f, 0x0315, 0x0315, 0x031a, + 0x0322, 0x032e, 0x0333, 0x0333, 0x033c, 0x033c, 0x033c, 0x0346, + 0x034e, 0x034e, 0x034e, 0x0355, 0x0360, 0x0372, 0x0372, 0x0378, + // Entry 80 - BF + 0x0382, 0x038e, 0x039b, 0x03a1, 0x03a1, 0x03ab, 0x03b8, 0x03c5, + 0x03c5, 0x03c5, 0x03c5, 0x03d2, 0x03d2, 0x03d2, 0x03de, 0x03ea, + 0x03f1, 0x040b, 0x0416, 0x0420, 0x0420, 0x0420, 0x0426, 0x042d, + 0x0436, 0x0436, 0x0436, 0x043c, 0x0443, 0x044b, 0x0452, 0x0458, + 0x045c, 0x0465, 0x0465, 0x046f, 0x0472, 0x0483, 0x0483, 0x0483, + 0x048d, 0x04ad, 0x04af, 0x04af, 0x04c6, 0x04c6, 0x04c6, 0x04ce, + 0x04db, 0x04e6, 0x04fa, }, }, {}, // lg @@ -27865,32 +29402,33 @@ var scriptHeaders = [252]header{ "اپوٙنیکاتانگاخئمئرکاناداکورئ ییلائولاتینمالایامموغولیمیانمارئوریاسی" + "ناھالاتامیلتئلئگوتاناتایلأندیتأبأتینئشوٙنە یانیسئسە نأبیەجائوفتاأنی" + "سئسە نادیار", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x000c, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0026, 0x0026, 0x0026, 0x0032, 0x0032, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x004c, 0x004c, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x0076, 0x0076, - 0x0080, 0x0080, 0x0080, 0x0080, 0x008e, 0x009e, 0x00b0, 0x00b0, - 0x00be, 0x00c6, 0x00c6, 0x00e0, 0x00f7, 0x00f7, 0x0101, 0x0111, + 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x008e, 0x009e, 0x00b0, + 0x00b0, 0x00be, 0x00c6, 0x00c6, 0x00e0, 0x00f7, 0x00f7, 0x0101, 0x0111, 0x0111, 0x0111, 0x0111, 0x0111, 0x0111, 0x0111, 0x0111, // Entry 40 - 7F - 0x011f, 0x011f, 0x011f, 0x012d, 0x012d, 0x0137, 0x0137, 0x0143, - 0x0150, 0x0150, 0x0150, 0x0150, 0x0158, 0x0158, 0x0158, 0x0162, + 0x0111, 0x011f, 0x011f, 0x011f, 0x012d, 0x012d, 0x0137, 0x0137, + 0x0143, 0x0150, 0x0150, 0x0150, 0x0150, 0x0158, 0x0158, 0x0158, 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, - 0x0170, 0x0170, 0x017c, 0x017c, 0x017c, 0x017c, 0x017c, 0x018a, + 0x0162, 0x0170, 0x0170, 0x017c, 0x017c, 0x017c, 0x017c, 0x017c, 0x018a, 0x018a, 0x018a, 0x018a, 0x018a, 0x018a, 0x018a, 0x018a, - 0x018a, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, + 0x018a, 0x018a, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, // Entry 80 - BF 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, - 0x0194, 0x0194, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, - 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01ae, 0x01ae, - 0x01ae, 0x01ba, 0x01ba, 0x01ba, 0x01ba, 0x01c2, 0x01d2, 0x01de, - 0x01de, 0x01de, 0x01de, 0x01de, 0x01de, 0x01de, 0x01de, 0x01de, - 0x01de, 0x01de, 0x01de, 0x01de, 0x01f1, 0x0208, 0x0218, 0x0231, + 0x0194, 0x0194, 0x0194, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, + 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, + 0x01ae, 0x01ae, 0x01ae, 0x01ba, 0x01ba, 0x01ba, 0x01ba, 0x01c2, + 0x01d2, 0x01de, 0x01de, 0x01de, 0x01de, 0x01de, 0x01de, 0x01de, + 0x01de, 0x01de, 0x01de, 0x01de, 0x01de, 0x01de, 0x01de, 0x01f1, + 0x0208, 0x0218, 0x0231, }, }, { // lt @@ -27911,7 +29449,7 @@ var scriptHeaders = [252]header{ {}, // mgh { // mgo "ngam ŋwaʼringam choʼabo ŋwaʼri tisɔʼ", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -27923,7 +29461,7 @@ var scriptHeaders = [252]header{ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // Entry 40 - 7F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, @@ -27936,7 +29474,8 @@ var scriptHeaders = [252]header{ 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, - 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x0017, 0x0017, 0x002b, + 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, + 0x0017, 0x0017, 0x002b, }, }, { // mk @@ -27962,19 +29501,19 @@ var scriptHeaders = [252]header{ { // mt "GħarbiĊirillikuGriegHan SimplifikatHan TradizzjonaliLatinPersjan AntikMh" + "ux MiktubKomuniKitba Mhux Magħrufa", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, - 0x0011, 0x0011, 0x0011, 0x0011, 0x0016, 0x0016, 0x0016, 0x0016, - 0x0016, 0x0016, 0x0016, 0x0025, 0x0036, 0x0036, 0x0036, 0x0036, + 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0016, 0x0016, 0x0016, + 0x0016, 0x0016, 0x0016, 0x0016, 0x0025, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, // Entry 40 - 7F 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, - 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x003b, + 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, @@ -27986,8 +29525,9 @@ var scriptHeaders = [252]header{ 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, - 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x0048, 0x0048, - 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0053, 0x0059, 0x006d, + 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, 0x003b, + 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, + 0x0053, 0x0059, 0x006d, }, }, {}, // mua @@ -27999,18 +29539,18 @@ var scriptHeaders = [252]header{ "عربیارمنیبنگالیبوپوموفوسیریلیکدیوانانگریاتیوپیاییگرجییونانیگجراتیگورموخی" + "هانگولهانساده\u200cبَیی هاناستاندارد ِسنتی هانتعبریهیراگاناجاپونیکا" + "تاکانا", - []uint16{ // 68 elements + []uint16{ // 69 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x001e, 0x001e, 0x001e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x003c, 0x003c, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0062, 0x0062, - 0x006a, 0x006a, 0x006a, 0x006a, 0x0076, 0x0082, 0x0090, 0x0090, - 0x009c, 0x00a2, 0x00a2, 0x00bc, 0x00e2, 0x00e2, 0x00ea, 0x00fa, + 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x0076, 0x0082, 0x0090, + 0x0090, 0x009c, 0x00a2, 0x00a2, 0x00bc, 0x00e2, 0x00e2, 0x00ea, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, // Entry 40 - 7F - 0x0106, 0x0106, 0x0106, 0x0116, + 0x00fa, 0x0106, 0x0106, 0x0106, 0x0116, }, }, {}, // naq @@ -28025,52 +29565,53 @@ var scriptHeaders = [252]header{ }, {}, // nmg { // nn - "arabiskarmiskarmenskavestiskbalinesiskbatakbengaliblissymbolbopomofobrah" + - "mibraillebuginesiskbuhidchakmafelles kanadiske urspråksstavingarkari" + - "skchamcherokeecirthkoptiskkypriotiskkyrilliskkyrillisk (kyrkjeslavis" + - "k variant)devanagarideseretegyptisk demotiskegyptisk hieratiskegypti" + - "ske hieroglyfaretiopiskkhutsuri (asomtavruli og nuskhuri)georgiskgla" + - "golittiskgotiskgreskgujaratigurmukhihangulhanhanunooforenkla kinesis" + - "ktradisjonell kinesiskhebraiskhiraganapahawk hmongkatakana eller hir" + - "aganagammalungarskindusgammalitaliskjavanesiskjapanskkayah likatakan" + - "akharoshthikhmerkannadakoreanskkaithisklannalaotisklatinsk (frakturv" + - "ariant)latinsk (gælisk variant)latinsklepchalumbulineær Alineær Blyk" + - "isklydiskmandaiskmanikeiskmaya-hieroglyfarmeroitiskmalayalammongolsk" + - "moonmeitei-mayekmyanmarn’kooghamol-chikiorkhonoriyaosmanyagammalperm" + - "iskphags-painskripsjonspahlavisalmepahlavipahlavifønikiskpollard-fon" + - "etiskinskripsjonsparthiskrejangrongorongorunersamaritansksaratisaura" + - "shtrateiknskriftshavisksinhalasundanesisksyloti nagrisyriakisksyriak" + - "isk (estrangelo-variant)syriakisk (vestleg variant)syriakisk (austle" + - "g variant)tagbanwatai leny tai luetamilsktai viettelugutengwartifina" + - "ghtagalogthaanathaitibetanskugaritiskvaisynleg talegammalpersisksume" + - "ro-akkadisk kileskriftyinedarvamatematisk notasjonsymbolkode for spr" + - "åk utan skriftfellesukjend skrift", - []uint16{ // 176 elements + "arabiskarmiskarmenskavestiskbalinesiskbatakbengalskblissymbolbopomofobra" + + "hmipunktskriftbuginesiskbuhidchakmafelles kanadiske urspråksstavinga" + + "rkariskchamcherokeecirthkoptiskkypriotiskkyrilliskkyrillisk (kyrkjes" + + "lavisk variant)devanagarideseretegyptisk demotiskegyptisk hieratiske" + + "gyptiske hieroglyfaretiopiskkhutsuri (asomtavruli og nuskhuri)georgi" + + "skglagolittiskgotiskgreskgujaratigurmukhihan med bopomofohangulhanha" + + "nunooforenkla hantradisjonell hanhebraiskhiraganapahawk hmongjapansk" + + " stavingsskriftergammalungarskindusgammalitaliskjamojavanesiskjapans" + + "kkayah likatakanakharoshthikhmerkannadakoreanskkaithisklannalaotiskl" + + "atinsk (frakturvariant)latinsk (gælisk variant)latinsklepchalumbulin" + + "eær Alineær Blykisklydiskmandaiskmanikeiskmaya-hieroglyfarmeroitiskm" + + "alayalammongolskmoonmeitei-mayekburmesiskn’kooghamol-chikiorkhonodia" + + "osmanyagammalpermiskphags-painskripsjonspahlavisalmepahlavipahlavifø" + + "nikiskpollard-fonetiskinskripsjonsparthiskrejangrongorongorunersamar" + + "itansksaratisaurashtrateiknskriftshavisksingalesisksundanesisksyloti" + + " nagrisyriakisksyriakisk (estrangelo-variant)syriakisk (vestleg vari" + + "ant)syriakisk (austleg variant)tagbanwatai leny tai luetamilsktai vi" + + "ettelugutengwartifinaghtagalogthaanathaitibetanskugaritiskvaisynleg " + + "talegammalpersisksumero-akkadisk kileskriftyinedarvamatematisk notas" + + "jonemojisymbolspråk utan skriftfellesukjend skrift", + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x000d, 0x0014, - 0x001c, 0x0026, 0x0026, 0x0026, 0x002b, 0x0032, 0x0032, 0x003c, - 0x0044, 0x004a, 0x0051, 0x005b, 0x0060, 0x0066, 0x0089, 0x008f, - 0x0093, 0x009b, 0x00a0, 0x00a7, 0x00b1, 0x00ba, 0x00db, 0x00e5, - 0x00ec, 0x00ec, 0x00fd, 0x010f, 0x0124, 0x0124, 0x012c, 0x014e, - 0x0156, 0x0162, 0x0168, 0x0168, 0x016d, 0x0175, 0x017d, 0x017d, - 0x0183, 0x0186, 0x018d, 0x019e, 0x01b3, 0x01b3, 0x01bb, 0x01c3, - 0x01c3, 0x01cf, 0x01e6, 0x01f3, 0x01f8, 0x0205, 0x0205, 0x020f, - // Entry 40 - 7F - 0x0216, 0x0216, 0x021e, 0x0226, 0x0230, 0x0235, 0x0235, 0x023c, - 0x0244, 0x0244, 0x024c, 0x0251, 0x0258, 0x0270, 0x0289, 0x0290, - 0x0296, 0x029b, 0x02a4, 0x02ad, 0x02ad, 0x02ad, 0x02b3, 0x02b9, - 0x02b9, 0x02c1, 0x02ca, 0x02ca, 0x02da, 0x02da, 0x02da, 0x02e3, - 0x02ec, 0x02ec, 0x02f4, 0x02f8, 0x02f8, 0x0304, 0x0304, 0x030b, - 0x030b, 0x030b, 0x030b, 0x030b, 0x0311, 0x0311, 0x0316, 0x031e, - 0x0324, 0x0329, 0x0329, 0x0330, 0x0330, 0x0330, 0x033d, 0x0345, - 0x0358, 0x0364, 0x036b, 0x0374, 0x0384, 0x0398, 0x039e, 0x03a8, - // Entry 80 - BF - 0x03ad, 0x03b8, 0x03be, 0x03be, 0x03c8, 0x03d3, 0x03da, 0x03da, - 0x03da, 0x03da, 0x03e1, 0x03e1, 0x03ec, 0x03f8, 0x0401, 0x041f, - 0x043a, 0x0455, 0x045d, 0x045d, 0x0463, 0x046d, 0x0474, 0x0474, - 0x047c, 0x0482, 0x0489, 0x0491, 0x0498, 0x049e, 0x04a2, 0x04ab, - 0x04ab, 0x04b4, 0x04b7, 0x04c2, 0x04c2, 0x04c2, 0x04cf, 0x04e9, - 0x04eb, 0x04f2, 0x0505, 0x0505, 0x050b, 0x0526, 0x052c, 0x0539, + 0x001c, 0x0026, 0x0026, 0x0026, 0x002b, 0x0033, 0x0033, 0x003d, + 0x0045, 0x004b, 0x0056, 0x0060, 0x0065, 0x006b, 0x008e, 0x0094, + 0x0098, 0x00a0, 0x00a5, 0x00ac, 0x00b6, 0x00bf, 0x00e0, 0x00ea, + 0x00f1, 0x00f1, 0x0102, 0x0114, 0x0129, 0x0129, 0x0131, 0x0153, + 0x015b, 0x0167, 0x0167, 0x016d, 0x016d, 0x0172, 0x017a, 0x0182, + 0x0192, 0x0198, 0x019b, 0x01a2, 0x01ae, 0x01be, 0x01be, 0x01c6, + 0x01ce, 0x01ce, 0x01da, 0x01f2, 0x01ff, 0x0204, 0x0211, 0x0215, + // Entry 40 - 7F + 0x021f, 0x0226, 0x0226, 0x022e, 0x0236, 0x0240, 0x0245, 0x0245, + 0x024c, 0x0254, 0x0254, 0x025c, 0x0261, 0x0268, 0x0280, 0x0299, + 0x02a0, 0x02a6, 0x02ab, 0x02b4, 0x02bd, 0x02bd, 0x02bd, 0x02c3, + 0x02c9, 0x02c9, 0x02d1, 0x02da, 0x02da, 0x02ea, 0x02ea, 0x02ea, + 0x02f3, 0x02fc, 0x02fc, 0x0304, 0x0308, 0x0308, 0x0314, 0x0314, + 0x031d, 0x031d, 0x031d, 0x031d, 0x031d, 0x0323, 0x0323, 0x0328, + 0x0330, 0x0336, 0x033a, 0x033a, 0x0341, 0x0341, 0x0341, 0x034e, + 0x0356, 0x0369, 0x0375, 0x037c, 0x0385, 0x0395, 0x03a9, 0x03af, + // Entry 80 - BF + 0x03b9, 0x03be, 0x03c9, 0x03cf, 0x03cf, 0x03d9, 0x03e4, 0x03eb, + 0x03eb, 0x03eb, 0x03eb, 0x03f6, 0x03f6, 0x03f6, 0x0401, 0x040d, + 0x0416, 0x0434, 0x044f, 0x046a, 0x0472, 0x0472, 0x0478, 0x0482, + 0x0489, 0x0489, 0x0491, 0x0497, 0x049e, 0x04a6, 0x04ad, 0x04b3, + 0x04b7, 0x04c0, 0x04c0, 0x04c9, 0x04cc, 0x04d7, 0x04d7, 0x04d7, + 0x04e4, 0x04fe, 0x0500, 0x0500, 0x0507, 0x051a, 0x051f, 0x0525, + 0x0537, 0x053d, 0x054a, }, }, {}, // nnh @@ -28082,7 +29623,7 @@ var scriptHeaders = [252]header{ {}, // nyn { // om "Latin", - []uint16{ // 80 elements + []uint16{ // 81 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -28094,61 +29635,64 @@ var scriptHeaders = [252]header{ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // Entry 40 - 7F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0005, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0005, }, }, { // or "ଆରବିକ୍ଇମ୍ପେରିଆଲ୍ ଆରମିକ୍ଆର୍ମେନିଆନ୍ଆବେସ୍ଥାନ୍ବାଲିନୀଜ୍ବାଟାକ୍ବଙ୍ଗାଳୀବ୍ଲିସିମ୍ବ" + - "ଲସ୍ବୋପୋମୋଫୋବ୍ରାହ୍ମୀବ୍ରିଲ୍ବୁଗାନୀଜ୍ବୁହିଦ୍ଚକମାୟୁନିଫାଏଡ୍ କାନାଡିଆନ୍ ଆବ୍" + + "ଲସ୍ବୋପୋମୋଫୋବ୍ରାହ୍ମୀବ୍ରେଲିବୁଗାନୀଜ୍ବୁହିଦ୍ଚକମାୟୁନିଫାଏଡ୍ କାନାଡିଆନ୍ ଆବ୍" + "ରୋଜିନାଲ୍ ସିଲାବିକସ୍କୈରନ୍ଛମ୍ଚିରୁକୀସିର୍ଥକପଟିକ୍ସିପ୍ରଅଟ୍ସିରିଲିକ୍ଓଲ୍ଡ ଚର" + - "୍ଚ୍ଚ ସାଲଭୋନିକ୍ ସିରିଲିକ୍ଦେବାନଗିରିଡେସର୍ଟଇଜିପ୍ଟିଆନ୍ ଡେମୋଟିକ୍ଇଜିପ୍ଟିଆନ" + - "୍ ହାଇଅରଟିକ୍ଇଜିପ୍ଟିଆନ୍ ହାଅରଗ୍ଲିପସ୍ଇଥୋପିକ୍ଜର୍ଜିଆନ୍ ଖୁଟସୁରୀଜର୍ଜିଆନ୍ଗ୍" + - "ଲାଗ୍ଲୋଟିକ୍ଗୋଥିକ୍ଗ୍ରୀକ୍ଗୁଜୁରାଟୀଗୁରୁମୁଖୀହାଙ୍ଗୁଲ୍ହାନ୍ହାନୁନ୍ସରଳୀକୃତ ହା" + - "ନ୍ପାରମ୍ପରିକ୍ ହାନ୍ହେବ୍ର୍ୟୁହିରାଗାନାପାହୋ ହୋଙ୍ଗକାଟାକାନ୍ କିମ୍ବା ହିରାଗାନ" + - "୍ପୁରୁଣା ହଙ୍ଗେରିଆନ୍ସିନ୍ଧୁପୁରୁଣା ଇଟାଲୀଜାଭାନୀଜ୍ଜାପାନୀଜ୍କାୟାହା ଲୀକାଟକା" + - "ନ୍ଖାରୋସ୍ଥିଖ୍ମେର୍କନ୍ନଡକୋରିଆନ୍କୈଥିଲାନାଲାଓଫ୍ରାକଥୁର୍ ଲାଟିନ୍ଗାଏଲିକ୍ ଲାଟ" + - "ିନ୍ଲାଟିନ୍ଲେପଚାଲିମ୍ବୁଲିନିୟର୍ଲିନିୟର୍ ବିଲିଶିୟନ୍ଲିଡିୟନ୍ମାନଡେନ୍ମନଶୀନ୍ମୟ" + - "ାନ୍ ହାୟରଲଜିକସ୍ମେରୋଇଟିକ୍ମାଲୟଲମ୍ମଙ୍ଗୋଲିଆନ୍ଚନ୍ଦ୍ରମାଏତି ମାୟେକ୍ମିଆମାର୍ଏ" + - "ନ୍ କୋଓଘାମାଓଲ୍ ଚିକିଓରୋଖନ୍ଓଡିଆଓସୋମାନିୟାଓଲ୍ଡ ପରମିକ୍ଫାଗସ୍-ପାଇନସ୍କ୍ରୀପସ" + - "ାନଲ୍ ପାହାଲାୱୀସ୍ଲାଟର୍ ପାହାଲାୱୀବୁକ୍ ପାହାଲାୱୀଫେନୋସିଆନ୍ପୋଲାର୍ଡ ଫୋନେଟିକ" + - "୍ଇନସ୍କ୍ରୀପସାନଲ୍ ପାର୍ଥିଆନ୍ରେଜାଙ୍ଗରୋଙ୍ଗୋରୋଙ୍ଗୋରନିକ୍ସମୌରିଟନ୍ସାରାତିସୌର" + - "ାଷ୍ଟ୍ରସାଙ୍କେତିକ ଲିଖସାବିୟାନ୍ସିଂହଳସୁଦାନୀଜ୍ସୀଲିତୋ ନଗରୀସିରିୟାକ୍ଏଷ୍ଟ୍ରା" + - "ଙ୍ଗେଲୋ ସିରିକ୍ୱେଷ୍ଟର୍ନ ସିରିକ୍ଇଷ୍ଟର୍ନ ସିରିକ୍ତଗବାନ୍ୱାତାଇ ଲେନୂତନ ତାଇ ଲ" + - "ୁଏତାମିଲ୍ତାଇ ଭିଏତ୍ତେଲୁଗୁତେଙ୍ଗୱାର୍ତିଫିଙ୍ଘାଟାଗାଲୋଗ୍ଥାନାଥାଇତିବେତାନ୍ୟୁଗ" + - "ାରିଟିକ୍ୱାଇଭିଜିବଲ୍ ସ୍ପିଚ୍ପୁରୁଣା ଫରାସୀସୁମେରୋ-ଆକ୍କାଡିଆନ୍ ସୁନିଫର୍ମୟୀବଂ" + - "ଶଗତଗାଣିତିକ ନୋଟେସନ୍ସିମ୍ବଲ୍ଅଲିଖିତସାଧାରଣଅଞ୍ଜାତ କିମ୍ବା ଅବୈଧ ସ୍କ୍ରୀପ୍ଟ", - []uint16{ // 176 elements + "୍ଚ୍ଚ ସାଲଭୋନିକ୍ ସିରିଲିକ୍ଦେବନାଗରୀଡେସର୍ଟଇଜିପ୍ଟିଆନ୍ ଡେମୋଟିକ୍ଇଜିପ୍ଟିଆନ୍" + + " ହାଇଅରଟିକ୍ଇଜିପ୍ଟିଆନ୍ ହାଅରଗ୍ଲିପସ୍ଇଥୋପିକ୍ଜର୍ଜିଆନ୍ ଖୁଟସୁରୀଜର୍ଜିଆନ୍ଗ୍ଲାଗ" + + "୍ଲୋଟିକ୍ଗୋଥିକ୍ଗ୍ରୀକ୍ଗୁଜୁରାଟୀଗୁରୁମୁଖୀବୋପୋମୋଫୋ ସହିତ ହାନ୍\u200cହାଙ୍ଗୁଲ" + + "୍ହାନ୍ହାନୁନ୍ସରଳୀକୃତ ହାନ୍\u200cପାରମ୍ପରିକ ହାନ୍\u200cହେବ୍ର୍ୟୁହିରାଗାନାପ" + + "ାହୋ ହୋଙ୍ଗଜାପାନିଜ୍\u200c ସିଲ୍ଲାବେରିଜ୍\u200cପୁରୁଣା ହଙ୍ଗେରିଆନ୍ସିନ୍ଧୁପ" + + "ୁରୁଣା ଇଟାଲୀଜାମୋଜାଭାନୀଜ୍ଜାପାନୀଜ୍କାୟାହା ଲୀକାଟକାନ୍ଖାରୋସ୍ଥିଖାମେର୍କନ୍ନଡ" + + "କୋରିଆନ୍କୈଥିଲାନାଲାଓଫ୍ରାକଥୁର୍ ଲାଟିନ୍ଗାଏଲିକ୍ ଲାଟିନ୍ଲାଟିନ୍ଲେପଚାଲିମ୍ବୁଲ" + + "ିନିୟର୍ଲିନିୟର୍ ବିଲିଶିୟନ୍ଲିଡିୟନ୍ମାନଡେନ୍ମନଶୀନ୍ମୟାନ୍ ହାୟରଲଜିକସ୍ମେରୋଇଟି" + + "କ୍ମାଲୟଲମ୍ମଙ୍ଗୋଲିଆନ୍ଚନ୍ଦ୍ରମାଏତି ମାୟେକ୍ମିଆଁମାର୍\u200cଏନ୍ କୋଓଘାମାଓଲ୍ " + + "ଚିକିଓରୋଖନ୍ଓଡ଼ିଆଓସୋମାନିୟାଓଲ୍ଡ ପରମିକ୍ଫାଗସ୍-ପାଇନସ୍କ୍ରୀପସାନଲ୍ ପାହାଲାୱୀ" + + "ସ୍ଲାଟର୍ ପାହାଲାୱୀବୁକ୍ ପାହାଲାୱୀଫେନୋସିଆନ୍ପୋଲାର୍ଡ ଫୋନେଟିକ୍ଇନସ୍କ୍ରୀପସାନ" + + "ଲ୍ ପାର୍ଥିଆନ୍ରେଜାଙ୍ଗରୋଙ୍ଗୋରୋଙ୍ଗୋରନିକ୍ସମୌରିଟନ୍ସାରାତିସୌରାଷ୍ଟ୍ରସାଙ୍କେତ" + + "ିକ ଲିଖସାବିୟାନ୍ସିଂହଳସୁଦାନୀଜ୍ସୀଲିତୋ ନଗରୀସିରିୟାକ୍ଏଷ୍ଟ୍ରାଙ୍ଗେଲୋ ସିରିକ୍" + + "ୱେଷ୍ଟର୍ନ ସିରିକ୍ଇଷ୍ଟର୍ନ ସିରିକ୍ତଗବାନ୍ୱାତାଇ ଲେନୂତନ ତାଇ ଲୁଏତାମିଲତାଇ ଭି" + + "ଏତ୍ତେଲୁଗୁତେଙ୍ଗୱାର୍ତିଫିଙ୍ଘାଟାଗାଲୋଗ୍ଥାନାଥାଇତିବେତାନ୍ୟୁଗାରିଟିକ୍ୱାଇଭିଜି" + + "ବଲ୍ ସ୍ପିଚ୍ପୁରୁଣା ଫରାସୀସୁମେରୋ-ଆକ୍କାଡିଆନ୍ ସୁନିଫର୍ମୟୀବଂଶଗତଗାଣିତିକ ନୋଟ" + + "େସନ୍ଇମୋଜିସଙ୍କେତଗୁଡ଼ିକଅଲିଖିତସାଧାରଣଅଜଣା ଲିପି", + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0012, 0x0043, 0x0061, 0x007c, 0x0094, 0x0094, 0x0094, 0x00a6, 0x00bb, 0x00bb, 0x00df, 0x00f7, 0x010f, 0x0121, 0x0139, 0x014b, 0x0157, 0x01cc, 0x01db, - 0x01e4, 0x01f6, 0x0205, 0x0217, 0x022f, 0x0247, 0x029b, 0x02b6, - 0x02c8, 0x02c8, 0x02ff, 0x0339, 0x0379, 0x0379, 0x038e, 0x03bc, - 0x03d4, 0x03f8, 0x040a, 0x040a, 0x041c, 0x0434, 0x044c, 0x044c, - 0x0464, 0x0470, 0x0482, 0x04a4, 0x04cf, 0x04cf, 0x04e7, 0x04ff, - 0x04ff, 0x051b, 0x055f, 0x0590, 0x05a2, 0x05c4, 0x05c4, 0x05dc, - // Entry 40 - 7F - 0x05f4, 0x05f4, 0x060d, 0x0622, 0x063a, 0x064c, 0x064c, 0x065b, - 0x0670, 0x0670, 0x067c, 0x0688, 0x0691, 0x06bf, 0x06e7, 0x06f9, - 0x0708, 0x071a, 0x072f, 0x074b, 0x074b, 0x074b, 0x0760, 0x0775, - 0x0775, 0x078a, 0x079c, 0x079c, 0x07ca, 0x07ca, 0x07ca, 0x07e5, - 0x07fa, 0x07fa, 0x0818, 0x082a, 0x082a, 0x084c, 0x084c, 0x0861, - 0x0861, 0x0861, 0x0861, 0x0861, 0x0871, 0x0871, 0x0880, 0x0896, - 0x08a8, 0x08b4, 0x08b4, 0x08cf, 0x08cf, 0x08cf, 0x08ee, 0x0904, - 0x0947, 0x0975, 0x099a, 0x09b5, 0x09e3, 0x0a29, 0x0a3e, 0x0a62, - // Entry 80 - BF - 0x0a71, 0x0a89, 0x0a9b, 0x0a9b, 0x0ab6, 0x0adb, 0x0af3, 0x0af3, - 0x0af3, 0x0af3, 0x0b02, 0x0b02, 0x0b1a, 0x0b39, 0x0b51, 0x0b8b, - 0x0bb6, 0x0bde, 0x0bf6, 0x0bf6, 0x0c06, 0x0c26, 0x0c38, 0x0c38, - 0x0c51, 0x0c63, 0x0c7e, 0x0c96, 0x0cae, 0x0cba, 0x0cc3, 0x0cdb, - 0x0cdb, 0x0cf9, 0x0d02, 0x0d2a, 0x0d2a, 0x0d2a, 0x0d4c, 0x0d96, - 0x0d9c, 0x0dab, 0x0dd6, 0x0dd6, 0x0deb, 0x0dfd, 0x0e0f, 0x0e5d, + 0x01e4, 0x01f6, 0x0205, 0x0217, 0x022f, 0x0247, 0x029b, 0x02b3, + 0x02c5, 0x02c5, 0x02fc, 0x0336, 0x0376, 0x0376, 0x038b, 0x03b9, + 0x03d1, 0x03f5, 0x03f5, 0x0407, 0x0407, 0x0419, 0x0431, 0x0449, + 0x047e, 0x0496, 0x04a2, 0x04b4, 0x04d9, 0x0504, 0x0504, 0x051c, + 0x0534, 0x0534, 0x0550, 0x0593, 0x05c4, 0x05d6, 0x05f8, 0x0604, + // Entry 40 - 7F + 0x061c, 0x0634, 0x0634, 0x064d, 0x0662, 0x067a, 0x068c, 0x068c, + 0x069b, 0x06b0, 0x06b0, 0x06bc, 0x06c8, 0x06d1, 0x06ff, 0x0727, + 0x0739, 0x0748, 0x075a, 0x076f, 0x078b, 0x078b, 0x078b, 0x07a0, + 0x07b5, 0x07b5, 0x07ca, 0x07dc, 0x07dc, 0x080a, 0x080a, 0x080a, + 0x0825, 0x083a, 0x083a, 0x0858, 0x086a, 0x086a, 0x088c, 0x088c, + 0x08a7, 0x08a7, 0x08a7, 0x08a7, 0x08a7, 0x08b7, 0x08b7, 0x08c6, + 0x08dc, 0x08ee, 0x08fd, 0x08fd, 0x0918, 0x0918, 0x0918, 0x0937, + 0x094d, 0x0990, 0x09be, 0x09e3, 0x09fe, 0x0a2c, 0x0a72, 0x0a87, + // Entry 80 - BF + 0x0aab, 0x0aba, 0x0ad2, 0x0ae4, 0x0ae4, 0x0aff, 0x0b24, 0x0b3c, + 0x0b3c, 0x0b3c, 0x0b3c, 0x0b4b, 0x0b4b, 0x0b4b, 0x0b63, 0x0b82, + 0x0b9a, 0x0bd4, 0x0bff, 0x0c27, 0x0c3f, 0x0c3f, 0x0c4f, 0x0c6f, + 0x0c7e, 0x0c7e, 0x0c97, 0x0ca9, 0x0cc4, 0x0cdc, 0x0cf4, 0x0d00, + 0x0d09, 0x0d21, 0x0d21, 0x0d3f, 0x0d48, 0x0d70, 0x0d70, 0x0d70, + 0x0d92, 0x0ddc, 0x0de2, 0x0de2, 0x0df1, 0x0e1c, 0x0e2b, 0x0e4f, + 0x0e61, 0x0e73, 0x0e8c, }, }, { // os "АраббагКиррилицӕӔнцонгонд китайагТрадицион китайагЛатинагНӕфысгӕНӕзонгӕ " + "скрипт", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, @@ -28156,11 +29700,11 @@ var scriptHeaders = [252]header{ 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, - 0x0020, 0x0020, 0x0020, 0x0041, 0x0062, 0x0062, 0x0062, 0x0062, + 0x0020, 0x0020, 0x0020, 0x0020, 0x0041, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, // Entry 40 - 7F 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, - 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0070, + 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, @@ -28173,7 +29717,8 @@ var scriptHeaders = [252]header{ 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, - 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x007e, 0x007e, 0x0099, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x007e, 0x007e, 0x0099, }, }, { // pa @@ -28182,13 +29727,13 @@ var scriptHeaders = [252]header{ }, { // pa-Arab "عربیگُرمُکھی", - []uint16{ // 47 elements + []uint16{ // 48 elements 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, - 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0018, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0018, }, }, { // pl @@ -28197,9 +29742,38 @@ var scriptHeaders = [252]header{ }, {}, // prg { // ps - "عربي", - []uint16{ // 6 elements - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, + "عربيارمانیایيبنګلهبوپوموفوبریليسیریلیکدیواناګريایتوپيګرجستانيیونانيګجرات" + + "يګروميهن او بوپوفوموهنګوليهنساده هاندودیز هانعبرانيهیراګاناد جاپاني" + + " سیلابريجاموجاپانيکاتاکاناخمرکناډاکوریاییلاوولاتینمالایالممنګولیایيم" + + "یانماراویاسنهالاتامیلتیلیګوتهاناتایلنډيتبتيد ریاضیاتو نوټیشنایموجيس" + + "مبولونهناڅاپهعامنامعلومه سکرېپټ", + []uint16{ // 179 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x001a, + 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x0024, 0x0024, 0x0024, + 0x0034, 0x0034, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, + 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x004c, 0x004c, 0x005e, + 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x006a, 0x006a, + 0x007a, 0x007a, 0x007a, 0x007a, 0x007a, 0x0086, 0x0092, 0x009c, + 0x00b6, 0x00c2, 0x00c6, 0x00c6, 0x00d5, 0x00e6, 0x00e6, 0x00f2, + 0x0102, 0x0102, 0x0102, 0x0120, 0x0120, 0x0120, 0x0120, 0x0128, + // Entry 40 - 7F + 0x0128, 0x0134, 0x0134, 0x0134, 0x0144, 0x0144, 0x014a, 0x014a, + 0x0154, 0x0162, 0x0162, 0x0162, 0x0162, 0x016a, 0x016a, 0x016a, + 0x0174, 0x0174, 0x0174, 0x0174, 0x0174, 0x0174, 0x0174, 0x0174, + 0x0174, 0x0174, 0x0174, 0x0174, 0x0174, 0x0174, 0x0174, 0x0174, + 0x0174, 0x0184, 0x0184, 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, + 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, + 0x01a4, 0x01a4, 0x01ac, 0x01ac, 0x01ac, 0x01ac, 0x01ac, 0x01ac, + 0x01ac, 0x01ac, 0x01ac, 0x01ac, 0x01ac, 0x01ac, 0x01ac, 0x01ac, + // Entry 80 - BF + 0x01ac, 0x01ac, 0x01ac, 0x01ac, 0x01ac, 0x01ac, 0x01ac, 0x01ac, + 0x01ac, 0x01ac, 0x01ac, 0x01b8, 0x01b8, 0x01b8, 0x01b8, 0x01b8, + 0x01b8, 0x01b8, 0x01b8, 0x01b8, 0x01b8, 0x01b8, 0x01b8, 0x01b8, + 0x01c2, 0x01c2, 0x01c2, 0x01ce, 0x01ce, 0x01ce, 0x01ce, 0x01d8, + 0x01e6, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, + 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x020e, 0x021a, 0x022a, + 0x0236, 0x023c, 0x0259, }, }, { // pt @@ -28232,32 +29806,33 @@ var scriptHeaders = [252]header{ "ticvaiialfabet visibelpersian veglscrittira a cugn sumeric-accadicay" + "iertànotaziun matematicasimbolslinguas na scrittasbetg determinàscri" + "ttira nunenconuschenta u nunvalaivla", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x0014, 0x0019, 0x0020, 0x0028, 0x0028, 0x0028, 0x002d, 0x0033, 0x0033, 0x0043, 0x004b, 0x0051, 0x0065, 0x006d, 0x0072, 0x0078, 0x009d, 0x00a3, 0x00a7, 0x00af, 0x00b4, 0x00ba, 0x00c1, 0x00c9, 0x00de, 0x00e8, 0x00ef, 0x00ef, 0x00ff, 0x010f, 0x0124, 0x0124, 0x012b, 0x0132, - 0x013a, 0x0144, 0x0149, 0x0149, 0x014d, 0x0155, 0x015d, 0x015d, - 0x0163, 0x0166, 0x016d, 0x018d, 0x01ac, 0x01ac, 0x01b2, 0x01ba, - 0x01ba, 0x01c6, 0x01d9, 0x01e6, 0x01eb, 0x01f6, 0x01f6, 0x01fe, - // Entry 40 - 7F - 0x0207, 0x0207, 0x020f, 0x0217, 0x0221, 0x0232, 0x0232, 0x0239, - 0x023f, 0x023f, 0x0245, 0x024a, 0x024e, 0x0266, 0x027f, 0x0284, - 0x028a, 0x028f, 0x0297, 0x029f, 0x029f, 0x029f, 0x02a5, 0x02aa, - 0x02aa, 0x02b1, 0x02ba, 0x02ba, 0x02c9, 0x02c9, 0x02c9, 0x02d1, - 0x02da, 0x02da, 0x02e2, 0x02e6, 0x02e6, 0x02f2, 0x02f2, 0x02f9, - 0x02f9, 0x02f9, 0x02f9, 0x02f9, 0x02ff, 0x02ff, 0x0304, 0x030c, - 0x0312, 0x0317, 0x0317, 0x031c, 0x031c, 0x031c, 0x0327, 0x032f, - 0x0347, 0x0358, 0x036b, 0x0373, 0x0386, 0x039d, 0x03a3, 0x03ad, - // Entry 80 - BF - 0x03b2, 0x03bb, 0x03c1, 0x03c1, 0x03cb, 0x03da, 0x03e1, 0x03e1, - 0x03e1, 0x03e1, 0x03ea, 0x03ea, 0x03f3, 0x03ff, 0x0404, 0x0414, - 0x0422, 0x0432, 0x043a, 0x043a, 0x0440, 0x0447, 0x044c, 0x044c, - 0x0454, 0x045a, 0x0461, 0x0469, 0x0470, 0x0476, 0x0480, 0x0487, - 0x0487, 0x048f, 0x0493, 0x04a2, 0x04a2, 0x04a2, 0x04ae, 0x04cf, - 0x04d1, 0x04d6, 0x04e9, 0x04e9, 0x04f0, 0x0503, 0x0512, 0x053a, + 0x013a, 0x0144, 0x0144, 0x0149, 0x0149, 0x014d, 0x0155, 0x015d, + 0x015d, 0x0163, 0x0166, 0x016d, 0x018d, 0x01ac, 0x01ac, 0x01b2, + 0x01ba, 0x01ba, 0x01c6, 0x01d9, 0x01e6, 0x01eb, 0x01f6, 0x01f6, + // Entry 40 - 7F + 0x01fe, 0x0207, 0x0207, 0x020f, 0x0217, 0x0221, 0x0232, 0x0232, + 0x0239, 0x023f, 0x023f, 0x0245, 0x024a, 0x024e, 0x0266, 0x027f, + 0x0284, 0x028a, 0x028f, 0x0297, 0x029f, 0x029f, 0x029f, 0x02a5, + 0x02aa, 0x02aa, 0x02b1, 0x02ba, 0x02ba, 0x02c9, 0x02c9, 0x02c9, + 0x02d1, 0x02da, 0x02da, 0x02e2, 0x02e6, 0x02e6, 0x02f2, 0x02f2, + 0x02f9, 0x02f9, 0x02f9, 0x02f9, 0x02f9, 0x02ff, 0x02ff, 0x0304, + 0x030c, 0x0312, 0x0317, 0x0317, 0x031c, 0x031c, 0x031c, 0x0327, + 0x032f, 0x0347, 0x0358, 0x036b, 0x0373, 0x0386, 0x039d, 0x03a3, + // Entry 80 - BF + 0x03ad, 0x03b2, 0x03bb, 0x03c1, 0x03c1, 0x03cb, 0x03da, 0x03e1, + 0x03e1, 0x03e1, 0x03e1, 0x03ea, 0x03ea, 0x03ea, 0x03f3, 0x03ff, + 0x0404, 0x0414, 0x0422, 0x0432, 0x043a, 0x043a, 0x0440, 0x0447, + 0x044c, 0x044c, 0x0454, 0x045a, 0x0461, 0x0469, 0x0470, 0x0476, + 0x0480, 0x0487, 0x0487, 0x048f, 0x0493, 0x04a2, 0x04a2, 0x04a2, + 0x04ae, 0x04cf, 0x04d1, 0x04d1, 0x04d6, 0x04e9, 0x04e9, 0x04f0, + 0x0503, 0x0512, 0x053a, }, }, {}, // rn @@ -28277,22 +29852,22 @@ var scriptHeaders = [252]header{ { // sah "АрааптыыЭрмээннииНууччалыыГириэктииДьоппуоннууКэриэйдииЛатыынныыМоҕуоллу" + "уТаайдыыСуруллубатахБиллибэт сурук", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x0010, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, - 0x0034, 0x0034, 0x0034, 0x0034, 0x0046, 0x0046, 0x0046, 0x0046, + 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, // Entry 40 - 7F - 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, - 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x0080, + 0x0046, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, + 0x005c, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, - 0x0080, 0x0080, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, + 0x0080, 0x0080, 0x0080, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, @@ -28300,29 +29875,65 @@ var scriptHeaders = [252]header{ 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, - 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x00a0, 0x00a0, + 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, - 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00b8, 0x00b8, 0x00d3, + 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, + 0x00b8, 0x00b8, 0x00d3, }, }, {}, // saq {}, // sbp + { // sd + "عربيعرمانيبنگلابوپوموفوبريليسيريليديوناگريايٿوپيائيجيورجيائييونانيگجراتي" + + "گرمکيبوپوموفو سان هينهنگولهينآسان ڪيل هينروايتي هينعبرانيهراگناجاپا" + + "ني لکتجاموجاپانيڪٽاڪاناخمرڪناڊاڪوريائيلائولاطينيمليالممنگوليميانمرا" + + "وڊياسنهالاتاملتلگوٿاناٿائيتبيتنرياضي جون نشانيونايموجينشانيوناڻ لکي" + + "لڪامناڻڄاتل لکت", + []uint16{ // 179 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x001e, 0x001e, 0x001e, + 0x002e, 0x002e, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, + 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0044, 0x0044, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0066, 0x0066, + 0x0078, 0x0078, 0x0078, 0x0078, 0x0078, 0x0084, 0x0090, 0x009a, + 0x00b8, 0x00c2, 0x00c8, 0x00c8, 0x00de, 0x00f1, 0x00f1, 0x00fd, + 0x0109, 0x0109, 0x0109, 0x011c, 0x011c, 0x011c, 0x011c, 0x0124, + // Entry 40 - 7F + 0x0124, 0x0130, 0x0130, 0x0130, 0x013e, 0x013e, 0x0144, 0x0144, + 0x014e, 0x015c, 0x015c, 0x015c, 0x015c, 0x0164, 0x0164, 0x0164, + 0x0170, 0x0170, 0x0170, 0x0170, 0x0170, 0x0170, 0x0170, 0x0170, + 0x0170, 0x0170, 0x0170, 0x0170, 0x0170, 0x0170, 0x0170, 0x0170, + 0x0170, 0x017c, 0x017c, 0x0188, 0x0188, 0x0188, 0x0188, 0x0188, + 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, 0x0194, + 0x0194, 0x0194, 0x019e, 0x019e, 0x019e, 0x019e, 0x019e, 0x019e, + 0x019e, 0x019e, 0x019e, 0x019e, 0x019e, 0x019e, 0x019e, 0x019e, + // Entry 80 - BF + 0x019e, 0x019e, 0x019e, 0x019e, 0x019e, 0x019e, 0x019e, 0x019e, + 0x019e, 0x019e, 0x019e, 0x01aa, 0x01aa, 0x01aa, 0x01aa, 0x01aa, + 0x01aa, 0x01aa, 0x01aa, 0x01aa, 0x01aa, 0x01aa, 0x01aa, 0x01aa, + 0x01b2, 0x01b2, 0x01b2, 0x01ba, 0x01ba, 0x01ba, 0x01ba, 0x01c2, + 0x01ca, 0x01d4, 0x01d4, 0x01d4, 0x01d4, 0x01d4, 0x01d4, 0x01d4, + 0x01d4, 0x01d4, 0x01d4, 0x01d4, 0x01d4, 0x01f4, 0x0200, 0x020e, + 0x021b, 0x0223, 0x0236, + }, + }, { // se "arábakyrillalašgreikkalašhangulkiinnašálkiárbevirolašhiraganakatakanaláh" + "tenašorrut chállojuvvotdovdameahttun chállin", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, - 0x0011, 0x0011, 0x0011, 0x0011, 0x001c, 0x001c, 0x001c, 0x001c, - 0x0022, 0x002a, 0x002a, 0x002f, 0x003c, 0x003c, 0x003c, 0x0044, + 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x001c, 0x001c, 0x001c, + 0x001c, 0x0022, 0x002a, 0x002a, 0x002f, 0x003c, 0x003c, 0x003c, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, // Entry 40 - 7F - 0x0044, 0x0044, 0x0044, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, - 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x0056, + 0x0044, 0x0044, 0x0044, 0x0044, 0x004c, 0x004c, 0x004c, 0x004c, + 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, @@ -28335,13 +29946,14 @@ var scriptHeaders = [252]header{ 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, - 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0069, 0x0069, 0x007f, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0069, 0x0069, 0x007f, }, }, { // se-FI "arábalaškiinnálašálkes kiinnálašárbevirolaš kiinnálašorrut čállojuvvotdo" + "vdameahttun čállin", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, @@ -28349,7 +29961,7 @@ var scriptHeaders = [252]header{ 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, - 0x000a, 0x0015, 0x0015, 0x0027, 0x0040, 0x0040, 0x0040, 0x0040, + 0x000a, 0x000a, 0x0015, 0x0015, 0x0027, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, // Entry 40 - 7F 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, @@ -28366,7 +29978,8 @@ var scriptHeaders = [252]header{ 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, - 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0053, 0x0053, 0x0069, + 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0053, 0x0053, 0x0069, }, }, {}, // seh @@ -28390,7 +30003,7 @@ var scriptHeaders = [252]header{ {}, // sn { // so "Aan la qorinFar aan la aqoon amase aan saxnayn", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -28415,7 +30028,8 @@ var scriptHeaders = [252]header{ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x000c, 0x002e, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000c, 0x000c, 0x002e, }, }, { // sq @@ -28456,13 +30070,44 @@ var scriptHeaders = [252]header{ teScriptIdx, }, {}, // teo + { // tg + "АрабӣКириллӣХани осонфаҳмХани анъанавӣЛотинӣНонавиштаСкрипти номаълум", + []uint16{ // 179 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x0018, 0x0018, 0x0018, + 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, + 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, + 0x0018, 0x0018, 0x0018, 0x0018, 0x0031, 0x004a, 0x004a, 0x004a, + 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, + // Entry 40 - 7F + 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, + 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + // Entry 80 - BF + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0068, 0x0068, 0x0087, + }, + }, { // th thScriptStr, thScriptIdx, }, { // ti "ፊደልላቲን", - []uint16{ // 80 elements + []uint16{ // 81 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -28474,97 +30119,170 @@ var scriptHeaders = [252]header{ 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, // Entry 40 - 7F 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, - 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0012, + 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0012, + }, + }, + { // tk + "Arap elipbiýiErmeni elipbiýiBengal elipbiýiBopomofo elipbiýiBraýl elipbi" + + "ýiKiril elipbiýiDewanagari elipbiýiEfiop elipbiýiGruzin elipbiýiGre" + + "k elipbiýiGujarati elipbiýiGurmuhi elipbiýiBopomofo han elipbiýiHang" + + "yl elipbiýiHan elipbiýiÝönekeýleşdirilen han elipbiýiAdaty han elipb" + + "iýiÝewreý elipbiýiHiragana elipbiýiÝapon bogun elipbiýleriJamo elipb" + + "iýiÝapon elipbiýiKatakana elipbiýiKhmer elipbiýiKannada elipbiýiKore" + + "ý elipbiýiLaos elipbiýiLatyn elipbiýiMalaýalam elipbiýiMongol elipb" + + "iýiMýanma elipbiýiOriýa elipbiýiSingal elipbiýiTamil elipbiýiTelugu " + + "elipbiýiTaana elipbiýiTaý elipbiýiTibet elipbiýiMatematiki belgilerE" + + "mojiNyşanlarÝazuwsyzUmumyNäbelli elipbiý", + []uint16{ // 179 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000e, 0x000e, 0x001e, + 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x002e, 0x002e, 0x002e, + 0x0040, 0x0040, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, + 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x005f, 0x005f, 0x0073, + 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0082, 0x0082, + 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x00a0, 0x00b2, 0x00c3, + 0x00d9, 0x00e9, 0x00f6, 0x00f6, 0x0119, 0x012c, 0x012c, 0x013e, + 0x0150, 0x0150, 0x0150, 0x0169, 0x0169, 0x0169, 0x0169, 0x0177, + // Entry 40 - 7F + 0x0177, 0x0187, 0x0187, 0x0187, 0x0199, 0x0199, 0x01a8, 0x01a8, + 0x01b9, 0x01c9, 0x01c9, 0x01c9, 0x01c9, 0x01d7, 0x01d7, 0x01d7, + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, + 0x01e6, 0x01fa, 0x01fa, 0x020a, 0x020a, 0x020a, 0x020a, 0x020a, + 0x021b, 0x021b, 0x021b, 0x021b, 0x021b, 0x021b, 0x021b, 0x021b, + 0x021b, 0x021b, 0x022b, 0x022b, 0x022b, 0x022b, 0x022b, 0x022b, + 0x022b, 0x022b, 0x022b, 0x022b, 0x022b, 0x022b, 0x022b, 0x022b, + // Entry 80 - BF + 0x022b, 0x022b, 0x022b, 0x022b, 0x022b, 0x022b, 0x022b, 0x022b, + 0x022b, 0x022b, 0x022b, 0x023b, 0x023b, 0x023b, 0x023b, 0x023b, + 0x023b, 0x023b, 0x023b, 0x023b, 0x023b, 0x023b, 0x023b, 0x023b, + 0x024a, 0x024a, 0x024a, 0x025a, 0x025a, 0x025a, 0x025a, 0x0269, + 0x0277, 0x0286, 0x0286, 0x0286, 0x0286, 0x0286, 0x0286, 0x0286, + 0x0286, 0x0286, 0x0286, 0x0286, 0x0286, 0x0299, 0x029e, 0x02a7, + 0x02b0, 0x02b5, 0x02c6, }, }, { // to "tohinima fakaʻafakatohinima fakaʻalapēnia-kaukasiatohinima fakaʻalepeato" + "hinima fakaʻalāmiti-ʻemipaeatohinima fakaʻāmeniatohinima fakaʻavesit" + "anitohinima fakapalitohinima fakapamumitohinima fakapasa-vātohinima " + - "fakapātakitohinima fakapengikalitohinima fakaʻilonga-pilisitohinima " + - "fakapopomofotohinima fakapalāmītohinima laukonga ki he kuitohinima f" + - "akapukisitohinima fakapuhititohinima fakasakimātohinima fakatupuʻi-k" + - "ānata-fakatahatahatohinima fakakalitohinima fakasamitohinima fakase" + - "lokītohinima fakakīlititohinima fakakopitikatohinima fakasaipalesito" + - "hinima fakalūsiatohinima fakalūsia-lotu-motuʻatohinima fakaʻinitia-t" + - "evanākalītohinima fakateseletitohinimanounou fakatupoloiētohinima te" + - "motika-fakaʻisipitetohinima hielatika-fakaʻisipitetohinima tongitapu" + - "-fakaʻisipitetohinima fakaʻelepasanitohinima fakaʻītiōpiatohinima fa" + - "kakutusuli-seōsiatohinima fakaseōsiatohinima fakakalakolititohinima " + - "fakakotikatohinima fakasilanitātohinima fakakalisitohinima fakaʻinit" + - "ia-kutalatitohinima fakakūmukitohinima fakahānipitohinima fakakōlea-" + - "hāngūlutohinima fakasiainatohinima fakahanunōʻotohinima fakasiaina-f" + - "akafaingofuatohinima fakasiaina-tukufakaholotohinima fakahepelūtohin" + - "ima fakasiapani-hilakanatohinima tongitapu-fakaʻanatoliatohinima fak" + - "apahaumongitohinima fakasilapa-siapanitohinima fakahungakalia-motuʻa" + - "tohinima fakaʻinitusitohinima fakaʻītali-motuʻatohinima fakasamotohi" + - "nima fakasavatohinima fakasiapanitohinima fakaiūkenitohinima fakakai" + - "alītohinima fakasiapani-katakanatohinima fakakalositītohinima fakaka" + - "mipōtiatohinima fakakosikītohinima fakaʻinitia-kanatatohinima fakakō" + - "leatohinima fakakepeletohinima fakakaiatītohinima fakalanatohinima f" + - "akalautohinima fakalatina-falakitulitohinima fakalatina-kaelikitohin" + - "ima fakalatinatohinima fakalepasātohinima fakalimipūtohinima fakalin" + - "ea-Atohinima fakalinea-Ptohinima fakafalāsetohinima fakalomatohinima" + - " fakalīsiatohinima fakalītiatohinima fakamahasanitohinima fakamanita" + - "eatohinima fakamanikaeatohinima tongitapu fakamaiatohinima fakamēnit" + - "itohinima fakameloue-heiheitohinima fakamelouetohinima fakaʻinitia-m" + - "alāialamitohinima fakamotītohinima fakamongokōliatohinima laukonga k" + - "i he kui-māhinatohinima fakamolōtohinima fakametei-maiekitohinima fa" + - "kapematohinima fakaʻalepea-tokelau-motuʻatohinima fakanapateatohinim" + - "a fakanati-sepatohinima fakanikōtohinima fakanasiūtohinima fakaʻokam" + - "itohinima fakaʻolisikitohinima fakaʻolikonitohinima fakaʻotiatohinim" + - "a fakaʻosimāniatohinima fakapalamilenetohinima fakapausinihautohinim" + - "a fakapēmi-motuʻatohinima fakapākisipātohinima fakapālavi-tongitohin" + - "ima fakapālavi-saametohinima fakapālavi-tohitohinima fakafoinikiatoh" + - "inima fakafonētiki-polātitohinima fakapātia-tongitohinima fakalesian" + - "gitohinima fakalongolongotohinima fakalunikitohinima fakasamalitanet" + - "ohinima fakasalatitohinima fakaʻalepea-tonga-motuʻatohinima fakasaul" + - "asitātohinima fakaʻilonga-tohitohinima fakasiavitohinima fakasiālatā" + - "tohinima fakasititamitohinima fakakutauātitohinima fakasingihalatohi" + - "nima fakasolasomipengitohinima fakasunitātohinima fakasailoti-nakili" + - "tohinima fakasuliāiātohinima fakasuliāiā-ʻesitelangelotohinima fakas" + - "uliāiā-hihifotohinima fakasuliāiā-hahaketohinima fakatakipaneuātohin" + - "ima fakatakilitohinima fakatai-luetohinima fakatai-lue-foʻoutohinima" + - " fakatamilitohinima fakatangutitohinima fakatai-vietitohinima fakaʻi" + - "nitia-telukutohinima fakatengiualitohinima fakatifinākitohinima faka" + - "takalokatohinima fakatānatohinima fakatailanitohinima fakataipetitoh" + - "inima fakatīhutatohinima fakaʻūkalititohinima fakavaitohinima fakafo" + - "nētiki-hāmaitohinima fakavalangi-kisitītohinima fakauoleaitohinima f" + + "fakapātakitohinima fakapāngilātohinima fakaʻilonga-pilisitohinima fa" + + "kapopomofotohinima fakapalāmītohinima laukonga ki he kuitohinima fak" + + "apukisitohinima fakapuhititohinima fakasakimātohinima fakatupuʻi-kān" + + "ata-fakatahatahatohinima fakakalitohinima fakasamitohinima fakaselok" + + "ītohinima fakakīlititohinima fakakopitikatohinima fakasaipalesitohi" + + "nima fakalūsiatohinima fakalūsia-lotu-motuʻatohinima fakaʻinitia-tev" + + "anākalītohinima fakateseletitohinimanounou fakatupoloiētohinima temo" + + "tika-fakaʻisipitetohinima hielatika-fakaʻisipitetohinima tongitapu-f" + + "akaʻisipitetohinima fakaʻelepasanitohinima fakaʻītiōpiatohinima faka" + + "kutusuli-seōsiatohinima fakaseōsiatohinima fakakalakolititohinima fa" + + "kakotikatohinima fakasilanitātohinima fakakalisitohinima fakaʻinitia" + + "-kutalatitohinima fakakūmukitohinima fakahānipitohinima fakakōlea-hā" + + "ngūlutohinima fakasiainatohinima fakahanunōʻotohinima fakasiaina-fak" + + "afaingofuatohinima fakasiaina-tukufakaholotohinima fakahepelūtohinim" + + "a fakasiapani-hilakanatohinima tongitapu-fakaʻanatoliatohinima fakap" + + "ahaumongitohinima fakasilapa-siapanitohinima fakahungakalia-motuʻato" + + "hinima fakaʻinitusitohinima fakaʻītali-motuʻatohinima fakasamotohini" + + "ma fakasavatohinima fakasiapanitohinima fakaiūkenitohinima fakakaial" + + "ītohinima fakasiapani-katakanatohinima fakakalositītohinima fakakam" + + "ipōtiatohinima fakakosikītohinima fakaʻinitia-kanatatohinima fakakōl" + + "eatohinima fakakepeletohinima fakakaiatītohinima fakalanatohinima fa" + + "kalautohinima fakalatina-falakitulitohinima fakalatina-kaelikitohini" + + "ma fakalatinatohinima fakalepasātohinima fakalimipūtohinima fakaline" + + "a-Atohinima fakalinea-Ptohinima fakafalāsetohinima fakalomatohinima " + + "fakalīsiatohinima fakalītiatohinima fakamahasanitohinima fakamanitae" + + "atohinima fakamanikaeatohinima tongitapu fakamaiatohinima fakamēniti" + + "tohinima fakameloue-heiheitohinima fakamelouetohinima fakaʻinitia-ma" + + "lāialamitohinima fakamotītohinima fakamongokōliatohinima laukonga ki" + + " he kui-māhinatohinima fakamolōtohinima fakametei-maiekitohinima fak" + + "apematohinima fakaʻalepea-tokelau-motuʻatohinima fakanapateatohinima" + + " fakanati-sepatohinima fakanikōtohinima fakanasiūtohinima fakaʻokami" + + "tohinima fakaʻolisikitohinima fakaʻolikonitohinima fakaʻotiatohinima" + + " fakaʻosimāniatohinima fakapalamilenetohinima fakapausinihautohinima" + + " fakapēmi-motuʻatohinima fakapākisipātohinima fakapālavi-tongitohini" + + "ma fakapālavi-saametohinima fakapālavi-tohitohinima fakafoinikiatohi" + + "nima fakafonētiki-polātitohinima fakapātia-tongitohinima fakalesiang" + + "itohinima fakalongolongotohinima fakalunikitohinima fakasamalitaneto" + + "hinima fakasalatitohinima fakaʻalepea-tonga-motuʻatohinima fakasaula" + + "sitātohinima fakaʻilonga-tohitohinima fakasiavitohinima fakasiālatāt" + + "ohinima fakasititamitohinima fakakutauātitohinima fakasingihalatohin" + + "ima fakasolasomipengitohinima fakasunitātohinima fakasailoti-nakilit" + + "ohinima fakasuliāiātohinima fakasuliāiā-ʻesitelangelotohinima fakasu" + + "liāiā-hihifotohinima fakasuliāiā-hahaketohinima fakatakipaneuātohini" + + "ma fakatakilitohinima fakatai-luetohinima fakatai-lue-foʻoutohinima " + + "fakatamilitohinima fakatangutitohinima fakatai-vietitohinima fakaʻin" + + "itia-telukutohinima fakatengiualitohinima fakatifinākitohinima fakat" + + "akalokatohinima fakatānatohinima fakatailanitohinima fakataipetitohi" + + "nima fakatīhutatohinima fakaʻūkalititohinima fakavaitohinima fakafon" + + "ētiki-hāmaitohinima fakavalangi-kisitītohinima fakauoleaitohinima f" + "akapēsiamuʻatohinima fakamataʻingahau-sumelo-akatiatohinima fakaīīto" + "hinima hokositohinima fakamatematikatohinima fakatātātohinima fakaʻi" + "longatohinima taʻetohitohiʻitohinima fakatatautohinima taʻeʻiloa", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0014, 0x0035, 0x0035, 0x004a, 0x006b, 0x0081, 0x0099, 0x00aa, 0x00bd, 0x00d2, 0x00e6, 0x00fc, 0x00fc, 0x0118, 0x012d, 0x0142, 0x015d, 0x0170, 0x0183, 0x0197, 0x01c0, 0x01d1, 0x01e2, 0x01f6, 0x020a, 0x021f, 0x0235, 0x0248, 0x0268, 0x028a, 0x029f, 0x02bb, 0x02da, 0x02fa, 0x031a, 0x0332, 0x034a, 0x0367, - 0x037b, 0x0392, 0x03a5, 0x03bb, 0x03ce, 0x03ec, 0x0400, 0x0414, - 0x0431, 0x0444, 0x045b, 0x047c, 0x049c, 0x049c, 0x04b0, 0x04cd, - 0x04ee, 0x0505, 0x0520, 0x053f, 0x0555, 0x0572, 0x0583, 0x0594, - // Entry 40 - 7F - 0x05a8, 0x05bc, 0x05d0, 0x05ed, 0x0603, 0x061a, 0x062e, 0x064a, - 0x065d, 0x0670, 0x0684, 0x0695, 0x06a5, 0x06c3, 0x06de, 0x06f1, - 0x0705, 0x0719, 0x072d, 0x0741, 0x0755, 0x0766, 0x0779, 0x078c, - 0x07a1, 0x07b6, 0x07cb, 0x07cb, 0x07e6, 0x07fa, 0x0814, 0x0827, - 0x0848, 0x085a, 0x0872, 0x0895, 0x08a7, 0x08c0, 0x08c0, 0x08d1, - 0x08f6, 0x090a, 0x090a, 0x0920, 0x0932, 0x0945, 0x0959, 0x096f, - 0x0985, 0x0998, 0x0998, 0x09b0, 0x09c7, 0x09de, 0x09f8, 0x0a0f, - 0x0a29, 0x0a43, 0x0a5c, 0x0a71, 0x0a8f, 0x0aa8, 0x0abd, 0x0ad4, - // Entry 80 - BF - 0x0ae7, 0x0afe, 0x0b11, 0x0b34, 0x0b4b, 0x0b65, 0x0b77, 0x0b8d, - 0x0ba2, 0x0bb8, 0x0bce, 0x0be8, 0x0bfc, 0x0c17, 0x0c2d, 0x0c52, - 0x0c6f, 0x0c8c, 0x0ca4, 0x0cb7, 0x0ccb, 0x0ce6, 0x0cf9, 0x0d0d, - 0x0d23, 0x0d3f, 0x0d55, 0x0d6b, 0x0d80, 0x0d92, 0x0da6, 0x0dba, - 0x0dce, 0x0de5, 0x0df5, 0x0e12, 0x0e2e, 0x0e41, 0x0e59, 0x0e81, - 0x0e92, 0x0ea1, 0x0eb8, 0x0ecb, 0x0ee0, 0x0ef9, 0x0f0b, 0x0f1f, + 0x037b, 0x0392, 0x0392, 0x03a5, 0x03bb, 0x03ce, 0x03ec, 0x0400, + 0x0414, 0x0431, 0x0444, 0x045b, 0x047c, 0x049c, 0x049c, 0x04b0, + 0x04cd, 0x04ee, 0x0505, 0x0520, 0x053f, 0x0555, 0x0572, 0x0583, + // Entry 40 - 7F + 0x0594, 0x05a8, 0x05bc, 0x05d0, 0x05ed, 0x0603, 0x061a, 0x062e, + 0x064a, 0x065d, 0x0670, 0x0684, 0x0695, 0x06a5, 0x06c3, 0x06de, + 0x06f1, 0x0705, 0x0719, 0x072d, 0x0741, 0x0755, 0x0766, 0x0779, + 0x078c, 0x07a1, 0x07b6, 0x07cb, 0x07cb, 0x07e6, 0x07fa, 0x0814, + 0x0827, 0x0848, 0x085a, 0x0872, 0x0895, 0x08a7, 0x08c0, 0x08c0, + 0x08d1, 0x08f6, 0x090a, 0x090a, 0x0920, 0x0932, 0x0945, 0x0959, + 0x096f, 0x0985, 0x0998, 0x0998, 0x09b0, 0x09c7, 0x09de, 0x09f8, + 0x0a0f, 0x0a29, 0x0a43, 0x0a5c, 0x0a71, 0x0a8f, 0x0aa8, 0x0abd, + // Entry 80 - BF + 0x0ad4, 0x0ae7, 0x0afe, 0x0b11, 0x0b34, 0x0b4b, 0x0b65, 0x0b77, + 0x0b8d, 0x0ba2, 0x0bb8, 0x0bce, 0x0be8, 0x0be8, 0x0bfc, 0x0c17, + 0x0c2d, 0x0c52, 0x0c6f, 0x0c8c, 0x0ca4, 0x0cb7, 0x0ccb, 0x0ce6, + 0x0cf9, 0x0d0d, 0x0d23, 0x0d3f, 0x0d55, 0x0d6b, 0x0d80, 0x0d92, + 0x0da6, 0x0dba, 0x0dce, 0x0de5, 0x0df5, 0x0e12, 0x0e2e, 0x0e41, + 0x0e59, 0x0e81, 0x0e92, 0x0e92, 0x0ea1, 0x0eb8, 0x0ecb, 0x0ee0, + 0x0ef9, 0x0f0b, 0x0f1f, }, }, { // tr trScriptStr, trScriptIdx, }, + { // tt + "гарәпкириллгадиләштерелгән кытайтрадицион кытайлатинязусызбилгесез язу", + []uint16{ // 179 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x0016, 0x0016, 0x0016, + 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, + 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, + 0x0016, 0x0016, 0x0016, 0x0016, 0x003f, 0x005c, 0x005c, 0x005c, + 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, + // Entry 40 - 7F + 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, + 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, + 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, + 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, + 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, + 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, + 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, + 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, + // Entry 80 - BF + 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, + 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, + 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, + 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, + 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, + 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, + 0x0072, 0x0072, 0x0089, + }, + }, {}, // twq {}, // tzm { // ug @@ -28593,32 +30311,33 @@ var scriptHeaders = [252]header{ "ۇگارىتىكچەۋايچەكۆرۈنۈشچان تاۋۇشۋاراڭ كىشىتىۋولىئايقەدىمكى پارىسچەسۇ" + "مېر-ئاككادىيان مىخ خەتيىچەئىرسىيەت ئاتالغۇماتېماتىكىلىق بەلگەبەلگەي" + "ېزىلمىغانئورتاقيوچۇن يېزىق", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x000c, 0x000c, 0x000c, 0x0016, 0x0036, 0x0042, 0x0050, 0x0058, 0x0062, 0x006c, 0x0076, 0x0082, 0x0082, 0x009f, 0x00b6, 0x00c2, 0x00ea, 0x00f2, 0x00fc, 0x0106, 0x0157, 0x0163, 0x0169, 0x0175, 0x0181, 0x018d, 0x0199, 0x01a3, 0x01de, 0x01f2, 0x0200, 0x022a, 0x0247, 0x0268, 0x028e, 0x028e, 0x02a6, 0x02c7, - 0x02d9, 0x02eb, 0x02f5, 0x0307, 0x0315, 0x0327, 0x0339, 0x0339, - 0x0339, 0x0343, 0x0353, 0x036a, 0x0385, 0x0385, 0x0397, 0x03a7, - 0x03d7, 0x03e1, 0x041a, 0x0437, 0x0447, 0x046a, 0x046a, 0x0476, - // Entry 40 - 7F - 0x0484, 0x0494, 0x04a2, 0x04b2, 0x04c4, 0x04d4, 0x04e2, 0x04f4, - 0x0504, 0x0514, 0x0524, 0x0532, 0x0540, 0x055f, 0x0578, 0x0586, - 0x0594, 0x05a2, 0x05b4, 0x05c6, 0x05d6, 0x05e2, 0x05f4, 0x0604, - 0x0604, 0x0618, 0x062e, 0x062e, 0x0656, 0x0664, 0x0683, 0x0693, - 0x06a5, 0x06a5, 0x06b5, 0x06c1, 0x06cb, 0x06df, 0x06df, 0x06ed, - 0x0719, 0x0729, 0x0729, 0x0735, 0x0741, 0x074d, 0x075b, 0x076e, - 0x077e, 0x078e, 0x078e, 0x079e, 0x07b0, 0x07b0, 0x07cf, 0x07dd, - 0x0801, 0x0829, 0x084f, 0x085d, 0x087e, 0x08a4, 0x08b2, 0x08c6, - // Entry 80 - BF - 0x08d4, 0x08e4, 0x08f4, 0x091e, 0x0938, 0x094f, 0x0961, 0x0971, - 0x0971, 0x0983, 0x0995, 0x09aa, 0x09b8, 0x09d7, 0x09e7, 0x0a04, - 0x0a21, 0x0a3e, 0x0a52, 0x0a60, 0x0a6f, 0x0a87, 0x0a95, 0x0aa5, - 0x0acc, 0x0adc, 0x0aec, 0x0afe, 0x0b10, 0x0b1c, 0x0b2e, 0x0b3c, - 0x0b4e, 0x0b64, 0x0b6e, 0x0b8d, 0x0ba4, 0x0bb2, 0x0bcf, 0x0bfc, - 0x0c04, 0x0c23, 0x0c48, 0x0c48, 0x0c52, 0x0c66, 0x0c72, 0x0c87, + 0x02d9, 0x02eb, 0x02eb, 0x02f5, 0x0307, 0x0315, 0x0327, 0x0339, + 0x0339, 0x0339, 0x0343, 0x0353, 0x036a, 0x0385, 0x0385, 0x0397, + 0x03a7, 0x03d7, 0x03e1, 0x041a, 0x0437, 0x0447, 0x046a, 0x046a, + // Entry 40 - 7F + 0x0476, 0x0484, 0x0494, 0x04a2, 0x04b2, 0x04c4, 0x04d4, 0x04e2, + 0x04f4, 0x0504, 0x0514, 0x0524, 0x0532, 0x0540, 0x055f, 0x0578, + 0x0586, 0x0594, 0x05a2, 0x05b4, 0x05c6, 0x05d6, 0x05e2, 0x05f4, + 0x0604, 0x0604, 0x0618, 0x062e, 0x062e, 0x0656, 0x0664, 0x0683, + 0x0693, 0x06a5, 0x06a5, 0x06b5, 0x06c1, 0x06cb, 0x06df, 0x06df, + 0x06ed, 0x0719, 0x0729, 0x0729, 0x0735, 0x0741, 0x074d, 0x075b, + 0x076e, 0x077e, 0x078e, 0x078e, 0x079e, 0x07b0, 0x07b0, 0x07cf, + 0x07dd, 0x0801, 0x0829, 0x084f, 0x085d, 0x087e, 0x08a4, 0x08b2, + // Entry 80 - BF + 0x08c6, 0x08d4, 0x08e4, 0x08f4, 0x091e, 0x0938, 0x094f, 0x0961, + 0x0971, 0x0971, 0x0983, 0x0995, 0x09aa, 0x09aa, 0x09b8, 0x09d7, + 0x09e7, 0x0a04, 0x0a21, 0x0a3e, 0x0a52, 0x0a60, 0x0a6f, 0x0a87, + 0x0a95, 0x0aa5, 0x0acc, 0x0adc, 0x0aec, 0x0afe, 0x0b10, 0x0b1c, + 0x0b2e, 0x0b3c, 0x0b4e, 0x0b64, 0x0b6e, 0x0b8d, 0x0ba4, 0x0bb2, + 0x0bcf, 0x0bfc, 0x0c04, 0x0c04, 0x0c23, 0x0c48, 0x0c48, 0x0c52, + 0x0c66, 0x0c72, 0x0c87, }, }, { // uk @@ -28645,32 +30364,33 @@ var scriptHeaders = [252]header{ "ухиХангулХанСоддалаштирилганАнъанавийИбронийХираганаЯпонКатаканаХме" + "рКаннадаКорейсЛаоЛотинМалайаламМўғулчаМьянмаОрияСинхалаТамилТелугуТ" + "аанаТайТибетРамзларЁзилмаганУмумийНомаълум шрифт", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0020, 0x0020, 0x0020, 0x0030, 0x0030, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x0048, 0x0048, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x0064, 0x0064, - 0x0070, 0x0070, 0x0070, 0x0070, 0x0078, 0x0088, 0x0096, 0x0096, - 0x00a2, 0x00a8, 0x00a8, 0x00c8, 0x00da, 0x00da, 0x00e8, 0x00f8, + 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0078, 0x0088, 0x0096, + 0x0096, 0x00a2, 0x00a8, 0x00a8, 0x00c8, 0x00da, 0x00da, 0x00e8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, // Entry 40 - 7F - 0x0100, 0x0100, 0x0100, 0x0110, 0x0110, 0x0118, 0x0118, 0x0126, - 0x0132, 0x0132, 0x0132, 0x0132, 0x0138, 0x0138, 0x0138, 0x0142, + 0x00f8, 0x0100, 0x0100, 0x0100, 0x0110, 0x0110, 0x0118, 0x0118, + 0x0126, 0x0132, 0x0132, 0x0132, 0x0132, 0x0138, 0x0138, 0x0138, 0x0142, 0x0142, 0x0142, 0x0142, 0x0142, 0x0142, 0x0142, 0x0142, 0x0142, 0x0142, 0x0142, 0x0142, 0x0142, 0x0142, 0x0142, 0x0142, - 0x0154, 0x0154, 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, 0x016e, + 0x0142, 0x0154, 0x0154, 0x0162, 0x0162, 0x0162, 0x0162, 0x0162, 0x016e, 0x016e, 0x016e, 0x016e, 0x016e, 0x016e, 0x016e, 0x016e, - 0x016e, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, + 0x016e, 0x016e, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, // Entry 80 - BF 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, - 0x0176, 0x0176, 0x0184, 0x0184, 0x0184, 0x0184, 0x0184, 0x0184, - 0x0184, 0x0184, 0x0184, 0x0184, 0x0184, 0x0184, 0x018e, 0x018e, - 0x018e, 0x019a, 0x019a, 0x019a, 0x019a, 0x01a4, 0x01aa, 0x01b4, - 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, - 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01c2, 0x01d4, 0x01e0, 0x01fb, + 0x0176, 0x0176, 0x0176, 0x0184, 0x0184, 0x0184, 0x0184, 0x0184, + 0x0184, 0x0184, 0x0184, 0x0184, 0x0184, 0x0184, 0x0184, 0x0184, + 0x018e, 0x018e, 0x018e, 0x019a, 0x019a, 0x019a, 0x019a, 0x01a4, + 0x01aa, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, + 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01b4, 0x01c2, + 0x01d4, 0x01e0, 0x01fb, }, }, {}, // vai @@ -28685,51 +30405,84 @@ var scriptHeaders = [252]header{ "ifačtTraditionellHebräišJapanišKhmerKannadaKorianišLaotišLatinišMala" + "isišBurmesišOriyaSingalesišTamilišTeluguThánaThaiSchriftlosUnkodiert" + "i Schrift", - []uint16{ // 176 elements + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0007, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0021, 0x0021, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x0034, 0x0034, - 0x003c, 0x003c, 0x003c, 0x003c, 0x0044, 0x004c, 0x004c, 0x004c, - 0x004c, 0x004c, 0x004c, 0x0056, 0x0062, 0x0062, 0x006b, 0x006b, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x0044, 0x004c, 0x004c, + 0x004c, 0x004c, 0x004c, 0x004c, 0x0056, 0x0062, 0x0062, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, // Entry 40 - 7F - 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0078, 0x0078, 0x007f, - 0x0088, 0x0088, 0x0088, 0x0088, 0x008f, 0x008f, 0x008f, 0x0097, + 0x006b, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0078, 0x0078, + 0x007f, 0x0088, 0x0088, 0x0088, 0x0088, 0x008f, 0x008f, 0x008f, 0x0097, 0x0097, 0x0097, 0x0097, 0x0097, 0x0097, 0x0097, 0x0097, 0x0097, 0x0097, 0x0097, 0x0097, 0x0097, 0x0097, 0x0097, 0x0097, - 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a9, + 0x0097, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a9, 0x00a9, 0x00a9, 0x00a9, 0x00a9, 0x00a9, 0x00a9, 0x00a9, - 0x00a9, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, + 0x00a9, 0x00a9, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, + 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, + // Entry 80 - BF 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, + 0x00ae, 0x00ae, 0x00ae, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, + 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, + 0x00c1, 0x00c1, 0x00c1, 0x00c7, 0x00c7, 0x00c7, 0x00c7, 0x00cd, + 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, + 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, + 0x00db, 0x00db, 0x00ed, + }, + }, + { // wo + "AraabSirilikHan buñ woyofalHan u cosaanLatinLuñ bindulMbind muñ xamul", + []uint16{ // 179 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x000c, 0x000c, 0x000c, + 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, + 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, + 0x000c, 0x000c, 0x000c, 0x000c, 0x001c, 0x0028, 0x0028, 0x0028, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, + // Entry 40 - 7F + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, // Entry 80 - BF - 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, - 0x00ae, 0x00ae, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, - 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00c1, 0x00c1, - 0x00c1, 0x00c7, 0x00c7, 0x00c7, 0x00c7, 0x00cd, 0x00d1, 0x00d1, - 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, - 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00db, 0x00db, 0x00ed, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, + 0x0038, 0x0038, 0x0048, }, }, {}, // xog {}, // yav { // yi - "אַראַבישצירילישדעוואַנאַגאַריגריכישHebrגַלחיש", - []uint16{ // 80 elements + "אַראַבישצירילישדעוואַנאַגאַריגריכישהעברעישגַלחיש", + []uint16{ // 81 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x001e, 0x001e, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, - 0x003a, 0x003a, 0x003a, 0x003a, 0x0046, 0x0046, 0x0046, 0x0046, - 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x004a, 0x004a, - 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, + 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x0046, 0x0046, 0x0046, + 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, // Entry 40 - 7F - 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, - 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x0056, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x0060, }, }, {}, // yo @@ -28748,32 +30501,76 @@ var scriptHeaders = [252]header{ "變體)敘利亞文(西方文字變體)敘利亞文(東方文字變體)南島文塔卡里文字傣哪文西雙版納新傣文坦米爾文西夏文傣擔文泰盧固文談格瓦文提非納" + "文塔加拉文塔安那文泰文西藏文邁蒂利文烏加列文瓦依文視覺語音文字瓦郎奇蒂文字沃雷艾文古波斯文蘇米魯亞甲文楔形文字彞文繼承文字(Unic" + "ode)數學符號表情符號符號非書寫語言一般文字未知文字", - []uint16{ // 176 elements + []uint16{ // 179 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x000f, 0x002a, 0x002a, 0x0036, 0x004b, 0x005a, + 0x0069, 0x0072, 0x007e, 0x0087, 0x0093, 0x009f, 0x009f, 0x00ab, + 0x00b7, 0x00c3, 0x00d2, 0x00de, 0x00ea, 0x00f6, 0x0114, 0x0120, + 0x0126, 0x0132, 0x013b, 0x0147, 0x0156, 0x0162, 0x018f, 0x0198, + 0x01a7, 0x01b9, 0x01cb, 0x01dd, 0x01f2, 0x0201, 0x0210, 0x0249, + 0x0255, 0x0264, 0x0264, 0x026d, 0x027c, 0x0285, 0x0294, 0x02a3, + 0x02af, 0x02b8, 0x02be, 0x02ca, 0x02d6, 0x02e2, 0x02e2, 0x02ee, + 0x02f7, 0x0312, 0x0321, 0x0336, 0x0345, 0x0366, 0x0375, 0x0381, + // Entry 40 - 7F + 0x038a, 0x0390, 0x039c, 0x03a8, 0x03b1, 0x03c0, 0x03c9, 0x03d8, + 0x03e4, 0x03ea, 0x03f6, 0x03ff, 0x0408, 0x0411, 0x0435, 0x0453, + 0x045c, 0x0468, 0x0471, 0x0484, 0x0497, 0x04a0, 0x04a9, 0x04b5, + 0x04c1, 0x04c1, 0x04cd, 0x04d9, 0x04d9, 0x04eb, 0x04f4, 0x0512, + 0x051e, 0x0530, 0x0530, 0x0539, 0x0545, 0x054b, 0x055a, 0x055a, + 0x0563, 0x0575, 0x0584, 0x0584, 0x0593, 0x05ae, 0x05ba, 0x05c3, + 0x05cf, 0x05db, 0x05e7, 0x05e7, 0x05f6, 0x0608, 0x0608, 0x061a, + 0x0626, 0x0641, 0x065c, 0x0674, 0x0680, 0x0692, 0x06ad, 0x06b6, + // Entry 80 - BF + 0x06cb, 0x06da, 0x06e9, 0x06f5, 0x0707, 0x0719, 0x072b, 0x073a, + 0x0746, 0x0752, 0x075b, 0x0764, 0x0776, 0x0776, 0x077f, 0x0794, + 0x07a0, 0x07c7, 0x07eb, 0x080f, 0x0818, 0x0827, 0x0830, 0x0845, + 0x0851, 0x085a, 0x0863, 0x086f, 0x087b, 0x0887, 0x0893, 0x089f, + 0x08a5, 0x08ae, 0x08ba, 0x08c6, 0x08cf, 0x08e1, 0x08f3, 0x08ff, + 0x090b, 0x0929, 0x092f, 0x092f, 0x0948, 0x0954, 0x0960, 0x0966, + 0x0975, 0x0981, 0x098d, + }, + }, + { // yue-Hans + "阿法卡文字高加索阿尔巴尼亚文阿拉伯文皇室亚美尼亚文亚美尼亚文阿维斯陀文峇里文巴姆穆文巴萨文巴塔克文孟加拉文布列斯文注音符号婆罗米文盲人用点字布吉" + + "斯文布希德文查克马文加拿大原住民通用字符卡里亚文占文柴罗基文色斯文科普特文塞浦路斯文斯拉夫文西里尔文(古教会斯拉夫文变体)天城文德瑟" + + "雷特文杜普洛伊速记古埃及世俗体古埃及僧侣体古埃及象形文字爱尔巴桑文衣索比亚文乔治亚语系(阿索他路里和努斯克胡里文)乔治亚文格拉哥里文" + + "歌德文格兰他文字希腊文古吉拉特文古鲁穆奇文汉语注音韩文字汉语哈努诺文简体中文繁体中文希伯来文平假名安那托利亚象形文字杨松录苗文片假名" + + "或平假名古匈牙利文印度河流域(哈拉帕文)古意大利文韩文字母爪哇文日文女真文字克耶李文片假名卡罗须提文高棉文克吉奇文字坎那达文韩文克培" + + "列文凯提文蓝拿文寮国文拉丁文(尖角体活字变体)拉丁文(盖尔语变体)拉丁文雷布查文林布文线性文字(A)线性文字(B)栗僳文洛马文吕西亚" + + "语里底亚语曼底安文摩尼教文玛雅象形文字门德文麦罗埃文(曲线字体)麦罗埃文马来亚拉姆文蒙古文蒙氏点字谬文曼尼普尔文缅甸文古北阿拉伯文纳" + + "巴泰文字纳西格巴文西非书面语言 (N’Ko)女书文字欧甘文桑塔利文鄂尔浑文欧利亚文欧斯曼亚文帕米瑞拉文字古彼尔姆诸文八思巴文巴列维文" + + "(碑铭体)巴列维文(圣诗体)巴列维文(书体)腓尼基文柏格理拼音符帕提亚文(碑铭体)拉让文朗格朗格象形文古北欧文字撒马利亚文沙拉堤文古" + + "南阿拉伯文索拉什特拉文手语书写符号箫柏纳字符夏拉达文悉昙文字信德文锡兰文索朗桑朋文字巽他文希洛弟纳格里文敍利亚文叙利亚文(福音体文字" + + "变体)叙利亚文(西方文字变体)叙利亚文(东方文字变体)南岛文塔卡里文字傣哪文西双版纳新傣文坦米尔文西夏文傣担文泰卢固文谈格瓦文提非纳" + + "文塔加拉文塔安那文泰文西藏文迈蒂利文乌加列文瓦依文视觉语音文字瓦郎奇蒂文字沃雷艾文古波斯文苏米鲁亚甲文楔形文字彝文继承文字(Unic" + + "ode)数学符号表情符号符号非书写语言一般文字未知文字", + []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x000f, 0x002a, 0x002a, 0x0036, 0x004b, 0x005a, 0x0069, 0x0072, 0x007e, 0x0087, 0x0093, 0x009f, 0x009f, 0x00ab, 0x00b7, 0x00c3, 0x00d2, 0x00de, 0x00ea, 0x00f6, 0x0114, 0x0120, 0x0126, 0x0132, 0x013b, 0x0147, 0x0156, 0x0162, 0x018f, 0x0198, 0x01a7, 0x01b9, 0x01cb, 0x01dd, 0x01f2, 0x0201, 0x0210, 0x0249, - 0x0255, 0x0264, 0x026d, 0x027c, 0x0285, 0x0294, 0x02a3, 0x02af, - 0x02b8, 0x02be, 0x02ca, 0x02d6, 0x02e2, 0x02e2, 0x02ee, 0x02f7, - 0x0312, 0x0321, 0x0336, 0x0345, 0x0366, 0x0375, 0x0381, 0x038a, - // Entry 40 - 7F - 0x0390, 0x039c, 0x03a8, 0x03b1, 0x03c0, 0x03c9, 0x03d8, 0x03e4, - 0x03ea, 0x03f6, 0x03ff, 0x0408, 0x0411, 0x0435, 0x0453, 0x045c, - 0x0468, 0x0471, 0x0484, 0x0497, 0x04a0, 0x04a9, 0x04b5, 0x04c1, - 0x04c1, 0x04cd, 0x04d9, 0x04d9, 0x04eb, 0x04f4, 0x0512, 0x051e, - 0x0530, 0x0530, 0x0539, 0x0545, 0x054b, 0x055a, 0x055a, 0x0563, - 0x0575, 0x0584, 0x0584, 0x0593, 0x05ae, 0x05ba, 0x05c3, 0x05cf, - 0x05db, 0x05e7, 0x05e7, 0x05f6, 0x0608, 0x0608, 0x061a, 0x0626, - 0x0641, 0x065c, 0x0674, 0x0680, 0x0692, 0x06ad, 0x06b6, 0x06cb, - // Entry 80 - BF - 0x06da, 0x06e9, 0x06f5, 0x0707, 0x0719, 0x072b, 0x073a, 0x0746, - 0x0752, 0x075b, 0x0764, 0x0776, 0x077f, 0x0794, 0x07a0, 0x07c7, - 0x07eb, 0x080f, 0x0818, 0x0827, 0x0830, 0x0845, 0x0851, 0x085a, - 0x0863, 0x086f, 0x087b, 0x0887, 0x0893, 0x089f, 0x08a5, 0x08ae, - 0x08ba, 0x08c6, 0x08cf, 0x08e1, 0x08f3, 0x08ff, 0x090b, 0x0929, - 0x092f, 0x0948, 0x0954, 0x0960, 0x0966, 0x0975, 0x0981, 0x098d, + 0x0255, 0x0264, 0x0264, 0x026d, 0x027c, 0x0285, 0x0294, 0x02a3, + 0x02af, 0x02b8, 0x02be, 0x02ca, 0x02d6, 0x02e2, 0x02e2, 0x02ee, + 0x02f7, 0x0312, 0x0321, 0x0336, 0x0345, 0x0366, 0x0375, 0x0381, + // Entry 40 - 7F + 0x038a, 0x0390, 0x039c, 0x03a8, 0x03b1, 0x03c0, 0x03c9, 0x03d8, + 0x03e4, 0x03ea, 0x03f6, 0x03ff, 0x0408, 0x0411, 0x0435, 0x0453, + 0x045c, 0x0468, 0x0471, 0x0484, 0x0497, 0x04a0, 0x04a9, 0x04b5, + 0x04c1, 0x04c1, 0x04cd, 0x04d9, 0x04d9, 0x04eb, 0x04f4, 0x0512, + 0x051e, 0x0530, 0x0530, 0x0539, 0x0545, 0x054b, 0x055a, 0x055a, + 0x0563, 0x0575, 0x0584, 0x0584, 0x0593, 0x05ae, 0x05ba, 0x05c3, + 0x05cf, 0x05db, 0x05e7, 0x05e7, 0x05f6, 0x0608, 0x0608, 0x061a, + 0x0626, 0x0641, 0x065c, 0x0674, 0x0680, 0x0692, 0x06ad, 0x06b6, + // Entry 80 - BF + 0x06cb, 0x06da, 0x06e9, 0x06f5, 0x0707, 0x0719, 0x072b, 0x073a, + 0x0746, 0x0752, 0x075b, 0x0764, 0x0776, 0x0776, 0x077f, 0x0794, + 0x07a0, 0x07c7, 0x07eb, 0x080f, 0x0818, 0x0827, 0x0830, 0x0845, + 0x0851, 0x085a, 0x0863, 0x086f, 0x087b, 0x0887, 0x0893, 0x089f, + 0x08a5, 0x08ae, 0x08ba, 0x08c6, 0x08cf, 0x08e1, 0x08f3, 0x08ff, + 0x090b, 0x0929, 0x092f, 0x092f, 0x0948, 0x0954, 0x0960, 0x0966, + 0x0975, 0x0981, 0x098d, }, }, {}, // zgh @@ -28786,31 +30583,31 @@ var scriptHeaders = [252]header{ zhHantScriptIdx, }, { // zh-Hant-HK - "西里爾文梵文埃塞俄比亞文格魯吉亞文古木基文簡體字繁體字坎納達文老撾文拉丁字母馬拉雅拉姆文奧里雅文僧伽羅文泰米爾文它拿字母藏文", + "西里爾文埃塞俄比亞文格魯吉亞文古木基文簡體字繁體字坎納達文老撾文拉丁字母馬拉雅拉姆文尼瓦爾文奧里雅文僧伽羅文泰米爾文它拿字母", []uint16{ // 160 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x000c, 0x0012, - 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0024, 0x0024, - 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x003f, 0x003f, - 0x003f, 0x003f, 0x003f, 0x0048, 0x0051, 0x0051, 0x0051, 0x0051, - 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x000c, 0x000c, + 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x001e, 0x001e, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x0039, + 0x0039, 0x0039, 0x0039, 0x0039, 0x0042, 0x004b, 0x004b, 0x004b, + 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, // Entry 40 - 7F - 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x005d, - 0x005d, 0x005d, 0x005d, 0x005d, 0x0066, 0x0066, 0x0066, 0x0072, - 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, - 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, - 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, - 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, - 0x0084, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, - 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, - // Entry 80 - BF - 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, - 0x0090, 0x0090, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, - 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x00a8, 0x00a8, - 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00b4, 0x00b4, 0x00ba, + 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, + 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0060, 0x0060, 0x0060, + 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, + 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, + 0x006c, 0x007e, 0x007e, 0x007e, 0x007e, 0x007e, 0x007e, 0x007e, + 0x007e, 0x007e, 0x007e, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, + 0x008a, 0x008a, 0x0096, 0x0096, 0x0096, 0x0096, 0x0096, 0x0096, + 0x0096, 0x0096, 0x0096, 0x0096, 0x0096, 0x0096, 0x0096, 0x0096, + // Entry 80 - BF + 0x0096, 0x0096, 0x0096, 0x0096, 0x0096, 0x0096, 0x0096, 0x0096, + 0x0096, 0x0096, 0x0096, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, + 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, + 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ba, }, }, { // zu @@ -28827,66 +30624,68 @@ const afScriptStr string = "" + // Size: 372 bytes "ThaiTibettaansWiskundige notasieEmojiSimboleOngeskreweAlgemeenOnbekende " + "skryfstelsel" -var afScriptIdx = []uint16{ // 176 elements +var afScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0007, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x0016, 0x0016, 0x0016, 0x001e, 0x001e, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x002e, 0x002e, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0040, 0x0040, - 0x0048, 0x0048, 0x0048, 0x0048, 0x004e, 0x0057, 0x005f, 0x0063, - 0x0069, 0x006c, 0x006c, 0x007e, 0x008e, 0x008e, 0x0096, 0x009e, - 0x009e, 0x009e, 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00bc, 0x00bc, + 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x004e, 0x0057, 0x005f, + 0x0063, 0x0069, 0x006c, 0x006c, 0x007e, 0x008e, 0x008e, 0x0096, + 0x009e, 0x009e, 0x009e, 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00bc, // Entry 40 - 7F - 0x00c5, 0x00c5, 0x00c5, 0x00cd, 0x00cd, 0x00d2, 0x00d2, 0x00d9, - 0x00e1, 0x00e1, 0x00e1, 0x00e1, 0x00e4, 0x00e4, 0x00e4, 0x00e9, + 0x00bc, 0x00c5, 0x00c5, 0x00c5, 0x00cd, 0x00cd, 0x00d2, 0x00d2, + 0x00d9, 0x00e1, 0x00e1, 0x00e1, 0x00e1, 0x00e4, 0x00e4, 0x00e4, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, - 0x00f2, 0x00f2, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x0101, + 0x00e9, 0x00f2, 0x00f2, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x00fa, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, - 0x0101, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, + 0x0101, 0x0101, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, // Entry 80 - BF 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, - 0x0106, 0x0106, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, - 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x0112, 0x0112, - 0x0112, 0x011a, 0x011a, 0x011a, 0x011a, 0x0120, 0x0124, 0x012e, - 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, - 0x012e, 0x012e, 0x0140, 0x0145, 0x014c, 0x0156, 0x015e, 0x0174, -} // Size: 376 bytes + 0x0106, 0x0106, 0x0106, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, + 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, + 0x0112, 0x0112, 0x0112, 0x011a, 0x011a, 0x011a, 0x011a, 0x0120, + 0x0124, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, + 0x012e, 0x012e, 0x012e, 0x012e, 0x012e, 0x0140, 0x0145, 0x014c, + 0x0156, 0x015e, 0x0174, +} // Size: 382 bytes const amScriptStr string = "" + // Size: 566 bytes "ዓረብኛአርሜንያዊቤንጋሊቦፖሞፎብሬይልሲይሪልክደቫንጋሪኢትዮፒክጆርጂያዊግሪክጉጃራቲጉርሙኪሃንብሐንጉልሃንቀለል ያለ ሃንባ" + "ህላዊ ሃንእብራይስጥሂራጋናካታካና ወይንም ሂራጋናጃሞጃፓንኛካታካናክህመርካንአዳኮሪያኛላኦላቲንማላያልምሞንጎሊያኛምያ" + "ንማርኦሪያሲንሃላታሚልተሉጉታናታይቲቤታንZmthZsyeምልክቶችያልተጻፈየጋራያልታወቀ ስክሪፕት" -var amScriptIdx = []uint16{ // 176 elements +var amScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x000c, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x002a, 0x002a, 0x002a, 0x0036, 0x0036, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0051, 0x0051, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x006f, 0x006f, - 0x007e, 0x007e, 0x007e, 0x007e, 0x0087, 0x0093, 0x009f, 0x00a8, - 0x00b4, 0x00ba, 0x00ba, 0x00d1, 0x00e4, 0x00e4, 0x00f6, 0x0102, - 0x0102, 0x0102, 0x0128, 0x0128, 0x0128, 0x0128, 0x012e, 0x012e, + 0x007e, 0x007e, 0x007e, 0x007e, 0x007e, 0x0087, 0x0093, 0x009f, + 0x00a8, 0x00b4, 0x00ba, 0x00ba, 0x00d1, 0x00e4, 0x00e4, 0x00f6, + 0x0102, 0x0102, 0x0102, 0x0128, 0x0128, 0x0128, 0x0128, 0x012e, // Entry 40 - 7F - 0x013a, 0x013a, 0x013a, 0x0146, 0x0146, 0x0152, 0x0152, 0x015e, - 0x016a, 0x016a, 0x016a, 0x016a, 0x0170, 0x0170, 0x0170, 0x0179, + 0x012e, 0x013a, 0x013a, 0x013a, 0x0146, 0x0146, 0x0152, 0x0152, + 0x015e, 0x016a, 0x016a, 0x016a, 0x016a, 0x0170, 0x0170, 0x0170, 0x0179, 0x0179, 0x0179, 0x0179, 0x0179, 0x0179, 0x0179, 0x0179, 0x0179, 0x0179, 0x0179, 0x0179, 0x0179, 0x0179, 0x0179, 0x0179, - 0x0188, 0x0188, 0x019a, 0x019a, 0x019a, 0x019a, 0x019a, 0x01a9, + 0x0179, 0x0188, 0x0188, 0x019a, 0x019a, 0x019a, 0x019a, 0x019a, 0x01a9, 0x01a9, 0x01a9, 0x01a9, 0x01a9, 0x01a9, 0x01a9, 0x01a9, - 0x01a9, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, + 0x01a9, 0x01a9, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, // Entry 80 - BF 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, 0x01b2, - 0x01b2, 0x01b2, 0x01be, 0x01be, 0x01be, 0x01be, 0x01be, 0x01be, - 0x01be, 0x01be, 0x01be, 0x01be, 0x01be, 0x01be, 0x01c7, 0x01c7, - 0x01c7, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d6, 0x01dc, 0x01e8, - 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, - 0x01e8, 0x01e8, 0x01ec, 0x01f0, 0x01ff, 0x020e, 0x0217, 0x0236, -} // Size: 376 bytes + 0x01b2, 0x01b2, 0x01b2, 0x01be, 0x01be, 0x01be, 0x01be, 0x01be, + 0x01be, 0x01be, 0x01be, 0x01be, 0x01be, 0x01be, 0x01be, 0x01be, + 0x01c7, 0x01c7, 0x01c7, 0x01d0, 0x01d0, 0x01d0, 0x01d0, 0x01d6, + 0x01dc, 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, + 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01ec, 0x01f0, 0x01ff, + 0x020e, 0x0217, 0x0236, +} // Size: 382 bytes const arScriptStr string = "" + // Size: 2477 bytes "العربيةالأرمينيةالباليةالباتاكالبنغاليةرموز بليسالبوبوموفوالهندوسيةالبرا" + @@ -28908,33 +30707,34 @@ const arScriptStr string = "" + // Size: 2477 bytes "لفايالكلام المرئيالفارسية القديمةالكتابة المسمارية الأكدية السومريةاليي" + "الموروثتدوين رياضيإيموجيرموزغير مكتوبعامنظام كتابة غير معروف" -var arScriptIdx = []uint16{ // 176 elements +var arScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000e, 0x000e, 0x0020, 0x0020, 0x002e, 0x002e, 0x002e, 0x003c, 0x004e, 0x004e, 0x005f, 0x0073, 0x0085, 0x0093, 0x00a3, 0x00b3, 0x00b3, 0x00de, 0x00ec, 0x00fc, 0x010c, 0x0118, 0x0126, 0x0136, 0x0148, 0x0189, 0x01a1, 0x01b3, 0x01b3, 0x01c9, 0x01df, 0x01f7, 0x01f7, 0x0209, 0x024f, - 0x025f, 0x0277, 0x0285, 0x0285, 0x0297, 0x02ad, 0x02bb, 0x02c3, - 0x02d3, 0x02dd, 0x02ed, 0x0306, 0x0323, 0x0323, 0x0331, 0x0345, - 0x0345, 0x035e, 0x0386, 0x03a3, 0x03bc, 0x03dd, 0x03e5, 0x03f3, + 0x025f, 0x0277, 0x0277, 0x0285, 0x0285, 0x0297, 0x02ad, 0x02bb, + 0x02c3, 0x02d3, 0x02dd, 0x02ed, 0x0306, 0x0323, 0x0323, 0x0331, + 0x0345, 0x0345, 0x035e, 0x0386, 0x03a3, 0x03bc, 0x03dd, 0x03e5, // Entry 40 - 7F - 0x0405, 0x0405, 0x0416, 0x0426, 0x0438, 0x0448, 0x0448, 0x0458, - 0x0466, 0x0466, 0x0466, 0x0470, 0x047a, 0x04a6, 0x04ce, 0x04e0, - 0x04fb, 0x0509, 0x0518, 0x0527, 0x0527, 0x0527, 0x0535, 0x0543, - 0x0543, 0x0559, 0x0559, 0x0559, 0x057e, 0x057e, 0x057e, 0x0592, - 0x05a6, 0x05a6, 0x05b6, 0x05bc, 0x05bc, 0x05bc, 0x05bc, 0x05ce, - 0x05fc, 0x05fc, 0x05fc, 0x05fc, 0x0604, 0x0604, 0x0614, 0x0614, - 0x0624, 0x0632, 0x0632, 0x0646, 0x0646, 0x0646, 0x0669, 0x0679, - 0x0679, 0x0679, 0x0679, 0x068b, 0x06a8, 0x06a8, 0x06a8, 0x06b8, + 0x03f3, 0x0405, 0x0405, 0x0416, 0x0426, 0x0438, 0x0448, 0x0448, + 0x0458, 0x0466, 0x0466, 0x0466, 0x0470, 0x047a, 0x04a6, 0x04ce, + 0x04e0, 0x04fb, 0x0509, 0x0518, 0x0527, 0x0527, 0x0527, 0x0535, + 0x0543, 0x0543, 0x0559, 0x0559, 0x0559, 0x057e, 0x057e, 0x057e, + 0x0592, 0x05a6, 0x05a6, 0x05b6, 0x05bc, 0x05bc, 0x05bc, 0x05bc, + 0x05ce, 0x05fc, 0x05fc, 0x05fc, 0x05fc, 0x0604, 0x0604, 0x0614, + 0x0614, 0x0624, 0x0632, 0x0632, 0x0646, 0x0646, 0x0646, 0x0669, + 0x0679, 0x0679, 0x0679, 0x0679, 0x068b, 0x06a8, 0x06a8, 0x06a8, // Entry 80 - BF - 0x06c4, 0x06c4, 0x06d4, 0x0702, 0x0702, 0x0702, 0x0710, 0x0710, - 0x0710, 0x0710, 0x0722, 0x0722, 0x0736, 0x0751, 0x0763, 0x078e, - 0x07af, 0x07d0, 0x07e4, 0x07e4, 0x07f3, 0x080f, 0x0821, 0x0821, - 0x0821, 0x082f, 0x0841, 0x0853, 0x0867, 0x0873, 0x0889, 0x0897, - 0x0897, 0x08af, 0x08b9, 0x08d2, 0x08d2, 0x08d2, 0x08f1, 0x0932, - 0x093a, 0x0948, 0x095d, 0x0969, 0x0971, 0x0982, 0x0988, 0x09ad, -} // Size: 376 bytes + 0x06b8, 0x06c4, 0x06c4, 0x06d4, 0x0702, 0x0702, 0x0702, 0x0710, + 0x0710, 0x0710, 0x0710, 0x0722, 0x0722, 0x0722, 0x0736, 0x0751, + 0x0763, 0x078e, 0x07af, 0x07d0, 0x07e4, 0x07e4, 0x07f3, 0x080f, + 0x0821, 0x0821, 0x0821, 0x082f, 0x0841, 0x0853, 0x0867, 0x0873, + 0x0889, 0x0897, 0x0897, 0x08af, 0x08b9, 0x08d2, 0x08d2, 0x08d2, + 0x08f1, 0x0932, 0x093a, 0x093a, 0x0948, 0x095d, 0x0969, 0x0971, + 0x0982, 0x0988, 0x09ad, +} // Size: 382 bytes const azScriptStr string = "" + // Size: 1070 bytes "ərəbarmierməniavestanbalibatakbenqalblissymbolsbopomofobrahmibraylbuqinb" + @@ -28952,33 +30752,34 @@ const azScriptStr string = "" + // Size: 1070 bytes "naqtaqaloqthanataytibetuqaritvaydanışma səsləriqədimi farssumer-akadyan " + "kuneyformyiriyazi notasiyaemojisimvollaryazısızümumi yazıtanınmayan yazı" -var azScriptIdx = []uint16{ // 176 elements +var azScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x000a, 0x0011, 0x0018, 0x001c, 0x001c, 0x001c, 0x0021, 0x0027, 0x0027, 0x0032, 0x003a, 0x0040, 0x0045, 0x004a, 0x004f, 0x0053, 0x0075, 0x007c, 0x0080, 0x0087, 0x008b, 0x0091, 0x0095, 0x009a, 0x00ae, 0x00b8, 0x00bf, 0x00bf, 0x00cc, 0x00db, 0x00eb, 0x00eb, 0x00f0, 0x00ff, - 0x0106, 0x0110, 0x0115, 0x0115, 0x011a, 0x0121, 0x0128, 0x012c, - 0x0133, 0x0136, 0x013c, 0x0153, 0x0161, 0x0161, 0x0167, 0x016e, - 0x016e, 0x0178, 0x0190, 0x019d, 0x01a6, 0x01b7, 0x01bb, 0x01bf, + 0x0106, 0x0110, 0x0110, 0x0115, 0x0115, 0x011a, 0x0121, 0x0128, + 0x012c, 0x0133, 0x0136, 0x013c, 0x0153, 0x0161, 0x0161, 0x0167, + 0x016e, 0x016e, 0x0178, 0x0190, 0x019d, 0x01a6, 0x01b7, 0x01bb, // Entry 40 - 7F - 0x01c4, 0x01c4, 0x01cc, 0x01d4, 0x01dc, 0x01e1, 0x01e1, 0x01e8, - 0x01ee, 0x01ee, 0x01f1, 0x01f6, 0x01f9, 0x0209, 0x0216, 0x021c, - 0x0223, 0x0228, 0x0228, 0x0228, 0x0228, 0x0228, 0x022e, 0x0234, - 0x0234, 0x023c, 0x0246, 0x0246, 0x0256, 0x0256, 0x0256, 0x025e, - 0x0267, 0x0267, 0x026d, 0x0270, 0x0270, 0x027c, 0x027c, 0x0283, - 0x0283, 0x0283, 0x0283, 0x0283, 0x0286, 0x0286, 0x028b, 0x0293, - 0x0298, 0x029d, 0x029d, 0x02a4, 0x02a4, 0x02a4, 0x02b2, 0x02b9, - 0x02bc, 0x02bf, 0x02cc, 0x02d2, 0x02e0, 0x02e4, 0x02eb, 0x02f5, + 0x01bf, 0x01c4, 0x01c4, 0x01cc, 0x01d4, 0x01dc, 0x01e1, 0x01e1, + 0x01e8, 0x01ee, 0x01ee, 0x01f1, 0x01f6, 0x01f9, 0x0209, 0x0216, + 0x021c, 0x0223, 0x0228, 0x0228, 0x0228, 0x0228, 0x0228, 0x022e, + 0x0234, 0x0234, 0x023c, 0x0246, 0x0246, 0x0256, 0x0256, 0x0256, + 0x025e, 0x0267, 0x0267, 0x026d, 0x0270, 0x0270, 0x027c, 0x027c, + 0x0283, 0x0283, 0x0283, 0x0283, 0x0283, 0x0286, 0x0286, 0x028b, + 0x0293, 0x0298, 0x029d, 0x029d, 0x02a4, 0x02a4, 0x02a4, 0x02b2, + 0x02b9, 0x02bc, 0x02bf, 0x02cc, 0x02d2, 0x02e0, 0x02e4, 0x02eb, // Entry 80 - BF - 0x02fa, 0x0303, 0x0309, 0x0309, 0x0312, 0x0323, 0x032a, 0x032a, - 0x032a, 0x032a, 0x0330, 0x0330, 0x0336, 0x0343, 0x0349, 0x035e, - 0x035e, 0x035e, 0x0366, 0x0366, 0x036c, 0x0379, 0x037e, 0x037e, - 0x0382, 0x0388, 0x038f, 0x0396, 0x039d, 0x03a2, 0x03a5, 0x03aa, - 0x03aa, 0x03b0, 0x03b3, 0x03c6, 0x03c6, 0x03c6, 0x03d2, 0x03e9, - 0x03eb, 0x03eb, 0x03fa, 0x03ff, 0x0408, 0x0411, 0x041d, 0x042e, -} // Size: 376 bytes + 0x02f5, 0x02fa, 0x0303, 0x0309, 0x0309, 0x0312, 0x0323, 0x032a, + 0x032a, 0x032a, 0x032a, 0x0330, 0x0330, 0x0330, 0x0336, 0x0343, + 0x0349, 0x035e, 0x035e, 0x035e, 0x0366, 0x0366, 0x036c, 0x0379, + 0x037e, 0x037e, 0x0382, 0x0388, 0x038f, 0x0396, 0x039d, 0x03a2, + 0x03a5, 0x03aa, 0x03aa, 0x03b0, 0x03b3, 0x03c6, 0x03c6, 0x03c6, + 0x03d2, 0x03e9, 0x03eb, 0x03eb, 0x03eb, 0x03fa, 0x03ff, 0x0408, + 0x0411, 0x041d, 0x042e, +} // Size: 382 bytes const bgScriptStr string = "" + // Size: 2351 bytes "арабскаАрамейскаарменскаАвестанскаБалийскиБатакскабенгалскаБлис символиб" + @@ -28999,33 +30800,34 @@ const bgScriptStr string = "" + // Size: 2351 bytes "каВайскаВидима речСтароперсийскаШумеро-акадски клинописЙиМатематически " + "символиемотиконисимволибез писменостобщанепозната писменост" -var bgScriptIdx = []uint16{ // 176 elements +var bgScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000e, 0x0020, 0x0030, 0x0044, 0x0054, 0x0054, 0x0054, 0x0064, 0x0076, 0x0076, 0x008d, 0x009d, 0x00a9, 0x00b9, 0x00c9, 0x00d3, 0x00dd, 0x012b, 0x013b, 0x014b, 0x0157, 0x015f, 0x016d, 0x017d, 0x018d, 0x018d, 0x01a1, 0x01af, 0x01af, 0x01df, 0x020f, 0x0234, 0x0234, 0x0244, 0x0263, - 0x0275, 0x028d, 0x029f, 0x029f, 0x02ab, 0x02bd, 0x02cd, 0x02d5, - 0x02e1, 0x02f1, 0x02fd, 0x031e, 0x0345, 0x0345, 0x034f, 0x035f, - 0x035f, 0x0374, 0x0393, 0x03ad, 0x03bd, 0x03dc, 0x03e6, 0x03f4, + 0x0275, 0x028d, 0x028d, 0x029f, 0x029f, 0x02ab, 0x02bd, 0x02cd, + 0x02d5, 0x02e1, 0x02f1, 0x02fd, 0x031e, 0x0345, 0x0345, 0x034f, + 0x035f, 0x035f, 0x0374, 0x0393, 0x03ad, 0x03bd, 0x03dc, 0x03e6, // Entry 40 - 7F - 0x0402, 0x0402, 0x040d, 0x041d, 0x042f, 0x043f, 0x043f, 0x044d, - 0x045d, 0x045d, 0x0469, 0x0473, 0x047f, 0x04a0, 0x04bd, 0x04cd, - 0x04d7, 0x04e1, 0x04f2, 0x0503, 0x0503, 0x0503, 0x0513, 0x0523, - 0x0523, 0x0539, 0x054d, 0x054d, 0x056f, 0x056f, 0x056f, 0x0581, - 0x0591, 0x0591, 0x05a3, 0x05a9, 0x05a9, 0x05b9, 0x05b9, 0x05cb, - 0x05cb, 0x05cb, 0x05cb, 0x05cb, 0x05d4, 0x05d4, 0x05e8, 0x05f5, - 0x0614, 0x061c, 0x061c, 0x062c, 0x062c, 0x062c, 0x0647, 0x0654, - 0x0654, 0x0654, 0x0666, 0x067a, 0x0699, 0x0699, 0x0699, 0x06ae, + 0x03f4, 0x0402, 0x0402, 0x040d, 0x041d, 0x042f, 0x043f, 0x043f, + 0x044d, 0x045d, 0x045d, 0x0469, 0x0473, 0x047f, 0x04a0, 0x04bd, + 0x04cd, 0x04d7, 0x04e1, 0x04f2, 0x0503, 0x0503, 0x0503, 0x0513, + 0x0523, 0x0523, 0x0539, 0x054d, 0x054d, 0x056f, 0x056f, 0x056f, + 0x0581, 0x0591, 0x0591, 0x05a3, 0x05a9, 0x05a9, 0x05b9, 0x05b9, + 0x05cb, 0x05cb, 0x05cb, 0x05cb, 0x05cb, 0x05d4, 0x05d4, 0x05e8, + 0x05f5, 0x0614, 0x061c, 0x061c, 0x062c, 0x062c, 0x062c, 0x0647, + 0x0654, 0x0654, 0x0654, 0x0666, 0x067a, 0x0699, 0x0699, 0x0699, // Entry 80 - BF - 0x06c0, 0x06d8, 0x06e4, 0x06e4, 0x06f6, 0x06f6, 0x06f6, 0x06f6, - 0x06f6, 0x06f6, 0x0708, 0x0708, 0x071a, 0x0731, 0x0741, 0x0766, - 0x0785, 0x07a4, 0x07b4, 0x07b4, 0x07bf, 0x07d3, 0x07e3, 0x07e3, - 0x07e3, 0x07ef, 0x07ef, 0x07ef, 0x07fd, 0x0807, 0x0813, 0x0823, - 0x0823, 0x0835, 0x0841, 0x0854, 0x0854, 0x0854, 0x0870, 0x089c, - 0x08a0, 0x08a0, 0x08c9, 0x08db, 0x08e9, 0x0902, 0x090a, 0x092f, -} // Size: 376 bytes + 0x06ae, 0x06c0, 0x06d8, 0x06e4, 0x06e4, 0x06f6, 0x06f6, 0x06f6, + 0x06f6, 0x06f6, 0x06f6, 0x0708, 0x0708, 0x0708, 0x071a, 0x0731, + 0x0741, 0x0766, 0x0785, 0x07a4, 0x07b4, 0x07b4, 0x07bf, 0x07d3, + 0x07e3, 0x07e3, 0x07e3, 0x07ef, 0x07ef, 0x07ef, 0x07fd, 0x0807, + 0x0813, 0x0823, 0x0823, 0x0835, 0x0841, 0x0854, 0x0854, 0x0854, + 0x0870, 0x089c, 0x08a0, 0x08a0, 0x08a0, 0x08c9, 0x08db, 0x08e9, + 0x0902, 0x090a, 0x092f, +} // Size: 382 bytes const bnScriptStr string = "" + // Size: 3617 bytes "আরবিআরমিআর্মেনীয়আভেসতানবালীয়বাটাকবাংলাব্লিসপ্রতীকবোপোমোফোব্রাহ্মীব্রেই" + @@ -29044,36 +30846,37 @@ const bnScriptStr string = "" + // Size: 3617 bytes "ট্রচিহ্ন লিখনসাভিয়ানসিংহলিসান্দানিজসিলেটি নাগরিসিরিয়াকএস্ট্রেঙ্গেলো " + "সিরিয়াকপশ্চিমাঞ্চলীয় সিরিয়াকপূর্বাঞ্চলীয় সিরিয়াকটাগোওয়ানাতাইলেনত" + "ুন তাই লুতামিলতাই ভিয়েৎতেলেগুতেঙ্গোয়ারতিফিনাগটাগালগথানাথাইতিব্বতিউগা" + - "রিটিকভাইদৃশ্যমান ভাষাপ্রাচীন ফার্সিসুমের-আক্কাদীয় কীলকরূপউইকাইগানিতিক" + + "রিটিকভাইদৃশ্যমান ভাষাপ্রাচীন ফার্সিসুমের-আক্কাদীয় কীলকরূপউইকাইগাণিতিক" + " চিহ্নইমোজিপ্রতিকগুলিঅলিখিতসাধারনঅজানা লিপি" -var bnScriptIdx = []uint16{ // 176 elements +var bnScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0018, 0x0033, 0x0048, 0x005a, 0x005a, 0x005a, 0x0069, 0x0078, 0x0078, 0x0099, 0x00b1, 0x00c9, 0x00db, 0x00e7, 0x00f6, 0x0105, 0x0186, 0x01a4, 0x01b3, 0x01c5, 0x01d4, 0x01e9, 0x020a, 0x021f, 0x0276, 0x028e, 0x02a3, 0x02a3, 0x02ce, 0x02ff, 0x0339, 0x0339, 0x0351, 0x037c, - 0x0397, 0x03b8, 0x03c7, 0x03c7, 0x03d6, 0x03eb, 0x0403, 0x0418, - 0x042d, 0x043c, 0x0454, 0x0479, 0x04a7, 0x04a7, 0x04b9, 0x04d1, - 0x04d1, 0x04e7, 0x0515, 0x0546, 0x0558, 0x057d, 0x058f, 0x05a4, + 0x0397, 0x03b8, 0x03b8, 0x03c7, 0x03c7, 0x03d6, 0x03eb, 0x0403, + 0x0418, 0x042d, 0x043c, 0x0454, 0x0479, 0x04a7, 0x04a7, 0x04b9, + 0x04d1, 0x04d1, 0x04e7, 0x0515, 0x0546, 0x0558, 0x057d, 0x058f, // Entry 40 - 7F - 0x05b6, 0x05b6, 0x05cf, 0x05e7, 0x05fc, 0x060b, 0x060b, 0x0620, - 0x0638, 0x0638, 0x0647, 0x0659, 0x0662, 0x0693, 0x06be, 0x06d3, - 0x06e5, 0x06f7, 0x0713, 0x0732, 0x0732, 0x0732, 0x074d, 0x0768, - 0x0768, 0x078c, 0x07aa, 0x07aa, 0x07e1, 0x07e1, 0x07e1, 0x07f9, - 0x0817, 0x0817, 0x0835, 0x083e, 0x083e, 0x0863, 0x0863, 0x087e, - 0x087e, 0x087e, 0x087e, 0x087e, 0x088a, 0x088a, 0x0896, 0x08a9, - 0x08bb, 0x08d0, 0x08d0, 0x08e8, 0x08e8, 0x08e8, 0x0913, 0x0929, - 0x0948, 0x096d, 0x0992, 0x09aa, 0x09d2, 0x09ed, 0x0a08, 0x0a2c, + 0x05a4, 0x05b6, 0x05b6, 0x05cf, 0x05e7, 0x05fc, 0x060b, 0x060b, + 0x0620, 0x0638, 0x0638, 0x0647, 0x0659, 0x0662, 0x0693, 0x06be, + 0x06d3, 0x06e5, 0x06f7, 0x0713, 0x0732, 0x0732, 0x0732, 0x074d, + 0x0768, 0x0768, 0x078c, 0x07aa, 0x07aa, 0x07e1, 0x07e1, 0x07e1, + 0x07f9, 0x0817, 0x0817, 0x0835, 0x083e, 0x083e, 0x0863, 0x0863, + 0x087e, 0x087e, 0x087e, 0x087e, 0x087e, 0x088a, 0x088a, 0x0896, + 0x08a9, 0x08bb, 0x08d0, 0x08d0, 0x08e8, 0x08e8, 0x08e8, 0x0913, + 0x0929, 0x0948, 0x096d, 0x0992, 0x09aa, 0x09d2, 0x09ed, 0x0a08, // Entry 80 - BF - 0x0a3b, 0x0a50, 0x0a62, 0x0a62, 0x0a7d, 0x0a99, 0x0ab1, 0x0ab1, - 0x0ab1, 0x0ab1, 0x0ac3, 0x0ac3, 0x0ade, 0x0b00, 0x0b18, 0x0b58, - 0x0b9b, 0x0bdb, 0x0bf9, 0x0bf9, 0x0c08, 0x0c25, 0x0c34, 0x0c34, - 0x0c50, 0x0c62, 0x0c80, 0x0c95, 0x0ca7, 0x0cb3, 0x0cbc, 0x0cd1, - 0x0cd1, 0x0ce9, 0x0cf2, 0x0d17, 0x0d17, 0x0d17, 0x0d3f, 0x0d80, - 0x0d86, 0x0d8f, 0x0db4, 0x0dc3, 0x0de1, 0x0df3, 0x0e05, 0x0e21, -} // Size: 376 bytes + 0x0a2c, 0x0a3b, 0x0a50, 0x0a62, 0x0a62, 0x0a7d, 0x0a99, 0x0ab1, + 0x0ab1, 0x0ab1, 0x0ab1, 0x0ac3, 0x0ac3, 0x0ac3, 0x0ade, 0x0b00, + 0x0b18, 0x0b58, 0x0b9b, 0x0bdb, 0x0bf9, 0x0bf9, 0x0c08, 0x0c25, + 0x0c34, 0x0c34, 0x0c50, 0x0c62, 0x0c80, 0x0c95, 0x0ca7, 0x0cb3, + 0x0cbc, 0x0cd1, 0x0cd1, 0x0ce9, 0x0cf2, 0x0d17, 0x0d17, 0x0d17, + 0x0d3f, 0x0d80, 0x0d86, 0x0d86, 0x0d8f, 0x0db4, 0x0dc3, 0x0de1, + 0x0df3, 0x0e05, 0x0e21, +} // Size: 382 bytes const caScriptStr string = "" + // Size: 1638 bytes "adlamafakaalbanès caucàsicahomàrabarameu imperialarmeniavèsticbalinèsbam" + @@ -29099,39 +30902,40 @@ const caScriptStr string = "" + // Size: 1638 bytes "itiwoleaipersa anticcuneïforme sumeri-accadiyiheretatnotació matemàticae" + "mojisímbolssense escripturacomúescriptura desconeguda" -var caScriptIdx = []uint16{ // 176 elements +var caScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0005, 0x000a, 0x001c, 0x0020, 0x0025, 0x0034, 0x003a, 0x0042, 0x004a, 0x004f, 0x0058, 0x005d, 0x0065, 0x006e, 0x007c, 0x0084, 0x008a, 0x0091, 0x0099, 0x009e, 0x00a4, 0x00d3, 0x00d9, 0x00dd, 0x00e5, 0x00ea, 0x00ef, 0x00f7, 0x0102, 0x012d, 0x0137, 0x013e, 0x0152, 0x0161, 0x0171, 0x0183, 0x018a, 0x0192, 0x01a1, - 0x01a9, 0x01b4, 0x01ba, 0x01c1, 0x01c5, 0x01cd, 0x01d5, 0x01d9, - 0x01df, 0x01e2, 0x01e9, 0x01f8, 0x0207, 0x0207, 0x020d, 0x0215, - 0x0228, 0x0234, 0x0247, 0x0256, 0x0278, 0x0286, 0x028a, 0x0292, + 0x01a9, 0x01b4, 0x01b4, 0x01ba, 0x01c1, 0x01c5, 0x01cd, 0x01d5, + 0x01d9, 0x01df, 0x01e2, 0x01e9, 0x01f8, 0x0207, 0x0207, 0x020d, + 0x0215, 0x0228, 0x0234, 0x0247, 0x0256, 0x0278, 0x0286, 0x028a, // Entry 40 - 7F - 0x029a, 0x02a2, 0x02aa, 0x02b2, 0x02bb, 0x02c0, 0x02c5, 0x02cc, - 0x02d2, 0x02d8, 0x02de, 0x02e3, 0x02e6, 0x02f4, 0x0302, 0x0308, - 0x030e, 0x0313, 0x031b, 0x0323, 0x0327, 0x032b, 0x032f, 0x0333, - 0x033b, 0x0342, 0x034a, 0x034a, 0x035c, 0x0361, 0x0373, 0x037c, - 0x0386, 0x038a, 0x0390, 0x0394, 0x0397, 0x03a0, 0x03a7, 0x03ad, - 0x03bf, 0x03c6, 0x03cb, 0x03cf, 0x03d5, 0x03dc, 0x03e1, 0x03e8, - 0x03ee, 0x03f3, 0x03f8, 0x03ff, 0x0407, 0x0412, 0x041f, 0x0426, - 0x043b, 0x044a, 0x0451, 0x0457, 0x0463, 0x0479, 0x047f, 0x048a, + 0x0292, 0x029a, 0x02a2, 0x02aa, 0x02b2, 0x02bb, 0x02c0, 0x02c5, + 0x02cc, 0x02d2, 0x02d8, 0x02de, 0x02e3, 0x02e6, 0x02f4, 0x0302, + 0x0308, 0x030e, 0x0313, 0x031b, 0x0323, 0x0327, 0x032b, 0x032f, + 0x0333, 0x033b, 0x0342, 0x034a, 0x034a, 0x035c, 0x0361, 0x0373, + 0x037c, 0x0386, 0x038a, 0x0390, 0x0394, 0x0397, 0x03a0, 0x03a7, + 0x03ad, 0x03bf, 0x03c6, 0x03cb, 0x03cf, 0x03d5, 0x03dc, 0x03e1, + 0x03e8, 0x03ee, 0x03f3, 0x03f8, 0x03ff, 0x0407, 0x0412, 0x041f, + 0x0426, 0x043b, 0x044a, 0x0451, 0x0457, 0x0463, 0x0479, 0x047f, // Entry 80 - BF - 0x0490, 0x0499, 0x049f, 0x04b0, 0x04ba, 0x04ce, 0x04d5, 0x04db, - 0x04e2, 0x04eb, 0x04f4, 0x0500, 0x0509, 0x0515, 0x051c, 0x052e, - 0x0540, 0x0550, 0x0558, 0x055d, 0x0563, 0x056e, 0x0574, 0x057a, - 0x0582, 0x0588, 0x058f, 0x0597, 0x059f, 0x05a5, 0x05af, 0x05b6, - 0x05bc, 0x05c5, 0x05c8, 0x05da, 0x05e7, 0x05ed, 0x05f8, 0x0611, - 0x0613, 0x061a, 0x062e, 0x0633, 0x063b, 0x064b, 0x0650, 0x0666, -} // Size: 376 bytes - -const csScriptStr string = "" + // Size: 1906 bytes + 0x048a, 0x0490, 0x0499, 0x049f, 0x04b0, 0x04ba, 0x04ce, 0x04d5, + 0x04db, 0x04e2, 0x04eb, 0x04f4, 0x0500, 0x0500, 0x0509, 0x0515, + 0x051c, 0x052e, 0x0540, 0x0550, 0x0558, 0x055d, 0x0563, 0x056e, + 0x0574, 0x057a, 0x0582, 0x0588, 0x058f, 0x0597, 0x059f, 0x05a5, + 0x05af, 0x05b6, 0x05bc, 0x05c5, 0x05c8, 0x05da, 0x05e7, 0x05ed, + 0x05f8, 0x0611, 0x0613, 0x0613, 0x061a, 0x062e, 0x0633, 0x063b, + 0x064b, 0x0650, 0x0666, +} // Size: 382 bytes + +const csScriptStr string = "" + // Size: 1912 bytes "afakakavkazskoalbánskéarabskéaramejské (imperiální)arménskéavestánskébal" + "ijskébamumskébassa vahbatackébengálskéBlissovo písmobopomofobráhmíBraill" + "ovo písmobuginskébuhidskéčakmaslabičné písmo kanadských domorodcůkarijsk" + - "éčamčerokíkirtkoptskékyperskécyrilicecyrilce - staroslověnskádévanágárí" + + "éčamčerokíkirtkoptskékyperskécyrilicecyrilce - staroslověnskádévanágarí" + "deseretDuployého těsnopisegyptské démotickéegyptské hieratickéegyptské h" + "ieroglyfyelbasanskéetiopskégruzínské chutsurigruzínskéhlaholicegotickégr" + "anthařeckégudžarátígurmukhihanbhangulhanhanunóohan (zjednodušené)han (tr" + @@ -29140,97 +30944,99 @@ const csScriptStr string = "" + // Size: 1906 bytes "kháróšthíkhmerskéchodžikikannadskékorejskékpellekaithilannalaoskélatinka" + " - lomenálatinka - galskálatinkalepčskélimbulineární Alineární BFraserov" + "olomalýkijskélýdskémahádžanímandejskémanichejskémayské hieroglyfymendské" + - "meroitické psacímeroitickémalajlámskémodímongolskéMoonovomromejtej majek" + - " (manipurské)myanmarskéstaroseveroarabskénabatejskénaxi geban’konü-šuoga" + - "mskésantálské (ol chiki)orchonskéurijskéosmansképalmýrsképau cin haustar" + - "opermsképhags-papahlavské klínovépahlavské žalmovépahlavské knižnífénick" + - "éPollardova fonetická abecedaparthské klínovéredžanskérongorongorunovés" + - "amařskésaratistarojihoarabskésaurášterskéSignWritingShawova abecedašárad" + - "ásiddhamchudábádísinhálskésora sompengsundskésylhetskésyrskésyrské - es" + - "trangelosyrské - západnísyrské - východnítagbanwatakrítai letai lü novét" + - "amilskétanguttai viettelugskétengwarberberskétagalskéthaanathajskétibets" + - "kétirhutaugaritské klínovévaividitelná řečvarang kšitikarolínské (woleai" + - ")staroperské klínové písmosumero-akkadské klínové písmoyimatematický záp" + - "isemodžisymbolybez zápisuobecnéneznámé písmo" - -var csScriptIdx = []uint16{ // 176 elements + "meroitické psacímeroitickémalajlámskémodímongolskéMoonovo písmomromejtej" + + " majek (manipurské)myanmarskéstaroseveroarabskénabatejskénaxi geban’konü" + + "-šuogamskésantálské (ol chiki)orchonskéurijskéosmansképalmýrsképau cin h" + + "austaropermsképhags-papahlavské klínovépahlavské žalmovépahlavské knižní" + + "fénickéPollardova fonetická abecedaparthské klínovéredžanskérongorongoru" + + "novésamařskésaratistarojihoarabskésaurášterskéSignWritingShawova abeceda" + + "šáradásiddhamchudábádísinhálskésora sompengsundskésylhetskésyrskésyrské" + + " - estrangelosyrské - západnísyrské - východnítagbanwatakrítai letai lü " + + "novétamilskétanguttai viettelugskétengwarberberskétagalskéthaanathajskét" + + "ibetskétirhutaugaritské klínovévaividitelná řečvarang kšitikarolínské (w" + + "oleai)staroperské klínové písmosumero-akkadské klínové písmoyimatematick" + + "ý zápisemodžisymbolybez zápisuobecnéneznámé písmo" + +var csScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0005, 0x0018, 0x0018, 0x0020, 0x0039, 0x0043, 0x004f, 0x0058, 0x0061, 0x006a, 0x0072, 0x007d, 0x007d, 0x008c, 0x0094, 0x009c, 0x00ac, 0x00b5, 0x00be, 0x00c4, 0x00ec, 0x00f5, - 0x00f9, 0x0101, 0x0105, 0x010d, 0x0116, 0x011e, 0x0138, 0x0146, - 0x014d, 0x0161, 0x0176, 0x018b, 0x019f, 0x01aa, 0x01b3, 0x01c7, - 0x01d2, 0x01db, 0x01e3, 0x01ea, 0x01f1, 0x01fd, 0x0205, 0x0209, - 0x020f, 0x0212, 0x021a, 0x022e, 0x023e, 0x023e, 0x0248, 0x0250, - 0x0265, 0x026e, 0x0282, 0x0291, 0x029b, 0x02a3, 0x02a7, 0x02b1, + 0x00f9, 0x0101, 0x0105, 0x010d, 0x0116, 0x011e, 0x0138, 0x0145, + 0x014c, 0x0160, 0x0175, 0x018a, 0x019e, 0x01a9, 0x01b2, 0x01c6, + 0x01d1, 0x01da, 0x01da, 0x01e2, 0x01e9, 0x01f0, 0x01fc, 0x0204, + 0x0208, 0x020e, 0x0211, 0x0219, 0x022d, 0x023d, 0x023d, 0x0247, + 0x024f, 0x0264, 0x026d, 0x0281, 0x0290, 0x029a, 0x02a2, 0x02a6, // Entry 40 - 7F - 0x02ba, 0x02c8, 0x02d0, 0x02d8, 0x02e5, 0x02ee, 0x02f7, 0x0301, - 0x030a, 0x0310, 0x0316, 0x031b, 0x0322, 0x0333, 0x0344, 0x034b, - 0x0354, 0x0359, 0x0365, 0x0371, 0x037a, 0x037e, 0x0388, 0x0390, - 0x039c, 0x03a6, 0x03b2, 0x03b2, 0x03c4, 0x03cc, 0x03de, 0x03e9, - 0x03f6, 0x03fb, 0x0405, 0x040c, 0x040f, 0x0429, 0x0429, 0x0434, - 0x0447, 0x0452, 0x0452, 0x045b, 0x0461, 0x0468, 0x0470, 0x0486, - 0x0490, 0x0498, 0x0498, 0x04a1, 0x04ac, 0x04b7, 0x04c4, 0x04cc, - 0x04e0, 0x04f4, 0x0507, 0x0510, 0x052d, 0x0540, 0x054b, 0x0555, + 0x02b0, 0x02b9, 0x02c7, 0x02cf, 0x02d7, 0x02e4, 0x02ed, 0x02f6, + 0x0300, 0x0309, 0x030f, 0x0315, 0x031a, 0x0321, 0x0332, 0x0343, + 0x034a, 0x0353, 0x0358, 0x0364, 0x0370, 0x0379, 0x037d, 0x0387, + 0x038f, 0x039b, 0x03a5, 0x03b1, 0x03b1, 0x03c3, 0x03cb, 0x03dd, + 0x03e8, 0x03f5, 0x03fa, 0x0404, 0x0412, 0x0415, 0x042f, 0x042f, + 0x043a, 0x044d, 0x0458, 0x0458, 0x0461, 0x0467, 0x046e, 0x0476, + 0x048c, 0x0496, 0x049e, 0x049e, 0x04a7, 0x04b2, 0x04bd, 0x04ca, + 0x04d2, 0x04e6, 0x04fa, 0x050d, 0x0516, 0x0533, 0x0546, 0x0551, // Entry 80 - BF - 0x055c, 0x0566, 0x056c, 0x057d, 0x058c, 0x0597, 0x05a6, 0x05af, - 0x05b6, 0x05c2, 0x05cd, 0x05d9, 0x05e1, 0x05eb, 0x05f2, 0x0606, - 0x0619, 0x062d, 0x0635, 0x063b, 0x0641, 0x064e, 0x0657, 0x065d, - 0x0665, 0x066e, 0x0675, 0x067f, 0x0688, 0x068e, 0x0696, 0x069f, - 0x06a6, 0x06ba, 0x06bd, 0x06cd, 0x06da, 0x06ef, 0x070c, 0x072d, - 0x072f, 0x072f, 0x0742, 0x0749, 0x0750, 0x075b, 0x0762, 0x0772, -} // Size: 376 bytes - -const daScriptStr string = "" + // Size: 1483 bytes + 0x055b, 0x0562, 0x056c, 0x0572, 0x0583, 0x0592, 0x059d, 0x05ac, + 0x05b5, 0x05bc, 0x05c8, 0x05d3, 0x05df, 0x05df, 0x05e7, 0x05f1, + 0x05f8, 0x060c, 0x061f, 0x0633, 0x063b, 0x0641, 0x0647, 0x0654, + 0x065d, 0x0663, 0x066b, 0x0674, 0x067b, 0x0685, 0x068e, 0x0694, + 0x069c, 0x06a5, 0x06ac, 0x06c0, 0x06c3, 0x06d3, 0x06e0, 0x06f5, + 0x0712, 0x0733, 0x0735, 0x0735, 0x0735, 0x0748, 0x074f, 0x0756, + 0x0761, 0x0768, 0x0778, +} // Size: 382 bytes + +const daScriptStr string = "" + // Size: 1481 bytes "afakaarabiskarmiarmenskavestanskbalinesiskbamumbassabatakbengaliblissymb" + - "olerbopomofobramiskbrailleskriftbuginesiskbuhidcakmoprindelige canadiske" + - " symbolerkarianskchamcherokeecirtkoptiskcypriotiskkyrilliskkyrillisk - o" + - "ldkirkeslavisk variantdevanagarideseretDuploya-stenografiegyptisk demoti" + - "skegyptisk hieratiskegyptiske hieroglyfferetiopiskgeorgisk kutsurigeorgi" + - "skglagolitiskgotiskgranthagræskgujaratigurmukhihan med bopomofohangulhan" + - "hanunooforenklet hantraditionelt hanhebraiskhiraganaanatolske hieroglyff" + - "erpahawh hmongjapanske skrifttegnoldungarskindusOlditaliskjamojavanesisk" + - "japanskjurchenkaya likatakanakharoshtikhmerkhojkikannadakoreanskkpellekt" + - "hilannalaolatinsk - frakturvariantlatinsk - gælisk variantlatinsklepchal" + - "imbulineær Alineær Blisulomalykisklydiskmandaiskmanikæiskmayahieroglyffe" + - "rmendemetroitisk sammenhængendemeroitiskmalayalammongolskmoonmroomeitei-" + - "mayekburmesiskgammelt nordarabisknabateisknakhi geban’konüshuoghamol-chi" + - "kiorkhonoriyaosmanniskpalmyrenskoldpermiskphags-paphliphlppahlavifønikis" + - "kpollardtegnprtirejangrongo-rongorunersamaritansksaratioldsørarabisksaur" + - "ashtrategnskriftshavisksharadakhudawadisingalesisksorasundanesisksyloti " + - "nagrisyrisksyrisk - estrangelovariantvestsyriskøstsyriakisktagbanwatakri" + - "tai letai luetamilsktanguttavttelugutengwartifinaghtagalogthaanathailand" + - "sktibetansktirhutaugaritiskvaisynlig talevarang kshitiwoleaioldpersisksu" + - "mero-akkadisk cuneiformyiarvetmatematisk notationemojisymboleruden skrif" + - "tsprogfællesukendt skriftsprog" - -var daScriptIdx = []uint16{ // 176 elements + "olerbopomofobramiskpunktskriftbuginesiskbuhidcakmoprindelige canadiske s" + + "ymbolerkarianskchamcherokeecirtkoptiskcypriotiskkyrilliskkyrillisk - old" + + "kirkeslavisk variantdevanagarideseretDuploya-stenografiegyptisk demotisk" + + "egyptisk hieratiskegyptiske hieroglyfferetiopiskgeorgisk kutsurigeorgisk" + + "glagolitiskgotiskgranthagræskgujaratigurmukhihan med bopomofohangulhanha" + + "nunooforenklet hantraditionelt hanhebraiskhiraganaanatolske hieroglyffer" + + "pahawh hmongjapanske skrifttegnoldungarskindusOlditaliskjamojavanesiskja" + + "panskjurchenkaya likatakanakharoshtikhmerkhojkikannadakoreanskkpellekthi" + + "lannalaolatinsk - frakturvariantlatinsk - gælisk variantlatinsklepchalim" + + "bulineær Alineær Blisulomalykisklydiskmandaiskmanikæiskmayahieroglyfferm" + + "endemetroitisk sammenhængendemeroitiskmalayalammongolskmoonmroomeitei-ma" + + "yekburmesiskgammelt nordarabisknabateisknakhi geban’konüshuoghamol-chiki" + + "orkhonoriyaosmanniskpalmyrenskoldpermiskphags-paphliphlppahlavifønikiskp" + + "ollardtegnprtirejangrongo-rongorunersamaritansksaratioldsørarabisksauras" + + "htrategnskriftshavisksharadakhudawadisingalesisksorasundanesisksyloti na" + + "grisyrisksyrisk - estrangelovariantvestsyriskøstsyriakisktagbanwatakrita" + + "i letai luetamilsktanguttavttelugutengwartifinaghtagalogthaanathailandsk" + + "tibetansktirhutaugaritiskvaisynlig talevarang kshitiwoleaioldpersisksume" + + "ro-akkadisk cuneiformyiarvetmatematisk notationemojisymboleruden skrifts" + + "progfællesukendt skriftsprog" + +var daScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0005, 0x0005, 0x0005, 0x000c, 0x0010, 0x0017, 0x0020, 0x002a, 0x002f, 0x0034, 0x0039, 0x0040, 0x0040, 0x004c, - 0x0054, 0x005b, 0x0068, 0x0072, 0x0077, 0x007b, 0x0099, 0x00a1, - 0x00a5, 0x00ad, 0x00b1, 0x00b8, 0x00c2, 0x00cb, 0x00ee, 0x00f8, - 0x00ff, 0x0111, 0x0122, 0x0134, 0x014a, 0x014a, 0x0152, 0x0162, - 0x016a, 0x0175, 0x017b, 0x0182, 0x0188, 0x0190, 0x0198, 0x01a8, - 0x01ae, 0x01b1, 0x01b8, 0x01c5, 0x01d5, 0x01d5, 0x01dd, 0x01e5, - 0x01fb, 0x0207, 0x021a, 0x0224, 0x0229, 0x0233, 0x0237, 0x0241, + 0x0054, 0x005b, 0x0066, 0x0070, 0x0075, 0x0079, 0x0097, 0x009f, + 0x00a3, 0x00ab, 0x00af, 0x00b6, 0x00c0, 0x00c9, 0x00ec, 0x00f6, + 0x00fd, 0x010f, 0x0120, 0x0132, 0x0148, 0x0148, 0x0150, 0x0160, + 0x0168, 0x0173, 0x0173, 0x0179, 0x0180, 0x0186, 0x018e, 0x0196, + 0x01a6, 0x01ac, 0x01af, 0x01b6, 0x01c3, 0x01d3, 0x01d3, 0x01db, + 0x01e3, 0x01f9, 0x0205, 0x0218, 0x0222, 0x0227, 0x0231, 0x0235, // Entry 40 - 7F - 0x0248, 0x024f, 0x0256, 0x025e, 0x0267, 0x026c, 0x0272, 0x0279, - 0x0281, 0x0287, 0x028b, 0x0290, 0x0293, 0x02ab, 0x02c4, 0x02cb, - 0x02d1, 0x02d6, 0x02df, 0x02e8, 0x02ec, 0x02f0, 0x02f6, 0x02fc, - 0x02fc, 0x0304, 0x030e, 0x030e, 0x031e, 0x0323, 0x033d, 0x0346, - 0x034f, 0x034f, 0x0357, 0x035b, 0x035f, 0x036b, 0x036b, 0x0374, - 0x0387, 0x0390, 0x0390, 0x039a, 0x03a0, 0x03a6, 0x03ab, 0x03b3, - 0x03b9, 0x03be, 0x03be, 0x03c7, 0x03d1, 0x03d1, 0x03db, 0x03e3, - 0x03e7, 0x03eb, 0x03f2, 0x03fb, 0x0406, 0x040a, 0x0410, 0x041b, + 0x023f, 0x0246, 0x024d, 0x0254, 0x025c, 0x0265, 0x026a, 0x0270, + 0x0277, 0x027f, 0x0285, 0x0289, 0x028e, 0x0291, 0x02a9, 0x02c2, + 0x02c9, 0x02cf, 0x02d4, 0x02dd, 0x02e6, 0x02ea, 0x02ee, 0x02f4, + 0x02fa, 0x02fa, 0x0302, 0x030c, 0x030c, 0x031c, 0x0321, 0x033b, + 0x0344, 0x034d, 0x034d, 0x0355, 0x0359, 0x035d, 0x0369, 0x0369, + 0x0372, 0x0385, 0x038e, 0x038e, 0x0398, 0x039e, 0x03a4, 0x03a9, + 0x03b1, 0x03b7, 0x03bc, 0x03bc, 0x03c5, 0x03cf, 0x03cf, 0x03d9, + 0x03e1, 0x03e5, 0x03e9, 0x03f0, 0x03f9, 0x0404, 0x0408, 0x040e, // Entry 80 - BF - 0x0420, 0x042b, 0x0431, 0x043f, 0x0449, 0x0453, 0x045a, 0x0461, - 0x0461, 0x046a, 0x0475, 0x0479, 0x0484, 0x0490, 0x0496, 0x04b0, - 0x04ba, 0x04c7, 0x04cf, 0x04d4, 0x04da, 0x04e1, 0x04e8, 0x04ee, - 0x04f2, 0x04f8, 0x04ff, 0x0507, 0x050e, 0x0514, 0x051e, 0x0527, - 0x052e, 0x0537, 0x053a, 0x0545, 0x0552, 0x0558, 0x0562, 0x057b, - 0x057d, 0x0582, 0x0595, 0x059a, 0x05a2, 0x05b2, 0x05b9, 0x05cb, -} // Size: 376 bytes + 0x0419, 0x041e, 0x0429, 0x042f, 0x043d, 0x0447, 0x0451, 0x0458, + 0x045f, 0x045f, 0x0468, 0x0473, 0x0477, 0x0477, 0x0482, 0x048e, + 0x0494, 0x04ae, 0x04b8, 0x04c5, 0x04cd, 0x04d2, 0x04d8, 0x04df, + 0x04e6, 0x04ec, 0x04f0, 0x04f6, 0x04fd, 0x0505, 0x050c, 0x0512, + 0x051c, 0x0525, 0x052c, 0x0535, 0x0538, 0x0543, 0x0550, 0x0556, + 0x0560, 0x0579, 0x057b, 0x057b, 0x0580, 0x0593, 0x0598, 0x05a0, + 0x05b0, 0x05b7, 0x05c9, +} // Size: 382 bytes const deScriptStr string = "" + // Size: 1697 bytes "AfakaKaukasisch-AlbanischArabischArmiArmenischAvestischBalinesischBamunB" + @@ -29258,35 +31064,36 @@ const deScriptStr string = "" + // Size: 1697 bytes "hriftYiGeerbter SchriftwertMathematische NotationEmojiSymboleSchriftlosV" + "erbreitetUnbekannte Schrift" -var deScriptIdx = []uint16{ // 176 elements +var deScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0005, 0x0019, 0x0019, 0x0021, 0x0025, 0x002e, 0x0037, 0x0042, 0x0047, 0x004c, 0x0056, 0x0060, 0x0060, 0x006d, 0x0075, 0x007b, 0x0089, 0x0094, 0x0099, 0x009f, 0x00a3, 0x00aa, 0x00ae, 0x00b6, 0x00bb, 0x00c3, 0x00ce, 0x00d8, 0x00ea, 0x00f4, 0x00fb, 0x0107, 0x011d, 0x0134, 0x014c, 0x0157, 0x0162, 0x016a, - 0x0173, 0x017f, 0x0186, 0x018d, 0x0197, 0x019f, 0x01a7, 0x01ab, - 0x01b1, 0x01bb, 0x01c2, 0x01da, 0x01f3, 0x01f3, 0x01fd, 0x0205, - 0x0219, 0x0225, 0x023d, 0x0249, 0x0256, 0x0261, 0x0265, 0x0270, + 0x0173, 0x017f, 0x017f, 0x0186, 0x018d, 0x0197, 0x019f, 0x01a7, + 0x01ab, 0x01b1, 0x01bb, 0x01c2, 0x01da, 0x01f3, 0x01f3, 0x01fd, + 0x0205, 0x0219, 0x0225, 0x023d, 0x0249, 0x0256, 0x0261, 0x0265, // Entry 40 - 7F - 0x0279, 0x0280, 0x0288, 0x0290, 0x029a, 0x029f, 0x02a5, 0x02ac, - 0x02b6, 0x02bc, 0x02c2, 0x02c7, 0x02cf, 0x02ec, 0x030b, 0x0315, - 0x031b, 0x0320, 0x0328, 0x0330, 0x0336, 0x033a, 0x0341, 0x0348, - 0x0350, 0x035a, 0x0366, 0x0366, 0x0377, 0x037c, 0x038d, 0x0397, - 0x03a0, 0x03a4, 0x03ae, 0x03b2, 0x03b5, 0x03c1, 0x03c1, 0x03cb, - 0x03da, 0x03e5, 0x03e5, 0x03e9, 0x03ef, 0x03fc, 0x0401, 0x0409, - 0x0415, 0x041a, 0x041a, 0x0423, 0x042f, 0x043a, 0x0445, 0x044d, - 0x0459, 0x0468, 0x046f, 0x047a, 0x048c, 0x0495, 0x049b, 0x04a5, + 0x0270, 0x0279, 0x0280, 0x0288, 0x0290, 0x029a, 0x029f, 0x02a5, + 0x02ac, 0x02b6, 0x02bc, 0x02c2, 0x02c7, 0x02cf, 0x02ec, 0x030b, + 0x0315, 0x031b, 0x0320, 0x0328, 0x0330, 0x0336, 0x033a, 0x0341, + 0x0348, 0x0350, 0x035a, 0x0366, 0x0366, 0x0377, 0x037c, 0x038d, + 0x0397, 0x03a0, 0x03a4, 0x03ae, 0x03b2, 0x03b5, 0x03c1, 0x03c1, + 0x03cb, 0x03da, 0x03e5, 0x03e5, 0x03e9, 0x03ef, 0x03fc, 0x0401, + 0x0409, 0x0415, 0x041a, 0x041a, 0x0423, 0x042f, 0x043a, 0x0445, + 0x044d, 0x0459, 0x0468, 0x046f, 0x047a, 0x048c, 0x0495, 0x049b, // Entry 80 - BF - 0x04b1, 0x04be, 0x04c4, 0x04d3, 0x04dd, 0x04ed, 0x04fa, 0x0501, - 0x0508, 0x0511, 0x051e, 0x052a, 0x0536, 0x0542, 0x0549, 0x0566, - 0x0571, 0x057b, 0x0583, 0x0588, 0x058e, 0x0595, 0x059e, 0x05a3, - 0x05ab, 0x05b1, 0x05b8, 0x05c0, 0x05c7, 0x05cd, 0x05d1, 0x05da, - 0x05e1, 0x05eb, 0x05ee, 0x05ff, 0x060c, 0x0618, 0x0623, 0x0643, - 0x0645, 0x0659, 0x066f, 0x0674, 0x067b, 0x0685, 0x068f, 0x06a1, -} // Size: 376 bytes - -const elScriptStr string = "" + // Size: 2665 bytes + 0x04a5, 0x04b1, 0x04be, 0x04c4, 0x04d3, 0x04dd, 0x04ed, 0x04fa, + 0x0501, 0x0508, 0x0511, 0x051e, 0x052a, 0x052a, 0x0536, 0x0542, + 0x0549, 0x0566, 0x0571, 0x057b, 0x0583, 0x0588, 0x058e, 0x0595, + 0x059e, 0x05a3, 0x05ab, 0x05b1, 0x05b8, 0x05c0, 0x05c7, 0x05cd, + 0x05d1, 0x05da, 0x05e1, 0x05eb, 0x05ee, 0x05ff, 0x060c, 0x0618, + 0x0623, 0x0643, 0x0645, 0x0645, 0x0659, 0x066f, 0x0674, 0x067b, + 0x0685, 0x068f, 0x06a1, +} // Size: 382 bytes + +const elScriptStr string = "" + // Size: 2664 bytes "ΑραβικόΑυτοκρατορικό ΑραμαϊκόΑρμενικόΑβεστάνΜπαλινίζΜπατάκΜπενγκάλιΣύμβο" + "λα BlissΜποπομόφοΜπραχμίΜπράιγΜπούγκιςΜπουχίντΤσάκμαΕνοποιημένοι Καναδε" + "ζικοί Συλλαβισμοί ΙθαγενώνΚαριάνΤσαμΤσερόκιΣερθΚοπτικόΚυπριακόΚυριλλικό" + @@ -29298,108 +31105,140 @@ const elScriptStr string = "" + // Size: 2665 bytes "ΙαπωνικόΚαγιάχ ΛιΚατακάναΚαρόσθιΧμερΚανάνταΚορεατικόΚαϊθίΛάνναΛάοςΦράκτ" + "ουρ ΛατινικόΓαελικό ΛατινικόΛατινικόΛέπτσαΛιμπούΓραμμικό ΑΓραμμικό ΒΛυκ" + "ιανικόΛυδιανικόΜανδαϊκόΜανιχαϊκόΙερογλυφικά ΜάγιαΜεροϊτικόΜαλαγιάλαμΜογ" + - "γολικόΜουνΜεϊτέι ΜάγεκΜιανμάρΝ’ΚοΌγκχαμΟλ ΤσίκιΌρκχονΟρίγιαΟσμάνγιαΠαλα" + - "ιό ΠερμικόΠαγκς-παΕπιγραφικό ΠαχλάβιΨάλτερ ΠαχλάβιΜπουκ ΠαχλαβίΦοινικικ" + - "όΦωνητικό ΠόλαρντΕπιγραφικό ΠαρθιάνΡετζάνγκΡονγκορόνγκοΡουνίκΣαμαριτικό" + - "ΣαράθιΣαουράστραΝοηματική γραφήΣαβιανόΣινχάλαΣουνδανικόΣυλότι ΝάγκριΣυρ" + - "ιακόΕστραντζέλο ΣυριακόΔυτικό ΣυριακόΑνατολικό ΣυριακόΤαγκμάνγουαΤάι Λε" + - "Νέο Τάι ΛούεΤαμίλΤάι ΒιέτΤελούγκουΤεγνγουάρΤιφινάγκΤαγκαλόγκΘαανάΤαϊλαν" + - "δικόΘιβετιανόΟυγκαριτικόΒάιΟρατή ομιλίαΠαλαιό ΠερσικόΣούμερο-Ακάντιαν Κ" + - "ουνεϊφόρμΓιΚληρονομημένοΜαθηματική σημειογραφίαZsyeΣύμβολαΆγραφοΚοινόΆγ" + + "γολικόΜουνΜεϊτέι ΜάγεκΜιανμάρΝ’ΚοΌγκχαμΟλ ΤσίκιΌρκχονΌντιαΟσμάνγιαΠαλαι" + + "ό ΠερμικόΠαγκς-παΕπιγραφικό ΠαχλάβιΨάλτερ ΠαχλάβιΜπουκ ΠαχλαβίΦοινικικό" + + "Φωνητικό ΠόλαρντΕπιγραφικό ΠαρθιάνΡετζάνγκΡονγκορόνγκοΡουνίκΣαμαριτικόΣ" + + "αράθιΣαουράστραΝοηματική γραφήΣαβιανόΣινχάλαΣουνδανικόΣυλότι ΝάγκριΣυρι" + + "ακόΕστραντζέλο ΣυριακόΔυτικό ΣυριακόΑνατολικό ΣυριακόΤαγκμάνγουαΤάι ΛεΝ" + + "έο Τάι ΛούεΤαμίλΤάι ΒιέτΤελούγκουΤεγνγουάρΤιφινάγκΤαγκαλόγκΘαανάΤαϊλανδ" + + "ικόΘιβετιανόΟυγκαριτικόΒάιΟρατή ομιλίαΠαλαιό ΠερσικόΣούμερο-Ακάντιαν Κο" + + "υνεϊφόρμΓιΚληρονομημένοΜαθηματική σημειογραφίαEmojiΣύμβολαΆγραφοΚοινόΆγ" + "νωστη γραφή" -var elScriptIdx = []uint16{ // 176 elements +var elScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000e, 0x0039, 0x0049, 0x0057, 0x0067, 0x0067, 0x0067, 0x0073, 0x0085, 0x0085, 0x0099, 0x00ab, 0x00b9, 0x00c5, 0x00d5, 0x00e5, 0x00f1, 0x0148, 0x0154, 0x015c, 0x016a, 0x0172, 0x0180, 0x0190, 0x01a2, 0x01eb, 0x0203, 0x0211, 0x0211, 0x0230, 0x0255, 0x0280, 0x0280, 0x0292, 0x02b9, - 0x02cb, 0x02e5, 0x02f3, 0x02f3, 0x0303, 0x0319, 0x032f, 0x0339, - 0x0349, 0x034f, 0x035f, 0x037e, 0x039b, 0x039b, 0x03a9, 0x03bb, - 0x03bb, 0x03d2, 0x03f8, 0x0415, 0x0421, 0x043c, 0x0446, 0x045a, + 0x02cb, 0x02e5, 0x02e5, 0x02f3, 0x02f3, 0x0303, 0x0319, 0x032f, + 0x0339, 0x0349, 0x034f, 0x035f, 0x037e, 0x039b, 0x039b, 0x03a9, + 0x03bb, 0x03bb, 0x03d2, 0x03f8, 0x0415, 0x0421, 0x043c, 0x0446, // Entry 40 - 7F - 0x046a, 0x046a, 0x047b, 0x048b, 0x0499, 0x04a1, 0x04a1, 0x04af, - 0x04c1, 0x04c1, 0x04cb, 0x04d5, 0x04dd, 0x04fe, 0x051d, 0x052d, - 0x0539, 0x0545, 0x0558, 0x056b, 0x056b, 0x056b, 0x057d, 0x058f, - 0x058f, 0x059f, 0x05b1, 0x05b1, 0x05d2, 0x05d2, 0x05d2, 0x05e4, - 0x05f8, 0x05f8, 0x060a, 0x0612, 0x0612, 0x0629, 0x0629, 0x0637, - 0x0637, 0x0637, 0x0637, 0x0637, 0x0640, 0x0640, 0x064c, 0x065b, - 0x0667, 0x0673, 0x0673, 0x0683, 0x0683, 0x0683, 0x069e, 0x06ad, - 0x06d0, 0x06eb, 0x0704, 0x0716, 0x0735, 0x0758, 0x0768, 0x0780, + 0x045a, 0x046a, 0x046a, 0x047b, 0x048b, 0x0499, 0x04a1, 0x04a1, + 0x04af, 0x04c1, 0x04c1, 0x04cb, 0x04d5, 0x04dd, 0x04fe, 0x051d, + 0x052d, 0x0539, 0x0545, 0x0558, 0x056b, 0x056b, 0x056b, 0x057d, + 0x058f, 0x058f, 0x059f, 0x05b1, 0x05b1, 0x05d2, 0x05d2, 0x05d2, + 0x05e4, 0x05f8, 0x05f8, 0x060a, 0x0612, 0x0612, 0x0629, 0x0629, + 0x0637, 0x0637, 0x0637, 0x0637, 0x0637, 0x0640, 0x0640, 0x064c, + 0x065b, 0x0667, 0x0671, 0x0671, 0x0681, 0x0681, 0x0681, 0x069c, + 0x06ab, 0x06ce, 0x06e9, 0x0702, 0x0714, 0x0733, 0x0756, 0x0766, // Entry 80 - BF - 0x078c, 0x07a0, 0x07ac, 0x07ac, 0x07c0, 0x07dd, 0x07eb, 0x07eb, - 0x07eb, 0x07eb, 0x07f9, 0x07f9, 0x080d, 0x0826, 0x0834, 0x0859, - 0x0874, 0x0895, 0x08ab, 0x08ab, 0x08b6, 0x08cc, 0x08d6, 0x08d6, - 0x08e5, 0x08f7, 0x0909, 0x0919, 0x092b, 0x0935, 0x0949, 0x095b, - 0x095b, 0x0971, 0x0977, 0x098e, 0x098e, 0x098e, 0x09a9, 0x09dd, - 0x09e1, 0x09fb, 0x0a28, 0x0a2c, 0x0a3a, 0x0a46, 0x0a50, 0x0a69, -} // Size: 376 bytes - -const enScriptStr string = "" + // Size: 1585 bytes + 0x077e, 0x078a, 0x079e, 0x07aa, 0x07aa, 0x07be, 0x07db, 0x07e9, + 0x07e9, 0x07e9, 0x07e9, 0x07f7, 0x07f7, 0x07f7, 0x080b, 0x0824, + 0x0832, 0x0857, 0x0872, 0x0893, 0x08a9, 0x08a9, 0x08b4, 0x08ca, + 0x08d4, 0x08d4, 0x08e3, 0x08f5, 0x0907, 0x0917, 0x0929, 0x0933, + 0x0947, 0x0959, 0x0959, 0x096f, 0x0975, 0x098c, 0x098c, 0x098c, + 0x09a7, 0x09db, 0x09df, 0x09df, 0x09f9, 0x0a26, 0x0a2b, 0x0a39, + 0x0a45, 0x0a4f, 0x0a68, +} // Size: 382 bytes + +const enScriptStr string = "" + // Size: 1621 bytes "AdlamAfakaCaucasian AlbanianAhomArabicImperial AramaicArmenianAvestanBal" + "ineseBamumBassa VahBatakBanglaBhaiksukiBlissymbolsBopomofoBrahmiBrailleB" + "ugineseBuhidChakmaUnified Canadian Aboriginal SyllabicsCarianChamCheroke" + "eCirthCopticCypriotCyrillicOld Church Slavonic CyrillicDevanagariDeseret" + "Duployan shorthandEgyptian demoticEgyptian hieraticEgyptian hieroglyphsE" + - "lbasanEthiopicGeorgian KhutsuriGeorgianGlagoliticGothicGranthaGreekGujar" + - "atiGurmukhiHan with BopomofoHangulHanHanunooSimplified HanTraditional Ha" + - "nHatranHebrewHiraganaAnatolian HieroglyphsPahawh HmongJapanese syllabari" + - "esOld HungarianIndusOld ItalicJamoJavaneseJapaneseJurchenKayah LiKatakan" + - "aKharoshthiKhmerKhojkiKannadaKoreanKpelleKaithiLannaLaoFraktur LatinGael" + - "ic LatinLatinLepchaLimbuLinear ALinear BFraserLomaLycianLydianMahajaniMa" + - "ndaeanManichaeanMarchenMayan hieroglyphsMendeMeroitic CursiveMeroiticMal" + - "ayalamModiMongolianMoonMroMeitei MayekMultaniMyanmarOld North ArabianNab" + - "ataeanNewaNaxi GebaN’KoNüshuOghamOl ChikiOrkhonOdiaOsageOsmanyaPalmyrene" + - "Pau Cin HauOld PermicPhags-paInscriptional PahlaviPsalter PahlaviBook Pa" + - "hlaviPhoenicianPollard PhoneticInscriptional ParthianRejangRongorongoRun" + - "icSamaritanSaratiOld South ArabianSaurashtraSignWritingShavianSharadaSid" + - "dhamKhudawadiSinhalaSora SompengSundaneseSyloti NagriSyriacEstrangelo Sy" + - "riacWestern SyriacEastern SyriacTagbanwaTakriTai LeNew Tai LueTamilTangu" + - "tTai VietTeluguTengwarTifinaghTagalogThaanaThaiTibetanTirhutaUgariticVai" + - "Visible SpeechVarang KshitiWoleaiOld PersianSumero-Akkadian CuneiformYiI" + - "nheritedMathematical NotationEmojiSymbolsUnwrittenCommonUnknown Script" - -var enScriptIdx = []uint16{ // 176 elements + "lbasanEthiopicGeorgian KhutsuriGeorgianGlagoliticMasaram GondiGothicGran" + + "thaGreekGujaratiGurmukhiHan with BopomofoHangulHanHanunooSimplified HanT" + + "raditional HanHatranHebrewHiraganaAnatolian HieroglyphsPahawh HmongJapan" + + "ese syllabariesOld HungarianIndusOld ItalicJamoJavaneseJapaneseJurchenKa" + + "yah LiKatakanaKharoshthiKhmerKhojkiKannadaKoreanKpelleKaithiLannaLaoFrak" + + "tur LatinGaelic LatinLatinLepchaLimbuLinear ALinear BFraserLomaLycianLyd" + + "ianMahajaniMandaeanManichaeanMarchenMayan hieroglyphsMendeMeroitic Cursi" + + "veMeroiticMalayalamModiMongolianMoonMroMeitei MayekMultaniMyanmarOld Nor" + + "th ArabianNabataeanNewaNaxi GebaN’KoNüshuOghamOl ChikiOrkhonOdiaOsageOsm" + + "anyaPalmyrenePau Cin HauOld PermicPhags-paInscriptional PahlaviPsalter P" + + "ahlaviBook PahlaviPhoenicianPollard PhoneticInscriptional ParthianRejang" + + "RongorongoRunicSamaritanSaratiOld South ArabianSaurashtraSignWritingShav" + + "ianSharadaSiddhamKhudawadiSinhalaSora SompengSoyomboSundaneseSyloti Nagr" + + "iSyriacEstrangelo SyriacWestern SyriacEastern SyriacTagbanwaTakriTai LeN" + + "ew Tai LueTamilTangutTai VietTeluguTengwarTifinaghTagalogThaanaThaiTibet" + + "anTirhutaUgariticVaiVisible SpeechVarang KshitiWoleaiOld PersianSumero-A" + + "kkadian CuneiformYiZanabazar SquareInheritedMathematical NotationEmojiSy" + + "mbolsUnwrittenCommonUnknown Script" + +var enScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0005, 0x000a, 0x001c, 0x0020, 0x0026, 0x0036, 0x003e, 0x0045, 0x004d, 0x0052, 0x005b, 0x0060, 0x0066, 0x006f, 0x007a, 0x0082, 0x0088, 0x008f, 0x0097, 0x009c, 0x00a2, 0x00c7, 0x00cd, 0x00d1, 0x00d9, 0x00de, 0x00e4, 0x00eb, 0x00f3, 0x010f, 0x0119, 0x0120, 0x0132, 0x0142, 0x0153, 0x0167, 0x016e, 0x0176, 0x0187, - 0x018f, 0x0199, 0x019f, 0x01a6, 0x01ab, 0x01b3, 0x01bb, 0x01cc, - 0x01d2, 0x01d5, 0x01dc, 0x01ea, 0x01f9, 0x01ff, 0x0205, 0x020d, - 0x0222, 0x022e, 0x0242, 0x024f, 0x0254, 0x025e, 0x0262, 0x026a, + 0x018f, 0x0199, 0x01a6, 0x01ac, 0x01b3, 0x01b8, 0x01c0, 0x01c8, + 0x01d9, 0x01df, 0x01e2, 0x01e9, 0x01f7, 0x0206, 0x020c, 0x0212, + 0x021a, 0x022f, 0x023b, 0x024f, 0x025c, 0x0261, 0x026b, 0x026f, + // Entry 40 - 7F + 0x0277, 0x027f, 0x0286, 0x028e, 0x0296, 0x02a0, 0x02a5, 0x02ab, + 0x02b2, 0x02b8, 0x02be, 0x02c4, 0x02c9, 0x02cc, 0x02d9, 0x02e5, + 0x02ea, 0x02f0, 0x02f5, 0x02fd, 0x0305, 0x030b, 0x030f, 0x0315, + 0x031b, 0x0323, 0x032b, 0x0335, 0x033c, 0x034d, 0x0352, 0x0362, + 0x036a, 0x0373, 0x0377, 0x0380, 0x0384, 0x0387, 0x0393, 0x039a, + 0x03a1, 0x03b2, 0x03bb, 0x03bf, 0x03c8, 0x03ce, 0x03d4, 0x03d9, + 0x03e1, 0x03e7, 0x03eb, 0x03f0, 0x03f7, 0x0400, 0x040b, 0x0415, + 0x041d, 0x0432, 0x0441, 0x044d, 0x0457, 0x0467, 0x047d, 0x0483, + // Entry 80 - BF + 0x048d, 0x0492, 0x049b, 0x04a1, 0x04b2, 0x04bc, 0x04c7, 0x04ce, + 0x04d5, 0x04dc, 0x04e5, 0x04ec, 0x04f8, 0x04ff, 0x0508, 0x0514, + 0x051a, 0x052b, 0x0539, 0x0547, 0x054f, 0x0554, 0x055a, 0x0565, + 0x056a, 0x0570, 0x0578, 0x057e, 0x0585, 0x058d, 0x0594, 0x059a, + 0x059e, 0x05a5, 0x05ac, 0x05b4, 0x05b7, 0x05c5, 0x05d2, 0x05d8, + 0x05e3, 0x05fc, 0x05fe, 0x060e, 0x0617, 0x062c, 0x0631, 0x0638, + 0x0641, 0x0647, 0x0655, +} // Size: 382 bytes + +const enGBScriptStr string = "Thai" + +var enGBScriptIdx = []uint16{ // 161 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // Entry 40 - 7F - 0x0272, 0x0279, 0x0281, 0x0289, 0x0293, 0x0298, 0x029e, 0x02a5, - 0x02ab, 0x02b1, 0x02b7, 0x02bc, 0x02bf, 0x02cc, 0x02d8, 0x02dd, - 0x02e3, 0x02e8, 0x02f0, 0x02f8, 0x02fe, 0x0302, 0x0308, 0x030e, - 0x0316, 0x031e, 0x0328, 0x032f, 0x0340, 0x0345, 0x0355, 0x035d, - 0x0366, 0x036a, 0x0373, 0x0377, 0x037a, 0x0386, 0x038d, 0x0394, - 0x03a5, 0x03ae, 0x03b2, 0x03bb, 0x03c1, 0x03c7, 0x03cc, 0x03d4, - 0x03da, 0x03de, 0x03e3, 0x03ea, 0x03f3, 0x03fe, 0x0408, 0x0410, - 0x0425, 0x0434, 0x0440, 0x044a, 0x045a, 0x0470, 0x0476, 0x0480, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // Entry 80 - BF - 0x0485, 0x048e, 0x0494, 0x04a5, 0x04af, 0x04ba, 0x04c1, 0x04c8, - 0x04cf, 0x04d8, 0x04df, 0x04eb, 0x04f4, 0x0500, 0x0506, 0x0517, - 0x0525, 0x0533, 0x053b, 0x0540, 0x0546, 0x0551, 0x0556, 0x055c, - 0x0564, 0x056a, 0x0571, 0x0579, 0x0580, 0x0586, 0x058a, 0x0591, - 0x0598, 0x05a0, 0x05a3, 0x05b1, 0x05be, 0x05c4, 0x05cf, 0x05e8, - 0x05ea, 0x05f3, 0x0608, 0x060d, 0x0614, 0x061d, 0x0623, 0x0631, -} // Size: 376 bytes - -const esScriptStr string = "" + // Size: 1206 bytes + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0004, +} // Size: 346 bytes + +const esScriptStr string = "" + // Size: 1207 bytes "árabearmenioavésticobalinésbatakbengalísímbolos blisbopomofobrahmibraill" + - "ebuginésbuhidsímbolos aborígenes canadienses unificadoscariochamcherokee" + - "cirthcoptochipriotacirílicocirílico del antiguo eslavo eclesiásticodevan" + - "agarideseretegipcio demóticoegipcio hieráticojeroglíficos egipciosetiópi" + - "cogeorgiano eclesiásticogeorgianoglagolíticogóticogriegogujaratigurmujih" + - "anbhangulhanhanunoohan simplificadohan tradicionalhebreohiraganapahawh h" + - "mongsilabarios japoneseshúngaro antiguoIndio (harappan)antigua bastardil" + - "lajamojavanésjaponéskayah likatakanakharosthijemercanaréscoreanolannalao" + - "sianolatino frakturlatino gaélicolatinolepchalimbulineal Alineal Bliciol" + - "idiomandeojeroglíficos mayasmeroíticomalayálammongolmoonmanipuribirmanon" + - "’kooghamol cikiorkhonoriyaosmaniyapermiano antiguophags-pafenicioPolla" + + "ebuginésbuhidsilabarios aborígenes canadienses unificadoscariochamcherok" + + "eecirthcoptochipriotacirílicocirílico del antiguo eslavo eclesiásticodev" + + "anagarideseretegipcio demóticoegipcio hieráticojeroglíficos egipciosetió" + + "picogeorgiano eclesiásticogeorgianoglagolíticogóticogriegogujaratigurmuj" + + "ihanbhangulhanhanunoohan simplificadohan tradicionalhebreohiraganapahawh" + + " hmongsilabarios japoneseshúngaro antiguoIndio (harappan)antigua bastard" + + "illajamojavanésjaponéskayah likatakanakharosthijemercanaréscoreanolannal" + + "aosianolatino frakturlatino gaélicolatinolepchalimbulineal Alineal Blici" + + "olidiomandeojeroglíficos mayasmeroíticomalayálammongolmoonmanipuribirman" + + "on’kooghamol cikiorkhonoriyaosmaniyapermiano antiguophags-pafenicioPolla" + "rd Miaorejangrongo-rongorúnicosaratisaurashtraSignWritingshavianocingalé" + "ssundanéssyloti nagrisiriacosiriaco estrangelosiriaco occidentalsiriaco " + "orientaltagbanúatai lenuevo tai luetamiltelugutengwartifinaghtagalothaan" + @@ -29407,37 +31246,39 @@ const esScriptStr string = "" + // Size: 1206 bytes "merio-acadioyiheredadonotación matemáticaemojissímbolosno escritocomúnal" + "fabeto desconocido" -var esScriptIdx = []uint16{ // 176 elements +var esScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x000d, 0x0016, 0x001e, 0x001e, 0x001e, 0x0023, 0x002b, 0x002b, 0x0039, - 0x0041, 0x0047, 0x004e, 0x0056, 0x005b, 0x005b, 0x0087, 0x008c, - 0x0090, 0x0098, 0x009d, 0x00a2, 0x00ab, 0x00b4, 0x00de, 0x00e8, - 0x00ef, 0x00ef, 0x0100, 0x0112, 0x0128, 0x0128, 0x0131, 0x0148, - 0x0151, 0x015d, 0x0164, 0x0164, 0x016a, 0x0172, 0x0179, 0x017d, - 0x0183, 0x0186, 0x018d, 0x019d, 0x01ac, 0x01ac, 0x01b2, 0x01ba, - 0x01ba, 0x01c6, 0x01da, 0x01ea, 0x01fa, 0x020d, 0x0211, 0x0219, + 0x0041, 0x0047, 0x004e, 0x0056, 0x005b, 0x005b, 0x0088, 0x008d, + 0x0091, 0x0099, 0x009e, 0x00a3, 0x00ac, 0x00b5, 0x00df, 0x00e9, + 0x00f0, 0x00f0, 0x0101, 0x0113, 0x0129, 0x0129, 0x0132, 0x0149, + 0x0152, 0x015e, 0x015e, 0x0165, 0x0165, 0x016b, 0x0173, 0x017a, + 0x017e, 0x0184, 0x0187, 0x018e, 0x019e, 0x01ad, 0x01ad, 0x01b3, + 0x01bb, 0x01bb, 0x01c7, 0x01db, 0x01eb, 0x01fb, 0x020e, 0x0212, // Entry 40 - 7F - 0x0221, 0x0221, 0x0229, 0x0231, 0x023a, 0x023f, 0x023f, 0x0247, - 0x024e, 0x024e, 0x024e, 0x0253, 0x025b, 0x0269, 0x0278, 0x027e, - 0x0284, 0x0289, 0x0291, 0x0299, 0x0299, 0x0299, 0x029e, 0x02a3, - 0x02a3, 0x02a9, 0x02a9, 0x02a9, 0x02bc, 0x02bc, 0x02bc, 0x02c6, - 0x02d0, 0x02d0, 0x02d6, 0x02da, 0x02da, 0x02e2, 0x02e2, 0x02e9, - 0x02e9, 0x02e9, 0x02e9, 0x02e9, 0x02ef, 0x02ef, 0x02f4, 0x02fb, - 0x0301, 0x0306, 0x0306, 0x030e, 0x030e, 0x030e, 0x031e, 0x0326, - 0x0326, 0x0326, 0x0326, 0x032d, 0x0339, 0x0339, 0x033f, 0x034a, + 0x021a, 0x0222, 0x0222, 0x022a, 0x0232, 0x023b, 0x0240, 0x0240, + 0x0248, 0x024f, 0x024f, 0x024f, 0x0254, 0x025c, 0x026a, 0x0279, + 0x027f, 0x0285, 0x028a, 0x0292, 0x029a, 0x029a, 0x029a, 0x029f, + 0x02a4, 0x02a4, 0x02aa, 0x02aa, 0x02aa, 0x02bd, 0x02bd, 0x02bd, + 0x02c7, 0x02d1, 0x02d1, 0x02d7, 0x02db, 0x02db, 0x02e3, 0x02e3, + 0x02ea, 0x02ea, 0x02ea, 0x02ea, 0x02ea, 0x02f0, 0x02f0, 0x02f5, + 0x02fc, 0x0302, 0x0307, 0x0307, 0x030f, 0x030f, 0x030f, 0x031f, + 0x0327, 0x0327, 0x0327, 0x0327, 0x032e, 0x033a, 0x033a, 0x0340, // Entry 80 - BF - 0x0351, 0x0351, 0x0357, 0x0357, 0x0361, 0x036c, 0x0374, 0x0374, - 0x0374, 0x0374, 0x037d, 0x037d, 0x0386, 0x0392, 0x0399, 0x03ab, - 0x03bd, 0x03cd, 0x03d6, 0x03d6, 0x03dc, 0x03e9, 0x03ee, 0x03ee, - 0x03ee, 0x03f4, 0x03fb, 0x0403, 0x0409, 0x040f, 0x0419, 0x0421, - 0x0421, 0x042b, 0x042e, 0x043e, 0x043e, 0x043e, 0x044b, 0x0464, - 0x0466, 0x046e, 0x0483, 0x0489, 0x0492, 0x049c, 0x04a2, 0x04b6, -} // Size: 376 bytes - -const es419ScriptStr string = "katakana o hiraganalaolatín" - -var es419ScriptIdx = []uint16{ // 80 elements + 0x034b, 0x0352, 0x0352, 0x0358, 0x0358, 0x0362, 0x036d, 0x0375, + 0x0375, 0x0375, 0x0375, 0x037e, 0x037e, 0x037e, 0x0387, 0x0393, + 0x039a, 0x03ac, 0x03be, 0x03ce, 0x03d7, 0x03d7, 0x03dd, 0x03ea, + 0x03ef, 0x03ef, 0x03ef, 0x03f5, 0x03fc, 0x0404, 0x040a, 0x0410, + 0x041a, 0x0422, 0x0422, 0x042c, 0x042f, 0x043f, 0x043f, 0x043f, + 0x044c, 0x0465, 0x0467, 0x0467, 0x046f, 0x0484, 0x048a, 0x0493, + 0x049d, 0x04a3, 0x04b7, +} // Size: 382 bytes + +const es419ScriptStr string = "" + // Size: 53 bytes + "han con bopomofokatakana o hiraganalaolatínmalayalam" + +var es419ScriptIdx = []uint16{ // 98 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -29445,63 +31286,68 @@ var es419ScriptIdx = []uint16{ // 80 elements 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, // Entry 40 - 7F - 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, - 0x0013, 0x0013, 0x0013, 0x0013, 0x0016, 0x0016, 0x0016, 0x001c, -} // Size: 184 bytes - -const etScriptStr string = "" + // Size: 1555 bytes + 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, + 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0026, 0x0026, 0x0026, + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + 0x002c, 0x0035, +} // Size: 220 bytes + +const etScriptStr string = "" + // Size: 1611 bytes "afakaalbaaniahomiaraabiavanaarameaarmeeniaavestabalibamumibassabatakiben" + "galiBlissi sümbolidbopomofobraahmipunktkiribugibuhiditšaakmaKanada põlis" + "rahvaste ühtlustatud silpkirikaariatšaamitšerokiiCirthikoptiKüprose silp" + "kirikirillitsakürilliline kirikuslaavidevanaagarideseretiDuployé kiirkir" + "iegiptuse demootilineegiptuse hieraatilineegiptuse hieroglüüfkiriElbasan" + - "ietioopiahutsurigruusiaglagoolitsagootigranthakreekagudžaratigurmukhihan" + - "bikoreahanihanunoolihtsustatud hanitraditsiooniline haniHatraheebreahira" + - "ganaAnatoolia hieroglüüfkiriphahau-hmongi kirijaapani silpkirjadvanaunga" + - "riIndusevanaitalijamojaavajaapanitšurtšenikaja-liikatakanakharoshthikhme" + - "erihodžkikannadakorea segakirikpellekaithitai-thamilaoladina fraktuurkir" + - "iladina gaeliladinaleptšalimbulineaarkiri Alineaarkiri Blisulomalüükialü" + - "üdiamahaadžanimandeamanimaaja hieroglüüfkirimendemeroe kursiivkirimeroe" + - "malajalamimodimongoliMoonimruumeiteiMultanibirmaPõhja-AraabiaNabateanasi" + - "nkoonüšuogamsantaliOrhonioriaosmaniPalmyravanapermiphakpapahlavi raidkir" + - "ipahlavi psalmikiripahlavi raamatukirifoiniikiaPollardi miaopartia raidk" + - "iriredžangirongorongoruunikiriSamaariasaratiLõuna-Araabiasauraštraviipek" + - "iriShaw’ kirišaaradasiddhamihudavadisingalisorasundasilotisüüriasüüria e" + - "strangeloläänesüüriaidasüüriatagbanvataakritai-lööuus tai-lõõtamilitangu" + - "uditai-vietiteluguTengwaritifinagitagalogitaanataitiibetitirhutaugaritiv" + - "ainähtava kõnehoovoleaivanapärsiasumeri-akadi kiilkirijiipäritudmatemaat" + - "iline tähistusemojisümbolidkirjakeeletaüldinemääramata kiri" - -var etScriptIdx = []uint16{ // 176 elements + "ietioopiahutsurigruusiaglagoolitsaMasarami gondigootigranthakreekagudžar" + + "atigurmukhihanbikoreahanihanunoolihtsustatud hanitraditsiooniline haniHa" + + "traheebreahiraganaAnatoolia hieroglüüfkiriphahau-hmongi kirijaapani silp" + + "kirjadvanaungariIndusevanaitalijamojaavajaapanitšurtšenikaja-liikatakana" + + "kharoshthikhmeerihodžkikannadakorea segakirikpellekaithitai-thamilaoladi" + + "na fraktuurkiriladina gaeliladinaleptšalimbulineaarkiri Alineaarkiri Bli" + + "sulomalüükialüüdiamahaadžanimandeamanimaaja hieroglüüfkirimendemeroe kur" + + "siivkirimeroemalajalamimodimongoliMoonimruumeiteiMultanibirmaPõhja-Araab" + + "iaNabateanevarinasinkoonüšuogamsantaliOrhonioriaoseidžiosmaniPalmyravana" + + "permiphakpapahlavi raidkiripahlavi psalmikiripahlavi raamatukirifoiniiki" + + "aPollardi miaopartia raidkiriredžangirongorongoruunikiriSamaariasaratiLõ" + + "una-AraabiasauraštraviipekiriShaw’ kirišaaradasiddhamihudavadisingalisor" + + "asojombosundasilotisüüriasüüria estrangeloläänesüüriaidasüüriatagbanvata" + + "akritai-lööuus tai-lõõtamilitanguuditai-vietiteluguTengwaritifinagitagal" + + "ogitaanataitiibetitirhutaugaritivainähtava kõnehoovoleaivanapärsiasumeri" + + "-akadi kiilkirijiiDzanabadzari ruutkiripäritudmatemaatiline tähistusemoj" + + "isümbolidkirjakeeletaüldinemääramata kiri" + +var etScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0005, 0x000c, 0x0011, 0x0018, 0x0022, 0x002a, 0x0030, 0x0034, 0x003a, 0x003f, 0x0045, 0x004c, 0x004c, 0x005c, 0x0064, 0x006b, 0x0074, 0x0078, 0x007e, 0x0086, 0x00b1, 0x00b7, 0x00be, 0x00c7, 0x00cd, 0x00d2, 0x00e3, 0x00ed, 0x0106, 0x0111, 0x0119, 0x012a, 0x013e, 0x0153, 0x016c, 0x0174, 0x017c, 0x0183, - 0x018a, 0x0195, 0x019a, 0x01a1, 0x01a7, 0x01b1, 0x01b9, 0x01be, - 0x01c3, 0x01c7, 0x01ce, 0x01df, 0x01f4, 0x01f9, 0x0200, 0x0208, - 0x0222, 0x0234, 0x0246, 0x0250, 0x0256, 0x025f, 0x0263, 0x0268, + 0x018a, 0x0195, 0x01a3, 0x01a8, 0x01af, 0x01b5, 0x01bf, 0x01c7, + 0x01cc, 0x01d1, 0x01d5, 0x01dc, 0x01ed, 0x0202, 0x0207, 0x020e, + 0x0216, 0x0230, 0x0242, 0x0254, 0x025e, 0x0264, 0x026d, 0x0271, // Entry 40 - 7F - 0x026f, 0x027a, 0x0282, 0x028a, 0x0294, 0x029b, 0x02a2, 0x02a9, - 0x02b7, 0x02bd, 0x02c3, 0x02cc, 0x02cf, 0x02e2, 0x02ee, 0x02f4, - 0x02fb, 0x0300, 0x030d, 0x031a, 0x031e, 0x0322, 0x032a, 0x0332, - 0x033d, 0x0343, 0x0347, 0x0347, 0x035d, 0x0362, 0x0373, 0x0378, - 0x0382, 0x0386, 0x038d, 0x0392, 0x0396, 0x039c, 0x03a3, 0x03a8, - 0x03b6, 0x03bd, 0x03bd, 0x03c1, 0x03c5, 0x03cb, 0x03cf, 0x03d6, - 0x03dc, 0x03e0, 0x03e0, 0x03e6, 0x03ed, 0x03ed, 0x03f6, 0x03fc, - 0x040c, 0x041e, 0x0431, 0x043a, 0x0447, 0x0456, 0x045f, 0x0469, + 0x0276, 0x027d, 0x0288, 0x0290, 0x0298, 0x02a2, 0x02a9, 0x02b0, + 0x02b7, 0x02c5, 0x02cb, 0x02d1, 0x02da, 0x02dd, 0x02f0, 0x02fc, + 0x0302, 0x0309, 0x030e, 0x031b, 0x0328, 0x032c, 0x0330, 0x0338, + 0x0340, 0x034b, 0x0351, 0x0355, 0x0355, 0x036b, 0x0370, 0x0381, + 0x0386, 0x0390, 0x0394, 0x039b, 0x03a0, 0x03a4, 0x03aa, 0x03b1, + 0x03b6, 0x03c4, 0x03cb, 0x03d1, 0x03d5, 0x03d9, 0x03df, 0x03e3, + 0x03ea, 0x03f0, 0x03f4, 0x03fc, 0x0402, 0x0409, 0x0409, 0x0412, + 0x0418, 0x0428, 0x043a, 0x044d, 0x0456, 0x0463, 0x0472, 0x047b, // Entry 80 - BF - 0x0472, 0x047a, 0x0480, 0x048e, 0x0498, 0x04a1, 0x04ad, 0x04b5, - 0x04bd, 0x04c5, 0x04cc, 0x04d0, 0x04d5, 0x04db, 0x04e3, 0x04f6, - 0x0505, 0x0510, 0x0518, 0x051e, 0x0527, 0x0534, 0x053a, 0x0542, - 0x054b, 0x0551, 0x0559, 0x0561, 0x0569, 0x056e, 0x0571, 0x0578, - 0x057f, 0x0586, 0x0589, 0x0597, 0x059a, 0x05a0, 0x05ab, 0x05c0, - 0x05c3, 0x05cb, 0x05e2, 0x05e7, 0x05f0, 0x05fc, 0x0603, 0x0613, -} // Size: 376 bytes + 0x0485, 0x048e, 0x0496, 0x049c, 0x04aa, 0x04b4, 0x04bd, 0x04c9, + 0x04d1, 0x04d9, 0x04e1, 0x04e8, 0x04ec, 0x04f3, 0x04f8, 0x04fe, + 0x0506, 0x0519, 0x0528, 0x0533, 0x053b, 0x0541, 0x054a, 0x0557, + 0x055d, 0x0565, 0x056e, 0x0574, 0x057c, 0x0584, 0x058c, 0x0591, + 0x0594, 0x059b, 0x05a2, 0x05a9, 0x05ac, 0x05ba, 0x05bd, 0x05c3, + 0x05ce, 0x05e3, 0x05e6, 0x05fb, 0x0603, 0x061a, 0x061f, 0x0628, + 0x0634, 0x063b, 0x064b, +} // Size: 382 bytes const faScriptStr string = "" + // Size: 1877 bytes "آلبانیایی قفقازیعربیآرامی هخامنشیارمنیاوستاییبالیاییباتاکیبنگالینمادهای " + @@ -29520,35 +31366,36 @@ const faScriptStr string = "" + // Size: 1877 bytes "ی باستانمیخی سومری‐اکدیییموروثیعلائم ریاضیاموجیعلائمنانوشتهمشترکخط نامش" + "خص" -var faScriptIdx = []uint16{ // 176 elements +var faScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x001f, 0x001f, 0x0027, 0x0040, 0x004a, 0x0058, 0x0066, 0x0066, 0x0066, 0x0072, 0x007e, 0x007e, 0x0095, 0x00a5, 0x00b1, 0x00b9, 0x00c7, 0x00d1, 0x00df, 0x00df, 0x00e7, 0x00ed, 0x00fd, 0x0103, 0x010b, 0x0115, 0x0121, 0x0121, 0x012f, 0x013b, 0x013b, 0x013b, 0x014e, 0x0167, 0x0167, 0x0179, 0x0190, - 0x0198, 0x01aa, 0x01b2, 0x01b2, 0x01be, 0x01ca, 0x01d8, 0x01e2, - 0x01ee, 0x01f4, 0x0204, 0x021c, 0x022b, 0x022b, 0x0233, 0x0243, - 0x0262, 0x0262, 0x0282, 0x0299, 0x02a5, 0x02be, 0x02c6, 0x02d5, + 0x0198, 0x01aa, 0x01aa, 0x01b2, 0x01b2, 0x01be, 0x01ca, 0x01d8, + 0x01e2, 0x01ee, 0x01f4, 0x0204, 0x021c, 0x022b, 0x022b, 0x0233, + 0x0243, 0x0262, 0x0262, 0x0282, 0x0299, 0x02a5, 0x02be, 0x02c6, // Entry 40 - 7F - 0x02df, 0x02df, 0x02eb, 0x02fb, 0x02fb, 0x0303, 0x030f, 0x031b, - 0x0328, 0x0328, 0x032e, 0x033a, 0x0346, 0x0361, 0x0376, 0x0382, - 0x0382, 0x0390, 0x039d, 0x03a6, 0x03a6, 0x03a6, 0x03b2, 0x03be, - 0x03be, 0x03cd, 0x03d7, 0x03d7, 0x03f4, 0x03f4, 0x03f4, 0x0402, - 0x0416, 0x0416, 0x0420, 0x0428, 0x0428, 0x0439, 0x0439, 0x0447, - 0x0467, 0x046f, 0x046f, 0x046f, 0x046f, 0x046f, 0x047b, 0x047b, - 0x0489, 0x049a, 0x049a, 0x049a, 0x04ac, 0x04ac, 0x04c1, 0x04c1, - 0x04dd, 0x04f2, 0x0507, 0x0511, 0x0511, 0x052d, 0x0537, 0x0537, + 0x02d5, 0x02df, 0x02df, 0x02eb, 0x02fb, 0x02fb, 0x0303, 0x030f, + 0x031b, 0x0328, 0x0328, 0x032e, 0x033a, 0x0346, 0x0361, 0x0376, + 0x0382, 0x0382, 0x0390, 0x039d, 0x03a6, 0x03a6, 0x03a6, 0x03b2, + 0x03be, 0x03be, 0x03cd, 0x03d7, 0x03d7, 0x03f4, 0x03f4, 0x03f4, + 0x0402, 0x0416, 0x0416, 0x0420, 0x0428, 0x0428, 0x0439, 0x0439, + 0x0447, 0x0467, 0x046f, 0x046f, 0x046f, 0x046f, 0x046f, 0x047b, + 0x047b, 0x0489, 0x049a, 0x049a, 0x049a, 0x04ac, 0x04ac, 0x04c1, + 0x04c1, 0x04dd, 0x04f2, 0x0507, 0x0511, 0x0511, 0x052d, 0x0537, // Entry 80 - BF - 0x053f, 0x0549, 0x0555, 0x0575, 0x0589, 0x0589, 0x0591, 0x0591, - 0x0591, 0x0591, 0x059f, 0x059f, 0x059f, 0x05b6, 0x05c2, 0x05df, - 0x05f4, 0x0609, 0x0619, 0x0619, 0x0619, 0x0619, 0x0625, 0x0625, - 0x0625, 0x0633, 0x063f, 0x064f, 0x065f, 0x066e, 0x067c, 0x0684, - 0x0684, 0x0694, 0x069e, 0x06be, 0x06be, 0x06be, 0x06d5, 0x06f3, - 0x06f7, 0x0703, 0x0718, 0x0722, 0x072c, 0x073a, 0x0744, 0x0755, -} // Size: 376 bytes - -const fiScriptStr string = "" + // Size: 2515 bytes + 0x0537, 0x053f, 0x0549, 0x0555, 0x0575, 0x0589, 0x0589, 0x0591, + 0x0591, 0x0591, 0x0591, 0x059f, 0x059f, 0x059f, 0x059f, 0x05b6, + 0x05c2, 0x05df, 0x05f4, 0x0609, 0x0619, 0x0619, 0x0619, 0x0619, + 0x0625, 0x0625, 0x0625, 0x0633, 0x063f, 0x064f, 0x065f, 0x066e, + 0x067c, 0x0684, 0x0684, 0x0694, 0x069e, 0x06be, 0x06be, 0x06be, + 0x06d5, 0x06f3, 0x06f7, 0x06f7, 0x0703, 0x0718, 0x0722, 0x072c, + 0x073a, 0x0744, 0x0755, +} // Size: 382 bytes + +const fiScriptStr string = "" + // Size: 2551 bytes "fulanin adlam-aakkostoafakakaukasianalbanialainenahomarabialainenvaltaku" + "nnanaramealainenarmenialainenavestalainenbalilainenbamumbassabatakilaine" + "nbengalilainensanskritin bhaiksuki-aakkostobliss-symbolitbopomofobrahmib" + @@ -29557,61 +31404,62 @@ const fiScriptStr string = "" + // Size: 2515 bytes "eelainencirthkoptilainenmuinaiskyproslainenkyrillinenkyrillinen muinaisk" + "irkkoslaavimuunnelmadevanagarideseretDuployén pikakirjoitusegyptiläinen " + "demoottinenegyptiläinen hieraattinenegyptiläiset hieroglyfitelbasanilain" + - "enetiopialainenmuinaisgeorgialainengeorgialainenglagoliittinengoottilain" + - "engranthakreikkalainengudžaratilainengurmukhikiinan han ja bopomofohangu" + - "lkiinalainen hanhanunoolainenkiinalainen yksinkertaistettu hankiinalaine" + - "n perinteinen hanhatralainenheprealainenhiraganaanatolialaiset hieroglyf" + - "itpahawh hmonghiragana tai katakanamuinaisunkarilaineninduslainenmuinais" + - "italialainenkorean hangulin jamo-elementitjaavalainenjapanilainendžurtše" + - "nkayah likatakanakharosthikhmeriläinenkhojkikannadalainenkorealainenkpel" + - "lekaithilannalaolainenlatinalainen fraktuuramuunnelmalatinalainen gaelim" + - "uunnelmalatinalainenlepchalainenlimbulainenlineaari-Alineaari-BFraserin " + - "aakkosetlomalyykialainenlyydialainenmahajanilainenmandealainenmanikealai" + - "nentiibetiläinen marchan-kirjoitusmaya-hieroglyfitmendemeroiittinen kurs" + - "iivikirjoitusmeroiittinenmalajalamilainenmodi-aakkosetmongolilainenmoon-" + - "kohokirjoitusmromeiteimultanilainenburmalainenmuinaispohjoisarabialainen" + - "nabatealainennewarin newa-tavukirjoitusnaxi geban’konüshuogamol chikiork" + - "honorijalainenosagen aakkostoosmanjalainenpalmyralainenzotuallaimuinaisp" + - "ermiläinenphags-papiirtokirjoituspahlavilainenpsalttaripahlavilainenkirj" + - "apahlavilainenfoinikialainenPollardin foneettinenpiirtokirjoitusparthial" + - "ainenrejangrongorongoriimukirjoitussamarianaramealainensaratimuinaisetel" + - "äarabialainensaurashtraSignWritingshaw’lainenšaradasiddham-tavukirjoitu" + - "skhudabadisinhalilainensorang sompengsundalainensyloti nagrisyyrialainen" + - "syyrialainen estrangelo-muunnelmasyyrialainen läntinen muunnelmasyyriala" + - "inen itäinen muunnelmatagbanwalainentakritailelainenuusi tailuelainentam" + - "ililainentanguttai viettelugulainentengwartifinaghtagalogilainenthaanath" + - "ailainentiibetiläinentirhutaugaritilainenvailainennäkyvä puhevarang kshi" + - "tiwoleaimuinaispersialainensumerilais-akkadilainen nuolenpääkirjoitusyil" + - "äinenperittymatemaattinenemoji-symbolitsymbolitkirjoittamatonmäärittämä" + - "töntuntematon kirjoitusjärjestelmä" - -var fiScriptIdx = []uint16{ // 176 elements + "enetiopialainenmuinaisgeorgialainengeorgialainenglagoliittinenmasaram-go" + + "ndigoottilainengranthakreikkalainengudžaratilainengurmukhikiinan han ja " + + "bopomofohangulkiinalainen hanhanunoolainenyksinkertaistettu hanperintein" + + "en hanhatralainenheprealainenhiraganaanatolialaiset hieroglyfitpahawh hm" + + "ongjapanin tavumerkistötmuinaisunkarilaineninduslainenmuinaisitalialaine" + + "nkorean hangulin jamo-elementitjaavalainenjapanilainendžurtšenkayah lika" + + "takanakharosthikhmeriläinenkhojkikannadalainenkorealainenkpellekaithilan" + + "nalaolainenlatinalainen fraktuuramuunnelmalatinalainen gaelimuunnelmalat" + + "inalainenlepchalainenlimbulainenlineaari-Alineaari-BFraserin aakkosetlom" + + "alyykialainenlyydialainenmahajanilainenmandealainenmanikealainentiibetil" + + "äinen marchan-kirjoitusmaya-hieroglyfitmendemeroiittinen kursiivikirjoi" + + "tusmeroiittinenmalajalamilainenmodi-aakkosetmongolilainenmoon-kohokirjoi" + + "tusmromeiteimultanilainenburmalainenmuinaispohjoisarabialainennabatealai" + + "nennewarin newa-tavukirjoitusnaxi geban’konüshuogamol chikiorkhonorijala" + + "inenosagen aakkostoosmanjalainenpalmyralainenzotuallaimuinaispermiläinen" + + "phags-papiirtokirjoituspahlavilainenpsalttaripahlavilainenkirjapahlavila" + + "inenfoinikialainenPollardin foneettinenpiirtokirjoitusparthialainenrejan" + + "grongorongoriimukirjoitussamarianaramealainensaratimuinaiseteläarabialai" + + "nensaurashtraSignWritingshaw’lainenšaradasiddham-tavukirjoituskhudabadis" + + "inhalilainensorang sompengsoyombo-kirjaimistosundalainensyloti nagrisyyr" + + "ialainensyyrialainen estrangelo-muunnelmasyyrialainen läntinen muunnelma" + + "syyrialainen itäinen muunnelmatagbanwalainentakritailelainenuusi tailuel" + + "ainentamililainentanguttai viettelugulainentengwartifinaghtagalogilainen" + + "thaanathailainentiibetiläinentirhutaugaritilainenvailainennäkyvä puhevar" + + "ang kshitiwoleaimuinaispersialainensumerilais-akkadilainen nuolenpääkirj" + + "oitusyiläinenzanabazar-neliökirjaimistoperittymatemaattinenemoji-symboli" + + "tsymbolitkirjoittamatonmäärittämätöntuntematon kirjoitusjärjestelmä" + +var fiScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0016, 0x001b, 0x0031, 0x0035, 0x0041, 0x0058, 0x0065, 0x0071, 0x007b, 0x0080, 0x0085, 0x0091, 0x009e, 0x00bb, 0x00c9, 0x00d1, 0x00d7, 0x00ed, 0x00f7, 0x0103, 0x010f, 0x014d, 0x0159, 0x0165, 0x0173, 0x0178, 0x0183, 0x0196, 0x01a0, 0x01c7, 0x01d1, 0x01d8, 0x01ef, 0x0208, 0x0222, 0x023b, 0x0249, 0x0256, 0x026a, - 0x0277, 0x0285, 0x0291, 0x0298, 0x02a5, 0x02b5, 0x02bd, 0x02d3, - 0x02d9, 0x02e8, 0x02f5, 0x0316, 0x0331, 0x033c, 0x0348, 0x0350, - 0x036a, 0x0376, 0x038b, 0x039e, 0x03a9, 0x03bc, 0x03da, 0x03e5, + 0x0277, 0x0285, 0x0292, 0x029e, 0x02a5, 0x02b2, 0x02c2, 0x02ca, + 0x02e0, 0x02e6, 0x02f5, 0x0302, 0x0317, 0x0326, 0x0331, 0x033d, + 0x0345, 0x035f, 0x036b, 0x0381, 0x0394, 0x039f, 0x03b2, 0x03d0, // Entry 40 - 7F - 0x03f1, 0x03fb, 0x0403, 0x040b, 0x0414, 0x0421, 0x0427, 0x0434, - 0x043f, 0x0445, 0x044b, 0x0450, 0x0459, 0x0478, 0x0493, 0x049f, - 0x04ab, 0x04b6, 0x04c0, 0x04ca, 0x04db, 0x04df, 0x04eb, 0x04f7, - 0x0505, 0x0511, 0x051e, 0x053e, 0x054e, 0x0553, 0x0571, 0x057d, - 0x058d, 0x059a, 0x05a7, 0x05b9, 0x05bc, 0x05c2, 0x05cf, 0x05da, - 0x05f4, 0x0601, 0x061b, 0x0624, 0x062a, 0x0630, 0x0634, 0x063c, - 0x0642, 0x064d, 0x065c, 0x0669, 0x0676, 0x067f, 0x0692, 0x069a, - 0x06b6, 0x06cc, 0x06de, 0x06ec, 0x0701, 0x071d, 0x0723, 0x072d, + 0x03db, 0x03e7, 0x03f1, 0x03f9, 0x0401, 0x040a, 0x0417, 0x041d, + 0x042a, 0x0435, 0x043b, 0x0441, 0x0446, 0x044f, 0x046e, 0x0489, + 0x0495, 0x04a1, 0x04ac, 0x04b6, 0x04c0, 0x04d1, 0x04d5, 0x04e1, + 0x04ed, 0x04fb, 0x0507, 0x0514, 0x0534, 0x0544, 0x0549, 0x0567, + 0x0573, 0x0583, 0x0590, 0x059d, 0x05af, 0x05b2, 0x05b8, 0x05c5, + 0x05d0, 0x05ea, 0x05f7, 0x0611, 0x061a, 0x0620, 0x0626, 0x062a, + 0x0632, 0x0638, 0x0643, 0x0652, 0x065f, 0x066c, 0x0675, 0x0688, + 0x0690, 0x06ac, 0x06c2, 0x06d4, 0x06e2, 0x06f7, 0x0713, 0x0719, // Entry 80 - BF - 0x073b, 0x074f, 0x0755, 0x076e, 0x0778, 0x0783, 0x0790, 0x0797, - 0x07ac, 0x07b5, 0x07c2, 0x07d0, 0x07db, 0x07e7, 0x07f3, 0x0814, - 0x0834, 0x0853, 0x0861, 0x0866, 0x0871, 0x0882, 0x088e, 0x0894, - 0x089c, 0x08a8, 0x08af, 0x08b7, 0x08c5, 0x08cb, 0x08d5, 0x08e3, - 0x08ea, 0x08f7, 0x0900, 0x090d, 0x091a, 0x0920, 0x0933, 0x095f, - 0x0968, 0x096f, 0x097c, 0x098a, 0x0992, 0x09a0, 0x09b2, 0x09d3, -} // Size: 376 bytes + 0x0723, 0x0731, 0x0745, 0x074b, 0x0764, 0x076e, 0x0779, 0x0786, + 0x078d, 0x07a2, 0x07ab, 0x07b8, 0x07c6, 0x07d9, 0x07e4, 0x07f0, + 0x07fc, 0x081d, 0x083d, 0x085c, 0x086a, 0x086f, 0x087a, 0x088b, + 0x0897, 0x089d, 0x08a5, 0x08b1, 0x08b8, 0x08c0, 0x08ce, 0x08d4, + 0x08de, 0x08ec, 0x08f3, 0x0900, 0x0909, 0x0916, 0x0923, 0x0929, + 0x093c, 0x0968, 0x0971, 0x098c, 0x0993, 0x09a0, 0x09ae, 0x09b6, + 0x09c4, 0x09d6, 0x09f7, +} // Size: 382 bytes const filScriptStr string = "" + // Size: 363 bytes "ArabicArmenianBanglaBopomofoBrailleCyrillicDevanagariEthiopicGeorgianGre" + @@ -29621,115 +31469,117 @@ const filScriptStr string = "" + // Size: 363 bytes "tical NotationEmojiMga SimboloHindi NakasulatKaraniwanHindi Kilalang Scr" + "ipt" -var filScriptIdx = []uint16{ // 176 elements +var filScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x0014, 0x0014, 0x0014, 0x001c, 0x001c, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x002b, 0x002b, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x003d, 0x003d, - 0x0045, 0x0045, 0x0045, 0x0045, 0x004a, 0x0052, 0x005a, 0x005e, - 0x0064, 0x0067, 0x0067, 0x0077, 0x0089, 0x0089, 0x008f, 0x0097, - 0x0097, 0x0097, 0x00ab, 0x00ab, 0x00ab, 0x00ab, 0x00af, 0x00af, + 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x004a, 0x0052, 0x005a, + 0x005e, 0x0064, 0x0067, 0x0067, 0x0077, 0x0089, 0x0089, 0x008f, + 0x0097, 0x0097, 0x0097, 0x00ab, 0x00ab, 0x00ab, 0x00ab, 0x00af, // Entry 40 - 7F - 0x00b7, 0x00b7, 0x00b7, 0x00bf, 0x00bf, 0x00c4, 0x00c4, 0x00cb, - 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d4, 0x00d4, 0x00d4, 0x00d9, + 0x00af, 0x00b7, 0x00b7, 0x00b7, 0x00bf, 0x00bf, 0x00c4, 0x00c4, + 0x00cb, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d4, 0x00d4, 0x00d4, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, - 0x00e2, 0x00e2, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00f2, + 0x00d9, 0x00e2, 0x00e2, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f2, - 0x00f2, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, + 0x00f2, 0x00f2, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, // Entry 80 - BF 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, - 0x00f6, 0x00f6, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, - 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x0102, 0x0102, - 0x0102, 0x0108, 0x0108, 0x0108, 0x0108, 0x010e, 0x0112, 0x0119, - 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, - 0x0119, 0x0119, 0x012e, 0x0133, 0x013e, 0x014d, 0x0156, 0x016b, -} // Size: 376 bytes + 0x00f6, 0x00f6, 0x00f6, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, + 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, + 0x0102, 0x0102, 0x0102, 0x0108, 0x0108, 0x0108, 0x0108, 0x010e, + 0x0112, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x012e, 0x0133, 0x013e, + 0x014d, 0x0156, 0x016b, +} // Size: 382 bytes -const frScriptStr string = "" + // Size: 1457 bytes +const frScriptStr string = "" + // Size: 1471 bytes "arabearaméen impérialarménienavestiquebalinaisbatakbengalisymboles Bliss" + "bopomofobrâhmîbraillebouguisbouhidechakmasyllabaire autochtone canadien " + "unifiécarienchamcherokeecirthcoptesyllabaire chypriotecyrilliquecyrilliq" + "ue (variante slavonne)dévanâgarîdéséretdémotique égyptienhiératique égyp" + "tienhiéroglyphes égyptienséthiopiquegéorgien khoutsourigéorgienglagoliti" + - "quegotiquegrecgoudjarâtîgourmoukhîHanbhangûlsinogrammeshanounóosinogramm" + - "es simplifiéssinogrammes traditionnelshébreuhiraganapahawh hmongkatakana" + - " ou hiraganaancien hongroisindusancien italiqueJamojavanaisjaponaiskayah" + - " likatakanakharochthîkhmerkannaracoréenkaithîlannalaolatin (variante bri" + - "sée)latin (variante gaélique)latinlepchalimboulinéaire Alinéaire Blycien" + - "lydienmandéenmanichéenhiéroglyphes mayasméroïtiquemalayalammongolmoonmei" + - "tei mayekbirmann’koogamol tchikiorkhonoriyaosmanaisancien permienphags p" + - "apehlevi des inscriptionspehlevi des psautierspehlevi des livresphénicie" + - "nphonétique de Pollardparthe des inscriptionsrejangrongorongoruniquesama" + - "ritainsaratisaurashtraécriture des signesshaviencinghalaissundanaissylot" + - "î nâgrîsyriaquesyriaque estranghélosyriaque occidentalsyriaque oriental" + - "tagbanouataï-lenouveau taï-luetamoultaï viêttélougoutengwartifinaghtagal" + - "thânathaïtibétainougaritiquevaïparole visiblecunéiforme persépolitaincun" + - "éiforme suméro-akkadienyihériténotation mathématiqueZsyesymbolesnon écr" + - "itcommunécriture inconnue" - -var frScriptIdx = []uint16{ // 176 elements + "quegotiquegrecgoudjarâtîgourmoukhîhan avec bopomofohangûlsinogrammeshano" + + "unóosinogrammes simplifiéssinogrammes traditionnelshébreuhiraganapahawh " + + "hmongkatakana ou hiraganaancien hongroisindusancien italiquejamojavanais" + + "japonaiskayah likatakanakharochthîkhmerkannaracoréenkaithîlannalaolatin " + + "(variante brisée)latin (variante gaélique)latinlepchalimboulinéaire Alin" + + "éaire Blycienlydienmandéenmanichéenhiéroglyphes mayasméroïtiquemalayala" + + "mmongolmoonmeitei mayekbirmann’koogamol tchikiorkhonoriyaosmanaisancien " + + "permienphags papehlevi des inscriptionspehlevi des psautierspehlevi des " + + "livresphénicienphonétique de Pollardparthe des inscriptionsrejangrongoro" + + "ngoruniquesamaritainsaratisaurashtraécriture des signesshaviencinghalais" + + "sundanaissylotî nâgrîsyriaquesyriaque estranghélosyriaque occidentalsyri" + + "aque orientaltagbanouataï-lenouveau taï-luetamoultaï viêttélougoutengwar" + + "tifinaghtagalthânathaïtibétainougaritiquevaïparole visiblecunéiforme per" + + "sépolitaincunéiforme suméro-akkadienyihériténotation mathématiqueemojisy" + + "mbolesnon écritcommunécriture inconnue" + +var frScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0005, 0x0017, 0x0020, 0x0029, 0x0031, 0x0031, 0x0031, 0x0036, 0x003d, 0x003d, 0x004b, 0x0053, 0x005b, 0x0062, 0x0069, 0x0070, 0x0076, 0x009c, 0x00a2, 0x00a6, 0x00ae, 0x00b3, 0x00b8, 0x00cc, 0x00d6, 0x00f4, 0x0101, 0x010a, 0x010a, 0x011e, 0x0133, 0x014b, 0x014b, 0x0156, 0x016a, - 0x0173, 0x017f, 0x0186, 0x0186, 0x018a, 0x0196, 0x01a1, 0x01a5, - 0x01ac, 0x01b7, 0x01c0, 0x01d7, 0x01f0, 0x01f0, 0x01f7, 0x01ff, - 0x01ff, 0x020b, 0x021f, 0x022e, 0x0233, 0x0242, 0x0246, 0x024e, + 0x0173, 0x017f, 0x017f, 0x0186, 0x0186, 0x018a, 0x0196, 0x01a1, + 0x01b2, 0x01b9, 0x01c4, 0x01cd, 0x01e4, 0x01fd, 0x01fd, 0x0204, + 0x020c, 0x020c, 0x0218, 0x022c, 0x023b, 0x0240, 0x024f, 0x0253, // Entry 40 - 7F - 0x0256, 0x0256, 0x025e, 0x0266, 0x0271, 0x0276, 0x0276, 0x027d, - 0x0284, 0x0284, 0x028b, 0x0290, 0x0293, 0x02ab, 0x02c5, 0x02ca, - 0x02d0, 0x02d6, 0x02e1, 0x02ec, 0x02ec, 0x02ec, 0x02f2, 0x02f8, - 0x02f8, 0x0300, 0x030a, 0x030a, 0x031d, 0x031d, 0x031d, 0x0329, - 0x0332, 0x0332, 0x0338, 0x033c, 0x033c, 0x0348, 0x0348, 0x034e, - 0x034e, 0x034e, 0x034e, 0x034e, 0x0354, 0x0354, 0x0358, 0x0361, - 0x0367, 0x036c, 0x036c, 0x0374, 0x0374, 0x0374, 0x0382, 0x038a, - 0x03a2, 0x03b7, 0x03c9, 0x03d3, 0x03e9, 0x0400, 0x0406, 0x0410, + 0x025b, 0x0263, 0x0263, 0x026b, 0x0273, 0x027e, 0x0283, 0x0283, + 0x028a, 0x0291, 0x0291, 0x0298, 0x029d, 0x02a0, 0x02b8, 0x02d2, + 0x02d7, 0x02dd, 0x02e3, 0x02ee, 0x02f9, 0x02f9, 0x02f9, 0x02ff, + 0x0305, 0x0305, 0x030d, 0x0317, 0x0317, 0x032a, 0x032a, 0x032a, + 0x0336, 0x033f, 0x033f, 0x0345, 0x0349, 0x0349, 0x0355, 0x0355, + 0x035b, 0x035b, 0x035b, 0x035b, 0x035b, 0x0361, 0x0361, 0x0365, + 0x036e, 0x0374, 0x0379, 0x0379, 0x0381, 0x0381, 0x0381, 0x038f, + 0x0397, 0x03af, 0x03c4, 0x03d6, 0x03e0, 0x03f6, 0x040d, 0x0413, // Entry 80 - BF - 0x0417, 0x0421, 0x0427, 0x0427, 0x0431, 0x0445, 0x044c, 0x044c, - 0x044c, 0x044c, 0x0456, 0x0456, 0x045f, 0x046e, 0x0476, 0x048b, - 0x049e, 0x04af, 0x04b8, 0x04b8, 0x04bf, 0x04cf, 0x04d5, 0x04d5, - 0x04df, 0x04e8, 0x04ef, 0x04f7, 0x04fc, 0x0502, 0x0507, 0x0510, - 0x0510, 0x051b, 0x051f, 0x052d, 0x052d, 0x052d, 0x0547, 0x0563, - 0x0565, 0x056d, 0x0583, 0x0587, 0x058f, 0x0599, 0x059f, 0x05b1, -} // Size: 376 bytes - -const frCAScriptStr string = "" + // Size: 118 bytes + 0x041d, 0x0424, 0x042e, 0x0434, 0x0434, 0x043e, 0x0452, 0x0459, + 0x0459, 0x0459, 0x0459, 0x0463, 0x0463, 0x0463, 0x046c, 0x047b, + 0x0483, 0x0498, 0x04ab, 0x04bc, 0x04c5, 0x04c5, 0x04cc, 0x04dc, + 0x04e2, 0x04e2, 0x04ec, 0x04f5, 0x04fc, 0x0504, 0x0509, 0x050f, + 0x0514, 0x051d, 0x051d, 0x0528, 0x052c, 0x053a, 0x053a, 0x053a, + 0x0554, 0x0570, 0x0572, 0x0572, 0x057a, 0x0590, 0x0595, 0x059d, + 0x05a7, 0x05ad, 0x05bf, +} // Size: 382 bytes + +const frCAScriptStr string = "" + // Size: 114 bytes "devanagarigujaratihanbcaractères chinois simplifiéscaractères chinois tr" + - "aditionnelssyllabaires japonaisjamoodiazsye" + "aditionnelssyllabaires japonaisodiazsye" -var frCAScriptIdx = []uint16{ // 172 elements +var frCAScriptIdx = []uint16{ // 175 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, - 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x0012, 0x0012, 0x0016, - 0x0016, 0x0016, 0x0016, 0x0035, 0x0056, 0x0056, 0x0056, 0x0056, - 0x0056, 0x0056, 0x006a, 0x006a, 0x006a, 0x006a, 0x006e, 0x006e, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x0012, 0x0012, + 0x0016, 0x0016, 0x0016, 0x0016, 0x0035, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, // Entry 40 - 7F + 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, + 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, + 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, + 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, + 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, + 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, + 0x006a, 0x006a, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, + // Entry 80 - BF 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, - 0x006e, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, - 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, - // Entry 80 - BF - 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, - 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, - 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, - 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, - 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, - 0x0072, 0x0072, 0x0072, 0x0076, -} // Size: 368 bytes + 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x0072, +} // Size: 374 bytes const guScriptStr string = "" + // Size: 3357 bytes "અરબીઇમ્પિરિયલ આર્મનિકઅર્મેનિયનઅવેસ્તનબાલીનીઝબટાકબંગાળીબ્લિસિમ્બોલ્સબોપોમ" + @@ -29750,33 +31600,34 @@ const guScriptStr string = "" + // Size: 3357 bytes "પીચજુની ફારસીસુમેરો અક્કાદિયન સુનિફોર્મયીવંશાગતગણિતીય સંકેતલિપિઇમોજીપ્" + "રતીકોઅલિખિતસામાન્યઅજ્ઞાત લિપિ" -var guScriptIdx = []uint16{ // 176 elements +var guScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x003d, 0x0058, 0x006d, 0x0082, 0x0082, 0x0082, 0x008e, 0x00a0, 0x00a0, 0x00c7, 0x00df, 0x00f4, 0x0103, 0x0115, 0x0124, 0x0130, 0x0196, 0x01a2, 0x01a2, 0x01b4, 0x01c3, 0x01d8, 0x01f0, 0x0205, 0x0250, 0x0268, 0x027a, 0x027a, 0x02ab, 0x02df, 0x031f, 0x031f, 0x0337, 0x036b, - 0x0389, 0x03aa, 0x03b9, 0x03b9, 0x03c8, 0x03dd, 0x03f5, 0x0404, - 0x0413, 0x041c, 0x042b, 0x044a, 0x046c, 0x046c, 0x047e, 0x0496, - 0x0496, 0x04b2, 0x04e0, 0x0505, 0x0517, 0x0536, 0x0542, 0x0557, + 0x0389, 0x03aa, 0x03aa, 0x03b9, 0x03b9, 0x03c8, 0x03dd, 0x03f5, + 0x0404, 0x0413, 0x041c, 0x042b, 0x044a, 0x046c, 0x046c, 0x047e, + 0x0496, 0x0496, 0x04b2, 0x04e0, 0x0505, 0x0517, 0x0536, 0x0542, // Entry 40 - 7F - 0x0569, 0x0569, 0x057f, 0x0594, 0x05ac, 0x05bb, 0x05bb, 0x05cd, - 0x05df, 0x05df, 0x05eb, 0x05f7, 0x0600, 0x0628, 0x0647, 0x0656, - 0x0665, 0x0677, 0x068d, 0x06a6, 0x06a6, 0x06a6, 0x06b8, 0x06ca, - 0x06ca, 0x06e5, 0x0700, 0x0700, 0x0731, 0x0731, 0x0731, 0x0749, - 0x075b, 0x075b, 0x0776, 0x077f, 0x077f, 0x07a1, 0x07a1, 0x07b9, - 0x07b9, 0x07b9, 0x07b9, 0x07b9, 0x07c9, 0x07c9, 0x07d5, 0x07e8, - 0x07f7, 0x0806, 0x0806, 0x0821, 0x0821, 0x0821, 0x083d, 0x0853, - 0x088d, 0x08ac, 0x08c5, 0x08dd, 0x0908, 0x094b, 0x095d, 0x097b, + 0x0557, 0x0569, 0x0569, 0x057f, 0x0594, 0x05ac, 0x05bb, 0x05bb, + 0x05cd, 0x05df, 0x05df, 0x05eb, 0x05f7, 0x0600, 0x0628, 0x0647, + 0x0656, 0x0665, 0x0677, 0x068d, 0x06a6, 0x06a6, 0x06a6, 0x06b8, + 0x06ca, 0x06ca, 0x06e5, 0x0700, 0x0700, 0x0731, 0x0731, 0x0731, + 0x0749, 0x075b, 0x075b, 0x0776, 0x077f, 0x077f, 0x07a1, 0x07a1, + 0x07b9, 0x07b9, 0x07b9, 0x07b9, 0x07b9, 0x07c9, 0x07c9, 0x07d5, + 0x07e8, 0x07f7, 0x0806, 0x0806, 0x0821, 0x0821, 0x0821, 0x083d, + 0x0853, 0x088d, 0x08ac, 0x08c5, 0x08dd, 0x0908, 0x094b, 0x095d, // Entry 80 - BF - 0x098a, 0x099f, 0x09ae, 0x09ae, 0x09c9, 0x09e5, 0x09fa, 0x09fa, - 0x09fa, 0x09fa, 0x0a0c, 0x0a0c, 0x0a21, 0x0a43, 0x0a58, 0x0a95, - 0x0abd, 0x0ae2, 0x0af7, 0x0af7, 0x0b07, 0x0b24, 0x0b30, 0x0b30, - 0x0b46, 0x0b58, 0x0b70, 0x0b85, 0x0b9a, 0x0ba6, 0x0baf, 0x0bc1, - 0x0bc1, 0x0bdc, 0x0be5, 0x0c07, 0x0c07, 0x0c07, 0x0c23, 0x0c6d, - 0x0c73, 0x0c85, 0x0cb3, 0x0cc2, 0x0cd7, 0x0ce9, 0x0cfe, 0x0d1d, -} // Size: 376 bytes + 0x097b, 0x098a, 0x099f, 0x09ae, 0x09ae, 0x09c9, 0x09e5, 0x09fa, + 0x09fa, 0x09fa, 0x09fa, 0x0a0c, 0x0a0c, 0x0a0c, 0x0a21, 0x0a43, + 0x0a58, 0x0a95, 0x0abd, 0x0ae2, 0x0af7, 0x0af7, 0x0b07, 0x0b24, + 0x0b30, 0x0b30, 0x0b46, 0x0b58, 0x0b70, 0x0b85, 0x0b9a, 0x0ba6, + 0x0baf, 0x0bc1, 0x0bc1, 0x0bdc, 0x0be5, 0x0c07, 0x0c07, 0x0c07, + 0x0c23, 0x0c6d, 0x0c73, 0x0c73, 0x0c85, 0x0cb3, 0x0cc2, 0x0cd7, + 0x0ce9, 0x0cfe, 0x0d1d, +} // Size: 382 bytes const heScriptStr string = "" + // Size: 875 bytes "ערביארמניבאלינזיבנגליבופומופובריילצ׳אםצ׳ירוקיקופטיקפריסאיקיריליקירילי סל" + @@ -29787,33 +31638,34 @@ const heScriptStr string = "" + // Size: 875 bytes "לטלוגוטגלוגתאנהתאיטיבטיאוגריתיפרסי עתיקמורשסימון מתמטיאמוג׳יסמליםלא כתו" + "ברגילכתב שאינו ידוע" -var heScriptIdx = []uint16{ // 176 elements +var heScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0012, 0x0012, 0x0020, 0x0020, 0x0020, 0x0020, 0x002a, 0x002a, 0x002a, 0x003a, 0x003a, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x004c, 0x005a, 0x005a, 0x0064, 0x0072, 0x007e, 0x00b1, 0x00c1, 0x00c1, 0x00c1, 0x00c1, 0x00c1, 0x00d6, 0x00d6, 0x00e2, 0x00e2, - 0x00ee, 0x00ee, 0x00f6, 0x00f6, 0x0100, 0x010e, 0x011c, 0x0124, - 0x0130, 0x0136, 0x0136, 0x0145, 0x0158, 0x0158, 0x0160, 0x016e, - 0x016e, 0x016e, 0x0181, 0x0196, 0x01a2, 0x01b7, 0x01c1, 0x01d1, + 0x00ee, 0x00ee, 0x00ee, 0x00f6, 0x00f6, 0x0100, 0x010e, 0x011c, + 0x0124, 0x0130, 0x0136, 0x0136, 0x0145, 0x0158, 0x0158, 0x0160, + 0x016e, 0x016e, 0x016e, 0x0181, 0x0196, 0x01a2, 0x01b7, 0x01c1, // Entry 40 - 7F - 0x01d9, 0x01d9, 0x01d9, 0x01e5, 0x01e5, 0x01ed, 0x01ed, 0x01f9, - 0x0207, 0x0207, 0x0207, 0x0207, 0x020f, 0x020f, 0x0222, 0x022c, + 0x01d1, 0x01d9, 0x01d9, 0x01d9, 0x01e5, 0x01e5, 0x01ed, 0x01ed, + 0x01f9, 0x0207, 0x0207, 0x0207, 0x0207, 0x020f, 0x020f, 0x0222, 0x022c, 0x022c, 0x022c, 0x022c, 0x022c, 0x022c, 0x022c, 0x022c, - 0x022c, 0x022c, 0x022c, 0x022c, 0x0234, 0x0234, 0x0234, 0x0234, - 0x0242, 0x0242, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x025c, + 0x022c, 0x022c, 0x022c, 0x022c, 0x022c, 0x0234, 0x0234, 0x0234, + 0x0234, 0x0242, 0x0242, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x025c, 0x025c, 0x025c, 0x025c, 0x025c, 0x025c, 0x025c, 0x025c, - 0x025c, 0x0268, 0x0268, 0x0268, 0x0268, 0x0268, 0x0268, 0x0268, - 0x0268, 0x0268, 0x0268, 0x0274, 0x0274, 0x0274, 0x0274, 0x0274, + 0x025c, 0x025c, 0x0268, 0x0268, 0x0268, 0x0268, 0x0268, 0x0268, + 0x0268, 0x0268, 0x0268, 0x0268, 0x0274, 0x0274, 0x0274, 0x0274, // Entry 80 - BF - 0x027c, 0x027c, 0x027c, 0x027c, 0x027c, 0x027c, 0x027c, 0x027c, - 0x027c, 0x027c, 0x0288, 0x0288, 0x0288, 0x0288, 0x0290, 0x0290, - 0x02a3, 0x02b6, 0x02b6, 0x02b6, 0x02b6, 0x02b6, 0x02be, 0x02be, - 0x02be, 0x02c8, 0x02c8, 0x02c8, 0x02d2, 0x02da, 0x02e0, 0x02ea, - 0x02ea, 0x02f8, 0x02f8, 0x02f8, 0x02f8, 0x02f8, 0x0309, 0x0309, - 0x0309, 0x0311, 0x0326, 0x0332, 0x033c, 0x0349, 0x0351, 0x036b, -} // Size: 376 bytes + 0x0274, 0x027c, 0x027c, 0x027c, 0x027c, 0x027c, 0x027c, 0x027c, + 0x027c, 0x027c, 0x027c, 0x0288, 0x0288, 0x0288, 0x0288, 0x0288, + 0x0290, 0x0290, 0x02a3, 0x02b6, 0x02b6, 0x02b6, 0x02b6, 0x02b6, + 0x02be, 0x02be, 0x02be, 0x02c8, 0x02c8, 0x02c8, 0x02d2, 0x02da, + 0x02e0, 0x02ea, 0x02ea, 0x02f8, 0x02f8, 0x02f8, 0x02f8, 0x02f8, + 0x0309, 0x0309, 0x0309, 0x0309, 0x0311, 0x0326, 0x0332, 0x033c, + 0x0349, 0x0351, 0x036b, +} // Size: 382 bytes const hiScriptStr string = "" + // Size: 3366 bytes "अरबीइम्पिरियल आर्मेनिकआर्मेनियाईअवेस्तनबालीबटकीबंगालीब्लिसिम्बॉल्सबोपोमो" + @@ -29834,33 +31686,34 @@ const hiScriptStr string = "" + // Size: 3366 bytes "िबल स्पीचपुरानी फारसीसुमेरो अक्कादियन सुनिफॉर्मयीविरासतगणितीय संकेतनईम" + "ोजीचिह्नअलिखितसामान्यअज्ञात लिपि" -var hiScriptIdx = []uint16{ // 176 elements +var hiScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0040, 0x005e, 0x0073, 0x007f, 0x007f, 0x007f, 0x008b, 0x009d, 0x009d, 0x00c4, 0x00df, 0x00f4, 0x0103, 0x0115, 0x0124, 0x0130, 0x0196, 0x01a2, 0x01ab, 0x01bd, 0x01cc, 0x01e1, 0x01fc, 0x0211, 0x025c, 0x0274, 0x0286, 0x0286, 0x02b7, 0x02eb, 0x032b, 0x032b, 0x0349, 0x0377, - 0x038f, 0x03b0, 0x03bf, 0x03d1, 0x03e3, 0x03f8, 0x040d, 0x0419, - 0x0428, 0x0431, 0x0440, 0x045f, 0x0481, 0x0481, 0x0493, 0x04ab, - 0x04ab, 0x04cd, 0x04fb, 0x0520, 0x0532, 0x0551, 0x055d, 0x0572, + 0x038f, 0x03b0, 0x03b0, 0x03bf, 0x03d1, 0x03e3, 0x03f8, 0x040d, + 0x0419, 0x0428, 0x0431, 0x0440, 0x045f, 0x0481, 0x0481, 0x0493, + 0x04ab, 0x04ab, 0x04cd, 0x04fb, 0x0520, 0x0532, 0x0551, 0x055d, // Entry 40 - 7F - 0x0584, 0x0584, 0x059a, 0x05b2, 0x05c7, 0x05d3, 0x05d3, 0x05e5, - 0x05fa, 0x05fa, 0x0606, 0x0612, 0x061b, 0x064c, 0x066b, 0x067a, - 0x0689, 0x069b, 0x06af, 0x06c8, 0x06c8, 0x06c8, 0x06da, 0x06ec, - 0x06ec, 0x06fb, 0x070d, 0x070d, 0x073e, 0x073e, 0x073e, 0x0756, - 0x0768, 0x0768, 0x0783, 0x078c, 0x078c, 0x07ae, 0x07ae, 0x07c6, - 0x07c6, 0x07c6, 0x07c6, 0x07c6, 0x07d8, 0x07d8, 0x07e1, 0x07f4, - 0x0803, 0x0815, 0x0815, 0x0830, 0x0830, 0x0830, 0x084c, 0x0862, - 0x089c, 0x08c1, 0x08dd, 0x08f5, 0x0920, 0x0960, 0x0972, 0x0996, + 0x0572, 0x0584, 0x0584, 0x059a, 0x05b2, 0x05c7, 0x05d3, 0x05d3, + 0x05e5, 0x05fa, 0x05fa, 0x0606, 0x0612, 0x061b, 0x064c, 0x066b, + 0x067a, 0x0689, 0x069b, 0x06af, 0x06c8, 0x06c8, 0x06c8, 0x06da, + 0x06ec, 0x06ec, 0x06fb, 0x070d, 0x070d, 0x073e, 0x073e, 0x073e, + 0x0756, 0x0768, 0x0768, 0x0783, 0x078c, 0x078c, 0x07ae, 0x07ae, + 0x07c6, 0x07c6, 0x07c6, 0x07c6, 0x07c6, 0x07d8, 0x07d8, 0x07e1, + 0x07f4, 0x0803, 0x0815, 0x0815, 0x0830, 0x0830, 0x0830, 0x084c, + 0x0862, 0x089c, 0x08c1, 0x08dd, 0x08f5, 0x0920, 0x0960, 0x0972, // Entry 80 - BF - 0x09a5, 0x09b7, 0x09c6, 0x09c6, 0x09e1, 0x0a03, 0x0a18, 0x0a18, - 0x0a18, 0x0a18, 0x0a2a, 0x0a2a, 0x0a3c, 0x0a5e, 0x0a73, 0x0aad, - 0x0ad2, 0x0af4, 0x0b09, 0x0b09, 0x0b19, 0x0b33, 0x0b3f, 0x0b3f, - 0x0b55, 0x0b67, 0x0b7f, 0x0b94, 0x0ba9, 0x0bb5, 0x0bbe, 0x0bd3, - 0x0bd3, 0x0bee, 0x0bf7, 0x0c19, 0x0c19, 0x0c19, 0x0c3b, 0x0c85, - 0x0c8b, 0x0c9d, 0x0cc2, 0x0cd1, 0x0ce0, 0x0cf2, 0x0d07, 0x0d26, -} // Size: 376 bytes + 0x0996, 0x09a5, 0x09b7, 0x09c6, 0x09c6, 0x09e1, 0x0a03, 0x0a18, + 0x0a18, 0x0a18, 0x0a18, 0x0a2a, 0x0a2a, 0x0a2a, 0x0a3c, 0x0a5e, + 0x0a73, 0x0aad, 0x0ad2, 0x0af4, 0x0b09, 0x0b09, 0x0b19, 0x0b33, + 0x0b3f, 0x0b3f, 0x0b55, 0x0b67, 0x0b7f, 0x0b94, 0x0ba9, 0x0bb5, + 0x0bbe, 0x0bd3, 0x0bd3, 0x0bee, 0x0bf7, 0x0c19, 0x0c19, 0x0c19, + 0x0c3b, 0x0c85, 0x0c8b, 0x0c8b, 0x0c9d, 0x0cc2, 0x0cd1, 0x0ce0, + 0x0cf2, 0x0d07, 0x0d26, +} // Size: 382 bytes const hrScriptStr string = "" + // Size: 2397 bytes "afaka pismoarapsko pismoaramejsko pismoarmensko pismoavestansko pismobal" + @@ -29898,33 +31751,34 @@ const hrScriptStr string = "" + // Size: 2397 bytes "nakovljeemotikonisimbolijezik bez pismenostizajedničko pismonepoznato pi" + "smo" -var hrScriptIdx = []uint16{ // 176 elements +var hrScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x000b, 0x000b, 0x000b, 0x0018, 0x0027, 0x0035, 0x0045, 0x0053, 0x005e, 0x006d, 0x0078, 0x0087, 0x0087, 0x0092, 0x00a0, 0x00ac, 0x00b3, 0x00c1, 0x00cc, 0x00d8, 0x0101, 0x010f, 0x011c, 0x0129, 0x0134, 0x0141, 0x014e, 0x0157, 0x0177, 0x0186, 0x0193, 0x0193, 0x01aa, 0x01c4, 0x01d9, 0x01d9, 0x01e7, 0x01ff, - 0x020e, 0x0218, 0x0226, 0x0233, 0x023f, 0x0251, 0x025f, 0x0269, - 0x0275, 0x0281, 0x028e, 0x02ab, 0x02c5, 0x02c5, 0x02d4, 0x02e2, - 0x02f9, 0x030b, 0x0322, 0x0337, 0x0345, 0x035b, 0x0365, 0x0373, + 0x020e, 0x0218, 0x0218, 0x0226, 0x0233, 0x023f, 0x0251, 0x025f, + 0x0269, 0x0275, 0x0281, 0x028e, 0x02ab, 0x02c5, 0x02c5, 0x02d4, + 0x02e2, 0x02f9, 0x030b, 0x0322, 0x0337, 0x0345, 0x035b, 0x0365, // Entry 40 - 7F - 0x0381, 0x038e, 0x039c, 0x03aa, 0x03ba, 0x03c7, 0x03d3, 0x03e0, - 0x03ee, 0x03fa, 0x0406, 0x0411, 0x041d, 0x042d, 0x043d, 0x0445, - 0x0451, 0x045c, 0x046a, 0x0478, 0x0484, 0x048e, 0x049c, 0x04aa, - 0x04aa, 0x04b6, 0x04c6, 0x04c6, 0x04da, 0x04e5, 0x04f5, 0x0503, - 0x0515, 0x0515, 0x0524, 0x052e, 0x0537, 0x0549, 0x0549, 0x0559, - 0x0574, 0x0584, 0x0584, 0x0593, 0x059f, 0x05aa, 0x05b5, 0x05c3, - 0x05cf, 0x05dc, 0x05dc, 0x05e9, 0x05f8, 0x05f8, 0x060a, 0x0618, - 0x0626, 0x0635, 0x0642, 0x0650, 0x0666, 0x0675, 0x0681, 0x0691, + 0x0373, 0x0381, 0x038e, 0x039c, 0x03aa, 0x03ba, 0x03c7, 0x03d3, + 0x03e0, 0x03ee, 0x03fa, 0x0406, 0x0411, 0x041d, 0x042d, 0x043d, + 0x0445, 0x0451, 0x045c, 0x046a, 0x0478, 0x0484, 0x048e, 0x049c, + 0x04aa, 0x04aa, 0x04b6, 0x04c6, 0x04c6, 0x04da, 0x04e5, 0x04f5, + 0x0503, 0x0515, 0x0515, 0x0524, 0x052e, 0x0537, 0x0549, 0x0549, + 0x0559, 0x0574, 0x0584, 0x0584, 0x0593, 0x059f, 0x05aa, 0x05b5, + 0x05c3, 0x05cf, 0x05dc, 0x05dc, 0x05e9, 0x05f8, 0x05f8, 0x060a, + 0x0618, 0x0626, 0x0635, 0x0642, 0x0650, 0x0666, 0x0675, 0x0681, // Entry 80 - BF - 0x069d, 0x06af, 0x06bb, 0x06d4, 0x06e4, 0x06f2, 0x06ff, 0x070c, - 0x070c, 0x071b, 0x072c, 0x073e, 0x074d, 0x075f, 0x076d, 0x0786, - 0x079a, 0x07af, 0x07bd, 0x07c8, 0x07d4, 0x07e6, 0x07f4, 0x0800, - 0x080e, 0x081c, 0x0829, 0x0830, 0x083d, 0x0849, 0x0855, 0x0865, - 0x0872, 0x0881, 0x088a, 0x0898, 0x08ab, 0x08b7, 0x08cc, 0x08ec, - 0x08f4, 0x0903, 0x0919, 0x0922, 0x0929, 0x093d, 0x094e, 0x095d, -} // Size: 376 bytes + 0x0691, 0x069d, 0x06af, 0x06bb, 0x06d4, 0x06e4, 0x06f2, 0x06ff, + 0x070c, 0x070c, 0x071b, 0x072c, 0x073e, 0x073e, 0x074d, 0x075f, + 0x076d, 0x0786, 0x079a, 0x07af, 0x07bd, 0x07c8, 0x07d4, 0x07e6, + 0x07f4, 0x0800, 0x080e, 0x081c, 0x0829, 0x0830, 0x083d, 0x0849, + 0x0855, 0x0865, 0x0872, 0x0881, 0x088a, 0x0898, 0x08ab, 0x08b7, + 0x08cc, 0x08ec, 0x08f4, 0x08f4, 0x0903, 0x0919, 0x0922, 0x0929, + 0x093d, 0x094e, 0x095d, +} // Size: 382 bytes const huScriptStr string = "" + // Size: 1286 bytes "ArabBirodalmi arámiÖrményAvesztánBalinézBatakBengáliBliss jelképrendszer" + @@ -29945,69 +31799,71 @@ const huScriptStr string = "" + // Size: 1286 bytes "rásos suméro-akkádJiSzármaztatottMatematikai jelrendszerEmojiSzimbólumÍr" + "atlan nyelvek kódjaMeghatározatlanIsmeretlen írásrendszer" -var huScriptIdx = []uint16{ // 176 elements +var huScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x0014, 0x001c, 0x0025, 0x002d, 0x002d, 0x002d, 0x0032, 0x003a, 0x003a, 0x004f, 0x0057, 0x005d, 0x0066, 0x006e, 0x0073, 0x0079, 0x009b, 0x009f, 0x00a4, 0x00ab, 0x00ab, 0x00af, 0x00b6, 0x00bc, 0x00d4, 0x00df, 0x00e6, 0x00e6, 0x00f9, 0x010d, 0x0123, 0x0123, 0x0129, 0x0136, - 0x013b, 0x0147, 0x014b, 0x014b, 0x0152, 0x015d, 0x0164, 0x0168, - 0x016e, 0x0171, 0x0178, 0x018f, 0x01a2, 0x01a2, 0x01a8, 0x01b0, - 0x01b0, 0x01bc, 0x01d2, 0x01da, 0x01df, 0x01ea, 0x01ee, 0x01f4, + 0x013b, 0x0147, 0x0147, 0x014b, 0x014b, 0x0152, 0x015d, 0x0164, + 0x0168, 0x016e, 0x0171, 0x0178, 0x018f, 0x01a2, 0x01a2, 0x01a8, + 0x01b0, 0x01b0, 0x01bc, 0x01d2, 0x01da, 0x01df, 0x01ea, 0x01ee, // Entry 40 - 7F - 0x01fa, 0x01fa, 0x0202, 0x020a, 0x0214, 0x0219, 0x0219, 0x0220, - 0x0226, 0x0226, 0x022c, 0x0231, 0x0234, 0x0241, 0x024b, 0x0250, - 0x0256, 0x025b, 0x0266, 0x0271, 0x0271, 0x0271, 0x0278, 0x027f, - 0x027f, 0x0285, 0x028e, 0x028e, 0x029f, 0x029f, 0x029f, 0x02a9, - 0x02b3, 0x02b3, 0x02b9, 0x02bd, 0x02bd, 0x02c9, 0x02c9, 0x02cf, - 0x02cf, 0x02cf, 0x02cf, 0x02cf, 0x02d5, 0x02d5, 0x02da, 0x02e2, - 0x02e7, 0x02ec, 0x02ec, 0x02f3, 0x02f3, 0x02f3, 0x02fd, 0x0305, - 0x0316, 0x0325, 0x0333, 0x033c, 0x034d, 0x035f, 0x0367, 0x0371, + 0x01f4, 0x01fa, 0x01fa, 0x0202, 0x020a, 0x0214, 0x0219, 0x0219, + 0x0220, 0x0226, 0x0226, 0x022c, 0x0231, 0x0234, 0x0241, 0x024b, + 0x0250, 0x0256, 0x025b, 0x0266, 0x0271, 0x0271, 0x0271, 0x0278, + 0x027f, 0x027f, 0x0285, 0x028e, 0x028e, 0x029f, 0x029f, 0x029f, + 0x02a9, 0x02b3, 0x02b3, 0x02b9, 0x02bd, 0x02bd, 0x02c9, 0x02c9, + 0x02cf, 0x02cf, 0x02cf, 0x02cf, 0x02cf, 0x02d5, 0x02d5, 0x02da, + 0x02e2, 0x02e7, 0x02ec, 0x02ec, 0x02f3, 0x02f3, 0x02f3, 0x02fd, + 0x0305, 0x0316, 0x0325, 0x0333, 0x033c, 0x034d, 0x035f, 0x0367, // Entry 80 - BF - 0x0378, 0x0383, 0x038a, 0x038a, 0x0394, 0x039d, 0x03aa, 0x03aa, - 0x03aa, 0x03aa, 0x03b4, 0x03b4, 0x03be, 0x03cd, 0x03d5, 0x03e8, - 0x03f7, 0x0405, 0x040d, 0x040d, 0x0413, 0x041e, 0x0423, 0x0423, - 0x042b, 0x0431, 0x0438, 0x043e, 0x0445, 0x044b, 0x044f, 0x0455, - 0x0455, 0x045a, 0x045d, 0x046e, 0x046e, 0x046e, 0x0476, 0x0490, - 0x0492, 0x04a0, 0x04b7, 0x04bc, 0x04c6, 0x04dd, 0x04ed, 0x0506, -} // Size: 376 bytes - -const hyScriptStr string = "" + // Size: 781 bytes + 0x0371, 0x0378, 0x0383, 0x038a, 0x038a, 0x0394, 0x039d, 0x03aa, + 0x03aa, 0x03aa, 0x03aa, 0x03b4, 0x03b4, 0x03b4, 0x03be, 0x03cd, + 0x03d5, 0x03e8, 0x03f7, 0x0405, 0x040d, 0x040d, 0x0413, 0x041e, + 0x0423, 0x0423, 0x042b, 0x0431, 0x0438, 0x043e, 0x0445, 0x044b, + 0x044f, 0x0455, 0x0455, 0x045a, 0x045d, 0x046e, 0x046e, 0x046e, + 0x0476, 0x0490, 0x0492, 0x0492, 0x04a0, 0x04b7, 0x04bc, 0x04c6, + 0x04dd, 0x04ed, 0x0506, +} // Size: 382 bytes + +const hyScriptStr string = "" + // Size: 779 bytes "արաբականհայկականբենգալականբոպոմոֆոբրայլիկյուրեղագիրդեւանագարիեթովպականվր" + - "ացականհունականգուջարաթիգուրմուխիհանբհանգուլչինականպարզեցված չինականավան" + - "դական չինականեբրայականհիրագանաճապոնական վանկագիրջամոճապոնականկատականաքմ" + - "երականկաննադակորեականլաոսականլատինականմալայալամմոնղոլականմյանմարականօրի" + - "յասինհալականթամիլականթելուգութաանաթայականտիբեթականմաթեմատիկական նշաններ" + - "էմոձինշաններչգրվածընդհանուրանհայտ գիր" + "ացականհունականգուջարաթիգուրմուխիհանբհանգըլչինականպարզեցված չինականավանդ" + + "ական չինականեբրայականհիրագանաճապոնական վանկագիրջամոճապոնականկատականաքմե" + + "րականկաննադակորեականլաոսականլատինականմալայալամմոնղոլականմյանմարականօրիյ" + + "ասինհալականթամիլականթելուգութաանաթայականտիբեթականմաթեմատիկական նշաններէ" + + "մոձինշաններչգրվածընդհանուրանհայտ գիր" -var hyScriptIdx = []uint16{ // 176 elements +var hyScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x0010, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0034, 0x0034, 0x0034, 0x0044, 0x0044, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0066, 0x0066, 0x007a, 0x007a, 0x007a, 0x007a, 0x007a, 0x007a, 0x007a, 0x008c, 0x008c, - 0x009c, 0x009c, 0x009c, 0x009c, 0x00ac, 0x00be, 0x00d0, 0x00d8, - 0x00e6, 0x00f4, 0x00f4, 0x0115, 0x0136, 0x0136, 0x0148, 0x0158, - 0x0158, 0x0158, 0x017b, 0x017b, 0x017b, 0x017b, 0x0183, 0x0183, + 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x00ac, 0x00be, 0x00d0, + 0x00d8, 0x00e4, 0x00f2, 0x00f2, 0x0113, 0x0134, 0x0134, 0x0146, + 0x0156, 0x0156, 0x0156, 0x0179, 0x0179, 0x0179, 0x0179, 0x0181, // Entry 40 - 7F - 0x0195, 0x0195, 0x0195, 0x01a5, 0x01a5, 0x01b5, 0x01b5, 0x01c3, - 0x01d3, 0x01d3, 0x01d3, 0x01d3, 0x01e3, 0x01e3, 0x01e3, 0x01f5, - 0x01f5, 0x01f5, 0x01f5, 0x01f5, 0x01f5, 0x01f5, 0x01f5, 0x01f5, - 0x01f5, 0x01f5, 0x01f5, 0x01f5, 0x01f5, 0x01f5, 0x01f5, 0x01f5, - 0x0207, 0x0207, 0x021b, 0x021b, 0x021b, 0x021b, 0x021b, 0x0231, - 0x0231, 0x0231, 0x0231, 0x0231, 0x0231, 0x0231, 0x0231, 0x0231, - 0x0231, 0x023b, 0x023b, 0x023b, 0x023b, 0x023b, 0x023b, 0x023b, - 0x023b, 0x023b, 0x023b, 0x023b, 0x023b, 0x023b, 0x023b, 0x023b, + 0x0181, 0x0193, 0x0193, 0x0193, 0x01a3, 0x01a3, 0x01b3, 0x01b3, + 0x01c1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01e1, 0x01e1, 0x01e1, + 0x01f3, 0x01f3, 0x01f3, 0x01f3, 0x01f3, 0x01f3, 0x01f3, 0x01f3, + 0x01f3, 0x01f3, 0x01f3, 0x01f3, 0x01f3, 0x01f3, 0x01f3, 0x01f3, + 0x01f3, 0x0205, 0x0205, 0x0219, 0x0219, 0x0219, 0x0219, 0x0219, + 0x022f, 0x022f, 0x022f, 0x022f, 0x022f, 0x022f, 0x022f, 0x022f, + 0x022f, 0x022f, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, // Entry 80 - BF - 0x023b, 0x023b, 0x023b, 0x023b, 0x023b, 0x023b, 0x023b, 0x023b, - 0x023b, 0x023b, 0x024f, 0x024f, 0x024f, 0x024f, 0x024f, 0x024f, - 0x024f, 0x024f, 0x024f, 0x024f, 0x024f, 0x024f, 0x0261, 0x0261, - 0x0261, 0x0271, 0x0271, 0x0271, 0x0271, 0x027b, 0x0289, 0x029b, - 0x029b, 0x029b, 0x029b, 0x029b, 0x029b, 0x029b, 0x029b, 0x029b, - 0x029b, 0x029b, 0x02c4, 0x02ce, 0x02dc, 0x02e8, 0x02fa, 0x030d, -} // Size: 376 bytes + 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, 0x0239, + 0x0239, 0x0239, 0x0239, 0x024d, 0x024d, 0x024d, 0x024d, 0x024d, + 0x024d, 0x024d, 0x024d, 0x024d, 0x024d, 0x024d, 0x024d, 0x024d, + 0x025f, 0x025f, 0x025f, 0x026f, 0x026f, 0x026f, 0x026f, 0x0279, + 0x0287, 0x0299, 0x0299, 0x0299, 0x0299, 0x0299, 0x0299, 0x0299, + 0x0299, 0x0299, 0x0299, 0x0299, 0x0299, 0x02c2, 0x02cc, 0x02da, + 0x02e6, 0x02f8, 0x030b, +} // Size: 382 bytes const idScriptStr string = "" + // Size: 1408 bytes "AfakaAlbania KaukasiaArabAram ImperialArmeniaAvestaBaliBamumBassa VahBat" + @@ -30031,69 +31887,71 @@ const idScriptStr string = "" + // Size: 1408 bytes "eaiPersia KunoCuneiform Sumero-AkkadiaYiWarisanNotasi MatematikaEmojiSim" + "bolTidak TertulisUmumSkrip Tak Dikenal" -var idScriptIdx = []uint16{ // 176 elements +var idScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0005, 0x0015, 0x0015, 0x0019, 0x0026, 0x002d, 0x0033, 0x0037, 0x003c, 0x0045, 0x004a, 0x0051, 0x0051, 0x005b, 0x0063, 0x0069, 0x0070, 0x0075, 0x007a, 0x0080, 0x009f, 0x00a4, 0x00a8, 0x00b0, 0x00b5, 0x00bb, 0x00c1, 0x00c8, 0x00e4, 0x00ee, 0x00f5, 0x0108, 0x0115, 0x0123, 0x0132, 0x0132, 0x0139, 0x014a, - 0x0151, 0x015b, 0x0161, 0x0168, 0x016e, 0x0175, 0x017d, 0x0181, - 0x0187, 0x018a, 0x0191, 0x019e, 0x01ad, 0x01ad, 0x01b3, 0x01bb, - 0x01cd, 0x01d9, 0x01ef, 0x01fc, 0x0201, 0x020c, 0x0210, 0x0214, + 0x0151, 0x015b, 0x015b, 0x0161, 0x0168, 0x016e, 0x0175, 0x017d, + 0x0181, 0x0187, 0x018a, 0x0191, 0x019e, 0x01ad, 0x01ad, 0x01b3, + 0x01bb, 0x01cd, 0x01d9, 0x01ef, 0x01fc, 0x0201, 0x020c, 0x0210, // Entry 40 - 7F - 0x021a, 0x0221, 0x0229, 0x0231, 0x023b, 0x0240, 0x0246, 0x024d, - 0x0252, 0x0258, 0x025e, 0x0263, 0x0267, 0x0274, 0x0280, 0x0285, - 0x028b, 0x0290, 0x0298, 0x02a0, 0x02a4, 0x02a8, 0x02ad, 0x02b2, - 0x02b2, 0x02b8, 0x02c0, 0x02c0, 0x02ce, 0x02d3, 0x02e2, 0x02ea, - 0x02f3, 0x02f7, 0x02ff, 0x0303, 0x0306, 0x0312, 0x0312, 0x0319, - 0x0328, 0x0330, 0x0330, 0x0339, 0x033f, 0x0344, 0x0349, 0x0353, - 0x0359, 0x035e, 0x035e, 0x0365, 0x036c, 0x036c, 0x0377, 0x037f, - 0x0386, 0x0394, 0x03a1, 0x03a8, 0x03b7, 0x03c7, 0x03cd, 0x03d7, + 0x0214, 0x021a, 0x0221, 0x0229, 0x0231, 0x023b, 0x0240, 0x0246, + 0x024d, 0x0252, 0x0258, 0x025e, 0x0263, 0x0267, 0x0274, 0x0280, + 0x0285, 0x028b, 0x0290, 0x0298, 0x02a0, 0x02a4, 0x02a8, 0x02ad, + 0x02b2, 0x02b2, 0x02b8, 0x02c0, 0x02c0, 0x02ce, 0x02d3, 0x02e2, + 0x02ea, 0x02f3, 0x02f7, 0x02ff, 0x0303, 0x0306, 0x0312, 0x0312, + 0x0319, 0x0328, 0x0330, 0x0330, 0x0339, 0x033f, 0x0344, 0x0349, + 0x0353, 0x0359, 0x035e, 0x035e, 0x0365, 0x036c, 0x036c, 0x0377, + 0x037f, 0x0386, 0x0394, 0x03a1, 0x03a8, 0x03b7, 0x03c7, 0x03cd, // Entry 80 - BF - 0x03dc, 0x03e3, 0x03e9, 0x03fa, 0x0404, 0x0413, 0x0419, 0x0420, - 0x0427, 0x0430, 0x0437, 0x0443, 0x0448, 0x0454, 0x045a, 0x046b, - 0x0477, 0x0483, 0x048b, 0x0490, 0x0496, 0x04a2, 0x04a7, 0x04ad, - 0x04b5, 0x04bb, 0x04c3, 0x04cb, 0x04d2, 0x04d8, 0x04dc, 0x04e1, - 0x04e8, 0x04f0, 0x04f3, 0x0502, 0x050f, 0x0515, 0x0520, 0x0538, - 0x053a, 0x0541, 0x0552, 0x0557, 0x055d, 0x056b, 0x056f, 0x0580, -} // Size: 376 bytes - -const isScriptStr string = "" + // Size: 401 bytes + 0x03d7, 0x03dc, 0x03e3, 0x03e9, 0x03fa, 0x0404, 0x0413, 0x0419, + 0x0420, 0x0427, 0x0430, 0x0437, 0x0443, 0x0443, 0x0448, 0x0454, + 0x045a, 0x046b, 0x0477, 0x0483, 0x048b, 0x0490, 0x0496, 0x04a2, + 0x04a7, 0x04ad, 0x04b5, 0x04bb, 0x04c3, 0x04cb, 0x04d2, 0x04d8, + 0x04dc, 0x04e1, 0x04e8, 0x04f0, 0x04f3, 0x0502, 0x050f, 0x0515, + 0x0520, 0x0538, 0x053a, 0x053a, 0x0541, 0x0552, 0x0557, 0x055d, + 0x056b, 0x056f, 0x0580, +} // Size: 382 bytes + +const isScriptStr string = "" + // Size: 402 bytes "arabísktarmensktbengalsktbopomofoblindraleturkyrillísktdevanagarieþíópís" + "ktgeorgísktgrísktgújaratígurmukhihanbhangulkínverskteinfaldað hanhefðbun" + - "dið hanhebreskthiraganakatakana eða hiraganajamojapansktkatakanakmerkann" + + "dið hanhebreskthiraganajapönsk samstöfuleturjamojapansktkatakanakmerkann" + "adakóresktlaolatnesktmalalajammongólsktmjanmarsktoriyasinhalatamílskttel" + "úgúthaanataílenskttíbesktstærðfræðitáknemoji-tákntáknóskrifaðalmenntóþe" + "kkt letur" -var isScriptIdx = []uint16{ // 176 elements +var isScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0009, 0x0009, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, 0x001a, 0x001a, 0x001a, 0x0022, 0x0022, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x0039, 0x0039, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0050, 0x0050, - 0x005a, 0x005a, 0x005a, 0x005a, 0x0061, 0x006b, 0x0073, 0x0077, - 0x007d, 0x0087, 0x0087, 0x0095, 0x00a5, 0x00a5, 0x00ad, 0x00b5, - 0x00b5, 0x00b5, 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00cf, 0x00cf, + 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x0061, 0x006b, 0x0073, + 0x0077, 0x007d, 0x0087, 0x0087, 0x0095, 0x00a5, 0x00a5, 0x00ad, + 0x00b5, 0x00b5, 0x00b5, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00d0, // Entry 40 - 7F - 0x00d7, 0x00d7, 0x00d7, 0x00df, 0x00df, 0x00e3, 0x00e3, 0x00ea, - 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f5, 0x00f5, 0x00f5, 0x00fd, - 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, - 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, - 0x0106, 0x0106, 0x0110, 0x0110, 0x0110, 0x0110, 0x0110, 0x011a, - 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, - 0x011a, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, - 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, + 0x00d0, 0x00d8, 0x00d8, 0x00d8, 0x00e0, 0x00e0, 0x00e4, 0x00e4, + 0x00eb, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f6, 0x00f6, 0x00f6, + 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, + 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, + 0x00fe, 0x0107, 0x0107, 0x0111, 0x0111, 0x0111, 0x0111, 0x0111, + 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, 0x011b, + 0x011b, 0x011b, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, + 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, // Entry 80 - BF - 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, - 0x011f, 0x011f, 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, - 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, 0x012f, 0x012f, - 0x012f, 0x0137, 0x0137, 0x0137, 0x0137, 0x013d, 0x0147, 0x014f, - 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, - 0x014f, 0x014f, 0x0162, 0x016d, 0x0172, 0x017c, 0x0183, 0x0191, -} // Size: 376 bytes + 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, 0x0120, + 0x0120, 0x0120, 0x0120, 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, + 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, 0x0127, + 0x0130, 0x0130, 0x0130, 0x0138, 0x0138, 0x0138, 0x0138, 0x013e, + 0x0148, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, + 0x0150, 0x0150, 0x0150, 0x0150, 0x0150, 0x0163, 0x016e, 0x0173, + 0x017d, 0x0184, 0x0192, +} // Size: 382 bytes const itScriptStr string = "" + // Size: 1575 bytes "afakaaraboaramaico imperialearmenoavesticobalinesebamumBassa Vahbatakben" + @@ -30119,33 +31977,34 @@ const itScriptStr string = "" + // Size: 1575 bytes "hitiwoleaipersiano anticosumero-accadiano cuneiformeyiereditatonotazione" + " matematicaemojisimbolinon scrittocomunescrittura sconosciuta" -var itScriptIdx = []uint16{ // 176 elements +var itScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0005, 0x0005, 0x0005, 0x000a, 0x001c, 0x0022, 0x002a, 0x0032, 0x0037, 0x0040, 0x0045, 0x004e, 0x004e, 0x005b, 0x0063, 0x0069, 0x0070, 0x0078, 0x007d, 0x0083, 0x00a7, 0x00ad, 0x00b1, 0x00b9, 0x00be, 0x00c3, 0x00cb, 0x00d4, 0x00f5, 0x00ff, 0x0106, 0x011a, 0x012b, 0x013c, 0x0150, 0x0150, 0x0156, 0x015d, - 0x0166, 0x0171, 0x0177, 0x017e, 0x0183, 0x018b, 0x0193, 0x0197, - 0x019d, 0x01a0, 0x01a7, 0x01b7, 0x01c7, 0x01c7, 0x01ce, 0x01d6, - 0x01eb, 0x01f7, 0x020a, 0x021a, 0x021e, 0x022c, 0x0230, 0x0238, + 0x0166, 0x0171, 0x0171, 0x0177, 0x017e, 0x0183, 0x018b, 0x0193, + 0x0197, 0x019d, 0x01a0, 0x01a7, 0x01b7, 0x01c7, 0x01c7, 0x01ce, + 0x01d6, 0x01eb, 0x01f7, 0x020a, 0x021a, 0x021e, 0x022c, 0x0230, // Entry 40 - 7F - 0x0242, 0x0249, 0x0251, 0x0259, 0x0263, 0x0268, 0x026e, 0x0275, - 0x027c, 0x0282, 0x0288, 0x028d, 0x0290, 0x02ab, 0x02c6, 0x02cc, - 0x02d2, 0x02d7, 0x02e0, 0x02e9, 0x02ed, 0x02f1, 0x02f5, 0x02f9, - 0x02f9, 0x0301, 0x0309, 0x0309, 0x0319, 0x031e, 0x032f, 0x0338, - 0x0341, 0x0341, 0x0348, 0x034c, 0x034f, 0x035b, 0x035b, 0x0362, - 0x037d, 0x0384, 0x0384, 0x038d, 0x0393, 0x0398, 0x039d, 0x03a5, - 0x03ab, 0x03b0, 0x03b0, 0x03b7, 0x03c0, 0x03c0, 0x03ce, 0x03d6, - 0x03ee, 0x03fd, 0x0409, 0x0410, 0x0423, 0x043b, 0x0441, 0x044b, + 0x0238, 0x0242, 0x0249, 0x0251, 0x0259, 0x0263, 0x0268, 0x026e, + 0x0275, 0x027c, 0x0282, 0x0288, 0x028d, 0x0290, 0x02ab, 0x02c6, + 0x02cc, 0x02d2, 0x02d7, 0x02e0, 0x02e9, 0x02ed, 0x02f1, 0x02f5, + 0x02f9, 0x02f9, 0x0301, 0x0309, 0x0309, 0x0319, 0x031e, 0x032f, + 0x0338, 0x0341, 0x0341, 0x0348, 0x034c, 0x034f, 0x035b, 0x035b, + 0x0362, 0x037d, 0x0384, 0x0384, 0x038d, 0x0393, 0x0398, 0x039d, + 0x03a5, 0x03ab, 0x03b0, 0x03b0, 0x03b7, 0x03c0, 0x03c0, 0x03ce, + 0x03d6, 0x03ee, 0x03fd, 0x0409, 0x0410, 0x0423, 0x043b, 0x0441, // Entry 80 - BF - 0x0451, 0x045b, 0x0461, 0x0479, 0x0483, 0x0497, 0x049f, 0x04a6, - 0x04a6, 0x04af, 0x04b8, 0x04c4, 0x04cd, 0x04d9, 0x04e0, 0x04f2, - 0x0505, 0x0516, 0x051e, 0x0523, 0x0529, 0x0530, 0x0535, 0x053b, - 0x0543, 0x0549, 0x0550, 0x0558, 0x055f, 0x0565, 0x0570, 0x0578, - 0x057f, 0x0586, 0x058a, 0x0599, 0x05a6, 0x05ac, 0x05bb, 0x05d6, - 0x05d8, 0x05e1, 0x05f5, 0x05fa, 0x0601, 0x060c, 0x0612, 0x0627, -} // Size: 376 bytes + 0x044b, 0x0451, 0x045b, 0x0461, 0x0479, 0x0483, 0x0497, 0x049f, + 0x04a6, 0x04a6, 0x04af, 0x04b8, 0x04c4, 0x04c4, 0x04cd, 0x04d9, + 0x04e0, 0x04f2, 0x0505, 0x0516, 0x051e, 0x0523, 0x0529, 0x0530, + 0x0535, 0x053b, 0x0543, 0x0549, 0x0550, 0x0558, 0x055f, 0x0565, + 0x0570, 0x0578, 0x057f, 0x0586, 0x058a, 0x0599, 0x05a6, 0x05ac, + 0x05bb, 0x05d6, 0x05d8, 0x05d8, 0x05e1, 0x05f5, 0x05fa, 0x0601, + 0x060c, 0x0612, 0x0627, +} // Size: 382 bytes const jaScriptStr string = "" + // Size: 3286 bytes "アファカ文字カフカス・アルバニア文字アラビア文字帝国アラム文字アルメニア文字アヴェスター文字バリ文字バムン文字バサ文字バタク文字ベンガル文字ブリ" + @@ -30165,33 +32024,34 @@ const jaScriptStr string = "" + // Size: 3286 bytes "タガログ文字ターナ文字タイ文字チベット文字ティルフータ文字ウガリット文字ヴァイ文字視話法バラン・クシティ文字ウォレアイ文字古代ペルシア文字シ" + "ュメール=アッカド語楔形文字イ文字基底文字の種別を継承する結合文字数学記号絵文字記号文字非表記共通文字未定義文字" -var jaScriptIdx = []uint16{ // 176 elements +var jaScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0012, 0x0036, 0x0036, 0x0048, 0x005d, 0x0072, 0x008a, 0x0096, 0x00a5, 0x00b1, 0x00c0, 0x00d2, 0x00d2, 0x00e7, 0x00f3, 0x010b, 0x011d, 0x012c, 0x013e, 0x0150, 0x0174, 0x0183, 0x0192, 0x01a7, 0x01b6, 0x01c5, 0x01d7, 0x01e6, 0x020d, 0x022b, 0x0240, 0x025b, 0x0273, 0x028b, 0x02a3, 0x02b8, 0x02cd, 0x02ed, - 0x0302, 0x0314, 0x0323, 0x0335, 0x0347, 0x035f, 0x0374, 0x0386, - 0x0392, 0x0398, 0x03aa, 0x03bb, 0x03cc, 0x03cc, 0x03de, 0x03ea, - 0x0405, 0x0420, 0x0426, 0x0441, 0x0453, 0x0468, 0x046e, 0x047d, + 0x0302, 0x0314, 0x0314, 0x0323, 0x0335, 0x0347, 0x035f, 0x0374, + 0x0386, 0x0392, 0x0398, 0x03aa, 0x03bb, 0x03cc, 0x03cc, 0x03de, + 0x03ea, 0x0405, 0x0420, 0x0426, 0x0441, 0x0453, 0x0468, 0x046e, // Entry 40 - 7F - 0x048f, 0x049b, 0x04aa, 0x04b6, 0x04d4, 0x04e6, 0x04f5, 0x0507, - 0x0519, 0x0528, 0x053a, 0x054f, 0x055b, 0x057b, 0x059c, 0x05ab, - 0x05bd, 0x05cc, 0x05d6, 0x05e0, 0x05f5, 0x0601, 0x0610, 0x0622, - 0x063d, 0x064c, 0x0658, 0x0658, 0x066a, 0x0679, 0x0691, 0x06a0, - 0x06b8, 0x06cd, 0x06df, 0x06ee, 0x06fa, 0x070c, 0x070c, 0x0721, - 0x073c, 0x074e, 0x074e, 0x0763, 0x076f, 0x0775, 0x0784, 0x0796, - 0x07a8, 0x07ba, 0x07ba, 0x07cf, 0x07e1, 0x07ff, 0x0811, 0x0820, - 0x083e, 0x085f, 0x0880, 0x0895, 0x08ad, 0x08c8, 0x08da, 0x08f2, + 0x047d, 0x048f, 0x049b, 0x04aa, 0x04b6, 0x04d4, 0x04e6, 0x04f5, + 0x0507, 0x0519, 0x0528, 0x053a, 0x054f, 0x055b, 0x057b, 0x059c, + 0x05ab, 0x05bd, 0x05cc, 0x05d6, 0x05e0, 0x05f5, 0x0601, 0x0610, + 0x0622, 0x063d, 0x064c, 0x0658, 0x0658, 0x066a, 0x0679, 0x0691, + 0x06a0, 0x06b8, 0x06cd, 0x06df, 0x06ee, 0x06fa, 0x070c, 0x070c, + 0x0721, 0x073c, 0x074e, 0x074e, 0x0763, 0x076f, 0x0775, 0x0784, + 0x0796, 0x07a8, 0x07ba, 0x07ba, 0x07cf, 0x07e1, 0x07ff, 0x0811, + 0x0820, 0x083e, 0x085f, 0x0880, 0x0895, 0x08ad, 0x08c8, 0x08da, // Entry 80 - BF - 0x0901, 0x0913, 0x0925, 0x0940, 0x095e, 0x096a, 0x0979, 0x0991, - 0x0997, 0x09ac, 0x09be, 0x09e2, 0x09f1, 0x0a0f, 0x0a1e, 0x0a4a, - 0x0a70, 0x0a96, 0x0aab, 0x0ac0, 0x0ad2, 0x0aea, 0x0afc, 0x0b08, - 0x0b20, 0x0b2f, 0x0b47, 0x0b5c, 0x0b6e, 0x0b7d, 0x0b89, 0x0b9b, - 0x0bb3, 0x0bc8, 0x0bd7, 0x0be0, 0x0bfe, 0x0c13, 0x0c2b, 0x0c58, - 0x0c61, 0x0c91, 0x0c9d, 0x0ca6, 0x0cb2, 0x0cbb, 0x0cc7, 0x0cd6, -} // Size: 376 bytes + 0x08f2, 0x0901, 0x0913, 0x0925, 0x0940, 0x095e, 0x096a, 0x0979, + 0x0991, 0x0997, 0x09ac, 0x09be, 0x09e2, 0x09e2, 0x09f1, 0x0a0f, + 0x0a1e, 0x0a4a, 0x0a70, 0x0a96, 0x0aab, 0x0ac0, 0x0ad2, 0x0aea, + 0x0afc, 0x0b08, 0x0b20, 0x0b2f, 0x0b47, 0x0b5c, 0x0b6e, 0x0b7d, + 0x0b89, 0x0b9b, 0x0bb3, 0x0bc8, 0x0bd7, 0x0be0, 0x0bfe, 0x0c13, + 0x0c2b, 0x0c58, 0x0c61, 0x0c61, 0x0c91, 0x0c9d, 0x0ca6, 0x0cb2, + 0x0cbb, 0x0cc7, 0x0cd6, +} // Size: 382 bytes const kaScriptStr string = "" + // Size: 4040 bytes "აფაკაარაბულიიმპერიული არამეულისომხურიავესტურიბალიურიბამუმიბასა ვაჰიბატაკ" + @@ -30215,33 +32075,34 @@ const kaScriptStr string = "" + // Size: 4040 bytes "ლეაიძველი სპარსულიშუმერულ-აქადური ლურსმნულიგადაღებულიმათემატიკური ნოტა" + "ციაEmojiსიმბოლოებიუმწერლობოზოგადიუცნობი დამწერლობა" -var kaScriptIdx = []uint16{ // 176 elements +var kaScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x000f, 0x000f, 0x000f, 0x0024, 0x0058, 0x006d, 0x0085, 0x009a, 0x00ac, 0x00c5, 0x00d7, 0x00f2, 0x00f2, 0x011c, 0x0134, 0x0146, 0x0158, 0x0158, 0x016a, 0x0179, 0x0179, 0x018e, 0x019a, 0x01ac, 0x01bb, 0x01d0, 0x01ee, 0x0206, 0x0244, 0x0262, 0x027d, 0x02b4, 0x02ee, 0x0328, 0x0365, 0x0365, 0x0380, 0x0392, - 0x03a7, 0x03c2, 0x03d4, 0x03e6, 0x03fe, 0x041c, 0x0431, 0x0440, - 0x0455, 0x0461, 0x0476, 0x04aa, 0x04d5, 0x04d5, 0x04ea, 0x0502, - 0x0542, 0x055e, 0x0583, 0x05a8, 0x05a8, 0x05a8, 0x05b4, 0x05c6, + 0x03a7, 0x03c2, 0x03c2, 0x03d4, 0x03e6, 0x03fe, 0x041c, 0x0431, + 0x0440, 0x0455, 0x0461, 0x0476, 0x04aa, 0x04d5, 0x04d5, 0x04ea, + 0x0502, 0x0542, 0x055e, 0x0583, 0x05a8, 0x05a8, 0x05a8, 0x05b4, // Entry 40 - 7F - 0x05de, 0x05f9, 0x060f, 0x0627, 0x063c, 0x0651, 0x0660, 0x0672, - 0x0687, 0x0696, 0x06a5, 0x06a5, 0x06ba, 0x06ba, 0x06e5, 0x06fd, - 0x06fd, 0x070c, 0x0726, 0x0740, 0x0740, 0x074c, 0x0761, 0x0776, - 0x0776, 0x078e, 0x07a9, 0x07a9, 0x07da, 0x07e9, 0x081a, 0x0835, - 0x0859, 0x0859, 0x0874, 0x0874, 0x087d, 0x087d, 0x087d, 0x0895, - 0x08d3, 0x08ee, 0x08ee, 0x08ee, 0x08f7, 0x0903, 0x0912, 0x0925, - 0x093d, 0x0949, 0x0949, 0x095e, 0x0979, 0x0979, 0x099e, 0x09b0, - 0x09e7, 0x0a1b, 0x0a46, 0x0a61, 0x0a61, 0x0a98, 0x0aad, 0x0acb, + 0x05c6, 0x05de, 0x05f9, 0x060f, 0x0627, 0x063c, 0x0651, 0x0660, + 0x0672, 0x0687, 0x0696, 0x06a5, 0x06a5, 0x06ba, 0x06ba, 0x06e5, + 0x06fd, 0x06fd, 0x070c, 0x0726, 0x0740, 0x0740, 0x074c, 0x0761, + 0x0776, 0x0776, 0x078e, 0x07a9, 0x07a9, 0x07da, 0x07e9, 0x081a, + 0x0835, 0x0859, 0x0859, 0x0874, 0x0874, 0x087d, 0x087d, 0x087d, + 0x0895, 0x08d3, 0x08ee, 0x08ee, 0x08ee, 0x08f7, 0x0903, 0x0912, + 0x0925, 0x093d, 0x0949, 0x0949, 0x095e, 0x0979, 0x0979, 0x099e, + 0x09b0, 0x09e7, 0x0a1b, 0x0a46, 0x0a61, 0x0a61, 0x0a98, 0x0aad, // Entry 80 - BF - 0x0add, 0x0af8, 0x0b0a, 0x0b45, 0x0b60, 0x0b72, 0x0b72, 0x0b84, - 0x0b84, 0x0b9c, 0x0bb7, 0x0bdc, 0x0bf7, 0x0c19, 0x0c2e, 0x0c62, - 0x0c93, 0x0cca, 0x0ce2, 0x0cf1, 0x0d01, 0x0d24, 0x0d3c, 0x0d57, - 0x0d70, 0x0d82, 0x0d9a, 0x0db2, 0x0db2, 0x0dc1, 0x0dca, 0x0de2, - 0x0df7, 0x0e12, 0x0e1b, 0x0e4c, 0x0e6e, 0x0e80, 0x0ea8, 0x0eef, - 0x0eef, 0x0f0d, 0x0f47, 0x0f4c, 0x0f6a, 0x0f85, 0x0f97, 0x0fc8, -} // Size: 376 bytes + 0x0acb, 0x0add, 0x0af8, 0x0b0a, 0x0b45, 0x0b60, 0x0b72, 0x0b72, + 0x0b84, 0x0b84, 0x0b9c, 0x0bb7, 0x0bdc, 0x0bdc, 0x0bf7, 0x0c19, + 0x0c2e, 0x0c62, 0x0c93, 0x0cca, 0x0ce2, 0x0cf1, 0x0d01, 0x0d24, + 0x0d3c, 0x0d57, 0x0d70, 0x0d82, 0x0d9a, 0x0db2, 0x0db2, 0x0dc1, + 0x0dca, 0x0de2, 0x0df7, 0x0e12, 0x0e1b, 0x0e4c, 0x0e6e, 0x0e80, + 0x0ea8, 0x0eef, 0x0eef, 0x0eef, 0x0f0d, 0x0f47, 0x0f4c, 0x0f6a, + 0x0f85, 0x0f97, 0x0fc8, +} // Size: 382 bytes const kkScriptStr string = "" + // Size: 1036 bytes "араб жазуыармян жазуыбенгал жазуыбопомофо жазуБрайль жазуыкирилл жазуыде" + @@ -30253,33 +32114,34 @@ const kkScriptStr string = "" + // Size: 1036 bytes "тамиль жазуытелугу жазуытаана жазуытай жазуытибет жазуыматематикалық жа" + "зуэмодзитаңбаларжазусызжалпыбелгісіз жазу" -var kkScriptIdx = []uint16{ // 176 elements +var kkScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0013, 0x0013, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x003f, 0x003f, 0x003f, 0x0058, 0x0058, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x0086, 0x0086, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00a5, 0x00b8, 0x00b8, - 0x00cf, 0x00cf, 0x00cf, 0x00cf, 0x00e2, 0x00ff, 0x011a, 0x012d, - 0x0144, 0x0159, 0x0159, 0x0191, 0x01bf, 0x01bf, 0x01d4, 0x01ef, - 0x01ef, 0x01ef, 0x0210, 0x0210, 0x0210, 0x0210, 0x0223, 0x0223, + 0x00cf, 0x00cf, 0x00cf, 0x00cf, 0x00cf, 0x00e2, 0x00ff, 0x011a, + 0x012d, 0x0144, 0x0159, 0x0159, 0x0191, 0x01bf, 0x01bf, 0x01d4, + 0x01ef, 0x01ef, 0x01ef, 0x0210, 0x0210, 0x0210, 0x0210, 0x0223, // Entry 40 - 7F - 0x0238, 0x0238, 0x0238, 0x0253, 0x0253, 0x0268, 0x0268, 0x0281, - 0x0296, 0x0296, 0x0296, 0x0296, 0x02a9, 0x02a9, 0x02a9, 0x02be, + 0x0223, 0x0238, 0x0238, 0x0238, 0x0253, 0x0253, 0x0268, 0x0268, + 0x0281, 0x0296, 0x0296, 0x0296, 0x0296, 0x02a9, 0x02a9, 0x02a9, 0x02be, 0x02be, 0x02be, 0x02be, 0x02be, 0x02be, 0x02be, 0x02be, 0x02be, 0x02be, 0x02be, 0x02be, 0x02be, 0x02be, 0x02be, 0x02be, - 0x02d9, 0x02d9, 0x02f0, 0x02f0, 0x02f0, 0x02f0, 0x02f0, 0x0307, + 0x02be, 0x02d9, 0x02d9, 0x02f0, 0x02f0, 0x02f0, 0x02f0, 0x02f0, 0x0307, 0x0307, 0x0307, 0x0307, 0x0307, 0x0307, 0x0307, 0x0307, - 0x0307, 0x031a, 0x031a, 0x031a, 0x031a, 0x031a, 0x031a, 0x031a, + 0x0307, 0x0307, 0x031a, 0x031a, 0x031a, 0x031a, 0x031a, 0x031a, 0x031a, 0x031a, 0x031a, 0x031a, 0x031a, 0x031a, 0x031a, 0x031a, // Entry 80 - BF 0x031a, 0x031a, 0x031a, 0x031a, 0x031a, 0x031a, 0x031a, 0x031a, - 0x031a, 0x031a, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, - 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x034a, 0x034a, - 0x034a, 0x0361, 0x0361, 0x0361, 0x0361, 0x0376, 0x0387, 0x039c, - 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, - 0x039c, 0x039c, 0x03bf, 0x03cb, 0x03db, 0x03e9, 0x03f3, 0x040c, -} // Size: 376 bytes + 0x031a, 0x031a, 0x031a, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, + 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, + 0x034a, 0x034a, 0x034a, 0x0361, 0x0361, 0x0361, 0x0361, 0x0376, + 0x0387, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, + 0x039c, 0x039c, 0x039c, 0x039c, 0x039c, 0x03bf, 0x03cb, 0x03db, + 0x03e9, 0x03f3, 0x040c, +} // Size: 382 bytes const kmScriptStr string = "" + // Size: 1140 bytes "អារ៉ាប់អាមេនីបង់ក្លាដែសបូផូម៉ូហ្វូអក្សរ\u200bសម្រាប់មនុស្ស\u200bពិការ" + @@ -30289,33 +32151,34 @@ const kmScriptStr string = "" + // Size: 1140 bytes "ំងមលយាល័មម៉ុងហ្គោលីភូមាអូឌៀស៊ីនហាឡាតាមីលតេលុគុថាណាថៃទីបេនិមិត្តសញ្ញាគណ" + "ិតវិទ្យាសញ្ញាអារម្មណ៍និមិត្តសញ្ញាគ្មានការសរសេរទូទៅអក្សរមិនស្គាល់" -var kmScriptIdx = []uint16{ // 176 elements +var kmScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x0015, 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0027, 0x0045, 0x0045, 0x0045, 0x0066, 0x0066, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00db, 0x00db, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x0102, 0x011a, 0x011a, - 0x0135, 0x0135, 0x0135, 0x0135, 0x0144, 0x015f, 0x0174, 0x0183, - 0x0198, 0x01a1, 0x01a1, 0x01cb, 0x01f2, 0x01f2, 0x0210, 0x022e, - 0x022e, 0x022e, 0x0267, 0x0267, 0x0267, 0x0267, 0x0276, 0x0276, + 0x0135, 0x0135, 0x0135, 0x0135, 0x0135, 0x0144, 0x015f, 0x0174, + 0x0183, 0x0198, 0x01a1, 0x01a1, 0x01cb, 0x01f2, 0x01f2, 0x0210, + 0x022e, 0x022e, 0x022e, 0x0267, 0x0267, 0x0267, 0x0267, 0x0276, // Entry 40 - 7F - 0x0285, 0x0285, 0x0285, 0x029d, 0x029d, 0x02ac, 0x02ac, 0x02be, - 0x02cd, 0x02cd, 0x02cd, 0x02cd, 0x02d6, 0x02d6, 0x02d6, 0x02e8, + 0x0276, 0x0285, 0x0285, 0x0285, 0x029d, 0x029d, 0x02ac, 0x02ac, + 0x02be, 0x02cd, 0x02cd, 0x02cd, 0x02cd, 0x02d6, 0x02d6, 0x02d6, 0x02e8, 0x02e8, 0x02e8, 0x02e8, 0x02e8, 0x02e8, 0x02e8, 0x02e8, 0x02e8, 0x02e8, 0x02e8, 0x02e8, 0x02e8, 0x02e8, 0x02e8, 0x02e8, - 0x02fd, 0x02fd, 0x031b, 0x031b, 0x031b, 0x031b, 0x031b, 0x0327, + 0x02e8, 0x02fd, 0x02fd, 0x031b, 0x031b, 0x031b, 0x031b, 0x031b, 0x0327, 0x0327, 0x0327, 0x0327, 0x0327, 0x0327, 0x0327, 0x0327, - 0x0327, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, + 0x0327, 0x0327, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, // Entry 80 - BF 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, - 0x0333, 0x0333, 0x034b, 0x034b, 0x034b, 0x034b, 0x034b, 0x034b, - 0x034b, 0x034b, 0x034b, 0x034b, 0x034b, 0x034b, 0x035a, 0x035a, - 0x035a, 0x036c, 0x036c, 0x036c, 0x036c, 0x0378, 0x037e, 0x038a, - 0x038a, 0x038a, 0x038a, 0x038a, 0x038a, 0x038a, 0x038a, 0x038a, - 0x038a, 0x038a, 0x03cc, 0x03f3, 0x0417, 0x043e, 0x044a, 0x0474, -} // Size: 376 bytes + 0x0333, 0x0333, 0x0333, 0x034b, 0x034b, 0x034b, 0x034b, 0x034b, + 0x034b, 0x034b, 0x034b, 0x034b, 0x034b, 0x034b, 0x034b, 0x034b, + 0x035a, 0x035a, 0x035a, 0x036c, 0x036c, 0x036c, 0x036c, 0x0378, + 0x037e, 0x038a, 0x038a, 0x038a, 0x038a, 0x038a, 0x038a, 0x038a, + 0x038a, 0x038a, 0x038a, 0x038a, 0x038a, 0x03cc, 0x03f3, 0x0417, + 0x043e, 0x044a, 0x0474, +} // Size: 382 bytes const knScriptStr string = "" + // Size: 3811 bytes "ಅರೇಬಿಕ್ಇಂಪೀರಿಯಲ್ ಅರೆಮಾಯಿಕ್ಅರ್ಮೇನಿಯನ್ಅವೆಸ್ತಾನ್ಬಾಲಿನೀಸ್ಬಾಟಕ್ಬೆಂಗಾಲಿಬ್ಲಿಸ್" + @@ -30339,33 +32202,34 @@ const knScriptStr string = "" + // Size: 3811 bytes "ಮ್ಯಿಇನ್\u200dಹೆರಿಟೆಡ್ಗಣೀತ ಸಂಕೇತಲಿಪಿಎಮೋಜಿಸಂಕೇತಗಳುಅಲಿಖಿತಸಾಮಾನ್ಯಅಪರಿಚಿತ ಲ" + "ಿಪಿ" -var knScriptIdx = []uint16{ // 176 elements +var knScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0015, 0x004c, 0x006a, 0x0085, 0x009d, 0x009d, 0x009d, 0x00ac, 0x00c1, 0x00c1, 0x00ee, 0x0106, 0x011e, 0x0130, 0x0145, 0x0157, 0x0163, 0x01db, 0x01ea, 0x01f6, 0x0208, 0x021a, 0x0232, 0x0250, 0x0268, 0x02c5, 0x02dd, 0x02ef, 0x02ef, 0x0326, 0x0360, 0x03a3, 0x03a3, 0x03be, 0x03f2, - 0x040d, 0x0431, 0x0443, 0x0443, 0x0455, 0x046a, 0x0482, 0x048e, - 0x04a9, 0x04b5, 0x04c4, 0x04e6, 0x0514, 0x0514, 0x0526, 0x0538, - 0x0538, 0x055a, 0x0588, 0x05b9, 0x05c8, 0x05f6, 0x05ff, 0x0614, + 0x040d, 0x0431, 0x0431, 0x0443, 0x0443, 0x0455, 0x046a, 0x0482, + 0x048e, 0x04a9, 0x04b5, 0x04c4, 0x04e6, 0x0514, 0x0514, 0x0526, + 0x0538, 0x0538, 0x055a, 0x0588, 0x05b9, 0x05c8, 0x05f6, 0x05ff, // Entry 40 - 7F - 0x0629, 0x0629, 0x063c, 0x064e, 0x0663, 0x0672, 0x0672, 0x0681, - 0x0696, 0x0696, 0x06a2, 0x06ae, 0x06ba, 0x06ee, 0x0719, 0x0731, - 0x0743, 0x0752, 0x0768, 0x0781, 0x0781, 0x0781, 0x0796, 0x07ab, - 0x07ab, 0x07c0, 0x07d8, 0x07d8, 0x080c, 0x080c, 0x080c, 0x082a, - 0x083c, 0x083c, 0x0857, 0x0863, 0x0863, 0x087f, 0x087f, 0x089d, - 0x089d, 0x089d, 0x089d, 0x089d, 0x08af, 0x08af, 0x08bb, 0x08d1, - 0x08e6, 0x08f5, 0x08f5, 0x0910, 0x0910, 0x0910, 0x093e, 0x0957, - 0x099d, 0x09c8, 0x09ea, 0x0a05, 0x0a3c, 0x0a88, 0x0a9d, 0x0abb, + 0x0614, 0x0629, 0x0629, 0x063c, 0x064e, 0x0663, 0x0672, 0x0672, + 0x0681, 0x0696, 0x0696, 0x06a2, 0x06ae, 0x06ba, 0x06ee, 0x0719, + 0x0731, 0x0743, 0x0752, 0x0768, 0x0781, 0x0781, 0x0781, 0x0796, + 0x07ab, 0x07ab, 0x07c0, 0x07d8, 0x07d8, 0x080c, 0x080c, 0x080c, + 0x082a, 0x083c, 0x083c, 0x0857, 0x0863, 0x0863, 0x087f, 0x087f, + 0x089d, 0x089d, 0x089d, 0x089d, 0x089d, 0x08af, 0x08af, 0x08bb, + 0x08d1, 0x08e6, 0x08f5, 0x08f5, 0x0910, 0x0910, 0x0910, 0x093e, + 0x0957, 0x099d, 0x09c8, 0x09ea, 0x0a05, 0x0a3c, 0x0a88, 0x0a9d, // Entry 80 - BF - 0x0acd, 0x0ae5, 0x0af4, 0x0af4, 0x0b0f, 0x0b33, 0x0b4b, 0x0b4b, - 0x0b4b, 0x0b4b, 0x0b5a, 0x0b5a, 0x0b75, 0x0b97, 0x0baf, 0x0bec, - 0x0c17, 0x0c3f, 0x0c5a, 0x0c5a, 0x0c6d, 0x0c90, 0x0c9f, 0x0c9f, - 0x0cbe, 0x0cd0, 0x0cee, 0x0d06, 0x0d21, 0x0d2d, 0x0d39, 0x0d4e, - 0x0d4e, 0x0d69, 0x0d75, 0x0d9d, 0x0d9d, 0x0d9d, 0x0dcb, 0x0e21, - 0x0e27, 0x0e4b, 0x0e73, 0x0e82, 0x0e9a, 0x0eac, 0x0ec1, 0x0ee3, -} // Size: 376 bytes + 0x0abb, 0x0acd, 0x0ae5, 0x0af4, 0x0af4, 0x0b0f, 0x0b33, 0x0b4b, + 0x0b4b, 0x0b4b, 0x0b4b, 0x0b5a, 0x0b5a, 0x0b5a, 0x0b75, 0x0b97, + 0x0baf, 0x0bec, 0x0c17, 0x0c3f, 0x0c5a, 0x0c5a, 0x0c6d, 0x0c90, + 0x0c9f, 0x0c9f, 0x0cbe, 0x0cd0, 0x0cee, 0x0d06, 0x0d21, 0x0d2d, + 0x0d39, 0x0d4e, 0x0d4e, 0x0d69, 0x0d75, 0x0d9d, 0x0d9d, 0x0d9d, + 0x0dcb, 0x0e21, 0x0e27, 0x0e27, 0x0e4b, 0x0e73, 0x0e82, 0x0e9a, + 0x0eac, 0x0ec1, 0x0ee3, +} // Size: 382 bytes const koScriptStr string = "" + // Size: 2803 bytes "아파카 문자코카시안 알바니아 문자아랍 문자아랍제국 문자아르메니아 문자아베스타 문자발리 문자바뭄 문자바사바흐 문자바타크 문자벵골 문" + @@ -30384,33 +32248,34 @@ const koScriptStr string = "" + // Size: 2803 bytes " 문자텔루구 문자텡과르 문자티피나그 문자타갈로그 문자타나 문자타이 문자티베트 문자티르후타 문자우가리트 문자바이 문자시화법바랑 크시" + "티 문자울레아이고대 페르시아 문자수메르-아카드어 설형문자이 문자구전 문자수학 기호이모티콘기호구전일반 문자알 수 없는 문자" -var koScriptIdx = []uint16{ // 176 elements +var koScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0010, 0x0030, 0x0030, 0x003d, 0x0050, 0x0066, 0x0079, 0x0086, 0x0093, 0x00a6, 0x00b6, 0x00c3, 0x00c3, 0x00d9, 0x00e5, 0x00ee, 0x00fe, 0x010b, 0x011b, 0x012b, 0x0145, 0x0152, 0x015c, 0x016c, 0x0175, 0x0182, 0x0195, 0x01a2, 0x01c7, 0x01dd, 0x01ed, 0x0203, 0x0220, 0x023d, 0x025a, 0x026a, 0x0280, 0x029d, - 0x02ad, 0x02bd, 0x02ca, 0x02da, 0x02ea, 0x02fd, 0x0310, 0x031d, - 0x0323, 0x0329, 0x0339, 0x0346, 0x0353, 0x0353, 0x0363, 0x036f, - 0x038b, 0x039f, 0x03a5, 0x03bc, 0x03cc, 0x03e6, 0x03ec, 0x03f9, + 0x02ad, 0x02bd, 0x02bd, 0x02ca, 0x02da, 0x02ea, 0x02fd, 0x0310, + 0x031d, 0x0323, 0x0329, 0x0339, 0x0346, 0x0353, 0x0353, 0x0363, + 0x036f, 0x038b, 0x039f, 0x03a5, 0x03bc, 0x03cc, 0x03e6, 0x03ec, // Entry 40 - 7F - 0x0406, 0x0413, 0x0424, 0x0430, 0x0443, 0x0453, 0x0463, 0x0473, - 0x047c, 0x048c, 0x049c, 0x04a9, 0x04b6, 0x04c9, 0x04e2, 0x04eb, - 0x04f8, 0x0505, 0x0515, 0x0525, 0x0538, 0x0545, 0x0555, 0x0565, - 0x0578, 0x058b, 0x059b, 0x059b, 0x05af, 0x05bc, 0x05cf, 0x05df, - 0x05f2, 0x05f2, 0x05ff, 0x0609, 0x0616, 0x0630, 0x0630, 0x0640, - 0x065e, 0x0671, 0x0671, 0x0685, 0x0692, 0x069f, 0x06ac, 0x06bd, - 0x06c9, 0x06d9, 0x06d9, 0x06ef, 0x06ff, 0x06ff, 0x0713, 0x0723, - 0x073a, 0x0751, 0x0765, 0x0778, 0x078f, 0x07a9, 0x07b6, 0x07c2, + 0x03f9, 0x0406, 0x0413, 0x0424, 0x0430, 0x0443, 0x0453, 0x0463, + 0x0473, 0x047c, 0x048c, 0x049c, 0x04a9, 0x04b6, 0x04c9, 0x04e2, + 0x04eb, 0x04f8, 0x0505, 0x0515, 0x0525, 0x0538, 0x0545, 0x0555, + 0x0565, 0x0578, 0x058b, 0x059b, 0x059b, 0x05af, 0x05bc, 0x05cf, + 0x05df, 0x05f2, 0x05f2, 0x05ff, 0x0609, 0x0616, 0x0630, 0x0630, + 0x0640, 0x065e, 0x0671, 0x0671, 0x0685, 0x0692, 0x069f, 0x06ac, + 0x06bd, 0x06c9, 0x06d9, 0x06d9, 0x06ef, 0x06ff, 0x06ff, 0x0713, + 0x0723, 0x073a, 0x0751, 0x0765, 0x0778, 0x078f, 0x07a9, 0x07b6, // Entry 80 - BF - 0x07cc, 0x07df, 0x07e8, 0x0806, 0x081f, 0x082c, 0x083c, 0x084c, - 0x0855, 0x0868, 0x0878, 0x088c, 0x0899, 0x08ac, 0x08bc, 0x08e2, - 0x08f9, 0x0910, 0x0923, 0x0933, 0x0944, 0x0955, 0x0962, 0x0972, - 0x0989, 0x0999, 0x09a9, 0x09bc, 0x09cf, 0x09dc, 0x09e9, 0x09f9, - 0x0a0c, 0x0a1f, 0x0a2c, 0x0a35, 0x0a4c, 0x0a58, 0x0a72, 0x0a95, - 0x0a9f, 0x0aac, 0x0ab9, 0x0ac5, 0x0acb, 0x0ad1, 0x0ade, 0x0af3, -} // Size: 376 bytes + 0x07c2, 0x07cc, 0x07df, 0x07e8, 0x0806, 0x081f, 0x082c, 0x083c, + 0x084c, 0x0855, 0x0868, 0x0878, 0x088c, 0x088c, 0x0899, 0x08ac, + 0x08bc, 0x08e2, 0x08f9, 0x0910, 0x0923, 0x0933, 0x0944, 0x0955, + 0x0962, 0x0972, 0x0989, 0x0999, 0x09a9, 0x09bc, 0x09cf, 0x09dc, + 0x09e9, 0x09f9, 0x0a0c, 0x0a1f, 0x0a2c, 0x0a35, 0x0a4c, 0x0a58, + 0x0a72, 0x0a95, 0x0a9f, 0x0a9f, 0x0aac, 0x0ab9, 0x0ac5, 0x0acb, + 0x0ad1, 0x0ade, 0x0af3, +} // Size: 382 bytes const kyScriptStr string = "" + // Size: 608 bytes "АрабАрмянБенгалБопомофоБрейлКириллДеванагариЭфиопГрузинГрекГужаратиГурму" + @@ -30419,33 +32284,34 @@ const kyScriptStr string = "" + // Size: 608 bytes "СингалаТамилТелуТаанаТайТибетМатематикалык мааниБыйтыкчаБелгилерЖазылба" + "ганЖалпыБелгисиз жазуу" -var kyScriptIdx = []uint16{ // 176 elements +var kyScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x001e, 0x001e, 0x001e, 0x002e, 0x002e, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0044, 0x0044, 0x0058, 0x0058, 0x0058, 0x0058, 0x0058, 0x0058, 0x0058, 0x0062, 0x0062, - 0x006e, 0x006e, 0x006e, 0x006e, 0x0076, 0x0086, 0x0094, 0x009c, - 0x00a8, 0x00b0, 0x00b0, 0x00c4, 0x00db, 0x00db, 0x00e5, 0x00f5, - 0x00f5, 0x00f5, 0x011e, 0x011e, 0x011e, 0x011e, 0x0128, 0x0128, + 0x006e, 0x006e, 0x006e, 0x006e, 0x006e, 0x0076, 0x0086, 0x0094, + 0x009c, 0x00a8, 0x00b0, 0x00b0, 0x00c4, 0x00db, 0x00db, 0x00e5, + 0x00f5, 0x00f5, 0x00f5, 0x011e, 0x011e, 0x011e, 0x011e, 0x0128, // Entry 40 - 7F - 0x0132, 0x0132, 0x0132, 0x0142, 0x0142, 0x014a, 0x014a, 0x0158, - 0x0162, 0x0162, 0x0162, 0x0162, 0x0168, 0x0168, 0x0168, 0x0172, + 0x0128, 0x0132, 0x0132, 0x0132, 0x0142, 0x0142, 0x014a, 0x014a, + 0x0158, 0x0162, 0x0162, 0x0162, 0x0162, 0x0168, 0x0168, 0x0168, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, 0x0172, - 0x0184, 0x0184, 0x0190, 0x0190, 0x0190, 0x0190, 0x0190, 0x019e, + 0x0172, 0x0184, 0x0184, 0x0190, 0x0190, 0x0190, 0x0190, 0x0190, 0x019e, 0x019e, 0x019e, 0x019e, 0x019e, 0x019e, 0x019e, 0x019e, - 0x019e, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, + 0x019e, 0x019e, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, // Entry 80 - BF 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, 0x01a8, - 0x01a8, 0x01a8, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, - 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01c0, 0x01c0, - 0x01c0, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01d2, 0x01d8, 0x01e2, - 0x01e2, 0x01e2, 0x01e2, 0x01e2, 0x01e2, 0x01e2, 0x01e2, 0x01e2, - 0x01e2, 0x01e2, 0x0207, 0x0217, 0x0227, 0x023b, 0x0245, 0x0260, -} // Size: 376 bytes + 0x01a8, 0x01a8, 0x01a8, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, + 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, 0x01b6, + 0x01c0, 0x01c0, 0x01c0, 0x01c8, 0x01c8, 0x01c8, 0x01c8, 0x01d2, + 0x01d8, 0x01e2, 0x01e2, 0x01e2, 0x01e2, 0x01e2, 0x01e2, 0x01e2, + 0x01e2, 0x01e2, 0x01e2, 0x01e2, 0x01e2, 0x0207, 0x0217, 0x0227, + 0x023b, 0x0245, 0x0260, +} // Size: 382 bytes const loScriptStr string = "" + // Size: 3937 bytes "ອັບຟາກາອາຣາບິກອິມພີຮຽນ ອາເມອິກອາເມນຽນອະເວສຕະບາລີບາມູມບັດຊາບາຕັກເບັງກາບລິ" + @@ -30468,33 +32334,34 @@ const loScriptStr string = "" + // Size: 3937 bytes "ິຕິໂອລີເອເປຮເຊຍໂບຮານອັກສອນຮູບປລີ່ມສຸເມເຮຍ-ອັດຄາເດຍຍີອິນເຮຮິດເຄື່ອງໝາຍທ" + "າງຄະນິດສາດອີໂມຈິສັນຍາລັກບໍ່ມີພາສາຂຽນສາມັນແບບຂຽນທີ່ບໍ່ຮູ້ຈັກ" -var loScriptIdx = []uint16{ // 176 elements +var loScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0015, 0x0015, 0x0015, 0x002a, 0x0058, 0x006d, 0x0082, 0x008e, 0x009d, 0x00ac, 0x00bb, 0x00cd, 0x00cd, 0x00ee, 0x0100, 0x0112, 0x011e, 0x012d, 0x013c, 0x014b, 0x01ab, 0x01ba, 0x01c3, 0x01d5, 0x01e1, 0x01f3, 0x0202, 0x021a, 0x0269, 0x0287, 0x0299, 0x02c0, 0x02e4, 0x030b, 0x0335, 0x0335, 0x0350, 0x0374, - 0x0383, 0x03a1, 0x03b0, 0x03bf, 0x03cb, 0x03e3, 0x03f8, 0x0401, - 0x0413, 0x041c, 0x0434, 0x0455, 0x0479, 0x0479, 0x048b, 0x04a3, - 0x04d0, 0x04eb, 0x0530, 0x0554, 0x0566, 0x0587, 0x0593, 0x059f, + 0x0383, 0x03a1, 0x03a1, 0x03b0, 0x03bf, 0x03cb, 0x03e3, 0x03f8, + 0x0401, 0x0413, 0x041c, 0x0434, 0x0455, 0x0479, 0x0479, 0x048b, + 0x04a3, 0x04d0, 0x04eb, 0x0530, 0x0554, 0x0566, 0x0587, 0x0593, // Entry 40 - 7F - 0x05b4, 0x05c9, 0x05d2, 0x05ea, 0x05ff, 0x060b, 0x061a, 0x062f, - 0x0644, 0x0653, 0x0662, 0x0674, 0x067d, 0x06a5, 0x06c4, 0x06d3, - 0x06df, 0x06ee, 0x06fd, 0x070f, 0x0721, 0x072d, 0x073c, 0x074b, - 0x074b, 0x075d, 0x0772, 0x0772, 0x0796, 0x07a5, 0x07d5, 0x07ea, - 0x0805, 0x0805, 0x0817, 0x0820, 0x082c, 0x0847, 0x0847, 0x0856, - 0x0886, 0x08a1, 0x08a1, 0x08ba, 0x08cc, 0x08d8, 0x08ea, 0x08fc, - 0x0917, 0x0926, 0x0926, 0x0926, 0x093e, 0x093e, 0x095c, 0x096f, - 0x09ab, 0x09d5, 0x09f3, 0x0a08, 0x0a2f, 0x0a6e, 0x0a7d, 0x0a9b, + 0x059f, 0x05b4, 0x05c9, 0x05d2, 0x05ea, 0x05ff, 0x060b, 0x061a, + 0x062f, 0x0644, 0x0653, 0x0662, 0x0674, 0x067d, 0x06a5, 0x06c4, + 0x06d3, 0x06df, 0x06ee, 0x06fd, 0x070f, 0x0721, 0x072d, 0x073c, + 0x074b, 0x074b, 0x075d, 0x0772, 0x0772, 0x0796, 0x07a5, 0x07d5, + 0x07ea, 0x0805, 0x0805, 0x0817, 0x0820, 0x082c, 0x0847, 0x0847, + 0x0856, 0x0886, 0x08a1, 0x08a1, 0x08ba, 0x08cc, 0x08d8, 0x08ea, + 0x08fc, 0x0917, 0x0926, 0x0926, 0x0926, 0x093e, 0x093e, 0x095c, + 0x096f, 0x09ab, 0x09d5, 0x09f3, 0x0a08, 0x0a2f, 0x0a6e, 0x0a7d, // Entry 80 - BF - 0x0aaa, 0x0abf, 0x0ad1, 0x0afe, 0x0b16, 0x0b34, 0x0b43, 0x0b55, - 0x0b55, 0x0b6d, 0x0b82, 0x0ba3, 0x0bb2, 0x0bd3, 0x0be2, 0x0c12, - 0x0c3c, 0x0c66, 0x0c7e, 0x0c8d, 0x0c99, 0x0cb1, 0x0cc0, 0x0cd2, - 0x0ce4, 0x0cf6, 0x0d0b, 0x0d20, 0x0d35, 0x0d41, 0x0d47, 0x0d5c, - 0x0d6e, 0x0d83, 0x0d89, 0x0dcb, 0x0de9, 0x0dfb, 0x0e1c, 0x0e74, - 0x0e7a, 0x0e92, 0x0ece, 0x0ee0, 0x0ef8, 0x0f1c, 0x0f2b, 0x0f61, -} // Size: 376 bytes + 0x0a9b, 0x0aaa, 0x0abf, 0x0ad1, 0x0afe, 0x0b16, 0x0b34, 0x0b43, + 0x0b55, 0x0b55, 0x0b6d, 0x0b82, 0x0ba3, 0x0ba3, 0x0bb2, 0x0bd3, + 0x0be2, 0x0c12, 0x0c3c, 0x0c66, 0x0c7e, 0x0c8d, 0x0c99, 0x0cb1, + 0x0cc0, 0x0cd2, 0x0ce4, 0x0cf6, 0x0d0b, 0x0d20, 0x0d35, 0x0d41, + 0x0d47, 0x0d5c, 0x0d6e, 0x0d83, 0x0d89, 0x0dcb, 0x0de9, 0x0dfb, + 0x0e1c, 0x0e74, 0x0e7a, 0x0e7a, 0x0e92, 0x0ece, 0x0ee0, 0x0ef8, + 0x0f1c, 0x0f2b, 0x0f61, +} // Size: 382 bytes const ltScriptStr string = "" + // Size: 1663 bytes "AfakaKaukazo Albanijosarabųimperinė aramaikųarmėnųavestanoBaliečiųBamumB" + @@ -30520,73 +32387,75 @@ const ltScriptStr string = "" + // Size: 1663 bytes "mero Akado dantiraštisjipaveldėtasmatematiniai simboliaijaustukaisimboli" + "ųneparašytabendrinežinomi rašmenys" -var ltScriptIdx = []uint16{ // 176 elements +var ltScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0005, 0x0016, 0x0016, 0x001c, 0x002f, 0x0037, 0x003f, 0x0049, 0x004e, 0x0057, 0x005c, 0x0064, 0x0064, 0x0079, 0x0081, 0x0087, 0x008e, 0x0097, 0x009c, 0x00a2, 0x00cc, 0x00d2, 0x00d6, 0x00df, 0x00e3, 0x00e9, 0x00ee, 0x00f6, 0x0118, 0x0122, 0x012b, 0x0140, 0x014f, 0x015d, 0x016f, 0x0177, 0x017e, 0x018e, - 0x0196, 0x01a0, 0x01a5, 0x01ab, 0x01b2, 0x01bd, 0x01c4, 0x01ca, - 0x01d0, 0x01d3, 0x01d9, 0x01ea, 0x01f9, 0x01f9, 0x0201, 0x0209, - 0x0220, 0x022b, 0x023e, 0x024d, 0x0252, 0x0260, 0x026e, 0x0278, + 0x0196, 0x01a0, 0x01a0, 0x01a5, 0x01ab, 0x01b2, 0x01bd, 0x01c4, + 0x01ca, 0x01d0, 0x01d3, 0x01d9, 0x01ea, 0x01f9, 0x01f9, 0x0201, + 0x0209, 0x0220, 0x022b, 0x023e, 0x024d, 0x0252, 0x0260, 0x026e, // Entry 40 - 7F - 0x027f, 0x0286, 0x028e, 0x0296, 0x029e, 0x02a5, 0x02ab, 0x02b2, - 0x02bf, 0x02c5, 0x02cb, 0x02cf, 0x02da, 0x02e9, 0x02f7, 0x02fe, - 0x0304, 0x0309, 0x0315, 0x0321, 0x0327, 0x032b, 0x0331, 0x0337, - 0x0341, 0x034a, 0x0352, 0x0352, 0x0363, 0x0368, 0x037f, 0x0387, - 0x0391, 0x0395, 0x039d, 0x03a1, 0x03a4, 0x03b0, 0x03b0, 0x03bb, - 0x03d3, 0x03dd, 0x03dd, 0x03e6, 0x03ea, 0x03f0, 0x03f5, 0x03fd, - 0x0402, 0x0408, 0x0408, 0x040f, 0x0417, 0x0422, 0x0431, 0x0439, - 0x044c, 0x045b, 0x0466, 0x046e, 0x047e, 0x0490, 0x0496, 0x04a0, + 0x0278, 0x027f, 0x0286, 0x028e, 0x0296, 0x029e, 0x02a5, 0x02ab, + 0x02b2, 0x02bf, 0x02c5, 0x02cb, 0x02cf, 0x02da, 0x02e9, 0x02f7, + 0x02fe, 0x0304, 0x0309, 0x0315, 0x0321, 0x0327, 0x032b, 0x0331, + 0x0337, 0x0341, 0x034a, 0x0352, 0x0352, 0x0363, 0x0368, 0x037f, + 0x0387, 0x0391, 0x0395, 0x039d, 0x03a1, 0x03a4, 0x03b0, 0x03b0, + 0x03bb, 0x03d3, 0x03dd, 0x03dd, 0x03e6, 0x03ea, 0x03f0, 0x03f5, + 0x03fd, 0x0402, 0x0408, 0x0408, 0x040f, 0x0417, 0x0422, 0x0431, + 0x0439, 0x044c, 0x045b, 0x0466, 0x046e, 0x047e, 0x0490, 0x0496, // Entry 80 - BF - 0x04a5, 0x04b1, 0x04b7, 0x04cd, 0x04d7, 0x04e7, 0x04ee, 0x04f6, - 0x04fd, 0x0506, 0x050e, 0x051a, 0x0520, 0x052c, 0x0531, 0x0546, - 0x0553, 0x055e, 0x0566, 0x056b, 0x0571, 0x0586, 0x058d, 0x0593, - 0x059a, 0x05a1, 0x05a8, 0x05af, 0x05b8, 0x05bc, 0x05c1, 0x05cd, - 0x05d4, 0x05dc, 0x05df, 0x05eb, 0x05f8, 0x05fe, 0x060c, 0x0626, - 0x0628, 0x0633, 0x0649, 0x0652, 0x065b, 0x0666, 0x066c, 0x067f, -} // Size: 376 bytes - -const lvScriptStr string = "" + // Size: 794 bytes + 0x04a0, 0x04a5, 0x04b1, 0x04b7, 0x04cd, 0x04d7, 0x04e7, 0x04ee, + 0x04f6, 0x04fd, 0x0506, 0x050e, 0x051a, 0x051a, 0x0520, 0x052c, + 0x0531, 0x0546, 0x0553, 0x055e, 0x0566, 0x056b, 0x0571, 0x0586, + 0x058d, 0x0593, 0x059a, 0x05a1, 0x05a8, 0x05af, 0x05b8, 0x05bc, + 0x05c1, 0x05cd, 0x05d4, 0x05dc, 0x05df, 0x05eb, 0x05f8, 0x05fe, + 0x060c, 0x0626, 0x0628, 0x0628, 0x0633, 0x0649, 0x0652, 0x065b, + 0x0666, 0x066c, 0x067f, +} // Size: 382 bytes + +const lvScriptStr string = "" + // Size: 798 bytes "arābuaramiešuarmēņubaliešubengāļubopomofobrahmiBraila rakstsirokēzukoptu" + "kirilicasenslāvudevānagāridemotiskais rakstshierātiskais rakstsēģiptiešu" + - " hieroglifietiopiešugruzīnugotugrieķugudžaratupandžabuķīniešu hanbhangil" + - "aķīniešuhanu vienkāršotāhanu tradicionālāivritshiraganakatakana vai hira" + - "ganasenungāruvecitāļudžamojaviešujapāņukatakanakhmerukannadukorejiešulao" + - "siešulatīņulineārā Alineārā BlīdiešumaijumalajalumongoļuMūna rakstsbirmi" + - "ešuogamiskais rakstsorijuosmaņu turkufeniķiešurongorongorūnu rakstssamar" + - "iešusingāļuzundusīriešurietumsīriešuaustrumsīriešutamilutelugutagalutaan" + - "atajutibetiešusenperiešušumeru-akadiešu ķīļrakstsjimantotāmatemātiskais " + - "pierakstsemocijzīmessimbolibez rakstībasvispārējānezināma rakstība" - -var lvScriptIdx = []uint16{ // 176 elements + " hieroglifietiopiešugruzīnugotugrieķugudžaratupandžabuhaņu ar bopomofoha" + + "ngilsķīniešuhaņu vienkāršotāhaņu tradicionālāivritshiraganakatakana vai " + + "hiraganasenungāruvecitāļudžamojaviešujapāņukatakanakhmerukannadukorejieš" + + "ulaosiešulatīņulineārā Alineārā BlīdiešumaijumalajalumongoļuMūna rakstsb" + + "irmiešuogamiskais rakstsorijuosmaņu turkufeniķiešurongorongorūnu rakstss" + + "amariešusingāļuzundusīriešurietumsīriešuaustrumsīriešutamilutelugutagalu" + + "tānatajutibetiešusenperiešušumeru-akadiešu ķīļrakstsjimantotāmatemātiska" + + "is pierakstsemocijzīmessimbolibez rakstībasvispārējānezināma rakstība" + +var lvScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x000f, 0x0017, 0x0017, 0x001f, 0x001f, 0x001f, 0x001f, 0x0028, 0x0028, 0x0028, 0x0030, 0x0036, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x004b, 0x004b, 0x0050, 0x0050, 0x0058, 0x0061, 0x006d, 0x006d, 0x006d, 0x007f, 0x0093, 0x00aa, 0x00aa, 0x00b4, 0x00b4, - 0x00bc, 0x00bc, 0x00c0, 0x00c0, 0x00c7, 0x00d1, 0x00da, 0x00e9, - 0x00f0, 0x00fa, 0x00fa, 0x010d, 0x0120, 0x0120, 0x0126, 0x012e, - 0x012e, 0x012e, 0x0143, 0x014d, 0x014d, 0x0157, 0x015d, 0x0165, + 0x00bc, 0x00bc, 0x00bc, 0x00c0, 0x00c0, 0x00c7, 0x00d1, 0x00da, + 0x00eb, 0x00f2, 0x00fc, 0x00fc, 0x0110, 0x0124, 0x0124, 0x012a, + 0x0132, 0x0132, 0x0132, 0x0147, 0x0151, 0x0151, 0x015b, 0x0161, // Entry 40 - 7F - 0x016d, 0x016d, 0x016d, 0x0175, 0x0175, 0x017b, 0x017b, 0x0182, - 0x018c, 0x018c, 0x018c, 0x018c, 0x0195, 0x0195, 0x0195, 0x019d, - 0x019d, 0x019d, 0x01a8, 0x01b3, 0x01b3, 0x01b3, 0x01b3, 0x01bc, - 0x01bc, 0x01bc, 0x01bc, 0x01bc, 0x01c1, 0x01c1, 0x01c1, 0x01c1, - 0x01c9, 0x01c9, 0x01d1, 0x01dd, 0x01dd, 0x01dd, 0x01dd, 0x01e6, - 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01f7, 0x01f7, - 0x01f7, 0x01fc, 0x01fc, 0x0209, 0x0209, 0x0209, 0x0209, 0x0209, - 0x0209, 0x0209, 0x0209, 0x0214, 0x0214, 0x0214, 0x0214, 0x021e, + 0x0169, 0x0171, 0x0171, 0x0171, 0x0179, 0x0179, 0x017f, 0x017f, + 0x0186, 0x0190, 0x0190, 0x0190, 0x0190, 0x0199, 0x0199, 0x0199, + 0x01a1, 0x01a1, 0x01a1, 0x01ac, 0x01b7, 0x01b7, 0x01b7, 0x01b7, + 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c5, 0x01c5, 0x01c5, + 0x01c5, 0x01cd, 0x01cd, 0x01d5, 0x01e1, 0x01e1, 0x01e1, 0x01e1, + 0x01ea, 0x01ea, 0x01ea, 0x01ea, 0x01ea, 0x01ea, 0x01ea, 0x01fb, + 0x01fb, 0x01fb, 0x0200, 0x0200, 0x020d, 0x020d, 0x020d, 0x020d, + 0x020d, 0x020d, 0x020d, 0x020d, 0x0218, 0x0218, 0x0218, 0x0218, // Entry 80 - BF - 0x022a, 0x0234, 0x0234, 0x0234, 0x0234, 0x0234, 0x0234, 0x0234, - 0x0234, 0x0234, 0x023d, 0x023d, 0x0242, 0x0242, 0x024b, 0x024b, - 0x025a, 0x026a, 0x026a, 0x026a, 0x026a, 0x026a, 0x0270, 0x0270, - 0x0270, 0x0276, 0x0276, 0x0276, 0x027c, 0x0281, 0x0285, 0x028f, - 0x028f, 0x028f, 0x028f, 0x028f, 0x028f, 0x028f, 0x029a, 0x02b8, - 0x02ba, 0x02c2, 0x02da, 0x02e6, 0x02ed, 0x02fb, 0x0307, 0x031a, -} // Size: 376 bytes + 0x0222, 0x022e, 0x0238, 0x0238, 0x0238, 0x0238, 0x0238, 0x0238, + 0x0238, 0x0238, 0x0238, 0x0241, 0x0241, 0x0241, 0x0246, 0x0246, + 0x024f, 0x024f, 0x025e, 0x026e, 0x026e, 0x026e, 0x026e, 0x026e, + 0x0274, 0x0274, 0x0274, 0x027a, 0x027a, 0x027a, 0x0280, 0x0285, + 0x0289, 0x0293, 0x0293, 0x0293, 0x0293, 0x0293, 0x0293, 0x0293, + 0x029e, 0x02bc, 0x02be, 0x02be, 0x02c6, 0x02de, 0x02ea, 0x02f1, + 0x02ff, 0x030b, 0x031e, +} // Size: 382 bytes const mkScriptStr string = "" + // Size: 3531 bytes "афакакавкаскоалбанскиарапско писмоцарскоарамејскиерменско писмоавестанск" + @@ -30616,33 +32485,34 @@ const mkScriptStr string = "" + // Size: 3531 bytes "ероакадско клинестојинаследеноматематичка нотацијаемоџисимболибез писмо" + "општонепознато писмо" -var mkScriptIdx = []uint16{ // 176 elements +var mkScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x000a, 0x002a, 0x002a, 0x0043, 0x0061, 0x007c, 0x0090, 0x009e, 0x00ae, 0x00b6, 0x00c4, 0x00e1, 0x00e1, 0x00f7, 0x0107, 0x0111, 0x012a, 0x0138, 0x0148, 0x015a, 0x017b, 0x0189, 0x0195, 0x01a7, 0x01af, 0x01bd, 0x01cd, 0x01e8, 0x0215, 0x0229, 0x023d, 0x026a, 0x028d, 0x02b2, 0x02d9, 0x02ed, 0x0308, 0x0325, - 0x0340, 0x0352, 0x035e, 0x036a, 0x037f, 0x038f, 0x039d, 0x03a5, - 0x03b1, 0x03c8, 0x03de, 0x0410, 0x0437, 0x0437, 0x0454, 0x0464, - 0x048b, 0x04ae, 0x04cf, 0x04e9, 0x04f9, 0x0511, 0x0519, 0x0529, + 0x0340, 0x0352, 0x0352, 0x035e, 0x036a, 0x037f, 0x038f, 0x039d, + 0x03a5, 0x03b1, 0x03c8, 0x03de, 0x0410, 0x0437, 0x0437, 0x0454, + 0x0464, 0x048b, 0x04ae, 0x04cf, 0x04e9, 0x04f9, 0x0511, 0x0519, // Entry 40 - 7F - 0x0544, 0x0556, 0x0563, 0x0573, 0x0581, 0x059a, 0x05a4, 0x05b2, - 0x05cd, 0x05db, 0x05e5, 0x05f1, 0x0608, 0x062b, 0x0648, 0x0665, - 0x0677, 0x0681, 0x0694, 0x06a7, 0x06bb, 0x06c7, 0x06d5, 0x06e3, - 0x06f3, 0x0705, 0x0719, 0x0719, 0x073e, 0x074c, 0x0771, 0x0783, - 0x07a6, 0x07ae, 0x07cb, 0x07d7, 0x07dd, 0x07ef, 0x07ef, 0x080e, - 0x0834, 0x0848, 0x0848, 0x085f, 0x0865, 0x086d, 0x0875, 0x0882, - 0x0898, 0x08b5, 0x08b5, 0x08c7, 0x08d9, 0x08f1, 0x0909, 0x0915, - 0x0942, 0x0973, 0x099e, 0x09b0, 0x09c2, 0x09e3, 0x09f3, 0x0a07, + 0x0529, 0x0544, 0x0556, 0x0563, 0x0573, 0x0581, 0x059a, 0x05a4, + 0x05b2, 0x05cd, 0x05db, 0x05e5, 0x05f1, 0x0608, 0x062b, 0x0648, + 0x0665, 0x0677, 0x0681, 0x0694, 0x06a7, 0x06bb, 0x06c7, 0x06d5, + 0x06e3, 0x06f3, 0x0705, 0x0719, 0x0719, 0x073e, 0x074c, 0x0771, + 0x0783, 0x07a6, 0x07ae, 0x07cb, 0x07d7, 0x07dd, 0x07ef, 0x07ef, + 0x080e, 0x0834, 0x0848, 0x0848, 0x085f, 0x0865, 0x086d, 0x0875, + 0x0882, 0x0898, 0x08b5, 0x08b5, 0x08c7, 0x08d9, 0x08f1, 0x0909, + 0x0915, 0x0942, 0x0973, 0x099e, 0x09b0, 0x09c2, 0x09e3, 0x09f3, // Entry 80 - BF - 0x0a13, 0x0a29, 0x0a35, 0x0a57, 0x0a71, 0x0a92, 0x0a9c, 0x0aa8, - 0x0ab2, 0x0ac2, 0x0adf, 0x0afa, 0x0b0c, 0x0b2b, 0x0b39, 0x0b60, - 0x0b7c, 0x0b98, 0x0bb0, 0x0bba, 0x0bc5, 0x0bdb, 0x0bf6, 0x0c08, - 0x0c17, 0x0c23, 0x0c31, 0x0c3f, 0x0c51, 0x0c59, 0x0c78, 0x0c93, - 0x0ca1, 0x0cb3, 0x0cb9, 0x0cd0, 0x0ce7, 0x0cf9, 0x0d13, 0x0d3e, - 0x0d42, 0x0d54, 0x0d7b, 0x0d85, 0x0d93, 0x0da4, 0x0dae, 0x0dcb, -} // Size: 376 bytes + 0x0a07, 0x0a13, 0x0a29, 0x0a35, 0x0a57, 0x0a71, 0x0a92, 0x0a9c, + 0x0aa8, 0x0ab2, 0x0ac2, 0x0adf, 0x0afa, 0x0afa, 0x0b0c, 0x0b2b, + 0x0b39, 0x0b60, 0x0b7c, 0x0b98, 0x0bb0, 0x0bba, 0x0bc5, 0x0bdb, + 0x0bf6, 0x0c08, 0x0c17, 0x0c23, 0x0c31, 0x0c3f, 0x0c51, 0x0c59, + 0x0c78, 0x0c93, 0x0ca1, 0x0cb3, 0x0cb9, 0x0cd0, 0x0ce7, 0x0cf9, + 0x0d13, 0x0d3e, 0x0d42, 0x0d42, 0x0d54, 0x0d7b, 0x0d85, 0x0d93, + 0x0da4, 0x0dae, 0x0dcb, +} // Size: 382 bytes const mlScriptStr string = "" + // Size: 3513 bytes "അറബിക്അർമിഅർമേനിയൻഅവെസ്ഥൻബാലിനീസ്ബട്ടക്ബംഗാളിബ്ലിസ് ചിത്ര ലിപിബോപ്പോമോഫോ" + @@ -30664,68 +32534,70 @@ const mlScriptStr string = "" + // Size: 3513 bytes "ോ അക്കാഡിയൻ ക്യുണിഫോംയിപാരമ്പര്യമായഗണിത രൂപംഇമോജിചിഹ്നങ്ങൾഎഴുതപ്പെടാത്" + "തത്സാധാരണഅജ്ഞാത ലിപി" -var mlScriptIdx = []uint16{ // 176 elements +var mlScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0012, 0x001e, 0x0036, 0x004b, 0x0063, 0x0063, 0x0063, 0x0075, 0x0087, 0x0087, 0x00b6, 0x00d4, 0x00ec, 0x0107, 0x011f, 0x0131, 0x013a, 0x017e, 0x018d, 0x0193, 0x01ab, 0x01c0, 0x01de, 0x0202, 0x021a, 0x0274, 0x028c, 0x02a7, 0x02a7, 0x02e1, 0x031b, 0x0352, 0x0352, 0x036d, 0x03a1, - 0x03bc, 0x03e3, 0x03f5, 0x03f5, 0x040d, 0x0428, 0x0440, 0x044c, - 0x045e, 0x0467, 0x0476, 0x04aa, 0x04cf, 0x04cf, 0x04e1, 0x04f3, - 0x04f3, 0x0515, 0x054f, 0x057a, 0x058c, 0x05b1, 0x05bd, 0x05d2, + 0x03bc, 0x03e3, 0x03e3, 0x03f5, 0x03f5, 0x040d, 0x0428, 0x0440, + 0x044c, 0x045e, 0x0467, 0x0476, 0x04aa, 0x04cf, 0x04cf, 0x04e1, + 0x04f3, 0x04f3, 0x0515, 0x054f, 0x057a, 0x058c, 0x05b1, 0x05bd, // Entry 40 - 7F - 0x05ed, 0x05ed, 0x05fd, 0x0618, 0x062d, 0x0639, 0x0639, 0x0648, - 0x065a, 0x065a, 0x0666, 0x0672, 0x067e, 0x06af, 0x06e0, 0x06f5, - 0x0704, 0x0713, 0x073b, 0x0754, 0x0754, 0x0754, 0x0763, 0x0775, - 0x0775, 0x0787, 0x079c, 0x079c, 0x07c4, 0x07c4, 0x07c4, 0x07e8, - 0x07fa, 0x07fa, 0x0812, 0x081b, 0x081b, 0x083d, 0x083d, 0x0855, - 0x0855, 0x0855, 0x0855, 0x0855, 0x0861, 0x0861, 0x086d, 0x0886, - 0x0895, 0x08a1, 0x08a1, 0x08bc, 0x08bc, 0x08bc, 0x08e4, 0x08f4, - 0x0919, 0x093e, 0x095a, 0x0972, 0x09a6, 0x09b2, 0x09c7, 0x09e5, + 0x05d2, 0x05ed, 0x05ed, 0x05fd, 0x0618, 0x062d, 0x0639, 0x0639, + 0x0648, 0x065a, 0x065a, 0x0666, 0x0672, 0x067e, 0x06af, 0x06e0, + 0x06f5, 0x0704, 0x0713, 0x073b, 0x0754, 0x0754, 0x0754, 0x0763, + 0x0775, 0x0775, 0x0787, 0x079c, 0x079c, 0x07c4, 0x07c4, 0x07c4, + 0x07e8, 0x07fa, 0x07fa, 0x0812, 0x081b, 0x081b, 0x083d, 0x083d, + 0x0855, 0x0855, 0x0855, 0x0855, 0x0855, 0x0861, 0x0861, 0x086d, + 0x0886, 0x0895, 0x08a1, 0x08a1, 0x08bc, 0x08bc, 0x08bc, 0x08e4, + 0x08f4, 0x0919, 0x093e, 0x095a, 0x0972, 0x09a6, 0x09b2, 0x09c7, // Entry 80 - BF - 0x09f7, 0x0a06, 0x0a12, 0x0a12, 0x0a2d, 0x0a48, 0x0a5a, 0x0a5a, - 0x0a5a, 0x0a5a, 0x0a69, 0x0a69, 0x0a84, 0x0aa6, 0x0ac1, 0x0b01, - 0x0b2b, 0x0b56, 0x0b6b, 0x0b6b, 0x0b7e, 0x0ba7, 0x0bb6, 0x0bb6, - 0x0bc5, 0x0bdd, 0x0bf2, 0x0c0a, 0x0c1c, 0x0c25, 0x0c31, 0x0c46, - 0x0c46, 0x0c67, 0x0c6d, 0x0c85, 0x0c85, 0x0c85, 0x0ca4, 0x0cee, - 0x0cf4, 0x0d18, 0x0d31, 0x0d40, 0x0d5b, 0x0d88, 0x0d9a, 0x0db9, -} // Size: 376 bytes - -const mnScriptStr string = "" + // Size: 666 bytes - "арабарменибенгалвопомофобрайлкириллдеванагариэтиопгүржгрекгүжаратигурмук" + - "хиханбхангулханхялбаршуулсан ханзуламжлалт ханзеврейхираганаяпон хэлний" + - " үеийн цагаан толгойжамояпонкатаканакхмерканнадасолонгослаослатинмалаяла" + - "ммонгол бичигмьянмарориясинхалатамилтэлүгүтанатайтөвдматематик тооллын " + - "системэможитэмдэгбичигдээгүйнийтлэгтодорхойгүй бичиг" - -var mnScriptIdx = []uint16{ // 176 elements + 0x09e5, 0x09f7, 0x0a06, 0x0a12, 0x0a12, 0x0a2d, 0x0a48, 0x0a5a, + 0x0a5a, 0x0a5a, 0x0a5a, 0x0a69, 0x0a69, 0x0a69, 0x0a84, 0x0aa6, + 0x0ac1, 0x0b01, 0x0b2b, 0x0b56, 0x0b6b, 0x0b6b, 0x0b7e, 0x0ba7, + 0x0bb6, 0x0bb6, 0x0bc5, 0x0bdd, 0x0bf2, 0x0c0a, 0x0c1c, 0x0c25, + 0x0c31, 0x0c46, 0x0c46, 0x0c67, 0x0c6d, 0x0c85, 0x0c85, 0x0c85, + 0x0ca4, 0x0cee, 0x0cf4, 0x0cf4, 0x0d18, 0x0d31, 0x0d40, 0x0d5b, + 0x0d88, 0x0d9a, 0x0db9, +} // Size: 382 bytes + +const mnScriptStr string = "" + // Size: 689 bytes + "арабарменибенгалвопомофобрайлкириллдеванагариэтиопгүржгрекгужаратигүрмүх" + + "Бопомофотой ханзхангыльханзхялбаршуулсан ханзуламжлалт ханзеврейхираган" + + "аяпон хэлний үеийн цагаан толгойжамояпонкатаканакхмерканнадасолонгослао" + + "слатинмалаяламмонгол бичигмьянмарориясинхалатамилтэлүгүтанатайтөвдматем" + + "атик тооллын системэможитэмдэгбичигдээгүйнийтлэгтодорхойгүй бичиг" + +var mnScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0020, 0x0020, 0x0020, 0x0030, 0x0030, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x0046, 0x0046, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x0064, 0x0064, - 0x006c, 0x006c, 0x006c, 0x006c, 0x0074, 0x0084, 0x0094, 0x009c, - 0x00a8, 0x00ae, 0x00ae, 0x00d1, 0x00ec, 0x00ec, 0x00f6, 0x0106, - 0x0106, 0x0106, 0x0140, 0x0140, 0x0140, 0x0140, 0x0148, 0x0148, + 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x0074, 0x0084, 0x0090, + 0x00af, 0x00bd, 0x00c5, 0x00c5, 0x00e8, 0x0103, 0x0103, 0x010d, + 0x011d, 0x011d, 0x011d, 0x0157, 0x0157, 0x0157, 0x0157, 0x015f, // Entry 40 - 7F - 0x0150, 0x0150, 0x0150, 0x0160, 0x0160, 0x016a, 0x016a, 0x0178, - 0x0188, 0x0188, 0x0188, 0x0188, 0x0190, 0x0190, 0x0190, 0x019a, - 0x019a, 0x019a, 0x019a, 0x019a, 0x019a, 0x019a, 0x019a, 0x019a, - 0x019a, 0x019a, 0x019a, 0x019a, 0x019a, 0x019a, 0x019a, 0x019a, - 0x01aa, 0x01aa, 0x01c1, 0x01c1, 0x01c1, 0x01c1, 0x01c1, 0x01cf, - 0x01cf, 0x01cf, 0x01cf, 0x01cf, 0x01cf, 0x01cf, 0x01cf, 0x01cf, - 0x01cf, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, - 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, + 0x015f, 0x0167, 0x0167, 0x0167, 0x0177, 0x0177, 0x0181, 0x0181, + 0x018f, 0x019f, 0x019f, 0x019f, 0x019f, 0x01a7, 0x01a7, 0x01a7, + 0x01b1, 0x01b1, 0x01b1, 0x01b1, 0x01b1, 0x01b1, 0x01b1, 0x01b1, + 0x01b1, 0x01b1, 0x01b1, 0x01b1, 0x01b1, 0x01b1, 0x01b1, 0x01b1, + 0x01b1, 0x01c1, 0x01c1, 0x01d8, 0x01d8, 0x01d8, 0x01d8, 0x01d8, + 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, 0x01e6, + 0x01e6, 0x01e6, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, + 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, // Entry 80 - BF - 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, - 0x01d7, 0x01d7, 0x01e5, 0x01e5, 0x01e5, 0x01e5, 0x01e5, 0x01e5, - 0x01e5, 0x01e5, 0x01e5, 0x01e5, 0x01e5, 0x01e5, 0x01ef, 0x01ef, - 0x01ef, 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x0203, 0x0209, 0x0211, - 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, 0x0211, - 0x0211, 0x0211, 0x023f, 0x0249, 0x0255, 0x026b, 0x0279, 0x029a, -} // Size: 376 bytes + 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, + 0x01ee, 0x01ee, 0x01ee, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, + 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, + 0x0206, 0x0206, 0x0206, 0x0212, 0x0212, 0x0212, 0x0212, 0x021a, + 0x0220, 0x0228, 0x0228, 0x0228, 0x0228, 0x0228, 0x0228, 0x0228, + 0x0228, 0x0228, 0x0228, 0x0228, 0x0228, 0x0256, 0x0260, 0x026c, + 0x0282, 0x0290, 0x02b1, +} // Size: 382 bytes const mrScriptStr string = "" + // Size: 3418 bytes "अरबीइम्पिरियल आर्मेनिकअर्मेनियनअवेस्तानबालीबटाकबंगालीब्लिसिम्बॉल्सबोपोमो" + @@ -30746,256 +32618,263 @@ const mrScriptStr string = "" + // Size: 3418 bytes "नाथाईतिबेटीयुगारिटिकवाईदृश्य संवादपुरातन फारसीदृश्यमान भाषायीवंशपरंपरा" + "गतगणितीय संकेतलिपीइमोजीप्रतीकअलिखितसामान्यअज्ञात लिपी" -var mrScriptIdx = []uint16{ // 176 elements +var mrScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x0040, 0x005b, 0x0073, 0x007f, 0x007f, 0x007f, 0x008b, 0x009d, 0x009d, 0x00c4, 0x00dc, 0x00f1, 0x0100, 0x010c, 0x011b, 0x0127, 0x0193, 0x01a5, 0x01ae, 0x01c0, 0x01cf, 0x01e4, 0x01ff, 0x0214, 0x026b, 0x0283, 0x0295, 0x0295, 0x02c6, 0x02fa, 0x033a, 0x033a, 0x034f, 0x0380, - 0x0398, 0x03b9, 0x03c8, 0x03c8, 0x03d7, 0x03ec, 0x0404, 0x0413, - 0x0422, 0x042b, 0x043a, 0x0459, 0x047e, 0x047e, 0x0490, 0x04a8, - 0x04a8, 0x04be, 0x04e9, 0x0514, 0x0526, 0x0545, 0x0551, 0x0566, + 0x0398, 0x03b9, 0x03b9, 0x03c8, 0x03c8, 0x03d7, 0x03ec, 0x0404, + 0x0413, 0x0422, 0x042b, 0x043a, 0x0459, 0x047e, 0x047e, 0x0490, + 0x04a8, 0x04a8, 0x04be, 0x04e9, 0x0514, 0x0526, 0x0545, 0x0551, // Entry 40 - 7F - 0x0575, 0x0575, 0x058b, 0x05a3, 0x05bb, 0x05ca, 0x05ca, 0x05d9, - 0x05eb, 0x05eb, 0x05fa, 0x0606, 0x060f, 0x063a, 0x065c, 0x066b, - 0x067a, 0x068c, 0x06a5, 0x06be, 0x06be, 0x06be, 0x06d6, 0x06ee, - 0x06ee, 0x0709, 0x0724, 0x0724, 0x0758, 0x0758, 0x0758, 0x0770, - 0x0785, 0x0785, 0x079d, 0x07a6, 0x07a6, 0x07c8, 0x07c8, 0x07e0, - 0x07e0, 0x07e0, 0x07e0, 0x07e0, 0x07f2, 0x07f2, 0x07fe, 0x0811, - 0x0823, 0x0832, 0x0832, 0x084d, 0x084d, 0x084d, 0x0872, 0x0888, - 0x08c5, 0x08ea, 0x0906, 0x091e, 0x0949, 0x0989, 0x099b, 0x09bf, + 0x0566, 0x0575, 0x0575, 0x058b, 0x05a3, 0x05bb, 0x05ca, 0x05ca, + 0x05d9, 0x05eb, 0x05eb, 0x05fa, 0x0606, 0x060f, 0x063a, 0x065c, + 0x066b, 0x067a, 0x068c, 0x06a5, 0x06be, 0x06be, 0x06be, 0x06d6, + 0x06ee, 0x06ee, 0x0709, 0x0724, 0x0724, 0x0758, 0x0758, 0x0758, + 0x0770, 0x0785, 0x0785, 0x079d, 0x07a6, 0x07a6, 0x07c8, 0x07c8, + 0x07e0, 0x07e0, 0x07e0, 0x07e0, 0x07e0, 0x07f2, 0x07f2, 0x07fe, + 0x0811, 0x0823, 0x0832, 0x0832, 0x084d, 0x084d, 0x084d, 0x0872, + 0x0888, 0x08c5, 0x08ea, 0x0906, 0x091e, 0x0949, 0x0989, 0x099b, // Entry 80 - BF - 0x09ce, 0x09e3, 0x09f2, 0x09f2, 0x0a0d, 0x0a29, 0x0a41, 0x0a41, - 0x0a41, 0x0a41, 0x0a53, 0x0a53, 0x0a65, 0x0a87, 0x0a9c, 0x0adf, - 0x0b0a, 0x0b32, 0x0b4a, 0x0b4a, 0x0b5a, 0x0b77, 0x0b86, 0x0b86, - 0x0b9c, 0x0bab, 0x0bc3, 0x0bd8, 0x0bed, 0x0bf9, 0x0c02, 0x0c14, - 0x0c14, 0x0c2f, 0x0c38, 0x0c57, 0x0c57, 0x0c57, 0x0c79, 0x0c9e, - 0x0ca4, 0x0cc5, 0x0cf3, 0x0d02, 0x0d14, 0x0d26, 0x0d3b, 0x0d5a, -} // Size: 376 bytes - -const msScriptStr string = "" + // Size: 342 bytes + 0x09bf, 0x09ce, 0x09e3, 0x09f2, 0x09f2, 0x0a0d, 0x0a29, 0x0a41, + 0x0a41, 0x0a41, 0x0a41, 0x0a53, 0x0a53, 0x0a53, 0x0a65, 0x0a87, + 0x0a9c, 0x0adf, 0x0b0a, 0x0b32, 0x0b4a, 0x0b4a, 0x0b5a, 0x0b77, + 0x0b86, 0x0b86, 0x0b9c, 0x0bab, 0x0bc3, 0x0bd8, 0x0bed, 0x0bf9, + 0x0c02, 0x0c14, 0x0c14, 0x0c2f, 0x0c38, 0x0c57, 0x0c57, 0x0c57, + 0x0c79, 0x0c9e, 0x0ca4, 0x0ca4, 0x0cc5, 0x0cf3, 0x0d02, 0x0d14, + 0x0d26, 0x0d3b, 0x0d5a, +} // Size: 382 bytes + +const msScriptStr string = "" + // Size: 357 bytes "ArabArmeniaBaliBamuBenggalaBopomofoBrailleCansCyrilDevanagariEthiopiaGeo" + - "rgiaGreekGujaratGurmukhiHanbHangulHanHan RingkasHan TradisionalIbraniHir" + - "aganaEjaan sukuan JepunJamoJepunKatakanaKhmerKannadaKoreaLaoLatinMalayal" + - "amMongoliaMyammarOriyaSinhalaTamilTeluguThaanaThaiTibetTatatanda matemat" + - "ikEmojiSimbolTidak ditulisLazimTulisan Tidak Diketahui" + "rgiaGreekGujaratGurmukhiHan dengan BopomofoHangulHanHan RingkasHan Tradi" + + "sionalIbraniHiraganaEjaan sukuan JepunJamoJepunKatakanaKhmerKannadaKorea" + + "LaoLatinMalayalamMongoliaMyammarOriyaSinhalaTamilTeluguThaanaThaiTibetTa" + + "tatanda matematikEmojiSimbolTidak ditulisLazimTulisan Tidak Diketahui" -var msScriptIdx = []uint16{ // 176 elements +var msScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x0004, 0x000b, 0x000b, 0x000f, 0x0013, 0x0013, 0x0013, 0x001b, 0x001b, 0x001b, 0x0023, 0x0023, 0x002a, 0x002a, 0x002a, 0x002a, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x0033, 0x0033, 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, 0x0045, 0x0045, - 0x004c, 0x004c, 0x004c, 0x004c, 0x0051, 0x0058, 0x0060, 0x0064, - 0x006a, 0x006d, 0x006d, 0x0078, 0x0087, 0x0087, 0x008d, 0x0095, - 0x0095, 0x0095, 0x00a7, 0x00a7, 0x00a7, 0x00a7, 0x00ab, 0x00ab, + 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x0051, 0x0058, 0x0060, + 0x0073, 0x0079, 0x007c, 0x007c, 0x0087, 0x0096, 0x0096, 0x009c, + 0x00a4, 0x00a4, 0x00a4, 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00ba, // Entry 40 - 7F - 0x00b0, 0x00b0, 0x00b0, 0x00b8, 0x00b8, 0x00bd, 0x00bd, 0x00c4, - 0x00c9, 0x00c9, 0x00c9, 0x00c9, 0x00cc, 0x00cc, 0x00cc, 0x00d1, - 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, - 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, 0x00d1, - 0x00da, 0x00da, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e9, - 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, - 0x00e9, 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, - 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, + 0x00ba, 0x00bf, 0x00bf, 0x00bf, 0x00c7, 0x00c7, 0x00cc, 0x00cc, + 0x00d3, 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00db, 0x00db, 0x00db, + 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, + 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e0, + 0x00e0, 0x00e9, 0x00e9, 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f1, + 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, + 0x00f8, 0x00f8, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, + 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, // Entry 80 - BF - 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, - 0x00ee, 0x00ee, 0x00f5, 0x00f5, 0x00f5, 0x00f5, 0x00f5, 0x00f5, - 0x00f5, 0x00f5, 0x00f5, 0x00f5, 0x00f5, 0x00f5, 0x00fa, 0x00fa, - 0x00fa, 0x0100, 0x0100, 0x0100, 0x0100, 0x0106, 0x010a, 0x010f, - 0x010f, 0x010f, 0x010f, 0x010f, 0x010f, 0x010f, 0x010f, 0x010f, - 0x010f, 0x010f, 0x0122, 0x0127, 0x012d, 0x013a, 0x013f, 0x0156, -} // Size: 376 bytes - -const myScriptStr string = "" + // Size: 1241 bytes + 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, + 0x00fd, 0x00fd, 0x00fd, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, + 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, + 0x0109, 0x0109, 0x0109, 0x010f, 0x010f, 0x010f, 0x010f, 0x0115, + 0x0119, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, + 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x0131, 0x0136, 0x013c, + 0x0149, 0x014e, 0x0165, +} // Size: 382 bytes + +const myScriptStr string = "" + // Size: 1298 bytes "အာရေဗျအာမေးနီးယားဘင်္ဂါလီဘိုပိုဗြဟ္မမီဘရေစစ်ရိလစ်ဒီဗနာဂရီအီသီယိုးပီးယားဂ" + "ျော်ဂျီယာဂရိဂုဂျာရသီဂူရူဟန်ဘ်ဟန်ဂူးလ်ဟန်ဟန် ရိုးရှင်းဟန် ရိုးရာဟီဗရူးဟ" + "ီရဂနဂျပန် အက္ခရာဂျမိုဂျာဗားနီးစ်ဂျပန်ကယားလီခတခနခမာခန္နာဒါကိုရီးယားလာအိ" + - "ုလက်တင်မာလာယာလမ်မွန်ဂိုလီးယားမြန်မာအိုရာဆင်ဟာလတိုင်လီတမီးလ်တီလုတဂလော့ဂ" + - "်သာအ်ထိုင်းတိဘက်မြင်နိုင်သော စကားပါရှန် အဟောင်းရီဂဏန်းသင်္ချာအီမိုဂျီသ" + - "င်္ကေတမရေးထားသောအများနှင့်သက်ဆိုင်သောမသိ သို့မဟုတ် မရှိသော စကားလုံး" + "ုလက်တင်မလေယာလမ်မွန်ဂိုလီးယားမြန်မာအိုရာဆင်ဟာလတိုင်လီတမီးလ်တီလုတဂလော့ဂ်" + + "သာအ်ထိုင်းတိဘက်မြင်နိုင်သော စကားပါရှန် အဟောင်းရီဂဏန်းသင်္ချာအီမိုဂျီသင" + + "်္ကေတထုံးတမ်းသဖွယ်လိုက်နာလျက်ရှိသောအများနှင့်သက်ဆိုင်သောမသိ သို့မဟုတ် " + + "မရှိသော စကားလုံး" -var myScriptIdx = []uint16{ // 176 elements +var myScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0012, 0x0012, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x0033, 0x004b, 0x004b, 0x004b, 0x005d, 0x0072, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x0093, 0x0093, 0x00ab, 0x00ab, 0x00ab, 0x00ab, 0x00ab, 0x00ab, 0x00ab, 0x00d5, 0x00d5, - 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00fc, 0x0114, 0x0120, 0x012f, - 0x0147, 0x0150, 0x0150, 0x0175, 0x0191, 0x0191, 0x01a3, 0x01b2, - 0x01b2, 0x01b2, 0x01d4, 0x01d4, 0x01d4, 0x01d4, 0x01e3, 0x0204, + 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00fc, 0x0114, 0x0120, + 0x012f, 0x0147, 0x0150, 0x0150, 0x0175, 0x0191, 0x0191, 0x01a3, + 0x01b2, 0x01b2, 0x01b2, 0x01d4, 0x01d4, 0x01d4, 0x01d4, 0x01e3, // Entry 40 - 7F - 0x0213, 0x0213, 0x0225, 0x0231, 0x0231, 0x023a, 0x023a, 0x024f, - 0x026a, 0x026a, 0x026a, 0x026a, 0x0279, 0x0279, 0x0279, 0x028b, + 0x0204, 0x0213, 0x0213, 0x0225, 0x0231, 0x0231, 0x023a, 0x023a, + 0x024f, 0x026a, 0x026a, 0x026a, 0x026a, 0x0279, 0x0279, 0x0279, 0x028b, 0x028b, 0x028b, 0x028b, 0x028b, 0x028b, 0x028b, 0x028b, 0x028b, 0x028b, 0x028b, 0x028b, 0x028b, 0x028b, 0x028b, 0x028b, - 0x02a6, 0x02a6, 0x02cd, 0x02cd, 0x02cd, 0x02cd, 0x02cd, 0x02df, - 0x02df, 0x02df, 0x02df, 0x02df, 0x02df, 0x02df, 0x02df, 0x02df, - 0x02df, 0x02ee, 0x02ee, 0x02ee, 0x02ee, 0x02ee, 0x02ee, 0x02ee, - 0x02ee, 0x02ee, 0x02ee, 0x02ee, 0x02ee, 0x02ee, 0x02ee, 0x02ee, + 0x028b, 0x02a3, 0x02a3, 0x02ca, 0x02ca, 0x02ca, 0x02ca, 0x02ca, + 0x02dc, 0x02dc, 0x02dc, 0x02dc, 0x02dc, 0x02dc, 0x02dc, 0x02dc, + 0x02dc, 0x02dc, 0x02eb, 0x02eb, 0x02eb, 0x02eb, 0x02eb, 0x02eb, + 0x02eb, 0x02eb, 0x02eb, 0x02eb, 0x02eb, 0x02eb, 0x02eb, 0x02eb, // Entry 80 - BF - 0x02ee, 0x02ee, 0x02ee, 0x02ee, 0x02ee, 0x02ee, 0x02ee, 0x02ee, - 0x02ee, 0x02ee, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, - 0x0300, 0x0300, 0x0300, 0x0300, 0x0315, 0x0315, 0x0327, 0x0327, - 0x0327, 0x0333, 0x0333, 0x0333, 0x034b, 0x0357, 0x0369, 0x0378, - 0x0378, 0x0378, 0x0378, 0x03a9, 0x03a9, 0x03a9, 0x03d1, 0x03d1, - 0x03d7, 0x03d7, 0x03fb, 0x0413, 0x0428, 0x0446, 0x0485, 0x04d9, -} // Size: 376 bytes - -const neScriptStr string = "" + // Size: 3039 bytes + 0x02eb, 0x02eb, 0x02eb, 0x02eb, 0x02eb, 0x02eb, 0x02eb, 0x02eb, + 0x02eb, 0x02eb, 0x02eb, 0x02fd, 0x02fd, 0x02fd, 0x02fd, 0x02fd, + 0x02fd, 0x02fd, 0x02fd, 0x02fd, 0x02fd, 0x02fd, 0x0312, 0x0312, + 0x0324, 0x0324, 0x0324, 0x0330, 0x0330, 0x0330, 0x0348, 0x0354, + 0x0366, 0x0375, 0x0375, 0x0375, 0x0375, 0x03a6, 0x03a6, 0x03a6, + 0x03ce, 0x03ce, 0x03d4, 0x03d4, 0x03d4, 0x03f8, 0x0410, 0x0425, + 0x047f, 0x04be, 0x0512, +} // Size: 382 bytes + +const neScriptStr string = "" + // Size: 3057 bytes "अरबीआर्मीआर्मेनियालीआभेस्टानबालीबाटकबङ्गालीब्लिजसिम्बोल्सबोपोमोफोब्राह्म" + "ीब्रेलबुगिनिजबुहिदकाक्म्कारियनचामचेरोकीकिर्थकप्टिककप्रियटसिरिलिकदेवाना" + "गरीडेसेरेटइजिप्टियन डेमोटिकइजिप्टियन हाइरटिकइजिप्टियन हाइरोग्लिफ्सइथिय" + "ोपिकग्रुजियाली खुट्सुरीजर्जियालीग्लागोलिटिकगोथिकग्रीकगुजरातीगुरूमुखीहा" + - "न्बहान्गुलहानहानुनुसरलिकृत चिनीपरम्परागत चिनीहिब्रुहिरागनापहावह हमोङ्ग" + - "काताकाना वा हिरागानापुरानो हङ्गेरियालीइन्दुसपुरानो इटालिकजामोजाभानीजाप" + - "ानीकायाहलीकाताकानाखारोस्थितिखमेरकान्नाडाकोरियनक्थीलान्नालाओफ्राक्टुर ल" + - "्याटिनग्यालिक ल्याटिनल्याटिनलेप्चालिम्बुलाइसियनलाइडियनमान्डाएनमानिकाएन" + - "माया हाइरोग्लिफ्समेरियोटिकमलायालममङ्गोलजूनमाइटेइ मायेकम्यान्मारएन्कोओघ" + - "ामओलचिकीओर्खोनओडियाओस्मान्यापुरानो पर्मिकफाग्स-पाफ्लिफ्ल्पबुक पहल्भीफो" + - "निसियनपोल्लार्ड फोनेटिकपिआरटीरेजाङरोङ्गोरोङ्गोरूनिकसमारिटनसारतीसौराष्ट" + - "्रसाइनराइटिङशाभियनसिन्हालास्ल्योटी नाग्रीसिरियाकइस्ट्रेनजेलो सिरियाकपश" + - "्चिमी सिरियाकपूर्वी सिरियाकटाग्वान्वाटाइलेन्यू टाइ लुइतामिलटाभ्टतेलुगु" + - "टेङ्वारटिफिनाघटागालोगथानाथाईतिब्बतीयुगारिटिकभाइदृश्यमय वाणीपुरानो पर्स" + - "ियनयीइन्हेरिटेडZmthZsyeप्रतीकहरूनलेखिएकोसाझाअज्ञात लिपि" - -var neScriptIdx = []uint16{ // 176 elements + "न्बहान्गुलहानहानुनुसरलिकृत चिनियाँपरम्परागत चिनियाँहिब्रुहिरागनापहावह " + + "हमोङ्गकाताकाना वा हिरागानापुरानो हङ्गेरियालीइन्दुसपुरानो इटालिकजामोजाभ" + + "ानीजापानीकायाहलीकाताकानाखारोस्थितिखमेरकान्नाडाकोरियनक्थीलान्नालाओफ्राक" + + "्टुर ल्याटिनग्यालिक ल्याटिनल्याटिनलेप्चालिम्बुलाइसियनलाइडियनमान्डाएनमा" + + "निकाएनमाया हाइरोग्लिफ्समेरियोटिकमलायालममङ्गोलजूनमाइटेइ मायेकम्यान्मारए" + + "न्कोओघामओलचिकीओर्खोनओडियाओस्मान्यापुरानो पर्मिकफाग्स-पाफ्लिफ्ल्पबुक पह" + + "ल्भीफोनिसियनपोल्लार्ड फोनेटिकपिआरटीरेजाङरोङ्गोरोङ्गोरूनिकसमारिटनसारतीस" + + "ौराष्ट्रसाइनराइटिङशाभियनसिन्हालास्ल्योटी नाग्रीसिरियाकइस्ट्रेनजेलो सिर" + + "ियाकपश्चिमी सिरियाकपूर्वी सिरियाकटाग्वान्वाटाइलेन्यू टाइ लुइतामिलटाभ्ट" + + "तेलुगुटेङ्वारटिफिनाघटागालोगथानाथाईतिब्बतीयुगारिटिकभाइदृश्यमय वाणीपुरान" + + "ो पर्सियनयीइन्हेरिटेडZmthZsyeप्रतीकहरूनलेखिएकोसाझाअज्ञात लिपि" + +var neScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x001b, 0x003c, 0x0054, 0x0060, 0x0060, 0x0060, 0x006c, 0x0081, 0x0081, 0x00ab, 0x00c3, 0x00db, 0x00ea, 0x00ff, 0x010e, 0x0120, 0x0120, 0x0132, 0x013b, 0x014d, 0x015c, 0x016e, 0x0183, 0x0198, 0x0198, 0x01b3, 0x01c8, 0x01c8, 0x01f9, 0x022a, 0x026a, 0x026a, 0x0282, 0x02b9, - 0x02d4, 0x02f5, 0x0304, 0x0304, 0x0313, 0x0328, 0x0340, 0x034f, - 0x0364, 0x036d, 0x037f, 0x03a1, 0x03c9, 0x03c9, 0x03db, 0x03f0, - 0x03f0, 0x0412, 0x044a, 0x047e, 0x0490, 0x04b5, 0x04c1, 0x04d3, + 0x02d4, 0x02f5, 0x02f5, 0x0304, 0x0304, 0x0313, 0x0328, 0x0340, + 0x034f, 0x0364, 0x036d, 0x037f, 0x03aa, 0x03db, 0x03db, 0x03ed, + 0x0402, 0x0402, 0x0424, 0x045c, 0x0490, 0x04a2, 0x04c7, 0x04d3, // Entry 40 - 7F - 0x04e5, 0x04e5, 0x04fa, 0x0512, 0x0530, 0x053c, 0x053c, 0x0554, - 0x0566, 0x0566, 0x0572, 0x0584, 0x058d, 0x05be, 0x05e9, 0x05fe, - 0x0610, 0x0622, 0x0622, 0x0622, 0x0622, 0x0622, 0x0637, 0x064c, - 0x064c, 0x0664, 0x067c, 0x067c, 0x06ad, 0x06ad, 0x06ad, 0x06c8, - 0x06dd, 0x06dd, 0x06ef, 0x06f8, 0x06f8, 0x071a, 0x071a, 0x0735, - 0x0735, 0x0735, 0x0735, 0x0735, 0x0744, 0x0744, 0x0750, 0x0762, - 0x0774, 0x0783, 0x0783, 0x079e, 0x079e, 0x079e, 0x07c3, 0x07d9, - 0x07e5, 0x07f4, 0x0810, 0x0828, 0x0859, 0x086b, 0x087a, 0x089e, + 0x04e5, 0x04f7, 0x04f7, 0x050c, 0x0524, 0x0542, 0x054e, 0x054e, + 0x0566, 0x0578, 0x0578, 0x0584, 0x0596, 0x059f, 0x05d0, 0x05fb, + 0x0610, 0x0622, 0x0634, 0x0634, 0x0634, 0x0634, 0x0634, 0x0649, + 0x065e, 0x065e, 0x0676, 0x068e, 0x068e, 0x06bf, 0x06bf, 0x06bf, + 0x06da, 0x06ef, 0x06ef, 0x0701, 0x070a, 0x070a, 0x072c, 0x072c, + 0x0747, 0x0747, 0x0747, 0x0747, 0x0747, 0x0756, 0x0756, 0x0762, + 0x0774, 0x0786, 0x0795, 0x0795, 0x07b0, 0x07b0, 0x07b0, 0x07d5, + 0x07eb, 0x07f7, 0x0806, 0x0822, 0x083a, 0x086b, 0x087d, 0x088c, // Entry 80 - BF - 0x08ad, 0x08c2, 0x08d1, 0x08d1, 0x08ec, 0x090a, 0x091c, 0x091c, - 0x091c, 0x091c, 0x0934, 0x0934, 0x0934, 0x095f, 0x0974, 0x09ae, - 0x09d9, 0x0a01, 0x0a1f, 0x0a1f, 0x0a2e, 0x0a4e, 0x0a5d, 0x0a5d, - 0x0a6c, 0x0a7e, 0x0a93, 0x0aa8, 0x0abd, 0x0ac9, 0x0ad2, 0x0ae7, - 0x0ae7, 0x0b02, 0x0b0b, 0x0b2d, 0x0b2d, 0x0b2d, 0x0b55, 0x0b55, - 0x0b5b, 0x0b79, 0x0b7d, 0x0b81, 0x0b9c, 0x0bb4, 0x0bc0, 0x0bdf, -} // Size: 376 bytes - -const nlScriptStr string = "" + // Size: 1678 bytes + 0x08b0, 0x08bf, 0x08d4, 0x08e3, 0x08e3, 0x08fe, 0x091c, 0x092e, + 0x092e, 0x092e, 0x092e, 0x0946, 0x0946, 0x0946, 0x0946, 0x0971, + 0x0986, 0x09c0, 0x09eb, 0x0a13, 0x0a31, 0x0a31, 0x0a40, 0x0a60, + 0x0a6f, 0x0a6f, 0x0a7e, 0x0a90, 0x0aa5, 0x0aba, 0x0acf, 0x0adb, + 0x0ae4, 0x0af9, 0x0af9, 0x0b14, 0x0b1d, 0x0b3f, 0x0b3f, 0x0b3f, + 0x0b67, 0x0b67, 0x0b6d, 0x0b6d, 0x0b8b, 0x0b8f, 0x0b93, 0x0bae, + 0x0bc6, 0x0bd2, 0x0bf1, +} // Size: 382 bytes + +const nlScriptStr string = "" + // Size: 1716 bytes "AdlamDefakaKaukasisch AlbaneesAhomArabischKeizerlijk ArameesArmeensAvest" + "aansBalineesBamounBassa VahBatakBengaalsBhaiksukiBlissymbolenBopomofoBra" + "hmiBrailleBugineesBuhidChakmaVerenigde Canadese Aboriginal-symbolenCaris" + "chChamCherokeeCirthKoptischCyprischCyrillischOudkerkslavisch CyrillischD" + "evanagariDeseretDuployan snelschriftEgyptisch demotischEgyptisch hiërati" + "schEgyptische hiërogliefenElbasanEthiopischGeorgisch KhutsuriGeorgischGl" + - "agolitischGothischGranthaGrieksGujaratiGurmukhiHanbHangulHanHanunooveree" + - "nvoudigd Chineestraditioneel ChineesHatranHebreeuwsHiraganaAnatolische h" + - "iërogliefenPahawh HmongKatakana of HiraganaOudhongaarsIndusOud-italischJ" + - "amoJavaansJapansJurchenKayah LiKatakanaKharoshthiKhmerKhojkiKannadaKorea" + - "ansKpelleKaithiLannaLaotiaansGotisch LatijnsGaelisch LatijnsLatijnsLepch" + - "aLimbuLineair ALineair BFraserLomaLycischLydischMahajaniMandaeansManiche" + - "aansMarchenMayahiërogliefenMendeMeroitisch cursiefMeroïtischMalayalamMod" + - "iMongoolsMoonMroMeiteiMultaniBirmaansOud Noord-ArabischNabateaansNewariN" + - "axi GebaN’KoNüshuOghamOl ChikiOrkhonOdiaOsageOsmanyaPalmyreensPau Cin Ha" + - "uOudpermischPhags-paInscriptioneel PahlaviPsalmen PahlaviBoek PahlaviFoe" + - "nicischPollard-fonetischInscriptioneel ParthischRejangRongorongoRunicSam" + - "aritaansSaratiOud Zuid-ArabischSaurashtraSignWritingShavianSharadaSiddha" + - "mSindhiSingaleesSora SompengSoendaneesSyloti NagriSyriacEstrangelo Arame" + - "esWest-ArameesOost-ArameesTagbanwaTakriTai LeNieuw Tai LueTamilTangutTai" + - " VietTeluguTengwarTifinaghTagalogThaanaThaiTibetaansTirhutaUgaritischVai" + - "Zichtbare spraakVarang KshitiWoleaiOudperzischSumero-Akkadian CuneiformY" + - "iOvergeërfdWiskundige notatieemojiSymbolenongeschrevenalgemeenonbekend s" + - "chriftsysteem" - -var nlScriptIdx = []uint16{ // 176 elements + "agolitischMasaram GondiGothischGranthaGrieksGujaratiGurmukhiHanbHangulHa" + + "nHanunoovereenvoudigd Chineestraditioneel ChineesHatranHebreeuwsHiragana" + + "Anatolische hiërogliefenPahawh HmongKatakana of HiraganaOudhongaarsIndus" + + "Oud-italischJamoJavaansJapansJurchenKayah LiKatakanaKharoshthiKhmerKhojk" + + "iKannadaKoreaansKpelleKaithiLannaLaotiaansGotisch LatijnsGaelisch Latijn" + + "sLatijnsLepchaLimbuLineair ALineair BFraserLomaLycischLydischMahajaniMan" + + "daeansManicheaansMarchenMayahiërogliefenMendeMeroitisch cursiefMeroïtisc" + + "hMalayalamModiMongoolsMoonMroMeiteiMultaniBirmaansOud Noord-ArabischNaba" + + "teaansNewariNaxi GebaN’KoNüshuOghamOl ChikiOrkhonOdiaOsageOsmanyaPalmyre" + + "ensPau Cin HauOudpermischPhags-paInscriptioneel PahlaviPsalmen PahlaviBo" + + "ek PahlaviFoenicischPollard-fonetischInscriptioneel ParthischRejangRongo" + + "rongoRunicSamaritaansSaratiOud Zuid-ArabischSaurashtraSignWritingShavian" + + "SharadaSiddhamSindhiSingaleesSora SompengSoyomboSoendaneesSyloti NagriSy" + + "riacEstrangelo ArameesWest-ArameesOost-ArameesTagbanwaTakriTai LeNieuw T" + + "ai LueTamilTangutTai VietTeluguTengwarTifinaghTagalogThaanaThaiTibetaans" + + "TirhutaUgaritischVaiZichtbare spraakVarang KshitiWoleaiOudperzischSumero" + + "-Akkadian CuneiformYivierkant ZanabazarOvergeërfdWiskundige notatieemoji" + + "Symbolenongeschrevenalgemeenonbekend schriftsysteem" + +var nlScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0005, 0x000b, 0x001e, 0x0022, 0x002a, 0x003c, 0x0043, 0x004c, 0x0054, 0x005a, 0x0063, 0x0068, 0x0070, 0x0079, 0x0085, 0x008d, 0x0093, 0x009a, 0x00a2, 0x00a7, 0x00ad, 0x00d3, 0x00da, 0x00de, 0x00e6, 0x00eb, 0x00f3, 0x00fb, 0x0105, 0x011f, 0x0129, 0x0130, 0x0144, 0x0157, 0x016c, 0x0184, 0x018b, 0x0195, 0x01a7, - 0x01b0, 0x01bc, 0x01c4, 0x01cb, 0x01d1, 0x01d9, 0x01e1, 0x01e5, - 0x01eb, 0x01ee, 0x01f5, 0x020a, 0x021e, 0x0224, 0x022d, 0x0235, - 0x024e, 0x025a, 0x026e, 0x0279, 0x027e, 0x028a, 0x028e, 0x0295, + 0x01b0, 0x01bc, 0x01c9, 0x01d1, 0x01d8, 0x01de, 0x01e6, 0x01ee, + 0x01f2, 0x01f8, 0x01fb, 0x0202, 0x0217, 0x022b, 0x0231, 0x023a, + 0x0242, 0x025b, 0x0267, 0x027b, 0x0286, 0x028b, 0x0297, 0x029b, // Entry 40 - 7F - 0x029b, 0x02a2, 0x02aa, 0x02b2, 0x02bc, 0x02c1, 0x02c7, 0x02ce, - 0x02d6, 0x02dc, 0x02e2, 0x02e7, 0x02f0, 0x02ff, 0x030f, 0x0316, - 0x031c, 0x0321, 0x032a, 0x0333, 0x0339, 0x033d, 0x0344, 0x034b, - 0x0353, 0x035c, 0x0367, 0x036e, 0x037f, 0x0384, 0x0396, 0x03a1, - 0x03aa, 0x03ae, 0x03b6, 0x03ba, 0x03bd, 0x03c3, 0x03ca, 0x03d2, - 0x03e4, 0x03ee, 0x03f4, 0x03fd, 0x0403, 0x0409, 0x040e, 0x0416, - 0x041c, 0x0420, 0x0425, 0x042c, 0x0436, 0x0441, 0x044c, 0x0454, - 0x046a, 0x0479, 0x0485, 0x048f, 0x04a0, 0x04b8, 0x04be, 0x04c8, + 0x02a2, 0x02a8, 0x02af, 0x02b7, 0x02bf, 0x02c9, 0x02ce, 0x02d4, + 0x02db, 0x02e3, 0x02e9, 0x02ef, 0x02f4, 0x02fd, 0x030c, 0x031c, + 0x0323, 0x0329, 0x032e, 0x0337, 0x0340, 0x0346, 0x034a, 0x0351, + 0x0358, 0x0360, 0x0369, 0x0374, 0x037b, 0x038c, 0x0391, 0x03a3, + 0x03ae, 0x03b7, 0x03bb, 0x03c3, 0x03c7, 0x03ca, 0x03d0, 0x03d7, + 0x03df, 0x03f1, 0x03fb, 0x0401, 0x040a, 0x0410, 0x0416, 0x041b, + 0x0423, 0x0429, 0x042d, 0x0432, 0x0439, 0x0443, 0x044e, 0x0459, + 0x0461, 0x0477, 0x0486, 0x0492, 0x049c, 0x04ad, 0x04c5, 0x04cb, // Entry 80 - BF - 0x04cd, 0x04d8, 0x04de, 0x04ef, 0x04f9, 0x0504, 0x050b, 0x0512, - 0x0519, 0x051f, 0x0528, 0x0534, 0x053e, 0x054a, 0x0550, 0x0562, - 0x056e, 0x057a, 0x0582, 0x0587, 0x058d, 0x059a, 0x059f, 0x05a5, - 0x05ad, 0x05b3, 0x05ba, 0x05c2, 0x05c9, 0x05cf, 0x05d3, 0x05dc, - 0x05e3, 0x05ed, 0x05f0, 0x0600, 0x060d, 0x0613, 0x061e, 0x0637, - 0x0639, 0x0644, 0x0656, 0x065b, 0x0663, 0x066f, 0x0677, 0x068e, -} // Size: 376 bytes - -const noScriptStr string = "" + // Size: 1603 bytes + 0x04d5, 0x04da, 0x04e5, 0x04eb, 0x04fc, 0x0506, 0x0511, 0x0518, + 0x051f, 0x0526, 0x052c, 0x0535, 0x0541, 0x0548, 0x0552, 0x055e, + 0x0564, 0x0576, 0x0582, 0x058e, 0x0596, 0x059b, 0x05a1, 0x05ae, + 0x05b3, 0x05b9, 0x05c1, 0x05c7, 0x05ce, 0x05d6, 0x05dd, 0x05e3, + 0x05e7, 0x05f0, 0x05f7, 0x0601, 0x0604, 0x0614, 0x0621, 0x0627, + 0x0632, 0x064b, 0x064d, 0x065f, 0x066a, 0x067c, 0x0681, 0x0689, + 0x0695, 0x069d, 0x06b4, +} // Size: 382 bytes + +const noScriptStr string = "" + // Size: 1609 bytes "afakakaukasus-albanskahomarabiskarameiskarmenskavestiskbalinesiskbamumba" + - "ssa vahbatakbengalskblissymbolbopomofobrahmibraillebuginesiskbuhidchakma" + - "felles kanadiske urspråksstavelserkariskchamcherokeecirthkoptiskkyprioti" + - "skkyrilliskkirkeslavisk kyrilliskdevanagarideseretduployan stenografiegy" + - "ptisk demotiskegyptisk hieratiskegyptiske hieroglyferelbasisketiopiskgeo" + - "rgisk khutsurigeorgiskglagolittiskgotiskgammeltamilskgreskgujaratigurmuk" + - "hihanbhangulhanhanunooforenklet hantradisjonell hanhatransk armenskhebra" + - "iskhiraganaanatoliske hieroglyferpahawh hmongjapanske stavelsesskrifterg" + - "ammelungarskindusgammelitaliskjamojavanesiskjapanskjurchenkayah likataka" + - "nakharoshthikhmerkhojkikannadakoreanskkpellekaithisklannalaotiskfrakturl" + - "atinskgælisk latinsklatinsklepchalimbulineær Alineær Bfraserlomalykiskly" + - "diskmahajanimandaiskmanikeiskmaya-hieroglyfermendemeroitisk kursivmeroit" + - "iskmalayalammodimongolskmoonmromeitei-mayekmultanimyanmargammelnordarabi" + - "sknabataeansknaxi geban’konüshuoghamol-chikiorkhonoriyaosmanyapalmyrensk" + - "pau cin haugammelpermiskphags-painskripsjonspahlavipsalter pahlavipahlav" + - "ifønikiskpollard-fonetiskinskripsjonsparthiskrejangrongorongorunersamari" + - "tansksaratigammelsørarabisksaurashtrategnskriftshavisksharadasiddhamkhud" + - "awadisinhalasora sompengsundanesisksyloti nagrisyriskestrangelosyriakisk" + - "vestlig syriakiskøstlig syriakisktagbanwatakritai leny tai luetamilsktan" + - "guttai viettelugutengwartifinaghtagalogthaanathaitibetansktirhutaugariti" + - "skvaisynlig talevarang kshitiwoleaigammelpersisksumersk-akkadisk kileskr" + - "iftyinedarvetmatematisk notasjonzsyesymbolerspråk uten skriftfellesukjen" + - "t skrift" - -var noScriptIdx = []uint16{ // 176 elements + "ssa vahbatakbengalskblissymbolbopomofobrahmipunktskriftbuginesiskbuhidch" + + "akmafelles kanadiske urspråksstavelserkariskchamcherokeecirthkoptiskkypr" + + "iotiskkyrilliskkirkeslavisk kyrilliskdevanagarideseretduployan stenograf" + + "iegyptisk demotiskegyptisk hieratiskegyptiske hieroglyferelbasisketiopis" + + "kgeorgisk khutsurigeorgiskglagolittiskgotiskgammeltamilskgreskgujaratigu" + + "rmukhihanbhangulhanhanunooforenklet hantradisjonell hanhatransk armenskh" + + "ebraiskhiraganaanatoliske hieroglyferpahawh hmongjapanske stavelsesskrif" + + "tergammelungarskindusgammelitaliskjamojavanesiskjapanskjurchenkayah lika" + + "takanakharoshthikhmerkhojkikannadakoreanskkpellekaithisklannalaotiskfrak" + + "turlatinskgælisk latinsklatinsklepchalimbulineær Alineær Bfraserlomalyki" + + "sklydiskmahajanimandaiskmanikeiskmaya-hieroglyfermendemeroitisk kursivme" + + "roitiskmalayalammodimongolskmoonmromeitei-mayekmultaniburmesiskgammelnor" + + "darabisknabataeansknaxi geban’konüshuoghamol-chikiorkhonoriyaosmanyapalm" + + "yrenskpau cin haugammelpermiskphags-painskripsjonspahlavipsalter pahlavi" + + "pahlavifønikiskpollard-fonetiskinskripsjonsparthiskrejangrongorongoruner" + + "samaritansksaratigammelsørarabisksaurashtrategnskriftshavisksharadasiddh" + + "amkhudawadisinhalasora sompengsundanesisksyloti nagrisyriskestrangelosyr" + + "iakiskvestlig syriakiskøstlig syriakisktagbanwatakritai leny tai luetami" + + "lsktanguttai viettelugutengwartifinaghtagalogtaanathaitibetansktirhutaug" + + "aritiskvaisynlig talevarang kshitiwoleaigammelpersisksumersk-akkadisk ki" + + "leskriftyinedarvetmatematisk notasjonemojisymbolerspråk uten skriftfelle" + + "sukjent skrift" + +var noScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0005, 0x0015, 0x0019, 0x0020, 0x0028, 0x002f, 0x0037, 0x0041, 0x0046, 0x004f, 0x0054, 0x005c, 0x005c, 0x0066, - 0x006e, 0x0074, 0x007b, 0x0085, 0x008a, 0x0090, 0x00b3, 0x00b9, - 0x00bd, 0x00c5, 0x00ca, 0x00d1, 0x00db, 0x00e4, 0x00fa, 0x0104, - 0x010b, 0x011e, 0x012f, 0x0141, 0x0156, 0x015e, 0x0166, 0x0177, - 0x017f, 0x018b, 0x0191, 0x019e, 0x01a3, 0x01ab, 0x01b3, 0x01b7, - 0x01bd, 0x01c0, 0x01c7, 0x01d4, 0x01e4, 0x01f4, 0x01fc, 0x0204, - 0x021a, 0x0226, 0x0240, 0x024d, 0x0252, 0x025f, 0x0263, 0x026d, + 0x006e, 0x0074, 0x007f, 0x0089, 0x008e, 0x0094, 0x00b7, 0x00bd, + 0x00c1, 0x00c9, 0x00ce, 0x00d5, 0x00df, 0x00e8, 0x00fe, 0x0108, + 0x010f, 0x0122, 0x0133, 0x0145, 0x015a, 0x0162, 0x016a, 0x017b, + 0x0183, 0x018f, 0x018f, 0x0195, 0x01a2, 0x01a7, 0x01af, 0x01b7, + 0x01bb, 0x01c1, 0x01c4, 0x01cb, 0x01d8, 0x01e8, 0x01f8, 0x0200, + 0x0208, 0x021e, 0x022a, 0x0244, 0x0251, 0x0256, 0x0263, 0x0267, // Entry 40 - 7F - 0x0274, 0x027b, 0x0283, 0x028b, 0x0295, 0x029a, 0x02a0, 0x02a7, - 0x02af, 0x02b5, 0x02bd, 0x02c2, 0x02c9, 0x02d7, 0x02e6, 0x02ed, - 0x02f3, 0x02f8, 0x0301, 0x030a, 0x0310, 0x0314, 0x031a, 0x0320, - 0x0328, 0x0330, 0x0339, 0x0339, 0x0349, 0x034e, 0x035e, 0x0367, - 0x0370, 0x0374, 0x037c, 0x0380, 0x0383, 0x038f, 0x0396, 0x039d, - 0x03ae, 0x03b9, 0x03b9, 0x03c2, 0x03c8, 0x03ce, 0x03d3, 0x03db, - 0x03e1, 0x03e6, 0x03e6, 0x03ed, 0x03f7, 0x0402, 0x040f, 0x0417, - 0x042a, 0x0439, 0x0440, 0x0449, 0x0459, 0x046d, 0x0473, 0x047d, + 0x0271, 0x0278, 0x027f, 0x0287, 0x028f, 0x0299, 0x029e, 0x02a4, + 0x02ab, 0x02b3, 0x02b9, 0x02c1, 0x02c6, 0x02cd, 0x02db, 0x02ea, + 0x02f1, 0x02f7, 0x02fc, 0x0305, 0x030e, 0x0314, 0x0318, 0x031e, + 0x0324, 0x032c, 0x0334, 0x033d, 0x033d, 0x034d, 0x0352, 0x0362, + 0x036b, 0x0374, 0x0378, 0x0380, 0x0384, 0x0387, 0x0393, 0x039a, + 0x03a3, 0x03b4, 0x03bf, 0x03bf, 0x03c8, 0x03ce, 0x03d4, 0x03d9, + 0x03e1, 0x03e7, 0x03ec, 0x03ec, 0x03f3, 0x03fd, 0x0408, 0x0415, + 0x041d, 0x0430, 0x043f, 0x0446, 0x044f, 0x045f, 0x0473, 0x0479, // Entry 80 - BF - 0x0482, 0x048d, 0x0493, 0x04a4, 0x04ae, 0x04b8, 0x04bf, 0x04c6, - 0x04cd, 0x04d6, 0x04dd, 0x04e9, 0x04f4, 0x0500, 0x0506, 0x0519, - 0x052a, 0x053b, 0x0543, 0x0548, 0x054e, 0x0558, 0x055f, 0x0565, - 0x056d, 0x0573, 0x057a, 0x0582, 0x0589, 0x058f, 0x0593, 0x059c, - 0x05a3, 0x05ac, 0x05af, 0x05ba, 0x05c7, 0x05cd, 0x05da, 0x05f5, - 0x05f7, 0x05ff, 0x0612, 0x0616, 0x061e, 0x0630, 0x0636, 0x0643, -} // Size: 376 bytes + 0x0483, 0x0488, 0x0493, 0x0499, 0x04aa, 0x04b4, 0x04be, 0x04c5, + 0x04cc, 0x04d3, 0x04dc, 0x04e3, 0x04ef, 0x04ef, 0x04fa, 0x0506, + 0x050c, 0x051f, 0x0530, 0x0541, 0x0549, 0x054e, 0x0554, 0x055e, + 0x0565, 0x056b, 0x0573, 0x0579, 0x0580, 0x0588, 0x058f, 0x0594, + 0x0598, 0x05a1, 0x05a8, 0x05b1, 0x05b4, 0x05bf, 0x05cc, 0x05d2, + 0x05df, 0x05fa, 0x05fc, 0x05fc, 0x0604, 0x0617, 0x061c, 0x0624, + 0x0636, 0x063c, 0x0649, +} // Size: 382 bytes const paScriptStr string = "" + // Size: 828 bytes "ਅਰਬੀਅਰਮੀਨੀਆਈਬੰਗਾਲੀਬੋਪੋਮੋਫੋਬਰੇਲਸਿਰੀਲਿਕਦੇਵਨਾਗਰੀਇਥੀਓਪਿਕਜਾਰਜੀਆਈਯੂਨਾਨੀਗੁਜਰਾਤੀ" + @@ -31003,33 +32882,34 @@ const paScriptStr string = "" + // Size: 828 bytes "ਪਾਨੀਕਾਟਾਕਾਨਾਖਮੇਰਕੰਨੜਕੋਰੀਆਈਲਾਓਲਾਤੀਨੀਮਲਿਆਲਮਮੰਗੋਲੀਅਨਮਿਆਂਮਾਰਉੜੀਆਸਿੰਹਾਲਾਤਮਿ" + "ਲਤੇਲਗੂਥਾਨਾਥਾਈਤਿੱਬਤੀਗਣਿਤ ਚਿੰਨ੍ਹ-ਲਿਪੀਇਮੋਜੀਚਿੰਨ੍ਹਅਲਿਖਤਸਧਾਰਨਅਣਪਛਾਤੀ ਲਿਪੀ" -var paScriptIdx = []uint16{ // 176 elements +var paScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000c, 0x000c, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0036, 0x0036, 0x0036, 0x004e, 0x004e, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x006f, 0x006f, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x009c, 0x009c, - 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00c3, 0x00d8, 0x00ed, 0x00f9, - 0x0108, 0x0111, 0x0111, 0x0124, 0x0140, 0x0140, 0x014f, 0x0167, - 0x0167, 0x0167, 0x0195, 0x0195, 0x0195, 0x0195, 0x01a1, 0x01a1, + 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00b1, 0x00c3, 0x00d8, 0x00ed, + 0x00f9, 0x0108, 0x0111, 0x0111, 0x0124, 0x0140, 0x0140, 0x014f, + 0x0167, 0x0167, 0x0167, 0x0195, 0x0195, 0x0195, 0x0195, 0x01a1, // Entry 40 - 7F - 0x01b0, 0x01b0, 0x01b0, 0x01c8, 0x01c8, 0x01d4, 0x01d4, 0x01e0, - 0x01f2, 0x01f2, 0x01f2, 0x01f2, 0x01fb, 0x01fb, 0x01fb, 0x020d, + 0x01a1, 0x01b0, 0x01b0, 0x01b0, 0x01c8, 0x01c8, 0x01d4, 0x01d4, + 0x01e0, 0x01f2, 0x01f2, 0x01f2, 0x01f2, 0x01fb, 0x01fb, 0x01fb, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, 0x020d, - 0x021f, 0x021f, 0x0237, 0x0237, 0x0237, 0x0237, 0x0237, 0x024c, + 0x020d, 0x021f, 0x021f, 0x0237, 0x0237, 0x0237, 0x0237, 0x0237, 0x024c, 0x024c, 0x024c, 0x024c, 0x024c, 0x024c, 0x024c, 0x024c, - 0x024c, 0x0258, 0x0258, 0x0258, 0x0258, 0x0258, 0x0258, 0x0258, + 0x024c, 0x024c, 0x0258, 0x0258, 0x0258, 0x0258, 0x0258, 0x0258, 0x0258, 0x0258, 0x0258, 0x0258, 0x0258, 0x0258, 0x0258, 0x0258, // Entry 80 - BF 0x0258, 0x0258, 0x0258, 0x0258, 0x0258, 0x0258, 0x0258, 0x0258, - 0x0258, 0x0258, 0x026d, 0x026d, 0x026d, 0x026d, 0x026d, 0x026d, - 0x026d, 0x026d, 0x026d, 0x026d, 0x026d, 0x026d, 0x0279, 0x0279, - 0x0279, 0x0288, 0x0288, 0x0288, 0x0288, 0x0294, 0x029d, 0x02af, - 0x02af, 0x02af, 0x02af, 0x02af, 0x02af, 0x02af, 0x02af, 0x02af, - 0x02af, 0x02af, 0x02db, 0x02ea, 0x02fc, 0x030b, 0x031a, 0x033c, -} // Size: 376 bytes + 0x0258, 0x0258, 0x0258, 0x026d, 0x026d, 0x026d, 0x026d, 0x026d, + 0x026d, 0x026d, 0x026d, 0x026d, 0x026d, 0x026d, 0x026d, 0x026d, + 0x0279, 0x0279, 0x0279, 0x0288, 0x0288, 0x0288, 0x0288, 0x0294, + 0x029d, 0x02af, 0x02af, 0x02af, 0x02af, 0x02af, 0x02af, 0x02af, + 0x02af, 0x02af, 0x02af, 0x02af, 0x02af, 0x02db, 0x02ea, 0x02fc, + 0x030b, 0x031a, 0x033c, +} // Size: 382 bytes const plScriptStr string = "" + // Size: 1489 bytes "arabskiearmiormiańskieawestyjskiebalijskiebamunbatakbengalskiesymbole Bl" + @@ -31054,41 +32934,42 @@ const plScriptStr string = "" + // Size: 1489 bytes "czonenotacja matematycznaEmojisymbolejęzyk bez systemu pismawspólneniezn" + "any skrypt" -var plScriptIdx = []uint16{ // 176 elements +var plScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x000c, 0x0017, 0x0022, 0x002b, 0x0030, 0x0030, 0x0035, 0x003f, 0x003f, 0x004d, 0x0055, 0x005b, 0x0066, 0x0070, 0x0075, 0x007b, 0x00a9, 0x00b2, 0x00ba, 0x00c4, 0x00c9, 0x00d3, 0x00dd, 0x00e5, 0x010a, 0x0114, 0x011b, 0x011b, 0x012e, 0x0142, 0x0155, 0x0155, 0x015e, 0x0171, - 0x017c, 0x0186, 0x018e, 0x018e, 0x0195, 0x01a1, 0x01a9, 0x01ad, - 0x01b3, 0x01b6, 0x01bd, 0x01cc, 0x01da, 0x01da, 0x01e4, 0x01ec, - 0x01ec, 0x01f8, 0x020f, 0x021f, 0x0224, 0x0231, 0x0235, 0x023e, + 0x017c, 0x0186, 0x0186, 0x018e, 0x018e, 0x0195, 0x01a1, 0x01a9, + 0x01ad, 0x01b3, 0x01b6, 0x01bd, 0x01cc, 0x01da, 0x01da, 0x01e4, + 0x01ec, 0x01ec, 0x01f8, 0x020f, 0x021f, 0x0224, 0x0231, 0x0235, // Entry 40 - 7F - 0x0248, 0x0248, 0x0250, 0x0258, 0x0260, 0x0269, 0x0269, 0x0270, - 0x027b, 0x027b, 0x0281, 0x0286, 0x0291, 0x02a6, 0x02c3, 0x02ce, - 0x02d4, 0x02d9, 0x02e3, 0x02ed, 0x02ed, 0x02ed, 0x02f6, 0x02ff, - 0x02ff, 0x0309, 0x0315, 0x0315, 0x0326, 0x0326, 0x0326, 0x032f, - 0x0338, 0x0338, 0x0342, 0x034a, 0x034a, 0x0356, 0x0356, 0x0361, - 0x0361, 0x0361, 0x0361, 0x0361, 0x0367, 0x0367, 0x036c, 0x0374, - 0x037f, 0x0384, 0x0384, 0x038b, 0x038b, 0x038b, 0x0398, 0x03a0, - 0x03b4, 0x03c8, 0x03db, 0x03e2, 0x03f8, 0x040e, 0x0414, 0x041e, + 0x023e, 0x0248, 0x0248, 0x0250, 0x0258, 0x0260, 0x0269, 0x0269, + 0x0270, 0x027b, 0x027b, 0x0281, 0x0286, 0x0291, 0x02a6, 0x02c3, + 0x02ce, 0x02d4, 0x02d9, 0x02e3, 0x02ed, 0x02ed, 0x02ed, 0x02f6, + 0x02ff, 0x02ff, 0x0309, 0x0315, 0x0315, 0x0326, 0x0326, 0x0326, + 0x032f, 0x0338, 0x0338, 0x0342, 0x034a, 0x034a, 0x0356, 0x0356, + 0x0361, 0x0361, 0x0361, 0x0361, 0x0361, 0x0367, 0x0367, 0x036c, + 0x0374, 0x037f, 0x0384, 0x0384, 0x038b, 0x038b, 0x038b, 0x0398, + 0x03a0, 0x03b4, 0x03c8, 0x03db, 0x03e2, 0x03f8, 0x040e, 0x0414, // Entry 80 - BF - 0x0426, 0x0433, 0x0439, 0x0439, 0x0443, 0x0450, 0x0455, 0x0455, - 0x0455, 0x0455, 0x0460, 0x0460, 0x046a, 0x0476, 0x047e, 0x0491, - 0x04ad, 0x04c9, 0x04d1, 0x04d1, 0x04d7, 0x04e3, 0x04ec, 0x04ec, - 0x04f4, 0x04fa, 0x0501, 0x0515, 0x051c, 0x0522, 0x0529, 0x0535, - 0x0535, 0x053e, 0x0541, 0x054f, 0x054f, 0x054f, 0x055b, 0x0574, - 0x0576, 0x0582, 0x0596, 0x059b, 0x05a2, 0x05ba, 0x05c2, 0x05d1, -} // Size: 376 bytes + 0x041e, 0x0426, 0x0433, 0x0439, 0x0439, 0x0443, 0x0450, 0x0455, + 0x0455, 0x0455, 0x0455, 0x0460, 0x0460, 0x0460, 0x046a, 0x0476, + 0x047e, 0x0491, 0x04ad, 0x04c9, 0x04d1, 0x04d1, 0x04d7, 0x04e3, + 0x04ec, 0x04ec, 0x04f4, 0x04fa, 0x0501, 0x0515, 0x051c, 0x0522, + 0x0529, 0x0535, 0x0535, 0x053e, 0x0541, 0x054f, 0x054f, 0x054f, + 0x055b, 0x0574, 0x0576, 0x0576, 0x0582, 0x0596, 0x059b, 0x05a2, + 0x05ba, 0x05c2, 0x05d1, +} // Size: 382 bytes const ptScriptStr string = "" + // Size: 1282 bytes "árabearmiarmênioavésticobalinêsbamumbataquebengalisímbolos blissbopomofo" + "brahmibraillebuginêsbuhidcakmescrita silábica unificada dos aborígenes c" + "anadensescarianochamcherokeecirthcópticocipriotacirílicocirílico eslavo " + "eclesiásticodevanágarideseretdemótico egípciohierático egípciohieróglifo" + - "s egípciosetiópicokhutsuri georgianogeorgianoglagolíticogóticogregogujer" + - "atigurmuquihanbhangulhanhanunoohan simplificadohan tradicionalhebraicohi" + + "s egípciosetiópicokhutsuri georgianogeorgianoglagolíticogóticogregoguzer" + + "ategurmuquihanbhangulhanhanunoohan simplificadohan tradicionalhebraicohi" + "raganapahawh hmongsilabários japoneseshúngaro antigoindoitálico antigoja" + "mojavanêsjaponêskayah likatakanakharoshthikhmerkannadacoreanokthilannala" + "olatim frakturlatim gaélicolatimlepchalimbulinear Alinear Blisulíciolídi" + @@ -31102,108 +32983,111 @@ const ptScriptStr string = "" + // Size: 1282 bytes "eiformeyiherdadonotação matemáticaEmojizsymágrafocomumescrita desconheci" + "da" -var ptScriptIdx = []uint16{ // 176 elements +var ptScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x000a, 0x0012, 0x001b, 0x0023, 0x0028, 0x0028, 0x002f, 0x0036, 0x0036, 0x0045, 0x004d, 0x0053, 0x005a, 0x0062, 0x0067, 0x006b, 0x00a1, 0x00a8, 0x00ac, 0x00b4, 0x00b9, 0x00c1, 0x00c9, 0x00d2, 0x00f0, 0x00fb, 0x0102, 0x0102, 0x0114, 0x0127, 0x013d, 0x013d, 0x0146, 0x0158, - 0x0161, 0x016d, 0x0174, 0x0174, 0x0179, 0x0181, 0x0189, 0x018d, - 0x0193, 0x0196, 0x019d, 0x01ad, 0x01bc, 0x01bc, 0x01c4, 0x01cc, - 0x01cc, 0x01d8, 0x01ed, 0x01fc, 0x0200, 0x020f, 0x0213, 0x021b, + 0x0161, 0x016d, 0x016d, 0x0174, 0x0174, 0x0179, 0x0181, 0x0189, + 0x018d, 0x0193, 0x0196, 0x019d, 0x01ad, 0x01bc, 0x01bc, 0x01c4, + 0x01cc, 0x01cc, 0x01d8, 0x01ed, 0x01fc, 0x0200, 0x020f, 0x0213, // Entry 40 - 7F - 0x0223, 0x0223, 0x022b, 0x0233, 0x023d, 0x0242, 0x0242, 0x0249, - 0x0250, 0x0250, 0x0254, 0x0259, 0x025c, 0x0269, 0x0277, 0x027c, - 0x0282, 0x0287, 0x028f, 0x0297, 0x029b, 0x029b, 0x02a1, 0x02a7, - 0x02a7, 0x02af, 0x02b9, 0x02b9, 0x02cb, 0x02cb, 0x02dd, 0x02e7, - 0x02ef, 0x02ef, 0x02f5, 0x02f9, 0x02f9, 0x0305, 0x0305, 0x030e, - 0x030e, 0x030e, 0x030e, 0x030e, 0x0314, 0x0314, 0x031c, 0x0324, - 0x032a, 0x032f, 0x032f, 0x0336, 0x0336, 0x0336, 0x0345, 0x034d, - 0x0351, 0x0355, 0x0363, 0x036b, 0x037c, 0x0380, 0x0386, 0x0390, + 0x021b, 0x0223, 0x0223, 0x022b, 0x0233, 0x023d, 0x0242, 0x0242, + 0x0249, 0x0250, 0x0250, 0x0254, 0x0259, 0x025c, 0x0269, 0x0277, + 0x027c, 0x0282, 0x0287, 0x028f, 0x0297, 0x029b, 0x029b, 0x02a1, + 0x02a7, 0x02a7, 0x02af, 0x02b9, 0x02b9, 0x02cb, 0x02cb, 0x02dd, + 0x02e7, 0x02ef, 0x02ef, 0x02f5, 0x02f9, 0x02f9, 0x0305, 0x0305, + 0x030e, 0x030e, 0x030e, 0x030e, 0x030e, 0x0314, 0x0314, 0x031c, + 0x0324, 0x032a, 0x032f, 0x032f, 0x0336, 0x0336, 0x0336, 0x0345, + 0x034d, 0x0351, 0x0355, 0x0363, 0x036b, 0x037c, 0x0380, 0x0386, // Entry 80 - BF - 0x0397, 0x03a1, 0x03a7, 0x03a7, 0x03b1, 0x03bc, 0x03c4, 0x03c4, - 0x03c4, 0x03c4, 0x03cd, 0x03cd, 0x03d6, 0x03e2, 0x03ea, 0x03fd, - 0x040f, 0x0420, 0x0428, 0x0428, 0x042e, 0x043a, 0x0440, 0x0440, - 0x0444, 0x044b, 0x0452, 0x045a, 0x0460, 0x0466, 0x0470, 0x0478, - 0x0478, 0x0482, 0x0485, 0x0493, 0x0493, 0x0493, 0x049f, 0x04bb, - 0x04bd, 0x04c4, 0x04d9, 0x04de, 0x04e2, 0x04e9, 0x04ee, 0x0502, -} // Size: 376 bytes - -const ptPTScriptStr string = "" + // Size: 108 bytes - "arménioegípcio demóticoegípcio hieráticoguzerateindussiloti nagritai let" + - "eluguemojisímbolosnão escrito" - -var ptPTScriptIdx = []uint16{ // 174 elements + 0x0390, 0x0397, 0x03a1, 0x03a7, 0x03a7, 0x03b1, 0x03bc, 0x03c4, + 0x03c4, 0x03c4, 0x03c4, 0x03cd, 0x03cd, 0x03cd, 0x03d6, 0x03e2, + 0x03ea, 0x03fd, 0x040f, 0x0420, 0x0428, 0x0428, 0x042e, 0x043a, + 0x0440, 0x0440, 0x0444, 0x044b, 0x0452, 0x045a, 0x0460, 0x0466, + 0x0470, 0x0478, 0x0478, 0x0482, 0x0485, 0x0493, 0x0493, 0x0493, + 0x049f, 0x04bb, 0x04bd, 0x04bd, 0x04c4, 0x04d9, 0x04de, 0x04e2, + 0x04e9, 0x04ee, 0x0502, +} // Size: 382 bytes + +const ptPTScriptStr string = "" + // Size: 120 bytes + "arménioegípcio demóticoegípcio hieráticohan com bopomofoindusodiasiloti " + + "nagritai leteluguemojisímbolosnão escrito" + +var ptPTScriptIdx = []uint16{ // 177 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x001a, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, - 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x0035, 0x0035, 0x0035, - 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, - 0x0035, 0x0035, 0x0035, 0x0035, 0x003a, 0x003a, 0x003a, 0x003a, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, + 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, + 0x003d, 0x003d, 0x003d, 0x003d, 0x003d, 0x0042, 0x0042, 0x0042, // Entry 40 - 7F - 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, - 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, - 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, - 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, - 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, - 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, - 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, - 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, + 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, + 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, + 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, + 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, + 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, + 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, + 0x0042, 0x0042, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, + 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, // Entry 80 - BF - 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, - 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x0046, 0x0046, 0x0046, - 0x0046, 0x0046, 0x0046, 0x0046, 0x004c, 0x004c, 0x004c, 0x004c, - 0x004c, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, - 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, - 0x0052, 0x0052, 0x0052, 0x0057, 0x0060, 0x006c, -} // Size: 372 bytes - -const roScriptStr string = "" + // Size: 858 bytes + 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, + 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0058, 0x0058, + 0x0058, 0x0058, 0x0058, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, + 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, + 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x0063, 0x006c, + 0x0078, +} // Size: 378 bytes + +const roScriptStr string = "" + // Size: 856 bytes "arabăarmeanăbalinezăbengalezăbopomofobraillesilabică aborigenă canadiană" + " unificatăcoptăcipriotăchirilicăchirilică slavonă bisericească vechedeva" + "nagarimormonădemotică egipteanăhieratică egipteanăhieroglife egipteneeti" + "opianăgeorgiană bisericeascăgeorgianăglagoliticăgoticăgreacăgujaratigurm" + - "ukhihanbhangulhanhan simplificatăhan tradiționalăebraicăhiraganakatakana" + - " sau hiraganamaghiară vecheindusitalică vechejamojavanezăjaponezăkatakan" + - "akhmerăkannadacoreeanălaoțianălatină Frakturlatină gaelicălatinălineară " + - "Alineară Blidianăhieroglife mayamalayalammongolăbirmanăoriyafenicianărun" + - "icăsingalezăsiriacăsiriacă occidentalăsiriacă orientalătamilăteluguberbe" + - "răthaanathailandezătibetanăpersană vechecuneiformă sumero-akkadianămoște" + - "nitănotație matematicăemojisimbolurinescrisăcomunăscriere necunoscută" - -var roScriptIdx = []uint16{ // 176 elements + "ukhihanbhangulhanhan simplificatăhan tradiționalăebraicăhiraganasilabică" + + " japonezămaghiară vecheindusitalică vechejamojavanezăjaponezăkatakanakhm" + + "erăkannadacoreeanălaoțianălatină Frakturlatină gaelicălatinălineară Alin" + + "eară Blidianăhieroglife mayamalayalammongolăbirmanăoriyafenicianărunicăs" + + "ingalezăsiriacăsiriacă occidentalăsiriacă orientalătamilăteluguberberăth" + + "aanathailandezătibetanăpersană vechecuneiformă sumero-akkadianămoștenită" + + "notație matematicăemojisimbolurinescrisăcomunăscriere necunoscută" + +var roScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x000e, 0x000e, 0x0017, 0x0017, 0x0017, 0x0017, 0x0021, 0x0021, 0x0021, 0x0029, 0x0029, 0x0030, 0x0030, 0x0030, 0x0030, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x0060, 0x0069, 0x0073, 0x009a, 0x00a4, 0x00ac, 0x00ac, 0x00c0, 0x00d5, 0x00e8, 0x00e8, 0x00f2, 0x010a, - 0x0114, 0x0120, 0x0127, 0x0127, 0x012e, 0x0136, 0x013e, 0x0142, - 0x0148, 0x014b, 0x014b, 0x015c, 0x016e, 0x016e, 0x0176, 0x017e, - 0x017e, 0x017e, 0x0193, 0x01a2, 0x01a7, 0x01b5, 0x01b9, 0x01c2, + 0x0114, 0x0120, 0x0120, 0x0127, 0x0127, 0x012e, 0x0136, 0x013e, + 0x0142, 0x0148, 0x014b, 0x014b, 0x015c, 0x016e, 0x016e, 0x0176, + 0x017e, 0x017e, 0x017e, 0x0191, 0x01a0, 0x01a5, 0x01b3, 0x01b7, // Entry 40 - 7F - 0x01cb, 0x01cb, 0x01cb, 0x01d3, 0x01d3, 0x01da, 0x01da, 0x01e1, - 0x01ea, 0x01ea, 0x01ea, 0x01ea, 0x01f4, 0x0203, 0x0213, 0x021a, - 0x021a, 0x021a, 0x0224, 0x022e, 0x022e, 0x022e, 0x022e, 0x0236, - 0x0236, 0x0236, 0x0236, 0x0236, 0x0245, 0x0245, 0x0245, 0x0245, - 0x024e, 0x024e, 0x0256, 0x0256, 0x0256, 0x0256, 0x0256, 0x025e, - 0x025e, 0x025e, 0x025e, 0x025e, 0x025e, 0x025e, 0x025e, 0x025e, - 0x025e, 0x0263, 0x0263, 0x0263, 0x0263, 0x0263, 0x0263, 0x0263, - 0x0263, 0x0263, 0x0263, 0x026d, 0x026d, 0x026d, 0x026d, 0x026d, + 0x01c0, 0x01c9, 0x01c9, 0x01c9, 0x01d1, 0x01d1, 0x01d8, 0x01d8, + 0x01df, 0x01e8, 0x01e8, 0x01e8, 0x01e8, 0x01f2, 0x0201, 0x0211, + 0x0218, 0x0218, 0x0218, 0x0222, 0x022c, 0x022c, 0x022c, 0x022c, + 0x0234, 0x0234, 0x0234, 0x0234, 0x0234, 0x0243, 0x0243, 0x0243, + 0x0243, 0x024c, 0x024c, 0x0254, 0x0254, 0x0254, 0x0254, 0x0254, + 0x025c, 0x025c, 0x025c, 0x025c, 0x025c, 0x025c, 0x025c, 0x025c, + 0x025c, 0x025c, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + 0x0261, 0x0261, 0x0261, 0x0261, 0x026b, 0x026b, 0x026b, 0x026b, // Entry 80 - BF - 0x0274, 0x0274, 0x0274, 0x0274, 0x0274, 0x0274, 0x0274, 0x0274, - 0x0274, 0x0274, 0x027e, 0x027e, 0x027e, 0x027e, 0x0286, 0x0286, - 0x029b, 0x02ae, 0x02ae, 0x02ae, 0x02ae, 0x02ae, 0x02b5, 0x02b5, - 0x02b5, 0x02bb, 0x02bb, 0x02c3, 0x02c3, 0x02c9, 0x02d5, 0x02de, - 0x02de, 0x02de, 0x02de, 0x02de, 0x02de, 0x02de, 0x02ec, 0x0309, - 0x0309, 0x0314, 0x0328, 0x032d, 0x0336, 0x033f, 0x0346, 0x035a, -} // Size: 376 bytes - -const ruScriptStr string = "" + // Size: 3416 bytes + 0x026b, 0x0272, 0x0272, 0x0272, 0x0272, 0x0272, 0x0272, 0x0272, + 0x0272, 0x0272, 0x0272, 0x027c, 0x027c, 0x027c, 0x027c, 0x027c, + 0x0284, 0x0284, 0x0299, 0x02ac, 0x02ac, 0x02ac, 0x02ac, 0x02ac, + 0x02b3, 0x02b3, 0x02b3, 0x02b9, 0x02b9, 0x02c1, 0x02c1, 0x02c7, + 0x02d3, 0x02dc, 0x02dc, 0x02dc, 0x02dc, 0x02dc, 0x02dc, 0x02dc, + 0x02ea, 0x0307, 0x0307, 0x0307, 0x0312, 0x0326, 0x032b, 0x0334, + 0x033d, 0x0344, 0x0358, +} // Size: 382 bytes + +const ruScriptStr string = "" + // Size: 3421 bytes "афакаарабицаарамейскаяармянскаяавестийскаябалийскаябамумбасса (вах)батак" + "скаябенгальскаяблиссимволикабопомофобрахмиБрайлябугинизийскаябухидчакми" + "йскаяканадское слоговое письмокарийскаячамскаячерокикирткоптскаякипрска" + @@ -31227,36 +33111,37 @@ const ruScriptStr string = "" + // Size: 3416 bytes "ский леновый тайский летамильскаятангутское менятай-вьеттелугутенгварск" + "аядревнеливийскаятагалогтанатайскаятибетскаятирхутаугаритскаявайскаявид" + "имая речьваранг-кшитиволеаистароперсидскаяшумеро-аккадская клинописьиун" + - "аследованнаяматематические обозначенияэмодзисимволыбесписьменныйобщепри" + - "нятаянеизвестная письменность" + "аследованнаяматематические обозначенияэмодзисимволынет письменностиобще" + + "принятаянеизвестная письменность" -var ruScriptIdx = []uint16{ // 176 elements +var ruScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x000a, 0x000a, 0x000a, 0x0018, 0x002c, 0x003e, 0x0054, 0x0066, 0x0070, 0x0083, 0x0095, 0x00ab, 0x00ab, 0x00c5, 0x00d5, 0x00e1, 0x00ed, 0x0107, 0x0111, 0x0125, 0x0155, 0x0167, 0x0175, 0x0181, 0x0189, 0x0199, 0x01a9, 0x01bb, 0x01d9, 0x01ed, 0x01fb, 0x0224, 0x0251, 0x027e, 0x02b1, 0x02b1, 0x02c3, 0x02e4, - 0x02f8, 0x030a, 0x0318, 0x0326, 0x0338, 0x034a, 0x035a, 0x0364, - 0x0372, 0x0384, 0x0390, 0x03b7, 0x03e2, 0x03e2, 0x03f4, 0x0404, - 0x0429, 0x043e, 0x0466, 0x0484, 0x04c9, 0x04e9, 0x04f3, 0x0503, + 0x02f8, 0x030a, 0x030a, 0x0318, 0x0326, 0x0338, 0x034a, 0x035a, + 0x0364, 0x0372, 0x0384, 0x0390, 0x03b7, 0x03e2, 0x03e2, 0x03f4, + 0x0404, 0x0429, 0x043e, 0x0466, 0x0484, 0x04c9, 0x04e9, 0x04f3, // Entry 40 - 7F - 0x0513, 0x052d, 0x0535, 0x0545, 0x0557, 0x0569, 0x0577, 0x0585, - 0x0597, 0x05a3, 0x05af, 0x05b9, 0x05c9, 0x05ec, 0x060f, 0x061f, - 0x0629, 0x0633, 0x0653, 0x0673, 0x067b, 0x0683, 0x068f, 0x06a1, - 0x06a1, 0x06b5, 0x06cb, 0x06cb, 0x06d3, 0x06dd, 0x0704, 0x0718, - 0x0728, 0x0728, 0x073e, 0x0753, 0x0759, 0x0769, 0x0769, 0x077f, - 0x07a1, 0x07b7, 0x07b7, 0x07c8, 0x07ce, 0x07d9, 0x07ef, 0x07fc, - 0x081d, 0x0825, 0x0825, 0x0837, 0x0847, 0x0847, 0x0863, 0x086f, - 0x0887, 0x08aa, 0x08c7, 0x08dd, 0x0908, 0x091c, 0x0932, 0x0947, + 0x0503, 0x0513, 0x052d, 0x0535, 0x0545, 0x0557, 0x0569, 0x0577, + 0x0585, 0x0597, 0x05a3, 0x05af, 0x05b9, 0x05c9, 0x05ec, 0x060f, + 0x061f, 0x0629, 0x0633, 0x0653, 0x0673, 0x067b, 0x0683, 0x068f, + 0x06a1, 0x06a1, 0x06b5, 0x06cb, 0x06cb, 0x06d3, 0x06dd, 0x0704, + 0x0718, 0x0728, 0x0728, 0x073e, 0x0753, 0x0759, 0x0769, 0x0769, + 0x077f, 0x07a1, 0x07b7, 0x07b7, 0x07c8, 0x07ce, 0x07d9, 0x07ef, + 0x07fc, 0x081d, 0x0825, 0x0825, 0x0837, 0x0847, 0x0847, 0x0863, + 0x086f, 0x0887, 0x08aa, 0x08c7, 0x08dd, 0x0908, 0x091c, 0x0932, // Entry 80 - BF - 0x095b, 0x0975, 0x0981, 0x09a3, 0x09b5, 0x09ca, 0x09df, 0x09eb, - 0x09eb, 0x09fd, 0x0a13, 0x0a2a, 0x0a3e, 0x0a55, 0x0a67, 0x0a8e, - 0x0aae, 0x0ad1, 0x0ae1, 0x0aeb, 0x0afe, 0x0b1c, 0x0b30, 0x0b4d, - 0x0b5c, 0x0b68, 0x0b7e, 0x0b9c, 0x0baa, 0x0bb2, 0x0bc0, 0x0bd2, - 0x0be0, 0x0bf4, 0x0c02, 0x0c19, 0x0c30, 0x0c3c, 0x0c5a, 0x0c8c, - 0x0c8e, 0x0caa, 0x0cdd, 0x0ce9, 0x0cf7, 0x0d11, 0x0d29, 0x0d58, -} // Size: 376 bytes + 0x0947, 0x095b, 0x0975, 0x0981, 0x09a3, 0x09b5, 0x09ca, 0x09df, + 0x09eb, 0x09eb, 0x09fd, 0x0a13, 0x0a2a, 0x0a2a, 0x0a3e, 0x0a55, + 0x0a67, 0x0a8e, 0x0aae, 0x0ad1, 0x0ae1, 0x0aeb, 0x0afe, 0x0b1c, + 0x0b30, 0x0b4d, 0x0b5c, 0x0b68, 0x0b7e, 0x0b9c, 0x0baa, 0x0bb2, + 0x0bc0, 0x0bd2, 0x0be0, 0x0bf4, 0x0c02, 0x0c19, 0x0c30, 0x0c3c, + 0x0c5a, 0x0c8c, 0x0c8e, 0x0c8e, 0x0caa, 0x0cdd, 0x0ce9, 0x0cf7, + 0x0d16, 0x0d2e, 0x0d5d, +} // Size: 382 bytes const siScriptStr string = "" + // Size: 940 bytes "අරාබිආර්මේනියානුබෙංගාලිබොපොමොෆෝබ්\u200dරේල්සිරිලික්දේවනාගරීඉතියෝපියානුජෝ" + @@ -31265,33 +33150,34 @@ const siScriptStr string = "" + // Size: 940 bytes "ුලාඕලතින්මලයාලම්මොන්ගෝලියානුමියන්මාරඔරියාසිංහලදෙමළතෙළිඟුතානතායිටි" + "\u200dබෙට්ගනිතමය සංකේතඉමොජිසංකේතඅලිඛිතපොදු.නොදත් අක්ෂර මාලාව" -var siScriptIdx = []uint16{ // 176 elements +var siScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000f, 0x000f, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0045, 0x0045, 0x0045, 0x005d, 0x005d, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x008a, 0x008a, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00c3, 0x00c3, - 0x00e1, 0x00e1, 0x00e1, 0x00e1, 0x00f3, 0x0108, 0x0120, 0x0138, - 0x0150, 0x0159, 0x0159, 0x0178, 0x01a9, 0x01a9, 0x01b5, 0x01c7, - 0x01c7, 0x01c7, 0x01f5, 0x01f5, 0x01f5, 0x01f5, 0x0201, 0x0201, + 0x00e1, 0x00e1, 0x00e1, 0x00e1, 0x00e1, 0x00f3, 0x0108, 0x0120, + 0x0138, 0x0150, 0x0159, 0x0159, 0x0178, 0x01a9, 0x01a9, 0x01b5, + 0x01c7, 0x01c7, 0x01c7, 0x01f5, 0x01f5, 0x01f5, 0x01f5, 0x0201, // Entry 40 - 7F - 0x020d, 0x020d, 0x020d, 0x021c, 0x021c, 0x0228, 0x0228, 0x0237, - 0x024f, 0x024f, 0x024f, 0x024f, 0x0258, 0x0258, 0x0258, 0x0267, + 0x0201, 0x020d, 0x020d, 0x020d, 0x021c, 0x021c, 0x0228, 0x0228, + 0x0237, 0x024f, 0x024f, 0x024f, 0x024f, 0x0258, 0x0258, 0x0258, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, 0x0267, - 0x027c, 0x027c, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02b8, + 0x0267, 0x027c, 0x027c, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02b8, 0x02b8, 0x02b8, 0x02b8, 0x02b8, 0x02b8, 0x02b8, 0x02b8, - 0x02b8, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, + 0x02b8, 0x02b8, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, // Entry 80 - BF 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, 0x02c7, - 0x02c7, 0x02c7, 0x02d6, 0x02d6, 0x02d6, 0x02d6, 0x02d6, 0x02d6, - 0x02d6, 0x02d6, 0x02d6, 0x02d6, 0x02d6, 0x02d6, 0x02e2, 0x02e2, - 0x02e2, 0x02f4, 0x02f4, 0x02f4, 0x02f4, 0x02fd, 0x0309, 0x031e, - 0x031e, 0x031e, 0x031e, 0x031e, 0x031e, 0x031e, 0x031e, 0x031e, - 0x031e, 0x031e, 0x0340, 0x034f, 0x035e, 0x0370, 0x037d, 0x03ac, -} // Size: 376 bytes + 0x02c7, 0x02c7, 0x02c7, 0x02d6, 0x02d6, 0x02d6, 0x02d6, 0x02d6, + 0x02d6, 0x02d6, 0x02d6, 0x02d6, 0x02d6, 0x02d6, 0x02d6, 0x02d6, + 0x02e2, 0x02e2, 0x02e2, 0x02f4, 0x02f4, 0x02f4, 0x02f4, 0x02fd, + 0x0309, 0x031e, 0x031e, 0x031e, 0x031e, 0x031e, 0x031e, 0x031e, + 0x031e, 0x031e, 0x031e, 0x031e, 0x031e, 0x0340, 0x034f, 0x035e, + 0x0370, 0x037d, 0x03ac, +} // Size: 382 bytes const skScriptStr string = "" + // Size: 540 bytes "arabskéarménskebalijskýbengálskebopomofobraillovocyrilikadévanágaríegypt" + @@ -31302,84 +33188,86 @@ const skScriptStr string = "" + // Size: 540 bytes "anskýRunové písmosinhálsketamilskételugskétánathajskétibetskématematický" + " zápisemodžisymbolybez zápisuvšeobecnéneznáme písmo" -var skScriptIdx = []uint16{ // 176 elements +var skScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0011, 0x0011, 0x001a, 0x001a, 0x001a, 0x001a, 0x0024, 0x0024, 0x0024, 0x002c, 0x002c, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x003d, 0x003d, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x005e, 0x005e, 0x0067, 0x0067, - 0x0071, 0x007a, 0x0082, 0x0082, 0x0089, 0x0095, 0x009d, 0x00b0, - 0x00b6, 0x00be, 0x00be, 0x00d5, 0x00e8, 0x00e8, 0x00f2, 0x00fa, - 0x00fa, 0x00fa, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x0102, 0x0102, + 0x0071, 0x007a, 0x007a, 0x0082, 0x0082, 0x0089, 0x0095, 0x009d, + 0x00b0, 0x00b6, 0x00be, 0x00be, 0x00d5, 0x00e8, 0x00e8, 0x00f2, + 0x00fa, 0x00fa, 0x00fa, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x0102, // Entry 40 - 7F - 0x010b, 0x010b, 0x010b, 0x0113, 0x0113, 0x011c, 0x011c, 0x0126, - 0x0130, 0x0130, 0x0130, 0x0130, 0x0137, 0x0137, 0x0137, 0x013e, - 0x013e, 0x013e, 0x0149, 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, - 0x0154, 0x0154, 0x0154, 0x0154, 0x0166, 0x0166, 0x0166, 0x0166, - 0x0173, 0x0173, 0x017d, 0x017d, 0x017d, 0x017d, 0x017d, 0x0185, + 0x0102, 0x010b, 0x010b, 0x010b, 0x0113, 0x0113, 0x011c, 0x011c, + 0x0126, 0x0130, 0x0130, 0x0130, 0x0130, 0x0137, 0x0137, 0x0137, + 0x013e, 0x013e, 0x013e, 0x0149, 0x0154, 0x0154, 0x0154, 0x0154, + 0x0154, 0x0154, 0x0154, 0x0154, 0x0154, 0x0166, 0x0166, 0x0166, + 0x0166, 0x0173, 0x0173, 0x017d, 0x017d, 0x017d, 0x017d, 0x017d, 0x0185, 0x0185, 0x0185, 0x0185, 0x0185, 0x0185, 0x0185, 0x0185, - 0x0185, 0x018d, 0x018d, 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, + 0x0185, 0x0185, 0x018d, 0x018d, 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, 0x0196, // Entry 80 - BF - 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, - 0x01a4, 0x01a4, 0x01ae, 0x01ae, 0x01ae, 0x01ae, 0x01ae, 0x01ae, - 0x01ae, 0x01ae, 0x01ae, 0x01ae, 0x01ae, 0x01ae, 0x01b7, 0x01b7, - 0x01b7, 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c5, 0x01cd, 0x01d6, - 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, - 0x01d6, 0x01d6, 0x01e9, 0x01f0, 0x01f7, 0x0202, 0x020d, 0x021c, -} // Size: 376 bytes - -const slScriptStr string = "" + // Size: 1495 bytes + 0x0196, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, + 0x01a4, 0x01a4, 0x01a4, 0x01ae, 0x01ae, 0x01ae, 0x01ae, 0x01ae, + 0x01ae, 0x01ae, 0x01ae, 0x01ae, 0x01ae, 0x01ae, 0x01ae, 0x01ae, + 0x01b7, 0x01b7, 0x01b7, 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c5, + 0x01cd, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, + 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01e9, 0x01f0, 0x01f7, + 0x0202, 0x020d, 0x021c, +} // Size: 382 bytes + +const slScriptStr string = "" + // Size: 1515 bytes "arabskiimperialno-aramejskiarmenskiavestanskibalijskibataškibengalskizna" + "kovna pisava Blissbopomofobramanskibraillova pisavabuginskibuhidskipoeno" + "tena zlogovna pisava kanadskih staroselcevChamčerokeškikirtkoptskiciprsk" + "icirilicastarocerkvenoslovanska cirilicadevanagarščicafonetska pisava de" + "seretdemotska egipčanska pisavahieratska egipčanska pisavaegipčanska sli" + "kovna pisavaetiopskicerkvenogruzijskigruzijskiglagoliškigotskigrškigudža" + - "ratskigurmukiHanbhangulkanjihanunskipoenostavljena pisava hantradicional" + - "na pisava hanhebrejskihiraganapahavhmonska zlogovna pisavakatakana ali h" + - "iraganastaroogrskiinduškistaroitalskiJamojavanskijaponskikarenskikatakan" + - "agandarskikmerskikanadskikorejskikajatskilaoškifrakturagelski latiničnil" + - "atinicalepškilimbuškilinearna pisava Alinearna pisava Blicijskilidijskim" + - "andanskimanihejskimajevska slikovna pisavameroitskimalajalamskimongolska" + - "Moonova pisava za slepemanipurskimjanmarskiogamskisantalskiorkonskiorijs" + - "kiosmanskistaropermijskipagpajskivrezani napisi pahlavipsalmski pahlavik" + - "njižno palavanskifeničanskiPollardova fonetska pisavarongorongorunskisam" + - "aritanskisaratskiznakovna pisavašojevskisinhalskisundanskisiletsko-nagar" + - "ijskisirijskisirska abeceda estrangelozahodnosirijskivzhodnosirijskitagb" + - "anskitamilskitajsko-vietnamskiteluškitengvarskitifinajskitagaloškitanajs" + - "kitajskitibetanskiugaritskizlogovna pisava vaividni govorstaroperzijskis" + - "umersko-akadski klinopispodedovanmatematična znamenjasimbolinenapisanosp" + - "lošnoneznan ali neveljaven zapis" - -var slScriptIdx = []uint16{ // 176 elements + "ratskigurmukiHan + Bopomofohangulkanjihanunskipoenostavljena pisava hant" + + "radicionalna pisava hanhebrejskihiraganapahavhmonska zlogovna pisavajapo" + + "nska zlogovnicastaroogrskiinduškistaroitalskiJamojavanskijaponskikarensk" + + "ikatakanagandarskikmerskikanadskikorejskikajatskilaoškifrakturagelski la" + + "tiničnilatinicalepškilimbuškilinearna pisava Alinearna pisava Blicijskil" + + "idijskimandanskimanihejskimajevska slikovna pisavameroitskimalajalamskim" + + "ongolskaMoonova pisava za slepemanipurskimjanmarskiogamskisantalskiorkon" + + "skiorijskiosmanskistaropermijskipagpajskivrezani napisi pahlavipsalmski " + + "pahlaviknjižno palavanskifeničanskiPollardova fonetska pisavarongorongor" + + "unskisamaritanskisaratskiznakovna pisavašojevskisinhalskisundanskisilets" + + "ko-nagarijskisirijskisirska abeceda estrangelozahodnosirijskivzhodnosiri" + + "jskitagbanskitamilskitajsko-vietnamskiteluškitengvarskitifinajskitagaloš" + + "kitanajskitajskitibetanskiugaritskizlogovna pisava vaividni govorstarope" + + "rzijskisumersko-akadski klinopispodedovanmatematična znamenjačustvenčeks" + + "imbolinenapisanosplošnoneznan ali neveljaven zapis" + +var slScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x001b, 0x0023, 0x002d, 0x0035, 0x0035, 0x0035, 0x003d, 0x0046, 0x0046, 0x005b, 0x0063, 0x006c, 0x007c, 0x0084, 0x008c, 0x008c, 0x00bb, 0x00bb, 0x00bf, 0x00ca, 0x00ce, 0x00d5, 0x00dc, 0x00e4, 0x0103, 0x0113, 0x012a, 0x012a, 0x0145, 0x0161, 0x017c, 0x017c, 0x0184, 0x0195, - 0x019e, 0x01a9, 0x01af, 0x01af, 0x01b5, 0x01c1, 0x01c8, 0x01cc, - 0x01d2, 0x01d7, 0x01df, 0x01f8, 0x0210, 0x0210, 0x0219, 0x0221, - 0x0221, 0x023d, 0x0252, 0x025d, 0x0265, 0x0271, 0x0275, 0x027d, + 0x019e, 0x01a9, 0x01a9, 0x01af, 0x01af, 0x01b5, 0x01c1, 0x01c8, + 0x01d6, 0x01dc, 0x01e1, 0x01e9, 0x0202, 0x021a, 0x021a, 0x0223, + 0x022b, 0x022b, 0x0247, 0x025a, 0x0265, 0x026d, 0x0279, 0x027d, // Entry 40 - 7F - 0x0285, 0x0285, 0x028d, 0x0295, 0x029e, 0x02a5, 0x02a5, 0x02ad, - 0x02b5, 0x02b5, 0x02bd, 0x02bd, 0x02c4, 0x02cc, 0x02dd, 0x02e5, - 0x02ec, 0x02f5, 0x0306, 0x0317, 0x0317, 0x0317, 0x031f, 0x0327, - 0x0327, 0x0330, 0x033a, 0x033a, 0x0352, 0x0352, 0x0352, 0x035b, - 0x0367, 0x0367, 0x0370, 0x0387, 0x0387, 0x0391, 0x0391, 0x039b, - 0x039b, 0x039b, 0x039b, 0x039b, 0x039b, 0x039b, 0x03a2, 0x03ab, - 0x03b3, 0x03ba, 0x03ba, 0x03c2, 0x03c2, 0x03c2, 0x03d0, 0x03d9, - 0x03ef, 0x03ff, 0x0412, 0x041d, 0x0437, 0x0437, 0x0437, 0x0441, + 0x0285, 0x028d, 0x028d, 0x0295, 0x029d, 0x02a6, 0x02ad, 0x02ad, + 0x02b5, 0x02bd, 0x02bd, 0x02c5, 0x02c5, 0x02cc, 0x02d4, 0x02e5, + 0x02ed, 0x02f4, 0x02fd, 0x030e, 0x031f, 0x031f, 0x031f, 0x0327, + 0x032f, 0x032f, 0x0338, 0x0342, 0x0342, 0x035a, 0x035a, 0x035a, + 0x0363, 0x036f, 0x036f, 0x0378, 0x038f, 0x038f, 0x0399, 0x0399, + 0x03a3, 0x03a3, 0x03a3, 0x03a3, 0x03a3, 0x03a3, 0x03a3, 0x03aa, + 0x03b3, 0x03bb, 0x03c2, 0x03c2, 0x03ca, 0x03ca, 0x03ca, 0x03d8, + 0x03e1, 0x03f7, 0x0407, 0x041a, 0x0425, 0x043f, 0x043f, 0x043f, // Entry 80 - BF - 0x0447, 0x0453, 0x045b, 0x045b, 0x045b, 0x046a, 0x0473, 0x0473, - 0x0473, 0x0473, 0x047c, 0x047c, 0x0485, 0x0498, 0x04a0, 0x04b9, - 0x04c8, 0x04d7, 0x04e0, 0x04e0, 0x04e0, 0x04e0, 0x04e8, 0x04e8, - 0x04f9, 0x0501, 0x050b, 0x0515, 0x051f, 0x0527, 0x052d, 0x0537, - 0x0537, 0x0540, 0x0553, 0x055e, 0x055e, 0x055e, 0x056c, 0x0585, - 0x0585, 0x058e, 0x05a3, 0x05a3, 0x05aa, 0x05b4, 0x05bc, 0x05d7, -} // Size: 376 bytes + 0x0449, 0x044f, 0x045b, 0x0463, 0x0463, 0x0463, 0x0472, 0x047b, + 0x047b, 0x047b, 0x047b, 0x0484, 0x0484, 0x0484, 0x048d, 0x04a0, + 0x04a8, 0x04c1, 0x04d0, 0x04df, 0x04e8, 0x04e8, 0x04e8, 0x04e8, + 0x04f0, 0x04f0, 0x0501, 0x0509, 0x0513, 0x051d, 0x0527, 0x052f, + 0x0535, 0x053f, 0x053f, 0x0548, 0x055b, 0x0566, 0x0566, 0x0566, + 0x0574, 0x058d, 0x058d, 0x058d, 0x0596, 0x05ab, 0x05b7, 0x05be, + 0x05c8, 0x05d0, 0x05eb, +} // Size: 382 bytes const sqScriptStr string = "" + // Size: 355 bytes "arabikarmenbengalbopomofbrailishtcirilikdevanagaretiopikgjeorgjiangrekgu" + @@ -31388,33 +33276,34 @@ const sqScriptStr string = "" + // Size: 355 bytes "atinmalajalammongolbirmanorijasinhaltamiltelugtanishttajlandeztibetishts" + "imbole matematikoreemojime simbolei pashkruari zakonshëmi panjohur" -var sqScriptIdx = []uint16{ // 176 elements +var sqScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x000b, 0x000b, 0x000b, 0x000b, 0x000b, 0x000b, 0x0011, 0x0011, 0x0011, 0x0018, 0x0018, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0028, 0x0028, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0038, 0x0038, - 0x0042, 0x0042, 0x0042, 0x0042, 0x0046, 0x004e, 0x0054, 0x005a, - 0x0060, 0x0063, 0x0063, 0x0073, 0x0082, 0x0082, 0x0089, 0x0090, - 0x0090, 0x0090, 0x00a9, 0x00a9, 0x00a9, 0x00a9, 0x00b2, 0x00b2, + 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0046, 0x004e, 0x0054, + 0x005a, 0x0060, 0x0063, 0x0063, 0x0073, 0x0082, 0x0082, 0x0089, + 0x0090, 0x0090, 0x0090, 0x00a9, 0x00a9, 0x00a9, 0x00a9, 0x00b2, // Entry 40 - 7F - 0x00b9, 0x00b9, 0x00b9, 0x00c0, 0x00c0, 0x00c4, 0x00c4, 0x00c9, - 0x00cf, 0x00cf, 0x00cf, 0x00cf, 0x00d7, 0x00d7, 0x00d7, 0x00dc, + 0x00b2, 0x00b9, 0x00b9, 0x00b9, 0x00c0, 0x00c0, 0x00c4, 0x00c4, + 0x00c9, 0x00cf, 0x00cf, 0x00cf, 0x00cf, 0x00d7, 0x00d7, 0x00d7, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, 0x00dc, - 0x00e5, 0x00e5, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00f1, + 0x00dc, 0x00e5, 0x00e5, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f1, 0x00f1, - 0x00f1, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, + 0x00f1, 0x00f1, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, // Entry 80 - BF 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, 0x00f6, - 0x00f6, 0x00f6, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, - 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x0101, 0x0101, - 0x0101, 0x0106, 0x0106, 0x0106, 0x0106, 0x010d, 0x0116, 0x011f, - 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, - 0x011f, 0x011f, 0x0133, 0x0138, 0x0142, 0x014d, 0x0159, 0x0163, -} // Size: 376 bytes + 0x00f6, 0x00f6, 0x00f6, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, + 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, + 0x0101, 0x0101, 0x0101, 0x0106, 0x0106, 0x0106, 0x0106, 0x010d, + 0x0116, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, + 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x0133, 0x0138, 0x0142, + 0x014d, 0x0159, 0x0163, +} // Size: 382 bytes const srScriptStr string = "" + // Size: 3732 bytes "арапско писмоимперијско арамејско писмојерменско писмоавестанско писмоба" + @@ -31446,33 +33335,34 @@ const srScriptStr string = "" + // Size: 3732 bytes "наследно писмоматематичка нотацијаемоџисимболинеписани језикзаједничко " + "писмонепознато писмо" -var srScriptIdx = []uint16{ // 176 elements +var srScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0019, 0x004b, 0x0068, 0x0087, 0x00a2, 0x00a2, 0x00a2, 0x00b7, 0x00d4, 0x00d4, 0x00f9, 0x0114, 0x0131, 0x014a, 0x0165, 0x0180, 0x019d, 0x01e8, 0x0203, 0x021a, 0x0226, 0x0239, 0x0254, 0x026f, 0x027f, 0x02bb, 0x02cf, 0x02dd, 0x02dd, 0x0309, 0x033b, 0x0364, 0x0364, 0x037f, 0x03ad, - 0x03ca, 0x03dc, 0x03e8, 0x03e8, 0x03fd, 0x041c, 0x0435, 0x043d, - 0x0449, 0x044f, 0x045b, 0x048b, 0x04b7, 0x04b7, 0x04d4, 0x04e4, - 0x04e4, 0x0504, 0x0530, 0x0555, 0x056e, 0x0585, 0x058d, 0x05a8, + 0x03ca, 0x03dc, 0x03dc, 0x03e8, 0x03e8, 0x03fd, 0x041c, 0x0435, + 0x043d, 0x0449, 0x044f, 0x045b, 0x048b, 0x04b7, 0x04b7, 0x04d4, + 0x04e4, 0x04e4, 0x0504, 0x0530, 0x0555, 0x056e, 0x0585, 0x058d, // Entry 40 - 7F - 0x05c3, 0x05c3, 0x05dd, 0x05ed, 0x0606, 0x061f, 0x061f, 0x0636, - 0x0651, 0x0651, 0x065b, 0x0670, 0x0687, 0x06bb, 0x06d8, 0x06e8, - 0x06fd, 0x0712, 0x0730, 0x074e, 0x074e, 0x074e, 0x0769, 0x0784, - 0x0784, 0x07a3, 0x07c2, 0x07c2, 0x07e9, 0x07e9, 0x07e9, 0x0804, - 0x0827, 0x0827, 0x0844, 0x085f, 0x085f, 0x0881, 0x0881, 0x08a2, - 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08b6, 0x08b6, 0x08cf, 0x08e7, - 0x0902, 0x091f, 0x091f, 0x093e, 0x093e, 0x093e, 0x0966, 0x097e, - 0x0999, 0x09b6, 0x09cf, 0x09ee, 0x0a16, 0x0a31, 0x0a48, 0x0a67, + 0x05a8, 0x05c3, 0x05c3, 0x05dd, 0x05ed, 0x0606, 0x061f, 0x061f, + 0x0636, 0x0651, 0x0651, 0x065b, 0x0670, 0x0687, 0x06bb, 0x06d8, + 0x06e8, 0x06fd, 0x0712, 0x0730, 0x074e, 0x074e, 0x074e, 0x0769, + 0x0784, 0x0784, 0x07a3, 0x07c2, 0x07c2, 0x07e9, 0x07e9, 0x07e9, + 0x0804, 0x0827, 0x0827, 0x0844, 0x085f, 0x085f, 0x0881, 0x0881, + 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08a2, 0x08b6, 0x08b6, 0x08cf, + 0x08e7, 0x0902, 0x091f, 0x091f, 0x093e, 0x093e, 0x093e, 0x0966, + 0x097e, 0x0999, 0x09b6, 0x09cf, 0x09ee, 0x0a16, 0x0a31, 0x0a48, // Entry 80 - BF - 0x0a7e, 0x0aa1, 0x0ab8, 0x0ab8, 0x0ad5, 0x0af0, 0x0b0f, 0x0b0f, - 0x0b0f, 0x0b0f, 0x0b2c, 0x0b2c, 0x0b49, 0x0b6b, 0x0b86, 0x0bb6, - 0x0bdf, 0x0c05, 0x0c20, 0x0c20, 0x0c36, 0x0c4c, 0x0c67, 0x0c67, - 0x0c81, 0x0c98, 0x0cb1, 0x0cca, 0x0cd8, 0x0ceb, 0x0d0a, 0x0d29, - 0x0d29, 0x0d46, 0x0d57, 0x0d70, 0x0d70, 0x0d70, 0x0d97, 0x0dd4, - 0x0de3, 0x0dfe, 0x0e25, 0x0e2f, 0x0e3d, 0x0e58, 0x0e77, 0x0e94, -} // Size: 376 bytes + 0x0a67, 0x0a7e, 0x0aa1, 0x0ab8, 0x0ab8, 0x0ad5, 0x0af0, 0x0b0f, + 0x0b0f, 0x0b0f, 0x0b0f, 0x0b2c, 0x0b2c, 0x0b2c, 0x0b49, 0x0b6b, + 0x0b86, 0x0bb6, 0x0bdf, 0x0c05, 0x0c20, 0x0c20, 0x0c36, 0x0c4c, + 0x0c67, 0x0c67, 0x0c81, 0x0c98, 0x0cb1, 0x0cca, 0x0cd8, 0x0ceb, + 0x0d0a, 0x0d29, 0x0d29, 0x0d46, 0x0d57, 0x0d70, 0x0d70, 0x0d70, + 0x0d97, 0x0dd4, 0x0de3, 0x0de3, 0x0dfe, 0x0e25, 0x0e2f, 0x0e3d, + 0x0e58, 0x0e77, 0x0e94, +} // Size: 382 bytes const srLatnScriptStr string = "" + // Size: 1974 bytes "arapsko pismoimperijsko aramejsko pismojermensko pismoavestansko pismoba" + @@ -31504,87 +33394,90 @@ const srLatnScriptStr string = "" + // Size: 1974 bytes "ematička notacijaemodžisimbolinepisani jezikzajedničko pismonepoznato pi" + "smo" -var srLatnScriptIdx = []uint16{ // 176 elements +var srLatnScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0027, 0x0036, 0x0046, 0x0054, 0x0054, 0x0054, 0x005f, 0x006e, 0x006e, 0x0082, 0x0090, 0x009f, 0x00ac, 0x00ba, 0x00c8, 0x00d8, 0x0102, 0x0110, 0x011d, 0x0124, 0x012e, 0x013d, 0x014b, 0x0154, 0x0174, 0x017e, 0x0185, 0x0185, 0x019c, 0x01b6, 0x01cb, 0x01cb, 0x01d9, 0x01f1, - 0x0200, 0x020a, 0x0210, 0x0210, 0x021c, 0x022e, 0x023b, 0x023f, - 0x0245, 0x0248, 0x024e, 0x0268, 0x027f, 0x027f, 0x028e, 0x0296, - 0x0296, 0x02a7, 0x02be, 0x02d2, 0x02e0, 0x02ec, 0x02f2, 0x0300, + 0x0200, 0x020a, 0x020a, 0x0210, 0x0210, 0x021c, 0x022e, 0x023b, + 0x023f, 0x0245, 0x0248, 0x024e, 0x0268, 0x027f, 0x027f, 0x028e, + 0x0296, 0x0296, 0x02a7, 0x02be, 0x02d2, 0x02e0, 0x02ec, 0x02f2, // Entry 40 - 7F - 0x030e, 0x030e, 0x031c, 0x0324, 0x0332, 0x033f, 0x033f, 0x034b, - 0x0359, 0x0359, 0x035e, 0x0369, 0x0376, 0x0392, 0x03a1, 0x03a9, - 0x03b5, 0x03c0, 0x03d0, 0x03e0, 0x03e0, 0x03e0, 0x03ee, 0x03fc, - 0x03fc, 0x040c, 0x041c, 0x041c, 0x0430, 0x0430, 0x0430, 0x043e, - 0x0450, 0x0450, 0x045f, 0x046e, 0x046e, 0x0480, 0x0480, 0x0491, - 0x0491, 0x0491, 0x0491, 0x0491, 0x049d, 0x049d, 0x04aa, 0x04b8, - 0x04c6, 0x04d5, 0x04d5, 0x04e6, 0x04e6, 0x04e6, 0x04fb, 0x0508, - 0x0516, 0x0525, 0x0532, 0x0543, 0x0558, 0x0566, 0x0572, 0x0582, + 0x0300, 0x030e, 0x030e, 0x031c, 0x0324, 0x0332, 0x033f, 0x033f, + 0x034b, 0x0359, 0x0359, 0x035e, 0x0369, 0x0376, 0x0392, 0x03a1, + 0x03a9, 0x03b5, 0x03c0, 0x03d0, 0x03e0, 0x03e0, 0x03e0, 0x03ee, + 0x03fc, 0x03fc, 0x040c, 0x041c, 0x041c, 0x0430, 0x0430, 0x0430, + 0x043e, 0x0450, 0x0450, 0x045f, 0x046e, 0x046e, 0x0480, 0x0480, + 0x0491, 0x0491, 0x0491, 0x0491, 0x0491, 0x049d, 0x049d, 0x04aa, + 0x04b8, 0x04c6, 0x04d5, 0x04d5, 0x04e6, 0x04e6, 0x04e6, 0x04fb, + 0x0508, 0x0516, 0x0525, 0x0532, 0x0543, 0x0558, 0x0566, 0x0572, // Entry 80 - BF - 0x058e, 0x05a0, 0x05ac, 0x05ac, 0x05bc, 0x05ca, 0x05db, 0x05db, - 0x05db, 0x05db, 0x05ea, 0x05ea, 0x05f9, 0x060b, 0x0619, 0x0632, - 0x0647, 0x065c, 0x066a, 0x066a, 0x0676, 0x0682, 0x0690, 0x0690, - 0x069e, 0x06aa, 0x06b7, 0x06c4, 0x06cb, 0x06d5, 0x06e5, 0x06f5, - 0x06f5, 0x0704, 0x070d, 0x071b, 0x071b, 0x071b, 0x072f, 0x074f, - 0x0757, 0x0765, 0x077a, 0x0781, 0x0788, 0x0796, 0x07a7, 0x07b6, -} // Size: 376 bytes - -const svScriptStr string = "" + // Size: 1720 bytes - "afakiskakaukasiska albanskaahomarabiskaimperisk arameiskaarmeniskaavesti" + - "skabalinesiskabamunskabassaiska vahbatakbengaliskabhaiksukiskablissymbol" + - "erbopomofobramipunktskriftbuginesiskabuhidchakmakanadensiska stavelsetec" + - "kenkariskachamcherokeecirtkoptiskacypriotiskakyrilliskafornkyrkoslavisk " + - "kyrilliskadevanagarideseretDuployéstenografiskademotiskahieratiskaegypti" + - "ska hieroglyferelbasiskaetiopiskakutsurigeorgiskaglagolitiskagotiskagamm" + - "altamilskagrekiskagujaratigurmukhihan med bopomofohangulhanhanunó’ofören" + - "klade han-teckentraditionella han-teckenhatranhebreiskahiraganahittitisk" + - "a hieroglyferpahaw mongkatakana/hiraganafornungerskaindusfornitaliskajam" + - "ojavanskajapanskajurchenskakaya likatakanakharoshtikhmeriskakhojkiskakan" + - "aresiskakoreanskakpellékaithiskalannalaotiskafrakturlatingaeliskt latinl" + - "atinskaronglimbulinjär Alinjär BFraserlomalykiskalydiskamahajaniskamanda" + - "éiskamanikeanskamarchenskamayahieroglyfermendekursiv-meroitiskameroitis" + - "kamalayalammodiskamongoliskamoonmrumeitei-mayekmultaniskaburmesiskafornn" + - "ordarabiskanabateiskanewariskanaxi geban-kånüshuoghamol-chikiorkonoriyao" + - "smanjapalmyreniskaPau Cin Hau-skriftfornpermiskaphags-patidig pahlavipsa" + - "ltaren-pahlavibokpahlavifeniciskapollardteckentidig parthianskarejangron" + - "go-rongorunorsamaritiskasaratifornsydarabiskasaurashtrateckningsskriftsh" + - "awiskasharadasiddhamskasindhiskasingalesiskasora sompengsundanesiskasylo" + - "ti nagrisyriskaestrangelosyriskavästsyriskaöstsyriskatagbanwatakritiskat" + - "ai letai luetamilskatangutiskatai viettelugutengwartifinaghiskatagalogta" + - "anathailändskatibetanskatirhutaugaritiskavajsynligt talvarang kshitiwole" + - "aifornpersiskasumero-akkadisk kilskriftyiärvdamatematisk notationemojisy" + - "mboleroskrivet språkgemensammaokänt skriftsystem" - -var svScriptIdx = []uint16{ // 176 elements + 0x0582, 0x058e, 0x05a0, 0x05ac, 0x05ac, 0x05bc, 0x05ca, 0x05db, + 0x05db, 0x05db, 0x05db, 0x05ea, 0x05ea, 0x05ea, 0x05f9, 0x060b, + 0x0619, 0x0632, 0x0647, 0x065c, 0x066a, 0x066a, 0x0676, 0x0682, + 0x0690, 0x0690, 0x069e, 0x06aa, 0x06b7, 0x06c4, 0x06cb, 0x06d5, + 0x06e5, 0x06f5, 0x06f5, 0x0704, 0x070d, 0x071b, 0x071b, 0x071b, + 0x072f, 0x074f, 0x0757, 0x0757, 0x0765, 0x077a, 0x0781, 0x0788, + 0x0796, 0x07a7, 0x07b6, +} // Size: 382 bytes + +const svScriptStr string = "" + // Size: 1784 bytes + "adlamiskaafakiskakaukasiska albanskaahomarabiskaimperisk arameiskaarmeni" + + "skaavestiskabalinesiskabamunskabassaiska vahbatakbengaliskabhaiksukiskab" + + "lissymbolerbopomofobramipunktskriftbuginesiskabuhidchakmakanadensiska st" + + "avelseteckenkariskachamcherokeecirtkoptiskacypriotiskakyrilliskafornkyrk" + + "oslavisk kyrilliskadevanagarideseretDuployéstenografiskademotiskahierati" + + "skaegyptiska hieroglyferelbasiskaetiopiskakutsurigeorgiskaglagolitiskama" + + "saram-gondigotiskagammaltamilskagrekiskagujaratigurmukhiskahan med bopom" + + "ofohangulhanhanunó’oförenklade han-teckentraditionella han-teckenhatranh" + + "ebreiskahiraganahittitiska hieroglyferpahaw mongkatakana/hiraganafornung" + + "erskaindusfornitaliskajamojavanskajapanskajurchenskakaya likatakanakharo" + + "shtikhmeriskakhojkiskakanaresiskakoreanskakpellékaithiskalannalaotiskafr" + + "akturlatingaeliskt latinlatinskaronglimbulinjär Alinjär BFraserlomalykis" + + "kalydiskamahajaniskamandaéiskamanikeanskamarchenskamayahieroglyfermendek" + + "ursiv-meroitiskameroitiskamalayalammodiskamongoliskamoonmrumeitei-mayekm" + + "ultaniskaburmesiskafornnordarabiskanabateiskanewariskanaxi geban-kånüshu" + + "oghamol-chikiorkonoriyaosageosmanjapalmyreniskaPau Cin Hau-skriftfornper" + + "miskaphags-patidig pahlavipsaltaren-pahlavibokpahlavifeniciskapollardtec" + + "kentidig parthianskarejangrongo-rongorunorsamaritiskasaratifornsydarabis" + + "kasaurashtrateckningsskriftshawiskasharadasiddhamskasindhiskasingalesisk" + + "asora sompengsoyombosundanesiskasyloti nagrisyriskaestrangelosyriskaväst" + + "syriskaöstsyriskatagbanwatakritiskatai letai luetamilskatangutiskatai vi" + + "ettelugutengwartifinaghiskatagalogtaanathailändskatibetanskatirhutaugari" + + "tiskavajsynligt talvarang kshitiwoleaifornpersiskasumero-akkadisk kilskr" + + "iftyizanabazar kvadratisk skriftärvdamatematisk notationemojisymbolerosk" + + "rivet språkgemensammaokänt skriftsystem" + +var svScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F - 0x0000, 0x0000, 0x0008, 0x001b, 0x001f, 0x0027, 0x0039, 0x0042, - 0x004b, 0x0056, 0x005e, 0x006b, 0x0070, 0x007a, 0x0086, 0x0092, - 0x009a, 0x009f, 0x00aa, 0x00b5, 0x00ba, 0x00c0, 0x00db, 0x00e2, - 0x00e6, 0x00ee, 0x00f2, 0x00fa, 0x0105, 0x010f, 0x012a, 0x0134, - 0x013b, 0x0150, 0x0159, 0x0163, 0x0178, 0x0181, 0x018a, 0x0191, - 0x019a, 0x01a6, 0x01ad, 0x01bb, 0x01c3, 0x01cb, 0x01d3, 0x01e3, - 0x01e9, 0x01ec, 0x01f7, 0x020d, 0x0225, 0x022b, 0x0234, 0x023c, - 0x0252, 0x025c, 0x026d, 0x0279, 0x027e, 0x028a, 0x028e, 0x0296, + 0x0000, 0x0009, 0x0011, 0x0024, 0x0028, 0x0030, 0x0042, 0x004b, + 0x0054, 0x005f, 0x0067, 0x0074, 0x0079, 0x0083, 0x008f, 0x009b, + 0x00a3, 0x00a8, 0x00b3, 0x00be, 0x00c3, 0x00c9, 0x00e4, 0x00eb, + 0x00ef, 0x00f7, 0x00fb, 0x0103, 0x010e, 0x0118, 0x0133, 0x013d, + 0x0144, 0x0159, 0x0162, 0x016c, 0x0181, 0x018a, 0x0193, 0x019a, + 0x01a3, 0x01af, 0x01bc, 0x01c3, 0x01d1, 0x01d9, 0x01e1, 0x01ec, + 0x01fc, 0x0202, 0x0205, 0x0210, 0x0226, 0x023e, 0x0244, 0x024d, + 0x0255, 0x026b, 0x0275, 0x0286, 0x0292, 0x0297, 0x02a3, 0x02a7, // Entry 40 - 7F - 0x029e, 0x02a8, 0x02af, 0x02b7, 0x02c0, 0x02c9, 0x02d2, 0x02dd, - 0x02e6, 0x02ed, 0x02f6, 0x02fb, 0x0303, 0x030f, 0x031d, 0x0325, - 0x0329, 0x032e, 0x0337, 0x0340, 0x0346, 0x034a, 0x0351, 0x0358, - 0x0363, 0x036e, 0x0379, 0x0383, 0x0392, 0x0397, 0x03a8, 0x03b2, - 0x03bb, 0x03c2, 0x03cc, 0x03d0, 0x03d3, 0x03df, 0x03e9, 0x03f3, - 0x0403, 0x040d, 0x0416, 0x041f, 0x0424, 0x042a, 0x042f, 0x0437, - 0x043c, 0x0441, 0x0441, 0x0448, 0x0454, 0x0466, 0x0472, 0x047a, - 0x0487, 0x0498, 0x04a2, 0x04ab, 0x04b8, 0x04c9, 0x04cf, 0x04da, + 0x02af, 0x02b7, 0x02c1, 0x02c8, 0x02d0, 0x02d9, 0x02e2, 0x02eb, + 0x02f6, 0x02ff, 0x0306, 0x030f, 0x0314, 0x031c, 0x0328, 0x0336, + 0x033e, 0x0342, 0x0347, 0x0350, 0x0359, 0x035f, 0x0363, 0x036a, + 0x0371, 0x037c, 0x0387, 0x0392, 0x039c, 0x03ab, 0x03b0, 0x03c1, + 0x03cb, 0x03d4, 0x03db, 0x03e5, 0x03e9, 0x03ec, 0x03f8, 0x0402, + 0x040c, 0x041c, 0x0426, 0x042f, 0x0438, 0x043d, 0x0443, 0x0448, + 0x0450, 0x0455, 0x045a, 0x045f, 0x0466, 0x0472, 0x0484, 0x0490, + 0x0498, 0x04a5, 0x04b6, 0x04c0, 0x04c9, 0x04d6, 0x04e7, 0x04ed, // Entry 80 - BF - 0x04df, 0x04ea, 0x04f0, 0x04ff, 0x0509, 0x0518, 0x0520, 0x0527, - 0x0531, 0x053a, 0x0546, 0x0552, 0x055e, 0x056a, 0x0571, 0x0582, - 0x058e, 0x0599, 0x05a1, 0x05ab, 0x05b1, 0x05b8, 0x05c0, 0x05ca, - 0x05d2, 0x05d8, 0x05df, 0x05eb, 0x05f2, 0x05f7, 0x0603, 0x060d, - 0x0614, 0x061e, 0x0621, 0x062c, 0x0639, 0x063f, 0x064b, 0x0664, - 0x0666, 0x066c, 0x067f, 0x0684, 0x068c, 0x069b, 0x06a5, 0x06b8, -} // Size: 376 bytes + 0x04f8, 0x04fd, 0x0508, 0x050e, 0x051d, 0x0527, 0x0536, 0x053e, + 0x0545, 0x054f, 0x0558, 0x0564, 0x0570, 0x0577, 0x0583, 0x058f, + 0x0596, 0x05a7, 0x05b3, 0x05be, 0x05c6, 0x05d0, 0x05d6, 0x05dd, + 0x05e5, 0x05ef, 0x05f7, 0x05fd, 0x0604, 0x0610, 0x0617, 0x061c, + 0x0628, 0x0632, 0x0639, 0x0643, 0x0646, 0x0651, 0x065e, 0x0664, + 0x0670, 0x0689, 0x068b, 0x06a6, 0x06ac, 0x06bf, 0x06c4, 0x06cc, + 0x06db, 0x06e5, 0x06f8, +} // Size: 382 bytes const swScriptStr string = "" + // Size: 392 bytes "KiarabuKiarmeniaKibengaliKibopomofoBrailleKisirilikiKidevanagariKiethiop" + @@ -31594,33 +33487,34 @@ const swScriptStr string = "" + // Size: 392 bytes "laKitamilKiteluguKithaanaKithaiKitibetiHati za kihisabatiEmojiAlamaHaija" + "andikwaKawaidaHati isiyojulikana" -var swScriptIdx = []uint16{ // 176 elements +var swScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0007, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0019, 0x0019, 0x0019, 0x0023, 0x0023, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x0034, 0x0034, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x004a, 0x004a, - 0x0051, 0x0051, 0x0051, 0x0051, 0x0059, 0x0063, 0x006d, 0x0071, - 0x0079, 0x007e, 0x007e, 0x008a, 0x0098, 0x0098, 0x00a1, 0x00a9, - 0x00a9, 0x00a9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00bd, 0x00bd, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0059, 0x0063, 0x006d, + 0x0071, 0x0079, 0x007e, 0x007e, 0x008a, 0x0098, 0x0098, 0x00a1, + 0x00a9, 0x00a9, 0x00a9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00bd, // Entry 40 - 7F - 0x00c5, 0x00c5, 0x00c5, 0x00cf, 0x00cf, 0x00d9, 0x00d9, 0x00e2, - 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00f0, 0x00f0, 0x00f0, 0x00f8, + 0x00bd, 0x00c5, 0x00c5, 0x00c5, 0x00cf, 0x00cf, 0x00d9, 0x00d9, + 0x00e2, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00f0, 0x00f0, 0x00f0, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, - 0x0103, 0x0103, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x0112, + 0x00f8, 0x0103, 0x0103, 0x010d, 0x010d, 0x010d, 0x010d, 0x010d, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, 0x0112, - 0x0112, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, + 0x0112, 0x0112, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, // Entry 80 - BF 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, 0x0119, - 0x0119, 0x0119, 0x0122, 0x0122, 0x0122, 0x0122, 0x0122, 0x0122, - 0x0122, 0x0122, 0x0122, 0x0122, 0x0122, 0x0122, 0x0129, 0x0129, - 0x0129, 0x0131, 0x0131, 0x0131, 0x0131, 0x0139, 0x013f, 0x0147, - 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, - 0x0147, 0x0147, 0x0159, 0x015e, 0x0163, 0x016f, 0x0176, 0x0188, -} // Size: 376 bytes + 0x0119, 0x0119, 0x0119, 0x0122, 0x0122, 0x0122, 0x0122, 0x0122, + 0x0122, 0x0122, 0x0122, 0x0122, 0x0122, 0x0122, 0x0122, 0x0122, + 0x0129, 0x0129, 0x0129, 0x0131, 0x0131, 0x0131, 0x0131, 0x0139, + 0x013f, 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, + 0x0147, 0x0147, 0x0147, 0x0147, 0x0147, 0x0159, 0x015e, 0x0163, + 0x016f, 0x0176, 0x0188, +} // Size: 382 bytes const taScriptStr string = "" + // Size: 3954 bytes "அரபிக்இம்பேரியல் அரமெய்க்அர்மேனியன்அவெஸ்தான்பாலினீஸ்பாடாக்வங்காளம்ப்லிஸ்" + @@ -31644,33 +33538,34 @@ const taScriptStr string = "" + // Size: 3954 bytes "ம்யீபாரம்பரியமானகணிதக்குறியீடுஎமோஜிசின்னங்கள்எழுதப்படாததுபொதுஅறியப்படா" + "த ஸ்கிரிப்ட்" -var taScriptIdx = []uint16{ // 176 elements +var taScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0012, 0x0049, 0x0067, 0x0082, 0x009a, 0x009a, 0x009a, 0x00ac, 0x00c4, 0x00c4, 0x00f4, 0x010f, 0x0124, 0x013c, 0x0154, 0x0166, 0x0175, 0x01e1, 0x01f3, 0x01ff, 0x0217, 0x0229, 0x0241, 0x025f, 0x0277, 0x02c8, 0x02e0, 0x02f5, 0x02f5, 0x0332, 0x036f, 0x03b2, 0x03b2, 0x03d3, 0x040d, - 0x0428, 0x044c, 0x045e, 0x045e, 0x0479, 0x0494, 0x04ac, 0x04bb, - 0x04d0, 0x04d9, 0x04e8, 0x051c, 0x0541, 0x0541, 0x0553, 0x056b, - 0x056b, 0x058d, 0x05d0, 0x05fb, 0x060d, 0x062f, 0x0638, 0x064d, + 0x0428, 0x044c, 0x044c, 0x045e, 0x045e, 0x0479, 0x0494, 0x04ac, + 0x04bb, 0x04d0, 0x04d9, 0x04e8, 0x051c, 0x0541, 0x0541, 0x0553, + 0x056b, 0x056b, 0x058d, 0x05d0, 0x05fb, 0x060d, 0x062f, 0x0638, // Entry 40 - 7F - 0x066b, 0x066b, 0x0681, 0x0693, 0x06a8, 0x06b7, 0x06b7, 0x06cc, - 0x06e1, 0x06e1, 0x06f3, 0x0702, 0x070e, 0x0745, 0x0770, 0x0785, - 0x0797, 0x07a9, 0x07c2, 0x07de, 0x07de, 0x07de, 0x07f3, 0x0808, - 0x0808, 0x0823, 0x083e, 0x083e, 0x086c, 0x086c, 0x086c, 0x088a, - 0x08a2, 0x08a2, 0x08c0, 0x08cc, 0x08cc, 0x08f1, 0x08f1, 0x090c, - 0x090c, 0x090c, 0x090c, 0x090c, 0x091e, 0x091e, 0x092d, 0x0949, - 0x095e, 0x096d, 0x096d, 0x0988, 0x0988, 0x0988, 0x09ad, 0x09c3, - 0x0a00, 0x0a25, 0x0a41, 0x0a5f, 0x0a99, 0x0ae8, 0x0b00, 0x0b24, + 0x064d, 0x066b, 0x066b, 0x0681, 0x0693, 0x06a8, 0x06b7, 0x06b7, + 0x06cc, 0x06e1, 0x06e1, 0x06f3, 0x0702, 0x070e, 0x0745, 0x0770, + 0x0785, 0x0797, 0x07a9, 0x07c2, 0x07de, 0x07de, 0x07de, 0x07f3, + 0x0808, 0x0808, 0x0823, 0x083e, 0x083e, 0x086c, 0x086c, 0x086c, + 0x088a, 0x08a2, 0x08a2, 0x08c0, 0x08cc, 0x08cc, 0x08f1, 0x08f1, + 0x090c, 0x090c, 0x090c, 0x090c, 0x090c, 0x091e, 0x091e, 0x092d, + 0x0949, 0x095e, 0x096d, 0x096d, 0x0988, 0x0988, 0x0988, 0x09ad, + 0x09c3, 0x0a00, 0x0a25, 0x0a41, 0x0a5f, 0x0a99, 0x0ae8, 0x0b00, // Entry 80 - BF - 0x0b36, 0x0b4e, 0x0b60, 0x0b60, 0x0b7e, 0x0b9f, 0x0bb4, 0x0bb4, - 0x0bb4, 0x0bb4, 0x0bcc, 0x0bcc, 0x0bea, 0x0c0c, 0x0c24, 0x0c64, - 0x0c8f, 0x0cbd, 0x0cd2, 0x0cd2, 0x0ce5, 0x0d02, 0x0d11, 0x0d11, - 0x0d27, 0x0d3f, 0x0d57, 0x0d72, 0x0d84, 0x0d90, 0x0d9c, 0x0dbd, - 0x0dbd, 0x0dd5, 0x0ddb, 0x0e06, 0x0e06, 0x0e06, 0x0e2e, 0x0e84, - 0x0e8a, 0x0eae, 0x0ed8, 0x0ee7, 0x0f05, 0x0f29, 0x0f35, 0x0f72, -} // Size: 376 bytes + 0x0b24, 0x0b36, 0x0b4e, 0x0b60, 0x0b60, 0x0b7e, 0x0b9f, 0x0bb4, + 0x0bb4, 0x0bb4, 0x0bb4, 0x0bcc, 0x0bcc, 0x0bcc, 0x0bea, 0x0c0c, + 0x0c24, 0x0c64, 0x0c8f, 0x0cbd, 0x0cd2, 0x0cd2, 0x0ce5, 0x0d02, + 0x0d11, 0x0d11, 0x0d27, 0x0d3f, 0x0d57, 0x0d72, 0x0d84, 0x0d90, + 0x0d9c, 0x0dbd, 0x0dbd, 0x0dd5, 0x0ddb, 0x0e06, 0x0e06, 0x0e06, + 0x0e2e, 0x0e84, 0x0e8a, 0x0e8a, 0x0eae, 0x0ed8, 0x0ee7, 0x0f05, + 0x0f29, 0x0f35, 0x0f72, +} // Size: 382 bytes const teScriptStr string = "" + // Size: 3756 bytes "అరబిక్ఇంపీరియల్ అరామాక్అర్మేనియన్అవేస్టాన్బాలినీస్బాటక్బాంగ్లాబ్లిస్సింబ" + @@ -31693,35 +33588,36 @@ const teScriptStr string = "" + // Size: 3756 bytes "ుమేరో- అక్కడియన్ క్యునిఫార్మ్యివారసత్వంగణిత సంకేతలిపిఎమోజిచిహ్నాలులిపి" + " లేనిసామాన్యతెలియని లిపి" -var teScriptIdx = []uint16{ // 176 elements +var teScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0012, 0x0043, 0x0061, 0x007c, 0x0094, 0x0094, 0x0094, 0x00a3, 0x00b8, 0x00b8, 0x00e2, 0x00fa, 0x0112, 0x012a, 0x0148, 0x015a, 0x0169, 0x01d8, 0x01ed, 0x01f9, 0x020b, 0x021d, 0x0235, 0x024d, 0x0265, 0x02bf, 0x02d7, 0x02ef, 0x02ef, 0x0326, 0x035d, 0x03a0, 0x03a0, 0x03bb, 0x03ec, - 0x0407, 0x042c, 0x043e, 0x043e, 0x0450, 0x0465, 0x047d, 0x048f, - 0x04a1, 0x04ad, 0x04bc, 0x04de, 0x0509, 0x0509, 0x051b, 0x0530, - 0x0530, 0x0555, 0x0583, 0x05b4, 0x05c3, 0x05ee, 0x05f7, 0x060c, + 0x0407, 0x042c, 0x042c, 0x043e, 0x043e, 0x0450, 0x0465, 0x047d, + 0x048f, 0x04a1, 0x04ad, 0x04bc, 0x04de, 0x0509, 0x0509, 0x051b, + 0x0530, 0x0530, 0x0555, 0x0583, 0x05b4, 0x05c3, 0x05ee, 0x05f7, // Entry 40 - 7F - 0x0621, 0x0621, 0x063a, 0x064f, 0x0661, 0x0673, 0x0673, 0x0682, - 0x0697, 0x0697, 0x06a3, 0x06b2, 0x06be, 0x06ef, 0x0714, 0x0726, - 0x0738, 0x0747, 0x0760, 0x077c, 0x077c, 0x077c, 0x0791, 0x07a6, - 0x07a6, 0x07c1, 0x07d9, 0x07d9, 0x080d, 0x080d, 0x080d, 0x0828, - 0x083a, 0x083a, 0x0855, 0x0861, 0x0861, 0x087d, 0x087d, 0x0898, - 0x0898, 0x0898, 0x0898, 0x0898, 0x08a4, 0x08a4, 0x08b0, 0x08c6, - 0x08db, 0x08ea, 0x08ea, 0x08ff, 0x08ff, 0x08ff, 0x092d, 0x0946, - 0x0989, 0x09b4, 0x09dc, 0x09f7, 0x0a2b, 0x0a74, 0x0a89, 0x0aa8, + 0x060c, 0x0621, 0x0621, 0x063a, 0x064f, 0x0661, 0x0673, 0x0673, + 0x0682, 0x0697, 0x0697, 0x06a3, 0x06b2, 0x06be, 0x06ef, 0x0714, + 0x0726, 0x0738, 0x0747, 0x0760, 0x077c, 0x077c, 0x077c, 0x0791, + 0x07a6, 0x07a6, 0x07c1, 0x07d9, 0x07d9, 0x080d, 0x080d, 0x080d, + 0x0828, 0x083a, 0x083a, 0x0855, 0x0861, 0x0861, 0x087d, 0x087d, + 0x0898, 0x0898, 0x0898, 0x0898, 0x0898, 0x08a4, 0x08a4, 0x08b0, + 0x08c6, 0x08db, 0x08ea, 0x08ea, 0x08ff, 0x08ff, 0x08ff, 0x092d, + 0x0946, 0x0989, 0x09b4, 0x09dc, 0x09f7, 0x0a2b, 0x0a74, 0x0a89, // Entry 80 - BF - 0x0aba, 0x0ad2, 0x0ae1, 0x0ae1, 0x0afc, 0x0b18, 0x0b2d, 0x0b2d, - 0x0b2d, 0x0b2d, 0x0b3f, 0x0b3f, 0x0b57, 0x0b7c, 0x0b94, 0x0bd1, - 0x0bfc, 0x0c27, 0x0c42, 0x0c42, 0x0c4f, 0x0c75, 0x0c87, 0x0c87, - 0x0c9d, 0x0caf, 0x0cca, 0x0ce2, 0x0cf4, 0x0d00, 0x0d0c, 0x0d21, - 0x0d21, 0x0d3f, 0x0d4b, 0x0d6d, 0x0d6d, 0x0d6d, 0x0d9b, 0x0def, - 0x0df5, 0x0e0d, 0x0e35, 0x0e44, 0x0e5c, 0x0e75, 0x0e8a, 0x0eac, -} // Size: 376 bytes - -const thScriptStr string = "" + // Size: 4368 bytes + 0x0aa8, 0x0aba, 0x0ad2, 0x0ae1, 0x0ae1, 0x0afc, 0x0b18, 0x0b2d, + 0x0b2d, 0x0b2d, 0x0b2d, 0x0b3f, 0x0b3f, 0x0b3f, 0x0b57, 0x0b7c, + 0x0b94, 0x0bd1, 0x0bfc, 0x0c27, 0x0c42, 0x0c42, 0x0c4f, 0x0c75, + 0x0c87, 0x0c87, 0x0c9d, 0x0caf, 0x0cca, 0x0ce2, 0x0cf4, 0x0d00, + 0x0d0c, 0x0d21, 0x0d21, 0x0d3f, 0x0d4b, 0x0d6d, 0x0d6d, 0x0d6d, + 0x0d9b, 0x0def, 0x0df5, 0x0df5, 0x0e0d, 0x0e35, 0x0e44, 0x0e5c, + 0x0e75, 0x0e8a, 0x0eac, +} // Size: 382 bytes + +const thScriptStr string = "" + // Size: 4371 bytes "อะฟาคาแอลเบเนีย คอเคเซียอาหรับอิมพีเรียล อราเมอิกอาร์เมเนียอเวสตะบาหลีบา" + "มุมบัสซาบาตักเบงกาลีบลิสซิมโบลส์ปอพอมอฟอพราหมีเบรลล์บูกิสบูฮิดชากมาสัญ" + "ลักษณ์ชนเผ่าพื้นเมืองแคนาดาคาเรียจามเชอโรกีเซิร์ทคอปติกไซเปรียทซีริลลิ" + @@ -31742,35 +33638,36 @@ const thScriptStr string = "" + // Size: 4368 bytes "นออกตักบันวาทาครีไทเลไทลื้อใหม่ทมิฬตันกัทไทเวียตเตลูกูเทงกวาร์ทิฟินากต" + "ากาล็อกทานาไทยทิเบตเทอฮุทายูการิตไวคำพูดที่มองเห็นได้วารังกสิติโอลีเอเ" + "ปอร์เซียโบราณอักษรรูปลิ่มสุเมเรีย-อัคคาเดียยิอินเฮอริตเครื่องหมายทางคณ" + - "ิตศาสตร์อีโมจิซิมโบลส์ไม่มีภาษาเขียนสามัญสคริปต์ที่ไม่รู้จัก" + "ิตศาสตร์อีโมจิสัญลักษณ์ไม่มีภาษาเขียนสามัญสคริปต์ที่ไม่รู้จัก" -var thScriptIdx = []uint16{ // 176 elements +var thScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0012, 0x0046, 0x0046, 0x0058, 0x008f, 0x00ad, 0x00bf, 0x00ce, 0x00dd, 0x00ec, 0x00fb, 0x0110, 0x0110, 0x0134, 0x014c, 0x015e, 0x0170, 0x017f, 0x018e, 0x019d, 0x01f7, 0x0209, 0x0212, 0x0227, 0x0239, 0x024b, 0x0263, 0x027b, 0x02cc, 0x02e4, 0x02f9, 0x0320, 0x034a, 0x037a, 0x03b3, 0x03cb, 0x03e6, 0x0413, - 0x042b, 0x0449, 0x0458, 0x0467, 0x0473, 0x0485, 0x049d, 0x04b2, - 0x04c4, 0x04d0, 0x04e8, 0x0506, 0x0527, 0x0527, 0x0536, 0x054e, - 0x057e, 0x059c, 0x05d8, 0x05fc, 0x060e, 0x062f, 0x063b, 0x0644, + 0x042b, 0x0449, 0x0449, 0x0458, 0x0467, 0x0473, 0x0485, 0x049d, + 0x04b2, 0x04c4, 0x04d0, 0x04e8, 0x0506, 0x0527, 0x0527, 0x0536, + 0x054e, 0x057e, 0x059c, 0x05d8, 0x05fc, 0x060e, 0x062f, 0x063b, // Entry 40 - 7F - 0x0659, 0x066e, 0x067d, 0x0695, 0x06a7, 0x06b3, 0x06c2, 0x06d7, - 0x06e9, 0x06f8, 0x0707, 0x0719, 0x0722, 0x074f, 0x0770, 0x077f, - 0x078e, 0x079d, 0x07bb, 0x07d9, 0x07f1, 0x07fd, 0x080f, 0x0821, - 0x0833, 0x084b, 0x0860, 0x0860, 0x088a, 0x0899, 0x08cd, 0x08e2, - 0x08fd, 0x0909, 0x0924, 0x092d, 0x0936, 0x0951, 0x0951, 0x095d, - 0x0993, 0x09b4, 0x09b4, 0x09cd, 0x09df, 0x09eb, 0x09fa, 0x0a0f, - 0x0a24, 0x0a36, 0x0a36, 0x0a4e, 0x0a66, 0x0a81, 0x0aa8, 0x0abe, - 0x0b00, 0x0b30, 0x0b54, 0x0b6c, 0x0b9f, 0x0be1, 0x0bf0, 0x0c0e, + 0x0644, 0x0659, 0x066e, 0x067d, 0x0695, 0x06a7, 0x06b3, 0x06c2, + 0x06d7, 0x06e9, 0x06f8, 0x0707, 0x0719, 0x0722, 0x074f, 0x0770, + 0x077f, 0x078e, 0x079d, 0x07bb, 0x07d9, 0x07f1, 0x07fd, 0x080f, + 0x0821, 0x0833, 0x084b, 0x0860, 0x0860, 0x088a, 0x0899, 0x08cd, + 0x08e2, 0x08fd, 0x0909, 0x0924, 0x092d, 0x0936, 0x0951, 0x0951, + 0x095d, 0x0993, 0x09b4, 0x09b4, 0x09cd, 0x09df, 0x09eb, 0x09fa, + 0x0a0f, 0x0a24, 0x0a36, 0x0a36, 0x0a4e, 0x0a66, 0x0a81, 0x0aa8, + 0x0abe, 0x0b00, 0x0b30, 0x0b54, 0x0b6c, 0x0b9f, 0x0be1, 0x0bf0, // Entry 80 - BF - 0x0c1d, 0x0c35, 0x0c47, 0x0c77, 0x0c92, 0x0cb0, 0x0cc5, 0x0cd7, - 0x0ce9, 0x0d01, 0x0d10, 0x0d2e, 0x0d3d, 0x0d5e, 0x0d70, 0x0da3, - 0x0dca, 0x0df4, 0x0e0c, 0x0e1b, 0x0e27, 0x0e45, 0x0e51, 0x0e63, - 0x0e78, 0x0e8a, 0x0ea2, 0x0eb7, 0x0ecf, 0x0edb, 0x0ee4, 0x0ef3, - 0x0f08, 0x0f1d, 0x0f23, 0x0f59, 0x0f77, 0x0f89, 0x0fb3, 0x100b, - 0x1011, 0x102c, 0x1074, 0x1086, 0x109e, 0x10c8, 0x10d7, 0x1110, -} // Size: 376 bytes + 0x0c0e, 0x0c1d, 0x0c35, 0x0c47, 0x0c77, 0x0c92, 0x0cb0, 0x0cc5, + 0x0cd7, 0x0ce9, 0x0d01, 0x0d10, 0x0d2e, 0x0d2e, 0x0d3d, 0x0d5e, + 0x0d70, 0x0da3, 0x0dca, 0x0df4, 0x0e0c, 0x0e1b, 0x0e27, 0x0e45, + 0x0e51, 0x0e63, 0x0e78, 0x0e8a, 0x0ea2, 0x0eb7, 0x0ecf, 0x0edb, + 0x0ee4, 0x0ef3, 0x0f08, 0x0f1d, 0x0f23, 0x0f59, 0x0f77, 0x0f89, + 0x0fb3, 0x100b, 0x1011, 0x1011, 0x102c, 0x1074, 0x1086, 0x10a1, + 0x10cb, 0x10da, 0x1113, +} // Size: 382 bytes const trScriptStr string = "" + // Size: 1504 bytes "AfakaKafkas AlbanyasıArapİmparatorluk AramicesiErmeniAvestaBali DiliBamu" + @@ -31795,85 +33692,87 @@ const trScriptStr string = "" + // Size: 1504 bytes "azısıYiKalıtsalMatematiksel GösterimEmojiSembolYazılı OlmayanOrtakBilinm" + "eyen Alfabe" -var trScriptIdx = []uint16{ // 176 elements +var trScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0005, 0x0016, 0x0016, 0x001a, 0x0031, 0x0037, 0x003d, 0x0046, 0x004b, 0x0054, 0x0059, 0x005f, 0x005f, 0x006e, 0x0076, 0x007c, 0x0083, 0x0088, 0x008d, 0x0093, 0x0097, 0x009c, 0x00a0, 0x00a7, 0x00ac, 0x00b2, 0x00ba, 0x00bf, 0x00da, 0x00e4, 0x00eb, 0x00fe, 0x010d, 0x011e, 0x0134, 0x013b, 0x0143, 0x0152, - 0x0159, 0x0161, 0x0166, 0x016d, 0x0172, 0x017a, 0x0182, 0x0186, - 0x018d, 0x0190, 0x0197, 0x01ad, 0x01bb, 0x01bb, 0x01c2, 0x01ca, - 0x01e0, 0x01ec, 0x0202, 0x020c, 0x0211, 0x021e, 0x0222, 0x022b, + 0x0159, 0x0161, 0x0161, 0x0166, 0x016d, 0x0172, 0x017a, 0x0182, + 0x0186, 0x018d, 0x0190, 0x0197, 0x01ad, 0x01bb, 0x01bb, 0x01c2, + 0x01ca, 0x01e0, 0x01ec, 0x0202, 0x020c, 0x0211, 0x021e, 0x0222, // Entry 40 - 7F - 0x0230, 0x0237, 0x023f, 0x0247, 0x0251, 0x0255, 0x025b, 0x0262, - 0x0266, 0x026c, 0x0272, 0x0277, 0x027a, 0x0287, 0x0291, 0x0296, - 0x029c, 0x02a1, 0x02a9, 0x02b1, 0x02b7, 0x02bb, 0x02c0, 0x02c5, - 0x02cd, 0x02d3, 0x02d7, 0x02d7, 0x02ea, 0x02ef, 0x0303, 0x030b, - 0x0314, 0x0318, 0x031e, 0x0322, 0x0325, 0x0331, 0x0331, 0x0336, - 0x0345, 0x034b, 0x034b, 0x0355, 0x035b, 0x0361, 0x0366, 0x036e, - 0x0373, 0x0378, 0x0378, 0x037f, 0x0386, 0x0391, 0x039c, 0x03a4, - 0x03b7, 0x03c6, 0x03d8, 0x03de, 0x03ed, 0x0400, 0x0406, 0x0410, + 0x022b, 0x0230, 0x0237, 0x023f, 0x0247, 0x0251, 0x0255, 0x025b, + 0x0262, 0x0266, 0x026c, 0x0272, 0x0277, 0x027a, 0x0287, 0x0291, + 0x0296, 0x029c, 0x02a1, 0x02a9, 0x02b1, 0x02b7, 0x02bb, 0x02c0, + 0x02c5, 0x02cd, 0x02d3, 0x02d7, 0x02d7, 0x02ea, 0x02ef, 0x0303, + 0x030b, 0x0314, 0x0318, 0x031e, 0x0322, 0x0325, 0x0331, 0x0331, + 0x0336, 0x0345, 0x034b, 0x034b, 0x0355, 0x035b, 0x0361, 0x0366, + 0x036e, 0x0373, 0x0378, 0x0378, 0x037f, 0x0386, 0x0391, 0x039c, + 0x03a4, 0x03b7, 0x03c6, 0x03d8, 0x03de, 0x03ed, 0x0400, 0x0406, // Entry 80 - BF - 0x0415, 0x041c, 0x0422, 0x0432, 0x043c, 0x0449, 0x0450, 0x0457, - 0x045e, 0x0467, 0x046d, 0x0479, 0x047e, 0x048a, 0x0492, 0x04a5, - 0x04b3, 0x04c1, 0x04c9, 0x04ce, 0x04d4, 0x04df, 0x04e4, 0x04ea, - 0x04f2, 0x04f8, 0x04ff, 0x0507, 0x050e, 0x0514, 0x0517, 0x051c, - 0x0523, 0x0538, 0x053b, 0x0558, 0x0565, 0x056b, 0x0574, 0x058e, - 0x0590, 0x0599, 0x05af, 0x05b4, 0x05ba, 0x05ca, 0x05cf, 0x05e0, -} // Size: 376 bytes - -const ukScriptStr string = "" + // Size: 2950 bytes - "афакакавказька албанськаахомарабицяармівірменськаавестійськийбалійськийб" + - "амумбассабатакбенгальськасимволи Бліссабопомофобрахмішрифт Брайлябугійс" + - "ькийбухідчакмауніфіковані символи канадських тубільцівкаріанськийхамітс" + - "ькийчерокікирткоптськийкіпрськийкирилицядавньоцерковнословʼянськийдеван" + - "агарідезеретєгипетський демотичнийєгипетський ієратичнийєгипетський ієр" + - "огліфічнийефіопськакхутсурігрузинськаглаголичнийготичнийгрецькагуджарат" + - "ігурмухіханьхангилькитайськаханунукитайська спрощенакитайська традиційн" + - "аівритхіраганапахау хмонгяпонські силабаріїдавньоугорськийхарапськийдав" + - "ньоіталійськийчамояванськийяпонськакая лікатаканакхароштхікхмерськаканн" + - "адакорейськакаїтіланналаоськалатинський фрактурнийлатинський гельськийл" + - "атиницялепчалімбулінійний Алінійний Вабетка Фрейзераломалікійськийлідій" + - "ськиймандейськийманіхейськиймайя ієрогліфічниймероїтськиймалаяламськамо" + - "нгольськамунмейтей майєкмʼянмськанкоогамічнийсантальськийорхонськийорія" + - "османськийдавньопермськийпхагс-папехлеві написівпехлеві релігійнийпехле" + - "ві літературнийфінікійськийписемність Поллардапарфянськийреджангронго-р" + - "онгорунічнийсамаритянськийсаратісаураштразнаковийшоусингальськасундансь" + - "кийсілоті нагрісирійськийдавньосирійський естрангелодавньосирійський за" + - "хіднийдавньосирійський східнийтагбанватай-ліновий тайський луетамільськ" + - "атангуттай-вʼєттелугутенгвартифінагтагальськийтаанатайськатибетськаугар" + - "итськийваївидиме мовленнядавньоперськийшумеро-аккадський клінописйїуспа" + - "дкованаматематичнаемодзісимвольнабезписемназвичайнаневідома система пис" + - "ьма" - -var ukScriptIdx = []uint16{ // 176 elements + 0x0410, 0x0415, 0x041c, 0x0422, 0x0432, 0x043c, 0x0449, 0x0450, + 0x0457, 0x045e, 0x0467, 0x046d, 0x0479, 0x0479, 0x047e, 0x048a, + 0x0492, 0x04a5, 0x04b3, 0x04c1, 0x04c9, 0x04ce, 0x04d4, 0x04df, + 0x04e4, 0x04ea, 0x04f2, 0x04f8, 0x04ff, 0x0507, 0x050e, 0x0514, + 0x0517, 0x051c, 0x0523, 0x0538, 0x053b, 0x0558, 0x0565, 0x056b, + 0x0574, 0x058e, 0x0590, 0x0590, 0x0599, 0x05af, 0x05b4, 0x05ba, + 0x05ca, 0x05cf, 0x05e0, +} // Size: 382 bytes + +const ukScriptStr string = "" + // Size: 2990 bytes + "адламафакакавказька албанськаахомарабицяармівірменськаавестійськийбалійс" + + "ькийбамумбассабатакбенгальськасимволи Бліссабопомофобрахмішрифт Брайляб" + + "угійськийбухідчакмауніфіковані символи канадських тубільцівкаріанськийх" + + "амітськийчерокікирткоптськийкіпрськийкирилицядавньоцерковнословʼянський" + + "деванагарідезеретєгипетський демотичнийєгипетський ієратичнийєгипетськи" + + "й ієрогліфічнийефіопськакхутсурігрузинськаглаголичнийготичнийгрецькагуд" + + "жаратігурмухіханьхангилькитайськаханунукитайська спрощенакитайська трад" + + "иційнаівритхіраганапахау хмонгяпонські силабаріїдавньоугорськийхарапськ" + + "ийдавньоіталійськийчамояванськийяпонськакая лікатаканакхароштхікхмерськ" + + "аканнадакорейськакаїтіланналаоськалатинський фрактурнийлатинський гельс" + + "ькийлатиницялепчалімбулінійний Алінійний Вабетка Фрейзераломалікійський" + + "лідійськиймандейськийманіхейськиймайя ієрогліфічниймероїтськиймалаяламс" + + "ькамонгольськамунмейтей майєкмʼянмськаневанкоогамічнийсантальськийорхон" + + "ськийоріяосейджиськаосманськийдавньопермськийпхагс-папехлеві написівпех" + + "леві релігійнийпехлеві літературнийфінікійськийписемність Поллардапарфя" + + "нськийреджангронго-ронгорунічнийсамаритянськийсаратісаураштразнаковийшо" + + "усингальськасунданськийсілоті нагрісирійськийдавньосирійський естрангел" + + "одавньосирійський західнийдавньосирійський східнийтагбанватай-ліновий т" + + "айський луетамільськатангуттай-вʼєттелугутенгвартифінагтагальськийтаана" + + "тайськатибетськаугаритськийваївидиме мовленнядавньоперськийшумеро-аккад" + + "ський клінописйїуспадкованаматематичнаемодзісимвольнабезписемназвичайна" + + "невідома система письма" + +var ukScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F - 0x0000, 0x0000, 0x000a, 0x002f, 0x0037, 0x0045, 0x004d, 0x0061, - 0x0079, 0x008d, 0x0097, 0x00a1, 0x00ab, 0x00c1, 0x00c1, 0x00dc, - 0x00ec, 0x00f8, 0x010f, 0x0123, 0x012d, 0x0137, 0x0184, 0x019a, - 0x01ae, 0x01ba, 0x01c2, 0x01d4, 0x01e6, 0x01f6, 0x022a, 0x023e, - 0x024c, 0x024c, 0x0277, 0x02a2, 0x02d3, 0x02d3, 0x02e5, 0x02f5, - 0x0309, 0x031f, 0x032f, 0x032f, 0x033d, 0x034f, 0x035d, 0x0365, - 0x0373, 0x0385, 0x0391, 0x03b4, 0x03db, 0x03db, 0x03e5, 0x03f5, - 0x03f5, 0x040a, 0x042d, 0x044b, 0x045f, 0x0481, 0x0489, 0x049b, + 0x0000, 0x000a, 0x0014, 0x0039, 0x0041, 0x004f, 0x0057, 0x006b, + 0x0083, 0x0097, 0x00a1, 0x00ab, 0x00b5, 0x00cb, 0x00cb, 0x00e6, + 0x00f6, 0x0102, 0x0119, 0x012d, 0x0137, 0x0141, 0x018e, 0x01a4, + 0x01b8, 0x01c4, 0x01cc, 0x01de, 0x01f0, 0x0200, 0x0234, 0x0248, + 0x0256, 0x0256, 0x0281, 0x02ac, 0x02dd, 0x02dd, 0x02ef, 0x02ff, + 0x0313, 0x0329, 0x0329, 0x0339, 0x0339, 0x0347, 0x0359, 0x0367, + 0x036f, 0x037d, 0x038f, 0x039b, 0x03be, 0x03e5, 0x03e5, 0x03ef, + 0x03ff, 0x03ff, 0x0414, 0x0437, 0x0455, 0x0469, 0x048b, 0x0493, // Entry 40 - 7F - 0x04ab, 0x04ab, 0x04b6, 0x04c6, 0x04d8, 0x04ea, 0x04ea, 0x04f8, - 0x050a, 0x050a, 0x0514, 0x051e, 0x052c, 0x0555, 0x057c, 0x058c, - 0x0596, 0x05a0, 0x05b3, 0x05c6, 0x05e3, 0x05eb, 0x05ff, 0x0613, - 0x0613, 0x0629, 0x0641, 0x0641, 0x0664, 0x0664, 0x0664, 0x067a, - 0x0692, 0x0692, 0x06a8, 0x06ae, 0x06ae, 0x06c5, 0x06c5, 0x06d7, - 0x06d7, 0x06d7, 0x06d7, 0x06d7, 0x06dd, 0x06dd, 0x06ef, 0x0707, - 0x071b, 0x0723, 0x0723, 0x0737, 0x0737, 0x0737, 0x0755, 0x0764, - 0x0781, 0x07a4, 0x07cb, 0x07e3, 0x0808, 0x081e, 0x082c, 0x0841, + 0x04a5, 0x04b5, 0x04b5, 0x04c0, 0x04d0, 0x04e2, 0x04f4, 0x04f4, + 0x0502, 0x0514, 0x0514, 0x051e, 0x0528, 0x0536, 0x055f, 0x0586, + 0x0596, 0x05a0, 0x05aa, 0x05bd, 0x05d0, 0x05ed, 0x05f5, 0x0609, + 0x061d, 0x061d, 0x0633, 0x064b, 0x064b, 0x066e, 0x066e, 0x066e, + 0x0684, 0x069c, 0x069c, 0x06b2, 0x06b8, 0x06b8, 0x06cf, 0x06cf, + 0x06e1, 0x06e1, 0x06e1, 0x06e9, 0x06e9, 0x06ef, 0x06ef, 0x0701, + 0x0719, 0x072d, 0x0735, 0x074b, 0x075f, 0x075f, 0x075f, 0x077d, + 0x078c, 0x07a9, 0x07cc, 0x07f3, 0x080b, 0x0830, 0x0846, 0x0854, // Entry 80 - BF - 0x0851, 0x086d, 0x0879, 0x0879, 0x088b, 0x089b, 0x08a1, 0x08a1, - 0x08a1, 0x08a1, 0x08b7, 0x08b7, 0x08cd, 0x08e4, 0x08f8, 0x092d, - 0x095e, 0x098d, 0x099d, 0x099d, 0x09a8, 0x09ca, 0x09de, 0x09ea, - 0x09f9, 0x0a05, 0x0a13, 0x0a21, 0x0a37, 0x0a41, 0x0a4f, 0x0a61, - 0x0a61, 0x0a77, 0x0a7d, 0x0a9a, 0x0a9a, 0x0a9a, 0x0ab6, 0x0ae8, - 0x0aec, 0x0b02, 0x0b18, 0x0b24, 0x0b36, 0x0b4a, 0x0b5a, 0x0b86, -} // Size: 376 bytes + 0x0869, 0x0879, 0x0895, 0x08a1, 0x08a1, 0x08b3, 0x08c3, 0x08c9, + 0x08c9, 0x08c9, 0x08c9, 0x08df, 0x08df, 0x08df, 0x08f5, 0x090c, + 0x0920, 0x0955, 0x0986, 0x09b5, 0x09c5, 0x09c5, 0x09d0, 0x09f2, + 0x0a06, 0x0a12, 0x0a21, 0x0a2d, 0x0a3b, 0x0a49, 0x0a5f, 0x0a69, + 0x0a77, 0x0a89, 0x0a89, 0x0a9f, 0x0aa5, 0x0ac2, 0x0ac2, 0x0ac2, + 0x0ade, 0x0b10, 0x0b14, 0x0b14, 0x0b2a, 0x0b40, 0x0b4c, 0x0b5e, + 0x0b72, 0x0b82, 0x0bae, +} // Size: 382 bytes const urScriptStr string = "" + // Size: 579 bytes "عربیآرمینیائیبنگالیبوپوموفوبریلسیریلکدیوناگریایتھوپیائیجارجیائییونانیگجر" + @@ -31882,33 +33781,34 @@ const urScriptStr string = "" + // Size: 579 bytes "لتیلگوتھاناتھائیتبتیریاضی کی علامتیںایموجیعلاماتغیر تحریر شدہعامنامعلوم" + " رسم الخط" -var urScriptIdx = []uint16{ // 176 elements +var urScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x0026, 0x0026, 0x0026, 0x0036, 0x0036, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x004a, 0x004a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x005a, 0x006e, 0x006e, - 0x007e, 0x007e, 0x007e, 0x007e, 0x008a, 0x0096, 0x00a2, 0x00aa, - 0x00b4, 0x00ba, 0x00ba, 0x00c9, 0x00dc, 0x00dc, 0x00e8, 0x00f8, - 0x00f8, 0x00f8, 0x0115, 0x0115, 0x0115, 0x0115, 0x011d, 0x011d, + 0x007e, 0x007e, 0x007e, 0x007e, 0x007e, 0x008a, 0x0096, 0x00a2, + 0x00aa, 0x00b4, 0x00ba, 0x00ba, 0x00c9, 0x00dc, 0x00dc, 0x00e8, + 0x00f8, 0x00f8, 0x00f8, 0x0115, 0x0115, 0x0115, 0x0115, 0x011d, // Entry 40 - 7F - 0x0129, 0x0129, 0x0129, 0x0137, 0x0137, 0x013f, 0x013f, 0x0145, - 0x0153, 0x0153, 0x0153, 0x0153, 0x0159, 0x0159, 0x0159, 0x0165, + 0x011d, 0x0129, 0x0129, 0x0129, 0x0137, 0x0137, 0x013f, 0x013f, + 0x0145, 0x0153, 0x0153, 0x0153, 0x0153, 0x0159, 0x0159, 0x0159, 0x0165, 0x0165, 0x0165, 0x0165, 0x0165, 0x0165, 0x0165, 0x0165, 0x0165, 0x0165, 0x0165, 0x0165, 0x0165, 0x0165, 0x0165, 0x0165, - 0x0171, 0x0171, 0x0183, 0x0183, 0x0183, 0x0183, 0x0183, 0x0191, + 0x0165, 0x0171, 0x0171, 0x0183, 0x0183, 0x0183, 0x0183, 0x0183, 0x0191, 0x0191, 0x0191, 0x0191, 0x0191, 0x0191, 0x0191, 0x0191, - 0x0191, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, + 0x0191, 0x0191, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, // Entry 80 - BF 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, 0x0199, - 0x0199, 0x0199, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, - 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01ab, 0x01ab, - 0x01ab, 0x01b5, 0x01b5, 0x01b5, 0x01b5, 0x01bf, 0x01c9, 0x01d1, - 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, - 0x01d1, 0x01d1, 0x01ef, 0x01fb, 0x0207, 0x021f, 0x0225, 0x0243, -} // Size: 376 bytes + 0x0199, 0x0199, 0x0199, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, 0x01a5, + 0x01ab, 0x01ab, 0x01ab, 0x01b5, 0x01b5, 0x01b5, 0x01b5, 0x01bf, + 0x01c9, 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, + 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01d1, 0x01ef, 0x01fb, 0x0207, + 0x021f, 0x0225, 0x0243, +} // Size: 382 bytes const uzScriptStr string = "" + // Size: 321 bytes "arabarmanbengalbopomofobraylkirilldevanagarihabashgruzingrekgujarotgurmu" + @@ -31917,33 +33817,34 @@ const uzScriptStr string = "" + // Size: 321 bytes "lmyanmaoriyasingaltamiltelugutaanataytibetmatematik ifodalaremojibelgila" + "ryozuvsizumumiynoma’lum yozuv" -var uzScriptIdx = []uint16{ // 176 elements +var uzScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x0004, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x000f, 0x000f, 0x000f, 0x0017, 0x0017, 0x001c, 0x001c, 0x001c, 0x001c, 0x001c, 0x001c, 0x001c, 0x001c, 0x001c, 0x001c, 0x001c, 0x0022, 0x0022, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x0032, 0x0032, - 0x0038, 0x0038, 0x0038, 0x0038, 0x003c, 0x0043, 0x004b, 0x004f, - 0x0055, 0x005a, 0x005a, 0x006c, 0x007d, 0x007d, 0x0082, 0x008a, - 0x008a, 0x008a, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a4, 0x00a4, + 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x003c, 0x0043, 0x004b, + 0x004f, 0x0055, 0x005a, 0x005a, 0x006c, 0x007d, 0x007d, 0x0082, + 0x008a, 0x008a, 0x008a, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a4, // Entry 40 - 7F - 0x00a9, 0x00a9, 0x00a9, 0x00b1, 0x00b1, 0x00b6, 0x00b6, 0x00bd, - 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c7, 0x00c7, 0x00c7, 0x00cc, + 0x00a4, 0x00a9, 0x00a9, 0x00a9, 0x00b1, 0x00b1, 0x00b6, 0x00b6, + 0x00bd, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c7, 0x00c7, 0x00c7, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, 0x00cc, - 0x00d5, 0x00d5, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00e1, + 0x00cc, 0x00d5, 0x00d5, 0x00db, 0x00db, 0x00db, 0x00db, 0x00db, 0x00e1, 0x00e1, 0x00e1, 0x00e1, 0x00e1, 0x00e1, 0x00e1, 0x00e1, - 0x00e1, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, + 0x00e1, 0x00e1, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, // Entry 80 - BF 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, - 0x00e6, 0x00e6, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, - 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00f1, 0x00f1, - 0x00f1, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00fc, 0x00ff, 0x0104, - 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, - 0x0104, 0x0104, 0x0116, 0x011b, 0x0123, 0x012b, 0x0131, 0x0141, -} // Size: 376 bytes + 0x00e6, 0x00e6, 0x00e6, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, + 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, + 0x00f1, 0x00f1, 0x00f1, 0x00f7, 0x00f7, 0x00f7, 0x00f7, 0x00fc, + 0x00ff, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, + 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0116, 0x011b, 0x0123, + 0x012b, 0x0131, 0x0141, +} // Size: 382 bytes const viScriptStr string = "" + // Size: 2528 bytes "Chữ AfakaChữ Ả RậpChữ Imperial AramaicChữ ArmeniaChữ AvestanChữ BaliChữ " + @@ -31976,117 +33877,121 @@ const viScriptStr string = "" + // Size: 2528 bytes "Chữ DiChữ Kế thừaKý hiệu Toán họcBiểu tượngKý hiệuChưa có chữ viếtChungC" + "hữ viết không xác định" -var viScriptIdx = []uint16{ // 176 elements +var viScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x000b, 0x000b, 0x000b, 0x001a, 0x0030, 0x003d, 0x004a, 0x0054, 0x005f, 0x006e, 0x0079, 0x0089, 0x0089, 0x009a, 0x00a8, 0x00b4, 0x00c7, 0x00d2, 0x00dd, 0x00e9, 0x0112, 0x011d, 0x0128, 0x0136, 0x0141, 0x014d, 0x0157, 0x0162, 0x0184, 0x0194, 0x01a1, 0x01b9, 0x01d2, 0x01e9, 0x0206, 0x0206, 0x0214, 0x022a, - 0x0236, 0x0246, 0x0255, 0x0262, 0x0270, 0x027e, 0x028c, 0x0296, - 0x02a2, 0x02ac, 0x02b9, 0x02d0, 0x02e7, 0x02e7, 0x02f5, 0x0303, - 0x0320, 0x0332, 0x035d, 0x036f, 0x037a, 0x038b, 0x0395, 0x039f, + 0x0236, 0x0246, 0x0246, 0x0255, 0x0262, 0x0270, 0x027e, 0x028c, + 0x0296, 0x02a2, 0x02ac, 0x02b9, 0x02d0, 0x02e7, 0x02e7, 0x02f5, + 0x0303, 0x0320, 0x0332, 0x035d, 0x036f, 0x037a, 0x038b, 0x0395, // Entry 40 - 7F - 0x03b1, 0x03be, 0x03cc, 0x03da, 0x03ea, 0x03f7, 0x0403, 0x0410, - 0x0421, 0x042d, 0x0439, 0x0444, 0x044e, 0x0463, 0x047b, 0x0488, - 0x0494, 0x049f, 0x04ad, 0x04bb, 0x04c7, 0x04d1, 0x04dc, 0x04e7, - 0x04e7, 0x04f5, 0x0505, 0x0505, 0x051e, 0x0529, 0x0543, 0x0551, - 0x0560, 0x0560, 0x0570, 0x0580, 0x0589, 0x059b, 0x059b, 0x05a8, - 0x05c2, 0x05d1, 0x05d1, 0x05e0, 0x05ec, 0x05f8, 0x0603, 0x0611, - 0x061d, 0x0627, 0x0627, 0x0634, 0x0643, 0x0643, 0x0654, 0x0662, - 0x0678, 0x068f, 0x06a2, 0x06b1, 0x06c2, 0x06d8, 0x06e4, 0x06f4, + 0x039f, 0x03b1, 0x03be, 0x03cc, 0x03da, 0x03ea, 0x03f7, 0x0403, + 0x0410, 0x0421, 0x042d, 0x0439, 0x0444, 0x044e, 0x0463, 0x047b, + 0x0488, 0x0494, 0x049f, 0x04ad, 0x04bb, 0x04c7, 0x04d1, 0x04dc, + 0x04e7, 0x04e7, 0x04f5, 0x0505, 0x0505, 0x051e, 0x0529, 0x0543, + 0x0551, 0x0560, 0x0560, 0x0570, 0x0580, 0x0589, 0x059b, 0x059b, + 0x05a8, 0x05c2, 0x05d1, 0x05d1, 0x05e0, 0x05ec, 0x05f8, 0x0603, + 0x0611, 0x061d, 0x0627, 0x0627, 0x0634, 0x0643, 0x0643, 0x0654, + 0x0662, 0x0678, 0x068f, 0x06a2, 0x06b1, 0x06c2, 0x06d8, 0x06e4, // Entry 80 - BF - 0x06ff, 0x070e, 0x071a, 0x0732, 0x0742, 0x0759, 0x0766, 0x0773, - 0x0773, 0x0782, 0x078f, 0x07a1, 0x07b0, 0x07c2, 0x07cd, 0x07e4, - 0x07f4, 0x0806, 0x0814, 0x081f, 0x082d, 0x0844, 0x084f, 0x085b, - 0x086d, 0x0879, 0x0886, 0x0894, 0x08a1, 0x08ad, 0x08b8, 0x08c9, - 0x08d6, 0x08e2, 0x08eb, 0x090d, 0x0920, 0x092c, 0x093d, 0x095d, - 0x0965, 0x0976, 0x098c, 0x099b, 0x09a5, 0x09bb, 0x09c0, 0x09e0, -} // Size: 376 bytes - -const zhScriptStr string = "" + // Size: 2277 bytes - "Adlm阿法卡文AghbAhom阿拉伯文皇室亚拉姆文亚美尼亚文阿维斯陀文巴厘文巴姆穆文巴萨文巴塔克文孟加拉文Bhks布列斯符号汉语拼音婆罗米文字" + - "布莱叶盲文布吉文布希德文查克马文加拿大土著统一音节卡里亚文占文切罗基文色斯文克普特文塞浦路斯文西里尔文西里尔文字(古教会斯拉夫文的变体)天城" + - "文德塞莱特文杜普洛伊速记后期埃及文古埃及僧侣书写体古埃及象形文厄尔巴埃塞俄比亚文格鲁吉亚文(教堂体)格鲁吉亚文格拉哥里文哥特文格兰塔文希腊文" + - "古吉拉特文果鲁穆奇文汉语注音谚文汉字汉奴罗文简体中文繁体中文Hatr希伯来文平假名安那托利亚象形文字杨松录苗文片假名或平假名古匈牙利文古希腊" + - "哈拉潘古意大利文韩文字母爪哇文日文女真文克耶李文字片假名卡罗须提文高棉文克吉奇文字卡纳达文韩文克佩列文凯提文兰拿文老挝文拉丁文(哥特式字体变" + - "体)拉丁文(盖尔文变体)拉丁文雷布查文林布文线形文字(A)线形文字(B)傈僳文洛马文利西亚文吕底亚文Mahj阿拉米文摩尼教文Marc玛雅圣符" + - "文门迪文麦罗埃草书麦若提克文马拉雅拉姆文Modi蒙古文韩文语系谬文曼尼普尔文Mult缅甸文古北方阿拉伯文纳巴泰文Newa纳西格巴文西非书面文" + - "字(N’Ko)女书欧甘文桑塔利文鄂尔浑文奥里亚文Osge奥斯曼亚文帕尔迈拉文Pauc古彼尔姆文八思巴文巴列维文碑铭体巴列维文(圣诗体)巴列维" + - "文(书体)腓尼基文波拉德音标文字帕提亚文碑铭体拉让文朗格朗格文古代北欧文撒马利亚文沙拉堤文古南阿拉伯文索拉什特拉文书写符号萧伯纳式文夏拉达文" + - "悉昙信德文僧伽罗文索朗桑朋文巽他文锡尔赫特文叙利亚文福音体叙利亚文西叙利亚文东叙利亚文塔格班瓦文泰克里文泰乐文新傣文泰米尔文唐古特文越南傣文" + - "泰卢固文腾格瓦文字提非纳文塔加路文塔安那文泰文藏文迈蒂利文乌加里特文瓦依文可见语言瓦郎奇蒂文字沃莱艾文古波斯文苏美尔-阿卡德楔形文字彝文遗传" + - "学术语数学符号绘文字符号非书面文字通用未知文字" - -var zhScriptIdx = []uint16{ // 176 elements + 0x06f4, 0x06ff, 0x070e, 0x071a, 0x0732, 0x0742, 0x0759, 0x0766, + 0x0773, 0x0773, 0x0782, 0x078f, 0x07a1, 0x07a1, 0x07b0, 0x07c2, + 0x07cd, 0x07e4, 0x07f4, 0x0806, 0x0814, 0x081f, 0x082d, 0x0844, + 0x084f, 0x085b, 0x086d, 0x0879, 0x0886, 0x0894, 0x08a1, 0x08ad, + 0x08b8, 0x08c9, 0x08d6, 0x08e2, 0x08eb, 0x090d, 0x0920, 0x092c, + 0x093d, 0x095d, 0x0965, 0x0965, 0x0976, 0x098c, 0x099b, 0x09a5, + 0x09bb, 0x09c0, 0x09e0, +} // Size: 382 bytes + +const zhScriptStr string = "" + // Size: 2382 bytes + "阿德拉姆文阿法卡文AghbAhom阿拉伯文皇室亚拉姆文亚美尼亚文阿维斯陀文巴厘文巴姆穆文巴萨文巴塔克文孟加拉文拜克舒克文布列斯符号汉语拼音婆罗米" + + "文字布莱叶盲文布吉文布希德文查克马文加拿大土著统一音节卡里亚文占文切罗基文色斯文克普特文塞浦路斯文西里尔文西里尔文字(古教会斯拉夫文的变体)" + + "天城文德塞莱特文杜普洛伊速记后期埃及文古埃及僧侣书写体古埃及象形文爱尔巴桑文埃塞俄比亚文格鲁吉亚文(教堂体)格鲁吉亚文格拉哥里文马萨拉姆冈德" + + "文哥特文格兰塔文希腊文古吉拉特文果鲁穆奇文汉语注音谚文汉字汉奴罗文简体中文繁体中文Hatr希伯来文平假名安那托利亚象形文字杨松录苗文假名表古" + + "匈牙利文印度河文字古意大利文韩文字母爪哇文日文女真文克耶李文字片假名卡罗须提文高棉文克吉奇文字卡纳达文韩文克佩列文凯提文兰拿文老挝文拉丁文(" + + "哥特式字体变体)拉丁文(盖尔文变体)拉丁文雷布查文林布文线形文字(A)线形文字(B)傈僳文洛马文利西亚文吕底亚文Mahj阿拉米文摩尼教文大玛" + + "尔文玛雅圣符文门迪文麦罗埃草书麦若提克文马拉雅拉姆文Modi蒙古文韩文语系谬文曼尼普尔文Mult缅甸文古北方阿拉伯文纳巴泰文尼瓦文纳西格巴文" + + "西非书面文字(N’Ko)女书欧甘文桑塔利文鄂尔浑文奥里亚文欧塞奇文奥斯曼亚文帕尔迈拉文包金豪文古彼尔姆文八思巴文巴列维文碑铭体巴列维文(圣诗" + + "体)巴列维文(书体)腓尼基文波拉德音标文字帕提亚文碑铭体拉让文朗格朗格文古代北欧文撒马利亚文沙拉堤文古南阿拉伯文索拉什特拉文书写符号萧伯纳式" + + "文夏拉达文悉昙信德文僧伽罗文索朗桑朋文索永布文巽他文锡尔赫特文叙利亚文福音体叙利亚文西叙利亚文东叙利亚文塔格班瓦文泰克里文泰乐文新傣文泰米尔" + + "文唐古特文越南傣文泰卢固文腾格瓦文字提非纳文塔加路文塔安那文泰文藏文迈蒂利文乌加里特文瓦依文可见语言瓦郎奇蒂文字沃莱艾文古波斯文苏美尔-阿卡" + + "德楔形文字彝文札那巴札尔方块文字遗传学术语数学符号表情符号符号非书面文字通用未知文字" + +var zhScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F - 0x0000, 0x0004, 0x0010, 0x0014, 0x0018, 0x0024, 0x0036, 0x0045, - 0x0054, 0x005d, 0x0069, 0x0072, 0x007e, 0x008a, 0x008e, 0x009d, - 0x00a9, 0x00b8, 0x00c7, 0x00d0, 0x00dc, 0x00e8, 0x0103, 0x010f, - 0x0115, 0x0121, 0x012a, 0x0136, 0x0145, 0x0151, 0x0184, 0x018d, - 0x019c, 0x01ae, 0x01bd, 0x01d5, 0x01e7, 0x01f0, 0x0202, 0x0220, - 0x022f, 0x023e, 0x0247, 0x0253, 0x025c, 0x026b, 0x027a, 0x0286, - 0x028c, 0x0292, 0x029e, 0x02aa, 0x02b6, 0x02ba, 0x02c6, 0x02cf, - 0x02ea, 0x02f9, 0x030e, 0x031d, 0x032f, 0x033e, 0x034a, 0x0353, + 0x0000, 0x000f, 0x001b, 0x001f, 0x0023, 0x002f, 0x0041, 0x0050, + 0x005f, 0x0068, 0x0074, 0x007d, 0x0089, 0x0095, 0x00a4, 0x00b3, + 0x00bf, 0x00ce, 0x00dd, 0x00e6, 0x00f2, 0x00fe, 0x0119, 0x0125, + 0x012b, 0x0137, 0x0140, 0x014c, 0x015b, 0x0167, 0x019a, 0x01a3, + 0x01b2, 0x01c4, 0x01d3, 0x01eb, 0x01fd, 0x020c, 0x021e, 0x023c, + 0x024b, 0x025a, 0x026f, 0x0278, 0x0284, 0x028d, 0x029c, 0x02ab, + 0x02b7, 0x02bd, 0x02c3, 0x02cf, 0x02db, 0x02e7, 0x02eb, 0x02f7, + 0x0300, 0x031b, 0x032a, 0x0333, 0x0342, 0x0351, 0x0360, 0x036c, // Entry 40 - 7F - 0x0359, 0x0362, 0x0371, 0x037a, 0x0389, 0x0392, 0x03a1, 0x03ad, - 0x03b3, 0x03bf, 0x03c8, 0x03d1, 0x03da, 0x03fe, 0x041c, 0x0425, - 0x0431, 0x043a, 0x044d, 0x0460, 0x0469, 0x0472, 0x047e, 0x048a, - 0x048e, 0x049a, 0x04a6, 0x04aa, 0x04b9, 0x04c2, 0x04d1, 0x04e0, - 0x04f2, 0x04f6, 0x04ff, 0x050b, 0x0511, 0x0520, 0x0524, 0x052d, - 0x0542, 0x054e, 0x0552, 0x0561, 0x057f, 0x0585, 0x058e, 0x059a, - 0x05a6, 0x05b2, 0x05b6, 0x05c5, 0x05d4, 0x05d8, 0x05e7, 0x05f3, - 0x0608, 0x0623, 0x063b, 0x0647, 0x065c, 0x0671, 0x067a, 0x0689, + 0x0375, 0x037b, 0x0384, 0x0393, 0x039c, 0x03ab, 0x03b4, 0x03c3, + 0x03cf, 0x03d5, 0x03e1, 0x03ea, 0x03f3, 0x03fc, 0x0420, 0x043e, + 0x0447, 0x0453, 0x045c, 0x046f, 0x0482, 0x048b, 0x0494, 0x04a0, + 0x04ac, 0x04b0, 0x04bc, 0x04c8, 0x04d4, 0x04e3, 0x04ec, 0x04fb, + 0x050a, 0x051c, 0x0520, 0x0529, 0x0535, 0x053b, 0x054a, 0x054e, + 0x0557, 0x056c, 0x0578, 0x0581, 0x0590, 0x05ae, 0x05b4, 0x05bd, + 0x05c9, 0x05d5, 0x05e1, 0x05ed, 0x05fc, 0x060b, 0x0617, 0x0626, + 0x0632, 0x0647, 0x0662, 0x067a, 0x0686, 0x069b, 0x06b0, 0x06b9, // Entry 80 - BF - 0x0698, 0x06a7, 0x06b3, 0x06c5, 0x06d7, 0x06e3, 0x06f2, 0x06fe, - 0x0704, 0x070d, 0x0719, 0x0728, 0x0731, 0x0740, 0x074c, 0x0761, - 0x0770, 0x077f, 0x078e, 0x079a, 0x07a3, 0x07ac, 0x07b8, 0x07c4, - 0x07d0, 0x07dc, 0x07eb, 0x07f7, 0x0803, 0x080f, 0x0815, 0x081b, - 0x0827, 0x0836, 0x083f, 0x084b, 0x085d, 0x0869, 0x0875, 0x0894, - 0x089a, 0x08a9, 0x08b5, 0x08be, 0x08c4, 0x08d3, 0x08d9, 0x08e5, -} // Size: 376 bytes - -const zhHantScriptStr string = "" + // Size: 2460 bytes - "阿法卡文字高加索阿爾巴尼亞文阿拉伯文皇室亞美尼亞文亞美尼亞文阿維斯陀文峇里文巴姆穆文巴薩文巴塔克文孟加拉文布列斯文注音符號婆羅米文盲人用點字布吉" + - "斯文布希德文查克馬文加拿大原住民通用字符卡里亞文占文柴羅基文色斯文科普特文塞浦路斯文斯拉夫文西里爾文(古教會斯拉夫文變體)天城文德瑟雷特文杜" + - "普洛伊速記古埃及世俗體古埃及僧侶體古埃及象形文字愛爾巴桑文衣索比亞文喬治亞語系(阿索他路里和努斯克胡里文)喬治亞文格拉哥里文歌德文格蘭他文字" + - "希臘文古吉拉特文古魯穆奇文標上注音符號的漢字韓文字漢字哈努諾文簡體中文繁體中文希伯來文平假名安那托利亞象形文字楊松錄苗文片假名或平假名古匈牙" + - "利文印度河流域(哈拉帕文)古意大利文韓文字母爪哇文日文女真文字克耶李文片假名卡羅須提文高棉文克吉奇文字坎那達文韓文克培列文凱提文藍拿文寮國文" + - "拉丁文(尖角體活字變體)拉丁文(蓋爾語變體)拉丁文雷布查文林佈文線性文字(A)線性文字(B)栗僳文洛馬文呂西亞語里底亞語曼底安文摩尼教文瑪雅" + - "象形文字門德文麥羅埃文(曲線字體)麥羅埃文馬來亞拉姆文蒙古文蒙氏點字謬文曼尼普爾文緬甸文古北阿拉伯文納巴泰文字納西格巴文西非書面語言 (N’" + - "Ko)女書文字歐甘文桑塔利文鄂爾渾文歐利亞文歐斯曼亞文帕米瑞拉文字古彼爾姆諸文八思巴文巴列維文(碑銘體)巴列維文(聖詩體)巴列維文(書體)腓尼基" + - "文柏格理拼音符帕提亞文(碑銘體)拉讓文朗格朗格象形文古北歐文字撒馬利亞文沙拉堤文古南阿拉伯文索拉什特拉文手語書寫符號簫柏納字符夏拉達文悉曇文" + - "字信德文錫蘭文索朗桑朋文字巽他文希洛弟納格里文敍利亞文敘利亞文(福音體文字變體)敘利亞文(西方文字變體)敘利亞文(東方文字變體)南島文塔卡里" + - "文字傣哪文西雙版納新傣文坦米爾文西夏文傣擔文泰盧固文談格瓦文提非納文塔加拉文塔安那文泰文西藏文邁蒂利文烏加列文瓦依文視覺語音文字瓦郎奇蒂文字" + - "沃雷艾文古波斯文蘇米魯亞甲文楔形文字彞文繼承文字(Unicode)數學符號表情符號符號非書寫語言一般文字未知文字" - -var zhHantScriptIdx = []uint16{ // 176 elements + 0x06c8, 0x06d7, 0x06e6, 0x06f2, 0x0704, 0x0716, 0x0722, 0x0731, + 0x073d, 0x0743, 0x074c, 0x0758, 0x0767, 0x0773, 0x077c, 0x078b, + 0x0797, 0x07ac, 0x07bb, 0x07ca, 0x07d9, 0x07e5, 0x07ee, 0x07f7, + 0x0803, 0x080f, 0x081b, 0x0827, 0x0836, 0x0842, 0x084e, 0x085a, + 0x0860, 0x0866, 0x0872, 0x0881, 0x088a, 0x0896, 0x08a8, 0x08b4, + 0x08c0, 0x08df, 0x08e5, 0x0900, 0x090f, 0x091b, 0x0927, 0x092d, + 0x093c, 0x0942, 0x094e, +} // Size: 382 bytes + +const zhHantScriptStr string = "" + // Size: 2624 bytes + "富拉文阿法卡文字高加索阿爾巴尼亞文阿洪姆文阿拉伯文皇室亞美尼亞文亞美尼亞文阿維斯陀文峇里文巴姆穆文巴薩文巴塔克文孟加拉文梵文布列斯文注音符號婆羅" + + "米文盲人用點字布吉斯文布希德文查克馬文加拿大原住民通用字符卡里亞文占文柴羅基文色斯文科普特文塞浦路斯文斯拉夫文西里爾文(古教會斯拉夫文變體)" + + "天城文德瑟雷特文杜普洛伊速記古埃及世俗體古埃及僧侶體古埃及象形文字愛爾巴桑文衣索比亞文喬治亞語系(阿索他路里和努斯克胡里文)喬治亞文格拉哥里" + + "文岡德文歌德文格蘭他文字希臘文古吉拉特文古魯穆奇文標上注音符號的漢字韓文字漢字哈努諾文簡體中文繁體中文哈特拉文希伯來文平假名安那托利亞象形文" + + "字楊松錄苗文片假名或平假名古匈牙利文印度河流域(哈拉帕文)古意大利文韓文字母爪哇文日文女真文字克耶李文片假名卡羅須提文高棉文克吉奇文字坎那達" + + "文韓文克培列文凱提文藍拿文寮國文拉丁文(尖角體活字變體)拉丁文(蓋爾語變體)拉丁文雷布查文林佈文線性文字(A)線性文字(B)栗僳文洛馬文呂西" + + "亞語里底亞語印地文曼底安文摩尼教文藏文瑪雅象形文字門德文麥羅埃文(曲線字體)麥羅埃文馬來亞拉姆文馬拉地文蒙古文蒙氏點字謬文曼尼普爾文木爾坦文" + + "緬甸文古北阿拉伯文納巴泰文字Vote 尼瓦爾文納西格巴文西非書面語言 (N’Ko)女書文字歐甘文桑塔利文鄂爾渾文歐利亞文歐塞奇文歐斯曼亞文帕" + + "米瑞拉文字鮑欽豪文古彼爾姆諸文八思巴文巴列維文(碑銘體)巴列維文(聖詩體)巴列維文(書體)腓尼基文柏格理拼音符帕提亞文(碑銘體)拉讓文朗格朗" + + "格象形文古北歐文字撒馬利亞文沙拉堤文古南阿拉伯文索拉什特拉文手語書寫符號簫柏納字符夏拉達文悉曇文字信德文錫蘭文索朗桑朋文字索永布文字巽他文希" + + "洛弟納格里文敍利亞文敘利亞文(福音體文字變體)敘利亞文(西方文字變體)敘利亞文(東方文字變體)南島文塔卡里文字傣哪文西雙版納新傣文坦米爾文西" + + "夏文傣擔文泰盧固文談格瓦文提非納文塔加拉文塔安那文泰文西藏文邁蒂利文烏加列文瓦依文視覺語音文字瓦郎奇蒂文字沃雷艾文古波斯文蘇米魯亞甲文楔形文" + + "字彞文札那巴札爾文字繼承文字(Unicode)數學符號表情符號符號非書寫語言一般文字未知文字" + +var zhHantScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F - 0x0000, 0x0000, 0x000f, 0x002a, 0x002a, 0x0036, 0x004b, 0x005a, - 0x0069, 0x0072, 0x007e, 0x0087, 0x0093, 0x009f, 0x009f, 0x00ab, - 0x00b7, 0x00c3, 0x00d2, 0x00de, 0x00ea, 0x00f6, 0x0114, 0x0120, - 0x0126, 0x0132, 0x013b, 0x0147, 0x0156, 0x0162, 0x018f, 0x0198, - 0x01a7, 0x01b9, 0x01cb, 0x01dd, 0x01f2, 0x0201, 0x0210, 0x0249, - 0x0255, 0x0264, 0x026d, 0x027c, 0x0285, 0x0294, 0x02a3, 0x02be, - 0x02c7, 0x02cd, 0x02d9, 0x02e5, 0x02f1, 0x02f1, 0x02fd, 0x0306, - 0x0321, 0x0330, 0x0345, 0x0354, 0x0375, 0x0384, 0x0390, 0x0399, + 0x0000, 0x0009, 0x0018, 0x0033, 0x003f, 0x004b, 0x0060, 0x006f, + 0x007e, 0x0087, 0x0093, 0x009c, 0x00a8, 0x00b4, 0x00ba, 0x00c6, + 0x00d2, 0x00de, 0x00ed, 0x00f9, 0x0105, 0x0111, 0x012f, 0x013b, + 0x0141, 0x014d, 0x0156, 0x0162, 0x0171, 0x017d, 0x01aa, 0x01b3, + 0x01c2, 0x01d4, 0x01e6, 0x01f8, 0x020d, 0x021c, 0x022b, 0x0264, + 0x0270, 0x027f, 0x0288, 0x0291, 0x02a0, 0x02a9, 0x02b8, 0x02c7, + 0x02e2, 0x02eb, 0x02f1, 0x02fd, 0x0309, 0x0315, 0x0321, 0x032d, + 0x0336, 0x0351, 0x0360, 0x0375, 0x0384, 0x03a5, 0x03b4, 0x03c0, // Entry 40 - 7F - 0x039f, 0x03ab, 0x03b7, 0x03c0, 0x03cf, 0x03d8, 0x03e7, 0x03f3, - 0x03f9, 0x0405, 0x040e, 0x0417, 0x0420, 0x0444, 0x0462, 0x046b, - 0x0477, 0x0480, 0x0493, 0x04a6, 0x04af, 0x04b8, 0x04c4, 0x04d0, - 0x04d0, 0x04dc, 0x04e8, 0x04e8, 0x04fa, 0x0503, 0x0521, 0x052d, - 0x053f, 0x053f, 0x0548, 0x0554, 0x055a, 0x0569, 0x0569, 0x0572, - 0x0584, 0x0593, 0x0593, 0x05a2, 0x05bd, 0x05c9, 0x05d2, 0x05de, - 0x05ea, 0x05f6, 0x05f6, 0x0605, 0x0617, 0x0617, 0x0629, 0x0635, - 0x0650, 0x066b, 0x0683, 0x068f, 0x06a1, 0x06bc, 0x06c5, 0x06da, + 0x03c9, 0x03cf, 0x03db, 0x03e7, 0x03f0, 0x03ff, 0x0408, 0x0417, + 0x0423, 0x0429, 0x0435, 0x043e, 0x0447, 0x0450, 0x0474, 0x0492, + 0x049b, 0x04a7, 0x04b0, 0x04c3, 0x04d6, 0x04df, 0x04e8, 0x04f4, + 0x0500, 0x0509, 0x0515, 0x0521, 0x0527, 0x0539, 0x0542, 0x0560, + 0x056c, 0x057e, 0x058a, 0x0593, 0x059f, 0x05a5, 0x05b4, 0x05c0, + 0x05c9, 0x05db, 0x05ea, 0x05fb, 0x060a, 0x0625, 0x0631, 0x063a, + 0x0646, 0x0652, 0x065e, 0x066a, 0x0679, 0x068b, 0x0697, 0x06a9, + 0x06b5, 0x06d0, 0x06eb, 0x0703, 0x070f, 0x0721, 0x073c, 0x0745, // Entry 80 - BF - 0x06e9, 0x06f8, 0x0704, 0x0716, 0x0728, 0x073a, 0x0749, 0x0755, - 0x0761, 0x076a, 0x0773, 0x0785, 0x078e, 0x07a3, 0x07af, 0x07d6, - 0x07fa, 0x081e, 0x0827, 0x0836, 0x083f, 0x0854, 0x0860, 0x0869, - 0x0872, 0x087e, 0x088a, 0x0896, 0x08a2, 0x08ae, 0x08b4, 0x08bd, - 0x08c9, 0x08d5, 0x08de, 0x08f0, 0x0902, 0x090e, 0x091a, 0x0938, - 0x093e, 0x0957, 0x0963, 0x096f, 0x0975, 0x0984, 0x0990, 0x099c, -} // Size: 376 bytes + 0x075a, 0x0769, 0x0778, 0x0784, 0x0796, 0x07a8, 0x07ba, 0x07c9, + 0x07d5, 0x07e1, 0x07ea, 0x07f3, 0x0805, 0x0814, 0x081d, 0x0832, + 0x083e, 0x0865, 0x0889, 0x08ad, 0x08b6, 0x08c5, 0x08ce, 0x08e3, + 0x08ef, 0x08f8, 0x0901, 0x090d, 0x0919, 0x0925, 0x0931, 0x093d, + 0x0943, 0x094c, 0x0958, 0x0964, 0x096d, 0x097f, 0x0991, 0x099d, + 0x09a9, 0x09c7, 0x09cd, 0x09e2, 0x09fb, 0x0a07, 0x0a13, 0x0a19, + 0x0a28, 0x0a34, 0x0a40, +} // Size: 382 bytes const zuScriptStr string = "" + // Size: 504 bytes "isi-Arabicisi-Armenianisi-Banglaisi-Bopomofoi-Brailleisi-Cyrillicisi-Dev" + @@ -32097,37 +34002,38 @@ const zuScriptStr string = "" + // Size: 504 bytes "diaisi-Sinhalaisi-Tamilisi-Teluguisi-Thaanaisi-Thaii-Tibetani-Mathematic" + "al Notationi-Emojiamasimbuliokungabhaliwejwayelekileiskripthi esingaziwa" -var zuScriptIdx = []uint16{ // 176 elements +var zuScriptIdx = []uint16{ // 179 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x000a, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, 0x0020, 0x0020, 0x0020, 0x002c, 0x002c, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0041, 0x0041, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x005b, 0x005b, - 0x0067, 0x0067, 0x0067, 0x0067, 0x0070, 0x007c, 0x0088, 0x0090, - 0x009a, 0x00a1, 0x00a1, 0x00b6, 0x00c4, 0x00c4, 0x00ce, 0x00da, - 0x00da, 0x00da, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f8, 0x00f8, + 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, 0x0070, 0x007c, 0x0088, + 0x0090, 0x009a, 0x00a1, 0x00a1, 0x00b6, 0x00c4, 0x00c4, 0x00ce, + 0x00da, 0x00da, 0x00da, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f8, // Entry 40 - 7F - 0x0104, 0x0104, 0x0104, 0x0110, 0x0110, 0x0119, 0x0119, 0x0124, - 0x012e, 0x012e, 0x012e, 0x012e, 0x0135, 0x0135, 0x0135, 0x013e, + 0x00f8, 0x0104, 0x0104, 0x0104, 0x0110, 0x0110, 0x0119, 0x0119, + 0x0124, 0x012e, 0x012e, 0x012e, 0x012e, 0x0135, 0x0135, 0x0135, 0x013e, 0x013e, 0x013e, 0x013e, 0x013e, 0x013e, 0x013e, 0x013e, 0x013e, 0x013e, 0x013e, 0x013e, 0x013e, 0x013e, 0x013e, 0x013e, - 0x014b, 0x014b, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0163, + 0x013e, 0x014b, 0x014b, 0x0158, 0x0158, 0x0158, 0x0158, 0x0158, 0x0163, 0x0163, 0x0163, 0x0163, 0x0163, 0x0163, 0x0163, 0x0163, - 0x0163, 0x016b, 0x016b, 0x016b, 0x016b, 0x016b, 0x016b, 0x016b, + 0x0163, 0x0163, 0x016b, 0x016b, 0x016b, 0x016b, 0x016b, 0x016b, 0x016b, 0x016b, 0x016b, 0x016b, 0x016b, 0x016b, 0x016b, 0x016b, // Entry 80 - BF 0x016b, 0x016b, 0x016b, 0x016b, 0x016b, 0x016b, 0x016b, 0x016b, - 0x016b, 0x016b, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, - 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x017f, 0x017f, - 0x017f, 0x0189, 0x0189, 0x0189, 0x0189, 0x0193, 0x019b, 0x01a4, - 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, - 0x01a4, 0x01a4, 0x01bb, 0x01c2, 0x01cc, 0x01d9, 0x01e4, 0x01f8, -} // Size: 376 bytes + 0x016b, 0x016b, 0x016b, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, + 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, 0x0176, + 0x017f, 0x017f, 0x017f, 0x0189, 0x0189, 0x0189, 0x0189, 0x0193, + 0x019b, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, + 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01bb, 0x01c2, 0x01cc, + 0x01d9, 0x01e4, 0x01f8, +} // Size: 382 bytes -// Total size for script: 242449 bytes (242 KB) +// Total size for script: 258792 bytes (258 KB) -// Number of keys: 291 +// Number of keys: 292 var ( regionIndex = tagIndex{ "ACADAEAFAGAIALAMAOAQARASATAUAWAXAZBABBBDBEBFBGBHBIBJBLBMBNBOBQBRBSBTBVBW" + @@ -32139,12 +34045,12 @@ var ( "SHSISJSKSLSMSNSOSRSSSTSVSXSYSZTATCTDTFTGTHTJTKTLTMTNTOTRTTTVTWTZUAUG" + "UMUNUSUYUZVAVCVEVGVIVNVUWFWSXKYEYTZAZMZWZZ", "001002003005009011013014015017018019021029030034035039053054057061142143" + - "145150151154155419", + "145150151154155202419", "", } ) -var regionHeaders = [252]header{ +var regionHeaders = [261]header{ { // af afRegionStr, afRegionIdx, @@ -32345,89 +34251,126 @@ var regionHeaders = [252]header{ }, }, { // ar-SA - "جزر البهاماسبتة ومليليةمونتيسيراتسان بيير وميكولونأوروغواي", + "جزيرة أسينشينجزر البهاماسبتة ومليليةماكاو الصينية (منطقة إدارية خاصة)مون" + + "تيسيراتسان بيير وميكولونأوروغواي", []uint16{ // 245 elements // Entry 0 - 3F - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, - 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, - 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, - 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0000, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, + 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, + 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, + 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, + 0x0019, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, + 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, + 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, + 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, // Entry 40 - 7F - 0x0015, 0x0015, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, - 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, - 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, - 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, - 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, - 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, - 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, - 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + 0x002e, 0x002e, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, + 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, + 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, + 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, + 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, + 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, + 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, + 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, // Entry 80 - BF - 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, - 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, - 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, - 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x0040, - 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, - 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, - 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, - 0x0040, 0x0040, 0x0040, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, + 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, + 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, + 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, + 0x0045, 0x0045, 0x0045, 0x0081, 0x0081, 0x0081, 0x0081, 0x0095, + 0x0095, 0x0095, 0x0095, 0x0095, 0x0095, 0x0095, 0x0095, 0x0095, + 0x0095, 0x0095, 0x0095, 0x0095, 0x0095, 0x0095, 0x0095, 0x0095, + 0x0095, 0x0095, 0x0095, 0x0095, 0x0095, 0x0095, 0x0095, 0x0095, + 0x0095, 0x0095, 0x0095, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, // Entry C0 - FF - 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, - 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, - 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, - 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, - 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, - 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, - 0x0060, 0x0060, 0x0060, 0x0060, 0x0070, + 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, + 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, + 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, + 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, + 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, + 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, + 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00c5, }, }, { // as - "এন্টাৰ্টিকাব্ৰাজিলবভেট দ্বীপচীনজাৰ্মানিফ্ৰান্সসংযুক্ত ৰাজ্যদক্ষিণ জৰ্জিয" + - "়া আৰু দক্ষিণ চেণ্ডৱিচ্\u200c দ্বীপহাৰ্ড দ্বীপ আৰু মেক্\u200cডোনাল" + - "্ড দ্বীপভাৰতব্ৰিটিশ্ব ইণ্ডিয়ান মহাসাগৰৰ অঞ্চলইটালিজাপানৰুচদক্ষিণ " + - "ফ্ৰান্সৰ অঞ্চলযুক্তৰাষ্ট্ৰঅজ্ঞাত বা অবৈধ অঞ্চল", - []uint16{ // 262 elements - // Entry 0 - 3F - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, - 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, - 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, - 0x0036, 0x0036, 0x0036, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, - 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, - 0x0052, 0x005b, 0x005b, 0x005b, 0x005b, 0x005b, 0x005b, 0x005b, - 0x005b, 0x005b, 0x005b, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, - // Entry 40 - 7F - 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, - 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, - 0x0073, 0x0088, 0x0088, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, - 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, 0x00ad, - 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, 0x0124, 0x0182, 0x0182, - 0x0182, 0x0182, 0x0182, 0x0182, 0x0182, 0x0182, 0x0182, 0x0182, - 0x018e, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01fd, 0x01fd, 0x01fd, - 0x01fd, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, - // Entry 80 - BF - 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, - 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, - 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, - 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, - 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, - 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, - 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, - 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, - // Entry C0 - FF - 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x020c, 0x0215, - 0x0215, 0x0215, 0x0215, 0x0215, 0x0215, 0x0215, 0x0215, 0x0215, - 0x0215, 0x0215, 0x0215, 0x0215, 0x0215, 0x0215, 0x0215, 0x0215, - 0x0215, 0x0215, 0x0215, 0x0215, 0x0215, 0x0215, 0x0215, 0x0215, - 0x0215, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, - 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, 0x0250, - 0x0250, 0x0250, 0x0250, 0x0274, 0x0274, 0x0274, 0x0274, 0x0274, - 0x0274, 0x0274, 0x0274, 0x0274, 0x0274, 0x0274, 0x0274, 0x0274, - // Entry 100 - 13F - 0x0274, 0x0274, 0x0274, 0x0274, 0x0274, 0x02aa, + "অ্যাসেনশন আইল্যান্ডএ্যান্ডোরাUAEআফগানিস্তানএ্যাঙ্গুইলাআল্বেনিয়াআরমেনিয়" + + "াঅ্যাঙ্গোলাএন্টাৰ্টিকাআর্জিণ্টিনাআমেরিকান সামোয়াঅস্ট্রিয়াঅস্ট্রে" + + "লিয়াআলে্যান্ড দ্বীপপুঞ্জআজেরবাইজানবসনিয়া ও হারজেগোভিনাবাংলাদেশবে" + + "লজিয়ামবুর্কিনা ফাসোবুলগেরিয়াবাহরাইনবুরুন্ডিবেনিনব্রুনেইবোলিভিয়া" + + "ব্রাজিলভুটানবভেট দ্বীপবোট্স্বানাবেলারুশকোকোস (কিলিং) দ্বীপপুঞ্জকঙ্" + + "গো - কিনসাসামধ্য আফ্রিকান প্রজাতন্ত্রকঙ্গো - ব্রাজাভিলসুইজর্লণ্ডআই" + + "ভরি কোস্টকুক দ্বীপপুঞ্জচিলিক্যামেরুনচীনকলোমবিয়াক্লিপারটন দ্বীপকেপ" + + " ভার্দেক্রিস্টমাস দ্বীপসাইপ্রাসদ্বিপজাৰ্মানিদিয়েগো গার্সিয়াজিবুতিড" + + "েন্মার্ক্আলজেরিয়াকিউটা & ম্লিলাইকোয়াডরএস্তোনিয়াদেশমিশরপশ্চিম সা" + + "হারাইরিত্রিয়াস্পেনইথিওপিয়াফিনল্যাণ্ডফিজিফকল্যান্ড দ্বীপপুঞ্জমাইক" + + "্রোনেশিয়াফারো দ্বীপপুঞ্জফ্ৰান্সগাবোনবাদ্যযন্ত্রসংযুক্ত ৰাজ্যজর্জি" + + "য়াএকটি দেশের নামগেঁজিঘানাজিব্রালটারগাম্বিয়াদেশগিনিনিরক্ষীয় গিনি" + + "গ্রীসদক্ষিণ জৰ্জিয়া আৰু দক্ষিণ চেণ্ডৱিচ্\u200c দ্বীপপুঞ্জগুয়ামগি" + + "নি-বিসাউগায়ানাহংকং এসএআর চীনহাৰ্ড দ্বীপ আৰু মেক্\u200cডোনাল্ড দ্ব" + + "ীপক্রোয়েশিয়াহাঙ্গেরিক্যানারি দ্বীপপুঞ্জইন্দোনেশিয়াআয়ারল্যাণ্ডই" + + "স্রায়েলআইল অফ ম্যানভারতব্ৰিটিশ্ব ইণ্ডিয়ান মহাসাগৰৰ অঞ্চলইরাকইরান" + + "আইস্ল্যাণ্ডইটালিজার্সিজর্ডনজাপানকেনিয়াকিরগিজস্তানকাম্বোজকিরিবাতিক" + + "মোরোসউত্তর কোরিয়াদক্ষিণ কোরিয়াকুয়েতকাজাকস্থানলাত্তসলেবাননলিচেনস" + + "্টেইনশ্রীলংকালাইবেরিয়ালেসোথোলিত্ভালাক্সেমবার্গল্যাট্ভিআলিবিয়ামরক" + + "্কোমোনাকোমোল্দাভিয়ামন্টিনিগ্রোম্যাডাগ্যাস্কারমার্শাল দ্বীপপুঞ্জম্" + + "যাসাডোনিয়ামালিমায়ানমার (বার্মা)মঙ্গোলিআম্যাকাও এসএআর চীনউত্তর মা" + + "রিয়ানা দ্বীপপুঞ্জমরিতানিয়ামালটামরিশাসমালদ্বীপমালাউইমাল্যাশিয়ামো" + + "জাম্বিকনামিবিয়ানতুন ক্যালেডোনিয়ানাইজারনদীনরফোক দ্বীপনাইজিরিয়াদে" + + "শনেদারল্যান্ডসনরত্তএদেশনেপালনাউরুনিউইনিউজিল্যান্ডওমানপেরুফরাসি পলি" + + "নেশিয়াপাপুয়া নিউ গিনিফিলিপাইনপাকিস্তানপোল্যান্ডপিটকেয়ার্ন দ্বীপ" + + "পুঞ্জফিলিস্তিন অঞ্চলপর্তুগালপালাউপ্যারাগুয়েকাতারসাক্ষাৎরুমানিয়াস" + + "ার্বিয়ারাশিয়ারুয়ান্ডাসৌদি আরবসলোমান দ্বীপপুঞ্জসিসিলিসুদানসুইডেন" + + "সিঙ্গাপুরসেন্ট হেলেনাস্লোভানিয়াসাভালবার্ড ও জান মেনশ্লোভাকিয়াসিয" + + "়েরা লিওনসান মেরিনোসেনেগালসোমালিয়াসুরিনামদক্ষিণ সুদানসাও টোম এবং " + + "প্রিনসিপেসিরিয়াসোয়াজিল্যান্ডট্রিস্টান ডা কুনামত্স্যবিশেষদক্ষিণ ফ" + + "্ৰান্সৰ অঞ্চলযাওথাইল্যান্ডতাজিকস্থানটোকেলাউপূর্ব তিমুরতুর্কমেনিয়া" + + "টিউনিস্টাঙ্গাতুরস্কটুভালুতাইওয়ানতাঞ্জানিয়াইউক্রেইন্উগান্ডাইউ এস " + + "আউটলিং আইল্যান্ডসযুক্তৰাষ্ট্ৰউরুগুয়েউজ্বেকিস্থানভ্যাটিকান সিটিভেন" + + "েজুয়েলাভিয়েতনামভানুয়াতুওয়ালিস ও ফুটুনাসামোয়াকসোভোইমেনমায়োত্ত" + + "েদক্ষিন আফ্রিকাজাম্বিয়াজিম্বাবুয়েঅজ্ঞাত অঞ্চলঅস্ট্রেলেশিয়াম্যাল" + + "েনেশিয়ামাইক্রোনেশিয়ান অঞ্চল (অনুবাদ সংকেত: সতর্কতা, ডানদিকে তথ্য" + + " প্যানেল দেখুন।)", + []uint16{ // 283 elements + // Entry 0 - 3F + 0x0000, 0x0037, 0x0055, 0x0058, 0x0079, 0x0079, 0x009a, 0x00b8, + 0x00d3, 0x00f1, 0x0112, 0x0133, 0x0161, 0x017f, 0x01a3, 0x01a3, + 0x01dd, 0x01fb, 0x0236, 0x0236, 0x024e, 0x0269, 0x028e, 0x02ac, + 0x02c1, 0x02d9, 0x02e8, 0x02e8, 0x02e8, 0x02fd, 0x0318, 0x0318, + 0x032d, 0x032d, 0x033c, 0x0358, 0x0376, 0x038b, 0x038b, 0x038b, + 0x03cb, 0x03f2, 0x0439, 0x0466, 0x0484, 0x04a3, 0x04cb, 0x04d7, + 0x04f2, 0x04fb, 0x0516, 0x0541, 0x0541, 0x0541, 0x055d, 0x055d, + 0x058b, 0x05b2, 0x05b2, 0x05ca, 0x05fb, 0x060d, 0x062b, 0x062b, + // Entry 40 - 7F + 0x062b, 0x0646, 0x066a, 0x0682, 0x06a9, 0x06b5, 0x06da, 0x06f8, + 0x0707, 0x0722, 0x0722, 0x0722, 0x0740, 0x074c, 0x0786, 0x07b0, + 0x07db, 0x07f0, 0x0820, 0x0845, 0x0845, 0x085d, 0x0883, 0x0892, + 0x089e, 0x08bc, 0x08bc, 0x08e0, 0x08ec, 0x08ec, 0x0914, 0x0923, + 0x09a9, 0x09a9, 0x09bb, 0x09d7, 0x09ec, 0x0a12, 0x0a70, 0x0a70, + 0x0a94, 0x0a94, 0x0aac, 0x0ae3, 0x0b07, 0x0b2b, 0x0b46, 0x0b66, + 0x0b72, 0x0bd2, 0x0bde, 0x0bea, 0x0c0b, 0x0c1a, 0x0c2c, 0x0c2c, + 0x0c3b, 0x0c4a, 0x0c5f, 0x0c80, 0x0c95, 0x0cad, 0x0cbf, 0x0cbf, + // Entry 80 - BF + 0x0ce4, 0x0d0c, 0x0d1e, 0x0d1e, 0x0d3c, 0x0d4e, 0x0d60, 0x0d60, + 0x0d81, 0x0d99, 0x0db7, 0x0dc9, 0x0ddb, 0x0dff, 0x0e1a, 0x0e2f, + 0x0e41, 0x0e53, 0x0e74, 0x0e95, 0x0e95, 0x0ec2, 0x0ef6, 0x0f1d, + 0x0f29, 0x0f59, 0x0f71, 0x0fa0, 0x0fea, 0x0fea, 0x1008, 0x1008, + 0x1017, 0x1029, 0x1041, 0x1053, 0x1053, 0x1074, 0x108f, 0x10aa, + 0x10de, 0x10f9, 0x1118, 0x113f, 0x113f, 0x1166, 0x1181, 0x1190, + 0x119f, 0x11ab, 0x11cf, 0x11db, 0x11db, 0x11e7, 0x1215, 0x1241, + 0x1259, 0x1274, 0x128f, 0x128f, 0x12cf, 0x12cf, 0x12fa, 0x1312, + // Entry C0 - FF + 0x1321, 0x1342, 0x1351, 0x1351, 0x1366, 0x1381, 0x139c, 0x13b1, + 0x13cc, 0x13e2, 0x1413, 0x1425, 0x1434, 0x1446, 0x1461, 0x1483, + 0x14a4, 0x14da, 0x14fb, 0x151d, 0x1539, 0x154e, 0x1569, 0x157e, + 0x15a0, 0x15d9, 0x15d9, 0x15d9, 0x15ee, 0x1618, 0x1647, 0x1647, + 0x1668, 0x16a3, 0x16ac, 0x16ca, 0x16e8, 0x16fd, 0x171c, 0x1740, + 0x1755, 0x1767, 0x1779, 0x1779, 0x178b, 0x17a3, 0x17c4, 0x17df, + 0x17f4, 0x1833, 0x1833, 0x1857, 0x186f, 0x1893, 0x18bb, 0x18bb, + 0x18dc, 0x18dc, 0x18dc, 0x18f7, 0x1912, 0x193e, 0x1953, 0x1962, + // Entry 100 - 13F + 0x196e, 0x1989, 0x19b1, 0x19cc, 0x19ed, 0x1a0f, 0x1a0f, 0x1a0f, + 0x1a0f, 0x1a0f, 0x1a0f, 0x1a0f, 0x1a0f, 0x1a0f, 0x1a0f, 0x1a0f, + 0x1a0f, 0x1a0f, 0x1a0f, 0x1a0f, 0x1a0f, 0x1a0f, 0x1a0f, 0x1a0f, + 0x1a39, 0x1a60, 0x1b26, }, }, { // asa @@ -32515,42 +34458,43 @@ var regionHeaders = [252]header{ "slles CookChileCamerúnChinaColombiaIslla ClippertonCosta RicaCubaCab" + "u VerdeCuraçaoIslla ChristmasXipreChequiaAlemañaDiego GarciaXibutiDi" + "namarcaDominicaRepública DominicanaArxeliaCeuta y MelillaEcuadorEsto" + - "niaExiptuSáḥara OccidentalEritreaEspañaEtiopíaXunión EuropeaFinlandi" + - "aIslles FixiFalkland IslandsMicronesiaIslles FeroeFranciaGabónReinu " + - "XuníuGranadaXeorxaGuyana FrancesaGuernseyGhanaXibraltarGroenlandiaGa" + - "mbiaGuineaGuadalupeGuinea EcuatorialGreciaIslles Xeorxa del Sur y Sa" + - "ndwich del SurGuatemalaGuamGuinea-BisáuGuyanaARE China de Ḥong KongI" + - "slles Heard y McDonaldHonduresCroaciaHaitíHungríaIslles CanariesIndo" + - "nesiaIrlandaIsraelIslla de ManIndiaTerritoriu Británicu del Océanu Í" + - "ndicuIraqIránIslandiaItaliaJerseyXamaicaXordaniaXapónKeniaKirguistán" + - "CamboyaKiribatiLes ComoresSaint Kitts y NevisCorea del NorteCorea de" + - "l SurKuwaitIslles CaimánKazakstánLaosLíbanuSanta LlucíaLiechtenstein" + - "Sri LankaLiberiaLesothuLituaniaLuxemburguLetoniaLibiaMarruecosMónacu" + - "MoldaviaMontenegruSaint MartinMadagascarIslles MarshallMacedoniaMalí" + - "Myanmar (Birmania)MongoliaARE China de MacáuIslles Marianes del Nort" + - "eLa MartinicaMauritaniaMontserratMaltaMauriciuLes MaldivesMalauiMéxi" + - "cuMalasiaMozambiqueNamibiaNueva CaledoniaEl NíxerIslla NorfolkNixeri" + - "aNicaraguaPaíses BaxosNoruegaNepalNauruNiueNueva ZelandaOmánPanamáPe" + - "rúPolinesia FrancesaPapúa Nueva GuineaFilipinesPaquistánPoloniaSaint" + - " Pierre y MiquelonIslles PitcairnPuertu RicuTerritorios PalestinosPo" + - "rtugalPaláuParaguáiQatarOceanía esteriorReuniónRumaníaSerbiaRusiaRua" + - "ndaArabia SauditaIslles SalomónLes SeixelesSudánSueciaSingapurSanta " + - "HelenaEsloveniaSvalbard ya Islla Jan MayenEslovaquiaSierra LleonaSan" + - " MarínSenegalSomaliaSurinamSudán del SurSantu Tomé y PríncipeEl Salv" + - "adorSint MaartenSiriaSuazilandiaTristán da CunhaIslles Turques y Cai" + - "cosChadTierres Australes FrancesesToguTailandiaTaxiquistánTokeláuTim" + - "or OrientalTurkmenistánTuniciaTongaTurquíaTrinidá y TobaguTuvaluTaiw" + - "ánTanzaniaUcraínaUgandaIslles Perifériques Menores de los EE.XX.Est" + - "aos XuníosUruguáiUzbequistánCiudá del VaticanuSan Vicente y Granadin" + - "esVenezuelaIslles Vírxenes BritániquesIslles Vírxenes AmericanesViet" + - "namVanuatuWallis y FutunaSamoaKosovuYemenMayotteSudáfricaZambiaZimba" + - "bueRexón desconocidaMunduÁfricaNorteaméricaAmérica del SurOceaníaÁfr" + - "ica OccidentalAmérica CentralÁfrica OrientalÁfrica del NorteÁfrica C" + - "entralÁfrica del SurAméricaAmérica del NorteCaribeAsia OrientalAsia " + - "del SurSureste AsiáticuEuropa del SurAustralasiaMelanesiaRexón de Mi" + - "cronesiaPolinesiaAsiaAsia CentralAsia OccidentalEuropaEuropa Orienta" + - "lEuropa del NorteEuropa OccidentalAmérica Llatina", - []uint16{ // 292 elements + "niaExiptuSáḥara OccidentalEritreaEspañaEtiopíaXunión EuropeaEurozona" + + "FinlandiaIslles FixiFalkland IslandsMicronesiaIslles FeroeFranciaGab" + + "ónReinu XuníuGranadaXeorxaGuyana FrancesaGuernseyGhanaXibraltarGroe" + + "nlandiaGambiaGuineaGuadalupeGuinea EcuatorialGreciaIslles Xeorxa del" + + " Sur y Sandwich del SurGuatemalaGuamGuinea-BisáuGuyanaARE China de Ḥ" + + "ong KongIslles Heard y McDonaldHonduresCroaciaHaitíHungríaIslles Can" + + "ariesIndonesiaIrlandaIsraelIslla de ManIndiaTerritoriu Británicu del" + + " Océanu ÍndicuIraqIránIslandiaItaliaJerseyXamaicaXordaniaXapónKeniaK" + + "irguistánCamboyaKiribatiLes ComoresSaint Kitts y NevisCorea del Nort" + + "eCorea del SurKuwaitIslles CaimánKazakstánLaosLíbanuSanta LlucíaLiec" + + "htensteinSri LankaLiberiaLesothuLituaniaLuxemburguLetoniaLibiaMarrue" + + "cosMónacuMoldaviaMontenegruSaint MartinMadagascarIslles MarshallMace" + + "doniaMalíMyanmar (Birmania)MongoliaARE China de MacáuIslles Marianes" + + " del NorteLa MartinicaMauritaniaMontserratMaltaMauriciuLes MaldivesM" + + "alauiMéxicuMalasiaMozambiqueNamibiaNueva CaledoniaEl NíxerIslla Norf" + + "olkNixeriaNicaraguaPaíses BaxosNoruegaNepalNauruNiueNueva ZelandaOmá" + + "nPanamáPerúPolinesia FrancesaPapúa Nueva GuineaFilipinesPaquistánPol" + + "oniaSaint Pierre y MiquelonIslles PitcairnPuertu RicuTerritorios Pal" + + "estinosPortugalPaláuParaguáiQatarOceanía esteriorReuniónRumaníaSerbi" + + "aRusiaRuandaArabia SauditaIslles SalomónLes SeixelesSudánSueciaSinga" + + "purSanta HelenaEsloveniaSvalbard ya Islla Jan MayenEslovaquiaSierra " + + "LleonaSan MarínSenegalSomaliaSurinamSudán del SurSantu Tomé y Prínci" + + "peEl SalvadorSint MaartenSiriaSuazilandiaTristán da CunhaIslles Turq" + + "ues y CaicosChadTierres Australes FrancesesToguTailandiaTaxiquistánT" + + "okeláuTimor OrientalTurkmenistánTuniciaTongaTurquíaTrinidá y TobaguT" + + "uvaluTaiwánTanzaniaUcraínaUgandaIslles Perifériques Menores de los E" + + "E.XX.Naciones XuníesEstaos XuníosUruguáiUzbequistánCiudá del Vatican" + + "uSan Vicente y GranadinesVenezuelaIslles Vírxenes BritániquesIslles " + + "Vírxenes AmericanesVietnamVanuatuWallis y FutunaSamoaKosovuYemenMayo" + + "tteSudáfricaZambiaZimbabueRexón desconocidaMunduÁfricaNorteaméricaAm" + + "érica del SurOceaníaÁfrica OccidentalAmérica CentralÁfrica Oriental" + + "África del NorteÁfrica CentralÁfrica del SurAméricaAmérica del Nort" + + "eCaribeAsia OrientalAsia del SurSureste AsiáticuEuropa del SurAustra" + + "lasiaMelanesiaRexón de MicronesiaPolinesiaAsiaAsia CentralAsia Occid" + + "entalEuropaEuropa OrientalEuropa del NorteEuropa OccidentalAmérica L" + + "latina", + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0010, 0x0017, 0x002f, 0x003a, 0x004b, 0x0052, 0x0059, 0x0060, 0x0066, 0x0074, 0x007d, 0x008c, 0x0093, 0x009c, 0x00a1, @@ -32562,37 +34506,37 @@ var regionHeaders = [252]header{ 0x0256, 0x025b, 0x0262, 0x026a, 0x0276, 0x027c, 0x0285, 0x028d, // Entry 40 - 7F 0x02a2, 0x02a9, 0x02b8, 0x02bf, 0x02c6, 0x02cc, 0x02e0, 0x02e7, - 0x02ee, 0x02f6, 0x0305, 0x0305, 0x030e, 0x0319, 0x0329, 0x0333, - 0x033f, 0x0346, 0x034c, 0x0358, 0x035f, 0x0365, 0x0374, 0x037c, - 0x0381, 0x038a, 0x0395, 0x039b, 0x03a1, 0x03aa, 0x03bb, 0x03c1, - 0x03e9, 0x03f2, 0x03f6, 0x0403, 0x0409, 0x0421, 0x0438, 0x0440, - 0x0447, 0x044d, 0x0455, 0x0464, 0x046d, 0x0474, 0x047a, 0x0486, - 0x048b, 0x04b4, 0x04b8, 0x04bd, 0x04c5, 0x04cb, 0x04d1, 0x04d8, - 0x04e0, 0x04e6, 0x04eb, 0x04f6, 0x04fd, 0x0505, 0x0510, 0x0523, - // Entry 80 - BF - 0x0532, 0x053f, 0x0545, 0x0553, 0x055d, 0x0561, 0x0568, 0x0575, - 0x0582, 0x058b, 0x0592, 0x0599, 0x05a1, 0x05ab, 0x05b2, 0x05b7, - 0x05c0, 0x05c7, 0x05cf, 0x05d9, 0x05e5, 0x05ef, 0x05fe, 0x0607, - 0x060c, 0x061e, 0x0626, 0x0639, 0x0652, 0x065e, 0x0668, 0x0672, - 0x0677, 0x067f, 0x068b, 0x0691, 0x0698, 0x069f, 0x06a9, 0x06b0, - 0x06bf, 0x06c8, 0x06d5, 0x06dc, 0x06e5, 0x06f2, 0x06f9, 0x06fe, - 0x0703, 0x0707, 0x0714, 0x0719, 0x0720, 0x0725, 0x0737, 0x074a, - 0x0753, 0x075d, 0x0764, 0x077b, 0x078a, 0x0795, 0x07ab, 0x07b3, - // Entry C0 - FF - 0x07b9, 0x07c2, 0x07c7, 0x07d8, 0x07e0, 0x07e8, 0x07ee, 0x07f3, - 0x07f9, 0x0807, 0x0816, 0x0822, 0x0828, 0x082e, 0x0836, 0x0842, - 0x084b, 0x0866, 0x0870, 0x087d, 0x0887, 0x088e, 0x0895, 0x089c, - 0x08aa, 0x08c1, 0x08cc, 0x08d8, 0x08dd, 0x08e8, 0x08f9, 0x0910, - 0x0914, 0x092f, 0x0933, 0x093c, 0x0948, 0x0950, 0x095e, 0x096b, - 0x0972, 0x0977, 0x097f, 0x0990, 0x0996, 0x099d, 0x09a5, 0x09ad, - 0x09b3, 0x09dd, 0x09dd, 0x09eb, 0x09f3, 0x09ff, 0x0a12, 0x0a2a, - 0x0a33, 0x0a50, 0x0a6b, 0x0a72, 0x0a79, 0x0a88, 0x0a8d, 0x0a93, - // Entry 100 - 13F - 0x0a98, 0x0a9f, 0x0aa9, 0x0aaf, 0x0ab7, 0x0ac9, 0x0ace, 0x0ad5, - 0x0ae2, 0x0af2, 0x0afa, 0x0b0c, 0x0b1c, 0x0b2c, 0x0b3d, 0x0b4c, - 0x0b5b, 0x0b63, 0x0b75, 0x0b7b, 0x0b88, 0x0b94, 0x0ba5, 0x0bb3, - 0x0bbe, 0x0bc7, 0x0bdb, 0x0be4, 0x0be8, 0x0bf4, 0x0c03, 0x0c09, - 0x0c18, 0x0c28, 0x0c39, 0x0c49, + 0x02ee, 0x02f6, 0x0305, 0x030d, 0x0316, 0x0321, 0x0331, 0x033b, + 0x0347, 0x034e, 0x0354, 0x0360, 0x0367, 0x036d, 0x037c, 0x0384, + 0x0389, 0x0392, 0x039d, 0x03a3, 0x03a9, 0x03b2, 0x03c3, 0x03c9, + 0x03f1, 0x03fa, 0x03fe, 0x040b, 0x0411, 0x0429, 0x0440, 0x0448, + 0x044f, 0x0455, 0x045d, 0x046c, 0x0475, 0x047c, 0x0482, 0x048e, + 0x0493, 0x04bc, 0x04c0, 0x04c5, 0x04cd, 0x04d3, 0x04d9, 0x04e0, + 0x04e8, 0x04ee, 0x04f3, 0x04fe, 0x0505, 0x050d, 0x0518, 0x052b, + // Entry 80 - BF + 0x053a, 0x0547, 0x054d, 0x055b, 0x0565, 0x0569, 0x0570, 0x057d, + 0x058a, 0x0593, 0x059a, 0x05a1, 0x05a9, 0x05b3, 0x05ba, 0x05bf, + 0x05c8, 0x05cf, 0x05d7, 0x05e1, 0x05ed, 0x05f7, 0x0606, 0x060f, + 0x0614, 0x0626, 0x062e, 0x0641, 0x065a, 0x0666, 0x0670, 0x067a, + 0x067f, 0x0687, 0x0693, 0x0699, 0x06a0, 0x06a7, 0x06b1, 0x06b8, + 0x06c7, 0x06d0, 0x06dd, 0x06e4, 0x06ed, 0x06fa, 0x0701, 0x0706, + 0x070b, 0x070f, 0x071c, 0x0721, 0x0728, 0x072d, 0x073f, 0x0752, + 0x075b, 0x0765, 0x076c, 0x0783, 0x0792, 0x079d, 0x07b3, 0x07bb, + // Entry C0 - FF + 0x07c1, 0x07ca, 0x07cf, 0x07e0, 0x07e8, 0x07f0, 0x07f6, 0x07fb, + 0x0801, 0x080f, 0x081e, 0x082a, 0x0830, 0x0836, 0x083e, 0x084a, + 0x0853, 0x086e, 0x0878, 0x0885, 0x088f, 0x0896, 0x089d, 0x08a4, + 0x08b2, 0x08c9, 0x08d4, 0x08e0, 0x08e5, 0x08f0, 0x0901, 0x0918, + 0x091c, 0x0937, 0x093b, 0x0944, 0x0950, 0x0958, 0x0966, 0x0973, + 0x097a, 0x097f, 0x0987, 0x0998, 0x099e, 0x09a5, 0x09ad, 0x09b5, + 0x09bb, 0x09e5, 0x09f5, 0x0a03, 0x0a0b, 0x0a17, 0x0a2a, 0x0a42, + 0x0a4b, 0x0a68, 0x0a83, 0x0a8a, 0x0a91, 0x0aa0, 0x0aa5, 0x0aab, + // Entry 100 - 13F + 0x0ab0, 0x0ab7, 0x0ac1, 0x0ac7, 0x0acf, 0x0ae1, 0x0ae6, 0x0aed, + 0x0afa, 0x0b0a, 0x0b12, 0x0b24, 0x0b34, 0x0b44, 0x0b55, 0x0b64, + 0x0b73, 0x0b7b, 0x0b8d, 0x0b93, 0x0ba0, 0x0bac, 0x0bbd, 0x0bcb, + 0x0bd6, 0x0bdf, 0x0bf3, 0x0bfc, 0x0c00, 0x0c0c, 0x0c1b, 0x0c21, + 0x0c30, 0x0c40, 0x0c51, 0x0c51, 0x0c61, }, }, { // az @@ -32608,44 +34552,43 @@ var regionHeaders = [252]header{ "танБуве адасыБотсванаБеларусБелизКанадаКокос (Килинг) адаларыКонго-" + "КиншасаМәркәзи Африка РеспубликасыКонго-БраззавилИсвечрәKотд’ивуарК" + "ук адаларыЧилиКамерунЧинКолумбијаКлиппертон адасыКоста РикаКубаКабо" + - "-ВердеКурасаоМилад адасыКипрЧех РеспубликасыАлманијаДиего ГарсијаҸиб" + - "утиДанимаркаДоминикаДоминикан РеспубликасыӘлҹәзаирСеута вә МелилјаЕ" + - "квадорЕстонијаМисирЕритрејаИспанијаЕфиопијаАвропа БирлијиФинландија" + - "ФиҹиФолкленд адаларыМикронезијаФарер адаларыФрансаГабонБирләшмиш Кр" + - "аллыгГренадаҜүрҹүстанФранса ГвианасыҜернсиГанаҸәбәллүтаригГренланди" + - "јаГамбијаГвинејаГваделупаЕкваториал ГвинејаЈунаныстанҸәнуби Ҹорҹија" + - " вә Ҹәнуби Сендвич адаларыГватемалаГуамГвинеја-БисауГајанаҺонк Конг " + - "Хүсуси Инзибати Әрази ЧинҺерд вә Макдоналд адаларыҺондурасХорватија" + - "ҺаитиМаҹарыстанКанар адаларыИндонезијаИрландијаИсраилМен адасыҺинди" + - "станБритантјанын Һинд Океаны ӘразисиИрагИранИсландијаИталијаҸерсиЈа" + - "мајкаИорданијаЈапонијаКенијаГырғызыстанКамбоҹаКирибатиКомор адалары" + - "Сент-Китс вә НевисШимали КорејаҸәнуби КорејаКүвејтКајман адаларыГаз" + - "ахыстанЛаосЛиванСент-ЛусијаЛихтенштејнШри-ЛанкаЛиберијаЛесотоЛитваЛ" + - "үксембургЛатвијаЛивијаМәракешМонакоМолдоваМонтенегроСент МартинМада" + - "гаскарМаршал адаларыМалиМјанмаМонголустанМакао Хүсуси Инзибати Әраз" + - "и ЧинШимали Мариан адаларыМартиникМавританијаМонсератМалтаМаврикиМа" + - "лдив адаларыМалавиМексикаМалајзијаМозамбикНамибијаЈени КаледонијаНи" + - "ҝерНорфолк адасыНиҝеријаНикарагуаНидерландНорвечНепалНауруНиуеЈени " + - "ЗеландијаОманПанамаПеруФранса ПолинезијасыПапуа-Јени ГвинејаФилиппи" + - "нПакистанПолшаМүгәддәс Пјер вә МикелонПиткерн адаларыПуерто РикоПор" + - "тугалијаПалауПарагвајГәтәрУзаг ОкеанијаРејунјонРумынијаСербијаРусиј" + - "аРуандаСәудијјә ӘрәбистаныСоломон адаларыСејшел адаларыСуданИсвечСи" + - "нгапурМүгәддәс ЈеленаСловенијаСвалбард вә Јан-МајенСловакијаСјерра-" + - "ЛеонеСан-МариноСенегалСомалиСуринамҸәнуби СуданСан-Томе вә Принсипи" + - "СалвадорСинт-МартенСуријаСвазилендТристан да КунјаТөркс вә Кајкос а" + - "даларыЧадФрансанын Ҹәнуб ӘразиләриТогоТаиландТаҹикистанТокелауШәрги" + - " ТиморТүркмәнистанТунисТонгаТүркијәТринидад вә ТобагоТувалуТајванТан" + - "занијаУкрајнаУгандаАБШ-а бағлы кичик адаҹыгларАмерика Бирләшмиш Шта" + - "тларыУругвајӨзбәкистанВатиканСент-Винсент вә ГренадинләрВенесуелаБр" + - "итанијанын Вирҝин адаларыАБШ Вирҝин адаларыВјетнамВануатуУоллис вә " + - "ФутунаСамоаКосовоЈәмәнМајотҸәнуб АфрикаЗамбијаЗимбабвеНамәлум Реҝио" + - "нДүнјаАфрикаШимали АмерикаҸәнуби АмерикаОкеанијаГәрби АфрикаМәркәзи" + - " АмерикаШәрги АфрикаШимали АфрикаМәркәзи АфрикаҸәнуби АфрикаАмерикаШ" + - "имал АмерикасыКарибШәрги АсијаҸәнуби АсијаҸәнуб-Шәрги АсијаҸәнуби А" + - "вропаАвстралазијаМеланезијаМикронезија РеҝионуПолинезијаАсијаМәркәз" + - "и АсијаГәрби АсијаАвропаШәрги АвропаШимали АвропаГәрби АвропаЛатын " + - "Америкасы", - []uint16{ // 292 elements + "-ВердеКурасаоМилад адасыКипрЧехијаАлманијаДиего ГарсијаҸибутиДанимар" + + "каДоминикаДоминикан РеспубликасыӘлҹәзаирСеута вә МелилјаЕквадорЕсто" + + "нијаМисирЕритрејаИспанијаЕфиопијаАвропа БирлијиФинландијаФиҹиФолкле" + + "нд адаларыМикронезијаФарер адаларыФрансаГабонБирләшмиш КраллыгГрена" + + "даҜүрҹүстанФранса ГвианасыҜернсиГанаҸәбәллүтаригГренландијаГамбијаГ" + + "винејаГваделупаЕкваториал ГвинејаЈунаныстанҸәнуби Ҹорҹија вә Ҹәнуби" + + " Сендвич адаларыГватемалаГуамГвинеја-БисауГајанаҺонк Конг Хүсуси Инз" + + "ибати Әрази ЧинҺерд вә Макдоналд адаларыҺондурасХорватијаҺаитиМаҹар" + + "ыстанКанар адаларыИндонезијаИрландијаИсраилМен адасыҺиндистанБритан" + + "тјанын Һинд Океаны ӘразисиИрагИранИсландијаИталијаҸерсиЈамајкаИорда" + + "нијаЈапонијаКенијаГырғызыстанКамбоҹаКирибатиКомор адаларыСент-Китс " + + "вә НевисШимали КорејаҸәнуби КорејаКүвејтКајман адаларыГазахыстанЛао" + + "сЛиванСент-ЛусијаЛихтенштејнШри-ЛанкаЛиберијаЛесотоЛитваЛүксембургЛ" + + "атвијаЛивијаМәракешМонакоМолдоваМонтенегроСент МартинМадагаскарМарш" + + "ал адаларыМалиМјанмаМонголустанМакао Хүсуси Инзибати Әрази ЧинШимал" + + "и Мариан адаларыМартиникМавританијаМонсератМалтаМаврикиМалдив адала" + + "рыМалавиМексикаМалајзијаМозамбикНамибијаЈени КаледонијаНиҝерНорфолк" + + " адасыНиҝеријаНикарагуаНидерландНорвечНепалНауруНиуеЈени ЗеландијаОм" + + "анПанамаПеруФранса ПолинезијасыПапуа-Јени ГвинејаФилиппинПакистанПо" + + "лшаМүгәддәс Пјер вә МикелонПиткерн адаларыПуерто РикоПортугалијаПал" + + "ауПарагвајГәтәрУзаг ОкеанијаРејунјонРумынијаСербијаРусијаРуандаСәуд" + + "ијјә ӘрәбистаныСоломон адаларыСејшел адаларыСуданИсвечСингапурМүгәд" + + "дәс ЈеленаСловенијаСвалбард вә Јан-МајенСловакијаСјерра-ЛеонеСан-Ма" + + "риноСенегалСомалиСуринамҸәнуби СуданСан-Томе вә ПринсипиСалвадорСин" + + "т-МартенСуријаСвазилендТристан да КунјаТөркс вә Кајкос адаларыЧадФр" + + "ансанын Ҹәнуб ӘразиләриТогоТаиландТаҹикистанТокелауШәрги ТиморТүркм" + + "әнистанТунисТонгаТүркијәТринидад вә ТобагоТувалуТајванТанзанијаУкра" + + "јнаУгандаАБШ-а бағлы кичик адаҹыгларАмерика Бирләшмиш ШтатларыУругв" + + "ајӨзбәкистанВатиканСент-Винсент вә ГренадинләрВенесуелаБританијанын" + + " Вирҝин адаларыАБШ Вирҝин адаларыВјетнамВануатуУоллис вә ФутунаСамоа" + + "КосовоЈәмәнМајотҸәнуб АфрикаЗамбијаЗимбабвеНамәлум РеҝионДүнјаАфрик" + + "аШимали АмерикаҸәнуби АмерикаОкеанијаГәрби АфрикаМәркәзи АмерикаШәр" + + "ги АфрикаШимали АфрикаМәркәзи АфрикаҸәнуби АфрикаАмерикаШимал Амери" + + "касыКарибШәрги АсијаҸәнуби АсијаҸәнуб-Шәрги АсијаҸәнуби АвропаАвстр" + + "алазијаМеланезијаМикронезија РеҝионуПолинезијаАсијаМәркәзи АсијаГәр" + + "би АсијаАвропаШәрги АвропаШимали АвропаГәрби АвропаЛатын Америкасы", + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x001b, 0x0029, 0x005b, 0x006f, 0x0091, 0x009f, 0x00af, 0x00c3, 0x00cf, 0x00e3, 0x00f5, 0x0112, 0x0122, 0x0136, 0x0140, @@ -32654,40 +34597,40 @@ var regionHeaders = [252]header{ 0x027e, 0x0297, 0x02a1, 0x02b4, 0x02c4, 0x02d2, 0x02dc, 0x02e8, 0x0310, 0x0329, 0x035d, 0x037a, 0x0388, 0x039c, 0x03b1, 0x03b9, 0x03c7, 0x03cd, 0x03df, 0x03fe, 0x0411, 0x0419, 0x042c, 0x043a, - 0x044f, 0x0457, 0x0476, 0x0486, 0x049f, 0x04ab, 0x04bd, 0x04cd, - // Entry 40 - 7F - 0x04f8, 0x0508, 0x0526, 0x0534, 0x0544, 0x054e, 0x054e, 0x055e, - 0x056e, 0x057e, 0x0599, 0x0599, 0x05ad, 0x05b5, 0x05d4, 0x05ea, - 0x0603, 0x060f, 0x0619, 0x063a, 0x0648, 0x065a, 0x0677, 0x0683, - 0x068b, 0x06a3, 0x06b9, 0x06c7, 0x06d5, 0x06e7, 0x070a, 0x071e, - 0x0769, 0x077b, 0x0783, 0x079c, 0x07a8, 0x07e9, 0x0818, 0x0828, - 0x083a, 0x0844, 0x0858, 0x0871, 0x0885, 0x0897, 0x08a3, 0x08b4, - 0x08c6, 0x0903, 0x090b, 0x0913, 0x0925, 0x0933, 0x093d, 0x094b, - 0x095d, 0x096d, 0x0979, 0x098f, 0x099d, 0x09ad, 0x09c6, 0x09e7, - // Entry 80 - BF - 0x0a00, 0x0a19, 0x0a25, 0x0a40, 0x0a54, 0x0a5c, 0x0a66, 0x0a7b, - 0x0a91, 0x0aa2, 0x0ab2, 0x0abe, 0x0ac8, 0x0adc, 0x0aea, 0x0af6, - 0x0b04, 0x0b10, 0x0b1e, 0x0b32, 0x0b47, 0x0b5b, 0x0b76, 0x0b76, - 0x0b7e, 0x0b8a, 0x0ba0, 0x0bda, 0x0c02, 0x0c12, 0x0c28, 0x0c38, - 0x0c42, 0x0c50, 0x0c6b, 0x0c77, 0x0c85, 0x0c97, 0x0ca7, 0x0cb7, - 0x0cd4, 0x0cde, 0x0cf7, 0x0d07, 0x0d19, 0x0d2b, 0x0d37, 0x0d41, - 0x0d4b, 0x0d53, 0x0d6e, 0x0d76, 0x0d82, 0x0d8a, 0x0daf, 0x0dd1, - 0x0de1, 0x0df1, 0x0dfb, 0x0e28, 0x0e45, 0x0e5a, 0x0e5a, 0x0e70, - // Entry C0 - FF - 0x0e7a, 0x0e8a, 0x0e94, 0x0ead, 0x0ebd, 0x0ecd, 0x0edb, 0x0ee7, - 0x0ef3, 0x0f18, 0x0f35, 0x0f50, 0x0f5a, 0x0f64, 0x0f74, 0x0f91, - 0x0fa3, 0x0fca, 0x0fdc, 0x0ff3, 0x1006, 0x1014, 0x1020, 0x102e, - 0x1045, 0x106a, 0x107a, 0x108f, 0x109b, 0x10ad, 0x10cb, 0x10f6, - 0x10fc, 0x112c, 0x1134, 0x1142, 0x1156, 0x1164, 0x1179, 0x1191, - 0x119b, 0x11a5, 0x11b3, 0x11d5, 0x11e1, 0x11ed, 0x11ff, 0x120d, - 0x1219, 0x124b, 0x124b, 0x127d, 0x128b, 0x129f, 0x12ad, 0x12e0, - 0x12f2, 0x1326, 0x1348, 0x1356, 0x1364, 0x1382, 0x138c, 0x1398, - // Entry 100 - 13F - 0x13a2, 0x13ac, 0x13c3, 0x13d1, 0x13e1, 0x13fc, 0x1406, 0x1412, - 0x142d, 0x1448, 0x1458, 0x146f, 0x148c, 0x14a3, 0x14bc, 0x14d7, - 0x14f0, 0x14fe, 0x151b, 0x1525, 0x153a, 0x1551, 0x1571, 0x158a, - 0x15a2, 0x15b6, 0x15db, 0x15ef, 0x15f9, 0x1612, 0x1627, 0x1633, - 0x164a, 0x1663, 0x167a, 0x1697, + 0x044f, 0x0457, 0x0463, 0x0473, 0x048c, 0x0498, 0x04aa, 0x04ba, + // Entry 40 - 7F + 0x04e5, 0x04f5, 0x0513, 0x0521, 0x0531, 0x053b, 0x053b, 0x054b, + 0x055b, 0x056b, 0x0586, 0x0586, 0x059a, 0x05a2, 0x05c1, 0x05d7, + 0x05f0, 0x05fc, 0x0606, 0x0627, 0x0635, 0x0647, 0x0664, 0x0670, + 0x0678, 0x0690, 0x06a6, 0x06b4, 0x06c2, 0x06d4, 0x06f7, 0x070b, + 0x0756, 0x0768, 0x0770, 0x0789, 0x0795, 0x07d6, 0x0805, 0x0815, + 0x0827, 0x0831, 0x0845, 0x085e, 0x0872, 0x0884, 0x0890, 0x08a1, + 0x08b3, 0x08f0, 0x08f8, 0x0900, 0x0912, 0x0920, 0x092a, 0x0938, + 0x094a, 0x095a, 0x0966, 0x097c, 0x098a, 0x099a, 0x09b3, 0x09d4, + // Entry 80 - BF + 0x09ed, 0x0a06, 0x0a12, 0x0a2d, 0x0a41, 0x0a49, 0x0a53, 0x0a68, + 0x0a7e, 0x0a8f, 0x0a9f, 0x0aab, 0x0ab5, 0x0ac9, 0x0ad7, 0x0ae3, + 0x0af1, 0x0afd, 0x0b0b, 0x0b1f, 0x0b34, 0x0b48, 0x0b63, 0x0b63, + 0x0b6b, 0x0b77, 0x0b8d, 0x0bc7, 0x0bef, 0x0bff, 0x0c15, 0x0c25, + 0x0c2f, 0x0c3d, 0x0c58, 0x0c64, 0x0c72, 0x0c84, 0x0c94, 0x0ca4, + 0x0cc1, 0x0ccb, 0x0ce4, 0x0cf4, 0x0d06, 0x0d18, 0x0d24, 0x0d2e, + 0x0d38, 0x0d40, 0x0d5b, 0x0d63, 0x0d6f, 0x0d77, 0x0d9c, 0x0dbe, + 0x0dce, 0x0dde, 0x0de8, 0x0e15, 0x0e32, 0x0e47, 0x0e47, 0x0e5d, + // Entry C0 - FF + 0x0e67, 0x0e77, 0x0e81, 0x0e9a, 0x0eaa, 0x0eba, 0x0ec8, 0x0ed4, + 0x0ee0, 0x0f05, 0x0f22, 0x0f3d, 0x0f47, 0x0f51, 0x0f61, 0x0f7e, + 0x0f90, 0x0fb7, 0x0fc9, 0x0fe0, 0x0ff3, 0x1001, 0x100d, 0x101b, + 0x1032, 0x1057, 0x1067, 0x107c, 0x1088, 0x109a, 0x10b8, 0x10e3, + 0x10e9, 0x1119, 0x1121, 0x112f, 0x1143, 0x1151, 0x1166, 0x117e, + 0x1188, 0x1192, 0x11a0, 0x11c2, 0x11ce, 0x11da, 0x11ec, 0x11fa, + 0x1206, 0x1238, 0x1238, 0x126a, 0x1278, 0x128c, 0x129a, 0x12cd, + 0x12df, 0x1313, 0x1335, 0x1343, 0x1351, 0x136f, 0x1379, 0x1385, + // Entry 100 - 13F + 0x138f, 0x1399, 0x13b0, 0x13be, 0x13ce, 0x13e9, 0x13f3, 0x13ff, + 0x141a, 0x1435, 0x1445, 0x145c, 0x1479, 0x1490, 0x14a9, 0x14c4, + 0x14dd, 0x14eb, 0x1508, 0x1512, 0x1527, 0x153e, 0x155e, 0x1577, + 0x158f, 0x15a3, 0x15c8, 0x15dc, 0x15e6, 0x15ff, 0x1614, 0x1620, + 0x1637, 0x1650, 0x1667, 0x1667, 0x1684, }, }, { // bas @@ -32767,91 +34710,92 @@ var regionHeaders = [252]header{ "оаАўстрыяАўстраліяАрубаАландскія астравыАзербайджанБоснія і Герцага" + "вінаБарбадасБангладэшБельгіяБуркіна-ФасоБалгарыяБахрэйнБурундзіБені" + "нСен-БартэльміБермудскія астравыБрунейБалівіяКарыбскія НідэрландыБр" + - "азіліяБагамыБутанВостраў БувэБатсванаБеларусьБелізКанадаКакосавыя (" + - "Кілінг) астравыКонга (Кіншаса)Цэнтральнаафрыканская РэспублікаКонга" + - " - БразавільШвейцарыяКот-д’ІвуарАстравы КукаЧыліКамерунКітайКалумбія" + - "Востраў КліпертонКоста-РыкаКубаКаба-ВердэКюрасааВостраў КалядКіпрЧэ" + - "хіяГерманіяВостраў Дыега-ГарсіяДжыбуціДаніяДамінікаДамініканская Рэ" + - "спублікаАлжырСеўта і МелільяЭквадорЭстоніяЕгіпетЗаходняя СахараЭрыт" + - "рэяІспаніяЭфіопіяЕўрапейскі саюзФінляндыяФіджыФалклендскія астравыМ" + - "ікранезіяФарэрскія астравыФранцыяГабонВялікабрытаніяГрэнадаГрузіяФр" + - "анцузская ГвіянаГернсіГанаГібралтарГрэнландыяГамбіяГвінеяГвадэлупаЭ" + - "кватарыяльная ГвінеяГрэцыяПаўднёвая Джорджыя і Паўднёвыя Сандвічавы" + - " астравыГватэмалаГуамГвінея-БісауГаянаГанконг, САР (Кітай)Астравы Хе" + - "рд і МакдональдГандурасХарватыяГаіціВенгрыяКанарскія астравыІнданез" + - "іяІрландыяІзраільВостраў МэнІндыяБрытанская тэрыторыя ў Індыйскім а" + - "кіянеІракІранІсландыяІталіяДжэрсіЯмайкаІарданіяЯпоніяКеніяКыргызста" + - "нКамбоджаКірыбаціКаморскія АстравыСент-Кітс і НевісПаўночная КарэяП" + - "аўднёвая КарэяКувейтКайманавы астравыКазахстанЛаосЛіванСент-ЛюсіяЛі" + - "хтэнштэйнШры-ЛанкаЛіберыяЛесотаЛітваЛюксембургЛатвіяЛівіяМарокаМана" + - "каМалдоваЧарнагорыяСен-МартэнМадагаскарМаршалавы АстравыМакедоніяМа" + - "ліМ’янма (Бірма)МанголіяМакаа, САР (Кітай)Паўночныя Марыянскія астр" + - "авыМарцінікаМаўрытаніяМантсератМальтаМаўрыкійМальдывыМалавіМексікаМ" + - "алайзіяМазамбікНамібіяНовая КаледоніяНігерВостраў НорфалкНігерыяНік" + - "арагуаНідэрландыНарвегіяНепалНауруНіуэНовая ЗеландыяАманПанамаПеруФ" + - "ранцузская ПалінезіяПапуа-Новая ГвінеяФіліпіныПакістанПольшчаСен-П’" + - "ер і МікелонАстравы ПіткэрнПуэрта-РыкаПалесцінскія ТэрыторыіПартуга" + - "ліяПалауПарагвайКатарЗнешняя АкіяніяРэюньёнРумыніяСербіяРасіяРуанда" + - "Саудаўская АравіяСаламонавы АстравыСейшэльскія АстравыСуданШвецыяСі" + - "нгапурВостраў Святой АленыСлавеніяШпіцберген і Ян-МаенСлавакіяСьера" + - "-ЛеонэСан-МарынаСенегалСамаліСурынамПаўднёвы СуданСан-Тамэ і Прынсіп" + - "іСальвадорСінт-МартэнСірыяСвазілендТрыстан-да-КуньяЦёркс і КайкасЧа" + - "дФранцузскія Паўднёвыя тэрыторыіТогаТайландТаджыкістанТакелауТымор-" + - "ЛешціТуркменістанТунісТонгаТурцыяТрынідад і ТабагаТувалуТайваньТанз" + - "аніяУкраінаУгандаМалыя Аддаленыя астравы ЗШАЗлучаныя Штаты АмерыкіУ" + - "ругвайУзбекістанВатыканСент-Вінсент і ГрэнадзіныВенесуэлаБрытанскія" + - " Віргінскія астравыАмерыканскія Віргінскія астравыВ’етнамВануатуУолі" + - "с і ФутунаСамоаКосаваЕменМаётаПаўднёваафрыканская РэспублікаЗамбіяЗ" + - "імбабвэНевядомы рэгіёнСветАфрыкаПаўночная АмерыкаПаўднёвая АмерыкаА" + - "кіяніяЗаходняя АфрыкаЦэнтральная АмерыкаУсходняя АфрыкаПаўночная Аф" + - "рыкаЦэнтральная АфрыкаПаўднёвая АфрыкаПаўночная і Паўднёвая Амерыкі" + - "Паўночнаамерыканскі рэгіёнКарыбскія астравыУсходняя АзіяПаўднёвая А" + - "зіяПаўднёва-Усходняя АзіяПаўднёвая ЕўропаАўстралазіяМеланезіяМікран" + - "езійскі рэгіёнПалінезіяАзіяЦэнтральная АзіяЗаходняя АзіяЕўропаУсход" + - "няя ЕўропаПаўночная ЕўропаЗаходняя ЕўропаЛацінская Амерыка", - []uint16{ // 292 elements + "азіліяБагамскія астравыБутанВостраў БувэБатсванаБеларусьБелізКанада" + + "Какосавыя (Кілінг) астравыКонга (Кіншаса)Цэнтральна-Афрыканская Рэс" + + "публікаКонга - БразавільШвейцарыяКот-д’ІвуарАстравы КукаЧыліКамерун" + + "КітайКалумбіяВостраў КліпертонКоста-РыкаКубаКаба-ВердэКюрасааВостра" + + "ў КалядКіпрЧэхіяГерманіяВостраў Дыега-ГарсіяДжыбуціДаніяДамінікаДам" + + "ініканская РэспублікаАлжырСеўта і МелільяЭквадорЭстоніяЕгіпетЗаходн" + + "яя СахараЭрытрэяІспаніяЭфіопіяЕўрапейскі саюзЕўразонаФінляндыяФіджы" + + "Фалклендскія астравыМікранезіяФарэрскія астравыФранцыяГабонВялікабр" + + "ытаніяГрэнадаГрузіяФранцузская ГвіянаГернсіГанаГібралтарГрэнландыяГ" + + "амбіяГвінеяГвадэлупаЭкватарыяльная ГвінеяГрэцыяПаўднёвая Джорджыя і" + + " Паўднёвыя Сандвічавы астравыГватэмалаГуамГвінея-БісауГаянаГанконг, " + + "САР (Кітай)Астравы Херд і МакдональдГандурасХарватыяГаіціВенгрыяКан" + + "арскія астравыІнданезіяІрландыяІзраільВостраў МэнІндыяБрытанская тэ" + + "рыторыя ў Індыйскім акіянеІракІранІсландыяІталіяДжэрсіЯмайкаІардані" + + "яЯпоніяКеніяКыргызстанКамбоджаКірыбаціКаморскія астравыСент-Кітс і " + + "НевісПаўночная КарэяПаўднёвая КарэяКувейтКайманавы астравыКазахстан" + + "ЛаосЛіванСент-ЛюсіяЛіхтэнштэйнШры-ЛанкаЛіберыяЛесотаЛітваЛюксембург" + + "ЛатвіяЛівіяМарокаМанакаМалдоваЧарнагорыяСен-МартэнМадагаскарМаршала" + + "вы астравыМакедоніяМаліМ’янма (Бірма)МанголіяМакаа, САР (Кітай)Паўн" + + "очныя Марыянскія астравыМарцінікаМаўрытаніяМантсератМальтаМаўрыкійМ" + + "альдывыМалавіМексікаМалайзіяМазамбікНамібіяНовая КаледоніяНігерВост" + + "раў НорфалкНігерыяНікарагуаНідэрландыНарвегіяНепалНауруНіуэНовая Зе" + + "ландыяАманПанамаПеруФранцузская ПалінезіяПапуа-Новая ГвінеяФіліпіны" + + "ПакістанПольшчаСен-П’ер і МікелонАстравы ПіткэрнПуэрта-РыкаПалесцін" + + "скія ТэрыторыіПартугаліяПалауПарагвайКатарЗнешняя АкіяніяРэюньёнРум" + + "ыніяСербіяРасіяРуандаСаудаўская АравіяСаламонавы астравыСейшэльскія" + + " астравыСуданШвецыяСінгапурВостраў Святой АленыСлавеніяШпіцберген і " + + "Ян-МаенСлавакіяСьера-ЛеонэСан-МарынаСенегалСамаліСурынамПаўднёвы Су" + + "данСан-Тамэ і ПрынсіпіСальвадорСінт-МартэнСірыяСвазілендТрыстан-да-" + + "КуньяАстравы Цёркс і КайкасЧадФранцузскія паўднёвыя тэрыторыіТогаТа" + + "йландТаджыкістанТакелауТымор-ЛешціТуркменістанТунісТонгаТурцыяТрыні" + + "дад і ТабагаТувалуТайваньТанзаніяУкраінаУгандаМалыя Аддаленыя астра" + + "вы ЗШАААНЗлучаныя Штаты АмерыкіУругвайУзбекістанВатыканСент-Вінсент" + + " і ГрэнадзіныВенесуэлаБрытанскія Віргінскія астравыАмерыканскія Вірг" + + "інскія астравыВ’етнамВануатуУоліс і ФутунаСамоаКосаваЕменМаётаПаўдн" + + "ёва-Афрыканская РэспублікаЗамбіяЗімбабвэНевядомы рэгіёнСветАфрыкаПа" + + "ўночная АмерыкаПаўднёвая АмерыкаАкіяніяЗаходняя АфрыкаЦэнтральная А" + + "мерыкаУсходняя АфрыкаПаўночная АфрыкаЦэнтральная АфрыкаПаўднёвая Аф" + + "рыкаПаўночная і Паўднёвая АмерыкіПаўночнаамерыканскі рэгіёнКарыбскі" + + "я астравыУсходняя АзіяПаўднёвая АзіяПаўднёва-Усходняя АзіяПаўднёвая" + + " ЕўропаАўстралазіяМеланезіяМікранезійскі рэгіёнПалінезіяАзіяЦэнтраль" + + "ная АзіяЗаходняя АзіяЕўропаУсходняя ЕўропаПаўночная ЕўропаЗаходняя " + + "ЕўропаЛацінская Амерыка", + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0021, 0x002d, 0x0062, 0x0076, 0x0096, 0x00a4, 0x00b2, 0x00c0, 0x00cc, 0x00e0, 0x00f2, 0x0115, 0x0123, 0x0135, 0x013f, 0x0160, 0x0176, 0x019c, 0x01ac, 0x01be, 0x01cc, 0x01e3, 0x01f3, 0x0201, 0x0211, 0x021b, 0x0234, 0x0257, 0x0263, 0x0271, 0x0298, - 0x02a8, 0x02b4, 0x02be, 0x02d5, 0x02e5, 0x02f5, 0x02ff, 0x030b, - 0x033b, 0x0356, 0x0395, 0x03b4, 0x03c6, 0x03dc, 0x03f3, 0x03fb, - 0x0409, 0x0413, 0x0423, 0x0444, 0x0457, 0x045f, 0x0472, 0x0480, - 0x0499, 0x04a1, 0x04ab, 0x04bb, 0x04e1, 0x04ef, 0x04f9, 0x0509, - // Entry 40 - 7F - 0x0538, 0x0542, 0x055e, 0x056c, 0x057a, 0x0586, 0x05a3, 0x05b1, - 0x05bf, 0x05cd, 0x05ea, 0x05ea, 0x05fc, 0x0606, 0x062d, 0x0641, - 0x0662, 0x0670, 0x067a, 0x0696, 0x06a4, 0x06b0, 0x06d3, 0x06df, - 0x06e7, 0x06f9, 0x070d, 0x0719, 0x0725, 0x0737, 0x0760, 0x076c, - 0x07c9, 0x07db, 0x07e3, 0x07fa, 0x0804, 0x0827, 0x0856, 0x0866, - 0x0876, 0x0880, 0x088e, 0x08af, 0x08c1, 0x08d1, 0x08df, 0x08f4, - 0x08fe, 0x0948, 0x0950, 0x0958, 0x0968, 0x0974, 0x0980, 0x098c, - 0x099c, 0x09a8, 0x09b2, 0x09c6, 0x09d6, 0x09e6, 0x0a07, 0x0a26, - // Entry 80 - BF - 0x0a43, 0x0a60, 0x0a6c, 0x0a8d, 0x0a9f, 0x0aa7, 0x0ab1, 0x0ac4, - 0x0ada, 0x0aeb, 0x0af9, 0x0b05, 0x0b0f, 0x0b23, 0x0b2f, 0x0b39, - 0x0b45, 0x0b51, 0x0b5f, 0x0b73, 0x0b86, 0x0b9a, 0x0bbb, 0x0bcd, - 0x0bd5, 0x0bef, 0x0bff, 0x0c1e, 0x0c54, 0x0c66, 0x0c7a, 0x0c8c, - 0x0c98, 0x0ca8, 0x0cb8, 0x0cc4, 0x0cd2, 0x0ce2, 0x0cf2, 0x0d00, - 0x0d1d, 0x0d27, 0x0d44, 0x0d52, 0x0d64, 0x0d78, 0x0d88, 0x0d92, - 0x0d9c, 0x0da4, 0x0dbf, 0x0dc7, 0x0dd3, 0x0ddb, 0x0e04, 0x0e26, - 0x0e36, 0x0e46, 0x0e54, 0x0e76, 0x0e93, 0x0ea8, 0x0ed3, 0x0ee7, - // Entry C0 - FF - 0x0ef1, 0x0f01, 0x0f0b, 0x0f28, 0x0f36, 0x0f44, 0x0f50, 0x0f5a, - 0x0f66, 0x0f87, 0x0faa, 0x0fcf, 0x0fd9, 0x0fe5, 0x0ff5, 0x101b, - 0x102b, 0x1050, 0x1060, 0x1075, 0x1088, 0x1096, 0x10a2, 0x10b0, - 0x10cb, 0x10ee, 0x1100, 0x1115, 0x111f, 0x1131, 0x114f, 0x1169, - 0x116f, 0x11ab, 0x11b3, 0x11c1, 0x11d7, 0x11e5, 0x11fa, 0x1212, - 0x121c, 0x1226, 0x1232, 0x1252, 0x125e, 0x126c, 0x127c, 0x128a, - 0x1296, 0x12c9, 0x12c9, 0x12f3, 0x1301, 0x1315, 0x1323, 0x1352, - 0x1364, 0x139c, 0x13d8, 0x13e7, 0x13f5, 0x140f, 0x1419, 0x1425, - // Entry 100 - 13F - 0x142d, 0x1437, 0x1472, 0x147e, 0x148e, 0x14ab, 0x14b3, 0x14bf, - 0x14e0, 0x1501, 0x150f, 0x152c, 0x1551, 0x156e, 0x158d, 0x15b0, - 0x15cf, 0x1606, 0x1639, 0x165a, 0x1673, 0x168e, 0x16b8, 0x16d7, - 0x16ed, 0x16ff, 0x1726, 0x1738, 0x1740, 0x175f, 0x1778, 0x1784, - 0x17a1, 0x17c0, 0x17dd, 0x17fe, + 0x02a8, 0x02c9, 0x02d3, 0x02ea, 0x02fa, 0x030a, 0x0314, 0x0320, + 0x0350, 0x036b, 0x03ab, 0x03ca, 0x03dc, 0x03f2, 0x0409, 0x0411, + 0x041f, 0x0429, 0x0439, 0x045a, 0x046d, 0x0475, 0x0488, 0x0496, + 0x04af, 0x04b7, 0x04c1, 0x04d1, 0x04f7, 0x0505, 0x050f, 0x051f, + // Entry 40 - 7F + 0x054e, 0x0558, 0x0574, 0x0582, 0x0590, 0x059c, 0x05b9, 0x05c7, + 0x05d5, 0x05e3, 0x0600, 0x0610, 0x0622, 0x062c, 0x0653, 0x0667, + 0x0688, 0x0696, 0x06a0, 0x06bc, 0x06ca, 0x06d6, 0x06f9, 0x0705, + 0x070d, 0x071f, 0x0733, 0x073f, 0x074b, 0x075d, 0x0786, 0x0792, + 0x07ef, 0x0801, 0x0809, 0x0820, 0x082a, 0x084d, 0x087c, 0x088c, + 0x089c, 0x08a6, 0x08b4, 0x08d5, 0x08e7, 0x08f7, 0x0905, 0x091a, + 0x0924, 0x096e, 0x0976, 0x097e, 0x098e, 0x099a, 0x09a6, 0x09b2, + 0x09c2, 0x09ce, 0x09d8, 0x09ec, 0x09fc, 0x0a0c, 0x0a2d, 0x0a4c, + // Entry 80 - BF + 0x0a69, 0x0a86, 0x0a92, 0x0ab3, 0x0ac5, 0x0acd, 0x0ad7, 0x0aea, + 0x0b00, 0x0b11, 0x0b1f, 0x0b2b, 0x0b35, 0x0b49, 0x0b55, 0x0b5f, + 0x0b6b, 0x0b77, 0x0b85, 0x0b99, 0x0bac, 0x0bc0, 0x0be1, 0x0bf3, + 0x0bfb, 0x0c15, 0x0c25, 0x0c44, 0x0c7a, 0x0c8c, 0x0ca0, 0x0cb2, + 0x0cbe, 0x0cce, 0x0cde, 0x0cea, 0x0cf8, 0x0d08, 0x0d18, 0x0d26, + 0x0d43, 0x0d4d, 0x0d6a, 0x0d78, 0x0d8a, 0x0d9e, 0x0dae, 0x0db8, + 0x0dc2, 0x0dca, 0x0de5, 0x0ded, 0x0df9, 0x0e01, 0x0e2a, 0x0e4c, + 0x0e5c, 0x0e6c, 0x0e7a, 0x0e9c, 0x0eb9, 0x0ece, 0x0ef9, 0x0f0d, + // Entry C0 - FF + 0x0f17, 0x0f27, 0x0f31, 0x0f4e, 0x0f5c, 0x0f6a, 0x0f76, 0x0f80, + 0x0f8c, 0x0fad, 0x0fd0, 0x0ff5, 0x0fff, 0x100b, 0x101b, 0x1041, + 0x1051, 0x1076, 0x1086, 0x109b, 0x10ae, 0x10bc, 0x10c8, 0x10d6, + 0x10f1, 0x1114, 0x1126, 0x113b, 0x1145, 0x1157, 0x1175, 0x119e, + 0x11a4, 0x11e0, 0x11e8, 0x11f6, 0x120c, 0x121a, 0x122f, 0x1247, + 0x1251, 0x125b, 0x1267, 0x1287, 0x1293, 0x12a1, 0x12b1, 0x12bf, + 0x12cb, 0x12fe, 0x1304, 0x132e, 0x133c, 0x1350, 0x135e, 0x138d, + 0x139f, 0x13d7, 0x1413, 0x1422, 0x1430, 0x144a, 0x1454, 0x1460, + // Entry 100 - 13F + 0x1468, 0x1472, 0x14ae, 0x14ba, 0x14ca, 0x14e7, 0x14ef, 0x14fb, + 0x151c, 0x153d, 0x154b, 0x1568, 0x158d, 0x15aa, 0x15c9, 0x15ec, + 0x160b, 0x1642, 0x1675, 0x1696, 0x16af, 0x16ca, 0x16f4, 0x1713, + 0x1729, 0x173b, 0x1762, 0x1774, 0x177c, 0x179b, 0x17b4, 0x17c0, + 0x17dd, 0x17fc, 0x1819, 0x1819, 0x183a, }, }, { // bem @@ -33058,7 +35002,7 @@ var regionHeaders = [252]header{ bnRegionIdx, }, { // bn-IN - "হন্ডুরাসমলডোভামার্কিন যুক্তরাষ্ট্রের পার্শ্ববর্তী দ্বীপপুঞ্জ", + "মলডোভামার্কিন যুক্তরাষ্ট্রের পার্শ্ববর্তী দ্বীপপুঞ্জ", []uint16{ // 242 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -33074,27 +35018,27 @@ var regionHeaders = [252]header{ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0018, - 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, - 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, - 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // Entry 80 - BF - 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, - 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, - 0x0018, 0x0018, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, - 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, - 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, - 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, - 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, - 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, // Entry C0 - FF - 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, - 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, - 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, - 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, - 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, - 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, - 0x002a, 0x00ae, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0096, }, }, { // bo @@ -33229,7 +35173,7 @@ var regionHeaders = [252]header{ " GevredEuropa ar SuAostralaziaMelaneziaRannved MikroneziaPolineziaAz" + "iaAzia ar CʼhreizAzia ar CʼhornôgEuropaEuropa ar ReterEuropa an Norz" + "hEuropa ar CʼhornôgAmerika Latin", - []uint16{ // 292 elements + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x000e, 0x0015, 0x002e, 0x0039, 0x004b, 0x0053, 0x005a, 0x0061, 0x0067, 0x0071, 0x007d, 0x008b, 0x0092, 0x009b, 0x00a0, @@ -33271,7 +35215,7 @@ var regionHeaders = [252]header{ 0x0a1a, 0x0a23, 0x0a2a, 0x0a3e, 0x0a4a, 0x0a59, 0x0a68, 0x0a7a, 0x0a86, 0x0a90, 0x0aa0, 0x0aa5, 0x0ab2, 0x0abc, 0x0aca, 0x0ad6, 0x0ae1, 0x0aea, 0x0afc, 0x0b05, 0x0b09, 0x0b19, 0x0b2b, 0x0b31, - 0x0b40, 0x0b4f, 0x0b63, 0x0b70, + 0x0b40, 0x0b4f, 0x0b63, 0x0b63, 0x0b70, }, }, { // brx @@ -33318,7 +35262,7 @@ var regionHeaders = [252]header{ "पूर्वी एशियादक्षिणी यूरोपऑस्ट्रेलिया एवं न्यूजीलैंडमेलीनेशियामाईक्" + "रोनेशियापोलीनेशियाएशियामध्य एशियापश्चिमी ऐशियायूरोपपूर्वी यूरोपउत्" + "तरी यूरोपपश्चिमी यूरोप्लैटिन अमरिका एवं करीबी", - []uint16{ // 292 elements + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0015, 0x0047, 0x006e, 0x00a6, 0x00b8, 0x00d3, 0x00ee, 0x0100, 0x0121, 0x0142, 0x0161, 0x017c, 0x019d, 0x01ac, @@ -33360,287 +35304,383 @@ var regionHeaders = [252]header{ 0x1c1e, 0x1c43, 0x1c5b, 0x1c86, 0x1ca5, 0x1ccd, 0x1cf5, 0x1d17, 0x1d42, 0x1d5d, 0x1d82, 0x1d9a, 0x1dbc, 0x1de1, 0x1e16, 0x1e3b, 0x1e85, 0x1ea3, 0x1eca, 0x1ee8, 0x1ef7, 0x1f13, 0x1f38, 0x1f47, - 0x1f69, 0x1f8b, 0x1fb3, 0x1fef, + 0x1f69, 0x1f8b, 0x1fb3, 0x1fb3, 0x1fef, }, }, { // bs - "Ostrvo AsensionAndoraUjedinjeni Arapski EmiratiAfganistanAntigva i Barbu" + - "daAngvilaAlbanijaArmenijaAngolaAntarktikaArgentinaAmerička SamoaAust" + - "rijaAustralijaArubaOlandska OstrvaAzerbejdžanBosna i HercegovinaBarb" + - "adosBangladešBelgijaBurkina FasoBugarskaBahreinBurundiBeninSveti Bar" + - "tolomejBermudaBrunejBolivijaKaripska HolandijaBrazilBahamiButanOstrv" + - "o BuveBocvanaBjelorusijaBelizeKanadaKokosova (Kilingova) OstrvaDemok" + - "ratska Republika KongoCentralnoafrička RepublikaKongoŠvicarskaObala " + - "SlonovačeKukova OstrvaČileKamerunKinaKolumbijaOstrvo KlipertonKostar" + - "ikaKubaKape VerdeKurasaoBožićna OstrvaKiparČeška RepublikaNjemačkaDi" + - "jego GarsijaDžibutiDanskaDominikaDominikanska RepublikaAlžirSeuta i " + - "MeliljaEkvadorEstonijaEgipatZapadna SaharaEritrejaŠpanijaEtiopijaEvr" + - "opska unijaFinskaFidžiFolklandska OstrvaMikronezijaFarska OstrvaFran" + + "Ostrvo AscensionAndoraUjedinjeni Arapski EmiratiAfganistanAntigva i Barb" + + "udaAngvilaAlbanijaArmenijaAngolaAntarktikaArgentinaAmerička SamoaAus" + + "trijaAustralijaArubaOlandska ostrvaAzerbejdžanBosna i HercegovinaBar" + + "badosBangladešBelgijaBurkina FasoBugarskaBahreinBurundiBeninSveti Ba" + + "rtolomejBermudaBrunejBolivijaKaripska HolandijaBrazilBahamiButanOstr" + + "vo BuveBocvanaBjelorusijaBelizeKanadaKokosova (Keelingova) ostrvaDem" + + "okratska Republika KongoCentralnoafrička RepublikaKongoŠvicarskaObal" + + "a SlonovačeKukova ostrvaČileKamerunKinaKolumbijaOstrvo KlipertonKost" + + "arikaKubaKape VerdeKurasaoBožićno ostrvoKiparČeškaNjemačkaDijego Gar" + + "sijaDžibutiDanskaDominikaDominikanska RepublikaAlžirSeuta i MeliljaE" + + "kvadorEstonijaEgipatZapadna SaharaEritrejaŠpanijaEtiopijaEvropska un" + + "ijaEurozonaFinskaFidžiFolklandska ostrvaMikronezijaFarska ostrvaFran" + "cuskaGabonVelika BritanijaGrenadaGruzijaFrancuska GvajanaGernziGanaG" + "ibraltarGrenlandGambijaGvinejaGvadalupeEkvatorijalna GvinejaGrčkaJuž" + - "na Džordžija i Južna Sendvička OstrvaGvatemalaGuamGvineja-BisaoGvaja" + - "naHong Kong (SAR Kina)Herd i arhipelag MekDonaldHondurasHrvatskaHait" + - "iMađarskaKanarska OstrvaIndonezijaIrskaIzraelOstrvo ManIndijaBritans" + - "ka Teritorija u Indijskom OkeanuIrakIranIslandItalijaDžerziJamajkaJo" + - "rdanJapanKenijaKirgistanKambodžaKiribatiKomorska OstrvaSveti Kits i " + - "NevisSjeverna KorejaJužna KorejaKuvajtKajmanska OstrvaKazahstanLaosL" + - "ibanSveta LucijaLihtenštajnŠri LankaLiberijaLesotoLitvanijaLuksembur" + - "gLatvijaLibijaMarokoMonakoMoldavijaCrna GoraSv. MartinMadagaskarMarš" + - "alova OstrvaMakedonijaMaliMijanmarMongolijaMakao (SAR Kina)Sjeverna " + - "Marijanska OstrvaMartinikMauritanijaMonseratMaltaMauricijusMaldiviMa" + - "laviMeksikoMalezijaMozambikNamibijaNova KaledonijaNigerOstrvo Norfol" + - "kNigerijaNikaragvaHolandijaNorveškaNepalNauruNiueNovi ZelandOmanPana" + - "maPeruFrancuska PolinezijaPapua Nova GvinejaFilipiniPakistanPoljskaS" + - "veti Petar i MikelonPitkernska OstrvaPorto RikoPalestinska Teritorij" + - "aPortugalPalauParagvajKatarVanjska OkeanijaReunionRumunijaSrbijaRusi" + - "jaRuandaSaudijska ArabijaSolomonska OstrvaSejšeliSudanŠvedskaSingapu" + - "rSveta HelenaSlovenijaSvalbard i Jan MajenSlovačkaSijera LeoneSan Ma" + - "rinoSenegalSomalijaSurinamJužni SudanSao Tome i PrincipeSalvadorSint" + - " MartenSirijaSvazilendTristan da KunjaOstrva Turks i KaikosČadFrancu" + - "ske Južne TeritorijeTogoTajlandTadžikistanTokelauIstočni TimorTurkme" + - "nistanTunisTongaTurskaTrinidad i TobagoTuvaluTajvanTanzanijaUkrajina" + - "UgandaAmerička Vanjska OstrvaUjedinjene NacijeSjedinjene Američke Dr" + - "žaveUrugvajUzbekistanVatikanSveti Vinsent i GrenadinVenecuelaBritan" + - "ska Djevičanska OstrvaAmerička Djevičanska OstrvaVijetnamVanuatuOstr" + - "va Valis i FutunaSamoaKosovoJemenMajoteJužnoafrička RepublikaZambija" + - "ZimbabveNepoznata oblastSvijetAfrikaSjeverna AmerikaJužna AmerikaOke" + - "anijaZapadna AfrikaSrednja AmerikaIstočna AfrikaSjeverna AfrikaCentr" + - "alna AfrikaJužna AfrikaAmerikaSjeverni dio AmerikeKaribiIstočna Azij" + - "aJužna AzijaJugoistočna AzijaJužna EvropaAustralazijaMelanezijaMikro" + - "nezijska regijaPolinezijaAzijaCentralna AzijaZapadna AzijaEvropaIsto" + - "čna EvropaSjeverna EvropaZapadna EvropaLatinska Amerika", - []uint16{ // 292 elements - // Entry 0 - 3F - 0x0000, 0x000f, 0x0015, 0x002f, 0x0039, 0x004a, 0x0051, 0x0059, - 0x0061, 0x0067, 0x0071, 0x007a, 0x0089, 0x0091, 0x009b, 0x00a0, - 0x00af, 0x00bb, 0x00ce, 0x00d6, 0x00e0, 0x00e7, 0x00f3, 0x00fb, - 0x0102, 0x0109, 0x010e, 0x011e, 0x0125, 0x012b, 0x0133, 0x0145, - 0x014b, 0x0151, 0x0156, 0x0161, 0x0168, 0x0173, 0x0179, 0x017f, - 0x019a, 0x01b5, 0x01d0, 0x01d5, 0x01df, 0x01ef, 0x01fc, 0x0201, - 0x0208, 0x020c, 0x0215, 0x0225, 0x022e, 0x0232, 0x023c, 0x0243, - 0x0253, 0x0258, 0x0269, 0x0272, 0x0280, 0x0288, 0x028e, 0x0296, - // Entry 40 - 7F - 0x02ac, 0x02b2, 0x02c1, 0x02c8, 0x02d0, 0x02d6, 0x02e4, 0x02ec, - 0x02f4, 0x02fc, 0x030a, 0x030a, 0x0310, 0x0316, 0x0328, 0x0333, + "na Džordžija i Južna Sendvič ostrvaGvatemalaGuamGvineja-BisaoGvajana" + + "Hong Kong (SAR Kina)Herd i arhipelag MekDonaldHondurasHrvatskaHaitiM" + + "ađarskaKanarska ostrvaIndonezijaIrskaIzraelOstrvo ManIndijaBritanska" + + " Teritorija u Indijskom OkeanuIrakIranIslandItalijaJerseyJamajkaJord" + + "anJapanKenijaKirgistanKambodžaKiribatiKomoriSveti Kits i NevisSjever" + + "na KorejaJužna KorejaKuvajtKajmanska ostrvaKazahstanLaosLibanSveta L" + + "ucijaLihtenštajnŠri LankaLiberijaLesotoLitvanijaLuksemburgLatvijaLib" + + "ijaMarokoMonakoMoldavijaCrna GoraSveti MartinMadagaskarMaršalova ost" + + "rvaMakedonijaMaliMjanmarMongolijaMakao (SAR Kina)Sjeverna Marijanska" + + " ostrvaMartinikMauritanijaMonseratMaltaMauricijusMaldiviMalaviMeksik" + + "oMalezijaMozambikNamibijaNova KaledonijaNigerOstrvo NorfolkNigerijaN" + + "ikaragvaHolandijaNorveškaNepalNauruNiueNovi ZelandOmanPanamaPeruFran" + + "cuska PolinezijaPapua Nova GvinejaFilipiniPakistanPoljskaSveti Petar" + + " i MikelonPitkernska OstrvaPorto RikoPalestinska TeritorijaPortugalP" + + "alauParagvajKatarVanjska OkeanijaReunionRumunijaSrbijaRusijaRuandaSa" + + "udijska ArabijaSolomonska OstrvaSejšeliSudanŠvedskaSingapurSveta Hel" + + "enaSlovenijaSvalbard i Jan MajenSlovačkaSijera LeoneSan MarinoSenega" + + "lSomalijaSurinamJužni SudanSao Tome i PrincipeSalvadorSint MartenSir" + + "ijaSvazilendTristan da CunhaOstrva Turks i KaikosČadFrancuske Južne " + + "TeritorijeTogoTajlandTadžikistanTokelauIstočni TimorTurkmenistanTuni" + + "sTongaTurskaTrinidad i TobagoTuvaluTajvanTanzanijaUkrajinaUgandaAmer" + + "ička Vanjska OstrvaUjedinjene NacijeSjedinjene Američke DržaveUrugva" + + "jUzbekistanVatikanSveti Vinsent i GrenadinVenecuelaBritanska Djeviča" + + "nska ostrvaAmerička Djevičanska ostrvaVijetnamVanuatuOstrva Valis i " + + "FutunaSamoaKosovoJemenMajoteJužnoafrička RepublikaZambijaZimbabveNep" + + "oznata oblastSvijetAfrikaSjeverna AmerikaJužna AmerikaOkeanijaZapadn" + + "a AfrikaSrednja AmerikaIstočna AfrikaSjeverna AfrikaSrednja AfrikaJu" + + "žna AfrikaAmerikaSjeverni dio AmerikeKaribiIstočna AzijaJužna Azija" + + "Jugoistočna AzijaJužna EvropaAustralazijaMelanezijaMikronezijska reg" + + "ijaPolinezijaAzijaSrednja AzijaZapadna AzijaEvropaIstočna EvropaSjev" + + "erna EvropaZapadna EvropaLatinska Amerika", + []uint16{ // 293 elements + // Entry 0 - 3F + 0x0000, 0x0010, 0x0016, 0x0030, 0x003a, 0x004b, 0x0052, 0x005a, + 0x0062, 0x0068, 0x0072, 0x007b, 0x008a, 0x0092, 0x009c, 0x00a1, + 0x00b0, 0x00bc, 0x00cf, 0x00d7, 0x00e1, 0x00e8, 0x00f4, 0x00fc, + 0x0103, 0x010a, 0x010f, 0x011f, 0x0126, 0x012c, 0x0134, 0x0146, + 0x014c, 0x0152, 0x0157, 0x0162, 0x0169, 0x0174, 0x017a, 0x0180, + 0x019c, 0x01b7, 0x01d2, 0x01d7, 0x01e1, 0x01f1, 0x01fe, 0x0203, + 0x020a, 0x020e, 0x0217, 0x0227, 0x0230, 0x0234, 0x023e, 0x0245, + 0x0255, 0x025a, 0x0261, 0x026a, 0x0278, 0x0280, 0x0286, 0x028e, + // Entry 40 - 7F + 0x02a4, 0x02aa, 0x02b9, 0x02c0, 0x02c8, 0x02ce, 0x02dc, 0x02e4, + 0x02ec, 0x02f4, 0x0302, 0x030a, 0x0310, 0x0316, 0x0328, 0x0333, 0x0340, 0x0349, 0x034e, 0x035e, 0x0365, 0x036c, 0x037d, 0x0383, 0x0387, 0x0390, 0x0398, 0x039f, 0x03a6, 0x03af, 0x03c4, 0x03ca, - 0x03f7, 0x0400, 0x0404, 0x0411, 0x0418, 0x042c, 0x0446, 0x044e, - 0x0456, 0x045b, 0x0464, 0x0473, 0x047d, 0x0482, 0x0488, 0x0492, - 0x0498, 0x04bf, 0x04c3, 0x04c7, 0x04cd, 0x04d4, 0x04db, 0x04e2, - 0x04e8, 0x04ed, 0x04f3, 0x04fc, 0x0505, 0x050d, 0x051c, 0x052e, - // Entry 80 - BF - 0x053d, 0x054a, 0x0550, 0x0560, 0x0569, 0x056d, 0x0572, 0x057e, - 0x058a, 0x0594, 0x059c, 0x05a2, 0x05ab, 0x05b5, 0x05bc, 0x05c2, - 0x05c8, 0x05ce, 0x05d7, 0x05e0, 0x05ea, 0x05f4, 0x0605, 0x060f, - 0x0613, 0x061b, 0x0624, 0x0634, 0x064e, 0x0656, 0x0661, 0x0669, - 0x066e, 0x0678, 0x067f, 0x0685, 0x068c, 0x0694, 0x069c, 0x06a4, - 0x06b3, 0x06b8, 0x06c6, 0x06ce, 0x06d7, 0x06e0, 0x06e9, 0x06ee, - 0x06f3, 0x06f7, 0x0702, 0x0706, 0x070c, 0x0710, 0x0724, 0x0736, - 0x073e, 0x0746, 0x074d, 0x0762, 0x0773, 0x077d, 0x0793, 0x079b, - // Entry C0 - FF - 0x07a0, 0x07a8, 0x07ad, 0x07bd, 0x07c4, 0x07cc, 0x07d2, 0x07d8, - 0x07de, 0x07ef, 0x0800, 0x0808, 0x080d, 0x0815, 0x081d, 0x0829, - 0x0832, 0x0846, 0x084f, 0x085b, 0x0865, 0x086c, 0x0874, 0x087b, - 0x0887, 0x089a, 0x08a2, 0x08ad, 0x08b3, 0x08bc, 0x08cc, 0x08e1, - 0x08e5, 0x0900, 0x0904, 0x090b, 0x0917, 0x091e, 0x092c, 0x0938, - 0x093d, 0x0942, 0x0948, 0x0959, 0x095f, 0x0965, 0x096e, 0x0976, - 0x097c, 0x0994, 0x09a5, 0x09c1, 0x09c8, 0x09d2, 0x09d9, 0x09f1, - 0x09fa, 0x0a17, 0x0a34, 0x0a3c, 0x0a43, 0x0a58, 0x0a5d, 0x0a63, - // Entry 100 - 13F - 0x0a68, 0x0a6e, 0x0a86, 0x0a8d, 0x0a95, 0x0aa5, 0x0aab, 0x0ab1, - 0x0ac1, 0x0acf, 0x0ad7, 0x0ae5, 0x0af4, 0x0b03, 0x0b12, 0x0b22, - 0x0b2f, 0x0b36, 0x0b4a, 0x0b50, 0x0b5e, 0x0b6a, 0x0b7c, 0x0b89, - 0x0b95, 0x0b9f, 0x0bb3, 0x0bbd, 0x0bc2, 0x0bd1, 0x0bde, 0x0be4, - 0x0bf3, 0x0c02, 0x0c10, 0x0c20, + 0x03f5, 0x03fe, 0x0402, 0x040f, 0x0416, 0x042a, 0x0444, 0x044c, + 0x0454, 0x0459, 0x0462, 0x0471, 0x047b, 0x0480, 0x0486, 0x0490, + 0x0496, 0x04bd, 0x04c1, 0x04c5, 0x04cb, 0x04d2, 0x04d8, 0x04df, + 0x04e5, 0x04ea, 0x04f0, 0x04f9, 0x0502, 0x050a, 0x0510, 0x0522, + // Entry 80 - BF + 0x0531, 0x053e, 0x0544, 0x0554, 0x055d, 0x0561, 0x0566, 0x0572, + 0x057e, 0x0588, 0x0590, 0x0596, 0x059f, 0x05a9, 0x05b0, 0x05b6, + 0x05bc, 0x05c2, 0x05cb, 0x05d4, 0x05e0, 0x05ea, 0x05fb, 0x0605, + 0x0609, 0x0610, 0x0619, 0x0629, 0x0643, 0x064b, 0x0656, 0x065e, + 0x0663, 0x066d, 0x0674, 0x067a, 0x0681, 0x0689, 0x0691, 0x0699, + 0x06a8, 0x06ad, 0x06bb, 0x06c3, 0x06cc, 0x06d5, 0x06de, 0x06e3, + 0x06e8, 0x06ec, 0x06f7, 0x06fb, 0x0701, 0x0705, 0x0719, 0x072b, + 0x0733, 0x073b, 0x0742, 0x0757, 0x0768, 0x0772, 0x0788, 0x0790, + // Entry C0 - FF + 0x0795, 0x079d, 0x07a2, 0x07b2, 0x07b9, 0x07c1, 0x07c7, 0x07cd, + 0x07d3, 0x07e4, 0x07f5, 0x07fd, 0x0802, 0x080a, 0x0812, 0x081e, + 0x0827, 0x083b, 0x0844, 0x0850, 0x085a, 0x0861, 0x0869, 0x0870, + 0x087c, 0x088f, 0x0897, 0x08a2, 0x08a8, 0x08b1, 0x08c1, 0x08d6, + 0x08da, 0x08f5, 0x08f9, 0x0900, 0x090c, 0x0913, 0x0921, 0x092d, + 0x0932, 0x0937, 0x093d, 0x094e, 0x0954, 0x095a, 0x0963, 0x096b, + 0x0971, 0x0989, 0x099a, 0x09b6, 0x09bd, 0x09c7, 0x09ce, 0x09e6, + 0x09ef, 0x0a0c, 0x0a29, 0x0a31, 0x0a38, 0x0a4d, 0x0a52, 0x0a58, + // Entry 100 - 13F + 0x0a5d, 0x0a63, 0x0a7b, 0x0a82, 0x0a8a, 0x0a9a, 0x0aa0, 0x0aa6, + 0x0ab6, 0x0ac4, 0x0acc, 0x0ada, 0x0ae9, 0x0af8, 0x0b07, 0x0b15, + 0x0b22, 0x0b29, 0x0b3d, 0x0b43, 0x0b51, 0x0b5d, 0x0b6f, 0x0b7c, + 0x0b88, 0x0b92, 0x0ba6, 0x0bb0, 0x0bb5, 0x0bc2, 0x0bcf, 0x0bd5, + 0x0be4, 0x0bf3, 0x0c01, 0x0c01, 0x0c11, }, }, { // bs-Cyrl - "Острво АсенсионАндораУједињени Арапски ЕмиратиАвганистанАнтигва и Барбуд" + - "аАнгвилаАлбанијаАрменијаАнголаАнтарктикАргентинаАмеричка СамоаАустр" + - "ијаАустралијаАрубаАландска острваАзербејџанБосна и ХерцеговинаБарба" + + "Острво АсенсионАндораУједињени Арапски ЕмиратиАфганистанАнтигва и Барбуд" + + "аАнгвилаАлбанијаЕрменијаАнголаАнтарктикАргентинаАмеричка СамоаАустр" + + "ијаАустралијаАрубаОландска острваАзербејџанБосна и ХерцеговинаБарба" + "досБангладешБелгијаБуркина ФасоБугарскаБахреинБурундиБенинСвети Бар" + - "толомејБермудаБрунејБоливијаБразилБахамиБутанБуве ОстрваБоцванаБело" + - "русијаБелизеКанадаКокос (Келинг) ОстрваКонго - КиншасаЦентрално Афр" + - "ичка РепубликаКонго - БразавилШвајцарскаОбала СлоновачеКукова Острв" + - "аЧилеКамерунКинаКолумбијаОстрво КлипертонКостарикаКубаКапе ВердеБож" + - "ићна острваКипарЧешкаНемачкаДијего ГарсијаЏибутиДанскаДоминикаДомин" + - "иканска РепубликаАлжирСеута и МелиљаЕквадорЕстонијаЕгипатЗападна Са" + - "хараЕритрејаШпанијаЕтиопијаЕвропска УнијаФинскаФиџиФокландска острв" + - "аМикронезијаФарска ОстрваФранцускаГабонВелика БританијаГренадаГрузи" + - "јаФранцуска ГвајанаГурнсиГанаГибралтарГренландГамбијаГвинејаГваделу" + - "пеЕкваторијална ГвинејаГрчкаЈужна Џорџија и Јужна Сендвич ОстрваГва" + - "темалаГуамГвинеја-БисаоГвајанаХонг Конг С. А. Р. КинаХерд и Мекдона" + - "лд ОстрваХондурасХрватскаХаитиМађарскаКанарска острваИндонезијаИрск" + - "аИзраелОстрво МанИндијаБританска територија у Индијском океануИракИ" + - "ранИсландИталијаЏерсиЈамајкаЈорданЈапанКенијаКиргизстанКамбоџаКириб" + - "атиКоморска ОстрваСент Китс и НевисСеверна КорејаЈужна КорејаКувајт" + - "Кајманска ОстрваКазахстанЛаосЛибанСент ЛуцијаЛихтенштајнШри ЛанкаЛи" + - "беријаЛесотоЛитванијаЛуксембургЛетонијаЛибијаМарокоМонакоМолдавијаЦ" + - "рна ГораСент МартинМадагаскарМаршалска ОстрваМакедонијаМалиМијанмар" + - " (Бурма)МонголијаМакао С. А. Р. КинаСеверна Маријанска ОстрваМартини" + - "кМауританијаМонсератМалтаМаурицијусМалдивиМалавиМексикоМалезијаМоза" + - "мбикНамибијаНова КаледонијаНигерНорфолк ОстрвоНигеријаНикарагваХола" + - "ндијаНорвешкаНепалНауруНиуеНови ЗеландОманПанамаПеруФранцуска Полин" + - "езијаПапуа Нова ГвинејаФилипиниПакистанПољскаСен Пјер и МикелонПитк" + - "ернПорто РикоПалестинске територијеПортугалијаПалауПарагвајКатарОст" + - "ала океанијаРеинионРумунијаСрбијаРусијаРуандаСаудијска АрабијаСолом" + - "онска ОстрваСејшелиСуданШведскаСингапурСвета ЈеленаСловенијаСвалбар" + - "д и Јанмајен ОстрваСловачкаСијера ЛеонеСан МариноСенегалСомалијаСур" + - "инамСао Томе и ПринципеСалвадорСиријаСвазилендТристан да КуњаТуркс " + - "и Кајкос ОстрваЧадФранцуске Јужне ТериторијеТогоТајландТаџикистанТо" + - "келауИсточни ТиморТуркменистанТунисТонгаТурскаТринидад и ТобагоТува" + - "луТајванТанзанијаУкрајинаУгандаМања удаљена острва САДСједињене Аме" + - "ричке ДржавеУругвајУзбекистанВатиканСент Винсент и ГренадиниВенецуе" + - "лаБританска Девичанска ОстрваС.А.Д. Девичанска ОстрваВијетнамВануат" + - "уВалис и Футуна ОстрваСамоаЈеменМајотеЈужноафричка РепубликаЗамбија" + - "ЗимбабвеНепозната или неважећа областСветАфрикаСеверноамерички конт" + - "инентЈужна АмерикаОкеанијаЗападна АфрикаЦентрална АмерикаИсточна Аф" + - "рикаСеверна АфрикаЦентрална АфрикаЈужна АфрикаАмерикеСеверна Америк" + - "аКарибиИсточна АзијаЈужна АзијаЈугоисточна АзијаЈужна ЕвропаАустрал" + - "ија и Нови ЗеландМеланезијаМикронезијски регионПолинезијаАзијаЦентр" + - "ална АзијаЗападна АзијаЕвропаИсточна ЕвропаСеверна ЕвропаЗападна Ев" + - "ропаЛатинска Америка", - []uint16{ // 292 elements + "толомејБермудиБрунејБоливијаКарипска ХоландијаБразилБахамиБутанОстр" + + "во БувеБоцванаБјелорусијаБелизКанадаКокос (Келинг) ОстрваДемократск" + + "а Република КонгоСредњоафричка РепубликаКонгоШвицарскаОбала Слонова" + + "чеКукова ОстрваЧилеКамерунКинаКолумбијаОстрво КлипертонКостарикаКуб" + + "аЗеленортска ОстрваКурасаоБожићно острвоКипарЧешкаЊемачкаДијего Гар" + + "сијаЏибутиДанскаДоминикаДоминиканска РепубликаАлжирСеута и МелиљаЕк" + + "вадорЕстонијаЕгипатЗападна СахараЕритрејаШпанијаЕтиопијаЕвропска ун" + + "ијаЕурозонаФинскаФиџиФокландска острваМикронезијаФарска острваФранц" + + "ускаГабонУједињено КраљевствоГренадаГрузијаФранцуска ГвајанаГернзиГ" + + "анаГибралтарГренландГамбијаГвинејаГваделупеЕкваторска ГвинејаГрчкаЈ" + + "ужна Џорџија и Јужна Сендвич ОстрваГватемалаГуамГвинеја-БисауГвајан" + + "аХонг Конг (САР Кина)Херд и Мекдоналд ОстрваХондурасХрватскаХаитиМа" + + "ђарскаКанарска острваИндонезијаИрскаИзраелОстрво МенИндијаБританска" + + " територија у Индијском океануИракИранИсландИталијаЏерзиЈамајкаЈорда" + + "нЈапанКенијаКиргизстанКамбоџаКирибатиКомориСвети Кристофор и НевисС" + + "јеверна КорејаЈужна КорејаКувајтКајманска острваКазахстанЛаосЛибанС" + + "вета ЛуцијаЛихтенштајнШри ЛанкаЛиберијаЛесотоЛитванијаЛуксембургЛат" + + "вијаЛибијаМарокоМонакоМолдавијаЦрна ГораСвети МартинМадагаскарМарша" + + "лска ОстрваМакедонијаМалиМјанмарМонголијаМакао (САР Кина)Сјеверна М" + + "аријанска острваМартиникМауританијаМонсератМалтаМаурицијусМалдивиМа" + + "лавиМексикоМалезијаМозамбикНамибијаНова КаледонијаНигерОстрво Норфо" + + "лкНигеријаНикарагваХоландијаНорвешкаНепалНауруНиуеНови ЗеландОманПа" + + "намаПеруФранцуска ПолинезијаПапуа Нова ГвинејаФилипиниПакистанПољск" + + "аСен Пјер и МикелонПиткернПорторикоПалестинске територијеПортугалПа" + + "лауПарагвајКатарОстала океанијаРеинионРумунијаСрбијаРусијаРуандаСау" + + "дијска АрабијаСоломонска ОстрваСејшелиСуданШведскаСингапурСвета Хел" + + "енаСловенијаСвалбард и Јан МајенСловачкаСијера ЛеонеСан МариноСенег" + + "алСомалијаСуринамЈужни СуданСвети Тома и ПринципСалвадорСиријаСвази" + + "Тристан да КуњаТуркс и Кајкос ОстрваЧадФранцуске Јужне ТериторијеТо" + + "гоТајландТаџикистанТокелауИсточни ТиморТуркменистанТунисТонгаТурска" + + "Тринидад и ТобагоТувалуТајванТанзанијаУкрајинаУгандаМања удаљена ос" + + "трва САДУједињене нацијеСједињене Америчке ДржавеУругвајУзбекистанВ" + + "атиканСвети Винсент и ГренадиниВенецуелаБританска Дјевичанска острв" + + "аАмеричка Дјевичанска острваВијетнамВануатуВалис и ФутунаСамоаКосов" + + "оЈеменМајотеЈужноафричка РепубликаЗамбијаЗимбабвеНепозната или нева" + + "жећа областСвијетАфрикаСеверноамерички континентЈужна АмерикаОкеани" + + "јаЗападна АфрикаЦентрална АмерикаИсточна АфрикаСјеверна АфрикаЦентр" + + "ална АфрикаЈужна АфрикаАмерикеСеверна АмерикаКарибиИсточна АзијаЈуж" + + "на АзијаЈугоисточна АзијаЈужна ЕвропаАустралија и Нови ЗеландМелане" + + "зијаМикронезијски регионПолинезијаАзијаЦентрална АзијаЗападна Азија" + + "ЕвропаИсточна ЕвропаСјеверна ЕвропаЗападна ЕвропаЛатинска Америка", + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x001d, 0x0029, 0x0059, 0x006d, 0x008d, 0x009b, 0x00ab, 0x00bb, 0x00c7, 0x00d9, 0x00eb, 0x0106, 0x0116, 0x012a, 0x0134, 0x0151, 0x0165, 0x0189, 0x0199, 0x01ab, 0x01b9, 0x01d0, 0x01e0, - 0x01ee, 0x01fc, 0x0206, 0x0225, 0x0233, 0x023f, 0x024f, 0x024f, - 0x025b, 0x0267, 0x0271, 0x0286, 0x0294, 0x02a8, 0x02b4, 0x02c0, - 0x02e6, 0x0301, 0x0335, 0x0352, 0x0366, 0x0383, 0x039c, 0x03a4, - 0x03b2, 0x03ba, 0x03cc, 0x03eb, 0x03fd, 0x0405, 0x0418, 0x0418, - 0x0433, 0x043d, 0x0447, 0x0455, 0x0470, 0x047c, 0x0488, 0x0498, - // Entry 40 - 7F - 0x04c3, 0x04cd, 0x04e7, 0x04f5, 0x0505, 0x0511, 0x052c, 0x053c, - 0x054a, 0x055a, 0x0575, 0x0575, 0x0581, 0x0589, 0x05aa, 0x05c0, - 0x05d9, 0x05eb, 0x05f5, 0x0614, 0x0622, 0x0630, 0x0651, 0x065d, - 0x0665, 0x0677, 0x0687, 0x0695, 0x06a3, 0x06b5, 0x06de, 0x06e8, - 0x072b, 0x073d, 0x0745, 0x075e, 0x076c, 0x0792, 0x07bd, 0x07cd, - 0x07dd, 0x07e7, 0x07f7, 0x0814, 0x0828, 0x0832, 0x083e, 0x0851, - 0x085d, 0x08a7, 0x08af, 0x08b7, 0x08c3, 0x08d1, 0x08db, 0x08e9, - 0x08f5, 0x08ff, 0x090b, 0x091f, 0x092d, 0x093d, 0x095a, 0x0979, - // Entry 80 - BF - 0x0994, 0x09ab, 0x09b7, 0x09d6, 0x09e8, 0x09f0, 0x09fa, 0x0a0f, - 0x0a25, 0x0a36, 0x0a46, 0x0a52, 0x0a64, 0x0a78, 0x0a88, 0x0a94, - 0x0aa0, 0x0aac, 0x0abe, 0x0acf, 0x0ae4, 0x0af8, 0x0b17, 0x0b2b, - 0x0b33, 0x0b50, 0x0b62, 0x0b81, 0x0bb1, 0x0bc1, 0x0bd7, 0x0be7, - 0x0bf1, 0x0c05, 0x0c13, 0x0c1f, 0x0c2d, 0x0c3d, 0x0c4d, 0x0c5d, - 0x0c7a, 0x0c84, 0x0c9f, 0x0caf, 0x0cc1, 0x0cd3, 0x0ce3, 0x0ced, - 0x0cf7, 0x0cff, 0x0d14, 0x0d1c, 0x0d28, 0x0d30, 0x0d57, 0x0d79, - 0x0d89, 0x0d99, 0x0da5, 0x0dc6, 0x0dd4, 0x0de7, 0x0e12, 0x0e28, - // Entry C0 - FF - 0x0e32, 0x0e42, 0x0e4c, 0x0e69, 0x0e77, 0x0e87, 0x0e93, 0x0e9f, - 0x0eab, 0x0ecc, 0x0eed, 0x0efb, 0x0f05, 0x0f13, 0x0f23, 0x0f3a, - 0x0f4c, 0x0f7d, 0x0f8d, 0x0fa4, 0x0fb7, 0x0fc5, 0x0fd5, 0x0fe3, - 0x0fe3, 0x1006, 0x1016, 0x1016, 0x1022, 0x1034, 0x1050, 0x1077, - 0x107d, 0x10af, 0x10b7, 0x10c5, 0x10d9, 0x10e7, 0x1100, 0x1118, - 0x1122, 0x112c, 0x1138, 0x1158, 0x1164, 0x1170, 0x1182, 0x1192, - 0x119e, 0x11c9, 0x11c9, 0x11f9, 0x1207, 0x121b, 0x1229, 0x1256, - 0x1268, 0x129c, 0x12c7, 0x12d7, 0x12e5, 0x130c, 0x1316, 0x1316, - // Entry 100 - 13F - 0x1320, 0x132c, 0x1357, 0x1365, 0x1375, 0x13ac, 0x13b4, 0x13c0, - 0x13f1, 0x140a, 0x141a, 0x1435, 0x1456, 0x1471, 0x148c, 0x14ab, - 0x14c2, 0x14d0, 0x14ed, 0x14f9, 0x1512, 0x1527, 0x1548, 0x155f, - 0x158c, 0x15a0, 0x15c7, 0x15db, 0x15e5, 0x1602, 0x161b, 0x1627, - 0x1642, 0x165d, 0x1678, 0x1697, + 0x01ee, 0x01fc, 0x0206, 0x0225, 0x0233, 0x023f, 0x024f, 0x0272, + 0x027e, 0x028a, 0x0294, 0x02a9, 0x02b7, 0x02cd, 0x02d7, 0x02e3, + 0x0309, 0x033d, 0x036a, 0x0374, 0x0386, 0x03a3, 0x03bc, 0x03c4, + 0x03d2, 0x03da, 0x03ec, 0x040b, 0x041d, 0x0425, 0x0448, 0x0456, + 0x0471, 0x047b, 0x0485, 0x0493, 0x04ae, 0x04ba, 0x04c6, 0x04d6, + // Entry 40 - 7F + 0x0501, 0x050b, 0x0525, 0x0533, 0x0543, 0x054f, 0x056a, 0x057a, + 0x0588, 0x0598, 0x05b3, 0x05c3, 0x05cf, 0x05d7, 0x05f8, 0x060e, + 0x0627, 0x0639, 0x0643, 0x066a, 0x0678, 0x0686, 0x06a7, 0x06b3, + 0x06bb, 0x06cd, 0x06dd, 0x06eb, 0x06f9, 0x070b, 0x072e, 0x0738, + 0x077b, 0x078d, 0x0795, 0x07ae, 0x07bc, 0x07df, 0x080a, 0x081a, + 0x082a, 0x0834, 0x0844, 0x0861, 0x0875, 0x087f, 0x088b, 0x089e, + 0x08aa, 0x08f4, 0x08fc, 0x0904, 0x0910, 0x091e, 0x0928, 0x0936, + 0x0942, 0x094c, 0x0958, 0x096c, 0x097a, 0x098a, 0x0996, 0x09c1, + // Entry 80 - BF + 0x09de, 0x09f5, 0x0a01, 0x0a20, 0x0a32, 0x0a3a, 0x0a44, 0x0a5b, + 0x0a71, 0x0a82, 0x0a92, 0x0a9e, 0x0ab0, 0x0ac4, 0x0ad2, 0x0ade, + 0x0aea, 0x0af6, 0x0b08, 0x0b19, 0x0b30, 0x0b44, 0x0b63, 0x0b77, + 0x0b7f, 0x0b8d, 0x0b9f, 0x0bbb, 0x0bed, 0x0bfd, 0x0c13, 0x0c23, + 0x0c2d, 0x0c41, 0x0c4f, 0x0c5b, 0x0c69, 0x0c79, 0x0c89, 0x0c99, + 0x0cb6, 0x0cc0, 0x0cdb, 0x0ceb, 0x0cfd, 0x0d0f, 0x0d1f, 0x0d29, + 0x0d33, 0x0d3b, 0x0d50, 0x0d58, 0x0d64, 0x0d6c, 0x0d93, 0x0db5, + 0x0dc5, 0x0dd5, 0x0de1, 0x0e02, 0x0e10, 0x0e22, 0x0e4d, 0x0e5d, + // Entry C0 - FF + 0x0e67, 0x0e77, 0x0e81, 0x0e9e, 0x0eac, 0x0ebc, 0x0ec8, 0x0ed4, + 0x0ee0, 0x0f01, 0x0f22, 0x0f30, 0x0f3a, 0x0f48, 0x0f58, 0x0f6f, + 0x0f81, 0x0fa6, 0x0fb6, 0x0fcd, 0x0fe0, 0x0fee, 0x0ffe, 0x100c, + 0x1021, 0x1046, 0x1056, 0x1056, 0x1062, 0x106c, 0x1088, 0x10af, + 0x10b5, 0x10e7, 0x10ef, 0x10fd, 0x1111, 0x111f, 0x1138, 0x1150, + 0x115a, 0x1164, 0x1170, 0x1190, 0x119c, 0x11a8, 0x11ba, 0x11ca, + 0x11d6, 0x1201, 0x1220, 0x1250, 0x125e, 0x1272, 0x1280, 0x12af, + 0x12c1, 0x12f7, 0x132b, 0x133b, 0x1349, 0x1363, 0x136d, 0x1379, + // Entry 100 - 13F + 0x1383, 0x138f, 0x13ba, 0x13c8, 0x13d8, 0x140f, 0x141b, 0x1427, + 0x1458, 0x1471, 0x1481, 0x149c, 0x14bd, 0x14d8, 0x14f5, 0x1514, + 0x152b, 0x1539, 0x1556, 0x1562, 0x157b, 0x1590, 0x15b1, 0x15c8, + 0x15f5, 0x1609, 0x1630, 0x1644, 0x164e, 0x166b, 0x1684, 0x1690, + 0x16ab, 0x16c8, 0x16e3, 0x16e3, 0x1702, }, }, { // ca caRegionStr, caRegionIdx, }, + { // ccp + "𑄃𑄳𑄠𑄥𑄴𑄥𑄬𑄚𑄴𑄥𑄧𑄚𑄴 𑄃𑄭𑄣𑄳𑄠𑄚𑄴𑄓𑄴𑄃𑄚𑄴𑄓𑄮𑄢𑄎𑄧𑄙 𑄃𑄢𑄧𑄝𑄴 𑄃𑄟𑄨𑄢𑄖𑄴𑄃𑄛𑄴𑄉𑄚𑄨𑄌𑄴𑄖𑄚𑄴𑄆𑄚𑄴𑄖𑄨𑄉𑄱 𑄃𑄮 𑄝𑄢𑄴𑄟𑄪" + + "𑄓𑄄𑄳𑄠𑄋𑄴𑄉𑄪𑄃𑄨𑄣𑄃𑄣𑄴𑄝𑄬𑄚𑄨𑄠𑄃𑄢𑄴𑄟𑄬𑄚𑄨𑄠𑄃𑄳𑄠𑄋𑄴𑄉𑄮𑄣𑄃𑄳𑄠𑄚𑄴𑄑𑄢𑄴𑄇𑄧𑄑𑄨𑄇𑄃𑄢𑄴𑄎𑄬𑄚𑄴𑄑𑄨𑄚𑄃𑄟𑄬𑄢𑄨𑄇𑄚" + + "𑄴 𑄥𑄟𑄮𑄠𑄃𑄧𑄌𑄴𑄑𑄳𑄢𑄨𑄠𑄃𑄌𑄴𑄑𑄳𑄢𑄬𑄣𑄨𑄠𑄃𑄢𑄪𑄝𑄃𑄣𑄚𑄴𑄓𑄧 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄳𑄠𑄃𑄎𑄢𑄴𑄝𑄭𑄎𑄚𑄴𑄝𑄧𑄥𑄴𑄚𑄨𑄠 𑄃" + + "𑄮 𑄦𑄢𑄴𑄎𑄬𑄉𑄮𑄞𑄨𑄚𑄝𑄢𑄴𑄝𑄘𑄮𑄌𑄴𑄝𑄁𑄣𑄘𑄬𑄌𑄴𑄝𑄬𑄣𑄴𑄎𑄨𑄠𑄟𑄴𑄝𑄪𑄢𑄴𑄇𑄨𑄚 𑄜𑄥𑄮𑄝𑄪𑄣𑄴𑄉𑄬𑄢𑄨𑄠𑄝𑄦𑄧𑄢𑄭𑄚𑄴𑄝𑄪" + + "𑄢𑄪𑄚𑄴𑄘𑄨𑄝𑄬𑄚𑄨𑄚𑄴𑄥𑄬𑄚𑄴𑄑𑄴 𑄝𑄢𑄴𑄗𑄬𑄣𑄨𑄟𑄨𑄝𑄢𑄴𑄟𑄪𑄓𑄝𑄳𑄢𑄪𑄚𑄬𑄭𑄝𑄧𑄣𑄨𑄞𑄨𑄠𑄇𑄳𑄠𑄢𑄨𑄝𑄨𑄠𑄚𑄴 𑄚𑄬𑄘𑄢𑄴𑄣" + + "𑄳𑄠𑄚𑄴𑄓𑄧𑄥𑄴𑄝𑄳𑄢𑄎𑄨𑄣𑄴𑄝𑄦𑄟 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄳𑄠𑄞𑄪𑄑𑄚𑄴𑄝𑄮𑄞𑄬𑄑𑄴 𑄞𑄨𑄘𑄳𑄠𑄝𑄧𑄖𑄴𑄥𑄮𑄠𑄚𑄝𑄬𑄣𑄢𑄪𑄌𑄴𑄝𑄬𑄣" + + "𑄨𑄎𑄴𑄇𑄚𑄓𑄇𑄮𑄇𑄮𑄌𑄴 (𑄇𑄨𑄣𑄨𑄁) 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄳𑄠𑄇𑄧𑄋𑄴𑄉𑄮-𑄚𑄨𑄇𑄴𑄥𑄥𑄟𑄧𑄖𑄴𑄙𑄳𑄠𑄧 𑄃𑄜𑄳𑄢𑄨𑄇𑄢𑄴𑄛𑄳𑄢" + + "𑄎𑄖𑄧𑄚𑄴𑄖𑄳𑄢𑄧𑄇𑄧𑄋𑄴𑄉𑄮-𑄝𑄳𑄢𑄎𑄞𑄨𑄣𑄴𑄥𑄭𑄪𑄎𑄢𑄴𑄣𑄳𑄠𑄚𑄴𑄓𑄴𑄃𑄭𑄞𑄧𑄢𑄨 𑄇𑄮𑄌𑄴𑄑𑄴𑄇𑄪𑄇𑄪 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄳" + + "𑄠𑄌𑄨𑄣𑄨𑄇𑄳𑄠𑄟𑄬𑄢𑄪𑄚𑄴𑄌𑄩𑄚𑄴𑄃𑄣𑄧𑄟𑄴𑄝𑄨𑄠𑄇𑄳𑄣𑄨𑄛𑄢𑄴𑄑𑄧𑄚𑄴 𑄃𑄭𑄣𑄳𑄠𑄚𑄳𑄓𑄴𑄇𑄮𑄥𑄳𑄑𑄢𑄨𑄇𑄇𑄨𑄃𑄪𑄝𑄇𑄬𑄛𑄴𑄞" + + "𑄢𑄴𑄘𑄬𑄇𑄨𑄃𑄪𑄢𑄥𑄃𑄮𑄇𑄳𑄢𑄨𑄥𑄴𑄟𑄥𑄴 𑄞𑄨𑄘𑄳𑄠𑄥𑄭𑄛𑄳𑄢𑄥𑄴𑄌𑄬𑄌𑄨𑄠𑄎𑄢𑄴𑄟𑄚𑄨𑄘𑄨𑄠𑄬𑄉𑄮 𑄉𑄢𑄴𑄥𑄨𑄠𑄎𑄨𑄝𑄪𑄖𑄨𑄓" + + "𑄬𑄚𑄴𑄟𑄢𑄴𑄇𑄧𑄓𑄮𑄟𑄨𑄚𑄨𑄇𑄓𑄮𑄟𑄨𑄚𑄨𑄇𑄚𑄴 𑄛𑄳𑄢𑄧𑄎𑄖𑄧𑄚𑄴𑄖𑄳𑄢𑄧𑄃𑄢𑄴𑄎𑄬𑄢𑄨𑄠𑄇𑄪𑄃𑄪𑄑 𑄃𑄳𑄃 𑄟𑄬𑄣𑄨𑄣𑄄𑄇𑄪𑄠" + + "𑄬𑄓𑄧𑄢𑄴𑄆𑄌𑄴𑄖𑄮𑄚𑄨𑄠𑄟𑄨𑄥𑄧𑄢𑄴𑄛𑄧𑄎𑄨𑄟𑄴 𑄥𑄦𑄢𑄄𑄢𑄨𑄖𑄳𑄢𑄨𑄠𑄥𑄳𑄛𑄬𑄚𑄴𑄃𑄨𑄜𑄨𑄃𑄮𑄛𑄨𑄠𑄄𑄃𑄪𑄢𑄮𑄛𑄩𑄠𑄧 𑄄𑄃𑄪" + + "𑄚𑄨𑄠𑄧𑄚𑄴𑄜𑄨𑄚𑄴𑄣𑄳𑄠𑄚𑄴𑄓𑄴𑄜𑄨𑄎𑄨𑄜𑄧𑄇𑄴𑄣𑄳𑄠𑄚𑄴𑄓𑄴 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄳𑄠𑄟𑄭𑄇𑄳𑄢𑄮𑄚𑄬𑄥𑄨𑄠𑄜𑄳𑄠𑄢𑄧𑄃𑄮 𑄉𑄭" + + " 𑄉𑄭 𑄞𑄨𑄘𑄳𑄠𑄜𑄳𑄢𑄚𑄴𑄥𑄴𑄉𑄳𑄠𑄝𑄧𑄚𑄴𑄎𑄧𑄙𑄢𑄬𑄌𑄴𑄎𑄮𑄉𑄳𑄢𑄬𑄚𑄓𑄎𑄧𑄢𑄴𑄎𑄨𑄠𑄜𑄧𑄢𑄥𑄩 𑄉𑄠𑄚𑄉𑄳𑄢𑄚𑄴𑄏𑄨𑄊𑄚𑄎𑄨𑄝𑄳𑄢" + + "𑄣𑄴𑄑𑄢𑄴𑄉𑄳𑄢𑄩𑄚𑄴𑄣𑄳𑄠𑄚𑄴𑄓𑄴𑄉𑄟𑄴𑄝𑄨𑄠𑄉𑄨𑄚𑄨𑄉𑄪𑄠𑄘𑄬𑄣𑄯𑄛𑄴𑄚𑄨𑄢𑄧𑄇𑄴𑄈𑄩𑄠𑄧 𑄉𑄨𑄚𑄨𑄉𑄳𑄢𑄨𑄌𑄴𑄘𑄧𑄉𑄨𑄚𑄴 " + + "𑄎𑄧𑄢𑄴𑄎𑄨𑄠 𑄃𑄮 𑄘𑄧𑄉𑄨𑄚𑄴 𑄥𑄳𑄠𑄚𑄴𑄓𑄃𑄪𑄃𑄨𑄌𑄴 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄳𑄠𑄉𑄪𑄠𑄖𑄬𑄟𑄣𑄉𑄪𑄠𑄟𑄴𑄉𑄨𑄚𑄨-𑄝𑄨𑄥𑄃𑄪𑄉" + + "𑄨𑄠𑄚𑄦𑄧𑄁𑄇𑄧𑄁 𑄆𑄌𑄴𑄃𑄬𑄃𑄢𑄴 𑄌𑄩𑄚𑄦𑄢𑄴𑄓𑄴 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄳𑄠 𑄃𑄳𑄃 𑄟𑄳𑄠𑄇𑄴𑄓𑄮𑄚𑄴𑄓𑄴 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘" + + "𑄳𑄠𑄦𑄪𑄚𑄴𑄓𑄪𑄢𑄥𑄴𑄇𑄳𑄢𑄮𑄠𑄬𑄥𑄨𑄠𑄦𑄭𑄖𑄨𑄦𑄧𑄋𑄴𑄉𑄬𑄢𑄨𑄇𑄳𑄠𑄚𑄢𑄨 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄳𑄠𑄄𑄚𑄴𑄘𑄮𑄚𑄬𑄥𑄨𑄠𑄃𑄠𑄢𑄴𑄣" + + "𑄳𑄠𑄚𑄴𑄓𑄴𑄄𑄎𑄴𑄢𑄠𑄬𑄣𑄴𑄃𑄭𑄣𑄴 𑄃𑄧𑄜𑄴 𑄟𑄳𑄠𑄚𑄴𑄞𑄢𑄧𑄖𑄴𑄝𑄳𑄢𑄨𑄑𑄨𑄌𑄴 𑄞𑄢𑄧𑄖𑄴 𑄟𑄧𑄦𑄥𑄉𑄧𑄢𑄨𑄠𑄧 𑄞𑄨𑄘𑄳𑄠" + + "𑄄𑄢𑄇𑄴𑄄𑄢𑄚𑄴𑄃𑄭𑄥𑄴𑄣𑄳𑄠𑄚𑄴𑄓𑄴𑄄𑄖𑄣𑄨𑄎𑄢𑄴𑄥𑄨𑄎𑄟𑄭𑄇𑄎𑄧𑄢𑄴𑄓𑄧𑄚𑄴𑄎𑄛𑄚𑄴𑄇𑄬𑄚𑄨𑄠𑄇𑄨𑄢𑄴𑄉𑄨𑄎𑄨𑄌𑄴𑄖𑄚𑄴𑄇𑄧𑄟" + + "𑄴𑄝𑄮𑄓𑄨𑄠𑄇𑄨𑄢𑄨𑄝𑄖𑄨𑄇𑄧𑄟𑄮𑄢𑄮𑄌𑄴𑄥𑄬𑄚𑄴𑄑𑄴 𑄇𑄨𑄑𑄴𑄥𑄴 𑄃𑄮 𑄚𑄬𑄞𑄨𑄌𑄴𑄅𑄪𑄖𑄴𑄖𑄮𑄢𑄴 𑄇𑄮𑄢𑄨𑄠𑄘𑄧𑄉𑄨𑄚𑄴 " + + "𑄇𑄮𑄢𑄨𑄠𑄇𑄪𑄠𑄬𑄖𑄴𑄇𑄬𑄟𑄳𑄠𑄚𑄴 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄳𑄠𑄇𑄎𑄈𑄌𑄴𑄖𑄚𑄴𑄣𑄃𑄮𑄌𑄴𑄣𑄬𑄝𑄚𑄧𑄚𑄴𑄥𑄬𑄚𑄴𑄑𑄴 𑄣𑄪𑄥𑄨𑄠𑄣𑄨𑄌" + + "𑄬𑄚𑄴𑄥𑄳𑄑𑄬𑄃𑄨𑄚𑄴𑄥𑄳𑄢𑄨𑄣𑄧𑄁𑄇𑄃𑄭𑄝𑄬𑄢𑄨𑄠𑄣𑄬𑄥𑄮𑄗𑄮𑄣𑄨𑄗𑄪𑄠𑄚𑄨𑄠𑄣𑄪𑄇𑄴𑄥𑄬𑄟𑄴𑄝𑄢𑄴𑄉𑄧𑄣𑄖𑄴𑄞𑄨𑄠𑄣𑄨𑄝𑄨𑄠𑄟" + + "𑄮𑄢𑄧𑄇𑄴𑄇𑄮𑄟𑄮𑄚𑄇𑄮𑄟𑄮𑄣𑄴𑄘𑄞𑄨𑄠𑄟𑄧𑄚𑄴𑄑𑄨𑄚𑄨𑄉𑄳𑄢𑄮𑄥𑄬𑄚𑄴𑄑𑄴 𑄟𑄢𑄴𑄑𑄨𑄚𑄴𑄟𑄘𑄉𑄌𑄴𑄇𑄢𑄴𑄟𑄢𑄴𑄥𑄣𑄴 𑄉𑄭 𑄉" + + "𑄭 𑄞𑄨𑄘𑄳𑄠𑄟𑄳𑄠𑄥𑄓𑄮𑄚𑄨𑄠𑄟𑄣𑄨𑄟𑄠𑄚𑄴𑄟𑄢𑄴 (𑄝𑄢𑄴𑄟)𑄟𑄧𑄋𑄴𑄉𑄮𑄣𑄨𑄠𑄟𑄳𑄠𑄇𑄃𑄮 𑄆𑄌𑄴𑄃𑄬𑄃𑄢𑄴 𑄌𑄩𑄚𑄅𑄪𑄖𑄴" + + "𑄖𑄮𑄉𑄎𑄢𑄴 𑄟𑄢𑄨𑄠𑄚 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄳𑄠𑄟𑄢𑄴𑄑𑄨𑄚𑄨𑄇𑄴𑄟𑄧𑄢𑄨𑄖𑄚𑄨𑄠𑄟𑄧𑄚𑄴𑄑𑄴𑄥𑄬𑄢𑄑𑄴𑄟𑄣𑄴𑄑𑄟𑄧𑄢𑄨𑄥𑄥𑄴𑄟𑄣" + + "𑄴𑄘𑄨𑄛𑄴𑄟𑄣𑄃𑄪𑄃𑄨𑄟𑄬𑄇𑄴𑄥𑄨𑄇𑄮𑄟𑄣𑄴𑄠𑄬𑄥𑄨𑄠𑄟𑄮𑄎𑄟𑄴𑄝𑄨𑄇𑄴𑄚𑄟𑄨𑄝𑄨𑄠𑄚𑄱 𑄇𑄳𑄠𑄣𑄬𑄓𑄮𑄚𑄨𑄠𑄚𑄭𑄎𑄢𑄴𑄚𑄨𑄢𑄴𑄜" + + "𑄮𑄇𑄴 𑄞𑄨𑄘𑄳𑄠𑄚𑄭𑄎𑄬𑄢𑄨𑄠𑄚𑄨𑄇𑄢𑄉𑄪𑄠𑄚𑄬𑄘𑄢𑄴𑄣𑄳𑄠𑄚𑄴𑄓𑄴𑄥𑄴𑄚𑄧𑄢𑄴𑄃𑄮𑄠𑄬𑄚𑄬𑄛𑄣𑄴𑄚𑄃𑄪𑄢𑄪𑄚𑄨𑄃𑄪𑄠𑄬𑄚𑄨𑄃𑄪" + + "𑄎𑄨𑄣𑄳𑄠𑄚𑄴𑄓𑄴𑄃𑄮𑄟𑄚𑄴𑄛𑄚𑄟𑄛𑄬𑄢𑄪𑄜𑄧𑄢𑄥𑄩 𑄛𑄧𑄣𑄨𑄚𑄬𑄥𑄨𑄠𑄛𑄛𑄪𑄠 𑄚𑄨𑄃𑄪 𑄉𑄨𑄚𑄨𑄜𑄨𑄣𑄨𑄛𑄭𑄚𑄴𑄛𑄇𑄨𑄌𑄴𑄖𑄚" + + "𑄴𑄛𑄮𑄣𑄳𑄠𑄚𑄴𑄓𑄴𑄥𑄬𑄚𑄴𑄑𑄴 𑄛𑄨𑄠𑄬𑄢𑄴 𑄃𑄮 𑄟𑄨𑄢𑄪𑄠𑄬𑄣𑄧𑄚𑄴𑄛𑄨𑄇𑄴𑄇𑄬𑄠𑄢𑄴𑄚𑄴 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄳𑄠𑄛𑄪𑄠𑄬𑄢" + + "𑄴𑄖𑄮 𑄢𑄨𑄇𑄮𑄜𑄨𑄣𑄨𑄌𑄴𑄖𑄨𑄚𑄴 𑄎𑄉𑄊𑄚𑄨𑄛𑄧𑄢𑄴𑄖𑄪𑄉𑄣𑄴𑄛𑄣𑄃𑄪𑄛𑄳𑄠𑄢𑄉𑄪𑄠𑄬𑄇𑄖𑄢𑄴𑄃𑄅𑄪𑄑𑄣𑄭𑄚𑄨𑄁 𑄃𑄮𑄥𑄚𑄨𑄠" + + "𑄢𑄨𑄃𑄨𑄃𑄪𑄚𑄨𑄠𑄧𑄚𑄴𑄢𑄮𑄟𑄚𑄨𑄠𑄥𑄢𑄴𑄝𑄨𑄠𑄢𑄥𑄨𑄠𑄢𑄪𑄠𑄚𑄴𑄓𑄥𑄯𑄘𑄨 𑄃𑄢𑄧𑄝𑄴𑄥𑄧𑄣𑄮𑄟𑄚𑄴 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄳𑄠𑄥𑄨" + + "𑄥𑄨𑄣𑄨𑄥𑄪𑄘𑄚𑄴𑄥𑄭𑄪𑄓𑄬𑄚𑄴𑄥𑄨𑄋𑄴𑄉𑄛𑄪𑄢𑄴𑄥𑄬𑄚𑄴𑄑𑄴 𑄦𑄬𑄣𑄬𑄚𑄥𑄳𑄣𑄮𑄞𑄚𑄨𑄠𑄥𑄣𑄴𑄝𑄢𑄴𑄓𑄴 𑄃𑄮 𑄎𑄚𑄴 𑄟𑄬𑄠𑄬" + + "𑄚𑄴𑄥𑄳𑄣𑄮𑄞𑄇𑄨𑄠𑄥𑄨𑄠𑄬𑄢𑄣𑄨𑄃𑄮𑄚𑄴𑄥𑄚𑄴 𑄟𑄢𑄨𑄚𑄮𑄥𑄬𑄚𑄬𑄉𑄣𑄴𑄥𑄮𑄟𑄣𑄨𑄠𑄥𑄪𑄢𑄨𑄚𑄟𑄴𑄘𑄧𑄉𑄨𑄚𑄴 𑄥𑄪𑄘𑄚𑄴𑄥𑄃𑄮" + + "𑄑𑄟 𑄃𑄮 𑄛𑄳𑄢𑄨𑄚𑄴𑄥𑄨𑄛𑄨𑄆𑄣𑄴 𑄥𑄣𑄴𑄞𑄬𑄘𑄧𑄢𑄴𑄥𑄨𑄚𑄴𑄑𑄴 𑄟𑄢𑄴𑄑𑄬𑄚𑄴𑄥𑄨𑄢𑄨𑄠𑄥𑄮𑄠𑄎𑄨𑄣𑄳𑄠𑄚𑄴𑄓𑄴𑄑𑄳𑄢𑄌𑄴" + + "𑄑𑄚𑄴 𑄓 𑄇𑄪𑄚𑄴𑄦𑄖𑄪𑄢𑄴𑄇𑄧𑄌𑄴 𑄃𑄮 𑄇𑄭𑄇𑄮𑄌𑄴 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄳𑄠𑄌𑄘𑄴𑄜𑄢𑄥𑄩 𑄘𑄧𑄉𑄨𑄚𑄧 𑄎𑄉𑄑𑄮𑄉𑄮𑄗𑄭𑄣" + + "𑄳𑄠𑄚𑄴𑄓𑄴𑄖𑄎𑄨𑄇𑄴𑄥𑄳𑄗𑄚𑄴𑄑𑄮𑄇𑄬𑄣𑄃𑄪𑄖𑄨𑄟𑄪𑄢𑄴-𑄣𑄬𑄌𑄴𑄖𑄬𑄖𑄪𑄢𑄴𑄇𑄧𑄟𑄬𑄚𑄨𑄌𑄴𑄖𑄚𑄴𑄖𑄨𑄃𑄪𑄚𑄨𑄥𑄨𑄠𑄑𑄮𑄋𑄴𑄉" + + "𑄖𑄪𑄢𑄧𑄌𑄴𑄇𑄧𑄖𑄳𑄢𑄨𑄚𑄨𑄚𑄘𑄴 𑄃𑄮 𑄑𑄮𑄝𑄳𑄠𑄉𑄮𑄑𑄪𑄞𑄣𑄪𑄖𑄭𑄤𑄚𑄴𑄖𑄚𑄴𑄎𑄚𑄨𑄠𑄃𑄨𑄃𑄪𑄇𑄳𑄢𑄬𑄚𑄴𑄅𑄉𑄚𑄴𑄓𑄎𑄧𑄙𑄢𑄬" + + "𑄌𑄴𑄎𑄮𑄢𑄴 𑄦𑄭𑄇𑄪𑄢𑄬 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄳𑄠𑄎𑄘𑄨𑄥𑄧𑄁𑄊𑄧𑄟𑄢𑄴𑄇𑄨𑄚𑄴 𑄎𑄧𑄙𑄢𑄬𑄌𑄴𑄎𑄮𑄅𑄪𑄢𑄪𑄉𑄪𑄠𑄬𑄅𑄪𑄎𑄴𑄝𑄬𑄇" + + "𑄨𑄌𑄴𑄖𑄚𑄴𑄞𑄳𑄠𑄑𑄨𑄇𑄚𑄴 𑄥𑄨𑄑𑄨𑄥𑄬𑄚𑄴𑄑𑄴 𑄞𑄨𑄚𑄴𑄥𑄬𑄚𑄴𑄑𑄴 𑄃𑄮 𑄘𑄳𑄠 𑄉𑄳𑄢𑄬𑄚𑄓𑄨𑄚𑄴𑄥𑄴𑄞𑄬𑄚𑄬𑄎𑄪𑄠𑄬𑄣𑄝" + + "𑄳𑄢𑄨𑄑𑄨𑄌𑄴 𑄞𑄢𑄴𑄎𑄨𑄚𑄴 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄳𑄠𑄟𑄢𑄴𑄇𑄨𑄚𑄴 𑄎𑄧𑄙𑄢𑄬𑄌𑄴𑄎𑄮𑄢𑄴 𑄞𑄢𑄴𑄎𑄨𑄚𑄴 𑄉𑄭 𑄉𑄭 𑄞𑄨𑄘𑄳" + + "𑄠𑄞𑄨𑄠𑄬𑄖𑄴𑄚𑄟𑄴𑄞𑄚𑄪𑄠𑄑𑄪𑄤𑄣𑄨𑄌𑄴 𑄃𑄮 𑄜𑄪𑄑𑄪𑄚𑄥𑄟𑄮𑄠𑄇𑄧𑄥𑄮𑄞𑄮𑄃𑄨𑄠𑄬𑄟𑄬𑄚𑄴𑄟𑄠𑄮𑄖𑄴𑄖𑄬𑄘𑄧𑄉𑄨𑄚𑄴 𑄃𑄜𑄳" + + "𑄢𑄨𑄇𑄎𑄟𑄴𑄝𑄨𑄠𑄎𑄨𑄟𑄴𑄝𑄝𑄪𑄠𑄬𑄃𑄨𑄌𑄨𑄚𑄴 𑄎𑄉𑄛𑄨𑄖𑄴𑄗𑄨𑄟𑄨𑄃𑄜𑄳𑄢𑄨𑄇𑄅𑄪𑄖𑄴𑄖𑄮𑄢𑄴 𑄃𑄟𑄬𑄢𑄨𑄇𑄘𑄨𑄉𑄨𑄚𑄴 𑄃𑄟" + + "𑄬𑄢𑄨𑄇𑄃𑄮𑄥𑄨𑄠𑄚𑄨𑄠𑄛𑄧𑄏𑄨𑄟𑄴 𑄃𑄜𑄳𑄢𑄨𑄇𑄟𑄧𑄖𑄴𑄙𑄳𑄠 𑄃𑄜𑄳𑄢𑄨𑄇𑄛𑄪𑄇𑄴𑄘𑄩 𑄃𑄜𑄳𑄢𑄨𑄇𑄅𑄪𑄖𑄴𑄖𑄮𑄢𑄴 𑄃𑄜𑄳𑄢" + + "𑄨𑄇𑄟𑄧𑄖𑄴𑄙𑄳𑄠𑄧 𑄃𑄜𑄳𑄢𑄨𑄇𑄘𑄧𑄉𑄨𑄚𑄴 𑄃𑄜𑄳𑄢𑄨𑄇 𑄎𑄉𑄃𑄟𑄬𑄢𑄨𑄇𑄥𑄴𑄅𑄪𑄖𑄴𑄖𑄮𑄢𑄴 𑄎𑄉𑄢𑄴 𑄃𑄟𑄬𑄢𑄨𑄇𑄇𑄳𑄠𑄢" + + "𑄝𑄨𑄠𑄚𑄴𑄛𑄪𑄉𑄬𑄘𑄩 𑄃𑄬𑄥𑄨𑄠𑄘𑄧𑄉𑄨𑄚𑄬 𑄃𑄬𑄥𑄨𑄠𑄘𑄧𑄉𑄨𑄚𑄴 𑄛𑄪𑄇𑄴 𑄃𑄬𑄥𑄨𑄠𑄘𑄧𑄉𑄨𑄚𑄴 𑄄𑄃𑄪𑄢𑄮𑄛𑄴𑄃𑄧𑄌𑄴𑄑" + + "𑄳𑄢𑄣𑄬𑄥𑄨𑄠𑄟𑄳𑄠𑄣𑄬𑄚𑄬𑄥𑄨𑄠𑄟𑄭𑄇𑄳𑄢𑄮𑄚𑄬𑄥𑄨𑄠 𑄎𑄉𑄛𑄧𑄣𑄨𑄚𑄬𑄥𑄨𑄠𑄃𑄬𑄥𑄨𑄠𑄟𑄧𑄖𑄴𑄙𑄳𑄠𑄧 𑄃𑄬𑄥𑄨𑄠𑄛𑄧𑄎𑄨𑄟𑄴" + + " 𑄃𑄬𑄥𑄨𑄠𑄄𑄃𑄪𑄢𑄮𑄛𑄴𑄛𑄪𑄉𑄬𑄘𑄨 𑄄𑄃𑄪𑄢𑄮𑄛𑄴𑄅𑄪𑄖𑄴𑄖𑄮𑄢𑄴 𑄄𑄃𑄪𑄢𑄮𑄛𑄴𑄛𑄧𑄎𑄨𑄟𑄴 𑄄𑄃𑄪𑄢𑄮𑄛𑄴𑄣𑄳𑄠𑄑𑄨𑄚𑄴 𑄃𑄟𑄬" + + "𑄢𑄨𑄇", + []uint16{ // 293 elements + // Entry 0 - 3F + 0x0000, 0x0059, 0x0071, 0x00ab, 0x00d7, 0x0115, 0x013d, 0x015d, + 0x017d, 0x019d, 0x01d1, 0x01f9, 0x022a, 0x024e, 0x0276, 0x0286, + 0x02c5, 0x02e9, 0x0337, 0x0357, 0x0373, 0x0397, 0x03c0, 0x03e4, + 0x0400, 0x0420, 0x0438, 0x0475, 0x048d, 0x04a9, 0x04c5, 0x0526, + 0x0542, 0x0575, 0x0589, 0x05b6, 0x05d6, 0x05f2, 0x060a, 0x0616, + 0x066c, 0x069d, 0x070e, 0x0747, 0x077b, 0x07ac, 0x07e3, 0x07f3, + 0x0817, 0x0827, 0x0847, 0x0898, 0x08b8, 0x08cc, 0x08f0, 0x0910, + 0x0949, 0x0965, 0x0979, 0x0991, 0x09c2, 0x09da, 0x09fe, 0x0a1a, + // Entry 40 - 7F + 0x0a73, 0x0a93, 0x0ac9, 0x0aed, 0x0b0d, 0x0b25, 0x0b4a, 0x0b6a, + 0x0b82, 0x0ba6, 0x0bef, 0x0bef, 0x0c1b, 0x0c2b, 0x0c7e, 0x0caa, + 0x0ced, 0x0d09, 0x0d25, 0x0d49, 0x0d61, 0x0d7d, 0x0d9e, 0x0dba, + 0x0dc2, 0x0dea, 0x0e1e, 0x0e36, 0x0e46, 0x0e6a, 0x0ea3, 0x0ebb, + 0x0f6a, 0x0f86, 0x0f9a, 0x0fbf, 0x0fcf, 0x1015, 0x10b1, 0x10d5, + 0x10f9, 0x1109, 0x1129, 0x1168, 0x1190, 0x11bc, 0x11dc, 0x1212, + 0x1226, 0x1299, 0x12a9, 0x12b9, 0x12e5, 0x12f5, 0x1309, 0x1319, + 0x1339, 0x1349, 0x135d, 0x1391, 0x13b5, 0x13d1, 0x13f1, 0x1444, + // Entry 80 - BF + 0x1479, 0x14a6, 0x14be, 0x1501, 0x1521, 0x1535, 0x1551, 0x157e, + 0x15b6, 0x15d6, 0x15f2, 0x160a, 0x162a, 0x165e, 0x1676, 0x168a, + 0x16aa, 0x16be, 0x16de, 0x170e, 0x1743, 0x1763, 0x17a2, 0x17c6, + 0x17d2, 0x1801, 0x1825, 0x186b, 0x18cf, 0x18f3, 0x1913, 0x193f, + 0x194f, 0x196b, 0x1987, 0x199f, 0x19bf, 0x19df, 0x1a03, 0x1a1b, + 0x1a4c, 0x1a60, 0x1a95, 0x1ab1, 0x1acd, 0x1b05, 0x1b25, 0x1b39, + 0x1b4d, 0x1b65, 0x1b99, 0x1bad, 0x1bb9, 0x1bc9, 0x1c02, 0x1c34, + 0x1c54, 0x1c74, 0x1c98, 0x1cfb, 0x1d4e, 0x1d7f, 0x1dbc, 0x1de0, + // Entry C0 - FF + 0x1df0, 0x1e10, 0x1e20, 0x1e5d, 0x1e8d, 0x1ea5, 0x1ebd, 0x1ecd, + 0x1ee5, 0x1f0a, 0x1f4d, 0x1f65, 0x1f79, 0x1f95, 0x1fb9, 0x1fe6, + 0x2006, 0x2055, 0x2075, 0x20a1, 0x20c2, 0x20de, 0x20f6, 0x2112, + 0x213f, 0x2185, 0x21b6, 0x21eb, 0x21ff, 0x222f, 0x2269, 0x22d2, + 0x22de, 0x2310, 0x2320, 0x2344, 0x236c, 0x2388, 0x23b9, 0x23f5, + 0x2419, 0x242d, 0x244d, 0x2497, 0x24ab, 0x24bf, 0x24db, 0x2503, + 0x2517, 0x2583, 0x25a3, 0x25e4, 0x2604, 0x2638, 0x2669, 0x26ed, + 0x2711, 0x2775, 0x2802, 0x2826, 0x283e, 0x2870, 0x2880, 0x2898, + // Entry 100 - 13F + 0x28b8, 0x28d4, 0x2905, 0x291d, 0x2941, 0x2962, 0x2982, 0x299a, + 0x29d3, 0x2a04, 0x2a24, 0x2a55, 0x2a8a, 0x2abb, 0x2af4, 0x2b2d, + 0x2b67, 0x2b87, 0x2bd1, 0x2bf5, 0x2c22, 0x2c4f, 0x2c8d, 0x2cc2, + 0x2cf2, 0x2d1a, 0x2d4f, 0x2d73, 0x2d87, 0x2dbc, 0x2de9, 0x2e05, + 0x2e3a, 0x2e77, 0x2eac, 0x2eac, 0x2ee1, + }, + }, { // ce - "Айъадаларан гӀайреАндорраӀарбийн Цхьанатоьхна ЭмираташОвхӀан-пачхьалкхАн" + - "тигуа а, Барбуда аАнгильяАлбаниЭрмалойчоьАнголаАнтарктидаАргентинаА" + - "мерикан СамоаАвстриАвстралиАрубаАландан гӀайренашАзербайджанБосни а" + - ", Герцеговина аБарбадосБангладешБельгиБуркина- ФасоБолгариБахрейнБур" + - "ундиБенинСен-БартельмиБермудан гӀайренашБруней-ДаруссаламБоливиБонэ" + - "йр, Синт-Эстатиус а, Саба аБразилиБагаман гӀайренашБутанБувен гӀайр" + - "еБотсванаБелоруссиБелизКанадаКокосийн гӀайренашДемократин Республик" + - "а КонгоЮккъерчу Африкин РеспубликаРеспублика КонгоШвейцариКот-Д’иву" + - "арКукан гӀайренашЧилиКамерунКитайКолумбиКлиппертонКоста-РикаКубаКаб" + - "о-ВердеКюрасаоГӀайре ӏиса пайхӏамар вина деКипрЧехиГерманиДиего-Гар" + - "сиДжибутиДаниДоминикаДоминикан РеспубликаАлжирСеута а, Мелилья аЭкв" + - "адорЭстониМисарМалхбузен СаьхьараЭритрейИспаниЭфиопиЕвробартФинлянд" + - "иФиджиФолклендан гӀайренашМикронезин Федеративни штаташФарерийн гӀа" + - "йренашФранциГабонЙоккха БританиГренадаГуьржийчоьФранцузийн ГвианаГе" + - "рнсиГанаГибралтарГренландиГамбиГвинейГваделупаЭкваторан ГвинейГреци" + - "Къилба Джорджи а, Къилба Гавайн гӀайренаш аГватемалаГуамГвиней-Биса" + - "уГайанаГонконг (ша-къаьстина кӀошт)Херд гӀайре а, Макдональд гӀайре" + - "наш аГондурасХорватиГаитиВенгриКанаран гӀайренашИндонезиИрландиИзра" + - "ильМэн гӀайреИндиБританин латта Индин океанехьӀиракъГӀажарийчоьИсла" + - "ндиИталиДжерсиЯмайкаУрданЯпониКениКиргизиКамбоджаКирибатиКоморашСен" + - "т-Китс а, Невис аКъилбаседа КорейКъилба КорейКувейтКайман гӀайренаш" + - "КазахстанЛаосЛиванСент-ЛюсиЛихтенштейнШри-ЛанкаЛибериЛесотоЛитваЛюк" + - "сембургЛатвиЛивиМароккоМонакоМолдавиӀаьржаламанхойчоьСен-МартенМада" + - "гаскарМаршаллан гӀайренашМакедониМалиМьянма (Бирма)МонголиМакао (ша" + - "-къаьстина кӀошт)Къилбаседа Марианан гӀайренашМартиникаМавританиМонт" + - "серратМальтаМаврикиМальдивашМалавиМексикаМалайзиМозамбикНамибиКерла" + - " КаледониНигерНорфолк гӀайреНигериНикарагуаНидерландашНорвегиНепалНа" + - "уруНиуэКерла ЗеландиОманПанамаПеруФранцузийн ПолинезиПапуа — Керла " + - "ГвинейФилиппинашПакистанПольшаСен-Пьер а, Микелон аПиткэрн гӀайрена" + - "шПуэрто-РикоПалестинан латтанашПортугалиПалауПарагвайКатарАрахьара " + - "ОкеаниРеюньонРумыниСербиРоссиРуандаСаӀудийн АравиСоломонан гӀайрена" + - "шСейшелан гӀайренашСуданШвециСингапурСийлахьчу Еленин гӀайреСловени" + - "Шпицберген а, Ян-Майен аСловакиСьерра- ЛеонеСан-МариноСенегалСомали" + - "СуринамКъилба СуданСан-Томе а, Принсипи аСальвадорСинт-МартенШемаСв" + - "азилендТристан-да- КуньяТёркс а, Кайкос а гӀайренашЧадФранцузийн къ" + - "илба латтанашТогоТаиландТаджикистанТокелауМалхбален ТиморТуркмениТу" + - "нисТонгаТуркойчоьТринидад а, Тобаго аТувалуТайваньТанзаниУкраинаУга" + - "ндаАЦШн арахьара кегийн гӀайренашЦхьанатоьхна ШтаташУругвайУзбекист" + - "анВатиканСент-Винсент а, Гренадинаш аВенесуэлаВиргинийн гӀайренаш (" + - "Британи)Виргинийн гӀайренаш (АЦШ)ВьетнамВануатуУоллис а, Футуна аСа" + - "моаКосовоЙеменМайоттаКъилба-Африкин РеспубликаЗамбиЗимбабвеЙоьвзуш " + - "йоцу регионДерригдуьненанАфрикаКъилбаседа АмерикаКъилба АмерикаОкеа" + - "ниМалхбузен АфрикаЮккъера АмерикаМалхбален АфрикаКъилбаседа АфрикаЮ" + - "ккъера АфрикаКъилба АфрикаКъилбаседа а, къилба а АмерикаКъилбаседа " + - "Америка – АЦШ а, Канада аКарибашЮккъера АзиКъилба АзиКъилба-малхбал" + - "ен АзиКъилба ЕвропаАвстралазиМеланезиМикронезиПолинезиАзиЮккъера Ма" + - "лхбалеЮккъера а, Гергара а МалхбалеЕвропаМалхбален ЕвропаКъилбаседа" + - " ЕвропаМалхбузен ЕвропаЛатинан Америка", - []uint16{ // 292 elements - // Entry 0 - 3F - 0x0000, 0x0023, 0x0031, 0x0069, 0x0088, 0x00ac, 0x00ba, 0x00c6, - 0x00da, 0x00e6, 0x00fa, 0x010c, 0x0127, 0x0133, 0x0143, 0x014d, - 0x016e, 0x0184, 0x01ac, 0x01bc, 0x01ce, 0x01da, 0x01f2, 0x0200, - 0x020e, 0x021c, 0x0226, 0x023f, 0x0262, 0x0283, 0x028f, 0x02c6, - 0x02d4, 0x02f5, 0x02ff, 0x0316, 0x0326, 0x0338, 0x0342, 0x034e, - 0x0371, 0x03a5, 0x03d9, 0x03f8, 0x0408, 0x041e, 0x043b, 0x0443, - 0x0451, 0x045b, 0x0469, 0x047d, 0x0490, 0x0498, 0x04ab, 0x04b9, - 0x04ef, 0x04f7, 0x04ff, 0x050d, 0x0522, 0x0530, 0x0538, 0x0548, - // Entry 40 - 7F - 0x056f, 0x0579, 0x0599, 0x05a7, 0x05b3, 0x05bd, 0x05e0, 0x05ee, - 0x05fa, 0x0606, 0x0616, 0x0616, 0x0626, 0x0630, 0x0657, 0x068f, - 0x06b2, 0x06be, 0x06c8, 0x06e3, 0x06f1, 0x0705, 0x0726, 0x0732, - 0x073a, 0x074c, 0x075e, 0x0768, 0x0774, 0x0786, 0x07a5, 0x07af, - 0x07fe, 0x0810, 0x0818, 0x082f, 0x083b, 0x086e, 0x08b2, 0x08c2, - 0x08d0, 0x08da, 0x08e6, 0x0907, 0x0917, 0x0925, 0x0933, 0x0946, - 0x094e, 0x0985, 0x0991, 0x09a7, 0x09b5, 0x09bf, 0x09cb, 0x09d7, - 0x09e1, 0x09eb, 0x09f3, 0x0a01, 0x0a11, 0x0a21, 0x0a2f, 0x0a52, - // Entry 80 - BF - 0x0a71, 0x0a88, 0x0a94, 0x0ab3, 0x0ac5, 0x0acd, 0x0ad7, 0x0ae8, - 0x0afe, 0x0b0f, 0x0b1b, 0x0b27, 0x0b31, 0x0b45, 0x0b4f, 0x0b57, - 0x0b65, 0x0b71, 0x0b7f, 0x0ba1, 0x0bb4, 0x0bc8, 0x0bed, 0x0bfd, - 0x0c05, 0x0c1e, 0x0c2c, 0x0c5b, 0x0c93, 0x0ca5, 0x0cb7, 0x0ccb, - 0x0cd7, 0x0ce5, 0x0cf7, 0x0d03, 0x0d11, 0x0d1f, 0x0d2f, 0x0d3b, - 0x0d56, 0x0d60, 0x0d7b, 0x0d87, 0x0d99, 0x0daf, 0x0dbd, 0x0dc7, - 0x0dd1, 0x0dd9, 0x0df2, 0x0dfa, 0x0e06, 0x0e0e, 0x0e33, 0x0e59, - 0x0e6d, 0x0e7d, 0x0e89, 0x0eae, 0x0ecf, 0x0ee4, 0x0f09, 0x0f1b, - // Entry C0 - FF - 0x0f25, 0x0f35, 0x0f3f, 0x0f5c, 0x0f6a, 0x0f76, 0x0f80, 0x0f8a, - 0x0f96, 0x0fb1, 0x0fd6, 0x0ff9, 0x1003, 0x100d, 0x101d, 0x1049, - 0x1057, 0x1082, 0x1090, 0x10a8, 0x10bb, 0x10c9, 0x10d5, 0x10e3, - 0x10fa, 0x1121, 0x1133, 0x1148, 0x1150, 0x1162, 0x1181, 0x11b2, - 0x11b8, 0x11ea, 0x11f2, 0x1200, 0x1216, 0x1224, 0x1241, 0x1251, - 0x125b, 0x1265, 0x1277, 0x129b, 0x12a7, 0x12b5, 0x12c3, 0x12d1, - 0x12dd, 0x1316, 0x1316, 0x133b, 0x1349, 0x135d, 0x136b, 0x139e, - 0x13b0, 0x13e6, 0x1414, 0x1422, 0x1430, 0x1450, 0x145a, 0x1466, - // Entry 100 - 13F - 0x1470, 0x147e, 0x14ae, 0x14b8, 0x14c8, 0x14ec, 0x1508, 0x1514, - 0x1537, 0x1552, 0x155e, 0x157d, 0x159a, 0x15b9, 0x15da, 0x15f5, - 0x160e, 0x1645, 0x1687, 0x1695, 0x16aa, 0x16bd, 0x16e3, 0x16fc, - 0x1710, 0x1720, 0x1732, 0x1742, 0x1748, 0x1767, 0x179c, 0x17a8, - 0x17c7, 0x17e8, 0x1807, 0x1824, + "Айъадаларан гӀайреАндорраӀарбийн Цхьанатоьхна ЭмираташОвхӀан мохкАнтигуа" + + " а, Барбуда аАнгильяАлбаниЭрмалойчоьАнголаАнтарктидаАргентинаАмерика" + + "н СамоаАвстриАвстралиАрубаАландан гӀайренашАзербайджанБосни а, Герц" + + "еговина аБарбадосБангладешБельгиБуркина- ФасоБолгариБахрейнБурундиБ" + + "енинСен-БартельмиБермудан гӀайренашБруней-ДаруссаламБоливиБонэйр, С" + + "инт-Эстатиус а, Саба аБразилиБагаман гӀайренашБутанБувен гӀайреБотс" + + "ванаБелоруссиБелизКанадаКокосийн гӀайренашДемократин Республика Кон" + + "гоЮккъерчу Африкин РеспубликаКонго - БраззавильШвейцариКот-Д’ивуарК" + + "укан гӀайренашЧилиКамерунЦийчоьКолумбиКлиппертонКоста-РикаКубаКабо-" + + "ВердеКюрасаоГӀайре ӏиса пайхӏамар вина деКипрЧехиГерманиДиего-Гарси" + + "ДжибутиДаниДоминикаДоминикан РеспубликаАлжирСеута а, Мелилья аЭквад" + + "орЭстониМисарМалхбузен СаьхьараЭритрейИспаниЭфиопиЕвробартеврозонаФ" + + "инляндиФиджиФолклендан гӀайренашМикронезин Федеративни штаташФарери" + + "йн гӀайренашФранциГабонЙоккха БританиГренадаГуьржийчоьФранцузийн Гв" + + "ианаГернсиГанаГибралтарГренландиГамбиГвинейГваделупаЭкваторан Гвине" + + "йГрециКъилба Джорджи а, Къилба Гавайн гӀайренаш аГватемалаГуамГвине" + + "й-БисауГайанаГонконг (ша-къаьстина кӀошт)Херд гӀайре а, Макдональд " + + "гӀайренаш аГондурасХорватиГаитиВенгриКанаран гӀайренашИндонезиИрлан" + + "диИзраильМэн гӀайреХӀиндиБританин латта Индин океанехьӀиракъГӀажари" + + "йчоьИсландиИталиДжерсиЯмайкаУрданЯпониКениКиргизиКамбоджаКирибатиКо" + + "морашСент-Китс а, Невис аКъилбаседа КорейКъилба КорейКувейтКайман г" + + "ӀайренашКхазакхстанЛаосЛиванСент-ЛюсиЛихтенштейнШри-ЛанкаЛибериЛесо" + + "тоЛитваЛюксембургЛатвиЛивиМароккоМонакоМолдавиӀаьржаламанчоьСен-Мар" + + "тенМадагаскарМаршаллан гӀайренашМакедониМалиМьянма (Бирма)МонголиМа" + + "као (ша-къаьстина кӀошт)Къилбаседа Марианан гӀайренашМартиникаМаври" + + "таниМонтсерратМальтаМаврикиМальдивашМалавиМексикаМалайзиМозамбикНам" + + "ибиКерла КаледониНигерНорфолк гӀайреНигериНикарагуаНидерландашНорве" + + "гиНепалНауруНиуэКерла ЗеландиӀоманПанамаПеруФранцузийн ПолинезиПапу" + + "а — Керла ГвинейФилиппинашПакистанПольшаСен-Пьер а, Микелон аПиткэр" + + "н гӀайренашПуэрто-РикоПалестӀинан латтанашПортугалиПалауПарагвайКат" + + "арАрахьара ОкеаниРеюньонРумыниСербиРоссиРуандаСаӀудийн ӀаьрбийчоьСо" + + "ломонан гӀайренашСейшелан гӀайренашСуданШвециСингапурСийлахьчу Елен" + + "ин гӀайреСловениШпицберген а, Ян-Майен аСловакиСьерра- ЛеонеСан-Мар" + + "иноСенегалСомалиСуринамКъилба СуданСан-Томе а, Принсипи аСальвадорС" + + "инт-МартенШемаСвазилендТристан-да- КуньяТёркс а, Кайкос а гӀайренаш" + + "ЧадФранцузийн къилба латтанашТогоТаиландТаджикистанТокелауМалхбален" + + " ТиморТуркмениТунисТонгаТуркойчоьТринидад а, Тобаго аТувалуТайваньТа" + + "нзаниУкраинаУгандаАЦШн арахьара кегийн гӀайренашВовшахкхетта Къаьмн" + + "ийн ОрганизациЦхьанатоьхна ШтаташУругвайУзбекистанВатиканСент-Винсе" + + "нт а, Гренадинаш аВенесуэлаВиргинийн гӀайренаш (Британи)Виргинийн г" + + "Ӏайренаш (АЦШ)ВьетнамВануатуУоллис а, Футуна аСамоаКосовоЙеменМайот" + + "таКъилба-Африкин РеспубликаЗамбиЗимбабвеЙоьвзуш йоцу регионДерригду" + + "ьненанАфрикаКъилбаседа АмерикаКъилба АмерикаОкеаниМалхбузен АфрикаЮ" + + "ккъера АмерикаМалхбален АфрикаКъилбаседа АфрикаЮккъера АфрикаКъилба" + + " АфрикаКъилбаседа а, къилба а АмерикаКъилбаседа Америка – АЦШ а, Кан" + + "ада аКарибашЮккъера АзиКъилба АзиКъилба-малхбален АзиКъилба ЕвропаА" + + "встралазиМеланезиМикронезиПолинезиАзиЮккъера МалхбалеЮккъера а, Гер" + + "гара а МалхбалеЕвропаМалхбален ЕвропаКъилбаседа ЕвропаМалхбузен Евр" + + "опаЛатинан Америка", + []uint16{ // 293 elements + // Entry 0 - 3F + 0x0000, 0x0023, 0x0031, 0x0069, 0x007e, 0x00a2, 0x00b0, 0x00bc, + 0x00d0, 0x00dc, 0x00f0, 0x0102, 0x011d, 0x0129, 0x0139, 0x0143, + 0x0164, 0x017a, 0x01a2, 0x01b2, 0x01c4, 0x01d0, 0x01e8, 0x01f6, + 0x0204, 0x0212, 0x021c, 0x0235, 0x0258, 0x0279, 0x0285, 0x02bc, + 0x02ca, 0x02eb, 0x02f5, 0x030c, 0x031c, 0x032e, 0x0338, 0x0344, + 0x0367, 0x039b, 0x03cf, 0x03f0, 0x0400, 0x0416, 0x0433, 0x043b, + 0x0449, 0x0455, 0x0463, 0x0477, 0x048a, 0x0492, 0x04a5, 0x04b3, + 0x04e9, 0x04f1, 0x04f9, 0x0507, 0x051c, 0x052a, 0x0532, 0x0542, + // Entry 40 - 7F + 0x0569, 0x0573, 0x0593, 0x05a1, 0x05ad, 0x05b7, 0x05da, 0x05e8, + 0x05f4, 0x0600, 0x0610, 0x0620, 0x0630, 0x063a, 0x0661, 0x0699, + 0x06bc, 0x06c8, 0x06d2, 0x06ed, 0x06fb, 0x070f, 0x0730, 0x073c, + 0x0744, 0x0756, 0x0768, 0x0772, 0x077e, 0x0790, 0x07af, 0x07b9, + 0x0808, 0x081a, 0x0822, 0x0839, 0x0845, 0x0878, 0x08bc, 0x08cc, + 0x08da, 0x08e4, 0x08f0, 0x0911, 0x0921, 0x092f, 0x093d, 0x0950, + 0x095c, 0x0993, 0x099f, 0x09b5, 0x09c3, 0x09cd, 0x09d9, 0x09e5, + 0x09ef, 0x09f9, 0x0a01, 0x0a0f, 0x0a1f, 0x0a2f, 0x0a3d, 0x0a60, + // Entry 80 - BF + 0x0a7f, 0x0a96, 0x0aa2, 0x0ac1, 0x0ad7, 0x0adf, 0x0ae9, 0x0afa, + 0x0b10, 0x0b21, 0x0b2d, 0x0b39, 0x0b43, 0x0b57, 0x0b61, 0x0b69, + 0x0b77, 0x0b83, 0x0b91, 0x0bad, 0x0bc0, 0x0bd4, 0x0bf9, 0x0c09, + 0x0c11, 0x0c2a, 0x0c38, 0x0c67, 0x0c9f, 0x0cb1, 0x0cc3, 0x0cd7, + 0x0ce3, 0x0cf1, 0x0d03, 0x0d0f, 0x0d1d, 0x0d2b, 0x0d3b, 0x0d47, + 0x0d62, 0x0d6c, 0x0d87, 0x0d93, 0x0da5, 0x0dbb, 0x0dc9, 0x0dd3, + 0x0ddd, 0x0de5, 0x0dfe, 0x0e08, 0x0e14, 0x0e1c, 0x0e41, 0x0e67, + 0x0e7b, 0x0e8b, 0x0e97, 0x0ebc, 0x0edd, 0x0ef2, 0x0f19, 0x0f2b, + // Entry C0 - FF + 0x0f35, 0x0f45, 0x0f4f, 0x0f6c, 0x0f7a, 0x0f86, 0x0f90, 0x0f9a, + 0x0fa6, 0x0fcb, 0x0ff0, 0x1013, 0x101d, 0x1027, 0x1037, 0x1063, + 0x1071, 0x109c, 0x10aa, 0x10c2, 0x10d5, 0x10e3, 0x10ef, 0x10fd, + 0x1114, 0x113b, 0x114d, 0x1162, 0x116a, 0x117c, 0x119b, 0x11cc, + 0x11d2, 0x1204, 0x120c, 0x121a, 0x1230, 0x123e, 0x125b, 0x126b, + 0x1275, 0x127f, 0x1291, 0x12b5, 0x12c1, 0x12cf, 0x12dd, 0x12eb, + 0x12f7, 0x1330, 0x1370, 0x1395, 0x13a3, 0x13b7, 0x13c5, 0x13f8, + 0x140a, 0x1440, 0x146e, 0x147c, 0x148a, 0x14aa, 0x14b4, 0x14c0, + // Entry 100 - 13F + 0x14ca, 0x14d8, 0x1508, 0x1512, 0x1522, 0x1546, 0x1562, 0x156e, + 0x1591, 0x15ac, 0x15b8, 0x15d7, 0x15f4, 0x1613, 0x1634, 0x164f, + 0x1668, 0x169f, 0x16e1, 0x16ef, 0x1704, 0x1717, 0x173d, 0x1756, + 0x176a, 0x177a, 0x178c, 0x179c, 0x17a2, 0x17c1, 0x17f6, 0x1802, + 0x1821, 0x1842, 0x1861, 0x1861, 0x187e, }, }, { // cgg @@ -33724,32 +35764,33 @@ var regionHeaders = [252]header{ "ᏇᎵᏥᎥᎻᏋᎩᎾ ᏩᏐᏊᎵᎨᎵᎠᏆᎭᎴᎢᏂᏋᎷᏂᏗᏆᏂᎢᏂᎤᏓᏅᏘ ᏆᏕᎳᎻᏆᏊᏓᏊᎾᎢᏉᎵᏫᎠᎧᎵᏈᎢᏂᎯ ᎾᏍᎩᏁᏛᎳᏂᏆᏏᎵᎾ" + "ᏍᎩ ᏆᎭᎹᏍᏊᏔᏂᏊᏪ ᎤᎦᏚᏛᎢᏆᏣᏩᎾᏇᎳᎷᏍᏇᎵᏍᎨᎾᏓᎪᎪᏍ (ᎩᎵᏂ) ᏚᎦᏚᏛᎢᎧᏂᎪ - ᎨᏂᏝᏌᎬᎿᎨᏍᏛ ᎠᏰᏟ" + " ᏍᎦᏚᎩᎧᏂᎪ - ᏆᏌᏩᎵᏍᏫᏍᎢᏬᎵ ᎾᎿ ᎠᎹᏳᎶᏗᎠᏓᏍᏓᏴᎲᏍᎩ ᏚᎦᏚᏛᎢᏥᎵᎧᎹᎷᏂᏓᎶᏂᎨᏍᏛᎪᎸᎻᏈᎢᎠᎦᏂᏴᏔᏅᎣ" + - "ᏓᎸ ᎤᎦᏚᏛᎢᎪᏍᏓ ᎵᎧᎫᏆᎢᎬᎾᏕᎾ ᎢᏤᏳᏍᏗᎫᎳᎨᎣᏓᏂᏍᏓᏲᎯᎲ ᎤᎦᏚᏛᎢᏌᎢᏆᏍᏤᎩ ᏍᎦᏚᎩᎠᏂᏛᏥᏗᏰᎪ ᎦᏏᏯ" + - "ᏥᏊᏗᏗᏂᎹᎦᏙᎻᏂᎧᏙᎻᏂᎧᏂ ᏍᎦᏚᎩᎠᎵᏥᎵᏯᏑᏔ ᎠᎴ ᎺᎵᏯᎡᏆᏙᎵᎡᏍᏙᏂᏯᎢᏥᏈᎢᏭᏕᎵᎬ ᏗᏜ ᏌᎮᎳᎡᎵᏟᏯᎠᏂᏍ" + - "ᏆᏂᏱᎢᏗᎣᏈᎠᏳᎳᏛ ᎠᏂᎤᎾᏓᏡᎬᏫᏂᎦᏙᎯᏫᏥᏩᎩ ᏚᎦᏚᏛᎢᎹᎢᏉᏂᏏᏯᏪᎶ ᏚᎦᏚᏛᎢᎦᎸᏥᏱᎦᏉᏂᎩᎵᏏᏲᏋᎾᏓᏣᎠᏥᎢ" + - "ᎠᏂᎦᎸᏥ ᎩᎠᎬᏂᏏᎦᎠᎾᏥᏆᎵᏓᎢᏤᏍᏛᏱᎦᎹᏈᎢᎠᎩᎢᏂᏩᏓᎷᏇᎡᏆᏙᎵᎠᎵ ᎩᎢᏂᎪᎢᎯᏧᎦᏃᏮ ᏣᎠᏥᎢ ᎠᎴ ᎾᏍᎩ Ꮷ" + - "ᎦᏃᏮ ᎠᏍᏛᎭᏟ ᏚᎦᏚᏛᎢᏩᏔᎹᎳᏆᎻᎩᎢᏂ-ᏈᏌᎤᏫᎦᏯᎾᎰᏂᎩ ᎪᏂᎩ ᎤᏓᏤᎵᏓ ᏧᏂᎸᏫᏍᏓᏁᏗ ᎢᎬᎾᏕᎾ ᏓᎶᏂᎨᏍ" + - "ᏛᎲᏗ ᎤᎦᏚᏛᎢ ᎠᎴ ᎺᎩᏓᎾᎵᏗ ᏚᎦᏚᏛᎢᎭᏂᏚᎳᏍᎧᎶᎡᏏᎠᎮᎢᏘᎲᏂᎦᎵᏥᏍᏆ ᏚᎦᏚᏛᎢᎢᏂᏙᏂᏍᏯᎠᏲᎳᏂᎢᏏᎵᏱᎤ" + - "ᏍᏗ ᎤᎦᏚᏛᎢ ᎾᎿ ᎠᏍᎦᏯᎢᏅᏗᎾᏈᏗᏏ ᏴᏫᏯ ᎠᎺᏉ ᎢᎬᎾᏕᏅᎢᎳᎩᎢᎴᏂᏧᏁᏍᏓᎸᎯᎢᏔᎵᏨᎵᏏᏣᎺᎢᎧᏦᏓᏂᏣᏩᏂᏏ" + - "ᎨᏂᏯᎩᎵᏣᎢᏍᎧᎹᏉᏗᎠᏂᎧᎵᏆᏘᎪᎼᎳᏍᎤᏓᏅᏘ ᎨᏘᏏ ᎠᎴ ᏁᏪᏏᏧᏴᏢ ᎪᎵᎠᏧᎦᏃᏮ ᎪᎵᎠᎫᏪᎢᏘᎨᎢᎹᏂ ᏚᎦᏚᏛᎢ" + - "ᎧᏎᎧᏍᏕᏂᎴᎣᏍᎴᏆᎾᏂᎤᏓᏅᏘ ᎷᏏᏯᎵᎦᏗᏂᏍᏓᏂᏍᎵ ᎳᏂᎧᎳᏈᎵᏯᎴᏐᏙᎵᏗᏪᏂᎠᎸᎧᏎᏋᎩᎳᏘᏫᎠᎵᏈᏯᎼᎶᎪᎹᎾᎪᎹᎵ" + - "ᏙᏫᎠᎼᏂᏔᏁᎦᎶᎤᏓᏅᏘ ᏡᏡᎹᏓᎦᏍᎧᎵᎹᏌᎵ ᏚᎦᏚᏛᎢᎹᏎᏙᏂᏯᎹᎵᎹᏯᎹᎵᎹᏂᎪᎵᎠᎹᎧᎣ (ᎤᏓᏤᎵᏓ ᏧᏂᎸᏫᏍᏓᏁᏗ" + - " ᎢᎬᎾᏕᎾ) ᏣᎢᏧᏴᏢ ᏗᏜ ᎹᎵᎠᎾ ᏚᎦᏚᏛᎢᎹᏘᏂᎨᎹᏘᎢᏯᎹᏂᏘᏌᎳᏗᎹᎵᏔᎼᎵᏏᎥᏍᎹᎵᏗᏫᏍᎹᎳᏫᎠᏂᏍᏆᏂᎹᎴᏏᎢᎠᎼ" + - "ᏎᎻᏇᎩᎾᎻᏈᎢᏯᎢᏤ ᎧᎵᏙᏂᎠᏂᎾᎢᏨᏃᎵᏬᎵᎩ ᎤᎦᏚᏛᎢᏂᏥᎵᏯᏂᎧᎳᏆᏁᏛᎳᏂᏃᏪᏁᏆᎵᏃᎤᎷᏂᏳᎢᏤ ᏏᎢᎴᏂᏗᎣᎺᏂᏆ" + - "ᎾᎹᏇᎷᎠᏂᎦᎸᏥ ᏆᎵᏂᏏᎠᏆᏇ ᎢᏤ ᎩᎢᏂᎠᏂᏈᎵᎩᏃᏆᎩᏍᏖᏂᏉᎳᏂᎤᏓᏅᏘ ᏈᏰ ᎠᎴ ᎻᏇᎶᏂᏈᎧᎵᏂ ᏚᎦᏚᏛᎢᏇᎡᏙ" + - " ᎵᎢᎪᏆᎴᏍᏗᏂᎠᏂ ᏄᎬᏫᏳᏌᏕᎩᏉᏥᎦᎳᏆᎴᎠᏫᏆᎳᏇᎢᏯᎧᏔᎵᎠᏍᏛ ᎣᏏᏰᏂᎠᎴᏳᏂᎠᏂᎶᎹᏂᏯᏒᏈᏯᏲᏂᎢᎶᏩᏂᏓᏌᎤᏗ Ꭱ" + - "ᎴᏈᎠᏐᎶᎹᏂ ᏚᎦᏚᏛᎢᏏᎡᏥᎵᏍᏑᏕᏂᏍᏫᏕᏂᏏᏂᎦᏉᎵᎤᏓᏅᏘ ᎮᎵᎾᏍᎶᏫᏂᎠᏍᏩᎵᏆᎵᏗ ᎠᎴ ᏤᏂ ᎹᏰᏂᏍᎶᏩᎩᎠᏏᎡ" + - "Ꮃ ᎴᎣᏂᎤᏓᏅᏘ ᎹᎵᎢᏃᏏᏂᎦᎵᏐᎹᎵᏒᎵᎾᎻᏧᎦᎾᏮ ᏑᏕᏂᏌᎣ ᏙᎺ ᎠᎴ ᏈᏂᏏᏇᎡᎵᏌᎵᏆᏙᎵᏏᏂᏘ ᎹᏘᏂᏏᎵᎠᎠᏂᏍ" + - "ᏩᏏᎢᏟᏍᏛᏂ Ꮣ ᎫᎾᎭᎠᏂᏛᎵᎩ ᎠᎴ ᎨᎢᎪ ᏚᎦᏚᏛᎢᏣᏗᎠᏂᎦᎸᏥ ᏧᎦᎾᏮ ᎦᏙᎯ ᎤᎵᏍᏛᎢᏙᎪᏔᏯᎴᏂᏔᏥᎩᏍᏕᏂᏙ" + - "ᎨᎳᏭᏘᎼᎵ-ᎴᏍᏖᏛᎵᎩᎺᏂᏍᏔᏂᏚᏂᏏᏍᎠᏙᏅᎦᎬᏃᏟᏂᏕᏗ ᎠᎴ ᏙᏆᎪᏚᏩᎷᏔᎢᏩᏂᏖᏂᏏᏂᏯᏳᎧᎴᏂᏳᎦᏂᏓU.S. ᎠᏍ" + - "Ꮫ ᏚᎦᏚᏛᎢᏌᏊ ᎢᏳᎾᎵᏍᏔᏅ ᏍᎦᏚᎩᏳᎷᏇᎤᏍᏇᎩᏍᏖᏂᎠᏥᎳᏁᏠ ᎦᏚᎲᎤᏓᏅᏘ ᏫᏂᏏᏂᏗ ᎠᎴ ᎾᏍᎩ ᏇᎾᏗᏁᏍᏪᏁ" + - "ᏑᏪᎳᏈᏗᏍ ᎠᏒᏂᎸ ᏂᎨᏒᎾ ᏚᎦᏚᏛᎢU.S. ᎠᏒᏂᎸ ᏂᎨᏒᎾ ᏚᎦᏚᏛᎢᏫᎡᏘᎾᎻᏩᏂᎤᏩᏚᏩᎵᏍ ᎠᎴ ᏊᏚᎾᏌᎼᎠᎪ" + - "ᏐᏉᏰᎺᏂᎺᏯᏖᏧᎦᎾᏮ ᎬᎿᎨᏍᏛᏌᎻᏈᏯᏏᎻᏆᏇᏄᏬᎵᏍᏛᎾ ᎤᏔᏂᏗᎦᏙᎯᎡᎶᎯᎬᎿᎨᏍᏛᏧᏴᏢ ᎠᎹᏰᏟᏧᎦᏃᏮ ᎠᎺᎵᎦᎣ" + - "ᏏᏰᏂᎠᏭᏕᎵᎬ ᏗᏜ ᎬᎿᎨᏍᏛᎠᏰᏟ ᎠᎹᏰᏟᏗᎧᎸᎬ ᏗᏜ ᎬᎿᎨᏍᏛᏧᏴᏢ ᏗᏜ ᎬᎿᎨᏍᏛᎠᏰᏟ ᎬᎿᎨᏍᏛᏧᎦᎾᏮ ᏗᏜ" + - " ᎬᎿᎨᏍᏛᎠᎺᎵᎦᎢᏧᏴᏢ ᏗᏜ ᎠᎹᏰᏟᎨᏆᏙᏯᏗᎧᎸᎬ ᏗᏜ ᏓᎶᏂᎨᏍᏛᏧᎦᎾᏮ ᏗᏜ ᏓᎶᏂᎨᏍᏛᏧᎦᎾᏮ ᏗᎧᎸᎬ ᏓᎶᏂᎨ" + - "ᏍᏛᏧᎦᎾᏮ ᏗᏜ ᏳᎳᏛᎠᏍᏔᎴᏏᎠᎺᎳᏁᏏᎠᎠᏰᏟ ᏧᎾᎵᎪᎯ ᎾᎿ ᎹᎢᏉᏂᏏᏯ ᎢᎬᎾᏕᎾᏆᎵᏂᏏᎠᏓᎶᎾᎨᏍᏛᎠᏰᏟ ᏓᎶ" + - "ᏂᎨᏍᏛᏭᏕᎵᎬ ᏗᏜ ᏓᎶᏂᎨᏍᏛᏳᎳᏛᏗᎧᎸᎬ ᏗᏜ ᏳᎳᏛᏧᏴᏢ ᏗᏜ ᏳᎳᏛᏭᏕᎵᎬ ᏗᏜ ᏳᎳᏛᎳᏘᏂ ᎠᎹᏰᏟ", - []uint16{ // 292 elements + "ᏓᎸ ᎤᎦᏚᏛᎢᎪᏍᏓ ᎵᎧᎫᏆᎢᎬᎾᏕᎾ ᎢᏤᏳᏍᏗᎫᎳᎨᎣᏓᏂᏍᏓᏲᎯᎲ ᎤᎦᏚᏛᎢᏌᎢᏆᏍᏤᎩᎠᎠᏂᏛᏥᏗᏰᎪ ᎦᏏᏯᏥᏊᏗᏗ" + + "ᏂᎹᎦᏙᎻᏂᎧᏙᎻᏂᎧᏂ ᏍᎦᏚᎩᎠᎵᏥᎵᏯᏑᏔ ᎠᎴ ᎺᎵᏯᎡᏆᏙᎵᎡᏍᏙᏂᏯᎢᏥᏈᎢᏭᏕᎵᎬ ᏗᏜ ᏌᎮᎳᎡᎵᏟᏯᎠᏂᏍᏆᏂᏱᎢ" + + "ᏗᎣᏈᎠᏳᎳᏛ ᎠᏂᎤᎾᏓᏡᎬᏳᎶᎠᏍᏓᏅᏅᏫᏂᎦᏙᎯᏫᏥᏩᎩ ᏚᎦᏚᏛᎢᎹᎢᏉᏂᏏᏯᏪᎶ ᏚᎦᏚᏛᎢᎦᎸᏥᏱᎦᏉᏂᎩᎵᏏᏲᏋᎾᏓᏣ" + + "ᎠᏥᎢᎠᏂᎦᎸᏥ ᎩᎠᎬᏂᏏᎦᎠᎾᏥᏆᎵᏓᎢᏤᏍᏛᏱᎦᎹᏈᎢᎠᎩᎢᏂᏩᏓᎷᏇᎡᏆᏙᎵᎠᎵ ᎩᎢᏂᎪᎢᎯᏧᎦᏃᏮ ᏣᎠᏥᎢ ᎠᎴ ᎾᏍ" + + "Ꭹ ᏧᎦᏃᏮ ᎠᏍᏛᎭᏟ ᏚᎦᏚᏛᎢᏩᏔᎹᎳᏆᎻᎩᎢᏂ-ᏈᏌᎤᏫᎦᏯᎾᎰᏂᎩ ᎪᏂᎩ ᎤᏓᏤᎵᏓ ᏧᏂᎸᏫᏍᏓᏁᏗ ᎢᎬᎾᏕᎾ ᏓᎶ" + + "ᏂᎨᏍᏛᎲᏗ ᎤᎦᏚᏛᎢ ᎠᎴ ᎺᎩᏓᎾᎵᏗ ᏚᎦᏚᏛᎢᎭᏂᏚᎳᏍᎧᎶᎡᏏᎠᎮᎢᏘᎲᏂᎦᎵᏥᏍᏆ ᏚᎦᏚᏛᎢᎢᏂᏙᏂᏍᏯᎠᏲᎳᏂᎢᏏ" + + "ᎵᏱᎤᏍᏗ ᎤᎦᏚᏛᎢ ᎾᎿ ᎠᏍᎦᏯᎢᏅᏗᎾᏈᏗᏏ ᏴᏫᏯ ᎠᎺᏉ ᎢᎬᎾᏕᏅᎢᎳᎩᎢᎴᏂᏧᏁᏍᏓᎸᎯᎢᏔᎵᏨᎵᏏᏣᎺᎢᎧᏦᏓᏂᏣ" + + "ᏩᏂᏏᎨᏂᏯᎩᎵᏣᎢᏍᎧᎹᏉᏗᎠᏂᎧᎵᏆᏘᎪᎼᎳᏍᎤᏓᏅᏘ ᎨᏘᏏ ᎠᎴ ᏁᏪᏏᏧᏴᏢ ᎪᎵᎠᏧᎦᏃᏮ ᎪᎵᎠᎫᏪᎢᏘᎨᎢᎹᏂ ᏚᎦ" + + "ᏚᏛᎢᎧᏎᎧᏍᏕᏂᎴᎣᏍᎴᏆᎾᏂᎤᏓᏅᏘ ᎷᏏᏯᎵᎦᏗᏂᏍᏓᏂᏍᎵ ᎳᏂᎧᎳᏈᎵᏯᎴᏐᏙᎵᏗᏪᏂᎠᎸᎧᏎᏋᎩᎳᏘᏫᎠᎵᏈᏯᎼᎶᎪᎹᎾ" + + "ᎪᎹᎵᏙᏫᎠᎼᏂᏔᏁᎦᎶᎤᏓᏅᏘ ᏡᏡᎹᏓᎦᏍᎧᎵᎹᏌᎵ ᏚᎦᏚᏛᎢᎹᏎᏙᏂᏯᎹᎵᎹᏯᎹᎵᎹᏂᎪᎵᎠᎹᎧᎣ (ᎤᏓᏤᎵᏓ ᏧᏂᎸᏫᏍ" + + "ᏓᏁᏗ ᎢᎬᎾᏕᎾ) ᏣᎢᏧᏴᏢ ᏗᏜ ᎹᎵᎠᎾ ᏚᎦᏚᏛᎢᎹᏘᏂᎨᎹᏘᎢᏯᎹᏂᏘᏌᎳᏗᎹᎵᏔᎼᎵᏏᎥᏍᎹᎵᏗᏫᏍᎹᎳᏫᎠᏂᏍᏆᏂᎹ" + + "ᎴᏏᎢᎠᎼᏎᎻᏇᎩᎾᎻᏈᎢᏯᎢᏤ ᎧᎵᏙᏂᎠᏂᎾᎢᏨᏃᎵᏬᎵᎩ ᎤᎦᏚᏛᎢᏂᏥᎵᏯᏂᎧᎳᏆᏁᏛᎳᏂᏃᏪᏁᏆᎵᏃᎤᎷᏂᏳᎢᏤ ᏏᎢᎴᏂ" + + "ᏗᎣᎺᏂᏆᎾᎹᏇᎷᎠᏂᎦᎸᏥ ᏆᎵᏂᏏᎠᏆᏇ ᎢᏤ ᎩᎢᏂᎠᏂᏈᎵᎩᏃᏆᎩᏍᏖᏂᏉᎳᏂᎤᏓᏅᏘ ᏈᏰ ᎠᎴ ᎻᏇᎶᏂᏈᎧᎵᏂ ᏚᎦᏚ" + + "ᏛᎢᏇᎡᏙ ᎵᎢᎪᏆᎴᏍᏗᏂᎠᏂ ᏄᎬᏫᏳᏌᏕᎩᏉᏥᎦᎳᏆᎴᎠᏫᏆᎳᏇᎢᏯᎧᏔᎵᎠᏍᏛ ᎣᏏᏰᏂᎠᎴᏳᏂᎠᏂᎶᎹᏂᏯᏒᏈᏯᏲᏂᎢᎶᏩ" + + "ᏂᏓᏌᎤᏗ ᎡᎴᏈᎠᏐᎶᎹᏂ ᏚᎦᏚᏛᎢᏏᎡᏥᎵᏍᏑᏕᏂᏍᏫᏕᏂᏏᏂᎦᏉᎵᎤᏓᏅᏘ ᎮᎵᎾᏍᎶᏫᏂᎠᏍᏩᎵᏆᎵᏗ ᎠᎴ ᏤᏂ ᎹᏰᏂ" + + "ᏍᎶᏩᎩᎠᏏᎡᎳ ᎴᎣᏂᎤᏓᏅᏘ ᎹᎵᎢᏃᏏᏂᎦᎵᏐᎹᎵᏒᎵᎾᎻᏧᎦᎾᏮ ᏑᏕᏂᏌᎣ ᏙᎺ ᎠᎴ ᏈᏂᏏᏇᎡᎵᏌᎵᏆᏙᎵᏏᏂᏘ ᎹᏘ" + + "ᏂᏏᎵᎠᎠᏂᏍᏩᏏᎢᏟᏍᏛᏂ Ꮣ ᎫᎾᎭᎠᏂᏛᎵᎩ ᎠᎴ ᎨᎢᎪ ᏚᎦᏚᏛᎢᏣᏗᎠᏂᎦᎸᏥ ᏧᎦᎾᏮ ᎦᏙᎯ ᎤᎵᏍᏛᎢᏙᎪᏔᏯᎴᏂ" + + "ᏔᏥᎩᏍᏕᏂᏙᎨᎳᏭᏘᎼᎵ-ᎴᏍᏖᏛᎵᎩᎺᏂᏍᏔᏂᏚᏂᏏᏍᎠᏔᏂᎪᎬᏃᏟᏂᏕᏗ ᎠᎴ ᏙᏆᎪᏚᏩᎷᏔᎢᏩᏂᏖᏂᏏᏂᏯᏳᎧᎴᏂᏳᎦᏂᏓ" + + "U.S. ᎠᏍᏛ ᏚᎦᏚᏛᎢᏌᏊ ᎢᏳᎾᎵᏍᏔᏅ ᎠᏰᎵ ᏚᎾᏙᏢᏒᏌᏊ ᎢᏳᎾᎵᏍᏔᏅ ᏍᎦᏚᎩᏳᎷᏇᎤᏍᏇᎩᏍᏖᏂᎠᏥᎳᏁᏠ ᎦᏚᎲ" + + "ᎤᏓᏅᏘ ᏫᏂᏏᏂᏗ ᎠᎴ ᎾᏍᎩ ᏇᎾᏗᏁᏍᏪᏁᏑᏪᎳᏈᏗᏍ ᎠᏒᏂᎸ ᏂᎨᏒᎾ ᏚᎦᏚᏛᎢU.S. ᎠᏒᏂᎸ ᏂᎨᏒᎾ ᏚᎦᏚᏛ" + + "ᎢᏫᎡᏘᎾᎻᏩᏂᎤᏩᏚᏩᎵᏍ ᎠᎴ ᏊᏚᎾᏌᎼᎠᎪᏐᏉᏰᎺᏂᎺᏯᏖᏧᎦᎾᏮ ᎬᎿᎨᏍᏛᏌᎻᏈᏯᏏᎻᏆᏇᏄᏬᎵᏍᏛᎾ ᎤᏔᏂᏗᎦᏙᎯᎡ" + + "ᎶᎯᎬᎿᎨᏍᏛᏧᏴᏢ ᎠᎹᏰᏟᏧᎦᏃᏮ ᎠᎺᎵᎦᎣᏏᏰᏂᎠᏭᏕᎵᎬ ᏗᏜ ᎬᎿᎨᏍᏛᎠᏰᏟ ᎠᎹᏰᏟᏗᎧᎸᎬ ᏗᏜ ᎬᎿᎨᏍᏛᏧᏴᏢ" + + " ᏗᏜ ᎬᎿᎨᏍᏛᎠᏰᏟ ᎬᎿᎨᏍᏛᏧᎦᎾᏮ ᏗᏜ ᎬᎿᎨᏍᏛᎠᎺᎵᎦᎢᏧᏴᏢ ᏗᏜ ᎠᎹᏰᏟᎨᏆᏙᏯᏗᎧᎸᎬ ᏗᏜ ᏓᎶᏂᎨᏍᏛᏧᎦᎾ" + + "Ꮾ ᏗᏜ ᏓᎶᏂᎨᏍᏛᏧᎦᎾᏮ ᏗᎧᎸᎬ ᏓᎶᏂᎨᏍᏛᏧᎦᎾᏮ ᏗᏜ ᏳᎳᏛᎠᏍᏔᎴᏏᎠᎺᎳᏁᏏᎠᎠᏰᏟ ᏧᎾᎵᎪᎯ ᎾᎿ ᎹᎢᏉᏂ" + + "ᏏᏯ ᎢᎬᎾᏕᎾᏆᎵᏂᏏᎠᏓᎶᎾᎨᏍᏛᎠᏰᏟ ᏓᎶᏂᎨᏍᏛᏭᏕᎵᎬ ᏗᏜ ᏓᎶᏂᎨᏍᏛᏳᎳᏛᏗᎧᎸᎬ ᏗᏜ ᏳᎳᏛᏧᏴᏢ ᏗᏜ ᏳᎳ" + + "ᏛᏭᏕᎵᎬ ᏗᏜ ᏳᎳᏛᎳᏘᏂ ᎠᎹᏰᏟ", + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0022, 0x002e, 0x0064, 0x0079, 0x0093, 0x009f, 0x00ae, 0x00bd, 0x00c9, 0x00d8, 0x00ea, 0x0100, 0x010c, 0x0118, 0x0121, @@ -33758,109 +35799,109 @@ var regionHeaders = [252]header{ 0x0247, 0x025d, 0x0266, 0x027c, 0x0288, 0x0294, 0x029d, 0x02a6, 0x02cb, 0x02e3, 0x0309, 0x0321, 0x032a, 0x034a, 0x0372, 0x0378, 0x0384, 0x0396, 0x03a8, 0x03d0, 0x03e0, 0x03e6, 0x0405, 0x0411, - 0x0436, 0x0442, 0x0455, 0x0461, 0x0474, 0x047d, 0x0489, 0x0495, - // Entry 40 - 7F - 0x04b1, 0x04c0, 0x04d7, 0x04e3, 0x04f2, 0x04fe, 0x051b, 0x0527, - 0x0539, 0x0548, 0x0567, 0x0567, 0x0576, 0x057c, 0x0592, 0x05a4, - 0x05ba, 0x05c6, 0x05cf, 0x05db, 0x05e4, 0x05f0, 0x0606, 0x060f, - 0x0618, 0x0624, 0x0633, 0x0642, 0x064b, 0x0657, 0x0673, 0x067c, - 0x06d3, 0x06df, 0x06e5, 0x06fb, 0x0704, 0x0763, 0x07a3, 0x07b2, - 0x07c1, 0x07ca, 0x07d6, 0x07ef, 0x0801, 0x080d, 0x0819, 0x0846, - 0x0852, 0x087f, 0x0888, 0x0891, 0x08a3, 0x08ac, 0x08b5, 0x08c1, - 0x08ca, 0x08d6, 0x08df, 0x08ee, 0x0900, 0x090c, 0x0918, 0x093f, - // Entry 80 - BF - 0x0952, 0x0968, 0x0974, 0x0990, 0x09a2, 0x09ab, 0x09b7, 0x09cd, - 0x09e2, 0x09f2, 0x09fe, 0x0a07, 0x0a16, 0x0a25, 0x0a31, 0x0a3a, - 0x0a43, 0x0a4c, 0x0a5b, 0x0a6d, 0x0a80, 0x0a92, 0x0aab, 0x0aba, - 0x0ac0, 0x0acc, 0x0adb, 0x0b26, 0x0b53, 0x0b5f, 0x0b6b, 0x0b7d, - 0x0b86, 0x0b95, 0x0ba4, 0x0bad, 0x0bbc, 0x0bcb, 0x0bda, 0x0be9, - 0x0c02, 0x0c0b, 0x0c2a, 0x0c36, 0x0c42, 0x0c4e, 0x0c54, 0x0c5d, - 0x0c66, 0x0c6c, 0x0c82, 0x0c8b, 0x0c94, 0x0c9a, 0x0cb9, 0x0cd0, - 0x0ce2, 0x0cf1, 0x0cfa, 0x0d21, 0x0d3d, 0x0d50, 0x0d7b, 0x0d87, - // Entry C0 - FF - 0x0d93, 0x0da2, 0x0dab, 0x0dc4, 0x0dd3, 0x0ddf, 0x0de8, 0x0df1, - 0x0dfd, 0x0e13, 0x0e2f, 0x0e3e, 0x0e47, 0x0e53, 0x0e62, 0x0e78, - 0x0e87, 0x0eb1, 0x0ec0, 0x0ed3, 0x0eec, 0x0ef8, 0x0f01, 0x0f0d, - 0x0f23, 0x0f44, 0x0f59, 0x0f6c, 0x0f75, 0x0f87, 0x0fa1, 0x0fd1, - 0x0fd7, 0x100d, 0x1013, 0x101f, 0x1031, 0x103d, 0x1050, 0x1068, - 0x1077, 0x1080, 0x1086, 0x10a3, 0x10ac, 0x10b8, 0x10c7, 0x10d3, - 0x10df, 0x10fd, 0x10fd, 0x1126, 0x112f, 0x1144, 0x115d, 0x119a, - 0x11a9, 0x11dc, 0x120a, 0x1219, 0x1228, 0x1242, 0x124b, 0x1254, - // Entry 100 - 13F - 0x125d, 0x1266, 0x1282, 0x128e, 0x129a, 0x12c2, 0x12cb, 0x12da, - 0x12f0, 0x1309, 0x1318, 0x133b, 0x1351, 0x1374, 0x1394, 0x13ad, - 0x13d0, 0x13df, 0x13fc, 0x1408, 0x142e, 0x1454, 0x1480, 0x149d, - 0x14af, 0x14be, 0x1501, 0x1510, 0x1522, 0x153e, 0x1564, 0x156d, - 0x158a, 0x15a4, 0x15c1, 0x15d7, + 0x0436, 0x0442, 0x044b, 0x0457, 0x046a, 0x0473, 0x047f, 0x048b, + // Entry 40 - 7F + 0x04a7, 0x04b6, 0x04cd, 0x04d9, 0x04e8, 0x04f4, 0x0511, 0x051d, + 0x052f, 0x053e, 0x055d, 0x0572, 0x0581, 0x0587, 0x059d, 0x05af, + 0x05c5, 0x05d1, 0x05da, 0x05e6, 0x05ef, 0x05fb, 0x0611, 0x061a, + 0x0623, 0x062f, 0x063e, 0x064d, 0x0656, 0x0662, 0x067e, 0x0687, + 0x06de, 0x06ea, 0x06f0, 0x0706, 0x070f, 0x076e, 0x07ae, 0x07bd, + 0x07cc, 0x07d5, 0x07e1, 0x07fa, 0x080c, 0x0818, 0x0824, 0x0851, + 0x085d, 0x088a, 0x0893, 0x089c, 0x08ae, 0x08b7, 0x08c0, 0x08cc, + 0x08d5, 0x08e1, 0x08ea, 0x08f9, 0x090b, 0x0917, 0x0923, 0x094a, + // Entry 80 - BF + 0x095d, 0x0973, 0x097f, 0x099b, 0x09ad, 0x09b6, 0x09c2, 0x09d8, + 0x09ed, 0x09fd, 0x0a09, 0x0a12, 0x0a21, 0x0a30, 0x0a3c, 0x0a45, + 0x0a4e, 0x0a57, 0x0a66, 0x0a78, 0x0a8b, 0x0a9d, 0x0ab6, 0x0ac5, + 0x0acb, 0x0ad7, 0x0ae6, 0x0b31, 0x0b5e, 0x0b6a, 0x0b76, 0x0b88, + 0x0b91, 0x0ba0, 0x0baf, 0x0bb8, 0x0bc7, 0x0bd6, 0x0be5, 0x0bf4, + 0x0c0d, 0x0c16, 0x0c35, 0x0c41, 0x0c4d, 0x0c59, 0x0c5f, 0x0c68, + 0x0c71, 0x0c77, 0x0c8d, 0x0c96, 0x0c9f, 0x0ca5, 0x0cc4, 0x0cdb, + 0x0ced, 0x0cfc, 0x0d05, 0x0d2c, 0x0d48, 0x0d5b, 0x0d86, 0x0d92, + // Entry C0 - FF + 0x0d9e, 0x0dad, 0x0db6, 0x0dcf, 0x0dde, 0x0dea, 0x0df3, 0x0dfc, + 0x0e08, 0x0e1e, 0x0e3a, 0x0e49, 0x0e52, 0x0e5e, 0x0e6d, 0x0e83, + 0x0e92, 0x0ebc, 0x0ecb, 0x0ede, 0x0ef7, 0x0f03, 0x0f0c, 0x0f18, + 0x0f2e, 0x0f4f, 0x0f64, 0x0f77, 0x0f80, 0x0f92, 0x0fac, 0x0fdc, + 0x0fe2, 0x1018, 0x101e, 0x102a, 0x103c, 0x1048, 0x105b, 0x1073, + 0x1082, 0x108b, 0x1091, 0x10ae, 0x10b7, 0x10c3, 0x10d2, 0x10de, + 0x10ea, 0x1108, 0x113e, 0x1167, 0x1170, 0x1185, 0x119e, 0x11db, + 0x11ea, 0x121d, 0x124b, 0x125a, 0x1269, 0x1283, 0x128c, 0x1295, + // Entry 100 - 13F + 0x129e, 0x12a7, 0x12c3, 0x12cf, 0x12db, 0x1303, 0x130c, 0x131b, + 0x1331, 0x134a, 0x1359, 0x137c, 0x1392, 0x13b5, 0x13d5, 0x13ee, + 0x1411, 0x1420, 0x143d, 0x1449, 0x146f, 0x1495, 0x14c1, 0x14de, + 0x14f0, 0x14ff, 0x1542, 0x1551, 0x1563, 0x157f, 0x15a5, 0x15ae, + 0x15cb, 0x15e5, 0x1602, 0x1602, 0x1618, }, }, { // ckb "ئاندۆرامیرنشینە یەکگرتووە عەرەبییەکانئەفغانستانئانتیگوا و باربودائەڵبانی" + - "ائەرمەنستانئەنگۆلائانتارکتیکائارجەنتیناساموای ئەمەریکایینەمسائۆسترا" + - "لیائارووبائازەربایجانبۆسنیا و ھەرزەگۆڤیناباربادۆسبەنگلادیشبەلژیکبور" + - "کینافاسۆبولگاریابەحرەینبوروندیبنینبۆلیڤیابرازیلبەھامابووتانبۆتسوانا" + + "ائەرمەنستانئەنگۆلائانتارکتیکائەرژەنتینساموای ئەمەریکایینەمسائوسترال" + + "یائارووبائازەربایجانبۆسنیا و ھەرزەگۆڤیناباربادۆسبەنگلادیشبەلژیکبورک" + + "ینافاسۆبولگاریابەحرەینبوروندیبێنینبۆلیڤیابرازیلبەھامابووتانبۆتسوانا" + "بیلاڕووسبەلیزکانەداکۆنگۆ کینشاساکۆماری ئەفریقای ناوەڕاستسویسراکۆتدی" + - "ڤوارشیلیکامیروونچینکۆلۆمبیاکۆستاریکاکووباکەیپڤەردقیبرسکۆماری چیکئەڵ" + - "مانیاجیبووتیدانمارکدۆمینیکائەلجەزایرئیکوادۆرمیسرئەریتریائیسپانیائەت" + - "یۆپیافینلاندفیجیمایکرۆنیزیافەڕەنساگابۆنشانشینی یەکگرتووگریناداگورجس" + - "تانغەناگرینلاندگامبیاگینێیۆنانگواتیمالاگوامگینێ بیساوگویاناھۆندوورا" + - "سکرۆواتیاھایتیمەجارستانئیندۆنیزیائیرلەندئیسرائیلھیندستانعێراقئێرانئ" + - "ایسلەندئیتاڵیجامایکائوردنژاپۆنقرغیزستانکەمبۆدیاکیریباسدوورگەکانی قە" + - "مەرسەینت کیتس و نیڤیسکۆریای باکوورکوەیتکازاخستانلاوسلوبنانسەینت لوو" + - "سیالیختنشتاینسریلانکالیبەریالەسۆتۆلیتوانایالوکسەمبورگلاتڤیالیبیامەغ" + - "ریبمۆناکۆمۆلدۆڤامۆنتینیگرۆماداگاسکاردوورگەکانی مارشاڵمالیمیانمارمەن" + - "گۆلیامۆریتانیاماڵتامالدیڤمالاویمەکسیکمالیزیامۆزامبیکنامیبیانیجەرنیک" + - "اراگواھۆڵەندانۆرویژنیپالنائوروونیوزیلاندعومانپاناماپیرووپاپوا گینێی" + - " نوێفلیپینپاکستانپۆڵەنداپورتوگالپالاوپاراگوایقەتەرڕۆمانیاسربیاڕووسیا" + - "ڕوانداعەرەبستانی سەعوودیدوورگەکانی سلێمانسیشێلسوودانسویدسینگاپورسلۆ" + - "ڤێنیاسلۆڤاکیاسیەرالیۆنسان مارینۆسینیگالسۆمالیاسورینامساوتۆمێ و پرین" + - "سیپیئێلسالڤادۆرسووریاسوازیلاندچادتۆگۆتایلەندتاجیکستانتورکمانستانتوو" + - "نستۆنگاتورکیاترینیداد و تۆباگوتووڤالووتایوانتانزانیائۆکرانیائوگاندا" + - "ئوروگوایئوزبەکستانڤاتیکانسەینت ڤینسەنت و گرینادینزڤیەتنامڤانوواتووس" + - "اموایەمەنئەفریقای باشوورزامبیازیمبابویئەورووپای باشووریئاسیای ناوەن" + - "دیئاسیای ڕۆژاوا", + "ڤوارچیلیکامیرۆنچینکۆلۆمبیاکۆستاریکاکووباکەیپڤەردقیبرسکۆماری چیکئەڵم" + + "انیاجیبووتیدانمارکدۆمینیکاجەزایرئیکوادۆرمیسرئەریتریائیسپانیائەتیۆپی" + + "افینلاندفیجیمایکرۆنیزیافەڕەنساگابۆنشانشینی یەکگرتووگریناداگورجستانغ" + + "ەناگرینلاندگامبیاگینێیۆنانگواتیمالاگوامگینێ بیساوگویاناھۆندووراسکرۆ" + + "واتیاھایتیمەجارستانئیندۆنیزیائیرلەندئیسرائیلھیندستانعێراقئێرانئایسل" + + "ەندئیتاڵیجامایکائوردنژاپۆنقرغیزستانکەمبۆدیاکیریباسدوورگەکانی کۆمۆرس" + + "ەینت کیتس و نیڤیسکۆریای باکوورکوەیتکازاخستانلاوسلوبنانسەینت لووسیال" + + "یختنشتاینسریلانکالیبەریالەسۆتۆلیتوانایالوکسەمبورگلاتڤیالیبیامەغریبم" + + "ۆناکۆمۆلدۆڤامۆنتینیگرۆماداگاسکاردوورگەکانی مارشاڵمالیمیانمارمەنگۆلی" + + "امۆریتانیاماڵتامالدیڤمالاویمەکسیکمالیزیامۆزامبیکنامیبیانیجەرنیکاراگ" + + "واھۆڵەندانۆرویژنیپالنائوروونیوزیلاندعومانپاناماپیرووپاپوا گینێی نوێ" + + "فلیپینپاکستانپۆڵەنداپورتوگالپالاوپاراگوایقەتەرڕۆمانیاسربیاڕووسیاڕوا" + + "نداعەرەبستانی سەعوودیدوورگەکانی سلێمانسیشێلسوودانسویدسینگاپورسلۆڤێن" + + "یاسلۆڤاکیاسیەرالیۆنسان مارینۆسینیگالسۆمالیاسورینامساوتۆمێ و پرینسیپ" + + "یئێلسالڤادۆرسووریاسوازیلاندچادتۆگۆتایلەندتاجیکستانتورکمانستانتوونست" + + "ۆنگاتورکیاترینیداد و تۆباگوتووڤالووتایوانتانزانیائۆکرانیائوگانداویل" + + "ایەتە یەکگرتووەکانئوروگوایئوزبەکستانڤاتیکانسەینت ڤینسەنت و گرینادین" + + "زڤیەتنامڤانوواتووساموایەمەنئەفریقای باشوورزامبیازیمبابویئەورووپای ب" + + "اشووریئاسیای ناوەندیئاسیای ڕۆژاوا", []uint16{ // 287 elements // Entry 0 - 3F 0x0000, 0x0000, 0x000e, 0x0048, 0x005c, 0x007e, 0x007e, 0x008e, - 0x00a2, 0x00b0, 0x00c6, 0x00da, 0x00fb, 0x0105, 0x0117, 0x0125, - 0x0125, 0x013b, 0x0161, 0x0171, 0x0183, 0x018f, 0x01a5, 0x01b5, - 0x01c3, 0x01d1, 0x01d9, 0x01d9, 0x01d9, 0x01d9, 0x01e7, 0x01e7, + 0x00a2, 0x00b0, 0x00c6, 0x00d8, 0x00f9, 0x0103, 0x0115, 0x0123, + 0x0123, 0x0139, 0x015f, 0x016f, 0x0181, 0x018d, 0x01a3, 0x01b3, + 0x01c1, 0x01cf, 0x01d9, 0x01d9, 0x01d9, 0x01d9, 0x01e7, 0x01e7, 0x01f3, 0x01ff, 0x020b, 0x020b, 0x021b, 0x022b, 0x0235, 0x0241, 0x0241, 0x025a, 0x0288, 0x0288, 0x0294, 0x02a6, 0x02a6, 0x02ae, - 0x02be, 0x02c4, 0x02d4, 0x02d4, 0x02e6, 0x02f0, 0x0300, 0x0300, - 0x0300, 0x030a, 0x031d, 0x032d, 0x032d, 0x033b, 0x0349, 0x0359, - // Entry 40 - 7F - 0x0359, 0x036b, 0x036b, 0x037b, 0x037b, 0x0383, 0x0383, 0x0393, - 0x03a3, 0x03b3, 0x03b3, 0x03b3, 0x03c1, 0x03c9, 0x03c9, 0x03df, - 0x03df, 0x03ed, 0x03f7, 0x0416, 0x0424, 0x0434, 0x0434, 0x0434, - 0x043c, 0x043c, 0x044c, 0x0458, 0x0460, 0x0460, 0x0460, 0x046a, - 0x046a, 0x047c, 0x0484, 0x0497, 0x04a3, 0x04a3, 0x04a3, 0x04b5, - 0x04c5, 0x04cf, 0x04e1, 0x04e1, 0x04f5, 0x0503, 0x0513, 0x0513, - 0x0523, 0x0523, 0x052d, 0x0537, 0x0547, 0x0553, 0x0553, 0x0561, - 0x056b, 0x0575, 0x0575, 0x0587, 0x0597, 0x05a5, 0x05c4, 0x05e5, - // Entry 80 - BF - 0x05fe, 0x05fe, 0x0608, 0x0608, 0x061a, 0x0622, 0x062e, 0x0645, - 0x0659, 0x0669, 0x0677, 0x0683, 0x0695, 0x06a9, 0x06b5, 0x06bf, - 0x06cb, 0x06d7, 0x06e5, 0x06f9, 0x06f9, 0x070d, 0x072e, 0x072e, - 0x0736, 0x0744, 0x0754, 0x0754, 0x0754, 0x0754, 0x0766, 0x0766, - 0x0770, 0x0770, 0x077c, 0x0788, 0x0794, 0x07a2, 0x07b2, 0x07c0, - 0x07c0, 0x07ca, 0x07ca, 0x07ca, 0x07dc, 0x07ea, 0x07f6, 0x0800, - 0x080e, 0x080e, 0x0820, 0x082a, 0x0836, 0x0840, 0x0840, 0x085c, - 0x0868, 0x0876, 0x0884, 0x0884, 0x0884, 0x0884, 0x0884, 0x0894, - // Entry C0 - FF - 0x089e, 0x08ae, 0x08b8, 0x08b8, 0x08b8, 0x08c6, 0x08d0, 0x08dc, - 0x08e8, 0x090b, 0x092c, 0x0936, 0x0942, 0x094a, 0x095a, 0x095a, - 0x096a, 0x096a, 0x097a, 0x098c, 0x099f, 0x09ad, 0x09bb, 0x09c9, - 0x09c9, 0x09eb, 0x0a01, 0x0a01, 0x0a0d, 0x0a1f, 0x0a1f, 0x0a1f, - 0x0a25, 0x0a25, 0x0a2d, 0x0a3b, 0x0a4d, 0x0a4d, 0x0a4d, 0x0a63, - 0x0a6d, 0x0a77, 0x0a83, 0x0aa3, 0x0ab3, 0x0abf, 0x0acf, 0x0adf, - 0x0aed, 0x0aed, 0x0aed, 0x0aed, 0x0afd, 0x0b11, 0x0b1f, 0x0b4e, - 0x0b4e, 0x0b4e, 0x0b4e, 0x0b5c, 0x0b6e, 0x0b6e, 0x0b78, 0x0b78, - // Entry 100 - 13F - 0x0b82, 0x0b82, 0x0b9f, 0x0bab, 0x0bbb, 0x0bbb, 0x0bbb, 0x0bbb, - 0x0bbb, 0x0bbb, 0x0bbb, 0x0bbb, 0x0bbb, 0x0bbb, 0x0bbb, 0x0bbb, - 0x0bbb, 0x0bbb, 0x0bbb, 0x0bbb, 0x0bbb, 0x0bbb, 0x0bbb, 0x0bdc, - 0x0bdc, 0x0bdc, 0x0bdc, 0x0bdc, 0x0bdc, 0x0bf7, 0x0c10, + 0x02bc, 0x02c2, 0x02d2, 0x02d2, 0x02e4, 0x02ee, 0x02fe, 0x02fe, + 0x02fe, 0x0308, 0x031b, 0x032b, 0x032b, 0x0339, 0x0347, 0x0357, + // Entry 40 - 7F + 0x0357, 0x0363, 0x0363, 0x0373, 0x0373, 0x037b, 0x037b, 0x038b, + 0x039b, 0x03ab, 0x03ab, 0x03ab, 0x03b9, 0x03c1, 0x03c1, 0x03d7, + 0x03d7, 0x03e5, 0x03ef, 0x040e, 0x041c, 0x042c, 0x042c, 0x042c, + 0x0434, 0x0434, 0x0444, 0x0450, 0x0458, 0x0458, 0x0458, 0x0462, + 0x0462, 0x0474, 0x047c, 0x048f, 0x049b, 0x049b, 0x049b, 0x04ad, + 0x04bd, 0x04c7, 0x04d9, 0x04d9, 0x04ed, 0x04fb, 0x050b, 0x050b, + 0x051b, 0x051b, 0x0525, 0x052f, 0x053f, 0x054b, 0x054b, 0x0559, + 0x0563, 0x056d, 0x056d, 0x057f, 0x058f, 0x059d, 0x05bc, 0x05dd, + // Entry 80 - BF + 0x05f6, 0x05f6, 0x0600, 0x0600, 0x0612, 0x061a, 0x0626, 0x063d, + 0x0651, 0x0661, 0x066f, 0x067b, 0x068d, 0x06a1, 0x06ad, 0x06b7, + 0x06c3, 0x06cf, 0x06dd, 0x06f1, 0x06f1, 0x0705, 0x0726, 0x0726, + 0x072e, 0x073c, 0x074c, 0x074c, 0x074c, 0x074c, 0x075e, 0x075e, + 0x0768, 0x0768, 0x0774, 0x0780, 0x078c, 0x079a, 0x07aa, 0x07b8, + 0x07b8, 0x07c2, 0x07c2, 0x07c2, 0x07d4, 0x07e2, 0x07ee, 0x07f8, + 0x0806, 0x0806, 0x0818, 0x0822, 0x082e, 0x0838, 0x0838, 0x0854, + 0x0860, 0x086e, 0x087c, 0x087c, 0x087c, 0x087c, 0x087c, 0x088c, + // Entry C0 - FF + 0x0896, 0x08a6, 0x08b0, 0x08b0, 0x08b0, 0x08be, 0x08c8, 0x08d4, + 0x08e0, 0x0903, 0x0924, 0x092e, 0x093a, 0x0942, 0x0952, 0x0952, + 0x0962, 0x0962, 0x0972, 0x0984, 0x0997, 0x09a5, 0x09b3, 0x09c1, + 0x09c1, 0x09e3, 0x09f9, 0x09f9, 0x0a05, 0x0a17, 0x0a17, 0x0a17, + 0x0a1d, 0x0a1d, 0x0a25, 0x0a33, 0x0a45, 0x0a45, 0x0a45, 0x0a5b, + 0x0a65, 0x0a6f, 0x0a7b, 0x0a9b, 0x0aab, 0x0ab7, 0x0ac7, 0x0ad7, + 0x0ae5, 0x0ae5, 0x0ae5, 0x0b0e, 0x0b1e, 0x0b32, 0x0b40, 0x0b6f, + 0x0b6f, 0x0b6f, 0x0b6f, 0x0b7d, 0x0b8f, 0x0b8f, 0x0b99, 0x0b99, + // Entry 100 - 13F + 0x0ba3, 0x0ba3, 0x0bc0, 0x0bcc, 0x0bdc, 0x0bdc, 0x0bdc, 0x0bdc, + 0x0bdc, 0x0bdc, 0x0bdc, 0x0bdc, 0x0bdc, 0x0bdc, 0x0bdc, 0x0bdc, + 0x0bdc, 0x0bdc, 0x0bdc, 0x0bdc, 0x0bdc, 0x0bdc, 0x0bdc, 0x0bfd, + 0x0bfd, 0x0bfd, 0x0bfd, 0x0bfd, 0x0bfd, 0x0c18, 0x0c31, }, }, { // cs @@ -33870,51 +35911,51 @@ var regionHeaders = [252]header{ { // cy "Ynys AscensionAndorraEmiradau Arabaidd UnedigAfghanistanAntigua a Barbud" + "aAnguillaAlbaniaArmeniaAngolaAntarcticaYr ArianninSamoa AmericaAwstr" + - "iaAwstraliaArubaYnysoedd ÅlandAzerbaijanBosnia a HercegovinaBarbados" + + "iaAwstraliaArubaYnysoedd ÅlandAzerbaijanBosnia a HerzegovinaBarbados" + "BangladeshGwlad BelgBurkina FasoBwlgariaBahrainBurundiBeninSaint Bar" + "thélemyBermudaBruneiBolifiaAntilles yr IseldiroeddBrasilY BahamasBhu" + "tanYnys BouvetBotswanaBelarwsBelizeCanadaYnysoedd Cocos (Keeling)Y C" + "ongo - KinshasaGweriniaeth Canolbarth AffricaY Congo - BrazzavilleY " + "SwistirCôte d’IvoireYnysoedd CookChileCamerŵnTsieinaColombiaYnys Cli" + - "ppertonCosta RicaCiwbaCabo VerdeCuraçaoYnys y NadoligCyprusGweriniae" + - "th TsiecYr AlmaenDiego GarciaDjiboutiDenmarcDominicaGweriniaeth Domi" + - "nicaAlgeriaCeuta a MelillaEcuadorEstoniaYr AifftGorllewin SaharaErit" + - "reaSbaenEthiopiaYr Undeb EwropeaiddY FfindirFijiYnysoedd y Falkland/" + - "MalvinasMicronesiaYnysoedd FfaroFfraincGabonY Deyrnas UnedigGrenadaG" + - "eorgiaGuyane FfrengigYnys y GarnGhanaGibraltarYr Ynys LasGambiaGuiné" + - "eGuadeloupeGuinea GyhydeddolGwlad GroegDe Georgia ac Ynysoedd Sandwi" + - "ch y DeGuatemalaGuamGuiné-BissauGuyanaHong Kong RhGA TsieinaYnys Hea" + - "rd ac Ynysoedd McDonaldHondurasCroatiaHaitiHwngariYr Ynysoedd Dedwyd" + - "dIndonesiaIwerddonIsraelYnys ManawIndiaTiriogaeth Brydeinig Cefnfor " + - "IndiaIracIranGwlad yr IâYr EidalJerseyJamaicaGwlad IorddonenJapanKen" + - "yaKyrgyzstanCambodiaKiribatiComorosSaint Kitts a NevisGogledd KoreaD" + - "e KoreaKuwaitYnysoedd CaymanKazakstanLaosLibanusSaint LuciaLiechtens" + - "teinSri LankaLiberiaLesothoLithuaniaLwcsembwrgLatfiaLibyaMorocoMonac" + - "oMoldofaMontenegroSaint MartinMadagascarYnysoedd MarshallMacedoniaMa" + - "liMyanmar (Burma)MongoliaMacau RhGA TsieinaYnysoedd Gogledd MarianaM" + - "artiniqueMauritaniaMontserratMaltaMauritiusY MaldivesMalawiMecsicoMa" + - "laysiaMozambiqueNamibiaCaledonia NewyddNigerYnys NorfolkNigeriaNicar" + - "aguaYr IseldiroeddNorwyNepalNauruNiueSeland NewyddOmanPanamaPeriwPol" + - "ynesia FfrengigPapua Guinea NewyddY PhilipinauPakistanGwlad PwylSain" + - "t-Pierre-et-MiquelonYnysoedd PitcairnPuerto RicoTiriogaethau Paleste" + - "inaiddPortiwgalPalauParaguayQatarOceania BellennigRéunionRwmaniaSerb" + - "iaRwsiaRwandaSaudi ArabiaYnysoedd SolomonSeychellesSwdanSwedenSingap" + - "oreSaint HelenaSlofeniaSvalbard a Jan MayenSlofaciaSierra LeoneSan M" + - "arinoSenegalSomaliaSurinameDe SwdanSão Tomé a PríncipeEl SalvadorSin" + - "t MaartenSyriaGwlad SwaziTristan da CunhaYnysoedd Turks a CaicosTcha" + - "dTiroedd Deheuol ac Antarctig FfraincTogoGwlad ThaiTajikistanTokelau" + - "Timor-LesteTurkmenistanTunisiaTongaTwrciTrinidad a TobagoTuvaluTaiwa" + - "nTanzaniaWcráinUgandaYnysoedd Pellennig UDACenhedloedd UnedigYr Unol" + - " DaleithiauUruguayUzbekistanY FaticanSaint Vincent a’r GrenadinesVen" + - "ezuelaYnysoedd Gwyryf PrydainYnysoedd Gwyryf yr Unol DaleithiauFietn" + - "amVanuatuWallis a FutunaSamoaKosovoYemenMayotteDe AffricaZambiaZimba" + - "bweRhanbarth AnhysbysY BydAffricaGogledd AmericaDe AmericaOceaniaGor" + - "llewin AffricaCanolbarth AmericaDwyrain AffricaGogledd AffricaCanol " + - "AffricaDeheudir AffricaYr AmerigAmerica i’r Gogledd o FecsicoY Carib" + - "îDwyrain AsiaDe AsiaDe-Ddwyrain AsiaDe EwropAwstralasiaMelanesiaRha" + - "nbarth MicronesiaPolynesiaAsiaCanol AsiaGorllewin AsiaEwropDwyrain E" + - "wropGogledd EwropGorllewin EwropAmerica Ladin", - []uint16{ // 292 elements + "ppertonCosta RicaCiwbaCabo VerdeCuraçaoYnys y NadoligCyprusTsieciaYr" + + " AlmaenDiego GarciaDjiboutiDenmarcDominicaGweriniaeth DominicaAlgeri" + + "aCeuta a MelillaEcuadorEstoniaYr AifftGorllewin SaharaEritreaSbaenEt" + + "hiopiaYr Undeb EwropeaiddArdal yr EwroY FfindirFijiYnysoedd y Falkla" + + "nd/MalvinasMicronesiaYnysoedd FfaroFfraincGabonY Deyrnas UnedigGrena" + + "daGeorgiaGuyane FfrengigYnys y GarnGhanaGibraltarYr Ynys LasGambiaGu" + + "inéeGuadeloupeGuinea GyhydeddolGwlad GroegDe Georgia ac Ynysoedd San" + + "dwich y DeGuatemalaGuamGuiné-BissauGuyanaHong Kong RhGA TsieinaYnys " + + "Heard ac Ynysoedd McDonaldHondurasCroatiaHaitiHwngariYr Ynysoedd Ded" + + "wyddIndonesiaIwerddonIsraelYnys ManawIndiaTiriogaeth Brydeinig Cefnf" + + "or IndiaIracIranGwlad yr IâYr EidalJerseyJamaicaGwlad IorddonenJapan" + + "KenyaKyrgyzstanCambodiaKiribatiComorosSaint Kitts a NevisGogledd Kor" + + "eaDe KoreaKuwaitYnysoedd CaymanKazakstanLaosLibanusSaint LuciaLiecht" + + "ensteinSri LankaLiberiaLesothoLithuaniaLwcsembwrgLatfiaLibyaMorocoMo" + + "nacoMoldofaMontenegroSaint MartinMadagascarYnysoedd MarshallMacedoni" + + "aMaliMyanmar (Burma)MongoliaMacau RhGA TsieinaYnysoedd Gogledd Maria" + + "naMartiniqueMauritaniaMontserratMaltaMauritiusY MaldivesMalawiMecsic" + + "oMalaysiaMozambiqueNamibiaCaledonia NewyddNigerYnys NorfolkNigeriaNi" + + "caraguaYr IseldiroeddNorwyNepalNauruNiueSeland NewyddOmanPanamaPeriw" + + "Polynesia FfrengigPapua Guinea NewyddY PhilipinauPakistanGwlad PwylS" + + "aint-Pierre-et-MiquelonYnysoedd PitcairnPuerto RicoTiriogaethau Pale" + + "steinaiddPortiwgalPalauParaguayQatarOceania BellennigRéunionRwmaniaS" + + "erbiaRwsiaRwandaSaudi ArabiaYnysoedd SolomonSeychellesSwdanSwedenSin" + + "gaporeSaint HelenaSlofeniaSvalbard a Jan MayenSlofaciaSierra LeoneSa" + + "n MarinoSenegalSomaliaSurinameDe SwdanSão Tomé a PríncipeEl Salvador" + + "Sint MaartenSyriaGwlad SwaziTristan da CunhaYnysoedd Turks a CaicosT" + + "chadTiroedd Deheuol ac Antarctig FfraincTogoGwlad ThaiTajikistanToke" + + "lauTimor-LesteTurkmenistanTunisiaTongaTwrciTrinidad a TobagoTuvaluTa" + + "iwanTanzaniaWcráinUgandaYnysoedd Pellennig UDAy Cenhedloedd UnedigYr" + + " Unol DaleithiauUruguayUzbekistanY FaticanSaint Vincent a’r Grenadin" + + "esVenezuelaYnysoedd Gwyryf PrydainYnysoedd Gwyryf yr Unol Daleithiau" + + "FietnamVanuatuWallis a FutunaSamoaKosovoYemenMayotteDe AffricaZambia" + + "ZimbabweRhanbarth AnhysbysY BydAffricaGogledd AmericaDe AmericaOcean" + + "iaGorllewin AffricaCanolbarth AmericaDwyrain AffricaGogledd AffricaC" + + "anol AffricaDeheudir AffricaYr AmerigAmerica i’r Gogledd o FecsicoY " + + "CaribîDwyrain AsiaDe AsiaDe-Ddwyrain AsiaDe EwropAwstralasiaMelanesi" + + "aRhanbarth MicronesiaPolynesiaAsiaCanol AsiaGorllewin AsiaEwropDwyra" + + "in EwropGogledd EwropGorllewin EwropAmerica Ladin", + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x000e, 0x0015, 0x002d, 0x0038, 0x0049, 0x0051, 0x0058, 0x005f, 0x0065, 0x006f, 0x007a, 0x0087, 0x008e, 0x0097, 0x009c, @@ -33923,40 +35964,40 @@ var regionHeaders = [252]header{ 0x014e, 0x0157, 0x015d, 0x0168, 0x0170, 0x0177, 0x017d, 0x0183, 0x019b, 0x01ad, 0x01cb, 0x01e0, 0x01e9, 0x01f9, 0x0206, 0x020b, 0x0213, 0x021a, 0x0222, 0x0231, 0x023b, 0x0240, 0x024a, 0x0252, - 0x0260, 0x0266, 0x0277, 0x0280, 0x028c, 0x0294, 0x029b, 0x02a3, - // Entry 40 - 7F - 0x02b7, 0x02be, 0x02cd, 0x02d4, 0x02db, 0x02e3, 0x02f3, 0x02fa, - 0x02ff, 0x0307, 0x031a, 0x031a, 0x0323, 0x0327, 0x0343, 0x034d, - 0x035b, 0x0362, 0x0367, 0x0377, 0x037e, 0x0385, 0x0394, 0x039f, - 0x03a4, 0x03ad, 0x03b8, 0x03be, 0x03c5, 0x03cf, 0x03e0, 0x03eb, - 0x040f, 0x0418, 0x041c, 0x0429, 0x042f, 0x0445, 0x0464, 0x046c, - 0x0473, 0x0478, 0x047f, 0x0492, 0x049b, 0x04a3, 0x04a9, 0x04b3, - 0x04b8, 0x04da, 0x04de, 0x04e2, 0x04ee, 0x04f6, 0x04fc, 0x0503, - 0x0512, 0x0517, 0x051c, 0x0526, 0x052e, 0x0536, 0x053d, 0x0550, - // Entry 80 - BF - 0x055d, 0x0565, 0x056b, 0x057a, 0x0583, 0x0587, 0x058e, 0x0599, - 0x05a6, 0x05af, 0x05b6, 0x05bd, 0x05c6, 0x05d0, 0x05d6, 0x05db, - 0x05e1, 0x05e7, 0x05ee, 0x05f8, 0x0604, 0x060e, 0x061f, 0x0628, - 0x062c, 0x063b, 0x0643, 0x0655, 0x066d, 0x0677, 0x0681, 0x068b, - 0x0690, 0x0699, 0x06a3, 0x06a9, 0x06b0, 0x06b8, 0x06c2, 0x06c9, - 0x06d9, 0x06de, 0x06ea, 0x06f1, 0x06fa, 0x0708, 0x070d, 0x0712, - 0x0717, 0x071b, 0x0728, 0x072c, 0x0732, 0x0737, 0x0749, 0x075c, - 0x0768, 0x0770, 0x077a, 0x0792, 0x07a3, 0x07ae, 0x07c8, 0x07d1, - // Entry C0 - FF - 0x07d6, 0x07de, 0x07e3, 0x07f4, 0x07fc, 0x0803, 0x0809, 0x080e, - 0x0814, 0x0820, 0x0830, 0x083a, 0x083f, 0x0845, 0x084e, 0x085a, - 0x0862, 0x0876, 0x087e, 0x088a, 0x0894, 0x089b, 0x08a2, 0x08aa, - 0x08b2, 0x08c8, 0x08d3, 0x08df, 0x08e4, 0x08ef, 0x08ff, 0x0916, - 0x091b, 0x093f, 0x0943, 0x094d, 0x0957, 0x095e, 0x0969, 0x0975, - 0x097c, 0x0981, 0x0986, 0x0997, 0x099d, 0x09a3, 0x09ab, 0x09b2, - 0x09b8, 0x09ce, 0x09e0, 0x09f2, 0x09f9, 0x0a03, 0x0a0c, 0x0a2a, - 0x0a33, 0x0a4a, 0x0a6c, 0x0a73, 0x0a7a, 0x0a89, 0x0a8e, 0x0a94, - // Entry 100 - 13F - 0x0a99, 0x0aa0, 0x0aaa, 0x0ab0, 0x0ab8, 0x0aca, 0x0acf, 0x0ad6, - 0x0ae5, 0x0aef, 0x0af6, 0x0b07, 0x0b19, 0x0b28, 0x0b37, 0x0b44, - 0x0b54, 0x0b5d, 0x0b7c, 0x0b85, 0x0b91, 0x0b98, 0x0ba8, 0x0bb0, - 0x0bbb, 0x0bc4, 0x0bd8, 0x0be1, 0x0be5, 0x0bef, 0x0bfd, 0x0c02, - 0x0c0f, 0x0c1c, 0x0c2b, 0x0c38, + 0x0260, 0x0266, 0x026d, 0x0276, 0x0282, 0x028a, 0x0291, 0x0299, + // Entry 40 - 7F + 0x02ad, 0x02b4, 0x02c3, 0x02ca, 0x02d1, 0x02d9, 0x02e9, 0x02f0, + 0x02f5, 0x02fd, 0x0310, 0x031d, 0x0326, 0x032a, 0x0346, 0x0350, + 0x035e, 0x0365, 0x036a, 0x037a, 0x0381, 0x0388, 0x0397, 0x03a2, + 0x03a7, 0x03b0, 0x03bb, 0x03c1, 0x03c8, 0x03d2, 0x03e3, 0x03ee, + 0x0412, 0x041b, 0x041f, 0x042c, 0x0432, 0x0448, 0x0467, 0x046f, + 0x0476, 0x047b, 0x0482, 0x0495, 0x049e, 0x04a6, 0x04ac, 0x04b6, + 0x04bb, 0x04dd, 0x04e1, 0x04e5, 0x04f1, 0x04f9, 0x04ff, 0x0506, + 0x0515, 0x051a, 0x051f, 0x0529, 0x0531, 0x0539, 0x0540, 0x0553, + // Entry 80 - BF + 0x0560, 0x0568, 0x056e, 0x057d, 0x0586, 0x058a, 0x0591, 0x059c, + 0x05a9, 0x05b2, 0x05b9, 0x05c0, 0x05c9, 0x05d3, 0x05d9, 0x05de, + 0x05e4, 0x05ea, 0x05f1, 0x05fb, 0x0607, 0x0611, 0x0622, 0x062b, + 0x062f, 0x063e, 0x0646, 0x0658, 0x0670, 0x067a, 0x0684, 0x068e, + 0x0693, 0x069c, 0x06a6, 0x06ac, 0x06b3, 0x06bb, 0x06c5, 0x06cc, + 0x06dc, 0x06e1, 0x06ed, 0x06f4, 0x06fd, 0x070b, 0x0710, 0x0715, + 0x071a, 0x071e, 0x072b, 0x072f, 0x0735, 0x073a, 0x074c, 0x075f, + 0x076b, 0x0773, 0x077d, 0x0795, 0x07a6, 0x07b1, 0x07cb, 0x07d4, + // Entry C0 - FF + 0x07d9, 0x07e1, 0x07e6, 0x07f7, 0x07ff, 0x0806, 0x080c, 0x0811, + 0x0817, 0x0823, 0x0833, 0x083d, 0x0842, 0x0848, 0x0851, 0x085d, + 0x0865, 0x0879, 0x0881, 0x088d, 0x0897, 0x089e, 0x08a5, 0x08ad, + 0x08b5, 0x08cb, 0x08d6, 0x08e2, 0x08e7, 0x08f2, 0x0902, 0x0919, + 0x091e, 0x0942, 0x0946, 0x0950, 0x095a, 0x0961, 0x096c, 0x0978, + 0x097f, 0x0984, 0x0989, 0x099a, 0x09a0, 0x09a6, 0x09ae, 0x09b5, + 0x09bb, 0x09d1, 0x09e5, 0x09f7, 0x09fe, 0x0a08, 0x0a11, 0x0a2f, + 0x0a38, 0x0a4f, 0x0a71, 0x0a78, 0x0a7f, 0x0a8e, 0x0a93, 0x0a99, + // Entry 100 - 13F + 0x0a9e, 0x0aa5, 0x0aaf, 0x0ab5, 0x0abd, 0x0acf, 0x0ad4, 0x0adb, + 0x0aea, 0x0af4, 0x0afb, 0x0b0c, 0x0b1e, 0x0b2d, 0x0b3c, 0x0b49, + 0x0b59, 0x0b62, 0x0b81, 0x0b8a, 0x0b96, 0x0b9d, 0x0bad, 0x0bb5, + 0x0bc0, 0x0bc9, 0x0bdd, 0x0be6, 0x0bea, 0x0bf4, 0x0c02, 0x0c07, + 0x0c14, 0x0c21, 0x0c30, 0x0c30, 0x0c3d, }, }, { // da @@ -34078,7 +36119,7 @@ var regionHeaders = [252]header{ }, { // de-CH "BruneiBotswanaWeissrusslandKapverdenGrossbritannienÄusseres OzeanienSalo" + - "mon-InselnZimbabwe", + "mon-InselnOsttimorZimbabwe", []uint16{ // 261 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -34112,12 +36153,12 @@ var regionHeaders = [252]header{ 0x0045, 0x0045, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, - 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, - 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, - 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, - 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, + 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x005b, 0x005b, + 0x005b, 0x005b, 0x005b, 0x005b, 0x005b, 0x005b, 0x005b, 0x005b, + 0x005b, 0x005b, 0x005b, 0x005b, 0x005b, 0x005b, 0x005b, 0x005b, + 0x005b, 0x005b, 0x005b, 0x005b, 0x005b, 0x005b, 0x005b, 0x005b, // Entry 100 - 13F - 0x0053, 0x0053, 0x0053, 0x0053, 0x005b, + 0x005b, 0x005b, 0x005b, 0x005b, 0x0063, }, }, {}, // de-LU @@ -34243,7 +36284,7 @@ var regionHeaders = [252]header{ "aMelaneziskaMikroneziska (kupowy region)PolyneziskaAzijacentralna Az" + "ijapódwjacorna AzijaEuropapódzajtšna Europapódpołnocna Europapódwjac" + "orna EuropaŁatyńska Amerika", - []uint16{ // 292 elements + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0009, 0x0010, 0x002c, 0x0037, 0x0048, 0x0050, 0x0059, 0x0062, 0x0068, 0x0071, 0x007c, 0x008a, 0x0093, 0x009d, 0x00a2, @@ -34285,7 +36326,7 @@ var regionHeaders = [252]header{ 0x0b3d, 0x0b53, 0x0b5c, 0x0b6f, 0x0b80, 0x0b93, 0x0ba7, 0x0bb7, 0x0bcc, 0x0bd3, 0x0bf3, 0x0bfc, 0x0c0e, 0x0c22, 0x0c36, 0x0c4b, 0x0c57, 0x0c62, 0x0c7e, 0x0c89, 0x0c8e, 0x0c9d, 0x0caf, 0x0cb5, - 0x0cc8, 0x0cdc, 0x0cef, 0x0d01, + 0x0cc8, 0x0cdc, 0x0cef, 0x0cef, 0x0d01, }, }, { // dua @@ -34406,7 +36447,7 @@ var regionHeaders = [252]header{ "་མའི་ཀྲོ་ནི་ཤི་ཡཔོ་ལི་ནི་ཤི་ཡཨེ་ཤི་ཡསྦུག་ཕྱོགས་ཀྱི་ཨེ་ཤི་ཡནུབ་ཕྱོག" + "ས་ཀྱི་ཨེ་ཤི་ཡཡུ་རོབཤར་ཕྱོགས་ཀྱི་ཡུ་རོབབྱང་ཕྱོགས་ཀྱི་ཡུ་རོབནུབ་ཕྱོག" + "ས་ཀྱི་ཡུ་རོབལེ་ཊིནཨ་མི་རི་ཀ", - []uint16{ // 292 elements + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0039, 0x0051, 0x00a4, 0x00cb, 0x0118, 0x012d, 0x014e, 0x016c, 0x0184, 0x01d5, 0x01f6, 0x0241, 0x025f, 0x0289, 0x029e, @@ -34448,7 +36489,7 @@ var regionHeaders = [252]header{ 0x252c, 0x2553, 0x2571, 0x25b0, 0x25e6, 0x2622, 0x2661, 0x26a3, 0x26ca, 0x26ee, 0x2733, 0x2757, 0x2793, 0x27ba, 0x2802, 0x2826, 0x2859, 0x287d, 0x28c8, 0x28ef, 0x2904, 0x2946, 0x2985, 0x2997, - 0x29d0, 0x2a0c, 0x2a48, 0x2a75, + 0x29d0, 0x2a0c, 0x2a48, 0x2a48, 0x2a75, }, }, { // ebu @@ -34597,7 +36638,7 @@ var regionHeaders = [252]header{ "nesia nutomeMikronesiaPɔlinesia nutomeAsia nutomeTitina Asia nutomeƔ" + "etoɖoƒelɔƒo Asia nutomeEuropa nutomeƔedzeƒe Europa nutomeDziehelɔƒo " + "Europa nutomeƔetoɖoƒelɔƒo Europa nutomeLatin Amerika nutome", - []uint16{ // 292 elements + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x001b, 0x0029, 0x0044, 0x0056, 0x0073, 0x0082, 0x0090, 0x009e, 0x00ab, 0x00bb, 0x00cb, 0x00df, 0x00ed, 0x00fd, 0x0109, @@ -34639,7 +36680,7 @@ var regionHeaders = [252]header{ 0x1135, 0x114b, 0x1159, 0x1178, 0x118d, 0x11a4, 0x11b8, 0x11cc, 0x11e7, 0x11f5, 0x1210, 0x121f, 0x1234, 0x124d, 0x126c, 0x1287, 0x12a8, 0x12b8, 0x12c2, 0x12d3, 0x12de, 0x12f0, 0x130d, 0x131a, - 0x1331, 0x134b, 0x136a, 0x137e, + 0x1331, 0x134b, 0x136a, 0x136a, 0x137e, }, }, { // el @@ -34651,6 +36692,11 @@ var regionHeaders = [252]header{ enRegionIdx, }, {}, // en-AU + {}, // en-CA + { // en-GB + enGBRegionStr, + enGBRegionIdx, + }, {}, // en-IN {}, // en-NZ { // eo @@ -34736,8 +36782,8 @@ var regionHeaders = [252]header{ }, { // es-AR "Bosnia y HerzegovinaTristán de AcuñaTimor-LesteIslas menores alejadas de" + - " EE. UU.", - []uint16{ // 242 elements + " EE. UU.Islas Vírgenes de EE. UU.", + []uint16{ // 251 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -34772,7 +36818,8 @@ var regionHeaders = [252]header{ 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, - 0x0031, 0x0052, + 0x0031, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x006c, }, }, { // es-BO @@ -34859,8 +36906,8 @@ var regionHeaders = [252]header{ }, { // es-CO "Bosnia y HerzegovinaTristán de AcuñaTimor-LesteIslas menores alejadas de" + - " EE. UU.", - []uint16{ // 242 elements + " EE. UU.Islas Vírgenes de EE. UU.", + []uint16{ // 251 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -34895,7 +36942,8 @@ var regionHeaders = [252]header{ 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, - 0x0031, 0x0052, + 0x0031, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0052, 0x006c, }, }, { // es-CR @@ -35104,11 +37152,12 @@ var regionHeaders = [252]header{ }, }, { // es-MX - "Bosnia y HerzegovinaTristán de AcuñaTimor-LesteIslas Ultramarinas Menore" + - "s de Estados UnidosÁfrica OccidentalÁfrica OrientalÁfrica del NorteÁ" + - "frica CentralÁfrica del SurAsia OrientalAsia del SurSudeste Asiático" + - "Europa del SurAsia CentralAsia OccidentalEuropa OrientalEuropa del N" + - "orteEuropa Occidental", + "Bosnia y HerzegovinaCôte d’Ivoirezona euroGuernseyTristán de AcuñaTimor-" + + "LesteIslas menores alejadas de EE. UU.UNIslas Vírgenes de EE. UU.Áfr" + + "ica OccidentalÁfrica OrientalÁfrica septentrionalÁfrica meridionalAs" + + "ia OrientalAsia meridionalSudeste AsiáticoEuropa meridionalRegión de" + + " MicronesiaAsia OccidentalEuropa OrientalEuropa septentrionalEuropa " + + "Occidental", []uint16{ // 291 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -35116,42 +37165,42 @@ var regionHeaders = [252]header{ 0x0000, 0x0000, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, - 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, - 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, - 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0024, 0x0024, 0x0024, + 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, + 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, // Entry 40 - 7F - 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, - 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, - 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, - 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, - 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, - 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, - 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, - 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, + 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, 0x0024, + 0x0024, 0x0024, 0x0024, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, // Entry 80 - BF - 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, - 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, - 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, - 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, - 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, - 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, - 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, - 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, - // Entry C0 - FF - 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, - 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, - 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, - 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0026, 0x0026, - 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0031, 0x0031, - 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, - 0x0031, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, - 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + // Entry C0 - FF + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, + 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0047, 0x0047, + 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0052, 0x0052, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, + 0x0052, 0x0073, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, 0x0075, + 0x0075, 0x0075, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, // Entry 100 - 13F - 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, 0x005d, - 0x005d, 0x005d, 0x005d, 0x006f, 0x006f, 0x007f, 0x0090, 0x009f, - 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00bb, 0x00c7, 0x00d8, 0x00e6, - 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00e6, 0x00f2, 0x0101, 0x0101, - 0x0110, 0x0120, 0x0131, + 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, 0x008f, + 0x008f, 0x008f, 0x008f, 0x00a1, 0x00a1, 0x00b1, 0x00c6, 0x00c6, + 0x00d8, 0x00d8, 0x00d8, 0x00d8, 0x00e5, 0x00f4, 0x0105, 0x0116, + 0x0116, 0x0116, 0x012b, 0x012b, 0x012b, 0x012b, 0x013a, 0x013a, + 0x0149, 0x015d, 0x016e, }, }, { // es-NI @@ -35399,43 +37448,55 @@ var regionHeaders = [252]header{ }, }, { // es-US - "Islas menores alejadas de EE. UU.", - []uint16{ // 242 elements + "Isla de la AscensiónCôte d’Ivoirezona euroGuernseyTerritorios alejados d" + + "e OceaníaTimor-LesteIslas menores alejadas de EE. UU.Islas Vírgenes " + + "de EE. UU.África occidentalÁfrica orientalÁfrica septentrionalÁfrica" + + " meridionalAsia orientalAsia meridionalSudeste asiáticoEuropa meridi" + + "onalRegión de MicronesiaAsia occidentalEuropa orientalEuropa septent" + + "rionalEuropa occidental", + []uint16{ // 291 elements // Entry 0 - 3F - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, + 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0025, 0x0025, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, // Entry 40 - 7F - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, + 0x0025, 0x0025, 0x0025, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, + 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x002e, 0x0036, + 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, + 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, + 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, + 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, + 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, // Entry 80 - BF - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, + 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, + 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, + 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, + 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, + 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, + 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, + 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036, // Entry C0 - FF - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0021, + 0x0036, 0x0036, 0x0036, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, + 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0061, 0x0061, + 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, + 0x0061, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, + 0x0082, 0x0082, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, + // Entry 100 - 13F + 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, + 0x009c, 0x009c, 0x009c, 0x00ae, 0x00ae, 0x00be, 0x00d3, 0x00d3, + 0x00e5, 0x00e5, 0x00e5, 0x00e5, 0x00f2, 0x0101, 0x0112, 0x0123, + 0x0123, 0x0123, 0x0138, 0x0138, 0x0138, 0x0138, 0x0147, 0x0147, + 0x0156, 0x016a, 0x017b, }, }, { // es-VE @@ -35485,95 +37546,94 @@ var regionHeaders = [252]header{ }, { // eu "Ascension uharteaAndorraArabiar Emirerri BatuakAfganistanAntigua eta Bar" + - "budaAngilaAlbaniaArmeniaAngolaAntartikaArgentinaAmerikar SamoaAustri" + - "aAustraliaArubaAland uharteakAzerbaijanBosnia-HerzegovinaBarbadosBan" + - "gladeshBelgikaBurkina FasoBulgariaBahrainBurundiBeninSaint Barthélem" + - "yBermudaBruneiBoliviaKaribeko HerbehereakBrasilBahamakBhutanBouvet u" + - "harteaBotswanaBielorrusiaBelizeKanadaCocos uharteakKongoko Errepubli" + - "ka DemokratikoaAfrika Erdiko ErrepublikaKongo (Brazzaville)SuitzaBol" + - "i KostaCook uharteakTxileKamerunTxinaKolonbiaClipperton uharteaCosta" + - " RicaKubaCabo VerdeCuraçaoChristmas uharteaZipreTxekiar ErrepublikaA" + - "lemaniaDiego GarciaDjibutiDanimarkaDominikaDominikar ErrepublikaAlje" + - "riaCeuta eta MelillaEkuadorEstoniaEgiptoMendebaldeko SaharaEritreaEs" + - "painiaEtiopiaEuropar BatasunaFinlandiaFijiMalvinakMikronesiaFaroe uh" + - "arteakFrantziaGabonErresuma BatuaGrenadaGeorgiaGuyana FrantsesaGuern" + - "eseyGhanaGibraltarGroenlandiaGambiaGineaGuadalupeEkuatore GineaGrezi" + - "aHegoaldeko Georgia eta Hegoaldeko Sandwich uharteakGuatemalaGuamGin" + - "ea-BissauGuyanaHong Kong AEB TxinaHeard eta McDonald uharteakHondura" + - "sKroaziaHaitiHungariaKanariakIndonesiaIrlandaIsraelMan uharteaIndiaI" + - "ndiako Ozeanoko lurralde britainiarraIrakIranIslandiaItaliaJerseyJam" + - "aikaJordaniaJaponiaKenyaKirgizistanKanbodiaKiribatiKomoreakSaint Kit" + - "ts eta NevisIpar KoreaHego KoreaKuwaitKaiman uharteakKazakhstanLaosL" + - "ibanoSanta LuziaLiechtensteinSri LankaLiberiaLesothoLituaniaLuxenbur" + - "goLetoniaLibiaMarokoMonakoMoldaviaMontenegroSan MartinMadagaskarMars" + - "hall uharteakMazedoniaMaliMyanmar (Birmania)MongoliaMacau AEB TxinaI" + - "parraldeko Mariana uharteakMartinikaMauritaniaMontserratMaltaMaurizi" + - "oMaldivakMalawiMexikoMalaysiaMozambikeNamibiaKaledonia BerriaNigerNo" + - "rfolk uharteaNigeriaNikaraguaHerbehereakNorvegiaNepalNauruNiueZeelan" + - "da BerriaOmanPanamaPeruPolinesia FrantsesaPapua Ginea BerriaFilipina" + - "kPakistanPoloniaSaint-Pierre eta MikelunePitcairn uharteakPuerto Ric" + - "oPalestinako LurraldeakPortugalPalauParaguaiQatarMugaz kanpoko Ozean" + - "iaReunionErrumaniaSerbiaErrusiaRuandaSaudi ArabiaSalomon uharteakSey" + - "chelleakSudanSuediaSingapurSanta HelenaEsloveniaSvalbard eta Jan May" + - "en uharteakEslovakiaSierra LeonaSan MarinoSenegalSomaliaSurinamHego " + - "SudanSao Tome eta PrincipeEl SalvadorSint MaartenSiriaSwazilandiaTri" + - "stan da CunhaTurk eta Caico uharteakTxadHegoaldeko lurralde frantses" + - "akTogoThailandiaTajikistanTokelauEkialdeko TimorTurkmenistanTunisiaT" + - "ongaTurkiaTrinidad eta TobagoTuvaluTaiwanTanzaniaUkrainaUgandaAmerik" + - "etako Estatu Batuetako Kanpoaldeko Uharte TxikiakAmeriketako Estatu " + - "BatuakUruguaiUzbekistanVatikano HiriaSaint Vincent eta GrenadinakVen" + - "ezuelaBirjina uharte britainiarrakBirjina uharte amerikarrakVietnamV" + - "anuatuWallis eta FutunaSamoaKosovoYemenMayotteHegoafrikaZambiaZimbab" + - "weEskualde ezezagunaMunduaAfrikaIpar AmerikaHego AmerikaOzeaniaAfrik" + - "a mendebaldeaErdialdeko AmerikaAfrika ekialdeaAfrika iparraldeaErdia" + - "ldeko AfrikaAfrika hegoaldeaAmerikaAmerika iparraldeaKaribeaAsia eki" + - "aldeaAsia hegoaldeaAsia hego-ekialdeaEuropa hegoaldeaAustralasiaMela" + - "nesiaMikronesia eskualdeaPolinesiaAsiaAsia erdialdeaAsia mendebaldea" + - "EuropaEuropa ekialdeaEuropa iparraldeaEuropa mendebaldeaLatinoamerik" + - "a", - []uint16{ // 292 elements - // Entry 0 - 3F - 0x0000, 0x0011, 0x0018, 0x002f, 0x0039, 0x004c, 0x0052, 0x0059, - 0x0060, 0x0066, 0x006f, 0x0078, 0x0086, 0x008d, 0x0096, 0x009b, - 0x00a9, 0x00b3, 0x00c5, 0x00cd, 0x00d7, 0x00de, 0x00ea, 0x00f2, - 0x00f9, 0x0100, 0x0105, 0x0116, 0x011d, 0x0123, 0x012a, 0x013e, - 0x0144, 0x014b, 0x0151, 0x015f, 0x0167, 0x0172, 0x0178, 0x017e, - 0x018c, 0x01ac, 0x01c5, 0x01d8, 0x01de, 0x01e8, 0x01f5, 0x01fa, - 0x0201, 0x0206, 0x020e, 0x0220, 0x022a, 0x022e, 0x0238, 0x0240, - 0x0251, 0x0256, 0x0269, 0x0271, 0x027d, 0x0284, 0x028d, 0x0295, - // Entry 40 - 7F - 0x02aa, 0x02b1, 0x02c2, 0x02c9, 0x02d0, 0x02d6, 0x02e9, 0x02f0, - 0x02f8, 0x02ff, 0x030f, 0x030f, 0x0318, 0x031c, 0x0324, 0x032e, - 0x033c, 0x0344, 0x0349, 0x0357, 0x035e, 0x0365, 0x0375, 0x037e, - 0x0383, 0x038c, 0x0397, 0x039d, 0x03a2, 0x03ab, 0x03b9, 0x03bf, - 0x03f2, 0x03fb, 0x03ff, 0x040b, 0x0411, 0x0424, 0x043f, 0x0447, - 0x044e, 0x0453, 0x045b, 0x0463, 0x046c, 0x0473, 0x0479, 0x0484, - 0x0489, 0x04af, 0x04b3, 0x04b7, 0x04bf, 0x04c5, 0x04cb, 0x04d2, - 0x04da, 0x04e1, 0x04e6, 0x04f1, 0x04f9, 0x0501, 0x0509, 0x051e, - // Entry 80 - BF - 0x0528, 0x0532, 0x0538, 0x0547, 0x0551, 0x0555, 0x055b, 0x0566, - 0x0573, 0x057c, 0x0583, 0x058a, 0x0592, 0x059c, 0x05a3, 0x05a8, - 0x05ae, 0x05b4, 0x05bc, 0x05c6, 0x05d0, 0x05da, 0x05eb, 0x05f4, - 0x05f8, 0x060a, 0x0612, 0x0621, 0x063d, 0x0646, 0x0650, 0x065a, - 0x065f, 0x0667, 0x066f, 0x0675, 0x067b, 0x0683, 0x068c, 0x0693, - 0x06a3, 0x06a8, 0x06b7, 0x06be, 0x06c7, 0x06d2, 0x06da, 0x06df, - 0x06e4, 0x06e8, 0x06f7, 0x06fb, 0x0701, 0x0705, 0x0718, 0x072a, - 0x0733, 0x073b, 0x0742, 0x075b, 0x076c, 0x0777, 0x078d, 0x0795, - // Entry C0 - FF - 0x079a, 0x07a2, 0x07a7, 0x07bc, 0x07c3, 0x07cc, 0x07d2, 0x07d9, - 0x07df, 0x07eb, 0x07fb, 0x0806, 0x080b, 0x0811, 0x0819, 0x0825, - 0x082e, 0x084d, 0x0856, 0x0862, 0x086c, 0x0873, 0x087a, 0x0881, - 0x088b, 0x08a0, 0x08ab, 0x08b7, 0x08bc, 0x08c7, 0x08d7, 0x08ee, - 0x08f2, 0x0910, 0x0914, 0x091e, 0x0928, 0x092f, 0x093e, 0x094a, - 0x0951, 0x0956, 0x095c, 0x096f, 0x0975, 0x097b, 0x0983, 0x098a, - 0x0990, 0x09c7, 0x09c7, 0x09e0, 0x09e7, 0x09f1, 0x09ff, 0x0a1b, - 0x0a24, 0x0a40, 0x0a5a, 0x0a61, 0x0a68, 0x0a79, 0x0a7e, 0x0a84, - // Entry 100 - 13F - 0x0a89, 0x0a90, 0x0a9a, 0x0aa0, 0x0aa8, 0x0aba, 0x0ac0, 0x0ac6, - 0x0ad2, 0x0ade, 0x0ae5, 0x0af7, 0x0b09, 0x0b18, 0x0b29, 0x0b3a, - 0x0b4a, 0x0b51, 0x0b63, 0x0b6a, 0x0b77, 0x0b85, 0x0b97, 0x0ba7, - 0x0bb2, 0x0bbb, 0x0bcf, 0x0bd8, 0x0bdc, 0x0bea, 0x0bfa, 0x0c00, - 0x0c0f, 0x0c20, 0x0c32, 0x0c3f, + "budaAingiraAlbaniaArmeniaAngolaAntartikaArgentinaSamoa Estatubatuarr" + + "aAustriaAustraliaArubaAland uharteakAzerbaijanBosnia-HerzegovinaBarb" + + "adosBangladeshBelgikaBurkina FasoBulgariaBahrainBurundiBeninSaint Ba" + + "rthélemyBermudaBruneiBoliviaKaribeko HerbehereakBrasilBahamakBhutanB" + + "ouvet uharteaBotswanaBielorrusiaBelizeKanadaCocos uharteakKongoko Er" + + "republika DemokratikoaAfrika Erdiko ErrepublikaKongoSuitzaBoli Kosta" + + "Cook uharteakTxileKamerunTxinaKolonbiaClipperton uharteaCosta RicaKu" + + "baCabo VerdeCuraçaoChristmas uharteaZipreTxekiaAlemaniaDiego GarcíaD" + + "jibutiDanimarkaDominikaDominikar ErrepublikaAljeriaCeuta eta Melilla" + + "EkuadorEstoniaEgiptoMendebaldeko SaharaEritreaEspainiaEtiopiaEuropar" + + " BatasunaEuroguneaFinlandiaFijiMalvinakMikronesiaFaroe uharteakFrant" + + "ziaGabonErresuma BatuaGrenadaGeorgiaGuyana FrantsesaGuerneseyGhanaGi" + + "braltarGroenlandiaGambiaGineaGuadalupeEkuatore GineaGreziaHegoaldeko" + + " Georgia eta Hegoaldeko Sandwich uharteakGuatemalaGuamGinea BissauGu" + + "yanaHong Kong Txinako AEBHeard eta McDonald uharteakHondurasKroaziaH" + + "aitiHungariaKanariakIndonesiaIrlandaIsraelMan uharteaIndiaIndiako Oz" + + "eanoko lurralde britainiarraIrakIranIslandiaItaliaJerseyJamaikaJorda" + + "niaJaponiaKenyaKirgizistanKanbodiaKiribatiKomoreakSaint Kitts eta Ne" + + "visIpar KoreaHego KoreaKuwaitKaiman uharteakKazakhstanLaosLibanoSant" + + "a LuziaLiechtensteinSri LankaLiberiaLesothoLituaniaLuxenburgoLetonia" + + "LibiaMarokoMonakoMoldaviaMontenegroSan MartinMadagaskarMarshall Uhar" + + "teakMazedoniaMaliMyanmar (Birmania)MongoliaMacau Txinako AEBIpar Mar" + + "iana uharteakMartinikaMauritaniaMontserratMaltaMaurizioMaldivakMalaw" + + "iMexikoMalaysiaMozambikeNamibiaKaledonia BerriaNigerNorfolk uharteaN" + + "igeriaNikaraguaHerbehereakNorvegiaNepalNauruNiueZeelanda BerriaOmanP" + + "anamaPeruPolinesia FrantsesaPapua Ginea BerriaFilipinakPakistanPolon" + + "iaSaint-Pierre eta MikelunePitcairn uharteakPuerto RicoPalestinako L" + + "urraldeakPortugalPalauParaguaiQatarMugaz kanpoko OzeaniaReunionErrum" + + "aniaSerbiaErrusiaRuandaSaudi ArabiaSalomon UharteakSeychelleakSudanS" + + "uediaSingapurSanta HelenaEsloveniaSvalbard eta Jan Mayen uharteakEsl" + + "ovakiaSierra LeonaSan MarinoSenegalSomaliaSurinamHego SudanSao Tome " + + "eta PrincipeEl SalvadorSint MaartenSiriaSwazilandiaTristan da CunhaT" + + "urk eta Caico uharteakTxadHegoaldeko lurralde frantsesakTogoThailand" + + "iaTajikistanTokelauEkialdeko TimorTurkmenistanTunisiaTongaTurkiaTrin" + + "idad eta TobagoTuvaluTaiwanTanzaniaUkrainaUgandaAmeriketako Estatu B" + + "atuetako Kanpoaldeko Uharte TxikiakNazio BatuakAmeriketako Estatu Ba" + + "tuakUruguaiUzbekistanVatikano HiriaSaint Vincent eta GrenadinakVenez" + + "uelaBirjina uharte britainiarrakBirjina uharte amerikarrakVietnamVan" + + "uatuWallis eta FutunaSamoaKosovoYemenMayotteHegoafrikaZambiaZimbabwe" + + "Eskualde ezezagunaMunduaAfrikaIpar AmerikaHego AmerikaOzeaniaAfrika " + + "mendebaldeaErdialdeko AmerikaAfrika ekialdeaAfrika iparraldeaErdiald" + + "eko AfrikaAfrika hegoaldeaAmerikaAmerika iparraldeaKaribeaAsia ekial" + + "deaAsia hegoaldeaAsia hego-ekialdeaEuropa hegoaldeaAustralasiaMelane" + + "siaMikronesia eskualdeaPolinesiaAsiaAsia erdialdeaAsia mendebaldeaEu" + + "ropaEuropa ekialdeaEuropa iparraldeaEuropa mendebaldeaLatinoamerika", + []uint16{ // 293 elements + // Entry 0 - 3F + 0x0000, 0x0011, 0x0018, 0x002f, 0x0039, 0x004c, 0x0053, 0x005a, + 0x0061, 0x0067, 0x0070, 0x0079, 0x008d, 0x0094, 0x009d, 0x00a2, + 0x00b0, 0x00ba, 0x00cc, 0x00d4, 0x00de, 0x00e5, 0x00f1, 0x00f9, + 0x0100, 0x0107, 0x010c, 0x011d, 0x0124, 0x012a, 0x0131, 0x0145, + 0x014b, 0x0152, 0x0158, 0x0166, 0x016e, 0x0179, 0x017f, 0x0185, + 0x0193, 0x01b3, 0x01cc, 0x01d1, 0x01d7, 0x01e1, 0x01ee, 0x01f3, + 0x01fa, 0x01ff, 0x0207, 0x0219, 0x0223, 0x0227, 0x0231, 0x0239, + 0x024a, 0x024f, 0x0255, 0x025d, 0x026a, 0x0271, 0x027a, 0x0282, + // Entry 40 - 7F + 0x0297, 0x029e, 0x02af, 0x02b6, 0x02bd, 0x02c3, 0x02d6, 0x02dd, + 0x02e5, 0x02ec, 0x02fc, 0x0305, 0x030e, 0x0312, 0x031a, 0x0324, + 0x0332, 0x033a, 0x033f, 0x034d, 0x0354, 0x035b, 0x036b, 0x0374, + 0x0379, 0x0382, 0x038d, 0x0393, 0x0398, 0x03a1, 0x03af, 0x03b5, + 0x03e8, 0x03f1, 0x03f5, 0x0401, 0x0407, 0x041c, 0x0437, 0x043f, + 0x0446, 0x044b, 0x0453, 0x045b, 0x0464, 0x046b, 0x0471, 0x047c, + 0x0481, 0x04a7, 0x04ab, 0x04af, 0x04b7, 0x04bd, 0x04c3, 0x04ca, + 0x04d2, 0x04d9, 0x04de, 0x04e9, 0x04f1, 0x04f9, 0x0501, 0x0516, + // Entry 80 - BF + 0x0520, 0x052a, 0x0530, 0x053f, 0x0549, 0x054d, 0x0553, 0x055e, + 0x056b, 0x0574, 0x057b, 0x0582, 0x058a, 0x0594, 0x059b, 0x05a0, + 0x05a6, 0x05ac, 0x05b4, 0x05be, 0x05c8, 0x05d2, 0x05e3, 0x05ec, + 0x05f0, 0x0602, 0x060a, 0x061b, 0x0630, 0x0639, 0x0643, 0x064d, + 0x0652, 0x065a, 0x0662, 0x0668, 0x066e, 0x0676, 0x067f, 0x0686, + 0x0696, 0x069b, 0x06aa, 0x06b1, 0x06ba, 0x06c5, 0x06cd, 0x06d2, + 0x06d7, 0x06db, 0x06ea, 0x06ee, 0x06f4, 0x06f8, 0x070b, 0x071d, + 0x0726, 0x072e, 0x0735, 0x074e, 0x075f, 0x076a, 0x0780, 0x0788, + // Entry C0 - FF + 0x078d, 0x0795, 0x079a, 0x07af, 0x07b6, 0x07bf, 0x07c5, 0x07cc, + 0x07d2, 0x07de, 0x07ee, 0x07f9, 0x07fe, 0x0804, 0x080c, 0x0818, + 0x0821, 0x0840, 0x0849, 0x0855, 0x085f, 0x0866, 0x086d, 0x0874, + 0x087e, 0x0893, 0x089e, 0x08aa, 0x08af, 0x08ba, 0x08ca, 0x08e1, + 0x08e5, 0x0903, 0x0907, 0x0911, 0x091b, 0x0922, 0x0931, 0x093d, + 0x0944, 0x0949, 0x094f, 0x0962, 0x0968, 0x096e, 0x0976, 0x097d, + 0x0983, 0x09ba, 0x09c6, 0x09df, 0x09e6, 0x09f0, 0x09fe, 0x0a1a, + 0x0a23, 0x0a3f, 0x0a59, 0x0a60, 0x0a67, 0x0a78, 0x0a7d, 0x0a83, + // Entry 100 - 13F + 0x0a88, 0x0a8f, 0x0a99, 0x0a9f, 0x0aa7, 0x0ab9, 0x0abf, 0x0ac5, + 0x0ad1, 0x0add, 0x0ae4, 0x0af6, 0x0b08, 0x0b17, 0x0b28, 0x0b39, + 0x0b49, 0x0b50, 0x0b62, 0x0b69, 0x0b76, 0x0b84, 0x0b96, 0x0ba6, + 0x0bb1, 0x0bba, 0x0bce, 0x0bd7, 0x0bdb, 0x0be9, 0x0bf9, 0x0bff, + 0x0c0e, 0x0c1f, 0x0c31, 0x0c31, 0x0c3e, }, }, { // ewo @@ -35655,55 +37715,55 @@ var regionHeaders = [252]header{ }, { // fa-AF "اندوراانتیگوا و باربوداالبانیاانگولاانترکتیکاارجنتاینآسترالیابوسنیا و هر" + - "زه\u200cگوینابنگله\u200cدیشبلجیمبلغاریابرونیبولیویابرازیلبهاماسروسی" + - "هٔ سفیدکانگو - کینشاساکانگو - برازویلسویسچلیکولمبیاکاستریکاکیوبادنم" + - "ارکاستونیااریتریاهسپانیهایتوپیافنلندمیکرونزیاگریناداگاناگینیاگینیا " + - "استواییگواتیمالاگینیا بیسائوگیاناهاندوراسکروشیاهایتیاندونیزیاآیرلند" + - "آیسلندجاپانکینیاقرغزستانکمپوچیاکوریای شمالیکوریای جنوبیسریلانکالیسو" + - "تولتوانیالاتویالیبیامادغاسکرمنگولیاموریتانیامالتامکسیکومالیزیاموزمب" + - "یقنایجرنیجریانیکاراگواهالندناروینیپالزیلاند جدیدپانامهپیروپاپوا نیو" + - " گینیاپولندپرتگالپاراگوایرومانیاروآنداسویدنسینگاپورسلونیاسلواکیاسیرا" + - "لیونسینیگالسومالیهالسلوادورتاجکستاناکراینیوگاندایوروگوایسنت وینسنت " + - "و گرنادین\u200cهاونزویلاکوسوازیمبابوی", + "زه\u200cگوینابنگله\u200cدیشبلجیمبلغاریابرونیبولیویابرازیلبهاماسکانگ" + + "و - کینشاساکانگو - برازویلسویسچلیکولمبیاکاستریکاکیوبادنمارکاستونیاا" + + "ریتریاهسپانیهایتوپیافنلندمیکرونزیاگریناداگاناگینیاگینیا استواییگوات" + + "یمالاگینیا بیسائوگیاناهاندوراسکروشیاهایتیاندونیزیاآیرلندآیسلندجاپان" + + "کینیاقرغزستانکمپوچیاکوریای شمالیکوریای جنوبیسریلانکالیسوتولتوانیالا" + + "تویالیبیامادغاسکرمنگولیاموریتانیامالتامکسیکومالیزیاموزمبیقنایجرنیجر" + + "یانیکاراگواهالندناروینیپالزیلاند جدیدپانامهپیروپاپوا نیو گینیاپولند" + + "پرتگالپاراگوایرومانیاروآنداسویدنسینگاپورسلونیاسلواکیاسیرالیونسینیگا" + + "لسومالیهالسلوادورتاجکستاناکراینیوگاندایوروگوایسنت وینسنت و گرنادین" + + "\u200cهاونزویلاکوسوازیمبابوی", []uint16{ // 261 elements // Entry 0 - 3F 0x0000, 0x0000, 0x000c, 0x000c, 0x000c, 0x002c, 0x002c, 0x003a, 0x003a, 0x0046, 0x0058, 0x0068, 0x0068, 0x0068, 0x0078, 0x0078, 0x0078, 0x0078, 0x009d, 0x009d, 0x00b0, 0x00ba, 0x00ba, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00d2, 0x00e0, 0x00e0, - 0x00ec, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x010d, 0x010d, 0x010d, - 0x010d, 0x0128, 0x0128, 0x0143, 0x014b, 0x014b, 0x014b, 0x0151, - 0x0151, 0x0151, 0x015f, 0x015f, 0x016f, 0x0179, 0x0179, 0x0179, - 0x0179, 0x0179, 0x0179, 0x0179, 0x0179, 0x0179, 0x0185, 0x0185, - // Entry 40 - 7F - 0x0185, 0x0185, 0x0185, 0x0185, 0x0193, 0x0193, 0x0193, 0x01a1, - 0x01af, 0x01bd, 0x01bd, 0x01bd, 0x01c7, 0x01c7, 0x01c7, 0x01d9, - 0x01d9, 0x01d9, 0x01d9, 0x01d9, 0x01e7, 0x01e7, 0x01e7, 0x01e7, - 0x01ef, 0x01ef, 0x01ef, 0x01ef, 0x01f9, 0x01f9, 0x0212, 0x0212, - 0x0212, 0x0224, 0x0224, 0x023b, 0x0245, 0x0245, 0x0245, 0x0255, - 0x0261, 0x026b, 0x026b, 0x026b, 0x027d, 0x0289, 0x0289, 0x0289, - 0x0289, 0x0289, 0x0289, 0x0289, 0x0295, 0x0295, 0x0295, 0x0295, - 0x0295, 0x029f, 0x02a9, 0x02b9, 0x02c7, 0x02c7, 0x02c7, 0x02c7, - // Entry 80 - BF - 0x02de, 0x02f5, 0x02f5, 0x02f5, 0x02f5, 0x02f5, 0x02f5, 0x02f5, - 0x02f5, 0x0305, 0x0305, 0x0311, 0x031f, 0x031f, 0x032b, 0x0335, - 0x0335, 0x0335, 0x0335, 0x0335, 0x0335, 0x0345, 0x0345, 0x0345, - 0x0345, 0x0345, 0x0353, 0x0353, 0x0353, 0x0353, 0x0365, 0x0365, - 0x036f, 0x036f, 0x036f, 0x036f, 0x037b, 0x0389, 0x0397, 0x0397, - 0x0397, 0x03a1, 0x03a1, 0x03ad, 0x03bf, 0x03c9, 0x03d3, 0x03dd, - 0x03dd, 0x03dd, 0x03f2, 0x03f2, 0x03fe, 0x0406, 0x0406, 0x0422, - 0x0422, 0x0422, 0x042c, 0x042c, 0x042c, 0x042c, 0x042c, 0x0438, - // Entry C0 - FF - 0x0438, 0x0448, 0x0448, 0x0448, 0x0448, 0x0456, 0x0456, 0x0456, - 0x0462, 0x0462, 0x0462, 0x0462, 0x0462, 0x046c, 0x047c, 0x047c, - 0x0488, 0x0488, 0x0496, 0x04a6, 0x04a6, 0x04b4, 0x04c2, 0x04c2, - 0x04c2, 0x04c2, 0x04d4, 0x04d4, 0x04d4, 0x04d4, 0x04d4, 0x04d4, - 0x04d4, 0x04d4, 0x04d4, 0x04d4, 0x04e4, 0x04e4, 0x04e4, 0x04e4, - 0x04e4, 0x04e4, 0x04e4, 0x04e4, 0x04e4, 0x04e4, 0x04e4, 0x04f0, - 0x04fe, 0x04fe, 0x04fe, 0x04fe, 0x050e, 0x050e, 0x050e, 0x053a, - 0x0548, 0x0548, 0x0548, 0x0548, 0x0548, 0x0548, 0x0548, 0x0552, - // Entry 100 - 13F - 0x0552, 0x0552, 0x0552, 0x0552, 0x0562, + 0x00ec, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, 0x00f8, + 0x00f8, 0x0113, 0x0113, 0x012e, 0x0136, 0x0136, 0x0136, 0x013c, + 0x013c, 0x013c, 0x014a, 0x014a, 0x015a, 0x0164, 0x0164, 0x0164, + 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0164, 0x0170, 0x0170, + // Entry 40 - 7F + 0x0170, 0x0170, 0x0170, 0x0170, 0x017e, 0x017e, 0x017e, 0x018c, + 0x019a, 0x01a8, 0x01a8, 0x01a8, 0x01b2, 0x01b2, 0x01b2, 0x01c4, + 0x01c4, 0x01c4, 0x01c4, 0x01c4, 0x01d2, 0x01d2, 0x01d2, 0x01d2, + 0x01da, 0x01da, 0x01da, 0x01da, 0x01e4, 0x01e4, 0x01fd, 0x01fd, + 0x01fd, 0x020f, 0x020f, 0x0226, 0x0230, 0x0230, 0x0230, 0x0240, + 0x024c, 0x0256, 0x0256, 0x0256, 0x0268, 0x0274, 0x0274, 0x0274, + 0x0274, 0x0274, 0x0274, 0x0274, 0x0280, 0x0280, 0x0280, 0x0280, + 0x0280, 0x028a, 0x0294, 0x02a4, 0x02b2, 0x02b2, 0x02b2, 0x02b2, + // Entry 80 - BF + 0x02c9, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e0, + 0x02e0, 0x02f0, 0x02f0, 0x02fc, 0x030a, 0x030a, 0x0316, 0x0320, + 0x0320, 0x0320, 0x0320, 0x0320, 0x0320, 0x0330, 0x0330, 0x0330, + 0x0330, 0x0330, 0x033e, 0x033e, 0x033e, 0x033e, 0x0350, 0x0350, + 0x035a, 0x035a, 0x035a, 0x035a, 0x0366, 0x0374, 0x0382, 0x0382, + 0x0382, 0x038c, 0x038c, 0x0398, 0x03aa, 0x03b4, 0x03be, 0x03c8, + 0x03c8, 0x03c8, 0x03dd, 0x03dd, 0x03e9, 0x03f1, 0x03f1, 0x040d, + 0x040d, 0x040d, 0x0417, 0x0417, 0x0417, 0x0417, 0x0417, 0x0423, + // Entry C0 - FF + 0x0423, 0x0433, 0x0433, 0x0433, 0x0433, 0x0441, 0x0441, 0x0441, + 0x044d, 0x044d, 0x044d, 0x044d, 0x044d, 0x0457, 0x0467, 0x0467, + 0x0473, 0x0473, 0x0481, 0x0491, 0x0491, 0x049f, 0x04ad, 0x04ad, + 0x04ad, 0x04ad, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04bf, + 0x04bf, 0x04bf, 0x04bf, 0x04bf, 0x04cf, 0x04cf, 0x04cf, 0x04cf, + 0x04cf, 0x04cf, 0x04cf, 0x04cf, 0x04cf, 0x04cf, 0x04cf, 0x04db, + 0x04e9, 0x04e9, 0x04e9, 0x04e9, 0x04f9, 0x04f9, 0x04f9, 0x0525, + 0x0533, 0x0533, 0x0533, 0x0533, 0x0533, 0x0533, 0x0533, 0x053d, + // Entry 100 - 13F + 0x053d, 0x053d, 0x053d, 0x053d, 0x054d, }, }, { // ff @@ -35799,40 +37859,40 @@ var regionHeaders = [252]header{ "pertonKosta RikaKubaGrønhøvdaoyggjarCuraçaoJólaoyggjinKýprosKekkiaTý" + "sklandDiego GarciaDjibutiDanmarkDominikaDominikalýðveldiðAlgeriaCeut" + "a og MelillaEkvadorEstlandEgyptalandVestursaharaEritreaSpaniaEtiopia" + - "EvropasamveldiðFinnlandFijiFalklandsoyggjarMikronesiasamveldiðFøroya" + - "rFraklandGabonStórabretlandGrenadaGeorgiaFranska GujanaGuernseyGanaG" + - "ibraltarGrønlandGambiaGuineaGuadeloupeEkvatorguineaGrikkalandSuðurge" + - "orgia og SuðursandwichoyggjarGuatemalaGuamGuinea-BissauGujanaHong Ko" + - "ng SAR KinaHeard og McDonaldoyggjarHondurasKroatiaHaitiUngarnKanariu" + - "oyggjarIndonesiaÍrlandÍsraelIsle of ManIndiaStóra Bretlands Indiahav" + - "oyggjarIrakIranÍslandItaliaJerseyJamaikaJordanJapanKenjaKirgisiaKamb" + - "odjaKiribatiKomoroyggjarSt. Kitts & NevisNorðurkoreaSuðurkoreaKuvait" + - "CaymanoyggjarKasakstanLaosLibanonSt. LusiaLiktinsteinSri LankaLiberi" + - "aLesotoLitavaLuksemborgLettlandLibyaMarokkoMonakoMoldovaMontenegroSt" + - "-MartinMadagaskarMarshalloyggjarMakedóniaMaliMyanmar (Burma)Mongolia" + - "Makao SAR KinaNorðaru MariuoyggjarMartiniqueMóritaniaMontserratMalta" + - "MóritiusMaldivoyggjarMalaviMeksikoMalaisiaMosambikNamibiaNýkaledónia" + - "NigerNorfolksoyggjNigeriaNikaraguaNiðurlondNoregNepalNauruNiueNýsæla" + - "ndOmanPanamaPeruFranska PolynesiaPapua NýguineaFilipsoyggjarPakistan" + - "PóllandSaint Pierre og MiquelonPitcairnoyggjarPuerto RikoPalestinskt" + - " landøkiPortugalPalauParaguaiKatarfjarskoti OsianiaRéunionRumeniaSer" + - "biaRusslandRuandaSaudiarabiaSalomonoyggjarSeyskelloyggjarSudanSvørík" + - "iSingaporSt. HelenaSloveniaSvalbard & Jan MayenSlovakiaSierra LeonaS" + - "an MarinoSenegalSomaliaSurinamSuðursudanSao Tome & PrinsipiEl Salvad" + - "orSint MaartenSýriaSvasilandTristan da CunhaTurks- og CaicosoyggjarK" + - "jadFronsku sunnaru landaøkiTogoTailandTadsjikistanTokelauEysturtimor" + - "TurkmenistanTunesiaTongaTurkalandTrinidad & TobagoTuvaluTaivanTansan" + - "iaUkrainaUgandaSambandsríki Amerikas fjarskotnu oyggjarSambandsríki " + - "AmerikaUruguaiUsbekistanVatikanbýurSt. Vinsent & GrenadinoyggjarVene" + - "suelaStóra Bretlands JomfrúoyggjarSambandsríki Amerikas Jomfrúoyggja" + - "rVjetnamVanuatuWallis- og FutunaoyggjarSamoaKosovoJemenMayotteSuðura" + - "frikaSambiaSimbabviókent økiheimurAfrikaNorðuramerikaSuðuramerikaOsi" + - "aniaVesturafrikaMiðamerikaEysturafrikaNorðurafrikaMiðafrikasunnari p" + - "artur av AfrikaAmerikaAmerika norðanfyri MeksikoKaribiaEysturasiaSuð" + - "urasiaÚtsynningsasiaSuðurevropaAvstralasiaMelanesiaMikronesi økiPoly" + - "nesiaAsiaMiðasiaVesturasiaEvropaEysturevropaNorðurevropaVesturevropa" + - "Latínamerika", - []uint16{ // 292 elements + "EvropasamveldiðEvrasonaFinnlandFijiFalklandsoyggjarMikronesiasamveld" + + "iðFøroyarFraklandGabonStórabretlandGrenadaGeorgiaFranska GujanaGuern" + + "seyGanaGibraltarGrønlandGambiaGuineaGuadeloupeEkvatorguineaGrikkalan" + + "dSuðurgeorgia og SuðursandwichoyggjarGuatemalaGuamGuinea-BissauGujan" + + "aHong Kong SAR KinaHeard og McDonaldoyggjarHondurasKroatiaHaitiUngar" + + "nKanariuoyggjarIndonesiaÍrlandÍsraelIsle of ManIndiaStóra Bretlands " + + "IndiahavoyggjarIrakIranÍslandItaliaJerseyJamaikaJordanJapanKenjaKirg" + + "isiaKambodjaKiribatiKomoroyggjarSt. Kitts & NevisNorðurkoreaSuðurkor" + + "eaKuvaitCaymanoyggjarKasakstanLaosLibanonSt. LusiaLiktinsteinSri Lan" + + "kaLiberiaLesotoLitavaLuksemborgLettlandLibyaMarokkoMonakoMoldovaMont" + + "enegroSt-MartinMadagaskarMarshalloyggjarMakedóniaMaliMyanmar (Burma)" + + "MongoliaMakao SAR KinaNorðaru MariuoyggjarMartiniqueMóritaniaMontser" + + "ratMaltaMóritiusMaldivoyggjarMalaviMeksikoMalaisiaMosambikNamibiaNýk" + + "aledóniaNigerNorfolksoyggjNigeriaNikaraguaNiðurlondNoregNepalNauruNi" + + "ueNýsælandOmanPanamaPeruFranska PolynesiaPapua NýguineaFilipsoyggjar" + + "PakistanPóllandSaint Pierre og MiquelonPitcairnoyggjarPuerto RikoPal" + + "estinskt landøkiPortugalPalauParaguaiKatarfjarskoti OsianiaRéunionRu" + + "meniaSerbiaRusslandRuandaSaudiarabiaSalomonoyggjarSeyskelloyggjarSud" + + "anSvøríkiSingaporSt. HelenaSloveniaSvalbard & Jan MayenSlovakiaSierr" + + "a LeonaSan MarinoSenegalSomaliaSurinamSuðursudanSao Tome & PrinsipiE" + + "l SalvadorSint MaartenSýriaSvasilandTristan da CunhaTurks- og Caicos" + + "oyggjarKjadFronsku sunnaru landaøkiTogoTailandTadsjikistanTokelauEys" + + "turtimorTurkmenistanTunesiaTongaTurkalandTrinidad & TobagoTuvaluTaiv" + + "anTansaniaUkrainaUgandaSambandsríki Amerikas fjarskotnu oyggjarSamei" + + "ndu TjóðirSambandsríki AmerikaUruguaiUsbekistanVatikanbýurSt. Vinsen" + + "t & GrenadinoyggjarVenesuelaStóra Bretlands JomfrúoyggjarSambandsrík" + + "i Amerikas JomfrúoyggjarVjetnamVanuatuWallis- og FutunaoyggjarSamoaK" + + "osovoJemenMayotteSuðurafrikaSambiaSimbabviókent økiheimurAfrikaNorðu" + + "ramerikaSuðuramerikaOsianiaVesturafrikaMiðamerikaEysturafrikaNorðura" + + "frikaMiðafrikasunnari partur av AfrikaAmerikaAmerika norðanfyri Meks" + + "ikoKaribiaEysturasiaSuðurasiaÚtsynningsasiaSuðurevropaAvstralasiaMel" + + "anesiaMikronesi økiPolynesiaAsiaMiðasiaVesturasiaEvropaEysturevropaN" + + "orðurevropaVesturevropaLatínamerika", + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0009, 0x0010, 0x0024, 0x002e, 0x003f, 0x0047, 0x004e, 0x0055, 0x005b, 0x0064, 0x006d, 0x007e, 0x0089, 0x0092, 0x0097, @@ -35844,37 +37904,37 @@ var regionHeaders = [252]header{ 0x0227, 0x022e, 0x0234, 0x023d, 0x0249, 0x0250, 0x0257, 0x025f, // Entry 40 - 7F 0x0273, 0x027a, 0x028a, 0x0291, 0x0298, 0x02a2, 0x02ae, 0x02b5, - 0x02bb, 0x02c2, 0x02d2, 0x02d2, 0x02da, 0x02de, 0x02ee, 0x0302, - 0x030a, 0x0312, 0x0317, 0x0325, 0x032c, 0x0333, 0x0341, 0x0349, - 0x034d, 0x0356, 0x035f, 0x0365, 0x036b, 0x0375, 0x0382, 0x038c, - 0x03b2, 0x03bb, 0x03bf, 0x03cc, 0x03d2, 0x03e4, 0x03fc, 0x0404, - 0x040b, 0x0410, 0x0416, 0x0424, 0x042d, 0x0434, 0x043b, 0x0446, - 0x044b, 0x046b, 0x046f, 0x0473, 0x047a, 0x0480, 0x0486, 0x048d, - 0x0493, 0x0498, 0x049d, 0x04a5, 0x04ad, 0x04b5, 0x04c1, 0x04d2, - // Entry 80 - BF - 0x04de, 0x04e9, 0x04ef, 0x04fc, 0x0505, 0x0509, 0x0510, 0x0519, - 0x0524, 0x052d, 0x0534, 0x053a, 0x0540, 0x054a, 0x0552, 0x0557, - 0x055e, 0x0564, 0x056b, 0x0575, 0x057e, 0x0588, 0x0597, 0x05a1, - 0x05a5, 0x05b4, 0x05bc, 0x05ca, 0x05df, 0x05e9, 0x05f3, 0x05fd, - 0x0602, 0x060b, 0x0618, 0x061e, 0x0625, 0x062d, 0x0635, 0x063c, - 0x0649, 0x064e, 0x065b, 0x0662, 0x066b, 0x0675, 0x067a, 0x067f, - 0x0684, 0x0688, 0x0692, 0x0696, 0x069c, 0x06a0, 0x06b1, 0x06c0, - 0x06cd, 0x06d5, 0x06dd, 0x06f5, 0x0704, 0x070f, 0x0723, 0x072b, - // Entry C0 - FF - 0x0730, 0x0738, 0x073d, 0x074e, 0x0756, 0x075d, 0x0763, 0x076b, - 0x0771, 0x077c, 0x078a, 0x0799, 0x079e, 0x07a7, 0x07af, 0x07b9, - 0x07c1, 0x07d5, 0x07dd, 0x07e9, 0x07f3, 0x07fa, 0x0801, 0x0808, - 0x0813, 0x0826, 0x0831, 0x083d, 0x0843, 0x084c, 0x085c, 0x0873, - 0x0877, 0x0890, 0x0894, 0x089b, 0x08a7, 0x08ae, 0x08b9, 0x08c5, - 0x08cc, 0x08d1, 0x08da, 0x08eb, 0x08f1, 0x08f7, 0x08ff, 0x0906, - 0x090c, 0x0935, 0x0935, 0x094a, 0x0951, 0x095b, 0x0967, 0x0984, - 0x098d, 0x09ac, 0x09d1, 0x09d8, 0x09df, 0x09f7, 0x09fc, 0x0a02, - // Entry 100 - 13F - 0x0a07, 0x0a0e, 0x0a1a, 0x0a20, 0x0a28, 0x0a33, 0x0a39, 0x0a3f, - 0x0a4d, 0x0a5a, 0x0a61, 0x0a6d, 0x0a78, 0x0a84, 0x0a91, 0x0a9b, - 0x0ab3, 0x0aba, 0x0ad5, 0x0adc, 0x0ae6, 0x0af0, 0x0aff, 0x0b0b, - 0x0b16, 0x0b1f, 0x0b2d, 0x0b36, 0x0b3a, 0x0b42, 0x0b4c, 0x0b52, - 0x0b5e, 0x0b6b, 0x0b77, 0x0b84, + 0x02bb, 0x02c2, 0x02d2, 0x02da, 0x02e2, 0x02e6, 0x02f6, 0x030a, + 0x0312, 0x031a, 0x031f, 0x032d, 0x0334, 0x033b, 0x0349, 0x0351, + 0x0355, 0x035e, 0x0367, 0x036d, 0x0373, 0x037d, 0x038a, 0x0394, + 0x03ba, 0x03c3, 0x03c7, 0x03d4, 0x03da, 0x03ec, 0x0404, 0x040c, + 0x0413, 0x0418, 0x041e, 0x042c, 0x0435, 0x043c, 0x0443, 0x044e, + 0x0453, 0x0473, 0x0477, 0x047b, 0x0482, 0x0488, 0x048e, 0x0495, + 0x049b, 0x04a0, 0x04a5, 0x04ad, 0x04b5, 0x04bd, 0x04c9, 0x04da, + // Entry 80 - BF + 0x04e6, 0x04f1, 0x04f7, 0x0504, 0x050d, 0x0511, 0x0518, 0x0521, + 0x052c, 0x0535, 0x053c, 0x0542, 0x0548, 0x0552, 0x055a, 0x055f, + 0x0566, 0x056c, 0x0573, 0x057d, 0x0586, 0x0590, 0x059f, 0x05a9, + 0x05ad, 0x05bc, 0x05c4, 0x05d2, 0x05e7, 0x05f1, 0x05fb, 0x0605, + 0x060a, 0x0613, 0x0620, 0x0626, 0x062d, 0x0635, 0x063d, 0x0644, + 0x0651, 0x0656, 0x0663, 0x066a, 0x0673, 0x067d, 0x0682, 0x0687, + 0x068c, 0x0690, 0x069a, 0x069e, 0x06a4, 0x06a8, 0x06b9, 0x06c8, + 0x06d5, 0x06dd, 0x06e5, 0x06fd, 0x070c, 0x0717, 0x072b, 0x0733, + // Entry C0 - FF + 0x0738, 0x0740, 0x0745, 0x0756, 0x075e, 0x0765, 0x076b, 0x0773, + 0x0779, 0x0784, 0x0792, 0x07a1, 0x07a6, 0x07af, 0x07b7, 0x07c1, + 0x07c9, 0x07dd, 0x07e5, 0x07f1, 0x07fb, 0x0802, 0x0809, 0x0810, + 0x081b, 0x082e, 0x0839, 0x0845, 0x084b, 0x0854, 0x0864, 0x087b, + 0x087f, 0x0898, 0x089c, 0x08a3, 0x08af, 0x08b6, 0x08c1, 0x08cd, + 0x08d4, 0x08d9, 0x08e2, 0x08f3, 0x08f9, 0x08ff, 0x0907, 0x090e, + 0x0914, 0x093d, 0x094e, 0x0963, 0x096a, 0x0974, 0x0980, 0x099d, + 0x09a6, 0x09c5, 0x09ea, 0x09f1, 0x09f8, 0x0a10, 0x0a15, 0x0a1b, + // Entry 100 - 13F + 0x0a20, 0x0a27, 0x0a33, 0x0a39, 0x0a41, 0x0a4c, 0x0a52, 0x0a58, + 0x0a66, 0x0a73, 0x0a7a, 0x0a86, 0x0a91, 0x0a9d, 0x0aaa, 0x0ab4, + 0x0acc, 0x0ad3, 0x0aee, 0x0af5, 0x0aff, 0x0b09, 0x0b18, 0x0b24, + 0x0b2f, 0x0b38, 0x0b46, 0x0b4f, 0x0b53, 0x0b5b, 0x0b65, 0x0b6b, + 0x0b77, 0x0b84, 0x0b90, 0x0b90, 0x0b9d, }, }, { // fr @@ -35952,7 +38012,7 @@ var regionHeaders = [252]header{ "ntâlEurope meridionâlAustralie e Gnove ZelandeMelanesieRegjon de Mic" + "ronesiePolinesieAsieAsie centrâlAsie ocidentâlEuropeEurope orientâlE" + "urope setentrionâlEurope ocidentâlAmeriche latine", - []uint16{ // 292 elements + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0007, 0x001c, 0x0027, 0x0038, 0x0040, 0x0047, 0x004e, 0x0054, 0x005c, 0x0066, 0x0075, 0x007c, 0x0085, 0x008a, @@ -35994,7 +38054,7 @@ var regionHeaders = [252]header{ 0x0a76, 0x0a8a, 0x0a91, 0x0aa3, 0x0ab4, 0x0ac5, 0x0ada, 0x0aea, 0x0afd, 0x0b06, 0x0b1c, 0x0b24, 0x0b32, 0x0b42, 0x0b54, 0x0b66, 0x0b7f, 0x0b88, 0x0b9c, 0x0ba5, 0x0ba9, 0x0bb6, 0x0bc5, 0x0bcb, - 0x0bdb, 0x0bef, 0x0c00, 0x0c0f, + 0x0bdb, 0x0bef, 0x0c00, 0x0c00, 0x0c0f, }, }, { // fy @@ -36042,7 +38102,7 @@ var regionHeaders = [252]header{ "ebietEast-AziëSûd-AziëSûdoost-AziëSûd-EuropaAustralaziëMelanesiëMicr" + "onesyske regioPolynesiëAziëSintraal-AziëWest-AziëEuropaEast-EuropaNo" + "ard-EuropaWest-EuropaLatynsk-Amearika", - []uint16{ // 292 elements + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0009, 0x0010, 0x002b, 0x0036, 0x0048, 0x0050, 0x0058, 0x0060, 0x0066, 0x0070, 0x007b, 0x008c, 0x0095, 0x009f, 0x00a4, @@ -36084,301 +38144,303 @@ var regionHeaders = [252]header{ 0x0ab0, 0x0abc, 0x0ac4, 0x0acf, 0x0add, 0x0ae8, 0x0af4, 0x0b03, 0x0b13, 0x0b1a, 0x0b2a, 0x0b39, 0x0b43, 0x0b4d, 0x0b5b, 0x0b66, 0x0b72, 0x0b7c, 0x0b8e, 0x0b98, 0x0b9d, 0x0bab, 0x0bb5, 0x0bbb, - 0x0bc6, 0x0bd2, 0x0bdd, 0x0bed, + 0x0bc6, 0x0bd2, 0x0bdd, 0x0bdd, 0x0bed, }, }, { // ga - "Oileán na DeascabhálaAndóraAontas na nÉimíríochtaí ArabachaAn Afganastái" + - "nAntigua agus BarbúdaAngaíleAn AlbáinAn AirméinAngólaAn AntartaiceAn" + - " AirgintínSamó MeiriceánachAn OstairAn AstráilArúbaOileáin ÅlandAn A" + - "sarbaiseáinAn Bhoisnia agus An HeirseagaivéinBarbadósAn Bhanglaidéis" + - "An BheilgBuircíne FasóAn BhulgáirBairéinAn BhurúinBeininSaint Barthé" + - "lemyBeirmiúdaBrúinéAn BholaivAn Ísiltír ChairibeachAn BhrasaílNa Bah" + - "ámaíAn BhútáinOileán BouvetAn BhotsuáinAn BhealarúisAn BheilísCeana" + - "daOileáin Cocos (Keeling)Poblacht Dhaonlathach an ChongóPoblacht na " + - "hAfraice LáirAn CongóAn EilvéisAn Cósta EabhairOileáin CookAn tSileC" + - "amarúnAn tSínAn CholóimOileán ClippertonCósta RíceCúbaRinn VerdeCura" + - "çaoOileán na NollagAn ChipirPoblacht na SeiceAn GhearmáinDiego Garc" + - "iaDjiboutiAn DanmhairgDoiminiceAn Phoblacht DhoiminiceachAn AilgéirC" + - "euta agus MelillaEacuadórAn EastóinAn ÉigiptAn Sahára ThiarAn Eiritr" + - "éAn SpáinnAn AetóipAn tAontas EorpachAn FhionlainnFidsíOileáin Fhác" + - "lainneAn MhicrinéisOileáin FharóAn FhraincAn GhabúinAn Ríocht Aontai" + - "theGreanádaAn tSeoirsiaGuáin na FrainceGeansaíGánaGiobráltarAn Ghrao" + - "nlainnAn GhaimbiaAn GhuineGuadalúipAn Ghuine MheánchriosachAn Ghréig" + - "An tSeoirsia Theas agus Oileáin Sandwich TheasGuatamalaGuamGuine Bis" + - "sauAn GhuáinS.R.R. na Síne Hong CongOileán Heard agus Oileáin McDona" + - "ldHondúrasAn ChróitHáítíAn UngáirNa hOileáin ChanárachaAn IndinéisÉi" + - "reIosraelOileán MhanannAn IndiaCríoch Aigéan Indiach na BreataineAn " + - "IaráicAn IaráinAn ÍoslainnAn IodáilGeirsíIamáiceAn IordáinAn tSeapái" + - "nAn ChéiniaAn ChirgeastáinAn ChambóidCireabaitíOileáin ChomóraSan Cr" + - "íostóir-NimheasAn Chóiré ThuaidhAn Chóiré TheasCuáitOileáin CaymanA" + - "n ChasacstáinLaosAn LiobáinSaint LuciaLichtinstéinSrí LancaAn Libéir" + - "LeosótaAn LiotuáinLucsamburgAn LaitviaAn LibiaMaracóMonacóAn Mholdói" + - "vMontainéagróSaint-MartinMadagascarOileáin MarshallAn MhacadóinMailí" + - "Maenmar (Burma)An MhongóilS.R.R. na Síne MacaoNa hOileáin Mháirianac" + - "ha ThuaidhMartiniqueAn MháratáinMontsaratMáltaOileán MhuirísOileáin " + - "MhaildíveAn MhaláivMeicsiceoAn MhalaeisiaMósaimbícAn NamaibAn Nua-Ch" + - "aladóinAn NígirOileán NorfolkAn NigéirNicearaguaAn ÍsiltírAn IoruaNe" + - "ipealNárúNiueAn Nua-ShéalainnÓmanPanamaPeiriúPolainéis na FrainceNua" + - "-Ghuine PhapuaNa hOileáin FhilipíneachaAn PhacastáinAn PholainnSaint" + - "-Pierre-et-MiquelonOileáin PitcairnPortó RíceNa Críocha Palaistíneac" + - "haAn PhortaingéilPalauParaguaCatarAn Aigéine ImeallachRéunionAn Rómá" + - "inAn tSeirbiaAn RúisRuandaAn Araib ShádachOileáin SholomónNa Séiséil" + - "An tSúdáinAn tSualainnSingeapórSan HéilinAn tSlóivéinSvalbard agus J" + - "an MayenAn tSlóvaicSiarra LeonSan MairíneAn tSeineagáilAn tSomáilSur" + - "anamAn tSúdáin TheasSão Tomé agus PríncipeAn tSalvadóirSint MaartenA" + - "n tSiriaAn tSuasalainnTristan da CunhaOileáin na dTurcach agus Caico" + - "sSeadCríocha Francacha Dheisceart an DomhainTógaAn TéalainnAn Táidsí" + - "ceastáinTócaláTíomór ThoirAn TuircméanastáinAn TúinéisTongaAn TuircO" + - "ileán na Tríonóide agus TobágaTuvaluAn TéaváinAn TansáinAn ÚcráinUga" + - "ndaOileáin Imeallacha S.A.M.Náisiúin AontaitheStáit Aontaithe Mheiri" + - "ceáUruguaAn ÚisbéiceastáinAn VatacáinSan Uinseann agus na Greanáidín" + - "íVeiniséalaOileáin Bhriotanacha na MaighdeanOileáin Mheiriceánacha " + - "na MaighdeanVítneamVanuatúVailís agus FutúnaSamóAn ChosaivÉiminMayot" + - "teAn Afraic TheasAn tSaimbiaAn tSiombáibRéigiún AnaithnidAn DomhanAn" + - " AfraicMeiriceá ThuaidhMeiriceá TheasAn AigéineIarthar na hAfraiceMe" + - "iriceá LáirOirthear na hAfraiceTuaisceart na hAfraiceAn Afraic LáirD" + - "eisceart na hAfraiceCríocha MheiriceáTuaisceart MheiriceáAn Mhuir Ch" + - "airibOirthear na hÁiseDeisceart na hÁiseOirdheisceart na hÁiseDeisce" + - "art na hEorpaAn AstraláiseAn MheilinéisAn Réigiún MicrinéiseachAn Ph" + - "olainéisAn ÁiseAn Áise LáirIarthar na hÁiseAn EoraipOirthear na hEor" + - "paTuaisceart na hEorpaIarthar na hEorpaMeiriceá Laidineach", - []uint16{ // 292 elements + "Oileán na DeascabhálaAndóraAontas na nÉimíríochtaí Arabachaan Afganastái" + + "nAntigua agus BarbúdaAngaílean Albáinan AirméinAngólaan Antartaicean" + + " AirgintínSamó Mheiriceáan Ostairan AstráilArúbaOileáin Ålandan Asar" + + "baiseáinan Bhoisnia agus an HeirseagaivéinBarbadósan Bhanglaidéisan " + + "BheilgBuircíne Fasóan BhulgáirBairéinan BhurúinBeininSaint Barthélem" + + "yBeirmiúdaBrúinéan Bholaivan Ísiltír Chairibeachan Bhrasaílna Baháma" + + "ían BhútáinOileán Bouvetan Bhotsuáinan Bhealarúisan BheilísCeanadaO" + + "ileáin Cocos (Keeling)Poblacht Dhaonlathach an ChongóPoblacht na hAf" + + "raice Láiran Congóan Eilvéisan Cósta EabhairOileáin Cookan tSileCama" + + "rúnan tSínan CholóimOileán ClippertonCósta RíceCúbaRinn VerdeCuraçao" + + "Oileán na Nollagan ChipirAn tSeiciaan GhearmáinDiego GarciaDjiboutia" + + "n DanmhairgDoiminicean Phoblacht Dhoiminiceachan AilgéirCeuta agus M" + + "elillaEacuadóran Eastóinan Éigiptan Sahára Thiaran Eiritréan Spáinna" + + "n Aetóipan tAontas EorpachLimistéar an euroan FhionlainnFidsíOileáin" + + " Fháclainnean MhicrinéisOileáin Fharóan Fhraincan Ghabúinan Ríocht A" + + "ontaitheGreanádaan tSeoirsiaGuáin na FrainceGeansaíGánaGiobráltaran " + + "Ghraonlainnan Ghaimbiaan GhuineGuadalúipan Ghuine Mheánchiorclachan " + + "Ghréigan tSeoirsia Theas agus Oileáin Sandwich TheasGuatamalaGuamGui" + + "ne Bissauan GhuáinS.R.R. na Síne Hong CongOileán Heard agus Oileáin " + + "McDonaldHondúrasan ChróitHáítían Ungáirna hOileáin Chanárachaan Indi" + + "néisÉireIosraelOileán Mhanannan IndiaCríoch Aigéan Indiach na Breata" + + "inean Iaráican Iaráinan Íoslainnan IodáilGeirsíIamáicean Iordáinan t" + + "Seapáinan Chéiniaan Chirgeastáinan ChambóidCireabaitíOileáin Chomóra" + + "San Críostóir-Nimheasan Chóiré Thuaidhan Chóiré TheasCuáitOileáin Ca" + + "ymanan ChasacstáinLaosan LiobáinSaint LuciaLichtinstéinSrí Lancaan L" + + "ibéirLeosótaan LiotuáinLucsamburgan Laitviaan LibiaMaracóMonacóan Mh" + + "oldóivMontainéagróSaint-MartinMadagascarOileáin Marshallan Mhacadóin" + + "MailíMaenmar (Burma)an MhongóilS.R.R. na Síne Macaona hOileáin Mháir" + + "ianacha ThuaidhMartiniquean MháratáinMontsaratMáltaOileán MhuirísOil" + + "eáin Mhaildívean MhaláivMeicsiceoan MhalaeisiaMósaimbícan Namaiban N" + + "ua-Chaladóinan NígirOileán Norfolkan NigéirNicearaguaan Ísiltíran Io" + + "ruaNeipealNárúNiuean Nua-ShéalainnÓmanPanamaPeiriúPolainéis na Frain" + + "ceNua-Ghuine Phapuana hOileáin Fhilipíneachaan Phacastáinan Pholainn" + + "San Pierre agus MiquelonOileáin PitcairnPórtó Rícena Críocha Palaist" + + "íneachaan PhortaingéilOileáin PalauParaguaCataran Aigéine Imeallach" + + "Réunionan Rómáinan tSeirbiaan RúisRuandaan Araib ShádachOileáin Shol" + + "omónna Séiséilan tSúdáinan tSualainnSingeapórSan Héilinan tSlóivéinS" + + "valbard agus Jan Mayenan tSlóvaicSiarra LeonSan Mairínean tSeineagái" + + "lan tSomáilSuranaman tSúdáin TheasSão Tomé agus Príncipean tSalvadói" + + "rSint Maartenan tSiriaan tSuasalainnTristan da CunhaOileáin na dTurc" + + "ach agus CaicosSeadCríocha Francacha Dheisceart an DomhainTógaan Téa" + + "lainnan TáidsíceastáinTócaláTíomór Thoiran Tuircméanastáinan Túinéis" + + "Tongaan TuircOileán na Tríonóide agus TobágaTuvaluan Téaváinan Tansá" + + "inan ÚcráinUgandaOileáin Imeallacha S.A.M.na Náisiúin AontaitehStáit" + + " Aontaithe MheiriceáUraguaan ÚisbéiceastáinCathair na VatacáineSan U" + + "inseann agus na GreanáidíníVeiniséalaOileáin Bhriotanacha na Maighde" + + "anOileáin Mheiriceánacha na MaighdeanVítneamVanuatúVailís agus Futún" + + "aSamóan ChosaivÉiminMayottean Afraic Theasan tSaimbiaan tSiombáibRéi" + + "giún Anaithnidan DomhanAn AfraicMeiriceá ThuaidhMeiriceá Theasan Aig" + + "éineIarthar na hAfraiceMeiriceá LáirOirthear na hAfraiceTuaisceart " + + "na hAfraiceAn Afraic LáirDeisceart na hAfraiceCríocha MheiriceáTuais" + + "ceart Mheiriceáan Mhuir ChairibOirthear na hÁiseDeisceart na hÁiseOi" + + "rdheisceart na hÁiseDeisceart na hEorpaan Astraláisean Mheilinéisan " + + "Réigiún Micrinéiseachan Pholainéisan Áisean Áise LáirIarthar na hÁis" + + "ean EoraipOirthear na hEorpaTuaisceart na hEorpaIarthar na hEorpaMei" + + "riceá Laidineach", + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0017, 0x001e, 0x0042, 0x0051, 0x0066, 0x006e, 0x0078, - 0x0083, 0x008a, 0x0097, 0x00a4, 0x00b7, 0x00c0, 0x00cb, 0x00d1, - 0x00e0, 0x00f0, 0x0113, 0x011c, 0x012c, 0x0135, 0x0144, 0x0150, - 0x0158, 0x0163, 0x0169, 0x017a, 0x0184, 0x018c, 0x0196, 0x01ae, - 0x01ba, 0x01c6, 0x01d2, 0x01e0, 0x01ed, 0x01fb, 0x0206, 0x020d, - 0x0225, 0x0245, 0x025f, 0x0268, 0x0273, 0x0284, 0x0291, 0x0299, - 0x02a1, 0x02a9, 0x02b4, 0x02c6, 0x02d2, 0x02d7, 0x02e1, 0x02e9, - 0x02fa, 0x0303, 0x0314, 0x0321, 0x032d, 0x0335, 0x0341, 0x034a, - // Entry 40 - 7F - 0x0364, 0x036f, 0x0381, 0x038a, 0x0395, 0x039f, 0x03af, 0x03ba, - 0x03c4, 0x03ce, 0x03e0, 0x03e0, 0x03ed, 0x03f3, 0x0407, 0x0415, - 0x0424, 0x042e, 0x0439, 0x044d, 0x0456, 0x0462, 0x0473, 0x047b, - 0x0480, 0x048b, 0x0499, 0x04a4, 0x04ad, 0x04b7, 0x04d0, 0x04da, - 0x0509, 0x0512, 0x0516, 0x0522, 0x052c, 0x0545, 0x0569, 0x0572, - 0x057c, 0x0584, 0x058e, 0x05a6, 0x05b2, 0x05b7, 0x05be, 0x05cd, - 0x05d5, 0x05f9, 0x0603, 0x060d, 0x0619, 0x0623, 0x062a, 0x0632, - 0x063d, 0x0649, 0x0654, 0x0664, 0x0670, 0x067b, 0x068c, 0x06a3, - // Entry 80 - BF - 0x06b6, 0x06c7, 0x06cd, 0x06dc, 0x06eb, 0x06ef, 0x06fa, 0x0705, - 0x0712, 0x071c, 0x0726, 0x072e, 0x073a, 0x0744, 0x074e, 0x0756, - 0x075d, 0x0764, 0x0770, 0x077e, 0x078a, 0x0794, 0x07a5, 0x07b2, - 0x07b8, 0x07c7, 0x07d3, 0x07e8, 0x080a, 0x0814, 0x0822, 0x082b, - 0x0831, 0x0841, 0x0854, 0x085f, 0x0868, 0x0875, 0x0880, 0x0889, - 0x089a, 0x08a3, 0x08b2, 0x08bc, 0x08c6, 0x08d2, 0x08da, 0x08e1, - 0x08e7, 0x08eb, 0x08fc, 0x0901, 0x0907, 0x090e, 0x0923, 0x0934, - 0x094f, 0x095d, 0x0968, 0x0980, 0x0991, 0x099d, 0x09b8, 0x09c8, - // Entry C0 - FF - 0x09cd, 0x09d4, 0x09d9, 0x09ee, 0x09f6, 0x0a01, 0x0a0c, 0x0a14, - 0x0a1a, 0x0a2b, 0x0a3d, 0x0a49, 0x0a55, 0x0a61, 0x0a6b, 0x0a76, - 0x0a84, 0x0a9b, 0x0aa7, 0x0ab2, 0x0abe, 0x0acd, 0x0ad8, 0x0adf, - 0x0af1, 0x0b0a, 0x0b18, 0x0b24, 0x0b2d, 0x0b3b, 0x0b4b, 0x0b6b, - 0x0b6f, 0x0b97, 0x0b9c, 0x0ba8, 0x0bbc, 0x0bc4, 0x0bd2, 0x0be6, - 0x0bf2, 0x0bf7, 0x0bff, 0x0c22, 0x0c28, 0x0c34, 0x0c3f, 0x0c4a, - 0x0c50, 0x0c6a, 0x0c7e, 0x0c99, 0x0c9f, 0x0cb3, 0x0cbf, 0x0ce2, - 0x0ced, 0x0d0f, 0x0d34, 0x0d3c, 0x0d44, 0x0d58, 0x0d5d, 0x0d67, - // Entry 100 - 13F - 0x0d6d, 0x0d74, 0x0d83, 0x0d8e, 0x0d9b, 0x0dae, 0x0db7, 0x0dc0, - 0x0dd1, 0x0de0, 0x0deb, 0x0dfe, 0x0e0d, 0x0e21, 0x0e37, 0x0e46, - 0x0e5b, 0x0e6e, 0x0e83, 0x0e93, 0x0ea5, 0x0eb8, 0x0ecf, 0x0ee2, - 0x0ef0, 0x0efe, 0x0f19, 0x0f27, 0x0f2f, 0x0f3d, 0x0f4e, 0x0f57, - 0x0f69, 0x0f7d, 0x0f8e, 0x0fa2, + 0x0083, 0x008a, 0x0097, 0x00a4, 0x00b4, 0x00bd, 0x00c8, 0x00ce, + 0x00dd, 0x00ed, 0x0110, 0x0119, 0x0129, 0x0132, 0x0141, 0x014d, + 0x0155, 0x0160, 0x0166, 0x0177, 0x0181, 0x0189, 0x0193, 0x01ab, + 0x01b7, 0x01c3, 0x01cf, 0x01dd, 0x01ea, 0x01f8, 0x0203, 0x020a, + 0x0222, 0x0242, 0x025c, 0x0265, 0x0270, 0x0281, 0x028e, 0x0296, + 0x029e, 0x02a6, 0x02b1, 0x02c3, 0x02cf, 0x02d4, 0x02de, 0x02e6, + 0x02f7, 0x0300, 0x030a, 0x0317, 0x0323, 0x032b, 0x0337, 0x0340, + // Entry 40 - 7F + 0x035a, 0x0365, 0x0377, 0x0380, 0x038b, 0x0395, 0x03a5, 0x03b0, + 0x03ba, 0x03c4, 0x03d6, 0x03e8, 0x03f5, 0x03fb, 0x040f, 0x041d, + 0x042c, 0x0436, 0x0441, 0x0455, 0x045e, 0x046a, 0x047b, 0x0483, + 0x0488, 0x0493, 0x04a1, 0x04ac, 0x04b5, 0x04bf, 0x04d9, 0x04e3, + 0x0512, 0x051b, 0x051f, 0x052b, 0x0535, 0x054e, 0x0572, 0x057b, + 0x0585, 0x058d, 0x0597, 0x05af, 0x05bb, 0x05c0, 0x05c7, 0x05d6, + 0x05de, 0x0602, 0x060c, 0x0616, 0x0622, 0x062c, 0x0633, 0x063b, + 0x0646, 0x0652, 0x065d, 0x066d, 0x0679, 0x0684, 0x0695, 0x06ac, + // Entry 80 - BF + 0x06bf, 0x06d0, 0x06d6, 0x06e5, 0x06f4, 0x06f8, 0x0703, 0x070e, + 0x071b, 0x0725, 0x072f, 0x0737, 0x0743, 0x074d, 0x0757, 0x075f, + 0x0766, 0x076d, 0x0779, 0x0787, 0x0793, 0x079d, 0x07ae, 0x07bb, + 0x07c1, 0x07d0, 0x07dc, 0x07f1, 0x0813, 0x081d, 0x082b, 0x0834, + 0x083a, 0x084a, 0x085d, 0x0868, 0x0871, 0x087e, 0x0889, 0x0892, + 0x08a3, 0x08ac, 0x08bb, 0x08c5, 0x08cf, 0x08db, 0x08e3, 0x08ea, + 0x08f0, 0x08f4, 0x0905, 0x090a, 0x0910, 0x0917, 0x092c, 0x093d, + 0x0958, 0x0966, 0x0971, 0x0989, 0x099a, 0x09a7, 0x09c2, 0x09d2, + // Entry C0 - FF + 0x09e0, 0x09e7, 0x09ec, 0x0a01, 0x0a09, 0x0a14, 0x0a1f, 0x0a27, + 0x0a2d, 0x0a3e, 0x0a50, 0x0a5c, 0x0a68, 0x0a74, 0x0a7e, 0x0a89, + 0x0a97, 0x0aae, 0x0aba, 0x0ac5, 0x0ad1, 0x0ae0, 0x0aeb, 0x0af2, + 0x0b04, 0x0b1d, 0x0b2b, 0x0b37, 0x0b40, 0x0b4e, 0x0b5e, 0x0b7e, + 0x0b82, 0x0baa, 0x0baf, 0x0bbb, 0x0bcf, 0x0bd7, 0x0be5, 0x0bf9, + 0x0c05, 0x0c0a, 0x0c12, 0x0c35, 0x0c3b, 0x0c47, 0x0c52, 0x0c5d, + 0x0c63, 0x0c7d, 0x0c94, 0x0caf, 0x0cb5, 0x0cc9, 0x0cde, 0x0d01, + 0x0d0c, 0x0d2e, 0x0d53, 0x0d5b, 0x0d63, 0x0d77, 0x0d7c, 0x0d86, + // Entry 100 - 13F + 0x0d8c, 0x0d93, 0x0da2, 0x0dad, 0x0dba, 0x0dcd, 0x0dd6, 0x0ddf, + 0x0df0, 0x0dff, 0x0e0a, 0x0e1d, 0x0e2c, 0x0e40, 0x0e56, 0x0e65, + 0x0e7a, 0x0e8d, 0x0ea2, 0x0eb2, 0x0ec4, 0x0ed7, 0x0eee, 0x0f01, + 0x0f0f, 0x0f1d, 0x0f38, 0x0f46, 0x0f4e, 0x0f5c, 0x0f6d, 0x0f76, + 0x0f88, 0x0f9c, 0x0fad, 0x0fad, 0x0fc1, }, }, { // gd "Eilean na DeasgabhalachAndorraNa h-Iomaratan Arabach AonaichteAfghanastà" + "nAintìoga is BarbudaAnguilliaAlbàiniaAirmeineaAngòlaAn AntartaigAn A" + "rgantainSamotha na h-AimeireagaAn OstairAstràiliaArùbaNa h-Eileanan " + - "ÅlandAsarbaideànBosna agus HearsagobhanaBarbadosBangladaisA’ Bheilg" + - "Buirciona FasoA’ BhulgairBachrainBurundaidhBeininSaint BarthélemyBea" + - "rmùdaBrùnaighBoilibhiaNa Tìrean Ìsle CaraibeachBraisilNa h-Eileanan " + - "BhathamaButànEilean BouvetBotsuanaA’ BhealaruisA’ BheilìsCanadaNa h-" + - "Eileanan Chocos (Keeling)Congo - KinshasaPoblachd Meadhan AfragaA’ C" + - "hongo - BrazzavilleAn EilbheisCôte d’IvoireEileanan CookAn t-SileCam" + - "arunAn t-SìnColoimbiaEilean ClippertonCosta RìceaCùbaAn Ceap UaineCu" + - "raçaoEilean na NollaigCìoprasPoblachd na SeiceA’ GhearmailtDiego Gar" + - "ciaDiobùtaidhAn DanmhairgDoiminiceaA’ Phoblachd DhoiminiceachAildiri" + - "aCeuta agus MelillaEacuadorAn EastoinAn ÈiphitSathara an IarEartraAn" + - " SpàinntAn ItiopAn t-Aonadh EòrpachAn FhionnlannFìdiNa h-Eileanan Fà" + - "clannachNa Meanbh-eileananNa h-Eileanan FàroAn FhraingGabonAn Rìogha" + - "chd AonaichteGreanàdaA’ ChairtbheilGuidheàna na FraingeGeàrnsaidhGàn" + - "aDiobraltarA’ GhraonlannA’ GhaimbiaGiniGuadalupGini Mheadhan-Chriosa" + - "chA’ GhreugSeòirsea a Deas is na h-Eileanan Sandwich a DeasGuatamala" + - "GuamGini-BiosoGuidheànaHong Kong SAR na SìneEilean Heard is MhicDhòm" + - "hnaillHondùrasA’ ChròthaisHaidhtiAn UngairNa h-Eileanan CanàrachNa h" + - "-Innd-innseÈirinnIosraelEilean MhanainnNa h-InnseachanRanntair Breat" + - "annach Cuan nan InnseachanIoràcIorànInnis TìleAn EadailtDeàrsaidhDia" + - "meugaIòrdanAn t-SeapanCeiniaCìorgastanCambuideaCiribeasComorosNaomh " + - "Crìstean is NibheisCoirèa a TuathCoirèaCuibhèitNa h-Eileanan Caimean" + - "CasachstànLàthosLeabanonNaomh LùiseaLichtensteinSri LancaLibèirLeaso" + - "toAn LiotuainLugsamburgAn LaitbheLibiaMorocoMonacoA’ MholdobhaAm Mon" + - "adh NeagrachNaomh MàrtainnMadagasgarEileanan MharshallA’ MhasadonMài" + - "liMiànmarDùthaich nam MongolMacàthu SAR na SìneNa h-Eileanan Mairian" + - "ach a TuathMairtinicMoratàineaMontsaratMaltaNa h-Eileanan Mhoiriseas" + - "Na h-Eileanan MhaladaibhMalabhaidhMeagsagoMalaidhseaMòsaimbicAn Nama" + - "ibCailleann NuadhNìgeirEilean NorfolkNigèiriaNiocaraguaNa Tìrean Ìsl" + - "eNirribhidhNeapàlNabhruNiueSealainn NuadhOmànPanamaPearùPoilinèis na" + - " FraingeGini Nuadh PhaputhachNa h-Eileanan FilipineachPagastànA’ Phò" + - "lainnSaint Pierre agus MiquelonEileanan Peit a’ ChàirnPorto RìceoNa " + - "Ranntairean PalastaineachA’ PhortagailPalabhParaguaidhCatarRoinn Iom" + - "allach a’ Chuain SèimhRéunionRomàiniaAn t-SèirbAn RuisRubhandaAràibi" + - "a nan SabhdEileanan SholaimhNa h-Eileanan SheiseallSudànAn t-SuainSi" + - "ngeapòrEilean Naomh EilidhAn t-SlòbhainSvalbard agus Jan MayenAn t-S" + - "lòbhacSiarra LeòmhannSan MarinoSeanagalSomàiliaSuranamSudàn a DeasSã" + - "o Tomé agus PríncipeAn SalbhadorSint MaartenSiridheaDùthaich nan Sua" + - "saidhTristan da CunhaNa h-Eileanan Turcach is CaiceoAn t-SeàdRanntai" + - "rean a Deas na FraingeTogoDùthaich nan TàidhTaidigeastànTokelauTimor" + - "-LesteTurcmanastànTuiniseaTongaAn TuircTrianaid agus TobagoTubhaluTa" + - "idh-BhànAn TansanAn UcràinUgandaMeanbh-Eileanan Iomallach nan SANa S" + - "tàitean AonaichteUruguaidhUsbagastànCathair na BhatacainNaomh Bhions" + - "ant agus Eileanan GreanadachA’ BheinisealaEileanan Breatannach na Ma" + - "ighdinnEileanan na Maighdinn aig na SABhiet-NamVanuatuUallas agus Fu" + - "tunaSamothaA’ ChosobhoAn EamanMayotteAfraga a DeasSàimbiaAn t-Sìomba" + - "bRoinn-dùthcha neo-aithnichteAn SaoghalAfragaAimeireaga a TuathAimei" + - "reaga a DeasRoinn a’ Chuain SèimhAfraga an IarMeadhan AimeireagaAfra" + - "ga an EarAfraga a TuathMeadhan AfragaCeann a Deas AfragaAn Dà Aimeir" + - "eagaCeann a Tuath AimeireagaAm Muir CaraibeachÀisia an EarÀisia a De" + - "asÀisia an Ear-dheasAn Roinn-Eòrpa a DeasAstràilia is Sealainn Nuadh" + - "Na h-Eileanan DubhaRoinn nam Meanbh-EileananPoilinèisÀisiaMeadhan Ài" + - "siaÀisia an IarAn Roinn-EòrpaAn Roinn-Eòrpa an EarAn Roinn-Eòrpa a T" + - "uathAn Roinn-Eòrpa an IarAimeireaga Laidinneach", - []uint16{ // 292 elements + "ÅlandAsarbaideànBosna is HearsagobhanaBarbadosBangladaisA’ BheilgBu" + + "irciona FasoA’ BhulgairBachrainBurundaidhBeininSaint BarthélemyBearm" + + "ùdaBrùnaighBoilibhiaNa Tìrean Ìsle CaraibeachBraisilNa h-Eileanan B" + + "hathamaButànEilean BouvetBotsuanaA’ BhealaruisA’ BheilìsCanadaNa h-E" + + "ileanan Chocos (Keeling)Congo - KinshasaPoblachd Meadhan AfragaA’ Ch" + + "ongo - BrazzavilleAn EilbheisCôte d’IvoireEileanan CookAn t-SileCama" + + "runAn t-SìnColoimbiaEilean ClippertonCosta RìceaCùbaAn Ceap UaineCur" + + "açaoEilean na NollaigCìoprasAn t-SeicA’ GhearmailtDiego GarciaDiobùt" + + "aidhAn DanmhairgDoiminiceaA’ Phoblachd DhoiminiceachAildiriaCeuta ag" + + "us MelillaEacuadorAn EastoinAn ÈiphitSathara an IarEartraAn SpàinntA" + + "n ItiopAn t-Aonadh EòrpachRaon an EòroAn FhionnlannFìdiNa h-Eileanan" + + " FàclannachNa Meanbh-eileananNa h-Eileanan FàroAn FhraingGabonAn Rìo" + + "ghachd AonaichteGreanàdaA’ ChairtbheilGuidheàna na FraingeGeàrnsaidh" + + "GànaDiobraltarA’ GhraonlannA’ GhaimbiaGiniGuadalupGini Mheadhan-Chri" + + "osachA’ GhreugSeòirsea a Deas is na h-Eileanan Sandwich a DeasGuatam" + + "alaGuamGini-BiosoGuidheànaHong Kong SAR na SìneEilean Heard is MhicD" + + "hòmhnaillHondùrasA’ ChròthaisHaidhtiAn UngairNa h-Eileanan CanàrachN" + + "a h-Innd-innseÈirinnIosraelEilean MhanainnNa h-InnseachanRanntair Br" + + "eatannach Cuan nan InnseachanIoràcIorànInnis TìleAn EadailtDeàrsaidh" + + "DiameugaIòrdanAn t-SeapanCeiniaCìorgastanCambuideaCiribeasComorosNao" + + "mh Crìstean is NibheisCoirèa a TuathCoirèaCuibhèitNa h-Eileanan Caim" + + "eanCasachstànLàthosLeabanonNaomh LùiseaLichtensteinSri LancaLibèirLe" + + "asotoAn LiotuainLugsamburgAn LaitbheLibiaMorocoMonacoA’ MholdobhaAm " + + "Monadh NeagrachNaomh MàrtainnMadagasgarEileanan MharshallA’ Mhasadon" + + "MàiliMiànmarDùthaich nam MongolMacàthu SAR na SìneNa h-Eileanan Mair" + + "ianach a TuathMairtinicMoratàineaMontsaratMaltaNa h-Eileanan Mhoiris" + + "easNa h-Eileanan MhaladaibhMalabhaidhMeagsagoMalaidhseaMòsaimbicAn N" + + "amaibCailleann NuadhNìgeirEilean NorfolkNigèiriaNiocaraguaNa Tìrean " + + "ÌsleNirribhidhNeapàlNabhruNiueSealainn NuadhOmànPanamaPearùPoilinèi" + + "s na FraingeGini Nuadh PhaputhachNa h-Eileanan FilipineachPagastànA’" + + " PhòlainnSaint Pierre agus MiquelonEileanan Pheit a’ ChàirnPorto Rìc" + + "eoNa Ranntairean PalastaineachA’ PhortagailPalabhParaguaidhCatarRoin" + + "n Iomallach a’ Chuain SèimhRéunionRomàiniaAn t-SèirbAn RuisRubhandaA" + + "ràibia nan SabhdEileanan SholaimhNa h-Eileanan SheiseallSudànAn t-Su" + + "ainSingeapòrEilean Naomh EilidhAn t-SlòbhainSvalbard agus Jan MayenA" + + "n t-SlòbhacSiarra LeòmhannSan MarinoSeanagalSomàiliaSuranamSudàn a D" + + "easSão Tomé agus PríncipeAn SalbhadorSint MaartenSiridheaDùthaich na" + + "n SuasaidhTristan da CunhaNa h-Eileanan Turcach is CaiceoAn t-SeàdRa" + + "nntairean a Deas na FraingeTogoDùthaich nan TàidhTaidigeastànTokelau" + + "Timor-LesteTurcmanastànTuiniseaTongaAn TuircTrianaid agus TobagoTubh" + + "aluTaidh-BhànAn TansanAn UcràinUgandaMeanbh-Eileanan Iomallach nan S" + + "ANa Dùthchannan AonaichteNa Stàitean AonaichteUruguaidhUsbagastànCat" + + "hair na BhatacainNaomh Bhionsant agus Eileanan GreanadachA’ Bheinise" + + "alaEileanan Breatannach na MaighdinnEileanan na Maighdinn aig na SAB" + + "hiet-NamVanuatuUallas agus FutunaSamothaA’ ChosobhoAn EamanMayotteAf" + + "raga a DeasSàimbiaAn t-SìombabRoinn-dùthcha neo-aithnichteAn Saoghal" + + "AfragaAimeireaga a TuathAimeireaga a DeasRoinn a’ Chuain SèimhAfraga" + + " an IarMeadhan AimeireagaAfraga an EarAfraga a TuathMeadhan AfragaCe" + + "ann a Deas AfragaAn Dà AimeireagaCeann a Tuath AimeireagaAm Muir Car" + + "aibeachÀisia an EarÀisia a DeasÀisia an Ear-dheasAn Roinn-Eòrpa a De" + + "asAstràilia is Sealainn NuadhNa h-Eileanan DubhaRoinn nam Meanbh-Eil" + + "eananPoilinèisÀisiaMeadhan ÀisiaÀisia an IarAn Roinn-EòrpaAn Roinn-E" + + "òrpa an EarAn Roinn-Eòrpa a TuathAn Roinn-Eòrpa an IarAimeireaga La" + + "idinneach", + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0017, 0x001e, 0x003e, 0x004a, 0x005e, 0x0067, 0x0070, 0x0079, 0x0080, 0x008c, 0x0098, 0x00af, 0x00b8, 0x00c2, 0x00c8, - 0x00dc, 0x00e8, 0x0100, 0x0108, 0x0112, 0x011d, 0x012b, 0x0138, - 0x0140, 0x014a, 0x0150, 0x0161, 0x016a, 0x0173, 0x017c, 0x0197, - 0x019e, 0x01b4, 0x01ba, 0x01c7, 0x01cf, 0x01de, 0x01eb, 0x01f1, - 0x020f, 0x021f, 0x0236, 0x024f, 0x025a, 0x026a, 0x0277, 0x0280, - 0x0287, 0x0290, 0x0299, 0x02aa, 0x02b6, 0x02bb, 0x02c8, 0x02d0, - 0x02e1, 0x02e9, 0x02fa, 0x0309, 0x0315, 0x0320, 0x032c, 0x0336, - // Entry 40 - 7F - 0x0352, 0x035a, 0x036c, 0x0374, 0x037e, 0x0388, 0x0396, 0x039c, - 0x03a7, 0x03af, 0x03c3, 0x03c3, 0x03d0, 0x03d5, 0x03ee, 0x0400, - 0x0413, 0x041d, 0x0422, 0x0439, 0x0442, 0x0452, 0x0467, 0x0472, - 0x0477, 0x0481, 0x0490, 0x049d, 0x04a1, 0x04a9, 0x04c0, 0x04cb, - 0x04fc, 0x0505, 0x0509, 0x0513, 0x051d, 0x0533, 0x0552, 0x055b, - 0x056a, 0x0571, 0x057a, 0x0591, 0x05a0, 0x05a7, 0x05ae, 0x05bd, - 0x05cc, 0x05f4, 0x05fa, 0x0600, 0x060b, 0x0615, 0x061f, 0x0627, - 0x062e, 0x0639, 0x063f, 0x064a, 0x0653, 0x065b, 0x0662, 0x067c, - // Entry 80 - BF - 0x068b, 0x0692, 0x069b, 0x06b0, 0x06bb, 0x06c2, 0x06ca, 0x06d7, - 0x06e3, 0x06ec, 0x06f3, 0x06fa, 0x0705, 0x070f, 0x0719, 0x071e, - 0x0724, 0x072a, 0x0738, 0x074a, 0x0759, 0x0763, 0x0775, 0x0782, - 0x0788, 0x0790, 0x07a4, 0x07b9, 0x07d9, 0x07e2, 0x07ed, 0x07f6, - 0x07fb, 0x0813, 0x082b, 0x0835, 0x083d, 0x0847, 0x0851, 0x085a, - 0x0869, 0x0870, 0x087e, 0x0887, 0x0891, 0x08a1, 0x08ab, 0x08b2, - 0x08b8, 0x08bc, 0x08ca, 0x08cf, 0x08d5, 0x08db, 0x08f0, 0x0905, - 0x091e, 0x0927, 0x0935, 0x094f, 0x0969, 0x0975, 0x0991, 0x09a0, - // Entry C0 - FF - 0x09a6, 0x09b0, 0x09b5, 0x09d7, 0x09df, 0x09e8, 0x09f3, 0x09fa, - 0x0a02, 0x0a14, 0x0a25, 0x0a3c, 0x0a42, 0x0a4c, 0x0a56, 0x0a69, - 0x0a77, 0x0a8e, 0x0a9b, 0x0aab, 0x0ab5, 0x0abd, 0x0ac6, 0x0acd, - 0x0ada, 0x0af3, 0x0aff, 0x0b0b, 0x0b13, 0x0b29, 0x0b39, 0x0b58, - 0x0b62, 0x0b7f, 0x0b83, 0x0b97, 0x0ba4, 0x0bab, 0x0bb6, 0x0bc3, - 0x0bcb, 0x0bd0, 0x0bd8, 0x0bec, 0x0bf3, 0x0bfe, 0x0c07, 0x0c11, - 0x0c17, 0x0c37, 0x0c37, 0x0c4d, 0x0c56, 0x0c61, 0x0c75, 0x0c9d, - 0x0cad, 0x0cce, 0x0ced, 0x0cf6, 0x0cfd, 0x0d0f, 0x0d16, 0x0d23, - // Entry 100 - 13F - 0x0d2b, 0x0d32, 0x0d3f, 0x0d47, 0x0d54, 0x0d71, 0x0d7b, 0x0d81, - 0x0d93, 0x0da4, 0x0dbc, 0x0dc9, 0x0ddb, 0x0de8, 0x0df6, 0x0e04, - 0x0e17, 0x0e28, 0x0e40, 0x0e52, 0x0e5f, 0x0e6c, 0x0e7f, 0x0e95, - 0x0eb1, 0x0ec4, 0x0edd, 0x0ee7, 0x0eed, 0x0efb, 0x0f08, 0x0f17, - 0x0f2d, 0x0f44, 0x0f5a, 0x0f70, + 0x00dc, 0x00e8, 0x00fe, 0x0106, 0x0110, 0x011b, 0x0129, 0x0136, + 0x013e, 0x0148, 0x014e, 0x015f, 0x0168, 0x0171, 0x017a, 0x0195, + 0x019c, 0x01b2, 0x01b8, 0x01c5, 0x01cd, 0x01dc, 0x01e9, 0x01ef, + 0x020d, 0x021d, 0x0234, 0x024d, 0x0258, 0x0268, 0x0275, 0x027e, + 0x0285, 0x028e, 0x0297, 0x02a8, 0x02b4, 0x02b9, 0x02c6, 0x02ce, + 0x02df, 0x02e7, 0x02f0, 0x02ff, 0x030b, 0x0316, 0x0322, 0x032c, + // Entry 40 - 7F + 0x0348, 0x0350, 0x0362, 0x036a, 0x0374, 0x037e, 0x038c, 0x0392, + 0x039d, 0x03a5, 0x03b9, 0x03c6, 0x03d3, 0x03d8, 0x03f1, 0x0403, + 0x0416, 0x0420, 0x0425, 0x043c, 0x0445, 0x0455, 0x046a, 0x0475, + 0x047a, 0x0484, 0x0493, 0x04a0, 0x04a4, 0x04ac, 0x04c3, 0x04ce, + 0x04ff, 0x0508, 0x050c, 0x0516, 0x0520, 0x0536, 0x0555, 0x055e, + 0x056d, 0x0574, 0x057d, 0x0594, 0x05a3, 0x05aa, 0x05b1, 0x05c0, + 0x05cf, 0x05f7, 0x05fd, 0x0603, 0x060e, 0x0618, 0x0622, 0x062a, + 0x0631, 0x063c, 0x0642, 0x064d, 0x0656, 0x065e, 0x0665, 0x067f, + // Entry 80 - BF + 0x068e, 0x0695, 0x069e, 0x06b3, 0x06be, 0x06c5, 0x06cd, 0x06da, + 0x06e6, 0x06ef, 0x06f6, 0x06fd, 0x0708, 0x0712, 0x071c, 0x0721, + 0x0727, 0x072d, 0x073b, 0x074d, 0x075c, 0x0766, 0x0778, 0x0785, + 0x078b, 0x0793, 0x07a7, 0x07bc, 0x07dc, 0x07e5, 0x07f0, 0x07f9, + 0x07fe, 0x0816, 0x082e, 0x0838, 0x0840, 0x084a, 0x0854, 0x085d, + 0x086c, 0x0873, 0x0881, 0x088a, 0x0894, 0x08a4, 0x08ae, 0x08b5, + 0x08bb, 0x08bf, 0x08cd, 0x08d2, 0x08d8, 0x08de, 0x08f3, 0x0908, + 0x0921, 0x092a, 0x0938, 0x0952, 0x096d, 0x0979, 0x0995, 0x09a4, + // Entry C0 - FF + 0x09aa, 0x09b4, 0x09b9, 0x09db, 0x09e3, 0x09ec, 0x09f7, 0x09fe, + 0x0a06, 0x0a18, 0x0a29, 0x0a40, 0x0a46, 0x0a50, 0x0a5a, 0x0a6d, + 0x0a7b, 0x0a92, 0x0a9f, 0x0aaf, 0x0ab9, 0x0ac1, 0x0aca, 0x0ad1, + 0x0ade, 0x0af7, 0x0b03, 0x0b0f, 0x0b17, 0x0b2d, 0x0b3d, 0x0b5c, + 0x0b66, 0x0b83, 0x0b87, 0x0b9b, 0x0ba8, 0x0baf, 0x0bba, 0x0bc7, + 0x0bcf, 0x0bd4, 0x0bdc, 0x0bf0, 0x0bf7, 0x0c02, 0x0c0b, 0x0c15, + 0x0c1b, 0x0c3b, 0x0c54, 0x0c6a, 0x0c73, 0x0c7e, 0x0c92, 0x0cba, + 0x0cca, 0x0ceb, 0x0d0a, 0x0d13, 0x0d1a, 0x0d2c, 0x0d33, 0x0d40, + // Entry 100 - 13F + 0x0d48, 0x0d4f, 0x0d5c, 0x0d64, 0x0d71, 0x0d8e, 0x0d98, 0x0d9e, + 0x0db0, 0x0dc1, 0x0dd9, 0x0de6, 0x0df8, 0x0e05, 0x0e13, 0x0e21, + 0x0e34, 0x0e45, 0x0e5d, 0x0e6f, 0x0e7c, 0x0e89, 0x0e9c, 0x0eb2, + 0x0ece, 0x0ee1, 0x0efa, 0x0f04, 0x0f0a, 0x0f18, 0x0f25, 0x0f34, + 0x0f4a, 0x0f61, 0x0f77, 0x0f77, 0x0f8d, }, }, { // gl "Illa de AscensiónAndorraEmiratos Árabes UnidosAfganistánAntiga e Barbuda" + "AnguilaAlbaniaArmeniaAngolaAntártidaArxentinaSamoa AmericanaAustriaA" + - "ustraliaArubaIllas AlandAcerbaixánBosnia-HercegovinaBarbadosBangladé" + - "sBélxicaBurkina FasoBulgariaBahrainBurundiBeninSaint-BarthélemyBermu" + - "dasBruneiBoliviaCaribe NeerlandésBrasilBahamasButánIlla BouvetBotsua" + - "naBielorrusiaBeliceCanadáIllas Cocos (Keeling)República Democrática " + - "do CongoRepública CentroafricanaRepública do CongoSuízaCosta do Marf" + - "ilIllas CookChileCamerúnA ChinaColombiaIlla ClippertonCosta RicaCuba" + - "Cabo VerdeCuraçaoIlla de NadalChipreRepública ChecaAlemañaDiego Garc" + - "íaDjibutiDinamarcaDominicaRepública DominicanaAlxeriaCeuta e Melill" + - "aEcuadorEstoniaExiptoSáhara OccidentalEritreaEspañaEtiopíaUnión Euro" + - "peaFinlandiaFidxiIllas MalvinasMicronesiaIllas FeroeFranciaGabónRein" + + "ustraliaArubaIllas AlandAcerbaixánBosnia e HercegovinaBarbadosBangla" + + "deshBélxicaBurkina FasoBulgariaBahrainBurundiBeninSaint-BarthélemyBe" + + "rmudasBruneiBoliviaCaribe NeerlandésBrasilBahamasButánIlla BouvetBot" + + "swanaBielorrusiaBelizeCanadáIllas Cocos (Keeling)República Democráti" + + "ca do CongoRepública CentroafricanaRepública do CongoSuízaCosta do M" + + "arfilIllas CookChileCamerúnChinaColombiaIlla ClippertonCosta RicaCub" + + "aCabo VerdeCuraçaoIlla de NadalChipreChequiaAlemañaDiego GarcíaDjibu" + + "tiDinamarcaDominicaRepública DominicanaAlxeriaCeuta e MelillaEcuador" + + "EstoniaExiptoSáhara OccidentalEritreaEspañaEtiopíaUnión EuropeaEuroz" + + "onaFinlandiaFidxiIllas MalvinasMicronesiaIllas FeroeFranciaGabónRein" + "o UnidoGranadaXeorxiaGüiana FrancesaGuernseyGhanaXibraltarGroenlandi" + "aGambiaGuineaGuadalupeGuinea EcuatorialGreciaIllas Xeorxia do Sur e " + - "Sandwich do SurGuatemalaGuamGuinea-BisauGüianaHong Kong RAE de China" + - "Illa Heard e Illas McDonaldHondurasCroaciaHaitíHungríaIllas Canarias" + - "IndonesiaIrlandaIsraelIlla de ManA IndiaTerritorio Británico do Océa" + - "no ÍndicoIraqIránIslandiaItaliaJerseyXamaicaXordaniaO XapónKenyaQuir" + - "guicistánCamboxaKiribatiComoresSaint Kitts e NevisCorea do NorteCore" + - "a do SurKuwaitIllas CaimánCasaquistánLaosLíbanoSanta LucíaLiechtenst" + - "einSri LankaLiberiaLesotoLituaniaLuxemburgoLetoniaLibiaMarrocosMónac" + - "oMoldaviaMontenegroSaint-MartinMadagascarIllas MarshallMacedoniaMalí" + - "Myanmar (Birmania)MongoliaMacau RAE de ChinaIllas Marianas do NorteM" + - "artinicaMauritaniaMontserratMaltaMauricioMaldivasMalauiMéxicoMalaisi" + - "aMozambiqueNamibiaNova CaledoniaNíxerIlla NorfolkNixeriaNicaraguaPaí" + - "ses BaixosNoruegaNepalNauruNiueNova ZelandiaOmánPanamáPerúPolinesia " + - "FrancesaPapúa-Nova GuineaFilipinasPaquistánPoloniaSaint Pierre e Miq" + - "uelonIllas PitcairnPorto RicoTerritorios palestinosPortugalPalauPara" + - "guaiQatarTerritorios afastados de OceaníaReuniónRomaníaSerbiaRusiaRu" + - "andaArabia SauditaIllas SalomónSeixelesSudánSueciaSingapurSanta Hele" + + "Sandwich do SurGuatemalaGuamGuinea-BissauGüianaHong Kong RAE da Chin" + + "aIlla Heard e Illas McDonaldHondurasCroaciaHaitíHungríaIllas Canaria" + + "sIndonesiaIrlandaIsraelIlla de ManIndiaTerritorio Británico do Océan" + + "o ÍndicoIraqIránIslandiaItaliaJerseyXamaicaXordaniaXapónKenyaKirguiz" + + "istánCambodjaKiribatiComoresSaint Kitts e NevisCorea do NorteCorea d" + + "o SurKuwaitIllas CaimánCasaquistánLaosLíbanoSanta LucíaLiechtenstein" + + "Sri LankaLiberiaLesotoLituaniaLuxemburgoLetoniaLibiaMarrocosMónacoMo" + + "ldaviaMontenegroSaint-MartinMadagascarIllas MarshallMacedoniaMalíMya" + + "nmar (Birmania)MongoliaMacau RAE da ChinaIllas Marianas do NorteMart" + + "inicaMauritaniaMontserratMaltaMauricioMaldivasMalawiMéxicoMalaisiaMo" + + "zambiqueNamibiaNova CaledoniaNíxerIlla NorfolkNixeriaNicaraguaPaíses" + + " BaixosNoruegaNepalNauruNiueNova ZelandiaOmánPanamáPerúPolinesia Fra" + + "ncesaPapúa-Nova GuineaFilipinasPaquistánPoloniaSaint-Pierre-et-Mique" + + "lonIllas PitcairnPorto RicoTerritorios PalestinosPortugalPalauParagu" + + "aiQatarTerritorios afastados de OceaníaReuniónRomaníaSerbiaRusiaRuan" + + "daArabia SauditaIllas SalomónSeychellesSudánSueciaSingapurSanta Hele" + "naEsloveniaSvalbard e Jan MayenEslovaquiaSerra LeoaSan MarinoSenegal" + - "SomaliaSurinameSudán do surSan Tomé e PríncipeO SalvadorSint Maarten" + - "SiriaSuacilandiaTristán da CunhaIllas Turks e CaicosChadTerritorios " + - "Austrais FrancesesTogoTailandiaTaxiquistánToquelauTimor LesteTurcome" + - "nistánTunisiaTongaTurquíaTrinidad e TobagoTuvaluTaiwánTanzaniaUcraín" + - "aUgandaIllas Ultramarinas dos EUANacións UnidasEstados Unidos de Amé" + - "ricaUruguaiUzbekistánCidade do VaticanoSan Vicente e as GranadinasVe" + + "SomaliaSurinameSudán do SurSan Tomé e PríncipeO SalvadorSint Maarten" + + "SiriaSwazilandiaTristán da CunhaIllas Turks e CaicosChadTerritorios " + + "Austrais FrancesesTogoTailandiaTaxiquistánTokelauTimor LesteTurcomen" + + "istánTunisiaTongaTurquíaTrinidad e TobagoTuvaluTaiwánTanzaniaUcraína" + + "UgandaIllas Ultramarinas dos EUANacións UnidasEstados Unidos de Amér" + + "icaUruguaiUzbequistánCidade do VaticanoSan Vicente e As GranadinasVe" + "nezuelaIllas Virxes BritánicasIllas Virxes EstadounidensesVietnamVan" + - "uatuWallis e FutunaSamoaKosovoIemenMayotteSuráfricaZambiaCimbabuerex" + - "ión descoñecidamundoÁfricaNorteaméricaSuraméricaOceaníaÁfrica Occide" + + "uatuWallis e FutunaSamoaKosovoIemenMayotteSuráfricaZambiaZimbabweRex" + + "ión descoñecidaMundoÁfricaNorteaméricaSuraméricaOceaníaÁfrica Occide" + "ntalAmérica CentralÁfrica OrientalÁfrica SetentrionalÁfrica CentralÁ" + "frica MeridionalAméricaAmérica do NorteCaribeAsia OrientalAsia Merid" + - "ionalSueste AsiáticoEuropa MeridionalAustralasiaMelanesiarexión da M" + + "ionalSueste AsiáticoEuropa MeridionalAustralasiaMelanesiaRexión da M" + "icronesiaPolinesiaAsiaAsia CentralAsia OccidentalEuropaEuropa do Les" + "teEuropa SetentrionalEuropa OccidentalAmérica Latina", - []uint16{ // 292 elements + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0012, 0x0019, 0x0030, 0x003b, 0x004b, 0x0052, 0x0059, 0x0060, 0x0066, 0x0070, 0x0079, 0x0088, 0x008f, 0x0098, 0x009d, - 0x00a8, 0x00b3, 0x00c5, 0x00cd, 0x00d7, 0x00df, 0x00eb, 0x00f3, - 0x00fa, 0x0101, 0x0106, 0x0117, 0x011f, 0x0125, 0x012c, 0x013e, - 0x0144, 0x014b, 0x0151, 0x015c, 0x0164, 0x016f, 0x0175, 0x017c, - 0x0191, 0x01b1, 0x01ca, 0x01dd, 0x01e3, 0x01f2, 0x01fc, 0x0201, - 0x0209, 0x0210, 0x0218, 0x0227, 0x0231, 0x0235, 0x023f, 0x0247, - 0x0254, 0x025a, 0x026a, 0x0272, 0x027f, 0x0286, 0x028f, 0x0297, - // Entry 40 - 7F - 0x02ac, 0x02b3, 0x02c2, 0x02c9, 0x02d0, 0x02d6, 0x02e8, 0x02ef, - 0x02f6, 0x02fe, 0x030c, 0x030c, 0x0315, 0x031a, 0x0328, 0x0332, - 0x033d, 0x0344, 0x034a, 0x0355, 0x035c, 0x0363, 0x0373, 0x037b, - 0x0380, 0x0389, 0x0394, 0x039a, 0x03a0, 0x03a9, 0x03ba, 0x03c0, - 0x03e6, 0x03ef, 0x03f3, 0x03ff, 0x0406, 0x041c, 0x0437, 0x043f, + 0x00a8, 0x00b3, 0x00c7, 0x00cf, 0x00d9, 0x00e1, 0x00ed, 0x00f5, + 0x00fc, 0x0103, 0x0108, 0x0119, 0x0121, 0x0127, 0x012e, 0x0140, + 0x0146, 0x014d, 0x0153, 0x015e, 0x0166, 0x0171, 0x0177, 0x017e, + 0x0193, 0x01b3, 0x01cc, 0x01df, 0x01e5, 0x01f4, 0x01fe, 0x0203, + 0x020b, 0x0210, 0x0218, 0x0227, 0x0231, 0x0235, 0x023f, 0x0247, + 0x0254, 0x025a, 0x0261, 0x0269, 0x0276, 0x027d, 0x0286, 0x028e, + // Entry 40 - 7F + 0x02a3, 0x02aa, 0x02b9, 0x02c0, 0x02c7, 0x02cd, 0x02df, 0x02e6, + 0x02ed, 0x02f5, 0x0303, 0x030b, 0x0314, 0x0319, 0x0327, 0x0331, + 0x033c, 0x0343, 0x0349, 0x0354, 0x035b, 0x0362, 0x0372, 0x037a, + 0x037f, 0x0388, 0x0393, 0x0399, 0x039f, 0x03a8, 0x03b9, 0x03bf, + 0x03e5, 0x03ee, 0x03f2, 0x03ff, 0x0406, 0x041c, 0x0437, 0x043f, 0x0446, 0x044c, 0x0454, 0x0462, 0x046b, 0x0472, 0x0478, 0x0483, - 0x048a, 0x04b2, 0x04b6, 0x04bb, 0x04c3, 0x04c9, 0x04cf, 0x04d6, - 0x04de, 0x04e6, 0x04eb, 0x04f9, 0x0500, 0x0508, 0x050f, 0x0522, - // Entry 80 - BF - 0x0530, 0x053c, 0x0542, 0x054f, 0x055b, 0x055f, 0x0566, 0x0572, - 0x057f, 0x0588, 0x058f, 0x0595, 0x059d, 0x05a7, 0x05ae, 0x05b3, - 0x05bb, 0x05c2, 0x05ca, 0x05d4, 0x05e0, 0x05ea, 0x05f8, 0x0601, - 0x0606, 0x0618, 0x0620, 0x0632, 0x0649, 0x0652, 0x065c, 0x0666, - 0x066b, 0x0673, 0x067b, 0x0681, 0x0688, 0x0690, 0x069a, 0x06a1, - 0x06af, 0x06b5, 0x06c1, 0x06c8, 0x06d1, 0x06df, 0x06e6, 0x06eb, - 0x06f0, 0x06f4, 0x0701, 0x0706, 0x070d, 0x0712, 0x0724, 0x0736, - 0x073f, 0x0749, 0x0750, 0x0767, 0x0775, 0x077f, 0x0795, 0x079d, - // Entry C0 - FF - 0x07a2, 0x07aa, 0x07af, 0x07d0, 0x07d8, 0x07e0, 0x07e6, 0x07eb, - 0x07f1, 0x07ff, 0x080d, 0x0815, 0x081b, 0x0821, 0x0829, 0x0835, - 0x083e, 0x0852, 0x085c, 0x0866, 0x0870, 0x0877, 0x087e, 0x0886, - 0x0893, 0x08a8, 0x08b2, 0x08be, 0x08c3, 0x08ce, 0x08df, 0x08f3, - 0x08f7, 0x0915, 0x0919, 0x0922, 0x092e, 0x0936, 0x0941, 0x094f, - 0x0956, 0x095b, 0x0963, 0x0974, 0x097a, 0x0981, 0x0989, 0x0991, - 0x0997, 0x09b1, 0x09c0, 0x09da, 0x09e1, 0x09ec, 0x09fe, 0x0a19, - 0x0a22, 0x0a3a, 0x0a56, 0x0a5d, 0x0a64, 0x0a73, 0x0a78, 0x0a7e, - // Entry 100 - 13F - 0x0a83, 0x0a8a, 0x0a94, 0x0a9a, 0x0aa2, 0x0ab6, 0x0abb, 0x0ac2, - 0x0acf, 0x0ada, 0x0ae2, 0x0af4, 0x0b04, 0x0b14, 0x0b28, 0x0b37, - 0x0b49, 0x0b51, 0x0b62, 0x0b68, 0x0b75, 0x0b84, 0x0b94, 0x0ba5, - 0x0bb0, 0x0bb9, 0x0bce, 0x0bd7, 0x0bdb, 0x0be7, 0x0bf6, 0x0bfc, - 0x0c0b, 0x0c1e, 0x0c2f, 0x0c3e, + 0x0488, 0x04b0, 0x04b4, 0x04b9, 0x04c1, 0x04c7, 0x04cd, 0x04d4, + 0x04dc, 0x04e2, 0x04e7, 0x04f4, 0x04fc, 0x0504, 0x050b, 0x051e, + // Entry 80 - BF + 0x052c, 0x0538, 0x053e, 0x054b, 0x0557, 0x055b, 0x0562, 0x056e, + 0x057b, 0x0584, 0x058b, 0x0591, 0x0599, 0x05a3, 0x05aa, 0x05af, + 0x05b7, 0x05be, 0x05c6, 0x05d0, 0x05dc, 0x05e6, 0x05f4, 0x05fd, + 0x0602, 0x0614, 0x061c, 0x062e, 0x0645, 0x064e, 0x0658, 0x0662, + 0x0667, 0x066f, 0x0677, 0x067d, 0x0684, 0x068c, 0x0696, 0x069d, + 0x06ab, 0x06b1, 0x06bd, 0x06c4, 0x06cd, 0x06db, 0x06e2, 0x06e7, + 0x06ec, 0x06f0, 0x06fd, 0x0702, 0x0709, 0x070e, 0x0720, 0x0732, + 0x073b, 0x0745, 0x074c, 0x0764, 0x0772, 0x077c, 0x0792, 0x079a, + // Entry C0 - FF + 0x079f, 0x07a7, 0x07ac, 0x07cd, 0x07d5, 0x07dd, 0x07e3, 0x07e8, + 0x07ee, 0x07fc, 0x080a, 0x0814, 0x081a, 0x0820, 0x0828, 0x0834, + 0x083d, 0x0851, 0x085b, 0x0865, 0x086f, 0x0876, 0x087d, 0x0885, + 0x0892, 0x08a7, 0x08b1, 0x08bd, 0x08c2, 0x08cd, 0x08de, 0x08f2, + 0x08f6, 0x0914, 0x0918, 0x0921, 0x092d, 0x0934, 0x093f, 0x094d, + 0x0954, 0x0959, 0x0961, 0x0972, 0x0978, 0x097f, 0x0987, 0x098f, + 0x0995, 0x09af, 0x09be, 0x09d8, 0x09df, 0x09eb, 0x09fd, 0x0a18, + 0x0a21, 0x0a39, 0x0a55, 0x0a5c, 0x0a63, 0x0a72, 0x0a77, 0x0a7d, + // Entry 100 - 13F + 0x0a82, 0x0a89, 0x0a93, 0x0a99, 0x0aa1, 0x0ab5, 0x0aba, 0x0ac1, + 0x0ace, 0x0ad9, 0x0ae1, 0x0af3, 0x0b03, 0x0b13, 0x0b27, 0x0b36, + 0x0b48, 0x0b50, 0x0b61, 0x0b67, 0x0b74, 0x0b83, 0x0b93, 0x0ba4, + 0x0baf, 0x0bb8, 0x0bcd, 0x0bd6, 0x0bda, 0x0be6, 0x0bf5, 0x0bfb, + 0x0c0a, 0x0c1d, 0x0c2e, 0x0c2e, 0x0c3d, }, }, { // gsw @@ -36428,7 +38490,7 @@ var regionHeaders = [252]header{ "alie und NöiseelandMelaneesieMikroneesischs InselgebietPolineesieAas" + "ieZentraalaasieWeschtaasieEuroopaOschteuroopaNordeuroopaWeschteuroop" + "aLatiinameerika", - []uint16{ // 292 elements + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0007, 0x0024, 0x0030, 0x0043, 0x004b, 0x0053, 0x005b, 0x0062, 0x006b, 0x0076, 0x0089, 0x0096, 0x00a2, 0x00a7, @@ -36470,7 +38532,7 @@ var regionHeaders = [252]header{ 0x0af7, 0x0b05, 0x0b0d, 0x0b19, 0x0b27, 0x0b32, 0x0b3c, 0x0b4a, 0x0b5c, 0x0b7d, 0x0b90, 0x0b97, 0x0ba1, 0x0bac, 0x0bbc, 0x0bc8, 0x0be4, 0x0bee, 0x0c08, 0x0c12, 0x0c17, 0x0c24, 0x0c2f, 0x0c36, - 0x0c42, 0x0c4d, 0x0c5a, 0x0c68, + 0x0c42, 0x0c4d, 0x0c5a, 0x0c5a, 0x0c68, }, }, { // gu @@ -36745,7 +38807,7 @@ var regionHeaders = [252]header{ "na Azijajužna EuropaAwstralazijaMelaneziskaMikroneziska (kupowy regi" + "on)PolyneziskaAzijacentralna Azijazapadna AzijaEuropawuchodna Europa" + "sewjerna Europazapadna EuropaŁaćonska Amerika", - []uint16{ // 292 elements + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0009, 0x0010, 0x002b, 0x0036, 0x0047, 0x004f, 0x0057, 0x005f, 0x0065, 0x006f, 0x007a, 0x0088, 0x0091, 0x009b, 0x00a0, @@ -36787,7 +38849,7 @@ var regionHeaders = [252]header{ 0x0ae6, 0x0af4, 0x0afd, 0x0b0b, 0x0b1c, 0x0b2b, 0x0b3a, 0x0b4a, 0x0b57, 0x0b5e, 0x0b79, 0x0b81, 0x0b8f, 0x0b9b, 0x0bad, 0x0bba, 0x0bc6, 0x0bd1, 0x0bed, 0x0bf8, 0x0bfd, 0x0c0c, 0x0c19, 0x0c1f, - 0x0c2e, 0x0c3d, 0x0c4b, 0x0c5d, + 0x0c2e, 0x0c3d, 0x0c4b, 0x0c4b, 0x0c5d, }, }, { // hu @@ -36803,7 +38865,7 @@ var regionHeaders = [252]header{ idRegionIdx, }, { // ig - "BininBemudaChainaHatiComorosuLibyiaMaldivesaNigeria", + "BininBemudaChainaHatiComorosuLibyiaMaldivesaNaịjịrịa", []uint16{ // 172 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -36829,7 +38891,7 @@ var regionHeaders = [252]header{ 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x0023, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, - 0x002c, 0x002c, 0x002c, 0x0033, + 0x002c, 0x002c, 0x002c, 0x003a, }, }, { // ii @@ -37247,42 +39309,42 @@ var regionHeaders = [252]header{ "BeliziKanadáIlhas Kokus (Keeling)Kongu - KinxasaRepublika Sentru-Afr" + "ikanuKongu - BrazaviliSuisaKosta di MarfinIlhas KukXiliKamarõisXinaK" + "olômbiaIlha KlipertonKosta RikaKubaKabu VerdiKurasauIlha di NatalXip" + - "riRepúblika TxekaAlimanhaDiegu GarsiaDjibutiDinamarkaDominikaRepúbli" + - "ka DominikanaArjéliaSeuta i MelilhaEkuadorStóniaEjituSara OsidentalI" + - "ritreiaSpanhaEtiópiaUniãu EuropeiaFinlándiaFidjiIlhas MalvinasMikron" + - "éziaIlhas FaroeFransaGabãuReinu UniduGranadaJiórjiaGiana FransezaGe" + - "rnziGanaJibraltarGronelándiaGámbiaGineGuadalupiGine EkuatorialGrésia" + - "Ilhas Jeórjia di Sul i Sanduixi di SulGuatimalaGuamGine-BisauGianaRe" + - "jiãu Administrativu Spesial di Hong KongIlhas Heard i McDonaldOndura" + - "sKroásiaAitíUngriaKanáriasIndonéziaIrlandaIsraelIlha di ManÍndiaIlha" + - "s Británikas di ÍndikuIrakiIrãuIslándiaItáliaJersiJamaikaJordániaJap" + - "ãuKéniaKirgistãuKambodjaKiribatiKamorisSãu Kristovãu i NevisKoreia " + - "di NortiKoreia di SulKueitiIlhas KaimãuKazakistãuLausLíbanuSanta Lús" + - "iaLixenstainSri LankaLibériaLezotuLituániaLuxemburguLetóniaLíbiaMaro" + - "kusMónakuMoldáviaMontenegruSãu Martinhu di FransaMadagaskarIlhas Mar" + - "xalMasidóniaMaliMianmar (Birmánia)MongóliaRejiãu Administrativu Spes" + - "ial di MakauIlhas Marianas di NortiMartinikaMauritániaMonseratMaltaM" + - "aurísiaMaldivasMalauiMéxikuMaláziaMusambikiNamíbiaNova KalidóniaNije" + - "rIlhas NorfolkNijériaNikaráguaOlandaNoruegaNepalNauruNiueNova Zilánd" + - "iaOmanPanamáPeruPolinézia FransezaPapua-Nova GineFilipinasPakistãuPu" + - "lóniaSan Piere i MikelonPirkairnPortu RikuPalistinaPurtugalPalauPara" + - "guaiKatarIlhas di OseaniaRuniãuRuméniaSérviaRúsiaRuandaArábia Saudit" + - "aIlhas SalumãuSeixelisSudãuSuésiaSingapuraSanta IlenaSlovéniaSvalbar" + - "d i Jan MaienSlovákiaSera LioaSan MarinuSenegalSumáliaSurinamiSudãu " + - "di SulSãu Tume i PrínsipiEl SalvadorSãu Martinhu di OlandaSíriaSuazi" + - "lándiaTristan da KunhaIlhas Turkas i KaikusTxadiTerras Franses di Su" + - "lToguTailándiaTadjikistãuTokelauTimor LestiTurkumenistãuTuníziaTonga" + - "TurkiaTrinidad i TobaguTuvaluTaiuanTanzániaUkrániaUgandaIlhas Minori" + - "s Distantis de Stadus UnidusStadus Unidos di MerkaUruguaiUzbekistãuV" + - "atikanuSãu Bisenti i GranadinasVinizuelaIlhas Virjens BritánikasIlha" + - "s Virjens MerkanasVietnamVanuatuUalis i FutunaSamoaKozovuIémenMaiote" + - "Áfrika di SulZámbiaZimbábuiRejiãu DiskonxeduMunduÁfrikaMerka di Nor" + - "tiMerka di SulOseaniaÁfrika OsidentalMerka SentralÁfrika OrientalNor" + - "ti di ÁfrikaÁfrika SentralSul di ÁfrikaMerkasNorti di MerkaKaraibasÁ" + - "zia OrientalSul di ÁziaSudesti AziátikuEuropa di SulAustraláziaMelan" + - "éziaRejiãu di MikronéziaPolinéziaÁziaÁzia SentralÁzia OsidentalEuro" + - "paEuropa OrientalEuropa di NortiEuropa OsidentalMerka Latinu", - []uint16{ // 292 elements + "riTxékiaAlimanhaDiegu GarsiaDjibutiDinamarkaDominikaRepúblika Domini" + + "kanaArjéliaSeuta i MelilhaEkuadorStóniaEjituSara OsidentalIritreiaSp" + + "anhaEtiópiaUniãu EuropeiaFinlándiaFidjiIlhas MalvinasMikronéziaIlhas" + + " FaroeFransaGabãuReinu UniduGranadaJiórjiaGiana FransezaGernziGanaJi" + + "braltarGronelándiaGámbiaGineGuadalupiGine EkuatorialGrésiaIlhas Jeór" + + "jia di Sul i Sanduixi di SulGuatimalaGuamGine-BisauGianaRejiãu Admin" + + "istrativu Spesial di Hong KongIlhas Heard i McDonaldOndurasKroásiaAi" + + "tíUngriaKanáriasIndonéziaIrlandaIsraelIlha di ManÍndiaIlhas Británik" + + "as di ÍndikuIrakiIrãuIslándiaItáliaJersiJamaikaJordániaJapãuKéniaKir" + + "gistãuKambodjaKiribatiKamorisSãu Kristovãu i NevisKoreia di NortiKor" + + "eia di SulKueitiIlhas KaimãuKazakistãuLausLíbanuSanta LúsiaLixenstai" + + "nSri LankaLibériaLezotuLituániaLuxemburguLetóniaLíbiaMarokusMónakuMo" + + "ldáviaMontenegruSãu Martinhu di FransaMadagaskarIlhas MarxalMasidóni" + + "aMaliMianmar (Birmánia)MongóliaRejiãu Administrativu Spesial di Maka" + + "uIlhas Marianas di NortiMartinikaMauritániaMonseratMaltaMaurísiaMald" + + "ivasMalauiMéxikuMaláziaMusambikiNamíbiaNova KalidóniaNijerIlhas Norf" + + "olkNijériaNikaráguaOlandaNoruegaNepalNauruNiueNova ZilándiaOmanPanam" + + "áPeruPolinézia FransezaPapua-Nova GineFilipinasPakistãuPulóniaSan P" + + "iere i MikelonPirkairnPortu RikuPalistinaPurtugalPalauParaguaiKatarI" + + "lhas di OseaniaRuniãuRuméniaSérviaRúsiaRuandaArábia SauditaIlhas Sal" + + "umãuSeixelisSudãuSuésiaSingapuraSanta IlenaSlovéniaSvalbard i Jan Ma" + + "ienSlovákiaSera LioaSan MarinuSenegalSumáliaSurinamiSudãu di SulSãu " + + "Tume i PrínsipiEl SalvadorSãu Martinhu di OlandaSíriaSuazilándiaTris" + + "tan da KunhaIlhas Turkas i KaikusTxadiTerras Franses di SulToguTailá" + + "ndiaTadjikistãuTokelauTimor LestiTurkumenistãuTuníziaTongaTurkiaTrin" + + "idad i TobaguTuvaluTaiuanTanzániaUkrániaUgandaIlhas Minoris Distanti" + + "s de Stadus UnidusStadus Unidos di MerkaUruguaiUzbekistãuVatikanuSãu" + + " Bisenti i GranadinasVinizuelaIlhas Virjens BritánikasIlhas Virjens " + + "MerkanasVietnamVanuatuUalis i FutunaSamoaKozovuIémenMaioteÁfrika di " + + "SulZámbiaZimbábuiRejiãu DiskonxeduMunduÁfrikaMerka di NortiMerka di " + + "SulOseaniaÁfrika OsidentalMerka SentralÁfrika OrientalNorti di Áfrik" + + "aÁfrika SentralSul di ÁfrikaMerkasNorti di MerkaKaraibasÁzia Orienta" + + "lSul di ÁziaSudesti AziátikuEuropa di SulAustraláziaMelanéziaRejiãu " + + "di MikronéziaPolinéziaÁziaÁzia SentralÁzia OsidentalEuropaEuropa Ori" + + "entalEuropa di NortiEuropa OsidentalMerka Latinu", + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0010, 0x0016, 0x002b, 0x0037, 0x0048, 0x004e, 0x0056, 0x005e, 0x0064, 0x006e, 0x0077, 0x0084, 0x008c, 0x0096, 0x009b, @@ -37291,40 +39353,40 @@ var regionHeaders = [252]header{ 0x0144, 0x014a, 0x0150, 0x0159, 0x0161, 0x0168, 0x016e, 0x0175, 0x018a, 0x0199, 0x01b2, 0x01c3, 0x01c8, 0x01d7, 0x01e0, 0x01e4, 0x01ed, 0x01f1, 0x01fa, 0x0208, 0x0212, 0x0216, 0x0220, 0x0227, - 0x0234, 0x0239, 0x0249, 0x0251, 0x025d, 0x0264, 0x026d, 0x0275, - // Entry 40 - 7F - 0x028a, 0x0292, 0x02a1, 0x02a8, 0x02af, 0x02b4, 0x02c2, 0x02ca, - 0x02d0, 0x02d8, 0x02e7, 0x02e7, 0x02f1, 0x02f6, 0x0304, 0x030f, - 0x031a, 0x0320, 0x0326, 0x0331, 0x0338, 0x0340, 0x034e, 0x0354, - 0x0358, 0x0361, 0x036d, 0x0374, 0x0378, 0x0381, 0x0390, 0x0397, - 0x03be, 0x03c7, 0x03cb, 0x03d5, 0x03da, 0x0405, 0x041b, 0x0422, - 0x042a, 0x042f, 0x0435, 0x043e, 0x0448, 0x044f, 0x0455, 0x0460, - 0x0466, 0x0482, 0x0487, 0x048c, 0x0495, 0x049c, 0x04a1, 0x04a8, - 0x04b1, 0x04b7, 0x04bd, 0x04c7, 0x04cf, 0x04d7, 0x04de, 0x04f5, - // Entry 80 - BF - 0x0504, 0x0511, 0x0517, 0x0524, 0x052f, 0x0533, 0x053a, 0x0546, - 0x0550, 0x0559, 0x0561, 0x0567, 0x0570, 0x057a, 0x0582, 0x0588, - 0x058f, 0x0596, 0x059f, 0x05a9, 0x05c0, 0x05ca, 0x05d6, 0x05e0, - 0x05e4, 0x05f7, 0x0600, 0x0627, 0x063e, 0x0647, 0x0652, 0x065a, - 0x065f, 0x0668, 0x0670, 0x0676, 0x067d, 0x0685, 0x068e, 0x0696, - 0x06a5, 0x06aa, 0x06b7, 0x06bf, 0x06c9, 0x06cf, 0x06d6, 0x06db, - 0x06e0, 0x06e4, 0x06f2, 0x06f6, 0x06fd, 0x0701, 0x0714, 0x0723, - 0x072c, 0x0735, 0x073d, 0x0750, 0x0758, 0x0762, 0x076b, 0x0773, - // Entry C0 - FF - 0x0778, 0x0780, 0x0785, 0x0795, 0x079c, 0x07a4, 0x07ab, 0x07b1, - 0x07b7, 0x07c6, 0x07d4, 0x07dc, 0x07e2, 0x07e9, 0x07f2, 0x07fd, - 0x0806, 0x081a, 0x0823, 0x082c, 0x0836, 0x083d, 0x0845, 0x084d, - 0x085a, 0x086f, 0x087a, 0x0891, 0x0897, 0x08a3, 0x08b3, 0x08c8, - 0x08cd, 0x08e2, 0x08e6, 0x08f0, 0x08fc, 0x0903, 0x090e, 0x091c, - 0x0924, 0x0929, 0x092f, 0x0940, 0x0946, 0x094c, 0x0955, 0x095d, - 0x0963, 0x098b, 0x098b, 0x09a1, 0x09a8, 0x09b3, 0x09bb, 0x09d4, - 0x09dd, 0x09f6, 0x0a0c, 0x0a13, 0x0a1a, 0x0a28, 0x0a2d, 0x0a33, - // Entry 100 - 13F - 0x0a39, 0x0a3f, 0x0a4d, 0x0a54, 0x0a5d, 0x0a6f, 0x0a74, 0x0a7b, - 0x0a89, 0x0a95, 0x0a9c, 0x0aad, 0x0aba, 0x0aca, 0x0ada, 0x0ae9, - 0x0af7, 0x0afd, 0x0b0b, 0x0b13, 0x0b21, 0x0b2d, 0x0b3e, 0x0b4b, - 0x0b57, 0x0b61, 0x0b77, 0x0b81, 0x0b86, 0x0b93, 0x0ba2, 0x0ba8, - 0x0bb7, 0x0bc6, 0x0bd6, 0x0be2, + 0x0234, 0x0239, 0x0240, 0x0248, 0x0254, 0x025b, 0x0264, 0x026c, + // Entry 40 - 7F + 0x0281, 0x0289, 0x0298, 0x029f, 0x02a6, 0x02ab, 0x02b9, 0x02c1, + 0x02c7, 0x02cf, 0x02de, 0x02de, 0x02e8, 0x02ed, 0x02fb, 0x0306, + 0x0311, 0x0317, 0x031d, 0x0328, 0x032f, 0x0337, 0x0345, 0x034b, + 0x034f, 0x0358, 0x0364, 0x036b, 0x036f, 0x0378, 0x0387, 0x038e, + 0x03b5, 0x03be, 0x03c2, 0x03cc, 0x03d1, 0x03fc, 0x0412, 0x0419, + 0x0421, 0x0426, 0x042c, 0x0435, 0x043f, 0x0446, 0x044c, 0x0457, + 0x045d, 0x0479, 0x047e, 0x0483, 0x048c, 0x0493, 0x0498, 0x049f, + 0x04a8, 0x04ae, 0x04b4, 0x04be, 0x04c6, 0x04ce, 0x04d5, 0x04ec, + // Entry 80 - BF + 0x04fb, 0x0508, 0x050e, 0x051b, 0x0526, 0x052a, 0x0531, 0x053d, + 0x0547, 0x0550, 0x0558, 0x055e, 0x0567, 0x0571, 0x0579, 0x057f, + 0x0586, 0x058d, 0x0596, 0x05a0, 0x05b7, 0x05c1, 0x05cd, 0x05d7, + 0x05db, 0x05ee, 0x05f7, 0x061e, 0x0635, 0x063e, 0x0649, 0x0651, + 0x0656, 0x065f, 0x0667, 0x066d, 0x0674, 0x067c, 0x0685, 0x068d, + 0x069c, 0x06a1, 0x06ae, 0x06b6, 0x06c0, 0x06c6, 0x06cd, 0x06d2, + 0x06d7, 0x06db, 0x06e9, 0x06ed, 0x06f4, 0x06f8, 0x070b, 0x071a, + 0x0723, 0x072c, 0x0734, 0x0747, 0x074f, 0x0759, 0x0762, 0x076a, + // Entry C0 - FF + 0x076f, 0x0777, 0x077c, 0x078c, 0x0793, 0x079b, 0x07a2, 0x07a8, + 0x07ae, 0x07bd, 0x07cb, 0x07d3, 0x07d9, 0x07e0, 0x07e9, 0x07f4, + 0x07fd, 0x0811, 0x081a, 0x0823, 0x082d, 0x0834, 0x083c, 0x0844, + 0x0851, 0x0866, 0x0871, 0x0888, 0x088e, 0x089a, 0x08aa, 0x08bf, + 0x08c4, 0x08d9, 0x08dd, 0x08e7, 0x08f3, 0x08fa, 0x0905, 0x0913, + 0x091b, 0x0920, 0x0926, 0x0937, 0x093d, 0x0943, 0x094c, 0x0954, + 0x095a, 0x0982, 0x0982, 0x0998, 0x099f, 0x09aa, 0x09b2, 0x09cb, + 0x09d4, 0x09ed, 0x0a03, 0x0a0a, 0x0a11, 0x0a1f, 0x0a24, 0x0a2a, + // Entry 100 - 13F + 0x0a30, 0x0a36, 0x0a44, 0x0a4b, 0x0a54, 0x0a66, 0x0a6b, 0x0a72, + 0x0a80, 0x0a8c, 0x0a93, 0x0aa4, 0x0ab1, 0x0ac1, 0x0ad1, 0x0ae0, + 0x0aee, 0x0af4, 0x0b02, 0x0b0a, 0x0b18, 0x0b24, 0x0b35, 0x0b42, + 0x0b4e, 0x0b58, 0x0b6e, 0x0b78, 0x0b7d, 0x0b8a, 0x0b99, 0x0b9f, + 0x0bae, 0x0bbd, 0x0bcd, 0x0bcd, 0x0bd9, }, }, { // khq @@ -37642,25 +39704,94 @@ var regionHeaders = [252]header{ }, }, { // kok - "भारत", - []uint16{ // 113 elements - // Entry 0 - 3F - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - // Entry 40 - 7F - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x000c, + "असेशन आयलँडअंडोरायुनाइटेड अरब इमीरॅट्सअफगानिस्तानएँटिगुआ आनी बारबुडाअंगु" + + "लाअल्बानीयाआर्मीनीयाअंगोलाअंटार्क्टिकाअर्जेंटिनाअमेरिकी सामोआऑस्ट्" + + "रियाऑस्ट्रेलीयाअरुबाअलांड जुवेअजरबैजानबोस्निया आनी हेर्जेगोविनाबार" + + "बाडोसबांगलादेशबेल्जियमबुर्किना फॅसोबल्गेरीयाबेहरेनबुरुंडीबेनीनसॅंट" + + " बार्थेल्मीबर्मुडाब्रूनेईबोलिव्हियाकॅरिबियन निदरलँडब्राझीलबहामासभूता" + + "नबोवट आयलँडबोत्सवानाबेलारूसबेलिझकॅनडाकोकोस (कीलिंग) आयलँडकोंगो - क" + + "िंशासामध्य अफ्रीकी लोकसत्तकराज्यकोंगो - ब्राझाविलास्विट्ज़रलैंडकोत" + + " द’ईवोआरकुक आयलँड्सचिलीकॅमेरूनचीनकोलंबियाक्लिपरटॉन आयलँडकोस्ता रिकाक" + + "्युबाकेप वर्दीकुरसावोक्रिसमस आयलँडसायप्रसचेकियाजर्मनीदिगो गार्सिया" + + "जिबूतीडेनमार्कडोमिनीकाडोमिनिकन प्रजासत्ताकअल्जेरियासिटा आनी मेलिल्" + + "लाइक्वाडोरएस्टोनियाईजिप्तअस्तंत सहाराइरिट्रियास्पेनइथियोपियायुरोपि" + + "यन युनियनयुरोझोनफिनलँडफिजीफ़ॉकलैंड आइलैंड्समायक्रोनेशियाफैरो आयलँड" + + "्सफ्रान्सगॅबोनयुनायटेड किंगडमग्रेनॅडाजॉर्जियाफ्रेन्च गयानागर्नसीघा" + + "नाजिब्राल्टरग्रीनलँडगॅम्बियागुएनियाग्वाडेलोपइक्वेटोरियल गुएनियाग्र" + + "ीसदक्षिण जोर्जिया आनी दक्षिण सॅण्डविच आयलँड्सग्वाटेमालागुआमगुअनिया" + + "-बिसाउगयानाहाँग काँग SAR चीनहर्ड आयलँड्स ऍंड मॅक्डोनाल्ड आयलँड्सहॉनड" + + "ुरसक्रोयेशीयाहैतीहंगेरीकॅनरी आयलैंड्सइंडोनेशीयाआयरलँडइज़राइलइसले ऑ" + + "फ मॅनभारतब्रिटिश हिंद महासागरीय क्षेत्रइराकइरानआइसलैंडइटलीजर्सीजमै" + + "काजॉर्डनजपानकेनयाकिर्गिज़स्तानकंबोडियाकिरिबातीकोमोरोससेंट किट्स आन" + + "ी नेविसउत्तर कोरियादक्षिण कोरियाकुवेतकैमेन आइलैंड्सकझाकस्तानलाओसले" + + "बनानसँट लुसियालिचेंस्टीनश्री लंकालायबेरीयालिसोथोलिथुआनियालक्सेमबर्" + + "गलॅटवियालीबियामोरोक्कोमोनॅकोमाल्डोवामॉन्टॅनग्रोसॅंट मार्टिनमाडागास" + + "्करमार्शल आयलँड्समॅसिडोनियामालीम्यानमार (बर्मा)मंगोलियामकाव SAR ची" + + "नउत्तरी मरिना आयसलैण्डमार्टीनिकमॉरिटानियामॉन्टसेराटमाल्टामॉरिशसमाल" + + "दीवमलावीमेक्सिकोमलेशियामॉझांबीकनामीबियान्यू कॅलिडोनियानायजरनॉरफॉक " + + "आयलँडनायजेरियानिकारगुवानॅदरलँडनॉर्वेनेपाळनावरूनीयून्युझीलॅन्डओमानप" + + "नामापेरूफ्रेन्च पोलिनेसियापापुआ न्यु गिनीफिलीपिन्झपाकिस्तानपोलंडसँ" + + ". पायरे आनी मिकेलनपिटकॅरन आयलँड्सपिर्टो रिकोपेलेस्टीनियन प्रांतपुर्त" + + "गालपलाऊपैराग्वेकतारआवटलायींग ओशेनियारीयूनियनरोमानीयासर्बियारूसरवां" + + "डासऊदी अरेबियासोलोमन आइलँड्ससेशेल्ससूडानस्वीडनसिंगापूरसेंट हेलिनास" + + "्लोवेनियास्वालबार्ड आनी जान मेयनस्लोवाकियासिएरा लियॉनसॅन मारीनोसिन" + + "िगलसोमालियासुरीनामदक्षिण सुडानसावो टोमे आनी प्रिंसिपलएल साल्वाडोरस" + + "िंट मार्टेनसिरियास्वाजीलँडत्रिस्तान दा कुन्हातुर्क्स आनी कॅकोज आयल" + + "ँड्सचाडफ्रेंच दक्षिणी प्रांतटोगोथायलँडतजीकिस्तानटोकलाऊतिमोर-लेस्ते" + + "तुर्कमेनिस्तानट्यूनीशियाटोंगातुर्कीट्रिनीडाड आनी टोबॅगोटुवालूतायवा" + + "नतांझानियायुक्रेनयुगांडायु. एस. मायनर आवटलायींग आयलँड्\u200dसयुनाय" + + "टेड नेशन्सयुनायटेड स्टेट्सउरूग्वेउज़्बेकिस्तानवॅटिकन सिटीसेंट विंस" + + "ेंट ऐंड द ग्रेनेडाइंसविनेझुएलाब्रिटिश वर्जिन आयलँड्सयु. एस. वर्जिन" + + " आयलँड्\u200dसव्हिएतनामवनातूवालिस आनी फ्यूचूनासामोआकोसोवोयेमेनमेयोटद" + + "क्षिण आफ्रीकाझांबियाजिम्बाब्वेअज्ञात प्रांतजगआफ्रिकाउत्तर अमेरिकाद" + + "क्षिण अमेरिकाओसेनियाअस्तंत आफ्रिकामध्य अमेरिकाउदेंत आफ्रिकाउत्तरीय" + + " आफ्रिकामध्य आफ्रिकादक्षिण आफ्रिकाअमेरिकासउत्तरीय अमेरिकाकॅरिबियनउदे" + + "ंत आशियादक्षिण आशियाआग्नेय आशियादक्षिण येवरोपऑस्ट्रेलेसियामेलानेसि" + + "यामायक्रोनेशियन प्रांतपोलिनेशियाआशियामध्य आशियाअस्तंत आशियायेवरोपउ" + + "देंत येवरोपउत्तर येवरोपअस्तंत येवरोपलॅटीन अमेरिका", + []uint16{ // 293 elements + // Entry 0 - 3F + 0x0000, 0x001f, 0x0031, 0x006c, 0x008d, 0x00c2, 0x00d4, 0x00ef, + 0x010a, 0x011c, 0x0140, 0x015e, 0x0183, 0x019e, 0x01bf, 0x01ce, + 0x01ea, 0x0202, 0x0249, 0x0261, 0x027c, 0x0294, 0x02b9, 0x02d4, + 0x02e6, 0x02fb, 0x030a, 0x0335, 0x034a, 0x035f, 0x037d, 0x03ab, + 0x03c0, 0x03d2, 0x03e1, 0x03fd, 0x0418, 0x042d, 0x043c, 0x044b, + 0x047f, 0x04a6, 0x04f0, 0x0520, 0x0547, 0x0566, 0x0585, 0x0591, + 0x05a6, 0x05af, 0x05c7, 0x05f2, 0x0611, 0x0623, 0x063c, 0x0651, + 0x0676, 0x068b, 0x069d, 0x06af, 0x06d4, 0x06e6, 0x06fe, 0x0716, + // Entry 40 - 7F + 0x0750, 0x076b, 0x079a, 0x07b2, 0x07cd, 0x07df, 0x0801, 0x081c, + 0x082b, 0x0846, 0x0871, 0x0886, 0x0898, 0x08a4, 0x08d5, 0x08fc, + 0x091e, 0x0933, 0x0942, 0x096d, 0x0985, 0x099d, 0x09c2, 0x09d4, + 0x09e0, 0x09fe, 0x0a16, 0x0a2e, 0x0a43, 0x0a5e, 0x0a95, 0x0aa4, + 0x0b1b, 0x0b39, 0x0b45, 0x0b6a, 0x0b79, 0x0ba0, 0x0c04, 0x0c19, + 0x0c37, 0x0c43, 0x0c55, 0x0c7d, 0x0c9b, 0x0cad, 0x0cc2, 0x0cdf, + 0x0ceb, 0x0d3f, 0x0d4b, 0x0d57, 0x0d6c, 0x0d78, 0x0d87, 0x0d96, + 0x0da8, 0x0db4, 0x0dc3, 0x0dea, 0x0e02, 0x0e1a, 0x0e2f, 0x0e65, + // Entry 80 - BF + 0x0e87, 0x0eac, 0x0ebb, 0x0ee3, 0x0efe, 0x0f0a, 0x0f1c, 0x0f38, + 0x0f56, 0x0f6f, 0x0f8a, 0x0f9c, 0x0fb7, 0x0fd5, 0x0fea, 0x0ffc, + 0x1014, 0x1026, 0x103e, 0x105f, 0x1081, 0x109f, 0x10c7, 0x10e5, + 0x10f1, 0x111b, 0x1133, 0x114d, 0x1188, 0x11a3, 0x11c1, 0x11df, + 0x11f1, 0x1203, 0x1215, 0x1224, 0x123c, 0x1251, 0x1269, 0x1281, + 0x12ac, 0x12bb, 0x12dd, 0x12f8, 0x1313, 0x1328, 0x133a, 0x1349, + 0x1358, 0x1364, 0x1385, 0x1391, 0x13a0, 0x13ac, 0x13e0, 0x1409, + 0x1424, 0x143f, 0x144e, 0x1482, 0x14ad, 0x14cc, 0x1503, 0x151b, + // Entry C0 - FF + 0x1527, 0x153f, 0x154b, 0x157c, 0x1594, 0x15ac, 0x15c1, 0x15ca, + 0x15dc, 0x15fe, 0x1626, 0x163b, 0x164a, 0x165c, 0x1674, 0x1693, + 0x16b1, 0x16f0, 0x170e, 0x172d, 0x1749, 0x175b, 0x1773, 0x1788, + 0x17aa, 0x17e9, 0x180b, 0x182d, 0x183f, 0x185a, 0x188f, 0x18d4, + 0x18dd, 0x1918, 0x1924, 0x1936, 0x1954, 0x1966, 0x1988, 0x19b2, + 0x19d0, 0x19df, 0x19f1, 0x1a29, 0x1a3b, 0x1a4d, 0x1a68, 0x1a7d, + 0x1a92, 0x1ae6, 0x1b11, 0x1b3f, 0x1b54, 0x1b7b, 0x1b9a, 0x1bec, + 0x1c07, 0x1c45, 0x1c80, 0x1c9b, 0x1caa, 0x1cdc, 0x1ceb, 0x1cfd, + // Entry 100 - 13F + 0x1d0c, 0x1d1b, 0x1d43, 0x1d58, 0x1d76, 0x1d9b, 0x1da1, 0x1db6, + 0x1ddb, 0x1e03, 0x1e18, 0x1e40, 0x1e62, 0x1e87, 0x1eb2, 0x1ed4, + 0x1efc, 0x1f14, 0x1f3f, 0x1f57, 0x1f76, 0x1f98, 0x1fba, 0x1fdf, + 0x2006, 0x2024, 0x205e, 0x207c, 0x208b, 0x20a7, 0x20c9, 0x20db, + 0x20fd, 0x211f, 0x2144, 0x2144, 0x2169, }, }, { // ks @@ -37709,7 +39840,7 @@ var regionHeaders = [252]header{ "سٹریلیا تہٕ نِوزِلینٛڑمٮ۪لَنیٖشِیامَیکرونَیشِیَن خٕطہٕپالنیشِیاایشی" + "امرکٔزی ایشیامَغرِبی ایشیایوٗرَپمشرِقی یوٗرَپشُمٲلی یوٗرَپمغرِبی یو" + "ٗرَپلاطیٖنی اَمریٖکا تہٕ کیرَبیٖن", - []uint16{ // 292 elements + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0010, 0x0032, 0x0048, 0x0072, 0x0082, 0x0096, 0x00a8, 0x00b4, 0x00c8, 0x00da, 0x00f7, 0x0103, 0x0115, 0x0123, @@ -37751,7 +39882,7 @@ var regionHeaders = [252]header{ 0x13e5, 0x1406, 0x1414, 0x1435, 0x1452, 0x1471, 0x148e, 0x14a7, 0x14c4, 0x14d6, 0x14fe, 0x1510, 0x1529, 0x1540, 0x1568, 0x1581, 0x15ad, 0x15c5, 0x15ec, 0x15fe, 0x1608, 0x161f, 0x1638, 0x1644, - 0x165d, 0x1676, 0x168f, 0x16c6, + 0x165d, 0x1676, 0x168f, 0x168f, 0x16c6, }, }, { // ksb @@ -37949,7 +40080,7 @@ var regionHeaders = [252]header{ "oppade Rejjohn öm AustrahlijeMellanehsijede Rejohn vun MikronehsejeP" + "olinehsijeAasijeMeddelaasijeWäß-AasijeEuroppaOß-EuroppaNood-EuroppaW" + "äß-EuroppaLateinamärrika", - []uint16{ // 292 elements + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0009, 0x0010, 0x002f, 0x003b, 0x004d, 0x0056, 0x005f, 0x0069, 0x0071, 0x007c, 0x0088, 0x009e, 0x00aa, 0x00b5, 0x00ba, @@ -37991,7 +40122,7 @@ var regionHeaders = [252]header{ 0x0cc0, 0x0ccf, 0x0cd9, 0x0ce6, 0x0cf6, 0x0d01, 0x0d0d, 0x0d1b, 0x0d28, 0x0d32, 0x0d49, 0x0d54, 0x0d5e, 0x0d6a, 0x0d7a, 0x0d87, 0x0da1, 0x0dad, 0x0dc7, 0x0dd2, 0x0dd8, 0x0de4, 0x0df0, 0x0df7, - 0x0e02, 0x0e0e, 0x0e1b, 0x0e2a, + 0x0e02, 0x0e0e, 0x0e1b, 0x0e1b, 0x0e2a, }, }, { // kw @@ -38129,16 +40260,16 @@ var regionHeaders = [252]header{ "SyrienSwasilandTristan da CunhaTurks- a CaicosinselenTschadFranséisc" + "h Süd- an AntarktisgebidderTogoThailandTadschikistanTokelauOsttimorT" + "urkmenistanTunesienTongaTierkeiTrinidad an TobagoTuvaluTaiwanTansani" + - "aUkrainUgandaAmerikanesch-OzeanienVereenegt Staate vun AmerikaUrugua" + - "yUsbekistanVatikanstadSt. Vincent an d’GrenadinnenVenezuelaBritesch " + - "JoffereninselenAmerikanesch JoffereninselenVietnamVanuatuWallis a Fu" + - "tunaSamoaKosovoJemenMayotteSüdafrikaSambiaSimbabweOnbekannt RegiounW" + - "eltAfrikaNordamerikaSüdamerikaOzeanienWestafrikaMëttelamerikaOstafri" + - "kaNordafrikaZentralafrikaSüdlecht AfrikaAmerikaNërdlecht AmerikaKari" + - "bikOstasienSüdasienSüdostasienSüdeuropaAustralien an NeiséilandMelan" + - "esienMikronesescht InselgebittPolynesienAsienZentralasienWestasienEu" + - "ropaOsteuropaNordeuropaWesteuropaLatäinamerika", - []uint16{ // 292 elements + "aUkrainUgandaAmerikanesch-OzeanienVereenegt StaatenUruguayUsbekistan" + + "VatikanstadSt. Vincent an d’GrenadinnenVenezuelaBritesch Jofferenins" + + "elenAmerikanesch JoffereninselenVietnamVanuatuWallis a FutunaSamoaKo" + + "sovoJemenMayotteSüdafrikaSambiaSimbabweOnbekannt RegiounWeltAfrikaNo" + + "rdamerikaSüdamerikaOzeanienWestafrikaMëttelamerikaOstafrikaNordafrik" + + "aZentralafrikaSüdlecht AfrikaAmerikaNërdlecht AmerikaKaribikOstasien" + + "SüdasienSüdostasienSüdeuropaAustralien an NeiséilandMelanesienMikron" + + "esescht InselgebittPolynesienAsienZentralasienWestasienEuropaOsteuro" + + "paNordeuropaWesteuropaLatäinamerika", + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0009, 0x0010, 0x002b, 0x0036, 0x0047, 0x004f, 0x0057, 0x005f, 0x0065, 0x006e, 0x0079, 0x008b, 0x0096, 0x00a0, 0x00a5, @@ -38173,14 +40304,14 @@ var regionHeaders = [252]header{ 0x0877, 0x088d, 0x0898, 0x08a4, 0x08aa, 0x08b3, 0x08c3, 0x08d9, 0x08df, 0x0905, 0x0909, 0x0911, 0x091e, 0x0925, 0x092d, 0x0939, 0x0941, 0x0946, 0x094d, 0x095f, 0x0965, 0x096b, 0x0973, 0x0979, - 0x097f, 0x0994, 0x0994, 0x09b0, 0x09b7, 0x09c1, 0x09cc, 0x09ea, - 0x09f3, 0x0a0b, 0x0a27, 0x0a2e, 0x0a35, 0x0a44, 0x0a49, 0x0a4f, + 0x097f, 0x0994, 0x0994, 0x09a5, 0x09ac, 0x09b6, 0x09c1, 0x09df, + 0x09e8, 0x0a00, 0x0a1c, 0x0a23, 0x0a2a, 0x0a39, 0x0a3e, 0x0a44, // Entry 100 - 13F - 0x0a54, 0x0a5b, 0x0a65, 0x0a6b, 0x0a73, 0x0a84, 0x0a88, 0x0a8e, - 0x0a99, 0x0aa4, 0x0aac, 0x0ab6, 0x0ac4, 0x0acd, 0x0ad7, 0x0ae4, - 0x0af4, 0x0afb, 0x0b0d, 0x0b14, 0x0b1c, 0x0b25, 0x0b31, 0x0b3b, - 0x0b54, 0x0b5e, 0x0b77, 0x0b81, 0x0b86, 0x0b92, 0x0b9b, 0x0ba1, - 0x0baa, 0x0bb4, 0x0bbe, 0x0bcc, + 0x0a49, 0x0a50, 0x0a5a, 0x0a60, 0x0a68, 0x0a79, 0x0a7d, 0x0a83, + 0x0a8e, 0x0a99, 0x0aa1, 0x0aab, 0x0ab9, 0x0ac2, 0x0acc, 0x0ad9, + 0x0ae9, 0x0af0, 0x0b02, 0x0b09, 0x0b11, 0x0b1a, 0x0b26, 0x0b30, + 0x0b49, 0x0b53, 0x0b6c, 0x0b76, 0x0b7b, 0x0b87, 0x0b90, 0x0b96, + 0x0b9f, 0x0ba9, 0x0bb3, 0x0bb3, 0x0bc1, }, }, { // lg @@ -38315,33 +40446,33 @@ var regionHeaders = [252]header{ "ɛnɛBurundiBenɛBermudaBrineyiBoliviBrezílɛBahamasɛButániBotswanaByel" + "orisiBelizɛKanadaRepublíki ya Kongó DemokratíkiRepibiki ya Afríka ya" + " KátiKongoSwisɛKotídivualɛBisanga bya KookɛSíliKamɛruneSinɛKolombiKo" + - "sitarikaKibaBisanga bya KapevɛrɛSípɛlɛRepibiki TsekɛAlemaniDzibutiDa" + - "nɛmarikeDomínikeRepibiki ya DomínikɛAlizɛriEkwatɛ́lɛEsitoniEzípiteEl" + - "itelɛEsipanyeEtsíopiFilandɛFidziBisanga bya MaluniMikroneziFalánsɛGa" + - "bɔAngɛlɛtɛ́lɛGelenadɛZorziGiyanɛ ya FalánsɛGuerneseyGanaZibatalɛGowe" + - "landeGambiGinɛGwadɛlupɛGinɛ́kwatɛ́lɛGelekiÎles de Géorgie du Sud et " + - "Sandwich du SudGwatémalaGwamɛGinɛbisauGiyaneIle Heard et Iles McDona" + - "ldOndurasɛKrowasiAyitiOngiliIndoneziIrelandɛIsirayelɛÍndɛMabelé ya A" + - "ngɛlɛtɛ́lɛ na mbú ya IndiyaIrakiIrâIsilandɛItaliZamaikiZɔdaniZapɔKen" + - "yaKigizisitáKambodzaKiribatiKomorɛSántu krístofe mpé Nevɛ̀sKorɛ ya n" + - "ɔ́rdiKorɛ ya súdiKowetiBisanga bya KayímaKazakisitáLawosiLibáSántu " + - "lisiLishɛteniSirilankaLibériyaLesotoLitwaniLikisambuluLetoniLibíMaro" + - "kɛMonakoMolidaviMonténégroMadagasikariBisanga bya MarishalɛMasedwanɛ" + - "MalíBirmanieMongolíBisanga bya Marianɛ ya nɔ́rdiMartinikiMoritaniMɔs" + - "eraMalitɛMorisɛMadívɛMalawiMeksikeMaleziMozambíkiNamibiKaledoni ya s" + - "ikaNizɛrɛEsanga NorfokɛNizeryaNikaragwaOlandɛNorivezɛNepálɛNauruNyué" + - "Zelandɛ ya sikaOmánɛPanamaPéruPolinezi ya FalánsɛPapwazi Ginɛ ya sik" + - "aFilipinɛPakisitáPoloniSántu pététo mpé MikelɔPikairniPɔtorikoPalɛsi" + - "nePutúlugɛsiPalauPalagweiKatariLenyoRomaniSerbieRisíRwandaAlabi Sawu" + - "ditɛBisanga SolomɔSɛshɛlɛSudáSwédɛSingapurɛSántu eleniSiloveniSilova" + - "kiSiera LeonɛSántu MarinɛSenegalɛSomaliSurinamɛSao Tomé mpé PresipɛS" + - "avadɔrɛSiríSwazilandiBisanga bya Turki mpé KaikoTsádiTerres australe" + - "s et antarctiques françaisesTogoTailandɛTazikisitáTokelauTimorɛ ya M" + - "oniɛlɛTikɛménisitáTiniziTongaTilikiTinidadɛ mpé TobagoTuvaluTaiwanin" + - "TanzaniIkrɛniUgandaAmerikiIrigweiUzibɛkisitáVatikáSántu vesá mpé Gel" + - "enadinɛVenézuelaBisanga bya Vierzi ya Angɛlɛtɛ́lɛBisanga bya Vierzi " + - "ya AmerikiViyetinamɛVanuatuWalisɛ mpé FutunaSamoaYemɛnɛMayotɛAfríka " + - "ya SúdiZambiZimbabwe", + "sitarikaKibaBisanga bya KapevɛrɛSípɛlɛShekiaAlemaniDzibutiDanɛmarike" + + "DomínikeRepibiki ya DomínikɛAlizɛriEkwatɛ́lɛEsitoniEzípiteElitelɛEsi" + + "panyeEtsíopiFilandɛFidziBisanga bya MaluniMikroneziFalánsɛGabɔAngɛlɛ" + + "tɛ́lɛGelenadɛZorziGiyanɛ ya FalánsɛGuerneseyGanaZibatalɛGowelandeGam" + + "biGinɛGwadɛlupɛGinɛ́kwatɛ́lɛGelekiÎles de Géorgie du Sud et Sandwich" + + " du SudGwatémalaGwamɛGinɛbisauGiyaneIle Heard et Iles McDonaldOndura" + + "sɛKrowasiAyitiOngiliIndoneziIrelandɛIsirayelɛÍndɛMabelé ya Angɛlɛtɛ́" + + "lɛ na mbú ya IndiyaIrakiIrâIsilandɛItaliZamaikiZɔdaniZapɔKenyaKigizi" + + "sitáKambodzaKiribatiKomorɛSántu krístofe mpé Nevɛ̀sKorɛ ya nɔ́rdiKor" + + "ɛ ya súdiKowetiBisanga bya KayímaKazakisitáLawosiLibáSántu lisiLish" + + "ɛteniSirilankaLibériyaLesotoLitwaniLikisambuluLetoniLibíMarokɛMonak" + + "oMolidaviMonténégroMadagasikariBisanga bya MarishalɛMasedwanɛMalíBir" + + "manieMongolíBisanga bya Marianɛ ya nɔ́rdiMartinikiMoritaniMɔseraMali" + + "tɛMorisɛMadívɛMalawiMeksikeMaleziMozambíkiNamibiKaledoni ya sikaNizɛ" + + "rɛEsanga NorfokɛNizeryaNikaragwaOlandɛNorivezɛNepálɛNauruNyuéZelandɛ" + + " ya sikaOmánɛPanamaPéruPolinezi ya FalánsɛPapwazi Ginɛ ya sikaFilipi" + + "nɛPakisitáPoloniSántu pététo mpé MikelɔPikairniPɔtorikoPalɛsinePutúl" + + "ugɛsiPalauPalagweiKatariLenyoRomaniSerbieRisíRwandaAlabi SawuditɛBis" + + "anga SolomɔSɛshɛlɛSudáSwédɛSingapurɛSántu eleniSiloveniSilovakiSiera" + + " LeonɛSántu MarinɛSenegalɛSomaliSurinamɛSao Tomé mpé PresipɛSavadɔrɛ" + + "SiríSwazilandiBisanga bya Turki mpé KaikoTsádiTerres australes et an" + + "tarctiques françaisesTogoTailandɛTazikisitáTokelauTimorɛ ya MoniɛlɛT" + + "ikɛménisitáTiniziTongaTilikiTinidadɛ mpé TobagoTuvaluTaiwaninTanzani" + + "IkrɛniUgandaAmerikiIrigweiUzibɛkisitáVatikáSántu vesá mpé Gelenadinɛ" + + "VenézuelaBisanga bya Vierzi ya Angɛlɛtɛ́lɛBisanga bya Vierzi ya Amer" + + "ikiViyetinamɛVanuatuWalisɛ mpé FutunaSamoaYemɛnɛMayotɛAfríka ya Súdi" + + "ZambiZimbabwe", []uint16{ // 261 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0007, 0x0014, 0x0020, 0x0033, 0x003a, 0x0041, @@ -38351,36 +40482,36 @@ var regionHeaders = [252]header{ 0x010e, 0x0117, 0x011e, 0x011e, 0x0126, 0x012f, 0x0136, 0x013c, 0x013c, 0x015d, 0x0179, 0x017e, 0x0184, 0x0191, 0x01a3, 0x01a8, 0x01b1, 0x01b6, 0x01bd, 0x01bd, 0x01c7, 0x01cb, 0x01e1, 0x01e1, - 0x01e1, 0x01ea, 0x01f9, 0x0200, 0x0200, 0x0207, 0x0212, 0x021b, - // Entry 40 - 7F - 0x0231, 0x0239, 0x0239, 0x0245, 0x024c, 0x0254, 0x0254, 0x025c, - 0x0264, 0x026c, 0x026c, 0x026c, 0x0274, 0x0279, 0x028b, 0x0294, - 0x0294, 0x029d, 0x02a2, 0x02b2, 0x02bb, 0x02c0, 0x02d4, 0x02dd, - 0x02e1, 0x02ea, 0x02f3, 0x02f8, 0x02fd, 0x0308, 0x031a, 0x0320, - 0x034b, 0x0355, 0x035b, 0x0365, 0x036b, 0x036b, 0x0385, 0x038e, - 0x0395, 0x039a, 0x03a0, 0x03a0, 0x03a8, 0x03b1, 0x03bb, 0x03bb, - 0x03c1, 0x03ee, 0x03f3, 0x03f7, 0x0400, 0x0405, 0x0405, 0x040c, - 0x0413, 0x0418, 0x041d, 0x0428, 0x0430, 0x0438, 0x043f, 0x045d, - // Entry 80 - BF - 0x046e, 0x047c, 0x0482, 0x0495, 0x04a0, 0x04a6, 0x04ab, 0x04b6, - 0x04c0, 0x04c9, 0x04d2, 0x04d8, 0x04df, 0x04ea, 0x04f0, 0x04f5, - 0x04fc, 0x0502, 0x050a, 0x0516, 0x0516, 0x0522, 0x0538, 0x0542, - 0x0547, 0x054f, 0x0557, 0x0557, 0x0577, 0x0580, 0x0588, 0x058f, - 0x0596, 0x059d, 0x05a5, 0x05ab, 0x05b2, 0x05b8, 0x05c2, 0x05c8, - 0x05d8, 0x05e0, 0x05ef, 0x05f6, 0x05ff, 0x0606, 0x060f, 0x0617, - 0x061c, 0x0621, 0x0631, 0x0638, 0x063e, 0x0643, 0x0658, 0x066d, - 0x0676, 0x067f, 0x0685, 0x06a1, 0x06a9, 0x06b2, 0x06bb, 0x06c7, - // Entry C0 - FF - 0x06cc, 0x06d4, 0x06da, 0x06da, 0x06df, 0x06e5, 0x06eb, 0x06f0, - 0x06f6, 0x0705, 0x0714, 0x071e, 0x0723, 0x072a, 0x0734, 0x0740, - 0x0748, 0x0748, 0x0750, 0x075c, 0x076a, 0x0773, 0x0779, 0x0782, - 0x0782, 0x0799, 0x07a3, 0x07a3, 0x07a8, 0x07b2, 0x07b2, 0x07ce, - 0x07d4, 0x0800, 0x0804, 0x080d, 0x0818, 0x081f, 0x0833, 0x0842, - 0x0848, 0x084d, 0x0853, 0x0868, 0x086e, 0x0876, 0x087d, 0x0884, - 0x088a, 0x088a, 0x088a, 0x0891, 0x0898, 0x08a5, 0x08ac, 0x08c9, - 0x08d3, 0x08f9, 0x0916, 0x0921, 0x0928, 0x093b, 0x0940, 0x0940, - // Entry 100 - 13F - 0x0948, 0x094f, 0x095f, 0x0964, 0x096c, + 0x01e1, 0x01ea, 0x01f0, 0x01f7, 0x01f7, 0x01fe, 0x0209, 0x0212, + // Entry 40 - 7F + 0x0228, 0x0230, 0x0230, 0x023c, 0x0243, 0x024b, 0x024b, 0x0253, + 0x025b, 0x0263, 0x0263, 0x0263, 0x026b, 0x0270, 0x0282, 0x028b, + 0x028b, 0x0294, 0x0299, 0x02a9, 0x02b2, 0x02b7, 0x02cb, 0x02d4, + 0x02d8, 0x02e1, 0x02ea, 0x02ef, 0x02f4, 0x02ff, 0x0311, 0x0317, + 0x0342, 0x034c, 0x0352, 0x035c, 0x0362, 0x0362, 0x037c, 0x0385, + 0x038c, 0x0391, 0x0397, 0x0397, 0x039f, 0x03a8, 0x03b2, 0x03b2, + 0x03b8, 0x03e5, 0x03ea, 0x03ee, 0x03f7, 0x03fc, 0x03fc, 0x0403, + 0x040a, 0x040f, 0x0414, 0x041f, 0x0427, 0x042f, 0x0436, 0x0454, + // Entry 80 - BF + 0x0465, 0x0473, 0x0479, 0x048c, 0x0497, 0x049d, 0x04a2, 0x04ad, + 0x04b7, 0x04c0, 0x04c9, 0x04cf, 0x04d6, 0x04e1, 0x04e7, 0x04ec, + 0x04f3, 0x04f9, 0x0501, 0x050d, 0x050d, 0x0519, 0x052f, 0x0539, + 0x053e, 0x0546, 0x054e, 0x054e, 0x056e, 0x0577, 0x057f, 0x0586, + 0x058d, 0x0594, 0x059c, 0x05a2, 0x05a9, 0x05af, 0x05b9, 0x05bf, + 0x05cf, 0x05d7, 0x05e6, 0x05ed, 0x05f6, 0x05fd, 0x0606, 0x060e, + 0x0613, 0x0618, 0x0628, 0x062f, 0x0635, 0x063a, 0x064f, 0x0664, + 0x066d, 0x0676, 0x067c, 0x0698, 0x06a0, 0x06a9, 0x06b2, 0x06be, + // Entry C0 - FF + 0x06c3, 0x06cb, 0x06d1, 0x06d1, 0x06d6, 0x06dc, 0x06e2, 0x06e7, + 0x06ed, 0x06fc, 0x070b, 0x0715, 0x071a, 0x0721, 0x072b, 0x0737, + 0x073f, 0x073f, 0x0747, 0x0753, 0x0761, 0x076a, 0x0770, 0x0779, + 0x0779, 0x0790, 0x079a, 0x079a, 0x079f, 0x07a9, 0x07a9, 0x07c5, + 0x07cb, 0x07f7, 0x07fb, 0x0804, 0x080f, 0x0816, 0x082a, 0x0839, + 0x083f, 0x0844, 0x084a, 0x085f, 0x0865, 0x086d, 0x0874, 0x087b, + 0x0881, 0x0881, 0x0881, 0x0888, 0x088f, 0x089c, 0x08a3, 0x08c0, + 0x08ca, 0x08f0, 0x090d, 0x0918, 0x091f, 0x0932, 0x0937, 0x0937, + // Entry 100 - 13F + 0x093f, 0x0946, 0x0956, 0x095b, 0x0963, }, }, { // lo @@ -38391,7 +40522,7 @@ var regionHeaders = [252]header{ "بئرئزیلچینآلمانفأرانسەبیریتانیا گأپھئنئیتالیاجاپوٙنروٙسیەڤولاتیا یأکاگئر" + "تەراساگە نادیاردونیائفریقائمریکا شومالیئمریکا ھارگەھوم پئڤأند جأھوٙ" + "ن آڤمینجا ئمریکائمریکائمریکا ڤاروکارائیبآسیائوروٙپائمریکا لاتین", - []uint16{ // 292 elements + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -38433,7 +40564,7 @@ var regionHeaders = [252]header{ 0x00da, 0x00f1, 0x0116, 0x0116, 0x012d, 0x012d, 0x012d, 0x012d, 0x012d, 0x0139, 0x014e, 0x015c, 0x015c, 0x015c, 0x015c, 0x015c, 0x015c, 0x015c, 0x015c, 0x015c, 0x0164, 0x0164, 0x0164, 0x0172, - 0x0172, 0x0172, 0x0172, 0x0189, + 0x0172, 0x0172, 0x0172, 0x0172, 0x0189, }, }, { // lt @@ -39131,7 +41262,7 @@ var regionHeaders = [252]header{ "lokkEwropa t’IsfelAwstralja u New ZealandMelanesjaReġjun ta’ Mikrone" + "żjaPolinesjaAsjaAsja ĊentraliAsja tal-PunentEwropaEwropa tal-LvantE" + "wropa ta’ FuqEwropa tal-PunentAmerika Latina", - []uint16{ // 292 elements + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0010, 0x0017, 0x0032, 0x003e, 0x004f, 0x0057, 0x0061, 0x006a, 0x0072, 0x007d, 0x0089, 0x009b, 0x00a5, 0x00b0, 0x00b5, @@ -39173,7 +41304,7 @@ var regionHeaders = [252]header{ 0x0d8b, 0x0d9c, 0x0da5, 0x0db7, 0x0dc8, 0x0dd9, 0x0dea, 0x0df9, 0x0e0a, 0x0e11, 0x0e11, 0x0e18, 0x0e26, 0x0e3e, 0x0e4c, 0x0e5c, 0x0e73, 0x0e7c, 0x0e95, 0x0e9e, 0x0ea2, 0x0eb0, 0x0ebf, 0x0ec5, - 0x0ed5, 0x0ee5, 0x0ef6, 0x0f04, + 0x0ed5, 0x0ee5, 0x0ef6, 0x0ef6, 0x0f04, }, }, { // mua @@ -39295,7 +41426,7 @@ var regionHeaders = [252]header{ "ی آسیاجنوبی آسیاآسیای ِجنوب\u200cشرقی\u200cوَرجنوبی اروپااوسترالزیم" + "لانزیمیکرونزی منقطهپولی\u200cنزیآسیامیونی آسیاغربی آسیااروپاشرقی ار" + "وپاشمالی اروپاغربی اروپالاتین آمریکا", - []uint16{ // 292 elements + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0019, 0x0025, 0x0045, 0x0057, 0x0077, 0x0085, 0x0091, 0x00a1, 0x00ad, 0x00cc, 0x00dc, 0x00f7, 0x0101, 0x0111, 0x011b, @@ -39337,7 +41468,7 @@ var regionHeaders = [252]header{ 0x1106, 0x111d, 0x1131, 0x1146, 0x115d, 0x1172, 0x1189, 0x11a0, 0x11b7, 0x11c3, 0x11da, 0x11e8, 0x11f9, 0x120c, 0x1235, 0x124a, 0x125c, 0x1268, 0x1283, 0x1294, 0x129c, 0x12af, 0x12c0, 0x12ca, - 0x12dd, 0x12f2, 0x1305, 0x131c, + 0x12dd, 0x12f2, 0x1305, 0x1305, 0x131c, }, }, { // naq @@ -39571,89 +41702,89 @@ var regionHeaders = [252]header{ { // nn "AscensionAndorraDei sameinte arabiske emirataAfghanistanAntigua og Barbu" + "daAnguillaAlbaniaArmeniaAngolaAntarktisArgentinaAmerikansk SamoaAust" + - "errikeAustraliaArubaÅlandAserbajdsjanBosnia og HercegovinaBarbadosBa" + - "ngladeshBelgiaBurkina FasoBulgariaBahrainBurundiBeninSaint Barthélem" + - "yBermudaBruneiBoliviaBrasilBahamasBhutanBouvetøyaBotswanaKviterussla" + - "ndBelizeCanadaKokosøyaneKongo-KinshasaDen sentralafrikanske republik" + - "kenKongo-BrazzavilleSveitsElfenbeinskystenCookøyaneChileKamerunKinaC" + - "olombiaClippertonøyaCosta RicaCubaKapp VerdeCuraçaoChristmasøyaKypro" + - "sTsjekkiaTysklandDiego GarciaDjiboutiDanmarkDominicaDen dominikanske" + - " republikkenAlgerieCeuta og MelillaEcuadorEstlandEgyptVest-SaharaEri" + - "treaSpaniaEtiopiaDen europeiske unionenFinlandFijiFalklandsøyaneMikr" + - "onesiaføderasjonenFærøyaneFrankrikeGabonStorbritanniaGrenadaGeorgiaF" + - "ransk GuyanaGuernseyGhanaGibraltarGrønlandGambiaGuineaGuadeloupeEkva" + - "torial-GuineaHellasSør-Georgia og Sør-Sandwich-øyaneGuatemalaGuamGui" + - "nea-BissauGuyanaHongkong S.A.R. KinaHeard- og McDonaldsøyaneHonduras" + - "KroatiaHaitiUngarnKanariøyaneIndonesiaIrlandIsraelManIndiaBritiske o" + - "mråde i Det indiske havIrakIranIslandItaliaJerseyJamaicaJordanJapanK" + - "enyaKirgisistanKambodsjaKiribatiKomoraneSt. Christopher og NevisNord" + - "-KoreaSør-KoreaKuwaitCaymanøyaneKasakhstanLaosLibanonSt. LuciaLiecht" + - "ensteinSri LankaLiberiaLesothoLitauenLuxembourgLatviaLibyaMarokkoMon" + - "acoMoldovaMontenegroSaint MartinMadagaskarMarshalløyaneMakedoniaMali" + - "Myanmar (Burma)MongoliaMacao S.A.R. KinaNord-MariananeMartiniqueMaur" + - "itaniaMontserratMaltaMauritiusMaldivaneMalawiMexicoMalaysiaMosambikN" + - "amibiaNy-CaledoniaNigerNorfolkøyaneNigeriaNicaraguaNederlandNoregNep" + - "alNauruNiueNew ZealandOmanPanamaPeruFransk PolynesiaPapua Ny-GuineaF" + - "ilippinanePakistanPolenSt. Pierre og MiquelonPitcairnPuerto RicoPale" + - "stinsk territoriumPortugalPalauParaguayQatarYtre OseaniaRéunionRoman" + - "iaSerbiaRusslandRwandaSaudi-ArabiaSalomonøyaneSeychellaneSudanSverig" + - "eSingaporeSaint HelenaSloveniaSvalbard og Jan MayenSlovakiaSierra Le" + - "oneSan MarinoSenegalSomaliaSurinamSør-SudanSão Tomé og PríncipeEl Sa" + - "lvadorSint MaartenSyriaSwazilandTristan da CunhaTurks- og Caicosøyan" + - "eTsjadFranske sørområdeTogoThailandTadsjikistanTokelauTimor-Leste (A" + - "ust-Timor)TurkmenistanTunisiaTongaTyrkiaTrinidad og TobagoTuvaluTaiw" + - "anTanzaniaUkrainaUgandaUSAs ytre småøyarUSAUruguayUsbekistanVatikans" + - "tatenSt. Vincent og GrenadinaneVenezuelaDei britiske jomfruøyaneDei " + - "amerikanske jomfruøyaneVietnamVanuatuWallis og FutunaSamoaKosovoJeme" + - "nMayotteSør-AfrikaZambiaZimbabweukjent områdeverdaAfrikaNord-Amerika" + - "Sør-AmerikaOseaniaVest-AfrikaSentral-AmerikaAust-AfrikaNord-AfrikaSe" + - "ntral-AfrikaSørlege AfrikaAmerikanordlege AmerikaKaribiaAust-AsiaSør" + - "-AsiaSøraust-AsiaSør-EuropaAustralia og New ZealandMelanesiaMikrones" + + "errikeAustraliaArubaÅlandAserbajdsjanBosnia-HercegovinaBarbadosBangl" + + "adeshBelgiaBurkina FasoBulgariaBahrainBurundiBeninSaint BarthélemyBe" + + "rmudaBruneiBoliviaKaribisk NederlandBrasilBahamasBhutanBouvetøyaBots" + + "wanaKviterusslandBelizeCanadaKokosøyaneKongo-KinshasaDen sentralafri" + + "kanske republikkenKongo-BrazzavilleSveitsElfenbeinskystenCookøyaneCh" + + "ileKamerunKinaColombiaClippertonøyaCosta RicaCubaKapp VerdeCuraçaoCh" + + "ristmasøyaKyprosTsjekkiaTysklandDiego GarciaDjiboutiDanmarkDominicaD" + + "en dominikanske republikkenAlgerieCeuta og MelillaEcuadorEstlandEgyp" + + "tVest-SaharaEritreaSpaniaEtiopiaEUeurosonaFinlandFijiFalklandsøyaneM" + + "ikronesiaføderasjonenFærøyaneFrankrikeGabonStorbritanniaGrenadaGeorg" + + "iaFransk GuyanaGuernseyGhanaGibraltarGrønlandGambiaGuineaGuadeloupeE" + + "kvatorial-GuineaHellasSør-Georgia og Sør-SandwichøyeneGuatemalaGuamG" + + "uinea-BissauGuyanaHongkong S.A.R. KinaHeardøya og McDonaldøyaneHondu" + + "rasKroatiaHaitiUngarnKanariøyaneIndonesiaIrlandIsraelManIndiaDet bri" + + "tiske territoriet I IndiahavetIrakIranIslandItaliaJerseyJamaicaJorda" + + "nJapanKenyaKirgisistanKambodsjaKiribatiKomoraneSaint Kitts og NevisN" + + "ord-KoreaSør-KoreaKuwaitCaymanøyaneKasakhstanLaosLibanonSt. LuciaLie" + + "chtensteinSri LankaLiberiaLesothoLitauenLuxembourgLatviaLibyaMarokko" + + "MonacoMoldovaMontenegroSaint MartinMadagaskarMarshalløyaneMakedoniaM" + + "aliMyanmar (Burma)MongoliaMacao S.A.R. KinaNord-MariananeMartiniqueM" + + "auritaniaMontserratMaltaMauritiusMaldivaneMalawiMexicoMalaysiaMosamb" + + "ikNamibiaNy-CaledoniaNigerNorfolkøyaNigeriaNicaraguaNederlandNoregNe" + + "palNauruNiueNew ZealandOmanPanamaPeruFransk PolynesiaPapua Ny-Guinea" + + "FilippinanePakistanPolenSaint-Pierre-et-MiquelonPitcairnPuerto RicoP" + + "alestinsk territoriumPortugalPalauParaguayQatarYtre OseaniaRéunionRo" + + "maniaSerbiaRusslandRwandaSaudi-ArabiaSalomonøyaneSeychellaneSudanSve" + + "rigeSingaporeSaint HelenaSloveniaSvalbard og Jan MayenSlovakiaSierra" + + " LeoneSan MarinoSenegalSomaliaSurinamSør-SudanSão Tomé og PríncipeEl" + + " SalvadorSint MaartenSyriaSwazilandTristan da CunhaTurks- og Caicosø" + + "yaneTsjadDei franske sørterritoriaTogoThailandTadsjikistanTokelauTim" + + "or-Leste (Aust-Timor)TurkmenistanTunisiaTongaTyrkiaTrinidad og Tobag" + + "oTuvaluTaiwanTanzaniaUkrainaUgandaUSAs ytre småøyarSNUSAUruguayUsbek" + + "istanVatikanstatenSt. Vincent og GrenadinaneVenezuelaDei britiske Jo" + + "mfruøyaneDei amerikanske JomfruøyaneVietnamVanuatuWallis og FutunaSa" + + "moaKosovoJemenMayotteSør-AfrikaZambiaZimbabweukjent områdeverdaAfrik" + + "aNord-AmerikaSør-AmerikaOseaniaVest-AfrikaSentral-AmerikaAust-Afrika" + + "Nord-AfrikaSentral-AfrikaSørlege AfrikaAmerikanordlege AmerikaKaribi" + + "aAust-AsiaSør-AsiaSøraust-AsiaSør-EuropaAustralasiaMelanesiaMikrones" + "iaPolynesiaAsiaSentral-AsiaVest-AsiaEuropaAust-EuropaNord-EuropaVest" + "-EuropaLatin-Amerika", - []uint16{ // 292 elements + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0009, 0x0010, 0x002d, 0x0038, 0x004a, 0x0052, 0x0059, 0x0060, 0x0066, 0x006f, 0x0078, 0x0088, 0x0092, 0x009b, 0x00a0, - 0x00a6, 0x00b2, 0x00c7, 0x00cf, 0x00d9, 0x00df, 0x00eb, 0x00f3, - 0x00fa, 0x0101, 0x0106, 0x0117, 0x011e, 0x0124, 0x012b, 0x012b, - 0x0131, 0x0138, 0x013e, 0x0148, 0x0150, 0x015d, 0x0163, 0x0169, - 0x0174, 0x0182, 0x01a3, 0x01b4, 0x01ba, 0x01ca, 0x01d4, 0x01d9, - 0x01e0, 0x01e4, 0x01ec, 0x01fa, 0x0204, 0x0208, 0x0212, 0x021a, - 0x0227, 0x022d, 0x0235, 0x023d, 0x0249, 0x0251, 0x0258, 0x0260, - // Entry 40 - 7F - 0x027c, 0x0283, 0x0293, 0x029a, 0x02a1, 0x02a6, 0x02b1, 0x02b8, - 0x02be, 0x02c5, 0x02db, 0x02db, 0x02e2, 0x02e6, 0x02f5, 0x030c, - 0x0316, 0x031f, 0x0324, 0x0331, 0x0338, 0x033f, 0x034c, 0x0354, - 0x0359, 0x0362, 0x036b, 0x0371, 0x0377, 0x0381, 0x0392, 0x0398, - 0x03bc, 0x03c5, 0x03c9, 0x03d6, 0x03dc, 0x03f0, 0x0409, 0x0411, - 0x0418, 0x041d, 0x0423, 0x042f, 0x0438, 0x043e, 0x0444, 0x0447, - 0x044c, 0x046e, 0x0472, 0x0476, 0x047c, 0x0482, 0x0488, 0x048f, - 0x0495, 0x049a, 0x049f, 0x04aa, 0x04b3, 0x04bb, 0x04c3, 0x04db, - // Entry 80 - BF - 0x04e5, 0x04ef, 0x04f5, 0x0501, 0x050b, 0x050f, 0x0516, 0x051f, - 0x052c, 0x0535, 0x053c, 0x0543, 0x054a, 0x0554, 0x055a, 0x055f, - 0x0566, 0x056c, 0x0573, 0x057d, 0x0589, 0x0593, 0x05a1, 0x05aa, - 0x05ae, 0x05bd, 0x05c5, 0x05d6, 0x05e4, 0x05ee, 0x05f8, 0x0602, - 0x0607, 0x0610, 0x0619, 0x061f, 0x0625, 0x062d, 0x0635, 0x063c, - 0x0648, 0x064d, 0x065a, 0x0661, 0x066a, 0x0673, 0x0678, 0x067d, - 0x0682, 0x0686, 0x0691, 0x0695, 0x069b, 0x069f, 0x06af, 0x06be, - 0x06c9, 0x06d1, 0x06d6, 0x06ec, 0x06f4, 0x06ff, 0x0715, 0x071d, - // Entry C0 - FF - 0x0722, 0x072a, 0x072f, 0x073b, 0x0743, 0x074a, 0x0750, 0x0758, - 0x075e, 0x076a, 0x0777, 0x0782, 0x0787, 0x078e, 0x0797, 0x07a3, - 0x07ab, 0x07c0, 0x07c8, 0x07d4, 0x07de, 0x07e5, 0x07ec, 0x07f3, - 0x07fd, 0x0814, 0x081f, 0x082b, 0x0830, 0x0839, 0x0849, 0x085f, - 0x0864, 0x0877, 0x087b, 0x0883, 0x088f, 0x0896, 0x08ae, 0x08ba, - 0x08c1, 0x08c6, 0x08cc, 0x08de, 0x08e4, 0x08ea, 0x08f2, 0x08f9, - 0x08ff, 0x0912, 0x0912, 0x0915, 0x091c, 0x0926, 0x0933, 0x094d, - 0x0956, 0x096f, 0x098b, 0x0992, 0x0999, 0x09a9, 0x09ae, 0x09b4, - // Entry 100 - 13F - 0x09b9, 0x09c0, 0x09cb, 0x09d1, 0x09d9, 0x09e7, 0x09ec, 0x09f2, - 0x09fe, 0x0a0a, 0x0a11, 0x0a1c, 0x0a2b, 0x0a36, 0x0a41, 0x0a4f, - 0x0a5e, 0x0a65, 0x0a75, 0x0a7c, 0x0a85, 0x0a8e, 0x0a9b, 0x0aa6, - 0x0abe, 0x0ac7, 0x0ad1, 0x0ada, 0x0ade, 0x0aea, 0x0af3, 0x0af9, - 0x0b04, 0x0b0f, 0x0b1a, 0x0b27, + 0x00a6, 0x00b2, 0x00c4, 0x00cc, 0x00d6, 0x00dc, 0x00e8, 0x00f0, + 0x00f7, 0x00fe, 0x0103, 0x0114, 0x011b, 0x0121, 0x0128, 0x013a, + 0x0140, 0x0147, 0x014d, 0x0157, 0x015f, 0x016c, 0x0172, 0x0178, + 0x0183, 0x0191, 0x01b2, 0x01c3, 0x01c9, 0x01d9, 0x01e3, 0x01e8, + 0x01ef, 0x01f3, 0x01fb, 0x0209, 0x0213, 0x0217, 0x0221, 0x0229, + 0x0236, 0x023c, 0x0244, 0x024c, 0x0258, 0x0260, 0x0267, 0x026f, + // Entry 40 - 7F + 0x028b, 0x0292, 0x02a2, 0x02a9, 0x02b0, 0x02b5, 0x02c0, 0x02c7, + 0x02cd, 0x02d4, 0x02d6, 0x02de, 0x02e5, 0x02e9, 0x02f8, 0x030f, + 0x0319, 0x0322, 0x0327, 0x0334, 0x033b, 0x0342, 0x034f, 0x0357, + 0x035c, 0x0365, 0x036e, 0x0374, 0x037a, 0x0384, 0x0395, 0x039b, + 0x03be, 0x03c7, 0x03cb, 0x03d8, 0x03de, 0x03f2, 0x040d, 0x0415, + 0x041c, 0x0421, 0x0427, 0x0433, 0x043c, 0x0442, 0x0448, 0x044b, + 0x0450, 0x0475, 0x0479, 0x047d, 0x0483, 0x0489, 0x048f, 0x0496, + 0x049c, 0x04a1, 0x04a6, 0x04b1, 0x04ba, 0x04c2, 0x04ca, 0x04de, + // Entry 80 - BF + 0x04e8, 0x04f2, 0x04f8, 0x0504, 0x050e, 0x0512, 0x0519, 0x0522, + 0x052f, 0x0538, 0x053f, 0x0546, 0x054d, 0x0557, 0x055d, 0x0562, + 0x0569, 0x056f, 0x0576, 0x0580, 0x058c, 0x0596, 0x05a4, 0x05ad, + 0x05b1, 0x05c0, 0x05c8, 0x05d9, 0x05e7, 0x05f1, 0x05fb, 0x0605, + 0x060a, 0x0613, 0x061c, 0x0622, 0x0628, 0x0630, 0x0638, 0x063f, + 0x064b, 0x0650, 0x065b, 0x0662, 0x066b, 0x0674, 0x0679, 0x067e, + 0x0683, 0x0687, 0x0692, 0x0696, 0x069c, 0x06a0, 0x06b0, 0x06bf, + 0x06ca, 0x06d2, 0x06d7, 0x06ef, 0x06f7, 0x0702, 0x0718, 0x0720, + // Entry C0 - FF + 0x0725, 0x072d, 0x0732, 0x073e, 0x0746, 0x074d, 0x0753, 0x075b, + 0x0761, 0x076d, 0x077a, 0x0785, 0x078a, 0x0791, 0x079a, 0x07a6, + 0x07ae, 0x07c3, 0x07cb, 0x07d7, 0x07e1, 0x07e8, 0x07ef, 0x07f6, + 0x0800, 0x0817, 0x0822, 0x082e, 0x0833, 0x083c, 0x084c, 0x0862, + 0x0867, 0x0881, 0x0885, 0x088d, 0x0899, 0x08a0, 0x08b8, 0x08c4, + 0x08cb, 0x08d0, 0x08d6, 0x08e8, 0x08ee, 0x08f4, 0x08fc, 0x0903, + 0x0909, 0x091c, 0x091e, 0x0921, 0x0928, 0x0932, 0x093f, 0x0959, + 0x0962, 0x097b, 0x0997, 0x099e, 0x09a5, 0x09b5, 0x09ba, 0x09c0, + // Entry 100 - 13F + 0x09c5, 0x09cc, 0x09d7, 0x09dd, 0x09e5, 0x09f3, 0x09f8, 0x09fe, + 0x0a0a, 0x0a16, 0x0a1d, 0x0a28, 0x0a37, 0x0a42, 0x0a4d, 0x0a5b, + 0x0a6a, 0x0a71, 0x0a81, 0x0a88, 0x0a91, 0x0a9a, 0x0aa7, 0x0ab2, + 0x0abd, 0x0ac6, 0x0ad0, 0x0ad9, 0x0add, 0x0ae9, 0x0af2, 0x0af8, + 0x0b03, 0x0b0e, 0x0b19, 0x0b19, 0x0b26, }, }, { // nnh @@ -39838,95 +41969,100 @@ var regionHeaders = [252]header{ }, }, { // or - "ଆଣ୍ଡୋରାସଂଯୁକ୍ତ ଆରବ ଏମିରେଟସ୍ଆଫାଗାନିସ୍ତାନ୍ଆଣ୍ଟିଗୁଆ ଏବଂ ବାରବୁଦାଆଙ୍ଗୁଇଲ୍ଲାଆଲ" + - "ବାନିଆଆର୍ମେନିଆଆଙ୍ଗୋଲାଆର୍ଣ୍ଟକଟିକାଆର୍ଜେଣ୍ଟିନାଆମେରିକାନ୍ ସାମୋଆଅଷ୍ଟ୍ରିଆଅ" + - "ଷ୍ଟ୍ରେଲିଆଆରୁବାଆଲାଣ୍ଡ ଆଇସଲ୍ୟାଣ୍ଡଆଜେରବାଇଜାନ୍ବୋସନିଆ ଏବଂ ହର୍ଜଗୋଭିନାବାର" + - "ବାଡୋସ୍ବାଙ୍ଗଲାଦେଶ୍ବେଲଜିୟମ୍ବୁର୍କିନୋ ଫାସୋବୁଲଗେରିଆବାହାରିନ୍ବୁରୁନ୍ଦିବେନି" + - "ନ୍ସେଣ୍ଟ ବାର୍ଥେଲେମିବରମୁଡାବ୍ରୁନେଇବୋଲଭିଆବ୍ରାଜିଲ୍ବାହାମାସ୍ଭୁଟାନ୍ବୌଭେଟ୍ " + - "ଆଇସଲ୍ୟାଣ୍ଡବୋଟସ୍ବାନ୍ବେଲାରୁଷ୍ବେଲିଜ୍କାନାଡାକୋକୋସ୍ ଆଇସଲ୍ୟାଣ୍ଡକଙ୍ଗୋ-କିନସ" + - "ାସାମଧ୍ୟ ଆଫ୍ରିକୀୟ ଗଣତନ୍ତ୍ରକଙ୍ଗୋ-ବ୍ରାଜିଭିଲ୍ଲେସ୍ବିଜରଲ୍ୟାଣ୍ଡଆଇବରୀ କୋଷ୍" + - "ଟକୁକ୍ ଆଇସଲ୍ୟାଣ୍ଡଚିଲ୍ଲୀକାମେରୁନ୍ଚିନ୍କୋଲମ୍ବିଆକୋଷ୍ଟା ରିକାକ୍ୱିବାକେପ୍ ଭର" + - "୍ଦେଖ୍ରୀଷ୍ଟମାସ ଆଇଲ୍ୟାଣ୍ଡସାଇପ୍ରସ୍ଚେକ୍ ସାଧାରଣତନ୍ତ୍ରଜର୍ମାନୀଡିବୌଟିଡେନମା" + - "ର୍କଡୋମିନାକାଡୋମିନକାନ୍ ପ୍ରଜାତନ୍ତ୍ରଆଲଜେରିଆଇକ୍ୱାଡୋର୍ଏସ୍ତୋନିଆଇଜିପ୍ଟପଶ୍ଚ" + - "ିମ ସାହାରାଇରିଟ୍ରିୟାସ୍ପେନ୍ଇଥିଓପିଆୟୁରୋପିଆନ୍ ୟୁନିଅନ୍ଫିନଲ୍ୟାଣ୍ଡଫିଜିଫଲ୍କ" + - "ଲ୍ୟାଣ୍ଡ ଦ୍ବୀପପୁଞ୍ଜମାଇକ୍ରୋନେସିଆଫାରୋଇ ଦ୍ବୀପପୁଞ୍ଜଫ୍ରାନ୍ସଗାବୋନ୍ବ୍ରିଟେନ" + - "୍ଗ୍ରେନାଡାଜର୍ଜିଆଫ୍ରେଞ୍ଚ ଗୁଇନାଗୁଏରନେସିଘାନାଜିବ୍ରାଲ୍ଟର୍ଗ୍ରୀନଲ୍ୟାଣ୍ଡଗାମ" + - "୍ବିଆଗୁଏନେଆଗୌଡେଲୌପେଇକ୍ବାଟେରିଆଲ୍ ଗୁଇନିଆଗ୍ରୀସ୍ଦକ୍ଷିଣ ଜର୍ଜିଆ ଏବଂ ଦକ୍ଷି" + - "ଣ ସାଣ୍ଡୱିଚ୍ ଦ୍ବୀପପୁଞ୍ଜଗୁଏତମାଲାଗୁଆମ୍ଗୁଇନିଆ-ବିସାଉଗୁଇନାହଂକଂ ବିଶେଷ ପ୍ର" + - "ଶାସନିକ କ୍ଷେତ୍ର ଚୀନ୍ହାର୍ଡ ଦ୍ବୀପପୁଞ୍ଜ ଏବଂ ମ୍ୟାକଡୋନାଲ୍ ଦ୍ବୀପପୁଞ୍ଜହୋଣ୍" + - "ଡାରୁସ୍କ୍ରୋଆଟିଆହାଇତିହଙ୍ଗେରୀଇଣ୍ଡୋନେସିଆଆୟରଲ୍ୟାଣ୍ଡଇସ୍ରାଏଲ୍ଆଇଲ୍ ଅଫ୍ ମୈନ" + - "୍ଭାରତବ୍ରିଟିଶ୍ ଭାରତୀୟ ସାମୁଦ୍ରିକ କ୍ଷେତ୍ରଇରାକ୍ଇରାନ୍ଆଇସଲ୍ୟାଣ୍ଡଇଟାଲୀଜର୍" + - "ସିଜାମାଇକାଜୋର୍ଡାନ୍ଜାପାନ୍କେନିୟାକିର୍ଗିଜିସ୍ଥାନକାମ୍ବୋଡିଆକିରିବାଟୀକାମୋରସ୍" + - "ସେଣ୍ଟ କିଟସ୍ ଏଣ୍ଡ ନେଭିସ୍ଉତ୍ତର କୋରିଆଦକ୍ଷିଣ କୋରିଆକୁଏତ୍କେମ୍ୟାନ୍ ଦ୍ବୀପପ" + - "ୁଞ୍ଜକାଜାକାସ୍ଥାନ୍ଲାଓସ୍ଲେବାନନ୍ସେଣ୍ଟ ଲୁସିଆଲିଚେସ୍ତିଆନାନ୍ଶ୍ରୀଲଙ୍କାଲିବେର" + - "ିଆଲେସୋଥୋଲିଥାଆନିଆଲକ୍ସେମବର୍ଗଲାଟଭିଆଲିବିଆମୋରୋକ୍କୋମୋନାକୋମାଲଡୋଭାମଣ୍ଟେଗ୍ର" + - "ୋସେଣ୍ଟ ମାର୍ଟିନ୍ମାଡାଗାସ୍କର୍ମାର୍ଶଲ୍ ଦ୍ବୀପପୁଞ୍ଜମାସେଡୋନିଆମାଳୀମିୟାମାର୍ମ" + - "ଙ୍ଗୋଲିଆମାକାଉ SAR ଚିନ୍ଉତ୍ତର ମାରିଆନା ଦ୍ବୀପପୁଞ୍ଜମାର୍ଟିନିକ୍ୟୁମାଉରିଟାନି" + - "ଆମଣ୍ଟେସେରାଟ୍ମାଲ୍ଟାମୌରିସସ୍ମାଳଦ୍ବୀପମାଲୱିମେକ୍ସିକୋମାଲେସିଆମୋଜାମ୍ବିକ୍ୟୁନ" + - "ାମ୍ବିଆନୂତନ କାଲେଡୋନିଆନାଇଜର୍ନରଫ୍ଲକ୍ ଦ୍ବୀପନାଇଜେରିଆନିକାରାଗୁଆନେଦରଲ୍ୟାଣ୍" + - "ଡନରୱେନେପାଳନାଉରୁନିଉନ୍ୟୁଜିଲାଣ୍ଡଓମାନ୍ପାନାମାପେରୁଫ୍ରେଞ୍ଚ ପଲିନେସିଆପପୁଆ ନ" + - "୍ୟୁ ଗୁଏନିଆଫିଲିପାଇନସ୍ପାକିସ୍ତାନପୋଲାଣ୍ଡସେଣ୍ଟ ପିଏରେ ଏବଂ ମିକ୍ବାଲୋନ୍ପିଟକ" + - "ାଇରିନ୍ପୁଏର୍ତ୍ତୋ ରିକୋପାଲେସ୍ତେନିଆପର୍ତ୍ତୁଗାଲ୍ପାଲାଉପାରାଗୁଏକତାର୍ଆଉଟଲେଇଂ" + - " ଓସେନିଆରିୟୁନିଅନ୍ରୋମାନିଆସର୍ବିଆରୁଷିଆରାୱାଣ୍ଡାସାଉଦି ଆରବିଆସୋଲୋମନ୍ ଦ୍ବୀପପୁ" + - "ଞ୍ଜସେଚେଲସ୍ସୁଦାନ୍ସ୍ୱେଡେନ୍ସିଙ୍ଗାପୁର୍ସେଣ୍ଟ ହେଲେନାସ୍ଲୋଭେନିଆସାଲ୍ଭାର୍ଡ ଏ" + - "ବଂ ଜାନ୍ ମାୟୋନ୍ସ୍ଲୋଭାକିଆସିଓରା ଲିଓନ୍ସାନ୍ ମାରିନୋସେନେଗାଲ୍ସୋମାଲିଆସୁରିନା" + - "ମସାଓ ଟୋମେ ଏବଂ ପ୍ରିନସିପିଏଲ୍ ସାଲଭାଡୋର୍ସିରିଆସ୍ବାଜିଲାଣ୍ଡତୁର୍କସ୍ ଏବଂ ସା" + - "ଇକସ୍ ଦ୍ବୀପପୁଞ୍ଜଚାଦ୍ଫରାସୀ ଦକ୍ଷିଣ କ୍ଷେତ୍ରଟୋଗୋଥାଇଲାଣ୍ଡତାଜିକିସ୍ଥାନ୍ଟୋକ" + - "େଲାଉପୁର୍ବ ତିମୋର୍ତୁର୍କମେନିସ୍ତାନ୍ତୁନିସିଆଟୋଙ୍ଗାତୁର୍କୀତ୍ରିନିଦାଦ୍ ଏବଂ ଟ" + - "ୋବାଗୋଟୁଭାଲୁତାଇୱାନ୍ତାଞ୍ଜାନିଆୟୁକ୍ରାଇନ୍ଉଗାଣ୍ଡାୟୁନାଇଟେଡ୍ ଷ୍ଟେଟସ୍ ମାଇନର" + - "୍ ଆଉଟଲେଇଂ ଦ୍ବୀପପୁଞ୍ଜଯୁକ୍ତ ରାଷ୍ଟ୍ର ଆମେରିକାଉରୁଗୁଏଉଜବେକିସ୍ଥାନ୍ଭାଟିକାନ" + - "୍ସେଣ୍ଟ ଭିନସେଣ୍ଟ ଏବଂ ଦି ଗ୍ରେନାଡିସ୍ଭେନଜୁଏଲାବ୍ରିଟିଶ୍ ଭର୍ଜିନ୍ ଦ୍ବୀପପୁଞ" + - "୍ଜୟୁଏସ୍ ଭର୍ଜିନ୍ ଦ୍ବୀପପୁଞ୍ଜଭିଏତନାମ୍ଭାନୁଆତୁୱାଲିସ୍ ଏବଂ ଫୁତୁନାସାମୋଆୟେମ" + - "େନ୍ମାୟୋଟେଦକ୍ଷିଣ ଆଫ୍ରିକାଜାମ୍ବିଆଜିମ୍ବାୱେଅଜଣା କିମ୍ବା ଅବୈଧ ପ୍ରଦେଶବିଶ୍ବ" + - "ଆଫ୍ରିକାଉତ୍ତର ଆମେରିକାଦକ୍ଷିଣ ଆମେରିକାଓସୋନିଆନ୍ପଶ୍ଚିମ ଆଫ୍ରିକାମଧ୍ୟ ଆମେରି" + - "କାପୂର୍ବ ଆଫ୍ରିକାଉତ୍ତର ଆଫ୍ରିକାମଧ୍ୟ ଆଫ୍ରିକାଦକ୍ଷିଣସ୍ଥ ଆଫ୍ରିକାଆମେରିକାସ୍" + - "ଉତ୍ତରସ୍ଥ ଆମେରିକାକାରିବିଆନ୍ପୂର୍ବ ଏସିଆଦକ୍ଷିଣ ଏସିଆଦକ୍ଷିଣ-ପୂର୍ବ ଏସିଆଦକ୍" + - "ଷିଣ ୟୁରୋପ୍ଅଷ୍ଟ୍ରେଲିଆ ଏବଂ ନ୍ୟୁଜିଲ୍ୟାଣ୍ଡମେଲାନେସିଆମାଇକ୍ରୋନେସିଆନ୍ ଅଞ୍ଚ" + - "ଳପଲିନେସିଆଏସିଆମଧ୍ୟ ଏସିଆପଶ୍ଚିମ ଏସିଆୟୁରୋପ୍ପୂର୍ବ ୟୁରୋପ୍ଉତ୍ତର ୟୁରୋପ୍ପଶ୍" + - "ଚିମ ୟୁରୋପ୍ଲାଟିନ୍ ଆମେରିକା ଏବଂ କାରିବିଆନ୍", - []uint16{ // 292 elements - // Entry 0 - 3F - 0x0000, 0x0000, 0x0015, 0x004d, 0x0074, 0x00ac, 0x00ca, 0x00df, - 0x00f7, 0x010c, 0x012d, 0x014e, 0x0179, 0x0191, 0x01af, 0x01be, - 0x01ef, 0x0210, 0x024b, 0x0266, 0x0287, 0x029f, 0x02c4, 0x02dc, - 0x02f4, 0x030c, 0x031e, 0x034c, 0x035e, 0x0373, 0x0385, 0x0385, - 0x039d, 0x03b5, 0x03c7, 0x03f8, 0x0413, 0x042b, 0x043d, 0x044f, - 0x0480, 0x04a5, 0x04e3, 0x0517, 0x053e, 0x055d, 0x0588, 0x059a, - 0x05b2, 0x05be, 0x05d6, 0x05d6, 0x05f5, 0x0607, 0x0623, 0x0623, - 0x065d, 0x0675, 0x06a6, 0x06bb, 0x06bb, 0x06cd, 0x06e5, 0x06fd, - // Entry 40 - 7F - 0x073a, 0x074f, 0x074f, 0x076a, 0x0782, 0x0794, 0x07b9, 0x07d4, - 0x07e6, 0x07fb, 0x082c, 0x082c, 0x084a, 0x0856, 0x0896, 0x08ba, - 0x08e8, 0x08fd, 0x090f, 0x0927, 0x093f, 0x0951, 0x0976, 0x098e, - 0x099a, 0x09bb, 0x09df, 0x09f4, 0x0a06, 0x0a1e, 0x0a55, 0x0a67, - 0x0ae4, 0x0afc, 0x0b0b, 0x0b2d, 0x0b3c, 0x0b97, 0x0c10, 0x0c2e, - 0x0c46, 0x0c55, 0x0c6a, 0x0c6a, 0x0c88, 0x0ca6, 0x0cbe, 0x0ce1, - 0x0ced, 0x0d4a, 0x0d59, 0x0d68, 0x0d86, 0x0d95, 0x0da4, 0x0db9, - 0x0dd1, 0x0de3, 0x0df5, 0x0e1c, 0x0e37, 0x0e4f, 0x0e64, 0x0ea3, - // Entry 80 - BF - 0x0ec2, 0x0ee4, 0x0ef3, 0x0f2a, 0x0f4e, 0x0f5d, 0x0f72, 0x0f91, - 0x0fb8, 0x0fd3, 0x0fe8, 0x0ffa, 0x1012, 0x1030, 0x1042, 0x1051, - 0x1069, 0x107b, 0x1090, 0x10ab, 0x10d3, 0x10f4, 0x1128, 0x1143, - 0x114f, 0x1167, 0x117f, 0x119f, 0x11e3, 0x1207, 0x1225, 0x1246, - 0x1258, 0x126d, 0x1285, 0x1294, 0x12ac, 0x12c1, 0x12e5, 0x12fa, - 0x1322, 0x1334, 0x1359, 0x1371, 0x138c, 0x13ad, 0x13b9, 0x13c8, - 0x13d7, 0x13e0, 0x1401, 0x1410, 0x1422, 0x142e, 0x145c, 0x1488, - 0x14a6, 0x14c1, 0x14d6, 0x151e, 0x153c, 0x1564, 0x1585, 0x15a6, - // Entry C0 - FF - 0x15b5, 0x15ca, 0x15d9, 0x1601, 0x161c, 0x1631, 0x1643, 0x1652, - 0x166a, 0x1689, 0x16bd, 0x16d2, 0x16e4, 0x16fc, 0x171a, 0x173c, - 0x1757, 0x179c, 0x17b7, 0x17d6, 0x17f5, 0x180d, 0x1822, 0x1837, - 0x1837, 0x1873, 0x1898, 0x1898, 0x18a7, 0x18c8, 0x18c8, 0x1919, - 0x1925, 0x195d, 0x1969, 0x1981, 0x19a5, 0x19ba, 0x19dc, 0x1a09, - 0x1a1e, 0x1a30, 0x1a42, 0x1a7d, 0x1a8f, 0x1aa4, 0x1abf, 0x1ada, - 0x1aef, 0x1b68, 0x1b68, 0x1ba3, 0x1bb5, 0x1bd9, 0x1bf1, 0x1c49, - 0x1c61, 0x1cae, 0x1cf2, 0x1d0a, 0x1d1f, 0x1d4e, 0x1d5d, 0x1d5d, - // Entry 100 - 13F - 0x1d6f, 0x1d81, 0x1da9, 0x1dbe, 0x1dd6, 0x1e15, 0x1e24, 0x1e39, - 0x1e5e, 0x1e86, 0x1e9e, 0x1ec6, 0x1ee8, 0x1f0d, 0x1f32, 0x1f54, - 0x1f85, 0x1fa0, 0x1fce, 0x1fe9, 0x2005, 0x2024, 0x2053, 0x2078, - 0x20c8, 0x20e3, 0x211d, 0x2135, 0x2141, 0x215a, 0x2179, 0x218b, - 0x21ad, 0x21cf, 0x21f4, 0x2242, + "ଆସେନସିଅନ୍\u200c ଦ୍ୱୀପଆଣ୍ଡୋରାସଂଯୁକ୍ତ ଆରବ ଏମିରେଟସ୍ଆଫଗାନିସ୍ତାନ୍ଆଣ୍ଟିଗୁଆ ଏବଂ" + + " ବାରବୁଦାଆଙ୍ଗୁଇଲ୍ଲାଆଲବାନିଆଆର୍ମେନିଆଆଙ୍ଗୋଲାଆଣ୍ଟାର୍କାଟିକାଆର୍ଜେଣ୍ଟିନାଆମେର" + + "ିକାନ୍ ସାମୋଆଅଷ୍ଟ୍ରିଆଅଷ୍ଟ୍ରେଲିଆଆରୁବାଅଲାଣ୍ଡ ଦ୍ଵୀପପୁଞ୍ଜଆଜେରବାଇଜାନ୍ବୋସନ" + + "ିଆ ଏବଂ ହର୍ଜଗୋଭିନାବାରବାଡୋସ୍ବାଂଲାଦେଶବେଲଜିୟମ୍ବୁର୍କିନା ଫାସୋବୁଲଗେରିଆବାହ" + + "ାରିନ୍ବୁରୁଣ୍ଡିବେନିନ୍ସେଣ୍ଟ ବାର୍ଥେଲେମିବର୍ମୁଡାବ୍ରୁନେଇବୋଲଭିଆକାରବିୟନ୍" + + "\u200c ନେଦରଲ୍ୟାଣ୍ଡବ୍ରାଜିଲ୍ବାହାମାସ୍ଭୁଟାନବୌଭେଟ୍\u200c ଦ୍ୱୀପବୋଟସ୍ୱାନାବେ" + + "ଲାରୁଷ୍ବେଲିଜ୍କାନାଡାକୋକୋସ୍ (କୀଲିଂ) ଦ୍ଵୀପପୁଞ୍ଜକଙ୍ଗୋ-କିନସାସାମଧ୍ୟ ଆଫ୍ରି" + + "କୀୟ ସାଧାରଣତନ୍ତ୍ରକଙ୍ଗୋ-ବ୍ରାଜିଭିଲ୍ଲେସ୍ୱିଜରଲ୍ୟାଣ୍ଡକୋଟେ ଡି ଆଇଭୋରିକୁକ୍" + + "\u200c ଦ୍ୱୀପପୁଞ୍ଜଚିଲ୍ଲୀକାମେରୁନ୍ଚିନ୍କୋଲମ୍ବିଆକ୍ଲିପରଟନ୍\u200c ଦ୍ୱୀପକୋଷ୍" + + "ଟା ରିକାକ୍ୱିବାକେପ୍ ଭର୍ଦେକୁରାକାଓଖ୍ରୀଷ୍ଟମାସ ଦ୍ୱୀପସାଇପ୍ରସ୍ଚେଚିଆଜର୍ମାନୀ" + + "ଡିଏଗୋ ଗାର୍ସିଆଜିବୋଟିଡେନମାର୍କଡୋମିନିକାଡୋମିନିକାନ୍\u200c ସାଧାରଣତନ୍ତ୍ରଆଲ" + + "ଜେରିଆସିଉଟା ଏବଂ ମେଲିଲାଇକ୍ୱାଡୋର୍ଏସ୍ତୋନିଆଇଜିପ୍ଟପଶ୍ଚିମ ସାହାରାଇରିଟ୍ରିୟା" + + "ସ୍ପେନ୍ଇଥିଓପିଆୟୁରୋପୀୟ ସଂଘୟୁରୋକ୍ଷେତ୍ରଫିନଲ୍ୟାଣ୍ଡଫିଜିଫକ୍\u200cଲ୍ୟାଣ୍ଡ " + + "ଦ୍ଵୀପପୁଞ୍ଜମାଇକ୍ରୋନେସିଆଫାରୋଇ ଦ୍ୱୀପପୁଞ୍ଜଫ୍ରାନ୍ସଗାବୋନ୍ଯୁକ୍ତରାଜ୍ୟଗ୍ରେନ" + + "ାଡାଜର୍ଜିଆଫ୍ରେଞ୍ଚ ଗୁଇନାଗୁଏରନେସିଘାନାଜିବ୍ରାଲ୍ଟର୍ଗ୍ରୀନଲ୍ୟାଣ୍ଡଗାମ୍ବିଆଗୁ" + + "ଇନିଆଗୁଆଡେଲୋପ୍\u200cଇକ୍ବାଟେରିଆଲ୍ ଗୁଇନିଆଗ୍ରୀସ୍ଦକ୍ଷିଣ ଜର୍ଜିଆ ଏବଂ ଦକ୍ଷ" + + "ିଣ ସାଣ୍ଡୱିଚ୍ ଦ୍ୱୀପପୁଞ୍ଜଗୁଏତମାଲାଗୁଆମ୍ଗୁଇନିଆ-ବିସାଉଗୁଇନାହଂ କଂ ଏସଏଆର୍" + + "\u200c ଚାଇନାହାର୍ଡ୍\u200c ଏବଂ ମ୍ୟାକଡୋନାଲ୍ଡ ଦ୍ୱୀପପୁଞ୍ଜହୋଣ୍ଡୁରାସ୍\u200c" + + "କ୍ରୋଏସିଆହାଇତିହଙ୍ଗେରୀକେନେରୀ ଦ୍ୱୀପପୁଞ୍ଜଇଣ୍ଡୋନେସିଆଆୟରଲ୍ୟାଣ୍ଡଇସ୍ରାଏଲ୍ଆ" + + "ଇଲ୍\u200c ଅଫ୍\u200c ମ୍ୟାନ୍\u200cଭାରତବ୍ରିଟିଶ୍\u200c ଭାରତ ମାହାସାଗର କ" + + "୍ଷେତ୍ରଇରାକ୍ଇରାନଆଇସଲ୍ୟାଣ୍ଡଇଟାଲୀଜର୍ସିଜାମାଇକାଜୋର୍ଡାନ୍ଜାପାନକେନିୟାକିର୍ଗ" + + "ିଜିସ୍ତାନକାମ୍ବୋଡିଆକିରିବାଟିକୋମୋରସ୍\u200cସେଣ୍ଟ କିଟସ୍\u200c ଏବଂ ନେଭିସ୍" + + "\u200cଉତ୍ତର କୋରିଆଦକ୍ଷିଣ କୋରିଆକୁଏତ୍କେମ୍ୟାନ୍\u200c ଦ୍ୱୀପପୁଞ୍ଜକାଜାକାସ୍ତ" + + "ାନଲାଓସ୍ଲେବାନନ୍ସେଣ୍ଟ ଲୁସିଆଲିଚେଟନଷ୍ଟେଇନ୍ଶ୍ରୀଲଙ୍କାଲାଇବେରିଆଲେସୋଥୋଲିଥୁଆ" + + "ନିଆଲକ୍ସେମବର୍ଗଲାଟଭିଆଲିବ୍ୟାମୋରୋକ୍କୋମୋନାକୋମାଲଡୋଭାମଣ୍ଟେନିଗ୍ରୋସେଣ୍ଟ ମାର" + + "୍ଟିନ୍ମାଡାଗାସ୍କର୍ମାର୍ଶାଲ୍\u200c ଦ୍ୱୀପପୁଞ୍ଜମାସେଡୋନିଆମାଲିମିଆଁମାରମଙ୍ଗୋ" + + "ଲିଆମାକାଉ ଏସଏଆର୍\u200c ଚାଇନାଉତ୍ତର ମାରିଆନା ଦ୍ୱୀପପୁଞ୍ଜମାର୍ଟିନିକ୍ୟୁମୌର" + + "ିଟାନିଆମଣ୍ଟେସେରାଟ୍ମାଲ୍ଟାମରିସସମାଲଦିଭସ୍\u200cମାଲୱିମେକ୍ସିକୋମାଲେସିଆମୋଜା" + + "ମ୍ବିକ୍\u200cନାମିବିଆନୂତନ କାଲେଡୋନିଆନାଇଜରନର୍ଫକ୍\u200c ଦ୍ୱୀପନାଇଜେରିଆନି" + + "କାରାଗୁଆନେଦରଲ୍ୟାଣ୍ଡନରୱେନେପାଳନାଉରୁନିଉନ୍ୟୁଜିଲାଣ୍ଡଓମାନ୍ପାନାମାପେରୁଫ୍ରେଞ" + + "୍ଚ ପଲିନେସିଆପପୁଆ ନ୍ୟୁ ଗୁଏନିଆଫିଲିପାଇନସ୍ପାକିସ୍ତାନପୋଲାଣ୍ଡସେଣ୍ଟ ପିଏରେ ଏ" + + "ବଂ ମିକ୍ୱେଲନ୍\u200cପିଟକାଇରିନ୍\u200c ଦ୍ୱୀପପୁଞ୍ଜପୁଏର୍ତ୍ତୋ ରିକୋପାଲେଷ୍ଟ" + + "େନିୟ ଭୂଭାଗପର୍ତ୍ତୁଗାଲ୍ପାଲାଉପାରାଗୁଏକତାର୍ସୀମାନ୍ତବର୍ତ୍ତୀ ଓସେନିଆରିୟୁନିଅ" + + "ନ୍ରୋମାନିଆସର୍ବିଆରୁଷିଆରାୱାଣ୍ଡାସାଉଦି ଆରବିଆସୋଲୋମନ୍\u200c ଦ୍ୱୀପପୁଞ୍ଜସେଚ" + + "େଲସ୍ସୁଦାନସ୍ୱେଡେନ୍ସିଙ୍ଗାପୁର୍ସେଣ୍ଟ ହେଲେନାସ୍ଲୋଭେନିଆସାଲବାର୍ଡ ଏବଂ ଜାନ୍" + + "\u200c ମାୟେନ୍\u200cସ୍ଲୋଭାକିଆସିଏରା ଲିଓନସାନ୍ ମାରିନୋସେନେଗାଲ୍ସୋମାଲିଆସୁରି" + + "ନାମଦକ୍ଷିଣ ସୁଦାନସାଓ ଟୋମେ ଏବଂ ପ୍ରିନସିପିଏଲ୍ ସାଲଭାଡୋର୍ସିଣ୍ଟ ମାର୍ଟୀନ୍" + + "\u200cସିରିଆସ୍ୱାଜିଲ୍ୟାଣ୍ଡଟ୍ରାଇଷ୍ଟନ୍\u200c ଦା କୁନ୍\u200cଚାତୁର୍କସ୍" + + "\u200c ଏବଂ କାଇକୋସ୍\u200c ଦ୍ୱୀପପୁଞ୍ଜଚାଦ୍ଫରାସୀ ଦକ୍ଷିଣ କ୍ଷେତ୍ରଟୋଗୋଥାଇଲ୍" + + "ୟାଣ୍ଡତାଜିକିସ୍ଥାନ୍ଟୋକେଲାଉତିମୋର୍-ଲେଷ୍ଟେତୁର୍କମେନିସ୍ତାନଟ୍ୟୁନିସିଆଟୋଙ୍ଗା" + + "ତୁର୍କୀତ୍ରିନିଦାଦ୍ ଏବଂ ଟୋବାଗୋତୁଭାଲୁତାଇୱାନତାଞ୍ଜାନିଆୟୁକ୍ରେନ୍\u200cଉଗାଣ" + + "୍ଡାଯୁକ୍ତରାଷ୍ଟ୍ର ଆଉଟ୍\u200cଲାଇଙ୍ଗ ଦ୍ଵୀପପୁଞ୍ଜଜାତିସଂଘଯୁକ୍ତ ରାଷ୍ଟ୍ରଉରୁ" + + "ଗୁଏଉଜବେକିସ୍ତାନଭାଟିକାନ୍\u200c ସିଟିସେଣ୍ଟ ଭିନସେଣ୍ଟ ଏବଂ ଦି ଗ୍ରେନାଡିସ୍ଭ" + + "େନେଜୁଏଲାବ୍ରିଟିଶ୍\u200c ଭର୍ଜିନ୍ ଦ୍ୱୀପପୁଞ୍ଜଯୁକ୍ତରାଷ୍ଟ୍ର ଭିର୍ଜିନ୍ ଦ୍ଵ" + + "ୀପପୁଞ୍ଜଭିଏତନାମ୍ଭାନୁଆତୁୱାଲିସ୍ ଏବଂ ଫୁତୁନାସାମୋଆକୋସୋଭୋୟେମେନ୍ମାୟୋଟେଦକ୍ଷ" + + "ିଣ ଆଫ୍ରିକାଜାମ୍ବିଆଜିମ୍ବାୱେଅଜଣା ଅଞ୍ଚଳବିଶ୍ୱଆଫ୍ରିକାଉତ୍ତର ଆମେରିକାଦକ୍ଷିଣ" + + " ଆମେରିକାଓସେନିଆପଶ୍ଚିମ ଆଫ୍ରିକାମଧ୍ୟ ଆମେରିକାପୂର୍ବ ଆଫ୍ରିକାଉତ୍ତର ଆଫ୍ରିକାମଧ" + + "୍ୟ ଆଫ୍ରିକାଦକ୍ଷିଣସ୍ଥ ଆଫ୍ରିକାଆମେରିକାଉତ୍ତରସ୍ଥ ଆମେରିକାକାରିବିଆନ୍ପୂର୍ବ ଏ" + + "ସିଆଦକ୍ଷିଣ ଏସିଆଦକ୍ଷିଣ-ପୂର୍ବ ଏସିଆଦକ୍ଷିଣ ୟୁରୋପ୍ଅଷ୍ଟ୍ରେଲେସିଆମେଲାନେସିଆମ" + + "ାଇକ୍ରୋନେସିଆନ୍ ଅଞ୍ଚଳପଲିନେସିଆଏସିଆମଧ୍ୟ ଏସିଆପଶ୍ଚିମ ଏସିଆୟୁରୋପ୍ପୂର୍ବ ୟୁର" + + "ୋପ୍ଉତ୍ତର ୟୁରୋପ୍ପଶ୍ଚିମ ୟୁରୋପ୍ଲାଟିନ୍\u200c ଆମେରିକା", + []uint16{ // 293 elements + // Entry 0 - 3F + 0x0000, 0x002e, 0x0043, 0x007b, 0x009f, 0x00d7, 0x00f5, 0x010a, + 0x0122, 0x0137, 0x015e, 0x017f, 0x01aa, 0x01c2, 0x01e0, 0x01ef, + 0x0220, 0x0241, 0x027c, 0x0297, 0x02af, 0x02c7, 0x02ec, 0x0304, + 0x031c, 0x0334, 0x0346, 0x0374, 0x0389, 0x039e, 0x03b0, 0x03ed, + 0x0405, 0x041d, 0x042c, 0x0451, 0x046c, 0x0484, 0x0496, 0x04a8, + 0x04eb, 0x0510, 0x055a, 0x058e, 0x05b5, 0x05db, 0x0609, 0x061b, + 0x0633, 0x063f, 0x0657, 0x0685, 0x06a4, 0x06b6, 0x06d2, 0x06e7, + 0x0715, 0x072d, 0x073c, 0x0751, 0x0776, 0x0788, 0x07a0, 0x07b8, + // Entry 40 - 7F + 0x07fe, 0x0813, 0x083f, 0x085a, 0x0872, 0x0884, 0x08a9, 0x08c4, + 0x08d6, 0x08eb, 0x090a, 0x092b, 0x0949, 0x0955, 0x0995, 0x09b9, + 0x09e7, 0x09fc, 0x0a0e, 0x0a2c, 0x0a44, 0x0a56, 0x0a7b, 0x0a93, + 0x0a9f, 0x0ac0, 0x0ae4, 0x0af9, 0x0b0b, 0x0b29, 0x0b60, 0x0b72, + 0x0bef, 0x0c07, 0x0c16, 0x0c38, 0x0c47, 0x0c7a, 0x0cdd, 0x0cfe, + 0x0d16, 0x0d25, 0x0d3a, 0x0d6b, 0x0d89, 0x0da7, 0x0dbf, 0x0df1, + 0x0dfd, 0x0e54, 0x0e63, 0x0e6f, 0x0e8d, 0x0e9c, 0x0eab, 0x0ec0, + 0x0ed8, 0x0ee7, 0x0ef9, 0x0f20, 0x0f3b, 0x0f53, 0x0f6b, 0x0fad, + // Entry 80 - BF + 0x0fcc, 0x0fee, 0x0ffd, 0x1037, 0x1058, 0x1067, 0x107c, 0x109b, + 0x10c2, 0x10dd, 0x10f5, 0x1107, 0x111f, 0x113d, 0x114f, 0x1161, + 0x1179, 0x118b, 0x11a0, 0x11c1, 0x11e9, 0x120a, 0x1244, 0x125f, + 0x126b, 0x1280, 0x1298, 0x12cd, 0x1311, 0x1335, 0x1350, 0x1371, + 0x1383, 0x1392, 0x13ad, 0x13bc, 0x13d4, 0x13e9, 0x140a, 0x141f, + 0x1447, 0x1456, 0x147b, 0x1493, 0x14ae, 0x14cf, 0x14db, 0x14ea, + 0x14f9, 0x1502, 0x1523, 0x1532, 0x1544, 0x1550, 0x157e, 0x15aa, + 0x15c8, 0x15e3, 0x15f8, 0x1640, 0x1680, 0x16a8, 0x16d9, 0x16fa, + // Entry C0 - FF + 0x1709, 0x171e, 0x172d, 0x176a, 0x1785, 0x179a, 0x17ac, 0x17bb, + 0x17d3, 0x17f2, 0x1829, 0x183e, 0x184d, 0x1865, 0x1883, 0x18a5, + 0x18c0, 0x1908, 0x1923, 0x193f, 0x195e, 0x1976, 0x198b, 0x19a0, + 0x19c2, 0x19fe, 0x1a23, 0x1a4e, 0x1a5d, 0x1a84, 0x1ac2, 0x1b1c, + 0x1b28, 0x1b60, 0x1b6c, 0x1b8a, 0x1bae, 0x1bc3, 0x1be8, 0x1c12, + 0x1c2d, 0x1c3f, 0x1c51, 0x1c8c, 0x1c9e, 0x1cb0, 0x1ccb, 0x1ce6, + 0x1cfb, 0x1d60, 0x1d75, 0x1d9a, 0x1dac, 0x1dcd, 0x1df5, 0x1e4d, + 0x1e68, 0x1eb8, 0x1f14, 0x1f2c, 0x1f41, 0x1f70, 0x1f7f, 0x1f91, + // Entry 100 - 13F + 0x1fa3, 0x1fb5, 0x1fdd, 0x1ff2, 0x200a, 0x2026, 0x2035, 0x204a, + 0x206f, 0x2097, 0x20a9, 0x20d1, 0x20f3, 0x2118, 0x213d, 0x215f, + 0x2190, 0x21a5, 0x21d3, 0x21ee, 0x220a, 0x2229, 0x2258, 0x227d, + 0x22a1, 0x22bc, 0x22f6, 0x230e, 0x231a, 0x2333, 0x2352, 0x2364, + 0x2386, 0x23a8, 0x23cd, 0x23cd, 0x23f8, }, }, { // os @@ -40018,51 +42154,88 @@ var regionHeaders = [252]header{ }, {}, // prg { // ps - "افغانستانالبانیهانګولاانتارکتیکااتریشبنګله\u200cدیشبلغاریهکاناډاسویسچینک" + - "ولمبیاکیوباالمانډنمارکالجزایرمصرهسپانیهحبشهفنلینډفرانسهبرتانیهګاناګ" + - "یانایونانګواتیمالاهانډوراسمجارستاناندونیزیاهندعراقآیسلینډایټالیهجمی" + - "کاجاپانکمبودیاکویټلاوسلبنانلایبریالیبیامراکشمغولستانمالیزیانایجیریا" + - "نکاراګواهالېنډناروۍنیپالنیوزیلنډپاکستانپولنډفلسطینپورتګالروسیهروندا" + - "سعودی عربستانسویډنسالوېډورسوریهتاجکستانتنزانیایوروګواییمن", - []uint16{ // 257 elements - // Entry 0 - 3F - 0x0000, 0x0000, 0x0000, 0x0000, 0x0012, 0x0012, 0x0012, 0x0020, - 0x0020, 0x002c, 0x0040, 0x0040, 0x0040, 0x004a, 0x004a, 0x004a, - 0x004a, 0x004a, 0x004a, 0x004a, 0x005d, 0x005d, 0x005d, 0x006b, - 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, - 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x006b, 0x0077, - 0x0077, 0x0077, 0x0077, 0x0077, 0x007f, 0x007f, 0x007f, 0x007f, - 0x007f, 0x0085, 0x0093, 0x0093, 0x0093, 0x009d, 0x009d, 0x009d, - 0x009d, 0x009d, 0x009d, 0x00a7, 0x00a7, 0x00a7, 0x00b3, 0x00b3, - // Entry 40 - 7F - 0x00b3, 0x00c1, 0x00c1, 0x00c1, 0x00c1, 0x00c7, 0x00c7, 0x00c7, - 0x00d5, 0x00dd, 0x00dd, 0x00dd, 0x00e9, 0x00e9, 0x00e9, 0x00e9, - 0x00e9, 0x00f5, 0x00f5, 0x0103, 0x0103, 0x0103, 0x0103, 0x0103, - 0x010b, 0x010b, 0x010b, 0x010b, 0x0115, 0x0115, 0x0115, 0x011f, - 0x011f, 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, 0x0141, - 0x0141, 0x0141, 0x0151, 0x0151, 0x0163, 0x0163, 0x0163, 0x0163, - 0x0169, 0x0169, 0x0171, 0x0171, 0x017f, 0x018d, 0x018d, 0x0197, - 0x0197, 0x01a1, 0x01a1, 0x01a1, 0x01af, 0x01af, 0x01af, 0x01af, - // Entry 80 - BF - 0x01af, 0x01af, 0x01b7, 0x01b7, 0x01b7, 0x01bf, 0x01c9, 0x01c9, - 0x01c9, 0x01c9, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01d7, 0x01e1, - 0x01eb, 0x01eb, 0x01eb, 0x01eb, 0x01eb, 0x01eb, 0x01eb, 0x01eb, - 0x01eb, 0x01eb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, - 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x0209, 0x0209, 0x0209, - 0x0209, 0x0209, 0x0209, 0x0219, 0x0229, 0x0235, 0x023f, 0x0249, - 0x0249, 0x0249, 0x0259, 0x0259, 0x0259, 0x0259, 0x0259, 0x0259, - 0x0259, 0x0267, 0x0271, 0x0271, 0x0271, 0x0271, 0x027d, 0x028b, - // Entry C0 - FF - 0x028b, 0x028b, 0x028b, 0x028b, 0x028b, 0x028b, 0x028b, 0x0295, - 0x029f, 0x02b8, 0x02b8, 0x02b8, 0x02b8, 0x02c2, 0x02c2, 0x02c2, - 0x02c2, 0x02c2, 0x02c2, 0x02c2, 0x02c2, 0x02c2, 0x02c2, 0x02c2, - 0x02c2, 0x02c2, 0x02d2, 0x02d2, 0x02dc, 0x02dc, 0x02dc, 0x02dc, - 0x02dc, 0x02dc, 0x02dc, 0x02dc, 0x02ec, 0x02ec, 0x02ec, 0x02ec, - 0x02ec, 0x02ec, 0x02ec, 0x02ec, 0x02ec, 0x02ec, 0x02fa, 0x02fa, - 0x02fa, 0x02fa, 0x02fa, 0x02fa, 0x030a, 0x030a, 0x030a, 0x030a, - 0x030a, 0x030a, 0x030a, 0x030a, 0x030a, 0x030a, 0x030a, 0x030a, - // Entry 100 - 13F - 0x0310, + "د توغندیو ټاپواندورامتحده عرب اماراتافغانستانانټيګوا او باربوداانګیلاالب" + + "انیهارمنستانانګولاانتارکتیکاارژنټاینامریکایی سمواتریشآسټرالیاآروباا" + + "لاند ټاپواناذربايجانبوسنيا او هېرزګويناباربادوسبنگله دېشبیلجیمبورکی" + + "نا فاسوبلغاریهبحرينبرونديبیننسینټ بارټیلیټیبرمودابرونيبولیویاکیریبی" + + "ن هالینډبرازیلباهامابهوټانبوویټ ټاپوبوتسوانهبیلاروسبلیزکاناډاکوکوز " + + "(کیبل) ټاپوګانېکانګو - کینشاساد مرکزي افریقا جمهوریتکانګو - بروزوییل" + + "سویسد عاج ساحلکوک ټاپوګانچیليکامرونچینکولمبیاد کلپرټون ټاپوکوستاریک" + + "اکیوباکیپ وردکوکوکاد کریساس ټاپوقبرسچکیاالمانډایګو ګارسیاجی بوتيډنم" + + "ارکدومینیکادومینیکن جمهوريتالجزایرسئوتا او مالایااکوادوراستونیامصرل" + + "ویدیځ صحرااریترههسپانیهحبشهاروپايي اتحاديهاروپاسيمهفنلینډفي جيفوکلن" + + "ډ ټاپومیکرونیزیافارو ټاپوفرانسهګابنبرتانیهګرناداگورجستانفرانسوي ګان" + + "اګرنسيګاناجبل الطارقګرینلینډګامبیاګینهګالډیپاستوایی ګینهیونانسویل ج" + + "ورجیا او جنوبي سینڈوچ ټاپوګواتیمالاګوامګینه بیسوګیاناهانګ کانګ SAR " + + "چینHMهانډوراسکرواثیاهایټيمجارستاند کانري ټاپواندونیزیاایرلینډاسرايي" + + "لد آئل آف مینهندد هند سمندر سمندر سیمهعراقايرانآیسلینډایټالیهجرسیجم" + + "یکااردنجاپانکینیاقرغزستانکمبودیاکیري باتيکوموروسسینټ کټس او نیویسشم" + + "الی کوریاسویلي کوریاکویټکیمان ټاپوګانقزاقستانلاووسلېبنانسینټ لوسیال" + + "یختن اشتاینسريلانکالایبریالسوتولیتوانیالوګزامبورګلتونيلیبیامراکشمون" + + "اکومولدوامونټینیګروسینټ مارټنمدګاسکارمارشال ټاپومقدونیهماليميانامار" + + " (برما)مغولستانمکا سار چینشمالي ماریانا ټاپومارټینیکموریتانیامانټیسی" + + "رتمالتاموریشیسمالديپمالاويمیکسیکومالیزیاموزمبیکنیمبیانوی کالیډونیان" + + "یجرنارفولک ټاپوګاننایجیریانکاراګواهالېنډناروۍنیپالنایرونیوونیوزیلنډ" + + "عمانپاناماپیروفرانسوي پولینیاپاپ نيو ګيني، د يو هېواد نوم دېفلپينپا" + + "کستانپولنډسینټ پییر او میکولونپیټکیرن ټاپوپورتو ریکوفلسطين سيمېپورت" + + "ګالپلوپاراګویقطربهرنی آسیاریونینرومانیاصربیاروسیهرونداسعودي عربستان" + + "سلیمان ټاپوسیچیلیسسوډانسویډنسينگاپورسینټ هیلیناسلوانیاسلواډر او جان" + + " میینسلواکیاسییرا لیونسان مارینوسنګالسومالیاسورینامجنوبي سوډانساو ټی" + + "م او پرنسیپسالوېډورسینټ مارټینسوریهسوازیلینډتریستان دا کنهاد ترکیې " + + "او کیکاسو ټاپوچاډد فرانسې جنوبي سیمېتللتهايلنډتاجيکستانتوکیلوتيمور-" + + "ليسټتورکمنستانتونستونګاتورکيهټرینیاډډ او ټوبوګتوالیوتیوانتنزانیااوک" + + "راینیوګانډاد متحده ایالاتو ټاپو ټاپوګانېملگري ملتونهمتحده ایالاتیور" + + "وګویاوزبکستانواتیکان ښارسینټ ویسنټینټ او ګرینډینزوینزویلابریتانوی و" + + "یګور ټاپود متحده ایالاتو ویګور ټاپووېتنامواناتووالیس او فوتوناساموا" + + "کوسوویمنمیټوتسویلي افریقازیمبیازیمبابویناپېژندلې سيمهنړۍافريقاشمالی" + + " امریکاجنوبی امریکهسمندريهلویدیځ افریقامنخنۍ امريکاختیځ افریقاشمالي " + + "افریقامنځنۍ افریقاجنوبي افریقاامريکاشمالي امریکاکیریبینختیځ آسیاسهی" + + "ل آسیاسویل ختیځ آسیاجنوبي اروپاآسترالیاملانشیاد مایکرونیسینین سیمهپ" + + "ولینیااسيامنځنۍ اسیالویدیځ آسیااروپاختيځه اروپاشمالي اروپالویدیځه ا" + + "روپالاتیني امریکا", + []uint16{ // 293 elements + // Entry 0 - 3F + 0x0000, 0x001a, 0x0026, 0x0044, 0x0056, 0x0078, 0x0084, 0x0092, + 0x00a2, 0x00ae, 0x00c2, 0x00d2, 0x00e9, 0x00f3, 0x0103, 0x010d, + 0x0124, 0x0136, 0x015a, 0x016a, 0x017b, 0x0187, 0x019e, 0x01ac, + 0x01b6, 0x01c2, 0x01ca, 0x01e5, 0x01f1, 0x01fb, 0x0209, 0x0224, + 0x0230, 0x023c, 0x0248, 0x025b, 0x026b, 0x0279, 0x0281, 0x028d, + 0x02b3, 0x02ce, 0x02f7, 0x0314, 0x031c, 0x032e, 0x0343, 0x034b, + 0x0357, 0x035d, 0x036b, 0x0385, 0x0397, 0x03a1, 0x03ae, 0x03ba, + 0x03d2, 0x03da, 0x03e2, 0x03ec, 0x0403, 0x0410, 0x041c, 0x042c, + // Entry 40 - 7F + 0x044b, 0x0459, 0x0475, 0x0483, 0x0491, 0x0497, 0x04ac, 0x04b8, + 0x04c6, 0x04ce, 0x04eb, 0x04fd, 0x0509, 0x0512, 0x0527, 0x053b, + 0x054c, 0x0558, 0x0560, 0x056e, 0x057a, 0x058a, 0x05a1, 0x05ab, + 0x05b3, 0x05c6, 0x05d6, 0x05e2, 0x05ea, 0x05f6, 0x060d, 0x0617, + 0x0652, 0x0664, 0x066c, 0x067d, 0x0687, 0x06a3, 0x06a5, 0x06b5, + 0x06c3, 0x06cd, 0x06dd, 0x06f3, 0x0705, 0x0713, 0x0721, 0x0736, + 0x073c, 0x0764, 0x076c, 0x0776, 0x0784, 0x0792, 0x079a, 0x07a4, + 0x07ac, 0x07b6, 0x07c0, 0x07d0, 0x07de, 0x07ef, 0x07fd, 0x081c, + // Entry 80 - BF + 0x0831, 0x0846, 0x084e, 0x0867, 0x0877, 0x0881, 0x088d, 0x08a0, + 0x08b7, 0x08c7, 0x08d5, 0x08df, 0x08ef, 0x0903, 0x090d, 0x0917, + 0x0921, 0x092d, 0x0939, 0x094d, 0x0960, 0x0970, 0x0985, 0x0993, + 0x099b, 0x09b6, 0x09c6, 0x09da, 0x09fc, 0x0a0c, 0x0a1e, 0x0a30, + 0x0a3a, 0x0a48, 0x0a54, 0x0a60, 0x0a6e, 0x0a7c, 0x0a8a, 0x0a96, + 0x0aaf, 0x0ab7, 0x0ad4, 0x0ae4, 0x0af4, 0x0b00, 0x0b0a, 0x0b14, + 0x0b1e, 0x0b26, 0x0b36, 0x0b3e, 0x0b4a, 0x0b52, 0x0b6f, 0x0ba6, + 0x0bb0, 0x0bbe, 0x0bc8, 0x0bed, 0x0c04, 0x0c17, 0x0c2c, 0x0c3a, + // Entry C0 - FF + 0x0c40, 0x0c4e, 0x0c54, 0x0c67, 0x0c73, 0x0c81, 0x0c8b, 0x0c95, + 0x0c9f, 0x0cb8, 0x0ccd, 0x0cdb, 0x0ce5, 0x0cef, 0x0cff, 0x0d14, + 0x0d22, 0x0d43, 0x0d51, 0x0d64, 0x0d77, 0x0d81, 0x0d8f, 0x0d9d, + 0x0db2, 0x0dd1, 0x0de1, 0x0df6, 0x0e00, 0x0e12, 0x0e2e, 0x0e56, + 0x0e5c, 0x0e7f, 0x0e85, 0x0e93, 0x0ea5, 0x0eb1, 0x0ec4, 0x0ed8, + 0x0ee0, 0x0eea, 0x0ef6, 0x0f16, 0x0f22, 0x0f2c, 0x0f3a, 0x0f48, + 0x0f56, 0x0f8c, 0x0fa3, 0x0fba, 0x0fc8, 0x0fda, 0x0fef, 0x101e, + 0x102e, 0x1052, 0x1082, 0x108e, 0x109a, 0x10b6, 0x10c0, 0x10ca, + // Entry 100 - 13F + 0x10d0, 0x10da, 0x10f1, 0x10fd, 0x110d, 0x1128, 0x112e, 0x113a, + 0x1151, 0x1168, 0x1176, 0x118f, 0x11a6, 0x11bb, 0x11d2, 0x11e9, + 0x1200, 0x120c, 0x1223, 0x1231, 0x1242, 0x1253, 0x126d, 0x1282, + 0x1292, 0x12a0, 0x12c6, 0x12d4, 0x12dc, 0x12ef, 0x1304, 0x130e, + 0x1323, 0x1338, 0x1351, 0x1351, 0x136a, }, }, { // pt @@ -40145,90 +42318,90 @@ var regionHeaders = [252]header{ "eniaAngolaAntarcticaArgentiniaSamoa AmericanaAustriaAustraliaArubaIn" + "slas AlandAserbaidschanBosnia ed ErzegovinaBarbadosBangladeschBelgia" + "Burkina FasoBulgariaBahrainBurundiBeninSon BarthélemyBermudasBruneiB" + - "oliviaBrasilaBahamasBhutanInsla BouvetBotswanaBielorussiaBelizeCanad" + - "aInslas CocosRepublica Democratica dal CongoRepublica Centralafrican" + - "aCongoSvizraCosta d’IvurInslas CookChileCamerunChinaColumbiaCosta Ri" + - "caCubaCap VerdInsla da ChristmasCipraRepublica TschecaGermaniaDschib" + - "utiDanemarcDominicaRepublica DominicanaAlgeriaEcuadorEstoniaEgiptaSa" + - "hara OccidentalaEritreaSpagnaEtiopiaUniun europeicaFinlandaFidschiIn" + - "slas dal FalklandMicronesiaInslas FeroeFrantschaGabunReginavel UnìGr" + - "enadaGeorgiaGuyana FranzosaGuernseyGhanaGibraltarGrönlandaGambiaGuin" + - "eaGuadeloupeGuinea EquatorialaGreziaGeorgia dal Sid e las Inslas San" + - "dwich dal SidGuatemalaGuamGuinea-BissauGuyanaRegiun d’administraziun" + - " speziala da Hongkong, ChinaInslas da Heard e da McDonladHondurasCro" + - "aziaHaitiUngariaIndonesiaIrlandaIsraelInsla da ManIndiaTerritori Bri" + - "tannic en l’Ocean IndicIracIranIslandaItaliaJerseyGiamaicaJordaniaGi" + - "apunKeniaKirghisistanCambodschaKiribatiComorasSaint Kitts e NevisCor" + - "ea dal NordCorea dal SidKuwaitInslas CaymanKasachstanLaosLibanonSain" + - "t LuciaLiechtensteinSri LankaLiberiaLesothoLituaniaLuxemburgLettonia" + - "LibiaMarocMonacoMoldaviaMontenegroSaint MartinMadagascarInslas da Ma" + - "rshallMacedoniaMaliMyanmarMongoliaRegiun d’administraziun speziala M" + - "acao, ChinaInslas Mariannas dal NordMartiniqueMauretaniaMontserratMa" + - "ltaMauritiusMaldivasMalawiMexicoMalaisiaMosambicNamibiaNova Caledoni" + - "aNigerInsla NorfolkNigeriaNicaraguaPajais BassNorvegiaNepalNauruNiue" + - "Nova ZelandaOmanPanamaPeruPolinesia FranzosaPapua Nova GuineaFilippi" + - "nasPakistanPolognaSaint Pierre e MiquelonPitcairnPuerto RicoTerritor" + - "i PalestinaisPortugalPalauParaguaiKatarOceania PerifericaRéunionRume" + - "niaSerbiaRussiaRuandaArabia SauditaSalomonasSeychellasSudanSveziaSin" + - "gapurSontg’ElenaSloveniaSvalbard e Jan MayenSlovachiaSierra LeoneSan" + - " MarinoSenegalSomaliaSurinamSão Tomé e PrincipeEl SalvadorSiriaSwazi" + - "landInslas Turks e CaicosTschadTerritoris Franzos MeridiunalsTogoTai" + - "landaTadschikistanTokelauTimor da l’OstTurkmenistanTunesiaTongaTirch" + - "iaTrinidad e TobagoTuvaluTaiwanTansaniaUcrainaUgandaInslas pitschnas" + - " perifericas dals Stadis Unids da l’AmericaStadis Unids da l’America" + - "UruguayUsbekistanCitad dal VaticanSaint Vincent e las GrenadinasVene" + - "zuelaInslas Verginas BritannicasInslas Verginas AmericanasVietnamVan" + - "uatuWallis e FutunaSamoaJemenMayotteAfrica dal SidSambiaSimbabweRegi" + - "un betg encouschenta u nunvalaivlamundAfricaAmerica dal NordAmerica " + - "dal SidOceaniaAfrica dal VestAmerica CentralaAfrica da l’OstAfrica d" + - "al NordAfrica CentralaAfrica MeridiunalaAmerica dal Nord, America Ce" + - "ntrala ed America dal SidCaribicaAsia da l’OstAsia dal SidAsia dal S" + - "idostEuropa dal SidAustralia e Nova ZelandaMelanesiaRegiun Micronesi" + - "caPolinesiaAsiaAsia CentralaAsia dal VestEuropaEuropa OrientalaEurop" + - "a dal NordEuropa dal VestAmerica Latina", - []uint16{ // 292 elements + "oliviaBrasiliaBahamasBhutanInsla BouvetBotswanaBielorussiaBelizeCana" + + "daInslas CocosRepublica Democratica dal CongoRepublica Centralafrica" + + "naCongoSvizraCosta d’IvurInslas CookChileCamerunChinaColumbiaCosta R" + + "icaCubaCap VerdInsla da ChristmasCipraRepublica TschecaGermaniaDschi" + + "butiDanemarcDominicaRepublica DominicanaAlgeriaEcuadorEstoniaEgiptaS" + + "ahara OccidentalaEritreaSpagnaEtiopiaUniun europeicaFinlandaFidschiI" + + "nslas dal FalklandMicronesiaInslas FeroeFrantschaGabunReginavel UnìG" + + "renadaGeorgiaGuyana FranzosaGuernseyGhanaGibraltarGrönlandaGambiaGui" + + "neaGuadeloupeGuinea EquatorialaGreziaGeorgia dal Sid e las Inslas Sa" + + "ndwich dal SidGuatemalaGuamGuinea-BissauGuyanaRegiun d’administraziu" + + "n speziala da Hongkong, ChinaInslas da Heard e da McDonaldHondurasCr" + + "oaziaHaitiUngariaIndonesiaIrlandaIsraelInsla da ManIndiaTerritori Br" + + "itannic en l’Ocean IndicIracIranIslandaItaliaJerseyGiamaicaJordaniaG" + + "iapunKeniaKirghisistanCambodschaKiribatiComorasSaint Kitts e NevisCo" + + "rea dal NordCorea dal SidKuwaitInslas CaymanKasachstanLaosLibanonSai" + + "nt LuciaLiechtensteinSri LankaLiberiaLesothoLituaniaLuxemburgLettoni" + + "aLibiaMarocMonacoMoldaviaMontenegroSaint MartinMadagascarInslas da M" + + "arshallMacedoniaMaliMyanmarMongoliaRegiun d’administraziun speziala " + + "Macao, ChinaInslas Mariannas dal NordMartiniqueMauretaniaMontserratM" + + "altaMauritiusMaldivasMalawiMexicoMalaisiaMosambicNamibiaNova Caledon" + + "iaNigerInsla NorfolkNigeriaNicaraguaPajais BassNorvegiaNepalNauruNiu" + + "eNova ZelandaOmanPanamaPeruPolinesia FranzosaPapua Nova GuineaFilipp" + + "inasPakistanPolognaSaint Pierre e MiquelonPitcairnPuerto RicoTerrito" + + "ri PalestinaisPortugalPalauParaguaiKatarOceania PerifericaRéunionRum" + + "eniaSerbiaRussiaRuandaArabia SauditaSalomonasSeychellasSudanSveziaSi" + + "ngapurSontg’ElenaSloveniaSvalbard e Jan MayenSlovachiaSierra LeoneSa" + + "n MarinoSenegalSomaliaSurinamSão Tomé e PrincipeEl SalvadorSiriaSwaz" + + "ilandInslas Turks e CaicosTschadTerritoris Franzos MeridiunalsTogoTa" + + "ilandaTadschikistanTokelauTimor da l’OstTurkmenistanTunesiaTongaTirc" + + "hiaTrinidad e TobagoTuvaluTaiwanTansaniaUcrainaUgandaInslas pitschna" + + "s perifericas dals Stadis Unids da l’AmericaStadis Unids da l’Americ" + + "aUruguayUsbekistanCitad dal VaticanSaint Vincent e las GrenadinasVen" + + "ezuelaInslas Virginas BritannicasInslas Virginas AmericanasVietnamVa" + + "nuatuWallis e FutunaSamoaJemenMayotteAfrica dal SidSambiaSimbabweReg" + + "iun betg encouschenta u nunvalaivlamundAfricaAmerica dal NordAmerica" + + " dal SidOceaniaAfrica dal VestAmerica CentralaAfrica da l’OstAfrica " + + "dal NordAfrica CentralaAfrica MeridiunalaAmerica dal Nord, America C" + + "entrala ed America dal SidCaribicaAsia da l’OstAsia dal SidAsia dal " + + "SidostEuropa dal SidAustralia e Nova ZelandaMelanesiaRegiun Micrones" + + "icaPolinesiaAsiaAsia CentralaAsia dal VestEuropaEuropa OrientalaEuro" + + "pa dal NordEuropa dal VestAmerica Latina", + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0007, 0x001a, 0x0025, 0x0036, 0x003e, 0x0045, 0x004c, 0x0052, 0x005c, 0x0066, 0x0075, 0x007c, 0x0085, 0x008a, 0x0096, 0x00a3, 0x00b7, 0x00bf, 0x00ca, 0x00d0, 0x00dc, 0x00e4, 0x00eb, 0x00f2, 0x00f7, 0x0106, 0x010e, 0x0114, 0x011b, 0x011b, - 0x0122, 0x0129, 0x012f, 0x013b, 0x0143, 0x014e, 0x0154, 0x015a, - 0x0166, 0x0185, 0x019e, 0x01a3, 0x01a9, 0x01b7, 0x01c2, 0x01c7, - 0x01ce, 0x01d3, 0x01db, 0x01db, 0x01e5, 0x01e9, 0x01f1, 0x01f1, - 0x0203, 0x0208, 0x0219, 0x0221, 0x0221, 0x022a, 0x0232, 0x023a, - // Entry 40 - 7F - 0x024e, 0x0255, 0x0255, 0x025c, 0x0263, 0x0269, 0x027b, 0x0282, - 0x0288, 0x028f, 0x029e, 0x029e, 0x02a6, 0x02ad, 0x02c0, 0x02ca, - 0x02d6, 0x02df, 0x02e4, 0x02f2, 0x02f9, 0x0300, 0x030f, 0x0317, - 0x031c, 0x0325, 0x032f, 0x0335, 0x033b, 0x0345, 0x0357, 0x035d, - 0x038a, 0x0393, 0x0397, 0x03a4, 0x03aa, 0x03df, 0x03fc, 0x0404, - 0x040b, 0x0410, 0x0417, 0x0417, 0x0420, 0x0427, 0x042d, 0x0439, - 0x043e, 0x0464, 0x0468, 0x046c, 0x0473, 0x0479, 0x047f, 0x0487, - 0x048f, 0x0495, 0x049a, 0x04a6, 0x04b0, 0x04b8, 0x04bf, 0x04d2, - // Entry 80 - BF - 0x04e0, 0x04ed, 0x04f3, 0x0500, 0x050a, 0x050e, 0x0515, 0x0520, - 0x052d, 0x0536, 0x053d, 0x0544, 0x054c, 0x0555, 0x055d, 0x0562, - 0x0567, 0x056d, 0x0575, 0x057f, 0x058b, 0x0595, 0x05a7, 0x05b0, - 0x05b4, 0x05bb, 0x05c3, 0x05f2, 0x060b, 0x0615, 0x061f, 0x0629, - 0x062e, 0x0637, 0x063f, 0x0645, 0x064b, 0x0653, 0x065b, 0x0662, - 0x0670, 0x0675, 0x0682, 0x0689, 0x0692, 0x069d, 0x06a5, 0x06aa, - 0x06af, 0x06b3, 0x06bf, 0x06c3, 0x06c9, 0x06cd, 0x06df, 0x06f0, - 0x06fa, 0x0702, 0x0709, 0x0720, 0x0728, 0x0733, 0x0748, 0x0750, - // Entry C0 - FF - 0x0755, 0x075d, 0x0762, 0x0774, 0x077c, 0x0783, 0x0789, 0x078f, - 0x0795, 0x07a3, 0x07ac, 0x07b6, 0x07bb, 0x07c1, 0x07c9, 0x07d6, - 0x07de, 0x07f2, 0x07fb, 0x0807, 0x0811, 0x0818, 0x081f, 0x0826, - 0x0826, 0x083b, 0x0846, 0x0846, 0x084b, 0x0854, 0x0854, 0x0869, - 0x086f, 0x088d, 0x0891, 0x0899, 0x08a6, 0x08ad, 0x08bd, 0x08c9, - 0x08d0, 0x08d5, 0x08dc, 0x08ed, 0x08f3, 0x08f9, 0x0901, 0x0908, - 0x090e, 0x094b, 0x094b, 0x0966, 0x096d, 0x0977, 0x0988, 0x09a6, - 0x09af, 0x09ca, 0x09e4, 0x09eb, 0x09f2, 0x0a01, 0x0a06, 0x0a06, - // Entry 100 - 13F - 0x0a0b, 0x0a12, 0x0a20, 0x0a26, 0x0a2e, 0x0a54, 0x0a58, 0x0a5e, - 0x0a6e, 0x0a7d, 0x0a84, 0x0a93, 0x0aa3, 0x0ab4, 0x0ac3, 0x0ad2, - 0x0ae4, 0x0b19, 0x0b19, 0x0b21, 0x0b30, 0x0b3c, 0x0b4b, 0x0b59, - 0x0b71, 0x0b7a, 0x0b8c, 0x0b95, 0x0b99, 0x0ba6, 0x0bb3, 0x0bb9, - 0x0bc9, 0x0bd8, 0x0be7, 0x0bf5, + 0x0123, 0x012a, 0x0130, 0x013c, 0x0144, 0x014f, 0x0155, 0x015b, + 0x0167, 0x0186, 0x019f, 0x01a4, 0x01aa, 0x01b8, 0x01c3, 0x01c8, + 0x01cf, 0x01d4, 0x01dc, 0x01dc, 0x01e6, 0x01ea, 0x01f2, 0x01f2, + 0x0204, 0x0209, 0x021a, 0x0222, 0x0222, 0x022b, 0x0233, 0x023b, + // Entry 40 - 7F + 0x024f, 0x0256, 0x0256, 0x025d, 0x0264, 0x026a, 0x027c, 0x0283, + 0x0289, 0x0290, 0x029f, 0x029f, 0x02a7, 0x02ae, 0x02c1, 0x02cb, + 0x02d7, 0x02e0, 0x02e5, 0x02f3, 0x02fa, 0x0301, 0x0310, 0x0318, + 0x031d, 0x0326, 0x0330, 0x0336, 0x033c, 0x0346, 0x0358, 0x035e, + 0x038b, 0x0394, 0x0398, 0x03a5, 0x03ab, 0x03e0, 0x03fd, 0x0405, + 0x040c, 0x0411, 0x0418, 0x0418, 0x0421, 0x0428, 0x042e, 0x043a, + 0x043f, 0x0465, 0x0469, 0x046d, 0x0474, 0x047a, 0x0480, 0x0488, + 0x0490, 0x0496, 0x049b, 0x04a7, 0x04b1, 0x04b9, 0x04c0, 0x04d3, + // Entry 80 - BF + 0x04e1, 0x04ee, 0x04f4, 0x0501, 0x050b, 0x050f, 0x0516, 0x0521, + 0x052e, 0x0537, 0x053e, 0x0545, 0x054d, 0x0556, 0x055e, 0x0563, + 0x0568, 0x056e, 0x0576, 0x0580, 0x058c, 0x0596, 0x05a8, 0x05b1, + 0x05b5, 0x05bc, 0x05c4, 0x05f3, 0x060c, 0x0616, 0x0620, 0x062a, + 0x062f, 0x0638, 0x0640, 0x0646, 0x064c, 0x0654, 0x065c, 0x0663, + 0x0671, 0x0676, 0x0683, 0x068a, 0x0693, 0x069e, 0x06a6, 0x06ab, + 0x06b0, 0x06b4, 0x06c0, 0x06c4, 0x06ca, 0x06ce, 0x06e0, 0x06f1, + 0x06fb, 0x0703, 0x070a, 0x0721, 0x0729, 0x0734, 0x0749, 0x0751, + // Entry C0 - FF + 0x0756, 0x075e, 0x0763, 0x0775, 0x077d, 0x0784, 0x078a, 0x0790, + 0x0796, 0x07a4, 0x07ad, 0x07b7, 0x07bc, 0x07c2, 0x07ca, 0x07d7, + 0x07df, 0x07f3, 0x07fc, 0x0808, 0x0812, 0x0819, 0x0820, 0x0827, + 0x0827, 0x083c, 0x0847, 0x0847, 0x084c, 0x0855, 0x0855, 0x086a, + 0x0870, 0x088e, 0x0892, 0x089a, 0x08a7, 0x08ae, 0x08be, 0x08ca, + 0x08d1, 0x08d6, 0x08dd, 0x08ee, 0x08f4, 0x08fa, 0x0902, 0x0909, + 0x090f, 0x094c, 0x094c, 0x0967, 0x096e, 0x0978, 0x0989, 0x09a7, + 0x09b0, 0x09cb, 0x09e5, 0x09ec, 0x09f3, 0x0a02, 0x0a07, 0x0a07, + // Entry 100 - 13F + 0x0a0c, 0x0a13, 0x0a21, 0x0a27, 0x0a2f, 0x0a55, 0x0a59, 0x0a5f, + 0x0a6f, 0x0a7e, 0x0a85, 0x0a94, 0x0aa4, 0x0ab5, 0x0ac4, 0x0ad3, + 0x0ae5, 0x0b1a, 0x0b1a, 0x0b22, 0x0b31, 0x0b3d, 0x0b4c, 0x0b5a, + 0x0b72, 0x0b7b, 0x0b8d, 0x0b96, 0x0b9a, 0x0ba7, 0x0bb4, 0x0bba, + 0x0bca, 0x0bd9, 0x0be8, 0x0be8, 0x0bf6, }, }, { // rn @@ -40420,9 +42593,9 @@ var regionHeaders = [252]header{ ruRegionIdx, }, { // ru-UA - "О-в ВознесенияОбъединенные Арабские ЭмиратыО-в БувеЦентрально-Африканска" + - "я РеспубликаО-ва КукаО-в КлиппертонО-в РождестваО-ва Херд и Макдона" + - "льдО-в НорфолкТимор-ЛестеМалые Тихоокеанские Отдаленные Острова США", + "О-в ВознесенияОбъединенные Арабские ЭмиратыО-в БувеО-ва КукаО-в Клипперт" + + "онО-в РождестваО-ва Херд и МакдональдО-в НорфолкТимор-ЛестеМалые Ти" + + "хоокеанские Отдаленные Острова США", []uint16{ // 242 elements // Entry 0 - 3F 0x0000, 0x001a, 0x001a, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, @@ -40430,39 +42603,39 @@ var regionHeaders = [252]header{ 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, - 0x0060, 0x0060, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00b0, 0x00b0, - 0x00b0, 0x00b0, 0x00b0, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, - 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, + 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0070, 0x0070, + 0x0070, 0x0070, 0x0070, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, + 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, // Entry 40 - 7F - 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, - 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, - 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, - 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, - 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x00e2, 0x010a, 0x010a, - 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, - 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, - 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, - // Entry 80 - BF - 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, - 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, - 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, - 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, - 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, - 0x010a, 0x010a, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, - 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, - 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, + 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, + 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, + 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, + 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, + 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00ca, 0x00ca, + 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, + 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, + 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, + // Entry 80 - BF + 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, + 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, + 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, + 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, + 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, + 0x00ca, 0x00ca, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, // Entry C0 - FF - 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, - 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, - 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, - 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, - 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x011e, 0x0133, 0x0133, - 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, 0x0133, - 0x0133, 0x0183, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, 0x00f3, 0x00f3, + 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, 0x00f3, + 0x00f3, 0x0143, }, }, { // rw - "RwandaIgitonga", + "U RwandaTonga", []uint16{ // 234 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -40493,11 +42666,11 @@ var regionHeaders = [252]header{ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // Entry C0 - FF 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, - 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, - 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, - 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, - 0x0006, 0x000e, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x000d, }, }, { // rwk @@ -40769,6 +42942,89 @@ var regionHeaders = [252]header{ 0x08e9, 0x08ef, 0x08fd, 0x0904, 0x090c, }, }, + { // sd + "طلوع ٻيٽاندورامتحده عرب اماراتافغانستانانٽيگئا و بربوداانگويلاالبانياارم" + + "ینیاانگولاانٽارڪٽيڪاارجنٽيناآمريڪي سامواآشٽرياآسٽريلياعروباالند ٻيٽ" + + "آذربائيجانبوسنیا اور هرزیگویناباربڊوسبنگلاديشآسٽريابرڪينا فاسوبلغار" + + "يابحرينبرونڊيبيننسینٽ برٿلیمیبرمودابرونائيبوليوياڪيريبين نيدرلينڊبر" + + "ازيلبهاماسڀوٽانبووٽ ٻيٽبوٽسوانابیلارسبيليزڪئناڊاڪوڪوس ٻيٽڪانگو -ڪنش" + + "اساوچ آفريقي جمهوريهڪانگو - برازاویلسئيٽرزلينڊآئيوري ڪناروڪوڪ ٻيٽچل" + + "يڪيمرونچينڪولمبياڪلپرٽن ٻيٽڪوسٽا رڪاڪيوباڪيپ ورديڪيوراسائوڪرسمس ٻيٽ" + + "سائپرسچيڪياجرمنيڊئيگو گارسياڊجبيوتيڊينمارڪڊومينيڪاڊومينيڪن جمهوريها" + + "لجيرياسیوٽا ۽ میلیلاايڪواڊورايسٽونيامصراولهه صحاراايريٽيريااسپينايٿ" + + "وپيايورپين يونينيورو زونفن لينڊفجيفاڪ لينڊ ٻيٽمائڪرونيشيافارو ٻيٽفر" + + "انسگبونبرطانيهگرينڊاجارجيافرانسيسي گياناگورنسيگهاناجبرالٽرگرين لينڊ" + + "گيمبياگنيگواڊیلوپايڪوٽوريل گائينايونانڏکڻ جارجيا ۽ ڏکڻ سينڊوچ ٻيٽگو" + + "ئٽي مالاگوامگني بسائوگياناهانگ ڪانگهرڊ ۽ مڪڊونلڊ ٻيٽهنڊورسڪروئيشياه" + + "يٽيچيڪ جهموريهڪينري ٻيٽانڊونيشياآئرلينڊاسرائيلانسانن جو ٻيٽانڊيابرط" + + "انوي هندي سمنڊ خطوعراقايرانآئس لينڊاٽليجرسيجميڪااردنجاپانڪينياڪرغست" + + "انڪمبوڊياڪرباتيڪوموروسسينٽ ڪٽس و نيوساتر ڪورياڏکڻ ڪورياڪويتڪي مين ٻ" + + "يٽقازقستانلائوسلبنانسينٽ لوسيالچي ٽينسٽينسري لنڪالائبیریاليسوٿولٿون" + + "يالیگزمبرگلاتويالبياموروڪوموناڪومالدووامونٽي نيگروسينٽ مارٽنمداگيسڪ" + + "رمارشل ڀيٽميسي ڊونياماليميانمار (برما)منگوليامڪائواتر مرينا ٻيٽمارت" + + "ينڪموريتانيامونٽسراٽمالٽاموريشسمالديپمالاويميڪسيڪوملائيشياموزمبیقني" + + "ميبيانیو ڪالیڊونیانائيجرنورفوڪ ٻيٽنائيجيريانڪراگوانيدرلينڊناروينيپا" + + "لنائورونووينيو زيلينڊعمانپناماپيروفرانسيسي پولينيشياپاپوا نیو گنيفل" + + "پائنپاڪستانپولينڊسینٽ پیئر و میڪوئیلونپٽڪئرن ٻيٽپيوئرٽو ريڪوفلسطینی" + + "پرتگالپلائوپيراگوءِقطربيروني سامونڊيري يونينرومانياسربياروسروانڊاسع" + + "ودی عربسولومون ٻيٽَشي شلزسوڊانسوئيڊنسينگاپورسينٽ ھيليناسلوینیاسوالب" + + "ارڊ ۽ جان ماینسلوواڪياسيرا ليونسین مرینوسينيگالسومالياسورينامڏکڻ سو" + + "ڊانسائو ٽوم ۽ پرنسپیيال سلواڊورسنٽ مارٽنشامسوازيلينڊٽرسٽن دا ڪوهاتر" + + "ڪ ۽ ڪيڪوس ٻيٽچاڊفرانسيسي ڏاکڻي علائقاتوگوٿائيليندتاجڪستانٽوڪلائوتيم" + + "ور ليستيترڪمانستانتيونيسياٽونگاترڪيٽريني ڊيڊ ۽ ٽوباگو ٻيٽتوالوتائیو" + + "انتنزانيايوڪرينيوگنڊاآمريڪي ٻاهريون ٻيٽاقوام متحدهآمريڪا جون گڏيل ر" + + "ياستونيوروگوءِازبڪستانويٽڪين سٽيسینٽ ونسنت ۽ گریناڊینزوينزيلابرطانو" + + "ي ورجن ٻيٽآمريڪي ورجن ٻيٽويتناموينيٽيووالس ۽ فتوناسموئاڪوسووويمنميا" + + "تيڏکڻ آفريقازيمبيازمبابوياڻڄاتل خطودنياآفريڪااتر آمريڪاڏکڻ آمريڪاسا" + + "مونڊياولهه آفريقاوچ آمريڪااوڀر آفريڪااترين آفريڪاوچ آفريڪاڏاکڻي آمر" + + "يڪااترين آمريڪاڪيريبيناوڀر ايشياڏکڻ ايشياڏکڻ اوڀر ايشياڏکڻ يورپآسٽر" + + "یلیشیامیلانیشیامائکرونیشیائيپولینیشیاايشياوچ ايشيااولهه ايشيايورپاو" + + "ڀر يورپاترين يورپاولهندي يورپلاطيني آمريڪا", + []uint16{ // 293 elements + // Entry 0 - 3F + 0x0000, 0x000f, 0x001b, 0x0039, 0x004b, 0x0069, 0x0077, 0x0085, + 0x0093, 0x009f, 0x00b3, 0x00c3, 0x00da, 0x00e6, 0x00f6, 0x0100, + 0x010f, 0x0123, 0x0149, 0x0157, 0x0167, 0x0173, 0x0188, 0x0196, + 0x01a0, 0x01ac, 0x01b4, 0x01cb, 0x01d7, 0x01e5, 0x01f3, 0x0212, + 0x021e, 0x022a, 0x0234, 0x0243, 0x0253, 0x025f, 0x0269, 0x0275, + 0x0286, 0x029e, 0x02be, 0x02db, 0x02ef, 0x0306, 0x0313, 0x0319, + 0x0325, 0x032b, 0x0339, 0x034c, 0x035d, 0x0367, 0x0376, 0x0388, + 0x0399, 0x03a5, 0x03af, 0x03b9, 0x03d0, 0x03de, 0x03ec, 0x03fc, + // Entry 40 - 7F + 0x041b, 0x0429, 0x0443, 0x0453, 0x0463, 0x0469, 0x047e, 0x0490, + 0x049a, 0x04a8, 0x04bf, 0x04ce, 0x04db, 0x04e1, 0x04f7, 0x050d, + 0x051c, 0x0526, 0x052e, 0x053c, 0x0548, 0x0554, 0x056f, 0x057b, + 0x0585, 0x0593, 0x05a4, 0x05b0, 0x05b6, 0x05c6, 0x05e5, 0x05ef, + 0x0620, 0x0633, 0x063b, 0x064c, 0x0656, 0x0667, 0x0686, 0x0692, + 0x06a2, 0x06aa, 0x06bf, 0x06d0, 0x06e2, 0x06f0, 0x06fe, 0x0716, + 0x0720, 0x0747, 0x074f, 0x0759, 0x0768, 0x0770, 0x0778, 0x0782, + 0x078a, 0x0794, 0x079e, 0x07ac, 0x07ba, 0x07c6, 0x07d4, 0x07ef, + // Entry 80 - BF + 0x0800, 0x0811, 0x0819, 0x082b, 0x083b, 0x0845, 0x084f, 0x0862, + 0x0877, 0x0886, 0x0896, 0x08a2, 0x08ae, 0x08be, 0x08ca, 0x08d2, + 0x08de, 0x08ea, 0x08f8, 0x090d, 0x0920, 0x0930, 0x0941, 0x0954, + 0x095c, 0x0975, 0x0983, 0x098d, 0x09a5, 0x09b3, 0x09c5, 0x09d5, + 0x09df, 0x09eb, 0x09f7, 0x0a03, 0x0a11, 0x0a21, 0x0a2f, 0x0a3d, + 0x0a56, 0x0a62, 0x0a75, 0x0a87, 0x0a95, 0x0aa5, 0x0aaf, 0x0ab9, + 0x0ac5, 0x0acd, 0x0ae0, 0x0ae8, 0x0af2, 0x0afa, 0x0b1d, 0x0b35, + 0x0b41, 0x0b4f, 0x0b5b, 0x0b82, 0x0b95, 0x0bac, 0x0bba, 0x0bc6, + // Entry C0 - FF + 0x0bd0, 0x0be0, 0x0be6, 0x0c01, 0x0c10, 0x0c1e, 0x0c28, 0x0c2e, + 0x0c3a, 0x0c4b, 0x0c62, 0x0c6d, 0x0c77, 0x0c83, 0x0c93, 0x0ca8, + 0x0cb6, 0x0cd9, 0x0ce9, 0x0cfa, 0x0d0b, 0x0d19, 0x0d27, 0x0d35, + 0x0d46, 0x0d67, 0x0d7a, 0x0d8b, 0x0d91, 0x0da3, 0x0dbb, 0x0dd6, + 0x0ddc, 0x0e04, 0x0e0c, 0x0e1c, 0x0e2c, 0x0e3a, 0x0e4f, 0x0e63, + 0x0e73, 0x0e7d, 0x0e85, 0x0ead, 0x0eb7, 0x0ec5, 0x0ed3, 0x0edf, + 0x0eeb, 0x0f0d, 0x0f22, 0x0f4d, 0x0f5d, 0x0f6d, 0x0f80, 0x0fa9, + 0x0fb7, 0x0fd5, 0x0ff1, 0x0ffd, 0x100b, 0x1021, 0x102b, 0x1037, + // Entry 100 - 13F + 0x103d, 0x1047, 0x105a, 0x1066, 0x1074, 0x1087, 0x108f, 0x109b, + 0x10ae, 0x10c1, 0x10cf, 0x10e6, 0x10f7, 0x110c, 0x1123, 0x1134, + 0x114b, 0x114b, 0x1162, 0x1170, 0x1183, 0x1194, 0x11ae, 0x11bd, + 0x11d1, 0x11e3, 0x11fd, 0x120f, 0x1219, 0x1228, 0x123d, 0x1245, + 0x1256, 0x1269, 0x1280, 0x1280, 0x1299, + }, + }, { // se "AscensionAndorraOvttastuvvan ArábaemiráhtatAfghanistanAntigua ja Barbuda" + "AnguillaAlbániaArmeniaAngolaAntárktisArgentinaAmerihká SamoaNuortari" + @@ -40812,7 +43068,7 @@ var regionHeaders = [252]header{ "amátta-Ásiamátta-nuorta-Ásiamátta-EurohpáAustrália ja Ođđa-SelándaMe" + "lanesiaMikronesia guovllusPolynesiaÁsiagaska-Ásiaoarji-ÁsiaEurohpánu" + "orta-Eurohpádavvi-Eurohpáoarji-Eurohpálulli-Amerihkká", - []uint16{ // 292 elements + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0009, 0x0010, 0x002d, 0x0038, 0x004a, 0x0052, 0x005a, 0x0061, 0x0067, 0x0071, 0x007a, 0x0089, 0x0094, 0x009e, 0x00a3, @@ -40854,13 +43110,15 @@ var regionHeaders = [252]header{ 0x0a1e, 0x0a2f, 0x0a36, 0x0a45, 0x0a55, 0x0a65, 0x0a74, 0x0a83, 0x0a93, 0x0a9d, 0x0aae, 0x0ab5, 0x0ac1, 0x0acd, 0x0ae0, 0x0aef, 0x0b0c, 0x0b15, 0x0b28, 0x0b31, 0x0b36, 0x0b41, 0x0b4c, 0x0b54, - 0x0b63, 0x0b71, 0x0b7f, 0x0b8f, + 0x0b63, 0x0b71, 0x0b7f, 0x0b7f, 0x0b8f, }, }, { // se-FI - "Bosnia ja HercegovinaKambožaSudanChadDavvi-Amerihkká ja Gaska-AmerihkkáL" + - "ulli-AmerihkkáGaska-AmerihkkáDavvi-AmerihkkáLatiinnalaš-Amerihkká", - []uint16{ // 292 elements + "Bosnia ja HercegovinaEuroavádatKambožaSudanChadOvttastuvvan NašuvnnatMái" + + "lbmiAfrihkaDavvi-Amerihká ja Gaska-AmerihkáLulli-AmerihkáOarje-Afrih" + + "káGaska-AmerihkáNuorta-AfrihkáDavvi-AfrihkáGaska-AfrihkáLulli-Afrihk" + + "áAmerihkaDavvi-AmerihkáMikronesia guovluLatiinnalaš Amerihká", + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -40872,37 +43130,37 @@ var regionHeaders = [252]header{ 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, // Entry 40 - 7F 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, - 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, - 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, - 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, - 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, - 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, - 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, - 0x0015, 0x0015, 0x0015, 0x0015, 0x001d, 0x001d, 0x001d, 0x001d, + 0x0015, 0x0015, 0x0015, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0020, 0x0020, 0x0020, 0x0020, 0x0028, 0x0028, 0x0028, 0x0028, // Entry 80 - BF - 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, - 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, - 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, - 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, - 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, - 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, - 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, - 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, // Entry C0 - FF - 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, - 0x001d, 0x001d, 0x001d, 0x001d, 0x0022, 0x0022, 0x0022, 0x0022, - 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, - 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, 0x0022, - 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, - 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, - 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, - 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, + 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, + 0x0028, 0x0028, 0x0028, 0x0028, 0x002d, 0x002d, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, + 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, 0x002d, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, + 0x0031, 0x0031, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, + 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, // Entry 100 - 13F - 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, - 0x004a, 0x005a, 0x005a, 0x005a, 0x006a, 0x006a, 0x006a, 0x006a, - 0x006a, 0x006a, 0x007a, 0x007a, 0x007a, 0x007a, 0x007a, 0x007a, - 0x007a, 0x007a, 0x007a, 0x007a, 0x007a, 0x007a, 0x007a, 0x007a, - 0x007a, 0x007a, 0x007a, 0x0091, + 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0050, 0x0057, + 0x0079, 0x0088, 0x0088, 0x0096, 0x00a5, 0x00b4, 0x00c2, 0x00d0, + 0x00de, 0x00e6, 0x00f5, 0x00f5, 0x00f5, 0x00f5, 0x00f5, 0x00f5, + 0x00f5, 0x00f5, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, + 0x0106, 0x0106, 0x0106, 0x0106, 0x011c, }, }, { // seh @@ -41518,10 +43776,9 @@ var regionHeaders = [252]header{ srRegionIdx, }, { // sr-Cyrl-BA - "БјелорусијаКонгоОбала Слоноваче (Кот д’Ивоар)Кабо ВердеЧешка РепубликаЊе" + - "мачкаСвети Китс и НевисСАР МакаоСвети Пјер и МикелонРеунионТимор-Ле" + - "сте (Источни Тимор)Мања удаљена острва САДСвети Винсент и Гренадини" + - "Британска Дјевичанска ОстрваАмеричка Дјевичанска Острва", + "БјелорусијаКонгоКабо ВердеЧешка РепубликаЊемачкаСвети Китс и НевисСАР Ма" + + "каоСвети Пјер и МикелонРеунионМања удаљена острва САДСвети Винсент " + + "и ГренадиниБританска Дјевичанска ОстрваАмеричка Дјевичанска Острва", []uint16{ // 251 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -41529,43 +43786,42 @@ var regionHeaders = [252]header{ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0016, 0x0016, - 0x0016, 0x0016, 0x0016, 0x0020, 0x0020, 0x0056, 0x0056, 0x0056, - 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0069, 0x0069, - 0x0069, 0x0069, 0x0086, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, + 0x0016, 0x0016, 0x0016, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0033, 0x0033, + 0x0033, 0x0033, 0x0050, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, // Entry 40 - 7F - 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, - 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, - 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, - 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, - 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, - 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, - 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, - 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x0094, 0x00b5, + 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, + 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, + 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, + 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, + 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, + 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, + 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, + 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x007f, // Entry 80 - BF - 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, - 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, - 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, - 0x00b5, 0x00b5, 0x00b5, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, - 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, - 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, - 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, 0x00c6, - 0x00c6, 0x00c6, 0x00c6, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, + 0x007f, 0x007f, 0x007f, 0x007f, 0x007f, 0x007f, 0x007f, 0x007f, + 0x007f, 0x007f, 0x007f, 0x007f, 0x007f, 0x007f, 0x007f, 0x007f, + 0x007f, 0x007f, 0x007f, 0x007f, 0x007f, 0x007f, 0x007f, 0x007f, + 0x007f, 0x007f, 0x007f, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, + 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, + 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, + 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, 0x0090, + 0x0090, 0x0090, 0x0090, 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00b5, // Entry C0 - FF - 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00f9, 0x00f9, 0x00f9, 0x00f9, - 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, - 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, - 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, - 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x00f9, 0x012a, 0x012a, - 0x012a, 0x012a, 0x012a, 0x012a, 0x012a, 0x012a, 0x012a, 0x012a, - 0x012a, 0x0155, 0x0155, 0x0155, 0x0155, 0x0155, 0x0155, 0x0184, - 0x0184, 0x01ba, 0x01ee, + 0x00b5, 0x00b5, 0x00b5, 0x00b5, 0x00c3, 0x00c3, 0x00c3, 0x00c3, + 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, + 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, + 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, + 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, + 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, + 0x00c3, 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x00ee, 0x011d, + 0x011d, 0x0153, 0x0187, }, }, { // sr-Cyrl-ME - "БјелорусијаКонгоОбала Слоноваче (Кот д’Ивоар)Чешка РепубликаЊемачкаСвети" + - " Китс и НевисСвети Пјер и МикелонРеунионТимор-Лесте (Источни Тимор)М" + - "ања удаљена острва САДСвети Винсент и ГренадиниБританска Дјевичанск" + - "а ОстрваАмеричка Дјевичанска Острва", + "БјелорусијаКонгоЧешка РепубликаЊемачкаСвети Китс и НевисСвети Пјер и Мик" + + "елонРеунионМања удаљена острва САДСвети Винсент и ГренадиниБританск" + + "а Дјевичанска ОстрваАмеричка Дјевичанска Острва", []uint16{ // 251 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -41573,42 +43829,42 @@ var regionHeaders = [252]header{ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0016, 0x0016, - 0x0016, 0x0016, 0x0016, 0x0020, 0x0020, 0x0056, 0x0056, 0x0056, - 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, 0x0056, - 0x0056, 0x0056, 0x0073, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, + 0x0016, 0x0016, 0x0016, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0020, 0x0020, 0x003d, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, // Entry 40 - 7F - 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, - 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, - 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, - 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, - 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, - 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, - 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, - 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x0081, 0x00a2, - // Entry 80 - BF - 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, - 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, - 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, - 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, - 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, - 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, - 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, 0x00a2, - 0x00a2, 0x00a2, 0x00a2, 0x00c7, 0x00c7, 0x00c7, 0x00c7, 0x00c7, - // Entry C0 - FF - 0x00c7, 0x00c7, 0x00c7, 0x00c7, 0x00d5, 0x00d5, 0x00d5, 0x00d5, - 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, - 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, - 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, - 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x00d5, 0x0106, 0x0106, - 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, - 0x0106, 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, 0x0131, 0x0160, - 0x0160, 0x0196, 0x01ca, + 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, + 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, + 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, + 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, + 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, + 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, + 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, + 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x006c, + // Entry 80 - BF + 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, + 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, + 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, + 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, + 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, + 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, + 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, 0x006c, + 0x006c, 0x006c, 0x006c, 0x0091, 0x0091, 0x0091, 0x0091, 0x0091, + // Entry C0 - FF + 0x0091, 0x0091, 0x0091, 0x0091, 0x009f, 0x009f, 0x009f, 0x009f, + 0x009f, 0x009f, 0x009f, 0x009f, 0x009f, 0x009f, 0x009f, 0x009f, + 0x009f, 0x009f, 0x009f, 0x009f, 0x009f, 0x009f, 0x009f, 0x009f, + 0x009f, 0x009f, 0x009f, 0x009f, 0x009f, 0x009f, 0x009f, 0x009f, + 0x009f, 0x009f, 0x009f, 0x009f, 0x009f, 0x009f, 0x009f, 0x009f, + 0x009f, 0x009f, 0x009f, 0x009f, 0x009f, 0x009f, 0x009f, 0x009f, + 0x009f, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00f9, + 0x00f9, 0x012f, 0x0163, }, }, { // sr-Cyrl-XK - "КонгоОбала Слоноваче (Кот д’Ивоар)Кабо ВердеЧешка РепубликаСАР ХонгконгС" + - "вети Китс и НевисСАР МакаоСвети Пјер и МикелонРеунионТимор-Лесте (И" + - "сточни Тимор)Мања удаљена острва САДСвети Винсент и Гренадини", + "КонгоКабо ВердеЧешка РепубликаСАР ХонгконгСвети Китс и НевисСАР МакаоСве" + + "ти Пјер и МикелонРеунионМања удаљена острва САДСвети Винсент и Грен" + + "адини", []uint16{ // 248 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -41616,35 +43872,35 @@ var regionHeaders = [252]header{ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x000a, 0x000a, 0x0040, 0x0040, 0x0040, - 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0053, 0x0053, - 0x0053, 0x0053, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x0000, 0x0000, 0x0000, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, + 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x001d, 0x001d, + 0x001d, 0x001d, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, // Entry 40 - 7F - 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, - 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, - 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, - 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, - 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0087, 0x0087, 0x0087, - 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, - 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, - 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x00a8, - // Entry 80 - BF - 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, - 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, - 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, - 0x00a8, 0x00a8, 0x00a8, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, - 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, - 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, - 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, 0x00b9, - 0x00b9, 0x00b9, 0x00b9, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, + 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, + 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, + 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, + 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, + 0x003a, 0x003a, 0x003a, 0x003a, 0x003a, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, + 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0051, 0x0072, + // Entry 80 - BF + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0083, 0x0083, 0x0083, 0x0083, 0x0083, + 0x0083, 0x0083, 0x0083, 0x0083, 0x0083, 0x0083, 0x0083, 0x0083, + 0x0083, 0x0083, 0x0083, 0x0083, 0x0083, 0x0083, 0x0083, 0x0083, + 0x0083, 0x0083, 0x0083, 0x0083, 0x0083, 0x0083, 0x0083, 0x0083, + 0x0083, 0x0083, 0x0083, 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00a8, // Entry C0 - FF - 0x00de, 0x00de, 0x00de, 0x00de, 0x00ec, 0x00ec, 0x00ec, 0x00ec, - 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, - 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, - 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, - 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x00ec, 0x011d, 0x011d, - 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, 0x011d, - 0x011d, 0x0148, 0x0148, 0x0148, 0x0148, 0x0148, 0x0148, 0x0177, + 0x00a8, 0x00a8, 0x00a8, 0x00a8, 0x00b6, 0x00b6, 0x00b6, 0x00b6, + 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, + 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, + 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, + 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, + 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, 0x00b6, + 0x00b6, 0x00e1, 0x00e1, 0x00e1, 0x00e1, 0x00e1, 0x00e1, 0x0110, }, }, { // sr-Latn @@ -41652,10 +43908,9 @@ var regionHeaders = [252]header{ srLatnRegionIdx, }, { // sr-Latn-BA - "BjelorusijaKongoObala Slonovače (Kot d’Ivoar)Kabo VerdeČeška RepublikaNj" + - "emačkaSveti Kits i NevisSAR MakaoSveti Pjer i MikelonReunionTimor-Le" + - "ste (Istočni Timor)Manja udaljena ostrva SADSveti Vinsent i Grenadin" + - "iBritanska Djevičanska OstrvaAmerička Djevičanska Ostrva", + "BjelorusijaKongoKabo VerdeČeška RepublikaNjemačkaSveti Kits i NevisSAR M" + + "akaoSveti Pjer i MikelonReunionManja udaljena ostrva SADSveti Vinsen" + + "t i GrenadiniBritanska Djevičanska OstrvaAmerička Djevičanska Ostrva", []uint16{ // 251 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -41663,43 +43918,42 @@ var regionHeaders = [252]header{ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x000b, 0x000b, - 0x000b, 0x000b, 0x000b, 0x0010, 0x0010, 0x0030, 0x0030, 0x0030, - 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x003a, 0x003a, - 0x003a, 0x003a, 0x004b, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, + 0x000b, 0x000b, 0x000b, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x001a, 0x001a, + 0x001a, 0x001a, 0x002b, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, // Entry 40 - 7F - 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, - 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, - 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, - 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, - 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, - 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, - 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, - 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0066, + 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, + 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, + 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, + 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, + 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, + 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, + 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, + 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0034, 0x0046, // Entry 80 - BF - 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, - 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, - 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, 0x0066, - 0x0066, 0x0066, 0x0066, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, - 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, - 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, - 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, 0x006f, - 0x006f, 0x006f, 0x006f, 0x0083, 0x0083, 0x0083, 0x0083, 0x0083, + 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, + 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, + 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, 0x0046, + 0x0046, 0x0046, 0x0046, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x004f, 0x004f, 0x004f, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, // Entry C0 - FF - 0x0083, 0x0083, 0x0083, 0x0083, 0x008a, 0x008a, 0x008a, 0x008a, - 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, - 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, - 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, - 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x008a, 0x00a6, 0x00a6, - 0x00a6, 0x00a6, 0x00a6, 0x00a6, 0x00a6, 0x00a6, 0x00a6, 0x00a6, - 0x00a6, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00bf, 0x00d8, - 0x00d8, 0x00f5, 0x0112, + 0x0063, 0x0063, 0x0063, 0x0063, 0x006a, 0x006a, 0x006a, 0x006a, + 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, + 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, + 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, + 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, + 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, + 0x006a, 0x0083, 0x0083, 0x0083, 0x0083, 0x0083, 0x0083, 0x009c, + 0x009c, 0x00b9, 0x00d6, }, }, { // sr-Latn-ME - "BjelorusijaKongoObala Slonovače (Kot d’Ivoar)Češka RepublikaNjemačkaSvet" + - "i Kits i NevisSveti Pjer i MikelonReunionTimor-Leste (Istočni Timor)" + - "Manja udaljena ostrva SADSveti Vinsent i GrenadiniBritanska Djevičan" + - "ska OstrvaAmerička Djevičanska Ostrva", + "BjelorusijaKongoČeška RepublikaNjemačkaSveti Kits i NevisSveti Pjer i Mi" + + "kelonReunionManja udaljena ostrva SADSveti Vinsent i GrenadiniBritan" + + "ska Djevičanska OstrvaAmerička Djevičanska Ostrva", []uint16{ // 251 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -41707,42 +43961,42 @@ var regionHeaders = [252]header{ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x000b, 0x000b, - 0x000b, 0x000b, 0x000b, 0x0010, 0x0010, 0x0030, 0x0030, 0x0030, - 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, - 0x0030, 0x0030, 0x0041, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, + 0x000b, 0x000b, 0x000b, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, + 0x0010, 0x0010, 0x0021, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, // Entry 40 - 7F - 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, - 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, - 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, - 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, - 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, - 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, - 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, - 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x004a, 0x005c, + 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, + 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, + 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, + 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, + 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, + 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, + 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, + 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x003c, // Entry 80 - BF - 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, - 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, - 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, - 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, - 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, - 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, - 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, 0x005c, - 0x005c, 0x005c, 0x005c, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, 0x003c, + 0x003c, 0x003c, 0x003c, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, // Entry C0 - FF - 0x0070, 0x0070, 0x0070, 0x0070, 0x0077, 0x0077, 0x0077, 0x0077, - 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, - 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, - 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, - 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0077, 0x0093, 0x0093, - 0x0093, 0x0093, 0x0093, 0x0093, 0x0093, 0x0093, 0x0093, 0x0093, - 0x0093, 0x00ac, 0x00ac, 0x00ac, 0x00ac, 0x00ac, 0x00ac, 0x00c5, - 0x00c5, 0x00e2, 0x00ff, + 0x0050, 0x0050, 0x0050, 0x0050, 0x0057, 0x0057, 0x0057, 0x0057, + 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, + 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, + 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, + 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, + 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, + 0x0057, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0070, 0x0089, + 0x0089, 0x00a6, 0x00c3, }, }, { // sr-Latn-XK - "KongoObala Slonovače (Kot d’Ivoar)Kabo VerdeČeška RepublikaSAR HongkongS" + - "veti Kits i NevisSAR MakaoSveti Pjer i MikelonReunionTimor-Leste (Is" + - "točni Timor)Manja udaljena ostrva SADSveti Vinsent i Grenadini", + "KongoKabo VerdeČeška RepublikaSAR HongkongSveti Kits i NevisSAR MakaoSve" + + "ti Pjer i MikelonReunionManja udaljena ostrva SADSveti Vinsent i Gre" + + "nadini", []uint16{ // 248 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -41750,35 +44004,35 @@ var regionHeaders = [252]header{ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0005, 0x0005, 0x0025, 0x0025, 0x0025, - 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x0025, 0x002f, 0x002f, - 0x002f, 0x002f, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, + 0x0000, 0x0000, 0x0000, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, + 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x000f, 0x000f, + 0x000f, 0x000f, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, // Entry 40 - 7F - 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, - 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, - 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, - 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, - 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x004c, 0x004c, 0x004c, - 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, - 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, - 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x005e, + 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, + 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x002c, 0x002c, 0x002c, + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, + 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x002c, 0x003e, // Entry 80 - BF - 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, - 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, - 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, 0x005e, - 0x005e, 0x005e, 0x005e, 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, - 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, - 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, - 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, 0x0067, - 0x0067, 0x0067, 0x0067, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, + 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, + 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, + 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, 0x003e, + 0x003e, 0x003e, 0x003e, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, + 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, + 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, + 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, 0x0047, + 0x0047, 0x0047, 0x0047, 0x005b, 0x005b, 0x005b, 0x005b, 0x005b, // Entry C0 - FF - 0x007b, 0x007b, 0x007b, 0x007b, 0x0082, 0x0082, 0x0082, 0x0082, - 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, - 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, - 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, - 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x0082, 0x009e, 0x009e, - 0x009e, 0x009e, 0x009e, 0x009e, 0x009e, 0x009e, 0x009e, 0x009e, - 0x009e, 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00d0, + 0x005b, 0x005b, 0x005b, 0x005b, 0x0062, 0x0062, 0x0062, 0x0062, + 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, + 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, + 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, + 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, + 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, 0x0062, + 0x0062, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x007b, 0x0094, }, }, { // sv @@ -41839,46 +44093,47 @@ var regionHeaders = [252]header{ }, }, { // sw-KE - "AzabajaniIvorikostiKisiwa cha ChristmasSaiprasiGwadelupeYordaniLebanoniL" + - "ishtensteniLesothoLasembagiLativiaMaldiviNijerNijeriaNorweNepaliOman" + - "iPuetorikoKatariSurinameSao Tome na PrinsipeChadiVietnamu", + "AntaktikaAzabajaniIvorikostiKisiwa cha ChristmasSaiprasiMikronesiaGwadel" + + "upeYordaniLebanoniLishtensteniLesothoLasembagiLativiaMaldiviNyukaled" + + "oniaNijerNijeriaNorweNepaliOmaniPolinesia ya UfaransaPuetorikoKatari" + + "Sao Tome na PrinsipeChadiVietnamu", []uint16{ // 252 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, - 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, - 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, - 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0013, 0x0013, 0x0013, - 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, 0x0013, - 0x0027, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + 0x0000, 0x0000, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, + 0x0009, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, + 0x0012, 0x0012, 0x0012, 0x0012, 0x0012, 0x001c, 0x001c, 0x001c, + 0x001c, 0x001c, 0x001c, 0x001c, 0x001c, 0x001c, 0x001c, 0x001c, + 0x0030, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, // Entry 40 - 7F - 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, - 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, - 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, - 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x0038, 0x0038, 0x0038, - 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, - 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, + 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0042, + 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, + 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x004b, 0x004b, 0x004b, + 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, + 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, + 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, 0x004b, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, // Entry 80 - BF - 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x003f, 0x0047, 0x0047, - 0x0053, 0x0053, 0x0053, 0x005a, 0x005a, 0x0063, 0x006a, 0x006a, - 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, - 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, - 0x006a, 0x006a, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, - 0x0071, 0x0076, 0x0076, 0x007d, 0x007d, 0x007d, 0x0082, 0x0088, - 0x0088, 0x0088, 0x0088, 0x008d, 0x008d, 0x008d, 0x008d, 0x008d, - 0x008d, 0x008d, 0x008d, 0x008d, 0x008d, 0x0096, 0x0096, 0x0096, + 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x005a, 0x005a, + 0x0066, 0x0066, 0x0066, 0x006d, 0x006d, 0x0076, 0x007d, 0x007d, + 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, + 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, 0x007d, + 0x007d, 0x007d, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, 0x0084, + 0x0090, 0x0095, 0x0095, 0x009c, 0x009c, 0x009c, 0x00a1, 0x00a7, + 0x00a7, 0x00a7, 0x00a7, 0x00ac, 0x00ac, 0x00ac, 0x00c1, 0x00c1, + 0x00c1, 0x00c1, 0x00c1, 0x00c1, 0x00c1, 0x00ca, 0x00ca, 0x00ca, // Entry C0 - FF - 0x0096, 0x0096, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, - 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, - 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x00a4, - 0x00a4, 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00b8, 0x00b8, - 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, - 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, - 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, 0x00bd, - 0x00bd, 0x00bd, 0x00bd, 0x00c5, + 0x00ca, 0x00ca, 0x00d0, 0x00d0, 0x00d0, 0x00d0, 0x00d0, 0x00d0, + 0x00d0, 0x00d0, 0x00d0, 0x00d0, 0x00d0, 0x00d0, 0x00d0, 0x00d0, + 0x00d0, 0x00d0, 0x00d0, 0x00d0, 0x00d0, 0x00d0, 0x00d0, 0x00d0, + 0x00d0, 0x00e4, 0x00e4, 0x00e4, 0x00e4, 0x00e4, 0x00e4, 0x00e4, + 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, + 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, + 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, 0x00e9, + 0x00e9, 0x00e9, 0x00e9, 0x00f1, }, }, { // ta @@ -41962,11 +44217,247 @@ var regionHeaders = [252]header{ 0x07fa, 0x0801, 0x080e, 0x0814, 0x081c, }, }, + { // tg + "АсунсонАндорраАморатҳои Муттаҳидаи АрабАфғонистонАнтигуа ва БарбудаАнгил" + + "ияАлбанияАрманистонАнголаАнтарктидаАргентинаСамоаи АмерикаАвстрияАв" + + "стралияАрубаҶазираҳои АландОзарбойҷонБосния ва ҲерсеговинаБарбадосБ" + + "англадешБелгияБуркина-ФасоБулғорияБаҳрайнБурундиБенинСент-БартелмиБ" + + "ермудаБрунейБоливияБразилияБагамБутонҶазираи БувеБотсванаБелорусБел" + + "изКанадаҶазираҳои Кокос (Килинг)Ҷумҳурии Африқои МарказӣШвейтсарияК" + + "от-д’ИвуарҶазираҳои КукЧилиКамерунХитойКолумбияКоста-РикаКубаКабо-В" + + "ердеКюрасаоҶазираи КрисмасКипрҶумҳурии ЧехГерманияҶибутиДанияДомини" + + "каҶумҳурии ДоминиканАлҷазоирЭквадорЭстонияМисрЭритреяИспанияЭфиопия" + + "ФинляндияФиҷиҶазираҳои ФолклендШтатҳои Федеративии МикронезияҶазира" + + "ҳои ФарерФрансияГабонШоҳигарии МуттаҳидаГренадаГурҷистонГвианаи Фар" + + "онсаГернсиГанаГибралтарГренландияГамбияГвинеяГваделупаГвинеяи Экват" + + "орӣЮнонҶорҷияи Ҷанубӣ ва Ҷазираҳои СандвичГватемалаГуамГвинея-Бисау" + + "ГайанаҲонконг (МММ)Ҷазираи Ҳерд ва Ҷазираҳои МакдоналдГондурасХорва" + + "тияГаитиМаҷористонИндонезияИрландияИсроилҶазираи МэнҲиндустонҚаламр" + + "ави Британия дар уқёнуси ҲиндИроқЭронИсландияИталияҶерсиЯмайкаУрдун" + + "ЯпонияКенияҚирғизистонКамбоҷаКирибатиКоморСент-Китс ва НевисКореяи " + + "ШимолӣҚувайтҶазираҳои КайманҚазоқистонЛаосЛубнонСент-ЛюсияЛихтенште" + + "йнШри-ЛанкаЛиберияЛесотоЛитваЛюксембургЛатвияЛибияМарокашМонакоМолд" + + "оваЧерногорияҶазираи Сент-МартинМадагаскарҶазираҳои МаршаллМақдунМа" + + "лиМянмаМуғулистонМакао (МММ)Ҷазираҳои Марианаи ШимолӣМартиникаМаври" + + "танияМонтсерратМалтаМаврикийМалдивМалавиМексикаМалайзияМозамбикНами" + + "бияКаледонияи НавНигерҶазираи НорфолкНигерияНикарагуаНидерландияНор" + + "вегияНепалНауруНиуэЗеландияи НавУмонПанамаПеруПолинезияи ФаронсаПап" + + "уа Гвинеяи НавФилиппинПокистонЛаҳистонСент-Пер ва МикелонҶазираҳои " + + "ПиткейрнПуэрто-РикоПортугалияПалауПарагвайҚатарРеюнионРуминияСербия" + + "РусияРуандаАрабистони СаудӣҶазираҳои СоломонСейшелСудонШветсияСинга" + + "пурСент ЕленаСловенияШпитсберген ва Ян МайенСловакияСиерра-ЛеонеСан" + + "-МариноСенегалСомалӣСуринамСудони ҶанубӣСан Томе ва ПринсипиЭл-Салва" + + "дорСинт-МаартенСурияСвазилендТристан-да-КуняҶазираҳои Теркс ва Кайк" + + "осЧадМинтақаҳои Ҷанубии ФаронсаТогоТаиландТоҷикистонТокелауТимор-Ле" + + "стеТуркманистонТунисТонгаТуркияТринидад ва ТобагоТувалуТайванТанзан" + + "ияУкраинаУгандаҶазираҳои Хурди Дурдасти ИМАИёлоти МуттаҳидаУругвайӮ" + + "збекистонШаҳри ВотиконСент-Винсент ва ГренадинаВенесуэлаҶазираҳои В" + + "иргини БританияҶазираҳои Виргини ИМАВетнамВануатуУоллис ва ФутунаСа" + + "моаКосовоЯманМайоттаАфрикаи ҶанубӣЗамбияЗимбабвеМинтақаи номаълум", + []uint16{ // 262 elements + // Entry 0 - 3F + 0x0000, 0x000e, 0x001c, 0x004c, 0x0060, 0x0082, 0x0090, 0x009e, + 0x00b2, 0x00be, 0x00d2, 0x00e4, 0x00ff, 0x010d, 0x011f, 0x0129, + 0x0146, 0x015a, 0x0182, 0x0192, 0x01a4, 0x01b0, 0x01c7, 0x01d7, + 0x01e5, 0x01f3, 0x01fd, 0x0216, 0x0224, 0x0230, 0x023e, 0x023e, + 0x024e, 0x0258, 0x0262, 0x0279, 0x0289, 0x0297, 0x02a1, 0x02ad, + 0x02d9, 0x02d9, 0x0307, 0x0307, 0x031b, 0x0331, 0x034a, 0x0352, + 0x0360, 0x036a, 0x037a, 0x037a, 0x038d, 0x0395, 0x03a8, 0x03b6, + 0x03d3, 0x03db, 0x03f2, 0x0402, 0x0402, 0x040e, 0x0418, 0x0428, + // Entry 40 - 7F + 0x044b, 0x045b, 0x045b, 0x0469, 0x0477, 0x047f, 0x047f, 0x048d, + 0x049b, 0x04a9, 0x04a9, 0x04a9, 0x04bb, 0x04c3, 0x04e6, 0x0520, + 0x053d, 0x054b, 0x0555, 0x057a, 0x0588, 0x059a, 0x05b7, 0x05c3, + 0x05cb, 0x05dd, 0x05f1, 0x05fd, 0x0609, 0x061b, 0x063a, 0x0642, + 0x0684, 0x0696, 0x069e, 0x06b5, 0x06c1, 0x06d8, 0x071a, 0x072a, + 0x073a, 0x0744, 0x0758, 0x0758, 0x076a, 0x077a, 0x0786, 0x079b, + 0x07ad, 0x07ef, 0x07f7, 0x07ff, 0x080f, 0x081b, 0x0825, 0x0831, + 0x083b, 0x0847, 0x0851, 0x0867, 0x0875, 0x0885, 0x088f, 0x08b0, + // Entry 80 - BF + 0x08c9, 0x08c9, 0x08d5, 0x08f4, 0x0908, 0x0910, 0x091c, 0x092f, + 0x0945, 0x0956, 0x0964, 0x0970, 0x097a, 0x098e, 0x099a, 0x09a4, + 0x09b2, 0x09be, 0x09cc, 0x09e0, 0x0a04, 0x0a18, 0x0a39, 0x0a45, + 0x0a4d, 0x0a57, 0x0a6b, 0x0a7e, 0x0aae, 0x0ac0, 0x0ad4, 0x0ae8, + 0x0af2, 0x0b02, 0x0b0e, 0x0b1a, 0x0b28, 0x0b38, 0x0b48, 0x0b56, + 0x0b71, 0x0b7b, 0x0b98, 0x0ba6, 0x0bb8, 0x0bce, 0x0bde, 0x0be8, + 0x0bf2, 0x0bfa, 0x0c13, 0x0c1b, 0x0c27, 0x0c2f, 0x0c52, 0x0c72, + 0x0c82, 0x0c92, 0x0ca2, 0x0cc5, 0x0ce8, 0x0cfd, 0x0cfd, 0x0d11, + // Entry C0 - FF + 0x0d1b, 0x0d2b, 0x0d35, 0x0d35, 0x0d43, 0x0d51, 0x0d5d, 0x0d67, + 0x0d73, 0x0d92, 0x0db3, 0x0dbf, 0x0dc9, 0x0dd7, 0x0de7, 0x0dfa, + 0x0e0a, 0x0e35, 0x0e45, 0x0e5c, 0x0e6f, 0x0e7d, 0x0e89, 0x0e97, + 0x0eb0, 0x0ed5, 0x0eea, 0x0f01, 0x0f0b, 0x0f1d, 0x0f39, 0x0f68, + 0x0f6e, 0x0fa0, 0x0fa8, 0x0fb6, 0x0fca, 0x0fd8, 0x0fed, 0x1005, + 0x100f, 0x1019, 0x1025, 0x1047, 0x1053, 0x105f, 0x106f, 0x107d, + 0x1089, 0x10be, 0x10be, 0x10dd, 0x10eb, 0x10ff, 0x1118, 0x1147, + 0x1159, 0x118b, 0x11b3, 0x11bf, 0x11cd, 0x11eb, 0x11f5, 0x1201, + // Entry 100 - 13F + 0x1209, 0x1217, 0x1232, 0x123e, 0x124e, 0x126f, + }, + }, { // th thRegionStr, thRegionIdx, }, - {}, // ti + { // ti + "አሴንሽን ደሴትአንዶራሕቡራት ኢማራት ዓረብአፍጋኒስታንኣንቲጓን ባሩዳንአንጉኢላአልባኒያአርሜኒያአንጐላአንታርክቲካአርጀ" + + "ንቲናናይ ኣሜሪካ ሳሞኣኦስትሪያአውስትሬሊያአሩባደሴታት ኣላንድአዘርባጃንቦዝንያን ሄርዘጎቪናንባርቤዶስባንግላ" + + "ዲሽቤልጄምቡርኪና ፋሶቡልጌሪያባህሬንብሩንዲቤኒንቅዱስ ባርተለሚይቤርሙዳብሩኒቦሊቪያካሪቢያን ኔዘርላንድስብራዚ" + + "ልባሃማስቡህታንደሴታት ቦውቬትቦትስዋናቤላሩስቤሊዘካናዳኮኮስ ኬሊንግ ደሴቶችኮንጎማእከላይ ኣፍሪቃ ሪፓብሊክኮ" + + "ንጎ ሪፓብሊክስዊዘርላንድኮት ዲቯርደሴታት ኩክቺሊካሜሩንቻይናኮሎምቢያክሊፐርቶን ደሴትኮስታ ሪካኩባኬፕ ቬርዴ" + + "ኩራካዎደሴታት ክሪስትማስሳይፕረስቼክ ሪፓብሊክጀርመንዲየጎ ጋርሺያጂቡቲዴንማርክዶሚኒካዶመኒካ ሪፓብሊክአልጄሪ" + + "ያሲውታን ሜሊላንኢኳዶርኤስቶኒያግብጽምዕራባዊ ሳህራኤርትራስፔንኢትዮጵያፊንላንድፊጂደሴታት ፎክላንድሚክሮኔዢያ" + + "ደሴታት ፋራኦፈረንሳይጋቦንእንግሊዝግሬናዳጆርጂያናይ ፈረንሳይ ጉይናገርንሲጋናጊብራልታርግሪንላንድጋምቢያጊኒጉ" + + "ዋደሉፕኢኳቶሪያል ጊኒግሪክደሴታት ደቡብ ጆርጂያን ደቡድ ሳንድዊችንጉዋቲማላጉዋምቢሳዎጉያናሆንግ ኮንግደሴታት" + + " ሀርድን ማክዶናልድንሆንዱራስክሮኤሽያሀይቲሀንጋሪደሴታት ካናሪኢንዶኔዢያአየርላንድእስራኤልአይል ኦፍ ማንህንዲና" + + "ይ ብሪጣንያ ህንዳዊ ውቅያኖስ ግዝኣትኢራቅኢራንአይስላንድጣሊያንጀርሲጃማይካጆርዳንጃፓንኬንያኪርጂስታንካምቦዲ" + + "ያኪሪባቲኮሞሮስቅዱስ ኪትስን ኔቪስንሰሜን ኮሪያደቡብ ኮሪያክዌትካይማን ደሴቶችካዛኪስታንላኦስሊባኖስሴንት ሉ" + + "ቺያሊችተንስታይንሲሪላንካላይቤሪያሌሶቶሊቱዌኒያሉክሰምበርግላትቪያሊቢያሞሮኮሞናኮሞልዶቫሞንቴኔግሮሴንት ማርቲን" + + "ማዳጋስካርማርሻል አይላንድማከዶኒያማሊማያንማርሞንጎሊያማካዎደሴታት ሰሜናዊ ማሪያናማርቲኒክሞሪቴኒያሞንትሴራት" + + "ማልታማሩሸስማልዲቭስማላዊሜክሲኮማሌዢያሞዛምቢክናሚቢያኒው ካሌዶኒያኒጀርኖርፎልክ ደሴትናይጄሪያኒካራጓኔዘርላን" + + "ድስኖርዌኔፓልናኡሩኒኡይኒው ዚላንድኦማንፓናማፔሩናይ ፈረንሳይ ፖሊነዝያፓፑዋ ኒው ጊኒፊሊፒንስፓኪስታንፖላንድ" + + "ቅዱስ ፒዬርን ሚኩኤሎንፒትካኢርንፖርታ ሪኮምምሕዳር ፍልስጤምፖርቱጋልፓላውፓራጓይቀጠርሪዩኒየንሮሜኒያሰርቢያራ" + + "ሺያሩዋንዳስዑዲ ዓረብሰሎሞን ደሴትሲሼልስሱዳንስዊድንሲንጋፖርሴንት ሄለናስሎቬኒያስቫልባርድን ዣን ማየን ደሴ" + + "ታትስሎቫኪያሴራሊዮንሳን ማሪኖሴኔጋልሱማሌሱሪናምደቡብ ሱዳንሳኦ ቶሜን ፕሪንሲፔንኤል ሳልቫዶርሲንት ማርቲንሲ" + + "ሪያሱዋዚላንድትሪስን ዳ ኩንሃደሴታት ቱርክን ካይኮስንጫድናይ ፈረንሳይ ደቡባዊ ግዝኣታትቶጐታይላንድታጃኪስታ" + + "ንቶክላውምብራቕ ቲሞርቱርክሜኒስታንቱኒዚያቶንጋቱርክትሪኒዳድን ቶባጎንቱቫሉታይዋንታንዛኒያዩክሬንዩጋንዳናይ ኣ" + + "ሜሪካ ፍንትት ዝበሉ ደሴታትአሜሪካኡራጓይዩዝበኪስታንቫቲካንቅዱስ ቪንሴንትን ግሬናዲንስንቬንዙዌላቨርጂን ደሴ" + + "ታት እንግሊዝቨርጂን ደሴታት ኣሜሪካቬትናምቫኑአቱዋሊስን ፉቱናንሳሞአኮሶቮየመንሜይኦቴደቡብ አፍሪካዛምቢያዚም" + + "ቧቤ", + []uint16{ // 261 elements + // Entry 0 - 3F + 0x0000, 0x0019, 0x0025, 0x0048, 0x005d, 0x0079, 0x0088, 0x0097, + 0x00a6, 0x00b2, 0x00c7, 0x00d9, 0x00f6, 0x0105, 0x011a, 0x0123, + 0x013c, 0x014e, 0x0173, 0x0182, 0x0194, 0x01a0, 0x01b3, 0x01c2, + 0x01ce, 0x01da, 0x01e3, 0x01ff, 0x020b, 0x0214, 0x0220, 0x0245, + 0x0251, 0x025d, 0x0269, 0x0282, 0x0291, 0x029d, 0x02a6, 0x02af, + 0x02d2, 0x02db, 0x0307, 0x0320, 0x0335, 0x0345, 0x0358, 0x035e, + 0x036a, 0x0373, 0x0382, 0x039e, 0x03ae, 0x03b4, 0x03c4, 0x03d0, + 0x03ef, 0x03fe, 0x0414, 0x0420, 0x0436, 0x043f, 0x044e, 0x045a, + // Entry 40 - 7F + 0x0476, 0x0485, 0x049e, 0x04aa, 0x04b9, 0x04c2, 0x04db, 0x04e7, + 0x04f0, 0x04ff, 0x04ff, 0x04ff, 0x050e, 0x0514, 0x0530, 0x0542, + 0x0558, 0x0567, 0x0570, 0x057f, 0x058b, 0x0597, 0x05b7, 0x05c3, + 0x05c9, 0x05db, 0x05ed, 0x05f9, 0x05ff, 0x060e, 0x0627, 0x0630, + 0x0673, 0x0682, 0x068b, 0x0694, 0x069d, 0x06b0, 0x06df, 0x06ee, + 0x06fd, 0x0706, 0x0712, 0x0728, 0x073a, 0x074c, 0x075b, 0x0772, + 0x077b, 0x07bb, 0x07c4, 0x07cd, 0x07df, 0x07eb, 0x07f4, 0x0800, + 0x080c, 0x0815, 0x081e, 0x0830, 0x083f, 0x084b, 0x0857, 0x087a, + // Entry 80 - BF + 0x088d, 0x08a0, 0x08a9, 0x08c2, 0x08d4, 0x08dd, 0x08e9, 0x08fc, + 0x0914, 0x0923, 0x0932, 0x093b, 0x094a, 0x095f, 0x096b, 0x0974, + 0x097d, 0x0986, 0x0992, 0x09a4, 0x09ba, 0x09cc, 0x09e8, 0x09f7, + 0x09fd, 0x0a0c, 0x0a1b, 0x0a24, 0x0a4a, 0x0a59, 0x0a68, 0x0a7a, + 0x0a83, 0x0a8f, 0x0a9e, 0x0aa7, 0x0ab3, 0x0abf, 0x0ace, 0x0ada, + 0x0af0, 0x0af9, 0x0b12, 0x0b21, 0x0b2d, 0x0b42, 0x0b4b, 0x0b54, + 0x0b5d, 0x0b66, 0x0b79, 0x0b82, 0x0b8b, 0x0b91, 0x0bb7, 0x0bce, + 0x0bdd, 0x0bec, 0x0bf8, 0x0c1e, 0x0c30, 0x0c40, 0x0c5f, 0x0c6e, + // Entry C0 - FF + 0x0c77, 0x0c83, 0x0c8c, 0x0c8c, 0x0c9b, 0x0ca7, 0x0cb3, 0x0cbc, + 0x0cc8, 0x0cdb, 0x0cf1, 0x0cfd, 0x0d06, 0x0d12, 0x0d21, 0x0d34, + 0x0d43, 0x0d76, 0x0d85, 0x0d94, 0x0da4, 0x0db0, 0x0db9, 0x0dc5, + 0x0dd8, 0x0dfb, 0x0e11, 0x0e27, 0x0e30, 0x0e42, 0x0e5c, 0x0e85, + 0x0e8b, 0x0ebe, 0x0ec4, 0x0ed3, 0x0ee5, 0x0ef1, 0x0f07, 0x0f1f, + 0x0f2b, 0x0f34, 0x0f3d, 0x0f5c, 0x0f65, 0x0f71, 0x0f80, 0x0f8c, + 0x0f98, 0x0fcf, 0x0fcf, 0x0fdb, 0x0fe7, 0x0ffc, 0x1008, 0x103a, + 0x1049, 0x1072, 0x1098, 0x10a4, 0x10b0, 0x10c9, 0x10d2, 0x10db, + // Entry 100 - 13F + 0x10e4, 0x10f0, 0x1106, 0x1112, 0x111e, + }, + }, + { // tk + "Beýgeliş adasyAndorraBirleşen Arap EmirlikleriOwganystanAntigua we Barbu" + + "daAngilýaAlbaniýaErmenistanAngolaAntarktikaArgentinaAmerikan Samoasy" + + "AwstriýaAwstraliýaArubaAland adalaryAzerbaýjanBosniýa we Gersegowina" + + "BarbadowBangladeşBelgiýaBurkina-FasoBolgariýaBahreýnBurundiBeninSen-" + + "BartelemiBermudaBruneýBoliwiýaKarib NiderlandyBraziliýaBagama adalar" + + "yButanBuwe adasyBotswanaBelarusBelizKanadaKokos (Kiling) adalaryKong" + + "o - KinşasaOrta Afrika RespublikasyKongo - BrazzawilŞweýsariýaKot-d’" + + "IwuarKuk adalaryÇiliKamerunHytaýKolumbiýaKlipperton adasyKosta-RikaK" + + "ubaKabo-WerdeKýurasaoRoždestwo adasyKiprÇehiýaGermaniýaDiýego-Garsiý" + + "aJibutiDaniýaDominikaDominikan RespublikasyAlžirSeuta we MelilýaEkwa" + + "dorEstoniýaMüsürGünbatar SaharaEritreýaIspaniýaEfiopiýaÝewropa Bilel" + + "eşigiÝewro sebtiFinlandiýaFijiFolklend adalaryMikroneziýaFarer adala" + + "ryFransiýaGabonBirleşen PatyşalykGrenadaGruziýaFransuz GwianasyGerns" + + "iGanaGibraltarGrenlandiýaGambiýaGwineýaGwadelupaEkwatorial GwineýaGr" + + "esiýaGünorta Georgiýa we Günorta Sendwiç adasyGwatemalaGuamGwineýa-B" + + "isauGaýanaGonkong AAS HytaýHerd we Makdonald adalaryGondurasHorwatiý" + + "aGaitiWengriýaKanar adalaryIndoneziýaIrlandiýaYsraýylMen adasyHindis" + + "tanBritaniýanyň Hint okeanyndaky territoriýalaryYrakEýranIslandiýaIt" + + "aliýaJersiÝamaýkaIordaniýaÝaponiýaKeniýaGyrgyzystanKambojaKiribatiKo" + + "mor AdalarySent-Kits we NewisDemirgazyk KoreýaGünorta KoreýaKuweýtKa" + + "ýman adalaryGazagystanLaosLiwanSent-LýusiýaLihtenşteýnŞri-LankaLibe" + + "riýaLesotoLitwaLýuksemburgLatwiýaLiwiýaMarokkoMonakoMoldowaMontenegr" + + "oSen-MartenMadagaskarMarşall adalaryMakedoniýaMaliMýanma (Burma)Mong" + + "oliýaMakau AAS HytaýDemirgazyk Mariana adalaryMartinikaMawritaniýaMo" + + "nserratMaltaMawrikiýMaldiwlerMalawiMeksikaMalaýziýaMozambikNamibiýaT" + + "äze KaledoniýaNigerNorfolk adasyNigeriýaNikaraguaNiderlandiýaNorweg" + + "iýaNepalNauruNiueTäze ZelandiýaOmanPanamaPeruFransuz PolineziýasyPap" + + "ua - Täze GwineýaFilippinlerPakistanPolşaSen-Pýer we MikelonPitkern " + + "adalaryPuerto-RikoPalestina territoriýasyPortugaliýaPalauParagwaýKat" + + "arDaşky OkeaniýaReýunýonRumyniýaSerbiýaRussiýaRuandaSaud ArabystanyS" + + "olomon adalarySeýşel AdalarySudanŞwesiýaSingapurKeramatly Ýelena ada" + + "sySloweniýaŞpisbergen we Ýan-MaýenSlowakiýaSýerra-LeoneSan-MarinoSen" + + "egalSomaliSurinamGünorta SudanSan-Tome we PrinsipiSalwadorSint-Marte" + + "nSiriýaSwazilendTristan-da-KunýaTerks we Kaýkos adalaryÇadFransuz gü" + + "norta territoriýalaryTogoTaýlandTäjigistanTokelauTimor-LesteTürkmeni" + + "stanTunisTongaTürkiýeTrinidad we TobagoTuwaluTaýwanTanzaniýaUkrainaU" + + "gandaABŞ-nyň daşarky adalaryBirleşen Milletler GuramasyAmerikanyň Bi" + + "rleşen ŞtatlaryUrugwaýÖzbegistanWatikanSent-Winsent we GrenadinlerWe" + + "nesuelaBritan Wirgin adalaryABŞ-nyň Wirgin adalaryWýetnamWanuatuUoll" + + "is we FutunaSamoaKosowoÝemenMaýottaGünorta AfrikaZambiýaZimbabweNäbe" + + "lli sebitDunýäAfrikaDemirgazyk AmerikaGünorta AmerikaOkeaniýaGünbata" + + "r AfrikaOrta AmerikaGündogar AfrikaDemirgazyk AfrikaOrta AfrikaAfrik" + + "anyň günorta sebitleriAmerikaAmerikanyň demirgazyk ýurtlaryKarib bas" + + "seýniGündogar AziýaGünorta AziýaGünorta-gündogar AziýaGünorta Ýewrop" + + "aAwstralaziýaMelaneziýaMikroneziýa sebtiPolineziýaAziýaOrta AziýaGün" + + "batar AziýaÝewropaGündogar ÝewropaDemirgazyk ÝewropaGünbatar Ýewropa" + + "Latyn Amerikasy", + []uint16{ // 293 elements + // Entry 0 - 3F + 0x0000, 0x0010, 0x0017, 0x0031, 0x003b, 0x004d, 0x0055, 0x005e, + 0x0068, 0x006e, 0x0078, 0x0081, 0x0091, 0x009a, 0x00a5, 0x00aa, + 0x00b7, 0x00c2, 0x00d9, 0x00e1, 0x00eb, 0x00f3, 0x00ff, 0x0109, + 0x0111, 0x0118, 0x011d, 0x012a, 0x0131, 0x0138, 0x0141, 0x0151, + 0x015b, 0x0169, 0x016e, 0x0178, 0x0180, 0x0187, 0x018c, 0x0192, + 0x01a8, 0x01b8, 0x01d0, 0x01e1, 0x01ee, 0x01fb, 0x0206, 0x020b, + 0x0212, 0x0218, 0x0222, 0x0232, 0x023c, 0x0240, 0x024a, 0x0253, + 0x0263, 0x0267, 0x026f, 0x0279, 0x0289, 0x028f, 0x0296, 0x029e, + // Entry 40 - 7F + 0x02b4, 0x02ba, 0x02cb, 0x02d2, 0x02db, 0x02e2, 0x02f2, 0x02fb, + 0x0304, 0x030d, 0x0321, 0x032d, 0x0338, 0x033c, 0x034c, 0x0358, + 0x0365, 0x036e, 0x0373, 0x0387, 0x038e, 0x0396, 0x03a6, 0x03ac, + 0x03b0, 0x03b9, 0x03c5, 0x03cd, 0x03d5, 0x03de, 0x03f1, 0x03f9, + 0x0426, 0x042f, 0x0433, 0x0441, 0x0448, 0x045a, 0x0473, 0x047b, + 0x0485, 0x048a, 0x0493, 0x04a0, 0x04ab, 0x04b5, 0x04bd, 0x04c6, + 0x04cf, 0x04ff, 0x0503, 0x0509, 0x0513, 0x051b, 0x0520, 0x0529, + 0x0533, 0x053d, 0x0544, 0x054f, 0x0556, 0x055e, 0x056b, 0x057d, + // Entry 80 - BF + 0x058f, 0x059f, 0x05a6, 0x05b5, 0x05bf, 0x05c3, 0x05c8, 0x05d6, + 0x05e3, 0x05ed, 0x05f6, 0x05fc, 0x0601, 0x060d, 0x0615, 0x061c, + 0x0623, 0x0629, 0x0630, 0x063a, 0x0644, 0x064e, 0x065e, 0x0669, + 0x066d, 0x067c, 0x0686, 0x0696, 0x06b0, 0x06b9, 0x06c5, 0x06ce, + 0x06d3, 0x06dc, 0x06e5, 0x06eb, 0x06f2, 0x06fd, 0x0705, 0x070e, + 0x071f, 0x0724, 0x0731, 0x073a, 0x0743, 0x0750, 0x075a, 0x075f, + 0x0764, 0x0768, 0x0778, 0x077c, 0x0782, 0x0786, 0x079b, 0x07b1, + 0x07bc, 0x07c4, 0x07ca, 0x07de, 0x07ed, 0x07f8, 0x0810, 0x081c, + // Entry C0 - FF + 0x0821, 0x082a, 0x082f, 0x083f, 0x0849, 0x0852, 0x085a, 0x0862, + 0x0868, 0x0877, 0x0886, 0x0896, 0x089b, 0x08a4, 0x08ac, 0x08c3, + 0x08cd, 0x08e7, 0x08f1, 0x08fe, 0x0908, 0x090f, 0x0915, 0x091c, + 0x092a, 0x093e, 0x0946, 0x0951, 0x0958, 0x0961, 0x0972, 0x098a, + 0x098e, 0x09af, 0x09b3, 0x09bb, 0x09c6, 0x09cd, 0x09d8, 0x09e5, + 0x09ea, 0x09ef, 0x09f8, 0x0a0a, 0x0a10, 0x0a17, 0x0a21, 0x0a28, + 0x0a2e, 0x0a48, 0x0a64, 0x0a83, 0x0a8b, 0x0a96, 0x0a9d, 0x0ab8, + 0x0ac1, 0x0ad6, 0x0aee, 0x0af6, 0x0afd, 0x0b0d, 0x0b12, 0x0b18, + // Entry 100 - 13F + 0x0b1e, 0x0b26, 0x0b35, 0x0b3d, 0x0b45, 0x0b53, 0x0b5a, 0x0b60, + 0x0b72, 0x0b82, 0x0b8b, 0x0b9b, 0x0ba7, 0x0bb7, 0x0bc8, 0x0bd3, + 0x0bf0, 0x0bf7, 0x0c17, 0x0c26, 0x0c36, 0x0c45, 0x0c5e, 0x0c6f, + 0x0c7c, 0x0c87, 0x0c99, 0x0ca4, 0x0caa, 0x0cb5, 0x0cc5, 0x0ccd, + 0x0cdf, 0x0cf2, 0x0d04, 0x0d04, 0x0d13, + }, + }, { // to "Motu ʻAsenisiniʻAnitolaʻAlepea FakatahatahaʻAfikānisitaniAnitikua mo Pal" + "aputaAnikuilaʻAlipaniaʻĀmeniaʻAngikolaʻAnitātikaʻAsenitinaHaʻamoa ʻA" + @@ -41974,49 +44465,49 @@ var regionHeaders = [252]header{ "mo HesikōvinaPāpeitosiPengilātesiPelesiumePekano FasoPulukaliaPalein" + "iPulunitiPeniniSā PatēlemiPēmutaPuluneiPolīviaKalipiane fakahōlaniPa" + "lāsiliPahamaPūtaniMotu PuvetiPotisiuanaPelalusiPeliseKānataʻOtumotu " + - "KokoKongo - KinisasaLipapilika ʻAfilika LotolotoKongo - PalasavilaSu" + + "KokoKongo - KinisasaLepupelika ʻAfilika LotolotoKongo - PalasavilaSu" + "isilaniMatafonua ʻAivolīʻOtumotu KukiSiliKameluniSiainaKolomipiaMotu" + " KilipatoniKosita LikaKiupaMuiʻi VēteKulasaoMotu KilisimasiSaipalesi" + - "Lipapilika SekiSiamaneTieko KāsiaSiputiTenimaʻakeTominikaLipapilika " + - "TominikaʻAisiliaSiuta mo MelilaʻEkuetoaʻEsitōniaʻIsipiteSahala fakah" + - "ihifoʻElituliaSipeiniʻĪtiōpiaʻIulope fakatahatahaFinilaniFisiʻOtumot" + - "u FokulaniMikolonīsiaʻOtumotu FaloeFalanisēKaponiPilitāniaKelenatāSe" + - "ōsiaKuiana fakafalanisēKuenisīKanaSipalālitāKulinilaniKamipiaKiniKu" + - "atalupeʻEkueta KiniKalisiʻOtumotu Seōsia-tonga mo Saniuisi-tongaKuat" + - "amalaKuamuKini-PisauKuianaHongi Kongi SAR SiainaʻOtumotu Heati mo Ma" + - "kitonaliHonitulasiKuloisiaHaitiHungakaliaʻOtumotu KaneliʻInitonēsiaʻ" + - "AealaniʻIsileliMotu ManiʻInitiaPotu fonua moana ʻInitia fakapilitāni" + - "aʻIlaakiʻIlaaniʻAisilaniʻĪtaliSelusīSamaikaSoataneSiapaniKeniāKīkisi" + - "taniKamipōtiaKilipasiKomolosiSā Kitisi mo NevisiKōlea tokelauKōlea t" + - "ongaKueitiʻOtumotu KeimeniKasakitaniLauLepanoniSā LūsiaLikitenisitei" + - "niSīlangikāLaipeliaLesotoLituaniaLakisimipekiLativiaLīpiaMolokoMonak" + - "oMolotovaMonitenikaloSā Mātini (fakafalanisē)MatakasikaʻOtumotu Māso" + - "loMasetōniaMāliPemaMongokōliaMakau SAR SiainaʻOtumotu Maliana tokela" + - "uMātenikiMauliteniaMoʻungaselatiMalitaMaulitiusiMalativisiMalauiMeki" + - "sikouMalēsiaMosēmipikiNamipiaNiu KaletōniaNisiaMotu NōfolikiNaisilia" + - "NikalakuaHōlaniNoauēNepaliNauluNiuēNuʻusilaʻOmaniPanamāPelūPolinisia" + - " fakafalanisēPapuaniukiniFilipainiPākisitaniPolaniSā Piea mo Mikelon" + - "iʻOtumotu PitikeniPuēto LikoPotu PalesitainePotukaliPalauPalakuaiKat" + - "āʻOsēnia mamaʻoLēunioniLomēniaSēpiaLūsiaLuanitāSaute ʻAlepeaʻOtumot" + - "u SolomoneʻOtumotu SeiseliSūteniSuēteniSingapoaSā HelenaSilōveniaSiv" + - "olopāti mo Sani MaieniSilōvakiaSiela LeoneSā MalinoSenekaloSōmaliaSu" + - "linameSūtani fakatongaSao Tomē mo PilinisipeʻEle SalavatoaSā Mātini " + - "(fakahōlani)SīliaSuasilaniTulisitani ta KunuhaʻOtumotu Tuki mo Kaiko" + - "siSātiPotu fonua tonga fakafalanisēTokoTailaniTasikitaniTokelauTimoa" + - " hahakeTūkimenisitaniTunīsiaTongaToakeTilinitati mo TopakoTūvaluTaiu" + - "aniTenisāniaʻŪkalaʻineʻIukanitāʻOtumotu siʻi ʻo ʻAmelikaPuleʻanga fa" + - "katahataha ʻAmelikaʻUlukuaiʻUsipekitaniKolo VatikaniSā Viniseni mo K" + - "ulenatiniVenesuelaʻOtumotu Vilikini fakapilitāniaʻOtumotu Vilikini f" + - "akaʻamelikaVietinamiVanuatuʻUvea mo FutunaHaʻamoaKōsovoIemeniMaioteʻ" + - "Afilika tongaSemipiaSimipapueiPotu fonua taʻeʻiloa pe halaMāmaniʻAfi" + - "likaʻAmelika tokelauʻAmelika tongaʻOsēniaʻAfilika fakahihifoʻAmelika" + - " lotolotoʻAfilika fakahahakeʻAfilika fakatokelauʻAfilika lotolotoʻAf" + - "ilika fakatongaOngo ʻAmelikaʻAmelika fakatokelauKalipianeʻĒsia fakah" + - "ahakeʻĒsia fakatongaʻĒsia fakatongahahakeʻIulope fakatongaʻAositelēl" + - "ēsiaMelanīsiaPotu fonua MikolonīsiaPolinīsiaʻĒsiaʻĒsia lotolotoʻĒsi" + - "a fakahihifoʻIulopeʻIulope fakahahakeʻIulope fakatokelauʻIulope faka" + - "hihifoʻAmelika fakalatina", - []uint16{ // 292 elements + "SēkiaSiamaneTieko KāsiaSiputiTenimaʻakeTominikaLepupelika TominikaʻA" + + "lisiliaSiuta mo MelilaʻEkuetoaʻEsitōniaʻIsipiteSahala fakahihifoʻEli" + + "tuliaSipeiniʻĪtiōpiaʻEulope fakatahatahaʻEulope fekauʻaki-paʻangaFin" + + "ilaniFisiʻOtumotu FokulaniMikolonīsiaʻOtumotu FaloeFalanisēKaponiPil" + + "itāniaKelenatāSeōsiaKuiana fakafalanisēKuenisīKanaSipalālitāKulinila" + + "niKamipiaKiniKuatalupeʻEkueta KiniKalisiʻOtumotu Seōsia-tonga mo San" + + "iuisi-tongaKuatamalaKuamuKini-PisauKuianaHongi Kongi SAR SiainaʻOtum" + + "otu Heati mo MakitonaliHonitulasiKuloisiaHaitiHungakaliaʻOtumotu Kan" + + "eliʻInitonēsiaʻAealaniʻIsileliMotu ManiʻInitiaPotu fonua moana ʻInit" + + "ia fakapilitāniaʻIlaakiʻIlaaniʻAisilaniʻĪtaliSelusīSamaikaSoataneSia" + + "paniKeniāKīkisitaniKamipōtiaKilipasiKomolosiSā Kitisi mo NevisiKōlea" + + " tokelauKōlea tongaKueitiʻOtumotu KeimeniKasakitaniLauLepanoniSā Lūs" + + "iaLikitenisiteiniSīlangikāLaipeliaLesotoLituaniaLakisimipekiLativiaL" + + "īpiaMolokoMonakoMolotovaMonitenikaloSā Mātini (fakafalanisē)Matakas" + + "ikaʻOtumotu MāsoloMasetōniaMāliPemaMongokōliaMakau SAR SiainaʻOtumot" + + "u Maliana tokelauMātinikiMauliteniaMoʻungaselatiMalitaMaulitiusiMala" + + "tivisiMalauiMekisikouMalēsiaMosēmipikiNamipiaNiu KaletōniaNisiaMotu " + + "NōfolikiNaisiliaNikalakuaHōlaniNoauēNepaliNauluNiuēNuʻusilaʻOmaniPan" + + "amāPelūPolinisia fakafalanisēPapuaniukiniFilipainiPākisitaniPolaniSā" + + " Piea mo MikeloniʻOtumotu PitikeniPuēto LikoPotu PalesitainePotukali" + + "PalauPalakuaiKatāʻOsēnia mamaʻoLēunioniLomēniaSēpiaLūsiaLuanitāSaute" + + " ʻAlepeaʻOtumotu SolomoneʻOtumotu SeiseliSūteniSuēteniSingapoaSā Hel" + + "enaSilōveniaSivolopāti mo Sani MaieniSilōvakiaSiela LeoneSā MalinoSe" + + "nekaloSōmaliaSulinameSūtani fakatongaSao Tomē mo PilinisipeʻEle Sala" + + "vatoaSā Mātini (fakahōlani)SīliaSuasilaniTulisitani ta KunuhaʻOtumot" + + "u Tuki mo KaikosiSātiPotu fonua tonga fakafalanisēTokoTailaniTasikit" + + "aniTokelauTimoa hahakeTūkimenisitaniTunīsiaTongaToakeTilinitati mo T" + + "opakoTūvaluTaiuaniTenisāniaʻŪkalaʻineʻIukanitāʻOtumotu siʻi ʻo ʻAmel" + + "ikaʻŪ fonua fakatahatahaPuleʻanga fakatahataha ʻAmelikaʻUlukuaiʻUsip" + + "ekitaniKolo VatikaniSā Viniseni mo KulenatiniVenesuelaʻOtumotu Vilik" + + "ini fakapilitāniaʻOtumotu Vilikini fakaʻamelikaVietinamiVanuatuʻUvea" + + " mo FutunaHaʻamoaKōsovoIemeniMaioteʻAfilika tongaSemipiaSimipapueiPo" + + "tu fonua taʻeʻiloa pe halaMāmaniʻAfilikaʻAmelika tokelauʻAmelika ton" + + "gaʻOsēniaʻAfilika fakahihifoʻAmelika lotolotoʻAfilika fakahahakeʻAfi" + + "lika fakatokelauʻAfilika lotolotoʻAfilika fakatongaOngo ʻAmelikaʻAme" + + "lika fakatokelauKalipianeʻĒsia fakahahakeʻĒsia fakatongaʻĒsia fakato" + + "ngahahakeʻEulope fakatongaʻAositelēlēsiaMelanīsiaPotu fonua Mikolonī" + + "siaPolinīsiaʻĒsiaʻĒsia lotolotoʻĒsia fakahihifoʻEulopeʻEulope fakaha" + + "hakeʻEulope fakatokelauʻEulope fakahihifoʻAmelika fakalatina", + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0010, 0x0019, 0x002e, 0x003e, 0x0052, 0x005a, 0x0064, 0x006d, 0x0077, 0x0083, 0x008e, 0x00a0, 0x00ab, 0x00b9, 0x00c0, @@ -42025,46 +44516,124 @@ var regionHeaders = [252]header{ 0x017c, 0x0182, 0x0189, 0x0194, 0x019e, 0x01a6, 0x01ac, 0x01b3, 0x01c1, 0x01d1, 0x01ee, 0x0200, 0x0209, 0x021c, 0x022a, 0x022e, 0x0236, 0x023c, 0x0245, 0x0254, 0x025f, 0x0264, 0x0270, 0x0277, - 0x0286, 0x028f, 0x029e, 0x02a5, 0x02b1, 0x02b7, 0x02c2, 0x02ca, - // Entry 40 - 7F - 0x02dd, 0x02e6, 0x02f5, 0x02fe, 0x0309, 0x0312, 0x0323, 0x032d, - 0x0334, 0x033f, 0x0354, 0x0354, 0x035c, 0x0360, 0x0372, 0x037e, - 0x038d, 0x0396, 0x039c, 0x03a6, 0x03af, 0x03b6, 0x03ca, 0x03d2, - 0x03d6, 0x03e2, 0x03ec, 0x03f3, 0x03f7, 0x0400, 0x040d, 0x0413, - 0x043c, 0x0445, 0x044a, 0x0454, 0x045a, 0x0470, 0x048d, 0x0497, - 0x049f, 0x04a4, 0x04ae, 0x04be, 0x04cb, 0x04d4, 0x04dd, 0x04e6, - 0x04ee, 0x0516, 0x051e, 0x0526, 0x0530, 0x0538, 0x053f, 0x0546, - 0x054d, 0x0554, 0x055a, 0x0565, 0x056f, 0x0577, 0x057f, 0x0593, - // Entry 80 - BF - 0x05a1, 0x05ad, 0x05b3, 0x05c4, 0x05ce, 0x05d1, 0x05d9, 0x05e3, - 0x05f2, 0x05fd, 0x0605, 0x060b, 0x0613, 0x061f, 0x0626, 0x062c, - 0x0632, 0x0638, 0x0640, 0x064c, 0x0667, 0x0671, 0x0682, 0x068c, - 0x0691, 0x0695, 0x06a0, 0x06b0, 0x06c9, 0x06d2, 0x06dc, 0x06ea, - 0x06f0, 0x06fa, 0x0704, 0x070a, 0x0713, 0x071b, 0x0726, 0x072d, - 0x073b, 0x0740, 0x074e, 0x0756, 0x075f, 0x0766, 0x076c, 0x0772, - 0x0777, 0x077c, 0x0785, 0x078c, 0x0793, 0x0798, 0x07af, 0x07bb, - 0x07c4, 0x07cf, 0x07d5, 0x07e9, 0x07fb, 0x0806, 0x0816, 0x081e, - // Entry C0 - FF - 0x0823, 0x082b, 0x0830, 0x0841, 0x084a, 0x0852, 0x0858, 0x085e, - 0x0866, 0x0874, 0x0886, 0x0897, 0x089e, 0x08a6, 0x08ae, 0x08b8, - 0x08c2, 0x08dc, 0x08e6, 0x08f1, 0x08fb, 0x0903, 0x090b, 0x0913, - 0x0924, 0x093b, 0x094a, 0x0963, 0x0969, 0x0972, 0x0986, 0x099f, - 0x09a4, 0x09c2, 0x09c6, 0x09cd, 0x09d7, 0x09de, 0x09ea, 0x09f9, - 0x0a01, 0x0a06, 0x0a0b, 0x0a1f, 0x0a26, 0x0a2d, 0x0a37, 0x0a44, - 0x0a4f, 0x0a6c, 0x0a6c, 0x0a8d, 0x0a96, 0x0aa3, 0x0ab0, 0x0aca, - 0x0ad3, 0x0af4, 0x0b14, 0x0b1d, 0x0b24, 0x0b34, 0x0b3c, 0x0b43, - // Entry 100 - 13F - 0x0b49, 0x0b4f, 0x0b5e, 0x0b65, 0x0b6f, 0x0b8d, 0x0b94, 0x0b9d, - 0x0bae, 0x0bbd, 0x0bc6, 0x0bda, 0x0bec, 0x0c00, 0x0c15, 0x0c27, - 0x0c3a, 0x0c48, 0x0c5d, 0x0c66, 0x0c78, 0x0c89, 0x0ca0, 0x0cb2, - 0x0cc3, 0x0ccd, 0x0ce4, 0x0cee, 0x0cf5, 0x0d05, 0x0d17, 0x0d1f, - 0x0d32, 0x0d46, 0x0d59, 0x0d6d, + 0x0286, 0x028f, 0x0295, 0x029c, 0x02a8, 0x02ae, 0x02b9, 0x02c1, + // Entry 40 - 7F + 0x02d4, 0x02de, 0x02ed, 0x02f6, 0x0301, 0x030a, 0x031b, 0x0325, + 0x032c, 0x0337, 0x034c, 0x0368, 0x0370, 0x0374, 0x0386, 0x0392, + 0x03a1, 0x03aa, 0x03b0, 0x03ba, 0x03c3, 0x03ca, 0x03de, 0x03e6, + 0x03ea, 0x03f6, 0x0400, 0x0407, 0x040b, 0x0414, 0x0421, 0x0427, + 0x0450, 0x0459, 0x045e, 0x0468, 0x046e, 0x0484, 0x04a1, 0x04ab, + 0x04b3, 0x04b8, 0x04c2, 0x04d2, 0x04df, 0x04e8, 0x04f1, 0x04fa, + 0x0502, 0x052a, 0x0532, 0x053a, 0x0544, 0x054c, 0x0553, 0x055a, + 0x0561, 0x0568, 0x056e, 0x0579, 0x0583, 0x058b, 0x0593, 0x05a7, + // Entry 80 - BF + 0x05b5, 0x05c1, 0x05c7, 0x05d8, 0x05e2, 0x05e5, 0x05ed, 0x05f7, + 0x0606, 0x0611, 0x0619, 0x061f, 0x0627, 0x0633, 0x063a, 0x0640, + 0x0646, 0x064c, 0x0654, 0x0660, 0x067b, 0x0685, 0x0696, 0x06a0, + 0x06a5, 0x06a9, 0x06b4, 0x06c4, 0x06dd, 0x06e6, 0x06f0, 0x06fe, + 0x0704, 0x070e, 0x0718, 0x071e, 0x0727, 0x072f, 0x073a, 0x0741, + 0x074f, 0x0754, 0x0762, 0x076a, 0x0773, 0x077a, 0x0780, 0x0786, + 0x078b, 0x0790, 0x0799, 0x07a0, 0x07a7, 0x07ac, 0x07c3, 0x07cf, + 0x07d8, 0x07e3, 0x07e9, 0x07fd, 0x080f, 0x081a, 0x082a, 0x0832, + // Entry C0 - FF + 0x0837, 0x083f, 0x0844, 0x0855, 0x085e, 0x0866, 0x086c, 0x0872, + 0x087a, 0x0888, 0x089a, 0x08ab, 0x08b2, 0x08ba, 0x08c2, 0x08cc, + 0x08d6, 0x08f0, 0x08fa, 0x0905, 0x090f, 0x0917, 0x091f, 0x0927, + 0x0938, 0x094f, 0x095e, 0x0977, 0x097d, 0x0986, 0x099a, 0x09b3, + 0x09b8, 0x09d6, 0x09da, 0x09e1, 0x09eb, 0x09f2, 0x09fe, 0x0a0d, + 0x0a15, 0x0a1a, 0x0a1f, 0x0a33, 0x0a3a, 0x0a41, 0x0a4b, 0x0a58, + 0x0a63, 0x0a80, 0x0a97, 0x0ab8, 0x0ac1, 0x0ace, 0x0adb, 0x0af5, + 0x0afe, 0x0b1f, 0x0b3f, 0x0b48, 0x0b4f, 0x0b5f, 0x0b67, 0x0b6e, + // Entry 100 - 13F + 0x0b74, 0x0b7a, 0x0b89, 0x0b90, 0x0b9a, 0x0bb8, 0x0bbf, 0x0bc8, + 0x0bd9, 0x0be8, 0x0bf1, 0x0c05, 0x0c17, 0x0c2b, 0x0c40, 0x0c52, + 0x0c65, 0x0c73, 0x0c88, 0x0c91, 0x0ca3, 0x0cb4, 0x0ccb, 0x0cdd, + 0x0cee, 0x0cf8, 0x0d0f, 0x0d19, 0x0d20, 0x0d30, 0x0d42, 0x0d4a, + 0x0d5d, 0x0d71, 0x0d84, 0x0d84, 0x0d98, }, }, { // tr trRegionStr, trRegionIdx, }, + { // tt + "АндорраБерләшкән Гарәп ӘмирлекләреӘфганстанАнтигуа һәм БарбудаАнгильяАлб" + + "анияӘрмәнстанАнголаАнтарктикаАргентинаАмерика СамоасыАвстрияАвстрал" + + "ияАрубаАланд утрауларыӘзәрбайҗанБосния һәм ГерцеговинаБарбадосБангл" + + "адешБельгияБуркина-ФасоБолгарияБәхрәйнБурундиБенинСен-БартельмиБерм" + + "уд утрауларыБрунейБоливияБразилияБагам утрауларыБутанБуве утравыБот" + + "сванаБеларусьБелизКанадаКокос (Килинг) утрауларыҮзәк Африка Республ" + + "икасыШвейцарияКот-д’ИвуарКук утрауларыЧилиКамерунКытайКолумбияКоста" + + "-РикаКубаКабо-ВердеКюрасаоРаштуа утравыКипрЧехия РеспубликасыГермани" + + "яҖибүтиДанияДоминикаДоминикана РеспубликасыАлжирЭквадорЭстонияМисыр" + + "ЭритреяИспанияЭфиопияФинляндияФиджиФолкленд утрауларыМикронезияФаре" + + "р утрауларыФранцияГабонБөекбританияГренадаГрузияФранцуз ГвианасыГер" + + "нсиГанаГибралтарГренландияГамбияГвинеяГваделупаЭкваториаль ГвинеяГр" + + "ецияКөньяк Георгия һәм Көньяк Сандвич утрауларыГватемалаГуамГвинея-" + + "БисауГайанаГонконг Махсус Идарәле ТөбәгеХерд утравы һәм Макдональд " + + "утрауларыГондурасХорватияГаитиВенгрияИндонезияИрландияИзраильМэн ут" + + "равыИндияБританиянең Һинд Океанындагы ТерриториясеГыйракИранИсланди" + + "яИталияДжерсиЯмайкаИорданияЯпонияКенияКыргызстанКамбоджаКирибатиКом" + + "ор утрауларыСент-Китс һәм НевисТөньяк КореяКүвәйтКайман утрауларыКа" + + "захстанЛаосЛиванСент-ЛюсияЛихтенштейнШри-ЛанкаЛиберияЛесотоЛитваЛюк" + + "сембургЛатвияЛивияМароккоМонакоМолдоваЧерногорияСент-МартинМадагаск" + + "арМаршалл утрауларыМалиМонголияМакао Махсус Идарәле ТөбәгеТөньяк Ма" + + "риана утрауларыМартиникаМавританияМонтсерратМальтаМаврикийМальдив у" + + "трауларыМалавиМексикаМалайзияМозамбикНамибияЯңа КаледонияНигерНорфо" + + "лк утравыНигерияНикарагуаНидерландНорвегияНепалНауруНиуэЯңа Зеланди" + + "яОманПанамаПеруФранцуз ПолинезиясеПапуа - Яңа ГвинеяФилиппинПакиста" + + "нПольшаСен-Пьер һәм МикелонПиткэрн утрауларыПуэрто-РикоПортугалияПа" + + "лауПарагвайКатарРеюньонРумынияСербияРоссияРуандаСогуд ГарәбстаныСөл" + + "әйман утрауларыСейшел утрауларыСуданШвецияСингапурСловенияШпицберге" + + "н һәм Ян-МайенСловакияСьерра-ЛеонеСан-МариноСенегалСомалиСуринамКөн" + + "ьяк СуданСан-Томе һәм ПринсипиСальвадорСинт-МартенСүрияСвазилендТер" + + "кс һәм Кайкос утрауларыЧадФранциянең Көньяк ТерриторияләреТогоТайла" + + "ндТаҗикстанТокелауТимор-ЛестеТөркмәнстанТунисТонгаТөркияТринидад һә" + + "м ТобагоТувалуТайваньТанзанияУкраинаУгандаАКШ Кече Читтәге утраулар" + + "ыАКШУругвайҮзбәкстанСент-Винсент һәм ГренадинВенесуэлаБритания Вирг" + + "ин утрауларыАКШ Виргин утрауларыВьетнамВануатуУоллис һәм ФутунаСамо" + + "аКосовоЙәмәнМайоттаКөньяк АфрикаЗамбияЗимбабвебилгесез төбәк", + []uint16{ // 262 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x000e, 0x0042, 0x0054, 0x0078, 0x0086, 0x0094, + 0x00a6, 0x00b2, 0x00c6, 0x00d8, 0x00f5, 0x0103, 0x0115, 0x011f, + 0x013c, 0x0150, 0x017a, 0x018a, 0x019c, 0x01aa, 0x01c1, 0x01d1, + 0x01df, 0x01ed, 0x01f7, 0x0210, 0x022f, 0x023b, 0x0249, 0x0249, + 0x0259, 0x0276, 0x0280, 0x0295, 0x02a5, 0x02b5, 0x02bf, 0x02cb, + 0x02f7, 0x02f7, 0x0325, 0x0325, 0x0337, 0x034d, 0x0366, 0x036e, + 0x037c, 0x0386, 0x0396, 0x0396, 0x03a9, 0x03b1, 0x03c4, 0x03d2, + 0x03eb, 0x03f3, 0x0416, 0x0426, 0x0426, 0x0432, 0x043c, 0x044c, + // Entry 40 - 7F + 0x0479, 0x0483, 0x0483, 0x0491, 0x049f, 0x04a9, 0x04a9, 0x04b7, + 0x04c5, 0x04d3, 0x04d3, 0x04d3, 0x04e5, 0x04ef, 0x0512, 0x0526, + 0x0543, 0x0551, 0x055b, 0x0573, 0x0581, 0x058d, 0x05ac, 0x05b8, + 0x05c0, 0x05d2, 0x05e6, 0x05f2, 0x05fe, 0x0610, 0x0633, 0x063f, + 0x0690, 0x06a2, 0x06aa, 0x06c1, 0x06cd, 0x0704, 0x0748, 0x0758, + 0x0768, 0x0772, 0x0780, 0x0780, 0x0792, 0x07a2, 0x07b0, 0x07c3, + 0x07cd, 0x081c, 0x0828, 0x0830, 0x0840, 0x084c, 0x0858, 0x0864, + 0x0874, 0x0880, 0x088a, 0x089e, 0x08ae, 0x08be, 0x08db, 0x08fe, + // Entry 80 - BF + 0x0915, 0x0915, 0x0921, 0x0940, 0x0952, 0x095a, 0x0964, 0x0977, + 0x098d, 0x099e, 0x09ac, 0x09b8, 0x09c2, 0x09d6, 0x09e2, 0x09ec, + 0x09fa, 0x0a06, 0x0a14, 0x0a28, 0x0a3d, 0x0a51, 0x0a72, 0x0a72, + 0x0a7a, 0x0a7a, 0x0a8a, 0x0abd, 0x0aeb, 0x0afd, 0x0b11, 0x0b25, + 0x0b31, 0x0b41, 0x0b62, 0x0b6e, 0x0b7c, 0x0b8c, 0x0b9c, 0x0baa, + 0x0bc3, 0x0bcd, 0x0be8, 0x0bf6, 0x0c08, 0x0c1a, 0x0c2a, 0x0c34, + 0x0c3e, 0x0c46, 0x0c5d, 0x0c65, 0x0c71, 0x0c79, 0x0c9e, 0x0cbe, + 0x0cce, 0x0cde, 0x0cea, 0x0d0f, 0x0d30, 0x0d45, 0x0d45, 0x0d59, + // Entry C0 - FF + 0x0d63, 0x0d73, 0x0d7d, 0x0d7d, 0x0d8b, 0x0d99, 0x0da5, 0x0db1, + 0x0dbd, 0x0ddc, 0x0dff, 0x0e1e, 0x0e28, 0x0e34, 0x0e44, 0x0e44, + 0x0e54, 0x0e7f, 0x0e8f, 0x0ea6, 0x0eb9, 0x0ec7, 0x0ed3, 0x0ee1, + 0x0ef8, 0x0f1f, 0x0f31, 0x0f46, 0x0f50, 0x0f62, 0x0f62, 0x0f93, + 0x0f99, 0x0fd7, 0x0fdf, 0x0fed, 0x0fff, 0x100d, 0x1022, 0x1038, + 0x1042, 0x104c, 0x1058, 0x107c, 0x1088, 0x1096, 0x10a6, 0x10b4, + 0x10c0, 0x10f1, 0x10f1, 0x10f7, 0x1105, 0x1117, 0x1117, 0x1146, + 0x1158, 0x1188, 0x11ae, 0x11bc, 0x11ca, 0x11ea, 0x11f4, 0x1200, + // Entry 100 - 13F + 0x120a, 0x1218, 0x1231, 0x123d, 0x124d, 0x1268, + }, + }, { // twq "AndooraLaaraw Imaarawey MarganteyAfgaanistanAntigua nda BarbuudaAngiiyaA" + "lbaaniArmeeniAngoolaArgentineAmeriki SamoaOtrišiOstraaliAruubaAzerba" + @@ -42261,7 +44830,7 @@ var regionHeaders = [252]header{ " جەنۇبىي ئاسىياجەنۇبىي ياۋروپائاۋسترالئاسىيامېلانېسىيەمىكرونېزىيە را" + "يونىپولىنىزىيەئاسىيائوتتۇرا ئاسىياغەربىي ئاسىياياۋروپاشەرقىي ياۋروپ" + "اشىمالىي ياۋروپاغەربىي ياۋروپالاتىن ئامېرىكا", - []uint16{ // 292 elements + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0023, 0x0033, 0x0063, 0x0079, 0x009f, 0x00b1, 0x00c3, 0x00d5, 0x00e3, 0x00f9, 0x010d, 0x012a, 0x0140, 0x0156, 0x0162, @@ -42303,7 +44872,7 @@ var regionHeaders = [252]header{ 0x160d, 0x162c, 0x163e, 0x1659, 0x1678, 0x1693, 0x16b0, 0x16cd, 0x16f7, 0x1707, 0x1733, 0x174a, 0x1763, 0x177e, 0x17a6, 0x17c3, 0x17df, 0x17f3, 0x1816, 0x182a, 0x1836, 0x1851, 0x186a, 0x1878, - 0x1893, 0x18b0, 0x18cb, 0x18e6, + 0x1893, 0x18b0, 0x18cb, 0x18cb, 0x18e6, }, }, { // uk @@ -42371,153 +44940,157 @@ var regionHeaders = [252]header{ }, { // uz-Cyrl "Меърож оролиАндорраБирлашган Араб АмирликлариАфғонистонАнтигуа ва Барбуд" + - "аАнгиляАлбанияАрманистонАнголаАнтарктидаАргентинаАмерика СамоасиАвс" + - "трияАвстралияАрубаАланд ороллариОзарбайжонБосния ва ГерцеговинаБарб" + - "адосБангладешБельгияБуркина-ФасоБолгарияБаҳрайнБурундиБенинСен-Барт" + - "елемиБермудаБрунейБоливияБонейр, Синт-Эстатиус ва СабаБразилияБагам" + - "а ороллариБутанБуве оролиБотсваннаБелорусияБелизКанадаКокос (Килинг" + - ") ороллариКонго-КиншасаМарказий Африка РеспубликасиКонго БраззавильШ" + - "вейцарияКот-д’ИвуарКук ороллариЧилиКамерунХитойКолумбияКлиппертон о" + - "ролиКоста-РикаКубаКабо-ВердеКюрасаоРождество оролиКипрЧехия Республ" + - "икасиГерманияДиего-ГарсияЖибутиДанияДоминикаДоминикан РеспубликасиЖ" + - "азоирСэута ва МелиллаЭквадорЭстонияМисрҒарбий Саҳрои КабирЭритреяИс" + - "панияЭфиопияЕвропа ИттифоқиФинляндияФижиФолкленд ороллариМикронезия" + - "Фарер ороллариФранцияГабонБуюк БританияГренадаГрузияФранцуз Гвианас" + - "иГернсиГанаГибралтарГренландияГамбияГвинеяГваделупеЭкваториал Гвине" + - "яГрецияЖанубий Георгия ва Жанубий Сендвич ороллариГватемалаГуамГвин" + - "ея-БисауГаянаГонконг (Хитой ММҲ)Херд ва Макдоналд ороллариГондурасХ" + - "орватияГаитиВенгрияКанар ороллариИндонезияИрландияИсроилМэн оролиҲи" + - "ндистонБританиянинг Ҳинд океанидаги ҳудудиИроқЭронИсландияИталияЖер" + - "сиЯмайкаИорданияЯпонияКенияҚирғизистонКамбоджаКирибатиКомор ороллар" + - "иСент-Китс ва НевисШимолий КореяЖанубий КореяҚувайтКайман ороллариҚ" + - "озоғистонЛаосЛиванСент-ЛюсияЛихтенштейнШри-ЛанкаЛиберияЛесотоЛитваЛ" + - "юксембургЛатвияЛивияМарокашМонакоМолдоваЧерногорияСент-МартинМадага" + - "скарМаршал ороллариМакедонияМалиМьянма (Бирма)МонголияМакао (Хитой " + - "ММҲ)Шимолий Марианна ороллариМартиникаМавританияМонтсерратМальтаМав" + - "рикийМальдив ороллариМалавиМексикаМалайзияМозамбикНамибияЯнги Калед" + - "онияНигерНорфолк ороллариНигерияНикарагуаНидерландияНорвегияНепалНа" + - "уруНиуэЯнги ЗеландияУммонПанамаПеруФранцуз ПолинезиясиПапуа - Янги " + - "ГвинеяФилиппинПокистонПольшаСент-Пьер ва МикелонПиткэрн ороллариПуэ" + - "рто-РикоФаластин ҳудудиПортугалияПалауПарагвайҚатарЁндош ОкеанияРею" + - "нионРуминияСербияРоссияРуандаСаудия АрабистониСоломон ороллариСейше" + - "л ороллариСуданШвецияСингапурМуқаддас Елена оролиСловенияСвалбард в" + - "а Ян-МайенСловакияСьерра-ЛеонеСан-МариноСенегалСомалиСуринамЖанубий" + - " СуданСан-Томе ва ПринсипиСалвадорСинт-МартенСурияСвазилендТристан-д" + - "а-КуняТуркс ва Кайкос ороллариЧадФранцуз жанубий худудлариТогоТаила" + - "ндТожикистонТокелауТимор-ЛестеТуркманистонТунисТонгаТуркияТринидад " + - "ва ТобагоТувалуТайванТанзанияУкраинаУгандаАҚШ ёндош ороллариАмерика" + - " Қўшма ШтатлариУругвайЎзбекистонВатиканСент-Винсент ва ГренадинВенес" + - "уэлаБртания Виргин ороллариАҚШ Виргин ороллариВьетнамВануатуУоллис " + - "ва ФутунаСамоаКосовоЯманМайоттаЖанубий Африка РеспубликасиЗамбияЗим" + - "бабвеНомаълум минтақаДунёАфрикаШимолий АмерикаЖанубий АмерикаОкеани" + - "яҒарбий АфрикаМарказий АмерикаШарқий АфрикаШимолий АфрикаМарказий А" + - "фрикаЖануби-АфрикаАмерикаШимоли-АмерикаКариб ҳавзасиШарқий ОсиёЖану" + - "бий ОсиёЖанубий-Шарқий ОсиёЖанубий ЕвропаАвстралазияМеланезияМикрон" + - "езия минтақасиПолинезияОсиёМарказий ОсиёҒарбий ОсиёЕвропаШарқий Евр" + - "опаШимолий ЕвропаҒарбий ЕвропаЛотин Америкаси", - []uint16{ // 292 elements - // Entry 0 - 3F - 0x0000, 0x0017, 0x0025, 0x0057, 0x006b, 0x008d, 0x0099, 0x00a7, - 0x00bb, 0x00c7, 0x00db, 0x00ed, 0x010a, 0x0118, 0x012a, 0x0134, - 0x014f, 0x0163, 0x018b, 0x019b, 0x01ad, 0x01bb, 0x01d2, 0x01e2, - 0x01f0, 0x01fe, 0x0208, 0x0221, 0x022f, 0x023b, 0x0249, 0x027e, - 0x028e, 0x02ab, 0x02b5, 0x02c8, 0x02da, 0x02ec, 0x02f6, 0x0302, - 0x032c, 0x0345, 0x037b, 0x039a, 0x03ac, 0x03c2, 0x03d9, 0x03e1, - 0x03ef, 0x03f9, 0x0409, 0x0428, 0x043b, 0x0443, 0x0456, 0x0464, - 0x0481, 0x0489, 0x04ac, 0x04bc, 0x04d3, 0x04df, 0x04e9, 0x04f9, - // Entry 40 - 7F - 0x0524, 0x0530, 0x054e, 0x055c, 0x056a, 0x0572, 0x0596, 0x05a4, - 0x05b2, 0x05c0, 0x05dd, 0x05dd, 0x05ef, 0x05f7, 0x0618, 0x062c, - 0x0647, 0x0655, 0x065f, 0x0678, 0x0686, 0x0692, 0x06b1, 0x06bd, - 0x06c5, 0x06d7, 0x06eb, 0x06f7, 0x0703, 0x0715, 0x0736, 0x0742, - 0x0793, 0x07a5, 0x07ad, 0x07c4, 0x07ce, 0x07f0, 0x0821, 0x0831, - 0x0841, 0x084b, 0x0859, 0x0874, 0x0886, 0x0896, 0x08a2, 0x08b3, - 0x08c5, 0x0908, 0x0910, 0x0918, 0x0928, 0x0934, 0x093e, 0x094a, - 0x095a, 0x0966, 0x0970, 0x0986, 0x0996, 0x09a6, 0x09c1, 0x09e2, - // Entry 80 - BF - 0x09fb, 0x0a14, 0x0a20, 0x0a3d, 0x0a51, 0x0a59, 0x0a63, 0x0a76, - 0x0a8c, 0x0a9d, 0x0aab, 0x0ab7, 0x0ac1, 0x0ad5, 0x0ae1, 0x0aeb, - 0x0af9, 0x0b05, 0x0b13, 0x0b27, 0x0b3c, 0x0b50, 0x0b6d, 0x0b7f, - 0x0b87, 0x0ba0, 0x0bb0, 0x0bce, 0x0bfe, 0x0c10, 0x0c24, 0x0c38, - 0x0c44, 0x0c54, 0x0c73, 0x0c7f, 0x0c8d, 0x0c9d, 0x0cad, 0x0cbb, - 0x0cd6, 0x0ce0, 0x0cff, 0x0d0d, 0x0d1f, 0x0d35, 0x0d45, 0x0d4f, - 0x0d59, 0x0d61, 0x0d7a, 0x0d84, 0x0d90, 0x0d98, 0x0dbd, 0x0ddf, - 0x0def, 0x0dff, 0x0e0b, 0x0e30, 0x0e4f, 0x0e64, 0x0e81, 0x0e95, - // Entry C0 - FF - 0x0e9f, 0x0eaf, 0x0eb9, 0x0ed2, 0x0ee0, 0x0eee, 0x0efa, 0x0f06, - 0x0f12, 0x0f33, 0x0f52, 0x0f6f, 0x0f79, 0x0f85, 0x0f95, 0x0fbb, - 0x0fcb, 0x0ff0, 0x1000, 0x1017, 0x102a, 0x1038, 0x1044, 0x1052, - 0x106b, 0x1090, 0x10a0, 0x10b5, 0x10bf, 0x10d1, 0x10ed, 0x111a, - 0x1120, 0x1150, 0x1158, 0x1166, 0x117a, 0x1188, 0x119d, 0x11b5, - 0x11bf, 0x11c9, 0x11d5, 0x11f7, 0x1203, 0x120f, 0x121f, 0x122d, - 0x1239, 0x125b, 0x125b, 0x1285, 0x1293, 0x12a7, 0x12b5, 0x12e2, - 0x12f4, 0x1320, 0x1344, 0x1352, 0x1360, 0x137e, 0x1388, 0x1394, - // Entry 100 - 13F - 0x139c, 0x13aa, 0x13de, 0x13ea, 0x13fa, 0x1419, 0x1421, 0x142d, - 0x144a, 0x1467, 0x1475, 0x148e, 0x14ad, 0x14c6, 0x14e1, 0x14fe, - 0x1517, 0x1525, 0x1540, 0x1559, 0x156e, 0x1585, 0x15a9, 0x15c4, - 0x15da, 0x15ec, 0x1613, 0x1625, 0x162d, 0x1646, 0x165b, 0x1667, - 0x1680, 0x169b, 0x16b4, 0x16d1, + "аАнгильяАлбанияАрманистонАнголаАнтарктидаАргентинаАмерика СамоасиАв" + + "стрияАвстралияАрубаАланд ороллариОзарбайжонБосния ва ГерцеговинаБар" + + "бадосБангладешБельгияБуркина-ФасоБолгарияБаҳрайнБурундиБенинСен-Бар" + + "телемиБермудаБрунейБоливияБонейр, Синт-Эстатиус ва СабаБразилияБага" + + "ма ороллариБутанБуве оролиБотсваннаБеларусБелизКанадаКокос (Килинг)" + + " ороллариКонго-КиншасаМарказий Африка РеспубликасиКонго БраззавильШв" + + "ейцарияКот-д’ИвуарКук ороллариЧилиКамерунХитойКолумбияКлиппертон ор" + + "олиКоста-РикаКубаКабо-ВердеКюрасаоРождество оролиКипрЧехияГерманияД" + + "иего-ГарсияЖибутиДанияДоминикаДоминикан РеспубликасиЖазоирСэута ва " + + "МелиллаЭквадорЭстонияМисрҒарбий Саҳрои КабирЭритреяИспанияЭфиопияЕв" + + "ропа ИттифоқиФинляндияФижиФолкленд ороллариМикронезияФарер ороллари" + + "ФранцияГабонБуюк БританияГренадаГрузияФранцуз ГвианасиГернсиГанаГиб" + + "ралтарГренландияГамбияГвинеяГваделупеЭкваториал ГвинеяГрецияЖанубий" + + " Георгия ва Жанубий Сендвич ороллариГватемалаГуамГвинея-БисауГаянаГо" + + "нконг (Хитой ММҲ)Херд ва Макдоналд ороллариГондурасХорватияГаитиВен" + + "грияКанар ороллариИндонезияИрландияИсроилМэн оролиҲиндистонБритания" + + "нинг Ҳинд океанидаги ҳудудиИроқЭронИсландияИталияЖерсиЯмайкаИордани" + + "яЯпонияКенияҚирғизистонКамбоджаКирибатиКомор ороллариСент-Китс ва Н" + + "евисШимолий КореяЖанубий КореяҚувайтКайман ороллариҚозоғистонЛаосЛи" + + "ванСент-ЛюсияЛихтенштейнШри-ЛанкаЛиберияЛесотоЛитваЛюксембургЛатвия" + + "ЛивияМарокашМонакоМолдоваЧерногорияСент-МартинМадагаскарМаршал орол" + + "лариМакедонияМалиМьянма (Бирма)МонголияМакао (Хитой ММҲ)Шимолий Мар" + + "ианна ороллариМартиникаМавританияМонтсерратМальтаМаврикийМальдив ор" + + "оллариМалавиМексикаМалайзияМозамбикНамибияЯнги КаледонияНигерНорфол" + + "к ороллариНигерияНикарагуаНидерландияНорвегияНепалНауруНиуэЯнги Зел" + + "андияУммонПанамаПеруФранцуз ПолинезиясиПапуа - Янги ГвинеяФилиппинП" + + "окистонПольшаСент-Пьер ва МикелонПиткэрн ороллариПуэрто-РикоФаласти" + + "н ҳудудиПортугалияПалауПарагвайҚатарЁндош ОкеанияРеюнионРуминияСерб" + + "ияРоссияРуандаСаудия АрабистониСоломон ороллариСейшел ороллариСудан" + + "ШвецияСингапурМуқаддас Елена оролиСловенияСвалбард ва Ян-МайенСлова" + + "кияСьерра-ЛеонеСан-МариноСенегалСомалиСуринамЖанубий СуданСан-Томе " + + "ва ПринсипиСалвадорСинт-МартенСурияСвазилендТристан-да-КуняТуркс ва" + + " Кайкос ороллариЧадФранцуз жанубий ҳудудлариТогоТаиландТожикистонТок" + + "елауТимор-ЛестеТуркманистонТунисТонгаТуркияТринидад ва ТобагоТувалу" + + "ТайванТанзанияУкраинаУгандаАҚШ ёндош ороллариАмерика Қўшма Штатлари" + + "УругвайЎзбекистонВатиканСент-Винсент ва ГренадинВенесуэлаБритания В" + + "иргин ороллариАҚШ Виргин ороллариВьетнамВануатуУоллис ва ФутунаСамо" + + "аКосовоЯманМайоттаЖанубий Африка РеспубликасиЗамбияЗимбабвеНомаълум" + + " минтақаДунёАфрикаШимолий АмерикаЖанубий АмерикаОкеанияҒарбий Африка" + + "Марказий АмерикаШарқий АфрикаШимолий АфрикаМарказий АфрикаЖануби-Аф" + + "рикаАмерикаШимоли-АмерикаКариб ҳавзасиШарқий ОсиёЖанубий ОсиёЖануби" + + "й-Шарқий ОсиёЖанубий ЕвропаАвстралазияМеланезияМикронезия минтақаси" + + "ПолинезияОсиёМарказий ОсиёҒарбий ОсиёЕвропаШарқий ЕвропаШимолий Евр" + + "опаҒарбий ЕвропаЛотин Америкаси", + []uint16{ // 293 elements + // Entry 0 - 3F + 0x0000, 0x0017, 0x0025, 0x0057, 0x006b, 0x008d, 0x009b, 0x00a9, + 0x00bd, 0x00c9, 0x00dd, 0x00ef, 0x010c, 0x011a, 0x012c, 0x0136, + 0x0151, 0x0165, 0x018d, 0x019d, 0x01af, 0x01bd, 0x01d4, 0x01e4, + 0x01f2, 0x0200, 0x020a, 0x0223, 0x0231, 0x023d, 0x024b, 0x0280, + 0x0290, 0x02ad, 0x02b7, 0x02ca, 0x02dc, 0x02ea, 0x02f4, 0x0300, + 0x032a, 0x0343, 0x0379, 0x0398, 0x03aa, 0x03c0, 0x03d7, 0x03df, + 0x03ed, 0x03f7, 0x0407, 0x0426, 0x0439, 0x0441, 0x0454, 0x0462, + 0x047f, 0x0487, 0x0491, 0x04a1, 0x04b8, 0x04c4, 0x04ce, 0x04de, + // Entry 40 - 7F + 0x0509, 0x0515, 0x0533, 0x0541, 0x054f, 0x0557, 0x057b, 0x0589, + 0x0597, 0x05a5, 0x05c2, 0x05c2, 0x05d4, 0x05dc, 0x05fd, 0x0611, + 0x062c, 0x063a, 0x0644, 0x065d, 0x066b, 0x0677, 0x0696, 0x06a2, + 0x06aa, 0x06bc, 0x06d0, 0x06dc, 0x06e8, 0x06fa, 0x071b, 0x0727, + 0x0778, 0x078a, 0x0792, 0x07a9, 0x07b3, 0x07d5, 0x0806, 0x0816, + 0x0826, 0x0830, 0x083e, 0x0859, 0x086b, 0x087b, 0x0887, 0x0898, + 0x08aa, 0x08ed, 0x08f5, 0x08fd, 0x090d, 0x0919, 0x0923, 0x092f, + 0x093f, 0x094b, 0x0955, 0x096b, 0x097b, 0x098b, 0x09a6, 0x09c7, + // Entry 80 - BF + 0x09e0, 0x09f9, 0x0a05, 0x0a22, 0x0a36, 0x0a3e, 0x0a48, 0x0a5b, + 0x0a71, 0x0a82, 0x0a90, 0x0a9c, 0x0aa6, 0x0aba, 0x0ac6, 0x0ad0, + 0x0ade, 0x0aea, 0x0af8, 0x0b0c, 0x0b21, 0x0b35, 0x0b52, 0x0b64, + 0x0b6c, 0x0b85, 0x0b95, 0x0bb3, 0x0be3, 0x0bf5, 0x0c09, 0x0c1d, + 0x0c29, 0x0c39, 0x0c58, 0x0c64, 0x0c72, 0x0c82, 0x0c92, 0x0ca0, + 0x0cbb, 0x0cc5, 0x0ce4, 0x0cf2, 0x0d04, 0x0d1a, 0x0d2a, 0x0d34, + 0x0d3e, 0x0d46, 0x0d5f, 0x0d69, 0x0d75, 0x0d7d, 0x0da2, 0x0dc4, + 0x0dd4, 0x0de4, 0x0df0, 0x0e15, 0x0e34, 0x0e49, 0x0e66, 0x0e7a, + // Entry C0 - FF + 0x0e84, 0x0e94, 0x0e9e, 0x0eb7, 0x0ec5, 0x0ed3, 0x0edf, 0x0eeb, + 0x0ef7, 0x0f18, 0x0f37, 0x0f54, 0x0f5e, 0x0f6a, 0x0f7a, 0x0fa0, + 0x0fb0, 0x0fd5, 0x0fe5, 0x0ffc, 0x100f, 0x101d, 0x1029, 0x1037, + 0x1050, 0x1075, 0x1085, 0x109a, 0x10a4, 0x10b6, 0x10d2, 0x10ff, + 0x1105, 0x1135, 0x113d, 0x114b, 0x115f, 0x116d, 0x1182, 0x119a, + 0x11a4, 0x11ae, 0x11ba, 0x11dc, 0x11e8, 0x11f4, 0x1204, 0x1212, + 0x121e, 0x1240, 0x1240, 0x126a, 0x1278, 0x128c, 0x129a, 0x12c7, + 0x12d9, 0x1307, 0x132b, 0x1339, 0x1347, 0x1365, 0x136f, 0x137b, + // Entry 100 - 13F + 0x1383, 0x1391, 0x13c5, 0x13d1, 0x13e1, 0x1400, 0x1408, 0x1414, + 0x1431, 0x144e, 0x145c, 0x1475, 0x1494, 0x14ad, 0x14c8, 0x14e5, + 0x14fe, 0x150c, 0x1527, 0x1540, 0x1555, 0x156c, 0x1590, 0x15ab, + 0x15c1, 0x15d3, 0x15fa, 0x160c, 0x1614, 0x162d, 0x1642, 0x164e, + 0x1667, 0x1682, 0x169b, 0x169b, 0x16b8, }, }, { // vai - "ꕉꖆꕟꖳꕯꔤꗳ ꕉꕟꔬ ꗡꕆꔓꔻꕉꔱꕭꔕꔻꕚꘋꕉꘋꔳꖶꕎ ꗪ ꕑꖜꕜꕉꕄꕞꕉꔷꕑꕇꕩꕉꕆꕯꕉꖐꕞꕉꘀꘋꔳꕯꕶꕱ ꕢꕹꕎꖺꔻꖤꕎꖺꖬꖤꔃꔷꕩꕉꖩꕑ" + - "ꕉꕤꕑꔤꕧꘋꕷꔻꕇꕰ ꗪ ꗥꕤꖑꔲꕯꕑꔆꖁꔻꕑꕅꕞꗵꔼꗩꕀꗚꘋꕷꕃꕯ ꕘꖇꗂꔠꔸꕩꕑꗸꘋꖜꖩꔺꗩꕇꘋꗩꖷꕜꖜꖩꘉꔧꕷꔷꔲꕩꖜꕟꔘꔀꕑ" + - "ꕌꕮꔻꖜꕚꘋꕷꖬꕎꕯꗩꕞꖩꔻꔆꔷꔘꕪꕯꕜꖏꖐ ꗵꗞꖴꕟꔎ ꕸꖃꔀꕉꔱꔸꕪ ꗳ ꗳ ꕸꖃꔀꖏꖐꖬꔃꕤ ꖨꕮꕊꖏꔳ ꕾꕎꖏꕃ ꔳꘋꗣꔚꔷ" + - "ꕪꔈꖩꘋꕦꔤꕯꗛꗏꔭꕩꖏꔻꕚ ꔸꕪꕃꖳꕑꔞꔪ ꗲꔵ ꔳꘋꗣꕢꗡꖛꗐꔻꗿꕃ ꕸꖃꔀꕧꕮꔧꕀꖜꔳꕜꕇꕮꕃꖁꕆꕇꕪꖁꕆꕇꕪꘋ ꕸꕱꔀꕉꔷꔠ" + - "ꔸꕩꗡꖴꔃꗍꗡꔻꕿꕇꕰꕆꔖꕞꔀꔸꔳꕟꕐꘊꔧꔤꔳꖎꔪꕩꔱꘋ ꖨꕮꕊꔱꔤꕀꕘꔷꕃ ꖨꕮ ꔳꘋꗣꕆꖏꕇꔻꕩꖢꕟꘋꔻꕭꕷꘋꖕꕯꔤꗳꖶꕟꕯꕜꗘ" + - "ꖺꕀꕩꗱꘋꔻ ꖶꕎꕯꕭꕌꕯꕀꖜꕟꕚꕧꕓ ꖴꕎ ꖨꕮꕊꕭꔭꕩꕅꔤꕇꖶꕎꔐꖨꔅꖦꕰꕊ ꗳ ꕅꔤꕇꗥꗷꘋꖶꕎꔎꕮꕞꖶꕎꕆꕅꔤꕇ ꔫꕢꕴꖶꕩ" + - "ꕯꖽꖫꕟꖏꔓꔻꕩꕌꔤꔳꖽꘋꕭꔓꔤꖆꕇꔻꕩꕉꔓ ꖨꕮꕊꕑꕇꔻꕞꔤꕞꔤꔺꕩꔛꔟꔻ ꔤꔺꕩ ꗛꔤꘂ ꕗꕴꔀ ꕮꔤꕟꕃꔤꕟꘋꕉꔤꔻ ꖨꕮꕊꔤ" + - "ꕚꔷꕧꕮꔧꕪꗘꖺꗵꘋꔛꗨꗢꔞꕰꕃꕅꔻꕚꘋꕪꕹꔵꕩꕃꔸꕑꔳꖏꕹꖄꔻꔻꘋ ꕃꔳꔻ ꗪ ꔕꔲꔻꖏꔸꕩ ꗛꔤ ꕪꘋꗒꖏꔸꕩ ꗛꔤ ꔒꘋꗣ ꗏ" + - "ꖴꔃꔳꔞꔀꕮꘋ ꔳꘋꗣꕪꕤꔻꕚꘋꕞꕴꔻꔒꕑꗟꘋꔻꘋ ꖨꔻꕩꔷꗿꘋꔻꗳꘋꖬꔸ ꕞꘋꕪꕞꔤꔫꕩꔷꖇꕿꔷꖤꔃꕇꕰꗏꔻꘋꗂꖺꕞꔳꔲꕩꔒꔫꕩꗞ" + - "ꕟꖏꗞꕯꖏꖒꔷꖁꕙꕮꕜꕭꔻꕪꕮꕊꕣ ꔳꘋꗣꕮꔖꖁꕇꕰꕮꔷꕆꕩꘋꕮꗞꖐꔷꕩꗛꔤ ꕪꘋꗒ ꕮꔸꕩꕯ ꔳꘋꗣꕮꔳꕇꕃꗞꔓꔎꕇꕰꗞꘋꔖꕟꔳꕮ" + - "ꕊꕚꗞꔓꗔꕮꔷꕜꔍꕮꕞꕌꔨꘈꔻꖏꕮꔒꔻꕩꕹꕤꔭꕃꕯꕆꔫꕩꕪꔷꖁꕇꕰ ꕯꕮꕊꕯꔤꕧꗟꖺꗉ ꔳꘋꗣꕯꔤꕀꔸꕩꕇꕪꕟꖶꕎꘉꕜ ꖨꕮꕊꗟꖺꔃ" + - "ꕇꕐꔷꖆꖩꖸꔃꔤꔽꔤ ꖨꕮ ꕯꕮꕊꕱꕮꘋꕐꕯꕮꗨꗡꖩꗱꘋꔻ ꕶꔷꕇꔻꕩꕐꖛꕎ ꕅꔤꕇ ꕯꕮꕊꔱꔒꔪꘋꕐꕃꔻꕚꘋꕶꗷꘋꔻꘋ ꔪꘂ ꗪ " + - "ꕆꔞꗏꘋꔪꔳꕪꕆꔪꖳꕿ ꔸꖏꕐꔒꔻꔳꕯ ꔎꔒ ꕀꔤ ꗛꔤ ꕞ ꗱ ꗪ ꕭꕌꕤꕶꕿꕃꔤ ꕸꖃꔀꕐꖃꕐꕟꗝꔀꕪꕚꕌꔓꗠꖻꖄꕆꕇꕰꗐꖺꔻꕩ" + - "ꕟꖙꕡꕞꕌꖝ ꕸꖃꔀꖬꕞꔤꕮꕊꕯ ꔳꘋꗣꔖꗼꔷꖬꗵꘋꖬꔨꗵꘋꔻꕬꕶꕱꔻꘋ ꗥꔷꕯꔻꖃꔍꕇꕰꔻꖃꕙꕃꕩꔋꕩ ꕒꕌꖺ ꕸꖃꔀꕮꔸꖆ ꕢꘋ" + - "ꔻꕇꕭꕌꖇꕮꔷꕩꖬꔸꕯꔈꕢꕴ ꕿꔈ ꗪ ꕉ ꕮꔧ ꕗꕴꔀꗡꗷ ꕢꔍꗍꖺꔻꕩꘋꖬꕎꔽ ꖨꕮꕊꗋꖺꕃꔻ ꗪ ꕪꔤꖏꔻ ꔳꘋꗣꕦꔵꕿꖑꕚꔤ" + - " ꖨꕮꕊꕚꕀꕃꔻꕚꘋꕿꔞꖃꔎꔒ ꗃ ꔳꗞꖻꗋꖺꕃꕮꕇꔻꕚꘋꖤꕇꔻꕩꗋꕬꗋꖺꕃꖤꔸꔕꕜ ꗪ ꕿꔆꖑꕚꖣꖨꕚꔤꕎꘋꕚꘋꕤꕇꕰꖳꖴꔓꘋꖳꕭꕡꕶ" + - "ꕱꖳꔓꗝꔀꖳꗩꕃꔻꕚꘋꔻꘋ ꔲꘋꔻꘋ ꗪ ꖶꔓꕯꔵꘋ ꖸꕙꔳꕪꘋ ꕸꖃꔀꔛꔟꔻ ꗩꗡ ꗏ ꖷꖬ ꔳꘋꗣꕶꕱ ꗩꗡ ꗏ ꖷꖬ ꔳꘋꗣꗲ" + - "ꕇꖮꔃꕞꕙꖸꕎꖤꕎꔷꔻ ꗪ ꖢꖤꕯꕢꕹꖙꕉꔝꘈꘋꕮꗚꔎꕉꔱꔸꕪ ꗛꔤ ꔒꘋꗣ ꗏ ꕸꖃꔀꕤꔭꕩꔽꕓꖜꔃ", + "ꗻꗡ ꕒꕡꕌ ꗏ ꔳꘋꗣꕉꖆꕟꖳꕯꔤꗳ ꕉꕟꔬ ꗡꕆꔓꔻꕉꔱꕭꔕꔻꕚꘋꕉꘋꔳꖶꕎ ꗪ ꕑꖜꕜꕉꕄꕞꕉꔷꕑꕇꕩꕉꕆꕯꕉꖐꕞꕉꘋꕚꔳꕪꕉꘀꘋꔳꕯꕶꕱ" + + " ꕢꕹꕎꖺꔻꖤꕎꖺꖬꖤꔃꔷꕩꕉꖩꕑꕉꕞꔺꕉꕤꕑꔤꕧꘋꕷꔻꕇꕰ ꗪ ꗥꕤꖑꔲꕯꕑꔆꖁꔻꕑꕅꕞꗵꔼꗩꕀꗚꘋꕷꕃꕯ ꕘꖇꗂꔠꔸꕩꕑꗸꘋꖜꖩꔺꗩ" + + "ꕇꘋꕪꘋꕓ ꗞꗢ ꕒꕚꕞꕆꗩꖷꕜꖜꖩꘉꔧꕷꔷꔲꕩꕪꔓꔬꘂꘋ ꖨꕮ ꗨꗳꗣꖜꕟꔘꔀꕑꕌꕮꔻꖜꕚꘋꖜꔍꔳ ꔳꘋꗣꕷꖬꕎꕯꗩꕞꖩꔻꔆꔷꔘꕪ" + + "ꕯꕜꖏꖏꔻ (ꔞꔀꔷꘋ) ꔳꘋꗣꖏꖐ ꗵꗞꖴꕟꔎ ꕸꖃꔀꕉꔱꔸꕪ ꗳ ꗳ ꕸꖃꔀꖏꖐꖬꔃꕤ ꖨꕮꕊꖏꔳ ꕾꕎꖏꕃ ꔳꘋꗣꔚꔷꕪꔈꖩꘋ" + + "ꕦꔤꕯꗛꗏꔭꕩꕃꔒꕐꗋꘋ ꔳꘋꗣꖏꔻꕚ ꔸꕪꕃꖳꕑꔞꔪ ꗲꔵ ꔳꘋꗣꖴꕟꖇꕱꔞꔻꕮꔻ ꔳꘋꗣꕢꗡꖛꗐꔻꗿꕃ ꕸꖃꔀꕧꕮꔧꔵꔀꖑ ꔳꘋ" + + "ꗣꕀꖜꔳꕜꕇꕮꕃꖁꕆꕇꕪꖁꕆꕇꕪꘋ ꕸꕱꔀꕉꔷꔠꔸꕩꗻꕚ ꗪ ꔡꔷꕞꗡꖴꔃꗍꗡꔻꕿꕇꕰꕆꔖꕞꕢꕌꕟ ꔎꔒ ꕀꔤꔀꔸꔳꕟꕐꘊꔧꔤꔳꖎꔪ" + + "ꕩꔱꘋ ꖨꕮꕊꔱꔤꕀꕘꔷꕃ ꖨꕮ ꔳꘋꗣꕆꖏꕇꔻꕩꕘꖄ ꔳꘋꗣꖢꕟꘋꔻꕭꕷꘋꖕꕯꔤꗳꖶꕟꕯꕜꗘꖺꕀꕩꗱꘋꔻ ꖶꕎꕯꖶꗦꘋꔻꕭꕌꕯꕀꖜ" + + "ꕟꕚꕧꕓ ꖴꕎ ꖨꕮꕊꕭꔭꕩꕅꔤꕇꖶꕎꔐꖨꔅꖦꕰꕊ ꗳ ꕅꔤꕇꗥꗷꘋꗘꖺꕀꕩ ꗛꔤ ꔒꘋꗣ ꗏ ꗪ ꗇꖢ ꔳꘋꗣ ꗛꔤ ꔒꘋꗣ ꗏꖶ" + + "ꕎꔎꕮꕞꖶꕎꕆꕅꔤꕇ ꔫꕢꕴꖶꕩꕯꗥꗡꔵ ꗪ ꕮꖁꕯꖽꖫꕟꖏꔓꔻꕩꕌꔤꔳꖽꘋꕭꔓꗛꖺꔻꕩ ꔳꘋꗣꔤꖆꕇꔻꕩꕉꔓ ꖨꕮꕊꕑꕇꔻꕞꔤꕞꕮ" + + "ꘋ ꔳꘋꗣꔤꔺꕩꔛꔟꔻ ꔤꔺꕩ ꗛꔤꘂ ꕗꕴꔀ ꕮꔤꕟꕃꔤꕟꘋꕉꔤꔻ ꖨꕮꕊꔤꕚꔷꘀꗡꔘꕧꕮꔧꕪꗘꖺꗵꘋꔛꗨꗢꔞꕰꕃꕅꔻꕚꘋꕪꕹꔵꕩ" + + "ꕃꔸꕑꔳꖏꕹꖄꔻꔻꘋ ꕃꔳꔻ ꗪ ꔕꔲꔻꖏꔸꕩ ꗛꔤ ꕪꘋꗒꖏꔸꕩ ꗛꔤ ꔒꘋꗣ ꗏꖴꔃꔳꔞꔀꕮꘋ ꔳꘋꗣꕪꕤꔻꕚꘋꕞꕴꔻꔒꕑꗟꘋꔻ" + + "ꘋ ꖨꔻꕩꔷꗿꘋꔻꗳꘋꖬꔸ ꕞꘋꕪꕞꔤꔫꕩꔷꖇꕿꔷꖤꔃꕇꕰꗏꔻꘋꗂꖺꕞꔳꔲꕩꔒꔫꕩꗞꕟꖏꗞꕯꖏꖒꔷꖁꕙꗞꔳꕇꖶꖄꕪꘋꕓ ꗞꗢ ꕮꕊꔳ" + + "ꘋꕮꕜꕭꔻꕪꕮꕊꕣ ꔳꘋꗣꕮꔖꖁꕇꕰꕮꔷꕆꕩꘋꕮꗞꖐꔷꕩꗛꔤ ꕪꘋꗒ ꕮꔸꕩꕯ ꔳꘋꗣꕮꔳꕇꕃꗞꔓꔎꕇꕰꗞꘋꔖꕟꔳꕮꕊꕚꗞꔓꗔꕮꔷꕜ" + + "ꔍꕮꕞꕌꔨꘈꔻꖏꕮꔒꔻꕩꕹꕤꔭꕃꕯꕆꔫꕩꕪꔷꖁꕇꕰ ꕯꕮꕊꕯꔤꕧꗟꖺꗉ ꔳꘋꗣꕯꔤꕀꔸꕩꕇꕪꕟꖶꕎꘉꕜ ꖨꕮꕊꗟꖺꔃꕇꕐꔷꖆꖩꖸꔃꔤ" + + "ꔽꔤ ꖨꕮ ꕯꕮꕊꕱꕮꘋꕐꕯꕮꗨꗡꖩꗱꘋꔻ ꕶꔷꕇꔻꕩꕐꖛꕎ ꕅꔤꕇ ꕯꕮꕊꔱꔒꔪꘋꕐꕃꔻꕚꘋꕶꗷꘋꔻꘋ ꔪꘂ ꗪ ꕆꔞꗏꘋꔪꔳꕪꕆ" + + "ꔪꖳꕿ ꔸꖏꕐꔒꔻꔳꕯ ꔎꔒ ꕀꔤ ꗛꔤ ꕞ ꗱ ꗪ ꕭꕌꕤꕶꕿꕃꔤ ꕸꖃꔀꕐꖃꕐꕟꗝꔀꕪꕚꕌꔓꗠꖻꖄꕆꕇꕰꗻꗡꔬꕩꗐꖺꔻꕩꕟꖙꕡꕞ" + + "ꕌꖝ ꕸꖃꔀꖬꕞꔤꕮꕊꕯ ꔳꘋꗣꔖꗼꔷꖬꗵꘋꖬꔨꗵꘋꔻꕬꕶꕱꔻꘋ ꗥꔷꕯꔻꖃꔍꕇꕰꔻꕙꕒꔵ ꗪ ꕧꘋ ꕮꘂꘋꔻꖃꕙꕃꕩꔋꕩ ꕒꕌꖺ " + + "ꕸꖃꔀꕮꔸꖆ ꕢꘋꔻꕇꕭꕌꖇꕮꔷꕩꖬꔸꕯꔈꖬꕜꘋ ꗛꔤ ꔒꘋꗣ ꗏꕢꕴ ꕿꔈ ꗪ ꕉ ꕮꔧ ꕗꕴꔀꗡꗷ ꕢꔍꗍꖺꔻꘋꔳ ꕮꕊꗳꘋꔻꕩ" + + "ꘋꖬꕎꔽ ꖨꕮꕊꔳꔻꕚꘋ ꕜ ꖴꕯꗋꖺꕃꔻ ꗪ ꕪꔤꖏꔻ ꔳꘋꗣꕦꔵꔱꗷꘋꔻ ꗛꔤ ꔒꘋꗣ ꗏ ꕸꖃꔀ ꖸꕿꖑꕚꔤ ꖨꕮꕊꕚꕀꕃꔻꕚ" + + "ꘋꕿꔞꖃꔎꔒ ꗃ ꔳꗞꖻꗋꖺꕃꕮꕇꔻꕚꘋꖤꕇꔻꕩꗋꕬꗋꖺꕃꖤꔸꔕꕜ ꗪ ꕿꔆꖑꕚꖣꖨꕚꔤꕎꘋꕚꘋꕤꕇꕰꖳꖴꔓꘋꖳꕭꕡꕶꕱ ꕪꘋ ꗅꘋ" + + " ꔳꘋꗣ ꖸꕶꕱꖳꔓꗝꔀꖳꗩꕃꔻꕚꘋꕙꔳꕪꘋ ꕢꕨꕌꔻꘋ ꔲꘋꔻꘋ ꗪ ꖶꔓꕯꔵꘋ ꖸꕙꔳꕪꘋ ꕸꖃꔀꔛꔟꔻ ꗩꗡ ꗏ ꖷꖬ ꔳꘋꗣꕶꕱ" + + " ꗩꗡ ꗏ ꖷꖬ ꔳꘋꗣꗲꕇꖮꔃꕞꕙꖸꕎꖤꕎꔷꔻ ꗪ ꖢꖤꕯꕢꕹꖙꕉꖏꖇꕾꔝꘈꘋꕮꗚꔎꕉꔱꔸꕪ ꗛꔤ ꔒꘋꗣ ꗏ ꕸꖃꔀꕤꔭꕩꔽꕓꖜꔃ", []uint16{ // 261 elements // Entry 0 - 3F - 0x0000, 0x0000, 0x0009, 0x002c, 0x0041, 0x005e, 0x0067, 0x0076, - 0x007f, 0x0088, 0x0088, 0x0097, 0x00a7, 0x00b3, 0x00c5, 0x00ce, - 0x00ce, 0x00e0, 0x0100, 0x010c, 0x011b, 0x0127, 0x0137, 0x0143, - 0x014c, 0x0155, 0x015e, 0x015e, 0x0167, 0x0173, 0x017f, 0x017f, - 0x018b, 0x0197, 0x01a0, 0x01a0, 0x01ac, 0x01b8, 0x01c1, 0x01ca, - 0x01ca, 0x01ea, 0x0208, 0x020e, 0x0221, 0x022e, 0x023e, 0x0244, - 0x0250, 0x0259, 0x0265, 0x0265, 0x0275, 0x027e, 0x0295, 0x0295, - 0x0295, 0x02a4, 0x02b4, 0x02bd, 0x02bd, 0x02c6, 0x02d2, 0x02de, - // Entry 40 - 7F - 0x02f7, 0x0306, 0x0306, 0x0312, 0x0321, 0x032a, 0x032a, 0x0336, - 0x033f, 0x034e, 0x034e, 0x034e, 0x035e, 0x0367, 0x0381, 0x0390, - 0x0390, 0x039c, 0x03a5, 0x03b1, 0x03bd, 0x03c9, 0x03dc, 0x03dc, - 0x03e5, 0x03f1, 0x0408, 0x0411, 0x041a, 0x0429, 0x0440, 0x0449, - 0x0449, 0x0458, 0x0461, 0x0474, 0x047d, 0x047d, 0x047d, 0x0486, - 0x0492, 0x049b, 0x04a7, 0x04a7, 0x04b6, 0x04c6, 0x04d8, 0x04d8, - 0x04e1, 0x050c, 0x0515, 0x051e, 0x0531, 0x053a, 0x053a, 0x0546, - 0x0552, 0x055b, 0x0561, 0x0570, 0x057c, 0x0588, 0x0594, 0x05b2, - // Entry 80 - BF - 0x05cc, 0x05ea, 0x05f3, 0x0609, 0x0618, 0x0621, 0x062d, 0x063d, - 0x064f, 0x065f, 0x066b, 0x0674, 0x0683, 0x0692, 0x069e, 0x06a7, - 0x06b0, 0x06b9, 0x06c5, 0x06c5, 0x06c5, 0x06d4, 0x06e7, 0x06f6, - 0x06fc, 0x0708, 0x0714, 0x0714, 0x073b, 0x0747, 0x0756, 0x0765, - 0x076e, 0x0777, 0x0783, 0x078f, 0x0798, 0x07a4, 0x07b0, 0x07bc, - 0x07d5, 0x07de, 0x07f1, 0x0800, 0x080f, 0x081f, 0x0828, 0x0831, - 0x0837, 0x0840, 0x0857, 0x0860, 0x0869, 0x0872, 0x088b, 0x08a8, - 0x08b4, 0x08c3, 0x08cc, 0x08ea, 0x08f6, 0x0906, 0x0940, 0x0956, - // Entry C0 - FF - 0x095c, 0x0968, 0x0971, 0x0971, 0x097a, 0x0986, 0x0986, 0x0992, - 0x099b, 0x09ae, 0x09ca, 0x09d3, 0x09dc, 0x09e8, 0x09f4, 0x0a04, - 0x0a13, 0x0a13, 0x0a22, 0x0a3c, 0x0a4c, 0x0a58, 0x0a64, 0x0a70, - 0x0a70, 0x0a96, 0x0aa9, 0x0aa9, 0x0ab2, 0x0ac5, 0x0ac5, 0x0aec, - 0x0af2, 0x0af2, 0x0af8, 0x0b08, 0x0b1a, 0x0b23, 0x0b37, 0x0b4f, - 0x0b5b, 0x0b61, 0x0b6a, 0x0b84, 0x0b8d, 0x0b99, 0x0ba8, 0x0bb4, - 0x0bbd, 0x0bbd, 0x0bbd, 0x0bc3, 0x0bcf, 0x0be1, 0x0be1, 0x0c0c, - 0x0c22, 0x0c47, 0x0c69, 0x0c78, 0x0c84, 0x0c9b, 0x0ca7, 0x0ca7, - // Entry 100 - 13F - 0x0cb0, 0x0cb9, 0x0ce4, 0x0ced, 0x0cf9, + 0x0000, 0x001e, 0x0027, 0x004a, 0x005f, 0x007c, 0x0085, 0x0094, + 0x009d, 0x00a6, 0x00b5, 0x00c4, 0x00d4, 0x00e0, 0x00f2, 0x00fb, + 0x0104, 0x0116, 0x0136, 0x0142, 0x0151, 0x015d, 0x016d, 0x0179, + 0x0182, 0x018b, 0x0194, 0x01b1, 0x01ba, 0x01c6, 0x01d2, 0x01f2, + 0x01fe, 0x020a, 0x0213, 0x0226, 0x0232, 0x023e, 0x0247, 0x0250, + 0x0272, 0x0292, 0x02b0, 0x02b6, 0x02c9, 0x02d6, 0x02e6, 0x02ec, + 0x02f8, 0x0301, 0x030d, 0x0326, 0x0336, 0x033f, 0x0356, 0x0362, + 0x0378, 0x0387, 0x0397, 0x03a0, 0x03b3, 0x03bc, 0x03c8, 0x03d4, + // Entry 40 - 7F + 0x03ed, 0x03fc, 0x0410, 0x041c, 0x042b, 0x0434, 0x044b, 0x0457, + 0x0460, 0x046f, 0x046f, 0x046f, 0x047f, 0x0488, 0x04a2, 0x04b1, + 0x04c1, 0x04cd, 0x04d6, 0x04e2, 0x04ee, 0x04fa, 0x050d, 0x0519, + 0x0522, 0x052e, 0x0545, 0x054e, 0x0557, 0x0566, 0x057d, 0x0586, + 0x05d1, 0x05e0, 0x05e9, 0x05fc, 0x0605, 0x0605, 0x061c, 0x0625, + 0x0631, 0x063a, 0x0646, 0x065c, 0x066b, 0x067b, 0x068d, 0x069d, + 0x06a6, 0x06d1, 0x06da, 0x06e3, 0x06f6, 0x06ff, 0x0708, 0x0714, + 0x0720, 0x0729, 0x072f, 0x073e, 0x074a, 0x0756, 0x0762, 0x0780, + // Entry 80 - BF + 0x079a, 0x07b8, 0x07c1, 0x07d7, 0x07e6, 0x07ef, 0x07fb, 0x080b, + 0x081d, 0x082d, 0x0839, 0x0842, 0x0851, 0x0860, 0x086c, 0x0875, + 0x087e, 0x0887, 0x0893, 0x08a2, 0x08bf, 0x08ce, 0x08e1, 0x08f0, + 0x08f6, 0x0902, 0x090e, 0x090e, 0x0935, 0x0941, 0x0950, 0x095f, + 0x0968, 0x0971, 0x097d, 0x0989, 0x0992, 0x099e, 0x09aa, 0x09b6, + 0x09cf, 0x09d8, 0x09eb, 0x09fa, 0x0a09, 0x0a19, 0x0a22, 0x0a2b, + 0x0a31, 0x0a3a, 0x0a51, 0x0a5a, 0x0a63, 0x0a6c, 0x0a85, 0x0aa2, + 0x0aae, 0x0abd, 0x0ac6, 0x0ae4, 0x0af0, 0x0b00, 0x0b3a, 0x0b50, + // Entry C0 - FF + 0x0b56, 0x0b62, 0x0b6b, 0x0b6b, 0x0b74, 0x0b80, 0x0b8c, 0x0b98, + 0x0ba1, 0x0bb4, 0x0bd0, 0x0bd9, 0x0be2, 0x0bee, 0x0bfa, 0x0c0a, + 0x0c19, 0x0c3a, 0x0c49, 0x0c63, 0x0c73, 0x0c7f, 0x0c8b, 0x0c97, + 0x0cb5, 0x0cdb, 0x0cee, 0x0d04, 0x0d0d, 0x0d20, 0x0d37, 0x0d5e, + 0x0d64, 0x0d93, 0x0d99, 0x0da9, 0x0dbb, 0x0dc4, 0x0dd8, 0x0df0, + 0x0dfc, 0x0e02, 0x0e0b, 0x0e25, 0x0e2e, 0x0e3a, 0x0e49, 0x0e55, + 0x0e5e, 0x0e80, 0x0e80, 0x0e86, 0x0e92, 0x0ea4, 0x0eba, 0x0ee5, + 0x0efb, 0x0f20, 0x0f42, 0x0f51, 0x0f5d, 0x0f74, 0x0f80, 0x0f89, + // Entry 100 - 13F + 0x0f92, 0x0f9b, 0x0fc6, 0x0fcf, 0x0fdb, }, }, { // vai-Latn @@ -42712,7 +45285,7 @@ var regionHeaders = [252]header{ "üdoštasieSüdeuropaAuštralie und NiwsélandMelanesieMikronesišes Inse" + "lgebietPolinesieAsieZentralasieWeštasieEuropaOšteuropaNordeuropaWešt" + "europaLatíamerika", - []uint16{ // 292 elements + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0011, 0x0018, 0x0032, 0x003d, 0x0050, 0x0058, 0x005f, 0x0066, 0x006c, 0x0075, 0x007f, 0x0090, 0x0099, 0x00a2, 0x00a7, @@ -42754,7 +45327,81 @@ var regionHeaders = [252]header{ 0x09ed, 0x09f8, 0x09ff, 0x0a0a, 0x0a18, 0x0a22, 0x0a2c, 0x0a38, 0x0a48, 0x0a5e, 0x0a70, 0x0a77, 0x0a7f, 0x0a87, 0x0a93, 0x0a9d, 0x0ab6, 0x0abf, 0x0ad8, 0x0ae1, 0x0ae5, 0x0af0, 0x0af9, 0x0aff, - 0x0b09, 0x0b13, 0x0b1e, 0x0b2a, + 0x0b09, 0x0b13, 0x0b1e, 0x0b1e, 0x0b2a, + }, + }, + { // wo + "AndoorEmira Arab IniAfganistaŋAntiguwa ak BarbudaAngiiyAlbaniArmeniÀngol" + + "aaAntarktikArsàntinSamowa bu AmerigÓtiriisOstaraliArubaDuni AalàndAs" + + "erbayjaŋBosni ErsegowinBarbadBengaladesBelsigBurkina FaasoBilgariBah" + + "reyinBurundiBeneeSaŋ BartalemiBermidBurneyBoliwiBeresilBahamasButaŋD" + + "unu BuwetBotswanaBelarisBelisKanadaaDuni Koko (Kilin)Repiblik Sàntar" + + " AfrikSiwisKodiwaar (Côte d’Ivoire)Duni KuukSiliKamerunSiinKolombiKo" + + "sta RikaKubaKabo WerdeKursawoDunu KirismasSiiparRéewum CekAlmaañJibu" + + "tiDanmàrkDominikRepiblik DominikenAlseriEkwaatërEstoniEsiptEritereEs" + + "pañEcopiFinlàndFijjiDuni FalklandMikoronesiDuni FaroFaraansGaboŋRuwa" + + "ayom IniGaranadSeworsiGuyaan FarañseGernaseGanaSibraltaarGirinlàndGà" + + "mbiGineGuwaadelupGine EkuwatoriyalGereesSeworsi di Sid ak Duni Sàndw" + + "iis di SidGuwatemalaGuwamGine-BisaawóoGiyaanDuni Hërd ak Duni MakDon" + + "aldOnduraasKorowasiAytiOngariIndonesiIrlàndIsrayelDunu MaanEndTeritu" + + "waaru Brëtaañ ci Oseyaa EnjeŋIragIraŋIslàndItaliSerseSamayigSordaniS" + + "àppoŋKeeñaKirgistaŋKàmbojKiribatiKomoorSaŋ Kits ak NewisKore NoorKo" + + "wetDuni KaymaŋKasaxstaŋLawosLibaaSaŋ LusiLiktensteyinSiri LànkaLiber" + + "iyaLesotoLitiyaniLiksàmburLetoniLibiMarogMonakoMoldawiMontenegoroSaŋ" + + " MarteŋMadagaskaarDuni MarsaalMaseduwaanMaliMiyanmaarMongoliDuni Mar" + + "iyaan NoorMartinikMooritaniMooseraaMaltMoriisMaldiiwMalawiMeksikoMal" + + "esiMosàmbigNamibiNuwel KaledoniNiiseerDunu NorfolkNiseriyaNikaraguwa" + + "Peyi BaaNorweesNepaalNawruNiwNuwel SelàndOmaanPanamaPeruPolinesi Far" + + "añsePapuwasi Gine Gu BeesFilipinPakistaŋPoloñSaŋ Peer ak MikeloŋDuni" + + " PitkayirnPorto RikoPortigaalPalawParaguweKataarReeñooRumaniSerbiRis" + + "iRuwàndaArabi SawudiDuni SalmoonSeyselSudaŋSuwedSingapuurSaŋ EleenEs" + + "loweniSwalbaar ak Jan MayenEslowakiSiyera LewonSan MarinoSenegaalSom" + + "aliSirinamSudaŋ di SidSawo Tome ak PirinsipeEl SalwadoorSin MartenSi" + + "riSuwasilàndDuni Tirk ak KaykosCàddTeer Ostraal gu FraasTogoTaylàndT" + + "ajikistaŋTokolooTimor LesteTirkmenistaŋTinisiTongaTirkiTirinite ak T" + + "obagoTuwaloTaywanTaŋsaniIkerenUgàndaDuni Amerig Utar meerEtaa SiniUr" + + "ugeUsbekistaŋSite bu WatikaaSaŋ Weesaa ak GaranadinWenesiyelaDuni Wi" + + "rsin yu BrëtaañDuni Wirsin yu Etaa-siniWiyetnamWanuatuWalis ak Futun" + + "aSamowaKosowoYamanMayotAfrik di SidSàmbiSimbabweGox buñ xamul", + []uint16{ // 262 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0006, 0x0014, 0x001f, 0x0032, 0x0038, 0x003e, + 0x0044, 0x004c, 0x0055, 0x005e, 0x006e, 0x0076, 0x007e, 0x0083, + 0x008f, 0x009a, 0x00a9, 0x00af, 0x00b9, 0x00bf, 0x00cc, 0x00d3, + 0x00db, 0x00e2, 0x00e7, 0x00f5, 0x00fb, 0x0101, 0x0107, 0x0107, + 0x010e, 0x0115, 0x011b, 0x0125, 0x012d, 0x0134, 0x0139, 0x0140, + 0x0151, 0x0151, 0x0167, 0x0167, 0x016c, 0x0187, 0x0190, 0x0194, + 0x019b, 0x019f, 0x01a6, 0x01a6, 0x01b0, 0x01b4, 0x01be, 0x01c5, + 0x01d2, 0x01d8, 0x01e3, 0x01ea, 0x01ea, 0x01f0, 0x01f8, 0x01ff, + // Entry 40 - 7F + 0x0211, 0x0217, 0x0217, 0x0220, 0x0226, 0x022b, 0x022b, 0x0232, + 0x0238, 0x023d, 0x023d, 0x023d, 0x0245, 0x024a, 0x0257, 0x0261, + 0x026a, 0x0271, 0x0277, 0x0283, 0x028a, 0x0291, 0x02a0, 0x02a7, + 0x02ab, 0x02b5, 0x02bf, 0x02c5, 0x02c9, 0x02d3, 0x02e4, 0x02ea, + 0x0311, 0x031b, 0x0320, 0x032e, 0x0334, 0x0334, 0x0350, 0x0358, + 0x0360, 0x0364, 0x036a, 0x036a, 0x0372, 0x0379, 0x0380, 0x0389, + 0x038c, 0x03b2, 0x03b6, 0x03bb, 0x03c2, 0x03c7, 0x03cc, 0x03d3, + 0x03da, 0x03e2, 0x03e8, 0x03f2, 0x03f9, 0x0401, 0x0407, 0x0419, + // Entry 80 - BF + 0x0422, 0x0422, 0x0427, 0x0433, 0x043d, 0x0442, 0x0447, 0x0450, + 0x045c, 0x0467, 0x046f, 0x0475, 0x047d, 0x0487, 0x048d, 0x0491, + 0x0496, 0x049c, 0x04a3, 0x04ae, 0x04ba, 0x04c5, 0x04d1, 0x04db, + 0x04df, 0x04e8, 0x04ef, 0x04ef, 0x0501, 0x0509, 0x0512, 0x051a, + 0x051e, 0x0524, 0x052b, 0x0531, 0x0538, 0x053e, 0x0547, 0x054d, + 0x055b, 0x0562, 0x056e, 0x0576, 0x0580, 0x0588, 0x058f, 0x0595, + 0x059a, 0x059d, 0x05aa, 0x05af, 0x05b5, 0x05b9, 0x05ca, 0x05df, + 0x05e6, 0x05ef, 0x05f5, 0x060a, 0x0618, 0x0622, 0x0622, 0x062b, + // Entry C0 - FF + 0x0630, 0x0638, 0x063e, 0x063e, 0x0645, 0x064b, 0x0650, 0x0654, + 0x065c, 0x0668, 0x0674, 0x067a, 0x0680, 0x0685, 0x068e, 0x0698, + 0x06a0, 0x06b5, 0x06bd, 0x06c9, 0x06d3, 0x06db, 0x06e1, 0x06e8, + 0x06f5, 0x070b, 0x0717, 0x0721, 0x0725, 0x0730, 0x0730, 0x0743, + 0x0748, 0x075d, 0x0761, 0x0769, 0x0774, 0x077b, 0x0786, 0x0793, + 0x0799, 0x079e, 0x07a3, 0x07b5, 0x07bb, 0x07c1, 0x07c9, 0x07cf, + 0x07d6, 0x07eb, 0x07eb, 0x07f4, 0x07f9, 0x0804, 0x0813, 0x082b, + 0x0835, 0x084d, 0x0865, 0x086d, 0x0874, 0x0883, 0x0889, 0x088f, + // Entry 100 - 13F + 0x0894, 0x0899, 0x08a5, 0x08ab, 0x08b3, 0x08c1, }, }, { // xog @@ -42938,7 +45585,7 @@ var regionHeaders = [252]header{ "פונדיקע אַמעריקעקאַראַאיבעמזרח אַזיעדרום־אַזיעדרום־מזרח אַזיעדרום־א" + "ייראפּעפּאלינעזיעאַזיעצענטראַל־אַזיעמערב־אַזיעאייראפּעמזרח־אייראפּע" + "צפֿון־אייראפּעמערב־אייראפּעלאַטיין־אַמעריקע", - []uint16{ // 292 elements + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0000, 0x000e, 0x000e, 0x002c, 0x0054, 0x0054, 0x0066, 0x0076, 0x0084, 0x009c, 0x00b0, 0x00b0, 0x00be, 0x00d4, 0x00e2, @@ -42980,7 +45627,7 @@ var regionHeaders = [252]header{ 0x0f38, 0x0f52, 0x0f62, 0x0f62, 0x0f84, 0x0f84, 0x0f84, 0x0f84, 0x0f84, 0x0f94, 0x0fb5, 0x0fc9, 0x0fdc, 0x0ff0, 0x100d, 0x1027, 0x1027, 0x1027, 0x1027, 0x103b, 0x1045, 0x1061, 0x1075, 0x1085, - 0x109f, 0x10bb, 0x10d5, 0x10f5, + 0x109f, 0x10bb, 0x10d5, 0x10d5, 0x10f5, }, }, { // yo @@ -43042,11 +45689,11 @@ var regionHeaders = [252]header{ "itaOrílẹ́ède TuniṣiaOrílẹ́ède TongaOrílẹ́ède TọọkiOrílẹ́ède Tirinida" + " ati TobagaOrílẹ́ède TufaluOrílẹ́ède TaiwaniOrílẹ́ède TanṣaniaOrílẹ́" + "ède UkariniOrílẹ́ède UgandaOrílẹ́ède Orilẹede AmerikaOrílẹ́ède Nrug" + - "uayiOrílẹ́ède NṣibẹkisitaniOrílẹ́ède FatikaniOrílẹ́ède Fisẹnnti ati " + - "GenadinaOrílẹ́ède FẹnẹṣuẹlaOrílẹ́ède Etíkun Fágínì ti ìlú BírítísìOr" + - "ílẹ́ède Etikun Fagini ti AmẹrikaOrílẹ́ède FẹtinamiOrílẹ́ède Faniatu" + - "Orílẹ́ède Wali ati futunaOrílẹ́ède SamọOrílẹ́ède yemeniOrílẹ́ède May" + - "oteOrílẹ́ède Ariwa AfirikaOrílẹ́ède ṣamibiaOrílẹ́ède ṣimibabe", + "uayiOrílẹ́ède NṣibẹkisitaniÌlú VaticanOrílẹ́ède Fisẹnnti ati Genadin" + + "aOrílẹ́ède FẹnẹṣuẹlaOrílẹ́ède Etíkun Fágínì ti ìlú BírítísìOrílẹ́ède" + + " Etikun Fagini ti AmẹrikaOrílẹ́ède FẹtinamiOrílẹ́ède FaniatuOrílẹ́èd" + + "e Wali ati futunaOrílẹ́ède SamọOrílẹ́ède yemeniOrílẹ́ède MayoteOrílẹ" + + "́ède Ariwa AfirikaOrílẹ́ède ṣamibiaOrílẹ́ède ṣimibabe", []uint16{ // 261 elements // Entry 0 - 3F 0x0000, 0x0000, 0x001a, 0x0042, 0x0063, 0x0091, 0x00ae, 0x00cd, @@ -43082,10 +45729,10 @@ var regionHeaders = [252]header{ 0x12a8, 0x12cf, 0x12ed, 0x12ed, 0x1301, 0x131a, 0x131a, 0x1346, 0x135f, 0x135f, 0x1372, 0x1389, 0x13a2, 0x13b8, 0x13dd, 0x13fd, 0x1415, 0x1429, 0x1441, 0x1463, 0x1478, 0x148e, 0x14a7, 0x14bd, - 0x14d2, 0x14d2, 0x14d2, 0x14f3, 0x150a, 0x152a, 0x1541, 0x1567, - 0x1587, 0x15bd, 0x15e6, 0x15ff, 0x1615, 0x1633, 0x1648, 0x1648, + 0x14d2, 0x14d2, 0x14d2, 0x14f3, 0x150a, 0x152a, 0x1537, 0x155d, + 0x157d, 0x15b3, 0x15dc, 0x15f5, 0x160b, 0x1629, 0x163e, 0x163e, // Entry 100 - 13F - 0x165d, 0x1672, 0x168e, 0x16a6, 0x16bf, + 0x1653, 0x1668, 0x1684, 0x169c, 0x16b5, }, }, { // yo-BJ @@ -43147,12 +45794,11 @@ var regionHeaders = [252]header{ "ílɛ́ède TɔɔkimenisitaOrílɛ́ède TunishiaOrílɛ́ède TongaOrílɛ́ède Tɔɔ" + "kiOrílɛ́ède Tirinida ati TobagaOrílɛ́ède TufaluOrílɛ́ède TaiwaniOríl" + "ɛ́ède TanshaniaOrílɛ́ède UkariniOrílɛ́ède UgandaOrílɛ́ède Orilɛede " + - "AmerikaOrílɛ́ède NruguayiOrílɛ́ède NshibɛkisitaniOrílɛ́ède FatikaniO" + - "rílɛ́ède Fisɛnnti ati GenadinaOrílɛ́ède FɛnɛshuɛlaOrílɛ́ède Etíkun F" + - "ágínì ti ìlú BírítísìOrílɛ́ède Etikun Fagini ti AmɛrikaOrílɛ́ède Fɛ" + - "tinamiOrílɛ́ède FaniatuOrílɛ́ède Wali ati futunaOrílɛ́ède SamɔOrílɛ́" + - "ède yemeniOrílɛ́ède MayoteOrílɛ́ède Ariwa AfirikaOrílɛ́ède shamibia" + - "Orílɛ́ède shimibabe", + "AmerikaOrílɛ́ède NruguayiOrílɛ́ède NshibɛkisitaniOrílɛ́ède Fisɛnnti " + + "ati GenadinaOrílɛ́ède FɛnɛshuɛlaOrílɛ́ède Etíkun Fágínì ti ìlú Bírít" + + "ísìOrílɛ́ède Etikun Fagini ti AmɛrikaOrílɛ́ède FɛtinamiOrílɛ́ède Fa" + + "niatuOrílɛ́ède Wali ati futunaOrílɛ́ède SamɔOrílɛ́ède yemeniOrílɛ́èd" + + "e MayoteOrílɛ́ède Ariwa AfirikaOrílɛ́ède shamibiaOrílɛ́ède shimibabe", []uint16{ // 261 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0019, 0x003e, 0x005e, 0x008b, 0x00a7, 0x00c5, @@ -43188,18 +45834,18 @@ var regionHeaders = [252]header{ 0x11b4, 0x11d9, 0x11f4, 0x11f4, 0x1207, 0x121e, 0x121e, 0x1246, 0x125d, 0x125d, 0x126f, 0x1285, 0x129d, 0x12b2, 0x12d5, 0x12f2, 0x1308, 0x131b, 0x1330, 0x1351, 0x1365, 0x137a, 0x1391, 0x13a6, - 0x13ba, 0x13ba, 0x13ba, 0x13d9, 0x13ef, 0x140c, 0x1422, 0x1446, - 0x1461, 0x1496, 0x14bd, 0x14d4, 0x14e9, 0x1506, 0x1519, 0x1519, + 0x13ba, 0x13ba, 0x13ba, 0x13d9, 0x13ef, 0x140c, 0x140c, 0x1430, + 0x144b, 0x1480, 0x14a7, 0x14be, 0x14d3, 0x14f0, 0x1503, 0x1503, // Entry 100 - 13F - 0x152d, 0x1541, 0x155c, 0x1572, 0x1589, + 0x1517, 0x152b, 0x1546, 0x155c, 0x1573, }, }, { // yue "阿森松島安道爾阿拉伯聯合大公國阿富汗安提瓜同巴布達安圭拉阿爾巴尼亞亞美尼亞安哥拉南極洲阿根廷美屬薩摩亞奧地利澳洲荷屬阿魯巴奧蘭群島亞塞拜然波斯尼" + "亞同黑塞哥維那巴貝多孟加拉比利時布吉納法索保加利亞巴林蒲隆地貝南聖巴瑟米百慕達汶萊玻利維亞荷蘭加勒比區巴西巴哈馬不丹布威島波札那白俄" + "羅斯貝里斯加拿大科科斯(基林)群島剛果(金夏沙)中非共和國剛果(布拉薩)瑞士象牙海岸庫克群島智利喀麥隆中華人民共和國哥倫比亞克里派頓" + - "島哥斯大黎加古巴維德角庫拉索聖誕島賽普勒斯捷克共和國德國迪亞哥加西亞島吉布地丹麥多米尼克多明尼加共和國阿爾及利亞休達與梅利利亞厄瓜多" + - "愛沙尼亞埃及西撒哈拉厄利垂亞西班牙衣索比亞歐盟芬蘭斐濟福克蘭群島密克羅尼西亞群島法羅群島法國加彭英國格瑞那達喬治亞共和國法屬圭亞那根" + + "島哥斯大黎加古巴維德角庫拉索聖誕島賽普勒斯捷克德國迪亞哥加西亞島吉布地丹麥多米尼克多明尼加共和國阿爾及利亞休達與梅利利亞厄瓜多愛沙尼" + + "亞埃及西撒哈拉厄利垂亞西班牙衣索比亞歐盟歐元區芬蘭斐濟福克蘭群島密克羅尼西亞群島法羅群島法國加彭英國格瑞那達喬治亞共和國法屬圭亞那根" + "西島迦納直布羅陀格陵蘭甘比亞幾內亞瓜地洛普赤道幾內亞希臘南佐治亞島同南桑威奇群島瓜地馬拉關島幾內亞比索蓋亞那中華人民共和國香港特別行" + "政區赫德島同麥克唐納群島宏都拉斯克羅埃西亞海地匈牙利加那利群島印尼愛爾蘭以色列曼島印度英屬印度洋領地伊拉克伊朗冰島義大利澤西島牙買加" + "約旦日本肯亞吉爾吉斯柬埔寨吉里巴斯葛摩聖基茨同尼維斯北韓南韓科威特開曼群島哈薩克寮國黎巴嫩聖露西亞列支敦斯登斯里蘭卡賴比瑞亞賴索托立" + @@ -43209,10 +45855,73 @@ var regionHeaders = [252]header{ "黎各巴勒斯坦自治區葡萄牙帛琉巴拉圭卡達大洋洲邊疆群島留尼旺羅馬尼亞塞爾維亞俄羅斯盧安達沙烏地阿拉伯索羅門群島塞席爾蘇丹瑞典新加坡聖赫" + "勒拿島斯洛維尼亞斯瓦爾巴特群島同揚馬延島斯洛伐克獅子山聖馬利諾塞內加爾索馬利亞蘇利南南蘇丹聖多美同普林西比薩爾瓦多荷屬聖馬丁敘利亞史" + "瓦濟蘭特里斯坦達庫尼亞群島土克斯及開科斯群島查德法屬南方屬地多哥泰國塔吉克托克勞群島東帝汶土庫曼突尼西亞東加土耳其千里達同多巴哥吐瓦" + - "魯台灣坦尚尼亞烏克蘭烏干達美國本土外小島嶼美國烏拉圭烏茲別克梵蒂岡聖文森特同格林納丁斯委內瑞拉英屬維京群島美屬維京群島越南萬那杜瓦利" + - "斯同富圖納群島薩摩亞科索沃葉門馬約特南非尚比亞辛巴威未知區域世界非洲北美洲南美洲大洋洲西非中美東非北非中非非洲南部美洲北美加勒比海東" + - "亞南亞東南亞南歐澳洲同紐西蘭美拉尼西亞密克羅尼西亞玻里尼西亞亞洲中亞西亞歐洲東歐北歐西歐拉丁美洲", - []uint16{ // 292 elements + "魯台灣坦尚尼亞烏克蘭烏干達美國本土外小島嶼聯合國美國烏拉圭烏茲別克梵蒂岡聖文森特同格林納丁斯委內瑞拉英屬維京群島美屬維京群島越南萬那" + + "杜瓦利斯同富圖納群島薩摩亞科索沃葉門馬約特南非尚比亞辛巴威未知區域世界非洲北美洲南美洲大洋洲西非中美東非北非中非非洲南部美洲北美加勒" + + "比海東亞南亞東南亞南歐澳洲同紐西蘭美拉尼西亞密克羅尼西亞玻里尼西亞亞洲中亞西亞歐洲東歐北歐西歐拉丁美洲", + []uint16{ // 293 elements + // Entry 0 - 3F + 0x0000, 0x000c, 0x0015, 0x002d, 0x0036, 0x004b, 0x0054, 0x0063, + 0x006f, 0x0078, 0x0081, 0x008a, 0x0099, 0x00a2, 0x00a8, 0x00b7, + 0x00c3, 0x00cf, 0x00ed, 0x00f6, 0x00ff, 0x0108, 0x0117, 0x0123, + 0x0129, 0x0132, 0x0138, 0x0144, 0x014d, 0x0153, 0x015f, 0x0171, + 0x0177, 0x0180, 0x0186, 0x018f, 0x0198, 0x01a4, 0x01ad, 0x01b6, + 0x01d1, 0x01e6, 0x01f5, 0x020a, 0x0210, 0x021c, 0x0228, 0x022e, + 0x0237, 0x024c, 0x0258, 0x0267, 0x0276, 0x027c, 0x0285, 0x028e, + 0x0297, 0x02a3, 0x02a9, 0x02af, 0x02c4, 0x02cd, 0x02d3, 0x02df, + // Entry 40 - 7F + 0x02f4, 0x0303, 0x0318, 0x0321, 0x032d, 0x0333, 0x033f, 0x034b, + 0x0354, 0x0360, 0x0366, 0x036f, 0x0375, 0x037b, 0x038a, 0x03a2, + 0x03ae, 0x03b4, 0x03ba, 0x03c0, 0x03cc, 0x03de, 0x03ed, 0x03f6, + 0x03fc, 0x0408, 0x0411, 0x041a, 0x0423, 0x042f, 0x043e, 0x0444, + 0x0468, 0x0474, 0x047a, 0x0489, 0x0492, 0x04bc, 0x04da, 0x04e6, + 0x04f5, 0x04fb, 0x0504, 0x0513, 0x0519, 0x0522, 0x052b, 0x0531, + 0x0537, 0x054c, 0x0555, 0x055b, 0x0561, 0x056a, 0x0573, 0x057c, + 0x0582, 0x0588, 0x058e, 0x059a, 0x05a3, 0x05af, 0x05b5, 0x05ca, + // Entry 80 - BF + 0x05d0, 0x05d6, 0x05df, 0x05eb, 0x05f4, 0x05fa, 0x0603, 0x060f, + 0x061e, 0x062a, 0x0636, 0x063f, 0x0648, 0x0651, 0x065d, 0x0666, + 0x066f, 0x0678, 0x0684, 0x0693, 0x06a2, 0x06b1, 0x06c0, 0x06c9, + 0x06cf, 0x06d5, 0x06db, 0x0705, 0x071a, 0x0729, 0x0738, 0x0741, + 0x074a, 0x0756, 0x0762, 0x076b, 0x0774, 0x0780, 0x078c, 0x0798, + 0x07aa, 0x07b0, 0x07bc, 0x07c8, 0x07d4, 0x07da, 0x07e0, 0x07e9, + 0x07ef, 0x07f8, 0x0801, 0x080d, 0x0816, 0x081c, 0x0831, 0x0846, + 0x084f, 0x085b, 0x0861, 0x087f, 0x088e, 0x089a, 0x08af, 0x08b8, + // Entry C0 - FF + 0x08be, 0x08c7, 0x08cd, 0x08e2, 0x08eb, 0x08f7, 0x0903, 0x090c, + 0x0915, 0x0927, 0x0936, 0x093f, 0x0945, 0x094b, 0x0954, 0x0963, + 0x0972, 0x0996, 0x09a2, 0x09ab, 0x09b7, 0x09c3, 0x09cf, 0x09d8, + 0x09e1, 0x09f9, 0x0a05, 0x0a14, 0x0a1d, 0x0a29, 0x0a47, 0x0a62, + 0x0a68, 0x0a7a, 0x0a80, 0x0a86, 0x0a8f, 0x0a9e, 0x0aa7, 0x0ab0, + 0x0abc, 0x0ac2, 0x0acb, 0x0ae0, 0x0ae9, 0x0aef, 0x0afb, 0x0b04, + 0x0b0d, 0x0b25, 0x0b2e, 0x0b34, 0x0b3d, 0x0b49, 0x0b52, 0x0b70, + 0x0b7c, 0x0b8e, 0x0ba0, 0x0ba6, 0x0baf, 0x0bca, 0x0bd3, 0x0bdc, + // Entry 100 - 13F + 0x0be2, 0x0beb, 0x0bf1, 0x0bfa, 0x0c03, 0x0c0f, 0x0c15, 0x0c1b, + 0x0c24, 0x0c2d, 0x0c36, 0x0c3c, 0x0c42, 0x0c48, 0x0c4e, 0x0c54, + 0x0c60, 0x0c66, 0x0c6c, 0x0c78, 0x0c7e, 0x0c84, 0x0c8d, 0x0c93, + 0x0ca5, 0x0cb4, 0x0cc6, 0x0cd5, 0x0cdb, 0x0ce1, 0x0ce7, 0x0ced, + 0x0cf3, 0x0cf9, 0x0cff, 0x0cff, 0x0d0b, + }, + }, + { // yue-Hans + "阿森松岛安道尔阿拉伯联合大公国阿富汗安提瓜同巴布达安圭拉阿尔巴尼亚亚美尼亚安哥拉南极洲阿根廷美属萨摩亚奥地利澳洲荷属阿鲁巴奥兰群岛亚塞拜然波斯尼" + + "亚同黑塞哥维那巴贝多孟加拉比利时布吉纳法索保加利亚巴林蒲隆地贝南圣巴瑟米百慕达汶莱玻利维亚荷兰加勒比区巴西巴哈马不丹布威岛波札那白俄" + + "罗斯贝里斯加拿大科科斯(基林)群岛刚果(金夏沙)中非共和国刚果(布拉萨)瑞士象牙海岸库克群岛智利喀麦隆中华人民共和国哥伦比亚克里派顿" + + "岛哥斯大黎加古巴维德角库拉索圣诞岛赛普勒斯捷克德国迪亚哥加西亚岛吉布地丹麦多米尼克多明尼加共和国阿尔及利亚休达与梅利利亚厄瓜多爱沙尼" + + "亚埃及西撒哈拉厄利垂亚西班牙衣索比亚欧盟欧元区芬兰斐济福克兰群岛密克罗尼西亚群岛法罗群岛法国加彭英国格瑞那达乔治亚共和国法属圭亚那根" + + "西岛迦纳直布罗陀格陵兰甘比亚几内亚瓜地洛普赤道几内亚希腊南佐治亚岛同南桑威奇群岛瓜地马拉关岛几内亚比索盖亚那中华人民共和国香港特别行" + + "政区赫德岛同麦克唐纳群岛宏都拉斯克罗埃西亚海地匈牙利加那利群岛印尼爱尔兰以色列曼岛印度英属印度洋领地伊拉克伊朗冰岛义大利泽西岛牙买加" + + "约旦日本肯亚吉尔吉斯柬埔寨吉里巴斯葛摩圣基茨同尼维斯北韩南韩科威特开曼群岛哈萨克寮国黎巴嫩圣露西亚列支敦斯登斯里兰卡赖比瑞亚赖索托立" + + "陶宛卢森堡拉脱维亚利比亚摩洛哥摩纳哥摩尔多瓦蒙特内哥罗法属圣马丁马达加斯加马绍尔群岛马其顿马利缅甸蒙古中华人民共和国澳门特别行政区北" + + "马里亚纳群岛马丁尼克岛茅利塔尼亚蒙哲腊马尔他模里西斯马尔地夫马拉威墨西哥马来西亚莫三比克纳米比亚新喀里多尼亚尼日诺福克岛奈及利亚尼加" + + "拉瓜荷兰挪威尼泊尔诺鲁纽埃岛纽西兰阿曼王国巴拿马秘鲁法属玻里尼西亚巴布亚纽几内亚菲律宾巴基斯坦波兰圣皮埃尔同密克隆群岛皮特肯群岛波多" + + "黎各巴勒斯坦自治区葡萄牙帛琉巴拉圭卡达大洋洲边疆群岛留尼旺罗马尼亚塞尔维亚俄罗斯卢安达沙乌地阿拉伯索罗门群岛塞席尔苏丹瑞典新加坡圣赫" + + "勒拿岛斯洛维尼亚斯瓦尔巴特群岛同扬马延岛斯洛伐克狮子山圣马利诺塞内加尔索马利亚苏利南南苏丹圣多美同普林西比萨尔瓦多荷属圣马丁叙利亚史" + + "瓦济兰特里斯坦达库尼亚群岛土克斯及开科斯群岛查德法属南方属地多哥泰国塔吉克托克劳群岛东帝汶土库曼突尼西亚东加土耳其千里达同多巴哥吐瓦" + + "鲁台湾坦尚尼亚乌克兰乌干达美国本土外小岛屿联合国美国乌拉圭乌兹别克梵蒂冈圣文森特同格林纳丁斯委内瑞拉英属维京群岛美属维京群岛越南万那" + + "杜瓦利斯同富图纳群岛萨摩亚科索沃叶门马约特南非尚比亚辛巴威未知区域世界非洲北美洲南美洲大洋洲西非中美东非北非中非非洲南部美洲北美加勒" + + "比海东亚南亚东南亚南欧澳洲同纽西兰美拉尼西亚密克罗尼西亚玻里尼西亚亚洲中亚西亚欧洲东欧北欧西欧拉丁美洲", + []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x000c, 0x0015, 0x002d, 0x0036, 0x004b, 0x0054, 0x0063, 0x006f, 0x0078, 0x0081, 0x008a, 0x0099, 0x00a2, 0x00a8, 0x00b7, @@ -43221,10 +45930,10 @@ var regionHeaders = [252]header{ 0x0177, 0x0180, 0x0186, 0x018f, 0x0198, 0x01a4, 0x01ad, 0x01b6, 0x01d1, 0x01e6, 0x01f5, 0x020a, 0x0210, 0x021c, 0x0228, 0x022e, 0x0237, 0x024c, 0x0258, 0x0267, 0x0276, 0x027c, 0x0285, 0x028e, - 0x0297, 0x02a3, 0x02b2, 0x02b8, 0x02cd, 0x02d6, 0x02dc, 0x02e8, + 0x0297, 0x02a3, 0x02a9, 0x02af, 0x02c4, 0x02cd, 0x02d3, 0x02df, // Entry 40 - 7F - 0x02fd, 0x030c, 0x0321, 0x032a, 0x0336, 0x033c, 0x0348, 0x0354, - 0x035d, 0x0369, 0x036f, 0x036f, 0x0375, 0x037b, 0x038a, 0x03a2, + 0x02f4, 0x0303, 0x0318, 0x0321, 0x032d, 0x0333, 0x033f, 0x034b, + 0x0354, 0x0360, 0x0366, 0x036f, 0x0375, 0x037b, 0x038a, 0x03a2, 0x03ae, 0x03b4, 0x03ba, 0x03c0, 0x03cc, 0x03de, 0x03ed, 0x03f6, 0x03fc, 0x0408, 0x0411, 0x041a, 0x0423, 0x042f, 0x043e, 0x0444, 0x0468, 0x0474, 0x047a, 0x0489, 0x0492, 0x04bc, 0x04da, 0x04e6, @@ -43247,14 +45956,14 @@ var regionHeaders = [252]header{ 0x09e1, 0x09f9, 0x0a05, 0x0a14, 0x0a1d, 0x0a29, 0x0a47, 0x0a62, 0x0a68, 0x0a7a, 0x0a80, 0x0a86, 0x0a8f, 0x0a9e, 0x0aa7, 0x0ab0, 0x0abc, 0x0ac2, 0x0acb, 0x0ae0, 0x0ae9, 0x0aef, 0x0afb, 0x0b04, - 0x0b0d, 0x0b25, 0x0b25, 0x0b2b, 0x0b34, 0x0b40, 0x0b49, 0x0b67, - 0x0b73, 0x0b85, 0x0b97, 0x0b9d, 0x0ba6, 0x0bc1, 0x0bca, 0x0bd3, + 0x0b0d, 0x0b25, 0x0b2e, 0x0b34, 0x0b3d, 0x0b49, 0x0b52, 0x0b70, + 0x0b7c, 0x0b8e, 0x0ba0, 0x0ba6, 0x0baf, 0x0bca, 0x0bd3, 0x0bdc, // Entry 100 - 13F - 0x0bd9, 0x0be2, 0x0be8, 0x0bf1, 0x0bfa, 0x0c06, 0x0c0c, 0x0c12, - 0x0c1b, 0x0c24, 0x0c2d, 0x0c33, 0x0c39, 0x0c3f, 0x0c45, 0x0c4b, - 0x0c57, 0x0c5d, 0x0c63, 0x0c6f, 0x0c75, 0x0c7b, 0x0c84, 0x0c8a, - 0x0c9c, 0x0cab, 0x0cbd, 0x0ccc, 0x0cd2, 0x0cd8, 0x0cde, 0x0ce4, - 0x0cea, 0x0cf0, 0x0cf6, 0x0d02, + 0x0be2, 0x0beb, 0x0bf1, 0x0bfa, 0x0c03, 0x0c0f, 0x0c15, 0x0c1b, + 0x0c24, 0x0c2d, 0x0c36, 0x0c3c, 0x0c42, 0x0c48, 0x0c4e, 0x0c54, + 0x0c60, 0x0c66, 0x0c6c, 0x0c78, 0x0c7e, 0x0c84, 0x0c8d, 0x0c93, + 0x0ca5, 0x0cb4, 0x0cc6, 0x0cd5, 0x0cdb, 0x0ce1, 0x0ce7, 0x0ced, + 0x0cf3, 0x0cf9, 0x0cff, 0x0cff, 0x0d0b, }, }, { // zgh @@ -43341,11 +46050,11 @@ var regionHeaders = [252]header{ { // zh-Hant-HK "阿拉伯聯合酋長國安提瓜和巴布達阿魯巴阿塞拜疆波斯尼亞和黑塞哥維那巴巴多斯布基納法索布隆迪貝寧聖巴泰勒米鮑威特島博茨瓦納伯利茲可可斯群島科特迪瓦克" + "里珀頓島哥斯達黎加佛得角塞浦路斯吉布提厄瓜多爾厄立特里亞埃塞俄比亞加蓬格林納達格魯吉亞加納岡比亞南佐治亞島與南桑威奇群島危地馬拉幾內" + - "亞比紹圭亞那洪都拉斯克羅地亞馬恩島意大利肯雅科摩羅聖基茨和尼維斯老撾聖盧西亞列支敦士登利比里亞萊索托黑山馬里毛里塔尼亞蒙特塞拉特馬耳" + - "他毛里裘斯馬爾代夫馬拉維莫桑比克尼日爾尼日利亞瑙魯阿曼法屬波利尼西亞巴布亞新幾內亞皮特凱恩島巴勒斯坦領土卡塔爾盧旺達沙地阿拉伯所羅門" + - "群島塞舌爾斯洛文尼亞斯瓦爾巴特群島及揚馬延島塞拉利昂索馬里蘇里南聖多美和普林西比敍利亞斯威士蘭特克斯和凱科斯群島乍得法屬南部領地多哥" + - "共和國湯加千里達和多巴哥圖瓦盧坦桑尼亞聖文森特和格林納丁斯英屬維爾京群島美屬維爾京群島瓦努阿圖也門贊比亞津巴布韋中美洲加勒比波利尼西" + - "亞", + "亞比紹圭亞那洪都拉斯克羅地亞馬恩島意大利肯雅科摩羅聖基茨和尼維斯老撾聖盧西亞列支敦士登利比里亞拉脱維亞黑山馬里毛里塔尼亞蒙特塞拉特馬" + + "耳他毛里裘斯馬爾代夫馬拉維莫桑比克尼日爾尼日利亞瑙魯法屬波利尼西亞巴布亞新幾內亞皮特凱恩島巴勒斯坦領土卡塔爾盧旺達沙地阿拉伯所羅門群" + + "島塞舌爾斯洛文尼亞斯瓦爾巴特群島及揚馬延島塞拉利昂索馬里蘇里南聖多美和普林西比斯威士蘭特克斯和凱科斯群島乍得法屬南部領地多哥共和國湯" + + "加千里達和多巴哥圖瓦盧坦桑尼亞聖文森特和格林納丁斯英屬維爾京群島美屬維爾京群島瓦努阿圖也門馬約特贊比亞津巴布韋中美洲加勒比澳大拉西亞" + + "波利尼西亞", []uint16{ // 284 elements // Entry 0 - 3F 0x0000, 0x0000, 0x0000, 0x0018, 0x0018, 0x002d, 0x002d, 0x002d, @@ -43367,27 +46076,27 @@ var regionHeaders = [252]header{ 0x01da, 0x01da, 0x01e0, 0x01e0, 0x01e0, 0x01e0, 0x01e9, 0x01fe, // Entry 80 - BF 0x01fe, 0x01fe, 0x01fe, 0x01fe, 0x01fe, 0x0204, 0x0204, 0x0210, - 0x021f, 0x021f, 0x022b, 0x0234, 0x0234, 0x0234, 0x0234, 0x0234, - 0x0234, 0x0234, 0x0234, 0x023a, 0x023a, 0x023a, 0x023a, 0x023a, - 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x0240, 0x024f, 0x025e, - 0x0267, 0x0273, 0x027f, 0x0288, 0x0288, 0x0288, 0x0294, 0x0294, - 0x0294, 0x029d, 0x029d, 0x02a9, 0x02a9, 0x02a9, 0x02a9, 0x02a9, - 0x02af, 0x02af, 0x02af, 0x02b5, 0x02b5, 0x02b5, 0x02ca, 0x02df, - 0x02df, 0x02df, 0x02df, 0x02df, 0x02ee, 0x02ee, 0x0300, 0x0300, - // Entry C0 - FF - 0x0300, 0x0300, 0x0309, 0x0309, 0x0309, 0x0309, 0x0309, 0x0309, - 0x0312, 0x0321, 0x0330, 0x0339, 0x0339, 0x0339, 0x0339, 0x0339, - 0x0348, 0x036c, 0x036c, 0x0378, 0x0378, 0x0378, 0x0381, 0x038a, - 0x038a, 0x03a2, 0x03a2, 0x03a2, 0x03ab, 0x03b7, 0x03b7, 0x03d2, - 0x03d8, 0x03ea, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, 0x03f9, - 0x03f9, 0x03ff, 0x03ff, 0x0414, 0x041d, 0x041d, 0x0429, 0x0429, - 0x0429, 0x0429, 0x0429, 0x0429, 0x0429, 0x0429, 0x0429, 0x0447, - 0x0447, 0x045c, 0x0471, 0x0471, 0x047d, 0x047d, 0x047d, 0x047d, - // Entry 100 - 13F - 0x0483, 0x0483, 0x0483, 0x048c, 0x0498, 0x0498, 0x0498, 0x0498, - 0x0498, 0x0498, 0x0498, 0x0498, 0x04a1, 0x04a1, 0x04a1, 0x04a1, - 0x04a1, 0x04a1, 0x04a1, 0x04aa, 0x04aa, 0x04aa, 0x04aa, 0x04aa, - 0x04aa, 0x04aa, 0x04aa, 0x04b9, + 0x021f, 0x021f, 0x022b, 0x022b, 0x022b, 0x022b, 0x0237, 0x0237, + 0x0237, 0x0237, 0x0237, 0x023d, 0x023d, 0x023d, 0x023d, 0x023d, + 0x0243, 0x0243, 0x0243, 0x0243, 0x0243, 0x0243, 0x0252, 0x0261, + 0x026a, 0x0276, 0x0282, 0x028b, 0x028b, 0x028b, 0x0297, 0x0297, + 0x0297, 0x02a0, 0x02a0, 0x02ac, 0x02ac, 0x02ac, 0x02ac, 0x02ac, + 0x02b2, 0x02b2, 0x02b2, 0x02b2, 0x02b2, 0x02b2, 0x02c7, 0x02dc, + 0x02dc, 0x02dc, 0x02dc, 0x02dc, 0x02eb, 0x02eb, 0x02fd, 0x02fd, + // Entry C0 - FF + 0x02fd, 0x02fd, 0x0306, 0x0306, 0x0306, 0x0306, 0x0306, 0x0306, + 0x030f, 0x031e, 0x032d, 0x0336, 0x0336, 0x0336, 0x0336, 0x0336, + 0x0345, 0x0369, 0x0369, 0x0375, 0x0375, 0x0375, 0x037e, 0x0387, + 0x0387, 0x039f, 0x039f, 0x039f, 0x039f, 0x03ab, 0x03ab, 0x03c6, + 0x03cc, 0x03de, 0x03ed, 0x03ed, 0x03ed, 0x03ed, 0x03ed, 0x03ed, + 0x03ed, 0x03f3, 0x03f3, 0x0408, 0x0411, 0x0411, 0x041d, 0x041d, + 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x041d, 0x043b, + 0x043b, 0x0450, 0x0465, 0x0465, 0x0471, 0x0471, 0x0471, 0x0471, + // Entry 100 - 13F + 0x0477, 0x0480, 0x0480, 0x0489, 0x0495, 0x0495, 0x0495, 0x0495, + 0x0495, 0x0495, 0x0495, 0x0495, 0x049e, 0x049e, 0x049e, 0x049e, + 0x049e, 0x049e, 0x049e, 0x04a7, 0x04a7, 0x04a7, 0x04a7, 0x04a7, + 0x04b6, 0x04b6, 0x04b6, 0x04c5, }, }, { // zu @@ -43396,125 +46105,126 @@ var regionHeaders = [252]header{ }, } -const afRegionStr string = "" + // Size: 3019 bytes +const afRegionStr string = "" + // Size: 3031 bytes "AscensioneilandAndorraVerenigde Arabiese EmirateAfganistanAntigua en Bar" + - "budaAnguillaAlbaniëArmeniëAngolaAntarktikaArgentiniëAmerikaans-SamoaOost" + - "enrykAustraliëArubaÅlandeilandeAzerbeidjanBosnië en HerzegowinaBarbadosB" + - "angladesjBelgiëBurkina FasoBulgaryeBahreinBurundiBeninSint BarthélemyBer" + - "mudaBroeneiBoliviëKaribiese NederlandBrasiliëBahamasBhoetanBouvet-eiland" + - "BotswanaBelarusBelizeKanadaKokos-eilandeDemokratiese Republiek van die K" + + "budaAnguillaAlbaniëArmeniëAngolaAntarktikaArgentiniëAmerikaanse SamoaOos" + + "tenrykAustraliëArubaÅlandeilandeAzerbeidjanBosnië en HerzegowinaBarbados" + + "BangladesjBelgiëBurkina FasoBulgaryeBahreinBurundiBeninSint BarthélemyBe" + + "rmudaBroeneiBoliviëKaribiese NederlandBrasiliëBahamasBhoetanBouvet-eilan" + + "dBotswanaBelarusBelizeKanadaKokoseilandeDemokratiese Republiek van die K" + "ongoSentraal-Afrikaanse RepubliekKongo - BrazzavilleSwitserlandIvoorkusC" + "ookeilandeChiliKameroenSjinaColombiëClippertoneilandCosta RicaKubaKaap V" + - "erdeCuraçaoKerseilandSiprusTjeggiese RepubliekDuitslandDiego GarciaDjibo" + - "etiDenemarkeDominicaDominikaanse RepubliekAlgeriëCeuta en MelillaEcuador" + - "EstlandEgipteWes-SaharaEritreaSpanjeEthiopiëEuropese UnieFinlandFidjiFal" + - "klandeilandeMikronesiëFaroëreilandeFrankrykGaboenVerenigde KoninkrykGren" + - "adaGeorgiëFrans-GuyanaGuernseyGhanaGibraltarGroenlandGambiëGuineeGuadelo" + - "upeEkwatoriaal-GuineeGriekelandSuid-Georgië en die Suidelike Sandwicheil" + - "andeGuatemalaGuamGuinee-BissauGuyanaHongkong SAS SjinaHeard- en McDonald" + - "eilandeHondurasKroasiëHaïtiHongaryeKanariese EilandeIndonesiëIerlandIsra" + - "elEiland ManIndiëBrits-Indiese OseaangebiedIrakIranYslandItaliëJerseyJam" + - "aikaJordaniëJapanKeniaKirgisiëKambodjaKiribatiComoreSt. Kitts en NevisNo" + - "ord-KoreaSuid-KoreaKoeweitKaaimanseilandeKazakstanLaosLibanonSt. LuciaLi" + - "echtensteinSri LankaLiberiëLesothoLitaueLuxemburgLetlandLibiëMarokkoMona" + - "coMoldowaMontenegroSt. MartinMadagaskarMarshalleilandeMacedoniëMaliMianm" + - "ar (Birma)MongoliëMacau SAS SjinaNoord-Mariane-eilandeMartiniqueMauritan" + - "iëMontserratMaltaMauritiusMalediveMalawiMeksikoMaleisiëMosambiekNamibiëN" + - "ieu-KaledoniëNigerNorfolkeilandNigeriëNicaraguaNederlandNoorweëNepalNaur" + - "uNiueNieu-SeelandOmanPanamaPeruFrans-PolinesiëPapoea-Nieu-GuineeFilippyn" + - "ePakistanPoleSt. Pierre en MiquelonPitcairneilandePuerto RicoPalestynse " + - "gebiedePortugalPalauParaguayKatarOmliggende OseaniëRéunionRoemeniëSerwië" + - "RuslandRwandaSaoedi-ArabiëSalomonseilandeSeychelleSoedanSwedeSingapoerSi" + - "nt HelenaSloweniëSvalbard en Jan MayenSlowakyeSierra LeoneSan MarinoSene" + - "galSomaliëSurinameSuid-SoedanSão Tomé en PríncipeEl SalvadorSint Maarten" + - "SiriëSwazilandTristan da CunhaTurks- en CaicoseilandeTsjadFranse Suideli" + - "ke GebiedeTogoThailandTadjikistanTokelauOos-TimorTurkmeniëTunisiëTongaTu" + - "rkyeTrinidad en TobagoTuvaluTaiwanTanzaniëOekraïneUgandaVS klein omligge" + - "nde eilandeverenigde nasiesVerenigde State van AmerikaUruguayOesbekistan" + - "VatikaanstadSt. Vincent en die GrenadineVenezuelaBritse Maagde-eilandeAm" + - "erikaanse Maagde-eilandeViëtnamVanuatuWallis en FutunaSamoaKosovoJemenMa" + - "yotteSuid-AfrikaZambiëZimbabweOnbekende gebiedWêreldAfrikaNoord-AmerikaS" + - "uid-AmerikaOseaniëWes-AfrikaSentraal-AmerikaOos-AfrikaNoord-AfrikaMidde-" + - "AfrikaSuider-AfrikaAmerikasNoordelike AmerikaKaribiesOos-AsiëSuid-AsiëSu" + - "idoos-AsiëSuid-EuropaAustralasiëMelanesiëMikronesiese streekPolinesiëAsi" + - "ëSentraal-AsiëWes-AsiëEuropaOos-EuropaNoord-EuropaWes-EuropaLatyns-Amer" + - "ika" - -var afRegionIdx = []uint16{ // 292 elements + "erdeCuraçaoKerseilandSiprusTsjeggiëDuitslandDiego GarciaDjiboetiDenemark" + + "eDominicaDominikaanse RepubliekAlgeriëCeuta en MelillaEcuadorEstlandEgip" + + "teWes-SaharaEritreaSpanjeEthiopiëEuropese UnieEurosoneFinlandFidjiFalkla" + + "ndeilandeMikronesiëFaroëreilandeFrankrykGaboenVerenigde KoninkrykGrenada" + + "GeorgiëFrans-GuyanaGuernseyGhanaGibraltarGroenlandGambiëGuineeGuadeloupe" + + "Ekwatoriaal-GuineeGriekelandSuid-Georgië en die Suidelike Sandwicheiland" + + "eGuatemalaGuamGuinee-BissauGuyanaHongkong SAS SjinaHeardeiland en McDona" + + "ldeilandeHondurasKroasiëHaïtiHongaryeKanariese EilandeIndonesiëIerlandIs" + + "raelEiland ManIndiëBrits-Indiese OseaangebiedIrakIranYslandItaliëJerseyJ" + + "amaikaJordaniëJapanKeniaKirgistanKambodjaKiribatiComoreSint Kitts en Nev" + + "isNoord-KoreaSuid-KoreaKoeweitKaaimanseilandeKazakstanLaosLibanonSint Lu" + + "ciaLiechtensteinSri LankaLiberiëLesothoLitaueLuxemburgLetlandLibiëMarokk" + + "oMonacoMoldowaMontenegroSint MartinMadagaskarMarshalleilandeMacedoniëMal" + + "iMianmar (Birma)MongoliëMacau SAS SjinaNoord-Mariane-eilandeMartiniqueMa" + + "uritaniëMontserratMaltaMauritiusMalediveMalawiMeksikoMaleisiëMosambiekNa" + + "mibiëNieu-KaledoniëNigerNorfolkeilandNigeriëNicaraguaNederlandNoorweëNep" + + "alNauruNiueNieu-SeelandOmanPanamaPeruFrans-PolinesiëPapoea-Nieu-GuineeFi" + + "lippynePakistanPoleSint Pierre en MiquelonPitcairneilandePuerto RicoPale" + + "stynse gebiedePortugalPalauParaguayKatarOmliggende OseaniëRéunionRoemeni" + + "ëSerwiëRuslandRwandaSaoedi-ArabiëSalomonseilandeSeychelleSoedanSwedeSin" + + "gapoerSint HelenaSloweniëSvalbard en Jan MayenSlowakyeSierra LeoneSan Ma" + + "rinoSenegalSomaliëSurinameSuid-SoedanSão Tomé en PríncipeEl SalvadorSint" + + " MaartenSiriëSwazilandTristan da CunhaTurks- en CaicoseilandeTsjadFranse" + + " Suidelike GebiedeTogoThailandTadjikistanTokelauOos-TimorTurkmenistanTun" + + "isiëTongaTurkyeTrinidad en TobagoTuvaluTaiwanTanzaniëOekraïneUgandaKlein" + + " afgeleë eilande van die VSAVerenigde NasiesVerenigde State van AmerikaU" + + "ruguayOesbekistanVatikaanstadSint Vincent en die GrenadineVenezuelaBrits" + + "e Maagde-eilandeVSA se Maagde-eilandeViëtnamVanuatuWallis en FutunaSamoa" + + "KosovoJemenMayotteSuid-AfrikaZambiëZimbabweOnbekende gebiedWêreldAfrikaN" + + "oord-AmerikaSuid-AmerikaOseaniëWes-AfrikaSentraal-AmerikaOos-AfrikaNoord" + + "-AfrikaMidde-AfrikaSuider-AfrikaAmerikasNoordelike AmerikaKaribiesOos-As" + + "iëSuid-AsiëSuidoos-AsiëSuid-EuropaAustralasiëMelanesiëMikronesiese stree" + + "kPolinesiëAsiëSentraal-AsiëWes-AsiëEuropaOos-EuropaNoord-EuropaWes-Europ" + + "aLatyns-Amerika" + +var afRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x000f, 0x0016, 0x0030, 0x003a, 0x004c, 0x0054, 0x005c, - 0x0064, 0x006a, 0x0074, 0x007f, 0x008f, 0x0098, 0x00a2, 0x00a7, - 0x00b4, 0x00bf, 0x00d5, 0x00dd, 0x00e7, 0x00ee, 0x00fa, 0x0102, - 0x0109, 0x0110, 0x0115, 0x0125, 0x012c, 0x0133, 0x013b, 0x014e, - 0x0157, 0x015e, 0x0165, 0x0172, 0x017a, 0x0181, 0x0187, 0x018d, + 0x0064, 0x006a, 0x0074, 0x007f, 0x0090, 0x0099, 0x00a3, 0x00a8, + 0x00b5, 0x00c0, 0x00d6, 0x00de, 0x00e8, 0x00ef, 0x00fb, 0x0103, + 0x010a, 0x0111, 0x0116, 0x0126, 0x012d, 0x0134, 0x013c, 0x014f, + 0x0158, 0x015f, 0x0166, 0x0173, 0x017b, 0x0182, 0x0188, 0x018e, 0x019a, 0x01be, 0x01db, 0x01ee, 0x01f9, 0x0201, 0x020c, 0x0211, 0x0219, 0x021e, 0x0227, 0x0237, 0x0241, 0x0245, 0x024f, 0x0257, - 0x0261, 0x0267, 0x027a, 0x0283, 0x028f, 0x0297, 0x02a0, 0x02a8, + 0x0261, 0x0267, 0x0270, 0x0279, 0x0285, 0x028d, 0x0296, 0x029e, // Entry 40 - 7F - 0x02be, 0x02c6, 0x02d6, 0x02dd, 0x02e4, 0x02ea, 0x02f4, 0x02fb, - 0x0301, 0x030a, 0x0317, 0x0317, 0x031e, 0x0323, 0x0332, 0x033d, - 0x034b, 0x0353, 0x0359, 0x036c, 0x0373, 0x037b, 0x0387, 0x038f, - 0x0394, 0x039d, 0x03a6, 0x03ad, 0x03b3, 0x03bd, 0x03cf, 0x03d9, - 0x0407, 0x0410, 0x0414, 0x0421, 0x0427, 0x0439, 0x0452, 0x045a, - 0x0462, 0x0468, 0x0470, 0x0481, 0x048b, 0x0492, 0x0498, 0x04a2, - 0x04a8, 0x04c2, 0x04c6, 0x04ca, 0x04d0, 0x04d7, 0x04dd, 0x04e4, - 0x04ed, 0x04f2, 0x04f7, 0x0500, 0x0508, 0x0510, 0x0516, 0x0528, + 0x02b4, 0x02bc, 0x02cc, 0x02d3, 0x02da, 0x02e0, 0x02ea, 0x02f1, + 0x02f7, 0x0300, 0x030d, 0x0315, 0x031c, 0x0321, 0x0330, 0x033b, + 0x0349, 0x0351, 0x0357, 0x036a, 0x0371, 0x0379, 0x0385, 0x038d, + 0x0392, 0x039b, 0x03a4, 0x03ab, 0x03b1, 0x03bb, 0x03cd, 0x03d7, + 0x0405, 0x040e, 0x0412, 0x041f, 0x0425, 0x0437, 0x0455, 0x045d, + 0x0465, 0x046b, 0x0473, 0x0484, 0x048e, 0x0495, 0x049b, 0x04a5, + 0x04ab, 0x04c5, 0x04c9, 0x04cd, 0x04d3, 0x04da, 0x04e0, 0x04e7, + 0x04f0, 0x04f5, 0x04fa, 0x0503, 0x050b, 0x0513, 0x0519, 0x052c, // Entry 80 - BF - 0x0533, 0x053d, 0x0544, 0x0553, 0x055c, 0x0560, 0x0567, 0x0570, - 0x057d, 0x0586, 0x058e, 0x0595, 0x059b, 0x05a4, 0x05ab, 0x05b1, - 0x05b8, 0x05be, 0x05c5, 0x05cf, 0x05d9, 0x05e3, 0x05f2, 0x05fc, - 0x0600, 0x060f, 0x0618, 0x0627, 0x063c, 0x0646, 0x0651, 0x065b, - 0x0660, 0x0669, 0x0671, 0x0677, 0x067e, 0x0687, 0x0690, 0x0698, - 0x06a7, 0x06ac, 0x06b9, 0x06c1, 0x06ca, 0x06d3, 0x06db, 0x06e0, - 0x06e5, 0x06e9, 0x06f5, 0x06f9, 0x06ff, 0x0703, 0x0713, 0x0725, - 0x072e, 0x0736, 0x073a, 0x0750, 0x075f, 0x076a, 0x077c, 0x0784, + 0x0537, 0x0541, 0x0548, 0x0557, 0x0560, 0x0564, 0x056b, 0x0575, + 0x0582, 0x058b, 0x0593, 0x059a, 0x05a0, 0x05a9, 0x05b0, 0x05b6, + 0x05bd, 0x05c3, 0x05ca, 0x05d4, 0x05df, 0x05e9, 0x05f8, 0x0602, + 0x0606, 0x0615, 0x061e, 0x062d, 0x0642, 0x064c, 0x0657, 0x0661, + 0x0666, 0x066f, 0x0677, 0x067d, 0x0684, 0x068d, 0x0696, 0x069e, + 0x06ad, 0x06b2, 0x06bf, 0x06c7, 0x06d0, 0x06d9, 0x06e1, 0x06e6, + 0x06eb, 0x06ef, 0x06fb, 0x06ff, 0x0705, 0x0709, 0x0719, 0x072b, + 0x0734, 0x073c, 0x0740, 0x0757, 0x0766, 0x0771, 0x0783, 0x078b, // Entry C0 - FF - 0x0789, 0x0791, 0x0796, 0x07a9, 0x07b1, 0x07ba, 0x07c1, 0x07c8, - 0x07ce, 0x07dc, 0x07eb, 0x07f4, 0x07fa, 0x07ff, 0x0808, 0x0813, - 0x081c, 0x0831, 0x0839, 0x0845, 0x084f, 0x0856, 0x085e, 0x0866, - 0x0871, 0x0888, 0x0893, 0x089f, 0x08a5, 0x08ae, 0x08be, 0x08d5, - 0x08da, 0x08f2, 0x08f6, 0x08fe, 0x0909, 0x0910, 0x0919, 0x0923, - 0x092b, 0x0930, 0x0936, 0x0948, 0x094e, 0x0954, 0x095d, 0x0966, - 0x096c, 0x0987, 0x0997, 0x09b2, 0x09b9, 0x09c4, 0x09d0, 0x09ec, - 0x09f5, 0x0a0a, 0x0a24, 0x0a2c, 0x0a33, 0x0a43, 0x0a48, 0x0a4e, + 0x0790, 0x0798, 0x079d, 0x07b0, 0x07b8, 0x07c1, 0x07c8, 0x07cf, + 0x07d5, 0x07e3, 0x07f2, 0x07fb, 0x0801, 0x0806, 0x080f, 0x081a, + 0x0823, 0x0838, 0x0840, 0x084c, 0x0856, 0x085d, 0x0865, 0x086d, + 0x0878, 0x088f, 0x089a, 0x08a6, 0x08ac, 0x08b5, 0x08c5, 0x08dc, + 0x08e1, 0x08f9, 0x08fd, 0x0905, 0x0910, 0x0917, 0x0920, 0x092c, + 0x0934, 0x0939, 0x093f, 0x0951, 0x0957, 0x095d, 0x0966, 0x096f, + 0x0975, 0x0997, 0x09a7, 0x09c2, 0x09c9, 0x09d4, 0x09e0, 0x09fd, + 0x0a06, 0x0a1b, 0x0a30, 0x0a38, 0x0a3f, 0x0a4f, 0x0a54, 0x0a5a, // Entry 100 - 13F - 0x0a53, 0x0a5a, 0x0a65, 0x0a6c, 0x0a74, 0x0a84, 0x0a8b, 0x0a91, - 0x0a9e, 0x0aaa, 0x0ab2, 0x0abc, 0x0acc, 0x0ad6, 0x0ae2, 0x0aee, - 0x0afb, 0x0b03, 0x0b15, 0x0b1d, 0x0b26, 0x0b30, 0x0b3d, 0x0b48, - 0x0b54, 0x0b5e, 0x0b71, 0x0b7b, 0x0b80, 0x0b8e, 0x0b97, 0x0b9d, - 0x0ba7, 0x0bb3, 0x0bbd, 0x0bcb, -} // Size: 608 bytes - -const amRegionStr string = "" + // Size: 5371 bytes - "አሴንሽን ደሴትአንዶራየተባበሩት ዓረብ ኤምሬትስአፍጋኒስታንአንቲጓ እና ባሩዳአንጉኢላአልባኒያአርሜኒያአንጐላአንታርክቲ" + + 0x0a5f, 0x0a66, 0x0a71, 0x0a78, 0x0a80, 0x0a90, 0x0a97, 0x0a9d, + 0x0aaa, 0x0ab6, 0x0abe, 0x0ac8, 0x0ad8, 0x0ae2, 0x0aee, 0x0afa, + 0x0b07, 0x0b0f, 0x0b21, 0x0b29, 0x0b32, 0x0b3c, 0x0b49, 0x0b54, + 0x0b60, 0x0b6a, 0x0b7d, 0x0b87, 0x0b8c, 0x0b9a, 0x0ba3, 0x0ba9, + 0x0bb3, 0x0bbf, 0x0bc9, 0x0bc9, 0x0bd7, +} // Size: 610 bytes + +const amRegionStr string = "" + // Size: 5401 bytes + "አሴንሽን ደሴትአንዶራየተባበሩት ዓረብ ኤምሬትስአፍጋኒስታንአንቲጓ እና ባሩዳአንጉይላአልባኒያአርሜኒያአንጐላአንታርክቲ" + "ካአርጀንቲናየአሜሪካ ሳሞአኦስትሪያአውስትራልያአሩባየአላንድ ደሴቶችአዘርባጃንቦስኒያ እና ሄርዞጎቪኒያባርቤዶስባንግ" + "ላዲሽቤልጄምቡርኪና ፋሶቡልጌሪያባህሬንብሩንዲቤኒንቅዱስ በርቴሎሜቤርሙዳብሩኒቦሊቪያየካሪቢያን ኔዘርላንድስብራዚልባሃ" + - "ማስቡህታንቡቬት ደሴትቦትስዋናቤላሩስቤሊዘካናዳኮኮስ(ኬሊንግ) ደሴቶችኮንጎ-ኪንሻሳየመካከለኛው አፍሪካ ሪፐብሊክኮን" + - "ጎ ብራዛቪልስዊዘርላንድኮት ዲቯርኩክ ደሴቶችቺሊካሜሩንቻይናኮሎምቢያክሊፐርቶን ደሴትኮስታ ሪካኩባኬፕ ቬርዴኩራሳዎየ" + - "ገና ደሴትሳይፕረስቼክ ሪፑብሊክጀርመንዲዬጎ ጋርሺያጂቡቲዴንማርክዶሚኒካዶሚኒክ ሪፑብሊክአልጄሪያሴኡታና ሜሊላኢኳዶር" + - "ኤስቶኒያግብጽምዕራባዊ ሳህራኤርትራስፔንኢትዮጵያየአውሮፓ ህብረትፊንላንድፊጂየፎክላንድ ደሴቶችሚክሮኔዢያየፋሮ ደሴቶ" + - "ችፈረንሳይጋቦንእንግሊዝግሬናዳጆርጂያየፈረንሳይ ጉዊአናጉርነሲጋናጂብራልተርግሪንላንድጋምቢያጊኒጉዋደሉፕኢኳቶሪያል ጊ" + - "ኒግሪክደቡብ ጆርጂያ እና የደቡብ ሳንድዊች ደሴቶችጉዋቲማላጉዋምጊኒ ቢሳኦጉያናሆንግ ኮንግ ልዩ የአስተዳደር ክልል" + - " ቻይናኽርድ ደሴቶችና ማክዶናልድ ደሴቶችሆንዱራስክሮኤሽያሀይቲሀንጋሪየካናሪ ደሴቶችኢንዶኔዢያአየርላንድእስራኤልአይል " + - "ኦፍ ማንህንድየብሪታኒያ ህንድ ውቂያኖስ ግዛትኢራቅኢራንአይስላንድጣሊያንጀርሲጃማይካጆርዳንጃፓንኬንያኪርጊስታንካምቦ" + - "ዲያኪሪባቲኮሞሮስቅዱስ ኪትስ እና ኔቪስሰሜን ኮሪያደቡብ ኮሪያክዌትካይማን ደሴቶችካዛኪስታንላኦስሊባኖስሴንት ሉቺያ" + - "ሊችተንስታይንሲሪላንካላይቤሪያሌሶቶሊቱዌኒያሉክሰምበርግላትቪያሊቢያሞሮኮሞናኮሞልዶቫሞንተኔግሮሴንት ማርቲንማዳጋስካር" + - "ማርሻል አይላንድመቄዶንያማሊማይናማር(በርማ)ሞንጎሊያማካኡ ልዩ የአስተዳደር ክልል ቻይናየሰሜናዊ ማሪያና ደሴቶችማ" + - "ርቲኒክሞሪቴኒያሞንትሴራትማልታሞሪሸስማልዲቭስማላዊሜክሲኮማሌዢያሞዛምቢክናሚቢያኒው ካሌዶኒያኒጀርኖርፎልክ ደሴትናይጄ" + - "ሪያኒካራጓኔዘርላንድኖርዌይኔፓልናኡሩኒኡይኒው ዚላንድኦማንፓናማፔሩየፈረንሳይ ፖሊኔዢያፓፑዋ ኒው ጊኒፊሊፒንስፓኪስታ" + - "ንፖላንድቅዱስ ፒዬር እና ሚኩኤሎንፒትካኢርን አይስላንድፖርታ ሪኮየፍልስጤም ግዛትፖርቱጋልፓላውፓራጓይኳታርአውትላይ" + - "ንግ ኦሽንያሪዩኒየንሮሜኒያሰርብያራሽያሩዋንዳሳውድአረቢያሰሎሞን ደሴትሲሼልስሱዳንስዊድንሲንጋፖርሴንት ሄለናስሎቬኒያ" + - "ስቫልባርድ እና ጃን ማየንስሎቫኪያሴራሊዮንሳን ማሪኖሴኔጋልሱማሌሱሪናምደቡብ ሱዳንሳኦ ቶሜ እና ፕሪንሲፔኤል ሳልቫ" + - "ዶርሲንት ማርተንሲሪያሱዋዚላንድትሪስታን ዲ ኩንሃየቱርኮችና የካኢኮስ ደሴቶችቻድየፈረንሳይ ደቡባዊ ግዛቶችቶጐታይላ" + - "ንድታጃኪስታንቶክላውምስራቅ ሌስትቱርክሜኒስታንቱኒዚያቶንጋቱርክትሪናዳድ እና ቶቤጎቱቫሉታይዋንታንዛኒያዩክሬንዩጋንዳ" + - "የዩ ኤስ ጠረፍ ላይ ያሉ ደሴቶችየተባበሩት መንግስታትዩናይትድ ስቴትስኡራጓይኡዝቤኪስታንቫቲካን ከተማቅዱስ ቪንሴን" + - "ት እና ግሬናዲንስቬንዙዌላየእንግሊዝ ቨርጂን ደሴቶችየአሜሪካ ቨርጂን ደሴቶችቬትናምቫኑአቱዋሊስ እና ፉቱና ደሴቶች" + - "ሳሞአኮሶቮየመንሜይኦቴደቡብ አፍሪካዛምቢያዚምቧቤያልታወቀ ክልልዓለምአፍሪካሰሜን አሜሪካደቡብ አሜሪካኦሽኒአምስራቃዊ" + - " አፍሪካመካከለኛው አሜሪካምዕራባዊ አፍሪካሰሜናዊ አፍሪካመካከለኛው አፍሪካደቡባዊ አፍሪካአሜሪካሰሜናዊ አሜሪካካሪቢያ" + - "ንምዕራባዊ እሲያደቡባዊ እሲያምዕራባዊ ደቡብ እሲያደቡባዊ አውሮፓአውስትራሊያሜላኔዥያየማይክሮኔዥያን ክልልፖሊኔዥያ" + - "እሲያመካከለኛው እሲያምስራቃዊ እሲያአውሮፓምዕራባዊ አውሮፓሰሜናዊ አውሮፓምስራቃዊ አውሮፓላቲን አሜሪካ" - -var amRegionIdx = []uint16{ // 292 elements + "ማስቡህታንቡቬት ደሴትቦትስዋናቤላሩስበሊዝካናዳኮኮስ(ኬሊንግ) ደሴቶችኮንጎ-ኪንሻሳየመካከለኛው አፍሪካ ሪፐብሊክኮን" + + "ጎ ብራዛቪልስዊዘርላንድኮት ዲቯርኩክ ደሴቶችቺሊካሜሩንቻይናኮሎምቢያክሊፐርቶን ደሴትኮስታሪካኩባኬፕ ቬርዴኩራሳዎየገ" + + "ና ደሴትሳይፕረስቼችኒያጀርመንዲዬጎ ጋርሺያጂቡቲዴንማርክዶሚኒካዶመኒካን ሪፑብሊክአልጄሪያሴኡታና ሜሊላኢኳዶርኤስቶኒ" + + "ያግብጽምዕራባዊ ሳህራኤርትራስፔንኢትዮጵያየአውሮፓ ህብረትየአውሮፓ ዞንፊንላንድፊጂየፎክላንድ ደሴቶችሚክሮኔዢያየፋሮ" + + " ደሴቶችፈረንሳይጋቦንዩናይትድ ኪንግደምግሬናዳጆርጂያየፈረንሳይ ጉዊአናጉርነሲጋናጂብራልተርግሪንላንድጋምቢያጊኒጉዋደሉፕ" + + "ኢኳቶሪያል ጊኒግሪክደቡብ ጆርጂያ እና የደቡብ ሳንድዊች ደሴቶችጉዋቲማላጉዋምጊኒ ቢሳኦጉያናሆንግ ኮንግ ልዩ የአስ" + + "ተዳደር ክልል ቻይናኽርድ ደሴቶችና ማክዶናልድ ደሴቶችሆንዱራስክሮኤሽያሀይቲሀንጋሪየካናሪ ደሴቶችኢንዶኔዢያአየርላን" + + "ድእስራኤልአይል ኦፍ ማንህንድየብሪታኒያ ህንድ ውቂያኖስ ግዛትኢራቅኢራንአይስላንድጣሊያንጀርሲጃማይካጆርዳንጃፓንኬን" + + "ያኪርጊስታንካምቦዲያኪሪባቲኮሞሮስቅዱስ ኪትስ እና ኔቪስሰሜን ኮሪያደቡብ ኮሪያክዌትካይማን ደሴቶችካዛኪስታንላኦስሊ" + + "ባኖስሴንት ሉቺያሊችተንስታይንሲሪላንካላይቤሪያሌሶቶሊቱዌኒያሉክሰምበርግላትቪያሊቢያሞሮኮሞናኮሞልዶቫሞንተኔግሮሴንት " + + "ማርቲንማዳጋስካርማርሻል አይላንድመቄዶንያማሊማይናማር(በርማ)ሞንጎሊያማካኡ ልዩ የአስተዳደር ክልል ቻይናየሰሜናዊ " + + "ማሪያና ደሴቶችማርቲኒክሞሪቴኒያሞንትሴራትማልታሞሪሸስማልዲቭስማላዊሜክሲኮማሌዢያሞዛምቢክናሚቢያኒው ካሌዶኒያኒጀርኖር" + + "ፎልክ ደሴትናይጄሪያኒካራጓኔዘርላንድኖርዌይኔፓልናኡሩኒኡይኒው ዚላንድኦማንፓናማፔሩየፈረንሳይ ፖሊኔዢያፓፑዋ ኒው ጊ" + + "ኒፊሊፒንስፓኪስታንፖላንድቅዱስ ፒዬር እና ሚኩኤሎንፒትካኢርን አይስላንድፖርታ ሪኮየፍልስጤም ግዛትፖርቱጋልፓላውፓራ" + + "ጓይኳታርአውትላይንግ ኦሽንያሪዩኒየንሮሜኒያሰርብያሩስያሩዋንዳሳውድአረቢያሰሎሞን ደሴትሲሼልስሱዳንስዊድንሲንጋፖርሴን" + + "ት ሄለናስሎቬኒያስቫልባርድ እና ጃን ማየንስሎቫኪያሴራሊዮንሳን ማሪኖሴኔጋልሱማሌሱሪናምደቡብ ሱዳንሳኦ ቶሜ እና ፕ" + + "ሪንሲፔኤል ሳልቫዶርሲንት ማርተንሲሪያሱዋዚላንድትሪስታን ዲ ኩንሃየቱርኮችና የካኢኮስ ደሴቶችቻድየፈረንሳይ ደቡባዊ" + + " ግዛቶችቶጐታይላንድታጃኪስታንቶክላውምስራቅ ሌስትቱርክሜኒስታንቱኒዚያቶንጋቱርክትሪናዳድ እና ቶቤጎቱቫሉታይዋንታንዛኒያ" + + "ዩክሬንዩጋንዳየዩ ኤስ ጠረፍ ላይ ያሉ ደሴቶችየተባበሩት መንግስታትዩናይትድ ስቴትስኡራጓይኡዝቤኪስታንቫቲካን ከተማ" + + "ቅዱስ ቪንሴንት እና ግሬናዲንስቬንዙዌላየእንግሊዝ ቨርጂን ደሴቶችየአሜሪካ ቨርጂን ደሴቶችቬትናምቫኑአቱዋሊስ እና " + + "ፉቱና ደሴቶችሳሞአኮሶቮየመንሜይኦቴደቡብ አፍሪካዛምቢያዚምቧቤያልታወቀ ክልልዓለምአፍሪካሰሜን አሜሪካደቡብ አሜሪካኦ" + + "ሽኒአምስራቃዊ አፍሪካመካከለኛው አሜሪካምዕራባዊ አፍሪካሰሜናዊ አፍሪካመካከለኛው አፍሪካደቡባዊ አፍሪካአሜሪካሰሜና" + + "ዊ አሜሪካካሪቢያንምዕራባዊ እሲያደቡባዊ እሲያምዕራባዊ ደቡብ እሲያደቡባዊ አውሮፓአውስትራሊያሜላኔዥያየማይክሮኔዥያ" + + "ን ክልልፖሊኔዥያእሲያመካከለኛው እሲያምስራቃዊ እሲያአውሮፓምዕራባዊ አውሮፓሰሜናዊ አውሮፓምስራቃዊ አውሮፓላቲን አ" + + "ሜሪካ" + +var amRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0019, 0x0025, 0x0051, 0x0066, 0x0083, 0x0092, 0x00a1, 0x00b0, 0x00bc, 0x00d1, 0x00e3, 0x00fc, 0x010b, 0x0120, 0x0129, @@ -43522,131 +46232,131 @@ var amRegionIdx = []uint16{ // 292 elements 0x01db, 0x01e7, 0x01f0, 0x0209, 0x0215, 0x021e, 0x022a, 0x0252, 0x025e, 0x026a, 0x0276, 0x0289, 0x0298, 0x02a4, 0x02ad, 0x02b6, 0x02da, 0x02f0, 0x0322, 0x033b, 0x0350, 0x0360, 0x0373, 0x0379, - 0x0385, 0x038e, 0x039d, 0x03b9, 0x03c9, 0x03cf, 0x03df, 0x03eb, - 0x03fe, 0x040d, 0x0423, 0x042f, 0x0445, 0x044e, 0x045d, 0x0469, + 0x0385, 0x038e, 0x039d, 0x03b9, 0x03c8, 0x03ce, 0x03de, 0x03ea, + 0x03fd, 0x040c, 0x0418, 0x0424, 0x043a, 0x0443, 0x0452, 0x045e, // Entry 40 - 7F - 0x0485, 0x0494, 0x04aa, 0x04b6, 0x04c5, 0x04ce, 0x04e7, 0x04f3, - 0x04fc, 0x050b, 0x0527, 0x0527, 0x0536, 0x053c, 0x055b, 0x056d, - 0x0583, 0x0592, 0x059b, 0x05aa, 0x05b6, 0x05c2, 0x05e1, 0x05ed, - 0x05f3, 0x0605, 0x0617, 0x0623, 0x0629, 0x0638, 0x0651, 0x065a, - 0x06a1, 0x06b0, 0x06b9, 0x06c9, 0x06d2, 0x0716, 0x074f, 0x075e, - 0x076d, 0x0776, 0x0782, 0x079b, 0x07ad, 0x07bf, 0x07ce, 0x07e5, - 0x07ee, 0x0824, 0x082d, 0x0836, 0x0848, 0x0854, 0x085d, 0x0869, - 0x0875, 0x087e, 0x0887, 0x0899, 0x08a8, 0x08b4, 0x08c0, 0x08e4, + 0x047d, 0x048c, 0x04a2, 0x04ae, 0x04bd, 0x04c6, 0x04df, 0x04eb, + 0x04f4, 0x0503, 0x051f, 0x0535, 0x0544, 0x054a, 0x0569, 0x057b, + 0x0591, 0x05a0, 0x05a9, 0x05c8, 0x05d4, 0x05e0, 0x05ff, 0x060b, + 0x0611, 0x0623, 0x0635, 0x0641, 0x0647, 0x0656, 0x066f, 0x0678, + 0x06bf, 0x06ce, 0x06d7, 0x06e7, 0x06f0, 0x0734, 0x076d, 0x077c, + 0x078b, 0x0794, 0x07a0, 0x07b9, 0x07cb, 0x07dd, 0x07ec, 0x0803, + 0x080c, 0x0842, 0x084b, 0x0854, 0x0866, 0x0872, 0x087b, 0x0887, + 0x0893, 0x089c, 0x08a5, 0x08b7, 0x08c6, 0x08d2, 0x08de, 0x0902, // Entry 80 - BF - 0x08f7, 0x090a, 0x0913, 0x092c, 0x093e, 0x0947, 0x0953, 0x0966, - 0x097e, 0x098d, 0x099c, 0x09a5, 0x09b4, 0x09c9, 0x09d5, 0x09de, - 0x09e7, 0x09f0, 0x09fc, 0x0a0e, 0x0a24, 0x0a36, 0x0a52, 0x0a61, - 0x0a67, 0x0a81, 0x0a90, 0x0aca, 0x0af3, 0x0b02, 0x0b11, 0x0b23, - 0x0b2c, 0x0b38, 0x0b47, 0x0b50, 0x0b5c, 0x0b68, 0x0b77, 0x0b83, - 0x0b99, 0x0ba2, 0x0bbb, 0x0bca, 0x0bd6, 0x0be8, 0x0bf4, 0x0bfd, - 0x0c06, 0x0c0f, 0x0c22, 0x0c2b, 0x0c34, 0x0c3a, 0x0c5c, 0x0c73, - 0x0c82, 0x0c91, 0x0c9d, 0x0cc7, 0x0cec, 0x0cfc, 0x0d18, 0x0d27, + 0x0915, 0x0928, 0x0931, 0x094a, 0x095c, 0x0965, 0x0971, 0x0984, + 0x099c, 0x09ab, 0x09ba, 0x09c3, 0x09d2, 0x09e7, 0x09f3, 0x09fc, + 0x0a05, 0x0a0e, 0x0a1a, 0x0a2c, 0x0a42, 0x0a54, 0x0a70, 0x0a7f, + 0x0a85, 0x0a9f, 0x0aae, 0x0ae8, 0x0b11, 0x0b20, 0x0b2f, 0x0b41, + 0x0b4a, 0x0b56, 0x0b65, 0x0b6e, 0x0b7a, 0x0b86, 0x0b95, 0x0ba1, + 0x0bb7, 0x0bc0, 0x0bd9, 0x0be8, 0x0bf4, 0x0c06, 0x0c12, 0x0c1b, + 0x0c24, 0x0c2d, 0x0c40, 0x0c49, 0x0c52, 0x0c58, 0x0c7a, 0x0c91, + 0x0ca0, 0x0caf, 0x0cbb, 0x0ce5, 0x0d0a, 0x0d1a, 0x0d36, 0x0d45, // Entry C0 - FF - 0x0d30, 0x0d3c, 0x0d45, 0x0d67, 0x0d76, 0x0d82, 0x0d8e, 0x0d97, - 0x0da3, 0x0db8, 0x0dce, 0x0dda, 0x0de3, 0x0def, 0x0dfe, 0x0e11, - 0x0e20, 0x0e4a, 0x0e59, 0x0e68, 0x0e78, 0x0e84, 0x0e8d, 0x0e99, - 0x0eac, 0x0ed0, 0x0ee6, 0x0efc, 0x0f05, 0x0f17, 0x0f34, 0x0f63, - 0x0f69, 0x0f95, 0x0f9b, 0x0faa, 0x0fbc, 0x0fc8, 0x0fde, 0x0ff6, - 0x1002, 0x100b, 0x1014, 0x1034, 0x103d, 0x1049, 0x1058, 0x1064, - 0x1070, 0x10a2, 0x10c7, 0x10e3, 0x10ef, 0x1104, 0x111a, 0x114d, - 0x115c, 0x1188, 0x11b1, 0x11bd, 0x11c9, 0x11f0, 0x11f9, 0x1202, + 0x0d4e, 0x0d5a, 0x0d63, 0x0d85, 0x0d94, 0x0da0, 0x0dac, 0x0db5, + 0x0dc1, 0x0dd6, 0x0dec, 0x0df8, 0x0e01, 0x0e0d, 0x0e1c, 0x0e2f, + 0x0e3e, 0x0e68, 0x0e77, 0x0e86, 0x0e96, 0x0ea2, 0x0eab, 0x0eb7, + 0x0eca, 0x0eee, 0x0f04, 0x0f1a, 0x0f23, 0x0f35, 0x0f52, 0x0f81, + 0x0f87, 0x0fb3, 0x0fb9, 0x0fc8, 0x0fda, 0x0fe6, 0x0ffc, 0x1014, + 0x1020, 0x1029, 0x1032, 0x1052, 0x105b, 0x1067, 0x1076, 0x1082, + 0x108e, 0x10c0, 0x10e5, 0x1101, 0x110d, 0x1122, 0x1138, 0x116b, + 0x117a, 0x11a6, 0x11cf, 0x11db, 0x11e7, 0x120e, 0x1217, 0x1220, // Entry 100 - 13F - 0x120b, 0x1217, 0x122d, 0x1239, 0x1245, 0x125e, 0x1267, 0x1273, - 0x1289, 0x129f, 0x12ab, 0x12c7, 0x12e6, 0x1302, 0x131b, 0x133a, - 0x1353, 0x135f, 0x1378, 0x1387, 0x13a0, 0x13b6, 0x13d9, 0x13f2, - 0x1407, 0x1416, 0x143b, 0x144a, 0x1453, 0x146f, 0x1488, 0x1494, - 0x14b0, 0x14c9, 0x14e5, 0x14fb, -} // Size: 608 bytes - -const arRegionStr string = "" + // Size: 5413 bytes + 0x1229, 0x1235, 0x124b, 0x1257, 0x1263, 0x127c, 0x1285, 0x1291, + 0x12a7, 0x12bd, 0x12c9, 0x12e5, 0x1304, 0x1320, 0x1339, 0x1358, + 0x1371, 0x137d, 0x1396, 0x13a5, 0x13be, 0x13d4, 0x13f7, 0x1410, + 0x1425, 0x1434, 0x1459, 0x1468, 0x1471, 0x148d, 0x14a6, 0x14b2, + 0x14ce, 0x14e7, 0x1503, 0x1503, 0x1519, +} // Size: 610 bytes + +const arRegionStr string = "" + // Size: 5446 bytes "جزيرة أسينشيونأندوراالإمارات العربية المتحدةأفغانستانأنتيغوا وبربوداأنغو" + "يلاألبانياأرمينياأنغولاأنتاركتيكاالأرجنتينساموا الأمريكيةالنمساأستراليا" + "أروباجزر آلاندأذربيجانالبوسنة والهرسكبربادوسبنغلاديشبلجيكابوركينا فاسوب" + "لغارياالبحرينبورونديبنينسان بارتليميبرمودابرونايبوليفياهولندا الكاريبية" + - "البرازيلالبهامابوتانجزيرة بوفيهبتسوانابيلاروسبليزكنداجزر كوكوس (كيلينغ)" + - "الكونغو - كينشاساجمهورية أفريقيا الوسطىالكونغو - برازافيلسويسراساحل الع" + + "البرازيلالبهامابوتانجزيرة بوفيهبوتسوانابيلاروسبليزكنداجزر كوكوس (كيلينغ" + + ")الكونغو - كينشاساجمهورية أفريقيا الوسطىالكونغو - برازافيلسويسراساحل الع" + "اججزر كوكتشيليالكاميرونالصينكولومبياجزيرة كليبيرتونكوستاريكاكوباالرأس ا" + - "لأخضركوراساوجزيرة الكريسماسقبرصجمهورية التشيكألمانيادييغو غارسياجيبوتيا" + - "لدانمركدومينيكاجمهورية الدومينيكانالجزائرسيوتا وميليلاالإكوادورإستونيام" + - "صرالصحراء الغربيةإريترياإسبانياإثيوبياالاتحاد الأوروبيفنلندافيجيجزر فوك" + - "لاندميكرونيزياجزر فاروفرنساالغابونالمملكة المتحدةغريناداجورجياغويانا ال" + - "فرنسيةغيرنزيغاناجبل طارقغرينلاندغامبياغينياغوادلوبغينيا الاستوائيةاليون" + - "انجورجيا الجنوبية وجزر ساندويتش الجنوبيةغواتيمالاغوامغينيا بيساوغياناهو" + - "نغ كونغ الصينيةجزيرة هيرد وجزر ماكدونالدهندوراسكرواتياهايتيهنغارياجزر ا" + - "لكناريإندونيسياأيرلنداإسرائيلجزيرة مانالهندالإقليم البريطاني في المحيط " + - "الهنديالعراقإيرانأيسلنداإيطالياجيرسيجامايكاالأردناليابانكينياقيرغيزستان" + - "كمبودياكيريباتيجزر القمرسانت كيتس ونيفيسكوريا الشماليةكوريا الجنوبيةالك" + - "ويتجزر كايمانكازاخستانلاوسلبنانسانت لوسياليختنشتاينسريلانكاليبيرياليسوت" + - "وليتوانيالوكسمبورغلاتفياليبياالمغربموناكومولدوفاالجبل الأسودسانت مارتنم" + - "دغشقرجزر مارشالمقدونياماليميانمار (بورما)منغوليامكاو الصينية (منطقة إدا" + - "رية خاصة)جزر ماريانا الشماليةجزر المارتينيكموريتانيامونتسراتمالطاموريشي" + - "وسجزر المالديفملاويالمكسيكماليزياموزمبيقناميبياكاليدونيا الجديدةالنيجرج" + - "زيرة نورفولكنيجيريانيكاراغواهولنداالنرويجنيبالناورونيوينيوزيلنداعُمانبن" + - "مابيروبولينيزيا الفرنسيةبابوا غينيا الجديدةالفلبينباكستانبولنداسانت بيي" + - "ر وميكولونجزر بيتكيرنبورتوريكوالأراضي الفلسطينيةالبرتغالبالاوباراغوايقط" + - "رأوقيانوسيا النائيةروينيونرومانياصربياروسياروانداالمملكة العربية السعود" + - "يةجزر سليمانسيشلالسودانالسويدسنغافورةسانت هيلانةسلوفينياسفالبارد وجان م" + - "ايانسلوفاكياسيراليونسان مارينوالسنغالالصومالسورينامجنوب السودانساو تومي" + - " وبرينسيبيالسلفادورسينت مارتنسورياسوازيلاندتريستان دي كونهاجزر توركس وكا" + - "يكوستشادالأقاليم الجنوبية الفرنسيةتوغوتايلاندطاجيكستانتوكيلوتيمور- ليشت" + - "يتركمانستانتونستونغاتركياترينيداد وتوباغوتوفالوتايوانتنزانياأوكرانياأوغ" + - "نداجزر الولايات المتحدة النائيةالأمم المتحدةالولايات المتحدةأورغوايأوزب" + - "كستانالفاتيكانسانت فنسنت وجزر غرينادينفنزويلاجزر فيرجن البريطانيةجزر في" + - "رجن التابعة للولايات المتحدةفيتنامفانواتوجزر والس وفوتوناسامواكوسوفوالي" + - "منمايوتجنوب أفريقيازامبيازيمبابويمنطقة غير معروفةالعالمأفريقياأمريكا ال" + - "شماليةأمريكا الجنوبيةأوقيانوسياغرب أفريقياأمريكا الوسطىشرق أفريقياشمال " + - "أفريقياوسط أفريقياأفريقيا الجنوبيةالأمريكتانشمال أمريكاالكاريبيشرق آسيا" + - "جنوب آسياجنوب شرق آسياجنوب أوروباأسترالاسياميلانيزياالجزر الميكرونيزيةب" + - "ولينيزياآسياوسط آسياغرب آسياأوروباشرق أوروباشمال أوروباغرب أوروباأمريكا" + - " اللاتينية" - -var arRegionIdx = []uint16{ // 292 elements + "لأخضركوراساوجزيرة كريسماسقبرصالتشيكألمانيادييغو غارسياجيبوتيالدانمركدوم" + + "ينيكاجمهورية الدومينيكانالجزائرسيوتا وميليلاالإكوادورإستونيامصرالصحراء " + + "الغربيةإريترياإسبانياإثيوبياالاتحاد الأوروبيمنطقة اليوروفنلندافيجيجزر ف" + + "وكلاندميكرونيزياجزر فاروفرنساالغابونالمملكة المتحدةغريناداجورجياغويانا " + + "الفرنسيةغيرنزيغاناجبل طارقغرينلاندغامبياغينياغوادلوبغينيا الاستوائيةالي" + + "ونانجورجيا الجنوبية وجزر ساندويتش الجنوبيةغواتيمالاغوامغينيا بيساوغيانا" + + "هونغ كونغ الصينية (منطقة إدارية خاصة)جزيرة هيرد وجزر ماكدونالدهندوراسكر" + + "واتياهايتيهنغارياجزر الكناريإندونيسياأيرلنداإسرائيلجزيرة مانالهندالإقلي" + + "م البريطاني في المحيط الهنديالعراقإيرانآيسلنداإيطالياجيرسيجامايكاالأردن" + + "اليابانكينياقيرغيزستانكمبودياكيريباتيجزر القمرسانت كيتس ونيفيسكوريا الش" + + "ماليةكوريا الجنوبيةالكويتجزر كايمانكازاخستانلاوسلبنانسانت لوسياليختنشتا" + + "ينسريلانكاليبيرياليسوتوليتوانيالوكسمبورغلاتفياليبياالمغربموناكومولدوفاا" + + "لجبل الأسودسان مارتنمدغشقرجزر مارشالمقدونياماليميانمار (بورما)منغوليامك" + + "او الصينية (منطقة إدارية خاصة)جزر ماريانا الشماليةجزر المارتينيكموريتان" + + "يامونتسراتمالطاموريشيوسجزر المالديفملاويالمكسيكماليزياموزمبيقناميبياكال" + + "يدونيا الجديدةالنيجرجزيرة نورفولكنيجيريانيكاراغواهولنداالنرويجنيبالناور" + + "ونيوينيوزيلنداعُمانبنمابيروبولينيزيا الفرنسيةبابوا غينيا الجديدةالفلبين" + + "باكستانبولنداسان بيير ومكويلونجزر بيتكيرنبورتوريكوالأراضي الفلسطينيةالب" + + "رتغالبالاوباراغوايقطرأوقيانوسيا النائيةروينيونرومانياصربياروسياروانداال" + + "مملكة العربية السعوديةجزر سليمانسيشلالسودانالسويدسنغافورةسانت هيليناسلو" + + "فينياسفالبارد وجان ماينسلوفاكياسيراليونسان مارينوالسنغالالصومالسورينامج" + + "نوب السودانساو تومي وبرينسيبيالسلفادورسانت مارتنسورياسوازيلاندتريستان د" + + "ا كوناجزر توركس وكايكوستشادالأقاليم الجنوبية الفرنسيةتوغوتايلاندطاجيكست" + + "انتوكيلوتيمور- ليشتيتركمانستانتونستونغاتركياترينيداد وتوباغوتوفالوتايوا" + + "نتنزانياأوكرانياأوغنداجزر الولايات المتحدة النائيةالأمم المتحدةالولايات" + + " المتحدةأورغوايأوزبكستانالفاتيكانسانت فنسنت وجزر غرينادينفنزويلاجزر فيرج" + + "ن البريطانيةجزر فيرجن التابعة للولايات المتحدةفيتنامفانواتوجزر والس وفو" + + "توناسامواكوسوفواليمنمايوتجنوب أفريقيازامبيازيمبابويمنطقة غير معروفةالعا" + + "لمأفريقياأمريكا الشماليةأمريكا الجنوبيةأوقيانوسياغرب أفريقياأمريكا الوس" + + "طىشرق أفريقياشمال أفريقياوسط أفريقياأفريقيا الجنوبيةالأمريكتانشمال أمري" + + "كاالكاريبيشرق آسياجنوب آسياجنوب شرق آسياجنوب أوروباأسترالاسياميلانيزياا" + + "لجزر الميكرونيزيةبولينيزياآسياوسط آسياغرب آسياأوروباشرق أوروباشمال أورو" + + "باغرب أوروباأمريكا اللاتينية" + +var arRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x001b, 0x0027, 0x0055, 0x0067, 0x0084, 0x0092, 0x00a0, 0x00ae, 0x00ba, 0x00ce, 0x00e0, 0x00fd, 0x0109, 0x0119, 0x0123, 0x0134, 0x0144, 0x0161, 0x016f, 0x017f, 0x018b, 0x01a2, 0x01b0, 0x01be, 0x01cc, 0x01d4, 0x01eb, 0x01f7, 0x0203, 0x0211, 0x0230, - 0x0240, 0x024e, 0x0258, 0x026d, 0x027b, 0x0289, 0x0291, 0x0299, - 0x02b9, 0x02d8, 0x0302, 0x0323, 0x032f, 0x0342, 0x034f, 0x0359, - 0x036b, 0x0375, 0x0385, 0x03a2, 0x03b4, 0x03bc, 0x03d3, 0x03e1, - 0x03fe, 0x0406, 0x0421, 0x042f, 0x0446, 0x0452, 0x0462, 0x0472, + 0x0240, 0x024e, 0x0258, 0x026d, 0x027d, 0x028b, 0x0293, 0x029b, + 0x02bb, 0x02da, 0x0304, 0x0325, 0x0331, 0x0344, 0x0351, 0x035b, + 0x036d, 0x0377, 0x0387, 0x03a4, 0x03b6, 0x03be, 0x03d5, 0x03e3, + 0x03fc, 0x0404, 0x0410, 0x041e, 0x0435, 0x0441, 0x0451, 0x0461, // Entry 40 - 7F - 0x0497, 0x04a5, 0x04be, 0x04d0, 0x04de, 0x04e4, 0x0501, 0x050f, - 0x051d, 0x052b, 0x054a, 0x054a, 0x0556, 0x055e, 0x0573, 0x0587, - 0x0596, 0x05a0, 0x05ae, 0x05cb, 0x05d9, 0x05e5, 0x0602, 0x060e, - 0x0616, 0x0625, 0x0635, 0x0641, 0x064b, 0x0659, 0x0678, 0x0686, - 0x06ce, 0x06e0, 0x06e8, 0x06fd, 0x0707, 0x0727, 0x0756, 0x0764, - 0x0772, 0x077c, 0x078a, 0x079f, 0x07b1, 0x07bf, 0x07cd, 0x07de, - 0x07e8, 0x0828, 0x0834, 0x083e, 0x084c, 0x085a, 0x0864, 0x0872, - 0x087e, 0x088c, 0x0896, 0x08aa, 0x08b8, 0x08c8, 0x08d9, 0x08f7, + 0x0486, 0x0494, 0x04ad, 0x04bf, 0x04cd, 0x04d3, 0x04f0, 0x04fe, + 0x050c, 0x051a, 0x0539, 0x0550, 0x055c, 0x0564, 0x0579, 0x058d, + 0x059c, 0x05a6, 0x05b4, 0x05d1, 0x05df, 0x05eb, 0x0608, 0x0614, + 0x061c, 0x062b, 0x063b, 0x0647, 0x0651, 0x065f, 0x067e, 0x068c, + 0x06d4, 0x06e6, 0x06ee, 0x0703, 0x070d, 0x0750, 0x077f, 0x078d, + 0x079b, 0x07a5, 0x07b3, 0x07c8, 0x07da, 0x07e8, 0x07f6, 0x0807, + 0x0811, 0x0851, 0x085d, 0x0867, 0x0875, 0x0883, 0x088d, 0x089b, + 0x08a7, 0x08b5, 0x08bf, 0x08d3, 0x08e1, 0x08f1, 0x0902, 0x0920, // Entry 80 - BF - 0x0912, 0x092d, 0x0939, 0x094c, 0x095e, 0x0966, 0x0970, 0x0983, - 0x0997, 0x09a7, 0x09b5, 0x09c1, 0x09d1, 0x09e3, 0x09ef, 0x09f9, - 0x0a05, 0x0a11, 0x0a1f, 0x0a36, 0x0a49, 0x0a55, 0x0a68, 0x0a76, - 0x0a7e, 0x0a99, 0x0aa7, 0x0ae1, 0x0b07, 0x0b22, 0x0b34, 0x0b44, - 0x0b4e, 0x0b5e, 0x0b75, 0x0b7f, 0x0b8d, 0x0b9b, 0x0ba9, 0x0bb7, - 0x0bd8, 0x0be4, 0x0bfd, 0x0c0b, 0x0c1d, 0x0c29, 0x0c37, 0x0c41, - 0x0c4b, 0x0c53, 0x0c65, 0x0c6f, 0x0c77, 0x0c7f, 0x0ca2, 0x0cc6, - 0x0cd4, 0x0ce2, 0x0cee, 0x0d10, 0x0d25, 0x0d37, 0x0d5a, 0x0d6a, + 0x093b, 0x0956, 0x0962, 0x0975, 0x0987, 0x098f, 0x0999, 0x09ac, + 0x09c0, 0x09d0, 0x09de, 0x09ea, 0x09fa, 0x0a0c, 0x0a18, 0x0a22, + 0x0a2e, 0x0a3a, 0x0a48, 0x0a5f, 0x0a70, 0x0a7c, 0x0a8f, 0x0a9d, + 0x0aa5, 0x0ac0, 0x0ace, 0x0b08, 0x0b2e, 0x0b49, 0x0b5b, 0x0b6b, + 0x0b75, 0x0b85, 0x0b9c, 0x0ba6, 0x0bb4, 0x0bc2, 0x0bd0, 0x0bde, + 0x0bff, 0x0c0b, 0x0c24, 0x0c32, 0x0c44, 0x0c50, 0x0c5e, 0x0c68, + 0x0c72, 0x0c7a, 0x0c8c, 0x0c96, 0x0c9e, 0x0ca6, 0x0cc9, 0x0ced, + 0x0cfb, 0x0d09, 0x0d15, 0x0d35, 0x0d4a, 0x0d5c, 0x0d7f, 0x0d8f, // Entry C0 - FF - 0x0d74, 0x0d84, 0x0d8a, 0x0dad, 0x0dbb, 0x0dc9, 0x0dd3, 0x0ddd, - 0x0de9, 0x0e17, 0x0e2a, 0x0e32, 0x0e40, 0x0e4c, 0x0e5c, 0x0e71, - 0x0e81, 0x0ea5, 0x0eb5, 0x0ec5, 0x0ed8, 0x0ee6, 0x0ef4, 0x0f02, - 0x0f19, 0x0f3b, 0x0f4d, 0x0f60, 0x0f6a, 0x0f7c, 0x0f9a, 0x0fba, - 0x0fc2, 0x0ff4, 0x0ffc, 0x100a, 0x101c, 0x1028, 0x103e, 0x1052, - 0x105a, 0x1064, 0x106e, 0x108d, 0x1099, 0x10a5, 0x10b3, 0x10c3, - 0x10cf, 0x1104, 0x111d, 0x113c, 0x114a, 0x115c, 0x116e, 0x119b, - 0x11a9, 0x11cf, 0x120f, 0x121b, 0x1229, 0x1247, 0x1251, 0x125d, + 0x0d99, 0x0da9, 0x0daf, 0x0dd2, 0x0de0, 0x0dee, 0x0df8, 0x0e02, + 0x0e0e, 0x0e3c, 0x0e4f, 0x0e57, 0x0e65, 0x0e71, 0x0e81, 0x0e96, + 0x0ea6, 0x0ec8, 0x0ed8, 0x0ee8, 0x0efb, 0x0f09, 0x0f17, 0x0f25, + 0x0f3c, 0x0f5e, 0x0f70, 0x0f83, 0x0f8d, 0x0f9f, 0x0fbb, 0x0fdb, + 0x0fe3, 0x1015, 0x101d, 0x102b, 0x103d, 0x1049, 0x105f, 0x1073, + 0x107b, 0x1085, 0x108f, 0x10ae, 0x10ba, 0x10c6, 0x10d4, 0x10e4, + 0x10f0, 0x1125, 0x113e, 0x115d, 0x116b, 0x117d, 0x118f, 0x11bc, + 0x11ca, 0x11f0, 0x1230, 0x123c, 0x124a, 0x1268, 0x1272, 0x127e, // Entry 100 - 13F - 0x1267, 0x1271, 0x1288, 0x1294, 0x12a4, 0x12c2, 0x12ce, 0x12dc, - 0x12f9, 0x1316, 0x132a, 0x133f, 0x1358, 0x136d, 0x1384, 0x1399, - 0x13b8, 0x13cc, 0x13e1, 0x13f1, 0x1400, 0x1411, 0x1429, 0x143e, - 0x1452, 0x1464, 0x1487, 0x1499, 0x14a1, 0x14b0, 0x14bf, 0x14cb, - 0x14de, 0x14f3, 0x1506, 0x1525, -} // Size: 608 bytes - -const azRegionStr string = "" + // Size: 3273 bytes + 0x1288, 0x1292, 0x12a9, 0x12b5, 0x12c5, 0x12e3, 0x12ef, 0x12fd, + 0x131a, 0x1337, 0x134b, 0x1360, 0x1379, 0x138e, 0x13a5, 0x13ba, + 0x13d9, 0x13ed, 0x1402, 0x1412, 0x1421, 0x1432, 0x144a, 0x145f, + 0x1473, 0x1485, 0x14a8, 0x14ba, 0x14c2, 0x14d1, 0x14e0, 0x14ec, + 0x14ff, 0x1514, 0x1527, 0x1527, 0x1546, +} // Size: 610 bytes + +const azRegionStr string = "" + // Size: 3270 bytes "Askenson adasıAndorraBirləşmiş Ərəb ƏmirlikləriƏfqanıstanAntiqua və Barb" + "udaAngilyaAlbaniyaErmənistanAnqolaAntarktikaArgentinaAmerika SamoasıAvst" + "riyaAvstraliyaArubaAland adalarıAzərbaycanBosniya və HerseqovinaBarbados" + @@ -43655,43 +46365,43 @@ const azRegionStr string = "" + // Size: 3273 bytes "uve adasıBotsvanaBelarusBelizKanadaKokos (Kilinq) adalarıKonqo - Kinşasa" + "Mərkəzi Afrika RespublikasıKonqo - BrazzavilİsveçrəKotd’ivuarKuk adaları" + "ÇiliKamerunÇinKolumbiyaKlipperton adasıKosta RikaKubaKabo-VerdeKurasaoM" + - "ilad adasıKiprÇex RespublikasıAlmaniyaDieqo QarsiyaCibutiDanimarkaDomini" + - "kaDominikan RespublikasıƏlcəzairSeuta və MelilyaEkvadorEstoniyaMisirQərb" + - "i SaxaraEritreyaİspaniyaEfiopiyaAvropa BirliyiFinlandiyaFiciFolklend ada" + - "larıMikroneziyaFarer adalarıFransaQabonBirləşmiş KrallıqQrenadaGürcüstan" + - "Fransa QvianasıGernsiQanaCəbəllütariqQrenlandiyaQambiyaQvineyaQvadelupaE" + - "kvatorial QvineyaYunanıstanCənubi Corciya və Cənubi Sendviç adalarıQvate" + - "malaQuamQvineya-BisauQayanaHonq Konq Xüsusi İnzibati Ərazi ÇinHerd və Ma" + - "kdonald adalarıHondurasXorvatiyaHaitiMacarıstanKanar adalarıİndoneziyaİr" + - "landiyaİsrailMen adasıHindistanBritaniyanın Hind Okeanı Ərazisiİraqİranİ" + - "slandiyaİtaliyaCersiYamaykaİordaniyaYaponiyaKeniyaQırğızıstanKambocaKiri" + - "batiKomor adalarıSent-Kits və NevisŞimali KoreyaCənubi KoreyaKüveytKayma" + - "n adalarıQazaxıstanLaosLivanSent-LusiyaLixtenşteynŞri-LankaLiberiyaLesot" + - "oLitvaLüksemburqLatviyaLiviyaMərakeşMonakoMoldovaMonteneqroSent MartinMa" + - "daqaskarMarşal adalarıMakedoniyaMaliMyanmaMonqolustanMakao Xüsusi İnziba" + - "ti Ərazi ÇinŞimali Marian adalarıMartinikMavritaniyaMonseratMaltaMavriki" + - "Maldiv adalarıMalaviMeksikaMalayziyaMozambikNamibiyaYeni KaledoniyaNiger" + - "Norfolk adasıNigeriyaNikaraquaNiderlandNorveçNepalNauruNiueYeni Zelandiy" + - "aOmanPanamaPeruFransa PolineziyasıPapua-Yeni QvineyaFilippinPakistanPolş" + - "aMüqəddəs Pyer və MikelonPitkern adalarıPuerto RikoFələstin ƏraziləriPor" + - "tuqaliyaPalauParaqvayQətərUzaq OkeaniyaReyunyonRumıniyaSerbiyaRusiyaRuan" + - "daSəudiyyə ƏrəbistanıSolomon adalarıSeyşel adalarıSudanİsveçSinqapurMüqə" + - "ddəs YelenaSloveniyaSvalbard və Yan-MayenSlovakiyaSyerra-LeoneSan-Marino" + - "SeneqalSomaliSurinamCənubi SudanSan-Tome və PrinsipiSalvadorSint-MartenS" + - "uriyaSvazilendTristan da KunyaTörks və Kaykos adalarıÇadFransanın Cənub " + - "ƏraziləriToqoTailandTacikistanTokelauŞərqi TimorTürkmənistanTunisTonqaT" + - "ürkiyəTrinidad və TobaqoTuvaluTayvanTanzaniyaUkraynaUqandaABŞ-a bağlı k" + - "içik adacıqlarBirləşmiş Millətlər TəşkilatıAmerika Birləşmiş ŞtatlarıUru" + - "qvayÖzbəkistanVatikanSent-Vinsent və QrenadinlərVenesuelaBritaniyanın Vi" + - "rgin adalarıABŞ Virgin adalarıVyetnamVanuatuUollis və FutunaSamoaKosovoY" + - "əmənMayotCənub AfrikaZambiyaZimbabveNaməlum RegionDünyaAfrikaŞimali Ame" + - "rikaCənubi AmerikaOkeaniyaQərbi AfrikaMərkəzi AmerikaŞərqi AfrikaŞimali " + - "AfrikaMərkəzi AfrikaCənubi AfrikaAmerikaŞimal AmerikasıKaribŞərqi AsiyaC" + - "ənubi AsiyaCənub-Şərqi AsiyaCənubi AvropaAvstralaziyaMelaneziyaMikronez" + - "iya RegionuPolineziyaAsiyaMərkəzi AsiyaQərbi AsiyaAvropaŞərqi AvropaŞima" + - "li AvropaQərbi AvropaLatın Amerikası" - -var azRegionIdx = []uint16{ // 292 elements + "ilad adasıKiprÇexiyaAlmaniyaDieqo QarsiyaCibutiDanimarkaDominikaDominika" + + "n RespublikasıƏlcəzairSeuta və MelilyaEkvadorEstoniyaMisirQərbi SaxaraEr" + + "itreyaİspaniyaEfiopiyaAvropa BirliyiAvrozonaFinlandiyaFiciFolklend adala" + + "rıMikroneziyaFarer adalarıFransaQabonBirləşmiş KrallıqQrenadaGürcüstanFr" + + "ansa QvianasıGernsiQanaCəbəllütariqQrenlandiyaQambiyaQvineyaQvadelupaEkv" + + "atorial QvineyaYunanıstanCənubi Corciya və Cənubi Sendviç adalarıQvatema" + + "laQuamQvineya-BisauQayanaHonq Konq Xüsusi İnzibati Ərazi ÇinHerd və Makd" + + "onald adalarıHondurasXorvatiyaHaitiMacarıstanKanar adalarıİndoneziyaİrla" + + "ndiyaİsrailMen adasıHindistanBritaniyanın Hind Okeanı Ərazisiİraqİranİsl" + + "andiyaİtaliyaCersiYamaykaİordaniyaYaponiyaKeniyaQırğızıstanKambocaKiriba" + + "tiKomor adalarıSent-Kits və NevisŞimali KoreyaCənubi KoreyaKüveytKayman " + + "adalarıQazaxıstanLaosLivanSent-LusiyaLixtenşteynŞri-LankaLiberiyaLesotoL" + + "itvaLüksemburqLatviyaLiviyaMərakeşMonakoMoldovaMonteneqroSent MartinMada" + + "qaskarMarşal adalarıMakedoniyaMaliMyanmaMonqolustanMakao Xüsusi İnzibati" + + " Ərazi ÇinŞimali Marian adalarıMartinikMavritaniyaMonseratMaltaMavrikiMa" + + "ldiv adalarıMalaviMeksikaMalayziyaMozambikNamibiyaYeni KaledoniyaNigerNo" + + "rfolk adasıNigeriyaNikaraquaNiderlandNorveçNepalNauruNiueYeni ZelandiyaO" + + "manPanamaPeruFransa PolineziyasıPapua-Yeni QvineyaFilippinPakistanPolşaM" + + "üqəddəs Pyer və MikelonPitkern adalarıPuerto RikoFələstin ƏraziləriPort" + + "uqaliyaPalauParaqvayQətərUzaq OkeaniyaReyunyonRumıniyaSerbiyaRusiyaRuand" + + "aSəudiyyə ƏrəbistanıSolomon adalarıSeyşel adalarıSudanİsveçSinqapurMüqəd" + + "dəs YelenaSloveniyaSvalbard və Yan-MayenSlovakiyaSyerra-LeoneSan-MarinoS" + + "eneqalSomaliSurinamCənubi SudanSan-Tome və PrinsipiSalvadorSint-MartenSu" + + "riyaSvazilendTristan da KunyaTörks və Kaykos adalarıÇadFransanın Cənub Ə" + + "raziləriToqoTailandTacikistanTokelauŞərqi TimorTürkmənistanTunisTonqaTür" + + "kiyəTrinidad və TobaqoTuvaluTayvanTanzaniyaUkraynaUqandaABŞ-a bağlı kiçi" + + "k adacıqlarBirləşmiş Millətlər TəşkilatıAmerika Birləşmiş ŞtatlarıUruqva" + + "yÖzbəkistanVatikanSent-Vinsent və QrenadinlərVenesuelaBritaniyanın Virgi" + + "n adalarıABŞ Virgin adalarıVyetnamVanuatuUollis və FutunaSamoaKosovoYəmə" + + "nMayotCənub AfrikaZambiyaZimbabveNaməlum RegionDünyaAfrikaŞimali Amerika" + + "Cənubi AmerikaOkeaniyaQərbi AfrikaMərkəzi AmerikaŞərqi AfrikaŞimali Afri" + + "kaMərkəzi AfrikaCənubi AfrikaAmerikaŞimal AmerikasıKaribŞərqi AsiyaCənub" + + "i AsiyaCənub-Şərqi AsiyaCənubi AvropaAvstralaziyaMelaneziyaMikroneziya R" + + "egionuPolineziyaAsiyaMərkəzi AsiyaQərbi AsiyaAvropaŞərqi AvropaŞimali Av" + + "ropaQərbi AvropaLatın Amerikası" + +var azRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x000f, 0x0016, 0x0037, 0x0043, 0x0056, 0x005d, 0x0065, 0x0070, 0x0076, 0x0080, 0x0089, 0x0099, 0x00a1, 0x00ab, 0x00b0, @@ -43700,150 +46410,150 @@ var azRegionIdx = []uint16{ // 292 elements 0x016b, 0x0179, 0x017e, 0x0189, 0x0191, 0x0198, 0x019d, 0x01a3, 0x01ba, 0x01ca, 0x01e8, 0x01f9, 0x0203, 0x020f, 0x021b, 0x0220, 0x0227, 0x022b, 0x0234, 0x0245, 0x024f, 0x0253, 0x025d, 0x0264, - 0x0270, 0x0274, 0x0286, 0x028e, 0x029b, 0x02a1, 0x02aa, 0x02b2, + 0x0270, 0x0274, 0x027b, 0x0283, 0x0290, 0x0296, 0x029f, 0x02a7, // Entry 40 - 7F - 0x02c9, 0x02d3, 0x02e4, 0x02eb, 0x02f3, 0x02f8, 0x0305, 0x030d, - 0x0316, 0x031e, 0x032c, 0x032c, 0x0336, 0x033a, 0x034b, 0x0356, - 0x0364, 0x036a, 0x036f, 0x0384, 0x038b, 0x0396, 0x03a6, 0x03ac, - 0x03b0, 0x03bf, 0x03ca, 0x03d1, 0x03d8, 0x03e1, 0x03f3, 0x03fe, - 0x042b, 0x0434, 0x0438, 0x0445, 0x044b, 0x0472, 0x048d, 0x0495, - 0x049e, 0x04a3, 0x04ae, 0x04bc, 0x04c7, 0x04d1, 0x04d8, 0x04e2, - 0x04eb, 0x050e, 0x0513, 0x0518, 0x0522, 0x052a, 0x052f, 0x0536, - 0x0540, 0x0548, 0x054e, 0x055d, 0x0564, 0x056c, 0x057a, 0x058d, + 0x02be, 0x02c8, 0x02d9, 0x02e0, 0x02e8, 0x02ed, 0x02fa, 0x0302, + 0x030b, 0x0313, 0x0321, 0x0329, 0x0333, 0x0337, 0x0348, 0x0353, + 0x0361, 0x0367, 0x036c, 0x0381, 0x0388, 0x0393, 0x03a3, 0x03a9, + 0x03ad, 0x03bc, 0x03c7, 0x03ce, 0x03d5, 0x03de, 0x03f0, 0x03fb, + 0x0428, 0x0431, 0x0435, 0x0442, 0x0448, 0x046f, 0x048a, 0x0492, + 0x049b, 0x04a0, 0x04ab, 0x04b9, 0x04c4, 0x04ce, 0x04d5, 0x04df, + 0x04e8, 0x050b, 0x0510, 0x0515, 0x051f, 0x0527, 0x052c, 0x0533, + 0x053d, 0x0545, 0x054b, 0x055a, 0x0561, 0x0569, 0x0577, 0x058a, // Entry 80 - BF - 0x059b, 0x05a9, 0x05b0, 0x05bf, 0x05ca, 0x05ce, 0x05d3, 0x05de, - 0x05ea, 0x05f4, 0x05fc, 0x0602, 0x0607, 0x0612, 0x0619, 0x061f, - 0x0628, 0x062e, 0x0635, 0x063f, 0x064a, 0x0654, 0x0664, 0x066e, - 0x0672, 0x0678, 0x0683, 0x06a6, 0x06bd, 0x06c5, 0x06d0, 0x06d8, - 0x06dd, 0x06e4, 0x06f3, 0x06f9, 0x0700, 0x0709, 0x0711, 0x0719, - 0x0728, 0x072d, 0x073b, 0x0743, 0x074c, 0x0755, 0x075c, 0x0761, - 0x0766, 0x076a, 0x0778, 0x077c, 0x0782, 0x0786, 0x079a, 0x07ac, - 0x07b4, 0x07bc, 0x07c2, 0x07de, 0x07ee, 0x07f9, 0x080f, 0x081a, + 0x0598, 0x05a6, 0x05ad, 0x05bc, 0x05c7, 0x05cb, 0x05d0, 0x05db, + 0x05e7, 0x05f1, 0x05f9, 0x05ff, 0x0604, 0x060f, 0x0616, 0x061c, + 0x0625, 0x062b, 0x0632, 0x063c, 0x0647, 0x0651, 0x0661, 0x066b, + 0x066f, 0x0675, 0x0680, 0x06a3, 0x06ba, 0x06c2, 0x06cd, 0x06d5, + 0x06da, 0x06e1, 0x06f0, 0x06f6, 0x06fd, 0x0706, 0x070e, 0x0716, + 0x0725, 0x072a, 0x0738, 0x0740, 0x0749, 0x0752, 0x0759, 0x075e, + 0x0763, 0x0767, 0x0775, 0x0779, 0x077f, 0x0783, 0x0797, 0x07a9, + 0x07b1, 0x07b9, 0x07bf, 0x07db, 0x07eb, 0x07f6, 0x080c, 0x0817, // Entry C0 - FF - 0x081f, 0x0827, 0x082e, 0x083b, 0x0843, 0x084c, 0x0853, 0x0859, - 0x085f, 0x0877, 0x0887, 0x0897, 0x089c, 0x08a3, 0x08ab, 0x08bd, - 0x08c6, 0x08dc, 0x08e5, 0x08f1, 0x08fb, 0x0902, 0x0908, 0x090f, - 0x091c, 0x0931, 0x0939, 0x0944, 0x094a, 0x0953, 0x0963, 0x097d, - 0x0981, 0x099e, 0x09a2, 0x09a9, 0x09b3, 0x09ba, 0x09c7, 0x09d5, - 0x09da, 0x09df, 0x09e8, 0x09fb, 0x0a01, 0x0a07, 0x0a10, 0x0a17, - 0x0a1d, 0x0a3d, 0x0a62, 0x0a81, 0x0a88, 0x0a94, 0x0a9b, 0x0ab8, - 0x0ac1, 0x0ade, 0x0af2, 0x0af9, 0x0b00, 0x0b11, 0x0b16, 0x0b1c, + 0x081c, 0x0824, 0x082b, 0x0838, 0x0840, 0x0849, 0x0850, 0x0856, + 0x085c, 0x0874, 0x0884, 0x0894, 0x0899, 0x08a0, 0x08a8, 0x08ba, + 0x08c3, 0x08d9, 0x08e2, 0x08ee, 0x08f8, 0x08ff, 0x0905, 0x090c, + 0x0919, 0x092e, 0x0936, 0x0941, 0x0947, 0x0950, 0x0960, 0x097a, + 0x097e, 0x099b, 0x099f, 0x09a6, 0x09b0, 0x09b7, 0x09c4, 0x09d2, + 0x09d7, 0x09dc, 0x09e5, 0x09f8, 0x09fe, 0x0a04, 0x0a0d, 0x0a14, + 0x0a1a, 0x0a3a, 0x0a5f, 0x0a7e, 0x0a85, 0x0a91, 0x0a98, 0x0ab5, + 0x0abe, 0x0adb, 0x0aef, 0x0af6, 0x0afd, 0x0b0e, 0x0b13, 0x0b19, // Entry 100 - 13F - 0x0b23, 0x0b28, 0x0b35, 0x0b3c, 0x0b44, 0x0b53, 0x0b59, 0x0b5f, - 0x0b6e, 0x0b7d, 0x0b85, 0x0b92, 0x0ba3, 0x0bb1, 0x0bbf, 0x0bcf, - 0x0bdd, 0x0be4, 0x0bf5, 0x0bfa, 0x0c07, 0x0c14, 0x0c28, 0x0c36, - 0x0c42, 0x0c4c, 0x0c5f, 0x0c69, 0x0c6e, 0x0c7d, 0x0c89, 0x0c8f, - 0x0c9d, 0x0cab, 0x0cb8, 0x0cc9, -} // Size: 608 bytes - -const bgRegionStr string = "" + // Size: 5929 bytes + 0x0b20, 0x0b25, 0x0b32, 0x0b39, 0x0b41, 0x0b50, 0x0b56, 0x0b5c, + 0x0b6b, 0x0b7a, 0x0b82, 0x0b8f, 0x0ba0, 0x0bae, 0x0bbc, 0x0bcc, + 0x0bda, 0x0be1, 0x0bf2, 0x0bf7, 0x0c04, 0x0c11, 0x0c25, 0x0c33, + 0x0c3f, 0x0c49, 0x0c5c, 0x0c66, 0x0c6b, 0x0c7a, 0x0c86, 0x0c8c, + 0x0c9a, 0x0ca8, 0x0cb5, 0x0cb5, 0x0cc6, +} // Size: 610 bytes + +const bgRegionStr string = "" + // Size: 5932 bytes "остров ВъзнесениеАндораОбединени арабски емирстваАфганистанАнтигуа и Бар" + "будаАнгуилаАлбанияАрменияАнголаАнтарктикаАржентинаАмериканска СамоаАвст" + "рияАвстралияАрубаОландски островиАзербайджанБосна и ХерцеговинаБарбадос" + "БангладешБелгияБуркина ФасоБългарияБахрейнБурундиБенинСен БартелемиБерм" + - "удаБруней ДаруссаламБоливияКарибска НидерландияБразилияБахамиБутаностро" + - "в БувеБотсванаБеларусБелизКанадаКокосови острови (острови Кийлинг)Конго" + - " (Киншаса)Централноафриканска републикаКонго (Бразавил)ШвейцарияКот д’Ив" + - "оарострови КукЧилиКамерунКитайКолумбияостров КлипертонКоста РикаКубаКаб" + - "о ВердеКюрасаоостров РождествоКипърЧешка републикаГерманияДиего ГарсияД" + - "жибутиДанияДоминикаДоминиканска републикаАлжирСеута и МелияЕквадорЕстон" + - "ияЕгипетЗападна СахараЕритреяИспанияЕтиопияЕвропейски съюзФинландияФидж" + - "иФолклендски островиМикронезияФарьорски островиФранцияГабонОбединеното " + - "кралствоГренадаГрузияФренска ГвианаГърнзиГанаГибралтарГренландияГамбияГ" + - "винеяГваделупаЕкваториална ГвинеяГърцияЮжна Джорджия и Южни Сандвичеви " + - "островиГватемалаГуамГвинея-БисауГаянаХонконг, САР на Китайостров Хърд и" + - " острови МакдоналдХондурасХърватияХаитиУнгарияКанарски островиИндонезияИ" + - "рландияИзраелостров МанИндияБританска територия в Индийския океанИракИр" + - "анИсландияИталияДжърсиЯмайкаЙорданияЯпонияКенияКиргизстанКамбоджаКириба" + - "тиКоморски островиСейнт Китс и НевисСеверна КореяЮжна КореяКувейтКайман" + - "ови островиКазахстанЛаосЛиванСейнт ЛусияЛихтенщайнШри ЛанкаЛиберияЛесот" + - "оЛитваЛюксембургЛатвияЛибияМарокоМонакоМолдоваЧерна гораСен МартенМадаг" + - "аскарМаршалови островиМакедонияМалиМианмар (Бирма)МонголияМакао, САР на" + - " КитайСеверни Мариански островиМартиникаМавританияМонтсератМалтаМавриций" + - "МалдивиМалавиМексикоМалайзияМозамбикНамибияНова КаледонияНигеростров Но" + - "рфолкНигерияНикарагуаНидерландияНорвегияНепалНауруНиуеНова ЗеландияОман" + - "ПанамаПеруФренска ПолинезияПапуа-Нова ГвинеяФилипиниПакистанПолшаСен Пи" + - "ер и МикелонОстрови ПиткернПуерто РикоПалестински територииПортугалияПа" + - "лауПарагвайКатарОтдалечени острови на ОкеанияРеюнионРумънияСърбияРусияР" + - "уандаСаудитска АрабияСоломонови островиСейшелиСуданШвецияСингапурСвета " + - "ЕленаСловенияСвалбард и Ян МайенСловакияСиера ЛеонеСан МариноСенегалСом" + - "алияСуринамЮжен СуданСао Томе и ПринсипиСалвадорСинт МартенСирияСвазиле" + - "ндТристан да Куняострови Търкс и КайкосЧадФренски южни територииТогоТай" + - "ландТаджикистанТокелауИзточен ТиморТуркменистанТунисТонгаТурцияТринидад" + - " и ТобагоТувалуТайванТанзанияУкрайнаУгандаОтдалечени острови на САЩОрган" + - "изация на обединените нацииСъединени щатиУругвайУзбекистанВатиканСейнт " + - "Винсънт и ГренадиниВенецуелаБритански Вирджински островиАмерикански Вир" + - "джински островиВиетнамВануатуУолис и ФутунаСамоаКосовоЙеменМайотЮжна Аф" + - "рикаЗамбияЗимбабвенепознат регионСвятАфрикаСеверноамерикански континент" + - "Южна АмерикаОкеанияЗападна АфиркаЦентрална АмерикаИзточна АфрикаСеверна" + - " АфрикаЦентрална АфрикаЮжноафрикански регионАмерикаСеверна АмерикаКарибс" + - "ки регионИзточна АзияЮжна АзияЮгоизточна АзияЮжна ЕвропаАвстралазияМела" + - "незияМикронезийски регионПолинезияАзияЦентрална АзияЗападна АзияЕвропаИ" + - "зточна ЕвропаСеверна ЕвропаЗападна ЕвропаЛатинска Америка" - -var bgRegionIdx = []uint16{ // 292 elements + "удски островиБруней ДаруссаламБоливияКарибска НидерландияБразилияБахами" + + "Бутаностров БувеБотсванаБеларусБелизКанадаКокосови острови (острови Кий" + + "линг)Конго (Киншаса)Централноафриканска републикаКонго (Бразавил)Швейца" + + "рияКот д’Ивоарострови КукЧилиКамерунКитайКолумбияостров КлипертонКоста " + + "РикаКубаКабо ВердеКюрасаоостров РождествоКипърЧехияГерманияДиего Гарсия" + + "ДжибутиДанияДоминикаДоминиканска републикаАлжирСеута и МелияЕквадорЕсто" + + "нияЕгипетЗападна СахараЕритреяИспанияЕтиопияЕвропейски съюзЕврозонаФинл" + + "андияФиджиФолклендски островиМикронезияФарьорски островиФранцияГабонОбе" + + "диненото кралствоГренадаГрузияФренска ГвианаГърнзиГанаГибралтарГренланд" + + "ияГамбияГвинеяГваделупаЕкваториална ГвинеяГърцияЮжна Джорджия и Южни Са" + + "ндвичеви островиГватемалаГуамГвинея-БисауГаянаХонконг, САР на Китайостр" + + "ови Хърд и МакдоналдХондурасХърватияХаитиУнгарияКанарски островиИндонез" + + "ияИрландияИзраелостров МанИндияБританска територия в Индийския океанИра" + + "кИранИсландияИталияДжърсиЯмайкаЙорданияЯпонияКенияКиргизстанКамбоджаКир" + + "ибатиКоморски островиСейнт Китс и НевисСеверна КореяЮжна КореяКувейтКай" + + "манови островиКазахстанЛаосЛиванСейнт ЛусияЛихтенщайнШри ЛанкаЛиберияЛе" + + "сотоЛитваЛюксембургЛатвияЛибияМарокоМонакоМолдоваЧерна гораСен МартенМа" + + "дагаскарМаршалови островиМакедонияМалиМианмар (Бирма)МонголияМакао, САР" + + " на КитайСеверни Мариански островиМартиникаМавританияМонтсератМалтаМаври" + + "цийМалдивиМалавиМексикоМалайзияМозамбикНамибияНова КаледонияНигеростров" + + " НорфолкНигерияНикарагуаНидерландияНорвегияНепалНауруНиуеНова ЗеландияОм" + + "анПанамаПеруФренска ПолинезияПапуа-Нова ГвинеяФилипиниПакистанПолшаСен " + + "Пиер и МикелонОстрови ПиткернПуерто РикоПалестински територииПортугалия" + + "ПалауПарагвайКатарОтдалечени острови на ОкеанияРеюнионРумънияСърбияРуси" + + "яРуандаСаудитска АрабияСоломонови островиСейшелиСуданШвецияСингапурСвет" + + "а ЕленаСловенияСвалбард и Ян МайенСловакияСиера ЛеонеСан МариноСенегалС" + + "омалияСуринамЮжен СуданСао Томе и ПринсипиСалвадорСинт МартенСирияСвази" + + "лендТристан да Куняострови Търкс и КайкосЧадФренски южни територииТогоТ" + + "айландТаджикистанТокелауИзточен ТиморТуркменистанТунисТонгаТурцияТринид" + + "ад и ТобагоТувалуТайванТанзанияУкрайнаУгандаОтдалечени острови на САЩОр" + + "ганизация на обединените нацииСъединени щатиУругвайУзбекистанВатиканСей" + + "нт Винсънт и ГренадиниВенецуелаБритански Вирджински островиАмерикански " + + "Вирджински островиВиетнамВануатуУолис и ФутунаСамоаКосовоЙеменМайотЮжна" + + " АфрикаЗамбияЗимбабвенепознат регионСвятАфрикаСеверноамерикански контине" + + "нтЮжна АмерикаОкеанияЗападна АфиркаЦентрална АмерикаИзточна АфрикаСевер" + + "на АфрикаЦентрална АфрикаЮжноафрикански регионАмерикаСеверна АмерикаКар" + + "ибски регионИзточна АзияЮжна АзияЮгоизточна АзияЮжна ЕвропаАвстралазияМ" + + "еланезияМикронезийски регионПолинезияАзияЦентрална АзияЗападна АзияЕвро" + + "паИзточна ЕвропаСеверна ЕвропаЗападна ЕвропаЛатинска Америка" + +var bgRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0021, 0x002d, 0x005f, 0x0073, 0x0093, 0x00a1, 0x00af, 0x00bd, 0x00c9, 0x00dd, 0x00ef, 0x0110, 0x011e, 0x0130, 0x013a, 0x0159, 0x016f, 0x0193, 0x01a3, 0x01b5, 0x01c1, 0x01d8, 0x01e8, - 0x01f6, 0x0204, 0x020e, 0x0227, 0x0235, 0x0256, 0x0264, 0x028b, - 0x029b, 0x02a7, 0x02b1, 0x02c6, 0x02d6, 0x02e4, 0x02ee, 0x02fa, - 0x0339, 0x0354, 0x038d, 0x03aa, 0x03bc, 0x03d2, 0x03e7, 0x03ef, - 0x03fd, 0x0407, 0x0417, 0x0436, 0x0449, 0x0451, 0x0464, 0x0472, - 0x0491, 0x049b, 0x04b8, 0x04c8, 0x04df, 0x04ed, 0x04f7, 0x0507, + 0x01f6, 0x0204, 0x020e, 0x0227, 0x0248, 0x0269, 0x0277, 0x029e, + 0x02ae, 0x02ba, 0x02c4, 0x02d9, 0x02e9, 0x02f7, 0x0301, 0x030d, + 0x034c, 0x0367, 0x03a0, 0x03bd, 0x03cf, 0x03e5, 0x03fa, 0x0402, + 0x0410, 0x041a, 0x042a, 0x0449, 0x045c, 0x0464, 0x0477, 0x0485, + 0x04a4, 0x04ae, 0x04b8, 0x04c8, 0x04df, 0x04ed, 0x04f7, 0x0507, // Entry 40 - 7F 0x0532, 0x053c, 0x0554, 0x0562, 0x0570, 0x057c, 0x0597, 0x05a5, - 0x05b3, 0x05c1, 0x05de, 0x05de, 0x05f0, 0x05fa, 0x061f, 0x0633, - 0x0654, 0x0662, 0x066c, 0x0693, 0x06a1, 0x06ad, 0x06c8, 0x06d4, - 0x06dc, 0x06ee, 0x0702, 0x070e, 0x071a, 0x072c, 0x0751, 0x075d, - 0x07a6, 0x07b8, 0x07c0, 0x07d7, 0x07e1, 0x0807, 0x0841, 0x0851, - 0x0861, 0x086b, 0x0879, 0x0898, 0x08aa, 0x08ba, 0x08c6, 0x08d9, - 0x08e3, 0x0929, 0x0931, 0x0939, 0x0949, 0x0955, 0x0961, 0x096d, - 0x097d, 0x0989, 0x0993, 0x09a7, 0x09b7, 0x09c7, 0x09e6, 0x0a07, + 0x05b3, 0x05c1, 0x05de, 0x05ee, 0x0600, 0x060a, 0x062f, 0x0643, + 0x0664, 0x0672, 0x067c, 0x06a3, 0x06b1, 0x06bd, 0x06d8, 0x06e4, + 0x06ec, 0x06fe, 0x0712, 0x071e, 0x072a, 0x073c, 0x0761, 0x076d, + 0x07b6, 0x07c8, 0x07d0, 0x07e7, 0x07f1, 0x0817, 0x0844, 0x0854, + 0x0864, 0x086e, 0x087c, 0x089b, 0x08ad, 0x08bd, 0x08c9, 0x08dc, + 0x08e6, 0x092c, 0x0934, 0x093c, 0x094c, 0x0958, 0x0964, 0x0970, + 0x0980, 0x098c, 0x0996, 0x09aa, 0x09ba, 0x09ca, 0x09e9, 0x0a0a, // Entry 80 - BF - 0x0a20, 0x0a33, 0x0a3f, 0x0a60, 0x0a72, 0x0a7a, 0x0a84, 0x0a99, - 0x0aad, 0x0abe, 0x0acc, 0x0ad8, 0x0ae2, 0x0af6, 0x0b02, 0x0b0c, - 0x0b18, 0x0b24, 0x0b32, 0x0b45, 0x0b58, 0x0b6c, 0x0b8d, 0x0b9f, - 0x0ba7, 0x0bc2, 0x0bd2, 0x0bf4, 0x0c24, 0x0c36, 0x0c4a, 0x0c5c, - 0x0c66, 0x0c76, 0x0c84, 0x0c90, 0x0c9e, 0x0cae, 0x0cbe, 0x0ccc, - 0x0ce7, 0x0cf1, 0x0d0c, 0x0d1a, 0x0d2c, 0x0d42, 0x0d52, 0x0d5c, - 0x0d66, 0x0d6e, 0x0d87, 0x0d8f, 0x0d9b, 0x0da3, 0x0dc4, 0x0de4, - 0x0df4, 0x0e04, 0x0e0e, 0x0e2f, 0x0e4c, 0x0e61, 0x0e8a, 0x0e9e, + 0x0a23, 0x0a36, 0x0a42, 0x0a63, 0x0a75, 0x0a7d, 0x0a87, 0x0a9c, + 0x0ab0, 0x0ac1, 0x0acf, 0x0adb, 0x0ae5, 0x0af9, 0x0b05, 0x0b0f, + 0x0b1b, 0x0b27, 0x0b35, 0x0b48, 0x0b5b, 0x0b6f, 0x0b90, 0x0ba2, + 0x0baa, 0x0bc5, 0x0bd5, 0x0bf7, 0x0c27, 0x0c39, 0x0c4d, 0x0c5f, + 0x0c69, 0x0c79, 0x0c87, 0x0c93, 0x0ca1, 0x0cb1, 0x0cc1, 0x0ccf, + 0x0cea, 0x0cf4, 0x0d0f, 0x0d1d, 0x0d2f, 0x0d45, 0x0d55, 0x0d5f, + 0x0d69, 0x0d71, 0x0d8a, 0x0d92, 0x0d9e, 0x0da6, 0x0dc7, 0x0de7, + 0x0df7, 0x0e07, 0x0e11, 0x0e32, 0x0e4f, 0x0e64, 0x0e8d, 0x0ea1, // Entry C0 - FF - 0x0ea8, 0x0eb8, 0x0ec2, 0x0ef9, 0x0f07, 0x0f15, 0x0f21, 0x0f2b, - 0x0f37, 0x0f56, 0x0f79, 0x0f87, 0x0f91, 0x0f9d, 0x0fad, 0x0fc2, - 0x0fd2, 0x0ff5, 0x1005, 0x101a, 0x102d, 0x103b, 0x1049, 0x1057, - 0x106a, 0x108d, 0x109d, 0x10b2, 0x10bc, 0x10ce, 0x10ea, 0x1113, - 0x1119, 0x1143, 0x114b, 0x1159, 0x116f, 0x117d, 0x1196, 0x11ae, - 0x11b8, 0x11c2, 0x11ce, 0x11ee, 0x11fa, 0x1206, 0x1216, 0x1224, - 0x1230, 0x125f, 0x129c, 0x12b7, 0x12c5, 0x12d9, 0x12e7, 0x1316, - 0x1328, 0x135e, 0x1398, 0x13a6, 0x13b4, 0x13ce, 0x13d8, 0x13e4, + 0x0eab, 0x0ebb, 0x0ec5, 0x0efc, 0x0f0a, 0x0f18, 0x0f24, 0x0f2e, + 0x0f3a, 0x0f59, 0x0f7c, 0x0f8a, 0x0f94, 0x0fa0, 0x0fb0, 0x0fc5, + 0x0fd5, 0x0ff8, 0x1008, 0x101d, 0x1030, 0x103e, 0x104c, 0x105a, + 0x106d, 0x1090, 0x10a0, 0x10b5, 0x10bf, 0x10d1, 0x10ed, 0x1116, + 0x111c, 0x1146, 0x114e, 0x115c, 0x1172, 0x1180, 0x1199, 0x11b1, + 0x11bb, 0x11c5, 0x11d1, 0x11f1, 0x11fd, 0x1209, 0x1219, 0x1227, + 0x1233, 0x1262, 0x129f, 0x12ba, 0x12c8, 0x12dc, 0x12ea, 0x1319, + 0x132b, 0x1361, 0x139b, 0x13a9, 0x13b7, 0x13d1, 0x13db, 0x13e7, // Entry 100 - 13F - 0x13ee, 0x13f8, 0x140d, 0x1419, 0x1429, 0x1446, 0x144e, 0x145a, - 0x1491, 0x14a8, 0x14b6, 0x14d1, 0x14f2, 0x150d, 0x1528, 0x1547, - 0x1570, 0x157e, 0x159b, 0x15b8, 0x15cf, 0x15e0, 0x15fd, 0x1612, - 0x1628, 0x163a, 0x1661, 0x1673, 0x167b, 0x1696, 0x16ad, 0x16b9, - 0x16d4, 0x16ef, 0x170a, 0x1729, -} // Size: 608 bytes - -const bnRegionStr string = "" + // Size: 9531 bytes - "অ্যাসসেনশন আইল্যান্ডআন্ডোরাসংযুক্ত আরব আমিরাতআফগানিস্তানএন্টিগুয়া ও বার" + - "বুডাএ্যাঙ্গুইলাআলবেনিয়াআর্মেনিয়াঅ্যাঙ্গোলাঅ্যান্টার্কটিকাআর্জেন্টিনা" + - "আমেরিকান সামোয়াঅস্ট্রিয়াঅস্ট্রেলিয়াআরুবাআলান্ড দ্বীপপুঞ্জআজারবাইজান" + - "বসনিয়া ও হার্জেগোভিনাবারবাদোসবাংলাদেশবেলজিয়ামবুরকিনা ফাসোবুলগেরিয়াব" + - "াহরাইনবুরুন্ডিবেনিনসেন্ট বারথেলিমিবারমুডাব্রুনেইবলিভিয়াক্যারিবিয়ান ন" + - "েদারল্যান্ডসব্রাজিলবাহামা দ্বীপপুঞ্জভুটানবোভেট দ্বীপবতসোয়ানাবেলারুশবে" + - "লিজকানাডাকোকোস (কিলিং) দ্বীপপুঞ্জকঙ্গো-কিনশাসামধ্য আফ্রিকার প্রজাতন্ত্" + - "রকঙ্গো - ব্রাজাভিলসুইজারল্যান্ডআইভরি কোস্টকুক দ্বীপপুঞ্জচিলিক্যামেরুনচ" + - "ীনকলম্বিয়াক্লিপারটন আইল্যান্ডকোস্টারিকাকিউবাকেপভার্দেকিউরাসাওক্রিসমাস" + - " দ্বীপসাইপ্রাসচেক প্রজাতন্ত্রজার্মানিদিয়েগো গার্সিয়াজিবুতিডেনমার্কডোমি" + - "নিকাডোমেনিকান প্রজাতন্ত্রআলজেরিয়াকুউটা এবং মেলিলাইকুয়েডরএস্তোনিয়ামি" + - "শরপশ্চিম সাহারাইরিত্রিয়াস্পেনইফিওপিয়াইউরোপীয় ইউনিয়নফিনল্যান্ডফিজিফ" + - "কল্যান্ড দ্বীপপুঞ্জমাইক্রোনেশিয়াফ্যারও দ্বীপপুঞ্জফ্রান্সগ্যাবনযুক্তরা" + - "জ্যগ্রেনাডাজর্জিয়াফরাসী গায়ানাগ্রাঞ্জিঘানাজিব্রাল্টারগ্রীনল্যান্ডগাম" + - "্বিয়াগিনিগুয়াদেলৌপনিরক্ষীয় গিনিগ্রীসদক্ষিণ জর্জিয়া ও দক্ষিণ স্যান্" + - "ডউইচ দ্বীপপুঞ্জগুয়াতেমালাগুয়ামগিনি-বিসাউগিয়ানাহংকং এসএআর চীনাহার্ড " + - "দ্বীপ এবং ম্যাকডোনাল্ড দ্বীপপুঞ্জহণ্ডুরাসক্রোয়েশিয়াহাইতিহাঙ্গেরিক্যা" + + 0x13f1, 0x13fb, 0x1410, 0x141c, 0x142c, 0x1449, 0x1451, 0x145d, + 0x1494, 0x14ab, 0x14b9, 0x14d4, 0x14f5, 0x1510, 0x152b, 0x154a, + 0x1573, 0x1581, 0x159e, 0x15bb, 0x15d2, 0x15e3, 0x1600, 0x1615, + 0x162b, 0x163d, 0x1664, 0x1676, 0x167e, 0x1699, 0x16b0, 0x16bc, + 0x16d7, 0x16f2, 0x170d, 0x170d, 0x172c, +} // Size: 610 bytes + +const bnRegionStr string = "" + // Size: 9532 bytes + "অ্যাসসেনশন আইল্যান্ডআন্ডোরাসংযুক্ত আরব আমিরাতআফগানিস্তানঅ্যান্টিগুয়া ও " + + "বারবুডাএ্যাঙ্গুইলাআলবেনিয়াআর্মেনিয়াঅ্যাঙ্গোলাঅ্যান্টার্কটিকাআর্জেন্ট" + + "িনাআমেরিকান সামোয়াঅস্ট্রিয়াঅস্ট্রেলিয়াআরুবাআলান্ড দ্বীপপুঞ্জআজারবাই" + + "জানবসনিয়া ও হার্জেগোভিনাবারবাদোসবাংলাদেশবেলজিয়ামবুরকিনা ফাসোবুলগেরিয" + + "়াবাহরাইনবুরুন্ডিবেনিনসেন্ট বারথেলিমিবারমুডাব্রুনেইবলিভিয়াক্যারিবিয়া" + + "ন নেদারল্যান্ডসব্রাজিলবাহামা দ্বীপপুঞ্জভুটানবোভেট দ্বীপবতসোয়ানাবেলারু" + + "শবেলিজকানাডাকোকোস (কিলিং) দ্বীপপুঞ্জকঙ্গো-কিনশাসামধ্য আফ্রিকার প্রজাতন" + + "্ত্রকঙ্গো - ব্রাজাভিলসুইজারল্যান্ডকোত দিভোয়ারকুক দ্বীপপুঞ্জচিলিক্যামে" + + "রুনচীনকলম্বিয়াক্লিপারটন আইল্যান্ডকোস্টারিকাকিউবাকেপভার্দেকুরাসাওক্রিস" + + "মাস দ্বীপসাইপ্রাসচেচিয়াজার্মানিদিয়েগো গার্সিয়াজিবুতিডেনমার্কডোমিনিক" + + "াডোমেনিকান প্রজাতন্ত্রআলজেরিয়াকুউটা এবং মেলিলাইকুয়েডরএস্তোনিয়ামিশরপ" + + "শ্চিম সাহারাইরিত্রিয়াস্পেনইথিওপিয়াইউরোপীয় ইউনিয়নইউরোজোনফিনল্যান্ডফ" + + "িজিফকল্যান্ড দ্বীপপুঞ্জমাইক্রোনেশিয়াফ্যারও দ্বীপপুঞ্জফ্রান্সগ্যাবনযুক" + + "্তরাজ্যগ্রেনাডাজর্জিয়াফরাসী গায়ানাগুয়ার্নসিঘানাজিব্রাল্টারগ্রীনল্যা" + + "ন্ডগাম্বিয়াগিনিগুয়াদেলৌপনিরক্ষীয় গিনিগ্রীসদক্ষিণ জর্জিয়া ও দক্ষিণ " + + "স্যান্ডউইচ দ্বীপপুঞ্জগুয়াতেমালাগুয়ামগিনি-বিসাউগিয়ানাহংকং এসএআর চীনা" + + "হার্ড এবং ম্যাকডোনাল্ড দ্বীপপুঞ্জহন্ডুরাসক্রোয়েশিয়াহাইতিহাঙ্গেরিক্যা" + "নারি দ্বীপপুঞ্জইন্দোনেশিয়াআয়ারল্যান্ডইজরায়েলআইল অফ ম্যানভারতব্রিটিশ" + " ভারত মহাসাগরীয় অঞ্চলইরাকইরানআইসল্যান্ডইতালিজার্সিজামাইকাজর্ডনজাপানকেনি" + "য়াকিরগিজিস্তানকম্বোডিয়াকিরিবাতিকমোরোসসেন্ট কিটস ও নেভিসউত্তর কোরিয়া" + @@ -43853,74 +46563,74 @@ const bnRegionStr string = "" + // Size: 9531 bytes "শাল দ্বীপপুঞ্জম্যাসাডোনিয়ামালিমায়ানমার (বার্মা)মঙ্গোলিয়াম্যাকাও এসএ" + "আর চীনাউত্তরাঞ্চলীয় মারিয়ানা দ্বীপপুঞ্জমার্টিনিকমরিতানিয়ামন্টসেরাটম" + "াল্টামরিশাসমালদ্বীপমালাউইমেক্সিকোমালয়েশিয়ামোজাম্বিকনামিবিয়ানিউ ক্যা" + - "লেডোনিয়ানাইজারনিরফোক দ্বীপনাইজেরিয়ানিকারাগুয়ানেদারল্যান্ডসনরওয়েনেপ" + - "ালনাউরুনিউয়েনিউজিল্যান্ডওমানপানামাপেরুফরাসী পলিনেশিয়াপাপুয়া নিউ গিন" + - "িফিলিপাইনপাকিস্তানপোল্যান্ডসেন্ট পিয়ের ও মিকুয়েলনপিটকেয়ার্ন দ্বীপপু" + - "ঞ্জপুয়ের্তো রিকোফিলিস্তিন অঞ্চলসমূহপর্তুগালপালাউপ্যারাগুয়েকাতারআউটলা" + - "ইনিং ওসানিয়ারিইউনিয়নরোমানিয়াসার্বিয়ারাশিয়ারুয়ান্ডাসৌদি আরবসলোমন " + - "দ্বীপপুঞ্জসিসিলিসুদানসুইডেনসিঙ্গাপুরসেন্ট হেলেনাস্লোভানিয়াস্বালবার্ড " + - "ও জান মেয়েনস্লোভাকিয়াসিয়েরালিওনসান মারিনোসেনেগালসোমালিয়াসুরিনামদক্" + - "ষিণ সুদানসাওটোমা ও প্রিন্সিপিএল সালভেদরসিন্ট মার্টেনসিরিয়াসোয়াজিল্যা" + - "ন্ডট্রিস্টান ডা কুনহাতুর্কস ও কাইকোস দ্বীপপুঞ্জচাদফরাসী দক্ষিণাঞ্চলটোগ" + - "োথাইল্যান্ডতাজিকস্থানটোকেলাউতিমুর-লেস্তেতুর্কমেনিস্তানতিউনিসিয়াটোঙ্গা" + - "তুরস্কত্রিনিনাদ ও টোব্যাগোটুভালুতাইওয়ানতাঞ্জানিয়াইউক্রেনউগান্ডাযুক্ত" + - "রাষ্ট্রের পার্শ্ববর্তী দ্বীপপুঞ্জজাতিসংঘমার্কিন যুক্তরাষ্ট্রউরুগুয়েউজ" + - "বেকিস্তানভ্যাটিকান সিটিসেন্ট ভিনসেন্ট ও দ্যা গ্রেনাডিনসভেনেজুয়েলাব্রি" + - "টিশ ভার্জিন দ্বীপপুঞ্জমার্কিন যুক্তরাষ্ট্রের ভার্জিন দ্বীপপুঞ্জভিয়েতন" + - "ামভানুয়াটুওয়ালিস ও ফুটুনাসামোয়াকসোভোইয়েমেনমায়োত্তেদক্ষিণ আফ্রিকাজ" + - "াম্বিয়াজিম্বাবোয়েঅজানা অঞ্চলপৃথিবীআফ্রিকাউত্তর আমেরিকাদক্ষিণ আমেরিকা" + - "ওশিয়ানিয়াপশ্চিম আফ্রিকামধ্য আমেরিকাপূর্ব আফ্রিকাউত্তর আফ্রিকামধ্য আফ" + - "্রিকাদক্ষিন আফ্রিকাআমেরিকাসউত্তরাঞ্চলীয় আমেরিকাক্যারাবিয়ানপূর্ব এশিয" + - "়াদক্ষিণ এশিয়াদক্ষিণ পূর্ব এশিয়াদক্ষিণ ইউরোপঅস্ট্রালেশিয়াম্যালেনেশি" + - "য়ামাইক্রোনেশিয়া অঞ্চলপলিনেশিয়াএশিয়ামধ্য এশিয়াপশ্চিম এশিয়াইউরোপপূ" + - "র্ব ইউরোপউত্তর ইউরোপপশ্চিম ইউরোপল্যাটিন আমেরিকা" - -var bnRegionIdx = []uint16{ // 292 elements + "লেডোনিয়ানাইজারনরফোক দ্বীপনাইজেরিয়ানিকারাগুয়ানেদারল্যান্ডসনরওয়েনেপা" + + "লনাউরুনিউয়েনিউজিল্যান্ডওমানপানামাপেরুফরাসী পলিনেশিয়াপাপুয়া নিউ গিনি" + + "ফিলিপাইনপাকিস্তানপোল্যান্ডসেন্ট পিয়ের ও মিকুয়েলনপিটকেয়ার্ন দ্বীপপুঞ" + + "্জপুয়ের্তো রিকোপ্যালেস্টাইনের অঞ্চলসমূহপর্তুগালপালাউপ্যারাগুয়েকাতারআ" + + "উটলাইনিং ওসানিয়ারিইউনিয়নরোমানিয়াসার্বিয়ারাশিয়ারুয়ান্ডাসৌদি আরবসল" + + "োমন দ্বীপপুঞ্জসিসিলিসুদানসুইডেনসিঙ্গাপুরসেন্ট হেলেনাস্লোভানিয়াস্বালবা" + + "র্ড ও জান মেয়েনস্লোভাকিয়াসিয়েরা লিওনসান মারিনোসেনেগালসোমালিয়াসুরিন" + + "ামদক্ষিণ সুদানসাওটোমা ও প্রিন্সিপিএল সালভেদরসিন্ট মার্টেনসিরিয়াসোয়াজ" + + "িল্যান্ডট্রিস্টান ডা কুনহাতুর্কস ও কাইকোস দ্বীপপুঞ্জচাদফরাসী দক্ষিণাঞ্" + + "চলটোগোথাইল্যান্ডতাজিকিস্তানটোকেলাউতিমুর-লেস্তেতুর্কমেনিস্তানতিউনিসিয়া" + + "টোঙ্গাতুরস্কত্রিনিনাদ ও টোব্যাগোটুভালুতাইওয়ানতাঞ্জানিয়াইউক্রেনউগান্ড" + + "াযুক্তরাষ্ট্রের পার্শ্ববর্তী দ্বীপপুঞ্জজাতিসংঘমার্কিন যুক্তরাষ্ট্রউরুগ" + + "ুয়েউজবেকিস্তানভ্যাটিকান সিটিসেন্ট ভিনসেন্ট ও গ্রেনাডিনসভেনেজুয়েলাব্র" + + "িটিশ ভার্জিন দ্বীপপুঞ্জমার্কিন যুক্তরাষ্ট্রের ভার্জিন দ্বীপপুঞ্জভিয়েত" + + "নামভানুয়াটুওয়ালিস ও ফুটুনাসামোয়াকসোভোইয়েমেনমায়োত্তেদক্ষিণ আফ্রিকা" + + "জাম্বিয়াজিম্বাবোয়েঅজানা অঞ্চলপৃথিবীআফ্রিকাউত্তর আমেরিকাদক্ষিণ আমেরিক" + + "াওশিয়ানিয়াপশ্চিম আফ্রিকামধ্য আমেরিকাপূর্ব আফ্রিকাউত্তর আফ্রিকামধ্য আ" + + "ফ্রিকাদক্ষিন আফ্রিকাআমেরিকাসউত্তরাঞ্চলীয় আমেরিকাক্যারাবিয়ানপূর্ব এশি" + + "য়াদক্ষিণ এশিয়াদক্ষিণ পূর্ব এশিয়াদক্ষিণ ইউরোপঅস্ট্রালেশিয়াম্যালেনেশ" + + "িয়ামাইক্রোনেশিয়া অঞ্চলপলিনেশিয়াএশিয়ামধ্য এশিয়াপশ্চিম এশিয়াইউরোপপ" + + "ূর্ব ইউরোপউত্তর ইউরোপপশ্চিম ইউরোপল্যাটিন আমেরিকা" + +var bnRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F - 0x0000, 0x003a, 0x004f, 0x0081, 0x00a2, 0x00da, 0x00fb, 0x0116, - 0x0134, 0x0152, 0x017f, 0x01a0, 0x01ce, 0x01ec, 0x0210, 0x021f, - 0x0250, 0x026e, 0x02ac, 0x02c4, 0x02dc, 0x02f7, 0x0319, 0x0337, - 0x034c, 0x0364, 0x0373, 0x039e, 0x03b3, 0x03c8, 0x03e0, 0x042c, - 0x0441, 0x0472, 0x0481, 0x04a0, 0x04bb, 0x04d0, 0x04df, 0x04f1, - 0x0531, 0x0556, 0x059d, 0x05ca, 0x05f1, 0x0610, 0x0638, 0x0644, - 0x065f, 0x0668, 0x0683, 0x06ba, 0x06d8, 0x06e7, 0x0702, 0x071a, - 0x0742, 0x075a, 0x0785, 0x079d, 0x07ce, 0x07e0, 0x07f8, 0x0810, + 0x0000, 0x003a, 0x004f, 0x0081, 0x00a2, 0x00e3, 0x0104, 0x011f, + 0x013d, 0x015b, 0x0188, 0x01a9, 0x01d7, 0x01f5, 0x0219, 0x0228, + 0x0259, 0x0277, 0x02b5, 0x02cd, 0x02e5, 0x0300, 0x0322, 0x0340, + 0x0355, 0x036d, 0x037c, 0x03a7, 0x03bc, 0x03d1, 0x03e9, 0x0435, + 0x044a, 0x047b, 0x048a, 0x04a9, 0x04c4, 0x04d9, 0x04e8, 0x04fa, + 0x053a, 0x055f, 0x05a6, 0x05d3, 0x05fa, 0x061c, 0x0644, 0x0650, + 0x066b, 0x0674, 0x068f, 0x06c6, 0x06e4, 0x06f3, 0x070e, 0x0723, + 0x074b, 0x0763, 0x0778, 0x0790, 0x07c1, 0x07d3, 0x07eb, 0x0803, // Entry 40 - 7F - 0x084d, 0x0868, 0x0894, 0x08ac, 0x08ca, 0x08d6, 0x08fb, 0x0919, - 0x0928, 0x0943, 0x0971, 0x0971, 0x098f, 0x099b, 0x09d5, 0x09ff, - 0x0a30, 0x0a45, 0x0a57, 0x0a75, 0x0a8d, 0x0aa5, 0x0aca, 0x0ae2, - 0x0aee, 0x0b0f, 0x0b33, 0x0b4e, 0x0b5a, 0x0b78, 0x0ba0, 0x0baf, - 0x0c2f, 0x0c50, 0x0c62, 0x0c7e, 0x0c93, 0x0cbc, 0x0d29, 0x0d41, - 0x0d65, 0x0d74, 0x0d8c, 0x0dc3, 0x0de7, 0x0e0b, 0x0e23, 0x0e43, - 0x0e4f, 0x0ea0, 0x0eac, 0x0eb8, 0x0ed6, 0x0ee5, 0x0ef7, 0x0f0c, - 0x0f1b, 0x0f2a, 0x0f3f, 0x0f63, 0x0f81, 0x0f99, 0x0fab, 0x0fdb, + 0x0840, 0x085b, 0x0887, 0x089f, 0x08bd, 0x08c9, 0x08ee, 0x090c, + 0x091b, 0x0936, 0x0964, 0x0979, 0x0997, 0x09a3, 0x09dd, 0x0a07, + 0x0a38, 0x0a4d, 0x0a5f, 0x0a7d, 0x0a95, 0x0aad, 0x0ad2, 0x0af0, + 0x0afc, 0x0b1d, 0x0b41, 0x0b5c, 0x0b68, 0x0b86, 0x0bae, 0x0bbd, + 0x0c3d, 0x0c5e, 0x0c70, 0x0c8c, 0x0ca1, 0x0cca, 0x0d27, 0x0d3f, + 0x0d63, 0x0d72, 0x0d8a, 0x0dc1, 0x0de5, 0x0e09, 0x0e21, 0x0e41, + 0x0e4d, 0x0e9e, 0x0eaa, 0x0eb6, 0x0ed4, 0x0ee3, 0x0ef5, 0x0f0a, + 0x0f19, 0x0f28, 0x0f3d, 0x0f61, 0x0f7f, 0x0f97, 0x0fa9, 0x0fd9, // Entry 80 - BF - 0x1000, 0x1028, 0x103a, 0x106e, 0x108c, 0x1098, 0x10aa, 0x10cf, - 0x10f0, 0x110b, 0x1129, 0x113b, 0x115f, 0x1183, 0x119e, 0x11b3, - 0x11c8, 0x11da, 0x11fb, 0x121c, 0x1241, 0x1262, 0x1296, 0x12bd, - 0x12c9, 0x12f9, 0x1317, 0x1349, 0x13ab, 0x13c6, 0x13e4, 0x13ff, - 0x1411, 0x1423, 0x143b, 0x144d, 0x1465, 0x1486, 0x14a1, 0x14bc, - 0x14ed, 0x14ff, 0x1521, 0x153f, 0x1560, 0x1587, 0x1599, 0x15a8, - 0x15b7, 0x15c9, 0x15ed, 0x15f9, 0x160b, 0x1617, 0x1645, 0x1671, - 0x1689, 0x16a4, 0x16bf, 0x1701, 0x1741, 0x1769, 0x17a0, 0x17b8, + 0x0ffe, 0x1026, 0x1038, 0x106c, 0x108a, 0x1096, 0x10a8, 0x10cd, + 0x10ee, 0x1109, 0x1127, 0x1139, 0x115d, 0x1181, 0x119c, 0x11b1, + 0x11c6, 0x11d8, 0x11f9, 0x121a, 0x123f, 0x1260, 0x1294, 0x12bb, + 0x12c7, 0x12f7, 0x1315, 0x1347, 0x13a9, 0x13c4, 0x13e2, 0x13fd, + 0x140f, 0x1421, 0x1439, 0x144b, 0x1463, 0x1484, 0x149f, 0x14ba, + 0x14eb, 0x14fd, 0x151c, 0x153a, 0x155b, 0x1582, 0x1594, 0x15a3, + 0x15b2, 0x15c4, 0x15e8, 0x15f4, 0x1606, 0x1612, 0x1640, 0x166c, + 0x1684, 0x169f, 0x16ba, 0x16fc, 0x173c, 0x1764, 0x17aa, 0x17c2, // Entry C0 - FF - 0x17c7, 0x17e8, 0x17f7, 0x182b, 0x1846, 0x1861, 0x187c, 0x1891, - 0x18ac, 0x18c2, 0x18f0, 0x1902, 0x1911, 0x1923, 0x193e, 0x1960, - 0x1981, 0x19c0, 0x19e1, 0x1a02, 0x1a1e, 0x1a33, 0x1a4e, 0x1a63, - 0x1a85, 0x1abd, 0x1ad9, 0x1afe, 0x1b13, 0x1b3d, 0x1b6f, 0x1bb7, - 0x1bc0, 0x1bf1, 0x1bfd, 0x1c1b, 0x1c39, 0x1c4e, 0x1c70, 0x1c9a, - 0x1cb8, 0x1cca, 0x1cdc, 0x1d14, 0x1d26, 0x1d3e, 0x1d5f, 0x1d74, - 0x1d89, 0x1df7, 0x1e0c, 0x1e46, 0x1e5e, 0x1e7f, 0x1ea7, 0x1eff, - 0x1f20, 0x1f6a, 0x1fdf, 0x1ffa, 0x2015, 0x2041, 0x2056, 0x2065, + 0x17d1, 0x17f2, 0x1801, 0x1835, 0x1850, 0x186b, 0x1886, 0x189b, + 0x18b6, 0x18cc, 0x18fa, 0x190c, 0x191b, 0x192d, 0x1948, 0x196a, + 0x198b, 0x19ca, 0x19eb, 0x1a0d, 0x1a29, 0x1a3e, 0x1a59, 0x1a6e, + 0x1a90, 0x1ac8, 0x1ae4, 0x1b09, 0x1b1e, 0x1b48, 0x1b7a, 0x1bc2, + 0x1bcb, 0x1bfc, 0x1c08, 0x1c26, 0x1c47, 0x1c5c, 0x1c7e, 0x1ca8, + 0x1cc6, 0x1cd8, 0x1cea, 0x1d22, 0x1d34, 0x1d4c, 0x1d6d, 0x1d82, + 0x1d97, 0x1e05, 0x1e1a, 0x1e54, 0x1e6c, 0x1e8d, 0x1eb5, 0x1f00, + 0x1f21, 0x1f6b, 0x1fe0, 0x1ffb, 0x2016, 0x2042, 0x2057, 0x2066, // Entry 100 - 13F - 0x207a, 0x2095, 0x20bd, 0x20d8, 0x20f9, 0x2118, 0x212a, 0x213f, - 0x2164, 0x218c, 0x21ad, 0x21d5, 0x21f7, 0x221c, 0x2241, 0x2263, - 0x228b, 0x22a3, 0x22e0, 0x2304, 0x2326, 0x234b, 0x2380, 0x23a2, - 0x23cc, 0x23f3, 0x242d, 0x244b, 0x245d, 0x247c, 0x24a1, 0x24b0, - 0x24cf, 0x24ee, 0x2510, 0x253b, -} // Size: 608 bytes - -const caRegionStr string = "" + // Size: 3175 bytes + 0x207b, 0x2096, 0x20be, 0x20d9, 0x20fa, 0x2119, 0x212b, 0x2140, + 0x2165, 0x218d, 0x21ae, 0x21d6, 0x21f8, 0x221d, 0x2242, 0x2264, + 0x228c, 0x22a4, 0x22e1, 0x2305, 0x2327, 0x234c, 0x2381, 0x23a3, + 0x23cd, 0x23f4, 0x242e, 0x244c, 0x245e, 0x247d, 0x24a2, 0x24b1, + 0x24d0, 0x24ef, 0x2511, 0x2511, 0x253c, +} // Size: 610 bytes + +const caRegionStr string = "" + // Size: 3177 bytes "Illa de l’AscensióAndorraEmirats Àrabs UnitsAfganistanAntigua i BarbudaA" + "nguillaAlbàniaArmèniaAngolaAntàrtidaArgentinaSamoa Nord-americanaÀustria" + "AustràliaArubaIlles ÅlandAzerbaidjanBòsnia i HercegovinaBarbadosBangla D" + @@ -43928,44 +46638,44 @@ const caRegionStr string = "" + // Size: 3175 bytes "sBruneiBolíviaCarib NeerlandèsBrasilBahamesBhutanBouvetBotswanaBelarúsBe" + "lizeCanadàIlles CocosCongo - KinshasaRepública CentreafricanaCongo - Bra" + "zzavilleSuïssaCosta d’IvoriIlles CookXileCamerunXinaColòmbiaIlla Clipper" + - "tonCosta RicaCubaCap VerdCuraçaoIlla ChristmasXipreRepública TxecaAleman" + - "yaDiego GarciaDjiboutiDinamarcaDominicaRepública DominicanaAlgèriaCeuta " + - "i MelillaEquadorEstòniaEgipteSàhara OccidentalEritreaEspanyaEtiòpiaUnió " + - "EuropeaFinlàndiaFijiIlles MalvinesMicronèsiaIlles FèroeFrançaGabonRegne " + - "UnitGrenadaGeòrgiaGuaiana FrancesaGuernseyGhanaGibraltarGrenlàndiaGàmbia" + - "GuineaGuadeloupeGuinea EquatorialGrèciaIlles Geòrgia del Sud i Sandwich " + - "del SudGuatemalaGuamGuinea BissauGuyanaHong Kong (RAE Xina)Illa Heard i " + - "Illes McDonaldHonduresCroàciaHaitíHongriaIlles CanàriesIndonèsiaIrlandaI" + - "sraelIlla de ManÍndiaTerritori Britànic de l’Oceà ÍndicIraqIranIslàndiaI" + - "tàliaJerseyJamaicaJordàniaJapóKenyaKirguizistanCambodjaKiribatiComoresSa" + - "int Christopher i NevisCorea del NordCorea del SudKuwaitIlles CaimanKaza" + - "khstanLaosLíbanSaint LuciaLiechtensteinSri LankaLibèriaLesothoLituàniaLu" + - "xemburgLetòniaLíbiaMarrocMònacoMoldàviaMontenegroSaint MartinMadagascarI" + - "lles MarshallMacedòniaMaliMyanmar (Birmània)MongòliaMacau (RAE Xina)Ille" + - "s Mariannes del NordMartinicaMauritàniaMontserratMaltaMauriciMaldivesMal" + - "awiMèxicMalàisiaMoçambicNamíbiaNova CaledòniaNígerNorfolkNigèriaNicaragu" + - "aPaïsos BaixosNoruegaNepalNauruNiueNova ZelandaOmanPanamàPerúPolinèsia F" + - "rancesaPapua Nova GuineaFilipinesPakistanPolòniaSaint-Pierre-et-Miquelon" + - "Illes PitcairnPuerto Ricoterritoris palestinsPortugalPalauParaguaiQatarT" + - "erritoris allunyats d’OceaniaIlla de la ReunióRomaniaSèrbiaRússiaRuandaA" + - "ràbia SauditaIlles SalomóSeychellesSudanSuèciaSingapurSaint HelenaEslovè" + - "niaSvalbard i Jan MayenEslovàquiaSierra LeoneSan MarinoSenegalSomàliaSur" + - "inamSudan del SudSão Tomé i PríncipeEl SalvadorSint MaartenSíriaSwazilàn" + - "diaTristão da CunhaIlles Turks i CaicosTxadTerritoris Francesos del SudT" + - "ogoTailàndiaTadjikistanTokelauTimor OrientalTurkmenistanTunísiaTongaTurq" + - "uiaTrinitat i TobagoTuvaluTaiwanTanzàniaUcraïnaUgandaIlles Perifèriques " + - "Menors dels EUANacions UnidesEstats UnitsUruguaiUzbekistanCiutat del Vat" + - "icàSaint Vincent i les GrenadinesVeneçuelaIlles Verges BritàniquesIlles " + - "Verges Nord-americanesVietnamVanuatuWallis i FutunaSamoaKosovoIemenMayot" + - "teRepública de Sud-àfricaZàmbiaZimbàbueRegió desconegudaMónÀfricaAmèrica" + - " del NordAmèrica del SudOceaniaÀfrica occidentalAmèrica CentralÀfrica or" + - "ientalÀfrica septentrionalÀfrica centralÀfrica meridionalAmèricaAmèrica " + - "septentrionalCaribÀsia orientalÀsia meridionalÀsia sud-orientalEuropa me" + - "ridionalAustralàsiaMelanèsiaRegió de la MicronèsiaPolinèsiaÀsiaÀsia cent" + - "ralÀsia occidentalEuropaEuropa orientalEuropa septentrionalEuropa occide" + - "ntalAmèrica Llatina" - -var caRegionIdx = []uint16{ // 292 elements + "tonCosta RicaCubaCap VerdCuraçaoIlla ChristmasXipreTxèquiaAlemanyaDiego " + + "GarciaDjiboutiDinamarcaDominicaRepública DominicanaAlgèriaCeuta i Melill" + + "aEquadorEstòniaEgipteSàhara OccidentalEritreaEspanyaEtiòpiaUnió Europeaz" + + "ona euroFinlàndiaFijiIlles MalvinesMicronèsiaIlles FèroeFrançaGabonRegne" + + " UnitGrenadaGeòrgiaGuaiana FrancesaGuernseyGhanaGibraltarGrenlàndiaGàmbi" + + "aGuineaGuadeloupeGuinea EquatorialGrèciaIlles Geòrgia del Sud i Sandwich" + + " del SudGuatemalaGuamGuinea BissauGuyanaHong Kong (RAE Xina)Illa Heard i" + + " Illes McDonaldHonduresCroàciaHaitíHongriaIlles CanàriesIndonèsiaIrlanda" + + "IsraelIlla de ManÍndiaTerritori Britànic de l’Oceà ÍndicIraqIranIslàndia" + + "ItàliaJerseyJamaicaJordàniaJapóKenyaKirguizistanCambodjaKiribatiComoresS" + + "aint Christopher i NevisCorea del NordCorea del SudKuwaitIlles CaimanKaz" + + "akhstanLaosLíbanSaint LuciaLiechtensteinSri LankaLibèriaLesothoLituàniaL" + + "uxemburgLetòniaLíbiaMarrocMònacoMoldàviaMontenegroSaint MartinMadagascar" + + "Illes MarshallMacedòniaMaliMyanmar (Birmània)MongòliaMacau (RAE Xina)Ill" + + "es Mariannes del NordMartinicaMauritàniaMontserratMaltaMauriciMaldivesMa" + + "lawiMèxicMalàisiaMoçambicNamíbiaNova CaledòniaNígerNorfolkNigèriaNicarag" + + "uaPaïsos BaixosNoruegaNepalNauruNiueNova ZelandaOmanPanamàPerúPolinèsia " + + "FrancesaPapua Nova GuineaFilipinesPakistanPolòniaSaint-Pierre-et-Miquelo" + + "nIlles PitcairnPuerto Ricoterritoris palestinsPortugalPalauParaguaiQatar" + + "Territoris allunyats d’OceaniaIlla de la ReunióRomaniaSèrbiaRússiaRuanda" + + "Aràbia SauditaIlles SalomóSeychellesSudanSuèciaSingapurSaint HelenaEslov" + + "èniaSvalbard i Jan MayenEslovàquiaSierra LeoneSan MarinoSenegalSomàliaS" + + "urinamSudan del SudSão Tomé i PríncipeEl SalvadorSint MaartenSíriaSwazil" + + "àndiaTristão da CunhaIlles Turks i CaicosTxadTerritoris Australs France" + + "sosTogoTailàndiaTadjikistanTokelauTimor OrientalTurkmenistanTunísiaTonga" + + "TurquiaTrinitat i TobagoTuvaluTaiwanTanzàniaUcraïnaUgandaIlles Perifèriq" + + "ues Menors dels EUANacions UnidesEstats UnitsUruguaiUzbekistanCiutat del" + + " VaticàSaint Vincent i les GrenadinesVeneçuelaIlles Verges BritàniquesIl" + + "les Verges Nord-americanesVietnamVanuatuWallis i FutunaSamoaKosovoIemenM" + + "ayotteRepública de Sud-àfricaZàmbiaZimbàbueRegió desconegudaMónÀfricaAmè" + + "rica del NordAmèrica del SudOceaniaÀfrica occidentalAmèrica CentralÀfric" + + "a orientalÀfrica septentrionalÀfrica centralÀfrica meridionalAmèricaAmèr" + + "ica septentrionalCaribÀsia orientalÀsia meridionalÀsia sud-orientalEurop" + + "a meridionalAustralàsiaMelanèsiaRegió de la MicronèsiaPolinèsiaÀsiaÀsia " + + "centralÀsia occidentalEuropaEuropa orientalEuropa septentrionalEuropa oc" + + "cidentalAmèrica Llatina" + +var caRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0015, 0x001c, 0x0030, 0x003a, 0x004b, 0x0053, 0x005b, 0x0063, 0x0069, 0x0073, 0x007c, 0x0090, 0x0098, 0x00a2, 0x00a7, @@ -43974,43 +46684,43 @@ var caRegionIdx = []uint16{ // 292 elements 0x0155, 0x015c, 0x0162, 0x0168, 0x0170, 0x0178, 0x017e, 0x0185, 0x0190, 0x01a0, 0x01b9, 0x01cc, 0x01d3, 0x01e2, 0x01ec, 0x01f0, 0x01f7, 0x01fb, 0x0204, 0x0213, 0x021d, 0x0221, 0x0229, 0x0231, - 0x023f, 0x0244, 0x0254, 0x025c, 0x0268, 0x0270, 0x0279, 0x0281, + 0x023f, 0x0244, 0x024c, 0x0254, 0x0260, 0x0268, 0x0271, 0x0279, // Entry 40 - 7F - 0x0296, 0x029e, 0x02ad, 0x02b4, 0x02bc, 0x02c2, 0x02d4, 0x02db, - 0x02e2, 0x02ea, 0x02f7, 0x02f7, 0x0301, 0x0305, 0x0313, 0x031e, - 0x032a, 0x0331, 0x0336, 0x0340, 0x0347, 0x034f, 0x035f, 0x0367, - 0x036c, 0x0375, 0x0380, 0x0387, 0x038d, 0x0397, 0x03a8, 0x03af, - 0x03d8, 0x03e1, 0x03e5, 0x03f2, 0x03f8, 0x040c, 0x0427, 0x042f, - 0x0437, 0x043d, 0x0444, 0x0453, 0x045d, 0x0464, 0x046a, 0x0475, - 0x047b, 0x04a2, 0x04a6, 0x04aa, 0x04b3, 0x04ba, 0x04c0, 0x04c7, - 0x04d0, 0x04d5, 0x04da, 0x04e6, 0x04ee, 0x04f6, 0x04fd, 0x0516, + 0x028e, 0x0296, 0x02a5, 0x02ac, 0x02b4, 0x02ba, 0x02cc, 0x02d3, + 0x02da, 0x02e2, 0x02ef, 0x02f8, 0x0302, 0x0306, 0x0314, 0x031f, + 0x032b, 0x0332, 0x0337, 0x0341, 0x0348, 0x0350, 0x0360, 0x0368, + 0x036d, 0x0376, 0x0381, 0x0388, 0x038e, 0x0398, 0x03a9, 0x03b0, + 0x03d9, 0x03e2, 0x03e6, 0x03f3, 0x03f9, 0x040d, 0x0428, 0x0430, + 0x0438, 0x043e, 0x0445, 0x0454, 0x045e, 0x0465, 0x046b, 0x0476, + 0x047c, 0x04a3, 0x04a7, 0x04ab, 0x04b4, 0x04bb, 0x04c1, 0x04c8, + 0x04d1, 0x04d6, 0x04db, 0x04e7, 0x04ef, 0x04f7, 0x04fe, 0x0517, // Entry 80 - BF - 0x0524, 0x0531, 0x0537, 0x0543, 0x054d, 0x0551, 0x0557, 0x0562, - 0x056f, 0x0578, 0x0580, 0x0587, 0x0590, 0x0599, 0x05a1, 0x05a7, - 0x05ad, 0x05b4, 0x05bd, 0x05c7, 0x05d3, 0x05dd, 0x05eb, 0x05f5, - 0x05f9, 0x060c, 0x0615, 0x0625, 0x063d, 0x0646, 0x0651, 0x065b, - 0x0660, 0x0667, 0x066f, 0x0675, 0x067b, 0x0684, 0x068d, 0x0695, - 0x06a4, 0x06aa, 0x06b1, 0x06b9, 0x06c2, 0x06d0, 0x06d7, 0x06dc, - 0x06e1, 0x06e5, 0x06f1, 0x06f5, 0x06fc, 0x0701, 0x0714, 0x0725, - 0x072e, 0x0736, 0x073e, 0x0756, 0x0764, 0x076f, 0x0783, 0x078b, + 0x0525, 0x0532, 0x0538, 0x0544, 0x054e, 0x0552, 0x0558, 0x0563, + 0x0570, 0x0579, 0x0581, 0x0588, 0x0591, 0x059a, 0x05a2, 0x05a8, + 0x05ae, 0x05b5, 0x05be, 0x05c8, 0x05d4, 0x05de, 0x05ec, 0x05f6, + 0x05fa, 0x060d, 0x0616, 0x0626, 0x063e, 0x0647, 0x0652, 0x065c, + 0x0661, 0x0668, 0x0670, 0x0676, 0x067c, 0x0685, 0x068e, 0x0696, + 0x06a5, 0x06ab, 0x06b2, 0x06ba, 0x06c3, 0x06d1, 0x06d8, 0x06dd, + 0x06e2, 0x06e6, 0x06f2, 0x06f6, 0x06fd, 0x0702, 0x0715, 0x0726, + 0x072f, 0x0737, 0x073f, 0x0757, 0x0765, 0x0770, 0x0784, 0x078c, // Entry C0 - FF - 0x0790, 0x0798, 0x079d, 0x07bd, 0x07cf, 0x07d6, 0x07dd, 0x07e4, - 0x07ea, 0x07f9, 0x0806, 0x0810, 0x0815, 0x081c, 0x0824, 0x0830, - 0x083a, 0x084e, 0x0859, 0x0865, 0x086f, 0x0876, 0x087e, 0x0885, - 0x0892, 0x08a8, 0x08b3, 0x08bf, 0x08c5, 0x08d1, 0x08e2, 0x08f6, - 0x08fa, 0x0916, 0x091a, 0x0924, 0x092f, 0x0936, 0x0944, 0x0950, - 0x0958, 0x095d, 0x0964, 0x0975, 0x097b, 0x0981, 0x098a, 0x0992, - 0x0998, 0x09bb, 0x09c9, 0x09d5, 0x09dc, 0x09e6, 0x09f8, 0x0a16, - 0x0a20, 0x0a39, 0x0a55, 0x0a5c, 0x0a63, 0x0a72, 0x0a77, 0x0a7d, + 0x0791, 0x0799, 0x079e, 0x07be, 0x07d0, 0x07d7, 0x07de, 0x07e5, + 0x07eb, 0x07fa, 0x0807, 0x0811, 0x0816, 0x081d, 0x0825, 0x0831, + 0x083b, 0x084f, 0x085a, 0x0866, 0x0870, 0x0877, 0x087f, 0x0886, + 0x0893, 0x08a9, 0x08b4, 0x08c0, 0x08c6, 0x08d2, 0x08e3, 0x08f7, + 0x08fb, 0x0918, 0x091c, 0x0926, 0x0931, 0x0938, 0x0946, 0x0952, + 0x095a, 0x095f, 0x0966, 0x0977, 0x097d, 0x0983, 0x098c, 0x0994, + 0x099a, 0x09bd, 0x09cb, 0x09d7, 0x09de, 0x09e8, 0x09fa, 0x0a18, + 0x0a22, 0x0a3b, 0x0a57, 0x0a5e, 0x0a65, 0x0a74, 0x0a79, 0x0a7f, // Entry 100 - 13F - 0x0a82, 0x0a89, 0x0aa2, 0x0aa9, 0x0ab2, 0x0ac4, 0x0ac8, 0x0acf, - 0x0ae0, 0x0af0, 0x0af7, 0x0b09, 0x0b19, 0x0b29, 0x0b3e, 0x0b4d, - 0x0b5f, 0x0b67, 0x0b7d, 0x0b82, 0x0b90, 0x0ba0, 0x0bb2, 0x0bc3, - 0x0bcf, 0x0bd9, 0x0bf1, 0x0bfb, 0x0c00, 0x0c0d, 0x0c1d, 0x0c23, - 0x0c32, 0x0c46, 0x0c57, 0x0c67, -} // Size: 608 bytes - -const csRegionStr string = "" + // Size: 3219 bytes + 0x0a84, 0x0a8b, 0x0aa4, 0x0aab, 0x0ab4, 0x0ac6, 0x0aca, 0x0ad1, + 0x0ae2, 0x0af2, 0x0af9, 0x0b0b, 0x0b1b, 0x0b2b, 0x0b40, 0x0b4f, + 0x0b61, 0x0b69, 0x0b7f, 0x0b84, 0x0b92, 0x0ba2, 0x0bb4, 0x0bc5, + 0x0bd1, 0x0bdb, 0x0bf3, 0x0bfd, 0x0c02, 0x0c0f, 0x0c1f, 0x0c25, + 0x0c34, 0x0c48, 0x0c59, 0x0c59, 0x0c69, +} // Size: 610 bytes + +const csRegionStr string = "" + // Size: 3244 bytes "AscensionAndorraSpojené arabské emirátyAfghánistánAntigua a BarbudaAngui" + "llaAlbánieArménieAngolaAntarktidaArgentinaAmerická SamoaRakouskoAustráli" + "eArubaÅlandyÁzerbájdžánBosna a HercegovinaBarbadosBangladéšBelgieBurkina" + @@ -44019,42 +46729,42 @@ const csRegionStr string = "" + // Size: 3219 bytes "zeKanadaKokosové ostrovyKongo – KinshasaStředoafrická republikaKongo – B" + "razzavilleŠvýcarskoPobřeží slonovinyCookovy ostrovyChileKamerunČínaKolum" + "bieClippertonův ostrovKostarikaKubaKapverdyCuraçaoVánoční ostrovKyprČesk" + - "á republikaNěmeckoDiego GarcíaDžibutskoDánskoDominikaDominikánská repub" + - "likaAlžírskoCeuta a MelillaEkvádorEstonskoEgyptZápadní SaharaEritreaŠpan" + - "ělskoEtiopieEvropská unieFinskoFidžiFalklandské ostrovyMikronésieFaersk" + - "é ostrovyFrancieGabonSpojené královstvíGrenadaGruzieFrancouzská GuyanaG" + - "uernseyGhanaGibraltarGrónskoGambieGuineaGuadeloupeRovníková GuineaŘeckoJ" + - "ižní Georgie a Jižní Sandwichovy ostrovyGuatemalaGuamGuinea-BissauGuyana" + - "Hongkong – ZAO ČínyHeardův ostrov a McDonaldovy ostrovyHondurasChorvatsk" + - "oHaitiMaďarskoKanárské ostrovyIndonésieIrskoIzraelOstrov ManIndieBritské" + - " indickooceánské územíIrákÍránIslandItálieJerseyJamajkaJordánskoJaponsko" + - "KeňaKyrgyzstánKambodžaKiribatiKomorySvatý Kryštof a NevisSeverní KoreaJi" + - "žní KoreaKuvajtKajmanské ostrovyKazachstánLaosLibanonSvatá LucieLichten" + - "štejnskoSrí LankaLibérieLesothoLitvaLucemburskoLotyšskoLibyeMarokoMonak" + - "oMoldavskoČerná HoraSvatý Martin (Francie)MadagaskarMarshallovy ostrovyM" + - "akedonieMaliMyanmar (Barma)MongolskoMacao – ZAO ČínySeverní MarianyMarti" + - "nikMauritánieMontserratMaltaMauriciusMaledivyMalawiMexikoMalajsieMosambi" + - "kNamibieNová KaledonieNigerNorfolkNigérieNikaraguaNizozemskoNorskoNepálN" + - "auruNiueNový ZélandOmánPanamaPeruFrancouzská PolynésiePapua-Nová GuineaF" + - "ilipínyPákistánPolskoSaint-Pierre a MiquelonPitcairnovy ostrovyPortoriko" + - "Palestinská územíPortugalskoPalauParaguayKatarVnější OceánieRéunionRumun" + - "skoSrbskoRuskoRwandaSaúdská ArábieŠalamounovy ostrovySeychelySúdánŠvédsk" + - "oSingapurSvatá HelenaSlovinskoŠpicberky a Jan MayenSlovenskoSierra Leone" + - "San MarinoSenegalSomálskoSurinamJižní SúdánSvatý Tomáš a Princův ostrovS" + - "alvadorSvatý Martin (Nizozemsko)SýrieSvazijskoTristan da CunhaTurks a Ca" + - "icosČadFrancouzská jižní územíTogoThajskoTádžikistánTokelauVýchodní Timo" + - "rTurkmenistánTuniskoTongaTureckoTrinidad a TobagoTuvaluTchaj-wanTanzanie" + - "UkrajinaUgandaMenší odlehlé ostrovy USAOSNSpojené státyUruguayUzbekistán" + - "VatikánSvatý Vincenc a GrenadinyVenezuelaBritské Panenské ostrovyAmerick" + - "é Panenské ostrovyVietnamVanuatuWallis a FutunaSamoaKosovoJemenMayotteJ" + - "ihoafrická republikaZambieZimbabweNeznámá oblastSvětAfrikaSeverní Amerik" + - "aJižní AmerikaOceánieZápadní AfrikaStřední AmerikaVýchodní AfrikaSeverní" + - " AfrikaStřední AfrikaJižní AfrikaAmerikaSeverní Amerika (oblast)KaribikV" + - "ýchodní AsieJižní AsieJihovýchodní AsieJižní EvropaAustralasieMelanésie" + - "Mikronésie (region)PolynésieAsieStřední AsieZápadní AsieEvropaVýchodní E" + - "vropaSeverní EvropaZápadní EvropaLatinská Amerika" - -var csRegionIdx = []uint16{ // 292 elements + "oNěmeckoDiego GarcíaDžibutskoDánskoDominikaDominikánská republikaAlžírsk" + + "oCeuta a MelillaEkvádorEstonskoEgyptZápadní SaharaEritreaŠpanělskoEtiopi" + + "eEvropská unieeurozónaFinskoFidžiFalklandské ostrovyMikronésieFaerské os" + + "trovyFrancieGabonSpojené královstvíGrenadaGruzieFrancouzská GuyanaGuerns" + + "eyGhanaGibraltarGrónskoGambieGuineaGuadeloupeRovníková GuineaŘeckoJižní " + + "Georgie a Jižní Sandwichovy ostrovyGuatemalaGuamGuinea-BissauGuyanaHongk" + + "ong – ZAO ČínyHeardův ostrov a McDonaldovy ostrovyHondurasChorvatskoHait" + + "iMaďarskoKanárské ostrovyIndonésieIrskoIzraelOstrov ManIndieBritské indi" + + "ckooceánské územíIrákÍránIslandItálieJerseyJamajkaJordánskoJaponskoKeňaK" + + "yrgyzstánKambodžaKiribatiKomorySvatý Kryštof a NevisSeverní KoreaJižní K" + + "oreaKuvajtKajmanské ostrovyKazachstánLaosLibanonSvatá LucieLichtenštejns" + + "koSrí LankaLibérieLesothoLitvaLucemburskoLotyšskoLibyeMarokoMonakoMoldav" + + "skoČerná HoraSvatý Martin (Francie)MadagaskarMarshallovy ostrovyMakedoni" + + "eMaliMyanmar (Barma)MongolskoMacao – ZAO ČínySeverní MarianyMartinikMaur" + + "itánieMontserratMaltaMauriciusMaledivyMalawiMexikoMalajsieMosambikNamibi" + + "eNová KaledonieNigerNorfolkNigérieNikaraguaNizozemskoNorskoNepálNauruNiu" + + "eNový ZélandOmánPanamaPeruFrancouzská PolynésiePapua-Nová GuineaFilipíny" + + "PákistánPolskoSaint-Pierre a MiquelonPitcairnovy ostrovyPortorikoPalesti" + + "nská územíPortugalskoPalauParaguayKatarvnější OceánieRéunionRumunskoSrbs" + + "koRuskoRwandaSaúdská ArábieŠalamounovy ostrovySeychelySúdánŠvédskoSingap" + + "urSvatá HelenaSlovinskoŠpicberky a Jan MayenSlovenskoSierra LeoneSan Mar" + + "inoSenegalSomálskoSurinamJižní SúdánSvatý Tomáš a Princův ostrovSalvador" + + "Svatý Martin (Nizozemsko)SýrieSvazijskoTristan da CunhaTurks a CaicosČad" + + "Francouzská jižní územíTogoThajskoTádžikistánTokelauVýchodní TimorTurkme" + + "nistánTuniskoTongaTureckoTrinidad a TobagoTuvaluTchaj-wanTanzanieUkrajin" + + "aUgandaMenší odlehlé ostrovy USAOrganizace spojených národůSpojené státy" + + "UruguayUzbekistánVatikánSvatý Vincenc a GrenadinyVenezuelaBritské Panens" + + "ké ostrovyAmerické Panenské ostrovyVietnamVanuatuWallis a FutunaSamoaKos" + + "ovoJemenMayotteJihoafrická republikaZambieZimbabweneznámá oblastsvětAfri" + + "kaSeverní AmerikaJižní AmerikaOceániezápadní AfrikaStřední Amerikavýchod" + + "ní Afrikaseverní Afrikastřední Afrikajižní AfrikaAmerikaSeverní Amerika " + + "(oblast)Karibikvýchodní Asiejižní Asiejihovýchodní Asiejižní EvropaAustr" + + "alasieMelanésieMikronésie (region)PolynésieAsieStřední Asiezápadní AsieE" + + "vropavýchodní Evropaseverní Evropazápadní EvropaLatinská Amerika" + +var csRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0009, 0x0010, 0x002a, 0x0037, 0x0048, 0x0050, 0x0058, 0x0060, 0x0066, 0x0070, 0x0079, 0x0088, 0x0090, 0x009a, 0x009f, @@ -44063,43 +46773,43 @@ var csRegionIdx = []uint16{ // 292 elements 0x014d, 0x0153, 0x015b, 0x016b, 0x0173, 0x017d, 0x0183, 0x0189, 0x019a, 0x01ac, 0x01c5, 0x01da, 0x01e5, 0x01f9, 0x0208, 0x020d, 0x0214, 0x021a, 0x0222, 0x0236, 0x023f, 0x0243, 0x024b, 0x0253, - 0x0264, 0x0268, 0x0279, 0x0281, 0x028e, 0x0298, 0x029f, 0x02a7, + 0x0264, 0x0268, 0x026e, 0x0276, 0x0283, 0x028d, 0x0294, 0x029c, // Entry 40 - 7F - 0x02bf, 0x02c9, 0x02d8, 0x02e0, 0x02e8, 0x02ed, 0x02fd, 0x0304, - 0x030f, 0x0316, 0x0324, 0x0324, 0x032a, 0x0330, 0x0344, 0x034f, - 0x035f, 0x0366, 0x036b, 0x0380, 0x0387, 0x038d, 0x03a0, 0x03a8, - 0x03ad, 0x03b6, 0x03be, 0x03c4, 0x03ca, 0x03d4, 0x03e6, 0x03ec, - 0x0419, 0x0422, 0x0426, 0x0433, 0x0439, 0x0450, 0x0475, 0x047d, - 0x0487, 0x048c, 0x0495, 0x04a7, 0x04b1, 0x04b6, 0x04bc, 0x04c6, - 0x04cb, 0x04ed, 0x04f2, 0x04f8, 0x04fe, 0x0505, 0x050b, 0x0512, - 0x051c, 0x0524, 0x0529, 0x0534, 0x053d, 0x0545, 0x054b, 0x0562, + 0x02b4, 0x02be, 0x02cd, 0x02d5, 0x02dd, 0x02e2, 0x02f2, 0x02f9, + 0x0304, 0x030b, 0x0319, 0x0322, 0x0328, 0x032e, 0x0342, 0x034d, + 0x035d, 0x0364, 0x0369, 0x037e, 0x0385, 0x038b, 0x039e, 0x03a6, + 0x03ab, 0x03b4, 0x03bc, 0x03c2, 0x03c8, 0x03d2, 0x03e4, 0x03ea, + 0x0417, 0x0420, 0x0424, 0x0431, 0x0437, 0x044e, 0x0473, 0x047b, + 0x0485, 0x048a, 0x0493, 0x04a5, 0x04af, 0x04b4, 0x04ba, 0x04c4, + 0x04c9, 0x04eb, 0x04f0, 0x04f6, 0x04fc, 0x0503, 0x0509, 0x0510, + 0x051a, 0x0522, 0x0527, 0x0532, 0x053b, 0x0543, 0x0549, 0x0560, // Entry 80 - BF - 0x0570, 0x057d, 0x0583, 0x0595, 0x05a0, 0x05a4, 0x05ab, 0x05b7, - 0x05c7, 0x05d1, 0x05d9, 0x05e0, 0x05e5, 0x05f0, 0x05f9, 0x05fe, - 0x0604, 0x060a, 0x0613, 0x061f, 0x0636, 0x0640, 0x0653, 0x065c, - 0x0660, 0x066f, 0x0678, 0x068c, 0x069c, 0x06a4, 0x06af, 0x06b9, - 0x06be, 0x06c7, 0x06cf, 0x06d5, 0x06db, 0x06e3, 0x06eb, 0x06f2, - 0x0701, 0x0706, 0x070d, 0x0715, 0x071e, 0x0728, 0x072e, 0x0734, - 0x0739, 0x073d, 0x074a, 0x074f, 0x0755, 0x0759, 0x0770, 0x0782, - 0x078b, 0x0795, 0x079b, 0x07b2, 0x07c5, 0x07ce, 0x07e2, 0x07ed, + 0x056e, 0x057b, 0x0581, 0x0593, 0x059e, 0x05a2, 0x05a9, 0x05b5, + 0x05c5, 0x05cf, 0x05d7, 0x05de, 0x05e3, 0x05ee, 0x05f7, 0x05fc, + 0x0602, 0x0608, 0x0611, 0x061d, 0x0634, 0x063e, 0x0651, 0x065a, + 0x065e, 0x066d, 0x0676, 0x068a, 0x069a, 0x06a2, 0x06ad, 0x06b7, + 0x06bc, 0x06c5, 0x06cd, 0x06d3, 0x06d9, 0x06e1, 0x06e9, 0x06f0, + 0x06ff, 0x0704, 0x070b, 0x0713, 0x071c, 0x0726, 0x072c, 0x0732, + 0x0737, 0x073b, 0x0748, 0x074d, 0x0753, 0x0757, 0x076e, 0x0780, + 0x0789, 0x0793, 0x0799, 0x07b0, 0x07c3, 0x07cc, 0x07e0, 0x07eb, // Entry C0 - FF - 0x07f2, 0x07fa, 0x07ff, 0x0811, 0x0819, 0x0821, 0x0827, 0x082c, - 0x0832, 0x0843, 0x0857, 0x085f, 0x0866, 0x086f, 0x0877, 0x0884, - 0x088d, 0x08a3, 0x08ac, 0x08b8, 0x08c2, 0x08c9, 0x08d2, 0x08d9, - 0x08e8, 0x0908, 0x0910, 0x092a, 0x0930, 0x0939, 0x0949, 0x0957, - 0x095b, 0x0977, 0x097b, 0x0982, 0x0990, 0x0997, 0x09a7, 0x09b4, - 0x09bb, 0x09c0, 0x09c7, 0x09d8, 0x09de, 0x09e7, 0x09ef, 0x09f7, - 0x09fd, 0x0a19, 0x0a1c, 0x0a2b, 0x0a32, 0x0a3d, 0x0a45, 0x0a5f, - 0x0a68, 0x0a82, 0x0a9d, 0x0aa4, 0x0aab, 0x0aba, 0x0abf, 0x0ac5, + 0x07f0, 0x07f8, 0x07fd, 0x080f, 0x0817, 0x081f, 0x0825, 0x082a, + 0x0830, 0x0841, 0x0855, 0x085d, 0x0864, 0x086d, 0x0875, 0x0882, + 0x088b, 0x08a1, 0x08aa, 0x08b6, 0x08c0, 0x08c7, 0x08d0, 0x08d7, + 0x08e6, 0x0906, 0x090e, 0x0928, 0x092e, 0x0937, 0x0947, 0x0955, + 0x0959, 0x0975, 0x0979, 0x0980, 0x098e, 0x0995, 0x09a5, 0x09b2, + 0x09b9, 0x09be, 0x09c5, 0x09d6, 0x09dc, 0x09e5, 0x09ed, 0x09f5, + 0x09fb, 0x0a17, 0x0a35, 0x0a44, 0x0a4b, 0x0a56, 0x0a5e, 0x0a78, + 0x0a81, 0x0a9b, 0x0ab6, 0x0abd, 0x0ac4, 0x0ad3, 0x0ad8, 0x0ade, // Entry 100 - 13F - 0x0aca, 0x0ad1, 0x0ae7, 0x0aed, 0x0af5, 0x0b05, 0x0b0a, 0x0b10, - 0x0b20, 0x0b2f, 0x0b37, 0x0b47, 0x0b58, 0x0b69, 0x0b78, 0x0b88, - 0x0b96, 0x0b9d, 0x0bb6, 0x0bbd, 0x0bcc, 0x0bd8, 0x0beb, 0x0bf9, - 0x0c04, 0x0c0e, 0x0c22, 0x0c2c, 0x0c30, 0x0c3e, 0x0c4c, 0x0c52, - 0x0c63, 0x0c72, 0x0c82, 0x0c93, -} // Size: 608 bytes - -const daRegionStr string = "" + // Size: 2960 bytes + 0x0ae3, 0x0aea, 0x0b00, 0x0b06, 0x0b0e, 0x0b1e, 0x0b23, 0x0b29, + 0x0b39, 0x0b48, 0x0b50, 0x0b60, 0x0b71, 0x0b82, 0x0b91, 0x0ba1, + 0x0baf, 0x0bb6, 0x0bcf, 0x0bd6, 0x0be5, 0x0bf1, 0x0c04, 0x0c12, + 0x0c1d, 0x0c27, 0x0c3b, 0x0c45, 0x0c49, 0x0c57, 0x0c65, 0x0c6b, + 0x0c7c, 0x0c8b, 0x0c9b, 0x0c9b, 0x0cac, +} // Size: 610 bytes + +const daRegionStr string = "" + // Size: 2964 bytes "AscensionøenAndorraDe Forenede Arabiske EmiraterAfghanistanAntigua og Ba" + "rbudaAnguillaAlbanienArmenienAngolaAntarktisArgentinaAmerikansk SamoaØst" + "rigAustralienArubaÅlandAserbajdsjanBosnien-HercegovinaBarbadosBangladesh" + @@ -44110,39 +46820,39 @@ const daRegionStr string = "" + // Size: 2960 bytes "amerounKinaColombiaClippertonøenCosta RicaCubaKap VerdeCuraçaoJuleøenCyp" + "ernTjekkietTysklandDiego GarciaDjiboutiDanmarkDominicaDen Dominikanske R" + "epublikAlgerietCeuta og MelillaEcuadorEstlandEgyptenVestsaharaEritreaSpa" + - "nienEtiopienDen Europæiske UnionFinlandFijiFalklandsøerneMikronesiens Fo" + - "renede StaterFærøerneFrankrigGabonStorbritannienGrenadaGeorgienFransk Gu" + - "yanaGuernseyGhanaGibraltarGrønlandGambiaGuineaGuadeloupeÆkvatorialguinea" + - "GrækenlandSouth Georgia og De Sydlige SandwichøerGuatemalaGuamGuinea-Bis" + - "sauGuyanaSAR HongkongHeard Island og McDonald IslandsHondurasKroatienHai" + - "tiUngarnKanariske øerIndonesienIrlandIsraelIsle of ManIndienDet britiske" + - " territorium i Det Indiske OceanIrakIranIslandItalienJerseyJamaicaJordan" + - "JapanKenyaKirgisistanCambodjaKiribatiComorerneSaint Kitts og NevisNordko" + - "reaSydkoreaKuwaitCaymanøerneKasakhstanLaosLibanonSaint LuciaLiechtenstei" + - "nSri LankaLiberiaLesothoLitauenLuxembourgLetlandLibyenMarokkoMonacoMoldo" + - "vaMontenegroSaint MartinMadagaskarMarshalløerneMakedonienMaliMyanmar (Bu" + - "rma)MongolietSAR MacaoNordmarianerneMartiniqueMauretanienMontserratMalta" + - "MauritiusMaldiverneMalawiMexicoMalaysiaMozambiqueNamibiaNy KaledonienNig" + - "erNorfolk IslandNigeriaNicaraguaHollandNorgeNepalNauruNiueNew ZealandOma" + - "nPanamaPeruFransk PolynesienPapua Ny GuineaFilippinernePakistanPolenSain" + - "t Pierre og MiquelonPitcairnPuerto RicoDe palæstinensiske områderPortuga" + - "lPalauParaguayQatarYdre OceanienRéunionRumænienSerbienRuslandRwandaSaudi" + - "-ArabienSalomonøerneSeychellerneSudanSverigeSingaporeSt. HelenaSlovenien" + - "Svalbard og Jan MayenSlovakietSierra LeoneSan MarinoSenegalSomaliaSurina" + - "mSydsudanSão Tomé og PríncipeEl SalvadorSint MaartenSyrienSwazilandTrist" + - "an da CunhaTurks- og CaicosøerneTchadDe franske besiddelser i Det Sydlig" + - "e Indiske OceanTogoThailandTadsjikistanTokelauTimor-LesteTurkmenistanTun" + - "esienTongaTyrkietTrinidad og TobagoTuvaluTaiwanTanzaniaUkraineUgandaAmer" + - "ikanske oversøiske øerForenede NationerUSAUruguayUsbekistanVatikanstaten" + - "Saint Vincent og GrenadinerneVenezuelaDe Britiske JomfruøerDe Amerikansk" + - "e JomfruøerVietnamVanuatuWallis og FutunaSamoaKosovoYemenMayotteSydafrik" + - "aZambiaZimbabweUkendt områdeVerdenAfrikaNordamerikaSydamerikaOceanienVes" + - "tafrikaMellemamerikaØstafrikaNordafrikaCentralafrikaDet sydlige AfrikaAm" + - "erikaDet nordlige AmerikaCaribienØstasienSydasienSydøstasienSydeuropaAus" + - "tralasienMelanesienMikronesienPolynesienAsienCentralasienVestasienEuropa" + - "ØsteuropaNordeuropaVesteuropaLatinamerika" - -var daRegionIdx = []uint16{ // 292 elements + "nienEtiopienDen Europæiske UnioneurozonenFinlandFijiFalklandsøerneMikron" + + "esienFærøerneFrankrigGabonStorbritannienGrenadaGeorgienFransk GuyanaGuer" + + "nseyGhanaGibraltarGrønlandGambiaGuineaGuadeloupeÆkvatorialguineaGrækenla" + + "ndSouth Georgia og De Sydlige SandwichøerGuatemalaGuamGuinea-BissauGuyan" + + "aSAR HongkongHeard Island og McDonald IslandsHondurasKroatienHaitiUngarn" + + "Kanariske øerIndonesienIrlandIsraelIsle of ManIndienDet britiske territo" + + "rium i Det Indiske OceanIrakIranIslandItalienJerseyJamaicaJordanJapanKen" + + "yaKirgisistanCambodjaKiribatiComorerneSaint Kitts og NevisNordkoreaSydko" + + "reaKuwaitCaymanøerneKasakhstanLaosLibanonSaint LuciaLiechtensteinSri Lan" + + "kaLiberiaLesothoLitauenLuxembourgLetlandLibyenMarokkoMonacoMoldovaMonten" + + "egroSaint MartinMadagaskarMarshalløerneMakedonienMaliMyanmar (Burma)Mong" + + "olietSAR MacaoNordmarianerneMartiniqueMauretanienMontserratMaltaMauritiu" + + "sMaldiverneMalawiMexicoMalaysiaMozambiqueNamibiaNy KaledonienNigerNorfol" + + "k IslandNigeriaNicaraguaHollandNorgeNepalNauruNiueNew ZealandOmanPanamaP" + + "eruFransk PolynesienPapua Ny GuineaFilippinernePakistanPolenSaint Pierre" + + " og MiquelonPitcairnPuerto RicoDe palæstinensiske områderPortugalPalauPa" + + "raguayQatarYdre OceanienRéunionRumænienSerbienRuslandRwandaSaudi-Arabien" + + "SalomonøerneSeychellerneSudanSverigeSingaporeSt. HelenaSlovenienSvalbard" + + " og Jan MayenSlovakietSierra LeoneSan MarinoSenegalSomaliaSurinamSydsuda" + + "nSão Tomé og PríncipeEl SalvadorSint MaartenSyrienSwazilandTristan da Cu" + + "nhaTurks- og CaicosøerneTchadDe franske besiddelser i Det Sydlige Indisk" + + "e OceanTogoThailandTadsjikistanTokelauTimor-LesteTurkmenistanTunesienTon" + + "gaTyrkietTrinidad og TobagoTuvaluTaiwanTanzaniaUkraineUgandaAmerikanske " + + "oversøiske øerDe Forenede NationerUSAUruguayUsbekistanVatikanstatenSaint" + + " Vincent og GrenadinerneVenezuelaDe Britiske JomfruøerDe Amerikanske Jom" + + "fruøerVietnamVanuatuWallis og FutunaSamoaKosovoYemenMayotteSydafrikaZamb" + + "iaZimbabweUkendt områdeVerdenAfrikaNordamerikaSydamerikaOceanienVestafri" + + "kaMellemamerikaØstafrikaNordafrikaCentralafrikaDet sydlige AfrikaAmerika" + + "Det nordlige AmerikaCaribienØstasienSydasienSydøstasienSydeuropaAustrala" + + "sienMelanesienMikronesiske områdePolynesienAsienCentralasienVestasienEur" + + "opaØsteuropaNordeuropaVesteuropaLatinamerika" + +var daRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x000d, 0x0014, 0x0031, 0x003c, 0x004e, 0x0056, 0x005e, 0x0066, 0x006c, 0x0075, 0x007e, 0x008e, 0x0095, 0x009f, 0x00a4, @@ -44154,40 +46864,40 @@ var daRegionIdx = []uint16{ // 292 elements 0x0247, 0x024d, 0x0255, 0x025d, 0x0269, 0x0271, 0x0278, 0x0280, // Entry 40 - 7F 0x0299, 0x02a1, 0x02b1, 0x02b8, 0x02bf, 0x02c6, 0x02d0, 0x02d7, - 0x02de, 0x02e6, 0x02fb, 0x02fb, 0x0302, 0x0306, 0x0315, 0x0331, - 0x033b, 0x0343, 0x0348, 0x0356, 0x035d, 0x0365, 0x0372, 0x037a, - 0x037f, 0x0388, 0x0391, 0x0397, 0x039d, 0x03a7, 0x03b8, 0x03c3, - 0x03eb, 0x03f4, 0x03f8, 0x0405, 0x040b, 0x0417, 0x0437, 0x043f, - 0x0447, 0x044c, 0x0452, 0x0460, 0x046a, 0x0470, 0x0476, 0x0481, - 0x0487, 0x04b3, 0x04b7, 0x04bb, 0x04c1, 0x04c8, 0x04ce, 0x04d5, - 0x04db, 0x04e0, 0x04e5, 0x04f0, 0x04f8, 0x0500, 0x0509, 0x051d, + 0x02de, 0x02e6, 0x02fb, 0x0304, 0x030b, 0x030f, 0x031e, 0x0329, + 0x0333, 0x033b, 0x0340, 0x034e, 0x0355, 0x035d, 0x036a, 0x0372, + 0x0377, 0x0380, 0x0389, 0x038f, 0x0395, 0x039f, 0x03b0, 0x03bb, + 0x03e3, 0x03ec, 0x03f0, 0x03fd, 0x0403, 0x040f, 0x042f, 0x0437, + 0x043f, 0x0444, 0x044a, 0x0458, 0x0462, 0x0468, 0x046e, 0x0479, + 0x047f, 0x04ab, 0x04af, 0x04b3, 0x04b9, 0x04c0, 0x04c6, 0x04cd, + 0x04d3, 0x04d8, 0x04dd, 0x04e8, 0x04f0, 0x04f8, 0x0501, 0x0515, // Entry 80 - BF - 0x0526, 0x052e, 0x0534, 0x0540, 0x054a, 0x054e, 0x0555, 0x0560, - 0x056d, 0x0576, 0x057d, 0x0584, 0x058b, 0x0595, 0x059c, 0x05a2, - 0x05a9, 0x05af, 0x05b6, 0x05c0, 0x05cc, 0x05d6, 0x05e4, 0x05ee, - 0x05f2, 0x0601, 0x060a, 0x0613, 0x0621, 0x062b, 0x0636, 0x0640, - 0x0645, 0x064e, 0x0658, 0x065e, 0x0664, 0x066c, 0x0676, 0x067d, - 0x068a, 0x068f, 0x069d, 0x06a4, 0x06ad, 0x06b4, 0x06b9, 0x06be, - 0x06c3, 0x06c7, 0x06d2, 0x06d6, 0x06dc, 0x06e0, 0x06f1, 0x0700, - 0x070c, 0x0714, 0x0719, 0x0731, 0x0739, 0x0744, 0x0760, 0x0768, + 0x051e, 0x0526, 0x052c, 0x0538, 0x0542, 0x0546, 0x054d, 0x0558, + 0x0565, 0x056e, 0x0575, 0x057c, 0x0583, 0x058d, 0x0594, 0x059a, + 0x05a1, 0x05a7, 0x05ae, 0x05b8, 0x05c4, 0x05ce, 0x05dc, 0x05e6, + 0x05ea, 0x05f9, 0x0602, 0x060b, 0x0619, 0x0623, 0x062e, 0x0638, + 0x063d, 0x0646, 0x0650, 0x0656, 0x065c, 0x0664, 0x066e, 0x0675, + 0x0682, 0x0687, 0x0695, 0x069c, 0x06a5, 0x06ac, 0x06b1, 0x06b6, + 0x06bb, 0x06bf, 0x06ca, 0x06ce, 0x06d4, 0x06d8, 0x06e9, 0x06f8, + 0x0704, 0x070c, 0x0711, 0x0729, 0x0731, 0x073c, 0x0758, 0x0760, // Entry C0 - FF - 0x076d, 0x0775, 0x077a, 0x0787, 0x078f, 0x0798, 0x079f, 0x07a6, - 0x07ac, 0x07b9, 0x07c6, 0x07d2, 0x07d7, 0x07de, 0x07e7, 0x07f1, - 0x07fa, 0x080f, 0x0818, 0x0824, 0x082e, 0x0835, 0x083c, 0x0843, - 0x084b, 0x0862, 0x086d, 0x0879, 0x087f, 0x0888, 0x0898, 0x08ae, - 0x08b3, 0x08e5, 0x08e9, 0x08f1, 0x08fd, 0x0904, 0x090f, 0x091b, - 0x0923, 0x0928, 0x092f, 0x0941, 0x0947, 0x094d, 0x0955, 0x095c, - 0x0962, 0x097e, 0x098f, 0x0992, 0x0999, 0x09a3, 0x09b0, 0x09cd, - 0x09d6, 0x09ec, 0x0a05, 0x0a0c, 0x0a13, 0x0a23, 0x0a28, 0x0a2e, + 0x0765, 0x076d, 0x0772, 0x077f, 0x0787, 0x0790, 0x0797, 0x079e, + 0x07a4, 0x07b1, 0x07be, 0x07ca, 0x07cf, 0x07d6, 0x07df, 0x07e9, + 0x07f2, 0x0807, 0x0810, 0x081c, 0x0826, 0x082d, 0x0834, 0x083b, + 0x0843, 0x085a, 0x0865, 0x0871, 0x0877, 0x0880, 0x0890, 0x08a6, + 0x08ab, 0x08dd, 0x08e1, 0x08e9, 0x08f5, 0x08fc, 0x0907, 0x0913, + 0x091b, 0x0920, 0x0927, 0x0939, 0x093f, 0x0945, 0x094d, 0x0954, + 0x095a, 0x0976, 0x098a, 0x098d, 0x0994, 0x099e, 0x09ab, 0x09c8, + 0x09d1, 0x09e7, 0x0a00, 0x0a07, 0x0a0e, 0x0a1e, 0x0a23, 0x0a29, // Entry 100 - 13F - 0x0a33, 0x0a3a, 0x0a43, 0x0a49, 0x0a51, 0x0a5f, 0x0a65, 0x0a6b, - 0x0a76, 0x0a80, 0x0a88, 0x0a92, 0x0a9f, 0x0aa9, 0x0ab3, 0x0ac0, - 0x0ad2, 0x0ad9, 0x0aed, 0x0af5, 0x0afe, 0x0b06, 0x0b12, 0x0b1b, - 0x0b27, 0x0b31, 0x0b3c, 0x0b46, 0x0b4b, 0x0b57, 0x0b60, 0x0b66, - 0x0b70, 0x0b7a, 0x0b84, 0x0b90, -} // Size: 608 bytes - -const deRegionStr string = "" + // Size: 3086 bytes + 0x0a2e, 0x0a35, 0x0a3e, 0x0a44, 0x0a4c, 0x0a5a, 0x0a60, 0x0a66, + 0x0a71, 0x0a7b, 0x0a83, 0x0a8d, 0x0a9a, 0x0aa4, 0x0aae, 0x0abb, + 0x0acd, 0x0ad4, 0x0ae8, 0x0af0, 0x0af9, 0x0b01, 0x0b0d, 0x0b16, + 0x0b22, 0x0b2c, 0x0b40, 0x0b4a, 0x0b4f, 0x0b5b, 0x0b64, 0x0b6a, + 0x0b74, 0x0b7e, 0x0b88, 0x0b88, 0x0b94, +} // Size: 610 bytes + +const deRegionStr string = "" + // Size: 3102 bytes "AscensionAndorraVereinigte Arabische EmirateAfghanistanAntigua und Barbu" + "daAnguillaAlbanienArmenienAngolaAntarktisArgentinienAmerikanisch-SamoaÖs" + "terreichAustralienArubaÅlandinselnAserbaidschanBosnien und HerzegowinaBa" + @@ -44196,18 +46906,18 @@ const deRegionStr string = "" + // Size: 3086 bytes "asilienBahamasBhutanBouvetinselBotsuanaBelarusBelizeKanadaKokosinselnKon" + "go-KinshasaZentralafrikanische RepublikKongo-BrazzavilleSchweizCôte d’Iv" + "oireCookinselnChileKamerunChinaKolumbienClipperton-InselCosta RicaKubaCa" + - "bo VerdeCuraçaoWeihnachtsinselZypernTschechische RepublikDeutschlandDieg" + - "o GarciaDschibutiDänemarkDominicaDominikanische RepublikAlgerienCeuta un" + - "d MelillaEcuadorEstlandÄgyptenWestsaharaEritreaSpanienÄthiopienEuropäisc" + - "he UnionFinnlandFidschiFalklandinselnMikronesienFäröerFrankreichGabunVer" + - "einigtes KönigreichGrenadaGeorgienFranzösisch-GuayanaGuernseyGhanaGibral" + - "tarGrönlandGambiaGuineaGuadeloupeÄquatorialguineaGriechenlandSüdgeorgien" + - " und die Südlichen SandwichinselnGuatemalaGuamGuinea-BissauGuyanaSonderv" + - "erwaltungszone HongkongHeard und McDonaldinselnHondurasKroatienHaitiUnga" + - "rnKanarische InselnIndonesienIrlandIsraelIsle of ManIndienBritisches Ter" + - "ritorium im Indischen OzeanIrakIranIslandItalienJerseyJamaikaJordanienJa" + - "panKeniaKirgisistanKambodschaKiribatiKomorenSt. Kitts und NevisNordkorea" + - "SüdkoreaKuwaitKaimaninselnKasachstanLaosLibanonSt. LuciaLiechtensteinSri" + + "bo VerdeCuraçaoWeihnachtsinselZypernTschechienDeutschlandDiego GarciaDsc" + + "hibutiDänemarkDominicaDominikanische RepublikAlgerienCeuta und MelillaEc" + + "uadorEstlandÄgyptenWestsaharaEritreaSpanienÄthiopienEuropäische UnionEur" + + "ozoneFinnlandFidschiFalklandinselnMikronesienFäröerFrankreichGabunVerein" + + "igtes KönigreichGrenadaGeorgienFranzösisch-GuayanaGuernseyGhanaGibraltar" + + "GrönlandGambiaGuineaGuadeloupeÄquatorialguineaGriechenlandSüdgeorgien un" + + "d die Südlichen SandwichinselnGuatemalaGuamGuinea-BissauGuyanaSonderverw" + + "altungsregion HongkongHeard und McDonaldinselnHondurasKroatienHaitiUngar" + + "nKanarische InselnIndonesienIrlandIsraelIsle of ManIndienBritisches Terr" + + "itorium im Indischen OzeanIrakIranIslandItalienJerseyJamaikaJordanienJap" + + "anKeniaKirgisistanKambodschaKiribatiKomorenSt. Kitts und NevisNordkoreaS" + + "üdkoreaKuwaitKaimaninselnKasachstanLaosLibanonSt. LuciaLiechtensteinSri" + " LankaLiberiaLesothoLitauenLuxemburgLettlandLibyenMarokkoMonacoRepublik " + "MoldauMontenegroSt. MartinMadagaskarMarshallinselnMazedonienMaliMyanmarM" + "ongoleiSonderverwaltungsregion MacauNördliche MarianenMartiniqueMauretan" + @@ -44217,22 +46927,22 @@ const deRegionStr string = "" + // Size: 3086 bytes "ppinenPakistanPolenSt. Pierre und MiquelonPitcairninselnPuerto RicoPaläs" + "tinensische AutonomiegebietePortugalPalauParaguayKatarÄußeres OzeanienRé" + "unionRumänienSerbienRusslandRuandaSaudi-ArabienSalomonenSeychellenSudanS" + - "chwedenSingapurSt. HelenaSlowenienSpitzbergenSlowakeiSierra LeoneSan Mar" + - "inoSenegalSomaliaSurinameSüdsudanSão Tomé und PríncipeEl SalvadorSint Ma" + - "artenSyrienSwasilandTristan da CunhaTurks- und CaicosinselnTschadFranzös" + - "ische Süd- und AntarktisgebieteTogoThailandTadschikistanTokelauOsttimorT" + - "urkmenistanTunesienTongaTürkeiTrinidad und TobagoTuvaluTaiwanTansaniaUkr" + - "aineUgandaAmerikanische ÜberseeinselnVereinte NationenVereinigte Staaten" + - "UruguayUsbekistanVatikanstadtSt. Vincent und die GrenadinenVenezuelaBrit" + - "ische JungferninselnAmerikanische JungferninselnVietnamVanuatuWallis und" + - " FutunaSamoaKosovoJemenMayotteSüdafrikaSambiaSimbabweUnbekannte RegionWe" + - "ltAfrikaNordamerikaSüdamerikaOzeanienWestafrikaMittelamerikaOstafrikaNor" + - "dafrikaZentralafrikaSüdliches AfrikaAmerikaNördliches AmerikaKaribikOsta" + - "sienSüdasienSüdostasienSüdeuropaAustralasienMelanesienMikronesisches Ins" + - "elgebietPolynesienAsienZentralasienWestasienEuropaOsteuropaNordeuropaWes" + - "teuropaLateinamerika" - -var deRegionIdx = []uint16{ // 292 elements + "chwedenSingapurSt. HelenaSlowenienSpitzbergen und Jan MayenSlowakeiSierr" + + "a LeoneSan MarinoSenegalSomaliaSurinameSüdsudanSão Tomé und PríncipeEl S" + + "alvadorSint MaartenSyrienSwasilandTristan da CunhaTurks- und Caicosinsel" + + "nTschadFranzösische Süd- und AntarktisgebieteTogoThailandTadschikistanTo" + + "kelauTimor-LesteTurkmenistanTunesienTongaTürkeiTrinidad und TobagoTuvalu" + + "TaiwanTansaniaUkraineUgandaAmerikanische ÜberseeinselnVereinte NationenV" + + "ereinigte StaatenUruguayUsbekistanVatikanstadtSt. Vincent und die Grenad" + + "inenVenezuelaBritische JungferninselnAmerikanische JungferninselnVietnam" + + "VanuatuWallis und FutunaSamoaKosovoJemenMayotteSüdafrikaSambiaSimbabweUn" + + "bekannte RegionWeltAfrikaNordamerikaSüdamerikaOzeanienWestafrikaMittelam" + + "erikaOstafrikaNordafrikaZentralafrikaSüdliches AfrikaAmerikaNördliches A" + + "merikaKaribikOstasienSüdasienSüdostasienSüdeuropaAustralasienMelanesienM" + + "ikronesisches InselgebietPolynesienAsienZentralasienWestasienEuropaOsteu" + + "ropaNordeuropaWesteuropaLateinamerika" + +var deRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0009, 0x0010, 0x002c, 0x0037, 0x004a, 0x0052, 0x005a, 0x0062, 0x0068, 0x0071, 0x007c, 0x008e, 0x0099, 0x00a3, 0x00a8, @@ -44241,136 +46951,136 @@ var deRegionIdx = []uint16{ // 292 elements 0x0172, 0x0179, 0x017f, 0x018a, 0x0192, 0x0199, 0x019f, 0x01a5, 0x01b0, 0x01be, 0x01da, 0x01eb, 0x01f2, 0x0202, 0x020c, 0x0211, 0x0218, 0x021d, 0x0226, 0x0236, 0x0240, 0x0244, 0x024e, 0x0256, - 0x0265, 0x026b, 0x0280, 0x028b, 0x0297, 0x02a0, 0x02a9, 0x02b1, + 0x0265, 0x026b, 0x0275, 0x0280, 0x028c, 0x0295, 0x029e, 0x02a6, // Entry 40 - 7F - 0x02c8, 0x02d0, 0x02e1, 0x02e8, 0x02ef, 0x02f7, 0x0301, 0x0308, - 0x030f, 0x0319, 0x032b, 0x032b, 0x0333, 0x033a, 0x0348, 0x0353, - 0x035b, 0x0365, 0x036a, 0x0381, 0x0388, 0x0390, 0x03a4, 0x03ac, - 0x03b1, 0x03ba, 0x03c3, 0x03c9, 0x03cf, 0x03d9, 0x03ea, 0x03f6, - 0x0424, 0x042d, 0x0431, 0x043e, 0x0444, 0x0462, 0x047a, 0x0482, - 0x048a, 0x048f, 0x0495, 0x04a6, 0x04b0, 0x04b6, 0x04bc, 0x04c7, - 0x04cd, 0x04f6, 0x04fa, 0x04fe, 0x0504, 0x050b, 0x0511, 0x0518, - 0x0521, 0x0526, 0x052b, 0x0536, 0x0540, 0x0548, 0x054f, 0x0562, + 0x02bd, 0x02c5, 0x02d6, 0x02dd, 0x02e4, 0x02ec, 0x02f6, 0x02fd, + 0x0304, 0x030e, 0x0320, 0x0328, 0x0330, 0x0337, 0x0345, 0x0350, + 0x0358, 0x0362, 0x0367, 0x037e, 0x0385, 0x038d, 0x03a1, 0x03a9, + 0x03ae, 0x03b7, 0x03c0, 0x03c6, 0x03cc, 0x03d6, 0x03e7, 0x03f3, + 0x0421, 0x042a, 0x042e, 0x043b, 0x0441, 0x0461, 0x0479, 0x0481, + 0x0489, 0x048e, 0x0494, 0x04a5, 0x04af, 0x04b5, 0x04bb, 0x04c6, + 0x04cc, 0x04f5, 0x04f9, 0x04fd, 0x0503, 0x050a, 0x0510, 0x0517, + 0x0520, 0x0525, 0x052a, 0x0535, 0x053f, 0x0547, 0x054e, 0x0561, // Entry 80 - BF - 0x056b, 0x0574, 0x057a, 0x0586, 0x0590, 0x0594, 0x059b, 0x05a4, - 0x05b1, 0x05ba, 0x05c1, 0x05c8, 0x05cf, 0x05d8, 0x05e0, 0x05e6, - 0x05ed, 0x05f3, 0x0602, 0x060c, 0x0616, 0x0620, 0x062e, 0x0638, - 0x063c, 0x0643, 0x064b, 0x0668, 0x067b, 0x0685, 0x0690, 0x069a, - 0x069f, 0x06a8, 0x06b1, 0x06b7, 0x06bd, 0x06c5, 0x06cd, 0x06d4, - 0x06e1, 0x06e6, 0x06f2, 0x06f9, 0x0702, 0x070d, 0x0715, 0x071a, - 0x071f, 0x0723, 0x072d, 0x0731, 0x0737, 0x073b, 0x0752, 0x0761, - 0x076c, 0x0774, 0x0779, 0x0790, 0x079e, 0x07a9, 0x07cb, 0x07d3, + 0x056a, 0x0573, 0x0579, 0x0585, 0x058f, 0x0593, 0x059a, 0x05a3, + 0x05b0, 0x05b9, 0x05c0, 0x05c7, 0x05ce, 0x05d7, 0x05df, 0x05e5, + 0x05ec, 0x05f2, 0x0601, 0x060b, 0x0615, 0x061f, 0x062d, 0x0637, + 0x063b, 0x0642, 0x064a, 0x0667, 0x067a, 0x0684, 0x068f, 0x0699, + 0x069e, 0x06a7, 0x06b0, 0x06b6, 0x06bc, 0x06c4, 0x06cc, 0x06d3, + 0x06e0, 0x06e5, 0x06f1, 0x06f8, 0x0701, 0x070c, 0x0714, 0x0719, + 0x071e, 0x0722, 0x072c, 0x0730, 0x0736, 0x073a, 0x0751, 0x0760, + 0x076b, 0x0773, 0x0778, 0x078f, 0x079d, 0x07a8, 0x07ca, 0x07d2, // Entry C0 - FF - 0x07d8, 0x07e0, 0x07e5, 0x07f7, 0x07ff, 0x0808, 0x080f, 0x0817, - 0x081d, 0x082a, 0x0833, 0x083d, 0x0842, 0x084a, 0x0852, 0x085c, - 0x0865, 0x0870, 0x0878, 0x0884, 0x088e, 0x0895, 0x089c, 0x08a4, - 0x08ad, 0x08c5, 0x08d0, 0x08dc, 0x08e2, 0x08eb, 0x08fb, 0x0912, - 0x0918, 0x0940, 0x0944, 0x094c, 0x0959, 0x0960, 0x0968, 0x0974, - 0x097c, 0x0981, 0x0988, 0x099b, 0x09a1, 0x09a7, 0x09af, 0x09b6, - 0x09bc, 0x09d8, 0x09e9, 0x09fb, 0x0a02, 0x0a0c, 0x0a18, 0x0a36, - 0x0a3f, 0x0a57, 0x0a73, 0x0a7a, 0x0a81, 0x0a92, 0x0a97, 0x0a9d, + 0x07d7, 0x07df, 0x07e4, 0x07f6, 0x07fe, 0x0807, 0x080e, 0x0816, + 0x081c, 0x0829, 0x0832, 0x083c, 0x0841, 0x0849, 0x0851, 0x085b, + 0x0864, 0x087d, 0x0885, 0x0891, 0x089b, 0x08a2, 0x08a9, 0x08b1, + 0x08ba, 0x08d2, 0x08dd, 0x08e9, 0x08ef, 0x08f8, 0x0908, 0x091f, + 0x0925, 0x094d, 0x0951, 0x0959, 0x0966, 0x096d, 0x0978, 0x0984, + 0x098c, 0x0991, 0x0998, 0x09ab, 0x09b1, 0x09b7, 0x09bf, 0x09c6, + 0x09cc, 0x09e8, 0x09f9, 0x0a0b, 0x0a12, 0x0a1c, 0x0a28, 0x0a46, + 0x0a4f, 0x0a67, 0x0a83, 0x0a8a, 0x0a91, 0x0aa2, 0x0aa7, 0x0aad, // Entry 100 - 13F - 0x0aa2, 0x0aa9, 0x0ab3, 0x0ab9, 0x0ac1, 0x0ad2, 0x0ad6, 0x0adc, - 0x0ae7, 0x0af2, 0x0afa, 0x0b04, 0x0b11, 0x0b1a, 0x0b24, 0x0b31, - 0x0b42, 0x0b49, 0x0b5c, 0x0b63, 0x0b6b, 0x0b74, 0x0b80, 0x0b8a, - 0x0b96, 0x0ba0, 0x0bba, 0x0bc4, 0x0bc9, 0x0bd5, 0x0bde, 0x0be4, - 0x0bed, 0x0bf7, 0x0c01, 0x0c0e, -} // Size: 608 bytes - -const elRegionStr string = "" + // Size: 6246 bytes + 0x0ab2, 0x0ab9, 0x0ac3, 0x0ac9, 0x0ad1, 0x0ae2, 0x0ae6, 0x0aec, + 0x0af7, 0x0b02, 0x0b0a, 0x0b14, 0x0b21, 0x0b2a, 0x0b34, 0x0b41, + 0x0b52, 0x0b59, 0x0b6c, 0x0b73, 0x0b7b, 0x0b84, 0x0b90, 0x0b9a, + 0x0ba6, 0x0bb0, 0x0bca, 0x0bd4, 0x0bd9, 0x0be5, 0x0bee, 0x0bf4, + 0x0bfd, 0x0c07, 0x0c11, 0x0c11, 0x0c1e, +} // Size: 610 bytes + +const elRegionStr string = "" + // Size: 6250 bytes "Νήσος ΑσενσιόνΑνδόραΗνωμένα Αραβικά ΕμιράταΑφγανιστάνΑντίγκουα και Μπαρμ" + - "πούνταΑνγκουίλαΑλβανίαΑρμενίαΑνγκόλαΑνταρκτικήΑργεντινήΑμερικανική Σαμό" + - "αΑυστρίαΑυστραλίαΑρούμπαΝήσοι ΌλαντΑζερμπαϊτζάνΒοσνία - ΕρζεγοβίνηΜπαρμ" + - "πάντοςΜπανγκλαντέςΒέλγιοΜπουρκίνα ΦάσοΒουλγαρίαΜπαχρέινΜπουρούντιΜπενίν" + + "πούνταΑνγκουίλαΑλβανίαΑρμενίαΑγκόλαΑνταρκτικήΑργεντινήΑμερικανική Σαμόα" + + "ΑυστρίαΑυστραλίαΑρούμπαΝήσοι ΌλαντΑζερμπαϊτζάνΒοσνία - ΕρζεγοβίνηΜπαρμπ" + + "έιντοςΜπανγκλαντέςΒέλγιοΜπουρκίνα ΦάσοΒουλγαρίαΜπαχρέινΜπουρούντιΜπενίν" + "Άγιος ΒαρθολομαίοςΒερμούδεςΜπρουνέιΒολιβίαΟλλανδία ΚαραϊβικήςΒραζιλίαΜπ" + "αχάμεςΜπουτάνΝήσος ΜπουβέΜποτσουάναΛευκορωσίαΜπελίζΚαναδάςΝήσοι Κόκος (" + "Κίλινγκ)Κονγκό - ΚινσάσαΚεντροαφρικανική ΔημοκρατίαΚονγκό - ΜπραζαβίλΕλ" + "βετίαΑκτή ΕλεφαντοστούΝήσοι ΚουκΧιλήΚαμερούνΚίναΚολομβίαΝήσος Κλίπερτον" + "Κόστα ΡίκαΚούβαΠράσινο ΑκρωτήριοΚουρασάοΝήσος των ΧριστουγέννωνΚύπροςΤσ" + - "εχική ΔημοκρατίαΓερμανίαΝτιέγκο ΓκαρσίαΤζιμπουτίΔανίαΝτομίνικαΔομινικαν" + - "ή ΔημοκρατίαΑλγερίαΘεούτα και ΜελίλαΕκουαδόρΕσθονίαΑίγυπτοςΔυτική Σαχάρ" + - "αΕρυθραίαΙσπανίαΑιθιοπίαΕυρωπαϊκή ΈνωσηΦινλανδίαΦίτζιΝήσοι ΦόκλαντΜικρο" + - "νησίαΝήσοι ΦερόεςΓαλλίαΓκαμπόνΗνωμένο ΒασίλειοΓρενάδαΓεωργίαΓαλλική Γου" + - "ιάναΓκέρνζιΓκάναΓιβραλτάρΓροιλανδίαΓκάμπιαΓουινέαΓουαδελούπηΙσημερινή Γ" + - "ουινέαΕλλάδαΝήσοι Νότια Γεωργία και Νότιες ΣάντουιτςΓουατεμάλαΓκουάμΓου" + - "ινέα ΜπισάουΓουιάναΧονγκ Κονγκ ΕΔΠ ΚίναςΝήσοι Χερντ και ΜακντόναλντΟνδο" + - "ύραΚροατίαΑϊτήΟυγγαρίαΚανάριοι ΝήσοιΙνδονησίαΙρλανδίαΙσραήλΝήσος ΜανΙνδ" + - "ίαΒρετανικά Εδάφη Ινδικού ΩκεανούΙράκΙράνΙσλανδίαΙταλίαΤζέρζιΤζαμάικαΙο" + - "ρδανίαΙαπωνίαΚένυαΚιργιστάνΚαμπότζηΚιριμπάτιΚομόρεςΆγιος Χριστόφορος κα" + - "ι ΝέβιςΒόρεια ΚορέαΝότια ΚορέαΚουβέιτΝήσοι ΚάιμανΚαζακστάνΛάοςΛίβανοςΑγ" + - "ία ΛουκίαΛιχτενστάινΣρι ΛάνκαΛιβερίαΛεσότοΛιθουανίαΛουξεμβούργοΛετονίαΛ" + - "ιβύηΜαρόκοΜονακόΜολδαβίαΜαυροβούνιοΆγιος Μαρτίνος (Γαλλικό τμήμα)Μαδαγα" + - "σκάρηΝήσοι ΜάρσαλΠρώην Γιουγκοσλαβική Δημοκρατία της ΜακεδονίαςΜάλιΜιαν" + - "μάρ/ΒιρμανίαΜογγολίαΜακάο ΕΔΠ ΚίναςΝήσοι Βόρειες ΜαριάνεςΜαρτινίκαΜαυρι" + - "τανίαΜονσεράτΜάλταΜαυρίκιοςΜαλδίβεςΜαλάουιΜεξικόΜαλαισίαΜοζαμβίκηΝαμίμπ" + - "ιαΝέα ΚαληδονίαΝίγηραςΝήσος ΝόρφολκΝιγηρίαΝικαράγουαΟλλανδίαΝορβηγίαΝεπ" + - "άλΝαουρούΝιούεΝέα ΖηλανδίαΟμάνΠαναμάςΠερούΓαλλική ΠολυνησίαΠαπούα Νέα Γ" + - "ουινέαΦιλιππίνεςΠακιστάνΠολωνίαΣεν Πιερ και ΜικελόνΝήσοι ΠίτκερνΠουέρτο" + - " ΡίκοΠαλαιστινιακά ΕδάφηΠορτογαλίαΠαλάουΠαραγουάηΚατάρΠεριφερειακή Ωκεαν" + - "ίαΡεϊνιόνΡουμανίαΣερβίαΡωσίαΡουάνταΣαουδική ΑραβίαΝήσοι ΣολομώντοςΣεϋχέ" + - "λλεςΣουδάνΣουηδίαΣιγκαπούρηΑγία ΕλένηΣλοβενίαΣβάλμπαρντ και Γιαν Μαγιέν" + - "ΣλοβακίαΣιέρα ΛεόνεΆγιος ΜαρίνοςΣενεγάληΣομαλίαΣουρινάμΝότιο ΣουδάνΣάο " + - "Τομέ και ΠρίνσιπεΕλ ΣαλβαδόρΆγιος Μαρτίνος (Ολλανδικό τμήμα)ΣυρίαΣουαζι" + - "λάνδηΤριστάν ντα ΚούνιαΝήσοι Τερκ και ΚάικοςΤσαντΓαλλικές περιοχές του " + - "νοτίου ημισφαιρίουΤόγκοΤαϊλάνδηΤατζικιστάνΤοκελάουΤιμόρ-ΛέστεΤουρκμενισ" + - "τάνΤυνησίαΤόνγκαΤουρκίαΤρινιντάντ και ΤομπάγκοΤουβαλούΤαϊβάνΤανζανίαΟυκ" + - "ρανίαΟυγκάνταΑπομακρυσμένες Νησίδες ΗΠΑΗνωμένα ΈθνηΗνωμένες ΠολιτείεςΟυ" + - "ρουγουάηΟυζμπεκιστάνΒατικανόΆγιος Βικέντιος και ΓρεναδίνεςΒενεζουέλαΒρε" + - "τανικές Παρθένοι ΝήσοιΑμερικανικές Παρθένοι ΝήσοιΒιετνάμΒανουάτουΟυάλις" + - " και ΦουτούναΣαμόαΚόσοβοΥεμένηΜαγιότΝότια ΑφρικήΖάμπιαΖιμπάμπουεΆγνωστη " + - "περιοχήΚόσμοςΑφρικήΒόρεια ΑμερικήΝότια ΑμερικήΩκεανίαΔυτική ΑφρικήΚεντρ" + - "ική ΑμερικήΑνατολική ΑφρικήΒόρεια ΑφρικήΜέση ΑφρικήΝότιος ΑφρικήΑμερική" + - "Βόρειος ΑμερικήΚαραϊβικήΑνατολική ΑσίαΝότια ΑσίαΝοτιοανατολική ΑσίαΝότι" + - "α ΕυρώπηΑυστραλασίαΜελανησίαΠεριοχή ΜικρονησίαςΠολυνησίαΑσίαΚεντρική Ασ" + - "ίαΔυτική ΑσίαΕυρώπηΑνατολική ΕυρώπηΒόρεια ΕυρώπηΔυτική ΕυρώπηΛατινική Α" + - "μερική" - -var elRegionIdx = []uint16{ // 292 elements + "εχίαΓερμανίαΝτιέγκο ΓκαρσίαΤζιμπουτίΔανίαΝτομίνικαΔομινικανή Δημοκρατία" + + "ΑλγερίαΘέουτα και ΜελίγιαΙσημερινόςΕσθονίαΑίγυπτοςΔυτική ΣαχάραΕρυθραία" + + "ΙσπανίαΑιθιοπίαΕυρωπαϊκή ΈνωσηΕυρωζώνηΦινλανδίαΦίτζιΝήσοι ΦόκλαντΜικρον" + + "ησίαΝήσοι ΦερόεςΓαλλίαΓκαμπόνΗνωμένο ΒασίλειοΓρενάδαΓεωργίαΓαλλική Γουι" + + "άναΓκέρνζιΓκάναΓιβραλτάρΓροιλανδίαΓκάμπιαΓουινέαΓουαδελούπηΙσημερινή Γο" + + "υινέαΕλλάδαΝήσοι Νότια Γεωργία και Νότιες ΣάντουιτςΓουατεμάλαΓκουάμΓουι" + + "νέα ΜπισάουΓουιάναΧονγκ Κονγκ ΕΔΠ ΚίναςΝήσοι Χερντ και ΜακντόναλντΟνδού" + + "ραΚροατίαΑϊτήΟυγγαρίαΚανάριοι ΝήσοιΙνδονησίαΙρλανδίαΙσραήλΝήσος του Μαν" + + "ΙνδίαΒρετανικά Εδάφη Ινδικού ΩκεανούΙράκΙράνΙσλανδίαΙταλίαΤζέρζιΤζαμάικ" + + "αΙορδανίαΙαπωνίαΚένυαΚιργιστάνΚαμπότζηΚιριμπάτιΚομόρεςΣεν Κιτς και Νέβι" + + "ςΒόρεια ΚορέαΝότια ΚορέαΚουβέιτΝήσοι ΚέιμανΚαζακστάνΛάοςΛίβανοςΑγία Λου" + + "κίαΛιχτενστάινΣρι ΛάνκαΛιβερίαΛεσότοΛιθουανίαΛουξεμβούργοΛετονίαΛιβύηΜα" + + "ρόκοΜονακόΜολδαβίαΜαυροβούνιοΆγιος Μαρτίνος (Γαλλικό τμήμα)ΜαδαγασκάρηΝ" + + "ήσοι ΜάρσαλΠρώην Γιουγκοσλαβική Δημοκρατία της ΜακεδονίαςΜάλιΜιανμάρ (Β" + + "ιρμανία)ΜογγολίαΜακάο ΕΔΠ ΚίναςΝήσοι Βόρειες ΜαριάνεςΜαρτινίκαΜαυριτανί" + + "αΜονσεράτΜάλταΜαυρίκιοςΜαλδίβεςΜαλάουιΜεξικόΜαλαισίαΜοζαμβίκηΝαμίμπιαΝέ" + + "α ΚαληδονίαΝίγηραςΝήσος ΝόρφολκΝιγηρίαΝικαράγουαΟλλανδίαΝορβηγίαΝεπάλΝα" + + "ουρούΝιούεΝέα ΖηλανδίαΟμάνΠαναμάςΠερούΓαλλική ΠολυνησίαΠαπούα Νέα Γουιν" + + "έαΦιλιππίνεςΠακιστάνΠολωνίαΣεν Πιερ και ΜικελόνΝήσοι ΠίτκερνΠουέρτο Ρίκ" + + "οΠαλαιστινιακά ΕδάφηΠορτογαλίαΠαλάουΠαραγουάηΚατάρΠεριφερειακή ΩκεανίαΡ" + + "εϊνιόνΡουμανίαΣερβίαΡωσίαΡουάνταΣαουδική ΑραβίαΝήσοι ΣολομώντοςΣεϋχέλλε" + + "ςΣουδάνΣουηδίαΣιγκαπούρηΑγία ΕλένηΣλοβενίαΣβάλμπαρντ και Γιαν ΜαγιένΣλο" + + "βακίαΣιέρα ΛεόνεΆγιος ΜαρίνοςΣενεγάληΣομαλίαΣουρινάμΝότιο ΣουδάνΣάο Τομ" + + "έ και ΠρίνσιπεΕλ ΣαλβαδόρΆγιος Μαρτίνος (Ολλανδικό τμήμα)ΣυρίαΣουαζιλάν" + + "δηΤριστάν ντα ΚούνιαΝήσοι Τερκς και ΚάικοςΤσαντΓαλλικές περιοχές του νο" + + "τίου ημισφαιρίουΤόγκοΤαϊλάνδηΤατζικιστάνΤοκελάουΤιμόρ-ΛέστεΤουρκμενιστά" + + "νΤυνησίαΤόνγκαΤουρκίαΤρινιντάντ και ΤομπάγκοΤουβαλούΤαϊβάνΤανζανίαΟυκρα" + + "νίαΟυγκάνταΑπομακρυσμένες Νησίδες ΗΠΑΗνωμένα ΈθνηΗνωμένες ΠολιτείεςΟυρο" + + "υγουάηΟυζμπεκιστάνΒατικανόΆγιος Βικέντιος και ΓρεναδίνεςΒενεζουέλαΒρετα" + + "νικές Παρθένες ΝήσοιΑμερικανικές Παρθένες ΝήσοιΒιετνάμΒανουάτουΟυάλις κ" + + "αι ΦουτούναΣαμόαΚοσσυφοπέδιοΥεμένηΜαγιότΝότια ΑφρικήΖάμπιαΖιμπάμπουεΆγν" + + "ωστη περιοχήΚόσμοςΑφρικήΒόρεια ΑμερικήΝότια ΑμερικήΩκεανίαΔυτική Αφρική" + + "Κεντρική ΑμερικήΑνατολική ΑφρικήΒόρεια ΑφρικήΜέση ΑφρικήΝότιος ΑφρικήΑμ" + + "ερικήΒόρειος ΑμερικήΚαραϊβικήΑνατολική ΑσίαΝότια ΑσίαΝοτιοανατολική Ασί" + + "αΝότια ΕυρώπηΑυστραλασίαΜελανησίαΠεριοχή ΜικρονησίαςΠολυνησίαΑσίαΚεντρι" + + "κή ΑσίαΔυτική ΑσίαΕυρώπηΑνατολική ΕυρώπηΒόρεια ΕυρώπηΔυτική ΕυρώπηΛατιν" + + "ική Αμερική" + +var elRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x001b, 0x0027, 0x0053, 0x0067, 0x0097, 0x00a9, 0x00b7, - 0x00c5, 0x00d3, 0x00e7, 0x00f9, 0x011a, 0x0128, 0x013a, 0x0148, - 0x015d, 0x0175, 0x0198, 0x01ae, 0x01c6, 0x01d2, 0x01ed, 0x01ff, + 0x00c5, 0x00d1, 0x00e5, 0x00f7, 0x0118, 0x0126, 0x0138, 0x0146, + 0x015b, 0x0173, 0x0196, 0x01ae, 0x01c6, 0x01d2, 0x01ed, 0x01ff, 0x020f, 0x0223, 0x022f, 0x0252, 0x0264, 0x0274, 0x0282, 0x02a7, 0x02b7, 0x02c7, 0x02d5, 0x02ec, 0x0300, 0x0314, 0x0320, 0x032e, 0x0354, 0x0371, 0x03a6, 0x03c7, 0x03d5, 0x03f6, 0x0409, 0x0411, 0x0421, 0x0429, 0x0439, 0x0456, 0x0469, 0x0473, 0x0494, 0x04a4, - 0x04d0, 0x04dc, 0x04ff, 0x050f, 0x052c, 0x053e, 0x0548, 0x055a, + 0x04d0, 0x04dc, 0x04e8, 0x04f8, 0x0515, 0x0527, 0x0531, 0x0543, // Entry 40 - 7F - 0x0583, 0x0591, 0x05b1, 0x05c1, 0x05cf, 0x05df, 0x05f8, 0x0608, - 0x0616, 0x0626, 0x0643, 0x0643, 0x0655, 0x065f, 0x0678, 0x068c, - 0x06a3, 0x06af, 0x06bd, 0x06dc, 0x06ea, 0x06f8, 0x0715, 0x0723, - 0x072d, 0x073f, 0x0753, 0x0761, 0x076f, 0x0785, 0x07a6, 0x07b2, - 0x07fd, 0x0811, 0x081d, 0x083a, 0x0848, 0x086f, 0x08a2, 0x08b0, - 0x08be, 0x08c6, 0x08d6, 0x08f1, 0x0903, 0x0913, 0x091f, 0x0930, - 0x093a, 0x0975, 0x097d, 0x0985, 0x0995, 0x09a1, 0x09ad, 0x09bd, - 0x09cd, 0x09db, 0x09e5, 0x09f7, 0x0a07, 0x0a19, 0x0a27, 0x0a5a, + 0x056c, 0x057a, 0x059c, 0x05b0, 0x05be, 0x05ce, 0x05e7, 0x05f7, + 0x0605, 0x0615, 0x0632, 0x0642, 0x0654, 0x065e, 0x0677, 0x068b, + 0x06a2, 0x06ae, 0x06bc, 0x06db, 0x06e9, 0x06f7, 0x0714, 0x0722, + 0x072c, 0x073e, 0x0752, 0x0760, 0x076e, 0x0784, 0x07a5, 0x07b1, + 0x07fc, 0x0810, 0x081c, 0x0839, 0x0847, 0x086e, 0x08a1, 0x08af, + 0x08bd, 0x08c5, 0x08d5, 0x08f0, 0x0902, 0x0912, 0x091e, 0x0936, + 0x0940, 0x097b, 0x0983, 0x098b, 0x099b, 0x09a7, 0x09b3, 0x09c3, + 0x09d3, 0x09e1, 0x09eb, 0x09fd, 0x0a0d, 0x0a1f, 0x0a2d, 0x0a4e, // Entry 80 - BF - 0x0a71, 0x0a86, 0x0a94, 0x0aab, 0x0abd, 0x0ac5, 0x0ad3, 0x0ae8, - 0x0afe, 0x0b0f, 0x0b1d, 0x0b29, 0x0b3b, 0x0b53, 0x0b61, 0x0b6b, - 0x0b77, 0x0b83, 0x0b93, 0x0ba9, 0x0be0, 0x0bf6, 0x0c0d, 0x0c65, - 0x0c6d, 0x0c8c, 0x0c9c, 0x0cb8, 0x0ce2, 0x0cf4, 0x0d08, 0x0d18, - 0x0d22, 0x0d34, 0x0d44, 0x0d52, 0x0d5e, 0x0d6e, 0x0d80, 0x0d90, - 0x0da9, 0x0db7, 0x0dd0, 0x0dde, 0x0df2, 0x0e02, 0x0e12, 0x0e1c, - 0x0e2a, 0x0e34, 0x0e4b, 0x0e53, 0x0e61, 0x0e6b, 0x0e8c, 0x0eae, - 0x0ec2, 0x0ed2, 0x0ee0, 0x0f05, 0x0f1e, 0x0f35, 0x0f5a, 0x0f6e, + 0x0a65, 0x0a7a, 0x0a88, 0x0a9f, 0x0ab1, 0x0ab9, 0x0ac7, 0x0adc, + 0x0af2, 0x0b03, 0x0b11, 0x0b1d, 0x0b2f, 0x0b47, 0x0b55, 0x0b5f, + 0x0b6b, 0x0b77, 0x0b87, 0x0b9d, 0x0bd4, 0x0bea, 0x0c01, 0x0c59, + 0x0c61, 0x0c82, 0x0c92, 0x0cae, 0x0cd8, 0x0cea, 0x0cfe, 0x0d0e, + 0x0d18, 0x0d2a, 0x0d3a, 0x0d48, 0x0d54, 0x0d64, 0x0d76, 0x0d86, + 0x0d9f, 0x0dad, 0x0dc6, 0x0dd4, 0x0de8, 0x0df8, 0x0e08, 0x0e12, + 0x0e20, 0x0e2a, 0x0e41, 0x0e49, 0x0e57, 0x0e61, 0x0e82, 0x0ea4, + 0x0eb8, 0x0ec8, 0x0ed6, 0x0efb, 0x0f14, 0x0f2b, 0x0f50, 0x0f64, // Entry C0 - FF - 0x0f7a, 0x0f8c, 0x0f96, 0x0fbd, 0x0fcb, 0x0fdb, 0x0fe7, 0x0ff1, - 0x0fff, 0x101c, 0x103b, 0x104d, 0x1059, 0x1067, 0x107b, 0x108e, - 0x109e, 0x10cf, 0x10df, 0x10f4, 0x110d, 0x111d, 0x112b, 0x113b, - 0x1152, 0x1179, 0x118e, 0x11c9, 0x11d3, 0x11e9, 0x120b, 0x1232, - 0x123c, 0x1288, 0x1292, 0x12a2, 0x12b8, 0x12c8, 0x12dd, 0x12f7, - 0x1305, 0x1311, 0x131f, 0x134b, 0x135b, 0x1367, 0x1377, 0x1387, - 0x1397, 0x13c9, 0x13e0, 0x1403, 0x1417, 0x142f, 0x143f, 0x1478, - 0x148c, 0x14bc, 0x14f0, 0x14fe, 0x1510, 0x1534, 0x153e, 0x154a, + 0x0f70, 0x0f82, 0x0f8c, 0x0fb3, 0x0fc1, 0x0fd1, 0x0fdd, 0x0fe7, + 0x0ff5, 0x1012, 0x1031, 0x1043, 0x104f, 0x105d, 0x1071, 0x1084, + 0x1094, 0x10c5, 0x10d5, 0x10ea, 0x1103, 0x1113, 0x1121, 0x1131, + 0x1148, 0x116f, 0x1184, 0x11bf, 0x11c9, 0x11df, 0x1201, 0x122a, + 0x1234, 0x1280, 0x128a, 0x129a, 0x12b0, 0x12c0, 0x12d5, 0x12ef, + 0x12fd, 0x1309, 0x1317, 0x1343, 0x1353, 0x135f, 0x136f, 0x137f, + 0x138f, 0x13c1, 0x13d8, 0x13fb, 0x140f, 0x1427, 0x1437, 0x1470, + 0x1484, 0x14b4, 0x14e8, 0x14f6, 0x1508, 0x152c, 0x1536, 0x154e, // Entry 100 - 13F - 0x1556, 0x1562, 0x1579, 0x1585, 0x1599, 0x15b6, 0x15c2, 0x15ce, - 0x15e9, 0x1602, 0x1610, 0x1629, 0x1648, 0x1667, 0x1680, 0x1695, - 0x16ae, 0x16bc, 0x16d9, 0x16eb, 0x1706, 0x1719, 0x173e, 0x1755, - 0x176b, 0x177d, 0x17a2, 0x17b4, 0x17bc, 0x17d5, 0x17ea, 0x17f6, - 0x1815, 0x182e, 0x1847, 0x1866, -} // Size: 608 bytes - -const enRegionStr string = "" + // Size: 2942 bytes + 0x155a, 0x1566, 0x157d, 0x1589, 0x159d, 0x15ba, 0x15c6, 0x15d2, + 0x15ed, 0x1606, 0x1614, 0x162d, 0x164c, 0x166b, 0x1684, 0x1699, + 0x16b2, 0x16c0, 0x16dd, 0x16ef, 0x170a, 0x171d, 0x1742, 0x1759, + 0x176f, 0x1781, 0x17a6, 0x17b8, 0x17c0, 0x17d9, 0x17ee, 0x17fa, + 0x1819, 0x1832, 0x184b, 0x184b, 0x186a, +} // Size: 610 bytes + +const enRegionStr string = "" + // Size: 2953 bytes "Ascension IslandAndorraUnited Arab EmiratesAfghanistanAntigua & BarbudaA" + "nguillaAlbaniaArmeniaAngolaAntarcticaArgentinaAmerican SamoaAustriaAustr" + "aliaArubaÅland IslandsAzerbaijanBosnia & HerzegovinaBarbadosBangladeshBe" + @@ -44379,41 +47089,41 @@ const enRegionStr string = "" + // Size: 2942 bytes "usBelizeCanadaCocos (Keeling) IslandsCongo - KinshasaCentral African Rep" + "ublicCongo - BrazzavilleSwitzerlandCôte d’IvoireCook IslandsChileCameroo" + "nChinaColombiaClipperton IslandCosta RicaCubaCape VerdeCuraçaoChristmas " + - "IslandCyprusCzech RepublicGermanyDiego GarciaDjiboutiDenmarkDominicaDomi" + - "nican RepublicAlgeriaCeuta & MelillaEcuadorEstoniaEgyptWestern SaharaEri" + - "treaSpainEthiopiaEuropean UnionEurozoneFinlandFijiFalkland IslandsMicron" + - "esiaFaroe IslandsFranceGabonUnited KingdomGrenadaGeorgiaFrench GuianaGue" + - "rnseyGhanaGibraltarGreenlandGambiaGuineaGuadeloupeEquatorial GuineaGreec" + - "eSouth Georgia & South Sandwich IslandsGuatemalaGuamGuinea-BissauGuyanaH" + - "ong Kong SAR ChinaHeard & McDonald IslandsHondurasCroatiaHaitiHungaryCan" + - "ary IslandsIndonesiaIrelandIsraelIsle of ManIndiaBritish Indian Ocean Te" + - "rritoryIraqIranIcelandItalyJerseyJamaicaJordanJapanKenyaKyrgyzstanCambod" + - "iaKiribatiComorosSt. Kitts & NevisNorth KoreaSouth KoreaKuwaitCayman Isl" + - "andsKazakhstanLaosLebanonSt. LuciaLiechtensteinSri LankaLiberiaLesothoLi" + - "thuaniaLuxembourgLatviaLibyaMoroccoMonacoMoldovaMontenegroSt. MartinMada" + - "gascarMarshall IslandsMacedoniaMaliMyanmar (Burma)MongoliaMacau SAR Chin" + - "aNorthern Mariana IslandsMartiniqueMauritaniaMontserratMaltaMauritiusMal" + - "divesMalawiMexicoMalaysiaMozambiqueNamibiaNew CaledoniaNigerNorfolk Isla" + - "ndNigeriaNicaraguaNetherlandsNorwayNepalNauruNiueNew ZealandOmanPanamaPe" + - "ruFrench PolynesiaPapua New GuineaPhilippinesPakistanPolandSt. Pierre & " + - "MiquelonPitcairn IslandsPuerto RicoPalestinian TerritoriesPortugalPalauP" + - "araguayQatarOutlying OceaniaRéunionRomaniaSerbiaRussiaRwandaSaudi Arabia" + - "Solomon IslandsSeychellesSudanSwedenSingaporeSt. HelenaSloveniaSvalbard " + - "& Jan MayenSlovakiaSierra LeoneSan MarinoSenegalSomaliaSurinameSouth Sud" + - "anSão Tomé & PríncipeEl SalvadorSint MaartenSyriaSwazilandTristan da Cun" + - "haTurks & Caicos IslandsChadFrench Southern TerritoriesTogoThailandTajik" + - "istanTokelauTimor-LesteTurkmenistanTunisiaTongaTurkeyTrinidad & TobagoTu" + - "valuTaiwanTanzaniaUkraineUgandaU.S. Outlying IslandsUnited NationsUnited" + - " StatesUruguayUzbekistanVatican CitySt. Vincent & GrenadinesVenezuelaBri" + - "tish Virgin IslandsU.S. Virgin IslandsVietnamVanuatuWallis & FutunaSamoa" + - "KosovoYemenMayotteSouth AfricaZambiaZimbabweUnknown RegionWorldAfricaNor" + - "th AmericaSouth AmericaOceaniaWestern AfricaCentral AmericaEastern Afric" + - "aNorthern AfricaMiddle AfricaSouthern AfricaAmericasNorthern AmericaCari" + - "bbeanEastern AsiaSouthern AsiaSoutheast AsiaSouthern EuropeAustralasiaMe" + - "lanesiaMicronesian RegionPolynesiaAsiaCentral AsiaWestern AsiaEuropeEast" + - "ern EuropeNorthern EuropeWestern EuropeLatin America" - -var enRegionIdx = []uint16{ // 292 elements + "IslandCyprusCzechiaGermanyDiego GarciaDjiboutiDenmarkDominicaDominican R" + + "epublicAlgeriaCeuta & MelillaEcuadorEstoniaEgyptWestern SaharaEritreaSpa" + + "inEthiopiaEuropean UnionEurozoneFinlandFijiFalkland IslandsMicronesiaFar" + + "oe IslandsFranceGabonUnited KingdomGrenadaGeorgiaFrench GuianaGuernseyGh" + + "anaGibraltarGreenlandGambiaGuineaGuadeloupeEquatorial GuineaGreeceSouth " + + "Georgia & South Sandwich IslandsGuatemalaGuamGuinea-BissauGuyanaHong Kon" + + "g SAR ChinaHeard & McDonald IslandsHondurasCroatiaHaitiHungaryCanary Isl" + + "andsIndonesiaIrelandIsraelIsle of ManIndiaBritish Indian Ocean Territory" + + "IraqIranIcelandItalyJerseyJamaicaJordanJapanKenyaKyrgyzstanCambodiaKirib" + + "atiComorosSt. Kitts & NevisNorth KoreaSouth KoreaKuwaitCayman IslandsKaz" + + "akhstanLaosLebanonSt. LuciaLiechtensteinSri LankaLiberiaLesothoLithuania" + + "LuxembourgLatviaLibyaMoroccoMonacoMoldovaMontenegroSt. MartinMadagascarM" + + "arshall IslandsMacedoniaMaliMyanmar (Burma)MongoliaMacau SAR ChinaNorthe" + + "rn Mariana IslandsMartiniqueMauritaniaMontserratMaltaMauritiusMaldivesMa" + + "lawiMexicoMalaysiaMozambiqueNamibiaNew CaledoniaNigerNorfolk IslandNiger" + + "iaNicaraguaNetherlandsNorwayNepalNauruNiueNew ZealandOmanPanamaPeruFrenc" + + "h PolynesiaPapua New GuineaPhilippinesPakistanPolandSt. Pierre & Miquelo" + + "nPitcairn IslandsPuerto RicoPalestinian TerritoriesPortugalPalauParaguay" + + "QatarOutlying OceaniaRéunionRomaniaSerbiaRussiaRwandaSaudi ArabiaSolomon" + + " IslandsSeychellesSudanSwedenSingaporeSt. HelenaSloveniaSvalbard & Jan M" + + "ayenSlovakiaSierra LeoneSan MarinoSenegalSomaliaSurinameSouth SudanSão T" + + "omé & PríncipeEl SalvadorSint MaartenSyriaSwazilandTristan da CunhaTurks" + + " & Caicos IslandsChadFrench Southern TerritoriesTogoThailandTajikistanTo" + + "kelauTimor-LesteTurkmenistanTunisiaTongaTurkeyTrinidad & TobagoTuvaluTai" + + "wanTanzaniaUkraineUgandaU.S. Outlying IslandsUnited NationsUnited States" + + "UruguayUzbekistanVatican CitySt. Vincent & GrenadinesVenezuelaBritish Vi" + + "rgin IslandsU.S. Virgin IslandsVietnamVanuatuWallis & FutunaSamoaKosovoY" + + "emenMayotteSouth AfricaZambiaZimbabweUnknown RegionWorldAfricaNorth Amer" + + "icaSouth AmericaOceaniaWestern AfricaCentral AmericaEastern AfricaNorthe" + + "rn AfricaMiddle AfricaSouthern AfricaAmericasNorthern AmericaCaribbeanEa" + + "stern AsiaSouthern AsiaSoutheast AsiaSouthern EuropeAustralasiaMelanesia" + + "Micronesian RegionPolynesiaAsiaCentral AsiaWestern AsiaEuropeEastern Eur" + + "opeNorthern EuropeWestern EuropeSub-Saharan AfricaLatin America" + +var enRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0010, 0x0017, 0x002b, 0x0036, 0x0047, 0x004f, 0x0056, 0x005d, 0x0063, 0x006d, 0x0076, 0x0084, 0x008b, 0x0094, 0x0099, @@ -44422,222 +47132,273 @@ var enRegionIdx = []uint16{ // 292 elements 0x0143, 0x014a, 0x0150, 0x015d, 0x0165, 0x016c, 0x0172, 0x0178, 0x018f, 0x019f, 0x01b7, 0x01ca, 0x01d5, 0x01e5, 0x01f1, 0x01f6, 0x01fe, 0x0203, 0x020b, 0x021c, 0x0226, 0x022a, 0x0234, 0x023c, - 0x024c, 0x0252, 0x0260, 0x0267, 0x0273, 0x027b, 0x0282, 0x028a, + 0x024c, 0x0252, 0x0259, 0x0260, 0x026c, 0x0274, 0x027b, 0x0283, // Entry 40 - 7F - 0x029c, 0x02a3, 0x02b2, 0x02b9, 0x02c0, 0x02c5, 0x02d3, 0x02da, - 0x02df, 0x02e7, 0x02f5, 0x02fd, 0x0304, 0x0308, 0x0318, 0x0322, - 0x032f, 0x0335, 0x033a, 0x0348, 0x034f, 0x0356, 0x0363, 0x036b, - 0x0370, 0x0379, 0x0382, 0x0388, 0x038e, 0x0398, 0x03a9, 0x03af, - 0x03d5, 0x03de, 0x03e2, 0x03ef, 0x03f5, 0x0408, 0x0420, 0x0428, - 0x042f, 0x0434, 0x043b, 0x0449, 0x0452, 0x0459, 0x045f, 0x046a, - 0x046f, 0x048d, 0x0491, 0x0495, 0x049c, 0x04a1, 0x04a7, 0x04ae, - 0x04b4, 0x04b9, 0x04be, 0x04c8, 0x04d0, 0x04d8, 0x04df, 0x04f0, + 0x0295, 0x029c, 0x02ab, 0x02b2, 0x02b9, 0x02be, 0x02cc, 0x02d3, + 0x02d8, 0x02e0, 0x02ee, 0x02f6, 0x02fd, 0x0301, 0x0311, 0x031b, + 0x0328, 0x032e, 0x0333, 0x0341, 0x0348, 0x034f, 0x035c, 0x0364, + 0x0369, 0x0372, 0x037b, 0x0381, 0x0387, 0x0391, 0x03a2, 0x03a8, + 0x03ce, 0x03d7, 0x03db, 0x03e8, 0x03ee, 0x0401, 0x0419, 0x0421, + 0x0428, 0x042d, 0x0434, 0x0442, 0x044b, 0x0452, 0x0458, 0x0463, + 0x0468, 0x0486, 0x048a, 0x048e, 0x0495, 0x049a, 0x04a0, 0x04a7, + 0x04ad, 0x04b2, 0x04b7, 0x04c1, 0x04c9, 0x04d1, 0x04d8, 0x04e9, // Entry 80 - BF - 0x04fb, 0x0506, 0x050c, 0x051a, 0x0524, 0x0528, 0x052f, 0x0538, - 0x0545, 0x054e, 0x0555, 0x055c, 0x0565, 0x056f, 0x0575, 0x057a, - 0x0581, 0x0587, 0x058e, 0x0598, 0x05a2, 0x05ac, 0x05bc, 0x05c5, - 0x05c9, 0x05d8, 0x05e0, 0x05ef, 0x0607, 0x0611, 0x061b, 0x0625, - 0x062a, 0x0633, 0x063b, 0x0641, 0x0647, 0x064f, 0x0659, 0x0660, - 0x066d, 0x0672, 0x0680, 0x0687, 0x0690, 0x069b, 0x06a1, 0x06a6, - 0x06ab, 0x06af, 0x06ba, 0x06be, 0x06c4, 0x06c8, 0x06d8, 0x06e8, - 0x06f3, 0x06fb, 0x0701, 0x0716, 0x0726, 0x0731, 0x0748, 0x0750, + 0x04f4, 0x04ff, 0x0505, 0x0513, 0x051d, 0x0521, 0x0528, 0x0531, + 0x053e, 0x0547, 0x054e, 0x0555, 0x055e, 0x0568, 0x056e, 0x0573, + 0x057a, 0x0580, 0x0587, 0x0591, 0x059b, 0x05a5, 0x05b5, 0x05be, + 0x05c2, 0x05d1, 0x05d9, 0x05e8, 0x0600, 0x060a, 0x0614, 0x061e, + 0x0623, 0x062c, 0x0634, 0x063a, 0x0640, 0x0648, 0x0652, 0x0659, + 0x0666, 0x066b, 0x0679, 0x0680, 0x0689, 0x0694, 0x069a, 0x069f, + 0x06a4, 0x06a8, 0x06b3, 0x06b7, 0x06bd, 0x06c1, 0x06d1, 0x06e1, + 0x06ec, 0x06f4, 0x06fa, 0x070f, 0x071f, 0x072a, 0x0741, 0x0749, // Entry C0 - FF - 0x0755, 0x075d, 0x0762, 0x0772, 0x077a, 0x0781, 0x0787, 0x078d, - 0x0793, 0x079f, 0x07ae, 0x07b8, 0x07bd, 0x07c3, 0x07cc, 0x07d6, - 0x07de, 0x07f2, 0x07fa, 0x0806, 0x0810, 0x0817, 0x081e, 0x0826, - 0x0831, 0x0847, 0x0852, 0x085e, 0x0863, 0x086c, 0x087c, 0x0892, - 0x0896, 0x08b1, 0x08b5, 0x08bd, 0x08c7, 0x08ce, 0x08d9, 0x08e5, - 0x08ec, 0x08f1, 0x08f7, 0x0908, 0x090e, 0x0914, 0x091c, 0x0923, - 0x0929, 0x093e, 0x094c, 0x0959, 0x0960, 0x096a, 0x0976, 0x098e, - 0x0997, 0x09ad, 0x09c0, 0x09c7, 0x09ce, 0x09dd, 0x09e2, 0x09e8, + 0x074e, 0x0756, 0x075b, 0x076b, 0x0773, 0x077a, 0x0780, 0x0786, + 0x078c, 0x0798, 0x07a7, 0x07b1, 0x07b6, 0x07bc, 0x07c5, 0x07cf, + 0x07d7, 0x07eb, 0x07f3, 0x07ff, 0x0809, 0x0810, 0x0817, 0x081f, + 0x082a, 0x0840, 0x084b, 0x0857, 0x085c, 0x0865, 0x0875, 0x088b, + 0x088f, 0x08aa, 0x08ae, 0x08b6, 0x08c0, 0x08c7, 0x08d2, 0x08de, + 0x08e5, 0x08ea, 0x08f0, 0x0901, 0x0907, 0x090d, 0x0915, 0x091c, + 0x0922, 0x0937, 0x0945, 0x0952, 0x0959, 0x0963, 0x096f, 0x0987, + 0x0990, 0x09a6, 0x09b9, 0x09c0, 0x09c7, 0x09d6, 0x09db, 0x09e1, // Entry 100 - 13F - 0x09ed, 0x09f4, 0x0a00, 0x0a06, 0x0a0e, 0x0a1c, 0x0a21, 0x0a27, - 0x0a34, 0x0a41, 0x0a48, 0x0a56, 0x0a65, 0x0a73, 0x0a82, 0x0a8f, - 0x0a9e, 0x0aa6, 0x0ab6, 0x0abf, 0x0acb, 0x0ad8, 0x0ae6, 0x0af5, - 0x0b00, 0x0b09, 0x0b1b, 0x0b24, 0x0b28, 0x0b34, 0x0b40, 0x0b46, - 0x0b54, 0x0b63, 0x0b71, 0x0b7e, -} // Size: 608 bytes - -const esRegionStr string = "" + // Size: 3106 bytes + 0x09e6, 0x09ed, 0x09f9, 0x09ff, 0x0a07, 0x0a15, 0x0a1a, 0x0a20, + 0x0a2d, 0x0a3a, 0x0a41, 0x0a4f, 0x0a5e, 0x0a6c, 0x0a7b, 0x0a88, + 0x0a97, 0x0a9f, 0x0aaf, 0x0ab8, 0x0ac4, 0x0ad1, 0x0adf, 0x0aee, + 0x0af9, 0x0b02, 0x0b14, 0x0b1d, 0x0b21, 0x0b2d, 0x0b39, 0x0b3f, + 0x0b4d, 0x0b5c, 0x0b6a, 0x0b7c, 0x0b89, +} // Size: 610 bytes + +const enGBRegionStr string = "" + // Size: 135 bytes + "St BarthélemySt Kitts & NevisSt LuciaSt MartinSt Pierre & MiquelonSt Hel" + + "enaUS Outlying IslandsSt Vincent & GrenadinesUS Virgin Islands" + +var enGBRegionIdx = []uint16{ // 251 elements + // Entry 0 - 3F + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + // Entry 40 - 7F + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, + 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x001e, + // Entry 80 - BF + 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x0026, + 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, 0x0026, + 0x0026, 0x0026, 0x0026, 0x0026, 0x002f, 0x002f, 0x002f, 0x002f, + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, + 0x002f, 0x002f, 0x002f, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, + // Entry C0 - FF + 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, + 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x004c, + 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, + 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, + 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, + 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, 0x004c, + 0x004c, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x005f, 0x0076, + 0x0076, 0x0076, 0x0087, +} // Size: 526 bytes + +const esRegionStr string = "" + // Size: 3122 bytes "Isla de la AscensiónAndorraEmiratos Árabes UnidosAfganistánAntigua y Bar" + "budaAnguilaAlbaniaArmeniaAngolaAntártidaArgentinaSamoa AmericanaAustriaA" + - "ustraliaArubaIslas ÅlandAzerbaiyánBosnia-HerzegovinaBarbadosBangladésBél" + - "gicaBurkina FasoBulgariaBaréinBurundiBenínSan BartoloméBermudasBrunéiBol" + - "iviaCaribe neerlandésBrasilBahamasButánIsla BouvetBotsuanaBielorrusiaBel" + - "iceCanadáIslas CocosRepública Democrática del CongoRepública Centroafric" + - "anaRepública del CongoSuizaCôte d’IvoireIslas CookChileCamerúnChinaColom" + - "biaIsla ClippertonCosta RicaCubaCabo VerdeCurazaoIsla de NavidadChipreRe" + - "pública ChecaAlemaniaDiego GarcíaYibutiDinamarcaDominicaRepública Domini" + - "canaArgeliaCeuta y MelillaEcuadorEstoniaEgiptoSáhara OccidentalEritreaEs" + - "pañaEtiopíaUnión EuropeaFinlandiaFiyiIslas MalvinasMicronesiaIslas Feroe" + - "FranciaGabónReino UnidoGranadaGeorgiaGuayana FrancesaGuerneseyGhanaGibra" + - "ltarGroenlandiaGambiaGuineaGuadalupeGuinea EcuatorialGreciaIslas Georgia" + - " del Sur y Sandwich del SurGuatemalaGuamGuinea-BisáuGuyanaRAE de Hong Ko" + - "ng (China)Islas Heard y McDonaldHondurasCroaciaHaitíHungríaCanariasIndon" + - "esiaIrlandaIsraelIsla de ManIndiaTerritorio Británico del Océano ÍndicoI" + - "rakIránIslandiaItaliaJerseyJamaicaJordaniaJapónKeniaKirguistánCamboyaKir" + - "ibatiComorasSan Cristóbal y NievesCorea del NorteCorea del SurKuwaitIsla" + - "s CaimánKazajistánLaosLíbanoSanta LucíaLiechtensteinSri LankaLiberiaLeso" + - "toLituaniaLuxemburgoLetoniaLibiaMarruecosMónacoMoldaviaMontenegroSan Mar" + - "tínMadagascarIslas MarshallMacedoniaMaliMyanmar (Birmania)MongoliaRAE de" + - " Macao (China)Islas Marianas del NorteMartinicaMauritaniaMontserratMalta" + - "MauricioMaldivasMalauiMéxicoMalasiaMozambiqueNamibiaNueva CaledoniaNíger" + - "Isla NorfolkNigeriaNicaraguaPaíses BajosNoruegaNepalNauruNiueNueva Zelan" + - "daOmánPanamáPerúPolinesia FrancesaPapúa Nueva GuineaFilipinasPakistánPol" + - "oniaSan Pedro y MiquelónIslas PitcairnPuerto RicoTerritorios PalestinosP" + - "ortugalPalaosParaguayCatarTerritorios alejados de OceaníaReuniónRumaníaS" + - "erbiaRusiaRuandaArabia SaudíIslas SalomónSeychellesSudánSueciaSingapurSa" + - "nta ElenaEsloveniaSvalbard y Jan MayenEslovaquiaSierra LeonaSan MarinoSe" + - "negalSomaliaSurinamSudán del SurSanto Tomé y PríncipeEl SalvadorSint Maa" + - "rtenSiriaSuazilandiaTristán de AcuñaIslas Turcas y CaicosChadTerritorios" + - " Australes FrancesesTogoTailandiaTayikistánTokelauTimor-LesteTurkmenistá" + - "nTúnezTongaTurquíaTrinidad y TobagoTuvaluTaiwánTanzaniaUcraniaUgandaIsla" + - "s menores alejadas de EE. UU.Estados UnidosUruguayUzbekistánCiudad del V" + - "aticanoSan Vicente y las GranadinasVenezuelaIslas Vírgenes BritánicasIsl" + - "as Vírgenes de EE. UU.VietnamVanuatuWallis y FutunaSamoaKosovoYemenMayot" + - "teSudáfricaZambiaZimbabueRegión desconocidaMundoÁfricaAmérica del NorteS" + - "udaméricaOceaníaÁfrica occidentalCentroaméricaÁfrica orientalÁfrica sept" + - "entrionalÁfrica centralÁfrica meridionalAméricaNorteaméricaCaribeAsia or" + - "ientalAsia meridionalSudeste asiáticoEuropa meridionalAustralasiaMelanes" + - "iaRegión de MicronesiaPolinesiaAsiaAsia centralAsia occidentalEuropaEuro" + - "pa orientalEuropa septentrionalEuropa occidentalLatinoamérica" - -var esRegionIdx = []uint16{ // 292 elements + "ustraliaArubaIslas ÅlandAzerbaiyánBosnia y HerzegovinaBarbadosBangladésB" + + "élgicaBurkina FasoBulgariaBaréinBurundiBenínSan BartoloméBermudasBrunéi" + + "BoliviaCaribe neerlandésBrasilBahamasButánIsla BouvetBotsuanaBielorrusia" + + "BeliceCanadáIslas CocosRepública Democrática del CongoRepública Centroaf" + + "ricanaRepública del CongoSuizaCôte d’IvoireIslas CookChileCamerúnChinaCo" + + "lombiaIsla ClippertonCosta RicaCubaCabo VerdeCurazaoIsla de NavidadChipr" + + "eChequiaAlemaniaDiego GarcíaYibutiDinamarcaDominicaRepública DominicanaA" + + "rgeliaCeuta y MelillaEcuadorEstoniaEgiptoSáhara OccidentalEritreaEspañaE" + + "tiopíaUnión Europeazona euroFinlandiaFiyiIslas MalvinasMicronesiaIslas F" + + "eroeFranciaGabónReino UnidoGranadaGeorgiaGuayana FrancesaGuernseyGhanaGi" + + "braltarGroenlandiaGambiaGuineaGuadalupeGuinea EcuatorialGreciaIslas Geor" + + "gia del Sur y Sandwich del SurGuatemalaGuamGuinea-BisáuGuyanaRAE de Hong" + + " Kong (China)Islas Heard y McDonaldHondurasCroaciaHaitíHungríaCanariasIn" + + "donesiaIrlandaIsraelIsla de ManIndiaTerritorio Británico del Océano Índi" + + "coIrakIránIslandiaItaliaJerseyJamaicaJordaniaJapónKeniaKirguistánCamboya" + + "KiribatiComorasSan Cristóbal y NievesCorea del NorteCorea del SurKuwaitI" + + "slas CaimánKazajistánLaosLíbanoSanta LucíaLiechtensteinSri LankaLiberiaL" + + "esotoLituaniaLuxemburgoLetoniaLibiaMarruecosMónacoMoldaviaMontenegroSan " + + "MartínMadagascarIslas MarshallMacedoniaMaliMyanmar (Birmania)MongoliaRAE" + + " de Macao (China)Islas Marianas del NorteMartinicaMauritaniaMontserratMa" + + "ltaMauricioMaldivasMalauiMéxicoMalasiaMozambiqueNamibiaNueva CaledoniaNí" + + "gerIsla NorfolkNigeriaNicaraguaPaíses BajosNoruegaNepalNauruNiueNueva Ze" + + "landaOmánPanamáPerúPolinesia FrancesaPapúa Nueva GuineaFilipinasPakistán" + + "PoloniaSan Pedro y MiquelónIslas PitcairnPuerto RicoTerritorios Palestin" + + "osPortugalPalaosParaguayCatarTerritorios alejados de OceaníaReuniónRuman" + + "íaSerbiaRusiaRuandaArabia SaudíIslas SalomónSeychellesSudánSueciaSingap" + + "urSanta ElenaEsloveniaSvalbard y Jan MayenEslovaquiaSierra LeonaSan Mari" + + "noSenegalSomaliaSurinamSudán del SurSanto Tomé y PríncipeEl SalvadorSint" + + " MaartenSiriaSuazilandiaTristán de AcuñaIslas Turcas y CaicosChadTerrito" + + "rios Australes FrancesesTogoTailandiaTayikistánTokelauTimor-LesteTurkmen" + + "istánTúnezTongaTurquíaTrinidad y TobagoTuvaluTaiwánTanzaniaUcraniaUganda" + + "Islas menores alejadas de EE. UU.Naciones UnidasEstados UnidosUruguayUzb" + + "ekistánCiudad del VaticanoSan Vicente y las GranadinasVenezuelaIslas Vír" + + "genes BritánicasIslas Vírgenes de EE. UU.VietnamVanuatuWallis y FutunaSa" + + "moaKosovoYemenMayotteSudáfricaZambiaZimbabueRegión desconocidaMundoÁfric" + + "aAmérica del NorteSudaméricaOceaníaÁfrica occidentalCentroaméricaÁfrica " + + "orientalÁfrica septentrionalÁfrica centralÁfrica meridionalAméricaNortea" + + "méricaCaribeAsia orientalAsia meridionalSudeste asiáticoEuropa meridiona" + + "lAustralasiaMelanesiaRegión de MicronesiaPolinesiaAsiaAsia centralAsia o" + + "ccidentalEuropaEuropa orientalEuropa septentrionalEuropa occidentalLatin" + + "oamérica" + +var esRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0015, 0x001c, 0x0033, 0x003e, 0x004f, 0x0056, 0x005d, 0x0064, 0x006a, 0x0074, 0x007d, 0x008c, 0x0093, 0x009c, 0x00a1, - 0x00ad, 0x00b8, 0x00ca, 0x00d2, 0x00dc, 0x00e4, 0x00f0, 0x00f8, - 0x00ff, 0x0106, 0x010c, 0x011a, 0x0122, 0x0129, 0x0130, 0x0142, - 0x0148, 0x014f, 0x0155, 0x0160, 0x0168, 0x0173, 0x0179, 0x0180, - 0x018b, 0x01ac, 0x01c5, 0x01d9, 0x01de, 0x01ee, 0x01f8, 0x01fd, - 0x0205, 0x020a, 0x0212, 0x0221, 0x022b, 0x022f, 0x0239, 0x0240, - 0x024f, 0x0255, 0x0265, 0x026d, 0x027a, 0x0280, 0x0289, 0x0291, + 0x00ad, 0x00b8, 0x00cc, 0x00d4, 0x00de, 0x00e6, 0x00f2, 0x00fa, + 0x0101, 0x0108, 0x010e, 0x011c, 0x0124, 0x012b, 0x0132, 0x0144, + 0x014a, 0x0151, 0x0157, 0x0162, 0x016a, 0x0175, 0x017b, 0x0182, + 0x018d, 0x01ae, 0x01c7, 0x01db, 0x01e0, 0x01f0, 0x01fa, 0x01ff, + 0x0207, 0x020c, 0x0214, 0x0223, 0x022d, 0x0231, 0x023b, 0x0242, + 0x0251, 0x0257, 0x025e, 0x0266, 0x0273, 0x0279, 0x0282, 0x028a, // Entry 40 - 7F - 0x02a6, 0x02ad, 0x02bc, 0x02c3, 0x02ca, 0x02d0, 0x02e2, 0x02e9, - 0x02f0, 0x02f8, 0x0306, 0x0306, 0x030f, 0x0313, 0x0321, 0x032b, - 0x0336, 0x033d, 0x0343, 0x034e, 0x0355, 0x035c, 0x036c, 0x0375, - 0x037a, 0x0383, 0x038e, 0x0394, 0x039a, 0x03a3, 0x03b4, 0x03ba, - 0x03e2, 0x03eb, 0x03ef, 0x03fc, 0x0402, 0x041a, 0x0430, 0x0438, - 0x043f, 0x0445, 0x044d, 0x0455, 0x045e, 0x0465, 0x046b, 0x0476, - 0x047b, 0x04a4, 0x04a8, 0x04ad, 0x04b5, 0x04bb, 0x04c1, 0x04c8, - 0x04d0, 0x04d6, 0x04db, 0x04e6, 0x04ed, 0x04f5, 0x04fc, 0x0513, + 0x029f, 0x02a6, 0x02b5, 0x02bc, 0x02c3, 0x02c9, 0x02db, 0x02e2, + 0x02e9, 0x02f1, 0x02ff, 0x0308, 0x0311, 0x0315, 0x0323, 0x032d, + 0x0338, 0x033f, 0x0345, 0x0350, 0x0357, 0x035e, 0x036e, 0x0376, + 0x037b, 0x0384, 0x038f, 0x0395, 0x039b, 0x03a4, 0x03b5, 0x03bb, + 0x03e3, 0x03ec, 0x03f0, 0x03fd, 0x0403, 0x041b, 0x0431, 0x0439, + 0x0440, 0x0446, 0x044e, 0x0456, 0x045f, 0x0466, 0x046c, 0x0477, + 0x047c, 0x04a5, 0x04a9, 0x04ae, 0x04b6, 0x04bc, 0x04c2, 0x04c9, + 0x04d1, 0x04d7, 0x04dc, 0x04e7, 0x04ee, 0x04f6, 0x04fd, 0x0514, // Entry 80 - BF - 0x0522, 0x052f, 0x0535, 0x0542, 0x054d, 0x0551, 0x0558, 0x0564, - 0x0571, 0x057a, 0x0581, 0x0587, 0x058f, 0x0599, 0x05a0, 0x05a5, - 0x05ae, 0x05b5, 0x05bd, 0x05c7, 0x05d2, 0x05dc, 0x05ea, 0x05f3, - 0x05f7, 0x0609, 0x0611, 0x0625, 0x063d, 0x0646, 0x0650, 0x065a, - 0x065f, 0x0667, 0x066f, 0x0675, 0x067c, 0x0683, 0x068d, 0x0694, - 0x06a3, 0x06a9, 0x06b5, 0x06bc, 0x06c5, 0x06d2, 0x06d9, 0x06de, - 0x06e3, 0x06e7, 0x06f4, 0x06f9, 0x0700, 0x0705, 0x0717, 0x072a, - 0x0733, 0x073c, 0x0743, 0x0758, 0x0766, 0x0771, 0x0787, 0x078f, + 0x0523, 0x0530, 0x0536, 0x0543, 0x054e, 0x0552, 0x0559, 0x0565, + 0x0572, 0x057b, 0x0582, 0x0588, 0x0590, 0x059a, 0x05a1, 0x05a6, + 0x05af, 0x05b6, 0x05be, 0x05c8, 0x05d3, 0x05dd, 0x05eb, 0x05f4, + 0x05f8, 0x060a, 0x0612, 0x0626, 0x063e, 0x0647, 0x0651, 0x065b, + 0x0660, 0x0668, 0x0670, 0x0676, 0x067d, 0x0684, 0x068e, 0x0695, + 0x06a4, 0x06aa, 0x06b6, 0x06bd, 0x06c6, 0x06d3, 0x06da, 0x06df, + 0x06e4, 0x06e8, 0x06f5, 0x06fa, 0x0701, 0x0706, 0x0718, 0x072b, + 0x0734, 0x073d, 0x0744, 0x0759, 0x0767, 0x0772, 0x0788, 0x0790, // Entry C0 - FF - 0x0795, 0x079d, 0x07a2, 0x07c2, 0x07ca, 0x07d2, 0x07d8, 0x07dd, - 0x07e3, 0x07f0, 0x07fe, 0x0808, 0x080e, 0x0814, 0x081c, 0x0827, - 0x0830, 0x0844, 0x084e, 0x085a, 0x0864, 0x086b, 0x0872, 0x0879, - 0x0887, 0x089e, 0x08a9, 0x08b5, 0x08ba, 0x08c5, 0x08d7, 0x08ec, - 0x08f0, 0x090f, 0x0913, 0x091c, 0x0927, 0x092e, 0x0939, 0x0946, - 0x094c, 0x0951, 0x0959, 0x096a, 0x0970, 0x0977, 0x097f, 0x0986, - 0x098c, 0x09ad, 0x09ad, 0x09bb, 0x09c2, 0x09cd, 0x09e0, 0x09fc, - 0x0a05, 0x0a20, 0x0a3a, 0x0a41, 0x0a48, 0x0a57, 0x0a5c, 0x0a62, + 0x0796, 0x079e, 0x07a3, 0x07c3, 0x07cb, 0x07d3, 0x07d9, 0x07de, + 0x07e4, 0x07f1, 0x07ff, 0x0809, 0x080f, 0x0815, 0x081d, 0x0828, + 0x0831, 0x0845, 0x084f, 0x085b, 0x0865, 0x086c, 0x0873, 0x087a, + 0x0888, 0x089f, 0x08aa, 0x08b6, 0x08bb, 0x08c6, 0x08d8, 0x08ed, + 0x08f1, 0x0910, 0x0914, 0x091d, 0x0928, 0x092f, 0x093a, 0x0947, + 0x094d, 0x0952, 0x095a, 0x096b, 0x0971, 0x0978, 0x0980, 0x0987, + 0x098d, 0x09ae, 0x09bd, 0x09cb, 0x09d2, 0x09dd, 0x09f0, 0x0a0c, + 0x0a15, 0x0a30, 0x0a4a, 0x0a51, 0x0a58, 0x0a67, 0x0a6c, 0x0a72, // Entry 100 - 13F - 0x0a67, 0x0a6e, 0x0a78, 0x0a7e, 0x0a86, 0x0a99, 0x0a9e, 0x0aa5, - 0x0ab7, 0x0ac2, 0x0aca, 0x0adc, 0x0aea, 0x0afa, 0x0b0f, 0x0b1e, - 0x0b30, 0x0b38, 0x0b45, 0x0b4b, 0x0b58, 0x0b67, 0x0b78, 0x0b89, - 0x0b94, 0x0b9d, 0x0bb2, 0x0bbb, 0x0bbf, 0x0bcb, 0x0bda, 0x0be0, - 0x0bef, 0x0c03, 0x0c14, 0x0c22, -} // Size: 608 bytes - -const es419RegionStr string = "" + // Size: 122 bytes - "Costa de MarfilIslas CanariasIslas UltramarinasTristán da CunhaTimor Ori" + - "entalIslas Ultramarinas de EE.UU.Asia sudoriental" - -var es419RegionIdx = []uint16{ // 279 elements + 0x0a77, 0x0a7e, 0x0a88, 0x0a8e, 0x0a96, 0x0aa9, 0x0aae, 0x0ab5, + 0x0ac7, 0x0ad2, 0x0ada, 0x0aec, 0x0afa, 0x0b0a, 0x0b1f, 0x0b2e, + 0x0b40, 0x0b48, 0x0b55, 0x0b5b, 0x0b68, 0x0b77, 0x0b88, 0x0b99, + 0x0ba4, 0x0bad, 0x0bc2, 0x0bcb, 0x0bcf, 0x0bdb, 0x0bea, 0x0bf0, + 0x0bff, 0x0c13, 0x0c24, 0x0c24, 0x0c32, +} // Size: 610 bytes + +const es419RegionStr string = "" + // Size: 395 bytes + "Isla AscensiónBosnia-HerzegovinaCosta de MarfilEurozonaGuerneseyIslas Ca" + + "nariasIslas UltramarinasTristán da CunhaTimor OrientalIslas Ultramarinas" + + " de EE.UU.Islas Vírgenes de los Estados UnidosÁfrica del OesteÁfrica del" + + " EsteÁfrica del NorteÁfrica del SurAsia del EsteAsia del SurAsia sudorie" + + "ntalEuropa del Surregión de MicronesiaAsia del OesteEuropa del EsteEurop" + + "a del NorteEuropa del Oeste" + +var es419RegionIdx = []uint16{ // 291 elements // Entry 0 - 3F - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000f, 0x000f, 0x000f, - 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, + 0x0000, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, + 0x000f, 0x000f, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, + 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, + 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, + 0x0021, 0x0021, 0x0021, 0x0021, 0x0021, 0x0030, 0x0030, 0x0030, + 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, + 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, // Entry 40 - 7F - 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, - 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, - 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, - 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, - 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, - 0x000f, 0x000f, 0x000f, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, - 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, - 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, + 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, + 0x0030, 0x0030, 0x0030, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, + 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0038, 0x0041, + 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, + 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, + 0x0041, 0x0041, 0x0041, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, // Entry 80 - BF - 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, - 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, - 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, - 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, - 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, - 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, - 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, - 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, 0x001d, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, + 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, 0x004f, // Entry C0 - FF - 0x001d, 0x001d, 0x001d, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, - 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, - 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, - 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x002f, 0x0040, 0x0040, - 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x0040, 0x004e, 0x004e, - 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, 0x004e, - 0x004e, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, - 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, + 0x004f, 0x004f, 0x004f, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, + 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, + 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, + 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0072, 0x0072, + 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0080, 0x0080, + 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, + 0x0080, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, 0x009c, + 0x009c, 0x009c, 0x00c1, 0x00c1, 0x00c1, 0x00c1, 0x00c1, 0x00c1, // Entry 100 - 13F - 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, - 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, - 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x006a, 0x007a, -} // Size: 582 bytes - -const etRegionStr string = "" + // Size: 3011 bytes + 0x00c1, 0x00c1, 0x00c1, 0x00c1, 0x00c1, 0x00c1, 0x00c1, 0x00c1, + 0x00c1, 0x00c1, 0x00c1, 0x00d2, 0x00d2, 0x00e2, 0x00f3, 0x00f3, + 0x0102, 0x0102, 0x0102, 0x0102, 0x010f, 0x011b, 0x012b, 0x0139, + 0x0139, 0x0139, 0x014e, 0x014e, 0x014e, 0x014e, 0x015c, 0x015c, + 0x016b, 0x017b, 0x018b, +} // Size: 606 bytes + +const etRegionStr string = "" + // Size: 3018 bytes "Ascensioni saarAndorraAraabia ÜhendemiraadidAfganistanAntigua ja Barbuda" + "AnguillaAlbaaniaArmeeniaAngolaAntarktikaArgentinaAmeerika SamoaAustriaAu" + "straaliaArubaAhvenamaaAserbaidžaanBosnia ja HertsegoviinaBarbadosBanglad" + - "eshBelgiaBurkina FasoBulgaariaBahreinBurundiBeninSaint BarthélemyBermuda" + + "eshBelgiaBurkina FasoBulgaariaBahreinBurundiBeninSaint-BarthélemyBermuda" + "BruneiBoliiviaHollandi Kariibi mere saaredBrasiiliaBahamaBhutanBouvet’ s" + "aarBotswanaValgeveneBelizeKanadaKookossaaredKongo DVKesk-Aafrika Vabarii" + "kKongo VabariikŠveitsCôte d’IvoireCooki saaredTšiiliKamerunHiinaColombia" + "Clippertoni saarCosta RicaKuubaRoheneemesaaredCuraçaoJõulusaarKüprosTšeh" + "hiSaksamaaDiego GarciaDjiboutiTaaniDominicaDominikaani VabariikAlžeeriaC" + "euta ja MelillaEcuadorEestiEgiptusLääne-SaharaEritreaHispaaniaEtioopiaEu" + - "roopa LiitSoomeFidžiFalklandi saaredMikroneesiaFääri saaredPrantsusmaaGa" + - "bonSuurbritanniaGrenadaGruusiaPrantsuse GuajaanaGuernseyGhanaGibraltarGr" + - "öönimaaGambiaGuineaGuadeloupeEkvatoriaal-GuineaKreekaLõuna-Georgia ja L" + - "õuna-Sandwichi saaredGuatemalaGuamGuinea-BissauGuyanaHongkongi erihaldu" + - "spiirkondHeardi ja McDonaldi saaredHondurasHorvaatiaHaitiUngariKanaari s" + - "aaredIndoneesiaIirimaaIisraelMani saarIndiaBriti India ookeani alaIraakI" + - "raanIslandItaaliaJerseyJamaicaJordaaniaJaapanKeeniaKõrgõzstanKambodžaKir" + - "ibatiKomooridSaint Kitts ja NevisPõhja-KoreaLõuna-KoreaKuveitKaimanisaar" + - "edKasahstanLaosLiibanonSaint LuciaLiechtensteinSri LankaLibeeriaLesothoL" + - "eeduLuksemburgLätiLiibüaMarokoMonacoMoldovaMontenegroSaint-MartinMadagas" + - "karMarshalli SaaredMakedooniaMaliMyanmar (Birma)MongooliaMacau erihaldus" + - "piirkondPõhja-MariaanidMartiniqueMauritaaniaMontserratMaltaMauritiusMald" + - "iividMalawiMehhikoMalaisiaMosambiikNamiibiaUus-KaledooniaNigerNorfolkNig" + - "eeriaNicaraguaHollandNorraNepalNauruNiueUus-MeremaaOmaanPanamaPeruuPrant" + - "suse PolüneesiaPaapua Uus-GuineaFilipiinidPakistanPoolaSaint Pierre ja M" + - "iquelonPitcairni saaredPuerto RicoPalestiina aladPortugalBelauParaguayKa" + - "tarOkeaania hajasaaredRéunionRumeeniaSerbiaVenemaaRwandaSaudi AraabiaSaa" + - "lomoni SaaredSeišellidSudaanRootsiSingapurSaint HelenaSloveeniaSvalbard " + - "ja Jan MayenSlovakkiaSierra LeoneSan MarinoSenegalSomaaliaSurinameLõuna-" + - "SudaanSão Tomé ja PríncipeEl SalvadorSint MaartenSüüriaSvaasimaaTristan " + - "da CunhaTurks ja CaicosTšaadPrantsuse LõunaaladTogoTaiTadžikistanTokelau" + - "Ida-TimorTürkmenistanTuneesiaTongaTürgiTrinidad ja TobagoTuvaluTaiwanTan" + - "saaniaUkrainaUgandaÜhendriikide hajasaaredÜhendatud Rahvaste Organisatsi" + - "oonAmeerika ÜhendriigidUruguayUsbekistanVatikanSaint Vincent ja Grenadii" + - "nidVenezuelaBriti NeitsisaaredUSA NeitsisaaredVietnamVanuatuWallis ja Fu" + - "tunaSamoaKosovoJeemenMayotteLõuna-Aafrika VabariikSambiaZimbabweTundmatu" + - " piirkondmaailmAafrikaPõhja-AmeerikaLõuna-AmeerikaOkeaaniaLääne-AafrikaK" + - "esk-AmeerikaIda-AafrikaPõhja-AafrikaKesk-AafrikaLõuna-AafrikaAmeerikaAme" + - "erika põhjaosaKariibi piirkondIda-AasiaLõuna-AasiaKagu-AasiaLõuna-Euroop" + - "aAustralaasiaMelaneesiaMikroneesia (piirkond)PolüneesiaAasiaKesk-AasiaLä" + - "äne-AasiaEuroopaIda-EuroopaPõhja-EuroopaLääne-EuroopaLadina-Ameerika" - -var etRegionIdx = []uint16{ // 292 elements + "roopa LiiteuroalaSoomeFidžiFalklandi saaredMikroneesiaFääri saaredPrants" + + "usmaaGabonSuurbritanniaGrenadaGruusiaPrantsuse GuajaanaGuernseyGhanaGibr" + + "altarGröönimaaGambiaGuineaGuadeloupeEkvatoriaal-GuineaKreekaLõuna-Georgi" + + "a ja Lõuna-Sandwichi saaredGuatemalaGuamGuinea-BissauGuyanaHongkongi eri" + + "halduspiirkondHeardi ja McDonaldi saaredHondurasHorvaatiaHaitiUngariKana" + + "ari saaredIndoneesiaIirimaaIisraelMani saarIndiaBriti India ookeani alaI" + + "raakIraanIslandItaaliaJerseyJamaicaJordaaniaJaapanKeeniaKõrgõzstanKambod" + + "žaKiribatiKomooridSaint Kitts ja NevisPõhja-KoreaLõuna-KoreaKuveitKaima" + + "nisaaredKasahstanLaosLiibanonSaint LuciaLiechtensteinSri LankaLibeeriaLe" + + "sothoLeeduLuksemburgLätiLiibüaMarokoMonacoMoldovaMontenegroSaint-MartinM" + + "adagaskarMarshalli SaaredMakedooniaMaliMyanmar (Birma)MongooliaMacau eri" + + "halduspiirkondPõhja-MariaanidMartiniqueMauritaaniaMontserratMaltaMauriti" + + "usMaldiividMalawiMehhikoMalaisiaMosambiikNamiibiaUus-KaledooniaNigerNorf" + + "olkNigeeriaNicaraguaHollandNorraNepalNauruNiueUus-MeremaaOmaanPanamaPeru" + + "uPrantsuse PolüneesiaPaapua Uus-GuineaFilipiinidPakistanPoolaSaint-Pierr" + + "e ja MiquelonPitcairni saaredPuerto RicoPalestiina aladPortugalBelauPara" + + "guayKatarOkeaania hajasaaredRéunionRumeeniaSerbiaVenemaaRwandaSaudi Araa" + + "biaSaalomoni SaaredSeišellidSudaanRootsiSingapurSaint HelenaSloveeniaSva" + + "lbard ja Jan MayenSlovakkiaSierra LeoneSan MarinoSenegalSomaaliaSuriname" + + "Lõuna-SudaanSão Tomé ja PríncipeEl SalvadorSint MaartenSüüriaSvaasimaaTr" + + "istan da CunhaTurks ja CaicosTšaadPrantsuse LõunaaladTogoTaiTadžikistanT" + + "okelauIda-TimorTürkmenistanTuneesiaTongaTürgiTrinidad ja TobagoTuvaluTai" + + "wanTansaaniaUkrainaUgandaÜhendriikide hajasaaredÜhendatud Rahvaste Organ" + + "isatsioonAmeerika ÜhendriigidUruguayUsbekistanVatikanSaint Vincent ja Gr" + + "enadiinidVenezuelaBriti NeitsisaaredUSA NeitsisaaredVietnamVanuatuWallis" + + " ja FutunaSamoaKosovoJeemenMayotteLõuna-Aafrika VabariikSambiaZimbabweTu" + + "ndmatu piirkondmaailmAafrikaPõhja-AmeerikaLõuna-AmeerikaOkeaaniaLääne-Aa" + + "frikaKesk-AmeerikaIda-AafrikaPõhja-AafrikaKesk-AafrikaLõuna-AafrikaAmeer" + + "ikaAmeerika põhjaosaKariibi piirkondIda-AasiaLõuna-AasiaKagu-AasiaLõuna-" + + "EuroopaAustralaasiaMelaneesiaMikroneesia (piirkond)PolüneesiaAasiaKesk-A" + + "asiaLääne-AasiaEuroopaIda-EuroopaPõhja-EuroopaLääne-EuroopaLadina-Ameeri" + + "ka" + +var etRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x000f, 0x0016, 0x002d, 0x0037, 0x0049, 0x0051, 0x0059, 0x0061, 0x0067, 0x0071, 0x007a, 0x0088, 0x008f, 0x0099, 0x009e, @@ -44649,40 +47410,40 @@ var etRegionIdx = []uint16{ // 292 elements 0x0242, 0x0249, 0x0250, 0x0258, 0x0264, 0x026c, 0x0271, 0x0279, // Entry 40 - 7F 0x028d, 0x0296, 0x02a6, 0x02ad, 0x02b2, 0x02b9, 0x02c7, 0x02ce, - 0x02d7, 0x02df, 0x02eb, 0x02eb, 0x02f0, 0x02f6, 0x0306, 0x0311, - 0x031f, 0x032a, 0x032f, 0x033c, 0x0343, 0x034a, 0x035c, 0x0364, - 0x0369, 0x0372, 0x037d, 0x0383, 0x0389, 0x0393, 0x03a5, 0x03ab, - 0x03d4, 0x03dd, 0x03e1, 0x03ee, 0x03f4, 0x040f, 0x0429, 0x0431, - 0x043a, 0x043f, 0x0445, 0x0453, 0x045d, 0x0464, 0x046b, 0x0474, - 0x0479, 0x0490, 0x0495, 0x049a, 0x04a0, 0x04a7, 0x04ad, 0x04b4, - 0x04bd, 0x04c3, 0x04c9, 0x04d5, 0x04de, 0x04e6, 0x04ee, 0x0502, + 0x02d7, 0x02df, 0x02eb, 0x02f2, 0x02f7, 0x02fd, 0x030d, 0x0318, + 0x0326, 0x0331, 0x0336, 0x0343, 0x034a, 0x0351, 0x0363, 0x036b, + 0x0370, 0x0379, 0x0384, 0x038a, 0x0390, 0x039a, 0x03ac, 0x03b2, + 0x03db, 0x03e4, 0x03e8, 0x03f5, 0x03fb, 0x0416, 0x0430, 0x0438, + 0x0441, 0x0446, 0x044c, 0x045a, 0x0464, 0x046b, 0x0472, 0x047b, + 0x0480, 0x0497, 0x049c, 0x04a1, 0x04a7, 0x04ae, 0x04b4, 0x04bb, + 0x04c4, 0x04ca, 0x04d0, 0x04dc, 0x04e5, 0x04ed, 0x04f5, 0x0509, // Entry 80 - BF - 0x050e, 0x051a, 0x0520, 0x052d, 0x0536, 0x053a, 0x0542, 0x054d, - 0x055a, 0x0563, 0x056b, 0x0572, 0x0577, 0x0581, 0x0586, 0x058d, - 0x0593, 0x0599, 0x05a0, 0x05aa, 0x05b6, 0x05c0, 0x05d0, 0x05da, - 0x05de, 0x05ed, 0x05f6, 0x060d, 0x061d, 0x0627, 0x0632, 0x063c, - 0x0641, 0x064a, 0x0653, 0x0659, 0x0660, 0x0668, 0x0671, 0x0679, - 0x0687, 0x068c, 0x0693, 0x069b, 0x06a4, 0x06ab, 0x06b0, 0x06b5, - 0x06ba, 0x06be, 0x06c9, 0x06ce, 0x06d4, 0x06d9, 0x06ee, 0x06ff, - 0x0709, 0x0711, 0x0716, 0x072e, 0x073e, 0x0749, 0x0758, 0x0760, + 0x0515, 0x0521, 0x0527, 0x0534, 0x053d, 0x0541, 0x0549, 0x0554, + 0x0561, 0x056a, 0x0572, 0x0579, 0x057e, 0x0588, 0x058d, 0x0594, + 0x059a, 0x05a0, 0x05a7, 0x05b1, 0x05bd, 0x05c7, 0x05d7, 0x05e1, + 0x05e5, 0x05f4, 0x05fd, 0x0614, 0x0624, 0x062e, 0x0639, 0x0643, + 0x0648, 0x0651, 0x065a, 0x0660, 0x0667, 0x066f, 0x0678, 0x0680, + 0x068e, 0x0693, 0x069a, 0x06a2, 0x06ab, 0x06b2, 0x06b7, 0x06bc, + 0x06c1, 0x06c5, 0x06d0, 0x06d5, 0x06db, 0x06e0, 0x06f5, 0x0706, + 0x0710, 0x0718, 0x071d, 0x0735, 0x0745, 0x0750, 0x075f, 0x0767, // Entry C0 - FF - 0x0765, 0x076d, 0x0772, 0x0785, 0x078d, 0x0795, 0x079b, 0x07a2, - 0x07a8, 0x07b5, 0x07c5, 0x07cf, 0x07d5, 0x07db, 0x07e3, 0x07ef, - 0x07f8, 0x080d, 0x0816, 0x0822, 0x082c, 0x0833, 0x083b, 0x0843, - 0x0850, 0x0867, 0x0872, 0x087e, 0x0886, 0x088f, 0x089f, 0x08ae, - 0x08b4, 0x08c8, 0x08cc, 0x08cf, 0x08db, 0x08e2, 0x08eb, 0x08f8, - 0x0900, 0x0905, 0x090b, 0x091d, 0x0923, 0x0929, 0x0932, 0x0939, - 0x093f, 0x0957, 0x0979, 0x098e, 0x0995, 0x099f, 0x09a6, 0x09c2, - 0x09cb, 0x09dd, 0x09ed, 0x09f4, 0x09fb, 0x0a0b, 0x0a10, 0x0a16, + 0x076c, 0x0774, 0x0779, 0x078c, 0x0794, 0x079c, 0x07a2, 0x07a9, + 0x07af, 0x07bc, 0x07cc, 0x07d6, 0x07dc, 0x07e2, 0x07ea, 0x07f6, + 0x07ff, 0x0814, 0x081d, 0x0829, 0x0833, 0x083a, 0x0842, 0x084a, + 0x0857, 0x086e, 0x0879, 0x0885, 0x088d, 0x0896, 0x08a6, 0x08b5, + 0x08bb, 0x08cf, 0x08d3, 0x08d6, 0x08e2, 0x08e9, 0x08f2, 0x08ff, + 0x0907, 0x090c, 0x0912, 0x0924, 0x092a, 0x0930, 0x0939, 0x0940, + 0x0946, 0x095e, 0x0980, 0x0995, 0x099c, 0x09a6, 0x09ad, 0x09c9, + 0x09d2, 0x09e4, 0x09f4, 0x09fb, 0x0a02, 0x0a12, 0x0a17, 0x0a1d, // Entry 100 - 13F - 0x0a1c, 0x0a23, 0x0a3a, 0x0a40, 0x0a48, 0x0a59, 0x0a5f, 0x0a66, - 0x0a75, 0x0a84, 0x0a8c, 0x0a9b, 0x0aa8, 0x0ab3, 0x0ac1, 0x0acd, - 0x0adb, 0x0ae3, 0x0af5, 0x0b05, 0x0b0e, 0x0b1a, 0x0b24, 0x0b32, - 0x0b3e, 0x0b48, 0x0b5e, 0x0b69, 0x0b6e, 0x0b78, 0x0b85, 0x0b8c, - 0x0b97, 0x0ba5, 0x0bb4, 0x0bc3, -} // Size: 608 bytes - -const faRegionStr string = "" + // Size: 5004 bytes + 0x0a23, 0x0a2a, 0x0a41, 0x0a47, 0x0a4f, 0x0a60, 0x0a66, 0x0a6d, + 0x0a7c, 0x0a8b, 0x0a93, 0x0aa2, 0x0aaf, 0x0aba, 0x0ac8, 0x0ad4, + 0x0ae2, 0x0aea, 0x0afc, 0x0b0c, 0x0b15, 0x0b21, 0x0b2b, 0x0b39, + 0x0b45, 0x0b4f, 0x0b65, 0x0b70, 0x0b75, 0x0b7f, 0x0b8c, 0x0b93, + 0x0b9e, 0x0bac, 0x0bbb, 0x0bbb, 0x0bca, +} // Size: 610 bytes + +const faRegionStr string = "" + // Size: 5023 bytes "جزایر آسنسیونآندوراامارات متحدهٔ عربیافغانستانآنتیگوا و باربوداآنگویلاآل" + "بانیارمنستانآنگولاجنوبگانآرژانتینساموآی امریکااتریشاسترالیاآروباجزایر آ" + "لاندجمهوری آذربایجانبوسنی و هرزگوینباربادوسبنگلادشبلژیکبورکینافاسوبلغار" + @@ -44692,37 +47453,37 @@ const faRegionStr string = "" + // Size: 5004 bytes "مبیاجزایر کلیپرتونکاستاریکاکوباکیپ\u200cوردکوراسائوجزیرهٔ کریسمسقبرسجمه" + "وری چکآلماندیه\u200cگو گارسیاجیبوتیدانمارکدومینیکاجمهوری دومینیکنالجزای" + "رسبته و ملیلهاکوادوراستونیمصرصحرای غربیاریترهاسپانیااتیوپیاتحادیهٔ اروپ" + - "افنلاندفیجیجزایر فالکلندمیکرونزیجزایر فاروفرانسهگابنبریتانیاگرناداگرجست" + - "انگویان فرانسهگرنزیغناجبل\u200cالطارقگرینلندگامبیاگینهگوادلوپگینهٔ استو" + - "ایییونانجزایر جورجیای جنوبی و ساندویچ جنوبیگواتمالاگوامگینهٔ بیسائوگویا" + - "نهنگ\u200cکنگ، ناحیهٔ ویژهٔ حکومتی چینجزیرهٔ هرد و جزایر مک\u200cدونالد" + - "هندوراسکرواسیهائیتیمجارستانجزایر قناریاندونزیایرلنداسرائیلجزیرهٔ منهندق" + - "لمرو بریتانیا در اقیانوس هندعراقایرانایسلندایتالیاجرزیجامائیکااردنژاپنک" + - "نیاقرقیزستانکامبوجکیریباتیکوموروسنت کیتس و نویسکرهٔ شمالیکرهٔ جنوبیکویت" + - "جزایر کِیمنقزاقستانلائوسلبنانسنت لوسیالیختن\u200cاشتاینسری\u200cلانکالی" + - "بریالسوتولیتوانیلوکزامبورگلتونیلیبیمراکشموناکومولداویمونته\u200cنگروسنت" + - " مارتینماداگاسکارجزایر مارشالمقدونیهمالیمیانمار (برمه)مغولستانماکائو، نا" + - "حیهٔ ویژهٔ حکومتی چینجزایر ماریانای شمالیمارتینیکموریتانیمونت\u200cسرات" + - "مالتموریسمالدیومالاویمکزیکمالزیموزامبیکنامیبیاکالدونیای جدیدنیجرجزیرهٔ " + - "نورفولکنیجریهنیکاراگوئههلندنروژنپالنائورونیوئهنیوزیلندعمانپاناماپروپلی" + - "\u200cنزی فرانسهپاپوا گینهٔ نوفیلیپینپاکستانلهستانسن پیر و میکلنجزایر پی" + - "ت\u200cکرنپورتوریکوسرزمین\u200cهای فلسطینیپرتغالپالائوپاراگوئهقطربخش" + - "\u200cهای دورافتادهٔ اقیانوسیهرئونیونرومانیصربستانروسیهروانداعربستان سعو" + - "دیجزایر سلیمانسیشلسودانسوئدسنگاپورسنت هلناسلوونیاسوالبارد و جان\u200cما" + - "یناسلواکیسیرالئونسان\u200cمارینوسنگالسومالیسورینامسودان جنوبیسائوتومه و" + - " پرینسیپالسالوادورسنت مارتنسوریهسوازیلندتریستان دا کوناجزایر تورکس و کای" + - "کوسچادقلمروهای جنوبی فرانسهتوگوتایلندتاجیکستانتوکلائوتیمور-لستهترکمنستا" + - "نتونستونگاترکیهترینیداد و توباگوتووالوتایوانتانزانیااوکرایناوگانداجزایر" + - " دورافتادهٔ ایالات متحدهسازمان ملل متحدایالات متحدهاروگوئهازبکستانواتیکا" + - "نسنت وینسنت و گرنادینونزوئلاجزایر ویرجین بریتانیاجزایر ویرجین ایالات مت" + - "حدهویتناموانواتووالیس و فوتوناساموآکوزوویمنمایوتافریقای جنوبیزامبیازیمب" + - "ابوهناحیهٔ نامشخصجهانافریقاامریکای شمالیامریکای جنوبیاقیانوسیهغرب افریق" + - "اامریکای مرکزیشرق افریقاشمال افریقامرکز افریقاجنوب افریقاامریکاشمال امر" + - "یکاکارائیبشرق آسیاجنوب آسیاجنوب شرق آسیاجنوب اروپااسترالزیملانزیناحیهٔ " + - "میکرونزیپلی\u200cنزیآسیاآسیای مرکزیغرب آسیااروپاشرق اروپاشمال اروپاغرب " + - "اروپاامریکای لاتین" - -var faRegionIdx = []uint16{ // 292 elements + "امنطقه یوروفنلاندفیجیجزایر فالکلندمیکرونزیجزایر فاروفرانسهگابنبریتانیاگ" + + "رناداگرجستانگویان فرانسهگرنزیغناجبل\u200cالطارقگرینلندگامبیاگینهگوادلوپ" + + "گینهٔ استوایییونانجزایر جورجیای جنوبی و ساندویچ جنوبیگواتمالاگوامگینهٔ " + + "بیسائوگویانهنگ\u200cکنگ، ناحیهٔ ویژهٔ حکومتی چینجزیرهٔ هرد و جزایر مک" + + "\u200cدونالدهندوراسکرواسیهائیتیمجارستانجزایر قناریاندونزیایرلنداسرائیلجز" + + "یرهٔ منهندقلمرو بریتانیا در اقیانوس هندعراقایرانایسلندایتالیاجرزیجامائی" + + "کااردنژاپنکنیاقرقیزستانکامبوجکیریباتیکوموروسنت کیتس و نویسکرهٔ شمالیکره" + + "ٔ جنوبیکویتجزایر کِیمنقزاقستانلائوسلبنانسنت لوسیالیختن\u200cاشتاینسری" + + "\u200cلانکالیبریالسوتولیتوانیلوکزامبورگلتونیلیبیمراکشموناکومولداویمونته" + + "\u200cنگروسنت مارتینماداگاسکارجزایر مارشالمقدونیهمالیمیانمار (برمه)مغولس" + + "تانماکائو، ناحیهٔ ویژهٔ حکومتی چینجزایر ماریانای شمالیمارتینیکموریتانیم" + + "ونت\u200cسراتمالتموریسمالدیومالاویمکزیکمالزیموزامبیکنامیبیاکالدونیای جد" + + "یدنیجرجزیرهٔ نورفولکنیجریهنیکاراگوئههلندنروژنپالنائورونیوئهنیوزیلندعمان" + + "پاناماپروپلی\u200cنزی فرانسهپاپوا گینهٔ نوفیلیپینپاکستانلهستانسن پیر و " + + "میکلنجزایر پیت\u200cکرنپورتوریکوسرزمین\u200cهای فلسطینیپرتغالپالائوپارا" + + "گوئهقطربخش\u200cهای دورافتادهٔ اقیانوسیهرئونیونرومانیصربستانروسیهرواندا" + + "عربستان سعودیجزایر سلیمانسیشلسودانسوئدسنگاپورسنت هلناسلوونیاسوالبارد و " + + "جان\u200cمایناسلواکیسیرالئونسان\u200cمارینوسنگالسومالیسورینامسودان جنوب" + + "یسائوتومه و پرینسیپالسالوادورسنت مارتنسوریهسوازیلندتریستان دا کوناجزایر" + + " تورکس و کایکوسچادقلمروهای جنوبی فرانسهتوگوتایلندتاجیکستانتوکلائوتیمور-ل" + + "ستهترکمنستانتونستونگاترکیهترینیداد و توباگوتووالوتایوانتانزانیااوکراینا" + + "وگانداجزایر دورافتادهٔ ایالات متحدهسازمان ملل متحدایالات متحدهاروگوئهاز" + + "بکستانواتیکانسنت وینسنت و گرنادینونزوئلاجزایر ویرجین بریتانیاجزایر ویرج" + + "ین ایالات متحدهویتناموانواتووالیس و فوتوناساموآکوزوویمنمایوتافریقای جنو" + + "بیزامبیازیمبابوهناحیهٔ نامشخصجهانافریقاامریکای شمالیامریکای جنوبیاقیانو" + + "سیهغرب افریقاامریکای مرکزیشرق افریقاشمال افریقامرکز افریقاجنوب افریقاام" + + "ریکاشمال امریکاکارائیبشرق آسیاجنوب آسیاجنوب شرق آسیاجنوب اروپااسترالزیم" + + "لانزیناحیهٔ میکرونزیپلی\u200cنزیآسیاآسیای مرکزیغرب آسیااروپاشرق اروپاشم" + + "ال اروپاغرب اروپاامریکای لاتین" + +var faRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0019, 0x0025, 0x0047, 0x0059, 0x0079, 0x0087, 0x0093, 0x00a3, 0x00af, 0x00bd, 0x00cd, 0x00e6, 0x00f0, 0x0100, 0x010a, @@ -44734,40 +47495,40 @@ var faRegionIdx = []uint16{ // 292 elements 0x03b2, 0x03ba, 0x03cb, 0x03d5, 0x03ef, 0x03fb, 0x0409, 0x0419, // Entry 40 - 7F 0x0436, 0x0444, 0x045a, 0x0468, 0x0474, 0x047a, 0x048d, 0x0499, - 0x04a7, 0x04b3, 0x04ce, 0x04ce, 0x04da, 0x04e2, 0x04fb, 0x050b, - 0x051e, 0x052a, 0x0532, 0x0542, 0x054e, 0x055c, 0x0573, 0x057d, - 0x0583, 0x0598, 0x05a6, 0x05b2, 0x05ba, 0x05c8, 0x05e1, 0x05eb, - 0x062c, 0x063c, 0x0644, 0x065b, 0x0665, 0x06a2, 0x06d7, 0x06e5, - 0x06f1, 0x06fd, 0x070d, 0x0722, 0x0730, 0x073c, 0x074a, 0x075b, - 0x0761, 0x0797, 0x079f, 0x07a9, 0x07b5, 0x07c3, 0x07cb, 0x07db, - 0x07e3, 0x07eb, 0x07f3, 0x0805, 0x0811, 0x0821, 0x082d, 0x0848, + 0x04a7, 0x04b3, 0x04ce, 0x04e1, 0x04ed, 0x04f5, 0x050e, 0x051e, + 0x0531, 0x053d, 0x0545, 0x0555, 0x0561, 0x056f, 0x0586, 0x0590, + 0x0596, 0x05ab, 0x05b9, 0x05c5, 0x05cd, 0x05db, 0x05f4, 0x05fe, + 0x063f, 0x064f, 0x0657, 0x066e, 0x0678, 0x06b5, 0x06ea, 0x06f8, + 0x0704, 0x0710, 0x0720, 0x0735, 0x0743, 0x074f, 0x075d, 0x076e, + 0x0774, 0x07aa, 0x07b2, 0x07bc, 0x07c8, 0x07d6, 0x07de, 0x07ee, + 0x07f6, 0x07fe, 0x0806, 0x0818, 0x0824, 0x0834, 0x0840, 0x085b, // Entry 80 - BF - 0x085b, 0x086e, 0x0876, 0x088b, 0x089b, 0x08a5, 0x08af, 0x08c0, - 0x08d9, 0x08ec, 0x08f8, 0x0902, 0x0910, 0x0924, 0x092e, 0x0936, - 0x0940, 0x094c, 0x095a, 0x096f, 0x0982, 0x0996, 0x09ad, 0x09bb, - 0x09c3, 0x09dc, 0x09ec, 0x0a26, 0x0a4c, 0x0a5c, 0x0a6c, 0x0a7f, - 0x0a87, 0x0a91, 0x0a9d, 0x0aa9, 0x0ab3, 0x0abd, 0x0acd, 0x0adb, - 0x0af6, 0x0afe, 0x0b19, 0x0b25, 0x0b39, 0x0b41, 0x0b49, 0x0b51, - 0x0b5d, 0x0b67, 0x0b77, 0x0b7f, 0x0b8b, 0x0b91, 0x0bad, 0x0bc7, - 0x0bd5, 0x0be3, 0x0bef, 0x0c08, 0x0c22, 0x0c34, 0x0c58, 0x0c64, + 0x086e, 0x0881, 0x0889, 0x089e, 0x08ae, 0x08b8, 0x08c2, 0x08d3, + 0x08ec, 0x08ff, 0x090b, 0x0915, 0x0923, 0x0937, 0x0941, 0x0949, + 0x0953, 0x095f, 0x096d, 0x0982, 0x0995, 0x09a9, 0x09c0, 0x09ce, + 0x09d6, 0x09ef, 0x09ff, 0x0a39, 0x0a5f, 0x0a6f, 0x0a7f, 0x0a92, + 0x0a9a, 0x0aa4, 0x0ab0, 0x0abc, 0x0ac6, 0x0ad0, 0x0ae0, 0x0aee, + 0x0b09, 0x0b11, 0x0b2c, 0x0b38, 0x0b4c, 0x0b54, 0x0b5c, 0x0b64, + 0x0b70, 0x0b7a, 0x0b8a, 0x0b92, 0x0b9e, 0x0ba4, 0x0bc0, 0x0bda, + 0x0be8, 0x0bf6, 0x0c02, 0x0c1b, 0x0c35, 0x0c47, 0x0c6b, 0x0c77, // Entry C0 - FF - 0x0c70, 0x0c80, 0x0c86, 0x0cbd, 0x0ccb, 0x0cd7, 0x0ce5, 0x0cef, - 0x0cfb, 0x0d14, 0x0d2b, 0x0d33, 0x0d3d, 0x0d45, 0x0d53, 0x0d60, - 0x0d6e, 0x0d95, 0x0da3, 0x0db3, 0x0dc8, 0x0dd2, 0x0dde, 0x0dec, - 0x0e01, 0x0e23, 0x0e37, 0x0e48, 0x0e52, 0x0e62, 0x0e7e, 0x0ea3, - 0x0ea9, 0x0ed1, 0x0ed9, 0x0ee5, 0x0ef7, 0x0f05, 0x0f18, 0x0f2a, - 0x0f32, 0x0f3c, 0x0f46, 0x0f66, 0x0f72, 0x0f7e, 0x0f8e, 0x0f9c, - 0x0faa, 0x0fe1, 0x0ffd, 0x1014, 0x1022, 0x1032, 0x1040, 0x1065, - 0x1073, 0x109b, 0x10ca, 0x10d6, 0x10e4, 0x10fe, 0x1108, 0x1112, + 0x0c83, 0x0c93, 0x0c99, 0x0cd0, 0x0cde, 0x0cea, 0x0cf8, 0x0d02, + 0x0d0e, 0x0d27, 0x0d3e, 0x0d46, 0x0d50, 0x0d58, 0x0d66, 0x0d73, + 0x0d81, 0x0da8, 0x0db6, 0x0dc6, 0x0ddb, 0x0de5, 0x0df1, 0x0dff, + 0x0e14, 0x0e36, 0x0e4a, 0x0e5b, 0x0e65, 0x0e75, 0x0e91, 0x0eb6, + 0x0ebc, 0x0ee4, 0x0eec, 0x0ef8, 0x0f0a, 0x0f18, 0x0f2b, 0x0f3d, + 0x0f45, 0x0f4f, 0x0f59, 0x0f79, 0x0f85, 0x0f91, 0x0fa1, 0x0faf, + 0x0fbd, 0x0ff4, 0x1010, 0x1027, 0x1035, 0x1045, 0x1053, 0x1078, + 0x1086, 0x10ae, 0x10dd, 0x10e9, 0x10f7, 0x1111, 0x111b, 0x1125, // Entry 100 - 13F - 0x1118, 0x1122, 0x113b, 0x1147, 0x1157, 0x1170, 0x1178, 0x1184, - 0x119d, 0x11b6, 0x11c8, 0x11db, 0x11f4, 0x1207, 0x121c, 0x1231, - 0x1246, 0x1252, 0x1267, 0x1275, 0x1284, 0x1295, 0x12ad, 0x12c0, - 0x12d0, 0x12dc, 0x12f9, 0x1308, 0x1310, 0x1325, 0x1334, 0x133e, - 0x134f, 0x1362, 0x1373, 0x138c, -} // Size: 608 bytes - -const fiRegionStr string = "" + // Size: 3020 bytes + 0x112b, 0x1135, 0x114e, 0x115a, 0x116a, 0x1183, 0x118b, 0x1197, + 0x11b0, 0x11c9, 0x11db, 0x11ee, 0x1207, 0x121a, 0x122f, 0x1244, + 0x1259, 0x1265, 0x127a, 0x1288, 0x1297, 0x12a8, 0x12c0, 0x12d3, + 0x12e3, 0x12ef, 0x130c, 0x131b, 0x1323, 0x1338, 0x1347, 0x1351, + 0x1362, 0x1375, 0x1386, 0x1386, 0x139f, +} // Size: 610 bytes + +const fiRegionStr string = "" + // Size: 3028 bytes "Ascension-saariAndorraArabiemiirikunnatAfganistanAntigua ja BarbudaAngui" + "llaAlbaniaArmeniaAngolaAntarktisArgentiinaAmerikan SamoaItävaltaAustrali" + "aArubaAhvenanmaaAzerbaidžanBosnia ja HertsegovinaBarbadosBangladeshBelgi" + @@ -44778,40 +47539,40 @@ const fiRegionStr string = "" + // Size: 3020 bytes "saaretChileKamerunKiinaKolumbiaClippertoninsaariCosta RicaKuubaKap Verde" + "CuraçaoJoulusaariKyprosTšekkiSaksaDiego GarciaDjiboutiTanskaDominicaDomi" + "nikaaninen tasavaltaAlgeriaCeuta ja MelillaEcuadorViroEgyptiLänsi-Sahara" + - "EritreaEspanjaEtiopiaEuroopan unioniSuomiFidžiFalklandinsaaretMikronesia" + - "n liittovaltioFärsaaretRanskaGabonIso-BritanniaGrenadaGeorgiaRanskan Gua" + - "yanaGuernseyGhanaGibraltarGrönlantiGambiaGuineaGuadeloupePäiväntasaajan " + - "GuineaKreikkaEtelä-Georgia ja Eteläiset SandwichsaaretGuatemalaGuamGuine" + - "a-BissauGuyanaHongkong – Kiinan e.h.a.Heard ja McDonaldinsaaretHondurasK" + - "roatiaHaitiUnkariKanariansaaretIndonesiaIrlantiIsraelMansaariIntiaBritti" + - "läinen Intian valtameren alueIrakIranIslantiItaliaJerseyJamaikaJordaniaJ" + - "apaniKeniaKirgisiaKambodžaKiribatiKomoritSaint Kitts ja NevisPohjois-Kor" + - "eaEtelä-KoreaKuwaitCaymansaaretKazakstanLaosLibanonSaint LuciaLiechtenst" + - "einSri LankaLiberiaLesothoLiettuaLuxemburgLatviaLibyaMarokkoMonacoMoldov" + - "aMontenegroSaint-MartinMadagaskarMarshallinsaaretMakedoniaMaliMyanmar (B" + - "urma)MongoliaMacao – Kiinan e.h.a.Pohjois-MariaanitMartiniqueMauritaniaM" + - "ontserratMaltaMauritiusMalediivitMalawiMeksikoMalesiaMosambikNamibiaUusi" + - "-KaledoniaNigerNorfolkinsaariNigeriaNicaraguaAlankomaatNorjaNepalNauruNi" + - "ueUusi-SeelantiOmanPanamaPeruRanskan PolynesiaPapua-Uusi-GuineaFilippiin" + - "itPakistanPuolaSaint-Pierre ja MiquelonPitcairnPuerto RicoPalestiinalais" + - "alueetPortugaliPalauParaguayQatarulkomeriRéunionRomaniaSerbiaVenäjäRuand" + - "aSaudi-ArabiaSalomonsaaretSeychellitSudanRuotsiSingaporeSaint HelenaSlov" + - "eniaHuippuvuoret ja Jan MayenSlovakiaSierra LeoneSan MarinoSenegalSomali" + - "aSurinameEtelä-SudanSão Tomé ja PríncipeEl SalvadorSint MaartenSyyriaSwa" + - "zimaaTristan da CunhaTurks- ja CaicossaaretTšadRanskan eteläiset alueetT" + - "ogoThaimaaTadžikistanTokelauItä-TimorTurkmenistanTunisiaTongaTurkkiTrini" + - "dad ja TobagoTuvaluTaiwanTansaniaUkrainaUgandaYhdysvaltain erillissaaret" + - "Yhdistyneet kansakunnatYhdysvallatUruguayUzbekistanVatikaaniSaint Vincen" + - "t ja GrenadiinitVenezuelaBrittiläiset NeitsytsaaretYhdysvaltain Neitsyts" + - "aaretVietnamVanuatuWallis ja FutunaSamoaKosovoJemenMayotteEtelä-AfrikkaS" + - "ambiaZimbabwetuntematon aluemaailmaAfrikkaPohjois-AmerikkaEtelä-Amerikka" + - "OseaniaLänsi-AfrikkaVäli-AmerikkaItä-AfrikkaPohjois-AfrikkaKeski-Afrikka" + - "eteläinen AfrikkaAmerikkapohjoinen AmerikkaKaribiaItä-AasiaEtelä-AasiaKa" + - "akkois-AasiaEtelä-EurooppaAustralaasiaMelanesiaMikronesiaPolynesiaAasiaK" + - "eski-AasiaLänsi-AasiaEurooppaItä-EurooppaPohjois-EurooppaLänsi-EurooppaL" + - "atinalainen Amerikka" - -var fiRegionIdx = []uint16{ // 292 elements + "EritreaEspanjaEtiopiaEuroopan unionieuroalueSuomiFidžiFalklandinsaaretMi" + + "kronesian liittovaltioFärsaaretRanskaGabonIso-BritanniaGrenadaGeorgiaRan" + + "skan GuayanaGuernseyGhanaGibraltarGrönlantiGambiaGuineaGuadeloupePäivänt" + + "asaajan GuineaKreikkaEtelä-Georgia ja Eteläiset SandwichsaaretGuatemalaG" + + "uamGuinea-BissauGuyanaHongkong – Kiinan e.h.a.Heard ja McDonaldinsaaretH" + + "ondurasKroatiaHaitiUnkariKanariansaaretIndonesiaIrlantiIsraelMansaariInt" + + "iaBrittiläinen Intian valtameren alueIrakIranIslantiItaliaJerseyJamaikaJ" + + "ordaniaJapaniKeniaKirgisiaKambodžaKiribatiKomoritSaint Kitts ja NevisPoh" + + "jois-KoreaEtelä-KoreaKuwaitCaymansaaretKazakstanLaosLibanonSaint LuciaLi" + + "echtensteinSri LankaLiberiaLesothoLiettuaLuxemburgLatviaLibyaMarokkoMona" + + "coMoldovaMontenegroSaint-MartinMadagaskarMarshallinsaaretMakedoniaMaliMy" + + "anmar (Burma)MongoliaMacao – Kiinan e.h.a.Pohjois-MariaanitMartiniqueMau" + + "ritaniaMontserratMaltaMauritiusMalediivitMalawiMeksikoMalesiaMosambikNam" + + "ibiaUusi-KaledoniaNigerNorfolkinsaariNigeriaNicaraguaAlankomaatNorjaNepa" + + "lNauruNiueUusi-SeelantiOmanPanamaPeruRanskan PolynesiaPapua-Uusi-GuineaF" + + "ilippiinitPakistanPuolaSaint-Pierre ja MiquelonPitcairnPuerto RicoPalest" + + "iinalaisalueetPortugaliPalauParaguayQatarulkomeriRéunionRomaniaSerbiaVen" + + "äjäRuandaSaudi-ArabiaSalomonsaaretSeychellitSudanRuotsiSingaporeSaint H" + + "elenaSloveniaHuippuvuoret ja Jan MayenSlovakiaSierra LeoneSan MarinoSene" + + "galSomaliaSurinameEtelä-SudanSão Tomé ja PríncipeEl SalvadorSint Maarten" + + "SyyriaSwazimaaTristan da CunhaTurks- ja CaicossaaretTšadRanskan eteläise" + + "t alueetTogoThaimaaTadžikistanTokelauItä-TimorTurkmenistanTunisiaTongaTu" + + "rkkiTrinidad ja TobagoTuvaluTaiwanTansaniaUkrainaUgandaYhdysvaltain eril" + + "lissaaretYhdistyneet kansakunnatYhdysvallatUruguayUzbekistanVatikaaniSai" + + "nt Vincent ja GrenadiinitVenezuelaBrittiläiset NeitsytsaaretYhdysvaltain" + + " NeitsytsaaretVietnamVanuatuWallis ja FutunaSamoaKosovoJemenMayotteEtelä" + + "-AfrikkaSambiaZimbabwetuntematon aluemaailmaAfrikkaPohjois-AmerikkaEtelä" + + "-AmerikkaOseaniaLänsi-AfrikkaVäli-AmerikkaItä-AfrikkaPohjois-AfrikkaKesk" + + "i-Afrikkaeteläinen AfrikkaAmerikkapohjoinen AmerikkaKaribiaItä-AasiaEtel" + + "ä-AasiaKaakkois-AasiaEtelä-EurooppaAustralaasiaMelanesiaMikronesiaPolyn" + + "esiaAasiaKeski-AasiaLänsi-AasiaEurooppaItä-EurooppaPohjois-EurooppaLänsi" + + "-EurooppaLatinalainen Amerikka" + +var fiRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x000f, 0x0016, 0x0027, 0x0031, 0x0043, 0x004b, 0x0052, 0x0059, 0x005f, 0x0068, 0x0072, 0x0080, 0x0089, 0x0092, 0x0097, @@ -44823,130 +47584,129 @@ var fiRegionIdx = []uint16{ // 292 elements 0x0259, 0x025f, 0x0266, 0x026b, 0x0277, 0x027f, 0x0285, 0x028d, // Entry 40 - 7F 0x02a5, 0x02ac, 0x02bc, 0x02c3, 0x02c7, 0x02cd, 0x02da, 0x02e1, - 0x02e8, 0x02ef, 0x02fe, 0x02fe, 0x0303, 0x0309, 0x0319, 0x0331, - 0x033b, 0x0341, 0x0346, 0x0353, 0x035a, 0x0361, 0x0370, 0x0378, - 0x037d, 0x0386, 0x0390, 0x0396, 0x039c, 0x03a6, 0x03bd, 0x03c4, - 0x03ef, 0x03f8, 0x03fc, 0x0409, 0x040f, 0x0429, 0x0442, 0x044a, - 0x0451, 0x0456, 0x045c, 0x046a, 0x0473, 0x047a, 0x0480, 0x0488, - 0x048d, 0x04b1, 0x04b5, 0x04b9, 0x04c0, 0x04c6, 0x04cc, 0x04d3, - 0x04db, 0x04e1, 0x04e6, 0x04ee, 0x04f7, 0x04ff, 0x0506, 0x051a, + 0x02e8, 0x02ef, 0x02fe, 0x0306, 0x030b, 0x0311, 0x0321, 0x0339, + 0x0343, 0x0349, 0x034e, 0x035b, 0x0362, 0x0369, 0x0378, 0x0380, + 0x0385, 0x038e, 0x0398, 0x039e, 0x03a4, 0x03ae, 0x03c5, 0x03cc, + 0x03f7, 0x0400, 0x0404, 0x0411, 0x0417, 0x0431, 0x044a, 0x0452, + 0x0459, 0x045e, 0x0464, 0x0472, 0x047b, 0x0482, 0x0488, 0x0490, + 0x0495, 0x04b9, 0x04bd, 0x04c1, 0x04c8, 0x04ce, 0x04d4, 0x04db, + 0x04e3, 0x04e9, 0x04ee, 0x04f6, 0x04ff, 0x0507, 0x050e, 0x0522, // Entry 80 - BF - 0x0527, 0x0533, 0x0539, 0x0545, 0x054e, 0x0552, 0x0559, 0x0564, - 0x0571, 0x057a, 0x0581, 0x0588, 0x058f, 0x0598, 0x059e, 0x05a3, - 0x05aa, 0x05b0, 0x05b7, 0x05c1, 0x05cd, 0x05d7, 0x05e7, 0x05f0, - 0x05f4, 0x0603, 0x060b, 0x0622, 0x0633, 0x063d, 0x0647, 0x0651, - 0x0656, 0x065f, 0x0669, 0x066f, 0x0676, 0x067d, 0x0685, 0x068c, - 0x069a, 0x069f, 0x06ad, 0x06b4, 0x06bd, 0x06c7, 0x06cc, 0x06d1, - 0x06d6, 0x06da, 0x06e7, 0x06eb, 0x06f1, 0x06f5, 0x0706, 0x0717, - 0x0722, 0x072a, 0x072f, 0x0747, 0x074f, 0x075a, 0x076e, 0x0777, + 0x052f, 0x053b, 0x0541, 0x054d, 0x0556, 0x055a, 0x0561, 0x056c, + 0x0579, 0x0582, 0x0589, 0x0590, 0x0597, 0x05a0, 0x05a6, 0x05ab, + 0x05b2, 0x05b8, 0x05bf, 0x05c9, 0x05d5, 0x05df, 0x05ef, 0x05f8, + 0x05fc, 0x060b, 0x0613, 0x062a, 0x063b, 0x0645, 0x064f, 0x0659, + 0x065e, 0x0667, 0x0671, 0x0677, 0x067e, 0x0685, 0x068d, 0x0694, + 0x06a2, 0x06a7, 0x06b5, 0x06bc, 0x06c5, 0x06cf, 0x06d4, 0x06d9, + 0x06de, 0x06e2, 0x06ef, 0x06f3, 0x06f9, 0x06fd, 0x070e, 0x071f, + 0x072a, 0x0732, 0x0737, 0x074f, 0x0757, 0x0762, 0x0776, 0x077f, // Entry C0 - FF - 0x077c, 0x0784, 0x0789, 0x0791, 0x0799, 0x07a0, 0x07a6, 0x07ae, - 0x07b4, 0x07c0, 0x07cd, 0x07d7, 0x07dc, 0x07e2, 0x07eb, 0x07f7, - 0x07ff, 0x0818, 0x0820, 0x082c, 0x0836, 0x083d, 0x0844, 0x084c, - 0x0858, 0x086f, 0x087a, 0x0886, 0x088c, 0x0894, 0x08a4, 0x08ba, - 0x08bf, 0x08d8, 0x08dc, 0x08e3, 0x08ef, 0x08f6, 0x0900, 0x090c, - 0x0913, 0x0918, 0x091e, 0x0930, 0x0936, 0x093c, 0x0944, 0x094b, - 0x0951, 0x096b, 0x0982, 0x098d, 0x0994, 0x099e, 0x09a7, 0x09c3, - 0x09cc, 0x09e7, 0x0a01, 0x0a08, 0x0a0f, 0x0a1f, 0x0a24, 0x0a2a, + 0x0784, 0x078c, 0x0791, 0x0799, 0x07a1, 0x07a8, 0x07ae, 0x07b6, + 0x07bc, 0x07c8, 0x07d5, 0x07df, 0x07e4, 0x07ea, 0x07f3, 0x07ff, + 0x0807, 0x0820, 0x0828, 0x0834, 0x083e, 0x0845, 0x084c, 0x0854, + 0x0860, 0x0877, 0x0882, 0x088e, 0x0894, 0x089c, 0x08ac, 0x08c2, + 0x08c7, 0x08e0, 0x08e4, 0x08eb, 0x08f7, 0x08fe, 0x0908, 0x0914, + 0x091b, 0x0920, 0x0926, 0x0938, 0x093e, 0x0944, 0x094c, 0x0953, + 0x0959, 0x0973, 0x098a, 0x0995, 0x099c, 0x09a6, 0x09af, 0x09cb, + 0x09d4, 0x09ef, 0x0a09, 0x0a10, 0x0a17, 0x0a27, 0x0a2c, 0x0a32, // Entry 100 - 13F - 0x0a2f, 0x0a36, 0x0a44, 0x0a4a, 0x0a52, 0x0a61, 0x0a68, 0x0a6f, - 0x0a7f, 0x0a8e, 0x0a95, 0x0aa3, 0x0ab1, 0x0abd, 0x0acc, 0x0ad9, - 0x0aeb, 0x0af3, 0x0b05, 0x0b0c, 0x0b16, 0x0b22, 0x0b30, 0x0b3f, - 0x0b4b, 0x0b54, 0x0b5e, 0x0b67, 0x0b6c, 0x0b77, 0x0b83, 0x0b8b, - 0x0b98, 0x0ba8, 0x0bb7, 0x0bcc, -} // Size: 608 bytes - -const filRegionStr string = "" + // Size: 3037 bytes - "Acsencion islandAndorraUnited Arab EmiratesAfghanistanAntigua and Barbud" + - "aAnguillaAlbaniaArmeniaAngolaAntarcticaArgentinaAmerican SamoaAustriaAus" + - "traliaArubaÅland IslandsAzerbaijanBosnia and HerzegovinaBarbadosBanglade" + - "shBelgiumBurkina FasoBulgariaBahrainBurundiBeninSaint BarthélemyBermudaB" + - "runeiBoliviaCaribbean NetherlandsBrazilBahamasBhutanBouvet IslandBotswan" + - "aBelarusBelizeCanadaCocos (Keeling) IslandsCongo - KinshasaCentral Afric" + - "an RepublicCongo - BrazzavilleSwitzerlandCôte d’IvoireCook IslandsChileC" + - "ameroonChinaColombiaClipperton IslandCosta RicaCubaCape VerdeCuraçaoChri" + - "stmas IslandCyprusCzech RepublicGermanyDiego GarciaDjiboutiDenmarkDomini" + - "caDominican RepublicAlgeriaCeuta and MelillaEcuadorEstoniaEgyptKanlurang" + - " SaharaEritreaSpainEthiopiaEuropean UnionFinlandFijiFalkland IslandsMicr" + - "onesiaFaroe IslandsFranceGabonUnited KingdomGrenadaGeorgiaFrench GuianaG" + - "uernseyGhanaGibraltarGreenlandGambiaGuineaGuadeloupeEquatorial GuineaGre" + - "eceSouth Georgia and the South Sandwich IslandsGuatemalaGuamGuinea-Bissa" + - "uGuyanaHong Kong SAR ChinaHeard Island and McDonald IslandsHondurasCroat" + - "iaHaitiHungaryCanary IslandsIndonesiaIrelandIsraelIsle of ManIndiaBritis" + - "h Indian Ocean TerritoryIraqIranIcelandItalyJerseyJamaicaJordanJapanKeny" + - "aKyrgyzstanCambodiaKiribatiComorosSaint Kitts and NevisHilagang KoreaTim" + - "og KoreaKuwaitCayman IslandsKazakhstanLaosLebanonSaint LuciaLiechtenstei" + - "nSri LankaLiberiaLesothoLithuaniaLuxembourgLatviaLibyaMoroccoMonacoMoldo" + - "vaMontenegroSaint MartinMadagascarMarshall IslandsMacedoniaMaliMyanmar (" + - "Burma)MongoliaMacau SAR ChinaNorthern Mariana IslandsMartiniqueMauritani" + - "aMontserratMaltaMauritiusMaldivesMalawiMexicoMalaysiaMozambiqueNamibiaNe" + - "w CaledoniaNigerNorfolk IslandNigeriaNicaraguaNetherlandsNorwayNepalNaur" + - "uNiueNew ZealandOmanPanamaPeruFrench PolynesiaPapua New GuineaPilipinasP" + - "akistanPolandSaint Pierre and MiquelonPitcairn IslandsPuerto RicoPalesti" + - "nian TerritoriesPortugalPalauParaguayQatarOutlying OceaniaRéunionRomania" + - "SerbiaRussiaRwandaSaudi ArabiaSolomon IslandsSeychellesSudanSwedenSingap" + - "oreSaint HelenaSloveniaSvalbard and Jan MayenSlovakiaSierra LeoneSan Mar" + - "inoSenegalSomaliaSurinameTimog SudanSão Tomé and PríncipeEl SalvadorSint" + - " MaartenSyriaSwazilandTristan de CunhaTurks and Caicos IslandsChadFrench" + - " Southern TerritoriesTogoThailandTajikistanTokelauTimor-LesteTurkmenista" + - "nTunisiaTongaTurkeyTrinidad and TobagoTuvaluTaiwanTanzaniaUkraineUgandaU" + - ".S. Outlying IslandsNagkakaisang BansaEstados UnidosUruguayUzbekistanVat" + - "ican CitySaint Vincent and the GrenadinesVenezuelaBritish Virgin Islands" + - "U.S. Virgin IslandsVietnamVanuatuWallis and FutunaSamoaKosovoYemenMayott" + - "eSouth AfricaZambiaZimbabweHindi Kilalang RehiyonMundoAfricaHilagang Ame" + - "rikaTimog AmerikaOceaniaKanlurang AfricaGitnang AmerikaSilangang AfricaH" + - "ilagang AfricaGitnang AfricaKatimugang AfricaAmericasNorthern AmericaCar" + - "ribbeanSilangang AsyaKatimugang AsyaTimog-Silangang AsyaKatimugang Europ" + - "eAustralasiaMelanesiaRehiyon ng MicronesiaPolynesiaAsyaGitnang AsyaKanlu" + - "rang AsyaEuropeSilangang EuropeHilagang EuropeKanlurang EuropeLatin Amer" + - "ica" - -var filRegionIdx = []uint16{ // 292 elements + 0x0a37, 0x0a3e, 0x0a4c, 0x0a52, 0x0a5a, 0x0a69, 0x0a70, 0x0a77, + 0x0a87, 0x0a96, 0x0a9d, 0x0aab, 0x0ab9, 0x0ac5, 0x0ad4, 0x0ae1, + 0x0af3, 0x0afb, 0x0b0d, 0x0b14, 0x0b1e, 0x0b2a, 0x0b38, 0x0b47, + 0x0b53, 0x0b5c, 0x0b66, 0x0b6f, 0x0b74, 0x0b7f, 0x0b8b, 0x0b93, + 0x0ba0, 0x0bb0, 0x0bbf, 0x0bbf, 0x0bd4, +} // Size: 610 bytes + +const filRegionStr string = "" + // Size: 2985 bytes + "Acsencion islandAndorraUnited Arab EmiratesAfghanistanAntigua & BarbudaA" + + "nguillaAlbaniaArmeniaAngolaAntarcticaArgentinaAmerican SamoaAustriaAustr" + + "aliaArubaÅland IslandsAzerbaijanBosnia and HerzegovinaBarbadosBangladesh" + + "BelgiumBurkina FasoBulgariaBahrainBurundiBeninSt. BarthélemyBermudaBrune" + + "iBoliviaCaribbean NetherlandsBrazilBahamasBhutanBouvet IslandBotswanaBel" + + "arusBelizeCanadaCocos (Keeling) IslandsCongo - KinshasaCentral African R" + + "epublicCongo - BrazzavilleSwitzerlandCôte d’IvoireCook IslandsChileCamer" + + "oonChinaColombiaClipperton IslandCosta RicaCubaCape VerdeCuraçaoChristma" + + "s IslandCyprusCzechiaGermanyDiego GarciaDjiboutiDenmarkDominicaDominican" + + " RepublicAlgeriaCeuta & MelillaEcuadorEstoniaEgyptKanlurang SaharaEritre" + + "aSpainEthiopiaEuropean UnionEurozoneFinlandFijiFalkland IslandsMicronesi" + + "aFaroe IslandsFranceGabonUnited KingdomGrenadaGeorgiaFrench GuianaGuerns" + + "eyGhanaGibraltarGreenlandGambiaGuineaGuadeloupeEquatorial GuineaGreeceSo" + + "uth Georgia & South Sandwich IslandsGuatemalaGuamGuinea-BissauGuyanaHong" + + " Kong SAR ChinaHeard & McDonald IslandsHondurasCroatiaHaitiHungaryCanary" + + " IslandsIndonesiaIrelandIsraelIsle of ManIndiaBritish Indian Ocean Terri" + + "toryIraqIranIcelandItalyJerseyJamaicaJordanJapanKenyaKyrgyzstanCambodiaK" + + "iribatiComorosSt. Kitts & NevisHilagang KoreaTimog KoreaKuwaitCayman Isl" + + "andsKazakhstanLaosLebanonSaint LuciaLiechtensteinSri LankaLiberiaLesotho" + + "LithuaniaLuxembourgLatviaLibyaMoroccoMonacoMoldovaMontenegroSaint Martin" + + "MadagascarMarshall IslandsMacedoniaMaliMyanmar (Burma)MongoliaMacau SAR " + + "ChinaNorthern Mariana IslandsMartiniqueMauritaniaMontserratMaltaMauritiu" + + "sMaldivesMalawiMexicoMalaysiaMozambiqueNamibiaNew CaledoniaNigerNorfolk " + + "IslandNigeriaNicaraguaNetherlandsNorwayNepalNauruNiueNew ZealandOmanPana" + + "maPeruFrench PolynesiaPapua New GuineaPilipinasPakistanPolandSt. Pierre " + + "& MiquelonPitcairn IslandsPuerto RicoPalestinian TerritoriesPortugalPala" + + "uParaguayQatarOutlying OceaniaRéunionRomaniaSerbiaRussiaRwandaSaudi Arab" + + "iaSolomon IslandsSeychellesSudanSwedenSingaporeSt. HelenaSloveniaSvalbar" + + "d & Jan MayenSlovakiaSierra LeoneSan MarinoSenegalSomaliaSurinameTimog S" + + "udanSão Tomé & PríncipeEl SalvadorSint MaartenSyriaSwazilandTristan de C" + + "unhaTurks & Caicos IslandsChadFrench Southern TerritoriesTogoThailandTaj" + + "ikistanTokelauTimor-LesteTurkmenistanTunisiaTongaTurkeyTrinidad & Tobago" + + "TuvaluTaiwanTanzaniaUkraineUgandaU.S. Outlying IslandsUnited NationsEsta" + + "dos UnidosUruguayUzbekistanVatican CitySt. Vincent & GrenadinesVenezuela" + + "British Virgin IslandsU.S. Virgin IslandsVietnamVanuatuWallis & FutunaSa" + + "moaKosovoYemenMayotteSouth AfricaZambiaZimbabweHindi Kilalang RehiyonMun" + + "doAfricaHilagang AmerikaTimog AmerikaOceaniaKanlurang AfricaGitnang Amer" + + "ikaSilangang AfricaHilagang AfricaGitnang AfricaKatimugang AfricaAmerica" + + "sNorthern AmericaCarribbeanSilangang AsyaKatimugang AsyaTimog-Silangang " + + "AsyaKatimugang EuropeAustralasiaMelanesiaRehiyon ng MicronesiaPolynesiaA" + + "syaGitnang AsyaKanlurang AsyaEuropeSilangang EuropeHilagang EuropeKanlur" + + "ang EuropeLatin America" + +var filRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F - 0x0000, 0x0010, 0x0017, 0x002b, 0x0036, 0x0049, 0x0051, 0x0058, - 0x005f, 0x0065, 0x006f, 0x0078, 0x0086, 0x008d, 0x0096, 0x009b, - 0x00a9, 0x00b3, 0x00c9, 0x00d1, 0x00db, 0x00e2, 0x00ee, 0x00f6, - 0x00fd, 0x0104, 0x0109, 0x011a, 0x0121, 0x0127, 0x012e, 0x0143, - 0x0149, 0x0150, 0x0156, 0x0163, 0x016b, 0x0172, 0x0178, 0x017e, - 0x0195, 0x01a5, 0x01bd, 0x01d0, 0x01db, 0x01eb, 0x01f7, 0x01fc, - 0x0204, 0x0209, 0x0211, 0x0222, 0x022c, 0x0230, 0x023a, 0x0242, - 0x0252, 0x0258, 0x0266, 0x026d, 0x0279, 0x0281, 0x0288, 0x0290, + 0x0000, 0x0010, 0x0017, 0x002b, 0x0036, 0x0047, 0x004f, 0x0056, + 0x005d, 0x0063, 0x006d, 0x0076, 0x0084, 0x008b, 0x0094, 0x0099, + 0x00a7, 0x00b1, 0x00c7, 0x00cf, 0x00d9, 0x00e0, 0x00ec, 0x00f4, + 0x00fb, 0x0102, 0x0107, 0x0116, 0x011d, 0x0123, 0x012a, 0x013f, + 0x0145, 0x014c, 0x0152, 0x015f, 0x0167, 0x016e, 0x0174, 0x017a, + 0x0191, 0x01a1, 0x01b9, 0x01cc, 0x01d7, 0x01e7, 0x01f3, 0x01f8, + 0x0200, 0x0205, 0x020d, 0x021e, 0x0228, 0x022c, 0x0236, 0x023e, + 0x024e, 0x0254, 0x025b, 0x0262, 0x026e, 0x0276, 0x027d, 0x0285, // Entry 40 - 7F - 0x02a2, 0x02a9, 0x02ba, 0x02c1, 0x02c8, 0x02cd, 0x02dd, 0x02e4, - 0x02e9, 0x02f1, 0x02ff, 0x02ff, 0x0306, 0x030a, 0x031a, 0x0324, - 0x0331, 0x0337, 0x033c, 0x034a, 0x0351, 0x0358, 0x0365, 0x036d, - 0x0372, 0x037b, 0x0384, 0x038a, 0x0390, 0x039a, 0x03ab, 0x03b1, - 0x03dd, 0x03e6, 0x03ea, 0x03f7, 0x03fd, 0x0410, 0x0431, 0x0439, - 0x0440, 0x0445, 0x044c, 0x045a, 0x0463, 0x046a, 0x0470, 0x047b, - 0x0480, 0x049e, 0x04a2, 0x04a6, 0x04ad, 0x04b2, 0x04b8, 0x04bf, - 0x04c5, 0x04ca, 0x04cf, 0x04d9, 0x04e1, 0x04e9, 0x04f0, 0x0505, + 0x0297, 0x029e, 0x02ad, 0x02b4, 0x02bb, 0x02c0, 0x02d0, 0x02d7, + 0x02dc, 0x02e4, 0x02f2, 0x02fa, 0x0301, 0x0305, 0x0315, 0x031f, + 0x032c, 0x0332, 0x0337, 0x0345, 0x034c, 0x0353, 0x0360, 0x0368, + 0x036d, 0x0376, 0x037f, 0x0385, 0x038b, 0x0395, 0x03a6, 0x03ac, + 0x03d2, 0x03db, 0x03df, 0x03ec, 0x03f2, 0x0405, 0x041d, 0x0425, + 0x042c, 0x0431, 0x0438, 0x0446, 0x044f, 0x0456, 0x045c, 0x0467, + 0x046c, 0x048a, 0x048e, 0x0492, 0x0499, 0x049e, 0x04a4, 0x04ab, + 0x04b1, 0x04b6, 0x04bb, 0x04c5, 0x04cd, 0x04d5, 0x04dc, 0x04ed, // Entry 80 - BF - 0x0513, 0x051e, 0x0524, 0x0532, 0x053c, 0x0540, 0x0547, 0x0552, - 0x055f, 0x0568, 0x056f, 0x0576, 0x057f, 0x0589, 0x058f, 0x0594, - 0x059b, 0x05a1, 0x05a8, 0x05b2, 0x05be, 0x05c8, 0x05d8, 0x05e1, - 0x05e5, 0x05f4, 0x05fc, 0x060b, 0x0623, 0x062d, 0x0637, 0x0641, - 0x0646, 0x064f, 0x0657, 0x065d, 0x0663, 0x066b, 0x0675, 0x067c, - 0x0689, 0x068e, 0x069c, 0x06a3, 0x06ac, 0x06b7, 0x06bd, 0x06c2, - 0x06c7, 0x06cb, 0x06d6, 0x06da, 0x06e0, 0x06e4, 0x06f4, 0x0704, - 0x070d, 0x0715, 0x071b, 0x0734, 0x0744, 0x074f, 0x0766, 0x076e, + 0x04fb, 0x0506, 0x050c, 0x051a, 0x0524, 0x0528, 0x052f, 0x053a, + 0x0547, 0x0550, 0x0557, 0x055e, 0x0567, 0x0571, 0x0577, 0x057c, + 0x0583, 0x0589, 0x0590, 0x059a, 0x05a6, 0x05b0, 0x05c0, 0x05c9, + 0x05cd, 0x05dc, 0x05e4, 0x05f3, 0x060b, 0x0615, 0x061f, 0x0629, + 0x062e, 0x0637, 0x063f, 0x0645, 0x064b, 0x0653, 0x065d, 0x0664, + 0x0671, 0x0676, 0x0684, 0x068b, 0x0694, 0x069f, 0x06a5, 0x06aa, + 0x06af, 0x06b3, 0x06be, 0x06c2, 0x06c8, 0x06cc, 0x06dc, 0x06ec, + 0x06f5, 0x06fd, 0x0703, 0x0718, 0x0728, 0x0733, 0x074a, 0x0752, // Entry C0 - FF - 0x0773, 0x077b, 0x0780, 0x0790, 0x0798, 0x079f, 0x07a5, 0x07ab, - 0x07b1, 0x07bd, 0x07cc, 0x07d6, 0x07db, 0x07e1, 0x07ea, 0x07f6, - 0x07fe, 0x0814, 0x081c, 0x0828, 0x0832, 0x0839, 0x0840, 0x0848, - 0x0853, 0x086b, 0x0876, 0x0882, 0x0887, 0x0890, 0x08a0, 0x08b8, - 0x08bc, 0x08d7, 0x08db, 0x08e3, 0x08ed, 0x08f4, 0x08ff, 0x090b, - 0x0912, 0x0917, 0x091d, 0x0930, 0x0936, 0x093c, 0x0944, 0x094b, - 0x0951, 0x0966, 0x0978, 0x0986, 0x098d, 0x0997, 0x09a3, 0x09c3, - 0x09cc, 0x09e2, 0x09f5, 0x09fc, 0x0a03, 0x0a14, 0x0a19, 0x0a1f, + 0x0757, 0x075f, 0x0764, 0x0774, 0x077c, 0x0783, 0x0789, 0x078f, + 0x0795, 0x07a1, 0x07b0, 0x07ba, 0x07bf, 0x07c5, 0x07ce, 0x07d8, + 0x07e0, 0x07f4, 0x07fc, 0x0808, 0x0812, 0x0819, 0x0820, 0x0828, + 0x0833, 0x0849, 0x0854, 0x0860, 0x0865, 0x086e, 0x087e, 0x0894, + 0x0898, 0x08b3, 0x08b7, 0x08bf, 0x08c9, 0x08d0, 0x08db, 0x08e7, + 0x08ee, 0x08f3, 0x08f9, 0x090a, 0x0910, 0x0916, 0x091e, 0x0925, + 0x092b, 0x0940, 0x094e, 0x095c, 0x0963, 0x096d, 0x0979, 0x0991, + 0x099a, 0x09b0, 0x09c3, 0x09ca, 0x09d1, 0x09e0, 0x09e5, 0x09eb, // Entry 100 - 13F - 0x0a24, 0x0a2b, 0x0a37, 0x0a3d, 0x0a45, 0x0a5b, 0x0a60, 0x0a66, - 0x0a76, 0x0a83, 0x0a8a, 0x0a9a, 0x0aa9, 0x0ab9, 0x0ac8, 0x0ad6, - 0x0ae7, 0x0aef, 0x0aff, 0x0b09, 0x0b17, 0x0b26, 0x0b3a, 0x0b4b, - 0x0b56, 0x0b5f, 0x0b74, 0x0b7d, 0x0b81, 0x0b8d, 0x0b9b, 0x0ba1, - 0x0bb1, 0x0bc0, 0x0bd0, 0x0bdd, -} // Size: 608 bytes - -const frRegionStr string = "" + // Size: 3320 bytes + 0x09f0, 0x09f7, 0x0a03, 0x0a09, 0x0a11, 0x0a27, 0x0a2c, 0x0a32, + 0x0a42, 0x0a4f, 0x0a56, 0x0a66, 0x0a75, 0x0a85, 0x0a94, 0x0aa2, + 0x0ab3, 0x0abb, 0x0acb, 0x0ad5, 0x0ae3, 0x0af2, 0x0b06, 0x0b17, + 0x0b22, 0x0b2b, 0x0b40, 0x0b49, 0x0b4d, 0x0b59, 0x0b67, 0x0b6d, + 0x0b7d, 0x0b8c, 0x0b9c, 0x0b9c, 0x0ba9, +} // Size: 610 bytes + +const frRegionStr string = "" + // Size: 3315 bytes "Île de l’AscensionAndorreÉmirats arabes unisAfghanistanAntigua-et-Barbud" + "aAnguillaAlbanieArménieAngolaAntarctiqueArgentineSamoa américainesAutric" + "heAustralieArubaÎles ÅlandAzerbaïdjanBosnie-HerzégovineBarbadeBangladesh" + @@ -44954,46 +47714,46 @@ const frRegionStr string = "" + // Size: 3320 bytes "runéi DarussalamBoliviePays-Bas caribéensBrésilBahamasBhoutanÎle BouvetB" + "otswanaBiélorussieBelizeCanadaÎles CocosCongo-KinshasaRépublique centraf" + "ricaineCongo-BrazzavilleSuisseCôte d’IvoireÎles CookChiliCamerounChineCo" + - "lombieÎle ClippertonCosta RicaCubaCap-VertCuraçaoÎle ChristmasChypreRépu" + - "blique tchèqueAllemagneDiego GarciaDjiboutiDanemarkDominiqueRépublique d" + - "ominicaineAlgérieCeuta et MelillaÉquateurEstonieÉgypteSahara occidentalÉ" + - "rythréeEspagneÉthiopieUnion européenneFinlandeFidjiÎles MalouinesÉtats f" + - "édérés de MicronésieÎles FéroéFranceGabonRoyaume-UniGrenadeGéorgieGuyan" + - "e françaiseGuerneseyGhanaGibraltarGroenlandGambieGuinéeGuadeloupeGuinée " + - "équatorialeGrèceGéorgie du Sud et îles Sandwich du SudGuatemalaGuamGuin" + - "ée-BissauGuyanaR.A.S. chinoise de Hong KongÎles Heard et McDonaldHondur" + - "asCroatieHaïtiHongrieÎles CanariesIndonésieIrlandeIsraëlÎle de ManIndeTe" + - "rritoire britannique de l’océan IndienIrakIranIslandeItalieJerseyJamaïqu" + - "eJordanieJaponKenyaKirghizistanCambodgeKiribatiComoresSaint-Christophe-e" + - "t-NiévèsCorée du NordCorée du SudKoweïtÎles CaïmansKazakhstanLaosLibanSa" + - "inte-LucieLiechtensteinSri LankaLibériaLesothoLituanieLuxembourgLettonie" + - "LibyeMarocMonacoMoldavieMonténégroSaint-MartinMadagascarÎles MarshallMac" + - "édoineMaliMyanmar (Birmanie)MongolieR.A.S. chinoise de MacaoÎles Marian" + - "nes du NordMartiniqueMauritanieMontserratMalteMauriceMaldivesMalawiMexiq" + - "ueMalaisieMozambiqueNamibieNouvelle-CalédonieNigerÎle NorfolkNigériaNica" + - "raguaPays-BasNorvègeNépalNauruNiueNouvelle-ZélandeOmanPanamaPérouPolynés" + - "ie françaisePapouasie-Nouvelle-GuinéePhilippinesPakistanPologneSaint-Pie" + - "rre-et-MiquelonÎles PitcairnPorto RicoTerritoires palestiniensPortugalPa" + - "laosParaguayQatarrégions éloignées de l’OcéanieLa RéunionRoumanieSerbieR" + - "ussieRwandaArabie saouditeÎles SalomonSeychellesSoudanSuèdeSingapourSain" + - "te-HélèneSlovénieSvalbard et Jan MayenSlovaquieSierra LeoneSaint-MarinSé" + - "négalSomalieSurinameSoudan du SudSao Tomé-et-PrincipeEl SalvadorSaint-Ma" + - "rtin (partie néerlandaise)SyrieSwazilandTristan da CunhaÎles Turques-et-" + - "CaïquesTchadTerres australes françaisesTogoThaïlandeTadjikistanTokélaouT" + - "imor orientalTurkménistanTunisieTongaTurquieTrinité-et-TobagoTuvaluTaïwa" + - "nTanzanieUkraineOugandaÎles mineures éloignées des États-UnisNations Uni" + - "esÉtats-UnisUruguayOuzbékistanÉtat de la Cité du VaticanSaint-Vincent-et" + - "-les-GrenadinesVenezuelaÎles Vierges britanniquesÎles Vierges des États-" + - "UnisVietnamVanuatuWallis-et-FutunaSamoaKosovoYémenMayotteAfrique du SudZ" + - "ambieZimbabwerégion indéterminéeMondeAfriqueAmérique du NordAmérique du " + - "SudOcéanieAfrique occidentaleAmérique centraleAfrique orientaleAfrique s" + - "eptentrionaleAfrique centraleAfrique australeAmériquesAmérique septentri" + - "onaleCaraïbesAsie orientaleAsie du SudAsie du Sud-EstEurope méridionaleA" + - "ustralasieMélanésierégion micronésiennePolynésieAsieAsie centraleAsie oc" + - "cidentaleEuropeEurope de l’EstEurope septentrionaleEurope occidentaleAmé" + - "rique latine" - -var frRegionIdx = []uint16{ // 292 elements + "lombieÎle ClippertonCosta RicaCubaCap-VertCuraçaoÎle ChristmasChypreTché" + + "quieAllemagneDiego GarciaDjiboutiDanemarkDominiqueRépublique dominicaine" + + "AlgérieCeuta et MelillaÉquateurEstonieÉgypteSahara occidentalÉrythréeEsp" + + "agneÉthiopieUnion européennezone euroFinlandeFidjiÎles MalouinesÉtats fé" + + "dérés de MicronésieÎles FéroéFranceGabonRoyaume-UniGrenadeGéorgieGuyane " + + "françaiseGuerneseyGhanaGibraltarGroenlandGambieGuinéeGuadeloupeGuinée éq" + + "uatorialeGrèceGéorgie du Sud et îles Sandwich du SudGuatemalaGuamGuinée-" + + "BissauGuyanaR.A.S. chinoise de Hong KongÎles Heard et McDonaldHondurasCr" + + "oatieHaïtiHongrieÎles CanariesIndonésieIrlandeIsraëlÎle de ManIndeTerrit" + + "oire britannique de l’océan IndienIrakIranIslandeItalieJerseyJamaïqueJor" + + "danieJaponKenyaKirghizistanCambodgeKiribatiComoresSaint-Christophe-et-Ni" + + "évèsCorée du NordCorée du SudKoweïtÎles CaïmansKazakhstanLaosLibanSaint" + + "e-LucieLiechtensteinSri LankaLibériaLesothoLituanieLuxembourgLettonieLib" + + "yeMarocMonacoMoldavieMonténégroSaint-MartinMadagascarÎles MarshallMacédo" + + "ineMaliMyanmar (Birmanie)MongolieR.A.S. chinoise de MacaoÎles Mariannes " + + "du NordMartiniqueMauritanieMontserratMalteMauriceMaldivesMalawiMexiqueMa" + + "laisieMozambiqueNamibieNouvelle-CalédonieNigerÎle NorfolkNigériaNicaragu" + + "aPays-BasNorvègeNépalNauruNiueNouvelle-ZélandeOmanPanamaPérouPolynésie f" + + "rançaisePapouasie-Nouvelle-GuinéePhilippinesPakistanPologneSaint-Pierre-" + + "et-MiquelonÎles PitcairnPorto RicoTerritoires palestiniensPortugalPalaos" + + "ParaguayQatarrégions éloignées de l’OcéanieLa RéunionRoumanieSerbieRussi" + + "eRwandaArabie saouditeÎles SalomonSeychellesSoudanSuèdeSingapourSainte-H" + + "élèneSlovénieSvalbard et Jan MayenSlovaquieSierra LeoneSaint-MarinSénég" + + "alSomalieSurinameSoudan du SudSao Tomé-et-PrincipeSalvadorSaint-Martin (" + + "partie néerlandaise)SyrieSwazilandTristan da CunhaÎles Turques-et-Caïque" + + "sTchadTerres australes françaisesTogoThaïlandeTadjikistanTokélaouTimor o" + + "rientalTurkménistanTunisieTongaTurquieTrinité-et-TobagoTuvaluTaïwanTanza" + + "nieUkraineOugandaÎles mineures éloignées des États-UnisNations UniesÉtat" + + "s-UnisUruguayOuzbékistanÉtat de la Cité du VaticanSaint-Vincent-et-les-G" + + "renadinesVenezuelaÎles Vierges britanniquesÎles Vierges des États-UnisVi" + + "etnamVanuatuWallis-et-FutunaSamoaKosovoYémenMayotteAfrique du SudZambieZ" + + "imbabwerégion indéterminéeMondeAfriqueAmérique du NordAmérique du SudOcé" + + "anieAfrique occidentaleAmérique centraleAfrique orientaleAfrique septent" + + "rionaleAfrique centraleAfrique australeAmériquesAmérique septentrionaleC" + + "araïbesAsie orientaleAsie du SudAsie du Sud-EstEurope méridionaleAustral" + + "asieMélanésierégion micronésiennePolynésieAsieAsie centraleAsie occident" + + "aleEuropeEurope de l’EstEurope septentrionaleEurope occidentaleAmérique " + + "latine" + +var frRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0015, 0x001c, 0x0030, 0x003b, 0x004d, 0x0055, 0x005c, 0x0064, 0x006a, 0x0075, 0x007e, 0x0090, 0x0098, 0x00a1, 0x00a6, @@ -45002,50 +47762,50 @@ var frRegionIdx = []uint16{ // 292 elements 0x015f, 0x0166, 0x016d, 0x0178, 0x0180, 0x018c, 0x0192, 0x0198, 0x01a3, 0x01b1, 0x01cb, 0x01dc, 0x01e2, 0x01f2, 0x01fc, 0x0201, 0x0209, 0x020e, 0x0216, 0x0225, 0x022f, 0x0233, 0x023b, 0x0243, - 0x0251, 0x0257, 0x026b, 0x0274, 0x0280, 0x0288, 0x0290, 0x0299, + 0x0251, 0x0257, 0x0260, 0x0269, 0x0275, 0x027d, 0x0285, 0x028e, // Entry 40 - 7F - 0x02b0, 0x02b8, 0x02c8, 0x02d1, 0x02d8, 0x02df, 0x02f0, 0x02fa, - 0x0301, 0x030a, 0x031b, 0x031b, 0x0323, 0x0328, 0x0337, 0x0357, - 0x0364, 0x036a, 0x036f, 0x037a, 0x0381, 0x0389, 0x039a, 0x03a3, - 0x03a8, 0x03b1, 0x03ba, 0x03c0, 0x03c7, 0x03d1, 0x03e5, 0x03eb, - 0x0413, 0x041c, 0x0420, 0x042e, 0x0434, 0x0450, 0x0467, 0x046f, - 0x0476, 0x047c, 0x0483, 0x0491, 0x049b, 0x04a2, 0x04a9, 0x04b4, - 0x04b8, 0x04e3, 0x04e7, 0x04eb, 0x04f2, 0x04f8, 0x04fe, 0x0507, - 0x050f, 0x0514, 0x0519, 0x0525, 0x052d, 0x0535, 0x053c, 0x0558, + 0x02a5, 0x02ad, 0x02bd, 0x02c6, 0x02cd, 0x02d4, 0x02e5, 0x02ef, + 0x02f6, 0x02ff, 0x0310, 0x0319, 0x0321, 0x0326, 0x0335, 0x0355, + 0x0362, 0x0368, 0x036d, 0x0378, 0x037f, 0x0387, 0x0398, 0x03a1, + 0x03a6, 0x03af, 0x03b8, 0x03be, 0x03c5, 0x03cf, 0x03e3, 0x03e9, + 0x0411, 0x041a, 0x041e, 0x042c, 0x0432, 0x044e, 0x0465, 0x046d, + 0x0474, 0x047a, 0x0481, 0x048f, 0x0499, 0x04a0, 0x04a7, 0x04b2, + 0x04b6, 0x04e1, 0x04e5, 0x04e9, 0x04f0, 0x04f6, 0x04fc, 0x0505, + 0x050d, 0x0512, 0x0517, 0x0523, 0x052b, 0x0533, 0x053a, 0x0556, // Entry 80 - BF - 0x0566, 0x0573, 0x057a, 0x0588, 0x0592, 0x0596, 0x059b, 0x05a7, - 0x05b4, 0x05bd, 0x05c5, 0x05cc, 0x05d4, 0x05de, 0x05e6, 0x05eb, - 0x05f0, 0x05f6, 0x05fe, 0x060a, 0x0616, 0x0620, 0x062e, 0x0638, - 0x063c, 0x064e, 0x0656, 0x066e, 0x0685, 0x068f, 0x0699, 0x06a3, - 0x06a8, 0x06af, 0x06b7, 0x06bd, 0x06c4, 0x06cc, 0x06d6, 0x06dd, - 0x06f0, 0x06f5, 0x0701, 0x0709, 0x0712, 0x071a, 0x0722, 0x0728, - 0x072d, 0x0731, 0x0742, 0x0746, 0x074c, 0x0752, 0x0767, 0x0781, - 0x078c, 0x0794, 0x079b, 0x07b3, 0x07c1, 0x07cb, 0x07e3, 0x07eb, + 0x0564, 0x0571, 0x0578, 0x0586, 0x0590, 0x0594, 0x0599, 0x05a5, + 0x05b2, 0x05bb, 0x05c3, 0x05ca, 0x05d2, 0x05dc, 0x05e4, 0x05e9, + 0x05ee, 0x05f4, 0x05fc, 0x0608, 0x0614, 0x061e, 0x062c, 0x0636, + 0x063a, 0x064c, 0x0654, 0x066c, 0x0683, 0x068d, 0x0697, 0x06a1, + 0x06a6, 0x06ad, 0x06b5, 0x06bb, 0x06c2, 0x06ca, 0x06d4, 0x06db, + 0x06ee, 0x06f3, 0x06ff, 0x0707, 0x0710, 0x0718, 0x0720, 0x0726, + 0x072b, 0x072f, 0x0740, 0x0744, 0x074a, 0x0750, 0x0765, 0x077f, + 0x078a, 0x0792, 0x0799, 0x07b1, 0x07bf, 0x07c9, 0x07e1, 0x07e9, // Entry C0 - FF - 0x07f1, 0x07f9, 0x07fe, 0x0822, 0x082d, 0x0835, 0x083b, 0x0841, - 0x0847, 0x0856, 0x0863, 0x086d, 0x0873, 0x0879, 0x0882, 0x0891, - 0x089a, 0x08af, 0x08b8, 0x08c4, 0x08cf, 0x08d8, 0x08df, 0x08e7, - 0x08f4, 0x0909, 0x0914, 0x0937, 0x093c, 0x0945, 0x0955, 0x096e, - 0x0973, 0x098f, 0x0993, 0x099d, 0x09a8, 0x09b1, 0x09bf, 0x09cc, - 0x09d3, 0x09d8, 0x09df, 0x09f1, 0x09f7, 0x09fe, 0x0a06, 0x0a0d, - 0x0a14, 0x0a3e, 0x0a4b, 0x0a56, 0x0a5d, 0x0a69, 0x0a85, 0x0aa4, - 0x0aad, 0x0ac7, 0x0ae4, 0x0aeb, 0x0af2, 0x0b02, 0x0b07, 0x0b0d, + 0x07ef, 0x07f7, 0x07fc, 0x0820, 0x082b, 0x0833, 0x0839, 0x083f, + 0x0845, 0x0854, 0x0861, 0x086b, 0x0871, 0x0877, 0x0880, 0x088f, + 0x0898, 0x08ad, 0x08b6, 0x08c2, 0x08cd, 0x08d6, 0x08dd, 0x08e5, + 0x08f2, 0x0907, 0x090f, 0x0932, 0x0937, 0x0940, 0x0950, 0x0969, + 0x096e, 0x098a, 0x098e, 0x0998, 0x09a3, 0x09ac, 0x09ba, 0x09c7, + 0x09ce, 0x09d3, 0x09da, 0x09ec, 0x09f2, 0x09f9, 0x0a01, 0x0a08, + 0x0a0f, 0x0a39, 0x0a46, 0x0a51, 0x0a58, 0x0a64, 0x0a80, 0x0a9f, + 0x0aa8, 0x0ac2, 0x0adf, 0x0ae6, 0x0aed, 0x0afd, 0x0b02, 0x0b08, // Entry 100 - 13F - 0x0b13, 0x0b1a, 0x0b28, 0x0b2e, 0x0b36, 0x0b4c, 0x0b51, 0x0b58, - 0x0b69, 0x0b79, 0x0b81, 0x0b94, 0x0ba6, 0x0bb7, 0x0bcd, 0x0bdd, - 0x0bed, 0x0bf7, 0x0c0f, 0x0c18, 0x0c26, 0x0c31, 0x0c40, 0x0c53, - 0x0c5e, 0x0c69, 0x0c7f, 0x0c89, 0x0c8d, 0x0c9a, 0x0caa, 0x0cb0, - 0x0cc1, 0x0cd6, 0x0ce8, 0x0cf8, -} // Size: 608 bytes - -const frCARegionStr string = "" + // Size: 492 bytes + 0x0b0e, 0x0b15, 0x0b23, 0x0b29, 0x0b31, 0x0b47, 0x0b4c, 0x0b53, + 0x0b64, 0x0b74, 0x0b7c, 0x0b8f, 0x0ba1, 0x0bb2, 0x0bc8, 0x0bd8, + 0x0be8, 0x0bf2, 0x0c0a, 0x0c13, 0x0c21, 0x0c2c, 0x0c3b, 0x0c4e, + 0x0c59, 0x0c64, 0x0c7a, 0x0c84, 0x0c88, 0x0c95, 0x0ca5, 0x0cab, + 0x0cbc, 0x0cd1, 0x0ce3, 0x0ce3, 0x0cf3, +} // Size: 610 bytes + +const frCARegionStr string = "" + // Size: 535 bytes "île de l’Ascensionîles d’ÅlandBruneiîle BouvetBélarusîles Cocos (Keeling" + ")îles Cookîle Christmasîles MalouinesMicronésieîles Féroéîles Heard et M" + - "cDonaldîles Canariesîle de ManSaint-Martin (France)MyanmarMariannes du N" + - "ordîle Norfolkîles PitcairnOcéanie lointainela RéunionSaint-Martin (Pays" + - "-Bas)TokelauTimor-Lesteîles mineures éloignées des États-UnisCité du Vat" + - "icanSaint-Vincent-et-les Grenadinesîles Vierges britanniquesîles Vierges" + - " américainesEurope orientale" + "cDonaldîles Canariesîle de Manterritoire britannique de l’océan IndienSa" + + "int-Martin (France)MyanmarMariannes du Nordîle Norfolkîles PitcairnOcéan" + + "ie lointainela RéunionSaint-Martin (Pays-Bas)TokelauTimor-Lesteîles mine" + + "ures éloignées des États-UnisCité du VaticanSaint-Vincent-et-les Grenadi" + + "nesîles Vierges britanniquesîles Vierges américainesEurope orientale" var frCARegionIdx = []uint16{ // 289 elements // Entry 0 - 3F @@ -45064,176 +47824,177 @@ var frCARegionIdx = []uint16{ // 289 elements 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x0092, 0x00a9, 0x00a9, 0x00a9, 0x00a9, 0x00a9, 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00c2, - 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, - 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, + 0x00c2, 0x00ed, 0x00ed, 0x00ed, 0x00ed, 0x00ed, 0x00ed, 0x00ed, + 0x00ed, 0x00ed, 0x00ed, 0x00ed, 0x00ed, 0x00ed, 0x00ed, 0x00ed, // Entry 80 - BF - 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, - 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00c2, - 0x00c2, 0x00c2, 0x00c2, 0x00c2, 0x00d7, 0x00d7, 0x00d7, 0x00d7, - 0x00d7, 0x00de, 0x00de, 0x00de, 0x00ef, 0x00ef, 0x00ef, 0x00ef, - 0x00ef, 0x00ef, 0x00ef, 0x00ef, 0x00ef, 0x00ef, 0x00ef, 0x00ef, - 0x00ef, 0x00ef, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, - 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00fb, - 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x0109, 0x0109, 0x0109, 0x0109, - // Entry C0 - FF - 0x0109, 0x0109, 0x0109, 0x011b, 0x0126, 0x0126, 0x0126, 0x0126, - 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, + 0x00ed, 0x00ed, 0x00ed, 0x00ed, 0x00ed, 0x00ed, 0x00ed, 0x00ed, + 0x00ed, 0x00ed, 0x00ed, 0x00ed, 0x00ed, 0x00ed, 0x00ed, 0x00ed, + 0x00ed, 0x00ed, 0x00ed, 0x00ed, 0x0102, 0x0102, 0x0102, 0x0102, + 0x0102, 0x0109, 0x0109, 0x0109, 0x011a, 0x011a, 0x011a, 0x011a, + 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, 0x011a, + 0x011a, 0x011a, 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, 0x0126, - 0x0126, 0x0126, 0x0126, 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, - 0x013d, 0x013d, 0x013d, 0x013d, 0x013d, 0x0144, 0x014f, 0x014f, - 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, 0x014f, - 0x014f, 0x0179, 0x0179, 0x0179, 0x0179, 0x0179, 0x0189, 0x01a8, - 0x01a8, 0x01c2, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, + 0x0126, 0x0126, 0x0126, 0x0126, 0x0134, 0x0134, 0x0134, 0x0134, + // Entry C0 - FF + 0x0134, 0x0134, 0x0134, 0x0146, 0x0151, 0x0151, 0x0151, 0x0151, + 0x0151, 0x0151, 0x0151, 0x0151, 0x0151, 0x0151, 0x0151, 0x0151, + 0x0151, 0x0151, 0x0151, 0x0151, 0x0151, 0x0151, 0x0151, 0x0151, + 0x0151, 0x0151, 0x0151, 0x0168, 0x0168, 0x0168, 0x0168, 0x0168, + 0x0168, 0x0168, 0x0168, 0x0168, 0x0168, 0x016f, 0x017a, 0x017a, + 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, + 0x017a, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01b4, 0x01d3, + 0x01d3, 0x01ed, 0x0207, 0x0207, 0x0207, 0x0207, 0x0207, 0x0207, // Entry 100 - 13F - 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, - 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, - 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, - 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, 0x01dc, - 0x01ec, + 0x0207, 0x0207, 0x0207, 0x0207, 0x0207, 0x0207, 0x0207, 0x0207, + 0x0207, 0x0207, 0x0207, 0x0207, 0x0207, 0x0207, 0x0207, 0x0207, + 0x0207, 0x0207, 0x0207, 0x0207, 0x0207, 0x0207, 0x0207, 0x0207, + 0x0207, 0x0207, 0x0207, 0x0207, 0x0207, 0x0207, 0x0207, 0x0207, + 0x0217, } // Size: 602 bytes -const guRegionStr string = "" + // Size: 8703 bytes - "એસેન્શન આઇલેન્ડઍંડોરાયુનાઇટેડ આરબ અમીરાતઅફઘાનિસ્તાનએન્ટીગુઆ અને બર્મુડાઍ" + - "ંગ્વિલાઅલ્બેનિયાઆર્મેનિયાઅંગોલાએન્ટાર્કટિકાઆર્જેન્ટીનાઅમેરીકન સમોઆઑસ્ટ" + - "્રિયાઑસ્ટ્રેલિયાઅરુબાએલેંડ ટાપુઓઅઝરબૈજાનબોસ્નિયા અને હર્ઝેગોવિનાબાર્બા" + - "ડોસબાંગ્લાદેશબેલ્જીયમબુર્કિના ફાસોબલ્ગેરિયાબેહરીનબુરુંડીબેનિનસેન્ટ બાર" + - "્થેલેમીબર્મુડાબ્રુનેઇબોલિવિયાકેરેબિયન નેધરલેન્ડ્ઝબ્રાઝિલબહામાસભૂટાનબૌવ" + - "ેત આઇલેન્ડબોત્સ્વાનાબેલારુસબેલીઝકેનેડાકોકોઝ (કીલીંગ) આઇલેન્ડ્સકોંગો - " + - "કિંશાસાસેન્ટ્રલ આફ્રિકન રીપબ્લિકકોંગો - બ્રાઝાવિલેસ્વિટ્ઝર્લૅન્ડકોટ ડી" + - " આઇવરીકુક આઇલેન્ડ્સચિલીકૅમરૂનચીનકોલમ્બિયાક્લિપરટન આઇલેન્ડકોસ્ટા રિકાક્યુ" + - "બાકૅપ વર્ડેક્યુરાસાઓક્રિસમસ આઇલેન્ડસાયપ્રસચેક રીપબ્લિકજર્મનીડિએગો ગારસ" + - "િઆજીબૌટીડેનમાર્કડોમિનિકાડોમિનિકન રીપબ્લિકઅલ્જીરિયાસ્યુટા અને મેલિલાએક્" + - "વાડોરએસ્ટોનિયાઇજિપ્તપશ્ચિમી સહારાએરિટ્રિયાસ્પેનઇથિઓપિયાયુરોપિયન સંઘફિન" + - "લેન્ડફીજીફૉકલેન્ડ ટાપુઓમાઇક્રોનેશિયાફૅરો ટાપુઓફ્રાંસગેબનયુનાઇટેડ કિંગડ" + - "મગ્રેનેડાજ્યોર્જીયાફ્રેંચ ગયાનાગ્વેર્નસેઘાનાજીબ્રાલ્ટરગ્રીનલેન્ડગેમ્બિ" + - "યાગિનીગ્વાડેલોપઇક્વેટોરિયલ ગિનીગ્રીસદક્ષિણ જ્યોર્જીયા અને દક્ષિણ સેન્ડ" + - "વિચ આઇલેન્ડ્સગ્વાટેમાલાગ્વામગિની-બિસાઉગયાનાહોંગકોંગ SAR ચીનહર્ડ અને મે" + - "કડોનાલ્ડ આઇલેન્ડ્સહોન્ડુરસક્રોએશિયાહૈતિહંગેરીકૅનેરી ટાપુઓઇન્ડોનેશિયાઆય" + - "ર્લેન્ડઇઝરાઇલઆઈલ ઓફ મૅનભારતબ્રિટિશ ઇન્ડિયન ઓશન ટેરિટરીઇરાકઈરાનઆઇસલેન્ડ" + - "ઇટાલીજર્સીજમૈકાજોર્ડનજાપાનકેન્યાકિર્ગિઝ્સ્તાનકંબોડિયાકિરિબાટીકોમોરસસેન" + - "્ટ કિટ્સ અને નેવિસઉત્તર કોરિયાદક્ષિણ કોરિયાકુવૈતકેમેન ટાપુઓકઝાકિસ્તાનલ" + - "ાઓસલેબનોનસેન્ટ લુસિયાલૈચટેંસ્ટેઇનશ્રીલંકાલાઇબેરિયાલેસોથોલિથુઆનિયાલક્ઝમ" + - "બર્ગલાત્વિયાલિબિયામોરોક્કોમોનાકોમોલડોવામૉન્ટેંનેગ્રોસેન્ટ માર્ટિનમેડાગ" + - "ાસ્કરમાર્શલ આઇલેન્ડ્સમેસેડોનિયામાલીમ્યાંમાર (બર્મા)મંગોલિયામકાઉ SAR ચી" + - "નઉત્તરીય મારિયાના આઇલેન્ડ્સમાર્ટીનીકમૌરિટાનિયામોંટસેરાતમાલ્ટામોરિશિયસમ" + - "ાલદિવ્સમાલાવીમેક્સિકોમલેશિયામોઝામ્બિકનામિબિયાન્યુ સેલેડોનિયાનાઇજરનોરફૉ" + - "ક ટાપુનાઇજીરીયાનિકારાગુઆનેધરલેન્ડનૉર્વેનેપાળનૌરુનીયુન્યુઝીલેન્ડઓમાનપના" + - "માપેરુફ્રેંચ પોલિનેશિયાપાપુઆ ન્યૂ ગિનીફિલીપાઇન્સપાકિસ્તાનપોલેંડસેન્ટ પ" + - "િયર અને મીક્વેલનપીટકૈર્ન આઇલેન્ડ્સપ્યુઅર્ટો રિકોપેલેસ્ટિનિયન ટેરિટરીપો" + - "ર્ટુગલપલાઉપેરાગ્વેકતારઆઉટલાઈન્ગ ઓશનિયારીયુનિયનરોમાનિયાસર્બિયારશિયારવાં" + - "ડાસાઉદી અરેબિયાસોલોમન આઇલેન્ડ્સસેશેલ્સસુદાનસ્વીડનસિંગાપુરસેન્ટ હેલેનાસ" + - "્લોવેનિયાસ્વાલબર્ડ અને જેન મેયનસ્લોવેકિયાસીએરા લેઓનસૅન મેરિનોસેનેગલસોમ" + - "ાલિયાસુરીનામદક્ષિણ સુદાનસાઓ ટૉમ અને પ્રિંસિપેએલ સેલ્વાડોરસિંટ માર્ટેનસ" + - "ીરિયાસ્વાઝિલેન્ડત્રિસ્તાન દા કુન્હાતુર્ક્સ અને કાઇકોસ ટાપુઓચાડફ્રેંચ સ" + - "દર્ન ટેરિટરીઝટોગોથાઇલેંડતાજીકિસ્તાનટોકેલાઉતિમોર-લેસ્તેતુર્કમેનિસ્તાનટ્" + - "યુનિશિયાટોંગાતુર્કીટ્રિનીદાદ અને ટોબેગોતુવાલુતાઇવાનતાંઝાનિયાયુક્રેનયુગ" + - "ાંડાસંયુક્ત રાજ્ય આઉટલાઇંગ આયલેન્ડ્સસંયુક્ત રાષ્ટ્રસંયુકત રાજ્ય અમેરિક" + - "ાઉરુગ્વેઉઝ્બેકિસ્તાનવેટિકન સિટીસેન્ટ વિન્સેટ અને ગ્રેનેડીન્સવેનેઝુએલાબ" + - "્રિટિશ વર્જિન ટાપુઓયુ.એસ. વર્જિન ટાપુઓવિયેતનામવાનુઆતુવેલીસ અને ફ્યુટુન" + - "ાસમોઆકોસોવોયેમેનમેયોટદક્ષિણ આફ્રિકાઝામ્બિયાઝિમ્બાબ્વેઅજ્ઞાત પ્રદેશવિશ્" + - "વઆફ્રિકાઉત્તર અમેરિકાદક્ષિણ અમેરિકાઓશનિયાપશ્ચિમી આફ્રિકામધ્ય અમેરિકાપૂ" + - "ર્વીય આફ્રિકાઉત્તરીય આફ્રિકામધ્ય આફ્રિકાસધર્ન આફ્રિકાઅમેરિકાઉત્તરીય અમ" + - "ેરિકાકેરિબિયનપૂર્વીય એશિયાસર્ધન એશિયાદક્ષિણપૂર્વ એશિયાસધર્ન યુરોપઓસ્ટ્" + - "રેલેશિયામેલાનેશિયામાઈક્રોનેશિયન ક્ષેત્રપોલિનેશિયાએશિયામધ્ય એશિયાપશ્ચિમ" + - "ી એશિયાયુરોપપૂર્વીય યુરોપઉત્તરીય યુરોપપશ્ચિમ યુરોપલેટિન અમેરિકા" - -var guRegionIdx = []uint16{ // 292 elements +const guRegionStr string = "" + // Size: 8768 bytes + "એસેન્શન આઇલેન્ડઍંડોરાયુનાઇટેડ આરબ અમીરાતઅફઘાનિસ્તાનઍન્ટિગુઆ અને બર્મુડાઍ" + + "ંગ્વિલાઅલ્બેનિયાઆર્મેનિયાઅંગોલાએન્ટાર્કટિકાઆર્જેન્ટીનાઅમેરિકન સમોઆઑસ્ટ" + + "્રિયાઑસ્ટ્રેલિયાઅરુબાઑલેન્ડ આઇલેન્ડ્સઅઝરબૈજાનબોસ્નિયા અને હર્ઝેગોવિનાબ" + + "ારબાડોસબાંગ્લાદેશબેલ્જીયમબુર્કિના ફાસોબલ્ગેરિયાબેહરીનબુરુંડીબેનિનસેંટ " + + "બાર્થેલેમીબર્મુડાબ્રુનેઇબોલિવિયાકેરેબિયન નેધરલેન્ડ્ઝબ્રાઝિલબહામાસભૂટાન" + + "બૌવેત આઇલેન્ડબોત્સ્વાનાબેલારુસબેલીઝકેનેડાકોકોઝ (કીલીંગ) આઇલેન્ડ્સકોંગો" + + " - કિંશાસાસેન્ટ્રલ આફ્રિકન રિપબ્લિકકોંગો - બ્રાઝાવિલેસ્વિટ્ઝર્લૅન્ડકોટ ડ" + + "ીઆઇવરીકુક આઇલેન્ડ્સચિલીકૅમરૂનચીનકોલમ્બિયાક્લિપરટન આઇલેન્ડકોસ્ટા રિકાક્" + + "યુબાકૅપ વર્ડેક્યુરાસાઓક્રિસમસ આઇલેન્ડસાયપ્રસચેકીયાજર્મનીડિએગો ગારસિઆજી" + + "બૌટીડેનમાર્કડોમિનિકાડોમિનિકન રિપબ્લિકઅલ્જીરિયાસ્યુટા અને મેલિલાએક્વાડો" + + "રએસ્ટોનિયાઇજિપ્તપશ્ચિમી સહારાએરિટ્રિયાસ્પેનઇથિઓપિયાયુરોપિયન સંઘયુરોઝોન" + + "ફિનલેન્ડફીજીફૉકલેન્ડ આઇલેન્ડ્સમાઇક્રોનેશિયાફેરો આઇલેન્ડ્સફ્રાંસગેબનયુન" + + "ાઇટેડ કિંગડમગ્રેનેડાજ્યોર્જિયાફ્રેંચ ગયાનાગ્વેર્નસેઘાનાજીબ્રાલ્ટરગ્રીન" + + "લેન્ડગેમ્બિયાગિનીગ્વાડેલોપઇક્વેટોરિયલ ગિનીગ્રીસદક્ષિણ જ્યોર્જિયા અને દ" + + "ક્ષિણ સેન્ડવિચ આઇલેન્ડ્સગ્વાટેમાલાગ્વામગિની-બિસાઉગયાનાહોંગકોંગ SAR ચીન" + + "હર્ડ અને મેકડોનાલ્ડ આઇલેન્ડ્સહોન્ડુરસક્રોએશિયાહૈતિહંગેરીકૅનેરી આઇલેન્ડ" + + "્સઇન્ડોનેશિયાઆયર્લેન્ડઇઝરાઇલઆઇલ ઑફ મેનભારતબ્રિટિશ ઇન્ડિયન ઓશન ટેરિટરીઇ" + + "રાકઈરાનઆઇસલેન્ડઇટાલીજર્સીજમૈકાજોર્ડનજાપાનકેન્યાકિર્ગિઝ્સ્તાનકંબોડિયાકિ" + + "રિબાટીકોમોરસસેંટ કિટ્સ અને નેવિસઉત્તર કોરિયાદક્ષિણ કોરિયાકુવૈતકેમેન આઇ" + + "લેન્ડ્સકઝાકિસ્તાનલાઓસલેબનોનસેંટ લુસિયાલૈચટેંસ્ટેઇનશ્રીલંકાલાઇબેરિયાલેસ" + + "ોથોલિથુઆનિયાલક્ઝમબર્ગલાત્વિયાલિબિયામોરોક્કોમોનાકોમોલડોવામૉન્ટેનેગ્રોસે" + + "ંટ માર્ટિનમેડાગાસ્કરમાર્શલ આઇલેન્ડ્સમેસેડોનિયામાલીમ્યાંમાર (બર્મા)મંગો" + + "લિયામકાઉ SAR ચીનઉત્તરી મારિયાના આઇલેન્ડ્સમાર્ટીનીકમૌરિટાનિયામોંટસેરાતમ" + + "ાલ્ટામોરિશિયસમાલદિવ્સમાલાવીમેક્સિકોમલેશિયામોઝામ્બિકનામિબિયાન્યુ સેલેડો" + + "નિયાનાઇજરનોરફોક આઇલેન્ડ્સનાઇજેરિયાનિકારાગુઆનેધરલેન્ડ્સનૉર્વેનેપાળનૌરુન" + + "ીયુન્યુઝીલેન્ડઓમાનપનામાપેરુફ્રેંચ પોલિનેશિયાપાપુઆ ન્યૂ ગિનીફિલિપિન્સપા" + + "કિસ્તાનપોલેંડસેંટ પીએરી અને મિક્યુલોનપીટકૈર્ન આઇલેન્ડ્સપ્યુઅર્ટો રિકોપ" + + "ેલેસ્ટિનિયન ટેરિટરીપોર્ટુગલપલાઉપેરાગ્વેકતારઆઉટલાઈન્ગ ઓશનિયારીયુનિયનરોમ" + + "ાનિયાસર્બિયારશિયારવાંડાસાઉદી અરેબિયાસોલોમન આઇલેન્ડ્સસેશેલ્સસુદાનસ્વીડન" + + "સિંગાપુરસેંટ હેલેનાસ્લોવેનિયાસ્વાલબર્ડ અને જેન મેયનસ્લોવેકિયાસીએરા લેઓ" + + "નસૅન મેરિનોસેનેગલસોમાલિયાસુરીનામદક્ષિણ સુદાનસાઓ ટૉમ અને પ્રિંસિપેએલ સે" + + "લ્વાડોરસિંટ માર્ટેનસીરિયાસ્વાઝિલેન્ડત્રિસ્તાન દા કુન્હાતુર્ક્સ અને કેક" + + "ોઝ આઇલેન્ડ્સચાડફ્રેંચ સધર્ન ટેરિટરીઝટોગોથાઇલેંડતાજીકિસ્તાનટોકેલાઉતિમોર" + + "-લેસ્તેતુર્કમેનિસ્તાનટ્યુનિશિયાટોંગાતુર્કીટ્રિનીદાદ અને ટોબેગોતુવાલુતાઇવ" + + "ાનતાંઝાનિયાયુક્રેનયુગાંડાયુ.એસ. આઉટલાઇનિંગ આઇલેન્ડ્સસંયુક્ત રાષ્ટ્રયુન" + + "ાઇટેડ સ્ટેટ્સઉરુગ્વેઉઝ્બેકિસ્તાનવેટિકન સિટીસેંટ વિન્સેંટ અને ગ્રેનેડાઇ" + + "ંસવેનેઝુએલાબ્રિટિશ વર્જિન આઇલેન્ડ્સયુએસ વર્જિન આઇલેન્ડ્સવિયેતનામવાનુઆત" + + "ુવૉલિસ અને ફ્યુચુનાસમોઆકોસોવોયમનમેયોટદક્ષિણ આફ્રિકાઝામ્બિયાઝિમ્બાબ્વેઅ" + + "જ્ઞાત પ્રદેશવિશ્વઆફ્રિકાઉત્તર અમેરિકાદક્ષિણ અમેરિકાઓશનિયાપશ્ચિમી આફ્રિ" + + "કામધ્ય અમેરિકાપૂર્વીય આફ્રિકાઉત્તરી આફ્રિકામધ્ય આફ્રિકાસધર્ન આફ્રિકાઅમ" + + "ેરિકાઉત્તરી અમેરિકાકેરિબિયનપૂર્વીય એશિયાદક્ષિણ એશિયાદક્ષિણપૂર્વ એશિયાદ" + + "ક્ષિણ યુરોપઓસ્ટ્રેલેશિયામેલાનેશિયામાઈક્રોનેશિયન ક્ષેત્રપોલિનેશિયાએશિયા" + + "મધ્ય એશિયાપશ્ચિમી એશિયાયુરોપપૂર્વીય યુરોપઉત્તરીય યુરોપપશ્ચિમી યુરોપલેટ" + + "િન અમેરિકા" + +var guRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x002b, 0x003d, 0x0072, 0x0093, 0x00cb, 0x00e3, 0x00fe, 0x0119, 0x012b, 0x014f, 0x0170, 0x0192, 0x01ad, 0x01ce, 0x01dd, - 0x01fc, 0x0214, 0x0258, 0x0273, 0x0291, 0x02a9, 0x02ce, 0x02e9, - 0x02fb, 0x0310, 0x031f, 0x034d, 0x0362, 0x0377, 0x038f, 0x03c9, - 0x03de, 0x03f0, 0x03ff, 0x0424, 0x0442, 0x0457, 0x0466, 0x0478, - 0x04b8, 0x04df, 0x0526, 0x0556, 0x0580, 0x05a0, 0x05c5, 0x05d1, - 0x05e3, 0x05ec, 0x0607, 0x0635, 0x0654, 0x0666, 0x067f, 0x069a, - 0x06c5, 0x06da, 0x06fc, 0x070e, 0x0730, 0x0742, 0x075a, 0x0772, + 0x020b, 0x0223, 0x0267, 0x027f, 0x029d, 0x02b5, 0x02da, 0x02f5, + 0x0307, 0x031c, 0x032b, 0x0356, 0x036b, 0x0380, 0x0398, 0x03d2, + 0x03e7, 0x03f9, 0x0408, 0x042d, 0x044b, 0x0460, 0x046f, 0x0481, + 0x04c1, 0x04e8, 0x052f, 0x055f, 0x0589, 0x05a8, 0x05cd, 0x05d9, + 0x05eb, 0x05f4, 0x060f, 0x063d, 0x065c, 0x066e, 0x0687, 0x06a2, + 0x06cd, 0x06e2, 0x06f4, 0x0706, 0x0728, 0x073a, 0x0752, 0x076a, // Entry 40 - 7F - 0x07a3, 0x07be, 0x07ed, 0x0805, 0x0820, 0x0832, 0x0857, 0x0872, - 0x0881, 0x0899, 0x08bb, 0x08bb, 0x08d3, 0x08df, 0x0907, 0x092e, - 0x094a, 0x095c, 0x0968, 0x0993, 0x09ab, 0x09c9, 0x09eb, 0x0a06, - 0x0a12, 0x0a30, 0x0a4e, 0x0a66, 0x0a72, 0x0a8d, 0x0abb, 0x0aca, - 0x0b4d, 0x0b6b, 0x0b7a, 0x0b96, 0x0ba5, 0x0bcb, 0x0c1c, 0x0c34, - 0x0c4f, 0x0c5b, 0x0c6d, 0x0c8f, 0x0cb0, 0x0ccb, 0x0cdd, 0x0cf7, - 0x0d03, 0x0d4e, 0x0d5a, 0x0d66, 0x0d7e, 0x0d8d, 0x0d9c, 0x0dab, - 0x0dbd, 0x0dcc, 0x0dde, 0x0e05, 0x0e1d, 0x0e35, 0x0e47, 0x0e80, + 0x079b, 0x07b6, 0x07e5, 0x07fd, 0x0818, 0x082a, 0x084f, 0x086a, + 0x0879, 0x0891, 0x08b3, 0x08c8, 0x08e0, 0x08ec, 0x0920, 0x0947, + 0x096f, 0x0981, 0x098d, 0x09b8, 0x09d0, 0x09ee, 0x0a10, 0x0a2b, + 0x0a37, 0x0a55, 0x0a73, 0x0a8b, 0x0a97, 0x0ab2, 0x0ae0, 0x0aef, + 0x0b72, 0x0b90, 0x0b9f, 0x0bbb, 0x0bca, 0x0bf0, 0x0c41, 0x0c59, + 0x0c74, 0x0c80, 0x0c92, 0x0cc0, 0x0ce1, 0x0cfc, 0x0d0e, 0x0d28, + 0x0d34, 0x0d7f, 0x0d8b, 0x0d97, 0x0daf, 0x0dbe, 0x0dcd, 0x0ddc, + 0x0dee, 0x0dfd, 0x0e0f, 0x0e36, 0x0e4e, 0x0e66, 0x0e78, 0x0eae, // Entry 80 - BF - 0x0ea2, 0x0ec7, 0x0ed6, 0x0ef5, 0x0f13, 0x0f1f, 0x0f31, 0x0f53, - 0x0f77, 0x0f8f, 0x0faa, 0x0fbc, 0x0fd7, 0x0ff2, 0x100a, 0x101c, - 0x1034, 0x1046, 0x105b, 0x1082, 0x10a7, 0x10c5, 0x10f3, 0x1111, - 0x111d, 0x1147, 0x115f, 0x1179, 0x11c3, 0x11de, 0x11fc, 0x1217, - 0x1229, 0x1241, 0x1259, 0x126b, 0x1283, 0x1298, 0x12b3, 0x12cb, - 0x12f6, 0x1305, 0x1324, 0x133f, 0x135a, 0x1375, 0x1387, 0x1396, - 0x13a2, 0x13ae, 0x13cf, 0x13db, 0x13ea, 0x13f6, 0x1427, 0x1450, - 0x146e, 0x1489, 0x149b, 0x14da, 0x150e, 0x1536, 0x1570, 0x1588, + 0x0ed0, 0x0ef5, 0x0f04, 0x0f2f, 0x0f4d, 0x0f59, 0x0f6b, 0x0f8a, + 0x0fae, 0x0fc6, 0x0fe1, 0x0ff3, 0x100e, 0x1029, 0x1041, 0x1053, + 0x106b, 0x107d, 0x1092, 0x10b6, 0x10d8, 0x10f6, 0x1124, 0x1142, + 0x114e, 0x1178, 0x1190, 0x11aa, 0x11f1, 0x120c, 0x122a, 0x1245, + 0x1257, 0x126f, 0x1287, 0x1299, 0x12b1, 0x12c6, 0x12e1, 0x12f9, + 0x1324, 0x1333, 0x1361, 0x137c, 0x1397, 0x13b8, 0x13ca, 0x13d9, + 0x13e5, 0x13f1, 0x1412, 0x141e, 0x142d, 0x1439, 0x146a, 0x1493, + 0x14ae, 0x14c9, 0x14db, 0x151d, 0x1551, 0x1579, 0x15b3, 0x15cb, // Entry C0 - FF - 0x1594, 0x15ac, 0x15b8, 0x15e6, 0x15fe, 0x1616, 0x162b, 0x163a, - 0x164c, 0x1671, 0x169f, 0x16b4, 0x16c3, 0x16d5, 0x16ed, 0x170f, - 0x172d, 0x1769, 0x1787, 0x17a3, 0x17bf, 0x17d1, 0x17e9, 0x17fe, - 0x1820, 0x1859, 0x187b, 0x189d, 0x18af, 0x18d0, 0x1905, 0x1947, - 0x1950, 0x198b, 0x1997, 0x19ac, 0x19cd, 0x19e2, 0x1a04, 0x1a2e, - 0x1a4c, 0x1a5b, 0x1a6d, 0x1aa5, 0x1ab7, 0x1ac9, 0x1ae4, 0x1af9, - 0x1b0e, 0x1b68, 0x1b93, 0x1bcb, 0x1be0, 0x1c04, 0x1c23, 0x1c74, - 0x1c8f, 0x1cc7, 0x1cf8, 0x1d10, 0x1d25, 0x1d57, 0x1d63, 0x1d75, + 0x15d7, 0x15ef, 0x15fb, 0x1629, 0x1641, 0x1659, 0x166e, 0x167d, + 0x168f, 0x16b4, 0x16e2, 0x16f7, 0x1706, 0x1718, 0x1730, 0x174f, + 0x176d, 0x17a9, 0x17c7, 0x17e3, 0x17ff, 0x1811, 0x1829, 0x183e, + 0x1860, 0x1899, 0x18bb, 0x18dd, 0x18ef, 0x1910, 0x1945, 0x1990, + 0x1999, 0x19d4, 0x19e0, 0x19f5, 0x1a16, 0x1a2b, 0x1a4d, 0x1a77, + 0x1a95, 0x1aa4, 0x1ab6, 0x1aee, 0x1b00, 0x1b12, 0x1b2d, 0x1b42, + 0x1b57, 0x1ba0, 0x1bcb, 0x1bf9, 0x1c0e, 0x1c32, 0x1c51, 0x1ca2, + 0x1cbd, 0x1d01, 0x1d3c, 0x1d54, 0x1d69, 0x1d9b, 0x1da7, 0x1db9, // Entry 100 - 13F - 0x1d84, 0x1d93, 0x1dbb, 0x1dd3, 0x1df1, 0x1e16, 0x1e25, 0x1e3a, - 0x1e5f, 0x1e87, 0x1e99, 0x1ec4, 0x1ee6, 0x1f11, 0x1f3c, 0x1f5e, - 0x1f83, 0x1f98, 0x1fc3, 0x1fdb, 0x2000, 0x201f, 0x2050, 0x206f, - 0x2096, 0x20b4, 0x20f1, 0x210f, 0x211e, 0x213a, 0x215f, 0x216e, - 0x2193, 0x21b8, 0x21da, 0x21ff, -} // Size: 608 bytes - -const heRegionStr string = "" + // Size: 5046 bytes - "האי אסנשןאנדורהאיחוד האמירויות הערביותאפגניסטןאנטיגואה וברבודהאנגילהאלבנ" + - "יהארמניהאנגולהאנטארקטיקהארגנטינהסמואה האמריקניתאוסטריהאוסטרליהארובהאיי " + - "אולנדאזרבייג׳ןבוסניה והרצגובינהברבדוסבנגלדשבלגיהבורקינה פאסובולגריהבחרי" + - "יןבורונדיבניןסנט ברתולומיאוברמודהברונייבוליביההאיים הקריביים ההולנדייםב" + - "רזילאיי בהאמהבהוטןאיי בובהבוצוואנהבלארוסבליזקנדהאיי קוקוס (קילינג)קונגו" + - " - קינשאסההרפובליקה של מרכז אפריקהקונגו - ברזאוילשווייץחוף השנהבאיי קוקצ" + - "׳ילהקמרוןסיןקולומביההאי קליפרטוןקוסטה ריקהקובהכף ורדהקוראסאוהאי כריסטמס" + - "קפריסיןהרפובליקה הצ׳כיתגרמניהדייגו גרסיהג׳יבוטידנמרקדומיניקההרפובליקה ה" + - "דומיניקניתאלג׳יריהסאוטה ומלייהאקוודוראסטוניהמצריםסהרה המערביתאריתריאהספ" + - "רדאתיופיההאיחוד האירופיפינלנדפיג׳יאיי פוקלנדמיקרונזיהאיי פארוצרפתגבוןהמ" + - "מלכה המאוחדתגרנדהגאורגיהגיאנה הצרפתיתגרנסיגאנהגיברלטרגרינלנדגמביהגינאהג" + - "וואדלופגינאה המשווניתיווןג׳ורג׳יה הדרומית ואיי סנדוויץ׳ הדרומייםגואטמלה" + - "גואםגינאה ביסאוגיאנההונג קונג (מחוז מנהלי מיוחד של סין)איי הרד ומקדונלד" + - "הונדורסקרואטיההאיטיהונגריההאיים הקנרייםאינדונזיהאירלנדישראלהאי מאןהודוה" + - "טריטוריה הבריטית באוקיינוס ההודיעיראקאיראןאיסלנדאיטליהג׳רסיג׳מייקהירדןי" + - "פןקניהקירגיזסטןקמבודיהקיריבאטיקומורוסנט קיטס ונוויסקוריאה הצפוניתקוריאה" + - " הדרומיתכוויתאיי קיימןקזחסטןלאוסלבנוןסנט לוסיהליכטנשטייןסרי לנקהליבריהלס" + - "וטוליטאלוקסמבורגלטביהלובמרוקומונקומולדובהמונטנגרוסן מרטןמדגסקראיי מרשלמ" + - "קדוניהמאלימיאנמר (בורמה)מונגוליהמקאו (מחוז מנהלי מיוחד של סין)איי מריאנ" + - "ה הצפונייםמרטיניקמאוריטניהמונסראטמלטהמאוריציוסהאיים המלדיבייםמלאווימקסי" + - "קומלזיהמוזמביקנמיביהקלדוניה החדשהניז׳ראיי נורפוקניגריהניקרגואההולנדנורו" + - "וגיהנפאלנאורוניווהניו זילנדעומאןפנמהפרופולינזיה הצרפתיתפפואה גינאה החדש" + - "ההפיליפיניםפקיסטןפוליןסנט פייר ומיקלוןאיי פיטקרןפוארטו ריקוהשטחים הפלסט" + - "ינייםפורטוגלפלאופרגוואיקטארטריטוריות באוקיאניהראוניוןרומניהסרביהרוסיהרו" + - "אנדהערב הסעודיתאיי שלמהאיי סיישלסודןשוודיהסינגפורסנט הלנהסלובניהסוולבאר" + - "ד ויאן מאייןסלובקיהסיירה לאונהסן מרינוסנגלסומליהסורינםדרום סודןסאו טומה" + - " ופרינסיפהאל סלבדורסנט מארטןסוריהסווזילנדטריסטן דה קונהאיי טורקס וקאיקוס" + - "צ׳אדהטריטוריות הדרומיות של צרפתטוגותאילנדטג׳יקיסטןטוקלאוטימור לסטהטורקמ" + - "ניסטןטוניסיהטונגהטורקיהטרינידד וטובגוטובאלוטייוואןטנזניהאוקראינהאוגנדהה" + - "איים המרוחקים הקטנים של ארה״בהאומות המאוחדותארצות הבריתאורוגוואיאוזבקיס" + - "טןהוותיקןסנט וינסנט והגרנדיניםונצואלהאיי הבתולה הבריטייםאיי הבתולה של א" + - "רצות הבריתוייטנאםונואטואיי ווליס ופוטונהסמואהקוסובותימןמאיוטדרום אפריקה" + - "זמביהזימבבואהאזור לא ידועהעולםאפריקהצפון אמריקהדרום אמריקהאוקיאניהמערב " + - "אפריקהמרכז אמריקהמזרח אפריקהצפון אפריקהמרכז אפריקהדרום יבשת אפריקהאמריק" + + 0x1dc2, 0x1dd1, 0x1df9, 0x1e11, 0x1e2f, 0x1e54, 0x1e63, 0x1e78, + 0x1e9d, 0x1ec5, 0x1ed7, 0x1f02, 0x1f24, 0x1f4f, 0x1f77, 0x1f99, + 0x1fbe, 0x1fd3, 0x1ffb, 0x2013, 0x2038, 0x205a, 0x208b, 0x20ad, + 0x20d4, 0x20f2, 0x212f, 0x214d, 0x215c, 0x2178, 0x219d, 0x21ac, + 0x21d1, 0x21f6, 0x221b, 0x221b, 0x2240, +} // Size: 610 bytes + +const heRegionStr string = "" + // Size: 5044 bytes + "האי אסנשןאנדורהאיחוד האמירויות הערביותאפגניסטןאנטיגואה וברבודהאנגווילהאל" + + "בניהארמניהאנגולהאנטארקטיקהארגנטינהסמואה האמריקניתאוסטריהאוסטרליהארובהאי" + + "י אולנדאזרבייג׳ןבוסניה והרצגובינהברבדוסבנגלדשבלגיהבורקינה פאסובולגריהבח" + + "רייןבורונדיבניןסנט ברתולומיאוברמודהברונייבוליביההאיים הקריביים ההולנדיי" + + "םברזילאיי בהאמהבהוטןהאי בובהבוצוואנהבלארוסבליזקנדהאיי קוקוס (קילינג)קונ" + + "גו - קינשאסההרפובליקה המרכז-אפריקאיתקונגו - ברזאוילשווייץחוף השנהבאיי ק" + + "וקצ׳ילהקמרוןסיןקולומביההאי קליפרטוןקוסטה ריקהקובהכף ורדהקוראסאואי חג המ" + + "ולדקפריסיןצ׳כיהגרמניהדייגו גרסיהג׳יבוטידנמרקדומיניקההרפובליקה הדומיניקנ" + + "יתאלג׳יריהסאוטה ומלייהאקוודוראסטוניהמצריםסהרה המערביתאריתריאהספרדאתיופי" + + "ההאיחוד האירופיגוש האירופינלנדפיג׳יאיי פוקלנדמיקרונזיהאיי פארוצרפתגבוןה" + + "ממלכה המאוחדתגרנדהגאורגיהגיאנה הצרפתיתגרנזיגאנהגיברלטרגרינלנדגמביהגינאה" + + "גוואדלופגינאה המשווניתיווןג׳ורג׳יה הדרומית ואיי סנדוויץ׳ הדרומייםגואטמל" + + "הגואםגינאה-ביסאוגיאנההונג קונג (אזור מנהלי מיוחד של סין)איי הרד ומקדונל" + + "דהונדורסקרואטיההאיטיהונגריההאיים הקנרייםאינדונזיהאירלנדישראלהאי מאןהודו" + + "הטריטוריה הבריטית באוקיינוס ההודיעיראקאיראןאיסלנדאיטליהג׳רזיג׳מייקהירדן" + + "יפןקניהקירגיזסטןקמבודיהקיריבאטיקומורוסנט קיטס ונוויסקוריאה הצפוניתקוריא" + + "ה הדרומיתכוויתאיי קיימןקזחסטןלאוסלבנוןסנט לוסיהליכטנשטייןסרי לנקהליבריה" + + "לסוטוליטאלוקסמבורגלטביהלובמרוקומונקומולדובהמונטנגרוסן מרטןמדגסקראיי מרש" + + "למקדוניהמאלימיאנמר (בורמה)מונגוליהמקאו (אזור מנהלי מיוחד של סין)איי מרי" + + "אנה הצפונייםמרטיניקמאוריטניהמונסראטמלטהמאוריציוסהאיים המלדיבייםמלאווימק" + + "סיקומלזיהמוזמביקנמיביהקלדוניה החדשהניז׳ראיי נורפוקניגריהניקרגואההולנדנו" + + "רווגיהנפאלנאורוניווהניו זילנדעומאןפנמהפרופולינזיה הצרפתיתפפואה גינאה הח" + + "דשההפיליפיניםפקיסטןפוליןסנט פייר ומיקלוןאיי פיטקרןפוארטו ריקוהשטחים הפל" + + "סטינייםפורטוגלפלאופרגוואיקטארטריטוריות באוקיאניהראוניוןרומניהסרביהרוסיה" + + "רואנדהערב הסעודיתאיי שלמהאיי סיישלסודןשוודיהסינגפורסנט הלנהסלובניהסבאלב" + + "רד ויאן מאייןסלובקיהסיירה לאונהסן מרינוסנגלסומליהסורינאםדרום סודןסאו טו" + + "מה ופרינסיפהאל סלבדורסנט מארטןסוריהסווזילנדטריסטן דה קונהאיי טרקס וקייק" + + "וסצ׳אדהטריטוריות הדרומיות של צרפתטוגותאילנדטג׳יקיסטןטוקלאוטימור-לסטהטור" + + "קמניסטןתוניסיהטונגהטורקיהטרינידד וטובגוטובאלוטייוואןטנזניהאוקראינהאוגנד" + + "ההאיים המרוחקים הקטנים של ארה״בהאומות המאוחדותארצות הבריתאורוגוואיאוזבק" + + "יסטןהוותיקןסנט וינסנט והגרנדיניםונצואלהאיי הבתולה הבריטייםאיי הבתולה של" + + " ארצות הבריתוייטנאםונואטואיי ווליס ופוטונהסמואהקוסובותימןמאיוטדרום אפריק" + + "הזמביהזימבבואהאזור לא ידועהעולםאפריקהצפון אמריקהדרום אמריקהאוקיאניהמערב" + + " אפריקהמרכז אמריקהמזרח אפריקהצפון אפריקהמרכז אפריקהדרום יבשת אפריקהאמריק" + "האמריקה הצפוניתהאיים הקריבייםמזרח אסיהדרום אסיהדרום־מזרח אסיהדרום אירופ" + "האוסטרלאסיהמלנזיהאזור מיקרונזיהפולינזיהאסיהמרכז אסיהמערב אסיהאירופהמזרח" + " אירופהצפון אירופהמערב אירופהאמריקה הלטינית" -var heRegionIdx = []uint16{ // 292 elements +var heRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F - 0x0000, 0x0011, 0x001d, 0x0049, 0x0059, 0x0078, 0x0084, 0x0090, - 0x009c, 0x00a8, 0x00bc, 0x00cc, 0x00e9, 0x00f7, 0x0107, 0x0111, - 0x0122, 0x0134, 0x0155, 0x0161, 0x016d, 0x0177, 0x018e, 0x019c, - 0x01a8, 0x01b6, 0x01be, 0x01d9, 0x01e5, 0x01f1, 0x01ff, 0x022d, - 0x0237, 0x0248, 0x0252, 0x0261, 0x0271, 0x027d, 0x0285, 0x028d, - 0x02ad, 0x02c8, 0x02f5, 0x0310, 0x031c, 0x032d, 0x033a, 0x0344, - 0x034e, 0x0354, 0x0364, 0x037b, 0x038e, 0x0396, 0x03a3, 0x03b1, - 0x03c6, 0x03d4, 0x03f3, 0x03ff, 0x0414, 0x0422, 0x042c, 0x043c, + 0x0000, 0x0011, 0x001d, 0x0049, 0x0059, 0x0078, 0x0088, 0x0094, + 0x00a0, 0x00ac, 0x00c0, 0x00d0, 0x00ed, 0x00fb, 0x010b, 0x0115, + 0x0126, 0x0138, 0x0159, 0x0165, 0x0171, 0x017b, 0x0192, 0x01a0, + 0x01ac, 0x01ba, 0x01c2, 0x01dd, 0x01e9, 0x01f5, 0x0203, 0x0231, + 0x023b, 0x024c, 0x0256, 0x0265, 0x0275, 0x0281, 0x0289, 0x0291, + 0x02b1, 0x02cc, 0x02fa, 0x0315, 0x0321, 0x0332, 0x033f, 0x0349, + 0x0353, 0x0359, 0x0369, 0x0380, 0x0393, 0x039b, 0x03a8, 0x03b6, + 0x03ca, 0x03d8, 0x03e2, 0x03ee, 0x0403, 0x0411, 0x041b, 0x042b, // Entry 40 - 7F - 0x0465, 0x0475, 0x048c, 0x049a, 0x04a8, 0x04b2, 0x04c9, 0x04d9, - 0x04e1, 0x04ef, 0x050a, 0x050a, 0x0516, 0x0520, 0x0533, 0x0545, + 0x0454, 0x0464, 0x047b, 0x0489, 0x0497, 0x04a1, 0x04b8, 0x04c8, + 0x04d0, 0x04de, 0x04f9, 0x050a, 0x0516, 0x0520, 0x0533, 0x0545, 0x0554, 0x055c, 0x0564, 0x057f, 0x0589, 0x0597, 0x05b0, 0x05ba, 0x05c2, 0x05d0, 0x05de, 0x05e8, 0x05f2, 0x0602, 0x061d, 0x0625, 0x066f, 0x067d, 0x0685, 0x069a, 0x06a4, 0x06e2, 0x0700, 0x070e, @@ -45252,21 +48013,21 @@ var heRegionIdx = []uint16{ // 292 elements // Entry C0 - FF 0x0c88, 0x0c96, 0x0c9e, 0x0cc3, 0x0cd1, 0x0cdd, 0x0ce7, 0x0cf1, 0x0cfd, 0x0d12, 0x0d21, 0x0d32, 0x0d3a, 0x0d46, 0x0d54, 0x0d63, - 0x0d71, 0x0d95, 0x0da3, 0x0db8, 0x0dc7, 0x0dcf, 0x0ddb, 0x0de7, - 0x0df8, 0x0e1a, 0x0e2b, 0x0e3c, 0x0e46, 0x0e56, 0x0e70, 0x0e90, - 0x0e98, 0x0ecb, 0x0ed3, 0x0edf, 0x0ef1, 0x0efd, 0x0f10, 0x0f24, - 0x0f32, 0x0f3c, 0x0f48, 0x0f63, 0x0f6f, 0x0f7d, 0x0f89, 0x0f99, - 0x0fa5, 0x0fdd, 0x0ffa, 0x100f, 0x1021, 0x1033, 0x1041, 0x1069, - 0x1077, 0x109b, 0x10c9, 0x10d7, 0x10e3, 0x1103, 0x110d, 0x1119, + 0x0d71, 0x0d93, 0x0da1, 0x0db6, 0x0dc5, 0x0dcd, 0x0dd9, 0x0de7, + 0x0df8, 0x0e1a, 0x0e2b, 0x0e3c, 0x0e46, 0x0e56, 0x0e70, 0x0e8e, + 0x0e96, 0x0ec9, 0x0ed1, 0x0edd, 0x0eef, 0x0efb, 0x0f0e, 0x0f22, + 0x0f30, 0x0f3a, 0x0f46, 0x0f61, 0x0f6d, 0x0f7b, 0x0f87, 0x0f97, + 0x0fa3, 0x0fdb, 0x0ff8, 0x100d, 0x101f, 0x1031, 0x103f, 0x1067, + 0x1075, 0x1099, 0x10c7, 0x10d5, 0x10e1, 0x1101, 0x110b, 0x1117, // Entry 100 - 13F - 0x1121, 0x112b, 0x1140, 0x114a, 0x115a, 0x1170, 0x117a, 0x1186, - 0x119b, 0x11b0, 0x11c0, 0x11d5, 0x11ea, 0x11ff, 0x1214, 0x1229, - 0x1247, 0x1253, 0x126e, 0x1289, 0x129a, 0x12ab, 0x12c6, 0x12db, - 0x12ef, 0x12fb, 0x1316, 0x1326, 0x132e, 0x133f, 0x1350, 0x135c, - 0x1371, 0x1386, 0x139b, 0x13b6, -} // Size: 608 bytes - -const hiRegionStr string = "" + // Size: 8766 bytes + 0x111f, 0x1129, 0x113e, 0x1148, 0x1158, 0x116e, 0x1178, 0x1184, + 0x1199, 0x11ae, 0x11be, 0x11d3, 0x11e8, 0x11fd, 0x1212, 0x1227, + 0x1245, 0x1251, 0x126c, 0x1287, 0x1298, 0x12a9, 0x12c4, 0x12d9, + 0x12ed, 0x12f9, 0x1314, 0x1324, 0x132c, 0x133d, 0x134e, 0x135a, + 0x136f, 0x1384, 0x1399, 0x1399, 0x13b4, +} // Size: 610 bytes + +const hiRegionStr string = "" + // Size: 8782 bytes "असेंशन द्वीपएंडोरासंयुक्त अरब अमीरातअफ़गानिस्तानएंटिगुआ और बरबुडाएंग्विल" + "ाअल्बानियाआर्मेनियाअंगोलाअंटार्कटिकाअर्जेंटीनाअमेरिकी समोआऑस्ट्रियाऑस्" + "ट्रेलियाअरूबाएलैंड द्वीपसमूहअज़रबैजानबोस्निया और हर्ज़ेगोविनाबारबाडोसब" + @@ -45275,44 +48036,44 @@ const hiRegionStr string = "" + // Size: 8766 bytes "पबोत्स्वानाबेलारूसबेलीज़कनाडाकोकोस (कीलिंग) द्वीपसमूहकांगो - किंशासामध" + "्य अफ़्रीकी गणराज्यकांगो – ब्राज़ाविलस्विट्ज़रलैंडकोट डी आइवरकुक द्वीप" + "समूहचिलीकैमरूनचीनकोलंबियाक्लिपर्टन द्वीपकोस्टारिकाक्यूबाकेप वर्डक्यूरा" + - "साओक्रिसमस द्वीपसाइप्रसचेक गणराज्यजर्मनीडिएगो गार्सियाजिबूतीडेनमार्कडो" + - "मिनिकाडोमिनिकन गणराज्यअल्जीरियासेउटा और मेलिलाइक्वाडोरएस्टोनियामिस्रपश" + - "्चिमी सहाराइरिट्रियास्पेनइथियोपियायूरोपीय संघफ़िनलैंडफ़िजीफ़ॉकलैंड द्व" + - "ीपसमूहमाइक्रोनेशियाफ़ेरो द्वीपसमूहफ़्रांसगैबॉनयूनाइटेड किंगडमग्रेनाडाज" + - "ॉर्जियाफ़्रेंच गयानागर्नसीघानाजिब्राल्टरग्रीनलैंडगाम्बियागिनीग्वाडेलूप" + - "इक्वेटोरियल गिनीयूनानदक्षिण जॉर्जिया और दक्षिण सैंडविच द्वीपसमूहग्वाटे" + - "मालागुआमगिनी-बिसाउगयानाहाँग काँग (चीन विशेष प्रशासनिक क्षेत्र)हर्ड द्व" + - "ीप और मैकडोनॉल्ड द्वीपसमूहहोंडूरासक्रोएशियाहैतीहंगरीकैनेरी द्वीपसमूहइं" + - "डोनेशियाआयरलैंडइज़राइलआइल ऑफ़ मैनभारतब्रिटिश हिंद महासागरीय क्षेत्रइरा" + - "कईरानआइसलैंडइटलीजर्सीजमैकाजॉर्डनजापानकेन्याकिर्गिज़स्तानकंबोडियाकिरिबा" + - "तीकोमोरोससेंट किट्स और नेविसउत्तर कोरियादक्षिण कोरियाकुवैतकेमैन द्वीपस" + - "मूहकज़ाखस्तानलाओसलेबनानसेंट लूसियालिचेंस्टीनश्रीलंकालाइबेरियालेसोथोलिथ" + - "ुआनियालग्ज़मबर्गलातवियालीबियामोरक्कोमोनाकोमॉल्डोवामोंटेनेग्रोसेंट मार्" + - "टिनमेडागास्करमार्शल द्वीपसमूहमैसिडोनियामालीम्यांमार (बर्मा)मंगोलियामका" + - "ऊ (विशेष प्रशासनिक क्षेत्र चीन)उत्तरी मारियाना द्वीपसमूहमार्टीनिकमॉरिट" + - "ानियामोंटसेरातमाल्टामॉरिशसमालदीवमलावीमैक्सिकोमलेशियामोज़ांबिकनामीबियान" + - "्यू कैलेडोनियानाइजरनॉरफ़ॉक द्वीपनाइजीरियानिकारागुआनीदरलैंडनॉर्वेनेपालन" + - "ाउरुनीयून्यूज़ीलैंडओमानपनामापेरूफ़्रेंच पोलिनेशियापापुआ न्यू गिनीफ़िलि" + - "पींसपाकिस्तानपोलैंडसेंट पिएरे और मिक्वेलानपिटकैर्न द्वीपसमूहपोर्टो रिक" + - "ोफ़िलिस्तीनी क्षेत्रपुर्तगालपलाऊपेराग्वेक़तरआउटलाइंग ओशिनियारियूनियनरो" + + "साओक्रिसमस द्वीपसाइप्रसचेकियाजर्मनीडिएगो गार्सियाजिबूतीडेनमार्कडोमिनिक" + + "ाडोमिनिकन गणराज्यअल्जीरियासेउटा और मेलिलाइक्वाडोरएस्टोनियामिस्रपश्चिमी" + + " सहाराइरिट्रियास्पेनइथियोपियायूरोपीय संघयूरोज़ोनफ़िनलैंडफ़िजीफ़ॉकलैंड द्" + + "वीपसमूहमाइक्रोनेशियाफ़ेरो द्वीपसमूहफ़्रांसगैबॉनयूनाइटेड किंगडमग्रेनाडा" + + "जॉर्जियाफ़्रेंच गुयानागर्नसीघानाजिब्राल्टरग्रीनलैंडगाम्बियागिनीग्वाडेल" + + "ूपइक्वेटोरियल गिनीयूनानदक्षिण जॉर्जिया और दक्षिण सैंडविच द्वीपसमूहग्वा" + + "टेमालागुआमगिनी-बिसाउगुयानाहाँग काँग (चीन विशेष प्रशासनिक क्षेत्र)हर्ड " + + "द्वीप और मैकडोनॉल्ड द्वीपसमूहहोंडूरासक्रोएशियाहैतीहंगरीकैनेरी द्वीपसमू" + + "हइंडोनेशियाआयरलैंडइज़राइलआइल ऑफ़ मैनभारतब्रिटिश हिंद महासागरीय क्षेत्र" + + "इराकईरानआइसलैंडइटलीजर्सीजमैकाजॉर्डनजापानकेन्याकिर्गिज़स्तानकंबोडियाकिर" + + "िबातीकोमोरोससेंट किट्स और नेविसउत्तर कोरियादक्षिण कोरियाकुवैतकैमेन द्व" + + "ीपसमूहकज़ाखस्तानलाओसलेबनानसेंट लूसियालिचेंस्टीनश्रीलंकालाइबेरियालेसोथो" + + "लिथुआनियालग्ज़मबर्गलातवियालीबियामोरक्कोमोनाकोमॉल्डोवामोंटेनेग्रोसेंट म" + + "ार्टिनमेडागास्करमार्शल द्वीपसमूहमकदूनियामालीम्यांमार (बर्मा)मंगोलियामक" + + "ाऊ (विशेष प्रशासनिक क्षेत्र चीन)उत्तरी मारियाना द्वीपसमूहमार्टीनिकमॉरि" + + "टानियामोंटसेरातमाल्टामॉरीशसमालदीवमलावीमैक्सिकोमलेशियामोज़ांबिकनामीबिया" + + "न्यू कैलेडोनियानाइजरनॉरफ़ॉक द्वीपनाइजीरियानिकारागुआनीदरलैंडनॉर्वेनेपाल" + + "नाउरुनीयून्यूज़ीलैंडओमानपनामापेरूफ़्रेंच पोलिनेशियापापुआ न्यू गिनीफ़िल" + + "िपींसपाकिस्तानपोलैंडसेंट पिएरे और मिक्वेलानपिटकैर्न द्वीपसमूहपोर्टो रि" + + "कोफ़िलिस्तीनी क्षेत्रपुर्तगालपलाऊपराग्वेक़तरआउटलाइंग ओशिनियारियूनियनरो" + "मानियासर्बियारूसरवांडासऊदी अरबसोलोमन द्वीपसमूहसेशेल्ससूडानस्वीडनसिंगाप" + "ुरसेंट हेलेनास्लोवेनियास्वालबार्ड और जान मायेनस्लोवाकियासिएरा लियोनसैन" + " मेरीनोसेनेगलसोमालियासूरीनामदक्षिण सूडानसाओ टोम और प्रिंसिपेअल सल्वाडोरस" + "िंट मार्टिनसीरियास्वाज़ीलैंडत्रिस्टान डा कुनातुर्क और कैकोज़ द्वीपसमूह" + "चाडफ़्रांसीसी दक्षिणी क्षेत्रटोगोथाईलैंडताज़िकिस्तानतोकेलाउतिमोर-लेस्त" + "तुर्कमेनिस्तानट्यूनीशियाटोंगातुर्कीत्रिनिदाद और टोबैगोतुवालूताइवानतंज़" + - "ानियायूक्रेनयुगांडायू.एस. आउटलाइंग द्वीपसमूहसंयुक्त राष्ट्रसंयुक्त राज" + + "ानियायूक्रेनयुगांडायू॰एस॰ आउटलाइंग द्वीपसमूहसंयुक्त राष्ट्रसंयुक्त राज" + "्यउरूग्वेउज़्बेकिस्तानवेटिकन सिटीसेंट विंसेंट और ग्रेनाडाइंसवेनेज़ुएला" + - "ब्रिटिश वर्जिन द्वीपसमूहयू.एस. वर्जिन द्वीपसमूहवियतनामवनुआतूवालिस और फ" + + "ब्रिटिश वर्जिन द्वीपसमूहयू॰एस॰ वर्जिन द्वीपसमूहवियतनामवनुआतूवालिस और फ" + "़्यूचूनासमोआकोसोवोयमनमायोतेदक्षिण अफ़्रीकाज़ाम्बियाज़िम्बाब्वेअज्ञात क" + "्षेत्रविश्वअफ़्रीकाउत्तर अमेरिकादक्षिण अमेरिकाओशिआनियापश्चिमी अफ़्रीका" + "मध्य अमेरिकापूर्वी अफ़्रीकाउत्तरी अफ़्रीकामध्य अफ़्रीकादक्षिणी अफ़्रीक" + "ाअमेरिकाज़उत्तरी अमेरिकाकैरिबियनपूर्वी एशियादक्षिणी एशियादक्षिण-पूर्व " + - "एशियादक्षिणी यूरोपऑस्ट्रेलेशियामेलानेशियामाइक्रोनेशियाई क्षेत्रपोलीनेश" + + "एशियादक्षिणी यूरोपऑस्ट्रेलेशियामेलानेशियामाइक्रोनेशियाई क्षेत्रपोलिनेश" + "ियाएशियामध्य एशियापश्चिमी एशियायूरोपपूर्वी यूरोपउत्तरी यूरोपपश्चिमी यू" + "रोपलैटिन अमेरिका" -var hiRegionIdx = []uint16{ // 292 elements +var hiRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0022, 0x0034, 0x0066, 0x008a, 0x00b9, 0x00d1, 0x00ec, 0x0107, 0x0119, 0x013a, 0x0158, 0x017a, 0x0195, 0x01b6, 0x01c5, @@ -45321,43 +48082,43 @@ var hiRegionIdx = []uint16{ // 292 elements 0x03c9, 0x03db, 0x03ea, 0x0409, 0x0427, 0x043c, 0x044e, 0x045d, 0x049d, 0x04c4, 0x04ff, 0x0531, 0x0558, 0x0575, 0x059a, 0x05a6, 0x05b8, 0x05c1, 0x05d9, 0x0604, 0x0622, 0x0634, 0x064a, 0x0665, - 0x068a, 0x069f, 0x06be, 0x06d0, 0x06f8, 0x070a, 0x0722, 0x073a, + 0x068a, 0x069f, 0x06b1, 0x06c3, 0x06eb, 0x06fd, 0x0715, 0x072d, // Entry 40 - 7F - 0x0768, 0x0783, 0x07ac, 0x07c4, 0x07df, 0x07ee, 0x0813, 0x082e, - 0x083d, 0x0858, 0x0877, 0x0877, 0x088f, 0x089e, 0x08d2, 0x08f9, - 0x0924, 0x0939, 0x0948, 0x0973, 0x098b, 0x09a3, 0x09c8, 0x09da, - 0x09e6, 0x0a04, 0x0a1f, 0x0a37, 0x0a43, 0x0a5e, 0x0a8c, 0x0a9b, - 0x0b12, 0x0b30, 0x0b3c, 0x0b58, 0x0b67, 0x0bce, 0x0c2c, 0x0c44, - 0x0c5f, 0x0c6b, 0x0c7a, 0x0ca8, 0x0cc6, 0x0cdb, 0x0cf0, 0x0d0d, - 0x0d19, 0x0d6d, 0x0d79, 0x0d85, 0x0d9a, 0x0da6, 0x0db5, 0x0dc4, - 0x0dd6, 0x0de5, 0x0df7, 0x0e1e, 0x0e36, 0x0e4e, 0x0e63, 0x0e96, + 0x075b, 0x0776, 0x079f, 0x07b7, 0x07d2, 0x07e1, 0x0806, 0x0821, + 0x0830, 0x084b, 0x086a, 0x0882, 0x089a, 0x08a9, 0x08dd, 0x0904, + 0x092f, 0x0944, 0x0953, 0x097e, 0x0996, 0x09ae, 0x09d6, 0x09e8, + 0x09f4, 0x0a12, 0x0a2d, 0x0a45, 0x0a51, 0x0a6c, 0x0a9a, 0x0aa9, + 0x0b20, 0x0b3e, 0x0b4a, 0x0b66, 0x0b78, 0x0bdf, 0x0c3d, 0x0c55, + 0x0c70, 0x0c7c, 0x0c8b, 0x0cb9, 0x0cd7, 0x0cec, 0x0d01, 0x0d1e, + 0x0d2a, 0x0d7e, 0x0d8a, 0x0d96, 0x0dab, 0x0db7, 0x0dc6, 0x0dd5, + 0x0de7, 0x0df6, 0x0e08, 0x0e2f, 0x0e47, 0x0e5f, 0x0e74, 0x0ea7, // Entry 80 - BF - 0x0eb8, 0x0edd, 0x0eec, 0x0f17, 0x0f35, 0x0f41, 0x0f53, 0x0f72, - 0x0f90, 0x0fa8, 0x0fc3, 0x0fd5, 0x0ff0, 0x100e, 0x1023, 0x1035, - 0x104a, 0x105c, 0x1074, 0x1095, 0x10b7, 0x10d5, 0x1103, 0x1121, - 0x112d, 0x1157, 0x116f, 0x11c9, 0x1210, 0x122b, 0x1249, 0x1264, - 0x1276, 0x1288, 0x129a, 0x12a9, 0x12c1, 0x12d6, 0x12f1, 0x1309, - 0x1334, 0x1343, 0x1368, 0x1383, 0x139e, 0x13b6, 0x13c8, 0x13d7, - 0x13e6, 0x13f2, 0x1413, 0x141f, 0x142e, 0x143a, 0x146e, 0x1497, - 0x14b2, 0x14cd, 0x14df, 0x151e, 0x1552, 0x1571, 0x15a8, 0x15c0, + 0x0ec9, 0x0eee, 0x0efd, 0x0f28, 0x0f46, 0x0f52, 0x0f64, 0x0f83, + 0x0fa1, 0x0fb9, 0x0fd4, 0x0fe6, 0x1001, 0x101f, 0x1034, 0x1046, + 0x105b, 0x106d, 0x1085, 0x10a6, 0x10c8, 0x10e6, 0x1114, 0x112c, + 0x1138, 0x1162, 0x117a, 0x11d4, 0x121b, 0x1236, 0x1254, 0x126f, + 0x1281, 0x1293, 0x12a5, 0x12b4, 0x12cc, 0x12e1, 0x12fc, 0x1314, + 0x133f, 0x134e, 0x1373, 0x138e, 0x13a9, 0x13c1, 0x13d3, 0x13e2, + 0x13f1, 0x13fd, 0x141e, 0x142a, 0x1439, 0x1445, 0x1479, 0x14a2, + 0x14bd, 0x14d8, 0x14ea, 0x1529, 0x155d, 0x157c, 0x15b3, 0x15cb, // Entry C0 - FF - 0x15cc, 0x15e4, 0x15f0, 0x161e, 0x1636, 0x164e, 0x1663, 0x166c, - 0x167e, 0x1694, 0x16c2, 0x16d7, 0x16e6, 0x16f8, 0x1710, 0x172f, - 0x174d, 0x178c, 0x17aa, 0x17c9, 0x17e5, 0x17f7, 0x180f, 0x1824, - 0x1846, 0x187c, 0x189b, 0x18bd, 0x18cf, 0x18f0, 0x191f, 0x1964, - 0x196d, 0x19b7, 0x19c3, 0x19d8, 0x19fc, 0x1a11, 0x1a30, 0x1a5a, - 0x1a78, 0x1a87, 0x1a99, 0x1ace, 0x1ae0, 0x1af2, 0x1b0d, 0x1b22, - 0x1b37, 0x1b7a, 0x1ba5, 0x1bca, 0x1bdf, 0x1c06, 0x1c25, 0x1c70, - 0x1c8e, 0x1cd2, 0x1d0f, 0x1d24, 0x1d36, 0x1d68, 0x1d74, 0x1d86, + 0x15d7, 0x15ec, 0x15f8, 0x1626, 0x163e, 0x1656, 0x166b, 0x1674, + 0x1686, 0x169c, 0x16ca, 0x16df, 0x16ee, 0x1700, 0x1718, 0x1737, + 0x1755, 0x1794, 0x17b2, 0x17d1, 0x17ed, 0x17ff, 0x1817, 0x182c, + 0x184e, 0x1884, 0x18a3, 0x18c5, 0x18d7, 0x18f8, 0x1927, 0x196c, + 0x1975, 0x19bf, 0x19cb, 0x19e0, 0x1a04, 0x1a19, 0x1a38, 0x1a62, + 0x1a80, 0x1a8f, 0x1aa1, 0x1ad6, 0x1ae8, 0x1afa, 0x1b15, 0x1b2a, + 0x1b3f, 0x1b86, 0x1bb1, 0x1bd6, 0x1beb, 0x1c12, 0x1c31, 0x1c7c, + 0x1c9a, 0x1cde, 0x1d1f, 0x1d34, 0x1d46, 0x1d78, 0x1d84, 0x1d96, // Entry 100 - 13F - 0x1d8f, 0x1da1, 0x1dcc, 0x1de7, 0x1e08, 0x1e30, 0x1e3f, 0x1e57, - 0x1e7c, 0x1ea4, 0x1ebc, 0x1eea, 0x1f0c, 0x1f37, 0x1f62, 0x1f87, - 0x1fb5, 0x1fd0, 0x1ff8, 0x2010, 0x2032, 0x2057, 0x2089, 0x20ae, - 0x20d5, 0x20f3, 0x2133, 0x2151, 0x2160, 0x217c, 0x21a1, 0x21b0, - 0x21d2, 0x21f4, 0x2219, 0x223e, -} // Size: 608 bytes - -const hrRegionStr string = "" + // Size: 3142 bytes + 0x1d9f, 0x1db1, 0x1ddc, 0x1df7, 0x1e18, 0x1e40, 0x1e4f, 0x1e67, + 0x1e8c, 0x1eb4, 0x1ecc, 0x1efa, 0x1f1c, 0x1f47, 0x1f72, 0x1f97, + 0x1fc5, 0x1fe0, 0x2008, 0x2020, 0x2042, 0x2067, 0x2099, 0x20be, + 0x20e5, 0x2103, 0x2143, 0x2161, 0x2170, 0x218c, 0x21b1, 0x21c0, + 0x21e2, 0x2204, 0x2229, 0x2229, 0x224e, +} // Size: 610 bytes + +const hrRegionStr string = "" + // Size: 3137 bytes "Otok AscensionAndoraUjedinjeni Arapski EmiratiAfganistanAntigva i Barbud" + "aAngvilaAlbanijaArmenijaAngolaAntarktikaArgentinaAmerička SamoaAustrijaA" + "ustralijaArubaÅlandski otociAzerbajdžanBosna i HercegovinaBarbadosBangla" + @@ -45366,43 +48127,43 @@ const hrRegionStr string = "" + // Size: 3142 bytes "naBjelorusijaBelizeKanadaKokosovi (Keelingovi) otociKongo - KinshasaSred" + "njoafrička RepublikaKongo - BrazzavilleŠvicarskaObala BjelokostiCookovi " + "OtociČileKamerunKinaKolumbijaOtok ClippertonKostarikaKubaZelenortska Rep" + - "ublikaCuraçaoBožićni otokCiparČeška RepublikaNjemačkaDiego GarciaDžibuti" + - "DanskaDominikaDominikanska RepublikaAlžirCeuta i MelillaEkvadorEstonijaE" + - "gipatZapadna SaharaEritrejaŠpanjolskaEtiopijaEuropska unijaFinskaFidžiFa" + - "lklandski otociMikronezijaFarski otociFrancuskaGabonUjedinjeno Kraljevst" + - "voGrenadaGruzijaFrancuska GijanaGuernseyGanaGibraltarGrenlandGambijaGvin" + - "ejaGuadalupeEkvatorska GvinejaGrčkaJužna Georgija i Južni Sendvički Otoc" + - "iGvatemalaGuamGvineja BisauGvajanaPUP Hong Kong KinaOtoci Heard i McDona" + - "ldHondurasHrvatskaHaitiMađarskaKanarski otociIndonezijaIrskaIzraelOtok M" + - "anIndijaBritanski Indijskooceanski teritorijIrakIranIslandItalijaJerseyJ" + - "amajkaJordanJapanKenijaKirgistanKambodžaKiribatiKomoriSveti Kristofor i " + - "NevisSjeverna KorejaJužna KorejaKuvajtKajmanski otociKazahstanLaosLibano" + - "nSveta LucijaLihtenštajnŠri LankaLiberijaLesotoLitvaLuksemburgLatvijaLib" + - "ijaMarokoMonakoMoldavijaCrna GoraSaint MartinMadagaskarMaršalovi OtociMa" + - "kedonijaMaliMjanmar (Burma)MongolijaPUP Makao KinaSjevernomarijanski oto" + - "ciMartiniqueMauretanijaMontserratMaltaMauricijusMaldiviMalaviMeksikoMale" + - "zijaMozambikNamibijaNova KaledonijaNigerOtok NorfolkNigerijaNikaragvaNiz" + - "ozemskaNorveškaNepalNauruNiueNovi ZelandOmanPanamaPeruFrancuska Polinezi" + - "jaPapua Nova GvinejaFilipiniPakistanPoljskaSaint-Pierre-et-MiquelonOtoci" + - " PitcairnPortorikoPalestinsko PodručjePortugalPalauParagvajKatarVanjska " + - "područja OceanijeRéunionRumunjskaSrbijaRusijaRuandaSaudijska ArabijaSalo" + - "monski OtociSejšeliSudanŠvedskaSingapurSveta HelenaSlovenijaSvalbard i J" + - "an MayenSlovačkaSijera LeoneSan MarinoSenegalSomalijaSurinamJužni SudanS" + - "veti Toma i PrincipSalvadorSint MaartenSirijaSvaziTristan da CunhaOtoci " + - "Turks i CaicosČadFrancuski južni i antarktički teritorijiTogoTajlandTadž" + - "ikistanTokelauTimor-LesteTurkmenistanTunisTongaTurskaTrinidad i TobagoTu" + - "valuTajvanTanzanijaUkrajinaUgandaMali udaljeni otoci SAD-aUjedinjeni nar" + - "odiSjedinjene Američke DržaveUrugvajUzbekistanVatikanski GradSveti Vince" + - "nt i GrenadiniVenezuelaBritanski Djevičanski otociAmerički Djevičanski o" + - "tociVijetnamVanuatuWallis i FutunaSamoaKosovoJemenMayotteJužnoafrička Re" + - "publikaZambijaZimbabvenepoznato područjeSvijetAfrikaSjevernoamerički kon" + - "tinentJužna AmerikaOceanijaZapadna AfrikaCentralna AmerikaIstočna Afrika" + - "Sjeverna AfrikaSredišnja AfrikaJužna AfrikaAmerikeSjeverna AmerikaKaribi" + - "Istočna AzijaJužna AzijaJugoistočna AzijaJužna EuropaAustralazijaMelanez" + - "ijaMikronezijsko područjePolinezijaAzijaSrednja AzijaZapadna AzijaEuropa" + - "Istočna EuropaSjeverna EuropaZapadna EuropaLatinska Amerika" - -var hrRegionIdx = []uint16{ // 292 elements + "ublikaCuraçaoBožićni otokCiparČeškaNjemačkaDiego GarciaDžibutiDanskaDomi" + + "nikaDominikanska RepublikaAlžirCeuta i MelillaEkvadorEstonijaEgipatZapad" + + "na SaharaEritrejaŠpanjolskaEtiopijaEuropska unijaeurozonaFinskaFidžiFalk" + + "landski otociMikronezijaFarski otociFrancuskaGabonUjedinjeno Kraljevstvo" + + "GrenadaGruzijaFrancuska GijanaGuernseyGanaGibraltarGrenlandGambijaGvinej" + + "aGuadalupeEkvatorska GvinejaGrčkaJužna Georgija i Južni Sendvički OtociG" + + "vatemalaGuamGvineja BisauGvajanaPUP Hong Kong KinaOtoci Heard i McDonald" + + "HondurasHrvatskaHaitiMađarskaKanarski otociIndonezijaIrskaIzraelOtok Man" + + "IndijaBritanski Indijskooceanski teritorijIrakIranIslandItalijaJerseyJam" + + "ajkaJordanJapanKenijaKirgistanKambodžaKiribatiKomoriSveti Kristofor i Ne" + + "visSjeverna KorejaJužna KorejaKuvajtKajmanski otociKazahstanLaosLibanonS" + + "veta LucijaLihtenštajnŠri LankaLiberijaLesotoLitvaLuksemburgLatvijaLibij" + + "aMarokoMonakoMoldavijaCrna GoraSaint MartinMadagaskarMaršalovi OtociMake" + + "donijaMaliMjanmar (Burma)MongolijaPUP Makao KinaSjevernomarijanski otoci" + + "MartiniqueMauretanijaMontserratMaltaMauricijusMaldiviMalaviMeksikoMalezi" + + "jaMozambikNamibijaNova KaledonijaNigerOtok NorfolkNigerijaNikaragvaNizoz" + + "emskaNorveškaNepalNauruNiueNovi ZelandOmanPanamaPeruFrancuska Polinezija" + + "Papua Nova GvinejaFilipiniPakistanPoljskaSveti Petar i MikelonOtoci Pitc" + + "airnPortorikoPalestinsko PodručjePortugalPalauParagvajKatarVanjska podru" + + "čja OceanijeRéunionRumunjskaSrbijaRusijaRuandaSaudijska ArabijaSalomons" + + "ki OtociSejšeliSudanŠvedskaSingapurSveta HelenaSlovenijaSvalbard i Jan M" + + "ayenSlovačkaSijera LeoneSan MarinoSenegalSomalijaSurinamJužni SudanSveti" + + " Toma i PrincipSalvadorSint MaartenSirijaSvaziTristan da CunhaOtoci Turk" + + "s i CaicosČadFrancuski južni i antarktički teritorijiTogoTajlandTadžikis" + + "tanTokelauTimor-LesteTurkmenistanTunisTongaTurskaTrinidad i TobagoTuvalu" + + "TajvanTanzanijaUkrajinaUgandaMali udaljeni otoci SAD-aUjedinjeni narodiS" + + "jedinjene Američke DržaveUrugvajUzbekistanVatikanski GradSveti Vincent i" + + " GrenadiniVenezuelaBritanski Djevičanski otociAmerički Djevičanski otoci" + + "VijetnamVanuatuWallis i FutunaSamoaKosovoJemenMayotteJužnoafrička Republ" + + "ikaZambijaZimbabvenepoznato područjeSvijetAfrikaSjevernoamerički kontine" + + "ntJužna AmerikaOceanijaZapadna AfrikaCentralna AmerikaIstočna AfrikaSjev" + + "erna AfrikaSredišnja AfrikaJužna AfrikaAmerikeSjeverna AmerikaKaribiIsto" + + "čna AzijaJužna AzijaJugoistočna AzijaJužna EuropaAustralazijaMelanezija" + + "Mikronezijsko područjePolinezijaAzijaSrednja AzijaZapadna AzijaEuropaIst" + + "očna EuropaSjeverna EuropaZapadna EuropaLatinska Amerika" + +var hrRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x000e, 0x0014, 0x002e, 0x0038, 0x0049, 0x0050, 0x0058, 0x0060, 0x0066, 0x0070, 0x0079, 0x0088, 0x0090, 0x009a, 0x009f, @@ -45411,43 +48172,43 @@ var hrRegionIdx = []uint16{ // 292 elements 0x0152, 0x0158, 0x015d, 0x0168, 0x016f, 0x017a, 0x0180, 0x0186, 0x01a1, 0x01b1, 0x01ca, 0x01dd, 0x01e7, 0x01f7, 0x0204, 0x0209, 0x0210, 0x0214, 0x021d, 0x022c, 0x0235, 0x0239, 0x024e, 0x0256, - 0x0264, 0x0269, 0x027a, 0x0283, 0x028f, 0x0297, 0x029d, 0x02a5, + 0x0264, 0x0269, 0x0270, 0x0279, 0x0285, 0x028d, 0x0293, 0x029b, // Entry 40 - 7F - 0x02bb, 0x02c1, 0x02d0, 0x02d7, 0x02df, 0x02e5, 0x02f3, 0x02fb, - 0x0306, 0x030e, 0x031c, 0x031c, 0x0322, 0x0328, 0x0339, 0x0344, - 0x0350, 0x0359, 0x035e, 0x0374, 0x037b, 0x0382, 0x0392, 0x039a, - 0x039e, 0x03a7, 0x03af, 0x03b6, 0x03bd, 0x03c6, 0x03d8, 0x03de, - 0x0407, 0x0410, 0x0414, 0x0421, 0x0428, 0x043a, 0x0450, 0x0458, - 0x0460, 0x0465, 0x046e, 0x047c, 0x0486, 0x048b, 0x0491, 0x0499, - 0x049f, 0x04c3, 0x04c7, 0x04cb, 0x04d1, 0x04d8, 0x04de, 0x04e5, - 0x04eb, 0x04f0, 0x04f6, 0x04ff, 0x0508, 0x0510, 0x0516, 0x052d, + 0x02b1, 0x02b7, 0x02c6, 0x02cd, 0x02d5, 0x02db, 0x02e9, 0x02f1, + 0x02fc, 0x0304, 0x0312, 0x031a, 0x0320, 0x0326, 0x0337, 0x0342, + 0x034e, 0x0357, 0x035c, 0x0372, 0x0379, 0x0380, 0x0390, 0x0398, + 0x039c, 0x03a5, 0x03ad, 0x03b4, 0x03bb, 0x03c4, 0x03d6, 0x03dc, + 0x0405, 0x040e, 0x0412, 0x041f, 0x0426, 0x0438, 0x044e, 0x0456, + 0x045e, 0x0463, 0x046c, 0x047a, 0x0484, 0x0489, 0x048f, 0x0497, + 0x049d, 0x04c1, 0x04c5, 0x04c9, 0x04cf, 0x04d6, 0x04dc, 0x04e3, + 0x04e9, 0x04ee, 0x04f4, 0x04fd, 0x0506, 0x050e, 0x0514, 0x052b, // Entry 80 - BF - 0x053c, 0x0549, 0x054f, 0x055e, 0x0567, 0x056b, 0x0572, 0x057e, - 0x058a, 0x0594, 0x059c, 0x05a2, 0x05a7, 0x05b1, 0x05b8, 0x05be, - 0x05c4, 0x05ca, 0x05d3, 0x05dc, 0x05e8, 0x05f2, 0x0602, 0x060c, - 0x0610, 0x061f, 0x0628, 0x0636, 0x064e, 0x0658, 0x0663, 0x066d, - 0x0672, 0x067c, 0x0683, 0x0689, 0x0690, 0x0698, 0x06a0, 0x06a8, - 0x06b7, 0x06bc, 0x06c8, 0x06d0, 0x06d9, 0x06e3, 0x06ec, 0x06f1, - 0x06f6, 0x06fa, 0x0705, 0x0709, 0x070f, 0x0713, 0x0727, 0x0739, - 0x0741, 0x0749, 0x0750, 0x0768, 0x0776, 0x077f, 0x0794, 0x079c, + 0x053a, 0x0547, 0x054d, 0x055c, 0x0565, 0x0569, 0x0570, 0x057c, + 0x0588, 0x0592, 0x059a, 0x05a0, 0x05a5, 0x05af, 0x05b6, 0x05bc, + 0x05c2, 0x05c8, 0x05d1, 0x05da, 0x05e6, 0x05f0, 0x0600, 0x060a, + 0x060e, 0x061d, 0x0626, 0x0634, 0x064c, 0x0656, 0x0661, 0x066b, + 0x0670, 0x067a, 0x0681, 0x0687, 0x068e, 0x0696, 0x069e, 0x06a6, + 0x06b5, 0x06ba, 0x06c6, 0x06ce, 0x06d7, 0x06e1, 0x06ea, 0x06ef, + 0x06f4, 0x06f8, 0x0703, 0x0707, 0x070d, 0x0711, 0x0725, 0x0737, + 0x073f, 0x0747, 0x074e, 0x0763, 0x0771, 0x077a, 0x078f, 0x0797, // Entry C0 - FF - 0x07a1, 0x07a9, 0x07ae, 0x07c8, 0x07d0, 0x07d9, 0x07df, 0x07e5, - 0x07eb, 0x07fc, 0x080c, 0x0814, 0x0819, 0x0821, 0x0829, 0x0835, - 0x083e, 0x0852, 0x085b, 0x0867, 0x0871, 0x0878, 0x0880, 0x0887, - 0x0893, 0x08a7, 0x08af, 0x08bb, 0x08c1, 0x08c6, 0x08d6, 0x08ea, - 0x08ee, 0x0918, 0x091c, 0x0923, 0x092f, 0x0936, 0x0941, 0x094d, - 0x0952, 0x0957, 0x095d, 0x096e, 0x0974, 0x097a, 0x0983, 0x098b, - 0x0991, 0x09aa, 0x09bb, 0x09d7, 0x09de, 0x09e8, 0x09f7, 0x0a10, - 0x0a19, 0x0a35, 0x0a51, 0x0a59, 0x0a60, 0x0a6f, 0x0a74, 0x0a7a, + 0x079c, 0x07a4, 0x07a9, 0x07c3, 0x07cb, 0x07d4, 0x07da, 0x07e0, + 0x07e6, 0x07f7, 0x0807, 0x080f, 0x0814, 0x081c, 0x0824, 0x0830, + 0x0839, 0x084d, 0x0856, 0x0862, 0x086c, 0x0873, 0x087b, 0x0882, + 0x088e, 0x08a2, 0x08aa, 0x08b6, 0x08bc, 0x08c1, 0x08d1, 0x08e5, + 0x08e9, 0x0913, 0x0917, 0x091e, 0x092a, 0x0931, 0x093c, 0x0948, + 0x094d, 0x0952, 0x0958, 0x0969, 0x096f, 0x0975, 0x097e, 0x0986, + 0x098c, 0x09a5, 0x09b6, 0x09d2, 0x09d9, 0x09e3, 0x09f2, 0x0a0b, + 0x0a14, 0x0a30, 0x0a4c, 0x0a54, 0x0a5b, 0x0a6a, 0x0a6f, 0x0a75, // Entry 100 - 13F - 0x0a7f, 0x0a86, 0x0a9e, 0x0aa5, 0x0aad, 0x0ac0, 0x0ac6, 0x0acc, - 0x0ae7, 0x0af5, 0x0afd, 0x0b0b, 0x0b1c, 0x0b2b, 0x0b3a, 0x0b4b, - 0x0b58, 0x0b5f, 0x0b6f, 0x0b75, 0x0b83, 0x0b8f, 0x0ba1, 0x0bae, - 0x0bba, 0x0bc4, 0x0bdb, 0x0be5, 0x0bea, 0x0bf7, 0x0c04, 0x0c0a, - 0x0c19, 0x0c28, 0x0c36, 0x0c46, -} // Size: 608 bytes - -const huRegionStr string = "" + // Size: 3325 bytes + 0x0a7a, 0x0a81, 0x0a99, 0x0aa0, 0x0aa8, 0x0abb, 0x0ac1, 0x0ac7, + 0x0ae2, 0x0af0, 0x0af8, 0x0b06, 0x0b17, 0x0b26, 0x0b35, 0x0b46, + 0x0b53, 0x0b5a, 0x0b6a, 0x0b70, 0x0b7e, 0x0b8a, 0x0b9c, 0x0ba9, + 0x0bb5, 0x0bbf, 0x0bd6, 0x0be0, 0x0be5, 0x0bf2, 0x0bff, 0x0c05, + 0x0c14, 0x0c23, 0x0c31, 0x0c31, 0x0c41, +} // Size: 610 bytes + +const huRegionStr string = "" + // Size: 3337 bytes "Ascension-szigetAndorraEgyesült Arab EmírségekAfganisztánAntigua és Barb" + "udaAnguillaAlbániaÖrményországAngolaAntarktiszArgentínaAmerikai SzamoaAu" + "sztriaAusztráliaArubaÅland-szigetekAzerbajdzsánBosznia-HercegovinaBarbad" + @@ -45459,41 +48220,41 @@ const huRegionStr string = "" + // Size: 3325 bytes "d-foki KöztársaságCuraçaoKarácsony-szigetCiprusCsehországNémetországDieg" + "o GarciaDzsibutiDániaDominikaDominikai KöztársaságAlgériaCeuta és Melill" + "aEcuadorÉsztországEgyiptomNyugat-SzaharaEritreaSpanyolországEtiópiaEuróp" + - "ai UnióFinnországFidzsiFalkland-szigetekMikronéziaFeröer-szigetekFrancia" + - "országGabonEgyesült KirályságGrenadaGrúziaFrancia GuyanaGuernseyGhánaGib" + - "raltárGrönlandGambiaGuineaGuadeloupeEgyenlítői-GuineaGörögországDéli-Geo" + - "rgia és Déli-Sandwich-szigetekGuatemalaGuamBissau-GuineaGuyanaHongkong K" + - "KTHeard-sziget és McDonald-szigetekHondurasHorvátországHaitiMagyarország" + - "Kanári-szigetekIndonéziaÍrországIzraelMan-szigetIndiaBrit Indiai-óceáni " + - "TerületIrakIránIzlandOlaszországJerseyJamaicaJordániaJapánKenyaKirgizisz" + - "tánKambodzsaKiribatiComore-szigetekSaint Kitts és NevisÉszak-KoreaDél-Ko" + - "reaKuvaitKajmán-szigetekKazahsztánLaoszLibanonSaint LuciaLiechtensteinSr" + - "í LankaLibériaLesothoLitvániaLuxemburgLettországLíbiaMarokkóMonacoMoldo" + - "vaMontenegróSaint MartinMadagaszkárMarshall-szigetekMacedóniaMaliMianmar" + - " (Burma)MongóliaMakaó KKTÉszaki Mariana-szigetekMartiniqueMauritániaMont" + - "serratMáltaMauritiusMaldív-szigetekMalawiMexikóMalajziaMozambikNamíbiaÚj" + - "-KaledóniaNigerNorfolk-szigetNigériaNicaraguaHollandiaNorvégiaNepálNauru" + - "NiueÚj-ZélandOmánPanamaPeruFrancia PolinéziaPápua Új-GuineaFülöp-szigete" + - "kPakisztánLengyelországSaint-Pierre és MiquelonPitcairn-szigetekPuerto R" + - "icoPalesztin TerületPortugáliaPalauParaguayKatarKülső-ÓceániaRéunionRomá" + - "niaSzerbiaOroszországRuandaSzaúd-ArábiaSalamon-szigetekSeychelle-szigete" + - "kSzudánSvédországSzingapúrSzent IlonaSzlovéniaSvalbard és Jan MayenSzlov" + - "ákiaSierra LeoneSan MarinoSzenegálSzomáliaSurinameDél-SzudánSao Tomé és" + - " PríncipeSalvadorSint MaartenSzíriaSzváziföldTristan da CunhaTurks- és C" + - "aicos-szigetekCsádFrancia Déli TerületekTogoThaiföldTádzsikisztánTokelau" + - "Kelet-TimorTürkmenisztánTunéziaTongaTörökországTrinidad és TobagoTuvaluT" + - "ajvanTanzániaUkrajnaUgandaAz Amerikai Egyesült Államok lakatlan külbirto" + - "kaiENSZEgyesült ÁllamokUruguayÜzbegisztánVatikánSaint Vincent és a Grena" + - "dine-szigetekVenezuelaBrit Virgin-szigetekAmerikai Virgin-szigetekVietna" + - "mVanuatuWallis és FutunaSzamoaKoszovóJemenMayotteDél-afrikai Köztársaság" + - "ZambiaZimbabweIsmeretlen körzetVilágAfrikaÉszak-AmerikaDél-AmerikaÓceáni" + - "aNyugat-AfrikaKözép-AmerikaKelet-AfrikaÉszak-AfrikaKözép-AfrikaAfrika dé" + - "li részeAmerikaAmerika északi részeKarib-térségKelet-ÁzsiaDél-ÁzsiaDélke" + - "let-ÁzsiaDél-EurópaAusztrálázsiaMelanéziaMikronéziai régióPolinéziaÁzsia" + - "Közép-ÁzsiaNyugat-ÁzsiaEurópaKelet-EurópaÉszak-EurópaNyugat-EurópaLatin-" + - "Amerika" - -var huRegionIdx = []uint16{ // 292 elements + "ai UnióEurózónaFinnországFidzsiFalkland-szigetekMikronéziaFeröer-szigete" + + "kFranciaországGabonEgyesült KirályságGrenadaGrúziaFrancia GuyanaGuernsey" + + "GhánaGibraltárGrönlandGambiaGuineaGuadeloupeEgyenlítői-GuineaGörögország" + + "Déli-Georgia és Déli-Sandwich-szigetekGuatemalaGuamBissau-GuineaGuyanaHo" + + "ngkong KKTHeard-sziget és McDonald-szigetekHondurasHorvátországHaitiMagy" + + "arországKanári-szigetekIndonéziaÍrországIzraelMan-szigetIndiaBrit Indiai" + + "-óceáni TerületIrakIránIzlandOlaszországJerseyJamaicaJordániaJapánKenyaK" + + "irgizisztánKambodzsaKiribatiComore-szigetekSaint Kitts és NevisÉszak-Kor" + + "eaDél-KoreaKuvaitKajmán-szigetekKazahsztánLaoszLibanonSaint LuciaLiechte" + + "nsteinSrí LankaLibériaLesothoLitvániaLuxemburgLettországLíbiaMarokkóMona" + + "coMoldovaMontenegróSaint MartinMadagaszkárMarshall-szigetekMacedóniaMali" + + "Mianmar (Burma)MongóliaMakaó KKTÉszaki Mariana-szigetekMartiniqueMauritá" + + "niaMontserratMáltaMauritiusMaldív-szigetekMalawiMexikóMalajziaMozambikNa" + + "míbiaÚj-KaledóniaNigerNorfolk-szigetNigériaNicaraguaHollandiaNorvégiaNep" + + "álNauruNiueÚj-ZélandOmánPanamaPeruFrancia PolinéziaPápua Új-GuineaFülöp" + + "-szigetekPakisztánLengyelországSaint-Pierre és MiquelonPitcairn-szigetek" + + "Puerto RicoPalesztin TerületPortugáliaPalauParaguayKatarKülső-ÓceániaRéu" + + "nionRomániaSzerbiaOroszországRuandaSzaúd-ArábiaSalamon-szigetekSeychelle" + + "-szigetekSzudánSvédországSzingapúrSzent IlonaSzlovéniaSvalbard és Jan Ma" + + "yenSzlovákiaSierra LeoneSan MarinoSzenegálSzomáliaSurinameDél-SzudánSão " + + "Tomé és PríncipeSalvadorSint MaartenSzíriaSzváziföldTristan da CunhaTurk" + + "s- és Caicos-szigetekCsádFrancia Déli TerületekTogoThaiföldTádzsikisztán" + + "TokelauKelet-TimorTürkmenisztánTunéziaTongaTörökországTrinidad és Tobago" + + "TuvaluTajvanTanzániaUkrajnaUgandaAz USA lakatlan külbirtokaiEgyesült Nem" + + "zetek SzervezeteEgyesült ÁllamokUruguayÜzbegisztánVatikánSaint Vincent é" + + "s a Grenadine-szigetekVenezuelaBrit Virgin-szigetekAmerikai Virgin-szige" + + "tekVietnamVanuatuWallis és FutunaSzamoaKoszovóJemenMayotteDél-afrikai Kö" + + "ztársaságZambiaZimbabweIsmeretlen körzetVilágAfrikaÉszak-AmerikaDél-Amer" + + "ikaÓceániaNyugat-AfrikaKözép-AmerikaKelet-AfrikaÉszak-AfrikaKözép-Afrika" + + "Afrika déli részeAmerikaAmerika északi részeKarib-térségKelet-ÁzsiaDél-Á" + + "zsiaDélkelet-ÁzsiaDél-EurópaAusztrálázsiaMelanéziaMikronéziai régióPolin" + + "éziaÁzsiaKözép-ÁzsiaNyugat-ÁzsiaEurópaKelet-EurópaÉszak-EurópaNyugat-Eu" + + "rópaLatin-Amerika" + +var huRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0010, 0x0017, 0x0031, 0x003d, 0x0050, 0x0058, 0x0060, 0x006f, 0x0075, 0x007f, 0x0089, 0x0098, 0x00a0, 0x00ab, 0x00b0, @@ -45505,223 +48266,223 @@ var huRegionIdx = []uint16{ // 292 elements 0x028e, 0x0294, 0x029f, 0x02ac, 0x02b8, 0x02c0, 0x02c6, 0x02ce, // Entry 40 - 7F 0x02e6, 0x02ee, 0x02ff, 0x0306, 0x0312, 0x031a, 0x0328, 0x032f, - 0x033d, 0x0345, 0x0353, 0x0353, 0x035e, 0x0364, 0x0375, 0x0380, - 0x0390, 0x039e, 0x03a3, 0x03b8, 0x03bf, 0x03c6, 0x03d4, 0x03dc, - 0x03e2, 0x03ec, 0x03f5, 0x03fb, 0x0401, 0x040b, 0x041e, 0x042c, - 0x0455, 0x045e, 0x0462, 0x046f, 0x0475, 0x0481, 0x04a3, 0x04ab, - 0x04b9, 0x04be, 0x04cb, 0x04db, 0x04e5, 0x04ef, 0x04f5, 0x04ff, - 0x0504, 0x0521, 0x0525, 0x052a, 0x0530, 0x053c, 0x0542, 0x0549, - 0x0552, 0x0558, 0x055d, 0x056a, 0x0573, 0x057b, 0x058a, 0x059f, + 0x033d, 0x0345, 0x0353, 0x035d, 0x0368, 0x036e, 0x037f, 0x038a, + 0x039a, 0x03a8, 0x03ad, 0x03c2, 0x03c9, 0x03d0, 0x03de, 0x03e6, + 0x03ec, 0x03f6, 0x03ff, 0x0405, 0x040b, 0x0415, 0x0428, 0x0436, + 0x045f, 0x0468, 0x046c, 0x0479, 0x047f, 0x048b, 0x04ad, 0x04b5, + 0x04c3, 0x04c8, 0x04d5, 0x04e5, 0x04ef, 0x04f9, 0x04ff, 0x0509, + 0x050e, 0x052b, 0x052f, 0x0534, 0x053a, 0x0546, 0x054c, 0x0553, + 0x055c, 0x0562, 0x0567, 0x0574, 0x057d, 0x0585, 0x0594, 0x05a9, // Entry 80 - BF - 0x05ab, 0x05b5, 0x05bb, 0x05cb, 0x05d6, 0x05db, 0x05e2, 0x05ed, - 0x05fa, 0x0604, 0x060c, 0x0613, 0x061c, 0x0625, 0x0630, 0x0636, - 0x063e, 0x0644, 0x064b, 0x0656, 0x0662, 0x066e, 0x067f, 0x0689, - 0x068d, 0x069c, 0x06a5, 0x06af, 0x06c7, 0x06d1, 0x06dc, 0x06e6, - 0x06ec, 0x06f5, 0x0705, 0x070b, 0x0712, 0x071a, 0x0722, 0x072a, - 0x0738, 0x073d, 0x074b, 0x0753, 0x075c, 0x0765, 0x076e, 0x0774, - 0x0779, 0x077d, 0x0788, 0x078d, 0x0793, 0x0797, 0x07a9, 0x07ba, - 0x07ca, 0x07d4, 0x07e2, 0x07fb, 0x080c, 0x0817, 0x0829, 0x0834, + 0x05b5, 0x05bf, 0x05c5, 0x05d5, 0x05e0, 0x05e5, 0x05ec, 0x05f7, + 0x0604, 0x060e, 0x0616, 0x061d, 0x0626, 0x062f, 0x063a, 0x0640, + 0x0648, 0x064e, 0x0655, 0x0660, 0x066c, 0x0678, 0x0689, 0x0693, + 0x0697, 0x06a6, 0x06af, 0x06b9, 0x06d1, 0x06db, 0x06e6, 0x06f0, + 0x06f6, 0x06ff, 0x070f, 0x0715, 0x071c, 0x0724, 0x072c, 0x0734, + 0x0742, 0x0747, 0x0755, 0x075d, 0x0766, 0x076f, 0x0778, 0x077e, + 0x0783, 0x0787, 0x0792, 0x0797, 0x079d, 0x07a1, 0x07b3, 0x07c4, + 0x07d4, 0x07de, 0x07ec, 0x0805, 0x0816, 0x0821, 0x0833, 0x083e, // Entry C0 - FF - 0x0839, 0x0841, 0x0846, 0x0857, 0x085f, 0x0867, 0x086e, 0x087a, - 0x0880, 0x088e, 0x089e, 0x08b0, 0x08b7, 0x08c3, 0x08cd, 0x08d8, - 0x08e2, 0x08f8, 0x0902, 0x090e, 0x0918, 0x0921, 0x092a, 0x0932, - 0x093e, 0x0955, 0x095d, 0x0969, 0x0970, 0x097c, 0x098c, 0x09a6, - 0x09ab, 0x09c3, 0x09c7, 0x09d0, 0x09df, 0x09e6, 0x09f1, 0x0a00, - 0x0a08, 0x0a0d, 0x0a1b, 0x0a2e, 0x0a34, 0x0a3a, 0x0a43, 0x0a4a, - 0x0a50, 0x0a84, 0x0a88, 0x0a9a, 0x0aa1, 0x0aae, 0x0ab6, 0x0adc, - 0x0ae5, 0x0af9, 0x0b11, 0x0b18, 0x0b1f, 0x0b30, 0x0b36, 0x0b3e, + 0x0843, 0x084b, 0x0850, 0x0861, 0x0869, 0x0871, 0x0878, 0x0884, + 0x088a, 0x0898, 0x08a8, 0x08ba, 0x08c1, 0x08cd, 0x08d7, 0x08e2, + 0x08ec, 0x0902, 0x090c, 0x0918, 0x0922, 0x092b, 0x0934, 0x093c, + 0x0948, 0x0960, 0x0968, 0x0974, 0x097b, 0x0987, 0x0997, 0x09b1, + 0x09b6, 0x09ce, 0x09d2, 0x09db, 0x09ea, 0x09f1, 0x09fc, 0x0a0b, + 0x0a13, 0x0a18, 0x0a26, 0x0a39, 0x0a3f, 0x0a45, 0x0a4e, 0x0a55, + 0x0a5b, 0x0a77, 0x0a94, 0x0aa6, 0x0aad, 0x0aba, 0x0ac2, 0x0ae8, + 0x0af1, 0x0b05, 0x0b1d, 0x0b24, 0x0b2b, 0x0b3c, 0x0b42, 0x0b4a, // Entry 100 - 13F - 0x0b43, 0x0b4a, 0x0b65, 0x0b6b, 0x0b73, 0x0b85, 0x0b8b, 0x0b91, - 0x0b9f, 0x0bab, 0x0bb4, 0x0bc1, 0x0bd0, 0x0bdc, 0x0be9, 0x0bf7, - 0x0c0a, 0x0c11, 0x0c27, 0x0c35, 0x0c41, 0x0c4c, 0x0c5c, 0x0c68, - 0x0c77, 0x0c81, 0x0c95, 0x0c9f, 0x0ca5, 0x0cb3, 0x0cc0, 0x0cc7, - 0x0cd4, 0x0ce2, 0x0cf0, 0x0cfd, -} // Size: 608 bytes - -const hyRegionStr string = "" + // Size: 6248 bytes + 0x0b4f, 0x0b56, 0x0b71, 0x0b77, 0x0b7f, 0x0b91, 0x0b97, 0x0b9d, + 0x0bab, 0x0bb7, 0x0bc0, 0x0bcd, 0x0bdc, 0x0be8, 0x0bf5, 0x0c03, + 0x0c16, 0x0c1d, 0x0c33, 0x0c41, 0x0c4d, 0x0c58, 0x0c68, 0x0c74, + 0x0c83, 0x0c8d, 0x0ca1, 0x0cab, 0x0cb1, 0x0cbf, 0x0ccc, 0x0cd3, + 0x0ce0, 0x0cee, 0x0cfc, 0x0cfc, 0x0d09, +} // Size: 610 bytes + +const hyRegionStr string = "" + // Size: 6268 bytes "Համբարձման կղզիԱնդորրաԱրաբական Միացյալ ԷմիրություններԱֆղանստանԱնտիգուա և" + " ԲարբուդաԱնգուիլաԱլբանիաՀայաստանԱնգոլաԱնտարկտիդաԱրգենտինաԱմերիկյան Սամոա" + "ԱվստրիաԱվստրալիաԱրուբաԱլանդյան կղզիներԱդրբեջանԲոսնիա և ՀերցեգովինաԲարբա" + - "դոսԲանգլադեշԲելգիաԲուրկինա ՖասոԲուլղարիաԲահրեյնԲուրունդիԲենինՍեն Բարտել" + - "միԲերմուդներԲրունեյԲոլիվիաԿարիբյան ՆիդեռլանդներԲրազիլիաԲահամաներԲութանԲ" + - "ուվե կղզիԲոթսվանաԲելառուսԲելիզԿանադաԿոկոսյան (Քիլինգ) կղզիներԿոնգո - Կի" + - "նշասաԿենտրոնական Աֆրիկյան ՀանրապետությունԿոնգո - ԲրազավիլՇվեյցարիաԿոտ դ" + - "’ԻվուարԿուկի կղզիներՉիլիԿամերունՉինաստանԿոլումբիաՔլիփերթոն կղզիԿոստա Ռ" + - "իկաԿուբաԿաբո ՎերդեԿյուրասաոՍուրբ Ծննդյան կղզիԿիպրոսՉեխիաԳերմանիաԴիեգո Գ" + - "արսիաՋիբութիԴանիաԴոմինիկաԴոմինիկյան ՀանրապետությունԱլժիրՍեուտա և Մելիլյ" + - "աԷկվադորԷստոնիաԵգիպտոսԱրևմտյան ՍահարաԷրիթրեաԻսպանիաԵթովպիաԵվրոպական Միո" + - "ւթյունՖինլանդիաՖիջիՖոլքլենդյան կղզիներՄիկրոնեզիաՖարերյան կղզիներՖրանսիա" + - "ԳաբոնՄիացյալ ԹագավորությունԳրենադաՎրաստանՖրանսիական ԳվիանաԳերնսիԳանաՋիբ" + - "րալթարԳրենլանդիաԳամբիաԳվինեաԳվադելուպաՀասարակածային ԳվինեաՀունաստանՀարա" + - "վային Ջորջիա և Հարավային Սենդվիչյան կղզիներԳվատեմալաԳուամԳվինեա-Բիսսաու" + - "ԳայանաՀոնկոնգի ՀՎՇՀերդ կղզի և ՄակԴոնալդի կղզիներՀոնդուրասԽորվաթիաՀայիթի" + - "ՀունգարիաԿանարյան կղզիներԻնդոնեզիաԻռլանդիաԻսրայելՄեն կղզիՀնդկաստանԲրիտա" + - "նական Տարածք Հնդկական ՕվկիանոսումԻրաքԻրանԻսլանդիաԻտալիաՋերսիՃամայկաՀորդ" + - "անանՃապոնիաՔենիաՂրղզստանԿամբոջաԿիրիբատիԿոմորյան կղզիներՍենտ Քիտս և Նևիս" + - "Հյուսիսային ԿորեաՀարավային ԿորեաՔուվեյթԿայմանյան կղզիներՂազախստանԼաոսԼի" + - "բանանՍենթ ԼյուսիաԼիխտենշտեյնՇրի ԼանկաԼիբերիաԼեսոտոԼիտվաԼյուքսեմբուրգԼատ" + - "վիաԼիբիաՄարոկկոՄոնակոՄոլդովաՉեռնոգորիաՍեն ՄարտենՄադագասկարՄարշալյան կղզ" + - "իներՄակեդոնիաՄալիՄյանմա (Բիրմա)ՄոնղոլիաՉինաստանի Մակաո ՀՎՇՀյուսիսային Մ" + - "արիանյան կղզիներՄարտինիկաՄավրիտանիաՄոնսեռատՄալթաՄավրիկիոսՄալդիվներՄալավ" + - "իՄեքսիկաՄալայզիաՄոզամբիկՆամիբիաՆոր ԿալեդոնիաՆիգերՆորֆոլկ կղզիՆիգերիաՆիկ" + - "արագուաՆիդեռլանդներՆորվեգիաՆեպալՆաուրուՆիուեՆոր ԶելանդիաՕմանՊանամաՊերու" + - "Ֆրանսիական ՊոլինեզիաՊապուա Նոր ԳվինեաՖիլիպիններՊակիստանԼեհաստանՍեն Պիեռ" + - " և ՄիքելոնՊիտկեռն կղզիներՊուերտո ՌիկոՊաղեստինյան տարածքներՊորտուգալիաՊալ" + - "աուՊարագվայԿատարԱրտաքին ՕվկիանիաՌեյունիոնՌումինիաՍերբիաՌուսաստանՌուանդա" + - "Սաուդյան ԱրաբիաՍողոմոնյան կղզիներՍեյշելներՍուդանՇվեդիաՍինգապուրՍուրբ Հե" + - "ղինեի կղզիՍլովենիաՍվալբարդ և Յան ՄայենՍլովակիաՍիեռա ԼեոնեՍան ՄարինոՍենե" + - "գալՍոմալիՍուրինամՀարավային ՍուդանՍան Տոմե և ՓրինսիպիՍալվադորՍինտ Մարտեն" + - "ՍիրիաՍվազիլենդՏրիստան դա ԿունյաԹըրքս և Կայկոս կղզիներՉադՖրանսիական Հարա" + - "վային ՏարածքներՏոգոԹայլանդՏաջիկստանՏոկելաուԹիմոր ԼեշտիԹուրքմենստանԹունի" + - "սՏոնգաԹուրքիաՏրինիդադ և ՏոբագոՏուվալուԹայվանՏանզանիաՈւկրաինաՈւգանդաԱրտա" + - "քին կղզիներ (ԱՄՆ)Միավորված ազգերի կազմակերպությունՄիացյալ ՆահանգներՈւրո" + - "ւգվայՈւզբեկստանՎատիկանՍենթ Վինսենթ և ԳրենադիններՎենեսուելաԲրիտանական Վի" + - "րջինյան կղզիներԱՄՆ Վիրջինյան կղզիներՎիետնամՎանուատուՈւոլիս և ՖուտունաՍա" + - "մոաԿոսովոԵմենՄայոտՀարավաֆրիկյան ՀանրապետությունԶամբիաԶիմբաբվեԱնհայտ տար" + - "ածաշրջանԱշխարհԱֆրիկաՀյուսիսային ԱմերիկաՀարավային ԱմերիկաՕվկիանիաԱրևմտյա" + - "ն ԱֆրիկաԿենտրոնական ԱմերիկաԱրևելյան ԱֆրիկաՀյուսիսային ԱֆրիկաԿենտրոնական" + - " ԱֆրիկաՀարավային ԱֆրիկաԱմերիկաՀյուսիսային Ամերիկա - ԱՄՆ և ԿանադաԿարիբներ" + - "Արևելյան ԱսիաՀարավային ԱսիաՀարավարևելյան ԱսիաՀարավային ԵվրոպաԱվստրալասի" + - "աՄելանեզիաՄիկրոնեզյան տարածաշրջանՊոլինեզիաԱսիաԿենտրոնական ԱսիաԱրևմտյան " + - "ԱսիաԵվրոպաԱրևելյան ԵվրոպաՀյուսիսային ԵվրոպաԱրևմտյան ԵվրոպաԼատինական Ամե" + - "րիկա" - -var hyRegionIdx = []uint16{ // 292 elements + "դոսԲանգլադեշԲելգիաԲուրկինա ՖասոԲուլղարիաԲահրեյնԲուրունդիԲենինՍուրբ Բարդ" + + "ուղիմեոսԲերմուդներԲրունեյԲոլիվիաԿարիբյան ՆիդեռլանդներԲրազիլիաԲահամաներԲ" + + "ութանԲուվե կղզիԲոթսվանաԲելառուսԲելիզԿանադաԿոկոսյան (Քիլինգ) կղզիներԿոնգ" + + "ո - ԿինշասաԿենտրոնական Աֆրիկյան ՀանրապետությունԿոնգո - ԲրազավիլՇվեյցարի" + + "աԿոտ դ’ԻվուարԿուկի կղզիներՉիլիԿամերունՉինաստանԿոլումբիաՔլիփերթոն կղզիԿո" + + "ստա ՌիկաԿուբաԿաբո ՎերդեԿյուրասաոՍուրբ Ծննդյան կղզիԿիպրոսՉեխիաԳերմանիաԴի" + + "եգո ԳարսիաՋիբութիԴանիաԴոմինիկաԴոմինիկյան ՀանրապետությունԱլժիրՍեուտա և Մ" + + "ելիլյաԷկվադորԷստոնիաԵգիպտոսԱրևմտյան ՍահարաԷրիթրեաԻսպանիաԵթովպիաԵվրոպակա" + + "ն ՄիությունԵվրագոտիՖինլանդիաՖիջիՖոլքլենդյան կղզիներՄիկրոնեզիաՖարերյան կ" + + "ղզիներՖրանսիաԳաբոնՄիացյալ ԹագավորությունԳրենադաՎրաստանՖրանսիական Գվիանա" + + "ԳերնսիԳանաՋիբրալթարԳրենլանդիաԳամբիաԳվինեաԳվադելուպաՀասարակածային Գվինեա" + + "ՀունաստանՀարավային Ջորջիա և Հարավային Սենդվիչյան կղզիներԳվատեմալաԳուամԳ" + + "վինեա-ԲիսաուԳայանաՀոնկոնգի ՀՎՇՀերդ կղզի և ՄակԴոնալդի կղզիներՀոնդուրասԽո" + + "րվաթիաՀայիթիՀունգարիաԿանարյան կղզիներԻնդոնեզիաԻռլանդիաԻսրայելՄեն կղզիՀն" + + "դկաստանԲրիտանական Տարածք Հնդկական ՕվկիանոսումԻրաքԻրանԻսլանդիաԻտալիաՋերս" + + "իՃամայկաՀորդանանՃապոնիաՔենիաՂրղզստանԿամբոջաԿիրիբատիԿոմորյան կղզիներՍենթ" + + " Քիտս և ՆևիսՀյուսիսային ԿորեաՀարավային ԿորեաՔուվեյթԿայման կղզիներՂազախստ" + + "անԼաոսԼիբանանՍենթ ԼյուսիաԼիխտենշտեյնՇրի ԼանկաԼիբերիաԼեսոտոԼիտվաԼյուքսեմ" + + "բուրգԼատվիաԼիբիաՄարոկկոՄոնակոՄոլդովաՉեռնոգորիաՍեն ՄարտենՄադագասկարՄարշա" + + "լյան կղզիներՄակեդոնիաՄալիՄյանմա (Բիրմա)ՄոնղոլիաՉինաստանի Մակաո ՀՎՇՀյուս" + + "իսային Մարիանյան կղզիներՄարտինիկաՄավրիտանիաՄոնսեռատՄալթաՄավրիկիոսՄալդիվ" + + "ներՄալավիՄեքսիկաՄալայզիաՄոզամբիկՆամիբիաՆոր ԿալեդոնիաՆիգերՆորֆոլկ կղզիՆի" + + "գերիաՆիկարագուաՆիդեռլանդներՆորվեգիաՆեպալՆաուրուՆիուեՆոր ԶելանդիաՕմանՊան" + + "ամաՊերուՖրանսիական ՊոլինեզիաՊապուա Նոր ԳվինեաՖիլիպիններՊակիստանԼեհաստան" + + "Սեն Պիեռ և ՄիքելոնՊիտկեռն կղզիներՊուերտո ՌիկոՊաղեստինյան տարածքներՊորտո" + + "ւգալիաՊալաուՊարագվայԿատարԱրտաքին ՕվկիանիաՌեյունիոնՌումինիաՍերբիաՌուսաստ" + + "անՌուանդաՍաուդյան ԱրաբիաՍողոմոնյան կղզիներՍեյշելներՍուդանՇվեդիաՍինգապու" + + "րՍուրբ Հեղինեի կղզիՍլովենիաՍվալբարդ և Յան ՄայենՍլովակիաՍիեռա ԼեոնեՍան Մ" + + "արինոՍենեգալՍոմալիՍուրինամՀարավային ՍուդանՍան Տոմե և ՓրինսիպիՍալվադորՍի" + + "նտ ՄարտենՍիրիաՍվազիլենդՏրիստան դա ԿունյաԹըրքս և Կայկոս կղզիներՉադՖրանսի" + + "ական Հարավային ՏարածքներՏոգոԹայլանդՏաջիկստանՏոկելաուԹիմոր ԼեշտիԹուրքմեն" + + "ստանԹունիսՏոնգաԹուրքիաՏրինիդադ և ՏոբագոՏուվալուԹայվանՏանզանիաՈւկրաինաՈւ" + + "գանդաԱրտաքին կղզիներ (ԱՄՆ)Միավորված ազգերի կազմակերպությունՄիացյալ Նահա" + + "նգներՈւրուգվայՈւզբեկստանՎատիկանՍենթ Վինսենթ և ԳրենադիններՎենեսուելաԲրիտ" + + "անական Վիրջինյան կղզիներԱՄՆ Վիրջինյան կղզիներՎիետնամՎանուատուՈւոլիս և Ֆ" + + "ուտունաՍամոաԿոսովոԵմենՄայոտՀարավաֆրիկյան ՀանրապետությունԶամբիաԶիմբաբվեԱ" + + "նհայտ տարածաշրջանԱշխարհԱֆրիկաՀյուսիսային ԱմերիկաՀարավային ԱմերիկաՕվկիան" + + "իաԱրևմտյան ԱֆրիկաԿենտրոնական ԱմերիկաԱրևելյան ԱֆրիկաՀյուսիսային ԱֆրիկաԿե" + + "նտրոնական ԱֆրիկաՀարավային ԱֆրիկաԱմերիկաՀյուսիսային Ամերիկա - ԱՄՆ և Կանա" + + "դաԿարիբներԱրևելյան ԱսիաՀարավային ԱսիաՀարավարևելյան ԱսիաՀարավային Եվրոպա" + + "ԱվստրալասիաՄելանեզիաՄիկրոնեզյան տարածաշրջանՊոլինեզիաԱսիաԿենտրոնական Ասի" + + "աԱրևմտյան ԱսիաԵվրոպաԱրևելյան ԵվրոպաՀյուսիսային ԵվրոպաԱրևմտյան ԵվրոպաԼատ" + + "ինական Ամերիկա" + +var hyRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x001d, 0x002b, 0x0067, 0x0079, 0x009d, 0x00ad, 0x00bb, 0x00cb, 0x00d7, 0x00eb, 0x00fd, 0x011a, 0x0128, 0x013a, 0x0146, 0x0165, 0x0175, 0x019b, 0x01ab, 0x01bd, 0x01c9, 0x01e2, 0x01f4, - 0x0202, 0x0214, 0x021e, 0x0235, 0x0249, 0x0257, 0x0265, 0x028e, - 0x029e, 0x02b0, 0x02bc, 0x02cf, 0x02df, 0x02ef, 0x02f9, 0x0305, - 0x0333, 0x034e, 0x0394, 0x03b1, 0x03c3, 0x03db, 0x03f4, 0x03fc, - 0x040c, 0x041c, 0x042e, 0x0449, 0x045c, 0x0466, 0x0479, 0x048b, - 0x04ad, 0x04b9, 0x04c3, 0x04d3, 0x04ea, 0x04f8, 0x0502, 0x0512, + 0x0202, 0x0214, 0x021e, 0x0241, 0x0255, 0x0263, 0x0271, 0x029a, + 0x02aa, 0x02bc, 0x02c8, 0x02db, 0x02eb, 0x02fb, 0x0305, 0x0311, + 0x033f, 0x035a, 0x03a0, 0x03bd, 0x03cf, 0x03e7, 0x0400, 0x0408, + 0x0418, 0x0428, 0x043a, 0x0455, 0x0468, 0x0472, 0x0485, 0x0497, + 0x04b9, 0x04c5, 0x04cf, 0x04df, 0x04f6, 0x0504, 0x050e, 0x051e, // Entry 40 - 7F - 0x0545, 0x054f, 0x056d, 0x057b, 0x0589, 0x0597, 0x05b4, 0x05c2, - 0x05d0, 0x05de, 0x0603, 0x0603, 0x0615, 0x061d, 0x0642, 0x0656, - 0x0675, 0x0683, 0x068d, 0x06b8, 0x06c6, 0x06d4, 0x06f5, 0x0701, - 0x0709, 0x071b, 0x072f, 0x073b, 0x0747, 0x075b, 0x0782, 0x0794, - 0x07ed, 0x07ff, 0x0809, 0x0824, 0x0830, 0x0847, 0x087f, 0x0891, - 0x08a1, 0x08ad, 0x08bf, 0x08de, 0x08f0, 0x0900, 0x090e, 0x091d, - 0x092f, 0x0978, 0x0980, 0x0988, 0x0998, 0x09a4, 0x09ae, 0x09bc, - 0x09cc, 0x09da, 0x09e4, 0x09f4, 0x0a02, 0x0a12, 0x0a31, 0x0a4e, + 0x0551, 0x055b, 0x0579, 0x0587, 0x0595, 0x05a3, 0x05c0, 0x05ce, + 0x05dc, 0x05ea, 0x060f, 0x061f, 0x0631, 0x0639, 0x065e, 0x0672, + 0x0691, 0x069f, 0x06a9, 0x06d4, 0x06e2, 0x06f0, 0x0711, 0x071d, + 0x0725, 0x0737, 0x074b, 0x0757, 0x0763, 0x0777, 0x079e, 0x07b0, + 0x0809, 0x081b, 0x0825, 0x083e, 0x084a, 0x0861, 0x0899, 0x08ab, + 0x08bb, 0x08c7, 0x08d9, 0x08f8, 0x090a, 0x091a, 0x0928, 0x0937, + 0x0949, 0x0992, 0x099a, 0x09a2, 0x09b2, 0x09be, 0x09c8, 0x09d6, + 0x09e6, 0x09f4, 0x09fe, 0x0a0e, 0x0a1c, 0x0a2c, 0x0a4b, 0x0a68, // Entry 80 - BF - 0x0a6f, 0x0a8c, 0x0a9a, 0x0abb, 0x0acd, 0x0ad5, 0x0ae3, 0x0afa, - 0x0b10, 0x0b21, 0x0b2f, 0x0b3b, 0x0b45, 0x0b5f, 0x0b6b, 0x0b75, - 0x0b83, 0x0b8f, 0x0b9d, 0x0bb1, 0x0bc4, 0x0bd8, 0x0bf9, 0x0c0b, - 0x0c13, 0x0c2c, 0x0c3c, 0x0c60, 0x0c98, 0x0caa, 0x0cbe, 0x0cce, - 0x0cd8, 0x0cea, 0x0cfc, 0x0d08, 0x0d16, 0x0d26, 0x0d36, 0x0d44, - 0x0d5d, 0x0d67, 0x0d7e, 0x0d8c, 0x0da0, 0x0db8, 0x0dc8, 0x0dd2, - 0x0de0, 0x0dea, 0x0e01, 0x0e09, 0x0e15, 0x0e1f, 0x0e46, 0x0e66, - 0x0e7a, 0x0e8a, 0x0e9a, 0x0ebb, 0x0ed8, 0x0eef, 0x0f18, 0x0f2e, + 0x0a89, 0x0aa6, 0x0ab4, 0x0acf, 0x0ae1, 0x0ae9, 0x0af7, 0x0b0e, + 0x0b24, 0x0b35, 0x0b43, 0x0b4f, 0x0b59, 0x0b73, 0x0b7f, 0x0b89, + 0x0b97, 0x0ba3, 0x0bb1, 0x0bc5, 0x0bd8, 0x0bec, 0x0c0d, 0x0c1f, + 0x0c27, 0x0c40, 0x0c50, 0x0c74, 0x0cac, 0x0cbe, 0x0cd2, 0x0ce2, + 0x0cec, 0x0cfe, 0x0d10, 0x0d1c, 0x0d2a, 0x0d3a, 0x0d4a, 0x0d58, + 0x0d71, 0x0d7b, 0x0d92, 0x0da0, 0x0db4, 0x0dcc, 0x0ddc, 0x0de6, + 0x0df4, 0x0dfe, 0x0e15, 0x0e1d, 0x0e29, 0x0e33, 0x0e5a, 0x0e7a, + 0x0e8e, 0x0e9e, 0x0eae, 0x0ecf, 0x0eec, 0x0f03, 0x0f2c, 0x0f42, // Entry C0 - FF - 0x0f3a, 0x0f4a, 0x0f54, 0x0f73, 0x0f85, 0x0f95, 0x0fa1, 0x0fb3, - 0x0fc1, 0x0fde, 0x1001, 0x1013, 0x101f, 0x102b, 0x103d, 0x105f, - 0x106f, 0x1094, 0x10a4, 0x10b9, 0x10cc, 0x10da, 0x10e6, 0x10f6, - 0x1115, 0x1138, 0x1148, 0x115d, 0x1167, 0x1179, 0x1199, 0x11c2, - 0x11c8, 0x1202, 0x120a, 0x1218, 0x122a, 0x123a, 0x124f, 0x1267, - 0x1273, 0x127d, 0x128b, 0x12ab, 0x12bb, 0x12c7, 0x12d7, 0x12e7, - 0x12f5, 0x131b, 0x135b, 0x137c, 0x138e, 0x13a2, 0x13b0, 0x13e1, - 0x13f5, 0x142b, 0x1453, 0x1461, 0x1473, 0x1493, 0x149d, 0x14a9, + 0x0f4e, 0x0f5e, 0x0f68, 0x0f87, 0x0f99, 0x0fa9, 0x0fb5, 0x0fc7, + 0x0fd5, 0x0ff2, 0x1015, 0x1027, 0x1033, 0x103f, 0x1051, 0x1073, + 0x1083, 0x10a8, 0x10b8, 0x10cd, 0x10e0, 0x10ee, 0x10fa, 0x110a, + 0x1129, 0x114c, 0x115c, 0x1171, 0x117b, 0x118d, 0x11ad, 0x11d6, + 0x11dc, 0x1216, 0x121e, 0x122c, 0x123e, 0x124e, 0x1263, 0x127b, + 0x1287, 0x1291, 0x129f, 0x12bf, 0x12cf, 0x12db, 0x12eb, 0x12fb, + 0x1309, 0x132f, 0x136f, 0x1390, 0x13a2, 0x13b6, 0x13c4, 0x13f5, + 0x1409, 0x143f, 0x1467, 0x1475, 0x1487, 0x14a7, 0x14b1, 0x14bd, // Entry 100 - 13F - 0x14b1, 0x14bb, 0x14f4, 0x1500, 0x1510, 0x1533, 0x153f, 0x154b, - 0x1570, 0x1591, 0x15a1, 0x15be, 0x15e3, 0x1600, 0x1623, 0x1646, - 0x1665, 0x1673, 0x16b1, 0x16c1, 0x16da, 0x16f5, 0x1718, 0x1737, - 0x174d, 0x175f, 0x178c, 0x179e, 0x17a6, 0x17c5, 0x17de, 0x17ea, - 0x1807, 0x182a, 0x1847, 0x1868, -} // Size: 608 bytes - -const idRegionStr string = "" + // Size: 3077 bytes + 0x14c5, 0x14cf, 0x1508, 0x1514, 0x1524, 0x1547, 0x1553, 0x155f, + 0x1584, 0x15a5, 0x15b5, 0x15d2, 0x15f7, 0x1614, 0x1637, 0x165a, + 0x1679, 0x1687, 0x16c5, 0x16d5, 0x16ee, 0x1709, 0x172c, 0x174b, + 0x1761, 0x1773, 0x17a0, 0x17b2, 0x17ba, 0x17d9, 0x17f2, 0x17fe, + 0x181b, 0x183e, 0x185b, 0x185b, 0x187c, +} // Size: 610 bytes + +const idRegionStr string = "" + // Size: 3073 bytes "Pulau AscensionAndorraUni Emirat ArabAfganistanAntigua dan BarbudaAnguil" + "laAlbaniaArmeniaAngolaAntartikaArgentinaSamoa AmerikaAustriaAustraliaAru" + "baKepulauan AlandAzerbaijanBosnia dan HerzegovinaBarbadosBangladeshBelgi" + "aBurkina FasoBulgariaBahrainBurundiBeninSaint BarthélemyBermudaBruneiBol" + - "iviaKaribia BelandaBrasilBahamaBhutanPulau BouvetBotswanaBelarusBelizeKa" + + "iviaBelanda KaribiaBrasilBahamaBhutanPulau BouvetBotswanaBelarusBelizeKa" + "nadaKepulauan Cocos (Keeling)Kongo - KinshasaRepublik Afrika TengahKongo" + - " - BrazzavilleSwissCote d’IvoireKepulauan CookCileKamerunTiongkokKolombi" + + " - BrazzavilleSwissPantai GadingKepulauan CookCileKamerunTiongkokKolombi" + "aPulau ClippertonKosta RikaKubaTanjung VerdeCuraçaoPulau ChristmasSiprus" + - "Republik CheskaJermanDiego GarciaJibutiDenmarkDominikaRepublik DominikaA" + - "ljazairCeuta dan MelillaEkuadorEstoniaMesirSahara BaratEritreaSpanyolEti" + - "opiaUni EropaFinlandiaFijiKepulauan MalvinasMikronesiaKepulauan FaroePra" + - "ncisGabonInggris RayaGrenadaGeorgiaGuyana PrancisGuernseyGhanaGibraltarG" + - "rinlandiaGambiaGuineaGuadeloupeGuinea EkuatorialYunaniGeorgia Selatan & " + - "Kep. Sandwich SelatanGuatemalaGuamGuinea-BissauGuyanaHong Kong SAR Tiong" + - "kokPulau Heard dan Kepulauan McDonaldHondurasKroasiaHaitiHungariaKepulau" + - "an CanaryIndonesiaIrlandiaIsraelPulau ManIndiaWilayah Inggris di Samudra" + - " HindiaIrakIranIslandiaItaliaJerseyJamaikaYordaniaJepangKenyaKirgistanKa" + - "mbojaKiribatiKomoroSaint Kitts dan NevisKorea UtaraKorea SelatanKuwaitKe" + - "pulauan CaymanKazakstanLaosLebanonSaint LuciaLiechtensteinSri LankaLiber" + - "iaLesothoLituaniaLuksemburgLatviaLibiaMarokoMonakoMoldovaMontenegroSaint" + - " MartinMadagaskarKepulauan MarshallMakedoniaMaliMyanmar (Burma)MongoliaM" + - "akau SAR TiongkokKepulauan Mariana UtaraMartinikMauritaniaMontserratMalt" + - "aMauritiusMaladewaMalawiMeksikoMalaysiaMozambikNamibiaKaledonia BaruNige" + - "rKepulauan NorfolkNigeriaNikaraguaBelandaNorwegiaNepalNauruNiueSelandia " + - "BaruOmanPanamaPeruPolinesia PrancisPapua NuginiFilipinaPakistanPolandiaS" + - "aint Pierre dan MiquelonKepulauan PitcairnPuerto RikoWilayah PalestinaPo" + - "rtugalPalauParaguayQatarOseania LuarRéunionRumaniaSerbiaRusiaRwandaArab " + - "SaudiKepulauan SolomonSeychellesSudanSwediaSingapuraSaint HelenaSlovenia" + - "Kepulauan Svalbard dan Jan MayenSlovakiaSierra LeoneSan MarinoSenegalSom" + - "aliaSurinameSudan SelatanSao Tome dan PrincipeEl SalvadorSint MaartenSur" + - "iahSwazilandTristan da CunhaKepulauan Turks dan CaicosCadWilayah Kutub S" + - "elatan PrancisTogoThailandTajikistanTokelauTimor LesteTurkimenistanTunis" + - "iaTongaTurkiTrinidad dan TobagoTuvaluTaiwanTanzaniaUkrainaUgandaKepulaua" + - "n Terluar A.S.Perserikatan Bangsa-BangsaAmerika SerikatUruguayUzbekistan" + - "VatikanSaint Vincent dan GrenadinesVenezuelaKepulauan Virgin InggrisKepu" + - "lauan Virgin A.S.VietnamVanuatuKepulauan Wallis dan FutunaSamoaKosovoYam" + - "anMayotteAfrika SelatanZambiaZimbabweWilayah Tidak DikenalDuniaAfrikaAme" + - "rika UtaraAmerika SelatanOseaniaAfrika Bagian BaratAmerika TengahAfrika " + - "Bagian TimurAfrika Bagian UtaraAfrika Bagian TengahAfrika Bagian Selatan" + - "AmerikaAmerika Bagian UtaraKepulauan KaribiaAsia Bagian TimurAsia Bagian" + - " SelatanAsia TenggaraEropa Bagian SelatanAustralasiaMelanesiaWilayah Mik" + - "ronesiaPolinesiaAsiaAsia TengahAsia Bagian BaratEropaEropa Bagian TimurE" + - "ropa Bagian UtaraEropa Bagian BaratAmerika Latin" - -var idRegionIdx = []uint16{ // 292 elements + "CekoJermanDiego GarciaJibutiDenmarkDominikaRepublik DominikaAljazairCeut" + + "a dan MelillaEkuadorEstoniaMesirSahara BaratEritreaSpanyolEtiopiaUni Ero" + + "paZona EuroFinlandiaFijiKepulauan MalvinasMikronesiaKepulauan FaroePranc" + + "isGabonInggris RayaGrenadaGeorgiaGuyana PrancisGuernseyGhanaGibraltarGri" + + "nlandiaGambiaGuineaGuadeloupeGuinea EkuatorialYunaniGeorgia Selatan & Ke" + + "p. Sandwich SelatanGuatemalaGuamGuinea-BissauGuyanaHong Kong SAR Tiongko" + + "kPulau Heard dan Kepulauan McDonaldHondurasKroasiaHaitiHungariaKepulauan" + + " CanaryIndonesiaIrlandiaIsraelPulau ManIndiaWilayah Inggris di Samudra H" + + "indiaIrakIranIslandiaItaliaJerseyJamaikaYordaniaJepangKenyaKirgistanKamb" + + "ojaKiribatiKomoroSaint Kitts dan NevisKorea UtaraKorea SelatanKuwaitKepu" + + "lauan CaymanKazakstanLaosLebanonSaint LuciaLiechtensteinSri LankaLiberia" + + "LesothoLituaniaLuksemburgLatviaLibiaMarokoMonakoMoldovaMontenegroSaint M" + + "artinMadagaskarKepulauan MarshallMakedoniaMaliMyanmar (Burma)MongoliaMak" + + "au SAR TiongkokKepulauan Mariana UtaraMartinikMauritaniaMontserratMaltaM" + + "auritiusMaladewaMalawiMeksikoMalaysiaMozambikNamibiaKaledonia BaruNigerK" + + "epulauan NorfolkNigeriaNikaraguaBelandaNorwegiaNepalNauruNiueSelandia Ba" + + "ruOmanPanamaPeruPolinesia PrancisPapua NuginiFilipinaPakistanPolandiaSai" + + "nt Pierre dan MiquelonKepulauan PitcairnPuerto RikoWilayah PalestinaPort" + + "ugalPalauParaguayQatarOseania LuarRéunionRumaniaSerbiaRusiaRwandaArab Sa" + + "udiKepulauan SolomonSeychellesSudanSwediaSingapuraSaint HelenaSloveniaKe" + + "pulauan Svalbard dan Jan MayenSlovakiaSierra LeoneSan MarinoSenegalSomal" + + "iaSurinameSudan SelatanSao Tome dan PrincipeEl SalvadorSint MaartenSuria" + + "hSwazilandTristan da CunhaKepulauan Turks dan CaicosCadWilayah Kutub Sel" + + "atan PrancisTogoThailandTajikistanTokelauTimor LesteTurkimenistanTunisia" + + "TongaTurkiTrinidad dan TobagoTuvaluTaiwanTanzaniaUkrainaUgandaKepulauan " + + "Terluar A.S.Perserikatan Bangsa-BangsaAmerika SerikatUruguayUzbekistanVa" + + "tikanSaint Vincent dan GrenadinesVenezuelaKepulauan Virgin InggrisKepula" + + "uan Virgin A.S.VietnamVanuatuKepulauan Wallis dan FutunaSamoaKosovoYaman" + + "MayotteAfrika SelatanZambiaZimbabweWilayah Tidak DikenalDuniaAfrikaAmeri" + + "ka UtaraAmerika SelatanOseaniaAfrika Bagian BaratAmerika TengahAfrika Ba" + + "gian TimurAfrika Bagian UtaraAfrika Bagian TengahAfrika Bagian SelatanAm" + + "erikaAmerika Bagian UtaraKepulauan KaribiaAsia Bagian TimurAsia Bagian S" + + "elatanAsia TenggaraEropa Bagian SelatanAustralasiaMelanesiaWilayah Mikro" + + "nesiaPolinesiaAsiaAsia TengahAsia Bagian BaratEropaEropa Bagian TimurEro" + + "pa Bagian UtaraEropa Bagian BaratAmerika Latin" + +var idRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x000f, 0x0016, 0x0025, 0x002f, 0x0042, 0x004a, 0x0051, 0x0058, 0x005e, 0x0067, 0x0070, 0x007d, 0x0084, 0x008d, 0x0092, 0x00a1, 0x00ab, 0x00c1, 0x00c9, 0x00d3, 0x00d9, 0x00e5, 0x00ed, 0x00f4, 0x00fb, 0x0100, 0x0111, 0x0118, 0x011e, 0x0125, 0x0134, 0x013a, 0x0140, 0x0146, 0x0152, 0x015a, 0x0161, 0x0167, 0x016d, - 0x0186, 0x0196, 0x01ac, 0x01bf, 0x01c4, 0x01d3, 0x01e1, 0x01e5, - 0x01ec, 0x01f4, 0x01fc, 0x020c, 0x0216, 0x021a, 0x0227, 0x022f, - 0x023e, 0x0244, 0x0253, 0x0259, 0x0265, 0x026b, 0x0272, 0x027a, + 0x0186, 0x0196, 0x01ac, 0x01bf, 0x01c4, 0x01d1, 0x01df, 0x01e3, + 0x01ea, 0x01f2, 0x01fa, 0x020a, 0x0214, 0x0218, 0x0225, 0x022d, + 0x023c, 0x0242, 0x0246, 0x024c, 0x0258, 0x025e, 0x0265, 0x026d, // Entry 40 - 7F - 0x028b, 0x0293, 0x02a4, 0x02ab, 0x02b2, 0x02b7, 0x02c3, 0x02ca, - 0x02d1, 0x02d8, 0x02e1, 0x02e1, 0x02ea, 0x02ee, 0x0300, 0x030a, - 0x0319, 0x0320, 0x0325, 0x0331, 0x0338, 0x033f, 0x034d, 0x0355, - 0x035a, 0x0363, 0x036d, 0x0373, 0x0379, 0x0383, 0x0394, 0x039a, - 0x03c1, 0x03ca, 0x03ce, 0x03db, 0x03e1, 0x03f7, 0x0419, 0x0421, - 0x0428, 0x042d, 0x0435, 0x0445, 0x044e, 0x0456, 0x045c, 0x0465, - 0x046a, 0x048b, 0x048f, 0x0493, 0x049b, 0x04a1, 0x04a7, 0x04ae, - 0x04b6, 0x04bc, 0x04c1, 0x04ca, 0x04d1, 0x04d9, 0x04df, 0x04f4, + 0x027e, 0x0286, 0x0297, 0x029e, 0x02a5, 0x02aa, 0x02b6, 0x02bd, + 0x02c4, 0x02cb, 0x02d4, 0x02dd, 0x02e6, 0x02ea, 0x02fc, 0x0306, + 0x0315, 0x031c, 0x0321, 0x032d, 0x0334, 0x033b, 0x0349, 0x0351, + 0x0356, 0x035f, 0x0369, 0x036f, 0x0375, 0x037f, 0x0390, 0x0396, + 0x03bd, 0x03c6, 0x03ca, 0x03d7, 0x03dd, 0x03f3, 0x0415, 0x041d, + 0x0424, 0x0429, 0x0431, 0x0441, 0x044a, 0x0452, 0x0458, 0x0461, + 0x0466, 0x0487, 0x048b, 0x048f, 0x0497, 0x049d, 0x04a3, 0x04aa, + 0x04b2, 0x04b8, 0x04bd, 0x04c6, 0x04cd, 0x04d5, 0x04db, 0x04f0, // Entry 80 - BF - 0x04ff, 0x050c, 0x0512, 0x0522, 0x052b, 0x052f, 0x0536, 0x0541, - 0x054e, 0x0557, 0x055e, 0x0565, 0x056d, 0x0577, 0x057d, 0x0582, - 0x0588, 0x058e, 0x0595, 0x059f, 0x05ab, 0x05b5, 0x05c7, 0x05d0, - 0x05d4, 0x05e3, 0x05eb, 0x05fd, 0x0614, 0x061c, 0x0626, 0x0630, - 0x0635, 0x063e, 0x0646, 0x064c, 0x0653, 0x065b, 0x0663, 0x066a, - 0x0678, 0x067d, 0x068e, 0x0695, 0x069e, 0x06a5, 0x06ad, 0x06b2, - 0x06b7, 0x06bb, 0x06c8, 0x06cc, 0x06d2, 0x06d6, 0x06e7, 0x06f3, - 0x06fb, 0x0703, 0x070b, 0x0724, 0x0736, 0x0741, 0x0752, 0x075a, + 0x04fb, 0x0508, 0x050e, 0x051e, 0x0527, 0x052b, 0x0532, 0x053d, + 0x054a, 0x0553, 0x055a, 0x0561, 0x0569, 0x0573, 0x0579, 0x057e, + 0x0584, 0x058a, 0x0591, 0x059b, 0x05a7, 0x05b1, 0x05c3, 0x05cc, + 0x05d0, 0x05df, 0x05e7, 0x05f9, 0x0610, 0x0618, 0x0622, 0x062c, + 0x0631, 0x063a, 0x0642, 0x0648, 0x064f, 0x0657, 0x065f, 0x0666, + 0x0674, 0x0679, 0x068a, 0x0691, 0x069a, 0x06a1, 0x06a9, 0x06ae, + 0x06b3, 0x06b7, 0x06c4, 0x06c8, 0x06ce, 0x06d2, 0x06e3, 0x06ef, + 0x06f7, 0x06ff, 0x0707, 0x0720, 0x0732, 0x073d, 0x074e, 0x0756, // Entry C0 - FF - 0x075f, 0x0767, 0x076c, 0x0778, 0x0780, 0x0787, 0x078d, 0x0792, - 0x0798, 0x07a2, 0x07b3, 0x07bd, 0x07c2, 0x07c8, 0x07d1, 0x07dd, - 0x07e5, 0x0805, 0x080d, 0x0819, 0x0823, 0x082a, 0x0831, 0x0839, - 0x0846, 0x085b, 0x0866, 0x0872, 0x0878, 0x0881, 0x0891, 0x08ab, - 0x08ae, 0x08cb, 0x08cf, 0x08d7, 0x08e1, 0x08e8, 0x08f3, 0x0900, - 0x0907, 0x090c, 0x0911, 0x0924, 0x092a, 0x0930, 0x0938, 0x093f, - 0x0945, 0x095b, 0x0975, 0x0984, 0x098b, 0x0995, 0x099c, 0x09b8, - 0x09c1, 0x09d9, 0x09ee, 0x09f5, 0x09fc, 0x0a17, 0x0a1c, 0x0a22, + 0x075b, 0x0763, 0x0768, 0x0774, 0x077c, 0x0783, 0x0789, 0x078e, + 0x0794, 0x079e, 0x07af, 0x07b9, 0x07be, 0x07c4, 0x07cd, 0x07d9, + 0x07e1, 0x0801, 0x0809, 0x0815, 0x081f, 0x0826, 0x082d, 0x0835, + 0x0842, 0x0857, 0x0862, 0x086e, 0x0874, 0x087d, 0x088d, 0x08a7, + 0x08aa, 0x08c7, 0x08cb, 0x08d3, 0x08dd, 0x08e4, 0x08ef, 0x08fc, + 0x0903, 0x0908, 0x090d, 0x0920, 0x0926, 0x092c, 0x0934, 0x093b, + 0x0941, 0x0957, 0x0971, 0x0980, 0x0987, 0x0991, 0x0998, 0x09b4, + 0x09bd, 0x09d5, 0x09ea, 0x09f1, 0x09f8, 0x0a13, 0x0a18, 0x0a1e, // Entry 100 - 13F - 0x0a27, 0x0a2e, 0x0a3c, 0x0a42, 0x0a4a, 0x0a5f, 0x0a64, 0x0a6a, - 0x0a77, 0x0a86, 0x0a8d, 0x0aa0, 0x0aae, 0x0ac1, 0x0ad4, 0x0ae8, - 0x0afd, 0x0b04, 0x0b18, 0x0b29, 0x0b3a, 0x0b4d, 0x0b5a, 0x0b6e, - 0x0b79, 0x0b82, 0x0b94, 0x0b9d, 0x0ba1, 0x0bac, 0x0bbd, 0x0bc2, - 0x0bd4, 0x0be6, 0x0bf8, 0x0c05, -} // Size: 608 bytes - -const isRegionStr string = "" + // Size: 3329 bytes + 0x0a23, 0x0a2a, 0x0a38, 0x0a3e, 0x0a46, 0x0a5b, 0x0a60, 0x0a66, + 0x0a73, 0x0a82, 0x0a89, 0x0a9c, 0x0aaa, 0x0abd, 0x0ad0, 0x0ae4, + 0x0af9, 0x0b00, 0x0b14, 0x0b25, 0x0b36, 0x0b49, 0x0b56, 0x0b6a, + 0x0b75, 0x0b7e, 0x0b90, 0x0b99, 0x0b9d, 0x0ba8, 0x0bb9, 0x0bbe, + 0x0bd0, 0x0be2, 0x0bf4, 0x0bf4, 0x0c01, +} // Size: 610 bytes + +const isRegionStr string = "" + // Size: 3338 bytes "Ascension-eyjaAndorraSameinuðu arabísku furstadæminAfganistanAntígva og " + "BarbúdaAngvillaAlbaníaArmeníaAngólaSuðurskautslandiðArgentínaBandaríska " + "SamóaAusturríkiÁstralíaArúbaÁlandseyjarAserbaídsjanBosnía og Hersegóvína" + @@ -45732,40 +48493,40 @@ const isRegionStr string = "" + // Size: 3329 bytes "tröndinCooks-eyjarSíleKamerúnKínaKólumbíaClipperton-eyjaKostaríkaKúbaGræ" + "nhöfðaeyjarCuracaoJólaeyKýpurTékklandÞýskalandDiego GarciaDjíbútíDanmörk" + "DóminíkaDóminíska lýðveldiðAlsírCeuta og MelillaEkvadorEistlandEgyptalan" + - "dVestur-SaharaErítreaSpánnEþíópíaEvrópusambandiðFinnlandFídjíeyjarFalkla" + - "ndseyjarMíkrónesíaFæreyjarFrakklandGabonBretlandGrenadaGeorgíaFranska Gv" + - "æjanaGuernseyGanaGíbraltarGrænlandGambíaGíneaGvadelúpeyjarMiðbaugs-Gíne" + - "aGrikklandSuður-Georgía og Suður-SandvíkureyjarGvatemalaGvamGínea-BissáG" + - "væjanaSjálfstjórnarsvæðið Hong KongHeard og McDonaldseyjarHondúrasKróatí" + - "aHaítíUngverjalandKanaríeyjarIndónesíaÍrlandÍsraelMönIndlandBresku Indla" + - "ndshafseyjarÍrakÍranÍslandÍtalíaJerseyJamaíkaJórdaníaJapanKeníaKirgistan" + - "KambódíaKíribatíKómoreyjarSankti Kitts og NevisNorður-KóreaSuður-KóreaKú" + - "veitCaymaneyjarKasakstanLaosLíbanonSankti LúsíaLiechtensteinSrí LankaLíb" + - "eríaLesótóLitháenLúxemborgLettlandLíbíaMarokkóMónakóMoldóvaSvartfjallala" + - "ndSt. MartinMadagaskarMarshalleyjarMakedóníaMalíMjanmar (Búrma)MongólíaS" + - "jálfstjórnarsvæðið MakaóNorður-MaríanaeyjarMartiníkMáritaníaMontserratMa" + - "ltaMáritíusMaldíveyjarMalavíMexíkóMalasíaMósambíkNamibíaNýja-KaledóníaNí" + - "gerNorfolkeyjaNígeríaNíkaragvaHollandNoregurNepalNárúNiueNýja-SjálandÓma" + - "nPanamaPerúFranska PólýnesíaPapúa Nýja-GíneaFilippseyjarPakistanPóllandS" + - "ankti Pierre og MiquelonPitcairn-eyjarPúertó RíkóHeimastjórnarsvæði Pale" + - "stínumannaPortúgalPaláParagvæKatarYtri EyjaálfaRéunionRúmeníaSerbíaRússl" + - "andRúandaSádi-ArabíaSalómonseyjarSeychelles-eyjarSúdanSvíþjóðSingapúrSan" + - "kti HelenaSlóveníaSvalbarði og Jan MayenSlóvakíaSíerra LeóneSan MarínóSe" + - "negalSómalíaSúrínamSuður-SúdanSaó Tóme og PrinsípeEl SalvadorSankti Mart" + - "inSýrlandSvasílandTristan da CunhaTurks- og CaicoseyjarTsjadFrönsku suðl" + - "ægu landsvæðinTógóTaílandTadsjikistanTókeláTímor-LesteTúrkmenistanTúnis" + - "TongaTyrklandTrínidad og TóbagóTúvalúTaívanTansaníaÚkraínaÚgandaSmáeyjar" + - " BandaríkjannaSameinuðu þjóðirnarBandaríkinÚrúgvæÚsbekistanVatíkaniðSank" + - "ti Vinsent og GrenadíneyjarVenesúelaBresku JómfrúaeyjarBandarísku Jómfrú" + - "aeyjarVíetnamVanúatúWallis- og FútúnaeyjarSamóaKósóvóJemenMayotteSuður-A" + - "fríkaSambíaSimbabveÓþekkt svæðiHeimurinnAfríkaNorður-AmeríkaSuður-Amerík" + - "aEyjaálfaVestur-AfríkaMið-AmeríkaAustur-AfríkaNorður-AfríkaMið-AfríkaSuð" + - "urhluti AfríkuAmeríkaAmeríka norðan MexikóKaríbahafiðAustur-AsíaSuður-As" + - "íaSuðaustur-AsíaSuður-EvrópaÁstralasíaMelanesíaMíkrónesíusvæðiðPólýnesí" + - "aAsíaMið-AsíaVestur-AsíaEvrópaAustur-EvrópaNorður-EvrópaVestur-EvrópaRóm" + - "anska Ameríka" - -var isRegionIdx = []uint16{ // 292 elements + "dVestur-SaharaErítreaSpánnEþíópíaEvrópusambandiðEvrusvæðiðFinnlandFídjíe" + + "yjarFalklandseyjarMíkrónesíaFæreyjarFrakklandGabonBretlandGrenadaGeorgía" + + "Franska GvæjanaGuernseyGanaGíbraltarGrænlandGambíaGíneaGvadelúpeyjarMiðb" + + "augs-GíneaGrikklandSuður-Georgía og Suður-SandvíkureyjarGvatemalaGvamGín" + + "ea-BissáGvæjanasérstjórnarsvæðið Hong KongHeard og McDonaldseyjarHondúra" + + "sKróatíaHaítíUngverjalandKanaríeyjarIndónesíaÍrlandÍsraelMönIndlandBresk" + + "u IndlandshafseyjarÍrakÍranÍslandÍtalíaJerseyJamaíkaJórdaníaJapanKeníaKi" + + "rgistanKambódíaKíribatíKómoreyjarSankti Kitts og NevisNorður-KóreaSuður-" + + "KóreaKúveitCaymaneyjarKasakstanLaosLíbanonSankti LúsíaLiechtensteinSrí L" + + "ankaLíberíaLesótóLitháenLúxemborgLettlandLíbíaMarokkóMónakóMoldóvaSvartf" + + "jallalandSt. MartinMadagaskarMarshalleyjarMakedóníaMalíMjanmar (Búrma)Mo" + + "ngólíasérstjórnarsvæðið MakaóNorður-MaríanaeyjarMartiníkMáritaníaMontser" + + "ratMaltaMáritíusMaldíveyjarMalavíMexíkóMalasíaMósambíkNamibíaNýja-Kaledó" + + "níaNígerNorfolkeyjaNígeríaNíkaragvaHollandNoregurNepalNárúNiueNýja-Sjála" + + "ndÓmanPanamaPerúFranska PólýnesíaPapúa Nýja-GíneaFilippseyjarPakistanPól" + + "landSankti Pierre og MiquelonPitcairn-eyjarPúertó RíkóHeimastjórnarsvæði" + + " PalestínumannaPortúgalPaláParagvæKatarYtri EyjaálfaRéunionRúmeníaSerbía" + + "RússlandRúandaSádi-ArabíaSalómonseyjarSeychelles-eyjarSúdanSvíþjóðSingap" + + "úrSankti HelenaSlóveníaSvalbarði og Jan MayenSlóvakíaSíerra LeóneSan Ma" + + "rínóSenegalSómalíaSúrínamSuður-SúdanSaó Tóme og PrinsípeEl SalvadorSankt" + + "i MartinSýrlandSvasílandTristan da CunhaTurks- og CaicoseyjarTsjadFrönsk" + + "u suðlægu landsvæðinTógóTaílandTadsjikistanTókeláTímor-LesteTúrkmenistan" + + "TúnisTongaTyrklandTrínidad og TóbagóTúvalúTaívanTansaníaÚkraínaÚgandaSmá" + + "eyjar BandaríkjannaSameinuðu þjóðirnarBandaríkinÚrúgvæÚsbekistanVatíkani" + + "ðSankti Vinsent og GrenadíneyjarVenesúelaBresku JómfrúaeyjarBandarísku " + + "JómfrúaeyjarVíetnamVanúatúWallis- og FútúnaeyjarSamóaKósóvóJemenMayotteS" + + "uður-AfríkaSambíaSimbabveÓþekkt svæðiHeimurinnAfríkaNorður-AmeríkaSuður-" + + "AmeríkaEyjaálfaVestur-AfríkaMið-AmeríkaAustur-AfríkaNorður-AfríkaMið-Afr" + + "íkaSuðurhluti AfríkuAmeríkaAmeríka norðan MexikóKaríbahafiðAustur-AsíaS" + + "uður-AsíaSuðaustur-AsíaSuður-EvrópaÁstralasíaMelanesíaMíkrónesíusvæðiðPó" + + "lýnesíaAsíaMið-AsíaVestur-AsíaEvrópaAustur-EvrópaNorður-EvrópaVestur-Evr" + + "ópaRómanska Ameríka" + +var isRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x000e, 0x0015, 0x0036, 0x0040, 0x0054, 0x005c, 0x0064, 0x006c, 0x0073, 0x0086, 0x0090, 0x00a2, 0x00ad, 0x00b7, 0x00bd, @@ -45777,40 +48538,40 @@ var isRegionIdx = []uint16{ // 292 elements 0x0299, 0x029f, 0x02a8, 0x02b3, 0x02bf, 0x02c9, 0x02d1, 0x02db, // Entry 40 - 7F 0x02f3, 0x02f9, 0x0309, 0x0310, 0x0318, 0x0322, 0x032f, 0x0337, - 0x033d, 0x0348, 0x0359, 0x0359, 0x0361, 0x036d, 0x037b, 0x0388, - 0x0391, 0x039a, 0x039f, 0x03a7, 0x03ae, 0x03b6, 0x03c6, 0x03ce, - 0x03d2, 0x03dc, 0x03e5, 0x03ec, 0x03f2, 0x0400, 0x0410, 0x0419, - 0x0442, 0x044b, 0x044f, 0x045c, 0x0464, 0x0486, 0x049d, 0x04a6, - 0x04af, 0x04b6, 0x04c2, 0x04ce, 0x04d9, 0x04e0, 0x04e7, 0x04eb, - 0x04f2, 0x050a, 0x050f, 0x0514, 0x051b, 0x0523, 0x0529, 0x0531, - 0x053b, 0x0540, 0x0546, 0x054f, 0x0559, 0x0563, 0x056e, 0x0583, + 0x033d, 0x0348, 0x0359, 0x0366, 0x036e, 0x037a, 0x0388, 0x0395, + 0x039e, 0x03a7, 0x03ac, 0x03b4, 0x03bb, 0x03c3, 0x03d3, 0x03db, + 0x03df, 0x03e9, 0x03f2, 0x03f9, 0x03ff, 0x040d, 0x041d, 0x0426, + 0x044f, 0x0458, 0x045c, 0x0469, 0x0471, 0x0491, 0x04a8, 0x04b1, + 0x04ba, 0x04c1, 0x04cd, 0x04d9, 0x04e4, 0x04eb, 0x04f2, 0x04f6, + 0x04fd, 0x0515, 0x051a, 0x051f, 0x0526, 0x052e, 0x0534, 0x053c, + 0x0546, 0x054b, 0x0551, 0x055a, 0x0564, 0x056e, 0x0579, 0x058e, // Entry 80 - BF - 0x0591, 0x059e, 0x05a5, 0x05b0, 0x05b9, 0x05bd, 0x05c5, 0x05d3, - 0x05e0, 0x05ea, 0x05f3, 0x05fb, 0x0603, 0x060d, 0x0615, 0x061c, - 0x0624, 0x062c, 0x0634, 0x0643, 0x064d, 0x0657, 0x0664, 0x066f, - 0x0674, 0x0684, 0x068e, 0x06ad, 0x06c2, 0x06cb, 0x06d6, 0x06e0, - 0x06e5, 0x06ef, 0x06fb, 0x0702, 0x070a, 0x0712, 0x071c, 0x0724, - 0x0735, 0x073b, 0x0746, 0x074f, 0x0759, 0x0760, 0x0767, 0x076c, - 0x0772, 0x0776, 0x0784, 0x0789, 0x078f, 0x0794, 0x07a8, 0x07bb, - 0x07c7, 0x07cf, 0x07d7, 0x07f0, 0x07fe, 0x080d, 0x0832, 0x083b, + 0x059c, 0x05a9, 0x05b0, 0x05bb, 0x05c4, 0x05c8, 0x05d0, 0x05de, + 0x05eb, 0x05f5, 0x05fe, 0x0606, 0x060e, 0x0618, 0x0620, 0x0627, + 0x062f, 0x0637, 0x063f, 0x064e, 0x0658, 0x0662, 0x066f, 0x067a, + 0x067f, 0x068f, 0x0699, 0x06b6, 0x06cb, 0x06d4, 0x06df, 0x06e9, + 0x06ee, 0x06f8, 0x0704, 0x070b, 0x0713, 0x071b, 0x0725, 0x072d, + 0x073e, 0x0744, 0x074f, 0x0758, 0x0762, 0x0769, 0x0770, 0x0775, + 0x077b, 0x077f, 0x078d, 0x0792, 0x0798, 0x079d, 0x07b1, 0x07c4, + 0x07d0, 0x07d8, 0x07e0, 0x07f9, 0x0807, 0x0816, 0x083b, 0x0844, // Entry C0 - FF - 0x0840, 0x0848, 0x084d, 0x085b, 0x0863, 0x086c, 0x0873, 0x087c, - 0x0883, 0x0890, 0x089e, 0x08ae, 0x08b4, 0x08bf, 0x08c8, 0x08d5, - 0x08df, 0x08f6, 0x0900, 0x090e, 0x091a, 0x0921, 0x092a, 0x0933, - 0x0940, 0x0957, 0x0962, 0x096f, 0x0977, 0x0981, 0x0991, 0x09a6, - 0x09ab, 0x09ca, 0x09d0, 0x09d8, 0x09e4, 0x09ec, 0x09f8, 0x0a05, - 0x0a0b, 0x0a10, 0x0a18, 0x0a2d, 0x0a35, 0x0a3c, 0x0a45, 0x0a4e, - 0x0a55, 0x0a6d, 0x0a84, 0x0a8f, 0x0a98, 0x0aa3, 0x0aae, 0x0ace, - 0x0ad8, 0x0aed, 0x0b07, 0x0b0f, 0x0b18, 0x0b30, 0x0b36, 0x0b3f, + 0x0849, 0x0851, 0x0856, 0x0864, 0x086c, 0x0875, 0x087c, 0x0885, + 0x088c, 0x0899, 0x08a7, 0x08b7, 0x08bd, 0x08c8, 0x08d1, 0x08de, + 0x08e8, 0x08ff, 0x0909, 0x0917, 0x0923, 0x092a, 0x0933, 0x093c, + 0x0949, 0x0960, 0x096b, 0x0978, 0x0980, 0x098a, 0x099a, 0x09af, + 0x09b4, 0x09d3, 0x09d9, 0x09e1, 0x09ed, 0x09f5, 0x0a01, 0x0a0e, + 0x0a14, 0x0a19, 0x0a21, 0x0a36, 0x0a3e, 0x0a45, 0x0a4e, 0x0a57, + 0x0a5e, 0x0a76, 0x0a8d, 0x0a98, 0x0aa1, 0x0aac, 0x0ab7, 0x0ad7, + 0x0ae1, 0x0af6, 0x0b10, 0x0b18, 0x0b21, 0x0b39, 0x0b3f, 0x0b48, // Entry 100 - 13F - 0x0b44, 0x0b4b, 0x0b59, 0x0b60, 0x0b68, 0x0b78, 0x0b81, 0x0b88, - 0x0b98, 0x0ba7, 0x0bb0, 0x0bbe, 0x0bcb, 0x0bd9, 0x0be8, 0x0bf4, - 0x0c07, 0x0c0f, 0x0c27, 0x0c34, 0x0c40, 0x0c4c, 0x0c5c, 0x0c6a, - 0x0c76, 0x0c80, 0x0c96, 0x0ca2, 0x0ca7, 0x0cb1, 0x0cbd, 0x0cc4, - 0x0cd2, 0x0ce1, 0x0cef, 0x0d01, -} // Size: 608 bytes - -const itRegionStr string = "" + // Size: 3040 bytes + 0x0b4d, 0x0b54, 0x0b62, 0x0b69, 0x0b71, 0x0b81, 0x0b8a, 0x0b91, + 0x0ba1, 0x0bb0, 0x0bb9, 0x0bc7, 0x0bd4, 0x0be2, 0x0bf1, 0x0bfd, + 0x0c10, 0x0c18, 0x0c30, 0x0c3d, 0x0c49, 0x0c55, 0x0c65, 0x0c73, + 0x0c7f, 0x0c89, 0x0c9f, 0x0cab, 0x0cb0, 0x0cba, 0x0cc6, 0x0ccd, + 0x0cdb, 0x0cea, 0x0cf8, 0x0cf8, 0x0d0a, +} // Size: 610 bytes + +const itRegionStr string = "" + // Size: 3036 bytes "Isola AscensioneAndorraEmirati Arabi UnitiAfghanistanAntigua e BarbudaAn" + "guillaAlbaniaArmeniaAngolaAntartideArgentinaSamoa americaneAustriaAustra" + "liaArubaIsole ÅlandAzerbaigianBosnia ed ErzegovinaBarbadosBangladeshBelg" + @@ -45818,43 +48579,43 @@ const itRegionStr string = "" + // Size: 3040 bytes "liviaCaraibi olandesiBrasileBahamasBhutanIsola BouvetBotswanaBielorussia" + "BelizeCanadaIsole Cocos (Keeling)Congo - KinshasaRepubblica Centrafrican" + "aCongo-BrazzavilleSvizzeraCosta d’AvorioIsole CookCileCamerunCinaColombi" + - "aIsola di ClippertonCosta RicaCubaCapo VerdeCuraçaoIsola ChristmasCiproR" + - "epubblica CecaGermaniaDiego GarciaGibutiDanimarcaDominicaRepubblica Domi" + - "nicanaAlgeriaCeuta e MelillaEcuadorEstoniaEgittoSahara occidentaleEritre" + - "aSpagnaEtiopiaUnione EuropeaFinlandiaFigiIsole FalklandMicronesiaIsole F" + - "ær ØerFranciaGabonRegno UnitoGrenadaGeorgiaGuyana franceseGuernseyGhana" + - "GibilterraGroenlandiaGambiaGuineaGuadalupaGuinea EquatorialeGreciaGeorgi" + - "a del Sud e Sandwich australiGuatemalaGuamGuinea-BissauGuyanaRAS di Hong" + - " KongIsole Heard e McDonaldHondurasCroaziaHaitiUngheriaIsole CanarieIndo" + - "nesiaIrlandaIsraeleIsola di ManIndiaTerritorio britannico dell’Oceano In" + - "dianoIraqIranIslandaItaliaJerseyGiamaicaGiordaniaGiapponeKenyaKirghizist" + - "anCambogiaKiribatiComoreSaint Kitts e NevisCorea del NordCorea del SudKu" + - "waitIsole CaymanKazakistanLaosLibanoSaint LuciaLiechtensteinSri LankaLib" + - "eriaLesothoLituaniaLussemburgoLettoniaLibiaMaroccoMonacoMoldaviaMonteneg" + - "roSaint MartinMadagascarIsole MarshallRepubblica di MacedoniaMaliMyanmar" + - " (Birmania)MongoliaRAS di MacaoIsole Marianne settentrionaliMartinicaMau" + - "ritaniaMontserratMaltaMauritiusMaldiveMalawiMessicoMalaysiaMozambicoNami" + - "biaNuova CaledoniaNigerIsola NorfolkNigeriaNicaraguaPaesi BassiNorvegiaN" + - "epalNauruNiueNuova ZelandaOmanPanamáPerùPolinesia francesePapua Nuova Gu" + - "ineaFilippinePakistanPoloniaSaint Pierre e MiquelonIsole PitcairnPortori" + - "coTerritori palestinesiPortogalloPalauParaguayQatarOceania lontanaRiunio" + - "neRomaniaSerbiaRussiaRuandaArabia SauditaIsole SalomoneSeychellesSudanSv" + - "eziaSingaporeSant’ElenaSloveniaSvalbard e Jan MayenSlovacchiaSierra Leon" + - "eSan MarinoSenegalSomaliaSurinameSud SudanSão Tomé e PríncipeEl Salvador" + - "Sint MaartenSiriaSwazilandTristan da CunhaIsole Turks e CaicosCiadTerre " + - "australi francesiTogoThailandiaTagikistanTokelauTimor LesteTurkmenistanT" + - "unisiaTongaTurchiaTrinidad e TobagoTuvaluTaiwanTanzaniaUcrainaUgandaAltr" + - "e isole americane del Pacificonazioni uniteStati UnitiUruguayUzbekistanC" + - "ittà del VaticanoSaint Vincent e GrenadinesVenezuelaIsole Vergini Britan" + - "nicheIsole Vergini AmericaneVietnamVanuatuWallis e FutunaSamoaKosovoYeme" + - "nMayotteSudafricaZambiaZimbabweRegione sconosciutaMondoAfricaNord Americ" + - "aAmerica del SudOceaniaAfrica occidentaleAmerica CentraleAfrica oriental" + - "eNordafricaAfrica centraleAfrica del SudAmericheAmerica del NordCaraibiA" + - "sia orientaleAsia del SudSud-est asiaticoEuropa meridionaleAustralasiaMe" + - "lanesiaRegione micronesianaPolinesiaAsiaAsia centraleAsia occidentaleEur" + - "opaEuropa orientaleEuropa settentrionaleEuropa occidentaleAmerica Latina" - -var itRegionIdx = []uint16{ // 292 elements + "aIsola di ClippertonCosta RicaCubaCapo VerdeCuraçaoIsola ChristmasCiproC" + + "echiaGermaniaDiego GarciaGibutiDanimarcaDominicaRepubblica DominicanaAlg" + + "eriaCeuta e MelillaEcuadorEstoniaEgittoSahara occidentaleEritreaSpagnaEt" + + "iopiaUnione EuropeaEurozonaFinlandiaFigiIsole FalklandMicronesiaIsole Fæ" + + "r ØerFranciaGabonRegno UnitoGrenadaGeorgiaGuyana franceseGuernseyGhanaGi" + + "bilterraGroenlandiaGambiaGuineaGuadalupaGuinea EquatorialeGreciaGeorgia " + + "del Sud e Sandwich australiGuatemalaGuamGuinea-BissauGuyanaRAS di Hong K" + + "ongIsole Heard e McDonaldHondurasCroaziaHaitiUngheriaIsole CanarieIndone" + + "siaIrlandaIsraeleIsola di ManIndiaTerritorio britannico dell’Oceano Indi" + + "anoIraqIranIslandaItaliaJerseyGiamaicaGiordaniaGiapponeKenyaKirghizistan" + + "CambogiaKiribatiComoreSaint Kitts e NevisCorea del NordCorea del SudKuwa" + + "itIsole CaymanKazakistanLaosLibanoSaint LuciaLiechtensteinSri LankaLiber" + + "iaLesothoLituaniaLussemburgoLettoniaLibiaMaroccoMonacoMoldaviaMontenegro" + + "Saint MartinMadagascarIsole MarshallRepubblica di MacedoniaMaliMyanmar (" + + "Birmania)MongoliaRAS di MacaoIsole Marianne settentrionaliMartinicaMauri" + + "taniaMontserratMaltaMauritiusMaldiveMalawiMessicoMalaysiaMozambicoNamibi" + + "aNuova CaledoniaNigerIsola NorfolkNigeriaNicaraguaPaesi BassiNorvegiaNep" + + "alNauruNiueNuova ZelandaOmanPanamáPerùPolinesia francesePapua Nuova Guin" + + "eaFilippinePakistanPoloniaSaint-Pierre e MiquelonIsole PitcairnPortorico" + + "Territori palestinesiPortogalloPalauParaguayQatarOceania lontanaRiunione" + + "RomaniaSerbiaRussiaRuandaArabia SauditaIsole SalomoneSeychellesSudanSvez" + + "iaSingaporeSant’ElenaSloveniaSvalbard e Jan MayenSlovacchiaSierra LeoneS" + + "an MarinoSenegalSomaliaSurinameSud SudanSão Tomé e PríncipeEl SalvadorSi" + + "nt MaartenSiriaSwazilandTristan da CunhaIsole Turks e CaicosCiadTerre au" + + "strali francesiTogoThailandiaTagikistanTokelauTimor EstTurkmenistanTunis" + + "iaTongaTurchiaTrinidad e TobagoTuvaluTaiwanTanzaniaUcrainaUgandaAltre is" + + "ole americane del PacificoNazioni UniteStati UnitiUruguayUzbekistanCittà" + + " del VaticanoSaint Vincent e GrenadineVenezuelaIsole Vergini Britanniche" + + "Isole Vergini AmericaneVietnamVanuatuWallis e FutunaSamoaKosovoYemenMayo" + + "tteSudafricaZambiaZimbabweRegione sconosciutaMondoAfricaNord AmericaAmer" + + "ica del SudOceaniaAfrica occidentaleAmerica CentraleAfrica orientaleNord" + + "africaAfrica centraleAfrica del SudAmericheAmerica del NordCaraibiAsia o" + + "rientaleAsia del SudSud-est asiaticoEuropa meridionaleAustralasiaMelanes" + + "iaRegione micronesianaPolinesiaAsiaAsia centraleAsia occidentaleEuropaEu" + + "ropa orientaleEuropa settentrionaleEuropa occidentaleAmerica Latina" + +var itRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0010, 0x0017, 0x002a, 0x0035, 0x0046, 0x004e, 0x0055, 0x005c, 0x0062, 0x006b, 0x0074, 0x0083, 0x008a, 0x0093, 0x0098, @@ -45863,114 +48624,114 @@ var itRegionIdx = []uint16{ // 292 elements 0x013e, 0x0145, 0x014b, 0x0157, 0x015f, 0x016a, 0x0170, 0x0176, 0x018b, 0x019b, 0x01b3, 0x01c4, 0x01cc, 0x01dc, 0x01e6, 0x01ea, 0x01f1, 0x01f5, 0x01fd, 0x0210, 0x021a, 0x021e, 0x0228, 0x0230, - 0x023f, 0x0244, 0x0253, 0x025b, 0x0267, 0x026d, 0x0276, 0x027e, + 0x023f, 0x0244, 0x024a, 0x0252, 0x025e, 0x0264, 0x026d, 0x0275, // Entry 40 - 7F - 0x0293, 0x029a, 0x02a9, 0x02b0, 0x02b7, 0x02bd, 0x02cf, 0x02d6, - 0x02dc, 0x02e3, 0x02f1, 0x02f1, 0x02fa, 0x02fe, 0x030c, 0x0316, - 0x0325, 0x032c, 0x0331, 0x033c, 0x0343, 0x034a, 0x0359, 0x0361, - 0x0366, 0x0370, 0x037b, 0x0381, 0x0387, 0x0390, 0x03a2, 0x03a8, - 0x03cb, 0x03d4, 0x03d8, 0x03e5, 0x03eb, 0x03fb, 0x0411, 0x0419, - 0x0420, 0x0425, 0x042d, 0x043a, 0x0443, 0x044a, 0x0451, 0x045d, - 0x0462, 0x048d, 0x0491, 0x0495, 0x049c, 0x04a2, 0x04a8, 0x04b0, - 0x04b9, 0x04c1, 0x04c6, 0x04d2, 0x04da, 0x04e2, 0x04e8, 0x04fb, + 0x028a, 0x0291, 0x02a0, 0x02a7, 0x02ae, 0x02b4, 0x02c6, 0x02cd, + 0x02d3, 0x02da, 0x02e8, 0x02f0, 0x02f9, 0x02fd, 0x030b, 0x0315, + 0x0324, 0x032b, 0x0330, 0x033b, 0x0342, 0x0349, 0x0358, 0x0360, + 0x0365, 0x036f, 0x037a, 0x0380, 0x0386, 0x038f, 0x03a1, 0x03a7, + 0x03ca, 0x03d3, 0x03d7, 0x03e4, 0x03ea, 0x03fa, 0x0410, 0x0418, + 0x041f, 0x0424, 0x042c, 0x0439, 0x0442, 0x0449, 0x0450, 0x045c, + 0x0461, 0x048c, 0x0490, 0x0494, 0x049b, 0x04a1, 0x04a7, 0x04af, + 0x04b8, 0x04c0, 0x04c5, 0x04d1, 0x04d9, 0x04e1, 0x04e7, 0x04fa, // Entry 80 - BF - 0x0509, 0x0516, 0x051c, 0x0528, 0x0532, 0x0536, 0x053c, 0x0547, - 0x0554, 0x055d, 0x0564, 0x056b, 0x0573, 0x057e, 0x0586, 0x058b, - 0x0592, 0x0598, 0x05a0, 0x05aa, 0x05b6, 0x05c0, 0x05ce, 0x05e5, - 0x05e9, 0x05fb, 0x0603, 0x060f, 0x062c, 0x0635, 0x063f, 0x0649, - 0x064e, 0x0657, 0x065e, 0x0664, 0x066b, 0x0673, 0x067c, 0x0683, - 0x0692, 0x0697, 0x06a4, 0x06ab, 0x06b4, 0x06bf, 0x06c7, 0x06cc, - 0x06d1, 0x06d5, 0x06e2, 0x06e6, 0x06ed, 0x06f2, 0x0704, 0x0716, - 0x071f, 0x0727, 0x072e, 0x0745, 0x0753, 0x075c, 0x0771, 0x077b, + 0x0508, 0x0515, 0x051b, 0x0527, 0x0531, 0x0535, 0x053b, 0x0546, + 0x0553, 0x055c, 0x0563, 0x056a, 0x0572, 0x057d, 0x0585, 0x058a, + 0x0591, 0x0597, 0x059f, 0x05a9, 0x05b5, 0x05bf, 0x05cd, 0x05e4, + 0x05e8, 0x05fa, 0x0602, 0x060e, 0x062b, 0x0634, 0x063e, 0x0648, + 0x064d, 0x0656, 0x065d, 0x0663, 0x066a, 0x0672, 0x067b, 0x0682, + 0x0691, 0x0696, 0x06a3, 0x06aa, 0x06b3, 0x06be, 0x06c6, 0x06cb, + 0x06d0, 0x06d4, 0x06e1, 0x06e5, 0x06ec, 0x06f1, 0x0703, 0x0715, + 0x071e, 0x0726, 0x072d, 0x0744, 0x0752, 0x075b, 0x0770, 0x077a, // Entry C0 - FF - 0x0780, 0x0788, 0x078d, 0x079c, 0x07a4, 0x07ab, 0x07b1, 0x07b7, - 0x07bd, 0x07cb, 0x07d9, 0x07e3, 0x07e8, 0x07ee, 0x07f7, 0x0803, - 0x080b, 0x081f, 0x0829, 0x0835, 0x083f, 0x0846, 0x084d, 0x0855, - 0x085e, 0x0874, 0x087f, 0x088b, 0x0890, 0x0899, 0x08a9, 0x08bd, - 0x08c1, 0x08d8, 0x08dc, 0x08e6, 0x08f0, 0x08f7, 0x0902, 0x090e, - 0x0915, 0x091a, 0x0921, 0x0932, 0x0938, 0x093e, 0x0946, 0x094d, - 0x0953, 0x0975, 0x0982, 0x098d, 0x0994, 0x099e, 0x09b1, 0x09cb, - 0x09d4, 0x09ed, 0x0a04, 0x0a0b, 0x0a12, 0x0a21, 0x0a26, 0x0a2c, + 0x077f, 0x0787, 0x078c, 0x079b, 0x07a3, 0x07aa, 0x07b0, 0x07b6, + 0x07bc, 0x07ca, 0x07d8, 0x07e2, 0x07e7, 0x07ed, 0x07f6, 0x0802, + 0x080a, 0x081e, 0x0828, 0x0834, 0x083e, 0x0845, 0x084c, 0x0854, + 0x085d, 0x0873, 0x087e, 0x088a, 0x088f, 0x0898, 0x08a8, 0x08bc, + 0x08c0, 0x08d7, 0x08db, 0x08e5, 0x08ef, 0x08f6, 0x08ff, 0x090b, + 0x0912, 0x0917, 0x091e, 0x092f, 0x0935, 0x093b, 0x0943, 0x094a, + 0x0950, 0x0972, 0x097f, 0x098a, 0x0991, 0x099b, 0x09ae, 0x09c7, + 0x09d0, 0x09e9, 0x0a00, 0x0a07, 0x0a0e, 0x0a1d, 0x0a22, 0x0a28, // Entry 100 - 13F - 0x0a31, 0x0a38, 0x0a41, 0x0a47, 0x0a4f, 0x0a62, 0x0a67, 0x0a6d, - 0x0a79, 0x0a88, 0x0a8f, 0x0aa1, 0x0ab1, 0x0ac1, 0x0acb, 0x0ada, - 0x0ae8, 0x0af0, 0x0b00, 0x0b07, 0x0b15, 0x0b21, 0x0b31, 0x0b43, - 0x0b4e, 0x0b57, 0x0b6b, 0x0b74, 0x0b78, 0x0b85, 0x0b95, 0x0b9b, - 0x0bab, 0x0bc0, 0x0bd2, 0x0be0, -} // Size: 608 bytes - -const jaRegionStr string = "" + // Size: 4848 bytes + 0x0a2d, 0x0a34, 0x0a3d, 0x0a43, 0x0a4b, 0x0a5e, 0x0a63, 0x0a69, + 0x0a75, 0x0a84, 0x0a8b, 0x0a9d, 0x0aad, 0x0abd, 0x0ac7, 0x0ad6, + 0x0ae4, 0x0aec, 0x0afc, 0x0b03, 0x0b11, 0x0b1d, 0x0b2d, 0x0b3f, + 0x0b4a, 0x0b53, 0x0b67, 0x0b70, 0x0b74, 0x0b81, 0x0b91, 0x0b97, + 0x0ba7, 0x0bbc, 0x0bce, 0x0bce, 0x0bdc, +} // Size: 610 bytes + +const jaRegionStr string = "" + // Size: 4824 bytes "アセンション島アンドラアラブ首長国連邦アフガニスタンアンティグア・バーブーダアンギラアルバニアアルメニアアンゴラ南極アルゼンチン米領サモアオース" + "トリアオーストラリアアルバオーランド諸島アゼルバイジャンボスニア・ヘルツェゴビナバルバドスバングラデシュベルギーブルキナファソブルガリアバー" + - "レーンブルンジベナンサン・バルテルミー島バミューダブルネイボリビアオランダ領カリブブラジルバハマブータンブーベ島ボツワナベラルーシベリーズカ" + - "ナダココス(キーリング)諸島コンゴ民主共和国(キンシャサ)中央アフリカ共和国コンゴ共和国(ブラザビル)スイスコートジボワールクック諸島チリカ" + - "メルーン中国コロンビアクリッパートン島コスタリカキューバカーボベルデキュラソークリスマス島キプロスチェコ共和国ドイツディエゴガルシア島ジブチ" + - "デンマークドミニカ国ドミニカ共和国アルジェリアセウタ・メリリャエクアドルエストニアエジプト西サハラエリトリアスペインエチオピア欧州連合フィン" + + "レーンブルンジベナンサン・バルテルミーバミューダブルネイボリビアオランダ領カリブブラジルバハマブータンブーベ島ボツワナベラルーシベリーズカナ" + + "ダココス(キーリング)諸島コンゴ民主共和国(キンシャサ)中央アフリカ共和国コンゴ共和国(ブラザビル)スイスコートジボワールクック諸島チリカメ" + + "ルーン中国コロンビアクリッパートン島コスタリカキューバカーボベルデキュラソークリスマス島キプロスチェコドイツディエゴガルシア島ジブチデンマー" + + "クドミニカ国ドミニカ共和国アルジェリアセウタ・メリリャエクアドルエストニアエジプト西サハラエリトリアスペインエチオピア欧州連合ユーロ圏フィン" + "ランドフィジーフォークランド諸島ミクロネシア連邦フェロー諸島フランスガボンイギリスグレナダジョージア仏領ギアナガーンジーガーナジブラルタルグ" + - "リーンランドガンビアギニアグアドループ赤道ギニアギリシャ南ジョージア島・南サンドイッチ諸島グアテマラグアムギニアビサウガイアナ中華人民共和国" + - "香港特別行政区ハード島・マクドナルド諸島ホンジュラスクロアチアハイチハンガリーカナリア諸島インドネシアアイルランドイスラエルマン島インド英領" + - "インド洋地域イラクイランアイスランドイタリアジャージージャマイカヨルダン日本ケニアキルギスカンボジアキリバスコモロセントクリストファー・ネー" + - "ヴィス朝鮮民主主義人民共和国大韓民国クウェートケイマン諸島カザフスタンラオスレバノンセントルシアリヒテンシュタインスリランカリベリアレソトリ" + - "トアニアルクセンブルクラトビアリビアモロッコモナコモルドバモンテネグロサン・マルタンマダガスカルマーシャル諸島マケドニアマリミャンマーモンゴ" + + "リーンランドガンビアギニアグアドループ赤道ギニアギリシャサウスジョージア・サウスサンドウィッチ諸島グアテマラグアムギニアビサウガイアナ中華人" + + "民共和国香港特別行政区ハード島・マクドナルド諸島ホンジュラスクロアチアハイチハンガリーカナリア諸島インドネシアアイルランドイスラエルマン島イ" + + "ンド英領インド洋地域イラクイランアイスランドイタリアジャージージャマイカヨルダン日本ケニアキルギスカンボジアキリバスコモロセントクリストファ" + + "ー・ネーヴィス北朝鮮韓国クウェートケイマン諸島カザフスタンラオスレバノンセントルシアリヒテンシュタインスリランカリベリアレソトリトアニアルク" + + "センブルクラトビアリビアモロッコモナコモルドバモンテネグロサン・マルタンマダガスカルマーシャル諸島マケドニアマリミャンマー (ビルマ)モンゴ" + "ル中華人民共和国マカオ特別行政区北マリアナ諸島マルティニークモーリタニアモントセラトマルタモーリシャスモルディブマラウイメキシコマレーシアモ" + "ザンビークナミビアニューカレドニアニジェールノーフォーク島ナイジェリアニカラグアオランダノルウェーネパールナウルニウエニュージーランドオマー" + "ンパナマペルー仏領ポリネシアパプアニューギニアフィリピンパキスタンポーランドサンピエール島・ミクロン島ピトケアン諸島プエルトリコパレスチナ自" + - "治区ポルトガルパラオパラグアイカタールオセアニア周辺地域レユニオン島ルーマニアセルビアロシアルワンダサウジアラビアソロモン諸島セーシェルスー" + - "ダンスウェーデンシンガポールセントヘレナスロベニアスバールバル諸島・ヤンマイエン島スロバキアシエラレオネサンマリノセネガルソマリアスリナム南" + - "スーダンサントメ・プリンシペエルサルバドルシント・マールテンシリアスワジランドトリスタン・ダ・クーニャタークス・カイコス諸島チャド仏領極南諸" + - "島トーゴタイタジキスタントケラウ東ティモールトルクメニスタンチュニジアトンガトルコトリニダード・トバゴツバル台湾タンザニアウクライナウガンダ" + - "合衆国領有小離島こくさいれんごうアメリカ合衆国ウルグアイウズベキスタンバチカン市国セントビンセント及びグレナディーン諸島ベネズエラ英領ヴァー" + - "ジン諸島米領ヴァージン諸島ベトナムバヌアツウォリス・フツナサモアコソボイエメンマヨット島南アフリカザンビアジンバブエ不明な地域世界アフリカ北" + - "アメリカ大陸南アメリカオセアニア西アフリカ中央アメリカ東アフリカ北アフリカ中部アフリカ南部アフリカアメリカ大陸北アメリカカリブ東アジア南アジ" + - "ア東南アジア南ヨーロッパオーストララシアメラネシアミクロネシアポリネシアアジア中央アジア西アジアヨーロッパ東ヨーロッパ北ヨーロッパ西ヨーロッ" + - "パラテンアメリカ" - -var jaRegionIdx = []uint16{ // 292 elements + "治区ポルトガルパラオパラグアイカタールオセアニア周辺地域レユニオンルーマニアセルビアロシアルワンダサウジアラビアソロモン諸島セーシェルスーダ" + + "ンスウェーデンシンガポールセントヘレナスロベニアスバールバル諸島・ヤンマイエン島スロバキアシエラレオネサンマリノセネガルソマリアスリナム南ス" + + "ーダンサントメ・プリンシペエルサルバドルシント・マールテンシリアスワジランドトリスタン・ダ・クーニャタークス・カイコス諸島チャド仏領極南諸島" + + "トーゴタイタジキスタントケラウ東ティモールトルクメニスタンチュニジアトンガトルコトリニダード・トバゴツバル台湾タンザニアウクライナウガンダ合" + + "衆国領有小離島国際連合アメリカ合衆国ウルグアイウズベキスタンバチカン市国セントビンセント及びグレナディーン諸島ベネズエラ英領ヴァージン諸島米" + + "領ヴァージン諸島ベトナムバヌアツウォリス・フツナサモアコソボイエメンマヨット南アフリカザンビアジンバブエ不明な地域世界アフリカ北アメリカ大陸" + + "南アメリカオセアニア西アフリカ中央アメリカ東アフリカ北アフリカ中部アフリカ南部アフリカアメリカ大陸北アメリカカリブ東アジア南アジア東南アジア" + + "南ヨーロッパオーストララシアメラネシアミクロネシアポリネシアアジア中央アジア西アジアヨーロッパ東ヨーロッパ北ヨーロッパ西ヨーロッパラテンアメ" + + "リカ" + +var jaRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0015, 0x0021, 0x0039, 0x004e, 0x0072, 0x007e, 0x008d, 0x009c, 0x00a8, 0x00ae, 0x00c0, 0x00cf, 0x00e1, 0x00f6, 0x00ff, 0x0114, 0x012c, 0x0150, 0x015f, 0x0174, 0x0180, 0x0195, 0x01a4, - 0x01b3, 0x01bf, 0x01c8, 0x01e6, 0x01f5, 0x0201, 0x020d, 0x0225, - 0x0231, 0x023a, 0x0246, 0x0252, 0x025e, 0x026d, 0x0279, 0x0282, - 0x02a2, 0x02cb, 0x02e6, 0x0309, 0x0312, 0x032a, 0x0339, 0x033f, - 0x034e, 0x0354, 0x0363, 0x037b, 0x038a, 0x0396, 0x03a8, 0x03b7, - 0x03c9, 0x03d5, 0x03e7, 0x03f0, 0x040b, 0x0414, 0x0423, 0x0432, + 0x01b3, 0x01bf, 0x01c8, 0x01e3, 0x01f2, 0x01fe, 0x020a, 0x0222, + 0x022e, 0x0237, 0x0243, 0x024f, 0x025b, 0x026a, 0x0276, 0x027f, + 0x029f, 0x02c8, 0x02e3, 0x0306, 0x030f, 0x0327, 0x0336, 0x033c, + 0x034b, 0x0351, 0x0360, 0x0378, 0x0387, 0x0393, 0x03a5, 0x03b4, + 0x03c6, 0x03d2, 0x03db, 0x03e4, 0x03ff, 0x0408, 0x0417, 0x0426, // Entry 40 - 7F - 0x0447, 0x0459, 0x0471, 0x0480, 0x048f, 0x049b, 0x04a7, 0x04b6, - 0x04c2, 0x04d1, 0x04dd, 0x04dd, 0x04ef, 0x04fb, 0x0516, 0x052e, + 0x043b, 0x044d, 0x0465, 0x0474, 0x0483, 0x048f, 0x049b, 0x04aa, + 0x04b6, 0x04c5, 0x04d1, 0x04dd, 0x04ef, 0x04fb, 0x0516, 0x052e, 0x0540, 0x054c, 0x0555, 0x0561, 0x056d, 0x057c, 0x058b, 0x059a, 0x05a3, 0x05b5, 0x05ca, 0x05d6, 0x05df, 0x05f1, 0x0600, 0x060c, - 0x063f, 0x064e, 0x0657, 0x0669, 0x0675, 0x069f, 0x06c6, 0x06d8, - 0x06e7, 0x06f0, 0x06ff, 0x0711, 0x0723, 0x0735, 0x0744, 0x074d, - 0x0756, 0x076e, 0x0777, 0x0780, 0x0792, 0x079e, 0x07ad, 0x07bc, - 0x07c8, 0x07ce, 0x07d7, 0x07e3, 0x07f2, 0x07fe, 0x0807, 0x0837, + 0x064b, 0x065a, 0x0663, 0x0675, 0x0681, 0x06ab, 0x06d2, 0x06e4, + 0x06f3, 0x06fc, 0x070b, 0x071d, 0x072f, 0x0741, 0x0750, 0x0759, + 0x0762, 0x077a, 0x0783, 0x078c, 0x079e, 0x07aa, 0x07b9, 0x07c8, + 0x07d4, 0x07da, 0x07e3, 0x07ef, 0x07fe, 0x080a, 0x0813, 0x0843, // Entry 80 - BF - 0x0858, 0x0864, 0x0873, 0x0885, 0x0897, 0x08a0, 0x08ac, 0x08be, - 0x08d9, 0x08e8, 0x08f4, 0x08fd, 0x090c, 0x0921, 0x092d, 0x0936, - 0x0942, 0x094b, 0x0957, 0x0969, 0x097e, 0x0990, 0x09a5, 0x09b4, - 0x09ba, 0x09c9, 0x09d5, 0x0a02, 0x0a17, 0x0a2c, 0x0a3e, 0x0a50, - 0x0a59, 0x0a6b, 0x0a7a, 0x0a86, 0x0a92, 0x0aa1, 0x0ab3, 0x0abf, - 0x0ad7, 0x0ae6, 0x0afb, 0x0b0d, 0x0b1c, 0x0b28, 0x0b37, 0x0b43, - 0x0b4c, 0x0b55, 0x0b6d, 0x0b79, 0x0b82, 0x0b8b, 0x0ba0, 0x0bbb, - 0x0bca, 0x0bd9, 0x0be8, 0x0c0f, 0x0c24, 0x0c36, 0x0c4e, 0x0c5d, + 0x084c, 0x0852, 0x0861, 0x0873, 0x0885, 0x088e, 0x089a, 0x08ac, + 0x08c7, 0x08d6, 0x08e2, 0x08eb, 0x08fa, 0x090f, 0x091b, 0x0924, + 0x0930, 0x0939, 0x0945, 0x0957, 0x096c, 0x097e, 0x0993, 0x09a2, + 0x09a8, 0x09c3, 0x09cf, 0x09fc, 0x0a11, 0x0a26, 0x0a38, 0x0a4a, + 0x0a53, 0x0a65, 0x0a74, 0x0a80, 0x0a8c, 0x0a9b, 0x0aad, 0x0ab9, + 0x0ad1, 0x0ae0, 0x0af5, 0x0b07, 0x0b16, 0x0b22, 0x0b31, 0x0b3d, + 0x0b46, 0x0b4f, 0x0b67, 0x0b73, 0x0b7c, 0x0b85, 0x0b9a, 0x0bb5, + 0x0bc4, 0x0bd3, 0x0be2, 0x0c09, 0x0c1e, 0x0c30, 0x0c48, 0x0c57, // Entry C0 - FF - 0x0c66, 0x0c75, 0x0c81, 0x0c9c, 0x0cae, 0x0cbd, 0x0cc9, 0x0cd2, - 0x0cde, 0x0cf3, 0x0d05, 0x0d14, 0x0d20, 0x0d32, 0x0d44, 0x0d56, - 0x0d65, 0x0d95, 0x0da4, 0x0db6, 0x0dc5, 0x0dd1, 0x0ddd, 0x0de9, - 0x0df8, 0x0e16, 0x0e2b, 0x0e46, 0x0e4f, 0x0e61, 0x0e85, 0x0ea6, - 0x0eaf, 0x0ec1, 0x0eca, 0x0ed0, 0x0ee2, 0x0eee, 0x0f00, 0x0f18, - 0x0f27, 0x0f30, 0x0f39, 0x0f57, 0x0f60, 0x0f66, 0x0f75, 0x0f84, - 0x0f90, 0x0fa8, 0x0fc0, 0x0fd5, 0x0fe4, 0x0ff9, 0x100b, 0x1044, - 0x1053, 0x106e, 0x1089, 0x1095, 0x10a1, 0x10b9, 0x10c2, 0x10cb, + 0x0c60, 0x0c6f, 0x0c7b, 0x0c96, 0x0ca5, 0x0cb4, 0x0cc0, 0x0cc9, + 0x0cd5, 0x0cea, 0x0cfc, 0x0d0b, 0x0d17, 0x0d29, 0x0d3b, 0x0d4d, + 0x0d5c, 0x0d8c, 0x0d9b, 0x0dad, 0x0dbc, 0x0dc8, 0x0dd4, 0x0de0, + 0x0def, 0x0e0d, 0x0e22, 0x0e3d, 0x0e46, 0x0e58, 0x0e7c, 0x0e9d, + 0x0ea6, 0x0eb8, 0x0ec1, 0x0ec7, 0x0ed9, 0x0ee5, 0x0ef7, 0x0f0f, + 0x0f1e, 0x0f27, 0x0f30, 0x0f4e, 0x0f57, 0x0f5d, 0x0f6c, 0x0f7b, + 0x0f87, 0x0f9f, 0x0fab, 0x0fc0, 0x0fcf, 0x0fe4, 0x0ff6, 0x102f, + 0x103e, 0x1059, 0x1074, 0x1080, 0x108c, 0x10a4, 0x10ad, 0x10b6, // Entry 100 - 13F - 0x10d7, 0x10e6, 0x10f5, 0x1101, 0x1110, 0x111f, 0x1125, 0x1131, - 0x1146, 0x1155, 0x1164, 0x1173, 0x1185, 0x1194, 0x11a3, 0x11b5, - 0x11c7, 0x11d9, 0x11e8, 0x11f1, 0x11fd, 0x1209, 0x1218, 0x122a, - 0x1242, 0x1251, 0x1263, 0x1272, 0x127b, 0x128a, 0x1296, 0x12a5, - 0x12b7, 0x12c9, 0x12db, 0x12f0, -} // Size: 608 bytes - -const kaRegionStr string = "" + // Size: 9470 bytes + 0x10c2, 0x10ce, 0x10dd, 0x10e9, 0x10f8, 0x1107, 0x110d, 0x1119, + 0x112e, 0x113d, 0x114c, 0x115b, 0x116d, 0x117c, 0x118b, 0x119d, + 0x11af, 0x11c1, 0x11d0, 0x11d9, 0x11e5, 0x11f1, 0x1200, 0x1212, + 0x122a, 0x1239, 0x124b, 0x125a, 0x1263, 0x1272, 0x127e, 0x128d, + 0x129f, 0x12b1, 0x12c3, 0x12c3, 0x12d8, +} // Size: 610 bytes + +const kaRegionStr string = "" + // Size: 9460 bytes "ამაღლების კუნძულიანდორაარაბთა გაერთიანებული საამიროებიავღანეთიანტიგუა და" + " ბარბუდაანგვილაალბანეთისომხეთიანგოლაანტარქტიკაარგენტინაამერიკის სამოაავს" + "ტრიაავსტრალიაარუბაალანდის კუნძულებიაზერბაიჯანიბოსნია და ჰერცეგოვინაბარ" + @@ -45979,47 +48740,47 @@ const kaRegionStr string = "" + // Size: 9470 bytes "იბუტანიბუვებოტსვანაბელარუსიბელიზიკანადაქოქოსის (კილინგის) კუნძულებიკონ" + "გო - კინშასაცენტრალური აფრიკის რესპუბლიკაკონგო - ბრაზავილიშვეიცარიაკოტ" + "-დივუარიკუკის კუნძულებიჩილეკამერუნიჩინეთიკოლუმბიაკლიპერტონის კუნძულიკოსტ" + - "ა-რიკაკუბაკაბო-ვერდეკიურასაოშობის კუნძულიკვიპროსიჩეხეთის რესპუბლიკაგერ" + - "მანიადიეგო-გარსიაჯიბუტიდანიადომინიკადომინიკელთა რესპუბლიკაალჟირისეუტა " + - "და მელილაეკვადორიესტონეთიეგვიპტედასავლეთ საჰარაერიტრეაესპანეთიეთიოპიაე" + - "ვროკავშირიფინეთიფიჯიფოლკლენდის კუნძულებიმიკრონეზიაფარერის კუნძულებისაფ" + - "რანგეთიგაბონიგაერთიანებული სამეფოგრენადასაქართველოსაფრანგეთის გვიანაგე" + - "რნსიგანაგიბრალტარიგრენლანდიაგამბიაგვინეაგვადელუპაეკვატორული გვინეასაბე" + - "რძნეთისამხრეთ ჯორჯია და სამხრეთ სენდვიჩის კუნძულებიგვატემალაგუამიგვინე" + - "ა-ბისაუგაიანაჰონკონგის სპეციალური ადმინისტრაციული რეგიონი ჩინეთიჰერდი " + - "და მაკდონალდის კუნძულებიჰონდურასიხორვატიაჰაიტიუნგრეთიკანარის კუნძულები" + - "ინდონეზიაირლანდიაისრაელიმენის კუნძულიინდოეთიბრიტანეთის ტერიტორია ინდოე" + - "თის ოკეანეშიერაყიირანიისლანდიაიტალიაჯერსიიამაიკაიორდანიაიაპონიაკენიაყი" + - "რგიზეთიკამბოჯაკირიბატიკომორის კუნძულებისენტ-კიტსი და ნევისიჩრდილოეთ კო" + - "რეასამხრეთ კორეაქუვეითიკაიმანის კუნძულებიყაზახეთილაოსილიბანისენტ-ლუსია" + - "ლიხტენშტაინიშრი-ლანკალიბერიალესოთოლიტვალუქსემბურგილატვიალიბიამაროკომონ" + - "აკომოლდოვამონტენეგროსენ-მარტენიმადაგასკარიმარშალის კუნძულებიმაკედონიამ" + - "ალიმიანმარი (ბირმა)მონღოლეთიმაკაოს სპეციალური ადმინისტრაციული რეგიონი " + - "ჩინეთიჩრდილოეთ მარიანას კუნძულებიმარტინიკამავრიტანიამონსერატიმალტამავრ" + - "იკიმალდივებიმალავიმექსიკამალაიზიამოზამბიკინამიბიაახალი კალედონიანიგერი" + - "ნორფოლკის კუნძულინიგერიანიკარაგუანიდერლანდებინორვეგიანეპალინაურუნიუეახ" + - "ალი ზელანდიაომანიპანამაპერუსაფრანგეთის პოლინეზიაპაპუა-ახალი გვინეაფილი" + - "პინებიპაკისტანიპოლონეთისენ-პიერი და მიკელონიპიტკერნის კუნძულებიპუერტო-" + - "რიკოპალესტინის ტერიტორიებიპორტუგალიაპალაუპარაგვაიკატარიშორეული ოკეანეთ" + - "ირეუნიონირუმინეთისერბეთირუსეთირუანდასაუდის არაბეთისოლომონის კუნძულების" + - "ეიშელის კუნძულებისუდანიშვედეთისინგაპურიწმინდა ელენეს კუნძულისლოვენიაშპ" + - "იცბერგენი და იან-მაიენისლოვაკეთისიერა-ლეონესან-მარინოსენეგალისომალისურ" + - "ინამისამხრეთ სუდანისან-ტომე და პრინსიპისალვადორისინტ-მარტენისირიასვაზი" + - "ლენდიტრისტან-და-კუნიათერქს-ქაიქოსის კუნძულებიჩადიფრანგული სამხრეთის ტე" + - "რიტორიებიტოგოტაილანდიტაჯიკეთიტოკელაუტიმორ-ლესტეთურქმენეთიტუნისიტონგათუ" + - "რქეთიტრინიდადი და ტობაგოტუვალუტაივანიტანზანიაუკრაინაუგანდააშშ-ის შორეუ" + - "ლი კუნძულებიგაეროამერიკის შეერთებული შტატებიურუგვაიუზბეკეთიქალაქი ვატი" + - "კანისენტ-ვინსენტი და გრენადინებივენესუელაბრიტანეთის ვირჯინის კუნძულები" + - "აშშ-ის ვირჯინის კუნძულებივიეტნამივანუატუუოლისი და ფუტუნასამოაკოსოვოიემ" + - "ენიმაიოტასამხრეთ აფრიკის რესპუბლიკაზამბიაზიმბაბვეუცნობი რეგიონიმსოფლიო" + - "აფრიკაჩრდილოეთ ამერიკასამხრეთ ამერიკაოკეანეთიდასავლეთ აფრიკაცენტრალური" + - " ამერიკააღმოსავლეთ აფრიკაჩრდილოეთ აფრიკაშუა აფრიკასამხრეთ აფრიკაამერიკებ" + - "იამერიკის ჩრდილოეთიკარიბის ზღვააღმოსავლეთ აზიასამხრეთ აზიასამხრეთ-აღმო" + - "სავლეთ აზიასამხრეთ ევროპაავსტრალაზიამელანეზიამიკრონეზიის რეგიონიპოლინე" + - "ზიააზიაცენტრალური აზიადასავლეთ აზიაევროპააღმოსავლეთ ევროპაჩრდილოეთ ევრ" + - "ოპადასავლეთ ევროპალათინური ამერიკა" - -var kaRegionIdx = []uint16{ // 292 elements + "ა-რიკაკუბაკაბო-ვერდეკიურასაოშობის კუნძულიკვიპროსიჩეხეთიგერმანიადიეგო-გ" + + "არსიაჯიბუტიდანიადომინიკადომინიკელთა რესპუბლიკაალჟირისეუტა და მელილაეკვ" + + "ადორიესტონეთიეგვიპტედასავლეთ საჰარაერიტრეაესპანეთიეთიოპიაევროკავშირიევ" + + "როზონაფინეთიფიჯიფოლკლენდის კუნძულებიმიკრონეზიაფარერის კუნძულებისაფრანგ" + + "ეთიგაბონიგაერთიანებული სამეფოგრენადასაქართველოსაფრანგეთის გვიანაგერნსი" + + "განაგიბრალტარიგრენლანდიაგამბიაგვინეაგვადელუპაეკვატორული გვინეასაბერძნე" + + "თისამხრეთ ჯორჯია და სამხრეთ სენდვიჩის კუნძულებიგვატემალაგუამიგვინეა-ბი" + + "საუგაიანაჰონკონგის სპეციალური ადმინისტრაციული რეგიონი ჩინეთიჰერდი და მ" + + "აკდონალდის კუნძულებიჰონდურასიხორვატიაჰაიტიუნგრეთიკანარის კუნძულებიინდო" + + "ნეზიაირლანდიაისრაელიმენის კუნძულიინდოეთიბრიტანეთის ტერიტორია ინდოეთის " + + "ოკეანეშიერაყიირანიისლანდიაიტალიაჯერსიიამაიკაიორდანიაიაპონიაკენიაყირგიზ" + + "ეთიკამბოჯაკირიბატიკომორის კუნძულებისენტ-კიტსი და ნევისიჩრდილოეთ კორეას" + + "ამხრეთ კორეაქუვეითიკაიმანის კუნძულებიყაზახეთილაოსილიბანისენტ-ლუსიალიხტ" + + "ენშტაინიშრი-ლანკალიბერიალესოთოლიტვალუქსემბურგილატვიალიბიამაროკომონაკომ" + + "ოლდოვამონტენეგროსენ-მარტენიმადაგასკარიმარშალის კუნძულებიმაკედონიამალიმ" + + "იანმარი (ბირმა)მონღოლეთიმაკაოს სპეციალური ადმინისტრაციული რეგიონი ჩინე" + + "თიჩრდილოეთ მარიანას კუნძულებიმარტინიკამავრიტანიამონსერატიმალტამავრიკიმ" + + "ალდივებიმალავიმექსიკამალაიზიამოზამბიკინამიბიაახალი კალედონიანიგერინორფ" + + "ოლკის კუნძულინიგერიანიკარაგუანიდერლანდებინორვეგიანეპალინაურუნიუეახალი " + + "ზელანდიაომანიპანამაპერუსაფრანგეთის პოლინეზიაპაპუა-ახალი გვინეაფილიპინე" + + "ბიპაკისტანიპოლონეთისენ-პიერი და მიკელონიპიტკერნის კუნძულებიპუერტო-რიკო" + + "პალესტინის ტერიტორიებიპორტუგალიაპალაუპარაგვაიკატარიშორეული ოკეანეთირეუ" + + "ნიონირუმინეთისერბეთირუსეთირუანდასაუდის არაბეთისოლომონის კუნძულებისეიშე" + + "ლის კუნძულებისუდანიშვედეთისინგაპურიწმინდა ელენეს კუნძულისლოვენიაშპიცბე" + + "რგენი და იან-მაიენისლოვაკეთისიერა-ლეონესან-მარინოსენეგალისომალისურინამ" + + "ისამხრეთ სუდანისან-ტომე და პრინსიპისალვადორისინტ-მარტენისირიასვაზილენდ" + + "იტრისტან-და-კუნიათერქს-ქაიქოსის კუნძულებიჩადიფრანგული სამხრეთის ტერიტო" + + "რიებიტოგოტაილანდიტაჯიკეთიტოკელაუტიმორ-ლესტეთურქმენეთიტუნისიტონგათურქეთ" + + "იტრინიდადი და ტობაგოტუვალუტაივანიტანზანიაუკრაინაუგანდააშშ-ის შორეული კ" + + "უნძულებიგაეროამერიკის შეერთებული შტატებიურუგვაიუზბეკეთიქალაქი ვატიკანი" + + "სენტ-ვინსენტი და გრენადინებივენესუელაბრიტანეთის ვირჯინის კუნძულებიაშშ-" + + "ის ვირჯინის კუნძულებივიეტნამივანუატუუოლისი და ფუტუნასამოაკოსოვოიემენიმ" + + "აიოტასამხრეთ აფრიკის რესპუბლიკაზამბიაზიმბაბვეუცნობი რეგიონიმსოფლიოაფრი" + + "კაჩრდილოეთ ამერიკასამხრეთ ამერიკაოკეანეთიდასავლეთ აფრიკაცენტრალური ამე" + + "რიკააღმოსავლეთ აფრიკაჩრდილოეთ აფრიკაშუა აფრიკასამხრეთ აფრიკაამერიკებია" + + "მერიკის ჩრდილოეთიკარიბის ზღვააღმოსავლეთ აზიასამხრეთ აზიასამხრეთ-აღმოსა" + + "ვლეთ აზიასამხრეთ ევროპაავსტრალაზიამელანეზიამიკრონეზიის რეგიონიპოლინეზი" + + "ააზიაცენტრალური აზიადასავლეთ აზიაევროპააღმოსავლეთ ევროპაჩრდილოეთ ევროპ" + + "ადასავლეთ ევროპალათინური ამერიკა" + +var kaRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0031, 0x0043, 0x009c, 0x00b4, 0x00e6, 0x00fb, 0x0113, 0x0128, 0x013a, 0x0158, 0x0173, 0x019b, 0x01b0, 0x01cb, 0x01da, @@ -46028,350 +48789,349 @@ var kaRegionIdx = []uint16{ // 292 elements 0x03de, 0x040f, 0x0421, 0x042d, 0x0445, 0x045d, 0x046f, 0x0481, 0x04cd, 0x04f4, 0x0547, 0x0574, 0x058f, 0x05ae, 0x05d9, 0x05e5, 0x05fd, 0x060f, 0x0627, 0x065e, 0x067a, 0x0686, 0x06a2, 0x06ba, - 0x06df, 0x06f7, 0x072b, 0x0743, 0x0765, 0x0777, 0x0786, 0x079e, + 0x06df, 0x06f7, 0x0709, 0x0721, 0x0743, 0x0755, 0x0764, 0x077c, // Entry 40 - 7F - 0x07de, 0x07f0, 0x0819, 0x0831, 0x0849, 0x085e, 0x0889, 0x089e, - 0x08b6, 0x08cb, 0x08ec, 0x08ec, 0x08fe, 0x090a, 0x0944, 0x0962, - 0x0993, 0x09b1, 0x09c3, 0x09fd, 0x0a12, 0x0a30, 0x0a64, 0x0a76, - 0x0a82, 0x0aa0, 0x0abe, 0x0ad0, 0x0ae2, 0x0afd, 0x0b2e, 0x0b4c, - 0x0bc9, 0x0be4, 0x0bf3, 0x0c15, 0x0c27, 0x0cb8, 0x0d0c, 0x0d27, - 0x0d3f, 0x0d4e, 0x0d63, 0x0d94, 0x0daf, 0x0dc7, 0x0ddc, 0x0e01, - 0x0e16, 0x0e82, 0x0e91, 0x0ea0, 0x0eb8, 0x0eca, 0x0ed9, 0x0eee, - 0x0f06, 0x0f1b, 0x0f2a, 0x0f45, 0x0f5a, 0x0f72, 0x0fa3, 0x0fd9, + 0x07bc, 0x07ce, 0x07f7, 0x080f, 0x0827, 0x083c, 0x0867, 0x087c, + 0x0894, 0x08a9, 0x08ca, 0x08e2, 0x08f4, 0x0900, 0x093a, 0x0958, + 0x0989, 0x09a7, 0x09b9, 0x09f3, 0x0a08, 0x0a26, 0x0a5a, 0x0a6c, + 0x0a78, 0x0a96, 0x0ab4, 0x0ac6, 0x0ad8, 0x0af3, 0x0b24, 0x0b42, + 0x0bbf, 0x0bda, 0x0be9, 0x0c0b, 0x0c1d, 0x0cae, 0x0d02, 0x0d1d, + 0x0d35, 0x0d44, 0x0d59, 0x0d8a, 0x0da5, 0x0dbd, 0x0dd2, 0x0df7, + 0x0e0c, 0x0e78, 0x0e87, 0x0e96, 0x0eae, 0x0ec0, 0x0ecf, 0x0ee4, + 0x0efc, 0x0f11, 0x0f20, 0x0f3b, 0x0f50, 0x0f68, 0x0f99, 0x0fcf, // Entry 80 - BF - 0x1001, 0x1026, 0x103b, 0x106f, 0x1087, 0x1096, 0x10a8, 0x10c4, - 0x10e8, 0x1101, 0x1116, 0x1128, 0x1137, 0x1158, 0x116a, 0x1179, - 0x118b, 0x119d, 0x11b2, 0x11d0, 0x11ef, 0x1210, 0x1244, 0x125f, - 0x126b, 0x1295, 0x12b0, 0x1338, 0x1385, 0x13a0, 0x13be, 0x13d9, - 0x13e8, 0x13fd, 0x1418, 0x142a, 0x143f, 0x1457, 0x1472, 0x1487, - 0x14b2, 0x14c4, 0x14f5, 0x150a, 0x1525, 0x1549, 0x1561, 0x1573, - 0x1582, 0x158e, 0x15b6, 0x15c5, 0x15d7, 0x15e3, 0x1620, 0x1652, - 0x1670, 0x168b, 0x16a3, 0x16dc, 0x1713, 0x1732, 0x1772, 0x1790, + 0x0ff7, 0x101c, 0x1031, 0x1065, 0x107d, 0x108c, 0x109e, 0x10ba, + 0x10de, 0x10f7, 0x110c, 0x111e, 0x112d, 0x114e, 0x1160, 0x116f, + 0x1181, 0x1193, 0x11a8, 0x11c6, 0x11e5, 0x1206, 0x123a, 0x1255, + 0x1261, 0x128b, 0x12a6, 0x132e, 0x137b, 0x1396, 0x13b4, 0x13cf, + 0x13de, 0x13f3, 0x140e, 0x1420, 0x1435, 0x144d, 0x1468, 0x147d, + 0x14a8, 0x14ba, 0x14eb, 0x1500, 0x151b, 0x153f, 0x1557, 0x1569, + 0x1578, 0x1584, 0x15ac, 0x15bb, 0x15cd, 0x15d9, 0x1616, 0x1648, + 0x1666, 0x1681, 0x1699, 0x16d2, 0x1709, 0x1728, 0x1768, 0x1786, // Entry C0 - FF - 0x179f, 0x17b7, 0x17c9, 0x17f7, 0x180f, 0x1827, 0x183c, 0x184e, - 0x1860, 0x1888, 0x18bf, 0x18f3, 0x1905, 0x191a, 0x1935, 0x1970, - 0x1988, 0x19cd, 0x19e8, 0x1a07, 0x1a23, 0x1a3b, 0x1a4d, 0x1a65, - 0x1a8d, 0x1ac3, 0x1ade, 0x1b00, 0x1b0f, 0x1b2d, 0x1b59, 0x1b9d, - 0x1ba9, 0x1bff, 0x1c0b, 0x1c23, 0x1c3b, 0x1c50, 0x1c6f, 0x1c8d, - 0x1c9f, 0x1cae, 0x1cc3, 0x1cf8, 0x1d0a, 0x1d1f, 0x1d37, 0x1d4c, - 0x1d5e, 0x1da0, 0x1daf, 0x1dfc, 0x1e11, 0x1e29, 0x1e54, 0x1ea2, - 0x1ebd, 0x1f10, 0x1f55, 0x1f6d, 0x1f82, 0x1fae, 0x1fbd, 0x1fcf, + 0x1795, 0x17ad, 0x17bf, 0x17ed, 0x1805, 0x181d, 0x1832, 0x1844, + 0x1856, 0x187e, 0x18b5, 0x18e9, 0x18fb, 0x1910, 0x192b, 0x1966, + 0x197e, 0x19c3, 0x19de, 0x19fd, 0x1a19, 0x1a31, 0x1a43, 0x1a5b, + 0x1a83, 0x1ab9, 0x1ad4, 0x1af6, 0x1b05, 0x1b23, 0x1b4f, 0x1b93, + 0x1b9f, 0x1bf5, 0x1c01, 0x1c19, 0x1c31, 0x1c46, 0x1c65, 0x1c83, + 0x1c95, 0x1ca4, 0x1cb9, 0x1cee, 0x1d00, 0x1d15, 0x1d2d, 0x1d42, + 0x1d54, 0x1d96, 0x1da5, 0x1df2, 0x1e07, 0x1e1f, 0x1e4a, 0x1e98, + 0x1eb3, 0x1f06, 0x1f4b, 0x1f63, 0x1f78, 0x1fa4, 0x1fb3, 0x1fc5, // Entry 100 - 13F - 0x1fe1, 0x1ff3, 0x203d, 0x204f, 0x2067, 0x208f, 0x20a4, 0x20b6, - 0x20e4, 0x210f, 0x2127, 0x2152, 0x2186, 0x21b7, 0x21e2, 0x21fe, - 0x2226, 0x2241, 0x2275, 0x2297, 0x22c2, 0x22e4, 0x2325, 0x234d, - 0x236e, 0x2389, 0x23c0, 0x23db, 0x23e7, 0x2412, 0x2437, 0x2449, - 0x247a, 0x24a5, 0x24d0, 0x24fe, -} // Size: 608 bytes - -const kkRegionStr string = "" + // Size: 6176 bytes + 0x1fd7, 0x1fe9, 0x2033, 0x2045, 0x205d, 0x2085, 0x209a, 0x20ac, + 0x20da, 0x2105, 0x211d, 0x2148, 0x217c, 0x21ad, 0x21d8, 0x21f4, + 0x221c, 0x2237, 0x226b, 0x228d, 0x22b8, 0x22da, 0x231b, 0x2343, + 0x2364, 0x237f, 0x23b6, 0x23d1, 0x23dd, 0x2408, 0x242d, 0x243f, + 0x2470, 0x249b, 0x24c6, 0x24c6, 0x24f4, +} // Size: 610 bytes + +const kkRegionStr string = "" + // Size: 6028 bytes "Әскенжін аралыАндорраБіріккен Араб ӘмірліктеріАуғанстанАнтигуа және Барб" + "удаАнгильяАлбанияАрменияАнголаАнтарктидаАргентинаАмерикалық СамоаАвстри" + "яАвстралияАрубаАланд аралдарыӘзірбайжанБосния және ГерцеговинаБарбадосБ" + "англадешБельгияБуркина-ФасоБолгарияБахрейнБурундиБенинСен-БартелемиБерм" + - "уд аралдарыБрунейБоливияКариб НидерландысыБразилияБагам аралдарыБутанБу" + - "ве аралыБотсванаБеларусьБелизКанадаКокос (Килинг) аралдарыКонгоОрталық " + - "Африка РеспубликасыКонго-Браззавиль РеспубликасыШвейцарияКот-д’ИвуарКук" + - " аралдарыЧилиКамерунҚытайКолумбияКлиппертон аралыКоста-РикаКубаКабо-Верд" + - "еКюрасаоРождество аралыКипрЧех РеспубликасыГерманияДиего-ГарсияДжибутиД" + - "анияДоминикаДоминикан РеспубликасыАлжирСеута және МелильяЭквадорЭстония" + - "МысырБатыс СахараЭритреяИспанияЭфиопияЕуропалық ОдақФинляндияФиджиФолкл" + - "енд аралдарыМикронезияФарер аралдарыФранцияГабонҰлыбританияГренадаГрузи" + - "яФранцуз ГвианасыГернсиГанаГибралтарГренландияГамбияГвинеяГваделупаЭква" + - "торлық ГвинеяГрекияОңтүстік Георгия және Оңтүстік Сандвич аралдарыГвате" + - "малаГуамГвинея-БисауГайанаҚытай Халық Республикасының Гонконг арнайы әк" + - "імшілік ауданыХерд аралы және Макдональд аралдарыГондурасХорватияГаитиВ" + - "енгрияКанар аралдарыИндонезияИрландияИзраильМэн аралыҮндістанҮнді мұхит" + - "ындағы Британ аймағыИракИранИсландияИталияДжерсиЯмайкаИорданияЖапонияКе" + - "нияҚырғызстанКамбоджаКирибатиКомор аралдарыСент-Китс және НевисСолтүсті" + - "к КореяОңтүстік КореяКувейтКайман аралдарыҚазақстанЛаосЛиванСент-ЛюсияЛ" + - "ихтенштейнШри-ЛанкаЛиберияЛесотоЛитваЛюксембургЛатвияЛивияМароккоМонако" + - "МолдоваЧерногорияСен-МартенМадагаскарМаршалл аралдарыМакедонияМалиМьянм" + - "а (Бирма)МоңғолияҚытай Халық Республикасының Макао арнайы әкімшілік ауд" + - "аныСолтүстік Мариана аралдарыМартиникаМавританияМонтсерратМальтаМаврики" + - "йМальдив аралдарыМалавиМексикаМалайзияМозамбикНамибияЖаңа КаледонияНиге" + - "рНорфолк аралыНигерияНикарагуаНидерландНорвегияНепалНауруНиуэЖаңа Зелан" + - "дияОманПанамаПеруФранцуз ПолинезиясыПапуа — Жаңа ГвинеяФилиппинПәкістан" + - "ПольшаСен-Пьер және МикелонПиткэрн аралдарыПуэрто-РикоПалестина аймақта" + - "рыПортугалияПалауПарагвайКатарАлыс ОкеанияРеюньонРумынияСербияРесейРуан" + - "даСауд АрабиясыСоломон аралдарыСейшель аралдарыСуданШвецияСингапурӘулие" + - " Елена аралыСловенияШпицберген және Ян-МайенСловакияСьерра-ЛеонеСан-Мари" + - "ноСенегалСомалиСуринамОңтүстік СуданСан-Томе және ПринсипиСальвадорСинт" + - "-МартенСирияСвазилендТристан-да-КуньяТеркс және Кайкос аралдарыЧадФранци" + - "яның оңтүстік аймақтарыТогоТайландТәжікстанТокелауТимор-ЛестеТүрікменст" + - "анТунисТонгаТүркияТринидад және ТобагоТувалуТайваньТанзанияУкраинаУганд" + - "аАҚШ-тың сыртқы кіші аралдарыБіріккен Ұлттар ҰйымыАмерика Құрама Штатта" + - "рыУругвайӨзбекстанВатиканСент-Винсент және Гренадин аралдарыВенесуэлаБр" + - "итандық Виргин аралдарыАҚШ-тың Виргин аралдарыВьетнамВануатуУоллис және" + - " ФутунаСамоаКосовоЙеменМайоттаОңтүстік Африка РеспубликасыЗамбияЗимбабве" + - "Белгісіз аймақӘлемАфрикаСолтүстік АмерикаОңтүстік АмерикаОкеанияБатыс А" + - "фрикаОрталық АмерикаШығыс АфрикаСолтүстік АфрикаОрталық АфрикаОңтүстік " + - "АфрикаСолтүстік және Оңтүстік АмерикаСолтүстік Америка (аймақ)КарибШығы" + - "с АзияОңтүстік АзияОңтүстік-Шығыс АзияОңтүстік ЕуропаАвстралазияМеланез" + - "ияМикронезия аймағыПолинезияАзияОрталық АзияБатыс АзияЕуропаШығыс Еуроп" + - "аСолтүстік ЕуропаБатыс ЕуропаЛатын Америкасы" - -var kkRegionIdx = []uint16{ // 292 elements + "уд аралдарыБрунейБоливияБонэйр, Синт-Эстатиус және СабаБразилияБагам ар" + + "алдарыБутанБуве аралыБотсванаБеларусьБелизКанадаКокос (Килинг) аралдары" + + "КонгоОрталық Африка РеспубликасыКонго-Браззавиль РеспубликасыШвейцарияК" + + "от-д’ИвуарКук аралдарыЧилиКамерунҚытайКолумбияКлиппертон аралыКоста-Рик" + + "аКубаКабо-ВердеКюрасаоРождество аралыКипрЧехияГерманияДиего-ГарсияДжибу" + + "тиДанияДоминикаДоминикан РеспубликасыАлжирСеута және МелильяЭквадорЭсто" + + "нияМысырБатыс СахараЭритреяИспанияЭфиопияЕуропалық ОдақЕуроаймақФинлянд" + + "ияФиджиФолкленд аралдарыМикронезияФарер аралдарыФранцияГабонҰлыбритания" + + "ГренадаГрузияФранцуз ГвианасыГернсиГанаГибралтарГренландияГамбияГвинеяГ" + + "ваделупаЭкваторлық ГвинеяГрекияОңтүстік Георгия және Оңтүстік Сандвич а" + + "ралдарыГватемалаГуамГвинея-БисауГайанаСянган АӘАХерд аралы және Макдона" + + "льд аралдарыГондурасХорватияГаитиВенгрияКанар аралдарыИндонезияИрландия" + + "ИзраильМэн аралыҮндістанҮнді мұхитындағы Британ аймағыИракИранИсландияИ" + + "талияДжерсиЯмайкаИорданияЖапонияКенияҚырғызстанКамбоджаКирибатиКомор ар" + + "алдарыСент-Китс және НевисСолтүстік КореяОңтүстік КореяКувейтКайман ара" + + "лдарыҚазақстанЛаосЛиванСент-ЛюсияЛихтенштейнШри-ЛанкаЛиберияЛесотоЛитва" + + "ЛюксембургЛатвияЛивияМароккоМонакоМолдоваЧерногорияСен-МартенМадагаскар" + + "Маршалл аралдарыМакедонияМалиМьянма (Бирма)МоңғолияМакао АӘАСолтүстік М" + + "ариана аралдарыМартиникаМавританияМонтсерратМальтаМаврикийМальдив аралд" + + "арыМалавиМексикаМалайзияМозамбикНамибияЖаңа КаледонияНигерНорфолк аралы" + + "НигерияНикарагуаНидерландНорвегияНепалНауруНиуэЖаңа ЗеландияОманПанамаП" + + "еруФранцуз ПолинезиясыПапуа — Жаңа ГвинеяФилиппин аралдарыПәкістанПольш" + + "аСен-Пьер және МикелонПиткэрн аралдарыПуэрто-РикоПалестина аймақтарыПор" + + "тугалияПалауПарагвайКатарАлыс ОкеанияРеюньонРумынияСербияРесейРуандаСау" + + "д АрабиясыСоломон аралдарыСейшель аралдарыСуданШвецияСингапурӘулие Елен" + + "а аралыСловенияШпицберген және Ян-МайенСловакияСьерра-ЛеонеСан-МариноСе" + + "негалСомалиСуринамОңтүстік СуданСан-Томе және ПринсипиСальвадорСинт-Мар" + + "тенСирияСвазилендТристан-да-КуньяТеркс және Кайкос аралдарыЧадФранцияны" + + "ң оңтүстік аймақтарыТогоТайландТәжікстанТокелауТимор-ЛестеТүрікменстанТ" + + "унисТонгаТүркияТринидад және ТобагоТувалуТайваньТанзанияУкраинаУгандаАҚ" + + "Ш-тың сыртқы кіші аралдарыБіріккен Ұлттар ҰйымыАмерика Құрама ШтаттарыУ" + + "ругвайӨзбекстанВатиканСент-Винсент және Гренадин аралдарыВенесуэлаБрита" + + "ндық Виргин аралдарыАҚШ-тың Виргин аралдарыВьетнамВануатуУоллис және Фу" + + "тунаСамоаКосовоЙеменМайоттаОңтүстік Африка РеспубликасыЗамбияЗимбабвеБе" + + "лгісіз аймақӘлемАфрикаСолтүстік АмерикаОңтүстік АмерикаОкеанияБатыс Афр" + + "икаОрталық АмерикаШығыс АфрикаСолтүстік АфрикаОрталық АфрикаОңтүстік Аф" + + "рикаСолтүстік және Оңтүстік АмерикаСолтүстік Америка (аймақ)КарибШығыс " + + "АзияОңтүстік АзияОңтүстік-Шығыс АзияОңтүстік ЕуропаАвстралазияМеланезия" + + "Микронезия аймағыПолинезияАзияОрталық АзияБатыс АзияЕуропаШығыс ЕуропаС" + + "олтүстік ЕуропаБатыс ЕуропаЛатын Америкасы" + +var kkRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x001b, 0x0029, 0x0059, 0x006b, 0x0091, 0x009f, 0x00ad, 0x00bb, 0x00c7, 0x00db, 0x00ed, 0x010c, 0x011a, 0x012c, 0x0136, 0x0151, 0x0165, 0x0191, 0x01a1, 0x01b3, 0x01c1, 0x01d8, 0x01e8, - 0x01f6, 0x0204, 0x020e, 0x0227, 0x0244, 0x0250, 0x025e, 0x0281, - 0x0291, 0x02ac, 0x02b6, 0x02c9, 0x02d9, 0x02e9, 0x02f3, 0x02ff, - 0x0329, 0x0333, 0x0367, 0x039f, 0x03b1, 0x03c7, 0x03de, 0x03e6, - 0x03f4, 0x03fe, 0x040e, 0x042d, 0x0440, 0x0448, 0x045b, 0x0469, - 0x0486, 0x048e, 0x04ad, 0x04bd, 0x04d4, 0x04e2, 0x04ec, 0x04fc, + 0x01f6, 0x0204, 0x020e, 0x0227, 0x0244, 0x0250, 0x025e, 0x0297, + 0x02a7, 0x02c2, 0x02cc, 0x02df, 0x02ef, 0x02ff, 0x0309, 0x0315, + 0x033f, 0x0349, 0x037d, 0x03b5, 0x03c7, 0x03dd, 0x03f4, 0x03fc, + 0x040a, 0x0414, 0x0424, 0x0443, 0x0456, 0x045e, 0x0471, 0x047f, + 0x049c, 0x04a4, 0x04ae, 0x04be, 0x04d5, 0x04e3, 0x04ed, 0x04fd, // Entry 40 - 7F - 0x0527, 0x0531, 0x0553, 0x0561, 0x056f, 0x0579, 0x0590, 0x059e, - 0x05ac, 0x05ba, 0x05d5, 0x05d5, 0x05e7, 0x05f1, 0x0612, 0x0626, - 0x0641, 0x064f, 0x0659, 0x066f, 0x067d, 0x0689, 0x06a8, 0x06b4, - 0x06bc, 0x06ce, 0x06e2, 0x06ee, 0x06fa, 0x070c, 0x072d, 0x0739, - 0x0792, 0x07a4, 0x07ac, 0x07c3, 0x07cf, 0x083f, 0x0881, 0x0891, - 0x08a1, 0x08ab, 0x08b9, 0x08d4, 0x08e6, 0x08f6, 0x0904, 0x0915, - 0x0925, 0x095e, 0x0966, 0x096e, 0x097e, 0x098a, 0x0996, 0x09a2, - 0x09b2, 0x09c0, 0x09ca, 0x09de, 0x09ee, 0x09fe, 0x0a19, 0x0a3e, + 0x0528, 0x0532, 0x0554, 0x0562, 0x0570, 0x057a, 0x0591, 0x059f, + 0x05ad, 0x05bb, 0x05d6, 0x05e8, 0x05fa, 0x0604, 0x0625, 0x0639, + 0x0654, 0x0662, 0x066c, 0x0682, 0x0690, 0x069c, 0x06bb, 0x06c7, + 0x06cf, 0x06e1, 0x06f5, 0x0701, 0x070d, 0x071f, 0x0740, 0x074c, + 0x07a5, 0x07b7, 0x07bf, 0x07d6, 0x07e2, 0x07f5, 0x0837, 0x0847, + 0x0857, 0x0861, 0x086f, 0x088a, 0x089c, 0x08ac, 0x08ba, 0x08cb, + 0x08db, 0x0914, 0x091c, 0x0924, 0x0934, 0x0940, 0x094c, 0x0958, + 0x0968, 0x0976, 0x0980, 0x0994, 0x09a4, 0x09b4, 0x09cf, 0x09f4, // Entry 80 - BF - 0x0a5b, 0x0a76, 0x0a82, 0x0a9f, 0x0ab1, 0x0ab9, 0x0ac3, 0x0ad6, - 0x0aec, 0x0afd, 0x0b0b, 0x0b17, 0x0b21, 0x0b35, 0x0b41, 0x0b4b, - 0x0b59, 0x0b65, 0x0b73, 0x0b87, 0x0b9a, 0x0bae, 0x0bcd, 0x0bdf, - 0x0be7, 0x0c00, 0x0c10, 0x0c7c, 0x0cae, 0x0cc0, 0x0cd4, 0x0ce8, - 0x0cf4, 0x0d04, 0x0d23, 0x0d2f, 0x0d3d, 0x0d4d, 0x0d5d, 0x0d6b, - 0x0d86, 0x0d90, 0x0da9, 0x0db7, 0x0dc9, 0x0ddb, 0x0deb, 0x0df5, - 0x0dff, 0x0e07, 0x0e20, 0x0e28, 0x0e34, 0x0e3c, 0x0e61, 0x0e85, - 0x0e95, 0x0ea5, 0x0eb1, 0x0ed8, 0x0ef7, 0x0f0c, 0x0f31, 0x0f45, + 0x0a11, 0x0a2c, 0x0a38, 0x0a55, 0x0a67, 0x0a6f, 0x0a79, 0x0a8c, + 0x0aa2, 0x0ab3, 0x0ac1, 0x0acd, 0x0ad7, 0x0aeb, 0x0af7, 0x0b01, + 0x0b0f, 0x0b1b, 0x0b29, 0x0b3d, 0x0b50, 0x0b64, 0x0b83, 0x0b95, + 0x0b9d, 0x0bb6, 0x0bc6, 0x0bd7, 0x0c09, 0x0c1b, 0x0c2f, 0x0c43, + 0x0c4f, 0x0c5f, 0x0c7e, 0x0c8a, 0x0c98, 0x0ca8, 0x0cb8, 0x0cc6, + 0x0ce1, 0x0ceb, 0x0d04, 0x0d12, 0x0d24, 0x0d36, 0x0d46, 0x0d50, + 0x0d5a, 0x0d62, 0x0d7b, 0x0d83, 0x0d8f, 0x0d97, 0x0dbc, 0x0de0, + 0x0e01, 0x0e11, 0x0e1d, 0x0e44, 0x0e63, 0x0e78, 0x0e9d, 0x0eb1, // Entry C0 - FF - 0x0f4f, 0x0f5f, 0x0f69, 0x0f80, 0x0f8e, 0x0f9c, 0x0fa8, 0x0fb2, - 0x0fbe, 0x0fd7, 0x0ff6, 0x1015, 0x101f, 0x102b, 0x103b, 0x105b, - 0x106b, 0x1098, 0x10a8, 0x10bf, 0x10d2, 0x10e0, 0x10ec, 0x10fa, - 0x1115, 0x113e, 0x1150, 0x1165, 0x116f, 0x1181, 0x119f, 0x11d0, - 0x11d6, 0x120e, 0x1216, 0x1224, 0x1236, 0x1244, 0x1259, 0x1271, - 0x127b, 0x1285, 0x1291, 0x12b7, 0x12c3, 0x12d1, 0x12e1, 0x12ef, - 0x12fb, 0x132f, 0x1357, 0x1383, 0x1391, 0x13a3, 0x13b1, 0x13f3, - 0x1405, 0x1435, 0x1460, 0x146e, 0x147c, 0x149e, 0x14a8, 0x14b4, + 0x0ebb, 0x0ecb, 0x0ed5, 0x0eec, 0x0efa, 0x0f08, 0x0f14, 0x0f1e, + 0x0f2a, 0x0f43, 0x0f62, 0x0f81, 0x0f8b, 0x0f97, 0x0fa7, 0x0fc7, + 0x0fd7, 0x1004, 0x1014, 0x102b, 0x103e, 0x104c, 0x1058, 0x1066, + 0x1081, 0x10aa, 0x10bc, 0x10d1, 0x10db, 0x10ed, 0x110b, 0x113c, + 0x1142, 0x117a, 0x1182, 0x1190, 0x11a2, 0x11b0, 0x11c5, 0x11dd, + 0x11e7, 0x11f1, 0x11fd, 0x1223, 0x122f, 0x123d, 0x124d, 0x125b, + 0x1267, 0x129b, 0x12c3, 0x12ef, 0x12fd, 0x130f, 0x131d, 0x135f, + 0x1371, 0x13a1, 0x13cc, 0x13da, 0x13e8, 0x140a, 0x1414, 0x1420, // Entry 100 - 13F - 0x14be, 0x14cc, 0x1502, 0x150e, 0x151e, 0x1539, 0x1541, 0x154d, - 0x156e, 0x158d, 0x159b, 0x15b2, 0x15cf, 0x15e6, 0x1605, 0x1620, - 0x163d, 0x1678, 0x16a6, 0x16b0, 0x16c3, 0x16dc, 0x1700, 0x171d, - 0x1733, 0x1745, 0x1766, 0x1778, 0x1780, 0x1797, 0x17aa, 0x17b6, - 0x17cd, 0x17ec, 0x1803, 0x1820, -} // Size: 608 bytes - -const kmRegionStr string = "" + // Size: 9020 bytes - "កោះ\u200bអាសេនសិនអង់ដូរ៉ាអារ៉ាប់រួមអាហ្វហ្គានីស្ថានអង់ទីហ្គា និង បាប៊ុយដ" + - "ាអង់ហ្គីឡាអាល់បានីអាមេនីអង់ហ្គោឡាអង់តាក់ទិកអាហ្សង់ទីនសាម័រ អាមេរិកាំងអ" + - "ូទ្រីសអូស្ត្រាលីអារូបាកោះ\u200bអាឡាំងអាស៊ែបៃហ្សង់បូស្នី និងហឺហ្សីហ្គូវ" + - "ីណាបាបាដុសបង់ក្លាដែសបែលហ្ស៊ិកបួគីណាហ្វាសូប៊ុលហ្គារីបារ៉ែនប៊ូរុនឌីបេណាំ" + - "ងសង់ បាតេឡេម៉ីប៊ឺមុយដាប្រ៊ុយណេបូលីវីហុល្លង់ ការ៉ាប៊ីនប្រេស៊ីលបាហាម៉ាប៊" + - "ូតានកោះ\u200bប៊ូវ៉េតបុតស្វាណាបេឡារុស្សបេលីហ្សកាណាដាកោះ\u200bកូកូស (គីល" + - "ីង)កុងហ្គោ- គីនស្ហាសាសាធារណរដ្ឋអាហ្វ្រិកកណ្ដាលកុងហ្គោ - ប្រាហ្សាវីលស្វ" + - "ីសកូដឌីវ័រកោះ\u200bខូកស៊ីលីកាមេរូនចិនកូឡុំប៊ីកោះ\u200bឃ្លីភឺតុនកូស្តារ" + - "ីកាគុយបាកាបវែរកូរ៉ាកៅកោះ\u200bគ្រីស្មាសស៊ីបសាធារណរដ្ឋឆេកអាល្លឺម៉ង់ឌៀហ្" + - "គោហ្គាស៊ីជីប៊ូទីដាណឺម៉ាកដូមីនីកសាធារណរដ្ឋ\u200bដូមីនីកអាល់ហ្សេរីជឺតា ន" + - "ិង\u200bម៉េលីឡាអេក្វាឌ័រអេស្តូនីអេហ្ស៊ីបសាហារ៉ាខាងលិចអេរីទ្រាអេស្ប៉ាញអ" + - "េត្យូពីសហភាព\u200bអឺរ៉ុបហ្វាំងឡង់ហ្វីជីកោះ\u200bហ្វក់ឡែនមីក្រូណេស៊ីកោះ" + - "\u200bហ្វារ៉ូបារាំងហ្គាបុងចក្រភព\u200bអង់គ្លេសហ្គ្រីណាដាហ្សកហ្ស៊ីហ្គៀណាប" + - "ារាំងហ្គេនស៊ីហ្គាណាហ្គីប្រាលតាហ្គ្រោអង់ឡង់ហ្គាំប៊ីហ្គីណេហ្គោដឺឡុបហ្គីណ" + - "េអេក្វាទ័រក្រិកកោះ\u200bហ្សកហ្ស៊ី\u200bខាង\u200bត្បូង និង សាន់វិច" + - "\u200bខាង\u200bត្បូងហ្គាតេម៉ាឡាហ្គាំហ្គីណេប៊ីសូហ្គីយ៉ាណាហុងកុងកោះ\u200bហ" + - "ឺដ និង\u200bម៉ាក់ដូណាល់ហុងឌូរ៉ាសក្រូអាតហៃទីហុងគ្រីកោះ\u200bកាណារីឥណ្ឌូ" + - "ណេស៊ីអៀរឡង់អ៊ីស្រាអែលអែលអុហ្វមែនឥណ្ឌាដែនដី\u200bអង់គ្លេស\u200bនៅ\u200b" + - "មហា\u200bសមុទ្រ\u200bឥណ្ឌាអ៊ីរ៉ាក់អ៊ីរ៉ង់អ៊ីស្លង់អ៊ីតាលីជឺស៊ីចាម៉ៃកាហ៊" + - "្សកដានីជប៉ុនកេនយ៉ាកៀហ្ស៊ីស៊ីស្ថានកម្ពុជាគិរិបាទីកូម័រសង់ឃីត និង\u200bណ" + - "េវីសកូរ៉េ\u200bខាង\u200bជើងកូរ៉េ\u200bខាង\u200bត្បូងគុយវ៉ែតកោះ\u200bកៃ" + - "ម៉ង់កាហ្សាក់ស្ថានឡាវលីបង់សង់\u200bលូសៀលិចទេនស្តែនស្រីលង្កាលីបេរីយ៉ាឡេស" + - "ូតូលីទុយអានីលុចហ្សំបួរឡាតវីយ៉ាលីប៊ីម៉ារ៉ុកម៉ូណាកូម៉ុលដាវីម៉ុងតេណេហ្គ្រ" + - "ោសង់\u200bម៉ាទីនម៉ាដាហ្គាស្កាកោះ\u200bម៉ាស់សលម៉ាសេដូនាម៉ាលីមីយ៉ាន់ម៉ា " + - "(ភូមា)ម៉ុងហ្គោលីម៉ាកាវកោះ\u200bម៉ារីណា\u200bខាង\u200bជើងម៉ាទីនីកម៉ូរីតាន" + - "ីម៉ុង\u200bសេរ៉ង់ម៉ាល់តាម៉ូរីសម៉ាល់ឌីវម៉ាឡាវីម៉ិកស៊ិកម៉ាឡេស៊ីម៉ូហ្សាំប" + - "៊ិកណាមីប៊ីញូកាឡេដូនៀនីហ្សេរកោះ\u200bណ័រហ្វក់នីហ្សេរីយ៉ានីការ៉ាហ្គ័រហូឡ" + - "ង់ន័រវែសនេប៉ាល់ណូរូណៀនូវែលហ្សេឡង់អូម៉ង់ប៉ាណាម៉ាប៉េរូប៉ូលី\u200bណេស៊ី" + - "\u200bបារាំងប៉ាពួញ៉ូហ្គីណេហ្វីលីពីនប៉ាគីស្ថានប៉ូឡូញសង់ព្យែរ និង\u200bមីគ" + - "ីឡុងកោះ\u200bភីតកានព័រតូរីកូដែន\u200bប៉ាលេស្ទីនព័រទុយហ្គាល់ផៅឡូប៉ារ៉ាហ" + - "្គាយកាតាតំបន់ជាយអូសេអានីរេអុយញ៉ុងរូម៉ានីស៊ែបរុស្ស៊ីរវ៉ាន់ដាអារ៉ាប៊ីសាអ" + - "ូឌីតកោះ\u200bសូឡូម៉ុងសីសែលស៊ូដង់ស៊ុយអែតសិង្ហបុរីសង់\u200bហេឡេណាស្លូវេន" + - "ីស្វាលបាដ និង ហ្សង់ម៉ាយេនស្លូវ៉ាគីសេរ៉ាឡេអូនសាន\u200bម៉ារីណូសេណេហ្គាល់" + - "សូម៉ាលីសូរីណាមស៊ូដង់\u200bខាង\u200bត្បូងសៅតូម៉េ និង ប្រាំងស៊ីបអែលសាល់វ" + - "៉ាឌ័រសីង\u200bម៉ាធីនស៊ីរីស្វាហ្ស៊ីឡង់ទ្រីស្តង់\u200bដា\u200bចូនហាកោះ" + - "\u200bទួគ និង កៃកូសឆាដដែនដី\u200bបារាំង\u200bនៅ\u200bភាគខាងត្បូងតូហ្គោថៃ" + - "តាហ្ស៊ីគីស្ថានតូខេឡៅទីម័រតួកម៉េនីស្ថានទុយនេស៊ីតុងហ្គាទួរគីទ្រីនីដាត និ" + - "ង\u200bតូបាហ្គោទូវ៉ាលូតៃវ៉ាន់តង់ហ្សានីអ៊ុយក្រែនអ៊ូហ្គង់ដាកោះ\u200bអៅឡា" + - "យីង\u200bអាមេរិកអង្គការសហប្រជាជាតិសហរដ្ឋអាមេរិកអ៊ុយរ៉ាហ្គាយអ៊ូសបេគីស្ថ" + - "ានបុរី\u200bវ៉ាទីកង់សាំង\u200bវីនសេន និង\u200bឌឹ\u200bហ្គ្រីណាឌីនីសវេន" + - "េហ្ស៊ុយឡាកោះ\u200bវឺជិន\u200bចក្រភព\u200bអង់គ្លេសកោះ\u200bវឺជីន\u200bអ" + - "ាមេរិកវៀតណាមវ៉ានូអាទូវ៉ាលីស និង\u200bហ្វូទូណាសាម័រកូសូវ៉ូយេមែនម៉ាយុតអា" + - "ហ្វ្រិកខាងត្បូងហ្សាំប៊ីហ្ស៊ីមបាវ៉េតំបន់មិនស្គាល់ពិភពលោកអាហ្វ្រិកអាមេរិ" + - "ក\u200bខាង\u200bជើងអាមេរិក\u200bខាង\u200bត្បូងអូសេអានីអាហ្វ្រិក\u200bខ" + - "ាង\u200bលិចអាមេរិក\u200bកណ្ដាលអាហ្វ្រិកខាងកើតអាហ្វ្រិក\u200bខាង\u200bជ" + - "ើងអាហ្វ្រិក\u200bកណ្តាលអាហ្វ្រិកភាគខាងត្បូងអាមេរិកអាមេរិក\u200bភាគ" + - "\u200bខាង\u200bជើងការ៉ាប៊ីនអាស៊ី\u200bខាង\u200bកើតអាស៊ី\u200bខាង\u200bត្" + - "បូងអាស៊ីអាគ្នេយ៍អឺរ៉ុប\u200bខាង\u200bត្បូងអូស្ត្រាឡាស៊ីមេឡាណេស៊ីតំបន់" + - "\u200bមីក្រូណេស៊ីប៉ូលីណេស៊ីអាស៊ីអាស៊ី\u200bកណ្ដាលអាស៊ី\u200bខាង\u200bលិច" + - "អឺរ៉ុបអឺរ៉ុប\u200bខាង\u200bកើតអឺរ៉ុប\u200bខាង\u200bជើងអឺរ៉ុប\u200bខាង" + - "\u200bលិចអាមេរិក\u200bឡាទីន" - -var kmRegionIdx = []uint16{ // 292 elements + 0x142a, 0x1438, 0x146e, 0x147a, 0x148a, 0x14a5, 0x14ad, 0x14b9, + 0x14da, 0x14f9, 0x1507, 0x151e, 0x153b, 0x1552, 0x1571, 0x158c, + 0x15a9, 0x15e4, 0x1612, 0x161c, 0x162f, 0x1648, 0x166c, 0x1689, + 0x169f, 0x16b1, 0x16d2, 0x16e4, 0x16ec, 0x1703, 0x1716, 0x1722, + 0x1739, 0x1758, 0x176f, 0x176f, 0x178c, +} // Size: 610 bytes + +const kmRegionStr string = "" + // Size: 9122 bytes + "កោះ\u200bអាសេនសិនអង់ដូរ៉ាអេមីរ៉ាត\u200bអារ៉ាប់\u200bរួមអាហ្វហ្គានីស្ថានអ" + + "ង់ទីហ្គា និង បាប៊ុយដាអង់ហ្គីឡាអាល់បានីអាមេនីអង់ហ្គោឡាអង់តាក់ទិកអាហ្សង់" + + "ទីនសាម័រ អាមេរិកាំងអូទ្រីសអូស្ត្រាលីអារូបាកោះ\u200bអាឡង់អាស៊ែបៃហ្សង់បូ" + + "ស្នី និងហឺហ្សីហ្គូវីណាបាបាដុសបង់ក្លាដែសបែលហ្ស៊ិកបួគីណាហ្វាសូប៊ុលហ្គារី" + + "បារ៉ែនប៊ូរុនឌីបេណាំងសាំង\u200bបាថេឡេមីប៊ឺមុយដាព្រុយណេបូលីវីហូឡង់ ការ៉ា" + + "ប៊ីនប្រេស៊ីលបាហាម៉ាប៊ូតង់កោះ\u200bប៊ូវ៉េតបុតស្វាណាបេឡារុសបេលីកាណាដាកោះ" + + "\u200bកូកូស (គីលីង)កុងហ្គោ- គីនស្ហាសាសាធារណរដ្ឋអាហ្វ្រិកកណ្ដាលកុងហ្គោ - " + + "ប្រាហ្សាវីលស្វីសកូតឌីវ័រកោះ\u200bខូកស៊ីលីកាមេរូនចិនកូឡុំប៊ីកោះ\u200bឃ្" + + "លីភឺតុនកូស្តារីកាគុយបាកាប់វែរកូរ៉ាកៅកោះ\u200bគ្រីស្មាសស៊ីបឆែគាអាល្លឺម៉" + + "ង់ឌៀហ្គោហ្គាស៊ីជីប៊ូទីដាណឺម៉ាកដូមីនីកសាធារណរដ្ឋ\u200bដូមីនីកអាល់ហ្សេរី" + + "ជឺតា និង\u200bម៉េលីឡាអេក្វាទ័រអេស្តូនីអេហ្ស៊ីបសាហារ៉ាខាងលិចអេរីត្រេអេស" + + "្ប៉ាញអេត្យូពីសហភាព\u200bអឺរ៉ុបតំបន់ចាយលុយអឺរ៉ូហ្វាំងឡង់ហ្វីជីកោះ\u200b" + + "ហ្វក់ឡែនមីក្រូណេស៊ីកោះ\u200bហ្វារ៉ូបារាំងហ្គាបុងចក្រភព\u200bអង់គ្លេសហ្" + + "គ្រើណាដហ្សកហ្ស៊ីហ្គីអាណា បារាំងហ្គេនស៊ីហ្គាណាហ្ស៊ីប្រាល់តាហ្គ្រោអង់ឡង់" + + "ហ្គំប៊ីហ្គីណេហ្គោដឺឡុបហ្គីណេអេក្វាទ័រក្រិកកោះ\u200bហ្សកហ្ស៊ី\u200bខាងត" + + "្បូង និង សង់វិច\u200bខាងត្បូងក្វាតេម៉ាឡាហ្គាំហ្គីណេប៊ីស្សូហ្គីយ៉ានហុងក" + + "ុងកោះ\u200bហឺដ និង\u200bម៉ាក់ដូណាល់ហុងឌូរ៉ាសក្រូអាស៊ីហៃទីហុងគ្រីកោះ" + + "\u200bកាណារីឥណ្ឌូណេស៊ីអៀរឡង់អ៊ីស្រាអែលអែលអុហ្វមែនឥណ្ឌាដែនដី\u200bអង់គ្លេ" + + "ស\u200bនៅ\u200bមហា\u200bសមុទ្រ\u200bឥណ្ឌាអ៊ីរ៉ាក់អ៊ីរ៉ង់អ៊ីស្លង់អ៊ីតាល" + + "ីជឺស៊ីហ្សាម៉ាអ៊ីកហ៊្សកដានីជប៉ុនកេនយ៉ាកៀហ្ស៊ីស៊ីស្ថានកម្ពុជាគិរីបាទីកូម" + + "័រសាំង\u200bគីត និង ណេវីសកូរ៉េ\u200bខាង\u200bជើងកូរ៉េ\u200bខាង\u200bត្" + + "បូងកូវ៉ែតកោះ\u200bកៃម៉ង់កាហ្សាក់ស្ថានឡាវលីបង់សាំងលូស៊ីលិចតិនស្ដាញស្រីល" + + "ង្កាលីបេរីយ៉ាឡេសូតូលីទុយអានីលុចសំបួឡេតូនីលីប៊ីម៉ារ៉ុកម៉ូណាកូម៉ុលដាវីម៉" + + "ុងតេណេហ្គ្រោសាំង\u200bម៉ាទីនម៉ាដាហ្គាស្កាកោះ\u200bម៉ាស់សលម៉ាសេដ្វានម៉ា" + + "លីមីយ៉ាន់ម៉ា (ភូមា)ម៉ុងហ្គោលីម៉ាកាវ តំបន់រដ្ឋបាលពិសេសចិនកោះ\u200bម៉ារី" + + "ណា\u200bខាង\u200bជើងម៉ាទីនីកម៉ូរីតានីម៉ុងស៊ែរ៉ាម៉ាល់ត៍ម៉ូរីសម៉ាល់ឌីវម៉" + + "ាឡាវីម៉ិកស៊ិកម៉ាឡេស៊ីម៉ូសំប៊ិកណាមីប៊ីនូវែល\u200bកាឡេដូនីនីហ្សេកោះ" + + "\u200bណ័រហ្វក់នីហ្សេរីយ៉ានីការ៉ាហ្គាហូឡង់ន័រវែសនេប៉ាល់ណូរូណៀនូវែល\u200bស" + + "េឡង់អូម៉ង់ប៉ាណាម៉ាប៉េរូប៉ូលី\u200bណេស៊ី\u200bបារាំងប៉ាពូអាស៊ី\u200bនូវ" + + "ែលហ្គីណេហ្វីលីពីនប៉ាគីស្ថានប៉ូឡូញសង់ព្យែរ និង\u200bមីគីឡុងកោះ\u200bភីត" + + "កានព័រតូរីកូដែន\u200bដីប៉ាលេស្ទីនព័រទុយហ្គាល់ផៅឡូប៉ារ៉ាហ្គាយកាតាតំបន់ជ" + + "ាយអូសេអានីរេអុយញ៉ុងរូម៉ានីសែប៊ីរុស្ស៊ីរវ៉ាន់ដាអារ៉ាប៊ីសាអូឌីតកោះ\u200b" + + "សូឡូម៉ុងសីស្ហែលស៊ូដង់ស៊ុយអែតសិង្ហបុរីសង់\u200bហេឡេណាស្លូវេនីស្វាលបាដ ន" + + "ិង ហ្សង់ម៉ាយេនស្លូវ៉ាគីសៀរ៉ាឡេអូនសាន\u200bម៉ារីណូសេណេហ្គាល់សូម៉ាលីសូរី" + + "ណាមស៊ូដង់\u200bខាង\u200bត្បូងសៅតូម៉េ និង ប្រាំងស៊ីបអែលសាល់វ៉ាឌ័រសីង" + + "\u200bម៉ាធីនស៊ីរីស្វាស៊ីឡង់ទ្រីស្តង់\u200bដា\u200bចូនហាកោះ\u200bទួគ និង " + + "កៃកូសឆាដដែនដី\u200bបារាំង\u200bនៅ\u200bភាគខាងត្បូងតូហ្គោថៃតាហ្ស៊ីគីស្ថ" + + "ានតូខេឡៅទីម័រលីសតួកម៉េនីស្ថានទុយនីស៊ីតុងហ្គាតួកគីទ្រីនីដាត និង\u200bតូ" + + "បាហ្គោទូវ៉ាលូតៃវ៉ាន់តង់សានីអ៊ុយក្រែនអ៊ូហ្គង់ដាកោះ\u200bអៅឡាយីង\u200bអា" + + "មេរិកអង្គការសហប្រជាជាតិសហរដ្ឋអាមេរិកអ៊ុយរូហ្គាយអ៊ូសបេគីស្ថានបុរី\u200b" + + "វ៉ាទីកង់សាំង\u200bវ៉ាំងសង់ និង ហ្គ្រេណាឌីនវ៉េណេស៊ុយអេឡាកោះ\u200bវឺជិន" + + "\u200bចក្រភព\u200bអង់គ្លេសកោះ\u200bវឺជីន\u200bអាមេរិកវៀតណាមវ៉ានូទូវ៉ាលីស" + + " និង\u200bហ្វូទូណាសាម័រកូសូវ៉ូយេម៉ែនម៉ាយុតអាហ្វ្រិកខាងត្បូងសំប៊ីស៊ីមបាវ៉" + + "េតំបន់មិនស្គាល់ពិភពលោកអាហ្វ្រិកអាមេរិក\u200bខាង\u200bជើងអាមេរិក\u200bខ" + + "ាង\u200bត្បូងអូសេអានីអាហ្វ្រិក\u200bខាង\u200bលិចអាមេរិក\u200bកណ្ដាលអាហ" + + "្វ្រិកខាងកើតអាហ្វ្រិក\u200bខាង\u200bជើងអាហ្វ្រិក\u200bកណ្តាលអាហ្វ្រិកភ" + + "ាគខាងត្បូងអាមេរិកអាមេរិក\u200bភាគ\u200bខាង\u200bជើងការ៉ាប៊ីនអាស៊ី" + + "\u200bខាង\u200bកើតអាស៊ី\u200bខាង\u200bត្បូងអាស៊ីអាគ្នេយ៍អឺរ៉ុប\u200bខាង" + + "\u200bត្បូងអូស្ត្រាឡាស៊ីមេឡាណេស៊ីតំបន់\u200bមីក្រូណេស៊ីប៉ូលីណេស៊ីអាស៊ីអា" + + "ស៊ី\u200bកណ្ដាលអាស៊ី\u200bខាង\u200bលិចអឺរ៉ុបអឺរ៉ុប\u200bខាង\u200bកើតអឺ" + + "រ៉ុប\u200bខាង\u200bជើងអឺរ៉ុប\u200bខាង\u200bលិចអាមេរិក\u200bឡាទីន" + +var kmRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F - 0x0000, 0x0024, 0x003c, 0x005a, 0x008a, 0x00c8, 0x00e3, 0x00fb, - 0x010d, 0x0128, 0x0146, 0x0164, 0x0192, 0x01a7, 0x01c5, 0x01d7, - 0x01f5, 0x0219, 0x025f, 0x0274, 0x0292, 0x02ad, 0x02d1, 0x02ef, - 0x0301, 0x0319, 0x032b, 0x0350, 0x0368, 0x0380, 0x0392, 0x03c3, - 0x03db, 0x03f0, 0x0402, 0x0423, 0x043e, 0x0459, 0x046e, 0x0480, - 0x04ad, 0x04df, 0x052a, 0x0563, 0x0572, 0x058a, 0x059f, 0x05ae, - 0x05c3, 0x05cc, 0x05e4, 0x060b, 0x0629, 0x0638, 0x064a, 0x065f, - 0x0686, 0x0692, 0x06b9, 0x06d7, 0x06fe, 0x0713, 0x072b, 0x0740, + 0x0000, 0x0024, 0x003c, 0x0078, 0x00a8, 0x00e6, 0x0101, 0x0119, + 0x012b, 0x0146, 0x0164, 0x0182, 0x01b0, 0x01c5, 0x01e3, 0x01f5, + 0x0210, 0x0234, 0x027a, 0x028f, 0x02ad, 0x02c8, 0x02ec, 0x030a, + 0x031c, 0x0334, 0x0346, 0x036d, 0x0385, 0x039a, 0x03ac, 0x03d7, + 0x03ef, 0x0404, 0x0416, 0x0437, 0x0452, 0x0467, 0x0473, 0x0485, + 0x04b2, 0x04e4, 0x052f, 0x0568, 0x0577, 0x058f, 0x05a4, 0x05b3, + 0x05c8, 0x05d1, 0x05e9, 0x0610, 0x062e, 0x063d, 0x0652, 0x0667, + 0x068e, 0x069a, 0x06a6, 0x06c4, 0x06eb, 0x0700, 0x0718, 0x072d, // Entry 40 - 7F - 0x0776, 0x0794, 0x07c2, 0x07dd, 0x07f5, 0x080d, 0x0834, 0x084c, - 0x0864, 0x087c, 0x08a0, 0x08a0, 0x08bb, 0x08cd, 0x08f1, 0x0912, - 0x0933, 0x0945, 0x095a, 0x0987, 0x09a5, 0x09c0, 0x09e4, 0x09fc, - 0x0a0e, 0x0a2f, 0x0a53, 0x0a6b, 0x0a7d, 0x0a98, 0x0ac5, 0x0ad4, - 0x0b57, 0x0b78, 0x0b87, 0x0ba8, 0x0bc3, 0x0bd5, 0x0c18, 0x0c33, - 0x0c48, 0x0c54, 0x0c69, 0x0c87, 0x0ca5, 0x0cb7, 0x0cd5, 0x0cf6, - 0x0d05, 0x0d6b, 0x0d83, 0x0d98, 0x0db0, 0x0dc5, 0x0dd4, 0x0de9, - 0x0e04, 0x0e13, 0x0e25, 0x0e52, 0x0e67, 0x0e7f, 0x0e8e, 0x0ebc, + 0x0763, 0x0781, 0x07af, 0x07ca, 0x07e2, 0x07fa, 0x0821, 0x0839, + 0x0851, 0x0869, 0x088d, 0x08bd, 0x08d8, 0x08ea, 0x090e, 0x092f, + 0x0950, 0x0962, 0x0977, 0x09a4, 0x09bf, 0x09da, 0x0a05, 0x0a1d, + 0x0a2f, 0x0a56, 0x0a7a, 0x0a8f, 0x0aa1, 0x0abc, 0x0ae9, 0x0af8, + 0x0b72, 0x0b93, 0x0ba2, 0x0bc9, 0x0be1, 0x0bf3, 0x0c36, 0x0c51, + 0x0c6c, 0x0c78, 0x0c8d, 0x0cab, 0x0cc9, 0x0cdb, 0x0cf9, 0x0d1a, + 0x0d29, 0x0d8f, 0x0da7, 0x0dbc, 0x0dd4, 0x0de9, 0x0df8, 0x0e19, + 0x0e34, 0x0e43, 0x0e55, 0x0e82, 0x0e97, 0x0eaf, 0x0ebe, 0x0ef0, // Entry 80 - BF - 0x0ee3, 0x0f10, 0x0f25, 0x0f43, 0x0f6a, 0x0f73, 0x0f82, 0x0f9a, - 0x0fbb, 0x0fd6, 0x0ff1, 0x1003, 0x101e, 0x103c, 0x1054, 0x1063, - 0x1078, 0x108d, 0x10a5, 0x10cf, 0x10ed, 0x1114, 0x1135, 0x1150, - 0x115f, 0x118c, 0x11aa, 0x11bc, 0x11f5, 0x120d, 0x1228, 0x1249, - 0x125e, 0x1270, 0x1288, 0x129d, 0x12b5, 0x12cd, 0x12f1, 0x1306, - 0x1324, 0x1339, 0x135d, 0x137e, 0x13a2, 0x13b1, 0x13c3, 0x13d8, - 0x13e4, 0x13ea, 0x140e, 0x1420, 0x1438, 0x1447, 0x147d, 0x14a7, - 0x14c2, 0x14e0, 0x14f2, 0x152c, 0x154a, 0x1565, 0x158f, 0x15b3, + 0x0f17, 0x0f44, 0x0f56, 0x0f74, 0x0f9b, 0x0fa4, 0x0fb3, 0x0fce, + 0x0fef, 0x100a, 0x1025, 0x1037, 0x1052, 0x1067, 0x1079, 0x1088, + 0x109d, 0x10b2, 0x10ca, 0x10f4, 0x1115, 0x113c, 0x115d, 0x117b, + 0x118a, 0x11b7, 0x11d5, 0x1224, 0x125d, 0x1275, 0x1290, 0x12ae, + 0x12c3, 0x12d5, 0x12ed, 0x1302, 0x131a, 0x1332, 0x134d, 0x1362, + 0x138c, 0x139e, 0x13c2, 0x13e3, 0x1404, 0x1413, 0x1425, 0x143a, + 0x1446, 0x144c, 0x146d, 0x147f, 0x1497, 0x14a6, 0x14dc, 0x151e, + 0x1539, 0x1557, 0x1569, 0x15a3, 0x15c1, 0x15dc, 0x160c, 0x1630, // Entry C0 - FF - 0x15bf, 0x15e0, 0x15ec, 0x161c, 0x1637, 0x164c, 0x1658, 0x166d, - 0x1685, 0x16b2, 0x16d6, 0x16e5, 0x16f7, 0x170c, 0x1727, 0x1745, - 0x175d, 0x17a1, 0x17bc, 0x17da, 0x17fb, 0x1819, 0x182e, 0x1843, - 0x1873, 0x18b1, 0x18d8, 0x18f6, 0x1905, 0x1929, 0x195f, 0x198e, - 0x1997, 0x19e8, 0x19fa, 0x1a00, 0x1a2a, 0x1a3c, 0x1a4b, 0x1a72, - 0x1a8a, 0x1a9f, 0x1aae, 0x1aee, 0x1b03, 0x1b18, 0x1b33, 0x1b4e, - 0x1b6c, 0x1ba5, 0x1bdb, 0x1c02, 0x1c26, 0x1c4d, 0x1c74, 0x1cd2, - 0x1cf6, 0x1d41, 0x1d74, 0x1d86, 0x1da1, 0x1dd8, 0x1de7, 0x1dfc, + 0x163c, 0x165d, 0x1669, 0x1699, 0x16b4, 0x16c9, 0x16d8, 0x16ed, + 0x1705, 0x1732, 0x1756, 0x176b, 0x177d, 0x1792, 0x17ad, 0x17cb, + 0x17e3, 0x1827, 0x1842, 0x1860, 0x1881, 0x189f, 0x18b4, 0x18c9, + 0x18f9, 0x1937, 0x195e, 0x197c, 0x198b, 0x19a9, 0x19df, 0x1a0e, + 0x1a17, 0x1a68, 0x1a7a, 0x1a80, 0x1aaa, 0x1abc, 0x1ad4, 0x1afb, + 0x1b13, 0x1b28, 0x1b37, 0x1b77, 0x1b8c, 0x1ba1, 0x1bb6, 0x1bd1, + 0x1bef, 0x1c28, 0x1c5e, 0x1c85, 0x1ca6, 0x1ccd, 0x1cf4, 0x1d47, + 0x1d6e, 0x1db9, 0x1dec, 0x1dfe, 0x1e13, 0x1e4a, 0x1e59, 0x1e6e, // Entry 100 - 13F - 0x1e0b, 0x1e1d, 0x1e50, 0x1e68, 0x1e89, 0x1eb3, 0x1ec8, 0x1ee3, - 0x1f10, 0x1f43, 0x1f5b, 0x1f8e, 0x1fb8, 0x1fe5, 0x2018, 0x2048, - 0x2084, 0x2099, 0x20d2, 0x20ed, 0x2114, 0x2141, 0x2168, 0x2198, - 0x21bf, 0x21da, 0x220d, 0x222b, 0x223a, 0x225e, 0x2285, 0x2297, - 0x22c1, 0x22eb, 0x2315, 0x233c, -} // Size: 608 bytes + 0x1e80, 0x1e92, 0x1ec5, 0x1ed4, 0x1eef, 0x1f19, 0x1f2e, 0x1f49, + 0x1f76, 0x1fa9, 0x1fc1, 0x1ff4, 0x201e, 0x204b, 0x207e, 0x20ae, + 0x20ea, 0x20ff, 0x2138, 0x2153, 0x217a, 0x21a7, 0x21ce, 0x21fe, + 0x2225, 0x2240, 0x2273, 0x2291, 0x22a0, 0x22c4, 0x22eb, 0x22fd, + 0x2327, 0x2351, 0x237b, 0x237b, 0x23a2, +} // Size: 610 bytes const knRegionStr string = "" + // Size: 9421 bytes - "ಅಸೆನ್ಶನ್ ದ್ವೀಪಅಂಡೋರಾಸಂಯುಕ್ತ ಅರಬ್ ಎಮಿರೇಟಸ್ಅಫಘಾನಿಸ್ಥಾನ್ಆಂಟಿಗುವಾ ಮತ್ತು ಬರ್ಬ" + - "ುಡಾಆಂಗ್ವಿಲ್ಲಾಅಲ್ಬೇನಿಯಾಅರ್ಮೇನಿಯಾಅಂಗೋಲಾಅಂಟಾರ್ಟಿಕಾಅರ್ಜೆಂಟಿನಾಅಮೇರಿಕನ್ ಸಮೋವ" + - "ಾಆಸ್ಟ್ರಿಯಾಆಸ್ಟ್ರೇಲಿಯಅರುಬಾಆಲ್ಯಾಂಡ್ ದ್ವೀಪಗಳುಅಜರ್ಬೈಜಾನ್ಬೋಸ್ನಿಯಾ ಮತ್ತು ಹರ್" + - "ಜೆಗೋವಿನಾಬಾರ್ಬಡೋಸ್ಬಾಂಗ್ಲಾದೇಶ್ಬೆಲ್ಜಿಯಮ್ಬುರ್ಕಿನಾ ಫಾಸೋಬಲ್ಗೇರಿಯಾಬಹ್ರೇನ್ಬುರು" + + "ಅಸೆನ್ಶನ್ ದ್ವೀಪಅಂಡೋರಾಯುನೈಟೆಡ್ ಅರಬ್ ಎಮಿರೇಟ್ಸ್ಅಫಘಾನಿಸ್ಥಾನಆಂಟಿಗುವಾ ಮತ್ತು ಬರ್" + + "ಬುಡಾಆಂಗ್ವಿಲ್ಲಾಅಲ್ಬೇನಿಯಾಆರ್ಮೇನಿಯಅಂಗೋಲಾಅಂಟಾರ್ಟಿಕಾಅರ್ಜೆಂಟಿನಾಅಮೇರಿಕನ್ ಸಮೋವ" + + "ಾಆಸ್ಟ್ರಿಯಾಆಸ್ಟ್ರೇಲಿಯಾಅರುಬಾಆಲ್ಯಾಂಡ್ ದ್ವೀಪಗಳುಅಜರ್ಬೈಜಾನ್ಬೋಸ್ನಿಯಾ ಮತ್ತು ಹರ" + + "್ಜೆಗೋವಿನಾಬಾರ್ಬಡೋಸ್ಬಾಂಗ್ಲಾದೇಶಬೆಲ್ಜಿಯಮ್ಬುರ್ಕಿನಾ ಫಾಸೊಬಲ್ಗೇರಿಯಾಬಹ್ರೇನ್ಬುರು" + "ಂಡಿಬೆನಿನ್ಸೇಂಟ್ ಬಾರ್ಥೆಲೆಮಿಬರ್ಮುಡಾಬ್ರೂನಿಬೊಲಿವಿಯಾಕೆರೀಬಿಯನ್ ನೆದರ್\u200cಲ್ಯ" + "ಾಂಡ್ಸ್ಬ್ರೆಜಿಲ್ಬಹಾಮಾಸ್ಭೂತಾನ್ಬೋವೆಟ್ ದ್ವೀಪಬೋಟ್ಸ್\u200cವಾನಾಬೆಲಾರಸ್ಬೆಲಿಜ್ಕೆ" + "ನಡಾಕೊಕೊಸ್ (ಕೀಲಿಂಗ್) ದ್ವೀಪಗಳುಕಾಂಗೋ - ಕಿನ್ಶಾಸಾಮಧ್ಯ ಆಫ್ರಿಕಾ ಗಣರಾಜ್ಯಕಾಂಗೋ " + "- ಬ್ರಾಜಾವಿಲ್ಲೇಸ್ವಿಟ್ಜರ್ಲ್ಯಾಂಡ್ಕೋತ್\u200c ದಿವಾರ್\u200dಕುಕ್ ದ್ವೀಪಗಳುಚಿಲಿಕ್" + - "ಯಾಮರೋನ್ಚೀನಾಕೊಲಂಬಿಯಾಕ್ಲಿಪ್ಪರ್\u200cಟಾನ್ ದ್ವೀಪಗಳುಕೊಸ್ಟಾ ರಿಕಾಕ್ಯೂಬಾಕೇಪ್ ವ" + - "ರ್ಡೆಕುರಾಕಾವ್ಕ್ರಿಸ್ಮಸ್ ದ್ವೀಪಸೈಪ್ರಸ್ಝೆಕ್ ರಿಪಬ್ಲಿಕ್ಜರ್ಮನಿಡೈಗೋ ಗಾರ್ಸಿಯಜಿಬೋ" + - "ಟಿಡೆನ್ಮಾರ್ಕ್ಡೊಮಿನಿಕಾಡೊಮೆನಿಕನ್ ರಿಪಬ್ಲಿಕ್ಅಲ್ಗೇರಿಯಾಸೆಯುಟಾ ಹಾಗೂ ಮೆಲಿಲ್ಲಾಈಕ" + - "್ವೆಡಾರ್ಎಸ್ಟೋನಿಯಾಈಜಿಪ್ಟ್ಪಶ್ಚಿಮ ಸಹಾರಾಏರಿಟ್ರಿಯಾಸ್ಪೇನ್ಇಥಿಯೋಪಿಯಾಯುರೋಪಿಯನ್ ಒ" + - "ಕ್ಕೂಟಫಿನ್\u200cಲ್ಯಾಂಡ್ಫಿಜಿಫಾಲ್ಕ್\u200cಲ್ಯಾಂಡ್ ದ್ವೀಪಗಳುಮೈಕ್ರೋನೇಶಿಯಾಫರೋ " + + "ಯಾಮರೂನ್ಚೀನಾಕೊಲಂಬಿಯಾಕ್ಲಿಪ್ಪರ್\u200cಟಾನ್ ದ್ವೀಪಕೊಸ್ಟಾ ರಿಕಾಕ್ಯೂಬಾಕೇಪ್ ವರ್ಡ" + + "ೆಕುರಾಕಾವ್ಕ್ರಿಸ್ಮಸ್ ದ್ವೀಪಸೈಪ್ರಸ್ಝೆಕಿಯಾಜರ್ಮನಿಡೈಗೋ ಗಾರ್ಸಿಯಜಿಬೂಟಿಡೆನ್ಮಾರ್ಕ" + + "್ಡೊಮಿನಿಕಾಡೊಮೆನಿಕನ್ ರಿಪಬ್ಲಿಕ್ಅಲ್ಜೀರಿಯಸೆಯುಟಾ ಹಾಗೂ ಮೆಲಿಲ್ಲಾಈಕ್ವೆಡಾರ್ಎಸ್ಟೋ" + + "ನಿಯಾಈಜಿಪ್ಟ್ಪಶ್ಚಿಮ ಸಹಾರಾಎರಿಟ್ರಿಯಾಸ್ಪೇನ್ಇಥಿಯೋಪಿಯಾಯುರೋಪಿಯನ್ ಒಕ್ಕೂಟಯೂರೋಝೋನ" + + "್\u200cಫಿನ್\u200cಲ್ಯಾಂಡ್ಫಿಜಿಫಾಕ್\u200cಲ್ಯಾಂಡ್ ದ್ವೀಪಗಳುಮೈಕ್ರೋನೇಶಿಯಾಫರೋ " + "ದ್ವೀಪಗಳುಫ್ರಾನ್ಸ್ಗೆಬೊನ್ಬ್ರಿಟನ್/ಇಂಗ್ಲೆಂಡ್ಗ್ರೆನೆಡಾಜಾರ್ಜಿಯಾಫ್ರೆಂಚ್ ಗಯಾನಾಗು" + "ರ್ನ್\u200cಸೆಘಾನಾಗಿಬ್ರಾಲ್ಟರ್ಗ್ರೀನ್\u200cಲ್ಯಾಂಡ್ಗ್ಯಾಂಬಿಯಾಗಿನಿಗುಡೆಲೋಪ್ಈಕ್" + "ವೆಟೋರಿಯಲ್ ಗಿನಿಗ್ರೀಸ್ದಕ್ಷಿಣ ಜಾರ್ಜಿಯಾ ಮತ್ತು ದಕ್ಷಿಣ ಸ್ಯಾಂಡ್\u200dವಿಚ್ ದ್ವ" + - "ೀಪಗಳುಗ್ವಾಟೆಮಾಲಾಗುಯಾಮ್ಗಿನಿ-ಬಿಸ್ಸಾವ್ಗಯಾನಾಹಾಂಗ್ ಕಾಂಗ್ SAR ಚೈನಾಹರ್ಡ್ ಮತ್ತು" + - " ಮ್ಯಾಕ್\u200cಡೋನಾಲ್ಡ್ ದ್ವೀಪಗಳುಹೊಂಡುರಾಸ್ಕ್ರೊಯೇಶಿಯಾಹೈಟಿಹಂಗೇರಿಕ್ಯಾನರಿ ದ್ವೀಪ" + + "ೀಪಗಳುಗ್ವಾಟೆಮಾಲಾಗುವಾಮ್ಗಿನಿ-ಬಿಸ್ಸಾವ್ಗಯಾನಾಹಾಂಗ್ ಕಾಂಗ್ SAR ಚೈನಾಹರ್ಡ್ ಮತ್ತು" + + " ಮ್ಯಾಕ್\u200cಡೋನಾಲ್ಡ್ ದ್ವೀಪಗಳುಹೊಂಡುರಾಸ್ಕ್ರೊಯೇಷಿಯಾಹೈಟಿಹಂಗೇರಿಕ್ಯಾನರಿ ದ್ವೀಪ" + "ಗಳುಇಂಡೋನೇಶಿಯಾಐರ್ಲೆಂಡ್ಇಸ್ರೇಲ್ಐಲ್ ಆಫ್ ಮ್ಯಾನ್ಭಾರತಬ್ರಿಟೀಷ್ ಹಿಂದೂ ಮಹಾಸಾಗರದ " + "ಪ್ರದೇಶಇರಾಕ್ಇರಾನ್ಐಸ್\u200cಲ್ಯಾಂಡ್ಇಟಲಿಜೆರ್ಸಿಜಮೈಕಾಜೋರ್ಡಾನ್ಜಪಾನ್ಕೀನ್ಯಾಕಿರ್" + - "ಗಿಸ್ಥಾನ್ಕಾಂಬೋಡಿಯಾಕಿರಿಬಾತಿಕೊಮೊರೊಸ್ಸೇಂಟ್ ಕಿಟ್ಸ್ ಮತ್ತು ನೆವಿಸ್ಉತ್ತರ ಕೋರಿಯಾ" + - "ದಕ್ಷಿಣ ಕೋರಿಯಾಕುವೈತ್ಕೇಮನ್ ದ್ವೀಪಗಳುಕಝಾಕಿಸ್ಥಾನ್ಲಾವೋಸ್ಲೆಬನಾನ್ಸೇಂಟ್ ಲೂಸಿಯಾಲ" + - "ಿಚೆನ್\u200cಸ್ಟೈನ್ಶ್ರೀಲಂಕಾಲಿಬೇರಿಯಾಲೆಸೊಥೋಲಿಥುವೇನಿಯಾಲಕ್ಸಂಬರ್ಗ್ಲಾಟ್ವಿಯಾಲಿಬ" + - "ಿಯಾಮೊರಾಕ್ಕೊಮೊನಾಕೊಮೊಲ್ಡೋವಾಮೊಂಟೆನೆಗ್ರೋಸೇಂಟ್ ಮಾರ್ಟಿನ್ಮಡಗಾಸ್ಕರ್ಮಾರ್ಷಲ್ ದ್ವ" + - "ೀಪಗಳುಮ್ಯಾಸಿಡೋನಿಯಾಮಾಲಿಮಯನ್ಮಾರ್ (ಬರ್ಮಾ)ಮೊಂಗೋಲಿಯಾಮಖಾವು (SAR) ಚೈನಾಉತ್ತರ ಮರ" + - "ಿಯಾನಾ ದ್ವೀಪಗಳುಮಾರ್ಟಿನಿಕ್ಮಾರಿಟೇನಿಯಾಮಾಂಟ್\u200cಸೆರೇಟ್ಮಾಲ್ಟಾಮಾರಿಷಸ್ಮಾಲ್ಡಿ" + - "ವ್ಸ್ಮಲಾವಿಮೆಕ್ಸಿಕೊಮಲೇಶಿಯಾಮೊಜಾಂಬಿಕ್ನಮೀಬಿಯಾನ್ಯೂ ಕ್ಯಾಲಿಡೋನಿಯಾನೈಜರ್ನಾರ್ಫೋಕ್" + - " ದ್ವೀಪನೈಜೀರಿಯಾನಿಕಾರಾಗುವಾನೆದರ್\u200cಲ್ಯಾಂಡ್ಸ್ನಾರ್ವೇನೇಪಾಳನೌರುನಿಯುನ್ಯೂಜಿಲೆಂ" + - "ಡ್ಓಮನ್ಪನಾಮಾಪೆರುಫ್ರೆಂಚ್ ಪಾಲಿನೇಷ್ಯಾಪಪುವಾ ನ್ಯೂಗಿನಿಯಾಫಿಲಿಫೈನ್ಸ್ಪಾಕಿಸ್ತಾನಪೋ" + - "ಲ್ಯಾಂಡ್ಸೇಂಟ್ ಪಿಯರೆ ಮತ್ತು ಮಿಕೆಲನ್ಪಿಟ್\u200cಕೈರ್ನ್ ದ್ವೀಪಗಳುಪ್ಯೂರ್ಟೋ ರಿಕೊ" + - "ಪ್ಯಾಲೇಸ್ಟೇನಿಯನ್ ಪ್ರದೇಶಗಳುಪೋರ್ಚುಗಲ್ಪಲಾವುಪರಾಗ್ವೇಖತಾರ್ಔಟ್ ಲೈಯಿಂಗ್ ಓಷಿಯಾನಿ" + - "ಯಾರೀಯೂನಿಯನ್ರೊಮೇನಿಯಾಸೆರ್ಬಿಯಾರಷ್ಯಾರುವಾಂಡಾಸೌದಿ ಅರೇಬಿಯಾಸೊಲೊಮನ್ ದ್ವೀಪಗಳುಸೀಶ" + - "ೆಲ್ಲೆಸ್ಸೂಡಾನ್ಸ್ವೀಡನ್ಸಿಂಗಾಪುರ್ಸೇಂಟ್ ಹೆಲೆನಾಸ್ಲೋವೇನಿಯಾಸ್ವಾಲ್ಬಾರ್ಡ್ ಮತ್ತು " + - "ಜಾನ್ ಮೆಯನ್ಸ್ಲೋವಾಕಿಯಾಸಿಯೆರ್ರಾ ಲಿಯೋನ್ಸ್ಯಾನ್ ಮೆರಿನೋಸೆನೆಗಲ್ಸೊಮಾಲಿಯಾಸುರಿನಾಮ" + - "ದಕ್ಷಿಣ ಸೂಡಾನ್ಸಾವೋ ಟೋಮ್ ಮತ್ತು ಪ್ರಿನ್ಸಿಪಿಎಲ್ ಸಾಲ್ವೇಡಾರ್ಸಿಂಟ್ ಮಾರ್ಟೆನ್ಸಿರ" + + "ಗಿಸ್ಥಾನ್ಕಾಂಬೋಡಿಯಾಕಿರಿಬಾಟಿಕೊಮೊರೊಸ್ಸೇಂಟ್ ಕಿಟ್ಸ್ ಮತ್ತು ನೆವಿಸ್ಉತ್ತರ ಕೊರಿಯಾ" + + "ದಕ್ಷಿಣ ಕೊರಿಯಾಕುವೈತ್ಕೇಮನ್ ದ್ವೀಪಗಳುಕಝಾಕಿಸ್ಥಾನ್ಲಾವೋಸ್ಲೆಬನಾನ್ಸೇಂಟ್ ಲೂಸಿಯಾಲ" + + "ಿಚೆನ್\u200cಸ್ಟೈನ್ಶ್ರೀಲಂಕಾಲಿಬೇರಿಯಾಲೆಸೊಥೊಲಿಥುವೇನಿಯಾಲಕ್ಸೆಂಬರ್ಗ್ಲಾಟ್ವಿಯಾಲಿ" + + "ಬಿಯಾಮೊರಾಕ್ಕೊಮೊನಾಕೊಮೊಲ್ಡೋವಾಮೊಂಟೆನೆಗ್ರೋಸೇಂಟ್ ಮಾರ್ಟಿನ್ಮಡಗಾಸ್ಕರ್ಮಾರ್ಷಲ್ ದ್" + + "ವೀಪಗಳುಮ್ಯಾಸಿಡೋನಿಯಾಮಾಲಿಮಯನ್ಮಾರ್ (ಬರ್ಮಾ)ಮಂಗೋಲಿಯಾಮಕಾವು SAR ಚೈನಾಉತ್ತರ ಮರಿಯ" + + "ಾನಾ ದ್ವೀಪಗಳುಮಾರ್ಟಿನಿಕ್ಮಾರಿಟೇನಿಯಾಮಾಂಟ್\u200cಸೆರಟ್ಮಾಲ್ಟಾಮಾರಿಷಸ್ಮಾಲ್ಡೀವ್ಸ" + + "್ಮಲಾವಿಮೆಕ್ಸಿಕೊಮಲೇಶಿಯಾಮೊಜಾಂಬಿಕ್ನಮೀಬಿಯಾನ್ಯೂ ಕ್ಯಾಲಿಡೋನಿಯಾನೈಜರ್ನಾರ್ಫೋಕ್ ದ್" + + "ವೀಪನೈಜೀರಿಯಾನಿಕಾರಾಗುವಾನೆದರ್\u200cಲ್ಯಾಂಡ್ಸ್ನಾರ್ವೆನೇಪಾಳನೌರುನಿಯುನ್ಯೂಜಿಲೆಂಡ" + + "್ಓಮನ್ಪನಾಮಾಪೆರುಫ್ರೆಂಚ್ ಪಾಲಿನೇಷ್ಯಾಪಪುವಾ ನ್ಯೂಗಿನಿಯಾಫಿಲಿಫೈನ್ಸ್ಪಾಕಿಸ್ತಾನಪೋಲ" + + "್ಯಾಂಡ್ಸೇಂಟ್ ಪಿಯರ್ ಮತ್ತು ಮಿಕ್ವೆಲನ್ಪಿಟ್\u200cಕೈರ್ನ್ ದ್ವೀಪಗಳುಪ್ಯೂರ್ಟೋ ರಿಕ" + + "ೊಪ್ಯಾಲೇಸ್ಟೇನಿಯನ್ ಪ್ರದೇಶಗಳುಪೋರ್ಚುಗಲ್ಪಲಾವುಪರಾಗ್ವೇಖತಾರ್ಔಟ್ ಲೈಯಿಂಗ್ ಓಷಿಯಾನ" + + "ಿಯಾರಿಯೂನಿಯನ್ರೊಮೇನಿಯಾಸೆರ್ಬಿಯಾರಷ್ಯಾರುವಾಂಡಾಸೌದಿ ಅರೇಬಿಯಾಸಾಲೊಮನ್ ದ್ವೀಪಗಳುಸೀ" + + "ಶೆಲ್ಲೆಸ್ಸುಡಾನ್ಸ್ವೀಡನ್ಸಿಂಗಾಪುರ್ಸೇಂಟ್ ಹೆಲೆನಾಸ್ಲೋವೇನಿಯಾಸ್ವಾಲ್ಬಾರ್ಡ್ ಮತ್ತು" + + " ಜಾನ್ ಮೆಯನ್ಸ್ಲೊವಾಕಿಯಾಸಿಯೆರ್ರಾ ಲಿಯೋನ್ಸ್ಯಾನ್ ಮೆರಿನೋಸೆನೆಗಲ್ಸೊಮಾಲಿಯಾಸುರಿನಾಮ್" + + "ದಕ್ಷಿಣ ಸುಡಾನ್ಸಾವೋ ಟೋಮ್ ಮತ್ತು ಪ್ರಿನ್ಸಿಪಿಎಲ್ ಸಾಲ್ವೇಡಾರ್ಸಿಂಟ್ ಮಾರ್ಟೆನ್ಸಿರ" + "ಿಯಾಸ್ವಾಜಿಲ್ಯಾಂಡ್ಟ್ರಿಸ್ತನ್ ಡಾ ಕುನ್ಹಾಟರ್ಕ್ಸ್ ಮತ್ತು ಕೈಕೋಸ್ ದ್ವೀಪಗಳುಚಾದ್ಫ್" + "ರೆಂಚ್ ದಕ್ಷಿಣ ಪ್ರದೇಶಗಳುಟೋಗೋಥೈಲ್ಯಾಂಡ್ತಜಿಕಿಸ್ತಾನ್ಟೊಕೆಲಾವ್ಪೂರ್ವ ತಿಮೋರ್ತುರ್" + - "ಕಮೆನಿಸ್ತಾನ್ಟುನಿಶಿಯಾಟೊಂಗಟರ್ಕಿಟ್ರಿನಿಡಾಡ್ ಮತ್ತು ಟೊಬಾಗೊಟುವಾಲುಥೈವಾನ್ತಾಂಜೇನಿ" + - "ಯಾಉಕ್ರೈನ್ಉಗಾಂಡಾಯುಎಸ್\u200c. ಔಟ್\u200cಲೇಯಿಂಗ್ ದ್ವೀಪಗಳುಸಂಯುಕ್ತ ಸಂಸ್ಥಾನಗಳ" + - "ುಅಮೇರಿಕಾ ಸಂಯುಕ್ತ ಸಂಸ್ಥಾನಉರುಗ್ವೇಉಜ್ಬೇಕಿಸ್ಥಾನ್ವ್ಯಾಟಿಕನ್ಸೇಂಟ್. ವಿನ್ಸೆಂಟ್ " + - "ಮತ್ತು ಗ್ರೆನೆಡೈನ್ಸ್ವೆನೆಜುವೆಲಾಬ್ರಿಟಿಷ್ ವರ್ಜಿನ್ ದ್ವೀಪಗಳುಯು.ಎಸ್. ವರ್ಜಿನ್ ದ" + - "್ವೀಪಗಳುವಿಯೇಟ್ನಾಮ್ವನೌಟುವಾಲಿಸ್ ಮತ್ತು ಫುಟುನಾಸಮೋವಾಕೊಸೊವೊಯೆಮನ್ಮಯೊಟ್ಟೆದಕ್ಷಿಣ" + - " ಆಫ್ರಿಕಾಝಾಂಬಿಯಾಜಿಂಬಾಬ್ವೆಅಜ್ಞಾತ ಪ್ರದೇಶಪ್ರಪಂಚಆಫ್ರಿಕಾಉತ್ತರ ಅಮೇರಿಕಾದಕ್ಷಿಣ ಅಮ" + - "ೇರಿಕಾಓಶಿಯೇನಿಯಾಪಶ್ಚಿಮ ಆಫ್ರಿಕಾಮಧ್ಯ ಅಮೇರಿಕಾಪೂರ್ವ ಆಫ್ರಿಕಾಉತ್ತರ ಆಫ್ರಿಕಾಮಧ್ಯ" + - " ಆಫ್ರಿಕಾಆಫ್ರಿಕಾದ ದಕ್ಷಿಣ ಭಾಗಅಮೆರಿಕಾಸ್ಅಮೇರಿಕಾದ ಉತ್ತರ ಭಾಗಕೆರೀಬಿಯನ್ಪೂರ್ವ ಏಷ್" + - "ಯಾದಕ್ಷಿಣ ಏಷ್ಯಾಆಗ್ನೇಯ ಏಷ್ಯಾದಕ್ಷಿಣ ಯೂರೋಪ್ಆಸ್ಟ್ರೇಲೇಷ್ಯಾಮೆಲನೇಷಿಯಾಮೈಕ್ರೋನೇಶ" + - "ಿಯನ್ ಪ್ರದೇಶಪಾಲಿನೇಷ್ಯಾಏಷ್ಯಾಮಧ್ಯ ಏಷ್ಯಾಪಶ್ಚಿಮ ಏಷ್ಯಾಯೂರೋಪ್ಪೂರ್ವ ಯೂರೋಪ್ಉತ್ತ" + - "ರ ಯೂರೋಪ್ಪಶ್ಚಿಮ ಯೂರೋಪ್ಲ್ಯಾಟಿನ್ ಅಮೇರಿಕಾ" - -var knRegionIdx = []uint16{ // 292 elements + "ಕಮೆನಿಸ್ತಾನ್ಟುನೀಶಿಯಟೊಂಗಾಟರ್ಕಿಟ್ರಿನಿಡಾಡ್ ಮತ್ತು ಟೊಬಾಗೊಟುವಾಲುತೈವಾನ್ತಾಂಜೇನಿ" + + "ಯಾಉಕ್ರೈನ್ಉಗಾಂಡಾಯುಎಸ್\u200c ಔಟ್\u200cಲೇಯಿಂಗ್ ದ್ವೀಪಗಳುಸಂಯುಕ್ತ ಸಂಸ್ಥಾನಗಳು" + + "ಅಮೇರಿಕಾ ಸಂಯುಕ್ತ ಸಂಸ್ಥಾನಉರುಗ್ವೆಉಜ್ಬೇಕಿಸ್ಥಾನ್ವ್ಯಾಟಿಕನ್ ಸಿಟಿಸೇಂಟ್. ವಿನ್ಸೆ" + + "ಂಟ್ ಮತ್ತು ಗ್ರೆನೆಡೈನ್ಸ್ವೆನೆಜುವೆಲಾಬ್ರಿಟಿಷ್ ವರ್ಜಿನ್ ದ್ವೀಪಗಳುಯು.ಎಸ್. ವರ್ಜಿ" + + "ನ್ ದ್ವೀಪಗಳುವಿಯೆಟ್ನಾಮ್ವನೌಟುವಾಲಿಸ್ ಮತ್ತು ಫುಟುನಾಸಮೋವಾಕೊಸೊವೊಯೆಮನ್ಮಯೊಟ್ಟೆದಕ" + + "್ಷಿಣ ಆಫ್ರಿಕಾಜಾಂಬಿಯಜಿಂಬಾಬ್ವೆಅಜ್ಞಾತ ಪ್ರದೇಶಪ್ರಪಂಚಆಫ್ರಿಕಾಉತ್ತರ ಅಮೇರಿಕಾದಕ್ಷ" + + "ಿಣ ಅಮೇರಿಕಾಓಶಿಯೇನಿಯಾಪಶ್ಚಿಮ ಆಫ್ರಿಕಾಮಧ್ಯ ಅಮೇರಿಕಾಪೂರ್ವ ಆಫ್ರಿಕಾಉತ್ತರ ಆಫ್ರಿಕ" + + "ಾಮಧ್ಯ ಆಫ್ರಿಕಾಆಫ್ರಿಕಾದ ದಕ್ಷಿಣ ಭಾಗಅಮೆರಿಕಾಸ್ಅಮೇರಿಕಾದ ಉತ್ತರ ಭಾಗಕೆರೀಬಿಯನ್ಪೂ" + + "ರ್ವ ಏಷ್ಯಾದಕ್ಷಿಣ ಏಷ್ಯಾಆಗ್ನೇಯ ಏಷ್ಯಾದಕ್ಷಿಣ ಯೂರೋಪ್ಆಸ್ಟ್ರೇಲೇಷ್ಯಾಮೆಲನೇಷಿಯಾಮೈ" + + "ಕ್ರೋನೇಶಿಯನ್ ಪ್ರದೇಶಪಾಲಿನೇಷ್ಯಾಏಷ್ಯಾಮಧ್ಯ ಏಷ್ಯಾಪಶ್ಚಿಮ ಏಷ್ಯಾಯೂರೋಪ್ಪೂರ್ವ ಯೂರ" + + "ೋಪ್ಉತ್ತರ ಯೂರೋಪ್ಪಶ್ಚಿಮ ಯೂರೋಪ್ಲ್ಯಾಟಿನ್ ಅಮೇರಿಕಾ" + +var knRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F - 0x0000, 0x0028, 0x003a, 0x0075, 0x0099, 0x00d7, 0x00f5, 0x0110, - 0x012b, 0x013d, 0x015b, 0x0179, 0x01a1, 0x01bc, 0x01da, 0x01e9, - 0x021a, 0x0238, 0x0282, 0x029d, 0x02be, 0x02d9, 0x02fe, 0x0319, + 0x0000, 0x0028, 0x003a, 0x007b, 0x009c, 0x00da, 0x00f8, 0x0113, + 0x012b, 0x013d, 0x015b, 0x0179, 0x01a1, 0x01bc, 0x01dd, 0x01ec, + 0x021d, 0x023b, 0x0285, 0x02a0, 0x02be, 0x02d9, 0x02fe, 0x0319, 0x032e, 0x0343, 0x0355, 0x0383, 0x0398, 0x03aa, 0x03c2, 0x040b, 0x0423, 0x0438, 0x044a, 0x046c, 0x048d, 0x04a2, 0x04b4, 0x04c3, 0x0506, 0x0530, 0x0568, 0x059e, 0x05ce, 0x05f3, 0x0618, 0x0624, - 0x063f, 0x064b, 0x0663, 0x06a6, 0x06c5, 0x06d7, 0x06f3, 0x070b, - 0x0736, 0x074b, 0x0773, 0x0785, 0x07a7, 0x07b9, 0x07d7, 0x07ef, + 0x063f, 0x064b, 0x0663, 0x069d, 0x06bc, 0x06ce, 0x06ea, 0x0702, + 0x072d, 0x0742, 0x0754, 0x0766, 0x0788, 0x079a, 0x07b8, 0x07d0, // Entry 40 - 7F - 0x0826, 0x0841, 0x0879, 0x0894, 0x08af, 0x08c4, 0x08e6, 0x0901, - 0x0913, 0x092e, 0x095c, 0x095c, 0x0980, 0x098c, 0x09cf, 0x09f3, - 0x0a15, 0x0a2d, 0x0a3f, 0x0a70, 0x0a88, 0x0aa0, 0x0ac5, 0x0ae0, - 0x0aec, 0x0b0d, 0x0b37, 0x0b52, 0x0b5e, 0x0b76, 0x0ba7, 0x0bb9, - 0x0c45, 0x0c63, 0x0c75, 0x0c9a, 0x0ca9, 0x0cd9, 0x0d3f, 0x0d5a, - 0x0d78, 0x0d84, 0x0d96, 0x0dc4, 0x0de2, 0x0dfa, 0x0e0f, 0x0e35, - 0x0e41, 0x0e95, 0x0ea4, 0x0eb3, 0x0ed4, 0x0ee0, 0x0ef2, 0x0f01, - 0x0f19, 0x0f28, 0x0f3a, 0x0f5e, 0x0f79, 0x0f91, 0x0fa9, 0x0fee, + 0x0807, 0x081f, 0x0857, 0x0872, 0x088d, 0x08a2, 0x08c4, 0x08df, + 0x08f1, 0x090c, 0x093a, 0x0955, 0x0979, 0x0985, 0x09c2, 0x09e6, + 0x0a08, 0x0a20, 0x0a32, 0x0a63, 0x0a7b, 0x0a93, 0x0ab8, 0x0ad3, + 0x0adf, 0x0b00, 0x0b2a, 0x0b45, 0x0b51, 0x0b69, 0x0b9a, 0x0bac, + 0x0c38, 0x0c56, 0x0c68, 0x0c8d, 0x0c9c, 0x0ccc, 0x0d32, 0x0d4d, + 0x0d6b, 0x0d77, 0x0d89, 0x0db7, 0x0dd5, 0x0ded, 0x0e02, 0x0e28, + 0x0e34, 0x0e88, 0x0e97, 0x0ea6, 0x0ec7, 0x0ed3, 0x0ee5, 0x0ef4, + 0x0f0c, 0x0f1b, 0x0f2d, 0x0f51, 0x0f6c, 0x0f84, 0x0f9c, 0x0fe1, // Entry 80 - BF - 0x1010, 0x1035, 0x1047, 0x106f, 0x1090, 0x10a2, 0x10b7, 0x10d9, - 0x1100, 0x1118, 0x1130, 0x1142, 0x1160, 0x117e, 0x1196, 0x11a8, - 0x11c0, 0x11d2, 0x11ea, 0x120b, 0x1233, 0x124e, 0x127c, 0x12a0, - 0x12ac, 0x12d6, 0x12f1, 0x1313, 0x1351, 0x136f, 0x138d, 0x13b1, - 0x13c3, 0x13d8, 0x13f6, 0x1405, 0x141d, 0x1432, 0x144d, 0x1462, - 0x1493, 0x14a2, 0x14ca, 0x14e2, 0x1500, 0x152d, 0x153f, 0x154e, - 0x155a, 0x1566, 0x1587, 0x1593, 0x15a2, 0x15ae, 0x15e2, 0x1610, - 0x162e, 0x1649, 0x1664, 0x16a9, 0x16e3, 0x1708, 0x1751, 0x176c, + 0x1003, 0x1028, 0x103a, 0x1062, 0x1083, 0x1095, 0x10aa, 0x10cc, + 0x10f3, 0x110b, 0x1123, 0x1135, 0x1153, 0x1174, 0x118c, 0x119e, + 0x11b6, 0x11c8, 0x11e0, 0x1201, 0x1229, 0x1244, 0x1272, 0x1296, + 0x12a2, 0x12cc, 0x12e4, 0x1304, 0x1342, 0x1360, 0x137e, 0x139f, + 0x13b1, 0x13c6, 0x13e4, 0x13f3, 0x140b, 0x1420, 0x143b, 0x1450, + 0x1481, 0x1490, 0x14b8, 0x14d0, 0x14ee, 0x151b, 0x152d, 0x153c, + 0x1548, 0x1554, 0x1575, 0x1581, 0x1590, 0x159c, 0x15d0, 0x15fe, + 0x161c, 0x1637, 0x1652, 0x169d, 0x16d7, 0x16fc, 0x1745, 0x1760, // Entry C0 - FF - 0x177b, 0x1790, 0x179f, 0x17da, 0x17f5, 0x180d, 0x1825, 0x1834, - 0x1849, 0x186b, 0x1899, 0x18b7, 0x18c9, 0x18de, 0x18f9, 0x191b, - 0x1939, 0x198a, 0x19a8, 0x19d3, 0x19f8, 0x1a0d, 0x1a25, 0x1a3a, - 0x1a5f, 0x1aa7, 0x1acf, 0x1af7, 0x1b09, 0x1b30, 0x1b65, 0x1bb6, - 0x1bc2, 0x1c06, 0x1c12, 0x1c2d, 0x1c4e, 0x1c66, 0x1c88, 0x1cb5, - 0x1ccd, 0x1cd9, 0x1ce8, 0x1d29, 0x1d3b, 0x1d4d, 0x1d68, 0x1d7d, - 0x1d8f, 0x1ddd, 0x1e11, 0x1e52, 0x1e67, 0x1e8e, 0x1ea9, 0x1f0a, - 0x1f28, 0x1f6f, 0x1faf, 0x1fcd, 0x1fdc, 0x2011, 0x2020, 0x2032, + 0x176f, 0x1784, 0x1793, 0x17ce, 0x17e9, 0x1801, 0x1819, 0x1828, + 0x183d, 0x185f, 0x188d, 0x18ab, 0x18bd, 0x18d2, 0x18ed, 0x190f, + 0x192d, 0x197e, 0x199c, 0x19c7, 0x19ec, 0x1a01, 0x1a19, 0x1a31, + 0x1a56, 0x1a9e, 0x1ac6, 0x1aee, 0x1b00, 0x1b27, 0x1b5c, 0x1bad, + 0x1bb9, 0x1bfd, 0x1c09, 0x1c24, 0x1c45, 0x1c5d, 0x1c7f, 0x1cac, + 0x1cc1, 0x1cd0, 0x1cdf, 0x1d20, 0x1d32, 0x1d44, 0x1d5f, 0x1d74, + 0x1d86, 0x1dd3, 0x1e07, 0x1e48, 0x1e5d, 0x1e84, 0x1eac, 0x1f0d, + 0x1f2b, 0x1f72, 0x1fb2, 0x1fd0, 0x1fdf, 0x2014, 0x2023, 0x2035, // Entry 100 - 13F - 0x2041, 0x2056, 0x207e, 0x2093, 0x20ae, 0x20d3, 0x20e5, 0x20fa, + 0x2044, 0x2059, 0x2081, 0x2093, 0x20ae, 0x20d3, 0x20e5, 0x20fa, 0x211f, 0x2147, 0x2162, 0x218a, 0x21ac, 0x21d1, 0x21f6, 0x2218, 0x224d, 0x2268, 0x229a, 0x22b5, 0x22d4, 0x22f6, 0x2318, 0x233d, 0x2364, 0x237f, 0x23b9, 0x23d7, 0x23e6, 0x2402, 0x2424, 0x2436, - 0x2458, 0x247a, 0x249f, 0x24cd, -} // Size: 608 bytes + 0x2458, 0x247a, 0x249f, 0x249f, 0x24cd, +} // Size: 610 bytes -const koRegionStr string = "" + // Size: 3880 bytes +const koRegionStr string = "" + // Size: 3889 bytes "어센션 섬안도라아랍에미리트아프가니스탄앤티가 바부다앵귈라알바니아아르메니아앙골라남극 대륙아르헨티나아메리칸 사모아오스트리아오스트레일리아" + "아루바올란드 제도아제르바이잔보스니아 헤르체고비나바베이도스방글라데시벨기에부르키나파소불가리아바레인부룬디베냉생바르텔레미버뮤다브루나이" + "볼리비아네덜란드령 카리브브라질바하마부탄부베섬보츠와나벨라루스벨리즈캐나다코코스 제도콩고-킨샤사중앙 아프리카 공화국콩고-브라자빌스위" + "스코트디부아르쿡 제도칠레카메룬중국콜롬비아클립퍼튼 섬코스타리카쿠바카보베르데퀴라소크리스마스섬키프로스체코독일디에고 가르시아지부티덴마" + - "크도미니카도미니카 공화국알제리세우타 및 멜리야에콰도르에스토니아이집트서사하라에리트리아스페인에티오피아유럽 연합핀란드피지포클랜드 제" + - "도미크로네시아페로 제도프랑스가봉영국그레나다조지아프랑스령 기아나건지가나지브롤터그린란드감비아기니과들루프적도 기니그리스사우스조지아 " + - "사우스샌드위치 제도과테말라괌기니비사우가이아나홍콩(중국 특별행정구)허드 맥도널드 제도온두라스크로아티아아이티헝가리카나리아 제도인도" + - "네시아아일랜드이스라엘맨 섬인도영국령 인도양 식민지이라크이란아이슬란드이탈리아저지자메이카요르단일본케냐키르기스스탄캄보디아키리바시코모" + - "로세인트키츠 네비스북한대한민국쿠웨이트케이맨 제도카자흐스탄라오스레바논세인트루시아리히텐슈타인스리랑카라이베리아레소토리투아니아룩셈부르" + - "크라트비아리비아모로코모나코몰도바몬테네그로생마르탱마다가스카르마셜 제도마케도니아말리미얀마몽골마카오(중국 특별행정구)북마리아나제도마" + - "르티니크모리타니몬트세라트몰타모리셔스몰디브말라위멕시코말레이시아모잠비크나미비아뉴칼레도니아니제르노퍽섬나이지리아니카라과네덜란드노르웨이" + - "네팔나우루니우에뉴질랜드오만파나마페루프랑스령 폴리네시아파푸아뉴기니필리핀파키스탄폴란드생피에르 미클롱핏케언 섬푸에르토리코팔레스타인 " + - "지구포르투갈팔라우파라과이카타르오세아니아 외곽리유니온루마니아세르비아러시아르완다사우디아라비아솔로몬 제도세이셸수단스웨덴싱가포르세인트" + - "헬레나슬로베니아스발바르제도-얀마웬섬슬로바키아시에라리온산마리노세네갈소말리아수리남남수단상투메 프린시페엘살바도르신트마르턴시리아스와질" + - "란드트리스탄다쿠나터크스 케이커스 제도차드프랑스 남부 지방토고태국타지키스탄토켈라우동티모르투르크메니스탄튀니지통가터키트리니다드 토바" + - "고투발루대만탄자니아우크라이나우간다미국령 해외 제도유엔미국우루과이우즈베키스탄바티칸 시국세인트빈센트그레나딘베네수엘라영국령 버진아일" + - "랜드미국령 버진아일랜드베트남바누아투왈리스-푸투나 제도사모아코소보예멘마요트남아프리카잠비아짐바브웨알려지지 않은 지역세계아프리카북아" + - "메리카남아메리카(남미)오세아니아서부 아프리카중앙 아메리카동부 아프리카북부 아프리카중부 아프리카남부 아프리카아메리카 대륙북부 아" + - "메리카카리브 제도동아시아남아시아동남아시아남유럽오스트랄라시아멜라네시아미크로네시아 지역폴리네시아아시아중앙 아시아서아시아유럽동유럽북" + - "유럽서유럽라틴 아메리카" - -var koRegionIdx = []uint16{ // 292 elements + "크도미니카도미니카 공화국알제리세우타 및 멜리야에콰도르에스토니아이집트서사하라에리트리아스페인에티오피아유럽 연합유로존핀란드피지포클랜" + + "드 제도미크로네시아페로 제도프랑스가봉영국그레나다조지아프랑스령 기아나건지가나지브롤터그린란드감비아기니과들루프적도 기니그리스사우스조" + + "지아 사우스샌드위치 제도과테말라괌기니비사우가이아나홍콩(중국 특별행정구)허드 맥도널드 제도온두라스크로아티아아이티헝가리카나리아 제" + + "도인도네시아아일랜드이스라엘맨 섬인도영국령 인도양 식민지이라크이란아이슬란드이탈리아저지자메이카요르단일본케냐키르기스스탄캄보디아키리바" + + "시코모로세인트키츠 네비스북한대한민국쿠웨이트케이맨 제도카자흐스탄라오스레바논세인트루시아리히텐슈타인스리랑카라이베리아레소토리투아니아룩" + + "셈부르크라트비아리비아모로코모나코몰도바몬테네그로생마르탱마다가스카르마셜 제도마케도니아말리미얀마몽골마카오(중국 특별행정구)북마리아나" + + "제도마르티니크모리타니몬트세라트몰타모리셔스몰디브말라위멕시코말레이시아모잠비크나미비아뉴칼레도니아니제르노퍽섬나이지리아니카라과네덜란드노" + + "르웨이네팔나우루니우에뉴질랜드오만파나마페루프랑스령 폴리네시아파푸아뉴기니필리핀파키스탄폴란드생피에르 미클롱핏케언 섬푸에르토리코팔레스" + + "타인 지구포르투갈팔라우파라과이카타르오세아니아 외곽리유니온루마니아세르비아러시아르완다사우디아라비아솔로몬 제도세이셸수단스웨덴싱가포르" + + "세인트헬레나슬로베니아스발바르제도-얀마웬섬슬로바키아시에라리온산마리노세네갈소말리아수리남남수단상투메 프린시페엘살바도르신트마르턴시리아" + + "스와질란드트리스탄다쿠나터크스 케이커스 제도차드프랑스 남부 지방토고태국타지키스탄토켈라우동티모르투르크메니스탄튀니지통가터키트리니다드" + + " 토바고투발루대만탄자니아우크라이나우간다미국령 해외 제도유엔미국우루과이우즈베키스탄바티칸 시국세인트빈센트그레나딘베네수엘라영국령 버진아" + + "일랜드미국령 버진아일랜드베트남바누아투왈리스-푸투나 제도사모아코소보예멘마요트남아프리카잠비아짐바브웨알려지지 않은 지역세계아프리카북" + + "아메리카남아메리카(남미)오세아니아서부 아프리카중앙 아메리카동부 아프리카북부 아프리카중부 아프리카남부 아프리카아메리카 대륙북부 " + + "아메리카카리브 제도동아시아남아시아동남아시아남유럽오스트랄라시아멜라네시아미크로네시아 지역폴리네시아아시아중앙 아시아서아시아유럽동유럽" + + "북유럽서유럽라틴 아메리카" + +var koRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x000d, 0x0016, 0x0028, 0x003a, 0x004d, 0x0056, 0x0062, 0x0071, 0x007a, 0x0087, 0x0096, 0x00ac, 0x00bb, 0x00d0, 0x00d9, @@ -46383,77 +49143,77 @@ var koRegionIdx = []uint16{ // 292 elements 0x02f3, 0x02ff, 0x0305, 0x030b, 0x0321, 0x032a, 0x0333, 0x033f, // Entry 40 - 7F 0x0355, 0x035e, 0x0375, 0x0381, 0x0390, 0x0399, 0x03a5, 0x03b4, - 0x03bd, 0x03cc, 0x03d9, 0x03d9, 0x03e2, 0x03e8, 0x03fb, 0x040d, - 0x041a, 0x0423, 0x0429, 0x042f, 0x043b, 0x0444, 0x045a, 0x0460, - 0x0466, 0x0472, 0x047e, 0x0487, 0x048d, 0x0499, 0x04a6, 0x04af, - 0x04de, 0x04ea, 0x04ed, 0x04fc, 0x0508, 0x0526, 0x0540, 0x054c, - 0x055b, 0x0564, 0x056d, 0x0580, 0x058f, 0x059b, 0x05a7, 0x05ae, - 0x05b4, 0x05d1, 0x05da, 0x05e0, 0x05ef, 0x05fb, 0x0601, 0x060d, - 0x0616, 0x061c, 0x0622, 0x0634, 0x0640, 0x064c, 0x0655, 0x066e, + 0x03bd, 0x03cc, 0x03d9, 0x03e2, 0x03eb, 0x03f1, 0x0404, 0x0416, + 0x0423, 0x042c, 0x0432, 0x0438, 0x0444, 0x044d, 0x0463, 0x0469, + 0x046f, 0x047b, 0x0487, 0x0490, 0x0496, 0x04a2, 0x04af, 0x04b8, + 0x04e7, 0x04f3, 0x04f6, 0x0505, 0x0511, 0x052f, 0x0549, 0x0555, + 0x0564, 0x056d, 0x0576, 0x0589, 0x0598, 0x05a4, 0x05b0, 0x05b7, + 0x05bd, 0x05da, 0x05e3, 0x05e9, 0x05f8, 0x0604, 0x060a, 0x0616, + 0x061f, 0x0625, 0x062b, 0x063d, 0x0649, 0x0655, 0x065e, 0x0677, // Entry 80 - BF - 0x0674, 0x0680, 0x068c, 0x069c, 0x06ab, 0x06b4, 0x06bd, 0x06cf, - 0x06e1, 0x06ed, 0x06fc, 0x0705, 0x0714, 0x0723, 0x072f, 0x0738, - 0x0741, 0x074a, 0x0753, 0x0762, 0x076e, 0x0780, 0x078d, 0x079c, - 0x07a2, 0x07ab, 0x07b1, 0x07d2, 0x07e7, 0x07f6, 0x0802, 0x0811, - 0x0817, 0x0823, 0x082c, 0x0835, 0x083e, 0x084d, 0x0859, 0x0865, - 0x0877, 0x0880, 0x0889, 0x0898, 0x08a4, 0x08b0, 0x08bc, 0x08c2, - 0x08cb, 0x08d4, 0x08e0, 0x08e6, 0x08ef, 0x08f5, 0x0911, 0x0923, - 0x092c, 0x0938, 0x0941, 0x0957, 0x0964, 0x0976, 0x098c, 0x0998, + 0x067d, 0x0689, 0x0695, 0x06a5, 0x06b4, 0x06bd, 0x06c6, 0x06d8, + 0x06ea, 0x06f6, 0x0705, 0x070e, 0x071d, 0x072c, 0x0738, 0x0741, + 0x074a, 0x0753, 0x075c, 0x076b, 0x0777, 0x0789, 0x0796, 0x07a5, + 0x07ab, 0x07b4, 0x07ba, 0x07db, 0x07f0, 0x07ff, 0x080b, 0x081a, + 0x0820, 0x082c, 0x0835, 0x083e, 0x0847, 0x0856, 0x0862, 0x086e, + 0x0880, 0x0889, 0x0892, 0x08a1, 0x08ad, 0x08b9, 0x08c5, 0x08cb, + 0x08d4, 0x08dd, 0x08e9, 0x08ef, 0x08f8, 0x08fe, 0x091a, 0x092c, + 0x0935, 0x0941, 0x094a, 0x0960, 0x096d, 0x097f, 0x0995, 0x09a1, // Entry C0 - FF - 0x09a1, 0x09ad, 0x09b6, 0x09cc, 0x09d8, 0x09e4, 0x09f0, 0x09f9, - 0x0a02, 0x0a17, 0x0a27, 0x0a30, 0x0a36, 0x0a3f, 0x0a4b, 0x0a5d, - 0x0a6c, 0x0a8b, 0x0a9a, 0x0aa9, 0x0ab5, 0x0abe, 0x0aca, 0x0ad3, - 0x0adc, 0x0af2, 0x0b01, 0x0b10, 0x0b19, 0x0b28, 0x0b3d, 0x0b5a, - 0x0b60, 0x0b77, 0x0b7d, 0x0b83, 0x0b92, 0x0b9e, 0x0baa, 0x0bbf, - 0x0bc8, 0x0bce, 0x0bd4, 0x0bed, 0x0bf6, 0x0bfc, 0x0c08, 0x0c17, - 0x0c20, 0x0c37, 0x0c3d, 0x0c43, 0x0c4f, 0x0c61, 0x0c71, 0x0c8f, - 0x0c9e, 0x0cba, 0x0cd6, 0x0cdf, 0x0ceb, 0x0d05, 0x0d0e, 0x0d17, + 0x09aa, 0x09b6, 0x09bf, 0x09d5, 0x09e1, 0x09ed, 0x09f9, 0x0a02, + 0x0a0b, 0x0a20, 0x0a30, 0x0a39, 0x0a3f, 0x0a48, 0x0a54, 0x0a66, + 0x0a75, 0x0a94, 0x0aa3, 0x0ab2, 0x0abe, 0x0ac7, 0x0ad3, 0x0adc, + 0x0ae5, 0x0afb, 0x0b0a, 0x0b19, 0x0b22, 0x0b31, 0x0b46, 0x0b63, + 0x0b69, 0x0b80, 0x0b86, 0x0b8c, 0x0b9b, 0x0ba7, 0x0bb3, 0x0bc8, + 0x0bd1, 0x0bd7, 0x0bdd, 0x0bf6, 0x0bff, 0x0c05, 0x0c11, 0x0c20, + 0x0c29, 0x0c40, 0x0c46, 0x0c4c, 0x0c58, 0x0c6a, 0x0c7a, 0x0c98, + 0x0ca7, 0x0cc3, 0x0cdf, 0x0ce8, 0x0cf4, 0x0d0e, 0x0d17, 0x0d20, // Entry 100 - 13F - 0x0d1d, 0x0d26, 0x0d35, 0x0d3e, 0x0d4a, 0x0d64, 0x0d6a, 0x0d76, - 0x0d85, 0x0d9c, 0x0dab, 0x0dbe, 0x0dd1, 0x0de4, 0x0df7, 0x0e0a, - 0x0e1d, 0x0e30, 0x0e43, 0x0e53, 0x0e5f, 0x0e6b, 0x0e7a, 0x0e83, - 0x0e98, 0x0ea7, 0x0ec0, 0x0ecf, 0x0ed8, 0x0ee8, 0x0ef4, 0x0efa, - 0x0f03, 0x0f0c, 0x0f15, 0x0f28, -} // Size: 608 bytes - -const kyRegionStr string = "" + // Size: 5830 bytes - "Ассеншин аралыАндорраБириккен Араб ЭмираттарыАфганистанАнтигуа жана Барб" + - "удаАнгуилаАлбанияАрменияАнголаАнтарктикаАргентинаАмерика СамоасыАвстрия" + - "АвстралияАрубаАланд аралдарыАзербайжанБосния жана ГерцеговинаБарбадосБа" + - "нгладешБельгияБуркина-ФасоБолгарияБахрейнБурундиБенинСент БартелемиБерм" + - "уд аралдарыБрунейБоливияКариб НидерланддарыБразилияБагам аралдарыБутанБ" + - "уве аралдарыБотсванаБеларусьБелизКанадаКокос (Килиӊ) аралдарыКонго-Кинш" + - "асаБорбордук Африка РеспубликасыКонго-БраззавилШвейцарияКот-д’ИвуарКук " + - "аралдарыЧилиКамерунКытайКолумбияКлиппертон аралыКоста-РикаКубаКапе Верд" + - "еКюрасаоКрисмас аралыКипрЧех РеспубликасыГерманияДиего ГарсияДжибутиДан" + - "ияДоминикаДоминика РеспубликасыАлжирСеута жана МелиллаЭквадорЭстонияЕги" + - "петБатыш СахараЭритреяИспанияЭфиопияЕвропа БиримдигиФинляндияФиджиФолкл" + - "энд аралдарыМикронезияФарер аралдарыФранцияГабонУлуу БританияГренадаГру" + - "зияГвиана (Франция)ГернсиГанаГибралтарГренландияГамбияГвинеяГваделупаЭк" + - "ваториалдык ГвинеяГрецияТүштүк Жоржия жана Түштүк Сэндвич аралдарыГвате" + - "малаГуамГвинея-БисауГайанаГонконг Кытай АААХерд жана Макдоналд аралдары" + + 0x0d26, 0x0d2f, 0x0d3e, 0x0d47, 0x0d53, 0x0d6d, 0x0d73, 0x0d7f, + 0x0d8e, 0x0da5, 0x0db4, 0x0dc7, 0x0dda, 0x0ded, 0x0e00, 0x0e13, + 0x0e26, 0x0e39, 0x0e4c, 0x0e5c, 0x0e68, 0x0e74, 0x0e83, 0x0e8c, + 0x0ea1, 0x0eb0, 0x0ec9, 0x0ed8, 0x0ee1, 0x0ef1, 0x0efd, 0x0f03, + 0x0f0c, 0x0f15, 0x0f1e, 0x0f1e, 0x0f31, +} // Size: 610 bytes + +const kyRegionStr string = "" + // Size: 5829 bytes + "Вознесение аралыАндорраБириккен Араб ЭмираттарыАфганистанАнтигуа жана Ба" + + "рбудаАнгильяАлбанияАрменияАнголаАнтарктидаАргентинаАмерикалык СамоаАвст" + + "рияАвстралияАрубаАланд аралдарыАзербайжанБосния жана ГерцеговинаБарбадо" + + "сБангладешБельгияБуркина-ФасоБолгарияБахрейнБурундиБенинСент БартелемиБ" + + "ермуд аралдарыБрунейБоливияКариб НидерланддарыБразилияБагама аралдарыБу" + + "танБуве аралыБотсванаБеларусьБелизКанадаКокос (Килинг) аралдарыКонго-Ки" + + "ншасаБорбордук Африка РеспубликасыКонго-БраззавилШвейцарияКот-д’ИвуарКу" + + "к аралдарыЧилиКамерунКытайКолумбияКлиппертон аралыКоста-РикаКубаКапе Ве" + + "рдеКюрасаоРождество аралыКипрЧехияГерманияДиего ГарсияДжибутиДанияДомин" + + "икаДоминика РеспубликасыАлжирСеута жана МелиллаЭквадорЭстонияЕгипетБаты" + + "ш СахараЭритреяИспанияЭфиопияЕвропа БиримдигиЕврозонаФинляндияФиджиФолк" + + "ленд аралдарыМикронезияФарер аралдарыФранцияГабонУлуу БританияГренадаГр" + + "узияФранцуздук ГвианаГернсиГанаГибралтарГренландияГамбияГвинеяГваделупа" + + "Экватордук ГвинеяГрецияТүштүк Жоржия жана Түштүк Сэндвич аралдарыГватем" + + "алаГуамГвинея-БисауГайанаГонконг Кытай АААХерд жана Макдональд аралдары" + "ГондурасХорватияГаитиВенгрияКанар аралдарыИндонезияИрландияИзраильМэн а" + - "ралыИндияБританиянын Индия океанындагы аймагыИракИранИсландияИталияЖерс" + + "ралыИндияИнди океанындагы Британ территориясыИракИранИсландияИталияЖерс" + "иЯмайкаИорданияЯпонияКенияКыргызстанКамбоджаКирибатиКоморосСент-Китс жа" + - "на НевисТүндүк КореяТүштүк КореяКувейтКайман АралдарыКазакстанЛаосЛиван" + + "на НевисТүндүк КореяТүштүк КореяКувейтКайман аралдарыКазакстанЛаосЛиван" + "Сент-ЛюсияЛихтенштейнШри-ЛанкаЛиберияЛесотоЛитваЛюксембургЛатвияЛивияМа" + "роккоМонакоМолдоваЧерногорияСент-МартинМадагаскарМаршалл аралдарыМакедо" + "нияМалиМьянма (Бирма)МонголияМакау Кытай АААТүндүк Мариана аралдарыМарт" + - "иникаМавританияМонсерратМальтаМаврикийМалдив аралдарыМалавиМексикаМалай" + - "зияМозамбикНамибияЖаӊы КаледонияНигерНорфолк аралыНигерияНикарагуаНидер" + - "ланддарНорвегияНепалНауруНиуэЖаӊы ЗеландияОманПанамаПеруФранцуз Полинез" + - "иясыПапуа Жаңы-ГвинеяФиллипинПакистанПольшаСен-Пьер жана МикелонПиткэрн" + - " аралдарыПуэрто-РикоПалестина аймактарыПортугалияПалауПарагвайКатарАлыск" + - "ы ОкеанияРеюнионРумынияСербияРоссияРуандаСауд АрабиясыСоломон аралдарыС" + - "ейшелдерСуданШвецияСингапурЫйык ЕленаСловенияСвалбард жана Жан МайенСло" + - "вакияСьерра-ЛеонеСан МариноСенегалСомалиСуринамеТүштүк СуданСан-Томе жа" + - "на ПринсипиЭл СалвадорСинт МаартенСирияСвазилендТристан да КуньяТүркс ж" + - "ана Кайкос аралдарыЧадФранциянын Түштүктөгү аймактарыТогоТаиландТажикст" + - "анТокелауТимор-ЛестеТүркмөнстанТунисТонгаТүркияТринидад жана ТобагоТува" + - "луТайваньТанзанияУкраинаУгандаАКШнын сырткы аралдарыБУАмерика Кошмо Шта" + - "ттарыУругвайӨзбекстанВатиканСент-Винсент жана ГренадиналарВенесуэлаВирг" + + "иникаМавританияМонтсерратМальтаМаврикийМальдивМалавиМексикаМалайзияМоза" + + "мбикНамибияЖаӊы КаледонияНигерНорфолк аралыНигерияНикарагуаНидерландНор" + + "вегияНепалНауруНиуэЖаӊы ЗеландияОманПанамаПеруПолинезия (франциялык)Пап" + + "уа-Жаңы ГвинеяФиллипинПакистанПольшаСен-Пьер жана МикелонПиткэрн аралда" + + "рыПуэрто-РикоПалестина аймактарыПортугалияПалауПарагвайКатарАлыскы Океа" + + "нияРеюньонРумынияСербияРоссияРуандаСауд АрабиясыСоломон аралдарыСейшел " + + "аралдарыСуданШвецияСингапурЫйык ЕленаСловенияШпицберген жана Ян-МайенСл" + + "овакияСьерра-ЛеонеСан МариноСенегалСомалиСуринамТүштүк СуданСан-Томе жа" + + "на ПринсипиЭль-СальвадорСинт-МартенСирияСвазилендТристан-да-КуньяТүркс " + + "жана Кайкос аралдарыЧадФранциянын Түштүктөгү аймактарыТогоТайландТажикс" + + "танТокелауТимор-ЛестеТүркмөнстанТунисТонгаТүркияТринидад жана ТобагоТув" + + "алуТайваньТанзанияУкраинаУгандаАКШнын сырткы аралдарыБУАмерика Кошмо Шт" + + "аттарыУругвайӨзбекстанВатиканСент-Винсент жана ГренадиндерВенесуэлаВирг" + "ин аралдары (Британия)Виргин аралдары (АКШ)ВьетнамВануатуУоллис жана Фу" + - "тунаСамоаКосовоЙеменМайоттаТүштүк Африка РеспубликасыЗамбияЗимбабвеБелг" + + "тунаСамоаКосовоЙеменМайоттаТүштүк-Африка РеспубликасыЗамбияЗимбабвеБелг" + "исиз чөлкөмДүйнөАфрикаТүндүк АмерикаТүштүк АмерикаОкеанияБатыш АфрикаБо" + "рбордук АмерикаЧыгыш АфрикаТүндүк АфрикаБорбордук АфрикаТүштүк АфрикаАм" + "ерикаТүндүк Америка (чөлкөм)Кариб аралдарыЧыгыш АзияТүштүк АзияТүштүк-Ч" + @@ -46461,139 +49221,139 @@ const kyRegionStr string = "" + // Size: 5830 bytes "ияБорбор АзияБатыш АзияЕвропаЧыгыш ЕвропаТүндүк ЕвропаБатыш ЕвропаЛатын" + " Америкасы" -var kyRegionIdx = []uint16{ // 292 elements +var kyRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F - 0x0000, 0x001b, 0x0029, 0x0057, 0x006b, 0x0091, 0x009f, 0x00ad, - 0x00bb, 0x00c7, 0x00db, 0x00ed, 0x010a, 0x0118, 0x012a, 0x0134, - 0x014f, 0x0163, 0x018f, 0x019f, 0x01b1, 0x01bf, 0x01d6, 0x01e6, - 0x01f4, 0x0202, 0x020c, 0x0227, 0x0244, 0x0250, 0x025e, 0x0283, - 0x0293, 0x02ae, 0x02b8, 0x02d1, 0x02e1, 0x02f1, 0x02fb, 0x0307, - 0x032f, 0x0348, 0x0380, 0x039d, 0x03af, 0x03c5, 0x03dc, 0x03e4, - 0x03f2, 0x03fc, 0x040c, 0x042b, 0x043e, 0x0446, 0x0459, 0x0467, - 0x0480, 0x0488, 0x04a7, 0x04b7, 0x04ce, 0x04dc, 0x04e6, 0x04f6, + 0x0000, 0x001f, 0x002d, 0x005b, 0x006f, 0x0095, 0x00a3, 0x00b1, + 0x00bf, 0x00cb, 0x00df, 0x00f1, 0x0110, 0x011e, 0x0130, 0x013a, + 0x0155, 0x0169, 0x0195, 0x01a5, 0x01b7, 0x01c5, 0x01dc, 0x01ec, + 0x01fa, 0x0208, 0x0212, 0x022d, 0x024a, 0x0256, 0x0264, 0x0289, + 0x0299, 0x02b6, 0x02c0, 0x02d3, 0x02e3, 0x02f3, 0x02fd, 0x0309, + 0x0333, 0x034c, 0x0384, 0x03a1, 0x03b3, 0x03c9, 0x03e0, 0x03e8, + 0x03f6, 0x0400, 0x0410, 0x042f, 0x0442, 0x044a, 0x045d, 0x046b, + 0x0488, 0x0490, 0x049a, 0x04aa, 0x04c1, 0x04cf, 0x04d9, 0x04e9, // Entry 40 - 7F - 0x051f, 0x0529, 0x054b, 0x0559, 0x0567, 0x0573, 0x058a, 0x0598, - 0x05a6, 0x05b4, 0x05d3, 0x05d3, 0x05e5, 0x05ef, 0x0610, 0x0624, - 0x063f, 0x064d, 0x0657, 0x0670, 0x067e, 0x068a, 0x06a7, 0x06b3, - 0x06bb, 0x06cd, 0x06e1, 0x06ed, 0x06f9, 0x070b, 0x0732, 0x073e, - 0x078d, 0x079f, 0x07a7, 0x07be, 0x07ca, 0x07ea, 0x081f, 0x082f, - 0x083f, 0x0849, 0x0857, 0x0872, 0x0884, 0x0894, 0x08a2, 0x08b3, - 0x08bd, 0x0902, 0x090a, 0x0912, 0x0922, 0x092e, 0x0938, 0x0944, - 0x0954, 0x0960, 0x096a, 0x097e, 0x098e, 0x099e, 0x09ac, 0x09d1, + 0x0512, 0x051c, 0x053e, 0x054c, 0x055a, 0x0566, 0x057d, 0x058b, + 0x0599, 0x05a7, 0x05c6, 0x05d6, 0x05e8, 0x05f2, 0x0613, 0x0627, + 0x0642, 0x0650, 0x065a, 0x0673, 0x0681, 0x068d, 0x06ae, 0x06ba, + 0x06c2, 0x06d4, 0x06e8, 0x06f4, 0x0700, 0x0712, 0x0733, 0x073f, + 0x078e, 0x07a0, 0x07a8, 0x07bf, 0x07cb, 0x07eb, 0x0822, 0x0832, + 0x0842, 0x084c, 0x085a, 0x0875, 0x0887, 0x0897, 0x08a5, 0x08b6, + 0x08c0, 0x0905, 0x090d, 0x0915, 0x0925, 0x0931, 0x093b, 0x0947, + 0x0957, 0x0963, 0x096d, 0x0981, 0x0991, 0x09a1, 0x09af, 0x09d4, // Entry 80 - BF - 0x09e8, 0x09ff, 0x0a0b, 0x0a28, 0x0a3a, 0x0a42, 0x0a4c, 0x0a5f, - 0x0a75, 0x0a86, 0x0a94, 0x0aa0, 0x0aaa, 0x0abe, 0x0aca, 0x0ad4, - 0x0ae2, 0x0aee, 0x0afc, 0x0b10, 0x0b25, 0x0b39, 0x0b58, 0x0b6a, - 0x0b72, 0x0b8b, 0x0b9b, 0x0bb7, 0x0be3, 0x0bf5, 0x0c09, 0x0c1b, - 0x0c27, 0x0c37, 0x0c54, 0x0c60, 0x0c6e, 0x0c7e, 0x0c8e, 0x0c9c, - 0x0cb7, 0x0cc1, 0x0cda, 0x0ce8, 0x0cfa, 0x0d12, 0x0d22, 0x0d2c, - 0x0d36, 0x0d3e, 0x0d57, 0x0d5f, 0x0d6b, 0x0d73, 0x0d98, 0x0db8, - 0x0dc8, 0x0dd8, 0x0de4, 0x0e0b, 0x0e2a, 0x0e3f, 0x0e64, 0x0e78, + 0x09eb, 0x0a02, 0x0a0e, 0x0a2b, 0x0a3d, 0x0a45, 0x0a4f, 0x0a62, + 0x0a78, 0x0a89, 0x0a97, 0x0aa3, 0x0aad, 0x0ac1, 0x0acd, 0x0ad7, + 0x0ae5, 0x0af1, 0x0aff, 0x0b13, 0x0b28, 0x0b3c, 0x0b5b, 0x0b6d, + 0x0b75, 0x0b8e, 0x0b9e, 0x0bba, 0x0be6, 0x0bf8, 0x0c0c, 0x0c20, + 0x0c2c, 0x0c3c, 0x0c4a, 0x0c56, 0x0c64, 0x0c74, 0x0c84, 0x0c92, + 0x0cad, 0x0cb7, 0x0cd0, 0x0cde, 0x0cf0, 0x0d02, 0x0d12, 0x0d1c, + 0x0d26, 0x0d2e, 0x0d47, 0x0d4f, 0x0d5b, 0x0d63, 0x0d8c, 0x0dac, + 0x0dbc, 0x0dcc, 0x0dd8, 0x0dff, 0x0e1e, 0x0e33, 0x0e58, 0x0e6c, // Entry C0 - FF - 0x0e82, 0x0e92, 0x0e9c, 0x0eb7, 0x0ec5, 0x0ed3, 0x0edf, 0x0eeb, - 0x0ef7, 0x0f10, 0x0f2f, 0x0f41, 0x0f4b, 0x0f57, 0x0f67, 0x0f7a, - 0x0f8a, 0x0fb5, 0x0fc5, 0x0fdc, 0x0fef, 0x0ffd, 0x1009, 0x1019, - 0x1030, 0x1059, 0x106e, 0x1085, 0x108f, 0x10a1, 0x10bf, 0x10f0, - 0x10f6, 0x1132, 0x113a, 0x1148, 0x115a, 0x1168, 0x117d, 0x1193, - 0x119d, 0x11a7, 0x11b3, 0x11d9, 0x11e5, 0x11f3, 0x1203, 0x1211, - 0x121d, 0x1247, 0x124b, 0x1275, 0x1283, 0x1295, 0x12a3, 0x12dc, - 0x12ee, 0x131e, 0x1344, 0x1352, 0x1360, 0x1382, 0x138c, 0x1398, + 0x0e76, 0x0e86, 0x0e90, 0x0eab, 0x0eb9, 0x0ec7, 0x0ed3, 0x0edf, + 0x0eeb, 0x0f04, 0x0f23, 0x0f40, 0x0f4a, 0x0f56, 0x0f66, 0x0f79, + 0x0f89, 0x0fb6, 0x0fc6, 0x0fdd, 0x0ff0, 0x0ffe, 0x100a, 0x1018, + 0x102f, 0x1058, 0x1071, 0x1086, 0x1090, 0x10a2, 0x10c0, 0x10f1, + 0x10f7, 0x1133, 0x113b, 0x1149, 0x115b, 0x1169, 0x117e, 0x1194, + 0x119e, 0x11a8, 0x11b4, 0x11da, 0x11e6, 0x11f4, 0x1204, 0x1212, + 0x121e, 0x1248, 0x124c, 0x1276, 0x1284, 0x1296, 0x12a4, 0x12db, + 0x12ed, 0x131d, 0x1343, 0x1351, 0x135f, 0x1381, 0x138b, 0x1397, // Entry 100 - 13F - 0x13a2, 0x13b0, 0x13e2, 0x13ee, 0x13fe, 0x141b, 0x1425, 0x1431, - 0x144c, 0x1467, 0x1475, 0x148c, 0x14ad, 0x14c4, 0x14dd, 0x14fc, - 0x1515, 0x1523, 0x154d, 0x1568, 0x157b, 0x1590, 0x15b0, 0x15c9, - 0x15df, 0x15f1, 0x1614, 0x1626, 0x162e, 0x1643, 0x1656, 0x1662, - 0x1679, 0x1692, 0x16a9, 0x16c6, -} // Size: 608 bytes - -const loRegionStr string = "" + // Size: 8118 bytes + 0x13a1, 0x13af, 0x13e1, 0x13ed, 0x13fd, 0x141a, 0x1424, 0x1430, + 0x144b, 0x1466, 0x1474, 0x148b, 0x14ac, 0x14c3, 0x14dc, 0x14fb, + 0x1514, 0x1522, 0x154c, 0x1567, 0x157a, 0x158f, 0x15af, 0x15c8, + 0x15de, 0x15f0, 0x1613, 0x1625, 0x162d, 0x1642, 0x1655, 0x1661, + 0x1678, 0x1691, 0x16a8, 0x16a8, 0x16c5, +} // Size: 610 bytes + +const loRegionStr string = "" + // Size: 8218 bytes "ເກາະອາເຊນຊັນອັນດໍຣາສະຫະລັດອາຣັບເອມິເຣດອາຟການິດສະຖານແອນທິກົວ ແລະ ບາບູດາແອ" + "ນກຸຍລາແອວເບເນຍອາເມເນຍແອງໂກລາແອນຕາດຕິກາອາເຈນທິນາອາເມຣິກາ ຊາມົວອອສເທຣຍອອ" + "ສເຕຣເລຍອາຣູບາຫມູ່ເກາະໂອລັນອາເຊີໄບຈານບອດສະເນຍ ແລະ ແຮສໂກວີນາບາບາໂດສບັງກະ" + "ລາເທດເບວຢຽມເບີກິນາ ຟາໂຊບັງກາເຣຍບາເຣນບູຣຸນດິເບນິນເຊນ ບາເທເລມີເບີມິວດາບຣ" + - "ູໄນໂບລິເວຍຄາຣິບບຽນ ເນເທີແລນບະເລຊີນບາຮາມາສພູຖານເກາະບູເວດບອດສະວານາເບວບາຣ" + - "ຸສເບລີຊແຄນາດາຫມູ່ເກາະໂກໂກສຄອງໂກ - ຄິນຊາຊາສາທາລະນະລັດອາຟຣິກາກາງຄອງໂກ - " + - "ບຣາຊາວິວສະວິດເຊີແລນໂຄຕີ ວົວໝູ່ເກາະຄຸກຈີເລຄາເມຣູນຈີນໂຄລົມເບຍເກາະຄລິບເປີ" + - "ຕັນໂຄສຕາ ຣິກາຄິວບາເຄບ ເວີດຄູຣາຊາວເກາະຄຣິສມາດໄຊປຣັສສາທາລະນະລັດເຊັກເຢຍລະ" + - "ມັນດິເອໂກ ກາເຊຍຈິບູຕິເດນມາກໂດມີນິຄາສາທາລະນະລັດ ໂດມິນິກັນອັລຈິເຣຍເຊວຕາ " + - "ແລະເມລິນລາເອກວາດໍເອສໂຕເນຍອີຢິບຊາຮາຣາຕາເວັນຕົກເອຣິເທຣຍສະເປນອີທິໂອເປຍສະຫ" + - "ະພາບຢູໂຣບຟິນແລນຟິຈິຫມູ່ເກາະຟອກແລນໄມໂຄຣນີເຊຍຫມູ່ເກາະແຟໂຣຝຣັ່ງກາບອນສະຫະລ" + - "າດຊະອະນາຈັກເກຣເນດາຈໍເຈຍເຟຣນຊ໌ ກຸຍອານາເກີນຊີການາຈິບບຣອນທາກຣີນແລນສາທາລະນ" + - "ະລັດແກມເບຍກິນີກົວດາລູບເອຄົວໂທຣຽວ ກີນີກຣີຊໝູ່ເກາະຈໍເຈຍ & ເຊົາ ແຊນວິດກົວ" + - "ເທມາລາກວາມກິນີ-ບິສເຊົາກາຍຢານາຮອງກົງ ເຂດປົກຄອງພິເສດ ຈີນໝູ່ເກາະເຮີດ & ແມ" + - "ັກໂດນອລຮອນດູຣັສໂຄຣເອເທຍໄຮຕິຮັງກາຣີໝູ່ເກາະຄານາຣີອິນໂດເນເຊຍໄອຣ໌ແລນອິສຣາເ" + - "ອວເອວ ອອບ ແມນອິນເດຍເຂດແດນອັງກິດໃນມະຫາສະມຸດອິນເດຍອີຣັກອີຣານໄອສແລນອິຕາລີ" + - "ເຈີຊີຈາໄມຄາຈໍແດນຍີ່ປຸ່ນເຄນຢາຄີກິສຖານກຳປູເຈຍຄິຣິບາທິໂຄໂມໂຣສເຊນ ຄິດ ແລະ " + - "ເນວິສເກົາຫລີເໜືອເກົາຫລີໃຕ້ກູເວດໝູ່ເກາະ ເຄແມນຄາຊັກສະຖານລາວເລບານອນເຊນ ລູ" + - "ເຊຍລິດເທນສະຕາຍສີລັງກາລິເບີເຣຍເລໂຊໂທລິທົວເນຍລຸກຊຳບົວລັດເວຍລິເບຍໂມຣັອກໂຄ" + - "ໂມນາໂຄໂມນໂດວາມອນເຕເນໂກຣເຊນ ມາທິນມາດາກາສກາຫມູ່ເກາະມາແຊວແມຊິໂດເນຍມາລີມຽນ" + - "ມາ (ເບີມາ)ມອງໂກເລຍມາເກົ້າ ເຂດປົກຄອງພິເສດ ຈີນຫມູ່ເກາະມາແຊວຕອນເຫນືອມາຕິນ" + - "ີກມົວຣິເທເນຍມອນເຊີຣາດມອນທາມົວຣິຊຽສມັນດິຟມາລາວີເມັກຊິໂກມາເລເຊຍໂມແຊມບິກນ" + - "າມີເບຍນິວ ຄາເລໂດເນຍນິເຈີເກາະນໍໂຟກໄນຈີເຣຍນິກຄາຣາກົວເນເທີແລນນໍເວເນປານນາອ" + - "ູຣູນີອູເອນິວຊີແລນໂອມານພານາມາເປຣູເຟຣນຊ໌ ໂພລິນີເຊຍປາປົວນິວກີນີຟິລິບປິນປາ" + - "ກິດສະຖານໂປແລນເຊນ ປີແອ ມິເກວລອນໝູ່ເກາະພິດແຄນເພືອໂຕ ຣິໂກດິນແດນ ປາເລສຕິນຽ" + - "ນພອລທູໂກປາລາວພາຣາກວຍກາຕາເຂດຫ່າງໄກໂອຊີເນຍເຣອູນິຍົງໂຣແມເນຍເຊີເບຍຣັດເຊຍຣວ" + - "ັນດາຊາອຸດິ ອາຣາເບຍຫມູ່ເກາະໂຊໂລມອນເຊເຊວເລສຊູດານສະວີເດັນສິງກະໂປເຊນ ເຮເລນ" + - "າສະໂລເວເນຍສະວາບາ ແລະ ແຢນ ມາເຢນສະໂລວາເກຍເຊຍຣາ ລີໂອນແຊນ ມາຣິໂນເຊນີໂກລໂຊມ" + - "າລີຊູຣິນາມຊູດານໃຕ້ເຊົາທູເມ ແລະ ພຣິນຊິບເອວ ຊໍວາດໍຊິນ ມາເທັນຊີເຣຍສະວາຊິແ" + - "ລນທຣິສຕັນ ດາ ກັນຮາໝູ່ເກາະ ເທີກ ແລະ ໄຄໂຄສຊາດເຂດແດນທາງໃຕ້ຂອຝຮັ່ງໂຕໂກໄທທາ" + - "ຈິກິດສະຖານໂຕເກເລົາທິມໍ-ເລສເຕເທີກເມນິສະຖານຕູນິເຊຍທອງກາເທີຄີທຣິນິແດດ ແລະ" + - " ໂທແບໂກຕູວາລູໄຕ້ຫວັນທານຊາເນຍຢູເຄຣນອູການດາໝູ່ເກາະຮອບນອກຂອງສະຫະລັດຯສະຫະປະຊ" + - "າຊາດສະຫະລັດອູຣຸກວຍອຸສເບກິສະຖານນະຄອນ ວາຕິກັນເຊນ ວິນເຊນ ແລະ ເກຣເນດິນເວເນ" + - "ຊູເອລາໝູ່ເກາະ ບຣິທິຊ ເວີຈິນໝູ່ເກາະ ຢູເອສ ເວີຈິນຫວຽດນາມວານົວຕູວາລລິສ ແລ" + - "ະ ຟູຕູນາຊາມົວໂຄໂຊໂວເຢເມນມາຢັອດອາຟຣິກາໃຕ້ແຊມເບຍຊິມບັບເວຂົງເຂດທີ່ບໍ່ຮູ້ຈ" + - "ັກໂລກອາຟຣິກາອາເມລິກາເໜືອອາເມລິກາໃຕ້ໂອຊີອານີອາຟຣິກາຕາເວັນຕົກອາເມລິກາກາງ" + - "ອາຟຣິກາຕາເວັນອອກອາຟຣິກາເໜືອອາຟຣິກາກາງອາເມຣິກາພາກເໜືອອາເມລີກາຄາຣິບບຽນອາ" + - "ຊີຕາເວັນອອກອາຊີໄຕ້ອາຊີຕາເວັນອອກສ່ຽງໄຕ້ຢູໂຣບໃຕ້ໂອດສະຕາລີເມລານີເຊຍເຂດໄມໂ" + - "ຄຣເນຊຽນໂພລີນີເຊຍອາຊີອາຊີກາງອາຊີຕາເວັນຕົກຢູໂຣບຢູໂຣບຕາເວັນອອກຢູໂຣບເໜືອຢູ" + - "ໂຣບຕາເວັນຕົກລາຕິນ ອາເມລິກາ" - -var loRegionIdx = []uint16{ // 292 elements + "ູໄນໂບລິເວຍຄາຣິບບຽນ ເນເທີແລນບຣາຊິວບາຮາມາສພູຖານເກາະບູເວດບອດສະວານາເບວບາຣຸ" + + "ສເບລີຊແຄນາດາຫມູ່ເກາະໂກໂກສຄອງໂກ - ຄິນຊາຊາສາທາລະນະລັດອາຟຣິກາກາງຄອງໂກ - ບ" + + "ຣາຊາວິວສະວິດເຊີແລນໂຄຕີ ວົວໝູ່ເກາະຄຸກຊິລີຄາເມຣູນຈີນໂຄລົມເບຍເກາະຄລິບເປີຕ" + + "ັນໂຄສຕາ ຣິກາຄິວບາເຄບ ເວີດຄູຣາຊາວເກາະຄຣິສມາດໄຊປຣັສເຊັກເຊຍເຢຍລະມັນດິເອໂກ" + + " ກາເຊຍຈິບູຕິເດນມາກໂດມີນິຄາສາທາລະນະລັດ ໂດມິນິກັນອັລຈິເຣຍເຊວຕາ ແລະເມລິນລາເ" + + "ອກວາດໍເອສໂຕເນຍອີຢິບຊາຮາຣາຕາເວັນຕົກເອຣິເທຣຍສະເປນອີທິໂອເປຍສະຫະພາບຢູໂຣບເຂ" + + "ດຢູໂຣບຟິນແລນຟິຈິຫມູ່ເກາະຟອກແລນໄມໂຄຣນີເຊຍຫມູ່ເກາະແຟໂຣຝຣັ່ງກາບອນສະຫະລາດຊ" + + "ະອະນາຈັກເກຣເນດາຈໍເຈຍເຟຣນຊ໌ ກຸຍອານາເກີນຊີການາຈິບບຣອນທາກຣີນແລນສາທາລະນະລັ" + + "ດແກມເບຍກິນີກົວດາລູບເອຄົວໂທຣຽວ ກີນີກຣີຊໝູ່ເກາະ ຈໍເຈຍຕອນໃຕ້ ແລະ ແຊນວິດຕອ" + + "ນໃຕ້ກົວເທມາລາກວາມກິນີ-ບິສເຊົາກາຍຢານາຮົງກົງ ເຂດປົກຄອງພິເສດ ຈີນໝູ່ເກາະເຮ" + + "ີດ & ແມັກໂດນອລຮອນດູຣັສໂຄຣເອເທຍໄຮຕິຮັງກາຣີໝູ່ເກາະຄານາຣີອິນໂດເນເຊຍໄອແລນອ" + + "ິສຣາເອວເອວ ອອບ ແມນອິນເດຍເຂດແດນອັງກິດໃນມະຫາສະມຸດອິນເດຍອີຣັກອີຣານໄອສແລນອ" + + "ິຕາລີເຈີຊີຈາໄມຄາຈໍແດນຍີ່ປຸ່ນເຄນຢາຄຽກກິດສະຖານກຳປູເຈຍຄິຣິບາທິໂຄໂມໂຣສເຊນ " + + "ຄິດ ແລະ ເນວິສເກົາຫລີເໜືອເກົາຫລີໃຕ້ກູເວດໝູ່ເກາະ ເຄແມນຄາຊັກສະຖານລາວເລບານ" + + "ອນເຊນ ລູເຊຍລິດເທນສະຕາຍສີລັງກາລິເບີເຣຍເລໂຊໂທລິທົວເນຍລຸກແຊມເບີກລັດເວຍລິເ" + + "ບຍໂມຣັອກໂຄໂມນາໂຄໂມນໂດວາມອນເຕເນໂກຣເຊນ ມາທິນມາດາກາສະກາຫມູ່ເກາະມາແຊວແມຊິໂ" + + "ດເນຍມາລີມຽນມາ (ເບີມາ)ມອງໂກເລຍມາກາວ ເຂດປົກຄອງພິເສດ ຈີນຫມູ່ເກາະມາແຊວຕອນເ" + + "ຫນືອມາຕິນີກມົວຣິເທເນຍມອນເຊີຣາດມອນທາມົວຣິຊຽສມັນດິຟມາລາວີເມັກຊິໂກມາເລເຊຍ" + + "ໂມແຊມບິກນາມີເບຍນິວ ຄາເລໂດເນຍນິເຈີເກາະນໍໂຟກໄນຈີເຣຍນິກຄາຣາກົວເນເທີແລນນໍເ" + + "ວເນປານນາອູຣູນີອູເອນິວຊີແລນໂອມານພານາມາເປຣູເຟຣນຊ໌ ໂພລິນີເຊຍປາປົວນິວກີນີຟ" + + "ິລິບປິນປາກິດສະຖານໂປແລນເຊນ ປີແອ ມິເກວລອນໝູ່ເກາະພິດແຄນເພືອໂຕ ຣິໂກດິນແດນ " + + "ປາເລສຕິນຽນພອລທູໂກປາລາວພາຣາກວຍກາຕາເຂດຫ່າງໄກໂອຊີເນຍເຣອູນິຍົງໂຣແມເນຍເຊີເບ" + + "ຍຣັດເຊຍຣວັນດາຊາອຸດິ ອາຣາເບຍຫມູ່ເກາະໂຊໂລມອນເຊເຊວເລສຊູດານສະວີເດັນສິງກະໂປ" + + "ເຊນ ເຮເລນາສະໂລເວເນຍສະວາບາ ແລະ ແຢນ ມາເຢນສະໂລວາເກຍເຊຍຣາ ລີໂອນແຊນ ມາຣິໂນເ" + + "ຊນີໂກລໂຊມາເລຍຊູຣິນາມຊູດານໃຕ້ເຊົາທູເມ ແລະ ພຣິນຊິບເອວ ຊໍວາດໍຊິນ ມາເທັນຊີ" + + "ເຣຍສະວາຊິແລນທຣິສຕັນ ດາ ກັນຮາໝູ່ເກາະ ເທີກ ແລະ ໄຄໂຄສຊາດເຂດແດນທາງໃຕ້ຂອຝຮັ" + + "່ງໂຕໂກໄທທາຈິກິດສະຖານໂຕເກເລົາທິມໍ-ເລສເຕເທີກເມນິສະຖານຕູນິເຊຍທອງກາເທີຄີທຣ" + + "ິນິແດດ ແລະ ໂທແບໂກຕູວາລູໄຕ້ຫວັນທານຊາເນຍຢູເຄຣນອູການດາໝູ່ເກາະຮອບນອກຂອງສະຫ" + + "ະລັດຯສະຫະປະຊາຊາດສະຫະລັດອູຣຸກວຍອຸສເບກິສະຖານນະຄອນ ວາຕິກັນເຊນ ວິນເຊນ ແລະ " + + "ເກຣເນດິນເວເນຊູເອລາໝູ່ເກາະ ເວີຈິນຂອງອັງກິດໝູ່ເກາະ ເວີຈິນ ຂອງສະຫະລັດຫວຽດ" + + "ນາມວານົວຕູວາລລິສ ແລະ ຟູຕູນາຊາມົວໂຄໂຊໂວເຢເມນມາຢັອດອາຟຣິກາໃຕ້ແຊມເບຍຊິມບັ" + + "ບເວຂົງເຂດທີ່ບໍ່ຮູ້ຈັກໂລກອາຟຣິກາອາເມລິກາເໜືອອາເມລິກາໃຕ້ໂອຊີອານີອາຟຣິກາຕ" + + "າເວັນຕົກອາເມລິກາກາງອາຟຣິກາຕາເວັນອອກອາຟຣິກາເໜືອອາຟຣິກາກາງອາຟຣິກາຕອນໃຕ້ອ" + + "າເມຣິກາພາກເໜືອອາເມລີກາຄາຣິບບຽນອາຊີຕາເວັນອອກອາຊີໄຕ້ອາຊີຕາເວັນອອກສ່ຽງໄຕ້" + + "ຢູໂຣບໃຕ້ໂອດສະຕາລີເມລານີເຊຍເຂດໄມໂຄຣເນຊຽນໂພລີນີເຊຍອາຊີອາຊີກາງອາຊີຕາເວັນຕ" + + "ົກຢູໂຣບຢູໂຣບຕາເວັນອອກຢູໂຣບເໜືອຢູໂຣບຕາເວັນຕົກລາຕິນ ອາເມລິກາ" + +var loRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0024, 0x0039, 0x0072, 0x0099, 0x00ce, 0x00e6, 0x00fe, 0x0113, 0x0128, 0x0146, 0x0161, 0x0189, 0x019e, 0x01b9, 0x01cb, 0x01f2, 0x0210, 0x024e, 0x0263, 0x0281, 0x0293, 0x02b5, 0x02cd, 0x02dc, 0x02f1, 0x0300, 0x0322, 0x033a, 0x0349, 0x035e, 0x038f, - 0x03a4, 0x03b9, 0x03c8, 0x03e3, 0x03fe, 0x0416, 0x0425, 0x0437, - 0x045e, 0x0485, 0x04c4, 0x04ee, 0x050f, 0x0525, 0x0543, 0x054f, - 0x0564, 0x056d, 0x0585, 0x05af, 0x05cb, 0x05da, 0x05f0, 0x0605, - 0x0626, 0x0638, 0x0665, 0x067d, 0x069f, 0x06b1, 0x06c3, 0x06db, + 0x03a1, 0x03b6, 0x03c5, 0x03e0, 0x03fb, 0x0413, 0x0422, 0x0434, + 0x045b, 0x0482, 0x04c1, 0x04eb, 0x050c, 0x0522, 0x0540, 0x054c, + 0x0561, 0x056a, 0x0582, 0x05ac, 0x05c8, 0x05d7, 0x05ed, 0x0602, + 0x0623, 0x0635, 0x064a, 0x0662, 0x0684, 0x0696, 0x06a8, 0x06c0, // Entry 40 - 7F - 0x0718, 0x0730, 0x075e, 0x0773, 0x078b, 0x079a, 0x07c7, 0x07df, - 0x07ee, 0x0809, 0x082d, 0x082d, 0x083f, 0x084b, 0x0875, 0x0893, - 0x08b7, 0x08c6, 0x08d5, 0x0905, 0x091a, 0x0929, 0x0951, 0x0963, - 0x096f, 0x098a, 0x099f, 0x09d2, 0x09de, 0x09f6, 0x0a21, 0x0a2d, - 0x0a73, 0x0a8e, 0x0a9a, 0x0abc, 0x0ad1, 0x0b18, 0x0b57, 0x0b6f, - 0x0b87, 0x0b93, 0x0ba8, 0x0bcf, 0x0bed, 0x0c02, 0x0c1a, 0x0c37, - 0x0c49, 0x0ca0, 0x0caf, 0x0cbe, 0x0cd0, 0x0ce2, 0x0cf1, 0x0d03, - 0x0d12, 0x0d27, 0x0d36, 0x0d4e, 0x0d63, 0x0d7b, 0x0d90, 0x0dbd, + 0x06fd, 0x0715, 0x0743, 0x0758, 0x0770, 0x077f, 0x07ac, 0x07c4, + 0x07d3, 0x07ee, 0x0812, 0x082a, 0x083c, 0x0848, 0x0872, 0x0890, + 0x08b4, 0x08c3, 0x08d2, 0x0902, 0x0917, 0x0926, 0x094e, 0x0960, + 0x096c, 0x0987, 0x099c, 0x09cf, 0x09db, 0x09f3, 0x0a1e, 0x0a2a, + 0x0a90, 0x0aab, 0x0ab7, 0x0ad9, 0x0aee, 0x0b35, 0x0b74, 0x0b8c, + 0x0ba4, 0x0bb0, 0x0bc5, 0x0bec, 0x0c0a, 0x0c19, 0x0c31, 0x0c4e, + 0x0c60, 0x0cb7, 0x0cc6, 0x0cd5, 0x0ce7, 0x0cf9, 0x0d08, 0x0d1a, + 0x0d29, 0x0d3e, 0x0d4d, 0x0d6e, 0x0d83, 0x0d9b, 0x0db0, 0x0ddd, // Entry 80 - BF - 0x0dde, 0x0dfc, 0x0e0b, 0x0e30, 0x0e4e, 0x0e57, 0x0e6c, 0x0e85, - 0x0ea6, 0x0ebb, 0x0ed3, 0x0ee5, 0x0efd, 0x0f15, 0x0f27, 0x0f36, - 0x0f4e, 0x0f60, 0x0f75, 0x0f93, 0x0fac, 0x0fc7, 0x0fee, 0x1009, - 0x1015, 0x1036, 0x104e, 0x1098, 0x10d7, 0x10ec, 0x110a, 0x1125, - 0x1134, 0x114c, 0x115e, 0x1170, 0x1188, 0x119d, 0x11b5, 0x11ca, - 0x11ef, 0x11fe, 0x1219, 0x122e, 0x124c, 0x1264, 0x1270, 0x127f, - 0x1291, 0x12a3, 0x12bb, 0x12ca, 0x12dc, 0x12e8, 0x1316, 0x133a, - 0x1352, 0x1370, 0x137f, 0x13ae, 0x13d5, 0x13f4, 0x1425, 0x143a, + 0x0dfe, 0x0e1c, 0x0e2b, 0x0e50, 0x0e6e, 0x0e77, 0x0e8c, 0x0ea5, + 0x0ec6, 0x0edb, 0x0ef3, 0x0f05, 0x0f1d, 0x0f3b, 0x0f4d, 0x0f5c, + 0x0f74, 0x0f86, 0x0f9b, 0x0fb9, 0x0fd2, 0x0ff0, 0x1017, 0x1032, + 0x103e, 0x105f, 0x1077, 0x10bb, 0x10fa, 0x110f, 0x112d, 0x1148, + 0x1157, 0x116f, 0x1181, 0x1193, 0x11ab, 0x11c0, 0x11d8, 0x11ed, + 0x1212, 0x1221, 0x123c, 0x1251, 0x126f, 0x1287, 0x1293, 0x12a2, + 0x12b4, 0x12c6, 0x12de, 0x12ed, 0x12ff, 0x130b, 0x1339, 0x135d, + 0x1375, 0x1393, 0x13a2, 0x13d1, 0x13f8, 0x1417, 0x1448, 0x145d, // Entry C0 - FF - 0x1449, 0x145e, 0x146a, 0x149a, 0x14b5, 0x14ca, 0x14dc, 0x14ee, - 0x1500, 0x1528, 0x1555, 0x156d, 0x157c, 0x1594, 0x15a9, 0x15c5, - 0x15e0, 0x1616, 0x1631, 0x1650, 0x166c, 0x1681, 0x1693, 0x16a8, - 0x16c0, 0x16f8, 0x1714, 0x1730, 0x173f, 0x175a, 0x1786, 0x17c2, - 0x17cb, 0x1804, 0x1810, 0x1816, 0x183a, 0x1852, 0x186e, 0x1895, - 0x18aa, 0x18b9, 0x18c8, 0x18fd, 0x190f, 0x1924, 0x193c, 0x194e, - 0x1963, 0x19ab, 0x19cc, 0x19e1, 0x19f6, 0x1a1a, 0x1a3f, 0x1a7e, - 0x1a9c, 0x1ad7, 0x1b0f, 0x1b24, 0x1b39, 0x1b68, 0x1b77, 0x1b89, + 0x146c, 0x1481, 0x148d, 0x14bd, 0x14d8, 0x14ed, 0x14ff, 0x1511, + 0x1523, 0x154b, 0x1578, 0x1590, 0x159f, 0x15b7, 0x15cc, 0x15e8, + 0x1603, 0x1639, 0x1654, 0x1673, 0x168f, 0x16a4, 0x16b9, 0x16ce, + 0x16e6, 0x171e, 0x173a, 0x1756, 0x1765, 0x1780, 0x17ac, 0x17e8, + 0x17f1, 0x182a, 0x1836, 0x183c, 0x1860, 0x1878, 0x1894, 0x18bb, + 0x18d0, 0x18df, 0x18ee, 0x1923, 0x1935, 0x194a, 0x1962, 0x1974, + 0x1989, 0x19d1, 0x19f2, 0x1a07, 0x1a1c, 0x1a40, 0x1a65, 0x1aa4, + 0x1ac2, 0x1b05, 0x1b4c, 0x1b61, 0x1b76, 0x1ba5, 0x1bb4, 0x1bc6, // Entry 100 - 13F - 0x1b98, 0x1baa, 0x1bc8, 0x1bda, 0x1bf2, 0x1c28, 0x1c31, 0x1c46, - 0x1c6a, 0x1c8b, 0x1ca3, 0x1cd3, 0x1cf4, 0x1d24, 0x1d45, 0x1d63, - 0x1d63, 0x1d7b, 0x1da8, 0x1dc0, 0x1de7, 0x1dfc, 0x1e38, 0x1e50, - 0x1e6b, 0x1e86, 0x1ead, 0x1ec8, 0x1ed4, 0x1ee9, 0x1f10, 0x1f1f, - 0x1f49, 0x1f64, 0x1f8e, 0x1fb6, -} // Size: 608 bytes - -const ltRegionStr string = "" + // Size: 3399 bytes + 0x1bd5, 0x1be7, 0x1c05, 0x1c17, 0x1c2f, 0x1c65, 0x1c6e, 0x1c83, + 0x1ca7, 0x1cc8, 0x1ce0, 0x1d10, 0x1d31, 0x1d61, 0x1d82, 0x1da0, + 0x1dc7, 0x1ddf, 0x1e0c, 0x1e24, 0x1e4b, 0x1e60, 0x1e9c, 0x1eb4, + 0x1ecf, 0x1eea, 0x1f11, 0x1f2c, 0x1f38, 0x1f4d, 0x1f74, 0x1f83, + 0x1fad, 0x1fc8, 0x1ff2, 0x1ff2, 0x201a, +} // Size: 610 bytes + +const ltRegionStr string = "" + // Size: 3408 bytes "Dangun Žengimo salaAndoraJungtiniai Arabų EmyrataiAfganistanasAntigva ir" + " BarbudaAngilijaAlbanijaArmėnijaAngolaAntarktidaArgentinaAmerikos SamoaA" + "ustrijaAustralijaArubaAlandų SalosAzerbaidžanasBosnija ir HercegovinaBar" + @@ -46605,43 +49365,43 @@ const ltRegionStr string = "" + // Size: 3399 bytes " RikaKubaŽaliasis KyšulysKiurasaoKalėdų SalaKiprasČekijaVokietijaDiego G" + "arsijaDžibutisDanijaDominikaDominikos RespublikaAlžyrasSeuta ir MelilaEk" + "vadorasEstijaEgiptasVakarų SacharaEritrėjaIspanijaEtiopijaEuropos Sąjung" + - "aSuomijaFidžisFolklando SalosMikronezijaFarerų SalosPrancūzijaGabonasJun" + - "gtinė KaralystėGrenadaGruzijaPrancūzijos GvianaGernsisGanaGibraltarasGre" + - "nlandijaGambijaGvinėjaGvadelupaPusiaujo GvinėjaGraikijaPietų Džordžija i" + - "r Pietų Sandvičo salosGvatemalaGuamasBisau GvinėjaGajanaYpatingasis Admi" + - "nistracinis Kinijos Regionas HonkongasHerdo ir Makdonaldo SalosHondūrasK" + - "roatijaHaitisVengrijaKanarų salosIndonezijaAirijaIzraelisMeno SalaIndija" + - "Indijos Vandenyno Britų SritisIrakasIranasIslandijaItalijaDžersisJamaika" + - "JordanijaJaponijaKenijaKirgizijaKambodžaKiribatisKomoraiSent Kitsas ir N" + - "evisŠiaurės KorėjaPietų KorėjaKuveitasKaimanų SalosKazachstanasLaosasLib" + - "anasSent LusijaLichtenšteinasŠri LankaLiberijaLesotasLietuvaLiuksemburga" + - "sLatvijaLibijaMarokasMonakasMoldovaJuodkalnijaSen MartenasMadagaskarasMa" + - "ršalo SalosMakedonijaMalisMianmaras (Birma)MongolijaYpatingasis Administ" + - "racinis Kinijos Regionas MakaoMarianos Šiaurinės SalosMartinikaMauritani" + - "jaMontseratasMaltaMauricijusMaldyvaiMalavisMeksikaMalaizijaMozambikasNam" + - "ibijaNaujoji KaledonijaNigerisNorfolko salaNigerijaNikaragvaNyderlandaiN" + - "orvegijaNepalasNauruNiujėNaujoji ZelandijaOmanasPanamaPeruPrancūzijos Po" + - "linezijaPapua Naujoji GvinėjaFilipinaiPakistanasLenkijaSen Pjeras ir Mik" + - "elonasPitkerno salosPuerto RikasPalestinos teritorijaPortugalijaPalauPar" + - "agvajusKatarasNuošali OkeanijaReunjonasRumunijaSerbijaRusijaRuandaSaudo " + - "ArabijaSaliamono SalosSeišeliaiSudanasŠvedijaSingapūrasŠv. Elenos SalaSl" + - "ovėnijaSvalbardas ir Janas MajenasSlovakijaSiera LeonėSan MarinasSenegal" + - "asSomalisSurinamasPietų SudanasSan Tomė ir PrinsipėSalvadorasSint Marten" + - "asSirijaSvazilandasTristanas da KunjaTerkso ir Kaikoso SalosČadasPrancūz" + - "ijos Pietų sritysTogasTailandasTadžikijaTokelauRytų TimorasTurkmėnistana" + - "sTunisasTongaTurkijaTrinidadas ir TobagasTuvaluTaivanasTanzanijaUkrainaU" + - "gandaJungtinių Valstijų Mažosios Tolimosios SalosJungtinės TautosJungtin" + - "ės ValstijosUrugvajusUzbekistanasVatikano Miesto ValstybėŠventasis Vinc" + - "entas ir GrenadinaiVenesuelaDidžiosios Britanijos Mergelių SalosJungtini" + - "ų Valstijų Mergelių SalosVietnamasVanuatuVolisas ir FutūnaSamoaKosovasJ" + - "emenasMajotasPietų AfrikaZambijaZimbabvėnežinoma sritispasaulisAfrikaŠia" + - "urės AmerikaPietų AmerikaOkeanijaVakarų AfrikaCentrinė AmerikaRytų Afrik" + - "aŠiaurės AfrikaVidurio AfrikaPietinė AfrikaAmerikaŠiaurinė AmerikaKariba" + - "iRytų AzijaPietų AzijaPietryčių AzijaPietų EuropaAustralazijaMelanezijaM" + - "ikronezijos regionasPolinezijaAzijaCentrinė AzijaVakarų AzijaEuropaRytų " + - "EuropaŠiaurės EuropaVakarų EuropaLotynų Amerika" - -var ltRegionIdx = []uint16{ // 292 elements + "aeuro zonaSuomijaFidžisFolklando SalosMikronezijaFarerų SalosPrancūzijaG" + + "abonasJungtinė KaralystėGrenadaGruzijaPrancūzijos GvianaGernsisGanaGibra" + + "ltarasGrenlandijaGambijaGvinėjaGvadelupaPusiaujo GvinėjaGraikijaPietų Dž" + + "ordžija ir Pietų Sandvičo salosGvatemalaGuamasBisau GvinėjaGajanaYpating" + + "asis Administracinis Kinijos Regionas HonkongasHerdo ir Makdonaldo Salos" + + "HondūrasKroatijaHaitisVengrijaKanarų salosIndonezijaAirijaIzraelisMeno S" + + "alaIndijaIndijos Vandenyno Britų SritisIrakasIranasIslandijaItalijaDžers" + + "isJamaikaJordanijaJaponijaKenijaKirgizijaKambodžaKiribatisKomoraiSent Ki" + + "tsas ir NevisŠiaurės KorėjaPietų KorėjaKuveitasKaimanų SalosKazachstanas" + + "LaosasLibanasSent LusijaLichtenšteinasŠri LankaLiberijaLesotasLietuvaLiu" + + "ksemburgasLatvijaLibijaMarokasMonakasMoldovaJuodkalnijaSen MartenasMadag" + + "askarasMaršalo SalosMakedonijaMalisMianmaras (Birma)MongolijaYpatingasis" + + " Administracinis Kinijos Regionas MakaoMarianos Šiaurinės SalosMartinika" + + "MauritanijaMontseratasMaltaMauricijusMaldyvaiMalavisMeksikaMalaizijaMoza" + + "mbikasNamibijaNaujoji KaledonijaNigerisNorfolko salaNigerijaNikaragvaNyd" + + "erlandaiNorvegijaNepalasNauruNiujėNaujoji ZelandijaOmanasPanamaPeruPranc" + + "ūzijos PolinezijaPapua Naujoji GvinėjaFilipinaiPakistanasLenkijaSen Pje" + + "ras ir MikelonasPitkerno salosPuerto RikasPalestinos teritorijaPortugali" + + "jaPalauParagvajusKatarasNuošali OkeanijaReunjonasRumunijaSerbijaRusijaRu" + + "andaSaudo ArabijaSaliamono SalosSeišeliaiSudanasŠvedijaSingapūrasŠv. Ele" + + "nos SalaSlovėnijaSvalbardas ir Janas MajenasSlovakijaSiera LeonėSan Mari" + + "nasSenegalasSomalisSurinamasPietų SudanasSan Tomė ir PrinsipėSalvadorasS" + + "int MartenasSirijaSvazilandasTristanas da KunjaTerkso ir Kaikoso SalosČa" + + "dasPrancūzijos Pietų sritysTogasTailandasTadžikijaTokelauRytų TimorasTur" + + "kmėnistanasTunisasTongaTurkijaTrinidadas ir TobagasTuvaluTaivanasTanzani" + + "jaUkrainaUgandaJungtinių Valstijų Mažosios Tolimosios SalosJungtinės Tau" + + "tosJungtinės ValstijosUrugvajusUzbekistanasVatikano Miesto ValstybėŠvent" + + "asis Vincentas ir GrenadinaiVenesuelaDidžiosios Britanijos Mergelių Salo" + + "sJungtinių Valstijų Mergelių SalosVietnamasVanuatuVolisas ir FutūnaSamoa" + + "KosovasJemenasMajotasPietų AfrikaZambijaZimbabvėnežinoma sritispasaulisA" + + "frikaŠiaurės AmerikaPietų AmerikaOkeanijaVakarų AfrikaCentrinė AmerikaRy" + + "tų AfrikaŠiaurės AfrikaVidurio AfrikaPietinė AfrikaAmerikaŠiaurinė Ameri" + + "kaKaribaiRytų AzijaPietų AzijaPietryčių AzijaPietų EuropaAustralazijaMel" + + "anezijaMikronezijos regionasPolinezijaAzijaCentrinė AzijaVakarų AzijaEur" + + "opaRytų EuropaŠiaurės EuropaVakarų EuropaLotynų Amerika" + +var ltRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0014, 0x001a, 0x0034, 0x0040, 0x0052, 0x005a, 0x0062, 0x006b, 0x0071, 0x007b, 0x0084, 0x0092, 0x009a, 0x00a4, 0x00a9, @@ -46653,40 +49413,40 @@ var ltRegionIdx = []uint16{ // 292 elements 0x0280, 0x0286, 0x028d, 0x0296, 0x02a3, 0x02ac, 0x02b2, 0x02ba, // Entry 40 - 7F 0x02ce, 0x02d6, 0x02e5, 0x02ee, 0x02f4, 0x02fb, 0x030a, 0x0313, - 0x031b, 0x0323, 0x0333, 0x0333, 0x033a, 0x0341, 0x0350, 0x035b, - 0x0368, 0x0373, 0x037a, 0x038e, 0x0395, 0x039c, 0x03af, 0x03b6, - 0x03ba, 0x03c5, 0x03d0, 0x03d7, 0x03df, 0x03e8, 0x03f9, 0x0401, - 0x042d, 0x0436, 0x043c, 0x044a, 0x0450, 0x0486, 0x049f, 0x04a8, - 0x04b0, 0x04b6, 0x04be, 0x04cb, 0x04d5, 0x04db, 0x04e3, 0x04ec, - 0x04f2, 0x0511, 0x0517, 0x051d, 0x0526, 0x052d, 0x0535, 0x053c, - 0x0545, 0x054d, 0x0553, 0x055c, 0x0565, 0x056e, 0x0575, 0x0589, + 0x031b, 0x0323, 0x0333, 0x033c, 0x0343, 0x034a, 0x0359, 0x0364, + 0x0371, 0x037c, 0x0383, 0x0397, 0x039e, 0x03a5, 0x03b8, 0x03bf, + 0x03c3, 0x03ce, 0x03d9, 0x03e0, 0x03e8, 0x03f1, 0x0402, 0x040a, + 0x0436, 0x043f, 0x0445, 0x0453, 0x0459, 0x048f, 0x04a8, 0x04b1, + 0x04b9, 0x04bf, 0x04c7, 0x04d4, 0x04de, 0x04e4, 0x04ec, 0x04f5, + 0x04fb, 0x051a, 0x0520, 0x0526, 0x052f, 0x0536, 0x053e, 0x0545, + 0x054e, 0x0556, 0x055c, 0x0565, 0x056e, 0x0577, 0x057e, 0x0592, // Entry 80 - BF - 0x059a, 0x05a8, 0x05b0, 0x05be, 0x05ca, 0x05d0, 0x05d7, 0x05e2, - 0x05f1, 0x05fb, 0x0603, 0x060a, 0x0611, 0x061e, 0x0625, 0x062b, - 0x0632, 0x0639, 0x0640, 0x064b, 0x0657, 0x0663, 0x0671, 0x067b, - 0x0680, 0x0691, 0x069a, 0x06cc, 0x06e6, 0x06ef, 0x06fa, 0x0705, - 0x070a, 0x0714, 0x071c, 0x0723, 0x072a, 0x0733, 0x073d, 0x0745, - 0x0757, 0x075e, 0x076b, 0x0773, 0x077c, 0x0787, 0x0790, 0x0797, - 0x079c, 0x07a2, 0x07b3, 0x07b9, 0x07bf, 0x07c3, 0x07da, 0x07f0, - 0x07f9, 0x0803, 0x080a, 0x0821, 0x082f, 0x083b, 0x0850, 0x085b, + 0x05a3, 0x05b1, 0x05b9, 0x05c7, 0x05d3, 0x05d9, 0x05e0, 0x05eb, + 0x05fa, 0x0604, 0x060c, 0x0613, 0x061a, 0x0627, 0x062e, 0x0634, + 0x063b, 0x0642, 0x0649, 0x0654, 0x0660, 0x066c, 0x067a, 0x0684, + 0x0689, 0x069a, 0x06a3, 0x06d5, 0x06ef, 0x06f8, 0x0703, 0x070e, + 0x0713, 0x071d, 0x0725, 0x072c, 0x0733, 0x073c, 0x0746, 0x074e, + 0x0760, 0x0767, 0x0774, 0x077c, 0x0785, 0x0790, 0x0799, 0x07a0, + 0x07a5, 0x07ab, 0x07bc, 0x07c2, 0x07c8, 0x07cc, 0x07e3, 0x07f9, + 0x0802, 0x080c, 0x0813, 0x082a, 0x0838, 0x0844, 0x0859, 0x0864, // Entry C0 - FF - 0x0860, 0x086a, 0x0871, 0x0882, 0x088b, 0x0893, 0x089a, 0x08a0, - 0x08a6, 0x08b3, 0x08c2, 0x08cc, 0x08d3, 0x08db, 0x08e6, 0x08f6, - 0x0900, 0x091b, 0x0924, 0x0930, 0x093b, 0x0944, 0x094b, 0x0954, - 0x0962, 0x0978, 0x0982, 0x098f, 0x0995, 0x09a0, 0x09b2, 0x09c9, - 0x09cf, 0x09e9, 0x09ee, 0x09f7, 0x0a01, 0x0a08, 0x0a15, 0x0a24, - 0x0a2b, 0x0a30, 0x0a37, 0x0a4c, 0x0a52, 0x0a5a, 0x0a63, 0x0a6a, - 0x0a70, 0x0a9f, 0x0ab0, 0x0ac4, 0x0acd, 0x0ad9, 0x0af2, 0x0b14, - 0x0b1d, 0x0b43, 0x0b67, 0x0b70, 0x0b77, 0x0b89, 0x0b8e, 0x0b95, + 0x0869, 0x0873, 0x087a, 0x088b, 0x0894, 0x089c, 0x08a3, 0x08a9, + 0x08af, 0x08bc, 0x08cb, 0x08d5, 0x08dc, 0x08e4, 0x08ef, 0x08ff, + 0x0909, 0x0924, 0x092d, 0x0939, 0x0944, 0x094d, 0x0954, 0x095d, + 0x096b, 0x0981, 0x098b, 0x0998, 0x099e, 0x09a9, 0x09bb, 0x09d2, + 0x09d8, 0x09f2, 0x09f7, 0x0a00, 0x0a0a, 0x0a11, 0x0a1e, 0x0a2d, + 0x0a34, 0x0a39, 0x0a40, 0x0a55, 0x0a5b, 0x0a63, 0x0a6c, 0x0a73, + 0x0a79, 0x0aa8, 0x0ab9, 0x0acd, 0x0ad6, 0x0ae2, 0x0afb, 0x0b1d, + 0x0b26, 0x0b4c, 0x0b70, 0x0b79, 0x0b80, 0x0b92, 0x0b97, 0x0b9e, // Entry 100 - 13F - 0x0b9c, 0x0ba3, 0x0bb0, 0x0bb7, 0x0bc0, 0x0bd0, 0x0bd8, 0x0bde, - 0x0bef, 0x0bfd, 0x0c05, 0x0c13, 0x0c24, 0x0c30, 0x0c40, 0x0c4e, - 0x0c5d, 0x0c64, 0x0c76, 0x0c7d, 0x0c88, 0x0c94, 0x0ca5, 0x0cb2, - 0x0cbe, 0x0cc8, 0x0cdd, 0x0ce7, 0x0cec, 0x0cfb, 0x0d08, 0x0d0e, - 0x0d1a, 0x0d2a, 0x0d38, 0x0d47, -} // Size: 608 bytes - -const lvRegionStr string = "" + // Size: 3342 bytes + 0x0ba5, 0x0bac, 0x0bb9, 0x0bc0, 0x0bc9, 0x0bd9, 0x0be1, 0x0be7, + 0x0bf8, 0x0c06, 0x0c0e, 0x0c1c, 0x0c2d, 0x0c39, 0x0c49, 0x0c57, + 0x0c66, 0x0c6d, 0x0c7f, 0x0c86, 0x0c91, 0x0c9d, 0x0cae, 0x0cbb, + 0x0cc7, 0x0cd1, 0x0ce6, 0x0cf0, 0x0cf5, 0x0d04, 0x0d11, 0x0d17, + 0x0d23, 0x0d33, 0x0d41, 0x0d41, 0x0d50, +} // Size: 610 bytes + +const lvRegionStr string = "" + // Size: 3338 bytes "Debesbraukšanas salaAndoraApvienotie Arābu EmirātiAfganistānaAntigva un " + "BarbudaAngiljaAlbānijaArmēnijaAngolaAntarktikaArgentīnaASV SamoaAustrija" + "AustrālijaArubaOlandes salasAzerbaidžānaBosnija un HercegovinaBarbadosaB" + @@ -46695,35 +49455,35 @@ const lvRegionStr string = "" + // Size: 3342 bytes "utānaBuvē salaBotsvānaBaltkrievijaBelizaKanādaKokosu (Kīlinga) salasKong" + "o (Kinšasa)Centrālāfrikas RepublikaKongo (Brazavila)ŠveiceKotdivuāraKuka" + " salasČīleKamerūnaĶīnaKolumbijaKlipertona salaKostarikaKubaKaboverdeKira" + - "saoZiemsvētku salaKipraČehijas RepublikaVācijaDjego Garsijas atolsDžibut" + - "ijaDānijaDominikaDominikānaAlžīrijaSeūta un MeliljaEkvadoraIgaunijaĒģipt" + - "eRietumsahāraEritrejaSpānijaEtiopijaEiropas SavienībaSomijaFidžiFolklend" + - "a salasMikronēzijaFēru salasFrancijaGabonaLielbritānijaGrenādaGruzijaFra" + - "ncijas GviānaGērnsijaGanaGibraltārsGrenlandeGambijaGvinejaGvadelupaEkvat" + - "oriālā GvinejaGrieķijaDienviddžordžija un Dienvidsendviču salasGvatemala" + - "GuamaGvineja-BisavaGajānaĶīnas īpašās pārvaldes apgabals HonkongaHērda s" + - "ala un Makdonalda salasHondurasaHorvātijaHaitiUngārijaKanāriju salasIndo" + - "nēzijaĪrijaIzraēlaMenaIndijaIndijas okeāna Britu teritorijaIrākaIrānaĪsl" + - "andeItālijaDžērsijaJamaikaJordānijaJapānaKenijaKirgizstānaKambodžaKiriba" + - "tiKomoru salasSentkitsa un NevisaZiemeļkorejaDienvidkorejaKuveitaKaimanu" + - " salasKazahstānaLaosaLibānaSentlūsijaLihtenšteinaŠrilankaLibērijaLesotoL" + - "ietuvaLuksemburgaLatvijaLībijaMarokaMonakoMoldovaMelnkalneSenmartēnaMada" + - "gaskaraMāršala salasMaķedonijaMaliMjanma (Birma)MongolijaĶīnas īpašās pā" + - "rvaldes apgabals MakaoZiemeļu Marianas salasMartinikaMauritānijaMontserr" + - "ataMaltaMaurīcijaMaldīvijaMalāvijaMeksikaMalaizijaMozambikaNamībijaJaunk" + - "aledonijaNigēraNorfolkas salaNigērijaNikaragvaNīderlandeNorvēģijaNepālaN" + - "auruNiueJaunzēlandeOmānaPanamaPeruFrancijas PolinēzijaPapua-JaungvinejaF" + - "ilipīnasPakistānaPolijaSenpjēra un MikelonaPitkērnas salasPuertorikoPale" + - "stīnaPortugālePalauParagvajaKataraOkeānijas attālās salasReinjonaRumānij" + - "aSerbijaKrievijaRuandaSaūda ArābijaZālamana salasSeišelu salasSudānaZvie" + - "drijaSingapūraSv.Helēnas salaSlovēnijaSvalbāra un Jana Majena salaSlovāk" + - "ijaSjerraleoneSanmarīnoSenegālaSomālijaSurinamaDienvidsudānaSantome un P" + - "rinsipiSalvadoraSintmārtenaSīrijaSvazilendaTristana da Kuņas salasTērksa" + - "s un Kaikosas salasČadaFrancijas Dienvidjūru teritorijaTogoTaizemeTadžik" + - "istānaTokelauAustrumtimoraTurkmenistānaTunisijaTongaTurcijaTrinidāda un " + - "TobāgoTuvaluTaivānaTanzānijaUkrainaUgandaASV Mazās Aizjūras salasApvieno" + - "to Nāciju OrganizācijaAmerikas Savienotās ValstisUrugvajaUzbekistānaVati" + - "kānsSentvinsenta un GrenadīnasVenecuēlaBritu VirdžīnasASV VirdžīnasVjetn" + + "saoZiemsvētku salaKipraČehijaVācijaDjego Garsijas atolsDžibutijaDānijaDo" + + "minikaDominikānaAlžīrijaSeūta un MeliljaEkvadoraIgaunijaĒģipteRietumsahā" + + "raEritrejaSpānijaEtiopijaEiropas SavienībaEirozonaSomijaFidžiFolklenda s" + + "alasMikronēzijaFēru salasFrancijaGabonaLielbritānijaGrenādaGruzijaFranci" + + "jas GviānaGērnsijaGanaGibraltārsGrenlandeGambijaGvinejaGvadelupaEkvatori" + + "ālā GvinejaGrieķijaDienviddžordžija un Dienvidsendviču salasGvatemalaGu" + + "amaGvineja-BisavaGajānaĶīnas īpašās pārvaldes apgabals HonkongaHērda sal" + + "a un Makdonalda salasHondurasaHorvātijaHaitiUngārijaKanāriju salasIndonē" + + "zijaĪrijaIzraēlaMenaIndijaIndijas okeāna Britu teritorijaIrākaIrānaIslan" + + "deItālijaDžērsijaJamaikaJordānijaJapānaKenijaKirgizstānaKambodžaKiribati" + + "Komoru salasSentkitsa un NevisaZiemeļkorejaDienvidkorejaKuveitaKaimanu s" + + "alasKazahstānaLaosaLibānaSentlūsijaLihtenšteinaŠrilankaLibērijaLesotoLie" + + "tuvaLuksemburgaLatvijaLībijaMarokaMonakoMoldovaMelnkalneSenmartēnaMadaga" + + "skaraMāršala salasMaķedonijaMaliMjanma (Birma)MongolijaĶīnas īpašās pārv" + + "aldes apgabals MakaoZiemeļu Marianas salasMartinikaMauritānijaMontserrat" + + "aMaltaMaurīcijaMaldīvijaMalāvijaMeksikaMalaizijaMozambikaNamībijaJaunkal" + + "edonijaNigēraNorfolkas salaNigērijaNikaragvaNīderlandeNorvēģijaNepālaNau" + + "ruNiueJaunzēlandeOmānaPanamaPeruFrancijas PolinēzijaPapua-JaungvinejaFil" + + "ipīnasPakistānaPolijaSenpjēra un MikelonaPitkērnas salasPuertorikoPalest" + + "īnaPortugālePalauParagvajaKataraOkeānijas attālās salasReinjonaRumānija" + + "SerbijaKrievijaRuandaSaūda ArābijaZālamana salasSeišelu salasSudānaZvied" + + "rijaSingapūraSv.Helēnas salaSlovēnijaSvalbāra un Jana Majena salaSlovāki" + + "jaSjerraleoneSanmarīnoSenegālaSomālijaSurinamaDienvidsudānaSantome un Pr" + + "insipiSalvadoraSintmārtenaSīrijaSvazilendaTristana da Kuņas salasTērksas" + + " un Kaikosas salasČadaFrancijas Dienvidjūru teritorijaTogoTaizemeTadžiki" + + "stānaTokelauAustrumtimoraTurkmenistānaTunisijaTongaTurcijaTrinidāda un T" + + "obāgoTuvaluTaivānaTanzānijaUkrainaUgandaASV Mazās Aizjūras salasApvienot" + + "o Nāciju OrganizācijaAmerikas Savienotās ValstisUrugvajaUzbekistānaVatik" + + "ānsSentvinsenta un GrenadīnasVenecuēlaBritu VirdžīnasASV VirdžīnasVjetn" + "amaVanuatuVolisa un Futunas salasSamoaKosovaJemenaMajotaDienvidāfrikas R" + "epublikaZambijaZimbabvenezināms reģionspasauleĀfrikaZiemeļamerikaDienvid" + "amerikaOkeānijaRietumāfrikaCentrālamerikaAustrumāfrikaZiemeļāfrikaVidusā" + @@ -46732,7 +49492,7 @@ const lvRegionStr string = "" + // Size: 3342 bytes "Mikronēzijas reģionsPolinēzijaĀzijaCentrālāzijaRietumāzijaEiropaAustrume" + "iropaZiemeļeiropaRietumeiropaLatīņamerika" -var lvRegionIdx = []uint16{ // 292 elements +var lvRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0015, 0x001b, 0x0035, 0x0041, 0x0053, 0x005a, 0x0063, 0x006c, 0x0072, 0x007c, 0x0086, 0x008f, 0x0097, 0x00a2, 0x00a7, @@ -46741,405 +49501,405 @@ var lvRegionIdx = []uint16{ // 292 elements 0x016e, 0x017a, 0x0181, 0x018b, 0x0194, 0x01a0, 0x01a6, 0x01ad, 0x01c4, 0x01d4, 0x01ee, 0x01ff, 0x0206, 0x0211, 0x021b, 0x0221, 0x022a, 0x0230, 0x0239, 0x0248, 0x0251, 0x0255, 0x025e, 0x0265, - 0x0275, 0x027a, 0x028c, 0x0293, 0x02a7, 0x02b1, 0x02b8, 0x02c0, + 0x0275, 0x027a, 0x0281, 0x0288, 0x029c, 0x02a6, 0x02ad, 0x02b5, // Entry 40 - 7F - 0x02cb, 0x02d5, 0x02e6, 0x02ee, 0x02f6, 0x02fe, 0x030b, 0x0313, - 0x031b, 0x0323, 0x0335, 0x0335, 0x033b, 0x0341, 0x0350, 0x035c, - 0x0367, 0x036f, 0x0375, 0x0383, 0x038b, 0x0392, 0x03a3, 0x03ac, - 0x03b0, 0x03bb, 0x03c4, 0x03cb, 0x03d2, 0x03db, 0x03f0, 0x03f9, - 0x0425, 0x042e, 0x0433, 0x0441, 0x0448, 0x0476, 0x0495, 0x049e, - 0x04a8, 0x04ad, 0x04b6, 0x04c5, 0x04d0, 0x04d6, 0x04de, 0x04e2, - 0x04e8, 0x0508, 0x050e, 0x0514, 0x051c, 0x0524, 0x052e, 0x0535, - 0x053f, 0x0546, 0x054c, 0x0558, 0x0561, 0x0569, 0x0575, 0x0588, + 0x02c0, 0x02ca, 0x02db, 0x02e3, 0x02eb, 0x02f3, 0x0300, 0x0308, + 0x0310, 0x0318, 0x032a, 0x0332, 0x0338, 0x033e, 0x034d, 0x0359, + 0x0364, 0x036c, 0x0372, 0x0380, 0x0388, 0x038f, 0x03a0, 0x03a9, + 0x03ad, 0x03b8, 0x03c1, 0x03c8, 0x03cf, 0x03d8, 0x03ed, 0x03f6, + 0x0422, 0x042b, 0x0430, 0x043e, 0x0445, 0x0473, 0x0492, 0x049b, + 0x04a5, 0x04aa, 0x04b3, 0x04c2, 0x04cd, 0x04d3, 0x04db, 0x04df, + 0x04e5, 0x0505, 0x050b, 0x0511, 0x0518, 0x0520, 0x052a, 0x0531, + 0x053b, 0x0542, 0x0548, 0x0554, 0x055d, 0x0565, 0x0571, 0x0584, // Entry 80 - BF - 0x0595, 0x05a2, 0x05a9, 0x05b6, 0x05c1, 0x05c6, 0x05cd, 0x05d8, - 0x05e5, 0x05ee, 0x05f7, 0x05fd, 0x0604, 0x060f, 0x0616, 0x061d, - 0x0623, 0x0629, 0x0630, 0x0639, 0x0644, 0x064f, 0x065e, 0x0669, - 0x066d, 0x067b, 0x0684, 0x06af, 0x06c6, 0x06cf, 0x06db, 0x06e6, - 0x06eb, 0x06f5, 0x06ff, 0x0708, 0x070f, 0x0718, 0x0721, 0x072a, - 0x0738, 0x073f, 0x074d, 0x0756, 0x075f, 0x076a, 0x0775, 0x077c, - 0x0781, 0x0785, 0x0791, 0x0797, 0x079d, 0x07a1, 0x07b6, 0x07c7, - 0x07d1, 0x07db, 0x07e1, 0x07f6, 0x0806, 0x0810, 0x081a, 0x0824, + 0x0591, 0x059e, 0x05a5, 0x05b2, 0x05bd, 0x05c2, 0x05c9, 0x05d4, + 0x05e1, 0x05ea, 0x05f3, 0x05f9, 0x0600, 0x060b, 0x0612, 0x0619, + 0x061f, 0x0625, 0x062c, 0x0635, 0x0640, 0x064b, 0x065a, 0x0665, + 0x0669, 0x0677, 0x0680, 0x06ab, 0x06c2, 0x06cb, 0x06d7, 0x06e2, + 0x06e7, 0x06f1, 0x06fb, 0x0704, 0x070b, 0x0714, 0x071d, 0x0726, + 0x0734, 0x073b, 0x0749, 0x0752, 0x075b, 0x0766, 0x0771, 0x0778, + 0x077d, 0x0781, 0x078d, 0x0793, 0x0799, 0x079d, 0x07b2, 0x07c3, + 0x07cd, 0x07d7, 0x07dd, 0x07f2, 0x0802, 0x080c, 0x0816, 0x0820, // Entry C0 - FF - 0x0829, 0x0832, 0x0838, 0x0852, 0x085a, 0x0863, 0x086a, 0x0872, - 0x0878, 0x0887, 0x0896, 0x08a4, 0x08ab, 0x08b4, 0x08be, 0x08ce, - 0x08d8, 0x08f5, 0x08ff, 0x090a, 0x0914, 0x091d, 0x0926, 0x092e, - 0x093c, 0x094f, 0x0958, 0x0964, 0x096b, 0x0975, 0x098d, 0x09a7, - 0x09ac, 0x09cd, 0x09d1, 0x09d8, 0x09e6, 0x09ed, 0x09fa, 0x0a08, - 0x0a10, 0x0a15, 0x0a1c, 0x0a31, 0x0a37, 0x0a3f, 0x0a49, 0x0a50, - 0x0a56, 0x0a70, 0x0a8f, 0x0aab, 0x0ab3, 0x0abf, 0x0ac8, 0x0ae3, - 0x0aed, 0x0afe, 0x0b0d, 0x0b15, 0x0b1c, 0x0b33, 0x0b38, 0x0b3e, + 0x0825, 0x082e, 0x0834, 0x084e, 0x0856, 0x085f, 0x0866, 0x086e, + 0x0874, 0x0883, 0x0892, 0x08a0, 0x08a7, 0x08b0, 0x08ba, 0x08ca, + 0x08d4, 0x08f1, 0x08fb, 0x0906, 0x0910, 0x0919, 0x0922, 0x092a, + 0x0938, 0x094b, 0x0954, 0x0960, 0x0967, 0x0971, 0x0989, 0x09a3, + 0x09a8, 0x09c9, 0x09cd, 0x09d4, 0x09e2, 0x09e9, 0x09f6, 0x0a04, + 0x0a0c, 0x0a11, 0x0a18, 0x0a2d, 0x0a33, 0x0a3b, 0x0a45, 0x0a4c, + 0x0a52, 0x0a6c, 0x0a8b, 0x0aa7, 0x0aaf, 0x0abb, 0x0ac4, 0x0adf, + 0x0ae9, 0x0afa, 0x0b09, 0x0b11, 0x0b18, 0x0b2f, 0x0b34, 0x0b3a, // Entry 100 - 13F - 0x0b44, 0x0b4a, 0x0b63, 0x0b6a, 0x0b72, 0x0b84, 0x0b8b, 0x0b92, - 0x0ba0, 0x0bae, 0x0bb7, 0x0bc4, 0x0bd3, 0x0be1, 0x0bef, 0x0bfb, - 0x0c09, 0x0c10, 0x0c27, 0x0c3e, 0x0c4b, 0x0c58, 0x0c6d, 0x0c7a, - 0x0c88, 0x0c93, 0x0ca9, 0x0cb4, 0x0cba, 0x0cc8, 0x0cd4, 0x0cda, - 0x0ce7, 0x0cf4, 0x0d00, 0x0d0e, -} // Size: 608 bytes - -const mkRegionStr string = "" + // Size: 6045 bytes - "Остров АсенсионАндораОбединети Арапски ЕмиратиАвганистанАнтигва и Барбуд" + - "аАнгвилаАлбанијаЕрменијаАнголаАнтарктикАргентинаАмериканска СамоаАвстри" + - "јаАвстралијаАрубаОландски ОстровиАзербејџанБосна и ХерцеговинаБарбадосБ" + - "англадешБелгијаБуркина ФасоБугаријаБахреинБурундиБенинСвети ВартоломејБ" + - "ермудиБрунејБоливијаКарипска ХоландијаБразилБахамиБутанОстров БувеБоцва" + - "наБелорусијаБелизеКанадаКокосови (Килиншки) ОстровиКонго - КиншасаЦентр" + - "алноафриканска РепубликаКонго - БразавилШвајцаријаБрегот на Слоновата К" + - "оскаКукови ОстровиЧилеКамерунКинаКолумбијаОстров КлипертонКостарикаКуба" + - "Зелен ’РтКурасаоБожиќен ОстровКипарРепублика ЧешкаГерманијаДиего Гарсиј" + - "аЏибутиДанскаДоминикаДоминиканска РепубликаАлжирСеута и МелиљаЕквадорЕс" + - "тонијаЕгипетЗападна СахараЕритрејаШпанијаЕтиопијаЕвропска унијаФинскаФи" + - "џиФолкландски ОстровиМикронезијаФарски ОстровиФранцијаГабонОбединето Кр" + - "алствоГренадаГрузијаФранцуска ГвајанаГернзиГанаГибралтарГренландГамбија" + - "ГвинејаГвадалупеЕкваторска ГвинејаГрцијаЈужна Џорџија и Јужни Сендвички" + - " ОстровиГватемалаГуамГвинеја-БисауГвајанаХонг Конг С.А.Р КинаОстров Херд" + - " и Острови МекдоналдХондурасХрватскаХаитиУнгаријаКанарски ОстровиИндонез" + - "ијаИрскаИзраелОстров МанИндијаБританска Индоокеанска ТериторијаИракИран" + - "ИсландИталијаЏерсиЈамајкаЈорданЈапонијаКенијаКиргистанКамбоџаКирибатиКо" + - "морски ОстровиСвети Кристофер и НевисСеверна КорејаЈужна КорејаКувајтКа" + - "јмански ОстровиКазахстанЛаосЛибанСвета ЛуцијаЛихтенштајнШри ЛанкаЛибери" + - "јаЛесотоЛитванијаЛуксембургЛатвијаЛибијаМарокоМонакоМолдавијаЦрна ГораС" + - "ент МартинМадагаскарМаршалски ОстровиМакедонијаМалиМјанмар (Бурма)Монго" + - "лијаМакао САРСеверни Маријански ОстровиМартиникМавританијаМонсератМалта" + - "МаврициусМалдивиМалавиМексикоМалезијаМозамбикНамибијаНова КаледонијаНиг" + - "ерНорфолшки ОстровНигеријаНикарагваХоландијаНорвешкаНепалНауруНиујеНов " + - "ЗеландОманПанамаПеруФранцуска ПолинезијаПапуа Нова ГвинејаФилипиниПакис" + - "танПолскаСент Пјер и МикеланПиткернски ОстровиПорторикоПалестински тери" + - "торииПортугалијаПалауПарагвајКатарЗависни земји во ОкеанијаРеунионРоман" + - "ијаСрбијаРусијаРуандаСаудиска АрабијаСоломонски ОстровиСејшелиСуданШвед" + - "скаСингапурСвета ЕленаСловенијаСвалбард и Жан МејенСловачкаСиера ЛеонеС" + - "ан МариноСенегалСомалијаСуринамЈужен СуданСао Томе и ПринсипеЕл Салвадо" + - "рСвети МартинСиријаСвазилендТристан да КуњаОстрови Туркс и КаикосЧадФра" + - "нцуски Јужни ТериторииТогоТајландТаџикистанТокелауИсточен Тимор (Тимор " + - "Лесте)ТуркменистанТунисТонгаТурцијаТринидад и ТобагоТувалуТајванТанзани" + - "јаУкраинаУгандаАмерикански територии во Пацификотобединети нацииСоедине" + - "ти Американски ДржавиУругвајУзбекистанВатиканСвети Винсент и Гренадинит" + - "еВенецуелаБритански Девствени ОстровиАмерикански Девствени ОстровиВиетн" + - "амВануатуВалис и ФутунаСамоаКосовоЈеменМајотЈужноафриканска РепубликаЗа" + - "мбијаЗимбабвеНепознат регионСветАфрикаСеверна АмерикаЈужна АмерикаОкеан" + - "ијаЗападна АфрикаЦентрална АмерикаИсточна АфрикаСеверна АфрикаСредна Аф" + - "рикаЈужна АфрикаАмерикиСеверна континентална АмерикаКарибиИсточна Азија" + - "Јужна АзијаЈугоисточна АзијаЈужна ЕвропаАвстралазијаМеланезијаМикронези" + - "ски регионПолинезијаАзијаЦентрална АзијаЗападна АзијаЕвропаИсточна Евро" + - "паСеверна ЕвропаЗападна ЕвропаЛатинска Америка" - -var mkRegionIdx = []uint16{ // 292 elements + 0x0b40, 0x0b46, 0x0b5f, 0x0b66, 0x0b6e, 0x0b80, 0x0b87, 0x0b8e, + 0x0b9c, 0x0baa, 0x0bb3, 0x0bc0, 0x0bcf, 0x0bdd, 0x0beb, 0x0bf7, + 0x0c05, 0x0c0c, 0x0c23, 0x0c3a, 0x0c47, 0x0c54, 0x0c69, 0x0c76, + 0x0c84, 0x0c8f, 0x0ca5, 0x0cb0, 0x0cb6, 0x0cc4, 0x0cd0, 0x0cd6, + 0x0ce3, 0x0cf0, 0x0cfc, 0x0cfc, 0x0d0a, +} // Size: 610 bytes + +const mkRegionStr string = "" + // Size: 6022 bytes + "Остров АсенсионАндораОбединети Арапски ЕмиратиАвганистанАнтига и Барбуда" + + "АнгвилаАлбанијаЕрменијаАнголаАнтарктикАргентинаАмериканска СамоаАвстриј" + + "аАвстралијаАрубаОландски ОстровиАзербејџанБосна и ХерцеговинаБарбадосБа" + + "нгладешБелгијаБуркина ФасоБугаријаБахреинБурундиБенинСвети ВартоломејБе" + + "рмудиБрунејБоливијаКарипска ХоландијаБразилБахамиБутанОстров БувеБоцван" + + "аБелорусијаБелизеКанадаКокосови (Килиншки) ОстровиКонго - КиншасаЦентра" + + "лноафриканска РепубликаКонго - БразавилШвајцаријаБрегот на Слоновата Ко" + + "скаКукови ОстровиЧилеКамерунКинаКолумбијаОстров КлипертонКостарикаКубаЗ" + + "елен ’РтКурасаоБожиќен ОстровКипарЧешкаГерманијаДиего ГарсијаЏибутиДанс" + + "каДоминикаДоминиканска РепубликаАлжирСеута и МелиљаЕквадорЕстонијаЕгипе" + + "тЗападна СахараЕритрејаШпанијаЕтиопијаЕвропска унијаЕврозонаФинскаФиџиФ" + + "олкландски ОстровиМикронезијаФарски ОстровиФранцијаГабонОбединето Кралс" + + "твоГренадаГрузијаФранцуска ГвајанаГернзиГанаГибралтарГренландГамбијаГви" + + "нејаГвадалупеЕкваторска ГвинејаГрцијаЈужна Џорџија и Јужни Сендвички Ос" + + "тровиГватемалаГуамГвинеја-БисауГвајанаХонг Конг С.А.Р КинаОстров Херд и" + + " Острови МекдоналдХондурасХрватскаХаитиУнгаријаКанарски ОстровиИндонезиј" + + "аИрскаИзраелОстров МанИндијаБританска Индоокеанска ТериторијаИракИранИс" + + "ландИталијаЏерсиЈамајкаЈорданЈапонијаКенијаКиргистанКамбоџаКирибатиКомо" + + "рски ОстровиСвети Китс и НевисСеверна КорејаЈужна КорејаКувајтКајмански" + + " ОстровиКазахстанЛаосЛибанСент ЛусијаЛихтенштајнШри ЛанкаЛиберијаЛесотоЛ" + + "итванијаЛуксембургЛатвијаЛибијаМарокоМонакоМолдавијаЦрна ГораСент Марти" + + "нМадагаскарМаршалски ОстровиМакедонијаМалиМјанмар (Бурма)МонголијаМакао" + + " САРСеверни Маријански ОстровиМартиникМавританијаМонсератМалтаМаврициусМ" + + "алдивиМалавиМексикоМалезијаМозамбикНамибијаНова КаледонијаНигерНорфолшк" + + "и ОстровНигеријаНикарагваХоландијаНорвешкаНепалНауруНиујеНов ЗеландОман" + + "ПанамаПеруФранцуска ПолинезијаПапуа Нова ГвинејаФилипиниПакистанПолскаС" + + "ент Пјер и МикеланПиткернски ОстровиПорторикоПалестински територииПорту" + + "галијаПалауПарагвајКатарЗависни земји во ОкеанијаРеунионРоманијаСрбијаР" + + "усијаРуандаСаудиска АрабијаСоломонски ОстровиСејшелиСуданШведскаСингапу" + + "рСвета ЕленаСловенијаСвалбард и Жан МејенСловачкаСиера ЛеонеСан МариноС" + + "енегалСомалијаСуринамЈужен СуданСао Томе и ПринсипеЕл СалвадорСвети Мар" + + "тинСиријаСвазилендТристан да КуњаОстрови Туркс и КаикосЧадФранцуски Јуж" + + "ни ТериторииТогоТајландТаџикистанТокелауИсточен Тимор (Тимор Лесте)Турк" + + "менистанТунисТонгаТурцијаТринидад и ТобагоТувалуТајванТанзанијаУкраинаУ" + + "гандаАмерикански територии во ПацификотОбединети нацииСоединети Америка" + + "нски ДржавиУругвајУзбекистанВатиканСент Винсент и ГренадиниВенецуелаБри" + + "тански Девствени ОстровиАмерикански Девствени ОстровиВиетнамВануатуВали" + + "с и ФутунаСамоаКосовоЈеменМајотЈужноафриканска РепубликаЗамбијаЗимбабве" + + "Непознат регионСветАфрикаСеверна АмерикаЈужна АмерикаОкеанијаЗападна Аф" + + "рикаЦентрална АмерикаИсточна АфрикаСеверна АфрикаСредна АфрикаЈужна Афр" + + "икаАмерикиСеверна континентална АмерикаКарибиИсточна АзијаЈужна АзијаЈу" + + "гоисточна АзијаЈужна ЕвропаАвстралазијаМеланезијаМикронезиски регионПол" + + "инезијаАзијаЦентрална АзијаЗападна АзијаЕвропаИсточна ЕвропаСеверна Евр" + + "опаЗападна ЕвропаЛатинска Америка" + +var mkRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F - 0x0000, 0x001d, 0x0029, 0x0059, 0x006d, 0x008d, 0x009b, 0x00ab, - 0x00bb, 0x00c7, 0x00d9, 0x00eb, 0x010c, 0x011c, 0x0130, 0x013a, - 0x0159, 0x016d, 0x0191, 0x01a1, 0x01b3, 0x01c1, 0x01d8, 0x01e8, - 0x01f6, 0x0204, 0x020e, 0x022d, 0x023b, 0x0247, 0x0257, 0x027a, - 0x0286, 0x0292, 0x029c, 0x02b1, 0x02bf, 0x02d3, 0x02df, 0x02eb, - 0x031d, 0x0338, 0x0371, 0x038e, 0x03a2, 0x03d1, 0x03ec, 0x03f4, - 0x0402, 0x040a, 0x041c, 0x043b, 0x044d, 0x0455, 0x0467, 0x0475, - 0x0490, 0x049a, 0x04b7, 0x04c9, 0x04e2, 0x04ee, 0x04fa, 0x050a, + 0x0000, 0x001d, 0x0029, 0x0059, 0x006d, 0x008b, 0x0099, 0x00a9, + 0x00b9, 0x00c5, 0x00d7, 0x00e9, 0x010a, 0x011a, 0x012e, 0x0138, + 0x0157, 0x016b, 0x018f, 0x019f, 0x01b1, 0x01bf, 0x01d6, 0x01e6, + 0x01f4, 0x0202, 0x020c, 0x022b, 0x0239, 0x0245, 0x0255, 0x0278, + 0x0284, 0x0290, 0x029a, 0x02af, 0x02bd, 0x02d1, 0x02dd, 0x02e9, + 0x031b, 0x0336, 0x036f, 0x038c, 0x03a0, 0x03cf, 0x03ea, 0x03f2, + 0x0400, 0x0408, 0x041a, 0x0439, 0x044b, 0x0453, 0x0465, 0x0473, + 0x048e, 0x0498, 0x04a2, 0x04b4, 0x04cd, 0x04d9, 0x04e5, 0x04f5, // Entry 40 - 7F - 0x0535, 0x053f, 0x0559, 0x0567, 0x0577, 0x0583, 0x059e, 0x05ae, - 0x05bc, 0x05cc, 0x05e7, 0x05e7, 0x05f3, 0x05fb, 0x0620, 0x0636, - 0x0651, 0x0661, 0x066b, 0x068e, 0x069c, 0x06aa, 0x06cb, 0x06d7, - 0x06df, 0x06f1, 0x0701, 0x070f, 0x071d, 0x072f, 0x0752, 0x075e, - 0x07a7, 0x07b9, 0x07c1, 0x07da, 0x07e8, 0x080b, 0x0845, 0x0855, - 0x0865, 0x086f, 0x087f, 0x089e, 0x08b2, 0x08bc, 0x08c8, 0x08db, - 0x08e7, 0x0927, 0x092f, 0x0937, 0x0943, 0x0951, 0x095b, 0x0969, - 0x0975, 0x0985, 0x0991, 0x09a3, 0x09b1, 0x09c1, 0x09e0, 0x0a0b, + 0x0520, 0x052a, 0x0544, 0x0552, 0x0562, 0x056e, 0x0589, 0x0599, + 0x05a7, 0x05b7, 0x05d2, 0x05e2, 0x05ee, 0x05f6, 0x061b, 0x0631, + 0x064c, 0x065c, 0x0666, 0x0689, 0x0697, 0x06a5, 0x06c6, 0x06d2, + 0x06da, 0x06ec, 0x06fc, 0x070a, 0x0718, 0x072a, 0x074d, 0x0759, + 0x07a2, 0x07b4, 0x07bc, 0x07d5, 0x07e3, 0x0806, 0x0840, 0x0850, + 0x0860, 0x086a, 0x087a, 0x0899, 0x08ad, 0x08b7, 0x08c3, 0x08d6, + 0x08e2, 0x0922, 0x092a, 0x0932, 0x093e, 0x094c, 0x0956, 0x0964, + 0x0970, 0x0980, 0x098c, 0x099e, 0x09ac, 0x09bc, 0x09db, 0x09fc, // Entry 80 - BF - 0x0a26, 0x0a3d, 0x0a49, 0x0a6a, 0x0a7c, 0x0a84, 0x0a8e, 0x0aa5, - 0x0abb, 0x0acc, 0x0adc, 0x0ae8, 0x0afa, 0x0b0e, 0x0b1c, 0x0b28, - 0x0b34, 0x0b40, 0x0b52, 0x0b63, 0x0b78, 0x0b8c, 0x0bad, 0x0bc1, - 0x0bc9, 0x0be4, 0x0bf6, 0x0c07, 0x0c39, 0x0c49, 0x0c5f, 0x0c6f, - 0x0c79, 0x0c8b, 0x0c99, 0x0ca5, 0x0cb3, 0x0cc3, 0x0cd3, 0x0ce3, - 0x0d00, 0x0d0a, 0x0d29, 0x0d39, 0x0d4b, 0x0d5d, 0x0d6d, 0x0d77, - 0x0d81, 0x0d8b, 0x0d9e, 0x0da6, 0x0db2, 0x0dba, 0x0de1, 0x0e03, - 0x0e13, 0x0e23, 0x0e2f, 0x0e52, 0x0e75, 0x0e87, 0x0eb0, 0x0ec6, + 0x0a17, 0x0a2e, 0x0a3a, 0x0a5b, 0x0a6d, 0x0a75, 0x0a7f, 0x0a94, + 0x0aaa, 0x0abb, 0x0acb, 0x0ad7, 0x0ae9, 0x0afd, 0x0b0b, 0x0b17, + 0x0b23, 0x0b2f, 0x0b41, 0x0b52, 0x0b67, 0x0b7b, 0x0b9c, 0x0bb0, + 0x0bb8, 0x0bd3, 0x0be5, 0x0bf6, 0x0c28, 0x0c38, 0x0c4e, 0x0c5e, + 0x0c68, 0x0c7a, 0x0c88, 0x0c94, 0x0ca2, 0x0cb2, 0x0cc2, 0x0cd2, + 0x0cef, 0x0cf9, 0x0d18, 0x0d28, 0x0d3a, 0x0d4c, 0x0d5c, 0x0d66, + 0x0d70, 0x0d7a, 0x0d8d, 0x0d95, 0x0da1, 0x0da9, 0x0dd0, 0x0df2, + 0x0e02, 0x0e12, 0x0e1e, 0x0e41, 0x0e64, 0x0e76, 0x0e9f, 0x0eb5, // Entry C0 - FF - 0x0ed0, 0x0ee0, 0x0eea, 0x0f19, 0x0f27, 0x0f37, 0x0f43, 0x0f4f, - 0x0f5b, 0x0f7a, 0x0f9d, 0x0fab, 0x0fb5, 0x0fc3, 0x0fd3, 0x0fe8, - 0x0ffa, 0x101f, 0x102f, 0x1044, 0x1057, 0x1065, 0x1075, 0x1083, - 0x1098, 0x10bb, 0x10d0, 0x10e7, 0x10f3, 0x1105, 0x1121, 0x114a, - 0x1150, 0x1180, 0x1188, 0x1196, 0x11aa, 0x11b8, 0x11e9, 0x1201, - 0x120b, 0x1215, 0x1223, 0x1243, 0x124f, 0x125b, 0x126d, 0x127b, - 0x1287, 0x12c8, 0x12e5, 0x131b, 0x1329, 0x133d, 0x134b, 0x137e, - 0x1390, 0x13c4, 0x13fc, 0x140a, 0x1418, 0x1432, 0x143c, 0x1448, + 0x0ebf, 0x0ecf, 0x0ed9, 0x0f08, 0x0f16, 0x0f26, 0x0f32, 0x0f3e, + 0x0f4a, 0x0f69, 0x0f8c, 0x0f9a, 0x0fa4, 0x0fb2, 0x0fc2, 0x0fd7, + 0x0fe9, 0x100e, 0x101e, 0x1033, 0x1046, 0x1054, 0x1064, 0x1072, + 0x1087, 0x10aa, 0x10bf, 0x10d6, 0x10e2, 0x10f4, 0x1110, 0x1139, + 0x113f, 0x116f, 0x1177, 0x1185, 0x1199, 0x11a7, 0x11d8, 0x11f0, + 0x11fa, 0x1204, 0x1212, 0x1232, 0x123e, 0x124a, 0x125c, 0x126a, + 0x1276, 0x12b7, 0x12d4, 0x130a, 0x1318, 0x132c, 0x133a, 0x1367, + 0x1379, 0x13ad, 0x13e5, 0x13f3, 0x1401, 0x141b, 0x1425, 0x1431, // Entry 100 - 13F - 0x1452, 0x145c, 0x148d, 0x149b, 0x14ab, 0x14c8, 0x14d0, 0x14dc, - 0x14f9, 0x1512, 0x1522, 0x153d, 0x155e, 0x1579, 0x1594, 0x15ad, - 0x15c4, 0x15d2, 0x160a, 0x1616, 0x162f, 0x1644, 0x1665, 0x167c, - 0x1694, 0x16a8, 0x16cd, 0x16e1, 0x16eb, 0x1708, 0x1721, 0x172d, - 0x1748, 0x1763, 0x177e, 0x179d, -} // Size: 608 bytes - -const mlRegionStr string = "" + // Size: 9182 bytes - "അസൻഷൻ ദ്വീപ്അന്റോറയുണൈറ്റഡ് അറബ് എമിറൈറ്റ്\u200cസ്അഫ്\u200cഗാനിസ്ഥാൻആൻറി" + - "ഗ്വയും ബർബുഡയുംആൻഗ്വില്ലഅൽബേനിയഅർമേനിയഅംഗോളഅൻറാർട്ടിക്കഅർജൻറീനഅമേരിക്ക" + - "ൻ സമോവഓസ്ട്രിയഓസ്\u200cട്രേലിയഅറൂബഅലൻഡ് ദ്വീപുകൾഅസർബൈജാൻബോസ്നിയയും ഹെർ" + - "സഗോവിനയുംബാർബഡോസ്ബംഗ്ലാദേശ്ബെൽജിയംബുർക്കിനാ ഫാസോബൾഗേറിയബഹ്റിൻബറുണ്ടിബെ" + - "നിൻസെന്റ് ബാർത്തലമിബർമുഡബ്രൂണൈബൊളീവിയകരീബിയൻ നെതർലാൻഡ്സ്ബ്രസീൽബഹാമാസ്ഭ" + - "ൂട്ടാൻബൗവെട്ട് ദ്വീപ്ബോട്സ്വാനബെലറൂസ്ബെലീസ്കാനഡകോക്കസ് (കീലിംഗ്) ദ്വീപ" + - "ുകൾകോംഗോ - കിൻഷാസസെൻട്രൽ ആഫ്രിക്കൻ റിപ്പബ്ലിക്കോംഗോ - ബ്രാസവില്ലിസ്വിറ" + - "്റ്സർലാൻഡ്കോട്ട് ഡി വാർകുക്ക് ദ്വീപുകൾചിലികാമറൂൺചൈനകൊളംബിയക്ലിപ്പെർട്ട" + - "ൻ ദ്വീപ്കോസ്റ്ററിക്കക്യൂബകേപ്പ് വെർദെകുറാകാവോക്രിസ്മസ് ദ്വീപ്സൈപ്രസ്ചെ" + - "ക്ക് റിപ്പബ്ലിക്ജർമനിഡീഗോ ഗ്രാഷ്യദിജിബൗട്ടിഡെൻമാർക്ക്ഡൊമിനിക്കഡൊമിനിക്" + - "കൻ റിപ്പബ്ലിക്അൾജീരിയസെയൂത്ത ആൻഡ് മെലിയഇക്വഡോർഎസ്റ്റോണിയ\u200dഈജിപ്ത്പ" + - "ശ്ചിമ സഹാറഎറിത്രിയസ്\u200cപെയിൻഎത്യോപ്യയൂറോപ്യൻ യൂണിയൻഫിൻലാൻഡ്ഫിജിഫാക്" + - "ക്\u200cലാന്റ് ദ്വീപുകൾമൈക്രോനേഷ്യഫറോ ദ്വീപുകൾഫ്രാൻസ്ഗാബൺയുണൈറ്റഡ് കിം" + - "ഗ്ഡംഗ്രനേഡജോർജ്ജിയഫ്രഞ്ച് ഗയാനഗേൺസിഘാനജിബ്രാൾട്ടർഗ്രീൻലാൻറ്ഗാംബിയഗിനിയ" + - "ഗ്വാഡലൂപ്പ്ഇക്വറ്റോറിയൽ ഗിനിയഗ്രീസ്ദക്ഷിണ ജോർജ്ജിയയും ദക്ഷിണ സാൻഡ്" + - "\u200cവിച്ച് ദ്വീപുകളുംഗ്വാട്ടിമാലഗ്വാംഗിനിയ-ബിസൗഗയാനഹോങ്കോങ്ങ് (SAR) ചൈ" + - "നഹിയേർഡും മക്\u200cഡൊണാൾഡ് ദ്വീപുകളുംഹോണ്ടുറാസ്ക്രൊയേഷ്യഹെയ്തിഹംഗറികാന" + - "റി ദ്വീപുകൾഇന്തോനേഷ്യഅയർലൻഡ്ഇസ്രായേൽഐൽ ഓഫ് മാൻഇന്ത്യബ്രിട്ടീഷ് ഇന്ത്യൻ" + - " മഹാസമുദ്ര പ്രദേശംഇറാഖ്ഇറാൻഐസ്\u200cലാന്റ്ഇറ്റലിജേഴ്സിജമൈക്കജോർദ്ദാൻജപ്പ" + - "ാൻകെനിയകിർഗിസ്ഥാൻകംബോഡിയകിരിബാട്ടികോമൊറോസ്സെന്റ് കിറ്റ്\u200cസും നെവിസ" + - "ുംഉത്തരകൊറിയദക്ഷിണകൊറിയകുവൈറ്റ്കേമാൻ ദ്വീപുകൾകസാഖിസ്ഥാൻലാവോസ്ലെബനൻസെൻറ" + - "് ലൂസിയലിച്ചൺസ്റ്റൈൻശ്രീലങ്കലൈബീരിയലെസോതോലിത്വാനിയലക്സംബർഗ്ലാറ്റ്വിയലി" + - "ബിയമൊറോക്കൊമൊണാക്കോമൾഡോവമോണ്ടെനെഗ്രോസെൻറ് മാർട്ടിൻമഡഗാസ്കർമാർഷൽ\u200d" + - "\u200d ദ്വീപുകൾമാസിഡോണിയമാലിമ്യാൻമാർ (ബർമ്മ)മംഗോളിയമക്കാവു (SAR) ചൈനഉത്ത" + - "ര മറിയാനാ ദ്വീപുകൾമാർട്ടിനിക്ക്മൗറിറ്റാനിയമൊണ്ടെസരത്ത്മാൾട്ടമൗറീഷ്യസ്മ" + - "ാലിദ്വീപ്മലാവിമെക്സിക്കോമലേഷ്യമൊസാംബിക്ക്നമീബിയന്യൂ കാലിഡോണിയനൈജർനോർഫോ" + - "ക് ദ്വീപ്നൈജീരിയനിക്കരാഗ്വനെതർലാൻഡ്\u200cസ്നോർവെനേപ്പാൾനൗറുന്യൂയിന്യൂസ" + - "ിലാൻറ്ഒമാൻപനാമപെറുഫ്രഞ്ച് പോളിനേഷ്യപാപ്പുവ ന്യൂ ഗിനിയഫിലിപ്പീൻസ്പാക്കി" + - "സ്ഥാൻപോളണ്ട്സെന്റ് പിയറിയും മിക്കലണുംപിറ്റ്\u200cകെയ്\u200cൻ ദ്വീപുകൾപ" + - "്യൂർട്ടോ റിക്കോപാലസ്\u200cതീൻ പ്രദേശങ്ങൾപോർച്ചുഗൽപലാവുപരാഗ്വേഖത്തർദ്വീ" + - "പസമൂഹംറീയൂണിയൻറൊമാനിയസെർബിയറഷ്യറുവാണ്ടസൗദി അറേബ്യസോളമൻ\u200d ദ്വീപുകൾസ" + - "ീഷെൽസ്സുഡാൻസ്വീഡൻസിംഗപ്പുർസെൻറ് ഹെലീനസ്ലോവേനിയസ്വാൽബാഡും ജാൻ മായേനുംസ്" + - "ലോവാക്യസിയെറ ലിയോൺസാൻ മറിനോസെനഗൽസോമാലിയസുരിനാംദക്ഷിണ സുഡാൻസാവോ ടോമും പ" + - "്രിൻസിപെയുംഎൽ സാൽവദോർസിന്റ് മാർട്ടെൻസിറിയസ്വാസിലാൻറ്ട്രസ്റ്റൻ ഡ കൂനടർക" + - "്ക്\u200cസും കെയ്\u200cക്കോ ദ്വീപുകളുംഛാഡ്ഫ്രഞ്ച് ദക്ഷിണ ഭൂപ്രദേശംടോഗോ" + - "തായ്\u200cലാൻഡ്താജിക്കിസ്ഥാൻടോക്കെലൂതിമോർ-ലെസ്റ്റെതുർക്ക്മെനിസ്ഥാൻടുണീ" + - "ഷ്യടോംഗതുർക്കിട്രിനിഡാഡും ടുബാഗോയുംടുവാലുതായ്\u200cവാൻടാൻസാനിയഉക്രെയ്" + - "\u200cൻഉഗാണ്ടയു.എസ്. ദ്വീപസമൂഹങ്ങൾഐക്യരാഷ്ട്രസഭഅമേരിക്കൻ ഐക്യനാടുകൾഉറുഗ്" + - "വേഉസ്\u200cബെക്കിസ്ഥാൻവത്തിക്കാൻസെന്റ് വിൻസെന്റും ഗ്രനെഡൈൻസുംവെനിസ്വേല" + - "ബ്രിട്ടീഷ് വെർജിൻ ദ്വീപുകൾയു.എസ്. വെർജിൻ ദ്വീപുകൾവിയറ്റ്നാംവന്വാതുവാലി" + - "സ് ആന്റ് ഫ്യൂച്യുനസമോവകൊസോവൊയെമൻമയോട്ടിദക്ഷിണാഫ്രിക്കസാംബിയസിംബാബ്" + - "\u200cവേഅജ്ഞാത പ്രദേശംലോകംആഫ്രിക്കവടക്കേ അമേരിക്കതെക്കേ അമേരിക്കഓഷ്യാനിയ" + - "പശ്ചിമ ആഫ്രിക്കമദ്ധ്യഅമേരിക്കകിഴക്കൻ ആഫ്രിക്കഉത്തരാഫ്രിക്കമദ്ധ്യആഫ്രിക" + - "്കതെക്കേ ആഫ്രിക്കഅമേരിക്കകൾവടക്കൻ അമേരിക്കകരീബിയൻകിഴക്കൻ ഏഷ്യതെക്കേ ഏഷ" + - "്യതെക്ക്-കിഴക്കൻ ഏഷ്യതെക്കേ യൂറോപ്പ്ഓസ്\u200cട്രേലിയയും ന്യൂസിലാൻഡുംമെ" + - "ലനേഷ്യമൈക്രോനേഷ്യൻ പ്രദേശംപോളിനേഷ്യഏഷ്യമദ്ധ്യേഷ്യപശ്ചിമേഷ്യയൂറോപ്പ്കിഴ" + - "ക്കൻ യൂറോപ്പ്വടക്കേ യൂറോപ്പ്പശ്ചിമ യൂറോപ്പ്ലാറ്റിനമേരിക്ക" - -var mlRegionIdx = []uint16{ // 292 elements + 0x143b, 0x1445, 0x1476, 0x1484, 0x1494, 0x14b1, 0x14b9, 0x14c5, + 0x14e2, 0x14fb, 0x150b, 0x1526, 0x1547, 0x1562, 0x157d, 0x1596, + 0x15ad, 0x15bb, 0x15f3, 0x15ff, 0x1618, 0x162d, 0x164e, 0x1665, + 0x167d, 0x1691, 0x16b6, 0x16ca, 0x16d4, 0x16f1, 0x170a, 0x1716, + 0x1731, 0x174c, 0x1767, 0x1767, 0x1786, +} // Size: 610 bytes + +const mlRegionStr string = "" + // Size: 9184 bytes + "അസൻഷൻ ദ്വീപ്അൻഡോറയുണൈറ്റഡ് അറബ് എമിറൈറ്റ്\u200cസ്അഫ്\u200cഗാനിസ്ഥാൻആൻറിഗ" + + "്വയും ബർബുഡയുംആൻഗ്വില്ലഅൽബേനിയഅർമേനിയഅംഗോളഅന്റാർട്ടിക്കഅർജന്റീനഅമേരിക്" + + "കൻ സമോവഓസ്ട്രിയഓസ്\u200cട്രേലിയഅറൂബഅലൻഡ് ദ്വീപുകൾഅസർബൈജാൻബോസ്നിയയും ഹെ" + + "ർസഗോവിനയുംബാർബഡോസ്ബംഗ്ലാദേശ്ബെൽജിയംബർക്കിന ഫാസോബൾഗേറിയബഹ്റിൻബറുണ്ടിബെന" + + "ിൻസെന്റ് ബാർത്തലമിബർമുഡബ്രൂണൈബൊളീവിയകരീബിയൻ നെതർലാൻഡ്സ്ബ്രസീൽബഹാമാസ്ഭൂ" + + "ട്ടാൻബൗവെട്ട് ദ്വീപ്ബോട്സ്വാനബെലറൂസ്ബെലീസ്കാനഡകോക്കസ് (കീലിംഗ്) ദ്വീപു" + + "കൾകോംഗോ - കിൻഷാസസെൻട്രൽ ആഫ്രിക്കൻ റിപ്പബ്ലിക്ക്കോംഗോ - ബ്രാസവില്ലിസ്വി" + + "റ്റ്സർലാൻഡ്കോട്ട് ഡി വാർകുക്ക് ദ്വീപുകൾചിലികാമറൂൺചൈനകൊളംബിയക്ലിപ്പെർട്" + + "ടൻ ദ്വീപ്കോസ്റ്ററിക്കക്യൂബകേപ്പ് വേർഡ്കുറാകാവോക്രിസ്മസ് ദ്വീപ്സൈപ്രസ്ച" + + "െക്കിയജർമ്മനിഡീഗോ ഗ്രാഷ്യദിജിബൗട്ടിഡെൻമാർക്ക്ഡൊമിനിക്കഡൊമിനിക്കൻ റിപ്പ" + + "ബ്ലിക്ക്അൾജീരിയസെയൂത്ത ആൻഡ് മെലിയഇക്വഡോർഎസ്റ്റോണിയ\u200dഈജിപ്ത്പശ്ചിമ " + + "സഹാറഎറിത്രിയസ്\u200cപെയിൻഎത്യോപ്യയൂറോപ്യൻ യൂണിയൻയൂറോസോൺഫിൻലാൻഡ്ഫിജിഫാക" + + "്ക്\u200cലാന്റ് ദ്വീപുകൾമൈക്രോനേഷ്യഫറോ ദ്വീപുകൾഫ്രാൻസ്ഗാബൺയുണൈറ്റഡ് കി" + + "ംഗ്ഡംഗ്രനേഡജോർജ്ജിയഫ്രഞ്ച് ഗയാനഗേൺസിഘാനജിബ്രാൾട്ടർഗ്രീൻലാൻറ്ഗാംബിയഗിനി" + + "യഗ്വാഡലൂപ്പ്ഇക്വറ്റോറിയൽ ഗിനിയഗ്രീസ്ദക്ഷിണ ജോർജ്ജിയയും ദക്ഷിണ സാൻഡ്" + + "\u200cവിച്ച് ദ്വീപുകളുംഗ്വാട്ടിമാലഗ്വാംഗിനിയ-ബിസൗഗയാനഹോങ്കോങ് (SAR) ചൈനഹ" + + "ിയേർഡും മക്\u200cഡൊണാൾഡ് ദ്വീപുകളുംഹോണ്ടുറാസ്ക്രൊയേഷ്യഹെയ്തിഹംഗറികാനറി" + + " ദ്വീപുകൾഇന്തോനേഷ്യഅയർലൻഡ്ഇസ്രായേൽഐൽ ഓഫ് മാൻഇന്ത്യബ്രിട്ടീഷ് ഇന്ത്യൻ മഹാ" + + "സമുദ്ര പ്രദേശംഇറാഖ്ഇറാൻഐസ്\u200cലാന്റ്ഇറ്റലിജേഴ്സിജമൈക്കജോർദ്ദാൻജപ്പാൻ" + + "കെനിയകിർഗിസ്ഥാൻകംബോഡിയകിരിബാട്ടികോമൊറോസ്സെന്റ് കിറ്റ്\u200cസും നെവിസും" + + "ഉത്തരകൊറിയദക്ഷിണകൊറിയകുവൈറ്റ്കേയ്മാൻ ദ്വീപുകൾകസാഖിസ്ഥാൻലാവോസ്ലെബനൻസെന്" + + "റ് ലൂസിയലിച്ചൺസ്റ്റൈൻശ്രീലങ്കലൈബീരിയലെസോതോലിത്വാനിയലക്സംബർഗ്ലാറ്റ്വിയല" + + "ിബിയമൊറോക്കൊമൊണാക്കോമൾഡോവമോണ്ടെനെഗ്രോസെന്റ് മാർട്ടിൻമഡഗാസ്കർമാർഷൽ ദ്വീ" + + "പുകൾമാസിഡോണിയമാലിമ്യാൻമാർ (ബർമ്മ)മംഗോളിയമക്കാവു (SAR) ചൈനഉത്തര മറിയാനാ" + + " ദ്വീപുകൾമാർട്ടിനിക്ക്മൗറിറ്റാനിയമൊണ്ടെസരത്ത്മാൾട്ടമൗറീഷ്യസ്മാലിദ്വീപ്മല" + + "ാവിമെക്സിക്കോമലേഷ്യമൊസാംബിക്ക്നമീബിയന്യൂ കാലിഡോണിയനൈജർനോർഫോക് ദ്വീപ്നൈ" + + "ജീരിയനിക്കരാഗ്വനെതർലാൻഡ്\u200cസ്നോർവെനേപ്പാൾനൗറുന്യൂയിന്യൂസിലാൻറ്ഒമാൻപ" + + "നാമപെറുഫ്രഞ്ച് പോളിനേഷ്യപാപ്പുവ ന്യൂ ഗിനിയഫിലിപ്പീൻസ്പാക്കിസ്ഥാൻപോളണ്ട" + + "്സെന്റ് പിയറിയും മിക്കലണുംപിറ്റ്\u200cകെയ്\u200cൻ ദ്വീപുകൾപോർട്ടോ റിക്" + + "കോപാലസ്\u200cതീൻ പ്രദേശങ്ങൾപോർച്ചുഗൽപലാവുപരാഗ്വേഖത്തർദ്വീപസമൂഹംറീയൂണിയ" + + "ൻറൊമാനിയസെർബിയറഷ്യറുവാണ്ടസൗദി അറേബ്യസോളമൻ ദ്വീപുകൾസീഷെൽസ്സുഡാൻസ്വീഡൻസി" + + "ംഗപ്പൂർസെന്റ് ഹെലീനസ്ലോവേനിയസ്വാൽബാഡും ജാൻ മായേനുംസ്ലോവാക്യസിയെറ ലിയോൺ" + + "സാൻ മറിനോസെനഗൽസോമാലിയസുരിനാംദക്ഷിണ സുഡാൻസാവോ ടോമും പ്രിൻസിപെയുംഎൽ സാൽവ" + + "ദോർസിന്റ് മാർട്ടെൻസിറിയസ്വാസിലാന്റ്ട്രസ്റ്റൻ ഡ കൂനടർക്ക്\u200cസും കെയ്" + + "\u200cക്കോ ദ്വീപുകളുംഛാഡ്ഫ്രഞ്ച് ദക്ഷിണ ഭൂപ്രദേശംടോഗോതായ്\u200cലാൻഡ്താജി" + + "ക്കിസ്ഥാൻടോക്കെലൂതിമോർ-ലെസ്റ്റെതുർക്ക്മെനിസ്ഥാൻടുണീഷ്യടോംഗതുർക്കിട്രിന" + + "ിഡാഡും ടുബാഗോയുംടുവാലുതായ്\u200cവാൻടാൻസാനിയഉക്രെയ്\u200cൻഉഗാണ്ടയു.എസ്." + + " ദ്വീപസമൂഹങ്ങൾഐക്യരാഷ്ട്രസഭഅമേരിക്കൻ ഐക്യനാടുകൾഉറുഗ്വേഉസ്\u200cബെക്കിസ്ഥ" + + "ാൻവത്തിക്കാൻസെന്റ് വിൻസെന്റും ഗ്രനെഡൈൻസുംവെനിസ്വേലബ്രിട്ടീഷ് വെർജിൻ ദ്" + + "വീപുകൾയു.എസ്. വെർജിൻ ദ്വീപുകൾവിയറ്റ്നാംവന്വാതുവാലിസ് ആന്റ് ഫ്യൂച്യുനസമ" + + "ോവകൊസോവൊയെമൻമയോട്ടിദക്ഷിണാഫ്രിക്കസാംബിയസിംബാബ്\u200cവേഅജ്ഞാത പ്രദേശംലോ" + + "കംആഫ്രിക്കവടക്കേ അമേരിക്കതെക്കേ അമേരിക്കഓഷ്യാനിയപശ്ചിമ ആഫ്രിക്കമദ്ധ്യഅ" + + "മേരിക്കകിഴക്കൻ ആഫ്രിക്കഉത്തരാഫ്രിക്കമദ്ധ്യആഫ്രിക്കതെക്കേ ആഫ്രിക്കഅമേരി" + + "ക്കകൾവടക്കൻ അമേരിക്കകരീബിയൻകിഴക്കൻ ഏഷ്യതെക്കേ ഏഷ്യതെക്ക്-കിഴക്കൻ ഏഷ്യത" + + "െക്കേ യൂറോപ്പ്ഓസ്\u200cട്രേലിയയും ന്യൂസിലാൻഡുംമെലനേഷ്യമൈക്രോനേഷ്യൻ പ്ര" + + "ദേശംപോളിനേഷ്യഏഷ്യമദ്ധ്യേഷ്യപശ്ചിമേഷ്യയൂറോപ്പ്കിഴക്കൻ യൂറോപ്പ്വടക്കേ യൂ" + + "റോപ്പ്പശ്ചിമ യൂറോപ്പ്ലാറ്റിനമേരിക്ക" + +var mlRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F - 0x0000, 0x0022, 0x0034, 0x0081, 0x00a8, 0x00df, 0x00fa, 0x010f, - 0x0124, 0x0133, 0x0157, 0x016c, 0x0194, 0x01ac, 0x01cd, 0x01d9, - 0x0201, 0x0219, 0x025c, 0x0274, 0x0292, 0x02a7, 0x02cf, 0x02e4, - 0x02f6, 0x030b, 0x031a, 0x0348, 0x0357, 0x0369, 0x037e, 0x03b5, - 0x03c7, 0x03dc, 0x03f1, 0x041c, 0x0437, 0x044c, 0x045e, 0x046a, - 0x04b0, 0x04d4, 0x0527, 0x055a, 0x0587, 0x05aa, 0x05d5, 0x05e1, - 0x05f3, 0x05fc, 0x0611, 0x064b, 0x066f, 0x067e, 0x06a0, 0x06b8, - 0x06e6, 0x06fb, 0x072f, 0x073e, 0x0760, 0x077e, 0x079c, 0x07b7, + 0x0000, 0x0022, 0x0031, 0x007e, 0x00a5, 0x00dc, 0x00f7, 0x010c, + 0x0121, 0x0130, 0x0157, 0x016f, 0x0197, 0x01af, 0x01d0, 0x01dc, + 0x0204, 0x021c, 0x025f, 0x0277, 0x0295, 0x02aa, 0x02cc, 0x02e1, + 0x02f3, 0x0308, 0x0317, 0x0345, 0x0354, 0x0366, 0x037b, 0x03b2, + 0x03c4, 0x03d9, 0x03ee, 0x0419, 0x0434, 0x0449, 0x045b, 0x0467, + 0x04ad, 0x04d1, 0x052a, 0x055d, 0x058a, 0x05ad, 0x05d8, 0x05e4, + 0x05f6, 0x05ff, 0x0614, 0x064e, 0x0672, 0x0681, 0x06a3, 0x06bb, + 0x06e9, 0x06fe, 0x0713, 0x0728, 0x074a, 0x0768, 0x0786, 0x07a1, // Entry 40 - 7F - 0x07f7, 0x080c, 0x083e, 0x0853, 0x0874, 0x0889, 0x08a8, 0x08c0, - 0x08d8, 0x08f0, 0x091b, 0x091b, 0x0933, 0x093f, 0x097f, 0x09a0, - 0x09c2, 0x09d7, 0x09e3, 0x0a14, 0x0a26, 0x0a3e, 0x0a60, 0x0a6f, - 0x0a78, 0x0a99, 0x0ab7, 0x0ac9, 0x0ad8, 0x0af9, 0x0b2d, 0x0b3f, - 0x0bca, 0x0beb, 0x0bfa, 0x0c16, 0x0c22, 0x0c50, 0x0ca9, 0x0cc7, - 0x0ce2, 0x0cf4, 0x0d03, 0x0d2b, 0x0d49, 0x0d5e, 0x0d76, 0x0d90, - 0x0da2, 0x0e08, 0x0e17, 0x0e23, 0x0e41, 0x0e53, 0x0e65, 0x0e77, - 0x0e8f, 0x0ea1, 0x0eb0, 0x0ece, 0x0ee3, 0x0f01, 0x0f19, 0x0f60, + 0x07e7, 0x07fc, 0x082e, 0x0843, 0x0864, 0x0879, 0x0898, 0x08b0, + 0x08c8, 0x08e0, 0x090b, 0x0920, 0x0938, 0x0944, 0x0984, 0x09a5, + 0x09c7, 0x09dc, 0x09e8, 0x0a19, 0x0a2b, 0x0a43, 0x0a65, 0x0a74, + 0x0a7d, 0x0a9e, 0x0abc, 0x0ace, 0x0add, 0x0afe, 0x0b32, 0x0b44, + 0x0bcf, 0x0bf0, 0x0bff, 0x0c1b, 0x0c27, 0x0c4f, 0x0ca8, 0x0cc6, + 0x0ce1, 0x0cf3, 0x0d02, 0x0d2a, 0x0d48, 0x0d5d, 0x0d75, 0x0d8f, + 0x0da1, 0x0e07, 0x0e16, 0x0e22, 0x0e40, 0x0e52, 0x0e64, 0x0e76, + 0x0e8e, 0x0ea0, 0x0eaf, 0x0ecd, 0x0ee2, 0x0f00, 0x0f18, 0x0f5f, // Entry 80 - BF - 0x0f7e, 0x0f9f, 0x0fb7, 0x0fdf, 0x0ffd, 0x100f, 0x101e, 0x103d, - 0x1064, 0x107c, 0x1091, 0x10a3, 0x10be, 0x10d9, 0x10f4, 0x1103, - 0x111b, 0x1133, 0x1142, 0x1166, 0x118e, 0x11a6, 0x11d4, 0x11ef, - 0x11fb, 0x1225, 0x123a, 0x125f, 0x129d, 0x12c4, 0x12e5, 0x1309, - 0x131b, 0x1336, 0x1354, 0x1363, 0x1381, 0x1393, 0x13b4, 0x13c6, - 0x13ee, 0x13fa, 0x1422, 0x1437, 0x1455, 0x1479, 0x1488, 0x149d, - 0x14a9, 0x14bb, 0x14dc, 0x14e8, 0x14f4, 0x1500, 0x1531, 0x1563, - 0x1584, 0x15a5, 0x15ba, 0x1601, 0x1641, 0x166f, 0x16a9, 0x16c4, + 0x0f7d, 0x0f9e, 0x0fb6, 0x0fe4, 0x1002, 0x1014, 0x1023, 0x1045, + 0x106c, 0x1084, 0x1099, 0x10ab, 0x10c6, 0x10e1, 0x10fc, 0x110b, + 0x1123, 0x113b, 0x114a, 0x116e, 0x1199, 0x11b1, 0x11d9, 0x11f4, + 0x1200, 0x122a, 0x123f, 0x1264, 0x12a2, 0x12c9, 0x12ea, 0x130e, + 0x1320, 0x133b, 0x1359, 0x1368, 0x1386, 0x1398, 0x13b9, 0x13cb, + 0x13f3, 0x13ff, 0x1427, 0x143c, 0x145a, 0x147e, 0x148d, 0x14a2, + 0x14ae, 0x14c0, 0x14e1, 0x14ed, 0x14f9, 0x1505, 0x1536, 0x1568, + 0x1589, 0x15aa, 0x15bf, 0x1606, 0x1646, 0x166e, 0x16a8, 0x16c3, // Entry C0 - FF - 0x16d3, 0x16e8, 0x16f7, 0x1715, 0x172d, 0x1742, 0x1754, 0x1760, - 0x1775, 0x1794, 0x17bf, 0x17d4, 0x17e3, 0x17f5, 0x1810, 0x182f, - 0x184a, 0x1888, 0x18a3, 0x18c2, 0x18db, 0x18ea, 0x18ff, 0x1914, - 0x1936, 0x1977, 0x1993, 0x19be, 0x19cd, 0x19ee, 0x1a17, 0x1a70, - 0x1a7c, 0x1ac0, 0x1acc, 0x1aea, 0x1b11, 0x1b29, 0x1b51, 0x1b81, - 0x1b96, 0x1ba2, 0x1bb7, 0x1bf4, 0x1c06, 0x1c1e, 0x1c36, 0x1c51, - 0x1c63, 0x1c9c, 0x1cc3, 0x1cfd, 0x1d12, 0x1d3f, 0x1d5d, 0x1db0, - 0x1dcb, 0x1e15, 0x1e52, 0x1e70, 0x1e85, 0x1ec3, 0x1ecf, 0x1ee1, + 0x16d2, 0x16e7, 0x16f6, 0x1714, 0x172c, 0x1741, 0x1753, 0x175f, + 0x1774, 0x1793, 0x17bb, 0x17d0, 0x17df, 0x17f1, 0x180c, 0x182e, + 0x1849, 0x1887, 0x18a2, 0x18c1, 0x18da, 0x18e9, 0x18fe, 0x1913, + 0x1935, 0x1976, 0x1992, 0x19bd, 0x19cc, 0x19f0, 0x1a19, 0x1a72, + 0x1a7e, 0x1ac2, 0x1ace, 0x1aec, 0x1b13, 0x1b2b, 0x1b53, 0x1b83, + 0x1b98, 0x1ba4, 0x1bb9, 0x1bf6, 0x1c08, 0x1c20, 0x1c38, 0x1c53, + 0x1c65, 0x1c9e, 0x1cc5, 0x1cff, 0x1d14, 0x1d41, 0x1d5f, 0x1db2, + 0x1dcd, 0x1e17, 0x1e54, 0x1e72, 0x1e87, 0x1ec5, 0x1ed1, 0x1ee3, // Entry 100 - 13F - 0x1eed, 0x1f02, 0x1f2c, 0x1f3e, 0x1f5c, 0x1f84, 0x1f90, 0x1fa8, - 0x1fd3, 0x1ffe, 0x2016, 0x2041, 0x206b, 0x2099, 0x20c0, 0x20ea, - 0x2115, 0x2133, 0x215e, 0x2173, 0x2195, 0x21b4, 0x21e9, 0x2214, - 0x2263, 0x227b, 0x22b5, 0x22d0, 0x22dc, 0x22fa, 0x2318, 0x2330, - 0x235e, 0x2389, 0x23b4, 0x23de, -} // Size: 608 bytes - -const mnRegionStr string = "" + // Size: 5564 bytes - "Аскенсион аралАндорраАрабын Нэгдсэн ЭмиратАфганистанАнтигуа ба БарбудаАн" + - "гилаАлбаниАрмениАнголАнтарктикАргентинАмерикийн СамоаАвстриАвстралиАруб" + - "аАландын АрлуудАзербайжанБосни ГерцеговинБарбадосБангладешБелгиБуркина " + - "фасоБолгарБахрейнБурундиБенинСент БартельмиБермудБрунейБоливиКарибын Ни" + - "дерландБразилБагамБутанБуветын арлуудБотсванаБеларусьБелизКанадКокос (К" + - "ийлинг) арлуудКонго-КиншасаТөв Африкийн Бүгд Найрамдах УлсКонго Браззав" + - "ильШвейцариКот д’ИвуарКүүкийн арлуудЧилиКамерунХятадКолумбКлиппертон ар" + - "алКоста РикаКубаКапе ВердеКуракаоЗул сарын аралКипрБүгд Найрамдах Чех У" + - "лсГерманДиего ГарсиаДжибутиДаниДоминикБүгд Найрамдах Доминикан УлсАлжир" + - "Сеута ба МелильяЭквадорЭстониЕгипетБаруун СахарЭритриИспаниЭтиопЕвропын" + - " ХолбооФинландФижиФолькландын АрлуудМикронезиФароэ АрлуудФранцГабонИх Бр" + - "итаниГренадаГүржФранцын ГайанаГернсиГанаГибралтарГренландГамбиГвинейГва" + - "делупЭкваторын ГвинейГрекӨмнөд Жоржиа ба Өмнөд Сэндвичийн АрлуудГватема" + - "лГуамГвиней-БисауГайанаБНХАУ-ын Тусгай захиргааны бүс Хонг КонгХэрд бол" + - "он Макдоналд арлуудГондурасХорватГаитиУнгарКанарын арлуудИндонезиИрланд" + - "ИзраильМэн АралЭнэтхэгБританийн харьяа Энэтхэгийн далай дахь нутаг дэвс" + - "гэрүүдИракИранИсландИталиЖерсиЯмайкЙорданЯпонКениКыргызстанКамбожКириба" + - "тиКоморосСент-Киттс ба НевисХойд СолонгосӨмнөд СолонгосКувейтКайманы Ар" + - "луудКазахстанЛаосЛиванСент ЛюсиаЛихтенштейнШри ЛанкаЛибериЛесотоЛитваЛю" + - "ксембургЛатвиЛивиМароккоМонакоМолдавМонтенегроСент-МартинМадагаскарМарш" + - "аллын арлуудМакедонМалиМьянмар (Бурма)МонголБНХАУ-ын Тусгай захиргааны " + - "бүс МакаоХойд Марианы арлуудМартиникМавританиМонтсерратМальтаМавритусМа" + - "льдивМалавиМексикМалайзМозамбикНамибиШинэ КаледониНигерНорфолк арлуудНи" + - "гериНикарагуаНидерландНорвегиБалбаНауруНиуэШинэ ЗеландОманПанамПеруФран" + - "цын ПолинезПапуа Шинэ ГвинейФилиппинПакистанПольшСэнт Пьер ба МикелонПи" + - "ткэрн арлуудПуэрто РикоПалестины нутаг дэвсгэрүүдПортугальПалауПарагвай" + - "КатарНомхон далайг тойрсон улс орнуудРеюньонРумынСербиОросРуандаСаудын " + - "АрабСоломоны АрлуудСейшелСуданШведСингапурСент ХеленаСловениСвалбард ба" + - " Ян МайенСловакСьерра-ЛеонеСан-МариноСенегалСомалиСуринамӨмнөд СуданСан-" + - "Томе ба ПринсипиЭль СальвадорСинт МартенСириСвазиландТристан да КуньяТу" + - "рк ба Кайкосын АрлуудЧадФранцын өмнөд газар нутагТогоТайландТажикистанТ" + - "окелауТимор-ЛестеТуркменистанТунисТонгаТуркТринидад ТобагоТувалуТайвань" + - "ТанзаниУкраинУгандаАНУ-ын тойрсон арлуудНэгдсэн Үндэстний БайгууллагаАм" + - "ерикийн Нэгдсэн УлсУругвайУзбекистанВатикан хот улсСэнт Винсэнт ба Грен" + - "адинВенесуэлБританийн Виржиний АрлуудАНУ-ын Виржиний АрлуудВьетнамВануа" + - "туУоллис ба ФутунаСамоаКосовоЙеменМайоттеӨмнөд Африк тивЗамбиЗимбабвеТо" + - "дорхойгүй бүсДэлхийАфрикХойд АмерикӨмнөд АмерикНомхон далайн орнуудБару" + - "ун АфрикТөв АмерикЗүүн АфрикХойд АфрикТөв АфрикӨмнөд АфрикАмерикХойд Ам" + - "ерик тивКарибынЗүүн АзиӨмнөд АзиЗүүн өмнөд АзиӨмнөд ЕвропАвстралиазиМел" + - "анезиМикронезийн бүсПолинезиАзиТөв АзиБаруун АзиЕвропЗүүн ЕвропХойд Евр" + - "опБаруун ЕвропЛатин Америк" - -var mnRegionIdx = []uint16{ // 292 elements + 0x1eef, 0x1f04, 0x1f2e, 0x1f40, 0x1f5e, 0x1f86, 0x1f92, 0x1faa, + 0x1fd5, 0x2000, 0x2018, 0x2043, 0x206d, 0x209b, 0x20c2, 0x20ec, + 0x2117, 0x2135, 0x2160, 0x2175, 0x2197, 0x21b6, 0x21eb, 0x2216, + 0x2265, 0x227d, 0x22b7, 0x22d2, 0x22de, 0x22fc, 0x231a, 0x2332, + 0x2360, 0x238b, 0x23b6, 0x23b6, 0x23e0, +} // Size: 610 bytes + +const mnRegionStr string = "" + // Size: 5609 bytes + "Асенсион аралАндорраАрабын Нэгдсэн Эмират УлсАфганистанАнтигуа ба Барбуд" + + "аАнгильяАлбаниАрмениАнголАнтарктидАргентинАмерикийн СамоаАвстриАвстрали" + + "АрубаАландын арлуудАзербайжанБосни-ГерцеговинБарбадосБангладешБельгиБур" + + "кина ФасоБолгарБахрейнБурундиБенинСент-БартельмиБермудаБрунейБоливиКари" + + "бын НидерландБразилБагамын арлуудБутанБуве аралБотсванаБеларусьБелизКан" + + "адКокос (Кийлинг) арлуудКонго-КиншасаТөв Африкийн Бүгд Найрамдах УлсКон" + + "го БраззавильШвейцарьКот-д’ИвуарКүүкийн арлуудЧилиКамерунХятадКолумбиКл" + + "иппертон аралКоста-РикаКубаКабо-ВердеКюрасаоЗул сарын аралКипрЧехГерман" + + "Диего ГарсиаДжибутиДаниДоминикаБүгд Найрамдах Доминикан УлсАлжирСеута б" + + "а МелильяЭквадорЭстониЕгипетБаруун СахарЭритрейИспаниЭтиопЕвропын Холбо" + + "оЕвро бүсФинландФижиФолклендийн арлуудМикронезиФарерын арлуудФранцГабон" + + "Их БританиГренадаГүржФранцын ГвианаГернсиГанаГибралтарГренландГамбиГвин" + + "ейГваделупЭкваторын ГвинейГрекӨмнөд Жоржиа ба Өмнөд Сэндвичийн АрлуудГв" + + "атемалГуамГвиней-БисауГайанаБНХАУ-ын Тусгай захиргааны бүс Хонг КонгХер" + + "д ба Макдональдийн арлуудГондурасХорватГаитиУнгарКанарын арлуудИндонезИ" + + "рландИзраильМэн АралЭнэтхэгБританийн харьяа Энэтхэгийн далай дахь нутаг" + + " дэвсгэрИракИранИсландИталиЖерсиЯмайкаЙорданЯпонКениКыргызстанКамбожКири" + + "батиКоморын арлуудСент-Киттс ба НевисХойд СолонгосӨмнөд СолонгосКувейтК" + + "айманы арлуудКазахстанЛаосЛиванСент ЛюсиаЛихтенштейнШри-ЛанкаЛибериЛесо" + + "тоЛитваЛюксембургЛатвиЛивиМороккоМонакоМолдавМонтенегроСент-МартинМадаг" + + "аскарМаршаллын арлуудМакедонМалиМьянмарМонголБНХАУ-ын Тусгай захиргааны" + + " бүс МакаоХойд Марианы арлуудМартиникМавританиМонтсерратМальтаМаврикиМал" + + "ьдивМалавиМексикМалайзМозамбикНамибиШинэ КаледониНигерНорфолк аралНигер" + + "иНикарагуаНидерландНорвегиБалбаНауруНиуэШинэ ЗеландОманПанамПеруФранцын" + + " ПолинезПапуа Шинэ ГвинейФилиппинПакистанПольшСент-Пьер ба МикелоПиткэрн" + + " арлуудПуэрто-РикоПалестины нутаг дэвсгэрүүдПортугалПалауПарагвайКатарНо" + + "мхон далайг тойрсон улс орнуудРеюнионРумынСербиОросРуандаСаудын АрабСол" + + "омоны арлуудСейшелийн арлуудСуданШведСингапурСент ХеленаСловениСвалбард" + + " ба Ян МайенСловакСьерра-ЛеонеСан-МариноСенегалСомалиСуринамӨмнөд СуданС" + + "ан-Томе ба ПринсипиЭль СальвадорСинт МартенСириСвазиландТристан да Кунъ" + + "яТурк ба Кайкосын АрлуудЧадФранцын өмнөд газар нутагТогоТайландТажикист" + + "анТокелауТимор-ЛестеТуркменистанТунисТонгаТуркТринидад ба ТобагоТувалуТ" + + "айваньТанзаниУкраинУгандаАмерикийн Нэгдсэн Улсын бага арлуудНэгдсэн Үнд" + + "эстний БайгууллагаАмерикийн Нэгдсэн УлсУругвайУзбекистанВатикан хот улс" + + "Сент-Винсент ба ГренадинВенесуэлБританийн Виржиний АрлуудАНУ-ын Виржини" + + "й АрлуудВьетнамВануатуУоллис ба ФутунаСамоаКосовоЙеменМайоттаӨмнөд Афри" + + "кЗамбиЗимбабвеТодорхойгүй бүсДэлхийАфрикХойд АмерикӨмнөд АмерикНомхон д" + + "алайн орнуудБаруун АфрикТөв АмерикЗүүн АфрикХойд АфрикТөв АфрикӨмнөд Аф" + + "рик тивАмерикХойд Америк тивКарибынЗүүн АзиӨмнөд АзиЗүүн өмнөд АзиӨмнөд" + + " ЕвропАвстралиазиМеланезиМикронезийн бүсПолинезиАзиТөв АзиБаруун АзиЕвро" + + "пЗүүн ЕвропХойд ЕвропБаруун ЕвропЛатин Америк" + +var mnRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F - 0x0000, 0x001b, 0x0029, 0x0051, 0x0065, 0x0087, 0x0093, 0x009f, - 0x00ab, 0x00b5, 0x00c7, 0x00d7, 0x00f4, 0x0100, 0x0110, 0x011a, - 0x0135, 0x0149, 0x0168, 0x0178, 0x018a, 0x0194, 0x01ab, 0x01b7, - 0x01c5, 0x01d3, 0x01dd, 0x01f8, 0x0204, 0x0210, 0x021c, 0x023d, - 0x0249, 0x0253, 0x025d, 0x0278, 0x0288, 0x0298, 0x02a2, 0x02ac, - 0x02d4, 0x02ed, 0x0327, 0x0346, 0x0356, 0x036c, 0x0387, 0x038f, - 0x039d, 0x03a7, 0x03b3, 0x03d0, 0x03e3, 0x03eb, 0x03fe, 0x040c, - 0x0426, 0x042e, 0x0457, 0x0463, 0x047a, 0x0488, 0x0490, 0x049e, + 0x0000, 0x0019, 0x0027, 0x0056, 0x006a, 0x008c, 0x009a, 0x00a6, + 0x00b2, 0x00bc, 0x00ce, 0x00de, 0x00fb, 0x0107, 0x0117, 0x0121, + 0x013c, 0x0150, 0x016f, 0x017f, 0x0191, 0x019d, 0x01b4, 0x01c0, + 0x01ce, 0x01dc, 0x01e6, 0x0201, 0x020f, 0x021b, 0x0227, 0x0248, + 0x0254, 0x026f, 0x0279, 0x028a, 0x029a, 0x02aa, 0x02b4, 0x02be, + 0x02e6, 0x02ff, 0x0339, 0x0358, 0x0368, 0x037e, 0x0399, 0x03a1, + 0x03af, 0x03b9, 0x03c7, 0x03e4, 0x03f7, 0x03ff, 0x0412, 0x0420, + 0x043a, 0x0442, 0x0448, 0x0454, 0x046b, 0x0479, 0x0481, 0x0491, // Entry 40 - 7F - 0x04d3, 0x04dd, 0x04fb, 0x0509, 0x0515, 0x0521, 0x0538, 0x0544, - 0x0550, 0x055a, 0x0575, 0x0575, 0x0583, 0x058b, 0x05ae, 0x05c0, - 0x05d7, 0x05e1, 0x05eb, 0x05fe, 0x060c, 0x0614, 0x062f, 0x063b, - 0x0643, 0x0655, 0x0665, 0x066f, 0x067b, 0x068b, 0x06aa, 0x06b2, - 0x06fb, 0x070b, 0x0713, 0x072a, 0x0736, 0x0780, 0x07b3, 0x07c3, - 0x07cf, 0x07d9, 0x07e3, 0x07fe, 0x080e, 0x081a, 0x0828, 0x0837, - 0x0845, 0x08ad, 0x08b5, 0x08bd, 0x08c9, 0x08d3, 0x08dd, 0x08e7, - 0x08f3, 0x08fb, 0x0903, 0x0917, 0x0923, 0x0933, 0x0941, 0x0964, + 0x04c6, 0x04d0, 0x04ee, 0x04fc, 0x0508, 0x0514, 0x052b, 0x0539, + 0x0545, 0x054f, 0x056a, 0x0579, 0x0587, 0x058f, 0x05b2, 0x05c4, + 0x05df, 0x05e9, 0x05f3, 0x0606, 0x0614, 0x061c, 0x0637, 0x0643, + 0x064b, 0x065d, 0x066d, 0x0677, 0x0683, 0x0693, 0x06b2, 0x06ba, + 0x0703, 0x0713, 0x071b, 0x0732, 0x073e, 0x0788, 0x07bd, 0x07cd, + 0x07d9, 0x07e3, 0x07ed, 0x0808, 0x0816, 0x0822, 0x0830, 0x083f, + 0x084d, 0x08af, 0x08b7, 0x08bf, 0x08cb, 0x08d5, 0x08df, 0x08eb, + 0x08f7, 0x08ff, 0x0907, 0x091b, 0x0927, 0x0937, 0x0952, 0x0975, // Entry 80 - BF - 0x097d, 0x0998, 0x09a4, 0x09bf, 0x09d1, 0x09d9, 0x09e3, 0x09f6, - 0x0a0c, 0x0a1d, 0x0a29, 0x0a35, 0x0a3f, 0x0a53, 0x0a5d, 0x0a65, - 0x0a73, 0x0a7f, 0x0a8b, 0x0a9f, 0x0ab4, 0x0ac8, 0x0ae7, 0x0af5, - 0x0afd, 0x0b18, 0x0b24, 0x0b67, 0x0b8b, 0x0b9b, 0x0bad, 0x0bc1, - 0x0bcd, 0x0bdd, 0x0beb, 0x0bf7, 0x0c03, 0x0c0f, 0x0c1f, 0x0c2b, - 0x0c44, 0x0c4e, 0x0c69, 0x0c75, 0x0c87, 0x0c99, 0x0ca7, 0x0cb1, - 0x0cbb, 0x0cc3, 0x0cd8, 0x0ce0, 0x0cea, 0x0cf2, 0x0d0f, 0x0d2f, - 0x0d3f, 0x0d4f, 0x0d59, 0x0d7e, 0x0d99, 0x0dae, 0x0de0, 0x0df2, + 0x098e, 0x09a9, 0x09b5, 0x09d0, 0x09e2, 0x09ea, 0x09f4, 0x0a07, + 0x0a1d, 0x0a2e, 0x0a3a, 0x0a46, 0x0a50, 0x0a64, 0x0a6e, 0x0a76, + 0x0a84, 0x0a90, 0x0a9c, 0x0ab0, 0x0ac5, 0x0ad9, 0x0af8, 0x0b06, + 0x0b0e, 0x0b1c, 0x0b28, 0x0b6b, 0x0b8f, 0x0b9f, 0x0bb1, 0x0bc5, + 0x0bd1, 0x0bdf, 0x0bed, 0x0bf9, 0x0c05, 0x0c11, 0x0c21, 0x0c2d, + 0x0c46, 0x0c50, 0x0c67, 0x0c73, 0x0c85, 0x0c97, 0x0ca5, 0x0caf, + 0x0cb9, 0x0cc1, 0x0cd6, 0x0cde, 0x0ce8, 0x0cf0, 0x0d0d, 0x0d2d, + 0x0d3d, 0x0d4d, 0x0d57, 0x0d7a, 0x0d95, 0x0daa, 0x0ddc, 0x0dec, // Entry C0 - FF - 0x0dfc, 0x0e0c, 0x0e16, 0x0e52, 0x0e60, 0x0e6a, 0x0e74, 0x0e7c, - 0x0e88, 0x0e9d, 0x0eba, 0x0ec6, 0x0ed0, 0x0ed8, 0x0ee8, 0x0efd, - 0x0f0b, 0x0f30, 0x0f3c, 0x0f53, 0x0f66, 0x0f74, 0x0f80, 0x0f8e, - 0x0fa3, 0x0fc8, 0x0fe1, 0x0ff6, 0x0ffe, 0x1010, 0x102e, 0x1059, - 0x105f, 0x108e, 0x1096, 0x10a4, 0x10b8, 0x10c6, 0x10db, 0x10f3, - 0x10fd, 0x1107, 0x110f, 0x112c, 0x1138, 0x1146, 0x1154, 0x1160, - 0x116c, 0x1193, 0x11cb, 0x11f3, 0x1201, 0x1215, 0x1231, 0x125e, - 0x126e, 0x129e, 0x12c7, 0x12d5, 0x12e3, 0x1301, 0x130b, 0x1317, + 0x0df6, 0x0e06, 0x0e10, 0x0e4c, 0x0e5a, 0x0e64, 0x0e6e, 0x0e76, + 0x0e82, 0x0e97, 0x0eb4, 0x0ed3, 0x0edd, 0x0ee5, 0x0ef5, 0x0f0a, + 0x0f18, 0x0f3d, 0x0f49, 0x0f60, 0x0f73, 0x0f81, 0x0f8d, 0x0f9b, + 0x0fb0, 0x0fd5, 0x0fee, 0x1003, 0x100b, 0x101d, 0x103b, 0x1066, + 0x106c, 0x109b, 0x10a3, 0x10b1, 0x10c5, 0x10d3, 0x10e8, 0x1100, + 0x110a, 0x1114, 0x111c, 0x113e, 0x114a, 0x1158, 0x1166, 0x1172, + 0x117e, 0x11c0, 0x11f8, 0x1220, 0x122e, 0x1242, 0x125e, 0x128b, + 0x129b, 0x12cb, 0x12f4, 0x1302, 0x1310, 0x132e, 0x1338, 0x1344, // Entry 100 - 13F - 0x1321, 0x132f, 0x134b, 0x1355, 0x1365, 0x1382, 0x138e, 0x1398, - 0x13ad, 0x13c4, 0x13ea, 0x1401, 0x1414, 0x1427, 0x143a, 0x144b, - 0x1460, 0x146c, 0x1488, 0x1496, 0x14a5, 0x14b6, 0x14d0, 0x14e5, - 0x14fb, 0x150b, 0x1528, 0x1538, 0x153e, 0x154b, 0x155e, 0x1568, - 0x157b, 0x158e, 0x15a5, 0x15bc, -} // Size: 608 bytes - -const mrRegionStr string = "" + // Size: 8475 bytes + 0x134e, 0x135c, 0x1371, 0x137b, 0x138b, 0x13a8, 0x13b4, 0x13be, + 0x13d3, 0x13ea, 0x1410, 0x1427, 0x143a, 0x144d, 0x1460, 0x1471, + 0x148d, 0x1499, 0x14b5, 0x14c3, 0x14d2, 0x14e3, 0x14fd, 0x1512, + 0x1528, 0x1538, 0x1555, 0x1565, 0x156b, 0x1578, 0x158b, 0x1595, + 0x15a8, 0x15bb, 0x15d2, 0x15d2, 0x15e9, +} // Size: 610 bytes + +const mrRegionStr string = "" + // Size: 8477 bytes "अ\u200dॅसेन्शियन बेटअँडोरासंयुक्त अरब अमीरातअफगाणिस्तानअँटिग्वा आणि बर्ब" + "ुडाअँग्विलाअल्बानियाअर्मेनियाअंगोलाअंटार्क्टिकाअर्जेंटिनाअमेरिकन सामोआ" + "ऑस्ट्रियाऑस्ट्रेलियाअरुबाअ\u200dॅलँड बेटेअझरबैजानबोस्निया अणि हर्जेगोव" + "िनाबार्बाडोसबांगलादेशबेल्जियमबुर्किना फासोबल्गेरियाबहारीनबुरुंडीबेनिनस" + "ेंट बार्थेलेमीबर्मुडाब्रुनेईबोलिव्हियाकॅरिबियन नेदरलँड्सब्राझिलबहामाजभ" + - "ूतानबोउवेट बेटबोट्सवानाबेलारूसबलिझकॅनडाकोकोस (कीलिंग) बेटेकाँगो - किंश" + - "ासाकेंद्रीय अफ्रिकी प्रजासत्ताककाँगो - ब्राझाविलेस्वित्झर्लंडआयव्हरी क" + - "ोस्टकुक बेटेचिलीकॅमेरूनचीनकोलम्बियाक्लिपरटोन बेटकोस्टा रिकाक्यूबाकेप व" + - "्हर्डेक्युरासाओख्रिसमस बेटसायप्रसझेक प्रजासत्ताकजर्मनीदिएगो गार्सियाजि" + - "बौटीडेन्मार्कडोमिनिकाडोमिनिकन प्रजासत्ताकअल्जीरियास्यूटा आणि मेलिलाइक्" + - "वाडोरएस्टोनियाइजिप्तपश्चिम सहाराएरिट्रियास्पेनइथिओपियायुरोपीय संघफिनलं" + - "डफिजीफॉकलंड बेटेमायक्रोनेशियाफेरो बेटेफ्रान्सगॅबॉनयुनायटेड किंगडमग्रेन" + - "ेडाजॉर्जियाफ्रेंच गयानाग्वेर्नसेघानाजिब्राल्टरग्रीनलंडगाम्बियागिनीग्वा" + - "डेलोउपेइक्वेटोरियल गिनीग्रीसदक्षिण जॉर्जिया आणि दक्षिण सँडविच बेटेग्वा" + - "टेमालागुआमगिनी-बिसाउगयानाहाँगकाँग एसएआर चीनहर्ड आणि मॅक्डोनाल्ड बेटेहो" + - "ंडुरासक्रोएशियाहैतीहंगेरीकॅनरी बेटेइंडोनेशियाआयर्लंडइस्त्राइलआयल ऑफ मॅ" + - "नभारतब्रिटिश हिंदी महासागर क्षेत्रइराकइराणआइसलँडइटलीजर्सीजमैकाजॉर्डनजप" + - "ानकेनियाकिरगिझस्तानकंबोडियाकिरीबाटीकोमोरोजसेंट किट्स आणि नेव्हिसउत्तर " + - "कोरियादक्षिण कोरियाकुवेतकेमन बेटेकझाकस्तानलाओसलेबनॉनसेंट ल्यूसियालिक्ट" + - "ेनस्टाइनश्रीलंकालायबेरियालेसोथोलिथुआनियालक्झेंबर्गलात्वियालिबियामोरोक्" + - "कोमोनॅकोमोल्डोव्हामोंटेनेग्रोसेंट मार्टिनमादागास्करमार्शल बेटेमॅसेडोनि" + - "यामालीम्यानमार (बर्मा)मंगोलियामकाओ एसएआर चीनउत्तरी मारियाना बेटेमार्टि" + - "निकमॉरिटानियामॉन्ट्सेराटमाल्टामॉरिशसमालदीवमलावीमेक्सिकोमलेशियामोझाम्बि" + - "कनामिबियान्यू कॅलेडोनियानाइजरनॉरफॉक बेटनायजेरियानिकाराग्वानेदरलँडनॉर्व" + - "ेनेपाळनाउरूनीयून्यूझीलंडओमानपनामापेरूफ्रेंच पॉलिनेशियापापुआ न्यू गिनीफ" + - "िलिपिन्सपाकिस्तानपोलंडसेंट पियरे आणि मिक्वेलोनपिटकैर्न बेटेप्युएर्तो र" + - "िकोपॅलेस्टिनियन प्रदेशपोर्तुगालपलाऊपराग्वेकतारआउटलाईंग ओशनियारियुनियनर" + - "ोमानियासर्बियारशियारवांडासौदी अरबसोलोमन बेटेसेशेल्ससुदानस्वीडनसिंगापूर" + - "सेंट हेलेनास्लोव्हेनियास्वालबर्ड आणि जान मायेनस्लोव्हाकियासिएरा लिओनसॅ" + - "न मरीनोसेनेगलसोमालियासुरिनामदक्षिण सुदानसाओ टोम आणि प्रिंसिपेअल साल्वा" + - "डोरसिंट मार्टेनसीरियास्वाझिलँडट्रिस्टन दा कुन्हाटर्क्स आणि कैकोस बेटेच" + - "ाडफ्रेंच दाक्षिणात्य प्रदेशटोगोथायलंडताजिकिस्तानतोकेलाउतिमोर-लेस्तेतुर" + - "्कमेनिस्तानट्यूनिशियाटोंगातुर्कीत्रिनिदाद आणि टोबॅगोटुवालुतैवानटांझानि" + - "यायुक्रेनयुगांडायू.एस. आउटलाइंग बेटेसंयुक्त राष्ट्रयुनायटेड स्टेट्सउरु" + - "ग्वेउझबेकिस्तानव्हॅटिकन सिटीसेंट व्हिन्सेंट आणि ग्रेनडाइन्सव्हेनेझुएला" + - "ब्रिटिश व्हर्जिन बेटेयू.एस. व्हर्जिन बेटेव्हिएतनामवानुआतुवालिस आणि फ्य" + - "ूचूनासामोआकोसोव्होयेमेनमायोट्टेदक्षिण आफ्रिकाझाम्बियाझिम्बाब्वेअज्ञात " + - "प्रदेशविश्वआफ्रिकाउत्तर अमेरिकादक्षिण अमेरिकाओशनियापश्चिम आफ्रिकामध्य " + - "अमेरिकापूर्व आफ्रिकाउत्तर आफ्रिकामध्य आफ्रिकादक्षिणी आफ्रिकाअमेरिकाउत्" + - "तरी अमेरिकाकॅरीबियनपूर्व आशियादक्षिण आशियादक्षिण पूर्व आशियादक्षिण युर" + - "ोपऑस्\u200dट्रेलेशियामेलानेशियामायक्रोनेशियन प्रदेशपॉलिनेशियाअशियामध्य" + - " आशियापश्चिम आशियायुरोपपूर्व युरोपउत्तर युरोपपश्चिम युरोपलॅटिन अमेरिका" - -var mrRegionIdx = []uint16{ // 292 elements + "ूतानबोउवेट बेटबोट्सवानाबेलारूसबेलिझेकॅनडाकोकोस (कीलिंग) बेटेकाँगो - कि" + + "ंशासाकेंद्रीय अफ्रिकी प्रजासत्ताककाँगो - ब्राझाविलेस्वित्झर्लंडआयव्हरी" + + " कोस्टकुक बेटेचिलीकॅमेरूनचीनकोलम्बियाक्लिपरटोन बेटकोस्टा रिकाक्यूबाकेप व" + + "्हर्डेक्युरासाओख्रिसमस बेटसायप्रसझेकियाजर्मनीदिएगो गार्सियाजिबौटीडेन्म" + + "ार्कडोमिनिकाडोमिनिकन प्रजासत्ताकअल्जीरियास्यूटा आणि मेलिलाइक्वाडोरएस्ट" + + "ोनियाइजिप्तपश्चिम सहाराएरिट्रियास्पेनइथिओपियायुरोपीय संघयुरोझोनफिनलंडफ" + + "िजीफॉकलंड बेटेमायक्रोनेशियाफेरो बेटेफ्रान्सगॅबॉनयुनायटेड किंगडमग्रेनेड" + + "ाजॉर्जियाफ्रेंच गयानाग्वेर्नसेघानाजिब्राल्टरग्रीनलंडगाम्बियागिनीग्वाडे" + + "लोउपेइक्वेटोरियल गिनीग्रीसदक्षिण जॉर्जिया आणि दक्षिण सँडविच बेटेग्वाटे" + + "मालागुआमगिनी-बिसाउगयानाहाँगकाँग एसएआर चीनहर्ड आणि मॅक्डोनाल्ड बेटेहोंड" + + "ुरासक्रोएशियाहैतीहंगेरीकॅनरी बेटेइंडोनेशियाआयर्लंडइस्त्राइलआयल ऑफ मॅनभ" + + "ारतब्रिटिश हिंदी महासागर क्षेत्रइराकइराणआइसलँडइटलीजर्सीजमैकाजॉर्डनजपान" + + "केनियाकिरगिझस्तानकंबोडियाकिरीबाटीकोमोरोजसेंट किट्स आणि नेव्हिसउत्तर को" + + "रियादक्षिण कोरियाकुवेतकेमन बेटेकझाकस्तानलाओसलेबनॉनसेंट ल्यूसियालिक्टेन" + + "स्टाइनश्रीलंकालायबेरियालेसोथोलिथुआनियालक्झेंबर्गलात्वियालिबियामोरोक्को" + + "मोनॅकोमोल्डोव्हामोंटेनेग्रोसेंट मार्टिनमादागास्करमार्शल बेटेमॅसेडोनिया" + + "मालीम्यानमार (बर्मा)मंगोलियामकाओ एसएआर चीनउत्तरी मारियाना बेटेमार्टिनि" + + "कमॉरिटानियामॉन्ट्सेराटमाल्टामॉरिशसमालदीवमलावीमेक्सिकोमलेशियामोझाम्बिकन" + + "ामिबियान्यू कॅलेडोनियानाइजरनॉरफॉक बेटनायजेरियानिकाराग्वानेदरलँडनॉर्वेन" + + "ेपाळनाउरूनीयून्यूझीलंडओमानपनामापेरूफ्रेंच पॉलिनेशियापापुआ न्यू गिनीफिल" + + "िपिन्सपाकिस्तानपोलंडसेंट पियरे आणि मिक्वेलोनपिटकैर्न बेटेप्युएर्तो रिक" + + "ोपॅलेस्टिनियन प्रदेशपोर्तुगालपलाऊपराग्वेकतारआउटलाईंग ओशनियारियुनियनरोम" + + "ानियासर्बियारशियारवांडासौदी अरबसोलोमन बेटेसेशेल्ससुदानस्वीडनसिंगापूरसे" + + "ंट हेलेनास्लोव्हेनियास्वालबर्ड आणि जान मायेनस्लोव्हाकियासिएरा लिओनसॅन " + + "मरीनोसेनेगलसोमालियासुरिनामदक्षिण सुदानसाओ टोम आणि प्रिंसिपेअल साल्वाडो" + + "रसिंट मार्टेनसीरियास्वाझिलँडट्रिस्टन दा कुन्हाटर्क्स आणि कैकोस बेटेचाड" + + "फ्रेंच दाक्षिणात्य प्रदेशटोगोथायलंडताजिकिस्तानतोकेलाउतिमोर-लेस्तेतुर्क" + + "मेनिस्तानट्यूनिशियाटोंगातुर्कीत्रिनिदाद आणि टोबॅगोटुवालुतैवानटांझानिया" + + "युक्रेनयुगांडायू.एस. आउटलाइंग बेटेसंयुक्त राष्ट्रयुनायटेड स्टेट्सउरुग्" + + "वेउझबेकिस्तानव्हॅटिकन सिटीसेंट व्हिन्सेंट आणि ग्रेनडाइन्सव्हेनेझुएलाब्" + + "रिटिश व्हर्जिन बेटेयू.एस. व्हर्जिन बेटेव्हिएतनामवानुआतुवालिस आणि फ्यूच" + + "ूनासामोआकोसोव्होयेमेनमायोट्टेदक्षिण आफ्रिकाझाम्बियाझिम्बाब्वेअज्ञात प्" + + "रदेशविश्वआफ्रिकाउत्तर अमेरिकादक्षिण अमेरिकाओशनियापश्चिम आफ्रिकामध्य अम" + + "ेरिकापूर्व आफ्रिकाउत्तर आफ्रिकामध्य आफ्रिकादक्षिणी आफ्रिकाअमेरिकाउत्तर" + + "ी अमेरिकाकॅरीबियनपूर्व आशियादक्षिण आशियादक्षिण पूर्व आशियादक्षिण युरोप" + + "ऑस्\u200dट्रेलेशियामेलानेशियामायक्रोनेशियन प्रदेशपॉलिनेशियाअशियामध्य आ" + + "शियापश्चिम आशियायुरोपपूर्व युरोपउत्तर युरोपपश्चिम युरोपलॅटिन अमेरिका" + +var mrRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x002b, 0x003d, 0x006f, 0x0090, 0x00c8, 0x00e0, 0x00fb, 0x0116, 0x0128, 0x014c, 0x016a, 0x018f, 0x01aa, 0x01cb, 0x01da, 0x01f9, 0x0211, 0x0255, 0x0270, 0x028b, 0x02a3, 0x02c8, 0x02e3, 0x02f5, 0x030a, 0x0319, 0x0344, 0x0359, 0x036e, 0x038c, 0x03c0, - 0x03d5, 0x03e7, 0x03f6, 0x0412, 0x042d, 0x0442, 0x044e, 0x045d, - 0x048e, 0x04b5, 0x0505, 0x0535, 0x0559, 0x057e, 0x0594, 0x05a0, - 0x05b5, 0x05be, 0x05d9, 0x05fe, 0x061d, 0x062f, 0x064e, 0x0669, - 0x0688, 0x069d, 0x06c8, 0x06da, 0x0702, 0x0714, 0x072f, 0x0747, + 0x03d5, 0x03e7, 0x03f6, 0x0412, 0x042d, 0x0442, 0x0454, 0x0463, + 0x0494, 0x04bb, 0x050b, 0x053b, 0x055f, 0x0584, 0x059a, 0x05a6, + 0x05bb, 0x05c4, 0x05df, 0x0604, 0x0623, 0x0635, 0x0654, 0x066f, + 0x068e, 0x06a3, 0x06b5, 0x06c7, 0x06ef, 0x0701, 0x071c, 0x0734, // Entry 40 - 7F - 0x0781, 0x079c, 0x07cb, 0x07e3, 0x07fe, 0x0810, 0x0832, 0x084d, - 0x085c, 0x0874, 0x0893, 0x0893, 0x08a5, 0x08b1, 0x08d0, 0x08f7, - 0x0910, 0x0925, 0x0934, 0x095f, 0x0977, 0x098f, 0x09b1, 0x09cc, - 0x09d8, 0x09f6, 0x0a0e, 0x0a26, 0x0a32, 0x0a53, 0x0a81, 0x0a90, - 0x0af8, 0x0b16, 0x0b22, 0x0b3e, 0x0b4d, 0x0b7f, 0x0bc4, 0x0bdc, - 0x0bf7, 0x0c03, 0x0c15, 0x0c31, 0x0c4f, 0x0c64, 0x0c7f, 0x0c99, - 0x0ca5, 0x0cf6, 0x0d02, 0x0d0e, 0x0d20, 0x0d2c, 0x0d3b, 0x0d4a, - 0x0d5c, 0x0d68, 0x0d7a, 0x0d9b, 0x0db3, 0x0dcb, 0x0de0, 0x0e1c, + 0x076e, 0x0789, 0x07b8, 0x07d0, 0x07eb, 0x07fd, 0x081f, 0x083a, + 0x0849, 0x0861, 0x0880, 0x0895, 0x08a7, 0x08b3, 0x08d2, 0x08f9, + 0x0912, 0x0927, 0x0936, 0x0961, 0x0979, 0x0991, 0x09b3, 0x09ce, + 0x09da, 0x09f8, 0x0a10, 0x0a28, 0x0a34, 0x0a55, 0x0a83, 0x0a92, + 0x0afa, 0x0b18, 0x0b24, 0x0b40, 0x0b4f, 0x0b81, 0x0bc6, 0x0bde, + 0x0bf9, 0x0c05, 0x0c17, 0x0c33, 0x0c51, 0x0c66, 0x0c81, 0x0c9b, + 0x0ca7, 0x0cf8, 0x0d04, 0x0d10, 0x0d22, 0x0d2e, 0x0d3d, 0x0d4c, + 0x0d5e, 0x0d6a, 0x0d7c, 0x0d9d, 0x0db5, 0x0dcd, 0x0de2, 0x0e1e, // Entry 80 - BF - 0x0e3e, 0x0e63, 0x0e72, 0x0e8b, 0x0ea6, 0x0eb2, 0x0ec4, 0x0ee9, - 0x0f10, 0x0f28, 0x0f43, 0x0f55, 0x0f70, 0x0f8e, 0x0fa6, 0x0fb8, - 0x0fd0, 0x0fe2, 0x1000, 0x1021, 0x1043, 0x1061, 0x1080, 0x109e, - 0x10aa, 0x10d4, 0x10ec, 0x1112, 0x114a, 0x1165, 0x1183, 0x11a4, - 0x11b6, 0x11c8, 0x11da, 0x11e9, 0x1201, 0x1216, 0x1231, 0x1249, - 0x1274, 0x1283, 0x129f, 0x12ba, 0x12d8, 0x12ed, 0x12ff, 0x130e, - 0x131d, 0x1329, 0x1344, 0x1350, 0x135f, 0x136b, 0x139c, 0x13c5, - 0x13e0, 0x13fb, 0x140a, 0x144c, 0x1471, 0x1499, 0x14d0, 0x14eb, + 0x0e40, 0x0e65, 0x0e74, 0x0e8d, 0x0ea8, 0x0eb4, 0x0ec6, 0x0eeb, + 0x0f12, 0x0f2a, 0x0f45, 0x0f57, 0x0f72, 0x0f90, 0x0fa8, 0x0fba, + 0x0fd2, 0x0fe4, 0x1002, 0x1023, 0x1045, 0x1063, 0x1082, 0x10a0, + 0x10ac, 0x10d6, 0x10ee, 0x1114, 0x114c, 0x1167, 0x1185, 0x11a6, + 0x11b8, 0x11ca, 0x11dc, 0x11eb, 0x1203, 0x1218, 0x1233, 0x124b, + 0x1276, 0x1285, 0x12a1, 0x12bc, 0x12da, 0x12ef, 0x1301, 0x1310, + 0x131f, 0x132b, 0x1346, 0x1352, 0x1361, 0x136d, 0x139e, 0x13c7, + 0x13e2, 0x13fd, 0x140c, 0x144e, 0x1473, 0x149b, 0x14d2, 0x14ed, // Entry C0 - FF - 0x14f7, 0x150c, 0x1518, 0x1543, 0x155b, 0x1573, 0x1588, 0x1597, - 0x15a9, 0x15bf, 0x15de, 0x15f3, 0x1602, 0x1614, 0x162c, 0x164b, - 0x166f, 0x16ae, 0x16d2, 0x16ee, 0x1707, 0x1719, 0x1731, 0x1746, - 0x1768, 0x17a1, 0x17c3, 0x17e5, 0x17f7, 0x1812, 0x1844, 0x187d, - 0x1886, 0x18cd, 0x18d9, 0x18eb, 0x190c, 0x1921, 0x1943, 0x196d, - 0x198b, 0x199a, 0x19ac, 0x19e4, 0x19f6, 0x1a05, 0x1a20, 0x1a35, - 0x1a4a, 0x1a7e, 0x1aa9, 0x1ad7, 0x1aec, 0x1b0d, 0x1b32, 0x1b89, - 0x1baa, 0x1be5, 0x1c19, 0x1c34, 0x1c49, 0x1c7b, 0x1c8a, 0x1ca2, + 0x14f9, 0x150e, 0x151a, 0x1545, 0x155d, 0x1575, 0x158a, 0x1599, + 0x15ab, 0x15c1, 0x15e0, 0x15f5, 0x1604, 0x1616, 0x162e, 0x164d, + 0x1671, 0x16b0, 0x16d4, 0x16f0, 0x1709, 0x171b, 0x1733, 0x1748, + 0x176a, 0x17a3, 0x17c5, 0x17e7, 0x17f9, 0x1814, 0x1846, 0x187f, + 0x1888, 0x18cf, 0x18db, 0x18ed, 0x190e, 0x1923, 0x1945, 0x196f, + 0x198d, 0x199c, 0x19ae, 0x19e6, 0x19f8, 0x1a07, 0x1a22, 0x1a37, + 0x1a4c, 0x1a80, 0x1aab, 0x1ad9, 0x1aee, 0x1b0f, 0x1b34, 0x1b8b, + 0x1bac, 0x1be7, 0x1c1b, 0x1c36, 0x1c4b, 0x1c7d, 0x1c8c, 0x1ca4, // Entry 100 - 13F - 0x1cb1, 0x1cc9, 0x1cf1, 0x1d09, 0x1d27, 0x1d4c, 0x1d5b, 0x1d70, - 0x1d95, 0x1dbd, 0x1dcf, 0x1df7, 0x1e19, 0x1e3e, 0x1e63, 0x1e85, - 0x1eb0, 0x1ec5, 0x1eed, 0x1f05, 0x1f24, 0x1f46, 0x1f78, 0x1f9a, - 0x1fc4, 0x1fe2, 0x201c, 0x203a, 0x2049, 0x2065, 0x2087, 0x2096, - 0x20b5, 0x20d4, 0x20f6, 0x211b, -} // Size: 608 bytes - -const msRegionStr string = "" + // Size: 2967 bytes + 0x1cb3, 0x1ccb, 0x1cf3, 0x1d0b, 0x1d29, 0x1d4e, 0x1d5d, 0x1d72, + 0x1d97, 0x1dbf, 0x1dd1, 0x1df9, 0x1e1b, 0x1e40, 0x1e65, 0x1e87, + 0x1eb2, 0x1ec7, 0x1eef, 0x1f07, 0x1f26, 0x1f48, 0x1f7a, 0x1f9c, + 0x1fc6, 0x1fe4, 0x201e, 0x203c, 0x204b, 0x2067, 0x2089, 0x2098, + 0x20b7, 0x20d6, 0x20f8, 0x20f8, 0x211d, +} // Size: 610 bytes + +const msRegionStr string = "" + // Size: 2968 bytes "Pulau AscensionAndorraEmiriah Arab BersatuAfghanistanAntigua dan Barbuda" + "AnguillaAlbaniaArmeniaAngolaAntartikaArgentinaSamoa AmerikaAustriaAustra" + "liaArubaKepulauan AlandAzerbaijanBosnia dan HerzegovinaBarbadosBanglades" + @@ -47148,42 +49908,42 @@ const msRegionStr string = "" + // Size: 2967 bytes "usBelizeKanadaKepulauan Cocos (Keeling)Congo - KinshasaRepublik Afrika T" + "engahCongo - BrazzavilleSwitzerlandCote d’IvoireKepulauan CookChileCamer" + "oonChinaColombiaPulau ClippertonCosta RicaCubaCape VerdeCuracaoPulau Kri" + - "smasCyprusRepublik CzechJermanDiego GarciaDjiboutiDenmarkDominicaRepubli" + - "k DominicaAlgeriaCeuta dan MelillaEcuadorEstoniaMesirSahara BaratEritrea" + - "SepanyolEthiopiaKesatuan EropahFinlandFijiKepulauan FalklandMicronesiaKe" + - "pulauan FaroePerancisGabonUnited KingdomGrenadaGeorgiaGuiana PerancisGue" + - "rnseyGhanaGibraltarGreenlandGambiaGuineaGuadeloupeGuinea KhatulistiwaGre" + - "eceKepulauan Georgia Selatan & Sandwich SelatanGuatemalaGuamGuinea Bissa" + - "uGuyanaHong Kong SAR ChinaKepulauan Heard & McDonaldHondurasCroatiaHaiti" + - "HungaryKepulauan CanaryIndonesiaIrelandIsraelIsle of ManIndiaWilayah Lau" + - "tan Hindi BritishIraqIranIcelandItaliJerseyJamaicaJordanJepunKenyaKyrgyz" + - "stanKembojaKiribatiComorosSaint Kitts dan NevisKorea UtaraKorea SelatanK" + - "uwaitKepulauan CaymanKazakhstanLaosLubnanSaint LuciaLiechtensteinSri Lan" + - "kaLiberiaLesothoLithuaniaLuxembourgLatviaLibyaMaghribiMonacoMoldovaMonte" + - "negroSaint MartinMadagaskarKepulauan MarshallMacedoniaMaliMyanmar (Burma" + - ")MongoliaMacau SAR ChinaKepulauan Mariana UtaraMartiniqueMauritaniaMonts" + - "erratMaltaMauritiusMaldivesMalawiMexicoMalaysiaMozambiqueNamibiaNew Cale" + - "doniaNigerPulau NorfolkNigeriaNicaraguaBelandaNorwayNepalNauruNiueNew Ze" + - "alandOmanPanamaPeruPolinesia PerancisPapua New GuineaFilipinaPakistanPol" + - "andSaint Pierre dan MiquelonKepulauan PitcairnPuerto RicoWilayah Palesti" + - "nPortugalPalauParaguayQatarOceania TerpencilReunionRomaniaSerbiaRusiaRwa" + - "ndaArab SaudiKepulauan SolomonSeychellesSudanSwedenSingapuraSaint Helena" + - "SloveniaSvalbard dan Jan MayenSlovakiaSierra LeoneSan MarinoSenegalSomal" + - "iaSurinamSudan SelatanSao Tome dan PrincipeEl SalvadorSint MaartenSyriaS" + - "wazilandTristan da CunhaKepulauan Turks dan CaicosChadWilayah Selatan Pe" + - "rancisTogoThailandTajikistanTokelauTimor-LesteTurkmenistanTunisiaTongaTu" + - "rkiTrinidad dan TobagoTuvaluTaiwanTanzaniaUkraineUgandaKepulauan Terpenc" + - "il A.S.Bangsa-bangsa BersatuAmerika SyarikatUruguayUzbekistanKota Vatica" + - "nSaint Vincent dan GrenadinesVenezuelaKepulauan Virgin BritishKepulauan " + - "Virgin A.S.VietnamVanuatuWallis dan FutunaSamoaKosovoYamanMayotteAfrika " + - "SelatanZambiaZimbabweWilayah Tidak DiketahuiDuniaAfrikaAmerika UtaraAmer" + - "ika SelatanOceaniaAfrika BaratAmerika TengahAfrika TimurAfrika UtaraAfri" + - "ka TengahSelatan AfrikaAmerikaUtara AmerikaCaribbeanAsia TimurAsia Selat" + - "anAsia TenggaraEropah SelatanAustralasiaMelanesiaWilayah MikronesiaPolin" + - "esiaAsiaAsia TengahAsia BaratEropahEropah TimurEropah UtaraEropah BaratA" + - "merika Latin" - -var msRegionIdx = []uint16{ // 292 elements + "smasCyprusCzechiaJermanDiego GarciaDjiboutiDenmarkDominicaRepublik Domin" + + "icaAlgeriaCeuta dan MelillaEcuadorEstoniaMesirSahara BaratEritreaSepanyo" + + "lEthiopiaKesatuan EropahZon EuroFinlandFijiKepulauan FalklandMicronesiaK" + + "epulauan FaroePerancisGabonUnited KingdomGrenadaGeorgiaGuiana PerancisGu" + + "ernseyGhanaGibraltarGreenlandGambiaGuineaGuadeloupeGuinea KhatulistiwaGr" + + "eeceKepulauan Georgia Selatan & Sandwich SelatanGuatemalaGuamGuinea Biss" + + "auGuyanaHong Kong SAR ChinaKepulauan Heard & McDonaldHondurasCroatiaHait" + + "iHungaryKepulauan CanaryIndonesiaIrelandIsraelIsle of ManIndiaWilayah La" + + "utan Hindi BritishIraqIranIcelandItaliJerseyJamaicaJordanJepunKenyaKyrgy" + + "zstanKembojaKiribatiComorosSaint Kitts dan NevisKorea UtaraKorea Selatan" + + "KuwaitKepulauan CaymanKazakhstanLaosLubnanSaint LuciaLiechtensteinSri La" + + "nkaLiberiaLesothoLithuaniaLuxembourgLatviaLibyaMaghribiMonacoMoldovaMont" + + "enegroSaint MartinMadagaskarKepulauan MarshallMacedoniaMaliMyanmar (Burm" + + "a)MongoliaMacau SAR ChinaKepulauan Mariana UtaraMartiniqueMauritaniaMont" + + "serratMaltaMauritiusMaldivesMalawiMexicoMalaysiaMozambiqueNamibiaNew Cal" + + "edoniaNigerPulau NorfolkNigeriaNicaraguaBelandaNorwayNepalNauruNiueNew Z" + + "ealandOmanPanamaPeruPolinesia PerancisPapua New GuineaFilipinaPakistanPo" + + "landSaint Pierre dan MiquelonKepulauan PitcairnPuerto RicoWilayah Palest" + + "inPortugalPalauParaguayQatarOceania TerpencilReunionRomaniaSerbiaRusiaRw" + + "andaArab SaudiKepulauan SolomonSeychellesSudanSwedenSingapuraSaint Helen" + + "aSloveniaSvalbard dan Jan MayenSlovakiaSierra LeoneSan MarinoSenegalSoma" + + "liaSurinamSudan SelatanSao Tome dan PrincipeEl SalvadorSint MaartenSyria" + + "SwazilandTristan da CunhaKepulauan Turks dan CaicosChadWilayah Selatan P" + + "erancisTogoThailandTajikistanTokelauTimor-LesteTurkmenistanTunisiaTongaT" + + "urkiTrinidad dan TobagoTuvaluTaiwanTanzaniaUkraineUgandaKepulauan Terpen" + + "cil A.S.Bangsa-bangsa BersatuAmerika SyarikatUruguayUzbekistanKota Vatic" + + "anSaint Vincent dan GrenadinesVenezuelaKepulauan Virgin BritishKepulauan" + + " Virgin A.S.VietnamVanuatuWallis dan FutunaSamoaKosovoYamanMayotteAfrika" + + " SelatanZambiaZimbabweWilayah Tidak DiketahuiDuniaAfrikaAmerika UtaraAme" + + "rika SelatanOceaniaAfrika BaratAmerika TengahAfrika TimurAfrika UtaraAfr" + + "ika TengahSelatan AfrikaAmerikaUtara AmerikaCaribbeanAsia TimurAsia Sela" + + "tanAsia TenggaraEropah SelatanAustralasiaMelanesiaWilayah MikronesiaPoli" + + "nesiaAsiaAsia TengahAsia BaratEropahEropah TimurEropah UtaraEropah Barat" + + "Amerika Latin" + +var msRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x000f, 0x0016, 0x002a, 0x0035, 0x0048, 0x0050, 0x0057, 0x005e, 0x0064, 0x006d, 0x0076, 0x0083, 0x008a, 0x0093, 0x0098, @@ -47192,229 +49952,229 @@ var msRegionIdx = []uint16{ // 292 elements 0x0143, 0x014a, 0x0150, 0x015c, 0x0164, 0x016b, 0x0171, 0x0177, 0x0190, 0x01a0, 0x01b6, 0x01c9, 0x01d4, 0x01e3, 0x01f1, 0x01f6, 0x01fe, 0x0203, 0x020b, 0x021b, 0x0225, 0x0229, 0x0233, 0x023a, - 0x0247, 0x024d, 0x025b, 0x0261, 0x026d, 0x0275, 0x027c, 0x0284, + 0x0247, 0x024d, 0x0254, 0x025a, 0x0266, 0x026e, 0x0275, 0x027d, // Entry 40 - 7F - 0x0295, 0x029c, 0x02ad, 0x02b4, 0x02bb, 0x02c0, 0x02cc, 0x02d3, - 0x02db, 0x02e3, 0x02f2, 0x02f2, 0x02f9, 0x02fd, 0x030f, 0x0319, - 0x0328, 0x0330, 0x0335, 0x0343, 0x034a, 0x0351, 0x0360, 0x0368, - 0x036d, 0x0376, 0x037f, 0x0385, 0x038b, 0x0395, 0x03a8, 0x03ae, - 0x03da, 0x03e3, 0x03e7, 0x03f4, 0x03fa, 0x040d, 0x0427, 0x042f, - 0x0436, 0x043b, 0x0442, 0x0452, 0x045b, 0x0462, 0x0468, 0x0473, - 0x0478, 0x0494, 0x0498, 0x049c, 0x04a3, 0x04a8, 0x04ae, 0x04b5, - 0x04bb, 0x04c0, 0x04c5, 0x04cf, 0x04d6, 0x04de, 0x04e5, 0x04fa, + 0x028e, 0x0295, 0x02a6, 0x02ad, 0x02b4, 0x02b9, 0x02c5, 0x02cc, + 0x02d4, 0x02dc, 0x02eb, 0x02f3, 0x02fa, 0x02fe, 0x0310, 0x031a, + 0x0329, 0x0331, 0x0336, 0x0344, 0x034b, 0x0352, 0x0361, 0x0369, + 0x036e, 0x0377, 0x0380, 0x0386, 0x038c, 0x0396, 0x03a9, 0x03af, + 0x03db, 0x03e4, 0x03e8, 0x03f5, 0x03fb, 0x040e, 0x0428, 0x0430, + 0x0437, 0x043c, 0x0443, 0x0453, 0x045c, 0x0463, 0x0469, 0x0474, + 0x0479, 0x0495, 0x0499, 0x049d, 0x04a4, 0x04a9, 0x04af, 0x04b6, + 0x04bc, 0x04c1, 0x04c6, 0x04d0, 0x04d7, 0x04df, 0x04e6, 0x04fb, // Entry 80 - BF - 0x0505, 0x0512, 0x0518, 0x0528, 0x0532, 0x0536, 0x053c, 0x0547, - 0x0554, 0x055d, 0x0564, 0x056b, 0x0574, 0x057e, 0x0584, 0x0589, - 0x0591, 0x0597, 0x059e, 0x05a8, 0x05b4, 0x05be, 0x05d0, 0x05d9, - 0x05dd, 0x05ec, 0x05f4, 0x0603, 0x061a, 0x0624, 0x062e, 0x0638, - 0x063d, 0x0646, 0x064e, 0x0654, 0x065a, 0x0662, 0x066c, 0x0673, - 0x0680, 0x0685, 0x0692, 0x0699, 0x06a2, 0x06a9, 0x06af, 0x06b4, - 0x06b9, 0x06bd, 0x06c8, 0x06cc, 0x06d2, 0x06d6, 0x06e8, 0x06f8, - 0x0700, 0x0708, 0x070e, 0x0727, 0x0739, 0x0744, 0x0754, 0x075c, + 0x0506, 0x0513, 0x0519, 0x0529, 0x0533, 0x0537, 0x053d, 0x0548, + 0x0555, 0x055e, 0x0565, 0x056c, 0x0575, 0x057f, 0x0585, 0x058a, + 0x0592, 0x0598, 0x059f, 0x05a9, 0x05b5, 0x05bf, 0x05d1, 0x05da, + 0x05de, 0x05ed, 0x05f5, 0x0604, 0x061b, 0x0625, 0x062f, 0x0639, + 0x063e, 0x0647, 0x064f, 0x0655, 0x065b, 0x0663, 0x066d, 0x0674, + 0x0681, 0x0686, 0x0693, 0x069a, 0x06a3, 0x06aa, 0x06b0, 0x06b5, + 0x06ba, 0x06be, 0x06c9, 0x06cd, 0x06d3, 0x06d7, 0x06e9, 0x06f9, + 0x0701, 0x0709, 0x070f, 0x0728, 0x073a, 0x0745, 0x0755, 0x075d, // Entry C0 - FF - 0x0761, 0x0769, 0x076e, 0x077f, 0x0786, 0x078d, 0x0793, 0x0798, - 0x079e, 0x07a8, 0x07b9, 0x07c3, 0x07c8, 0x07ce, 0x07d7, 0x07e3, - 0x07eb, 0x0801, 0x0809, 0x0815, 0x081f, 0x0826, 0x082d, 0x0834, - 0x0841, 0x0856, 0x0861, 0x086d, 0x0872, 0x087b, 0x088b, 0x08a5, - 0x08a9, 0x08c1, 0x08c5, 0x08cd, 0x08d7, 0x08de, 0x08e9, 0x08f5, - 0x08fc, 0x0901, 0x0906, 0x0919, 0x091f, 0x0925, 0x092d, 0x0934, - 0x093a, 0x0952, 0x0967, 0x0977, 0x097e, 0x0988, 0x0994, 0x09b0, - 0x09b9, 0x09d1, 0x09e6, 0x09ed, 0x09f4, 0x0a05, 0x0a0a, 0x0a10, + 0x0762, 0x076a, 0x076f, 0x0780, 0x0787, 0x078e, 0x0794, 0x0799, + 0x079f, 0x07a9, 0x07ba, 0x07c4, 0x07c9, 0x07cf, 0x07d8, 0x07e4, + 0x07ec, 0x0802, 0x080a, 0x0816, 0x0820, 0x0827, 0x082e, 0x0835, + 0x0842, 0x0857, 0x0862, 0x086e, 0x0873, 0x087c, 0x088c, 0x08a6, + 0x08aa, 0x08c2, 0x08c6, 0x08ce, 0x08d8, 0x08df, 0x08ea, 0x08f6, + 0x08fd, 0x0902, 0x0907, 0x091a, 0x0920, 0x0926, 0x092e, 0x0935, + 0x093b, 0x0953, 0x0968, 0x0978, 0x097f, 0x0989, 0x0995, 0x09b1, + 0x09ba, 0x09d2, 0x09e7, 0x09ee, 0x09f5, 0x0a06, 0x0a0b, 0x0a11, // Entry 100 - 13F - 0x0a15, 0x0a1c, 0x0a2a, 0x0a30, 0x0a38, 0x0a4f, 0x0a54, 0x0a5a, - 0x0a67, 0x0a76, 0x0a7d, 0x0a89, 0x0a97, 0x0aa3, 0x0aaf, 0x0abc, - 0x0aca, 0x0ad1, 0x0ade, 0x0ae7, 0x0af1, 0x0afd, 0x0b0a, 0x0b18, - 0x0b23, 0x0b2c, 0x0b3e, 0x0b47, 0x0b4b, 0x0b56, 0x0b60, 0x0b66, - 0x0b72, 0x0b7e, 0x0b8a, 0x0b97, -} // Size: 608 bytes - -const myRegionStr string = "" + // Size: 9670 bytes - "တက်တော်မူကျွန်းအင်ဒိုရာယူအေအီးအာဖဂန်နစ္စတန်အင်တီဂွါနှင့် ဘာဘူဒါအန်ဂီလာအယ" + - "်လ်ဘေးနီးယားအာမေးနီးယားအင်ဂိုလာအန္တာတိကအာဂျင်တီးနားအမေရိကန် ဆမိုးအားဩစ" + - "တြီးယားဩစတြေးလျအာရူးဗားအာလန်ကျွန်းအဇာဘိုင်ဂျန်ဘော့စနီးယားနှင့် ဟာဇီဂို" + - "ဗီနားဘာဘေးဒိုးစ်ဘင်္ဂလားဒေ့ရှ်ဘယ်လ်ဂျီယမ်ဘာကီးနား ဖားဆိုဘူလ်ဂေးရီးယားဘ" + - "ာရိန်းဘူရွန်ဒီဘီနင်စိန့်ဘာသယ်လ်မီဘာမြူဒါဘရူနိုင်းဘိုလီးဗီးယားကာရစ်ဘီယံ" + - " နယ်သာလန်ဘရာဇီးဘဟားမားဘူတန်ဘူဗက်ကျွန်းဘော့ဆွာနာဘီလာရုဇ်ဘလိဇ်ကနေဒါကိုကိုး" + - "ကျွန်းကွန်ဂိုဗဟို အာဖရိက ပြည်ထောင်စုကွန်ဂို-ဘရာဇာဗီးလ်ဆွစ်ဇာလန်ကို့တ် " + - "ဒီဗွာကွတ် ကျွန်းစုချီလီကင်မရွန်းတရုတ်ကိုလံဘီယာကလစ်ပါတန်ကျွန်းကို့စ်တာရ" + - "ီကာကျူးဘားကိတ်ဗာဒီကျူရေးကိုးစ်ခရစ်စမတ် ကျွန်းဆိုက်ပရပ်စ်ချက် ပြည်ထောင်" + - "စုဂျာမဏီဒီအဲဂိုဂါစီရာဂျီဘူတီဒိန်းမတ်ဒိုမီနီကာဒိုမီနီကန်အယ်လ်ဂျီးရီးယား" + - "ဆယ်ဥတာနှင့်မယ်လီလ်လာအီကွေဒေါအက်စတိုးနီးယားအီဂျစ်အနောက် ဆာဟာရအီရီထရီးယာ" + - "းစပိန်အီသီယိုးပီးယားဥရောပသမဂ္ဂဖင်လန်ဖီဂျီဖော့ကလန် ကျွန်းစုမိုင်ခရိုနီရ" + - "ှားဖာရိုး ကျွန်းစုများပြင်သစ်ဂါဘွန်ယူနိုက်တက်ကင်းဒမ်းဂရီနေဒါဂျော်ဂျီယာ" + - "ပြင်သစ် ဂိုင်ယာနာဂွန်းဇီဂါနာဂျီဘရော်လ်တာဂရင်းလန်းဂမ်ဘီရာဂီနီဂွါဒီလုအီက" + - "ွေတာ ဂီနီဂရိတောင် ဂျော်ဂျီယာ နှင့် တောင် ဆင်းဒဝစ်ဂျ် ကျွန်းစုများဂွါတီ" + - "မာလာဂူအမ်ဂီနီ-ဘီစောဂိုင်ယာနာဟောင်ကောင် (တရုတ်ပြည်)ဟတ်ကျွန်းနှင့်မက်ဒေါ" + - "နယ်ကျွန်းစုဟွန်ဒူးရပ်စ်ခရိုအေးရှားဟေတီဟန်ဂေရီကနေရီ ကျွန်းစုအင်ဒိုနီးရှ" + - "ားအိုင်ယာလန်အစ္စရေးမန်ကျွန်းအိန္ဒိယဗြိတိသျှပိုင် အိန္ဒိယသမုဒ္ဒရာကျွန်း" + - "များအီရတ်အီရန်အိုက်စလန်အီတလီဂျာစီဂျမေကာဂျော်ဒန်ဂျပန်ကင်ညာကာဂျစ္စတန်ကမ္" + - "ဘောဒီးယားခီရီဘာတီကိုမိုရိုစ်စိန့်ကစ်နှင့်နီဗီစ်မြောက်ကိုရီးယားတောင်ကို" + - "ရီးယားကူဝိတ်ကေမန် ကျွန်းစုကာဇက်စတန်လာအိုလက်ဘနွန်စိန့်လူစီယာလစ်တန်စတိန်" + - "းသီရိလင်္ကာလိုက်ဘေးရီးယားလီဆိုသိုလစ်သူယေးနီးယားလူဇင်ဘတ်လတ်ဗီးယားလစ်ဗျာ" + - "းမော်ရိုကိုမိုနာကိုမောလ်ဒိုဗာမွန်တီနိဂရိုးစိန့်မာတင်မဒါဂတ်စကားမာရှယ် က" + - "ျွန်းစုမက်စီဒိုးနီးယားမာလီမြန်မာ (Burma)မွန်ဂိုးလီးယားမကာအို (တရုတ်ပြည" + - "်)တောင်ပိုင်းမာရီအာနာကျွန်းစုမာတီနိခ်မော်ရီတေးနီးယားမောင့်စဲရက်မောလ်တာ" + - "မောရစ်ရှမော်လ်ဒိုက်မာလာဝီမက္ကဆီကိုမလေးရှားမိုဇမ်ဘစ်နမီးဘီးယားနယူး ကယ်လ" + - "ီဒိုနီးယားနိုင်ဂျာနောဖုတ်ကျွန်းနိုင်ဂျီးရီးယားနီကာရာဂွါနယ်သာလန်နော်ဝေန" + - "ီပေါနော်ရူးနီဥူအေနယူးဇီလန်အိုမန်ပနားမားပီရူးပြင်သစ် ပေါ်လီနီးရှားပါပူအ" + - "ာ နယူးဂီနီဖိလစ်ပိုင်ပါကစ္စတန်ပိုလန်စိန့်ပီအဲရ်နှင့် မီကွီလွန်ပစ်တ်ကိန်" + - "းကျွန်းစုပေါ်တိုရီကိုပါလက်စတိုင်း ပိုင်နက်ပေါ်တူဂီပလာအိုပါရာဂွေးကာတာသမ" + - "ုဒ္ဒရာ အပြင်ဘက်ရှိ ကျွန်းနိုင်ငံများဟေညွန်ရိုမေးနီးယားဆားဘီးယားရုရှရဝန" + - "်ဒါဆော်ဒီအာရေးဘီးယားဆော်လမွန်ကျွန်းစုဆေးရှဲဆူဒန်ဆွီဒင်စင်္ကာပူစိန့်ဟယ်" + - "လယ်နာစလိုဗေးနီးယားစဗိုလ်ဘတ်နှင့်ဂျန်မေရန်ဆလိုဗက်ကီးယားဆီယာရာ လီယွန်းဆန" + - "်မာရီနိုဆီနီဂေါဆိုမာလီယာဆူရာနမ်တောင် ဆူဒန်ဆောင်တူမေးနှင့် ပရင်စီပီအယ်လ" + - "်ဆာဗေးဒိုးစင့်မာတင်ဆီးရီးယားဆွာဇီလန်ထရစ္စတန် ဒါ ကွန်ဟာတခ်စ်နှင့်ကာအီကိ" + - "ုစ်ကျွန်းစုချဒ်ပြင်သစ် တောင်ပိုင်း ပိုင်နက်များတိုဂိုထိုင်းတာဂျီကစ္စတန" + - "်တိုကလောင်အရှေ့တီမောတာ့ခ်မင်နစ္စတန်တူနီးရှားတွန်ဂါတူရကီထရီနီဒတ်နှင့် တ" + - "ိုဘက်ဂိုတူဗားလူထိုင်ဝမ်တန်ဇန်းနီးယားယူကရိန်းယူဂန်းဒါးယူနိုက်တက်စတိတ် က" + - "ျွန်းနိုင်ငံများကုလသမဂ္ဂယူနိုက်တက်စတိတ်ဥရုဂွေးဉဇဘက်ကစ္စတန်ဗာတီကန်စီတီး" + - "စိန့်ဗင်းဆင့်နှင့် ဂရိနေဒိုင်ဗင်နီဇွဲလားဗြိတိသျှ ဗာဂျင်း ကျွန်းစုယူအက်" + - "စ် ဗာဂျင်း ကျွန်းစုဗီယက်နမ်ဗနွားတူဝေါလစ်နှင့် ဖူကျူးနားဆမိုးအားကိုဆိုဗ" + - "ိုယီမင်မာယိုတေးတောင်အာဖရိကဇမ်ဘီယာဇင်ဘာဘွေမသိ (သို့) မရှိသော ဒေသကမ္ဘာအာ" + - "ဖရိကမြောက် အမေရိကတိုက်တောင် အမေရိကသမုဒ္ဒရာဒေသအနောက် အာဖရိကဗဟို အမေရိကအ" + - "ရှေ့ အာဖရိကမြောက် အာဖရိကအလယ် အာဖရိကအာဖရိက တောင်ပိုင်းအမေရိကန်မြောက် အမ" + - "ေရိကကာရစ်ဘီယံအရှေ့အာရှတောင်အာရှအရှေ့တောင်အာရှတောင်ဥရောပဩစတြေးလျနှင့် န" + - "ယူးဇီလန်မီလာနီးရှားမိုက်ခရိုနီးရှား ဒေသပိုလီနီရှားအာရှအလယ်အာရှအနောက်အာ" + + 0x0a16, 0x0a1d, 0x0a2b, 0x0a31, 0x0a39, 0x0a50, 0x0a55, 0x0a5b, + 0x0a68, 0x0a77, 0x0a7e, 0x0a8a, 0x0a98, 0x0aa4, 0x0ab0, 0x0abd, + 0x0acb, 0x0ad2, 0x0adf, 0x0ae8, 0x0af2, 0x0afe, 0x0b0b, 0x0b19, + 0x0b24, 0x0b2d, 0x0b3f, 0x0b48, 0x0b4c, 0x0b57, 0x0b61, 0x0b67, + 0x0b73, 0x0b7f, 0x0b8b, 0x0b8b, 0x0b98, +} // Size: 610 bytes + +const myRegionStr string = "" + // Size: 9686 bytes + "အဆန်းရှင်းကျွန်းအန်ဒိုရာယူအေအီးအာဖဂန်နစ္စတန်အန်တီဂွါနှင့် ဘာဘူဒါအန်ဂီလာအ" + + "ယ်လ်ဘေးနီးယားအာမေးနီးယားအန်ဂိုလာအန္တာတိကအာဂျင်တီးနားအမေရိကန် ဆမိုးအားဩ" + + "စတြီးယားဩစတြေးလျအာရူးဗားအာလန်ကျွန်းအဇာဘိုင်ဂျန်ဘော့စနီးယားနှင့် ဟာဇီဂိ" + + "ုဗီနားဘာဘေးဒိုးစ်ဘင်္ဂလားဒေ့ရှ်ဘယ်လ်ဂျီယမ်ဘာကီးနား ဖားဆိုဘူလ်ဂေးရီးယား" + + "ဘာရိန်းဘူရွန်ဒီဘီနင်စိန့်ဘာသယ်လ်မီဘာမြူဒါဘရူနိုင်းဘိုလီးဗီးယားကာရစ်ဘီယ" + + "ံ နယ်သာလန်ဘရာဇီးဘဟားမားဘူတန်ဘူဗက်ကျွန်းဘော့ဆွာနာဘီလာရုစ်ဘလိဇ်ကနေဒါကိုက" + + "ိုးကျွန်းကွန်ဂိုဗဟို အာဖရိက ပြည်ထောင်စုကွန်ဂို-ဘရာဇာဗီးလ်ဆွစ်ဇာလန်ကို့" + + "တ် ဒီဗွာကွတ် ကျွန်းစုချီလီကင်မရွန်းတရုတ်ကိုလံဘီယာကလစ်ပါတန်ကျွန်းကို့စ်" + + "တာရီကာကျူးဘားကိတ်ဗာဒီကျူရေးကိုးစ်ခရစ်စမတ် ကျွန်းဆိုက်ပရပ်စ်ချက်ကီယားဂျ" + + "ာမနီဒီအဲဂိုဂါစီရာဂျီဘူတီဒိန်းမတ်ဒိုမီနီကာဒိုမီနီကန်အယ်လ်ဂျီးရီးယားဆယ်ဥ" + + "တာနှင့်မယ်လီလ်လာအီကွေဒေါအက်စတိုးနီးယားအီဂျစ်အနောက် ဆာဟာရအီရီထရီးယားစပိ" + + "န်အီသီယိုးပီးယားဥရောပသမဂ္ဂဥရောပဒေသဖင်လန်ဖီဂျီဖော့ကလန် ကျွန်းစုမိုင်ခရိ" + + "ုနီရှားဖာရိုး ကျွန်းစုများပြင်သစ်ဂါဘွန်ယူနိုက်တက်ကင်းဒမ်းဂရီနေဒါဂျော်ဂ" + + "ျီယာပြင်သစ် ဂီယာနာဂွန်းဇီဂါနာဂျီဘရော်လ်တာဂရင်းလန်းဂမ်ဘီရာဂီနီဂွါဒီလုအီ" + + "ကွေတာ ဂီနီဂရိတောင် ဂျော်ဂျီယာ နှင့် တောင် ဆင်းဒဝစ်ဂျ် ကျွန်းစုများဂွါတ" + + "ီမာလာဂူအမ်ဂီနီ-ဘီစောဂိုင်ယာနာဟောင်ကောင် (တရုတ်ပြည်)ဟတ်ကျွန်းနှင့်မက်ဒေ" + + "ါနယ်ကျွန်းစုဟွန်ဒူးရပ်စ်ခရိုအေးရှားဟေတီဟန်ဂေရီကနေရီ ကျွန်းစုအင်ဒိုနီးရ" + + "ှားအိုင်ယာလန်အစ္စရေးမန်ကျွန်းအိန္ဒိယဗြိတိသျှပိုင် အိန္ဒိယသမုဒ္ဒရာကျွန်" + + "းများအီရတ်အီရန်အိုက်စလန်အီတလီဂျာစီဂျမေကာဂျော်ဒန်ဂျပန်ကင်ညာကာဂျစ္စတန်ကမ" + + "္ဘောဒီးယားခီရီဘာတီကိုမိုရိုစ်စိန့်ကစ်နှင့်နီဗီစ်မြောက်ကိုရီးယားတောင်ကိ" + + "ုရီးယားကူဝိတ်ကေမန် ကျွန်းစုကာဇက်စတန်လာအိုလက်ဘနွန်စိန့်လူစီယာလစ်တန်စတိန" + + "်းသီရိလင်္ကာလိုက်ဘေးရီးယားလီဆိုသိုလစ်သူယေးနီးယားလူဇင်ဘတ်လတ်ဗီးယားလစ်ဗျ" + + "ားမော်ရိုကိုမိုနာကိုမောလ်ဒိုဗာမွန်တီနိဂရိုးစိန့်မာတင်မဒါဂတ်စကားမာရှယ် " + + "ကျွန်းစုမက်ဆီဒိုးနီးယားမာလီမြန်မာမွန်ဂိုးလီးယားမကာအို (တရုတ်ပြည်)တောင်" + + "ပိုင်းမာရီအာနာကျွန်းစုမာတီနိခ်မော်ရီတေးနီးယားမောင့်စဲရက်မောလ်တာမောရစ်ရ" + + "ှမော်လ်ဒိုက်မာလာဝီမက္ကဆီကိုမလေးရှားမိုဇမ်ဘစ်နမီးဘီးယားနယူး ကယ်လီဒိုနီး" + + "ယားနိုင်ဂျာနောဖုတ်ကျွန်းနိုင်ဂျီးရီးယားနီကာရာဂွါနယ်သာလန်နော်ဝေနီပေါနော" + + "်ရူးနီဥူအေနယူးဇီလန်အိုမန်ပနားမားပီရူးပြင်သစ် ပေါ်လီနီးရှားပါပူအာ နယူးဂ" + + "ီနီဖိလစ်ပိုင်ပါကစ္စတန်ပိုလန်စိန့်ပီအဲရ်နှင့် မီကွီလွန်ပစ်တ်ကိန်းကျွန်း" + + "စုပေါ်တိုရီကိုပါလက်စတိုင်း ပိုင်နက်ပေါ်တူဂီပလာအိုပါရာဂွေးကာတာသမုဒ္ဒရာ " + + "အပြင်ဘက်ရှိ ကျွန်းနိုင်ငံများရီယူနီယန်ရိုမေးနီးယားဆားဘီးယားရုရှားရဝန်ဒ" + + "ါဆော်ဒီအာရေးဘီးယားဆော်လမွန်ကျွန်းစုဆေးရှဲဆူဒန်ဆွီဒင်စင်္ကာပူစိန့်ဟယ်လယ" + + "်နာဆလိုဗေးနီးယားစဗိုလ်ဘတ်နှင့်ဂျန်မေရန်ဆလိုဗက်ကီးယားဆီယာရာ လီယွန်းဆန်မ" + + "ာရီနိုဆီနီဂေါဆိုမာလီယာဆူရာနမ်တောင် ဆူဒန်ဆောင်တူမေးနှင့် ပရင်စီပီအယ်လ်ဆ" + + "ာဗေးဒိုးစင့်မာတင်ဆီးရီးယားဆွာဇီလန်ထရစ္စတန် ဒါ ကွန်ဟာတခ်စ်နှင့်ကာအီကိုစ" + + "်ကျွန်းစုချဒ်ပြင်သစ် တောင်ပိုင်း ပိုင်နက်များတိုဂိုထိုင်းတာဂျီကစ္စတန်တ" + + "ိုကလောင်အရှေ့တီမောတာ့ခ်မင်နစ္စတန်တူနီးရှားတွန်ဂါတူရကီထရီနီဒတ်နှင့် တို" + + "ဘက်ဂိုတူဗားလူထိုင်ဝမ်တန်ဇန်းနီးယားယူကရိန်းယူဂန်းဒါးယူနိုက်တက်စတိတ် ကျွ" + + "န်းနိုင်ငံများကုလသမဂ္ဂအမေရိကန် ပြည်ထောင်စုဥရုဂွေးဥဇဘက်ကစ္စတန်ဗာတီကန်စီ" + + "းတီးစိန့်ဗင်းဆင့်နှင့် ဂရိနေဒိုင်ဗင်နီဇွဲလားဗြိတိသျှ ဗာဂျင်း ကျွန်းစုယ" + + "ူအက်စ် ဗာဂျင်း ကျွန်းစုဗီယက်နမ်ဗနွားတူဝေါလစ်နှင့် ဖူကျူးနားဆမိုးအားကို" + + "ဆိုဗိုယီမင်မေယော့တောင်အာဖရိကဇမ်ဘီယာဇင်ဘာဘွေမသိ (သို့) မရှိသော ဒေသကမ္ဘာ" + + "အာဖရိကမြောက် အမေရိကတိုက်တောင် အမေရိကသမုဒ္ဒရာဒေသအနောက် အာဖရိကဗဟို အမေရိ" + + "ကအရှေ့ အာဖရိကမြောက် အာဖရိကအလယ် အာဖရိကအာဖရိက တောင်ပိုင်းအမေရိကန်မြောက် " + + "အမေရိကကာရစ်ဘီယံအရှေ့အာရှတောင်အာရှအရှေ့တောင်အာရှတောင်ဥရောပဩစတြေးလျနှင့်" + + " နယူးဇီလန်မီလာနီးရှားမိုက်ခရိုနီးရှား ဒေသပိုလီနီရှားအာရှအလယ်အာရှအနောက်အာ" + "ရှဥရောပအရှေ့ ဥရောပမြောက် ဥရောပအနောက် ဥရောပလက်တင်အမေရိက" -var myRegionIdx = []uint16{ // 292 elements +var myRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F - 0x0000, 0x002d, 0x0045, 0x005a, 0x0081, 0x00bb, 0x00d0, 0x00fa, - 0x011b, 0x0133, 0x014b, 0x016f, 0x01a0, 0x01bb, 0x01d3, 0x01eb, - 0x020c, 0x0230, 0x0285, 0x02a6, 0x02d0, 0x02f1, 0x031c, 0x0343, - 0x0358, 0x0370, 0x037f, 0x03a9, 0x03be, 0x03d9, 0x03fd, 0x0431, - 0x0443, 0x0458, 0x0467, 0x0488, 0x04a3, 0x04bb, 0x04ca, 0x04d9, - 0x0500, 0x0515, 0x0556, 0x058a, 0x05a5, 0x05c7, 0x05ec, 0x05fb, - 0x0616, 0x0625, 0x0640, 0x066d, 0x0691, 0x06a6, 0x06be, 0x06e2, - 0x070d, 0x072e, 0x075c, 0x076e, 0x0795, 0x07aa, 0x07c2, 0x07dd, + 0x0000, 0x0030, 0x0048, 0x005d, 0x0084, 0x00be, 0x00d3, 0x00fd, + 0x011e, 0x0136, 0x014e, 0x0172, 0x01a3, 0x01be, 0x01d6, 0x01ee, + 0x020f, 0x0233, 0x0288, 0x02a9, 0x02d3, 0x02f4, 0x031f, 0x0346, + 0x035b, 0x0373, 0x0382, 0x03ac, 0x03c1, 0x03dc, 0x0400, 0x0434, + 0x0446, 0x045b, 0x046a, 0x048b, 0x04a6, 0x04be, 0x04cd, 0x04dc, + 0x0503, 0x0518, 0x0559, 0x058d, 0x05a8, 0x05ca, 0x05ef, 0x05fe, + 0x0619, 0x0628, 0x0643, 0x0670, 0x0694, 0x06a9, 0x06c1, 0x06e5, + 0x0710, 0x0731, 0x074c, 0x075e, 0x0785, 0x079a, 0x07b2, 0x07cd, // Entry 40 - 7F - 0x07fb, 0x0828, 0x0864, 0x087c, 0x08a6, 0x08b8, 0x08da, 0x08fb, - 0x090a, 0x0934, 0x0952, 0x0952, 0x0964, 0x0973, 0x09a4, 0x09d1, - 0x0a08, 0x0a1d, 0x0a2f, 0x0a65, 0x0a7a, 0x0a98, 0x0ac9, 0x0ade, - 0x0aea, 0x0b0e, 0x0b29, 0x0b3e, 0x0b4a, 0x0b5f, 0x0b81, 0x0b8a, - 0x0c1f, 0x0c3a, 0x0c49, 0x0c65, 0x0c80, 0x0cbc, 0x0d19, 0x0d3d, - 0x0d5e, 0x0d6a, 0x0d7f, 0x0da7, 0x0dce, 0x0dec, 0x0e01, 0x0e1c, - 0x0e31, 0x0ea4, 0x0eb3, 0x0ec2, 0x0edd, 0x0eec, 0x0efb, 0x0f0d, - 0x0f25, 0x0f34, 0x0f43, 0x0f61, 0x0f85, 0x0f9d, 0x0fbe, 0x0ff7, + 0x07eb, 0x0818, 0x0854, 0x086c, 0x0896, 0x08a8, 0x08ca, 0x08eb, + 0x08fa, 0x0924, 0x0942, 0x095a, 0x096c, 0x097b, 0x09ac, 0x09d9, + 0x0a10, 0x0a25, 0x0a37, 0x0a6d, 0x0a82, 0x0aa0, 0x0ac8, 0x0add, + 0x0ae9, 0x0b0d, 0x0b28, 0x0b3d, 0x0b49, 0x0b5e, 0x0b80, 0x0b89, + 0x0c1e, 0x0c39, 0x0c48, 0x0c64, 0x0c7f, 0x0cbb, 0x0d18, 0x0d3c, + 0x0d5d, 0x0d69, 0x0d7e, 0x0da6, 0x0dcd, 0x0deb, 0x0e00, 0x0e1b, + 0x0e30, 0x0ea3, 0x0eb2, 0x0ec1, 0x0edc, 0x0eeb, 0x0efa, 0x0f0c, + 0x0f24, 0x0f33, 0x0f42, 0x0f60, 0x0f84, 0x0f9c, 0x0fbd, 0x0ff6, // Entry 80 - BF - 0x1024, 0x104e, 0x1060, 0x1088, 0x10a3, 0x10b2, 0x10ca, 0x10eb, - 0x110f, 0x112d, 0x1157, 0x116f, 0x1199, 0x11b1, 0x11cc, 0x11e1, - 0x11ff, 0x1217, 0x1235, 0x125c, 0x127a, 0x1298, 0x12c3, 0x12f0, - 0x12fc, 0x1316, 0x1340, 0x1370, 0x13c1, 0x13d9, 0x1406, 0x1427, - 0x143c, 0x1454, 0x1475, 0x1487, 0x14a2, 0x14ba, 0x14d5, 0x14f3, - 0x152a, 0x1542, 0x1569, 0x1596, 0x15b1, 0x15c9, 0x15db, 0x15ea, - 0x15ff, 0x1611, 0x162c, 0x163e, 0x1653, 0x1662, 0x169f, 0x16ca, - 0x16e8, 0x1703, 0x1715, 0x1761, 0x1797, 0x17bb, 0x17f8, 0x1810, + 0x1023, 0x104d, 0x105f, 0x1087, 0x10a2, 0x10b1, 0x10c9, 0x10ea, + 0x110e, 0x112c, 0x1156, 0x116e, 0x1198, 0x11b0, 0x11cb, 0x11e0, + 0x11fe, 0x1216, 0x1234, 0x125b, 0x1279, 0x1297, 0x12c2, 0x12ef, + 0x12fb, 0x130d, 0x1337, 0x1367, 0x13b8, 0x13d0, 0x13fd, 0x141e, + 0x1433, 0x144b, 0x146c, 0x147e, 0x1499, 0x14b1, 0x14cc, 0x14ea, + 0x1521, 0x1539, 0x1560, 0x158d, 0x15a8, 0x15c0, 0x15d2, 0x15e1, + 0x15f6, 0x1608, 0x1623, 0x1635, 0x164a, 0x1659, 0x1696, 0x16c1, + 0x16df, 0x16fa, 0x170c, 0x1758, 0x178e, 0x17b2, 0x17ef, 0x1807, // Entry C0 - FF - 0x1822, 0x183a, 0x1846, 0x18b4, 0x18c6, 0x18ea, 0x1905, 0x1911, - 0x1923, 0x1956, 0x1989, 0x199b, 0x19aa, 0x19bc, 0x19d4, 0x19fb, - 0x1a22, 0x1a67, 0x1a8e, 0x1ab6, 0x1ad4, 0x1ae9, 0x1b04, 0x1b19, - 0x1b38, 0x1b7e, 0x1ba8, 0x1bc3, 0x1bde, 0x1bf6, 0x1c28, 0x1c79, - 0x1c85, 0x1ce1, 0x1cf3, 0x1d05, 0x1d29, 0x1d44, 0x1d62, 0x1d8f, - 0x1daa, 0x1dbc, 0x1dcb, 0x1e0e, 0x1e23, 0x1e3b, 0x1e62, 0x1e7a, - 0x1e95, 0x1ef6, 0x1f0e, 0x1f3b, 0x1f50, 0x1f74, 0x1f98, 0x1fed, - 0x200e, 0x2055, 0x2099, 0x20b1, 0x20c6, 0x2103, 0x211b, 0x2136, + 0x1819, 0x1831, 0x183d, 0x18ab, 0x18c6, 0x18ea, 0x1905, 0x1917, + 0x1929, 0x195c, 0x198f, 0x19a1, 0x19b0, 0x19c2, 0x19da, 0x1a01, + 0x1a28, 0x1a6d, 0x1a94, 0x1abc, 0x1ada, 0x1aef, 0x1b0a, 0x1b1f, + 0x1b3e, 0x1b84, 0x1bae, 0x1bc9, 0x1be4, 0x1bfc, 0x1c2e, 0x1c7f, + 0x1c8b, 0x1ce7, 0x1cf9, 0x1d0b, 0x1d2f, 0x1d4a, 0x1d68, 0x1d95, + 0x1db0, 0x1dc2, 0x1dd1, 0x1e14, 0x1e29, 0x1e41, 0x1e68, 0x1e80, + 0x1e9b, 0x1efc, 0x1f14, 0x1f4e, 0x1f63, 0x1f87, 0x1fae, 0x2003, + 0x2024, 0x206b, 0x20af, 0x20c7, 0x20dc, 0x2119, 0x2131, 0x214c, // Entry 100 - 13F - 0x2145, 0x215d, 0x217e, 0x2193, 0x21ab, 0x21e3, 0x21f2, 0x2204, - 0x2238, 0x225a, 0x227b, 0x22a0, 0x22bf, 0x22e1, 0x2306, 0x2325, - 0x2359, 0x2371, 0x2396, 0x23b1, 0x23cc, 0x23e7, 0x2411, 0x242f, - 0x2472, 0x2493, 0x24cd, 0x24ee, 0x24fa, 0x2512, 0x2530, 0x253f, - 0x255e, 0x2580, 0x25a2, 0x25c6, -} // Size: 608 bytes - -const neRegionStr string = "" + // Size: 9070 bytes + 0x215b, 0x216d, 0x218e, 0x21a3, 0x21bb, 0x21f3, 0x2202, 0x2214, + 0x2248, 0x226a, 0x228b, 0x22b0, 0x22cf, 0x22f1, 0x2316, 0x2335, + 0x2369, 0x2381, 0x23a6, 0x23c1, 0x23dc, 0x23f7, 0x2421, 0x243f, + 0x2482, 0x24a3, 0x24dd, 0x24fe, 0x250a, 0x2522, 0x2540, 0x254f, + 0x256e, 0x2590, 0x25b2, 0x25b2, 0x25d6, +} // Size: 610 bytes + +const neRegionStr string = "" + // Size: 9054 bytes "एस्केन्सन टापुअन्डोर्रासंयुक्त अरब इमिराट्सअफगानिस्तानएन्टिगुआ र बारबुडा" + - "आङ्गुइलाअल्बानियाआर्मेनियाअङ्गोलाअन्टारटिकाअर्जेन्टिनाअमेरिकी समोआअष्ट" + - "्रियाअष्ट्रेलियाआरूबाअलान्ड टापुहरुअजरबैजानबोस्निया एण्ड हर्जगोभिनियाब" + + "आङ्गुइलाअल्बेनियाआर्मेनियाअङ्गोलाअन्टारटिकाअर्जेन्टिनाअमेरिकी समोआअष्ट" + + "्रियाअष्ट्रेलियाअरुबाअलान्ड टापुहरुअजरबैजानबोस्निया एण्ड हर्जगोभिनियाब" + "ार्बाडोसबङ्गलादेशबेल्जियमबर्किना फासोबुल्गेरियाबहराइनबुरूण्डीबेनिनसेन्" + "ट बार्थालेमीबर्मुडाब्रुनाइबोलिभियाक्यारिवियन नेदरल्याण्ड्सब्राजिलबहामा" + - "सभुटानबुभेट टापुबोट्स्वानाबेलारूसबेलिजक्यानाडाकोकोस (किलिंग) टापुहरुको" + - "ङ्गो-किन्शासाकेन्द्रीय अफ्रिकी गणतन्त्रकोङ्गो - ब्राज्जाभिल्लेस्विजरल्" + - "याण्डआइभोरी कोस्टकुक टापुहरुचिलीक्यामरूनचीनकोलोम्बियाक्लिप्पेर्टन टापु" + - "कोष्टारिकाक्युबाकेप भर्डेकुराकाओक्रिष्टमस टापुसाइप्रसचेक गणतन्त्रजर्मन" + - "ीडियगो गार्सियाडिजिबुटीडेनमार्कडोमिनिकाडोमिनिकन गणतन्त्रअल्जेरियासिउटा" + - " र मेलिलाइक्वडेरइस्टोनियाइजिप्टपश्चिमी साहाराएरित्रियास्पेनइथियोपियायुरो" + - "पियन युनियनफिन्ल्याण्डफिजीफकल्याण्ड टापुहरुमाइक्रोनेसियाफारो टापुहरूफ्" + - "रान्सगावोनबेलायतग्रेनाडाजर्जियाफ्रान्सेली गायनागुएर्नसेघानाजिब्राल्टार" + - "ग्रिनल्याण्डगाम्वियागिनीग्वाडेलुपभू-मध्यीय गिनीग्रिसदक्षिण जर्जिया र द" + - "क्षिण स्यान्डवीच टापुहरूग्वाटेमालागुवामगिनी-बिसाउगुयानाहङकङ चिनिया समा" + - "जवादी स्वायत्त क्षेत्रहर्ड टापु र म्याकडोनाल्ड टापुहरुहन्डुरासक्रोएशिय" + - "ाहैटीहङ्गेरीक्यानारी टापुहरूइन्डोनेशियाआयरल्याण्डइजरायलआइज्ले अफ् म्या" + - "नभारतबेलायती हिन्द महासागर क्षेत्रइराकइरानआइस्ल्याण्डइटालीजर्सीजमाइकाज" + - "ोर्डनजापानकेन्याकिर्गिस्थानकम्बोडियाकिरिबाटीकोमोरोससेन्ट किट्स र नेभिस" + - "उत्तर कोरियादक्षिण कोरियाकुवेतकेयमान टापुकाजाकस्तानलाओसलेबननसेन्ट लुसि" + - "यालिएखटेन्स्टाइनश्रीलङ्कालाइबेरियालेसोथोलिथुअनियालक्जेमबर्गलाट्भियालिब" + - "ियामोरोक्कोमोनाकोमाल्डोभामोन्टेनेग्रोसेन्ट मार्टिनमडागास्करमार्शल टापु" + - "हरुम्याकेडोनियामालीम्यान्मार (बर्मा)मङ्गोलियामकावो चिनिँया स्वशासित क्" + - "षेत्रउत्तरी मारिआना टापुमार्टिनिकमाउरिटानियामोन्टसेर्राटमाल्टामाउरिटसम" + - "ाल्दिभ्समालावीमेक्सिकोमलेसियामोजाम्बिकनामिबियानयाँ कालेडोनियानाइजरनोरफ" + - "ोल्क टापुनाइजेरियानिकारागुवानेदरल्याण्ड्सनर्वेनेपालनाउरूनियुइन्युजिल्य" + - "ाण्डओमनपनामापेरूफ्रान्सेली पोलिनेसियापपुआ न्यू गाइनियाफिलिपिन्सपाकिस्त" + - "ानपोल्याण्डसेन्ट पिर्रे र मिक्केलोनपिटकाइर्न टापुहरुपुएर्टो रिकोप्याले" + - "स्टनी भू-भागहरुपोर्चुगलपलाउप्याराग्वेकतारबाह्य ओसनियारियुनियनरोमानियास" + - "र्बियारूसरवाण्डासाउदी अरबसोलोमोन टापुहरुसेचेलेससुडानस्विडेनसिङ्गापुरसे" + - "न्ट हेलेनास्लोभेनियासभाल्बार्ड र जान मायेनस्लोभाकियासिएर्रा लिओनसान् म" + - "ारिनोसेनेगालसोमालियासुरिनेमदक्षिणी सुडानसाओ टोमे र प्रिन्सिपएल् साल्भा" + - "डोरसिन्ट मार्टेनसिरियास्वाजिल्याण्डट्रिस्टान डा कुन्हातुर्क र काइकोस ट" + - "ापुचाडफ्रान्सेली दक्षिणी क्षेत्रहरुटोगोथाइल्याण्डताजिकिस्तानतोकेलाउटिम" + - "ोर-लेस्टेतुर्कमेनिस्तानट्युनिसियाटोंगाटर्कीत्रिनिडाड एण्ड टोबागोतुभालु" + - "ताइवानतान्जानियायुक्रेनयुगाण्डासंयुक्त राज्यका बाह्य टापुहरुसंयुक्त रा" + - "ष्ट्र संघसंयुक्त राज्यउरूग्वेउज्बेकिस्तानभेटिकन सिटीसेन्ट भिन्सेन्ट र " + - "ग्रेनाडिन्सभेनेजुएलाबेलायती भर्जिन टापुहरुसंयुक्त राज्य भर्जिन टापुहरु" + - "भिएतनामभानुआतुवालिस र फुटुनासामोआकोसोवोयेमेनमायोट्टदक्षिण अफ्रिकाजाम्ब" + - "ियाजिम्बाबेअज्ञात क्षेत्रविश्वअफ्रिकाउत्तर अमेरिकादक्षिण अमेरिकाओसनिया" + - "पश्चिमी अफ्रिकाकेन्द्रीय अमेरिकापूर्वी अफ्रिकाउत्तरी अफ्रिकामध्य अफ्रि" + - "कादक्षिणी अफ्रिकाअमेरिकासउत्तरी अमेरिकाक्यारिबियनपूर्वी एशियादक्षिणी ए" + - "शियादक्षिण पूर्वी एशियादक्षिणी युरोपअष्ट्रालासियामेलानेसियामाइक्रोनेसि" + - "याली क्षेत्रपोलिनेशियाएशियाकेन्द्रीय एशियापश्चिमी एशियायुरोपपूर्वी युर" + - "ोपउत्तरी युरोपपश्चिमी युरोपल्याटिन अमेरिका" - -var neRegionIdx = []uint16{ // 292 elements + "सभुटानबुभेट टापुबोट्स्वानाबेलारूसबेलिजक्यानाडाकोकोस (किलिंग) टापुहरुकङ" + + "्गो - किन्शासाकेन्द्रीय अफ्रिकी गणतन्त्रकङ्गो ब्राजाभिलस्विजरल्याण्डआइ" + + "भोरी कोस्टकुक टापुहरुचिलीक्यामरूनचीनकोलोम्बियाक्लिप्पेर्टन टापुकोष्टार" + + "िकाक्युबाकेप भर्डेकुराकाओक्रिष्टमस टापुसाइप्रसचेकियाजर्मनीडियगो गार्सि" + + "याडिजिबुटीडेनमार्कडोमिनिकाडोमिनिकन गणतन्त्रअल्जेरियासिउटा र मेलिलाइक्व" + + "ेडोरइस्टोनियाइजिप्टपश्चिमी साहाराएरित्रियास्पेनइथियोपियायुरोपियन युनिय" + + "नयुरोजोनफिन्ल्याण्डफिजीफकल्याण्ड टापुहरुमाइक्रोनेसियाफारो टापुहरूफ्रान" + + "्सगावोनबेलायतग्रेनाडाजर्जियाफ्रान्सेली गायनागुएर्नसेघानाजिब्राल्टारग्र" + + "िनल्याण्डगाम्वियागिनीग्वाडेलुपभू-मध्यीय गिनीग्रिसदक्षिण जर्जिया र दक्ष" + + "िण स्यान्डवीच टापुहरूग्वाटेमालागुवामगिनी-बिसाउगुयानाहङकङ चिनियाँ समाजब" + + "ादी स्वायत्त क्षेत्रहर्ड टापु र म्याकडोनाल्ड टापुहरुहन्डुरासक्रोएशियाह" + + "ैटीहङ्गेरीक्यानारी टापुहरूइन्डोनेशियाआयरल्याण्डइजरायलआइल अफ म्यानभारतब" + + "ेलायती हिन्द महासागर क्षेत्रइराकइरानआइस्ल्याण्डइटालीजर्सीजमाइकाजोर्डनज" + + "ापानकेन्याकिर्गिस्तानकम्बोडियाकिरिबाटीकोमोरोससेन्ट किट्स र नेभिसउत्तर " + + "कोरियादक्षिण कोरियाकुवेतकेयमान टापुकाजाकस्तानलाओसलेबननसेन्ट लुसियालिएख" + + "टेन्स्टाइनश्रीलङ्कालाइबेरियालेसोथोलिथुएनियालक्जेमबर्गलाट्भियालिबियामोर" + + "ोक्कोमोनाकोमाल्डोभामोन्टेनेग्रोसेन्ट मार्टिनमाडागास्करमार्शल टापुहरुम्" + + "यासेडोनियामालीम्यान्मार (बर्मा)मङ्गोलियामकाउ चिनियाँ स्वशासित क्षेत्रउ" + + "त्तरी मारिआना टापुमार्टिनिकमाउरिटानियामोन्टसेर्राटमाल्टामाउरिटसमाल्दिभ" + + "्समालावीमेक्सिकोमलेसियामोजाम्बिकनामिबियान्यु क्यालेडोनियानाइजरनोरफोल्क" + + " टापुनाइजेरियानिकारागुवानेदरल्याण्डनर्वेनेपालनाउरूनियुइन्युजिल्याण्डओमनप" + + "्यानामापेरूफ्रान्सेली पोलिनेसियापपुआ न्यू गाइनियाफिलिपिन्सपाकिस्तानपोल" + + "्याण्डसेन्ट पिर्रे र मिक्केलोनपिटकाइर्न टापुहरुपुएर्टो रिकोप्यालेस्टनी" + + " भू-भागहरुपोर्चुगलपलाउप्याराग्वेकतारबाह्य ओसनियारियुनियनरोमेनियासर्बियार" + + "ूसरवाण्डासाउदी अरबसोलोमोन टापुहरुसेचेलेससुडानस्विडेनसिङ्गापुरसेन्ट हेल" + + "ेनास्लोभेनियासभाल्बार्ड र जान मायेनस्लोभाकियासिएर्रा लिओनसान् मारिनोसे" + + "नेगलसोमालियासुरिनेमदक्षिणी सुडानसाओ टोमे र प्रिन्सिपएल् साल्भाडोरसिन्ट" + + " मार्टेनसिरियास्वाजिल्याण्डट्रिस्टान डा कुन्हातुर्क र काइकोस टापुचाडफ्रा" + + "न्सेली दक्षिणी क्षेत्रहरुटोगोथाइल्याण्डताजिकिस्तानतोकेलाउटिमोर-लेस्टेत" + + "ुर्कमेनिस्तानट्युनिसियाटोंगाटर्कीत्रिनिडाड एण्ड टोबागोतुभालुताइवानतान्" + + "जानियायुक्रेनयुगाण्डासंयुक्त राज्यका बाह्य टापुहरुसंयुक्त राष्ट्र संघस" + + "ंयुक्त राज्यउरूग्वेउज्बेकिस्तानभेटिकन सिटीसेन्ट भिन्सेन्ट र ग्रेनाडिन्" + + "सभेनेजुएलाबेलायती भर्जिन टापुहरुसंयुक्त राज्य भर्जिन टापुहरुभिएतनामभान" + + "ुआतुवालिस र फुटुनासामोआकोसोभोयेमेनमायोट्टदक्षिण अफ्रिकाजाम्बियाजिम्बाब" + + "ेअज्ञात क्षेत्रविश्वअफ्रिकाउत्तर अमेरिकादक्षिण अमेरिकाओसनियापश्चिमी अफ" + + "्रिकाकेन्द्रीय अमेरिकापूर्वी अफ्रिकाउत्तरी अफ्रिकामध्य अफ्रिकादक्षिणी " + + "अफ्रिकाअमेरिकासउत्तरी अमेरिकाक्यारिबियनपूर्वी एशियादक्षिणी एशियादक्षिण" + + " पूर्वी एशियादक्षिणी युरोपअष्ट्रालासियामेलानेसियामाइक्रोनेसियाली क्षेत्र" + + "पोलिनेशियाएशियाकेन्द्रीय एशियापश्चिमी एशियायुरोपपूर्वी युरोपउत्तरी युर" + + "ोपपश्चिमी युरोपल्याटिन अमेरिका" + +var neRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0028, 0x0043, 0x007b, 0x009c, 0x00ce, 0x00e6, 0x0101, 0x011c, 0x0131, 0x014f, 0x0170, 0x0192, 0x01ad, 0x01ce, 0x01dd, 0x0205, 0x021d, 0x0267, 0x0282, 0x029d, 0x02b5, 0x02d7, 0x02f5, 0x0307, 0x031f, 0x032e, 0x035c, 0x0371, 0x0386, 0x039e, 0x03e4, 0x03f9, 0x040b, 0x041a, 0x0436, 0x0454, 0x0469, 0x0478, 0x0490, - 0x04ca, 0x04f5, 0x053f, 0x057e, 0x05a5, 0x05c7, 0x05e6, 0x05f2, - 0x060a, 0x0613, 0x0631, 0x0662, 0x0680, 0x0692, 0x06ab, 0x06c0, - 0x06e8, 0x06fd, 0x071f, 0x0731, 0x0759, 0x0771, 0x0789, 0x07a1, + 0x04ca, 0x04f4, 0x053e, 0x0569, 0x0590, 0x05b2, 0x05d1, 0x05dd, + 0x05f5, 0x05fe, 0x061c, 0x064d, 0x066b, 0x067d, 0x0696, 0x06ab, + 0x06d3, 0x06e8, 0x06fa, 0x070c, 0x0734, 0x074c, 0x0764, 0x077c, // Entry 40 - 7F - 0x07d2, 0x07ed, 0x0813, 0x0828, 0x0843, 0x0855, 0x087d, 0x0898, - 0x08a7, 0x08c2, 0x08ed, 0x08ed, 0x090e, 0x091a, 0x094b, 0x0972, - 0x0994, 0x09a9, 0x09b8, 0x09ca, 0x09e2, 0x09f7, 0x0a25, 0x0a3d, - 0x0a49, 0x0a6a, 0x0a8e, 0x0aa6, 0x0ab2, 0x0acd, 0x0af3, 0x0b02, - 0x0b76, 0x0b94, 0x0ba3, 0x0bbf, 0x0bd1, 0x0c38, 0x0c90, 0x0ca8, - 0x0cc3, 0x0ccf, 0x0ce4, 0x0d12, 0x0d33, 0x0d51, 0x0d63, 0x0d8f, - 0x0d9b, 0x0dec, 0x0df8, 0x0e04, 0x0e25, 0x0e34, 0x0e43, 0x0e55, - 0x0e67, 0x0e76, 0x0e88, 0x0ea9, 0x0ec4, 0x0edc, 0x0ef1, 0x0f24, + 0x07ad, 0x07c8, 0x07ee, 0x0806, 0x0821, 0x0833, 0x085b, 0x0876, + 0x0885, 0x08a0, 0x08cb, 0x08e0, 0x0901, 0x090d, 0x093e, 0x0965, + 0x0987, 0x099c, 0x09ab, 0x09bd, 0x09d5, 0x09ea, 0x0a18, 0x0a30, + 0x0a3c, 0x0a5d, 0x0a81, 0x0a99, 0x0aa5, 0x0ac0, 0x0ae6, 0x0af5, + 0x0b69, 0x0b87, 0x0b96, 0x0bb2, 0x0bc4, 0x0c2e, 0x0c86, 0x0c9e, + 0x0cb9, 0x0cc5, 0x0cda, 0x0d08, 0x0d29, 0x0d47, 0x0d59, 0x0d79, + 0x0d85, 0x0dd6, 0x0de2, 0x0dee, 0x0e0f, 0x0e1e, 0x0e2d, 0x0e3f, + 0x0e51, 0x0e60, 0x0e72, 0x0e93, 0x0eae, 0x0ec6, 0x0edb, 0x0f0e, // Entry 80 - BF - 0x0f46, 0x0f6b, 0x0f7a, 0x0f99, 0x0fb7, 0x0fc3, 0x0fd2, 0x0ff4, - 0x101e, 0x1039, 0x1054, 0x1066, 0x1081, 0x109f, 0x10b7, 0x10c9, - 0x10e1, 0x10f3, 0x110b, 0x112f, 0x1154, 0x116f, 0x1197, 0x11bb, - 0x11c7, 0x11f4, 0x120f, 0x1263, 0x1298, 0x12b3, 0x12d4, 0x12f8, - 0x130a, 0x131f, 0x133a, 0x134c, 0x1364, 0x1379, 0x1394, 0x13ac, - 0x13d7, 0x13e6, 0x140b, 0x1426, 0x1444, 0x146b, 0x147a, 0x1489, - 0x1498, 0x14a7, 0x14ce, 0x14d7, 0x14e6, 0x14f2, 0x152f, 0x155e, - 0x1579, 0x1594, 0x15af, 0x15f1, 0x1622, 0x1644, 0x167f, 0x1697, + 0x0f30, 0x0f55, 0x0f64, 0x0f83, 0x0fa1, 0x0fad, 0x0fbc, 0x0fde, + 0x1008, 0x1023, 0x103e, 0x1050, 0x106b, 0x1089, 0x10a1, 0x10b3, + 0x10cb, 0x10dd, 0x10f5, 0x1119, 0x113e, 0x115c, 0x1184, 0x11a8, + 0x11b4, 0x11e1, 0x11fc, 0x124d, 0x1282, 0x129d, 0x12be, 0x12e2, + 0x12f4, 0x1309, 0x1324, 0x1336, 0x134e, 0x1363, 0x137e, 0x1396, + 0x13c7, 0x13d6, 0x13fb, 0x1416, 0x1434, 0x1455, 0x1464, 0x1473, + 0x1482, 0x1491, 0x14b8, 0x14c1, 0x14d9, 0x14e5, 0x1522, 0x1551, + 0x156c, 0x1587, 0x15a2, 0x15e4, 0x1615, 0x1637, 0x1672, 0x168a, // Entry C0 - FF - 0x16a3, 0x16c1, 0x16cd, 0x16ef, 0x1707, 0x171f, 0x1734, 0x173d, - 0x1752, 0x176b, 0x1796, 0x17ab, 0x17ba, 0x17cf, 0x17ea, 0x180c, - 0x182a, 0x1866, 0x1884, 0x18a6, 0x18c5, 0x18da, 0x18f2, 0x1907, - 0x192c, 0x1962, 0x1987, 0x19ac, 0x19be, 0x19e5, 0x1a1a, 0x1a4d, - 0x1a56, 0x1aa9, 0x1ab5, 0x1ad3, 0x1af4, 0x1b09, 0x1b2b, 0x1b55, - 0x1b73, 0x1b82, 0x1b91, 0x1bcc, 0x1bde, 0x1bf0, 0x1c0e, 0x1c23, - 0x1c3b, 0x1c8c, 0x1cc1, 0x1ce6, 0x1cfb, 0x1d1f, 0x1d3e, 0x1d8f, - 0x1daa, 0x1de8, 0x1e36, 0x1e4b, 0x1e60, 0x1e86, 0x1e95, 0x1ea7, + 0x1696, 0x16b4, 0x16c0, 0x16e2, 0x16fa, 0x1712, 0x1727, 0x1730, + 0x1745, 0x175e, 0x1789, 0x179e, 0x17ad, 0x17c2, 0x17dd, 0x17ff, + 0x181d, 0x1859, 0x1877, 0x1899, 0x18b8, 0x18ca, 0x18e2, 0x18f7, + 0x191c, 0x1952, 0x1977, 0x199c, 0x19ae, 0x19d5, 0x1a0a, 0x1a3d, + 0x1a46, 0x1a99, 0x1aa5, 0x1ac3, 0x1ae4, 0x1af9, 0x1b1b, 0x1b45, + 0x1b63, 0x1b72, 0x1b81, 0x1bbc, 0x1bce, 0x1be0, 0x1bfe, 0x1c13, + 0x1c2b, 0x1c7c, 0x1cb1, 0x1cd6, 0x1ceb, 0x1d0f, 0x1d2e, 0x1d7f, + 0x1d9a, 0x1dd8, 0x1e26, 0x1e3b, 0x1e50, 0x1e76, 0x1e85, 0x1e97, // Entry 100 - 13F - 0x1eb6, 0x1ecb, 0x1ef3, 0x1f0b, 0x1f23, 0x1f4b, 0x1f5a, 0x1f6f, - 0x1f94, 0x1fbc, 0x1fce, 0x1ff9, 0x202a, 0x2052, 0x207a, 0x209c, - 0x20c7, 0x20df, 0x2107, 0x2125, 0x2147, 0x216c, 0x21a1, 0x21c6, - 0x21ed, 0x220b, 0x224e, 0x226c, 0x227b, 0x22a6, 0x22cb, 0x22da, - 0x22fc, 0x231e, 0x2343, 0x236e, -} // Size: 608 bytes - -const nlRegionStr string = "" + // Size: 3078 bytes + 0x1ea6, 0x1ebb, 0x1ee3, 0x1efb, 0x1f13, 0x1f3b, 0x1f4a, 0x1f5f, + 0x1f84, 0x1fac, 0x1fbe, 0x1fe9, 0x201a, 0x2042, 0x206a, 0x208c, + 0x20b7, 0x20cf, 0x20f7, 0x2115, 0x2137, 0x215c, 0x2191, 0x21b6, + 0x21dd, 0x21fb, 0x223e, 0x225c, 0x226b, 0x2296, 0x22bb, 0x22ca, + 0x22ec, 0x230e, 0x2333, 0x2333, 0x235e, +} // Size: 610 bytes + +const nlRegionStr string = "" + // Size: 3081 bytes "AscensionAndorraVerenigde Arabische EmiratenAfghanistanAntigua en Barbud" + "aAnguillaAlbaniëArmeniëAngolaAntarcticaArgentiniëAmerikaans-SamoaOostenr" + "ijkAustraliëArubaÅlandAzerbeidzjanBosnië en HerzegovinaBarbadosBanglades" + @@ -47425,40 +50185,41 @@ const nlRegionStr string = "" + // Size: 3078 bytes "lombiaClippertonCosta RicaCubaKaapverdiëCuraçaoChristmaseilandCyprusTsje" + "chiëDuitslandDiego GarciaDjiboutiDenemarkenDominicaDominicaanse Republie" + "kAlgerijeCeuta en MelillaEcuadorEstlandEgypteWestelijke SaharaEritreaSpa" + - "njeEthiopiëEuropese UnieFinlandFijiFalklandeilandenMicronesiaFaeröerFran" + - "krijkGabonVerenigd KoninkrijkGrenadaGeorgiëFrans-GuyanaGuernseyGhanaGibr" + - "altarGroenlandGambiaGuineeGuadeloupeEquatoriaal-GuineaGriekenlandZuid-Ge" + - "orgia en Zuidelijke SandwicheilandenGuatemalaGuamGuinee-BissauGuyanaHong" + - "kong SAR van ChinaHeard en McDonaldeilandenHondurasKroatiëHaïtiHongarije" + - "Canarische EilandenIndonesiëIerlandIsraëlIsle of ManIndiaBritse Gebieden" + - " in de Indische OceaanIrakIranIJslandItaliëJerseyJamaicaJordaniëJapanKen" + - "iaKirgiziëCambodjaKiribatiComorenSaint Kitts en NevisNoord-KoreaZuid-Kor" + - "eaKoeweitKaaimaneilandenKazachstanLaosLibanonSaint LuciaLiechtensteinSri" + - " LankaLiberiaLesothoLitouwenLuxemburgLetlandLibiëMarokkoMonacoMoldaviëMo" + - "ntenegroSaint-MartinMadagaskarMarshalleilandenMacedoniëMaliMyanmar (Birm" + - "a)MongoliëMacau SAR van ChinaNoordelijke MarianenMartiniqueMauritaniëMon" + - "tserratMaltaMauritiusMaldivenMalawiMexicoMaleisiëMozambiqueNamibiëNieuw-" + - "CaledoniëNigerNorfolkNigeriaNicaraguaNederlandNoorwegenNepalNauruNiueNie" + - "uw-ZeelandOmanPanamaPeruFrans-PolynesiëPapoea-Nieuw-GuineaFilipijnenPaki" + - "stanPolenSaint-Pierre en MiquelonPitcairneilandenPuerto RicoPalestijnse " + - "gebiedenPortugalPalauParaguayQataroverig OceaniëRéunionRoemeniëServiëRus" + - "landRwandaSaoedi-ArabiëSalomonseilandenSeychellenSoedanZwedenSingaporeSi" + - "nt-HelenaSloveniëSpitsbergen en Jan MayenSlowakijeSierra LeoneSan Marino" + - "SenegalSomaliëSurinameZuid-SoedanSao Tomé en PrincipeEl SalvadorSint-Maa" + - "rtenSyriëSwazilandTristan da CunhaTurks- en CaicoseilandenTsjaadFranse G" + - "ebieden in de zuidelijke Indische OceaanTogoThailandTadzjikistanTokelauO" + - "ost-TimorTurkmenistanTunesiëTongaTurkijeTrinidad en TobagoTuvaluTaiwanTa" + - "nzaniaOekraïneOegandaKleine afgelegen eilanden van de Verenigde Statenve" + - "renigde natiesVerenigde StatenUruguayOezbekistanVaticaanstadSaint Vincen" + - "t en de GrenadinesVenezuelaBritse MaagdeneilandenAmerikaanse Maagdeneila" + - "ndenVietnamVanuatuWallis en FutunaSamoaKosovoJemenMayotteZuid-AfrikaZamb" + - "iaZimbabweonbekend gebiedwereldAfrikaNoord-AmerikaZuid-AmerikaOceaniëWes" + - "t-AfrikaMidden-AmerikaOost-AfrikaNoord-AfrikaCentraal-AfrikaZuidelijk Af" + - "rikaAmerikaNoordelijk AmerikaCaribisch gebiedOost-AziëZuid-AziëZuidoost-" + - "AziëZuid-EuropaAustralaziëMelanesiëMicronesische regioPolynesiëAziëCentr" + - "aal-AziëWest-AziëEuropaOost-EuropaNoord-EuropaWest-EuropaLatijns-Amerika" - -var nlRegionIdx = []uint16{ // 292 elements + "njeEthiopiëEuropese UnieeurozoneFinlandFijiFalklandeilandenMicronesiaFae" + + "röerFrankrijkGabonVerenigd KoninkrijkGrenadaGeorgiëFrans-GuyanaGuernseyG" + + "hanaGibraltarGroenlandGambiaGuineeGuadeloupeEquatoriaal-GuineaGriekenlan" + + "dZuid-Georgia en Zuidelijke SandwicheilandenGuatemalaGuamGuinee-BissauGu" + + "yanaHongkong SAR van ChinaHeard en McDonaldeilandenHondurasKroatiëHaïtiH" + + "ongarijeCanarische EilandenIndonesiëIerlandIsraëlIsle of ManIndiaBrits I" + + "ndische OceaanterritoriumIrakIranIJslandItaliëJerseyJamaicaJordaniëJapan" + + "KeniaKirgiziëCambodjaKiribatiComorenSaint Kitts en NevisNoord-KoreaZuid-" + + "KoreaKoeweitKaaimaneilandenKazachstanLaosLibanonSaint LuciaLiechtenstein" + + "Sri LankaLiberiaLesothoLitouwenLuxemburgLetlandLibiëMarokkoMonacoMoldavi" + + "ëMontenegroSaint-MartinMadagaskarMarshalleilandenMacedoniëMaliMyanmar (" + + "Birma)MongoliëMacau SAR van ChinaNoordelijke MarianenMartiniqueMauritani" + + "ëMontserratMaltaMauritiusMaldivenMalawiMexicoMaleisiëMozambiqueNamibiëN" + + "ieuw-CaledoniëNigerNorfolkNigeriaNicaraguaNederlandNoorwegenNepalNauruNi" + + "ueNieuw-ZeelandOmanPanamaPeruFrans-PolynesiëPapoea-Nieuw-GuineaFilipijne" + + "nPakistanPolenSaint-Pierre en MiquelonPitcairneilandenPuerto RicoPalesti" + + "jnse gebiedenPortugalPalauParaguayQataroverig OceaniëRéunionRoemeniëServ" + + "iëRuslandRwandaSaoedi-ArabiëSalomonseilandenSeychellenSoedanZwedenSingap" + + "oreSint-HelenaSloveniëSpitsbergen en Jan MayenSlowakijeSierra LeoneSan M" + + "arinoSenegalSomaliëSurinameZuid-SoedanSao Tomé en PrincipeEl SalvadorSin" + + "t-MaartenSyriëSwazilandTristan da CunhaTurks- en CaicoseilandenTsjaadFra" + + "nse Gebieden in de zuidelijke Indische OceaanTogoThailandTadzjikistanTok" + + "elauOost-TimorTurkmenistanTunesiëTongaTurkijeTrinidad en TobagoTuvaluTai" + + "wanTanzaniaOekraïneOegandaKleine afgelegen eilanden van de Verenigde Sta" + + "tenVerenigde NatiesVerenigde StatenUruguayOezbekistanVaticaanstadSaint V" + + "incent en de GrenadinesVenezuelaBritse MaagdeneilandenAmerikaanse Maagde" + + "neilandenVietnamVanuatuWallis en FutunaSamoaKosovoJemenMayotteZuid-Afrik" + + "aZambiaZimbabweonbekend gebiedwereldAfrikaNoord-AmerikaZuid-AmerikaOcean" + + "iëWest-AfrikaMidden-AmerikaOost-AfrikaNoord-AfrikaCentraal-AfrikaZuideli" + + "jk AfrikaAmerikaNoordelijk AmerikaCaribisch gebiedOost-AziëZuid-AziëZuid" + + "oost-AziëZuid-EuropaAustralaziëMelanesiëMicronesische regioPolynesiëAzië" + + "Centraal-AziëWest-AziëEuropaOost-EuropaNoord-EuropaWest-EuropaLatijns-Am" + + "erika" + +var nlRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0009, 0x0010, 0x002c, 0x0037, 0x0049, 0x0051, 0x0059, 0x0061, 0x0067, 0x0071, 0x007c, 0x008c, 0x0096, 0x00a0, 0x00a5, @@ -47470,40 +50231,40 @@ var nlRegionIdx = []uint16{ // 292 elements 0x0243, 0x0249, 0x0252, 0x025b, 0x0267, 0x026f, 0x0279, 0x0281, // Entry 40 - 7F 0x0297, 0x029f, 0x02af, 0x02b6, 0x02bd, 0x02c3, 0x02d4, 0x02db, - 0x02e1, 0x02ea, 0x02f7, 0x02f7, 0x02fe, 0x0302, 0x0312, 0x031c, - 0x0324, 0x032d, 0x0332, 0x0345, 0x034c, 0x0354, 0x0360, 0x0368, - 0x036d, 0x0376, 0x037f, 0x0385, 0x038b, 0x0395, 0x03a7, 0x03b2, - 0x03dd, 0x03e6, 0x03ea, 0x03f7, 0x03fd, 0x0413, 0x042c, 0x0434, - 0x043c, 0x0442, 0x044b, 0x045e, 0x0468, 0x046f, 0x0476, 0x0481, - 0x0486, 0x04ab, 0x04af, 0x04b3, 0x04ba, 0x04c1, 0x04c7, 0x04ce, - 0x04d7, 0x04dc, 0x04e1, 0x04ea, 0x04f2, 0x04fa, 0x0501, 0x0515, + 0x02e1, 0x02ea, 0x02f7, 0x02ff, 0x0306, 0x030a, 0x031a, 0x0324, + 0x032c, 0x0335, 0x033a, 0x034d, 0x0354, 0x035c, 0x0368, 0x0370, + 0x0375, 0x037e, 0x0387, 0x038d, 0x0393, 0x039d, 0x03af, 0x03ba, + 0x03e5, 0x03ee, 0x03f2, 0x03ff, 0x0405, 0x041b, 0x0434, 0x043c, + 0x0444, 0x044a, 0x0453, 0x0466, 0x0470, 0x0477, 0x047e, 0x0489, + 0x048e, 0x04ae, 0x04b2, 0x04b6, 0x04bd, 0x04c4, 0x04ca, 0x04d1, + 0x04da, 0x04df, 0x04e4, 0x04ed, 0x04f5, 0x04fd, 0x0504, 0x0518, // Entry 80 - BF - 0x0520, 0x052a, 0x0531, 0x0540, 0x054a, 0x054e, 0x0555, 0x0560, - 0x056d, 0x0576, 0x057d, 0x0584, 0x058c, 0x0595, 0x059c, 0x05a2, - 0x05a9, 0x05af, 0x05b8, 0x05c2, 0x05ce, 0x05d8, 0x05e8, 0x05f2, - 0x05f6, 0x0605, 0x060e, 0x0621, 0x0635, 0x063f, 0x064a, 0x0654, - 0x0659, 0x0662, 0x066a, 0x0670, 0x0676, 0x067f, 0x0689, 0x0691, - 0x06a1, 0x06a6, 0x06ad, 0x06b4, 0x06bd, 0x06c6, 0x06cf, 0x06d4, - 0x06d9, 0x06dd, 0x06ea, 0x06ee, 0x06f4, 0x06f8, 0x0708, 0x071b, - 0x0725, 0x072d, 0x0732, 0x074a, 0x075a, 0x0765, 0x0779, 0x0781, + 0x0523, 0x052d, 0x0534, 0x0543, 0x054d, 0x0551, 0x0558, 0x0563, + 0x0570, 0x0579, 0x0580, 0x0587, 0x058f, 0x0598, 0x059f, 0x05a5, + 0x05ac, 0x05b2, 0x05bb, 0x05c5, 0x05d1, 0x05db, 0x05eb, 0x05f5, + 0x05f9, 0x0608, 0x0611, 0x0624, 0x0638, 0x0642, 0x064d, 0x0657, + 0x065c, 0x0665, 0x066d, 0x0673, 0x0679, 0x0682, 0x068c, 0x0694, + 0x06a4, 0x06a9, 0x06b0, 0x06b7, 0x06c0, 0x06c9, 0x06d2, 0x06d7, + 0x06dc, 0x06e0, 0x06ed, 0x06f1, 0x06f7, 0x06fb, 0x070b, 0x071e, + 0x0728, 0x0730, 0x0735, 0x074d, 0x075d, 0x0768, 0x077c, 0x0784, // Entry C0 - FF - 0x0786, 0x078e, 0x0793, 0x07a2, 0x07aa, 0x07b3, 0x07ba, 0x07c1, - 0x07c7, 0x07d5, 0x07e5, 0x07ef, 0x07f5, 0x07fb, 0x0804, 0x080f, - 0x0818, 0x0830, 0x0839, 0x0845, 0x084f, 0x0856, 0x085e, 0x0866, - 0x0871, 0x0886, 0x0891, 0x089d, 0x08a3, 0x08ac, 0x08bc, 0x08d4, - 0x08da, 0x090a, 0x090e, 0x0916, 0x0922, 0x0929, 0x0933, 0x093f, - 0x0947, 0x094c, 0x0953, 0x0965, 0x096b, 0x0971, 0x0979, 0x0982, - 0x0989, 0x09ba, 0x09ca, 0x09da, 0x09e1, 0x09ec, 0x09f8, 0x0a16, - 0x0a1f, 0x0a35, 0x0a50, 0x0a57, 0x0a5e, 0x0a6e, 0x0a73, 0x0a79, + 0x0789, 0x0791, 0x0796, 0x07a5, 0x07ad, 0x07b6, 0x07bd, 0x07c4, + 0x07ca, 0x07d8, 0x07e8, 0x07f2, 0x07f8, 0x07fe, 0x0807, 0x0812, + 0x081b, 0x0833, 0x083c, 0x0848, 0x0852, 0x0859, 0x0861, 0x0869, + 0x0874, 0x0889, 0x0894, 0x08a0, 0x08a6, 0x08af, 0x08bf, 0x08d7, + 0x08dd, 0x090d, 0x0911, 0x0919, 0x0925, 0x092c, 0x0936, 0x0942, + 0x094a, 0x094f, 0x0956, 0x0968, 0x096e, 0x0974, 0x097c, 0x0985, + 0x098c, 0x09bd, 0x09cd, 0x09dd, 0x09e4, 0x09ef, 0x09fb, 0x0a19, + 0x0a22, 0x0a38, 0x0a53, 0x0a5a, 0x0a61, 0x0a71, 0x0a76, 0x0a7c, // Entry 100 - 13F - 0x0a7e, 0x0a85, 0x0a90, 0x0a96, 0x0a9e, 0x0aad, 0x0ab3, 0x0ab9, - 0x0ac6, 0x0ad2, 0x0ada, 0x0ae5, 0x0af3, 0x0afe, 0x0b0a, 0x0b19, - 0x0b29, 0x0b30, 0x0b42, 0x0b52, 0x0b5c, 0x0b66, 0x0b74, 0x0b7f, - 0x0b8b, 0x0b95, 0x0ba8, 0x0bb2, 0x0bb7, 0x0bc5, 0x0bcf, 0x0bd5, - 0x0be0, 0x0bec, 0x0bf7, 0x0c06, -} // Size: 608 bytes - -const noRegionStr string = "" + // Size: 2830 bytes + 0x0a81, 0x0a88, 0x0a93, 0x0a99, 0x0aa1, 0x0ab0, 0x0ab6, 0x0abc, + 0x0ac9, 0x0ad5, 0x0add, 0x0ae8, 0x0af6, 0x0b01, 0x0b0d, 0x0b1c, + 0x0b2c, 0x0b33, 0x0b45, 0x0b55, 0x0b5f, 0x0b69, 0x0b77, 0x0b82, + 0x0b8e, 0x0b98, 0x0bab, 0x0bb5, 0x0bba, 0x0bc8, 0x0bd2, 0x0bd8, + 0x0be3, 0x0bef, 0x0bfa, 0x0bfa, 0x0c09, +} // Size: 610 bytes + +const noRegionStr string = "" + // Size: 2825 bytes "AscensionAndorraDe forente arabiske emiraterAfghanistanAntigua og Barbud" + "aAnguillaAlbaniaArmeniaAngolaAntarktisArgentinaAmerikansk SamoaØsterrike" + "AustraliaArubaÅlandAserbajdsjanBosnia-HercegovinaBarbadosBangladeshBelgi" + @@ -47511,40 +50272,40 @@ const noRegionStr string = "" + // Size: 2830 bytes "iviaKaribisk NederlandBrasilBahamasBhutanBouvetøyaBotswanaHviterusslandB" + "elizeCanadaKokosøyeneKongo-KinshasaDen sentralafrikanske republikkKongo-" + "BrazzavilleSveitsElfenbenskystenCookøyeneChileKamerunKinaColombiaClipper" + - "tonøyaCosta RicaCubaKapp VerdeCuraçaoChristmasøyaKyprosDen tsjekkiske re" + - "publikkTysklandDiego GarciaDjiboutiDanmarkDominicaDen dominikanske repub" + - "likkAlgerieCeuta og MelillaEcuadorEstlandEgyptVest-SaharaEritreaSpaniaEt" + - "iopiaEUFinlandFijiFalklandsøyeneMikronesiaføderasjonenFærøyeneFrankrikeG" + - "abonStorbritanniaGrenadaGeorgiaFransk GuyanaGuernseyGhanaGibraltarGrønla" + - "ndGambiaGuineaGuadeloupeEkvatorial-GuineaHellasSør-Georgia og Sør-Sandwi" + - "chøyeneGuatemalaGuamGuinea-BissauGuyanaHongkong S.A.R. KinaHeard- og McD" + - "onaldøyeneHondurasKroatiaHaitiUngarnKanariøyeneIndonesiaIrlandIsraelManI" + - "ndiaDet britiske territoriet i IndiahavetIrakIranIslandItaliaJerseyJamai" + - "caJordanJapanKenyaKirgisistanKambodsjaKiribatiKomoreneSaint Kitts og Nev" + - "isNord-KoreaSør-KoreaKuwaitCaymanøyeneKasakhstanLaosLibanonSt. LuciaLiec" + - "htensteinSri LankaLiberiaLesothoLitauenLuxemburgLatviaLibyaMarokkoMonaco" + - "MoldovaMontenegroSaint-MartinMadagaskarMarshalløyeneMakedoniaMaliMyanmar" + - " (Burma)MongoliaMacao S.A.R. KinaNord-MarianeneMartiniqueMauritaniaMonts" + - "erratMaltaMauritiusMaldiveneMalawiMexicoMalaysiaMosambikNamibiaNy-Caledo" + - "niaNigerNorfolkøyaNigeriaNicaraguaNederlandNorgeNepalNauruNiueNew Zealan" + - "dOmanPanamaPeruFransk PolynesiaPapua Ny-GuineaFilippinenePakistanPolenSt" + - ". Pierre og MiquelonPitcairnPuerto RicoDet palestinske områdetPortugalPa" + - "lauParaguayQatarYtre OseaniaRéunionRomaniaSerbiaRusslandRwandaSaudi-Arab" + - "iaSalomonøyeneSeychelleneSudanSverigeSingaporeSt. HelenaSloveniaSvalbard" + - " og Jan MayenSlovakiaSierra LeoneSan MarinoSenegalSomaliaSurinamSør-Suda" + - "nSão Tomé og PríncipeEl SalvadorSint MaartenSyriaSwazilandTristan da Cun" + - "haTurks- og CaicosøyeneTsjadDe franske sørterritorierTogoThailandTadsjik" + - "istanTokelauØst-TimorTurkmenistanTunisiaTongaTyrkiaTrinidad og TobagoTuv" + - "aluTaiwanTanzaniaUkrainaUgandaUSAs ytre øyerFNUSAUruguayUsbekistanVatika" + - "nstatenSt. Vincent og GrenadineneVenezuelaDe britiske jomfruøyeneDe amer" + - "ikanske jomfruøyeneVietnamVanuatuWallis og FutunaSamoaKosovoJemenMayotte" + - "Sør-AfrikaZambiaZimbabweukjent områdeverdenAfrikaNord-AmerikaSør-Amerika" + - "OseaniaVest-AfrikaMellom-AmerikaØst-AfrikaNord-AfrikaSentral-AfrikaSørli" + - "ge AfrikaAmerikaNordlige AmerikaKaribiaØst-AsiaSør-AsiaSørøst-AsiaSør-Eu" + - "ropaAustralasiaMelanesiaMikronesiaPolynesiaAsiaSentral-AsiaVest-AsiaEuro" + - "paØst-EuropaNord-EuropaVest-EuropaLatin-Amerika" - -var noRegionIdx = []uint16{ // 292 elements + "tonøyaCosta RicaCubaKapp VerdeCuraçaoChristmasøyaKyprosTsjekkiaTysklandD" + + "iego GarciaDjiboutiDanmarkDominicaDen dominikanske republikkAlgerieCeuta" + + " og MelillaEcuadorEstlandEgyptVest-SaharaEritreaSpaniaEtiopiaEUeurosonen" + + "FinlandFijiFalklandsøyeneMikronesiaføderasjonenFærøyeneFrankrikeGabonSto" + + "rbritanniaGrenadaGeorgiaFransk GuyanaGuernseyGhanaGibraltarGrønlandGambi" + + "aGuineaGuadeloupeEkvatorial-GuineaHellasSør-Georgia og Sør-Sandwichøyene" + + "GuatemalaGuamGuinea-BissauGuyanaHongkong S.A.R. KinaHeard- og McDonaldøy" + + "eneHondurasKroatiaHaitiUngarnKanariøyeneIndonesiaIrlandIsraelManIndiaDet" + + " britiske territoriet i IndiahavetIrakIranIslandItaliaJerseyJamaicaJorda" + + "nJapanKenyaKirgisistanKambodsjaKiribatiKomoreneSaint Kitts og NevisNord-" + + "KoreaSør-KoreaKuwaitCaymanøyeneKasakhstanLaosLibanonSt. LuciaLiechtenste" + + "inSri LankaLiberiaLesothoLitauenLuxemburgLatviaLibyaMarokkoMonacoMoldova" + + "MontenegroSaint-MartinMadagaskarMarshalløyeneMakedoniaMaliMyanmar (Burma" + + ")MongoliaMacao S.A.R. KinaNord-MarianeneMartiniqueMauritaniaMontserratMa" + + "ltaMauritiusMaldiveneMalawiMexicoMalaysiaMosambikNamibiaNy-CaledoniaNige" + + "rNorfolkøyaNigeriaNicaraguaNederlandNorgeNepalNauruNiueNew ZealandOmanPa" + + "namaPeruFransk PolynesiaPapua Ny-GuineaFilippinenePakistanPolenSaint-Pie" + + "rre-et-MiquelonPitcairnPuerto RicoDet palestinske områdetPortugalPalauPa" + + "raguayQatarYtre OseaniaRéunionRomaniaSerbiaRusslandRwandaSaudi-ArabiaSal" + + "omonøyeneSeychelleneSudanSverigeSingaporeSt. HelenaSloveniaSvalbard og J" + + "an MayenSlovakiaSierra LeoneSan MarinoSenegalSomaliaSurinamSør-SudanSão " + + "Tomé og PríncipeEl SalvadorSint MaartenSyriaSwazilandTristan da CunhaTur" + + "ks- og CaicosøyeneTsjadDe franske sørterritorierTogoThailandTadsjikistan" + + "TokelauØst-TimorTurkmenistanTunisiaTongaTyrkiaTrinidad og TobagoTuvaluTa" + + "iwanTanzaniaUkrainaUgandaUSAs ytre øyerFNUSAUruguayUsbekistanVatikanstat" + + "enSt. Vincent og GrenadineneVenezuelaDe britiske jomfruøyeneDe amerikans" + + "ke jomfruøyeneVietnamVanuatuWallis og FutunaSamoaKosovoJemenMayotteSør-A" + + "frikaZambiaZimbabweukjent områdeverdenAfrikaNord-AmerikaSør-AmerikaOsean" + + "iaVest-AfrikaMellom-AmerikaØst-AfrikaNord-AfrikaSentral-AfrikaSørlige Af" + + "rikaAmerikaNordlige AmerikaKaribiaØst-AsiaSør-AsiaSørøst-AsiaSør-EuropaA" + + "ustralasiaMelanesiaMikronesiaPolynesiaAsiaSentral-AsiaVest-AsiaEuropaØst" + + "-EuropaNord-EuropaVest-EuropaLatin-Amerika" + +var noRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0009, 0x0010, 0x002c, 0x0037, 0x0049, 0x0051, 0x0058, 0x005f, 0x0065, 0x006e, 0x0077, 0x0087, 0x0091, 0x009a, 0x009f, @@ -47553,43 +50314,43 @@ var noRegionIdx = []uint16{ // 292 elements 0x013f, 0x0146, 0x014c, 0x0156, 0x015e, 0x016b, 0x0171, 0x0177, 0x0182, 0x0190, 0x01af, 0x01c0, 0x01c6, 0x01d5, 0x01df, 0x01e4, 0x01eb, 0x01ef, 0x01f7, 0x0205, 0x020f, 0x0213, 0x021d, 0x0225, - 0x0232, 0x0238, 0x0250, 0x0258, 0x0264, 0x026c, 0x0273, 0x027b, + 0x0232, 0x0238, 0x0240, 0x0248, 0x0254, 0x025c, 0x0263, 0x026b, // Entry 40 - 7F - 0x0295, 0x029c, 0x02ac, 0x02b3, 0x02ba, 0x02bf, 0x02ca, 0x02d1, - 0x02d7, 0x02de, 0x02e0, 0x02e0, 0x02e7, 0x02eb, 0x02fa, 0x0311, - 0x031b, 0x0324, 0x0329, 0x0336, 0x033d, 0x0344, 0x0351, 0x0359, - 0x035e, 0x0367, 0x0370, 0x0376, 0x037c, 0x0386, 0x0397, 0x039d, - 0x03c0, 0x03c9, 0x03cd, 0x03da, 0x03e0, 0x03f4, 0x040c, 0x0414, - 0x041b, 0x0420, 0x0426, 0x0432, 0x043b, 0x0441, 0x0447, 0x044a, - 0x044f, 0x0474, 0x0478, 0x047c, 0x0482, 0x0488, 0x048e, 0x0495, - 0x049b, 0x04a0, 0x04a5, 0x04b0, 0x04b9, 0x04c1, 0x04c9, 0x04dd, + 0x0285, 0x028c, 0x029c, 0x02a3, 0x02aa, 0x02af, 0x02ba, 0x02c1, + 0x02c7, 0x02ce, 0x02d0, 0x02d9, 0x02e0, 0x02e4, 0x02f3, 0x030a, + 0x0314, 0x031d, 0x0322, 0x032f, 0x0336, 0x033d, 0x034a, 0x0352, + 0x0357, 0x0360, 0x0369, 0x036f, 0x0375, 0x037f, 0x0390, 0x0396, + 0x03b9, 0x03c2, 0x03c6, 0x03d3, 0x03d9, 0x03ed, 0x0405, 0x040d, + 0x0414, 0x0419, 0x041f, 0x042b, 0x0434, 0x043a, 0x0440, 0x0443, + 0x0448, 0x046d, 0x0471, 0x0475, 0x047b, 0x0481, 0x0487, 0x048e, + 0x0494, 0x0499, 0x049e, 0x04a9, 0x04b2, 0x04ba, 0x04c2, 0x04d6, // Entry 80 - BF - 0x04e7, 0x04f1, 0x04f7, 0x0503, 0x050d, 0x0511, 0x0518, 0x0521, - 0x052e, 0x0537, 0x053e, 0x0545, 0x054c, 0x0555, 0x055b, 0x0560, - 0x0567, 0x056d, 0x0574, 0x057e, 0x058a, 0x0594, 0x05a2, 0x05ab, - 0x05af, 0x05be, 0x05c6, 0x05d7, 0x05e5, 0x05ef, 0x05f9, 0x0603, - 0x0608, 0x0611, 0x061a, 0x0620, 0x0626, 0x062e, 0x0636, 0x063d, - 0x0649, 0x064e, 0x0659, 0x0660, 0x0669, 0x0672, 0x0677, 0x067c, - 0x0681, 0x0685, 0x0690, 0x0694, 0x069a, 0x069e, 0x06ae, 0x06bd, - 0x06c8, 0x06d0, 0x06d5, 0x06eb, 0x06f3, 0x06fe, 0x0716, 0x071e, + 0x04e0, 0x04ea, 0x04f0, 0x04fc, 0x0506, 0x050a, 0x0511, 0x051a, + 0x0527, 0x0530, 0x0537, 0x053e, 0x0545, 0x054e, 0x0554, 0x0559, + 0x0560, 0x0566, 0x056d, 0x0577, 0x0583, 0x058d, 0x059b, 0x05a4, + 0x05a8, 0x05b7, 0x05bf, 0x05d0, 0x05de, 0x05e8, 0x05f2, 0x05fc, + 0x0601, 0x060a, 0x0613, 0x0619, 0x061f, 0x0627, 0x062f, 0x0636, + 0x0642, 0x0647, 0x0652, 0x0659, 0x0662, 0x066b, 0x0670, 0x0675, + 0x067a, 0x067e, 0x0689, 0x068d, 0x0693, 0x0697, 0x06a7, 0x06b6, + 0x06c1, 0x06c9, 0x06ce, 0x06e6, 0x06ee, 0x06f9, 0x0711, 0x0719, // Entry C0 - FF - 0x0723, 0x072b, 0x0730, 0x073c, 0x0744, 0x074b, 0x0751, 0x0759, - 0x075f, 0x076b, 0x0778, 0x0783, 0x0788, 0x078f, 0x0798, 0x07a2, - 0x07aa, 0x07bf, 0x07c7, 0x07d3, 0x07dd, 0x07e4, 0x07eb, 0x07f2, - 0x07fc, 0x0813, 0x081e, 0x082a, 0x082f, 0x0838, 0x0848, 0x085e, - 0x0863, 0x087d, 0x0881, 0x0889, 0x0895, 0x089c, 0x08a6, 0x08b2, - 0x08b9, 0x08be, 0x08c4, 0x08d6, 0x08dc, 0x08e2, 0x08ea, 0x08f1, - 0x08f7, 0x0906, 0x0908, 0x090b, 0x0912, 0x091c, 0x0929, 0x0943, - 0x094c, 0x0964, 0x097f, 0x0986, 0x098d, 0x099d, 0x09a2, 0x09a8, + 0x071e, 0x0726, 0x072b, 0x0737, 0x073f, 0x0746, 0x074c, 0x0754, + 0x075a, 0x0766, 0x0773, 0x077e, 0x0783, 0x078a, 0x0793, 0x079d, + 0x07a5, 0x07ba, 0x07c2, 0x07ce, 0x07d8, 0x07df, 0x07e6, 0x07ed, + 0x07f7, 0x080e, 0x0819, 0x0825, 0x082a, 0x0833, 0x0843, 0x0859, + 0x085e, 0x0878, 0x087c, 0x0884, 0x0890, 0x0897, 0x08a1, 0x08ad, + 0x08b4, 0x08b9, 0x08bf, 0x08d1, 0x08d7, 0x08dd, 0x08e5, 0x08ec, + 0x08f2, 0x0901, 0x0903, 0x0906, 0x090d, 0x0917, 0x0924, 0x093e, + 0x0947, 0x095f, 0x097a, 0x0981, 0x0988, 0x0998, 0x099d, 0x09a3, // Entry 100 - 13F - 0x09ad, 0x09b4, 0x09bf, 0x09c5, 0x09cd, 0x09db, 0x09e1, 0x09e7, - 0x09f3, 0x09ff, 0x0a06, 0x0a11, 0x0a1f, 0x0a2a, 0x0a35, 0x0a43, - 0x0a52, 0x0a59, 0x0a69, 0x0a70, 0x0a79, 0x0a82, 0x0a8f, 0x0a9a, - 0x0aa5, 0x0aae, 0x0ab8, 0x0ac1, 0x0ac5, 0x0ad1, 0x0ada, 0x0ae0, - 0x0aeb, 0x0af6, 0x0b01, 0x0b0e, -} // Size: 608 bytes - -const paRegionStr string = "" + // Size: 7713 bytes + 0x09a8, 0x09af, 0x09ba, 0x09c0, 0x09c8, 0x09d6, 0x09dc, 0x09e2, + 0x09ee, 0x09fa, 0x0a01, 0x0a0c, 0x0a1a, 0x0a25, 0x0a30, 0x0a3e, + 0x0a4d, 0x0a54, 0x0a64, 0x0a6b, 0x0a74, 0x0a7d, 0x0a8a, 0x0a95, + 0x0aa0, 0x0aa9, 0x0ab3, 0x0abc, 0x0ac0, 0x0acc, 0x0ad5, 0x0adb, + 0x0ae6, 0x0af1, 0x0afc, 0x0afc, 0x0b09, +} // Size: 610 bytes + +const paRegionStr string = "" + // Size: 7705 bytes "ਅਸੈਂਸ਼ਨ ਟਾਪੂਅੰਡੋਰਾਸੰਯੁਕਤ ਅਰਬ ਅਮੀਰਾਤਅਫ਼ਗਾਨਿਸਤਾਨਐਂਟੀਗੁਆ ਅਤੇ ਬਾਰਬੁਡਾਅੰਗੁਇਲਾ" + "ਅਲਬਾਨੀਆਅਰਮੀਨੀਆਅੰਗੋਲਾਅੰਟਾਰਕਟਿਕਾਅਰਜਨਟੀਨਾਅਮੈਰੀਕਨ ਸਮੋਆਆਸਟਰੀਆਆਸਟ੍ਰੇਲੀਆਅਰੂਬਾ" + "ਅਲੈਂਡ ਟਾਪੂਅਜ਼ਰਬਾਈਜਾਨਬੋਸਨੀਆ ਅਤੇ ਹਰਜ਼ੇਗੋਵੀਨਾਬਾਰਬਾਡੋਸਬੰਗਲਾਦੇਸ਼ਬੈਲਜੀਅਮਬੁਰਕ" + @@ -47597,40 +50358,40 @@ const paRegionStr string = "" + // Size: 7713 bytes "ਰੇਬੀਆਈ ਨੀਦਰਲੈਂਡਬ੍ਰਾਜ਼ੀਲਬਹਾਮਾਸਭੂਟਾਨਬੌਵੇਟ ਟਾਪੂਬੋਤਸਵਾਨਾਬੇਲਾਰੂਸਬੇਲੀਜ਼ਕੈਨੇਡ" + "ਾਕੋਕੋਸ (ਕੀਲਿੰਗ) ਟਾਪੂਕਾਂਗੋ - ਕਿੰਸ਼ਾਸਾਕੇਂਦਰੀ ਅਫ਼ਰੀਕੀ ਗਣਰਾਜਕਾਂਗੋ - ਬ੍ਰਾਜ਼" + "ਾਵਿਲੇਸਵਿਟਜ਼ਰਲੈਂਡਕੋਟ ਡੀਵੋਆਰਕੁੱਕ ਟਾਪੂਚਿਲੀਕੈਮਰੂਨਚੀਨਕੋਲੰਬੀਆਕਲਿੱਪਰਟਨ ਟਾਪੂਕੋ" + - "ਸਟਾ ਰੀਕਾਕਿਊਬਾਕੇਪ ਵਰਡੇਕੁਰਾਕਾਓਕ੍ਰਿਸਮਿਸ ਟਾਪੂਸਾਇਪ੍ਰਸਚੈੱਕ ਗਣਰਾਜਜਰਮਨੀਡੀਇਗੋ ਗ" + - "ਾਰਸੀਆਜ਼ੀਬੂਤੀਡੈਨਮਾਰਕਡੋਮੀਨਿਕਾਡੋਮੀਨਿਕਾਈ ਗਣਰਾਜਅਲਜੀਰੀਆਸਿਓਟਾ ਅਤੇ ਮੇਲਿੱਲਾਇਕਵੇ" + - "ਡੋਰਇਸਟੋਨੀਆਮਿਸਰਪੱਛਮੀ ਸਹਾਰਾਇਰੀਟ੍ਰਿਆਸਪੇਨਇਥੋਪੀਆਯੂਰਪੀ ਸੰਘਫਿਨਲੈਂਡਫ਼ਿਜੀਫ਼ਾਕਲੈ" + - "ਂਡ ਟਾਪੂਮਾਇਕ੍ਰੋਨੇਸ਼ੀਆਫੈਰੋ ਟਾਪੂਫ਼ਰਾਂਸਗਬੋਨਯੂਨਾਈਟਡ ਕਿੰਗਡਮਗ੍ਰੇਨਾਡਾਜਾਰਜੀਆਫਰੈ" + - "ਂਚ ਗੁਇਆਨਾਗਰਨਜੀਘਾਨਾਜਿਬਰਾਲਟਰਗ੍ਰੀਨਲੈਂਡਗੈਂਬੀਆਗਿਨੀਗੁਆਡੇਲੋਪਭੂ-ਖੰਡੀ ਗਿਨੀਗ੍ਰੀਸ" + - "ਦੱਖਣੀ ਜਾਰਜੀਆ ਅਤੇ ਦੱਖਣੀ ਸੈਂਡਵਿਚ ਟਾਪੂਗੁਆਟੇਮਾਲਾਗੁਆਮਗਿਨੀ-ਬਿਸਾਉਗੁਯਾਨਾਹਾਂਗ ਕ" + - "ਾਂਗ ਐਸਏਆਰ ਚੀਨਹਰਡ ਤੇ ਮੈਕਡੋਨਾਲਡ ਟਾਪੂਹੋਂਡੁਰਸਕਰੋਏਸ਼ੀਆਹੈਤੀਹੰਗਰੀਕੇਨਾਰੀ ਟਾਪੂਇ" + - "ੰਡੋਨੇਸ਼ੀਆਆਇਰਲੈਂਡਇਜ਼ਰਾਈਲਆਇਲ ਆਫ ਮੈਨਭਾਰਤਬਰਤਾਨਵੀ ਹਿੰਦ ਮਹਾਂਸਾਗਰ ਖਿੱਤਾਇਰਾਕਈਰ" + - "ਾਨਆਈਸਲੈਂਡਇਟਲੀਜਰਸੀਜਮਾਇਕਾਜਾਰਡਨਜਪਾਨਕੀਨੀਆਕਿਰਗਿਜ਼ਸਤਾਨਕੰਬੋਡੀਆਕਿਰਬਾਤੀਕੋਮੋਰੋਸਸ" + - "ੇਂਟ ਕਿਟਸ ਐਂਡ ਨੇਵਿਸਉੱਤਰ ਕੋਰੀਆਦੱਖਣ ਕੋਰੀਆਕੁਵੈਤਕੇਮੈਨ ਟਾਪੂਕਜ਼ਾਖਸਤਾਨਲਾਓਸਲੈਬਨ" + - "ਾਨਸੇਂਟ ਲੂਸੀਆਲਿਚੇਂਸਟਾਇਨਸ੍ਰੀ ਲੰਕਾਲਾਈਬੀਰੀਆਲੇਸੋਥੋਲਿਥੁਆਨੀਆਲਕਜ਼ਮਬਰਗਲਾਤਵੀਆਲੀਬ" + - "ੀਆਮੋਰੱਕੋਮੋਨਾਕੋਮੋਲਡੋਵਾਮੋਂਟੇਨੇਗਰੋਸੇਂਟ ਮਾਰਟਿਨਮੈਡਾਗਾਸਕਰਮਾਰਸ਼ਲ ਟਾਪੂਮੈਕਡੋਨੀਆ" + - "ਮਾਲੀਮਿਆਂਮਾਰ (ਬਰਮਾ)ਮੰਗੋਲੀਆਮਕਾਉ ਐਸਏਆਰ ਚੀਨਉੱਤਰੀ ਮਾਰੀਆਨਾ ਟਾਪੂਮਾਰਟੀਨਿਕਮੋਰਿਟ" + - "ਾਨੀਆਮੋਂਟਸੇਰਾਤਮਾਲਟਾਮੌਰਿਸ਼ਸਮਾਲਦੀਵਮਲਾਵੀਮੈਕਸੀਕੋਮਲੇਸ਼ੀਆਮੋਜ਼ਾਮਬੀਕਨਾਮੀਬੀਆਨਿਊ " + - "ਕੈਲੇਡੋਨੀਆਨਾਈਜਰਨੋਰਫੌਕ ਟਾਪੂਨਾਈਜੀਰੀਆਨਿਕਾਰਾਗੁਆਨੀਦਰਲੈਂਡਨਾਰਵੇਨੇਪਾਲਨਾਉਰੂਨਿਯੂਨ" + - "ਿਊਜ਼ੀਲੈਂਡਓਮਾਨਪਨਾਮਾਪੇਰੂਫਰੈਂਚ ਪੋਲੀਨੇਸ਼ੀਆਪਾਪੂਆ ਨਿਊ ਗਿਨੀਫਿਲੀਪੀਨਜਪਾਕਿਸਤਾਨਪੋ" + - "ਲੈਂਡਸੇਂਟ ਪੀਅਰੇ ਐਂਡ ਮਿਕੇਲਨਪਿਟਕੇਰਨ ਟਾਪੂਪਿਊਰਟੋ ਰਿਕੋਫਿਲੀਸਤੀਨੀ ਇਲਾਕਾਪੁਰਤਗਾਲ" + - "ਪਲਾਉਪੈਰਾਗਵੇਕਤਰਆਊਟਲਾਇੰਗ ਓਸ਼ੀਨੀਆਰਿਯੂਨੀਅਨਰੋਮਾਨੀਆਸਰਬੀਆਰੂਸਰਵਾਂਡਾਸਾਊਦੀ ਅਰਬਸੋ" + - "ਲੋਮਨ ਟਾਪੂਸੇਸ਼ਲਸਸੂਡਾਨਸਵੀਡਨਸਿੰਗਾਪੁਰਸੇਂਟ ਹੇਲੇਨਾਸਲੋਵੇਨੀਆਸਵਾਲਬਰਡ ਅਤੇ ਜਾਨ ਮਾ" + - "ਯੇਨਸਲੋਵਾਕੀਆਸਿਏਰਾ ਲਿਓਨਸੈਨ ਮਰੀਨੋਸੇਨੇਗਲਸੋਮਾਲੀਆਸੂਰੀਨਾਮਦੱਖਣ ਸੁਡਾਨਸਾਓ ਟੋਮ ਅਤ" + - "ੇ ਪ੍ਰਿੰਸੀਪੇਅਲ ਸਲਵਾਡੋਰਸਿੰਟ ਮਾਰਟੀਨਸੀਰੀਆਸਵਾਜ਼ੀਲੈਂਡਟ੍ਰਿਸਟਾਨ ਦਾ ਕੁੰਹਾਟੁਰਕਸ " + - "ਅਤੇ ਕੈਕੋਸ ਟਾਪੂਚਾਡਫਰੈਂਚ ਦੱਖਣੀ ਪ੍ਰਦੇਸ਼ਟੋਗੋਥਾਈਲੈਂਡਤਾਜਿਕਿਸਤਾਨਟੋਕੇਲਾਉਤਿਮੋਰ-" + - "ਲੇਸਤੇਤੁਰਕਮੇਨਿਸਤਾਨਟਿਊਨੀਸ਼ੀਆਟੌਂਗਾਤੁਰਕੀਟ੍ਰਿਨੀਡਾਡ ਅਤੇ ਟੋਬਾਗੋਟੁਵਾਲੂਤਾਇਵਾਨਤਨ" + - "ਜ਼ਾਨੀਆਯੂਕਰੇਨਯੂਗਾਂਡਾਯੂ.ਐੱਸ. ਦੂਰ-ਦੁਰਾਡੇ ਟਾਪੂਸੰਯੁਕਤ ਰਾਸ਼ਟਰਸੰਯੁਕਤ ਰਾਜਉਰੂਗਵ" + - "ੇਉਜ਼ਬੇਕਿਸਤਾਨਵੈਟੀਕਨ ਸਿਟੀਸੇਂਟ ਵਿਨਸੈਂਟ ਐਂਡ ਗ੍ਰੇਨਾਡੀਨਸਵੇਨੇਜ਼ੂਏਲਾਬ੍ਰਿਟਿਸ਼ ਵ" + - "ਰਜਿਨ ਟਾਪੂਯੂ ਐੱਸ ਵਰਜਿਨ ਟਾਪੂਵੀਅਤਨਾਮਵਾਨੂਆਟੂਵਾਲਿਸ ਅਤੇ ਫੂਟੂਨਾਸਾਮੋਆਕੋਸੋਵੋਯਮਨ" + - "ਮਾਯੋਟੀਦੱਖਣ ਅਫਰੀਕਾਜ਼ਾਮਬੀਆਜ਼ਿੰਬਾਬਵੇਅਣਪਛਾਤਾ ਇਲਾਕਾਸੰਸਾਰਅਫ਼ਰੀਕਾਉੱਤਰ ਅਮਰੀਕਾਦ" + - "ੱਖਣ ਅਮਰੀਕਾਓਸ਼ੇਨੀਆਪੱਛਮੀ ਅਫ਼ਰੀਕਾਕੇਂਦਰੀ ਅਮਰੀਕਾਪੂਰਬੀ ਅਫ਼ਰੀਕਾਉੱਤਰੀ ਅਫ਼ਰੀਕਾਮ" + - "ੱਧ ਅਫ਼ਰੀਕਾਦੱਖਣੀ ਅਫ਼ਰੀਕਾਅਮਰੀਕਾਉੱਤਰੀ ਅਮਰੀਕਾਕੈਰੇਬੀਆਈਪੂਰਬੀ ਏਸ਼ੀਆਦੱਖਣੀ ਏਸ਼ੀ" + - "ਆਦੱਖਣ-ਪੂਰਬੀ ਏਸ਼ੀਆਦੱਖਣੀ ਯੂਰਪਆਸਟਰੇਲੇਸ਼ੀਆਮੇਲਾਨੇਸ਼ੀਆਮਾਇਕ੍ਰੋਨੇਸ਼ੀਆਈ ਇਲਾਕਾਪੋ" + - "ਲੀਨੇਸ਼ੀਆਏਸ਼ੀਆਕੇਂਦਰੀ ਏਸ਼ੀਆਪੱਛਮੀ ਏਸ਼ੀਆਯੂਰਪਪੂਰਬੀ ਯੂਰਪਉੱਤਰੀ ਯੂਰਪਪੱਛਮੀ ਯੂਰਪ" + - "ਲਾਤੀਨੀ ਅਮਰੀਕਾ" - -var paRegionIdx = []uint16{ // 292 elements + "ਸਟਾ ਰੀਕਾਕਿਊਬਾਕੇਪ ਵਰਡੇਕੁਰਾਕਾਓਕ੍ਰਿਸਮਿਸ ਟਾਪੂਸਾਇਪ੍ਰਸਚੈਕੀਆਜਰਮਨੀਡੀਇਗੋ ਗਾਰਸੀਆ" + + "ਜ਼ੀਬੂਤੀਡੈਨਮਾਰਕਡੋਮੀਨਿਕਾਡੋਮੀਨਿਕਾਈ ਗਣਰਾਜਅਲਜੀਰੀਆਸਿਓਟਾ ਅਤੇ ਮੇਲਿੱਲਾਇਕਵੇਡੋਰਇਸ" + + "ਟੋਨੀਆਮਿਸਰਪੱਛਮੀ ਸਹਾਰਾਇਰੀਟ੍ਰਿਆਸਪੇਨਇਥੋਪੀਆਯੂਰਪੀ ਸੰਘEZਫਿਨਲੈਂਡਫ਼ਿਜੀਫ਼ਾਕਲੈਂਡ " + + "ਟਾਪੂਮਾਇਕ੍ਰੋਨੇਸ਼ੀਆਫੈਰੋ ਟਾਪੂਫ਼ਰਾਂਸਗਬੋਨਯੂਨਾਈਟਡ ਕਿੰਗਡਮਗ੍ਰੇਨਾਡਾਜਾਰਜੀਆਫਰੈਂਚ " + + "ਗੁਇਆਨਾਗਰਨਜੀਘਾਨਾਜਿਬਰਾਲਟਰਗ੍ਰੀਨਲੈਂਡਗੈਂਬੀਆਗਿਨੀਗੁਆਡੇਲੋਪਭੂ-ਖੰਡੀ ਗਿਨੀਗ੍ਰੀਸਦੱਖ" + + "ਣੀ ਜਾਰਜੀਆ ਅਤੇ ਦੱਖਣੀ ਸੈਂਡਵਿਚ ਟਾਪੂਗੁਆਟੇਮਾਲਾਗੁਆਮਗਿਨੀ-ਬਿਸਾਉਗੁਯਾਨਾਹਾਂਗ ਕਾਂਗ" + + " ਐਸਏਆਰ ਚੀਨਹਰਡ ਤੇ ਮੈਕਡੋਨਾਲਡ ਟਾਪੂਹੋਂਡੁਰਸਕਰੋਏਸ਼ੀਆਹੈਤੀਹੰਗਰੀਕੇਨਾਰੀ ਟਾਪੂਇੰਡੋਨੇ" + + "ਸ਼ੀਆਆਇਰਲੈਂਡਇਜ਼ਰਾਈਲਆਇਲ ਆਫ ਮੈਨਭਾਰਤਬਰਤਾਨਵੀ ਹਿੰਦ ਮਹਾਂਸਾਗਰ ਖਿੱਤਾਇਰਾਕਈਰਾਨਆਈਸ" + + "ਲੈਂਡਇਟਲੀਜਰਸੀਜਮਾਇਕਾਜਾਰਡਨਜਪਾਨਕੀਨੀਆਕਿਰਗਿਜ਼ਸਤਾਨਕੰਬੋਡੀਆਕਿਰਬਾਤੀਕੋਮੋਰੋਸਸੇਂਟ ਕ" + + "ਿਟਸ ਐਂਡ ਨੇਵਿਸਉੱਤਰ ਕੋਰੀਆਦੱਖਣ ਕੋਰੀਆਕੁਵੈਤਕੇਮੈਨ ਟਾਪੂਕਜ਼ਾਖਸਤਾਨਲਾਓਸਲੈਬਨਾਨਸੇਂ" + + "ਟ ਲੂਸੀਆਲਿਚੇਂਸਟਾਇਨਸ੍ਰੀ ਲੰਕਾਲਾਈਬੀਰੀਆਲੇਸੋਥੋਲਿਥੁਆਨੀਆਲਕਜ਼ਮਬਰਗਲਾਤਵੀਆਲੀਬੀਆਮੋਰ" + + "ੱਕੋਮੋਨਾਕੋਮੋਲਡੋਵਾਮੋਂਟੇਨੇਗਰੋਸੇਂਟ ਮਾਰਟਿਨਮੈਡਾਗਾਸਕਰਮਾਰਸ਼ਲ ਟਾਪੂਮੈਕਡੋਨੀਆਮਾਲੀਮ" + + "ਿਆਂਮਾਰ (ਬਰਮਾ)ਮੰਗੋਲੀਆਮਕਾਉ ਐਸਏਆਰ ਚੀਨਉੱਤਰੀ ਮਾਰੀਆਨਾ ਟਾਪੂਮਾਰਟੀਨਿਕਮੋਰਿਟਾਨੀਆਮ" + + "ੋਂਟਸੇਰਾਤਮਾਲਟਾਮੌਰੀਸ਼ਸਮਾਲਦੀਵਮਲਾਵੀਮੈਕਸੀਕੋਮਲੇਸ਼ੀਆਮੋਜ਼ਾਮਬੀਕਨਾਮੀਬੀਆਨਿਊ ਕੈਲੇਡ" + + "ੋਨੀਆਨਾਈਜਰਨੋਰਫੌਕ ਟਾਪੂਨਾਈਜੀਰੀਆਨਿਕਾਰਾਗੁਆਨੀਦਰਲੈਂਡਨਾਰਵੇਨੇਪਾਲਨਾਉਰੂਨਿਯੂਨਿਊਜ਼ੀ" + + "ਲੈਂਡਓਮਾਨਪਨਾਮਾਪੇਰੂਫਰੈਂਚ ਪੋਲੀਨੇਸ਼ੀਆਪਾਪੂਆ ਨਿਊ ਗਿਨੀਫਿਲੀਪੀਨਜਪਾਕਿਸਤਾਨਪੋਲੈਂਡਸ" + + "ੇਂਟ ਪੀਅਰੇ ਐਂਡ ਮਿਕੇਲਨਪਿਟਕੇਰਨ ਟਾਪੂਪਿਊਰਟੋ ਰਿਕੋਫਿਲੀਸਤੀਨੀ ਇਲਾਕਾਪੁਰਤਗਾਲਪਲਾਉਪ" + + "ੈਰਾਗਵੇਕਤਰਆਊਟਲਾਇੰਗ ਓਸ਼ੀਨੀਆਰਿਯੂਨੀਅਨਰੋਮਾਨੀਆਸਰਬੀਆਰੂਸਰਵਾਂਡਾਸਾਊਦੀ ਅਰਬਸੋਲੋਮਨ " + + "ਟਾਪੂਸੇਸ਼ਲਸਸੂਡਾਨਸਵੀਡਨਸਿੰਗਾਪੁਰਸੇਂਟ ਹੇਲੇਨਾਸਲੋਵੇਨੀਆਸਵਾਲਬਰਡ ਅਤੇ ਜਾਨ ਮਾਯੇਨਸਲ" + + "ੋਵਾਕੀਆਸਿਏਰਾ ਲਿਓਨਸੈਨ ਮਰੀਨੋਸੇਨੇਗਲਸੋਮਾਲੀਆਸੂਰੀਨਾਮਦੱਖਣ ਸੁਡਾਨਸਾਓ ਟੋਮ ਅਤੇ ਪ੍ਰ" + + "ਿੰਸੀਪੇਅਲ ਸਲਵਾਡੋਰਸਿੰਟ ਮਾਰਟੀਨਸੀਰੀਆਸਵਾਜ਼ੀਲੈਂਡਟ੍ਰਿਸਟਾਨ ਦਾ ਕੁੰਹਾਟੁਰਕਸ ਅਤੇ ਕ" + + "ੈਕੋਸ ਟਾਪੂਚਾਡਫਰੈਂਚ ਦੱਖਣੀ ਪ੍ਰਦੇਸ਼ਟੋਗੋਥਾਈਲੈਂਡਤਾਜਿਕਿਸਤਾਨਟੋਕੇਲਾਉਤਿਮੋਰ-ਲੇਸਤੇ" + + "ਤੁਰਕਮੇਨਿਸਤਾਨਟਿਊਨੀਸ਼ੀਆਟੌਂਗਾਤੁਰਕੀਟ੍ਰਿਨੀਡਾਡ ਅਤੇ ਟੋਬਾਗੋਟੁਵਾਲੂਤਾਇਵਾਨਤਨਜ਼ਾਨੀ" + + "ਆਯੂਕਰੇਨਯੂਗਾਂਡਾਯੂ.ਐੱਸ. ਦੂਰ-ਦੁਰਾਡੇ ਟਾਪੂਸੰਯੁਕਤ ਰਾਸ਼ਟਰਸੰਯੁਕਤ ਰਾਜਉਰੂਗਵੇਉਜ਼ਬ" + + "ੇਕਿਸਤਾਨਵੈਟੀਕਨ ਸਿਟੀਸੇਂਟ ਵਿਨਸੈਂਟ ਐਂਡ ਗ੍ਰੇਨਾਡੀਨਸਵੇਨੇਜ਼ੂਏਲਾਬ੍ਰਿਟਿਸ਼ ਵਰਜਿਨ " + + "ਟਾਪੂਯੂ ਐੱਸ ਵਰਜਿਨ ਟਾਪੂਵੀਅਤਨਾਮਵਾਨੂਆਟੂਵਾਲਿਸ ਅਤੇ ਫੂਟੂਨਾਸਾਮੋਆਕੋਸੋਵੋਯਮਨਮਾਯੋਟ" + + "ੀਦੱਖਣੀ ਅਫਰੀਕਾਜ਼ਾਮਬੀਆਜ਼ਿੰਬਾਬਵੇਅਣਪਛਾਤਾ ਇਲਾਕਾਸੰਸਾਰਅਫ਼ਰੀਕਾਉੱਤਰ ਅਮਰੀਕਾਦੱਖਣ " + + "ਅਮਰੀਕਾਓਸ਼ੇਨੀਆਪੱਛਮੀ ਅਫ਼ਰੀਕਾਕੇਂਦਰੀ ਅਮਰੀਕਾਪੂਰਬੀ ਅਫ਼ਰੀਕਾਉੱਤਰੀ ਅਫ਼ਰੀਕਾਮੱਧ ਅ" + + "ਫ਼ਰੀਕਾਦੱਖਣੀ ਅਫ਼ਰੀਕਾਅਮਰੀਕਾਉੱਤਰੀ ਅਮਰੀਕਾਕੈਰੇਬੀਆਈਪੂਰਬੀ ਏਸ਼ੀਆਦੱਖਣੀ ਏਸ਼ੀਆਦੱਖ" + + "ਣ-ਪੂਰਬੀ ਏਸ਼ੀਆਦੱਖਣੀ ਯੂਰਪਆਸਟਰੇਲੇਸ਼ੀਆਮੇਲਾਨੇਸ਼ੀਆਮਾਇਕ੍ਰੋਨੇਸ਼ੀਆਈ ਇਲਾਕਾਪੋਲੀਨੇ" + + "ਸ਼ੀਆਏਸ਼ੀਆਕੇਂਦਰੀ ਏਸ਼ੀਆਪੱਛਮੀ ਏਸ਼ੀਆਯੂਰਪਪੂਰਬੀ ਯੂਰਪਉੱਤਰੀ ਯੂਰਪਪੱਛਮੀ ਯੂਰਪਲਾਤੀ" + + "ਨੀ ਅਮਰੀਕਾ" + +var paRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0022, 0x0034, 0x0063, 0x0084, 0x00b9, 0x00ce, 0x00e3, 0x00f8, 0x010a, 0x0128, 0x0140, 0x0162, 0x0174, 0x018f, 0x019e, @@ -47639,45 +50400,45 @@ var paRegionIdx = []uint16{ // 292 elements 0x037b, 0x038d, 0x039c, 0x03b8, 0x03d0, 0x03e5, 0x03f7, 0x0409, 0x043a, 0x0464, 0x049c, 0x04cf, 0x04f0, 0x050c, 0x0525, 0x0531, 0x0543, 0x054c, 0x0561, 0x0586, 0x05a2, 0x05b1, 0x05c7, 0x05dc, - 0x0601, 0x0616, 0x0632, 0x0641, 0x0663, 0x0678, 0x068d, 0x06a5, + 0x0601, 0x0616, 0x0625, 0x0634, 0x0656, 0x066b, 0x0680, 0x0698, // Entry 40 - 7F - 0x06d0, 0x06e5, 0x0714, 0x0729, 0x073e, 0x074a, 0x0769, 0x0781, - 0x078d, 0x079f, 0x07b8, 0x07b8, 0x07cd, 0x07dc, 0x0801, 0x0828, - 0x0841, 0x0853, 0x085f, 0x0887, 0x089f, 0x08b1, 0x08d3, 0x08e2, - 0x08ee, 0x0906, 0x0921, 0x0933, 0x093f, 0x0957, 0x0977, 0x0986, - 0x09e5, 0x0a00, 0x0a0c, 0x0a28, 0x0a3a, 0x0a6d, 0x0aa6, 0x0abb, - 0x0ad3, 0x0adf, 0x0aee, 0x0b0d, 0x0b2b, 0x0b40, 0x0b55, 0x0b6f, - 0x0b7b, 0x0bc6, 0x0bd2, 0x0bde, 0x0bf3, 0x0bff, 0x0c0b, 0x0c1d, - 0x0c2c, 0x0c38, 0x0c47, 0x0c68, 0x0c7d, 0x0c92, 0x0ca7, 0x0cda, + 0x06c3, 0x06d8, 0x0707, 0x071c, 0x0731, 0x073d, 0x075c, 0x0774, + 0x0780, 0x0792, 0x07ab, 0x07ad, 0x07c2, 0x07d1, 0x07f6, 0x081d, + 0x0836, 0x0848, 0x0854, 0x087c, 0x0894, 0x08a6, 0x08c8, 0x08d7, + 0x08e3, 0x08fb, 0x0916, 0x0928, 0x0934, 0x094c, 0x096c, 0x097b, + 0x09da, 0x09f5, 0x0a01, 0x0a1d, 0x0a2f, 0x0a62, 0x0a9b, 0x0ab0, + 0x0ac8, 0x0ad4, 0x0ae3, 0x0b02, 0x0b20, 0x0b35, 0x0b4a, 0x0b64, + 0x0b70, 0x0bbb, 0x0bc7, 0x0bd3, 0x0be8, 0x0bf4, 0x0c00, 0x0c12, + 0x0c21, 0x0c2d, 0x0c3c, 0x0c5d, 0x0c72, 0x0c87, 0x0c9c, 0x0ccf, // Entry 80 - BF - 0x0cf6, 0x0d12, 0x0d21, 0x0d3d, 0x0d58, 0x0d64, 0x0d76, 0x0d92, - 0x0db0, 0x0dc9, 0x0de1, 0x0df3, 0x0e0b, 0x0e23, 0x0e35, 0x0e44, - 0x0e56, 0x0e68, 0x0e7d, 0x0e9b, 0x0eba, 0x0ed5, 0x0ef4, 0x0f0c, - 0x0f18, 0x0f3c, 0x0f51, 0x0f77, 0x0fa9, 0x0fc1, 0x0fdc, 0x0ff7, - 0x1006, 0x101b, 0x102d, 0x103c, 0x1051, 0x1066, 0x1081, 0x1096, - 0x10bb, 0x10ca, 0x10e9, 0x1101, 0x111c, 0x1134, 0x1143, 0x1152, - 0x1161, 0x116d, 0x118b, 0x1197, 0x11a6, 0x11b2, 0x11e0, 0x1206, - 0x121e, 0x1236, 0x1248, 0x1281, 0x12a3, 0x12c2, 0x12ed, 0x1302, + 0x0ceb, 0x0d07, 0x0d16, 0x0d32, 0x0d4d, 0x0d59, 0x0d6b, 0x0d87, + 0x0da5, 0x0dbe, 0x0dd6, 0x0de8, 0x0e00, 0x0e18, 0x0e2a, 0x0e39, + 0x0e4b, 0x0e5d, 0x0e72, 0x0e90, 0x0eaf, 0x0eca, 0x0ee9, 0x0f01, + 0x0f0d, 0x0f31, 0x0f46, 0x0f6c, 0x0f9e, 0x0fb6, 0x0fd1, 0x0fec, + 0x0ffb, 0x1010, 0x1022, 0x1031, 0x1046, 0x105b, 0x1076, 0x108b, + 0x10b0, 0x10bf, 0x10de, 0x10f6, 0x1111, 0x1129, 0x1138, 0x1147, + 0x1156, 0x1162, 0x1180, 0x118c, 0x119b, 0x11a7, 0x11d5, 0x11fb, + 0x1213, 0x122b, 0x123d, 0x1276, 0x1298, 0x12b7, 0x12e2, 0x12f7, // Entry C0 - FF - 0x130e, 0x1323, 0x132c, 0x135a, 0x1372, 0x1387, 0x1396, 0x139f, - 0x13b1, 0x13ca, 0x13e9, 0x13fb, 0x140a, 0x1419, 0x1431, 0x1450, - 0x1468, 0x14a1, 0x14b9, 0x14d5, 0x14ee, 0x1500, 0x1515, 0x152a, - 0x1546, 0x157f, 0x159b, 0x15ba, 0x15c9, 0x15e7, 0x1616, 0x164c, - 0x1655, 0x168a, 0x1696, 0x16ab, 0x16c9, 0x16de, 0x16fd, 0x1721, - 0x173c, 0x174b, 0x175a, 0x1792, 0x17a4, 0x17b6, 0x17ce, 0x17e0, - 0x17f5, 0x1830, 0x1855, 0x1871, 0x1883, 0x18a4, 0x18c3, 0x190e, - 0x192c, 0x1961, 0x198e, 0x19a3, 0x19b8, 0x19e4, 0x19f3, 0x1a05, + 0x1303, 0x1318, 0x1321, 0x134f, 0x1367, 0x137c, 0x138b, 0x1394, + 0x13a6, 0x13bf, 0x13de, 0x13f0, 0x13ff, 0x140e, 0x1426, 0x1445, + 0x145d, 0x1496, 0x14ae, 0x14ca, 0x14e3, 0x14f5, 0x150a, 0x151f, + 0x153b, 0x1574, 0x1590, 0x15af, 0x15be, 0x15dc, 0x160b, 0x1641, + 0x164a, 0x167f, 0x168b, 0x16a0, 0x16be, 0x16d3, 0x16f2, 0x1716, + 0x1731, 0x1740, 0x174f, 0x1787, 0x1799, 0x17ab, 0x17c3, 0x17d5, + 0x17ea, 0x1825, 0x184a, 0x1866, 0x1878, 0x1899, 0x18b8, 0x1903, + 0x1921, 0x1956, 0x1983, 0x1998, 0x19ad, 0x19d9, 0x19e8, 0x19fa, // Entry 100 - 13F - 0x1a0e, 0x1a20, 0x1a3f, 0x1a54, 0x1a6f, 0x1a94, 0x1aa3, 0x1ab8, - 0x1ad7, 0x1af6, 0x1b0b, 0x1b30, 0x1b55, 0x1b7a, 0x1b9f, 0x1bbe, - 0x1be3, 0x1bf5, 0x1c17, 0x1c2f, 0x1c4e, 0x1c6d, 0x1c99, 0x1cb5, - 0x1cd6, 0x1cf4, 0x1d2e, 0x1d4c, 0x1d5b, 0x1d7d, 0x1d9c, 0x1da8, - 0x1dc4, 0x1de0, 0x1dfc, 0x1e21, -} // Size: 608 bytes - -const plRegionStr string = "" + // Size: 3165 bytes + 0x1a03, 0x1a15, 0x1a37, 0x1a4c, 0x1a67, 0x1a8c, 0x1a9b, 0x1ab0, + 0x1acf, 0x1aee, 0x1b03, 0x1b28, 0x1b4d, 0x1b72, 0x1b97, 0x1bb6, + 0x1bdb, 0x1bed, 0x1c0f, 0x1c27, 0x1c46, 0x1c65, 0x1c91, 0x1cad, + 0x1cce, 0x1cec, 0x1d26, 0x1d44, 0x1d53, 0x1d75, 0x1d94, 0x1da0, + 0x1dbc, 0x1dd8, 0x1df4, 0x1df4, 0x1e19, +} // Size: 610 bytes + +const plRegionStr string = "" + // Size: 3189 bytes "Wyspa WniebowstąpieniaAndoraZjednoczone Emiraty ArabskieAfganistanAntigu" + - "a i BarbudaAnguillaAlbaniaArmeniaAngolaAntarktykaArgentynaSamoa Amerykań" + + "a i BarbudaAnguillaAlbaniaArmeniaAngolaAntarktydaArgentynaSamoa Amerykań" + "skieAustriaAustraliaArubaWyspy AlandzkieAzerbejdżanBośnia i HercegowinaB" + "arbadosBangladeszBelgiaBurkina FasoBułgariaBahrajnBurundiBeninSaint-Bart" + "hélemyBermudyBruneiBoliwiaNiderlandy KaraibskieBrazyliaBahamyBhutanWyspa" + @@ -47686,42 +50447,42 @@ const plRegionStr string = "" + // Size: 3165 bytes "kaChileKamerunChinyKolumbiaClippertonKostarykaKubaRepublika Zielonego Pr" + "zylądkaCuraçaoWyspa Bożego NarodzeniaCyprCzechyNiemcyDiego GarciaDżibuti" + "DaniaDominikaDominikanaAlgieriaCeuta i MelillaEkwadorEstoniaEgiptSahara " + - "ZachodniaErytreaHiszpaniaEtiopiaUnia EuropejskaFinlandiaFidżiFalklandyMi" + - "kronezjaWyspy OwczeFrancjaGabonWielka BrytaniaGrenadaGruzjaGujana Francu" + - "skaGuernseyGhanaGibraltarGrenlandiaGambiaGwineaGwadelupaGwinea Równikowa" + - "GrecjaGeorgia Południowa i Sandwich PołudniowyGwatemalaGuamGwinea Bissau" + - "GujanaSRA Hongkong (Chiny)Wyspy Heard i McDonaldaHondurasChorwacjaHaitiW" + - "ęgryWyspy KanaryjskieIndonezjaIrlandiaIzraelWyspa ManIndieBrytyjskie Te" + - "rytorium Oceanu IndyjskiegoIrakIranIslandiaWłochyJerseyJamajkaJordaniaJa" + - "poniaKeniaKirgistanKambodżaKiribatiKomorySaint Kitts i NevisKorea Północ" + - "naKorea PołudniowaKuwejtKajmanyKazachstanLaosLibanSaint LuciaLiechtenste" + - "inSri LankaLiberiaLesothoLitwaLuksemburgŁotwaLibiaMarokoMonakoMołdawiaCz" + - "arnogóraSaint-MartinMadagaskarWyspy MarshallaMacedoniaMaliMjanma (Birma)" + - "MongoliaSRA Makau (Chiny)Mariany PółnocneMartynikaMauretaniaMontserratMa" + - "ltaMauritiusMalediwyMalawiMeksykMalezjaMozambikNamibiaNowa KaledoniaNige" + - "rNorfolkNigeriaNikaraguaHolandiaNorwegiaNepalNauruNiueNowa ZelandiaOmanP" + - "anamaPeruPolinezja FrancuskaPapua-Nowa GwineaFilipinyPakistanPolskaSaint" + - "-Pierre i MiquelonPitcairnPortorykoTerytoria PalestyńskiePortugaliaPalau" + - "ParagwajKatarOceania inneReunionRumuniaSerbiaRosjaRwandaArabia Saudyjska" + - "Wyspy SalomonaSeszeleSudanSzwecjaSingapurWyspa Świętej HelenySłoweniaSva" + - "lbard i Jan MayenSłowacjaSierra LeoneSan MarinoSenegalSomaliaSurinamSuda" + - "n PołudniowyWyspy Świętego Tomasza i KsiążęcaSalwadorSint MaartenSyriaSu" + - "aziTristan da CunhaTurks i CaicosCzadFrancuskie Terytoria Południowe i A" + - "ntarktyczneTogoTajlandiaTadżykistanTokelauTimor WschodniTurkmenistanTune" + - "zjaTongaTurcjaTrynidad i TobagoTuvaluTajwanTanzaniaUkrainaUgandaDalekie " + - "Wyspy Mniejsze Stanów ZjednoczonychOrganizacja Narodów ZjednoczonychStan" + - "y ZjednoczoneUrugwajUzbekistanWatykanSaint Vincent i GrenadynyWenezuelaB" + - "rytyjskie Wyspy DziewiczeWyspy Dziewicze Stanów ZjednoczonychWietnamVanu" + - "atuWallis i FutunaSamoaKosowoJemenMajottaRepublika Południowej AfrykiZam" + - "biaZimbabweNieznany regionświatAfrykaAmeryka PółnocnaAmeryka PołudniowaO" + - "ceaniaAfryka ZachodniaAmeryka ŚrodkowaAfryka WschodniaAfryka PółnocnaAfr" + - "yka ŚrodkowaAfryka PołudniowaAmerykaAmeryka Północna (USA, Kanada)Karaib" + - "yAzja WschodniaAzja PołudniowaAzja Południowo-WschodniaEuropa Południowa" + - "AustralazjaMelanezjaRegion MikronezjiPolinezjaAzjaAzja ŚrodkowaAzja Zach" + - "odniaEuropaEuropa WschodniaEuropa PółnocnaEuropa ZachodniaAmeryka Łacińs" + - "ka" - -var plRegionIdx = []uint16{ // 292 elements + "ZachodniaErytreaHiszpaniaEtiopiaUnia Europejskastrefa euroFinlandiaFidżi" + + "FalklandyMikronezjaWyspy OwczeFrancjaGabonWielka BrytaniaGrenadaGruzjaGu" + + "jana FrancuskaGuernseyGhanaGibraltarGrenlandiaGambiaGwineaGwadelupaGwine" + + "a RównikowaGrecjaGeorgia Południowa i Sandwich PołudniowyGwatemalaGuamGw" + + "inea BissauGujanaSRA Hongkong (Chiny)Wyspy Heard i McDonaldaHondurasChor" + + "wacjaHaitiWęgryWyspy KanaryjskieIndonezjaIrlandiaIzraelWyspa ManIndieBry" + + "tyjskie Terytorium Oceanu IndyjskiegoIrakIranIslandiaWłochyJerseyJamajka" + + "JordaniaJaponiaKeniaKirgistanKambodżaKiribatiKomorySaint Kitts i NevisKo" + + "rea PółnocnaKorea PołudniowaKuwejtKajmanyKazachstanLaosLibanSaint LuciaL" + + "iechtensteinSri LankaLiberiaLesothoLitwaLuksemburgŁotwaLibiaMarokoMonako" + + "MołdawiaCzarnogóraSaint-MartinMadagaskarWyspy MarshallaMacedoniaMaliMjan" + + "ma (Birma)MongoliaSRA Makau (Chiny)Mariany PółnocneMartynikaMauretaniaMo" + + "ntserratMaltaMauritiusMalediwyMalawiMeksykMalezjaMozambikNamibiaNowa Kal" + + "edoniaNigerNorfolkNigeriaNikaraguaHolandiaNorwegiaNepalNauruNiueNowa Zel" + + "andiaOmanPanamaPeruPolinezja FrancuskaPapua-Nowa GwineaFilipinyPakistanP" + + "olskaSaint-Pierre i MiquelonPitcairnPortorykoTerytoria PalestyńskiePortu" + + "galiaPalauParagwajKatarOceania — wyspy dalekieReunionRumuniaSerbiaRosjaR" + + "wandaArabia SaudyjskaWyspy SalomonaSeszeleSudanSzwecjaSingapurWyspa Świę" + + "tej HelenySłoweniaSvalbard i Jan MayenSłowacjaSierra LeoneSan MarinoSene" + + "galSomaliaSurinamSudan PołudniowyWyspy Świętego Tomasza i KsiążęcaSalwad" + + "orSint MaartenSyriaSuaziTristan da CunhaTurks i CaicosCzadFrancuskie Ter" + + "ytoria Południowe i AntarktyczneTogoTajlandiaTadżykistanTokelauTimor Wsc" + + "hodniTurkmenistanTunezjaTongaTurcjaTrynidad i TobagoTuvaluTajwanTanzania" + + "UkrainaUgandaDalekie Wyspy Mniejsze Stanów ZjednoczonychOrganizacja Naro" + + "dów ZjednoczonychStany ZjednoczoneUrugwajUzbekistanWatykanSaint Vincent " + + "i GrenadynyWenezuelaBrytyjskie Wyspy DziewiczeWyspy Dziewicze Stanów Zje" + + "dnoczonychWietnamVanuatuWallis i FutunaSamoaKosowoJemenMajottaRepublika " + + "Południowej AfrykiZambiaZimbabweNieznany regionświatAfrykaAmeryka Północ" + + "naAmeryka PołudniowaOceaniaAfryka ZachodniaAmeryka ŚrodkowaAfryka Wschod" + + "niaAfryka PółnocnaAfryka ŚrodkowaAfryka PołudniowaAmerykaAmeryka Północn" + + "a (USA, Kanada)KaraibyAzja WschodniaAzja PołudniowaAzja Południowo-Wscho" + + "dniaEuropa PołudniowaAustralazjaMelanezjaRegion MikronezjiPolinezjaAzjaA" + + "zja ŚrodkowaAzja ZachodniaEuropaEuropa WschodniaEuropa PółnocnaEuropa Za" + + "chodniaAmeryka Łacińska" + +var plRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0017, 0x001d, 0x0039, 0x0043, 0x0054, 0x005c, 0x0063, 0x006a, 0x0070, 0x007a, 0x0083, 0x0096, 0x009d, 0x00a6, 0x00ab, @@ -47733,140 +50494,140 @@ var plRegionIdx = []uint16{ // 292 elements 0x0275, 0x0279, 0x027f, 0x0285, 0x0291, 0x0299, 0x029e, 0x02a6, // Entry 40 - 7F 0x02b0, 0x02b8, 0x02c7, 0x02ce, 0x02d5, 0x02da, 0x02ea, 0x02f1, - 0x02fa, 0x0301, 0x0310, 0x0310, 0x0319, 0x031f, 0x0328, 0x0332, - 0x033d, 0x0344, 0x0349, 0x0358, 0x035f, 0x0365, 0x0375, 0x037d, - 0x0382, 0x038b, 0x0395, 0x039b, 0x03a1, 0x03aa, 0x03bb, 0x03c1, - 0x03eb, 0x03f4, 0x03f8, 0x0405, 0x040b, 0x041f, 0x0436, 0x043e, - 0x0447, 0x044c, 0x0452, 0x0463, 0x046c, 0x0474, 0x047a, 0x0483, - 0x0488, 0x04b0, 0x04b4, 0x04b8, 0x04c0, 0x04c7, 0x04cd, 0x04d4, - 0x04dc, 0x04e3, 0x04e8, 0x04f1, 0x04fa, 0x0502, 0x0508, 0x051b, + 0x02fa, 0x0301, 0x0310, 0x031b, 0x0324, 0x032a, 0x0333, 0x033d, + 0x0348, 0x034f, 0x0354, 0x0363, 0x036a, 0x0370, 0x0380, 0x0388, + 0x038d, 0x0396, 0x03a0, 0x03a6, 0x03ac, 0x03b5, 0x03c6, 0x03cc, + 0x03f6, 0x03ff, 0x0403, 0x0410, 0x0416, 0x042a, 0x0441, 0x0449, + 0x0452, 0x0457, 0x045d, 0x046e, 0x0477, 0x047f, 0x0485, 0x048e, + 0x0493, 0x04bb, 0x04bf, 0x04c3, 0x04cb, 0x04d2, 0x04d8, 0x04df, + 0x04e7, 0x04ee, 0x04f3, 0x04fc, 0x0505, 0x050d, 0x0513, 0x0526, // Entry 80 - BF - 0x052b, 0x053c, 0x0542, 0x0549, 0x0553, 0x0557, 0x055c, 0x0567, - 0x0574, 0x057d, 0x0584, 0x058b, 0x0590, 0x059a, 0x05a0, 0x05a5, - 0x05ab, 0x05b1, 0x05ba, 0x05c5, 0x05d1, 0x05db, 0x05ea, 0x05f3, - 0x05f7, 0x0605, 0x060d, 0x061e, 0x0630, 0x0639, 0x0643, 0x064d, - 0x0652, 0x065b, 0x0663, 0x0669, 0x066f, 0x0676, 0x067e, 0x0685, - 0x0693, 0x0698, 0x069f, 0x06a6, 0x06af, 0x06b7, 0x06bf, 0x06c4, - 0x06c9, 0x06cd, 0x06da, 0x06de, 0x06e4, 0x06e8, 0x06fb, 0x070c, - 0x0714, 0x071c, 0x0722, 0x0739, 0x0741, 0x074a, 0x0761, 0x076b, + 0x0536, 0x0547, 0x054d, 0x0554, 0x055e, 0x0562, 0x0567, 0x0572, + 0x057f, 0x0588, 0x058f, 0x0596, 0x059b, 0x05a5, 0x05ab, 0x05b0, + 0x05b6, 0x05bc, 0x05c5, 0x05d0, 0x05dc, 0x05e6, 0x05f5, 0x05fe, + 0x0602, 0x0610, 0x0618, 0x0629, 0x063b, 0x0644, 0x064e, 0x0658, + 0x065d, 0x0666, 0x066e, 0x0674, 0x067a, 0x0681, 0x0689, 0x0690, + 0x069e, 0x06a3, 0x06aa, 0x06b1, 0x06ba, 0x06c2, 0x06ca, 0x06cf, + 0x06d4, 0x06d8, 0x06e5, 0x06e9, 0x06ef, 0x06f3, 0x0706, 0x0717, + 0x071f, 0x0727, 0x072d, 0x0744, 0x074c, 0x0755, 0x076c, 0x0776, // Entry C0 - FF - 0x0770, 0x0778, 0x077d, 0x0789, 0x0790, 0x0797, 0x079d, 0x07a2, - 0x07a8, 0x07b8, 0x07c6, 0x07cd, 0x07d2, 0x07d9, 0x07e1, 0x07f7, - 0x0800, 0x0814, 0x081d, 0x0829, 0x0833, 0x083a, 0x0841, 0x0848, - 0x0859, 0x087f, 0x0887, 0x0893, 0x0898, 0x089d, 0x08ad, 0x08bb, - 0x08bf, 0x08ee, 0x08f2, 0x08fb, 0x0907, 0x090e, 0x091c, 0x0928, - 0x092f, 0x0934, 0x093a, 0x094b, 0x0951, 0x0957, 0x095f, 0x0966, - 0x096c, 0x0998, 0x09ba, 0x09cb, 0x09d2, 0x09dc, 0x09e3, 0x09fc, - 0x0a05, 0x0a1f, 0x0a44, 0x0a4b, 0x0a52, 0x0a61, 0x0a66, 0x0a6c, + 0x077b, 0x0783, 0x0788, 0x07a1, 0x07a8, 0x07af, 0x07b5, 0x07ba, + 0x07c0, 0x07d0, 0x07de, 0x07e5, 0x07ea, 0x07f1, 0x07f9, 0x080f, + 0x0818, 0x082c, 0x0835, 0x0841, 0x084b, 0x0852, 0x0859, 0x0860, + 0x0871, 0x0897, 0x089f, 0x08ab, 0x08b0, 0x08b5, 0x08c5, 0x08d3, + 0x08d7, 0x0906, 0x090a, 0x0913, 0x091f, 0x0926, 0x0934, 0x0940, + 0x0947, 0x094c, 0x0952, 0x0963, 0x0969, 0x096f, 0x0977, 0x097e, + 0x0984, 0x09b0, 0x09d2, 0x09e3, 0x09ea, 0x09f4, 0x09fb, 0x0a14, + 0x0a1d, 0x0a37, 0x0a5c, 0x0a63, 0x0a6a, 0x0a79, 0x0a7e, 0x0a84, // Entry 100 - 13F - 0x0a71, 0x0a78, 0x0a95, 0x0a9b, 0x0aa3, 0x0ab2, 0x0ab8, 0x0abe, - 0x0ad0, 0x0ae3, 0x0aea, 0x0afa, 0x0b0b, 0x0b1b, 0x0b2c, 0x0b3c, - 0x0b4e, 0x0b55, 0x0b75, 0x0b7c, 0x0b8a, 0x0b9a, 0x0bb4, 0x0bc6, - 0x0bd1, 0x0bda, 0x0beb, 0x0bf4, 0x0bf8, 0x0c06, 0x0c14, 0x0c1a, - 0x0c2a, 0x0c3b, 0x0c4b, 0x0c5d, -} // Size: 608 bytes - -const ptRegionStr string = "" + // Size: 3182 bytes + 0x0a89, 0x0a90, 0x0aad, 0x0ab3, 0x0abb, 0x0aca, 0x0ad0, 0x0ad6, + 0x0ae8, 0x0afb, 0x0b02, 0x0b12, 0x0b23, 0x0b33, 0x0b44, 0x0b54, + 0x0b66, 0x0b6d, 0x0b8d, 0x0b94, 0x0ba2, 0x0bb2, 0x0bcc, 0x0bde, + 0x0be9, 0x0bf2, 0x0c03, 0x0c0c, 0x0c10, 0x0c1e, 0x0c2c, 0x0c32, + 0x0c42, 0x0c53, 0x0c63, 0x0c63, 0x0c75, +} // Size: 610 bytes + +const ptRegionStr string = "" + // Size: 3174 bytes "Ilha de AscensãoAndorraEmirados Árabes UnidosAfeganistãoAntígua e Barbud" + "aAnguillaAlbâniaArmêniaAngolaAntártidaArgentinaSamoa AmericanaÁustriaAus" + - "tráliaArubaIlhas ÅlandAzerbaijãoBósnia e HerzegovinaBarbadosBangladeshBé" + + "tráliaArubaIlhas AlandAzerbaijãoBósnia e HerzegovinaBarbadosBangladeshBé" + "lgicaBurquina FasoBulgáriaBahreinBurundiBeninSão BartolomeuBermudasBrune" + "iBolíviaPaíses Baixos CaribenhosBrasilBahamasButãoIlha BouvetBotsuanaBie" + "lorrússiaBelizeCanadáIlhas Cocos (Keeling)Congo - KinshasaRepública Cent" + - "ro-AfricanaCongo - BrazzavilleSuíçaCosta do MarfimIlhas CookChileRepúbli" + - "ca dos CamarõesChinaColômbiaIlha de ClippertonCosta RicaCubaCabo VerdeCu" + - "raçaoIlha ChristmasChipreRepública TchecaAlemanhaDiego GarciaDjibutiDina" + - "marcaDominicaRepública DominicanaArgéliaCeuta e MelilhaEquadorEstôniaEgi" + - "toSaara OcidentalEritreiaEspanhaEtiópiaUnião EuropeiaFinlândiaFijiIlhas " + - "MalvinasMicronésiaIlhas FaroeFrançaGabãoReino UnidoGranadaGeórgiaGuiana " + - "FrancesaGuernseyGanaGibraltarGroenlândiaGâmbiaGuinéGuadalupeGuiné Equato" + - "rialGréciaIlhas Geórgia do Sul e Sandwich do SulGuatemalaGuamGuiné-Bissa" + - "uGuianaHong Kong, RAE da ChinaIlhas Heard e McDonaldHondurasCroáciaHaiti" + - "HungriaIlhas CanáriasIndonésiaIrlandaIsraelIlha de ManÍndiaTerritório Br" + - "itânico do Oceano ÍndicoIraqueIrãIslândiaItáliaJerseyJamaicaJordâniaJapã" + - "oQuêniaQuirguistãoCambojaQuiribatiComoresSão Cristóvão e NevisCoreia do " + - "NorteCoreia do SulKuwaitIlhas CaymanCazaquistãoLaosLíbanoSanta LúciaLiec" + - "htensteinSri LankaLibériaLesotoLituâniaLuxemburgoLetôniaLíbiaMarrocosMôn" + - "acoMoldáviaMontenegroSão MartinhoMadagascarIlhas MarshallMacedôniaMaliMi" + - "anmar (Birmânia)MongóliaMacau, RAE da ChinaIlhas Marianas do NorteMartin" + - "icaMauritâniaMontserratMaltaMaurícioMaldivasMalawiMéxicoMalásiaMoçambiqu" + - "eNamíbiaNova CaledôniaNígerIlha NorfolkNigériaNicaráguaHolandaNoruegaNep" + - "alNauruNiueNova ZelândiaOmãPanamáPeruPolinésia FrancesaPapua-Nova GuinéF" + - "ilipinasPaquistãoPolôniaSaint Pierre e MiquelonIlhas PitcairnPorto RicoT" + - "erritórios palestinosPortugalPalauParaguaiCatarOceania RemotaReuniãoRomê" + - "niaSérviaRússiaRuandaArábia SauditaIlhas SalomãoSeichelesSudãoSuéciaCing" + - "apuraSanta HelenaEslovêniaSvalbard e Jan MayenEslováquiaSerra LeoaSan Ma" + - "rinoSenegalSomáliaSurinameSudão do SulSão Tomé e PríncipeEl SalvadorSint" + - " MaartenSíriaSuazilândiaTristão da CunhaIlhas Turks e CaicosChadeTerritó" + - "rios Franceses do SulTogoTailândiaTajiquistãoTokelauTimor-LesteTurcomeni" + - "stãoTunísiaTongaTurquiaTrinidad e TobagoTuvaluTaiwanTanzâniaUcrâniaUgand" + - "aIlhas Menores Distantes dos EUANações UnidasEstados UnidosUruguaiUzbequ" + - "istãoCidade do VaticanoSão Vicente e GranadinasVenezuelaIlhas Virgens Br" + - "itânicasIlhas Virgens dos EUAVietnãVanuatuWallis e FutunaSamoaKosovoIême" + - "nMayotteÁfrica do SulZâmbiaZimbábueRegião desconhecidaMundoÁfricaAmérica" + - " do NorteAmérica do SulOceaniaÁfrica OcidentalAmérica CentralÁfrica Orie" + - "ntalÁfrica do NorteÁfrica CentralÁfrica MeridionalAméricasAmérica Setent" + - "rionalCaribeÁsia OrientalÁsia MeridionalSudeste AsiáticoEuropa Meridiona" + - "lAustralásiaMelanésiaRegião da MicronésiaPolinésiaÁsiaÁsia CentralÁsia O" + - "cidentalEuropaEuropa OrientalEuropa SetentrionalEuropa OcidentalAmérica " + - "Latina" - -var ptRegionIdx = []uint16{ // 292 elements + "ro-AfricanaCongo - BrazzavilleSuíçaCosta do MarfimIlhas CookChileCamarõe" + + "sChinaColômbiaIlha de ClippertonCosta RicaCubaCabo VerdeCuraçaoIlha Chri" + + "stmasChipreTchéquiaAlemanhaDiego GarciaDjibutiDinamarcaDominicaRepública" + + " DominicanaArgéliaCeuta e MelilhaEquadorEstôniaEgitoSaara OcidentalEritr" + + "eiaEspanhaEtiópiaUnião Europeiazona do euroFinlândiaFijiIlhas MalvinasMi" + + "cronésiaIlhas FaroeFrançaGabãoReino UnidoGranadaGeórgiaGuiana FrancesaGu" + + "ernseyGanaGibraltarGroenlândiaGâmbiaGuinéGuadalupeGuiné EquatorialGrécia" + + "Ilhas Geórgia do Sul e Sandwich do SulGuatemalaGuamGuiné-BissauGuianaHon" + + "g Kong, RAE da ChinaIlhas Heard e McDonaldHondurasCroáciaHaitiHungriaIlh" + + "as CanáriasIndonésiaIrlandaIsraelIlha de ManÍndiaTerritório Britânico do" + + " Oceano ÍndicoIraqueIrãIslândiaItáliaJerseyJamaicaJordâniaJapãoQuêniaQui" + + "rguistãoCambojaQuiribatiComoresSão Cristóvão e NévisCoreia do NorteCorei" + + "a do SulKuwaitIlhas CaymanCazaquistãoLaosLíbanoSanta LúciaLiechtensteinS" + + "ri LankaLibériaLesotoLituâniaLuxemburgoLetôniaLíbiaMarrocosMônacoMoldávi" + + "aMontenegroSão MartinhoMadagascarIlhas MarshallMacedôniaMaliMianmar (Bir" + + "mânia)MongóliaMacau, RAE da ChinaIlhas Marianas do NorteMartinicaMauritâ" + + "niaMontserratMaltaMaurícioMaldivasMalauiMéxicoMalásiaMoçambiqueNamíbiaNo" + + "va CaledôniaNígerIlha NorfolkNigériaNicaráguaHolandaNoruegaNepalNauruNiu" + + "eNova ZelândiaOmãPanamáPeruPolinésia FrancesaPapua-Nova GuinéFilipinasPa" + + "quistãoPolôniaSão Pedro e MiquelãoIlhas PitcairnPorto RicoTerritórios pa" + + "lestinosPortugalPalauParaguaiCatarOceania RemotaReuniãoRomêniaSérviaRúss" + + "iaRuandaArábia SauditaIlhas SalomãoSeichelesSudãoSuéciaSingapuraSanta He" + + "lenaEslovêniaSvalbard e Jan MayenEslováquiaSerra LeoaSan MarinoSenegalSo" + + "máliaSurinameSudão do SulSão Tomé e PríncipeEl SalvadorSint MaartenSíria" + + "SuazilândiaTristão da CunhaIlhas Turks e CaicosChadeTerritórios Francese" + + "s do SulTogoTailândiaTadjiquistãoTokelauTimor-LesteTurcomenistãoTunísiaT" + + "ongaTurquiaTrinidad e TobagoTuvaluTaiwanTanzâniaUcrâniaUgandaIlhas Menor" + + "es Distantes dos EUANações UnidasEstados UnidosUruguaiUzbequistãoCidade " + + "do VaticanoSão Vicente e GranadinasVenezuelaIlhas Virgens BritânicasIlha" + + "s Virgens AmericanasVietnãVanuatuWallis e FutunaSamoaKosovoIêmenMayotteÁ" + + "frica do SulZâmbiaZimbábueRegião desconhecidaMundoÁfricaAmérica do Norte" + + "América do SulOceaniaÁfrica OcidentalAmérica CentralÁfrica OrientalÁfric" + + "a do NorteÁfrica CentralÁfrica MeridionalAméricasAmérica SetentrionalCar" + + "ibeÁsia OrientalÁsia MeridionalSudeste AsiáticoEuropa MeridionalAustralá" + + "siaMelanésiaRegião da MicronésiaPolinésiaÁsiaÁsia CentralÁsia OcidentalE" + + "uropaEuropa OrientalEuropa SetentrionalEuropa OcidentalAmérica Latina" + +var ptRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0011, 0x0018, 0x002f, 0x003b, 0x004d, 0x0055, 0x005d, 0x0065, 0x006b, 0x0075, 0x007e, 0x008d, 0x0095, 0x009f, 0x00a4, - 0x00b0, 0x00bb, 0x00d0, 0x00d8, 0x00e2, 0x00ea, 0x00f7, 0x0100, - 0x0107, 0x010e, 0x0113, 0x0122, 0x012a, 0x0130, 0x0138, 0x0151, - 0x0157, 0x015e, 0x0164, 0x016f, 0x0177, 0x0184, 0x018a, 0x0191, - 0x01a6, 0x01b6, 0x01d0, 0x01e3, 0x01ea, 0x01f9, 0x0203, 0x0208, - 0x0220, 0x0225, 0x022e, 0x0240, 0x024a, 0x024e, 0x0258, 0x0260, - 0x026e, 0x0274, 0x0285, 0x028d, 0x0299, 0x02a0, 0x02a9, 0x02b1, + 0x00af, 0x00ba, 0x00cf, 0x00d7, 0x00e1, 0x00e9, 0x00f6, 0x00ff, + 0x0106, 0x010d, 0x0112, 0x0121, 0x0129, 0x012f, 0x0137, 0x0150, + 0x0156, 0x015d, 0x0163, 0x016e, 0x0176, 0x0183, 0x0189, 0x0190, + 0x01a5, 0x01b5, 0x01cf, 0x01e2, 0x01e9, 0x01f8, 0x0202, 0x0207, + 0x0210, 0x0215, 0x021e, 0x0230, 0x023a, 0x023e, 0x0248, 0x0250, + 0x025e, 0x0264, 0x026d, 0x0275, 0x0281, 0x0288, 0x0291, 0x0299, // Entry 40 - 7F - 0x02c6, 0x02ce, 0x02dd, 0x02e4, 0x02ec, 0x02f1, 0x0300, 0x0308, - 0x030f, 0x0317, 0x0326, 0x0326, 0x0330, 0x0334, 0x0342, 0x034d, - 0x0358, 0x035f, 0x0365, 0x0370, 0x0377, 0x037f, 0x038e, 0x0396, - 0x039a, 0x03a3, 0x03af, 0x03b6, 0x03bc, 0x03c5, 0x03d6, 0x03dd, - 0x0404, 0x040d, 0x0411, 0x041e, 0x0424, 0x043b, 0x0451, 0x0459, - 0x0461, 0x0466, 0x046d, 0x047c, 0x0486, 0x048d, 0x0493, 0x049e, - 0x04a4, 0x04cc, 0x04d2, 0x04d6, 0x04df, 0x04e6, 0x04ec, 0x04f3, - 0x04fc, 0x0502, 0x0509, 0x0515, 0x051c, 0x0525, 0x052c, 0x0544, + 0x02ae, 0x02b6, 0x02c5, 0x02cc, 0x02d4, 0x02d9, 0x02e8, 0x02f0, + 0x02f7, 0x02ff, 0x030e, 0x031a, 0x0324, 0x0328, 0x0336, 0x0341, + 0x034c, 0x0353, 0x0359, 0x0364, 0x036b, 0x0373, 0x0382, 0x038a, + 0x038e, 0x0397, 0x03a3, 0x03aa, 0x03b0, 0x03b9, 0x03ca, 0x03d1, + 0x03f8, 0x0401, 0x0405, 0x0412, 0x0418, 0x042f, 0x0445, 0x044d, + 0x0455, 0x045a, 0x0461, 0x0470, 0x047a, 0x0481, 0x0487, 0x0492, + 0x0498, 0x04c0, 0x04c6, 0x04ca, 0x04d3, 0x04da, 0x04e0, 0x04e7, + 0x04f0, 0x04f6, 0x04fd, 0x0509, 0x0510, 0x0519, 0x0520, 0x0539, // Entry 80 - BF - 0x0553, 0x0560, 0x0566, 0x0572, 0x057e, 0x0582, 0x0589, 0x0595, - 0x05a2, 0x05ab, 0x05b3, 0x05b9, 0x05c2, 0x05cc, 0x05d4, 0x05da, - 0x05e2, 0x05e9, 0x05f2, 0x05fc, 0x0609, 0x0613, 0x0621, 0x062b, - 0x062f, 0x0642, 0x064b, 0x065e, 0x0675, 0x067e, 0x0689, 0x0693, - 0x0698, 0x06a1, 0x06a9, 0x06af, 0x06b6, 0x06be, 0x06c9, 0x06d1, - 0x06e0, 0x06e6, 0x06f2, 0x06fa, 0x0704, 0x070b, 0x0712, 0x0717, - 0x071c, 0x0720, 0x072e, 0x0732, 0x0739, 0x073d, 0x0750, 0x0761, - 0x076a, 0x0774, 0x077c, 0x0793, 0x07a1, 0x07ab, 0x07c2, 0x07ca, + 0x0548, 0x0555, 0x055b, 0x0567, 0x0573, 0x0577, 0x057e, 0x058a, + 0x0597, 0x05a0, 0x05a8, 0x05ae, 0x05b7, 0x05c1, 0x05c9, 0x05cf, + 0x05d7, 0x05de, 0x05e7, 0x05f1, 0x05fe, 0x0608, 0x0616, 0x0620, + 0x0624, 0x0637, 0x0640, 0x0653, 0x066a, 0x0673, 0x067e, 0x0688, + 0x068d, 0x0696, 0x069e, 0x06a4, 0x06ab, 0x06b3, 0x06be, 0x06c6, + 0x06d5, 0x06db, 0x06e7, 0x06ef, 0x06f9, 0x0700, 0x0707, 0x070c, + 0x0711, 0x0715, 0x0723, 0x0727, 0x072e, 0x0732, 0x0745, 0x0756, + 0x075f, 0x0769, 0x0771, 0x0787, 0x0795, 0x079f, 0x07b6, 0x07be, // Entry C0 - FF - 0x07cf, 0x07d7, 0x07dc, 0x07ea, 0x07f2, 0x07fa, 0x0801, 0x0808, - 0x080e, 0x081d, 0x082b, 0x0834, 0x083a, 0x0841, 0x084a, 0x0856, - 0x0860, 0x0874, 0x087f, 0x0889, 0x0893, 0x089a, 0x08a2, 0x08aa, - 0x08b7, 0x08cd, 0x08d8, 0x08e4, 0x08ea, 0x08f6, 0x0907, 0x091b, - 0x0920, 0x093d, 0x0941, 0x094b, 0x0957, 0x095e, 0x0969, 0x0977, - 0x097f, 0x0984, 0x098b, 0x099c, 0x09a2, 0x09a8, 0x09b1, 0x09b9, - 0x09bf, 0x09de, 0x09ed, 0x09fb, 0x0a02, 0x0a0e, 0x0a20, 0x0a39, - 0x0a42, 0x0a5b, 0x0a70, 0x0a77, 0x0a7e, 0x0a8d, 0x0a92, 0x0a98, + 0x07c3, 0x07cb, 0x07d0, 0x07de, 0x07e6, 0x07ee, 0x07f5, 0x07fc, + 0x0802, 0x0811, 0x081f, 0x0828, 0x082e, 0x0835, 0x083e, 0x084a, + 0x0854, 0x0868, 0x0873, 0x087d, 0x0887, 0x088e, 0x0896, 0x089e, + 0x08ab, 0x08c1, 0x08cc, 0x08d8, 0x08de, 0x08ea, 0x08fb, 0x090f, + 0x0914, 0x0931, 0x0935, 0x093f, 0x094c, 0x0953, 0x095e, 0x096c, + 0x0974, 0x0979, 0x0980, 0x0991, 0x0997, 0x099d, 0x09a6, 0x09ae, + 0x09b4, 0x09d3, 0x09e2, 0x09f0, 0x09f7, 0x0a03, 0x0a15, 0x0a2e, + 0x0a37, 0x0a50, 0x0a68, 0x0a6f, 0x0a76, 0x0a85, 0x0a8a, 0x0a90, // Entry 100 - 13F - 0x0a9e, 0x0aa5, 0x0ab3, 0x0aba, 0x0ac3, 0x0ad7, 0x0adc, 0x0ae3, - 0x0af4, 0x0b03, 0x0b0a, 0x0b1b, 0x0b2b, 0x0b3b, 0x0b4b, 0x0b5a, - 0x0b6c, 0x0b75, 0x0b8a, 0x0b90, 0x0b9e, 0x0bae, 0x0bbf, 0x0bd0, - 0x0bdc, 0x0be6, 0x0bfc, 0x0c06, 0x0c0b, 0x0c18, 0x0c27, 0x0c2d, - 0x0c3c, 0x0c4f, 0x0c5f, 0x0c6e, -} // Size: 608 bytes - -const ptPTRegionStr string = "" + // Size: 718 bytes + 0x0a96, 0x0a9d, 0x0aab, 0x0ab2, 0x0abb, 0x0acf, 0x0ad4, 0x0adb, + 0x0aec, 0x0afb, 0x0b02, 0x0b13, 0x0b23, 0x0b33, 0x0b43, 0x0b52, + 0x0b64, 0x0b6d, 0x0b82, 0x0b88, 0x0b96, 0x0ba6, 0x0bb7, 0x0bc8, + 0x0bd4, 0x0bde, 0x0bf4, 0x0bfe, 0x0c03, 0x0c10, 0x0c1f, 0x0c25, + 0x0c34, 0x0c47, 0x0c57, 0x0c57, 0x0c66, +} // Size: 610 bytes + +const ptPTRegionStr string = "" + // Size: 809 bytes "AnguilaArméniaAlandaBangladecheBarémBenimBaamasIlhas dos Cocos (Keeling)" + - "Congo-KinshasaCongo-BrazzavilleCamarõesCuraçauIlha do NatalRepública Che" + - "caJibutiDomínicaEstóniaIlhas FalklandIlhas FaroéGronelândiaGuameIrãoQuén" + - "iaSão Cristóvão e NevesIlhas CaimãoListenstaineSri LancaLetóniaMónacoMad" + - "agáscarMacedóniaMonserrateMauríciaMaláuiNova CaledóniaPaíses BaixosPolón" + - "iaSão Pedro e MiquelãoTerritórios palestinianosOceânia InsularRoméniaSin" + - "gapuraEslovéniaSão MarinhoSalvadorIlhas Turcas e CaicosToquelauTurquemen" + - "istãoTrindade e TobagoIlhas Menores Afastadas dos EUAUsbequistãoVietname" + - "IémenMaioteZimbabuéOceâniaNorte de ÁfricaÁfrica AustralCaraíbasÁsia do S" + - "ulEuropa do SulEuropa do Norte" + "Congo-KinshasaCongo-BrazzavilleCôte d’Ivoire (Costa do Marfim)CuraçauIlh" + + "a do NatalChéquiaJibutiDomínicaEstóniaSara OcidentalZona EuroIlhas Falkl" + + "andIlhas FaroéGronelândiaGuameIrãoQuéniaQuiribátiSão Cristóvão e NevesKo" + + "weitIlhas CaimãoListenstaineSri LancaLetóniaMónacoMadagáscarMacedóniaMon" + + "serrateMauríciaMaláuiNova CaledóniaPaíses BaixosNiuêPolóniaTerritórios p" + + "alestinianosOceânia InsularRoméniaEslovéniaSão MarinhoSalvadorSão Martin" + + "ho (Sint Maarten)Ilhas Turcas e CaicosTajiquistãoToquelauTurquemenistãoT" + + "rindade e TobagoIlhas Menores Afastadas dos EUAUsbequistãoIlhas Virgens " + + "dos EUAVietnameIémenMaioteZimbabuéOceâniaNorte de ÁfricaÁfrica AustralCa" + + "raíbasÁsia do SulEuropa do SulEuropa do Norte" var ptPTRegionIdx = []uint16{ // 290 elements // Entry 0 - 3F @@ -47875,324 +50636,324 @@ var ptPTRegionIdx = []uint16{ // 290 elements 0x0015, 0x0015, 0x0015, 0x0015, 0x0020, 0x0020, 0x0020, 0x0020, 0x0026, 0x0026, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x002b, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, 0x0031, - 0x004a, 0x0058, 0x0058, 0x0069, 0x0069, 0x0069, 0x0069, 0x0069, - 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x007a, - 0x0087, 0x0087, 0x0097, 0x0097, 0x0097, 0x009d, 0x009d, 0x00a6, + 0x004a, 0x0058, 0x0058, 0x0069, 0x0069, 0x008b, 0x008b, 0x008b, + 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x008b, 0x0093, + 0x00a0, 0x00a0, 0x00a8, 0x00a8, 0x00a8, 0x00ae, 0x00ae, 0x00b7, // Entry 40 - 7F - 0x00a6, 0x00a6, 0x00a6, 0x00a6, 0x00ae, 0x00ae, 0x00ae, 0x00ae, - 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00ae, 0x00bc, 0x00bc, - 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, 0x00c8, - 0x00c8, 0x00c8, 0x00d4, 0x00d4, 0x00d4, 0x00d4, 0x00d4, 0x00d4, - 0x00d4, 0x00d4, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, - 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, 0x00d9, - 0x00d9, 0x00d9, 0x00d9, 0x00de, 0x00de, 0x00de, 0x00de, 0x00de, - 0x00de, 0x00de, 0x00e5, 0x00e5, 0x00e5, 0x00e5, 0x00e5, 0x00fd, + 0x00b7, 0x00b7, 0x00b7, 0x00b7, 0x00bf, 0x00bf, 0x00cd, 0x00cd, + 0x00cd, 0x00cd, 0x00cd, 0x00d6, 0x00d6, 0x00d6, 0x00e4, 0x00e4, + 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, 0x00f0, + 0x00f0, 0x00f0, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, + 0x00fc, 0x00fc, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, + 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, 0x0101, + 0x0101, 0x0101, 0x0101, 0x0106, 0x0106, 0x0106, 0x0106, 0x0106, + 0x0106, 0x0106, 0x010d, 0x010d, 0x010d, 0x0117, 0x0117, 0x012f, // Entry 80 - BF - 0x00fd, 0x00fd, 0x00fd, 0x010a, 0x010a, 0x010a, 0x010a, 0x010a, - 0x0116, 0x011f, 0x011f, 0x011f, 0x011f, 0x011f, 0x0127, 0x0127, - 0x0127, 0x012e, 0x012e, 0x012e, 0x012e, 0x0139, 0x0139, 0x0143, - 0x0143, 0x0143, 0x0143, 0x0143, 0x0143, 0x0143, 0x0143, 0x014d, - 0x014d, 0x0156, 0x0156, 0x015d, 0x015d, 0x015d, 0x015d, 0x015d, - 0x016c, 0x016c, 0x016c, 0x016c, 0x016c, 0x017a, 0x017a, 0x017a, - 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, 0x017a, - 0x017a, 0x017a, 0x0182, 0x0198, 0x0198, 0x0198, 0x01b2, 0x01b2, + 0x012f, 0x012f, 0x0135, 0x0142, 0x0142, 0x0142, 0x0142, 0x0142, + 0x014e, 0x0157, 0x0157, 0x0157, 0x0157, 0x0157, 0x015f, 0x015f, + 0x015f, 0x0166, 0x0166, 0x0166, 0x0166, 0x0171, 0x0171, 0x017b, + 0x017b, 0x017b, 0x017b, 0x017b, 0x017b, 0x017b, 0x017b, 0x0185, + 0x0185, 0x018e, 0x018e, 0x0195, 0x0195, 0x0195, 0x0195, 0x0195, + 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01a4, 0x01b2, 0x01b2, 0x01b2, + 0x01b2, 0x01b7, 0x01b7, 0x01b7, 0x01b7, 0x01b7, 0x01b7, 0x01b7, + 0x01b7, 0x01b7, 0x01bf, 0x01bf, 0x01bf, 0x01bf, 0x01d9, 0x01d9, // Entry C0 - FF - 0x01b2, 0x01b2, 0x01b2, 0x01c2, 0x01c2, 0x01ca, 0x01ca, 0x01ca, - 0x01ca, 0x01ca, 0x01ca, 0x01ca, 0x01ca, 0x01ca, 0x01d3, 0x01d3, - 0x01dd, 0x01dd, 0x01dd, 0x01dd, 0x01e9, 0x01e9, 0x01e9, 0x01e9, - 0x01e9, 0x01e9, 0x01f1, 0x01f1, 0x01f1, 0x01f1, 0x01f1, 0x0206, - 0x0206, 0x0206, 0x0206, 0x0206, 0x0206, 0x020e, 0x020e, 0x021d, - 0x021d, 0x021d, 0x021d, 0x022e, 0x022e, 0x022e, 0x022e, 0x022e, - 0x022e, 0x024d, 0x024d, 0x024d, 0x024d, 0x0259, 0x0259, 0x0259, - 0x0259, 0x0259, 0x0259, 0x0261, 0x0261, 0x0261, 0x0261, 0x0261, + 0x01d9, 0x01d9, 0x01d9, 0x01e9, 0x01e9, 0x01f1, 0x01f1, 0x01f1, + 0x01f1, 0x01f1, 0x01f1, 0x01f1, 0x01f1, 0x01f1, 0x01f1, 0x01f1, + 0x01fb, 0x01fb, 0x01fb, 0x01fb, 0x0207, 0x0207, 0x0207, 0x0207, + 0x0207, 0x0207, 0x020f, 0x022b, 0x022b, 0x022b, 0x022b, 0x0240, + 0x0240, 0x0240, 0x0240, 0x0240, 0x024c, 0x0254, 0x0254, 0x0263, + 0x0263, 0x0263, 0x0263, 0x0274, 0x0274, 0x0274, 0x0274, 0x0274, + 0x0274, 0x0293, 0x0293, 0x0293, 0x0293, 0x029f, 0x029f, 0x029f, + 0x029f, 0x029f, 0x02b4, 0x02bc, 0x02bc, 0x02bc, 0x02bc, 0x02bc, // Entry 100 - 13F - 0x0267, 0x026d, 0x026d, 0x026d, 0x0276, 0x0276, 0x0276, 0x0276, - 0x0276, 0x0276, 0x027e, 0x027e, 0x027e, 0x027e, 0x028e, 0x028e, - 0x029d, 0x029d, 0x029d, 0x02a6, 0x02a6, 0x02b2, 0x02b2, 0x02bf, - 0x02bf, 0x02bf, 0x02bf, 0x02bf, 0x02bf, 0x02bf, 0x02bf, 0x02bf, - 0x02bf, 0x02ce, + 0x02c2, 0x02c8, 0x02c8, 0x02c8, 0x02d1, 0x02d1, 0x02d1, 0x02d1, + 0x02d1, 0x02d1, 0x02d9, 0x02d9, 0x02d9, 0x02d9, 0x02e9, 0x02e9, + 0x02f8, 0x02f8, 0x02f8, 0x0301, 0x0301, 0x030d, 0x030d, 0x031a, + 0x031a, 0x031a, 0x031a, 0x031a, 0x031a, 0x031a, 0x031a, 0x031a, + 0x031a, 0x0329, } // Size: 604 bytes -const roRegionStr string = "" + // Size: 3252 bytes +const roRegionStr string = "" + // Size: 3247 bytes "Insula AscensionAndorraEmiratele Arabe UniteAfganistanAntigua și Barbuda" + "AnguillaAlbaniaArmeniaAngolaAntarcticaArgentinaSamoa AmericanăAustriaAus" + "traliaArubaInsulele ÅlandAzerbaidjanBosnia și HerțegovinaBarbadosBanglad" + - "eshBelgiaBurkina FasoBulgariaBahrainBurundiBeninSfântul BartolomeuBermud" + - "aBruneiBoliviaInsulele Caraibe OlandezeBraziliaBahamasBhutanInsula Bouve" + - "tBotswanaBelarusBelizeCanadaInsulele Cocos (Keeling)Congo - KinshasaRepu" + - "blica CentrafricanăCongo - BrazzavilleElvețiaCôte d’IvoireInsulele CookC" + - "hileCamerunChinaColumbiaInsula ClippertonCosta RicaCubaCapul VerdeCuraça" + - "oInsula ChristmasCipruRepublica CehăGermaniaDiego GarciaDjiboutiDanemarc" + - "aDominicaRepublica DominicanăAlgeriaCeuta și MelillaEcuadorEstoniaEgiptS" + - "ahara OccidentalăEritreeaSpaniaEtiopiaUniunea EuropeanăFinlandaFijiInsul" + - "ele FalklandMicroneziaInsulele FeroeFranțaGabonRegatul UnitGrenadaGeorgi" + - "aGuyana FrancezăGuernseyGhanaGibraltarGroenlandaGambiaGuineeaGuadelupaGu" + - "ineea EcuatorialăGreciaGeorgia de Sud și Insulele Sandwich de SudGuatema" + - "laGuamGuineea-BissauGuyanaR.A.S. Hong Kong a ChineiInsula Heard și Insul" + - "ele McDonaldHondurasCroațiaHaitiUngariaInsulele CanareIndoneziaIrlandaIs" + - "raelInsula ManIndiaTeritoriul Britanic din Oceanul IndianIrakIranIslanda" + - "ItaliaJerseyJamaicaIordaniaJaponiaKenyaKârgâzstanCambodgiaKiribatiComore" + - "Saint Kitts și NevisCoreea de NordCoreea de SudKuweitInsulele CaymanKaza" + - "hstanLaosLibanSfânta LuciaLiechtensteinSri LankaLiberiaLesothoLituaniaLu" + - "xemburgLetoniaLibiaMarocMonacoRepublica MoldovaMuntenegruSfântul MartinM" + - "adagascarInsulele MarshallRepublica MacedoniaMaliMyanmar (Birmania)Mongo" + - "liaR.A.S. Macao a ChineiInsulele Mariane de NordMartinicaMauritaniaMonts" + - "erratMaltaMauritiusMaldiveMalawiMexicMalaysiaMozambicNamibiaNoua Caledon" + - "ieNigerInsula NorfolkNigeriaNicaraguaȚările de JosNorvegiaNepalNauruNiue" + - "Noua ZeelandăOmanPanamaPeruPolinezia FrancezăPapua-Noua GuineeFilipinePa" + - "kistanPoloniaSaint-Pierre și MiquelonInsulele PitcairnPuerto RicoTeritor" + - "iile PalestinienePortugaliaPalauParaguayQatarOceania PerifericăRéunionRo" + - "mâniaSerbiaRusiaRwandaArabia SaudităInsulele SolomonSeychellesSudanSuedi" + - "aSingaporeSfânta ElenaSloveniaSvalbard și Jan MayenSlovaciaSierra LeoneS" + - "an MarinoSenegalSomaliaSurinameSudanul de SudSao Tomé și PríncipeEl Salv" + - "adorSint-MaartenSiriaSwazilandTristan da CunhaInsulele Turks și CaicosCi" + - "adTeritoriile Australe și Antarctice FrancezeTogoThailandaTadjikistanTok" + - "elauTimorul de EstTurkmenistanTunisiaTongaTurciaTrinidad și TobagoTuvalu" + - "TaiwanTanzaniaUcrainaUgandaInsulele Îndepărtate ale S.U.A.Națiunile Unit" + - "eStatele Unite ale AmericiiUruguayUzbekistanStatul Cetății VaticanuluiSa" + - "int Vincent și GrenadineleVenezuelaInsulele Virgine BritaniceInsulele Vi" + - "rgine AmericaneVietnamVanuatuWallis și FutunaSamoaKosovoYemenMayotteAfri" + - "ca de SudZambiaZimbabweRegiune necunoscutăLumeAfricaAmerica de NordAmeri" + - "ca de SudOceaniaAfrica OccidentalăAmerica CentralăAfrica OrientalăAfrica" + - " SeptentrionalăAfrica CentralăAfrica MeridionalăAmericiAmerica Septentri" + - "onalăCaraibeAsia OrientalăAsia MeridionalăAsia de Sud-EstEuropa Meridion" + - "alăAustralasiaMelaneziaRegiunea MicroneziaPolineziaAsiaAsia CentralăAsia" + - " OccidentalăEuropaEuropa OrientalăEuropa SeptentrionalăEuropa Occidental" + - "ăAmerica Latină" - -var roRegionIdx = []uint16{ // 292 elements + "eshBelgiaBurkina FasoBulgariaBahrainBurundiBeninSaint-BarthélemyBermudaB" + + "runeiBoliviaInsulele Caraibe OlandezeBraziliaBahamasBhutanInsula BouvetB" + + "otswanaBelarusBelizeCanadaInsulele Cocos (Keeling)Congo - KinshasaRepubl" + + "ica CentrafricanăCongo - BrazzavilleElvețiaCôte d’IvoireInsulele CookChi" + + "leCamerunChinaColumbiaInsula ClippertonCosta RicaCubaCapul VerdeCuraçaoI" + + "nsula ChristmasCipruCehiaGermaniaDiego GarciaDjiboutiDanemarcaDominicaRe" + + "publica DominicanăAlgeriaCeuta și MelillaEcuadorEstoniaEgiptSahara Occid" + + "entalăEritreeaSpaniaEtiopiaUniunea EuropeanăZona euroFinlandaFijiInsulel" + + "e FalklandMicroneziaInsulele FeroeFranțaGabonRegatul UnitGrenadaGeorgiaG" + + "uyana FrancezăGuernseyGhanaGibraltarGroenlandaGambiaGuineeaGuadelupaGuin" + + "eea EcuatorialăGreciaGeorgia de Sud și Insulele Sandwich de SudGuatemala" + + "GuamGuineea-BissauGuyanaR.A.S. Hong Kong a ChineiInsula Heard și Insulel" + + "e McDonaldHondurasCroațiaHaitiUngariaInsulele CanareIndoneziaIrlandaIsra" + + "elInsula ManIndiaTeritoriul Britanic din Oceanul IndianIrakIranIslandaIt" + + "aliaJerseyJamaicaIordaniaJaponiaKenyaKârgâzstanCambodgiaKiribatiComoreSa" + + "int Kitts și NevisCoreea de NordCoreea de SudKuweitInsulele CaymanKazahs" + + "tanLaosLibanSfânta LuciaLiechtensteinSri LankaLiberiaLesothoLituaniaLuxe" + + "mburgLetoniaLibiaMarocMonacoRepublica MoldovaMuntenegruSfântul MartinMad" + + "agascarInsulele MarshallRepublica MacedoniaMaliMyanmar (Birmania)Mongoli" + + "aR.A.S. Macao a ChineiInsulele Mariane de NordMartinicaMauritaniaMontser" + + "ratMaltaMauritiusMaldiveMalawiMexicMalaysiaMozambicNamibiaNoua Caledonie" + + "NigerInsula NorfolkNigeriaNicaraguaȚările de JosNorvegiaNepalNauruNiueNo" + + "ua ZeelandăOmanPanamaPeruPolinezia FrancezăPapua-Noua GuineeFilipinePaki" + + "stanPoloniaSaint-Pierre și MiquelonInsulele PitcairnPuerto RicoTeritorii" + + "le PalestinienePortugaliaPalauParaguayQatarOceania PerifericăRéunionRomâ" + + "niaSerbiaRusiaRwandaArabia SaudităInsulele SolomonSeychellesSudanSuediaS" + + "ingaporeSfânta ElenaSloveniaSvalbard și Jan MayenSlovaciaSierra LeoneSan" + + " MarinoSenegalSomaliaSurinameSudanul de SudSao Tome și PrincipeEl Salvad" + + "orSint-MaartenSiriaSwazilandTristan da CunhaInsulele Turks și CaicosCiad" + + "Teritoriile Australe și Antarctice FrancezeTogoThailandaTadjikistanTokel" + + "auTimorul de EstTurkmenistanTunisiaTongaTurciaTrinidad și TobagoTuvaluTa" + + "iwanTanzaniaUcrainaUgandaInsulele Îndepărtate ale S.U.A.Națiunile UniteS" + + "tatele Unite ale AmericiiUruguayUzbekistanStatul Cetății VaticanuluiSain" + + "t Vincent și GrenadineleVenezuelaInsulele Virgine BritaniceInsulele Virg" + + "ine AmericaneVietnamVanuatuWallis și FutunaSamoaKosovoYemenMayotteAfrica" + + " de SudZambiaZimbabweRegiune necunoscutăLumeAfricaAmerica de NordAmerica" + + " de SudOceaniaAfrica OccidentalăAmerica CentralăAfrica OrientalăAfrica S" + + "eptentrionalăAfrica CentralăAfrica MeridionalăAmericiAmerica Septentrion" + + "alăCaraibeAsia OrientalăAsia MeridionalăAsia de Sud-EstEuropa Meridional" + + "ăAustralasiaMelaneziaRegiunea MicroneziaPolineziaAsiaAsia CentralăAsia " + + "OccidentalăEuropaEuropa OrientalăEuropa SeptentrionalăEuropa Occidentală" + + "America Latină" + +var roRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0010, 0x0017, 0x002c, 0x0036, 0x0049, 0x0051, 0x0058, 0x005f, 0x0065, 0x006f, 0x0078, 0x0088, 0x008f, 0x0098, 0x009d, 0x00ac, 0x00b7, 0x00ce, 0x00d6, 0x00e0, 0x00e6, 0x00f2, 0x00fa, - 0x0101, 0x0108, 0x010d, 0x0120, 0x0127, 0x012d, 0x0134, 0x014d, - 0x0155, 0x015c, 0x0162, 0x016f, 0x0177, 0x017e, 0x0184, 0x018a, - 0x01a2, 0x01b2, 0x01ca, 0x01dd, 0x01e5, 0x01f5, 0x0202, 0x0207, - 0x020e, 0x0213, 0x021b, 0x022c, 0x0236, 0x023a, 0x0245, 0x024d, - 0x025d, 0x0262, 0x0271, 0x0279, 0x0285, 0x028d, 0x0296, 0x029e, + 0x0101, 0x0108, 0x010d, 0x011e, 0x0125, 0x012b, 0x0132, 0x014b, + 0x0153, 0x015a, 0x0160, 0x016d, 0x0175, 0x017c, 0x0182, 0x0188, + 0x01a0, 0x01b0, 0x01c8, 0x01db, 0x01e3, 0x01f3, 0x0200, 0x0205, + 0x020c, 0x0211, 0x0219, 0x022a, 0x0234, 0x0238, 0x0243, 0x024b, + 0x025b, 0x0260, 0x0265, 0x026d, 0x0279, 0x0281, 0x028a, 0x0292, // Entry 40 - 7F - 0x02b3, 0x02ba, 0x02cb, 0x02d2, 0x02d9, 0x02de, 0x02f1, 0x02f9, - 0x02ff, 0x0306, 0x0318, 0x0318, 0x0320, 0x0324, 0x0335, 0x033f, - 0x034d, 0x0354, 0x0359, 0x0365, 0x036c, 0x0373, 0x0383, 0x038b, - 0x0390, 0x0399, 0x03a3, 0x03a9, 0x03b0, 0x03b9, 0x03cd, 0x03d3, - 0x03fe, 0x0407, 0x040b, 0x0419, 0x041f, 0x0438, 0x045a, 0x0462, - 0x046a, 0x046f, 0x0476, 0x0485, 0x048e, 0x0495, 0x049b, 0x04a5, - 0x04aa, 0x04d0, 0x04d4, 0x04d8, 0x04df, 0x04e5, 0x04eb, 0x04f2, - 0x04fa, 0x0501, 0x0506, 0x0512, 0x051b, 0x0523, 0x0529, 0x053e, + 0x02a7, 0x02ae, 0x02bf, 0x02c6, 0x02cd, 0x02d2, 0x02e5, 0x02ed, + 0x02f3, 0x02fa, 0x030c, 0x0315, 0x031d, 0x0321, 0x0332, 0x033c, + 0x034a, 0x0351, 0x0356, 0x0362, 0x0369, 0x0370, 0x0380, 0x0388, + 0x038d, 0x0396, 0x03a0, 0x03a6, 0x03ad, 0x03b6, 0x03ca, 0x03d0, + 0x03fb, 0x0404, 0x0408, 0x0416, 0x041c, 0x0435, 0x0457, 0x045f, + 0x0467, 0x046c, 0x0473, 0x0482, 0x048b, 0x0492, 0x0498, 0x04a2, + 0x04a7, 0x04cd, 0x04d1, 0x04d5, 0x04dc, 0x04e2, 0x04e8, 0x04ef, + 0x04f7, 0x04fe, 0x0503, 0x050f, 0x0518, 0x0520, 0x0526, 0x053b, // Entry 80 - BF - 0x054c, 0x0559, 0x055f, 0x056e, 0x0577, 0x057b, 0x0580, 0x058d, - 0x059a, 0x05a3, 0x05aa, 0x05b1, 0x05b9, 0x05c2, 0x05c9, 0x05ce, - 0x05d3, 0x05d9, 0x05ea, 0x05f4, 0x0603, 0x060d, 0x061e, 0x0631, - 0x0635, 0x0647, 0x064f, 0x0664, 0x067c, 0x0685, 0x068f, 0x0699, - 0x069e, 0x06a7, 0x06ae, 0x06b4, 0x06b9, 0x06c1, 0x06c9, 0x06d0, - 0x06de, 0x06e3, 0x06f1, 0x06f8, 0x0701, 0x0710, 0x0718, 0x071d, - 0x0722, 0x0726, 0x0734, 0x0738, 0x073e, 0x0742, 0x0755, 0x0766, - 0x076e, 0x0776, 0x077d, 0x0796, 0x07a7, 0x07b2, 0x07ca, 0x07d4, + 0x0549, 0x0556, 0x055c, 0x056b, 0x0574, 0x0578, 0x057d, 0x058a, + 0x0597, 0x05a0, 0x05a7, 0x05ae, 0x05b6, 0x05bf, 0x05c6, 0x05cb, + 0x05d0, 0x05d6, 0x05e7, 0x05f1, 0x0600, 0x060a, 0x061b, 0x062e, + 0x0632, 0x0644, 0x064c, 0x0661, 0x0679, 0x0682, 0x068c, 0x0696, + 0x069b, 0x06a4, 0x06ab, 0x06b1, 0x06b6, 0x06be, 0x06c6, 0x06cd, + 0x06db, 0x06e0, 0x06ee, 0x06f5, 0x06fe, 0x070d, 0x0715, 0x071a, + 0x071f, 0x0723, 0x0731, 0x0735, 0x073b, 0x073f, 0x0752, 0x0763, + 0x076b, 0x0773, 0x077a, 0x0793, 0x07a4, 0x07af, 0x07c7, 0x07d1, // Entry C0 - FF - 0x07d9, 0x07e1, 0x07e6, 0x07f9, 0x0801, 0x0809, 0x080f, 0x0814, - 0x081a, 0x0829, 0x0839, 0x0843, 0x0848, 0x084e, 0x0857, 0x0864, - 0x086c, 0x0882, 0x088a, 0x0896, 0x08a0, 0x08a7, 0x08ae, 0x08b6, - 0x08c4, 0x08db, 0x08e6, 0x08f2, 0x08f7, 0x0900, 0x0910, 0x0929, - 0x092d, 0x0959, 0x095d, 0x0966, 0x0971, 0x0978, 0x0986, 0x0992, - 0x0999, 0x099e, 0x09a4, 0x09b7, 0x09bd, 0x09c3, 0x09cb, 0x09d2, - 0x09d8, 0x09f9, 0x0a09, 0x0a23, 0x0a2a, 0x0a34, 0x0a50, 0x0a6d, - 0x0a76, 0x0a90, 0x0aaa, 0x0ab1, 0x0ab8, 0x0ac9, 0x0ace, 0x0ad4, + 0x07d6, 0x07de, 0x07e3, 0x07f6, 0x07fe, 0x0806, 0x080c, 0x0811, + 0x0817, 0x0826, 0x0836, 0x0840, 0x0845, 0x084b, 0x0854, 0x0861, + 0x0869, 0x087f, 0x0887, 0x0893, 0x089d, 0x08a4, 0x08ab, 0x08b3, + 0x08c1, 0x08d6, 0x08e1, 0x08ed, 0x08f2, 0x08fb, 0x090b, 0x0924, + 0x0928, 0x0954, 0x0958, 0x0961, 0x096c, 0x0973, 0x0981, 0x098d, + 0x0994, 0x0999, 0x099f, 0x09b2, 0x09b8, 0x09be, 0x09c6, 0x09cd, + 0x09d3, 0x09f4, 0x0a04, 0x0a1e, 0x0a25, 0x0a2f, 0x0a4b, 0x0a68, + 0x0a71, 0x0a8b, 0x0aa5, 0x0aac, 0x0ab3, 0x0ac4, 0x0ac9, 0x0acf, // Entry 100 - 13F - 0x0ad9, 0x0ae0, 0x0aed, 0x0af3, 0x0afb, 0x0b0f, 0x0b13, 0x0b19, - 0x0b28, 0x0b36, 0x0b3d, 0x0b50, 0x0b61, 0x0b72, 0x0b88, 0x0b98, - 0x0bab, 0x0bb2, 0x0bc9, 0x0bd0, 0x0bdf, 0x0bf0, 0x0bff, 0x0c12, - 0x0c1d, 0x0c26, 0x0c39, 0x0c42, 0x0c46, 0x0c54, 0x0c65, 0x0c6b, - 0x0c7c, 0x0c92, 0x0ca5, 0x0cb4, -} // Size: 608 bytes - -const ruRegionStr string = "" + // Size: 5849 bytes + 0x0ad4, 0x0adb, 0x0ae8, 0x0aee, 0x0af6, 0x0b0a, 0x0b0e, 0x0b14, + 0x0b23, 0x0b31, 0x0b38, 0x0b4b, 0x0b5c, 0x0b6d, 0x0b83, 0x0b93, + 0x0ba6, 0x0bad, 0x0bc4, 0x0bcb, 0x0bda, 0x0beb, 0x0bfa, 0x0c0d, + 0x0c18, 0x0c21, 0x0c34, 0x0c3d, 0x0c41, 0x0c4f, 0x0c60, 0x0c66, + 0x0c77, 0x0c8d, 0x0ca0, 0x0ca0, 0x0caf, +} // Size: 610 bytes + +const ruRegionStr string = "" + // Size: 5863 bytes "о-в ВознесенияАндорраОАЭАфганистанАнтигуа и БарбудаАнгильяАлбанияАрмения" + "АнголаАнтарктидаАргентинаАмериканское СамоаАвстрияАвстралияАрубаАландск" + "ие о-ваАзербайджанБосния и ГерцеговинаБарбадосБангладешБельгияБуркина-Ф" + - "асоБолгарияБахрейнБурундиБенинСен-БартелемиБермудыБруней-ДаруссаламБоли" + - "вияБонэйр, Синт-Эстатиус и СабаБразилияБагамыБутано-в БувеБотсванаБелар" + - "усьБелизКанадаКокосовые о-ваКонго - КиншасаЦАРКонго - БраззавильШвейцар" + - "ияКот-д’ИвуарОстрова КукаЧилиКамерунКитайКолумбияо-в КлиппертонКоста-Ри" + - "каКубаКабо-ВердеКюрасаоо-в РождестваКипрЧехияГерманияДиего-ГарсияДжибут" + - "иДанияДоминикаДоминиканская РеспубликаАлжирСеута и МелильяЭквадорЭстони" + - "яЕгипетЗападная СахараЭритреяИспанияЭфиопияЕвропейский союзФинляндияФид" + - "жиФолклендские о-ваФедеративные Штаты МикронезииФарерские о-ваФранцияГа" + - "бонВеликобританияГренадаГрузияФранцузская ГвианаГернсиГанаГибралтарГрен" + - "ландияГамбияГвинеяГваделупаЭкваториальная ГвинеяГрецияЮжная Георгия и Ю" + - "жные Сандвичевы о-ваГватемалаГуамГвинея-БисауГайанаГонконг (специальный" + - " административный район)о-ва Херд и МакдональдГондурасХорватияГаитиВенгр" + - "ияКанарские о-ваИндонезияИрландияИзраильо-в МэнИндияБританская территор" + - "ия в Индийском океанеИракИранИсландияИталияДжерсиЯмайкаИорданияЯпонияКе" + - "нияКиргизияКамбоджаКирибатиКоморыСент-Китс и НевисКНДРРеспублика КореяК" + - "увейтКаймановы о-ваКазахстанЛаосЛиванСент-ЛюсияЛихтенштейнШри-ЛанкаЛибе" + - "рияЛесотоЛитваЛюксембургЛатвияЛивияМароккоМонакоМолдоваЧерногорияСен-Ма" + - "ртенМадагаскарМаршалловы ОстроваМакедонияМалиМьянма (Бирма)МонголияМака" + - "о (специальный административный район)Северные Марианские о-ваМартиника" + - "МавританияМонтсерратМальтаМаврикийМальдивыМалавиМексикаМалайзияМозамбик" + - "НамибияНовая КаледонияНигеро-в НорфолкНигерияНикарагуаНидерландыНорвеги" + - "яНепалНауруНиуэНовая ЗеландияОманПанамаПеруФранцузская ПолинезияПапуа –" + - " Новая ГвинеяФилиппиныПакистанПольшаСен-Пьер и Микелонострова ПиткэрнПуэ" + - "рто-РикоПалестинские территорииПортугалияПалауПарагвайКатарВнешняя Океа" + - "нияРеюньонРумынияСербияРоссияРуандаСаудовская АравияСоломоновы ОстроваС" + - "ейшельские ОстроваСуданШвецияСингапуро-в Св. ЕленыСловенияШпицберген и " + - "Ян-МайенСловакияСьерра-ЛеонеСан-МариноСенегалСомалиСуринамЮжный СуданСа" + - "н-Томе и ПринсипиСальвадорСинт-МартенСирияСвазилендТристан-да-Куньяо-ва" + - " Тёркс и КайкосЧадФранцузские Южные территорииТогоТаиландТаджикистанТоке" + - "лауВосточный ТиморТуркменистанТунисТонгаТурцияТринидад и ТобагоТувалуТа" + - "йваньТанзанияУкраинаУгандаВнешние малые о-ва (США)Организация Объединен" + - "ных НацийСоединенные ШтатыУругвайУзбекистанВатиканСент-Винсент и Гренад" + - "иныВенесуэлаВиргинские о-ва (Британские)Виргинские о-ва (США)ВьетнамВан" + - "уатуУоллис и ФутунаСамоаКосовоЙеменМайоттаЮАРЗамбияЗимбабвеНеизвестный " + - "регионМирАфрикаСеверная АмерикаЮжная АмерикаОкеанияЗападная АфрикаЦентр" + - "альная АмерикаВосточная АфрикаСеверная АфрикаЦентральная АфрикаЮжная Аф" + - "рикаАмерикаСеверная Америка – США и КанадаКарибыВосточная АзияЮжная Ази" + - "яЮго-Восточная АзияЮжная ЕвропаАвстралазияМеланезияМикронезияПолинезияА" + - "зияЦентральная АзияЗападная АзияЕвропаВосточная ЕвропаСеверная ЕвропаЗа" + - "падная ЕвропаЛатинская Америка" - -var ruRegionIdx = []uint16{ // 292 elements + "асоБолгарияБахрейнБурундиБенинСен-БартелемиБермудские о-ваБруней-Дарусс" + + "аламБоливияБонэйр, Синт-Эстатиус и СабаБразилияБагамыБутано-в БувеБотсв" + + "анаБеларусьБелизКанадаКокосовые о-ваКонго - КиншасаЦентрально-Африканск" + + "ая РеспубликаКонго - БраззавильШвейцарияКот-д’ИвуарОстрова КукаЧилиКаме" + + "рунКитайКолумбияо-в КлиппертонКоста-РикаКубаКабо-ВердеКюрасаоо-в Рождес" + + "тваКипрЧехияГерманияДиего-ГарсияДжибутиДанияДоминикаДоминиканская Респу" + + "бликаАлжирСеута и МелильяЭквадорЭстонияЕгипетЗападная СахараЭритреяИспа" + + "нияЭфиопияЕвропейский союзеврозонаФинляндияФиджиФолклендские о-ваФедера" + + "тивные Штаты МикронезииФарерские о-ваФранцияГабонВеликобританияГренадаГ" + + "рузияФранцузская ГвианаГернсиГанаГибралтарГренландияГамбияГвинеяГваделу" + + "паЭкваториальная ГвинеяГрецияЮжная Георгия и Южные Сандвичевы о-ваГвате" + + "малаГуамГвинея-БисауГайанаГонконг (САР)о-ва Херд и МакдональдГондурасХо" + + "рватияГаитиВенгрияКанарские о-ваИндонезияИрландияИзраильо-в МэнИндияБри" + + "танская территория в Индийском океанеИракИранИсландияИталияДжерсиЯмайка" + + "ИорданияЯпонияКенияКиргизияКамбоджаКирибатиКоморыСент-Китс и НевисКНДРР" + + "еспублика КореяКувейтКаймановы о-ваКазахстанЛаосЛиванСент-ЛюсияЛихтеншт" + + "ейнШри-ЛанкаЛиберияЛесотоЛитваЛюксембургЛатвияЛивияМароккоМонакоМолдова" + + "ЧерногорияСен-МартенМадагаскарМаршалловы ОстроваМакедонияМалиМьянма (Би" + + "рма)МонголияМакао (САР)Северные Марианские о-ваМартиникаМавританияМонтс" + + "ерратМальтаМаврикийМальдивыМалавиМексикаМалайзияМозамбикНамибияНовая Ка" + + "ледонияНигеро-в НорфолкНигерияНикарагуаНидерландыНорвегияНепалНауруНиуэ" + + "Новая ЗеландияОманПанамаПеруФранцузская ПолинезияПапуа — Новая ГвинеяФи" + + "липпиныПакистанПольшаСен-Пьер и Микелонострова ПиткэрнПуэрто-РикоПалест" + + "инские территорииПортугалияПалауПарагвайКатарВнешняя ОкеанияРеюньонРумы" + + "нияСербияРоссияРуандаСаудовская АравияСоломоновы ОстроваСейшельские Ост" + + "роваСуданШвецияСингапуро-в Св. ЕленыСловенияШпицберген и Ян-МайенСловак" + + "ияСьерра-ЛеонеСан-МариноСенегалСомалиСуринамЮжный СуданСан-Томе и Принс" + + "ипиСальвадорСинт-МартенСирияСвазилендТристан-да-Куньяо-ва Тёркс и Кайко" + + "сЧадФранцузские Южные территорииТогоТаиландТаджикистанТокелауВосточный " + + "ТиморТуркменистанТунисТонгаТурцияТринидад и ТобагоТувалуТайваньТанзания" + + "УкраинаУгандаВнешние малые о-ва (США)Организация Объединенных НацийСоед" + + "иненные ШтатыУругвайУзбекистанВатиканСент-Винсент и ГренадиныВенесуэлаВ" + + "иргинские о-ва (Британские)Виргинские о-ва (США)ВьетнамВануатуУоллис и " + + "ФутунаСамоаКосовоЙеменМайоттаЮжно-Африканская РеспубликаЗамбияЗимбабвен" + + "еизвестный регионвесь мирАфрикаСеверная АмерикаЮжная АмерикаОкеанияЗапа" + + "дная АфрикаЦентральная АмерикаВосточная АфрикаСеверная АфрикаЦентральна" + + "я АфрикаЮжная АфрикаАмерикаСевероамериканский регионКарибыВосточная Ази" + + "яЮжная АзияЮго-Восточная АзияЮжная ЕвропаАвстралазияМеланезияМикронезия" + + "ПолинезияАзияЦентральная АзияЗападная АзияЕвропаВосточная ЕвропаСеверна" + + "я ЕвропаЗападная ЕвропаЛатинская Америка" + +var ruRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x001a, 0x0028, 0x002e, 0x0042, 0x0062, 0x0070, 0x007e, 0x008c, 0x0098, 0x00ac, 0x00be, 0x00e1, 0x00ef, 0x0101, 0x010b, 0x0125, 0x013b, 0x0161, 0x0171, 0x0183, 0x0191, 0x01a8, 0x01b8, - 0x01c6, 0x01d4, 0x01de, 0x01f7, 0x0205, 0x0226, 0x0234, 0x0267, - 0x0277, 0x0283, 0x028d, 0x029b, 0x02ab, 0x02bb, 0x02c5, 0x02d1, - 0x02eb, 0x0306, 0x030c, 0x032d, 0x033f, 0x0355, 0x036c, 0x0374, - 0x0382, 0x038c, 0x039c, 0x03b6, 0x03c9, 0x03d1, 0x03e4, 0x03f2, - 0x040a, 0x0412, 0x041c, 0x042c, 0x0443, 0x0451, 0x045b, 0x046b, + 0x01c6, 0x01d4, 0x01de, 0x01f7, 0x0213, 0x0234, 0x0242, 0x0275, + 0x0285, 0x0291, 0x029b, 0x02a9, 0x02b9, 0x02c9, 0x02d3, 0x02df, + 0x02f9, 0x0314, 0x0354, 0x0375, 0x0387, 0x039d, 0x03b4, 0x03bc, + 0x03ca, 0x03d4, 0x03e4, 0x03fe, 0x0411, 0x0419, 0x042c, 0x043a, + 0x0452, 0x045a, 0x0464, 0x0474, 0x048b, 0x0499, 0x04a3, 0x04b3, // Entry 40 - 7F - 0x049a, 0x04a4, 0x04c0, 0x04ce, 0x04dc, 0x04e8, 0x0505, 0x0513, - 0x0521, 0x052f, 0x054e, 0x054e, 0x0560, 0x056a, 0x058a, 0x05c2, - 0x05dc, 0x05ea, 0x05f4, 0x0610, 0x061e, 0x062a, 0x064d, 0x0659, - 0x0661, 0x0673, 0x0687, 0x0693, 0x069f, 0x06b1, 0x06da, 0x06e6, - 0x072a, 0x073c, 0x0744, 0x075b, 0x0767, 0x07ba, 0x07e2, 0x07f2, - 0x0802, 0x080c, 0x081a, 0x0834, 0x0846, 0x0856, 0x0864, 0x0870, - 0x087a, 0x08c6, 0x08ce, 0x08d6, 0x08e6, 0x08f2, 0x08fe, 0x090a, - 0x091a, 0x0926, 0x0930, 0x0940, 0x0950, 0x0960, 0x096c, 0x098b, + 0x04e2, 0x04ec, 0x0508, 0x0516, 0x0524, 0x0530, 0x054d, 0x055b, + 0x0569, 0x0577, 0x0596, 0x05a6, 0x05b8, 0x05c2, 0x05e2, 0x061a, + 0x0634, 0x0642, 0x064c, 0x0668, 0x0676, 0x0682, 0x06a5, 0x06b1, + 0x06b9, 0x06cb, 0x06df, 0x06eb, 0x06f7, 0x0709, 0x0732, 0x073e, + 0x0782, 0x0794, 0x079c, 0x07b3, 0x07bf, 0x07d6, 0x07fe, 0x080e, + 0x081e, 0x0828, 0x0836, 0x0850, 0x0862, 0x0872, 0x0880, 0x088c, + 0x0896, 0x08e2, 0x08ea, 0x08f2, 0x0902, 0x090e, 0x091a, 0x0926, + 0x0936, 0x0942, 0x094c, 0x095c, 0x096c, 0x097c, 0x0988, 0x09a7, // Entry 80 - BF - 0x0993, 0x09b2, 0x09be, 0x09d8, 0x09ea, 0x09f2, 0x09fc, 0x0a0f, - 0x0a25, 0x0a36, 0x0a44, 0x0a50, 0x0a5a, 0x0a6e, 0x0a7a, 0x0a84, - 0x0a92, 0x0a9e, 0x0aac, 0x0ac0, 0x0ad3, 0x0ae7, 0x0b0a, 0x0b1c, - 0x0b24, 0x0b3d, 0x0b4d, 0x0b9c, 0x0bc9, 0x0bdb, 0x0bef, 0x0c03, - 0x0c0f, 0x0c1f, 0x0c2f, 0x0c3b, 0x0c49, 0x0c59, 0x0c69, 0x0c77, - 0x0c94, 0x0c9e, 0x0cb2, 0x0cc0, 0x0cd2, 0x0ce6, 0x0cf6, 0x0d00, - 0x0d0a, 0x0d12, 0x0d2d, 0x0d35, 0x0d41, 0x0d49, 0x0d72, 0x0d98, - 0x0daa, 0x0dba, 0x0dc6, 0x0de7, 0x0e04, 0x0e19, 0x0e46, 0x0e5a, + 0x09af, 0x09ce, 0x09da, 0x09f4, 0x0a06, 0x0a0e, 0x0a18, 0x0a2b, + 0x0a41, 0x0a52, 0x0a60, 0x0a6c, 0x0a76, 0x0a8a, 0x0a96, 0x0aa0, + 0x0aae, 0x0aba, 0x0ac8, 0x0adc, 0x0aef, 0x0b03, 0x0b26, 0x0b38, + 0x0b40, 0x0b59, 0x0b69, 0x0b7c, 0x0ba9, 0x0bbb, 0x0bcf, 0x0be3, + 0x0bef, 0x0bff, 0x0c0f, 0x0c1b, 0x0c29, 0x0c39, 0x0c49, 0x0c57, + 0x0c74, 0x0c7e, 0x0c92, 0x0ca0, 0x0cb2, 0x0cc6, 0x0cd6, 0x0ce0, + 0x0cea, 0x0cf2, 0x0d0d, 0x0d15, 0x0d21, 0x0d29, 0x0d52, 0x0d78, + 0x0d8a, 0x0d9a, 0x0da6, 0x0dc7, 0x0de4, 0x0df9, 0x0e26, 0x0e3a, // Entry C0 - FF - 0x0e64, 0x0e74, 0x0e7e, 0x0e9b, 0x0ea9, 0x0eb7, 0x0ec3, 0x0ecf, - 0x0edb, 0x0efc, 0x0f1f, 0x0f44, 0x0f4e, 0x0f5a, 0x0f6a, 0x0f80, - 0x0f90, 0x0fb7, 0x0fc7, 0x0fde, 0x0ff1, 0x0fff, 0x100b, 0x1019, - 0x102e, 0x1051, 0x1063, 0x1078, 0x1082, 0x1094, 0x10b2, 0x10d4, - 0x10da, 0x1110, 0x1118, 0x1126, 0x113c, 0x114a, 0x1167, 0x117f, - 0x1189, 0x1193, 0x119f, 0x11bf, 0x11cb, 0x11d9, 0x11e9, 0x11f7, - 0x1203, 0x122d, 0x1267, 0x1288, 0x1296, 0x12aa, 0x12b8, 0x12e5, - 0x12f7, 0x132a, 0x134f, 0x135d, 0x136b, 0x1387, 0x1391, 0x139d, + 0x0e44, 0x0e54, 0x0e5e, 0x0e7b, 0x0e89, 0x0e97, 0x0ea3, 0x0eaf, + 0x0ebb, 0x0edc, 0x0eff, 0x0f24, 0x0f2e, 0x0f3a, 0x0f4a, 0x0f60, + 0x0f70, 0x0f97, 0x0fa7, 0x0fbe, 0x0fd1, 0x0fdf, 0x0feb, 0x0ff9, + 0x100e, 0x1031, 0x1043, 0x1058, 0x1062, 0x1074, 0x1092, 0x10b4, + 0x10ba, 0x10f0, 0x10f8, 0x1106, 0x111c, 0x112a, 0x1147, 0x115f, + 0x1169, 0x1173, 0x117f, 0x119f, 0x11ab, 0x11b9, 0x11c9, 0x11d7, + 0x11e3, 0x120d, 0x1247, 0x1268, 0x1276, 0x128a, 0x1298, 0x12c5, + 0x12d7, 0x130a, 0x132f, 0x133d, 0x134b, 0x1367, 0x1371, 0x137d, // Entry 100 - 13F - 0x13a7, 0x13b5, 0x13bb, 0x13c7, 0x13d7, 0x13fa, 0x1400, 0x140c, - 0x142b, 0x1444, 0x1452, 0x146f, 0x1494, 0x14b3, 0x14d0, 0x14f3, - 0x150a, 0x1518, 0x1552, 0x155e, 0x1579, 0x158c, 0x15ae, 0x15c5, - 0x15db, 0x15ed, 0x1601, 0x1613, 0x161b, 0x163a, 0x1653, 0x165f, - 0x167e, 0x169b, 0x16b8, 0x16d9, -} // Size: 608 bytes - -const siRegionStr string = "" + // Size: 9335 bytes + 0x1387, 0x1395, 0x13c9, 0x13d5, 0x13e5, 0x1408, 0x1417, 0x1423, + 0x1442, 0x145b, 0x1469, 0x1486, 0x14ab, 0x14ca, 0x14e7, 0x150a, + 0x1521, 0x152f, 0x1560, 0x156c, 0x1587, 0x159a, 0x15bc, 0x15d3, + 0x15e9, 0x15fb, 0x160f, 0x1621, 0x1629, 0x1648, 0x1661, 0x166d, + 0x168c, 0x16a9, 0x16c6, 0x16c6, 0x16e7, +} // Size: 610 bytes + +const siRegionStr string = "" + // Size: 9354 bytes "ඇසෙන්ෂන් දිවයිනඇන්ඩෝරාවඑක්සත් අරාබි එමිර් රාජ්\u200dයයඇෆ්ගනිස්ථානයඇන්ටිග" + "ුවා සහ බාබියුඩාවඇන්ගුයිලාවඇල්බේනියාවආර්මේනියාවඇන්ගෝලාවඇන්ටාක්ටිකාවආර්ජ" + - "ෙන්ටිනාවඇමරිකානු සැමෝවාවඔස්ට්\u200dරියාවඕස්ට්\u200dරේලියාවඅරුබාවඕලන්ඩ්" + - " දූපත්අසර්බයිජානයබොස්නියාව සහ හර්සගොවීනාවබාර්බඩෝස්බංග්ලාදේශයබෙල්ජියමබර්ක" + - "ිනා ෆාසෝබල්ගේරියාවබහරේන්බුරුන්දිබෙනින්ශාන්ත බර්තලෙමිබර්මියුඩාබෲනායිබොල" + - "ීවියාවකැරිබියානු නෙදර්ලන්තයබ්\u200dරසීලයබහමාස්භූතානයබුවට් දුපත්බොට්ස්ව" + - "ානාබෙලරුස්බෙලීස්කැනඩාවකොකෝස් දූපත්කොංගො - කින්ශාසාමධ්\u200dයම අප්" + - "\u200dරිකානු ජනරජයකොංගො - බ්\u200dරසාවිල්ස්විස්ටර්ලන්තයකෝට් දි අයිවරිකුක" + - "් දූපත්චිලීකැමරූන්චීනයකොළොම්බියාවක්ලීපර්ටන් දූපතකොස්ටරිකාවකියුබාවකේප් " + - "වර්ඩ්කුරකාවෝක්\u200dරිස්මස් දූපතසයිප්\u200dරසයචෙක් ජනරජයජර්මනියදියාගෝ " + - "ගාර්සියාජිබුටිඩෙන්මාර්කයඩොමිනිකාවඩොමිනිකා ජනරජයඇල්ජීරියාවසෙයුටා සහ මෙල" + - "ිල්ලාඉක්වදෝරයඑස්තෝනියාවඊජිප්තුවබටහිර සහරාවඑරිත්\u200dරියාවස්පාඤ්ඤයඉතිය" + - "ෝපියාවයුරෝපා සංගමයෆින්ලන්තයෆීජීෆෝක්ලන්ත දූපත්මයික්\u200dරොනීසියාවෆැරෝ " + - "දූපත්ප්\u200dරංශයගැබොන්එක්සත් රාජධානියග්\u200dරැනඩාවජෝර්ජියාවප්\u200dර" + - "ංශ ගයනාවගර්න්සියඝානාවජිබ්\u200dරෝල්ටාවග්\u200dරීන්ලන්තයගැම්බියාවගිණියා" + - "වග්වෝඩලෝප්සමක ගිනියාවග්\u200dරීසියදකුණු ජෝර්ජියාව සහ දකුණු සැන්ඩ්විච් " + - "දූපත්ගෝතමාලාවගුවාම්ගිනි බිසව්ගයනාවහොංකොං චීන විශේෂ පරිපාලන කලාපයහර්ඩ් " + - "දූපත සහ මැක්ඩොනල්ඩ් දූපත්හොන්ඩුරාස්ක්\u200dරොඒෂියාවහයිටිහන්ගේරියාවකැනර" + - "ි සූපත්ඉන්දුනීසියාවඅයර්ලන්තයඊශ්\u200dරායලයඅයිල් ඔෆ් මෑන්ඉන්දියාවබ්" + - "\u200dරිතාන්\u200dය ඉන්දීය සාගර බල ප්\u200dරදේශයඉරාකයඉරානයඅයිස්ලන්තයඉතාල" + - "ියජර්සිජැමෙයිකාවජෝර්දානයජපානයකෙන්යාවකිර්ගිස්තානයකාම්බෝජයකිරිබතිකොමොරෝස" + - "්ශාන්ත කිට්ස් සහ නේවිස්උතුරු කොරියාවදකුණු කොරියාවකුවේටයකේමන් දූපත්කසකස" + - "්තානයලාඕසයලෙබනනයශාන්ත ලුසියාලික්ටන්ස්ටයින්ශ්\u200dරී ලංකාවලයිබීරියාවලෙ" + - "සතෝලිතුවේනියාවලක්ශම්බර්ග්ලැට්වියාවලිබියාවමොරොක්කෝවමොනාකෝවමොල්ඩෝවාවමොන්" + - "ටෙනීග්\u200dරෝශාන්ත මාර්ටින්මැඩගස්කරයමාෂල් දූපත්මැසිඩෝනියාවමාලිමියන්මා" + - "රය (බුරුමය)මොන්ගෝලියාවමකාවු චීන විශේෂ පරිපාලන කලාපයඋතුරු මරියානා දූපත්" + - "මර්ටිනික්මොරිටේනියාවමොන්සෙරාට්මෝල්ටාවමුරුසියමාල දිවයිනමලාවිමෙක්සිකෝවමැ" + - "ලේසියාවමොසැම්බික්නැමීබියාවනව කැලිඩෝනියාවනයිජර්නෝෆෝක් දූපතනයිජීරියාවනික" + - "රගුවාවනෙදර්ලන්තයනෝර්වේනේපාලයනාවුරුනියූනවසීලන්තයඕමානයපැනමාවපේරුප්\u200d" + - "රංශ පොලිනීසියාවපැපුවා නිව් ගිනියාවපිලිපීනයපාකිස්තානයපෝලන්තයශාන්ත පියරේ" + - " සහ මැකෝලන්පිට්කෙය්න් දූපත්පුවර්ටෝ රිකෝපලස්තීන රාජ්\u200dයයපෘතුගාලයපලාවු" + - "පැරගුවේකටාර්ඈත ඕෂනියාවරීයුනියන්රුමේනියාවසර්බියාවරුසියාවරුවන්ඩාවසෞදි අර" + - "ාබියසොලමන් දූපත්සීශෙල්ස්සූඩානයස්වීඩනයසිංගප්පූරුවශාන්ත හෙලේනාස්ලෝවේනියා" + - "වස්වෙල්බර්ඩ් සහ ජේන් මයේන්ස්ලෝවැකියාවසියරාලියෝන්සැන් මැරිනෝසෙනගාලයසෝමා" + - "ලියාවසුරිනාමයදකුණු සුඩානයසාඕ තෝම් සහ ප්\u200dරින්සිප්එල් සැල්වදෝරයශාන්" + - "ත මාර්ටෙන්සිරියාවස්වාසිලන්තයට්\u200dරිස්ටන් ද කුන්හාටර්ක්ස් සහ කයිකොස්" + - " දූපත්චැච්දකුණු ප්\u200dරංශ දූපත් සමූහයටොගෝතායිලන්තයටජිකිස්තානයටොකලාවුටි" + - "මෝර් - ලෙස්ත්ටර්ක්මෙනිස්ථානයටියුනීසියාවටොංගාතුර්කියට්\u200dරිනිඩෑඩ් සහ" + - " ටොබැගෝටුවාලූතායිවානයටැන්සානියාවයුක්රේනයඋගන්ඩාවඑක්සත් ජනපද ඈත දූපත්එක්සත" + - "් ජාතීන්එක්සත් ජනපදයඋරුගුවේඋස්බෙකිස්ථානයවතිකානු නගරයශාන්ත වින්සන්ට් සහ" + - " ග්\u200dරෙනඩින්ස්වෙනිසියුලාවබ්\u200dරිතාන්\u200dය වර්ජින් දූපත්ඇමරිකානු" + - " වර්ජින් දූපත්වියට්නාමයවනුවාටුවැලිස් සහ ෆුටුනාසැමෝවාකොසෝවෝයේමනයමයෝට්දකුණ" + - "ු අප්\u200dරිකාවසැම්බියාවසිම්බාබ්වේහඳුනා නොගත් කළාපයලෝකයඅප්\u200dරිකාව" + - "උතුරු ඇමෙරිකාවදකුණු ඇමෙරිකාවඕෂනියාවබටහිරදිග අප්\u200dරිකාවමධ්\u200dයම " + - "ඇමෙරිකාවපෙරදිග අප්\u200dරිකාවඋතුරුදිග අප්\u200dරිකාවමධ්\u200dයම අප්" + - "\u200dරිකාවදකුණුදිග අප්\u200dරිකාවඇමරිකාවඋතුරුදිග ඇමෙරිකාවකැරීබියන්නැගෙන" + - "හිර ආසියාවදකුණු ආසියාවඅග්නිදිග ආසියාවදකුණුදිග යුරෝපයඕස්ට්\u200dරලේෂියා" + - "වමෙලනීසියාවමයික්\u200dරෝනීසියානු කළාපයපොලිනීසියාවආසියාවමධ්\u200dයම ආසි" + - "යාවබටහිර ආසියාවයුරෝපයනැගෙනහිර යුරෝපයඋතුරු යුරෝපයබටහිර යුරෝපයලතින් ඇමෙර" + - "ිකාව" - -var siRegionIdx = []uint16{ // 292 elements + "ෙන්ටිනාවඇමරිකානු සැමෝවාවඔස්ට්\u200dරියාවඕස්ට්\u200dරේලියාවඅරූබාඕලන්ඩ් " + + "දූපත්අසර්බයිජානයබොස්නියාව සහ හර්සගොවීනාවබාබඩෝස්බංග්ලාදේශයබෙල්ජියමබර්කි" + + "නා ෆාසෝබල්ගේරියාවබහරේන්බුරුන්දිබෙනින්ශාන්ත බර්තලෙමිබර්මියුඩාබෲනායිබොලී" + + "වියාවකැරිබියානු නෙදර්ලන්තයබ්\u200dරසීලයබහමාස්භූතානයබුවට් දුපත්බොට්ස්වා" + + "නාබෙලරුස්බෙලීස්කැනඩාවකොකෝස් දූපත්කොංගො - කින්ශාසාමධ්\u200dයම අප්\u200d" + + "රිකානු ජනරජයකොංගො - බ්\u200dරසාවිල්ස්විස්ටර්ලන්තයකෝට් දි අයිවරිකුක් දූ" + + "පත්චිලීකැමරූන්චීනයකොළොම්බියාවක්ලීපර්ටන් දූපතකොස්ටරිකාවකියුබාවකේප් වර්ඩ" + + "්කුරකාවෝක්\u200dරිස්මස් දූපතසයිප්\u200dරසයචෙක් ජනරජයජර්මනියදියාගෝ ගාර්" + + "සියාජිබුටිඩෙන්මාර්කයඩොමිනිකාවඩොමිනිකා ජනරජයඇල්ජීරියාවසෙයුටා සහ මෙලිල්ල" + + "ාඉක්වදෝරයඑස්තෝනියාවඊජිප්තුවබටහිර සහරාවඑරිත්\u200dරියාවස්පාඤ්ඤයඉතියෝපිය" + + "ාවයුරෝපා සංගමයයුරෝ කලාපයෆින්ලන්තයෆීජීෆෝක්ලන්ත දූපත්මයික්\u200dරොනීසියා" + + "වෆැරෝ දූපත්ප්\u200dරංශයගැබොන්එක්සත් රාජධානියග්\u200dරැනඩාවජෝර්ජියාවප්" + + "\u200dරංශ ගයනාවගර්න්සියඝානාවජිබ්\u200dරෝල්ටාවග්\u200dරීන්ලන්තයගැම්බියාවග" + + "ිණියාවග්වෝඩලෝප්සමක ගිනියාවග්\u200dරීසියදකුණු ජෝර්ජියාව සහ දකුණු සැන්ඩ්" + + "විච් දූපත්ගෝතමාලාවගුවාම්ගිනි බිසව්ගයනාවහොංකොං චීන විශේෂ පරිපාලන කලාපයහ" + + "ර්ඩ් දූපත සහ මැක්ඩොනල්ඩ් දූපත්හොන්ඩුරාස්ක්\u200dරොඒෂියාවහයිටිහන්ගේරියා" + + "වකැනරි සූපත්ඉන්දුනීසියාවඅයර්ලන්තයඊශ්\u200dරායලයඅයිල් ඔෆ් මෑන්ඉන්දියාවබ" + + "්\u200dරිතාන්\u200dය ඉන්දීය සාගර බල ප්\u200dරදේශයඉරාකයඉරානයඅයිස්ලන්තයඉ" + + "තාලියජර්සිජැමෙයිකාවජෝර්දානයජපානයකෙන්යාවකිර්ගිස්තානයකාම්බෝජයකිරිබතිකොමො" + + "රෝස්ශාන්ත කිට්ස් සහ නේවිස්උතුරු කොරියාවදකුණු කොරියාවකුවේටයකේමන් දූපත්ක" + + "සකස්තානයලාඕසයලෙබනනයශාන්ත ලුසියාලික්ටන්ස්ටයින්ශ්\u200dරී ලංකාවලයිබීරියා" + + "වලෙසතෝලිතුවේනියාවලක්ශම්බර්ග්ලැට්වියාවලිබියාවමොරොක්කෝවමොනාකෝවමොල්ඩෝවාවම" + + "ොන්ටෙනීග්\u200dරෝශාන්ත මාර්ටින්මැඩගස්කරයමාෂල් දූපත්මැසිඩෝනියාවමාලිමියන" + + "්මාරය (බුරුමය)මොන්ගෝලියාවමකාවු චීන විශේෂ පරිපාලන කලාපයඋතුරු මරියානා දූ" + + "පත්මර්ටිනික්මොරිටේනියාවමොන්සෙරාට්මෝල්ටාවමුරුසියමාල දිවයිනමලාවිමෙක්සිකෝ" + + "වමැලේසියාවමොසැම්බික්නැමීබියාවනව කැලිඩෝනියාවනයිජර්නෝෆෝක් දූපතනයිජීරියාව" + + "නිකරගුවාවනෙදර්ලන්තයනෝර්වේනේපාලයනාවුරුනියූනවසීලන්තයඕමානයපැනමාවපේරුප්" + + "\u200dරංශ පොලිනීසියාවපැපුවා නිව් ගිනියාවපිලිපීනයපාකිස්තානයපෝලන්තයශාන්ත ප" + + "ියරේ සහ මැකෝලන්පිට්කෙය්න් දූපත්පුවර්ටෝ රිකෝපලස්තීන රාජ්\u200dයයපෘතුගාල" + + "යපලාවුපැරගුවේකටාර්ඈත ඕෂනියාවරීයුනියන්රුමේනියාවසර්බියාවරුසියාවරුවන්ඩාවස" + + "ෞදි අරාබියසොලමන් දූපත්සීශෙල්ස්සූඩානයස්වීඩනයසිංගප්පූරුවශාන්ත හෙලේනාස්ලෝ" + + "වේනියාවස්වෙල්බර්ඩ් සහ ජේන් මයේන්ස්ලෝවැකියාවසියරාලියෝන්සැන් මැරිනෝසෙනගා" + + "ලයසෝමාලියාවසුරිනාමයදකුණු සුඩානයසාඕ තෝම් සහ ප්\u200dරින්සිප්එල් සැල්වදෝ" + + "රයශාන්ත මාර්ටෙන්සිරියාවස්වාසිලන්තයට්\u200dරිස්ටන් ද කුන්හාටර්ක්ස් සහ ක" + + "යිකොස් දූපත්චැච්දකුණු ප්\u200dරංශ දූපත් සමූහයටොගෝතායිලන්තයටජිකිස්තානයට" + + "ොකලාවුටිමෝර් - ලෙස්ත්ටර්ක්මෙනිස්ථානයටියුනීසියාවටොංගාතුර්කියට්\u200dරින" + + "ිඩෑඩ් සහ ටොබැගෝටුවාලූතායිවානයටැන්සානියාවයුක්රේනයඋගන්ඩාවඑක්සත් ජනපද ඈත " + + "දූපත්එක්සත් ජාතීන්එක්සත් ජනපදයඋරුගුවේඋස්බෙකිස්ථානයවතිකානු නගරයශාන්ත වි" + + "න්සන්ට් සහ ග්\u200dරෙනඩින්ස්වෙනිසියුලාවබ්\u200dරිතාන්\u200dය වර්ජින් ද" + + "ූපත්ඇමරිකානු වර්ජින් දූපත්වියට්නාමයවනුවාටුවැලිස් සහ ෆුටුනාසැමෝවාකොසෝවෝ" + + "යේමනයමයෝට්දකුණු අප්\u200dරිකාවසැම්බියාවසිම්බාබ්වේහඳුනා නොගත් කළාපයලෝකය" + + "අප්\u200dරිකාවඋතුරු ඇමෙරිකාවදකුණු ඇමෙරිකාවඕෂනියාවබටහිරදිග අප්\u200dරික" + + "ාවමධ්\u200dයම ඇමෙරිකාවපෙරදිග අප්\u200dරිකාවඋතුරුදිග අප්\u200dරිකාවමධ්" + + "\u200dයම අප්\u200dරිකාවදකුණුදිග අප්\u200dරිකාවඇමරිකාවඋතුරුදිග ඇමෙරිකාවකැ" + + "රීබියන්නැගෙනහිර ආසියාවදකුණු ආසියාවඅග්නිදිග ආසියාවදකුණුදිග යුරෝපයඕස්ට්" + + "\u200dරලේෂියාවමෙලනීසියාවමයික්\u200dරෝනීසියානු කළාපයපොලිනීසියාවආසියාවමධ්" + + "\u200dයම ආසියාවබටහිර ආසියාවයුරෝපයනැගෙනහිර යුරෝපයඋතුරු යුරෝපයබටහිර යුරෝපය" + + "ලතින් ඇමෙරිකාව" + +var siRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x002b, 0x0043, 0x008b, 0x00af, 0x00ed, 0x010b, 0x0129, - 0x0147, 0x015f, 0x0183, 0x01a7, 0x01d5, 0x01f6, 0x021d, 0x022f, - 0x0251, 0x0272, 0x02b6, 0x02d1, 0x02ef, 0x0307, 0x0329, 0x0347, - 0x0359, 0x0371, 0x0383, 0x03ab, 0x03c6, 0x03d8, 0x03f3, 0x0430, - 0x0448, 0x045a, 0x046c, 0x048b, 0x04a9, 0x04be, 0x04d0, 0x04e2, - 0x0504, 0x052e, 0x056f, 0x059f, 0x05c9, 0x05ef, 0x060b, 0x0617, - 0x062c, 0x0638, 0x0659, 0x0684, 0x06a2, 0x06b7, 0x06d3, 0x06e8, - 0x0713, 0x072e, 0x074a, 0x075f, 0x078a, 0x079c, 0x07ba, 0x07d5, + 0x0147, 0x015f, 0x0183, 0x01a7, 0x01d5, 0x01f6, 0x021d, 0x022c, + 0x024e, 0x026f, 0x02b3, 0x02c8, 0x02e6, 0x02fe, 0x0320, 0x033e, + 0x0350, 0x0368, 0x037a, 0x03a2, 0x03bd, 0x03cf, 0x03ea, 0x0427, + 0x043f, 0x0451, 0x0463, 0x0482, 0x04a0, 0x04b5, 0x04c7, 0x04d9, + 0x04fb, 0x0525, 0x0566, 0x0596, 0x05c0, 0x05e6, 0x0602, 0x060e, + 0x0623, 0x062f, 0x0650, 0x067b, 0x0699, 0x06ae, 0x06ca, 0x06df, + 0x070a, 0x0725, 0x0741, 0x0756, 0x0781, 0x0793, 0x07b1, 0x07cc, // Entry 40 - 7F - 0x07fd, 0x081b, 0x084d, 0x0865, 0x0883, 0x089b, 0x08ba, 0x08db, - 0x08f3, 0x0911, 0x0933, 0x0933, 0x094e, 0x095a, 0x0982, 0x09af, - 0x09cb, 0x09e0, 0x09f2, 0x0a1d, 0x0a38, 0x0a53, 0x0a75, 0x0a8d, - 0x0a9c, 0x0ac0, 0x0ae4, 0x0aff, 0x0b14, 0x0b2f, 0x0b4e, 0x0b66, - 0x0bd7, 0x0bef, 0x0c01, 0x0c1d, 0x0c2c, 0x0c7e, 0x0cd3, 0x0cf1, - 0x0d12, 0x0d21, 0x0d3f, 0x0d5e, 0x0d82, 0x0d9d, 0x0db8, 0x0dde, - 0x0df6, 0x0e57, 0x0e66, 0x0e75, 0x0e93, 0x0ea5, 0x0eb4, 0x0ecf, - 0x0ee7, 0x0ef6, 0x0f0b, 0x0f2f, 0x0f47, 0x0f5c, 0x0f74, 0x0fb0, + 0x07f4, 0x0812, 0x0844, 0x085c, 0x087a, 0x0892, 0x08b1, 0x08d2, + 0x08ea, 0x0908, 0x092a, 0x0946, 0x0961, 0x096d, 0x0995, 0x09c2, + 0x09de, 0x09f3, 0x0a05, 0x0a30, 0x0a4b, 0x0a66, 0x0a88, 0x0aa0, + 0x0aaf, 0x0ad3, 0x0af7, 0x0b12, 0x0b27, 0x0b42, 0x0b61, 0x0b79, + 0x0bea, 0x0c02, 0x0c14, 0x0c30, 0x0c3f, 0x0c91, 0x0ce6, 0x0d04, + 0x0d25, 0x0d34, 0x0d52, 0x0d71, 0x0d95, 0x0db0, 0x0dcb, 0x0df1, + 0x0e09, 0x0e6a, 0x0e79, 0x0e88, 0x0ea6, 0x0eb8, 0x0ec7, 0x0ee2, + 0x0efa, 0x0f09, 0x0f1e, 0x0f42, 0x0f5a, 0x0f6f, 0x0f87, 0x0fc3, // Entry 80 - BF - 0x0fd5, 0x0ffa, 0x100c, 0x102b, 0x1046, 0x1055, 0x1067, 0x1089, - 0x10b3, 0x10d2, 0x10f0, 0x10ff, 0x1120, 0x1141, 0x115c, 0x1171, - 0x118c, 0x11a1, 0x11bc, 0x11e3, 0x120b, 0x1226, 0x1245, 0x1266, - 0x1272, 0x12a2, 0x12c3, 0x1312, 0x1347, 0x1362, 0x1383, 0x13a1, - 0x13b6, 0x13cb, 0x13e7, 0x13f6, 0x1411, 0x142c, 0x144a, 0x1465, - 0x148d, 0x149f, 0x14be, 0x14dc, 0x14f7, 0x1515, 0x1527, 0x1539, - 0x154b, 0x1557, 0x1572, 0x1581, 0x1593, 0x159f, 0x15d3, 0x1608, - 0x1620, 0x163e, 0x1653, 0x168f, 0x16bd, 0x16df, 0x170a, 0x1722, + 0x0fe8, 0x100d, 0x101f, 0x103e, 0x1059, 0x1068, 0x107a, 0x109c, + 0x10c6, 0x10e5, 0x1103, 0x1112, 0x1133, 0x1154, 0x116f, 0x1184, + 0x119f, 0x11b4, 0x11cf, 0x11f6, 0x121e, 0x1239, 0x1258, 0x1279, + 0x1285, 0x12b5, 0x12d6, 0x1325, 0x135a, 0x1375, 0x1396, 0x13b4, + 0x13c9, 0x13de, 0x13fa, 0x1409, 0x1424, 0x143f, 0x145d, 0x1478, + 0x14a0, 0x14b2, 0x14d1, 0x14ef, 0x150a, 0x1528, 0x153a, 0x154c, + 0x155e, 0x156a, 0x1585, 0x1594, 0x15a6, 0x15b2, 0x15e6, 0x161b, + 0x1633, 0x1651, 0x1666, 0x16a2, 0x16d0, 0x16f2, 0x171d, 0x1735, // Entry C0 - FF - 0x1731, 0x1746, 0x1755, 0x1771, 0x178c, 0x17a7, 0x17bf, 0x17d4, - 0x17ec, 0x180b, 0x182d, 0x1845, 0x1857, 0x186c, 0x188d, 0x18af, - 0x18d0, 0x1915, 0x1936, 0x1957, 0x1976, 0x198b, 0x19a6, 0x19be, - 0x19e0, 0x1a1f, 0x1a44, 0x1a6c, 0x1a81, 0x1aa2, 0x1ad7, 0x1b19, - 0x1b25, 0x1b67, 0x1b73, 0x1b8e, 0x1baf, 0x1bc4, 0x1beb, 0x1c18, - 0x1c39, 0x1c48, 0x1c5d, 0x1c98, 0x1caa, 0x1cc2, 0x1ce3, 0x1cfb, - 0x1d10, 0x1d46, 0x1d6b, 0x1d8d, 0x1da2, 0x1dc9, 0x1deb, 0x1e42, - 0x1e63, 0x1eaa, 0x1ee8, 0x1f03, 0x1f18, 0x1f44, 0x1f56, 0x1f68, + 0x1744, 0x1759, 0x1768, 0x1784, 0x179f, 0x17ba, 0x17d2, 0x17e7, + 0x17ff, 0x181e, 0x1840, 0x1858, 0x186a, 0x187f, 0x18a0, 0x18c2, + 0x18e3, 0x1928, 0x1949, 0x196a, 0x1989, 0x199e, 0x19b9, 0x19d1, + 0x19f3, 0x1a32, 0x1a57, 0x1a7f, 0x1a94, 0x1ab5, 0x1aea, 0x1b2c, + 0x1b38, 0x1b7a, 0x1b86, 0x1ba1, 0x1bc2, 0x1bd7, 0x1bfe, 0x1c2b, + 0x1c4c, 0x1c5b, 0x1c70, 0x1cab, 0x1cbd, 0x1cd5, 0x1cf6, 0x1d0e, + 0x1d23, 0x1d59, 0x1d7e, 0x1da0, 0x1db5, 0x1ddc, 0x1dfe, 0x1e55, + 0x1e76, 0x1ebd, 0x1efb, 0x1f16, 0x1f2b, 0x1f57, 0x1f69, 0x1f7b, // Entry 100 - 13F - 0x1f77, 0x1f86, 0x1fb1, 0x1fcc, 0x1fea, 0x2019, 0x2025, 0x2040, - 0x2068, 0x2090, 0x20a5, 0x20d9, 0x2104, 0x2132, 0x2166, 0x2194, - 0x21c8, 0x21dd, 0x220e, 0x2229, 0x2254, 0x2276, 0x22a1, 0x22cc, - 0x22f6, 0x2314, 0x2354, 0x2375, 0x2387, 0x23ac, 0x23ce, 0x23e0, - 0x240b, 0x242d, 0x244f, 0x2477, -} // Size: 608 bytes - -const skRegionStr string = "" + // Size: 3227 bytes + 0x1f8a, 0x1f99, 0x1fc4, 0x1fdf, 0x1ffd, 0x202c, 0x2038, 0x2053, + 0x207b, 0x20a3, 0x20b8, 0x20ec, 0x2117, 0x2145, 0x2179, 0x21a7, + 0x21db, 0x21f0, 0x2221, 0x223c, 0x2267, 0x2289, 0x22b4, 0x22df, + 0x2309, 0x2327, 0x2367, 0x2388, 0x239a, 0x23bf, 0x23e1, 0x23f3, + 0x241e, 0x2440, 0x2462, 0x2462, 0x248a, +} // Size: 610 bytes + +const skRegionStr string = "" + // Size: 3252 bytes "AscensionAndorraSpojené arabské emirátyAfganistanAntigua a BarbudaAnguil" + "laAlbánskoArménskoAngolaAntarktídaArgentínaAmerická SamoaRakúskoAustráli" + "aArubaAlandyAzerbajdžanBosna a HercegovinaBarbadosBangladéšBelgickoBurki" + @@ -48201,42 +50962,42 @@ const skRegionStr string = "" + // Size: 3227 bytes "lizeKanadaKokosové ostrovyKonžská demokratická republikaStredoafrická re" + "publikaKonžská republikaŠvajčiarskoPobrežie SlonovinyCookove ostrovyČile" + "KamerunČínaKolumbiaClippertonKostarikaKubaKapverdyCuraçaoVianočný ostrov" + - "CyprusČeská republikaNemeckoDiego GarciaDžibutskoDánskoDominikaDominikán" + - "ska republikaAlžírskoCeuta a MelillaEkvádorEstónskoEgyptZápadná SaharaEr" + - "itreaŠpanielskoEtiópiaEurópska úniaFínskoFidžiFalklandyMikronéziaFaerské" + - " ostrovyFrancúzskoGabonSpojené kráľovstvoGrenadaGruzínskoFrancúzska Guay" + - "anaGuernseyGhanaGibraltárGrónskoGambiaGuineaGuadeloupeRovníková GuineaGr" + - "éckoJužná Georgia a Južné Sandwichove ostrovyGuatemalaGuamGuinea-Bissau" + - "GuayanaHongkong – OAO ČínyHeardov ostrov a Macdonaldove ostrovyHondurasC" + - "horvátskoHaitiMaďarskoKanárske ostrovyIndonéziaÍrskoIzraelOstrov ManIndi" + - "aBritské indickooceánske územieIrakIránIslandTalianskoJerseyJamajkaJordá" + - "nskoJaponskoKeňaKirgizskoKambodžaKiribatiKomorySvätý Krištof a NevisSeve" + - "rná KóreaJužná KóreaKuvajtKajmanie ostrovyKazachstanLaosLibanonSvätá Luc" + - "iaLichtenštajnskoSrí LankaLibériaLesothoLitvaLuxemburskoLotyšskoLíbyaMar" + - "okoMonakoMoldavskoČierna HoraSvätý Martin (fr.)MadagaskarMarshallove ost" + - "rovyMacedónskoMaliMjanmarskoMongolskoMacao – OAO ČínySeverné MariányMart" + - "inikMauritániaMontserratMaltaMauríciusMaldivyMalawiMexikoMalajziaMozambi" + - "kNamíbiaNová KaledóniaNigerNorfolkNigériaNikaraguaHolandskoNórskoNepálNa" + - "uruNiueNový ZélandOmánPanamaPeruFrancúzska PolynéziaPapua Nová GuineaFil" + - "ipínyPakistanPoľskoSaint Pierre a MiquelonPitcairnove ostrovyPortorikoPa" + - "lestínske územiaPortugalskoPalauParaguajKatarostatné TichomorieRéunionRu" + - "munskoSrbskoRuskoRwandaSaudská ArábiaŠalamúnove ostrovySeychelySudánŠvéd" + - "skoSingapurSvätá HelenaSlovinskoSvalbard a Jan MayenSlovenskoSierra Leon" + - "eSan MarínoSenegalSomálskoSurinamJužný SudánSvätý Tomáš a Princov ostrov" + - "SalvádorSvätý Martin (hol.)SýriaSvazijskoTristan da CunhaTurks a CaicosČ" + - "adFrancúzske južné a antarktické územiaTogoThajskoTadžikistanTokelauVých" + - "odný TimorTurkménskoTuniskoTongaTureckoTrinidad a TobagoTuvaluTaiwanTanz" + - "ániaUkrajinaUgandaMenšie odľahlé ostrovy USAOSNSpojené štátyUruguajUzbe" + - "kistanVatikánSvätý Vincent a GrenadínyVenezuelaBritské Panenské ostrovyA" + - "merické Panenské ostrovyVietnamVanuatuWallis a FutunaSamoaKosovoJemenMay" + - "otteJužná AfrikaZambiaZimbabweneznámy regiónsvetAfrikaSeverná AmerikaJuž" + - "ná AmerikaOceániazápadná AfrikaStredná Amerikavýchodná Afrikaseverná Afr" + - "ikastredná Afrikajužné územia AfrikyAmerikaseverné územia AmerikyKaribik" + - "východná Áziajužná Áziajuhovýchodná Áziajužná EurópaAustraláziaMelanézia" + - "oblasť MikronéziePolynéziaÁziastredná Áziazápadná ÁziaEurópavýchodná Eur" + - "ópaseverná Európazápadná EurópaLatinská Amerika" - -var skRegionIdx = []uint16{ // 292 elements + "CyprusČeskoNemeckoDiego GarciaDžibutskoDánskoDominikaDominikánska republ" + + "ikaAlžírskoCeuta a MelillaEkvádorEstónskoEgyptZápadná SaharaEritreaŠpani" + + "elskoEtiópiaEurópska úniaeurozónaFínskoFidžiFalklandyMikronéziaFaerské o" + + "strovyFrancúzskoGabonSpojené kráľovstvoGrenadaGruzínskoFrancúzska Guyana" + + "GuernseyGhanaGibraltárGrónskoGambiaGuineaGuadeloupeRovníková GuineaGréck" + + "oJužná Georgia a Južné Sandwichove ostrovyGuatemalaGuamGuinea-BissauGuya" + + "naHongkong – OAO ČínyHeardov ostrov a Macdonaldove ostrovyHondurasChorvá" + + "tskoHaitiMaďarskoKanárske ostrovyIndonéziaÍrskoIzraelOstrov ManIndiaBrit" + + "ské indickooceánske územieIrakIránIslandTalianskoJerseyJamajkaJordánskoJ" + + "aponskoKeňaKirgizskoKambodžaKiribatiKomorySvätý Krištof a NevisSeverná K" + + "óreaJužná KóreaKuvajtKajmanie ostrovyKazachstanLaosLibanonSvätá LuciaLi" + + "chtenštajnskoSrí LankaLibériaLesothoLitvaLuxemburskoLotyšskoLíbyaMarokoM" + + "onakoMoldavskoČierna HoraSvätý Martin (fr.)MadagaskarMarshallove ostrovy" + + "MacedónskoMaliMjanmarskoMongolskoMacao – OAO ČínySeverné MariányMartinik" + + "MauritániaMontserratMaltaMauríciusMaldivyMalawiMexikoMalajziaMozambikNam" + + "íbiaNová KaledóniaNigerNorfolkNigériaNikaraguaHolandskoNórskoNepálNauru" + + "NiueNový ZélandOmánPanamaPeruFrancúzska PolynéziaPapua-Nová GuineaFilipí" + + "nyPakistanPoľskoSaint Pierre a MiquelonPitcairnove ostrovyPortorikoPales" + + "tínske územiaPortugalskoPalauParaguajKatarostatné TichomorieRéunionRumun" + + "skoSrbskoRuskoRwandaSaudská ArábiaŠalamúnove ostrovySeychelySudánŠvédsko" + + "SingapurSvätá HelenaSlovinskoSvalbard a Jan MayenSlovenskoSierra LeoneSa" + + "n MarínoSenegalSomálskoSurinamJužný SudánSvätý Tomáš a Princov ostrovSal" + + "vádorSvätý Martin (hol.)SýriaSvazijskoTristan da CunhaTurks a CaicosČadF" + + "rancúzske južné a antarktické územiaTogoThajskoTadžikistanTokelauVýchodn" + + "ý TimorTurkménskoTuniskoTongaTureckoTrinidad a TobagoTuvaluTaiwanTanzán" + + "iaUkrajinaUgandaMenšie odľahlé ostrovy USAOrganizácia Spojených národovS" + + "pojené štátyUruguajUzbekistanVatikánSvätý Vincent a GrenadínyVenezuelaBr" + + "itské Panenské ostrovyAmerické Panenské ostrovyVietnamVanuatuWallis a Fu" + + "tunaSamoaKosovoJemenMayotteJužná AfrikaZambiaZimbabweneznámy regiónsvetA" + + "frikaSeverná AmerikaJužná AmerikaOceániazápadná AfrikaStredná Amerikavýc" + + "hodná Afrikaseverná Afrikastredná Afrikajužné územia AfrikyAmerikasevern" + + "é územia AmerikyKaribikvýchodná Áziajužná Áziajuhovýchodná Áziajužná Eu" + + "rópaAustraláziaMelanéziaoblasť MikronéziePolynéziaÁziastredná Áziazápadn" + + "á ÁziaEurópavýchodná Európaseverná Európazápadná EurópaLatinská Amerika" + +var skRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0009, 0x0010, 0x002a, 0x0034, 0x0045, 0x004d, 0x0056, 0x005f, 0x0065, 0x0070, 0x007a, 0x0089, 0x0091, 0x009b, 0x00a0, @@ -48245,43 +51006,43 @@ var skRegionIdx = []uint16{ // 292 elements 0x014b, 0x0151, 0x0158, 0x0167, 0x016f, 0x0179, 0x017f, 0x0185, 0x0196, 0x01b7, 0x01cf, 0x01e2, 0x01ef, 0x0202, 0x0211, 0x0216, 0x021d, 0x0223, 0x022b, 0x0235, 0x023e, 0x0242, 0x024a, 0x0252, - 0x0263, 0x0269, 0x027a, 0x0281, 0x028d, 0x0297, 0x029e, 0x02a6, + 0x0263, 0x0269, 0x026f, 0x0276, 0x0282, 0x028c, 0x0293, 0x029b, // Entry 40 - 7F - 0x02bd, 0x02c7, 0x02d6, 0x02de, 0x02e7, 0x02ec, 0x02fc, 0x0303, - 0x030e, 0x0316, 0x0325, 0x0325, 0x032c, 0x0332, 0x033b, 0x0346, - 0x0356, 0x0361, 0x0366, 0x037b, 0x0382, 0x038c, 0x039f, 0x03a7, - 0x03ac, 0x03b6, 0x03be, 0x03c4, 0x03ca, 0x03d4, 0x03e6, 0x03ed, - 0x041a, 0x0423, 0x0427, 0x0434, 0x043b, 0x0452, 0x0477, 0x047f, - 0x048a, 0x048f, 0x0498, 0x04a9, 0x04b3, 0x04b9, 0x04bf, 0x04c9, - 0x04ce, 0x04ef, 0x04f3, 0x04f8, 0x04fe, 0x0507, 0x050d, 0x0514, - 0x051e, 0x0526, 0x052b, 0x0534, 0x053d, 0x0545, 0x054b, 0x0563, + 0x02b2, 0x02bc, 0x02cb, 0x02d3, 0x02dc, 0x02e1, 0x02f1, 0x02f8, + 0x0303, 0x030b, 0x031a, 0x0323, 0x032a, 0x0330, 0x0339, 0x0344, + 0x0354, 0x035f, 0x0364, 0x0379, 0x0380, 0x038a, 0x039c, 0x03a4, + 0x03a9, 0x03b3, 0x03bb, 0x03c1, 0x03c7, 0x03d1, 0x03e3, 0x03ea, + 0x0417, 0x0420, 0x0424, 0x0431, 0x0437, 0x044e, 0x0473, 0x047b, + 0x0486, 0x048b, 0x0494, 0x04a5, 0x04af, 0x04b5, 0x04bb, 0x04c5, + 0x04ca, 0x04eb, 0x04ef, 0x04f4, 0x04fa, 0x0503, 0x0509, 0x0510, + 0x051a, 0x0522, 0x0527, 0x0530, 0x0539, 0x0541, 0x0547, 0x055f, // Entry 80 - BF - 0x0572, 0x0580, 0x0586, 0x0596, 0x05a0, 0x05a4, 0x05ab, 0x05b8, - 0x05c8, 0x05d2, 0x05da, 0x05e1, 0x05e6, 0x05f1, 0x05fa, 0x0600, - 0x0606, 0x060c, 0x0615, 0x0621, 0x0635, 0x063f, 0x0652, 0x065d, - 0x0661, 0x066b, 0x0674, 0x0688, 0x0699, 0x06a1, 0x06ac, 0x06b6, - 0x06bb, 0x06c5, 0x06cc, 0x06d2, 0x06d8, 0x06e0, 0x06e8, 0x06f0, - 0x0700, 0x0705, 0x070c, 0x0714, 0x071d, 0x0726, 0x072d, 0x0733, - 0x0738, 0x073c, 0x0749, 0x074e, 0x0754, 0x0758, 0x076e, 0x0780, - 0x0789, 0x0791, 0x0798, 0x07af, 0x07c2, 0x07cb, 0x07df, 0x07ea, + 0x056e, 0x057c, 0x0582, 0x0592, 0x059c, 0x05a0, 0x05a7, 0x05b4, + 0x05c4, 0x05ce, 0x05d6, 0x05dd, 0x05e2, 0x05ed, 0x05f6, 0x05fc, + 0x0602, 0x0608, 0x0611, 0x061d, 0x0631, 0x063b, 0x064e, 0x0659, + 0x065d, 0x0667, 0x0670, 0x0684, 0x0695, 0x069d, 0x06a8, 0x06b2, + 0x06b7, 0x06c1, 0x06c8, 0x06ce, 0x06d4, 0x06dc, 0x06e4, 0x06ec, + 0x06fc, 0x0701, 0x0708, 0x0710, 0x0719, 0x0722, 0x0729, 0x072f, + 0x0734, 0x0738, 0x0745, 0x074a, 0x0750, 0x0754, 0x076a, 0x077c, + 0x0785, 0x078d, 0x0794, 0x07ab, 0x07be, 0x07c7, 0x07db, 0x07e6, // Entry C0 - FF - 0x07ef, 0x07f7, 0x07fc, 0x080f, 0x0817, 0x081f, 0x0825, 0x082a, - 0x0830, 0x0840, 0x0854, 0x085c, 0x0862, 0x086b, 0x0873, 0x0881, - 0x088a, 0x089e, 0x08a7, 0x08b3, 0x08be, 0x08c5, 0x08ce, 0x08d5, - 0x08e3, 0x0903, 0x090c, 0x0921, 0x0927, 0x0930, 0x0940, 0x094e, - 0x0952, 0x097c, 0x0980, 0x0987, 0x0993, 0x099a, 0x09aa, 0x09b5, - 0x09bc, 0x09c1, 0x09c8, 0x09d9, 0x09df, 0x09e5, 0x09ee, 0x09f6, - 0x09fc, 0x0a19, 0x0a1c, 0x0a2c, 0x0a33, 0x0a3d, 0x0a45, 0x0a61, - 0x0a6a, 0x0a84, 0x0a9f, 0x0aa6, 0x0aad, 0x0abc, 0x0ac1, 0x0ac7, + 0x07eb, 0x07f3, 0x07f8, 0x080b, 0x0813, 0x081b, 0x0821, 0x0826, + 0x082c, 0x083c, 0x0850, 0x0858, 0x085e, 0x0867, 0x086f, 0x087d, + 0x0886, 0x089a, 0x08a3, 0x08af, 0x08ba, 0x08c1, 0x08ca, 0x08d1, + 0x08df, 0x08ff, 0x0908, 0x091d, 0x0923, 0x092c, 0x093c, 0x094a, + 0x094e, 0x0978, 0x097c, 0x0983, 0x098f, 0x0996, 0x09a6, 0x09b1, + 0x09b8, 0x09bd, 0x09c4, 0x09d5, 0x09db, 0x09e1, 0x09ea, 0x09f2, + 0x09f8, 0x0a15, 0x0a35, 0x0a45, 0x0a4c, 0x0a56, 0x0a5e, 0x0a7a, + 0x0a83, 0x0a9d, 0x0ab8, 0x0abf, 0x0ac6, 0x0ad5, 0x0ada, 0x0ae0, // Entry 100 - 13F - 0x0acc, 0x0ad3, 0x0ae1, 0x0ae7, 0x0aef, 0x0aff, 0x0b03, 0x0b09, - 0x0b19, 0x0b28, 0x0b30, 0x0b40, 0x0b50, 0x0b61, 0x0b70, 0x0b7f, - 0x0b95, 0x0b9c, 0x0bb4, 0x0bbb, 0x0bcb, 0x0bd8, 0x0bec, 0x0bfb, - 0x0c07, 0x0c11, 0x0c24, 0x0c2e, 0x0c33, 0x0c41, 0x0c50, 0x0c57, - 0x0c69, 0x0c79, 0x0c8a, 0x0c9b, -} // Size: 608 bytes - -const slRegionStr string = "" + // Size: 3201 bytes + 0x0ae5, 0x0aec, 0x0afa, 0x0b00, 0x0b08, 0x0b18, 0x0b1c, 0x0b22, + 0x0b32, 0x0b41, 0x0b49, 0x0b59, 0x0b69, 0x0b7a, 0x0b89, 0x0b98, + 0x0bae, 0x0bb5, 0x0bcd, 0x0bd4, 0x0be4, 0x0bf1, 0x0c05, 0x0c14, + 0x0c20, 0x0c2a, 0x0c3d, 0x0c47, 0x0c4c, 0x0c5a, 0x0c69, 0x0c70, + 0x0c82, 0x0c92, 0x0ca3, 0x0ca3, 0x0cb4, +} // Size: 610 bytes + +const slRegionStr string = "" + // Size: 3214 bytes "Otok AscensionAndoraZdruženi arabski emiratiAfganistanAntigva in Barbuda" + "AngvilaAlbanijaArmenijaAngolaAntarktikaArgentinaAmeriška SamoaAvstrijaAv" + "stralijaArubaÅlandski otokiAzerbajdžanBosna in HercegovinaBarbadosBangla" + @@ -48292,42 +51053,42 @@ const slRegionStr string = "" + // Size: 3201 bytes "iČileKamerunKitajskaKolumbijaOtok ClippertonKostarikaKubaZelenortski oto" + "kiCuraçaoBožični otokCiperČeškaNemčijaDiego GarciaDžibutiDanskaDominikaD" + "ominikanska republikaAlžirijaCeuta in MelillaEkvadorEstonijaEgiptZahodna" + - " SaharaEritrejaŠpanijaEtiopijaEvropska unijaFinskaFidžiFalklandski otoki" + - "MikronezijaFerski otokiFrancijaGabonZdruženo kraljestvoGrenadaGruzijaFra" + - "ncoska GvajanaGuernseyGanaGibraltarGrenlandijaGambijaGvinejaGvadalupeEkv" + - "atorialna GvinejaGrčijaJužna Georgia in Južni Sandwichevi otokiGvatemala" + - "GuamGvineja BissauGvajanaPosebno administrativno območje LR Kitajske Hon" + - "gkongHeardov otok in McDonaldovi otokiHondurasHrvaškaHaitiMadžarskaKanar" + - "ski otokiIndonezijaIrskaIzraelOtok ManIndijaBritansko ozemlje v Indijske" + - "m oceanuIrakIranIslandijaItalijaJerseyJamajkaJordanijaJaponskaKenijaKirg" + - "izistanKambodžaKiribatiKomoriSaint Kitts in NevisSeverna KorejaJužna Kor" + - "ejaKuvajtKajmanski otokiKazahstanLaosLibanonSaint LuciaLihtenštajnŠrilan" + - "kaLiberijaLesotoLitvaLuksemburgLatvijaLibijaMarokoMonakoMoldavijaČrna go" + - "raSaint MartinMadagaskarMarshallovi otokiMakedonijaMaliMjanmar (Burma)Mo" + - "ngolijaPosebno administrativno območje LR Kitajske MacaoSeverni Mariansk" + - "i otokiMartinikMavretanijaMontserratMaltaMauritiusMaldiviMalaviMehikaMal" + - "ezijaMozambikNamibijaNova KaledonijaNigerNorfolški otokNigerijaNikaragva" + - "NizozemskaNorveškaNepalNauruNiueNova ZelandijaOmanPanamaPeruFrancoska Po" + - "linezijaPapua Nova GvinejaFilipiniPakistanPoljskaSaint Pierre in Miquelo" + - "nPitcairnPortorikoPalestinsko ozemljePortugalskaPalauParagvajKatarOstala" + - " oceanijaReunionRomunijaSrbijaRusijaRuandaSaudova ArabijaSalomonovi otok" + - "iSejšeliSudanŠvedskaSingapurSveta HelenaSlovenijaSvalbard in Jan MayenSl" + - "ovaškaSierra LeoneSan MarinoSenegalSomalijaSurinamJužni SudanSao Tome in" + - " PrincipeSalvadorSint MaartenSirijaSvaziTristan da CunhaOtoki Turks in C" + - "aicosČadFrancosko južno ozemljeTogoTajskaTadžikistanTokelauTimor-LesteTu" + - "rkmenistanTunizijaTongaTurčijaTrinidad in TobagoTuvaluTajvanTanzanijaUkr" + - "ajinaUgandaStranski zunanji otoki Združenih državZdruženi narodiZdružene" + - " države AmerikeUrugvajUzbekistanVatikanSaint Vincent in GrenadineVenezue" + - "laBritanski Deviški otokiAmeriški Deviški otokiVietnamVanuatuWallis in F" + - "utunaSamoaKosovoJemenMayotteJužnoafriška republikaZambijaZimbabveNeznano" + - " ali neveljavno območjeSvetAfrikaSeverna AmerikaJužna AmerikaOceanijaZah" + - "odna AfrikaSrednja AmerikaVzhodna AfrikaSeverna AfrikaSrednja AfrikaJužn" + - "a AfrikaAmerikesevernoameriška celinaKaribiVzhodna AzijaJužna AzijaJugov" + - "zhodna AzijaJužna EvropaAvstralija in Nova ZelandijaMelanezijamikronezij" + - "ska regijaPolinezijaAzijaOsrednja AzijaZahodna AzijaEvropaVzhodna Evropa" + - "Severna EvropaZahodna EvropaLatinska Amerika" - -var slRegionIdx = []uint16{ // 292 elements + " SaharaEritrejaŠpanijaEtiopijaEvropska unijaevroobmočjeFinskaFidžiFalkla" + + "ndski otokiMikronezijaFerski otokiFrancijaGabonZdruženo kraljestvoGrenad" + + "aGruzijaFrancoska GvajanaGuernseyGanaGibraltarGrenlandijaGambijaGvinejaG" + + "uadeloupeEkvatorialna GvinejaGrčijaJužna Georgia in Južni Sandwichevi ot" + + "okiGvatemalaGuamGvineja BissauGvajanaPosebno administrativno območje LR " + + "Kitajske HongkongHeardov otok in McDonaldovi otokiHondurasHrvaškaHaitiMa" + + "džarskaKanarski otokiIndonezijaIrskaIzraelOtok ManIndijaBritansko ozemlj" + + "e v Indijskem oceanuIrakIranIslandijaItalijaJerseyJamajkaJordanijaJapons" + + "kaKenijaKirgizistanKambodžaKiribatiKomoriSaint Kitts in NevisSeverna Kor" + + "ejaJužna KorejaKuvajtKajmanski otokiKazahstanLaosLibanonSaint LuciaLihte" + + "nštajnŠrilankaLiberijaLesotoLitvaLuksemburgLatvijaLibijaMarokoMonakoMold" + + "avijaČrna goraSaint MartinMadagaskarMarshallovi otokiMakedonijaMaliMjanm" + + "ar (Burma)MongolijaPosebno administrativno območje LR Kitajske MacaoSeve" + + "rni Marianski otokiMartinikMavretanijaMontserratMaltaMauritiusMaldiviMal" + + "aviMehikaMalezijaMozambikNamibijaNova KaledonijaNigerNorfolški otokNiger" + + "ijaNikaragvaNizozemskaNorveškaNepalNauruNiueNova ZelandijaOmanPanamaPeru" + + "Francoska PolinezijaPapua Nova GvinejaFilipiniPakistanPoljskaSaint Pierr" + + "e in MiquelonPitcairnPortorikoPalestinsko ozemljePortugalskaPalauParagva" + + "jKatarOstala oceanijaReunionRomunijaSrbijaRusijaRuandaSaudova ArabijaSal" + + "omonovi otokiSejšeliSudanŠvedskaSingapurSveta HelenaSlovenijaSvalbard in" + + " Jan MayenSlovaškaSierra LeoneSan MarinoSenegalSomalijaSurinamJužni Suda" + + "nSao Tome in PrincipeSalvadorSint MaartenSirijaSvaziTristan da CunhaOtok" + + "i Turks in CaicosČadFrancosko južno ozemljeTogoTajskaTadžikistanTokelauT" + + "imor-LesteTurkmenistanTunizijaTongaTurčijaTrinidad in TobagoTuvaluTajvan" + + "TanzanijaUkrajinaUgandaStranski zunanji otoki Združenih državZdruženi na" + + "rodiZdružene države AmerikeUrugvajUzbekistanVatikanSaint Vincent in Gren" + + "adineVenezuelaBritanski Deviški otokiAmeriški Deviški otokiVietnamVanuat" + + "uWallis in FutunaSamoaKosovoJemenMayotteJužnoafriška republikaZambijaZim" + + "babveNeznano ali neveljavno območjesvetAfrikaSeverna AmerikaJužna Amerik" + + "aOceanijaZahodna AfrikaSrednja AmerikaVzhodna AfrikaSeverna AfrikaSrednj" + + "a AfrikaJužna AfrikaAmerikesevernoameriška celinaKaribiVzhodna AzijaJužn" + + "a AzijaJugovzhodna AzijaJužna EvropaAvstralija in Nova ZelandijaMelanezi" + + "jamikronezijska regijaPolinezijaAzijaOsrednja AzijaZahodna AzijaEvropaVz" + + "hodna EvropaSeverna EvropaZahodna EvropaLatinska Amerika" + +var slRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x000e, 0x0014, 0x002d, 0x0037, 0x0049, 0x0050, 0x0058, 0x0060, 0x0066, 0x0070, 0x0079, 0x0088, 0x0090, 0x009a, 0x009f, @@ -48339,310 +51100,311 @@ var slRegionIdx = []uint16{ // 292 elements 0x0264, 0x0269, 0x0270, 0x0278, 0x0284, 0x028c, 0x0292, 0x029a, // Entry 40 - 7F 0x02b0, 0x02b9, 0x02c9, 0x02d0, 0x02d8, 0x02dd, 0x02eb, 0x02f3, - 0x02fb, 0x0303, 0x0311, 0x0311, 0x0317, 0x031d, 0x032e, 0x0339, - 0x0345, 0x034d, 0x0352, 0x0366, 0x036d, 0x0374, 0x0385, 0x038d, - 0x0391, 0x039a, 0x03a5, 0x03ac, 0x03b3, 0x03bc, 0x03d0, 0x03d7, - 0x0401, 0x040a, 0x040e, 0x041c, 0x0423, 0x0458, 0x0479, 0x0481, - 0x0489, 0x048e, 0x0498, 0x04a6, 0x04b0, 0x04b5, 0x04bb, 0x04c3, - 0x04c9, 0x04ed, 0x04f1, 0x04f5, 0x04fe, 0x0505, 0x050b, 0x0512, - 0x051b, 0x0523, 0x0529, 0x0534, 0x053d, 0x0545, 0x054b, 0x055f, + 0x02fb, 0x0303, 0x0311, 0x031d, 0x0323, 0x0329, 0x033a, 0x0345, + 0x0351, 0x0359, 0x035e, 0x0372, 0x0379, 0x0380, 0x0391, 0x0399, + 0x039d, 0x03a6, 0x03b1, 0x03b8, 0x03bf, 0x03c9, 0x03dd, 0x03e4, + 0x040e, 0x0417, 0x041b, 0x0429, 0x0430, 0x0465, 0x0486, 0x048e, + 0x0496, 0x049b, 0x04a5, 0x04b3, 0x04bd, 0x04c2, 0x04c8, 0x04d0, + 0x04d6, 0x04fa, 0x04fe, 0x0502, 0x050b, 0x0512, 0x0518, 0x051f, + 0x0528, 0x0530, 0x0536, 0x0541, 0x054a, 0x0552, 0x0558, 0x056c, // Entry 80 - BF - 0x056d, 0x057a, 0x0580, 0x058f, 0x0598, 0x059c, 0x05a3, 0x05ae, - 0x05ba, 0x05c3, 0x05cb, 0x05d1, 0x05d6, 0x05e0, 0x05e7, 0x05ed, - 0x05f3, 0x05f9, 0x0602, 0x060c, 0x0618, 0x0622, 0x0633, 0x063d, - 0x0641, 0x0650, 0x0659, 0x068b, 0x06a2, 0x06aa, 0x06b5, 0x06bf, - 0x06c4, 0x06cd, 0x06d4, 0x06da, 0x06e0, 0x06e8, 0x06f0, 0x06f8, - 0x0707, 0x070c, 0x071b, 0x0723, 0x072c, 0x0736, 0x073f, 0x0744, - 0x0749, 0x074d, 0x075b, 0x075f, 0x0765, 0x0769, 0x077d, 0x078f, - 0x0797, 0x079f, 0x07a6, 0x07be, 0x07c6, 0x07cf, 0x07e2, 0x07ed, + 0x057a, 0x0587, 0x058d, 0x059c, 0x05a5, 0x05a9, 0x05b0, 0x05bb, + 0x05c7, 0x05d0, 0x05d8, 0x05de, 0x05e3, 0x05ed, 0x05f4, 0x05fa, + 0x0600, 0x0606, 0x060f, 0x0619, 0x0625, 0x062f, 0x0640, 0x064a, + 0x064e, 0x065d, 0x0666, 0x0698, 0x06af, 0x06b7, 0x06c2, 0x06cc, + 0x06d1, 0x06da, 0x06e1, 0x06e7, 0x06ed, 0x06f5, 0x06fd, 0x0705, + 0x0714, 0x0719, 0x0728, 0x0730, 0x0739, 0x0743, 0x074c, 0x0751, + 0x0756, 0x075a, 0x0768, 0x076c, 0x0772, 0x0776, 0x078a, 0x079c, + 0x07a4, 0x07ac, 0x07b3, 0x07cb, 0x07d3, 0x07dc, 0x07ef, 0x07fa, // Entry C0 - FF - 0x07f2, 0x07fa, 0x07ff, 0x080e, 0x0815, 0x081d, 0x0823, 0x0829, - 0x082f, 0x083e, 0x084e, 0x0856, 0x085b, 0x0863, 0x086b, 0x0877, - 0x0880, 0x0895, 0x089e, 0x08aa, 0x08b4, 0x08bb, 0x08c3, 0x08ca, - 0x08d6, 0x08ea, 0x08f2, 0x08fe, 0x0904, 0x0909, 0x0919, 0x092e, - 0x0932, 0x094a, 0x094e, 0x0954, 0x0960, 0x0967, 0x0972, 0x097e, - 0x0986, 0x098b, 0x0993, 0x09a5, 0x09ab, 0x09b1, 0x09ba, 0x09c2, - 0x09c8, 0x09f0, 0x0a00, 0x0a19, 0x0a20, 0x0a2a, 0x0a31, 0x0a4b, - 0x0a54, 0x0a6c, 0x0a84, 0x0a8b, 0x0a92, 0x0aa2, 0x0aa7, 0x0aad, + 0x07ff, 0x0807, 0x080c, 0x081b, 0x0822, 0x082a, 0x0830, 0x0836, + 0x083c, 0x084b, 0x085b, 0x0863, 0x0868, 0x0870, 0x0878, 0x0884, + 0x088d, 0x08a2, 0x08ab, 0x08b7, 0x08c1, 0x08c8, 0x08d0, 0x08d7, + 0x08e3, 0x08f7, 0x08ff, 0x090b, 0x0911, 0x0916, 0x0926, 0x093b, + 0x093f, 0x0957, 0x095b, 0x0961, 0x096d, 0x0974, 0x097f, 0x098b, + 0x0993, 0x0998, 0x09a0, 0x09b2, 0x09b8, 0x09be, 0x09c7, 0x09cf, + 0x09d5, 0x09fd, 0x0a0d, 0x0a26, 0x0a2d, 0x0a37, 0x0a3e, 0x0a58, + 0x0a61, 0x0a79, 0x0a91, 0x0a98, 0x0a9f, 0x0aaf, 0x0ab4, 0x0aba, // Entry 100 - 13F - 0x0ab2, 0x0ab9, 0x0ad1, 0x0ad8, 0x0ae0, 0x0aff, 0x0b03, 0x0b09, - 0x0b18, 0x0b26, 0x0b2e, 0x0b3c, 0x0b4b, 0x0b59, 0x0b67, 0x0b75, - 0x0b82, 0x0b89, 0x0ba0, 0x0ba6, 0x0bb3, 0x0bbf, 0x0bd0, 0x0bdd, - 0x0bf9, 0x0c03, 0x0c17, 0x0c21, 0x0c26, 0x0c34, 0x0c41, 0x0c47, - 0x0c55, 0x0c63, 0x0c71, 0x0c81, -} // Size: 608 bytes - -const sqRegionStr string = "" + // Size: 3074 bytes + 0x0abf, 0x0ac6, 0x0ade, 0x0ae5, 0x0aed, 0x0b0c, 0x0b10, 0x0b16, + 0x0b25, 0x0b33, 0x0b3b, 0x0b49, 0x0b58, 0x0b66, 0x0b74, 0x0b82, + 0x0b8f, 0x0b96, 0x0bad, 0x0bb3, 0x0bc0, 0x0bcc, 0x0bdd, 0x0bea, + 0x0c06, 0x0c10, 0x0c24, 0x0c2e, 0x0c33, 0x0c41, 0x0c4e, 0x0c54, + 0x0c62, 0x0c70, 0x0c7e, 0x0c7e, 0x0c8e, +} // Size: 610 bytes + +const sqRegionStr string = "" + // Size: 3075 bytes "Ishulli AsenshionAndorrëEmiratet e Bashkuara ArabeAfganistanAntigua e Ba" + "rbudaAnguilëShqipëriArmeniAngolëAntarktikëArgjentinëSamoa AmerikaneAustr" + "iAustraliArubëIshujt AlandëAzerbajxhanBosnjë-HercegovinëBarbadosBanglade" + "shBelgjikëBurkina-FasoBullgariBahrejnBurundiBeninShën BartolomeuBermudëB" + - "runeiBoliviKaraibet holandezeBrazilBahamasButanIshulli Bove’BotsvanëBjel" + - "lorusiBelizëKanadaIshujt KokosKongo-KinshasaRepubika e Afrikës QendroreK" + + "runeiBoliviKaraibet holandezeBrazilBahamasButanIshulli BoveBotsvanëBjell" + + "orusiBelizëKanadaIshujt KokosKongo-KinshasaRepublika e Afrikës QendroreK" + "ongo-BrazavilëZvicërCôte d’IvoireIshujt KukKiliKamerunKinëKolumbiIshulli" + " KlipërtonKosta-RikëKubëKepi i GjelbërKuraçaoIshulli i KrishtlindjesQipr" + - "oRepublika ÇekeGjermaniDiego-GarsiaXhibutiDanimarkëDominikëRepublika Dom" + - "inikaneAlgjeriTheuta e MelilaEkuadorEstoniEgjiptSaharaja PerëndimoreErit" + - "reSpanjëEtiopiBashkimi EuropianFinlandëFixhiIshujt FalklandMikroneziIshu" + - "jt FaroeFrancëGabonMbretëria e BashkuarGrenadëGjeorgjiGuajana FrancezeGe" + - "rnsejGanëGjibraltarGrenlandëGambiaGuineGuadalupeGuineja EkuatorialeGreqi" + - "Xhorxha Jugore dhe Ishujt Senduiçë të JugutGuatemalëGuamGuine-BisauGuaja" + - "nëRVAK i Hong KongutIshulli Hërd dhe Ishujt MekdonaldHondurasKroaciHaiti" + - "HungariIshujt KanarieIndoneziIrlandëIzraelIshulli i ManitIndiTerritori B" + - "ritanik i Oqeanit IndianIrakIranIslandëItaliXhersejXhamajkëJordaniJaponi" + - "KeniaKirgistanKamboxhiaKiribatiKomoreShën Kits dhe NevisKoreja e VeriutK" + - "oreja e JugutKuvajtIshujt KajmanKazakistanLaosLibanShën-LuçiaLihtenshtaj" + - "nSri-LankëLiberiLesotoLituaniLuksemburgLetoniLibiMarokMonakoMoldaviMal i" + - " ZiShën-MartinMadagaskarIshujt MarshallMaqedoniMaliMianmar (Burma)Mongol" + - "iRVAK i MakaosIshujt e Marianës VerioreMartinikëMauritaniMontseratMaltëM" + - "auritiusMaldiveMalaviMeksikëMalajziMozambikNamibiKaledonia e ReNigerIshu" + - "lli NorfolkNigeriNikaraguaHolandëNorvegjiNepalNauruNiueZelandë e ReOmanP" + - "anamaPeruPolinezia FrancezePapua Guineja e ReFilipinePakistanPoloniShën " + - "Pier dhe MikelonIshujt PitkernPorto-RikoTerritoret PalestinezePortugaliP" + - "alauParaguaiKatarOqeania e Largët (Lindja e Largët)ReunionRumaniSerbiRus" + - "iRuandëArabia SauditeIshujt SolomonSejshelleSudanSuediSingaporShën-Helen" + - "ëSlloveniSvalbard e Jan-MajenSllovakiSiera-LeoneSan-MarinoSenegalSomali" + - "SurinamiSudani i JugutSao-Tome e PrinsipeSalvadorSint MartenSiriSvazilan" + - "dëTristan-da-KunaIshujt Turks dhe KaikosÇadTerritoret Jugore FrancezeTog" + + "oÇekiGjermaniDiego-GarsiaXhibutiDanimarkëDominikëRepublika DominikaneAlg" + + "jeriTheuta e MelilaEkuadorEstoniEgjiptSaharaja PerëndimoreEritreSpanjëEt" + + "iopiBashkimi EuropianEurozonëFinlandëFixhiIshujt FalklandMikroneziIshujt" + + " FaroeFrancëGabonMbretëria e BashkuarGrenadëGjeorgjiGuajana FrancezeGern" + + "sejGanëGjibraltarGrenlandëGambiaGuineGuadalupeGuineja EkuatorialeGreqiXh" + + "orxha Jugore dhe Ishujt Senduiçë të JugutGuatemalëGuamGuine-BisauGuajanë" + + "RPA i Hong-KongutIshulli Hërd dhe Ishujt MekdonaldHondurasKroaciHaitiHun" + + "gariIshujt KanarieIndoneziIrlandëIzraelIshulli i ManitIndiTerritori Brit" + + "anik i Oqeanit IndianIrakIranIslandëItaliXhersejXhamajkëJordaniJaponiKen" + + "iaKirgistanKamboxhiaKiribatiKomoreShën-Kits dhe NevisKoreja e VeriutKore" + + "ja e JugutKuvajtIshujt KajmanKazakistanLaosLibanShën-LuçiaLihtenshtajnSr" + + "i-LankëLiberiLesotoLituaniLuksemburgLetoniLibiMarokMonakoMoldaviMal i Zi" + + "Shën-MartinMadagaskarIshujt MarshallMaqedoniMaliMianmar (Burma)MongoliRP" + + "A i MakaosIshujt e Marianës VerioreMartinikëMauritaniMontseratMaltëMauri" + + "tiusMaldiveMalaviMeksikëMalajziMozambikNamibiKaledonia e ReNigerIshulli " + + "NorfolkNigeriNikaraguaHolandëNorvegjiNepalNauruNiueZelandë e ReOmanPanam" + + "aPeruPolinezia FrancezeGuineja e Re-PapuaFilipinePakistanPoloniShën Pier" + + " dhe MikelonIshujt PitkernPorto-RikoTerritoret PalestinezePortugaliPalau" + + "ParaguaiKatarOqeania e Largët (Lindja e Largët)ReunionRumaniSerbiRusiRua" + + "ndëArabia SauditeIshujt SolomonSejshelleSudanSuediSingaporShën-HelenëSll" + + "oveniSvalbard dhe Jan-MajenSllovakiSiera-LeoneSan-MarinoSenegalSomaliSur" + + "inamiSudani i JugutSao Tome dhe PrincipeSalvadorSint-MartenSiriSvaziland" + + "ëTristan-da-KunaIshujt Turks dhe KaikosÇadTerritoret Jugore FrancezeTog" + "oTajlandëTaxhikistanTokelauTimor-LesteTurkmenistanTuniziTongaTurqiTrinid" + - "ad e TobagoTuvaluTajvanTanzaniUkrainëUgandëIshujt periferikë të SHBA-sëk" + - "ombet e bashkuaraShtetet e Bashkuara të AmerikësUruguaiUzbekistanVatikan" + - "Shën Vincent dhe GrenadineVenezuelëIshujt e Virgjër BritanikëIshujt e Vi" + - "rgjër AmerikanëVietnamVanuatuUollis e FutunaSamoaKosovëJemenMajotëAfrika" + - " e JugutZambiaZimbabveI panjohurBotaAfrikëAmerika e VeriutAmerika e Jugu" + - "tOqeaniAfrika PerëndimoreAmerika QendroreAfrika LindoreAfrika VerioreAfr" + - "ika e MesmeAfrika JugoreAmerikëAmerika VerioreKaraibeAzia LindoreAzia Ju" + - "goreAzia JuglindoreEuropa JugoreAustralaziaMelaneziaRajoni MikronezianPo" + - "lineziaAziAzia QendroreAzia PerëndimoreEuropëEuropa LindoreEuropa Verior" + - "eEuropa PerëndimoreAmerika Latine" - -var sqRegionIdx = []uint16{ // 292 elements + "ad e TobagoTuvaluTajvanTanzaniUkrainëUgandëIshujt Periferikë të SHBA-sëK" + + "ombet e BashkuaraShtetet e Bashkuara të AmerikësUruguaiUzbekistanVatikan" + + "Shën-Vincent dhe GrenadineVenezuelëIshujt e Virgjër BritanikëIshujt e Vi" + + "rgjër të SHBA-sëVietnamVanuatuUollis e FutunaSamoaKosovëJemenMajotëAfrik" + + "a e JugutZambiaZimbabveI panjohurBotaAfrikëAmerika e VeriutAmerika e Jug" + + "utOqeaniAfrika PerëndimoreAmerika QendroreAfrika LindoreAfrika VerioreAf" + + "rika e MesmeAfrika JugoreAmerikëAmerika VerioreKaraibeAzia LindoreAzia J" + + "ugoreAzia JuglindoreEuropa JugoreAustralaziaMelaneziaRajoni MikronezianP" + + "olineziaAziAzia QendroreAzia PerëndimoreEuropëEuropa LindoreEuropa Verio" + + "reEuropa PerëndimoreAmerika Latine" + +var sqRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0011, 0x0019, 0x0033, 0x003d, 0x004e, 0x0056, 0x005f, 0x0065, 0x006c, 0x0077, 0x0082, 0x0091, 0x0097, 0x009f, 0x00a5, 0x00b3, 0x00be, 0x00d2, 0x00da, 0x00e4, 0x00ed, 0x00f9, 0x0101, 0x0108, 0x010f, 0x0114, 0x0124, 0x012c, 0x0132, 0x0138, 0x014a, - 0x0150, 0x0157, 0x015c, 0x016b, 0x0174, 0x017e, 0x0185, 0x018b, - 0x0197, 0x01a5, 0x01c1, 0x01d1, 0x01d8, 0x01e8, 0x01f2, 0x01f6, - 0x01fd, 0x0202, 0x0209, 0x021b, 0x0226, 0x022b, 0x023a, 0x0242, - 0x0259, 0x025e, 0x026d, 0x0275, 0x0281, 0x0288, 0x0292, 0x029b, + 0x0150, 0x0157, 0x015c, 0x0168, 0x0171, 0x017b, 0x0182, 0x0188, + 0x0194, 0x01a2, 0x01bf, 0x01cf, 0x01d6, 0x01e6, 0x01f0, 0x01f4, + 0x01fb, 0x0200, 0x0207, 0x0219, 0x0224, 0x0229, 0x0238, 0x0240, + 0x0257, 0x025c, 0x0261, 0x0269, 0x0275, 0x027c, 0x0286, 0x028f, // Entry 40 - 7F - 0x02af, 0x02b6, 0x02c5, 0x02cc, 0x02d2, 0x02d8, 0x02ed, 0x02f3, - 0x02fa, 0x0300, 0x0311, 0x0311, 0x031a, 0x031f, 0x032e, 0x0337, - 0x0343, 0x034a, 0x034f, 0x0364, 0x036c, 0x0374, 0x0384, 0x038b, - 0x0390, 0x039a, 0x03a4, 0x03aa, 0x03af, 0x03b8, 0x03cb, 0x03d0, - 0x03fe, 0x0408, 0x040c, 0x0417, 0x041f, 0x0431, 0x0453, 0x045b, - 0x0461, 0x0466, 0x046d, 0x047b, 0x0483, 0x048b, 0x0491, 0x04a0, - 0x04a4, 0x04c7, 0x04cb, 0x04cf, 0x04d7, 0x04dc, 0x04e3, 0x04ec, - 0x04f3, 0x04f9, 0x04fe, 0x0507, 0x0510, 0x0518, 0x051e, 0x0532, + 0x02a3, 0x02aa, 0x02b9, 0x02c0, 0x02c6, 0x02cc, 0x02e1, 0x02e7, + 0x02ee, 0x02f4, 0x0305, 0x030e, 0x0317, 0x031c, 0x032b, 0x0334, + 0x0340, 0x0347, 0x034c, 0x0361, 0x0369, 0x0371, 0x0381, 0x0388, + 0x038d, 0x0397, 0x03a1, 0x03a7, 0x03ac, 0x03b5, 0x03c8, 0x03cd, + 0x03fb, 0x0405, 0x0409, 0x0414, 0x041c, 0x042d, 0x044f, 0x0457, + 0x045d, 0x0462, 0x0469, 0x0477, 0x047f, 0x0487, 0x048d, 0x049c, + 0x04a0, 0x04c3, 0x04c7, 0x04cb, 0x04d3, 0x04d8, 0x04df, 0x04e8, + 0x04ef, 0x04f5, 0x04fa, 0x0503, 0x050c, 0x0514, 0x051a, 0x052e, // Entry 80 - BF - 0x0541, 0x054f, 0x0555, 0x0562, 0x056c, 0x0570, 0x0575, 0x0581, - 0x058d, 0x0597, 0x059d, 0x05a3, 0x05aa, 0x05b4, 0x05ba, 0x05be, - 0x05c3, 0x05c9, 0x05d0, 0x05d8, 0x05e4, 0x05ee, 0x05fd, 0x0605, - 0x0609, 0x0618, 0x061f, 0x062c, 0x0646, 0x0650, 0x0659, 0x0662, - 0x0668, 0x0671, 0x0678, 0x067e, 0x0686, 0x068d, 0x0695, 0x069b, - 0x06a9, 0x06ae, 0x06bd, 0x06c3, 0x06cc, 0x06d4, 0x06dc, 0x06e1, - 0x06e6, 0x06ea, 0x06f7, 0x06fb, 0x0701, 0x0705, 0x0717, 0x0729, - 0x0731, 0x0739, 0x073f, 0x0755, 0x0763, 0x076d, 0x0783, 0x078c, + 0x053d, 0x054b, 0x0551, 0x055e, 0x0568, 0x056c, 0x0571, 0x057d, + 0x0589, 0x0593, 0x0599, 0x059f, 0x05a6, 0x05b0, 0x05b6, 0x05ba, + 0x05bf, 0x05c5, 0x05cc, 0x05d4, 0x05e0, 0x05ea, 0x05f9, 0x0601, + 0x0605, 0x0614, 0x061b, 0x0627, 0x0641, 0x064b, 0x0654, 0x065d, + 0x0663, 0x066c, 0x0673, 0x0679, 0x0681, 0x0688, 0x0690, 0x0696, + 0x06a4, 0x06a9, 0x06b8, 0x06be, 0x06c7, 0x06cf, 0x06d7, 0x06dc, + 0x06e1, 0x06e5, 0x06f2, 0x06f6, 0x06fc, 0x0700, 0x0712, 0x0724, + 0x072c, 0x0734, 0x073a, 0x0750, 0x075e, 0x0768, 0x077e, 0x0787, // Entry C0 - FF - 0x0791, 0x0799, 0x079e, 0x07c2, 0x07c9, 0x07cf, 0x07d4, 0x07d8, - 0x07df, 0x07ed, 0x07fb, 0x0804, 0x0809, 0x080e, 0x0816, 0x0823, - 0x082b, 0x083f, 0x0847, 0x0852, 0x085c, 0x0863, 0x0869, 0x0871, - 0x087f, 0x0892, 0x089a, 0x08a5, 0x08a9, 0x08b4, 0x08c3, 0x08da, - 0x08de, 0x08f8, 0x08fc, 0x0905, 0x0910, 0x0917, 0x0922, 0x092e, - 0x0934, 0x0939, 0x093e, 0x094f, 0x0955, 0x095b, 0x0962, 0x096a, - 0x0971, 0x0990, 0x09a2, 0x09c3, 0x09ca, 0x09d4, 0x09db, 0x09f6, - 0x0a00, 0x0a1c, 0x0a38, 0x0a3f, 0x0a46, 0x0a55, 0x0a5a, 0x0a61, + 0x078c, 0x0794, 0x0799, 0x07bd, 0x07c4, 0x07ca, 0x07cf, 0x07d3, + 0x07da, 0x07e8, 0x07f6, 0x07ff, 0x0804, 0x0809, 0x0811, 0x081e, + 0x0826, 0x083c, 0x0844, 0x084f, 0x0859, 0x0860, 0x0866, 0x086e, + 0x087c, 0x0891, 0x0899, 0x08a4, 0x08a8, 0x08b3, 0x08c2, 0x08d9, + 0x08dd, 0x08f7, 0x08fb, 0x0904, 0x090f, 0x0916, 0x0921, 0x092d, + 0x0933, 0x0938, 0x093d, 0x094e, 0x0954, 0x095a, 0x0961, 0x0969, + 0x0970, 0x098f, 0x09a1, 0x09c2, 0x09c9, 0x09d3, 0x09da, 0x09f5, + 0x09ff, 0x0a1b, 0x0a39, 0x0a40, 0x0a47, 0x0a56, 0x0a5b, 0x0a62, // Entry 100 - 13F - 0x0a66, 0x0a6d, 0x0a7b, 0x0a81, 0x0a89, 0x0a93, 0x0a97, 0x0a9e, - 0x0aae, 0x0abd, 0x0ac3, 0x0ad6, 0x0ae6, 0x0af4, 0x0b02, 0x0b10, - 0x0b1d, 0x0b25, 0x0b34, 0x0b3b, 0x0b47, 0x0b52, 0x0b61, 0x0b6e, - 0x0b79, 0x0b82, 0x0b94, 0x0b9d, 0x0ba0, 0x0bad, 0x0bbe, 0x0bc5, - 0x0bd3, 0x0be1, 0x0bf4, 0x0c02, -} // Size: 608 bytes - -const srRegionStr string = "" + // Size: 5976 bytes + 0x0a67, 0x0a6e, 0x0a7c, 0x0a82, 0x0a8a, 0x0a94, 0x0a98, 0x0a9f, + 0x0aaf, 0x0abe, 0x0ac4, 0x0ad7, 0x0ae7, 0x0af5, 0x0b03, 0x0b11, + 0x0b1e, 0x0b26, 0x0b35, 0x0b3c, 0x0b48, 0x0b53, 0x0b62, 0x0b6f, + 0x0b7a, 0x0b83, 0x0b95, 0x0b9e, 0x0ba1, 0x0bae, 0x0bbf, 0x0bc6, + 0x0bd4, 0x0be2, 0x0bf5, 0x0bf5, 0x0c03, +} // Size: 610 bytes + +const srRegionStr string = "" + // Size: 6047 bytes "Острво АсенсионАндораУједињени Арапски ЕмиратиАвганистанАнтигва и Барбуд" + "аАнгвилаАлбанијаЈерменијаАнголаАнтарктикАргентинаАмеричка СамоаАустрија" + "АустралијаАрубаОландска ОстрваАзербејџанБосна и ХерцеговинаБарбадосБанг" + - "ладешБелгијаБуркина ФасоБугарскаБахреинБурундиБенинСен БартелемиБермуда" + - "БрунејБоливијаКарипска ХоландијаБразилБахамиБутанОстрво БувеБоцванаБело" + - "русијаБелизеКанадаКокосова (Килингова) ОстрваКонго - КиншасаЦентралноаф" + - "ричка РепубликаКонго - БразавилШвајцарскаОбала СлоновачеКукова ОстрваЧи" + - "леКамерунКинаКолумбијаОстрво КлипертонКостарикаКубаЗеленортска ОстрваКу" + - "расаоБожићно ОстрвоКипарЧешкаНемачкаДијего ГарсијаЏибутиДанскаДоминикаД" + - "оминиканска РепубликаАлжирСеута и МелиљаЕквадорЕстонијаЕгипатЗападна Са" + - "хараЕритрејаШпанијаЕтиопијаЕвропска УнијаФинскаФиџиФокландска ОстрваМик" + - "ронезијаФарска ОстрваФранцускаГабонУједињено КраљевствоГренадаГрузијаФр" + - "анцуска ГвајанаГернзиГанаГибралтарГренландГамбијаГвинејаГваделупЕкватор" + - "ијална ГвинејаГрчкаЈужна Џорџија и Јужна Сендвичка ОстрваГватемалаГуамГ" + - "винеја-БисаоГвајанаСАР Хонгконг (Кина)Острво Херд и Мекдоналдова острва" + - "ХондурасХрватскаХаитиМађарскаКанарска ОстрваИндонезијаИрскаИзраелОстрво" + - " МанИндијаБританска територија Индијског океанаИракИранИсландИталијаЏерз" + - "иЈамајкаЈорданЈапанКенијаКиргистанКамбоџаКирибатиКоморска ОстрваСент Ки" + - "тс и НевисСеверна КорејаЈужна КорејаКувајтКајманска ОстрваКазахстанЛаос" + - "ЛибанСвета ЛуцијаЛихтенштајнШри ЛанкаЛиберијаЛесотоЛитванијаЛуксембургЛ" + - "етонијаЛибијаМарокоМонакоМолдавијаЦрна ГораСвети Мартин (Француска)Мада" + - "гаскарМаршалска ОстрваМакедонијаМалиМијанмар (Бурма)МонголијаСАР Макао " + - "(Кина)Северна Маријанска ОстрваМартиникМауританијаМонсератМалтаМаурицију" + - "сМалдивиМалавиМексикоМалезијаМозамбикНамибијаНова КаледонијаНигерОстрво" + - " НорфокНигеријаНикарагваХоландијаНорвешкаНепалНауруНиуеНови ЗеландОманПа" + - "намаПеруФранцуска ПолинезијаПапуа Нова ГвинејаФилипиниПакистанПољскаСен" + - " Пјер и МикелонПиткернПорторикоПалестинске територијеПортугалијаПалауПар" + - "агвајКатарОкеанија (удаљена острва)РеинионРумунијаСрбијаРусијаРуандаСау" + - "дијска АрабијаСоломонска ОстрваСејшелиСуданШведскаСингапурСвета ЈеленаС" + - "ловенијаСвалбард и Јан МајенСловачкаСијера ЛеонеСан МариноСенегалСомали" + - "јаСуринамЈужни СуданСао Томе и ПринципеСалвадорСвети Мартин (Холандија)" + - "СиријаСвазилендТристан да КуњаОстрва Туркс и КаикосЧадФранцуске Јужне Т" + - "ериторијеТогоТајландТаџикистанТокелауИсточни ТиморТуркменистанТунисТонг" + - "аТурскаТринидад и ТобагоТувалуТајванТанзанијаУкрајинаУгандаУдаљена остр" + - "ва САДУједињене нацијеСједињене ДржавеУругвајУзбекистанВатиканСент Винс" + - "ент и ГренадиниВенецуелаБританска Девичанска ОстрваАмеричка Девичанска " + - "ОстрваВијетнамВануатуВалис и ФутунаСамоаКосовоЈеменМајотЈужноафричка Ре" + - "публикаЗамбијаЗимбабвеНепознат регионсветАфрикаСеверноамерички континен" + - "тЈужна АмерикаОкеанијаЗападна АфрикаЦентрална АмерикаИсточна АфрикаСеве" + - "рна АфрикаЦентрална АфрикаЈужна АфрикаСеверна и Јужна АмерикаСеверна Ам" + - "ерикаКарибиИсточна АзијаЈужна АзијаЈугоисточна АзијаЈужна ЕвропаАустрал" + - "ија и Нови ЗеландМеланезијаМикронезијски регионПолинезијаАзијаЦентрална" + - " АзијаЗападна АзијаЕвропаИсточна ЕвропаСеверна ЕвропаЗападна ЕвропаЛатин" + - "ска Америка" - -var srRegionIdx = []uint16{ // 292 elements + "ладешБелгијаБуркина ФасоБугарскаБахреинБурундиБенинСвети БартоломејБерм" + + "удаБрунејБоливијаКарипска ХоландијаБразилБахамиБутанОстрво БувеБоцванаБ" + + "елорусијаБелизеКанадаКокосова (Килингова) ОстрваКонго - КиншасаЦентралн" + + "оафричка РепубликаКонго - БразавилШвајцарскаОбала Слоноваче (Кот д’Ивоа" + + "р)Кукова ОстрваЧилеКамерунКинаКолумбијаОстрво КлипертонКостарикаКубаЗел" + + "енортска ОстрваКурасаоБожићно ОстрвоКипарЧешкаНемачкаДијего ГарсијаЏибу" + + "тиДанскаДоминикаДоминиканска РепубликаАлжирСеута и МелиљаЕквадорЕстониј" + + "аЕгипатЗападна СахараЕритрејаШпанијаЕтиопијаЕвропска УнијаЕврозонаФинск" + + "аФиџиФокландска ОстрваМикронезијаФарска ОстрваФранцускаГабонУједињено К" + + "раљевствоГренадаГрузијаФранцуска ГвајанаГернзиГанаГибралтарГренландГамб" + + "ијаГвинејаГваделупЕкваторијална ГвинејаГрчкаЈужна Џорџија и Јужна Сендв" + + "ичка ОстрваГватемалаГуамГвинеја-БисаоГвајанаСАР Хонгконг (Кина)Острво Х" + + "ерд и Мекдоналдова острваХондурасХрватскаХаитиМађарскаКанарска ОстрваИн" + + "донезијаИрскаИзраелОстрво МанИндијаБританска територија Индијског океан" + + "аИракИранИсландИталијаЏерзиЈамајкаЈорданЈапанКенијаКиргистанКамбоџаКири" + + "батиКоморска ОстрваСент Китс и НевисСеверна КорејаЈужна КорејаКувајтКај" + + "манска ОстрваКазахстанЛаосЛибанСвета ЛуцијаЛихтенштајнШри ЛанкаЛиберија" + + "ЛесотоЛитванијаЛуксембургЛетонијаЛибијаМарокоМонакоМолдавијаЦрна ГораСв" + + "ети Мартин (Француска)МадагаскарМаршалска ОстрваМакедонијаМалиМијанмар " + + "(Бурма)МонголијаСАР Макао (Кина)Северна Маријанска ОстрваМартиникМаурита" + + "нијаМонсератМалтаМаурицијусМалдивиМалавиМексикоМалезијаМозамбикНамибија" + + "Нова КаледонијаНигерОстрво НорфокНигеријаНикарагваХоландијаНорвешкаНепа" + + "лНауруНиуеНови ЗеландОманПанамаПеруФранцуска ПолинезијаПапуа Нова Гвине" + + "јаФилипиниПакистанПољскаСен Пјер и МикелонПиткернПорторикоПалестинске т" + + "ериторијеПортугалијаПалауПарагвајКатарОкеанија (удаљена острва)РеинионР" + + "умунијаСрбијаРусијаРуандаСаудијска АрабијаСоломонска ОстрваСејшелиСудан" + + "ШведскаСингапурСвета ЈеленаСловенијаСвалбард и Јан МајенСловачкаСијера " + + "ЛеонеСан МариноСенегалСомалијаСуринамЈужни СуданСао Томе и ПринципеСалв" + + "адорСвети Мартин (Холандија)СиријаСвазилендТристан да КуњаОстрва Туркс " + + "и КаикосЧадФранцуске Јужне ТериторијеТогоТајландТаџикистанТокелауТимор-" + + "Лесте (Источни Тимор)ТуркменистанТунисТонгаТурскаТринидад и ТобагоТувал" + + "уТајванТанзанијаУкрајинаУгандаУдаљена острва САДУједињене нацијеСједиње" + + "не ДржавеУругвајУзбекистанВатиканСент Винсент и ГренадиниВенецуелаБрита" + + "нска Девичанска ОстрваАмеричка Девичанска ОстрваВијетнамВануатуВалис и " + + "ФутунаСамоаКосовоЈеменМајотЈужноафричка РепубликаЗамбијаЗимбабвеНепозна" + + "т регионсветАфрикаСеверноамерички континентЈужна АмерикаОкеанијаЗападна" + + " АфрикаЦентрална АмерикаИсточна АфрикаСеверна АфрикаЦентрална АфрикаЈужн" + + "а АфрикаСеверна и Јужна АмерикаСеверна АмерикаКарибиИсточна АзијаЈужна " + + "АзијаЈугоисточна АзијаЈужна ЕвропаАустралија и Нови ЗеландМеланезијаМик" + + "ронезијски регионПолинезијаАзијаЦентрална АзијаЗападна АзијаЕвропаИсточ" + + "на ЕвропаСеверна ЕвропаЗападна ЕвропаЛатинска Америка" + +var srRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x001d, 0x0029, 0x0059, 0x006d, 0x008d, 0x009b, 0x00ab, 0x00bd, 0x00c9, 0x00db, 0x00ed, 0x0108, 0x0118, 0x012c, 0x0136, 0x0153, 0x0167, 0x018b, 0x019b, 0x01ad, 0x01bb, 0x01d2, 0x01e2, - 0x01f0, 0x01fe, 0x0208, 0x0221, 0x022f, 0x023b, 0x024b, 0x026e, - 0x027a, 0x0286, 0x0290, 0x02a5, 0x02b3, 0x02c7, 0x02d3, 0x02df, - 0x0311, 0x032c, 0x035f, 0x037c, 0x0390, 0x03ad, 0x03c6, 0x03ce, - 0x03dc, 0x03e4, 0x03f6, 0x0415, 0x0427, 0x042f, 0x0452, 0x0460, - 0x047b, 0x0485, 0x048f, 0x049d, 0x04b8, 0x04c4, 0x04d0, 0x04e0, + 0x01f0, 0x01fe, 0x0208, 0x0227, 0x0235, 0x0241, 0x0251, 0x0274, + 0x0280, 0x028c, 0x0296, 0x02ab, 0x02b9, 0x02cd, 0x02d9, 0x02e5, + 0x0317, 0x0332, 0x0365, 0x0382, 0x0396, 0x03cc, 0x03e5, 0x03ed, + 0x03fb, 0x0403, 0x0415, 0x0434, 0x0446, 0x044e, 0x0471, 0x047f, + 0x049a, 0x04a4, 0x04ae, 0x04bc, 0x04d7, 0x04e3, 0x04ef, 0x04ff, // Entry 40 - 7F - 0x050b, 0x0515, 0x052f, 0x053d, 0x054d, 0x0559, 0x0574, 0x0584, - 0x0592, 0x05a2, 0x05bd, 0x05bd, 0x05c9, 0x05d1, 0x05f2, 0x0608, - 0x0621, 0x0633, 0x063d, 0x0664, 0x0672, 0x0680, 0x06a1, 0x06ad, - 0x06b5, 0x06c7, 0x06d7, 0x06e5, 0x06f3, 0x0703, 0x072c, 0x0736, - 0x077d, 0x078f, 0x0797, 0x07b0, 0x07be, 0x07e0, 0x081e, 0x082e, - 0x083e, 0x0848, 0x0858, 0x0875, 0x0889, 0x0893, 0x089f, 0x08b2, - 0x08be, 0x0905, 0x090d, 0x0915, 0x0921, 0x092f, 0x0939, 0x0947, - 0x0953, 0x095d, 0x0969, 0x097b, 0x0989, 0x0999, 0x09b6, 0x09d5, + 0x052a, 0x0534, 0x054e, 0x055c, 0x056c, 0x0578, 0x0593, 0x05a3, + 0x05b1, 0x05c1, 0x05dc, 0x05ec, 0x05f8, 0x0600, 0x0621, 0x0637, + 0x0650, 0x0662, 0x066c, 0x0693, 0x06a1, 0x06af, 0x06d0, 0x06dc, + 0x06e4, 0x06f6, 0x0706, 0x0714, 0x0722, 0x0732, 0x075b, 0x0765, + 0x07ac, 0x07be, 0x07c6, 0x07df, 0x07ed, 0x080f, 0x084d, 0x085d, + 0x086d, 0x0877, 0x0887, 0x08a4, 0x08b8, 0x08c2, 0x08ce, 0x08e1, + 0x08ed, 0x0934, 0x093c, 0x0944, 0x0950, 0x095e, 0x0968, 0x0976, + 0x0982, 0x098c, 0x0998, 0x09aa, 0x09b8, 0x09c8, 0x09e5, 0x0a04, // Entry 80 - BF - 0x09f0, 0x0a07, 0x0a13, 0x0a32, 0x0a44, 0x0a4c, 0x0a56, 0x0a6d, - 0x0a83, 0x0a94, 0x0aa4, 0x0ab0, 0x0ac2, 0x0ad6, 0x0ae6, 0x0af2, - 0x0afe, 0x0b0a, 0x0b1c, 0x0b2d, 0x0b59, 0x0b6d, 0x0b8c, 0x0ba0, - 0x0ba8, 0x0bc5, 0x0bd7, 0x0bf3, 0x0c23, 0x0c33, 0x0c49, 0x0c59, - 0x0c63, 0x0c77, 0x0c85, 0x0c91, 0x0c9f, 0x0caf, 0x0cbf, 0x0ccf, - 0x0cec, 0x0cf6, 0x0d0f, 0x0d1f, 0x0d31, 0x0d43, 0x0d53, 0x0d5d, - 0x0d67, 0x0d6f, 0x0d84, 0x0d8c, 0x0d98, 0x0da0, 0x0dc7, 0x0de9, - 0x0df9, 0x0e09, 0x0e15, 0x0e36, 0x0e44, 0x0e56, 0x0e81, 0x0e97, + 0x0a1f, 0x0a36, 0x0a42, 0x0a61, 0x0a73, 0x0a7b, 0x0a85, 0x0a9c, + 0x0ab2, 0x0ac3, 0x0ad3, 0x0adf, 0x0af1, 0x0b05, 0x0b15, 0x0b21, + 0x0b2d, 0x0b39, 0x0b4b, 0x0b5c, 0x0b88, 0x0b9c, 0x0bbb, 0x0bcf, + 0x0bd7, 0x0bf4, 0x0c06, 0x0c22, 0x0c52, 0x0c62, 0x0c78, 0x0c88, + 0x0c92, 0x0ca6, 0x0cb4, 0x0cc0, 0x0cce, 0x0cde, 0x0cee, 0x0cfe, + 0x0d1b, 0x0d25, 0x0d3e, 0x0d4e, 0x0d60, 0x0d72, 0x0d82, 0x0d8c, + 0x0d96, 0x0d9e, 0x0db3, 0x0dbb, 0x0dc7, 0x0dcf, 0x0df6, 0x0e18, + 0x0e28, 0x0e38, 0x0e44, 0x0e65, 0x0e73, 0x0e85, 0x0eb0, 0x0ec6, // Entry C0 - FF - 0x0ea1, 0x0eb1, 0x0ebb, 0x0ee9, 0x0ef7, 0x0f07, 0x0f13, 0x0f1f, - 0x0f2b, 0x0f4c, 0x0f6d, 0x0f7b, 0x0f85, 0x0f93, 0x0fa3, 0x0fba, - 0x0fcc, 0x0ff1, 0x1001, 0x1018, 0x102b, 0x1039, 0x1049, 0x1057, - 0x106c, 0x108f, 0x109f, 0x10cb, 0x10d7, 0x10e9, 0x1105, 0x112c, - 0x1132, 0x1164, 0x116c, 0x117a, 0x118e, 0x119c, 0x11b5, 0x11cd, - 0x11d7, 0x11e1, 0x11ed, 0x120d, 0x1219, 0x1225, 0x1237, 0x1247, - 0x1253, 0x1275, 0x1294, 0x12b3, 0x12c1, 0x12d5, 0x12e3, 0x1310, - 0x1322, 0x1356, 0x1388, 0x1398, 0x13a6, 0x13c0, 0x13ca, 0x13d6, + 0x0ed0, 0x0ee0, 0x0eea, 0x0f18, 0x0f26, 0x0f36, 0x0f42, 0x0f4e, + 0x0f5a, 0x0f7b, 0x0f9c, 0x0faa, 0x0fb4, 0x0fc2, 0x0fd2, 0x0fe9, + 0x0ffb, 0x1020, 0x1030, 0x1047, 0x105a, 0x1068, 0x1078, 0x1086, + 0x109b, 0x10be, 0x10ce, 0x10fa, 0x1106, 0x1118, 0x1134, 0x115b, + 0x1161, 0x1193, 0x119b, 0x11a9, 0x11bd, 0x11cb, 0x11fc, 0x1214, + 0x121e, 0x1228, 0x1234, 0x1254, 0x1260, 0x126c, 0x127e, 0x128e, + 0x129a, 0x12bc, 0x12db, 0x12fa, 0x1308, 0x131c, 0x132a, 0x1357, + 0x1369, 0x139d, 0x13cf, 0x13df, 0x13ed, 0x1407, 0x1411, 0x141d, // Entry 100 - 13F - 0x13e0, 0x13ea, 0x1415, 0x1423, 0x1433, 0x1450, 0x1458, 0x1464, - 0x1495, 0x14ae, 0x14be, 0x14d9, 0x14fa, 0x1515, 0x1530, 0x154f, - 0x1566, 0x1591, 0x15ae, 0x15ba, 0x15d3, 0x15e8, 0x1609, 0x1620, - 0x164d, 0x1661, 0x1688, 0x169c, 0x16a6, 0x16c3, 0x16dc, 0x16e8, - 0x1703, 0x171e, 0x1739, 0x1758, -} // Size: 608 bytes - -const srLatnRegionStr string = "" + // Size: 3143 bytes + 0x1427, 0x1431, 0x145c, 0x146a, 0x147a, 0x1497, 0x149f, 0x14ab, + 0x14dc, 0x14f5, 0x1505, 0x1520, 0x1541, 0x155c, 0x1577, 0x1596, + 0x15ad, 0x15d8, 0x15f5, 0x1601, 0x161a, 0x162f, 0x1650, 0x1667, + 0x1694, 0x16a8, 0x16cf, 0x16e3, 0x16ed, 0x170a, 0x1723, 0x172f, + 0x174a, 0x1765, 0x1780, 0x1780, 0x179f, +} // Size: 610 bytes + +const srLatnRegionStr string = "" + // Size: 3184 bytes "Ostrvo AsensionAndoraUjedinjeni Arapski EmiratiAvganistanAntigva i Barbu" + "daAngvilaAlbanijaJermenijaAngolaAntarktikArgentinaAmerička SamoaAustrija" + "AustralijaArubaOlandska OstrvaAzerbejdžanBosna i HercegovinaBarbadosBang" + - "ladešBelgijaBurkina FasoBugarskaBahreinBurundiBeninSen BartelemiBermudaB" + - "runejBolivijaKaripska HolandijaBrazilBahamiButanOstrvo BuveBocvanaBeloru" + - "sijaBelizeKanadaKokosova (Kilingova) OstrvaKongo - KinšasaCentralnoafrič" + - "ka RepublikaKongo - BrazavilŠvajcarskaObala SlonovačeKukova OstrvaČileKa" + - "merunKinaKolumbijaOstrvo KlipertonKostarikaKubaZelenortska OstrvaKurasao" + - "Božićno OstrvoKiparČeškaNemačkaDijego GarsijaDžibutiDanskaDominikaDomini" + - "kanska RepublikaAlžirSeuta i MeliljaEkvadorEstonijaEgipatZapadna SaharaE" + - "ritrejaŠpanijaEtiopijaEvropska UnijaFinskaFidžiFoklandska OstrvaMikronez" + - "ijaFarska OstrvaFrancuskaGabonUjedinjeno KraljevstvoGrenadaGruzijaFrancu" + - "ska GvajanaGernziGanaGibraltarGrenlandGambijaGvinejaGvadelupEkvatorijaln" + - "a GvinejaGrčkaJužna Džordžija i Južna Sendvička OstrvaGvatemalaGuamGvine" + - "ja-BisaoGvajanaSAR Hongkong (Kina)Ostrvo Herd i Mekdonaldova ostrvaHondu" + - "rasHrvatskaHaitiMađarskaKanarska OstrvaIndonezijaIrskaIzraelOstrvo ManIn" + - "dijaBritanska teritorija Indijskog okeanaIrakIranIslandItalijaDžerziJama" + - "jkaJordanJapanKenijaKirgistanKambodžaKiribatiKomorska OstrvaSent Kits i " + - "NevisSeverna KorejaJužna KorejaKuvajtKajmanska OstrvaKazahstanLaosLibanS" + - "veta LucijaLihtenštajnŠri LankaLiberijaLesotoLitvanijaLuksemburgLetonija" + - "LibijaMarokoMonakoMoldavijaCrna GoraSveti Martin (Francuska)MadagaskarMa" + - "ršalska OstrvaMakedonijaMaliMijanmar (Burma)MongolijaSAR Makao (Kina)Sev" + - "erna Marijanska OstrvaMartinikMauritanijaMonseratMaltaMauricijusMaldiviM" + - "alaviMeksikoMalezijaMozambikNamibijaNova KaledonijaNigerOstrvo NorfokNig" + - "erijaNikaragvaHolandijaNorveškaNepalNauruNiueNovi ZelandOmanPanamaPeruFr" + - "ancuska PolinezijaPapua Nova GvinejaFilipiniPakistanPoljskaSen Pjer i Mi" + - "kelonPitkernPortorikoPalestinske teritorijePortugalijaPalauParagvajKatar" + - "Okeanija (udaljena ostrva)ReinionRumunijaSrbijaRusijaRuandaSaudijska Ara" + - "bijaSolomonska OstrvaSejšeliSudanŠvedskaSingapurSveta JelenaSlovenijaSva" + - "lbard i Jan MajenSlovačkaSijera LeoneSan MarinoSenegalSomalijaSurinamJuž" + - "ni SudanSao Tome i PrincipeSalvadorSveti Martin (Holandija)SirijaSvazile" + - "ndTristan da KunjaOstrva Turks i KaikosČadFrancuske Južne TeritorijeTogo" + - "TajlandTadžikistanTokelauIstočni TimorTurkmenistanTunisTongaTurskaTrinid" + - "ad i TobagoTuvaluTajvanTanzanijaUkrajinaUgandaUdaljena ostrva SADUjedinj" + - "ene nacijeSjedinjene DržaveUrugvajUzbekistanVatikanSent Vinsent i Grenad" + - "iniVenecuelaBritanska Devičanska OstrvaAmerička Devičanska OstrvaVijetna" + - "mVanuatuValis i FutunaSamoaKosovoJemenMajotJužnoafrička RepublikaZambija" + - "ZimbabveNepoznat regionsvetAfrikaSevernoamerički kontinentJužna AmerikaO" + - "keanijaZapadna AfrikaCentralna AmerikaIstočna AfrikaSeverna AfrikaCentra" + - "lna AfrikaJužna AfrikaSeverna i Južna AmerikaSeverna AmerikaKaribiIstočn" + - "a AzijaJužna AzijaJugoistočna AzijaJužna EvropaAustralija i Novi ZelandM" + - "elanezijaMikronezijski regionPolinezijaAzijaCentralna AzijaZapadna Azija" + - "EvropaIstočna EvropaSeverna EvropaZapadna EvropaLatinska Amerika" - -var srLatnRegionIdx = []uint16{ // 292 elements + "ladešBelgijaBurkina FasoBugarskaBahreinBurundiBeninSveti BartolomejBermu" + + "daBrunejBolivijaKaripska HolandijaBrazilBahamiButanOstrvo BuveBocvanaBel" + + "orusijaBelizeKanadaKokosova (Kilingova) OstrvaKongo - KinšasaCentralnoaf" + + "rička RepublikaKongo - BrazavilŠvajcarskaObala Slonovače (Kot d’Ivoar)Ku" + + "kova OstrvaČileKamerunKinaKolumbijaOstrvo KlipertonKostarikaKubaZelenort" + + "ska OstrvaKurasaoBožićno OstrvoKiparČeškaNemačkaDijego GarsijaDžibutiDan" + + "skaDominikaDominikanska RepublikaAlžirSeuta i MeliljaEkvadorEstonijaEgip" + + "atZapadna SaharaEritrejaŠpanijaEtiopijaEvropska UnijaEvrozonaFinskaFidži" + + "Foklandska OstrvaMikronezijaFarska OstrvaFrancuskaGabonUjedinjeno Kralje" + + "vstvoGrenadaGruzijaFrancuska GvajanaGernziGanaGibraltarGrenlandGambijaGv" + + "inejaGvadelupEkvatorijalna GvinejaGrčkaJužna Džordžija i Južna Sendvička" + + " OstrvaGvatemalaGuamGvineja-BisaoGvajanaSAR Hongkong (Kina)Ostrvo Herd i" + + " Mekdonaldova ostrvaHondurasHrvatskaHaitiMađarskaKanarska OstrvaIndonezi" + + "jaIrskaIzraelOstrvo ManIndijaBritanska teritorija Indijskog okeanaIrakIr" + + "anIslandItalijaDžerziJamajkaJordanJapanKenijaKirgistanKambodžaKiribatiKo" + + "morska OstrvaSent Kits i NevisSeverna KorejaJužna KorejaKuvajtKajmanska " + + "OstrvaKazahstanLaosLibanSveta LucijaLihtenštajnŠri LankaLiberijaLesotoLi" + + "tvanijaLuksemburgLetonijaLibijaMarokoMonakoMoldavijaCrna GoraSveti Marti" + + "n (Francuska)MadagaskarMaršalska OstrvaMakedonijaMaliMijanmar (Burma)Mon" + + "golijaSAR Makao (Kina)Severna Marijanska OstrvaMartinikMauritanijaMonser" + + "atMaltaMauricijusMaldiviMalaviMeksikoMalezijaMozambikNamibijaNova Kaledo" + + "nijaNigerOstrvo NorfokNigerijaNikaragvaHolandijaNorveškaNepalNauruNiueNo" + + "vi ZelandOmanPanamaPeruFrancuska PolinezijaPapua Nova GvinejaFilipiniPak" + + "istanPoljskaSen Pjer i MikelonPitkernPortorikoPalestinske teritorijePort" + + "ugalijaPalauParagvajKatarOkeanija (udaljena ostrva)ReinionRumunijaSrbija" + + "RusijaRuandaSaudijska ArabijaSolomonska OstrvaSejšeliSudanŠvedskaSingapu" + + "rSveta JelenaSlovenijaSvalbard i Jan MajenSlovačkaSijera LeoneSan Marino" + + "SenegalSomalijaSurinamJužni SudanSao Tome i PrincipeSalvadorSveti Martin" + + " (Holandija)SirijaSvazilendTristan da KunjaOstrva Turks i KaikosČadFranc" + + "uske Južne TeritorijeTogoTajlandTadžikistanTokelauTimor-Leste (Istočni T" + + "imor)TurkmenistanTunisTongaTurskaTrinidad i TobagoTuvaluTajvanTanzanijaU" + + "krajinaUgandaUdaljena ostrva SADUjedinjene nacijeSjedinjene DržaveUrugva" + + "jUzbekistanVatikanSent Vinsent i GrenadiniVenecuelaBritanska Devičanska " + + "OstrvaAmerička Devičanska OstrvaVijetnamVanuatuValis i FutunaSamoaKosovo" + + "JemenMajotJužnoafrička RepublikaZambijaZimbabveNepoznat regionsvetAfrika" + + "Severnoamerički kontinentJužna AmerikaOkeanijaZapadna AfrikaCentralna Am" + + "erikaIstočna AfrikaSeverna AfrikaCentralna AfrikaJužna AfrikaSeverna i J" + + "užna AmerikaSeverna AmerikaKaribiIstočna AzijaJužna AzijaJugoistočna Azi" + + "jaJužna EvropaAustralija i Novi ZelandMelanezijaMikronezijski regionPoli" + + "nezijaAzijaCentralna AzijaZapadna AzijaEvropaIstočna EvropaSeverna Evrop" + + "aZapadna EvropaLatinska Amerika" + +var srLatnRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x000f, 0x0015, 0x002f, 0x0039, 0x004a, 0x0051, 0x0059, 0x0062, 0x0068, 0x0071, 0x007a, 0x0089, 0x0091, 0x009b, 0x00a0, 0x00af, 0x00bb, 0x00ce, 0x00d6, 0x00e0, 0x00e7, 0x00f3, 0x00fb, - 0x0102, 0x0109, 0x010e, 0x011b, 0x0122, 0x0128, 0x0130, 0x0142, - 0x0148, 0x014e, 0x0153, 0x015e, 0x0165, 0x016f, 0x0175, 0x017b, - 0x0196, 0x01a6, 0x01c1, 0x01d1, 0x01dc, 0x01ec, 0x01f9, 0x01fe, - 0x0205, 0x0209, 0x0212, 0x0222, 0x022b, 0x022f, 0x0241, 0x0248, - 0x0258, 0x025d, 0x0264, 0x026c, 0x027a, 0x0282, 0x0288, 0x0290, + 0x0102, 0x0109, 0x010e, 0x011e, 0x0125, 0x012b, 0x0133, 0x0145, + 0x014b, 0x0151, 0x0156, 0x0161, 0x0168, 0x0172, 0x0178, 0x017e, + 0x0199, 0x01a9, 0x01c4, 0x01d4, 0x01df, 0x01ff, 0x020c, 0x0211, + 0x0218, 0x021c, 0x0225, 0x0235, 0x023e, 0x0242, 0x0254, 0x025b, + 0x026b, 0x0270, 0x0277, 0x027f, 0x028d, 0x0295, 0x029b, 0x02a3, // Entry 40 - 7F - 0x02a6, 0x02ac, 0x02bb, 0x02c2, 0x02ca, 0x02d0, 0x02de, 0x02e6, - 0x02ee, 0x02f6, 0x0304, 0x0304, 0x030a, 0x0310, 0x0321, 0x032c, - 0x0339, 0x0342, 0x0347, 0x035d, 0x0364, 0x036b, 0x037c, 0x0382, - 0x0386, 0x038f, 0x0397, 0x039e, 0x03a5, 0x03ad, 0x03c2, 0x03c8, - 0x03f5, 0x03fe, 0x0402, 0x040f, 0x0416, 0x0429, 0x044a, 0x0452, - 0x045a, 0x045f, 0x0468, 0x0477, 0x0481, 0x0486, 0x048c, 0x0496, - 0x049c, 0x04c1, 0x04c5, 0x04c9, 0x04cf, 0x04d6, 0x04dd, 0x04e4, - 0x04ea, 0x04ef, 0x04f5, 0x04fe, 0x0507, 0x050f, 0x051e, 0x052f, + 0x02b9, 0x02bf, 0x02ce, 0x02d5, 0x02dd, 0x02e3, 0x02f1, 0x02f9, + 0x0301, 0x0309, 0x0317, 0x031f, 0x0325, 0x032b, 0x033c, 0x0347, + 0x0354, 0x035d, 0x0362, 0x0378, 0x037f, 0x0386, 0x0397, 0x039d, + 0x03a1, 0x03aa, 0x03b2, 0x03b9, 0x03c0, 0x03c8, 0x03dd, 0x03e3, + 0x0410, 0x0419, 0x041d, 0x042a, 0x0431, 0x0444, 0x0465, 0x046d, + 0x0475, 0x047a, 0x0483, 0x0492, 0x049c, 0x04a1, 0x04a7, 0x04b1, + 0x04b7, 0x04dc, 0x04e0, 0x04e4, 0x04ea, 0x04f1, 0x04f8, 0x04ff, + 0x0505, 0x050a, 0x0510, 0x0519, 0x0522, 0x052a, 0x0539, 0x054a, // Entry 80 - BF - 0x053d, 0x054a, 0x0550, 0x0560, 0x0569, 0x056d, 0x0572, 0x057e, - 0x058a, 0x0594, 0x059c, 0x05a2, 0x05ab, 0x05b5, 0x05bd, 0x05c3, - 0x05c9, 0x05cf, 0x05d8, 0x05e1, 0x05f9, 0x0603, 0x0614, 0x061e, - 0x0622, 0x0632, 0x063b, 0x064b, 0x0664, 0x066c, 0x0677, 0x067f, - 0x0684, 0x068e, 0x0695, 0x069b, 0x06a2, 0x06aa, 0x06b2, 0x06ba, - 0x06c9, 0x06ce, 0x06db, 0x06e3, 0x06ec, 0x06f5, 0x06fe, 0x0703, - 0x0708, 0x070c, 0x0717, 0x071b, 0x0721, 0x0725, 0x0739, 0x074b, - 0x0753, 0x075b, 0x0762, 0x0774, 0x077b, 0x0784, 0x079a, 0x07a5, + 0x0558, 0x0565, 0x056b, 0x057b, 0x0584, 0x0588, 0x058d, 0x0599, + 0x05a5, 0x05af, 0x05b7, 0x05bd, 0x05c6, 0x05d0, 0x05d8, 0x05de, + 0x05e4, 0x05ea, 0x05f3, 0x05fc, 0x0614, 0x061e, 0x062f, 0x0639, + 0x063d, 0x064d, 0x0656, 0x0666, 0x067f, 0x0687, 0x0692, 0x069a, + 0x069f, 0x06a9, 0x06b0, 0x06b6, 0x06bd, 0x06c5, 0x06cd, 0x06d5, + 0x06e4, 0x06e9, 0x06f6, 0x06fe, 0x0707, 0x0710, 0x0719, 0x071e, + 0x0723, 0x0727, 0x0732, 0x0736, 0x073c, 0x0740, 0x0754, 0x0766, + 0x076e, 0x0776, 0x077d, 0x078f, 0x0796, 0x079f, 0x07b5, 0x07c0, // Entry C0 - FF - 0x07aa, 0x07b2, 0x07b7, 0x07d1, 0x07d8, 0x07e0, 0x07e6, 0x07ec, - 0x07f2, 0x0803, 0x0814, 0x081c, 0x0821, 0x0829, 0x0831, 0x083d, - 0x0846, 0x085a, 0x0863, 0x086f, 0x0879, 0x0880, 0x0888, 0x088f, - 0x089b, 0x08ae, 0x08b6, 0x08ce, 0x08d4, 0x08dd, 0x08ed, 0x0902, - 0x0906, 0x0921, 0x0925, 0x092c, 0x0938, 0x093f, 0x094d, 0x0959, - 0x095e, 0x0963, 0x0969, 0x097a, 0x0980, 0x0986, 0x098f, 0x0997, - 0x099d, 0x09b0, 0x09c1, 0x09d3, 0x09da, 0x09e4, 0x09eb, 0x0a03, - 0x0a0c, 0x0a28, 0x0a44, 0x0a4c, 0x0a53, 0x0a61, 0x0a66, 0x0a6c, + 0x07c5, 0x07cd, 0x07d2, 0x07ec, 0x07f3, 0x07fb, 0x0801, 0x0807, + 0x080d, 0x081e, 0x082f, 0x0837, 0x083c, 0x0844, 0x084c, 0x0858, + 0x0861, 0x0875, 0x087e, 0x088a, 0x0894, 0x089b, 0x08a3, 0x08aa, + 0x08b6, 0x08c9, 0x08d1, 0x08e9, 0x08ef, 0x08f8, 0x0908, 0x091d, + 0x0921, 0x093c, 0x0940, 0x0947, 0x0953, 0x095a, 0x0976, 0x0982, + 0x0987, 0x098c, 0x0992, 0x09a3, 0x09a9, 0x09af, 0x09b8, 0x09c0, + 0x09c6, 0x09d9, 0x09ea, 0x09fc, 0x0a03, 0x0a0d, 0x0a14, 0x0a2c, + 0x0a35, 0x0a51, 0x0a6d, 0x0a75, 0x0a7c, 0x0a8a, 0x0a8f, 0x0a95, // Entry 100 - 13F - 0x0a71, 0x0a76, 0x0a8e, 0x0a95, 0x0a9d, 0x0aac, 0x0ab0, 0x0ab6, - 0x0ad0, 0x0ade, 0x0ae6, 0x0af4, 0x0b05, 0x0b14, 0x0b22, 0x0b32, - 0x0b3f, 0x0b57, 0x0b66, 0x0b6c, 0x0b7a, 0x0b86, 0x0b98, 0x0ba5, - 0x0bbd, 0x0bc7, 0x0bdb, 0x0be5, 0x0bea, 0x0bf9, 0x0c06, 0x0c0c, - 0x0c1b, 0x0c29, 0x0c37, 0x0c47, -} // Size: 608 bytes - -const svRegionStr string = "" + // Size: 2921 bytes + 0x0a9a, 0x0a9f, 0x0ab7, 0x0abe, 0x0ac6, 0x0ad5, 0x0ad9, 0x0adf, + 0x0af9, 0x0b07, 0x0b0f, 0x0b1d, 0x0b2e, 0x0b3d, 0x0b4b, 0x0b5b, + 0x0b68, 0x0b80, 0x0b8f, 0x0b95, 0x0ba3, 0x0baf, 0x0bc1, 0x0bce, + 0x0be6, 0x0bf0, 0x0c04, 0x0c0e, 0x0c13, 0x0c22, 0x0c2f, 0x0c35, + 0x0c44, 0x0c52, 0x0c60, 0x0c60, 0x0c70, +} // Size: 610 bytes + +const svRegionStr string = "" + // Size: 2904 bytes "AscensionAndorraFörenade ArabemiratenAfghanistanAntigua och BarbudaAngui" + "llaAlbanienArmenienAngolaAntarktisArgentinaAmerikanska SamoaÖsterrikeAus" + "tralienArubaÅlandAzerbajdzjanBosnien och HercegovinaBarbadosBangladeshBe" + @@ -48653,38 +51415,38 @@ const svRegionStr string = "" + // Size: 2921 bytes "lippertonönCosta RicaKubaKap VerdeCuraçaoJulönCypernTjeckienTysklandDieg" + "o GarciaDjiboutiDanmarkDominicaDominikanska republikenAlgerietCeuta och " + "MelillaEcuadorEstlandEgyptenVästsaharaEritreaSpanienEtiopienEuropeiska u" + - "nionenFinlandFijiFalklandsöarnaMikronesienFäröarnaFrankrikeGabonStorbrit" + - "annienGrenadaGeorgienFranska GuyanaGuernseyGhanaGibraltarGrönlandGambiaG" + - "uineaGuadeloupeEkvatorialguineaGreklandSydgeorgien och SydsandwichöarnaG" + - "uatemalaGuamGuinea-BissauGuyanaHongkong, S.A.R. KinaHeardön och McDonald" + - "öarnaHondurasKroatienHaitiUngernKanarieöarnaIndonesienIrlandIsraelIsle " + - "of ManIndienBrittiska territoriet i Indiska oceanenIrakIranIslandItalien" + - "JerseyJamaicaJordanienJapanKenyaKirgizistanKambodjaKiribatiKomorernaS:t " + - "Kitts och NevisNordkoreaSydkoreaKuwaitCaymanöarnaKazakstanLaosLibanonS:t" + - " LuciaLiechtensteinSri LankaLiberiaLesothoLitauenLuxemburgLettlandLibyen" + - "MarockoMonacoMoldavienMontenegroSaint-MartinMadagaskarMarshallöarnaMaked" + - "onienMaliMyanmar (Burma)MongolietMacao, S.A.R. KinaNordmarianernaMartini" + - "queMauretanienMontserratMaltaMauritiusMaldivernaMalawiMexikoMalaysiaMoça" + - "mbiqueNamibiaNya KaledonienNigerNorfolkönNigeriaNicaraguaNederländernaNo" + - "rgeNepalNauruNiueNya ZeelandOmanPanamaPeruFranska PolynesienPapua Nya Gu" + - "ineaFilippinernaPakistanPolenS:t Pierre och MiquelonPitcairnöarnaPuerto " + - "RicoPalestinska territoriernaPortugalPalauParaguayQataryttre öar i Ocean" + - "ienRéunionRumänienSerbienRysslandRwandaSaudiarabienSalomonöarnaSeychelle" + - "rnaSudanSverigeSingaporeS:t HelenaSlovenienSvalbard och Jan MayenSlovaki" + - "enSierra LeoneSan MarinoSenegalSomaliaSurinamSydsudanSão Tomé och Prínci" + - "peEl SalvadorSint MaartenSyrienSwazilandTristan da CunhaTurks- och Caico" + - "söarnaTchadFranska sydterritoriernaTogoThailandTadzjikistanTokelauÖsttim" + - "orTurkmenistanTunisienTongaTurkietTrinidad och TobagoTuvaluTaiwanTanzani" + - "aUkrainaUgandaUSA:s yttre öarFörenta NationernaUSAUruguayUzbekistanVatik" + - "anstatenS:t Vincent och GrenadinernaVenezuelaBrittiska JungfruöarnaAmeri" + - "kanska JungfruöarnaVietnamVanuatuWallis- och FutunaöarnaSamoaKosovoJemen" + - "MayotteSydafrikaZambiaZimbabweokänd regionvärldenAfrikaNordamerikaSydame" + - "rikaOceanienVästafrikaCentralamerikaÖstafrikaNordafrikaCentralafrikasödr" + - "a AfrikaNord- och Sydamerikanorra AmerikaKaribienÖstasienSydasienSydosta" + - "sienSydeuropaAustralasienMelanesienMikronesiska öarnaPolynesienAsienCent" + - "ralasienVästasienEuropaÖsteuropaNordeuropaVästeuropaLatinamerika" - -var svRegionIdx = []uint16{ // 292 elements + "nioneneurozonenFinlandFijiFalklandsöarnaMikronesienFäröarnaFrankrikeGabo" + + "nStorbritannienGrenadaGeorgienFranska GuyanaGuernseyGhanaGibraltarGrönla" + + "ndGambiaGuineaGuadeloupeEkvatorialguineaGreklandSydgeorgien och Sydsandw" + + "ichöarnaGuatemalaGuamGuinea-BissauGuyanaHongkongHeardön och McDonaldöarn" + + "aHondurasKroatienHaitiUngernKanarieöarnaIndonesienIrlandIsraelIsle of Ma" + + "nIndienBrittiska territoriet i Indiska oceanenIrakIranIslandItalienJerse" + + "yJamaicaJordanienJapanKenyaKirgizistanKambodjaKiribatiKomorernaS:t Kitts" + + " och NevisNordkoreaSydkoreaKuwaitCaymanöarnaKazakstanLaosLibanonS:t Luci" + + "aLiechtensteinSri LankaLiberiaLesothoLitauenLuxemburgLettlandLibyenMaroc" + + "koMonacoMoldavienMontenegroSaint-MartinMadagaskarMarshallöarnaMakedonien" + + "MaliMyanmar (Burma)MongolietMacaoNordmarianernaMartiniqueMauretanienMont" + + "serratMaltaMauritiusMaldivernaMalawiMexikoMalaysiaMoçambiqueNamibiaNya K" + + "aledonienNigerNorfolkönNigeriaNicaraguaNederländernaNorgeNepalNauruNiueN" + + "ya ZeelandOmanPanamaPeruFranska PolynesienPapua Nya GuineaFilippinernaPa" + + "kistanPolenS:t Pierre och MiquelonPitcairnöarnaPuerto RicoPalestinska te" + + "rritoriernaPortugalPalauParaguayQataryttre öar i OceanienRéunionRumänien" + + "SerbienRysslandRwandaSaudiarabienSalomonöarnaSeychellernaSudanSverigeSin" + + "gaporeS:t HelenaSlovenienSvalbard och Jan MayenSlovakienSierra LeoneSan " + + "MarinoSenegalSomaliaSurinamSydsudanSão Tomé och PríncipeEl SalvadorSint " + + "MaartenSyrienSwazilandTristan da CunhaTurks- och CaicosöarnaTchadFranska" + + " sydterritoriernaTogoThailandTadzjikistanTokelauÖsttimorTurkmenistanTuni" + + "sienTongaTurkietTrinidad och TobagoTuvaluTaiwanTanzaniaUkrainaUgandaUSA:" + + "s yttre öarFörenta NationernaUSAUruguayUzbekistanVatikanstatenS:t Vincen" + + "t och GrenadinernaVenezuelaBrittiska JungfruöarnaAmerikanska Jungfruöarn" + + "aVietnamVanuatuWallis- och FutunaöarnaSamoaKosovoJemenMayotteSydafrikaZa" + + "mbiaZimbabweokänd regionvärldenAfrikaNordamerikaSydamerikaOceanienVästaf" + + "rikaCentralamerikaÖstafrikaNordafrikaCentralafrikasödra AfrikaNord- och " + + "Sydamerikanorra AmerikaKaribienÖstasienSydasienSydostasienSydeuropaAustr" + + "alasienMelanesienMikronesiska öarnaPolynesienAsienCentralasienVästasienE" + + "uropaÖsteuropaNordeuropaVästeuropaLatinamerika" + +var svRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0009, 0x0010, 0x0026, 0x0031, 0x0044, 0x004c, 0x0054, 0x005c, 0x0062, 0x006b, 0x0074, 0x0085, 0x008f, 0x0099, 0x009e, @@ -48696,131 +51458,131 @@ var svRegionIdx = []uint16{ // 292 elements 0x0231, 0x0237, 0x023f, 0x0247, 0x0253, 0x025b, 0x0262, 0x026a, // Entry 40 - 7F 0x0281, 0x0289, 0x029a, 0x02a1, 0x02a8, 0x02af, 0x02ba, 0x02c1, - 0x02c8, 0x02d0, 0x02e2, 0x02e2, 0x02e9, 0x02ed, 0x02fc, 0x0307, - 0x0311, 0x031a, 0x031f, 0x032d, 0x0334, 0x033c, 0x034a, 0x0352, - 0x0357, 0x0360, 0x0369, 0x036f, 0x0375, 0x037f, 0x038f, 0x0397, - 0x03b8, 0x03c1, 0x03c5, 0x03d2, 0x03d8, 0x03ed, 0x0408, 0x0410, - 0x0418, 0x041d, 0x0423, 0x0430, 0x043a, 0x0440, 0x0446, 0x0451, - 0x0457, 0x047e, 0x0482, 0x0486, 0x048c, 0x0493, 0x0499, 0x04a0, - 0x04a9, 0x04ae, 0x04b3, 0x04be, 0x04c6, 0x04ce, 0x04d7, 0x04ea, + 0x02c8, 0x02d0, 0x02e2, 0x02eb, 0x02f2, 0x02f6, 0x0305, 0x0310, + 0x031a, 0x0323, 0x0328, 0x0336, 0x033d, 0x0345, 0x0353, 0x035b, + 0x0360, 0x0369, 0x0372, 0x0378, 0x037e, 0x0388, 0x0398, 0x03a0, + 0x03c1, 0x03ca, 0x03ce, 0x03db, 0x03e1, 0x03e9, 0x0404, 0x040c, + 0x0414, 0x0419, 0x041f, 0x042c, 0x0436, 0x043c, 0x0442, 0x044d, + 0x0453, 0x047a, 0x047e, 0x0482, 0x0488, 0x048f, 0x0495, 0x049c, + 0x04a5, 0x04aa, 0x04af, 0x04ba, 0x04c2, 0x04ca, 0x04d3, 0x04e6, // Entry 80 - BF - 0x04f3, 0x04fb, 0x0501, 0x050d, 0x0516, 0x051a, 0x0521, 0x052a, - 0x0537, 0x0540, 0x0547, 0x054e, 0x0555, 0x055e, 0x0566, 0x056c, - 0x0573, 0x0579, 0x0582, 0x058c, 0x0598, 0x05a2, 0x05b0, 0x05ba, - 0x05be, 0x05cd, 0x05d6, 0x05e8, 0x05f6, 0x0600, 0x060b, 0x0615, - 0x061a, 0x0623, 0x062d, 0x0633, 0x0639, 0x0641, 0x064c, 0x0653, - 0x0661, 0x0666, 0x0670, 0x0677, 0x0680, 0x068e, 0x0693, 0x0698, - 0x069d, 0x06a1, 0x06ac, 0x06b0, 0x06b6, 0x06ba, 0x06cc, 0x06dc, - 0x06e8, 0x06f0, 0x06f5, 0x070c, 0x071a, 0x0725, 0x073e, 0x0746, + 0x04ef, 0x04f7, 0x04fd, 0x0509, 0x0512, 0x0516, 0x051d, 0x0526, + 0x0533, 0x053c, 0x0543, 0x054a, 0x0551, 0x055a, 0x0562, 0x0568, + 0x056f, 0x0575, 0x057e, 0x0588, 0x0594, 0x059e, 0x05ac, 0x05b6, + 0x05ba, 0x05c9, 0x05d2, 0x05d7, 0x05e5, 0x05ef, 0x05fa, 0x0604, + 0x0609, 0x0612, 0x061c, 0x0622, 0x0628, 0x0630, 0x063b, 0x0642, + 0x0650, 0x0655, 0x065f, 0x0666, 0x066f, 0x067d, 0x0682, 0x0687, + 0x068c, 0x0690, 0x069b, 0x069f, 0x06a5, 0x06a9, 0x06bb, 0x06cb, + 0x06d7, 0x06df, 0x06e4, 0x06fb, 0x0709, 0x0714, 0x072d, 0x0735, // Entry C0 - FF - 0x074b, 0x0753, 0x0758, 0x076d, 0x0775, 0x077e, 0x0785, 0x078d, - 0x0793, 0x079f, 0x07ac, 0x07b8, 0x07bd, 0x07c4, 0x07cd, 0x07d7, - 0x07e0, 0x07f6, 0x07ff, 0x080b, 0x0815, 0x081c, 0x0823, 0x082a, - 0x0832, 0x084a, 0x0855, 0x0861, 0x0867, 0x0870, 0x0880, 0x0897, - 0x089c, 0x08b4, 0x08b8, 0x08c0, 0x08cc, 0x08d3, 0x08dc, 0x08e8, - 0x08f0, 0x08f5, 0x08fc, 0x090f, 0x0915, 0x091b, 0x0923, 0x092a, - 0x0930, 0x0940, 0x0953, 0x0956, 0x095d, 0x0967, 0x0974, 0x0990, - 0x0999, 0x09b0, 0x09c9, 0x09d0, 0x09d7, 0x09ef, 0x09f4, 0x09fa, + 0x073a, 0x0742, 0x0747, 0x075c, 0x0764, 0x076d, 0x0774, 0x077c, + 0x0782, 0x078e, 0x079b, 0x07a7, 0x07ac, 0x07b3, 0x07bc, 0x07c6, + 0x07cf, 0x07e5, 0x07ee, 0x07fa, 0x0804, 0x080b, 0x0812, 0x0819, + 0x0821, 0x0839, 0x0844, 0x0850, 0x0856, 0x085f, 0x086f, 0x0886, + 0x088b, 0x08a3, 0x08a7, 0x08af, 0x08bb, 0x08c2, 0x08cb, 0x08d7, + 0x08df, 0x08e4, 0x08eb, 0x08fe, 0x0904, 0x090a, 0x0912, 0x0919, + 0x091f, 0x092f, 0x0942, 0x0945, 0x094c, 0x0956, 0x0963, 0x097f, + 0x0988, 0x099f, 0x09b8, 0x09bf, 0x09c6, 0x09de, 0x09e3, 0x09e9, // Entry 100 - 13F - 0x09ff, 0x0a06, 0x0a0f, 0x0a15, 0x0a1d, 0x0a2a, 0x0a32, 0x0a38, - 0x0a43, 0x0a4d, 0x0a55, 0x0a60, 0x0a6e, 0x0a78, 0x0a82, 0x0a8f, - 0x0a9c, 0x0ab0, 0x0abd, 0x0ac5, 0x0ace, 0x0ad6, 0x0ae1, 0x0aea, - 0x0af6, 0x0b00, 0x0b13, 0x0b1d, 0x0b22, 0x0b2e, 0x0b38, 0x0b3e, - 0x0b48, 0x0b52, 0x0b5d, 0x0b69, -} // Size: 608 bytes - -const swRegionStr string = "" + // Size: 3125 bytes - "Kisiwa cha AscensionAndoraFalme za KiarabuAfghanistanAntigua na BarbudaA" + - "nguillaAlbaniaArmeniaAngolaAntaktikaAjentinaSamoa ya MarekaniAustriaAust" + - "raliaArubaVisiwa vya AlandiAzerbaijanBosnia na HezegovinaBabadosiBanglad" + - "eshiUbelgijiBukinafasoBulgariaBahareniBurundiBeninSantabathelemiBermudaB" + - "runeiBoliviaUholanzi ya KaribianiBraziliBahamaBhutanKisiwa cha BouvetBot" + - "swanaBelarusiBelizeKanadaVisiwa vya Cocos (Keeling)Jamhuri ya Kidemokras" + - "ia ya KongoJamhuri ya Afrika ya KatiKongo - BrazzavilleUswisiCôte d’Ivoi" + - "reVisiwa vya CookChileKameruniChinaKolombiaKisiwa cha ClippertonKostarik" + - "aKubaCape VerdeKurakaoKisiwa cha KrismasiCyprusJamhuri ya ChekiUjerumani" + - "Diego GarciaJibutiDenmarkDominikaJamhuri ya DominikaAljeriaCeuta na Meli" + - "llaEkwadoEstoniaMisriSahara MagharibiEritreaHispaniaEthiopiaUmoja wa Ula" + - "yaUfiniFijiVisiwa vya FalklandMikronesiaVisiwa vya FaroeUfaransaGabonUin" + - "gerezaGrenadaJojiaGwiyana ya UfaransaGuernseyGhanaJibraltaGrinlandiGambi" + - "aGineGuadeloupeGinekwetaUgirikiJojia Kusini na Visiwa vya Sandwich Kusin" + - "iGuatemalaGuamGinebisauGuyanaHong Kong SAR ChinaKisiwa cha Heard na Visi" + - "wa vya McDonaldHondurasiKorasiaHaitiHungariaVisiwa vya KanariIndonesiaAy" + - "alandiIsraeliIsle of ManIndiaEneo la Uingereza katika Bahari HindiIrakiI" + - "ranAislandiItaliaJerseyJamaikaJordanJapaniKenyaKirigizistaniKambodiaKiri" + - "batiKomoroSantakitzi na NevisKorea KaskaziniKorea KusiniKuwaitVisiwa vya" + - " KaymanKazakistaniLaosiLebanonSantalusiaLiechtensteinSri LankaLiberiaLes" + - "otoLithuaniaLuxembourgLatviaLibyaMoroccoMonakoMoldovaMontenegroSaint Mar" + - "tinMadagaskaVisiwa vya MarshallMacedoniaMaliMyanmar (Burma)MongoliaMacau" + - " SAR ChinaVisiwa vya Mariana vya KaskaziniMartinikiMoritaniaMontserratiM" + - "altaMorisiMaldivesMalawiMeksikoMalesiaMsumbijiNamibiaNyukaledoniaNigerKi" + - "siwa cha NorfolkNigeriaNikaragwaUholanziNorwayNepalNauruNiueNyuzilandiOm" + - "anPanamaPeruPolinesia ya UfaransaPapua New GuineaUfilipinoPakistaniPolan" + - "diSantapierre na MiquelonVisiwa vya PitcairnPuerto RicoMaeneo ya Palesti" + - "naUrenoPalauParagwaiQatarOceania ya NjeRiyunioniRomaniaSerbiaUrusiRwanda" + - "SaudiaVisiwa vya SolomonUshelisheliSudanUswidiSingaporeSantahelenaSloven" + - "iaSvalbard na Jan MayenSlovakiaSiera LeoniSan MarinoSenegaliSomaliaSurin" + - "amuSudan KusiniSão Tomé na PríncipeElsavadoSint MaartenSyriaUswaziTrista" + - "n da CunhaVisiwa vya Turki na KaikoChadMaeneo ya Kusini ya UfaransaTogoT" + - "ailandiTajikistaniTokelauTimor-LesteTurukimenistaniTunisiaTongaUturukiTr" + - "inidad na TobagoTuvaluTaiwanTanzaniaUkraineUgandaVisiwa Vidogo vya Nje v" + - "ya MarekaniUmoja wa MataifaMarekaniUrugwaiUzibekistaniVatikaniSantavisen" + - "ti na GrenadiniVenezuelaVisiwa vya Virgin vya UingerezaVisiwa vya Virgin" + - " vya MarekaniVietnamVanuatuWalis na FutunaSamoaKosovoYemeniMayotteAfrika" + - " KusiniZambiaZimbabweEneo lisilojulikanaDuniaAfrikaAmerika KaskaziniAmer" + - "ika KusiniOceaniaAfrika ya MagharibiAmerika ya KatiAfrika ya MasharikiAf" + - "rika ya KaskaziniAfrika ya KatiAfrika ya KusiniAmerikaAmerika ya Kaskazi" + - "niKaribianiAsia ya MasharikiAsia ya KusiniAsia ya Kusini MasharikiUlaya " + - "ya KusiniAustralasiaMelanesiaEneo la MikronesiaPolynesiaAsiaAsia ya Kati" + - "Asia ya MagharibiUlayaUlaya ya MasharikiUlaya ya KaskaziniUlaya ya Magha" + - "ribiAmerika ya Kilatini" - -var swRegionIdx = []uint16{ // 292 elements + 0x09ee, 0x09f5, 0x09fe, 0x0a04, 0x0a0c, 0x0a19, 0x0a21, 0x0a27, + 0x0a32, 0x0a3c, 0x0a44, 0x0a4f, 0x0a5d, 0x0a67, 0x0a71, 0x0a7e, + 0x0a8b, 0x0a9f, 0x0aac, 0x0ab4, 0x0abd, 0x0ac5, 0x0ad0, 0x0ad9, + 0x0ae5, 0x0aef, 0x0b02, 0x0b0c, 0x0b11, 0x0b1d, 0x0b27, 0x0b2d, + 0x0b37, 0x0b41, 0x0b4c, 0x0b4c, 0x0b58, +} // Size: 610 bytes + +const swRegionStr string = "" + // Size: 3120 bytes + "Kisiwa cha AscensionAndorraFalme za KiarabuAfghanistanAntigua na Barbuda" + + "AnguillaAlbaniaArmeniaAngolaAntaktikiAjentinaSamoa ya MarekaniAustriaAus" + + "traliaArubaVisiwa vya AlandAzerbaijanBosnia na HezegovinaBabadosiBanglad" + + "eshiUbelgijiBukinafasoBulgariaBahareniBurundiBeninSt. BarthelemyBermudaB" + + "runeiBoliviaUholanzi ya KaribianiBrazilBahamaBhutanKisiwa cha BouvetBots" + + "wanaBelarusBelizeKanadaVisiwa vya Cocos (Keeling)Jamhuri ya Kidemokrasia" + + " ya KongoJamhuri ya Afrika ya KatiKongo - BrazzavilleUswisiCote d’Ivoire" + + "Visiwa vya CookChileKameruniUchinaKolombiaKisiwa cha ClippertonKostarika" + + "CubaCape VerdeCuracaoKisiwa cha KrismasiCyprusChechiaUjerumaniDiego Garc" + + "iaJibutiDenmarkDominikaJamhuri ya DominikaAljeriaCeuta na MelillaEcuador" + + "EstoniaMisriSahara MagharibiEritreaUhispaniaEthiopiaUmoja wa UlayaEZUfin" + + "iFijiVisiwa vya FalklandMicronesiaVisiwa vya FaroeUfaransaGabonUingereza" + + "GrenadaJojiaGuiana ya UfaransaGuernseyGhanaGibraltarGreenlandGambiaGineG" + + "uadeloupeGuinea ya IkwetaUgirikiGeorgia Kusini na Visiwa vya Sandwich Ku" + + "siniGuatemalaGuamGinebisauGuyanaHong Kong SAR ChinaKisiwa cha Heard na V" + + "isiwa vya McDonaldHondurasCroatiaHaitiHungariaVisiwa vya KanariIndonesia" + + "AyalandiIsraeliIsle of ManIndiaEneo la Uingereza katika Bahari HindiIrak" + + "iIranAislandiItaliaJerseyJamaikaJordanJapaniKenyaKirigizistaniKambodiaKi" + + "ribatiKomoroSt. Kitts na NevisKorea KaskaziniKorea KusiniKuwaitVisiwa vy" + + "a CaymanKazakistaniLaosLebanonSt. LuciaLiechtensteinSri LankaLiberiaLeso" + + "toLithuaniaLuxembourgLatviaLibyaMoroccoMonacoMoldovaMontenegroSt. Martin" + + "MadagaskaVisiwa vya MarshallMacedoniaMaliMyanmar (Burma)MongoliaMacau SA" + + "R ChinaVisiwa vya Mariana vya KaskaziniMartiniqueMoritaniaMontserratMalt" + + "aMorisiMaldivesMalawiMeksikoMalesiaMsumbijiNamibiaNew CaledoniaNigerKisi" + + "wa cha NorfolkNigeriaNikaragwaUholanziNorwayNepalNauruNiueNyuzilandiOman" + + "PanamaPeruPolynesia ya UfaransaPapua New GuineaUfilipinoPakistaniPolandS" + + "antapierre na MiquelonVisiwa vya PitcairnPuerto RicoMaeneo ya PalestinaU" + + "renoPalauParaguayQatarOceania ya NjeReunionRomaniaSerbiaUrusiRwandaSaudi" + + "aVisiwa vya SolomonUshelisheliSudanUswidiSingaporeSt. HelenaSloveniaSval" + + "bard na Jan MayenSlovakiaSiera LeoniSan MarinoSenegaliSomaliaSurinameSud" + + "an KusiniSão Tomé na PríncipeEl SalvadorSint MaartenSyriaUswaziTristan d" + + "a CunhaVisiwa vya Turks na CaicosChadMaeneo ya Kusini ya UfaransaTogoTai" + + "landiTajikistaniTokelauTimor-LesteTurkmenistanTunisiaTongaUturukiTrinida" + + "d na TobagoTuvaluTaiwanTanzaniaUkraineUgandaVisiwa Vidogo vya Nje vya Ma" + + "rekaniUmoja wa MataifaMarekaniUruguayUzibekistaniMji wa VaticanSt. Vince" + + "nt na GrenadinesVenezuelaVisiwa vya Virgin, UingerezaVisiwa vya Virgin, " + + "MarekaniVietnamVanuatuWallis na FutunaSamoaKosovoYemeniMayotteAfrika Kus" + + "iniZambiaZimbabweEneo lisilojulikanaDuniaAfrikaAmerika KaskaziniAmerika " + + "KusiniOceaniaAfrika ya MagharibiAmerika ya KatiAfrika ya MasharikiAfrika" + + " ya KaskaziniAfrika ya KatiAfrika ya KusiniAmerikaAmerika ya KaskaziniKa" + + "ribianiAsia ya MasharikiAsia ya KusiniAsia ya Kusini MasharikiUlaya ya K" + + "usiniAustralasiaMelanesiaEneo la MikronesiaPolynesiaAsiaAsia ya KatiAsia" + + " ya MagharibiUlayaUlaya ya MasharikiUlaya ya KaskaziniUlaya ya Magharibi" + + "Amerika ya Kilatini" + +var swRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F - 0x0000, 0x0014, 0x001a, 0x002a, 0x0035, 0x0047, 0x004f, 0x0056, - 0x005d, 0x0063, 0x006c, 0x0074, 0x0085, 0x008c, 0x0095, 0x009a, + 0x0000, 0x0014, 0x001b, 0x002b, 0x0036, 0x0048, 0x0050, 0x0057, + 0x005e, 0x0064, 0x006d, 0x0075, 0x0086, 0x008d, 0x0096, 0x009b, 0x00ab, 0x00b5, 0x00c9, 0x00d1, 0x00dc, 0x00e4, 0x00ee, 0x00f6, 0x00fe, 0x0105, 0x010a, 0x0118, 0x011f, 0x0125, 0x012c, 0x0141, - 0x0148, 0x014e, 0x0154, 0x0165, 0x016d, 0x0175, 0x017b, 0x0181, - 0x019b, 0x01bb, 0x01d4, 0x01e7, 0x01ed, 0x01fd, 0x020c, 0x0211, - 0x0219, 0x021e, 0x0226, 0x023b, 0x0244, 0x0248, 0x0252, 0x0259, - 0x026c, 0x0272, 0x0282, 0x028b, 0x0297, 0x029d, 0x02a4, 0x02ac, + 0x0147, 0x014d, 0x0153, 0x0164, 0x016c, 0x0173, 0x0179, 0x017f, + 0x0199, 0x01b9, 0x01d2, 0x01e5, 0x01eb, 0x01fa, 0x0209, 0x020e, + 0x0216, 0x021c, 0x0224, 0x0239, 0x0242, 0x0246, 0x0250, 0x0257, + 0x026a, 0x0270, 0x0277, 0x0280, 0x028c, 0x0292, 0x0299, 0x02a1, // Entry 40 - 7F - 0x02bf, 0x02c6, 0x02d6, 0x02dc, 0x02e3, 0x02e8, 0x02f8, 0x02ff, - 0x0307, 0x030f, 0x031d, 0x031d, 0x0322, 0x0326, 0x0339, 0x0343, - 0x0353, 0x035b, 0x0360, 0x0369, 0x0370, 0x0375, 0x0388, 0x0390, - 0x0395, 0x039d, 0x03a6, 0x03ac, 0x03b0, 0x03ba, 0x03c3, 0x03ca, - 0x03f4, 0x03fd, 0x0401, 0x040a, 0x0410, 0x0423, 0x044a, 0x0453, - 0x045a, 0x045f, 0x0467, 0x0478, 0x0481, 0x0489, 0x0490, 0x049b, - 0x04a0, 0x04c5, 0x04ca, 0x04ce, 0x04d6, 0x04dc, 0x04e2, 0x04e9, - 0x04ef, 0x04f5, 0x04fa, 0x0507, 0x050f, 0x0517, 0x051d, 0x0530, + 0x02b4, 0x02bb, 0x02cb, 0x02d2, 0x02d9, 0x02de, 0x02ee, 0x02f5, + 0x02fe, 0x0306, 0x0314, 0x0316, 0x031b, 0x031f, 0x0332, 0x033c, + 0x034c, 0x0354, 0x0359, 0x0362, 0x0369, 0x036e, 0x0380, 0x0388, + 0x038d, 0x0396, 0x039f, 0x03a5, 0x03a9, 0x03b3, 0x03c3, 0x03ca, + 0x03f6, 0x03ff, 0x0403, 0x040c, 0x0412, 0x0425, 0x044c, 0x0454, + 0x045b, 0x0460, 0x0468, 0x0479, 0x0482, 0x048a, 0x0491, 0x049c, + 0x04a1, 0x04c6, 0x04cb, 0x04cf, 0x04d7, 0x04dd, 0x04e3, 0x04ea, + 0x04f0, 0x04f6, 0x04fb, 0x0508, 0x0510, 0x0518, 0x051e, 0x0530, // Entry 80 - BF - 0x053f, 0x054b, 0x0551, 0x0562, 0x056d, 0x0572, 0x0579, 0x0583, - 0x0590, 0x0599, 0x05a0, 0x05a6, 0x05af, 0x05b9, 0x05bf, 0x05c4, - 0x05cb, 0x05d1, 0x05d8, 0x05e2, 0x05ee, 0x05f7, 0x060a, 0x0613, - 0x0617, 0x0626, 0x062e, 0x063d, 0x065d, 0x0666, 0x066f, 0x067a, - 0x067f, 0x0685, 0x068d, 0x0693, 0x069a, 0x06a1, 0x06a9, 0x06b0, - 0x06bc, 0x06c1, 0x06d3, 0x06da, 0x06e3, 0x06eb, 0x06f1, 0x06f6, - 0x06fb, 0x06ff, 0x0709, 0x070d, 0x0713, 0x0717, 0x072c, 0x073c, - 0x0745, 0x074e, 0x0755, 0x076c, 0x077f, 0x078a, 0x079d, 0x07a2, + 0x053f, 0x054b, 0x0551, 0x0562, 0x056d, 0x0571, 0x0578, 0x0581, + 0x058e, 0x0597, 0x059e, 0x05a4, 0x05ad, 0x05b7, 0x05bd, 0x05c2, + 0x05c9, 0x05cf, 0x05d6, 0x05e0, 0x05ea, 0x05f3, 0x0606, 0x060f, + 0x0613, 0x0622, 0x062a, 0x0639, 0x0659, 0x0663, 0x066c, 0x0676, + 0x067b, 0x0681, 0x0689, 0x068f, 0x0696, 0x069d, 0x06a5, 0x06ac, + 0x06b9, 0x06be, 0x06d0, 0x06d7, 0x06e0, 0x06e8, 0x06ee, 0x06f3, + 0x06f8, 0x06fc, 0x0706, 0x070a, 0x0710, 0x0714, 0x0729, 0x0739, + 0x0742, 0x074b, 0x0751, 0x0768, 0x077b, 0x0786, 0x0799, 0x079e, // Entry C0 - FF - 0x07a7, 0x07af, 0x07b4, 0x07c2, 0x07cb, 0x07d2, 0x07d8, 0x07dd, - 0x07e3, 0x07e9, 0x07fb, 0x0806, 0x080b, 0x0811, 0x081a, 0x0825, - 0x082d, 0x0842, 0x084a, 0x0855, 0x085f, 0x0867, 0x086e, 0x0876, - 0x0882, 0x0899, 0x08a1, 0x08ad, 0x08b2, 0x08b8, 0x08c8, 0x08e1, - 0x08e5, 0x0901, 0x0905, 0x090d, 0x0918, 0x091f, 0x092a, 0x0939, - 0x0940, 0x0945, 0x094c, 0x095e, 0x0964, 0x096a, 0x0972, 0x0979, - 0x097f, 0x09a1, 0x09b1, 0x09b9, 0x09c0, 0x09cc, 0x09d4, 0x09ed, - 0x09f6, 0x0a15, 0x0a33, 0x0a3a, 0x0a41, 0x0a50, 0x0a55, 0x0a5b, + 0x07a3, 0x07ab, 0x07b0, 0x07be, 0x07c5, 0x07cc, 0x07d2, 0x07d7, + 0x07dd, 0x07e3, 0x07f5, 0x0800, 0x0805, 0x080b, 0x0814, 0x081e, + 0x0826, 0x083b, 0x0843, 0x084e, 0x0858, 0x0860, 0x0867, 0x086f, + 0x087b, 0x0892, 0x089d, 0x08a9, 0x08ae, 0x08b4, 0x08c4, 0x08de, + 0x08e2, 0x08fe, 0x0902, 0x090a, 0x0915, 0x091c, 0x0927, 0x0933, + 0x093a, 0x093f, 0x0946, 0x0958, 0x095e, 0x0964, 0x096c, 0x0973, + 0x0979, 0x099b, 0x09ab, 0x09b3, 0x09ba, 0x09c6, 0x09d4, 0x09ed, + 0x09f6, 0x0a12, 0x0a2d, 0x0a34, 0x0a3b, 0x0a4b, 0x0a50, 0x0a56, // Entry 100 - 13F - 0x0a61, 0x0a68, 0x0a75, 0x0a7b, 0x0a83, 0x0a96, 0x0a9b, 0x0aa1, - 0x0ab2, 0x0ac0, 0x0ac7, 0x0ada, 0x0ae9, 0x0afc, 0x0b0f, 0x0b1d, - 0x0b2d, 0x0b34, 0x0b48, 0x0b51, 0x0b62, 0x0b70, 0x0b88, 0x0b97, - 0x0ba2, 0x0bab, 0x0bbd, 0x0bc6, 0x0bca, 0x0bd6, 0x0be7, 0x0bec, - 0x0bfe, 0x0c10, 0x0c22, 0x0c35, -} // Size: 608 bytes - -const taRegionStr string = "" + // Size: 9564 bytes + 0x0a5c, 0x0a63, 0x0a70, 0x0a76, 0x0a7e, 0x0a91, 0x0a96, 0x0a9c, + 0x0aad, 0x0abb, 0x0ac2, 0x0ad5, 0x0ae4, 0x0af7, 0x0b0a, 0x0b18, + 0x0b28, 0x0b2f, 0x0b43, 0x0b4c, 0x0b5d, 0x0b6b, 0x0b83, 0x0b92, + 0x0b9d, 0x0ba6, 0x0bb8, 0x0bc1, 0x0bc5, 0x0bd1, 0x0be2, 0x0be7, + 0x0bf9, 0x0c0b, 0x0c1d, 0x0c1d, 0x0c30, +} // Size: 610 bytes + +const taRegionStr string = "" + // Size: 9569 bytes "அஷன்ஷியன் தீவுஅன்டோராஐக்கிய அரபு எமிரேட்ஸ்ஆப்கானிஸ்தான்ஆண்டிகுவா மற்றும்" + " பார்புடாஅங்குய்லாஅல்பேனியாஅர்மேனியாஅங்கோலாஅண்டார்டிகாஅர்ஜென்டினாஅமெரிக்" + "க சமோவாஆஸ்திரியாஆஸ்திரேலியாஅரூபாஆலந்து தீவுகள்அசர்பைஜான்போஸ்னியா & ஹெர" + @@ -48830,46 +51592,46 @@ const taRegionStr string = "" + // Size: 9564 bytes " (கீலிங்) தீவுகள்காங்கோ - கின்ஷாசாமத்திய ஆப்ரிக்கக் குடியரசுகாங்கோ - ப்ர" + "ாஸாவில்லேஸ்விட்சர்லாந்துகோட் தி’வாயர்குக் தீவுகள்சிலிகேமரூன்சீனாகொலம்ப" + "ியாகிலிப்பர்டன் தீவுகோஸ்டாரிகாகியூபாகேப் வெர்டேகுராகவ்கிறிஸ்துமஸ் தீவு" + - "சைப்ரஸ்செக் குடியரசுஜெர்மனிடியகோ கார்ஷியாஜிபௌட்டிடென்மார்க்டொமினிகாடொம" + - "ினிகன் குடியரசுஅல்ஜீரியாசியூடா & மெலில்லாஈக்வடார்எஸ்டோனியாஎகிப்துமேற்க" + - "ு சஹாராஎரிட்ரியாஸ்பெயின்எத்தியோப்பியாஐரோப்பிய யூனியன்பின்லாந்துஃபிஜிஃப" + - "ாக்லாந்து தீவுகள்மைக்ரோனேஷியாஃபாரோ தீவுகள்பிரான்ஸ்கேபான்யுனைடெட் கிங்ட" + - "ம்கிரனெடாஜார்ஜியாபிரெஞ்சு கயானாகெர்ன்சிகானாஜிப்ரால்டர்கிரீன்லாந்துகாம்" + - "பியாகினியாக்வாதேலோப்ஈக்வடோரியல் கினியாகிரீஸ்தெற்கு ஜார்ஜியா மற்றும் தெ" + - "ற்கு சாண்ட்விச் தீவுகள்கவுதமாலாகுவாம்கினியா-பிஸ்ஸாவ்கயானாஹாங்காங் எஸ்ஏ" + - "ஆர் சீனாஹேர்ட் மற்றும் மெக்டொனால்டு தீவுகள்ஹோண்டூராஸ்குரேஷியாஹைட்டிஹங்" + - "கேரிகேனரி தீவுகள்இந்தோனேசியாஅயர்லாந்துஇஸ்ரேல்ஐல் ஆஃப் மேன்இந்தியாபிரிட" + - "்டிஷ் இந்தியப் பெருங்கடல் பிரதேசம்ஈராக்ஈரான்ஐஸ்லாந்துஇத்தாலிஜெர்சிஜமைக" + - "ாஜோர்டான்ஜப்பான்கென்யாகிர்கிஸ்தான்கம்போடியாகிரிபாட்டிகோமரோஸ்செயின்ட் க" + - "ிட்ஸ் & நெவிஸ்வட கொரியாதென் கொரியாகுவைத்கெய்மென் தீவுகள்கஸகஸ்தான்லாவோஸ" + - "்லெபனான்செயின்ட் லூசியாலிச்செண்ஸ்டெய்ன்இலங்கைலைபீரியாலெசோதோலிதுவேனியால" + - "க்ஸ்சம்பர்க்லாட்வியாலிபியாமொராக்கோமொனாக்கோமால்டோவாமான்டேனெக்ரோசெயின்ட்" + - " மார்ட்டீன்மடகாஸ்கர்மார்ஷல் தீவுகள்மாசிடோனியாமாலிமியான்மார் (பர்மா)மங்கோ" + - "லியாமகாவ் எஸ்ஏஆர் சீனாவடக்கு மரியானா தீவுகள்மார்டினிக்மௌரிடானியாமாண்ட்" + - "செராட்மால்டாமொரிசியஸ்மாலத்தீவுமலாவிமெக்சிகோமலேசியாமொசாம்பிக்நமீபியாநிய" + - "ூ கேலிடோனியாநைஜர்நார்ஃபோக் தீவுகள்நைஜீரியாநிகரகுவாநெதர்லாந்துநார்வேநேப" + - "ாளம்நௌருநியூநியூசிலாந்துஓமன்பனாமாபெருபிரெஞ்சு பாலினேஷியாபப்புவா நியூ க" + - "ினியாபிலிப்பைன்ஸ்பாகிஸ்தான்போலந்துசெயின்ட் பியர் & மிக்வேலான்பிட்கெய்ர" + - "்ன் தீவுகள்பியூர்டோ ரிகோபாலஸ்தீனிய பிரதேசங்கள்போர்ச்சுக்கல்பாலோபராகுவே" + - "கத்தார்வெளிப்புற ஓஷியானியாரீயூனியன்ருமேனியாசெர்பியாரஷ்யாருவாண்டாசவூதி " + - "அரேபியாசாலமன் தீவுகள்சீஷெல்ஸ்சூடான்ஸ்வீடன்சிங்கப்பூர்செயின்ட் ஹெலெனாஸ்" + - "லோவேனியாஸ்வல்பார்டு & ஜான் மேயன்ஸ்லோவாகியாசியாரா லியோன்சான் மரினோசெனெக" + - "ல்சோமாலியாசுரினாம்தெற்கு சூடான்சாவ் தோம் & ப்ரின்சிபிஎல் சால்வடார்சின்" + - "ட் மார்டென்சிரியாஸ்வாஸிலாந்துடிரிஸ்டன் டா குன்ஹாடர்க்ஸ் & கைகோஸ் தீவுக" + - "ள்சாட்பிரெஞ்சு தெற்கு பிரதேசங்கள்டோகோதாய்லாந்துதஜிகிஸ்தான்டோகேலோதைமூர்" + - "-லெஸ்தேதுர்க்மெனிஸ்தான்டுனிசியாடோங்காதுருக்கிடிரினிடாட் & டொபாகோதுவாலூதை" + - "வான்தான்சானியாஉக்ரைன்உகாண்டாயூ.எஸ். வெளிப்புறத் தீவுகள்ஐக்கிய நாடுகள்அ" + - "மெரிக்காஉருகுவேஉஸ்பெகிஸ்தான்வாடிகன் நகரம்செயின்ட் வின்சென்ட் & கிரெனடை" + - "ன்ஸ்வெனிசுலாபிரிட்டீஷ் கன்னித் தீவுகள்யூ.எஸ். கன்னித் தீவுகள்வியட்நாம்" + - "வனுவாட்டுவாலிஸ் மற்றும் ஃபுடுனாசமோவாகொசோவோஏமன்மயோட்தென் ஆப்பிரிக்காஜாம" + - "்பியாஜிம்பாப்வேஅறியப்படாத பிரதேசம்உலகம்ஆப்ரிக்காவட அமெரிக்காதென் அமெரி" + - "க்காஓஷியானியாமேற்கு ஆப்ரிக்காமத்திய அமெரிக்காகிழக்கு ஆப்ரிக்காவடக்கு ஆ" + - "ப்ரிக்காமத்திய ஆப்ரிக்காதெற்கு ஆப்ரிக்காஅமெரிக்காஸ்வடக்கு அமெரிக்காகரீ" + - "பியன்கிழக்காசியாதெற்காசியாதென்கிழக்காசியாதெற்கு ஐரோப்பாஆஸ்திரலேசியாமெல" + - "னேஷியாமைக்ரோ நேஷியா பிரதேசம்பாலினேஷியாஆசியாமத்திய ஆசியாமேற்காசியாஐரோப்" + - "பாகிழக்கு ஐரோப்பாவடக்கு ஐரோப்பாமேற்கு ஐரோப்பாலத்தீன் அமெரிக்கா" - -var taRegionIdx = []uint16{ // 292 elements + "சைப்ரஸ்செசியாஜெர்மனிடியகோ கார்ஷியாஜிபௌட்டிடென்மார்க்டொமினிகாடொமினிகன் " + + "குடியரசுஅல்ஜீரியாசியூடா & மெலில்லாஈக்வடார்எஸ்டோனியாஎகிப்துமேற்கு சஹாரா" + + "எரிட்ரியாஸ்பெயின்எத்தியோப்பியாஐரோப்பிய யூனியன்யூரோஜோன்பின்லாந்துஃபிஜிஃ" + + "பாக்லாந்து தீவுகள்மைக்ரோனேஷியாஃபாரோ தீவுகள்பிரான்ஸ்கேபான்யுனைடெட் கிங்" + + "டம்கிரனெடாஜார்ஜியாபிரெஞ்சு கயானாகெர்ன்சிகானாஜிப்ரால்டர்கிரீன்லாந்துகாம" + + "்பியாகினியாக்வாதேலோப்ஈக்வடோரியல் கினியாகிரீஸ்தெற்கு ஜார்ஜியா மற்றும் த" + + "ெற்கு சாண்ட்விச் தீவுகள்கவுதமாலாகுவாம்கினியா-பிஸ்ஸாவ்கயானாஹாங்காங் எஸ்" + + "ஏஆர் சீனாஹேர்ட் மற்றும் மெக்டொனால்டு தீவுகள்ஹோண்டூராஸ்குரேஷியாஹைட்டிஹங" + + "்கேரிகேனரி தீவுகள்இந்தோனேசியாஅயர்லாந்துஇஸ்ரேல்ஐல் ஆஃப் மேன்இந்தியாபிரி" + + "ட்டிஷ் இந்தியப் பெருங்கடல் பிரதேசம்ஈராக்ஈரான்ஐஸ்லாந்துஇத்தாலிஜெர்சிஜமை" + + "காஜோர்டான்ஜப்பான்கென்யாகிர்கிஸ்தான்கம்போடியாகிரிபாட்டிகோமரோஸ்செயின்ட் " + + "கிட்ஸ் & நெவிஸ்வட கொரியாதென் கொரியாகுவைத்கெய்மென் தீவுகள்கஸகஸ்தான்லாவோ" + + "ஸ்லெபனான்செயின்ட் லூசியாலிச்செண்ஸ்டெய்ன்இலங்கைலைபீரியாலெசோதோலிதுவேனியா" + + "லக்ஸ்சம்பர்க்லாட்வியாலிபியாமொராக்கோமொனாக்கோமால்டோவாமான்டேனெக்ரோசெயின்ட" + + "் மார்ட்டீன்மடகாஸ்கர்மார்ஷல் தீவுகள்மாசிடோனியாமாலிமியான்மார் (பர்மா)மங" + + "்கோலியாமகாவ் எஸ்ஏஆர் சீனாவடக்கு மரியானா தீவுகள்மார்டினிக்மௌரிடானியாமாண" + + "்ட்செராட்மால்டாமொரிசியஸ்மாலத்தீவுமலாவிமெக்சிகோமலேசியாமொசாம்பிக்நமீபியா" + + "நியூ கேலிடோனியாநைஜர்நார்ஃபோக் தீவுகள்நைஜீரியாநிகரகுவாநெதர்லாந்துநார்வே" + + "நேபாளம்நௌருநியூநியூசிலாந்துஓமன்பனாமாபெருபிரெஞ்சு பாலினேஷியாபப்புவா நிய" + + "ூ கினியாபிலிப்பைன்ஸ்பாகிஸ்தான்போலந்துசெயின்ட் பியர் & மிக்வேலான்பிட்கெ" + + "ய்ர்ன் தீவுகள்பியூர்டோ ரிகோபாலஸ்தீனிய பிரதேசங்கள்போர்ச்சுக்கல்பாலோபராக" + + "ுவேகத்தார்வெளிப்புற ஓஷியானியாரீயூனியன்ருமேனியாசெர்பியாரஷ்யாருவாண்டாசவூ" + + "தி அரேபியாசாலமன் தீவுகள்சீஷெல்ஸ்சூடான்ஸ்வீடன்சிங்கப்பூர்செயின்ட் ஹெலென" + + "ாஸ்லோவேனியாஸ்வல்பார்டு & ஜான் மேயன்ஸ்லோவாகியாசியாரா லியோன்சான் மரினோசெ" + + "னெகல்சோமாலியாசுரினாம்தெற்கு சூடான்சாவ் தோம் & ப்ரின்சிபிஎல் சால்வடார்ச" + + "ின்ட் மார்டென்சிரியாஸ்வாஸிலாந்துடிரிஸ்டன் டா குன்ஹாடர்க்ஸ் & கைகோஸ் தீ" + + "வுகள்சாட்பிரெஞ்சு தெற்கு பிரதேசங்கள்டோகோதாய்லாந்துதஜிகிஸ்தான்டோகேலோதைம" + + "ூர்-லெஸ்தேதுர்க்மெனிஸ்தான்டுனிசியாடோங்காதுருக்கிடிரினிடாட் & டொபாகோதுவ" + + "ாலூதைவான்தான்சானியாஉக்ரைன்உகாண்டாயூ.எஸ். வெளிப்புறத் தீவுகள்ஐக்கிய நாட" + + "ுகள்அமெரிக்காஉருகுவேஉஸ்பெகிஸ்தான்வாடிகன் நகரம்செயின்ட் வின்சென்ட் & கி" + + "ரெனடைன்ஸ்வெனிசுலாபிரிட்டீஷ் கன்னித் தீவுகள்யூ.எஸ். கன்னித் தீவுகள்வியட" + + "்நாம்வனுவாட்டுவாலிஸ் மற்றும் ஃபுடுனாசமோவாகொசோவோஏமன்மயோட்தென் ஆப்பிரிக்" + + "காஜாம்பியாஜிம்பாப்வேஅறியப்படாத பிரதேசம்உலகம்ஆப்ரிக்காவட அமெரிக்காதென் " + + "அமெரிக்காஓஷியானியாமேற்கு ஆப்ரிக்காமத்திய அமெரிக்காகிழக்கு ஆப்ரிக்காவடக" + + "்கு ஆப்ரிக்காமத்திய ஆப்ரிக்காதெற்கு ஆப்ரிக்காஅமெரிக்காஸ்வடக்கு அமெரிக்" + + "காகரீபியன்கிழக்காசியாதெற்காசியாதென்கிழக்காசியாதெற்கு ஐரோப்பாஆஸ்திரலேசி" + + "யாமெலனேஷியாமைக்ரோ நேஷியா பிரதேசம்பாலினேஷியாஆசியாமத்திய ஆசியாமேற்காசியா" + + "ஐரோப்பாகிழக்கு ஐரோப்பாவடக்கு ஐரோப்பாமேற்கு ஐரோப்பாலத்தீன் அமெரிக்கா" + +var taRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0028, 0x003d, 0x0078, 0x009f, 0x00e9, 0x0104, 0x011f, 0x013a, 0x014f, 0x0170, 0x0191, 0x01b9, 0x01d4, 0x01f5, 0x0204, @@ -48878,148 +51640,148 @@ var taRegionIdx = []uint16{ // 292 elements 0x0427, 0x043c, 0x044e, 0x0476, 0x0494, 0x04ac, 0x04be, 0x04ca, 0x0507, 0x0534, 0x057e, 0x05b7, 0x05e4, 0x0609, 0x062b, 0x0637, 0x064c, 0x0658, 0x0673, 0x06a4, 0x06c2, 0x06d4, 0x06f3, 0x0708, - 0x0736, 0x074b, 0x0770, 0x0785, 0x07ad, 0x07c5, 0x07e3, 0x07fb, + 0x0736, 0x074b, 0x075d, 0x0772, 0x079a, 0x07b2, 0x07d0, 0x07e8, // Entry 40 - 7F - 0x082f, 0x084a, 0x0877, 0x088f, 0x08aa, 0x08bf, 0x08e1, 0x08fc, - 0x0914, 0x093b, 0x0969, 0x0969, 0x0987, 0x0996, 0x09cd, 0x09f1, - 0x0a16, 0x0a2e, 0x0a40, 0x0a6e, 0x0a83, 0x0a9b, 0x0ac3, 0x0adb, - 0x0ae7, 0x0b08, 0x0b2c, 0x0b44, 0x0b56, 0x0b74, 0x0ba8, 0x0bba, - 0x0c43, 0x0c5b, 0x0c6d, 0x0c98, 0x0ca7, 0x0ce2, 0x0d45, 0x0d63, - 0x0d7b, 0x0d8d, 0x0da2, 0x0dc7, 0x0de8, 0x0e06, 0x0e1b, 0x0e3e, - 0x0e53, 0x0ec2, 0x0ed1, 0x0ee0, 0x0efb, 0x0f10, 0x0f22, 0x0f31, - 0x0f49, 0x0f5e, 0x0f70, 0x0f94, 0x0faf, 0x0fcd, 0x0fe2, 0x1022, + 0x081c, 0x0837, 0x0864, 0x087c, 0x0897, 0x08ac, 0x08ce, 0x08e9, + 0x0901, 0x0928, 0x0956, 0x096e, 0x098c, 0x099b, 0x09d2, 0x09f6, + 0x0a1b, 0x0a33, 0x0a45, 0x0a73, 0x0a88, 0x0aa0, 0x0ac8, 0x0ae0, + 0x0aec, 0x0b0d, 0x0b31, 0x0b49, 0x0b5b, 0x0b79, 0x0bad, 0x0bbf, + 0x0c48, 0x0c60, 0x0c72, 0x0c9d, 0x0cac, 0x0ce7, 0x0d4a, 0x0d68, + 0x0d80, 0x0d92, 0x0da7, 0x0dcc, 0x0ded, 0x0e0b, 0x0e20, 0x0e43, + 0x0e58, 0x0ec7, 0x0ed6, 0x0ee5, 0x0f00, 0x0f15, 0x0f27, 0x0f36, + 0x0f4e, 0x0f63, 0x0f75, 0x0f99, 0x0fb4, 0x0fd2, 0x0fe7, 0x1027, // Entry 80 - BF - 0x103b, 0x105a, 0x106c, 0x109a, 0x10b5, 0x10c7, 0x10dc, 0x1107, - 0x1137, 0x1149, 0x1161, 0x1173, 0x1191, 0x11b8, 0x11d0, 0x11e2, - 0x11fa, 0x1212, 0x122a, 0x124e, 0x1285, 0x12a0, 0x12cb, 0x12e9, - 0x12f5, 0x1325, 0x1340, 0x1372, 0x13b0, 0x13ce, 0x13ec, 0x1410, - 0x1422, 0x143d, 0x1458, 0x1467, 0x147f, 0x1494, 0x14b2, 0x14c7, - 0x14f2, 0x1501, 0x1532, 0x154a, 0x1562, 0x1583, 0x1595, 0x15aa, - 0x15b6, 0x15c2, 0x15e6, 0x15f2, 0x1601, 0x160d, 0x1644, 0x1679, - 0x169d, 0x16bb, 0x16d0, 0x1719, 0x1753, 0x1778, 0x17b8, 0x17df, + 0x1040, 0x105f, 0x1071, 0x109f, 0x10ba, 0x10cc, 0x10e1, 0x110c, + 0x113c, 0x114e, 0x1166, 0x1178, 0x1196, 0x11bd, 0x11d5, 0x11e7, + 0x11ff, 0x1217, 0x122f, 0x1253, 0x128a, 0x12a5, 0x12d0, 0x12ee, + 0x12fa, 0x132a, 0x1345, 0x1377, 0x13b5, 0x13d3, 0x13f1, 0x1415, + 0x1427, 0x1442, 0x145d, 0x146c, 0x1484, 0x1499, 0x14b7, 0x14cc, + 0x14f7, 0x1506, 0x1537, 0x154f, 0x1567, 0x1588, 0x159a, 0x15af, + 0x15bb, 0x15c7, 0x15eb, 0x15f7, 0x1606, 0x1612, 0x1649, 0x167e, + 0x16a2, 0x16c0, 0x16d5, 0x171e, 0x1758, 0x177d, 0x17bd, 0x17e4, // Entry C0 - FF - 0x17eb, 0x1800, 0x1815, 0x184c, 0x1867, 0x187f, 0x1897, 0x18a6, - 0x18be, 0x18e3, 0x190b, 0x1923, 0x1935, 0x194a, 0x196b, 0x1996, - 0x19b4, 0x19f4, 0x1a12, 0x1a37, 0x1a53, 0x1a68, 0x1a80, 0x1a98, - 0x1abd, 0x1af7, 0x1b1c, 0x1b47, 0x1b59, 0x1b7d, 0x1bb2, 0x1bf2, - 0x1bfe, 0x1c4b, 0x1c57, 0x1c75, 0x1c96, 0x1ca8, 0x1ccd, 0x1cfd, - 0x1d15, 0x1d27, 0x1d3f, 0x1d72, 0x1d84, 0x1d96, 0x1db4, 0x1dc9, - 0x1dde, 0x1e27, 0x1e4f, 0x1e6a, 0x1e7f, 0x1ea6, 0x1ecb, 0x1f26, - 0x1f3e, 0x1f88, 0x1fc5, 0x1fe0, 0x1ffb, 0x2039, 0x2048, 0x205a, + 0x17f0, 0x1805, 0x181a, 0x1851, 0x186c, 0x1884, 0x189c, 0x18ab, + 0x18c3, 0x18e8, 0x1910, 0x1928, 0x193a, 0x194f, 0x1970, 0x199b, + 0x19b9, 0x19f9, 0x1a17, 0x1a3c, 0x1a58, 0x1a6d, 0x1a85, 0x1a9d, + 0x1ac2, 0x1afc, 0x1b21, 0x1b4c, 0x1b5e, 0x1b82, 0x1bb7, 0x1bf7, + 0x1c03, 0x1c50, 0x1c5c, 0x1c7a, 0x1c9b, 0x1cad, 0x1cd2, 0x1d02, + 0x1d1a, 0x1d2c, 0x1d44, 0x1d77, 0x1d89, 0x1d9b, 0x1db9, 0x1dce, + 0x1de3, 0x1e2c, 0x1e54, 0x1e6f, 0x1e84, 0x1eab, 0x1ed0, 0x1f2b, + 0x1f43, 0x1f8d, 0x1fca, 0x1fe5, 0x2000, 0x203e, 0x204d, 0x205f, // Entry 100 - 13F - 0x2066, 0x2075, 0x20a3, 0x20bb, 0x20d9, 0x2110, 0x211f, 0x213a, - 0x215c, 0x2184, 0x219f, 0x21cd, 0x21fb, 0x222c, 0x225a, 0x2288, - 0x22b6, 0x22d7, 0x2305, 0x231d, 0x233e, 0x235c, 0x2389, 0x23b1, - 0x23d5, 0x23f0, 0x242e, 0x244c, 0x245b, 0x247d, 0x249b, 0x24b0, - 0x24db, 0x2503, 0x252b, 0x255c, -} // Size: 608 bytes - -const teRegionStr string = "" + // Size: 9323 bytes - "ఎసెషన్ దీవిఅండొర్రాయునైటెడ్ అరబ్ ఎమిరేట్స్ఆఫ్ఘనిస్తాన్ఆంటిగ్వా మరియు బార" + - "్బుడాఆంగవిల్లాఅల్బేనియాఆర్మేనియాఅంగోలాఅంటార్కటికాఅర్జెంటీనాఅమెరికన్ సమ" + - "ోవాఆస్ట్రియాఆస్ట్రేలియాఅరుబాఆలేండ్ దీవులుఅజర్బైజాన్బోస్నియా మరియు హెర్" + - "జెగొవీనాబార్బడోస్బంగ్లాదేశ్బెల్జియంబుర్కినా ఫాసోబల్గేరియాబహ్రెయిన్బురు" + - "ండిబెనిన్సెంట్ బర్తేలెమీబెర్ముడాబ్రూనైబొలీవియాకరీబియన్ నెదర్లాండ్స్బ్ర" + - "ెజిల్బహామాస్భూటాన్బొవెట్ దీవిబోట్స్వానాబెలారస్బెలిజ్కెనడాకోకోస్ (కీలిం" + - "గ్) దీవులుకాంగో- కిన్షాసాసెంట్రల్ ఆఫ్రికన్ రిపబ్లిక్కాంగో- బ్రాజావిల్ల" + - "ిస్విట్జర్లాండ్కోటెడ్ ఐవోయిర్కుక్ దీవులుచిలీకామెరూన్చైనాకొలంబియాక్లిప్" + - "పర్టన్ దీవికోస్టా రికాక్యూబాకేప్ వెర్డేకురాకవోక్రిస్మస్ దీవిసైప్రస్చెక" + - "్ రిపబ్లిక్జర్మనీడియాగో గార్సియాజిబౌటిడెన్మార్క్డొమెనికాడొమెనికన్ రిపబ" + - "్లిక్అల్జీరియాస్యూటా & మెలిల్లాఈక్వడార్ఎస్టోనియాఈజిప్ట్పడమటి సహారాఎరిట" + - "్రియాస్పెయిన్ఇథియోపియాయూరోపియన్ యూనియన్ఫిన్లాండ్ఫిజీఫాక్\u200cల్యాండ్ " + - "దీవులుమైక్రోనేషియాఫారో దీవులుఫ్రాన్స్\u200cగాబన్యునైటెడ్ కింగ్\u200cడమ" + - "్గ్రెనెడాజార్జియాఫ్రెంచ్ గియానాగ్వేర్నసేఘనాజిబ్రాల్టార్గ్రీన్\u200cలాం" + - "డ్గాంబియాగినియాగ్వాడేలోప్ఈక్వటోరియల్ గినియాగ్రీస్దక్షిణ జార్జియా & దక్" + - "షిణ శాండ్విచ్ దీవులుగ్వాటిమాలగ్వామ్గినియా-బిస్సావ్గయానాహాంకాంగ్ ఎస్ఏఆర" + - "్ చైనాహెర్డ్ & మెక్ డొనాల్డ్ దీవులుహోండురాస్క్రోయేషియాహైటిహంగేరీకేనరీ " + - "దీవులుఇండోనేషియాఐర్లాండ్ఇజ్రాయిల్ఐల్ ఆఫ్ మాన్భారత దేశంబ్రిటీష్ భారతీయ " + - "సముద్రపు ప్రాంతంఇరాక్ఇరాన్ఐస్లాండ్ఇటలీజెర్సీజమైకాజోర్డాన్జపాన్కెన్యాకి" + - "ర్గిజిస్తాన్కంబోడియాకిరిబాటికొమొరోస్సెంట్ కిట్ట్స్ మరియు నెవిస్ఉత్తర క" + - "ొరియాదక్షిణ కొరియాకువైట్కేమాన్ దీవులుకజకస్తాన్లావోస్లెబనాన్సెంట్ లూసియ" + - "ాలిక్టెస్టేన్శ్రీలంకలైబీరియాలెసోతోలిథువేనియాలక్సంబర్గ్లాత్వియాలిబియామొ" + - "రాకోమొనాకోమోల్డోవామోంటేనేగ్రోసెంట్ మార్టిన్మడగాస్కర్మార్షల్ దీవులుమేసి" + - "డోనియామాలిమయన్మార్ (బర్మా)మంగోలియామకావు ఎస్ఏఆర్ చైనాఉత్తర మరియానా దీవు" + - "లుమార్టినిక్మౌరిటేనియామోంట్సేర్రాట్మాల్టామారిషస్మాల్దీవులుమాలావిమెక్సి" + - "కోమలేషియామొజాంబిక్నమీబియాక్రొత్త కాలెడోనియానైజర్నార్ఫోక్ దీవినైజీరియాన" + - "ికరాగువానెదర్లాండ్స్నార్వేనేపాల్నౌరునియున్యూజిలాండ్ఒమన్పనామాపెరూఫ్రెంచ" + - "్ పోలినిషియాపాపువా న్యు గినియాఫిలిప్పీన్స్పాకిస్తాన్పోలాండ్సెంట్ పియెర" + - "్ మరియు మికెలాన్పిట్\u200cకెయిర్న్ దీవులుఫ్యూర్టో రికోపాలస్తీనియన్ ప్ర" + - "ాంతాలుపోర్చుగల్పలావుపరాగ్వేఖతర్ఒషీనియా బయటున్నవిరియూనియన్రోమానియాసెర్బ" + - "ియారష్యారువాండాసౌదీ అరేబియాసోలమన్ దీవులుసీషెల్స్సూడాన్స్వీడన్సింగపూర్స" + - "ెయింట్ హెలినాస్లోవేనియాస్వాల్బార్డ్ మరియు యాన్ మాయేన్స్లోవేకియాసియెర్ర" + - "ా లియాన్సాన్ మారినోసెనెగల్సోమాలియాసూరినామ్దక్షిణ సూడాన్సావోటోమ్ & ప్రి" + - "న్సిపేఎల్ సాల్వడోర్సింట్ మార్టెన్సిరియాస్వాజిల్యాండ్ట్రిస్టన్ డ కన్హాత" + - "ుర్క్ మరియు కాలికోస్ దీవులుచాద్ఫ్రెంచ్ దక్షిణ ప్రాంతాలుటోగోథాయిలాండ్తజ" + - "ికిస్తాన్టోకేలావ్టిమోర్-లెస్టెతుర్కమేనిస్తాన్ట్యునీషియాటోంగాటర్కీట్రిన" + - "ిడాడ్ మరియు టొబాగోటువాలుతైవాన్టాంజానియాఉక్రెయిన్ఉగాండాసంయుక్త రాజ్య అమ" + - "ెరికా బయట ఉన్న దీవులుయునైటెడ్ నేషన్స్అమెరికా సంయుక్త రాష్ట్రాలుఊరుగ్వే" + - "ఉజ్బెకిస్తాన్వాటికన్ నగరంసెంట్ విన్సెంట్ మరియు గ్రెనడీన్స్వెనుజులాబ్రి" + - "టిష్ వర్జిన్ దీవులుయు.ఎస్. వర్జిన్ దీవులువియత్నాంవనాటువాలిస్ & ఫ్యుత్య" + - "ునాసమోవాకొసోవోయెమెన్మాయొట్టిదక్షిణ ఆఫ్రికాజాంబియాజింబాబ్వేతెలియని ప్రా" + - "ంతంప్రపంచంఆఫ్రికాఉత్తర అమెరికాదక్షిణ అమెరికాఓషినియాపశ్చిమ ఆఫ్రికా భూభా" + - "గంమధ్యమ అమెరికాతూర్పు ఆఫ్రికాఉత్తర ఆఫ్రికామధ్యమ ఆఫ్రికాదక్షిణ ఆఫ్రికా " + - "భూభాగంఅమెరికాస్ఉత్తర అమెరికా భూభాగంకరిబ్బియన్తూర్పు ఆసియాదక్షిణ ఆసియాన" + - "ైరుతి ఆసియాదక్షిణ యూరోప్ఆస్ట్రేలేసియామెలనేశియమైక్రోనేశియ ప్రాంతంపాలినే" + - "షియాఆసియామధ్య ఆసియాపడమటి ఆసియాయూరోప్తూర్పు యూరోప్ఉత్తర యూరోప్పశ్చిమ యూ" + - "రోప్లాటిన్ అమెరికా" - -var teRegionIdx = []uint16{ // 292 elements + 0x206b, 0x207a, 0x20a8, 0x20c0, 0x20de, 0x2115, 0x2124, 0x213f, + 0x2161, 0x2189, 0x21a4, 0x21d2, 0x2200, 0x2231, 0x225f, 0x228d, + 0x22bb, 0x22dc, 0x230a, 0x2322, 0x2343, 0x2361, 0x238e, 0x23b6, + 0x23da, 0x23f5, 0x2433, 0x2451, 0x2460, 0x2482, 0x24a0, 0x24b5, + 0x24e0, 0x2508, 0x2530, 0x2530, 0x2561, +} // Size: 610 bytes + +const teRegionStr string = "" + // Size: 9303 bytes + "అసెన్షన్ దీవిఆండోరాయునైటెడ్ అరబ్ ఎమిరేట్స్ఆఫ్ఘనిస్తాన్ఆంటిగ్వా మరియు బార" + + "్బుడాఆంగ్విల్లాఅల్బేనియాఆర్మేనియాఅంగోలాఅంటార్కిటికాఅర్జెంటీనాఅమెరికన్ " + + "సమోవాఆస్ట్రియాఆస్ట్రేలియాఅరుబాఆలాండ్ దీవులుఅజర్బైజాన్బోస్నియా మరియు హె" + + "ర్జెగొవీనాబార్బడోస్బంగ్లాదేశ్బెల్జియంబుర్కినా ఫాసోబల్గేరియాబహ్రెయిన్బు" + + "రుండిబెనిన్సెయింట్ బర్తేలెమీబెర్ముడాబ్రూనేబొలీవియాకరీబియన్ నెదర్లాండ్స" + + "్బ్రెజిల్బహామాస్భూటాన్బొవెట్ దీవిబోట్స్వానాబెలారస్బెలిజ్కెనడాకోకోస్ (క" + + "ీలింగ్) దీవులుకాంగో- కిన్షాసాసెంట్రల్ ఆఫ్రికన్ రిపబ్లిక్కాంగో- బ్రాజావ" + + "ిల్లిస్విట్జర్లాండ్కోట్ డి ఐవోర్కుక్ దీవులుచిలీకామెరూన్చైనాకొలంబియాక్ల" + + "ిప్పర్టన్ దీవికోస్టా రికాక్యూబాకేప్ వెర్డెకురాకవోక్రిస్మస్ దీవిసైప్రస్" + + "చెకియాజర్మనీడియాగో గార్సియాజిబౌటిడెన్మార్క్డొమినికాడొమినికన్ రిపబ్లిక్" + + "అల్జీరియాస్యూటా & మెలిల్లాఈక్వడార్ఎస్టోనియాఈజిప్ట్పడమటి సహారాఎరిట్రియా" + + "స్పెయిన్ఇథియోపియాయూరోపియన్ యూనియన్యూరోజోన్ఫిన్లాండ్ఫిజీఫాక్\u200cల్యాం" + + "డ్ దీవులుమైక్రోనేషియాఫారో దీవులుఫ్రాన్స్\u200cగాబన్యునైటెడ్ కింగ్" + + "\u200cడమ్గ్రెనడాజార్జియాఫ్రెంచ్ గియానాగర్న్\u200cసీఘనాజిబ్రాల్టర్గ్రీన్" + + "\u200cల్యాండ్గాంబియాగినియాగ్వాడెలోప్ఈక్వటోరియల్ గినియాగ్రీస్దక్షిణ జార్జ" + + "ియా & దక్షిణ శాండ్విచ్ దీవులుగ్వాటిమాలాగ్వామ్గినియా-బిస్సావ్గయానాహాంకా" + + "ంగ్ ఎస్ఏఆర్ చైనాహెర్డ్ & మెక్ డొనాల్డ్ దీవులుహోండురాస్క్రోయేషియాహైటిహం" + + "గేరీకేనరీ దీవులుఇండోనేషియాఐర్లాండ్ఇజ్రాయిల్ఐల్ ఆఫ్ మాన్భారతదేశంబ్రిటీష" + + "్ హిందూ మహాసముద్ర ప్రాంతంఇరాక్ఇరాన్ఐస్లాండ్ఇటలీజెర్సీజమైకాజోర్డాన్జపాన" + + "్కెన్యాకిర్గిజిస్తాన్కంబోడియాకిరిబాటికొమొరోస్సెయింట్ కిట్స్ మరియు నెవి" + + "స్ఉత్తర కొరియాదక్షిణ కొరియాకువైట్కేమాన్ దీవులుకజకిస్తాన్లావోస్లెబనాన్స" + + "ెయింట్ లూసియాలిక్టెన్\u200cస్టెయిన్శ్రీలంకలైబీరియాలెసోతోలిథువేనియాలక్స" + + "ంబర్గ్లాత్వియాలిబియామొరాకోమొనాకోమోల్డోవామోంటెనీగ్రోసెయింట్ మార్టిన్మడగ" + + "ాస్కర్మార్షల్ దీవులుమేసిడోనియామాలిమయన్మార్ (బర్మా)మంగోలియామకావ్ ఎస్ఏఆర" + + "్ చైనాఉత్తర మరియానా దీవులుమార్టినీక్మౌరిటేనియామాంట్సెరాట్మాల్టామారిషస్" + + "మాల్దీవులుమాలావిమెక్సికోమలేషియామొజాంబిక్నమీబియాక్రొత్త కాలెడోనియానైజర్" + + "నార్ఫోక్ దీవినైజీరియానికరాగువానెదర్లాండ్స్నార్వేనేపాల్నౌరునియూన్యూజిలా" + + "ండ్ఒమన్పనామాపెరూఫ్రెంచ్ పోలినీషియాపాపువా న్యూ గినియాఫిలిప్పైన్స్పాకిస్" + + "తాన్పోలాండ్సెయింట్ పియెర్ మరియు మికెలాన్పిట్\u200cకెయిర్న్ దీవులుప్యూర" + + "్టో రికోపాలస్తీనియన్ ప్రాంతాలుపోర్చుగల్పాలావ్పరాగ్వేఖతార్ఒషీనియా బయటున" + + "్నవిరియూనియన్రోమానియాసెర్బియారష్యారువాండాసౌదీ అరేబియాసోలమన్ దీవులుసీషె" + + "ల్స్సూడాన్స్వీడన్సింగపూర్సెయింట్ హెలెనాస్లోవేనియాస్వాల్\u200cబార్డ్ & " + + "జాన్ మాయెన్స్లోవేకియాసియెర్రా లియాన్శాన్ మారినోసెనెగల్సోమాలియాసూరినామ్" + + "దక్షిణ సూడాన్సావోటోమ్ & ప్రిన్సిపేఎల్ సాల్వడోర్సింట్ మార్టెన్సిరియాస్వ" + + "ాజిల్యాండ్ట్రిస్టన్ డ కన్హాటర్క్స్ & కైకోస్ దీవులుచాద్ఫ్రెంచ్ దక్షిణ ప" + + "్రాంతాలుటోగోథాయిలాండ్తజికిస్తాన్టోకెలావ్టిమోర్-లెస్టెటర్క్\u200cమెనిస్" + + "తాన్ట్యునీషియాటాంగాటర్కీట్రినిడాడ్ మరియు టొబాగోటువాలుతైవాన్టాంజానియాఉక" + + "్రెయిన్ఉగాండాసంయుక్త రాజ్య అమెరికా బయట ఉన్న దీవులుయునైటెడ్ నేషన్స్యునై" + + "టెడ్ స్టేట్స్ఉరుగ్వేఉజ్బెకిస్తాన్వాటికన్ నగరంసెయింట్ విన్సెంట్ & గ్రెన" + + "డీన్స్వెనిజులాబ్రిటిష్ వర్జిన్ దీవులుయు.ఎస్. వర్జిన్ దీవులువియత్నాంవనా" + + "టువాలిస్ & ఫ్యుత్యునాసమోవాకొసోవోయెమెన్మాయొట్దక్షిణ ఆఫ్రికాజాంబియాజింబా" + + "బ్వేతెలియని ప్రాంతంప్రపంచంఆఫ్రికాఉత్తర అమెరికాదక్షిణ అమెరికాఓషినియాపశ్" + + "చిమ ఆఫ్రికా భూభాగంమధ్యమ అమెరికాతూర్పు ఆఫ్రికాఉత్తర ఆఫ్రికామధ్యమ ఆఫ్రిక" + + "ాదక్షిణ ఆఫ్రికా భూభాగంఅమెరికాస్ఉత్తర అమెరికా భూభాగంకరిబ్బియన్తూర్పు ఆస" + + "ియాదక్షిణ ఆసియానైరుతి ఆసియాదక్షిణ యూరోప్ఆస్ట్రేలేసియామెలనేశియమైక్రోనేశ" + + "ియ ప్రాంతంపాలినేషియాఆసియామధ్య ఆసియాపడమటి ఆసియాయూరోప్తూర్పు యూరోప్ఉత్తర" + + " యూరోప్పశ్చిమ యూరోప్లాటిన్ అమెరికా" + +var teRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F - 0x0000, 0x001f, 0x0037, 0x0078, 0x009c, 0x00dd, 0x00f8, 0x0113, - 0x012e, 0x0140, 0x0161, 0x017f, 0x01a7, 0x01c2, 0x01e3, 0x01f2, - 0x0217, 0x0235, 0x0282, 0x029d, 0x02bb, 0x02d3, 0x02f8, 0x0313, - 0x032e, 0x0343, 0x0355, 0x0380, 0x0398, 0x03aa, 0x03c2, 0x03ff, - 0x0417, 0x042c, 0x043e, 0x045d, 0x047b, 0x0490, 0x04a2, 0x04b1, - 0x04ee, 0x0517, 0x0564, 0x0599, 0x05c3, 0x05eb, 0x060a, 0x0616, - 0x062e, 0x063a, 0x0652, 0x0683, 0x06a2, 0x06b4, 0x06d3, 0x06e8, - 0x0710, 0x0725, 0x074d, 0x075f, 0x078a, 0x079c, 0x07ba, 0x07d2, + 0x0000, 0x0025, 0x0037, 0x0078, 0x009c, 0x00dd, 0x00fb, 0x0116, + 0x0131, 0x0143, 0x0167, 0x0185, 0x01ad, 0x01c8, 0x01e9, 0x01f8, + 0x021d, 0x023b, 0x0288, 0x02a3, 0x02c1, 0x02d9, 0x02fe, 0x0319, + 0x0334, 0x0349, 0x035b, 0x038c, 0x03a4, 0x03b6, 0x03ce, 0x040b, + 0x0423, 0x0438, 0x044a, 0x0469, 0x0487, 0x049c, 0x04ae, 0x04bd, + 0x04fa, 0x0523, 0x0570, 0x05a5, 0x05cf, 0x05f2, 0x0611, 0x061d, + 0x0635, 0x0641, 0x0659, 0x068a, 0x06a9, 0x06bb, 0x06da, 0x06ef, + 0x0717, 0x072c, 0x073e, 0x0750, 0x077b, 0x078d, 0x07ab, 0x07c3, // Entry 40 - 7F - 0x0809, 0x0824, 0x0851, 0x0869, 0x0884, 0x0899, 0x08b8, 0x08d3, - 0x08eb, 0x0906, 0x0937, 0x0937, 0x0952, 0x095e, 0x0995, 0x09b9, - 0x09d8, 0x09f3, 0x0a02, 0x0a36, 0x0a4e, 0x0a66, 0x0a8e, 0x0aa9, - 0x0ab2, 0x0ad6, 0x0afa, 0x0b0f, 0x0b21, 0x0b3f, 0x0b73, 0x0b85, - 0x0bf4, 0x0c0f, 0x0c21, 0x0c4c, 0x0c5b, 0x0c96, 0x0ce3, 0x0cfe, - 0x0d1c, 0x0d28, 0x0d3a, 0x0d5c, 0x0d7a, 0x0d92, 0x0dad, 0x0dcd, - 0x0de6, 0x0e40, 0x0e4f, 0x0e5e, 0x0e76, 0x0e82, 0x0e94, 0x0ea3, - 0x0ebb, 0x0eca, 0x0edc, 0x0f06, 0x0f1e, 0x0f36, 0x0f4e, 0x0f99, + 0x07fa, 0x0815, 0x0842, 0x085a, 0x0875, 0x088a, 0x08a9, 0x08c4, + 0x08dc, 0x08f7, 0x0928, 0x0940, 0x095b, 0x0967, 0x099e, 0x09c2, + 0x09e1, 0x09fc, 0x0a0b, 0x0a3f, 0x0a54, 0x0a6c, 0x0a94, 0x0aac, + 0x0ab5, 0x0ad6, 0x0b00, 0x0b15, 0x0b27, 0x0b45, 0x0b79, 0x0b8b, + 0x0bfa, 0x0c18, 0x0c2a, 0x0c55, 0x0c64, 0x0c9f, 0x0cec, 0x0d07, + 0x0d25, 0x0d31, 0x0d43, 0x0d65, 0x0d83, 0x0d9b, 0x0db6, 0x0dd6, + 0x0dee, 0x0e48, 0x0e57, 0x0e66, 0x0e7e, 0x0e8a, 0x0e9c, 0x0eab, + 0x0ec3, 0x0ed2, 0x0ee4, 0x0f0e, 0x0f26, 0x0f3e, 0x0f56, 0x0fa1, // Entry 80 - BF - 0x0fbb, 0x0fe0, 0x0ff2, 0x1017, 0x1032, 0x1044, 0x1059, 0x107b, - 0x109f, 0x10b4, 0x10cc, 0x10de, 0x10fc, 0x111a, 0x1132, 0x1144, - 0x1156, 0x1168, 0x1180, 0x11a1, 0x11c9, 0x11e4, 0x120c, 0x122a, - 0x1236, 0x1260, 0x1278, 0x12aa, 0x12e2, 0x1300, 0x131e, 0x1345, - 0x1357, 0x136c, 0x138a, 0x139c, 0x13b4, 0x13c9, 0x13e4, 0x13f9, - 0x142d, 0x143c, 0x1461, 0x1479, 0x1494, 0x14b8, 0x14ca, 0x14dc, - 0x14e8, 0x14f4, 0x1515, 0x1521, 0x1530, 0x153c, 0x1570, 0x15a2, - 0x15c6, 0x15e4, 0x15f9, 0x1644, 0x167e, 0x16a3, 0x16e3, 0x16fe, + 0x0fc3, 0x0fe8, 0x0ffa, 0x101f, 0x103d, 0x104f, 0x1064, 0x108c, + 0x10bf, 0x10d4, 0x10ec, 0x10fe, 0x111c, 0x113a, 0x1152, 0x1164, + 0x1176, 0x1188, 0x11a0, 0x11c1, 0x11ef, 0x120a, 0x1232, 0x1250, + 0x125c, 0x1286, 0x129e, 0x12d0, 0x1308, 0x1326, 0x1344, 0x1365, + 0x1377, 0x138c, 0x13aa, 0x13bc, 0x13d4, 0x13e9, 0x1404, 0x1419, + 0x144d, 0x145c, 0x1481, 0x1499, 0x14b4, 0x14d8, 0x14ea, 0x14fc, + 0x1508, 0x1514, 0x1535, 0x1541, 0x1550, 0x155c, 0x1590, 0x15c2, + 0x15e6, 0x1604, 0x1619, 0x166a, 0x16a4, 0x16c9, 0x1709, 0x1724, // Entry C0 - FF - 0x170d, 0x1722, 0x172e, 0x175f, 0x177a, 0x1792, 0x17aa, 0x17b9, - 0x17ce, 0x17f0, 0x1815, 0x182d, 0x183f, 0x1854, 0x186c, 0x1894, - 0x18b2, 0x1906, 0x1924, 0x194f, 0x196e, 0x1983, 0x199b, 0x19b3, - 0x19d8, 0x1a11, 0x1a36, 0x1a5e, 0x1a70, 0x1a97, 0x1ac6, 0x1b14, - 0x1b20, 0x1b64, 0x1b70, 0x1b8b, 0x1bac, 0x1bc4, 0x1be9, 0x1c16, - 0x1c34, 0x1c43, 0x1c52, 0x1c93, 0x1ca5, 0x1cb7, 0x1cd2, 0x1ced, - 0x1cff, 0x1d64, 0x1d92, 0x1ddc, 0x1df1, 0x1e18, 0x1e3a, 0x1e97, - 0x1eaf, 0x1ef0, 0x1f2a, 0x1f42, 0x1f51, 0x1f84, 0x1f93, 0x1fa5, + 0x1736, 0x174b, 0x175a, 0x178b, 0x17a6, 0x17be, 0x17d6, 0x17e5, + 0x17fa, 0x181c, 0x1841, 0x1859, 0x186b, 0x1880, 0x1898, 0x18c0, + 0x18de, 0x1927, 0x1945, 0x1970, 0x198f, 0x19a4, 0x19bc, 0x19d4, + 0x19f9, 0x1a32, 0x1a57, 0x1a7f, 0x1a91, 0x1ab8, 0x1ae7, 0x1b24, + 0x1b30, 0x1b74, 0x1b80, 0x1b9b, 0x1bbc, 0x1bd4, 0x1bf9, 0x1c29, + 0x1c47, 0x1c56, 0x1c65, 0x1ca6, 0x1cb8, 0x1cca, 0x1ce5, 0x1d00, + 0x1d12, 0x1d77, 0x1da5, 0x1dd6, 0x1deb, 0x1e12, 0x1e34, 0x1e89, + 0x1ea1, 0x1ee2, 0x1f1c, 0x1f34, 0x1f43, 0x1f76, 0x1f85, 0x1f97, // Entry 100 - 13F - 0x1fb7, 0x1fcf, 0x1ff7, 0x200c, 0x2027, 0x2052, 0x2067, 0x207c, - 0x20a1, 0x20c9, 0x20de, 0x2119, 0x213e, 0x2166, 0x218b, 0x21b0, - 0x21eb, 0x2206, 0x223e, 0x225c, 0x227e, 0x22a0, 0x22c2, 0x22e7, - 0x230e, 0x2326, 0x235d, 0x237b, 0x238a, 0x23a6, 0x23c5, 0x23d7, - 0x23fc, 0x241e, 0x2443, 0x246b, -} // Size: 608 bytes - -const thRegionStr string = "" + // Size: 9033 bytes + 0x1fa9, 0x1fbb, 0x1fe3, 0x1ff8, 0x2013, 0x203e, 0x2053, 0x2068, + 0x208d, 0x20b5, 0x20ca, 0x2105, 0x212a, 0x2152, 0x2177, 0x219c, + 0x21d7, 0x21f2, 0x222a, 0x2248, 0x226a, 0x228c, 0x22ae, 0x22d3, + 0x22fa, 0x2312, 0x2349, 0x2367, 0x2376, 0x2392, 0x23b1, 0x23c3, + 0x23e8, 0x240a, 0x242f, 0x242f, 0x2457, +} // Size: 610 bytes + +const thRegionStr string = "" + // Size: 9032 bytes "เกาะแอสเซนชันอันดอร์ราสหรัฐอาหรับเอมิเรตส์อัฟกานิสถานแอนติกาและบาร์บูดาแ" + "องกวิลลาแอลเบเนียอาร์เมเนียแองโกลาแอนตาร์กติกาอาร์เจนตินาอเมริกันซามัว" + "ออสเตรียออสเตรเลียอารูบาหมู่เกาะโอลันด์อาเซอร์ไบจานบอสเนียและเฮอร์เซโก" + "วีนาบาร์เบโดสบังกลาเทศเบลเยียมบูร์กินาฟาโซบัลแกเรียบาห์เรนบุรุนดีเบนิน" + "เซนต์บาร์เธเลมีเบอร์มิวดาบรูไนโบลิเวียเนเธอร์แลนด์แคริบเบียนบราซิลบาฮา" + - "มาสภูฏานเกาะบูเวตบอตสวานาเบลารุสเบลีซแคนาดาหมู่เกาะโคโคส (คีลิง)คองโก-" + - "กินชาซาสาธารณรัฐแอฟริกากลางคองโก-บราซซาวิลสวิตเซอร์แลนด์โกตดิวัวร์หมู่" + - "เกาะคุกชิลีแคเมอรูนจีนโคลอมเบียเกาะคลิปเปอร์ตันคอสตาริกาคิวบาเคปเวิร์ด" + - "คูราเซาเกาะคริสต์มาสไซปรัสสาธารณรัฐเช็กเยอรมนีดิเอโกการ์เซียจิบูตีเดนม" + - "าร์กโดมินิกาสาธารณรัฐโดมินิกันแอลจีเรียเซวตาและเมลียาเอกวาดอร์เอสโตเนี" + - "ยอียิปต์ซาฮาราตะวันตกเอริเทรียสเปนเอธิโอเปียสหภาพยุโรปฟินแลนด์ฟิจิหมู่" + + "มาสภูฏานเกาะบูเวตบอตสวานาเบลารุสเบลีซแคนาดาหมู่เกาะโคโคส (คีลิง)คองโก " + + "- กินชาซาสาธารณรัฐแอฟริกากลางคองโก - บราซซาวิลสวิตเซอร์แลนด์โกตดิวัวร์หม" + + "ู่เกาะคุกชิลีแคเมอรูนจีนโคลอมเบียเกาะคลิปเปอร์ตันคอสตาริกาคิวบาเคปเวิร" + + "์ดคูราเซาเกาะคริสต์มาสไซปรัสเช็กเยอรมนีดิเอโกการ์เซียจิบูตีเดนมาร์กโดม" + + "ินิกาสาธารณรัฐโดมินิกันแอลจีเรียเซวตาและเมลียาเอกวาดอร์เอสโตเนียอียิปต" + + "์ซาฮาราตะวันตกเอริเทรียสเปนเอธิโอเปียสหภาพยุโรปยูโรโซนฟินแลนด์ฟิจิหมู่" + "เกาะฟอล์กแลนด์ไมโครนีเซียหมู่เกาะแฟโรฝรั่งเศสกาบองสหราชอาณาจักรเกรเนดา" + "จอร์เจียเฟรนช์เกียนาเกิร์นซีย์กานายิบรอลตาร์กรีนแลนด์แกมเบียกินีกวาเดอ" + "ลูปอิเควทอเรียลกินีกรีซเกาะเซาท์จอร์เจียและหมู่เกาะเซาท์แซนด์วิชกัวเตม" + @@ -49030,211 +51792,211 @@ const thRegionStr string = "" + // Size: 9033 bytes "ซสถานกัมพูชาคิริบาสคอโมโรสเซนต์คิตส์และเนวิสเกาหลีเหนือเกาหลีใต้คูเวตห" + "มู่เกาะเคย์แมนคาซัคสถานลาวเลบานอนเซนต์ลูเซียลิกเตนสไตน์ศรีลังกาไลบีเรี" + "ยเลโซโทลิทัวเนียลักเซมเบิร์กลัตเวียลิเบียโมร็อกโกโมนาโกมอลโดวามอนเตเนโ" + - "กรเซนต์มาตินมาดากัสการ์หมู่เกาะมาร์แชลล์มาซิโดเนียมาลีเมียนมาร์ (พม่า)" + - "มองโกเลียเขตปกครองพิเศษมาเก๊าแห่งสาธารณรัฐประชาชนจีนหมู่เกาะนอร์เทิร์น" + - "มาเรียนามาร์ตินีกมอริเตเนียมอนต์เซอร์รัตมอลตามอริเชียสมัลดีฟส์มาลาวีเม" + - "็กซิโกมาเลเซียโมซัมบิกนามิเบียนิวแคลิโดเนียไนเจอร์เกาะนอร์ฟอล์กไนจีเรี" + - "ยนิการากัวเนเธอร์แลนด์นอร์เวย์เนปาลนาอูรูนีอูเอนิวซีแลนด์โอมานปานามาเป" + - "รูเฟรนช์โปลินีเซียปาปัวนิวกินีฟิลิปปินส์ปากีสถานโปแลนด์แซงปีแยร์และมีเ" + - "กอลงหมู่เกาะพิตแคร์นเปอร์โตริโกดินแดนปาเลสไตน์โปรตุเกสปาเลาปารากวัยกาต" + - "าร์เอาต์ไลอิงโอเชียเนียเรอูนียงโรมาเนียเซอร์เบียรัสเซียรวันดาซาอุดีอาร" + - "ะเบียหมู่เกาะโซโลมอนเซเชลส์ซูดานสวีเดนสิงคโปร์เซนต์เฮเลนาสโลวีเนียสฟาล" + - "บาร์และยานไมเอนสโลวะเกียเซียร์ราลีโอนซานมารีโนเซเนกัลโซมาเลียซูรินาเมซ" + - "ูดานใต้เซาตูเมและปรินซิปีเอลซัลวาดอร์เซนต์มาร์ตินซีเรียสวาซิแลนด์ทริสต" + - "ัน เดอ คูนาหมู่เกาะเติกส์และหมู่เกาะเคคอสชาดเฟรนช์เซาเทิร์นเทร์ริทอรีส" + - "์โตโกไทยทาจิกิสถานโตเกเลาติมอร์-เลสเตเติร์กเมนิสถานตูนิเซียตองกาตุรกีต" + - "รินิแดดและโตเบโกตูวาลูไต้หวันแทนซาเนียยูเครนยูกันดาหมู่เกาะรอบนอกของสห" + - "รัฐอเมริกาสหประชาชาติสหรัฐอเมริกาอุรุกวัยอุซเบกิสถานนครวาติกันเซนต์วิน" + - "เซนต์และเกรนาดีนส์เวเนซุเอลาหมู่เกาะบริติชเวอร์จินหมู่เกาะยูเอสเวอร์จิ" + - "นเวียดนามวานูอาตูวาลลิสและฟุตูนาซามัวโคโซโวเยเมนมายอตแอฟริกาใต้แซมเบีย" + - "ซิมบับเวภูมิภาคที่ไม่รู้จักโลกแอฟริกาอเมริกาเหนืออเมริกาใต้โอเชียเนียแ" + - "อฟริกาตะวันตกอเมริกากลางแอฟริกาตะวันออกแอฟริกาเหนือแอฟริกากลางแอฟริกาต" + - "อนใต้อเมริกาอเมริกาตอนเหนือแคริบเบียนเอเชียตะวันออกเอเชียใต้เอเชียตะวั" + - "นออกเฉียงใต้ยุโรปใต้ออสตราเลเซียเมลานีเซียเขตไมโครนีเซียโปลินีเซียเอเช" + - "ียเอเชียกลางเอเชียตะวันตกยุโรปยุโรปตะวันออกยุโรปเหนือยุโรปตะวันตกละติน" + - "อเมริกา" - -var thRegionIdx = []uint16{ // 292 elements + "กรเซนต์มาร์ตินมาดากัสการ์หมู่เกาะมาร์แชลล์มาซิโดเนียมาลีเมียนมาร์ (พม่" + + "า)มองโกเลียเขตปกครองพิเศษมาเก๊าแห่งสาธารณรัฐประชาชนจีนหมู่เกาะนอร์เทิร" + + "์นมาเรียนามาร์ตินีกมอริเตเนียมอนต์เซอร์รัตมอลตามอริเชียสมัลดีฟส์มาลาวี" + + "เม็กซิโกมาเลเซียโมซัมบิกนามิเบียนิวแคลิโดเนียไนเจอร์เกาะนอร์ฟอล์กไนจีเ" + + "รียนิการากัวเนเธอร์แลนด์นอร์เวย์เนปาลนาอูรูนีอูเอนิวซีแลนด์โอมานปานามา" + + "เปรูเฟรนช์โปลินีเซียปาปัวนิวกินีฟิลิปปินส์ปากีสถานโปแลนด์แซงปีแยร์และม" + + "ีเกอลงหมู่เกาะพิตแคร์นเปอร์โตริโกดินแดนปาเลสไตน์โปรตุเกสปาเลาปารากวัยก" + + "าตาร์เอาต์ไลอิงโอเชียเนียเรอูนียงโรมาเนียเซอร์เบียรัสเซียรวันดาซาอุดีอ" + + "าระเบียหมู่เกาะโซโลมอนเซเชลส์ซูดานสวีเดนสิงคโปร์เซนต์เฮเลนาสโลวีเนียสฟ" + + "าลบาร์และยานไมเอนสโลวะเกียเซียร์ราลีโอนซานมาริโนเซเนกัลโซมาเลียซูรินาเ" + + "มซูดานใต้เซาตูเมและปรินซิปีเอลซัลวาดอร์ซินต์มาร์เทนซีเรียสวาซิแลนด์ทริ" + + "สตันดาคูนาหมู่เกาะเติกส์และหมู่เกาะเคคอสชาดเฟรนช์เซาเทิร์นเทร์ริทอรีส์" + + "โตโกไทยทาจิกิสถานโตเกเลาติมอร์-เลสเตเติร์กเมนิสถานตูนิเซียตองกาตุรกีตร" + + "ินิแดดและโตเบโกตูวาลูไต้หวันแทนซาเนียยูเครนยูกันดาหมู่เกาะรอบนอกของสหร" + + "ัฐอเมริกาสหประชาชาติสหรัฐอเมริกาอุรุกวัยอุซเบกิสถานนครวาติกันเซนต์วินเ" + + "ซนต์และเกรนาดีนส์เวเนซุเอลาหมู่เกาะบริติชเวอร์จินหมู่เกาะยูเอสเวอร์จิน" + + "เวียดนามวานูอาตูวาลลิสและฟุตูนาซามัวโคโซโวเยเมนมายอตแอฟริกาใต้แซมเบียซ" + + "ิมบับเวภูมิภาคที่ไม่รู้จักโลกแอฟริกาอเมริกาเหนืออเมริกาใต้โอเชียเนียแอ" + + "ฟริกาตะวันตกอเมริกากลางแอฟริกาตะวันออกแอฟริกาเหนือแอฟริกากลางแอฟริกาตอ" + + "นใต้อเมริกาอเมริกาตอนเหนือแคริบเบียนเอเชียตะวันออกเอเชียใต้เอเชียตะวัน" + + "ออกเฉียงใต้ยุโรปใต้ออสตราเลเซียเมลานีเซียเขตไมโครนีเซียโปลินีเซียเอเชี" + + "ยเอเชียกลางเอเชียตะวันตกยุโรปยุโรปตะวันออกยุโรปเหนือยุโรปตะวันตกละตินอ" + + "เมริกา" + +var thRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0027, 0x0042, 0x007e, 0x009f, 0x00d5, 0x00f0, 0x010b, 0x0129, 0x013e, 0x0162, 0x0183, 0x01aa, 0x01c2, 0x01e0, 0x01f2, 0x021f, 0x0243, 0x0288, 0x02a3, 0x02be, 0x02d6, 0x02fa, 0x0315, 0x032a, 0x033f, 0x034e, 0x037b, 0x0399, 0x03a8, 0x03c0, 0x0402, 0x0414, 0x0429, 0x0438, 0x0453, 0x046b, 0x0480, 0x048f, 0x04a1, - 0x04da, 0x04ff, 0x053b, 0x0566, 0x0590, 0x05ae, 0x05cf, 0x05db, - 0x05f3, 0x05fc, 0x0617, 0x0647, 0x0662, 0x0671, 0x068c, 0x06a1, - 0x06c8, 0x06da, 0x0701, 0x0716, 0x0740, 0x0752, 0x076a, 0x0782, + 0x04da, 0x0501, 0x053d, 0x056a, 0x0594, 0x05b2, 0x05d3, 0x05df, + 0x05f7, 0x0600, 0x061b, 0x064b, 0x0666, 0x0675, 0x0690, 0x06a5, + 0x06cc, 0x06de, 0x06ea, 0x06ff, 0x0729, 0x073b, 0x0753, 0x076b, // Entry 40 - 7F - 0x07b8, 0x07d3, 0x07fd, 0x0818, 0x0833, 0x0848, 0x086f, 0x088a, - 0x0896, 0x08b4, 0x08d2, 0x08d2, 0x08ea, 0x08f6, 0x092c, 0x094d, - 0x0971, 0x0989, 0x0998, 0x09bf, 0x09d4, 0x09ec, 0x0a10, 0x0a2e, - 0x0a3a, 0x0a58, 0x0a73, 0x0a88, 0x0a94, 0x0aaf, 0x0adf, 0x0aeb, - 0x0b66, 0x0b81, 0x0b8a, 0x0ba9, 0x0bbe, 0x0c3f, 0x0c9c, 0x0cb4, - 0x0ccf, 0x0cdb, 0x0cf0, 0x0d1a, 0x0d3b, 0x0d56, 0x0d6e, 0x0d83, - 0x0d98, 0x0df5, 0x0e04, 0x0e19, 0x0e34, 0x0e46, 0x0e61, 0x0e73, - 0x0e88, 0x0e9d, 0x0eac, 0x0ecd, 0x0ee2, 0x0ef7, 0x0f0c, 0x0f42, + 0x07a1, 0x07bc, 0x07e6, 0x0801, 0x081c, 0x0831, 0x0858, 0x0873, + 0x087f, 0x089d, 0x08bb, 0x08d0, 0x08e8, 0x08f4, 0x092a, 0x094b, + 0x096f, 0x0987, 0x0996, 0x09bd, 0x09d2, 0x09ea, 0x0a0e, 0x0a2c, + 0x0a38, 0x0a56, 0x0a71, 0x0a86, 0x0a92, 0x0aad, 0x0add, 0x0ae9, + 0x0b64, 0x0b7f, 0x0b88, 0x0ba7, 0x0bbc, 0x0c3d, 0x0c9a, 0x0cb2, + 0x0ccd, 0x0cd9, 0x0cee, 0x0d18, 0x0d39, 0x0d54, 0x0d6c, 0x0d81, + 0x0d96, 0x0df3, 0x0e02, 0x0e17, 0x0e32, 0x0e44, 0x0e5f, 0x0e71, + 0x0e86, 0x0e9b, 0x0eaa, 0x0ecb, 0x0ee0, 0x0ef5, 0x0f0a, 0x0f40, // Entry 80 - BF - 0x0f63, 0x0f7e, 0x0f8d, 0x0fba, 0x0fd5, 0x0fde, 0x0ff3, 0x1014, - 0x1035, 0x104d, 0x1065, 0x1077, 0x1092, 0x10b6, 0x10cb, 0x10dd, - 0x10f5, 0x1107, 0x111c, 0x113a, 0x1158, 0x1179, 0x11ac, 0x11ca, - 0x11d6, 0x1200, 0x121b, 0x129c, 0x12ea, 0x1305, 0x1323, 0x134a, - 0x1359, 0x1374, 0x138c, 0x139e, 0x13b6, 0x13ce, 0x13e6, 0x13fe, - 0x1425, 0x143a, 0x1461, 0x1479, 0x1494, 0x14b8, 0x14d0, 0x14df, - 0x14f1, 0x1503, 0x1521, 0x1530, 0x1542, 0x154e, 0x157e, 0x15a2, - 0x15c0, 0x15d8, 0x15ed, 0x1626, 0x1656, 0x1677, 0x16a4, 0x16bc, + 0x0f61, 0x0f7c, 0x0f8b, 0x0fb8, 0x0fd3, 0x0fdc, 0x0ff1, 0x1012, + 0x1033, 0x104b, 0x1063, 0x1075, 0x1090, 0x10b4, 0x10c9, 0x10db, + 0x10f3, 0x1105, 0x111a, 0x1138, 0x115c, 0x117d, 0x11b0, 0x11ce, + 0x11da, 0x1204, 0x121f, 0x12a0, 0x12ee, 0x1309, 0x1327, 0x134e, + 0x135d, 0x1378, 0x1390, 0x13a2, 0x13ba, 0x13d2, 0x13ea, 0x1402, + 0x1429, 0x143e, 0x1465, 0x147d, 0x1498, 0x14bc, 0x14d4, 0x14e3, + 0x14f5, 0x1507, 0x1525, 0x1534, 0x1546, 0x1552, 0x1582, 0x15a6, + 0x15c4, 0x15dc, 0x15f1, 0x162a, 0x165a, 0x167b, 0x16a8, 0x16c0, // Entry C0 - FF - 0x16cb, 0x16e3, 0x16f5, 0x1731, 0x1749, 0x1761, 0x177c, 0x1791, - 0x17a3, 0x17cd, 0x17fa, 0x180f, 0x181e, 0x1830, 0x1848, 0x1869, - 0x1884, 0x18bd, 0x18d8, 0x18ff, 0x191a, 0x192f, 0x1947, 0x195f, - 0x1977, 0x19ad, 0x19d1, 0x19f5, 0x1a07, 0x1a25, 0x1a51, 0x1aab, - 0x1ab4, 0x1b05, 0x1b11, 0x1b1a, 0x1b38, 0x1b4d, 0x1b6f, 0x1b99, - 0x1bb1, 0x1bc0, 0x1bcf, 0x1c02, 0x1c14, 0x1c29, 0x1c44, 0x1c56, - 0x1c6b, 0x1cc2, 0x1ce3, 0x1d07, 0x1d1f, 0x1d40, 0x1d5e, 0x1dac, - 0x1dca, 0x1e0c, 0x1e4b, 0x1e63, 0x1e7b, 0x1ea8, 0x1eb7, 0x1ec9, + 0x16cf, 0x16e7, 0x16f9, 0x1735, 0x174d, 0x1765, 0x1780, 0x1795, + 0x17a7, 0x17d1, 0x17fe, 0x1813, 0x1822, 0x1834, 0x184c, 0x186d, + 0x1888, 0x18c1, 0x18dc, 0x1903, 0x191e, 0x1933, 0x194b, 0x1963, + 0x197b, 0x19b1, 0x19d5, 0x19f9, 0x1a0b, 0x1a29, 0x1a50, 0x1aaa, + 0x1ab3, 0x1b04, 0x1b10, 0x1b19, 0x1b37, 0x1b4c, 0x1b6e, 0x1b98, + 0x1bb0, 0x1bbf, 0x1bce, 0x1c01, 0x1c13, 0x1c28, 0x1c43, 0x1c55, + 0x1c6a, 0x1cc1, 0x1ce2, 0x1d06, 0x1d1e, 0x1d3f, 0x1d5d, 0x1dab, + 0x1dc9, 0x1e0b, 0x1e4a, 0x1e62, 0x1e7a, 0x1ea7, 0x1eb6, 0x1ec8, // Entry 100 - 13F - 0x1ed8, 0x1ee7, 0x1f05, 0x1f1a, 0x1f32, 0x1f6b, 0x1f74, 0x1f89, - 0x1fad, 0x1fcb, 0x1fe9, 0x2013, 0x2034, 0x2061, 0x2085, 0x20a6, - 0x20cd, 0x20e2, 0x210f, 0x212d, 0x2157, 0x2172, 0x21b4, 0x21cc, - 0x21f0, 0x220e, 0x2238, 0x2256, 0x2268, 0x2286, 0x22ad, 0x22bc, - 0x22e3, 0x2301, 0x2325, 0x2349, -} // Size: 608 bytes - -const trRegionStr string = "" + // Size: 3043 bytes + 0x1ed7, 0x1ee6, 0x1f04, 0x1f19, 0x1f31, 0x1f6a, 0x1f73, 0x1f88, + 0x1fac, 0x1fca, 0x1fe8, 0x2012, 0x2033, 0x2060, 0x2084, 0x20a5, + 0x20cc, 0x20e1, 0x210e, 0x212c, 0x2156, 0x2171, 0x21b3, 0x21cb, + 0x21ef, 0x220d, 0x2237, 0x2255, 0x2267, 0x2285, 0x22ac, 0x22bb, + 0x22e2, 0x2300, 0x2324, 0x2324, 0x2348, +} // Size: 610 bytes + +const trRegionStr string = "" + // Size: 3061 bytes "Ascension AdasıAndorraBirleşik Arap EmirlikleriAfganistanAntigua ve Barb" + "udaAnguillaArnavutlukErmenistanAngolaAntarktikaArjantinAmerikan SamoasıA" + "vusturyaAvustralyaArubaÅland AdalarıAzerbaycanBosna-HersekBarbadosBangla" + "deşBelçikaBurkina FasoBulgaristanBahreynBurundiBeninSaint BarthelemyBerm" + - "udaBruneiBolivyaKarayip HollandaBrezilyaBahamalarButanBouvet AdasıBotsva" + - "naBelarusBelizeKanadaCocos (Keeling) AdalarıKongo - KinşasaOrta Afrika C" + - "umhuriyetiKongo - BrazavilİsviçreFildişi SahiliCook AdalarıŞiliKamerunÇi" + - "nKolombiyaClipperton AdasıKosta RikaKübaCape VerdeCuraçaoChristmas Adası" + - "KıbrısÇek CumhuriyetiAlmanyaDiego GarciaCibutiDanimarkaDominikaDominik C" + - "umhuriyetiCezayirSepte ve MelillaEkvadorEstonyaMısırBatı SahraEritreİspa" + - "nyaEtiyopyaAvrupa BirliğiFinlandiyaFijiFalkland AdalarıMikronezyaFaroe A" + - "dalarıFransaGabonBirleşik KrallıkGrenadaGürcistanFransız GuyanasıGuernse" + - "yGanaCebelitarıkGrönlandGambiyaGineGuadalupeEkvator GinesiYunanistanGüne" + - "y Georgia ve Güney Sandwich AdalarıGuatemalaGuamGine-BissauGuyanaÇin Hon" + - "g Kong ÖİBHeard Adası ve McDonald AdalarıHondurasHırvatistanHaitiMacaris" + - "tanKanarya AdalarıEndonezyaİrlandaİsrailMan AdasıHindistanBritanya Hint " + - "Okyanusu TopraklarıIrakİranİzlandaİtalyaJerseyJamaikaÜrdünJaponyaKenyaKı" + - "rgızistanKamboçyaKiribatiKomorlarSaint Kitts ve NevisKuzey KoreGüney Kor" + - "eKuveytCayman AdalarıKazakistanLaosLübnanSaint LuciaLiechtensteinSri Lan" + - "kaLiberyaLesothoLitvanyaLüksemburgLetonyaLibyaFasMonakoMoldovaKaradağSai" + - "nt MartinMadagaskarMarshall AdalarıMakedonyaMaliMyanmar (Burma)Moğolista" + - "nÇin Makao ÖİBKuzey Mariana AdalarıMartinikMoritanyaMontserratMaltaMauri" + - "tiusMaldivlerMalaviMeksikaMalezyaMozambikNamibyaYeni KaledonyaNijerNorfo" + - "lk AdasıNijeryaNikaraguaHollandaNorveçNepalNauruNiueYeni ZelandaUmmanPan" + - "amaPeruFransız PolinezyasıPapua Yeni GineFilipinlerPakistanPolonyaSaint " + - "Pierre ve MiquelonPitcairn AdalarıPorto RikoFilistin BölgeleriPortekizPa" + - "lauParaguayKatarUzak OkyanusyaRéunionRomanyaSırbistanRusyaRuandaSuudi Ar" + - "abistanSolomon AdalarıSeyşellerSudanİsveçSingapurSaint HelenaSlovenyaSva" + - "lbard ve Jan MayenSlovakyaSierra LeoneSan MarinoSenegalSomaliSurinamGüne" + - "y SudanSão Tomé ve PríncipeEl SalvadorSint MaartenSuriyeSvazilandTristan" + - " da CunhaTurks ve Caicos AdalarıÇadFransız Güney TopraklarıTogoTaylandTa" + - "cikistanTokelauTimor-LesteTürkmenistanTunusTongaTürkiyeTrinidad ve Tobag" + - "oTuvaluTayvanTanzanyaUkraynaUgandaABD Uzak AdalarıBirleşmiş MilletlerAme" + - "rika Birleşik DevletleriUruguayÖzbekistanVatikanSaint Vincent ve Grenadi" + - "nlerVenezuelaBritanya Virjin AdalarıABD Virjin AdalarıVietnamVanuatuWall" + - "is ve FutunaSamoaKosovaYemenMayotteGüney AfrikaZambiyaZimbabveBilinmeyen" + - " BölgeDünyaAfrikaKuzey AmerikaGüney AmerikaOkyanusyaBatı AfrikaOrta Amer" + - "ikaDoğu AfrikaKuzey AfrikaOrta AfrikaAfrika’nın GüneyiAmerikaAmerika’nın" + - " KuzeyiKarayiplerDoğu AsyaGüney AsyaGüneydoğu AsyaGüney AvrupaAvustralas" + - "yaMelanezyaMikronezya BölgesiPolinezyaAsyaOrta AsyaBatı AsyaAvrupaDoğu A" + - "vrupaKuzey AvrupaBatı AvrupaLatin Amerika" - -var trRegionIdx = []uint16{ // 292 elements + "udaBruneiBolivyaKarayip HollandasıBrezilyaBahamalarButanBouvet AdasıBots" + + "vanaBelarusBelizeKanadaCocos (Keeling) AdalarıKongo - KinşasaOrta Afrika" + + " CumhuriyetiKongo - BrazavilİsviçreFildişi SahiliCook AdalarıŞiliKamerun" + + "ÇinKolombiyaClipperton AdasıKosta RikaKübaCape VerdeCuraçaoChristmas Ad" + + "asıKıbrısÇekyaAlmanyaDiego GarciaCibutiDanimarkaDominikaDominik Cumhuriy" + + "etiCezayirSepte ve MelillaEkvadorEstonyaMısırBatı SahraEritreİspanyaEtiy" + + "opyaAvrupa BirliğiEuro BölgesiFinlandiyaFijiFalkland AdalarıMikronezyaFa" + + "roe AdalarıFransaGabonBirleşik KrallıkGrenadaGürcistanFransız GuyanasıGu" + + "ernseyGanaCebelitarıkGrönlandGambiyaGineGuadeloupeEkvator GinesiYunanist" + + "anGüney Georgia ve Güney Sandwich AdalarıGuatemalaGuamGine-BissauGuyanaÇ" + + "in Hong Kong ÖİBHeard Adası ve McDonald AdalarıHondurasHırvatistanHaitiM" + + "acaristanKanarya AdalarıEndonezyaİrlandaİsrailMan AdasıHindistanBritanya" + + " Hint Okyanusu TopraklarıIrakİranİzlandaİtalyaJerseyJamaikaÜrdünJaponyaK" + + "enyaKırgızistanKamboçyaKiribatiKomorlarSaint Kitts ve NevisKuzey KoreGün" + + "ey KoreKuveytCayman AdalarıKazakistanLaosLübnanSaint LuciaLiechtensteinS" + + "ri LankaLiberyaLesothoLitvanyaLüksemburgLetonyaLibyaFasMonakoMoldovaKara" + + "dağSaint MartinMadagaskarMarshall AdalarıMakedonyaMaliMyanmar (Burma)Moğ" + + "olistanÇin Makao ÖİBKuzey Mariana AdalarıMartinikMoritanyaMontserratMalt" + + "aMauritiusMaldivlerMalaviMeksikaMalezyaMozambikNamibyaYeni KaledonyaNije" + + "rNorfolk AdasıNijeryaNikaraguaHollandaNorveçNepalNauruNiueYeni ZelandaUm" + + "manPanamaPeruFransız PolinezyasıPapua Yeni GineFilipinlerPakistanPolonya" + + "Saint Pierre ve MiquelonPitcairn AdalarıPorto RikoFilistin BölgeleriPort" + + "ekizPalauParaguayKatarUzak OkyanusyaRéunionRomanyaSırbistanRusyaRuandaSu" + + "udi ArabistanSolomon AdalarıSeyşellerSudanİsveçSingapurSaint HelenaSlove" + + "nyaSvalbard ve Jan MayenSlovakyaSierra LeoneSan MarinoSenegalSomaliSurin" + + "amGüney SudanSão Tomé ve PríncipeEl SalvadorSint MaartenSuriyeSvazilandT" + + "ristan da CunhaTurks ve Caicos AdalarıÇadFransız Güney TopraklarıTogoTay" + + "landTacikistanTokelauTimor-LesteTürkmenistanTunusTongaTürkiyeTrinidad ve" + + " TobagoTuvaluTayvanTanzanyaUkraynaUgandaABD Küçük Harici AdalarıBirleşmi" + + "ş MilletlerAmerika Birleşik DevletleriUruguayÖzbekistanVatikanSaint Vin" + + "cent ve GrenadinlerVenezuelaBritanya Virjin AdalarıABD Virjin AdalarıVie" + + "tnamVanuatuWallis ve FutunaSamoaKosovaYemenMayotteGüney AfrikaZambiyaZim" + + "babveBilinmeyen BölgeDünyaAfrikaKuzey AmerikaGüney AmerikaOkyanusyaBatı " + + "AfrikaOrta AmerikaDoğu AfrikaKuzey AfrikaOrta AfrikaAfrika’nın GüneyiAme" + + "rikaAmerika’nın KuzeyiKarayiplerDoğu AsyaGüney AsyaGüneydoğu AsyaGüney A" + + "vrupaAvustralasyaMelanezyaMikronezya BölgesiPolinezyaAsyaOrta AsyaBatı A" + + "syaAvrupaDoğu AvrupaKuzey AvrupaBatı AvrupaLatin Amerika" + +var trRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0010, 0x0017, 0x0031, 0x003b, 0x004d, 0x0055, 0x005f, 0x0069, 0x006f, 0x0079, 0x0081, 0x0092, 0x009b, 0x00a5, 0x00aa, 0x00b9, 0x00c3, 0x00cf, 0x00d7, 0x00e1, 0x00e9, 0x00f5, 0x0100, - 0x0107, 0x010e, 0x0113, 0x0123, 0x012a, 0x0130, 0x0137, 0x0147, - 0x014f, 0x0158, 0x015d, 0x016a, 0x0172, 0x0179, 0x017f, 0x0185, - 0x019d, 0x01ad, 0x01c4, 0x01d4, 0x01dd, 0x01ec, 0x01f9, 0x01fe, - 0x0205, 0x0209, 0x0212, 0x0223, 0x022d, 0x0232, 0x023c, 0x0244, - 0x0254, 0x025c, 0x026c, 0x0273, 0x027f, 0x0285, 0x028e, 0x0296, + 0x0107, 0x010e, 0x0113, 0x0123, 0x012a, 0x0130, 0x0137, 0x014a, + 0x0152, 0x015b, 0x0160, 0x016d, 0x0175, 0x017c, 0x0182, 0x0188, + 0x01a0, 0x01b0, 0x01c7, 0x01d7, 0x01e0, 0x01ef, 0x01fc, 0x0201, + 0x0208, 0x020c, 0x0215, 0x0226, 0x0230, 0x0235, 0x023f, 0x0247, + 0x0257, 0x025f, 0x0265, 0x026c, 0x0278, 0x027e, 0x0287, 0x028f, // Entry 40 - 7F - 0x02a9, 0x02b0, 0x02c0, 0x02c7, 0x02ce, 0x02d5, 0x02e0, 0x02e6, - 0x02ee, 0x02f6, 0x0305, 0x0305, 0x030f, 0x0313, 0x0324, 0x032e, - 0x033c, 0x0342, 0x0347, 0x0359, 0x0360, 0x036a, 0x037c, 0x0384, - 0x0388, 0x0394, 0x039d, 0x03a4, 0x03a8, 0x03b1, 0x03bf, 0x03c9, - 0x03f3, 0x03fc, 0x0400, 0x040b, 0x0411, 0x0425, 0x0446, 0x044e, - 0x045a, 0x045f, 0x0469, 0x0479, 0x0482, 0x048a, 0x0491, 0x049b, - 0x04a4, 0x04c6, 0x04ca, 0x04cf, 0x04d7, 0x04de, 0x04e4, 0x04eb, - 0x04f2, 0x04f9, 0x04fe, 0x050b, 0x0514, 0x051c, 0x0524, 0x0538, + 0x02a2, 0x02a9, 0x02b9, 0x02c0, 0x02c7, 0x02ce, 0x02d9, 0x02df, + 0x02e7, 0x02ef, 0x02fe, 0x030b, 0x0315, 0x0319, 0x032a, 0x0334, + 0x0342, 0x0348, 0x034d, 0x035f, 0x0366, 0x0370, 0x0382, 0x038a, + 0x038e, 0x039a, 0x03a3, 0x03aa, 0x03ae, 0x03b8, 0x03c6, 0x03d0, + 0x03fa, 0x0403, 0x0407, 0x0412, 0x0418, 0x042c, 0x044d, 0x0455, + 0x0461, 0x0466, 0x0470, 0x0480, 0x0489, 0x0491, 0x0498, 0x04a2, + 0x04ab, 0x04cd, 0x04d1, 0x04d6, 0x04de, 0x04e5, 0x04eb, 0x04f2, + 0x04f9, 0x0500, 0x0505, 0x0512, 0x051b, 0x0523, 0x052b, 0x053f, // Entry 80 - BF - 0x0542, 0x054d, 0x0553, 0x0562, 0x056c, 0x0570, 0x0577, 0x0582, - 0x058f, 0x0598, 0x059f, 0x05a6, 0x05ae, 0x05b9, 0x05c0, 0x05c5, - 0x05c8, 0x05ce, 0x05d5, 0x05dd, 0x05e9, 0x05f3, 0x0604, 0x060d, - 0x0611, 0x0620, 0x062b, 0x063b, 0x0651, 0x0659, 0x0662, 0x066c, - 0x0671, 0x067a, 0x0683, 0x0689, 0x0690, 0x0697, 0x069f, 0x06a6, - 0x06b4, 0x06b9, 0x06c7, 0x06ce, 0x06d7, 0x06df, 0x06e6, 0x06eb, - 0x06f0, 0x06f4, 0x0700, 0x0705, 0x070b, 0x070f, 0x0724, 0x0733, - 0x073d, 0x0745, 0x074c, 0x0764, 0x0775, 0x077f, 0x0792, 0x079a, + 0x0549, 0x0554, 0x055a, 0x0569, 0x0573, 0x0577, 0x057e, 0x0589, + 0x0596, 0x059f, 0x05a6, 0x05ad, 0x05b5, 0x05c0, 0x05c7, 0x05cc, + 0x05cf, 0x05d5, 0x05dc, 0x05e4, 0x05f0, 0x05fa, 0x060b, 0x0614, + 0x0618, 0x0627, 0x0632, 0x0642, 0x0658, 0x0660, 0x0669, 0x0673, + 0x0678, 0x0681, 0x068a, 0x0690, 0x0697, 0x069e, 0x06a6, 0x06ad, + 0x06bb, 0x06c0, 0x06ce, 0x06d5, 0x06de, 0x06e6, 0x06ed, 0x06f2, + 0x06f7, 0x06fb, 0x0707, 0x070c, 0x0712, 0x0716, 0x072b, 0x073a, + 0x0744, 0x074c, 0x0753, 0x076b, 0x077c, 0x0786, 0x0799, 0x07a1, // Entry C0 - FF - 0x079f, 0x07a7, 0x07ac, 0x07ba, 0x07c2, 0x07c9, 0x07d3, 0x07d8, - 0x07de, 0x07ed, 0x07fd, 0x0807, 0x080c, 0x0813, 0x081b, 0x0827, - 0x082f, 0x0844, 0x084c, 0x0858, 0x0862, 0x0869, 0x086f, 0x0876, - 0x0882, 0x0899, 0x08a4, 0x08b0, 0x08b6, 0x08bf, 0x08cf, 0x08e7, - 0x08eb, 0x0906, 0x090a, 0x0911, 0x091b, 0x0922, 0x092d, 0x093a, - 0x093f, 0x0944, 0x094c, 0x095e, 0x0964, 0x096a, 0x0972, 0x0979, - 0x097f, 0x0990, 0x09a5, 0x09c1, 0x09c8, 0x09d3, 0x09da, 0x09f6, - 0x09ff, 0x0a17, 0x0a2a, 0x0a31, 0x0a38, 0x0a48, 0x0a4d, 0x0a53, + 0x07a6, 0x07ae, 0x07b3, 0x07c1, 0x07c9, 0x07d0, 0x07da, 0x07df, + 0x07e5, 0x07f4, 0x0804, 0x080e, 0x0813, 0x081a, 0x0822, 0x082e, + 0x0836, 0x084b, 0x0853, 0x085f, 0x0869, 0x0870, 0x0876, 0x087d, + 0x0889, 0x08a0, 0x08ab, 0x08b7, 0x08bd, 0x08c6, 0x08d6, 0x08ee, + 0x08f2, 0x090d, 0x0911, 0x0918, 0x0922, 0x0929, 0x0934, 0x0941, + 0x0946, 0x094b, 0x0953, 0x0965, 0x096b, 0x0971, 0x0979, 0x0980, + 0x0986, 0x09a2, 0x09b7, 0x09d3, 0x09da, 0x09e5, 0x09ec, 0x0a08, + 0x0a11, 0x0a29, 0x0a3c, 0x0a43, 0x0a4a, 0x0a5a, 0x0a5f, 0x0a65, // Entry 100 - 13F - 0x0a58, 0x0a5f, 0x0a6c, 0x0a73, 0x0a7b, 0x0a8c, 0x0a92, 0x0a98, - 0x0aa5, 0x0ab3, 0x0abc, 0x0ac8, 0x0ad4, 0x0ae0, 0x0aec, 0x0af7, - 0x0b0c, 0x0b13, 0x0b28, 0x0b32, 0x0b3c, 0x0b47, 0x0b57, 0x0b64, - 0x0b70, 0x0b79, 0x0b8c, 0x0b95, 0x0b99, 0x0ba2, 0x0bac, 0x0bb2, - 0x0bbe, 0x0bca, 0x0bd6, 0x0be3, -} // Size: 608 bytes - -const ukRegionStr string = "" + // Size: 6162 bytes - "Острів ВознесінняАндорраОбʼєднані Арабські ЕміратиАфганістанАнтигуа і Ба" + - "рбудаАнгільяАлбаніяВірменіяАнголаАнтарктикаАргентинаАмериканське СамоаА" + - "встріяАвстраліяАрубаАландські островиАзербайджанБоснія і ГерцоговинаБар" + - "бадосБангладешБельгіяБуркіна-ФасоБолгаріяБахрейнБурундіБенінСен-Бартель" + - "міБермудські островиБрунейБолівіяНідерландські Карибські островиБразилі" + + 0x0a6a, 0x0a71, 0x0a7e, 0x0a85, 0x0a8d, 0x0a9e, 0x0aa4, 0x0aaa, + 0x0ab7, 0x0ac5, 0x0ace, 0x0ada, 0x0ae6, 0x0af2, 0x0afe, 0x0b09, + 0x0b1e, 0x0b25, 0x0b3a, 0x0b44, 0x0b4e, 0x0b59, 0x0b69, 0x0b76, + 0x0b82, 0x0b8b, 0x0b9e, 0x0ba7, 0x0bab, 0x0bb4, 0x0bbe, 0x0bc4, + 0x0bd0, 0x0bdc, 0x0be8, 0x0be8, 0x0bf5, +} // Size: 610 bytes + +const ukRegionStr string = "" + // Size: 6164 bytes + "Острів ВознесінняАндорраОбʼєднані Арабські ЕміратиАфганістанАнтиґуа і Ба" + + "рбудаАнґільяАлбаніяВірменіяАнголаАнтарктикаАргентинаАмериканське СамоаА" + + "встріяАвстраліяАрубаАландські островиАзербайджанБоснія і ГерцеґовинаБар" + + "бадосБангладешБельґіяБуркіна-ФасоБолгаріяБахрейнБурундіБенінСен-Бартель" + + "міБермудські островиБрунейБолівіяНідерландські Карибські островиБразілі" + "яБагамські ОстровиБутанОстрів БувеБотсванаБілорусьБелізКанадаКокосові (" + "Кілінгові) островиКонго – КіншасаЦентральноафриканська РеспублікаКонго " + - "– БраззавільШвейцаріяКот-д’ІвуарОстрови КукаЧиліКамерунКитайКолумбіяОс" + - "трів КліппертонКоста-РикаКубаКабо-ВердеКюрасаоОстрів РіздваКіпрЧеська Р" + - "еспублікаНімеччинаДієго-ГарсіяДжибутіДаніяДомінікаДомініканська Республ" + - "ікаАлжирСеута і МелільяЕквадорЕстоніяЄгипетЗахідна СахараЕритреяІспанія" + - "ЕфіопіяЄвропейський СоюзФінляндіяФіджіФолклендські островиМікронезіяФар" + - "ерські ОстровиФранціяГабонВелика БританіяГренадаГрузіяФранцузька Гвіана" + - "ГернсіГанаГібралтарГренландіяГамбіяГвінеяГваделупаЕкваторіальна ГвінеяГ" + - "реціяПівденна Джорджія та Південні Сандвічеві островиГватемалаГуамГвіне" + - "я-БісауГаянаГонконг, О.А.Р. КитаюОстрови Херд і Мак-ДональдГондурасХорв" + - "атіяГаїтіУгорщинаКанарські островиІндонезіяІрландіяІзраїльОстрів МенІнд" + - "іяБританські території в Індійському океаніІракІранІсландіяІталіяДжерсі" + - "ЯмайкаЙорданіяЯпоніяКеніяКиргизстанКамбоджаКірибатіКоморські островиСен" + - "т-Кітс і НевісПівнічна КореяПівденна КореяКувейтКайманові островиКазахс" + - "танЛаосЛіванСент-ЛюсіяЛіхтенштейнШрі-ЛанкаЛіберіяЛесотоЛитваЛюксембургЛ" + - "атвіяЛівіяМароккоМонакоМолдоваЧорногоріяСен-МартенМадагаскарМаршаллові " + - "ОстровиМакедоніяМаліМʼянма (Бірма)МонголіяМакао, О.А.Р КитаюПівнічні Ма" + - "ріанські ОстровиМартинікаМавританіяМонтсерратМальтаМаврикійМальдівиМала" + - "віМексикаМалайзіяМозамбікНамібіяНова КаледоніяНігерОстрів НорфолкНігері" + - "яНікарагуаНідерландиНорвегіяНепалНауруНіуеНова ЗеландіяОманПанамаПеруФр" + - "анцузька ПолінезіяПапуа Нова ГвінеяФіліппіниПакистанПольщаСен-Пʼєр і Мі" + - "келонОстрови ПіткернПуерто-РикоПалестинські територіїПортугаліяПалауПар" + - "агвайКатарВіддалені острови ОкеаніїРеюньйонРумуніяСербіяРосіяРуандаСауд" + - "івська АравіяСоломонові ОстровиСейшельські ОстровиСуданШвеціяСінгапурОс" + - "трів Святої ЄлениСловеніяОстрови Свальбард і Ян-МаєнСловаччинаСьєрра-Ле" + - "онеСан-МариноСенегалСомаліСуринамПівденний СуданСан-Томе і ПрінсіпіСаль" + - "вадорСінт-МартенСиріяСвазілендТрістан-да-КуньяОстрови Теркс і КайкосЧад" + - "Французькі Південні ТериторіїТогоТаїландТаджикистанТокелауТимор-ЛештіТу" + - "ркменістанТунісТонгаТуреччинаТринідад і ТобагоТувалуТайваньТанзаніяУкра" + - "їнаУгандаВіддалені острови СШАОрганізація Об’єднаних НаційСШАУругвайУзб" + - "екистанВатиканСент-Вінсент і ГренадиниВенесуелаБританські Віргінські ос" + - "тровиВіргінські острови, СШАВʼєтнамВануатуВолліс і ФутунаСамоаКосовоЄме" + - "нМайоттаПівденно-Африканська РеспублікаЗамбіяЗімбабвеНевідомий регіонСв" + - "ітАфрикаПівнічна АмерикаПівденна АмерикаОкеаніяЗахідна АфрикаЦентральна" + - " АмерикаСхідна АфрикаПівнічна АфрикаЦентральна АфрикаПівденна АфрикаАмер" + + "– БраззавільШвейцаріяКот-д’ІвуарОстрови КукаЧіліКамерунКитайКолумбіяОс" + + "трів КліппертонКоста-РікаКубаКабо-ВердеКюрасаоОстрів РіздваКіпрЧехіяНім" + + "еччинаДієго-ГарсіяДжибутіДаніяДомінікаДомініканська РеспублікаАлжирСеут" + + "а і МелільяЕквадорЕстоніяЄгипетЗахідна СахараЕритреяІспаніяЕфіопіяЄвроп" + + "ейський СоюзЄврозонаФінляндіяФіджіФолклендські островиМікронезіяФарерсь" + + "кі ОстровиФранціяГабонВелика БританіяҐренадаГрузіяФранцузька ҐвіанаҐерн" + + "сіГанॳбралтарҐренландіяГамбіяГвінеяҐваделупаЕкваторіальна ГвінеяГреці" + + "яПівденна Джорджія та Південні Сандвічеві островиҐватемалаҐуамГвінея-Бі" + + "сауҐайанаГонконг, О.А.Р. Китаюострів Герд і острови МакдоналдГондурасХо" + + "рватіяГаїтіУгорщинаКанарські островиІндонезіяІрландіяІзраїльОстрів МенІ" + + "ндіяБританська територія в Індійському ОкеаніІракІранІсландіяІталіяДжер" + + "сіЯмайкаЙорданіяЯпоніяКеніяКиргизстанКамбоджаКірібатіКоморські островиС" + + "ент-Кітс і НевісПівнічна КореяПівденна КореяКувейтКайманові островиКаза" + + "хстанЛаосЛіванСент-ЛюсіяЛіхтенштейнШрі-ЛанкаЛіберіяЛесотоЛитваЛюксембур" + + "ґЛатвіяЛівіяМароккоМонакоМолдоваЧорногоріяСен-МартенМадагаскарМаршаллов" + + "і ОстровиМакедоніяМаліМʼянма (Бірма)МонголіяМакао, О.А.Р КитаюПівнічні " + + "Маріанські ОстровиМартінікаМавританіяМонтсерратМальтаМаврікійМальдівиМа" + + "лавіМексикаМалайзіяМозамбікНамібіяНова КаледоніяНігерОстрів НорфолкНіге" + + "ріяНікараґуаНідерландиНорвеґіяНепалНауруНіуеНова ЗеландіяОманПанамаПеру" + + "Французька ПолінезіяПапуа-Нова ҐвінеяФіліппіниПакистанПольщаСен-Пʼєр і " + + "МікелонОстрови ПіткернПуерто-РікоПалестинські територіїПортуґаліяПалауП" + + "араґвайКатарВіддалена ОкеаніяРеюньйонРумуніяСербіяРосіяРуандаСаудівська" + + " АравіяСоломонові ОстровиСейшельські ОстровиСуданШвеціяСінгапурОстрів Св" + + "ятої ЄлениСловеніяШпіцберґен і Ян-МайенСловаччинаСьєрра-ЛеонеСан-Маріно" + + "СенегалСомаліСурінамПівденний СуданСан-Томе і ПрінсіпіСальвадорСінт-Мар" + + "тенСиріяСвазілендТрістан-да-КуньяОстрови Теркс і КайкосЧадФранцузькі Пі" + + "вденні ТериторіїТогоТаїландТаджикистанТокелауТімор-ЛештіТуркменістанТун" + + "ісТонґаТуреччинаТрінідад і ТобаґоТувалуТайваньТанзаніяУкраїнаУгандаВідд" + + "алені острови СШАОрганізація Об’єднаних НаційСполучені ШтатиУруґвайУзбе" + + "кистанВатиканСент-Вінсент і ҐренадіниВенесуелаБританські Віргінські ост" + + "ровиВіргінські острови, СШАВʼєтнамВануатуУолліс і ФутунаСамоаКосовоЄмен" + + "МайоттаПівденно-Африканська РеспублікаЗамбіяЗімбабвеНевідомий регіонСві" + + "тАфрикаПівнічна АмерикаПівденна АмерикаОкеаніяЗахідна АфрикаЦентральна " + + "АмерикаСхідна АфрикаПівнічна АфрикаЦентральна АфрикаПівденна АфрикаАмер" + "икаПівнічна Америка (регіон)Карибський басейнСхідна АзіяПівденна АзіяПі" + "вденно-Східна АзіяПівденна ЄвропаАвстралазіяМеланезіяМікронезійський ре" + "гіонПолінезіяАзіяЦентральна АзіяЗахідна АзіяЄвропаСхідна ЄвропаПівнічна" + " ЄвропаЗахідна ЄвропаЛатинська Америка" -var ukRegionIdx = []uint16{ // 292 elements +var ukRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0021, 0x002f, 0x0061, 0x0075, 0x0095, 0x00a3, 0x00b1, 0x00c1, 0x00cd, 0x00e1, 0x00f3, 0x0116, 0x0124, 0x0136, 0x0140, @@ -49243,74 +52005,74 @@ var ukRegionIdx = []uint16{ // 292 elements 0x02bc, 0x02dd, 0x02e7, 0x02fc, 0x030c, 0x031c, 0x0326, 0x0332, 0x0366, 0x0383, 0x03c2, 0x03e5, 0x03f7, 0x040d, 0x0424, 0x042c, 0x043a, 0x0444, 0x0454, 0x0475, 0x0488, 0x0490, 0x04a3, 0x04b1, - 0x04ca, 0x04d2, 0x04f3, 0x0505, 0x051c, 0x052a, 0x0534, 0x0544, + 0x04ca, 0x04d2, 0x04dc, 0x04ee, 0x0505, 0x0513, 0x051d, 0x052d, // Entry 40 - 7F - 0x0573, 0x057d, 0x0599, 0x05a7, 0x05b5, 0x05c1, 0x05dc, 0x05ea, - 0x05f8, 0x0606, 0x0627, 0x0627, 0x0639, 0x0643, 0x066a, 0x067e, - 0x069f, 0x06ad, 0x06b7, 0x06d4, 0x06e2, 0x06ee, 0x070f, 0x071b, - 0x0723, 0x0735, 0x0749, 0x0755, 0x0761, 0x0773, 0x079a, 0x07a6, - 0x0801, 0x0813, 0x081b, 0x0832, 0x083c, 0x0860, 0x0890, 0x08a0, - 0x08b0, 0x08ba, 0x08ca, 0x08eb, 0x08fd, 0x090d, 0x091b, 0x092e, - 0x0938, 0x0986, 0x098e, 0x0996, 0x09a6, 0x09b2, 0x09be, 0x09ca, - 0x09da, 0x09e6, 0x09f0, 0x0a04, 0x0a14, 0x0a24, 0x0a45, 0x0a64, + 0x055c, 0x0566, 0x0582, 0x0590, 0x059e, 0x05aa, 0x05c5, 0x05d3, + 0x05e1, 0x05ef, 0x0610, 0x0620, 0x0632, 0x063c, 0x0663, 0x0677, + 0x0698, 0x06a6, 0x06b0, 0x06cd, 0x06db, 0x06e7, 0x0708, 0x0714, + 0x071c, 0x072e, 0x0742, 0x074e, 0x075a, 0x076c, 0x0793, 0x079f, + 0x07fa, 0x080c, 0x0814, 0x082b, 0x0837, 0x085b, 0x0895, 0x08a5, + 0x08b5, 0x08bf, 0x08cf, 0x08f0, 0x0902, 0x0912, 0x0920, 0x0933, + 0x093d, 0x098b, 0x0993, 0x099b, 0x09ab, 0x09b7, 0x09c3, 0x09cf, + 0x09df, 0x09eb, 0x09f5, 0x0a09, 0x0a19, 0x0a29, 0x0a4a, 0x0a69, // Entry 80 - BF - 0x0a7f, 0x0a9a, 0x0aa6, 0x0ac7, 0x0ad9, 0x0ae1, 0x0aeb, 0x0afe, - 0x0b14, 0x0b25, 0x0b33, 0x0b3f, 0x0b49, 0x0b5d, 0x0b69, 0x0b73, - 0x0b81, 0x0b8d, 0x0b9b, 0x0baf, 0x0bc2, 0x0bd6, 0x0bf9, 0x0c0b, - 0x0c13, 0x0c2c, 0x0c3c, 0x0c5b, 0x0c8f, 0x0ca1, 0x0cb5, 0x0cc9, - 0x0cd5, 0x0ce5, 0x0cf5, 0x0d01, 0x0d0f, 0x0d1f, 0x0d2f, 0x0d3d, - 0x0d58, 0x0d62, 0x0d7d, 0x0d8b, 0x0d9d, 0x0db1, 0x0dc1, 0x0dcb, - 0x0dd5, 0x0ddd, 0x0df6, 0x0dfe, 0x0e0a, 0x0e12, 0x0e39, 0x0e59, - 0x0e6b, 0x0e7b, 0x0e87, 0x0ea8, 0x0ec5, 0x0eda, 0x0f05, 0x0f19, + 0x0a84, 0x0a9f, 0x0aab, 0x0acc, 0x0ade, 0x0ae6, 0x0af0, 0x0b03, + 0x0b19, 0x0b2a, 0x0b38, 0x0b44, 0x0b4e, 0x0b62, 0x0b6e, 0x0b78, + 0x0b86, 0x0b92, 0x0ba0, 0x0bb4, 0x0bc7, 0x0bdb, 0x0bfe, 0x0c10, + 0x0c18, 0x0c31, 0x0c41, 0x0c60, 0x0c94, 0x0ca6, 0x0cba, 0x0cce, + 0x0cda, 0x0cea, 0x0cfa, 0x0d06, 0x0d14, 0x0d24, 0x0d34, 0x0d42, + 0x0d5d, 0x0d67, 0x0d82, 0x0d90, 0x0da2, 0x0db6, 0x0dc6, 0x0dd0, + 0x0dda, 0x0de2, 0x0dfb, 0x0e03, 0x0e0f, 0x0e17, 0x0e3e, 0x0e5e, + 0x0e70, 0x0e80, 0x0e8c, 0x0ead, 0x0eca, 0x0edf, 0x0f0a, 0x0f1e, // Entry C0 - FF - 0x0f23, 0x0f33, 0x0f3d, 0x0f6d, 0x0f7d, 0x0f8b, 0x0f97, 0x0fa1, - 0x0fad, 0x0fce, 0x0ff1, 0x1016, 0x1020, 0x102c, 0x103c, 0x1060, - 0x1070, 0x10a2, 0x10b6, 0x10cd, 0x10e0, 0x10ee, 0x10fa, 0x1108, - 0x1125, 0x1148, 0x115a, 0x116f, 0x1179, 0x118b, 0x11a9, 0x11d2, - 0x11d8, 0x1210, 0x1218, 0x1226, 0x123c, 0x124a, 0x125f, 0x1277, - 0x1281, 0x128b, 0x129d, 0x12bd, 0x12c9, 0x12d7, 0x12e7, 0x12f5, - 0x1301, 0x1329, 0x1360, 0x1366, 0x1374, 0x1388, 0x1396, 0x13c3, - 0x13d5, 0x140d, 0x1438, 0x1446, 0x1454, 0x1470, 0x147a, 0x1486, + 0x0f28, 0x0f38, 0x0f42, 0x0f63, 0x0f73, 0x0f81, 0x0f8d, 0x0f97, + 0x0fa3, 0x0fc4, 0x0fe7, 0x100c, 0x1016, 0x1022, 0x1032, 0x1056, + 0x1066, 0x108d, 0x10a1, 0x10b8, 0x10cb, 0x10d9, 0x10e5, 0x10f3, + 0x1110, 0x1133, 0x1145, 0x115a, 0x1164, 0x1176, 0x1194, 0x11bd, + 0x11c3, 0x11fb, 0x1203, 0x1211, 0x1227, 0x1235, 0x124a, 0x1262, + 0x126c, 0x1276, 0x1288, 0x12a8, 0x12b4, 0x12c2, 0x12d2, 0x12e0, + 0x12ec, 0x1314, 0x134b, 0x1368, 0x1376, 0x138a, 0x1398, 0x13c5, + 0x13d7, 0x140f, 0x143a, 0x1448, 0x1456, 0x1472, 0x147c, 0x1488, // Entry 100 - 13F - 0x148e, 0x149c, 0x14d8, 0x14e4, 0x14f4, 0x1513, 0x151b, 0x1527, - 0x1546, 0x1565, 0x1573, 0x158e, 0x15b1, 0x15ca, 0x15e7, 0x1608, - 0x1625, 0x1633, 0x1661, 0x1682, 0x1697, 0x16b0, 0x16d6, 0x16f3, - 0x1709, 0x171b, 0x1746, 0x1758, 0x1760, 0x177d, 0x1794, 0x17a0, - 0x17b9, 0x17d6, 0x17f1, 0x1812, -} // Size: 608 bytes - -const urRegionStr string = "" + // Size: 5123 bytes + 0x1490, 0x149e, 0x14da, 0x14e6, 0x14f6, 0x1515, 0x151d, 0x1529, + 0x1548, 0x1567, 0x1575, 0x1590, 0x15b3, 0x15cc, 0x15e9, 0x160a, + 0x1627, 0x1635, 0x1663, 0x1684, 0x1699, 0x16b2, 0x16d8, 0x16f5, + 0x170b, 0x171d, 0x1748, 0x175a, 0x1762, 0x177f, 0x1796, 0x17a2, + 0x17bb, 0x17d8, 0x17f3, 0x17f3, 0x1814, +} // Size: 610 bytes + +const urRegionStr string = "" + // Size: 5126 bytes "اسینشن آئلینڈانڈورامتحدہ عرب اماراتافغانستانانٹیگوا اور باربوداانگوئیلاا" + "لبانیہآرمینیاانگولاانٹارکٹیکاارجنٹیناامریکی ساموآآسٹریاآسٹریلیااروباآلی" + - "نڈ آئلینڈزآذر بائیجانبوسنیا اور ہرزیگووینابارباڈوسبنگلہ دیشبیلجیمبرکینا" + - " فاسوبلغاریہبحرینبرونڈیبیننسینٹ برتھلیمیبرمودابرونائیبولیویاکریبیائی نید" + + "نڈ آئلینڈزآذربائیجانبوسنیا اور ہرزیگووینابارباڈوسبنگلہ دیشبیلجیمبرکینا " + + "فاسوبلغاریہبحرینبرونڈیبیننسینٹ برتھلیمیبرمودابرونائیبولیویاکریبیائی نید" + "رلینڈزبرازیلبہاماسبھوٹانبؤویٹ آئلینڈبوتسوانابیلاروسبیلائزکینیڈاکوکوس (ک" + "یلنگ) جزائرکانگو - کنشاساوسط افریقی جمہوریہکانگو - برازاویلےسوئٹزر لینڈ" + "کوٹ ڈی آئیوریکک آئلینڈزچلیکیمرونچینکولمبیاکلپرٹن آئلینڈکوسٹا ریکاکیوباک" + - "یپ ورڈیکیوراکاؤجزیرہ کرسمسقبرصچیک جمہوریہجرمنیڈائجو گارسیاجبوتیڈنمارکڈو" + - "منیکاڈومنیکن جمہوریہالجیریاسیئوٹا اور میلیلاایکواڈوراسٹونیامصرمغربی صحا" + - "رااریٹیریاہسپانیہایتھوپیایوروپی یونینفن لینڈفجیفاکلینڈ جزائرمائکرونیشیا" + - "جزائر فاروفرانسگیبونسلطنت متحدہگریناڈاجارجیافرینچ گیاناگوئرنسیگھاناجبل " + - "الطارقگرین لینڈگیمبیاگنیگواڈیلوپاستوائی گیانایونانجنوبی جارجیا اور جنوب" + - "ی سینڈوچ جزائرگواٹے مالاگوامگنی بساؤگیاناہانگ کانگ SAR چینہیرڈ جزیرہ و " + - "میکڈولینڈ جزائرہونڈاروسکروشیاہیٹیہنگریکینری آئلینڈزانڈونیشیاآئرلینڈاسرا" + - "ئیلآئل آف مینبھارتبرطانوی بحر ہند کا علاقہعراقایرانآئس لینڈاٹلیجرسیجمائ" + - "یکااردنجاپانکینیاکرغزستانکمبوڈیاکریباتیکوموروسسینٹ کٹس اور نیویسشمالی ک" + - "وریاجنوبی کوریاکویتکیمین آئلینڈزقازقستانلاؤسلبنانسینٹ لوسیالیشٹنسٹائنسر" + - "ی لنکالائبیریالیسوتھولیتھونیالکسمبرگلٹویالیبیامراکشموناکومالدووامونٹے ن" + - "یگروسینٹ مارٹنمڈغاسکرمارشل آئلینڈزمقدونیہمالیمیانمار (برما)منگولیامکاؤ " + - "SAR چینشمالی ماریانا آئلینڈزمارٹینکموریطانیہمونٹسیراٹمالٹاماریشسمالدیپمل" + - "اویمیکسیکوملائشیاموزمبیقنامیبیانیو کلیڈونیانائجرنارفوک آئلینڈنائجیریانک" + - "اراگووانیدر لینڈزناروےنیپالنؤرونیئونیوزی لینڈعمانپانامہپیروفرانسیسی پول" + - "ینیشیاپاپوآ نیو گنیفلپائنپاکستانپولینڈسینٹ پیئر اور میکلیئونپٹکائرن جزا" + - "ئرپیورٹو ریکوفلسطینی خطےپرتگالپلاؤپیراگوئےقطربیرونی اوشیانیاری یونینروم" + - "انیہسربیاروسروانڈاسعودی عربسولومن آئلینڈزسشلیزسوڈانسویڈنسنگاپورسینٹ ہیل" + - "یناسلووینیاسوالبرڈ اور جان ماینسلوواکیہسیئر لیونسان مارینوسینیگلصومالیہ" + + "یپ ورڈیکیوراکاؤجزیرہ کرسمسقبرصچیکیاجرمنیڈائجو گارسیاجبوتیڈنمارکڈومنیکاج" + + "مہوریہ ڈومينيکنالجیریاسیئوٹا اور میلیلاایکواڈوراسٹونیامصرمغربی صحارااری" + + "ٹیریاہسپانیہایتھوپیایوروپی یونینیوروزونفن لینڈفجیفاکلینڈ جزائرمائکرونیش" + + "یاجزائر فاروفرانسگیبونسلطنت متحدہگریناڈاجارجیافرینچ گیاناگوئرنسیگھاناجب" + + "ل الطارقگرین لینڈگیمبیاگنیگواڈیلوپاستوائی گیانایونانجنوبی جارجیا اور جن" + + "وبی سینڈوچ جزائرگواٹے مالاگوامگنی بساؤگیاناہانگ کانگ SAR چینہیرڈ جزیرہ " + + "و میکڈولینڈ جزائرہونڈاروسکروشیاہیٹیہنگریکینری آئلینڈزانڈونیشیاآئرلینڈاس" + + "رائیلآئل آف مینبھارتبرطانوی بحر ہند کا علاقہعراقایرانآئس لینڈاٹلیجرسیجم" + + "ائیکااردنجاپانکینیاکرغزستانکمبوڈیاکریباتیکوموروسسینٹ کٹس اور نیویسشمالی" + + " کوریاجنوبی کوریاکویتکیمین آئلینڈزقزاخستانلاؤسلبنانسینٹ لوسیالیشٹنسٹائنس" + + "ری لنکالائبیریالیسوتھولیتھونیالکسمبرگلٹویالیبیامراکشموناکومالدووامونٹے " + + "نیگروسینٹ مارٹنمڈغاسکرمارشل آئلینڈزمقدونیہمالیمیانمار (برما)منگولیامکاؤ" + + " SAR چینشمالی ماریانا آئلینڈزمارٹینکموریطانیہمونٹسیراٹمالٹاماریشسمالدیپم" + + "لاویمیکسیکوملائشیاموزمبیقنامیبیانیو کلیڈونیانائجرنارفوک آئلینڈنائجیریان" + + "کاراگووانیدر لینڈزناروےنیپالنؤرونیئونیوزی لینڈعمانپانامہپیروفرانسیسی پو" + + "لینیشیاپاپوآ نیو گنیفلپائنپاکستانپولینڈسینٹ پیئر اور میکلیئونپٹکائرن جز" + + "ائرپیورٹو ریکوفلسطینی خطےپرتگالپلاؤپیراگوئےقطربیرونی اوشیانیاری یونینرو" + + "مانیہسربیاروسروانڈاسعودی عربسولومن آئلینڈزسشلیزسوڈانسویڈنسنگاپورسینٹ ہی" + + "لیناسلووینیاسوالبرڈ اور جان ماینسلوواکیہسیرالیونسان مارینوسینیگلصومالیہ" + "سورینامجنوبی سوڈانساؤ ٹوم اور پرنسپےال سلواڈورسنٹ مارٹنشامسوازی لینڈٹرس" + "ٹن ڈا کیونہاترکس اور کیکاؤس جزائرچاڈفرانسیسی جنوبی خطےٹوگوتھائی لینڈتاج" + "کستانٹوکیلاؤتیمور لیسٹترکمانستانتونسٹونگاترکیترینیداد اور ٹوباگوٹووالوت" + "ائیوانتنزانیہیوکرینیوگنڈاامریکہ سے باہر کے چھوٹے جزائزاقوام متحدہریاستہ" + - "ائے متحدہیوروگوئےازبکستانواٹیکن سٹیسینٹ ونسنٹ اور گرینیڈائنزوینزوئیلابر" + + "ائے متحدہیوروگوئےازبکستانویٹیکن سٹیسینٹ ونسنٹ اور گرینیڈائنزوینزوئیلابر" + "ٹش ورجن آئلینڈزامریکی ورجن آئلینڈزویتناموینوآٹوویلیز اور فیوٹیوناساموآک" + "وسووویمنمایوٹجنوبی افریقہزامبیازمبابوےنامعلوم علاقہدنیاافریقہشمالی امری" + "کہجنوبی امریکہاوشیانیامغربی افریقہوسطی امریکہمشرقی افریقہشمالی افریقہوس" + @@ -49319,52 +52081,52 @@ const urRegionStr string = "" + // Size: 5123 bytes "شیائی علاقہپولینیشیاایشیاوسطی ایشیامغربی ایشیایورپمشرقی یورپشمالی یورپم" + "غربی یورپلاطینی امریکہ" -var urRegionIdx = []uint16{ // 292 elements +var urRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0019, 0x0025, 0x0043, 0x0055, 0x0079, 0x0089, 0x0097, 0x00a5, 0x00b1, 0x00c5, 0x00d5, 0x00ec, 0x00f8, 0x0108, 0x0112, - 0x012b, 0x0140, 0x0168, 0x0178, 0x0189, 0x0195, 0x01aa, 0x01b8, - 0x01c2, 0x01ce, 0x01d6, 0x01ef, 0x01fb, 0x0209, 0x0217, 0x023a, - 0x0246, 0x0252, 0x025e, 0x0275, 0x0285, 0x0293, 0x029f, 0x02ab, - 0x02cd, 0x02e6, 0x0308, 0x0327, 0x033c, 0x0354, 0x0367, 0x036d, - 0x0379, 0x037f, 0x038d, 0x03a6, 0x03b9, 0x03c3, 0x03d2, 0x03e2, - 0x03f7, 0x03ff, 0x0414, 0x041e, 0x0435, 0x043f, 0x044b, 0x0459, + 0x012b, 0x013f, 0x0167, 0x0177, 0x0188, 0x0194, 0x01a9, 0x01b7, + 0x01c1, 0x01cd, 0x01d5, 0x01ee, 0x01fa, 0x0208, 0x0216, 0x0239, + 0x0245, 0x0251, 0x025d, 0x0274, 0x0284, 0x0292, 0x029e, 0x02aa, + 0x02cc, 0x02e5, 0x0307, 0x0326, 0x033b, 0x0353, 0x0366, 0x036c, + 0x0378, 0x037e, 0x038c, 0x03a5, 0x03b8, 0x03c2, 0x03d1, 0x03e1, + 0x03f6, 0x03fe, 0x0408, 0x0412, 0x0429, 0x0433, 0x043f, 0x044d, // Entry 40 - 7F - 0x0476, 0x0484, 0x04a4, 0x04b4, 0x04c2, 0x04c8, 0x04dd, 0x04ed, - 0x04fb, 0x050b, 0x0522, 0x0522, 0x052f, 0x0535, 0x054e, 0x0564, - 0x0577, 0x0581, 0x058b, 0x05a0, 0x05ae, 0x05ba, 0x05cf, 0x05dd, - 0x05e7, 0x05fa, 0x060b, 0x0617, 0x061d, 0x062d, 0x0646, 0x0650, - 0x0691, 0x06a4, 0x06ac, 0x06bb, 0x06c5, 0x06e1, 0x0715, 0x0725, - 0x0731, 0x0739, 0x0743, 0x075c, 0x076e, 0x077c, 0x078a, 0x079c, - 0x07a6, 0x07d2, 0x07da, 0x07e4, 0x07f3, 0x07fb, 0x0803, 0x0811, - 0x0819, 0x0823, 0x082d, 0x083d, 0x084b, 0x0859, 0x0867, 0x0888, + 0x046c, 0x047a, 0x049a, 0x04aa, 0x04b8, 0x04be, 0x04d3, 0x04e3, + 0x04f1, 0x0501, 0x0518, 0x0526, 0x0533, 0x0539, 0x0552, 0x0568, + 0x057b, 0x0585, 0x058f, 0x05a4, 0x05b2, 0x05be, 0x05d3, 0x05e1, + 0x05eb, 0x05fe, 0x060f, 0x061b, 0x0621, 0x0631, 0x064a, 0x0654, + 0x0695, 0x06a8, 0x06b0, 0x06bf, 0x06c9, 0x06e5, 0x0719, 0x0729, + 0x0735, 0x073d, 0x0747, 0x0760, 0x0772, 0x0780, 0x078e, 0x07a0, + 0x07aa, 0x07d6, 0x07de, 0x07e8, 0x07f7, 0x07ff, 0x0807, 0x0815, + 0x081d, 0x0827, 0x0831, 0x0841, 0x084f, 0x085d, 0x086b, 0x088c, // Entry 80 - BF - 0x089d, 0x08b2, 0x08ba, 0x08d3, 0x08e3, 0x08eb, 0x08f5, 0x0908, - 0x091c, 0x092b, 0x093b, 0x0949, 0x0959, 0x0967, 0x0971, 0x097b, - 0x0985, 0x0991, 0x099f, 0x09b4, 0x09c7, 0x09d5, 0x09ee, 0x09fc, - 0x0a04, 0x0a1d, 0x0a2b, 0x0a3e, 0x0a66, 0x0a74, 0x0a86, 0x0a98, - 0x0aa2, 0x0aae, 0x0aba, 0x0ac4, 0x0ad2, 0x0ae0, 0x0aee, 0x0afc, - 0x0b13, 0x0b1d, 0x0b36, 0x0b46, 0x0b58, 0x0b6b, 0x0b75, 0x0b7f, - 0x0b87, 0x0b8f, 0x0ba2, 0x0baa, 0x0bb6, 0x0bbe, 0x0be1, 0x0bf9, - 0x0c05, 0x0c13, 0x0c1f, 0x0c48, 0x0c61, 0x0c76, 0x0c8b, 0x0c97, + 0x08a1, 0x08b6, 0x08be, 0x08d7, 0x08e7, 0x08ef, 0x08f9, 0x090c, + 0x0920, 0x092f, 0x093f, 0x094d, 0x095d, 0x096b, 0x0975, 0x097f, + 0x0989, 0x0995, 0x09a3, 0x09b8, 0x09cb, 0x09d9, 0x09f2, 0x0a00, + 0x0a08, 0x0a21, 0x0a2f, 0x0a42, 0x0a6a, 0x0a78, 0x0a8a, 0x0a9c, + 0x0aa6, 0x0ab2, 0x0abe, 0x0ac8, 0x0ad6, 0x0ae4, 0x0af2, 0x0b00, + 0x0b17, 0x0b21, 0x0b3a, 0x0b4a, 0x0b5c, 0x0b6f, 0x0b79, 0x0b83, + 0x0b8b, 0x0b93, 0x0ba6, 0x0bae, 0x0bba, 0x0bc2, 0x0be5, 0x0bfd, + 0x0c09, 0x0c17, 0x0c23, 0x0c4c, 0x0c65, 0x0c7a, 0x0c8f, 0x0c9b, // Entry C0 - FF - 0x0c9f, 0x0caf, 0x0cb5, 0x0cd2, 0x0ce1, 0x0cef, 0x0cf9, 0x0cff, - 0x0d0b, 0x0d1c, 0x0d37, 0x0d41, 0x0d4b, 0x0d55, 0x0d63, 0x0d78, - 0x0d88, 0x0dad, 0x0dbd, 0x0dce, 0x0de1, 0x0ded, 0x0dfb, 0x0e09, - 0x0e1e, 0x0e3f, 0x0e52, 0x0e63, 0x0e69, 0x0e7c, 0x0e98, 0x0ebf, - 0x0ec5, 0x0ee7, 0x0eef, 0x0f02, 0x0f12, 0x0f20, 0x0f33, 0x0f47, - 0x0f4f, 0x0f59, 0x0f61, 0x0f85, 0x0f91, 0x0f9f, 0x0fad, 0x0fb9, - 0x0fc5, 0x0ffa, 0x100f, 0x102c, 0x103c, 0x104c, 0x105f, 0x108e, - 0x10a0, 0x10c0, 0x10e4, 0x10f0, 0x10fe, 0x1120, 0x112a, 0x1136, + 0x0ca3, 0x0cb3, 0x0cb9, 0x0cd6, 0x0ce5, 0x0cf3, 0x0cfd, 0x0d03, + 0x0d0f, 0x0d20, 0x0d3b, 0x0d45, 0x0d4f, 0x0d59, 0x0d67, 0x0d7c, + 0x0d8c, 0x0db1, 0x0dc1, 0x0dd1, 0x0de4, 0x0df0, 0x0dfe, 0x0e0c, + 0x0e21, 0x0e42, 0x0e55, 0x0e66, 0x0e6c, 0x0e7f, 0x0e9b, 0x0ec2, + 0x0ec8, 0x0eea, 0x0ef2, 0x0f05, 0x0f15, 0x0f23, 0x0f36, 0x0f4a, + 0x0f52, 0x0f5c, 0x0f64, 0x0f88, 0x0f94, 0x0fa2, 0x0fb0, 0x0fbc, + 0x0fc8, 0x0ffd, 0x1012, 0x102f, 0x103f, 0x104f, 0x1062, 0x1091, + 0x10a3, 0x10c3, 0x10e7, 0x10f3, 0x1101, 0x1123, 0x112d, 0x1139, // Entry 100 - 13F - 0x113c, 0x1146, 0x115d, 0x1169, 0x1177, 0x1190, 0x1198, 0x11a4, - 0x11bb, 0x11d2, 0x11e2, 0x11f9, 0x120e, 0x1225, 0x123c, 0x1251, - 0x1278, 0x1288, 0x12af, 0x12bf, 0x12d4, 0x12e9, 0x1307, 0x131a, - 0x132e, 0x1340, 0x1365, 0x1377, 0x1381, 0x1394, 0x13a9, 0x13b1, - 0x13c4, 0x13d7, 0x13ea, 0x1403, -} // Size: 608 bytes - -const uzRegionStr string = "" + // Size: 3234 bytes + 0x113f, 0x1149, 0x1160, 0x116c, 0x117a, 0x1193, 0x119b, 0x11a7, + 0x11be, 0x11d5, 0x11e5, 0x11fc, 0x1211, 0x1228, 0x123f, 0x1254, + 0x127b, 0x128b, 0x12b2, 0x12c2, 0x12d7, 0x12ec, 0x130a, 0x131d, + 0x1331, 0x1343, 0x1368, 0x137a, 0x1384, 0x1397, 0x13ac, 0x13b4, + 0x13c7, 0x13da, 0x13ed, 0x13ed, 0x1406, +} // Size: 610 bytes + +const uzRegionStr string = "" + // Size: 3237 bytes "Me’roj oroliAndorraBirlashgan Arab AmirliklariAfgʻonistonAntigua va Barb" + "udaAngilyaAlbaniyaArmanistonAngolaAntarktidaArgentinaAmerika SamoasiAvst" + "riyaAvstraliyaArubaAland orollariOzarbayjonBosniya va GertsegovinaBarbad" + @@ -49373,45 +52135,45 @@ const uzRegionStr string = "" + // Size: 3234 bytes "ma orollariButanBuve oroliBotsvanaBelarusBelizKanadaKokos (Kiling) oroll" + "ariKongo – KinshasaMarkaziy Afrika RespublikasiKongo – BrazzavilShveytsa" + "riyaKot-d’IvuarKuk orollariChiliKamerunXitoyKolumbiyaKlipperton oroliKos" + - "ta-RikaKubaKabo-VerdeKyurasaoRojdestvo oroliKiprChexiya RespublikasiGerm" + - "aniyaDiyego-GarsiyaJibutiDaniyaDominikaDominikan RespublikasiJazoirSeuta" + - " va MelilyaEkvadorEstoniyaMisrG‘arbiy Sahroi KabirEritreyaIspaniyaEfiopi" + - "yaYevropa IttifoqiFinlandiyaFijiFolklend orollariMikroneziyaFarer orolla" + - "riFransiyaGabonBuyuk BritaniyaGrenadaGruziyaFransuz GvianasiGernsiGanaGi" + - "braltarGrenlandiyaGambiyaGvineyaGvadelupeEkvatorial GvineyaGretsiyaJanub" + - "iy Georgiya va Janubiy Sendvich orollariGvatemalaGuamGvineya-BisauGayana" + - "Gonkong (Xitoy MMH)Xerd va Makdonald orollariGondurasXorvatiyaGaitiVengr" + - "iyaKanar orollariIndoneziyaIrlandiyaIsroilMen oroliHindistonBritaniyanin" + - "g Hind okeanidagi hududiIroqEronIslandiyaItaliyaJersiYamaykaIordaniyaYap" + - "oniyaKeniyaQirgʻizistonKambodjaKiribatiKomor orollariSent-Kits va NevisS" + - "himoliy KoreyaJanubiy KoreyaQuvaytKayman orollariQozogʻistonLaosLivanSen" + - "t-LyusiyaLixtenshteynShri-LankaLiberiyaLesotoLitvaLyuksemburgLatviyaLivi" + - "yaMarokashMonakoMoldovaChernogoriyaSent-MartinMadagaskarMarshall orollar" + - "iMakedoniyaMaliMyanma (Birma)MongoliyaMakao (Xitoy MMH)Shimoliy Mariana " + - "orollariMartinikaMavritaniyaMontserratMaltaMavrikiyMaldiv orollariMalavi" + - "MeksikaMalayziyaMozambikNamibiyaYangi KaledoniyaNigerNorfolk oroliNigeri" + - "yaNikaraguaNiderlandiyaNorvegiyaNepalNauruNiueYangi ZelandiyaUmmonPanama" + - "PeruFransuz PolineziyasiPapua – Yangi GvineyaFilippinPokistonPolshaSen-P" + - "yer va MikelonPitkern orollariPuerto-RikoFalastin hududiPortugaliyaPalau" + - "ParagvayQatarTashqi OkeaniyaReyunionRuminiyaSerbiyaRossiyaRuandaSaudiya " + - "ArabistoniSolomon orollariSeyshel orollariSudanShvetsiyaSingapurMuqaddas" + - " Yelena oroliSloveniyaSvalbard va Yan-MayenSlovakiyaSyerra-LeoneSan-Mari" + - "noSenegalSomaliSurinamJanubiy SudanSan-Tome va PrinsipiSalvadorSint-Mart" + - "enSuriyaSvazilendTristan-da-KunyaTurks va Kaykos orollariChadFransuz Jan" + - "ubiy hududlariTogoTailandTojikistonTokelauTimor-LesteTurkmanistonTunisTo" + - "ngaTurkiyaTrinidad va TobagoTuvaluTayvanTanzaniyaUkrainaUgandaAQSH yondo" + - "sh orollariBirlashgan Millatlar TashkilotiAmerika Qo‘shma ShtatlariUrugv" + - "ayOʻzbekistonVatikanSent-Vinsent va GrenadinVenesuelaBritaniya Virgin or" + - "ollariAQSH Virgin orollariVyetnamVanuatuUollis va FutunaSamoaKosovoYaman" + - "MayottaJanubiy Afrika RespublikasiZambiyaZimbabveNoma’lum mintaqaDunyoAf" + - "rikaShimoliy AmerikaJanubiy AmerikaOkeaniyaG‘arbiy AfrikaMarkaziy Amerik" + - "aSharqiy AfrikaShimoliy AfrikaMarkaziy AfrikaJanubiy AfrikaAmerikaShimol" + - "iy Amerika – AQSH va KanadaKarib havzasiSharqiy OsiyoJanubiy OsiyoJanubi" + - "-sharqiy OsiyoJanubiy YevropaAvstralaziyaMelaneziyaMikroneziya mintaqasi" + - "PolineziyaOsiyoMarkaziy OsiyoG‘arbiy OsiyoYevropaSharqiy YevropaShimoliy" + - " YevropaG‘arbiy YevropaLotin Amerikasi" - -var uzRegionIdx = []uint16{ // 292 elements + "ta-RikaKubaKabo-VerdeKyurasaoRojdestvo oroliKiprChexiyaGermaniyaDiyego-G" + + "arsiyaJibutiDaniyaDominikaDominikan RespublikasiJazoirSeuta va MelilyaEk" + + "vadorEstoniyaMisrG‘arbiy Sahroi KabirEritreyaIspaniyaEfiopiyaYevropa Itt" + + "ifoqiyevrozonaFinlandiyaFijiFolklend orollariMikroneziyaFarer orollariFr" + + "ansiyaGabonBuyuk BritaniyaGrenadaGruziyaFransuz GvianasiGernsiGanaGibral" + + "tarGrenlandiyaGambiyaGvineyaGvadelupeEkvatorial GvineyaGretsiyaJanubiy G" + + "eorgiya va Janubiy Sendvich orollariGvatemalaGuamGvineya-BisauGayanaGonk" + + "ong (Xitoy MMH)Xerd va Makdonald orollariGondurasXorvatiyaGaitiVengriyaK" + + "anar orollariIndoneziyaIrlandiyaIsroilMen oroliHindistonBritaniyaning Hi" + + "nd okeanidagi hududiIroqEronIslandiyaItaliyaJersiYamaykaIordaniyaYaponiy" + + "aKeniyaQirgʻizistonKambodjaKiribatiKomor orollariSent-Kits va NevisShimo" + + "liy KoreyaJanubiy KoreyaQuvaytKayman orollariQozogʻistonLaosLivanSent-Ly" + + "usiyaLixtenshteynShri-LankaLiberiyaLesotoLitvaLyuksemburgLatviyaLiviyaMa" + + "rokashMonakoMoldovaChernogoriyaSent-MartinMadagaskarMarshall orollariMak" + + "edoniyaMaliMyanma (Birma)MongoliyaMakao (Xitoy MMH)Shimoliy Mariana orol" + + "lariMartinikaMavritaniyaMontserratMaltaMavrikiyMaldiv orollariMalaviMeks" + + "ikaMalayziyaMozambikNamibiyaYangi KaledoniyaNigerNorfolk oroliNigeriyaNi" + + "karaguaNiderlandiyaNorvegiyaNepalNauruNiueYangi ZelandiyaUmmonPanamaPeru" + + "Fransuz PolineziyasiPapua – Yangi GvineyaFilippinPokistonPolshaSen-Pyer " + + "va MikelonPitkern orollariPuerto-RikoFalastin hududlariPortugaliyaPalauP" + + "aragvayQatarTashqi OkeaniyaReyunionRuminiyaSerbiyaRossiyaRuandaSaudiya A" + + "rabistoniSolomon orollariSeyshel orollariSudanShvetsiyaSingapurMuqaddas " + + "Yelena oroliSloveniyaShpitsbergen va Yan-MayenSlovakiyaSyerra-LeoneSan-M" + + "arinoSenegalSomaliSurinamJanubiy SudanSan-Tome va PrinsipiSalvadorSint-M" + + "artenSuriyaSvazilendTristan-da-KunyaTurks va Kaykos orollariChadFransuz " + + "Janubiy hududlariTogoTailandTojikistonTokelauTimor-LesteTurkmanistonTuni" + + "sTongaTurkiyaTrinidad va TobagoTuvaluTayvanTanzaniyaUkrainaUgandaAQSH yo" + + "ndosh orollariBirlashgan Millatlar TashkilotiAmerika Qo‘shma ShtatlariUr" + + "ugvayOʻzbekistonVatikanSent-Vinsent va GrenadinVenesuelaBritaniya Virgin" + + " orollariAQSH Virgin orollariVyetnamVanuatuUollis va FutunaSamoaKosovoYa" + + "manMayottaJanubiy Afrika RespublikasiZambiyaZimbabveNoma’lum mintaqaDuny" + + "oAfrikaShimoliy AmerikaJanubiy AmerikaOkeaniyaG‘arbiy AfrikaMarkaziy Ame" + + "rikaSharqiy AfrikaShimoliy AfrikaMarkaziy AfrikaJanubiy AfrikaAmerikaShi" + + "moliy Amerika – AQSH va KanadaKarib havzasiSharqiy OsiyoJanubiy OsiyoJan" + + "ubi-sharqiy OsiyoJanubiy YevropaAvstralaziyaMelaneziyaMikroneziya mintaq" + + "asiPolineziyaOsiyoMarkaziy OsiyoG‘arbiy OsiyoYevropaSharqiy YevropaShimo" + + "liy YevropaG‘arbiy YevropaLotin Amerikasi" + +var uzRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x000e, 0x0015, 0x0030, 0x003c, 0x004e, 0x0055, 0x005d, 0x0067, 0x006d, 0x0077, 0x0080, 0x008f, 0x0097, 0x00a1, 0x00a6, @@ -49420,43 +52182,43 @@ var uzRegionIdx = []uint16{ // 292 elements 0x0167, 0x0176, 0x017b, 0x0185, 0x018d, 0x0194, 0x0199, 0x019f, 0x01b6, 0x01c8, 0x01e4, 0x01f7, 0x0203, 0x0210, 0x021c, 0x0221, 0x0228, 0x022d, 0x0236, 0x0246, 0x0250, 0x0254, 0x025e, 0x0266, - 0x0275, 0x0279, 0x028d, 0x0296, 0x02a4, 0x02aa, 0x02b0, 0x02b8, + 0x0275, 0x0279, 0x0280, 0x0289, 0x0297, 0x029d, 0x02a3, 0x02ab, // Entry 40 - 7F - 0x02ce, 0x02d4, 0x02e4, 0x02eb, 0x02f3, 0x02f7, 0x030d, 0x0315, - 0x031d, 0x0325, 0x0335, 0x0335, 0x033f, 0x0343, 0x0354, 0x035f, - 0x036d, 0x0375, 0x037a, 0x0389, 0x0390, 0x0397, 0x03a7, 0x03ad, - 0x03b1, 0x03ba, 0x03c5, 0x03cc, 0x03d3, 0x03dc, 0x03ee, 0x03f6, - 0x0423, 0x042c, 0x0430, 0x043d, 0x0443, 0x0456, 0x0470, 0x0478, - 0x0481, 0x0486, 0x048e, 0x049c, 0x04a6, 0x04af, 0x04b5, 0x04be, - 0x04c7, 0x04eb, 0x04ef, 0x04f3, 0x04fc, 0x0503, 0x0508, 0x050f, - 0x0518, 0x0520, 0x0526, 0x0533, 0x053b, 0x0543, 0x0551, 0x0563, + 0x02c1, 0x02c7, 0x02d7, 0x02de, 0x02e6, 0x02ea, 0x0300, 0x0308, + 0x0310, 0x0318, 0x0328, 0x0331, 0x033b, 0x033f, 0x0350, 0x035b, + 0x0369, 0x0371, 0x0376, 0x0385, 0x038c, 0x0393, 0x03a3, 0x03a9, + 0x03ad, 0x03b6, 0x03c1, 0x03c8, 0x03cf, 0x03d8, 0x03ea, 0x03f2, + 0x041f, 0x0428, 0x042c, 0x0439, 0x043f, 0x0452, 0x046c, 0x0474, + 0x047d, 0x0482, 0x048a, 0x0498, 0x04a2, 0x04ab, 0x04b1, 0x04ba, + 0x04c3, 0x04e7, 0x04eb, 0x04ef, 0x04f8, 0x04ff, 0x0504, 0x050b, + 0x0514, 0x051c, 0x0522, 0x052f, 0x0537, 0x053f, 0x054d, 0x055f, // Entry 80 - BF - 0x0572, 0x0580, 0x0586, 0x0595, 0x05a1, 0x05a5, 0x05aa, 0x05b6, - 0x05c2, 0x05cc, 0x05d4, 0x05da, 0x05df, 0x05ea, 0x05f1, 0x05f7, - 0x05ff, 0x0605, 0x060c, 0x0618, 0x0623, 0x062d, 0x063e, 0x0648, - 0x064c, 0x065a, 0x0663, 0x0674, 0x068d, 0x0696, 0x06a1, 0x06ab, - 0x06b0, 0x06b8, 0x06c7, 0x06cd, 0x06d4, 0x06dd, 0x06e5, 0x06ed, - 0x06fd, 0x0702, 0x070f, 0x0717, 0x0720, 0x072c, 0x0735, 0x073a, - 0x073f, 0x0743, 0x0752, 0x0757, 0x075d, 0x0761, 0x0775, 0x078c, - 0x0794, 0x079c, 0x07a2, 0x07b5, 0x07c5, 0x07d0, 0x07df, 0x07ea, + 0x056e, 0x057c, 0x0582, 0x0591, 0x059d, 0x05a1, 0x05a6, 0x05b2, + 0x05be, 0x05c8, 0x05d0, 0x05d6, 0x05db, 0x05e6, 0x05ed, 0x05f3, + 0x05fb, 0x0601, 0x0608, 0x0614, 0x061f, 0x0629, 0x063a, 0x0644, + 0x0648, 0x0656, 0x065f, 0x0670, 0x0689, 0x0692, 0x069d, 0x06a7, + 0x06ac, 0x06b4, 0x06c3, 0x06c9, 0x06d0, 0x06d9, 0x06e1, 0x06e9, + 0x06f9, 0x06fe, 0x070b, 0x0713, 0x071c, 0x0728, 0x0731, 0x0736, + 0x073b, 0x073f, 0x074e, 0x0753, 0x0759, 0x075d, 0x0771, 0x0788, + 0x0790, 0x0798, 0x079e, 0x07b1, 0x07c1, 0x07cc, 0x07de, 0x07e9, // Entry C0 - FF - 0x07ef, 0x07f7, 0x07fc, 0x080b, 0x0813, 0x081b, 0x0822, 0x0829, - 0x082f, 0x0841, 0x0851, 0x0861, 0x0866, 0x086f, 0x0877, 0x088c, - 0x0895, 0x08aa, 0x08b3, 0x08bf, 0x08c9, 0x08d0, 0x08d6, 0x08dd, - 0x08ea, 0x08fe, 0x0906, 0x0911, 0x0917, 0x0920, 0x0930, 0x0948, - 0x094c, 0x0965, 0x0969, 0x0970, 0x097a, 0x0981, 0x098c, 0x0998, - 0x099d, 0x09a2, 0x09a9, 0x09bb, 0x09c1, 0x09c7, 0x09d0, 0x09d7, - 0x09dd, 0x09f2, 0x0a11, 0x0a2c, 0x0a33, 0x0a3f, 0x0a46, 0x0a5e, - 0x0a67, 0x0a80, 0x0a94, 0x0a9b, 0x0aa2, 0x0ab2, 0x0ab7, 0x0abd, + 0x07ee, 0x07f6, 0x07fb, 0x080a, 0x0812, 0x081a, 0x0821, 0x0828, + 0x082e, 0x0840, 0x0850, 0x0860, 0x0865, 0x086e, 0x0876, 0x088b, + 0x0894, 0x08ad, 0x08b6, 0x08c2, 0x08cc, 0x08d3, 0x08d9, 0x08e0, + 0x08ed, 0x0901, 0x0909, 0x0914, 0x091a, 0x0923, 0x0933, 0x094b, + 0x094f, 0x0968, 0x096c, 0x0973, 0x097d, 0x0984, 0x098f, 0x099b, + 0x09a0, 0x09a5, 0x09ac, 0x09be, 0x09c4, 0x09ca, 0x09d3, 0x09da, + 0x09e0, 0x09f5, 0x0a14, 0x0a2f, 0x0a36, 0x0a42, 0x0a49, 0x0a61, + 0x0a6a, 0x0a83, 0x0a97, 0x0a9e, 0x0aa5, 0x0ab5, 0x0aba, 0x0ac0, // Entry 100 - 13F - 0x0ac2, 0x0ac9, 0x0ae4, 0x0aeb, 0x0af3, 0x0b05, 0x0b0a, 0x0b10, - 0x0b20, 0x0b2f, 0x0b37, 0x0b47, 0x0b57, 0x0b65, 0x0b74, 0x0b83, - 0x0b91, 0x0b98, 0x0bbb, 0x0bc8, 0x0bd5, 0x0be2, 0x0bf6, 0x0c05, - 0x0c11, 0x0c1b, 0x0c30, 0x0c3a, 0x0c3f, 0x0c4d, 0x0c5c, 0x0c63, - 0x0c72, 0x0c82, 0x0c93, 0x0ca2, -} // Size: 608 bytes - -const viRegionStr string = "" + // Size: 3234 bytes + 0x0ac5, 0x0acc, 0x0ae7, 0x0aee, 0x0af6, 0x0b08, 0x0b0d, 0x0b13, + 0x0b23, 0x0b32, 0x0b3a, 0x0b4a, 0x0b5a, 0x0b68, 0x0b77, 0x0b86, + 0x0b94, 0x0b9b, 0x0bbe, 0x0bcb, 0x0bd8, 0x0be5, 0x0bf9, 0x0c08, + 0x0c14, 0x0c1e, 0x0c33, 0x0c3d, 0x0c42, 0x0c50, 0x0c5f, 0x0c66, + 0x0c75, 0x0c85, 0x0c96, 0x0c96, 0x0ca5, +} // Size: 610 bytes + +const viRegionStr string = "" + // Size: 3253 bytes "Đảo AscensionAndorraCác Tiểu Vương quốc Ả Rập Thống nhấtAfghanistanAntig" + "ua và BarbudaAnguillaAlbaniaArmeniaAngolaNam CựcArgentinaĐảo Somoa thuộc" + " MỹÁoAustraliaArubaQuần đảo ÅlandAzerbaijanBosnia và HerzegovinaBarbados" + @@ -49464,41 +52226,41 @@ const viRegionStr string = "" + // Size: 3234 bytes "BruneiBoliviaCa-ri-bê Hà LanBrazilBahamasBhutanĐảo BouvetBotswanaBelarus" + "BelizeCanadaQuần đảo Cocos (Keeling)Congo - KinshasaCộng hòa Trung PhiCo" + "ngo - BrazzavilleThụy SĩCôte d’IvoireQuần đảo CookChileCameroonTrung Quố" + - "cColombiaĐảo ClippertonCosta RicaCubaCape VerdeCuraçaoĐảo Giáng SinhSípC" + - "ộng hòa SécĐứcDiego GarciaDjiboutiĐan MạchDominicaCộng hòa DominicaAlg" + - "eriaCeuta và MelillaEcuadorEstoniaAi CậpTây SaharaEritreaTây Ban NhaEthi" + - "opiaLiên Minh Châu ÂuPhần LanFijiQuần đảo FalklandMicronesiaQuần đảo Far" + - "oePhápGabonVương quốc AnhGrenadaGruziaGuiana thuộc PhápGuernseyGhanaGibr" + - "altarGreenlandGambiaGuineaGuadeloupeGuinea Xích ĐạoHy LạpQuần đảo Nam Ge" + - "orgia và Nam SandwichGuatemalaGuamGuinea-BissauGuyanaHồng Kông, Trung Qu" + - "ốcQuần đảo Heard và McDonaldHondurasCroatiaHaitiHungaryQuần đảo Canary" + - "IndonesiaIrelandIsraelĐảo ManẤn ĐộLãnh thổ Anh tại Ấn Độ DươngIraqIranIc" + - "elandÝJerseyJamaicaJordanNhật BảnKenyaKyrgyzstanCampuchiaKiribatiComoros" + - "St. Kitts và NevisTriều TiênHàn QuốcKuwaitQuần đảo CaymanKazakhstanLàoLi" + - "-băngSt. LuciaLiechtensteinSri LankaLiberiaLesothoLitvaLuxembourgLatviaL" + - "ibyaMa-rốcMonacoMoldovaMontenegroSt. MartinMadagascarQuần đảo MarshallMa" + - "cedoniaMaliMyanmar (Miến Điện)Mông CổMacao, Trung QuốcQuần đảo Bắc Maria" + - "naMartiniqueMauritaniaMontserratMaltaMauritiusMaldivesMalawiMexicoMalays" + - "iaMozambiqueNamibiaNew CaledoniaNigerĐảo NorfolkNigeriaNicaraguaHà LanNa" + - " UyNepalNauruNiueNew ZealandOmanPanamaPeruPolynesia thuộc PhápPapua New " + - "GuineaPhilippinesPakistanBa LanSaint Pierre và MiquelonQuần đảo Pitcairn" + - "Puerto RicoLãnh thổ PalestineBồ Đào NhaPalauParaguayQatarVùng xa xôi thu" + - "ộc Châu Đại DươngRéunionRomaniaSerbiaNgaRwandaẢ Rập Xê-útQuần đảo Solo" + - "monSeychellesSudanThụy ĐiểnSingaporeSt. HelenaSloveniaSvalbard và Jan Ma" + - "yenSlovakiaSierra LeoneSan MarinoSenegalSomaliaSurinameNam SudanSão Tomé" + - " và PríncipeEl SalvadorSint MaartenSyriaSwazilandTristan da CunhaQuần đả" + - "o Turk và CaicosChadLãnh thổ phía Nam Thuộc PhápTogoThái LanTajikistanTo" + - "kelauTimor-LesteTurkmenistanTunisiaTongaThổ Nhĩ KỳTrinidad và TobagoTuva" + - "luĐài LoanTanzaniaUkrainaUgandaCác đảo xa thuộc Hoa KỳLiên hiệp quốcHoa " + - "KỳUruguayUzbekistanThành VaticanSt. Vincent và GrenadinesVenezuelaQuần đ" + - "ảo Virgin thuộc AnhQuần đảo Virgin thuộc MỹViệt NamVanuatuWallis và Fu" + - "tunaSamoaKosovoYemenMayotteNam PhiZambiaZimbabweVùng không xác địnhThế g" + - "iớiChâu PhiBắc MỹNam MỹChâu Đại DươngTây PhiTrung MỹĐông PhiBắc PhiTrung" + - " PhiMiền Nam Châu PhiChâu MỹMiền Bắc Châu MỹCa-ri-bêĐông ÁNam ÁĐông Nam " + - "ÁNam ÂuÚc và New ZealandMelanesiaVùng MicronesianPolynesiaChâu ÁTrung Á" + - "Tây ÁChâu ÂuĐông ÂuBắc ÂuTây ÂuChâu Mỹ La-tinh" - -var viRegionIdx = []uint16{ // 292 elements + "cColombiaĐảo ClippertonCosta RicaCubaCape VerdeCuraçaoĐảo Giáng SinhSípS" + + "écĐứcDiego GarciaDjiboutiĐan MạchDominicaCộng hòa DominicaAlgeriaCeuta " + + "và MelillaEcuadorEstoniaAi CậpTây SaharaEritreaTây Ban NhaEthiopiaLiên M" + + "inh Châu ÂuKhu vực đồng EuroPhần LanFijiQuần đảo FalklandMicronesiaQuần " + + "đảo FaroePhápGabonVương quốc AnhGrenadaGruziaGuiana thuộc PhápGuernseyG" + + "hanaGibraltarGreenlandGambiaGuineaGuadeloupeGuinea Xích ĐạoHy LạpNam Geo" + + "rgia & Quần đảo Nam SandwichGuatemalaGuamGuinea-BissauGuyanaHồng Kông, T" + + "rung QuốcQuần đảo Heard và McDonaldHondurasCroatiaHaitiHungaryQuần đảo C" + + "anaryIndonesiaIrelandIsraelĐảo ManẤn ĐộLãnh thổ Ấn độ dương thuộc AnhIra" + + "qIranIcelandItalyJerseyJamaicaJordanNhật BảnKenyaKyrgyzstanCampuchiaKiri" + + "batiComorosSt. Kitts và NevisTriều TiênHàn QuốcKuwaitQuần đảo CaymanKaza" + + "khstanLàoLi-băngSt. LuciaLiechtensteinSri LankaLiberiaLesothoLitvaLuxemb" + + "ourgLatviaLibyaMa-rốcMonacoMoldovaMontenegroSt. MartinMadagascarQuần đảo" + + " MarshallMacedoniaMaliMyanmar (Miến Điện)Mông CổMacao, Trung QuốcQuần đả" + + "o Bắc MarianaMartiniqueMauritaniaMontserratMaltaMauritiusMaldivesMalawiM" + + "exicoMalaysiaMozambiqueNamibiaNew CaledoniaNigerĐảo NorfolkNigeriaNicara" + + "guaHà LanNa UyNepalNauruNiueNew ZealandOmanPanamaPeruPolynesia thuộc Phá" + + "pPapua New GuineaPhilippinesPakistanBa LanSaint Pierre và MiquelonQuần đ" + + "ảo PitcairnPuerto RicoLãnh thổ PalestineBồ Đào NhaPalauParaguayQatarVù" + + "ng xa xôi thuộc Châu Đại DươngRéunionRomaniaSerbiaNgaRwandaẢ Rập Xê-útQu" + + "ần đảo SolomonSeychellesSudanThụy ĐiểnSingaporeSt. HelenaSloveniaSvalb" + + "ard và Jan MayenSlovakiaSierra LeoneSan MarinoSenegalSomaliaSurinameNam " + + "SudanSão Tomé và PríncipeEl SalvadorSint MaartenSyriaSwazilandTristan da" + + " CunhaQuần đảo Turks và CaicosChadLãnh thổ phía Nam Thuộc PhápTogoThái L" + + "anTajikistanTokelauTimor-LesteTurkmenistanTunisiaTongaThổ Nhĩ KỳTrinidad" + + " và TobagoTuvaluĐài LoanTanzaniaUkrainaUgandaCác tiểu đảo xa của Hoa KỳL" + + "iên hiệp quốcHoa KỳUruguayUzbekistanThành VaticanSt. Vincent và Grenadin" + + "esVenezuelaQuần đảo Virgin thuộc AnhQuần đảo Virgin thuộc MỹViệt NamVanu" + + "atuWallis và FutunaSamoaKosovoYemenMayotteNam PhiZambiaZimbabweVùng khôn" + + "g xác địnhThế giớiChâu PhiBắc MỹNam MỹChâu Đại DươngTây PhiTrung MỹĐông " + + "PhiBắc PhiTrung PhiMiền Nam Châu PhiChâu MỹMiền Bắc Châu MỹCa-ri-bêĐông " + + "ÁNam ÁĐông Nam ÁNam ÂuÚc và New ZealandMelanesiaVùng MicronesianPolynes" + + "iaChâu ÁTrung ÁTây ÁChâu ÂuĐông ÂuBắc ÂuTây ÂuChâu Mỹ La-tinh" + +var viRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0010, 0x0017, 0x004a, 0x0055, 0x0068, 0x0070, 0x0077, 0x007e, 0x0084, 0x008d, 0x0096, 0x00af, 0x00b2, 0x00bb, 0x00c0, @@ -49507,51 +52269,51 @@ var viRegionIdx = []uint16{ // 292 elements 0x016b, 0x0172, 0x0178, 0x0185, 0x018d, 0x0194, 0x019a, 0x01a0, 0x01bd, 0x01cd, 0x01e2, 0x01f5, 0x01ff, 0x020f, 0x0221, 0x0226, 0x022e, 0x023a, 0x0242, 0x0253, 0x025d, 0x0261, 0x026b, 0x0273, - 0x0285, 0x0289, 0x0299, 0x029f, 0x02ab, 0x02b3, 0x02be, 0x02c6, + 0x0285, 0x0289, 0x028d, 0x0293, 0x029f, 0x02a7, 0x02b2, 0x02ba, // Entry 40 - 7F - 0x02da, 0x02e1, 0x02f2, 0x02f9, 0x0300, 0x0308, 0x0313, 0x031a, - 0x0326, 0x032e, 0x0342, 0x0342, 0x034c, 0x0350, 0x0366, 0x0370, - 0x0383, 0x0388, 0x038d, 0x039f, 0x03a6, 0x03ac, 0x03c0, 0x03c8, - 0x03cd, 0x03d6, 0x03df, 0x03e5, 0x03eb, 0x03f5, 0x0408, 0x0410, - 0x043a, 0x0443, 0x0447, 0x0454, 0x045a, 0x0474, 0x0494, 0x049c, - 0x04a3, 0x04a8, 0x04af, 0x04c3, 0x04cc, 0x04d3, 0x04d9, 0x04e3, - 0x04ed, 0x0515, 0x0519, 0x051d, 0x0524, 0x0526, 0x052c, 0x0533, - 0x0539, 0x0545, 0x054a, 0x0554, 0x055d, 0x0565, 0x056c, 0x057f, + 0x02ce, 0x02d5, 0x02e6, 0x02ed, 0x02f4, 0x02fc, 0x0307, 0x030e, + 0x031a, 0x0322, 0x0336, 0x034c, 0x0356, 0x035a, 0x0370, 0x037a, + 0x038d, 0x0392, 0x0397, 0x03a9, 0x03b0, 0x03b6, 0x03ca, 0x03d2, + 0x03d7, 0x03e0, 0x03e9, 0x03ef, 0x03f5, 0x03ff, 0x0412, 0x041a, + 0x0442, 0x044b, 0x044f, 0x045c, 0x0462, 0x047c, 0x049c, 0x04a4, + 0x04ab, 0x04b0, 0x04b7, 0x04cb, 0x04d4, 0x04db, 0x04e1, 0x04eb, + 0x04f5, 0x051f, 0x0523, 0x0527, 0x052e, 0x0533, 0x0539, 0x0540, + 0x0546, 0x0552, 0x0557, 0x0561, 0x056a, 0x0572, 0x0579, 0x058c, // Entry 80 - BF - 0x058c, 0x0597, 0x059d, 0x05b1, 0x05bb, 0x05bf, 0x05c7, 0x05d0, - 0x05dd, 0x05e6, 0x05ed, 0x05f4, 0x05f9, 0x0603, 0x0609, 0x060e, - 0x0616, 0x061c, 0x0623, 0x062d, 0x0637, 0x0641, 0x0657, 0x0660, - 0x0664, 0x067c, 0x0686, 0x0699, 0x06b4, 0x06be, 0x06c8, 0x06d2, - 0x06d7, 0x06e0, 0x06e8, 0x06ee, 0x06f4, 0x06fc, 0x0706, 0x070d, - 0x071a, 0x071f, 0x072d, 0x0734, 0x073d, 0x0744, 0x0749, 0x074e, - 0x0753, 0x0757, 0x0762, 0x0766, 0x076c, 0x0770, 0x0787, 0x0797, - 0x07a2, 0x07aa, 0x07b0, 0x07c9, 0x07df, 0x07ea, 0x07ff, 0x080d, + 0x0599, 0x05a4, 0x05aa, 0x05be, 0x05c8, 0x05cc, 0x05d4, 0x05dd, + 0x05ea, 0x05f3, 0x05fa, 0x0601, 0x0606, 0x0610, 0x0616, 0x061b, + 0x0623, 0x0629, 0x0630, 0x063a, 0x0644, 0x064e, 0x0664, 0x066d, + 0x0671, 0x0689, 0x0693, 0x06a6, 0x06c1, 0x06cb, 0x06d5, 0x06df, + 0x06e4, 0x06ed, 0x06f5, 0x06fb, 0x0701, 0x0709, 0x0713, 0x071a, + 0x0727, 0x072c, 0x073a, 0x0741, 0x074a, 0x0751, 0x0756, 0x075b, + 0x0760, 0x0764, 0x076f, 0x0773, 0x0779, 0x077d, 0x0794, 0x07a4, + 0x07af, 0x07b7, 0x07bd, 0x07d6, 0x07ec, 0x07f7, 0x080c, 0x081a, // Entry C0 - FF - 0x0812, 0x081a, 0x081f, 0x0849, 0x0851, 0x0858, 0x085e, 0x0861, - 0x0867, 0x0878, 0x088d, 0x0897, 0x089c, 0x08aa, 0x08b3, 0x08bd, - 0x08c5, 0x08db, 0x08e3, 0x08ef, 0x08f9, 0x0900, 0x0907, 0x090f, - 0x0918, 0x0930, 0x093b, 0x0947, 0x094c, 0x0955, 0x0965, 0x0982, - 0x0986, 0x09a9, 0x09ad, 0x09b6, 0x09c0, 0x09c7, 0x09d2, 0x09de, - 0x09e5, 0x09ea, 0x09f9, 0x0a0c, 0x0a12, 0x0a1c, 0x0a24, 0x0a2b, - 0x0a31, 0x0a50, 0x0a63, 0x0a6b, 0x0a72, 0x0a7c, 0x0a8a, 0x0aa4, - 0x0aad, 0x0acd, 0x0aee, 0x0af8, 0x0aff, 0x0b10, 0x0b15, 0x0b1b, + 0x081f, 0x0827, 0x082c, 0x0856, 0x085e, 0x0865, 0x086b, 0x086e, + 0x0874, 0x0885, 0x089a, 0x08a4, 0x08a9, 0x08b7, 0x08c0, 0x08ca, + 0x08d2, 0x08e8, 0x08f0, 0x08fc, 0x0906, 0x090d, 0x0914, 0x091c, + 0x0925, 0x093d, 0x0948, 0x0954, 0x0959, 0x0962, 0x0972, 0x0990, + 0x0994, 0x09b7, 0x09bb, 0x09c4, 0x09ce, 0x09d5, 0x09e0, 0x09ec, + 0x09f3, 0x09f8, 0x0a07, 0x0a1a, 0x0a20, 0x0a2a, 0x0a32, 0x0a39, + 0x0a3f, 0x0a63, 0x0a76, 0x0a7e, 0x0a85, 0x0a8f, 0x0a9d, 0x0ab7, + 0x0ac0, 0x0ae0, 0x0b01, 0x0b0b, 0x0b12, 0x0b23, 0x0b28, 0x0b2e, // Entry 100 - 13F - 0x0b20, 0x0b27, 0x0b2e, 0x0b34, 0x0b3c, 0x0b55, 0x0b61, 0x0b6a, - 0x0b74, 0x0b7c, 0x0b90, 0x0b98, 0x0ba2, 0x0bac, 0x0bb5, 0x0bbe, - 0x0bd2, 0x0bdc, 0x0bf3, 0x0bfc, 0x0c05, 0x0c0b, 0x0c18, 0x0c1f, - 0x0c32, 0x0c3b, 0x0c4c, 0x0c55, 0x0c5d, 0x0c65, 0x0c6c, 0x0c75, - 0x0c7f, 0x0c88, 0x0c90, 0x0ca2, -} // Size: 608 bytes + 0x0b33, 0x0b3a, 0x0b41, 0x0b47, 0x0b4f, 0x0b68, 0x0b74, 0x0b7d, + 0x0b87, 0x0b8f, 0x0ba3, 0x0bab, 0x0bb5, 0x0bbf, 0x0bc8, 0x0bd1, + 0x0be5, 0x0bef, 0x0c06, 0x0c0f, 0x0c18, 0x0c1e, 0x0c2b, 0x0c32, + 0x0c45, 0x0c4e, 0x0c5f, 0x0c68, 0x0c70, 0x0c78, 0x0c7f, 0x0c88, + 0x0c92, 0x0c9b, 0x0ca3, 0x0ca3, 0x0cb5, +} // Size: 610 bytes const zhRegionStr string = "" + // Size: 3319 bytes "阿森松岛安道尔阿拉伯联合酋长国阿富汗安提瓜和巴布达安圭拉阿尔巴尼亚亚美尼亚安哥拉南极洲阿根廷美属萨摩亚奥地利澳大利亚阿鲁巴奥兰群岛阿塞拜疆波斯尼" + "亚和黑塞哥维那巴巴多斯孟加拉国比利时布基纳法索保加利亚巴林布隆迪贝宁圣巴泰勒米百慕大文莱玻利维亚荷属加勒比区巴西巴哈马不丹布韦岛博茨瓦纳白俄" + "罗斯伯利兹加拿大科科斯(基林)群岛刚果(金)中非共和国刚果(布)瑞士科特迪瓦库克群岛智利喀麦隆中国哥伦比亚克利珀顿岛哥斯达黎加古巴佛得角库拉" + - "索圣诞岛塞浦路斯捷克共和国德国迪戈加西亚岛吉布提丹麦多米尼克多米尼加共和国阿尔及利亚休达及梅利利亚厄瓜多尔爱沙尼亚埃及西撒哈拉厄立特里亚西班" + - "牙埃塞俄比亚欧盟芬兰斐济福克兰群岛密克罗尼西亚法罗群岛法国加蓬英国格林纳达格鲁吉亚法属圭亚那格恩西岛加纳直布罗陀格陵兰冈比亚几内亚瓜德罗普赤" + - "道几内亚希腊南乔治亚和南桑威奇群岛危地马拉关岛几内亚比绍圭亚那中国香港特别行政区赫德岛和麦克唐纳群岛洪都拉斯克罗地亚海地匈牙利加纳利群岛印度" + - "尼西亚爱尔兰以色列马恩岛印度英属印度洋领地伊拉克伊朗冰岛意大利泽西岛牙买加约旦日本肯尼亚吉尔吉斯斯坦柬埔寨基里巴斯科摩罗圣基茨和尼维斯朝鲜韩" + - "国科威特开曼群岛哈萨克斯坦老挝黎巴嫩圣卢西亚列支敦士登斯里兰卡利比里亚莱索托立陶宛卢森堡拉脱维亚利比亚摩洛哥摩纳哥摩尔多瓦黑山圣马丁岛马达加" + + "索圣诞岛塞浦路斯捷克德国迪戈加西亚岛吉布提丹麦多米尼克多米尼加共和国阿尔及利亚休达及梅利利亚厄瓜多尔爱沙尼亚埃及西撒哈拉厄立特里亚西班牙埃塞" + + "俄比亚欧盟欧元区芬兰斐济福克兰群岛密克罗尼西亚法罗群岛法国加蓬英国格林纳达格鲁吉亚法属圭亚那根西岛加纳直布罗陀格陵兰冈比亚几内亚瓜德罗普赤道" + + "几内亚希腊南乔治亚和南桑威奇群岛危地马拉关岛几内亚比绍圭亚那中国香港特别行政区赫德岛和麦克唐纳群岛洪都拉斯克罗地亚海地匈牙利加纳利群岛印度尼" + + "西亚爱尔兰以色列马恩岛印度英属印度洋领地伊拉克伊朗冰岛意大利泽西岛牙买加约旦日本肯尼亚吉尔吉斯斯坦柬埔寨基里巴斯科摩罗圣基茨和尼维斯朝鲜韩国" + + "科威特开曼群岛哈萨克斯坦老挝黎巴嫩圣卢西亚列支敦士登斯里兰卡利比里亚莱索托立陶宛卢森堡拉脱维亚利比亚摩洛哥摩纳哥摩尔多瓦黑山法属圣马丁马达加" + "斯加马绍尔群岛马其顿马里缅甸蒙古中国澳门特别行政区北马里亚纳群岛马提尼克毛里塔尼亚蒙特塞拉特马耳他毛里求斯马尔代夫马拉维墨西哥马来西亚莫桑比" + "克纳米比亚新喀里多尼亚尼日尔诺福克岛尼日利亚尼加拉瓜荷兰挪威尼泊尔瑙鲁纽埃新西兰阿曼巴拿马秘鲁法属波利尼西亚巴布亚新几内亚菲律宾巴基斯坦波兰" + "圣皮埃尔和密克隆群岛皮特凯恩群岛波多黎各巴勒斯坦领土葡萄牙帕劳巴拉圭卡塔尔大洋洲边远群岛留尼汪罗马尼亚塞尔维亚俄罗斯卢旺达沙特阿拉伯所罗门群" + @@ -49561,7 +52323,7 @@ const zhRegionStr string = "" + // Size: 3319 bytes "南瓦努阿图瓦利斯和富图纳萨摩亚科索沃也门马约特南非赞比亚津巴布韦未知地区世界非洲北美洲南美洲大洋洲西非中美洲东非北非中非南部非洲美洲美洲北部" + "加勒比地区东亚南亚东南亚南欧澳大拉西亚美拉尼西亚密克罗尼西亚地区玻利尼西亚亚洲中亚西亚欧洲东欧北欧西欧拉丁美洲" -var zhRegionIdx = []uint16{ // 292 elements +var zhRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x000c, 0x0015, 0x002d, 0x0036, 0x004b, 0x0054, 0x0063, 0x006f, 0x0078, 0x0081, 0x008a, 0x0099, 0x00a2, 0x00ae, 0x00b7, @@ -49570,20 +52332,20 @@ var zhRegionIdx = []uint16{ // 292 elements 0x0180, 0x0189, 0x018f, 0x0198, 0x01a4, 0x01b0, 0x01b9, 0x01c2, 0x01dd, 0x01ec, 0x01fb, 0x020a, 0x0210, 0x021c, 0x0228, 0x022e, 0x0237, 0x023d, 0x0249, 0x0258, 0x0267, 0x026d, 0x0276, 0x027f, - 0x0288, 0x0294, 0x02a3, 0x02a9, 0x02bb, 0x02c4, 0x02ca, 0x02d6, + 0x0288, 0x0294, 0x029a, 0x02a0, 0x02b2, 0x02bb, 0x02c1, 0x02cd, // Entry 40 - 7F - 0x02eb, 0x02fa, 0x030f, 0x031b, 0x0327, 0x032d, 0x0339, 0x0348, - 0x0351, 0x0360, 0x0366, 0x0366, 0x036c, 0x0372, 0x0381, 0x0393, - 0x039f, 0x03a5, 0x03ab, 0x03b1, 0x03bd, 0x03c9, 0x03d8, 0x03e4, - 0x03ea, 0x03f6, 0x03ff, 0x0408, 0x0411, 0x041d, 0x042c, 0x0432, - 0x0453, 0x045f, 0x0465, 0x0474, 0x047d, 0x0498, 0x04b6, 0x04c2, - 0x04ce, 0x04d4, 0x04dd, 0x04ec, 0x04fb, 0x0504, 0x050d, 0x0516, - 0x051c, 0x0531, 0x053a, 0x0540, 0x0546, 0x054f, 0x0558, 0x0561, - 0x0567, 0x056d, 0x0576, 0x0588, 0x0591, 0x059d, 0x05a6, 0x05bb, + 0x02e2, 0x02f1, 0x0306, 0x0312, 0x031e, 0x0324, 0x0330, 0x033f, + 0x0348, 0x0357, 0x035d, 0x0366, 0x036c, 0x0372, 0x0381, 0x0393, + 0x039f, 0x03a5, 0x03ab, 0x03b1, 0x03bd, 0x03c9, 0x03d8, 0x03e1, + 0x03e7, 0x03f3, 0x03fc, 0x0405, 0x040e, 0x041a, 0x0429, 0x042f, + 0x0450, 0x045c, 0x0462, 0x0471, 0x047a, 0x0495, 0x04b3, 0x04bf, + 0x04cb, 0x04d1, 0x04da, 0x04e9, 0x04f8, 0x0501, 0x050a, 0x0513, + 0x0519, 0x052e, 0x0537, 0x053d, 0x0543, 0x054c, 0x0555, 0x055e, + 0x0564, 0x056a, 0x0573, 0x0585, 0x058e, 0x059a, 0x05a3, 0x05b8, // Entry 80 - BF - 0x05c1, 0x05c7, 0x05d0, 0x05dc, 0x05eb, 0x05f1, 0x05fa, 0x0606, - 0x0615, 0x0621, 0x062d, 0x0636, 0x063f, 0x0648, 0x0654, 0x065d, - 0x0666, 0x066f, 0x067b, 0x0681, 0x068d, 0x069c, 0x06ab, 0x06b4, + 0x05be, 0x05c4, 0x05cd, 0x05d9, 0x05e8, 0x05ee, 0x05f7, 0x0603, + 0x0612, 0x061e, 0x062a, 0x0633, 0x063c, 0x0645, 0x0651, 0x065a, + 0x0663, 0x066c, 0x0678, 0x067e, 0x068d, 0x069c, 0x06ab, 0x06b4, 0x06ba, 0x06c0, 0x06c6, 0x06e1, 0x06f6, 0x0702, 0x0711, 0x0720, 0x0729, 0x0735, 0x0741, 0x074a, 0x0753, 0x075f, 0x076b, 0x0777, 0x0789, 0x0792, 0x079e, 0x07aa, 0x07b6, 0x07bc, 0x07c2, 0x07cb, @@ -49603,28 +52365,28 @@ var zhRegionIdx = []uint16{ // 292 elements 0x0c01, 0x0c0a, 0x0c13, 0x0c19, 0x0c22, 0x0c28, 0x0c2e, 0x0c34, 0x0c40, 0x0c46, 0x0c52, 0x0c61, 0x0c67, 0x0c6d, 0x0c76, 0x0c7c, 0x0c8b, 0x0c9a, 0x0cb2, 0x0cc1, 0x0cc7, 0x0ccd, 0x0cd3, 0x0cd9, - 0x0cdf, 0x0ce5, 0x0ceb, 0x0cf7, -} // Size: 608 bytes + 0x0cdf, 0x0ce5, 0x0ceb, 0x0ceb, 0x0cf7, +} // Size: 610 bytes const zhHantRegionStr string = "" + // Size: 3264 bytes - "阿森松島安道爾阿拉伯聯合大公國阿富汗安地卡及巴布達安圭拉阿爾巴尼亞亞美尼亞安哥拉南極洲阿根廷美屬薩摩亞奧地利澳洲荷屬阿魯巴奧蘭群島亞塞拜然波士尼" + + "阿森松島安道爾阿拉伯聯合大公國阿富汗安地卡及巴布達安奎拉阿爾巴尼亞亞美尼亞安哥拉南極洲阿根廷美屬薩摩亞奧地利澳洲荷屬阿魯巴奧蘭群島亞塞拜然波士尼" + "亞與赫塞哥維納巴貝多孟加拉比利時布吉納法索保加利亞巴林蒲隆地貝南聖巴瑟米百慕達汶萊玻利維亞荷蘭加勒比區巴西巴哈馬不丹布威島波札那白俄羅斯貝里" + - "斯加拿大科科斯(基林)群島剛果(金夏沙)中非共和國剛果(布拉薩)瑞士象牙海岸庫克群島智利喀麥隆中國哥倫比亞克里派頓島哥斯大黎加古巴維德角庫拉" + - "索聖誕島賽普勒斯捷克共和國德國迪亞哥加西亞島吉布地丹麥多米尼克多明尼加共和國阿爾及利亞休達與梅利利亞厄瓜多愛沙尼亞埃及西撒哈拉厄利垂亞西班牙" + - "衣索比亞歐盟芬蘭斐濟福克蘭群島密克羅尼西亞群島法羅群島法國加彭英國格瑞那達喬治亞法屬圭亞那根息迦納直布羅陀格陵蘭甘比亞幾內亞瓜地洛普赤道幾內" + - "亞希臘南喬治亞與南三明治群島瓜地馬拉關島幾內亞比索蓋亞那中國香港特別行政區赫德島和麥克唐納群島宏都拉斯克羅埃西亞海地匈牙利加那利群島印尼愛爾" + - "蘭以色列曼島印度英屬印度洋領地伊拉克伊朗冰島義大利澤西島牙買加約旦日本肯亞吉爾吉斯柬埔寨吉里巴斯葛摩聖克里斯多福及尼維斯北韓南韓科威特開曼群" + - "島哈薩克寮國黎巴嫩聖露西亞列支敦斯登斯里蘭卡賴比瑞亞賴索托立陶宛盧森堡拉脫維亞利比亞摩洛哥摩納哥摩爾多瓦蒙特內哥羅法屬聖馬丁馬達加斯加馬紹爾" + - "群島馬其頓馬利緬甸蒙古中國澳門特別行政區北馬里亞納群島馬丁尼克島茅利塔尼亞蒙哲臘馬爾他模里西斯馬爾地夫馬拉威墨西哥馬來西亞莫三比克納米比亞新" + - "喀里多尼亞尼日諾福克島奈及利亞尼加拉瓜荷蘭挪威尼泊爾諾魯紐埃島紐西蘭阿曼王國巴拿馬秘魯法屬玻里尼西亞巴布亞紐幾內亞菲律賓巴基斯坦波蘭聖皮埃爾" + - "和密克隆群島皮特肯群島波多黎各巴勒斯坦自治區葡萄牙帛琉巴拉圭卡達大洋洲邊疆群島留尼旺羅馬尼亞塞爾維亞俄羅斯盧安達沙烏地阿拉伯索羅門群島塞席爾" + - "蘇丹瑞典新加坡聖赫勒拿島斯洛維尼亞冷岸及央棉斯洛伐克獅子山聖馬利諾塞內加爾索馬利亞蘇利南南蘇丹聖多美普林西比薩爾瓦多荷屬聖馬丁敘利亞史瓦濟蘭" + - "特里斯坦達庫尼亞群島土克斯及開科斯群島查德法屬南方屬地多哥泰國塔吉克托克勞群島東帝汶土庫曼突尼西亞東加土耳其千里達及托巴哥吐瓦魯台灣坦尚尼亞" + - "烏克蘭烏干達美國本土外小島嶼聯合國美國烏拉圭烏茲別克梵蒂岡聖文森及格瑞那丁委內瑞拉英屬維京群島美屬維京群島越南萬那杜瓦利斯群島和富圖那群島薩" + - "摩亞科索沃葉門馬約特南非尚比亞辛巴威未知區域世界非洲北美洲南美洲大洋洲西非中美東非北非中非非洲南部美洲北美加勒比海東亞南亞東南亞南歐澳洲與紐" + - "西蘭美拉尼西亞密克羅尼西亞玻里尼西亞亞洲中亞西亞歐洲東歐北歐西歐拉丁美洲" - -var zhHantRegionIdx = []uint16{ // 292 elements + "斯加拿大科克斯(基靈)群島剛果(金夏沙)中非共和國剛果(布拉薩)瑞士象牙海岸庫克群島智利喀麥隆中國哥倫比亞克里派頓島哥斯大黎加古巴維德角庫拉" + + "索聖誕島賽普勒斯捷克德國迪亞哥加西亞島吉布地丹麥多米尼克多明尼加共和國阿爾及利亞休達與梅利利亞厄瓜多愛沙尼亞埃及西撒哈拉厄利垂亞西班牙衣索比" + + "亞歐盟歐元區芬蘭斐濟福克蘭群島密克羅尼西亞法羅群島法國加彭英國格瑞那達喬治亞法屬圭亞那根息迦納直布羅陀格陵蘭甘比亞幾內亞瓜地洛普赤道幾內亞希" + + "臘南喬治亞與南三明治群島瓜地馬拉關島幾內亞比索蓋亞那中國香港特別行政區赫德島及麥唐納群島宏都拉斯克羅埃西亞海地匈牙利加那利群島印尼愛爾蘭以色" + + "列曼島印度英屬印度洋領地伊拉克伊朗冰島義大利澤西島牙買加約旦日本肯亞吉爾吉斯柬埔寨吉里巴斯葛摩聖克里斯多福及尼維斯北韓南韓科威特開曼群島哈薩" + + "克寮國黎巴嫩聖露西亞列支敦斯登斯里蘭卡賴比瑞亞賴索托立陶宛盧森堡拉脫維亞利比亞摩洛哥摩納哥摩爾多瓦蒙特內哥羅法屬聖馬丁馬達加斯加馬紹爾群島馬" + + "其頓馬利緬甸蒙古中國澳門特別行政區北馬利安納群島馬丁尼克茅利塔尼亞蒙哲臘馬爾他模里西斯馬爾地夫馬拉威墨西哥馬來西亞莫三比克納米比亞新喀里多尼" + + "亞尼日諾福克島奈及利亞尼加拉瓜荷蘭挪威尼泊爾諾魯紐埃島紐西蘭阿曼巴拿馬秘魯法屬玻里尼西亞巴布亞紐幾內亞菲律賓巴基斯坦波蘭聖皮埃與密克隆群島皮" + + "特肯群島波多黎各巴勒斯坦自治區葡萄牙帛琉巴拉圭卡達大洋洲邊疆群島留尼旺羅馬尼亞塞爾維亞俄羅斯盧安達沙烏地阿拉伯索羅門群島塞席爾蘇丹瑞典新加坡" + + "聖赫勒拿島斯洛維尼亞挪威屬斯瓦巴及尖棉斯洛伐克獅子山聖馬利諾塞內加爾索馬利亞蘇利南南蘇丹聖多美普林西比薩爾瓦多荷屬聖馬丁敘利亞史瓦濟蘭特里斯" + + "坦達庫尼亞群島土克斯及開科斯群島查德法屬南部屬地多哥泰國塔吉克托克勞群島東帝汶土庫曼突尼西亞東加土耳其千里達及托巴哥吐瓦魯台灣坦尚尼亞烏克蘭" + + "烏干達美國本土外小島嶼聯合國美國烏拉圭烏茲別克梵蒂岡聖文森及格瑞那丁委內瑞拉英屬維京群島美屬維京群島越南萬那杜瓦利斯群島和富圖那群島薩摩亞科" + + "索沃葉門馬約特島南非尚比亞辛巴威未知區域世界非洲北美洲南美洲大洋洲西非中美東非北非中非非洲南部美洲北美加勒比海東亞南亞東南亞南歐澳洲與紐西蘭" + + "美拉尼西亞密克羅尼西亞群島玻里尼西亞亞洲中亞西亞歐洲東歐北歐西歐拉丁美洲" + +var zhHantRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x000c, 0x0015, 0x002d, 0x0036, 0x004b, 0x0054, 0x0063, 0x006f, 0x0078, 0x0081, 0x008a, 0x0099, 0x00a2, 0x00a8, 0x00b7, @@ -49633,43 +52395,43 @@ var zhHantRegionIdx = []uint16{ // 292 elements 0x0177, 0x0180, 0x0186, 0x018f, 0x0198, 0x01a4, 0x01ad, 0x01b6, 0x01d1, 0x01e6, 0x01f5, 0x020a, 0x0210, 0x021c, 0x0228, 0x022e, 0x0237, 0x023d, 0x0249, 0x0258, 0x0267, 0x026d, 0x0276, 0x027f, - 0x0288, 0x0294, 0x02a3, 0x02a9, 0x02be, 0x02c7, 0x02cd, 0x02d9, + 0x0288, 0x0294, 0x029a, 0x02a0, 0x02b5, 0x02be, 0x02c4, 0x02d0, // Entry 40 - 7F - 0x02ee, 0x02fd, 0x0312, 0x031b, 0x0327, 0x032d, 0x0339, 0x0345, - 0x034e, 0x035a, 0x0360, 0x0360, 0x0366, 0x036c, 0x037b, 0x0393, - 0x039f, 0x03a5, 0x03ab, 0x03b1, 0x03bd, 0x03c6, 0x03d5, 0x03db, - 0x03e1, 0x03ed, 0x03f6, 0x03ff, 0x0408, 0x0414, 0x0423, 0x0429, - 0x044a, 0x0456, 0x045c, 0x046b, 0x0474, 0x048f, 0x04ad, 0x04b9, - 0x04c8, 0x04ce, 0x04d7, 0x04e6, 0x04ec, 0x04f5, 0x04fe, 0x0504, - 0x050a, 0x051f, 0x0528, 0x052e, 0x0534, 0x053d, 0x0546, 0x054f, - 0x0555, 0x055b, 0x0561, 0x056d, 0x0576, 0x0582, 0x0588, 0x05a6, + 0x02e5, 0x02f4, 0x0309, 0x0312, 0x031e, 0x0324, 0x0330, 0x033c, + 0x0345, 0x0351, 0x0357, 0x0360, 0x0366, 0x036c, 0x037b, 0x038d, + 0x0399, 0x039f, 0x03a5, 0x03ab, 0x03b7, 0x03c0, 0x03cf, 0x03d5, + 0x03db, 0x03e7, 0x03f0, 0x03f9, 0x0402, 0x040e, 0x041d, 0x0423, + 0x0444, 0x0450, 0x0456, 0x0465, 0x046e, 0x0489, 0x04a4, 0x04b0, + 0x04bf, 0x04c5, 0x04ce, 0x04dd, 0x04e3, 0x04ec, 0x04f5, 0x04fb, + 0x0501, 0x0516, 0x051f, 0x0525, 0x052b, 0x0534, 0x053d, 0x0546, + 0x054c, 0x0552, 0x0558, 0x0564, 0x056d, 0x0579, 0x057f, 0x059d, // Entry 80 - BF - 0x05ac, 0x05b2, 0x05bb, 0x05c7, 0x05d0, 0x05d6, 0x05df, 0x05eb, - 0x05fa, 0x0606, 0x0612, 0x061b, 0x0624, 0x062d, 0x0639, 0x0642, - 0x064b, 0x0654, 0x0660, 0x066f, 0x067e, 0x068d, 0x069c, 0x06a5, - 0x06ab, 0x06b1, 0x06b7, 0x06d2, 0x06e7, 0x06f6, 0x0705, 0x070e, - 0x0717, 0x0723, 0x072f, 0x0738, 0x0741, 0x074d, 0x0759, 0x0765, - 0x0777, 0x077d, 0x0789, 0x0795, 0x07a1, 0x07a7, 0x07ad, 0x07b6, - 0x07bc, 0x07c5, 0x07ce, 0x07da, 0x07e3, 0x07e9, 0x07fe, 0x0813, - 0x081c, 0x0828, 0x082e, 0x084c, 0x085b, 0x0867, 0x087c, 0x0885, + 0x05a3, 0x05a9, 0x05b2, 0x05be, 0x05c7, 0x05cd, 0x05d6, 0x05e2, + 0x05f1, 0x05fd, 0x0609, 0x0612, 0x061b, 0x0624, 0x0630, 0x0639, + 0x0642, 0x064b, 0x0657, 0x0666, 0x0675, 0x0684, 0x0693, 0x069c, + 0x06a2, 0x06a8, 0x06ae, 0x06c9, 0x06de, 0x06ea, 0x06f9, 0x0702, + 0x070b, 0x0717, 0x0723, 0x072c, 0x0735, 0x0741, 0x074d, 0x0759, + 0x076b, 0x0771, 0x077d, 0x0789, 0x0795, 0x079b, 0x07a1, 0x07aa, + 0x07b0, 0x07b9, 0x07c2, 0x07c8, 0x07d1, 0x07d7, 0x07ec, 0x0801, + 0x080a, 0x0816, 0x081c, 0x0837, 0x0846, 0x0852, 0x0867, 0x0870, // Entry C0 - FF - 0x088b, 0x0894, 0x089a, 0x08af, 0x08b8, 0x08c4, 0x08d0, 0x08d9, - 0x08e2, 0x08f4, 0x0903, 0x090c, 0x0912, 0x0918, 0x0921, 0x0930, - 0x093f, 0x094e, 0x095a, 0x0963, 0x096f, 0x097b, 0x0987, 0x0990, - 0x0999, 0x09ae, 0x09ba, 0x09c9, 0x09d2, 0x09de, 0x09fc, 0x0a17, - 0x0a1d, 0x0a2f, 0x0a35, 0x0a3b, 0x0a44, 0x0a53, 0x0a5c, 0x0a65, - 0x0a71, 0x0a77, 0x0a80, 0x0a95, 0x0a9e, 0x0aa4, 0x0ab0, 0x0ab9, - 0x0ac2, 0x0ada, 0x0ae3, 0x0ae9, 0x0af2, 0x0afe, 0x0b07, 0x0b1f, - 0x0b2b, 0x0b3d, 0x0b4f, 0x0b55, 0x0b5e, 0x0b7f, 0x0b88, 0x0b91, + 0x0876, 0x087f, 0x0885, 0x089a, 0x08a3, 0x08af, 0x08bb, 0x08c4, + 0x08cd, 0x08df, 0x08ee, 0x08f7, 0x08fd, 0x0903, 0x090c, 0x091b, + 0x092a, 0x0945, 0x0951, 0x095a, 0x0966, 0x0972, 0x097e, 0x0987, + 0x0990, 0x09a5, 0x09b1, 0x09c0, 0x09c9, 0x09d5, 0x09f3, 0x0a0e, + 0x0a14, 0x0a26, 0x0a2c, 0x0a32, 0x0a3b, 0x0a4a, 0x0a53, 0x0a5c, + 0x0a68, 0x0a6e, 0x0a77, 0x0a8c, 0x0a95, 0x0a9b, 0x0aa7, 0x0ab0, + 0x0ab9, 0x0ad1, 0x0ada, 0x0ae0, 0x0ae9, 0x0af5, 0x0afe, 0x0b16, + 0x0b22, 0x0b34, 0x0b46, 0x0b4c, 0x0b55, 0x0b76, 0x0b7f, 0x0b88, // Entry 100 - 13F - 0x0b97, 0x0ba0, 0x0ba6, 0x0baf, 0x0bb8, 0x0bc4, 0x0bca, 0x0bd0, - 0x0bd9, 0x0be2, 0x0beb, 0x0bf1, 0x0bf7, 0x0bfd, 0x0c03, 0x0c09, - 0x0c15, 0x0c1b, 0x0c21, 0x0c2d, 0x0c33, 0x0c39, 0x0c42, 0x0c48, - 0x0c5a, 0x0c69, 0x0c7b, 0x0c8a, 0x0c90, 0x0c96, 0x0c9c, 0x0ca2, - 0x0ca8, 0x0cae, 0x0cb4, 0x0cc0, -} // Size: 608 bytes - -const zuRegionStr string = "" + // Size: 3568 bytes + 0x0b8e, 0x0b9a, 0x0ba0, 0x0ba9, 0x0bb2, 0x0bbe, 0x0bc4, 0x0bca, + 0x0bd3, 0x0bdc, 0x0be5, 0x0beb, 0x0bf1, 0x0bf7, 0x0bfd, 0x0c03, + 0x0c0f, 0x0c15, 0x0c1b, 0x0c27, 0x0c2d, 0x0c33, 0x0c3c, 0x0c42, + 0x0c54, 0x0c63, 0x0c7b, 0x0c8a, 0x0c90, 0x0c96, 0x0c9c, 0x0ca2, + 0x0ca8, 0x0cae, 0x0cb4, 0x0cb4, 0x0cc0, +} // Size: 610 bytes + +const zuRegionStr string = "" + // Size: 3566 bytes "i-Ascension Islandi-Andorrai-United Arab Emiratesi-Afghanistani-Antigua " + "ne-Barbudai-Anguillai-Albaniai-Armeniai-Angolai-Antarcticai-Argentinai-A" + "merican Samoai-Austriai-Australiai-Arubai-Åland Islandsi-Azerbaijani-Bos" + @@ -49679,49 +52441,49 @@ const zuRegionStr string = "" + // Size: 3568 bytes "Belarusi-Belizei-Canadai-Cocos (Keeling) Islandsi-Congo - Kinshasai-Cent" + "ral African Republici-Congo - Brazzavillei-Switzerlandi-Côte d’Ivoirei-C" + "ook Islandsi-Chilei-Camerooni-Chinai-Colombiai-Clipperton Islandi-Costa " + - "Ricai-Cubai-Cape Verdei-Curaçaoi-Christmas Islandi-Cyprusi-Czech Republi" + - "ci-Germanyi-Diego Garciai-Djiboutii-Denmarki-Dominicai-Dominican Republi" + - "ci-Algeriai-Cueta ne-Melillai-Ecuadori-Estoniai-Egypti-Western Saharai-E" + - "ritreai-Spaini-Ethiopiai-European Unioni-Finlandi-Fijii-Falkland Islands" + - "i-Micronesiai-Faroe Islandsi-Francei-Gaboni-United Kingdomi-Grenadai-Geo" + - "rgiai-French Guianai-Guernseyi-Ghanai-Gibraltari-Greenlandi-Gambiai-Guin" + - "eai-Guadeloupei-Equatorial Guineai-Greecei-South Georgia ne-South Sandwi" + - "ch Islandsi-Guatemalai-Guami-Guinea-Bissaui-Guyanai-Hong Kong SAR Chinai" + - "-Heard Island ne-McDonald Islandsi-Hondurasi-Croatiai-Haitii-Hungaryi-Ca" + - "nary Islandsi-Indonesiai-Irelandkwa-Israeli-Isle of Mani-Indiai-British " + - "Indian Ocean Territoryi-Iraqi-Irani-Icelandi-Italyi-Jerseyi-Jamaicai-Jor" + - "dani-Japani-Kenyai-Kyrgyzstani-Cambodiai-Kiribatii-Comorosi-Saint Kitts " + - "ne-Nevisi-North Koreai-South Koreai-Kuwaiti-Cayman Islandsi-Kazakhstani-" + - "Laosi-Lebanoni-Saint Luciai-Liechtensteini-Sri Lankai-LiberiaiLesothoi-L" + - "ithuaniai-Luxembourgi-Latviai-Libyai-Moroccoi-Monacoi-Moldovai-Montenegr" + - "oi-Saint Martini-Madagascari-Marshall Islandsi-MacedoniaiMalii-Myanmar (" + - "Burma)i-Mongoliai-Macau SAR Chinai-Northern Mariana Islandsi-Martiniquei" + - "-Mauritaniai-Montserrati-Maltai-Mauritiusi-MaldivesiMalawii-Mexicoi-Mala" + - "ysiai-Mozambiquei-Namibiai-New Caledoniai-Nigeri-Norfolk Islandi-Nigeria" + - "i-Nicaraguai-Netherlandsi-Norwayi-Nepali-Naurui-Niuei-New Zealandi-Omani" + - "-Panamai-Perui-French Polynesiai-Papua New Guineai-Philippinesi-Pakistan" + - "i-Polandi-Saint Pierre kanye ne-Miqueloni-Pitcairn Islandsi-Puerto Ricoi" + - "-Palestinian Territoriesi-Portugali-Palaui-Paraguayi-Qatari-Outlying Oce" + - "aniai-Réunioni-Romaniai-Serbiai-Russiai-Rwandai-Saudi Arabiai-Solomon Is" + - "landsi-Seychellesi-Sudani-Swedeni-Singaporei-St. Helenai-Sloveniai-Svalb" + - "ard ne-Jan Mayeni-Slovakiai-Sierra Leonei-San Marinoi-Senegali-Somaliai-" + - "Surinamei-South Sudani-São Tomé kanye ne-Príncipei-El Salvadori-Sint Maa" + - "rteni-Syriai-Swazilandi-Tristan da Cunhai-Turks ne-Caicos Islandsi-Chadi" + - "-French Southern Territoriesi-Togoi-Thailandi-Tajikistani-Tokelaui-Timor" + - "-Lestei-Turkmenistani-Tunisiai-Tongai-Turkeyi-Trinidad ne-Tobagoi-Tuvalu" + - "i-Taiwani-Tanzaniai-Ukrainei-Ugandai-U.S. Minor Outlying IslandsI-United" + - " Nationsi-United Statesi-Uruguayi-Uzbekistani-Vatican Cityi-Saint Vincen" + - "t ne-Grenadinesi-Venezuelai-British Virgin Islandsi-U.S. Virgin Islandsi" + - "-Vietnami-Vanuatui-Wallis ne-Futunai-Samoai-Kosovoi-Yemeni-Mayottei-Sout" + - "h Africai-ZambiaiZimbabweiSifunda esingaziwaumhlabai-Africai-North Ameri" + - "cai-South Americai-Oceaniai-Western Africai-Central Americai-Eastern Afr" + - "icai-Northern Africai-Middle Africai-Southern Africai-Americasi-Northern" + - " Americai-Caribbeani-Eastern Asiai-Southern Asiai-South-Eastern Asiai-So" + - "uthern Europei-Australasiai-Melanesiai-Micronesian Regioni-Polynesiai-As" + - "iai-Central Asiai-Western Asiai-Europei-Eastern Europei-Northern Europei" + - "-Western Europei-Latin America" - -var zuRegionIdx = []uint16{ // 292 elements + "Ricai-Cubai-Cape Verdei-Curaçaoi-Christmas Islandi-Cyprusi-Czechiai-Germ" + + "anyi-Diego Garciai-Djiboutii-Denmarki-Dominicai-Dominican Republici-Alge" + + "riai-Cueta ne-Melillai-Ecuadori-Estoniai-Egypti-Western Saharai-Eritreai" + + "-Spaini-Ethiopiai-European UnionEZi-Finlandi-Fijii-Falkland Islandsi-Mic" + + "ronesiai-Faroe Islandsi-Francei-Gaboni-United Kingdomi-Grenadai-Georgiai" + + "-French Guianai-Guernseyi-Ghanai-Gibraltari-Greenlandi-Gambiai-Guineai-G" + + "uadeloupei-Equatorial Guineai-Greecei-South Georgia ne-South Sandwich Is" + + "landsi-Guatemalai-Guami-Guinea-Bissaui-Guyanai-Hong Kong SAR Chinai-Hear" + + "d Island ne-McDonald Islandsi-Hondurasi-Croatiai-Haitii-Hungaryi-Canary " + + "Islandsi-Indonesiai-Irelandkwa-Israeli-Isle of Mani-Indiai-British India" + + "n Ocean Territoryi-Iraqi-Irani-Icelandi-Italyi-Jerseyi-Jamaicai-Jordani-" + + "Japani-Kenyai-Kyrgyzstani-Cambodiai-Kiribatii-Comorosi-Saint Kitts ne-Ne" + + "visi-North Koreai-South Koreai-Kuwaiti-Cayman Islandsi-Kazakhstani-Laosi" + + "-Lebanoni-Saint Luciai-Liechtensteini-Sri Lankai-LiberiaiLesothoi-Lithua" + + "niai-Luxembourgi-Latviai-Libyai-Moroccoi-Monacoi-Moldovai-Montenegroi-Sa" + + "int Martini-Madagascari-Marshall Islandsi-MacedoniaiMalii-Myanmar (Burma" + + ")i-Mongoliai-Macau SAR Chinai-Northern Mariana Islandsi-Martiniquei-Maur" + + "itaniai-Montserrati-Maltai-Mauritiusi-MaldivesiMalawii-Mexicoi-Malaysiai" + + "-Mozambiquei-Namibiai-New Caledoniai-Nigeri-Norfolk Islandi-Nigeriai-Nic" + + "araguai-Netherlandsi-Norwayi-Nepali-Naurui-Niuei-New Zealandi-Omani-Pana" + + "mai-Perui-French Polynesiai-Papua New Guineai-Philippinesi-Pakistani-Pol" + + "andi-Saint Pierre kanye ne-Miqueloni-Pitcairn Islandsi-Puerto Ricoi-Pale" + + "stinian Territoriesi-Portugali-Palaui-Paraguayi-Qatari-Outlying Oceaniai" + + "-Réunioni-Romaniai-Serbiai-Russiai-Rwandai-Saudi Arabiai-Solomon Islands" + + "i-Seychellesi-Sudani-Swedeni-Singaporei-St. Helenai-Sloveniai-Svalbard n" + + "e-Jan Mayeni-Slovakiai-Sierra Leonei-San Marinoi-Senegali-Somaliai-Surin" + + "amei-South Sudani-São Tomé kanye ne-Príncipei-El Salvadori-Sint Maarteni" + + "-Syriai-Swazilandi-Tristan da Cunhai-Turks ne-Caicos Islandsi-Chadi-Fren" + + "ch Southern Territoriesi-Togoi-Thailandi-Tajikistani-Tokelaui-Timor-Lest" + + "ei-Turkmenistani-Tunisiai-Tongai-Turkeyi-Trinidad ne-Tobagoi-Tuvalui-Tai" + + "wani-Tanzaniai-Ukrainei-Ugandai-U.S. Minor Outlying IslandsI-United Nati" + + "onsi-United Statesi-Uruguayi-Uzbekistani-Vatican Cityi-Saint Vincent ne-" + + "Grenadinesi-Venezuelai-British Virgin Islandsi-U.S. Virgin Islandsi-Viet" + + "nami-Vanuatui-Wallis ne-Futunai-Samoai-Kosovoi-Yemeni-MayotteiNingizimu " + + "Afrikai-ZambiaiZimbabweiSifunda esingaziwaumhlabai-Africai-North America" + + "i-South Americai-Oceaniai-Western Africai-Central Americai-Eastern Afric" + + "ai-Northern Africai-Middle Africai-Southern Africai-Americasi-Northern A" + + "mericai-Caribbeani-Eastern Asiai-Southern Asiai-South-Eastern Asiai-Sout" + + "hern Europei-Australasiai-Melanesiai-Micronesian Regioni-Polynesiai-Asia" + + "i-Central Asiai-Western Asiai-Europei-Eastern Europei-Northern Europei-W" + + "estern Europei-Latin America" + +var zuRegionIdx = []uint16{ // 293 elements // Entry 0 - 3F 0x0000, 0x0012, 0x001b, 0x0031, 0x003e, 0x0052, 0x005c, 0x0065, 0x006e, 0x0076, 0x0082, 0x008d, 0x009d, 0x00a6, 0x00b1, 0x00b8, @@ -49730,62 +52492,63 @@ var zuRegionIdx = []uint16{ // 292 elements 0x0187, 0x0190, 0x0198, 0x01a7, 0x01b0, 0x01b9, 0x01c1, 0x01c9, 0x01e2, 0x01f4, 0x020e, 0x0223, 0x0230, 0x0242, 0x0250, 0x0257, 0x0261, 0x0268, 0x0272, 0x0285, 0x0291, 0x0297, 0x02a3, 0x02ad, - 0x02bf, 0x02c7, 0x02d7, 0x02e0, 0x02ee, 0x02f8, 0x0301, 0x030b, + 0x02bf, 0x02c7, 0x02d0, 0x02d9, 0x02e7, 0x02f1, 0x02fa, 0x0304, // Entry 40 - 7F - 0x031f, 0x0328, 0x033a, 0x0343, 0x034c, 0x0353, 0x0363, 0x036c, - 0x0373, 0x037d, 0x038d, 0x038d, 0x0396, 0x039c, 0x03ae, 0x03ba, - 0x03c9, 0x03d1, 0x03d8, 0x03e8, 0x03f1, 0x03fa, 0x0409, 0x0413, - 0x041a, 0x0425, 0x0430, 0x0438, 0x0440, 0x044c, 0x045f, 0x0467, - 0x0490, 0x049b, 0x04a1, 0x04b0, 0x04b8, 0x04cd, 0x04ef, 0x04f9, - 0x0502, 0x0509, 0x0512, 0x0522, 0x052d, 0x0536, 0x0540, 0x054d, - 0x0554, 0x0574, 0x057a, 0x0580, 0x0589, 0x0590, 0x0598, 0x05a1, - 0x05a9, 0x05b0, 0x05b7, 0x05c3, 0x05cd, 0x05d7, 0x05e0, 0x05f6, + 0x0318, 0x0321, 0x0333, 0x033c, 0x0345, 0x034c, 0x035c, 0x0365, + 0x036c, 0x0376, 0x0386, 0x0388, 0x0391, 0x0397, 0x03a9, 0x03b5, + 0x03c4, 0x03cc, 0x03d3, 0x03e3, 0x03ec, 0x03f5, 0x0404, 0x040e, + 0x0415, 0x0420, 0x042b, 0x0433, 0x043b, 0x0447, 0x045a, 0x0462, + 0x048b, 0x0496, 0x049c, 0x04ab, 0x04b3, 0x04c8, 0x04ea, 0x04f4, + 0x04fd, 0x0504, 0x050d, 0x051d, 0x0528, 0x0531, 0x053b, 0x0548, + 0x054f, 0x056f, 0x0575, 0x057b, 0x0584, 0x058b, 0x0593, 0x059c, + 0x05a4, 0x05ab, 0x05b2, 0x05be, 0x05c8, 0x05d2, 0x05db, 0x05f1, // Entry 80 - BF - 0x0603, 0x0610, 0x0618, 0x0628, 0x0634, 0x063a, 0x0643, 0x0650, - 0x065f, 0x066a, 0x0673, 0x067b, 0x0686, 0x0692, 0x069a, 0x06a1, - 0x06aa, 0x06b2, 0x06bb, 0x06c7, 0x06d5, 0x06e1, 0x06f3, 0x06fe, - 0x0703, 0x0714, 0x071e, 0x072f, 0x0749, 0x0755, 0x0761, 0x076d, - 0x0774, 0x077f, 0x0789, 0x0790, 0x0798, 0x07a2, 0x07ae, 0x07b7, - 0x07c6, 0x07cd, 0x07dd, 0x07e6, 0x07f1, 0x07fe, 0x0806, 0x080d, - 0x0814, 0x081a, 0x0827, 0x082d, 0x0835, 0x083b, 0x084d, 0x085f, - 0x086c, 0x0876, 0x087e, 0x089e, 0x08b0, 0x08bd, 0x08d6, 0x08e0, + 0x05fe, 0x060b, 0x0613, 0x0623, 0x062f, 0x0635, 0x063e, 0x064b, + 0x065a, 0x0665, 0x066e, 0x0676, 0x0681, 0x068d, 0x0695, 0x069c, + 0x06a5, 0x06ad, 0x06b6, 0x06c2, 0x06d0, 0x06dc, 0x06ee, 0x06f9, + 0x06fe, 0x070f, 0x0719, 0x072a, 0x0744, 0x0750, 0x075c, 0x0768, + 0x076f, 0x077a, 0x0784, 0x078b, 0x0793, 0x079d, 0x07a9, 0x07b2, + 0x07c1, 0x07c8, 0x07d8, 0x07e1, 0x07ec, 0x07f9, 0x0801, 0x0808, + 0x080f, 0x0815, 0x0822, 0x0828, 0x0830, 0x0836, 0x0848, 0x085a, + 0x0867, 0x0871, 0x0879, 0x0899, 0x08ab, 0x08b8, 0x08d1, 0x08db, // Entry C0 - FF - 0x08e7, 0x08f1, 0x08f8, 0x090a, 0x0914, 0x091d, 0x0925, 0x092d, - 0x0935, 0x0943, 0x0954, 0x0960, 0x0967, 0x096f, 0x097a, 0x0986, - 0x0990, 0x09a7, 0x09b1, 0x09bf, 0x09cb, 0x09d4, 0x09dd, 0x09e7, - 0x09f4, 0x0a13, 0x0a20, 0x0a2e, 0x0a35, 0x0a40, 0x0a52, 0x0a6b, - 0x0a71, 0x0a8e, 0x0a94, 0x0a9e, 0x0aaa, 0x0ab3, 0x0ac0, 0x0ace, - 0x0ad7, 0x0ade, 0x0ae6, 0x0afa, 0x0b02, 0x0b0a, 0x0b14, 0x0b1d, - 0x0b25, 0x0b42, 0x0b52, 0x0b61, 0x0b6a, 0x0b76, 0x0b84, 0x0ba1, - 0x0bac, 0x0bc4, 0x0bd9, 0x0be2, 0x0beb, 0x0bfd, 0x0c04, 0x0c0c, + 0x08e2, 0x08ec, 0x08f3, 0x0905, 0x090f, 0x0918, 0x0920, 0x0928, + 0x0930, 0x093e, 0x094f, 0x095b, 0x0962, 0x096a, 0x0975, 0x0981, + 0x098b, 0x09a2, 0x09ac, 0x09ba, 0x09c6, 0x09cf, 0x09d8, 0x09e2, + 0x09ef, 0x0a0e, 0x0a1b, 0x0a29, 0x0a30, 0x0a3b, 0x0a4d, 0x0a66, + 0x0a6c, 0x0a89, 0x0a8f, 0x0a99, 0x0aa5, 0x0aae, 0x0abb, 0x0ac9, + 0x0ad2, 0x0ad9, 0x0ae1, 0x0af5, 0x0afd, 0x0b05, 0x0b0f, 0x0b18, + 0x0b20, 0x0b3d, 0x0b4d, 0x0b5c, 0x0b65, 0x0b71, 0x0b7f, 0x0b9c, + 0x0ba7, 0x0bbf, 0x0bd4, 0x0bdd, 0x0be6, 0x0bf8, 0x0bff, 0x0c07, // Entry 100 - 13F - 0x0c13, 0x0c1c, 0x0c2a, 0x0c32, 0x0c3b, 0x0c4e, 0x0c55, 0x0c5d, - 0x0c6c, 0x0c7b, 0x0c84, 0x0c94, 0x0ca5, 0x0cb5, 0x0cc6, 0x0cd5, - 0x0ce6, 0x0cf0, 0x0d02, 0x0d0d, 0x0d1b, 0x0d2a, 0x0d3e, 0x0d4f, - 0x0d5c, 0x0d67, 0x0d7b, 0x0d86, 0x0d8c, 0x0d9a, 0x0da8, 0x0db0, - 0x0dc0, 0x0dd1, 0x0de1, 0x0df0, -} // Size: 608 bytes + 0x0c0e, 0x0c17, 0x0c28, 0x0c30, 0x0c39, 0x0c4c, 0x0c53, 0x0c5b, + 0x0c6a, 0x0c79, 0x0c82, 0x0c92, 0x0ca3, 0x0cb3, 0x0cc4, 0x0cd3, + 0x0ce4, 0x0cee, 0x0d00, 0x0d0b, 0x0d19, 0x0d28, 0x0d3c, 0x0d4d, + 0x0d5a, 0x0d65, 0x0d79, 0x0d84, 0x0d8a, 0x0d98, 0x0da6, 0x0dae, + 0x0dbe, 0x0dcf, 0x0ddf, 0x0ddf, 0x0dee, +} // Size: 610 bytes -// Total size for region: 847628 bytes (847 KB) +// Total size for region: 915280 bytes (915 KB) -const numSupported = 252 +const numSupported = 261 -const supported string = "" + // Size: 1065 bytes +const supported string = "" + // Size: 1105 bytes "af|agq|ak|am|ar|ar-EG|ar-LY|ar-SA|as|asa|ast|az|az-Cyrl|bas|be|bem|bez|b" + - "g|bm|bn|bn-IN|bo|bo-IN|br|brx|bs|bs-Cyrl|ca|ce|cgg|chr|ckb|cs|cy|da|dav|" + - "de|de-AT|de-CH|de-LU|dje|dsb|dua|dyo|dz|ebu|ee|el|en|en-AU|en-IN|en-NZ|e" + - "o|es|es-419|es-AR|es-BO|es-CL|es-CO|es-CR|es-DO|es-EC|es-GT|es-HN|es-MX|" + - "es-NI|es-PA|es-PE|es-PR|es-PY|es-SV|es-US|es-VE|et|eu|ewo|fa|fa-AF|ff|fi" + - "|fil|fo|fr|fr-BE|fr-CA|fr-CH|fur|fy|ga|gd|gl|gsw|gu|guz|gv|ha|haw|he|hi|" + - "hr|hsb|hu|hy|id|ig|ii|is|it|ja|jgo|jmc|ka|kab|kam|kde|kea|khq|ki|kk|kkj|" + - "kl|kln|km|kn|ko|ko-KP|kok|ks|ksb|ksf|ksh|kw|ky|lag|lb|lg|lkt|ln|lo|lrc|l" + - "t|lu|luo|luy|lv|mas|mer|mfe|mg|mgh|mgo|mk|ml|mn|mr|ms|mt|mua|my|mzn|naq|" + - "nd|ne|nl|nmg|nn|nnh|no|nus|nyn|om|or|os|pa|pa-Arab|pl|prg|ps|pt|pt-PT|qu" + - "|rm|rn|ro|ro-MD|rof|ru|ru-UA|rw|rwk|sah|saq|sbp|se|se-FI|seh|ses|sg|shi|" + - "shi-Latn|si|sk|sl|smn|sn|so|sq|sr|sr-Cyrl-BA|sr-Cyrl-ME|sr-Cyrl-XK|sr-La" + - "tn|sr-Latn-BA|sr-Latn-ME|sr-Latn-XK|sv|sv-FI|sw|sw-CD|sw-KE|ta|te|teo|th" + - "|ti|to|tr|twq|tzm|ug|uk|ur|ur-IN|uz|uz-Arab|uz-Cyrl|vai|vai-Latn|vi|vun|" + - "wae|xog|yav|yi|yo|yo-BJ|yue|zgh|zh|zh-Hant|zh-Hant-HK|zu|" + "g|bm|bn|bn-IN|bo|bo-IN|br|brx|bs|bs-Cyrl|ca|ccp|ce|cgg|chr|ckb|cs|cy|da|" + + "dav|de|de-AT|de-CH|de-LU|dje|dsb|dua|dyo|dz|ebu|ee|el|en|en-AU|en-CA|en-" + + "GB|en-IN|en-NZ|eo|es|es-419|es-AR|es-BO|es-CL|es-CO|es-CR|es-DO|es-EC|es" + + "-GT|es-HN|es-MX|es-NI|es-PA|es-PE|es-PR|es-PY|es-SV|es-US|es-VE|et|eu|ew" + + "o|fa|fa-AF|ff|fi|fil|fo|fr|fr-BE|fr-CA|fr-CH|fur|fy|ga|gd|gl|gsw|gu|guz|" + + "gv|ha|haw|he|hi|hr|hsb|hu|hy|id|ig|ii|is|it|ja|jgo|jmc|ka|kab|kam|kde|ke" + + "a|khq|ki|kk|kkj|kl|kln|km|kn|ko|ko-KP|kok|ks|ksb|ksf|ksh|kw|ky|lag|lb|lg" + + "|lkt|ln|lo|lrc|lt|lu|luo|luy|lv|mas|mer|mfe|mg|mgh|mgo|mk|ml|mn|mr|ms|mt" + + "|mua|my|mzn|naq|nd|ne|nl|nmg|nn|nnh|no|nus|nyn|om|or|os|pa|pa-Arab|pl|pr" + + "g|ps|pt|pt-PT|qu|rm|rn|ro|ro-MD|rof|ru|ru-UA|rw|rwk|sah|saq|sbp|sd|se|se" + + "-FI|seh|ses|sg|shi|shi-Latn|si|sk|sl|smn|sn|so|sq|sr|sr-Cyrl-BA|sr-Cyrl-" + + "ME|sr-Cyrl-XK|sr-Latn|sr-Latn-BA|sr-Latn-ME|sr-Latn-XK|sv|sv-FI|sw|sw-CD" + + "|sw-KE|ta|te|teo|tg|th|ti|tk|to|tr|tt|twq|tzm|ug|uk|ur|ur-IN|uz|uz-Arab|" + + "uz-Cyrl|vai|vai-Latn|vi|vun|wae|wo|xog|yav|yi|yo|yo-BJ|yue|yue-Hans|zgh|" + + "zh|zh-Hant|zh-Hant-HK|zu|" // Dictionary entries of frequent languages var ( @@ -49861,6 +52624,12 @@ var ( header{enScriptStr, enScriptIdx}, header{enRegionStr, enRegionIdx}, } + enGB = Dictionary{ // en-GB + &en, + header{enGBLangStr, enGBLangIdx}, + header{enGBScriptStr, enGBScriptIdx}, + header{enGBRegionStr, enGBRegionIdx}, + } es = Dictionary{ // es nil, header{esLangStr, esLangIdx}, @@ -50231,17 +53000,17 @@ var ( // Total size for 79 entries: 10112 bytes (10 KB) -// Number of keys: 217 +// Number of keys: 223 var ( selfIndex = tagIndex{ "afakamarasazbebgbmbnbobrbscacecscydadedzeeeleneoeseteufafffifofrfygagdgl" + "gugvhahehihrhuhyidigiiisitjakakikkklkmknkokskwkylblglnloltlulvmgmkml" + - "mnmrmsmtmyndnenlnnnoomorospaplpsptqurmrnrorurwsesgsiskslsnsosqsrsvsw" + - "tatethtitotrugukuruzviyiyozhzu", - "agqasaastbasbembezbrxcggchrckbdavdjedsbduadyoebuewofilfurgswguzhawhsbjgo" + - "jmckabkamkdekeakhqkkjklnkokksbksfkshlaglktlrcluoluymasmermfemghmgomu" + - "amznnaqnnhnusnynprgrofrwksahsaqsbpsehsesshismnteotwqtzmvaivunwaexogy" + - "avyuezgh", + "mnmrmsmtmyndnenlnnnoomorospaplpsptqurmrnrorurwsdsesgsiskslsnsosqsrsv" + + "swtatetgthtitktotrttugukuruzviwoyiyozhzu", + "agqasaastbasbembezbrxccpcggchrckbdavdjedsbduadyoebuewofilfurgswguzhawhsb" + + "jgojmckabkamkdekeakhqkkjklnkokksbksfkshlaglktlrcluoluymasmermfemghmg" + + "omuamznnaqnnhnusnynprgrofrwksahsaqsbpsehsesshismnteotwqtzmvaivunwaex" + + "ogyavyuezgh", "", } selfTagsLong = []string{ // 26 elements @@ -50262,13 +53031,13 @@ var ( "fr-CH", "pa-Arab", "pt-PT", - "ro-MD", "shi-Latn", "sr-Latn", "sw-CD", "uz-Arab", "uz-Cyrl", "vai-Latn", + "yue-Hans", "zh-Hans", "zh-Hant", } @@ -50279,67 +53048,67 @@ var selfHeaders = [1]header{ "AfrikaansAkanአማርኛالعربيةঅসমীয়াazərbaycanбеларускаябългарскиbamanakanবাং" + "লাབོད་སྐད་brezhonegbosanskicatalàнохчийнčeštinaCymraegdanskDeutsch" + "རྫོང་ཁEʋegbeΕλληνικάEnglishesperantoespañoleestieuskaraفارسیPulaar" + - "suomiføroysktfrançaisWest-FryskGaeilgeGàidhliggalegoગુજરાતીGaelgHaus" + - "aעבריתहिन्दीhrvatskimagyarհայերենIndonesiaIgboꆈꌠꉙíslenskaitaliano日本語" + - "ქართულიGikuyuқазақ тіліkalaallisutខ្មែរಕನ್ನಡ한국어کٲشُرkernewekкыргыз" + - "чаLëtzebuergeschLugandalingálaລາວlietuviųTshilubalatviešuMalagasyма" + - "кедонскиമലയാളംмонголमराठीBahasa MelayuMaltiမြန်မာisiNdebeleनेपालीNe" + - "derlandsnynorsknorsk bokmålOromooଓଡ଼ିଆиронਪੰਜਾਬੀpolskiپښتوportuguêsR" + - "unasimirumantschIkirundiromânăрусскийKinyarwandadavvisámegiellaSängö" + - "සිංහලslovenčinaslovenščinachiShonaSoomaalishqipсрпскиsvenskaKiswah" + - "iliதமிழ்తెలుగుไทยትግርኛlea fakatongaTürkçeئۇيغۇرچەукраїнськаاردوo‘zbek" + - "Tiếng ViệtייִדישÈdè Yorùbá中文isiZuluAghemKipareasturianuƁàsàaIchibemb" + - "aHibenaबड़ोRukigaᏣᎳᎩکوردیی ناوەندیKitaitaZarmaciinedolnoserbšćinaduá" + - "lájoolaKĩembuewondoFilipinofurlanSchwiizertüütschEkegusiiʻŌlelo Hawa" + - "iʻihornjoserbšćinaNdaꞌaKimachameTaqbaylitKikambaChimakondekabuverdia" + - "nuKoyra ciinikakɔKalenjinकोंकणीKishambaarikpaKölschKɨlaangiLakȟólʼiy" + - "apiلۊری شومالیDholuoLuluhiaMaaKĩmĩrũkreol morisienMakuametaʼMUNDAŊما" + - "زرونیKhoekhoegowabShwóŋò ngiembɔɔnThok NathRunyankoreprūsiskanKihor" + - "omboKiruwaсаха тылаKisampurIshisangusenaKoyraboro senniⵜⴰⵛⵍⵃⵉⵜanarâš" + - "kielâKitesoTasawaq senniTamaziɣt n laṭlaṣꕙꔤKyivunjoWalserOlusoganuas" + - "ue粵語ⵜⴰⵎⴰⵣⵉⵖⵜالعربية الرسمية الحديثةазәрбајҹанбосанскиÖsterreichische" + - "s DeutschSchweizer HochdeutschAustralian EnglishCanadian EnglishBrit" + - "ish EnglishAmerican Englishespañol latinoamericanoespañol de Españae" + - "spañol de Méxicoدریfrançais canadienfrançais suisseپنجابیportuguês e" + - "uropeumoldoveneascăTashelḥiytsrpskohrvatskiKingwanaاوزبیکўзбекчаVai简" + - "体中文繁體中文", - []uint16{ // 218 elements + "suomiføroysktfrançaisFryskGaeilgeGàidhliggalegoગુજરાતીGaelgHausaעברי" + + "תहिन्दीhrvatskimagyarհայերենIndonesiaIgboꆈꌠꉙíslenskaitaliano日本語ქართ" + + "ულიGikuyuқазақ тіліkalaallisutខ្មែរಕನ್ನಡ한국어کٲشُرkernewekкыргызчаLë" + + "tzebuergeschLugandalingálaລາວlietuviųTshilubalatviešuMalagasyмакедон" + + "скиമലയാളംмонголमराठीMelayuMaltiမြန်မာisiNdebeleनेपालीNederlandsnyno" + + "rsknorsk bokmålOromooଓଡ଼ିଆиронਪੰਜਾਬੀpolskiپښتوportuguêsRunasimiruman" + + "tschIkirundiromânăрусскийKinyarwandaسنڌيdavvisámegiellaSängöසිංහලslo" + + "venčinaslovenščinachiShonaSoomaalishqipсрпскиsvenskaKiswahiliதமிழ்తె" + + "లుగుтоҷикӣไทยትግርኛTürkmen dililea fakatongaTürkçeтатарئۇيغۇرچەукраї" + + "нськаاردوo‘zbekTiếng ViệtWolofייִדישÈdè Yorùbá中文isiZuluAghemKiparea" + + "sturianuƁàsàaIchibembaHibenaबड़ो𑄌𑄋𑄴𑄟𑄳𑄦RukigaᏣᎳᎩکوردیی ناوەندیKitaita" + + "ZarmaciinedolnoserbšćinaduálájoolaKĩembuewondoFilipinofurlanSchwiize" + + "rtüütschEkegusiiʻŌlelo HawaiʻihornjoserbšćinaNdaꞌaKimachameTaqbaylit" + + "KikambaChimakondekabuverdianuKoyra ciinikakɔKalenjinकोंकणीKishambaar" + + "ikpaKölschKɨlaangiLakȟólʼiyapiلۊری شومالیDholuoLuluhiaMaaKĩmĩrũkreol" + + " morisienMakuametaʼMUNDAŊمازرونیKhoekhoegowabShwóŋò ngiembɔɔnThok Na" + + "thRunyankoreprūsiskanKihoromboKiruwaсаха тылаKisampurIshisangusenaKo" + + "yraboro senniⵜⴰⵛⵍⵃⵉⵜanarâškielâKitesoTasawaq senniTamaziɣt n laṭlaṣꕙ" + + "ꔤKyivunjoWalserOlusoganuasue粵語ⵜⴰⵎⴰⵣⵉⵖⵜالعربية الرسمية الحديثةазәрб" + + "ајҹанбосанскиÖsterreichisches DeutschSchweizer HochdeutschAustralia" + + "n EnglishCanadian EnglishBritish EnglishAmerican Englishespañol lati" + + "noamericanoespañol de Españaespañol de Méxicoدریfrançais canadienfra" + + "nçais suisseپنجابیportuguês europeuTashelḥiytsrpskohrvatskiKingwanaا" + + "وزبیکўзбекчаVai粤语简体中文繁體中文", + []uint16{ // 224 elements // Entry 0 - 3F 0x0000, 0x0009, 0x000d, 0x0019, 0x0027, 0x003c, 0x0047, 0x005b, 0x006d, 0x0076, 0x0085, 0x009d, 0x00a6, 0x00ae, 0x00b5, 0x00c3, 0x00cc, 0x00d3, 0x00d8, 0x00df, 0x00f1, 0x00f8, 0x0108, 0x010f, 0x0118, 0x0120, 0x0125, 0x012c, 0x0136, 0x013c, 0x0141, 0x014a, - 0x0153, 0x015d, 0x0164, 0x016d, 0x0173, 0x0188, 0x018d, 0x0192, - 0x019c, 0x01ae, 0x01b6, 0x01bc, 0x01ca, 0x01d3, 0x01d7, 0x01e0, - 0x01e9, 0x01f1, 0x01fa, 0x020f, 0x0215, 0x0228, 0x0233, 0x0242, - 0x0251, 0x025a, 0x0264, 0x026c, 0x027c, 0x028b, 0x0292, 0x029a, - // Entry 40 - 7F - 0x02a3, 0x02ac, 0x02b4, 0x02bd, 0x02c5, 0x02d9, 0x02eb, 0x02f7, - 0x0306, 0x0313, 0x0318, 0x032a, 0x0334, 0x0346, 0x0350, 0x0357, - 0x0364, 0x036a, 0x0379, 0x0381, 0x0393, 0x0399, 0x03a1, 0x03ab, - 0x03b3, 0x03bc, 0x03c4, 0x03cc, 0x03da, 0x03e5, 0x03f5, 0x03fc, - 0x040b, 0x0416, 0x0423, 0x042b, 0x0433, 0x0438, 0x0444, 0x044b, - 0x0454, 0x0463, 0x0475, 0x047e, 0x048a, 0x0497, 0x049f, 0x04af, - 0x04c3, 0x04cb, 0x04d3, 0x04e1, 0x04ed, 0x04fb, 0x0501, 0x0508, - 0x050d, 0x0513, 0x051c, 0x0524, 0x052d, 0x0533, 0x053f, 0x0545, - // Entry 80 - BF - 0x054e, 0x0569, 0x0570, 0x057a, 0x058a, 0x0591, 0x0596, 0x059d, - 0x05a3, 0x05ab, 0x05b1, 0x05c3, 0x05cb, 0x05dc, 0x05ed, 0x05f4, - 0x05fd, 0x0606, 0x060d, 0x0617, 0x0623, 0x062e, 0x0633, 0x063b, - 0x064d, 0x0656, 0x065b, 0x0662, 0x066b, 0x067a, 0x068f, 0x0695, - 0x069c, 0x069f, 0x06a8, 0x06b6, 0x06bb, 0x06c1, 0x06c8, 0x06d6, - 0x06e3, 0x06f8, 0x0701, 0x070b, 0x0715, 0x071e, 0x0724, 0x0735, - 0x073d, 0x0746, 0x074a, 0x0759, 0x076e, 0x077c, 0x0782, 0x078f, - 0x07a5, 0x07ab, 0x07b3, 0x07b9, 0x07c0, 0x07c6, 0x07cc, 0x07e4, - // Entry C0 - FF - 0x0810, 0x0824, 0x0834, 0x084d, 0x0862, 0x0874, 0x0884, 0x0893, - 0x08a3, 0x08bb, 0x08ce, 0x08e1, 0x08e7, 0x08f9, 0x0909, 0x0915, - 0x0927, 0x0935, 0x0941, 0x094f, 0x0957, 0x0963, 0x0971, 0x0974, - 0x0980, 0x098c, + 0x0153, 0x0158, 0x015f, 0x0168, 0x016e, 0x0183, 0x0188, 0x018d, + 0x0197, 0x01a9, 0x01b1, 0x01b7, 0x01c5, 0x01ce, 0x01d2, 0x01db, + 0x01e4, 0x01ec, 0x01f5, 0x020a, 0x0210, 0x0223, 0x022e, 0x023d, + 0x024c, 0x0255, 0x025f, 0x0267, 0x0277, 0x0286, 0x028d, 0x0295, + // Entry 40 - 7F + 0x029e, 0x02a7, 0x02af, 0x02b8, 0x02c0, 0x02d4, 0x02e6, 0x02f2, + 0x0301, 0x0307, 0x030c, 0x031e, 0x0328, 0x033a, 0x0344, 0x034b, + 0x0358, 0x035e, 0x036d, 0x0375, 0x0387, 0x038d, 0x0395, 0x039f, + 0x03a7, 0x03b0, 0x03b8, 0x03c0, 0x03ce, 0x03d9, 0x03e1, 0x03f1, + 0x03f8, 0x0407, 0x0412, 0x041f, 0x0427, 0x042f, 0x0434, 0x0440, + 0x0447, 0x0450, 0x045f, 0x0471, 0x047d, 0x0486, 0x0492, 0x049f, + 0x04ac, 0x04b4, 0x04be, 0x04ce, 0x04e2, 0x04ea, 0x04f2, 0x0500, + 0x0505, 0x0511, 0x051f, 0x0525, 0x052c, 0x0531, 0x0537, 0x0540, + // Entry 80 - BF + 0x0548, 0x0551, 0x0557, 0x0563, 0x057b, 0x0581, 0x058a, 0x05a5, + 0x05ac, 0x05b6, 0x05c6, 0x05cd, 0x05d2, 0x05d9, 0x05df, 0x05e7, + 0x05ed, 0x05ff, 0x0607, 0x0618, 0x0629, 0x0630, 0x0639, 0x0642, + 0x0649, 0x0653, 0x065f, 0x066a, 0x066f, 0x0677, 0x0689, 0x0692, + 0x0697, 0x069e, 0x06a7, 0x06b6, 0x06cb, 0x06d1, 0x06d8, 0x06db, + 0x06e4, 0x06f2, 0x06f7, 0x06fd, 0x0704, 0x0712, 0x071f, 0x0734, + 0x073d, 0x0747, 0x0751, 0x075a, 0x0760, 0x0771, 0x0779, 0x0782, + 0x0786, 0x0795, 0x07aa, 0x07b8, 0x07be, 0x07cb, 0x07e1, 0x07e7, + // Entry C0 - FF + 0x07ef, 0x07f5, 0x07fc, 0x0802, 0x0808, 0x0820, 0x084c, 0x0860, + 0x0870, 0x0889, 0x089e, 0x08b0, 0x08c0, 0x08cf, 0x08df, 0x08f7, + 0x090a, 0x091d, 0x0923, 0x0935, 0x0945, 0x0951, 0x0963, 0x096f, + 0x097d, 0x0985, 0x0991, 0x099f, 0x09a2, 0x09a8, 0x09b4, 0x09c0, }, }, } -// Total size for self: 4040 bytes (4 KB) +// Total size for self: 4120 bytes (4 KB) -// Total table size 2128615 bytes (2078KiB); checksum: A83731D5 +// Total table size 2284393 bytes (2230KiB); checksum: 63468642 diff --git a/vendor/golang.org/x/text/language/doc.go b/vendor/golang.org/x/text/language/doc.go new file mode 100644 index 0000000..8afecd5 --- /dev/null +++ b/vendor/golang.org/x/text/language/doc.go @@ -0,0 +1,102 @@ +// Copyright 2017 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. + +// Package language implements BCP 47 language tags and related functionality. +// +// The most important function of package language is to match a list of +// user-preferred languages to a list of supported languages. +// It alleviates the developer of dealing with the complexity of this process +// and provides the user with the best experience +// (see https://blog.golang.org/matchlang). +// +// +// Matching preferred against supported languages +// +// A Matcher for an application that supports English, Australian English, +// Danish, and standard Mandarin can be created as follows: +// +// var matcher = language.NewMatcher([]language.Tag{ +// language.English, // The first language is used as fallback. +// language.MustParse("en-AU"), +// language.Danish, +// language.Chinese, +// }) +// +// This list of supported languages is typically implied by the languages for +// which there exists translations of the user interface. +// +// User-preferred languages usually come as a comma-separated list of BCP 47 +// language tags. +// The MatchString finds best matches for such strings: +// +// handler(w http.ResponseWriter, r *http.Request) { +// lang, _ := r.Cookie("lang") +// accept := r.Header.Get("Accept-Language") +// tag, _ := language.MatchStrings(matcher, lang.String(), accept) +// +// // tag should now be used for the initialization of any +// // locale-specific service. +// } +// +// The Matcher's Match method can be used to match Tags directly. +// +// Matchers are aware of the intricacies of equivalence between languages, such +// as deprecated subtags, legacy tags, macro languages, mutual +// intelligibility between scripts and languages, and transparently passing +// BCP 47 user configuration. +// For instance, it will know that a reader of Bokmål Danish can read Norwegian +// and will know that Cantonese ("yue") is a good match for "zh-HK". +// +// +// Using match results +// +// To guarantee a consistent user experience to the user it is important to +// use the same language tag for the selection of any locale-specific services. +// For example, it is utterly confusing to substitute spelled-out numbers +// or dates in one language in text of another language. +// More subtly confusing is using the wrong sorting order or casing +// algorithm for a certain language. +// +// All the packages in x/text that provide locale-specific services +// (e.g. collate, cases) should be initialized with the tag that was +// obtained at the start of an interaction with the user. +// +// Note that Tag that is returned by Match and MatchString may differ from any +// of the supported languages, as it may contain carried over settings from +// the user tags. +// This may be inconvenient when your application has some additional +// locale-specific data for your supported languages. +// Match and MatchString both return the index of the matched supported tag +// to simplify associating such data with the matched tag. +// +// +// Canonicalization +// +// If one uses the Matcher to compare languages one does not need to +// worry about canonicalization. +// +// The meaning of a Tag varies per application. The language package +// therefore delays canonicalization and preserves information as much +// as possible. The Matcher, however, will always take into account that +// two different tags may represent the same language. +// +// By default, only legacy and deprecated tags are converted into their +// canonical equivalent. All other information is preserved. This approach makes +// the confidence scores more accurate and allows matchers to distinguish +// between variants that are otherwise lost. +// +// As a consequence, two tags that should be treated as identical according to +// BCP 47 or CLDR, like "en-Latn" and "en", will be represented differently. The +// Matcher handles such distinctions, though, and is aware of the +// equivalence relations. The CanonType type can be used to alter the +// canonicalization form. +// +// References +// +// BCP 47 - Tags for Identifying Languages http://tools.ietf.org/html/bcp47 +// +package language // import "golang.org/x/text/language" + +// TODO: explanation on how to match languages for your own locale-specific +// service. diff --git a/vendor/golang.org/x/text/language/examples_test.go b/vendor/golang.org/x/text/language/examples_test.go index 05e712d..68caa3f 100644 --- a/vendor/golang.org/x/text/language/examples_test.go +++ b/vendor/golang.org/x/text/language/examples_test.go @@ -6,6 +6,7 @@ package language_test import ( "fmt" + "net/http" "golang.org/x/text/language" ) @@ -161,7 +162,7 @@ func ExampleCompose() { // ja-US // nl-US-u-nu-arabic // nl-1901-u-co-phonebk - // nl-1901-u-nu-arabic + // nl-1901-u-co-phonebk-nu-arabic // und-1901-u-co-phonebk // de-u-co-phonebk // de-1901 @@ -274,7 +275,7 @@ func ExampleMatcher() { fmt.Println("----") - // Croatian speakers will likely understand Serbian written in Latin script. + // Someone specifying sr-Latn is probably fine with getting Croatian. fmt.Println(m.Match(language.Make("sr-Latn"))) // We match SimplifiedChinese, but with Low confidence. @@ -331,11 +332,27 @@ func ExampleMatcher() { // af 3 High // ---- // iw 9 Exact - // iw-IL 8 Exact + // he 10 Exact // ---- // fr-u-cu-frf 2 Exact // fr-u-cu-frf 2 High // en-u-co-phonebk 0 No + + // TODO: "he" should be "he-u-rg-IL High" +} + +func ExampleMatchStrings() { + // languages supported by this service: + matcher := language.NewMatcher([]language.Tag{ + language.English, language.Dutch, language.German, + }) + + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + lang, _ := r.Cookie("lang") + tag, _ := language.MatchStrings(matcher, lang.String(), r.Header.Get("Accept-Language")) + + fmt.Println("User language:", tag) + }) } func ExampleComprehends() { diff --git a/vendor/golang.org/x/text/language/gen.go b/vendor/golang.org/x/text/language/gen.go new file mode 100644 index 0000000..3004eb4 --- /dev/null +++ b/vendor/golang.org/x/text/language/gen.go @@ -0,0 +1,305 @@ +// Copyright 2013 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 ignore + +// Language tag table generator. +// Data read from the web. + +package main + +import ( + "flag" + "fmt" + "io" + "log" + "sort" + "strconv" + "strings" + + "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/language" + "golang.org/x/text/unicode/cldr" +) + +var ( + test = flag.Bool("test", + false, + "test existing tables; can be used to compare web data with package data.") + outputFile = flag.String("output", + "tables.go", + "output file for generated tables") +) + +func main() { + gen.Init() + + w := gen.NewCodeWriter() + defer w.WriteGoFile("tables.go", "language") + + b := newBuilder(w) + gen.WriteCLDRVersion(w) + + b.writeConstants() + b.writeMatchData() +} + +type builder struct { + w *gen.CodeWriter + hw io.Writer // MultiWriter for w and w.Hash + data *cldr.CLDR + supp *cldr.SupplementalData +} + +func (b *builder) langIndex(s string) uint16 { + return uint16(language.MustParseBase(s)) +} + +func (b *builder) regionIndex(s string) int { + return int(language.MustParseRegion(s)) +} + +func (b *builder) scriptIndex(s string) int { + return int(language.MustParseScript(s)) +} + +func newBuilder(w *gen.CodeWriter) *builder { + r := gen.OpenCLDRCoreZip() + defer r.Close() + d := &cldr.Decoder{} + data, err := d.DecodeZip(r) + if err != nil { + log.Fatal(err) + } + b := builder{ + w: w, + hw: io.MultiWriter(w, w.Hash), + data: data, + supp: data.Supplemental(), + } + return &b +} + +// writeConsts computes f(v) for all v in values and writes the results +// as constants named _v to a single constant block. +func (b *builder) writeConsts(f func(string) int, values ...string) { + fmt.Fprintln(b.w, "const (") + for _, v := range values { + fmt.Fprintf(b.w, "\t_%s = %v\n", v, f(v)) + } + fmt.Fprintln(b.w, ")") +} + +// TODO: region inclusion data will probably not be use used in future matchers. + +var langConsts = []string{ + "de", "en", "fr", "it", "mo", "no", "nb", "pt", "sh", "mul", "und", +} + +var scriptConsts = []string{ + "Latn", "Hani", "Hans", "Hant", "Qaaa", "Qaai", "Qabx", "Zinh", "Zyyy", + "Zzzz", +} + +var regionConsts = []string{ + "001", "419", "BR", "CA", "ES", "GB", "MD", "PT", "UK", "US", + "ZZ", "XA", "XC", "XK", // Unofficial tag for Kosovo. +} + +func (b *builder) writeConstants() { + b.writeConsts(func(s string) int { return int(b.langIndex(s)) }, langConsts...) + b.writeConsts(b.regionIndex, regionConsts...) + b.writeConsts(b.scriptIndex, scriptConsts...) +} + +type mutualIntelligibility struct { + want, have uint16 + distance uint8 + oneway bool +} + +type scriptIntelligibility struct { + wantLang, haveLang uint16 + wantScript, haveScript uint8 + distance uint8 + // Always oneway +} + +type regionIntelligibility struct { + lang uint16 // compact language id + script uint8 // 0 means any + group uint8 // 0 means any; if bit 7 is set it means inverse + distance uint8 + // Always twoway. +} + +// writeMatchData writes tables with languages and scripts for which there is +// mutual intelligibility. The data is based on CLDR's languageMatching data. +// Note that we use a different algorithm than the one defined by CLDR and that +// we slightly modify the data. For example, we convert scores to confidence levels. +// We also drop all region-related data as we use a different algorithm to +// determine region equivalence. +func (b *builder) writeMatchData() { + lm := b.supp.LanguageMatching.LanguageMatches + cldr.MakeSlice(&lm).SelectAnyOf("type", "written_new") + + regionHierarchy := map[string][]string{} + for _, g := range b.supp.TerritoryContainment.Group { + regions := strings.Split(g.Contains, " ") + regionHierarchy[g.Type] = append(regionHierarchy[g.Type], regions...) + } + regionToGroups := make([]uint8, language.NumRegions) + + idToIndex := map[string]uint8{} + for i, mv := range lm[0].MatchVariable { + if i > 6 { + log.Fatalf("Too many groups: %d", i) + } + idToIndex[mv.Id] = uint8(i + 1) + // TODO: also handle '-' + for _, r := range strings.Split(mv.Value, "+") { + todo := []string{r} + for k := 0; k < len(todo); k++ { + r := todo[k] + regionToGroups[b.regionIndex(r)] |= 1 << uint8(i) + todo = append(todo, regionHierarchy[r]...) + } + } + } + b.w.WriteVar("regionToGroups", regionToGroups) + + // maps language id to in- and out-of-group region. + paradigmLocales := [][3]uint16{} + locales := strings.Split(lm[0].ParadigmLocales[0].Locales, " ") + for i := 0; i < len(locales); i += 2 { + x := [3]uint16{} + for j := 0; j < 2; j++ { + pc := strings.SplitN(locales[i+j], "-", 2) + x[0] = b.langIndex(pc[0]) + if len(pc) == 2 { + x[1+j] = uint16(b.regionIndex(pc[1])) + } + } + paradigmLocales = append(paradigmLocales, x) + } + b.w.WriteVar("paradigmLocales", paradigmLocales) + + b.w.WriteType(mutualIntelligibility{}) + b.w.WriteType(scriptIntelligibility{}) + b.w.WriteType(regionIntelligibility{}) + + matchLang := []mutualIntelligibility{} + matchScript := []scriptIntelligibility{} + matchRegion := []regionIntelligibility{} + // Convert the languageMatch entries in lists keyed by desired language. + for _, m := range lm[0].LanguageMatch { + // Different versions of CLDR use different separators. + desired := strings.Replace(m.Desired, "-", "_", -1) + supported := strings.Replace(m.Supported, "-", "_", -1) + d := strings.Split(desired, "_") + s := strings.Split(supported, "_") + if len(d) != len(s) { + log.Fatalf("not supported: desired=%q; supported=%q", desired, supported) + continue + } + distance, _ := strconv.ParseInt(m.Distance, 10, 8) + switch len(d) { + case 2: + if desired == supported && desired == "*_*" { + continue + } + // language-script pair. + matchScript = append(matchScript, scriptIntelligibility{ + wantLang: uint16(b.langIndex(d[0])), + haveLang: uint16(b.langIndex(s[0])), + wantScript: uint8(b.scriptIndex(d[1])), + haveScript: uint8(b.scriptIndex(s[1])), + distance: uint8(distance), + }) + if m.Oneway != "true" { + matchScript = append(matchScript, scriptIntelligibility{ + wantLang: uint16(b.langIndex(s[0])), + haveLang: uint16(b.langIndex(d[0])), + wantScript: uint8(b.scriptIndex(s[1])), + haveScript: uint8(b.scriptIndex(d[1])), + distance: uint8(distance), + }) + } + case 1: + if desired == supported && desired == "*" { + continue + } + if distance == 1 { + // nb == no is already handled by macro mapping. Check there + // really is only this case. + if d[0] != "no" || s[0] != "nb" { + log.Fatalf("unhandled equivalence %s == %s", s[0], d[0]) + } + continue + } + // TODO: consider dropping oneway field and just doubling the entry. + matchLang = append(matchLang, mutualIntelligibility{ + want: uint16(b.langIndex(d[0])), + have: uint16(b.langIndex(s[0])), + distance: uint8(distance), + oneway: m.Oneway == "true", + }) + case 3: + if desired == supported && desired == "*_*_*" { + continue + } + if desired != supported { + // This is now supported by CLDR, but only one case, which + // should already be covered by paradigm locales. For instance, + // test case "und, en, en-GU, en-IN, en-GB ; en-ZA ; en-GB" in + // testdata/CLDRLocaleMatcherTest.txt tests this. + if supported != "en_*_GB" { + log.Fatalf("not supported: desired=%q; supported=%q", desired, supported) + } + continue + } + ri := regionIntelligibility{ + lang: b.langIndex(d[0]), + distance: uint8(distance), + } + if d[1] != "*" { + ri.script = uint8(b.scriptIndex(d[1])) + } + switch { + case d[2] == "*": + ri.group = 0x80 // not contained in anything + case strings.HasPrefix(d[2], "$!"): + ri.group = 0x80 + d[2] = "$" + d[2][len("$!"):] + fallthrough + case strings.HasPrefix(d[2], "$"): + ri.group |= idToIndex[d[2]] + } + matchRegion = append(matchRegion, ri) + default: + log.Fatalf("not supported: desired=%q; supported=%q", desired, supported) + } + } + sort.SliceStable(matchLang, func(i, j int) bool { + return matchLang[i].distance < matchLang[j].distance + }) + b.w.WriteComment(` + matchLang holds pairs of langIDs of base languages that are typically + mutually intelligible. Each pair is associated with a confidence and + whether the intelligibility goes one or both ways.`) + b.w.WriteVar("matchLang", matchLang) + + b.w.WriteComment(` + matchScript holds pairs of scriptIDs where readers of one script + can typically also read the other. Each is associated with a confidence.`) + sort.SliceStable(matchScript, func(i, j int) bool { + return matchScript[i].distance < matchScript[j].distance + }) + b.w.WriteVar("matchScript", matchScript) + + sort.SliceStable(matchRegion, func(i, j int) bool { + return matchRegion[i].distance < matchRegion[j].distance + }) + b.w.WriteVar("matchRegion", matchRegion) +} diff --git a/vendor/golang.org/x/text/language/gen_common.go b/vendor/golang.org/x/text/language/gen_common.go deleted file mode 100644 index 83ce180..0000000 --- a/vendor/golang.org/x/text/language/gen_common.go +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2014 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 ignore - -package main - -// This file contains code common to the maketables.go and the package code. - -// langAliasType is the type of an alias in langAliasMap. -type langAliasType int8 - -const ( - langDeprecated langAliasType = iota - langMacro - langLegacy - - langAliasTypeUnknown langAliasType = -1 -) diff --git a/vendor/golang.org/x/text/language/gen_index.go b/vendor/golang.org/x/text/language/gen_index.go deleted file mode 100644 index eef555c..0000000 --- a/vendor/golang.org/x/text/language/gen_index.go +++ /dev/null @@ -1,162 +0,0 @@ -// Copyright 2015 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 ignore - -package main - -// This file generates derivative tables based on the language package itself. - -import ( - "bytes" - "flag" - "fmt" - "io/ioutil" - "log" - "reflect" - "sort" - "strings" - - "golang.org/x/text/internal/gen" - "golang.org/x/text/language" - "golang.org/x/text/unicode/cldr" -) - -var ( - test = flag.Bool("test", false, - "test existing tables; can be used to compare web data with package data.") - - draft = flag.String("draft", - "contributed", - `Minimal draft requirements (approved, contributed, provisional, unconfirmed).`) -) - -func main() { - gen.Init() - - // Read the CLDR zip file. - r := gen.OpenCLDRCoreZip() - defer r.Close() - - d := &cldr.Decoder{} - data, err := d.DecodeZip(r) - if err != nil { - log.Fatalf("DecodeZip: %v", err) - } - - w := gen.NewCodeWriter() - defer func() { - buf := &bytes.Buffer{} - - if _, err = w.WriteGo(buf, "language"); err != nil { - log.Fatalf("Error formatting file index.go: %v", err) - } - - // Since we're generating a table for our own package we need to rewrite - // doing the equivalent of go fmt -r 'language.b -> b'. Using - // bytes.Replace will do. - out := bytes.Replace(buf.Bytes(), []byte("language."), nil, -1) - if err := ioutil.WriteFile("index.go", out, 0600); err != nil { - log.Fatalf("Could not create file index.go: %v", err) - } - }() - - m := map[language.Tag]bool{} - for _, lang := range data.Locales() { - // We include all locales unconditionally to be consistent with en_US. - // We want en_US, even though it has no data associated with it. - - // TODO: put any of the languages for which no data exists at the end - // of the index. This allows all components based on ICU to use that - // as the cutoff point. - // if x := data.RawLDML(lang); false || - // x.LocaleDisplayNames != nil || - // x.Characters != nil || - // x.Delimiters != nil || - // x.Measurement != nil || - // x.Dates != nil || - // x.Numbers != nil || - // x.Units != nil || - // x.ListPatterns != nil || - // x.Collations != nil || - // x.Segmentations != nil || - // x.Rbnf != nil || - // x.Annotations != nil || - // x.Metadata != nil { - - // TODO: support POSIX natively, albeit non-standard. - tag := language.Make(strings.Replace(lang, "_POSIX", "-u-va-posix", 1)) - m[tag] = true - // } - } - // Include locales for plural rules, which uses a different structure. - for _, plurals := range data.Supplemental().Plurals { - for _, rules := range plurals.PluralRules { - for _, lang := range strings.Split(rules.Locales, " ") { - m[language.Make(lang)] = true - } - } - } - - var core, special []language.Tag - - for t := range m { - if x := t.Extensions(); len(x) != 0 && fmt.Sprint(x) != "[u-va-posix]" { - log.Fatalf("Unexpected extension %v in %v", x, t) - } - if len(t.Variants()) == 0 && len(t.Extensions()) == 0 { - core = append(core, t) - } else { - special = append(special, t) - } - } - - w.WriteComment(` - NumCompactTags is the number of common tags. The maximum tag is - NumCompactTags-1.`) - w.WriteConst("NumCompactTags", len(core)+len(special)) - - sort.Sort(byAlpha(special)) - w.WriteVar("specialTags", special) - - // TODO: order by frequency? - sort.Sort(byAlpha(core)) - - // Size computations are just an estimate. - w.Size += int(reflect.TypeOf(map[uint32]uint16{}).Size()) - w.Size += len(core) * 6 // size of uint32 and uint16 - - fmt.Fprintln(w) - fmt.Fprintln(w, "var coreTags = map[uint32]uint16{") - fmt.Fprintln(w, "0x0: 0, // und") - i := len(special) + 1 // Und and special tags already written. - for _, t := range core { - if t == language.Und { - continue - } - fmt.Fprint(w.Hash, t, i) - b, s, r := t.Raw() - fmt.Fprintf(w, "0x%s%s%s: %d, // %s\n", - getIndex(b, 3), // 3 is enough as it is guaranteed to be a compact number - getIndex(s, 2), - getIndex(r, 3), - i, t) - i++ - } - fmt.Fprintln(w, "}") -} - -// getIndex prints the subtag type and extracts its index of size nibble. -// If the index is less than n nibbles, the result is prefixed with 0s. -func getIndex(x interface{}, n int) string { - s := fmt.Sprintf("%#v", x) // s is of form Type{typeID: 0x00} - s = s[strings.Index(s, "0x")+2 : len(s)-1] - return strings.Repeat("0", n-len(s)) + s -} - -type byAlpha []language.Tag - -func (a byAlpha) Len() int { return len(a) } -func (a byAlpha) Swap(i, j int) { a[i], a[j] = a[j], a[i] } -func (a byAlpha) Less(i, j int) bool { return a[i].String() < a[j].String() } diff --git a/vendor/golang.org/x/text/language/httpexample_test.go b/vendor/golang.org/x/text/language/httpexample_test.go index 40d0663..03c0ab9 100644 --- a/vendor/golang.org/x/text/language/httpexample_test.go +++ b/vendor/golang.org/x/text/language/httpexample_test.go @@ -24,7 +24,7 @@ func handler(w http.ResponseWriter, r *http.Request) { t, q, err := language.ParseAcceptLanguage(r.Header.Get("Accept-Language")) // We ignore the error: the default language will be selected for t == nil. tag, _, _ := matcher.Match(t...) - fmt.Printf("%5v (t: %6v; q: %3v; err: %v)\n", tag, t, q, err) + fmt.Printf("%17v (t: %6v; q: %3v; err: %v)\n", tag, t, q, err) } func ExampleParseAcceptLanguage() { @@ -41,8 +41,8 @@ func ExampleParseAcceptLanguage() { } // Output: - // en-GB (t: [ en en-US nn]; q: [ 1 0.8 0.3]; err: ) - // en-GB (t: [ gsw en-US en]; q: [ 1 0.8 0.7]; err: ) - // de (t: [ gsw nl da]; q: [ 1 1 1]; err: ) - // en-GB (t: []; q: []; err: language: tag is not well-formed) + // en-GB (t: [ en en-US nn]; q: [ 1 0.8 0.3]; err: ) + // en-GB-u-rg-uszzzz (t: [ gsw en-US en]; q: [ 1 0.8 0.7]; err: ) + // de (t: [ gsw nl da]; q: [ 1 1 1]; err: ) + // en-GB (t: []; q: []; err: language: tag is not well-formed) } diff --git a/vendor/golang.org/x/text/language/index.go b/vendor/golang.org/x/text/language/index.go deleted file mode 100644 index b370ffa..0000000 --- a/vendor/golang.org/x/text/language/index.go +++ /dev/null @@ -1,767 +0,0 @@ -// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. - -package language - -// NumCompactTags is the number of common tags. The maximum tag is -// NumCompactTags-1. -const NumCompactTags = 752 - -var specialTags = []Tag{ // 2 elements - 0: {lang: 0xd5, region: 0x6d, script: 0x0, pVariant: 0x5, pExt: 0xe, str: "ca-ES-valencia"}, - 1: {lang: 0x134, region: 0x134, script: 0x0, pVariant: 0x5, pExt: 0x5, str: "en-US-u-va-posix"}, -} // Size: 72 bytes - -var coreTags = map[uint32]uint16{ - 0x0: 0, // und - 0x01500000: 3, // af - 0x015000d1: 4, // af-NA - 0x01500160: 5, // af-ZA - 0x01b00000: 6, // agq - 0x01b00051: 7, // agq-CM - 0x02000000: 8, // ak - 0x0200007f: 9, // ak-GH - 0x02600000: 10, // am - 0x0260006e: 11, // am-ET - 0x03900000: 12, // ar - 0x03900001: 13, // ar-001 - 0x03900022: 14, // ar-AE - 0x03900038: 15, // ar-BH - 0x03900061: 16, // ar-DJ - 0x03900066: 17, // ar-DZ - 0x0390006a: 18, // ar-EG - 0x0390006b: 19, // ar-EH - 0x0390006c: 20, // ar-ER - 0x03900096: 21, // ar-IL - 0x0390009a: 22, // ar-IQ - 0x039000a0: 23, // ar-JO - 0x039000a7: 24, // ar-KM - 0x039000ab: 25, // ar-KW - 0x039000af: 26, // ar-LB - 0x039000b8: 27, // ar-LY - 0x039000b9: 28, // ar-MA - 0x039000c8: 29, // ar-MR - 0x039000e0: 30, // ar-OM - 0x039000ec: 31, // ar-PS - 0x039000f2: 32, // ar-QA - 0x03900107: 33, // ar-SA - 0x0390010a: 34, // ar-SD - 0x03900114: 35, // ar-SO - 0x03900116: 36, // ar-SS - 0x0390011b: 37, // ar-SY - 0x0390011f: 38, // ar-TD - 0x03900127: 39, // ar-TN - 0x0390015d: 40, // ar-YE - 0x03f00000: 41, // ars - 0x04200000: 42, // as - 0x04200098: 43, // as-IN - 0x04300000: 44, // asa - 0x0430012e: 45, // asa-TZ - 0x04700000: 46, // ast - 0x0470006d: 47, // ast-ES - 0x05700000: 48, // az - 0x0571e000: 49, // az-Cyrl - 0x0571e031: 50, // az-Cyrl-AZ - 0x05752000: 51, // az-Latn - 0x05752031: 52, // az-Latn-AZ - 0x05d00000: 53, // bas - 0x05d00051: 54, // bas-CM - 0x07000000: 55, // be - 0x07000046: 56, // be-BY - 0x07400000: 57, // bem - 0x07400161: 58, // bem-ZM - 0x07800000: 59, // bez - 0x0780012e: 60, // bez-TZ - 0x07d00000: 61, // bg - 0x07d00037: 62, // bg-BG - 0x08100000: 63, // bh - 0x09e00000: 64, // bm - 0x09e000c2: 65, // bm-ML - 0x0a300000: 66, // bn - 0x0a300034: 67, // bn-BD - 0x0a300098: 68, // bn-IN - 0x0a700000: 69, // bo - 0x0a700052: 70, // bo-CN - 0x0a700098: 71, // bo-IN - 0x0b000000: 72, // br - 0x0b000077: 73, // br-FR - 0x0b300000: 74, // brx - 0x0b300098: 75, // brx-IN - 0x0b500000: 76, // bs - 0x0b51e000: 77, // bs-Cyrl - 0x0b51e032: 78, // bs-Cyrl-BA - 0x0b552000: 79, // bs-Latn - 0x0b552032: 80, // bs-Latn-BA - 0x0d500000: 81, // ca - 0x0d500021: 82, // ca-AD - 0x0d50006d: 83, // ca-ES - 0x0d500077: 84, // ca-FR - 0x0d50009d: 85, // ca-IT - 0x0da00000: 86, // ce - 0x0da00105: 87, // ce-RU - 0x0dd00000: 88, // cgg - 0x0dd00130: 89, // cgg-UG - 0x0e300000: 90, // chr - 0x0e300134: 91, // chr-US - 0x0e700000: 92, // ckb - 0x0e70009a: 93, // ckb-IQ - 0x0e70009b: 94, // ckb-IR - 0x0f600000: 95, // cs - 0x0f60005d: 96, // cs-CZ - 0x0fa00000: 97, // cu - 0x0fa00105: 98, // cu-RU - 0x0fc00000: 99, // cy - 0x0fc0007a: 100, // cy-GB - 0x0fd00000: 101, // da - 0x0fd00062: 102, // da-DK - 0x0fd00081: 103, // da-GL - 0x10400000: 104, // dav - 0x104000a3: 105, // dav-KE - 0x10900000: 106, // de - 0x1090002d: 107, // de-AT - 0x10900035: 108, // de-BE - 0x1090004d: 109, // de-CH - 0x1090005f: 110, // de-DE - 0x1090009d: 111, // de-IT - 0x109000b1: 112, // de-LI - 0x109000b6: 113, // de-LU - 0x11300000: 114, // dje - 0x113000d3: 115, // dje-NE - 0x11b00000: 116, // dsb - 0x11b0005f: 117, // dsb-DE - 0x12000000: 118, // dua - 0x12000051: 119, // dua-CM - 0x12400000: 120, // dv - 0x12700000: 121, // dyo - 0x12700113: 122, // dyo-SN - 0x12900000: 123, // dz - 0x12900042: 124, // dz-BT - 0x12b00000: 125, // ebu - 0x12b000a3: 126, // ebu-KE - 0x12c00000: 127, // ee - 0x12c0007f: 128, // ee-GH - 0x12c00121: 129, // ee-TG - 0x13100000: 130, // el - 0x1310005c: 131, // el-CY - 0x13100086: 132, // el-GR - 0x13400000: 133, // en - 0x13400001: 134, // en-001 - 0x1340001a: 135, // en-150 - 0x13400024: 136, // en-AG - 0x13400025: 137, // en-AI - 0x1340002c: 138, // en-AS - 0x1340002d: 139, // en-AT - 0x1340002e: 140, // en-AU - 0x13400033: 141, // en-BB - 0x13400035: 142, // en-BE - 0x13400039: 143, // en-BI - 0x1340003c: 144, // en-BM - 0x13400041: 145, // en-BS - 0x13400045: 146, // en-BW - 0x13400047: 147, // en-BZ - 0x13400048: 148, // en-CA - 0x13400049: 149, // en-CC - 0x1340004d: 150, // en-CH - 0x1340004f: 151, // en-CK - 0x13400051: 152, // en-CM - 0x1340005b: 153, // en-CX - 0x1340005c: 154, // en-CY - 0x1340005f: 155, // en-DE - 0x13400060: 156, // en-DG - 0x13400062: 157, // en-DK - 0x13400063: 158, // en-DM - 0x1340006c: 159, // en-ER - 0x13400071: 160, // en-FI - 0x13400072: 161, // en-FJ - 0x13400073: 162, // en-FK - 0x13400074: 163, // en-FM - 0x1340007a: 164, // en-GB - 0x1340007b: 165, // en-GD - 0x1340007e: 166, // en-GG - 0x1340007f: 167, // en-GH - 0x13400080: 168, // en-GI - 0x13400082: 169, // en-GM - 0x13400089: 170, // en-GU - 0x1340008b: 171, // en-GY - 0x1340008c: 172, // en-HK - 0x13400095: 173, // en-IE - 0x13400096: 174, // en-IL - 0x13400097: 175, // en-IM - 0x13400098: 176, // en-IN - 0x13400099: 177, // en-IO - 0x1340009e: 178, // en-JE - 0x1340009f: 179, // en-JM - 0x134000a3: 180, // en-KE - 0x134000a6: 181, // en-KI - 0x134000a8: 182, // en-KN - 0x134000ac: 183, // en-KY - 0x134000b0: 184, // en-LC - 0x134000b3: 185, // en-LR - 0x134000b4: 186, // en-LS - 0x134000be: 187, // en-MG - 0x134000bf: 188, // en-MH - 0x134000c5: 189, // en-MO - 0x134000c6: 190, // en-MP - 0x134000c9: 191, // en-MS - 0x134000ca: 192, // en-MT - 0x134000cb: 193, // en-MU - 0x134000cd: 194, // en-MW - 0x134000cf: 195, // en-MY - 0x134000d1: 196, // en-NA - 0x134000d4: 197, // en-NF - 0x134000d5: 198, // en-NG - 0x134000d8: 199, // en-NL - 0x134000dc: 200, // en-NR - 0x134000de: 201, // en-NU - 0x134000df: 202, // en-NZ - 0x134000e5: 203, // en-PG - 0x134000e6: 204, // en-PH - 0x134000e7: 205, // en-PK - 0x134000ea: 206, // en-PN - 0x134000eb: 207, // en-PR - 0x134000ef: 208, // en-PW - 0x13400106: 209, // en-RW - 0x13400108: 210, // en-SB - 0x13400109: 211, // en-SC - 0x1340010a: 212, // en-SD - 0x1340010b: 213, // en-SE - 0x1340010c: 214, // en-SG - 0x1340010d: 215, // en-SH - 0x1340010e: 216, // en-SI - 0x13400111: 217, // en-SL - 0x13400116: 218, // en-SS - 0x1340011a: 219, // en-SX - 0x1340011c: 220, // en-SZ - 0x1340011e: 221, // en-TC - 0x13400124: 222, // en-TK - 0x13400128: 223, // en-TO - 0x1340012b: 224, // en-TT - 0x1340012c: 225, // en-TV - 0x1340012e: 226, // en-TZ - 0x13400130: 227, // en-UG - 0x13400132: 228, // en-UM - 0x13400134: 229, // en-US - 0x13400138: 230, // en-VC - 0x1340013b: 231, // en-VG - 0x1340013c: 232, // en-VI - 0x1340013e: 233, // en-VU - 0x13400141: 234, // en-WS - 0x13400160: 235, // en-ZA - 0x13400161: 236, // en-ZM - 0x13400163: 237, // en-ZW - 0x13700000: 238, // eo - 0x13700001: 239, // eo-001 - 0x13900000: 240, // es - 0x1390001e: 241, // es-419 - 0x1390002b: 242, // es-AR - 0x1390003e: 243, // es-BO - 0x13900040: 244, // es-BR - 0x13900050: 245, // es-CL - 0x13900053: 246, // es-CO - 0x13900055: 247, // es-CR - 0x13900058: 248, // es-CU - 0x13900064: 249, // es-DO - 0x13900067: 250, // es-EA - 0x13900068: 251, // es-EC - 0x1390006d: 252, // es-ES - 0x13900085: 253, // es-GQ - 0x13900088: 254, // es-GT - 0x1390008e: 255, // es-HN - 0x13900093: 256, // es-IC - 0x139000ce: 257, // es-MX - 0x139000d7: 258, // es-NI - 0x139000e1: 259, // es-PA - 0x139000e3: 260, // es-PE - 0x139000e6: 261, // es-PH - 0x139000eb: 262, // es-PR - 0x139000f0: 263, // es-PY - 0x13900119: 264, // es-SV - 0x13900134: 265, // es-US - 0x13900135: 266, // es-UY - 0x1390013a: 267, // es-VE - 0x13b00000: 268, // et - 0x13b00069: 269, // et-EE - 0x14000000: 270, // eu - 0x1400006d: 271, // eu-ES - 0x14100000: 272, // ewo - 0x14100051: 273, // ewo-CM - 0x14300000: 274, // fa - 0x14300023: 275, // fa-AF - 0x1430009b: 276, // fa-IR - 0x14900000: 277, // ff - 0x14900051: 278, // ff-CM - 0x14900083: 279, // ff-GN - 0x149000c8: 280, // ff-MR - 0x14900113: 281, // ff-SN - 0x14c00000: 282, // fi - 0x14c00071: 283, // fi-FI - 0x14e00000: 284, // fil - 0x14e000e6: 285, // fil-PH - 0x15300000: 286, // fo - 0x15300062: 287, // fo-DK - 0x15300075: 288, // fo-FO - 0x15900000: 289, // fr - 0x15900035: 290, // fr-BE - 0x15900036: 291, // fr-BF - 0x15900039: 292, // fr-BI - 0x1590003a: 293, // fr-BJ - 0x1590003b: 294, // fr-BL - 0x15900048: 295, // fr-CA - 0x1590004a: 296, // fr-CD - 0x1590004b: 297, // fr-CF - 0x1590004c: 298, // fr-CG - 0x1590004d: 299, // fr-CH - 0x1590004e: 300, // fr-CI - 0x15900051: 301, // fr-CM - 0x15900061: 302, // fr-DJ - 0x15900066: 303, // fr-DZ - 0x15900077: 304, // fr-FR - 0x15900079: 305, // fr-GA - 0x1590007d: 306, // fr-GF - 0x15900083: 307, // fr-GN - 0x15900084: 308, // fr-GP - 0x15900085: 309, // fr-GQ - 0x15900090: 310, // fr-HT - 0x159000a7: 311, // fr-KM - 0x159000b6: 312, // fr-LU - 0x159000b9: 313, // fr-MA - 0x159000ba: 314, // fr-MC - 0x159000bd: 315, // fr-MF - 0x159000be: 316, // fr-MG - 0x159000c2: 317, // fr-ML - 0x159000c7: 318, // fr-MQ - 0x159000c8: 319, // fr-MR - 0x159000cb: 320, // fr-MU - 0x159000d2: 321, // fr-NC - 0x159000d3: 322, // fr-NE - 0x159000e4: 323, // fr-PF - 0x159000e9: 324, // fr-PM - 0x15900101: 325, // fr-RE - 0x15900106: 326, // fr-RW - 0x15900109: 327, // fr-SC - 0x15900113: 328, // fr-SN - 0x1590011b: 329, // fr-SY - 0x1590011f: 330, // fr-TD - 0x15900121: 331, // fr-TG - 0x15900127: 332, // fr-TN - 0x1590013e: 333, // fr-VU - 0x1590013f: 334, // fr-WF - 0x1590015e: 335, // fr-YT - 0x16400000: 336, // fur - 0x1640009d: 337, // fur-IT - 0x16800000: 338, // fy - 0x168000d8: 339, // fy-NL - 0x16900000: 340, // ga - 0x16900095: 341, // ga-IE - 0x17800000: 342, // gd - 0x1780007a: 343, // gd-GB - 0x18a00000: 344, // gl - 0x18a0006d: 345, // gl-ES - 0x19c00000: 346, // gsw - 0x19c0004d: 347, // gsw-CH - 0x19c00077: 348, // gsw-FR - 0x19c000b1: 349, // gsw-LI - 0x19d00000: 350, // gu - 0x19d00098: 351, // gu-IN - 0x1a200000: 352, // guw - 0x1a400000: 353, // guz - 0x1a4000a3: 354, // guz-KE - 0x1a500000: 355, // gv - 0x1a500097: 356, // gv-IM - 0x1ad00000: 357, // ha - 0x1ad0007f: 358, // ha-GH - 0x1ad000d3: 359, // ha-NE - 0x1ad000d5: 360, // ha-NG - 0x1b100000: 361, // haw - 0x1b100134: 362, // haw-US - 0x1b500000: 363, // he - 0x1b500096: 364, // he-IL - 0x1b700000: 365, // hi - 0x1b700098: 366, // hi-IN - 0x1ca00000: 367, // hr - 0x1ca00032: 368, // hr-BA - 0x1ca0008f: 369, // hr-HR - 0x1cb00000: 370, // hsb - 0x1cb0005f: 371, // hsb-DE - 0x1ce00000: 372, // hu - 0x1ce00091: 373, // hu-HU - 0x1d000000: 374, // hy - 0x1d000027: 375, // hy-AM - 0x1da00000: 376, // id - 0x1da00094: 377, // id-ID - 0x1df00000: 378, // ig - 0x1df000d5: 379, // ig-NG - 0x1e200000: 380, // ii - 0x1e200052: 381, // ii-CN - 0x1f000000: 382, // is - 0x1f00009c: 383, // is-IS - 0x1f100000: 384, // it - 0x1f10004d: 385, // it-CH - 0x1f10009d: 386, // it-IT - 0x1f100112: 387, // it-SM - 0x1f200000: 388, // iu - 0x1f800000: 389, // ja - 0x1f8000a1: 390, // ja-JP - 0x1fb00000: 391, // jbo - 0x1ff00000: 392, // jgo - 0x1ff00051: 393, // jgo-CM - 0x20200000: 394, // jmc - 0x2020012e: 395, // jmc-TZ - 0x20600000: 396, // jv - 0x20800000: 397, // ka - 0x2080007c: 398, // ka-GE - 0x20a00000: 399, // kab - 0x20a00066: 400, // kab-DZ - 0x20e00000: 401, // kaj - 0x20f00000: 402, // kam - 0x20f000a3: 403, // kam-KE - 0x21700000: 404, // kcg - 0x21b00000: 405, // kde - 0x21b0012e: 406, // kde-TZ - 0x21f00000: 407, // kea - 0x21f00059: 408, // kea-CV - 0x22c00000: 409, // khq - 0x22c000c2: 410, // khq-ML - 0x23100000: 411, // ki - 0x231000a3: 412, // ki-KE - 0x23a00000: 413, // kk - 0x23a000ad: 414, // kk-KZ - 0x23c00000: 415, // kkj - 0x23c00051: 416, // kkj-CM - 0x23d00000: 417, // kl - 0x23d00081: 418, // kl-GL - 0x23e00000: 419, // kln - 0x23e000a3: 420, // kln-KE - 0x24200000: 421, // km - 0x242000a5: 422, // km-KH - 0x24900000: 423, // kn - 0x24900098: 424, // kn-IN - 0x24b00000: 425, // ko - 0x24b000a9: 426, // ko-KP - 0x24b000aa: 427, // ko-KR - 0x24d00000: 428, // kok - 0x24d00098: 429, // kok-IN - 0x26100000: 430, // ks - 0x26100098: 431, // ks-IN - 0x26200000: 432, // ksb - 0x2620012e: 433, // ksb-TZ - 0x26400000: 434, // ksf - 0x26400051: 435, // ksf-CM - 0x26500000: 436, // ksh - 0x2650005f: 437, // ksh-DE - 0x26b00000: 438, // ku - 0x27800000: 439, // kw - 0x2780007a: 440, // kw-GB - 0x28100000: 441, // ky - 0x281000a4: 442, // ky-KG - 0x28800000: 443, // lag - 0x2880012e: 444, // lag-TZ - 0x28c00000: 445, // lb - 0x28c000b6: 446, // lb-LU - 0x29a00000: 447, // lg - 0x29a00130: 448, // lg-UG - 0x2a600000: 449, // lkt - 0x2a600134: 450, // lkt-US - 0x2ac00000: 451, // ln - 0x2ac00029: 452, // ln-AO - 0x2ac0004a: 453, // ln-CD - 0x2ac0004b: 454, // ln-CF - 0x2ac0004c: 455, // ln-CG - 0x2af00000: 456, // lo - 0x2af000ae: 457, // lo-LA - 0x2b600000: 458, // lrc - 0x2b60009a: 459, // lrc-IQ - 0x2b60009b: 460, // lrc-IR - 0x2b700000: 461, // lt - 0x2b7000b5: 462, // lt-LT - 0x2b900000: 463, // lu - 0x2b90004a: 464, // lu-CD - 0x2bb00000: 465, // luo - 0x2bb000a3: 466, // luo-KE - 0x2bc00000: 467, // luy - 0x2bc000a3: 468, // luy-KE - 0x2be00000: 469, // lv - 0x2be000b7: 470, // lv-LV - 0x2c800000: 471, // mas - 0x2c8000a3: 472, // mas-KE - 0x2c80012e: 473, // mas-TZ - 0x2e000000: 474, // mer - 0x2e0000a3: 475, // mer-KE - 0x2e400000: 476, // mfe - 0x2e4000cb: 477, // mfe-MU - 0x2e800000: 478, // mg - 0x2e8000be: 479, // mg-MG - 0x2e900000: 480, // mgh - 0x2e9000d0: 481, // mgh-MZ - 0x2eb00000: 482, // mgo - 0x2eb00051: 483, // mgo-CM - 0x2f600000: 484, // mk - 0x2f6000c1: 485, // mk-MK - 0x2fb00000: 486, // ml - 0x2fb00098: 487, // ml-IN - 0x30200000: 488, // mn - 0x302000c4: 489, // mn-MN - 0x31200000: 490, // mr - 0x31200098: 491, // mr-IN - 0x31600000: 492, // ms - 0x3160003d: 493, // ms-BN - 0x316000cf: 494, // ms-MY - 0x3160010c: 495, // ms-SG - 0x31700000: 496, // mt - 0x317000ca: 497, // mt-MT - 0x31c00000: 498, // mua - 0x31c00051: 499, // mua-CM - 0x32800000: 500, // my - 0x328000c3: 501, // my-MM - 0x33100000: 502, // mzn - 0x3310009b: 503, // mzn-IR - 0x33800000: 504, // nah - 0x33c00000: 505, // naq - 0x33c000d1: 506, // naq-NA - 0x33e00000: 507, // nb - 0x33e000d9: 508, // nb-NO - 0x33e0010f: 509, // nb-SJ - 0x34500000: 510, // nd - 0x34500163: 511, // nd-ZW - 0x34700000: 512, // nds - 0x3470005f: 513, // nds-DE - 0x347000d8: 514, // nds-NL - 0x34800000: 515, // ne - 0x34800098: 516, // ne-IN - 0x348000da: 517, // ne-NP - 0x35e00000: 518, // nl - 0x35e0002f: 519, // nl-AW - 0x35e00035: 520, // nl-BE - 0x35e0003f: 521, // nl-BQ - 0x35e0005a: 522, // nl-CW - 0x35e000d8: 523, // nl-NL - 0x35e00115: 524, // nl-SR - 0x35e0011a: 525, // nl-SX - 0x35f00000: 526, // nmg - 0x35f00051: 527, // nmg-CM - 0x36100000: 528, // nn - 0x361000d9: 529, // nn-NO - 0x36300000: 530, // nnh - 0x36300051: 531, // nnh-CM - 0x36600000: 532, // no - 0x36c00000: 533, // nqo - 0x36d00000: 534, // nr - 0x37100000: 535, // nso - 0x37700000: 536, // nus - 0x37700116: 537, // nus-SS - 0x37e00000: 538, // ny - 0x38000000: 539, // nyn - 0x38000130: 540, // nyn-UG - 0x38700000: 541, // om - 0x3870006e: 542, // om-ET - 0x387000a3: 543, // om-KE - 0x38c00000: 544, // or - 0x38c00098: 545, // or-IN - 0x38f00000: 546, // os - 0x38f0007c: 547, // os-GE - 0x38f00105: 548, // os-RU - 0x39400000: 549, // pa - 0x39405000: 550, // pa-Arab - 0x394050e7: 551, // pa-Arab-PK - 0x3942f000: 552, // pa-Guru - 0x3942f098: 553, // pa-Guru-IN - 0x39800000: 554, // pap - 0x3aa00000: 555, // pl - 0x3aa000e8: 556, // pl-PL - 0x3b400000: 557, // prg - 0x3b400001: 558, // prg-001 - 0x3b500000: 559, // ps - 0x3b500023: 560, // ps-AF - 0x3b700000: 561, // pt - 0x3b700029: 562, // pt-AO - 0x3b700040: 563, // pt-BR - 0x3b70004d: 564, // pt-CH - 0x3b700059: 565, // pt-CV - 0x3b700085: 566, // pt-GQ - 0x3b70008a: 567, // pt-GW - 0x3b7000b6: 568, // pt-LU - 0x3b7000c5: 569, // pt-MO - 0x3b7000d0: 570, // pt-MZ - 0x3b7000ed: 571, // pt-PT - 0x3b700117: 572, // pt-ST - 0x3b700125: 573, // pt-TL - 0x3bb00000: 574, // qu - 0x3bb0003e: 575, // qu-BO - 0x3bb00068: 576, // qu-EC - 0x3bb000e3: 577, // qu-PE - 0x3cb00000: 578, // rm - 0x3cb0004d: 579, // rm-CH - 0x3d000000: 580, // rn - 0x3d000039: 581, // rn-BI - 0x3d300000: 582, // ro - 0x3d3000bb: 583, // ro-MD - 0x3d300103: 584, // ro-RO - 0x3d500000: 585, // rof - 0x3d50012e: 586, // rof-TZ - 0x3d900000: 587, // ru - 0x3d900046: 588, // ru-BY - 0x3d9000a4: 589, // ru-KG - 0x3d9000ad: 590, // ru-KZ - 0x3d9000bb: 591, // ru-MD - 0x3d900105: 592, // ru-RU - 0x3d90012f: 593, // ru-UA - 0x3dc00000: 594, // rw - 0x3dc00106: 595, // rw-RW - 0x3dd00000: 596, // rwk - 0x3dd0012e: 597, // rwk-TZ - 0x3e200000: 598, // sah - 0x3e200105: 599, // sah-RU - 0x3e300000: 600, // saq - 0x3e3000a3: 601, // saq-KE - 0x3e900000: 602, // sbp - 0x3e90012e: 603, // sbp-TZ - 0x3f200000: 604, // sdh - 0x3f300000: 605, // se - 0x3f300071: 606, // se-FI - 0x3f3000d9: 607, // se-NO - 0x3f30010b: 608, // se-SE - 0x3f500000: 609, // seh - 0x3f5000d0: 610, // seh-MZ - 0x3f700000: 611, // ses - 0x3f7000c2: 612, // ses-ML - 0x3f800000: 613, // sg - 0x3f80004b: 614, // sg-CF - 0x3fe00000: 615, // shi - 0x3fe52000: 616, // shi-Latn - 0x3fe520b9: 617, // shi-Latn-MA - 0x3fed2000: 618, // shi-Tfng - 0x3fed20b9: 619, // shi-Tfng-MA - 0x40200000: 620, // si - 0x402000b2: 621, // si-LK - 0x40800000: 622, // sk - 0x40800110: 623, // sk-SK - 0x40c00000: 624, // sl - 0x40c0010e: 625, // sl-SI - 0x41200000: 626, // sma - 0x41300000: 627, // smi - 0x41400000: 628, // smj - 0x41500000: 629, // smn - 0x41500071: 630, // smn-FI - 0x41800000: 631, // sms - 0x41900000: 632, // sn - 0x41900163: 633, // sn-ZW - 0x41f00000: 634, // so - 0x41f00061: 635, // so-DJ - 0x41f0006e: 636, // so-ET - 0x41f000a3: 637, // so-KE - 0x41f00114: 638, // so-SO - 0x42700000: 639, // sq - 0x42700026: 640, // sq-AL - 0x427000c1: 641, // sq-MK - 0x4270014c: 642, // sq-XK - 0x42800000: 643, // sr - 0x4281e000: 644, // sr-Cyrl - 0x4281e032: 645, // sr-Cyrl-BA - 0x4281e0bc: 646, // sr-Cyrl-ME - 0x4281e104: 647, // sr-Cyrl-RS - 0x4281e14c: 648, // sr-Cyrl-XK - 0x42852000: 649, // sr-Latn - 0x42852032: 650, // sr-Latn-BA - 0x428520bc: 651, // sr-Latn-ME - 0x42852104: 652, // sr-Latn-RS - 0x4285214c: 653, // sr-Latn-XK - 0x42d00000: 654, // ss - 0x43000000: 655, // ssy - 0x43100000: 656, // st - 0x43a00000: 657, // sv - 0x43a00030: 658, // sv-AX - 0x43a00071: 659, // sv-FI - 0x43a0010b: 660, // sv-SE - 0x43b00000: 661, // sw - 0x43b0004a: 662, // sw-CD - 0x43b000a3: 663, // sw-KE - 0x43b0012e: 664, // sw-TZ - 0x43b00130: 665, // sw-UG - 0x44400000: 666, // syr - 0x44600000: 667, // ta - 0x44600098: 668, // ta-IN - 0x446000b2: 669, // ta-LK - 0x446000cf: 670, // ta-MY - 0x4460010c: 671, // ta-SG - 0x45700000: 672, // te - 0x45700098: 673, // te-IN - 0x45a00000: 674, // teo - 0x45a000a3: 675, // teo-KE - 0x45a00130: 676, // teo-UG - 0x46100000: 677, // th - 0x46100122: 678, // th-TH - 0x46500000: 679, // ti - 0x4650006c: 680, // ti-ER - 0x4650006e: 681, // ti-ET - 0x46700000: 682, // tig - 0x46c00000: 683, // tk - 0x46c00126: 684, // tk-TM - 0x47600000: 685, // tn - 0x47800000: 686, // to - 0x47800128: 687, // to-TO - 0x48000000: 688, // tr - 0x4800005c: 689, // tr-CY - 0x4800012a: 690, // tr-TR - 0x48400000: 691, // ts - 0x49a00000: 692, // twq - 0x49a000d3: 693, // twq-NE - 0x49f00000: 694, // tzm - 0x49f000b9: 695, // tzm-MA - 0x4a200000: 696, // ug - 0x4a200052: 697, // ug-CN - 0x4a400000: 698, // uk - 0x4a40012f: 699, // uk-UA - 0x4aa00000: 700, // ur - 0x4aa00098: 701, // ur-IN - 0x4aa000e7: 702, // ur-PK - 0x4b200000: 703, // uz - 0x4b205000: 704, // uz-Arab - 0x4b205023: 705, // uz-Arab-AF - 0x4b21e000: 706, // uz-Cyrl - 0x4b21e136: 707, // uz-Cyrl-UZ - 0x4b252000: 708, // uz-Latn - 0x4b252136: 709, // uz-Latn-UZ - 0x4b400000: 710, // vai - 0x4b452000: 711, // vai-Latn - 0x4b4520b3: 712, // vai-Latn-LR - 0x4b4d9000: 713, // vai-Vaii - 0x4b4d90b3: 714, // vai-Vaii-LR - 0x4b600000: 715, // ve - 0x4b900000: 716, // vi - 0x4b90013d: 717, // vi-VN - 0x4bf00000: 718, // vo - 0x4bf00001: 719, // vo-001 - 0x4c200000: 720, // vun - 0x4c20012e: 721, // vun-TZ - 0x4c400000: 722, // wa - 0x4c500000: 723, // wae - 0x4c50004d: 724, // wae-CH - 0x4db00000: 725, // wo - 0x4e800000: 726, // xh - 0x4f100000: 727, // xog - 0x4f100130: 728, // xog-UG - 0x4ff00000: 729, // yav - 0x4ff00051: 730, // yav-CM - 0x50800000: 731, // yi - 0x50800001: 732, // yi-001 - 0x50e00000: 733, // yo - 0x50e0003a: 734, // yo-BJ - 0x50e000d5: 735, // yo-NG - 0x51500000: 736, // yue - 0x5150008c: 737, // yue-HK - 0x51e00000: 738, // zgh - 0x51e000b9: 739, // zgh-MA - 0x51f00000: 740, // zh - 0x51f34000: 741, // zh-Hans - 0x51f34052: 742, // zh-Hans-CN - 0x51f3408c: 743, // zh-Hans-HK - 0x51f340c5: 744, // zh-Hans-MO - 0x51f3410c: 745, // zh-Hans-SG - 0x51f35000: 746, // zh-Hant - 0x51f3508c: 747, // zh-Hant-HK - 0x51f350c5: 748, // zh-Hant-MO - 0x51f3512d: 749, // zh-Hant-TW - 0x52400000: 750, // zu - 0x52400160: 751, // zu-ZA -} - -// Total table size 4580 bytes (4KiB); checksum: A7F72A2A diff --git a/vendor/golang.org/x/text/language/language.go b/vendor/golang.org/x/text/language/language.go index 5eecceb..f892354 100644 --- a/vendor/golang.org/x/text/language/language.go +++ b/vendor/golang.org/x/text/language/language.go @@ -2,144 +2,42 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:generate go run maketables.go gen_common.go -output tables.go -//go:generate go run gen_index.go +//go:generate go run gen.go -output tables.go -// Package language implements BCP 47 language tags and related functionality. -// -// The Tag type, which is used to represent languages, is agnostic to the -// meaning of its subtags. Tags are not fully canonicalized to preserve -// information that may be valuable in certain contexts. As a consequence, two -// different tags may represent identical languages. -// -// Initializing language- or locale-specific components usually consists of -// two steps. The first step is to select a display language based on the -// preferred languages of the user and the languages supported by an application. -// The second step is to create the language-specific services based on -// this selection. Each is discussed in more details below. -// -// Matching preferred against supported languages -// -// An application may support various languages. This list is typically limited -// by the languages for which there exists translations of the user interface. -// Similarly, a user may provide a list of preferred languages which is limited -// by the languages understood by this user. -// An application should use a Matcher to find the best supported language based -// on the user's preferred list. -// Matchers are aware of the intricacies of equivalence between languages. -// The default Matcher implementation takes into account things such as -// deprecated subtags, legacy tags, and mutual intelligibility between scripts -// and languages. -// -// A Matcher for English, Australian English, Danish, and standard Mandarin can -// be defined as follows: -// -// var matcher = language.NewMatcher([]language.Tag{ -// language.English, // The first language is used as fallback. -// language.MustParse("en-AU"), -// language.Danish, -// language.Chinese, -// }) -// -// The following code selects the best match for someone speaking Spanish and -// Norwegian: -// -// preferred := []language.Tag{ language.Spanish, language.Norwegian } -// tag, _, _ := matcher.Match(preferred...) -// -// In this case, the best match is Danish, as Danish is sufficiently a match to -// Norwegian to not have to fall back to the default. -// See ParseAcceptLanguage on how to handle the Accept-Language HTTP header. -// -// Selecting language-specific services -// -// One should always use the Tag returned by the Matcher to create an instance -// of any of the language-specific services provided by the text repository. -// This prevents the mixing of languages, such as having a different language for -// messages and display names, as well as improper casing or sorting order for -// the selected language. -// Using the returned Tag also allows user-defined settings, such as collation -// order or numbering system to be transparently passed as options. -// -// If you have language-specific data in your application, however, it will in -// most cases suffice to use the index returned by the matcher to identify -// the user language. -// The following loop provides an alternative in case this is not sufficient: -// -// supported := map[language.Tag]data{ -// language.English: enData, -// language.MustParse("en-AU"): enAUData, -// language.Danish: daData, -// language.Chinese: zhData, -// } -// tag, _, _ := matcher.Match(preferred...) -// for ; tag != language.Und; tag = tag.Parent() { -// if v, ok := supported[tag]; ok { -// return v -// } -// } -// return enData // should not reach here -// -// Repeatedly taking the Parent of the tag returned by Match will eventually -// match one of the tags used to initialize the Matcher. -// -// Canonicalization -// -// By default, only legacy and deprecated tags are converted into their -// canonical equivalent. All other information is preserved. This approach makes -// the confidence scores more accurate and allows matchers to distinguish -// between variants that are otherwise lost. -// -// As a consequence, two tags that should be treated as identical according to -// BCP 47 or CLDR, like "en-Latn" and "en", will be represented differently. The -// Matchers will handle such distinctions, though, and are aware of the -// equivalence relations. The CanonType type can be used to alter the -// canonicalization form. -// -// References -// -// BCP 47 - Tags for Identifying Languages -// http://tools.ietf.org/html/bcp47 -package language // import "golang.org/x/text/language" +package language // TODO: Remove above NOTE after: // - verifying that tables are dropped correctly (most notably matcher tables). import ( - "errors" - "fmt" "strings" -) -const ( - // maxCoreSize is the maximum size of a BCP 47 tag without variants and - // extensions. Equals max lang (3) + script (4) + max reg (3) + 2 dashes. - maxCoreSize = 12 - - // max99thPercentileSize is a somewhat arbitrary buffer size that presumably - // is large enough to hold at least 99% of the BCP 47 tags. - max99thPercentileSize = 32 - - // maxSimpleUExtensionSize is the maximum size of a -u extension with one - // key-type pair. Equals len("-u-") + key (2) + dash + max value (8). - maxSimpleUExtensionSize = 14 + "golang.org/x/text/internal/language" + "golang.org/x/text/internal/language/compact" ) // Tag represents a BCP 47 language tag. It is used to specify an instance of a // specific language or locale. All language tag values are guaranteed to be // well-formed. -type Tag struct { - lang langID - region regionID - script scriptID - pVariant byte // offset in str, includes preceding '-' - pExt uint16 // offset of first extension, includes preceding '-' +type Tag compact.Tag + +func makeTag(t language.Tag) (tag Tag) { + return Tag(compact.Make(t)) +} - // str is the string representation of the Tag. It will only be used if the - // tag has variants or extensions. - str string +func (t *Tag) tag() language.Tag { + return (*compact.Tag)(t).Tag() } +func (t *Tag) isCompact() bool { + return (*compact.Tag)(t).IsCompact() +} + +// TODO: improve performance. +func (t *Tag) lang() language.Language { return t.tag().LangID } +func (t *Tag) region() language.Region { return t.tag().RegionID } +func (t *Tag) script() language.Script { return t.tag().ScriptID } + // Make is a convenience wrapper for Parse that omits the error. // In case of an error, a sensible default is returned. func Make(s string) Tag { @@ -156,25 +54,13 @@ func (c CanonType) Make(s string) Tag { // Raw returns the raw base language, script and region, without making an // attempt to infer their values. func (t Tag) Raw() (b Base, s Script, r Region) { - return Base{t.lang}, Script{t.script}, Region{t.region} -} - -// equalTags compares language, script and region subtags only. -func (t Tag) equalTags(a Tag) bool { - return t.lang == a.lang && t.script == a.script && t.region == a.region + tt := t.tag() + return Base{tt.LangID}, Script{tt.ScriptID}, Region{tt.RegionID} } // IsRoot returns true if t is equal to language "und". func (t Tag) IsRoot() bool { - if int(t.pVariant) < len(t.str) { - return false - } - return t.equalTags(und) -} - -// private reports whether the Tag consists solely of a private use tag. -func (t Tag) private() bool { - return t.str != "" && t.pVariant == 0 + return compact.Tag(t).IsRoot() } // CanonType can be used to enable or disable various types of canonicalization. @@ -226,30 +112,30 @@ const ( // canonicalize returns the canonicalized equivalent of the tag and // whether there was any change. -func (t Tag) canonicalize(c CanonType) (Tag, bool) { +func canonicalize(c CanonType, t language.Tag) (language.Tag, bool) { if c == Raw { return t, false } changed := false if c&SuppressScript != 0 { - if t.lang < langNoIndexOffset && uint8(t.script) == suppressScript[t.lang] { - t.script = 0 + if t.LangID.SuppressScript() == t.ScriptID { + t.ScriptID = 0 changed = true } } if c&canonLang != 0 { for { - if l, aliasType := normLang(t.lang); l != t.lang { + if l, aliasType := t.LangID.Canonicalize(); l != t.LangID { switch aliasType { - case langLegacy: + case language.Legacy: if c&Legacy != 0 { - if t.lang == _sh && t.script == 0 { - t.script = _Latn + if t.LangID == _sh && t.ScriptID == 0 { + t.ScriptID = _Latn } - t.lang = l + t.LangID = l changed = true } - case langMacro: + case language.Macro: if c&Macro != 0 { // We deviate here from CLDR. The mapping "nb" -> "no" // qualifies as a typical Macro language mapping. However, @@ -260,39 +146,39 @@ func (t Tag) canonicalize(c CanonType) (Tag, bool) { // http://unicode.org/cldr/trac/ticket/1790 for some of the // practical implications. TODO: this check could be removed // if CLDR adopts this change. - if c&CLDR == 0 || t.lang != _nb { + if c&CLDR == 0 || t.LangID != _nb { changed = true - t.lang = l + t.LangID = l } } - case langDeprecated: + case language.Deprecated: if c&DeprecatedBase != 0 { - if t.lang == _mo && t.region == 0 { - t.region = _MD + if t.LangID == _mo && t.RegionID == 0 { + t.RegionID = _MD } - t.lang = l + t.LangID = l changed = true // Other canonicalization types may still apply. continue } } - } else if c&Legacy != 0 && t.lang == _no && c&CLDR != 0 { - t.lang = _nb + } else if c&Legacy != 0 && t.LangID == _no && c&CLDR != 0 { + t.LangID = _nb changed = true } break } } if c&DeprecatedScript != 0 { - if t.script == _Qaai { + if t.ScriptID == _Qaai { changed = true - t.script = _Zinh + t.ScriptID = _Zinh } } if c&DeprecatedRegion != 0 { - if r := normRegion(t.region); r != 0 { + if r := t.RegionID.Canonicalize(); r != t.RegionID { changed = true - t.region = r + t.RegionID = r } } return t, changed @@ -300,11 +186,20 @@ func (t Tag) canonicalize(c CanonType) (Tag, bool) { // Canonicalize returns the canonicalized equivalent of the tag. func (c CanonType) Canonicalize(t Tag) (Tag, error) { - t, changed := t.canonicalize(c) - if changed { - t.remakeString() + // First try fast path. + if t.isCompact() { + if _, changed := canonicalize(c, compact.Tag(t).Tag()); !changed { + return t, nil + } + } + // It is unlikely that one will canonicalize a tag after matching. So do + // a slow but simple approach here. + if tag, changed := canonicalize(c, t.tag()); changed { + tag.RemakeString() + return makeTag(tag), nil } return t, nil + } // Confidence indicates the level of certainty for a given return value. @@ -327,79 +222,38 @@ func (c Confidence) String() string { return confName[c] } -// remakeString is used to update t.str in case lang, script or region changed. -// It is assumed that pExt and pVariant still point to the start of the -// respective parts. -func (t *Tag) remakeString() { - if t.str == "" { - return - } - extra := t.str[t.pVariant:] - if t.pVariant > 0 { - extra = extra[1:] - } - if t.equalTags(und) && strings.HasPrefix(extra, "x-") { - t.str = extra - t.pVariant = 0 - t.pExt = 0 - return - } - var buf [max99thPercentileSize]byte // avoid extra memory allocation in most cases. - b := buf[:t.genCoreBytes(buf[:])] - if extra != "" { - diff := len(b) - int(t.pVariant) - b = append(b, '-') - b = append(b, extra...) - t.pVariant = uint8(int(t.pVariant) + diff) - t.pExt = uint16(int(t.pExt) + diff) - } else { - t.pVariant = uint8(len(b)) - t.pExt = uint16(len(b)) - } - t.str = string(b) +// String returns the canonical string representation of the language tag. +func (t Tag) String() string { + return t.tag().String() } -// genCoreBytes writes a string for the base languages, script and region tags -// to the given buffer and returns the number of bytes written. It will never -// write more than maxCoreSize bytes. -func (t *Tag) genCoreBytes(buf []byte) int { - n := t.lang.stringToBuf(buf[:]) - if t.script != 0 { - n += copy(buf[n:], "-") - n += copy(buf[n:], t.script.String()) - } - if t.region != 0 { - n += copy(buf[n:], "-") - n += copy(buf[n:], t.region.String()) - } - return n +// MarshalText implements encoding.TextMarshaler. +func (t Tag) MarshalText() (text []byte, err error) { + return t.tag().MarshalText() } -// String returns the canonical string representation of the language tag. -func (t Tag) String() string { - if t.str != "" { - return t.str - } - if t.script == 0 && t.region == 0 { - return t.lang.String() - } - buf := [maxCoreSize]byte{} - return string(buf[:t.genCoreBytes(buf[:])]) +// UnmarshalText implements encoding.TextUnmarshaler. +func (t *Tag) UnmarshalText(text []byte) error { + var tag language.Tag + err := tag.UnmarshalText(text) + *t = makeTag(tag) + return err } // Base returns the base language of the language tag. If the base language is // unspecified, an attempt will be made to infer it from the context. // It uses a variant of CLDR's Add Likely Subtags algorithm. This is subject to change. func (t Tag) Base() (Base, Confidence) { - if t.lang != 0 { - return Base{t.lang}, Exact + if b := t.lang(); b != 0 { + return Base{b}, Exact } + tt := t.tag() c := High - if t.script == 0 && !(Region{t.region}).IsCountry() { + if tt.ScriptID == 0 && !tt.RegionID.IsCountry() { c = Low } - if tag, err := addTags(t); err == nil && tag.lang != 0 { - return Base{tag.lang}, c + if tag, err := tt.Maximize(); err == nil && tag.LangID != 0 { + return Base{tag.LangID}, c } return Base{0}, No } @@ -419,28 +273,27 @@ func (t Tag) Base() (Base, Confidence) { // in the past. Also, the script that is commonly used may change over time. // It uses a variant of CLDR's Add Likely Subtags algorithm. This is subject to change. func (t Tag) Script() (Script, Confidence) { - if t.script != 0 { - return Script{t.script}, Exact - } - sc, c := scriptID(_Zzzz), No - if t.lang < langNoIndexOffset { - if scr := scriptID(suppressScript[t.lang]); scr != 0 { - // Note: it is not always the case that a language with a suppress - // script value is only written in one script (e.g. kk, ms, pa). - if t.region == 0 { - return Script{scriptID(scr)}, High - } - sc, c = scr, High + if scr := t.script(); scr != 0 { + return Script{scr}, Exact + } + tt := t.tag() + sc, c := language.Script(_Zzzz), No + if scr := tt.LangID.SuppressScript(); scr != 0 { + // Note: it is not always the case that a language with a suppress + // script value is only written in one script (e.g. kk, ms, pa). + if tt.RegionID == 0 { + return Script{scr}, High } + sc, c = scr, High } - if tag, err := addTags(t); err == nil { - if tag.script != sc { - sc, c = tag.script, Low + if tag, err := tt.Maximize(); err == nil { + if tag.ScriptID != sc { + sc, c = tag.ScriptID, Low } } else { - t, _ = (Deprecated | Macro).Canonicalize(t) - if tag, err := addTags(t); err == nil && tag.script != sc { - sc, c = tag.script, Low + tt, _ = canonicalize(Deprecated|Macro, tt) + if tag, err := tt.Maximize(); err == nil && tag.ScriptID != sc { + sc, c = tag.ScriptID, Low } } return Script{sc}, c @@ -450,28 +303,31 @@ func (t Tag) Script() (Script, Confidence) { // infer a most likely candidate from the context. // It uses a variant of CLDR's Add Likely Subtags algorithm. This is subject to change. func (t Tag) Region() (Region, Confidence) { - if t.region != 0 { - return Region{t.region}, Exact + if r := t.region(); r != 0 { + return Region{r}, Exact } - if t, err := addTags(t); err == nil { - return Region{t.region}, Low // TODO: differentiate between high and low. + tt := t.tag() + if tt, err := tt.Maximize(); err == nil { + return Region{tt.RegionID}, Low // TODO: differentiate between high and low. } - t, _ = (Deprecated | Macro).Canonicalize(t) - if tag, err := addTags(t); err == nil { - return Region{tag.region}, Low + tt, _ = canonicalize(Deprecated|Macro, tt) + if tag, err := tt.Maximize(); err == nil { + return Region{tag.RegionID}, Low } return Region{_ZZ}, No // TODO: return world instead of undetermined? } -// Variant returns the variants specified explicitly for this language tag. +// Variants returns the variants specified explicitly for this language tag. // or nil if no variant was specified. func (t Tag) Variants() []Variant { + if !compact.Tag(t).MayHaveVariants() { + return nil + } v := []Variant{} - if int(t.pVariant) < int(t.pExt) { - for x, str := "", t.str[t.pVariant:t.pExt]; str != ""; { - x, str = nextToken(str) - v = append(v, Variant{x}) - } + x, str := "", t.tag().Variants() + for str != "" { + x, str = nextToken(str) + v = append(v, Variant{x}) } return v } @@ -480,56 +336,7 @@ func (t Tag) Variants() []Variant { // specific language are substituted with fields from the parent language. // The parent for a language may change for newer versions of CLDR. func (t Tag) Parent() Tag { - if t.str != "" { - // Strip the variants and extensions. - t, _ = Raw.Compose(t.Raw()) - if t.region == 0 && t.script != 0 && t.lang != 0 { - base, _ := addTags(Tag{lang: t.lang}) - if base.script == t.script { - return Tag{lang: t.lang} - } - } - return t - } - if t.lang != 0 { - if t.region != 0 { - maxScript := t.script - if maxScript == 0 { - max, _ := addTags(t) - maxScript = max.script - } - - for i := range parents { - if langID(parents[i].lang) == t.lang && scriptID(parents[i].maxScript) == maxScript { - for _, r := range parents[i].fromRegion { - if regionID(r) == t.region { - return Tag{ - lang: t.lang, - script: scriptID(parents[i].script), - region: regionID(parents[i].toRegion), - } - } - } - } - } - - // Strip the script if it is the default one. - base, _ := addTags(Tag{lang: t.lang}) - if base.script != maxScript { - return Tag{lang: t.lang, script: maxScript} - } - return Tag{lang: t.lang} - } else if t.script != 0 { - // The parent for an base-script pair with a non-default script is - // "und" instead of the base language. - base, _ := addTags(Tag{lang: t.lang}) - if base.script != t.script { - return und - } - return Tag{lang: t.lang} - } - } - return und + return Tag(compact.Tag(t).Parent()) } // returns token t and the rest of the string. @@ -555,17 +362,8 @@ func (e Extension) String() string { // ParseExtension parses s as an extension and returns it on success. func ParseExtension(s string) (e Extension, err error) { - scan := makeScannerString(s) - var end int - if n := len(scan.token); n != 1 { - return Extension{}, errSyntax - } - scan.toLower(0, len(scan.b)) - end = parseExtension(&scan) - if end != len(s) { - return Extension{}, errSyntax - } - return Extension{string(scan.b)}, nil + ext, err := language.ParseExtension(s) + return Extension{ext}, err } // Type returns the one-byte extension type of e. It returns 0 for the zero @@ -586,22 +384,20 @@ func (e Extension) Tokens() []string { // false for ok if t does not have the requested extension. The returned // extension will be invalid in this case. func (t Tag) Extension(x byte) (ext Extension, ok bool) { - for i := int(t.pExt); i < len(t.str)-1; { - var ext string - i, ext = getExtension(t.str, i) - if ext[0] == x { - return Extension{ext}, true - } + if !compact.Tag(t).MayHaveExtensions() { + return Extension{}, false } - return Extension{}, false + e, ok := t.tag().Extension(x) + return Extension{e}, ok } // Extensions returns all extensions of t. func (t Tag) Extensions() []Extension { + if !compact.Tag(t).MayHaveExtensions() { + return nil + } e := []Extension{} - for i := int(t.pExt); i < len(t.str)-1; { - var ext string - i, ext = getExtension(t.str, i) + for _, ext := range t.tag().Extensions() { e = append(e, Extension{ext}) } return e @@ -612,256 +408,102 @@ func (t Tag) Extensions() []Extension { // http://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers. // TypeForKey will traverse the inheritance chain to get the correct value. func (t Tag) TypeForKey(key string) string { - if start, end, _ := t.findTypeForKey(key); end != start { - return t.str[start:end] + if !compact.Tag(t).MayHaveExtensions() { + if key != "rg" && key != "va" { + return "" + } } - return "" + return t.tag().TypeForKey(key) } -var ( - errPrivateUse = errors.New("cannot set a key on a private use tag") - errInvalidArguments = errors.New("invalid key or type") -) - // SetTypeForKey returns a new Tag with the key set to type, where key and type // are of the allowed values defined for the Unicode locale extension ('u') in // http://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers. // An empty value removes an existing pair with the same key. func (t Tag) SetTypeForKey(key, value string) (Tag, error) { - if t.private() { - return t, errPrivateUse - } - if len(key) != 2 { - return t, errInvalidArguments - } - - // Remove the setting if value is "". - if value == "" { - start, end, _ := t.findTypeForKey(key) - if start != end { - // Remove key tag and leading '-'. - start -= 4 - - // Remove a possible empty extension. - if (end == len(t.str) || t.str[end+2] == '-') && t.str[start-2] == '-' { - start -= 2 - } - if start == int(t.pVariant) && end == len(t.str) { - t.str = "" - t.pVariant, t.pExt = 0, 0 - } else { - t.str = fmt.Sprintf("%s%s", t.str[:start], t.str[end:]) - } - } - return t, nil - } - - if len(value) < 3 || len(value) > 8 { - return t, errInvalidArguments - } - - var ( - buf [maxCoreSize + maxSimpleUExtensionSize]byte - uStart int // start of the -u extension. - ) - - // Generate the tag string if needed. - if t.str == "" { - uStart = t.genCoreBytes(buf[:]) - buf[uStart] = '-' - uStart++ - } - - // Create new key-type pair and parse it to verify. - b := buf[uStart:] - copy(b, "u-") - copy(b[2:], key) - b[4] = '-' - b = b[:5+copy(b[5:], value)] - scan := makeScanner(b) - if parseExtensions(&scan); scan.err != nil { - return t, scan.err - } - - // Assemble the replacement string. - if t.str == "" { - t.pVariant, t.pExt = byte(uStart-1), uint16(uStart-1) - t.str = string(buf[:uStart+len(b)]) - } else { - s := t.str - start, end, hasExt := t.findTypeForKey(key) - if start == end { - if hasExt { - b = b[2:] - } - t.str = fmt.Sprintf("%s-%s%s", s[:start], b, s[end:]) - } else { - t.str = fmt.Sprintf("%s%s%s", s[:start], value, s[end:]) - } - } - return t, nil + tt, err := t.tag().SetTypeForKey(key, value) + return makeTag(tt), err } -// findKeyAndType returns the start and end position for the type corresponding -// to key or the point at which to insert the key-value pair if the type -// wasn't found. The hasExt return value reports whether an -u extension was present. -// Note: the extensions are typically very small and are likely to contain -// only one key-type pair. -func (t Tag) findTypeForKey(key string) (start, end int, hasExt bool) { - p := int(t.pExt) - if len(key) != 2 || p == len(t.str) || p == 0 { - return p, p, false - } - s := t.str - - // Find the correct extension. - for p++; s[p] != 'u'; p++ { - if s[p] > 'u' { - p-- - return p, p, false - } - if p = nextExtension(s, p); p == len(s) { - return len(s), len(s), false - } - } - // Proceed to the hyphen following the extension name. - p++ - - // curKey is the key currently being processed. - curKey := "" - - // Iterate over keys until we get the end of a section. - for { - // p points to the hyphen preceding the current token. - if p3 := p + 3; s[p3] == '-' { - // Found a key. - // Check whether we just processed the key that was requested. - if curKey == key { - return start, p, true - } - // Set to the next key and continue scanning type tokens. - curKey = s[p+1 : p3] - if curKey > key { - return p, p, true - } - // Start of the type token sequence. - start = p + 4 - // A type is at least 3 characters long. - p += 7 // 4 + 3 - } else { - // Attribute or type, which is at least 3 characters long. - p += 4 - } - // p points past the third character of a type or attribute. - max := p + 5 // maximum length of token plus hyphen. - if len(s) < max { - max = len(s) - } - for ; p < max && s[p] != '-'; p++ { - } - // Bail if we have exhausted all tokens or if the next token starts - // a new extension. - if p == len(s) || s[p+2] == '-' { - if curKey == key { - return start, p, true - } - return p, p, true - } - } -} +// NumCompactTags is the number of compact tags. The maximum tag is +// NumCompactTags-1. +const NumCompactTags = compact.NumCompactTags // CompactIndex returns an index, where 0 <= index < NumCompactTags, for tags -// for which data exists in the text repository. The index will change over time -// and should not be stored in persistent storage. Extensions, except for the -// 'va' type of the 'u' extension, are ignored. It will return 0, false if no -// compact tag exists, where 0 is the index for the root language (Und). -func CompactIndex(t Tag) (index int, ok bool) { - // TODO: perhaps give more frequent tags a lower index. - // TODO: we could make the indexes stable. This will excluded some - // possibilities for optimization, so don't do this quite yet. - b, s, r := t.Raw() - if len(t.str) > 0 { - if strings.HasPrefix(t.str, "x-") { - // We have no entries for user-defined tags. - return 0, false - } - if uint16(t.pVariant) != t.pExt { - // There are no tags with variants and an u-va type. - if t.TypeForKey("va") != "" { - return 0, false - } - t, _ = Raw.Compose(b, s, r, t.Variants()) - } else if _, ok := t.Extension('u'); ok { - // Strip all but the 'va' entry. - variant := t.TypeForKey("va") - t, _ = Raw.Compose(b, s, r) - t, _ = t.SetTypeForKey("va", variant) - } - if len(t.str) > 0 { - // We have some variants. - for i, s := range specialTags { - if s == t { - return i + 1, true - } - } - return 0, false - } - } - // No variants specified: just compare core components. - // The key has the form lllssrrr, where l, s, and r are nibbles for - // respectively the langID, scriptID, and regionID. - key := uint32(b.langID) << (8 + 12) - key |= uint32(s.scriptID) << 12 - key |= uint32(r.regionID) - x, ok := coreTags[key] - return int(x), ok +// for which data exists in the text repository.The index will change over time +// and should not be stored in persistent storage. If t does not match a compact +// index, exact will be false and the compact index will be returned for the +// first match after repeatedly taking the Parent of t. +func CompactIndex(t Tag) (index int, exact bool) { + id, exact := compact.LanguageID(compact.Tag(t)) + return int(id), exact } +var root = language.Tag{} + // Base is an ISO 639 language code, used for encoding the base language // of a language tag. type Base struct { - langID + langID language.Language } // ParseBase parses a 2- or 3-letter ISO 639 code. // It returns a ValueError if s is a well-formed but unknown language identifier // or another error if another error occurred. func ParseBase(s string) (Base, error) { - if n := len(s); n < 2 || 3 < n { - return Base{}, errSyntax - } - var buf [3]byte - l, err := getLangID(buf[:copy(buf[:], s)]) + l, err := language.ParseBase(s) return Base{l}, err } +// String returns the BCP 47 representation of the base language. +func (b Base) String() string { + return b.langID.String() +} + +// ISO3 returns the ISO 639-3 language code. +func (b Base) ISO3() string { + return b.langID.ISO3() +} + +// IsPrivateUse reports whether this language code is reserved for private use. +func (b Base) IsPrivateUse() bool { + return b.langID.IsPrivateUse() +} + // Script is a 4-letter ISO 15924 code for representing scripts. // It is idiomatically represented in title case. type Script struct { - scriptID + scriptID language.Script } // ParseScript parses a 4-letter ISO 15924 code. // It returns a ValueError if s is a well-formed but unknown script identifier // or another error if another error occurred. func ParseScript(s string) (Script, error) { - if len(s) != 4 { - return Script{}, errSyntax - } - var buf [4]byte - sc, err := getScriptID(script, buf[:copy(buf[:], s)]) + sc, err := language.ParseScript(s) return Script{sc}, err } +// String returns the script code in title case. +// It returns "Zzzz" for an unspecified script. +func (s Script) String() string { + return s.scriptID.String() +} + +// IsPrivateUse reports whether this script code is reserved for private use. +func (s Script) IsPrivateUse() bool { + return s.scriptID.IsPrivateUse() +} + // Region is an ISO 3166-1 or UN M.49 code for representing countries and regions. type Region struct { - regionID + regionID language.Region } // EncodeM49 returns the Region for the given UN M.49 code. // It returns an error if r is not a valid code. func EncodeM49(r int) (Region, error) { - rid, err := getRegionM49(r) + rid, err := language.EncodeM49(r) return Region{rid}, err } @@ -869,62 +511,54 @@ func EncodeM49(r int) (Region, error) { // It returns a ValueError if s is a well-formed but unknown region identifier // or another error if another error occurred. func ParseRegion(s string) (Region, error) { - if n := len(s); n < 2 || 3 < n { - return Region{}, errSyntax - } - var buf [3]byte - r, err := getRegionID(buf[:copy(buf[:], s)]) + r, err := language.ParseRegion(s) return Region{r}, err } +// String returns the BCP 47 representation for the region. +// It returns "ZZ" for an unspecified region. +func (r Region) String() string { + return r.regionID.String() +} + +// ISO3 returns the 3-letter ISO code of r. +// Note that not all regions have a 3-letter ISO code. +// In such cases this method returns "ZZZ". +func (r Region) ISO3() string { + return r.regionID.String() +} + +// M49 returns the UN M.49 encoding of r, or 0 if this encoding +// is not defined for r. +func (r Region) M49() int { + return r.regionID.M49() +} + +// IsPrivateUse reports whether r has the ISO 3166 User-assigned status. This +// may include private-use tags that are assigned by CLDR and used in this +// implementation. So IsPrivateUse and IsCountry can be simultaneously true. +func (r Region) IsPrivateUse() bool { + return r.regionID.IsPrivateUse() +} + // IsCountry returns whether this region is a country or autonomous area. This // includes non-standard definitions from CLDR. func (r Region) IsCountry() bool { - if r.regionID == 0 || r.IsGroup() || r.IsPrivateUse() && r.regionID != _XK { - return false - } - return true + return r.regionID.IsCountry() } // IsGroup returns whether this region defines a collection of regions. This // includes non-standard definitions from CLDR. func (r Region) IsGroup() bool { - if r.regionID == 0 { - return false - } - return int(regionInclusion[r.regionID]) < len(regionContainment) + return r.regionID.IsGroup() } // Contains returns whether Region c is contained by Region r. It returns true // if c == r. func (r Region) Contains(c Region) bool { - return r.regionID.contains(c.regionID) + return r.regionID.Contains(c.regionID) } -func (r regionID) contains(c regionID) bool { - if r == c { - return true - } - g := regionInclusion[r] - if g >= nRegionGroups { - return false - } - m := regionContainment[g] - - d := regionInclusion[c] - b := regionInclusionBits[d] - - // A contained country may belong to multiple disjoint groups. Matching any - // of these indicates containment. If the contained region is a group, it - // must strictly be a subset. - if d >= nRegionGroups { - return b&m != 0 - } - return b&^m == 0 -} - -var errNoTLD = errors.New("language: region is not a valid ccTLD") - // TLD returns the country code top-level domain (ccTLD). UK is returned for GB. // In all other cases it returns either the region itself or an error. // @@ -933,25 +567,15 @@ var errNoTLD = errors.New("language: region is not a valid ccTLD") // region will already be canonicalized it was obtained from a Tag that was // obtained using any of the default methods. func (r Region) TLD() (Region, error) { - // See http://en.wikipedia.org/wiki/Country_code_top-level_domain for the - // difference between ISO 3166-1 and IANA ccTLD. - if r.regionID == _GB { - r = Region{_UK} - } - if (r.typ() & ccTLD) == 0 { - return Region{}, errNoTLD - } - return r, nil + tld, err := r.regionID.TLD() + return Region{tld}, err } // Canonicalize returns the region or a possible replacement if the region is // deprecated. It will not return a replacement for deprecated regions that // are split into multiple regions. func (r Region) Canonicalize() Region { - if cr := normRegion(r.regionID); cr != 0 { - return Region{cr} - } - return r + return Region{r.regionID.Canonicalize()} } // Variant represents a registered variant of a language as defined by BCP 47. @@ -962,11 +586,8 @@ type Variant struct { // ParseVariant parses and returns a Variant. An error is returned if s is not // a valid variant. func ParseVariant(s string) (Variant, error) { - s = strings.ToLower(s) - if _, ok := variantIndex[s]; ok { - return Variant{s}, nil - } - return Variant{}, mkErrInvalid([]byte(s)) + v, err := language.ParseVariant(s) + return Variant{v.String()}, err } // String returns the string representation of the variant. diff --git a/vendor/golang.org/x/text/language/language_test.go b/vendor/golang.org/x/text/language/language_test.go index f7c2d88..f7711ba 100644 --- a/vendor/golang.org/x/text/language/language_test.go +++ b/vendor/golang.org/x/text/language/language_test.go @@ -7,8 +7,6 @@ package language import ( "reflect" "testing" - - "golang.org/x/text/internal/testtext" ) func TestTagSize(t *testing.T) { @@ -34,7 +32,7 @@ func TestIsRoot(t *testing.T) { } func TestEquality(t *testing.T) { - for i, tt := range parseTests()[48:49] { + for i, tt := range parseTests() { s := tt.in tag := Make(s) t1 := Make(tag.String()) @@ -48,60 +46,53 @@ func TestEquality(t *testing.T) { } } -func TestMakeString(t *testing.T) { - tests := []struct{ in, out string }{ - {"und", "und"}, - {"und", "und-CW"}, - {"nl", "nl-NL"}, - {"de-1901", "nl-1901"}, - {"de-1901", "de-Arab-1901"}, - {"x-a-b", "de-Arab-x-a-b"}, - {"x-a-b", "x-a-b"}, +func TestString(t *testing.T) { + tests := []string{ + "no-u-rg-dkzzzz", } - for i, tt := range tests { - id, _ := Parse(tt.in) - mod, _ := Parse(tt.out) - id.setTagsFrom(mod) - for j := 0; j < 2; j++ { - id.remakeString() - if str := id.String(); str != tt.out { - t.Errorf("%d:%d: found %s; want %s", i, j, id.String(), tt.out) - } - } - // The bytes to string conversion as used in remakeString - // occasionally measures as more than one alloc, breaking this test. - // To alleviate this we set the number of runs to more than 1. - if n := testtext.AllocsPerRun(8, id.remakeString); n > 1 { - t.Errorf("%d: # allocs got %.1f; want <= 1", i, n) + for i, s := range tests { + tag := Make(s) + if tag.String() != s { + t.Errorf("%d:%s: got %s: want %s (%#v)", i, s, tag.String(), s, tag) } } } -func TestCompactIndex(t *testing.T) { - tests := []struct { - tag string - index int - ok bool - }{ +func TestMarshal(t *testing.T) { + testCases := []string{ // TODO: these values will change with each CLDR update. This issue // will be solved if we decide to fix the indexes. - {"und", 0, true}, - {"ca-ES-valencia", 1, true}, - {"ca-ES-valencia-u-va-posix", 0, false}, - {"ca-ES-valencia-u-co-phonebk", 1, true}, - {"ca-ES-valencia-u-co-phonebk-va-posix", 0, false}, - {"x-klingon", 0, false}, - {"en-US", 229, true}, - {"en-US-u-va-posix", 2, true}, - {"en", 133, true}, - {"en-u-co-phonebk", 133, true}, - {"en-001", 134, true}, - {"sh", 0, false}, // We don't normalize. + "und", + "ca-ES-valencia", + "ca-ES-valencia-u-va-posix", + "ca-ES-valencia-u-co-phonebk", + "ca-ES-valencia-u-co-phonebk-va-posix", + "x-klingon", + "en-US", + "en-US-u-va-posix", + "en", + "en-u-co-phonebk", + "en-001", + "sh", + + "en-GB-u-rg-uszzzz", + "en-GB-u-rg-uszzzz-va-posix", + "en-GB-u-co-phonebk-rg-uszzzz", + // Invalid tags should also roundtrip. + "en-GB-u-co-phonebk-rg-uszz", } - for _, tt := range tests { - x, ok := CompactIndex(Raw.MustParse(tt.tag)) - if x != tt.index || ok != tt.ok { - t.Errorf("%s: got %d, %v; want %d %v", tt.tag, x, ok, tt.index, tt.ok) + for _, tc := range testCases { + var tag Tag + err := tag.UnmarshalText([]byte(tc)) + if err != nil { + t.Errorf("UnmarshalText(%q): unexpected error: %v", tc, err) + } + b, err := tag.MarshalText() + if err != nil { + t.Errorf("MarshalText(%q): unexpected error: %v", tc, err) + } + if got := string(b); got != tc { + t.Errorf("%s: got %q; want %q", tc, got, tc) } } } @@ -313,8 +304,7 @@ func TestIsCountry(t *testing.T) { {"XK", true}, } for i, tt := range tests { - reg, _ := getRegionID([]byte(tt.reg)) - r := Region{reg} + r, _ := ParseRegion(tt.reg) if r.IsCountry() != tt.country { t.Errorf("%d: IsCountry(%s) was %v; want %v", i, tt.reg, r.IsCountry(), tt.country) } @@ -340,8 +330,7 @@ func TestIsGroup(t *testing.T) { {"XK", false}, } for i, tt := range tests { - reg, _ := getRegionID([]byte(tt.reg)) - r := Region{reg} + r, _ := ParseRegion(tt.reg) if r.IsGroup() != tt.group { t.Errorf("%d: IsGroup(%s) was %v; want %v", i, tt.reg, r.IsGroup(), tt.group) } @@ -374,10 +363,9 @@ func TestContains(t *testing.T) { {"155", "EU", false}, } for i, tt := range tests { - enc, _ := getRegionID([]byte(tt.enclosing)) - con, _ := getRegionID([]byte(tt.contained)) - r := Region{enc} - if got := r.Contains(Region{con}); got != tt.contains { + r := MustParseRegion(tt.enclosing) + con := MustParseRegion(tt.contained) + if got := r.Contains(con); got != tt.contains { t.Errorf("%d: %s.Contains(%s) was %v; want %v", i, tt.enclosing, tt.contained, got, tt.contains) } } @@ -525,6 +513,16 @@ func TestCanonicalize(t *testing.T) { {"und-Qaai", "und-Zinh", DeprecatedScript}, {"und-Qaai", "und-Qaai", DeprecatedBase}, {"drh", "mn", All}, // drh -> khk -> mn + + {"en-GB-u-rg-uszzzz", "en-GB-u-rg-uszzzz", Raw}, + {"en-GB-u-rg-USZZZZ", "en-GB-u-rg-uszzzz", Raw}, + // TODO: use different exact values for language and regional tag? + {"en-GB-u-rg-uszzzz-va-posix", "en-GB-u-rg-uszzzz-va-posix", Raw}, + {"en-GB-u-rg-uszzzz-co-phonebk", "en-GB-u-co-phonebk-rg-uszzzz", Raw}, + // Invalid region specifications are left as is. + {"en-GB-u-rg-usz", "en-GB-u-rg-usz", Raw}, + {"en-GB-u-rg-usz-va-posix", "en-GB-u-rg-usz-va-posix", Raw}, + {"en-GB-u-rg-usz-co-phonebk", "en-GB-u-co-phonebk-rg-usz", Raw}, } for i, tt := range tests { in, _ := Raw.Parse(tt.in) @@ -532,9 +530,6 @@ func TestCanonicalize(t *testing.T) { if in.String() != tt.out { t.Errorf("%d:%s: was %s; want %s", i, tt.in, in.String(), tt.out) } - if int(in.pVariant) > int(in.pExt) || int(in.pExt) > len(in.str) { - t.Errorf("%d:%s:offsets %d <= %d <= %d must be true", i, tt.in, in.pVariant, in.pExt, len(in.str)) - } } // Test idempotence. for _, base := range Supported.BaseLanguages() { @@ -554,6 +549,8 @@ func TestTypeForKey(t *testing.T) { {"co", "en-u-co-phonebk", "phonebk"}, {"co", "en-u-co-phonebk-cu-aud", "phonebk"}, {"co", "x-foo-u-co-phonebk", ""}, + {"va", "en-US-u-va-posix", "posix"}, + {"rg", "en-u-rg-gbzzzz", "gbzzzz"}, {"nu", "en-u-co-phonebk-nu-arabic", "arabic"}, {"kc", "cmn-u-co-stroke", ""}, } @@ -564,121 +561,6 @@ func TestTypeForKey(t *testing.T) { } } -func TestSetTypeForKey(t *testing.T) { - tests := []struct { - key, value, in, out string - err bool - }{ - // replace existing value - {"co", "pinyin", "en-u-co-phonebk", "en-u-co-pinyin", false}, - {"co", "pinyin", "en-u-co-phonebk-cu-xau", "en-u-co-pinyin-cu-xau", false}, - {"co", "pinyin", "en-u-co-phonebk-v-xx", "en-u-co-pinyin-v-xx", false}, - {"co", "pinyin", "en-u-co-phonebk-x-x", "en-u-co-pinyin-x-x", false}, - {"nu", "arabic", "en-u-co-phonebk-nu-vaai", "en-u-co-phonebk-nu-arabic", false}, - // add to existing -u extension - {"co", "pinyin", "en-u-ca-gregory", "en-u-ca-gregory-co-pinyin", false}, - {"co", "pinyin", "en-u-ca-gregory-nu-vaai", "en-u-ca-gregory-co-pinyin-nu-vaai", false}, - {"co", "pinyin", "en-u-ca-gregory-v-va", "en-u-ca-gregory-co-pinyin-v-va", false}, - {"co", "pinyin", "en-u-ca-gregory-x-a", "en-u-ca-gregory-co-pinyin-x-a", false}, - {"ca", "gregory", "en-u-co-pinyin", "en-u-ca-gregory-co-pinyin", false}, - // remove pair - {"co", "", "en-u-co-phonebk", "en", false}, - {"co", "", "en-u-ca-gregory-co-phonebk", "en-u-ca-gregory", false}, - {"co", "", "en-u-co-phonebk-nu-arabic", "en-u-nu-arabic", false}, - {"co", "", "en", "en", false}, - // add -u extension - {"co", "pinyin", "en", "en-u-co-pinyin", false}, - {"co", "pinyin", "und", "und-u-co-pinyin", false}, - {"co", "pinyin", "en-a-aaa", "en-a-aaa-u-co-pinyin", false}, - {"co", "pinyin", "en-x-aaa", "en-u-co-pinyin-x-aaa", false}, - {"co", "pinyin", "en-v-aa", "en-u-co-pinyin-v-aa", false}, - {"co", "pinyin", "en-a-aaa-x-x", "en-a-aaa-u-co-pinyin-x-x", false}, - {"co", "pinyin", "en-a-aaa-v-va", "en-a-aaa-u-co-pinyin-v-va", false}, - // error on invalid values - {"co", "pinyinxxx", "en", "en", true}, - {"co", "piny.n", "en", "en", true}, - {"co", "pinyinxxx", "en-a-aaa", "en-a-aaa", true}, - {"co", "pinyinxxx", "en-u-aaa", "en-u-aaa", true}, - {"co", "pinyinxxx", "en-u-aaa-co-pinyin", "en-u-aaa-co-pinyin", true}, - {"co", "pinyi.", "en-u-aaa-co-pinyin", "en-u-aaa-co-pinyin", true}, - {"col", "pinyin", "en", "en", true}, - {"co", "cu", "en", "en", true}, - // error when setting on a private use tag - {"co", "phonebook", "x-foo", "x-foo", true}, - } - for i, tt := range tests { - tag := Make(tt.in) - if v, err := tag.SetTypeForKey(tt.key, tt.value); v.String() != tt.out { - t.Errorf("%d:%q[%q]=%q: was %q; want %q", i, tt.in, tt.key, tt.value, v, tt.out) - } else if (err != nil) != tt.err { - t.Errorf("%d:%q[%q]=%q: error was %v; want %v", i, tt.in, tt.key, tt.value, err != nil, tt.err) - } else if val := v.TypeForKey(tt.key); err == nil && val != tt.value { - t.Errorf("%d:%q[%q]==%q: was %v; want %v", i, tt.out, tt.key, tt.value, val, tt.value) - } - if len(tag.String()) <= 3 { - // Simulate a tag for which the string has not been set. - tag.str, tag.pExt, tag.pVariant = "", 0, 0 - if tag, err := tag.SetTypeForKey(tt.key, tt.value); err == nil { - if val := tag.TypeForKey(tt.key); err == nil && val != tt.value { - t.Errorf("%d:%q[%q]==%q: was %v; want %v", i, tt.out, tt.key, tt.value, val, tt.value) - } - } - } - } -} - -func TestFindKeyAndType(t *testing.T) { - // out is either the matched type in case of a match or the original - // string up till the insertion point. - tests := []struct { - key string - hasExt bool - in, out string - }{ - // Don't search past a private use extension. - {"co", false, "en-x-foo-u-co-pinyin", "en"}, - {"co", false, "x-foo-u-co-pinyin", ""}, - {"co", false, "en-s-fff-x-foo", "en-s-fff"}, - // Insertion points in absence of -u extension. - {"cu", false, "en", ""}, // t.str is "" - {"cu", false, "en-v-va", "en"}, - {"cu", false, "en-a-va", "en-a-va"}, - {"cu", false, "en-a-va-v-va", "en-a-va"}, - {"cu", false, "en-x-a", "en"}, - // Tags with the -u extension. - {"co", true, "en-u-co-standard", "standard"}, - {"co", true, "yue-u-co-pinyin", "pinyin"}, - {"co", true, "en-u-co-abc", "abc"}, - {"co", true, "en-u-co-abc-def", "abc-def"}, - {"co", true, "en-u-co-abc-def-x-foo", "abc-def"}, - {"co", true, "en-u-co-standard-nu-arab", "standard"}, - {"co", true, "yue-u-co-pinyin-nu-arab", "pinyin"}, - // Insertion points. - {"cu", true, "en-u-co-standard", "en-u-co-standard"}, - {"cu", true, "yue-u-co-pinyin-x-foo", "yue-u-co-pinyin"}, - {"cu", true, "en-u-co-abc", "en-u-co-abc"}, - {"cu", true, "en-u-nu-arabic", "en-u"}, - {"cu", true, "en-u-co-abc-def-nu-arabic", "en-u-co-abc-def"}, - } - for i, tt := range tests { - start, end, hasExt := Make(tt.in).findTypeForKey(tt.key) - if start != end { - res := tt.in[start:end] - if res != tt.out { - t.Errorf("%d:%s: was %q; want %q", i, tt.in, res, tt.out) - } - } else { - if hasExt != tt.hasExt { - t.Errorf("%d:%s: hasExt was %v; want %v", i, tt.in, hasExt, tt.hasExt) - continue - } - if tt.in[:start] != tt.out { - t.Errorf("%d:%s: insertion point was %q; want %q", i, tt.in, tt.in[:start], tt.out) - } - } - } -} - func TestParent(t *testing.T) { tests := []struct{ in, out string }{ // Strip variants and extensions first @@ -767,6 +649,19 @@ func TestParent(t *testing.T) { {"pt-MZ", "pt-PT"}, {"pt-ST", "pt-PT"}, {"pt-TL", "pt-PT"}, + + {"en-GB-u-co-phonebk-rg-uszzzz", "en-GB"}, + {"en-GB-u-rg-uszzzz", "en-GB"}, + {"en-US-u-va-posix", "en-US"}, + + // Difference between language and regional tag. + {"ca-ES-valencia", "ca-ES"}, + {"ca-ES-valencia-u-rg-ptzzzz", "ca-ES"}, + {"en-US-u-va-variant", "en-US"}, + {"en-u-va-variant", "en"}, + {"en-u-rg-gbzzzz", "en"}, + {"en-US-u-rg-gbzzzz", "en-US"}, + {"nl-US-u-rg-gbzzzz", "nl-US"}, } for _, tt := range tests { tag := Raw.MustParse(tt.in) diff --git a/vendor/golang.org/x/text/language/maketables.go b/vendor/golang.org/x/text/language/maketables.go deleted file mode 100644 index 107f992..0000000 --- a/vendor/golang.org/x/text/language/maketables.go +++ /dev/null @@ -1,1648 +0,0 @@ -// Copyright 2013 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 ignore - -// Language tag table generator. -// Data read from the web. - -package main - -import ( - "bufio" - "flag" - "fmt" - "io" - "io/ioutil" - "log" - "math" - "reflect" - "regexp" - "sort" - "strconv" - "strings" - - "golang.org/x/text/internal/gen" - "golang.org/x/text/internal/tag" - "golang.org/x/text/unicode/cldr" -) - -var ( - test = flag.Bool("test", - false, - "test existing tables; can be used to compare web data with package data.") - outputFile = flag.String("output", - "tables.go", - "output file for generated tables") -) - -var comment = []string{ - ` -lang holds an alphabetically sorted list of ISO-639 language identifiers. -All entries are 4 bytes. The index of the identifier (divided by 4) is the language tag. -For 2-byte language identifiers, the two successive bytes have the following meaning: - - if the first letter of the 2- and 3-letter ISO codes are the same: - the second and third letter of the 3-letter ISO code. - - otherwise: a 0 and a by 2 bits right-shifted index into altLangISO3. -For 3-byte language identifiers the 4th byte is 0.`, - ` -langNoIndex is a bit vector of all 3-letter language codes that are not used as an index -in lookup tables. The language ids for these language codes are derived directly -from the letters and are not consecutive.`, - ` -altLangISO3 holds an alphabetically sorted list of 3-letter language code alternatives -to 2-letter language codes that cannot be derived using the method described above. -Each 3-letter code is followed by its 1-byte langID.`, - ` -altLangIndex is used to convert indexes in altLangISO3 to langIDs.`, - ` -langAliasMap maps langIDs to their suggested replacements.`, - ` -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.`, - ` -isoRegionOffset needs to be added to the index of regionISO to obtain the regionID -for 2-letter ISO codes. (The first isoRegionOffset regionIDs are reserved for -the UN.M49 codes used for groups.)`, - ` -regionISO holds a list of alphabetically sorted 2-letter ISO region codes. -Each 2-letter codes is followed by two bytes with the following meaning: - - [A-Z}{2}: the first letter of the 2-letter code plus these two - letters form the 3-letter ISO code. - - 0, n: index into altRegionISO3.`, - ` -regionTypes defines the status of a region for various standards.`, - ` -m49 maps regionIDs to UN.M49 codes. The first isoRegionOffset entries are -codes indicating collections of regions.`, - ` -m49Index gives indexes into fromM49 based on the three most significant bits -of a 10-bit UN.M49 code. To search an UN.M49 code in fromM49, search in - fromM49[m49Index[msb39(code)]:m49Index[msb3(code)+1]] -for an entry where the first 7 bits match the 7 lsb of the UN.M49 code. -The region code is stored in the 9 lsb of the indexed value.`, - ` -fromM49 contains entries to map UN.M49 codes to regions. See m49Index for details.`, - ` -altRegionISO3 holds a list of 3-letter region codes that cannot be -mapped to 2-letter codes using the default algorithm. This is a short list.`, - ` -altRegionIDs holds a list of regionIDs the positions of which match those -of the 3-letter ISO codes in altRegionISO3.`, - ` -variantNumSpecialized is the number of specialized variants in variants.`, - ` -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.`, - ` -likelyLang is a lookup table, indexed by langID, for the most likely -scripts and regions given incomplete information. If more entries exist for a -given language, region and script are the index and size respectively -of the list in likelyLangList.`, - ` -likelyLangList holds lists info associated with likelyLang.`, - ` -likelyRegion is a lookup table, indexed by regionID, for the most likely -languages and scripts given incomplete information. If more entries exist -for a given regionID, lang and script are the index and size respectively -of the list in likelyRegionList. -TODO: exclude containers and user-definable regions from the list.`, - ` -likelyRegionList holds lists info associated with likelyRegion.`, - ` -likelyScript is a lookup table, indexed by scriptID, for the most likely -languages and regions given a script.`, - ` -matchLang holds pairs of langIDs of base languages that are typically -mutually intelligible. Each pair is associated with a confidence and -whether the intelligibility goes one or both ways.`, - ` -matchScript holds pairs of scriptIDs where readers of one script -can typically also read the other. Each is associated with a confidence.`, - ` -nRegionGroups is the number of region groups.`, - ` -regionInclusion maps region identifiers to sets of regions in regionInclusionBits, -where each set holds all groupings that are directly connected in a region -containment graph.`, - ` -regionInclusionBits is an array of bit vectors where every vector represents -a set of region groupings. These sets are used to compute the distance -between two regions for the purpose of language matching.`, - ` -regionInclusionNext marks, for each entry in regionInclusionBits, the set of -all groups that are reachable from the groups set in the respective entry.`, -} - -// TODO: consider changing some of these structures to tries. This can reduce -// memory, but may increase the need for memory allocations. This could be -// mitigated if we can piggyback on language tags for common cases. - -func failOnError(e error) { - if e != nil { - log.Panic(e) - } -} - -type setType int - -const ( - Indexed setType = 1 + iota // all elements must be of same size - Linear -) - -type stringSet struct { - s []string - sorted, frozen bool - - // We often need to update values after the creation of an index is completed. - // We include a convenience map for keeping track of this. - update map[string]string - typ setType // used for checking. -} - -func (ss *stringSet) clone() stringSet { - c := *ss - c.s = append([]string(nil), c.s...) - return c -} - -func (ss *stringSet) setType(t setType) { - if ss.typ != t && ss.typ != 0 { - log.Panicf("type %d cannot be assigned as it was already %d", t, ss.typ) - } -} - -// parse parses a whitespace-separated string and initializes ss with its -// components. -func (ss *stringSet) parse(s string) { - scan := bufio.NewScanner(strings.NewReader(s)) - scan.Split(bufio.ScanWords) - for scan.Scan() { - ss.add(scan.Text()) - } -} - -func (ss *stringSet) assertChangeable() { - if ss.frozen { - log.Panic("attempt to modify a frozen stringSet") - } -} - -func (ss *stringSet) add(s string) { - ss.assertChangeable() - ss.s = append(ss.s, s) - ss.sorted = ss.frozen -} - -func (ss *stringSet) freeze() { - ss.compact() - ss.frozen = true -} - -func (ss *stringSet) compact() { - if ss.sorted { - return - } - a := ss.s - sort.Strings(a) - k := 0 - for i := 1; i < len(a); i++ { - if a[k] != a[i] { - a[k+1] = a[i] - k++ - } - } - ss.s = a[:k+1] - ss.sorted = ss.frozen -} - -type funcSorter struct { - fn func(a, b string) bool - sort.StringSlice -} - -func (s funcSorter) Less(i, j int) bool { - return s.fn(s.StringSlice[i], s.StringSlice[j]) -} - -func (ss *stringSet) sortFunc(f func(a, b string) bool) { - ss.compact() - sort.Sort(funcSorter{f, sort.StringSlice(ss.s)}) -} - -func (ss *stringSet) remove(s string) { - ss.assertChangeable() - if i, ok := ss.find(s); ok { - copy(ss.s[i:], ss.s[i+1:]) - ss.s = ss.s[:len(ss.s)-1] - } -} - -func (ss *stringSet) replace(ol, nu string) { - ss.s[ss.index(ol)] = nu - ss.sorted = ss.frozen -} - -func (ss *stringSet) index(s string) int { - ss.setType(Indexed) - i, ok := ss.find(s) - if !ok { - if i < len(ss.s) { - log.Panicf("find: item %q is not in list. Closest match is %q.", s, ss.s[i]) - } - log.Panicf("find: item %q is not in list", s) - - } - return i -} - -func (ss *stringSet) find(s string) (int, bool) { - ss.compact() - i := sort.SearchStrings(ss.s, s) - return i, i != len(ss.s) && ss.s[i] == s -} - -func (ss *stringSet) slice() []string { - ss.compact() - return ss.s -} - -func (ss *stringSet) updateLater(v, key string) { - if ss.update == nil { - ss.update = map[string]string{} - } - ss.update[v] = key -} - -// join joins the string and ensures that all entries are of the same length. -func (ss *stringSet) join() string { - ss.setType(Indexed) - n := len(ss.s[0]) - for _, s := range ss.s { - if len(s) != n { - log.Panicf("join: not all entries are of the same length: %q", s) - } - } - ss.s = append(ss.s, strings.Repeat("\xff", n)) - return strings.Join(ss.s, "") -} - -// ianaEntry holds information for an entry in the IANA Language Subtag Repository. -// All types use the same entry. -// See http://tools.ietf.org/html/bcp47#section-5.1 for a description of the various -// fields. -type ianaEntry struct { - typ string - description []string - scope string - added string - preferred string - deprecated string - suppressScript string - macro string - prefix []string -} - -type builder struct { - w *gen.CodeWriter - hw io.Writer // MultiWriter for w and w.Hash - data *cldr.CLDR - supp *cldr.SupplementalData - - // indices - locale stringSet // common locales - lang stringSet // canonical language ids (2 or 3 letter ISO codes) with data - langNoIndex stringSet // 3-letter ISO codes with no associated data - script stringSet // 4-letter ISO codes - region stringSet // 2-letter ISO or 3-digit UN M49 codes - variant stringSet // 4-8-alphanumeric variant code. - - // Region codes that are groups with their corresponding group IDs. - groups map[int]index - - // langInfo - registry map[string]*ianaEntry -} - -type index uint - -func newBuilder(w *gen.CodeWriter) *builder { - r := gen.OpenCLDRCoreZip() - defer r.Close() - d := &cldr.Decoder{} - data, err := d.DecodeZip(r) - failOnError(err) - b := builder{ - w: w, - hw: io.MultiWriter(w, w.Hash), - data: data, - supp: data.Supplemental(), - } - b.parseRegistry() - return &b -} - -func (b *builder) parseRegistry() { - r := gen.OpenIANAFile("assignments/language-subtag-registry") - defer r.Close() - b.registry = make(map[string]*ianaEntry) - - scan := bufio.NewScanner(r) - scan.Split(bufio.ScanWords) - var record *ianaEntry - for more := scan.Scan(); more; { - key := scan.Text() - more = scan.Scan() - value := scan.Text() - switch key { - case "Type:": - record = &ianaEntry{typ: value} - case "Subtag:", "Tag:": - if s := strings.SplitN(value, "..", 2); len(s) > 1 { - for a := s[0]; a <= s[1]; a = inc(a) { - b.addToRegistry(a, record) - } - } else { - b.addToRegistry(value, record) - } - case "Suppress-Script:": - record.suppressScript = value - case "Added:": - record.added = value - case "Deprecated:": - record.deprecated = value - case "Macrolanguage:": - record.macro = value - case "Preferred-Value:": - record.preferred = value - case "Prefix:": - record.prefix = append(record.prefix, value) - case "Scope:": - record.scope = value - case "Description:": - buf := []byte(value) - for more = scan.Scan(); more; more = scan.Scan() { - b := scan.Bytes() - if b[0] == '%' || b[len(b)-1] == ':' { - break - } - buf = append(buf, ' ') - buf = append(buf, b...) - } - record.description = append(record.description, string(buf)) - continue - default: - continue - } - more = scan.Scan() - } - if scan.Err() != nil { - log.Panic(scan.Err()) - } -} - -func (b *builder) addToRegistry(key string, entry *ianaEntry) { - if info, ok := b.registry[key]; ok { - if info.typ != "language" || entry.typ != "extlang" { - log.Fatalf("parseRegistry: tag %q already exists", key) - } - } else { - b.registry[key] = entry - } -} - -var commentIndex = make(map[string]string) - -func init() { - for _, s := range comment { - key := strings.TrimSpace(strings.SplitN(s, " ", 2)[0]) - commentIndex[key] = s - } -} - -func (b *builder) comment(name string) { - if s := commentIndex[name]; len(s) > 0 { - b.w.WriteComment(s) - } else { - fmt.Fprintln(b.w) - } -} - -func (b *builder) pf(f string, x ...interface{}) { - fmt.Fprintf(b.hw, f, x...) - fmt.Fprint(b.hw, "\n") -} - -func (b *builder) p(x ...interface{}) { - fmt.Fprintln(b.hw, x...) -} - -func (b *builder) addSize(s int) { - b.w.Size += s - b.pf("// Size: %d bytes", s) -} - -func (b *builder) writeConst(name string, x interface{}) { - b.comment(name) - b.w.WriteConst(name, x) -} - -// writeConsts computes f(v) for all v in values and writes the results -// as constants named _v to a single constant block. -func (b *builder) writeConsts(f func(string) int, values ...string) { - b.pf("const (") - for _, v := range values { - b.pf("\t_%s = %v", v, f(v)) - } - b.pf(")") -} - -// writeType writes the type of the given value, which must be a struct. -func (b *builder) writeType(value interface{}) { - b.comment(reflect.TypeOf(value).Name()) - b.w.WriteType(value) -} - -func (b *builder) writeSlice(name string, ss interface{}) { - b.writeSliceAddSize(name, 0, ss) -} - -func (b *builder) writeSliceAddSize(name string, extraSize int, ss interface{}) { - b.comment(name) - b.w.Size += extraSize - v := reflect.ValueOf(ss) - t := v.Type().Elem() - b.pf("// Size: %d bytes, %d elements", v.Len()*int(t.Size())+extraSize, v.Len()) - - fmt.Fprintf(b.w, "var %s = ", name) - b.w.WriteArray(ss) - b.p() -} - -type fromTo struct { - from, to uint16 -} - -func (b *builder) writeSortedMap(name string, ss *stringSet, index func(s string) uint16) { - ss.sortFunc(func(a, b string) bool { - return index(a) < index(b) - }) - m := []fromTo{} - for _, s := range ss.s { - m = append(m, fromTo{index(s), index(ss.update[s])}) - } - b.writeSlice(name, m) -} - -const base = 'z' - 'a' + 1 - -func strToInt(s string) uint { - v := uint(0) - for i := 0; i < len(s); i++ { - v *= base - v += uint(s[i] - 'a') - } - return v -} - -// converts the given integer to the original ASCII string passed to strToInt. -// len(s) must match the number of characters obtained. -func intToStr(v uint, s []byte) { - for i := len(s) - 1; i >= 0; i-- { - s[i] = byte(v%base) + 'a' - v /= base - } -} - -func (b *builder) writeBitVector(name string, ss []string) { - vec := make([]uint8, int(math.Ceil(math.Pow(base, float64(len(ss[0])))/8))) - for _, s := range ss { - v := strToInt(s) - vec[v/8] |= 1 << (v % 8) - } - b.writeSlice(name, vec) -} - -// TODO: convert this type into a list or two-stage trie. -func (b *builder) writeMapFunc(name string, m map[string]string, f func(string) uint16) { - b.comment(name) - v := reflect.ValueOf(m) - sz := v.Len() * (2 + int(v.Type().Key().Size())) - for _, k := range m { - sz += len(k) - } - b.addSize(sz) - keys := []string{} - b.pf(`var %s = map[string]uint16{`, name) - for k := range m { - keys = append(keys, k) - } - sort.Strings(keys) - for _, k := range keys { - b.pf("\t%q: %v,", k, f(m[k])) - } - b.p("}") -} - -func (b *builder) writeMap(name string, m interface{}) { - b.comment(name) - v := reflect.ValueOf(m) - sz := v.Len() * (2 + int(v.Type().Key().Size()) + int(v.Type().Elem().Size())) - b.addSize(sz) - f := strings.FieldsFunc(fmt.Sprintf("%#v", m), func(r rune) bool { - return strings.IndexRune("{}, ", r) != -1 - }) - sort.Strings(f[1:]) - b.pf(`var %s = %s{`, name, f[0]) - for _, kv := range f[1:] { - b.pf("\t%s,", kv) - } - b.p("}") -} - -func (b *builder) langIndex(s string) uint16 { - if s == "und" { - return 0 - } - if i, ok := b.lang.find(s); ok { - return uint16(i) - } - return uint16(strToInt(s)) + uint16(len(b.lang.s)) -} - -// inc advances the string to its lexicographical successor. -func inc(s string) string { - const maxTagLength = 4 - var buf [maxTagLength]byte - intToStr(strToInt(strings.ToLower(s))+1, buf[:len(s)]) - for i := 0; i < len(s); i++ { - if s[i] <= 'Z' { - buf[i] -= 'a' - 'A' - } - } - return string(buf[:len(s)]) -} - -func (b *builder) parseIndices() { - meta := b.supp.Metadata - - for k, v := range b.registry { - var ss *stringSet - switch v.typ { - case "language": - if len(k) == 2 || v.suppressScript != "" || v.scope == "special" { - b.lang.add(k) - continue - } else { - ss = &b.langNoIndex - } - case "region": - ss = &b.region - case "script": - ss = &b.script - case "variant": - ss = &b.variant - default: - continue - } - ss.add(k) - } - // Include any language for which there is data. - for _, lang := range b.data.Locales() { - if x := b.data.RawLDML(lang); false || - x.LocaleDisplayNames != nil || - x.Characters != nil || - x.Delimiters != nil || - x.Measurement != nil || - x.Dates != nil || - x.Numbers != nil || - x.Units != nil || - x.ListPatterns != nil || - x.Collations != nil || - x.Segmentations != nil || - x.Rbnf != nil || - x.Annotations != nil || - x.Metadata != nil { - - from := strings.Split(lang, "_") - if lang := from[0]; lang != "root" { - b.lang.add(lang) - } - } - } - // Include locales for plural rules, which uses a different structure. - for _, plurals := range b.data.Supplemental().Plurals { - for _, rules := range plurals.PluralRules { - for _, lang := range strings.Split(rules.Locales, " ") { - if lang = strings.Split(lang, "_")[0]; lang != "root" { - b.lang.add(lang) - } - } - } - } - // Include languages in likely subtags. - for _, m := range b.supp.LikelySubtags.LikelySubtag { - from := strings.Split(m.From, "_") - b.lang.add(from[0]) - } - // Include ISO-639 alpha-3 bibliographic entries. - for _, a := range meta.Alias.LanguageAlias { - if a.Reason == "bibliographic" { - b.langNoIndex.add(a.Type) - } - } - // Include regions in territoryAlias (not all are in the IANA registry!) - for _, reg := range b.supp.Metadata.Alias.TerritoryAlias { - if len(reg.Type) == 2 { - b.region.add(reg.Type) - } - } - - for _, s := range b.lang.s { - if len(s) == 3 { - b.langNoIndex.remove(s) - } - } - b.writeConst("numLanguages", len(b.lang.slice())+len(b.langNoIndex.slice())) - b.writeConst("numScripts", len(b.script.slice())) - b.writeConst("numRegions", len(b.region.slice())) - - // Add dummy codes at the start of each list to represent "unspecified". - b.lang.add("---") - b.script.add("----") - b.region.add("---") - - // common locales - b.locale.parse(meta.DefaultContent.Locales) -} - -// TODO: region inclusion data will probably not be use used in future matchers. - -func (b *builder) computeRegionGroups() { - b.groups = make(map[int]index) - - // Create group indices. - for i := 1; b.region.s[i][0] < 'A'; i++ { // Base M49 indices on regionID. - b.groups[i] = index(len(b.groups)) - } - for _, g := range b.supp.TerritoryContainment.Group { - // Skip UN and EURO zone as they are flattening the containment - // relationship. - if g.Type == "EZ" || g.Type == "UN" { - continue - } - group := b.region.index(g.Type) - if _, ok := b.groups[group]; !ok { - b.groups[group] = index(len(b.groups)) - } - } - if len(b.groups) > 32 { - log.Fatalf("only 32 groups supported, found %d", len(b.groups)) - } - b.writeConst("nRegionGroups", len(b.groups)) -} - -var langConsts = []string{ - "af", "am", "ar", "az", "bg", "bn", "ca", "cs", "da", "de", "el", "en", "es", - "et", "fa", "fi", "fil", "fr", "gu", "he", "hi", "hr", "hu", "hy", "id", "is", - "it", "ja", "ka", "kk", "km", "kn", "ko", "ky", "lo", "lt", "lv", "mk", "ml", - "mn", "mo", "mr", "ms", "mul", "my", "nb", "ne", "nl", "no", "pa", "pl", "pt", - "ro", "ru", "sh", "si", "sk", "sl", "sq", "sr", "sv", "sw", "ta", "te", "th", - "tl", "tn", "tr", "uk", "ur", "uz", "vi", "zh", "zu", - - // constants for grandfathered tags (if not already defined) - "jbo", "ami", "bnn", "hak", "tlh", "lb", "nv", "pwn", "tao", "tay", "tsu", - "nn", "sfb", "vgt", "sgg", "cmn", "nan", "hsn", -} - -// writeLanguage generates all tables needed for language canonicalization. -func (b *builder) writeLanguage() { - meta := b.supp.Metadata - - b.writeConst("nonCanonicalUnd", b.lang.index("und")) - b.writeConsts(func(s string) int { return int(b.langIndex(s)) }, langConsts...) - b.writeConst("langPrivateStart", b.langIndex("qaa")) - b.writeConst("langPrivateEnd", b.langIndex("qtz")) - - // Get language codes that need to be mapped (overlong 3-letter codes, - // deprecated 2-letter codes, legacy and grandfathered tags.) - langAliasMap := stringSet{} - aliasTypeMap := map[string]langAliasType{} - - // altLangISO3 get the alternative ISO3 names that need to be mapped. - altLangISO3 := stringSet{} - // Add dummy start to avoid the use of index 0. - altLangISO3.add("---") - altLangISO3.updateLater("---", "aa") - - lang := b.lang.clone() - for _, a := range meta.Alias.LanguageAlias { - if a.Replacement == "" { - a.Replacement = "und" - } - // TODO: support mapping to tags - repl := strings.SplitN(a.Replacement, "_", 2)[0] - if a.Reason == "overlong" { - if len(a.Replacement) == 2 && len(a.Type) == 3 { - lang.updateLater(a.Replacement, a.Type) - } - } else if len(a.Type) <= 3 { - switch a.Reason { - case "macrolanguage": - aliasTypeMap[a.Type] = langMacro - case "deprecated": - // handled elsewhere - continue - case "bibliographic", "legacy": - if a.Type == "no" { - continue - } - aliasTypeMap[a.Type] = langLegacy - default: - log.Fatalf("new %s alias: %s", a.Reason, a.Type) - } - langAliasMap.add(a.Type) - langAliasMap.updateLater(a.Type, repl) - } - } - // Manually add the mapping of "nb" (Norwegian) to its macro language. - // This can be removed if CLDR adopts this change. - langAliasMap.add("nb") - langAliasMap.updateLater("nb", "no") - aliasTypeMap["nb"] = langMacro - - for k, v := range b.registry { - // Also add deprecated values for 3-letter ISO codes, which CLDR omits. - if v.typ == "language" && v.deprecated != "" && v.preferred != "" { - langAliasMap.add(k) - langAliasMap.updateLater(k, v.preferred) - aliasTypeMap[k] = langDeprecated - } - } - // Fix CLDR mappings. - lang.updateLater("tl", "tgl") - lang.updateLater("sh", "hbs") - lang.updateLater("mo", "mol") - lang.updateLater("no", "nor") - lang.updateLater("tw", "twi") - lang.updateLater("nb", "nob") - lang.updateLater("ak", "aka") - lang.updateLater("bh", "bih") - - // Ensure that each 2-letter code is matched with a 3-letter code. - for _, v := range lang.s[1:] { - s, ok := lang.update[v] - if !ok { - if s, ok = lang.update[langAliasMap.update[v]]; !ok { - continue - } - lang.update[v] = s - } - if v[0] != s[0] { - altLangISO3.add(s) - altLangISO3.updateLater(s, v) - } - } - - // Complete canonialized language tags. - lang.freeze() - for i, v := range lang.s { - // We can avoid these manual entries by using the IANI registry directly. - // Seems easier to update the list manually, as changes are rare. - // The panic in this loop will trigger if we miss an entry. - add := "" - if s, ok := lang.update[v]; ok { - if s[0] == v[0] { - add = s[1:] - } else { - add = string([]byte{0, byte(altLangISO3.index(s))}) - } - } else if len(v) == 3 { - add = "\x00" - } else { - log.Panicf("no data for long form of %q", v) - } - lang.s[i] += add - } - b.writeConst("lang", tag.Index(lang.join())) - - b.writeConst("langNoIndexOffset", len(b.lang.s)) - - // space of all valid 3-letter language identifiers. - b.writeBitVector("langNoIndex", b.langNoIndex.slice()) - - altLangIndex := []uint16{} - for i, s := range altLangISO3.slice() { - altLangISO3.s[i] += string([]byte{byte(len(altLangIndex))}) - if i > 0 { - idx := b.lang.index(altLangISO3.update[s]) - altLangIndex = append(altLangIndex, uint16(idx)) - } - } - b.writeConst("altLangISO3", tag.Index(altLangISO3.join())) - b.writeSlice("altLangIndex", altLangIndex) - - b.writeSortedMap("langAliasMap", &langAliasMap, b.langIndex) - types := make([]langAliasType, len(langAliasMap.s)) - for i, s := range langAliasMap.s { - types[i] = aliasTypeMap[s] - } - b.writeSlice("langAliasTypes", types) -} - -var scriptConsts = []string{ - "Latn", "Hani", "Hans", "Hant", "Qaaa", "Qaai", "Qabx", "Zinh", "Zyyy", - "Zzzz", -} - -func (b *builder) writeScript() { - b.writeConsts(b.script.index, scriptConsts...) - b.writeConst("script", tag.Index(b.script.join())) - - supp := make([]uint8, len(b.lang.slice())) - for i, v := range b.lang.slice()[1:] { - if sc := b.registry[v].suppressScript; sc != "" { - supp[i+1] = uint8(b.script.index(sc)) - } - } - b.writeSlice("suppressScript", supp) - - // There is only one deprecated script in CLDR. This value is hard-coded. - // We check here if the code must be updated. - for _, a := range b.supp.Metadata.Alias.ScriptAlias { - if a.Type != "Qaai" { - log.Panicf("unexpected deprecated stript %q", a.Type) - } - } -} - -func parseM49(s string) int16 { - if len(s) == 0 { - return 0 - } - v, err := strconv.ParseUint(s, 10, 10) - failOnError(err) - return int16(v) -} - -var regionConsts = []string{ - "001", "419", "BR", "CA", "ES", "GB", "MD", "PT", "UK", "US", - "ZZ", "XA", "XC", "XK", // Unofficial tag for Kosovo. -} - -func (b *builder) writeRegion() { - b.writeConsts(b.region.index, regionConsts...) - - isoOffset := b.region.index("AA") - m49map := make([]int16, len(b.region.slice())) - fromM49map := make(map[int16]int) - altRegionISO3 := "" - altRegionIDs := []uint16{} - - b.writeConst("isoRegionOffset", isoOffset) - - // 2-letter region lookup and mapping to numeric codes. - regionISO := b.region.clone() - regionISO.s = regionISO.s[isoOffset:] - regionISO.sorted = false - - regionTypes := make([]byte, len(b.region.s)) - - // Is the region valid BCP 47? - for s, e := range b.registry { - if len(s) == 2 && s == strings.ToUpper(s) { - i := b.region.index(s) - for _, d := range e.description { - if strings.Contains(d, "Private use") { - regionTypes[i] = iso3166UserAssgined - } - } - regionTypes[i] |= bcp47Region - } - } - - // Is the region a valid ccTLD? - r := gen.OpenIANAFile("domains/root/db") - defer r.Close() - - buf, err := ioutil.ReadAll(r) - failOnError(err) - re := regexp.MustCompile(`"/domains/root/db/([a-z]{2}).html"`) - for _, m := range re.FindAllSubmatch(buf, -1) { - i := b.region.index(strings.ToUpper(string(m[1]))) - regionTypes[i] |= ccTLD - } - - b.writeSlice("regionTypes", regionTypes) - - iso3Set := make(map[string]int) - update := func(iso2, iso3 string) { - i := regionISO.index(iso2) - if j, ok := iso3Set[iso3]; !ok && iso3[0] == iso2[0] { - regionISO.s[i] += iso3[1:] - iso3Set[iso3] = -1 - } else { - if ok && j >= 0 { - regionISO.s[i] += string([]byte{0, byte(j)}) - } else { - iso3Set[iso3] = len(altRegionISO3) - regionISO.s[i] += string([]byte{0, byte(len(altRegionISO3))}) - altRegionISO3 += iso3 - altRegionIDs = append(altRegionIDs, uint16(isoOffset+i)) - } - } - } - for _, tc := range b.supp.CodeMappings.TerritoryCodes { - i := regionISO.index(tc.Type) + isoOffset - if d := m49map[i]; d != 0 { - log.Panicf("%s found as a duplicate UN.M49 code of %03d", tc.Numeric, d) - } - m49 := parseM49(tc.Numeric) - m49map[i] = m49 - if r := fromM49map[m49]; r == 0 { - fromM49map[m49] = i - } else if r != i { - dep := b.registry[regionISO.s[r-isoOffset]].deprecated - if t := b.registry[tc.Type]; t != nil && dep != "" && (t.deprecated == "" || t.deprecated > dep) { - fromM49map[m49] = i - } - } - } - for _, ta := range b.supp.Metadata.Alias.TerritoryAlias { - if len(ta.Type) == 3 && ta.Type[0] <= '9' && len(ta.Replacement) == 2 { - from := parseM49(ta.Type) - if r := fromM49map[from]; r == 0 { - fromM49map[from] = regionISO.index(ta.Replacement) + isoOffset - } - } - } - for _, tc := range b.supp.CodeMappings.TerritoryCodes { - if len(tc.Alpha3) == 3 { - update(tc.Type, tc.Alpha3) - } - } - // This entries are not included in territoryCodes. Mostly 3-letter variants - // of deleted codes and an entry for QU. - for _, m := range []struct{ iso2, iso3 string }{ - {"CT", "CTE"}, - {"DY", "DHY"}, - {"HV", "HVO"}, - {"JT", "JTN"}, - {"MI", "MID"}, - {"NH", "NHB"}, - {"NQ", "ATN"}, - {"PC", "PCI"}, - {"PU", "PUS"}, - {"PZ", "PCZ"}, - {"RH", "RHO"}, - {"VD", "VDR"}, - {"WK", "WAK"}, - // These three-letter codes are used for others as well. - {"FQ", "ATF"}, - } { - update(m.iso2, m.iso3) - } - for i, s := range regionISO.s { - if len(s) != 4 { - regionISO.s[i] = s + " " - } - } - b.writeConst("regionISO", tag.Index(regionISO.join())) - b.writeConst("altRegionISO3", altRegionISO3) - b.writeSlice("altRegionIDs", altRegionIDs) - - // Create list of deprecated regions. - // TODO: consider inserting SF -> FI. Not included by CLDR, but is the only - // Transitionally-reserved mapping not included. - regionOldMap := stringSet{} - // Include regions in territoryAlias (not all are in the IANA registry!) - for _, reg := range b.supp.Metadata.Alias.TerritoryAlias { - if len(reg.Type) == 2 && reg.Reason == "deprecated" && len(reg.Replacement) == 2 { - regionOldMap.add(reg.Type) - regionOldMap.updateLater(reg.Type, reg.Replacement) - i, _ := regionISO.find(reg.Type) - j, _ := regionISO.find(reg.Replacement) - if k := m49map[i+isoOffset]; k == 0 { - m49map[i+isoOffset] = m49map[j+isoOffset] - } - } - } - b.writeSortedMap("regionOldMap", ®ionOldMap, func(s string) uint16 { - return uint16(b.region.index(s)) - }) - // 3-digit region lookup, groupings. - for i := 1; i < isoOffset; i++ { - m := parseM49(b.region.s[i]) - m49map[i] = m - fromM49map[m] = i - } - b.writeSlice("m49", m49map) - - const ( - searchBits = 7 - regionBits = 9 - ) - if len(m49map) >= 1< %d", len(m49map), 1<>searchBits] = int16(len(fromM49)) - } - b.writeSlice("m49Index", m49Index) - b.writeSlice("fromM49", fromM49) -} - -const ( - // TODO: put these lists in regionTypes as user data? Could be used for - // various optimizations and refinements and could be exposed in the API. - iso3166Except = "AC CP DG EA EU FX IC SU TA UK" - iso3166Trans = "AN BU CS NT TP YU ZR" // SF is not in our set of Regions. - // DY and RH are actually not deleted, but indeterminately reserved. - iso3166DelCLDR = "CT DD DY FQ HV JT MI NH NQ PC PU PZ RH VD WK YD" -) - -const ( - iso3166UserAssgined = 1 << iota - ccTLD - bcp47Region -) - -func find(list []string, s string) int { - for i, t := range list { - if t == s { - return i - } - } - return -1 -} - -// writeVariants generates per-variant information and creates a map from variant -// name to index value. We assign index values such that sorting multiple -// variants by index value will result in the correct order. -// There are two types of variants: specialized and general. Specialized variants -// are only applicable to certain language or language-script pairs. Generalized -// variants apply to any language. Generalized variants always sort after -// specialized variants. We will therefore always assign a higher index value -// to a generalized variant than any other variant. Generalized variants are -// sorted alphabetically among themselves. -// Specialized variants may also sort after other specialized variants. Such -// variants will be ordered after any of the variants they may follow. -// We assume that if a variant x is followed by a variant y, then for any prefix -// p of x, p-x is a prefix of y. This allows us to order tags based on the -// maximum of the length of any of its prefixes. -// TODO: it is possible to define a set of Prefix values on variants such that -// a total order cannot be defined to the point that this algorithm breaks. -// In other words, we cannot guarantee the same order of variants for the -// future using the same algorithm or for non-compliant combinations of -// variants. For this reason, consider using simple alphabetic sorting -// of variants and ignore Prefix restrictions altogether. -func (b *builder) writeVariant() { - generalized := stringSet{} - specialized := stringSet{} - specializedExtend := stringSet{} - // Collate the variants by type and check assumptions. - for _, v := range b.variant.slice() { - e := b.registry[v] - if len(e.prefix) == 0 { - generalized.add(v) - continue - } - c := strings.Split(e.prefix[0], "-") - hasScriptOrRegion := false - if len(c) > 1 { - _, hasScriptOrRegion = b.script.find(c[1]) - if !hasScriptOrRegion { - _, hasScriptOrRegion = b.region.find(c[1]) - - } - } - if len(c) == 1 || len(c) == 2 && hasScriptOrRegion { - // Variant is preceded by a language. - specialized.add(v) - continue - } - // Variant is preceded by another variant. - specializedExtend.add(v) - prefix := c[0] + "-" - if hasScriptOrRegion { - prefix += c[1] - } - for _, p := range e.prefix { - // Verify that the prefix minus the last element is a prefix of the - // predecessor element. - i := strings.LastIndex(p, "-") - pred := b.registry[p[i+1:]] - if find(pred.prefix, p[:i]) < 0 { - log.Fatalf("prefix %q for variant %q not consistent with predecessor spec", p, v) - } - // The sorting used below does not work in the general case. It works - // if we assume that variants that may be followed by others only have - // prefixes of the same length. Verify this. - count := strings.Count(p[:i], "-") - for _, q := range pred.prefix { - if c := strings.Count(q, "-"); c != count { - log.Fatalf("variant %q preceding %q has a prefix %q of size %d; want %d", p[i+1:], v, q, c, count) - } - } - if !strings.HasPrefix(p, prefix) { - log.Fatalf("prefix %q of variant %q should start with %q", p, v, prefix) - } - } - } - - // Sort extended variants. - a := specializedExtend.s - less := func(v, w string) bool { - // Sort by the maximum number of elements. - maxCount := func(s string) (max int) { - for _, p := range b.registry[s].prefix { - if c := strings.Count(p, "-"); c > max { - max = c - } - } - return - } - if cv, cw := maxCount(v), maxCount(w); cv != cw { - return cv < cw - } - // Sort by name as tie breaker. - return v < w - } - sort.Sort(funcSorter{less, sort.StringSlice(a)}) - specializedExtend.frozen = true - - // Create index from variant name to index. - variantIndex := make(map[string]uint8) - add := func(s []string) { - for _, v := range s { - variantIndex[v] = uint8(len(variantIndex)) - } - } - add(specialized.slice()) - add(specializedExtend.s) - numSpecialized := len(variantIndex) - add(generalized.slice()) - if n := len(variantIndex); n > 255 { - log.Fatalf("maximum number of variants exceeded: was %d; want <= 255", n) - } - b.writeMap("variantIndex", variantIndex) - b.writeConst("variantNumSpecialized", numSpecialized) -} - -func (b *builder) writeLanguageInfo() { -} - -// writeLikelyData writes tables that are used both for finding parent relations and for -// language matching. Each entry contains additional bits to indicate the status of the -// data to know when it cannot be used for parent relations. -func (b *builder) writeLikelyData() { - const ( - isList = 1 << iota - scriptInFrom - regionInFrom - ) - type ( // generated types - likelyScriptRegion struct { - region uint16 - script uint8 - flags uint8 - } - likelyLangScript struct { - lang uint16 - script uint8 - flags uint8 - } - likelyLangRegion struct { - lang uint16 - region uint16 - } - // likelyTag is used for getting likely tags for group regions, where - // the likely region might be a region contained in the group. - likelyTag struct { - lang uint16 - region uint16 - script uint8 - } - ) - var ( // generated variables - likelyRegionGroup = make([]likelyTag, len(b.groups)) - likelyLang = make([]likelyScriptRegion, len(b.lang.s)) - likelyRegion = make([]likelyLangScript, len(b.region.s)) - likelyScript = make([]likelyLangRegion, len(b.script.s)) - likelyLangList = []likelyScriptRegion{} - likelyRegionList = []likelyLangScript{} - ) - type fromTo struct { - from, to []string - } - langToOther := map[int][]fromTo{} - regionToOther := map[int][]fromTo{} - for _, m := range b.supp.LikelySubtags.LikelySubtag { - from := strings.Split(m.From, "_") - to := strings.Split(m.To, "_") - if len(to) != 3 { - log.Fatalf("invalid number of subtags in %q: found %d, want 3", m.To, len(to)) - } - if len(from) > 3 { - log.Fatalf("invalid number of subtags: found %d, want 1-3", len(from)) - } - if from[0] != to[0] && from[0] != "und" { - log.Fatalf("unexpected language change in expansion: %s -> %s", from, to) - } - if len(from) == 3 { - if from[2] != to[2] { - log.Fatalf("unexpected region change in expansion: %s -> %s", from, to) - } - if from[0] != "und" { - log.Fatalf("unexpected fully specified from tag: %s -> %s", from, to) - } - } - if len(from) == 1 || from[0] != "und" { - id := 0 - if from[0] != "und" { - id = b.lang.index(from[0]) - } - langToOther[id] = append(langToOther[id], fromTo{from, to}) - } else if len(from) == 2 && len(from[1]) == 4 { - sid := b.script.index(from[1]) - likelyScript[sid].lang = uint16(b.langIndex(to[0])) - likelyScript[sid].region = uint16(b.region.index(to[2])) - } else { - r := b.region.index(from[len(from)-1]) - if id, ok := b.groups[r]; ok { - if from[0] != "und" { - log.Fatalf("region changed unexpectedly: %s -> %s", from, to) - } - likelyRegionGroup[id].lang = uint16(b.langIndex(to[0])) - likelyRegionGroup[id].script = uint8(b.script.index(to[1])) - likelyRegionGroup[id].region = uint16(b.region.index(to[2])) - } else { - regionToOther[r] = append(regionToOther[r], fromTo{from, to}) - } - } - } - b.writeType(likelyLangRegion{}) - b.writeSlice("likelyScript", likelyScript) - - for id := range b.lang.s { - list := langToOther[id] - if len(list) == 1 { - likelyLang[id].region = uint16(b.region.index(list[0].to[2])) - likelyLang[id].script = uint8(b.script.index(list[0].to[1])) - } else if len(list) > 1 { - likelyLang[id].flags = isList - likelyLang[id].region = uint16(len(likelyLangList)) - likelyLang[id].script = uint8(len(list)) - for _, x := range list { - flags := uint8(0) - if len(x.from) > 1 { - if x.from[1] == x.to[2] { - flags = regionInFrom - } else { - flags = scriptInFrom - } - } - likelyLangList = append(likelyLangList, likelyScriptRegion{ - region: uint16(b.region.index(x.to[2])), - script: uint8(b.script.index(x.to[1])), - flags: flags, - }) - } - } - } - // TODO: merge suppressScript data with this table. - b.writeType(likelyScriptRegion{}) - b.writeSlice("likelyLang", likelyLang) - b.writeSlice("likelyLangList", likelyLangList) - - for id := range b.region.s { - list := regionToOther[id] - if len(list) == 1 { - likelyRegion[id].lang = uint16(b.langIndex(list[0].to[0])) - likelyRegion[id].script = uint8(b.script.index(list[0].to[1])) - if len(list[0].from) > 2 { - likelyRegion[id].flags = scriptInFrom - } - } else if len(list) > 1 { - likelyRegion[id].flags = isList - likelyRegion[id].lang = uint16(len(likelyRegionList)) - likelyRegion[id].script = uint8(len(list)) - for i, x := range list { - if len(x.from) == 2 && i != 0 || i > 0 && len(x.from) != 3 { - log.Fatalf("unspecified script must be first in list: %v at %d", x.from, i) - } - x := likelyLangScript{ - lang: uint16(b.langIndex(x.to[0])), - script: uint8(b.script.index(x.to[1])), - } - if len(list[0].from) > 2 { - x.flags = scriptInFrom - } - likelyRegionList = append(likelyRegionList, x) - } - } - } - b.writeType(likelyLangScript{}) - b.writeSlice("likelyRegion", likelyRegion) - b.writeSlice("likelyRegionList", likelyRegionList) - - b.writeType(likelyTag{}) - b.writeSlice("likelyRegionGroup", likelyRegionGroup) -} - -type mutualIntelligibility struct { - want, have uint16 - conf uint8 - oneway bool -} - -type scriptIntelligibility struct { - lang uint16 // langID or 0 if * - want, have uint8 - conf uint8 -} - -type sortByConf []mutualIntelligibility - -func (l sortByConf) Less(a, b int) bool { - return l[a].conf > l[b].conf -} - -func (l sortByConf) Swap(a, b int) { - l[a], l[b] = l[b], l[a] -} - -func (l sortByConf) Len() int { - return len(l) -} - -// toConf converts a percentage value [0, 100] to a confidence class. -func toConf(pct uint8) uint8 { - switch { - case pct == 100: - return 3 // Exact - case pct >= 90: - return 2 // High - case pct > 50: - return 1 // Low - default: - return 0 // No - } -} - -// writeMatchData writes tables with languages and scripts for which there is -// mutual intelligibility. The data is based on CLDR's languageMatching data. -// Note that we use a different algorithm than the one defined by CLDR and that -// we slightly modify the data. For example, we convert scores to confidence levels. -// We also drop all region-related data as we use a different algorithm to -// determine region equivalence. -func (b *builder) writeMatchData() { - b.writeType(mutualIntelligibility{}) - b.writeType(scriptIntelligibility{}) - lm := b.supp.LanguageMatching.LanguageMatches - cldr.MakeSlice(&lm).SelectAnyOf("type", "written") - - matchLang := []mutualIntelligibility{} - matchScript := []scriptIntelligibility{} - // Convert the languageMatch entries in lists keyed by desired language. - for _, m := range lm[0].LanguageMatch { - // Different versions of CLDR use different separators. - desired := strings.Replace(m.Desired, "-", "_", -1) - supported := strings.Replace(m.Supported, "-", "_", -1) - d := strings.Split(desired, "_") - s := strings.Split(supported, "_") - if len(d) != len(s) || len(d) > 2 { - // Skip all entries with regions and work around CLDR bug. - continue - } - pct, _ := strconv.ParseInt(m.Percent, 10, 8) - if len(d) == 2 && d[0] == s[0] && len(d[1]) == 4 { - // language-script pair. - lang := uint16(0) - if d[0] != "*" { - lang = uint16(b.langIndex(d[0])) - } - matchScript = append(matchScript, scriptIntelligibility{ - lang: lang, - want: uint8(b.script.index(d[1])), - have: uint8(b.script.index(s[1])), - conf: toConf(uint8(pct)), - }) - if m.Oneway != "true" { - matchScript = append(matchScript, scriptIntelligibility{ - lang: lang, - want: uint8(b.script.index(s[1])), - have: uint8(b.script.index(d[1])), - conf: toConf(uint8(pct)), - }) - } - } else if len(d) == 1 && d[0] != "*" { - if pct == 100 { - // nb == no is already handled by macro mapping. Check there - // really is only this case. - if d[0] != "no" || s[0] != "nb" { - log.Fatalf("unhandled equivalence %s == %s", s[0], d[0]) - } - continue - } - matchLang = append(matchLang, mutualIntelligibility{ - want: uint16(b.langIndex(d[0])), - have: uint16(b.langIndex(s[0])), - conf: uint8(pct), - oneway: m.Oneway == "true", - }) - } else { - // TODO: Handle other mappings. - a := []string{"*;*", "*_*;*_*", "es_MX;es_419"} - s := strings.Join([]string{desired, supported}, ";") - if i := sort.SearchStrings(a, s); i == len(a) || a[i] != s { - log.Printf("%q not handled", s) - } - } - } - sort.Stable(sortByConf(matchLang)) - // collapse percentage into confidence classes - for i, m := range matchLang { - matchLang[i].conf = toConf(m.conf) - } - b.writeSlice("matchLang", matchLang) - b.writeSlice("matchScript", matchScript) -} - -func (b *builder) writeRegionInclusionData() { - var ( - // mm holds for each group the set of groups with a distance of 1. - mm = make(map[int][]index) - - // containment holds for each group the transitive closure of - // containment of other groups. - containment = make(map[index][]index) - ) - for _, g := range b.supp.TerritoryContainment.Group { - // Skip UN and EURO zone as they are flattening the containment - // relationship. - if g.Type == "EZ" || g.Type == "UN" { - continue - } - group := b.region.index(g.Type) - groupIdx := b.groups[group] - for _, mem := range strings.Split(g.Contains, " ") { - r := b.region.index(mem) - mm[r] = append(mm[r], groupIdx) - if g, ok := b.groups[r]; ok { - mm[group] = append(mm[group], g) - containment[groupIdx] = append(containment[groupIdx], g) - } - } - } - - regionContainment := make([]uint32, len(b.groups)) - for _, g := range b.groups { - l := containment[g] - - // Compute the transitive closure of containment. - for i := 0; i < len(l); i++ { - l = append(l, containment[l[i]]...) - } - - // Compute the bitmask. - regionContainment[g] = 1 << g - for _, v := range l { - regionContainment[g] |= 1 << v - } - // log.Printf("%d: %X", g, regionContainment[g]) - } - b.writeSlice("regionContainment", regionContainment) - - regionInclusion := make([]uint8, len(b.region.s)) - bvs := make(map[uint32]index) - // Make the first bitvector positions correspond with the groups. - for r, i := range b.groups { - bv := uint32(1 << i) - for _, g := range mm[r] { - bv |= 1 << g - } - bvs[bv] = i - regionInclusion[r] = uint8(bvs[bv]) - } - for r := 1; r < len(b.region.s); r++ { - if _, ok := b.groups[r]; !ok { - bv := uint32(0) - for _, g := range mm[r] { - bv |= 1 << g - } - if bv == 0 { - // Pick the world for unspecified regions. - bv = 1 << b.groups[b.region.index("001")] - } - if _, ok := bvs[bv]; !ok { - bvs[bv] = index(len(bvs)) - } - regionInclusion[r] = uint8(bvs[bv]) - } - } - b.writeSlice("regionInclusion", regionInclusion) - regionInclusionBits := make([]uint32, len(bvs)) - for k, v := range bvs { - regionInclusionBits[v] = uint32(k) - } - // Add bit vectors for increasingly large distances until a fixed point is reached. - regionInclusionNext := []uint8{} - for i := 0; i < len(regionInclusionBits); i++ { - bits := regionInclusionBits[i] - next := bits - for i := uint(0); i < uint(len(b.groups)); i++ { - if bits&(1< 0 { + b := language.Builder{} + b.SetTag(tt) + for _, e := range e { + b.AddExt(e) } - return t, nil + tt = b.Make() } - return t, ErrMissingLikelyTagsData + return makeTag(tt), index, c } -func (t *Tag) setTagsFrom(id Tag) { - t.lang = id.lang - t.script = id.script - t.region = id.region -} +// ErrMissingLikelyTagsData indicates no information was available +// to compute likely values of missing tags. +var ErrMissingLikelyTagsData = errors.New("missing likely tags data") -// minimize removes the region or script subtags from t such that -// t.addLikelySubtags() == t.minimize().addLikelySubtags(). -func (t Tag) minimize() (Tag, error) { - t, err := minimizeTags(t) - if err != nil { - return t, err - } - t.remakeString() - return t, nil -} - -// minimizeTags mimics the behavior of the ICU 51 C implementation. -func minimizeTags(t Tag) (Tag, error) { - if t.equalTags(und) { - return t, nil - } - max, err := addTags(t) - if err != nil { - return t, err - } - for _, id := range [...]Tag{ - {lang: t.lang}, - {lang: t.lang, region: t.region}, - {lang: t.lang, script: t.script}, - } { - if x, err := addTags(id); err == nil && max.equalTags(x) { - t.setTagsFrom(id) - break - } - } - return t, nil -} +// func (t *Tag) setTagsFrom(id Tag) { +// t.LangID = id.LangID +// t.ScriptID = id.ScriptID +// t.RegionID = id.RegionID +// } // Tag Matching // CLDR defines an algorithm for finding the best match between two sets of language @@ -300,8 +166,9 @@ func minimizeTags(t Tag) (Tag, error) { // 1) compute the match between the two tags. // 2) if the match is better than the previous best match, replace it // with the new match. (see next section) -// b) if the current best match is above a certain threshold, return this -// match without proceeding to the next tag in "desired". [See Note 1] +// b) if the current best match is Exact and pin is true the result will be +// frozen to the language found thusfar, although better matches may +// still be found for the same language. // 3) If the best match so far is below a certain threshold, return "default". // // Ranking: @@ -350,9 +217,6 @@ func minimizeTags(t Tag) (Tag, error) { // found wins. // // Notes: -// [1] Note that even if we may not have a perfect match, if a match is above a -// certain threshold, it is considered a better match than any other match -// to a tag later in the list of preferred language tags. // [2] In practice, as matching of Exact is done in a separate phase from // matching the other levels, we reuse the Exact level to mean MaxExact in // the second phase. As a consequence, we only need the levels defined by @@ -388,22 +252,24 @@ func minimizeTags(t Tag) (Tag, error) { // matcher keeps a set of supported language tags, indexed by language. type matcher struct { - default_ *haveTag - index map[langID]*matchHeader - passSettings bool + default_ *haveTag + supported []*haveTag + index map[language.Language]*matchHeader + passSettings bool + preferSameScript bool } // matchHeader has the lists of tags for exact matches and matches based on // maximized and canonicalized tags for a given language. type matchHeader struct { - exact []*haveTag - max []*haveTag + haveTags []*haveTag + original bool } // haveTag holds a supported Tag and its maximized script and region. The maximized // or canonicalized language is not stored as it is not needed during matching. type haveTag struct { - tag Tag + tag language.Tag // index of this tag in the original list of supported tags. index int @@ -413,35 +279,37 @@ type haveTag struct { conf Confidence // Maximized region and script. - maxRegion regionID - maxScript scriptID + maxRegion language.Region + maxScript language.Script // altScript may be checked as an alternative match to maxScript. If altScript // matches, the confidence level for this match is Low. Theoretically there // could be multiple alternative scripts. This does not occur in practice. - altScript scriptID + altScript language.Script // nextMax is the index of the next haveTag with the same maximized tags. nextMax uint16 } -func makeHaveTag(tag Tag, index int) (haveTag, langID) { +func makeHaveTag(tag language.Tag, index int) (haveTag, language.Language) { max := tag - if tag.lang != 0 { - max, _ = max.canonicalize(All) - max, _ = addTags(max) - max.remakeString() + if tag.LangID != 0 || tag.RegionID != 0 || tag.ScriptID != 0 { + max, _ = canonicalize(All, max) + max, _ = max.Maximize() + max.RemakeString() } - return haveTag{tag, index, Exact, max.region, max.script, altScript(max.lang, max.script), 0}, max.lang + return haveTag{tag, index, Exact, max.RegionID, max.ScriptID, altScript(max.LangID, max.ScriptID), 0}, max.LangID } // altScript returns an alternative script that may match the given script with // a low confidence. At the moment, the langMatch data allows for at most one // script to map to another and we rely on this to keep the code simple. -func altScript(l langID, s scriptID) scriptID { +func altScript(l language.Language, s language.Script) language.Script { for _, alt := range matchScript { - if (alt.lang == 0 || langID(alt.lang) == l) && scriptID(alt.have) == s { - return scriptID(alt.want) + // TODO: also match cases where language is not the same. + if (language.Language(alt.wantLang) == l || language.Language(alt.haveLang) == l) && + language.Script(alt.haveScript) == s { + return language.Script(alt.wantScript) } } return 0 @@ -450,34 +318,32 @@ func altScript(l langID, s scriptID) scriptID { // addIfNew adds a haveTag to the list of tags only if it is a unique tag. // Tags that have the same maximized values are linked by index. func (h *matchHeader) addIfNew(n haveTag, exact bool) { + h.original = h.original || exact // Don't add new exact matches. - for _, v := range h.exact { - if v.tag.equalsRest(n.tag) { + for _, v := range h.haveTags { + if equalsRest(v.tag, n.tag) { return } } - if exact { - h.exact = append(h.exact, &n) - } // Allow duplicate maximized tags, but create a linked list to allow quickly // comparing the equivalents and bail out. - for i, v := range h.max { + for i, v := range h.haveTags { if v.maxScript == n.maxScript && v.maxRegion == n.maxRegion && - v.tag.variantOrPrivateTagStr() == n.tag.variantOrPrivateTagStr() { - for h.max[i].nextMax != 0 { - i = int(h.max[i].nextMax) + v.tag.VariantOrPrivateUseTags() == n.tag.VariantOrPrivateUseTags() { + for h.haveTags[i].nextMax != 0 { + i = int(h.haveTags[i].nextMax) } - h.max[i].nextMax = uint16(len(h.max)) + h.haveTags[i].nextMax = uint16(len(h.haveTags)) break } } - h.max = append(h.max, &n) + h.haveTags = append(h.haveTags, &n) } // header returns the matchHeader for the given language. It creates one if // it doesn't already exist. -func (m *matcher) header(l langID) *matchHeader { +func (m *matcher) header(l language.Language) *matchHeader { if h := m.index[l]; h != nil { return h } @@ -486,12 +352,26 @@ func (m *matcher) header(l langID) *matchHeader { return h } +func toConf(d uint8) Confidence { + if d <= 10 { + return High + } + if d < 30 { + return Low + } + return No +} + // newMatcher builds an index for the given supported tags and returns it as // a matcher. It also expands the index by considering various equivalence classes // for a given tag. -func newMatcher(supported []Tag) *matcher { +func newMatcher(supported []Tag, options []MatchOption) *matcher { m := &matcher{ - index: make(map[langID]*matchHeader), + index: make(map[language.Language]*matchHeader), + preferSameScript: true, + } + for _, o := range options { + o(m) } if len(supported) == 0 { m.default_ = &haveTag{} @@ -500,36 +380,41 @@ func newMatcher(supported []Tag) *matcher { // Add supported languages to the index. Add exact matches first to give // them precedence. for i, tag := range supported { - pair, _ := makeHaveTag(tag, i) - m.header(tag.lang).addIfNew(pair, true) - } - m.default_ = m.header(supported[0].lang).exact[0] + tt := tag.tag() + pair, _ := makeHaveTag(tt, i) + m.header(tt.LangID).addIfNew(pair, true) + m.supported = append(m.supported, &pair) + } + m.default_ = m.header(supported[0].lang()).haveTags[0] + // Keep these in two different loops to support the case that two equivalent + // languages are distinguished, such as iw and he. for i, tag := range supported { - pair, max := makeHaveTag(tag, i) - if max != tag.lang { - m.header(max).addIfNew(pair, false) + tt := tag.tag() + pair, max := makeHaveTag(tt, i) + if max != tt.LangID { + m.header(max).addIfNew(pair, true) } } // update is used to add indexes in the map for equivalent languages. - // If force is true, the update will also apply to derived entries. To - // avoid applying a "transitive closure", use false. - update := func(want, have uint16, conf Confidence, force bool) { - if hh := m.index[langID(have)]; hh != nil { - if !force && len(hh.exact) == 0 { + // update will only add entries to original indexes, thus not computing any + // transitive relations. + update := func(want, have uint16, conf Confidence) { + if hh := m.index[language.Language(have)]; hh != nil { + if !hh.original { return } - hw := m.header(langID(want)) - for _, ht := range hh.max { + hw := m.header(language.Language(want)) + for _, ht := range hh.haveTags { v := *ht if conf < v.conf { v.conf = conf } v.nextMax = 0 // this value needs to be recomputed if v.altScript != 0 { - v.altScript = altScript(langID(want), v.maxScript) + v.altScript = altScript(language.Language(want), v.maxScript) } - hw.addIfNew(v, conf == Exact && len(hh.exact) > 0) + hw.addIfNew(v, conf == Exact && hh.original) } } } @@ -537,9 +422,9 @@ func newMatcher(supported []Tag) *matcher { // Add entries for languages with mutual intelligibility as defined by CLDR's // languageMatch data. for _, ml := range matchLang { - update(ml.want, ml.have, Confidence(ml.conf), false) + update(ml.want, ml.have, toConf(ml.distance)) if !ml.oneway { - update(ml.have, ml.want, Confidence(ml.conf), false) + update(ml.have, ml.want, toConf(ml.distance)) } } @@ -548,126 +433,157 @@ func newMatcher(supported []Tag) *matcher { // First we match deprecated equivalents. If they are perfect equivalents // (their canonicalization simply substitutes a different language code, but // nothing else), the match confidence is Exact, otherwise it is High. - for i, lm := range langAliasMap { - if lm.from == _sh { - continue - } - + for i, lm := range language.AliasMap { // If deprecated codes match and there is no fiddling with the script or // or region, we consider it an exact match. conf := Exact - if langAliasTypes[i] != langMacro { - if !isExactEquivalent(langID(lm.from)) { + if language.AliasTypes[i] != language.Macro { + if !isExactEquivalent(language.Language(lm.From)) { conf = High } - update(lm.to, lm.from, conf, true) + update(lm.To, lm.From, conf) } - update(lm.from, lm.to, conf, true) + update(lm.From, lm.To, conf) } return m } // getBest gets the best matching tag in m for any of the given tags, taking into // account the order of preference of the given tags. -func (m *matcher) getBest(want ...Tag) (got *haveTag, orig Tag, c Confidence) { +func (m *matcher) getBest(want ...Tag) (got *haveTag, orig language.Tag, c Confidence) { best := bestMatch{} - for _, w := range want { - var max Tag + for i, ww := range want { + w := ww.tag() + var max language.Tag // Check for exact match first. - h := m.index[w.lang] - if w.lang != 0 { - // Base language is defined. + h := m.index[w.LangID] + if w.LangID != 0 { if h == nil { continue } - for i := range h.exact { - have := h.exact[i] - if have.tag.equalsRest(w) { - return have, w, Exact - } + // Base language is defined. + max, _ = canonicalize(Legacy|Deprecated|Macro, w) + // A region that is added through canonicalization is stronger than + // a maximized region: set it in the original (e.g. mo -> ro-MD). + if w.RegionID != max.RegionID { + w.RegionID = max.RegionID } - max, _ = w.canonicalize(Legacy | Deprecated) - max, _ = addTags(max) + // TODO: should we do the same for scripts? + // See test case: en, sr, nl ; sh ; sr + max, _ = max.Maximize() } else { // Base language is not defined. if h != nil { - for i := range h.exact { - have := h.exact[i] - if have.tag.equalsRest(w) { + for i := range h.haveTags { + have := h.haveTags[i] + if equalsRest(have.tag, w) { return have, w, Exact } } } - if w.script == 0 && w.region == 0 { + if w.ScriptID == 0 && w.RegionID == 0 { // We skip all tags matching und for approximate matching, including // private tags. continue } - max, _ = addTags(w) - if h = m.index[max.lang]; h == nil { + max, _ = w.Maximize() + if h = m.index[max.LangID]; h == nil { continue } } + pin := true + for _, t := range want[i+1:] { + if w.LangID == t.lang() { + pin = false + break + } + } // Check for match based on maximized tag. - for i := range h.max { - have := h.max[i] - best.update(have, w, max.script, max.region) + for i := range h.haveTags { + have := h.haveTags[i] + best.update(have, w, max.ScriptID, max.RegionID, pin) if best.conf == Exact { for have.nextMax != 0 { - have = h.max[have.nextMax] - best.update(have, w, max.script, max.region) + have = h.haveTags[have.nextMax] + best.update(have, w, max.ScriptID, max.RegionID, pin) } - return best.have, best.want, High + return best.have, best.want, best.conf } } } if best.conf <= No { if len(want) != 0 { - return nil, want[0], No + return nil, want[0].tag(), No } - return nil, Tag{}, No + return nil, language.Tag{}, No } return best.have, best.want, best.conf } // bestMatch accumulates the best match so far. type bestMatch struct { - have *haveTag - want Tag - conf Confidence + have *haveTag + want language.Tag + conf Confidence + pinnedRegion language.Region + pinLanguage bool + sameRegionGroup bool // Cached results from applying tie-breaking rules. - origLang bool - origReg bool - regDist uint8 - origScript bool - parentDist uint8 // 255 if have is not an ancestor of want tag. + origLang bool + origReg bool + paradigmReg bool + regGroupDist uint8 + origScript bool } // update updates the existing best match if the new pair is considered to be a -// better match. -// To determine if the given pair is a better match, it first computes the rough -// confidence level. If this surpasses the current match, it will replace it and -// update the tie-breaker rule cache. If there is a tie, it proceeds with applying -// a series of tie-breaker rules. If there is no conclusive winner after applying -// the tie-breaker rules, it leaves the current match as the preferred match. -func (m *bestMatch) update(have *haveTag, tag Tag, maxScript scriptID, maxRegion regionID) { +// better match. To determine if the given pair is a better match, it first +// computes the rough confidence level. If this surpasses the current match, it +// will replace it and update the tie-breaker rule cache. If there is a tie, it +// proceeds with applying a series of tie-breaker rules. If there is no +// conclusive winner after applying the tie-breaker rules, it leaves the current +// match as the preferred match. +// +// If pin is true and have and tag are a strong match, it will henceforth only +// consider matches for this language. This corresponds to the nothing that most +// users have a strong preference for the first defined language. A user can +// still prefer a second language over a dialect of the preferred language by +// explicitly specifying dialects, e.g. "en, nl, en-GB". In this case pin should +// be false. +func (m *bestMatch) update(have *haveTag, tag language.Tag, maxScript language.Script, maxRegion language.Region, pin bool) { // Bail if the maximum attainable confidence is below that of the current best match. c := have.conf if c < m.conf { return } - if have.maxScript != maxScript { + // Don't change the language once we already have found an exact match. + if m.pinLanguage && tag.LangID != m.want.LangID { + return + } + // Pin the region group if we are comparing tags for the same language. + if tag.LangID == m.want.LangID && m.sameRegionGroup { + _, sameGroup := regionGroupDist(m.pinnedRegion, have.maxRegion, have.maxScript, m.want.LangID) + if !sameGroup { + return + } + } + if c == Exact && have.maxScript == maxScript { + // If there is another language and then another entry of this language, + // don't pin anything, otherwise pin the language. + m.pinLanguage = pin + } + if equalsRest(have.tag, tag) { + } else if have.maxScript != maxScript { // There is usually very little comprehension between different scripts. - // In a few cases there may still be Low comprehension. This possibility is - // pre-computed and stored in have.altScript. + // In a few cases there may still be Low comprehension. This possibility + // is pre-computed and stored in have.altScript. if Low < m.conf || have.altScript != maxScript { return } c = Low } else if have.maxRegion != maxRegion { - // There is usually a small difference between languages across regions. - // We use the region distance (below) to disambiguate between equal matches. if High < c { + // There is usually a small difference between languages across regions. c = High } } @@ -686,7 +602,7 @@ func (m *bestMatch) update(have *haveTag, tag Tag, maxScript scriptID, maxRegion // Tie-breaker rules: // We prefer if the pre-maximized language was specified and identical. - origLang := have.tag.lang == tag.lang && tag.lang != 0 + origLang := have.tag.LangID == tag.LangID && tag.LangID != 0 if !beaten && m.origLang != origLang { if m.origLang { return @@ -695,7 +611,7 @@ func (m *bestMatch) update(have *haveTag, tag Tag, maxScript scriptID, maxRegion } // We prefer if the pre-maximized region was specified and identical. - origReg := have.tag.region == tag.region && tag.region != 0 + origReg := have.tag.RegionID == tag.RegionID && tag.RegionID != 0 if !beaten && m.origReg != origReg { if m.origReg { return @@ -703,28 +619,26 @@ func (m *bestMatch) update(have *haveTag, tag Tag, maxScript scriptID, maxRegion beaten = true } - // Next we prefer smaller distances between regions, as defined by regionDist. - regDist := regionDist(have.maxRegion, maxRegion, tag.lang) - if !beaten && m.regDist != regDist { - if regDist > m.regDist { + regGroupDist, sameGroup := regionGroupDist(have.maxRegion, maxRegion, maxScript, tag.LangID) + if !beaten && m.regGroupDist != regGroupDist { + if regGroupDist > m.regGroupDist { return } beaten = true } - // Next we prefer if the pre-maximized script was specified and identical. - origScript := have.tag.script == tag.script && tag.script != 0 - if !beaten && m.origScript != origScript { - if m.origScript { + paradigmReg := isParadigmLocale(tag.LangID, have.maxRegion) + if !beaten && m.paradigmReg != paradigmReg { + if !paradigmReg { return } beaten = true } - // Finally we prefer tags which have a closer parent relationship. - parentDist := parentDistance(have.tag.region, tag) - if !beaten && m.parentDist != parentDist { - if parentDist > m.parentDist { + // Next we prefer if the pre-maximized script was specified and identical. + origScript := have.tag.ScriptID == tag.ScriptID && tag.ScriptID != 0 + if !beaten && m.origScript != origScript { + if m.origScript { return } beaten = true @@ -735,90 +649,59 @@ func (m *bestMatch) update(have *haveTag, tag Tag, maxScript scriptID, maxRegion m.have = have m.want = tag m.conf = c + m.pinnedRegion = maxRegion + m.sameRegionGroup = sameGroup m.origLang = origLang m.origReg = origReg + m.paradigmReg = paradigmReg m.origScript = origScript - m.regDist = regDist - m.parentDist = parentDist + m.regGroupDist = regGroupDist } } -// parentDistance returns the number of times Parent must be called before the -// regions match. It is assumed that it has already been checked that lang and -// script are identical. If haveRegion does not occur in the ancestor chain of -// tag, it returns 255. -func parentDistance(haveRegion regionID, tag Tag) uint8 { - p := tag.Parent() - d := uint8(1) - for haveRegion != p.region { - if p.region == 0 { - return 255 +func isParadigmLocale(lang language.Language, r language.Region) bool { + for _, e := range paradigmLocales { + if language.Language(e[0]) == lang && (r == language.Region(e[1]) || r == language.Region(e[2])) { + return true } - p = p.Parent() - d++ - } - return d -} - -// regionDist wraps regionDistance with some exceptions to the algorithmic distance. -func regionDist(a, b regionID, lang langID) uint8 { - if lang == _en { - // Two variants of non-US English are close to each other, regardless of distance. - if a != _US && b != _US { - return 2 - } - } - return uint8(regionDistance(a, b)) -} - -// regionDistance computes the distance between two regions based on the -// distance in the graph of region containments as defined in CLDR. It iterates -// over increasingly inclusive sets of groups, represented as bit vectors, until -// the source bit vector has bits in common with the destination vector. -func regionDistance(a, b regionID) int { - if a == b { - return 0 - } - p, q := regionInclusion[a], regionInclusion[b] - if p < nRegionGroups { - p, q = q, p - } - set := regionInclusionBits - if q < nRegionGroups && set[p]&(1< 0 { - return t.str[t.pVariant:t.pExt] + aGroup := uint(regionToGroups[a]) << 1 + bGroup := uint(regionToGroups[b]) << 1 + for _, ri := range matchRegion { + if language.Language(ri.lang) == lang && (ri.script == 0 || language.Script(ri.script) == script) { + group := uint(1 << (ri.group &^ 0x80)) + if 0x80&ri.group == 0 { + if aGroup&bGroup&group != 0 { // Both regions are in the group. + return ri.distance, ri.distance == defaultDistance + } + } else { + if (aGroup|bGroup)&group == 0 { // Both regions are not in the group. + return ri.distance, ri.distance == defaultDistance + } + } + } } - return t.str[t.pVariant:] + return defaultDistance, true } // equalsRest compares everything except the language. -func (a Tag) equalsRest(b Tag) bool { +func equalsRest(a, b language.Tag) bool { // TODO: don't include extensions in this comparison. To do this efficiently, // though, we should handle private tags separately. - return a.script == b.script && a.region == b.region && a.variantOrPrivateTagStr() == b.variantOrPrivateTagStr() + return a.ScriptID == b.ScriptID && a.RegionID == b.RegionID && a.VariantOrPrivateUseTags() == b.VariantOrPrivateUseTags() } // isExactEquivalent returns true if canonicalizing the language will not alter // the script or region of a tag. -func isExactEquivalent(l langID) bool { +func isExactEquivalent(l language.Language) bool { for _, o := range notEquivalent { if o == l { return false @@ -827,15 +710,26 @@ func isExactEquivalent(l langID) bool { return true } -var notEquivalent []langID +var notEquivalent []language.Language func init() { // Create a list of all languages for which canonicalization may alter the // script or region. - for _, lm := range langAliasMap { - tag := Tag{lang: langID(lm.from)} - if tag, _ = tag.canonicalize(All); tag.script != 0 || tag.region != 0 { - notEquivalent = append(notEquivalent, langID(lm.from)) + for _, lm := range language.AliasMap { + tag := language.Tag{LangID: language.Language(lm.From)} + if tag, _ = canonicalize(All, tag); tag.ScriptID != 0 || tag.RegionID != 0 { + notEquivalent = append(notEquivalent, language.Language(lm.From)) + } + } + // Maximize undefined regions of paradigm locales. + for i, v := range paradigmLocales { + t := language.Tag{LangID: language.Language(v[0])} + max, _ := t.Maximize() + if v[1] == 0 { + paradigmLocales[i][1] = uint16(max.RegionID) + } + if v[2] == 0 { + paradigmLocales[i][2] = uint16(max.RegionID) } } } diff --git a/vendor/golang.org/x/text/language/match_test.go b/vendor/golang.org/x/text/language/match_test.go index 26cc2af..c21b863 100644 --- a/vendor/golang.org/x/text/language/match_test.go +++ b/vendor/golang.org/x/text/language/match_test.go @@ -8,216 +8,194 @@ import ( "bytes" "flag" "fmt" + "os" + "path" + "path/filepath" "strings" "testing" "golang.org/x/text/internal/testtext" + "golang.org/x/text/internal/ucd" ) var verbose = flag.Bool("verbose", false, "set to true to print the internal tables of matchers") -func TestAddLikelySubtags(t *testing.T) { - tests := []struct{ in, out string }{ - {"aa", "aa-Latn-ET"}, - {"aa-Latn", "aa-Latn-ET"}, - {"aa-Arab", "aa-Arab-ET"}, - {"aa-Arab-ER", "aa-Arab-ER"}, - {"kk", "kk-Cyrl-KZ"}, - {"kk-CN", "kk-Arab-CN"}, - {"cmn", "cmn"}, - {"zh-AU", "zh-Hant-AU"}, - {"zh-VN", "zh-Hant-VN"}, - {"zh-SG", "zh-Hans-SG"}, - {"zh-Hant", "zh-Hant-TW"}, - {"zh-Hani", "zh-Hani-CN"}, - {"und-Hani", "zh-Hani-CN"}, - {"und", "en-Latn-US"}, - {"und-GB", "en-Latn-GB"}, - {"und-CW", "pap-Latn-CW"}, - {"und-YT", "fr-Latn-YT"}, - {"und-Arab", "ar-Arab-EG"}, - {"und-AM", "hy-Armn-AM"}, - {"und-002", "en-Latn-NG"}, - {"und-Latn-002", "en-Latn-NG"}, - {"en-Latn-002", "en-Latn-NG"}, - {"en-002", "en-Latn-NG"}, - {"en-001", "en-Latn-US"}, - {"und-003", "en-Latn-US"}, - {"und-GB", "en-Latn-GB"}, - {"Latn-001", "en-Latn-US"}, - {"en-001", "en-Latn-US"}, - {"es-419", "es-Latn-419"}, - {"he-145", "he-Hebr-IL"}, - {"ky-145", "ky-Latn-TR"}, - {"kk", "kk-Cyrl-KZ"}, - // Don't specialize duplicate and ambiguous matches. - {"kk-034", "kk-Arab-034"}, // Matches IR and AF. Both are Arab. - {"ku-145", "ku-Latn-TR"}, // Matches IQ, TR, and LB, but kk -> TR. - {"und-Arab-CC", "ms-Arab-CC"}, - {"und-Arab-GB", "ks-Arab-GB"}, - {"und-Hans-CC", "zh-Hans-CC"}, - {"und-CC", "en-Latn-CC"}, - {"sr", "sr-Cyrl-RS"}, - {"sr-151", "sr-Latn-151"}, // Matches RO and RU. - // We would like addLikelySubtags to generate the same results if the input - // only changes by adding tags that would otherwise have been added - // by the expansion. - // In other words: - // und-AA -> xx-Scrp-AA implies und-Scrp-AA -> xx-Scrp-AA - // und-AA -> xx-Scrp-AA implies xx-AA -> xx-Scrp-AA - // und-Scrp -> xx-Scrp-AA implies und-Scrp-AA -> xx-Scrp-AA - // und-Scrp -> xx-Scrp-AA implies xx-Scrp -> xx-Scrp-AA - // xx -> xx-Scrp-AA implies xx-Scrp -> xx-Scrp-AA - // xx -> xx-Scrp-AA implies xx-AA -> xx-Scrp-AA - // - // The algorithm specified in - // http://unicode.org/reports/tr35/tr35-9.html#Supplemental_Data, - // Section C.10, does not handle the first case. For example, - // the CLDR data contains an entry und-BJ -> fr-Latn-BJ, but not - // there is no rule for und-Latn-BJ. According to spec, und-Latn-BJ - // would expand to en-Latn-BJ, violating the aforementioned principle. - // We deviate from the spec by letting und-Scrp-AA expand to xx-Scrp-AA - // if a rule of the form und-AA -> xx-Scrp-AA is defined. - // Note that as of version 23, CLDR has some explicitly specified - // entries that do not conform to these rules. The implementation - // will not correct these explicit inconsistencies. A later versions of CLDR - // is supposed to fix this. - {"und-Latn-BJ", "fr-Latn-BJ"}, - {"und-Bugi-ID", "bug-Bugi-ID"}, - // regions, scripts and languages without definitions - {"und-Arab-AA", "ar-Arab-AA"}, - {"und-Afak-RE", "fr-Afak-RE"}, - {"und-Arab-GB", "ks-Arab-GB"}, - {"abp-Arab-GB", "abp-Arab-GB"}, - // script has preference over region - {"und-Arab-NL", "ar-Arab-NL"}, - {"zza", "zza-Latn-TR"}, - // preserve variants and extensions - {"de-1901", "de-Latn-DE-1901"}, - {"de-x-abc", "de-Latn-DE-x-abc"}, - {"de-1901-x-abc", "de-Latn-DE-1901-x-abc"}, - {"x-abc", "x-abc"}, // TODO: is this the desired behavior? - } - for i, tt := range tests { - in, _ := Parse(tt.in) - out, _ := Parse(tt.out) - in, _ = in.addLikelySubtags() - if in.String() != out.String() { - t.Errorf("%d: add(%s) was %s; want %s", i, tt.in, in, tt.out) +func TestCompliance(t *testing.T) { + filepath.Walk("testdata", func(file string, info os.FileInfo, err error) error { + if info.IsDir() { + return nil } - } + r, err := os.Open(file) + if err != nil { + t.Fatal(err) + } + ucd.Parse(r, func(p *ucd.Parser) { + name := strings.Replace(path.Join(p.String(0), p.String(1)), " ", "", -1) + if skip[name] { + return + } + t.Run(info.Name()+"/"+name, func(t *testing.T) { + supported := makeTagList(p.String(0)) + desired := makeTagList(p.String(1)) + gotCombined, index, conf := NewMatcher(supported).Match(desired...) + + gotMatch := supported[index] + wantMatch := Raw.Make(p.String(2)) // wantMatch may be null + if gotMatch != wantMatch { + t.Fatalf("match: got %q; want %q (%v)", gotMatch, wantMatch, conf) + } + if tag := strings.TrimSpace(p.String(3)); tag != "" { + wantCombined := Raw.MustParse(tag) + if err == nil && gotCombined != wantCombined { + t.Errorf("combined: got %q; want %q (%v)", gotCombined, wantCombined, conf) + } + } + }) + }) + return nil + }) } -func TestMinimize(t *testing.T) { - tests := []struct{ in, out string }{ - {"aa", "aa"}, - {"aa-Latn", "aa"}, - {"aa-Latn-ET", "aa"}, - {"aa-ET", "aa"}, - {"aa-Arab", "aa-Arab"}, - {"aa-Arab-ER", "aa-Arab-ER"}, - {"aa-Arab-ET", "aa-Arab"}, - {"und", "und"}, - {"und-Latn", "und"}, - {"und-Latn-US", "und"}, - {"en-Latn-US", "en"}, - {"cmn", "cmn"}, - {"cmn-Hans", "cmn-Hans"}, - {"cmn-Hant", "cmn-Hant"}, - {"zh-AU", "zh-AU"}, - {"zh-VN", "zh-VN"}, - {"zh-SG", "zh-SG"}, - {"zh-Hant", "zh-Hant"}, - {"zh-Hant-TW", "zh-TW"}, - {"zh-Hans", "zh"}, - {"zh-Hani", "zh-Hani"}, - {"und-Hans", "und-Hans"}, - {"und-Hani", "und-Hani"}, - {"und-CW", "und-CW"}, - {"und-YT", "und-YT"}, - {"und-Arab", "und-Arab"}, - {"und-AM", "und-AM"}, - {"und-Arab-CC", "und-Arab-CC"}, - {"und-CC", "und-CC"}, - {"und-Latn-BJ", "und-BJ"}, - {"und-Bugi-ID", "und-Bugi"}, - {"bug-Bugi-ID", "bug-Bugi"}, - // regions, scripts and languages without definitions - {"und-Arab-AA", "und-Arab-AA"}, - // preserve variants and extensions - {"de-Latn-1901", "de-1901"}, - {"de-Latn-x-abc", "de-x-abc"}, - {"de-DE-1901-x-abc", "de-1901-x-abc"}, - {"x-abc", "x-abc"}, // TODO: is this the desired behavior? - } - for i, tt := range tests { - in, _ := Parse(tt.in) - out, _ := Parse(tt.out) - min, _ := in.minimize() - if min.String() != out.String() { - t.Errorf("%d: min(%s) was %s; want %s", i, tt.in, min, tt.out) - } - max, _ := min.addLikelySubtags() - if x, _ := in.addLikelySubtags(); x.String() != max.String() { - t.Errorf("%d: max(min(%s)) = %s; want %s", i, tt.in, max, x) - } - } +var skip = map[string]bool{ + // TODO: bugs + // Honor the wildcard match. This may only be useful to select non-exact + // stuff. + "mul,af/nl": true, // match: got "af"; want "mul" + + // TODO: include other extensions. + // combined: got "en-GB-u-ca-buddhist-nu-arab"; want "en-GB-fonipa-t-m0-iso-i0-pinyin-u-ca-buddhist-nu-arab" + "und,en-GB-u-sd-gbsct/en-fonipa-u-nu-Arab-ca-buddhist-t-m0-iso-i0-pinyin": true, + + // Inconsistencies with Mark Davis' implementation where it is not clear + // which is better. + + // Inconsistencies in combined. I think the Go approach is more appropriate. + // We could use -u-rg- as alternative. + "und,fr/fr-BE-fonipa": true, // combined: got "fr"; want "fr-BE-fonipa" + "und,fr-CA/fr-BE-fonipa": true, // combined: got "fr-CA"; want "fr-BE-fonipa" + "und,fr-fonupa/fr-BE-fonipa": true, // combined: got "fr-fonupa"; want "fr-BE-fonipa" + "und,no/nn-BE-fonipa": true, // combined: got "no"; want "no-BE-fonipa" + "50,und,fr-CA-fonupa/fr-BE-fonipa": true, // combined: got "fr-CA-fonupa"; want "fr-BE-fonipa" + + // The initial number is a threshold. As we don't use scoring, we will not + // implement this. + "50,und,fr-Cyrl-CA-fonupa/fr-BE-fonipa": true, + // match: got "und"; want "fr-Cyrl-CA-fonupa" + // combined: got "und"; want "fr-Cyrl-BE-fonipa" + + // Other interesting cases to test: + // - Should same language or same script have the preference if there is + // usually no understanding of the other script? + // - More specific region in desired may replace enclosing supported. } -func TestRegionDistance(t *testing.T) { - tests := []struct { - a, b string - d int - }{ - {"NL", "NL", 0}, - {"NL", "EU", 1}, - {"EU", "NL", 1}, - {"005", "005", 0}, - {"NL", "BE", 2}, - {"CO", "005", 1}, - {"005", "CO", 1}, - {"CO", "419", 2}, - {"419", "CO", 2}, - {"005", "419", 1}, - {"419", "005", 1}, - {"001", "013", 2}, - {"013", "001", 2}, - {"CO", "CW", 4}, - {"CO", "PW", 6}, - {"CO", "BV", 6}, - {"ZZ", "QQ", 2}, +func makeTagList(s string) (tags []Tag) { + for _, s := range strings.Split(s, ",") { + tags = append(tags, mk(strings.TrimSpace(s))) } - for i, tt := range tests { - testtext.Run(t, tt.a+"/"+tt.b, func(t *testing.T) { - ra, _ := getRegionID([]byte(tt.a)) - rb, _ := getRegionID([]byte(tt.b)) - if d := regionDistance(ra, rb); d != tt.d { - t.Errorf("%d: d(%s, %s) = %v; want %v", i, tt.a, tt.b, d, tt.d) + return tags +} + +func TestMatchStrings(t *testing.T) { + testCases := []struct { + supported string + desired string // strings separted by | + tag string + index int + }{{ + supported: "en", + desired: "", + tag: "en", + index: 0, + }, { + supported: "en", + desired: "nl", + tag: "en", + index: 0, + }, { + supported: "en,nl", + desired: "nl", + tag: "nl", + index: 1, + }, { + supported: "en,nl", + desired: "nl|en", + tag: "nl", + index: 1, + }, { + supported: "en-GB,nl", + desired: "en ; q=0.1,nl", + tag: "nl", + index: 1, + }, { + supported: "en-GB,nl", + desired: "en;q=0.005 | dk; q=0.1,nl ", + tag: "en-GB", + index: 0, + }, { + // do not match faulty tags with und + supported: "en,und", + desired: "|en", + tag: "en", + index: 0, + }} + for _, tc := range testCases { + t.Run(path.Join(tc.supported, tc.desired), func(t *testing.T) { + m := NewMatcher(makeTagList(tc.supported)) + tag, index := MatchStrings(m, strings.Split(tc.desired, "|")...) + if tag.String() != tc.tag || index != tc.index { + t.Errorf("got %v, %d; want %v, %d", tag, index, tc.tag, tc.index) } }) } } -func TestParentDistance(t *testing.T) { - tests := []struct { - parent string - tag string - d uint8 +func TestRegionGroups(t *testing.T) { + testCases := []struct { + a, b string + distance uint8 }{ - {"en-001", "en-AU", 1}, - {"pt-PT", "pt-AO", 1}, - {"pt", "pt-AO", 2}, - {"en-AU", "en-GB", 255}, - {"en-NL", "en-AU", 255}, - // Note that pt-BR and en-US are not automatically minimized. - {"pt-BR", "pt-AO", 255}, - {"en-US", "en-AU", 255}, + {"zh-TW", "zh-HK", 5}, + {"zh-MO", "zh-HK", 4}, + {"es-ES", "es-AR", 5}, + {"es-ES", "es", 4}, + {"es-419", "es-MX", 4}, + {"es-AR", "es-MX", 4}, + {"es-ES", "es-MX", 5}, + {"es-PT", "es-MX", 5}, } - for _, tt := range tests { - r := Raw.MustParse(tt.parent).region - tag := Raw.MustParse(tt.tag) - if d := parentDistance(r, tag); d != tt.d { - t.Errorf("d(%s, %s) was %d; want %d", r, tag, d, tt.d) + for _, tc := range testCases { + a := MustParse(tc.a) + aScript, _ := a.Script() + b := MustParse(tc.b) + bScript, _ := b.Script() + + if aScript != bScript { + t.Errorf("scripts differ: %q vs %q", aScript, bScript) + continue + } + d, _ := regionGroupDist(a.region(), b.region(), aScript.scriptID, a.lang()) + if d != tc.distance { + t.Errorf("got %q; want %q", d, tc.distance) + } + } +} + +func TestIsParadigmLocale(t *testing.T) { + testCases := map[string]bool{ + "en-US": true, + "en-GB": true, + "en-VI": false, + "es-GB": false, + "es-ES": true, + "es-419": true, + } + for str, want := range testCases { + tt := Make(str) + tag := tt.tag() + got := isParadigmLocale(tag.LangID, tag.RegionID) + if got != want { + t.Errorf("isPL(%q) = %v; want %v", str, got, want) } } } @@ -235,12 +213,8 @@ func (m *matcher) String() string { func (h *matchHeader) String() string { w := &bytes.Buffer{} - fmt.Fprintf(w, "exact: ") - for _, h := range h.exact { - fmt.Fprintf(w, "%v, ", h) - } - fmt.Fprint(w, "; max: ") - for _, h := range h.max { + fmt.Fprint(w, "haveTag: ") + for _, h := range h.haveTags { fmt.Fprintf(w, "%v, ", h) } return w.String() @@ -250,32 +224,8 @@ func (t haveTag) String() string { return fmt.Sprintf("%v:%d:%v:%v-%v|%v", t.tag, t.index, t.conf, t.maxRegion, t.maxScript, t.altScript) } -func parseSupported(list string) (out []Tag) { - for _, s := range strings.Split(list, ",") { - out = append(out, mk(strings.TrimSpace(s))) - } - return out -} - -// The test set for TestBestMatch is defined in data_test.go. -func TestBestMatch(t *testing.T) { - for i, tt := range matchTests { - supported := parseSupported(tt.supported) - m := newMatcher(supported) - if *verbose { - fmt.Printf("%s:\n%v\n", tt.comment, m) - } - for _, tm := range tt.test { - tag, _, conf := m.Match(parseSupported(tm.desired)...) - if tag.String() != tm.match { - t.Errorf("%d:%s: find %s in %q: have %s; want %s (%v)\n", i, tt.comment, tm.desired, tt.supported, tag, tm.match, conf) - } - } - } -} - func TestBestMatchAlloc(t *testing.T) { - m := NewMatcher(parseSupported("en sr nl")) + m := NewMatcher(makeTagList("en sr nl")) // Go allocates when creating a list of tags from a single tag! list := []Tag{English} avg := testtext.AllocsPerRun(1, func() { @@ -352,7 +302,7 @@ var benchWant = [][]Tag{ } func BenchmarkMatch(b *testing.B) { - m := newMatcher(benchHave) + m := newMatcher(benchHave, nil) for i := 0; i < b.N; i++ { for _, want := range benchWant { m.getBest(want...) @@ -362,7 +312,7 @@ func BenchmarkMatch(b *testing.B) { func BenchmarkMatchExact(b *testing.B) { want := mk("en") - m := newMatcher(benchHave) + m := newMatcher(benchHave, nil) for i := 0; i < b.N; i++ { m.getBest(want) } @@ -370,7 +320,7 @@ func BenchmarkMatchExact(b *testing.B) { func BenchmarkMatchAltLanguagePresent(b *testing.B) { want := mk("hr") - m := newMatcher(benchHave) + m := newMatcher(benchHave, nil) for i := 0; i < b.N; i++ { m.getBest(want) } @@ -378,7 +328,7 @@ func BenchmarkMatchAltLanguagePresent(b *testing.B) { func BenchmarkMatchAltLanguageNotPresent(b *testing.B) { want := mk("nn") - m := newMatcher(benchHave) + m := newMatcher(benchHave, nil) for i := 0; i < b.N; i++ { m.getBest(want) } @@ -386,7 +336,7 @@ func BenchmarkMatchAltLanguageNotPresent(b *testing.B) { func BenchmarkMatchAltScriptPresent(b *testing.B) { want := mk("zh-Hant-CN") - m := newMatcher(benchHave) + m := newMatcher(benchHave, nil) for i := 0; i < b.N; i++ { m.getBest(want) } @@ -394,7 +344,7 @@ func BenchmarkMatchAltScriptPresent(b *testing.B) { func BenchmarkMatchAltScriptNotPresent(b *testing.B) { want := mk("fr-Cyrl") - m := newMatcher(benchHave) + m := newMatcher(benchHave, nil) for i := 0; i < b.N; i++ { m.getBest(want) } @@ -402,7 +352,7 @@ func BenchmarkMatchAltScriptNotPresent(b *testing.B) { func BenchmarkMatchLimitedExact(b *testing.B) { want := []Tag{mk("he-NL"), mk("iw-NL")} - m := newMatcher(benchHave) + m := newMatcher(benchHave, nil) for i := 0; i < b.N; i++ { m.getBest(want...) } diff --git a/vendor/golang.org/x/text/language/parse.go b/vendor/golang.org/x/text/language/parse.go index cfa28f5..d50c8aa 100644 --- a/vendor/golang.org/x/text/language/parse.go +++ b/vendor/golang.org/x/text/language/parse.go @@ -5,216 +5,21 @@ package language import ( - "bytes" "errors" - "fmt" - "sort" "strconv" "strings" - "golang.org/x/text/internal/tag" + "golang.org/x/text/internal/language" ) -// isAlpha returns true if the byte is not a digit. -// b must be an ASCII letter or digit. -func isAlpha(b byte) bool { - return b > '9' -} - -// isAlphaNum returns true if the string contains only ASCII letters or digits. -func isAlphaNum(s []byte) bool { - for _, c := range s { - if !('a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' || '0' <= c && c <= '9') { - return false - } - } - return true -} - -// errSyntax is returned by any of the parsing functions when the -// input is not well-formed, according to BCP 47. -// TODO: return the position at which the syntax error occurred? -var errSyntax = errors.New("language: tag is not well-formed") - // ValueError is returned by any of the parsing functions when the // input is well-formed but the respective subtag is not recognized // as a valid value. -type ValueError struct { - v [8]byte -} - -func mkErrInvalid(s []byte) error { - var e ValueError - copy(e.v[:], s) - return e -} - -func (e ValueError) tag() []byte { - n := bytes.IndexByte(e.v[:], 0) - if n == -1 { - n = 8 - } - return e.v[:n] -} - -// Error implements the error interface. -func (e ValueError) Error() string { - return fmt.Sprintf("language: subtag %q is well-formed but unknown", e.tag()) -} - -// Subtag returns the subtag for which the error occurred. -func (e ValueError) Subtag() string { - return string(e.tag()) -} - -// scanner is used to scan BCP 47 tokens, which are separated by _ or -. -type scanner struct { - b []byte - bytes [max99thPercentileSize]byte - token []byte - start int // start position of the current token - end int // end position of the current token - next int // next point for scan - err error - done bool -} - -func makeScannerString(s string) scanner { - scan := scanner{} - if len(s) <= len(scan.bytes) { - scan.b = scan.bytes[:copy(scan.bytes[:], s)] - } else { - scan.b = []byte(s) - } - scan.init() - return scan -} - -// makeScanner returns a scanner using b as the input buffer. -// b is not copied and may be modified by the scanner routines. -func makeScanner(b []byte) scanner { - scan := scanner{b: b} - scan.init() - return scan -} - -func (s *scanner) init() { - for i, c := range s.b { - if c == '_' { - s.b[i] = '-' - } - } - s.scan() -} - -// restToLower converts the string between start and end to lower case. -func (s *scanner) toLower(start, end int) { - for i := start; i < end; i++ { - c := s.b[i] - if 'A' <= c && c <= 'Z' { - s.b[i] += 'a' - 'A' - } - } -} +type ValueError interface { + error -func (s *scanner) setError(e error) { - if s.err == nil || (e == errSyntax && s.err != errSyntax) { - s.err = e - } -} - -// resizeRange shrinks or grows the array at position oldStart such that -// a new string of size newSize can fit between oldStart and oldEnd. -// Sets the scan point to after the resized range. -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) - copy(b, s.b[:oldStart]) - copy(b[end:], s.b[oldEnd:]) - s.b = b - } else { - s.b = append(s.b[end:], s.b[oldEnd:]...) - } - s.next = end + (s.next - s.end) - s.end = end - } -} - -// replace replaces the current token with repl. -func (s *scanner) replace(repl string) { - s.resizeRange(s.start, s.end, len(repl)) - copy(s.b[s.start:], repl) -} - -// gobble removes the current token from the input. -// Caller must call scan after calling gobble. -func (s *scanner) gobble(e error) { - s.setError(e) - if s.start == 0 { - s.b = s.b[:+copy(s.b, s.b[s.next:])] - s.end = 0 - } else { - s.b = s.b[:s.start-1+copy(s.b[s.start-1:], s.b[s.end:])] - s.end = s.start - 1 - } - s.next = s.start -} - -// deleteRange removes the given range from s.b before the current token. -func (s *scanner) deleteRange(start, end int) { - s.setError(errSyntax) - s.b = s.b[:start+copy(s.b[start:], s.b[end:])] - diff := end - start - s.next -= diff - s.start -= diff - s.end -= diff -} - -// scan parses the next token of a BCP 47 string. Tokens that are larger -// than 8 characters or include non-alphanumeric characters result in an error -// and are gobbled and removed from the output. -// It returns the end position of the last token consumed. -func (s *scanner) scan() (end int) { - end = s.end - s.token = nil - for s.start = s.next; s.next < len(s.b); { - i := bytes.IndexByte(s.b[s.next:], '-') - if i == -1 { - s.end = len(s.b) - s.next = len(s.b) - i = s.end - s.start - } else { - s.end = s.next + i - s.next = s.end + 1 - } - token := s.b[s.start:s.end] - if i < 1 || i > 8 || !isAlphaNum(token) { - s.gobble(errSyntax) - continue - } - s.token = token - return end - } - if n := len(s.b); n > 0 && s.b[n-1] == '-' { - s.setError(errSyntax) - s.b = s.b[:len(s.b)-1] - } - s.done = true - return end -} - -// acceptMinSize parses multiple tokens of the given size or greater. -// It returns the end position of the last token consumed. -func (s *scanner) acceptMinSize(min int) (end int) { - end = s.end - s.scan() - for ; len(s.token) >= min; s.scan() { - end = s.end - } - return end + // Subtag returns the subtag for which the error occurred. + Subtag() string } // Parse parses the given BCP 47 string and returns a valid Tag. If parsing @@ -238,324 +43,15 @@ func Parse(s string) (t Tag, err error) { // http://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers. // The resulting tag is canonicalized using the the canonicalization type c. func (c CanonType) Parse(s string) (t Tag, err error) { - // TODO: consider supporting old-style locale key-value pairs. - if s == "" { - return und, errSyntax - } - if len(s) <= maxAltTaglen { - b := [maxAltTaglen]byte{} - for i, c := range s { - // Generating invalid UTF-8 is okay as it won't match. - if 'A' <= c && c <= 'Z' { - c += 'a' - 'A' - } else if c == '_' { - c = '-' - } - b[i] = byte(c) - } - if t, ok := grandfathered(b); ok { - return t, nil - } + tt, err := language.Parse(s) + if err != nil { + return makeTag(tt), err } - scan := makeScannerString(s) - t, err = parse(&scan, s) - t, changed := t.canonicalize(c) + tt, changed := canonicalize(c, tt) if changed { - t.remakeString() - } - return t, err -} - -func parse(scan *scanner, s string) (t Tag, err error) { - t = und - var end int - if n := len(scan.token); n <= 1 { - scan.toLower(0, len(scan.b)) - if n == 0 || scan.token[0] != 'x' { - return t, errSyntax - } - end = parseExtensions(scan) - } else if n >= 4 { - return und, errSyntax - } else { // the usual case - t, end = parseTag(scan) - if n := len(scan.token); n == 1 { - t.pExt = uint16(end) - end = parseExtensions(scan) - } else if end < len(scan.b) { - scan.setError(errSyntax) - scan.b = scan.b[:end] - } - } - if int(t.pVariant) < len(scan.b) { - if end < len(s) { - s = s[:end] - } - if len(s) > 0 && tag.Compare(s, scan.b) == 0 { - t.str = s - } else { - t.str = string(scan.b) - } - } else { - t.pVariant, t.pExt = 0, 0 - } - return t, scan.err -} - -// parseTag parses language, script, region and variants. -// It returns a Tag and the end position in the input that was parsed. -func parseTag(scan *scanner) (t Tag, end int) { - var e error - // TODO: set an error if an unknown lang, script or region is encountered. - t.lang, e = getLangID(scan.token) - scan.setError(e) - scan.replace(t.lang.String()) - langStart := scan.start - end = scan.scan() - for len(scan.token) == 3 && isAlpha(scan.token[0]) { - // From http://tools.ietf.org/html/bcp47, - tags are equivalent - // to a tag of the form . - lang, e := getLangID(scan.token) - if lang != 0 { - t.lang = lang - copy(scan.b[langStart:], lang.String()) - scan.b[langStart+3] = '-' - scan.start = langStart + 4 - } - scan.gobble(e) - end = scan.scan() - } - if len(scan.token) == 4 && isAlpha(scan.token[0]) { - t.script, e = getScriptID(script, scan.token) - if t.script == 0 { - scan.gobble(e) - } - end = scan.scan() - } - if n := len(scan.token); n >= 2 && n <= 3 { - t.region, e = getRegionID(scan.token) - if t.region == 0 { - scan.gobble(e) - } else { - scan.replace(t.region.String()) - } - end = scan.scan() - } - scan.toLower(scan.start, len(scan.b)) - t.pVariant = byte(end) - end = parseVariants(scan, end, t) - t.pExt = uint16(end) - return t, end -} - -var separator = []byte{'-'} - -// parseVariants scans tokens as long as each token is a valid variant string. -// Duplicate variants are removed. -func parseVariants(scan *scanner, end int, t Tag) int { - start := scan.start - varIDBuf := [4]uint8{} - variantBuf := [4][]byte{} - varID := varIDBuf[:0] - variant := variantBuf[:0] - last := -1 - needSort := false - for ; len(scan.token) >= 4; scan.scan() { - // TODO: measure the impact of needing this conversion and redesign - // the data structure if there is an issue. - v, ok := variantIndex[string(scan.token)] - if !ok { - // unknown variant - // TODO: allow user-defined variants? - scan.gobble(mkErrInvalid(scan.token)) - continue - } - varID = append(varID, v) - variant = append(variant, scan.token) - if !needSort { - if last < int(v) { - last = int(v) - } else { - needSort = true - // There is no legal combinations of more than 7 variants - // (and this is by no means a useful sequence). - const maxVariants = 8 - if len(varID) > maxVariants { - break - } - } - } - end = scan.end - } - if needSort { - sort.Sort(variantsSort{varID, variant}) - k, l := 0, -1 - for i, v := range varID { - w := int(v) - if l == w { - // Remove duplicates. - continue - } - varID[k] = varID[i] - variant[k] = variant[i] - k++ - l = w - } - if str := bytes.Join(variant[:k], separator); len(str) == 0 { - end = start - 1 - } else { - scan.resizeRange(start, end, len(str)) - copy(scan.b[scan.start:], str) - end = scan.end - } - } - return end -} - -type variantsSort struct { - i []uint8 - v [][]byte -} - -func (s variantsSort) Len() int { - return len(s.i) -} - -func (s variantsSort) Swap(i, j int) { - s.i[i], s.i[j] = s.i[j], s.i[i] - s.v[i], s.v[j] = s.v[j], s.v[i] -} - -func (s variantsSort) Less(i, j int) bool { - return s.i[i] < s.i[j] -} - -type bytesSort [][]byte - -func (b bytesSort) Len() int { - return len(b) -} - -func (b bytesSort) Swap(i, j int) { - b[i], b[j] = b[j], b[i] -} - -func (b bytesSort) Less(i, j int) bool { - return bytes.Compare(b[i], b[j]) == -1 -} - -// parseExtensions parses and normalizes the extensions in the buffer. -// It returns the last position of scan.b that is part of any extension. -// It also trims scan.b to remove excess parts accordingly. -func parseExtensions(scan *scanner) int { - start := scan.start - exts := [][]byte{} - private := []byte{} - end := scan.end - for len(scan.token) == 1 { - extStart := scan.start - ext := scan.token[0] - end = parseExtension(scan) - extension := scan.b[extStart:end] - if len(extension) < 3 || (ext != 'x' && len(extension) < 4) { - scan.setError(errSyntax) - end = extStart - continue - } else if start == extStart && (ext == 'x' || scan.start == len(scan.b)) { - scan.b = scan.b[:end] - return end - } else if ext == 'x' { - private = extension - break - } - exts = append(exts, extension) + tt.RemakeString() } - sort.Sort(bytesSort(exts)) - if len(private) > 0 { - exts = append(exts, private) - } - scan.b = scan.b[:start] - if len(exts) > 0 { - scan.b = append(scan.b, bytes.Join(exts, separator)...) - } else if start > 0 { - // Strip trailing '-'. - scan.b = scan.b[:start-1] - } - return end -} - -// parseExtension parses a single extension and returns the position of -// the extension end. -func parseExtension(scan *scanner) int { - start, end := scan.start, scan.end - switch scan.token[0] { - case 'u': - attrStart := end - scan.scan() - for last := []byte{}; len(scan.token) > 2; scan.scan() { - if bytes.Compare(scan.token, last) != -1 { - // Attributes are unsorted. Start over from scratch. - p := attrStart + 1 - scan.next = p - attrs := [][]byte{} - for scan.scan(); len(scan.token) > 2; scan.scan() { - attrs = append(attrs, scan.token) - end = scan.end - } - sort.Sort(bytesSort(attrs)) - copy(scan.b[p:], bytes.Join(attrs, separator)) - break - } - last = scan.token - end = scan.end - } - var last, key []byte - for attrEnd := end; len(scan.token) == 2; last = key { - key = scan.token - keyEnd := scan.end - end = scan.acceptMinSize(3) - // TODO: check key value validity - if keyEnd == end || bytes.Compare(key, last) != 1 { - // We have an invalid key or the keys are not sorted. - // Start scanning keys from scratch and reorder. - p := attrEnd + 1 - scan.next = p - keys := [][]byte{} - for scan.scan(); len(scan.token) == 2; { - keyStart, keyEnd := scan.start, scan.end - end = scan.acceptMinSize(3) - if keyEnd != end { - keys = append(keys, scan.b[keyStart:end]) - } else { - scan.setError(errSyntax) - end = keyStart - } - } - sort.Sort(bytesSort(keys)) - reordered := bytes.Join(keys, separator) - if e := p + len(reordered); e < end { - scan.deleteRange(e, end) - end = e - } - copy(scan.b[p:], bytes.Join(keys, separator)) - break - } - } - case 't': - scan.scan() - if n := len(scan.token); n >= 2 && n <= 3 && isAlpha(scan.token[1]) { - _, end = parseTag(scan) - scan.toLower(start, end) - } - for len(scan.token) == 2 && !isAlpha(scan.token[1]) { - end = scan.acceptMinSize(3) - } - case 'x': - end = scan.acceptMinSize(1) - default: - end = scan.acceptMinSize(2) - } - return end + return makeTag(tt), err } // Compose creates a Tag from individual parts, which may be of type Tag, Base, @@ -563,10 +59,11 @@ func parseExtension(scan *scanner) int { // Base, Script or Region or slice of type Variant or Extension is passed more // than once, the latter will overwrite the former. Variants and Extensions are // accumulated, but if two extensions of the same type are passed, the latter -// will replace the former. A Tag overwrites all former values and typically -// only makes sense as the first argument. The resulting tag is returned after -// canonicalizing using the Default CanonType. If one or more errors are -// encountered, one of the errors is returned. +// will replace the former. For -u extensions, though, the key-type pairs are +// added, where later values overwrite older ones. A Tag overwrites all former +// values and typically only makes sense as the first argument. The resulting +// tag is returned after canonicalizing using the Default CanonType. If one or +// more errors are encountered, one of the errors is returned. func Compose(part ...interface{}) (t Tag, err error) { return Default.Compose(part...) } @@ -576,196 +73,68 @@ func Compose(part ...interface{}) (t Tag, err error) { // Base, Script or Region or slice of type Variant or Extension is passed more // than once, the latter will overwrite the former. Variants and Extensions are // accumulated, but if two extensions of the same type are passed, the latter -// will replace the former. A Tag overwrites all former values and typically -// only makes sense as the first argument. The resulting tag is returned after -// canonicalizing using CanonType c. If one or more errors are encountered, -// one of the errors is returned. +// will replace the former. For -u extensions, though, the key-type pairs are +// added, where later values overwrite older ones. A Tag overwrites all former +// values and typically only makes sense as the first argument. The resulting +// tag is returned after canonicalizing using CanonType c. If one or more errors +// are encountered, one of the errors is returned. func (c CanonType) Compose(part ...interface{}) (t Tag, err error) { - var b builder - if err = b.update(part...); err != nil { + var b language.Builder + if err = update(&b, part...); err != nil { return und, err } - t, _ = b.tag.canonicalize(c) - - if len(b.ext) > 0 || len(b.variant) > 0 { - sort.Sort(sortVariant(b.variant)) - sort.Strings(b.ext) - if b.private != "" { - b.ext = append(b.ext, b.private) - } - n := maxCoreSize + tokenLen(b.variant...) + tokenLen(b.ext...) - buf := make([]byte, n) - p := t.genCoreBytes(buf) - t.pVariant = byte(p) - p += appendTokens(buf[p:], b.variant...) - t.pExt = uint16(p) - p += appendTokens(buf[p:], b.ext...) - t.str = string(buf[:p]) - } else if b.private != "" { - t.str = b.private - t.remakeString() - } - return -} - -type builder struct { - tag Tag - - private string // the x extension - ext []string - variant []string - - err error -} - -func (b *builder) addExt(e string) { - if e == "" { - } else if e[0] == 'x' { - b.private = e - } else { - b.ext = append(b.ext, e) - } + b.Tag, _ = canonicalize(c, b.Tag) + return makeTag(b.Make()), err } var errInvalidArgument = errors.New("invalid Extension or Variant") -func (b *builder) update(part ...interface{}) (err error) { - replace := func(l *[]string, s string, eq func(a, b string) bool) bool { - if s == "" { - b.err = errInvalidArgument - return true - } - for i, v := range *l { - if eq(v, s) { - (*l)[i] = s - return true - } - } - return false - } +func update(b *language.Builder, part ...interface{}) (err error) { for _, x := range part { switch v := x.(type) { case Tag: - b.tag.lang = v.lang - b.tag.region = v.region - b.tag.script = v.script - if v.str != "" { - b.variant = nil - for x, s := "", v.str[v.pVariant:v.pExt]; s != ""; { - x, s = nextToken(s) - b.variant = append(b.variant, x) - } - b.ext, b.private = nil, "" - for i, e := int(v.pExt), ""; i < len(v.str); { - i, e = getExtension(v.str, i) - b.addExt(e) - } - } + b.SetTag(v.tag()) case Base: - b.tag.lang = v.langID + b.Tag.LangID = v.langID case Script: - b.tag.script = v.scriptID + b.Tag.ScriptID = v.scriptID case Region: - b.tag.region = v.regionID + b.Tag.RegionID = v.regionID case Variant: - if !replace(&b.variant, v.variant, func(a, b string) bool { return a == b }) { - b.variant = append(b.variant, v.variant) + if v.variant == "" { + err = errInvalidArgument + break } + b.AddVariant(v.variant) case Extension: - if !replace(&b.ext, v.s, func(a, b string) bool { return a[0] == b[0] }) { - b.addExt(v.s) + if v.s == "" { + err = errInvalidArgument + break } + b.SetExt(v.s) case []Variant: - b.variant = nil - for _, x := range v { - b.update(x) + b.ClearVariants() + for _, v := range v { + b.AddVariant(v.variant) } case []Extension: - b.ext, b.private = nil, "" + b.ClearExtensions() for _, e := range v { - b.update(e) + b.SetExt(e.s) } // TODO: support parsing of raw strings based on morphology or just extensions? case error: - err = v - } - } - return -} - -func tokenLen(token ...string) (n int) { - for _, t := range token { - n += len(t) + 1 - } - return -} - -func appendTokens(b []byte, token ...string) int { - p := 0 - for _, t := range token { - b[p] = '-' - copy(b[p+1:], t) - p += 1 + len(t) - } - return p -} - -type sortVariant []string - -func (s sortVariant) Len() int { - return len(s) -} - -func (s sortVariant) Swap(i, j int) { - s[j], s[i] = s[i], s[j] -} - -func (s sortVariant) Less(i, j int) bool { - return variantIndex[s[i]] < variantIndex[s[j]] -} - -func findExt(list []string, x byte) int { - for i, e := range list { - if e[0] == x { - return i - } - } - return -1 -} - -// getExtension returns the name, body and end position of the extension. -func getExtension(s string, p int) (end int, ext string) { - if s[p] == '-' { - p++ - } - if s[p] == 'x' { - return len(s), s[p:] - } - end = nextExtension(s, p) - return end, s[p:end] -} - -// nextExtension finds the next extension within the string, searching -// for the -- pattern from position p. -// In the fast majority of cases, language tags will have at most -// one extension and extensions tend to be small. -func nextExtension(s string, p int) int { - for n := len(s) - 3; p < n; { - if s[p] == '-' { - if s[p+2] == '-' { - return p + if v != nil { + err = v } - p += 3 - } else { - p++ } } - return len(s) + return } var errInvalidWeight = errors.New("ParseAcceptLanguage: invalid weight") -// ParseAcceptLanguage parses the contents of a Accept-Language header as +// ParseAcceptLanguage parses the contents of an Accept-Language header as // defined in http://www.ietf.org/rfc/rfc2616.txt and returns a list of Tags and // a list of corresponding quality weights. It is more permissive than RFC 2616 // and may return non-nil slices even if the input is not valid. @@ -788,7 +157,7 @@ func ParseAcceptLanguage(s string) (tag []Tag, q []float32, err error) { if !ok { return nil, nil, err } - t = Tag{lang: id} + t = makeTag(language.Tag{LangID: id}) } // Scan the optional weight. @@ -832,7 +201,7 @@ func split(s string, c byte) (head, tail string) { // Add hack mapping to deal with a small number of cases that that occur // in Accept-Language (with reasonable frequency). -var acceptFallback = map[string]langID{ +var acceptFallback = map[string]language.Language{ "english": _en, "deutsch": _de, "italian": _it, diff --git a/vendor/golang.org/x/text/language/parse_test.go b/vendor/golang.org/x/text/language/parse_test.go index 9b40eb4..2ff28bf 100644 --- a/vendor/golang.org/x/text/language/parse_test.go +++ b/vendor/golang.org/x/text/language/parse_test.go @@ -5,88 +5,20 @@ package language import ( - "bytes" "strings" "testing" - "golang.org/x/text/internal/tag" + "golang.org/x/text/internal/language" ) -type scanTest struct { - ok bool // true if scanning does not result in an error - in string - tok []string // the expected tokens +// equalTags compares language, script and region subtags only. +func (t Tag) equalTags(a Tag) bool { + return t.lang() == a.lang() && + t.script() == a.script() && + t.region() == a.region() } -var tests = []scanTest{ - {true, "", []string{}}, - {true, "1", []string{"1"}}, - {true, "en", []string{"en"}}, - {true, "root", []string{"root"}}, - {true, "maxchars", []string{"maxchars"}}, - {false, "bad/", []string{}}, - {false, "morethan8", []string{}}, - {false, "-", []string{}}, - {false, "----", []string{}}, - {false, "_", []string{}}, - {true, "en-US", []string{"en", "US"}}, - {true, "en_US", []string{"en", "US"}}, - {false, "en-US-", []string{"en", "US"}}, - {false, "en-US--", []string{"en", "US"}}, - {false, "en-US---", []string{"en", "US"}}, - {false, "en--US", []string{"en", "US"}}, - {false, "-en-US", []string{"en", "US"}}, - {false, "-en--US-", []string{"en", "US"}}, - {false, "-en--US-", []string{"en", "US"}}, - {false, "en-.-US", []string{"en", "US"}}, - {false, ".-en--US-.", []string{"en", "US"}}, - {false, "en-u.-US", []string{"en", "US"}}, - {true, "en-u1-US", []string{"en", "u1", "US"}}, - {true, "maxchar1_maxchar2-maxchar3", []string{"maxchar1", "maxchar2", "maxchar3"}}, - {false, "moreThan8-moreThan8-e", []string{"e"}}, -} - -func TestScan(t *testing.T) { - for i, tt := range tests { - scan := makeScannerString(tt.in) - for j := 0; !scan.done; j++ { - if j >= len(tt.tok) { - t.Errorf("%d: extra token %q", i, scan.token) - } else if tag.Compare(tt.tok[j], scan.token) != 0 { - t.Errorf("%d: token %d: found %q; want %q", i, j, scan.token, tt.tok[j]) - break - } - scan.scan() - } - if s := strings.Join(tt.tok, "-"); tag.Compare(s, bytes.Replace(scan.b, b("_"), b("-"), -1)) != 0 { - t.Errorf("%d: input: found %q; want %q", i, scan.b, s) - } - if (scan.err == nil) != tt.ok { - t.Errorf("%d: ok: found %v; want %v", i, scan.err == nil, tt.ok) - } - } -} - -func TestAcceptMinSize(t *testing.T) { - for i, tt := range tests { - // count number of successive tokens with a minimum size. - for sz := 1; sz <= 8; sz++ { - scan := makeScannerString(tt.in) - scan.end, scan.next = 0, 0 - end := scan.acceptMinSize(sz) - n := 0 - for i := 0; i < len(tt.tok) && len(tt.tok[i]) >= sz; i++ { - n += len(tt.tok[i]) - if i > 0 { - n++ - } - } - if end != n { - t.Errorf("%d:%d: found len %d; want %d", i, sz, end, n) - } - } - } -} +var errSyntax = language.ErrSyntax type parseTest struct { i int // the index of this test @@ -104,6 +36,11 @@ func parseTests() []parseTest { {in: "root", lang: "und"}, {in: "und", lang: "und"}, {in: "en", lang: "en"}, + + {in: "en-US-u-va-posix", lang: "en", region: "US", ext: "u-va-posix"}, + {in: "ca-ES-valencia", lang: "ca", region: "ES", variants: "valencia"}, + {in: "en-US-u-rg-gbzzzz", lang: "en", region: "US", ext: "u-rg-gbzzzz"}, + {in: "xy", lang: "und", invalid: true}, {in: "en-ZY", lang: "en", invalid: true}, {in: "gsw", lang: "gsw"}, @@ -184,7 +121,7 @@ func parseTests() []parseTest { {in: "en-u-cu-xau-co", lang: "en", extList: []string{"u-cu-xau"}, invalid: true}, // We allow duplicate keys as the LDML spec does not explicitly prohibit it. // TODO: Consider eliminating duplicates and returning an error. - {in: "en-u-cu-xau-co-phonebk-cu-xau", lang: "en", ext: "u-co-phonebk-cu-xau-cu-xau", changed: true}, + {in: "en-u-cu-xau-co-phonebk-cu-xau", lang: "en", ext: "u-co-phonebk-cu-xau", changed: true}, {in: "en-t-en-Cyrl-NL-fonipa", lang: "en", ext: "t-en-cyrl-nl-fonipa", changed: true}, {in: "en-t-en-Cyrl-NL-fonipa-t0-abc-def", lang: "en", ext: "t-en-cyrl-nl-fonipa-t0-abc-def", changed: true}, {in: "en-t-t0-abcd", lang: "en", ext: "t-t0-abcd"}, @@ -231,30 +168,6 @@ func parseTests() []parseTest { return tests } -func TestParseExtensions(t *testing.T) { - for i, tt := range parseTests() { - if tt.ext == "" || tt.rewrite { - continue - } - scan := makeScannerString(tt.in) - if len(scan.b) > 1 && scan.b[1] != '-' { - scan.end = nextExtension(string(scan.b), 0) - scan.next = scan.end + 1 - scan.scan() - } - start := scan.start - scan.toLower(start, len(scan.b)) - parseExtensions(&scan) - ext := string(scan.b[start:]) - if ext != tt.ext { - t.Errorf("%d(%s): ext was %v; want %v", i, tt.in, ext, tt.ext) - } - if changed := !strings.HasPrefix(tt.in[start:], ext); changed != tt.changed { - t.Errorf("%d(%s): changed was %v; want %v", i, tt.in, changed, tt.changed) - } - } -} - // partChecks runs checks for each part by calling the function returned by f. func partChecks(t *testing.T, f func(*parseTest) (Tag, bool)) { for i, tt := range parseTests() { @@ -262,80 +175,38 @@ func partChecks(t *testing.T, f func(*parseTest) (Tag, bool)) { if skip { continue } - if l, _ := getLangID(b(tt.lang)); l != tag.lang { - t.Errorf("%d: lang was %q; want %q", i, tag.lang, l) + if l, _ := language.ParseBase(tt.lang); l != tag.lang() { + t.Errorf("%d: lang was %q; want %q", i, tag.lang(), l) } - if sc, _ := getScriptID(script, b(tt.script)); sc != tag.script { - t.Errorf("%d: script was %q; want %q", i, tag.script, sc) + if sc, _ := language.ParseScript(tt.script); sc != tag.script() { + t.Errorf("%d: script was %q; want %q", i, tag.script(), sc) } - if r, _ := getRegionID(b(tt.region)); r != tag.region { - t.Errorf("%d: region was %q; want %q", i, tag.region, r) + if r, _ := language.ParseRegion(tt.region); r != tag.region() { + t.Errorf("%d: region was %q; want %q", i, tag.region(), r) } - if tag.str == "" { - continue + v := tag.tag().Variants() + if v != "" { + v = v[1:] } - p := int(tag.pVariant) - if p < int(tag.pExt) { - p++ + if v != tt.variants { + t.Errorf("%d: variants was %q; want %q", i, v, tt.variants) } - if s, g := tag.str[p:tag.pExt], tt.variants; s != g { - t.Errorf("%d: variants was %q; want %q", i, s, g) - } - p = int(tag.pExt) - if p > 0 && p < len(tag.str) { - p++ - } - if s, g := (tag.str)[p:], tt.ext; s != g { - t.Errorf("%d: extensions were %q; want %q", i, s, g) + if e := strings.Join(tag.tag().Extensions(), "-"); e != tt.ext { + t.Errorf("%d: extensions were %q; want %q", i, e, tt.ext) } } } -func TestParseTag(t *testing.T) { - partChecks(t, func(tt *parseTest) (id Tag, skip bool) { - if strings.HasPrefix(tt.in, "x-") || tt.rewrite { - return Tag{}, true - } - scan := makeScannerString(tt.in) - id, end := parseTag(&scan) - id.str = string(scan.b[:end]) - tt.ext = "" - tt.extList = []string{} - return id, false - }) -} - func TestParse(t *testing.T) { partChecks(t, func(tt *parseTest) (id Tag, skip bool) { - id, err := Raw.Parse(tt.in) - ext := "" - if id.str != "" { - if strings.HasPrefix(id.str, "x-") { - ext = id.str - } else if int(id.pExt) < len(id.str) && id.pExt > 0 { - ext = id.str[id.pExt+1:] - } - } - if tag, _ := Raw.Parse(id.String()); tag.String() != id.String() { - t.Errorf("%d:%s: reparse was %q; want %q", tt.i, tt.in, id.String(), tag.String()) - } - if ext != tt.ext { - t.Errorf("%d:%s: ext was %q; want %q", tt.i, tt.in, ext, tt.ext) - } - changed := id.str != "" && !strings.HasPrefix(tt.in, id.str) - if changed != tt.changed { - t.Errorf("%d:%s: changed was %v; want %v", tt.i, tt.in, changed, tt.changed) - } - if (err != nil) != tt.invalid { - t.Errorf("%d:%s: invalid was %v; want %v. Error: %v", tt.i, tt.in, err != nil, tt.invalid, err) - } + id, _ = Raw.Parse(tt.in) return id, false }) } func TestErrors(t *testing.T) { mkInvalid := func(s string) error { - return mkErrInvalid([]byte(s)) + return language.NewValueError([]byte(s)) } tests := []struct { in string @@ -387,8 +258,10 @@ func TestCompose2(t *testing.T) { r, _ := ParseRegion(tt.region) p := []interface{}{l, s, r, s, r, l} for _, x := range strings.Split(tt.variants, "-") { - v, _ := ParseVariant(x) - p = append(p, v) + if x != "" { + v, _ := ParseVariant(x) + p = append(p, v) + } } for _, x := range tt.extList { e, _ := ParseExtension(x) diff --git a/vendor/golang.org/x/text/language/tables.go b/vendor/golang.org/x/text/language/tables.go index a2aec62..e228077 100644 --- a/vendor/golang.org/x/text/language/tables.go +++ b/vendor/golang.org/x/text/language/tables.go @@ -2,3546 +2,297 @@ package language -import "golang.org/x/text/internal/tag" - // CLDRVersion is the CLDR version from which the tables in this package are derived. -const CLDRVersion = "30" - -const numLanguages = 8654 - -const numScripts = 230 - -const numRegions = 356 - -type fromTo struct { - from uint16 - to uint16 -} +const CLDRVersion = "32" -const nonCanonicalUnd = 1191 const ( - _af = 21 - _am = 38 - _ar = 57 - _az = 87 - _bg = 125 - _bn = 163 - _ca = 213 - _cs = 246 - _da = 253 - _de = 265 - _el = 305 - _en = 308 - _es = 313 - _et = 315 - _fa = 323 - _fi = 332 - _fil = 334 - _fr = 345 - _gu = 413 - _he = 437 - _hi = 439 - _hr = 458 - _hu = 462 - _hy = 464 - _id = 474 - _is = 496 - _it = 497 - _ja = 504 - _ka = 520 - _kk = 570 - _km = 578 - _kn = 585 - _ko = 587 - _ky = 641 - _lo = 687 - _lt = 695 - _lv = 702 - _mk = 758 - _ml = 763 - _mn = 770 - _mo = 775 - _mr = 786 - _ms = 790 - _mul = 797 - _my = 808 - _nb = 830 - _ne = 840 - _nl = 862 - _no = 870 - _pa = 916 - _pl = 938 - _pt = 951 - _ro = 979 - _ru = 985 - _sh = 1021 - _si = 1026 - _sk = 1032 - _sl = 1036 - _sq = 1063 - _sr = 1064 - _sv = 1082 - _sw = 1083 - _ta = 1094 - _te = 1111 - _th = 1121 - _tl = 1136 - _tn = 1142 - _tr = 1152 - _uk = 1188 - _ur = 1194 - _uz = 1202 - _vi = 1209 - _zh = 1311 - _zu = 1316 - _jbo = 507 - _ami = 1639 - _bnn = 2346 - _hak = 431 - _tlh = 14456 - _lb = 652 - _nv = 890 - _pwn = 12044 - _tao = 14177 - _tay = 14187 - _tsu = 14651 - _nn = 865 - _sfb = 13618 - _vgt = 15690 - _sgg = 13649 - _cmn = 2996 - _nan = 826 - _hsn = 460 + _de = 269 + _en = 313 + _fr = 350 + _it = 505 + _mo = 784 + _no = 879 + _nb = 839 + _pt = 960 + _sh = 1031 + _mul = 806 + _und = 0 +) +const ( + _001 = 1 + _419 = 31 + _BR = 65 + _CA = 73 + _ES = 110 + _GB = 123 + _MD = 188 + _PT = 238 + _UK = 306 + _US = 309 + _ZZ = 357 + _XA = 323 + _XC = 325 + _XK = 333 ) - -const langPrivateStart = 0x2f67 - -const langPrivateEnd = 0x316e - -// lang holds an alphabetically sorted list of ISO-639 language identifiers. -// All entries are 4 bytes. The index of the identifier (divided by 4) is the language tag. -// For 2-byte language identifiers, the two successive bytes have the following meaning: -// - if the first letter of the 2- and 3-letter ISO codes are the same: -// the second and third letter of the 3-letter ISO code. -// - otherwise: a 0 and a by 2 bits right-shifted index into altLangISO3. -// For 3-byte language identifiers the 4th byte is 0. -const lang tag.Index = "" + // Size: 5280 bytes - "---\x00aaaraai\x00aak\x00aau\x00abbkabi\x00abr\x00abt\x00aby\x00acd\x00a" + - "ce\x00ach\x00ada\x00ade\x00adj\x00ady\x00adz\x00aeveaeb\x00aey\x00affrag" + - "c\x00agd\x00agg\x00agm\x00ago\x00agq\x00aha\x00ahl\x00aho\x00ajg\x00akka" + - "akk\x00ala\x00ali\x00aln\x00alt\x00ammhamm\x00amn\x00amo\x00amp\x00anrga" + - "nc\x00ank\x00ann\x00any\x00aoj\x00aom\x00aoz\x00apc\x00apd\x00ape\x00apr" + - "\x00aps\x00apz\x00arraarc\x00arh\x00arn\x00aro\x00arq\x00ars\x00ary\x00a" + - "rz\x00assmasa\x00ase\x00asg\x00aso\x00ast\x00ata\x00atg\x00atj\x00auy" + - "\x00avvaavl\x00avn\x00avt\x00avu\x00awa\x00awb\x00awo\x00awx\x00ayymayb" + - "\x00azzebaakbal\x00ban\x00bap\x00bar\x00bas\x00bav\x00bax\x00bba\x00bbb" + - "\x00bbc\x00bbd\x00bbj\x00bbp\x00bbr\x00bcf\x00bch\x00bci\x00bcm\x00bcn" + - "\x00bco\x00bcq\x00bcu\x00bdd\x00beelbef\x00beh\x00bej\x00bem\x00bet\x00b" + - "ew\x00bex\x00bez\x00bfd\x00bfq\x00bft\x00bfy\x00bgulbgc\x00bgn\x00bgx" + - "\x00bhihbhb\x00bhg\x00bhi\x00bhk\x00bhl\x00bho\x00bhy\x00biisbib\x00big" + - "\x00bik\x00bim\x00bin\x00bio\x00biq\x00bjh\x00bji\x00bjj\x00bjn\x00bjo" + - "\x00bjr\x00bjz\x00bkc\x00bkm\x00bkq\x00bku\x00bkv\x00blt\x00bmambmh\x00b" + - "mk\x00bmq\x00bmu\x00bnenbng\x00bnm\x00bnp\x00boodboj\x00bom\x00bon\x00bp" + - "y\x00bqc\x00bqi\x00bqp\x00bqv\x00brrebra\x00brh\x00brx\x00brz\x00bsosbsj" + - "\x00bsq\x00bss\x00bst\x00bto\x00btt\x00btv\x00bua\x00buc\x00bud\x00bug" + - "\x00buk\x00bum\x00buo\x00bus\x00buu\x00bvb\x00bwd\x00bwr\x00bxh\x00bye" + - "\x00byn\x00byr\x00bys\x00byv\x00byx\x00bza\x00bze\x00bzf\x00bzh\x00bzw" + - "\x00caatcan\x00cbj\x00cch\x00ccp\x00ceheceb\x00cfa\x00cgg\x00chhachk\x00" + - "chm\x00cho\x00chp\x00chr\x00cja\x00cjm\x00cjv\x00ckb\x00ckl\x00cko\x00ck" + - "y\x00cla\x00cme\x00cooscop\x00cps\x00crrecrj\x00crk\x00crl\x00crm\x00crs" + - "\x00csescsb\x00csw\x00ctd\x00cuhucvhvcyymdaandad\x00daf\x00dag\x00dah" + - "\x00dak\x00dar\x00dav\x00dbd\x00dbq\x00dcc\x00ddn\x00deeuded\x00den\x00d" + - "ga\x00dgh\x00dgi\x00dgl\x00dgr\x00dgz\x00dia\x00dje\x00dnj\x00dob\x00doi" + - "\x00dop\x00dow\x00dri\x00drs\x00dsb\x00dtm\x00dtp\x00dts\x00dty\x00dua" + - "\x00duc\x00dud\x00dug\x00dvivdva\x00dww\x00dyo\x00dyu\x00dzzodzg\x00ebu" + - "\x00eeweefi\x00egl\x00egy\x00eky\x00elllema\x00emi\x00enngenn\x00enq\x00" + - "eopoeri\x00es\x00\x05esu\x00etstetr\x00ett\x00etu\x00etx\x00euusewo\x00e" + - "xt\x00faasfaa\x00fab\x00fag\x00fai\x00fan\x00ffulffi\x00ffm\x00fiinfia" + - "\x00fil\x00fit\x00fjijflr\x00fmp\x00foaofod\x00fon\x00for\x00fpe\x00fqs" + - "\x00frrafrc\x00frp\x00frr\x00frs\x00fub\x00fud\x00fue\x00fuf\x00fuh\x00f" + - "uq\x00fur\x00fuv\x00fuy\x00fvr\x00fyrygalegaa\x00gaf\x00gag\x00gah\x00ga" + - "j\x00gam\x00gan\x00gaw\x00gay\x00gbf\x00gbm\x00gby\x00gbz\x00gcr\x00gdla" + - "gde\x00gdn\x00gdr\x00geb\x00gej\x00gel\x00gez\x00gfk\x00ggn\x00ghs\x00gi" + - "l\x00gim\x00gjk\x00gjn\x00gju\x00gkn\x00gkp\x00gllgglk\x00gmm\x00gmv\x00" + - "gnrngnd\x00gng\x00god\x00gof\x00goi\x00gom\x00gon\x00gor\x00gos\x00got" + - "\x00grc\x00grt\x00grw\x00gsw\x00guujgub\x00guc\x00gud\x00gur\x00guw\x00g" + - "ux\x00guz\x00gvlvgvf\x00gvr\x00gvs\x00gwc\x00gwi\x00gwt\x00gyi\x00haauha" + - "g\x00hak\x00ham\x00haw\x00haz\x00hbb\x00hdy\x00heebhhy\x00hiinhia\x00hif" + - "\x00hig\x00hih\x00hil\x00hla\x00hlu\x00hmd\x00hmt\x00hnd\x00hne\x00hnj" + - "\x00hnn\x00hno\x00homohoc\x00hoj\x00hot\x00hrrvhsb\x00hsn\x00htathuunhui" + - "\x00hyyehzerianaian\x00iar\x00iba\x00ibb\x00iby\x00ica\x00ich\x00idndidd" + - "\x00idi\x00idu\x00ieleigboigb\x00ige\x00iiiiijj\x00ikpkikk\x00ikt\x00ikw" + - "\x00ikx\x00ilo\x00imo\x00inndinh\x00iodoiou\x00iri\x00isslittaiukuiw\x00" + - "\x03iwm\x00iws\x00izh\x00izi\x00japnjab\x00jam\x00jbo\x00jbu\x00jen\x00j" + - "gk\x00jgo\x00ji\x00\x06jib\x00jmc\x00jml\x00jra\x00jut\x00jvavjwavkaatka" + - "a\x00kab\x00kac\x00kad\x00kai\x00kaj\x00kam\x00kao\x00kbd\x00kbm\x00kbp" + - "\x00kbq\x00kbx\x00kby\x00kcg\x00kck\x00kcl\x00kct\x00kde\x00kdh\x00kdl" + - "\x00kdt\x00kea\x00ken\x00kez\x00kfo\x00kfr\x00kfy\x00kgonkge\x00kgf\x00k" + - "gp\x00kha\x00khb\x00khn\x00khq\x00khs\x00kht\x00khw\x00khz\x00kiikkij" + - "\x00kiu\x00kiw\x00kjuakjd\x00kjg\x00kjs\x00kjy\x00kkazkkc\x00kkj\x00klal" + - "kln\x00klq\x00klt\x00klx\x00kmhmkmb\x00kmh\x00kmo\x00kms\x00kmu\x00kmw" + - "\x00knanknp\x00koorkoi\x00kok\x00kol\x00kos\x00koz\x00kpe\x00kpf\x00kpo" + - "\x00kpr\x00kpx\x00kqb\x00kqf\x00kqs\x00kqy\x00kraukrc\x00kri\x00krj\x00k" + - "rl\x00krs\x00kru\x00ksasksb\x00ksd\x00ksf\x00ksh\x00ksj\x00ksr\x00ktb" + - "\x00ktm\x00kto\x00kuurkub\x00kud\x00kue\x00kuj\x00kum\x00kun\x00kup\x00k" + - "us\x00kvomkvg\x00kvr\x00kvx\x00kw\x00\x01kwj\x00kwo\x00kxa\x00kxc\x00kxm" + - "\x00kxp\x00kxw\x00kxz\x00kyirkye\x00kyx\x00kzr\x00laatlab\x00lad\x00lag" + - "\x00lah\x00laj\x00las\x00lbtzlbe\x00lbu\x00lbw\x00lcm\x00lcp\x00ldb\x00l" + - "ed\x00lee\x00lem\x00lep\x00leq\x00leu\x00lez\x00lguglgg\x00liimlia\x00li" + - "d\x00lif\x00lig\x00lih\x00lij\x00lis\x00ljp\x00lki\x00lkt\x00lle\x00lln" + - "\x00lmn\x00lmo\x00lmp\x00lninlns\x00lnu\x00loaoloj\x00lok\x00lol\x00lor" + - "\x00los\x00loz\x00lrc\x00ltitltg\x00luublua\x00luo\x00luy\x00luz\x00lvav" + - "lwl\x00lzh\x00lzz\x00mad\x00maf\x00mag\x00mai\x00mak\x00man\x00mas\x00ma" + - "w\x00maz\x00mbh\x00mbo\x00mbq\x00mbu\x00mbw\x00mci\x00mcp\x00mcq\x00mcr" + - "\x00mcu\x00mda\x00mde\x00mdf\x00mdh\x00mdj\x00mdr\x00mdx\x00med\x00mee" + - "\x00mek\x00men\x00mer\x00met\x00meu\x00mfa\x00mfe\x00mfn\x00mfo\x00mfq" + - "\x00mglgmgh\x00mgl\x00mgo\x00mgp\x00mgy\x00mhahmhi\x00mhl\x00mirimif\x00" + - "min\x00mis\x00miw\x00mkkdmki\x00mkl\x00mkp\x00mkw\x00mlalmle\x00mlp\x00m" + - "ls\x00mmo\x00mmu\x00mmx\x00mnonmna\x00mnf\x00mni\x00mnw\x00moolmoa\x00mo" + - "e\x00moh\x00mos\x00mox\x00mpp\x00mps\x00mpt\x00mpx\x00mql\x00mrarmrd\x00" + - "mrj\x00mro\x00mssamtltmtc\x00mtf\x00mti\x00mtr\x00mua\x00mul\x00mur\x00m" + - "us\x00mva\x00mvn\x00mvy\x00mwk\x00mwr\x00mwv\x00mxc\x00mxm\x00myyamyk" + - "\x00mym\x00myv\x00myw\x00myx\x00myz\x00mzk\x00mzm\x00mzn\x00mzp\x00mzw" + - "\x00mzz\x00naaunac\x00naf\x00nah\x00nak\x00nan\x00nap\x00naq\x00nas\x00n" + - "bobnca\x00nce\x00ncf\x00nch\x00nco\x00ncu\x00nddendc\x00nds\x00neepneb" + - "\x00new\x00nex\x00nfr\x00ngdonga\x00ngb\x00ngl\x00nhb\x00nhe\x00nhw\x00n" + - "if\x00nii\x00nij\x00nin\x00niu\x00niy\x00niz\x00njo\x00nkg\x00nko\x00nll" + - "dnmg\x00nmz\x00nnnonnf\x00nnh\x00nnk\x00nnm\x00noornod\x00noe\x00non\x00" + - "nop\x00nou\x00nqo\x00nrblnrb\x00nsk\x00nsn\x00nso\x00nss\x00ntm\x00ntr" + - "\x00nui\x00nup\x00nus\x00nuv\x00nux\x00nvavnwb\x00nxq\x00nxr\x00nyyanym" + - "\x00nyn\x00nzi\x00occiogc\x00ojjiokr\x00okv\x00omrmong\x00onn\x00ons\x00" + - "opm\x00orrioro\x00oru\x00osssosa\x00ota\x00otk\x00ozm\x00paanpag\x00pal" + - "\x00pam\x00pap\x00pau\x00pbi\x00pcd\x00pcm\x00pdc\x00pdt\x00ped\x00peo" + - "\x00pex\x00pfl\x00phl\x00phn\x00pilipil\x00pip\x00pka\x00pko\x00plolpla" + - "\x00pms\x00png\x00pnn\x00pnt\x00pon\x00ppo\x00pra\x00prd\x00prg\x00psusp" + - "ss\x00ptorptp\x00puu\x00pwa\x00quuequc\x00qug\x00rai\x00raj\x00rao\x00rc" + - "f\x00rej\x00rel\x00res\x00rgn\x00rhg\x00ria\x00rif\x00rjs\x00rkt\x00rmoh" + - "rmf\x00rmo\x00rmt\x00rmu\x00rnunrna\x00rng\x00roonrob\x00rof\x00roo\x00r" + - "ro\x00rtm\x00ruusrue\x00rug\x00rw\x00\x04rwk\x00rwo\x00ryu\x00saansaf" + - "\x00sah\x00saq\x00sas\x00sat\x00saz\x00sba\x00sbe\x00sbp\x00scrdsck\x00s" + - "cl\x00scn\x00sco\x00scs\x00sdndsdc\x00sdh\x00semesef\x00seh\x00sei\x00se" + - "s\x00sgagsga\x00sgs\x00sgw\x00sgz\x00sh\x00\x02shi\x00shk\x00shn\x00shu" + - "\x00siinsid\x00sig\x00sil\x00sim\x00sjr\x00sklkskc\x00skr\x00sks\x00sllv" + - "sld\x00sli\x00sll\x00sly\x00smmosma\x00smi\x00smj\x00smn\x00smp\x00smq" + - "\x00sms\x00snnasnc\x00snk\x00snp\x00snx\x00sny\x00soomsok\x00soq\x00sou" + - "\x00soy\x00spd\x00spl\x00sps\x00sqqisrrpsrb\x00srn\x00srr\x00srx\x00sssw" + - "ssd\x00ssg\x00ssy\x00stotstk\x00stq\x00suunsua\x00sue\x00suk\x00sur\x00s" + - "us\x00svweswwaswb\x00swc\x00swg\x00swp\x00swv\x00sxn\x00sxw\x00syl\x00sy" + - "r\x00szl\x00taamtaj\x00tal\x00tan\x00taq\x00tbc\x00tbd\x00tbf\x00tbg\x00" + - "tbo\x00tbw\x00tbz\x00tci\x00tcy\x00tdd\x00tdg\x00tdh\x00teelted\x00tem" + - "\x00teo\x00tet\x00tfi\x00tggktgc\x00tgo\x00tgu\x00thhathl\x00thq\x00thr" + - "\x00tiirtif\x00tig\x00tik\x00tim\x00tio\x00tiv\x00tkuktkl\x00tkr\x00tkt" + - "\x00tlgltlf\x00tlx\x00tly\x00tmh\x00tmy\x00tnsntnh\x00toontof\x00tog\x00" + - "toq\x00tpi\x00tpm\x00tpz\x00tqo\x00trurtru\x00trv\x00trw\x00tssotsd\x00t" + - "sf\x00tsg\x00tsj\x00tsw\x00ttatttd\x00tte\x00ttj\x00ttr\x00tts\x00ttt" + - "\x00tuh\x00tul\x00tum\x00tuq\x00tvd\x00tvl\x00tvu\x00twwitwh\x00twq\x00t" + - "xg\x00tyahtya\x00tyv\x00tzm\x00ubu\x00udm\x00ugiguga\x00ukkruli\x00umb" + - "\x00und\x00unr\x00unx\x00urrduri\x00urt\x00urw\x00usa\x00utr\x00uvh\x00u" + - "vl\x00uzzbvag\x00vai\x00van\x00veenvec\x00vep\x00viievic\x00viv\x00vls" + - "\x00vmf\x00vmw\x00voolvot\x00vro\x00vun\x00vut\x00walnwae\x00waj\x00wal" + - "\x00wan\x00war\x00wbp\x00wbq\x00wbr\x00wci\x00wer\x00wgi\x00whg\x00wib" + - "\x00wiu\x00wiv\x00wja\x00wji\x00wls\x00wmo\x00wnc\x00wni\x00wnu\x00woolw" + - "ob\x00wos\x00wrs\x00wsk\x00wtm\x00wuu\x00wuv\x00wwa\x00xav\x00xbi\x00xcr" + - "\x00xes\x00xhhoxla\x00xlc\x00xld\x00xmf\x00xmn\x00xmr\x00xna\x00xnr\x00x" + - "og\x00xon\x00xpr\x00xrb\x00xsa\x00xsi\x00xsm\x00xsr\x00xwe\x00yam\x00yao" + - "\x00yap\x00yas\x00yat\x00yav\x00yay\x00yaz\x00yba\x00ybb\x00yby\x00yer" + - "\x00ygr\x00ygw\x00yiidyko\x00yle\x00ylg\x00yll\x00yml\x00yooryon\x00yrb" + - "\x00yre\x00yrl\x00yss\x00yua\x00yue\x00yuj\x00yut\x00yuw\x00zahazag\x00z" + - "bl\x00zdj\x00zea\x00zgh\x00zhhozia\x00zlm\x00zmi\x00zne\x00zuulzxx\x00zz" + - "a\x00\xff\xff\xff\xff" - -const langNoIndexOffset = 1319 - -// langNoIndex is a bit vector of all 3-letter language codes that are not used as an index -// in lookup tables. The language ids for these language codes are derived directly -// from the letters and are not consecutive. -// Size: 2197 bytes, 2197 elements -var langNoIndex = [2197]uint8{ - // Entry 0 - 3F - 0xff, 0xf8, 0xed, 0xfe, 0xeb, 0xd7, 0x3b, 0xd2, - 0xfb, 0xbf, 0x7a, 0xfa, 0x37, 0x1d, 0x3c, 0x57, - 0x6e, 0x97, 0x73, 0x38, 0xfb, 0xea, 0xbf, 0x70, - 0xad, 0x03, 0xff, 0xff, 0xcf, 0x05, 0x84, 0x62, - 0xe9, 0xbf, 0xfd, 0xbf, 0xbf, 0xf7, 0xfd, 0x77, - 0x0f, 0xff, 0xef, 0x6f, 0xff, 0xfb, 0xdf, 0xe2, - 0xc9, 0xf8, 0x7f, 0x7e, 0x4d, 0xb8, 0x0a, 0x6a, - 0x7c, 0xea, 0xe3, 0xfa, 0x7a, 0xbf, 0x67, 0xff, - // Entry 40 - 7F - 0xff, 0xff, 0xff, 0xdf, 0x2a, 0x54, 0x91, 0xc0, - 0x5d, 0xe3, 0x97, 0x14, 0x07, 0x20, 0xdd, 0xed, - 0x9f, 0x3f, 0xc9, 0x21, 0xf8, 0x3f, 0x94, 0x35, - 0x7c, 0x5f, 0xff, 0x5f, 0x8e, 0x6e, 0xdf, 0xff, - 0xff, 0xff, 0x55, 0x7c, 0xd3, 0xfd, 0xbf, 0xb5, - 0x7b, 0xdf, 0x7f, 0xf7, 0xca, 0xfe, 0xdb, 0xa3, - 0xa8, 0xff, 0x1f, 0x67, 0x7f, 0xeb, 0xef, 0xce, - 0xff, 0xff, 0x9f, 0xff, 0xb7, 0xef, 0xfe, 0xcf, - // Entry 80 - BF - 0xdb, 0xff, 0xf3, 0xcd, 0xfb, 0x2f, 0xff, 0xff, - 0xbb, 0xee, 0xf7, 0xbd, 0xdb, 0xff, 0x5f, 0xf7, - 0xfd, 0xf2, 0xfd, 0xff, 0x5e, 0x2f, 0x3b, 0xba, - 0x7e, 0xff, 0xff, 0xfe, 0xf7, 0xff, 0xdd, 0xff, - 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, - // Entry C0 - FF - 0xfb, 0x4a, 0xf2, 0x9f, 0xb4, 0x42, 0x41, 0x96, - 0x1b, 0x14, 0x08, 0xf2, 0x2b, 0xe7, 0x17, 0x56, - 0x45, 0x7d, 0x0e, 0x1c, 0x37, 0x71, 0xf3, 0xef, - 0x97, 0xff, 0x5d, 0x38, 0x64, 0x08, 0x00, 0x10, - 0xbc, 0x87, 0xaf, 0xdf, 0xff, 0xf7, 0x73, 0x35, - 0x3e, 0x87, 0xc7, 0xdf, 0xff, 0x00, 0x81, 0x00, - 0xb0, 0x05, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x40, 0x00, 0x40, 0x92, 0x21, 0x50, 0xb1, 0x5d, - // Entry 100 - 13F - 0xfd, 0xdc, 0xbe, 0x5e, 0x00, 0x00, 0x02, 0x64, - 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, - 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, - 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x10, - 0x00, 0x00, 0x44, 0x00, 0x00, 0x10, 0x00, 0x04, - 0x08, 0x00, 0x00, 0x04, 0x00, 0x80, 0x28, 0x04, - 0x00, 0x00, 0x50, 0xd5, 0x2d, 0x00, 0x64, 0x35, - 0x24, 0x52, 0xf4, 0xd4, 0xbd, 0x62, 0xc9, 0x03, - // Entry 180 - 1BF - 0x00, 0x80, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x13, 0x39, 0x01, 0xdd, 0x57, 0x98, - 0x21, 0x18, 0x81, 0x00, 0x00, 0x01, 0x40, 0x82, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x44, 0x00, 0x00, 0x80, 0xea, - 0xa9, 0x39, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, - 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, - 0x04, 0x20, 0x04, 0xa6, 0x00, 0x04, 0x00, 0x00, - 0x81, 0x50, 0x00, 0x00, 0x00, 0x11, 0x84, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x55, - 0x02, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 0x40, - 0x30, 0x83, 0x01, 0x00, 0x00, 0x00, 0x11, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1e, 0xcd, 0xbf, 0x7e, 0xbf, - // Entry 200 - 23F - 0xdf, 0xc3, 0x83, 0x82, 0xc0, 0xfb, 0x57, 0x27, - 0xcd, 0x55, 0xe7, 0x01, 0x00, 0x20, 0xb2, 0xc5, - 0xa4, 0x45, 0x25, 0x9b, 0x02, 0xcf, 0xe0, 0xdf, - 0x03, 0x44, 0x08, 0x10, 0x01, 0x04, 0x01, 0xe3, - 0x92, 0x54, 0xdb, 0x28, 0xd1, 0x5f, 0xf6, 0x6d, - 0x79, 0xed, 0x1c, 0x7d, 0x04, 0x08, 0x00, 0x01, - 0x21, 0x12, 0x6c, 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, - 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, - // 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, - 0xe5, 0x48, 0x00, 0x81, 0x20, 0xc0, 0x05, 0x80, - 0x03, 0x00, 0x00, 0x00, 0xcc, 0x50, 0x40, 0x04, - 0x84, 0x47, 0x84, 0x40, 0x20, 0x10, 0x00, 0x20, - // Entry 2C0 - 2FF - 0x02, 0x50, 0x80, 0x11, 0x00, 0x91, 0x6c, 0xe2, - 0x50, 0x27, 0x1d, 0x11, 0x29, 0x06, 0x59, 0xe9, - 0x33, 0x08, 0x00, 0x20, 0x04, 0x40, 0x10, 0x00, - 0x00, 0x00, 0x50, 0x44, 0x92, 0x49, 0xd6, 0x5d, - 0xa7, 0x81, 0x47, 0x97, 0xfb, 0x00, 0x10, 0x00, - 0x08, 0x00, 0x80, 0x00, 0x40, 0x04, 0x00, 0x01, - 0x02, 0x00, 0x01, 0x40, 0x80, 0x00, 0x00, 0x08, - 0xd8, 0xeb, 0xf6, 0x39, 0xc4, 0x89, 0x12, 0x00, - // Entry 300 - 33F - 0x00, 0x0c, 0x04, 0x01, 0x20, 0x20, 0xdd, 0xa0, - 0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, - 0x04, 0x10, 0xd0, 0x9d, 0x95, 0x13, 0x04, 0x80, - 0x00, 0x01, 0xd0, 0x12, 0x40, 0x00, 0x10, 0xb0, - 0x10, 0x62, 0x4c, 0xd2, 0x02, 0x01, 0x4a, 0x00, - 0x46, 0x04, 0x00, 0x08, 0x02, 0x00, 0x20, 0x80, - 0x00, 0x80, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x00, 0xf0, 0xd8, 0x6f, 0x15, 0x02, 0x08, 0x00, - // Entry 340 - 37F - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, - 0x00, 0x10, 0x00, 0x00, 0x00, 0xf0, 0x84, 0xe3, - 0xdd, 0xbf, 0xf9, 0xf9, 0x3b, 0x7f, 0x7f, 0xdb, - 0xfd, 0xfc, 0xfe, 0xdf, 0xff, 0xfd, 0xff, 0xf6, - 0xfb, 0xfc, 0xf7, 0x1f, 0xff, 0xb3, 0x6c, 0xff, - 0xd9, 0xad, 0xdf, 0xfe, 0xef, 0xba, 0xdf, 0xff, - 0xff, 0xff, 0xb7, 0xdd, 0x7d, 0xbf, 0xab, 0xff, - 0xfd, 0xfd, 0xdf, 0x2f, 0x9c, 0xdf, 0xf3, 0x6f, - // Entry 380 - 3BF - 0xdf, 0xdd, 0xff, 0xfb, 0xee, 0xd2, 0xab, 0x5f, - 0xd5, 0xdf, 0x7f, 0xff, 0xeb, 0xff, 0xe4, 0x4d, - 0xf9, 0xff, 0xfe, 0xf7, 0xfd, 0xdf, 0xfb, 0xbf, - 0xee, 0xdb, 0x6f, 0xef, 0xff, 0x7f, 0xff, 0xff, - 0xf7, 0x5f, 0xd3, 0x3b, 0xfd, 0xd9, 0xdf, 0xeb, - 0xbc, 0x08, 0x05, 0x24, 0xff, 0x07, 0x70, 0xfe, - 0xe6, 0x5e, 0x00, 0x08, 0x00, 0x83, 0x3d, 0x1b, - 0x06, 0xe6, 0x72, 0x60, 0xd1, 0x3c, 0x7f, 0x44, - // Entry 3C0 - 3FF - 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, - 0x84, 0x51, 0xc0, 0xf3, 0xfb, 0x47, 0x00, 0x01, - 0x05, 0xd1, 0x50, 0x58, 0x00, 0x00, 0x00, 0x10, - 0x04, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x17, 0xd2, - 0xb9, 0xfd, 0xfc, 0xba, 0xfe, 0xef, 0xc7, 0xbe, - // Entry 400 - 43F - 0x53, 0x6f, 0xdf, 0xe7, 0xdb, 0x65, 0xbb, 0x7f, - 0xfa, 0xff, 0x77, 0xf3, 0xef, 0xbf, 0xfd, 0xf7, - 0xdf, 0xdf, 0x9b, 0x7f, 0xff, 0xff, 0x7f, 0x6f, - 0xf7, 0xfb, 0xeb, 0xdf, 0xbc, 0xff, 0xbf, 0x6b, - 0x7b, 0xfb, 0xff, 0xce, 0x76, 0xbd, 0xf7, 0xf7, - 0xdf, 0xdc, 0xf7, 0xf7, 0xff, 0xdf, 0xf3, 0xfe, - 0xef, 0xff, 0xff, 0xff, 0xb6, 0x7f, 0x7f, 0xde, - 0xf7, 0xb9, 0xeb, 0x77, 0xff, 0xfb, 0xbf, 0xdf, - // Entry 440 - 47F - 0xfd, 0xfe, 0xfb, 0xff, 0xfe, 0xeb, 0x1f, 0x7d, - 0x2f, 0xfd, 0xb6, 0xb5, 0xa5, 0xfc, 0xff, 0xfd, - 0x7f, 0x4e, 0xbf, 0x8e, 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, - 0xcd, 0xff, 0xfb, 0xff, 0xdf, 0xd7, 0xea, 0xff, - 0xe5, 0x5f, 0x6d, 0x0f, 0xa7, 0x51, 0x04, 0x44, - // Entry 480 - 4BF - 0x13, 0x50, 0x5d, 0xaf, 0xa6, 0xfd, 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, - 0x00, 0x22, 0x00, 0x74, 0x69, 0x10, 0x08, 0x04, - 0x41, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x51, 0x20, 0x05, 0x04, 0x01, 0x00, 0x00, - 0x06, 0x01, 0x20, 0x00, 0x18, 0x01, 0x92, 0xb1, - // Entry 4C0 - 4FF - 0xfd, 0x47, 0x49, 0x06, 0x95, 0x06, 0x57, 0xed, - 0xfb, 0x4c, 0x1c, 0x6b, 0x83, 0x04, 0x62, 0x40, - 0x00, 0x11, 0x42, 0x00, 0x00, 0x00, 0x54, 0x83, - 0xb8, 0x4f, 0x10, 0x8c, 0x89, 0x46, 0xde, 0xf7, - 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, - // 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, - 0xfd, 0xfc, 0xd5, 0xed, 0x47, 0xf4, 0x7e, 0x10, - 0x01, 0x01, 0x84, 0x6d, 0xff, 0xf7, 0xdd, 0xf9, - 0x5b, 0x05, 0x86, 0xed, 0xf5, 0x77, 0xbd, 0x3c, - 0x00, 0x00, 0x00, 0x42, 0x71, 0x42, 0x00, 0x40, - // Entry 540 - 57F - 0x00, 0x00, 0x01, 0x43, 0x19, 0x00, 0x08, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - // Entry 580 - 5BF - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xab, 0xbd, 0xe7, 0x57, 0xee, 0x13, 0x5d, - 0x09, 0xc1, 0x40, 0x21, 0xfa, 0x17, 0x01, 0x80, - 0x00, 0x00, 0x00, 0x00, 0xf0, 0xce, 0xfb, 0xbf, - 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x30, 0x15, 0xa3, 0x10, 0x00, 0x00, 0x00, - 0x11, 0x04, 0x16, 0x00, 0x00, 0x02, 0x00, 0x81, - 0xa3, 0x01, 0x50, 0x00, 0x00, 0x83, 0x11, 0x40, - // Entry 5C0 - 5FF - 0x00, 0x00, 0x00, 0xf0, 0xdd, 0x7b, 0x3e, 0x02, - 0xaa, 0x10, 0x5d, 0x98, 0x52, 0x00, 0x80, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x02, 0x02, - 0x19, 0x00, 0x10, 0x02, 0x10, 0x61, 0x5a, 0x9d, - 0x31, 0x00, 0x00, 0x00, 0x01, 0x10, 0x02, 0x20, - 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x20, 0x00, - 0x00, 0x1f, 0xdf, 0xf2, 0xb9, 0xff, 0xfd, 0x3f, - 0x1f, 0x18, 0xcf, 0x9c, 0xbf, 0xaf, 0x5f, 0xfe, - // Entry 600 - 63F - 0x7b, 0x4b, 0x40, 0x10, 0xe1, 0xfd, 0xaf, 0xd9, - 0xb7, 0xf6, 0xfb, 0xb3, 0xc7, 0xff, 0x6f, 0xf1, - 0x73, 0xb1, 0x7f, 0x9f, 0x7f, 0xbd, 0xfc, 0xb7, - 0xee, 0x1c, 0xfa, 0xcb, 0xef, 0xdd, 0xf9, 0xbd, - 0x6e, 0xae, 0x55, 0xfd, 0x6e, 0x81, 0x76, 0x1f, - 0xd4, 0x77, 0xf5, 0x7d, 0xfb, 0xff, 0xeb, 0xfe, - 0xbe, 0x5f, 0x46, 0x1b, 0xe9, 0x5f, 0x50, 0x18, - 0x02, 0xfa, 0xf7, 0x9d, 0x15, 0x97, 0x05, 0x0f, - // Entry 640 - 67F - 0x75, 0xc4, 0x7d, 0x81, 0x82, 0xf1, 0x57, 0x6c, - 0xff, 0xe4, 0xef, 0x6f, 0xff, 0xfc, 0xdd, 0xde, - 0xfc, 0xfd, 0x76, 0x5f, 0x7a, 0x1f, 0x00, 0x98, - 0x02, 0xfb, 0xa3, 0xef, 0xf3, 0xd6, 0xf2, 0xff, - 0xb9, 0xda, 0x7d, 0x50, 0x1e, 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, - 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, 0x8c, 0x58, 0xd5, 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, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x80, 0x10, 0x10, 0xab, - 0x6d, 0x93, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x80, 0x25, 0x00, 0x00, - // Entry 700 - 73F - 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x80, 0x86, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xdf, 0x18, 0x00, 0x00, 0x02, 0xf0, 0xfd, 0x79, - 0x3b, 0x00, 0x25, 0x00, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, - 0x03, 0x00, 0x09, 0x20, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - // Entry 740 - 77F - 0x00, 0x00, 0x00, 0xef, 0xd5, 0xfd, 0xcf, 0x7e, - 0xa0, 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, - 0x97, 0x7c, 0x9f, 0x31, 0xcc, 0x68, 0xd1, 0x03, - 0xd5, 0x57, 0x27, 0x14, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x2c, 0xf7, 0xcb, 0x1f, 0x14, 0x60, - // Entry 780 - 7BF - 0x03, 0x68, 0x01, 0x10, 0x8b, 0x38, 0x8a, 0x01, - 0x00, 0x00, 0x20, 0x00, 0x24, 0x44, 0x00, 0x00, - 0x10, 0x03, 0x11, 0x02, 0x01, 0x00, 0x00, 0xf0, - 0xf5, 0xff, 0xd5, 0x97, 0xbc, 0x70, 0xd6, 0x78, - 0x78, 0x15, 0x50, 0x00, 0xa4, 0x84, 0xa9, 0x41, - 0x00, 0x00, 0x00, 0x6b, 0x39, 0x52, 0x74, 0x00, - 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, - 0xcc, 0x16, 0x9e, 0xea, 0x35, 0x7d, 0xef, 0xff, - 0xbd, 0xa4, 0xaf, 0x01, 0x44, 0x18, 0x01, 0x4d, - 0x4e, 0x4a, 0x08, 0x50, 0x28, 0x30, 0xe0, 0x80, - 0x10, 0x20, 0x24, 0x00, 0xff, 0x2f, 0xd3, 0x60, - 0xfe, 0x01, 0x02, 0x88, 0x0a, 0x40, 0x16, 0x01, - 0x01, 0x15, 0x2b, 0x3c, 0x01, 0x00, 0x00, 0x10, - // Entry 800 - 83F - 0x90, 0x49, 0x41, 0x02, 0x02, 0x01, 0xe1, 0xbf, - 0xbf, 0x03, 0x00, 0x00, 0x10, 0xd4, 0xa3, 0xd1, - 0x40, 0x9c, 0x44, 0xdf, 0xf5, 0x8f, 0x66, 0xb3, - 0x55, 0x20, 0xd4, 0xc1, 0xd8, 0x30, 0x3d, 0x80, - 0x00, 0x00, 0x00, 0x04, 0xd4, 0x11, 0xc5, 0x84, - 0x2e, 0x50, 0x00, 0x22, 0x50, 0x6e, 0xbd, 0x93, - 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, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x02, 0x28, - 0x84, 0x00, 0x23, 0xc0, 0x23, 0x24, 0x00, 0x00, - 0x00, 0xcb, 0xe4, 0x3a, 0x42, 0x88, 0x14, 0xf1, - 0xef, 0xff, 0x7f, 0x12, 0x01, 0x01, 0x84, 0x50, - 0x07, 0xfc, 0xff, 0xff, 0x0f, 0x01, 0x00, 0x40, - 0x10, 0x38, 0x01, 0x01, 0x1c, 0x12, 0x40, 0xe1, - // Entry 880 - 8BF - 0x76, 0x16, 0x08, 0x03, 0x10, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x24, - 0x0a, 0x00, 0x80, 0x00, 0x00, -} - -// altLangISO3 holds an alphabetically sorted list of 3-letter language code alternatives -// to 2-letter language codes that cannot be derived using the method described above. -// Each 3-letter code is followed by its 1-byte langID. -const altLangISO3 tag.Index = "---\x00cor\x00hbs\x01heb\x02kin\x03spa\x04yid\x05\xff\xff\xff\xff" - -// altLangIndex is used to convert indexes in altLangISO3 to langIDs. -// Size: 12 bytes, 6 elements -var altLangIndex = [6]uint16{ - 0x0278, 0x03fd, 0x01f3, 0x03dc, 0x0139, 0x0200, -} - -// langAliasMap maps langIDs to their suggested replacements. -// Size: 644 bytes, 161 elements -var langAliasMap = [161]fromTo{ - 0: {from: 0x81, to: 0x87}, - 1: {from: 0x181, to: 0x1a7}, - 2: {from: 0x1eb, to: 0x1da}, - 3: {from: 0x1f3, to: 0x1b5}, - 4: {from: 0x200, to: 0x508}, - 5: {from: 0x207, to: 0x206}, - 6: {from: 0x307, to: 0x3d3}, - 7: {from: 0x33e, to: 0x366}, - 8: {from: 0x3fd, to: 0x428}, - 9: {from: 0x470, to: 0x14e}, - 10: {from: 0x486, to: 0x447}, - 11: {from: 0x498, to: 0x20}, - 12: {from: 0x533, to: 0x539}, - 13: {from: 0x584, to: 0x129}, - 14: {from: 0x625, to: 0x1ea6}, - 15: {from: 0x646, to: 0x427}, - 16: {from: 0x657, to: 0x427}, - 17: {from: 0x6e2, to: 0x39}, - 18: {from: 0x6ed, to: 0x1d0}, - 19: {from: 0x733, to: 0x2196}, - 20: {from: 0x7a8, to: 0x55}, - 21: {from: 0x7ae, to: 0x2990}, - 22: {from: 0x7ba, to: 0x57}, - 23: {from: 0x7db, to: 0x140}, - 24: {from: 0x801, to: 0x59}, - 25: {from: 0x80a, to: 0x8c}, - 26: {from: 0x873, to: 0x805}, - 27: {from: 0x8b8, to: 0xed8}, - 28: {from: 0x9e4, to: 0x328}, - 29: {from: 0xa2b, to: 0x2bc}, - 30: {from: 0xa32, to: 0xbd}, - 31: {from: 0xab3, to: 0x3317}, - 32: {from: 0xb2d, to: 0x51f}, - 33: {from: 0xb6a, to: 0x264f}, - 34: {from: 0xb73, to: 0xbb8}, - 35: {from: 0xb90, to: 0x444}, - 36: {from: 0xbb1, to: 0x421e}, - 37: {from: 0xbb4, to: 0x51f}, - 38: {from: 0xbf3, to: 0x2d9c}, - 39: {from: 0xc23, to: 0x3176}, - 40: {from: 0xcae, to: 0xf0}, - 41: {from: 0xcfd, to: 0xf6}, - 42: {from: 0xdbd, to: 0x116}, - 43: {from: 0xdcc, to: 0x324}, - 44: {from: 0xded, to: 0xdf0}, - 45: {from: 0xdf3, to: 0x526}, - 46: {from: 0xed4, to: 0x204f}, - 47: {from: 0xee3, to: 0x2e8f}, - 48: {from: 0xf2e, to: 0x35e}, - 49: {from: 0x10c5, to: 0x13b}, - 50: {from: 0x10f9, to: 0x2c7}, - 51: {from: 0x1195, to: 0x1e4}, - 52: {from: 0x126e, to: 0x20}, - 53: {from: 0x1419, to: 0x159}, - 54: {from: 0x1465, to: 0x149}, - 55: {from: 0x1514, to: 0xd90}, - 56: {from: 0x1518, to: 0x387}, - 57: {from: 0x1527, to: 0x16ba}, - 58: {from: 0x1575, to: 0x208}, - 59: {from: 0x1578, to: 0x109}, - 60: {from: 0x1598, to: 0x3ca4}, - 61: {from: 0x165f, to: 0x195}, - 62: {from: 0x16bd, to: 0x131}, - 63: {from: 0x16f5, to: 0x29ed}, - 64: {from: 0x170d, to: 0x18e}, - 65: {from: 0x171c, to: 0xf34}, - 66: {from: 0x176f, to: 0x1519}, - 67: {from: 0x17fe, to: 0x17ab}, - 68: {from: 0x180b, to: 0x18e8}, - 69: {from: 0x187f, to: 0x42c}, - 70: {from: 0x196e, to: 0x1cf6}, - 71: {from: 0x1a69, to: 0x2ba5}, - 72: {from: 0x1a7f, to: 0x1f0}, - 73: {from: 0x1b4f, to: 0x1f2}, - 74: {from: 0x1b7b, to: 0x150a}, - 75: {from: 0x202d, to: 0x37a6}, - 76: {from: 0x2032, to: 0x20d2}, - 77: {from: 0x204f, to: 0x302}, - 78: {from: 0x20d8, to: 0x26b}, - 79: {from: 0x20e3, to: 0x25a}, - 80: {from: 0x20e7, to: 0x225}, - 81: {from: 0x20ee, to: 0x24d}, - 82: {from: 0x2104, to: 0x21e0}, - 83: {from: 0x212a, to: 0x274}, - 84: {from: 0x218e, to: 0x11d}, - 85: {from: 0x21c3, to: 0x1556}, - 86: {from: 0x21db, to: 0x4fa}, - 87: {from: 0x21e9, to: 0x495}, - 88: {from: 0x2222, to: 0x11d}, - 89: {from: 0x222c, to: 0x11d}, - 90: {from: 0x2257, to: 0x91f}, - 91: {from: 0x230b, to: 0x321b}, - 92: {from: 0x2377, to: 0x335a}, - 93: {from: 0x2467, to: 0x2be}, - 94: {from: 0x24d9, to: 0x2f6}, - 95: {from: 0x24e5, to: 0x2f1}, - 96: {from: 0x24ef, to: 0x316}, - 97: {from: 0x2545, to: 0xb50}, - 98: {from: 0x259e, to: 0xe0}, - 99: {from: 0x2633, to: 0x2c7}, - 100: {from: 0x26be, to: 0x26a9}, - 101: {from: 0x26ee, to: 0x3bf}, - 102: {from: 0x271c, to: 0x3ca4}, - 103: {from: 0x275a, to: 0x26a9}, - 104: {from: 0x277e, to: 0x434d}, - 105: {from: 0x28e4, to: 0x282c}, - 106: {from: 0x2909, to: 0x348}, - 107: {from: 0x297b, to: 0x2d9c}, - 108: {from: 0x2b0f, to: 0x384}, - 109: {from: 0x2bf1, to: 0x38c}, - 110: {from: 0x2c34, to: 0x3ca4}, - 111: {from: 0x2cf1, to: 0x3b5}, - 112: {from: 0x2d08, to: 0x58c}, - 113: {from: 0x2d3c, to: 0x143}, - 114: {from: 0x2d3d, to: 0x143}, - 115: {from: 0x2df4, to: 0x2e8}, - 116: {from: 0x2dfd, to: 0x19c1}, - 117: {from: 0x2e0f, to: 0x2d8a}, - 118: {from: 0x2e16, to: 0x289}, - 119: {from: 0x2e49, to: 0x7c}, - 120: {from: 0x2e5a, to: 0x2277}, - 121: {from: 0x2e95, to: 0x2e90}, - 122: {from: 0x2ee4, to: 0x2ecc}, - 123: {from: 0x3188, to: 0x3bb}, - 124: {from: 0x335b, to: 0x3383}, - 125: {from: 0x341f, to: 0x3d3}, - 126: {from: 0x34e3, to: 0x18c5}, - 127: {from: 0x35db, to: 0x408}, - 128: {from: 0x364d, to: 0x23e}, - 129: {from: 0x366b, to: 0x3ea}, - 130: {from: 0x36f2, to: 0x43b}, - 131: {from: 0x37b5, to: 0x11d}, - 132: {from: 0x380b, to: 0x38e7}, - 133: {from: 0x3820, to: 0x2c90}, - 134: {from: 0x3824, to: 0xa7}, - 135: {from: 0x3827, to: 0x321d}, - 136: {from: 0x3861, to: 0x399b}, - 137: {from: 0x3887, to: 0x3fb5}, - 138: {from: 0x389a, to: 0x39cc}, - 139: {from: 0x38a9, to: 0x1f99}, - 140: {from: 0x38aa, to: 0x2e8f}, - 141: {from: 0x3951, to: 0x474}, - 142: {from: 0x3b43, to: 0xd86}, - 143: {from: 0x3b6d, to: 0x132}, - 144: {from: 0x3c8e, to: 0x4b2}, - 145: {from: 0x3fb2, to: 0xfc}, - 146: {from: 0x41fd, to: 0xa86}, - 147: {from: 0x42b3, to: 0x568}, - 148: {from: 0x42ee, to: 0x3f55}, - 149: {from: 0x436d, to: 0x251}, - 150: {from: 0x43c0, to: 0x36c0}, - 151: {from: 0x43c2, to: 0x10b}, - 152: {from: 0x44a4, to: 0x3317}, - 153: {from: 0x44d8, to: 0x508}, - 154: {from: 0x45bf, to: 0x23fe}, - 155: {from: 0x45d2, to: 0x26d1}, - 156: {from: 0x4605, to: 0x48a3}, - 157: {from: 0x46a3, to: 0x4695}, - 158: {from: 0x4733, to: 0x473a}, - 159: {from: 0x490b, to: 0x316}, - 160: {from: 0x499c, to: 0x519}, -} - -// Size: 161 bytes, 161 elements -var langAliasTypes = [161]langAliasType{ - // 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, - // Entry 40 - 7F - 1, 0, 1, 1, 1, 1, 0, 0, 2, 1, 0, 0, 0, 1, 1, 1, - 1, 1, 0, 1, 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, 2, - // Entry 80 - BF - 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, -} - const ( - _Latn = 82 - _Hani = 50 - _Hans = 52 - _Hant = 53 - _Qaaa = 131 - _Qaai = 139 - _Qabx = 180 - _Zinh = 224 - _Zyyy = 229 - _Zzzz = 230 + _Latn = 87 + _Hani = 54 + _Hans = 56 + _Hant = 57 + _Qaaa = 139 + _Qaai = 147 + _Qabx = 188 + _Zinh = 236 + _Zyyy = 241 + _Zzzz = 242 ) -// 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: 928 bytes - "----AdlmAfakAghbAhomArabAranArmiArmnAvstBaliBamuBassBatkBengBhksBlisBopo" + - "BrahBraiBugiBuhdCakmCansCariChamCherCirtCoptCprtCyrlCyrsDevaDsrtDuplEgyd" + - "EgyhEgypElbaEthiGeokGeorGlagGothGranGrekGujrGuruHanbHangHaniHanoHansHant" + - "HatrHebrHiraHluwHmngHrktHungIndsItalJamoJavaJpanJurcKaliKanaKharKhmrKhoj" + - "KitlKitsKndaKoreKpelKthiLanaLaooLatfLatgLatnLekeLepcLimbLinaLinbLisuLoma" + - "LyciLydiMahjMandManiMarcMayaMendMercMeroMlymModiMongMoonMrooMteiMultMymr" + - "NarbNbatNewaNkgbNkooNshuOgamOlckOrkhOryaOsgeOsmaPalmPaucPermPhagPhliPhlp" + - "PhlvPhnxPiqdPlrdPrtiQaaaQaabQaacQaadQaaeQaafQaagQaahQaaiQaajQaakQaalQaam" + - "QaanQaaoQaapQaaqQaarQaasQaatQaauQaavQaawQaaxQaayQaazQabaQabbQabcQabdQabe" + - "QabfQabgQabhQabiQabjQabkQablQabmQabnQaboQabpQabqQabrQabsQabtQabuQabvQabw" + - "QabxRjngRoroRunrSamrSaraSarbSaurSgnwShawShrdSiddSindSinhSoraSundSyloSyrc" + - "SyreSyrjSyrnTagbTakrTaleTaluTamlTangTavtTeluTengTfngTglgThaaThaiTibtTirh" + - "UgarVaiiVispWaraWoleXpeoXsuxYiiiZinhZmthZsyeZsymZxxxZyyyZzzz\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: 1319 bytes, 1319 elements -var suppressScript = [1319]uint8{ +var regionToGroups = []uint8{ // 357 elements // Entry 0 - 3F - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x04, // Entry 40 - 7F - 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 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, - 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, + 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, // Entry 80 - BF - 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, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x04, 0x01, 0x00, 0x04, 0x02, 0x00, 0x04, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, // Entry C0 - FF + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, + 0x04, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x52, 0x52, 0x00, 0x00, // Entry 100 - 13F 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, - 0x00, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x2d, 0x00, 0x00, 0x52, 0x00, 0x00, 0x52, - 0x00, 0x52, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, - // Entry 140 - 17F - 0x52, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, - 0x52, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x52, 0x00, 0x00, 0x52, 0x52, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x52, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x52, 0x00, 0x00, 0x00, 0x52, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x52, 0x2e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - // Entry 1C0 - 1FF - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x52, 0x52, 0x00, 0x52, 0x52, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, - 0x52, 0x52, 0x00, 0x37, 0x00, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - // Entry 200 - 23F - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x29, 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, - 0x00, 0x00, 0x1e, 0x00, 0x00, 0x52, 0x00, 0x00, - // Entry 240 - 27F - 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x4a, 0x00, 0x4b, 0x00, 0x20, 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, 0x00, 0x00, 0x00, - // Entry 280 - 2BF - 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x52, 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, 0x52, 0x00, 0x00, 0x4f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, - // Entry 2C0 - 2FF - 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 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, 0x52, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, - 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, - // Entry 300 - 33F - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x52, 0x52, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, - // Entry 340 - 37F - 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x52, - 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, - 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x52, 0x00, 0x00, - 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, - // Entry 380 - 3BF - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, - 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x52, - 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, - // Entry 3C0 - 3FF - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, - 0x52, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1e, 0x00, 0x00, 0x52, 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, - 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - // Entry 400 - 43F - 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x52, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, - 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, - 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x52, 0x52, 0x00, 0x00, 0x00, 0x00, - // Entry 440 - 47F - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcd, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, - 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xd5, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, - 0x52, 0x00, 0x00, 0x00, 0x52, 0x00, 0x52, 0x00, - 0x52, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, - // Entry 480 - 4BF - 0x52, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, - 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - // Entry 4C0 - 4FF 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x05, 0x04, 0x00, + 0x00, 0x04, 0x00, 0x04, 0x04, 0x05, 0x00, 0x00, + // Entry 140 - 17F 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - // Entry 500 - 53F - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x37, 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, 0x52, 0x00, 0x00, -} - -const ( - _001 = 1 - _419 = 30 - _BR = 64 - _CA = 72 - _ES = 109 - _GB = 122 - _MD = 187 - _PT = 237 - _UK = 305 - _US = 308 - _ZZ = 356 - _XA = 322 - _XC = 324 - _XK = 332 -) - -// isoRegionOffset needs to be added to the index of regionISO to obtain the regionID -// for 2-letter ISO codes. (The first isoRegionOffset regionIDs are reserved for -// the UN.M49 codes used for groups.) -const isoRegionOffset = 31 - -// regionTypes defines the status of a region for various standards. -// Size: 357 bytes, 357 elements -var regionTypes = [357]uint8{ - // Entry 0 - 3F - 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, 0x05, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - // Entry 40 - 7F - 0x06, 0x06, 0x06, 0x04, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x04, 0x06, 0x04, 0x00, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x04, 0x06, - 0x04, 0x06, 0x06, 0x06, 0x06, 0x00, 0x06, 0x04, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x06, - 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - // Entry 80 - BF - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x00, 0x04, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - // Entry C0 - FF - 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x06, - 0x06, 0x06, 0x06, 0x00, 0x06, 0x04, 0x06, 0x06, - 0x06, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x06, - 0x06, 0x00, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - // Entry 100 - 13F - 0x05, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x04, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x02, 0x06, 0x04, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - // Entry 140 - 17F - 0x00, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x05, 0x05, 0x05, 0x05, 0x04, 0x06, 0x06, 0x04, - 0x06, 0x06, 0x04, 0x06, 0x05, -} - -// regionISO holds a list of alphabetically sorted 2-letter ISO region codes. -// Each 2-letter codes is followed by two bytes with the following meaning: -// - [A-Z}{2}: the first letter of the 2-letter code plus these two -// letters form the 3-letter ISO code. -// - 0, n: index into altRegionISO3. -const regionISO tag.Index = "" + // Size: 1308 bytes - "AAAAACSCADNDAEREAFFGAGTGAIIAALLBAMRMANNTAOGOAQTAARRGASSMATUTAUUSAWBWAXLA" + - "AZZEBAIHBBRBBDGDBEELBFFABGGRBHHRBIDIBJENBLLMBMMUBNRNBOOLBQESBRRABSHSBTTN" + - "BUURBVVTBWWABYLRBZLZCAANCCCKCDODCFAFCGOGCHHECIIVCKOKCLHLCMMRCNHNCOOLCPPT" + - "CRRICS\x00\x00CTTECUUBCVPVCWUWCXXRCYYPCZZEDDDRDEEUDGGADJJIDKNKDMMADOOMDY" + - "HYDZZAEA ECCUEESTEGGYEHSHERRIESSPETTHEU\x00\x03EZ FIINFJJIFKLKFMSMFORO" + - "FQ\x00\x18FRRAFXXXGAABGBBRGDRDGEEOGFUFGGGYGHHAGIIBGLRLGMMBGNINGPLPGQNQGR" + - "RCGS\x00\x06GTTMGUUMGWNBGYUYHKKGHMMDHNNDHRRVHTTIHUUNHVVOIC IDDNIERLILSR" + - "IMMNINNDIOOTIQRQIRRNISSLITTAJEEYJMAMJOORJPPNJTTNKEENKGGZKHHMKIIRKM\x00" + - "\x09KNNAKP\x00\x0cKRORKWWTKY\x00\x0fKZAZLAAOLBBNLCCALIIELKKALRBRLSSOLTTU" + - "LUUXLVVALYBYMAARMCCOMDDAMENEMFAFMGDGMHHLMIIDMKKDMLLIMMMRMNNGMOACMPNPMQTQ" + - "MRRTMSSRMTLTMUUSMVDVMWWIMXEXMYYSMZOZNAAMNCCLNEERNFFKNGGANHHBNIICNLLDNOOR" + - "NPPLNQ\x00\x1eNRRUNTTZNUIUNZZLOMMNPAANPCCIPEERPFYFPGNGPHHLPKAKPLOLPM\x00" + - "\x12PNCNPRRIPSSEPTRTPUUSPWLWPYRYPZCZQAATQMMMQNNNQOOOQPPPQQQQQRRRQSSSQTTT" + - "QU\x00\x03QVVVQWWWQXXXQYYYQZZZREEURHHOROOURS\x00\x15RUUSRWWASAAUSBLBSCYC" + - "SDDNSEWESGGPSHHNSIVNSJJMSKVKSLLESMMRSNENSOOMSRURSSSDSTTPSUUNSVLVSXXMSYYR" + - "SZWZTAAATCCATDCDTF\x00\x18TGGOTHHATJJKTKKLTLLSTMKMTNUNTOONTPMPTRURTTTOTV" + - "UVTWWNTZZAUAKRUGGAUK UMMIUN USSAUYRYUZZBVAATVCCTVDDRVEENVGGBVIIRVNNMVU" + - "UTWFLFWKAKWSSMXAAAXBBBXCCCXDDDXEEEXFFFXGGGXHHHXIIIXJJJXKKKXLLLXMMMXNNNXO" + - "OOXPPPXQQQXRRRXSSSXTTTXUUUXVVVXWWWXXXXXYYYXZZZYDMDYEEMYT\x00\x1bYUUGZAAF" + - "ZMMBZRARZWWEZZZZ\xff\xff\xff\xff" - -// altRegionISO3 holds a list of 3-letter region codes that cannot be -// mapped to 2-letter codes using the default algorithm. This is a short list. -const altRegionISO3 string = "SCGQUUSGSCOMPRKCYMSPMSRBATFMYTATN" - -// altRegionIDs holds a list of regionIDs the positions of which match those -// of the 3-letter ISO codes in altRegionISO3. -// Size: 22 bytes, 11 elements -var altRegionIDs = [11]uint16{ - 0x0056, 0x006f, 0x0087, 0x00a7, 0x00a9, 0x00ac, 0x00e9, 0x0104, - 0x0120, 0x015e, 0x00db, -} - -// Size: 80 bytes, 20 elements -var regionOldMap = [20]fromTo{ - 0: {from: 0x43, to: 0xc3}, - 1: {from: 0x57, to: 0xa6}, - 2: {from: 0x5e, to: 0x5f}, - 3: {from: 0x65, to: 0x3a}, - 4: {from: 0x78, to: 0x77}, - 5: {from: 0x92, to: 0x36}, - 6: {from: 0xa2, to: 0x132}, - 7: {from: 0xc0, to: 0x132}, - 8: {from: 0xd6, to: 0x13e}, - 9: {from: 0xdb, to: 0x2a}, - 10: {from: 0xee, to: 0x132}, - 11: {from: 0xf1, to: 0xe1}, - 12: {from: 0xfb, to: 0x6f}, - 13: {from: 0x102, to: 0x163}, - 14: {from: 0x129, to: 0x125}, - 15: {from: 0x131, to: 0x7a}, - 16: {from: 0x139, to: 0x13d}, - 17: {from: 0x140, to: 0x132}, - 18: {from: 0x15c, to: 0x15d}, - 19: {from: 0x162, to: 0x4a}, -} - -// m49 maps regionIDs to UN.M49 codes. The first isoRegionOffset entries are -// codes indicating collections of regions. -// Size: 714 bytes, 357 elements -var m49 = [357]int16{ - // Entry 0 - 3F - 0, 1, 2, 3, 5, 9, 11, 13, - 14, 15, 17, 18, 19, 21, 29, 30, - 34, 35, 39, 53, 54, 57, 61, 142, - 143, 145, 150, 151, 154, 155, 419, 958, - 0, 20, 784, 4, 28, 660, 8, 51, - 530, 24, 10, 32, 16, 40, 36, 533, - 248, 31, 70, 52, 50, 56, 854, 100, - 48, 108, 204, 652, 60, 96, 68, 535, - // Entry 40 - 7F - 76, 44, 64, 104, 74, 72, 112, 84, - 124, 166, 180, 140, 178, 756, 384, 184, - 152, 120, 156, 170, 0, 188, 891, 296, - 192, 132, 531, 162, 196, 203, 278, 276, - 0, 262, 208, 212, 214, 204, 12, 0, - 218, 233, 818, 732, 232, 724, 231, 967, - 0, 246, 242, 238, 583, 234, 0, 250, - 249, 266, 826, 308, 268, 254, 831, 288, - // Entry 80 - BF - 292, 304, 270, 324, 312, 226, 300, 239, - 320, 316, 624, 328, 344, 334, 340, 191, - 332, 348, 854, 0, 360, 372, 376, 833, - 356, 86, 368, 364, 352, 380, 832, 388, - 400, 392, 581, 404, 417, 116, 296, 174, - 659, 408, 410, 414, 136, 398, 418, 422, - 662, 438, 144, 430, 426, 440, 442, 428, - 434, 504, 492, 498, 499, 663, 450, 584, - // Entry C0 - FF - 581, 807, 466, 104, 496, 446, 580, 474, - 478, 500, 470, 480, 462, 454, 484, 458, - 508, 516, 540, 562, 574, 566, 548, 558, - 528, 578, 524, 10, 520, 536, 570, 554, - 512, 591, 0, 604, 258, 598, 608, 586, - 616, 666, 612, 630, 275, 620, 581, 585, - 600, 591, 634, 959, 960, 961, 962, 963, - 964, 965, 966, 967, 968, 969, 970, 971, - // Entry 100 - 13F - 972, 638, 716, 642, 688, 643, 646, 682, - 90, 690, 729, 752, 702, 654, 705, 744, - 703, 694, 674, 686, 706, 740, 728, 678, - 810, 222, 534, 760, 748, 0, 796, 148, - 260, 768, 764, 762, 772, 626, 795, 788, - 776, 626, 792, 780, 798, 158, 834, 804, - 800, 826, 581, 0, 840, 858, 860, 336, - 670, 704, 862, 92, 850, 704, 548, 876, - // Entry 140 - 17F - 581, 882, 973, 974, 975, 976, 977, 978, - 979, 980, 981, 982, 983, 984, 985, 986, - 987, 988, 989, 990, 991, 992, 993, 994, - 995, 996, 997, 998, 720, 887, 175, 891, - 710, 894, 180, 716, 999, -} - -// m49Index gives indexes into fromM49 based on the three most significant bits -// of a 10-bit UN.M49 code. To search an UN.M49 code in fromM49, search in -// fromM49[m49Index[msb39(code)]:m49Index[msb3(code)+1]] -// for an entry where the first 7 bits match the 7 lsb of the UN.M49 code. -// The region code is stored in the 9 lsb of the indexed value. -// Size: 18 bytes, 9 elements -var m49Index = [9]int16{ - 0, 59, 107, 142, 180, 219, 258, 290, - 332, -} - -// fromM49 contains entries to map UN.M49 codes to regions. See m49Index for details. -// Size: 664 bytes, 332 elements -var fromM49 = [332]uint16{ - // Entry 0 - 3F - 0x0201, 0x0402, 0x0603, 0x0823, 0x0a04, 0x1026, 0x1205, 0x142a, - 0x1606, 0x1866, 0x1a07, 0x1c08, 0x1e09, 0x202c, 0x220a, 0x240b, - 0x260c, 0x2821, 0x2a0d, 0x3029, 0x3824, 0x3a0e, 0x3c0f, 0x3e31, - 0x402b, 0x4410, 0x4611, 0x482e, 0x4e12, 0x502d, 0x5841, 0x6038, - 0x6434, 0x6627, 0x6833, 0x6a13, 0x6c14, 0x7035, 0x7215, 0x783c, - 0x7a16, 0x8042, 0x883e, 0x8c32, 0x9045, 0x9444, 0x9840, 0xa847, - 0xac99, 0xb508, 0xb93b, 0xc03d, 0xc837, 0xd0c3, 0xd839, 0xe046, - 0xe8a5, 0xf051, 0xf848, 0x0859, 0x10ac, 0x184b, 0x1c17, 0x1e18, - // Entry 40 - 7F - 0x20b2, 0x2219, 0x291f, 0x2c1a, 0x2e1b, 0x3050, 0x341c, 0x361d, - 0x3852, 0x3d2d, 0x445b, 0x4c49, 0x5453, 0x5ca7, 0x5f5e, 0x644c, - 0x684a, 0x704f, 0x7855, 0x7e8f, 0x8058, 0x885c, 0x965d, 0x983a, - 0xa062, 0xa863, 0xac64, 0xb468, 0xbd19, 0xc485, 0xcc6e, 0xce6e, - 0xd06c, 0xd269, 0xd475, 0xdc73, 0xde87, 0xe472, 0xec71, 0xf030, - 0xf278, 0xf477, 0xfc7d, 0x04e4, 0x0920, 0x0c61, 0x1479, 0x187c, - 0x1c82, 0x26ec, 0x285f, 0x2c5e, 0x305f, 0x407f, 0x4880, 0x50a6, - 0x5886, 0x6081, 0x687b, 0x7084, 0x7889, 0x8088, 0x8883, 0x908b, - // Entry 80 - BF - 0x9890, 0x9c8d, 0xa137, 0xa88e, 0xb08c, 0xb891, 0xc09c, 0xc898, - 0xd094, 0xd89b, 0xe09a, 0xe895, 0xf096, 0xf89d, 0x004e, 0x089f, - 0x10a1, 0x1cad, 0x20a0, 0x28a3, 0x30a9, 0x34aa, 0x3cab, 0x42a4, - 0x44ae, 0x461e, 0x4caf, 0x54b4, 0x58b7, 0x5cb3, 0x64b8, 0x6cb1, - 0x70b5, 0x74b6, 0x7cc5, 0x84be, 0x8ccd, 0x94cf, 0x9ccc, 0xa4c2, - 0xacca, 0xb4c7, 0xbcc8, 0xc0cb, 0xc8ce, 0xd8ba, 0xe0c4, 0xe4bb, - 0xe6bc, 0xe8c9, 0xf0b9, 0xf8d0, 0x00e0, 0x08d1, 0x10dc, 0x18da, - 0x20d8, 0x2428, 0x265a, 0x2a2f, 0x2d1a, 0x2e3f, 0x30dd, 0x38d2, - // Entry C0 - FF - 0x493e, 0x54df, 0x5cd7, 0x64d3, 0x6cd5, 0x74de, 0x7cd4, 0x84d9, - 0x88c6, 0x8b32, 0x8e74, 0x90bf, 0x92ef, 0x94e7, 0x9ee1, 0xace5, - 0xb0f0, 0xb8e3, 0xc0e6, 0xc8ea, 0xd0e8, 0xd8ed, 0xe08a, 0xe525, - 0xeceb, 0xf4f2, 0xfd01, 0x0503, 0x0705, 0x0d06, 0x183b, 0x1d0d, - 0x26a8, 0x2825, 0x2cb0, 0x2ebd, 0x34e9, 0x3d38, 0x4512, 0x4d17, - 0x5507, 0x5d13, 0x6104, 0x6509, 0x6d11, 0x7d0c, 0x7f10, 0x813d, - 0x830e, 0x8514, 0x8d60, 0x9963, 0xa15c, 0xa86d, 0xb116, 0xb30a, - 0xb86b, 0xc10a, 0xc915, 0xd10f, 0xd91c, 0xe10b, 0xe84d, 0xf11b, - // Entry 100 - 13F - 0xf523, 0xf922, 0x0121, 0x0924, 0x1128, 0x192b, 0x2022, 0x2927, - 0x312a, 0x3726, 0x391e, 0x3d2c, 0x4130, 0x492f, 0x4ec1, 0x5518, - 0x646a, 0x747a, 0x7e7e, 0x809e, 0x8297, 0x852e, 0x9134, 0xa53c, - 0xac36, 0xb535, 0xb936, 0xbd3a, 0xd93f, 0xe541, 0xed5d, 0xef5d, - 0xf656, 0xfd61, 0x7c1f, 0x7ef3, 0x80f4, 0x82f5, 0x84f6, 0x86f7, - 0x88f8, 0x8af9, 0x8cfa, 0x8e6f, 0x90fc, 0x92fd, 0x94fe, 0x96ff, - 0x9900, 0x9b42, 0x9d43, 0x9f44, 0xa145, 0xa346, 0xa547, 0xa748, - 0xa949, 0xab4a, 0xad4b, 0xaf4c, 0xb14d, 0xb34e, 0xb54f, 0xb750, - // Entry 140 - 17F - 0xb951, 0xbb52, 0xbd53, 0xbf54, 0xc155, 0xc356, 0xc557, 0xc758, - 0xc959, 0xcb5a, 0xcd5b, 0xcf64, -} - -// Size: 1463 bytes -var variantIndex = map[string]uint8{ - "1606nict": 0x0, - "1694acad": 0x1, - "1901": 0x2, - "1959acad": 0x3, - "1994": 0x45, - "1996": 0x4, - "abl1943": 0x5, - "alalc97": 0x47, - "aluku": 0x6, - "ao1990": 0x7, - "arevela": 0x8, - "arevmda": 0x9, - "baku1926": 0xa, - "balanka": 0xb, - "barla": 0xc, - "basiceng": 0xd, - "bauddha": 0xe, - "biscayan": 0xf, - "biske": 0x40, - "bohoric": 0x10, - "boont": 0x11, - "colb1945": 0x12, - "cornu": 0x13, - "dajnko": 0x14, - "ekavsk": 0x15, - "emodeng": 0x16, - "fonipa": 0x48, - "fonnapa": 0x49, - "fonupa": 0x4a, - "fonxsamp": 0x4b, - "hepburn": 0x17, - "heploc": 0x46, - "hognorsk": 0x18, - "ijekavsk": 0x19, - "itihasa": 0x1a, - "jauer": 0x1b, - "jyutping": 0x1c, - "kkcor": 0x1d, - "kociewie": 0x1e, - "kscor": 0x1f, - "laukika": 0x20, - "lipaw": 0x41, - "luna1918": 0x21, - "metelko": 0x22, - "monoton": 0x23, - "ndyuka": 0x24, - "nedis": 0x25, - "newfound": 0x26, - "njiva": 0x42, - "nulik": 0x27, - "osojs": 0x43, - "oxendict": 0x28, - "pamaka": 0x29, - "petr1708": 0x2a, - "pinyin": 0x2b, - "polyton": 0x2c, - "puter": 0x2d, - "rigik": 0x2e, - "rozaj": 0x2f, - "rumgr": 0x30, - "scotland": 0x31, - "scouse": 0x32, - "simple": 0x4c, - "solba": 0x44, - "sotav": 0x33, - "surmiran": 0x34, - "sursilv": 0x35, - "sutsilv": 0x36, - "tarask": 0x37, - "uccor": 0x38, - "ucrcor": 0x39, - "ulster": 0x3a, - "unifon": 0x3b, - "vaidika": 0x3c, - "valencia": 0x3d, - "vallader": 0x3e, - "wadegile": 0x3f, -} + 0x00, 0x00, 0x00, 0x00, 0x00, +} // Size: 381 bytes -// variantNumSpecialized is the number of specialized variants in variants. -const variantNumSpecialized = 71 - -// nRegionGroups is the number of region groups. -const nRegionGroups = 32 - -type likelyLangRegion struct { - lang uint16 - region uint16 -} - -// likelyScript is a lookup table, indexed by scriptID, for the most likely -// languages and regions given a script. -// Size: 928 bytes, 232 elements -var likelyScript = [232]likelyLangRegion{ - 1: {lang: 0x149, region: 0x83}, - 3: {lang: 0x299, region: 0x105}, - 4: {lang: 0x1e, region: 0x98}, - 5: {lang: 0x39, region: 0x6a}, - 7: {lang: 0x3a, region: 0x9b}, - 8: {lang: 0x1d0, region: 0x27}, - 9: {lang: 0x12, region: 0x9b}, - 10: {lang: 0x5a, region: 0x94}, - 11: {lang: 0x5f, region: 0x51}, - 12: {lang: 0xb7, region: 0xb3}, - 13: {lang: 0x62, region: 0x94}, - 14: {lang: 0xa3, region: 0x34}, - 15: {lang: 0x3e0, region: 0x98}, - 17: {lang: 0x51f, region: 0x12d}, - 18: {lang: 0x3a8, region: 0x98}, - 19: {lang: 0x159, region: 0x77}, - 20: {lang: 0xc0, region: 0x94}, - 21: {lang: 0x9b, region: 0xe6}, - 22: {lang: 0xd9, region: 0x34}, - 23: {lang: 0xf0, region: 0x48}, - 24: {lang: 0x4e6, region: 0x12a}, - 25: {lang: 0xe5, region: 0x13d}, - 26: {lang: 0xe3, region: 0x134}, - 28: {lang: 0xee, region: 0x6a}, - 29: {lang: 0x199, region: 0x5c}, - 30: {lang: 0x3d9, region: 0x105}, - 32: {lang: 0x1b7, region: 0x98}, - 34: {lang: 0x159, region: 0x77}, - 37: {lang: 0x12f, region: 0x6a}, - 38: {lang: 0x427, region: 0x26}, - 39: {lang: 0x26, region: 0x6e}, - 41: {lang: 0x208, region: 0x7c}, - 42: {lang: 0xfa, region: 0x37}, - 43: {lang: 0x198, region: 0x12f}, - 44: {lang: 0x3e0, region: 0x98}, - 45: {lang: 0x131, region: 0x86}, - 46: {lang: 0x19d, region: 0x98}, - 47: {lang: 0x394, region: 0x98}, - 48: {lang: 0x51f, region: 0x12d}, - 49: {lang: 0x24b, region: 0xaa}, - 50: {lang: 0x51f, region: 0x52}, - 51: {lang: 0x1c4, region: 0xe6}, - 52: {lang: 0x51f, region: 0x52}, - 53: {lang: 0x51f, region: 0x12d}, - 54: {lang: 0x2f4, region: 0x9a}, - 55: {lang: 0x1b5, region: 0x96}, - 56: {lang: 0x1f8, region: 0xa1}, - 57: {lang: 0x1be, region: 0x12a}, - 58: {lang: 0x1c3, region: 0xae}, - 60: {lang: 0x1ce, region: 0x91}, - 62: {lang: 0x13d, region: 0x9d}, - 63: {lang: 0x24b, region: 0xaa}, - 64: {lang: 0x206, region: 0x94}, - 65: {lang: 0x1f8, region: 0xa1}, - 67: {lang: 0x130, region: 0xc3}, - 68: {lang: 0x1f8, region: 0xa1}, - 69: {lang: 0x3b2, region: 0xe7}, - 70: {lang: 0x242, region: 0xa5}, - 71: {lang: 0x3f0, region: 0x98}, - 74: {lang: 0x249, region: 0x98}, - 75: {lang: 0x24b, region: 0xaa}, - 77: {lang: 0x87, region: 0x98}, - 78: {lang: 0x367, region: 0x122}, - 79: {lang: 0x2af, region: 0xae}, - 84: {lang: 0x296, region: 0x98}, - 85: {lang: 0x29f, region: 0x98}, - 86: {lang: 0x286, region: 0x86}, - 87: {lang: 0x199, region: 0x86}, - 88: {lang: 0x2a3, region: 0x52}, - 90: {lang: 0x4ea, region: 0x12a}, - 91: {lang: 0x4eb, region: 0x12a}, - 92: {lang: 0x1b7, region: 0x98}, - 93: {lang: 0x32e, region: 0x9b}, - 94: {lang: 0x4ed, region: 0x52}, - 95: {lang: 0xa7, region: 0x52}, - 97: {lang: 0x2df, region: 0x111}, - 98: {lang: 0x4ee, region: 0x10a}, - 99: {lang: 0x4ee, region: 0x10a}, - 100: {lang: 0x2fb, region: 0x98}, - 101: {lang: 0x312, region: 0x98}, - 102: {lang: 0x302, region: 0x52}, - 104: {lang: 0x315, region: 0x34}, - 105: {lang: 0x305, region: 0x98}, - 106: {lang: 0x40a, region: 0xe7}, - 107: {lang: 0x328, region: 0xc3}, - 108: {lang: 0x4ef, region: 0x107}, - 109: {lang: 0x3a, region: 0xa0}, - 110: {lang: 0x34a, region: 0xda}, - 112: {lang: 0x2c7, region: 0x83}, - 114: {lang: 0x3f9, region: 0x95}, - 115: {lang: 0x3e5, region: 0x98}, - 116: {lang: 0x392, region: 0xc4}, - 117: {lang: 0x38c, region: 0x98}, - 118: {lang: 0x390, region: 0x134}, - 119: {lang: 0x41f, region: 0x114}, - 120: {lang: 0x3a, region: 0x11b}, - 121: {lang: 0xf9, region: 0xc3}, - 122: {lang: 0x274, region: 0x105}, - 123: {lang: 0x2c0, region: 0x52}, - 124: {lang: 0x396, region: 0x9b}, - 125: {lang: 0x396, region: 0x52}, - 127: {lang: 0x3a4, region: 0xaf}, - 129: {lang: 0x1bf, region: 0x52}, - 130: {lang: 0x4f3, region: 0x9b}, - 181: {lang: 0x3c2, region: 0x94}, - 183: {lang: 0x369, region: 0x10b}, - 184: {lang: 0x416, region: 0x96}, - 186: {lang: 0x4f5, region: 0x15d}, - 187: {lang: 0x3e6, region: 0x98}, - 188: {lang: 0x44, region: 0x134}, - 189: {lang: 0x134, region: 0x7a}, - 190: {lang: 0x3e0, region: 0x98}, - 191: {lang: 0x3e0, region: 0x98}, - 192: {lang: 0x3f0, region: 0x98}, - 193: {lang: 0x402, region: 0xb2}, - 194: {lang: 0x429, region: 0x98}, - 195: {lang: 0x434, region: 0x94}, - 196: {lang: 0x443, region: 0x34}, - 197: {lang: 0x444, region: 0x9a}, - 201: {lang: 0x450, region: 0xe6}, - 202: {lang: 0x116, region: 0x98}, - 203: {lang: 0x454, region: 0x52}, - 204: {lang: 0x22a, region: 0x52}, - 205: {lang: 0x446, region: 0x98}, - 206: {lang: 0x49b, region: 0x52}, - 207: {lang: 0x9d, region: 0x13d}, - 208: {lang: 0x457, region: 0x98}, - 210: {lang: 0x51e, region: 0xb9}, - 211: {lang: 0x14e, region: 0xe6}, - 212: {lang: 0x124, region: 0xcc}, - 213: {lang: 0x461, region: 0x122}, - 214: {lang: 0xa7, region: 0x52}, - 215: {lang: 0x2c5, region: 0x98}, - 216: {lang: 0x4a3, region: 0x11b}, - 217: {lang: 0x4b4, region: 0xb3}, - 219: {lang: 0x1c7, region: 0x98}, - 221: {lang: 0x3a0, region: 0x9b}, - 222: {lang: 0x21, region: 0x9a}, - 223: {lang: 0x1e2, region: 0x52}, -} - -type likelyScriptRegion struct { - region uint16 - script uint8 - flags uint8 -} - -// likelyLang is a lookup table, indexed by langID, for the most likely -// scripts and regions given incomplete information. If more entries exist for a -// given language, region and script are the index and size respectively -// of the list in likelyLangList. -// Size: 5276 bytes, 1319 elements -var likelyLang = [1319]likelyScriptRegion{ - 0: {region: 0x134, script: 0x52, flags: 0x0}, - 1: {region: 0x6e, script: 0x52, flags: 0x0}, - 2: {region: 0x164, script: 0x52, flags: 0x0}, - 3: {region: 0x164, script: 0x52, flags: 0x0}, - 4: {region: 0x164, script: 0x52, flags: 0x0}, - 5: {region: 0x7c, script: 0x1e, flags: 0x0}, - 6: {region: 0x164, script: 0x52, flags: 0x0}, - 7: {region: 0x7f, script: 0x52, flags: 0x0}, - 8: {region: 0x164, script: 0x52, flags: 0x0}, - 9: {region: 0x164, script: 0x52, flags: 0x0}, - 10: {region: 0x164, script: 0x52, flags: 0x0}, - 11: {region: 0x94, script: 0x52, flags: 0x0}, - 12: {region: 0x130, script: 0x52, flags: 0x0}, - 13: {region: 0x7f, script: 0x52, flags: 0x0}, - 14: {region: 0x164, script: 0x52, flags: 0x0}, - 15: {region: 0x164, script: 0x52, flags: 0x0}, - 16: {region: 0x105, script: 0x1e, flags: 0x0}, - 17: {region: 0x164, script: 0x52, flags: 0x0}, - 18: {region: 0x9b, script: 0x9, flags: 0x0}, - 19: {region: 0x127, script: 0x5, flags: 0x0}, - 20: {region: 0x164, script: 0x52, flags: 0x0}, - 21: {region: 0x160, script: 0x52, flags: 0x0}, - 22: {region: 0x164, script: 0x52, flags: 0x0}, - 23: {region: 0x164, script: 0x52, flags: 0x0}, - 24: {region: 0x164, script: 0x52, flags: 0x0}, - 25: {region: 0x164, script: 0x52, flags: 0x0}, - 26: {region: 0x164, script: 0x52, flags: 0x0}, - 27: {region: 0x51, script: 0x52, flags: 0x0}, - 28: {region: 0x164, script: 0x52, flags: 0x0}, - 29: {region: 0x164, script: 0x52, flags: 0x0}, - 30: {region: 0x98, script: 0x4, flags: 0x0}, - 31: {region: 0x164, script: 0x52, flags: 0x0}, - 32: {region: 0x7f, script: 0x52, flags: 0x0}, - 33: {region: 0x9a, script: 0xde, flags: 0x0}, - 34: {region: 0x164, script: 0x52, flags: 0x0}, - 35: {region: 0x164, script: 0x52, flags: 0x0}, - 36: {region: 0x14c, script: 0x52, flags: 0x0}, - 37: {region: 0x105, script: 0x1e, flags: 0x0}, - 38: {region: 0x6e, script: 0x27, flags: 0x0}, - 39: {region: 0x164, script: 0x52, flags: 0x0}, - 40: {region: 0x164, script: 0x52, flags: 0x0}, - 41: {region: 0xd5, script: 0x52, flags: 0x0}, - 42: {region: 0x164, script: 0x52, flags: 0x0}, - 44: {region: 0x164, script: 0x52, flags: 0x0}, - 45: {region: 0x164, script: 0x52, flags: 0x0}, - 46: {region: 0x164, script: 0x52, flags: 0x0}, - 47: {region: 0x164, script: 0x52, flags: 0x0}, - 48: {region: 0x164, script: 0x52, flags: 0x0}, - 49: {region: 0x164, script: 0x52, flags: 0x0}, - 50: {region: 0x94, script: 0x52, flags: 0x0}, - 51: {region: 0x164, script: 0x5, flags: 0x0}, - 52: {region: 0x121, script: 0x5, flags: 0x0}, - 53: {region: 0x164, script: 0x52, flags: 0x0}, - 54: {region: 0x164, script: 0x52, flags: 0x0}, - 55: {region: 0x164, script: 0x52, flags: 0x0}, - 56: {region: 0x164, script: 0x52, flags: 0x0}, - 57: {region: 0x6a, script: 0x5, flags: 0x0}, - 58: {region: 0x0, script: 0x3, flags: 0x1}, - 59: {region: 0x164, script: 0x52, flags: 0x0}, - 60: {region: 0x50, script: 0x52, flags: 0x0}, - 61: {region: 0x3e, script: 0x52, flags: 0x0}, - 62: {region: 0x66, script: 0x5, flags: 0x0}, - 64: {region: 0xb9, script: 0x5, flags: 0x0}, - 65: {region: 0x6a, script: 0x5, flags: 0x0}, - 66: {region: 0x98, script: 0xe, flags: 0x0}, - 67: {region: 0x12e, script: 0x52, flags: 0x0}, - 68: {region: 0x134, script: 0xbc, flags: 0x0}, - 69: {region: 0x164, script: 0x52, flags: 0x0}, - 70: {region: 0x164, script: 0x52, flags: 0x0}, - 71: {region: 0x6d, script: 0x52, flags: 0x0}, - 72: {region: 0x164, script: 0x52, flags: 0x0}, - 73: {region: 0x164, script: 0x52, flags: 0x0}, - 74: {region: 0x48, script: 0x52, flags: 0x0}, - 75: {region: 0x164, script: 0x52, flags: 0x0}, - 76: {region: 0x105, script: 0x1e, flags: 0x0}, - 77: {region: 0x164, script: 0x5, flags: 0x0}, - 78: {region: 0x164, script: 0x52, flags: 0x0}, - 79: {region: 0x164, script: 0x52, flags: 0x0}, - 80: {region: 0x164, script: 0x52, flags: 0x0}, - 81: {region: 0x98, script: 0x20, flags: 0x0}, - 82: {region: 0x164, script: 0x52, flags: 0x0}, - 83: {region: 0x164, script: 0x52, flags: 0x0}, - 84: {region: 0x164, script: 0x52, flags: 0x0}, - 85: {region: 0x3e, script: 0x52, flags: 0x0}, - 86: {region: 0x164, script: 0x52, flags: 0x0}, - 87: {region: 0x3, script: 0x5, flags: 0x1}, - 88: {region: 0x105, script: 0x1e, flags: 0x0}, - 89: {region: 0xe7, script: 0x5, flags: 0x0}, - 90: {region: 0x94, script: 0x52, flags: 0x0}, - 91: {region: 0xda, script: 0x20, flags: 0x0}, - 92: {region: 0x2d, script: 0x52, flags: 0x0}, - 93: {region: 0x51, script: 0x52, flags: 0x0}, - 94: {region: 0x164, script: 0x52, flags: 0x0}, - 95: {region: 0x51, script: 0xb, flags: 0x0}, - 96: {region: 0x164, script: 0x52, flags: 0x0}, - 97: {region: 0x164, script: 0x52, flags: 0x0}, - 98: {region: 0x94, script: 0x52, flags: 0x0}, - 99: {region: 0x164, script: 0x52, flags: 0x0}, - 100: {region: 0x51, script: 0x52, flags: 0x0}, - 101: {region: 0x164, script: 0x52, flags: 0x0}, - 102: {region: 0x164, script: 0x52, flags: 0x0}, - 103: {region: 0x164, script: 0x52, flags: 0x0}, - 104: {region: 0x164, script: 0x52, flags: 0x0}, - 105: {region: 0x4e, script: 0x52, flags: 0x0}, - 106: {region: 0x164, script: 0x52, flags: 0x0}, - 107: {region: 0x164, script: 0x52, flags: 0x0}, - 108: {region: 0x164, script: 0x52, flags: 0x0}, - 109: {region: 0x164, script: 0x27, flags: 0x0}, - 110: {region: 0x164, script: 0x52, flags: 0x0}, - 111: {region: 0x164, script: 0x52, flags: 0x0}, - 112: {region: 0x46, script: 0x1e, flags: 0x0}, - 113: {region: 0x164, script: 0x52, flags: 0x0}, - 114: {region: 0x164, script: 0x52, flags: 0x0}, - 115: {region: 0x10a, script: 0x5, flags: 0x0}, - 116: {region: 0x161, script: 0x52, flags: 0x0}, - 117: {region: 0x164, script: 0x52, flags: 0x0}, - 118: {region: 0x94, script: 0x52, flags: 0x0}, - 119: {region: 0x164, script: 0x52, flags: 0x0}, - 120: {region: 0x12e, script: 0x52, flags: 0x0}, - 121: {region: 0x51, script: 0x52, flags: 0x0}, - 122: {region: 0x98, script: 0xcd, flags: 0x0}, - 123: {region: 0xe7, script: 0x5, flags: 0x0}, - 124: {region: 0x98, script: 0x20, flags: 0x0}, - 125: {region: 0x37, script: 0x1e, flags: 0x0}, - 126: {region: 0x98, script: 0x20, flags: 0x0}, - 127: {region: 0xe7, script: 0x5, flags: 0x0}, - 128: {region: 0x12a, script: 0x2d, flags: 0x0}, - 130: {region: 0x98, script: 0x20, flags: 0x0}, - 131: {region: 0x164, script: 0x52, flags: 0x0}, - 132: {region: 0x98, script: 0x20, flags: 0x0}, - 133: {region: 0xe6, script: 0x52, flags: 0x0}, - 134: {region: 0x164, script: 0x52, flags: 0x0}, - 135: {region: 0x98, script: 0x20, flags: 0x0}, - 136: {region: 0x164, script: 0x52, flags: 0x0}, - 137: {region: 0x13e, script: 0x52, flags: 0x0}, - 138: {region: 0x164, script: 0x52, flags: 0x0}, - 139: {region: 0x164, script: 0x52, flags: 0x0}, - 140: {region: 0xe6, script: 0x52, flags: 0x0}, - 141: {region: 0x164, script: 0x52, flags: 0x0}, - 142: {region: 0xd5, script: 0x52, flags: 0x0}, - 143: {region: 0x164, script: 0x52, flags: 0x0}, - 144: {region: 0x164, script: 0x52, flags: 0x0}, - 145: {region: 0x164, script: 0x52, flags: 0x0}, - 146: {region: 0x164, script: 0x27, flags: 0x0}, - 147: {region: 0x98, script: 0x20, flags: 0x0}, - 148: {region: 0x94, script: 0x52, flags: 0x0}, - 149: {region: 0x164, script: 0x52, flags: 0x0}, - 150: {region: 0x164, script: 0x52, flags: 0x0}, - 151: {region: 0x164, script: 0x52, flags: 0x0}, - 152: {region: 0x164, script: 0x52, flags: 0x0}, - 153: {region: 0x51, script: 0x52, flags: 0x0}, - 154: {region: 0x164, script: 0x52, flags: 0x0}, - 155: {region: 0xe6, script: 0x52, flags: 0x0}, - 156: {region: 0x164, script: 0x52, flags: 0x0}, - 157: {region: 0x13d, script: 0xcf, flags: 0x0}, - 158: {region: 0xc2, script: 0x52, flags: 0x0}, - 159: {region: 0x164, script: 0x52, flags: 0x0}, - 160: {region: 0x164, script: 0x52, flags: 0x0}, - 161: {region: 0xc2, script: 0x52, flags: 0x0}, - 162: {region: 0x164, script: 0x52, flags: 0x0}, - 163: {region: 0x34, script: 0xe, flags: 0x0}, - 164: {region: 0x164, script: 0x52, flags: 0x0}, - 165: {region: 0x164, script: 0x52, flags: 0x0}, - 166: {region: 0x164, script: 0x52, flags: 0x0}, - 167: {region: 0x52, script: 0xd6, flags: 0x0}, - 168: {region: 0x164, script: 0x52, flags: 0x0}, - 169: {region: 0x164, script: 0x52, flags: 0x0}, - 170: {region: 0x164, script: 0x52, flags: 0x0}, - 171: {region: 0x98, script: 0xe, flags: 0x0}, - 172: {region: 0x164, script: 0x52, flags: 0x0}, - 173: {region: 0x9b, script: 0x5, flags: 0x0}, - 174: {region: 0x164, script: 0x52, flags: 0x0}, - 175: {region: 0x4e, script: 0x52, flags: 0x0}, - 176: {region: 0x77, script: 0x52, flags: 0x0}, - 177: {region: 0x98, script: 0x20, flags: 0x0}, - 178: {region: 0xe7, script: 0x5, flags: 0x0}, - 179: {region: 0x98, script: 0x20, flags: 0x0}, - 180: {region: 0x164, script: 0x52, flags: 0x0}, - 181: {region: 0x32, script: 0x52, flags: 0x0}, - 182: {region: 0x164, script: 0x52, flags: 0x0}, - 183: {region: 0xb3, script: 0xc, flags: 0x0}, - 184: {region: 0x51, script: 0x52, flags: 0x0}, - 185: {region: 0x164, script: 0x27, flags: 0x0}, - 186: {region: 0xe6, script: 0x52, flags: 0x0}, - 187: {region: 0x164, script: 0x52, flags: 0x0}, - 188: {region: 0xe7, script: 0x20, flags: 0x0}, - 189: {region: 0x105, script: 0x1e, flags: 0x0}, - 190: {region: 0x15e, script: 0x52, flags: 0x0}, - 191: {region: 0x164, script: 0x52, flags: 0x0}, - 192: {region: 0x94, script: 0x52, flags: 0x0}, - 193: {region: 0x164, script: 0x52, flags: 0x0}, - 194: {region: 0x51, script: 0x52, flags: 0x0}, - 195: {region: 0x164, script: 0x52, flags: 0x0}, - 196: {region: 0x164, script: 0x52, flags: 0x0}, - 197: {region: 0x164, script: 0x52, flags: 0x0}, - 198: {region: 0x85, script: 0x52, flags: 0x0}, - 199: {region: 0x164, script: 0x52, flags: 0x0}, - 200: {region: 0x164, script: 0x52, flags: 0x0}, - 201: {region: 0x164, script: 0x52, flags: 0x0}, - 202: {region: 0x164, script: 0x52, flags: 0x0}, - 203: {region: 0x6c, script: 0x27, flags: 0x0}, - 204: {region: 0x164, script: 0x52, flags: 0x0}, - 205: {region: 0x164, script: 0x52, flags: 0x0}, - 206: {region: 0x51, script: 0x52, flags: 0x0}, - 207: {region: 0x164, script: 0x52, flags: 0x0}, - 208: {region: 0x164, script: 0x52, flags: 0x0}, - 209: {region: 0xc2, script: 0x52, flags: 0x0}, - 210: {region: 0x164, script: 0x52, flags: 0x0}, - 211: {region: 0x164, script: 0x52, flags: 0x0}, - 212: {region: 0x164, script: 0x52, flags: 0x0}, - 213: {region: 0x6d, script: 0x52, flags: 0x0}, - 214: {region: 0x164, script: 0x52, flags: 0x0}, - 215: {region: 0x164, script: 0x52, flags: 0x0}, - 216: {region: 0xd5, script: 0x52, flags: 0x0}, - 217: {region: 0x8, script: 0x2, flags: 0x1}, - 218: {region: 0x105, script: 0x1e, flags: 0x0}, - 219: {region: 0xe6, script: 0x52, flags: 0x0}, - 220: {region: 0x164, script: 0x52, flags: 0x0}, - 221: {region: 0x130, script: 0x52, flags: 0x0}, - 222: {region: 0x89, script: 0x52, flags: 0x0}, - 223: {region: 0x74, script: 0x52, flags: 0x0}, - 224: {region: 0x105, script: 0x1e, flags: 0x0}, - 225: {region: 0x134, script: 0x52, flags: 0x0}, - 226: {region: 0x48, script: 0x52, flags: 0x0}, - 227: {region: 0x134, script: 0x1a, flags: 0x0}, - 228: {region: 0xa5, script: 0x5, flags: 0x0}, - 229: {region: 0x13d, script: 0x19, flags: 0x0}, - 230: {region: 0x164, script: 0x52, flags: 0x0}, - 231: {region: 0x9a, script: 0x5, flags: 0x0}, - 232: {region: 0x164, script: 0x52, flags: 0x0}, - 233: {region: 0x164, script: 0x52, flags: 0x0}, - 234: {region: 0x164, script: 0x52, flags: 0x0}, - 235: {region: 0x164, script: 0x52, flags: 0x0}, - 236: {region: 0x164, script: 0x52, flags: 0x0}, - 237: {region: 0x77, script: 0x52, flags: 0x0}, - 238: {region: 0x6a, script: 0x1c, flags: 0x0}, - 239: {region: 0xe6, script: 0x52, flags: 0x0}, - 240: {region: 0x48, script: 0x17, flags: 0x0}, - 241: {region: 0x48, script: 0x17, flags: 0x0}, - 242: {region: 0x48, script: 0x17, flags: 0x0}, - 243: {region: 0x48, script: 0x17, flags: 0x0}, - 244: {region: 0x48, script: 0x17, flags: 0x0}, - 245: {region: 0x109, script: 0x52, flags: 0x0}, - 246: {region: 0x5d, script: 0x52, flags: 0x0}, - 247: {region: 0xe8, script: 0x52, flags: 0x0}, - 248: {region: 0x48, script: 0x17, flags: 0x0}, - 249: {region: 0xc3, script: 0x79, flags: 0x0}, - 250: {region: 0xa, script: 0x2, flags: 0x1}, - 251: {region: 0x105, script: 0x1e, flags: 0x0}, - 252: {region: 0x7a, script: 0x52, flags: 0x0}, - 253: {region: 0x62, script: 0x52, flags: 0x0}, - 254: {region: 0x164, script: 0x52, flags: 0x0}, - 255: {region: 0x164, script: 0x52, flags: 0x0}, - 256: {region: 0x164, script: 0x52, flags: 0x0}, - 257: {region: 0x164, script: 0x52, flags: 0x0}, - 258: {region: 0x134, script: 0x52, flags: 0x0}, - 259: {region: 0x105, script: 0x1e, flags: 0x0}, - 260: {region: 0xa3, script: 0x52, flags: 0x0}, - 261: {region: 0x164, script: 0x52, flags: 0x0}, - 262: {region: 0x164, script: 0x52, flags: 0x0}, - 263: {region: 0x98, script: 0x5, flags: 0x0}, - 264: {region: 0x164, script: 0x52, flags: 0x0}, - 265: {region: 0x5f, script: 0x52, flags: 0x0}, - 266: {region: 0x164, script: 0x52, flags: 0x0}, - 267: {region: 0x48, script: 0x52, flags: 0x0}, - 268: {region: 0x164, script: 0x52, flags: 0x0}, - 269: {region: 0x164, script: 0x52, flags: 0x0}, - 270: {region: 0x164, script: 0x52, flags: 0x0}, - 271: {region: 0x164, script: 0x5, flags: 0x0}, - 272: {region: 0x48, script: 0x52, flags: 0x0}, - 273: {region: 0x164, script: 0x52, flags: 0x0}, - 274: {region: 0x164, script: 0x52, flags: 0x0}, - 275: {region: 0xd3, script: 0x52, flags: 0x0}, - 276: {region: 0x4e, script: 0x52, flags: 0x0}, - 277: {region: 0x164, script: 0x52, flags: 0x0}, - 278: {region: 0x98, script: 0x5, flags: 0x0}, - 279: {region: 0x164, script: 0x52, flags: 0x0}, - 280: {region: 0x164, script: 0x52, flags: 0x0}, - 281: {region: 0x164, script: 0x52, flags: 0x0}, - 282: {region: 0x164, script: 0x27, flags: 0x0}, - 283: {region: 0x5f, script: 0x52, flags: 0x0}, - 284: {region: 0xc2, script: 0x52, flags: 0x0}, - 285: {region: 0xcf, script: 0x52, flags: 0x0}, - 286: {region: 0x164, script: 0x52, flags: 0x0}, - 287: {region: 0xda, script: 0x20, flags: 0x0}, - 288: {region: 0x51, script: 0x52, flags: 0x0}, - 289: {region: 0x164, script: 0x52, flags: 0x0}, - 290: {region: 0x164, script: 0x52, flags: 0x0}, - 291: {region: 0x164, script: 0x52, flags: 0x0}, - 292: {region: 0xcc, script: 0xd4, flags: 0x0}, - 293: {region: 0x164, script: 0x52, flags: 0x0}, - 294: {region: 0x164, script: 0x52, flags: 0x0}, - 295: {region: 0x113, script: 0x52, flags: 0x0}, - 296: {region: 0x36, script: 0x52, flags: 0x0}, - 297: {region: 0x42, script: 0xd6, flags: 0x0}, - 298: {region: 0x164, script: 0x52, flags: 0x0}, - 299: {region: 0xa3, script: 0x52, flags: 0x0}, - 300: {region: 0x7f, script: 0x52, flags: 0x0}, - 301: {region: 0xd5, script: 0x52, flags: 0x0}, - 302: {region: 0x9d, script: 0x52, flags: 0x0}, - 303: {region: 0x6a, script: 0x25, flags: 0x0}, - 304: {region: 0xc3, script: 0x43, flags: 0x0}, - 305: {region: 0x86, script: 0x2d, flags: 0x0}, - 306: {region: 0x164, script: 0x52, flags: 0x0}, - 307: {region: 0x164, script: 0x52, flags: 0x0}, - 308: {region: 0xc, script: 0x2, flags: 0x1}, - 309: {region: 0x164, script: 0x52, flags: 0x0}, - 310: {region: 0x164, script: 0x52, flags: 0x0}, - 311: {region: 0x1, script: 0x52, flags: 0x0}, - 312: {region: 0x164, script: 0x52, flags: 0x0}, - 313: {region: 0x6d, script: 0x52, flags: 0x0}, - 314: {region: 0x134, script: 0x52, flags: 0x0}, - 315: {region: 0x69, script: 0x52, flags: 0x0}, - 316: {region: 0x164, script: 0x52, flags: 0x0}, - 317: {region: 0x9d, script: 0x3e, flags: 0x0}, - 318: {region: 0x164, script: 0x52, flags: 0x0}, - 319: {region: 0x164, script: 0x52, flags: 0x0}, - 320: {region: 0x6d, script: 0x52, flags: 0x0}, - 321: {region: 0x51, script: 0x52, flags: 0x0}, - 322: {region: 0x6d, script: 0x52, flags: 0x0}, - 323: {region: 0x9b, script: 0x5, flags: 0x0}, - 324: {region: 0x164, script: 0x52, flags: 0x0}, - 325: {region: 0x164, script: 0x52, flags: 0x0}, - 326: {region: 0x164, script: 0x52, flags: 0x0}, - 327: {region: 0x164, script: 0x52, flags: 0x0}, - 328: {region: 0x85, script: 0x52, flags: 0x0}, - 329: {region: 0xe, script: 0x2, flags: 0x1}, - 330: {region: 0x164, script: 0x52, flags: 0x0}, - 331: {region: 0xc2, script: 0x52, flags: 0x0}, - 332: {region: 0x71, script: 0x52, flags: 0x0}, - 333: {region: 0x10a, script: 0x5, flags: 0x0}, - 334: {region: 0xe6, script: 0x52, flags: 0x0}, - 335: {region: 0x10b, script: 0x52, flags: 0x0}, - 336: {region: 0x72, script: 0x52, flags: 0x0}, - 337: {region: 0x164, script: 0x52, flags: 0x0}, - 338: {region: 0x164, script: 0x52, flags: 0x0}, - 339: {region: 0x75, script: 0x52, flags: 0x0}, - 340: {region: 0x164, script: 0x52, flags: 0x0}, - 341: {region: 0x3a, script: 0x52, flags: 0x0}, - 342: {region: 0x164, script: 0x52, flags: 0x0}, - 343: {region: 0x164, script: 0x52, flags: 0x0}, - 344: {region: 0x164, script: 0x52, flags: 0x0}, - 345: {region: 0x77, script: 0x52, flags: 0x0}, - 346: {region: 0x134, script: 0x52, flags: 0x0}, - 347: {region: 0x77, script: 0x52, flags: 0x0}, - 348: {region: 0x5f, script: 0x52, flags: 0x0}, - 349: {region: 0x5f, script: 0x52, flags: 0x0}, - 350: {region: 0x51, script: 0x5, flags: 0x0}, - 351: {region: 0x13f, script: 0x52, flags: 0x0}, - 352: {region: 0x164, script: 0x52, flags: 0x0}, - 353: {region: 0x83, script: 0x52, flags: 0x0}, - 354: {region: 0x164, script: 0x52, flags: 0x0}, - 355: {region: 0xd3, script: 0x52, flags: 0x0}, - 356: {region: 0x9d, script: 0x52, flags: 0x0}, - 357: {region: 0xd5, script: 0x52, flags: 0x0}, - 358: {region: 0x164, script: 0x52, flags: 0x0}, - 359: {region: 0x10a, script: 0x52, flags: 0x0}, - 360: {region: 0xd8, script: 0x52, flags: 0x0}, - 361: {region: 0x95, script: 0x52, flags: 0x0}, - 362: {region: 0x7f, script: 0x52, flags: 0x0}, - 363: {region: 0x164, script: 0x52, flags: 0x0}, - 364: {region: 0xbb, script: 0x52, flags: 0x0}, - 365: {region: 0x164, script: 0x52, flags: 0x0}, - 366: {region: 0x164, script: 0x52, flags: 0x0}, - 367: {region: 0x164, script: 0x52, flags: 0x0}, - 368: {region: 0x52, script: 0x34, flags: 0x0}, - 369: {region: 0x164, script: 0x52, flags: 0x0}, - 370: {region: 0x94, script: 0x52, flags: 0x0}, - 371: {region: 0x164, script: 0x52, flags: 0x0}, - 372: {region: 0x98, script: 0x20, flags: 0x0}, - 373: {region: 0x164, script: 0x52, flags: 0x0}, - 374: {region: 0x9b, script: 0x5, flags: 0x0}, - 375: {region: 0x7d, script: 0x52, flags: 0x0}, - 376: {region: 0x7a, script: 0x52, flags: 0x0}, - 377: {region: 0x164, script: 0x52, flags: 0x0}, - 378: {region: 0x164, script: 0x52, flags: 0x0}, - 379: {region: 0x164, script: 0x52, flags: 0x0}, - 380: {region: 0x164, script: 0x52, flags: 0x0}, - 381: {region: 0x164, script: 0x52, flags: 0x0}, - 382: {region: 0x164, script: 0x52, flags: 0x0}, - 383: {region: 0x6e, script: 0x27, flags: 0x0}, - 384: {region: 0x164, script: 0x52, flags: 0x0}, - 385: {region: 0xda, script: 0x20, flags: 0x0}, - 386: {region: 0x164, script: 0x52, flags: 0x0}, - 387: {region: 0xa6, script: 0x52, flags: 0x0}, - 388: {region: 0x164, script: 0x52, flags: 0x0}, - 389: {region: 0xe7, script: 0x5, flags: 0x0}, - 390: {region: 0x164, script: 0x52, flags: 0x0}, - 391: {region: 0xe7, script: 0x5, flags: 0x0}, - 392: {region: 0x164, script: 0x52, flags: 0x0}, - 393: {region: 0x164, script: 0x52, flags: 0x0}, - 394: {region: 0x6d, script: 0x52, flags: 0x0}, - 395: {region: 0x9b, script: 0x5, flags: 0x0}, - 396: {region: 0x164, script: 0x52, flags: 0x0}, - 397: {region: 0x164, script: 0x27, flags: 0x0}, - 398: {region: 0xf0, script: 0x52, flags: 0x0}, - 399: {region: 0x164, script: 0x52, flags: 0x0}, - 400: {region: 0x164, script: 0x52, flags: 0x0}, - 401: {region: 0x164, script: 0x52, flags: 0x0}, - 402: {region: 0x164, script: 0x27, flags: 0x0}, - 403: {region: 0x164, script: 0x52, flags: 0x0}, - 404: {region: 0x98, script: 0x20, flags: 0x0}, - 405: {region: 0x98, script: 0xd0, flags: 0x0}, - 406: {region: 0x94, script: 0x52, flags: 0x0}, - 407: {region: 0xd8, script: 0x52, flags: 0x0}, - 408: {region: 0x12f, script: 0x2b, flags: 0x0}, - 409: {region: 0x10, script: 0x2, flags: 0x1}, - 410: {region: 0x98, script: 0xe, flags: 0x0}, - 411: {region: 0x164, script: 0x52, flags: 0x0}, - 412: {region: 0x4d, script: 0x52, flags: 0x0}, - 413: {region: 0x98, script: 0x2e, flags: 0x0}, - 414: {region: 0x40, script: 0x52, flags: 0x0}, - 415: {region: 0x53, script: 0x52, flags: 0x0}, - 416: {region: 0x164, script: 0x52, flags: 0x0}, - 417: {region: 0x7f, script: 0x52, flags: 0x0}, - 418: {region: 0x164, script: 0x52, flags: 0x0}, - 419: {region: 0x164, script: 0x52, flags: 0x0}, - 420: {region: 0xa3, script: 0x52, flags: 0x0}, - 421: {region: 0x97, script: 0x52, flags: 0x0}, - 422: {region: 0x164, script: 0x52, flags: 0x0}, - 423: {region: 0xda, script: 0x20, flags: 0x0}, - 424: {region: 0x164, script: 0x52, flags: 0x0}, - 425: {region: 0x164, script: 0x5, flags: 0x0}, - 426: {region: 0x48, script: 0x52, flags: 0x0}, - 427: {region: 0x164, script: 0x5, flags: 0x0}, - 428: {region: 0x164, script: 0x52, flags: 0x0}, - 429: {region: 0x12, script: 0x3, flags: 0x1}, - 430: {region: 0x164, script: 0x52, flags: 0x0}, - 431: {region: 0x52, script: 0x34, flags: 0x0}, - 432: {region: 0x164, script: 0x52, flags: 0x0}, - 433: {region: 0x134, script: 0x52, flags: 0x0}, - 434: {region: 0x23, script: 0x5, flags: 0x0}, - 435: {region: 0x164, script: 0x52, flags: 0x0}, - 436: {region: 0x164, script: 0x27, flags: 0x0}, - 437: {region: 0x96, script: 0x37, flags: 0x0}, - 438: {region: 0x164, script: 0x52, flags: 0x0}, - 439: {region: 0x98, script: 0x20, flags: 0x0}, - 440: {region: 0x164, script: 0x52, flags: 0x0}, - 441: {region: 0x72, script: 0x52, flags: 0x0}, - 442: {region: 0x164, script: 0x52, flags: 0x0}, - 443: {region: 0x164, script: 0x52, flags: 0x0}, - 444: {region: 0xe6, script: 0x52, flags: 0x0}, - 445: {region: 0x164, script: 0x52, flags: 0x0}, - 446: {region: 0x12a, script: 0x39, flags: 0x0}, - 447: {region: 0x52, script: 0x81, flags: 0x0}, - 448: {region: 0x164, script: 0x52, flags: 0x0}, - 449: {region: 0xe7, script: 0x5, flags: 0x0}, - 450: {region: 0x98, script: 0x20, flags: 0x0}, - 451: {region: 0xae, script: 0x3a, flags: 0x0}, - 452: {region: 0xe6, script: 0x52, flags: 0x0}, - 453: {region: 0xe7, script: 0x5, flags: 0x0}, - 454: {region: 0xe5, script: 0x52, flags: 0x0}, - 455: {region: 0x98, script: 0x20, flags: 0x0}, - 456: {region: 0x98, script: 0x20, flags: 0x0}, - 457: {region: 0x164, script: 0x52, flags: 0x0}, - 458: {region: 0x8f, script: 0x52, flags: 0x0}, - 459: {region: 0x5f, script: 0x52, flags: 0x0}, - 460: {region: 0x52, script: 0x34, flags: 0x0}, - 461: {region: 0x90, script: 0x52, flags: 0x0}, - 462: {region: 0x91, script: 0x52, flags: 0x0}, - 463: {region: 0x164, script: 0x52, flags: 0x0}, - 464: {region: 0x27, script: 0x8, flags: 0x0}, - 465: {region: 0xd1, script: 0x52, flags: 0x0}, - 466: {region: 0x77, script: 0x52, flags: 0x0}, - 467: {region: 0x164, script: 0x52, flags: 0x0}, - 468: {region: 0x164, script: 0x52, flags: 0x0}, - 469: {region: 0xcf, script: 0x52, flags: 0x0}, - 470: {region: 0xd5, script: 0x52, flags: 0x0}, - 471: {region: 0x164, script: 0x52, flags: 0x0}, - 472: {region: 0x164, script: 0x52, flags: 0x0}, - 473: {region: 0x164, script: 0x52, flags: 0x0}, - 474: {region: 0x94, script: 0x52, flags: 0x0}, - 475: {region: 0x164, script: 0x52, flags: 0x0}, - 476: {region: 0x164, script: 0x52, flags: 0x0}, - 477: {region: 0x164, script: 0x52, flags: 0x0}, - 479: {region: 0xd5, script: 0x52, flags: 0x0}, - 480: {region: 0x164, script: 0x52, flags: 0x0}, - 481: {region: 0x164, script: 0x52, flags: 0x0}, - 482: {region: 0x52, script: 0xdf, flags: 0x0}, - 483: {region: 0x164, script: 0x52, flags: 0x0}, - 484: {region: 0x134, script: 0x52, flags: 0x0}, - 485: {region: 0x164, script: 0x52, flags: 0x0}, - 486: {region: 0x48, script: 0x52, flags: 0x0}, - 487: {region: 0x164, script: 0x52, flags: 0x0}, - 488: {region: 0x164, script: 0x52, flags: 0x0}, - 489: {region: 0xe6, script: 0x52, flags: 0x0}, - 490: {region: 0x164, script: 0x52, flags: 0x0}, - 491: {region: 0x94, script: 0x52, flags: 0x0}, - 492: {region: 0x105, script: 0x1e, flags: 0x0}, - 494: {region: 0x164, script: 0x52, flags: 0x0}, - 495: {region: 0x164, script: 0x52, flags: 0x0}, - 496: {region: 0x9c, script: 0x52, flags: 0x0}, - 497: {region: 0x9d, script: 0x52, flags: 0x0}, - 498: {region: 0x48, script: 0x17, flags: 0x0}, - 499: {region: 0x96, script: 0x37, flags: 0x0}, - 500: {region: 0x164, script: 0x52, flags: 0x0}, - 501: {region: 0x164, script: 0x52, flags: 0x0}, - 502: {region: 0x105, script: 0x52, flags: 0x0}, - 503: {region: 0x164, script: 0x52, flags: 0x0}, - 504: {region: 0xa1, script: 0x41, flags: 0x0}, - 505: {region: 0x164, script: 0x52, flags: 0x0}, - 506: {region: 0x9f, script: 0x52, flags: 0x0}, - 508: {region: 0x164, script: 0x52, flags: 0x0}, - 509: {region: 0x164, script: 0x52, flags: 0x0}, - 510: {region: 0x164, script: 0x52, flags: 0x0}, - 511: {region: 0x51, script: 0x52, flags: 0x0}, - 512: {region: 0x12f, script: 0x37, flags: 0x0}, - 513: {region: 0x164, script: 0x52, flags: 0x0}, - 514: {region: 0x12e, script: 0x52, flags: 0x0}, - 515: {region: 0xda, script: 0x20, flags: 0x0}, - 516: {region: 0x164, script: 0x52, flags: 0x0}, - 517: {region: 0x62, script: 0x52, flags: 0x0}, - 518: {region: 0x94, script: 0x52, flags: 0x0}, - 519: {region: 0x94, script: 0x52, flags: 0x0}, - 520: {region: 0x7c, script: 0x29, flags: 0x0}, - 521: {region: 0x136, script: 0x1e, flags: 0x0}, - 522: {region: 0x66, script: 0x52, flags: 0x0}, - 523: {region: 0xc3, script: 0x52, flags: 0x0}, - 524: {region: 0x164, script: 0x52, flags: 0x0}, - 525: {region: 0x164, script: 0x52, flags: 0x0}, - 526: {region: 0xd5, script: 0x52, flags: 0x0}, - 527: {region: 0xa3, script: 0x52, flags: 0x0}, - 528: {region: 0xc2, script: 0x52, flags: 0x0}, - 529: {region: 0x105, script: 0x1e, flags: 0x0}, - 530: {region: 0x164, script: 0x52, flags: 0x0}, - 531: {region: 0x164, script: 0x52, flags: 0x0}, - 532: {region: 0x164, script: 0x52, flags: 0x0}, - 533: {region: 0x164, script: 0x52, flags: 0x0}, - 534: {region: 0xd3, script: 0x5, flags: 0x0}, - 535: {region: 0xd5, script: 0x52, flags: 0x0}, - 536: {region: 0x163, script: 0x52, flags: 0x0}, - 537: {region: 0x164, script: 0x52, flags: 0x0}, - 538: {region: 0x164, script: 0x52, flags: 0x0}, - 539: {region: 0x12e, script: 0x52, flags: 0x0}, - 540: {region: 0x121, script: 0x5, flags: 0x0}, - 541: {region: 0x164, script: 0x52, flags: 0x0}, - 542: {region: 0x122, script: 0xd5, flags: 0x0}, - 543: {region: 0x59, script: 0x52, flags: 0x0}, - 544: {region: 0x51, script: 0x52, flags: 0x0}, - 545: {region: 0x164, script: 0x52, flags: 0x0}, - 546: {region: 0x4e, script: 0x52, flags: 0x0}, - 547: {region: 0x98, script: 0x20, flags: 0x0}, - 548: {region: 0x98, script: 0x20, flags: 0x0}, - 549: {region: 0x4a, script: 0x52, flags: 0x0}, - 550: {region: 0x94, script: 0x52, flags: 0x0}, - 551: {region: 0x164, script: 0x52, flags: 0x0}, - 552: {region: 0x40, script: 0x52, flags: 0x0}, - 553: {region: 0x98, script: 0x52, flags: 0x0}, - 554: {region: 0x52, script: 0xcc, flags: 0x0}, - 555: {region: 0x98, script: 0x20, flags: 0x0}, - 556: {region: 0xc2, script: 0x52, flags: 0x0}, - 557: {region: 0x164, script: 0x52, flags: 0x0}, - 558: {region: 0x98, script: 0x6b, flags: 0x0}, - 559: {region: 0xe7, script: 0x5, flags: 0x0}, - 560: {region: 0x164, script: 0x52, flags: 0x0}, - 561: {region: 0xa3, script: 0x52, flags: 0x0}, - 562: {region: 0x164, script: 0x52, flags: 0x0}, - 563: {region: 0x12a, script: 0x52, flags: 0x0}, - 564: {region: 0x164, script: 0x52, flags: 0x0}, - 565: {region: 0xd1, script: 0x52, flags: 0x0}, - 566: {region: 0x164, script: 0x52, flags: 0x0}, - 567: {region: 0xae, script: 0x4f, flags: 0x0}, - 568: {region: 0x164, script: 0x52, flags: 0x0}, - 569: {region: 0x164, script: 0x52, flags: 0x0}, - 570: {region: 0x15, script: 0x6, flags: 0x1}, - 571: {region: 0x164, script: 0x52, flags: 0x0}, - 572: {region: 0x51, script: 0x52, flags: 0x0}, - 573: {region: 0x81, script: 0x52, flags: 0x0}, - 574: {region: 0xa3, script: 0x52, flags: 0x0}, - 575: {region: 0x164, script: 0x52, flags: 0x0}, - 576: {region: 0x164, script: 0x52, flags: 0x0}, - 577: {region: 0x164, script: 0x52, flags: 0x0}, - 578: {region: 0xa5, script: 0x46, flags: 0x0}, - 579: {region: 0x29, script: 0x52, flags: 0x0}, - 580: {region: 0x164, script: 0x52, flags: 0x0}, - 581: {region: 0x164, script: 0x52, flags: 0x0}, - 582: {region: 0x164, script: 0x52, flags: 0x0}, - 583: {region: 0x164, script: 0x52, flags: 0x0}, - 584: {region: 0x164, script: 0x52, flags: 0x0}, - 585: {region: 0x98, script: 0x4a, flags: 0x0}, - 586: {region: 0x164, script: 0x52, flags: 0x0}, - 587: {region: 0xaa, script: 0x4b, flags: 0x0}, - 588: {region: 0x105, script: 0x1e, flags: 0x0}, - 589: {region: 0x98, script: 0x20, flags: 0x0}, - 590: {region: 0x164, script: 0x52, flags: 0x0}, - 591: {region: 0x74, script: 0x52, flags: 0x0}, - 592: {region: 0x164, script: 0x52, flags: 0x0}, - 593: {region: 0xb3, script: 0x52, flags: 0x0}, - 594: {region: 0x164, script: 0x52, flags: 0x0}, - 595: {region: 0x164, script: 0x52, flags: 0x0}, - 596: {region: 0x164, script: 0x52, flags: 0x0}, - 597: {region: 0x164, script: 0x52, flags: 0x0}, - 598: {region: 0x164, script: 0x52, flags: 0x0}, - 599: {region: 0x164, script: 0x52, flags: 0x0}, - 600: {region: 0x164, script: 0x52, flags: 0x0}, - 601: {region: 0x164, script: 0x27, flags: 0x0}, - 603: {region: 0x105, script: 0x1e, flags: 0x0}, - 604: {region: 0x111, script: 0x52, flags: 0x0}, - 605: {region: 0xe6, script: 0x52, flags: 0x0}, - 606: {region: 0x105, script: 0x52, flags: 0x0}, - 607: {region: 0x164, script: 0x52, flags: 0x0}, - 608: {region: 0x98, script: 0x20, flags: 0x0}, - 609: {region: 0x98, script: 0x5, flags: 0x0}, - 610: {region: 0x12e, script: 0x52, flags: 0x0}, - 611: {region: 0x164, script: 0x52, flags: 0x0}, - 612: {region: 0x51, script: 0x52, flags: 0x0}, - 613: {region: 0x5f, script: 0x52, flags: 0x0}, - 614: {region: 0x164, script: 0x52, flags: 0x0}, - 615: {region: 0x164, script: 0x52, flags: 0x0}, - 616: {region: 0x164, script: 0x27, flags: 0x0}, - 617: {region: 0x164, script: 0x52, flags: 0x0}, - 618: {region: 0x164, script: 0x52, flags: 0x0}, - 619: {region: 0x1b, script: 0x3, flags: 0x1}, - 620: {region: 0x164, script: 0x52, flags: 0x0}, - 621: {region: 0x164, script: 0x52, flags: 0x0}, - 622: {region: 0x164, script: 0x52, flags: 0x0}, - 623: {region: 0x164, script: 0x52, flags: 0x0}, - 624: {region: 0x105, script: 0x1e, flags: 0x0}, - 625: {region: 0x164, script: 0x52, flags: 0x0}, - 626: {region: 0x164, script: 0x52, flags: 0x0}, - 627: {region: 0x164, script: 0x52, flags: 0x0}, - 628: {region: 0x105, script: 0x1e, flags: 0x0}, - 629: {region: 0x164, script: 0x52, flags: 0x0}, - 630: {region: 0x94, script: 0x52, flags: 0x0}, - 631: {region: 0xe7, script: 0x5, flags: 0x0}, - 632: {region: 0x7a, script: 0x52, flags: 0x0}, - 633: {region: 0x164, script: 0x52, flags: 0x0}, - 634: {region: 0x164, script: 0x52, flags: 0x0}, - 635: {region: 0x164, script: 0x52, flags: 0x0}, - 636: {region: 0x164, script: 0x27, flags: 0x0}, - 637: {region: 0x122, script: 0xd5, flags: 0x0}, - 638: {region: 0xe7, script: 0x5, flags: 0x0}, - 639: {region: 0x164, script: 0x52, flags: 0x0}, - 640: {region: 0x164, script: 0x52, flags: 0x0}, - 641: {region: 0x1e, script: 0x5, flags: 0x1}, - 642: {region: 0x164, script: 0x52, flags: 0x0}, - 643: {region: 0x164, script: 0x52, flags: 0x0}, - 644: {region: 0x164, script: 0x52, flags: 0x0}, - 645: {region: 0x137, script: 0x52, flags: 0x0}, - 646: {region: 0x86, script: 0x56, flags: 0x0}, - 647: {region: 0x96, script: 0x37, flags: 0x0}, - 648: {region: 0x12e, script: 0x52, flags: 0x0}, - 649: {region: 0xe7, script: 0x5, flags: 0x0}, - 650: {region: 0x130, script: 0x52, flags: 0x0}, - 651: {region: 0x164, script: 0x52, flags: 0x0}, - 652: {region: 0xb6, script: 0x52, flags: 0x0}, - 653: {region: 0x105, script: 0x1e, flags: 0x0}, - 654: {region: 0x164, script: 0x52, flags: 0x0}, - 655: {region: 0x94, script: 0x52, flags: 0x0}, - 656: {region: 0x164, script: 0x52, flags: 0x0}, - 657: {region: 0x52, script: 0xd5, flags: 0x0}, - 658: {region: 0x164, script: 0x52, flags: 0x0}, - 659: {region: 0x164, script: 0x52, flags: 0x0}, - 660: {region: 0x164, script: 0x52, flags: 0x0}, - 661: {region: 0x164, script: 0x52, flags: 0x0}, - 662: {region: 0x98, script: 0x54, flags: 0x0}, - 663: {region: 0x164, script: 0x52, flags: 0x0}, - 664: {region: 0x164, script: 0x52, flags: 0x0}, - 665: {region: 0x105, script: 0x1e, flags: 0x0}, - 666: {region: 0x130, script: 0x52, flags: 0x0}, - 667: {region: 0x164, script: 0x52, flags: 0x0}, - 668: {region: 0xd8, script: 0x52, flags: 0x0}, - 669: {region: 0x164, script: 0x52, flags: 0x0}, - 670: {region: 0x164, script: 0x52, flags: 0x0}, - 671: {region: 0x23, script: 0x2, flags: 0x1}, - 672: {region: 0x164, script: 0x52, flags: 0x0}, - 673: {region: 0x164, script: 0x52, flags: 0x0}, - 674: {region: 0x9d, script: 0x52, flags: 0x0}, - 675: {region: 0x52, script: 0x58, flags: 0x0}, - 676: {region: 0x94, script: 0x52, flags: 0x0}, - 677: {region: 0x9b, script: 0x5, flags: 0x0}, - 678: {region: 0x134, script: 0x52, flags: 0x0}, - 679: {region: 0x164, script: 0x52, flags: 0x0}, - 680: {region: 0x164, script: 0x52, flags: 0x0}, - 681: {region: 0x98, script: 0xd0, flags: 0x0}, - 682: {region: 0x9d, script: 0x52, flags: 0x0}, - 683: {region: 0x164, script: 0x52, flags: 0x0}, - 684: {region: 0x4a, script: 0x52, flags: 0x0}, - 685: {region: 0x164, script: 0x52, flags: 0x0}, - 686: {region: 0x164, script: 0x52, flags: 0x0}, - 687: {region: 0xae, script: 0x4f, flags: 0x0}, - 688: {region: 0x164, script: 0x52, flags: 0x0}, - 689: {region: 0x164, script: 0x52, flags: 0x0}, - 690: {region: 0x4a, script: 0x52, flags: 0x0}, - 691: {region: 0x164, script: 0x52, flags: 0x0}, - 692: {region: 0x164, script: 0x52, flags: 0x0}, - 693: {region: 0x161, script: 0x52, flags: 0x0}, - 694: {region: 0x9b, script: 0x5, flags: 0x0}, - 695: {region: 0xb5, script: 0x52, flags: 0x0}, - 696: {region: 0xb7, script: 0x52, flags: 0x0}, - 697: {region: 0x4a, script: 0x52, flags: 0x0}, - 698: {region: 0x4a, script: 0x52, flags: 0x0}, - 699: {region: 0xa3, script: 0x52, flags: 0x0}, - 700: {region: 0xa3, script: 0x52, flags: 0x0}, - 701: {region: 0x9b, script: 0x5, flags: 0x0}, - 702: {region: 0xb7, script: 0x52, flags: 0x0}, - 703: {region: 0x122, script: 0xd5, flags: 0x0}, - 704: {region: 0x52, script: 0x34, flags: 0x0}, - 705: {region: 0x12a, script: 0x52, flags: 0x0}, - 706: {region: 0x94, script: 0x52, flags: 0x0}, - 707: {region: 0x51, script: 0x52, flags: 0x0}, - 708: {region: 0x98, script: 0x20, flags: 0x0}, - 709: {region: 0x98, script: 0x20, flags: 0x0}, - 710: {region: 0x94, script: 0x52, flags: 0x0}, - 711: {region: 0x25, script: 0x3, flags: 0x1}, - 712: {region: 0xa3, script: 0x52, flags: 0x0}, - 713: {region: 0x164, script: 0x52, flags: 0x0}, - 714: {region: 0xce, script: 0x52, flags: 0x0}, - 715: {region: 0x164, script: 0x52, flags: 0x0}, - 716: {region: 0x164, script: 0x52, flags: 0x0}, - 717: {region: 0x164, script: 0x52, flags: 0x0}, - 718: {region: 0x164, script: 0x52, flags: 0x0}, - 719: {region: 0x164, script: 0x52, flags: 0x0}, - 720: {region: 0x164, script: 0x52, flags: 0x0}, - 721: {region: 0x164, script: 0x52, flags: 0x0}, - 722: {region: 0x164, script: 0x52, flags: 0x0}, - 723: {region: 0x164, script: 0x52, flags: 0x0}, - 724: {region: 0x164, script: 0x52, flags: 0x0}, - 725: {region: 0x164, script: 0x52, flags: 0x0}, - 726: {region: 0x164, script: 0x5, flags: 0x0}, - 727: {region: 0x105, script: 0x1e, flags: 0x0}, - 728: {region: 0xe6, script: 0x52, flags: 0x0}, - 729: {region: 0x164, script: 0x52, flags: 0x0}, - 730: {region: 0x94, script: 0x52, flags: 0x0}, - 731: {region: 0x164, script: 0x27, flags: 0x0}, - 732: {region: 0x164, script: 0x52, flags: 0x0}, - 733: {region: 0x164, script: 0x52, flags: 0x0}, - 734: {region: 0x164, script: 0x52, flags: 0x0}, - 735: {region: 0x111, script: 0x52, flags: 0x0}, - 736: {region: 0xa3, script: 0x52, flags: 0x0}, - 737: {region: 0x164, script: 0x52, flags: 0x0}, - 738: {region: 0x164, script: 0x52, flags: 0x0}, - 739: {region: 0x122, script: 0x5, flags: 0x0}, - 740: {region: 0xcb, script: 0x52, flags: 0x0}, - 741: {region: 0x164, script: 0x52, flags: 0x0}, - 742: {region: 0x164, script: 0x52, flags: 0x0}, - 743: {region: 0x164, script: 0x52, flags: 0x0}, - 744: {region: 0xbe, script: 0x52, flags: 0x0}, - 745: {region: 0xd0, script: 0x52, flags: 0x0}, - 746: {region: 0x164, script: 0x52, flags: 0x0}, - 747: {region: 0x51, script: 0x52, flags: 0x0}, - 748: {region: 0xda, script: 0x20, flags: 0x0}, - 749: {region: 0x12e, script: 0x52, flags: 0x0}, - 750: {region: 0xbf, script: 0x52, flags: 0x0}, - 751: {region: 0x164, script: 0x52, flags: 0x0}, - 752: {region: 0x164, script: 0x52, flags: 0x0}, - 753: {region: 0xdf, script: 0x52, flags: 0x0}, - 754: {region: 0x164, script: 0x52, flags: 0x0}, - 755: {region: 0x94, script: 0x52, flags: 0x0}, - 756: {region: 0x9a, script: 0x36, flags: 0x0}, - 757: {region: 0x164, script: 0x52, flags: 0x0}, - 758: {region: 0xc1, script: 0x1e, flags: 0x0}, - 759: {region: 0x164, script: 0x5, flags: 0x0}, - 760: {region: 0x164, script: 0x52, flags: 0x0}, - 761: {region: 0x164, script: 0x52, flags: 0x0}, - 762: {region: 0x164, script: 0x52, flags: 0x0}, - 763: {region: 0x98, script: 0x64, flags: 0x0}, - 764: {region: 0x164, script: 0x52, flags: 0x0}, - 765: {region: 0x164, script: 0x52, flags: 0x0}, - 766: {region: 0x10a, script: 0x52, flags: 0x0}, - 767: {region: 0x164, script: 0x52, flags: 0x0}, - 768: {region: 0x164, script: 0x52, flags: 0x0}, - 769: {region: 0x164, script: 0x52, flags: 0x0}, - 770: {region: 0x28, script: 0x3, flags: 0x1}, - 771: {region: 0x164, script: 0x52, flags: 0x0}, - 772: {region: 0x164, script: 0x52, flags: 0x0}, - 773: {region: 0x98, script: 0xe, flags: 0x0}, - 774: {region: 0xc3, script: 0x6b, flags: 0x0}, - 776: {region: 0x164, script: 0x52, flags: 0x0}, - 777: {region: 0x48, script: 0x52, flags: 0x0}, - 778: {region: 0x48, script: 0x52, flags: 0x0}, - 779: {region: 0x36, script: 0x52, flags: 0x0}, - 780: {region: 0x164, script: 0x52, flags: 0x0}, - 781: {region: 0x164, script: 0x52, flags: 0x0}, - 782: {region: 0x164, script: 0x52, flags: 0x0}, - 783: {region: 0x164, script: 0x52, flags: 0x0}, - 784: {region: 0x164, script: 0x52, flags: 0x0}, - 785: {region: 0x164, script: 0x52, flags: 0x0}, - 786: {region: 0x98, script: 0x20, flags: 0x0}, - 787: {region: 0xda, script: 0x20, flags: 0x0}, - 788: {region: 0x105, script: 0x1e, flags: 0x0}, - 789: {region: 0x34, script: 0x68, flags: 0x0}, - 790: {region: 0x2b, script: 0x3, flags: 0x1}, - 791: {region: 0xca, script: 0x52, flags: 0x0}, - 792: {region: 0x164, script: 0x52, flags: 0x0}, - 793: {region: 0x164, script: 0x52, flags: 0x0}, - 794: {region: 0x164, script: 0x52, flags: 0x0}, - 795: {region: 0x98, script: 0x20, flags: 0x0}, - 796: {region: 0x51, script: 0x52, flags: 0x0}, - 798: {region: 0x164, script: 0x52, flags: 0x0}, - 799: {region: 0x134, script: 0x52, flags: 0x0}, - 800: {region: 0x164, script: 0x52, flags: 0x0}, - 801: {region: 0x164, script: 0x52, flags: 0x0}, - 802: {region: 0xe7, script: 0x5, flags: 0x0}, - 803: {region: 0xc2, script: 0x52, flags: 0x0}, - 804: {region: 0x98, script: 0x20, flags: 0x0}, - 805: {region: 0x94, script: 0x52, flags: 0x0}, - 806: {region: 0x163, script: 0x52, flags: 0x0}, - 807: {region: 0x164, script: 0x52, flags: 0x0}, - 808: {region: 0xc3, script: 0x6b, flags: 0x0}, - 809: {region: 0x164, script: 0x52, flags: 0x0}, - 810: {region: 0x164, script: 0x27, flags: 0x0}, - 811: {region: 0x105, script: 0x1e, flags: 0x0}, - 812: {region: 0x164, script: 0x52, flags: 0x0}, - 813: {region: 0x130, script: 0x52, flags: 0x0}, - 814: {region: 0x9b, script: 0x5d, flags: 0x0}, - 815: {region: 0x164, script: 0x52, flags: 0x0}, - 816: {region: 0x164, script: 0x52, flags: 0x0}, - 817: {region: 0x9b, script: 0x5, flags: 0x0}, - 818: {region: 0x164, script: 0x52, flags: 0x0}, - 819: {region: 0x164, script: 0x52, flags: 0x0}, - 820: {region: 0x164, script: 0x52, flags: 0x0}, - 821: {region: 0xdc, script: 0x52, flags: 0x0}, - 822: {region: 0x164, script: 0x52, flags: 0x0}, - 823: {region: 0x164, script: 0x52, flags: 0x0}, - 825: {region: 0x164, script: 0x52, flags: 0x0}, - 826: {region: 0x52, script: 0x34, flags: 0x0}, - 827: {region: 0x9d, script: 0x52, flags: 0x0}, - 828: {region: 0xd1, script: 0x52, flags: 0x0}, - 829: {region: 0x164, script: 0x52, flags: 0x0}, - 830: {region: 0xd9, script: 0x52, flags: 0x0}, - 831: {region: 0x164, script: 0x52, flags: 0x0}, - 832: {region: 0x164, script: 0x52, flags: 0x0}, - 833: {region: 0x164, script: 0x52, flags: 0x0}, - 834: {region: 0xce, script: 0x52, flags: 0x0}, - 835: {region: 0x164, script: 0x52, flags: 0x0}, - 836: {region: 0x164, script: 0x52, flags: 0x0}, - 837: {region: 0x163, script: 0x52, flags: 0x0}, - 838: {region: 0xd0, script: 0x52, flags: 0x0}, - 839: {region: 0x5f, script: 0x52, flags: 0x0}, - 840: {region: 0xda, script: 0x20, flags: 0x0}, - 841: {region: 0x164, script: 0x52, flags: 0x0}, - 842: {region: 0xda, script: 0x20, flags: 0x0}, - 843: {region: 0x164, script: 0x52, flags: 0x0}, - 844: {region: 0x164, script: 0x52, flags: 0x0}, - 845: {region: 0xd1, script: 0x52, flags: 0x0}, - 846: {region: 0x164, script: 0x52, flags: 0x0}, - 847: {region: 0x164, script: 0x52, flags: 0x0}, - 848: {region: 0xd0, script: 0x52, flags: 0x0}, - 849: {region: 0x164, script: 0x52, flags: 0x0}, - 850: {region: 0xce, script: 0x52, flags: 0x0}, - 851: {region: 0xce, script: 0x52, flags: 0x0}, - 852: {region: 0x164, script: 0x52, flags: 0x0}, - 853: {region: 0x164, script: 0x52, flags: 0x0}, - 854: {region: 0x94, script: 0x52, flags: 0x0}, - 855: {region: 0x164, script: 0x52, flags: 0x0}, - 856: {region: 0xde, script: 0x52, flags: 0x0}, - 857: {region: 0x164, script: 0x52, flags: 0x0}, - 858: {region: 0x164, script: 0x52, flags: 0x0}, - 859: {region: 0x98, script: 0x52, flags: 0x0}, - 860: {region: 0x164, script: 0x52, flags: 0x0}, - 861: {region: 0x164, script: 0x52, flags: 0x0}, - 862: {region: 0xd8, script: 0x52, flags: 0x0}, - 863: {region: 0x51, script: 0x52, flags: 0x0}, - 864: {region: 0x164, script: 0x52, flags: 0x0}, - 865: {region: 0xd9, script: 0x52, flags: 0x0}, - 866: {region: 0x164, script: 0x52, flags: 0x0}, - 867: {region: 0x51, script: 0x52, flags: 0x0}, - 868: {region: 0x164, script: 0x52, flags: 0x0}, - 869: {region: 0x164, script: 0x52, flags: 0x0}, - 870: {region: 0xd9, script: 0x52, flags: 0x0}, - 871: {region: 0x122, script: 0x4e, flags: 0x0}, - 872: {region: 0x98, script: 0x20, flags: 0x0}, - 873: {region: 0x10b, script: 0xb7, flags: 0x0}, - 874: {region: 0x164, script: 0x52, flags: 0x0}, - 875: {region: 0x164, script: 0x52, flags: 0x0}, - 876: {region: 0x83, script: 0x70, flags: 0x0}, - 877: {region: 0x160, script: 0x52, flags: 0x0}, - 878: {region: 0x164, script: 0x52, flags: 0x0}, - 879: {region: 0x48, script: 0x17, flags: 0x0}, - 880: {region: 0x164, script: 0x52, flags: 0x0}, - 881: {region: 0x160, script: 0x52, flags: 0x0}, - 882: {region: 0x164, script: 0x52, flags: 0x0}, - 883: {region: 0x164, script: 0x52, flags: 0x0}, - 884: {region: 0x164, script: 0x52, flags: 0x0}, - 885: {region: 0x164, script: 0x52, flags: 0x0}, - 886: {region: 0x164, script: 0x52, flags: 0x0}, - 887: {region: 0x116, script: 0x52, flags: 0x0}, - 888: {region: 0x164, script: 0x52, flags: 0x0}, - 889: {region: 0x164, script: 0x52, flags: 0x0}, - 890: {region: 0x134, script: 0x52, flags: 0x0}, - 891: {region: 0x164, script: 0x52, flags: 0x0}, - 892: {region: 0x52, script: 0x52, flags: 0x0}, - 893: {region: 0x164, script: 0x52, flags: 0x0}, - 894: {region: 0xcd, script: 0x52, flags: 0x0}, - 895: {region: 0x12e, script: 0x52, flags: 0x0}, - 896: {region: 0x130, script: 0x52, flags: 0x0}, - 897: {region: 0x7f, script: 0x52, flags: 0x0}, - 898: {region: 0x77, script: 0x52, flags: 0x0}, - 899: {region: 0x164, script: 0x52, flags: 0x0}, - 901: {region: 0x164, script: 0x52, flags: 0x0}, - 902: {region: 0x164, script: 0x52, flags: 0x0}, - 903: {region: 0x6e, script: 0x52, flags: 0x0}, - 904: {region: 0x164, script: 0x52, flags: 0x0}, - 905: {region: 0x164, script: 0x52, flags: 0x0}, - 906: {region: 0x164, script: 0x52, flags: 0x0}, - 907: {region: 0x164, script: 0x52, flags: 0x0}, - 908: {region: 0x98, script: 0x75, flags: 0x0}, - 909: {region: 0x164, script: 0x52, flags: 0x0}, - 910: {region: 0x164, script: 0x5, flags: 0x0}, - 911: {region: 0x7c, script: 0x1e, flags: 0x0}, - 912: {region: 0x134, script: 0x76, flags: 0x0}, - 913: {region: 0x164, script: 0x5, flags: 0x0}, - 914: {region: 0xc4, script: 0x74, flags: 0x0}, - 915: {region: 0x164, script: 0x52, flags: 0x0}, - 916: {region: 0x2e, script: 0x3, flags: 0x1}, - 917: {region: 0xe6, script: 0x52, flags: 0x0}, - 918: {region: 0x31, script: 0x2, flags: 0x1}, - 919: {region: 0xe6, script: 0x52, flags: 0x0}, - 920: {region: 0x2f, script: 0x52, flags: 0x0}, - 921: {region: 0xef, script: 0x52, flags: 0x0}, - 922: {region: 0x164, script: 0x52, flags: 0x0}, - 923: {region: 0x77, script: 0x52, flags: 0x0}, - 924: {region: 0xd5, script: 0x52, flags: 0x0}, - 925: {region: 0x134, script: 0x52, flags: 0x0}, - 926: {region: 0x48, script: 0x52, flags: 0x0}, - 927: {region: 0x164, script: 0x52, flags: 0x0}, - 928: {region: 0x9b, script: 0xdd, flags: 0x0}, - 929: {region: 0x164, script: 0x52, flags: 0x0}, - 930: {region: 0x5f, script: 0x52, flags: 0x0}, - 931: {region: 0x164, script: 0x5, flags: 0x0}, - 932: {region: 0xaf, script: 0x7f, flags: 0x0}, - 934: {region: 0x164, script: 0x52, flags: 0x0}, - 935: {region: 0x164, script: 0x52, flags: 0x0}, - 936: {region: 0x98, script: 0x12, flags: 0x0}, - 937: {region: 0xa3, script: 0x52, flags: 0x0}, - 938: {region: 0xe8, script: 0x52, flags: 0x0}, - 939: {region: 0x164, script: 0x52, flags: 0x0}, - 940: {region: 0x9d, script: 0x52, flags: 0x0}, - 941: {region: 0x164, script: 0x52, flags: 0x0}, - 942: {region: 0x164, script: 0x52, flags: 0x0}, - 943: {region: 0x86, script: 0x2d, flags: 0x0}, - 944: {region: 0x74, script: 0x52, flags: 0x0}, - 945: {region: 0x164, script: 0x52, flags: 0x0}, - 946: {region: 0xe7, script: 0x45, flags: 0x0}, - 947: {region: 0x9b, script: 0x5, flags: 0x0}, - 948: {region: 0x1, script: 0x52, flags: 0x0}, - 949: {region: 0x23, script: 0x5, flags: 0x0}, - 950: {region: 0x164, script: 0x52, flags: 0x0}, - 951: {region: 0x40, script: 0x52, flags: 0x0}, - 952: {region: 0x164, script: 0x52, flags: 0x0}, - 953: {region: 0x79, script: 0x52, flags: 0x0}, - 954: {region: 0x164, script: 0x52, flags: 0x0}, - 955: {region: 0xe3, script: 0x52, flags: 0x0}, - 956: {region: 0x88, script: 0x52, flags: 0x0}, - 957: {region: 0x68, script: 0x52, flags: 0x0}, - 958: {region: 0x164, script: 0x52, flags: 0x0}, - 959: {region: 0x98, script: 0x20, flags: 0x0}, - 960: {region: 0x164, script: 0x52, flags: 0x0}, - 961: {region: 0x101, script: 0x52, flags: 0x0}, - 962: {region: 0x94, script: 0x52, flags: 0x0}, - 963: {region: 0x164, script: 0x52, flags: 0x0}, - 964: {region: 0x164, script: 0x52, flags: 0x0}, - 965: {region: 0x9d, script: 0x52, flags: 0x0}, - 966: {region: 0x164, script: 0x5, flags: 0x0}, - 967: {region: 0x98, script: 0x52, flags: 0x0}, - 968: {region: 0x33, script: 0x2, flags: 0x1}, - 969: {region: 0xda, script: 0x20, flags: 0x0}, - 970: {region: 0x34, script: 0xe, flags: 0x0}, - 971: {region: 0x4d, script: 0x52, flags: 0x0}, - 972: {region: 0x71, script: 0x52, flags: 0x0}, - 973: {region: 0x4d, script: 0x52, flags: 0x0}, - 974: {region: 0x9b, script: 0x5, flags: 0x0}, - 975: {region: 0x10b, script: 0x52, flags: 0x0}, - 976: {region: 0x39, script: 0x52, flags: 0x0}, - 977: {region: 0x164, script: 0x52, flags: 0x0}, - 978: {region: 0xd0, script: 0x52, flags: 0x0}, - 979: {region: 0x103, script: 0x52, flags: 0x0}, - 980: {region: 0x94, script: 0x52, flags: 0x0}, - 981: {region: 0x12e, script: 0x52, flags: 0x0}, - 982: {region: 0x164, script: 0x52, flags: 0x0}, - 983: {region: 0x164, script: 0x52, flags: 0x0}, - 984: {region: 0x72, script: 0x52, flags: 0x0}, - 985: {region: 0x105, script: 0x1e, flags: 0x0}, - 986: {region: 0x12f, script: 0x1e, flags: 0x0}, - 987: {region: 0x108, script: 0x52, flags: 0x0}, - 988: {region: 0x106, script: 0x52, flags: 0x0}, - 989: {region: 0x12e, script: 0x52, flags: 0x0}, - 990: {region: 0x164, script: 0x52, flags: 0x0}, - 991: {region: 0xa1, script: 0x44, flags: 0x0}, - 992: {region: 0x98, script: 0x20, flags: 0x0}, - 993: {region: 0x7f, script: 0x52, flags: 0x0}, - 994: {region: 0x105, script: 0x1e, flags: 0x0}, - 995: {region: 0xa3, script: 0x52, flags: 0x0}, - 996: {region: 0x94, script: 0x52, flags: 0x0}, - 997: {region: 0x98, script: 0x52, flags: 0x0}, - 998: {region: 0x98, script: 0xbb, flags: 0x0}, - 999: {region: 0x164, script: 0x52, flags: 0x0}, - 1000: {region: 0x164, script: 0x52, flags: 0x0}, - 1001: {region: 0x12e, script: 0x52, flags: 0x0}, - 1002: {region: 0x9d, script: 0x52, flags: 0x0}, - 1003: {region: 0x98, script: 0x20, flags: 0x0}, - 1004: {region: 0x164, script: 0x5, flags: 0x0}, - 1005: {region: 0x9d, script: 0x52, flags: 0x0}, - 1006: {region: 0x7a, script: 0x52, flags: 0x0}, - 1007: {region: 0x48, script: 0x52, flags: 0x0}, - 1008: {region: 0x35, script: 0x4, flags: 0x1}, - 1009: {region: 0x9d, script: 0x52, flags: 0x0}, - 1010: {region: 0x9b, script: 0x5, flags: 0x0}, - 1011: {region: 0xd9, script: 0x52, flags: 0x0}, - 1012: {region: 0x4e, script: 0x52, flags: 0x0}, - 1013: {region: 0xd0, script: 0x52, flags: 0x0}, - 1014: {region: 0xce, script: 0x52, flags: 0x0}, - 1015: {region: 0xc2, script: 0x52, flags: 0x0}, - 1016: {region: 0x4b, script: 0x52, flags: 0x0}, - 1017: {region: 0x95, script: 0x72, flags: 0x0}, - 1018: {region: 0xb5, script: 0x52, flags: 0x0}, - 1019: {region: 0x164, script: 0x27, flags: 0x0}, - 1020: {region: 0x164, script: 0x52, flags: 0x0}, - 1022: {region: 0xb9, script: 0xd2, flags: 0x0}, - 1023: {region: 0x164, script: 0x52, flags: 0x0}, - 1024: {region: 0xc3, script: 0x6b, flags: 0x0}, - 1025: {region: 0x164, script: 0x5, flags: 0x0}, - 1026: {region: 0xb2, script: 0xc1, flags: 0x0}, - 1027: {region: 0x6e, script: 0x52, flags: 0x0}, - 1028: {region: 0x164, script: 0x52, flags: 0x0}, - 1029: {region: 0x164, script: 0x52, flags: 0x0}, - 1030: {region: 0x164, script: 0x52, flags: 0x0}, - 1031: {region: 0x164, script: 0x52, flags: 0x0}, - 1032: {region: 0x110, script: 0x52, flags: 0x0}, - 1033: {region: 0x164, script: 0x52, flags: 0x0}, - 1034: {region: 0xe7, script: 0x5, flags: 0x0}, - 1035: {region: 0x164, script: 0x52, flags: 0x0}, - 1036: {region: 0x10e, script: 0x52, flags: 0x0}, - 1037: {region: 0x164, script: 0x52, flags: 0x0}, - 1038: {region: 0xe8, script: 0x52, flags: 0x0}, - 1039: {region: 0x164, script: 0x52, flags: 0x0}, - 1040: {region: 0x94, script: 0x52, flags: 0x0}, - 1041: {region: 0x141, script: 0x52, flags: 0x0}, - 1042: {region: 0x10b, script: 0x52, flags: 0x0}, - 1044: {region: 0x10b, script: 0x52, flags: 0x0}, - 1045: {region: 0x71, script: 0x52, flags: 0x0}, - 1046: {region: 0x96, script: 0xb8, flags: 0x0}, - 1047: {region: 0x164, script: 0x52, flags: 0x0}, - 1048: {region: 0x71, script: 0x52, flags: 0x0}, - 1049: {region: 0x163, script: 0x52, flags: 0x0}, - 1050: {region: 0x164, script: 0x52, flags: 0x0}, - 1051: {region: 0xc2, script: 0x52, flags: 0x0}, - 1052: {region: 0x164, script: 0x52, flags: 0x0}, - 1053: {region: 0x164, script: 0x52, flags: 0x0}, - 1054: {region: 0x164, script: 0x52, flags: 0x0}, - 1055: {region: 0x114, script: 0x52, flags: 0x0}, - 1056: {region: 0x164, script: 0x52, flags: 0x0}, - 1057: {region: 0x164, script: 0x52, flags: 0x0}, - 1058: {region: 0x122, script: 0xd5, flags: 0x0}, - 1059: {region: 0x164, script: 0x52, flags: 0x0}, - 1060: {region: 0x164, script: 0x52, flags: 0x0}, - 1061: {region: 0x164, script: 0x52, flags: 0x0}, - 1062: {region: 0x164, script: 0x52, flags: 0x0}, - 1063: {region: 0x26, script: 0x52, flags: 0x0}, - 1064: {region: 0x39, script: 0x5, flags: 0x1}, - 1065: {region: 0x98, script: 0xc2, flags: 0x0}, - 1066: {region: 0x115, script: 0x52, flags: 0x0}, - 1067: {region: 0x113, script: 0x52, flags: 0x0}, - 1068: {region: 0x98, script: 0x20, flags: 0x0}, - 1069: {region: 0x160, script: 0x52, flags: 0x0}, - 1070: {region: 0x164, script: 0x52, flags: 0x0}, - 1071: {region: 0x164, script: 0x52, flags: 0x0}, - 1072: {region: 0x6c, script: 0x52, flags: 0x0}, - 1073: {region: 0x160, script: 0x52, flags: 0x0}, - 1074: {region: 0x164, script: 0x52, flags: 0x0}, - 1075: {region: 0x5f, script: 0x52, flags: 0x0}, - 1076: {region: 0x94, script: 0x52, flags: 0x0}, - 1077: {region: 0x164, script: 0x52, flags: 0x0}, - 1078: {region: 0x164, script: 0x52, flags: 0x0}, - 1079: {region: 0x12e, script: 0x52, flags: 0x0}, - 1080: {region: 0x164, script: 0x52, flags: 0x0}, - 1081: {region: 0x83, script: 0x52, flags: 0x0}, - 1082: {region: 0x10b, script: 0x52, flags: 0x0}, - 1083: {region: 0x12e, script: 0x52, flags: 0x0}, - 1084: {region: 0x15e, script: 0x5, flags: 0x0}, - 1085: {region: 0x4a, script: 0x52, flags: 0x0}, - 1086: {region: 0x5f, script: 0x52, flags: 0x0}, - 1087: {region: 0x164, script: 0x52, flags: 0x0}, - 1088: {region: 0x98, script: 0x20, flags: 0x0}, - 1089: {region: 0x94, script: 0x52, flags: 0x0}, - 1090: {region: 0x164, script: 0x52, flags: 0x0}, - 1091: {region: 0x34, script: 0xe, flags: 0x0}, - 1092: {region: 0x9a, script: 0xc5, flags: 0x0}, - 1093: {region: 0xe8, script: 0x52, flags: 0x0}, - 1094: {region: 0x98, script: 0xcd, flags: 0x0}, - 1095: {region: 0xda, script: 0x20, flags: 0x0}, - 1096: {region: 0x164, script: 0x52, flags: 0x0}, - 1097: {region: 0x164, script: 0x52, flags: 0x0}, - 1098: {region: 0x164, script: 0x52, flags: 0x0}, - 1099: {region: 0x164, script: 0x52, flags: 0x0}, - 1100: {region: 0x164, script: 0x52, flags: 0x0}, - 1101: {region: 0x164, script: 0x52, flags: 0x0}, - 1102: {region: 0x164, script: 0x52, flags: 0x0}, - 1103: {region: 0x164, script: 0x52, flags: 0x0}, - 1104: {region: 0xe6, script: 0x52, flags: 0x0}, - 1105: {region: 0x164, script: 0x52, flags: 0x0}, - 1106: {region: 0x164, script: 0x52, flags: 0x0}, - 1107: {region: 0x98, script: 0x4a, flags: 0x0}, - 1108: {region: 0x52, script: 0xcb, flags: 0x0}, - 1109: {region: 0xda, script: 0x20, flags: 0x0}, - 1110: {region: 0xda, script: 0x20, flags: 0x0}, - 1111: {region: 0x98, script: 0xd0, flags: 0x0}, - 1112: {region: 0x164, script: 0x52, flags: 0x0}, - 1113: {region: 0x111, script: 0x52, flags: 0x0}, - 1114: {region: 0x130, script: 0x52, flags: 0x0}, - 1115: {region: 0x125, script: 0x52, flags: 0x0}, - 1116: {region: 0x164, script: 0x52, flags: 0x0}, - 1117: {region: 0x3e, script: 0x3, flags: 0x1}, - 1118: {region: 0x164, script: 0x52, flags: 0x0}, - 1119: {region: 0x164, script: 0x52, flags: 0x0}, - 1120: {region: 0x164, script: 0x52, flags: 0x0}, - 1121: {region: 0x122, script: 0xd5, flags: 0x0}, - 1122: {region: 0xda, script: 0x20, flags: 0x0}, - 1123: {region: 0xda, script: 0x20, flags: 0x0}, - 1124: {region: 0xda, script: 0x20, flags: 0x0}, - 1125: {region: 0x6e, script: 0x27, flags: 0x0}, - 1126: {region: 0x164, script: 0x52, flags: 0x0}, - 1127: {region: 0x6c, script: 0x27, flags: 0x0}, - 1128: {region: 0x164, script: 0x52, flags: 0x0}, - 1129: {region: 0x164, script: 0x52, flags: 0x0}, - 1130: {region: 0x164, script: 0x52, flags: 0x0}, - 1131: {region: 0xd5, script: 0x52, flags: 0x0}, - 1132: {region: 0x126, script: 0x52, flags: 0x0}, - 1133: {region: 0x124, script: 0x52, flags: 0x0}, - 1134: {region: 0x31, script: 0x52, flags: 0x0}, - 1135: {region: 0xda, script: 0x20, flags: 0x0}, - 1136: {region: 0xe6, script: 0x52, flags: 0x0}, - 1137: {region: 0x164, script: 0x52, flags: 0x0}, - 1138: {region: 0x164, script: 0x52, flags: 0x0}, - 1139: {region: 0x31, script: 0x52, flags: 0x0}, - 1140: {region: 0xd3, script: 0x52, flags: 0x0}, - 1141: {region: 0x164, script: 0x52, flags: 0x0}, - 1142: {region: 0x160, script: 0x52, flags: 0x0}, - 1143: {region: 0x164, script: 0x52, flags: 0x0}, - 1144: {region: 0x128, script: 0x52, flags: 0x0}, - 1145: {region: 0x164, script: 0x52, flags: 0x0}, - 1146: {region: 0xcd, script: 0x52, flags: 0x0}, - 1147: {region: 0x164, script: 0x52, flags: 0x0}, - 1148: {region: 0xe5, script: 0x52, flags: 0x0}, - 1149: {region: 0x164, script: 0x52, flags: 0x0}, - 1150: {region: 0x164, script: 0x52, flags: 0x0}, - 1151: {region: 0x164, script: 0x52, flags: 0x0}, - 1152: {region: 0x12a, script: 0x52, flags: 0x0}, - 1153: {region: 0x12a, script: 0x52, flags: 0x0}, - 1154: {region: 0x12d, script: 0x52, flags: 0x0}, - 1155: {region: 0x164, script: 0x5, flags: 0x0}, - 1156: {region: 0x160, script: 0x52, flags: 0x0}, - 1157: {region: 0x86, script: 0x2d, flags: 0x0}, - 1158: {region: 0xda, script: 0x20, flags: 0x0}, - 1159: {region: 0xe6, script: 0x52, flags: 0x0}, - 1160: {region: 0x42, script: 0xd6, flags: 0x0}, - 1161: {region: 0x164, script: 0x52, flags: 0x0}, - 1162: {region: 0x105, script: 0x1e, flags: 0x0}, - 1163: {region: 0x164, script: 0x52, flags: 0x0}, - 1164: {region: 0x164, script: 0x52, flags: 0x0}, - 1165: {region: 0x130, script: 0x52, flags: 0x0}, - 1166: {region: 0x164, script: 0x52, flags: 0x0}, - 1167: {region: 0x122, script: 0xd5, flags: 0x0}, - 1168: {region: 0x31, script: 0x52, flags: 0x0}, - 1169: {region: 0x164, script: 0x52, flags: 0x0}, - 1170: {region: 0x164, script: 0x52, flags: 0x0}, - 1171: {region: 0xcd, script: 0x52, flags: 0x0}, - 1172: {region: 0x164, script: 0x52, flags: 0x0}, - 1173: {region: 0x164, script: 0x52, flags: 0x0}, - 1174: {region: 0x12c, script: 0x52, flags: 0x0}, - 1175: {region: 0x164, script: 0x52, flags: 0x0}, - 1177: {region: 0x164, script: 0x52, flags: 0x0}, - 1178: {region: 0xd3, script: 0x52, flags: 0x0}, - 1179: {region: 0x52, script: 0xce, flags: 0x0}, - 1180: {region: 0xe4, script: 0x52, flags: 0x0}, - 1181: {region: 0x164, script: 0x52, flags: 0x0}, - 1182: {region: 0x105, script: 0x1e, flags: 0x0}, - 1183: {region: 0xb9, script: 0x52, flags: 0x0}, - 1184: {region: 0x164, script: 0x52, flags: 0x0}, - 1185: {region: 0x105, script: 0x1e, flags: 0x0}, - 1186: {region: 0x41, script: 0x4, flags: 0x1}, - 1187: {region: 0x11b, script: 0xd8, flags: 0x0}, - 1188: {region: 0x12f, script: 0x1e, flags: 0x0}, - 1189: {region: 0x74, script: 0x52, flags: 0x0}, - 1190: {region: 0x29, script: 0x52, flags: 0x0}, - 1192: {region: 0x45, script: 0x3, flags: 0x1}, - 1193: {region: 0x98, script: 0xe, flags: 0x0}, - 1194: {region: 0xe7, script: 0x5, flags: 0x0}, - 1195: {region: 0x164, script: 0x52, flags: 0x0}, - 1196: {region: 0x164, script: 0x52, flags: 0x0}, - 1197: {region: 0x164, script: 0x52, flags: 0x0}, - 1198: {region: 0x164, script: 0x52, flags: 0x0}, - 1199: {region: 0x164, script: 0x52, flags: 0x0}, - 1200: {region: 0x164, script: 0x52, flags: 0x0}, - 1201: {region: 0x164, script: 0x52, flags: 0x0}, - 1202: {region: 0x48, script: 0x4, flags: 0x1}, - 1203: {region: 0x164, script: 0x52, flags: 0x0}, - 1204: {region: 0xb3, script: 0xd9, flags: 0x0}, - 1205: {region: 0x164, script: 0x52, flags: 0x0}, - 1206: {region: 0x160, script: 0x52, flags: 0x0}, - 1207: {region: 0x9d, script: 0x52, flags: 0x0}, - 1208: {region: 0x105, script: 0x52, flags: 0x0}, - 1209: {region: 0x13d, script: 0x52, flags: 0x0}, - 1210: {region: 0x11a, script: 0x52, flags: 0x0}, - 1211: {region: 0x164, script: 0x52, flags: 0x0}, - 1212: {region: 0x35, script: 0x52, flags: 0x0}, - 1213: {region: 0x5f, script: 0x52, flags: 0x0}, - 1214: {region: 0xd0, script: 0x52, flags: 0x0}, - 1215: {region: 0x1, script: 0x52, flags: 0x0}, - 1216: {region: 0x105, script: 0x52, flags: 0x0}, - 1217: {region: 0x69, script: 0x52, flags: 0x0}, - 1218: {region: 0x12e, script: 0x52, flags: 0x0}, - 1219: {region: 0x164, script: 0x52, flags: 0x0}, - 1220: {region: 0x35, script: 0x52, flags: 0x0}, - 1221: {region: 0x4d, script: 0x52, flags: 0x0}, - 1222: {region: 0x164, script: 0x52, flags: 0x0}, - 1223: {region: 0x6e, script: 0x27, flags: 0x0}, - 1224: {region: 0x164, script: 0x52, flags: 0x0}, - 1225: {region: 0xe6, script: 0x52, flags: 0x0}, - 1226: {region: 0x2e, script: 0x52, flags: 0x0}, - 1227: {region: 0x98, script: 0xd0, flags: 0x0}, - 1228: {region: 0x98, script: 0x20, flags: 0x0}, - 1229: {region: 0x164, script: 0x52, flags: 0x0}, - 1230: {region: 0x164, script: 0x52, flags: 0x0}, - 1231: {region: 0x164, script: 0x52, flags: 0x0}, - 1232: {region: 0x164, script: 0x52, flags: 0x0}, - 1233: {region: 0x164, script: 0x52, flags: 0x0}, - 1234: {region: 0x164, script: 0x52, flags: 0x0}, - 1235: {region: 0x164, script: 0x52, flags: 0x0}, - 1236: {region: 0x164, script: 0x52, flags: 0x0}, - 1237: {region: 0x164, script: 0x52, flags: 0x0}, - 1238: {region: 0x13f, script: 0x52, flags: 0x0}, - 1239: {region: 0x164, script: 0x52, flags: 0x0}, - 1240: {region: 0x164, script: 0x52, flags: 0x0}, - 1241: {region: 0xa7, script: 0x5, flags: 0x0}, - 1242: {region: 0x164, script: 0x52, flags: 0x0}, - 1243: {region: 0x113, script: 0x52, flags: 0x0}, - 1244: {region: 0x164, script: 0x52, flags: 0x0}, - 1245: {region: 0x164, script: 0x52, flags: 0x0}, - 1246: {region: 0x164, script: 0x52, flags: 0x0}, - 1247: {region: 0x164, script: 0x52, flags: 0x0}, - 1248: {region: 0x98, script: 0x20, flags: 0x0}, - 1249: {region: 0x52, script: 0x34, flags: 0x0}, - 1250: {region: 0x164, script: 0x52, flags: 0x0}, - 1251: {region: 0x164, script: 0x52, flags: 0x0}, - 1252: {region: 0x40, script: 0x52, flags: 0x0}, - 1253: {region: 0x164, script: 0x52, flags: 0x0}, - 1254: {region: 0x12a, script: 0x18, flags: 0x0}, - 1255: {region: 0x164, script: 0x52, flags: 0x0}, - 1256: {region: 0x160, script: 0x52, flags: 0x0}, - 1257: {region: 0x164, script: 0x52, flags: 0x0}, - 1258: {region: 0x12a, script: 0x5a, flags: 0x0}, - 1259: {region: 0x12a, script: 0x5b, flags: 0x0}, - 1260: {region: 0x7c, script: 0x29, flags: 0x0}, - 1261: {region: 0x52, script: 0x5e, flags: 0x0}, - 1262: {region: 0x10a, script: 0x62, flags: 0x0}, - 1263: {region: 0x107, script: 0x6c, flags: 0x0}, - 1264: {region: 0x98, script: 0x20, flags: 0x0}, - 1265: {region: 0x130, script: 0x52, flags: 0x0}, - 1266: {region: 0x164, script: 0x52, flags: 0x0}, - 1267: {region: 0x9b, script: 0x82, flags: 0x0}, - 1268: {region: 0x164, script: 0x52, flags: 0x0}, - 1269: {region: 0x15d, script: 0xba, flags: 0x0}, - 1270: {region: 0x164, script: 0x52, flags: 0x0}, - 1271: {region: 0x164, script: 0x52, flags: 0x0}, - 1272: {region: 0xda, script: 0x20, flags: 0x0}, - 1273: {region: 0x164, script: 0x52, flags: 0x0}, - 1274: {region: 0x164, script: 0x52, flags: 0x0}, - 1275: {region: 0xd0, script: 0x52, flags: 0x0}, - 1276: {region: 0x74, script: 0x52, flags: 0x0}, - 1277: {region: 0x164, script: 0x52, flags: 0x0}, - 1278: {region: 0x164, script: 0x52, flags: 0x0}, - 1279: {region: 0x51, script: 0x52, flags: 0x0}, - 1280: {region: 0x164, script: 0x52, flags: 0x0}, - 1281: {region: 0x164, script: 0x52, flags: 0x0}, - 1282: {region: 0x164, script: 0x52, flags: 0x0}, - 1283: {region: 0x51, script: 0x52, flags: 0x0}, - 1284: {region: 0x164, script: 0x52, flags: 0x0}, - 1285: {region: 0x164, script: 0x52, flags: 0x0}, - 1286: {region: 0x164, script: 0x52, flags: 0x0}, - 1287: {region: 0x164, script: 0x52, flags: 0x0}, - 1288: {region: 0x1, script: 0x37, flags: 0x0}, - 1289: {region: 0x164, script: 0x52, flags: 0x0}, - 1290: {region: 0x164, script: 0x52, flags: 0x0}, - 1291: {region: 0x164, script: 0x52, flags: 0x0}, - 1292: {region: 0x164, script: 0x52, flags: 0x0}, - 1293: {region: 0x164, script: 0x52, flags: 0x0}, - 1294: {region: 0xd5, script: 0x52, flags: 0x0}, - 1295: {region: 0x164, script: 0x52, flags: 0x0}, - 1296: {region: 0x164, script: 0x52, flags: 0x0}, - 1297: {region: 0x164, script: 0x52, flags: 0x0}, - 1298: {region: 0x40, script: 0x52, flags: 0x0}, - 1299: {region: 0x164, script: 0x52, flags: 0x0}, - 1300: {region: 0xce, script: 0x52, flags: 0x0}, - 1301: {region: 0x4c, script: 0x3, flags: 0x1}, - 1302: {region: 0x164, script: 0x52, flags: 0x0}, - 1303: {region: 0x164, script: 0x52, flags: 0x0}, - 1304: {region: 0x164, script: 0x52, flags: 0x0}, - 1305: {region: 0x52, script: 0x52, flags: 0x0}, - 1306: {region: 0x10a, script: 0x52, flags: 0x0}, - 1308: {region: 0xa7, script: 0x5, flags: 0x0}, - 1309: {region: 0xd8, script: 0x52, flags: 0x0}, - 1310: {region: 0xb9, script: 0xd2, flags: 0x0}, - 1311: {region: 0x4f, script: 0x14, flags: 0x1}, - 1312: {region: 0x164, script: 0x52, flags: 0x0}, - 1313: {region: 0x121, script: 0x52, flags: 0x0}, - 1314: {region: 0xcf, script: 0x52, flags: 0x0}, - 1315: {region: 0x164, script: 0x52, flags: 0x0}, - 1316: {region: 0x160, script: 0x52, flags: 0x0}, - 1318: {region: 0x12a, script: 0x52, flags: 0x0}, -} - -// likelyLangList holds lists info associated with likelyLang. -// Size: 396 bytes, 99 elements -var likelyLangList = [99]likelyScriptRegion{ - 0: {region: 0x9b, script: 0x7, flags: 0x0}, - 1: {region: 0xa0, script: 0x6d, flags: 0x2}, - 2: {region: 0x11b, script: 0x78, flags: 0x2}, - 3: {region: 0x31, script: 0x52, flags: 0x0}, - 4: {region: 0x9a, script: 0x5, flags: 0x4}, - 5: {region: 0x9b, script: 0x5, flags: 0x4}, - 6: {region: 0x105, script: 0x1e, flags: 0x4}, - 7: {region: 0x9b, script: 0x5, flags: 0x2}, - 8: {region: 0x98, script: 0xe, flags: 0x0}, - 9: {region: 0x34, script: 0x16, flags: 0x2}, - 10: {region: 0x105, script: 0x1e, flags: 0x0}, - 11: {region: 0x37, script: 0x2a, flags: 0x2}, - 12: {region: 0x134, script: 0x52, flags: 0x0}, - 13: {region: 0x7a, script: 0xbd, flags: 0x2}, - 14: {region: 0x113, script: 0x52, flags: 0x0}, - 15: {region: 0x83, script: 0x1, flags: 0x2}, - 16: {region: 0x5c, script: 0x1d, flags: 0x0}, - 17: {region: 0x86, script: 0x57, flags: 0x2}, - 18: {region: 0xd5, script: 0x52, flags: 0x0}, - 19: {region: 0x51, script: 0x5, flags: 0x4}, - 20: {region: 0x10a, script: 0x5, flags: 0x4}, - 21: {region: 0xad, script: 0x1e, flags: 0x0}, - 22: {region: 0x23, script: 0x5, flags: 0x4}, - 23: {region: 0x52, script: 0x5, flags: 0x4}, - 24: {region: 0x9b, script: 0x5, flags: 0x4}, - 25: {region: 0xc4, script: 0x5, flags: 0x4}, - 26: {region: 0x52, script: 0x5, flags: 0x2}, - 27: {region: 0x12a, script: 0x52, flags: 0x0}, - 28: {region: 0xaf, script: 0x5, flags: 0x4}, - 29: {region: 0x9a, script: 0x5, flags: 0x2}, - 30: {region: 0xa4, script: 0x1e, flags: 0x0}, - 31: {region: 0x52, script: 0x5, flags: 0x4}, - 32: {region: 0x12a, script: 0x52, flags: 0x4}, - 33: {region: 0x52, script: 0x5, flags: 0x2}, - 34: {region: 0x12a, script: 0x52, flags: 0x2}, - 35: {region: 0xda, script: 0x20, flags: 0x0}, - 36: {region: 0x98, script: 0x55, flags: 0x2}, - 37: {region: 0x82, script: 0x52, flags: 0x0}, - 38: {region: 0x83, script: 0x70, flags: 0x4}, - 39: {region: 0x83, script: 0x70, flags: 0x2}, - 40: {region: 0xc4, script: 0x1e, flags: 0x0}, - 41: {region: 0x52, script: 0x66, flags: 0x4}, - 42: {region: 0x52, script: 0x66, flags: 0x2}, - 43: {region: 0xcf, script: 0x52, flags: 0x0}, - 44: {region: 0x49, script: 0x5, flags: 0x4}, - 45: {region: 0x94, script: 0x5, flags: 0x4}, - 46: {region: 0x98, script: 0x2f, flags: 0x0}, - 47: {region: 0xe7, script: 0x5, flags: 0x4}, - 48: {region: 0xe7, script: 0x5, flags: 0x2}, - 49: {region: 0x9b, script: 0x7c, flags: 0x0}, - 50: {region: 0x52, script: 0x7d, flags: 0x2}, - 51: {region: 0xb9, script: 0xd2, flags: 0x0}, - 52: {region: 0xd8, script: 0x52, flags: 0x4}, - 53: {region: 0xe7, script: 0x5, flags: 0x0}, - 54: {region: 0x98, script: 0x20, flags: 0x2}, - 55: {region: 0x98, script: 0x47, flags: 0x2}, - 56: {region: 0x98, script: 0xc0, flags: 0x2}, - 57: {region: 0x104, script: 0x1e, flags: 0x0}, - 58: {region: 0xbc, script: 0x52, flags: 0x4}, - 59: {region: 0x103, script: 0x52, flags: 0x4}, - 60: {region: 0x105, script: 0x52, flags: 0x4}, - 61: {region: 0x12a, script: 0x52, flags: 0x4}, - 62: {region: 0x123, script: 0x1e, flags: 0x0}, - 63: {region: 0xe7, script: 0x5, flags: 0x4}, - 64: {region: 0xe7, script: 0x5, flags: 0x2}, - 65: {region: 0x52, script: 0x5, flags: 0x0}, - 66: {region: 0xad, script: 0x1e, flags: 0x4}, - 67: {region: 0xc4, script: 0x1e, flags: 0x4}, - 68: {region: 0xad, script: 0x1e, flags: 0x2}, - 69: {region: 0x98, script: 0xe, flags: 0x0}, - 70: {region: 0xda, script: 0x20, flags: 0x4}, - 71: {region: 0xda, script: 0x20, flags: 0x2}, - 72: {region: 0x136, script: 0x52, flags: 0x0}, - 73: {region: 0x23, script: 0x5, flags: 0x4}, - 74: {region: 0x52, script: 0x1e, flags: 0x4}, - 75: {region: 0x23, script: 0x5, flags: 0x2}, - 76: {region: 0x8c, script: 0x35, flags: 0x0}, - 77: {region: 0x52, script: 0x34, flags: 0x4}, - 78: {region: 0x52, script: 0x34, flags: 0x2}, - 79: {region: 0x52, script: 0x34, flags: 0x0}, - 80: {region: 0x2e, script: 0x35, flags: 0x4}, - 81: {region: 0x3d, script: 0x35, flags: 0x4}, - 82: {region: 0x7a, script: 0x35, flags: 0x4}, - 83: {region: 0x7d, script: 0x35, flags: 0x4}, - 84: {region: 0x8c, script: 0x35, flags: 0x4}, - 85: {region: 0x94, script: 0x35, flags: 0x4}, - 86: {region: 0xc5, script: 0x35, flags: 0x4}, - 87: {region: 0xcf, script: 0x35, flags: 0x4}, - 88: {region: 0xe1, script: 0x35, flags: 0x4}, - 89: {region: 0xe4, script: 0x35, flags: 0x4}, - 90: {region: 0xe6, script: 0x35, flags: 0x4}, - 91: {region: 0x115, script: 0x35, flags: 0x4}, - 92: {region: 0x122, script: 0x35, flags: 0x4}, - 93: {region: 0x12d, script: 0x35, flags: 0x4}, - 94: {region: 0x134, script: 0x35, flags: 0x4}, - 95: {region: 0x13d, script: 0x35, flags: 0x4}, - 96: {region: 0x12d, script: 0x11, flags: 0x2}, - 97: {region: 0x12d, script: 0x30, flags: 0x2}, - 98: {region: 0x12d, script: 0x35, flags: 0x2}, -} - -type likelyLangScript struct { - lang uint16 - script uint8 - flags uint8 -} - -// likelyRegion is a lookup table, indexed by regionID, for the most likely -// languages and scripts given incomplete information. If more entries exist -// for a given regionID, lang and script are the index and size respectively -// of the list in likelyRegionList. -// TODO: exclude containers and user-definable regions from the list. -// Size: 1428 bytes, 357 elements -var likelyRegion = [357]likelyLangScript{ - 33: {lang: 0xd5, script: 0x52, flags: 0x0}, - 34: {lang: 0x39, script: 0x5, flags: 0x0}, - 35: {lang: 0x0, script: 0x2, flags: 0x1}, - 38: {lang: 0x2, script: 0x2, flags: 0x1}, - 39: {lang: 0x4, script: 0x2, flags: 0x1}, - 41: {lang: 0x3b7, script: 0x52, flags: 0x0}, - 42: {lang: 0x0, script: 0x52, flags: 0x0}, - 43: {lang: 0x139, script: 0x52, flags: 0x0}, - 44: {lang: 0x411, script: 0x52, flags: 0x0}, - 45: {lang: 0x109, script: 0x52, flags: 0x0}, - 47: {lang: 0x35e, script: 0x52, flags: 0x0}, - 48: {lang: 0x43a, script: 0x52, flags: 0x0}, - 49: {lang: 0x57, script: 0x52, flags: 0x0}, - 50: {lang: 0x6, script: 0x2, flags: 0x1}, - 52: {lang: 0xa3, script: 0xe, flags: 0x0}, - 53: {lang: 0x35e, script: 0x52, flags: 0x0}, - 54: {lang: 0x159, script: 0x52, flags: 0x0}, - 55: {lang: 0x7d, script: 0x1e, flags: 0x0}, - 56: {lang: 0x39, script: 0x5, flags: 0x0}, - 57: {lang: 0x3d0, script: 0x52, flags: 0x0}, - 58: {lang: 0x159, script: 0x52, flags: 0x0}, - 59: {lang: 0x159, script: 0x52, flags: 0x0}, - 61: {lang: 0x316, script: 0x52, flags: 0x0}, - 62: {lang: 0x139, script: 0x52, flags: 0x0}, - 63: {lang: 0x398, script: 0x52, flags: 0x0}, - 64: {lang: 0x3b7, script: 0x52, flags: 0x0}, - 66: {lang: 0x8, script: 0x2, flags: 0x1}, - 68: {lang: 0x0, script: 0x52, flags: 0x0}, - 70: {lang: 0x70, script: 0x1e, flags: 0x0}, - 72: {lang: 0x508, script: 0x37, flags: 0x2}, - 73: {lang: 0x316, script: 0x5, flags: 0x2}, - 74: {lang: 0x43b, script: 0x52, flags: 0x0}, - 75: {lang: 0x159, script: 0x52, flags: 0x0}, - 76: {lang: 0x159, script: 0x52, flags: 0x0}, - 77: {lang: 0x109, script: 0x52, flags: 0x0}, - 78: {lang: 0x159, script: 0x52, flags: 0x0}, - 80: {lang: 0x139, script: 0x52, flags: 0x0}, - 81: {lang: 0x159, script: 0x52, flags: 0x0}, - 82: {lang: 0xa, script: 0x5, flags: 0x1}, - 83: {lang: 0x139, script: 0x52, flags: 0x0}, - 84: {lang: 0x0, script: 0x52, flags: 0x0}, - 85: {lang: 0x139, script: 0x52, flags: 0x0}, - 88: {lang: 0x139, script: 0x52, flags: 0x0}, - 89: {lang: 0x3b7, script: 0x52, flags: 0x0}, - 90: {lang: 0x398, script: 0x52, flags: 0x0}, - 92: {lang: 0xf, script: 0x2, flags: 0x1}, - 93: {lang: 0xf6, script: 0x52, flags: 0x0}, - 95: {lang: 0x109, script: 0x52, flags: 0x0}, - 97: {lang: 0x1, script: 0x52, flags: 0x0}, - 98: {lang: 0xfd, script: 0x52, flags: 0x0}, - 100: {lang: 0x139, script: 0x52, flags: 0x0}, - 102: {lang: 0x11, script: 0x2, flags: 0x1}, - 103: {lang: 0x139, script: 0x52, flags: 0x0}, - 104: {lang: 0x139, script: 0x52, flags: 0x0}, - 105: {lang: 0x13b, script: 0x52, flags: 0x0}, - 106: {lang: 0x39, script: 0x5, flags: 0x0}, - 107: {lang: 0x39, script: 0x5, flags: 0x0}, - 108: {lang: 0x465, script: 0x27, flags: 0x0}, - 109: {lang: 0x139, script: 0x52, flags: 0x0}, - 110: {lang: 0x13, script: 0x2, flags: 0x1}, - 112: {lang: 0x109, script: 0x52, flags: 0x0}, - 113: {lang: 0x14c, script: 0x52, flags: 0x0}, - 114: {lang: 0x1b9, script: 0x20, flags: 0x2}, - 117: {lang: 0x153, script: 0x52, flags: 0x0}, - 119: {lang: 0x159, script: 0x52, flags: 0x0}, - 121: {lang: 0x159, script: 0x52, flags: 0x0}, - 122: {lang: 0x15, script: 0x2, flags: 0x1}, - 124: {lang: 0x17, script: 0x3, flags: 0x1}, - 125: {lang: 0x159, script: 0x52, flags: 0x0}, - 127: {lang: 0x20, script: 0x52, flags: 0x0}, - 129: {lang: 0x23d, script: 0x52, flags: 0x0}, - 131: {lang: 0x159, script: 0x52, flags: 0x0}, - 132: {lang: 0x159, script: 0x52, flags: 0x0}, - 133: {lang: 0x139, script: 0x52, flags: 0x0}, - 134: {lang: 0x1a, script: 0x2, flags: 0x1}, - 135: {lang: 0x0, script: 0x52, flags: 0x0}, - 136: {lang: 0x139, script: 0x52, flags: 0x0}, - 138: {lang: 0x3b7, script: 0x52, flags: 0x0}, - 140: {lang: 0x51f, script: 0x35, flags: 0x0}, - 141: {lang: 0x0, script: 0x52, flags: 0x0}, - 142: {lang: 0x139, script: 0x52, flags: 0x0}, - 143: {lang: 0x1ca, script: 0x52, flags: 0x0}, - 144: {lang: 0x1cd, script: 0x52, flags: 0x0}, - 145: {lang: 0x1ce, script: 0x52, flags: 0x0}, - 147: {lang: 0x139, script: 0x52, flags: 0x0}, - 148: {lang: 0x1c, script: 0x2, flags: 0x1}, - 150: {lang: 0x1b5, script: 0x37, flags: 0x0}, - 152: {lang: 0x1e, script: 0x3, flags: 0x1}, - 154: {lang: 0x39, script: 0x5, flags: 0x0}, - 155: {lang: 0x21, script: 0x2, flags: 0x1}, - 156: {lang: 0x1f0, script: 0x52, flags: 0x0}, - 157: {lang: 0x1f1, script: 0x52, flags: 0x0}, - 160: {lang: 0x39, script: 0x5, flags: 0x0}, - 161: {lang: 0x1f8, script: 0x41, flags: 0x0}, - 163: {lang: 0x43b, script: 0x52, flags: 0x0}, - 164: {lang: 0x281, script: 0x1e, flags: 0x0}, - 165: {lang: 0x23, script: 0x3, flags: 0x1}, - 167: {lang: 0x26, script: 0x2, flags: 0x1}, - 169: {lang: 0x24b, script: 0x4b, flags: 0x0}, - 170: {lang: 0x24b, script: 0x4b, flags: 0x0}, - 171: {lang: 0x39, script: 0x5, flags: 0x0}, - 173: {lang: 0x3d9, script: 0x1e, flags: 0x0}, - 174: {lang: 0x28, script: 0x2, flags: 0x1}, - 175: {lang: 0x39, script: 0x5, flags: 0x0}, - 177: {lang: 0x109, script: 0x52, flags: 0x0}, - 178: {lang: 0x402, script: 0xc1, flags: 0x0}, - 180: {lang: 0x431, script: 0x52, flags: 0x0}, - 181: {lang: 0x2b7, script: 0x52, flags: 0x0}, - 182: {lang: 0x159, script: 0x52, flags: 0x0}, - 183: {lang: 0x2be, script: 0x52, flags: 0x0}, - 184: {lang: 0x39, script: 0x5, flags: 0x0}, - 185: {lang: 0x2a, script: 0x2, flags: 0x1}, - 186: {lang: 0x159, script: 0x52, flags: 0x0}, - 187: {lang: 0x2c, script: 0x2, flags: 0x1}, - 188: {lang: 0x428, script: 0x52, flags: 0x0}, - 189: {lang: 0x159, script: 0x52, flags: 0x0}, - 190: {lang: 0x2e8, script: 0x52, flags: 0x0}, - 193: {lang: 0x2e, script: 0x2, flags: 0x1}, - 194: {lang: 0x9e, script: 0x52, flags: 0x0}, - 195: {lang: 0x30, script: 0x2, flags: 0x1}, - 196: {lang: 0x32, script: 0x2, flags: 0x1}, - 197: {lang: 0x34, script: 0x2, flags: 0x1}, - 199: {lang: 0x159, script: 0x52, flags: 0x0}, - 200: {lang: 0x36, script: 0x2, flags: 0x1}, - 202: {lang: 0x317, script: 0x52, flags: 0x0}, - 203: {lang: 0x38, script: 0x3, flags: 0x1}, - 204: {lang: 0x124, script: 0xd4, flags: 0x0}, - 206: {lang: 0x139, script: 0x52, flags: 0x0}, - 207: {lang: 0x316, script: 0x52, flags: 0x0}, - 208: {lang: 0x3b7, script: 0x52, flags: 0x0}, - 209: {lang: 0x15, script: 0x52, flags: 0x0}, - 210: {lang: 0x159, script: 0x52, flags: 0x0}, - 211: {lang: 0x1ad, script: 0x52, flags: 0x0}, - 213: {lang: 0x1ad, script: 0x5, flags: 0x2}, - 215: {lang: 0x139, script: 0x52, flags: 0x0}, - 216: {lang: 0x35e, script: 0x52, flags: 0x0}, - 217: {lang: 0x33e, script: 0x52, flags: 0x0}, - 218: {lang: 0x348, script: 0x20, flags: 0x0}, - 224: {lang: 0x39, script: 0x5, flags: 0x0}, - 225: {lang: 0x139, script: 0x52, flags: 0x0}, - 227: {lang: 0x139, script: 0x52, flags: 0x0}, - 228: {lang: 0x159, script: 0x52, flags: 0x0}, - 229: {lang: 0x47c, script: 0x52, flags: 0x0}, - 230: {lang: 0x14e, script: 0x52, flags: 0x0}, - 231: {lang: 0x3b, script: 0x3, flags: 0x1}, - 232: {lang: 0x3e, script: 0x2, flags: 0x1}, - 233: {lang: 0x159, script: 0x52, flags: 0x0}, - 235: {lang: 0x139, script: 0x52, flags: 0x0}, - 236: {lang: 0x39, script: 0x5, flags: 0x0}, - 237: {lang: 0x3b7, script: 0x52, flags: 0x0}, - 239: {lang: 0x399, script: 0x52, flags: 0x0}, - 240: {lang: 0x18e, script: 0x52, flags: 0x0}, - 242: {lang: 0x39, script: 0x5, flags: 0x0}, - 257: {lang: 0x159, script: 0x52, flags: 0x0}, - 259: {lang: 0x40, script: 0x2, flags: 0x1}, - 260: {lang: 0x428, script: 0x1e, flags: 0x0}, - 261: {lang: 0x42, script: 0x2, flags: 0x1}, - 262: {lang: 0x3dc, script: 0x52, flags: 0x0}, - 263: {lang: 0x39, script: 0x5, flags: 0x0}, - 265: {lang: 0x159, script: 0x52, flags: 0x0}, - 266: {lang: 0x39, script: 0x5, flags: 0x0}, - 267: {lang: 0x44, script: 0x2, flags: 0x1}, - 270: {lang: 0x40c, script: 0x52, flags: 0x0}, - 271: {lang: 0x33e, script: 0x52, flags: 0x0}, - 272: {lang: 0x46, script: 0x2, flags: 0x1}, - 274: {lang: 0x1f1, script: 0x52, flags: 0x0}, - 275: {lang: 0x159, script: 0x52, flags: 0x0}, - 276: {lang: 0x41f, script: 0x52, flags: 0x0}, - 277: {lang: 0x35e, script: 0x52, flags: 0x0}, - 279: {lang: 0x3b7, script: 0x52, flags: 0x0}, - 281: {lang: 0x139, script: 0x52, flags: 0x0}, - 283: {lang: 0x48, script: 0x2, flags: 0x1}, - 287: {lang: 0x159, script: 0x52, flags: 0x0}, - 288: {lang: 0x159, script: 0x52, flags: 0x0}, - 289: {lang: 0x4a, script: 0x2, flags: 0x1}, - 290: {lang: 0x4c, script: 0x3, flags: 0x1}, - 291: {lang: 0x4f, script: 0x2, flags: 0x1}, - 292: {lang: 0x46d, script: 0x52, flags: 0x0}, - 293: {lang: 0x3b7, script: 0x52, flags: 0x0}, - 294: {lang: 0x46c, script: 0x52, flags: 0x0}, - 295: {lang: 0x51, script: 0x2, flags: 0x1}, - 296: {lang: 0x478, script: 0x52, flags: 0x0}, - 298: {lang: 0x53, script: 0x4, flags: 0x1}, - 300: {lang: 0x496, script: 0x52, flags: 0x0}, - 301: {lang: 0x57, script: 0x2, flags: 0x1}, - 302: {lang: 0x43b, script: 0x52, flags: 0x0}, - 303: {lang: 0x59, script: 0x3, flags: 0x1}, - 304: {lang: 0x43b, script: 0x52, flags: 0x0}, - 308: {lang: 0x508, script: 0x37, flags: 0x2}, - 309: {lang: 0x139, script: 0x52, flags: 0x0}, - 310: {lang: 0x4b2, script: 0x52, flags: 0x0}, - 311: {lang: 0x1f1, script: 0x52, flags: 0x0}, - 314: {lang: 0x139, script: 0x52, flags: 0x0}, - 317: {lang: 0x4b9, script: 0x52, flags: 0x0}, - 318: {lang: 0x89, script: 0x52, flags: 0x0}, - 319: {lang: 0x159, script: 0x52, flags: 0x0}, - 321: {lang: 0x411, script: 0x52, flags: 0x0}, - 332: {lang: 0x5c, script: 0x2, flags: 0x1}, - 349: {lang: 0x39, script: 0x5, flags: 0x0}, - 350: {lang: 0x5e, script: 0x2, flags: 0x1}, - 355: {lang: 0x419, script: 0x52, flags: 0x0}, -} - -// likelyRegionList holds lists info associated with likelyRegion. -// Size: 384 bytes, 96 elements -var likelyRegionList = [96]likelyLangScript{ - 0: {lang: 0x143, script: 0x5, flags: 0x0}, - 1: {lang: 0x46c, script: 0x52, flags: 0x0}, - 2: {lang: 0x427, script: 0x52, flags: 0x0}, - 3: {lang: 0x2f6, script: 0x1e, flags: 0x0}, - 4: {lang: 0x1d0, script: 0x8, flags: 0x0}, - 5: {lang: 0x26b, script: 0x52, flags: 0x0}, - 6: {lang: 0xb5, script: 0x52, flags: 0x0}, - 7: {lang: 0x428, script: 0x1e, flags: 0x0}, - 8: {lang: 0x129, script: 0xd6, flags: 0x0}, - 9: {lang: 0x348, script: 0x20, flags: 0x0}, - 10: {lang: 0x51f, script: 0x34, flags: 0x0}, - 11: {lang: 0x4a2, script: 0x5, flags: 0x0}, - 12: {lang: 0x515, script: 0x35, flags: 0x0}, - 13: {lang: 0x519, script: 0x52, flags: 0x0}, - 14: {lang: 0x291, script: 0xd5, flags: 0x0}, - 15: {lang: 0x131, script: 0x2d, flags: 0x0}, - 16: {lang: 0x480, script: 0x52, flags: 0x0}, - 17: {lang: 0x39, script: 0x5, flags: 0x0}, - 18: {lang: 0x159, script: 0x52, flags: 0x0}, - 19: {lang: 0x26, script: 0x27, flags: 0x0}, - 20: {lang: 0x134, script: 0x52, flags: 0x0}, - 21: {lang: 0x261, script: 0x5, flags: 0x2}, - 22: {lang: 0x508, script: 0x37, flags: 0x2}, - 23: {lang: 0x208, script: 0x29, flags: 0x0}, - 24: {lang: 0x5, script: 0x1e, flags: 0x0}, - 25: {lang: 0x26b, script: 0x52, flags: 0x0}, - 26: {lang: 0x131, script: 0x2d, flags: 0x0}, - 27: {lang: 0x2f6, script: 0x1e, flags: 0x0}, - 28: {lang: 0x1da, script: 0x52, flags: 0x0}, - 29: {lang: 0x316, script: 0x5, flags: 0x0}, - 30: {lang: 0x1b7, script: 0x20, flags: 0x0}, - 31: {lang: 0x4aa, script: 0x5, flags: 0x0}, - 32: {lang: 0x22e, script: 0x6b, flags: 0x0}, - 33: {lang: 0x143, script: 0x5, flags: 0x0}, - 34: {lang: 0x46c, script: 0x52, flags: 0x0}, - 35: {lang: 0x242, script: 0x46, flags: 0x0}, - 36: {lang: 0xe4, script: 0x5, flags: 0x0}, - 37: {lang: 0x21e, script: 0xd5, flags: 0x0}, - 38: {lang: 0x39, script: 0x5, flags: 0x0}, - 39: {lang: 0x159, script: 0x52, flags: 0x0}, - 40: {lang: 0x2af, script: 0x4f, flags: 0x0}, - 41: {lang: 0x21e, script: 0xd5, flags: 0x0}, - 42: {lang: 0x39, script: 0x5, flags: 0x0}, - 43: {lang: 0x159, script: 0x52, flags: 0x0}, - 44: {lang: 0x3d3, script: 0x52, flags: 0x0}, - 45: {lang: 0x4a4, script: 0x1e, flags: 0x0}, - 46: {lang: 0x2f6, script: 0x1e, flags: 0x0}, - 47: {lang: 0x427, script: 0x52, flags: 0x0}, - 48: {lang: 0x328, script: 0x6b, flags: 0x0}, - 49: {lang: 0x20b, script: 0x52, flags: 0x0}, - 50: {lang: 0x302, script: 0x1e, flags: 0x0}, - 51: {lang: 0x23a, script: 0x5, flags: 0x0}, - 52: {lang: 0x51f, script: 0x35, flags: 0x0}, - 53: {lang: 0x3b7, script: 0x52, flags: 0x0}, - 54: {lang: 0x39, script: 0x5, flags: 0x0}, - 55: {lang: 0x159, script: 0x52, flags: 0x0}, - 56: {lang: 0x2e4, script: 0x52, flags: 0x0}, - 57: {lang: 0x4aa, script: 0x5, flags: 0x0}, - 58: {lang: 0x87, script: 0x20, flags: 0x0}, - 59: {lang: 0x4aa, script: 0x5, flags: 0x0}, - 60: {lang: 0x4aa, script: 0x5, flags: 0x0}, - 61: {lang: 0xbc, script: 0x20, flags: 0x0}, - 62: {lang: 0x3aa, script: 0x52, flags: 0x0}, - 63: {lang: 0x70, script: 0x1e, flags: 0x0}, - 64: {lang: 0x3d3, script: 0x52, flags: 0x0}, - 65: {lang: 0x7d, script: 0x1e, flags: 0x0}, - 66: {lang: 0x3d9, script: 0x1e, flags: 0x0}, - 67: {lang: 0x25e, script: 0x52, flags: 0x0}, - 68: {lang: 0x43a, script: 0x52, flags: 0x0}, - 69: {lang: 0x508, script: 0x37, flags: 0x0}, - 70: {lang: 0x408, script: 0x52, flags: 0x0}, - 71: {lang: 0x4a4, script: 0x1e, flags: 0x0}, - 72: {lang: 0x39, script: 0x5, flags: 0x0}, - 73: {lang: 0x159, script: 0x52, flags: 0x0}, - 74: {lang: 0x159, script: 0x52, flags: 0x0}, - 75: {lang: 0x34, script: 0x5, flags: 0x0}, - 76: {lang: 0x461, script: 0xd5, flags: 0x0}, - 77: {lang: 0x2e3, script: 0x5, flags: 0x0}, - 78: {lang: 0x306, script: 0x6b, flags: 0x0}, - 79: {lang: 0x45d, script: 0x1e, flags: 0x0}, - 80: {lang: 0x143, script: 0x5, flags: 0x0}, - 81: {lang: 0x39, script: 0x5, flags: 0x0}, - 82: {lang: 0x159, script: 0x52, flags: 0x0}, - 83: {lang: 0x480, script: 0x52, flags: 0x0}, - 84: {lang: 0x57, script: 0x5, flags: 0x0}, - 85: {lang: 0x211, script: 0x1e, flags: 0x0}, - 86: {lang: 0x80, script: 0x2d, flags: 0x0}, - 87: {lang: 0x51f, script: 0x35, flags: 0x0}, - 88: {lang: 0x482, script: 0x52, flags: 0x0}, - 89: {lang: 0x4a4, script: 0x1e, flags: 0x0}, - 90: {lang: 0x508, script: 0x37, flags: 0x0}, - 91: {lang: 0x3aa, script: 0x52, flags: 0x0}, - 92: {lang: 0x427, script: 0x52, flags: 0x0}, - 93: {lang: 0x428, script: 0x1e, flags: 0x0}, - 94: {lang: 0x159, script: 0x52, flags: 0x0}, - 95: {lang: 0x43c, script: 0x5, flags: 0x0}, -} - -type likelyTag struct { - lang uint16 - region uint16 - script uint8 -} - -// Size: 192 bytes, 32 elements -var likelyRegionGroup = [32]likelyTag{ - 1: {lang: 0x134, region: 0xd5, script: 0x52}, - 2: {lang: 0x134, region: 0x134, script: 0x52}, - 3: {lang: 0x3b7, region: 0x40, script: 0x52}, - 4: {lang: 0x134, region: 0x2e, script: 0x52}, - 5: {lang: 0x134, region: 0xd5, script: 0x52}, - 6: {lang: 0x139, region: 0xce, script: 0x52}, - 7: {lang: 0x43b, region: 0x12e, script: 0x52}, - 8: {lang: 0x39, region: 0x6a, script: 0x5}, - 9: {lang: 0x43b, region: 0x4a, script: 0x52}, - 10: {lang: 0x134, region: 0x160, script: 0x52}, - 11: {lang: 0x134, region: 0x134, script: 0x52}, - 12: {lang: 0x134, region: 0x134, script: 0x52}, - 13: {lang: 0x139, region: 0x58, script: 0x52}, - 14: {lang: 0x51f, region: 0x52, script: 0x34}, - 15: {lang: 0x1b7, region: 0x98, script: 0x20}, - 16: {lang: 0x1da, region: 0x94, script: 0x52}, - 17: {lang: 0x1f1, region: 0x9d, script: 0x52}, - 18: {lang: 0x134, region: 0x2e, script: 0x52}, - 19: {lang: 0x134, region: 0xe5, script: 0x52}, - 20: {lang: 0x134, region: 0x89, script: 0x52}, - 21: {lang: 0x411, region: 0x141, script: 0x52}, - 22: {lang: 0x51f, region: 0x52, script: 0x34}, - 23: {lang: 0x4b2, region: 0x136, script: 0x52}, - 24: {lang: 0x39, region: 0x107, script: 0x5}, - 25: {lang: 0x3d9, region: 0x105, script: 0x1e}, - 26: {lang: 0x3d9, region: 0x105, script: 0x1e}, - 27: {lang: 0x134, region: 0x7a, script: 0x52}, - 28: {lang: 0x109, region: 0x5f, script: 0x52}, - 29: {lang: 0x139, region: 0x1e, script: 0x52}, - 30: {lang: 0x134, region: 0x99, script: 0x52}, - 31: {lang: 0x134, region: 0x7a, script: 0x52}, -} +var paradigmLocales = [][3]uint16{ // 3 elements + 0: [3]uint16{0x139, 0x0, 0x7b}, + 1: [3]uint16{0x13e, 0x0, 0x1f}, + 2: [3]uint16{0x3c0, 0x41, 0xee}, +} // Size: 42 bytes type mutualIntelligibility struct { - want uint16 - have uint16 - conf uint8 - oneway bool + want uint16 + have uint16 + distance uint8 + oneway bool } - type scriptIntelligibility struct { - lang uint16 - want uint8 - have uint8 - conf uint8 + wantLang uint16 + haveLang uint16 + wantScript uint8 + haveScript uint8 + distance uint8 +} +type regionIntelligibility struct { + lang uint16 + script uint8 + group uint8 + distance uint8 } // matchLang holds pairs of langIDs of base languages that are typically // mutually intelligible. Each pair is associated with a confidence and // whether the intelligibility goes one or both ways. -// Size: 708 bytes, 118 elements -var matchLang = [118]mutualIntelligibility{ - 0: {want: 0x366, have: 0x33e, conf: 0x2, oneway: false}, - 1: {want: 0x26b, have: 0xe7, conf: 0x2, oneway: false}, - 2: {want: 0x1ca, have: 0xb5, conf: 0x2, oneway: false}, - 3: {want: 0x3fd, have: 0xb5, conf: 0x2, oneway: false}, - 4: {want: 0x428, have: 0xb5, conf: 0x2, oneway: false}, - 5: {want: 0x3fd, have: 0x1ca, conf: 0x2, oneway: false}, - 6: {want: 0x428, have: 0x1ca, conf: 0x2, oneway: false}, - 7: {want: 0x3fd, have: 0x428, conf: 0x2, oneway: false}, - 8: {want: 0x430, have: 0x1, conf: 0x2, oneway: false}, - 9: {want: 0x19c, have: 0x109, conf: 0x2, oneway: true}, - 10: {want: 0x28c, have: 0x109, conf: 0x2, oneway: true}, - 11: {want: 0xfd, have: 0x366, conf: 0x2, oneway: false}, - 12: {want: 0xfd, have: 0x33e, conf: 0x2, oneway: false}, - 13: {want: 0xe7, have: 0x26b, conf: 0x2, oneway: false}, - 14: {want: 0x5, have: 0x3d9, conf: 0x2, oneway: true}, - 15: {want: 0xc, have: 0x134, conf: 0x2, oneway: true}, - 16: {want: 0x15, have: 0x35e, conf: 0x2, oneway: true}, - 17: {want: 0x20, have: 0x134, conf: 0x2, oneway: true}, - 18: {want: 0x55, have: 0x139, conf: 0x2, oneway: true}, - 19: {want: 0x57, have: 0x3d9, conf: 0x2, oneway: true}, - 20: {want: 0x70, have: 0x3d9, conf: 0x2, oneway: true}, - 21: {want: 0x74, have: 0x134, conf: 0x2, oneway: true}, - 22: {want: 0x81, have: 0x1b7, conf: 0x2, oneway: true}, - 23: {want: 0xa3, have: 0x134, conf: 0x2, oneway: true}, - 24: {want: 0xb0, have: 0x159, conf: 0x2, oneway: true}, - 25: {want: 0xdb, have: 0x14e, conf: 0x2, oneway: true}, - 26: {want: 0xe3, have: 0x134, conf: 0x2, oneway: true}, - 27: {want: 0xe7, have: 0x39, conf: 0x2, oneway: true}, - 28: {want: 0xed, have: 0x159, conf: 0x2, oneway: true}, - 29: {want: 0xf5, have: 0x159, conf: 0x2, oneway: true}, - 30: {want: 0xfc, have: 0x134, conf: 0x2, oneway: true}, - 31: {want: 0x12c, have: 0x134, conf: 0x2, oneway: true}, - 32: {want: 0x137, have: 0x134, conf: 0x2, oneway: true}, - 33: {want: 0x13b, have: 0x14c, conf: 0x2, oneway: true}, - 34: {want: 0x140, have: 0x139, conf: 0x2, oneway: true}, - 35: {want: 0x153, have: 0xfd, conf: 0x2, oneway: true}, - 36: {want: 0x168, have: 0x35e, conf: 0x2, oneway: true}, - 37: {want: 0x169, have: 0x134, conf: 0x2, oneway: true}, - 38: {want: 0x16a, have: 0x134, conf: 0x2, oneway: true}, - 39: {want: 0x178, have: 0x134, conf: 0x2, oneway: true}, - 40: {want: 0x18a, have: 0x139, conf: 0x2, oneway: true}, - 41: {want: 0x18e, have: 0x139, conf: 0x2, oneway: true}, - 42: {want: 0x19d, have: 0x1b7, conf: 0x2, oneway: true}, - 43: {want: 0x1ad, have: 0x134, conf: 0x2, oneway: true}, - 44: {want: 0x1b1, have: 0x134, conf: 0x2, oneway: true}, - 45: {want: 0x1cd, have: 0x159, conf: 0x2, oneway: true}, - 46: {want: 0x1d0, have: 0x3d9, conf: 0x2, oneway: true}, - 47: {want: 0x1d2, have: 0x134, conf: 0x2, oneway: true}, - 48: {want: 0x1df, have: 0x134, conf: 0x2, oneway: true}, - 49: {want: 0x1f0, have: 0x134, conf: 0x2, oneway: true}, - 50: {want: 0x206, have: 0x1da, conf: 0x2, oneway: true}, - 51: {want: 0x208, have: 0x134, conf: 0x2, oneway: true}, - 52: {want: 0x225, have: 0x159, conf: 0x2, oneway: true}, - 53: {want: 0x23a, have: 0x3d9, conf: 0x2, oneway: true}, - 54: {want: 0x242, have: 0x134, conf: 0x2, oneway: true}, - 55: {want: 0x249, have: 0x134, conf: 0x2, oneway: true}, - 56: {want: 0x25c, have: 0x134, conf: 0x2, oneway: true}, - 57: {want: 0x26b, have: 0x480, conf: 0x2, oneway: true}, - 58: {want: 0x281, have: 0x3d9, conf: 0x2, oneway: true}, - 59: {want: 0x285, have: 0x1f1, conf: 0x2, oneway: true}, - 60: {want: 0x29a, have: 0x134, conf: 0x2, oneway: true}, - 61: {want: 0x2ac, have: 0x159, conf: 0x2, oneway: true}, - 62: {want: 0x2af, have: 0x134, conf: 0x2, oneway: true}, - 63: {want: 0x2b5, have: 0x134, conf: 0x2, oneway: true}, - 64: {want: 0x2ba, have: 0x159, conf: 0x2, oneway: true}, - 65: {want: 0x2e4, have: 0x134, conf: 0x2, oneway: true}, - 66: {want: 0x2e8, have: 0x159, conf: 0x2, oneway: true}, - 67: {want: 0x2f1, have: 0x134, conf: 0x2, oneway: true}, - 68: {want: 0x2f6, have: 0x7d, conf: 0x2, oneway: true}, - 69: {want: 0x2fb, have: 0x134, conf: 0x2, oneway: true}, - 70: {want: 0x302, have: 0x3d9, conf: 0x2, oneway: true}, - 71: {want: 0x312, have: 0x1b7, conf: 0x2, oneway: true}, - 72: {want: 0x316, have: 0x1da, conf: 0x2, oneway: true}, - 73: {want: 0x317, have: 0x134, conf: 0x2, oneway: true}, - 74: {want: 0x328, have: 0x134, conf: 0x2, oneway: true}, - 75: {want: 0x348, have: 0x134, conf: 0x2, oneway: true}, - 76: {want: 0x361, have: 0x33e, conf: 0x2, oneway: false}, - 77: {want: 0x361, have: 0x366, conf: 0x2, oneway: true}, - 78: {want: 0x371, have: 0x134, conf: 0x2, oneway: true}, - 79: {want: 0x37e, have: 0x134, conf: 0x2, oneway: true}, - 80: {want: 0x380, have: 0x134, conf: 0x2, oneway: true}, - 81: {want: 0x382, have: 0x159, conf: 0x2, oneway: true}, - 82: {want: 0x387, have: 0x134, conf: 0x2, oneway: true}, - 83: {want: 0x38c, have: 0x134, conf: 0x2, oneway: true}, - 84: {want: 0x394, have: 0x134, conf: 0x2, oneway: true}, - 85: {want: 0x39c, have: 0x134, conf: 0x2, oneway: true}, - 86: {want: 0x3b5, have: 0x134, conf: 0x2, oneway: true}, - 87: {want: 0x3bb, have: 0x139, conf: 0x2, oneway: true}, - 88: {want: 0x3cb, have: 0x109, conf: 0x2, oneway: true}, - 89: {want: 0x3d0, have: 0x134, conf: 0x2, oneway: true}, - 90: {want: 0x3dc, have: 0x159, conf: 0x2, oneway: true}, - 91: {want: 0x3e0, have: 0x1b7, conf: 0x2, oneway: true}, - 92: {want: 0x3f0, have: 0x134, conf: 0x2, oneway: true}, - 93: {want: 0x402, have: 0x134, conf: 0x2, oneway: true}, - 94: {want: 0x419, have: 0x134, conf: 0x2, oneway: true}, - 95: {want: 0x41f, have: 0x134, conf: 0x2, oneway: true}, - 96: {want: 0x427, have: 0x134, conf: 0x2, oneway: true}, - 97: {want: 0x431, have: 0x134, conf: 0x2, oneway: true}, - 98: {want: 0x434, have: 0x1da, conf: 0x2, oneway: true}, - 99: {want: 0x43b, have: 0x134, conf: 0x2, oneway: true}, - 100: {want: 0x446, have: 0x134, conf: 0x2, oneway: true}, - 101: {want: 0x457, have: 0x134, conf: 0x2, oneway: true}, - 102: {want: 0x45d, have: 0x3d9, conf: 0x2, oneway: true}, - 103: {want: 0x465, have: 0x134, conf: 0x2, oneway: true}, - 104: {want: 0x46c, have: 0x3d9, conf: 0x2, oneway: true}, - 105: {want: 0x3878, have: 0x134, conf: 0x2, oneway: true}, - 106: {want: 0x476, have: 0x134, conf: 0x2, oneway: true}, - 107: {want: 0x478, have: 0x134, conf: 0x2, oneway: true}, - 108: {want: 0x48a, have: 0x3d9, conf: 0x2, oneway: true}, - 109: {want: 0x493, have: 0x134, conf: 0x2, oneway: true}, - 110: {want: 0x4a2, have: 0x51f, conf: 0x2, oneway: true}, - 111: {want: 0x4aa, have: 0x134, conf: 0x2, oneway: true}, - 112: {want: 0x4b2, have: 0x3d9, conf: 0x2, oneway: true}, - 113: {want: 0x4db, have: 0x159, conf: 0x2, oneway: true}, - 114: {want: 0x4e8, have: 0x134, conf: 0x2, oneway: true}, - 115: {want: 0x508, have: 0x134, conf: 0x2, oneway: true}, - 116: {want: 0x50e, have: 0x134, conf: 0x2, oneway: true}, - 117: {want: 0x524, have: 0x134, conf: 0x2, oneway: true}, -} +var matchLang = []mutualIntelligibility{ // 113 elements + 0: {want: 0x1d1, have: 0xb7, distance: 0x4, oneway: false}, + 1: {want: 0x407, have: 0xb7, distance: 0x4, oneway: false}, + 2: {want: 0x407, have: 0x1d1, distance: 0x4, oneway: false}, + 3: {want: 0x407, have: 0x432, distance: 0x4, oneway: false}, + 4: {want: 0x43a, have: 0x1, distance: 0x4, oneway: false}, + 5: {want: 0x1a3, have: 0x10d, distance: 0x4, oneway: true}, + 6: {want: 0x295, have: 0x10d, distance: 0x4, oneway: true}, + 7: {want: 0x101, have: 0x36f, distance: 0x8, oneway: false}, + 8: {want: 0x101, have: 0x347, distance: 0x8, oneway: false}, + 9: {want: 0x5, have: 0x3e2, distance: 0xa, oneway: true}, + 10: {want: 0xd, have: 0x139, distance: 0xa, oneway: true}, + 11: {want: 0x16, have: 0x367, distance: 0xa, oneway: true}, + 12: {want: 0x21, have: 0x139, distance: 0xa, oneway: true}, + 13: {want: 0x56, have: 0x13e, distance: 0xa, oneway: true}, + 14: {want: 0x58, have: 0x3e2, distance: 0xa, oneway: true}, + 15: {want: 0x71, have: 0x3e2, distance: 0xa, oneway: true}, + 16: {want: 0x75, have: 0x139, distance: 0xa, oneway: true}, + 17: {want: 0x82, have: 0x1be, distance: 0xa, oneway: true}, + 18: {want: 0xa5, have: 0x139, distance: 0xa, oneway: true}, + 19: {want: 0xb2, have: 0x15e, distance: 0xa, oneway: true}, + 20: {want: 0xdd, have: 0x153, distance: 0xa, oneway: true}, + 21: {want: 0xe5, have: 0x139, distance: 0xa, oneway: true}, + 22: {want: 0xe9, have: 0x3a, distance: 0xa, oneway: true}, + 23: {want: 0xf0, have: 0x15e, distance: 0xa, oneway: true}, + 24: {want: 0xf9, have: 0x15e, distance: 0xa, oneway: true}, + 25: {want: 0x100, have: 0x139, distance: 0xa, oneway: true}, + 26: {want: 0x130, have: 0x139, distance: 0xa, oneway: true}, + 27: {want: 0x13c, have: 0x139, distance: 0xa, oneway: true}, + 28: {want: 0x140, have: 0x151, distance: 0xa, oneway: true}, + 29: {want: 0x145, have: 0x13e, distance: 0xa, oneway: true}, + 30: {want: 0x158, have: 0x101, distance: 0xa, oneway: true}, + 31: {want: 0x16d, have: 0x367, distance: 0xa, oneway: true}, + 32: {want: 0x16e, have: 0x139, distance: 0xa, oneway: true}, + 33: {want: 0x16f, have: 0x139, distance: 0xa, oneway: true}, + 34: {want: 0x17e, have: 0x139, distance: 0xa, oneway: true}, + 35: {want: 0x190, have: 0x13e, distance: 0xa, oneway: true}, + 36: {want: 0x194, have: 0x13e, distance: 0xa, oneway: true}, + 37: {want: 0x1a4, have: 0x1be, distance: 0xa, oneway: true}, + 38: {want: 0x1b4, have: 0x139, distance: 0xa, oneway: true}, + 39: {want: 0x1b8, have: 0x139, distance: 0xa, oneway: true}, + 40: {want: 0x1d4, have: 0x15e, distance: 0xa, oneway: true}, + 41: {want: 0x1d7, have: 0x3e2, distance: 0xa, oneway: true}, + 42: {want: 0x1d9, have: 0x139, distance: 0xa, oneway: true}, + 43: {want: 0x1e7, have: 0x139, distance: 0xa, oneway: true}, + 44: {want: 0x1f8, have: 0x139, distance: 0xa, oneway: true}, + 45: {want: 0x20e, have: 0x1e1, distance: 0xa, oneway: true}, + 46: {want: 0x210, have: 0x139, distance: 0xa, oneway: true}, + 47: {want: 0x22d, have: 0x15e, distance: 0xa, oneway: true}, + 48: {want: 0x242, have: 0x3e2, distance: 0xa, oneway: true}, + 49: {want: 0x24a, have: 0x139, distance: 0xa, oneway: true}, + 50: {want: 0x251, have: 0x139, distance: 0xa, oneway: true}, + 51: {want: 0x265, have: 0x139, distance: 0xa, oneway: true}, + 52: {want: 0x274, have: 0x48a, distance: 0xa, oneway: true}, + 53: {want: 0x28a, have: 0x3e2, distance: 0xa, oneway: true}, + 54: {want: 0x28e, have: 0x1f9, distance: 0xa, oneway: true}, + 55: {want: 0x2a3, have: 0x139, distance: 0xa, oneway: true}, + 56: {want: 0x2b5, have: 0x15e, distance: 0xa, oneway: true}, + 57: {want: 0x2b8, have: 0x139, distance: 0xa, oneway: true}, + 58: {want: 0x2be, have: 0x139, distance: 0xa, oneway: true}, + 59: {want: 0x2c3, have: 0x15e, distance: 0xa, oneway: true}, + 60: {want: 0x2ed, have: 0x139, distance: 0xa, oneway: true}, + 61: {want: 0x2f1, have: 0x15e, distance: 0xa, oneway: true}, + 62: {want: 0x2fa, have: 0x139, distance: 0xa, oneway: true}, + 63: {want: 0x2ff, have: 0x7e, distance: 0xa, oneway: true}, + 64: {want: 0x304, have: 0x139, distance: 0xa, oneway: true}, + 65: {want: 0x30b, have: 0x3e2, distance: 0xa, oneway: true}, + 66: {want: 0x31b, have: 0x1be, distance: 0xa, oneway: true}, + 67: {want: 0x31f, have: 0x1e1, distance: 0xa, oneway: true}, + 68: {want: 0x320, have: 0x139, distance: 0xa, oneway: true}, + 69: {want: 0x331, have: 0x139, distance: 0xa, oneway: true}, + 70: {want: 0x351, have: 0x139, distance: 0xa, oneway: true}, + 71: {want: 0x36a, have: 0x347, distance: 0xa, oneway: false}, + 72: {want: 0x36a, have: 0x36f, distance: 0xa, oneway: true}, + 73: {want: 0x37a, have: 0x139, distance: 0xa, oneway: true}, + 74: {want: 0x387, have: 0x139, distance: 0xa, oneway: true}, + 75: {want: 0x389, have: 0x139, distance: 0xa, oneway: true}, + 76: {want: 0x38b, have: 0x15e, distance: 0xa, oneway: true}, + 77: {want: 0x390, have: 0x139, distance: 0xa, oneway: true}, + 78: {want: 0x395, have: 0x139, distance: 0xa, oneway: true}, + 79: {want: 0x39d, have: 0x139, distance: 0xa, oneway: true}, + 80: {want: 0x3a5, have: 0x139, distance: 0xa, oneway: true}, + 81: {want: 0x3be, have: 0x139, distance: 0xa, oneway: true}, + 82: {want: 0x3c4, have: 0x13e, distance: 0xa, oneway: true}, + 83: {want: 0x3d4, have: 0x10d, distance: 0xa, oneway: true}, + 84: {want: 0x3d9, have: 0x139, distance: 0xa, oneway: true}, + 85: {want: 0x3e5, have: 0x15e, distance: 0xa, oneway: true}, + 86: {want: 0x3e9, have: 0x1be, distance: 0xa, oneway: true}, + 87: {want: 0x3fa, have: 0x139, distance: 0xa, oneway: true}, + 88: {want: 0x40c, have: 0x139, distance: 0xa, oneway: true}, + 89: {want: 0x423, have: 0x139, distance: 0xa, oneway: true}, + 90: {want: 0x429, have: 0x139, distance: 0xa, oneway: true}, + 91: {want: 0x431, have: 0x139, distance: 0xa, oneway: true}, + 92: {want: 0x43b, have: 0x139, distance: 0xa, oneway: true}, + 93: {want: 0x43e, have: 0x1e1, distance: 0xa, oneway: true}, + 94: {want: 0x445, have: 0x139, distance: 0xa, oneway: true}, + 95: {want: 0x450, have: 0x139, distance: 0xa, oneway: true}, + 96: {want: 0x461, have: 0x139, distance: 0xa, oneway: true}, + 97: {want: 0x467, have: 0x3e2, distance: 0xa, oneway: true}, + 98: {want: 0x46f, have: 0x139, distance: 0xa, oneway: true}, + 99: {want: 0x476, have: 0x3e2, distance: 0xa, oneway: true}, + 100: {want: 0x3883, have: 0x139, distance: 0xa, oneway: true}, + 101: {want: 0x480, have: 0x139, distance: 0xa, oneway: true}, + 102: {want: 0x482, have: 0x139, distance: 0xa, oneway: true}, + 103: {want: 0x494, have: 0x3e2, distance: 0xa, oneway: true}, + 104: {want: 0x49d, have: 0x139, distance: 0xa, oneway: true}, + 105: {want: 0x4ac, have: 0x529, distance: 0xa, oneway: true}, + 106: {want: 0x4b4, have: 0x139, distance: 0xa, oneway: true}, + 107: {want: 0x4bc, have: 0x3e2, distance: 0xa, oneway: true}, + 108: {want: 0x4e5, have: 0x15e, distance: 0xa, oneway: true}, + 109: {want: 0x4f2, have: 0x139, distance: 0xa, oneway: true}, + 110: {want: 0x512, have: 0x139, distance: 0xa, oneway: true}, + 111: {want: 0x518, have: 0x139, distance: 0xa, oneway: true}, + 112: {want: 0x52f, have: 0x139, distance: 0xa, oneway: true}, +} // Size: 702 bytes // matchScript holds pairs of scriptIDs where readers of one script // can typically also read the other. Each is associated with a confidence. -// Size: 24 bytes, 4 elements -var matchScript = [4]scriptIntelligibility{ - 0: {lang: 0x428, want: 0x52, have: 0x1e, conf: 0x2}, - 1: {lang: 0x428, want: 0x1e, have: 0x52, conf: 0x2}, - 2: {lang: 0x0, want: 0x34, have: 0x35, conf: 0x1}, - 3: {lang: 0x0, want: 0x35, have: 0x34, conf: 0x1}, -} - -// Size: 128 bytes, 32 elements -var regionContainment = [32]uint32{ - 0xffffffff, 0x000007a2, 0x00003044, 0x00000008, - 0x403c0010, 0x00000020, 0x00000040, 0x00000080, - 0x00000100, 0x00000200, 0x00000400, 0x2000384c, - 0x00001000, 0x00002000, 0x00004000, 0x00008000, - 0x00010000, 0x00020000, 0x00040000, 0x00080000, - 0x00100000, 0x00200000, 0x01c1c000, 0x00800000, - 0x01000000, 0x1e020000, 0x04000000, 0x08000000, - 0x10000000, 0x20002048, 0x40000000, 0x80000000, -} - -// regionInclusion maps region identifiers to sets of regions in regionInclusionBits, -// where each set holds all groupings that are directly connected in a region -// containment graph. -// Size: 357 bytes, 357 elements -var regionInclusion = [357]uint8{ - // Entry 0 - 3F - 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, - 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, - 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, - 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x20, - 0x21, 0x22, 0x23, 0x24, 0x25, 0x25, 0x22, 0x23, - 0x25, 0x26, 0x21, 0x27, 0x28, 0x29, 0x2a, 0x25, - 0x2b, 0x23, 0x22, 0x25, 0x24, 0x29, 0x2c, 0x2d, - 0x23, 0x2e, 0x2c, 0x25, 0x2f, 0x30, 0x27, 0x25, - // Entry 40 - 7F - 0x27, 0x25, 0x24, 0x30, 0x21, 0x31, 0x32, 0x33, - 0x2f, 0x21, 0x26, 0x26, 0x26, 0x34, 0x2c, 0x28, - 0x27, 0x26, 0x35, 0x27, 0x21, 0x33, 0x22, 0x20, - 0x25, 0x2c, 0x25, 0x21, 0x36, 0x2d, 0x34, 0x29, - 0x21, 0x2e, 0x37, 0x25, 0x25, 0x20, 0x38, 0x38, - 0x27, 0x37, 0x38, 0x38, 0x2e, 0x39, 0x2e, 0x1f, - 0x20, 0x37, 0x3a, 0x27, 0x3b, 0x2b, 0x20, 0x29, - 0x34, 0x26, 0x37, 0x25, 0x23, 0x27, 0x2b, 0x2c, - // Entry 80 - BF - 0x22, 0x2f, 0x2c, 0x2c, 0x25, 0x26, 0x39, 0x21, - 0x33, 0x3b, 0x2c, 0x27, 0x35, 0x21, 0x33, 0x39, - 0x25, 0x2d, 0x20, 0x38, 0x30, 0x37, 0x23, 0x2b, - 0x24, 0x21, 0x23, 0x24, 0x2b, 0x39, 0x2b, 0x25, - 0x23, 0x35, 0x20, 0x2e, 0x3c, 0x30, 0x3b, 0x2e, - 0x25, 0x35, 0x35, 0x23, 0x25, 0x3c, 0x30, 0x23, - 0x25, 0x34, 0x24, 0x2c, 0x31, 0x37, 0x29, 0x37, - 0x38, 0x38, 0x34, 0x32, 0x22, 0x25, 0x2e, 0x3b, - // Entry C0 - FF - 0x20, 0x22, 0x2c, 0x30, 0x35, 0x35, 0x3b, 0x25, - 0x2c, 0x25, 0x39, 0x2e, 0x24, 0x2e, 0x33, 0x30, - 0x2e, 0x31, 0x3a, 0x2c, 0x2a, 0x2c, 0x20, 0x33, - 0x29, 0x2b, 0x24, 0x20, 0x3b, 0x23, 0x28, 0x2a, - 0x23, 0x33, 0x20, 0x27, 0x28, 0x3a, 0x30, 0x24, - 0x2d, 0x2f, 0x28, 0x25, 0x23, 0x39, 0x20, 0x3b, - 0x27, 0x20, 0x23, 0x20, 0x20, 0x1e, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - // Entry 100 - 13F - 0x20, 0x2e, 0x20, 0x2d, 0x22, 0x32, 0x2e, 0x23, - 0x3a, 0x2e, 0x38, 0x37, 0x30, 0x2c, 0x39, 0x2b, - 0x2d, 0x2c, 0x22, 0x2c, 0x2e, 0x27, 0x2e, 0x26, - 0x32, 0x33, 0x25, 0x23, 0x31, 0x21, 0x25, 0x26, - 0x21, 0x2c, 0x30, 0x3c, 0x28, 0x30, 0x3c, 0x38, - 0x28, 0x30, 0x23, 0x25, 0x28, 0x35, 0x2e, 0x32, - 0x2e, 0x20, 0x21, 0x20, 0x2f, 0x27, 0x3c, 0x22, - 0x25, 0x20, 0x27, 0x25, 0x25, 0x30, 0x3a, 0x28, - // Entry 140 - 17F - 0x20, 0x28, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x23, 0x23, 0x2e, 0x22, - 0x31, 0x2e, 0x26, 0x2e, 0x20, -} - -// regionInclusionBits is an array of bit vectors where every vector represents -// a set of region groupings. These sets are used to compute the distance -// between two regions for the purpose of language matching. -// Size: 288 bytes, 72 elements -var regionInclusionBits = [72]uint32{ - // Entry 0 - 1F - 0x82400813, 0x000007a3, 0x00003844, 0x20000808, - 0x403c0011, 0x00000022, 0x20000844, 0x00000082, - 0x00000102, 0x00000202, 0x00000402, 0x2000384d, - 0x00001804, 0x20002804, 0x00404000, 0x00408000, - 0x00410000, 0x02020000, 0x00040010, 0x00080010, - 0x00100010, 0x00200010, 0x01c1c001, 0x00c00000, - 0x01400000, 0x1e020001, 0x06000000, 0x0a000000, - 0x12000000, 0x20002848, 0x40000010, 0x80000001, - // Entry 20 - 3F - 0x00000001, 0x40000000, 0x00020000, 0x01000000, - 0x00008000, 0x00002000, 0x00000200, 0x00000008, - 0x00200000, 0x90000000, 0x00040000, 0x08000000, - 0x00000020, 0x84000000, 0x00000080, 0x00001000, - 0x00010000, 0x00000400, 0x04000000, 0x00000040, - 0x10000000, 0x00004000, 0x81000000, 0x88000000, - 0x00000100, 0x80020000, 0x00080000, 0x00100000, - 0x00800000, 0xffffffff, 0x82400fb3, 0xc27c0813, - // Entry 40 - 5F - 0xa240385f, 0x83c1c813, 0x9e420813, 0x92000001, - 0x86000001, 0x81400001, 0x8a000001, 0x82020001, -} - -// regionInclusionNext marks, for each entry in regionInclusionBits, the set of -// all groups that are reachable from the groups set in the respective entry. -// Size: 72 bytes, 72 elements -var regionInclusionNext = [72]uint8{ - // Entry 0 - 3F - 0x3d, 0x3e, 0x0b, 0x0b, 0x3f, 0x01, 0x0b, 0x01, - 0x01, 0x01, 0x01, 0x40, 0x0b, 0x0b, 0x16, 0x16, - 0x16, 0x19, 0x04, 0x04, 0x04, 0x04, 0x41, 0x16, - 0x16, 0x42, 0x19, 0x19, 0x19, 0x0b, 0x04, 0x00, - 0x00, 0x1e, 0x11, 0x18, 0x0f, 0x0d, 0x09, 0x03, - 0x15, 0x43, 0x12, 0x1b, 0x05, 0x44, 0x07, 0x0c, - 0x10, 0x0a, 0x1a, 0x06, 0x1c, 0x0e, 0x45, 0x46, - 0x08, 0x47, 0x13, 0x14, 0x17, 0x3d, 0x3d, 0x3d, - // Entry 40 - 7F - 0x3d, 0x3d, 0x3d, 0x42, 0x42, 0x41, 0x42, 0x42, -} - -type parentRel struct { - lang uint16 - script uint8 - maxScript uint8 - toRegion uint16 - fromRegion []uint16 -} - -// Size: 412 bytes, 5 elements -var parents = [5]parentRel{ - 0: {lang: 0x134, script: 0x0, maxScript: 0x52, toRegion: 0x1, fromRegion: []uint16{0x1a, 0x24, 0x25, 0x2e, 0x33, 0x35, 0x3c, 0x41, 0x45, 0x47, 0x48, 0x49, 0x4f, 0x51, 0x5b, 0x5c, 0x60, 0x63, 0x6c, 0x72, 0x73, 0x74, 0x7a, 0x7b, 0x7e, 0x7f, 0x80, 0x82, 0x8b, 0x8c, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9e, 0x9f, 0xa3, 0xa6, 0xa8, 0xac, 0xb0, 0xb3, 0xb4, 0xbe, 0xc5, 0xc9, 0xca, 0xcb, 0xcd, 0xcf, 0xd1, 0xd4, 0xd5, 0xdc, 0xde, 0xdf, 0xe5, 0xe6, 0xe7, 0xea, 0xef, 0x106, 0x108, 0x109, 0x10a, 0x10c, 0x10d, 0x111, 0x116, 0x11a, 0x11c, 0x11e, 0x124, 0x128, 0x12b, 0x12c, 0x12e, 0x130, 0x138, 0x13b, 0x13e, 0x141, 0x160, 0x161, 0x163}}, - 1: {lang: 0x134, script: 0x0, maxScript: 0x52, toRegion: 0x1a, fromRegion: []uint16{0x2d, 0x4d, 0x5f, 0x62, 0x71, 0xd8, 0x10b, 0x10e}}, - 2: {lang: 0x139, script: 0x0, maxScript: 0x52, toRegion: 0x1e, fromRegion: []uint16{0x2b, 0x3e, 0x40, 0x50, 0x53, 0x55, 0x58, 0x64, 0x68, 0x88, 0x8e, 0xce, 0xd7, 0xe1, 0xe3, 0xeb, 0xf0, 0x119, 0x134, 0x135, 0x13a}}, - 3: {lang: 0x3b7, script: 0x0, maxScript: 0x52, toRegion: 0xed, fromRegion: []uint16{0x29, 0x4d, 0x59, 0x85, 0x8a, 0xb6, 0xc5, 0xd0, 0x117, 0x125}}, - 4: {lang: 0x51f, script: 0x35, maxScript: 0x35, toRegion: 0x8c, fromRegion: []uint16{0xc5}}, -} - -// Total table size 25825 bytes (25KiB); checksum: 4E97CC5E +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}, +} // Size: 232 bytes + +var matchRegion = []regionIntelligibility{ // 15 elements + 0: {lang: 0x3a, script: 0x0, group: 0x4, distance: 0x4}, + 1: {lang: 0x3a, script: 0x0, group: 0x84, distance: 0x4}, + 2: {lang: 0x139, script: 0x0, group: 0x1, distance: 0x4}, + 3: {lang: 0x139, script: 0x0, group: 0x81, distance: 0x4}, + 4: {lang: 0x13e, script: 0x0, group: 0x3, distance: 0x4}, + 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}, + 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}, +} // Size: 114 bytes + +// Total table size 1471 bytes (1KiB); checksum: 4CB1CD46 diff --git a/vendor/golang.org/x/text/language/tags.go b/vendor/golang.org/x/text/language/tags.go index de30155..42ea792 100644 --- a/vendor/golang.org/x/text/language/tags.go +++ b/vendor/golang.org/x/text/language/tags.go @@ -4,6 +4,8 @@ package language +import "golang.org/x/text/internal/language/compact" + // TODO: Various sets of commonly use tags and regions. // MustParse is like Parse, but panics if the given BCP 47 tag cannot be parsed. @@ -61,83 +63,83 @@ var ( Und Tag = Tag{} - Afrikaans Tag = Tag{lang: _af} // af - Amharic Tag = Tag{lang: _am} // am - Arabic Tag = Tag{lang: _ar} // ar - ModernStandardArabic Tag = Tag{lang: _ar, region: _001} // ar-001 - Azerbaijani Tag = Tag{lang: _az} // az - Bulgarian Tag = Tag{lang: _bg} // bg - Bengali Tag = Tag{lang: _bn} // bn - Catalan Tag = Tag{lang: _ca} // ca - Czech Tag = Tag{lang: _cs} // cs - Danish Tag = Tag{lang: _da} // da - German Tag = Tag{lang: _de} // de - Greek Tag = Tag{lang: _el} // el - English Tag = Tag{lang: _en} // en - AmericanEnglish Tag = Tag{lang: _en, region: _US} // en-US - BritishEnglish Tag = Tag{lang: _en, region: _GB} // en-GB - Spanish Tag = Tag{lang: _es} // es - EuropeanSpanish Tag = Tag{lang: _es, region: _ES} // es-ES - LatinAmericanSpanish Tag = Tag{lang: _es, region: _419} // es-419 - Estonian Tag = Tag{lang: _et} // et - Persian Tag = Tag{lang: _fa} // fa - Finnish Tag = Tag{lang: _fi} // fi - Filipino Tag = Tag{lang: _fil} // fil - French Tag = Tag{lang: _fr} // fr - CanadianFrench Tag = Tag{lang: _fr, region: _CA} // fr-CA - Gujarati Tag = Tag{lang: _gu} // gu - Hebrew Tag = Tag{lang: _he} // he - Hindi Tag = Tag{lang: _hi} // hi - Croatian Tag = Tag{lang: _hr} // hr - Hungarian Tag = Tag{lang: _hu} // hu - Armenian Tag = Tag{lang: _hy} // hy - Indonesian Tag = Tag{lang: _id} // id - Icelandic Tag = Tag{lang: _is} // is - Italian Tag = Tag{lang: _it} // it - Japanese Tag = Tag{lang: _ja} // ja - Georgian Tag = Tag{lang: _ka} // ka - Kazakh Tag = Tag{lang: _kk} // kk - Khmer Tag = Tag{lang: _km} // km - Kannada Tag = Tag{lang: _kn} // kn - Korean Tag = Tag{lang: _ko} // ko - Kirghiz Tag = Tag{lang: _ky} // ky - Lao Tag = Tag{lang: _lo} // lo - Lithuanian Tag = Tag{lang: _lt} // lt - Latvian Tag = Tag{lang: _lv} // lv - Macedonian Tag = Tag{lang: _mk} // mk - Malayalam Tag = Tag{lang: _ml} // ml - Mongolian Tag = Tag{lang: _mn} // mn - Marathi Tag = Tag{lang: _mr} // mr - Malay Tag = Tag{lang: _ms} // ms - Burmese Tag = Tag{lang: _my} // my - Nepali Tag = Tag{lang: _ne} // ne - Dutch Tag = Tag{lang: _nl} // nl - Norwegian Tag = Tag{lang: _no} // no - Punjabi Tag = Tag{lang: _pa} // pa - Polish Tag = Tag{lang: _pl} // pl - Portuguese Tag = Tag{lang: _pt} // pt - BrazilianPortuguese Tag = Tag{lang: _pt, region: _BR} // pt-BR - EuropeanPortuguese Tag = Tag{lang: _pt, region: _PT} // pt-PT - Romanian Tag = Tag{lang: _ro} // ro - Russian Tag = Tag{lang: _ru} // ru - Sinhala Tag = Tag{lang: _si} // si - Slovak Tag = Tag{lang: _sk} // sk - Slovenian Tag = Tag{lang: _sl} // sl - Albanian Tag = Tag{lang: _sq} // sq - Serbian Tag = Tag{lang: _sr} // sr - SerbianLatin Tag = Tag{lang: _sr, script: _Latn} // sr-Latn - Swedish Tag = Tag{lang: _sv} // sv - Swahili Tag = Tag{lang: _sw} // sw - Tamil Tag = Tag{lang: _ta} // ta - Telugu Tag = Tag{lang: _te} // te - Thai Tag = Tag{lang: _th} // th - Turkish Tag = Tag{lang: _tr} // tr - Ukrainian Tag = Tag{lang: _uk} // uk - Urdu Tag = Tag{lang: _ur} // ur - Uzbek Tag = Tag{lang: _uz} // uz - Vietnamese Tag = Tag{lang: _vi} // vi - Chinese Tag = Tag{lang: _zh} // zh - SimplifiedChinese Tag = Tag{lang: _zh, script: _Hans} // zh-Hans - TraditionalChinese Tag = Tag{lang: _zh, script: _Hant} // zh-Hant - Zulu Tag = Tag{lang: _zu} // zu + Afrikaans Tag = Tag(compact.Afrikaans) + Amharic Tag = Tag(compact.Amharic) + Arabic Tag = Tag(compact.Arabic) + ModernStandardArabic Tag = Tag(compact.ModernStandardArabic) + Azerbaijani Tag = Tag(compact.Azerbaijani) + Bulgarian Tag = Tag(compact.Bulgarian) + Bengali Tag = Tag(compact.Bengali) + Catalan Tag = Tag(compact.Catalan) + Czech Tag = Tag(compact.Czech) + Danish Tag = Tag(compact.Danish) + German Tag = Tag(compact.German) + Greek Tag = Tag(compact.Greek) + English Tag = Tag(compact.English) + AmericanEnglish Tag = Tag(compact.AmericanEnglish) + BritishEnglish Tag = Tag(compact.BritishEnglish) + Spanish Tag = Tag(compact.Spanish) + EuropeanSpanish Tag = Tag(compact.EuropeanSpanish) + LatinAmericanSpanish Tag = Tag(compact.LatinAmericanSpanish) + Estonian Tag = Tag(compact.Estonian) + Persian Tag = Tag(compact.Persian) + Finnish Tag = Tag(compact.Finnish) + Filipino Tag = Tag(compact.Filipino) + French Tag = Tag(compact.French) + CanadianFrench Tag = Tag(compact.CanadianFrench) + Gujarati Tag = Tag(compact.Gujarati) + Hebrew Tag = Tag(compact.Hebrew) + Hindi Tag = Tag(compact.Hindi) + Croatian Tag = Tag(compact.Croatian) + Hungarian Tag = Tag(compact.Hungarian) + Armenian Tag = Tag(compact.Armenian) + Indonesian Tag = Tag(compact.Indonesian) + Icelandic Tag = Tag(compact.Icelandic) + Italian Tag = Tag(compact.Italian) + Japanese Tag = Tag(compact.Japanese) + Georgian Tag = Tag(compact.Georgian) + Kazakh Tag = Tag(compact.Kazakh) + Khmer Tag = Tag(compact.Khmer) + Kannada Tag = Tag(compact.Kannada) + Korean Tag = Tag(compact.Korean) + Kirghiz Tag = Tag(compact.Kirghiz) + Lao Tag = Tag(compact.Lao) + Lithuanian Tag = Tag(compact.Lithuanian) + Latvian Tag = Tag(compact.Latvian) + Macedonian Tag = Tag(compact.Macedonian) + Malayalam Tag = Tag(compact.Malayalam) + Mongolian Tag = Tag(compact.Mongolian) + Marathi Tag = Tag(compact.Marathi) + Malay Tag = Tag(compact.Malay) + Burmese Tag = Tag(compact.Burmese) + Nepali Tag = Tag(compact.Nepali) + Dutch Tag = Tag(compact.Dutch) + Norwegian Tag = Tag(compact.Norwegian) + Punjabi Tag = Tag(compact.Punjabi) + Polish Tag = Tag(compact.Polish) + Portuguese Tag = Tag(compact.Portuguese) + BrazilianPortuguese Tag = Tag(compact.BrazilianPortuguese) + EuropeanPortuguese Tag = Tag(compact.EuropeanPortuguese) + Romanian Tag = Tag(compact.Romanian) + Russian Tag = Tag(compact.Russian) + Sinhala Tag = Tag(compact.Sinhala) + Slovak Tag = Tag(compact.Slovak) + Slovenian Tag = Tag(compact.Slovenian) + Albanian Tag = Tag(compact.Albanian) + Serbian Tag = Tag(compact.Serbian) + SerbianLatin Tag = Tag(compact.SerbianLatin) + Swedish Tag = Tag(compact.Swedish) + Swahili Tag = Tag(compact.Swahili) + Tamil Tag = Tag(compact.Tamil) + Telugu Tag = Tag(compact.Telugu) + Thai Tag = Tag(compact.Thai) + Turkish Tag = Tag(compact.Turkish) + Ukrainian Tag = Tag(compact.Ukrainian) + Urdu Tag = Tag(compact.Urdu) + Uzbek Tag = Tag(compact.Uzbek) + Vietnamese Tag = Tag(compact.Vietnamese) + Chinese Tag = Tag(compact.Chinese) + SimplifiedChinese Tag = Tag(compact.SimplifiedChinese) + TraditionalChinese Tag = Tag(compact.TraditionalChinese) + Zulu Tag = Tag(compact.Zulu) ) diff --git a/vendor/golang.org/x/text/language/testdata/CLDRLocaleMatcherTest.txt b/vendor/golang.org/x/text/language/testdata/CLDRLocaleMatcherTest.txt new file mode 100644 index 0000000..6568f2d --- /dev/null +++ b/vendor/golang.org/x/text/language/testdata/CLDRLocaleMatcherTest.txt @@ -0,0 +1,389 @@ +# TODO: this file has not yet been included in the main CLDR release. +# The intent is to verify this file against the Go implementation and then +# correct the cases and add merge in other interesting test cases. +# See TestCLDRCompliance in match_test.go, as well as the list of exceptions +# defined in the map skip below it, for the work in progress. + +# Data-driven test for the XLocaleMatcher. +# Format +# • Everything after "#" is a comment +# • Arguments are separated by ";". They are: + +# supported ; desired ; expected + +# • The supported may have the threshold distance reset as a first item, eg 50, en, fr +# A line starting with @debug will reach a statement in the test code where you can put a breakpoint for debugging +# The test code also supports reformatting this file, by setting the REFORMAT flag. + +################################################## +# testParentLocales + +# es-419, es-AR, and es-MX are in a cluster; es is in a different one + +es-419, es-ES ; es-AR ; es-419 +es-ES, es-419 ; es-AR ; es-419 + +es-419, es ; es-AR ; es-419 +es, es-419 ; es-AR ; es-419 + +es-MX, es ; es-AR ; es-MX +es, es-MX ; es-AR ; es-MX + +# en-GB, en-AU, and en-NZ are in a cluster; en in a different one + +en-GB, en-US ; en-AU ; en-GB +en-US, en-GB ; en-AU ; en-GB + +en-GB, en ; en-AU ; en-GB +en, en-GB ; en-AU ; en-GB + +en-NZ, en-US ; en-AU ; en-NZ +en-US, en-NZ ; en-AU ; en-NZ + +en-NZ, en ; en-AU ; en-NZ +en, en-NZ ; en-AU ; en-NZ + +# pt-AU and pt-PT in one cluster; pt-BR in another + +pt-PT, pt-BR ; pt-AO ; pt-PT +pt-BR, pt-PT ; pt-AO ; pt-PT + +pt-PT, pt ; pt-AO ; pt-PT +pt, pt-PT ; pt-AO ; pt-PT + +zh-MO, zh-TW ; zh-HK ; zh-MO +zh-TW, zh-MO ; zh-HK ; zh-MO + +zh-MO, zh-TW ; zh-HK ; zh-MO +zh-TW, zh-MO ; zh-HK ; zh-MO + +zh-MO, zh-CN ; zh-HK ; zh-MO +zh-CN, zh-MO ; zh-HK ; zh-MO + +zh-MO, zh ; zh-HK ; zh-MO +zh, zh-MO ; zh-HK ; zh-MO + +################################################## +# testChinese + +zh-CN, zh-TW, iw ; zh-Hant-TW ; zh-TW +zh-CN, zh-TW, iw ; zh-Hant ; zh-TW +zh-CN, zh-TW, iw ; zh-TW ; zh-TW +zh-CN, zh-TW, iw ; zh-Hans-CN ; zh-CN +zh-CN, zh-TW, iw ; zh-CN ; zh-CN +zh-CN, zh-TW, iw ; zh ; zh-CN + +################################################## +# testenGB + +fr, en, en-GB, es-419, es-MX, es ; en-NZ ; en-GB +fr, en, en-GB, es-419, es-MX, es ; es-ES ; es +fr, en, en-GB, es-419, es-MX, es ; es-AR ; es-419 +fr, en, en-GB, es-419, es-MX, es ; es-MX ; es-MX + +################################################## +# testFallbacks + +91, en, hi ; sa ; hi + +################################################## +# testBasics + +fr, en-GB, en ; en-GB ; en-GB +fr, en-GB, en ; en ; en +fr, en-GB, en ; fr ; fr +fr, en-GB, en ; ja ; fr # return first if no match + +################################################## +# testFallback + +# check that script fallbacks are handled right + +zh-CN, zh-TW, iw ; zh-Hant ; zh-TW +zh-CN, zh-TW, iw ; zh ; zh-CN +zh-CN, zh-TW, iw ; zh-Hans-CN ; zh-CN +zh-CN, zh-TW, iw ; zh-Hant-HK ; zh-TW +zh-CN, zh-TW, iw ; he-IT ; iw + +################################################## +# testSpecials + +# check that nearby languages are handled + +en, fil, ro, nn ; tl ; fil +en, fil, ro, nn ; mo ; ro +en, fil, ro, nn ; nb ; nn + +# make sure default works + +en, fil, ro, nn ; ja ; en + +################################################## +# testRegionalSpecials + +# verify that en-AU is closer to en-GB than to en (which is en-US) + +en, en-GB, es, es-419 ; es-MX ; es-419 +en, en-GB, es, es-419 ; en-AU ; en-GB +en, en-GB, es, es-419 ; es-ES ; es + +################################################## +# testHK + +# HK and MO are closer to each other for Hant than to TW + +zh, zh-TW, zh-MO ; zh-HK ; zh-MO +zh, zh-TW, zh-HK ; zh-MO ; zh-HK + +################################################## +# testMatch-exact + +# see localeDistance.txt + +################################################## +# testMatch-none + +# see localeDistance.txt + +################################################## +# testMatch-matchOnMazimized + +zh, zh-Hant ; und-TW ; zh-Hant # und-TW should be closer to zh-Hant than to zh +en-Hant-TW, und-TW ; zh-Hant ; und-TW # zh-Hant should be closer to und-TW than to en-Hant-TW +en-Hant-TW, und-TW ; zh ; und-TW # zh should be closer to und-TW than to en-Hant-TW + +################################################## +# testMatchGrandfatheredCode + +fr, i-klingon, en-Latn-US ; en-GB-oed ; en-Latn-US + +################################################## +# testGetBestMatchForList-exactMatch +fr, en-GB, ja, es-ES, es-MX ; ja, de ; ja + +################################################## +# testGetBestMatchForList-simpleVariantMatch +fr, en-GB, ja, es-ES, es-MX ; de, en-US ; en-GB # Intentionally avoiding a perfect-match or two candidates for variant matches. + +# Fallback. + +fr, en-GB, ja, es-ES, es-MX ; de, zh ; fr + +################################################## +# testGetBestMatchForList-matchOnMaximized +# Check that if the preference is maximized already, it works as well. + +en, ja ; ja-Jpan-JP, en-AU ; ja # Match for ja-Jpan-JP (maximized already) + +# ja-JP matches ja on likely subtags, and it's listed first, thus it wins over the second preference en-GB. + +en, ja ; ja-JP, en-US ; ja # Match for ja-Jpan-JP (maximized already) + +# Check that if the preference is maximized already, it works as well. + +en, ja ; ja-Jpan-JP, en-US ; ja # Match for ja-Jpan-JP (maximized already) + +################################################## +# testGetBestMatchForList-noMatchOnMaximized +# Regression test for http://b/5714572 . +# de maximizes to de-DE. Pick the exact match for the secondary language instead. +en, de, fr, ja ; de-CH, fr ; de + +################################################## +# testBestMatchForTraditionalChinese + +# Scenario: An application that only supports Simplified Chinese (and some other languages), +# but does not support Traditional Chinese. zh-Hans-CN could be replaced with zh-CN, zh, or +# zh-Hans, it wouldn't make much of a difference. + +# The script distance (simplified vs. traditional Han) is considered small enough +# to be an acceptable match. The regional difference is considered almost insignificant. + +fr, zh-Hans-CN, en-US ; zh-TW ; zh-Hans-CN +fr, zh-Hans-CN, en-US ; zh-Hant ; zh-Hans-CN + +# For geo-political reasons, you might want to avoid a zh-Hant -> zh-Hans match. +# In this case, if zh-TW, zh-HK or a tag starting with zh-Hant is requested, you can +# change your call to getBestMatch to include a 2nd language preference. +# "en" is a better match since its distance to "en-US" is closer than the distance +# from "zh-TW" to "zh-CN" (script distance). + +fr, zh-Hans-CN, en-US ; zh-TW, en ; en-US +fr, zh-Hans-CN, en-US ; zh-Hant-CN, en, en ; en-US +fr, zh-Hans-CN, en-US ; zh-Hans, en ; zh-Hans-CN + +################################################## +# testUndefined +# When the undefined language doesn't match anything in the list, +# getBestMatch returns the default, as usual. + +it, fr ; und ; it + +# When it *does* occur in the list, bestMatch returns it, as expected. +it, und ; und ; und + +# The unusual part: max("und") = "en-Latn-US", and since matching is based on maximized +# tags, the undefined language would normally match English. But that would produce the +# counterintuitive results that getBestMatch("und", XLocaleMatcher("it,en")) would be "en", and +# getBestMatch("en", XLocaleMatcher("it,und")) would be "und". + +# To avoid that, we change the matcher's definitions of max +# so that max("und")="und". That produces the following, more desirable +# results: + +it, en ; und ; it +it, und ; en ; it + +################################################## +# testGetBestMatch-regionDistance + +es-AR, es ; es-MX ; es-AR +fr, en, en-GB ; en-CA ; en-GB +de-AT, de-DE, de-CH ; de ; de-DE + +################################################## +# testAsymmetry + +mul, nl ; af ; nl # af => nl +mul, af ; nl ; mul # but nl !=> af + +################################################## +# testGetBestMatchForList-matchOnMaximized2 + +# ja-JP matches ja on likely subtags, and it's listed first, thus it wins over the second preference en-GB. + +fr, en-GB, ja, es-ES, es-MX ; ja-JP, en-GB ; ja # Match for ja-JP, with likely region subtag + +# Check that if the preference is maximized already, it works as well. + +fr, en-GB, ja, es-ES, es-MX ; ja-Jpan-JP, en-GB ; ja # Match for ja-Jpan-JP (maximized already) + +################################################## +# testGetBestMatchForList-closeEnoughMatchOnMaximized + +en-GB, en, de, fr, ja ; de-CH, fr ; de +en-GB, en, de, fr, ja ; en-US, ar, nl, de, ja ; en + +################################################## +# testGetBestMatchForPortuguese + +# pt might be supported and not pt-PT + +# European user who prefers Spanish over Brazillian Portuguese as a fallback. + +pt-PT, pt-BR, es, es-419 ; pt-PT, es, pt ; pt-PT +pt-PT, pt, es, es-419 ; pt-PT, es, pt ; pt-PT # pt implicit + +# Brazillian user who prefers South American Spanish over European Portuguese as a fallback. +# The asymmetry between this case and above is because it's "pt-PT" that's missing between the +# matchers as "pt-BR" is a much more common language. + +pt-PT, pt-BR, es, es-419 ; pt, es-419, pt-PT ; pt-BR +pt-PT, pt-BR, es, es-419 ; pt-PT, es, pt ; pt-PT +pt-PT, pt, es, es-419 ; pt-PT, es, pt ; pt-PT +pt-PT, pt, es, es-419 ; pt, es-419, pt-PT ; pt + +pt-BR, es, es-419 ; pt, es-419, pt-PT ; pt-BR + +# Code that adds the user's country can get "pt-US" for a user's language. +# That should fall back to "pt-BR". + +pt-PT, pt-BR, es, es-419 ; pt-US, pt-PT ; pt-BR +pt-PT, pt, es, es-419 ; pt-US, pt-PT, pt ; pt # pt-BR implicit + +################################################## +# testVariantWithScriptMatch 1 and 2 + +fr, en, sv ; en-GB ; en +fr, en, sv ; en-GB ; en +en, sv ; en-GB, sv ; en + +################################################## +# testLongLists + +en, sv ; sv ; sv +af, am, ar, az, be, bg, bn, bs, ca, cs, cy, cy, da, de, el, en, en-GB, es, es-419, et, eu, fa, fi, fil, fr, ga, gl, gu, hi, hr, hu, hy, id, is, it, iw, ja, ka, kk, km, kn, ko, ky, lo, lt, lv, mk, ml, mn, mr, ms, my, ne, nl, no, pa, pl, pt, pt-PT, ro, ru, si, sk, sl, sq, sr, sr-Latn, sv, sw, ta, te, th, tr, uk, ur, uz, vi, zh-CN, zh-TW, zu ; sv ; sv +af, af-NA, af-ZA, agq, agq-CM, ak, ak-GH, am, am-ET, ar, ar-001, ar-AE, ar-BH, ar-DJ, ar-DZ, ar-EG, ar-EH, ar-ER, ar-IL, ar-IQ, ar-JO, ar-KM, ar-KW, ar-LB, ar-LY, ar-MA, ar-MR, ar-OM, ar-PS, ar-QA, ar-SA, ar-SD, ar-SO, ar-SS, ar-SY, ar-TD, ar-TN, ar-YE, as, as-IN, asa, asa-TZ, ast, ast-ES, az, az-Cyrl, az-Cyrl-AZ, az-Latn, az-Latn-AZ, bas, bas-CM, be, be-BY, bem, bem-ZM, bez, bez-TZ, bg, bg-BG, bm, bm-ML, bn, bn-BD, bn-IN, bo, bo-CN, bo-IN, br, br-FR, brx, brx-IN, bs, bs-Cyrl, bs-Cyrl-BA, bs-Latn, bs-Latn-BA, ca, ca-AD, ca-ES, ca-ES-VALENCIA, ca-FR, ca-IT, ce, ce-RU, cgg, cgg-UG, chr, chr-US, ckb, ckb-IQ, ckb-IR, cs, cs-CZ, cu, cu-RU, cy, cy-GB, da, da-DK, da-GL, dav, dav-KE, de, de-AT, de-BE, de-CH, de-DE, de-LI, de-LU, dje, dje-NE, dsb, dsb-DE, dua, dua-CM, dyo, dyo-SN, dz, dz-BT, ebu, ebu-KE, ee, ee-GH, ee-TG, el, el-CY, el-GR, en, en-001, en-150, en-AG, en-AI, en-AS, en-AT, en-AU, en-BB, en-BE, en-BI, en-BM, en-BS, en-BW, en-BZ, en-CA, en-CC, en-CH, en-CK, en-CM, en-CX, en-CY, en-DE, en-DG, en-DK, en-DM, en-ER, en-FI, en-FJ, en-FK, en-FM, en-GB, en-GD, en-GG, en-GH, en-GI, en-GM, en-GU, en-GY, en-HK, en-IE, en-IL, en-IM, en-IN, en-IO, en-JE, en-JM, en-KE, en-KI, en-KN, en-KY, en-LC, en-LR, en-LS, en-MG, en-MH, en-MO, en-MP, en-MS, en-MT, en-MU, en-MW, en-MY, en-NA, en-NF, en-NG, en-NL, en-NR, en-NU, en-NZ, en-PG, en-PH, en-PK, en-PN, en-PR, en-PW, en-RW, en-SB, en-SC, en-SD, en-SE, en-SG, en-SH, en-SI, en-SL, en-SS, en-SX, en-SZ, en-TC, en-TK, en-TO, en-TT, en-TV, en-TZ, en-UG, en-UM, en-US, en-US-POSIX, en-VC, en-VG, en-VI, en-VU, en-WS, en-ZA, en-ZM, en-ZW, eo, eo-001, es, es-419, es-AR, es-BO, es-CL, es-CO, es-CR, es-CU, es-DO, es-EA, es-EC, es-ES, es-GQ, es-GT, es-HN, es-IC, es-MX, es-NI, es-PA, es-PE, es-PH, es-PR, es-PY, es-SV, es-US, es-UY, es-VE, et, et-EE, eu, eu-ES, ewo, ewo-CM, fa, fa-AF, fa-IR, ff, ff-CM, ff-GN, ff-MR, ff-SN, fi, fi-FI, fil, fil-PH, fo, fo-DK, fo-FO, fr, fr-BE, fr-BF, fr-BI, fr-BJ, fr-BL, fr-CA, fr-CD, fr-CF, fr-CG, fr-CH, fr-CI, fr-CM, fr-DJ, fr-DZ, fr-FR, fr-GA, fr-GF, fr-GN, fr-GP, fr-GQ, fr-HT, fr-KM, fr-LU, fr-MA, fr-MC, fr-MF, fr-MG, fr-ML, fr-MQ, fr-MR, fr-MU, fr-NC, fr-NE, fr-PF, fr-PM, fr-RE, fr-RW, fr-SC, fr-SN, fr-SY, fr-TD, fr-TG, fr-TN, fr-VU, fr-WF, fr-YT, fur, fur-IT, fy, fy-NL, ga, ga-IE, gd, gd-GB, gl, gl-ES, gsw, gsw-CH, gsw-FR, gsw-LI, gu, gu-IN, guz, guz-KE, gv, gv-IM, ha, ha-GH, ha-NE, ha-NG, haw, haw-US, he, he-IL, hi, hi-IN, hr, hr-BA, hr-HR, hsb, hsb-DE, hu, hu-HU, hy, hy-AM, id, id-ID, ig, ig-NG, ii, ii-CN, is, is-IS, it, it-CH, it-IT, it-SM, ja, ja-JP, jgo, jgo-CM, jmc, jmc-TZ, ka, ka-GE, kab, kab-DZ, kam, kam-KE, kde, kde-TZ, kea, kea-CV, khq, khq-ML, ki, ki-KE, kk, kk-KZ, kkj, kkj-CM, kl, kl-GL, kln, kln-KE, km, km-KH, kn, kn-IN, ko, ko-KP, ko-KR, kok, kok-IN, ks, ks-IN, ksb, ksb-TZ, ksf, ksf-CM, ksh, ksh-DE, kw, kw-GB, ky, ky-KG, lag, lag-TZ, lb, lb-LU, lg, lg-UG, lkt, lkt-US, ln, ln-AO, ln-CD, ln-CF, ln-CG, lo, lo-LA, lrc, lrc-IQ, lrc-IR, lt, lt-LT, lu, lu-CD, luo, luo-KE, luy, luy-KE, lv, lv-LV, mas, mas-KE, mas-TZ, mer, mer-KE, mfe, mfe-MU, mg, mg-MG, mgh, mgh-MZ, mgo, mgo-CM, mk, mk-MK, ml, ml-IN, mn, mn-MN, mr, mr-IN, ms, ms-BN, ms-MY, ms-SG, mt, mt-MT, mua, mua-CM, my, my-MM, mzn, mzn-IR, naq, naq-NA, nb, nb-NO, nb-SJ, nd, nd-ZW, ne, ne-IN, ne-NP, nl, nl-AW, nl-BE, nl-BQ, nl-CW, nl-NL, nl-SR, nl-SX, nmg, nmg-CM, nn, nn-NO, nnh, nnh-CM, nus, nus-SS, nyn, nyn-UG, om, om-ET, om-KE, or, or-IN, os, os-GE, os-RU, pa, pa-Arab, pa-Arab-PK, pa-Guru, pa-Guru-IN, pl, pl-PL, prg, prg-001, ps, ps-AF, pt, pt-AO, pt-BR, pt-CV, pt-GW, pt-MO, pt-MZ, pt-PT, pt-ST, pt-TL, qu, qu-BO, qu-EC, qu-PE, rm, rm-CH, rn, rn-BI, ro, ro-MD, ro-RO, rof, rof-TZ, root, ru, ru-BY, ru-KG, ru-KZ, ru-MD, ru-RU, ru-UA, rw, rw-RW, rwk, rwk-TZ, sah, sah-RU, saq, saq-KE, sbp, sbp-TZ, se, se-FI, se-NO, se-SE, seh, seh-MZ, ses, ses-ML, sg, sg-CF, shi, shi-Latn, shi-Latn-MA, shi-Tfng, shi-Tfng-MA, si, si-LK, sk, sk-SK, sl, sl-SI, smn, smn-FI, sn, sn-ZW, so, so-DJ, so-ET, so-KE, so-SO, sq, sq-AL, sq-MK, sq-XK, sr, sr-Cyrl, sr-Cyrl-BA, sr-Cyrl-ME, sr-Cyrl-RS, sr-Cyrl-XK, sr-Latn, sr-Latn-BA, sr-Latn-ME, sr-Latn-RS, sr-Latn-XK, sv, sv-AX, sv-FI, sv-SE, sw, sw-CD, sw-KE, sw-TZ, sw-UG, ta, ta-IN, ta-LK, ta-MY, ta-SG, te, te-IN, teo, teo-KE, teo-UG, th, th-TH, ti, ti-ER, ti-ET, tk, tk-TM, to, to-TO, tr, tr-CY, tr-TR, twq, twq-NE, tzm, tzm-MA, ug, ug-CN, uk, uk-UA, ur, ur-IN, ur-PK, uz, uz-Arab, uz-Arab-AF, uz-Cyrl, uz-Cyrl-UZ, uz-Latn, uz-Latn-UZ, vai, vai-Latn, vai-Latn-LR, vai-Vaii, vai-Vaii-LR, vi, vi-VN, vo, vo-001, vun, vun-TZ, wae, wae-CH, xog, xog-UG, yav, yav-CM, yi, yi-001, yo, yo-BJ, yo-NG, zgh, zgh-MA, zh, zh-Hans, zh-Hans-CN, zh-Hans-HK, zh-Hans-MO, zh-Hans-SG, zh-Hant, zh-Hant-HK, zh-Hant-MO, zh-Hant-TW, zu, zu-ZA ; sv ; sv + +################################################## +# test8288 + +it, en ; und ; it +it, en ; und, en ; en + +# examples from +# http://unicode.org/repos/cldr/tags/latest/common/bcp47/ +# http://unicode.org/repos/cldr/tags/latest/common/validity/variant.xml + +################################################## +# testUnHack + +en-NZ, en-IT ; en-US ; en-NZ + +################################################## +# testEmptySupported => null + ; en ; null + +################################################## +# testVariantsAndExtensions +################################################## +# tests the .combine() method + +und, fr ; fr-BE-fonipa ; fr ; fr-BE-fonipa +und, fr-CA ; fr-BE-fonipa ; fr-CA ; fr-BE-fonipa +und, fr-fonupa ; fr-BE-fonipa ; fr-fonupa ; fr-BE-fonipa +und, no ; nn-BE-fonipa ; no ; no-BE-fonipa +und, en-GB-u-sd-gbsct ; en-fonipa-u-nu-Arab-ca-buddhist-t-m0-iso-i0-pinyin ; en-GB-u-sd-gbsct ; en-GB-fonipa-u-nu-Arab-ca-buddhist-t-m0-iso-i0-pinyin + +en-PSCRACK, de-PSCRACK, fr-PSCRACK, pt-PT-PSCRACK ; fr-PSCRACK ; fr-PSCRACK +en-PSCRACK, de-PSCRACK, fr-PSCRACK, pt-PT-PSCRACK ; fr ; fr-PSCRACK +en-PSCRACK, de-PSCRACK, fr-PSCRACK, pt-PT-PSCRACK ; de-CH ; de-PSCRACK + +################################################## +# testClusters +# we favor es-419 over others in cluster. Clusters: es- {ES, MA, EA} {419, AR, MX} + +und, es, es-MA, es-MX, es-419 ; es-AR ; es-419 +und, es-MA, es, es-419, es-MX ; es-AR ; es-419 +und, es, es-MA, es-MX, es-419 ; es-EA ; es +und, es-MA, es, es-419, es-MX ; es-EA ; es + +# of course, fall back to within cluster + +und, es, es-MA, es-MX ; es-AR ; es-MX +und, es-MA, es, es-MX ; es-AR ; es-MX +und, es-MA, es-MX, es-419 ; es-EA ; es-MA +und, es-MA, es-419, es-MX ; es-EA ; es-MA + +# we favor es-GB over others in cluster. Clusters: en- {US, GU, VI} {GB, IN, ZA} + +und, en, en-GU, en-IN, en-GB ; en-ZA ; en-GB +und, en-GU, en, en-GB, en-IN ; en-ZA ; en-GB +und, en, en-GU, en-IN, en-GB ; en-VI ; en +und, en-GU, en, en-GB, en-IN ; en-VI ; en + +# of course, fall back to within cluster + +und, en, en-GU, en-IN ; en-ZA ; en-IN +und, en-GU, en, en-IN ; en-ZA ; en-IN +und, en-GU, en-IN, en-GB ; en-VI ; en-GU +und, en-GU, en-GB, en-IN ; en-VI ; en-GU + +################################################## +# testThreshold +@Threshold=60 + +50, und, fr-CA-fonupa ; fr-BE-fonipa ; fr-CA-fonupa ; fr-BE-fonipa +50, und, fr-Cyrl-CA-fonupa ; fr-BE-fonipa ; fr-Cyrl-CA-fonupa ; fr-Cyrl-BE-fonipa + +@Threshold=-1 # restore + +################################################## +# testScriptFirst +@DistanceOption=SCRIPT_FIRST +@debug + +ru, fr ; zh, pl ; fr +ru, fr ; zh-Cyrl, pl ; ru +hr, en-Cyrl; sr ; en-Cyrl +da, ru, hr; sr ; ru \ No newline at end of file diff --git a/vendor/golang.org/x/text/language/testdata/GoLocaleMatcherTest.txt b/vendor/golang.org/x/text/language/testdata/GoLocaleMatcherTest.txt new file mode 100644 index 0000000..32a649f --- /dev/null +++ b/vendor/golang.org/x/text/language/testdata/GoLocaleMatcherTest.txt @@ -0,0 +1,231 @@ +# basics +fr, en-GB, en ; en-GB ; en-GB +fr, en-GB, en ; en-US ; en +fr, en-GB, en ; fr-FR ; fr +fr, en-GB, en ; ja-JP ; fr + +# script fallbacks +zh-CN, zh-TW, iw ; zh-Hant ; zh-TW +zh-CN, zh-TW, iw ; zh ; zh-CN +zh-CN, zh-TW, iw ; zh-Hans-CN ; zh-CN +zh-CN, zh-TW, iw ; zh-Hant-HK ; zh-TW +zh-CN, zh-TW, iw ; he-IT ; iw ; iw-u-rg-itzzzz + +# language-specific script fallbacks 1 +en, sr, nl ; sr-Latn ; sr +en, sr, nl ; sh ; sr # different script, but seems okay and is as CLDR suggests +en, sr, nl ; hr ; en +en, sr, nl ; bs ; en +en, sr, nl ; nl-Cyrl ; sr + +# language-specific script fallbacks 2 +en, sh ; sr ; sh +en, sh ; sr-Cyrl ; sh +en, sh ; hr ; sh + +# don't match hr to sr-Latn +en, sr-Latn ; hr ; en + +# both deprecated and not +fil, tl, iw, he ; he-IT ; he +fil, tl, iw, he ; he ; he +fil, tl, iw, he ; iw ; iw +fil, tl, iw, he ; fil-IT ; fil +fil, tl, iw, he ; fil ; fil +fil, tl, iw, he ; tl ; tl + +# nearby languages +en, fil, ro, nn ; tl ; fil +en, fil, ro, nn ; mo ; ro +en, fil, ro, nn ; nb ; nn +en, fil, ro, nn ; ja ; en + +# nearby languages: Nynorsk to Bokmål +en, nb ; nn ; nb + +# nearby languages: Danish does not match nn +en, nn ; da ; en + +# nearby languages: Danish matches no +en, no ; da ; no + +# nearby languages: Danish matches nb +en, nb ; da ; nb + +# prefer matching languages over language variants. +nn, en-GB ; no, en-US ; en-GB +nn, en-GB ; nb, en-US ; en-GB + +# deprecated version is closer than same language with other differences +nl, he, en-GB ; iw, en-US ; he + +# macro equivalent is closer than same language with other differences +nl, zh, en-GB, no ; cmn, en-US ; zh +nl, zh, en-GB, no ; nb, en-US ; no + +# legacy equivalent is closer than same language with other differences +nl, fil, en-GB ; tl, en-US ; fil + +# distinguish near equivalents +en, ro, mo, ro-MD ; ro ; ro +en, ro, mo, ro-MD ; mo ; mo +en, ro, mo, ro-MD ; ro-MD ; ro-MD + +# maximization of legacy +sr-Cyrl, sr-Latn, ro, ro-MD ; sh ; sr-Latn +sr-Cyrl, sr-Latn, ro, ro-MD ; mo ; ro-MD + +# empty + ; fr ; und + ; en ; und + +# private use subtags +fr, en-GB, x-bork, es-ES, es-419 ; x-piglatin ; fr +fr, en-GB, x-bork, es-ES, es-419 ; x-bork ; x-bork + +# grandfathered codes +fr, i-klingon, en-Latn-US ; en-GB-oed ; en-Latn-US +fr, i-klingon, en-Latn-US ; i-klingon ; tlh + + +# simple variant match +fr, en-GB, ja, es-ES, es-MX ; de, en-US ; en-GB +fr, en-GB, ja, es-ES, es-MX ; de, zh ; fr + +# best match for traditional Chinese +fr, zh-Hans-CN, en-US ; zh-TW ; zh-Hans-CN +fr, zh-Hans-CN, en-US ; zh-Hant ; zh-Hans-CN +fr, zh-Hans-CN, en-US ; zh-TW, en ; en-US +fr, zh-Hans-CN, en-US ; zh-Hant-CN, en ; en-US +fr, zh-Hans-CN, en-US ; zh-Hans, en ; zh-Hans-CN + +# more specific script should win in case regions are identical +af, af-Latn, af-Arab ; af ; af +af, af-Latn, af-Arab ; af-ZA ; af +af, af-Latn, af-Arab ; af-Latn-ZA ; af-Latn +af, af-Latn, af-Arab ; af-Latn ; af-Latn + +# more specific region should win +nl, nl-NL, nl-BE ; nl ; nl +nl, nl-NL, nl-BE ; nl-Latn ; nl +nl, nl-NL, nl-BE ; nl-Latn-NL ; nl-NL +nl, nl-NL, nl-BE ; nl-NL ; nl-NL + +# region may replace matched if matched is enclosing +es-419,es ; es-MX ; es-419 ; es-MX +es-419,es ; es-SG ; es + +# more specific region wins over more specific script +nl, nl-Latn, nl-NL, nl-BE ; nl ; nl +nl, nl-Latn, nl-NL, nl-BE ; nl-Latn ; nl-Latn +nl, nl-Latn, nl-NL, nl-BE ; nl-NL ; nl-NL +nl, nl-Latn, nl-NL, nl-BE ; nl-Latn-NL ; nl-NL + +# region distance Portuguese +pt, pt-PT ; pt-ES ; pt-PT + +# if no preferred locale specified, pick top language, not regional +en, fr, fr-CA, fr-CH ; fr-US ; fr ; fr-u-rg-uszzzz + +# region distance German +de-AT, de-DE, de-CH ; de ; de-DE + +# en-AU is closer to en-GB than to en (which is en-US) +en, en-GB, es-ES, es-419 ; en-AU ; en-GB +en, en-GB, es-ES, es-419 ; es-MX ; es-419 ; es-MX +en, en-GB, es-ES, es-419 ; es-PT ; es-ES + +# undefined +it, fr ; und ; it + +# und does not match en +it, en ; und ; it + +# undefined in priority list +it, und ; und ; und +it, und ; en ; it + +# undefined +it, fr, zh ; und-FR ; fr +it, fr, zh ; und-CN ; zh +it, fr, zh ; und-Hans ; zh +it, fr, zh ; und-Hant ; zh +it, fr, zh ; und-Latn ; it + +# match on maximized tag +fr, en-GB, ja, es-ES, es-MX ; ja-JP, en-GB ; ja +fr, en-GB, ja, es-ES, es-MX ; ja-Jpan-JP, en-GB ; ja + +# pick best maximized tag +ja, ja-Jpan-US, ja-JP, en, ru ; ja-Jpan, ru ; ja +ja, ja-Jpan-US, ja-JP, en, ru ; ja-JP, ru ; ja-JP +ja, ja-Jpan-US, ja-JP, en, ru ; ja-US, ru ; ja-Jpan-US + +# termination: pick best maximized match +ja, ja-Jpan, ja-JP, en, ru ; ja-Jpan-JP, ru ; ja-JP +ja, ja-Jpan, ja-JP, en, ru ; ja-Jpan, ru ; ja-Jpan + +# same language over exact, but distinguish when user is explicit +fr, en-GB, ja, es-ES, es-MX ; ja, de ; ja +en, de, fr, ja ; de-CH, fr ; de # TODO: ; de-u-rg-CH +en-GB, nl ; en, nl ; en-GB +en-GB, nl ; en, nl, en-GB ; nl + +# parent relation preserved +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; en-150 ; en-GB +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; en-AU ; en-GB +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; en-BE ; en-GB +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; en-GG ; en-GB +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; en-GI ; en-GB +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; en-HK ; en-GB +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; en-IE ; en-GB +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; en-IM ; en-GB +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; en-IN ; en-GB +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; en-JE ; en-GB +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; en-MT ; en-GB +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; en-NZ ; en-GB +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; en-PK ; en-GB +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; en-SG ; en-GB +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; en-DE ; en-GB +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; en-MT ; en-GB +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-AR ; es-419 ; es-AR +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-BO ; es-419 ; es-BO +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-CL ; es-419 ; es-CL +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-CO ; es-419 ; es-CO +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-CR ; es-419 ; es-CR +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-CU ; es-419 ; es-CU +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-DO ; es-419 ; es-DO +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-EC ; es-419 ; es-EC +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-GT ; es-419 ; es-GT +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-HN ; es-419 ; es-HN +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-MX ; es-419 ; es-MX +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-NI ; es-419 ; es-NI +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-PA ; es-419 ; es-PA +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-PE ; es-419 ; es-PE +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-PR ; es-419 ; es-PR +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-PT ; es +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-PY ; es-419 ; es-PY +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-SV ; es-419 ; es-SV +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-US ; es-419 +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-UY ; es-419 ; es-UY +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-VE ; es-419 ; es-VE +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; pt-AO ; pt-PT +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; pt-CV ; pt-PT +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; pt-GW ; pt-PT +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; pt-MO ; pt-PT +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; pt-MZ ; pt-PT +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; pt-ST ; pt-PT +en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; pt-TL ; pt-PT + +# preserve extensions +en, de, sl-nedis ; de-FR-u-co-phonebk ; de ; de-u-co-phonebk-rg-frzzzz +en, de, sl-nedis ; sl-nedis-u-cu-eur ; sl-nedis ; sl-nedis-u-cu-eur +en, de, sl-nedis ; sl-u-cu-eur ; sl-nedis ; sl-nedis-u-cu-eur +en, de, sl-nedis ; sl-HR-nedis-u-cu-eur ; sl-nedis ; sl-nedis-u-cu-eur-rg-hrzzzz +en, de, sl-nedis ; de-t-m0-iso-i0-pinyin ; de ; de-t-m0-iso-i0-pinyin + +und, nl ; nl-BE-fonipa ; nl ; nl-u-rg-bezzzz +und, nl-CA ; nl-BE-fonipa ; nl-CA ; nl-CA-u-rg-bezzzz +und, nl-fonupa ; nl-BE-fonipa ; nl-fonupa ; nl-fonupa-u-rg-bezzzz +und, no ; nn-DK-fonipa ; no ; no-u-rg-dkzzzz +und, en-GB-u-sd-usca ; en-US-fonipa-u-nu-Arab-ca-buddhist-sd-usdc-t-m0-iso-i0-pinyin ; en-GB-u-sd-usca ; en-GB-t-m0-iso-i0-pinyin-u-ca-buddhist-nu-Arab-rg-uszzzz-sd-usca \ No newline at end of file diff --git a/vendor/golang.org/x/text/message/catalog.go b/vendor/golang.org/x/text/message/catalog.go index 41c31f4..068271d 100644 --- a/vendor/golang.org/x/text/message/catalog.go +++ b/vendor/golang.org/x/text/message/catalog.go @@ -8,106 +8,29 @@ package message // Documentation and method names will reflect this by using the exported name. import ( - "sync" - - "golang.org/x/text/internal" - "golang.org/x/text/internal/format" "golang.org/x/text/language" + "golang.org/x/text/message/catalog" ) -// DefaultCatalog is used by SetString. -var DefaultCatalog *Catalog = newCatalog() - -// SetString calls SetString on the default Catalog. -func SetString(tag language.Tag, key string, msg string) error { - return DefaultCatalog.SetString(tag, key, msg) -} - -// TODO: -// // SetSelect is a shorthand for DefaultCatalog.SetSelect. -// func SetSelect(tag language.Tag, key string, s ...format.Statement) error { -// return DefaultCatalog.SetSelect(tag, key, s...) -// } - -type msgMap map[string]format.Statement - -// A Catalog holds translations for messages for supported languages. -type Catalog struct { - index map[language.Tag]msgMap - - mutex sync.Mutex // For locking all operations. -} - -// Printer creates a Printer that uses c. -func (c *Catalog) Printer(tag language.Tag) *Printer { - // TODO: pre-create indexes for tag lookup. - return &Printer{ - tag: tag, - cat: c, - } +// MatchLanguage reports the matched tag obtained from language.MatchStrings for +// the Matcher of the DefaultCatalog. +func MatchLanguage(preferred ...string) language.Tag { + c := DefaultCatalog + tag, _ := language.MatchStrings(c.Matcher(), preferred...) + return tag } -// NewCatalog returns a new Catalog. If a message is not present in a Catalog, -// the fallback Catalogs will be used in order as an alternative source. -func newCatalog(fallback ...*Catalog) *Catalog { - // TODO: implement fallback. - return &Catalog{ - index: map[language.Tag]msgMap{}, - } -} - -// Languages returns a slice of all languages for which the Catalog contains -// variants. -func (c *Catalog) Languages() []language.Tag { - c.mutex.Lock() - defer c.mutex.Unlock() - - tags := []language.Tag{} - for t, _ := range c.index { - tags = append(tags, t) - } - internal.SortTags(tags) - return tags -} - -// SetString sets the translation for the given language and key. -func (c *Catalog) SetString(tag language.Tag, key string, msg string) error { - return c.set(tag, key, format.String(msg)) -} +// DefaultCatalog is used by SetString. +var DefaultCatalog catalog.Catalog = defaultCatalog -func (c *Catalog) get(tag language.Tag, key string) (msg string, ok bool) { - c.mutex.Lock() - defer c.mutex.Unlock() +var defaultCatalog = catalog.NewBuilder() - for ; ; tag = tag.Parent() { - if msgs, ok := c.index[tag]; ok { - if statement, ok := msgs[key]; ok { - // TODO: use type switches when we implement selecting. - msg := string(statement.(format.String)) - return msg, true - } - } - if tag == language.Und { - break - } - } - return "", false +// SetString calls SetString on the initial default Catalog. +func SetString(tag language.Tag, key string, msg string) error { + return defaultCatalog.SetString(tag, key, msg) } -func (c *Catalog) set(tag language.Tag, key string, s ...format.Statement) error { - if len(s) != 1 { - // TODO: handle errors properly when we process statement sequences. - panic("statement sequence should be of length 1") - } - - c.mutex.Lock() - defer c.mutex.Unlock() - - m := c.index[tag] - if m == nil { - m = map[string]format.Statement{} - c.index[tag] = m - } - m[key] = s[0] - return nil +// Set calls Set on the initial default Catalog. +func Set(tag language.Tag, key string, msg ...catalog.Message) error { + return defaultCatalog.Set(tag, key, msg...) } diff --git a/vendor/golang.org/x/text/message/catalog/catalog.go b/vendor/golang.org/x/text/message/catalog/catalog.go new file mode 100644 index 0000000..34a30d3 --- /dev/null +++ b/vendor/golang.org/x/text/message/catalog/catalog.go @@ -0,0 +1,369 @@ +// Copyright 2017 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. + +// Package catalog defines collections of translated format strings. +// +// This package mostly defines types for populating catalogs with messages. The +// catmsg package contains further definitions for creating custom message and +// dictionary types as well as packages that use Catalogs. +// +// Package catalog defines various interfaces: Dictionary, Loader, and Message. +// A Dictionary maintains a set of translations of format strings for a single +// language. The Loader interface defines a source of dictionaries. A +// translation of a format string is represented by a Message. +// +// +// Catalogs +// +// A Catalog defines a programmatic interface for setting message translations. +// It maintains a set of per-language dictionaries with translations for a set +// of keys. For message translation to function properly, a translation should +// be defined for each key for each supported language. A dictionary may be +// underspecified, though, if there is a parent language that already defines +// the key. For example, a Dictionary for "en-GB" could leave out entries that +// are identical to those in a dictionary for "en". +// +// +// Messages +// +// A Message is a format string which varies on the value of substitution +// variables. For instance, to indicate the number of results one could want "no +// results" if there are none, "1 result" if there is 1, and "%d results" for +// any other number. Catalog is agnostic to the kind of format strings that are +// used: for instance, messages can follow either the printf-style substitution +// from package fmt or use templates. +// +// A Message does not substitute arguments in the format string. This job is +// reserved for packages that render strings, such as message, that use Catalogs +// to selected string. This separation of concerns allows Catalog to be used to +// store any kind of formatting strings. +// +// +// Selecting messages based on linguistic features of substitution arguments +// +// Messages may vary based on any linguistic features of the argument values. +// The most common one is plural form, but others exist. +// +// Selection messages are provided in packages that provide support for a +// specific linguistic feature. The following snippet uses plural.Select: +// +// catalog.Set(language.English, "You are %d minute(s) late.", +// plural.Select(1, +// "one", "You are 1 minute late.", +// "other", "You are %d minutes late.")) +// +// In this example, a message is stored in the Catalog where one of two messages +// is selected based on the first argument, a number. The first message is +// selected if the argument is singular (identified by the selector "one") and +// the second message is selected in all other cases. The selectors are defined +// by the plural rules defined in CLDR. The selector "other" is special and will +// always match. Each language always defines one of the linguistic categories +// to be "other." For English, singular is "one" and plural is "other". +// +// Selects can be nested. This allows selecting sentences based on features of +// multiple arguments or multiple linguistic properties of a single argument. +// +// +// String interpolation +// +// There is often a lot of commonality between the possible variants of a +// message. For instance, in the example above the word "minute" varies based on +// the plural catogory of the argument, but the rest of the sentence is +// identical. Using interpolation the above message can be rewritten as: +// +// catalog.Set(language.English, "You are %d minute(s) late.", +// catalog.Var("minutes", +// plural.Select(1, "one", "minute", "other", "minutes")), +// catalog.String("You are %[1]d ${minutes} late.")) +// +// Var is defined to return the variable name if the message does not yield a +// match. This allows us to further simplify this snippet to +// +// catalog.Set(language.English, "You are %d minute(s) late.", +// catalog.Var("minutes", plural.Select(1, "one", "minute")), +// catalog.String("You are %d ${minutes} late.")) +// +// Overall this is still only a minor improvement, but things can get a lot more +// unwieldy if more than one linguistic feature is used to determine a message +// variant. Consider the following example: +// +// // argument 1: list of hosts, argument 2: list of guests +// catalog.Set(language.English, "%[1]v invite(s) %[2]v to their party.", +// catalog.Var("their", +// plural.Select(1, +// "one", gender.Select(1, "female", "her", "other", "his"))), +// catalog.Var("invites", plural.Select(1, "one", "invite")) +// catalog.String("%[1]v ${invites} %[2]v to ${their} party.")), +// +// Without variable substitution, this would have to be written as +// +// // argument 1: list of hosts, argument 2: list of guests +// catalog.Set(language.English, "%[1]v invite(s) %[2]v to their party.", +// plural.Select(1, +// "one", gender.Select(1, +// "female", "%[1]v invites %[2]v to her party." +// "other", "%[1]v invites %[2]v to his party."), +// "other", "%[1]v invites %[2]v to their party.") +// +// Not necessarily shorter, but using variables there is less duplication and +// the messages are more maintenance friendly. Moreover, languages may have up +// to six plural forms. This makes the use of variables more welcome. +// +// Different messages using the same inflections can reuse variables by moving +// them to macros. Using macros we can rewrite the message as: +// +// // argument 1: list of hosts, argument 2: list of guests +// catalog.SetString(language.English, "%[1]v invite(s) %[2]v to their party.", +// "%[1]v ${invites(1)} %[2]v to ${their(1)} party.") +// +// Where the following macros were defined separately. +// +// catalog.SetMacro(language.English, "invites", plural.Select(1, "one", "invite")) +// catalog.SetMacro(language.English, "their", plural.Select(1, +// "one", gender.Select(1, "female", "her", "other", "his"))), +// +// Placeholders use parentheses and the arguments to invoke a macro. +// +// +// Looking up messages +// +// Message lookup using Catalogs is typically only done by specialized packages +// and is not something the user should be concerned with. For instance, to +// express the tardiness of a user using the related message we defined earlier, +// the user may use the package message like so: +// +// p := message.NewPrinter(language.English) +// p.Printf("You are %d minute(s) late.", 5) +// +// Which would print: +// You are 5 minutes late. +// +// +// This package is UNDER CONSTRUCTION and its API may change. +package catalog // import "golang.org/x/text/message/catalog" + +// TODO: +// Some way to freeze a catalog. +// - Locking on each lockup turns out to be about 50% of the total running time +// for some of the benchmarks in the message package. +// Consider these: +// - Sequence type to support sequences in user-defined messages. +// - Garbage collection: Remove dictionaries that can no longer be reached +// as other dictionaries have been added that cover all possible keys. + +import ( + "errors" + "fmt" + + "golang.org/x/text/internal" + + "golang.org/x/text/internal/catmsg" + "golang.org/x/text/language" +) + +// A Catalog allows lookup of translated messages. +type Catalog interface { + // Languages returns all languages for which the Catalog contains variants. + Languages() []language.Tag + + // Matcher returns a Matcher for languages from this Catalog. + Matcher() language.Matcher + + // A Context is used for evaluating Messages. + Context(tag language.Tag, r catmsg.Renderer) *Context + + // This method also makes Catalog a private interface. + lookup(tag language.Tag, key string) (data string, ok bool) +} + +// NewFromMap creates a Catalog from the given map. If a Dictionary is +// underspecified the entry is retrieved from a parent language. +func NewFromMap(dictionaries map[string]Dictionary, opts ...Option) (Catalog, error) { + options := options{} + for _, o := range opts { + o(&options) + } + c := &catalog{ + dicts: map[language.Tag]Dictionary{}, + } + _, hasFallback := dictionaries[options.fallback.String()] + if hasFallback { + // TODO: Should it be okay to not have a fallback language? + // Catalog generators could enforce there is always a fallback. + c.langs = append(c.langs, options.fallback) + } + for lang, dict := range dictionaries { + tag, err := language.Parse(lang) + if err != nil { + return nil, fmt.Errorf("catalog: invalid language tag %q", lang) + } + if _, ok := c.dicts[tag]; ok { + return nil, fmt.Errorf("catalog: duplicate entry for tag %q after normalization", tag) + } + c.dicts[tag] = dict + if !hasFallback || tag != options.fallback { + c.langs = append(c.langs, tag) + } + } + if hasFallback { + internal.SortTags(c.langs[1:]) + } else { + internal.SortTags(c.langs) + } + c.matcher = language.NewMatcher(c.langs) + return c, nil +} + +// A Dictionary is a source of translations for a single language. +type Dictionary interface { + // Lookup returns a message compiled with catmsg.Compile for the given key. + // It returns false for ok if such a message could not be found. + Lookup(key string) (data string, ok bool) +} + +type catalog struct { + langs []language.Tag + dicts map[language.Tag]Dictionary + macros store + matcher language.Matcher +} + +func (c *catalog) Languages() []language.Tag { return c.langs } +func (c *catalog) Matcher() language.Matcher { return c.matcher } + +func (c *catalog) lookup(tag language.Tag, key string) (data string, ok bool) { + for ; ; tag = tag.Parent() { + if dict, ok := c.dicts[tag]; ok { + if data, ok := dict.Lookup(key); ok { + return data, true + } + } + if tag == language.Und { + break + } + } + return "", false +} + +// Context returns a Context for formatting messages. +// Only one Message may be formatted per context at any given time. +func (c *catalog) Context(tag language.Tag, r catmsg.Renderer) *Context { + return &Context{ + cat: c, + tag: tag, + dec: catmsg.NewDecoder(tag, r, &dict{&c.macros, tag}), + } +} + +// A Builder allows building a Catalog programmatically. +type Builder struct { + options + matcher language.Matcher + + index store + macros store +} + +type options struct { + fallback language.Tag +} + +// An Option configures Catalog behavior. +type Option func(*options) + +// Fallback specifies the default fallback language. The default is Und. +func Fallback(tag language.Tag) Option { + return func(o *options) { o.fallback = tag } +} + +// TODO: +// // Catalogs specifies one or more sources for a Catalog. +// // Lookups are in order. +// // This can be changed inserting a Catalog used for setting, which implements +// // Loader, used for setting in the chain. +// func Catalogs(d ...Loader) Option { +// return nil +// } +// +// func Delims(start, end string) Option {} +// +// func Dict(tag language.Tag, d ...Dictionary) Option + +// NewBuilder returns an empty mutable Catalog. +func NewBuilder(opts ...Option) *Builder { + c := &Builder{} + for _, o := range opts { + o(&c.options) + } + return c +} + +// SetString is shorthand for Set(tag, key, String(msg)). +func (c *Builder) SetString(tag language.Tag, key string, msg string) error { + return c.set(tag, key, &c.index, String(msg)) +} + +// Set sets the translation for the given language and key. +// +// When evaluation this message, the first Message in the sequence to msgs to +// evaluate to a string will be the message returned. +func (c *Builder) Set(tag language.Tag, key string, msg ...Message) error { + return c.set(tag, key, &c.index, msg...) +} + +// SetMacro defines a Message that may be substituted in another message. +// The arguments to a macro Message are passed as arguments in the +// placeholder the form "${foo(arg1, arg2)}". +func (c *Builder) SetMacro(tag language.Tag, name string, msg ...Message) error { + return c.set(tag, name, &c.macros, msg...) +} + +// ErrNotFound indicates there was no message for the given key. +var ErrNotFound = errors.New("catalog: message not found") + +// String specifies a plain message string. It can be used as fallback if no +// other strings match or as a simple standalone message. +// +// It is an error to pass more than one String in a message sequence. +func String(name string) Message { + return catmsg.String(name) +} + +// Var sets a variable that may be substituted in formatting patterns using +// named substitution of the form "${name}". The name argument is used as a +// fallback if the statements do not produce a match. The statement sequence may +// not contain any Var calls. +// +// The name passed to a Var must be unique within message sequence. +func Var(name string, msg ...Message) Message { + return &catmsg.Var{Name: name, Message: firstInSequence(msg)} +} + +// Context returns a Context for formatting messages. +// Only one Message may be formatted per context at any given time. +func (b *Builder) Context(tag language.Tag, r catmsg.Renderer) *Context { + return &Context{ + cat: b, + tag: tag, + dec: catmsg.NewDecoder(tag, r, &dict{&b.macros, tag}), + } +} + +// A Context is used for evaluating Messages. +// Only one Message may be formatted per context at any given time. +type Context struct { + cat Catalog + tag language.Tag // TODO: use compact index. + dec *catmsg.Decoder +} + +// Execute looks up and executes the message with the given key. +// It returns ErrNotFound if no message could be found in the index. +func (c *Context) Execute(key string) error { + data, ok := c.cat.lookup(c.tag, key) + if !ok { + return ErrNotFound + } + return c.dec.Execute(data) +} diff --git a/vendor/golang.org/x/text/message/catalog/catalog_test.go b/vendor/golang.org/x/text/message/catalog/catalog_test.go new file mode 100644 index 0000000..3de4c52 --- /dev/null +++ b/vendor/golang.org/x/text/message/catalog/catalog_test.go @@ -0,0 +1,296 @@ +// Copyright 2017 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. + +package catalog + +import ( + "bytes" + "path" + "reflect" + "strings" + "testing" + + "golang.org/x/text/internal/catmsg" + "golang.org/x/text/language" +) + +type entry struct { + tag, key string + msg interface{} +} + +func langs(s string) []language.Tag { + t, _, _ := language.ParseAcceptLanguage(s) + return t +} + +type testCase struct { + desc string + cat []entry + lookup []entry + fallback string + match []string + tags []language.Tag +} + +var testCases = []testCase{{ + desc: "empty catalog", + lookup: []entry{ + {"en", "key", ""}, + {"en", "", ""}, + {"nl", "", ""}, + }, + match: []string{ + "gr -> und", + "en-US -> und", + "af -> und", + }, + tags: nil, // not an empty list. +}, { + desc: "one entry", + cat: []entry{ + {"en", "hello", "Hello!"}, + }, + lookup: []entry{ + {"und", "hello", ""}, + {"nl", "hello", ""}, + {"en", "hello", "Hello!"}, + {"en-US", "hello", "Hello!"}, + {"en-GB", "hello", "Hello!"}, + {"en-oxendict", "hello", "Hello!"}, + {"en-oxendict-u-ms-metric", "hello", "Hello!"}, + }, + match: []string{ + "gr -> en", + "en-US -> en-u-rg-uszzzz", + }, + tags: langs("en"), +}, { + desc: "hierarchical languages", + cat: []entry{ + {"en", "hello", "Hello!"}, + {"en-GB", "hello", "Hellø!"}, + {"en-US", "hello", "Howdy!"}, + {"en", "greetings", "Greetings!"}, + {"gsw", "hello", "Grüetzi!"}, + }, + lookup: []entry{ + {"und", "hello", ""}, + {"nl", "hello", ""}, + {"en", "hello", "Hello!"}, + {"en-US", "hello", "Howdy!"}, + {"en-GB", "hello", "Hellø!"}, + {"en-oxendict", "hello", "Hello!"}, + {"en-US-oxendict-u-ms-metric", "hello", "Howdy!"}, + + {"und", "greetings", ""}, + {"nl", "greetings", ""}, + {"en", "greetings", "Greetings!"}, + {"en-US", "greetings", "Greetings!"}, + {"en-GB", "greetings", "Greetings!"}, + {"en-oxendict", "greetings", "Greetings!"}, + {"en-US-oxendict-u-ms-metric", "greetings", "Greetings!"}, + }, + fallback: "gsw", + match: []string{ + "gr -> gsw", + "en-US -> en-US", + }, + tags: langs("gsw, en, en-GB, en-US"), +}, { + desc: "variables", + cat: []entry{ + {"en", "hello %s", []Message{ + Var("person", String("Jane")), + String("Hello ${person}!"), + }}, + {"en", "hello error", []Message{ + Var("person", String("Jane")), + noMatchMessage{}, // trigger sequence path. + String("Hello ${person."), + }}, + {"en", "fallback to var value", []Message{ + Var("you", noMatchMessage{}, noMatchMessage{}), + String("Hello ${you}."), + }}, + {"en", "scopes", []Message{ + Var("person1", String("Mark")), + Var("person2", String("Jane")), + Var("couple", + Var("person1", String("Joe")), + String("${person1} and ${person2}")), + String("Hello ${couple}."), + }}, + {"en", "missing var", String("Hello ${missing}.")}, + }, + lookup: []entry{ + {"en", "hello %s", "Hello Jane!"}, + {"en", "hello error", "Hello $!(MISSINGBRACE)"}, + {"en", "fallback to var value", "Hello you."}, + {"en", "scopes", "Hello Joe and Jane."}, + {"en", "missing var", "Hello missing."}, + }, + tags: langs("en"), +}, { + desc: "macros", + cat: []entry{ + {"en", "macro1", String("Hello ${macro1(1)}.")}, + {"en", "macro2", String("Hello ${ macro1(2) }!")}, + {"en", "macroWS", String("Hello ${ macro1( 2 ) }!")}, + {"en", "missing", String("Hello ${ missing(1 }.")}, + {"en", "badnum", String("Hello ${ badnum(1b) }.")}, + {"en", "undefined", String("Hello ${ undefined(1) }.")}, + {"en", "macroU", String("Hello ${ macroU(2) }!")}, + }, + lookup: []entry{ + {"en", "macro1", "Hello Joe."}, + {"en", "macro2", "Hello Joe!"}, + {"en-US", "macroWS", "Hello Joe!"}, + {"en-NL", "missing", "Hello $!(MISSINGPAREN)."}, + {"en", "badnum", "Hello $!(BADNUM)."}, + {"en", "undefined", "Hello undefined."}, + {"en", "macroU", "Hello macroU!"}, + }, + tags: langs("en"), +}} + +func setMacros(b *Builder) { + b.SetMacro(language.English, "macro1", String("Joe")) + b.SetMacro(language.Und, "macro2", String("${macro1(1)}")) + b.SetMacro(language.English, "macroU", noMatchMessage{}) +} + +type buildFunc func(t *testing.T, tc testCase) Catalog + +func initBuilder(t *testing.T, tc testCase) Catalog { + options := []Option{} + if tc.fallback != "" { + options = append(options, Fallback(language.MustParse(tc.fallback))) + } + cat := NewBuilder(options...) + for _, e := range tc.cat { + tag := language.MustParse(e.tag) + switch msg := e.msg.(type) { + case string: + + cat.SetString(tag, e.key, msg) + case Message: + cat.Set(tag, e.key, msg) + case []Message: + cat.Set(tag, e.key, msg...) + } + } + setMacros(cat) + return cat +} + +type dictionary map[string]string + +func (d dictionary) Lookup(key string) (data string, ok bool) { + data, ok = d[key] + return data, ok +} + +func initCatalog(t *testing.T, tc testCase) Catalog { + m := map[string]Dictionary{} + for _, e := range tc.cat { + m[e.tag] = dictionary{} + } + for _, e := range tc.cat { + var msg Message + switch x := e.msg.(type) { + case string: + msg = String(x) + case Message: + msg = x + case []Message: + msg = firstInSequence(x) + } + data, _ := catmsg.Compile(language.MustParse(e.tag), nil, msg) + m[e.tag].(dictionary)[e.key] = data + } + options := []Option{} + if tc.fallback != "" { + options = append(options, Fallback(language.MustParse(tc.fallback))) + } + c, err := NewFromMap(m, options...) + if err != nil { + t.Fatal(err) + } + // TODO: implement macros for fixed catalogs. + b := NewBuilder() + setMacros(b) + c.(*catalog).macros.index = b.macros.index + return c +} + +func TestMatcher(t *testing.T) { + test := func(t *testing.T, init buildFunc) { + for _, tc := range testCases { + for _, s := range tc.match { + a := strings.Split(s, "->") + t.Run(path.Join(tc.desc, a[0]), func(t *testing.T) { + cat := init(t, tc) + got, _ := language.MatchStrings(cat.Matcher(), a[0]) + want := language.MustParse(strings.TrimSpace(a[1])) + if got != want { + t.Errorf("got %q; want %q", got, want) + } + }) + } + } + } + t.Run("Builder", func(t *testing.T) { test(t, initBuilder) }) + t.Run("Catalog", func(t *testing.T) { test(t, initCatalog) }) +} + +func TestCatalog(t *testing.T) { + test := func(t *testing.T, init buildFunc) { + for _, tc := range testCases { + cat := init(t, tc) + wantTags := tc.tags + if got := cat.Languages(); !reflect.DeepEqual(got, wantTags) { + t.Errorf("%s:Languages: got %v; want %v", tc.desc, got, wantTags) + } + + for _, e := range tc.lookup { + t.Run(path.Join(tc.desc, e.tag, e.key), func(t *testing.T) { + tag := language.MustParse(e.tag) + buf := testRenderer{} + ctx := cat.Context(tag, &buf) + want := e.msg.(string) + err := ctx.Execute(e.key) + gotFound := err != ErrNotFound + wantFound := want != "" + if gotFound != wantFound { + t.Fatalf("err: got %v (%v); want %v", gotFound, err, wantFound) + } + if got := buf.buf.String(); got != want { + t.Errorf("Lookup:\ngot %q\nwant %q", got, want) + } + }) + } + } + } + t.Run("Builder", func(t *testing.T) { test(t, initBuilder) }) + t.Run("Catalog", func(t *testing.T) { test(t, initCatalog) }) +} + +type testRenderer struct { + buf bytes.Buffer +} + +func (f *testRenderer) Arg(i int) interface{} { return nil } +func (f *testRenderer) Render(s string) { f.buf.WriteString(s) } + +var msgNoMatch = catmsg.Register("no match", func(d *catmsg.Decoder) bool { + return false // no match +}) + +type noMatchMessage struct{} + +func (noMatchMessage) Compile(e *catmsg.Encoder) error { + e.EncodeMessageType(msgNoMatch) + return catmsg.ErrIncomplete +} diff --git a/vendor/golang.org/x/text/message/catalog/dict.go b/vendor/golang.org/x/text/message/catalog/dict.go new file mode 100644 index 0000000..a0eb818 --- /dev/null +++ b/vendor/golang.org/x/text/message/catalog/dict.go @@ -0,0 +1,129 @@ +// Copyright 2017 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. + +package catalog + +import ( + "sync" + + "golang.org/x/text/internal" + "golang.org/x/text/internal/catmsg" + "golang.org/x/text/language" +) + +// TODO: +// Dictionary returns a Dictionary that returns the first Message, using the +// given language tag, that matches: +// 1. the last one registered by one of the Set methods +// 2. returned by one of the Loaders +// 3. repeat from 1. using the parent language +// This approach allows messages to be underspecified. +// func (c *Catalog) Dictionary(tag language.Tag) (Dictionary, error) { +// // TODO: verify dictionary exists. +// return &dict{&c.index, tag}, nil +// } + +type dict struct { + s *store + tag language.Tag // TODO: make compact tag. +} + +func (d *dict) Lookup(key string) (data string, ok bool) { + return d.s.lookup(d.tag, key) +} + +func (b *Builder) lookup(tag language.Tag, key string) (data string, ok bool) { + return b.index.lookup(tag, key) +} + +func (c *Builder) set(tag language.Tag, key string, s *store, msg ...Message) error { + data, err := catmsg.Compile(tag, &dict{&c.macros, tag}, firstInSequence(msg)) + + s.mutex.Lock() + defer s.mutex.Unlock() + + m := s.index[tag] + if m == nil { + m = msgMap{} + if s.index == nil { + s.index = map[language.Tag]msgMap{} + } + c.matcher = nil + s.index[tag] = m + } + + m[key] = data + return err +} + +func (c *Builder) Matcher() language.Matcher { + c.index.mutex.RLock() + m := c.matcher + c.index.mutex.RUnlock() + if m != nil { + return m + } + + c.index.mutex.Lock() + if c.matcher == nil { + c.matcher = language.NewMatcher(c.unlockedLanguages()) + } + m = c.matcher + c.index.mutex.Unlock() + return m +} + +type store struct { + mutex sync.RWMutex + index map[language.Tag]msgMap +} + +type msgMap map[string]string + +func (s *store) lookup(tag language.Tag, key string) (data string, ok bool) { + s.mutex.RLock() + defer s.mutex.RUnlock() + + for ; ; tag = tag.Parent() { + if msgs, ok := s.index[tag]; ok { + if msg, ok := msgs[key]; ok { + return msg, true + } + } + if tag == language.Und { + break + } + } + return "", false +} + +// Languages returns all languages for which the Catalog contains variants. +func (b *Builder) Languages() []language.Tag { + s := &b.index + s.mutex.RLock() + defer s.mutex.RUnlock() + + return b.unlockedLanguages() +} + +func (b *Builder) unlockedLanguages() []language.Tag { + s := &b.index + if len(s.index) == 0 { + return nil + } + tags := make([]language.Tag, 0, len(s.index)) + _, hasFallback := s.index[b.options.fallback] + offset := 0 + if hasFallback { + tags = append(tags, b.options.fallback) + offset = 1 + } + for t := range s.index { + if t != b.options.fallback { + tags = append(tags, t) + } + } + internal.SortTags(tags[offset:]) + return tags +} diff --git a/vendor/golang.org/x/text/message/catalog/go19.go b/vendor/golang.org/x/text/message/catalog/go19.go new file mode 100644 index 0000000..147fc7c --- /dev/null +++ b/vendor/golang.org/x/text/message/catalog/go19.go @@ -0,0 +1,15 @@ +// Copyright 2017 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 go1.9 + +package catalog + +import "golang.org/x/text/internal/catmsg" + +// A Message holds a collection of translations for the same phrase that may +// vary based on the values of substitution arguments. +type Message = catmsg.Message + +type firstInSequence = catmsg.FirstOf diff --git a/vendor/golang.org/x/text/message/catalog/gopre19.go b/vendor/golang.org/x/text/message/catalog/gopre19.go new file mode 100644 index 0000000..a9753b9 --- /dev/null +++ b/vendor/golang.org/x/text/message/catalog/gopre19.go @@ -0,0 +1,23 @@ +// Copyright 2017 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 !go1.9 + +package catalog + +import "golang.org/x/text/internal/catmsg" + +// A Message holds a collection of translations for the same phrase that may +// vary based on the values of substitution arguments. +type Message interface { + catmsg.Message +} + +func firstInSequence(m []Message) catmsg.Message { + a := []catmsg.Message{} + for _, m := range m { + a = append(a, m) + } + return catmsg.FirstOf(a) +} diff --git a/vendor/golang.org/x/text/message/catalog_test.go b/vendor/golang.org/x/text/message/catalog_test.go index 3b693c9..d1fdfde 100644 --- a/vendor/golang.org/x/text/message/catalog_test.go +++ b/vendor/golang.org/x/text/message/catalog_test.go @@ -1,98 +1,46 @@ -// Copyright 2015 The Go Authors. All rights reserved. +// Copyright 2017 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. package message import ( - "reflect" + "strings" "testing" - "golang.org/x/text/internal" "golang.org/x/text/language" + "golang.org/x/text/message/catalog" ) -type entry struct{ tag, key, msg string } - -var testCases = []struct { - desc string - cat []entry - lookup []entry -}{{ - desc: "empty catalog", - lookup: []entry{ - {"en", "key", ""}, - {"en", "", ""}, - {"nl", "", ""}, - }, -}, { - desc: "one entry", - cat: []entry{ - {"en", "hello", "Hello!"}, - }, - lookup: []entry{ - {"und", "hello", ""}, - {"nl", "hello", ""}, - {"en", "hello", "Hello!"}, - {"en-US", "hello", "Hello!"}, - {"en-GB", "hello", "Hello!"}, - {"en-oxendict", "hello", "Hello!"}, - {"en-oxendict-u-ms-metric", "hello", "Hello!"}, - }, -}, { - desc: "hierarchical languages", - cat: []entry{ - {"en", "hello", "Hello!"}, - {"en-GB", "hello", "Hellø!"}, - {"en-US", "hello", "Howdy!"}, - {"en", "greetings", "Greetings!"}, - }, - lookup: []entry{ - {"und", "hello", ""}, - {"nl", "hello", ""}, - {"en", "hello", "Hello!"}, - {"en-US", "hello", "Howdy!"}, - {"en-GB", "hello", "Hellø!"}, - {"en-oxendict", "hello", "Hello!"}, - {"en-US-oxendict-u-ms-metric", "hello", "Howdy!"}, - - {"und", "greetings", ""}, - {"nl", "greetings", ""}, - {"en", "greetings", "Greetings!"}, - {"en-US", "greetings", "Greetings!"}, - {"en-GB", "greetings", "Greetings!"}, - {"en-oxendict", "greetings", "Greetings!"}, - {"en-US-oxendict-u-ms-metric", "greetings", "Greetings!"}, - }, -}} - -func initCat(entries []entry) (*Catalog, []language.Tag) { - tags := []language.Tag{} - cat := newCatalog() - for _, e := range entries { - tag := language.MustParse(e.tag) - tags = append(tags, tag) - cat.SetString(tag, e.key, e.msg) - } - return cat, internal.UniqueTags(tags) -} - -func TestCatalog(t *testing.T) { +func TestMatchLanguage(t *testing.T) { + c := catalog.NewBuilder(catalog.Fallback(language.English)) + c.SetString(language.Bengali, "", "") + c.SetString(language.English, "", "") + c.SetString(language.German, "", "") + + saved := DefaultCatalog + defer func() { DefaultCatalog = saved }() + DefaultCatalog = c + + testCases := []struct { + args string // '|'-separated list + want string + }{{ + args: "de-CH", + want: "de-u-rg-chzzzz", + }, { + args: "bn-u-nu-latn|en-US,en;q=0.9,de;q=0.8,nl;q=0.7", + want: "bn-u-nu-latn", + }, { + args: "gr", + want: "en", + }} for _, tc := range testCases { - cat, wantTags := initCat(tc.cat) - - // languages - if got := cat.Languages(); !reflect.DeepEqual(got, wantTags) { - t.Errorf("%s:Languages: got %v; want %v", tc.desc, got, wantTags) - } - - // Lookup - for _, e := range tc.lookup { - tag := language.MustParse(e.tag) - msg, ok := cat.get(tag, e.key) - if okWant := e.msg != ""; ok != okWant || msg != e.msg { - t.Errorf("%s:Lookup(%s, %s) = %s, %v; want %s, %v", tc.desc, tag, e.key, msg, ok, e.msg, okWant) + t.Run(tc.args, func(t *testing.T) { + got := MatchLanguage(strings.Split(tc.args, "|")...) + if got != language.Make(tc.want) { + t.Errorf("got %q; want %q", got, tc.want) } - } + }) } } diff --git a/vendor/golang.org/x/text/message/doc.go b/vendor/golang.org/x/text/message/doc.go new file mode 100644 index 0000000..b9584a2 --- /dev/null +++ b/vendor/golang.org/x/text/message/doc.go @@ -0,0 +1,101 @@ +// Copyright 2017 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. + +// Package message implements formatted I/O for localized strings with functions +// analogous to the fmt's print functions. It is a drop-in replacement for fmt. +// +// +// Localized Formatting +// +// A format string can be localized by replacing any of the print functions of +// fmt with an equivalent call to a Printer. +// +// p := message.NewPrinter(message.MatchLanguage("en")) +// p.Println(123456.78) // Prints 123,456.78 +// +// p.Printf("%d ducks in a row", 4331) // Prints 4,331 ducks in a row +// +// p := message.NewPrinter(message.MatchLanguage("nl")) +// p.Println("Hoogte: %f meter", 1244.9) // Prints Hoogte: 1.244,9 meter +// +// p := message.NewPrinter(message.MatchLanguage("bn")) +// p.Println(123456.78) // Prints ১,২৩,৪৫৬.৭৮ +// +// Printer currently supports numbers and specialized types for which packages +// exist in x/text. Other builtin types such as time.Time and slices are +// planned. +// +// Format strings largely have the same meaning as with fmt with the following +// notable exceptions: +// - flag # always resorts to fmt for printing +// - verb 'f', 'e', 'g', 'd' use localized formatting unless the '#' flag is +// specified. +// - verb 'm' inserts a translation of a string argument. +// +// See package fmt for more options. +// +// +// Translation +// +// The format strings that are passed to Printf, Sprintf, Fprintf, or Errorf +// are used as keys to look up translations for the specified languages. +// More on how these need to be specified below. +// +// One can use arbitrary keys to distinguish between otherwise ambiguous +// strings: +// p := message.NewPrinter(language.English) +// p.Printf("archive(noun)") // Prints "archive" +// p.Printf("archive(verb)") // Prints "archive" +// +// p := message.NewPrinter(language.German) +// p.Printf("archive(noun)") // Prints "Archiv" +// p.Printf("archive(verb)") // Prints "archivieren" +// +// To retain the fallback functionality, use Key: +// p.Printf(message.Key("archive(noun)", "archive")) +// p.Printf(message.Key("archive(verb)", "archive")) +// +// +// Translation Pipeline +// +// Format strings that contain text need to be translated to support different +// locales. The first step is to extract strings that need to be translated. +// +// 1. Install gotext +// go get -u golang.org/x/text/cmd/gotext +// gotext -help +// +// 2. Mark strings in your source to be translated by using message.Printer, +// instead of the functions of the fmt package. +// +// 3. Extract the strings from your source +// +// gotext extract +// +// The output will be written to the textdata directory. +// +// 4. Send the files for translation +// +// It is planned to support multiple formats, but for now one will have to +// rewrite the JSON output to the desired format. +// +// 5. Inject translations into program +// +// 6. Repeat from 2 +// +// Right now this has to be done programmatically with calls to Set or +// SetString. These functions as well as the methods defined in +// see also package golang.org/x/text/message/catalog can be used to implement +// either dynamic or static loading of messages. +// +// +// Plural and Gender Forms +// +// Translated messages can vary based on the plural and gender forms of +// substitution values. In general, it is up to the translators to provide +// alternative translations for such forms. See the packages in +// golang.org/x/text/feature and golang.org/x/text/message/catalog for more +// information. +// +package message diff --git a/vendor/golang.org/x/text/message/examples_test.go b/vendor/golang.org/x/text/message/examples_test.go new file mode 100644 index 0000000..8c3dff5 --- /dev/null +++ b/vendor/golang.org/x/text/message/examples_test.go @@ -0,0 +1,70 @@ +// Copyright 2017 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. + +package message_test + +import ( + "fmt" + "net/http" + + "golang.org/x/text/language" + "golang.org/x/text/message" +) + +func Example_http() { + // languages supported by this service: + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + lang, _ := r.Cookie("lang") + accept := r.Header.Get("Accept-Language") + fallback := "en" + tag := message.MatchLanguage(lang.String(), accept, fallback) + + p := message.NewPrinter(tag) + + p.Fprintln(w, "User language is", tag) + }) +} + +func ExamplePrinter_numbers() { + for _, lang := range []string{"en", "de", "de-CH", "fr", "bn"} { + p := message.NewPrinter(language.Make(lang)) + p.Printf("%-6s %g\n", lang, 123456.78) + } + + // Output: + // en 123,456.78 + // de 123.456,78 + // de-CH 123’456.78 + // fr 123 456,78 + // bn ১,২৩,৪৫৬.৭৮ +} + +func ExamplePrinter_mVerb() { + message.SetString(language.Dutch, "You have chosen to play %m.", "U heeft ervoor gekozen om %m te spelen.") + message.SetString(language.Dutch, "basketball", "basketbal") + message.SetString(language.Dutch, "hockey", "ijshockey") + message.SetString(language.Dutch, "soccer", "voetbal") + message.SetString(language.BritishEnglish, "soccer", "football") + + for _, sport := range []string{"soccer", "basketball", "hockey"} { + for _, lang := range []string{"en", "en-GB", "nl"} { + p := message.NewPrinter(language.Make(lang)) + fmt.Printf("%-6s %s\n", lang, p.Sprintf("You have chosen to play %m.", sport)) + } + fmt.Println() + } + + // Output: + // en You have chosen to play soccer. + // en-GB You have chosen to play football. + // nl U heeft ervoor gekozen om voetbal te spelen. + // + // en You have chosen to play basketball. + // en-GB You have chosen to play basketball. + // nl U heeft ervoor gekozen om basketbal te spelen. + // + // en You have chosen to play hockey. + // en-GB You have chosen to play hockey. + // nl U heeft ervoor gekozen om ijshockey te spelen. +} diff --git a/vendor/golang.org/x/text/message/fmt_test.go b/vendor/golang.org/x/text/message/fmt_test.go new file mode 100644 index 0000000..2d6872b --- /dev/null +++ b/vendor/golang.org/x/text/message/fmt_test.go @@ -0,0 +1,1871 @@ +// Copyright 2017 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. + +package message + +import ( + "bytes" + "fmt" + "io" + "math" + "reflect" + "runtime" + "strings" + "testing" + "time" + + "golang.org/x/text/language" +) + +type ( + renamedBool bool + renamedInt int + renamedInt8 int8 + renamedInt16 int16 + renamedInt32 int32 + renamedInt64 int64 + renamedUint uint + renamedUint8 uint8 + renamedUint16 uint16 + renamedUint32 uint32 + renamedUint64 uint64 + renamedUintptr uintptr + renamedString string + renamedBytes []byte + renamedFloat32 float32 + renamedFloat64 float64 + renamedComplex64 complex64 + renamedComplex128 complex128 +) + +func TestFmtInterface(t *testing.T) { + p := NewPrinter(language.Und) + var i1 interface{} + i1 = "abc" + s := p.Sprintf("%s", i1) + if s != "abc" { + t.Errorf(`Sprintf("%%s", empty("abc")) = %q want %q`, s, "abc") + } +} + +var ( + NaN = math.NaN() + posInf = math.Inf(1) + negInf = math.Inf(-1) + + intVar = 0 + + array = [5]int{1, 2, 3, 4, 5} + iarray = [4]interface{}{1, "hello", 2.5, nil} + slice = array[:] + islice = iarray[:] +) + +type A struct { + i int + j uint + s string + x []int +} + +type I int + +func (i I) String() string { + p := NewPrinter(language.Und) + return p.Sprintf("<%d>", int(i)) +} + +type B struct { + I I + j int +} + +type C struct { + i int + B +} + +type F int + +func (f F) Format(s fmt.State, c rune) { + p := NewPrinter(language.Und) + p.Fprintf(s, "<%c=F(%d)>", c, int(f)) +} + +type G int + +func (g G) GoString() string { + p := NewPrinter(language.Und) + return p.Sprintf("GoString(%d)", int(g)) +} + +type S struct { + F F // a struct field that Formats + G G // a struct field that GoStrings +} + +type SI struct { + I interface{} +} + +// P is a type with a String method with pointer receiver for testing %p. +type P int + +var pValue P + +func (p *P) String() string { + return "String(p)" +} + +var barray = [5]renamedUint8{1, 2, 3, 4, 5} +var bslice = barray[:] + +type byteStringer byte + +func (byteStringer) String() string { + return "X" +} + +var byteStringerSlice = []byteStringer{'h', 'e', 'l', 'l', 'o'} + +type byteFormatter byte + +func (byteFormatter) Format(f fmt.State, _ rune) { + p := NewPrinter(language.Und) + p.Fprint(f, "X") +} + +var byteFormatterSlice = []byteFormatter{'h', 'e', 'l', 'l', 'o'} + +var fmtTests = []struct { + fmt string + val interface{} + out string +}{ + // The behavior of the following tests differs from that of the fmt package. + + // Unlike with the fmt package, it is okay to have extra arguments for + // strings without format parameters. This is because it is impossible to + // distinguish between reordered or ordered format strings in this case. + // (For reordered format strings it is okay to not use arguments.) + {"", nil, ""}, + {"", 2, ""}, + {"no args", "hello", "no args"}, + + {"%017091901790959340919092959340919017929593813360", 0, "%!(NOVERB)"}, + {"%184467440737095516170v", 0, "%!(NOVERB)"}, + // Extra argument errors should format without flags set. + {"%010.2", "12345", "%!(NOVERB)"}, + + // Some key other differences, asides from localized values: + // - NaN values should not use affixes; so no signs (CLDR requirement) + // - Infinity uses patterns, so signs may be different (CLDR requirement) + // - The # flag is used to disable localization. + + // All following tests are analogous to those of the fmt package, but with + // localized numbers when appropriate. + {"%d", 12345, "12,345"}, + {"%v", 12345, "12,345"}, + {"%t", true, "true"}, + + // basic string + {"%s", "abc", "abc"}, + {"%q", "abc", `"abc"`}, + {"%x", "abc", "616263"}, + {"%x", "\xff\xf0\x0f\xff", "fff00fff"}, + {"%X", "\xff\xf0\x0f\xff", "FFF00FFF"}, + {"%x", "", ""}, + {"% x", "", ""}, + {"%#x", "", ""}, + {"%# x", "", ""}, + {"%x", "xyz", "78797a"}, + {"%X", "xyz", "78797A"}, + {"% x", "xyz", "78 79 7a"}, + {"% X", "xyz", "78 79 7A"}, + {"%#x", "xyz", "0x78797a"}, + {"%#X", "xyz", "0X78797A"}, + {"%# x", "xyz", "0x78 0x79 0x7a"}, + {"%# X", "xyz", "0X78 0X79 0X7A"}, + + // basic bytes + {"%s", []byte("abc"), "abc"}, + {"%s", [3]byte{'a', 'b', 'c'}, "abc"}, + {"%s", &[3]byte{'a', 'b', 'c'}, "&abc"}, + {"%q", []byte("abc"), `"abc"`}, + {"%x", []byte("abc"), "616263"}, + {"%x", []byte("\xff\xf0\x0f\xff"), "fff00fff"}, + {"%X", []byte("\xff\xf0\x0f\xff"), "FFF00FFF"}, + {"%x", []byte(""), ""}, + {"% x", []byte(""), ""}, + {"%#x", []byte(""), ""}, + {"%# x", []byte(""), ""}, + {"%x", []byte("xyz"), "78797a"}, + {"%X", []byte("xyz"), "78797A"}, + {"% x", []byte("xyz"), "78 79 7a"}, + {"% X", []byte("xyz"), "78 79 7A"}, + {"%#x", []byte("xyz"), "0x78797a"}, + {"%#X", []byte("xyz"), "0X78797A"}, + {"%# x", []byte("xyz"), "0x78 0x79 0x7a"}, + {"%# X", []byte("xyz"), "0X78 0X79 0X7A"}, + + // escaped strings + {"%q", "", `""`}, + {"%#q", "", "``"}, + {"%q", "\"", `"\""`}, + {"%#q", "\"", "`\"`"}, + {"%q", "`", `"` + "`" + `"`}, + {"%#q", "`", `"` + "`" + `"`}, + {"%q", "\n", `"\n"`}, + {"%#q", "\n", `"\n"`}, + {"%q", `\n`, `"\\n"`}, + {"%#q", `\n`, "`\\n`"}, + {"%q", "abc", `"abc"`}, + {"%#q", "abc", "`abc`"}, + {"%q", "日本語", `"日本語"`}, + {"%+q", "日本語", `"\u65e5\u672c\u8a9e"`}, + {"%#q", "日本語", "`日本語`"}, + {"%#+q", "日本語", "`日本語`"}, + {"%q", "\a\b\f\n\r\t\v\"\\", `"\a\b\f\n\r\t\v\"\\"`}, + {"%+q", "\a\b\f\n\r\t\v\"\\", `"\a\b\f\n\r\t\v\"\\"`}, + {"%#q", "\a\b\f\n\r\t\v\"\\", `"\a\b\f\n\r\t\v\"\\"`}, + {"%#+q", "\a\b\f\n\r\t\v\"\\", `"\a\b\f\n\r\t\v\"\\"`}, + {"%q", "☺", `"☺"`}, + {"% q", "☺", `"☺"`}, // The space modifier should have no effect. + {"%+q", "☺", `"\u263a"`}, + {"%#q", "☺", "`☺`"}, + {"%#+q", "☺", "`☺`"}, + {"%10q", "⌘", ` "⌘"`}, + {"%+10q", "⌘", ` "\u2318"`}, + {"%-10q", "⌘", `"⌘" `}, + {"%+-10q", "⌘", `"\u2318" `}, + {"%010q", "⌘", `0000000"⌘"`}, + {"%+010q", "⌘", `00"\u2318"`}, + {"%-010q", "⌘", `"⌘" `}, // 0 has no effect when - is present. + {"%+-010q", "⌘", `"\u2318" `}, + {"%#8q", "\n", ` "\n"`}, + {"%#+8q", "\r", ` "\r"`}, + {"%#-8q", "\t", "` ` "}, + {"%#+-8q", "\b", `"\b" `}, + {"%q", "abc\xffdef", `"abc\xffdef"`}, + {"%+q", "abc\xffdef", `"abc\xffdef"`}, + {"%#q", "abc\xffdef", `"abc\xffdef"`}, + {"%#+q", "abc\xffdef", `"abc\xffdef"`}, + // Runes that are not printable. + {"%q", "\U0010ffff", `"\U0010ffff"`}, + {"%+q", "\U0010ffff", `"\U0010ffff"`}, + {"%#q", "\U0010ffff", "`􏿿`"}, + {"%#+q", "\U0010ffff", "`􏿿`"}, + // Runes that are not valid. + {"%q", string(0x110000), `"�"`}, + {"%+q", string(0x110000), `"\ufffd"`}, + {"%#q", string(0x110000), "`�`"}, + {"%#+q", string(0x110000), "`�`"}, + + // characters + {"%c", uint('x'), "x"}, + {"%c", 0xe4, "ä"}, + {"%c", 0x672c, "本"}, + {"%c", '日', "日"}, + {"%.0c", '⌘', "⌘"}, // Specifying precision should have no effect. + {"%3c", '⌘', " ⌘"}, + {"%-3c", '⌘', "⌘ "}, + // Runes that are not printable. + {"%c", '\U00000e00', "\u0e00"}, + {"%c", '\U0010ffff', "\U0010ffff"}, + // Runes that are not valid. + {"%c", -1, "�"}, + {"%c", 0xDC80, "�"}, + {"%c", rune(0x110000), "�"}, + {"%c", int64(0xFFFFFFFFF), "�"}, + {"%c", uint64(0xFFFFFFFFF), "�"}, + + // escaped characters + {"%q", uint(0), `'\x00'`}, + {"%+q", uint(0), `'\x00'`}, + {"%q", '"', `'"'`}, + {"%+q", '"', `'"'`}, + {"%q", '\'', `'\''`}, + {"%+q", '\'', `'\''`}, + {"%q", '`', "'`'"}, + {"%+q", '`', "'`'"}, + {"%q", 'x', `'x'`}, + {"%+q", 'x', `'x'`}, + {"%q", 'ÿ', `'ÿ'`}, + {"%+q", 'ÿ', `'\u00ff'`}, + {"%q", '\n', `'\n'`}, + {"%+q", '\n', `'\n'`}, + {"%q", '☺', `'☺'`}, + {"%+q", '☺', `'\u263a'`}, + {"% q", '☺', `'☺'`}, // The space modifier should have no effect. + {"%.0q", '☺', `'☺'`}, // Specifying precision should have no effect. + {"%10q", '⌘', ` '⌘'`}, + {"%+10q", '⌘', ` '\u2318'`}, + {"%-10q", '⌘', `'⌘' `}, + {"%+-10q", '⌘', `'\u2318' `}, + {"%010q", '⌘', `0000000'⌘'`}, + {"%+010q", '⌘', `00'\u2318'`}, + {"%-010q", '⌘', `'⌘' `}, // 0 has no effect when - is present. + {"%+-010q", '⌘', `'\u2318' `}, + // Runes that are not printable. + {"%q", '\U00000e00', `'\u0e00'`}, + {"%q", '\U0010ffff', `'\U0010ffff'`}, + // Runes that are not valid. + {"%q", int32(-1), "%!q(int32=-1)"}, + {"%q", 0xDC80, `'�'`}, + {"%q", rune(0x110000), "%!q(int32=1,114,112)"}, + {"%q", int64(0xFFFFFFFFF), "%!q(int64=68,719,476,735)"}, + {"%q", uint64(0xFFFFFFFFF), "%!q(uint64=68,719,476,735)"}, + + // width + {"%5s", "abc", " abc"}, + {"%2s", "\u263a", " ☺"}, + {"%-5s", "abc", "abc "}, + {"%-8q", "abc", `"abc" `}, + {"%05s", "abc", "00abc"}, + {"%08q", "abc", `000"abc"`}, + {"%5s", "abcdefghijklmnopqrstuvwxyz", "abcdefghijklmnopqrstuvwxyz"}, + {"%.5s", "abcdefghijklmnopqrstuvwxyz", "abcde"}, + {"%.0s", "日本語日本語", ""}, + {"%.5s", "日本語日本語", "日本語日本"}, + {"%.10s", "日本語日本語", "日本語日本語"}, + {"%.5s", []byte("日本語日本語"), "日本語日本"}, + {"%.5q", "abcdefghijklmnopqrstuvwxyz", `"abcde"`}, + {"%.5x", "abcdefghijklmnopqrstuvwxyz", "6162636465"}, + {"%.5q", []byte("abcdefghijklmnopqrstuvwxyz"), `"abcde"`}, + {"%.5x", []byte("abcdefghijklmnopqrstuvwxyz"), "6162636465"}, + {"%.3q", "日本語日本語", `"日本語"`}, + {"%.3q", []byte("日本語日本語"), `"日本語"`}, + {"%.1q", "日本語", `"日"`}, + {"%.1q", []byte("日本語"), `"日"`}, + {"%.1x", "日本語", "e6"}, + {"%.1X", []byte("日本語"), "E6"}, + {"%10.1q", "日本語日本語", ` "日"`}, + {"%10v", nil, " "}, + {"%-10v", nil, " "}, + + // integers + {"%d", uint(12345), "12,345"}, + {"%d", int(-12345), "-12,345"}, + {"%d", ^uint8(0), "255"}, + {"%d", ^uint16(0), "65,535"}, + {"%d", ^uint32(0), "4,294,967,295"}, + {"%d", ^uint64(0), "18,446,744,073,709,551,615"}, + {"%d", int8(-1 << 7), "-128"}, + {"%d", int16(-1 << 15), "-32,768"}, + {"%d", int32(-1 << 31), "-2,147,483,648"}, + {"%d", int64(-1 << 63), "-9,223,372,036,854,775,808"}, + {"%.d", 0, ""}, + {"%.0d", 0, ""}, + {"%6.0d", 0, " "}, + {"%06.0d", 0, " "}, + {"% d", 12345, " 12,345"}, + {"%+d", 12345, "+12,345"}, + {"%+d", -12345, "-12,345"}, + {"%b", 7, "111"}, + {"%b", -6, "-110"}, + {"%b", ^uint32(0), "11111111111111111111111111111111"}, + {"%b", ^uint64(0), "1111111111111111111111111111111111111111111111111111111111111111"}, + {"%b", int64(-1 << 63), zeroFill("-1", 63, "")}, + {"%o", 01234, "1234"}, + {"%#o", 01234, "01234"}, + {"%o", ^uint32(0), "37777777777"}, + {"%o", ^uint64(0), "1777777777777777777777"}, + {"%#X", 0, "0X0"}, + {"%x", 0x12abcdef, "12abcdef"}, + {"%X", 0x12abcdef, "12ABCDEF"}, + {"%x", ^uint32(0), "ffffffff"}, + {"%X", ^uint64(0), "FFFFFFFFFFFFFFFF"}, + {"%.20b", 7, "00000000000000000111"}, + {"%10d", 12345, " 12,345"}, + {"%10d", -12345, " -12,345"}, + {"%+10d", 12345, " +12,345"}, + {"%010d", 12345, "0,000,012,345"}, + {"%010d", -12345, "-0,000,012,345"}, + {"%20.8d", 1234, " 00,001,234"}, + {"%20.8d", -1234, " -00,001,234"}, + {"%020.8d", 1234, " 00,001,234"}, + {"%020.8d", -1234, " -00,001,234"}, + {"%-20.8d", 1234, "00,001,234 "}, + {"%-20.8d", -1234, "-00,001,234 "}, + {"%-#20.8x", 0x1234abc, "0x01234abc "}, + {"%-#20.8X", 0x1234abc, "0X01234ABC "}, + {"%-#20.8o", 01234, "00001234 "}, + + // Test correct f.intbuf overflow checks. + {"%068d", 1, "00," + strings.Repeat("000,", 21) + "001"}, + {"%068d", -1, "-00," + strings.Repeat("000,", 21) + "001"}, + {"%#.68x", 42, zeroFill("0x", 68, "2a")}, + {"%.68d", -42, "-00," + strings.Repeat("000,", 21) + "042"}, + {"%+.68d", 42, "+00," + strings.Repeat("000,", 21) + "042"}, + {"% .68d", 42, " 00," + strings.Repeat("000,", 21) + "042"}, + {"% +.68d", 42, "+00," + strings.Repeat("000,", 21) + "042"}, + + // unicode format + {"%U", 0, "U+0000"}, + {"%U", -1, "U+FFFFFFFFFFFFFFFF"}, + {"%U", '\n', `U+000A`}, + {"%#U", '\n', `U+000A`}, + {"%+U", 'x', `U+0078`}, // Plus flag should have no effect. + {"%# U", 'x', `U+0078 'x'`}, // Space flag should have no effect. + {"%#.2U", 'x', `U+0078 'x'`}, // Precisions below 4 should print 4 digits. + {"%U", '\u263a', `U+263A`}, + {"%#U", '\u263a', `U+263A '☺'`}, + {"%U", '\U0001D6C2', `U+1D6C2`}, + {"%#U", '\U0001D6C2', `U+1D6C2 '𝛂'`}, + {"%#14.6U", '⌘', " U+002318 '⌘'"}, + {"%#-14.6U", '⌘', "U+002318 '⌘' "}, + {"%#014.6U", '⌘', " U+002318 '⌘'"}, + {"%#-014.6U", '⌘', "U+002318 '⌘' "}, + {"%.68U", uint(42), zeroFill("U+", 68, "2A")}, + {"%#.68U", '日', zeroFill("U+", 68, "65E5") + " '日'"}, + + // floats + {"%+.3e", 0.0, "+0.000\u202f×\u202f10⁰⁰"}, + {"%+.3e", 1.0, "+1.000\u202f×\u202f10⁰⁰"}, + {"%+.3f", -1.0, "-1.000"}, + {"%+.3F", -1.0, "-1.000"}, + {"%+.3F", float32(-1.0), "-1.000"}, + {"%+07.2f", 1.0, "+001.00"}, + {"%+07.2f", -1.0, "-001.00"}, + {"%-07.2f", 1.0, "1.00 "}, + {"%-07.2f", -1.0, "-1.00 "}, + {"%+-07.2f", 1.0, "+1.00 "}, + {"%+-07.2f", -1.0, "-1.00 "}, + {"%-+07.2f", 1.0, "+1.00 "}, + {"%-+07.2f", -1.0, "-1.00 "}, + {"%+10.2f", +1.0, " +1.00"}, + {"%+10.2f", -1.0, " -1.00"}, + {"% .3E", -1.0, "-1.000\u202f×\u202f10⁰⁰"}, + {"% .3e", 1.0, " 1.000\u202f×\u202f10⁰⁰"}, + {"%+.3g", 0.0, "+0"}, + {"%+.3g", 1.0, "+1"}, + {"%+.3g", -1.0, "-1"}, + {"% .3g", -1.0, "-1"}, + {"% .3g", 1.0, " 1"}, + {"%b", float32(1.0), "8388608p-23"}, + {"%b", 1.0, "4503599627370496p-52"}, + // Test sharp flag used with floats. + {"%#g", 1e-323, "1.00000e-323"}, + {"%#g", -1.0, "-1.00000"}, + {"%#g", 1.1, "1.10000"}, + {"%#g", 123456.0, "123456."}, + {"%#g", 1234567.0, "1.234567e+06"}, + {"%#g", 1230000.0, "1.23000e+06"}, + {"%#g", 1000000.0, "1.00000e+06"}, + {"%#.0f", 1.0, "1."}, + {"%#.0e", 1.0, "1.e+00"}, + {"%#.0g", 1.0, "1."}, + {"%#.0g", 1100000.0, "1.e+06"}, + {"%#.4f", 1.0, "1.0000"}, + {"%#.4e", 1.0, "1.0000e+00"}, + {"%#.4g", 1.0, "1.000"}, + {"%#.4g", 100000.0, "1.000e+05"}, + {"%#.0f", 123.0, "123."}, + {"%#.0e", 123.0, "1.e+02"}, + {"%#.0g", 123.0, "1.e+02"}, + {"%#.4f", 123.0, "123.0000"}, + {"%#.4e", 123.0, "1.2300e+02"}, + {"%#.4g", 123.0, "123.0"}, + {"%#.4g", 123000.0, "1.230e+05"}, + {"%#9.4g", 1.0, " 1.000"}, + // The sharp flag has no effect for binary float format. + {"%#b", 1.0, "4503599627370496p-52"}, + // Precision has no effect for binary float format. + {"%.4b", float32(1.0), "8388608p-23"}, + {"%.4b", -1.0, "-4503599627370496p-52"}, + // Test correct f.intbuf boundary checks. + {"%.68f", 1.0, zeroFill("1.", 68, "")}, + {"%.68f", -1.0, zeroFill("-1.", 68, "")}, + // float infinites and NaNs + {"%f", posInf, "∞"}, + {"%.1f", negInf, "-∞"}, + {"% f", NaN, "NaN"}, + {"%20f", posInf, " ∞"}, + {"% 20F", posInf, " ∞"}, + {"% 20e", negInf, " -∞"}, + {"%+20E", negInf, " -∞"}, + {"% +20g", negInf, " -∞"}, + {"%+-20G", posInf, "+∞ "}, + {"%20e", NaN, " NaN"}, + {"% +20E", NaN, " NaN"}, + {"% -20g", NaN, "NaN "}, + {"%+-20G", NaN, "NaN "}, + // Zero padding does not apply to infinities and NaN. + {"%+020e", posInf, " +∞"}, + {"%-020f", negInf, "-∞ "}, + {"%-020E", NaN, "NaN "}, + + // complex values + {"%.f", 0i, "(0+0i)"}, + {"% .f", 0i, "( 0+0i)"}, + {"%+.f", 0i, "(+0+0i)"}, + {"% +.f", 0i, "(+0+0i)"}, + {"%+.3e", 0i, "(+0.000\u202f×\u202f10⁰⁰+0.000\u202f×\u202f10⁰⁰i)"}, + {"%+.3f", 0i, "(+0.000+0.000i)"}, + {"%+.3g", 0i, "(+0+0i)"}, + {"%+.3e", 1 + 2i, "(+1.000\u202f×\u202f10⁰⁰+2.000\u202f×\u202f10⁰⁰i)"}, + {"%+.3f", 1 + 2i, "(+1.000+2.000i)"}, + {"%+.3g", 1 + 2i, "(+1+2i)"}, + {"%.3e", 0i, "(0.000\u202f×\u202f10⁰⁰+0.000\u202f×\u202f10⁰⁰i)"}, + {"%.3f", 0i, "(0.000+0.000i)"}, + {"%.3F", 0i, "(0.000+0.000i)"}, + {"%.3F", complex64(0i), "(0.000+0.000i)"}, + {"%.3g", 0i, "(0+0i)"}, + {"%.3e", 1 + 2i, "(1.000\u202f×\u202f10⁰⁰+2.000\u202f×\u202f10⁰⁰i)"}, + {"%.3f", 1 + 2i, "(1.000+2.000i)"}, + {"%.3g", 1 + 2i, "(1+2i)"}, + {"%.3e", -1 - 2i, "(-1.000\u202f×\u202f10⁰⁰-2.000\u202f×\u202f10⁰⁰i)"}, + {"%.3f", -1 - 2i, "(-1.000-2.000i)"}, + {"%.3g", -1 - 2i, "(-1-2i)"}, + {"% .3E", -1 - 2i, "(-1.000\u202f×\u202f10⁰⁰-2.000\u202f×\u202f10⁰⁰i)"}, + {"%+.3g", 1 + 2i, "(+1+2i)"}, + {"%+.3g", complex64(1 + 2i), "(+1+2i)"}, + {"%#g", 1 + 2i, "(1.00000+2.00000i)"}, + {"%#g", 123456 + 789012i, "(123456.+789012.i)"}, + {"%#g", 1e-10i, "(0.00000+1.00000e-10i)"}, + {"%#g", -1e10 - 1.11e100i, "(-1.00000e+10-1.11000e+100i)"}, + {"%#.0f", 1.23 + 1.0i, "(1.+1.i)"}, + {"%#.0e", 1.23 + 1.0i, "(1.e+00+1.e+00i)"}, + {"%#.0g", 1.23 + 1.0i, "(1.+1.i)"}, + {"%#.0g", 0 + 100000i, "(0.+1.e+05i)"}, + {"%#.0g", 1230000 + 0i, "(1.e+06+0.i)"}, + {"%#.4f", 1 + 1.23i, "(1.0000+1.2300i)"}, + {"%#.4e", 123 + 1i, "(1.2300e+02+1.0000e+00i)"}, + {"%#.4g", 123 + 1.23i, "(123.0+1.230i)"}, + {"%#12.5g", 0 + 100000i, "( 0.0000 +1.0000e+05i)"}, + {"%#12.5g", 1230000 - 0i, "( 1.2300e+06 +0.0000i)"}, + {"%b", 1 + 2i, "(4503599627370496p-52+4503599627370496p-51i)"}, + {"%b", complex64(1 + 2i), "(8388608p-23+8388608p-22i)"}, + // The sharp flag has no effect for binary complex format. + {"%#b", 1 + 2i, "(4503599627370496p-52+4503599627370496p-51i)"}, + // Precision has no effect for binary complex format. + {"%.4b", 1 + 2i, "(4503599627370496p-52+4503599627370496p-51i)"}, + {"%.4b", complex64(1 + 2i), "(8388608p-23+8388608p-22i)"}, + // complex infinites and NaNs + {"%f", complex(posInf, posInf), "(∞+∞i)"}, + {"%f", complex(negInf, negInf), "(-∞-∞i)"}, + {"%f", complex(NaN, NaN), "(NaN+NaNi)"}, + {"%.1f", complex(posInf, posInf), "(∞+∞i)"}, + {"% f", complex(posInf, posInf), "( ∞+∞i)"}, + {"% f", complex(negInf, negInf), "(-∞-∞i)"}, + {"% f", complex(NaN, NaN), "(NaN+NaNi)"}, + {"%8e", complex(posInf, posInf), "( ∞ +∞i)"}, + {"% 8E", complex(posInf, posInf), "( ∞ +∞i)"}, + {"%+8f", complex(negInf, negInf), "( -∞ -∞i)"}, + {"% +8g", complex(negInf, negInf), "( -∞ -∞i)"}, // TODO(g) + {"% -8G", complex(NaN, NaN), "(NaN +NaN i)"}, + {"%+-8b", complex(NaN, NaN), "(+NaN +NaN i)"}, + // Zero padding does not apply to infinities and NaN. + {"%08f", complex(posInf, posInf), "( ∞ +∞i)"}, + {"%-08g", complex(negInf, negInf), "(-∞ -∞ i)"}, + {"%-08G", complex(NaN, NaN), "(NaN +NaN i)"}, + + // old test/fmt_test.go + {"%e", 1.0, "1.000000\u202f×\u202f10⁰⁰"}, + {"%e", 1234.5678e3, "1.234568\u202f×\u202f10⁰⁶"}, + {"%e", 1234.5678e-8, "1.234568\u202f×\u202f10⁻⁰⁵"}, + {"%e", -7.0, "-7.000000\u202f×\u202f10⁰⁰"}, + {"%e", -1e-9, "-1.000000\u202f×\u202f10⁻⁰⁹"}, + {"%f", 1234.5678e3, "1,234,567.800000"}, + {"%f", 1234.5678e-8, "0.000012"}, + {"%f", -7.0, "-7.000000"}, + {"%f", -1e-9, "-0.000000"}, + {"%g", 1234.5678e3, "1.2345678\u202f×\u202f10⁰⁶"}, + {"%g", float32(1234.5678e3), "1.2345678\u202f×\u202f10⁰⁶"}, + {"%g", 1234.5678e-8, "1.2345678\u202f×\u202f10⁻⁰⁵"}, + {"%g", -7.0, "-7"}, + {"%g", -1e-9, "-1\u202f×\u202f10⁻⁰⁹"}, + {"%g", float32(-1e-9), "-1\u202f×\u202f10⁻⁰⁹"}, + {"%E", 1.0, "1.000000\u202f×\u202f10⁰⁰"}, + {"%E", 1234.5678e3, "1.234568\u202f×\u202f10⁰⁶"}, + {"%E", 1234.5678e-8, "1.234568\u202f×\u202f10⁻⁰⁵"}, + {"%E", -7.0, "-7.000000\u202f×\u202f10⁰⁰"}, + {"%E", -1e-9, "-1.000000\u202f×\u202f10⁻⁰⁹"}, + {"%G", 1234.5678e3, "1.2345678\u202f×\u202f10⁰⁶"}, + {"%G", float32(1234.5678e3), "1.2345678\u202f×\u202f10⁰⁶"}, + {"%G", 1234.5678e-8, "1.2345678\u202f×\u202f10⁻⁰⁵"}, + {"%G", -7.0, "-7"}, + {"%G", -1e-9, "-1\u202f×\u202f10⁻⁰⁹"}, + {"%G", float32(-1e-9), "-1\u202f×\u202f10⁻⁰⁹"}, + {"%20.5s", "qwertyuiop", " qwert"}, + {"%.5s", "qwertyuiop", "qwert"}, + {"%-20.5s", "qwertyuiop", "qwert "}, + {"%20c", 'x', " x"}, + {"%-20c", 'x', "x "}, + {"%20.6e", 1.2345e3, " 1.234500\u202f×\u202f10⁰³"}, + {"%20.6e", 1.2345e-3, " 1.234500\u202f×\u202f10⁻⁰³"}, + {"%20e", 1.2345e3, " 1.234500\u202f×\u202f10⁰³"}, + {"%20e", 1.2345e-3, " 1.234500\u202f×\u202f10⁻⁰³"}, + {"%20.8e", 1.2345e3, " 1.23450000\u202f×\u202f10⁰³"}, + {"%20f", 1.23456789e3, " 1,234.567890"}, + {"%20f", 1.23456789e-3, " 0.001235"}, + {"%20f", 12345678901.23456789, "12,345,678,901.234568"}, + {"%-20f", 1.23456789e3, "1,234.567890 "}, + {"%20.8f", 1.23456789e3, " 1,234.56789000"}, + {"%20.8f", 1.23456789e-3, " 0.00123457"}, + {"%g", 1.23456789e3, "1,234.56789"}, + {"%g", 1.23456789e-3, "0.00123456789"}, + {"%g", 1.23456789e20, "1.23456789\u202f×\u202f10²⁰"}, + + // arrays + {"%v", array, "[1 2 3 4 5]"}, + {"%v", iarray, "[1 hello 2.5 ]"}, + {"%v", barray, "[1 2 3 4 5]"}, + {"%v", &array, "&[1 2 3 4 5]"}, + {"%v", &iarray, "&[1 hello 2.5 ]"}, + {"%v", &barray, "&[1 2 3 4 5]"}, + + // slices + {"%v", slice, "[1 2 3 4 5]"}, + {"%v", islice, "[1 hello 2.5 ]"}, + {"%v", bslice, "[1 2 3 4 5]"}, + {"%v", &slice, "&[1 2 3 4 5]"}, + {"%v", &islice, "&[1 hello 2.5 ]"}, + {"%v", &bslice, "&[1 2 3 4 5]"}, + + // byte arrays and slices with %b,%c,%d,%o,%U and %v + {"%b", [3]byte{65, 66, 67}, "[1000001 1000010 1000011]"}, + {"%c", [3]byte{65, 66, 67}, "[A B C]"}, + {"%d", [3]byte{65, 66, 67}, "[65 66 67]"}, + {"%o", [3]byte{65, 66, 67}, "[101 102 103]"}, + {"%U", [3]byte{65, 66, 67}, "[U+0041 U+0042 U+0043]"}, + {"%v", [3]byte{65, 66, 67}, "[65 66 67]"}, + {"%v", [1]byte{123}, "[123]"}, + {"%012v", []byte{}, "[]"}, + {"%#012v", []byte{}, "[]byte{}"}, + {"%6v", []byte{1, 11, 111}, "[ 1 11 111]"}, + {"%06v", []byte{1, 11, 111}, "[000001 000011 000111]"}, + {"%-6v", []byte{1, 11, 111}, "[1 11 111 ]"}, + {"%-06v", []byte{1, 11, 111}, "[1 11 111 ]"}, + {"%#v", []byte{1, 11, 111}, "[]byte{0x1, 0xb, 0x6f}"}, + {"%#6v", []byte{1, 11, 111}, "[]byte{ 0x1, 0xb, 0x6f}"}, + {"%#06v", []byte{1, 11, 111}, "[]byte{0x000001, 0x00000b, 0x00006f}"}, + {"%#-6v", []byte{1, 11, 111}, "[]byte{0x1 , 0xb , 0x6f }"}, + {"%#-06v", []byte{1, 11, 111}, "[]byte{0x1 , 0xb , 0x6f }"}, + // f.space should and f.plus should not have an effect with %v. + {"% v", []byte{1, 11, 111}, "[ 1 11 111]"}, + {"%+v", [3]byte{1, 11, 111}, "[1 11 111]"}, + {"%# -6v", []byte{1, 11, 111}, "[]byte{ 0x1 , 0xb , 0x6f }"}, + {"%#+-6v", [3]byte{1, 11, 111}, "[3]uint8{0x1 , 0xb , 0x6f }"}, + // f.space and f.plus should have an effect with %d. + {"% d", []byte{1, 11, 111}, "[ 1 11 111]"}, + {"%+d", [3]byte{1, 11, 111}, "[+1 +11 +111]"}, + {"%# -6d", []byte{1, 11, 111}, "[ 1 11 111 ]"}, + {"%#+-6d", [3]byte{1, 11, 111}, "[+1 +11 +111 ]"}, + + // floates with %v + {"%v", 1.2345678, "1.2345678"}, + {"%v", float32(1.2345678), "1.2345678"}, + + // complexes with %v + {"%v", 1 + 2i, "(1+2i)"}, + {"%v", complex64(1 + 2i), "(1+2i)"}, + + // structs + {"%v", A{1, 2, "a", []int{1, 2}}, `{1 2 a [1 2]}`}, + {"%+v", A{1, 2, "a", []int{1, 2}}, `{i:1 j:2 s:a x:[1 2]}`}, + + // +v on structs with Stringable items + {"%+v", B{1, 2}, `{I:<1> j:2}`}, + {"%+v", C{1, B{2, 3}}, `{i:1 B:{I:<2> j:3}}`}, + + // other formats on Stringable items + {"%s", I(23), `<23>`}, + {"%q", I(23), `"<23>"`}, + {"%x", I(23), `3c32333e`}, + {"%#x", I(23), `0x3c32333e`}, + {"%# x", I(23), `0x3c 0x32 0x33 0x3e`}, + // Stringer applies only to string formats. + {"%d", I(23), `23`}, + // Stringer applies to the extracted value. + {"%s", reflect.ValueOf(I(23)), `<23>`}, + + // go syntax + {"%#v", A{1, 2, "a", []int{1, 2}}, `message.A{i:1, j:0x2, s:"a", x:[]int{1, 2}}`}, + {"%#v", new(byte), "(*uint8)(0xPTR)"}, + {"%#v", TestFmtInterface, "(func(*testing.T))(0xPTR)"}, + {"%#v", make(chan int), "(chan int)(0xPTR)"}, + {"%#v", uint64(1<<64 - 1), "0xffffffffffffffff"}, + {"%#v", 1000000000, "1000000000"}, + {"%#v", map[string]int{"a": 1}, `map[string]int{"a":1}`}, + {"%#v", map[string]B{"a": {1, 2}}, `map[string]message.B{"a":message.B{I:1, j:2}}`}, + {"%#v", []string{"a", "b"}, `[]string{"a", "b"}`}, + {"%#v", SI{}, `message.SI{I:interface {}(nil)}`}, + {"%#v", []int(nil), `[]int(nil)`}, + {"%#v", []int{}, `[]int{}`}, + {"%#v", array, `[5]int{1, 2, 3, 4, 5}`}, + {"%#v", &array, `&[5]int{1, 2, 3, 4, 5}`}, + {"%#v", iarray, `[4]interface {}{1, "hello", 2.5, interface {}(nil)}`}, + {"%#v", &iarray, `&[4]interface {}{1, "hello", 2.5, interface {}(nil)}`}, + {"%#v", map[int]byte(nil), `map[int]uint8(nil)`}, + {"%#v", map[int]byte{}, `map[int]uint8{}`}, + {"%#v", "foo", `"foo"`}, + {"%#v", barray, `[5]message.renamedUint8{0x1, 0x2, 0x3, 0x4, 0x5}`}, + {"%#v", bslice, `[]message.renamedUint8{0x1, 0x2, 0x3, 0x4, 0x5}`}, + {"%#v", []int32(nil), "[]int32(nil)"}, + {"%#v", 1.2345678, "1.2345678"}, + {"%#v", float32(1.2345678), "1.2345678"}, + // Only print []byte and []uint8 as type []byte if they appear at the top level. + {"%#v", []byte(nil), "[]byte(nil)"}, + {"%#v", []uint8(nil), "[]byte(nil)"}, + {"%#v", []byte{}, "[]byte{}"}, + {"%#v", []uint8{}, "[]byte{}"}, + {"%#v", reflect.ValueOf([]byte{}), "[]uint8{}"}, + {"%#v", reflect.ValueOf([]uint8{}), "[]uint8{}"}, + {"%#v", &[]byte{}, "&[]uint8{}"}, + {"%#v", &[]byte{}, "&[]uint8{}"}, + {"%#v", [3]byte{}, "[3]uint8{0x0, 0x0, 0x0}"}, + {"%#v", [3]uint8{}, "[3]uint8{0x0, 0x0, 0x0}"}, + + // slices with other formats + {"%#x", []int{1, 2, 15}, `[0x1 0x2 0xf]`}, + {"%x", []int{1, 2, 15}, `[1 2 f]`}, + {"%d", []int{1, 2, 15}, `[1 2 15]`}, + {"%d", []byte{1, 2, 15}, `[1 2 15]`}, + {"%q", []string{"a", "b"}, `["a" "b"]`}, + {"% 02x", []byte{1}, "01"}, + {"% 02x", []byte{1, 2, 3}, "01 02 03"}, + + // Padding with byte slices. + {"%2x", []byte{}, " "}, + {"%#2x", []byte{}, " "}, + {"% 02x", []byte{}, "00"}, + {"%# 02x", []byte{}, "00"}, + {"%-2x", []byte{}, " "}, + {"%-02x", []byte{}, " "}, + {"%8x", []byte{0xab}, " ab"}, + {"% 8x", []byte{0xab}, " ab"}, + {"%#8x", []byte{0xab}, " 0xab"}, + {"%# 8x", []byte{0xab}, " 0xab"}, + {"%08x", []byte{0xab}, "000000ab"}, + {"% 08x", []byte{0xab}, "000000ab"}, + {"%#08x", []byte{0xab}, "00000xab"}, + {"%# 08x", []byte{0xab}, "00000xab"}, + {"%10x", []byte{0xab, 0xcd}, " abcd"}, + {"% 10x", []byte{0xab, 0xcd}, " ab cd"}, + {"%#10x", []byte{0xab, 0xcd}, " 0xabcd"}, + {"%# 10x", []byte{0xab, 0xcd}, " 0xab 0xcd"}, + {"%010x", []byte{0xab, 0xcd}, "000000abcd"}, + {"% 010x", []byte{0xab, 0xcd}, "00000ab cd"}, + {"%#010x", []byte{0xab, 0xcd}, "00000xabcd"}, + {"%# 010x", []byte{0xab, 0xcd}, "00xab 0xcd"}, + {"%-10X", []byte{0xab}, "AB "}, + {"% -010X", []byte{0xab}, "AB "}, + {"%#-10X", []byte{0xab, 0xcd}, "0XABCD "}, + {"%# -010X", []byte{0xab, 0xcd}, "0XAB 0XCD "}, + // Same for strings + {"%2x", "", " "}, + {"%#2x", "", " "}, + {"% 02x", "", "00"}, + {"%# 02x", "", "00"}, + {"%-2x", "", " "}, + {"%-02x", "", " "}, + {"%8x", "\xab", " ab"}, + {"% 8x", "\xab", " ab"}, + {"%#8x", "\xab", " 0xab"}, + {"%# 8x", "\xab", " 0xab"}, + {"%08x", "\xab", "000000ab"}, + {"% 08x", "\xab", "000000ab"}, + {"%#08x", "\xab", "00000xab"}, + {"%# 08x", "\xab", "00000xab"}, + {"%10x", "\xab\xcd", " abcd"}, + {"% 10x", "\xab\xcd", " ab cd"}, + {"%#10x", "\xab\xcd", " 0xabcd"}, + {"%# 10x", "\xab\xcd", " 0xab 0xcd"}, + {"%010x", "\xab\xcd", "000000abcd"}, + {"% 010x", "\xab\xcd", "00000ab cd"}, + {"%#010x", "\xab\xcd", "00000xabcd"}, + {"%# 010x", "\xab\xcd", "00xab 0xcd"}, + {"%-10X", "\xab", "AB "}, + {"% -010X", "\xab", "AB "}, + {"%#-10X", "\xab\xcd", "0XABCD "}, + {"%# -010X", "\xab\xcd", "0XAB 0XCD "}, + + // renamings + {"%v", renamedBool(true), "true"}, + {"%d", renamedBool(true), "%!d(message.renamedBool=true)"}, + {"%o", renamedInt(8), "10"}, + {"%d", renamedInt8(-9), "-9"}, + {"%v", renamedInt16(10), "10"}, + {"%v", renamedInt32(-11), "-11"}, + {"%X", renamedInt64(255), "FF"}, + {"%v", renamedUint(13), "13"}, + {"%o", renamedUint8(14), "16"}, + {"%X", renamedUint16(15), "F"}, + {"%d", renamedUint32(16), "16"}, + {"%X", renamedUint64(17), "11"}, + {"%o", renamedUintptr(18), "22"}, + {"%x", renamedString("thing"), "7468696e67"}, + {"%d", renamedBytes([]byte{1, 2, 15}), `[1 2 15]`}, + {"%q", renamedBytes([]byte("hello")), `"hello"`}, + {"%x", []renamedUint8{'h', 'e', 'l', 'l', 'o'}, "68656c6c6f"}, + {"%X", []renamedUint8{'h', 'e', 'l', 'l', 'o'}, "68656C6C6F"}, + {"%s", []renamedUint8{'h', 'e', 'l', 'l', 'o'}, "hello"}, + {"%q", []renamedUint8{'h', 'e', 'l', 'l', 'o'}, `"hello"`}, + {"%v", renamedFloat32(22), "22"}, + {"%v", renamedFloat64(33), "33"}, + {"%v", renamedComplex64(3 + 4i), "(3+4i)"}, + {"%v", renamedComplex128(4 - 3i), "(4-3i)"}, + + // Formatter + {"%x", F(1), ""}, + {"%x", G(2), "2"}, + {"%+v", S{F(4), G(5)}, "{F: G:5}"}, + + // GoStringer + {"%#v", G(6), "GoString(6)"}, + {"%#v", S{F(7), G(8)}, "message.S{F:, G:GoString(8)}"}, + + // %T + {"%T", byte(0), "uint8"}, + {"%T", reflect.ValueOf(nil), "reflect.Value"}, + {"%T", (4 - 3i), "complex128"}, + {"%T", renamedComplex128(4 - 3i), "message.renamedComplex128"}, + {"%T", intVar, "int"}, + {"%6T", &intVar, " *int"}, + {"%10T", nil, " "}, + {"%-10T", nil, " "}, + + // %p with pointers + {"%p", (*int)(nil), "0x0"}, + {"%#p", (*int)(nil), "0"}, + {"%p", &intVar, "0xPTR"}, + {"%#p", &intVar, "PTR"}, + {"%p", &array, "0xPTR"}, + {"%p", &slice, "0xPTR"}, + {"%8.2p", (*int)(nil), " 0x00"}, + {"%-20.16p", &intVar, "0xPTR "}, + // %p on non-pointers + {"%p", make(chan int), "0xPTR"}, + {"%p", make(map[int]int), "0xPTR"}, + {"%p", func() {}, "0xPTR"}, + {"%p", 27, "%!p(int=27)"}, // not a pointer at all + {"%p", nil, "%!p()"}, // nil on its own has no type ... + {"%#p", nil, "%!p()"}, // ... and hence is not a pointer type. + // pointers with specified base + {"%b", &intVar, "PTR_b"}, + {"%d", &intVar, "PTR_d"}, + {"%o", &intVar, "PTR_o"}, + {"%x", &intVar, "PTR_x"}, + {"%X", &intVar, "PTR_X"}, + // %v on pointers + {"%v", nil, ""}, + {"%#v", nil, ""}, + {"%v", (*int)(nil), ""}, + {"%#v", (*int)(nil), "(*int)(nil)"}, + {"%v", &intVar, "0xPTR"}, + {"%#v", &intVar, "(*int)(0xPTR)"}, + {"%8.2v", (*int)(nil), " "}, + {"%-20.16v", &intVar, "0xPTR "}, + // string method on pointer + {"%s", &pValue, "String(p)"}, // String method... + {"%p", &pValue, "0xPTR"}, // ... is not called with %p. + + // %d on Stringer should give integer if possible + {"%s", time.Time{}.Month(), "January"}, + {"%d", time.Time{}.Month(), "1"}, + + // erroneous things + {"%s %", "hello", "hello %!(NOVERB)"}, + {"%s %.2", "hello", "hello %!(NOVERB)"}, + + // The "" show up because maps are printed by + // first obtaining a list of keys and then looking up + // each key. Since NaNs can be map keys but cannot + // be fetched directly, the lookup fails and returns a + // zero reflect.Value, which formats as . + // This test is just to check that it shows the two NaNs at all. + {"%v", map[float64]int{NaN: 1, NaN: 2}, "map[NaN: NaN:]"}, + + // Comparison of padding rules with C printf. + /* + C program: + #include + + char *format[] = { + "[%.2f]", + "[% .2f]", + "[%+.2f]", + "[%7.2f]", + "[% 7.2f]", + "[%+7.2f]", + "[% +7.2f]", + "[%07.2f]", + "[% 07.2f]", + "[%+07.2f]", + "[% +07.2f]" + }; + + int main(void) { + int i; + for(i = 0; i < 11; i++) { + printf("%s: ", format[i]); + printf(format[i], 1.0); + printf(" "); + printf(format[i], -1.0); + printf("\n"); + } + } + + Output: + [%.2f]: [1.00] [-1.00] + [% .2f]: [ 1.00] [-1.00] + [%+.2f]: [+1.00] [-1.00] + [%7.2f]: [ 1.00] [ -1.00] + [% 7.2f]: [ 1.00] [ -1.00] + [%+7.2f]: [ +1.00] [ -1.00] + [% +7.2f]: [ +1.00] [ -1.00] + [%07.2f]: [0001.00] [-001.00] + [% 07.2f]: [ 001.00] [-001.00] + [%+07.2f]: [+001.00] [-001.00] + [% +07.2f]: [+001.00] [-001.00] + + */ + {"%.2f", 1.0, "1.00"}, + {"%.2f", -1.0, "-1.00"}, + {"% .2f", 1.0, " 1.00"}, + {"% .2f", -1.0, "-1.00"}, + {"%+.2f", 1.0, "+1.00"}, + {"%+.2f", -1.0, "-1.00"}, + {"%7.2f", 1.0, " 1.00"}, + {"%7.2f", -1.0, " -1.00"}, + {"% 7.2f", 1.0, " 1.00"}, + {"% 7.2f", -1.0, " -1.00"}, + {"%+7.2f", 1.0, " +1.00"}, + {"%+7.2f", -1.0, " -1.00"}, + {"% +7.2f", 1.0, " +1.00"}, + {"% +7.2f", -1.0, " -1.00"}, + // Padding with 0's indicates minimum number of integer digits minus the + // period, if present, and minus the sign if it is fixed. + // TODO: consider making this number the number of significant digits. + {"%07.2f", 1.0, "0,001.00"}, + {"%07.2f", -1.0, "-0,001.00"}, + {"% 07.2f", 1.0, " 001.00"}, + {"% 07.2f", -1.0, "-001.00"}, + {"%+07.2f", 1.0, "+001.00"}, + {"%+07.2f", -1.0, "-001.00"}, + {"% +07.2f", 1.0, "+001.00"}, + {"% +07.2f", -1.0, "-001.00"}, + + // Complex numbers: exhaustively tested in TestComplexFormatting. + {"%7.2f", 1 + 2i, "( 1.00 +2.00i)"}, + {"%+07.2f", -1 - 2i, "(-001.00-002.00i)"}, + + // Use spaces instead of zero if padding to the right. + {"%0-5s", "abc", "abc "}, + {"%-05.1f", 1.0, "1.0 "}, + + // float and complex formatting should not change the padding width + // for other elements. See issue 14642. + {"%06v", []interface{}{+10.0, 10}, "[000,010 000,010]"}, + {"%06v", []interface{}{-10.0, 10}, "[-000,010 000,010]"}, + {"%06v", []interface{}{+10.0 + 10i, 10}, "[(000,010+00,010i) 000,010]"}, + {"%06v", []interface{}{-10.0 + 10i, 10}, "[(-000,010+00,010i) 000,010]"}, + + // integer formatting should not alter padding for other elements. + {"%03.6v", []interface{}{1, 2.0, "x"}, "[000,001 002 00x]"}, + {"%03.0v", []interface{}{0, 2.0, "x"}, "[ 002 000]"}, + + // Complex fmt used to leave the plus flag set for future entries in the array + // causing +2+0i and +3+0i instead of 2+0i and 3+0i. + {"%v", []complex64{1, 2, 3}, "[(1+0i) (2+0i) (3+0i)]"}, + {"%v", []complex128{1, 2, 3}, "[(1+0i) (2+0i) (3+0i)]"}, + + // Incomplete format specification caused crash. + {"%.", 3, "%!.(int=3)"}, + + // Padding for complex numbers. Has been bad, then fixed, then bad again. + {"%+10.2f", +104.66 + 440.51i, "( +104.66 +440.51i)"}, + {"%+10.2f", -104.66 + 440.51i, "( -104.66 +440.51i)"}, + {"%+10.2f", +104.66 - 440.51i, "( +104.66 -440.51i)"}, + {"%+10.2f", -104.66 - 440.51i, "( -104.66 -440.51i)"}, + {"%010.2f", +104.66 + 440.51i, "(0,000,104.66+000,440.51i)"}, + {"%+010.2f", +104.66 + 440.51i, "(+000,104.66+000,440.51i)"}, + {"%+010.2f", -104.66 + 440.51i, "(-000,104.66+000,440.51i)"}, + {"%+010.2f", +104.66 - 440.51i, "(+000,104.66-000,440.51i)"}, + {"%+010.2f", -104.66 - 440.51i, "(-000,104.66-000,440.51i)"}, + + // []T where type T is a byte with a Stringer method. + {"%v", byteStringerSlice, "[X X X X X]"}, + {"%s", byteStringerSlice, "hello"}, + {"%q", byteStringerSlice, "\"hello\""}, + {"%x", byteStringerSlice, "68656c6c6f"}, + {"%X", byteStringerSlice, "68656C6C6F"}, + {"%#v", byteStringerSlice, "[]message.byteStringer{0x68, 0x65, 0x6c, 0x6c, 0x6f}"}, + + // And the same for Formatter. + {"%v", byteFormatterSlice, "[X X X X X]"}, + {"%s", byteFormatterSlice, "hello"}, + {"%q", byteFormatterSlice, "\"hello\""}, + {"%x", byteFormatterSlice, "68656c6c6f"}, + {"%X", byteFormatterSlice, "68656C6C6F"}, + // This next case seems wrong, but the docs say the Formatter wins here. + {"%#v", byteFormatterSlice, "[]message.byteFormatter{X, X, X, X, X}"}, + + // reflect.Value handled specially in Go 1.5, making it possible to + // see inside non-exported fields (which cannot be accessed with Interface()). + // Issue 8965. + {"%v", reflect.ValueOf(A{}).Field(0).String(), ""}, // Equivalent to the old way. + {"%v", reflect.ValueOf(A{}).Field(0), "0"}, // Sees inside the field. + + // verbs apply to the extracted value too. + {"%s", reflect.ValueOf("hello"), "hello"}, + {"%q", reflect.ValueOf("hello"), `"hello"`}, + {"%#04x", reflect.ValueOf(256), "0x0100"}, + + // invalid reflect.Value doesn't crash. + {"%v", reflect.Value{}, ""}, + {"%v", &reflect.Value{}, ""}, + {"%v", SI{reflect.Value{}}, "{}"}, + + // Tests to check that not supported verbs generate an error string. + {"%☠", nil, "%!☠()"}, + {"%☠", interface{}(nil), "%!☠()"}, + {"%☠", int(0), "%!☠(int=0)"}, + {"%☠", uint(0), "%!☠(uint=0)"}, + {"%☠", []byte{0, 1}, "[%!☠(uint8=0) %!☠(uint8=1)]"}, + {"%☠", []uint8{0, 1}, "[%!☠(uint8=0) %!☠(uint8=1)]"}, + {"%☠", [1]byte{0}, "[%!☠(uint8=0)]"}, + {"%☠", [1]uint8{0}, "[%!☠(uint8=0)]"}, + {"%☠", "hello", "%!☠(string=hello)"}, + {"%☠", 1.2345678, "%!☠(float64=1.2345678)"}, + {"%☠", float32(1.2345678), "%!☠(float32=1.2345678)"}, + {"%☠", 1.2345678 + 1.2345678i, "%!☠(complex128=(1.2345678+1.2345678i))"}, + {"%☠", complex64(1.2345678 + 1.2345678i), "%!☠(complex64=(1.2345678+1.2345678i))"}, + {"%☠", &intVar, "%!☠(*int=0xPTR)"}, + {"%☠", make(chan int), "%!☠(chan int=0xPTR)"}, + {"%☠", func() {}, "%!☠(func()=0xPTR)"}, + {"%☠", reflect.ValueOf(renamedInt(0)), "%!☠(message.renamedInt=0)"}, + {"%☠", SI{renamedInt(0)}, "{%!☠(message.renamedInt=0)}"}, + {"%☠", &[]interface{}{I(1), G(2)}, "&[%!☠(message.I=1) %!☠(message.G=2)]"}, + {"%☠", SI{&[]interface{}{I(1), G(2)}}, "{%!☠(*[]interface {}=&[1 2])}"}, + {"%☠", reflect.Value{}, ""}, + {"%☠", map[float64]int{NaN: 1}, "map[%!☠(float64=NaN):%!☠()]"}, +} + +// zeroFill generates zero-filled strings of the specified width. The length +// of the suffix (but not the prefix) is compensated for in the width calculation. +func zeroFill(prefix string, width int, suffix string) string { + return prefix + strings.Repeat("0", width-len(suffix)) + suffix +} + +func TestSprintf(t *testing.T) { + p := NewPrinter(language.Und) + for _, tt := range fmtTests { + t.Run(fmt.Sprint(tt.fmt, "/", tt.val), func(t *testing.T) { + s := p.Sprintf(tt.fmt, tt.val) + i := strings.Index(tt.out, "PTR") + if i >= 0 && i < len(s) { + var pattern, chars string + switch { + case strings.HasPrefix(tt.out[i:], "PTR_b"): + pattern = "PTR_b" + chars = "01" + case strings.HasPrefix(tt.out[i:], "PTR_o"): + pattern = "PTR_o" + chars = "01234567" + case strings.HasPrefix(tt.out[i:], "PTR_d"): + pattern = "PTR_d" + chars = "0123456789" + case strings.HasPrefix(tt.out[i:], "PTR_x"): + pattern = "PTR_x" + chars = "0123456789abcdef" + case strings.HasPrefix(tt.out[i:], "PTR_X"): + pattern = "PTR_X" + chars = "0123456789ABCDEF" + default: + pattern = "PTR" + chars = "0123456789abcdefABCDEF" + } + p := s[:i] + pattern + for j := i; j < len(s); j++ { + if !strings.ContainsRune(chars, rune(s[j])) { + p += s[j:] + break + } + } + s = p + } + if s != tt.out { + if _, ok := tt.val.(string); ok { + // Don't requote the already-quoted strings. + // It's too confusing to read the errors. + t.Errorf("Sprintf(%q, %q) = <%s> want <%s>", tt.fmt, tt.val, s, tt.out) + } else { + t.Errorf("Sprintf(%q, %v) = %q want %q", tt.fmt, tt.val, s, tt.out) + } + } + }) + } +} + +var f float64 + +// TestComplexFormatting checks that a complex always formats to the same +// thing as if done by hand with two singleton prints. +func TestComplexFormatting(t *testing.T) { + var yesNo = []bool{true, false} + var values = []float64{1, 0, -1, posInf, negInf, NaN} + p := NewPrinter(language.Und) + for _, plus := range yesNo { + for _, zero := range yesNo { + for _, space := range yesNo { + for _, char := range "fFeEgG" { + realFmt := "%" + if zero { + realFmt += "0" + } + if space { + realFmt += " " + } + if plus { + realFmt += "+" + } + realFmt += "10.2" + realFmt += string(char) + // Imaginary part always has a sign, so force + and ignore space. + imagFmt := "%" + if zero { + imagFmt += "0" + } + imagFmt += "+" + imagFmt += "10.2" + imagFmt += string(char) + for _, realValue := range values { + for _, imagValue := range values { + one := p.Sprintf(realFmt, complex(realValue, imagValue)) + two := p.Sprintf("("+realFmt+imagFmt+"i)", realValue, imagValue) + if math.IsNaN(imagValue) { + p := len(two) - len("NaNi)") - 1 + if two[p] == ' ' { + two = two[:p] + "+" + two[p+1:] + } else { + two = two[:p+1] + "+" + two[p+1:] + } + } + if one != two { + t.Error(f, one, two) + } + } + } + } + } + } + } +} + +type SE []interface{} // slice of empty; notational compactness. + +var reorderTests = []struct { + format string + args SE + out string +}{ + {"%[1]d", SE{1}, "1"}, + {"%[2]d", SE{2, 1}, "1"}, + {"%[2]d %[1]d", SE{1, 2}, "2 1"}, + {"%[2]*[1]d", SE{2, 5}, " 2"}, + {"%6.2f", SE{12.0}, " 12.00"}, // Explicit version of next line. + {"%[3]*.[2]*[1]f", SE{12.0, 2, 6}, " 12.00"}, + {"%[1]*.[2]*[3]f", SE{6, 2, 12.0}, " 12.00"}, + {"%10f", SE{12.0}, " 12.000000"}, + {"%[1]*[3]f", SE{10, 99, 12.0}, " 12.000000"}, + {"%.6f", SE{12.0}, "12.000000"}, // Explicit version of next line. + {"%.[1]*[3]f", SE{6, 99, 12.0}, "12.000000"}, + {"%6.f", SE{12.0}, " 12"}, // // Explicit version of next line; empty precision means zero. + {"%[1]*.[3]f", SE{6, 3, 12.0}, " 12"}, + // An actual use! Print the same arguments twice. + {"%d %d %d %#[1]o %#o %#o", SE{11, 12, 13}, "11 12 13 013 014 015"}, + + // Erroneous cases. + {"%[d", SE{2, 1}, "%!d(BADINDEX)"}, + {"%]d", SE{2, 1}, "%!](int=2)d%!(EXTRA int=1)"}, + {"%[]d", SE{2, 1}, "%!d(BADINDEX)"}, + {"%[-3]d", SE{2, 1}, "%!d(BADINDEX)"}, + {"%[99]d", SE{2, 1}, "%!d(BADINDEX)"}, + {"%[3]", SE{2, 1}, "%!(NOVERB)"}, + {"%[1].2d", SE{5, 6}, "%!d(BADINDEX)"}, + {"%[1]2d", SE{2, 1}, "%!d(BADINDEX)"}, + {"%3.[2]d", SE{7}, "%!d(BADINDEX)"}, + {"%.[2]d", SE{7}, "%!d(BADINDEX)"}, + {"%d %d %d %#[1]o %#o %#o %#o", SE{11, 12, 13}, "11 12 13 013 014 015 %!o(MISSING)"}, + {"%[5]d %[2]d %d", SE{1, 2, 3}, "%!d(BADINDEX) 2 3"}, + {"%d %[3]d %d", SE{1, 2}, "1 %!d(BADINDEX) 2"}, // Erroneous index does not affect sequence. + {"%.[]", SE{}, "%!](BADINDEX)"}, // Issue 10675 + {"%.-3d", SE{42}, "%!-(int=42)3d"}, // TODO: Should this set return better error messages? + // The following messages are interpreted as if there is no substitution, + // in which case it is okay to have extra arguments. This is different + // semantics from the fmt package. + {"%2147483648d", SE{42}, "%!(NOVERB)"}, + {"%-2147483648d", SE{42}, "%!(NOVERB)"}, + {"%.2147483648d", SE{42}, "%!(NOVERB)"}, +} + +func TestReorder(t *testing.T) { + p := NewPrinter(language.Und) + for _, tc := range reorderTests { + t.Run(fmt.Sprint(tc.format, "/", tc.args), func(t *testing.T) { + s := p.Sprintf(tc.format, tc.args...) + if s != tc.out { + t.Errorf("Sprintf(%q, %v) = %q want %q", tc.format, tc.args, s, tc.out) + } + }) + } +} + +func BenchmarkSprintfPadding(b *testing.B) { + b.RunParallel(func(pb *testing.PB) { + p := NewPrinter(language.English) + for pb.Next() { + p.Sprintf("%16f", 1.0) + } + }) +} + +func BenchmarkSprintfEmpty(b *testing.B) { + b.RunParallel(func(pb *testing.PB) { + p := NewPrinter(language.English) + for pb.Next() { + p.Sprintf("") + } + }) +} + +func BenchmarkSprintfString(b *testing.B) { + b.RunParallel(func(pb *testing.PB) { + p := NewPrinter(language.English) + for pb.Next() { + p.Sprintf("%s", "hello") + } + }) +} + +func BenchmarkSprintfTruncateString(b *testing.B) { + b.RunParallel(func(pb *testing.PB) { + p := NewPrinter(language.English) + for pb.Next() { + p.Sprintf("%.3s", "日本語日本語日本語") + } + }) +} + +func BenchmarkSprintfQuoteString(b *testing.B) { + b.RunParallel(func(pb *testing.PB) { + p := NewPrinter(language.English) + for pb.Next() { + p.Sprintf("%q", "日本語日本語日本語") + } + }) +} + +func BenchmarkSprintfInt(b *testing.B) { + b.RunParallel(func(pb *testing.PB) { + p := NewPrinter(language.English) + for pb.Next() { + p.Sprintf("%d", 5) + } + }) +} + +func BenchmarkSprintfIntInt(b *testing.B) { + b.RunParallel(func(pb *testing.PB) { + p := NewPrinter(language.English) + for pb.Next() { + p.Sprintf("%d %d", 5, 6) + } + }) +} + +func BenchmarkSprintfPrefixedInt(b *testing.B) { + b.RunParallel(func(pb *testing.PB) { + p := NewPrinter(language.English) + for pb.Next() { + p.Sprintf("This is some meaningless prefix text that needs to be scanned %d", 6) + } + }) +} + +func BenchmarkSprintfFloat(b *testing.B) { + b.RunParallel(func(pb *testing.PB) { + p := NewPrinter(language.English) + for pb.Next() { + p.Sprintf("%g", 5.23184) + } + }) +} + +func BenchmarkSprintfComplex(b *testing.B) { + b.RunParallel(func(pb *testing.PB) { + p := NewPrinter(language.English) + for pb.Next() { + p.Sprintf("%f", 5.23184+5.23184i) + } + }) +} + +func BenchmarkSprintfBoolean(b *testing.B) { + b.RunParallel(func(pb *testing.PB) { + p := NewPrinter(language.English) + for pb.Next() { + p.Sprintf("%t", true) + } + }) +} + +func BenchmarkSprintfHexString(b *testing.B) { + b.RunParallel(func(pb *testing.PB) { + p := NewPrinter(language.English) + for pb.Next() { + p.Sprintf("% #x", "0123456789abcdef") + } + }) +} + +func BenchmarkSprintfHexBytes(b *testing.B) { + data := []byte("0123456789abcdef") + b.RunParallel(func(pb *testing.PB) { + p := NewPrinter(language.English) + for pb.Next() { + p.Sprintf("% #x", data) + } + }) +} + +func BenchmarkSprintfBytes(b *testing.B) { + data := []byte("0123456789abcdef") + b.RunParallel(func(pb *testing.PB) { + p := NewPrinter(language.English) + for pb.Next() { + p.Sprintf("%v", data) + } + }) +} + +func BenchmarkSprintfStringer(b *testing.B) { + stringer := I(12345) + b.RunParallel(func(pb *testing.PB) { + p := NewPrinter(language.English) + for pb.Next() { + p.Sprintf("%v", stringer) + } + }) +} + +func BenchmarkSprintfStructure(b *testing.B) { + s := &[]interface{}{SI{12345}, map[int]string{0: "hello"}} + b.RunParallel(func(pb *testing.PB) { + p := NewPrinter(language.English) + for pb.Next() { + p.Sprintf("%#v", s) + } + }) +} + +func BenchmarkManyArgs(b *testing.B) { + b.RunParallel(func(pb *testing.PB) { + var buf bytes.Buffer + p := NewPrinter(language.English) + for pb.Next() { + buf.Reset() + p.Fprintf(&buf, "%2d/%2d/%2d %d:%d:%d %s %s\n", 3, 4, 5, 11, 12, 13, "hello", "world") + } + }) +} + +func BenchmarkFprintInt(b *testing.B) { + var buf bytes.Buffer + p := NewPrinter(language.English) + for i := 0; i < b.N; i++ { + buf.Reset() + p.Fprint(&buf, 123456) + } +} + +func BenchmarkFprintfBytes(b *testing.B) { + data := []byte(string("0123456789")) + var buf bytes.Buffer + p := NewPrinter(language.English) + for i := 0; i < b.N; i++ { + buf.Reset() + p.Fprintf(&buf, "%s", data) + } +} + +func BenchmarkFprintIntNoAlloc(b *testing.B) { + var x interface{} = 123456 + var buf bytes.Buffer + p := NewPrinter(language.English) + for i := 0; i < b.N; i++ { + buf.Reset() + p.Fprint(&buf, x) + } +} + +var mallocBuf bytes.Buffer +var mallocPointer *int // A pointer so we know the interface value won't allocate. + +var mallocTest = []struct { + count int + desc string + fn func(p *Printer) +}{ + {0, `Sprintf("")`, func(p *Printer) { p.Sprintf("") }}, + {1, `Sprintf("xxx")`, func(p *Printer) { p.Sprintf("xxx") }}, + {2, `Sprintf("%x")`, func(p *Printer) { p.Sprintf("%x", 7) }}, + {2, `Sprintf("%s")`, func(p *Printer) { p.Sprintf("%s", "hello") }}, + {3, `Sprintf("%x %x")`, func(p *Printer) { p.Sprintf("%x %x", 7, 112) }}, + {2, `Sprintf("%g")`, func(p *Printer) { p.Sprintf("%g", float32(3.14159)) }}, // TODO: Can this be 1? + {1, `Fprintf(buf, "%s")`, func(p *Printer) { mallocBuf.Reset(); p.Fprintf(&mallocBuf, "%s", "hello") }}, + // If the interface value doesn't need to allocate, amortized allocation overhead should be zero. + {0, `Fprintf(buf, "%x %x %x")`, func(p *Printer) { + mallocBuf.Reset() + p.Fprintf(&mallocBuf, "%x %x %x", mallocPointer, mallocPointer, mallocPointer) + }}, +} + +var _ bytes.Buffer + +func TestCountMallocs(t *testing.T) { + switch { + case testing.Short(): + t.Skip("skipping malloc count in short mode") + case runtime.GOMAXPROCS(0) > 1: + t.Skip("skipping; GOMAXPROCS>1") + // TODO: detect race detecter enabled. + // case race.Enabled: + // t.Skip("skipping malloc count under race detector") + } + p := NewPrinter(language.English) + for _, mt := range mallocTest { + mallocs := testing.AllocsPerRun(100, func() { mt.fn(p) }) + if got, max := mallocs, float64(mt.count); got > max { + t.Errorf("%s: got %v allocs, want <=%v", mt.desc, got, max) + } + } +} + +type flagPrinter struct{} + +func (flagPrinter) Format(f fmt.State, c rune) { + s := "%" + for i := 0; i < 128; i++ { + if f.Flag(i) { + s += string(i) + } + } + if w, ok := f.Width(); ok { + s += fmt.Sprintf("%d", w) + } + if p, ok := f.Precision(); ok { + s += fmt.Sprintf(".%d", p) + } + s += string(c) + io.WriteString(f, "["+s+"]") +} + +var flagtests = []struct { + in string + out string +}{ + {"%a", "[%a]"}, + {"%-a", "[%-a]"}, + {"%+a", "[%+a]"}, + {"%#a", "[%#a]"}, + {"% a", "[% a]"}, + {"%0a", "[%0a]"}, + {"%1.2a", "[%1.2a]"}, + {"%-1.2a", "[%-1.2a]"}, + {"%+1.2a", "[%+1.2a]"}, + {"%-+1.2a", "[%+-1.2a]"}, + {"%-+1.2abc", "[%+-1.2a]bc"}, + {"%-1.2abc", "[%-1.2a]bc"}, +} + +func TestFlagParser(t *testing.T) { + var flagprinter flagPrinter + for _, tt := range flagtests { + s := NewPrinter(language.Und).Sprintf(tt.in, &flagprinter) + if s != tt.out { + t.Errorf("Sprintf(%q, &flagprinter) => %q, want %q", tt.in, s, tt.out) + } + } +} + +func TestStructPrinter(t *testing.T) { + type T struct { + a string + b string + c int + } + var s T + s.a = "abc" + s.b = "def" + s.c = 123 + var tests = []struct { + fmt string + out string + }{ + {"%v", "{abc def 123}"}, + {"%+v", "{a:abc b:def c:123}"}, + {"%#v", `message.T{a:"abc", b:"def", c:123}`}, + } + p := NewPrinter(language.Und) + for _, tt := range tests { + out := p.Sprintf(tt.fmt, s) + if out != tt.out { + t.Errorf("Sprintf(%q, s) = %#q, want %#q", tt.fmt, out, tt.out) + } + // The same but with a pointer. + out = p.Sprintf(tt.fmt, &s) + if out != "&"+tt.out { + t.Errorf("Sprintf(%q, &s) = %#q, want %#q", tt.fmt, out, "&"+tt.out) + } + } +} + +func TestSlicePrinter(t *testing.T) { + p := NewPrinter(language.Und) + slice := []int{} + s := p.Sprint(slice) + if s != "[]" { + t.Errorf("empty slice printed as %q not %q", s, "[]") + } + slice = []int{1, 2, 3} + s = p.Sprint(slice) + if s != "[1 2 3]" { + t.Errorf("slice: got %q expected %q", s, "[1 2 3]") + } + s = p.Sprint(&slice) + if s != "&[1 2 3]" { + t.Errorf("&slice: got %q expected %q", s, "&[1 2 3]") + } +} + +// presentInMap checks map printing using substrings so we don't depend on the +// print order. +func presentInMap(s string, a []string, t *testing.T) { + for i := 0; i < len(a); i++ { + loc := strings.Index(s, a[i]) + if loc < 0 { + t.Errorf("map print: expected to find %q in %q", a[i], s) + } + // make sure the match ends here + loc += len(a[i]) + if loc >= len(s) || (s[loc] != ' ' && s[loc] != ']') { + t.Errorf("map print: %q not properly terminated in %q", a[i], s) + } + } +} + +func TestMapPrinter(t *testing.T) { + p := NewPrinter(language.Und) + m0 := make(map[int]string) + s := p.Sprint(m0) + if s != "map[]" { + t.Errorf("empty map printed as %q not %q", s, "map[]") + } + m1 := map[int]string{1: "one", 2: "two", 3: "three"} + a := []string{"1:one", "2:two", "3:three"} + presentInMap(p.Sprintf("%v", m1), a, t) + presentInMap(p.Sprint(m1), a, t) + // Pointer to map prints the same but with initial &. + if !strings.HasPrefix(p.Sprint(&m1), "&") { + t.Errorf("no initial & for address of map") + } + presentInMap(p.Sprintf("%v", &m1), a, t) + presentInMap(p.Sprint(&m1), a, t) +} + +func TestEmptyMap(t *testing.T) { + const emptyMapStr = "map[]" + var m map[string]int + p := NewPrinter(language.Und) + s := p.Sprint(m) + if s != emptyMapStr { + t.Errorf("nil map printed as %q not %q", s, emptyMapStr) + } + m = make(map[string]int) + s = p.Sprint(m) + if s != emptyMapStr { + t.Errorf("empty map printed as %q not %q", s, emptyMapStr) + } +} + +// TestBlank checks that Sprint (and hence Print, Fprint) puts spaces in the +// right places, that is, between arg pairs in which neither is a string. +func TestBlank(t *testing.T) { + p := NewPrinter(language.Und) + got := p.Sprint("<", 1, ">:", 1, 2, 3, "!") + expect := "<1>:1 2 3!" + if got != expect { + t.Errorf("got %q expected %q", got, expect) + } +} + +// TestBlankln checks that Sprintln (and hence Println, Fprintln) puts spaces in +// the right places, that is, between all arg pairs. +func TestBlankln(t *testing.T) { + p := NewPrinter(language.Und) + got := p.Sprintln("<", 1, ">:", 1, 2, 3, "!") + expect := "< 1 >: 1 2 3 !\n" + if got != expect { + t.Errorf("got %q expected %q", got, expect) + } +} + +// TestFormatterPrintln checks Formatter with Sprint, Sprintln, Sprintf. +func TestFormatterPrintln(t *testing.T) { + p := NewPrinter(language.Und) + f := F(1) + expect := "\n" + s := p.Sprint(f, "\n") + if s != expect { + t.Errorf("Sprint wrong with Formatter: expected %q got %q", expect, s) + } + s = p.Sprintln(f) + if s != expect { + t.Errorf("Sprintln wrong with Formatter: expected %q got %q", expect, s) + } + s = p.Sprintf("%v\n", f) + if s != expect { + t.Errorf("Sprintf wrong with Formatter: expected %q got %q", expect, s) + } +} + +func args(a ...interface{}) []interface{} { return a } + +var startests = []struct { + fmt string + in []interface{} + out string +}{ + {"%*d", args(4, 42), " 42"}, + {"%-*d", args(4, 42), "42 "}, + {"%*d", args(-4, 42), "42 "}, + {"%-*d", args(-4, 42), "42 "}, + {"%.*d", args(4, 42), "0,042"}, + {"%*.*d", args(8, 4, 42), " 0,042"}, + {"%0*d", args(4, 42), "0,042"}, + // Some non-int types for width. (Issue 10732). + {"%0*d", args(uint(4), 42), "0,042"}, + {"%0*d", args(uint64(4), 42), "0,042"}, + {"%0*d", args('\x04', 42), "0,042"}, + {"%0*d", args(uintptr(4), 42), "0,042"}, + + // erroneous + {"%*d", args(nil, 42), "%!(BADWIDTH)42"}, + {"%*d", args(int(1e7), 42), "%!(BADWIDTH)42"}, + {"%*d", args(int(-1e7), 42), "%!(BADWIDTH)42"}, + {"%.*d", args(nil, 42), "%!(BADPREC)42"}, + {"%.*d", args(-1, 42), "%!(BADPREC)42"}, + {"%.*d", args(int(1e7), 42), "%!(BADPREC)42"}, + {"%.*d", args(uint(1e7), 42), "%!(BADPREC)42"}, + {"%.*d", args(uint64(1<<63), 42), "%!(BADPREC)42"}, // Huge negative (-inf). + {"%.*d", args(uint64(1<<64-1), 42), "%!(BADPREC)42"}, // Small negative (-1). + {"%*d", args(5, "foo"), "%!d(string= foo)"}, + {"%*% %d", args(20, 5), "% 5"}, + {"%*", args(4), "%!(NOVERB)"}, +} + +func TestWidthAndPrecision(t *testing.T) { + p := NewPrinter(language.Und) + for i, tt := range startests { + t.Run(fmt.Sprint(tt.fmt, tt.in), func(t *testing.T) { + s := p.Sprintf(tt.fmt, tt.in...) + if s != tt.out { + t.Errorf("#%d: %q: got %q expected %q", i, tt.fmt, s, tt.out) + } + }) + } +} + +// PanicS is a type that panics in String. +type PanicS struct { + message interface{} +} + +// Value receiver. +func (p PanicS) String() string { + panic(p.message) +} + +// PanicGo is a type that panics in GoString. +type PanicGo struct { + message interface{} +} + +// Value receiver. +func (p PanicGo) GoString() string { + panic(p.message) +} + +// PanicF is a type that panics in Format. +type PanicF struct { + message interface{} +} + +// Value receiver. +func (p PanicF) Format(f fmt.State, c rune) { + panic(p.message) +} + +var panictests = []struct { + desc string + fmt string + in interface{} + out string +}{ + // String + {"String", "%s", (*PanicS)(nil), ""}, // nil pointer special case + {"String", "%s", PanicS{io.ErrUnexpectedEOF}, "%!s(PANIC=unexpected EOF)"}, + {"String", "%s", PanicS{3}, "%!s(PANIC=3)"}, + // GoString + {"GoString", "%#v", (*PanicGo)(nil), ""}, // nil pointer special case + {"GoString", "%#v", PanicGo{io.ErrUnexpectedEOF}, "%!v(PANIC=unexpected EOF)"}, + {"GoString", "%#v", PanicGo{3}, "%!v(PANIC=3)"}, + // Issue 18282. catchPanic should not clear fmtFlags permanently. + {"Issue 18282", "%#v", []interface{}{PanicGo{3}, PanicGo{3}}, "[]interface {}{%!v(PANIC=3), %!v(PANIC=3)}"}, + // Format + {"Format", "%s", (*PanicF)(nil), ""}, // nil pointer special case + {"Format", "%s", PanicF{io.ErrUnexpectedEOF}, "%!s(PANIC=unexpected EOF)"}, + {"Format", "%s", PanicF{3}, "%!s(PANIC=3)"}, +} + +func TestPanics(t *testing.T) { + p := NewPrinter(language.Und) + for i, tt := range panictests { + t.Run(fmt.Sprint(tt.desc, "/", tt.fmt, "/", tt.in), func(t *testing.T) { + s := p.Sprintf(tt.fmt, tt.in) + if s != tt.out { + t.Errorf("%d: %q: got %q expected %q", i, tt.fmt, s, tt.out) + } + }) + } +} + +// recurCount tests that erroneous String routine doesn't cause fatal recursion. +var recurCount = 0 + +type Recur struct { + i int + failed *bool +} + +func (r *Recur) String() string { + p := NewPrinter(language.Und) + if recurCount++; recurCount > 10 { + *r.failed = true + return "FAIL" + } + // This will call badVerb. Before the fix, that would cause us to recur into + // this routine to print %!p(value). Now we don't call the user's method + // during an error. + return p.Sprintf("recur@%p value: %d", r, r.i) +} + +func TestBadVerbRecursion(t *testing.T) { + p := NewPrinter(language.Und) + failed := false + r := &Recur{3, &failed} + p.Sprintf("recur@%p value: %d\n", &r, r.i) + if failed { + t.Error("fail with pointer") + } + failed = false + r = &Recur{4, &failed} + p.Sprintf("recur@%p, value: %d\n", r, r.i) + if failed { + t.Error("fail with value") + } +} + +func TestNilDoesNotBecomeTyped(t *testing.T) { + p := NewPrinter(language.Und) + type A struct{} + type B struct{} + var a *A = nil + var b B = B{} + + // indirect the Sprintf call through this noVetWarn variable to avoid + // "go test" failing vet checks in Go 1.10+. + noVetWarn := p.Sprintf + got := noVetWarn("%s %s %s %s %s", nil, a, nil, b, nil) + + const expect = "%!s() %!s(*message.A=) %!s() {} %!s()" + if got != expect { + t.Errorf("expected:\n\t%q\ngot:\n\t%q", expect, got) + } +} + +var formatterFlagTests = []struct { + in string + val interface{} + out string +}{ + // scalar values with the (unused by fmt) 'a' verb. + {"%a", flagPrinter{}, "[%a]"}, + {"%-a", flagPrinter{}, "[%-a]"}, + {"%+a", flagPrinter{}, "[%+a]"}, + {"%#a", flagPrinter{}, "[%#a]"}, + {"% a", flagPrinter{}, "[% a]"}, + {"%0a", flagPrinter{}, "[%0a]"}, + {"%1.2a", flagPrinter{}, "[%1.2a]"}, + {"%-1.2a", flagPrinter{}, "[%-1.2a]"}, + {"%+1.2a", flagPrinter{}, "[%+1.2a]"}, + {"%-+1.2a", flagPrinter{}, "[%+-1.2a]"}, + {"%-+1.2abc", flagPrinter{}, "[%+-1.2a]bc"}, + {"%-1.2abc", flagPrinter{}, "[%-1.2a]bc"}, + + // composite values with the 'a' verb + {"%a", [1]flagPrinter{}, "[[%a]]"}, + {"%-a", [1]flagPrinter{}, "[[%-a]]"}, + {"%+a", [1]flagPrinter{}, "[[%+a]]"}, + {"%#a", [1]flagPrinter{}, "[[%#a]]"}, + {"% a", [1]flagPrinter{}, "[[% a]]"}, + {"%0a", [1]flagPrinter{}, "[[%0a]]"}, + {"%1.2a", [1]flagPrinter{}, "[[%1.2a]]"}, + {"%-1.2a", [1]flagPrinter{}, "[[%-1.2a]]"}, + {"%+1.2a", [1]flagPrinter{}, "[[%+1.2a]]"}, + {"%-+1.2a", [1]flagPrinter{}, "[[%+-1.2a]]"}, + {"%-+1.2abc", [1]flagPrinter{}, "[[%+-1.2a]]bc"}, + {"%-1.2abc", [1]flagPrinter{}, "[[%-1.2a]]bc"}, + + // simple values with the 'v' verb + {"%v", flagPrinter{}, "[%v]"}, + {"%-v", flagPrinter{}, "[%-v]"}, + {"%+v", flagPrinter{}, "[%+v]"}, + {"%#v", flagPrinter{}, "[%#v]"}, + {"% v", flagPrinter{}, "[% v]"}, + {"%0v", flagPrinter{}, "[%0v]"}, + {"%1.2v", flagPrinter{}, "[%1.2v]"}, + {"%-1.2v", flagPrinter{}, "[%-1.2v]"}, + {"%+1.2v", flagPrinter{}, "[%+1.2v]"}, + {"%-+1.2v", flagPrinter{}, "[%+-1.2v]"}, + {"%-+1.2vbc", flagPrinter{}, "[%+-1.2v]bc"}, + {"%-1.2vbc", flagPrinter{}, "[%-1.2v]bc"}, + + // composite values with the 'v' verb. + {"%v", [1]flagPrinter{}, "[[%v]]"}, + {"%-v", [1]flagPrinter{}, "[[%-v]]"}, + {"%+v", [1]flagPrinter{}, "[[%+v]]"}, + {"%#v", [1]flagPrinter{}, "[1]message.flagPrinter{[%#v]}"}, + {"% v", [1]flagPrinter{}, "[[% v]]"}, + {"%0v", [1]flagPrinter{}, "[[%0v]]"}, + {"%1.2v", [1]flagPrinter{}, "[[%1.2v]]"}, + {"%-1.2v", [1]flagPrinter{}, "[[%-1.2v]]"}, + {"%+1.2v", [1]flagPrinter{}, "[[%+1.2v]]"}, + {"%-+1.2v", [1]flagPrinter{}, "[[%+-1.2v]]"}, + {"%-+1.2vbc", [1]flagPrinter{}, "[[%+-1.2v]]bc"}, + {"%-1.2vbc", [1]flagPrinter{}, "[[%-1.2v]]bc"}, +} + +func TestFormatterFlags(t *testing.T) { + p := NewPrinter(language.Und) + for _, tt := range formatterFlagTests { + s := p.Sprintf(tt.in, tt.val) + if s != tt.out { + t.Errorf("Sprintf(%q, %T) = %q, want %q", tt.in, tt.val, s, tt.out) + } + } +} diff --git a/vendor/golang.org/x/text/message/format.go b/vendor/golang.org/x/text/message/format.go new file mode 100644 index 0000000..a47d17d --- /dev/null +++ b/vendor/golang.org/x/text/message/format.go @@ -0,0 +1,510 @@ +// Copyright 2017 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. + +package message + +import ( + "bytes" + "strconv" + "unicode/utf8" + + "golang.org/x/text/internal/format" +) + +const ( + ldigits = "0123456789abcdefx" + udigits = "0123456789ABCDEFX" +) + +const ( + signed = true + unsigned = false +) + +// A formatInfo is the raw formatter used by Printf etc. +// It prints into a buffer that must be set up separately. +type formatInfo struct { + buf *bytes.Buffer + + format.Parser + + // intbuf is large enough to store %b of an int64 with a sign and + // avoids padding at the end of the struct on 32 bit architectures. + intbuf [68]byte +} + +func (f *formatInfo) init(buf *bytes.Buffer) { + f.ClearFlags() + f.buf = buf +} + +// writePadding generates n bytes of padding. +func (f *formatInfo) writePadding(n int) { + if n <= 0 { // No padding bytes needed. + return + } + f.buf.Grow(n) + // Decide which byte the padding should be filled with. + padByte := byte(' ') + if f.Zero { + padByte = byte('0') + } + // Fill padding with padByte. + for i := 0; i < n; i++ { + f.buf.WriteByte(padByte) // TODO: make more efficient. + } +} + +// pad appends b to f.buf, padded on left (!f.minus) or right (f.minus). +func (f *formatInfo) pad(b []byte) { + if !f.WidthPresent || f.Width == 0 { + f.buf.Write(b) + return + } + width := f.Width - utf8.RuneCount(b) + if !f.Minus { + // left padding + f.writePadding(width) + f.buf.Write(b) + } else { + // right padding + f.buf.Write(b) + f.writePadding(width) + } +} + +// padString appends s to f.buf, padded on left (!f.minus) or right (f.minus). +func (f *formatInfo) padString(s string) { + if !f.WidthPresent || f.Width == 0 { + f.buf.WriteString(s) + return + } + width := f.Width - utf8.RuneCountInString(s) + if !f.Minus { + // left padding + f.writePadding(width) + f.buf.WriteString(s) + } else { + // right padding + f.buf.WriteString(s) + f.writePadding(width) + } +} + +// fmt_boolean formats a boolean. +func (f *formatInfo) fmt_boolean(v bool) { + if v { + f.padString("true") + } else { + f.padString("false") + } +} + +// fmt_unicode formats a uint64 as "U+0078" or with f.sharp set as "U+0078 'x'". +func (f *formatInfo) fmt_unicode(u uint64) { + buf := f.intbuf[0:] + + // With default precision set the maximum needed buf length is 18 + // for formatting -1 with %#U ("U+FFFFFFFFFFFFFFFF") which fits + // into the already allocated intbuf with a capacity of 68 bytes. + prec := 4 + if f.PrecPresent && f.Prec > 4 { + prec = f.Prec + // Compute space needed for "U+" , number, " '", character, "'". + width := 2 + prec + 2 + utf8.UTFMax + 1 + if width > len(buf) { + buf = make([]byte, width) + } + } + + // Format into buf, ending at buf[i]. Formatting numbers is easier right-to-left. + i := len(buf) + + // For %#U we want to add a space and a quoted character at the end of the buffer. + if f.Sharp && u <= utf8.MaxRune && strconv.IsPrint(rune(u)) { + i-- + buf[i] = '\'' + i -= utf8.RuneLen(rune(u)) + utf8.EncodeRune(buf[i:], rune(u)) + i-- + buf[i] = '\'' + i-- + buf[i] = ' ' + } + // Format the Unicode code point u as a hexadecimal number. + for u >= 16 { + i-- + buf[i] = udigits[u&0xF] + prec-- + u >>= 4 + } + i-- + buf[i] = udigits[u] + prec-- + // Add zeros in front of the number until requested precision is reached. + for prec > 0 { + i-- + buf[i] = '0' + prec-- + } + // Add a leading "U+". + i-- + buf[i] = '+' + i-- + buf[i] = 'U' + + oldZero := f.Zero + f.Zero = false + f.pad(buf[i:]) + f.Zero = oldZero +} + +// fmt_integer formats signed and unsigned integers. +func (f *formatInfo) fmt_integer(u uint64, base int, isSigned bool, digits string) { + negative := isSigned && int64(u) < 0 + if negative { + u = -u + } + + buf := f.intbuf[0:] + // The already allocated f.intbuf with a capacity of 68 bytes + // is large enough for integer formatting when no precision or width is set. + if f.WidthPresent || f.PrecPresent { + // Account 3 extra bytes for possible addition of a sign and "0x". + width := 3 + f.Width + f.Prec // wid and prec are always positive. + if width > len(buf) { + // We're going to need a bigger boat. + buf = make([]byte, width) + } + } + + // Two ways to ask for extra leading zero digits: %.3d or %03d. + // If both are specified the f.zero flag is ignored and + // padding with spaces is used instead. + prec := 0 + if f.PrecPresent { + prec = f.Prec + // Precision of 0 and value of 0 means "print nothing" but padding. + if prec == 0 && u == 0 { + oldZero := f.Zero + f.Zero = false + f.writePadding(f.Width) + f.Zero = oldZero + return + } + } else if f.Zero && f.WidthPresent { + prec = f.Width + if negative || f.Plus || f.Space { + prec-- // leave room for sign + } + } + + // Because printing is easier right-to-left: format u into buf, ending at buf[i]. + // We could make things marginally faster by splitting the 32-bit case out + // into a separate block but it's not worth the duplication, so u has 64 bits. + i := len(buf) + // Use constants for the division and modulo for more efficient code. + // Switch cases ordered by popularity. + switch base { + case 10: + for u >= 10 { + i-- + next := u / 10 + buf[i] = byte('0' + u - next*10) + u = next + } + case 16: + for u >= 16 { + i-- + buf[i] = digits[u&0xF] + u >>= 4 + } + case 8: + for u >= 8 { + i-- + buf[i] = byte('0' + u&7) + u >>= 3 + } + case 2: + for u >= 2 { + i-- + buf[i] = byte('0' + u&1) + u >>= 1 + } + default: + panic("fmt: unknown base; can't happen") + } + i-- + buf[i] = digits[u] + for i > 0 && prec > len(buf)-i { + i-- + buf[i] = '0' + } + + // Various prefixes: 0x, -, etc. + if f.Sharp { + switch base { + case 8: + if buf[i] != '0' { + i-- + buf[i] = '0' + } + case 16: + // Add a leading 0x or 0X. + i-- + buf[i] = digits[16] + i-- + buf[i] = '0' + } + } + + if negative { + i-- + buf[i] = '-' + } else if f.Plus { + i-- + buf[i] = '+' + } else if f.Space { + i-- + buf[i] = ' ' + } + + // Left padding with zeros has already been handled like precision earlier + // or the f.zero flag is ignored due to an explicitly set precision. + oldZero := f.Zero + f.Zero = false + f.pad(buf[i:]) + f.Zero = oldZero +} + +// truncate truncates the string to the specified precision, if present. +func (f *formatInfo) truncate(s string) string { + if f.PrecPresent { + n := f.Prec + for i := range s { + n-- + if n < 0 { + return s[:i] + } + } + } + return s +} + +// fmt_s formats a string. +func (f *formatInfo) fmt_s(s string) { + s = f.truncate(s) + f.padString(s) +} + +// fmt_sbx formats a string or byte slice as a hexadecimal encoding of its bytes. +func (f *formatInfo) fmt_sbx(s string, b []byte, digits string) { + length := len(b) + if b == nil { + // No byte slice present. Assume string s should be encoded. + length = len(s) + } + // Set length to not process more bytes than the precision demands. + if f.PrecPresent && f.Prec < length { + length = f.Prec + } + // Compute width of the encoding taking into account the f.sharp and f.space flag. + width := 2 * length + if width > 0 { + if f.Space { + // Each element encoded by two hexadecimals will get a leading 0x or 0X. + if f.Sharp { + width *= 2 + } + // Elements will be separated by a space. + width += length - 1 + } else if f.Sharp { + // Only a leading 0x or 0X will be added for the whole string. + width += 2 + } + } else { // The byte slice or string that should be encoded is empty. + if f.WidthPresent { + f.writePadding(f.Width) + } + return + } + // Handle padding to the left. + if f.WidthPresent && f.Width > width && !f.Minus { + f.writePadding(f.Width - width) + } + // Write the encoding directly into the output buffer. + buf := f.buf + if f.Sharp { + // Add leading 0x or 0X. + buf.WriteByte('0') + buf.WriteByte(digits[16]) + } + var c byte + for i := 0; i < length; i++ { + if f.Space && i > 0 { + // Separate elements with a space. + buf.WriteByte(' ') + if f.Sharp { + // Add leading 0x or 0X for each element. + buf.WriteByte('0') + buf.WriteByte(digits[16]) + } + } + if b != nil { + c = b[i] // Take a byte from the input byte slice. + } else { + c = s[i] // Take a byte from the input string. + } + // Encode each byte as two hexadecimal digits. + buf.WriteByte(digits[c>>4]) + buf.WriteByte(digits[c&0xF]) + } + // Handle padding to the right. + if f.WidthPresent && f.Width > width && f.Minus { + f.writePadding(f.Width - width) + } +} + +// fmt_sx formats a string as a hexadecimal encoding of its bytes. +func (f *formatInfo) fmt_sx(s, digits string) { + f.fmt_sbx(s, nil, digits) +} + +// fmt_bx formats a byte slice as a hexadecimal encoding of its bytes. +func (f *formatInfo) fmt_bx(b []byte, digits string) { + f.fmt_sbx("", b, digits) +} + +// fmt_q formats a string as a double-quoted, escaped Go string constant. +// If f.sharp is set a raw (backquoted) string may be returned instead +// if the string does not contain any control characters other than tab. +func (f *formatInfo) fmt_q(s string) { + s = f.truncate(s) + if f.Sharp && strconv.CanBackquote(s) { + f.padString("`" + s + "`") + return + } + buf := f.intbuf[:0] + if f.Plus { + f.pad(strconv.AppendQuoteToASCII(buf, s)) + } else { + f.pad(strconv.AppendQuote(buf, s)) + } +} + +// fmt_c formats an integer as a Unicode character. +// If the character is not valid Unicode, it will print '\ufffd'. +func (f *formatInfo) fmt_c(c uint64) { + r := rune(c) + if c > utf8.MaxRune { + r = utf8.RuneError + } + buf := f.intbuf[:0] + w := utf8.EncodeRune(buf[:utf8.UTFMax], r) + f.pad(buf[:w]) +} + +// fmt_qc formats an integer as a single-quoted, escaped Go character constant. +// If the character is not valid Unicode, it will print '\ufffd'. +func (f *formatInfo) fmt_qc(c uint64) { + r := rune(c) + if c > utf8.MaxRune { + r = utf8.RuneError + } + buf := f.intbuf[:0] + if f.Plus { + f.pad(strconv.AppendQuoteRuneToASCII(buf, r)) + } else { + f.pad(strconv.AppendQuoteRune(buf, r)) + } +} + +// fmt_float formats a float64. It assumes that verb is a valid format specifier +// for strconv.AppendFloat and therefore fits into a byte. +func (f *formatInfo) fmt_float(v float64, size int, verb rune, prec int) { + // Explicit precision in format specifier overrules default precision. + if f.PrecPresent { + prec = f.Prec + } + // Format number, reserving space for leading + sign if needed. + num := strconv.AppendFloat(f.intbuf[:1], v, byte(verb), prec, size) + if num[1] == '-' || num[1] == '+' { + num = num[1:] + } else { + num[0] = '+' + } + // f.space means to add a leading space instead of a "+" sign unless + // the sign is explicitly asked for by f.plus. + if f.Space && num[0] == '+' && !f.Plus { + num[0] = ' ' + } + // Special handling for infinities and NaN, + // which don't look like a number so shouldn't be padded with zeros. + if num[1] == 'I' || num[1] == 'N' { + oldZero := f.Zero + f.Zero = false + // Remove sign before NaN if not asked for. + if num[1] == 'N' && !f.Space && !f.Plus { + num = num[1:] + } + f.pad(num) + f.Zero = oldZero + return + } + // The sharp flag forces printing a decimal point for non-binary formats + // and retains trailing zeros, which we may need to restore. + if f.Sharp && verb != 'b' { + digits := 0 + switch verb { + case 'v', 'g', 'G': + digits = prec + // If no precision is set explicitly use a precision of 6. + if digits == -1 { + digits = 6 + } + } + + // Buffer pre-allocated with enough room for + // exponent notations of the form "e+123". + var tailBuf [5]byte + tail := tailBuf[:0] + + hasDecimalPoint := false + // Starting from i = 1 to skip sign at num[0]. + for i := 1; i < len(num); i++ { + switch num[i] { + case '.': + hasDecimalPoint = true + case 'e', 'E': + tail = append(tail, num[i:]...) + num = num[:i] + default: + digits-- + } + } + if !hasDecimalPoint { + num = append(num, '.') + } + for digits > 0 { + num = append(num, '0') + digits-- + } + num = append(num, tail...) + } + // We want a sign if asked for and if the sign is not positive. + if f.Plus || num[0] != '+' { + // If we're zero padding to the left we want the sign before the leading zeros. + // Achieve this by writing the sign out and then padding the unsigned number. + if f.Zero && f.WidthPresent && f.Width > len(num) { + f.buf.WriteByte(num[0]) + f.writePadding(f.Width - len(num)) + f.buf.Write(num[1:]) + return + } + f.pad(num) + return + } + // No sign to show and the number is positive; just print the unsigned number. + f.pad(num[1:]) +} diff --git a/vendor/golang.org/x/text/message/message.go b/vendor/golang.org/x/text/message/message.go index 32ff3ef..48d7663 100644 --- a/vendor/golang.org/x/text/message/message.go +++ b/vendor/golang.org/x/text/message/message.go @@ -2,98 +2,143 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// Package message implements formatted I/O for localized strings with functions -// analogous to the fmt's print functions. -// -// NOTE: Under construction. See https://golang.org/design/12750-localization -// and its corresponding proposal issue https://golang.org/issues/12750. package message // import "golang.org/x/text/message" import ( - "fmt" "io" - "strings" + "os" - "golang.org/x/text/internal/format" + // Include features to facilitate generated catalogs. + _ "golang.org/x/text/feature/plural" + + "golang.org/x/text/internal/number" "golang.org/x/text/language" + "golang.org/x/text/message/catalog" ) // A Printer implements language-specific formatted I/O analogous to the fmt -// package. Only one goroutine may use a Printer at the same time. +// package. type Printer struct { + // the language tag language.Tag - cat *Catalog + toDecimal number.Formatter + toScientific number.Formatter + + cat catalog.Catalog +} - // NOTE: limiting one goroutine per Printer allows for many optimizations - // and simplifications. We can consider removing this restriction down the - // road if it the benefits do not seem to outweigh the disadvantages. +type options struct { + cat catalog.Catalog + // TODO: + // - allow %s to print integers in written form (tables are likely too large + // to enable this by default). + // - list behavior + // +} + +// An Option defines an option of a Printer. +type Option func(o *options) + +// Catalog defines the catalog to be used. +func Catalog(c catalog.Catalog) Option { + return func(o *options) { o.cat = c } } // NewPrinter returns a Printer that formats messages tailored to language t. -func NewPrinter(t language.Tag) *Printer { - return DefaultCatalog.Printer(t) +func NewPrinter(t language.Tag, opts ...Option) *Printer { + options := &options{ + cat: DefaultCatalog, + } + for _, o := range opts { + o(options) + } + p := &Printer{ + tag: t, + cat: options.cat, + } + p.toDecimal.InitDecimal(t) + p.toScientific.InitScientific(t) + return p } // Sprint is like fmt.Sprint, but using language-specific formatting. func (p *Printer) Sprint(a ...interface{}) string { - return fmt.Sprint(p.bindArgs(a)...) + pp := newPrinter(p) + pp.doPrint(a) + s := pp.String() + pp.free() + return s } // Fprint is like fmt.Fprint, but using language-specific formatting. func (p *Printer) Fprint(w io.Writer, a ...interface{}) (n int, err error) { - return fmt.Fprint(w, p.bindArgs(a)...) + pp := newPrinter(p) + pp.doPrint(a) + n64, err := io.Copy(w, &pp.Buffer) + pp.free() + return int(n64), err } // Print is like fmt.Print, but using language-specific formatting. func (p *Printer) Print(a ...interface{}) (n int, err error) { - return fmt.Print(p.bindArgs(a)...) + return p.Fprint(os.Stdout, a...) } // Sprintln is like fmt.Sprintln, but using language-specific formatting. func (p *Printer) Sprintln(a ...interface{}) string { - return fmt.Sprintln(p.bindArgs(a)...) + pp := newPrinter(p) + pp.doPrintln(a) + s := pp.String() + pp.free() + return s } // Fprintln is like fmt.Fprintln, but using language-specific formatting. func (p *Printer) Fprintln(w io.Writer, a ...interface{}) (n int, err error) { - return fmt.Fprintln(w, p.bindArgs(a)...) + pp := newPrinter(p) + pp.doPrintln(a) + n64, err := io.Copy(w, &pp.Buffer) + pp.free() + return int(n64), err } // Println is like fmt.Println, but using language-specific formatting. func (p *Printer) Println(a ...interface{}) (n int, err error) { - return fmt.Println(p.bindArgs(a)...) + return p.Fprintln(os.Stdout, a...) } // Sprintf is like fmt.Sprintf, but using language-specific formatting. func (p *Printer) Sprintf(key Reference, a ...interface{}) string { - msg, hasSub := p.lookup(key) - if !hasSub { - return fmt.Sprintf(msg) // work around limitation of fmt - } - return fmt.Sprintf(msg, p.bindArgs(a)...) + pp := newPrinter(p) + lookupAndFormat(pp, key, a) + s := pp.String() + pp.free() + return s } // Fprintf is like fmt.Fprintf, but using language-specific formatting. func (p *Printer) Fprintf(w io.Writer, key Reference, a ...interface{}) (n int, err error) { - msg, hasSub := p.lookup(key) - if !hasSub { - return fmt.Fprintf(w, msg) // work around limitation of fmt - } - return fmt.Fprintf(w, msg, p.bindArgs(a)...) + pp := newPrinter(p) + lookupAndFormat(pp, key, a) + n, err = w.Write(pp.Bytes()) + pp.free() + return n, err + } // Printf is like fmt.Printf, but using language-specific formatting. func (p *Printer) Printf(key Reference, a ...interface{}) (n int, err error) { - msg, hasSub := p.lookup(key) - if !hasSub { - return fmt.Printf(msg) // work around limitation of fmt - } - return fmt.Printf(msg, p.bindArgs(a)...) + pp := newPrinter(p) + lookupAndFormat(pp, key, a) + n, err = os.Stdout.Write(pp.Bytes()) + pp.free() + return n, err } -func (p *Printer) lookup(r Reference) (msg string, hasSub bool) { - var id string +func lookupAndFormat(p *printer, r Reference, a []interface{}) { + p.fmt.Reset(a) + var id, msg string switch v := r.(type) { case string: id, msg = v, v @@ -102,33 +147,39 @@ func (p *Printer) lookup(r Reference) (msg string, hasSub bool) { default: panic("key argument is not a Reference") } - if s, ok := p.cat.get(p.tag, id); ok { - msg = s - } - // fmt does not allow all arguments to be dropped in a format string. It - // only allows arguments to be dropped if at least one of the substitutions - // uses the positional marker (e.g. %[1]s). This hack works around this. - // TODO: This is only an approximation of the parsing of substitution - // patterns. Make more precise once we know if we can get by with fmt's - // formatting, which may not be the case. - for i := 0; i < len(msg)-1; i++ { - if msg[i] == '%' { - for i++; i < len(msg); i++ { - if strings.IndexByte("[]#+- *01234567890.", msg[i]) < 0 { - break - } - } - if i < len(msg) && msg[i] != '%' { - hasSub = true - break - } + + if p.catContext.Execute(id) == catalog.ErrNotFound { + if p.catContext.Execute(msg) == catalog.ErrNotFound { + p.Render(msg) + return } } - return msg, hasSub +} + +type rawPrinter struct { + p *printer +} + +func (p rawPrinter) Render(msg string) { p.p.WriteString(msg) } +func (p rawPrinter) Arg(i int) interface{} { return nil } + +// Arg implements catmsg.Renderer. +func (p *printer) Arg(i int) interface{} { // TODO, also return "ok" bool + i-- + if uint(i) < uint(len(p.fmt.Args)) { + return p.fmt.Args[i] + } + return nil +} + +// Render implements catmsg.Renderer. +func (p *printer) Render(msg string) { + p.doPrintf(msg) } // A Reference is a string or a message reference. type Reference interface { + // TODO: also allow []string } // Key creates a message Reference for a message where the given id is used for @@ -140,46 +191,3 @@ func Key(id string, fallback string) Reference { type key struct { id, fallback string } - -// bindArgs wraps arguments with implementation of fmt.Formatter, if needed. -func (p *Printer) bindArgs(a []interface{}) []interface{} { - out := make([]interface{}, len(a)) - for i, x := range a { - switch v := x.(type) { - case fmt.Formatter: - // Wrap the value with a Formatter that augments the State with - // language-specific attributes. - out[i] = &value{v, p} - - // NOTE: as we use fmt.Formatter, we can't distinguish between - // regular and localized formatters, so we always need to wrap it. - - // TODO: handle - // - numbers - // - lists - // - time? - default: - out[i] = x - } - } - return out -} - -// state implements "golang.org/x/text/internal/format".State. -type state struct { - fmt.State - p *Printer -} - -func (s *state) Language() language.Tag { return s.p.tag } - -var _ format.State = &state{} - -type value struct { - x fmt.Formatter - p *Printer -} - -func (v *value) Format(s fmt.State, verb rune) { - v.x.Format(&state{s, v.p}, verb) -} diff --git a/vendor/golang.org/x/text/message/message_test.go b/vendor/golang.org/x/text/message/message_test.go index f7dba8d..e84bd97 100644 --- a/vendor/golang.org/x/text/message/message_test.go +++ b/vendor/golang.org/x/text/message/message_test.go @@ -10,8 +10,10 @@ import ( "io" "testing" + "golang.org/x/text/internal" "golang.org/x/text/internal/format" "golang.org/x/text/language" + "golang.org/x/text/message/catalog" ) type formatFunc func(s fmt.State, v rune) @@ -48,13 +50,14 @@ func TestBinding(t *testing.T) { } } -func TestFormatSelection(t *testing.T) { +func TestLocalization(t *testing.T) { type test struct { tag string key Reference args []interface{} want string } + args := func(x ...interface{}) []interface{} { return x } empty := []interface{}{} joe := []interface{}{"Joe"} joeAndMary := []interface{}{"Joe", "Mary"} @@ -124,26 +127,66 @@ func TestFormatSelection(t *testing.T) { {"und", "hello %+%%s", joeAndMary, "hello %Joe%!(EXTRA string=Mary)"}, {"und", "hello %-42%%s ", joeAndMary, "hello %Joe %!(EXTRA string=Mary)"}, }, + }, { + desc: "number formatting", + cat: []entry{ + {"und", "files", "%d files left"}, + {"und", "meters", "%.2f meters"}, + {"de", "files", "%d Dateien übrig"}, + }, + test: []test{ + {"en", "meters", args(3000.2), "3,000.20 meters"}, + {"en-u-nu-gujr", "files", args(123456), "૧૨૩,૪૫૬ files left"}, + {"de", "files", args(1234), "1.234 Dateien übrig"}, + {"de-CH", "files", args(1234), "1’234 Dateien übrig"}, + {"de-CH-u-nu-mong", "files", args(1234), "᠑’᠒᠓᠔ Dateien übrig"}, + }, + }, { + desc: "substitute translation", + cat: []entry{ + {"en", "google", "Google"}, + {"en", "sub", "%s"}, + {"en", "visit", "Lookup: %m."}, + }, + test: []test{ + {"en", "visit", args("google"), "Lookup: Google."}, + {"en", "visit", args("sub"), "Lookup: %s."}, + }, }} for _, tc := range testCases { cat, _ := initCat(tc.cat) for i, pt := range tc.test { - p := cat.Printer(language.MustParse(pt.tag)) + t.Run(fmt.Sprintf("%s:%d", tc.desc, i), func(t *testing.T) { + p := NewPrinter(language.MustParse(pt.tag), Catalog(cat)) - if got := p.Sprintf(pt.key, pt.args...); got != pt.want { - t.Errorf("%s:%d:Sprintf(%s, %v) = %s; want %s", - tc.desc, i, pt.key, pt.args, got, pt.want) - continue // Next error will likely be the same. - } + if got := p.Sprintf(pt.key, pt.args...); got != pt.want { + t.Errorf("Sprintf(%q, %v) = %s; want %s", + pt.key, pt.args, got, pt.want) + return // Next error will likely be the same. + } - w := &bytes.Buffer{} - p.Fprintf(w, pt.key, pt.args...) - if got := w.String(); got != pt.want { - t.Errorf("%s:%d:Fprintf(%s, %v) = %s; want %s", - tc.desc, i, pt.key, pt.args, got, pt.want) - } + w := &bytes.Buffer{} + p.Fprintf(w, pt.key, pt.args...) + if got := w.String(); got != pt.want { + t.Errorf("Fprintf(%q, %v) = %s; want %s", + pt.key, pt.args, got, pt.want) + } + }) } } } + +type entry struct{ tag, key, msg string } + +func initCat(entries []entry) (*catalog.Builder, []language.Tag) { + tags := []language.Tag{} + cat := catalog.NewBuilder() + for _, e := range entries { + tag := language.MustParse(e.tag) + tags = append(tags, tag) + cat.SetString(tag, e.key, e.msg) + } + return cat, internal.UniqueTags(tags) +} diff --git a/vendor/golang.org/x/text/message/pipeline/extract.go b/vendor/golang.org/x/text/message/pipeline/extract.go new file mode 100644 index 0000000..379cc6d --- /dev/null +++ b/vendor/golang.org/x/text/message/pipeline/extract.go @@ -0,0 +1,314 @@ +// Copyright 2016 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. + +package pipeline + +import ( + "bytes" + "fmt" + "go/ast" + "go/constant" + "go/format" + "go/token" + "go/types" + "path" + "path/filepath" + "strings" + "unicode" + "unicode/utf8" + + fmtparser "golang.org/x/text/internal/format" + "golang.org/x/tools/go/loader" +) + +// TODO: +// - merge information into existing files +// - handle different file formats (PO, XLIFF) +// - handle features (gender, plural) +// - message rewriting + +// - %m substitutions +// - `msg:"etc"` tags +// - msg/Msg top-level vars and strings. + +// Extract extracts all strings form the package defined in Config. +func Extract(c *Config) (*State, error) { + conf := loader.Config{} + prog, err := loadPackages(&conf, c.Packages) + if err != nil { + return nil, wrap(err, "") + } + + // print returns Go syntax for the specified node. + print := func(n ast.Node) string { + var buf bytes.Buffer + format.Node(&buf, conf.Fset, n) + return buf.String() + } + + var messages []Message + + for _, info := range prog.AllPackages { + for _, f := range info.Files { + // Associate comments with nodes. + cmap := ast.NewCommentMap(prog.Fset, f, f.Comments) + getComment := func(n ast.Node) string { + cs := cmap.Filter(n).Comments() + if len(cs) > 0 { + return strings.TrimSpace(cs[0].Text()) + } + return "" + } + + // Find function calls. + ast.Inspect(f, func(n ast.Node) bool { + call, ok := n.(*ast.CallExpr) + if !ok { + return true + } + + // Skip calls of functions other than + // (*message.Printer).{Sp,Fp,P}rintf. + sel, ok := call.Fun.(*ast.SelectorExpr) + if !ok { + return true + } + meth := info.Selections[sel] + if meth == nil || meth.Kind() != types.MethodVal { + return true + } + // TODO: remove cheap hack and check if the type either + // implements some interface or is specifically of type + // "golang.org/x/text/message".Printer. + m, ok := extractFuncs[path.Base(meth.Recv().String())] + if !ok { + return true + } + + fmtType, ok := m[meth.Obj().Name()] + if !ok { + return true + } + // argn is the index of the format string. + argn := fmtType.arg + if argn >= len(call.Args) { + return true + } + + args := call.Args[fmtType.arg:] + + fmtMsg, ok := msgStr(info, args[0]) + if !ok { + // TODO: identify the type of the format argument. If it + // is not a string, multiple keys may be defined. + return true + } + comment := "" + key := []string{} + if ident, ok := args[0].(*ast.Ident); ok { + key = append(key, ident.Name) + if v, ok := ident.Obj.Decl.(*ast.ValueSpec); ok && v.Comment != nil { + // TODO: get comment above ValueSpec as well + comment = v.Comment.Text() + } + } + + arguments := []argument{} + args = args[1:] + simArgs := make([]interface{}, len(args)) + for i, arg := range args { + expr := print(arg) + val := "" + if v := info.Types[arg].Value; v != nil { + val = v.ExactString() + simArgs[i] = val + switch arg.(type) { + case *ast.BinaryExpr, *ast.UnaryExpr: + expr = val + } + } + arguments = append(arguments, argument{ + ArgNum: i + 1, + Type: info.Types[arg].Type.String(), + UnderlyingType: info.Types[arg].Type.Underlying().String(), + Expr: expr, + Value: val, + Comment: getComment(arg), + Position: posString(conf, info, arg.Pos()), + // TODO report whether it implements + // interfaces plural.Interface, + // gender.Interface. + }) + } + msg := "" + + ph := placeholders{index: map[string]string{}} + + trimmed, _, _ := trimWS(fmtMsg) + + p := fmtparser.Parser{} + p.Reset(simArgs) + for p.SetFormat(trimmed); p.Scan(); { + switch p.Status { + case fmtparser.StatusText: + msg += p.Text() + case fmtparser.StatusSubstitution, + fmtparser.StatusBadWidthSubstitution, + fmtparser.StatusBadPrecSubstitution: + arguments[p.ArgNum-1].used = true + arg := arguments[p.ArgNum-1] + sub := p.Text() + if !p.HasIndex { + r, sz := utf8.DecodeLastRuneInString(sub) + sub = fmt.Sprintf("%s[%d]%c", sub[:len(sub)-sz], p.ArgNum, r) + } + msg += fmt.Sprintf("{%s}", ph.addArg(&arg, sub)) + } + } + key = append(key, msg) + + // Add additional Placeholders that can be used in translations + // that are not present in the string. + for _, arg := range arguments { + if arg.used { + continue + } + ph.addArg(&arg, fmt.Sprintf("%%[%d]v", arg.ArgNum)) + } + + if c := getComment(call.Args[0]); c != "" { + comment = c + } + + messages = append(messages, Message{ + ID: key, + Key: fmtMsg, + Message: Text{Msg: msg}, + // TODO(fix): this doesn't get the before comment. + Comment: comment, + Placeholders: ph.slice, + Position: posString(conf, info, call.Lparen), + }) + return true + }) + } + } + + return &State{ + Config: *c, + program: prog, + Extracted: Messages{ + Language: c.SourceLanguage, + Messages: messages, + }, + }, nil +} + +func posString(conf loader.Config, info *loader.PackageInfo, pos token.Pos) string { + p := conf.Fset.Position(pos) + file := fmt.Sprintf("%s:%d:%d", filepath.Base(p.Filename), p.Line, p.Column) + return filepath.Join(info.Pkg.Path(), file) +} + +// extractFuncs indicates the types and methods for which to extract strings, +// and which argument to extract. +// TODO: use the types in conf.Import("golang.org/x/text/message") to extract +// the correct instances. +var extractFuncs = map[string]map[string]extractType{ + // TODO: Printer -> *golang.org/x/text/message.Printer + "message.Printer": { + "Printf": extractType{arg: 0, format: true}, + "Sprintf": extractType{arg: 0, format: true}, + "Fprintf": extractType{arg: 1, format: true}, + + "Lookup": extractType{arg: 0}, + }, +} + +type extractType struct { + // format indicates if the next arg is a formatted string or whether to + // concatenate all arguments + format bool + // arg indicates the position of the argument to extract. + arg int +} + +func getID(arg *argument) string { + s := getLastComponent(arg.Expr) + s = strip(s) + s = strings.Replace(s, " ", "", -1) + // For small variable names, use user-defined types for more info. + if len(s) <= 2 && arg.UnderlyingType != arg.Type { + s = getLastComponent(arg.Type) + } + return strings.Title(s) +} + +// strip is a dirty hack to convert function calls to placeholder IDs. +func strip(s string) string { + s = strings.Map(func(r rune) rune { + if unicode.IsSpace(r) || r == '-' { + return '_' + } + if !unicode.In(r, unicode.Letter, unicode.Mark, unicode.Number) { + return -1 + } + return r + }, s) + // Strip "Get" from getter functions. + if strings.HasPrefix(s, "Get") || strings.HasPrefix(s, "get") { + if len(s) > len("get") { + r, _ := utf8.DecodeRuneInString(s) + if !unicode.In(r, unicode.Ll, unicode.M) { // not lower or mark + s = s[len("get"):] + } + } + } + return s +} + +type placeholders struct { + index map[string]string + slice []Placeholder +} + +func (p *placeholders) addArg(arg *argument, sub string) (id string) { + id = getID(arg) + id1 := id + alt, ok := p.index[id1] + for i := 1; ok && alt != sub; i++ { + id1 = fmt.Sprintf("%s_%d", id, i) + alt, ok = p.index[id1] + } + p.index[id1] = sub + p.slice = append(p.slice, Placeholder{ + ID: id1, + String: sub, + Type: arg.Type, + UnderlyingType: arg.UnderlyingType, + ArgNum: arg.ArgNum, + Expr: arg.Expr, + Comment: arg.Comment, + }) + return id1 +} + +func getLastComponent(s string) string { + return s[1+strings.LastIndexByte(s, '.'):] +} + +func msgStr(info *loader.PackageInfo, e ast.Expr) (s string, ok bool) { + v := info.Types[e].Value + if v == nil || v.Kind() != constant.String { + return "", false + } + s = constant.StringVal(v) + // Only record strings with letters. + for _, r := range s { + if unicode.In(r, unicode.L) { + return s, true + } + } + return "", false +} diff --git a/vendor/golang.org/x/text/message/pipeline/generate.go b/vendor/golang.org/x/text/message/pipeline/generate.go new file mode 100644 index 0000000..5d329b2 --- /dev/null +++ b/vendor/golang.org/x/text/message/pipeline/generate.go @@ -0,0 +1,314 @@ +// Copyright 2017 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. + +package pipeline + +import ( + "fmt" + "go/build" + "io" + "path/filepath" + "regexp" + "sort" + "strings" + "text/template" + + "golang.org/x/text/collate" + "golang.org/x/text/feature/plural" + "golang.org/x/text/internal" + "golang.org/x/text/internal/catmsg" + "golang.org/x/text/internal/gen" + "golang.org/x/text/language" + "golang.org/x/tools/go/loader" +) + +var transRe = regexp.MustCompile(`messages\.(.*)\.json`) + +// Generate writes a Go file that defines a Catalog with translated messages. +// Translations are retrieved from s.Messages, not s.Translations, so it +// is assumed Merge has been called. +func (s *State) Generate() error { + path := s.Config.GenPackage + if path == "" { + path = "." + } + isDir := path[0] == '.' + prog, err := loadPackages(&loader.Config{}, []string{path}) + if err != nil { + return wrap(err, "could not load package") + } + pkgs := prog.InitialPackages() + if len(pkgs) != 1 { + return errorf("more than one package selected: %v", pkgs) + } + pkg := pkgs[0].Pkg.Name() + + cw, err := s.generate() + if err != nil { + return err + } + if !isDir { + gopath := build.Default.GOPATH + path = filepath.Join(gopath, filepath.FromSlash(pkgs[0].Pkg.Path())) + } + path = filepath.Join(path, s.Config.GenFile) + cw.WriteGoFile(path, pkg) // TODO: WriteGoFile should return error. + return err +} + +// WriteGen writes a Go file with the given package name to w that defines a +// Catalog with translated messages. Translations are retrieved from s.Messages, +// not s.Translations, so it is assumed Merge has been called. +func (s *State) WriteGen(w io.Writer, pkg string) error { + cw, err := s.generate() + if err != nil { + return err + } + _, err = cw.WriteGo(w, pkg, "") + return err +} + +// Generate is deprecated; use (*State).Generate(). +func Generate(w io.Writer, pkg string, extracted *Messages, trans ...Messages) (n int, err error) { + s := State{ + Extracted: *extracted, + Translations: trans, + } + cw, err := s.generate() + if err != nil { + return 0, err + } + return cw.WriteGo(w, pkg, "") +} + +func (s *State) generate() (*gen.CodeWriter, error) { + // Build up index of translations and original messages. + translations := map[language.Tag]map[string]Message{} + languages := []language.Tag{} + usedKeys := map[string]int{} + + for _, loc := range s.Messages { + tag := loc.Language + if _, ok := translations[tag]; !ok { + translations[tag] = map[string]Message{} + languages = append(languages, tag) + } + for _, m := range loc.Messages { + if !m.Translation.IsEmpty() { + for _, id := range m.ID { + if _, ok := translations[tag][id]; ok { + warnf("Duplicate translation in locale %q for message %q", tag, id) + } + translations[tag][id] = m + } + } + } + } + + // Verify completeness and register keys. + internal.SortTags(languages) + + langVars := []string{} + for _, tag := range languages { + langVars = append(langVars, strings.Replace(tag.String(), "-", "_", -1)) + dict := translations[tag] + for _, msg := range s.Extracted.Messages { + for _, id := range msg.ID { + if trans, ok := dict[id]; ok && !trans.Translation.IsEmpty() { + if _, ok := usedKeys[msg.Key]; !ok { + usedKeys[msg.Key] = len(usedKeys) + } + break + } + // TODO: log missing entry. + warnf("%s: Missing entry for %q.", tag, id) + } + } + } + + cw := gen.NewCodeWriter() + + x := &struct { + Fallback language.Tag + Languages []string + }{ + Fallback: s.Extracted.Language, + Languages: langVars, + } + + if err := lookup.Execute(cw, x); err != nil { + return nil, wrap(err, "error") + } + + keyToIndex := []string{} + for k := range usedKeys { + keyToIndex = append(keyToIndex, k) + } + sort.Strings(keyToIndex) + fmt.Fprint(cw, "var messageKeyToIndex = map[string]int{\n") + for _, k := range keyToIndex { + fmt.Fprintf(cw, "%q: %d,\n", k, usedKeys[k]) + } + fmt.Fprint(cw, "}\n\n") + + for i, tag := range languages { + dict := translations[tag] + a := make([]string, len(usedKeys)) + for _, msg := range s.Extracted.Messages { + for _, id := range msg.ID { + if trans, ok := dict[id]; ok && !trans.Translation.IsEmpty() { + m, err := assemble(&msg, &trans.Translation) + if err != nil { + return nil, wrap(err, "error") + } + _, leadWS, trailWS := trimWS(msg.Key) + if leadWS != "" || trailWS != "" { + m = catmsg.Affix{ + Message: m, + Prefix: leadWS, + Suffix: trailWS, + } + } + // TODO: support macros. + data, err := catmsg.Compile(tag, nil, m) + if err != nil { + return nil, wrap(err, "error") + } + key := usedKeys[msg.Key] + if d := a[key]; d != "" && d != data { + warnf("Duplicate non-consistent translation for key %q, picking the one for message %q", msg.Key, id) + } + a[key] = string(data) + break + } + } + } + index := []uint32{0} + p := 0 + for _, s := range a { + p += len(s) + index = append(index, uint32(p)) + } + + cw.WriteVar(langVars[i]+"Index", index) + cw.WriteConst(langVars[i]+"Data", strings.Join(a, "")) + } + return cw, nil +} + +func assemble(m *Message, t *Text) (msg catmsg.Message, err error) { + keys := []string{} + for k := range t.Var { + keys = append(keys, k) + } + sort.Strings(keys) + var a []catmsg.Message + for _, k := range keys { + t := t.Var[k] + m, err := assemble(m, &t) + if err != nil { + return nil, err + } + a = append(a, &catmsg.Var{Name: k, Message: m}) + } + if t.Select != nil { + s, err := assembleSelect(m, t.Select) + if err != nil { + return nil, err + } + a = append(a, s) + } + if t.Msg != "" { + sub, err := m.Substitute(t.Msg) + if err != nil { + return nil, err + } + a = append(a, catmsg.String(sub)) + } + switch len(a) { + case 0: + return nil, errorf("generate: empty message") + case 1: + return a[0], nil + default: + return catmsg.FirstOf(a), nil + + } +} + +func assembleSelect(m *Message, s *Select) (msg catmsg.Message, err error) { + cases := []string{} + for c := range s.Cases { + cases = append(cases, c) + } + sortCases(cases) + + caseMsg := []interface{}{} + for _, c := range cases { + cm := s.Cases[c] + m, err := assemble(m, &cm) + if err != nil { + return nil, err + } + caseMsg = append(caseMsg, c, m) + } + + ph := m.Placeholder(s.Arg) + + switch s.Feature { + case "plural": + // TODO: only printf-style selects are supported as of yet. + return plural.Selectf(ph.ArgNum, ph.String, caseMsg...), nil + } + return nil, errorf("unknown feature type %q", s.Feature) +} + +func sortCases(cases []string) { + // TODO: implement full interface. + sort.Slice(cases, func(i, j int) bool { + if cases[j] == "other" && cases[i] != "other" { + return true + } + // the following code relies on '<' < '=' < any letter. + return cmpNumeric(cases[i], cases[j]) == -1 + }) +} + +var cmpNumeric = collate.New(language.Und, collate.Numeric).CompareString + +var lookup = template.Must(template.New("gen").Parse(` +import ( + "golang.org/x/text/language" + "golang.org/x/text/message" + "golang.org/x/text/message/catalog" +) + +type dictionary struct { + index []uint32 + data string +} + +func (d *dictionary) Lookup(key string) (data string, ok bool) { + p := messageKeyToIndex[key] + start, end := d.index[p], d.index[p+1] + if start == end { + return "", false + } + return d.data[start:end], true +} + +func init() { + dict := map[string]catalog.Dictionary{ + {{range .Languages}}"{{.}}": &dictionary{index: {{.}}Index, data: {{.}}Data }, + {{end}} + } + fallback := language.MustParse("{{.Fallback}}") + cat, err := catalog.NewFromMap(dict, catalog.Fallback(fallback)) + if err != nil { + panic(err) + } + message.DefaultCatalog = cat +} + +`)) diff --git a/vendor/golang.org/x/text/message/pipeline/go19_test.go b/vendor/golang.org/x/text/message/pipeline/go19_test.go new file mode 100644 index 0000000..c9517c1 --- /dev/null +++ b/vendor/golang.org/x/text/message/pipeline/go19_test.go @@ -0,0 +1,13 @@ +// Copyright 2017 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 go1.9 + +package pipeline + +import "testing" + +func init() { + setHelper = (*testing.T).Helper +} diff --git a/vendor/golang.org/x/text/message/pipeline/message.go b/vendor/golang.org/x/text/message/pipeline/message.go new file mode 100644 index 0000000..c83a8fd --- /dev/null +++ b/vendor/golang.org/x/text/message/pipeline/message.go @@ -0,0 +1,241 @@ +// Copyright 2017 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. + +package pipeline + +import ( + "encoding/json" + "errors" + "strings" + + "golang.org/x/text/language" +) + +// TODO: these definitions should be moved to a package so that the can be used +// by other tools. + +// The file contains the structures used to define translations of a certain +// messages. +// +// A translation may have multiple translations strings, or messages, depending +// on the feature values of the various arguments. For instance, consider +// a hypothetical translation from English to English, where the source defines +// the format string "%d file(s) remaining". +// See the examples directory for examples of extracted messages. + +// Messages is used to store translations for a single language. +type Messages struct { + Language language.Tag `json:"language"` + Messages []Message `json:"messages"` + Macros map[string]Text `json:"macros,omitempty"` +} + +// A Message describes a message to be translated. +type Message struct { + // ID contains a list of identifiers for the message. + ID IDList `json:"id"` + // Key is the string that is used to look up the message at runtime. + Key string `json:"key,omitempty"` + Meaning string `json:"meaning,omitempty"` + Message Text `json:"message"` + Translation Text `json:"translation"` + + Comment string `json:"comment,omitempty"` + TranslatorComment string `json:"translatorComment,omitempty"` + + Placeholders []Placeholder `json:"placeholders,omitempty"` + + // Fuzzy indicates that the provide translation needs review by a + // translator, for instance because it was derived from automated + // translation. + Fuzzy bool `json:"fuzzy,omitempty"` + + // TODO: default placeholder syntax is {foo}. Allow alternative escaping + // like `foo`. + + // Extraction information. + Position string `json:"position,omitempty"` // filePosition:line +} + +// Placeholder reports the placeholder for the given ID if it is defined or nil +// otherwise. +func (m *Message) Placeholder(id string) *Placeholder { + for _, p := range m.Placeholders { + if p.ID == id { + return &p + } + } + return nil +} + +// Substitute replaces placeholders in msg with their original value. +func (m *Message) Substitute(msg string) (sub string, err error) { + last := 0 + for i := 0; i < len(msg); { + pLeft := strings.IndexByte(msg[i:], '{') + if pLeft == -1 { + break + } + pLeft += i + pRight := strings.IndexByte(msg[pLeft:], '}') + if pRight == -1 { + return "", errorf("unmatched '}'") + } + pRight += pLeft + id := strings.TrimSpace(msg[pLeft+1 : pRight]) + i = pRight + 1 + if id != "" && id[0] == '$' { + continue + } + sub += msg[last:pLeft] + last = i + ph := m.Placeholder(id) + if ph == nil { + return "", errorf("unknown placeholder %q in message %q", id, msg) + } + sub += ph.String + } + sub += msg[last:] + return sub, err +} + +var errIncompatibleMessage = errors.New("messages incompatible") + +func checkEquivalence(a, b *Message) error { + for _, v := range a.ID { + for _, w := range b.ID { + if v == w { + return nil + } + } + } + // TODO: canonicalize placeholders and check for type equivalence. + return errIncompatibleMessage +} + +// A Placeholder is a part of the message that should not be changed by a +// translator. It can be used to hide or prettify format strings (e.g. %d or +// {{.Count}}), hide HTML, or mark common names that should not be translated. +type Placeholder struct { + // ID is the placeholder identifier without the curly braces. + ID string `json:"id"` + + // String is the string with which to replace the placeholder. This may be a + // formatting string (for instance "%d" or "{{.Count}}") or a literal string + // (
). + String string `json:"string"` + + Type string `json:"type"` + UnderlyingType string `json:"underlyingType"` + // ArgNum and Expr are set if the placeholder is a substitution of an + // argument. + ArgNum int `json:"argNum,omitempty"` + Expr string `json:"expr,omitempty"` + + Comment string `json:"comment,omitempty"` + Example string `json:"example,omitempty"` + + // Features contains the features that are available for the implementation + // of this argument. + Features []Feature `json:"features,omitempty"` +} + +// An argument contains information about the arguments passed to a message. +type argument struct { + // ArgNum corresponds to the number that should be used for explicit argument indexes (e.g. + // "%[1]d"). + ArgNum int `json:"argNum,omitempty"` + + used bool // Used by Placeholder + Type string `json:"type"` + UnderlyingType string `json:"underlyingType"` + Expr string `json:"expr"` + Value string `json:"value,omitempty"` + Comment string `json:"comment,omitempty"` + Position string `json:"position,omitempty"` +} + +// Feature holds information about a feature that can be implemented by +// an Argument. +type Feature struct { + Type string `json:"type"` // Right now this is only gender and plural. + + // TODO: possible values and examples for the language under consideration. + +} + +// Text defines a message to be displayed. +type Text struct { + // Msg and Select contains the message to be displayed. Msg may be used as + // a fallback value if none of the select cases match. + Msg string `json:"msg,omitempty"` + Select *Select `json:"select,omitempty"` + + // Var defines a map of variables that may be substituted in the selected + // message. + Var map[string]Text `json:"var,omitempty"` + + // Example contains an example message formatted with default values. + Example string `json:"example,omitempty"` +} + +// IsEmpty reports whether this Text can generate anything. +func (t *Text) IsEmpty() bool { + return t.Msg == "" && t.Select == nil && t.Var == nil +} + +// rawText erases the UnmarshalJSON method. +type rawText Text + +// UnmarshalJSON implements json.Unmarshaler. +func (t *Text) UnmarshalJSON(b []byte) error { + if b[0] == '"' { + return json.Unmarshal(b, &t.Msg) + } + return json.Unmarshal(b, (*rawText)(t)) +} + +// MarshalJSON implements json.Marshaler. +func (t *Text) MarshalJSON() ([]byte, error) { + if t.Select == nil && t.Var == nil && t.Example == "" { + return json.Marshal(t.Msg) + } + return json.Marshal((*rawText)(t)) +} + +// IDList is a set identifiers that each may refer to possibly different +// versions of the same message. When looking up a messages, the first +// identifier in the list takes precedence. +type IDList []string + +// UnmarshalJSON implements json.Unmarshaler. +func (id *IDList) UnmarshalJSON(b []byte) error { + if b[0] == '"' { + *id = []string{""} + return json.Unmarshal(b, &((*id)[0])) + } + return json.Unmarshal(b, (*[]string)(id)) +} + +// MarshalJSON implements json.Marshaler. +func (id *IDList) MarshalJSON() ([]byte, error) { + if len(*id) == 1 { + return json.Marshal((*id)[0]) + } + return json.Marshal((*[]string)(id)) +} + +// Select selects a Text based on the feature value associated with a feature of +// a certain argument. +type Select struct { + Feature string `json:"feature"` // Name of Feature type (e.g plural) + Arg string `json:"arg"` // The placeholder ID + Cases map[string]Text `json:"cases"` +} + +// TODO: order matters, but can we derive the ordering from the case keys? +// type Case struct { +// Key string `json:"key"` +// Value Text `json:"value"` +// } diff --git a/vendor/golang.org/x/text/message/pipeline/pipeline.go b/vendor/golang.org/x/text/message/pipeline/pipeline.go new file mode 100644 index 0000000..cafd6f2 --- /dev/null +++ b/vendor/golang.org/x/text/message/pipeline/pipeline.go @@ -0,0 +1,422 @@ +// Copyright 2017 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. + +// Package pipeline provides tools for creating translation pipelines. +// +// NOTE: UNDER DEVELOPMENT. API MAY CHANGE. +package pipeline + +import ( + "bytes" + "encoding/json" + "fmt" + "go/build" + "go/parser" + "io/ioutil" + "log" + "os" + "path/filepath" + "regexp" + "strings" + "text/template" + "unicode" + + "golang.org/x/text/internal" + "golang.org/x/text/language" + "golang.org/x/text/runes" + "golang.org/x/tools/go/loader" +) + +const ( + extractFile = "extracted.gotext.json" + outFile = "out.gotext.json" + gotextSuffix = "gotext.json" +) + +// Config contains configuration for the translation pipeline. +type Config struct { + // Supported indicates the languages for which data should be generated. + // The default is to support all locales for which there are matching + // translation files. + Supported []language.Tag + + // --- Extraction + + SourceLanguage language.Tag + + Packages []string + + // --- File structure + + // Dir is the root dir for all operations. + Dir string + + // TranslationsPattern is a regular expression to match incoming translation + // files. These files may appear in any directory rooted at Dir. + // language for the translation files is determined as follows: + // 1. From the Language field in the file. + // 2. If not present, from a valid language tag in the filename, separated + // by dots (e.g. "en-US.json" or "incoming.pt_PT.xmb"). + // 3. If not present, from a the closest subdirectory in which the file + // is contained that parses as a valid language tag. + TranslationsPattern string + + // OutPattern defines the location for translation files for a certain + // language. The default is "{{.Dir}}/{{.Language}}/out.{{.Ext}}" + OutPattern string + + // Format defines the file format for generated translation files. + // The default is XMB. Alternatives are GetText, XLIFF, L20n, GoText. + Format string + + Ext string + + // TODO: + // Actions are additional actions to be performed after the initial extract + // and merge. + // Actions []struct { + // Name string + // Options map[string]string + // } + + // --- Generation + + // GenFile may be in a different package. It is not defined, it will + // be written to stdout. + GenFile string + + // GenPackage is the package or relative path into which to generate the + // file. If not specified it is relative to the current directory. + GenPackage string + + // DeclareVar defines a variable to which to assing the generated Catalog. + DeclareVar string + + // SetDefault determines whether to assign the generated Catalog to + // message.DefaultCatalog. The default for this is true if DeclareVar is + // not defined, false otherwise. + SetDefault bool + + // TODO: + // - Printf-style configuration + // - Template-style configuration + // - Extraction options + // - Rewrite options + // - Generation options +} + +// Operations: +// - extract: get the strings +// - disambiguate: find messages with the same key, but possible different meaning. +// - create out: create a list of messages that need translations +// - load trans: load the list of current translations +// - merge: assign list of translations as done +// - (action)expand: analyze features and create example sentences for each version. +// - (action)googletrans: pre-populate messages with automatic translations. +// - (action)export: send out messages somewhere non-standard +// - (action)import: load messages from somewhere non-standard +// - vet program: don't pass "foo" + var + "bar" strings. Not using funcs for translated strings. +// - vet trans: coverage: all translations/ all features. +// - generate: generate Go code + +// State holds all accumulated information on translations during processing. +type State struct { + Config Config + + Package string + program *loader.Program + + Extracted Messages `json:"messages"` + + // Messages includes all messages for which there need to be translations. + // Duplicates may be eliminated. Generation will be done from these messages + // (usually after merging). + Messages []Messages + + // Translations are incoming translations for the application messages. + Translations []Messages +} + +func (s *State) dir() string { + if d := s.Config.Dir; d != "" { + return d + } + return "./locales" +} + +func outPattern(s *State) (string, error) { + c := s.Config + pat := c.OutPattern + if pat == "" { + pat = "{{.Dir}}/{{.Language}}/out.{{.Ext}}" + } + + ext := c.Ext + if ext == "" { + ext = c.Format + } + if ext == "" { + ext = gotextSuffix + } + t, err := template.New("").Parse(pat) + if err != nil { + return "", wrap(err, "error parsing template") + } + buf := bytes.Buffer{} + err = t.Execute(&buf, map[string]string{ + "Dir": s.dir(), + "Language": "%s", + "Ext": ext, + }) + return filepath.FromSlash(buf.String()), wrap(err, "incorrect OutPattern") +} + +var transRE = regexp.MustCompile(`.*\.` + gotextSuffix) + +// Import loads existing translation files. +func (s *State) Import() error { + outPattern, err := outPattern(s) + if err != nil { + return err + } + re := transRE + if pat := s.Config.TranslationsPattern; pat != "" { + if re, err = regexp.Compile(pat); err != nil { + return wrapf(err, "error parsing regexp %q", s.Config.TranslationsPattern) + } + } + x := importer{s, outPattern, re} + return x.walkImport(s.dir(), s.Config.SourceLanguage) +} + +type importer struct { + state *State + outPattern string + transFile *regexp.Regexp +} + +func (i *importer) walkImport(path string, tag language.Tag) error { + files, err := ioutil.ReadDir(path) + if err != nil { + return nil + } + for _, f := range files { + name := f.Name() + tag := tag + if f.IsDir() { + if t, err := language.Parse(name); err == nil { + tag = t + } + // We ignore errors + if err := i.walkImport(filepath.Join(path, name), tag); err != nil { + return err + } + continue + } + for _, l := range strings.Split(name, ".") { + if t, err := language.Parse(l); err == nil { + tag = t + } + } + file := filepath.Join(path, name) + // TODO: Should we skip files that match output files? + if fmt.Sprintf(i.outPattern, tag) == file { + continue + } + // TODO: handle different file formats. + if !i.transFile.MatchString(name) { + continue + } + b, err := ioutil.ReadFile(file) + if err != nil { + return wrap(err, "read file failed") + } + var translations Messages + if err := json.Unmarshal(b, &translations); err != nil { + return wrap(err, "parsing translation file failed") + } + i.state.Translations = append(i.state.Translations, translations) + } + return nil +} + +// Merge merges the extracted messages with the existing translations. +func (s *State) Merge() error { + if s.Messages != nil { + panic("already merged") + } + // Create an index for each unique message. + // Duplicates are okay as long as the substitution arguments are okay as + // well. + // Top-level messages are okay to appear in multiple substitution points. + + // Collect key equivalence. + msgs := []*Message{} + keyToIDs := map[string]*Message{} + for _, m := range s.Extracted.Messages { + m := m + if prev, ok := keyToIDs[m.Key]; ok { + if err := checkEquivalence(&m, prev); err != nil { + warnf("Key %q matches conflicting messages: %v and %v", m.Key, prev.ID, m.ID) + // TODO: track enough information so that the rewriter can + // suggest/disambiguate messages. + } + // TODO: add position to message. + continue + } + i := len(msgs) + msgs = append(msgs, &m) + keyToIDs[m.Key] = msgs[i] + } + + // Messages with different keys may still refer to the same translated + // message (e.g. different whitespace). Filter these. + idMap := map[string]bool{} + filtered := []*Message{} + for _, m := range msgs { + found := false + for _, id := range m.ID { + found = found || idMap[id] + } + if !found { + filtered = append(filtered, m) + } + for _, id := range m.ID { + idMap[id] = true + } + } + + // Build index of translations. + translations := map[language.Tag]map[string]Message{} + languages := append([]language.Tag{}, s.Config.Supported...) + + for _, t := range s.Translations { + tag := t.Language + if _, ok := translations[tag]; !ok { + translations[tag] = map[string]Message{} + languages = append(languages, tag) + } + for _, m := range t.Messages { + if !m.Translation.IsEmpty() { + for _, id := range m.ID { + if _, ok := translations[tag][id]; ok { + warnf("Duplicate translation in locale %q for message %q", tag, id) + } + translations[tag][id] = m + } + } + } + } + languages = internal.UniqueTags(languages) + + for _, tag := range languages { + ms := Messages{Language: tag} + for _, orig := range filtered { + m := *orig + m.Key = "" + m.Position = "" + + for _, id := range m.ID { + if t, ok := translations[tag][id]; ok { + m.Translation = t.Translation + if t.TranslatorComment != "" { + m.TranslatorComment = t.TranslatorComment + m.Fuzzy = t.Fuzzy + } + break + } + } + if tag == s.Config.SourceLanguage && m.Translation.IsEmpty() { + m.Translation = m.Message + if m.TranslatorComment == "" { + m.TranslatorComment = "Copied from source." + m.Fuzzy = true + } + } + // TODO: if translation is empty: pre-expand based on available + // linguistic features. This may also be done as a plugin. + ms.Messages = append(ms.Messages, m) + } + s.Messages = append(s.Messages, ms) + } + return nil +} + +// Export writes out the messages to translation out files. +func (s *State) Export() error { + path, err := outPattern(s) + if err != nil { + return wrap(err, "export failed") + } + for _, out := range s.Messages { + // TODO: inject translations from existing files to avoid retranslation. + data, err := json.MarshalIndent(out, "", " ") + if err != nil { + return wrap(err, "JSON marshal failed") + } + file := fmt.Sprintf(path, out.Language) + if err := os.MkdirAll(filepath.Dir(file), 0755); err != nil { + return wrap(err, "dir create failed") + } + if err := ioutil.WriteFile(file, data, 0644); err != nil { + return wrap(err, "write failed") + } + } + return nil +} + +var ( + ws = runes.In(unicode.White_Space).Contains + notWS = runes.NotIn(unicode.White_Space).Contains +) + +func trimWS(s string) (trimmed, leadWS, trailWS string) { + trimmed = strings.TrimRightFunc(s, ws) + trailWS = s[len(trimmed):] + if i := strings.IndexFunc(trimmed, notWS); i > 0 { + leadWS = trimmed[:i] + trimmed = trimmed[i:] + } + return trimmed, leadWS, trailWS +} + +// NOTE: The command line tool already prefixes with "gotext:". +var ( + wrap = func(err error, msg string) error { + if err == nil { + return nil + } + return fmt.Errorf("%s: %v", msg, err) + } + wrapf = func(err error, msg string, args ...interface{}) error { + if err == nil { + return nil + } + return wrap(err, fmt.Sprintf(msg, args...)) + } + errorf = fmt.Errorf +) + +func warnf(format string, args ...interface{}) { + // TODO: don't log. + log.Printf(format, args...) +} + +func loadPackages(conf *loader.Config, args []string) (*loader.Program, error) { + if len(args) == 0 { + args = []string{"."} + } + + conf.Build = &build.Default + conf.ParserMode = parser.ParseComments + + // Use the initial packages from the command line. + args, err := conf.FromArgs(args, false) + if err != nil { + return nil, wrap(err, "loading packages failed") + } + + // Load, parse and type-check the whole program. + return conf.Load() +} diff --git a/vendor/golang.org/x/text/message/pipeline/pipeline_test.go b/vendor/golang.org/x/text/message/pipeline/pipeline_test.go new file mode 100644 index 0000000..293101b --- /dev/null +++ b/vendor/golang.org/x/text/message/pipeline/pipeline_test.go @@ -0,0 +1,126 @@ +// Copyright 2017 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. + +package pipeline + +import ( + "bufio" + "bytes" + "encoding/json" + "flag" + "fmt" + "io/ioutil" + "os" + "path" + "path/filepath" + "strings" + "testing" + + "golang.org/x/text/language" +) + +var genFiles = flag.Bool("gen", false, "generate output files instead of comparing") + +// setHelper is testing.T.Helper on Go 1.9+, overridden by go19_test.go. +var setHelper = func(t *testing.T) {} + +func TestFullCycle(t *testing.T) { + const path = "./testdata" + dirs, err := ioutil.ReadDir(path) + if err != nil { + t.Fatal(err) + } + for _, f := range dirs { + t.Run(f.Name(), func(t *testing.T) { + chk := func(t *testing.T, err error) { + setHelper(t) + if err != nil { + t.Fatal(err) + } + } + dir := filepath.Join(path, f.Name()) + pkgPath := fmt.Sprintf("%s/%s", path, f.Name()) + config := Config{ + SourceLanguage: language.AmericanEnglish, + Packages: []string{pkgPath}, + Dir: filepath.Join(dir, "locales"), + GenFile: "catalog_gen.go", + GenPackage: pkgPath, + } + // TODO: load config if available. + s, err := Extract(&config) + chk(t, err) + chk(t, s.Import()) + chk(t, s.Merge()) + // TODO: + // for range s.Config.Actions { + // // TODO: do the actions. + // } + chk(t, s.Export()) + chk(t, s.Generate()) + + writeJSON(t, filepath.Join(dir, "extracted.gotext.json"), s.Extracted) + checkOutput(t, dir) + }) + } +} + +func checkOutput(t *testing.T, p string) { + filepath.Walk(p, func(p string, f os.FileInfo, err error) error { + if f.IsDir() { + return nil + } + if filepath.Ext(p) != ".want" { + return nil + } + gotFile := p[:len(p)-len(".want")] + got, err := ioutil.ReadFile(gotFile) + if err != nil { + t.Errorf("failed to read %q", p) + return nil + } + if *genFiles { + if err := ioutil.WriteFile(p, got, 0644); err != nil { + t.Fatal(err) + } + } + want, err := ioutil.ReadFile(p) + if err != nil { + t.Errorf("failed to read %q", p) + } else { + scanGot := bufio.NewScanner(bytes.NewReader(got)) + scanWant := bufio.NewScanner(bytes.NewReader(want)) + line := 0 + clean := func(s string) string { + if i := strings.LastIndex(s, "//"); i != -1 { + s = s[:i] + } + return path.Clean(filepath.ToSlash(s)) + } + for scanGot.Scan() && scanWant.Scan() { + got := clean(scanGot.Text()) + want := clean(scanWant.Text()) + if got != want { + t.Errorf("file %q differs from .want file at line %d:\n\t%s\n\t%s", gotFile, line, got, want) + break + } + line++ + } + if scanGot.Scan() || scanWant.Scan() { + t.Errorf("file %q differs from .want file at line %d.", gotFile, line) + } + } + return nil + }) +} + +func writeJSON(t *testing.T, path string, x interface{}) { + data, err := json.MarshalIndent(x, "", " ") + if err != nil { + t.Fatal(err) + } + if err := ioutil.WriteFile(path, data, 0644); err != nil { + t.Fatal(err) + } +} diff --git a/vendor/golang.org/x/text/message/pipeline/rewrite.go b/vendor/golang.org/x/text/message/pipeline/rewrite.go new file mode 100644 index 0000000..cf1511f --- /dev/null +++ b/vendor/golang.org/x/text/message/pipeline/rewrite.go @@ -0,0 +1,268 @@ +// Copyright 2017 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. + +package pipeline + +import ( + "bytes" + "fmt" + "go/ast" + "go/constant" + "go/format" + "go/token" + "io" + "os" + "strings" + + "golang.org/x/tools/go/loader" +) + +const printerType = "golang.org/x/text/message.Printer" + +// Rewrite rewrites the Go files in a single package to use the localization +// machinery and rewrites strings to adopt best practices when possible. +// If w is not nil the generated files are written to it, each files with a +// "--- " header. Otherwise the files are overwritten. +func Rewrite(w io.Writer, args ...string) error { + conf := &loader.Config{ + AllowErrors: true, // Allow unused instances of message.Printer. + } + prog, err := loadPackages(conf, args) + if err != nil { + return wrap(err, "") + } + + for _, info := range prog.InitialPackages() { + for _, f := range info.Files { + // Associate comments with nodes. + + // Pick up initialized Printers at the package level. + r := rewriter{info: info, conf: conf} + for _, n := range info.InitOrder { + if t := r.info.Types[n.Rhs].Type.String(); strings.HasSuffix(t, printerType) { + r.printerVar = n.Lhs[0].Name() + } + } + + ast.Walk(&r, f) + + w := w + if w == nil { + var err error + if w, err = os.Create(conf.Fset.File(f.Pos()).Name()); err != nil { + return wrap(err, "open failed") + } + } else { + fmt.Fprintln(w, "---", conf.Fset.File(f.Pos()).Name()) + } + + if err := format.Node(w, conf.Fset, f); err != nil { + return wrap(err, "go format failed") + } + } + } + + return nil +} + +type rewriter struct { + info *loader.PackageInfo + conf *loader.Config + printerVar string +} + +// print returns Go syntax for the specified node. +func (r *rewriter) print(n ast.Node) string { + var buf bytes.Buffer + format.Node(&buf, r.conf.Fset, n) + return buf.String() +} + +func (r *rewriter) Visit(n ast.Node) ast.Visitor { + // Save the state by scope. + if _, ok := n.(*ast.BlockStmt); ok { + r := *r + return &r + } + // Find Printers created by assignment. + stmt, ok := n.(*ast.AssignStmt) + if ok { + for _, v := range stmt.Lhs { + if r.printerVar == r.print(v) { + r.printerVar = "" + } + } + for i, v := range stmt.Rhs { + if t := r.info.Types[v].Type.String(); strings.HasSuffix(t, printerType) { + r.printerVar = r.print(stmt.Lhs[i]) + return r + } + } + } + // Find Printers created by variable declaration. + spec, ok := n.(*ast.ValueSpec) + if ok { + for _, v := range spec.Names { + if r.printerVar == r.print(v) { + r.printerVar = "" + } + } + for i, v := range spec.Values { + if t := r.info.Types[v].Type.String(); strings.HasSuffix(t, printerType) { + r.printerVar = r.print(spec.Names[i]) + return r + } + } + } + if r.printerVar == "" { + return r + } + call, ok := n.(*ast.CallExpr) + if !ok { + return r + } + + // TODO: Handle literal values? + sel, ok := call.Fun.(*ast.SelectorExpr) + if !ok { + return r + } + meth := r.info.Selections[sel] + + source := r.print(sel.X) + fun := r.print(sel.Sel) + if meth != nil { + source = meth.Recv().String() + fun = meth.Obj().Name() + } + + // TODO: remove cheap hack and check if the type either + // implements some interface or is specifically of type + // "golang.org/x/text/message".Printer. + m, ok := rewriteFuncs[source] + if !ok { + return r + } + + rewriteType, ok := m[fun] + if !ok { + return r + } + ident := ast.NewIdent(r.printerVar) + ident.NamePos = sel.X.Pos() + sel.X = ident + if rewriteType.method != "" { + sel.Sel.Name = rewriteType.method + } + + // Analyze arguments. + argn := rewriteType.arg + if rewriteType.format || argn >= len(call.Args) { + return r + } + hasConst := false + for _, a := range call.Args[argn:] { + if v := r.info.Types[a].Value; v != nil && v.Kind() == constant.String { + hasConst = true + break + } + } + if !hasConst { + return r + } + sel.Sel.Name = rewriteType.methodf + + // We are done if there is only a single string that does not need to be + // escaped. + if len(call.Args) == 1 { + s, ok := constStr(r.info, call.Args[0]) + if ok && !strings.Contains(s, "%") && !rewriteType.newLine { + return r + } + } + + // Rewrite arguments as format string. + expr := &ast.BasicLit{ + ValuePos: call.Lparen, + Kind: token.STRING, + } + newArgs := append(call.Args[:argn:argn], expr) + newStr := []string{} + for i, a := range call.Args[argn:] { + if s, ok := constStr(r.info, a); ok { + newStr = append(newStr, strings.Replace(s, "%", "%%", -1)) + } else { + newStr = append(newStr, "%v") + newArgs = append(newArgs, call.Args[argn+i]) + } + } + s := strings.Join(newStr, rewriteType.sep) + if rewriteType.newLine { + s += "\n" + } + expr.Value = fmt.Sprintf("%q", s) + + call.Args = newArgs + + // TODO: consider creating an expression instead of a constant string and + // then wrapping it in an escape function or so: + // call.Args[argn+i] = &ast.CallExpr{ + // Fun: &ast.SelectorExpr{ + // X: ast.NewIdent("message"), + // Sel: ast.NewIdent("Lookup"), + // }, + // Args: []ast.Expr{a}, + // } + // } + + return r +} + +type rewriteType struct { + // method is the name of the equivalent method on a printer, or "" if it is + // the same. + method string + + // methodf is the method to use if the arguments can be rewritten as a + // arguments to a printf-style call. + methodf string + + // format is true if the method takes a formatting string followed by + // substitution arguments. + format bool + + // arg indicates the position of the argument to extract. If all is + // positive, all arguments from this argument onwards needs to be extracted. + arg int + + sep string + newLine bool +} + +// rewriteFuncs list functions that can be directly mapped to the printer +// functions of the message package. +var rewriteFuncs = map[string]map[string]rewriteType{ + // TODO: Printer -> *golang.org/x/text/message.Printer + "fmt": { + "Print": rewriteType{methodf: "Printf"}, + "Sprint": rewriteType{methodf: "Sprintf"}, + "Fprint": rewriteType{methodf: "Fprintf"}, + + "Println": rewriteType{methodf: "Printf", sep: " ", newLine: true}, + "Sprintln": rewriteType{methodf: "Sprintf", sep: " ", newLine: true}, + "Fprintln": rewriteType{methodf: "Fprintf", sep: " ", newLine: true}, + + "Printf": rewriteType{method: "Printf", format: true}, + "Sprintf": rewriteType{method: "Sprintf", format: true}, + "Fprintf": rewriteType{method: "Fprintf", format: true}, + }, +} + +func constStr(info *loader.PackageInfo, e ast.Expr) (s string, ok bool) { + v := info.Types[e].Value + if v == nil || v.Kind() != constant.String { + return "", false + } + return constant.StringVal(v), true +} diff --git a/vendor/golang.org/x/text/message/pipeline/testdata/test1/catalog_gen.go b/vendor/golang.org/x/text/message/pipeline/testdata/test1/catalog_gen.go new file mode 100644 index 0000000..7d93f48 --- /dev/null +++ b/vendor/golang.org/x/text/message/pipeline/testdata/test1/catalog_gen.go @@ -0,0 +1,85 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package main + +import ( + "golang.org/x/text/language" + "golang.org/x/text/message" + "golang.org/x/text/message/catalog" +) + +type dictionary struct { + index []uint32 + data string +} + +func (d *dictionary) Lookup(key string) (data string, ok bool) { + p := messageKeyToIndex[key] + start, end := d.index[p], d.index[p+1] + if start == end { + return "", false + } + return d.data[start:end], true +} + +func init() { + dict := map[string]catalog.Dictionary{ + "de": &dictionary{index: deIndex, data: deData}, + "en_US": &dictionary{index: en_USIndex, data: en_USData}, + "zh": &dictionary{index: zhIndex, data: zhData}, + } + fallback := language.MustParse("en-US") + cat, err := catalog.NewFromMap(dict, catalog.Fallback(fallback)) + if err != nil { + panic(err) + } + message.DefaultCatalog = cat +} + +var messageKeyToIndex = map[string]int{ + "%.2[1]f miles traveled (%[1]f)": 8, + "%[1]s is visiting %[3]s!\n": 3, + "%d files remaining!": 4, + "%d more files remaining!": 5, + "%s is out of order!": 7, + "%s is visiting %s!\n": 2, + "Hello %s!\n": 1, + "Hello world!\n": 0, + "Use the following code for your discount: %d\n": 6, +} + +var deIndex = []uint32{ // 10 elements + 0x00000000, 0x00000011, 0x00000023, 0x0000003d, + 0x00000057, 0x00000075, 0x00000094, 0x00000094, + 0x00000094, 0x00000094, +} // Size: 64 bytes + +const deData string = "" + // Size: 148 bytes + "\x04\x00\x01\x0a\x0c\x02Hallo Welt!\x04\x00\x01\x0a\x0d\x02Hallo %[1]s!" + + "\x04\x00\x01\x0a\x15\x02%[1]s besucht %[2]s!\x04\x00\x01\x0a\x15\x02%[1]" + + "s besucht %[3]s!\x02Noch zwei Bestände zu gehen!\x02Noch %[1]d Bestände " + + "zu gehen!" + +var en_USIndex = []uint32{ // 10 elements + 0x00000000, 0x00000012, 0x00000024, 0x00000042, + 0x00000060, 0x00000077, 0x000000ba, 0x000000ef, + 0x00000106, 0x00000125, +} // Size: 64 bytes + +const en_USData string = "" + // Size: 293 bytes + "\x04\x00\x01\x0a\x0d\x02Hello world!\x04\x00\x01\x0a\x0d\x02Hello %[1]s!" + + "\x04\x00\x01\x0a\x19\x02%[1]s is visiting %[2]s!\x04\x00\x01\x0a\x19\x02" + + "%[1]s is visiting %[3]s!\x02%[1]d files remaining!\x14\x01\x81\x01\x00" + + "\x02\x14\x02One file remaining!\x00&\x02There are %[1]d more files remai" + + "ning!\x04\x00\x01\x0a0\x02Use the following code for your discount: %[1]" + + "d\x02%[1]s is out of order!\x02%.2[1]f miles traveled (%[1]f)" + +var zhIndex = []uint32{ // 10 elements + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, +} // Size: 64 bytes + +const zhData string = "" + +// Total table size 633 bytes (0KiB); checksum: 74B32E70 diff --git a/vendor/golang.org/x/text/message/pipeline/testdata/test1/catalog_gen.go.want b/vendor/golang.org/x/text/message/pipeline/testdata/test1/catalog_gen.go.want new file mode 100644 index 0000000..7d93f48 --- /dev/null +++ b/vendor/golang.org/x/text/message/pipeline/testdata/test1/catalog_gen.go.want @@ -0,0 +1,85 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +package main + +import ( + "golang.org/x/text/language" + "golang.org/x/text/message" + "golang.org/x/text/message/catalog" +) + +type dictionary struct { + index []uint32 + data string +} + +func (d *dictionary) Lookup(key string) (data string, ok bool) { + p := messageKeyToIndex[key] + start, end := d.index[p], d.index[p+1] + if start == end { + return "", false + } + return d.data[start:end], true +} + +func init() { + dict := map[string]catalog.Dictionary{ + "de": &dictionary{index: deIndex, data: deData}, + "en_US": &dictionary{index: en_USIndex, data: en_USData}, + "zh": &dictionary{index: zhIndex, data: zhData}, + } + fallback := language.MustParse("en-US") + cat, err := catalog.NewFromMap(dict, catalog.Fallback(fallback)) + if err != nil { + panic(err) + } + message.DefaultCatalog = cat +} + +var messageKeyToIndex = map[string]int{ + "%.2[1]f miles traveled (%[1]f)": 8, + "%[1]s is visiting %[3]s!\n": 3, + "%d files remaining!": 4, + "%d more files remaining!": 5, + "%s is out of order!": 7, + "%s is visiting %s!\n": 2, + "Hello %s!\n": 1, + "Hello world!\n": 0, + "Use the following code for your discount: %d\n": 6, +} + +var deIndex = []uint32{ // 10 elements + 0x00000000, 0x00000011, 0x00000023, 0x0000003d, + 0x00000057, 0x00000075, 0x00000094, 0x00000094, + 0x00000094, 0x00000094, +} // Size: 64 bytes + +const deData string = "" + // Size: 148 bytes + "\x04\x00\x01\x0a\x0c\x02Hallo Welt!\x04\x00\x01\x0a\x0d\x02Hallo %[1]s!" + + "\x04\x00\x01\x0a\x15\x02%[1]s besucht %[2]s!\x04\x00\x01\x0a\x15\x02%[1]" + + "s besucht %[3]s!\x02Noch zwei Bestände zu gehen!\x02Noch %[1]d Bestände " + + "zu gehen!" + +var en_USIndex = []uint32{ // 10 elements + 0x00000000, 0x00000012, 0x00000024, 0x00000042, + 0x00000060, 0x00000077, 0x000000ba, 0x000000ef, + 0x00000106, 0x00000125, +} // Size: 64 bytes + +const en_USData string = "" + // Size: 293 bytes + "\x04\x00\x01\x0a\x0d\x02Hello world!\x04\x00\x01\x0a\x0d\x02Hello %[1]s!" + + "\x04\x00\x01\x0a\x19\x02%[1]s is visiting %[2]s!\x04\x00\x01\x0a\x19\x02" + + "%[1]s is visiting %[3]s!\x02%[1]d files remaining!\x14\x01\x81\x01\x00" + + "\x02\x14\x02One file remaining!\x00&\x02There are %[1]d more files remai" + + "ning!\x04\x00\x01\x0a0\x02Use the following code for your discount: %[1]" + + "d\x02%[1]s is out of order!\x02%.2[1]f miles traveled (%[1]f)" + +var zhIndex = []uint32{ // 10 elements + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, +} // Size: 64 bytes + +const zhData string = "" + +// Total table size 633 bytes (0KiB); checksum: 74B32E70 diff --git a/vendor/golang.org/x/text/message/pipeline/testdata/test1/catalog_test.go b/vendor/golang.org/x/text/message/pipeline/testdata/test1/catalog_test.go new file mode 100644 index 0000000..eeb7c25 --- /dev/null +++ b/vendor/golang.org/x/text/message/pipeline/testdata/test1/catalog_test.go @@ -0,0 +1,49 @@ +// Copyright 2017 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. + +package main + +import ( + "path" + "testing" + + "golang.org/x/text/message" +) + +func TestCatalog(t *testing.T) { + args := func(a ...interface{}) []interface{} { return a } + testCases := []struct { + lang string + key string + args []interface{} + want string + }{{ + lang: "en", + key: "Hello world!\n", + want: "Hello world!\n", + }, { + lang: "de", + key: "Hello world!\n", + want: "Hallo Welt!\n", + }, { + lang: "en", + key: "%d more files remaining!", + args: args(1), + want: "One file remaining!", + }, { + lang: "en-u-nu-fullwide", + key: "%d more files remaining!", + args: args(5), + want: "There are 5 more files remaining!", + }} + for _, tc := range testCases { + t.Run(path.Join(tc.lang, tc.key), func(t *testing.T) { + p := message.NewPrinter(message.MatchLanguage(tc.lang)) + got := p.Sprintf(tc.key, tc.args...) + if got != tc.want { + t.Errorf("got %q; want %q", got, tc.want) + } + }) + } +} diff --git a/vendor/golang.org/x/text/message/pipeline/testdata/test1/extracted.gotext.json b/vendor/golang.org/x/text/message/pipeline/testdata/test1/extracted.gotext.json new file mode 100644 index 0000000..4d317af --- /dev/null +++ b/vendor/golang.org/x/text/message/pipeline/testdata/test1/extracted.gotext.json @@ -0,0 +1,188 @@ +{ + "language": "en-US", + "messages": [ + { + "id": "Hello world!", + "key": "Hello world!\n", + "message": "Hello world!", + "translation": "", + "position": "testdata/test1/test1.go:19:10" + }, + { + "id": "Hello {City}!", + "key": "Hello %s!\n", + "message": "Hello {City}!", + "translation": "", + "placeholders": [ + { + "id": "City", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "city" + } + ], + "position": "testdata/test1/test1.go:24:10" + }, + { + "id": "{Person} is visiting {Place}!", + "key": "%s is visiting %s!\n", + "message": "{Person} is visiting {Place}!", + "translation": "", + "placeholders": [ + { + "id": "Person", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "person", + "comment": "The person of matter." + }, + { + "id": "Place", + "string": "%[2]s", + "type": "string", + "underlyingType": "string", + "argNum": 2, + "expr": "place", + "comment": "Place the person is visiting." + } + ], + "position": "testdata/test1/test1.go:30:10" + }, + { + "id": "{Person} is visiting {Place}!", + "key": "%[1]s is visiting %[3]s!\n", + "message": "{Person} is visiting {Place}!", + "translation": "", + "comment": "Field names are placeholders.", + "placeholders": [ + { + "id": "Person", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "pp.Person" + }, + { + "id": "Place", + "string": "%[3]s", + "type": "string", + "underlyingType": "string", + "argNum": 3, + "expr": "pp.Place", + "comment": "Place the person is visiting." + }, + { + "id": "Extra", + "string": "%[2]v", + "type": "int", + "underlyingType": "int", + "argNum": 2, + "expr": "pp.extra" + } + ], + "position": "testdata/test1/test1.go:44:10" + }, + { + "id": "{2} files remaining!", + "key": "%d files remaining!", + "message": "{2} files remaining!", + "translation": "", + "placeholders": [ + { + "id": "2", + "string": "%[1]d", + "type": "int", + "underlyingType": "int", + "argNum": 1, + "expr": "2" + } + ], + "position": "testdata/test1/test1.go:51:10" + }, + { + "id": "{N} more files remaining!", + "key": "%d more files remaining!", + "message": "{N} more files remaining!", + "translation": "", + "placeholders": [ + { + "id": "N", + "string": "%[1]d", + "type": "int", + "underlyingType": "int", + "argNum": 1, + "expr": "n" + } + ], + "position": "testdata/test1/test1.go:56:10" + }, + { + "id": "Use the following code for your discount: {ReferralCode}", + "key": "Use the following code for your discount: %d\n", + "message": "Use the following code for your discount: {ReferralCode}", + "translation": "", + "placeholders": [ + { + "id": "ReferralCode", + "string": "%[1]d", + "type": "./testdata/test1.referralCode", + "underlyingType": "int", + "argNum": 1, + "expr": "c" + } + ], + "position": "testdata/test1/test1.go:64:10" + }, + { + "id": [ + "msgOutOfOrder", + "{Device} is out of order!" + ], + "key": "%s is out of order!", + "message": "{Device} is out of order!", + "translation": "", + "comment": "This comment wins.\n", + "placeholders": [ + { + "id": "Device", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "device" + } + ], + "position": "testdata/test1/test1.go:70:10" + }, + { + "id": "{Miles} miles traveled ({Miles_1})", + "key": "%.2[1]f miles traveled (%[1]f)", + "message": "{Miles} miles traveled ({Miles_1})", + "translation": "", + "placeholders": [ + { + "id": "Miles", + "string": "%.2[1]f", + "type": "float64", + "underlyingType": "float64", + "argNum": 1, + "expr": "miles" + }, + { + "id": "Miles_1", + "string": "%[1]f", + "type": "float64", + "underlyingType": "float64", + "argNum": 1, + "expr": "miles" + } + ], + "position": "testdata/test1/test1.go:74:10" + } + ] +} \ No newline at end of file diff --git a/vendor/golang.org/x/text/message/pipeline/testdata/test1/extracted.gotext.json.want b/vendor/golang.org/x/text/message/pipeline/testdata/test1/extracted.gotext.json.want new file mode 100644 index 0000000..4d317af --- /dev/null +++ b/vendor/golang.org/x/text/message/pipeline/testdata/test1/extracted.gotext.json.want @@ -0,0 +1,188 @@ +{ + "language": "en-US", + "messages": [ + { + "id": "Hello world!", + "key": "Hello world!\n", + "message": "Hello world!", + "translation": "", + "position": "testdata/test1/test1.go:19:10" + }, + { + "id": "Hello {City}!", + "key": "Hello %s!\n", + "message": "Hello {City}!", + "translation": "", + "placeholders": [ + { + "id": "City", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "city" + } + ], + "position": "testdata/test1/test1.go:24:10" + }, + { + "id": "{Person} is visiting {Place}!", + "key": "%s is visiting %s!\n", + "message": "{Person} is visiting {Place}!", + "translation": "", + "placeholders": [ + { + "id": "Person", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "person", + "comment": "The person of matter." + }, + { + "id": "Place", + "string": "%[2]s", + "type": "string", + "underlyingType": "string", + "argNum": 2, + "expr": "place", + "comment": "Place the person is visiting." + } + ], + "position": "testdata/test1/test1.go:30:10" + }, + { + "id": "{Person} is visiting {Place}!", + "key": "%[1]s is visiting %[3]s!\n", + "message": "{Person} is visiting {Place}!", + "translation": "", + "comment": "Field names are placeholders.", + "placeholders": [ + { + "id": "Person", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "pp.Person" + }, + { + "id": "Place", + "string": "%[3]s", + "type": "string", + "underlyingType": "string", + "argNum": 3, + "expr": "pp.Place", + "comment": "Place the person is visiting." + }, + { + "id": "Extra", + "string": "%[2]v", + "type": "int", + "underlyingType": "int", + "argNum": 2, + "expr": "pp.extra" + } + ], + "position": "testdata/test1/test1.go:44:10" + }, + { + "id": "{2} files remaining!", + "key": "%d files remaining!", + "message": "{2} files remaining!", + "translation": "", + "placeholders": [ + { + "id": "2", + "string": "%[1]d", + "type": "int", + "underlyingType": "int", + "argNum": 1, + "expr": "2" + } + ], + "position": "testdata/test1/test1.go:51:10" + }, + { + "id": "{N} more files remaining!", + "key": "%d more files remaining!", + "message": "{N} more files remaining!", + "translation": "", + "placeholders": [ + { + "id": "N", + "string": "%[1]d", + "type": "int", + "underlyingType": "int", + "argNum": 1, + "expr": "n" + } + ], + "position": "testdata/test1/test1.go:56:10" + }, + { + "id": "Use the following code for your discount: {ReferralCode}", + "key": "Use the following code for your discount: %d\n", + "message": "Use the following code for your discount: {ReferralCode}", + "translation": "", + "placeholders": [ + { + "id": "ReferralCode", + "string": "%[1]d", + "type": "./testdata/test1.referralCode", + "underlyingType": "int", + "argNum": 1, + "expr": "c" + } + ], + "position": "testdata/test1/test1.go:64:10" + }, + { + "id": [ + "msgOutOfOrder", + "{Device} is out of order!" + ], + "key": "%s is out of order!", + "message": "{Device} is out of order!", + "translation": "", + "comment": "This comment wins.\n", + "placeholders": [ + { + "id": "Device", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "device" + } + ], + "position": "testdata/test1/test1.go:70:10" + }, + { + "id": "{Miles} miles traveled ({Miles_1})", + "key": "%.2[1]f miles traveled (%[1]f)", + "message": "{Miles} miles traveled ({Miles_1})", + "translation": "", + "placeholders": [ + { + "id": "Miles", + "string": "%.2[1]f", + "type": "float64", + "underlyingType": "float64", + "argNum": 1, + "expr": "miles" + }, + { + "id": "Miles_1", + "string": "%[1]f", + "type": "float64", + "underlyingType": "float64", + "argNum": 1, + "expr": "miles" + } + ], + "position": "testdata/test1/test1.go:74:10" + } + ] +} \ No newline at end of file diff --git a/vendor/golang.org/x/text/message/pipeline/testdata/test1/locales/de/messages.gotext.json b/vendor/golang.org/x/text/message/pipeline/testdata/test1/locales/de/messages.gotext.json new file mode 100755 index 0000000..f92e4a1 --- /dev/null +++ b/vendor/golang.org/x/text/message/pipeline/testdata/test1/locales/de/messages.gotext.json @@ -0,0 +1,123 @@ +{ + "language": "de", + "messages": [ + { + "id": "Hello world!", + "key": "Hello world!\n", + "message": "Hello world!", + "translation": "Hallo Welt!" + }, + { + "id": "Hello {City}!", + "key": "Hello %s!\n", + "message": "Hello {City}!", + "translation": "Hallo {City}!", + "placeholders": [ + { + "id": "City", + "string": "%[1]s" + } + ] + }, + { + "id": "{Person} is visiting {Place}!", + "key": "%s is visiting %s!\n", + "message": "{Person} is visiting {Place}!", + "translation": "{Person} besucht {Place}!", + "placeholders": [ + { + "id": "Person", + "string": "%[1]s" + }, + { + "id": "Place", + "string": "%[2]s" + } + ] + }, + { + "id": "{Person} is visiting {Place}!", + "key": "%[1]s is visiting %[3]s!\n", + "message": "{Person} is visiting {Place}!", + "translation": "{Person} besucht {Place}!", + "placeholders": [ + { + "id": "Person", + "string": "%[1]s" + }, + { + "id": "Place", + "string": "%[3]s" + }, + { + "id": "Extra", + "string": "%[2]v" + } + ] + }, + { + "id": "{2} files remaining!", + "key": "%d files remaining!", + "message": "{N} files remaining!", + "translation": "Noch zwei Bestände zu gehen!", + "placeholders": [ + { + "id": "2", + "string": "%[1]d" + } + ] + }, + { + "id": "{N} more files remaining!", + "key": "%d more files remaining!", + "message": "{N} more files remaining!", + "translation": "Noch {N} Bestände zu gehen!", + "placeholders": [ + { + "id": "N", + "string": "%[1]d" + } + ] + }, + { + "id": "Use the following code for your discount: {ReferralCode}", + "key": "Use the following code for your discount: %d\n", + "message": "Use the following code for your discount: {ReferralCode}", + "translation": "", + "placeholders": [ + { + "id": "ReferralCode", + "string": "%[1]d" + } + ] + }, + { + "id": [ "msgOutOfOrder", "{Device} is out of order!" ], + "key": "%s is out of order!", + "message": "{Device} is out of order!", + "translation": "", + "placeholders": [ + { + "id": "Device", + "string": "%[1]s" + } + ] + }, + { + "id": "{Miles} miles traveled ({Miles_1})", + "key": "%.2[1]f miles traveled (%[1]f)", + "message": "{Miles} miles traveled ({Miles_1})", + "translation": "", + "placeholders": [ + { + "id": "Miles", + "string": "%.2[1]f" + }, + { + "id": "Miles_1", + "string": "%[1]f" + } + ] + } + ] +} diff --git a/vendor/golang.org/x/text/message/pipeline/testdata/test1/locales/de/out.gotext.json b/vendor/golang.org/x/text/message/pipeline/testdata/test1/locales/de/out.gotext.json new file mode 100755 index 0000000..f19e21d --- /dev/null +++ b/vendor/golang.org/x/text/message/pipeline/testdata/test1/locales/de/out.gotext.json @@ -0,0 +1,137 @@ +{ + "language": "de", + "messages": [ + { + "id": "Hello world!", + "message": "Hello world!", + "translation": "Hallo Welt!" + }, + { + "id": "Hello {City}!", + "message": "Hello {City}!", + "translation": "Hallo {City}!", + "placeholders": [ + { + "id": "City", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "city" + } + ] + }, + { + "id": "{Person} is visiting {Place}!", + "message": "{Person} is visiting {Place}!", + "translation": "{Person} besucht {Place}!", + "placeholders": [ + { + "id": "Person", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "person", + "comment": "The person of matter." + }, + { + "id": "Place", + "string": "%[2]s", + "type": "string", + "underlyingType": "string", + "argNum": 2, + "expr": "place", + "comment": "Place the person is visiting." + } + ] + }, + { + "id": "{2} files remaining!", + "message": "{2} files remaining!", + "translation": "Noch zwei Bestände zu gehen!", + "placeholders": [ + { + "id": "2", + "string": "%[1]d", + "type": "int", + "underlyingType": "int", + "argNum": 1, + "expr": "2" + } + ] + }, + { + "id": "{N} more files remaining!", + "message": "{N} more files remaining!", + "translation": "Noch {N} Bestände zu gehen!", + "placeholders": [ + { + "id": "N", + "string": "%[1]d", + "type": "int", + "underlyingType": "int", + "argNum": 1, + "expr": "n" + } + ] + }, + { + "id": "Use the following code for your discount: {ReferralCode}", + "message": "Use the following code for your discount: {ReferralCode}", + "translation": "", + "placeholders": [ + { + "id": "ReferralCode", + "string": "%[1]d", + "type": "./testdata/test1.referralCode", + "underlyingType": "int", + "argNum": 1, + "expr": "c" + } + ] + }, + { + "id": [ + "msgOutOfOrder", + "{Device} is out of order!" + ], + "message": "{Device} is out of order!", + "translation": "", + "comment": "This comment wins.\n", + "placeholders": [ + { + "id": "Device", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "device" + } + ] + }, + { + "id": "{Miles} miles traveled ({Miles_1})", + "message": "{Miles} miles traveled ({Miles_1})", + "translation": "", + "placeholders": [ + { + "id": "Miles", + "string": "%.2[1]f", + "type": "float64", + "underlyingType": "float64", + "argNum": 1, + "expr": "miles" + }, + { + "id": "Miles_1", + "string": "%[1]f", + "type": "float64", + "underlyingType": "float64", + "argNum": 1, + "expr": "miles" + } + ] + } + ] +} \ No newline at end of file diff --git a/vendor/golang.org/x/text/message/pipeline/testdata/test1/locales/de/out.gotext.json.want b/vendor/golang.org/x/text/message/pipeline/testdata/test1/locales/de/out.gotext.json.want new file mode 100755 index 0000000..f19e21d --- /dev/null +++ b/vendor/golang.org/x/text/message/pipeline/testdata/test1/locales/de/out.gotext.json.want @@ -0,0 +1,137 @@ +{ + "language": "de", + "messages": [ + { + "id": "Hello world!", + "message": "Hello world!", + "translation": "Hallo Welt!" + }, + { + "id": "Hello {City}!", + "message": "Hello {City}!", + "translation": "Hallo {City}!", + "placeholders": [ + { + "id": "City", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "city" + } + ] + }, + { + "id": "{Person} is visiting {Place}!", + "message": "{Person} is visiting {Place}!", + "translation": "{Person} besucht {Place}!", + "placeholders": [ + { + "id": "Person", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "person", + "comment": "The person of matter." + }, + { + "id": "Place", + "string": "%[2]s", + "type": "string", + "underlyingType": "string", + "argNum": 2, + "expr": "place", + "comment": "Place the person is visiting." + } + ] + }, + { + "id": "{2} files remaining!", + "message": "{2} files remaining!", + "translation": "Noch zwei Bestände zu gehen!", + "placeholders": [ + { + "id": "2", + "string": "%[1]d", + "type": "int", + "underlyingType": "int", + "argNum": 1, + "expr": "2" + } + ] + }, + { + "id": "{N} more files remaining!", + "message": "{N} more files remaining!", + "translation": "Noch {N} Bestände zu gehen!", + "placeholders": [ + { + "id": "N", + "string": "%[1]d", + "type": "int", + "underlyingType": "int", + "argNum": 1, + "expr": "n" + } + ] + }, + { + "id": "Use the following code for your discount: {ReferralCode}", + "message": "Use the following code for your discount: {ReferralCode}", + "translation": "", + "placeholders": [ + { + "id": "ReferralCode", + "string": "%[1]d", + "type": "./testdata/test1.referralCode", + "underlyingType": "int", + "argNum": 1, + "expr": "c" + } + ] + }, + { + "id": [ + "msgOutOfOrder", + "{Device} is out of order!" + ], + "message": "{Device} is out of order!", + "translation": "", + "comment": "This comment wins.\n", + "placeholders": [ + { + "id": "Device", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "device" + } + ] + }, + { + "id": "{Miles} miles traveled ({Miles_1})", + "message": "{Miles} miles traveled ({Miles_1})", + "translation": "", + "placeholders": [ + { + "id": "Miles", + "string": "%.2[1]f", + "type": "float64", + "underlyingType": "float64", + "argNum": 1, + "expr": "miles" + }, + { + "id": "Miles_1", + "string": "%[1]f", + "type": "float64", + "underlyingType": "float64", + "argNum": 1, + "expr": "miles" + } + ] + } + ] +} \ No newline at end of file diff --git a/vendor/golang.org/x/text/message/pipeline/testdata/test1/locales/en-US/messages.gotext.json b/vendor/golang.org/x/text/message/pipeline/testdata/test1/locales/en-US/messages.gotext.json new file mode 100755 index 0000000..b984242 --- /dev/null +++ b/vendor/golang.org/x/text/message/pipeline/testdata/test1/locales/en-US/messages.gotext.json @@ -0,0 +1,91 @@ +{ + "language": "en-US", + "messages": [ + { + "id": "Hello world!", + "key": "Hello world!\n", + "message": "Hello world!", + "translation": "Hello world!" + }, + { + "id": "Hello {City}!", + "key": "Hello %s!\n", + "message": "Hello {City}!", + "translation": "Hello {City}!" + }, + { + "id": "Hello {Town}!", + "key": "Hello %s!\n", + "message": "Hello {Town}!", + "translation": "Hello {Town}!", + "placeholders": [ + { + "id": "Town", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "town", + "comment": "Town" + } + ] + }, + { + "id": "{Person} is visiting {Place}!", + "key": "%s is visiting %s!\n", + "message": "{Person} is visiting {Place}!", + "translation": "{Person} is visiting {Place}!" + }, + { + "id": "{Person} is visiting {Place}!", + "key": "%[1]s is visiting %[3]s!\n", + "message": "{Person} is visiting {Place}!", + "translation": "{Person} is visiting {Place}!" + }, + { + "id": "{2} files remaining!", + "key": "%d files remaining!", + "message": "{N} files remaining!", + "translation": "", + "placeholders": [ + { + "id": "2", + "string": "%[1]d" + } + ] + }, + { + "id": "{N} more files remaining!", + "key": "%d more files remaining!", + "message": "{N} more files remaining!", + "translation": { + "select": { + "feature": "plural", + "arg": "N", + "cases": { + "one": "One file remaining!", + "other": "There are {N} more files remaining!" + } + } + } + }, + { + "id": "Use the following code for your discount: {ReferralCode}", + "key": "Use the following code for your discount: %d\n", + "message": "Use the following code for your discount: {ReferralCode}", + "translation": "" + }, + { + "id": [ "msgOutOfOrder", "{Device} is out of order!" ], + "key": "%s is out of order!", + "message": "{Device} is out of order!", + "translation": "{Device} is out of order!" + }, + { + "id": "{Miles} miles traveled ({Miles_1})", + "key": "%.2[1]f miles traveled (%[1]f)", + "message": "{Miles} miles traveled ({Miles_1})", + "translation": "{Miles} miles traveled ({Miles_1})" + } + ] +} diff --git a/vendor/golang.org/x/text/message/pipeline/testdata/test1/locales/en-US/out.gotext.json b/vendor/golang.org/x/text/message/pipeline/testdata/test1/locales/en-US/out.gotext.json new file mode 100755 index 0000000..59f92a5 --- /dev/null +++ b/vendor/golang.org/x/text/message/pipeline/testdata/test1/locales/en-US/out.gotext.json @@ -0,0 +1,154 @@ +{ + "language": "en-US", + "messages": [ + { + "id": "Hello world!", + "message": "Hello world!", + "translation": "Hello world!" + }, + { + "id": "Hello {City}!", + "message": "Hello {City}!", + "translation": "Hello {City}!", + "placeholders": [ + { + "id": "City", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "city" + } + ] + }, + { + "id": "{Person} is visiting {Place}!", + "message": "{Person} is visiting {Place}!", + "translation": "{Person} is visiting {Place}!", + "placeholders": [ + { + "id": "Person", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "person", + "comment": "The person of matter." + }, + { + "id": "Place", + "string": "%[2]s", + "type": "string", + "underlyingType": "string", + "argNum": 2, + "expr": "place", + "comment": "Place the person is visiting." + } + ] + }, + { + "id": "{2} files remaining!", + "message": "{2} files remaining!", + "translation": "{2} files remaining!", + "translatorComment": "Copied from source.", + "placeholders": [ + { + "id": "2", + "string": "%[1]d", + "type": "int", + "underlyingType": "int", + "argNum": 1, + "expr": "2" + } + ], + "fuzzy": true + }, + { + "id": "{N} more files remaining!", + "message": "{N} more files remaining!", + "translation": { + "select": { + "feature": "plural", + "arg": "N", + "cases": { + "one": { + "msg": "One file remaining!" + }, + "other": { + "msg": "There are {N} more files remaining!" + } + } + } + }, + "placeholders": [ + { + "id": "N", + "string": "%[1]d", + "type": "int", + "underlyingType": "int", + "argNum": 1, + "expr": "n" + } + ] + }, + { + "id": "Use the following code for your discount: {ReferralCode}", + "message": "Use the following code for your discount: {ReferralCode}", + "translation": "Use the following code for your discount: {ReferralCode}", + "translatorComment": "Copied from source.", + "placeholders": [ + { + "id": "ReferralCode", + "string": "%[1]d", + "type": "./testdata/test1.referralCode", + "underlyingType": "int", + "argNum": 1, + "expr": "c" + } + ], + "fuzzy": true + }, + { + "id": [ + "msgOutOfOrder", + "{Device} is out of order!" + ], + "message": "{Device} is out of order!", + "translation": "{Device} is out of order!", + "comment": "This comment wins.\n", + "placeholders": [ + { + "id": "Device", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "device" + } + ] + }, + { + "id": "{Miles} miles traveled ({Miles_1})", + "message": "{Miles} miles traveled ({Miles_1})", + "translation": "{Miles} miles traveled ({Miles_1})", + "placeholders": [ + { + "id": "Miles", + "string": "%.2[1]f", + "type": "float64", + "underlyingType": "float64", + "argNum": 1, + "expr": "miles" + }, + { + "id": "Miles_1", + "string": "%[1]f", + "type": "float64", + "underlyingType": "float64", + "argNum": 1, + "expr": "miles" + } + ] + } + ] +} \ No newline at end of file diff --git a/vendor/golang.org/x/text/message/pipeline/testdata/test1/locales/en-US/out.gotext.json.want b/vendor/golang.org/x/text/message/pipeline/testdata/test1/locales/en-US/out.gotext.json.want new file mode 100755 index 0000000..59f92a5 --- /dev/null +++ b/vendor/golang.org/x/text/message/pipeline/testdata/test1/locales/en-US/out.gotext.json.want @@ -0,0 +1,154 @@ +{ + "language": "en-US", + "messages": [ + { + "id": "Hello world!", + "message": "Hello world!", + "translation": "Hello world!" + }, + { + "id": "Hello {City}!", + "message": "Hello {City}!", + "translation": "Hello {City}!", + "placeholders": [ + { + "id": "City", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "city" + } + ] + }, + { + "id": "{Person} is visiting {Place}!", + "message": "{Person} is visiting {Place}!", + "translation": "{Person} is visiting {Place}!", + "placeholders": [ + { + "id": "Person", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "person", + "comment": "The person of matter." + }, + { + "id": "Place", + "string": "%[2]s", + "type": "string", + "underlyingType": "string", + "argNum": 2, + "expr": "place", + "comment": "Place the person is visiting." + } + ] + }, + { + "id": "{2} files remaining!", + "message": "{2} files remaining!", + "translation": "{2} files remaining!", + "translatorComment": "Copied from source.", + "placeholders": [ + { + "id": "2", + "string": "%[1]d", + "type": "int", + "underlyingType": "int", + "argNum": 1, + "expr": "2" + } + ], + "fuzzy": true + }, + { + "id": "{N} more files remaining!", + "message": "{N} more files remaining!", + "translation": { + "select": { + "feature": "plural", + "arg": "N", + "cases": { + "one": { + "msg": "One file remaining!" + }, + "other": { + "msg": "There are {N} more files remaining!" + } + } + } + }, + "placeholders": [ + { + "id": "N", + "string": "%[1]d", + "type": "int", + "underlyingType": "int", + "argNum": 1, + "expr": "n" + } + ] + }, + { + "id": "Use the following code for your discount: {ReferralCode}", + "message": "Use the following code for your discount: {ReferralCode}", + "translation": "Use the following code for your discount: {ReferralCode}", + "translatorComment": "Copied from source.", + "placeholders": [ + { + "id": "ReferralCode", + "string": "%[1]d", + "type": "./testdata/test1.referralCode", + "underlyingType": "int", + "argNum": 1, + "expr": "c" + } + ], + "fuzzy": true + }, + { + "id": [ + "msgOutOfOrder", + "{Device} is out of order!" + ], + "message": "{Device} is out of order!", + "translation": "{Device} is out of order!", + "comment": "This comment wins.\n", + "placeholders": [ + { + "id": "Device", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "device" + } + ] + }, + { + "id": "{Miles} miles traveled ({Miles_1})", + "message": "{Miles} miles traveled ({Miles_1})", + "translation": "{Miles} miles traveled ({Miles_1})", + "placeholders": [ + { + "id": "Miles", + "string": "%.2[1]f", + "type": "float64", + "underlyingType": "float64", + "argNum": 1, + "expr": "miles" + }, + { + "id": "Miles_1", + "string": "%[1]f", + "type": "float64", + "underlyingType": "float64", + "argNum": 1, + "expr": "miles" + } + ] + } + ] +} \ No newline at end of file diff --git a/vendor/golang.org/x/text/message/pipeline/testdata/test1/locales/zh/messages.gotext.json b/vendor/golang.org/x/text/message/pipeline/testdata/test1/locales/zh/messages.gotext.json new file mode 100755 index 0000000..c80d1d2 --- /dev/null +++ b/vendor/golang.org/x/text/message/pipeline/testdata/test1/locales/zh/messages.gotext.json @@ -0,0 +1,135 @@ +{ + "language": "zh", + "messages": [ + { + "id": "Hello world!", + "key": "Hello world!\n", + "message": "Hello world!", + "translation": "" + }, + { + "id": "Hello {City}!", + "key": "Hello %s!\n", + "message": "Hello {City}!", + "translation": "", + "placeholders": [ + { + "id": "City", + "string": "%[1]s" + } + ] + }, + { + "id": "Hello {Town}!", + "key": "Hello %s!\n", + "message": "Hello {Town}!", + "translation": "", + "placeholders": [ + { + "id": "Town", + "string": "%[1]s" + } + ] + }, + { + "id": "{Person} is visiting {Place}!", + "key": "%s is visiting %s!\n", + "message": "{Person} is visiting {Place}!", + "translation": "", + "placeholders": [ + { + "id": "Person", + "string": "%[1]s" + }, + { + "id": "Place", + "string": "%[2]s" + } + ] + }, + { + "id": "{Person} is visiting {Place}!", + "key": "%[1]s is visiting %[3]s!\n", + "message": "{Person} is visiting {Place}!", + "translation": "", + "placeholders": [ + { + "id": "Person", + "string": "%[1]s" + }, + { + "id": "Place", + "string": "%[3]s" + }, + { + "id": "Extra", + "string": "%[2]v" + } + ] + }, + { + "id": "{2} files remaining!", + "key": "%d files remaining!", + "message": "{2} files remaining!", + "translation": "", + "placeholders": [ + { + "id": "", + "string": "%[1]d" + } + ] + }, + { + "id": "{N} more files remaining!", + "key": "%d more files remaining!", + "message": "{N} more files remaining!", + "translation": "", + "placeholders": [ + { + "id": "N", + "string": "%[1]d" + } + ] + }, + { + "id": "Use the following code for your discount: {ReferralCode}", + "key": "Use the following code for your discount: %d\n", + "message": "Use the following code for your discount: {ReferralCode}", + "translation": "", + "placeholders": [ + { + "id": "ReferralCode", + "string": "%[1]d" + } + ] + }, + { + "id": [ "{Device} is out of order!", "msgOutOfOrder" ], + "key": "%s is out of order!", + "message": "{Device} is out of order!", + "translation": "", + "placeholders": [ + { + "id": "Device", + "string": "%[1]s" + } + ] + }, + { + "id": "{Miles} miles traveled ({Miles_1})", + "key": "%.2[1]f miles traveled (%[1]f)", + "message": "{Miles} miles traveled ({Miles_1})", + "translation": "", + "placeholders": [ + { + "id": "Miles", + "string": "%.2[1]f" + }, + { + "id": "Miles_1", + "string": "%[1]f" + } + ] + } + ] +} \ No newline at end of file diff --git a/vendor/golang.org/x/text/message/pipeline/testdata/test1/locales/zh/out.gotext.json b/vendor/golang.org/x/text/message/pipeline/testdata/test1/locales/zh/out.gotext.json new file mode 100755 index 0000000..9bede65 --- /dev/null +++ b/vendor/golang.org/x/text/message/pipeline/testdata/test1/locales/zh/out.gotext.json @@ -0,0 +1,137 @@ +{ + "language": "zh", + "messages": [ + { + "id": "Hello world!", + "message": "Hello world!", + "translation": "" + }, + { + "id": "Hello {City}!", + "message": "Hello {City}!", + "translation": "", + "placeholders": [ + { + "id": "City", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "city" + } + ] + }, + { + "id": "{Person} is visiting {Place}!", + "message": "{Person} is visiting {Place}!", + "translation": "", + "placeholders": [ + { + "id": "Person", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "person", + "comment": "The person of matter." + }, + { + "id": "Place", + "string": "%[2]s", + "type": "string", + "underlyingType": "string", + "argNum": 2, + "expr": "place", + "comment": "Place the person is visiting." + } + ] + }, + { + "id": "{2} files remaining!", + "message": "{2} files remaining!", + "translation": "", + "placeholders": [ + { + "id": "2", + "string": "%[1]d", + "type": "int", + "underlyingType": "int", + "argNum": 1, + "expr": "2" + } + ] + }, + { + "id": "{N} more files remaining!", + "message": "{N} more files remaining!", + "translation": "", + "placeholders": [ + { + "id": "N", + "string": "%[1]d", + "type": "int", + "underlyingType": "int", + "argNum": 1, + "expr": "n" + } + ] + }, + { + "id": "Use the following code for your discount: {ReferralCode}", + "message": "Use the following code for your discount: {ReferralCode}", + "translation": "", + "placeholders": [ + { + "id": "ReferralCode", + "string": "%[1]d", + "type": "./testdata/test1.referralCode", + "underlyingType": "int", + "argNum": 1, + "expr": "c" + } + ] + }, + { + "id": [ + "msgOutOfOrder", + "{Device} is out of order!" + ], + "message": "{Device} is out of order!", + "translation": "", + "comment": "This comment wins.\n", + "placeholders": [ + { + "id": "Device", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "device" + } + ] + }, + { + "id": "{Miles} miles traveled ({Miles_1})", + "message": "{Miles} miles traveled ({Miles_1})", + "translation": "", + "placeholders": [ + { + "id": "Miles", + "string": "%.2[1]f", + "type": "float64", + "underlyingType": "float64", + "argNum": 1, + "expr": "miles" + }, + { + "id": "Miles_1", + "string": "%[1]f", + "type": "float64", + "underlyingType": "float64", + "argNum": 1, + "expr": "miles" + } + ] + } + ] +} \ No newline at end of file diff --git a/vendor/golang.org/x/text/message/pipeline/testdata/test1/locales/zh/out.gotext.json.want b/vendor/golang.org/x/text/message/pipeline/testdata/test1/locales/zh/out.gotext.json.want new file mode 100755 index 0000000..9bede65 --- /dev/null +++ b/vendor/golang.org/x/text/message/pipeline/testdata/test1/locales/zh/out.gotext.json.want @@ -0,0 +1,137 @@ +{ + "language": "zh", + "messages": [ + { + "id": "Hello world!", + "message": "Hello world!", + "translation": "" + }, + { + "id": "Hello {City}!", + "message": "Hello {City}!", + "translation": "", + "placeholders": [ + { + "id": "City", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "city" + } + ] + }, + { + "id": "{Person} is visiting {Place}!", + "message": "{Person} is visiting {Place}!", + "translation": "", + "placeholders": [ + { + "id": "Person", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "person", + "comment": "The person of matter." + }, + { + "id": "Place", + "string": "%[2]s", + "type": "string", + "underlyingType": "string", + "argNum": 2, + "expr": "place", + "comment": "Place the person is visiting." + } + ] + }, + { + "id": "{2} files remaining!", + "message": "{2} files remaining!", + "translation": "", + "placeholders": [ + { + "id": "2", + "string": "%[1]d", + "type": "int", + "underlyingType": "int", + "argNum": 1, + "expr": "2" + } + ] + }, + { + "id": "{N} more files remaining!", + "message": "{N} more files remaining!", + "translation": "", + "placeholders": [ + { + "id": "N", + "string": "%[1]d", + "type": "int", + "underlyingType": "int", + "argNum": 1, + "expr": "n" + } + ] + }, + { + "id": "Use the following code for your discount: {ReferralCode}", + "message": "Use the following code for your discount: {ReferralCode}", + "translation": "", + "placeholders": [ + { + "id": "ReferralCode", + "string": "%[1]d", + "type": "./testdata/test1.referralCode", + "underlyingType": "int", + "argNum": 1, + "expr": "c" + } + ] + }, + { + "id": [ + "msgOutOfOrder", + "{Device} is out of order!" + ], + "message": "{Device} is out of order!", + "translation": "", + "comment": "This comment wins.\n", + "placeholders": [ + { + "id": "Device", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "device" + } + ] + }, + { + "id": "{Miles} miles traveled ({Miles_1})", + "message": "{Miles} miles traveled ({Miles_1})", + "translation": "", + "placeholders": [ + { + "id": "Miles", + "string": "%.2[1]f", + "type": "float64", + "underlyingType": "float64", + "argNum": 1, + "expr": "miles" + }, + { + "id": "Miles_1", + "string": "%[1]f", + "type": "float64", + "underlyingType": "float64", + "argNum": 1, + "expr": "miles" + } + ] + } + ] +} \ No newline at end of file diff --git a/vendor/golang.org/x/text/message/pipeline/testdata/test1/test1.go b/vendor/golang.org/x/text/message/pipeline/testdata/test1/test1.go new file mode 100644 index 0000000..88051f9 --- /dev/null +++ b/vendor/golang.org/x/text/message/pipeline/testdata/test1/test1.go @@ -0,0 +1,75 @@ +// Copyright 2017 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. + +package main + +import "golang.org/x/text/message" + +func main() { + p := message.NewPrinter(message.MatchLanguage("en")) + + // NOT EXTRACTED: strings passed to Println are not extracted. + p.Println("Hello world!") + + // NOT EXTRACTED: strings passed to Print are not extracted. + p.Print("Hello world!\n") + + // Extract and trim whitespace (TODO). + p.Printf("Hello world!\n") + + // NOT EXTRACTED: city is not used as a pattern or passed to %m. + city := "Amsterdam" + // This comment is extracted. + p.Printf("Hello %s!\n", city) + + person := "Sheila" + place := "Zürich" + + // Substitutions replaced by variable names. + p.Printf("%s is visiting %s!\n", + person, // The person of matter. + place, // Place the person is visiting. + ) + + pp := struct { + Person string // The person of matter. // TODO: get this comment. + Place string + extra int + }{ + person, place, 4, + } + + // extract will drop this comment in favor of the one below. + p.Printf("%[1]s is visiting %[3]s!\n", // Field names are placeholders. + pp.Person, + pp.extra, + pp.Place, // Place the person is visiting. + ) + + // Numeric literal becomes placeholder. + p.Printf("%d files remaining!", 2) + + const n = 2 + + // Constant identifier becomes placeholder. + p.Printf("%d more files remaining!", n) + + // Infer better names from type names. + type referralCode int + + const c = referralCode(5) + + // Use type name as placeholder. + p.Printf("Use the following code for your discount: %d\n", c) + + // Use constant name as message ID. + const msgOutOfOrder = "%s is out of order!" // This comment wins. + const device = "Soda machine" + // This message has two IDs. + p.Printf(msgOutOfOrder, device) + + // Multiple substitutions for same argument. + miles := 1.2345 + p.Printf("%.2[1]f miles traveled (%[1]f)", miles) +} diff --git a/vendor/golang.org/x/text/message/print.go b/vendor/golang.org/x/text/message/print.go new file mode 100644 index 0000000..da304cc --- /dev/null +++ b/vendor/golang.org/x/text/message/print.go @@ -0,0 +1,984 @@ +// Copyright 2017 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. + +package message + +import ( + "bytes" + "fmt" // TODO: consider copying interfaces from package fmt to avoid dependency. + "math" + "reflect" + "sync" + "unicode/utf8" + + "golang.org/x/text/internal/format" + "golang.org/x/text/internal/number" + "golang.org/x/text/language" + "golang.org/x/text/message/catalog" +) + +// Strings for use with buffer.WriteString. +// This is less overhead than using buffer.Write with byte arrays. +const ( + commaSpaceString = ", " + nilAngleString = "" + nilParenString = "(nil)" + nilString = "nil" + mapString = "map[" + percentBangString = "%!" + missingString = "(MISSING)" + badIndexString = "(BADINDEX)" + panicString = "(PANIC=" + extraString = "%!(EXTRA " + badWidthString = "%!(BADWIDTH)" + badPrecString = "%!(BADPREC)" + noVerbString = "%!(NOVERB)" + + invReflectString = "" +) + +var printerPool = sync.Pool{ + New: func() interface{} { return new(printer) }, +} + +// newPrinter allocates a new printer struct or grabs a cached one. +func newPrinter(pp *Printer) *printer { + p := printerPool.Get().(*printer) + p.Printer = *pp + // TODO: cache most of the following call. + p.catContext = pp.cat.Context(pp.tag, p) + + p.panicking = false + p.erroring = false + p.fmt.init(&p.Buffer) + return p +} + +// free saves used printer structs in printerFree; avoids an allocation per invocation. +func (p *printer) free() { + p.Buffer.Reset() + p.arg = nil + p.value = reflect.Value{} + printerPool.Put(p) +} + +// printer is used to store a printer's state. +// It implements "golang.org/x/text/internal/format".State. +type printer struct { + Printer + + // the context for looking up message translations + catContext *catalog.Context + + // buffer for accumulating output. + bytes.Buffer + + // arg holds the current item, as an interface{}. + arg interface{} + // value is used instead of arg for reflect values. + value reflect.Value + + // fmt is used to format basic items such as integers or strings. + fmt formatInfo + + // panicking is set by catchPanic to avoid infinite panic, recover, panic, ... recursion. + panicking bool + // erroring is set when printing an error string to guard against calling handleMethods. + erroring bool +} + +// Language implements "golang.org/x/text/internal/format".State. +func (p *printer) Language() language.Tag { return p.tag } + +func (p *printer) Width() (wid int, ok bool) { return p.fmt.Width, p.fmt.WidthPresent } + +func (p *printer) Precision() (prec int, ok bool) { return p.fmt.Prec, p.fmt.PrecPresent } + +func (p *printer) Flag(b int) bool { + switch b { + case '-': + return p.fmt.Minus + case '+': + return p.fmt.Plus || p.fmt.PlusV + case '#': + return p.fmt.Sharp || p.fmt.SharpV + case ' ': + return p.fmt.Space + case '0': + return p.fmt.Zero + } + return false +} + +// getField gets the i'th field of the struct value. +// If the field is itself is an interface, return a value for +// the thing inside the interface, not the interface itself. +func getField(v reflect.Value, i int) reflect.Value { + val := v.Field(i) + if val.Kind() == reflect.Interface && !val.IsNil() { + val = val.Elem() + } + return val +} + +func (p *printer) unknownType(v reflect.Value) { + if !v.IsValid() { + p.WriteString(nilAngleString) + return + } + p.WriteByte('?') + p.WriteString(v.Type().String()) + p.WriteByte('?') +} + +func (p *printer) badVerb(verb rune) { + p.erroring = true + p.WriteString(percentBangString) + p.WriteRune(verb) + p.WriteByte('(') + switch { + case p.arg != nil: + p.WriteString(reflect.TypeOf(p.arg).String()) + p.WriteByte('=') + p.printArg(p.arg, 'v') + case p.value.IsValid(): + p.WriteString(p.value.Type().String()) + p.WriteByte('=') + p.printValue(p.value, 'v', 0) + default: + p.WriteString(nilAngleString) + } + p.WriteByte(')') + p.erroring = false +} + +func (p *printer) fmtBool(v bool, verb rune) { + switch verb { + case 't', 'v': + p.fmt.fmt_boolean(v) + default: + p.badVerb(verb) + } +} + +// fmt0x64 formats a uint64 in hexadecimal and prefixes it with 0x or +// not, as requested, by temporarily setting the sharp flag. +func (p *printer) fmt0x64(v uint64, leading0x bool) { + sharp := p.fmt.Sharp + p.fmt.Sharp = leading0x + p.fmt.fmt_integer(v, 16, unsigned, ldigits) + p.fmt.Sharp = sharp +} + +// fmtInteger formats a signed or unsigned integer. +func (p *printer) fmtInteger(v uint64, isSigned bool, verb rune) { + switch verb { + case 'v': + if p.fmt.SharpV && !isSigned { + p.fmt0x64(v, true) + return + } + fallthrough + case 'd': + if p.fmt.Sharp || p.fmt.SharpV { + p.fmt.fmt_integer(v, 10, isSigned, ldigits) + } else { + p.fmtDecimalInt(v, isSigned) + } + case 'b': + p.fmt.fmt_integer(v, 2, isSigned, ldigits) + case 'o': + p.fmt.fmt_integer(v, 8, isSigned, ldigits) + case 'x': + p.fmt.fmt_integer(v, 16, isSigned, ldigits) + case 'X': + p.fmt.fmt_integer(v, 16, isSigned, udigits) + case 'c': + p.fmt.fmt_c(v) + case 'q': + if v <= utf8.MaxRune { + p.fmt.fmt_qc(v) + } else { + p.badVerb(verb) + } + case 'U': + p.fmt.fmt_unicode(v) + default: + p.badVerb(verb) + } +} + +// fmtFloat formats a float. The default precision for each verb +// is specified as last argument in the call to fmt_float. +func (p *printer) fmtFloat(v float64, size int, verb rune) { + switch verb { + case 'b': + p.fmt.fmt_float(v, size, verb, -1) + case 'v': + verb = 'g' + fallthrough + case 'g', 'G': + if p.fmt.Sharp || p.fmt.SharpV { + p.fmt.fmt_float(v, size, verb, -1) + } else { + p.fmtVariableFloat(v, size) + } + case 'e', 'E': + if p.fmt.Sharp || p.fmt.SharpV { + p.fmt.fmt_float(v, size, verb, 6) + } else { + p.fmtScientific(v, size, 6) + } + case 'f', 'F': + if p.fmt.Sharp || p.fmt.SharpV { + p.fmt.fmt_float(v, size, verb, 6) + } else { + p.fmtDecimalFloat(v, size, 6) + } + default: + p.badVerb(verb) + } +} + +func (p *printer) setFlags(f *number.Formatter) { + f.Flags &^= number.ElideSign + if p.fmt.Plus || p.fmt.Space { + f.Flags |= number.AlwaysSign + if !p.fmt.Plus { + f.Flags |= number.ElideSign + } + } else { + f.Flags &^= number.AlwaysSign + } +} + +func (p *printer) updatePadding(f *number.Formatter) { + f.Flags &^= number.PadMask + if p.fmt.Minus { + f.Flags |= number.PadAfterSuffix + } else { + f.Flags |= number.PadBeforePrefix + } + f.PadRune = ' ' + f.FormatWidth = uint16(p.fmt.Width) +} + +func (p *printer) initDecimal(minFrac, maxFrac int) { + f := &p.toDecimal + f.MinIntegerDigits = 1 + f.MaxIntegerDigits = 0 + f.MinFractionDigits = uint8(minFrac) + f.MaxFractionDigits = int16(maxFrac) + p.setFlags(f) + f.PadRune = 0 + if p.fmt.WidthPresent { + if p.fmt.Zero { + wid := p.fmt.Width + // Use significant integers for this. + // TODO: this is not the same as width, but so be it. + if f.MinFractionDigits > 0 { + wid -= 1 + int(f.MinFractionDigits) + } + if p.fmt.Plus || p.fmt.Space { + wid-- + } + if wid > 0 && wid > int(f.MinIntegerDigits) { + f.MinIntegerDigits = uint8(wid) + } + } + p.updatePadding(f) + } +} + +func (p *printer) initScientific(minFrac, maxFrac int) { + f := &p.toScientific + if maxFrac < 0 { + f.SetPrecision(maxFrac) + } else { + f.SetPrecision(maxFrac + 1) + f.MinFractionDigits = uint8(minFrac) + f.MaxFractionDigits = int16(maxFrac) + } + f.MinExponentDigits = 2 + p.setFlags(f) + f.PadRune = 0 + if p.fmt.WidthPresent { + f.Flags &^= number.PadMask + if p.fmt.Zero { + f.PadRune = f.Digit(0) + f.Flags |= number.PadAfterPrefix + } else { + f.PadRune = ' ' + f.Flags |= number.PadBeforePrefix + } + p.updatePadding(f) + } +} + +func (p *printer) fmtDecimalInt(v uint64, isSigned bool) { + var d number.Decimal + + f := &p.toDecimal + if p.fmt.PrecPresent { + p.setFlags(f) + f.MinIntegerDigits = uint8(p.fmt.Prec) + f.MaxIntegerDigits = 0 + f.MinFractionDigits = 0 + f.MaxFractionDigits = 0 + if p.fmt.WidthPresent { + p.updatePadding(f) + } + } else { + p.initDecimal(0, 0) + } + d.ConvertInt(p.toDecimal.RoundingContext, isSigned, v) + + out := p.toDecimal.Format([]byte(nil), &d) + p.Buffer.Write(out) +} + +func (p *printer) fmtDecimalFloat(v float64, size, prec int) { + var d number.Decimal + if p.fmt.PrecPresent { + prec = p.fmt.Prec + } + p.initDecimal(prec, prec) + d.ConvertFloat(p.toDecimal.RoundingContext, v, size) + + out := p.toDecimal.Format([]byte(nil), &d) + p.Buffer.Write(out) +} + +func (p *printer) fmtVariableFloat(v float64, size int) { + prec := -1 + if p.fmt.PrecPresent { + prec = p.fmt.Prec + } + var d number.Decimal + p.initScientific(0, prec) + d.ConvertFloat(p.toScientific.RoundingContext, v, size) + + // Copy logic of 'g' formatting from strconv. It is simplified a bit as + // we don't have to mind having prec > len(d.Digits). + shortest := prec < 0 + ePrec := prec + if shortest { + prec = len(d.Digits) + ePrec = 6 + } else if prec == 0 { + prec = 1 + ePrec = 1 + } + exp := int(d.Exp) - 1 + if exp < -4 || exp >= ePrec { + p.initScientific(0, prec) + + out := p.toScientific.Format([]byte(nil), &d) + p.Buffer.Write(out) + } else { + if prec > int(d.Exp) { + prec = len(d.Digits) + } + if prec -= int(d.Exp); prec < 0 { + prec = 0 + } + p.initDecimal(0, prec) + + out := p.toDecimal.Format([]byte(nil), &d) + p.Buffer.Write(out) + } +} + +func (p *printer) fmtScientific(v float64, size, prec int) { + var d number.Decimal + if p.fmt.PrecPresent { + prec = p.fmt.Prec + } + p.initScientific(prec, prec) + rc := p.toScientific.RoundingContext + d.ConvertFloat(rc, v, size) + + out := p.toScientific.Format([]byte(nil), &d) + p.Buffer.Write(out) + +} + +// fmtComplex formats a complex number v with +// r = real(v) and j = imag(v) as (r+ji) using +// fmtFloat for r and j formatting. +func (p *printer) fmtComplex(v complex128, size int, verb rune) { + // Make sure any unsupported verbs are found before the + // calls to fmtFloat to not generate an incorrect error string. + switch verb { + case 'v', 'b', 'g', 'G', 'f', 'F', 'e', 'E': + p.WriteByte('(') + p.fmtFloat(real(v), size/2, verb) + // Imaginary part always has a sign. + if math.IsNaN(imag(v)) { + // By CLDR's rules, NaNs do not use patterns or signs. As this code + // relies on AlwaysSign working for imaginary parts, we need to + // manually handle NaNs. + f := &p.toScientific + p.setFlags(f) + p.updatePadding(f) + p.setFlags(f) + nan := f.Symbol(number.SymNan) + extra := 0 + if w, ok := p.Width(); ok { + extra = w - utf8.RuneCountInString(nan) - 1 + } + if f.Flags&number.PadAfterNumber == 0 { + for ; extra > 0; extra-- { + p.WriteRune(f.PadRune) + } + } + p.WriteString(f.Symbol(number.SymPlusSign)) + p.WriteString(nan) + for ; extra > 0; extra-- { + p.WriteRune(f.PadRune) + } + p.WriteString("i)") + return + } + oldPlus := p.fmt.Plus + p.fmt.Plus = true + p.fmtFloat(imag(v), size/2, verb) + p.WriteString("i)") // TODO: use symbol? + p.fmt.Plus = oldPlus + default: + p.badVerb(verb) + } +} + +func (p *printer) fmtString(v string, verb rune) { + switch verb { + case 'v': + if p.fmt.SharpV { + p.fmt.fmt_q(v) + } else { + p.fmt.fmt_s(v) + } + case 's': + p.fmt.fmt_s(v) + case 'x': + p.fmt.fmt_sx(v, ldigits) + case 'X': + p.fmt.fmt_sx(v, udigits) + case 'q': + p.fmt.fmt_q(v) + case 'm': + ctx := p.cat.Context(p.tag, rawPrinter{p}) + if ctx.Execute(v) == catalog.ErrNotFound { + p.WriteString(v) + } + default: + p.badVerb(verb) + } +} + +func (p *printer) fmtBytes(v []byte, verb rune, typeString string) { + switch verb { + case 'v', 'd': + if p.fmt.SharpV { + p.WriteString(typeString) + if v == nil { + p.WriteString(nilParenString) + return + } + p.WriteByte('{') + for i, c := range v { + if i > 0 { + p.WriteString(commaSpaceString) + } + p.fmt0x64(uint64(c), true) + } + p.WriteByte('}') + } else { + p.WriteByte('[') + for i, c := range v { + if i > 0 { + p.WriteByte(' ') + } + p.fmt.fmt_integer(uint64(c), 10, unsigned, ldigits) + } + p.WriteByte(']') + } + case 's': + p.fmt.fmt_s(string(v)) + case 'x': + p.fmt.fmt_bx(v, ldigits) + case 'X': + p.fmt.fmt_bx(v, udigits) + case 'q': + p.fmt.fmt_q(string(v)) + default: + p.printValue(reflect.ValueOf(v), verb, 0) + } +} + +func (p *printer) fmtPointer(value reflect.Value, verb rune) { + var u uintptr + switch value.Kind() { + case reflect.Chan, reflect.Func, reflect.Map, reflect.Ptr, reflect.Slice, reflect.UnsafePointer: + u = value.Pointer() + default: + p.badVerb(verb) + return + } + + switch verb { + case 'v': + if p.fmt.SharpV { + p.WriteByte('(') + p.WriteString(value.Type().String()) + p.WriteString(")(") + if u == 0 { + p.WriteString(nilString) + } else { + p.fmt0x64(uint64(u), true) + } + p.WriteByte(')') + } else { + if u == 0 { + p.fmt.padString(nilAngleString) + } else { + p.fmt0x64(uint64(u), !p.fmt.Sharp) + } + } + case 'p': + p.fmt0x64(uint64(u), !p.fmt.Sharp) + case 'b', 'o', 'd', 'x', 'X': + if verb == 'd' { + p.fmt.Sharp = true // Print as standard go. TODO: does this make sense? + } + p.fmtInteger(uint64(u), unsigned, verb) + default: + p.badVerb(verb) + } +} + +func (p *printer) catchPanic(arg interface{}, verb rune) { + if err := recover(); err != nil { + // If it's a nil pointer, just say "". The likeliest causes are a + // Stringer that fails to guard against nil or a nil pointer for a + // value receiver, and in either case, "" is a nice result. + if v := reflect.ValueOf(arg); v.Kind() == reflect.Ptr && v.IsNil() { + p.WriteString(nilAngleString) + return + } + // Otherwise print a concise panic message. Most of the time the panic + // value will print itself nicely. + if p.panicking { + // Nested panics; the recursion in printArg cannot succeed. + panic(err) + } + + oldFlags := p.fmt.Parser + // For this output we want default behavior. + p.fmt.ClearFlags() + + p.WriteString(percentBangString) + p.WriteRune(verb) + p.WriteString(panicString) + p.panicking = true + p.printArg(err, 'v') + p.panicking = false + p.WriteByte(')') + + p.fmt.Parser = oldFlags + } +} + +func (p *printer) handleMethods(verb rune) (handled bool) { + if p.erroring { + return + } + // Is it a Formatter? + if formatter, ok := p.arg.(format.Formatter); ok { + handled = true + defer p.catchPanic(p.arg, verb) + formatter.Format(p, verb) + return + } + if formatter, ok := p.arg.(fmt.Formatter); ok { + handled = true + defer p.catchPanic(p.arg, verb) + formatter.Format(p, verb) + return + } + + // If we're doing Go syntax and the argument knows how to supply it, take care of it now. + if p.fmt.SharpV { + if stringer, ok := p.arg.(fmt.GoStringer); ok { + handled = true + defer p.catchPanic(p.arg, verb) + // Print the result of GoString unadorned. + p.fmt.fmt_s(stringer.GoString()) + return + } + } else { + // If a string is acceptable according to the format, see if + // the value satisfies one of the string-valued interfaces. + // Println etc. set verb to %v, which is "stringable". + switch verb { + case 'v', 's', 'x', 'X', 'q': + // Is it an error or Stringer? + // The duplication in the bodies is necessary: + // setting handled and deferring catchPanic + // must happen before calling the method. + switch v := p.arg.(type) { + case error: + handled = true + defer p.catchPanic(p.arg, verb) + p.fmtString(v.Error(), verb) + return + + case fmt.Stringer: + handled = true + defer p.catchPanic(p.arg, verb) + p.fmtString(v.String(), verb) + return + } + } + } + return false +} + +func (p *printer) printArg(arg interface{}, verb rune) { + p.arg = arg + p.value = reflect.Value{} + + if arg == nil { + switch verb { + case 'T', 'v': + p.fmt.padString(nilAngleString) + default: + p.badVerb(verb) + } + return + } + + // Special processing considerations. + // %T (the value's type) and %p (its address) are special; we always do them first. + switch verb { + case 'T': + p.fmt.fmt_s(reflect.TypeOf(arg).String()) + return + case 'p': + p.fmtPointer(reflect.ValueOf(arg), 'p') + return + } + + // Some types can be done without reflection. + switch f := arg.(type) { + case bool: + p.fmtBool(f, verb) + case float32: + p.fmtFloat(float64(f), 32, verb) + case float64: + p.fmtFloat(f, 64, verb) + case complex64: + p.fmtComplex(complex128(f), 64, verb) + case complex128: + p.fmtComplex(f, 128, verb) + case int: + p.fmtInteger(uint64(f), signed, verb) + case int8: + p.fmtInteger(uint64(f), signed, verb) + case int16: + p.fmtInteger(uint64(f), signed, verb) + case int32: + p.fmtInteger(uint64(f), signed, verb) + case int64: + p.fmtInteger(uint64(f), signed, verb) + case uint: + p.fmtInteger(uint64(f), unsigned, verb) + case uint8: + p.fmtInteger(uint64(f), unsigned, verb) + case uint16: + p.fmtInteger(uint64(f), unsigned, verb) + case uint32: + p.fmtInteger(uint64(f), unsigned, verb) + case uint64: + p.fmtInteger(f, unsigned, verb) + case uintptr: + p.fmtInteger(uint64(f), unsigned, verb) + case string: + p.fmtString(f, verb) + case []byte: + p.fmtBytes(f, verb, "[]byte") + case reflect.Value: + // Handle extractable values with special methods + // since printValue does not handle them at depth 0. + if f.IsValid() && f.CanInterface() { + p.arg = f.Interface() + if p.handleMethods(verb) { + return + } + } + p.printValue(f, verb, 0) + default: + // If the type is not simple, it might have methods. + if !p.handleMethods(verb) { + // Need to use reflection, since the type had no + // interface methods that could be used for formatting. + p.printValue(reflect.ValueOf(f), verb, 0) + } + } +} + +// printValue is similar to printArg but starts with a reflect value, not an interface{} value. +// It does not handle 'p' and 'T' verbs because these should have been already handled by printArg. +func (p *printer) printValue(value reflect.Value, verb rune, depth int) { + // Handle values with special methods if not already handled by printArg (depth == 0). + if depth > 0 && value.IsValid() && value.CanInterface() { + p.arg = value.Interface() + if p.handleMethods(verb) { + return + } + } + p.arg = nil + p.value = value + + switch f := value; value.Kind() { + case reflect.Invalid: + if depth == 0 { + p.WriteString(invReflectString) + } else { + switch verb { + case 'v': + p.WriteString(nilAngleString) + default: + p.badVerb(verb) + } + } + case reflect.Bool: + p.fmtBool(f.Bool(), verb) + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + p.fmtInteger(uint64(f.Int()), signed, verb) + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + p.fmtInteger(f.Uint(), unsigned, verb) + case reflect.Float32: + p.fmtFloat(f.Float(), 32, verb) + case reflect.Float64: + p.fmtFloat(f.Float(), 64, verb) + case reflect.Complex64: + p.fmtComplex(f.Complex(), 64, verb) + case reflect.Complex128: + p.fmtComplex(f.Complex(), 128, verb) + case reflect.String: + p.fmtString(f.String(), verb) + case reflect.Map: + if p.fmt.SharpV { + p.WriteString(f.Type().String()) + if f.IsNil() { + p.WriteString(nilParenString) + return + } + p.WriteByte('{') + } else { + p.WriteString(mapString) + } + keys := f.MapKeys() + for i, key := range keys { + if i > 0 { + if p.fmt.SharpV { + p.WriteString(commaSpaceString) + } else { + p.WriteByte(' ') + } + } + p.printValue(key, verb, depth+1) + p.WriteByte(':') + p.printValue(f.MapIndex(key), verb, depth+1) + } + if p.fmt.SharpV { + p.WriteByte('}') + } else { + p.WriteByte(']') + } + case reflect.Struct: + if p.fmt.SharpV { + p.WriteString(f.Type().String()) + } + p.WriteByte('{') + for i := 0; i < f.NumField(); i++ { + if i > 0 { + if p.fmt.SharpV { + p.WriteString(commaSpaceString) + } else { + p.WriteByte(' ') + } + } + if p.fmt.PlusV || p.fmt.SharpV { + if name := f.Type().Field(i).Name; name != "" { + p.WriteString(name) + p.WriteByte(':') + } + } + p.printValue(getField(f, i), verb, depth+1) + } + p.WriteByte('}') + case reflect.Interface: + value := f.Elem() + if !value.IsValid() { + if p.fmt.SharpV { + p.WriteString(f.Type().String()) + p.WriteString(nilParenString) + } else { + p.WriteString(nilAngleString) + } + } else { + p.printValue(value, verb, depth+1) + } + case reflect.Array, reflect.Slice: + switch verb { + case 's', 'q', 'x', 'X': + // Handle byte and uint8 slices and arrays special for the above verbs. + t := f.Type() + if t.Elem().Kind() == reflect.Uint8 { + var bytes []byte + if f.Kind() == reflect.Slice { + bytes = f.Bytes() + } else if f.CanAddr() { + bytes = f.Slice(0, f.Len()).Bytes() + } else { + // We have an array, but we cannot Slice() a non-addressable array, + // so we build a slice by hand. This is a rare case but it would be nice + // if reflection could help a little more. + bytes = make([]byte, f.Len()) + for i := range bytes { + bytes[i] = byte(f.Index(i).Uint()) + } + } + p.fmtBytes(bytes, verb, t.String()) + return + } + } + if p.fmt.SharpV { + p.WriteString(f.Type().String()) + if f.Kind() == reflect.Slice && f.IsNil() { + p.WriteString(nilParenString) + return + } + p.WriteByte('{') + for i := 0; i < f.Len(); i++ { + if i > 0 { + p.WriteString(commaSpaceString) + } + p.printValue(f.Index(i), verb, depth+1) + } + p.WriteByte('}') + } else { + p.WriteByte('[') + for i := 0; i < f.Len(); i++ { + if i > 0 { + p.WriteByte(' ') + } + p.printValue(f.Index(i), verb, depth+1) + } + p.WriteByte(']') + } + case reflect.Ptr: + // pointer to array or slice or struct? ok at top level + // but not embedded (avoid loops) + if depth == 0 && f.Pointer() != 0 { + switch a := f.Elem(); a.Kind() { + case reflect.Array, reflect.Slice, reflect.Struct, reflect.Map: + p.WriteByte('&') + p.printValue(a, verb, depth+1) + return + } + } + fallthrough + case reflect.Chan, reflect.Func, reflect.UnsafePointer: + p.fmtPointer(f, verb) + default: + p.unknownType(f) + } +} + +func (p *printer) badArgNum(verb rune) { + p.WriteString(percentBangString) + p.WriteRune(verb) + p.WriteString(badIndexString) +} + +func (p *printer) missingArg(verb rune) { + p.WriteString(percentBangString) + p.WriteRune(verb) + p.WriteString(missingString) +} + +func (p *printer) doPrintf(fmt string) { + for p.fmt.Parser.SetFormat(fmt); p.fmt.Scan(); { + switch p.fmt.Status { + case format.StatusText: + p.WriteString(p.fmt.Text()) + case format.StatusSubstitution: + p.printArg(p.Arg(p.fmt.ArgNum), p.fmt.Verb) + case format.StatusBadWidthSubstitution: + p.WriteString(badWidthString) + p.printArg(p.Arg(p.fmt.ArgNum), p.fmt.Verb) + case format.StatusBadPrecSubstitution: + p.WriteString(badPrecString) + p.printArg(p.Arg(p.fmt.ArgNum), p.fmt.Verb) + case format.StatusNoVerb: + p.WriteString(noVerbString) + case format.StatusBadArgNum: + p.badArgNum(p.fmt.Verb) + case format.StatusMissingArg: + p.missingArg(p.fmt.Verb) + default: + panic("unreachable") + } + } + + // Check for extra arguments, but only if there was at least one ordered + // argument. Note that this behavior is necessarily different from fmt: + // different variants of messages may opt to drop some or all of the + // arguments. + if !p.fmt.Reordered && p.fmt.ArgNum < len(p.fmt.Args) && p.fmt.ArgNum != 0 { + p.fmt.ClearFlags() + p.WriteString(extraString) + for i, arg := range p.fmt.Args[p.fmt.ArgNum:] { + if i > 0 { + p.WriteString(commaSpaceString) + } + if arg == nil { + p.WriteString(nilAngleString) + } else { + p.WriteString(reflect.TypeOf(arg).String()) + p.WriteString("=") + p.printArg(arg, 'v') + } + } + p.WriteByte(')') + } +} + +func (p *printer) doPrint(a []interface{}) { + prevString := false + for argNum, arg := range a { + isString := arg != nil && reflect.TypeOf(arg).Kind() == reflect.String + // Add a space between two non-string arguments. + if argNum > 0 && !isString && !prevString { + p.WriteByte(' ') + } + p.printArg(arg, 'v') + prevString = isString + } +} + +// doPrintln is like doPrint but always adds a space between arguments +// and a newline after the last argument. +func (p *printer) doPrintln(a []interface{}) { + for argNum, arg := range a { + if argNum > 0 { + p.WriteByte(' ') + } + p.printArg(arg, 'v') + } + p.WriteByte('\n') +} diff --git a/vendor/golang.org/x/text/number/doc.go b/vendor/golang.org/x/text/number/doc.go new file mode 100644 index 0000000..2ad8d43 --- /dev/null +++ b/vendor/golang.org/x/text/number/doc.go @@ -0,0 +1,28 @@ +// Copyright 2017 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. + +// Package number formats numbers according to the customs of different locales. +// +// The number formats of this package allow for greater formatting flexibility +// than passing values to message.Printf calls as is. It currently supports the +// builtin Go types and anything that implements the Convert interface +// (currently internal). +// +// p := message.NewPrinter(language.English) +// +// p.Printf("%v bottles of beer on the wall.", number.Decimal(1234)) +// // Prints: 1,234 bottles of beer on the wall. +// +// p.Printf("%v of gophers lose too much fur", number.Percent(0.12)) +// // Prints: 12% of gophers lose too much fur. +// +// p := message.NewPrinter(language.Dutch) +// +// p.Printf("There are %v bikes per household.", number.Decimal(1.2)) +// // Prints: Er zijn 1,2 fietsen per huishouden. +// +// +// The width and scale specified in the formatting directives override the +// configuration of the formatter. +package number diff --git a/vendor/golang.org/x/text/number/examples_test.go b/vendor/golang.org/x/text/number/examples_test.go new file mode 100644 index 0000000..fb9bcc9 --- /dev/null +++ b/vendor/golang.org/x/text/number/examples_test.go @@ -0,0 +1,28 @@ +// Copyright 2017 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. + +package number_test + +import ( + "golang.org/x/text/language" + "golang.org/x/text/message" + "golang.org/x/text/number" +) + +func ExampleMaxIntegerDigits() { + const year = 1999 + p := message.NewPrinter(language.English) + p.Println("Year:", number.Decimal(year, number.MaxIntegerDigits(2))) + + // Output: + // Year: 99 +} + +func ExampleIncrementString() { + p := message.NewPrinter(language.English) + + p.Println(number.Decimal(1.33, number.IncrementString("0.50"))) + + // Output: 1.50 +} diff --git a/vendor/golang.org/x/text/number/format.go b/vendor/golang.org/x/text/number/format.go new file mode 100644 index 0000000..1c3d41b --- /dev/null +++ b/vendor/golang.org/x/text/number/format.go @@ -0,0 +1,122 @@ +// Copyright 2017 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. + +package number + +import ( + "fmt" + "strings" + + "golang.org/x/text/feature/plural" + "golang.org/x/text/internal/format" + "golang.org/x/text/internal/number" + "golang.org/x/text/language" +) + +// A FormatFunc formates a number. +type FormatFunc func(x interface{}, opts ...Option) Formatter + +// NewFormat creates a FormatFunc based on another FormatFunc and new options. +// Use NewFormat to cash the creation of formatters. +func NewFormat(format FormatFunc, opts ...Option) FormatFunc { + o := *format(nil).options + n := len(o.options) + o.options = append(o.options[:n:n], opts...) + return func(x interface{}, opts ...Option) Formatter { + return newFormatter(&o, opts, x) + } +} + +type options struct { + verbs string + initFunc initFunc + options []Option + pluralFunc func(t language.Tag, scale int) (f plural.Form, n int) +} + +type optionFlag uint16 + +const ( + hasScale optionFlag = 1 << iota + hasPrecision + noSeparator + exact +) + +type initFunc func(f *number.Formatter, t language.Tag) + +func newFormatter(o *options, opts []Option, value interface{}) Formatter { + if len(opts) > 0 { + n := *o + n.options = opts + o = &n + } + return Formatter{o, value} +} + +func newOptions(verbs string, f initFunc) *options { + return &options{verbs: verbs, initFunc: f} +} + +type Formatter struct { + *options + value interface{} +} + +// Format implements format.Formatter. It is for internal use only for now. +func (f Formatter) Format(state format.State, verb rune) { + // TODO: consider implementing fmt.Formatter instead and using the following + // piece of code. This allows numbers to be rendered mostly as expected + // when using fmt. But it may get weird with the spellout options and we + // may need more of format.State over time. + // lang := language.Und + // if s, ok := state.(format.State); ok { + // lang = s.Language() + // } + + lang := state.Language() + if !strings.Contains(f.verbs, string(verb)) { + fmt.Fprintf(state, "%%!%s(%T=%v)", string(verb), f.value, f.value) + return + } + var p number.Formatter + f.initFunc(&p, lang) + for _, o := range f.options.options { + o(lang, &p) + } + if w, ok := state.Width(); ok { + p.FormatWidth = uint16(w) + } + if prec, ok := state.Precision(); ok { + switch verb { + case 'd': + p.SetScale(0) + case 'f': + p.SetScale(prec) + case 'e': + p.SetPrecision(prec + 1) + case 'g': + p.SetPrecision(prec) + } + } + var d number.Decimal + d.Convert(p.RoundingContext, f.value) + state.Write(p.Format(nil, &d)) +} + +// Digits returns information about which logical digits will be presented to +// the user. This information is relevant, for instance, to determine plural +// forms. +func (f Formatter) Digits(buf []byte, tag language.Tag, scale int) number.Digits { + var p number.Formatter + f.initFunc(&p, tag) + if scale >= 0 { + // TODO: this only works well for decimal numbers, which is generally + // fine. + p.SetScale(scale) + } + var d number.Decimal + d.Convert(p.RoundingContext, f.value) + return number.FormatDigits(&d, p.RoundingContext) +} diff --git a/vendor/golang.org/x/text/number/format_test.go b/vendor/golang.org/x/text/number/format_test.go new file mode 100644 index 0000000..0205f8d --- /dev/null +++ b/vendor/golang.org/x/text/number/format_test.go @@ -0,0 +1,112 @@ +// Copyright 2017 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. + +package number + +import ( + "fmt" + "testing" + + "golang.org/x/text/feature/plural" + "golang.org/x/text/language" + "golang.org/x/text/message" +) + +func TestWrongVerb(t *testing.T) { + testCases := []struct { + f Formatter + fmt string + want string + }{{ + f: Decimal(12), + fmt: "%e", + want: "%!e(int=12)", + }, { + f: Scientific(12), + fmt: "%f", + want: "%!f(int=12)", + }, { + f: Engineering(12), + fmt: "%f", + want: "%!f(int=12)", + }, { + f: Percent(12), + fmt: "%e", + want: "%!e(int=12)", + }} + for _, tc := range testCases { + t.Run("", func(t *testing.T) { + tag := language.Und + got := message.NewPrinter(tag).Sprintf(tc.fmt, tc.f) + if got != tc.want { + t.Errorf("got %q; want %q", got, tc.want) + } + }) + } +} + +func TestDigits(t *testing.T) { + testCases := []struct { + f Formatter + scale int + want string + }{{ + f: Decimal(3), + scale: 0, + want: "digits:[3] exp:1 comma:0 end:1", + }, { + f: Decimal(3.1), + scale: 0, + want: "digits:[3] exp:1 comma:0 end:1", + }, { + f: Scientific(3.1), + scale: 0, + want: "digits:[3] exp:1 comma:1 end:1", + }, { + f: Scientific(3.1), + scale: 3, + want: "digits:[3 1] exp:1 comma:1 end:4", + }} + for _, tc := range testCases { + t.Run("", func(t *testing.T) { + d := tc.f.Digits(nil, language.Croatian, tc.scale) + got := fmt.Sprintf("digits:%d exp:%d comma:%d end:%d", d.Digits, d.Exp, d.Comma, d.End) + if got != tc.want { + t.Errorf("got %v; want %v", got, tc.want) + } + }) + } +} + +func TestPluralIntegration(t *testing.T) { + testCases := []struct { + f Formatter + want string + }{{ + f: Decimal(1), + want: "one: 1", + }, { + f: Decimal(5), + want: "other: 5", + }} + for _, tc := range testCases { + t.Run("", func(t *testing.T) { + message.Set(language.English, "num %f", plural.Selectf(1, "%f", + "one", "one: %f", + "other", "other: %f")) + + p := message.NewPrinter(language.English) + + // Indirect the call to p.Sprintf through the variable f + // to avoid Go tip failing a vet check. + // TODO: remove once vet check has been fixed. See Issue #22936. + f := p.Sprintf + got := f("num %f", tc.f) + + if got != tc.want { + t.Errorf("got %q; want %q", got, tc.want) + } + }) + } +} diff --git a/vendor/golang.org/x/text/number/number.go b/vendor/golang.org/x/text/number/number.go new file mode 100644 index 0000000..f5ca93b --- /dev/null +++ b/vendor/golang.org/x/text/number/number.go @@ -0,0 +1,77 @@ +// Copyright 2017 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. + +package number + +// TODO: +// p.Printf("The gauge was at %v.", number.Spell(number.Percent(23))) +// // Prints: The gauge was at twenty-three percent. +// +// p.Printf("From here to %v!", number.Spell(math.Inf())) +// // Prints: From here to infinity! +// + +import ( + "golang.org/x/text/internal/number" +) + +const ( + decimalVerbs = "vfgd" + scientificVerbs = "veg" +) + +// Decimal formats a number as a floating point decimal. +func Decimal(x interface{}, opts ...Option) Formatter { + return newFormatter(decimalOptions, opts, x) +} + +var decimalOptions = newOptions(decimalVerbs, (*number.Formatter).InitDecimal) + +// Scientific formats a number in scientific format. +func Scientific(x interface{}, opts ...Option) Formatter { + return newFormatter(scientificOptions, opts, x) +} + +var scientificOptions = newOptions(scientificVerbs, (*number.Formatter).InitScientific) + +// Engineering formats a number using engineering notation, which is like +// scientific notation, but with the exponent normalized to multiples of 3. +func Engineering(x interface{}, opts ...Option) Formatter { + return newFormatter(engineeringOptions, opts, x) +} + +var engineeringOptions = newOptions(scientificVerbs, (*number.Formatter).InitEngineering) + +// Percent formats a number as a percentage. A value of 1.0 means 100%. +func Percent(x interface{}, opts ...Option) Formatter { + return newFormatter(percentOptions, opts, x) +} + +var percentOptions = newOptions(decimalVerbs, (*number.Formatter).InitPercent) + +// PerMille formats a number as a per mille indication. A value of 1.0 means +// 1000‰. +func PerMille(x interface{}, opts ...Option) Formatter { + return newFormatter(perMilleOptions, opts, x) +} + +var perMilleOptions = newOptions(decimalVerbs, (*number.Formatter).InitPerMille) + +// TODO: +// - Shortest: akin to verb 'g' of 'G' +// +// TODO: RBNF forms: +// - Compact: 1M 3.5T +// - CompactBinary: 1Mi 3.5Ti +// - Long: 1 million +// - Ordinal: +// - Roman: MCMIIXX +// - RomanSmall: mcmiixx +// - Text: numbers as it typically appears in running text, allowing +// language-specific choices for when to use numbers and when to use words. +// - Spell?: spelled-out number. Maybe just allow as an option? + +// NOTE: both spelled-out numbers and ordinals, to render correctly, need +// detailed linguistic information from the translated string into which they +// are substituted. We will need to implement that first. diff --git a/vendor/golang.org/x/text/number/number_test.go b/vendor/golang.org/x/text/number/number_test.go new file mode 100644 index 0000000..3dcac36 --- /dev/null +++ b/vendor/golang.org/x/text/number/number_test.go @@ -0,0 +1,190 @@ +// Copyright 2017 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. + +package number + +import ( + "strings" + "testing" + + "golang.org/x/text/language" + "golang.org/x/text/message" +) + +func TestFormatter(t *testing.T) { + overrides := map[string]string{ + "en": "*e#######0", + "nl": "*n#######0", + } + testCases := []struct { + desc string + tag string + f Formatter + want string + }{{ + desc: "decimal", + f: Decimal(3), + want: "3", + }, { + desc: "decimal fraction", + f: Decimal(0.123), + want: "0.123", + }, { + desc: "separators", + f: Decimal(1234.567), + want: "1,234.567", + }, { + desc: "no separators", + f: Decimal(1234.567, NoSeparator()), + want: "1234.567", + }, { + desc: "max integer", + f: Decimal(1973, MaxIntegerDigits(2)), + want: "73", + }, { + desc: "max integer overflow", + f: Decimal(1973, MaxIntegerDigits(1000)), + want: "1,973", + }, { + desc: "min integer", + f: Decimal(12, MinIntegerDigits(5)), + want: "00,012", + }, { + desc: "max fraction zero", + f: Decimal(0.12345, MaxFractionDigits(0)), + want: "0", + }, { + desc: "max fraction 2", + f: Decimal(0.12, MaxFractionDigits(2)), + want: "0.12", + }, { + desc: "min fraction 2", + f: Decimal(0.12, MaxFractionDigits(2)), + want: "0.12", + }, { + desc: "max fraction overflow", + f: Decimal(0.125, MaxFractionDigits(1e6)), + want: "0.125", + }, { + desc: "min integer overflow", + f: Decimal(0, MinIntegerDigits(1e6)), + want: strings.Repeat("000,", 255/3-1) + "000", + }, { + desc: "min fraction overflow", + f: Decimal(0, MinFractionDigits(1e6)), + want: "0." + strings.Repeat("0", 255), // TODO: fraction separators + }, { + desc: "format width", + f: Decimal(123, FormatWidth(10)), + want: " 123", + }, { + desc: "format width pad option before", + f: Decimal(123, Pad('*'), FormatWidth(10)), + want: "*******123", + }, { + desc: "format width pad option after", + f: Decimal(123, FormatWidth(10), Pad('*')), + want: "*******123", + }, { + desc: "format width illegal", + f: Decimal(123, FormatWidth(-1)), + want: "123", + }, { + desc: "increment", + f: Decimal(10.33, IncrementString("0.5")), + want: "10.5", + }, { + desc: "increment", + f: Decimal(10, IncrementString("ppp")), + want: "10", + }, { + desc: "increment and scale", + f: Decimal(10.33, IncrementString("0.5"), Scale(2)), + want: "10.50", + }, { + desc: "pattern overrides en", + tag: "en", + f: Decimal(101, PatternOverrides(overrides)), + want: "eeeee101", + }, { + desc: "pattern overrides nl", + tag: "nl", + f: Decimal(101, PatternOverrides(overrides)), + want: "nnnnn101", + }, { + desc: "pattern overrides de", + tag: "de", + f: Decimal(101, PatternOverrides(overrides)), + want: "101", + }, { + desc: "language selection", + tag: "bn", + f: Decimal(123456.78, Scale(2)), + want: "১,২৩,৪৫৬.৭৮", + }, { + desc: "scale", + f: Decimal(1234.567, Scale(2)), + want: "1,234.57", + }, { + desc: "scientific", + f: Scientific(3.00), + want: "3\u202f×\u202f10⁰", + }, { + desc: "scientific", + f: Scientific(1234), + want: "1.234\u202f×\u202f10³", + }, { + desc: "scientific", + f: Scientific(1234, Scale(2)), + want: "1.23\u202f×\u202f10³", + }, { + desc: "engineering", + f: Engineering(12345), + want: "12.345\u202f×\u202f10³", + }, { + desc: "engineering scale", + f: Engineering(12345, Scale(2)), + want: "12.34\u202f×\u202f10³", + }, { + desc: "engineering precision(4)", + f: Engineering(12345, Precision(4)), + want: "12.34\u202f×\u202f10³", + }, { + desc: "engineering precision(2)", + f: Engineering(1234.5, Precision(2)), + want: "1.2\u202f×\u202f10³", + }, { + desc: "percent", + f: Percent(0.12), + want: "12%", + }, { + desc: "permille", + f: PerMille(0.123), + want: "123‰", + }, { + desc: "percent rounding", + f: PerMille(0.12345), + want: "123‰", + }, { + desc: "percent fraction", + f: PerMille(0.12345, Scale(2)), + want: "123.45‰", + }, { + desc: "percent fraction", + f: PerMille(0.12344, Scale(1)), + want: "123.4‰", + }} + for _, tc := range testCases { + t.Run(tc.desc, func(t *testing.T) { + tag := language.Und + if tc.tag != "" { + tag = language.MustParse(tc.tag) + } + got := message.NewPrinter(tag).Sprint(tc.f) + if got != tc.want { + t.Errorf("got %q; want %q", got, tc.want) + } + }) + } +} diff --git a/vendor/golang.org/x/text/number/option.go b/vendor/golang.org/x/text/number/option.go new file mode 100644 index 0000000..de96f8e --- /dev/null +++ b/vendor/golang.org/x/text/number/option.go @@ -0,0 +1,177 @@ +// Copyright 2017 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. + +package number + +import ( + "fmt" + + "golang.org/x/text/internal/number" + "golang.org/x/text/language" +) + +// An Option configures a Formatter. +type Option option + +type option func(tag language.Tag, f *number.Formatter) + +// TODO: SpellOut requires support of the ICU RBNF format. +// func SpellOut() Option + +// NoSeparator causes a number to be displayed without grouping separators. +func NoSeparator() Option { + return func(t language.Tag, f *number.Formatter) { + f.GroupingSize = [2]uint8{} + } +} + +// MaxIntegerDigits limits the number of integer digits, eliminating the +// most significant digits. +func MaxIntegerDigits(max int) Option { + return func(t language.Tag, f *number.Formatter) { + if max >= 1<<8 { + max = (1 << 8) - 1 + } + f.MaxIntegerDigits = uint8(max) + } +} + +// MinIntegerDigits specifies the minimum number of integer digits, adding +// leading zeros when needed. +func MinIntegerDigits(min int) Option { + return func(t language.Tag, f *number.Formatter) { + if min >= 1<<8 { + min = (1 << 8) - 1 + } + f.MinIntegerDigits = uint8(min) + } +} + +// MaxFractionDigits specifies the maximum number of fractional digits. +func MaxFractionDigits(max int) Option { + return func(t language.Tag, f *number.Formatter) { + if max >= 1<<15 { + max = (1 << 15) - 1 + } + f.MaxFractionDigits = int16(max) + } +} + +// MinFractionDigits specifies the minimum number of fractional digits. +func MinFractionDigits(min int) Option { + return func(t language.Tag, f *number.Formatter) { + if min >= 1<<8 { + min = (1 << 8) - 1 + } + f.MinFractionDigits = uint8(min) + } +} + +// Precision sets the maximum number of significant digits. A negative value +// means exact. +func Precision(prec int) Option { + return func(t language.Tag, f *number.Formatter) { + f.SetPrecision(prec) + } +} + +// Scale simultaneously sets MinFractionDigits and MaxFractionDigits to the +// given value. +func Scale(decimals int) Option { + return func(t language.Tag, f *number.Formatter) { + f.SetScale(decimals) + } +} + +// IncrementString sets the incremental value to which numbers should be +// rounded. For instance: Increment("0.05") will cause 1.44 to round to 1.45. +// IncrementString also sets scale to the scale of the increment. +func IncrementString(decimal string) Option { + increment := 0 + scale := 0 + d := decimal + p := 0 + for ; p < len(d) && '0' <= d[p] && d[p] <= '9'; p++ { + increment *= 10 + increment += int(d[p]) - '0' + } + if p < len(d) && d[p] == '.' { + for p++; p < len(d) && '0' <= d[p] && d[p] <= '9'; p++ { + increment *= 10 + increment += int(d[p]) - '0' + scale++ + } + } + if p < len(d) { + increment = 0 + scale = 0 + } + return func(t language.Tag, f *number.Formatter) { + f.Increment = uint32(increment) + f.IncrementScale = uint8(scale) + f.SetScale(scale) + } +} + +func noop(language.Tag, *number.Formatter) {} + +// PatternOverrides allows users to specify alternative patterns for specific +// languages. The Pattern will be overridden for all languages in a subgroup as +// well. The function will panic for invalid input. It is best to create this +// option at startup time. +// PatternOverrides must be the first Option passed to a formatter. +func PatternOverrides(patterns map[string]string) Option { + // TODO: make it so that it does not have to be the first option. + // TODO: use -x-nochild to indicate it does not override child tags. + m := map[language.Tag]*number.Pattern{} + for k, v := range patterns { + tag := language.MustParse(k) + p, err := number.ParsePattern(v) + if err != nil { + panic(fmt.Errorf("number: PatternOverrides: %v", err)) + } + m[tag] = p + } + return func(t language.Tag, f *number.Formatter) { + // TODO: Use language grouping relation instead of parent relation. + // TODO: Should parent implement the grouping relation? + for lang := t; ; lang = t.Parent() { + if p, ok := m[lang]; ok { + f.Pattern = *p + break + } + if lang == language.Und { + break + } + } + } +} + +// FormatWidth sets the total format width. +func FormatWidth(n int) Option { + if n <= 0 { + return noop + } + return func(t language.Tag, f *number.Formatter) { + f.FormatWidth = uint16(n) + if f.PadRune == 0 { + f.PadRune = ' ' + } + } +} + +// Pad sets the rune to be used for filling up to the format width. +func Pad(r rune) Option { + return func(t language.Tag, f *number.Formatter) { + f.PadRune = r + } +} + +// TODO: +// - FormatPosition (using type aliasing?) +// - Multiplier: find a better way to represent and figure out what to do +// with clashes with percent/permille. +// - NumberingSystem(nu string): not accessable in number.Info now. Also, should +// this be keyed by language or generic? +// - SymbolOverrides(symbols map[string]map[number.SymbolType]string) Option diff --git a/vendor/golang.org/x/text/secure/bidirule/bidirule.go b/vendor/golang.org/x/text/secure/bidirule/bidirule.go index a7161bd..e2b70f7 100644 --- a/vendor/golang.org/x/text/secure/bidirule/bidirule.go +++ b/vendor/golang.org/x/text/secure/bidirule/bidirule.go @@ -155,6 +155,7 @@ func DirectionString(s string) bidi.Direction { e, sz := bidi.LookupString(s[i:]) if sz == 0 { i++ + continue } c := e.Class() if c == bidi.R || c == bidi.AL || c == bidi.AN { @@ -202,13 +203,6 @@ func (t *Transformer) isRTL() bool { return t.seen&isRTL != 0 } -func (t *Transformer) isFinal() bool { - if !t.isRTL() { - return true - } - return t.state == ruleLTRFinal || t.state == ruleRTLFinal || t.state == ruleInitial -} - // Reset implements transform.Transformer. func (t *Transformer) Reset() { *t = Transformer{} } diff --git a/vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0.go b/vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0.go new file mode 100644 index 0000000..e4c6228 --- /dev/null +++ b/vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0.go @@ -0,0 +1,11 @@ +// Copyright 2016 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 go1.10 + +package bidirule + +func (t *Transformer) isFinal() bool { + return t.state == ruleLTRFinal || t.state == ruleRTLFinal || t.state == ruleInitial +} diff --git a/vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0_test.go b/vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0_test.go new file mode 100644 index 0000000..06ec5f5 --- /dev/null +++ b/vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0_test.go @@ -0,0 +1,694 @@ +// Copyright 2016 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 go1.10 + +package bidirule + +import ( + "golang.org/x/text/transform" + "golang.org/x/text/unicode/bidi" +) + +var testCases = [][]ruleTest{ + // Go-specific rules. + // Invalid UTF-8 is invalid. + 0: []ruleTest{{ + in: "", + dir: bidi.LeftToRight, + }, { + in: "\x80", + dir: bidi.LeftToRight, + err: ErrInvalid, + n: 0, + }, { + in: "\xcc", + dir: bidi.LeftToRight, + err: ErrInvalid, + n: 0, + }, { + in: "abc\x80", + dir: bidi.LeftToRight, + err: ErrInvalid, + n: 3, + }, { + in: "abc\xcc", + dir: bidi.LeftToRight, + err: ErrInvalid, + n: 3, + }, { + in: "abc\xccdef", + dir: bidi.LeftToRight, + err: ErrInvalid, + n: 3, + }, { + in: "\xccdef", + dir: bidi.LeftToRight, + err: ErrInvalid, + n: 0, + }, { + in: strR + "\x80", + dir: bidi.RightToLeft, + err: ErrInvalid, + n: len(strR), + }, { + in: strR + "\xcc", + dir: bidi.RightToLeft, + err: ErrInvalid, + n: len(strR), + }, { + in: strAL + "\xcc" + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: len(strAL), + }, { + in: "\xcc" + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 0, + }}, + + // Rule 2.1: The first character must be a character with Bidi property L, + // R, or AL. If it has the R or AL property, it is an RTL label; if it has + // the L property, it is an LTR label. + 1: []ruleTest{{ + in: strL, + dir: bidi.LeftToRight, + }, { + in: strR, + dir: bidi.RightToLeft, + }, { + in: strAL, + dir: bidi.RightToLeft, + }, { + in: strAN, + dir: bidi.RightToLeft, + err: ErrInvalid, + }, { + in: strEN, + dir: bidi.LeftToRight, + err: ErrInvalid, + n: len(strEN), + }, { + in: strES, + dir: bidi.LeftToRight, + err: ErrInvalid, + n: len(strES), + }, { + in: strET, + dir: bidi.LeftToRight, + err: ErrInvalid, + n: len(strET), + }, { + in: strCS, + dir: bidi.LeftToRight, + err: ErrInvalid, + n: len(strCS), + }, { + in: strNSM, + dir: bidi.LeftToRight, + err: ErrInvalid, + n: len(strNSM), + }, { + in: strBN, + dir: bidi.LeftToRight, + err: ErrInvalid, + n: len(strBN), + }, { + in: strB, + dir: bidi.LeftToRight, + err: ErrInvalid, + n: len(strB), + }, { + in: strS, + dir: bidi.LeftToRight, + err: ErrInvalid, + n: len(strS), + }, { + in: strWS, + dir: bidi.LeftToRight, + err: ErrInvalid, + n: len(strWS), + }, { + in: strON, + dir: bidi.LeftToRight, + err: ErrInvalid, + n: len(strON), + }, { + in: strEN + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 3, + }, { + in: strES + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 2, + }, { + in: strET + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 1, + }, { + in: strCS + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 1, + }, { + in: strNSM + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 2, + }, { + in: strBN + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 3, + }, { + in: strB + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 3, + }, { + in: strS + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 1, + }, { + in: strWS + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 1, + }, { + in: strON + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 1, + }}, + + // Rule 2.2: In an RTL label, only characters with the Bidi properties R, + // AL, AN, EN, ES, CS, ET, ON, BN, or NSM are allowed. + 2: []ruleTest{{ + in: strR + strR + strAL, + dir: bidi.RightToLeft, + }, { + in: strR + strAL + strR, + dir: bidi.RightToLeft, + }, { + in: strR + strAN + strAL, + dir: bidi.RightToLeft, + }, { + in: strR + strEN + strR, + dir: bidi.RightToLeft, + }, { + in: strR + strES + strR, + dir: bidi.RightToLeft, + }, { + in: strR + strCS + strR, + dir: bidi.RightToLeft, + }, { + in: strR + strET + strAL, + dir: bidi.RightToLeft, + }, { + in: strR + strON + strR, + dir: bidi.RightToLeft, + }, { + in: strR + strBN + strR, + dir: bidi.RightToLeft, + }, { + in: strR + strNSM + strAL, + dir: bidi.RightToLeft, + }, { + in: strR + strL + strR, + dir: bidi.RightToLeft, + n: len(strR), + err: ErrInvalid, + }, { + in: strR + strB + strR, + dir: bidi.RightToLeft, + n: len(strR), + err: ErrInvalid, + }, { + in: strR + strS + strAL, + dir: bidi.RightToLeft, + n: len(strR), + err: ErrInvalid, + }, { + in: strR + strWS + strAL, + dir: bidi.RightToLeft, + n: len(strR), + err: ErrInvalid, + }, { + in: strAL + strR + strAL, + dir: bidi.RightToLeft, + }, { + in: strAL + strAL + strR, + dir: bidi.RightToLeft, + }, { + in: strAL + strAN + strAL, + dir: bidi.RightToLeft, + }, { + in: strAL + strEN + strR, + dir: bidi.RightToLeft, + }, { + in: strAL + strES + strR, + dir: bidi.RightToLeft, + }, { + in: strAL + strCS + strR, + dir: bidi.RightToLeft, + }, { + in: strAL + strET + strAL, + dir: bidi.RightToLeft, + }, { + in: strAL + strON + strR, + dir: bidi.RightToLeft, + }, { + in: strAL + strBN + strR, + dir: bidi.RightToLeft, + }, { + in: strAL + strNSM + strAL, + dir: bidi.RightToLeft, + }, { + in: strAL + strL + strR, + dir: bidi.RightToLeft, + n: len(strAL), + err: ErrInvalid, + }, { + in: strAL + strB + strR, + dir: bidi.RightToLeft, + n: len(strAL), + err: ErrInvalid, + }, { + in: strAL + strS + strAL, + dir: bidi.RightToLeft, + n: len(strAL), + err: ErrInvalid, + }, { + in: strAL + strWS + strAL, + dir: bidi.RightToLeft, + n: len(strAL), + err: ErrInvalid, + }}, + + // Rule 2.3: In an RTL label, the end of the label must be a character with + // Bidi property R, AL, EN, or AN, followed by zero or more characters with + // Bidi property NSM. + 3: []ruleTest{{ + in: strR + strNSM, + dir: bidi.RightToLeft, + }, { + in: strR + strR, + dir: bidi.RightToLeft, + }, { + in: strR + strAL + strNSM, + dir: bidi.RightToLeft, + }, { + in: strR + strEN + strNSM + strNSM, + dir: bidi.RightToLeft, + }, { + in: strR + strAN, + dir: bidi.RightToLeft, + }, { + in: strR + strES + strNSM, + dir: bidi.RightToLeft, + n: len(strR + strES + strNSM), + err: ErrInvalid, + }, { + in: strR + strCS + strNSM + strNSM, + dir: bidi.RightToLeft, + n: len(strR + strCS + strNSM + strNSM), + err: ErrInvalid, + }, { + in: strR + strET, + dir: bidi.RightToLeft, + n: len(strR + strET), + err: ErrInvalid, + }, { + in: strR + strON + strNSM, + dir: bidi.RightToLeft, + n: len(strR + strON + strNSM), + err: ErrInvalid, + }, { + in: strR + strBN + strNSM + strNSM, + dir: bidi.RightToLeft, + n: len(strR + strBN + strNSM + strNSM), + err: ErrInvalid, + }, { + in: strR + strL + strNSM, + dir: bidi.RightToLeft, + n: len(strR), + err: ErrInvalid, + }, { + in: strR + strB + strNSM + strNSM, + dir: bidi.RightToLeft, + n: len(strR), + err: ErrInvalid, + }, { + in: strR + strS, + dir: bidi.RightToLeft, + n: len(strR), + err: ErrInvalid, + }, { + in: strR + strWS, + dir: bidi.RightToLeft, + n: len(strR), + err: ErrInvalid, + }, { + in: strAL + strNSM, + dir: bidi.RightToLeft, + }, { + in: strAL + strR, + dir: bidi.RightToLeft, + }, { + in: strAL + strAL + strNSM, + dir: bidi.RightToLeft, + }, { + in: strAL + strEN + strNSM + strNSM, + dir: bidi.RightToLeft, + }, { + in: strAL + strAN, + dir: bidi.RightToLeft, + }, { + in: strAL + strES + strNSM, + dir: bidi.RightToLeft, + n: len(strAL + strES + strNSM), + err: ErrInvalid, + }, { + in: strAL + strCS + strNSM + strNSM, + dir: bidi.RightToLeft, + n: len(strAL + strCS + strNSM + strNSM), + err: ErrInvalid, + }, { + in: strAL + strET, + dir: bidi.RightToLeft, + n: len(strAL + strET), + err: ErrInvalid, + }, { + in: strAL + strON + strNSM, + dir: bidi.RightToLeft, + n: len(strAL + strON + strNSM), + err: ErrInvalid, + }, { + in: strAL + strBN + strNSM + strNSM, + dir: bidi.RightToLeft, + n: len(strAL + strBN + strNSM + strNSM), + err: ErrInvalid, + }, { + in: strAL + strL + strNSM, + dir: bidi.RightToLeft, + n: len(strAL), + err: ErrInvalid, + }, { + in: strAL + strB + strNSM + strNSM, + dir: bidi.RightToLeft, + n: len(strAL), + err: ErrInvalid, + }, { + in: strAL + strS, + dir: bidi.RightToLeft, + n: len(strAL), + err: ErrInvalid, + }, { + in: strAL + strWS, + dir: bidi.RightToLeft, + n: len(strAL), + err: ErrInvalid, + }}, + + // Rule 2.4: In an RTL label, if an EN is present, no AN may be present, + // and vice versa. + 4: []ruleTest{{ + in: strR + strEN + strAN, + dir: bidi.RightToLeft, + n: len(strR + strEN), + err: ErrInvalid, + }, { + in: strR + strAN + strEN + strNSM, + dir: bidi.RightToLeft, + n: len(strR + strAN), + err: ErrInvalid, + }, { + in: strAL + strEN + strAN, + dir: bidi.RightToLeft, + n: len(strAL + strEN), + err: ErrInvalid, + }, { + in: strAL + strAN + strEN + strNSM, + dir: bidi.RightToLeft, + n: len(strAL + strAN), + err: ErrInvalid, + }}, + + // Rule 2.5: In an LTR label, only characters with the Bidi properties L, + // EN, ES, CS, ET, ON, BN, or NSM are allowed. + 5: []ruleTest{{ + in: strL + strL + strL, + dir: bidi.LeftToRight, + }, { + in: strL + strEN + strL, + dir: bidi.LeftToRight, + }, { + in: strL + strES + strL, + dir: bidi.LeftToRight, + }, { + in: strL + strCS + strL, + dir: bidi.LeftToRight, + }, { + in: strL + strET + strL, + dir: bidi.LeftToRight, + }, { + in: strL + strON + strL, + dir: bidi.LeftToRight, + }, { + in: strL + strBN + strL, + dir: bidi.LeftToRight, + }, { + in: strL + strNSM + strL, + dir: bidi.LeftToRight, + }, { + in: strL + strR + strL, + dir: bidi.RightToLeft, + n: len(strL), + err: ErrInvalid, + }, { + in: strL + strAL + strL, + dir: bidi.RightToLeft, + n: len(strL), + err: ErrInvalid, + }, { + in: strL + strAN + strL, + dir: bidi.RightToLeft, + n: len(strL), + err: ErrInvalid, + }, { + in: strL + strB + strL, + dir: bidi.LeftToRight, + n: len(strL + strB + strL), + err: ErrInvalid, + }, { + in: strL + strB + strL + strR, + dir: bidi.RightToLeft, + n: len(strL + strB + strL), + err: ErrInvalid, + }, { + in: strL + strS + strL, + dir: bidi.LeftToRight, + n: len(strL + strS + strL), + err: ErrInvalid, + }, { + in: strL + strS + strL + strR, + dir: bidi.RightToLeft, + n: len(strL + strS + strL), + err: ErrInvalid, + }, { + in: strL + strWS + strL, + dir: bidi.LeftToRight, + n: len(strL + strWS + strL), + err: ErrInvalid, + }, { + in: strL + strWS + strL + strR, + dir: bidi.RightToLeft, + n: len(strL + strWS + strL), + err: ErrInvalid, + }}, + + // Rule 2.6: In an LTR label, the end of the label must be a character with + // Bidi property L or EN, followed by zero or more characters with Bidi + // property NSM. + 6: []ruleTest{{ + in: strL, + dir: bidi.LeftToRight, + }, { + in: strL + strNSM, + dir: bidi.LeftToRight, + }, { + in: strL + strNSM + strNSM, + dir: bidi.LeftToRight, + }, { + in: strL + strEN, + dir: bidi.LeftToRight, + }, { + in: strL + strEN + strNSM, + dir: bidi.LeftToRight, + }, { + in: strL + strEN + strNSM + strNSM, + dir: bidi.LeftToRight, + }, { + in: strL + strES, + dir: bidi.LeftToRight, + n: len(strL + strES), + err: ErrInvalid, + }, { + in: strL + strES + strR, + dir: bidi.RightToLeft, + n: len(strL + strES), + err: ErrInvalid, + }, { + in: strL + strCS, + dir: bidi.LeftToRight, + n: len(strL + strCS), + err: ErrInvalid, + }, { + in: strL + strCS + strR, + dir: bidi.RightToLeft, + n: len(strL + strCS), + err: ErrInvalid, + }, { + in: strL + strET, + dir: bidi.LeftToRight, + n: len(strL + strET), + err: ErrInvalid, + }, { + in: strL + strET + strR, + dir: bidi.RightToLeft, + n: len(strL + strET), + err: ErrInvalid, + }, { + in: strL + strON, + dir: bidi.LeftToRight, + n: len(strL + strON), + err: ErrInvalid, + }, { + in: strL + strON + strR, + dir: bidi.RightToLeft, + n: len(strL + strON), + err: ErrInvalid, + }, { + in: strL + strBN, + dir: bidi.LeftToRight, + n: len(strL + strBN), + err: ErrInvalid, + }, { + in: strL + strBN + strR, + dir: bidi.RightToLeft, + n: len(strL + strBN), + err: ErrInvalid, + }, { + in: strL + strR, + dir: bidi.RightToLeft, + n: len(strL), + err: ErrInvalid, + }, { + in: strL + strAL, + dir: bidi.RightToLeft, + n: len(strL), + err: ErrInvalid, + }, { + in: strL + strAN, + dir: bidi.RightToLeft, + n: len(strL), + err: ErrInvalid, + }, { + in: strL + strB, + dir: bidi.LeftToRight, + n: len(strL + strB), + err: ErrInvalid, + }, { + in: strL + strB + strR, + dir: bidi.RightToLeft, + n: len(strL + strB), + err: ErrInvalid, + }, { + in: strL + strS, + dir: bidi.LeftToRight, + n: len(strL + strS), + err: ErrInvalid, + }, { + in: strL + strS + strR, + dir: bidi.RightToLeft, + n: len(strL + strS), + err: ErrInvalid, + }, { + in: strL + strWS, + dir: bidi.LeftToRight, + n: len(strL + strWS), + err: ErrInvalid, + }, { + in: strL + strWS + strR, + dir: bidi.RightToLeft, + n: len(strL + strWS), + err: ErrInvalid, + }}, + + // Incremental processing. + 9: []ruleTest{{ + in: "e\u0301", // é + dir: bidi.LeftToRight, + + pSrc: 2, + nSrc: 1, + err0: transform.ErrShortSrc, + }, { + in: "e\u1000f", // é + dir: bidi.LeftToRight, + + pSrc: 3, + nSrc: 1, + err0: transform.ErrShortSrc, + }, { + // Remain invalid once invalid. + in: strR + "ab", + dir: bidi.RightToLeft, + n: len(strR), + err: ErrInvalid, + + pSrc: len(strR) + 1, + nSrc: len(strR), + err0: ErrInvalid, + }, { + // Short destination + in: "abcdefghij", + dir: bidi.LeftToRight, + + pSrc: 10, + szDst: 5, + nSrc: 5, + err0: transform.ErrShortDst, + }, { + in: "\U000102f7", + dir: bidi.LeftToRight, + n: len("\U000102f7"), + err: ErrInvalid, + }, { + // Short destination splitting input rune + in: "e\u0301", + dir: bidi.LeftToRight, + + pSrc: 3, + szDst: 2, + nSrc: 1, + err0: transform.ErrShortDst, + }, { + // Unicode 10.0.0 IDNA test string. + in: "FAX\u2a77\U0001d186", + dir: bidi.LeftToRight, + n: len("FAX\u2a77\U0001d186"), + err: ErrInvalid, + }, { + in: "\x80\u0660", + dir: bidi.RightToLeft, + n: 0, + err: ErrInvalid, + }}, +} diff --git a/vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0.go b/vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0.go new file mode 100644 index 0000000..02b9e1e --- /dev/null +++ b/vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0.go @@ -0,0 +1,14 @@ +// Copyright 2016 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 !go1.10 + +package bidirule + +func (t *Transformer) isFinal() bool { + if !t.isRTL() { + return true + } + return t.state == ruleLTRFinal || t.state == ruleRTLFinal || t.state == ruleInitial +} diff --git a/vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0_test.go b/vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0_test.go new file mode 100644 index 0000000..008874e --- /dev/null +++ b/vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0_test.go @@ -0,0 +1,668 @@ +// Copyright 2016 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 !go1.10 + +package bidirule + +import ( + "golang.org/x/text/transform" + "golang.org/x/text/unicode/bidi" +) + +var testCases = [][]ruleTest{ + // Go-specific rules. + // Invalid UTF-8 is invalid. + 0: []ruleTest{{ + in: "", + dir: bidi.LeftToRight, + }, { + in: "\x80", + dir: bidi.LeftToRight, + err: ErrInvalid, + n: 0, + }, { + in: "\xcc", + dir: bidi.LeftToRight, + err: ErrInvalid, + n: 0, + }, { + in: "abc\x80", + dir: bidi.LeftToRight, + err: ErrInvalid, + n: 3, + }, { + in: "abc\xcc", + dir: bidi.LeftToRight, + err: ErrInvalid, + n: 3, + }, { + in: "abc\xccdef", + dir: bidi.LeftToRight, + err: ErrInvalid, + n: 3, + }, { + in: "\xccdef", + dir: bidi.LeftToRight, + err: ErrInvalid, + n: 0, + }, { + in: strR + "\x80", + dir: bidi.RightToLeft, + err: ErrInvalid, + n: len(strR), + }, { + in: strR + "\xcc", + dir: bidi.RightToLeft, + err: ErrInvalid, + n: len(strR), + }, { + in: strAL + "\xcc" + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: len(strAL), + }, { + in: "\xcc" + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 0, + }}, + + // Rule 2.1: The first character must be a character with Bidi property L, + // R, or AL. If it has the R or AL property, it is an RTL label; if it has + // the L property, it is an LTR label. + 1: []ruleTest{{ + in: strL, + dir: bidi.LeftToRight, + }, { + in: strR, + dir: bidi.RightToLeft, + }, { + in: strAL, + dir: bidi.RightToLeft, + }, { + in: strAN, + dir: bidi.RightToLeft, + err: ErrInvalid, + }, { + in: strEN, + dir: bidi.LeftToRight, + err: nil, // not an RTL string + }, { + in: strES, + dir: bidi.LeftToRight, + err: nil, // not an RTL string + }, { + in: strET, + dir: bidi.LeftToRight, + err: nil, // not an RTL string + }, { + in: strCS, + dir: bidi.LeftToRight, + err: nil, // not an RTL string + }, { + in: strNSM, + dir: bidi.LeftToRight, + err: nil, // not an RTL string + }, { + in: strBN, + dir: bidi.LeftToRight, + err: nil, // not an RTL string + }, { + in: strB, + dir: bidi.LeftToRight, + err: nil, // not an RTL string + }, { + in: strS, + dir: bidi.LeftToRight, + err: nil, // not an RTL string + }, { + in: strWS, + dir: bidi.LeftToRight, + err: nil, // not an RTL string + }, { + in: strON, + dir: bidi.LeftToRight, + err: nil, // not an RTL string + }, { + in: strEN + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 3, + }, { + in: strES + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 2, + }, { + in: strET + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 1, + }, { + in: strCS + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 1, + }, { + in: strNSM + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 2, + }, { + in: strBN + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 3, + }, { + in: strB + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 3, + }, { + in: strS + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 1, + }, { + in: strWS + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 1, + }, { + in: strON + strR, + dir: bidi.RightToLeft, + err: ErrInvalid, + n: 1, + }}, + + // Rule 2.2: In an RTL label, only characters with the Bidi properties R, + // AL, AN, EN, ES, CS, ET, ON, BN, or NSM are allowed. + 2: []ruleTest{{ + in: strR + strR + strAL, + dir: bidi.RightToLeft, + }, { + in: strR + strAL + strR, + dir: bidi.RightToLeft, + }, { + in: strR + strAN + strAL, + dir: bidi.RightToLeft, + }, { + in: strR + strEN + strR, + dir: bidi.RightToLeft, + }, { + in: strR + strES + strR, + dir: bidi.RightToLeft, + }, { + in: strR + strCS + strR, + dir: bidi.RightToLeft, + }, { + in: strR + strET + strAL, + dir: bidi.RightToLeft, + }, { + in: strR + strON + strR, + dir: bidi.RightToLeft, + }, { + in: strR + strBN + strR, + dir: bidi.RightToLeft, + }, { + in: strR + strNSM + strAL, + dir: bidi.RightToLeft, + }, { + in: strR + strL + strR, + dir: bidi.RightToLeft, + n: len(strR), + err: ErrInvalid, + }, { + in: strR + strB + strR, + dir: bidi.RightToLeft, + n: len(strR), + err: ErrInvalid, + }, { + in: strR + strS + strAL, + dir: bidi.RightToLeft, + n: len(strR), + err: ErrInvalid, + }, { + in: strR + strWS + strAL, + dir: bidi.RightToLeft, + n: len(strR), + err: ErrInvalid, + }, { + in: strAL + strR + strAL, + dir: bidi.RightToLeft, + }, { + in: strAL + strAL + strR, + dir: bidi.RightToLeft, + }, { + in: strAL + strAN + strAL, + dir: bidi.RightToLeft, + }, { + in: strAL + strEN + strR, + dir: bidi.RightToLeft, + }, { + in: strAL + strES + strR, + dir: bidi.RightToLeft, + }, { + in: strAL + strCS + strR, + dir: bidi.RightToLeft, + }, { + in: strAL + strET + strAL, + dir: bidi.RightToLeft, + }, { + in: strAL + strON + strR, + dir: bidi.RightToLeft, + }, { + in: strAL + strBN + strR, + dir: bidi.RightToLeft, + }, { + in: strAL + strNSM + strAL, + dir: bidi.RightToLeft, + }, { + in: strAL + strL + strR, + dir: bidi.RightToLeft, + n: len(strAL), + err: ErrInvalid, + }, { + in: strAL + strB + strR, + dir: bidi.RightToLeft, + n: len(strAL), + err: ErrInvalid, + }, { + in: strAL + strS + strAL, + dir: bidi.RightToLeft, + n: len(strAL), + err: ErrInvalid, + }, { + in: strAL + strWS + strAL, + dir: bidi.RightToLeft, + n: len(strAL), + err: ErrInvalid, + }}, + + // Rule 2.3: In an RTL label, the end of the label must be a character with + // Bidi property R, AL, EN, or AN, followed by zero or more characters with + // Bidi property NSM. + 3: []ruleTest{{ + in: strR + strNSM, + dir: bidi.RightToLeft, + }, { + in: strR + strR, + dir: bidi.RightToLeft, + }, { + in: strR + strAL + strNSM, + dir: bidi.RightToLeft, + }, { + in: strR + strEN + strNSM + strNSM, + dir: bidi.RightToLeft, + }, { + in: strR + strAN, + dir: bidi.RightToLeft, + }, { + in: strR + strES + strNSM, + dir: bidi.RightToLeft, + n: len(strR + strES + strNSM), + err: ErrInvalid, + }, { + in: strR + strCS + strNSM + strNSM, + dir: bidi.RightToLeft, + n: len(strR + strCS + strNSM + strNSM), + err: ErrInvalid, + }, { + in: strR + strET, + dir: bidi.RightToLeft, + n: len(strR + strET), + err: ErrInvalid, + }, { + in: strR + strON + strNSM, + dir: bidi.RightToLeft, + n: len(strR + strON + strNSM), + err: ErrInvalid, + }, { + in: strR + strBN + strNSM + strNSM, + dir: bidi.RightToLeft, + n: len(strR + strBN + strNSM + strNSM), + err: ErrInvalid, + }, { + in: strR + strL + strNSM, + dir: bidi.RightToLeft, + n: len(strR), + err: ErrInvalid, + }, { + in: strR + strB + strNSM + strNSM, + dir: bidi.RightToLeft, + n: len(strR), + err: ErrInvalid, + }, { + in: strR + strS, + dir: bidi.RightToLeft, + n: len(strR), + err: ErrInvalid, + }, { + in: strR + strWS, + dir: bidi.RightToLeft, + n: len(strR), + err: ErrInvalid, + }, { + in: strAL + strNSM, + dir: bidi.RightToLeft, + }, { + in: strAL + strR, + dir: bidi.RightToLeft, + }, { + in: strAL + strAL + strNSM, + dir: bidi.RightToLeft, + }, { + in: strAL + strEN + strNSM + strNSM, + dir: bidi.RightToLeft, + }, { + in: strAL + strAN, + dir: bidi.RightToLeft, + }, { + in: strAL + strES + strNSM, + dir: bidi.RightToLeft, + n: len(strAL + strES + strNSM), + err: ErrInvalid, + }, { + in: strAL + strCS + strNSM + strNSM, + dir: bidi.RightToLeft, + n: len(strAL + strCS + strNSM + strNSM), + err: ErrInvalid, + }, { + in: strAL + strET, + dir: bidi.RightToLeft, + n: len(strAL + strET), + err: ErrInvalid, + }, { + in: strAL + strON + strNSM, + dir: bidi.RightToLeft, + n: len(strAL + strON + strNSM), + err: ErrInvalid, + }, { + in: strAL + strBN + strNSM + strNSM, + dir: bidi.RightToLeft, + n: len(strAL + strBN + strNSM + strNSM), + err: ErrInvalid, + }, { + in: strAL + strL + strNSM, + dir: bidi.RightToLeft, + n: len(strAL), + err: ErrInvalid, + }, { + in: strAL + strB + strNSM + strNSM, + dir: bidi.RightToLeft, + n: len(strAL), + err: ErrInvalid, + }, { + in: strAL + strS, + dir: bidi.RightToLeft, + n: len(strAL), + err: ErrInvalid, + }, { + in: strAL + strWS, + dir: bidi.RightToLeft, + n: len(strAL), + err: ErrInvalid, + }}, + + // Rule 2.4: In an RTL label, if an EN is present, no AN may be present, + // and vice versa. + 4: []ruleTest{{ + in: strR + strEN + strAN, + dir: bidi.RightToLeft, + n: len(strR + strEN), + err: ErrInvalid, + }, { + in: strR + strAN + strEN + strNSM, + dir: bidi.RightToLeft, + n: len(strR + strAN), + err: ErrInvalid, + }, { + in: strAL + strEN + strAN, + dir: bidi.RightToLeft, + n: len(strAL + strEN), + err: ErrInvalid, + }, { + in: strAL + strAN + strEN + strNSM, + dir: bidi.RightToLeft, + n: len(strAL + strAN), + err: ErrInvalid, + }}, + + // Rule 2.5: In an LTR label, only characters with the Bidi properties L, + // EN, ES, CS, ET, ON, BN, or NSM are allowed. + 5: []ruleTest{{ + in: strL + strL + strL, + dir: bidi.LeftToRight, + }, { + in: strL + strEN + strL, + dir: bidi.LeftToRight, + }, { + in: strL + strES + strL, + dir: bidi.LeftToRight, + }, { + in: strL + strCS + strL, + dir: bidi.LeftToRight, + }, { + in: strL + strET + strL, + dir: bidi.LeftToRight, + }, { + in: strL + strON + strL, + dir: bidi.LeftToRight, + }, { + in: strL + strBN + strL, + dir: bidi.LeftToRight, + }, { + in: strL + strNSM + strL, + dir: bidi.LeftToRight, + }, { + in: strL + strR + strL, + dir: bidi.RightToLeft, + n: len(strL), + err: ErrInvalid, + }, { + in: strL + strAL + strL, + dir: bidi.RightToLeft, + n: len(strL), + err: ErrInvalid, + }, { + in: strL + strAN + strL, + dir: bidi.RightToLeft, + n: len(strL), + err: ErrInvalid, + }, { + in: strL + strB + strL, + dir: bidi.LeftToRight, + n: len(strL + strAN + strL), + err: nil, + }, { + in: strL + strB + strL + strR, + dir: bidi.RightToLeft, + n: len(strL + strB + strL), + err: ErrInvalid, + }, { + in: strL + strS + strL, + dir: bidi.LeftToRight, + n: len(strL + strS + strL), + err: nil, + }, { + in: strL + strS + strL + strR, + dir: bidi.RightToLeft, + n: len(strL + strS + strL), + err: ErrInvalid, + }, { + in: strL + strWS + strL, + dir: bidi.LeftToRight, + n: len(strL + strWS + strL), + err: nil, + }, { + in: strL + strWS + strL + strR, + dir: bidi.RightToLeft, + n: len(strL + strWS + strL), + err: ErrInvalid, + }}, + + // Rule 2.6: In an LTR label, the end of the label must be a character with + // Bidi property L or EN, followed by zero or more characters with Bidi + // property NSM. + 6: []ruleTest{{ + in: strL, + dir: bidi.LeftToRight, + }, { + in: strL + strNSM, + dir: bidi.LeftToRight, + }, { + in: strL + strNSM + strNSM, + dir: bidi.LeftToRight, + }, { + in: strL + strEN, + dir: bidi.LeftToRight, + }, { + in: strL + strEN + strNSM, + dir: bidi.LeftToRight, + }, { + in: strL + strEN + strNSM + strNSM, + dir: bidi.LeftToRight, + }, { + in: strL + strES, + dir: bidi.LeftToRight, + n: len(strL + strES), + err: nil, + }, { + in: strL + strES + strR, + dir: bidi.RightToLeft, + n: len(strL + strES), + err: ErrInvalid, + }, { + in: strL + strCS, + dir: bidi.LeftToRight, + n: len(strL + strCS), + err: nil, + }, { + in: strL + strCS + strR, + dir: bidi.RightToLeft, + n: len(strL + strCS), + err: ErrInvalid, + }, { + in: strL + strET, + dir: bidi.LeftToRight, + n: len(strL + strET), + err: nil, + }, { + in: strL + strET + strR, + dir: bidi.RightToLeft, + n: len(strL + strET), + err: ErrInvalid, + }, { + in: strL + strON, + dir: bidi.LeftToRight, + n: len(strL + strON), + err: nil, + }, { + in: strL + strON + strR, + dir: bidi.RightToLeft, + n: len(strL + strON), + err: ErrInvalid, + }, { + in: strL + strBN, + dir: bidi.LeftToRight, + n: len(strL + strBN), + err: nil, + }, { + in: strL + strBN + strR, + dir: bidi.RightToLeft, + n: len(strL + strBN), + err: ErrInvalid, + }, { + in: strL + strR, + dir: bidi.RightToLeft, + n: len(strL), + err: ErrInvalid, + }, { + in: strL + strAL, + dir: bidi.RightToLeft, + n: len(strL), + err: ErrInvalid, + }, { + in: strL + strAN, + dir: bidi.RightToLeft, + n: len(strL), + err: ErrInvalid, + }, { + in: strL + strB, + dir: bidi.LeftToRight, + n: len(strL + strB), + err: nil, + }, { + in: strL + strB + strR, + dir: bidi.RightToLeft, + n: len(strL + strB), + err: ErrInvalid, + }, { + in: strL + strB, + dir: bidi.LeftToRight, + n: len(strL + strB), + err: nil, + }, { + in: strL + strB + strR, + dir: bidi.RightToLeft, + n: len(strL + strB), + err: ErrInvalid, + }, { + in: strL + strB, + dir: bidi.LeftToRight, + n: len(strL + strB), + err: nil, + }, { + in: strL + strB + strR, + dir: bidi.RightToLeft, + n: len(strL + strB), + err: ErrInvalid, + }}, + + // Incremental processing. + 9: []ruleTest{{ + in: "e\u0301", // é + dir: bidi.LeftToRight, + + pSrc: 2, + nSrc: 1, + err0: transform.ErrShortSrc, + }, { + in: "e\u1000f", // é + dir: bidi.LeftToRight, + + pSrc: 3, + nSrc: 1, + err0: transform.ErrShortSrc, + }, { + // Remain invalid once invalid. + in: strR + "ab", + dir: bidi.RightToLeft, + n: len(strR), + err: ErrInvalid, + + pSrc: len(strR) + 1, + nSrc: len(strR), + err0: ErrInvalid, + }, { + // Short destination + in: "abcdefghij", + dir: bidi.LeftToRight, + + pSrc: 10, + szDst: 5, + nSrc: 5, + err0: transform.ErrShortDst, + }, { + // Short destination splitting input rune + in: "e\u0301", + dir: bidi.LeftToRight, + + pSrc: 3, + szDst: 2, + nSrc: 1, + err0: transform.ErrShortDst, + }}, +} diff --git a/vendor/golang.org/x/text/secure/bidirule/bidirule_test.go b/vendor/golang.org/x/text/secure/bidirule/bidirule_test.go index 0794b3d..e8fde33 100644 --- a/vendor/golang.org/x/text/secure/bidirule/bidirule_test.go +++ b/vendor/golang.org/x/text/secure/bidirule/bidirule_test.go @@ -9,7 +9,6 @@ import ( "testing" "golang.org/x/text/internal/testtext" - "golang.org/x/text/transform" "golang.org/x/text/unicode/bidi" ) @@ -43,662 +42,6 @@ type ruleTest struct { err0 error // error after first run } -var testCases = [][]ruleTest{ - // Go-specific rules. - // Invalid UTF-8 is invalid. - 0: []ruleTest{{ - in: "", - dir: bidi.LeftToRight, - }, { - in: "\x80", - dir: bidi.LeftToRight, - err: ErrInvalid, - n: 0, - }, { - in: "\xcc", - dir: bidi.LeftToRight, - err: ErrInvalid, - n: 0, - }, { - in: "abc\x80", - dir: bidi.LeftToRight, - err: ErrInvalid, - n: 3, - }, { - in: "abc\xcc", - dir: bidi.LeftToRight, - err: ErrInvalid, - n: 3, - }, { - in: "abc\xccdef", - dir: bidi.LeftToRight, - err: ErrInvalid, - n: 3, - }, { - in: "\xccdef", - dir: bidi.LeftToRight, - err: ErrInvalid, - n: 0, - }, { - in: strR + "\x80", - dir: bidi.RightToLeft, - err: ErrInvalid, - n: len(strR), - }, { - in: strR + "\xcc", - dir: bidi.RightToLeft, - err: ErrInvalid, - n: len(strR), - }, { - in: strAL + "\xcc" + strR, - dir: bidi.RightToLeft, - err: ErrInvalid, - n: len(strAL), - }, { - in: "\xcc" + strR, - dir: bidi.RightToLeft, - err: ErrInvalid, - n: 0, - }}, - - // Rule 2.1: The first character must be a character with Bidi property L, - // R, or AL. If it has the R or AL property, it is an RTL label; if it has - // the L property, it is an LTR label. - 1: []ruleTest{{ - in: strL, - dir: bidi.LeftToRight, - }, { - in: strR, - dir: bidi.RightToLeft, - }, { - in: strAL, - dir: bidi.RightToLeft, - }, { - in: strAN, - dir: bidi.RightToLeft, - err: ErrInvalid, - }, { - in: strEN, - dir: bidi.LeftToRight, - err: nil, // not an RTL string - }, { - in: strES, - dir: bidi.LeftToRight, - err: nil, // not an RTL string - }, { - in: strET, - dir: bidi.LeftToRight, - err: nil, // not an RTL string - }, { - in: strCS, - dir: bidi.LeftToRight, - err: nil, // not an RTL string - }, { - in: strNSM, - dir: bidi.LeftToRight, - err: nil, // not an RTL string - }, { - in: strBN, - dir: bidi.LeftToRight, - err: nil, // not an RTL string - }, { - in: strB, - dir: bidi.LeftToRight, - err: nil, // not an RTL string - }, { - in: strS, - dir: bidi.LeftToRight, - err: nil, // not an RTL string - }, { - in: strWS, - dir: bidi.LeftToRight, - err: nil, // not an RTL string - }, { - in: strON, - dir: bidi.LeftToRight, - err: nil, // not an RTL string - }, { - in: strEN + strR, - dir: bidi.RightToLeft, - err: ErrInvalid, - n: 3, - }, { - in: strES + strR, - dir: bidi.RightToLeft, - err: ErrInvalid, - n: 2, - }, { - in: strET + strR, - dir: bidi.RightToLeft, - err: ErrInvalid, - n: 1, - }, { - in: strCS + strR, - dir: bidi.RightToLeft, - err: ErrInvalid, - n: 1, - }, { - in: strNSM + strR, - dir: bidi.RightToLeft, - err: ErrInvalid, - n: 2, - }, { - in: strBN + strR, - dir: bidi.RightToLeft, - err: ErrInvalid, - n: 3, - }, { - in: strB + strR, - dir: bidi.RightToLeft, - err: ErrInvalid, - n: 3, - }, { - in: strS + strR, - dir: bidi.RightToLeft, - err: ErrInvalid, - n: 1, - }, { - in: strWS + strR, - dir: bidi.RightToLeft, - err: ErrInvalid, - n: 1, - }, { - in: strON + strR, - dir: bidi.RightToLeft, - err: ErrInvalid, - n: 1, - }}, - - // Rule 2.2: In an RTL label, only characters with the Bidi properties R, - // AL, AN, EN, ES, CS, ET, ON, BN, or NSM are allowed. - 2: []ruleTest{{ - in: strR + strR + strAL, - dir: bidi.RightToLeft, - }, { - in: strR + strAL + strR, - dir: bidi.RightToLeft, - }, { - in: strR + strAN + strAL, - dir: bidi.RightToLeft, - }, { - in: strR + strEN + strR, - dir: bidi.RightToLeft, - }, { - in: strR + strES + strR, - dir: bidi.RightToLeft, - }, { - in: strR + strCS + strR, - dir: bidi.RightToLeft, - }, { - in: strR + strET + strAL, - dir: bidi.RightToLeft, - }, { - in: strR + strON + strR, - dir: bidi.RightToLeft, - }, { - in: strR + strBN + strR, - dir: bidi.RightToLeft, - }, { - in: strR + strNSM + strAL, - dir: bidi.RightToLeft, - }, { - in: strR + strL + strR, - dir: bidi.RightToLeft, - n: len(strR), - err: ErrInvalid, - }, { - in: strR + strB + strR, - dir: bidi.RightToLeft, - n: len(strR), - err: ErrInvalid, - }, { - in: strR + strS + strAL, - dir: bidi.RightToLeft, - n: len(strR), - err: ErrInvalid, - }, { - in: strR + strWS + strAL, - dir: bidi.RightToLeft, - n: len(strR), - err: ErrInvalid, - }, { - in: strAL + strR + strAL, - dir: bidi.RightToLeft, - }, { - in: strAL + strAL + strR, - dir: bidi.RightToLeft, - }, { - in: strAL + strAN + strAL, - dir: bidi.RightToLeft, - }, { - in: strAL + strEN + strR, - dir: bidi.RightToLeft, - }, { - in: strAL + strES + strR, - dir: bidi.RightToLeft, - }, { - in: strAL + strCS + strR, - dir: bidi.RightToLeft, - }, { - in: strAL + strET + strAL, - dir: bidi.RightToLeft, - }, { - in: strAL + strON + strR, - dir: bidi.RightToLeft, - }, { - in: strAL + strBN + strR, - dir: bidi.RightToLeft, - }, { - in: strAL + strNSM + strAL, - dir: bidi.RightToLeft, - }, { - in: strAL + strL + strR, - dir: bidi.RightToLeft, - n: len(strAL), - err: ErrInvalid, - }, { - in: strAL + strB + strR, - dir: bidi.RightToLeft, - n: len(strAL), - err: ErrInvalid, - }, { - in: strAL + strS + strAL, - dir: bidi.RightToLeft, - n: len(strAL), - err: ErrInvalid, - }, { - in: strAL + strWS + strAL, - dir: bidi.RightToLeft, - n: len(strAL), - err: ErrInvalid, - }}, - - // Rule 2.3: In an RTL label, the end of the label must be a character with - // Bidi property R, AL, EN, or AN, followed by zero or more characters with - // Bidi property NSM. - 3: []ruleTest{{ - in: strR + strNSM, - dir: bidi.RightToLeft, - }, { - in: strR + strR, - dir: bidi.RightToLeft, - }, { - in: strR + strAL + strNSM, - dir: bidi.RightToLeft, - }, { - in: strR + strEN + strNSM + strNSM, - dir: bidi.RightToLeft, - }, { - in: strR + strAN, - dir: bidi.RightToLeft, - }, { - in: strR + strES + strNSM, - dir: bidi.RightToLeft, - n: len(strR + strES + strNSM), - err: ErrInvalid, - }, { - in: strR + strCS + strNSM + strNSM, - dir: bidi.RightToLeft, - n: len(strR + strCS + strNSM + strNSM), - err: ErrInvalid, - }, { - in: strR + strET, - dir: bidi.RightToLeft, - n: len(strR + strET), - err: ErrInvalid, - }, { - in: strR + strON + strNSM, - dir: bidi.RightToLeft, - n: len(strR + strON + strNSM), - err: ErrInvalid, - }, { - in: strR + strBN + strNSM + strNSM, - dir: bidi.RightToLeft, - n: len(strR + strBN + strNSM + strNSM), - err: ErrInvalid, - }, { - in: strR + strL + strNSM, - dir: bidi.RightToLeft, - n: len(strR), - err: ErrInvalid, - }, { - in: strR + strB + strNSM + strNSM, - dir: bidi.RightToLeft, - n: len(strR), - err: ErrInvalid, - }, { - in: strR + strS, - dir: bidi.RightToLeft, - n: len(strR), - err: ErrInvalid, - }, { - in: strR + strWS, - dir: bidi.RightToLeft, - n: len(strR), - err: ErrInvalid, - }, { - in: strAL + strNSM, - dir: bidi.RightToLeft, - }, { - in: strAL + strR, - dir: bidi.RightToLeft, - }, { - in: strAL + strAL + strNSM, - dir: bidi.RightToLeft, - }, { - in: strAL + strEN + strNSM + strNSM, - dir: bidi.RightToLeft, - }, { - in: strAL + strAN, - dir: bidi.RightToLeft, - }, { - in: strAL + strES + strNSM, - dir: bidi.RightToLeft, - n: len(strAL + strES + strNSM), - err: ErrInvalid, - }, { - in: strAL + strCS + strNSM + strNSM, - dir: bidi.RightToLeft, - n: len(strAL + strCS + strNSM + strNSM), - err: ErrInvalid, - }, { - in: strAL + strET, - dir: bidi.RightToLeft, - n: len(strAL + strET), - err: ErrInvalid, - }, { - in: strAL + strON + strNSM, - dir: bidi.RightToLeft, - n: len(strAL + strON + strNSM), - err: ErrInvalid, - }, { - in: strAL + strBN + strNSM + strNSM, - dir: bidi.RightToLeft, - n: len(strAL + strBN + strNSM + strNSM), - err: ErrInvalid, - }, { - in: strAL + strL + strNSM, - dir: bidi.RightToLeft, - n: len(strAL), - err: ErrInvalid, - }, { - in: strAL + strB + strNSM + strNSM, - dir: bidi.RightToLeft, - n: len(strAL), - err: ErrInvalid, - }, { - in: strAL + strS, - dir: bidi.RightToLeft, - n: len(strAL), - err: ErrInvalid, - }, { - in: strAL + strWS, - dir: bidi.RightToLeft, - n: len(strAL), - err: ErrInvalid, - }}, - - // Rule 2.4: In an RTL label, if an EN is present, no AN may be present, - // and vice versa. - 4: []ruleTest{{ - in: strR + strEN + strAN, - dir: bidi.RightToLeft, - n: len(strR + strEN), - err: ErrInvalid, - }, { - in: strR + strAN + strEN + strNSM, - dir: bidi.RightToLeft, - n: len(strR + strAN), - err: ErrInvalid, - }, { - in: strAL + strEN + strAN, - dir: bidi.RightToLeft, - n: len(strAL + strEN), - err: ErrInvalid, - }, { - in: strAL + strAN + strEN + strNSM, - dir: bidi.RightToLeft, - n: len(strAL + strAN), - err: ErrInvalid, - }}, - - // Rule 2.5: In an LTR label, only characters with the Bidi properties L, - // EN, ES, CS, ET, ON, BN, or NSM are allowed. - 5: []ruleTest{{ - in: strL + strL + strL, - dir: bidi.LeftToRight, - }, { - in: strL + strEN + strL, - dir: bidi.LeftToRight, - }, { - in: strL + strES + strL, - dir: bidi.LeftToRight, - }, { - in: strL + strCS + strL, - dir: bidi.LeftToRight, - }, { - in: strL + strET + strL, - dir: bidi.LeftToRight, - }, { - in: strL + strON + strL, - dir: bidi.LeftToRight, - }, { - in: strL + strBN + strL, - dir: bidi.LeftToRight, - }, { - in: strL + strNSM + strL, - dir: bidi.LeftToRight, - }, { - in: strL + strR + strL, - dir: bidi.RightToLeft, - n: len(strL), - err: ErrInvalid, - }, { - in: strL + strAL + strL, - dir: bidi.RightToLeft, - n: len(strL), - err: ErrInvalid, - }, { - in: strL + strAN + strL, - dir: bidi.RightToLeft, - n: len(strL), - err: ErrInvalid, - }, { - in: strL + strB + strL, - dir: bidi.LeftToRight, - n: len(strL + strAN + strL), - err: nil, - }, { - in: strL + strB + strL + strR, - dir: bidi.RightToLeft, - n: len(strL + strB + strL), - err: ErrInvalid, - }, { - in: strL + strS + strL, - dir: bidi.LeftToRight, - n: len(strL + strS + strL), - err: nil, - }, { - in: strL + strS + strL + strR, - dir: bidi.RightToLeft, - n: len(strL + strS + strL), - err: ErrInvalid, - }, { - in: strL + strWS + strL, - dir: bidi.LeftToRight, - n: len(strL + strWS + strL), - err: nil, - }, { - in: strL + strWS + strL + strR, - dir: bidi.RightToLeft, - n: len(strL + strWS + strL), - err: ErrInvalid, - }}, - - // Rule 2.6: In an LTR label, the end of the label must be a character with - // Bidi property L or EN, followed by zero or more characters with Bidi - // property NSM. - 6: []ruleTest{{ - in: strL, - dir: bidi.LeftToRight, - }, { - in: strL + strNSM, - dir: bidi.LeftToRight, - }, { - in: strL + strNSM + strNSM, - dir: bidi.LeftToRight, - }, { - in: strL + strEN, - dir: bidi.LeftToRight, - }, { - in: strL + strEN + strNSM, - dir: bidi.LeftToRight, - }, { - in: strL + strEN + strNSM + strNSM, - dir: bidi.LeftToRight, - }, { - in: strL + strES, - dir: bidi.LeftToRight, - n: len(strL + strES), - err: nil, - }, { - in: strL + strES + strR, - dir: bidi.RightToLeft, - n: len(strL + strES), - err: ErrInvalid, - }, { - in: strL + strCS, - dir: bidi.LeftToRight, - n: len(strL + strCS), - err: nil, - }, { - in: strL + strCS + strR, - dir: bidi.RightToLeft, - n: len(strL + strCS), - err: ErrInvalid, - }, { - in: strL + strET, - dir: bidi.LeftToRight, - n: len(strL + strET), - err: nil, - }, { - in: strL + strET + strR, - dir: bidi.RightToLeft, - n: len(strL + strET), - err: ErrInvalid, - }, { - in: strL + strON, - dir: bidi.LeftToRight, - n: len(strL + strON), - err: nil, - }, { - in: strL + strON + strR, - dir: bidi.RightToLeft, - n: len(strL + strON), - err: ErrInvalid, - }, { - in: strL + strBN, - dir: bidi.LeftToRight, - n: len(strL + strBN), - err: nil, - }, { - in: strL + strBN + strR, - dir: bidi.RightToLeft, - n: len(strL + strBN), - err: ErrInvalid, - }, { - in: strL + strR, - dir: bidi.RightToLeft, - n: len(strL), - err: ErrInvalid, - }, { - in: strL + strAL, - dir: bidi.RightToLeft, - n: len(strL), - err: ErrInvalid, - }, { - in: strL + strAN, - dir: bidi.RightToLeft, - n: len(strL), - err: ErrInvalid, - }, { - in: strL + strB, - dir: bidi.LeftToRight, - n: len(strL + strB), - err: nil, - }, { - in: strL + strB + strR, - dir: bidi.RightToLeft, - n: len(strL + strB), - err: ErrInvalid, - }, { - in: strL + strB, - dir: bidi.LeftToRight, - n: len(strL + strB), - err: nil, - }, { - in: strL + strB + strR, - dir: bidi.RightToLeft, - n: len(strL + strB), - err: ErrInvalid, - }, { - in: strL + strB, - dir: bidi.LeftToRight, - n: len(strL + strB), - err: nil, - }, { - in: strL + strB + strR, - dir: bidi.RightToLeft, - n: len(strL + strB), - err: ErrInvalid, - }}, - - // Incremental processing. - 9: []ruleTest{{ - in: "e\u0301", // é - dir: bidi.LeftToRight, - - pSrc: 2, - nSrc: 1, - err0: transform.ErrShortSrc, - }, { - in: "e\u1000f", // é - dir: bidi.LeftToRight, - - pSrc: 3, - nSrc: 1, - err0: transform.ErrShortSrc, - }, { - // Remain invalid once invalid. - in: strR + "ab", - dir: bidi.RightToLeft, - n: len(strR), - err: ErrInvalid, - - pSrc: len(strR) + 1, - nSrc: len(strR), - err0: ErrInvalid, - }, { - // Short destination - in: "abcdefghij", - dir: bidi.LeftToRight, - - pSrc: 10, - szDst: 5, - nSrc: 5, - err0: transform.ErrShortDst, - }, { - // Short destination splitting input rune - in: "e\u0301", - dir: bidi.LeftToRight, - - pSrc: 3, - szDst: 2, - nSrc: 1, - err0: transform.ErrShortDst, - }}, -} - func init() { for rule, cases := range testCases { for i, tc := range cases { diff --git a/vendor/golang.org/x/text/secure/precis/doc.go b/vendor/golang.org/x/text/secure/precis/doc.go index 48500fe..939ff22 100644 --- a/vendor/golang.org/x/text/secure/precis/doc.go +++ b/vendor/golang.org/x/text/secure/precis/doc.go @@ -4,8 +4,8 @@ // Package precis contains types and functions for the preparation, // enforcement, and comparison of internationalized strings ("PRECIS") as -// defined in RFC 7564. It also contains several pre-defined profiles for -// passwords, nicknames, and usernames as defined in RFC 7613 and RFC 7700. +// defined in RFC 8264. It also contains several pre-defined profiles for +// passwords, nicknames, and usernames as defined in RFC 8265 and RFC 8266. // // BE ADVISED: This package is under construction and the API may change in // backwards incompatible ways and without notice. diff --git a/vendor/golang.org/x/text/secure/precis/enforce10.0.0_test.go b/vendor/golang.org/x/text/secure/precis/enforce10.0.0_test.go new file mode 100644 index 0000000..f224936 --- /dev/null +++ b/vendor/golang.org/x/text/secure/precis/enforce10.0.0_test.go @@ -0,0 +1,244 @@ +// Copyright 2015 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 go1.10 + +package precis + +import ( + "golang.org/x/text/secure/bidirule" +) + +var enforceTestCases = []struct { + name string + p *Profile + cases []testCase +}{ + {"Basic", NewFreeform(), []testCase{ + {"e\u0301\u031f", "\u00e9\u031f", nil}, // normalize + }}, + + {"Context Rule 1", NewFreeform(), []testCase{ + // Rule 1: zero-width non-joiner (U+200C) + // From RFC: + // False + // If Canonical_Combining_Class(Before(cp)) .eq. Virama Then True; + // If RegExpMatch((Joining_Type:{L,D})(Joining_Type:T)*\u200C + // (Joining_Type:T)*(Joining_Type:{R,D})) Then True; + // + // Example runes for different joining types: + // Join L: U+A872; PHAGS-PA SUPERFIXED LETTER RA + // Join D: U+062C; HAH WITH DOT BELOW + // Join T: U+0610; ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM + // Join R: U+0627; ALEF + // Virama: U+0A4D; GURMUKHI SIGN VIRAMA + // Virama and Join T: U+0ACD; GUJARATI SIGN VIRAMA + {"\u200c", "", errContext}, + {"\u200ca", "", errContext}, + {"a\u200c", "", errContext}, + {"\u200c\u0627", "", errContext}, // missing JoinStart + {"\u062c\u200c", "", errContext}, // missing JoinEnd + {"\u0610\u200c\u0610\u0627", "", errContext}, // missing JoinStart + {"\u062c\u0610\u200c\u0610", "", errContext}, // missing JoinEnd + + // Variants of: D T* U+200c T* R + {"\u062c\u200c\u0627", "\u062c\u200c\u0627", nil}, + {"\u062c\u0610\u200c\u0610\u0627", "\u062c\u0610\u200c\u0610\u0627", nil}, + {"\u062c\u0610\u0610\u200c\u0610\u0610\u0627", "\u062c\u0610\u0610\u200c\u0610\u0610\u0627", nil}, + {"\u062c\u0610\u200c\u0627", "\u062c\u0610\u200c\u0627", nil}, + {"\u062c\u200c\u0610\u0627", "\u062c\u200c\u0610\u0627", nil}, + + // Variants of: L T* U+200c T* D + {"\ua872\u200c\u062c", "\ua872\u200c\u062c", nil}, + {"\ua872\u0610\u200c\u0610\u062c", "\ua872\u0610\u200c\u0610\u062c", nil}, + {"\ua872\u0610\u0610\u200c\u0610\u0610\u062c", "\ua872\u0610\u0610\u200c\u0610\u0610\u062c", nil}, + {"\ua872\u0610\u200c\u062c", "\ua872\u0610\u200c\u062c", nil}, + {"\ua872\u200c\u0610\u062c", "\ua872\u200c\u0610\u062c", nil}, + + // Virama + {"\u0a4d\u200c", "\u0a4d\u200c", nil}, + {"\ua872\u0a4d\u200c", "\ua872\u0a4d\u200c", nil}, + {"\ua872\u0a4d\u0610\u200c", "", errContext}, + {"\ua872\u0a4d\u0610\u200c", "", errContext}, + + {"\u0acd\u200c", "\u0acd\u200c", nil}, + {"\ua872\u0acd\u200c", "\ua872\u0acd\u200c", nil}, + {"\ua872\u0acd\u0610\u200c", "", errContext}, + {"\ua872\u0acd\u0610\u200c", "", errContext}, + + // Using Virama as join T + {"\ua872\u0acd\u200c\u062c", "\ua872\u0acd\u200c\u062c", nil}, + {"\ua872\u200c\u0acd\u062c", "\ua872\u200c\u0acd\u062c", nil}, + }}, + + {"Context Rule 2", NewFreeform(), []testCase{ + // Rule 2: zero-width joiner (U+200D) + {"\u200d", "", errContext}, + {"\u200da", "", errContext}, + {"a\u200d", "", errContext}, + + {"\u0a4d\u200d", "\u0a4d\u200d", nil}, + {"\ua872\u0a4d\u200d", "\ua872\u0a4d\u200d", nil}, + {"\u0a4da\u200d", "", errContext}, + }}, + + {"Context Rule 3", NewFreeform(), []testCase{ + // Rule 3: middle dot + {"·", "", errContext}, + {"l·", "", errContext}, + {"·l", "", errContext}, + {"a·", "", errContext}, + {"l·a", "", errContext}, + {"a·a", "", errContext}, + {"l·l", "l·l", nil}, + {"al·la", "al·la", nil}, + }}, + + {"Context Rule 4", NewFreeform(), []testCase{ + // Rule 4: Greek lower numeral U+0375 + {"͵", "", errContext}, + {"͵a", "", errContext}, + {"α͵", "", errContext}, + {"͵α", "͵α", nil}, + {"α͵α", "α͵α", nil}, + {"͵͵α", "͵͵α", nil}, // The numeric sign is itself Greek. + {"α͵͵α", "α͵͵α", nil}, + {"α͵͵", "", errContext}, + {"α͵͵a", "", errContext}, + }}, + + {"Context Rule 5+6", NewFreeform(), []testCase{ + // Rule 5+6: Hebrew preceding + // U+05f3: Geresh + {"׳", "", errContext}, + {"׳ה", "", errContext}, + {"a׳b", "", errContext}, + {"ש׳", "ש׳", nil}, // U+05e9 U+05f3 + {"ש׳׳׳", "ש׳׳׳", nil}, // U+05e9 U+05f3 + + // U+05f4: Gershayim + {"״", "", errContext}, + {"״ה", "", errContext}, + {"a״b", "", errContext}, + {"ש״", "ש״", nil}, // U+05e9 U+05f4 + {"ש״״״", "ש״״״", nil}, // U+05e9 U+05f4 + {"aש״״״", "aש״״״", nil}, // U+05e9 U+05f4 + }}, + + {"Context Rule 7", NewFreeform(), []testCase{ + // Rule 7: Katakana middle Dot + {"・", "", errContext}, + {"abc・", "", errContext}, + {"・def", "", errContext}, + {"abc・def", "", errContext}, + {"aヅc・def", "aヅc・def", nil}, + {"abc・dぶf", "abc・dぶf", nil}, + {"⺐bc・def", "⺐bc・def", nil}, + }}, + + {"Context Rule 8+9", NewFreeform(), []testCase{ + // Rule 8+9: Arabic Indic Digit + {"١٢٣٤٥۶", "", errContext}, + {"۱۲۳۴۵٦", "", errContext}, + {"١٢٣٤٥", "١٢٣٤٥", nil}, + {"۱۲۳۴۵", "۱۲۳۴۵", nil}, + }}, + + {"Nickname", Nickname, []testCase{ + {" Swan of Avon ", "Swan of Avon", nil}, + {"", "", errEmptyString}, + {" ", "", errEmptyString}, + {" ", "", errEmptyString}, + {"a\u00A0a\u1680a\u2000a\u2001a\u2002a\u2003a\u2004a\u2005a\u2006a\u2007a\u2008a\u2009a\u200Aa\u202Fa\u205Fa\u3000a", "a a a a a a a a a a a a a a a a a", nil}, + {"Foo", "Foo", nil}, + {"foo", "foo", nil}, + {"Foo Bar", "Foo Bar", nil}, + {"foo bar", "foo bar", nil}, + {"\u03A3", "\u03A3", nil}, + {"\u03C3", "\u03C3", nil}, + // Greek final sigma is left as is (do not fold!) + {"\u03C2", "\u03C2", nil}, + {"\u265A", "♚", nil}, + {"Richard \u2163", "Richard IV", nil}, + {"\u212B", "Å", nil}, + {"\uFB00", "ff", nil}, // because of NFKC + {"שa", "שa", nil}, // no bidi rule + {"동일조건변경허락", "동일조건변경허락", nil}, + }}, + {"OpaqueString", OpaqueString, []testCase{ + {" Swan of Avon ", " Swan of Avon ", nil}, + {"", "", errEmptyString}, + {" ", " ", nil}, + {" ", " ", nil}, + {"a\u00A0a\u1680a\u2000a\u2001a\u2002a\u2003a\u2004a\u2005a\u2006a\u2007a\u2008a\u2009a\u200Aa\u202Fa\u205Fa\u3000a", "a a a a a a a a a a a a a a a a a", nil}, + {"Foo", "Foo", nil}, + {"foo", "foo", nil}, + {"Foo Bar", "Foo Bar", nil}, + {"foo bar", "foo bar", nil}, + {"\u03C3", "\u03C3", nil}, + {"Richard \u2163", "Richard \u2163", nil}, + {"\u212B", "Å", nil}, + {"Jack of \u2666s", "Jack of \u2666s", nil}, + {"my cat is a \u0009by", "", errDisallowedRune}, + {"שa", "שa", nil}, // no bidi rule + }}, + {"UsernameCaseMapped", UsernameCaseMapped, []testCase{ + // TODO: Should this work? + // {UsernameCaseMapped, "", "", errDisallowedRune}, + {"juliet@example.com", "juliet@example.com", nil}, + {"fussball", "fussball", nil}, + {"fu\u00DFball", "fu\u00DFball", nil}, + {"\u03C0", "\u03C0", nil}, + {"\u03A3", "\u03C3", nil}, + {"\u03C3", "\u03C3", nil}, + // Greek final sigma is left as is (do not fold!) + {"\u03C2", "\u03C2", nil}, + {"\u0049", "\u0069", nil}, + {"\u0049", "\u0069", nil}, + {"\u03D2", "", errDisallowedRune}, + {"\u03B0", "\u03B0", nil}, + {"foo bar", "", errDisallowedRune}, + {"♚", "", bidirule.ErrInvalid}, + {"\u007E", "~", nil}, + {"a", "a", nil}, + {"!", "!", nil}, + {"²", "", bidirule.ErrInvalid}, + {"\t", "", errDisallowedRune}, + {"\n", "", errDisallowedRune}, + {"\u26D6", "", bidirule.ErrInvalid}, + {"\u26FF", "", bidirule.ErrInvalid}, + {"\uFB00", "", errDisallowedRune}, + {"\u1680", "", bidirule.ErrInvalid}, + {" ", "", errDisallowedRune}, + {" ", "", errDisallowedRune}, + {"\u01C5", "", errDisallowedRune}, + {"\u16EE", "", errDisallowedRune}, // Nl RUNIC ARLAUG SYMBOL + {"\u0488", "", bidirule.ErrInvalid}, // Me COMBINING CYRILLIC HUNDRED THOUSANDS SIGN + {"\u212B", "\u00e5", nil}, // Angstrom sign, NFC -> U+00E5 + {"A\u030A", "å", nil}, // A + ring + {"\u00C5", "å", nil}, // A with ring + {"\u00E7", "ç", nil}, // c cedille + {"\u0063\u0327", "ç", nil}, // c + cedille + {"\u0158", "ř", nil}, + {"\u0052\u030C", "ř", nil}, + + {"\u1E61", "\u1E61", nil}, // LATIN SMALL LETTER S WITH DOT ABOVE + + // Confusable characters ARE allowed and should NOT be mapped. + {"\u0410", "\u0430", nil}, // CYRILLIC CAPITAL LETTER A + + // Full width should be mapped to the canonical decomposition. + {"AB", "ab", nil}, + {"שc", "", bidirule.ErrInvalid}, // bidi rule + + }}, + {"UsernameCasePreserved", UsernameCasePreserved, []testCase{ + {"ABC", "ABC", nil}, + {"AB", "AB", nil}, + {"שc", "", bidirule.ErrInvalid}, // bidi rule + {"\uFB00", "", errDisallowedRune}, + {"\u212B", "\u00c5", nil}, // Angstrom sign, NFC -> U+00E5 + {"ẛ", "", errDisallowedRune}, // LATIN SMALL LETTER LONG S WITH DOT ABOVE + }}, +} diff --git a/vendor/golang.org/x/text/secure/precis/enforce9.0.0_test.go b/vendor/golang.org/x/text/secure/precis/enforce9.0.0_test.go new file mode 100644 index 0000000..298c8a9 --- /dev/null +++ b/vendor/golang.org/x/text/secure/precis/enforce9.0.0_test.go @@ -0,0 +1,244 @@ +// Copyright 2015 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 !go1.10 + +package precis + +import ( + "golang.org/x/text/secure/bidirule" +) + +var enforceTestCases = []struct { + name string + p *Profile + cases []testCase +}{ + {"Basic", NewFreeform(), []testCase{ + {"e\u0301\u031f", "\u00e9\u031f", nil}, // normalize + }}, + + {"Context Rule 1", NewFreeform(), []testCase{ + // Rule 1: zero-width non-joiner (U+200C) + // From RFC: + // False + // If Canonical_Combining_Class(Before(cp)) .eq. Virama Then True; + // If RegExpMatch((Joining_Type:{L,D})(Joining_Type:T)*\u200C + // (Joining_Type:T)*(Joining_Type:{R,D})) Then True; + // + // Example runes for different joining types: + // Join L: U+A872; PHAGS-PA SUPERFIXED LETTER RA + // Join D: U+062C; HAH WITH DOT BELOW + // Join T: U+0610; ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM + // Join R: U+0627; ALEF + // Virama: U+0A4D; GURMUKHI SIGN VIRAMA + // Virama and Join T: U+0ACD; GUJARATI SIGN VIRAMA + {"\u200c", "", errContext}, + {"\u200ca", "", errContext}, + {"a\u200c", "", errContext}, + {"\u200c\u0627", "", errContext}, // missing JoinStart + {"\u062c\u200c", "", errContext}, // missing JoinEnd + {"\u0610\u200c\u0610\u0627", "", errContext}, // missing JoinStart + {"\u062c\u0610\u200c\u0610", "", errContext}, // missing JoinEnd + + // Variants of: D T* U+200c T* R + {"\u062c\u200c\u0627", "\u062c\u200c\u0627", nil}, + {"\u062c\u0610\u200c\u0610\u0627", "\u062c\u0610\u200c\u0610\u0627", nil}, + {"\u062c\u0610\u0610\u200c\u0610\u0610\u0627", "\u062c\u0610\u0610\u200c\u0610\u0610\u0627", nil}, + {"\u062c\u0610\u200c\u0627", "\u062c\u0610\u200c\u0627", nil}, + {"\u062c\u200c\u0610\u0627", "\u062c\u200c\u0610\u0627", nil}, + + // Variants of: L T* U+200c T* D + {"\ua872\u200c\u062c", "\ua872\u200c\u062c", nil}, + {"\ua872\u0610\u200c\u0610\u062c", "\ua872\u0610\u200c\u0610\u062c", nil}, + {"\ua872\u0610\u0610\u200c\u0610\u0610\u062c", "\ua872\u0610\u0610\u200c\u0610\u0610\u062c", nil}, + {"\ua872\u0610\u200c\u062c", "\ua872\u0610\u200c\u062c", nil}, + {"\ua872\u200c\u0610\u062c", "\ua872\u200c\u0610\u062c", nil}, + + // Virama + {"\u0a4d\u200c", "\u0a4d\u200c", nil}, + {"\ua872\u0a4d\u200c", "\ua872\u0a4d\u200c", nil}, + {"\ua872\u0a4d\u0610\u200c", "", errContext}, + {"\ua872\u0a4d\u0610\u200c", "", errContext}, + + {"\u0acd\u200c", "\u0acd\u200c", nil}, + {"\ua872\u0acd\u200c", "\ua872\u0acd\u200c", nil}, + {"\ua872\u0acd\u0610\u200c", "", errContext}, + {"\ua872\u0acd\u0610\u200c", "", errContext}, + + // Using Virama as join T + {"\ua872\u0acd\u200c\u062c", "\ua872\u0acd\u200c\u062c", nil}, + {"\ua872\u200c\u0acd\u062c", "\ua872\u200c\u0acd\u062c", nil}, + }}, + + {"Context Rule 2", NewFreeform(), []testCase{ + // Rule 2: zero-width joiner (U+200D) + {"\u200d", "", errContext}, + {"\u200da", "", errContext}, + {"a\u200d", "", errContext}, + + {"\u0a4d\u200d", "\u0a4d\u200d", nil}, + {"\ua872\u0a4d\u200d", "\ua872\u0a4d\u200d", nil}, + {"\u0a4da\u200d", "", errContext}, + }}, + + {"Context Rule 3", NewFreeform(), []testCase{ + // Rule 3: middle dot + {"·", "", errContext}, + {"l·", "", errContext}, + {"·l", "", errContext}, + {"a·", "", errContext}, + {"l·a", "", errContext}, + {"a·a", "", errContext}, + {"l·l", "l·l", nil}, + {"al·la", "al·la", nil}, + }}, + + {"Context Rule 4", NewFreeform(), []testCase{ + // Rule 4: Greek lower numeral U+0375 + {"͵", "", errContext}, + {"͵a", "", errContext}, + {"α͵", "", errContext}, + {"͵α", "͵α", nil}, + {"α͵α", "α͵α", nil}, + {"͵͵α", "͵͵α", nil}, // The numeric sign is itself Greek. + {"α͵͵α", "α͵͵α", nil}, + {"α͵͵", "", errContext}, + {"α͵͵a", "", errContext}, + }}, + + {"Context Rule 5+6", NewFreeform(), []testCase{ + // Rule 5+6: Hebrew preceding + // U+05f3: Geresh + {"׳", "", errContext}, + {"׳ה", "", errContext}, + {"a׳b", "", errContext}, + {"ש׳", "ש׳", nil}, // U+05e9 U+05f3 + {"ש׳׳׳", "ש׳׳׳", nil}, // U+05e9 U+05f3 + + // U+05f4: Gershayim + {"״", "", errContext}, + {"״ה", "", errContext}, + {"a״b", "", errContext}, + {"ש״", "ש״", nil}, // U+05e9 U+05f4 + {"ש״״״", "ש״״״", nil}, // U+05e9 U+05f4 + {"aש״״״", "aש״״״", nil}, // U+05e9 U+05f4 + }}, + + {"Context Rule 7", NewFreeform(), []testCase{ + // Rule 7: Katakana middle Dot + {"・", "", errContext}, + {"abc・", "", errContext}, + {"・def", "", errContext}, + {"abc・def", "", errContext}, + {"aヅc・def", "aヅc・def", nil}, + {"abc・dぶf", "abc・dぶf", nil}, + {"⺐bc・def", "⺐bc・def", nil}, + }}, + + {"Context Rule 8+9", NewFreeform(), []testCase{ + // Rule 8+9: Arabic Indic Digit + {"١٢٣٤٥۶", "", errContext}, + {"۱۲۳۴۵٦", "", errContext}, + {"١٢٣٤٥", "١٢٣٤٥", nil}, + {"۱۲۳۴۵", "۱۲۳۴۵", nil}, + }}, + + {"Nickname", Nickname, []testCase{ + {" Swan of Avon ", "Swan of Avon", nil}, + {"", "", errEmptyString}, + {" ", "", errEmptyString}, + {" ", "", errEmptyString}, + {"a\u00A0a\u1680a\u2000a\u2001a\u2002a\u2003a\u2004a\u2005a\u2006a\u2007a\u2008a\u2009a\u200Aa\u202Fa\u205Fa\u3000a", "a a a a a a a a a a a a a a a a a", nil}, + {"Foo", "Foo", nil}, + {"foo", "foo", nil}, + {"Foo Bar", "Foo Bar", nil}, + {"foo bar", "foo bar", nil}, + {"\u03A3", "\u03A3", nil}, + {"\u03C3", "\u03C3", nil}, + // Greek final sigma is left as is (do not fold!) + {"\u03C2", "\u03C2", nil}, + {"\u265A", "♚", nil}, + {"Richard \u2163", "Richard IV", nil}, + {"\u212B", "Å", nil}, + {"\uFB00", "ff", nil}, // because of NFKC + {"שa", "שa", nil}, // no bidi rule + {"동일조건변경허락", "동일조건변경허락", nil}, + }}, + {"OpaqueString", OpaqueString, []testCase{ + {" Swan of Avon ", " Swan of Avon ", nil}, + {"", "", errEmptyString}, + {" ", " ", nil}, + {" ", " ", nil}, + {"a\u00A0a\u1680a\u2000a\u2001a\u2002a\u2003a\u2004a\u2005a\u2006a\u2007a\u2008a\u2009a\u200Aa\u202Fa\u205Fa\u3000a", "a a a a a a a a a a a a a a a a a", nil}, + {"Foo", "Foo", nil}, + {"foo", "foo", nil}, + {"Foo Bar", "Foo Bar", nil}, + {"foo bar", "foo bar", nil}, + {"\u03C3", "\u03C3", nil}, + {"Richard \u2163", "Richard \u2163", nil}, + {"\u212B", "Å", nil}, + {"Jack of \u2666s", "Jack of \u2666s", nil}, + {"my cat is a \u0009by", "", errDisallowedRune}, + {"שa", "שa", nil}, // no bidi rule + }}, + {"UsernameCaseMapped", UsernameCaseMapped, []testCase{ + // TODO: Should this work? + // {UsernameCaseMapped, "", "", errDisallowedRune}, + {"juliet@example.com", "juliet@example.com", nil}, + {"fussball", "fussball", nil}, + {"fu\u00DFball", "fu\u00DFball", nil}, + {"\u03C0", "\u03C0", nil}, + {"\u03A3", "\u03C3", nil}, + {"\u03C3", "\u03C3", nil}, + // Greek final sigma is left as is (do not fold!) + {"\u03C2", "\u03C2", nil}, + {"\u0049", "\u0069", nil}, + {"\u0049", "\u0069", nil}, + {"\u03D2", "", errDisallowedRune}, + {"\u03B0", "\u03B0", nil}, + {"foo bar", "", errDisallowedRune}, + {"♚", "", errDisallowedRune}, + {"\u007E", "~", nil}, + {"a", "a", nil}, + {"!", "!", nil}, + {"²", "", errDisallowedRune}, + {"\t", "", errDisallowedRune}, + {"\n", "", errDisallowedRune}, + {"\u26D6", "", errDisallowedRune}, + {"\u26FF", "", errDisallowedRune}, + {"\uFB00", "", errDisallowedRune}, + {"\u1680", "", errDisallowedRune}, + {" ", "", errDisallowedRune}, + {" ", "", errDisallowedRune}, + {"\u01C5", "", errDisallowedRune}, + {"\u16EE", "", errDisallowedRune}, // Nl RUNIC ARLAUG SYMBOL + {"\u0488", "", errDisallowedRune}, // Me COMBINING CYRILLIC HUNDRED THOUSANDS SIGN + {"\u212B", "\u00e5", nil}, // Angstrom sign, NFC -> U+00E5 + {"A\u030A", "å", nil}, // A + ring + {"\u00C5", "å", nil}, // A with ring + {"\u00E7", "ç", nil}, // c cedille + {"\u0063\u0327", "ç", nil}, // c + cedille + {"\u0158", "ř", nil}, + {"\u0052\u030C", "ř", nil}, + + {"\u1E61", "\u1E61", nil}, // LATIN SMALL LETTER S WITH DOT ABOVE + + // Confusable characters ARE allowed and should NOT be mapped. + {"\u0410", "\u0430", nil}, // CYRILLIC CAPITAL LETTER A + + // Full width should be mapped to the canonical decomposition. + {"AB", "ab", nil}, + {"שc", "", bidirule.ErrInvalid}, // bidi rule + + }}, + {"UsernameCasePreserved", UsernameCasePreserved, []testCase{ + {"ABC", "ABC", nil}, + {"AB", "AB", nil}, + {"שc", "", bidirule.ErrInvalid}, // bidi rule + {"\uFB00", "", errDisallowedRune}, + {"\u212B", "\u00c5", nil}, // Angstrom sign, NFC -> U+00E5 + {"ẛ", "", errDisallowedRune}, // LATIN SMALL LETTER LONG S WITH DOT ABOVE + }}, +} diff --git a/vendor/golang.org/x/text/secure/precis/enforce_test.go b/vendor/golang.org/x/text/secure/precis/enforce_test.go index 927d4ab..ac2aad2 100644 --- a/vendor/golang.org/x/text/secure/precis/enforce_test.go +++ b/vendor/golang.org/x/text/secure/precis/enforce_test.go @@ -5,12 +5,13 @@ package precis import ( + "bytes" "fmt" "reflect" "testing" "golang.org/x/text/internal/testtext" - "golang.org/x/text/secure/bidirule" + "golang.org/x/text/transform" ) type testCase struct { @@ -19,237 +20,6 @@ type testCase struct { err error } -var enforceTestCases = []struct { - name string - p *Profile - cases []testCase -}{ - {"Basic", NewFreeform(), []testCase{ - {"e\u0301\u031f", "\u00e9\u031f", nil}, // normalize - }}, - - {"Context Rule 1", NewFreeform(), []testCase{ - // Rule 1: zero-width non-joiner (U+200C) - // From RFC: - // False - // If Canonical_Combining_Class(Before(cp)) .eq. Virama Then True; - // If RegExpMatch((Joining_Type:{L,D})(Joining_Type:T)*\u200C - // (Joining_Type:T)*(Joining_Type:{R,D})) Then True; - // - // Example runes for different joining types: - // Join L: U+A872; PHAGS-PA SUPERFIXED LETTER RA - // Join D: U+062C; HAH WITH DOT BELOW - // Join T: U+0610; ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM - // Join R: U+0627; ALEF - // Virama: U+0A4D; GURMUKHI SIGN VIRAMA - // Virama and Join T: U+0ACD; GUJARATI SIGN VIRAMA - {"\u200c", "", errContext}, - {"\u200ca", "", errContext}, - {"a\u200c", "", errContext}, - {"\u200c\u0627", "", errContext}, // missing JoinStart - {"\u062c\u200c", "", errContext}, // missing JoinEnd - {"\u0610\u200c\u0610\u0627", "", errContext}, // missing JoinStart - {"\u062c\u0610\u200c\u0610", "", errContext}, // missing JoinEnd - - // Variants of: D T* U+200c T* R - {"\u062c\u200c\u0627", "\u062c\u200c\u0627", nil}, - {"\u062c\u0610\u200c\u0610\u0627", "\u062c\u0610\u200c\u0610\u0627", nil}, - {"\u062c\u0610\u0610\u200c\u0610\u0610\u0627", "\u062c\u0610\u0610\u200c\u0610\u0610\u0627", nil}, - {"\u062c\u0610\u200c\u0627", "\u062c\u0610\u200c\u0627", nil}, - {"\u062c\u200c\u0610\u0627", "\u062c\u200c\u0610\u0627", nil}, - - // Variants of: L T* U+200c T* D - {"\ua872\u200c\u062c", "\ua872\u200c\u062c", nil}, - {"\ua872\u0610\u200c\u0610\u062c", "\ua872\u0610\u200c\u0610\u062c", nil}, - {"\ua872\u0610\u0610\u200c\u0610\u0610\u062c", "\ua872\u0610\u0610\u200c\u0610\u0610\u062c", nil}, - {"\ua872\u0610\u200c\u062c", "\ua872\u0610\u200c\u062c", nil}, - {"\ua872\u200c\u0610\u062c", "\ua872\u200c\u0610\u062c", nil}, - - // Virama - {"\u0a4d\u200c", "\u0a4d\u200c", nil}, - {"\ua872\u0a4d\u200c", "\ua872\u0a4d\u200c", nil}, - {"\ua872\u0a4d\u0610\u200c", "", errContext}, - {"\ua872\u0a4d\u0610\u200c", "", errContext}, - - {"\u0acd\u200c", "\u0acd\u200c", nil}, - {"\ua872\u0acd\u200c", "\ua872\u0acd\u200c", nil}, - {"\ua872\u0acd\u0610\u200c", "", errContext}, - {"\ua872\u0acd\u0610\u200c", "", errContext}, - - // Using Virama as join T - {"\ua872\u0acd\u200c\u062c", "\ua872\u0acd\u200c\u062c", nil}, - {"\ua872\u200c\u0acd\u062c", "\ua872\u200c\u0acd\u062c", nil}, - }}, - - {"Context Rule 2", NewFreeform(), []testCase{ - // Rule 2: zero-width joiner (U+200D) - {"\u200d", "", errContext}, - {"\u200da", "", errContext}, - {"a\u200d", "", errContext}, - - {"\u0a4d\u200d", "\u0a4d\u200d", nil}, - {"\ua872\u0a4d\u200d", "\ua872\u0a4d\u200d", nil}, - {"\u0a4da\u200d", "", errContext}, - }}, - - {"Context Rule 3", NewFreeform(), []testCase{ - // Rule 3: middle dot - {"·", "", errContext}, - {"l·", "", errContext}, - {"·l", "", errContext}, - {"a·", "", errContext}, - {"l·a", "", errContext}, - {"a·a", "", errContext}, - {"l·l", "l·l", nil}, - {"al·la", "al·la", nil}, - }}, - - {"Context Rule 4", NewFreeform(), []testCase{ - // Rule 4: Greek lower numeral U+0375 - {"͵", "", errContext}, - {"͵a", "", errContext}, - {"α͵", "", errContext}, - {"͵α", "͵α", nil}, - {"α͵α", "α͵α", nil}, - {"͵͵α", "͵͵α", nil}, // The numeric sign is itself Greek. - {"α͵͵α", "α͵͵α", nil}, - }}, - - {"Context Rule 5+6", NewFreeform(), []testCase{ - // Rule 5+6: Hebrew preceding - // U+05f3: Geresh - {"׳", "", errContext}, - {"׳ה", "", errContext}, - {"a׳b", "", errContext}, - {"ש׳", "ש׳", nil}, // U+05e9 U+05f3 - {"ש׳׳׳", "ש׳׳׳", nil}, // U+05e9 U+05f3 - - // U+05f4: Gershayim - {"״", "", errContext}, - {"״ה", "", errContext}, - {"a״b", "", errContext}, - {"ש״", "ש״", nil}, // U+05e9 U+05f4 - {"ש״״״", "ש״״״", nil}, // U+05e9 U+05f4 - {"aש״״״", "aש״״״", nil}, // U+05e9 U+05f4 - }}, - - {"Context Rule 7", NewFreeform(), []testCase{ - // Rule 7: Katakana middle Dot - {"・", "", errContext}, - {"abc・", "", errContext}, - {"・def", "", errContext}, - {"abc・def", "", errContext}, - {"aヅc・def", "aヅc・def", nil}, - {"abc・dぶf", "abc・dぶf", nil}, - {"⺐bc・def", "⺐bc・def", nil}, - }}, - - {"Context Rule 8+9", NewFreeform(), []testCase{ - // Rule 8+9: Arabic Indic Digit - {"١٢٣٤٥۶", "", errContext}, - {"۱۲۳۴۵٦", "", errContext}, - {"١٢٣٤٥", "١٢٣٤٥", nil}, - {"۱۲۳۴۵", "۱۲۳۴۵", nil}, - }}, - - {"Nickname", Nickname, []testCase{ - {" Swan of Avon ", "Swan of Avon", nil}, - {"", "", errEmptyString}, - {" ", "", errEmptyString}, - {" ", "", errEmptyString}, - {"a\u00A0a\u1680a\u2000a\u2001a\u2002a\u2003a\u2004a\u2005a\u2006a\u2007a\u2008a\u2009a\u200Aa\u202Fa\u205Fa\u3000a", "a a a a a a a a a a a a a a a a a", nil}, - {"Foo", "Foo", nil}, - {"foo", "foo", nil}, - {"Foo Bar", "Foo Bar", nil}, - {"foo bar", "foo bar", nil}, - {"\u03A3", "\u03A3", nil}, - {"\u03C3", "\u03C3", nil}, - // Greek final sigma is left as is (do not fold!) - {"\u03C2", "\u03C2", nil}, - {"\u265A", "♚", nil}, - {"Richard \u2163", "Richard IV", nil}, - {"\u212B", "Å", nil}, - {"\uFB00", "ff", nil}, // because of NFKC - {"שa", "שa", nil}, // no bidi rule - {"동일조건변경허락", "동일조건변경허락", nil}, - }}, - {"OpaqueString", OpaqueString, []testCase{ - {" Swan of Avon ", " Swan of Avon ", nil}, - {"", "", errEmptyString}, - {" ", " ", nil}, - {" ", " ", nil}, - {"a\u00A0a\u1680a\u2000a\u2001a\u2002a\u2003a\u2004a\u2005a\u2006a\u2007a\u2008a\u2009a\u200Aa\u202Fa\u205Fa\u3000a", "a a a a a a a a a a a a a a a a a", nil}, - {"Foo", "Foo", nil}, - {"foo", "foo", nil}, - {"Foo Bar", "Foo Bar", nil}, - {"foo bar", "foo bar", nil}, - {"\u03C3", "\u03C3", nil}, - {"Richard \u2163", "Richard \u2163", nil}, - {"\u212B", "Å", nil}, - {"Jack of \u2666s", "Jack of \u2666s", nil}, - {"my cat is a \u0009by", "", errDisallowedRune}, - {"שa", "שa", nil}, // no bidi rule - }}, - {"UsernameCaseMapped", UsernameCaseMapped, []testCase{ - // TODO: Should this work? - // {UsernameCaseMapped, "", "", errDisallowedRune}, - {"juliet@example.com", "juliet@example.com", nil}, - {"fussball", "fussball", nil}, - {"fu\u00DFball", "fu\u00DFball", nil}, - {"\u03C0", "\u03C0", nil}, - {"\u03A3", "\u03C3", nil}, - {"\u03C3", "\u03C3", nil}, - // Greek final sigma is left as is (do not fold!) - {"\u03C2", "\u03C2", nil}, - {"\u0049", "\u0069", nil}, - {"\u0049", "\u0069", nil}, - {"\u03D2", "", errDisallowedRune}, - {"\u03B0", "\u03B0", nil}, - {"foo bar", "", errDisallowedRune}, - {"♚", "", errDisallowedRune}, - {"\u007E", "~", nil}, - {"a", "a", nil}, - {"!", "!", nil}, - {"²", "", errDisallowedRune}, - {"\t", "", errDisallowedRune}, - {"\n", "", errDisallowedRune}, - {"\u26D6", "", errDisallowedRune}, - {"\u26FF", "", errDisallowedRune}, - {"\uFB00", "", errDisallowedRune}, - {"\u1680", "", errDisallowedRune}, - {" ", "", errDisallowedRune}, - {" ", "", errDisallowedRune}, - {"\u01C5", "", errDisallowedRune}, - {"\u16EE", "", errDisallowedRune}, // Nl RUNIC ARLAUG SYMBOL - {"\u0488", "", errDisallowedRune}, // Me COMBINING CYRILLIC HUNDRED THOUSANDS SIGN - {"\u212B", "\u00e5", nil}, // Angstrom sign, NFC -> U+00E5 - {"A\u030A", "å", nil}, // A + ring - {"\u00C5", "å", nil}, // A with ring - {"\u00E7", "ç", nil}, // c cedille - {"\u0063\u0327", "ç", nil}, // c + cedille - {"\u0158", "ř", nil}, - {"\u0052\u030C", "ř", nil}, - - {"\u1E61", "\u1E61", nil}, // LATIN SMALL LETTER S WITH DOT ABOVE - - // Confusable characters ARE allowed and should NOT be mapped. - {"\u0410", "\u0430", nil}, // CYRILLIC CAPITAL LETTER A - - // Full width should be mapped to the canonical decomposition. - {"AB", "ab", nil}, - {"שc", "", bidirule.ErrInvalid}, // bidi rule - - }}, - {"UsernameCasePreserved", UsernameCasePreserved, []testCase{ - {"ABC", "ABC", nil}, - {"AB", "AB", nil}, - {"שc", "", bidirule.ErrInvalid}, // bidi rule - {"\uFB00", "", errDisallowedRune}, - {"\u212B", "\u00c5", nil}, // Angstrom sign, NFC -> U+00E5 - {"ẛ", "", errDisallowedRune}, // LATIN SMALL LETTER LONG S WITH DOT ABOVE - }}, -} - func doTests(t *testing.T, fn func(t *testing.T, p *Profile, tc testCase)) { for _, g := range enforceTestCases { for i, tc := range g.cases { @@ -275,13 +45,16 @@ func TestBytes(t *testing.T) { t.Errorf("got %+q (err: %v); want %+q (err: %v)", string(e), err, tc.output, tc.err) } }) - // Test that calling Bytes with something that doesn't transform returns a - // copy. - orig := []byte("hello") - b, _ := NewFreeform().Bytes(orig) - if reflect.ValueOf(b).Pointer() == reflect.ValueOf(orig).Pointer() { - t.Error("original and result are the same slice; should be a copy") - } + + t.Run("Copy", func(t *testing.T) { + // Test that calling Bytes with something that doesn't transform returns a + // copy. + orig := []byte("hello") + b, _ := NewFreeform().Bytes(orig) + if reflect.ValueOf(b).Pointer() == reflect.ValueOf(orig).Pointer() { + t.Error("original and result are the same slice; should be a copy") + } + }) } func TestAppend(t *testing.T) { @@ -318,3 +91,72 @@ func TestTransformMallocs(t *testing.T) { t.Errorf("got %f allocs, want 0", n) } } + +func min(a, b int) int { + if a < b { + return a + } + return b +} + +// TestTransformerShortBuffers tests that the precis.Transformer implements the +// spirit, not just the letter (the method signatures), of the +// transform.Transformer interface. +// +// In particular, it tests that, if one or both of the dst or src buffers are +// short, so that multiple Transform calls are required to complete the overall +// transformation, the end result is identical to one Transform call with +// sufficiently long buffers. +func TestTransformerShortBuffers(t *testing.T) { + srcUnit := []byte("a\u0300cce\u0301nts") // NFD normalization form. + wantUnit := []byte("àccénts") // NFC normalization form. + src := bytes.Repeat(srcUnit, 16) + want := bytes.Repeat(wantUnit, 16) + const long = 4096 + dst := make([]byte, long) + + // 5, 7, 9, 11, 13, 16 and 17 are all pair-wise co-prime, which means that + // slicing the dst and src buffers into 5, 7, 13 and 17 byte chunks will + // fall at different places inside the repeated srcUnit's and wantUnit's. + if len(srcUnit) != 11 || len(wantUnit) != 9 || len(src) > long || len(want) > long { + t.Fatal("inconsistent lengths") + } + + tr := NewFreeform().NewTransformer() + for _, deltaD := range []int{5, 7, 13, 17, long} { + loop: + for _, deltaS := range []int{5, 7, 13, 17, long} { + tr.Reset() + d0 := 0 + s0 := 0 + for { + d1 := min(len(dst), d0+deltaD) + s1 := min(len(src), s0+deltaS) + nDst, nSrc, err := tr.Transform(dst[d0:d1:d1], src[s0:s1:s1], s1 == len(src)) + d0 += nDst + s0 += nSrc + if err == nil { + break + } + if err == transform.ErrShortDst || err == transform.ErrShortSrc { + continue + } + t.Errorf("deltaD=%d, deltaS=%d: %v", deltaD, deltaS, err) + continue loop + } + if s0 != len(src) { + t.Errorf("deltaD=%d, deltaS=%d: s0: got %d, want %d", deltaD, deltaS, s0, len(src)) + continue + } + if d0 != len(want) { + t.Errorf("deltaD=%d, deltaS=%d: d0: got %d, want %d", deltaD, deltaS, d0, len(want)) + continue + } + got := dst[:d0] + if !bytes.Equal(got, want) { + t.Errorf("deltaD=%d, deltaS=%d:\ngot %q\nwant %q", deltaD, deltaS, got, want) + continue + } + } + } +} diff --git a/vendor/golang.org/x/text/secure/precis/gen.go b/vendor/golang.org/x/text/secure/precis/gen.go index dba9004..946acba 100644 --- a/vendor/golang.org/x/text/secure/precis/gen.go +++ b/vendor/golang.org/x/text/secure/precis/gen.go @@ -265,7 +265,7 @@ func hasCompat(r rune) bool { func writeTables() { propTrie := triegen.NewTrie("derivedProperties") w := gen.NewCodeWriter() - defer w.WriteGoFile(*outputFile, "precis") + defer w.WriteVersionedGoFile(*outputFile, "precis") gen.WriteUnicodeVersion(w) // Iterate over all the runes... diff --git a/vendor/golang.org/x/text/secure/precis/nickname.go b/vendor/golang.org/x/text/secure/precis/nickname.go index cd54b9e..11e0ccb 100644 --- a/vendor/golang.org/x/text/secure/precis/nickname.go +++ b/vendor/golang.org/x/text/secure/precis/nickname.go @@ -23,24 +23,26 @@ func (t *nickAdditionalMapping) Reset() { } func (t *nickAdditionalMapping) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { - // RFC 7700 §2.1. Rules + // RFC 8266 §2.1. Rules // // 2. Additional Mapping Rule: The additional mapping rule consists of - // the following sub-rules. + // the following sub-rules. // - // 1. Any instances of non-ASCII space MUST be mapped to ASCII - // space (U+0020); a non-ASCII space is any Unicode code point - // having a general category of "Zs", naturally with the - // exception of U+0020. + // a. Map any instances of non-ASCII space to SPACE (U+0020); a + // non-ASCII space is any Unicode code point having a general + // category of "Zs", naturally with the exception of SPACE + // (U+0020). (The inclusion of only ASCII space prevents + // confusion with various non-ASCII space code points, many of + // which are difficult to reproduce across different input + // methods.) // - // 2. Any instances of the ASCII space character at the beginning - // or end of a nickname MUST be removed (e.g., "stpeter " is - // mapped to "stpeter"). + // b. Remove any instances of the ASCII space character at the + // beginning or end of a nickname (e.g., "stpeter " is mapped to + // "stpeter"). // - // 3. Interior sequences of more than one ASCII space character - // MUST be mapped to a single ASCII space character (e.g., - // "St Peter" is mapped to "St Peter"). - + // c. Map interior sequences of more than one ASCII space character + // to a single ASCII space character (e.g., "St Peter" is + // mapped to "St Peter"). for nSrc < len(src) { r, size := utf8.DecodeRune(src[nSrc:]) if size == 0 { // Incomplete UTF-8 encoding diff --git a/vendor/golang.org/x/text/secure/precis/options.go b/vendor/golang.org/x/text/secure/precis/options.go index 488f0b1..26143db 100644 --- a/vendor/golang.org/x/text/secure/precis/options.go +++ b/vendor/golang.org/x/text/secure/precis/options.go @@ -28,6 +28,7 @@ type options struct { width transform.SpanningTransformer disallowEmpty bool bidiRule bool + repeat bool // Comparison options ignorecase bool @@ -78,6 +79,9 @@ var ( bidiRule = func(o *options) { o.bidiRule = true } + repeat = func(o *options) { + o.repeat = true + } ) // TODO: move this logic to package transform diff --git a/vendor/golang.org/x/text/secure/precis/profile.go b/vendor/golang.org/x/text/secure/precis/profile.go index 1d7898d..0419159 100644 --- a/vendor/golang.org/x/text/secure/precis/profile.go +++ b/vendor/golang.org/x/text/secure/precis/profile.go @@ -60,25 +60,43 @@ func (p *Profile) NewTransformer() *Transformer { // These transforms are applied in the order defined in // https://tools.ietf.org/html/rfc7564#section-7 - if p.options.foldWidth { - ts = append(ts, width.Fold) + // RFC 8266 §2.1: + // + // Implementation experience has shown that applying the rules for the + // Nickname profile is not an idempotent procedure for all code points. + // Therefore, an implementation SHOULD apply the rules repeatedly until + // the output string is stable; if the output string does not stabilize + // after reapplying the rules three (3) additional times after the first + // application, the implementation SHOULD terminate application of the + // rules and reject the input string as invalid. + // + // There is no known string that will change indefinitely, so repeat 4 times + // and rely on the Span method to keep things relatively performant. + r := 1 + if p.options.repeat { + r = 4 } + for ; r > 0; r-- { + if p.options.foldWidth { + ts = append(ts, width.Fold) + } - for _, f := range p.options.additional { - ts = append(ts, f()) - } + for _, f := range p.options.additional { + ts = append(ts, f()) + } - if p.options.cases != nil { - ts = append(ts, p.options.cases) - } + if p.options.cases != nil { + ts = append(ts, p.options.cases) + } - ts = append(ts, p.options.norm) + ts = append(ts, p.options.norm) - if p.options.bidiRule { - ts = append(ts, bidirule.New()) - } + if p.options.bidiRule { + ts = append(ts, bidirule.New()) + } - ts = append(ts, &checker{p: p, allowed: p.Allowed()}) + ts = append(ts, &checker{p: p, allowed: p.Allowed()}) + } // TODO: Add the disallow empty rule with a dummy transformer? @@ -162,42 +180,48 @@ func (b *buffers) enforce(p *Profile, src []byte, comparing bool) (str []byte, e } // These transforms are applied in the order defined in - // https://tools.ietf.org/html/rfc7564#section-7 + // https://tools.ietf.org/html/rfc8264#section-7 - // TODO: allow different width transforms options. - if p.options.foldWidth || (p.options.ignorecase && comparing) { - b.apply(foldWidthT) + r := 1 + if p.options.repeat { + r = 4 } - for _, f := range p.options.additional { - if err = b.apply(f()); err != nil { + for ; r > 0; r-- { + // TODO: allow different width transforms options. + if p.options.foldWidth || (p.options.ignorecase && comparing) { + b.apply(foldWidthT) + } + for _, f := range p.options.additional { + if err = b.apply(f()); err != nil { + return nil, err + } + } + if p.options.cases != nil { + b.apply(p.options.cases) + } + if comparing && p.options.ignorecase { + b.apply(lowerCaseT) + } + b.apply(p.norm) + if p.options.bidiRule && !bidirule.Valid(b.src) { + return nil, bidirule.ErrInvalid + } + c := checker{p: p} + if _, err := c.span(b.src, true); err != nil { return nil, err } - } - if p.options.cases != nil { - b.apply(p.options.cases) - } - if comparing && p.options.ignorecase { - b.apply(lowerCaseT) - } - b.apply(p.norm) - if p.options.bidiRule && !bidirule.Valid(b.src) { - return nil, bidirule.ErrInvalid - } - c := checker{p: p} - if _, err := c.span(b.src, true); err != nil { - return nil, err - } - if p.disallow != nil { - for i := 0; i < len(b.src); { - r, size := utf8.DecodeRune(b.src[i:]) - if p.disallow.Contains(r) { - return nil, errDisallowedRune + if p.disallow != nil { + for i := 0; i < len(b.src); { + r, size := utf8.DecodeRune(b.src[i:]) + if p.disallow.Contains(r) { + return nil, errDisallowedRune + } + i += size } - i += size } - } - if p.options.disallowEmpty && len(b.src) == 0 { - return nil, errEmptyString + if p.options.disallowEmpty && len(b.src) == 0 { + return nil, errEmptyString + } } return b.src, nil } @@ -322,33 +346,35 @@ func (c *checker) span(src []byte, atEOF bool) (n int, err error) { } return n, errDisallowedRune } + doLookAhead := false if property(e) < c.p.class.validFrom { if d.rule == nil { return n, errDisallowedRune } - doLookAhead, err := d.rule(c.beforeBits) + doLookAhead, err = d.rule(c.beforeBits) if err != nil { return n, err } - if doLookAhead { - c.beforeBits &= d.keep - c.beforeBits |= d.set - // We may still have a lookahead rule which we will require to - // complete (by checking termBits == 0) before setting the new - // bits. - if c.termBits != 0 && (!c.checkLookahead() || c.termBits == 0) { - return n, err - } - c.termBits = d.term - c.acceptBits = d.accept - n += sz - continue - } } c.beforeBits &= d.keep c.beforeBits |= d.set - if c.termBits != 0 && !c.checkLookahead() { - return n, errContext + if c.termBits != 0 { + // We are currently in an unterminated lookahead. + if c.beforeBits&c.termBits != 0 { + c.termBits = 0 + c.acceptBits = 0 + } else if c.beforeBits&c.acceptBits == 0 { + // Invalid continuation of the unterminated lookahead sequence. + return n, errContext + } + } + if doLookAhead { + if c.termBits != 0 { + // A previous lookahead run has not been terminated yet. + return n, errContext + } + c.termBits = d.term + c.acceptBits = d.accept } n += sz } @@ -358,18 +384,6 @@ func (c *checker) span(src []byte, atEOF bool) (n int, err error) { return n, err } -func (c *checker) checkLookahead() bool { - switch { - case c.beforeBits&c.termBits != 0: - c.termBits = 0 - c.acceptBits = 0 - case c.beforeBits&c.acceptBits != 0: - default: - return false - } - return true -} - // TODO: we may get rid of this transform if transform.Chain understands // something like a Spanner interface. func (c checker) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { diff --git a/vendor/golang.org/x/text/secure/precis/profile_test.go b/vendor/golang.org/x/text/secure/precis/profile_test.go index 916fc8b..4edb28a 100644 --- a/vendor/golang.org/x/text/secure/precis/profile_test.go +++ b/vendor/golang.org/x/text/secure/precis/profile_test.go @@ -103,9 +103,9 @@ var compareTestCases = []struct { // After applying the Nickname profile, \u00a8 becomes \u0020\u0308, // however because the nickname profile is not idempotent, applying it again - // to \u0020\u0308 results in \u0308. This behavior is "correct", even if it - // is unexpected. - {"\u00a8", "\u0020\u0308", false}, + // to \u0020\u0308 results in \u0308. + {"\u00a8", "\u0020\u0308", true}, + {"\u00a8", "\u0308", true}, {"\u0020\u0308", "\u0308", true}, }}, } diff --git a/vendor/golang.org/x/text/secure/precis/profiles.go b/vendor/golang.org/x/text/secure/precis/profiles.go index 8601002..061936d 100644 --- a/vendor/golang.org/x/text/secure/precis/profiles.go +++ b/vendor/golang.org/x/text/secure/precis/profiles.go @@ -13,18 +13,17 @@ import ( ) var ( - // Implements the Nickname profile specified in RFC 7700. - // The nickname profile is not idempotent and may need to be applied multiple - // times before being used for comparisons. + // Implements the Nickname profile specified in RFC 8266. Nickname *Profile = nickname - // Implements the UsernameCaseMapped profile specified in RFC 7613. + // Implements the UsernameCaseMapped profile specified in RFC 8265. UsernameCaseMapped *Profile = usernameCaseMap - // Implements the UsernameCasePreserved profile specified in RFC 7613. + // Implements the UsernameCasePreserved profile specified in RFC 8265. UsernameCasePreserved *Profile = usernameNoCaseMap - // Implements the OpaqueString profile defined in RFC 7613 for passwords and other secure labels. + // Implements the OpaqueString profile defined in RFC 8265 for passwords and + // other secure labels. OpaqueString *Profile = opaquestring ) @@ -37,6 +36,7 @@ var ( IgnoreCase, Norm(norm.NFKC), DisallowEmpty, + repeat, ), class: freeform, } diff --git a/vendor/golang.org/x/text/secure/precis/tables.go b/vendor/golang.org/x/text/secure/precis/tables.go deleted file mode 100644 index 2f550c1..0000000 --- a/vendor/golang.org/x/text/secure/precis/tables.go +++ /dev/null @@ -1,3788 +0,0 @@ -// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. - -package precis - -// UnicodeVersion is the Unicode version from which the tables in this package are derived. -const UnicodeVersion = "9.0.0" - -// 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 *derivedPropertiesTrie) lookup(s []byte) (v uint8, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return derivedPropertiesValues[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 := derivedPropertiesIndex[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 := derivedPropertiesIndex[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 = derivedPropertiesIndex[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 := derivedPropertiesIndex[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 = derivedPropertiesIndex[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 = derivedPropertiesIndex[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 *derivedPropertiesTrie) lookupUnsafe(s []byte) uint8 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return derivedPropertiesValues[c0] - } - i := derivedPropertiesIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = derivedPropertiesIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = derivedPropertiesIndex[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 *derivedPropertiesTrie) lookupString(s string) (v uint8, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return derivedPropertiesValues[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 := derivedPropertiesIndex[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 := derivedPropertiesIndex[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 = derivedPropertiesIndex[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 := derivedPropertiesIndex[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 = derivedPropertiesIndex[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 = derivedPropertiesIndex[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 *derivedPropertiesTrie) lookupStringUnsafe(s string) uint8 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return derivedPropertiesValues[c0] - } - i := derivedPropertiesIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = derivedPropertiesIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = derivedPropertiesIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// derivedPropertiesTrie. Total size: 25344 bytes (24.75 KiB). Checksum: c5b977d76d42d8a. -type derivedPropertiesTrie struct{} - -func newDerivedPropertiesTrie(i int) *derivedPropertiesTrie { - return &derivedPropertiesTrie{} -} - -// lookupValue determines the type of block n and looks up the value for b. -func (t *derivedPropertiesTrie) lookupValue(n uint32, b byte) uint8 { - switch { - default: - return uint8(derivedPropertiesValues[n<<6+uint32(b)]) - } -} - -// derivedPropertiesValues: 324 blocks, 20736 entries, 20736 bytes -// The third block is the zero block. -var derivedPropertiesValues = [20736]uint8{ - // Block 0x0, offset 0x0 - 0x00: 0x0040, 0x01: 0x0040, 0x02: 0x0040, 0x03: 0x0040, 0x04: 0x0040, 0x05: 0x0040, - 0x06: 0x0040, 0x07: 0x0040, 0x08: 0x0040, 0x09: 0x0040, 0x0a: 0x0040, 0x0b: 0x0040, - 0x0c: 0x0040, 0x0d: 0x0040, 0x0e: 0x0040, 0x0f: 0x0040, 0x10: 0x0040, 0x11: 0x0040, - 0x12: 0x0040, 0x13: 0x0040, 0x14: 0x0040, 0x15: 0x0040, 0x16: 0x0040, 0x17: 0x0040, - 0x18: 0x0040, 0x19: 0x0040, 0x1a: 0x0040, 0x1b: 0x0040, 0x1c: 0x0040, 0x1d: 0x0040, - 0x1e: 0x0040, 0x1f: 0x0040, 0x20: 0x0080, 0x21: 0x00c0, 0x22: 0x00c0, 0x23: 0x00c0, - 0x24: 0x00c0, 0x25: 0x00c0, 0x26: 0x00c0, 0x27: 0x00c0, 0x28: 0x00c0, 0x29: 0x00c0, - 0x2a: 0x00c0, 0x2b: 0x00c0, 0x2c: 0x00c0, 0x2d: 0x00c0, 0x2e: 0x00c0, 0x2f: 0x00c0, - 0x30: 0x00c0, 0x31: 0x00c0, 0x32: 0x00c0, 0x33: 0x00c0, 0x34: 0x00c0, 0x35: 0x00c0, - 0x36: 0x00c0, 0x37: 0x00c0, 0x38: 0x00c0, 0x39: 0x00c0, 0x3a: 0x00c0, 0x3b: 0x00c0, - 0x3c: 0x00c0, 0x3d: 0x00c0, 0x3e: 0x00c0, 0x3f: 0x00c0, - // Block 0x1, offset 0x40 - 0x40: 0x00c0, 0x41: 0x00c0, 0x42: 0x00c0, 0x43: 0x00c0, 0x44: 0x00c0, 0x45: 0x00c0, - 0x46: 0x00c0, 0x47: 0x00c0, 0x48: 0x00c0, 0x49: 0x00c0, 0x4a: 0x00c0, 0x4b: 0x00c0, - 0x4c: 0x00c0, 0x4d: 0x00c0, 0x4e: 0x00c0, 0x4f: 0x00c0, 0x50: 0x00c0, 0x51: 0x00c0, - 0x52: 0x00c0, 0x53: 0x00c0, 0x54: 0x00c0, 0x55: 0x00c0, 0x56: 0x00c0, 0x57: 0x00c0, - 0x58: 0x00c0, 0x59: 0x00c0, 0x5a: 0x00c0, 0x5b: 0x00c0, 0x5c: 0x00c0, 0x5d: 0x00c0, - 0x5e: 0x00c0, 0x5f: 0x00c0, 0x60: 0x00c0, 0x61: 0x00c0, 0x62: 0x00c0, 0x63: 0x00c0, - 0x64: 0x00c0, 0x65: 0x00c0, 0x66: 0x00c0, 0x67: 0x00c0, 0x68: 0x00c0, 0x69: 0x00c0, - 0x6a: 0x00c0, 0x6b: 0x00c0, 0x6c: 0x00c7, 0x6d: 0x00c0, 0x6e: 0x00c0, 0x6f: 0x00c0, - 0x70: 0x00c0, 0x71: 0x00c0, 0x72: 0x00c0, 0x73: 0x00c0, 0x74: 0x00c0, 0x75: 0x00c0, - 0x76: 0x00c0, 0x77: 0x00c0, 0x78: 0x00c0, 0x79: 0x00c0, 0x7a: 0x00c0, 0x7b: 0x00c0, - 0x7c: 0x00c0, 0x7d: 0x00c0, 0x7e: 0x00c0, 0x7f: 0x0040, - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc0: 0x0040, 0xc1: 0x0040, 0xc2: 0x0040, 0xc3: 0x0040, 0xc4: 0x0040, 0xc5: 0x0040, - 0xc6: 0x0040, 0xc7: 0x0040, 0xc8: 0x0040, 0xc9: 0x0040, 0xca: 0x0040, 0xcb: 0x0040, - 0xcc: 0x0040, 0xcd: 0x0040, 0xce: 0x0040, 0xcf: 0x0040, 0xd0: 0x0040, 0xd1: 0x0040, - 0xd2: 0x0040, 0xd3: 0x0040, 0xd4: 0x0040, 0xd5: 0x0040, 0xd6: 0x0040, 0xd7: 0x0040, - 0xd8: 0x0040, 0xd9: 0x0040, 0xda: 0x0040, 0xdb: 0x0040, 0xdc: 0x0040, 0xdd: 0x0040, - 0xde: 0x0040, 0xdf: 0x0040, 0xe0: 0x0080, 0xe1: 0x0080, 0xe2: 0x0080, 0xe3: 0x0080, - 0xe4: 0x0080, 0xe5: 0x0080, 0xe6: 0x0080, 0xe7: 0x0080, 0xe8: 0x0080, 0xe9: 0x0080, - 0xea: 0x0080, 0xeb: 0x0080, 0xec: 0x0080, 0xed: 0x0040, 0xee: 0x0080, 0xef: 0x0080, - 0xf0: 0x0080, 0xf1: 0x0080, 0xf2: 0x0080, 0xf3: 0x0080, 0xf4: 0x0080, 0xf5: 0x0080, - 0xf6: 0x0080, 0xf7: 0x004f, 0xf8: 0x0080, 0xf9: 0x0080, 0xfa: 0x0080, 0xfb: 0x0080, - 0xfc: 0x0080, 0xfd: 0x0080, 0xfe: 0x0080, 0xff: 0x0080, - // Block 0x4, offset 0x100 - 0x100: 0x00c0, 0x101: 0x00c0, 0x102: 0x00c0, 0x103: 0x00c0, 0x104: 0x00c0, 0x105: 0x00c0, - 0x106: 0x00c0, 0x107: 0x00c0, 0x108: 0x00c0, 0x109: 0x00c0, 0x10a: 0x00c0, 0x10b: 0x00c0, - 0x10c: 0x00c0, 0x10d: 0x00c0, 0x10e: 0x00c0, 0x10f: 0x00c0, 0x110: 0x00c0, 0x111: 0x00c0, - 0x112: 0x00c0, 0x113: 0x00c0, 0x114: 0x00c0, 0x115: 0x00c0, 0x116: 0x00c0, 0x117: 0x0080, - 0x118: 0x00c0, 0x119: 0x00c0, 0x11a: 0x00c0, 0x11b: 0x00c0, 0x11c: 0x00c0, 0x11d: 0x00c0, - 0x11e: 0x00c0, 0x11f: 0x00c0, 0x120: 0x00c0, 0x121: 0x00c0, 0x122: 0x00c0, 0x123: 0x00c0, - 0x124: 0x00c0, 0x125: 0x00c0, 0x126: 0x00c0, 0x127: 0x00c0, 0x128: 0x00c0, 0x129: 0x00c0, - 0x12a: 0x00c0, 0x12b: 0x00c0, 0x12c: 0x00c0, 0x12d: 0x00c0, 0x12e: 0x00c0, 0x12f: 0x00c0, - 0x130: 0x00c0, 0x131: 0x00c0, 0x132: 0x00c0, 0x133: 0x00c0, 0x134: 0x00c0, 0x135: 0x00c0, - 0x136: 0x00c0, 0x137: 0x0080, 0x138: 0x00c0, 0x139: 0x00c0, 0x13a: 0x00c0, 0x13b: 0x00c0, - 0x13c: 0x00c0, 0x13d: 0x00c0, 0x13e: 0x00c0, 0x13f: 0x00c0, - // Block 0x5, offset 0x140 - 0x140: 0x00c0, 0x141: 0x00c0, 0x142: 0x00c0, 0x143: 0x00c0, 0x144: 0x00c0, 0x145: 0x00c0, - 0x146: 0x00c0, 0x147: 0x00c0, 0x148: 0x00c0, 0x149: 0x00c0, 0x14a: 0x00c0, 0x14b: 0x00c0, - 0x14c: 0x00c0, 0x14d: 0x00c0, 0x14e: 0x00c0, 0x14f: 0x00c0, 0x150: 0x00c0, 0x151: 0x00c0, - 0x152: 0x00c0, 0x153: 0x00c0, 0x154: 0x00c0, 0x155: 0x00c0, 0x156: 0x00c0, 0x157: 0x00c0, - 0x158: 0x00c0, 0x159: 0x00c0, 0x15a: 0x00c0, 0x15b: 0x00c0, 0x15c: 0x00c0, 0x15d: 0x00c0, - 0x15e: 0x00c0, 0x15f: 0x00c0, 0x160: 0x00c0, 0x161: 0x00c0, 0x162: 0x00c0, 0x163: 0x00c0, - 0x164: 0x00c0, 0x165: 0x00c0, 0x166: 0x00c0, 0x167: 0x00c0, 0x168: 0x00c0, 0x169: 0x00c0, - 0x16a: 0x00c0, 0x16b: 0x00c0, 0x16c: 0x00c0, 0x16d: 0x00c0, 0x16e: 0x00c0, 0x16f: 0x00c0, - 0x170: 0x00c0, 0x171: 0x00c0, 0x172: 0x0080, 0x173: 0x0080, 0x174: 0x00c0, 0x175: 0x00c0, - 0x176: 0x00c0, 0x177: 0x00c0, 0x178: 0x00c0, 0x179: 0x00c0, 0x17a: 0x00c0, 0x17b: 0x00c0, - 0x17c: 0x00c0, 0x17d: 0x00c0, 0x17e: 0x00c0, 0x17f: 0x0080, - // Block 0x6, offset 0x180 - 0x180: 0x0080, 0x181: 0x00c0, 0x182: 0x00c0, 0x183: 0x00c0, 0x184: 0x00c0, 0x185: 0x00c0, - 0x186: 0x00c0, 0x187: 0x00c0, 0x188: 0x00c0, 0x189: 0x0080, 0x18a: 0x00c0, 0x18b: 0x00c0, - 0x18c: 0x00c0, 0x18d: 0x00c0, 0x18e: 0x00c0, 0x18f: 0x00c0, 0x190: 0x00c0, 0x191: 0x00c0, - 0x192: 0x00c0, 0x193: 0x00c0, 0x194: 0x00c0, 0x195: 0x00c0, 0x196: 0x00c0, 0x197: 0x00c0, - 0x198: 0x00c0, 0x199: 0x00c0, 0x19a: 0x00c0, 0x19b: 0x00c0, 0x19c: 0x00c0, 0x19d: 0x00c0, - 0x19e: 0x00c0, 0x19f: 0x00c0, 0x1a0: 0x00c0, 0x1a1: 0x00c0, 0x1a2: 0x00c0, 0x1a3: 0x00c0, - 0x1a4: 0x00c0, 0x1a5: 0x00c0, 0x1a6: 0x00c0, 0x1a7: 0x00c0, 0x1a8: 0x00c0, 0x1a9: 0x00c0, - 0x1aa: 0x00c0, 0x1ab: 0x00c0, 0x1ac: 0x00c0, 0x1ad: 0x00c0, 0x1ae: 0x00c0, 0x1af: 0x00c0, - 0x1b0: 0x00c0, 0x1b1: 0x00c0, 0x1b2: 0x00c0, 0x1b3: 0x00c0, 0x1b4: 0x00c0, 0x1b5: 0x00c0, - 0x1b6: 0x00c0, 0x1b7: 0x00c0, 0x1b8: 0x00c0, 0x1b9: 0x00c0, 0x1ba: 0x00c0, 0x1bb: 0x00c0, - 0x1bc: 0x00c0, 0x1bd: 0x00c0, 0x1be: 0x00c0, 0x1bf: 0x0080, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x00c0, 0x1c1: 0x00c0, 0x1c2: 0x00c0, 0x1c3: 0x00c0, 0x1c4: 0x00c0, 0x1c5: 0x00c0, - 0x1c6: 0x00c0, 0x1c7: 0x00c0, 0x1c8: 0x00c0, 0x1c9: 0x00c0, 0x1ca: 0x00c0, 0x1cb: 0x00c0, - 0x1cc: 0x00c0, 0x1cd: 0x00c0, 0x1ce: 0x00c0, 0x1cf: 0x00c0, 0x1d0: 0x00c0, 0x1d1: 0x00c0, - 0x1d2: 0x00c0, 0x1d3: 0x00c0, 0x1d4: 0x00c0, 0x1d5: 0x00c0, 0x1d6: 0x00c0, 0x1d7: 0x00c0, - 0x1d8: 0x00c0, 0x1d9: 0x00c0, 0x1da: 0x00c0, 0x1db: 0x00c0, 0x1dc: 0x00c0, 0x1dd: 0x00c0, - 0x1de: 0x00c0, 0x1df: 0x00c0, 0x1e0: 0x00c0, 0x1e1: 0x00c0, 0x1e2: 0x00c0, 0x1e3: 0x00c0, - 0x1e4: 0x00c0, 0x1e5: 0x00c0, 0x1e6: 0x00c0, 0x1e7: 0x00c0, 0x1e8: 0x00c0, 0x1e9: 0x00c0, - 0x1ea: 0x00c0, 0x1eb: 0x00c0, 0x1ec: 0x00c0, 0x1ed: 0x00c0, 0x1ee: 0x00c0, 0x1ef: 0x00c0, - 0x1f0: 0x00c0, 0x1f1: 0x00c0, 0x1f2: 0x00c0, 0x1f3: 0x00c0, 0x1f4: 0x00c0, 0x1f5: 0x00c0, - 0x1f6: 0x00c0, 0x1f7: 0x00c0, 0x1f8: 0x00c0, 0x1f9: 0x00c0, 0x1fa: 0x00c0, 0x1fb: 0x00c0, - 0x1fc: 0x00c0, 0x1fd: 0x00c0, 0x1fe: 0x00c0, 0x1ff: 0x00c0, - // Block 0x8, offset 0x200 - 0x200: 0x00c0, 0x201: 0x00c0, 0x202: 0x00c0, 0x203: 0x00c0, 0x204: 0x0080, 0x205: 0x0080, - 0x206: 0x0080, 0x207: 0x0080, 0x208: 0x0080, 0x209: 0x0080, 0x20a: 0x0080, 0x20b: 0x0080, - 0x20c: 0x0080, 0x20d: 0x00c0, 0x20e: 0x00c0, 0x20f: 0x00c0, 0x210: 0x00c0, 0x211: 0x00c0, - 0x212: 0x00c0, 0x213: 0x00c0, 0x214: 0x00c0, 0x215: 0x00c0, 0x216: 0x00c0, 0x217: 0x00c0, - 0x218: 0x00c0, 0x219: 0x00c0, 0x21a: 0x00c0, 0x21b: 0x00c0, 0x21c: 0x00c0, 0x21d: 0x00c0, - 0x21e: 0x00c0, 0x21f: 0x00c0, 0x220: 0x00c0, 0x221: 0x00c0, 0x222: 0x00c0, 0x223: 0x00c0, - 0x224: 0x00c0, 0x225: 0x00c0, 0x226: 0x00c0, 0x227: 0x00c0, 0x228: 0x00c0, 0x229: 0x00c0, - 0x22a: 0x00c0, 0x22b: 0x00c0, 0x22c: 0x00c0, 0x22d: 0x00c0, 0x22e: 0x00c0, 0x22f: 0x00c0, - 0x230: 0x00c0, 0x231: 0x0080, 0x232: 0x0080, 0x233: 0x0080, 0x234: 0x00c0, 0x235: 0x00c0, - 0x236: 0x00c0, 0x237: 0x00c0, 0x238: 0x00c0, 0x239: 0x00c0, 0x23a: 0x00c0, 0x23b: 0x00c0, - 0x23c: 0x00c0, 0x23d: 0x00c0, 0x23e: 0x00c0, 0x23f: 0x00c0, - // Block 0x9, offset 0x240 - 0x240: 0x00c0, 0x241: 0x00c0, 0x242: 0x00c0, 0x243: 0x00c0, 0x244: 0x00c0, 0x245: 0x00c0, - 0x246: 0x00c0, 0x247: 0x00c0, 0x248: 0x00c0, 0x249: 0x00c0, 0x24a: 0x00c0, 0x24b: 0x00c0, - 0x24c: 0x00c0, 0x24d: 0x00c0, 0x24e: 0x00c0, 0x24f: 0x00c0, 0x250: 0x00c0, 0x251: 0x00c0, - 0x252: 0x00c0, 0x253: 0x00c0, 0x254: 0x00c0, 0x255: 0x00c0, 0x256: 0x00c0, 0x257: 0x00c0, - 0x258: 0x00c0, 0x259: 0x00c0, 0x25a: 0x00c0, 0x25b: 0x00c0, 0x25c: 0x00c0, 0x25d: 0x00c0, - 0x25e: 0x00c0, 0x25f: 0x00c0, 0x260: 0x00c0, 0x261: 0x00c0, 0x262: 0x00c0, 0x263: 0x00c0, - 0x264: 0x00c0, 0x265: 0x00c0, 0x266: 0x00c0, 0x267: 0x00c0, 0x268: 0x00c0, 0x269: 0x00c0, - 0x26a: 0x00c0, 0x26b: 0x00c0, 0x26c: 0x00c0, 0x26d: 0x00c0, 0x26e: 0x00c0, 0x26f: 0x00c0, - 0x270: 0x0080, 0x271: 0x0080, 0x272: 0x0080, 0x273: 0x0080, 0x274: 0x0080, 0x275: 0x0080, - 0x276: 0x0080, 0x277: 0x0080, 0x278: 0x0080, 0x279: 0x00c0, 0x27a: 0x00c0, 0x27b: 0x00c0, - 0x27c: 0x00c0, 0x27d: 0x00c0, 0x27e: 0x00c0, 0x27f: 0x00c0, - // Block 0xa, offset 0x280 - 0x280: 0x00c0, 0x281: 0x00c0, 0x282: 0x0080, 0x283: 0x0080, 0x284: 0x0080, 0x285: 0x0080, - 0x286: 0x00c0, 0x287: 0x00c0, 0x288: 0x00c0, 0x289: 0x00c0, 0x28a: 0x00c0, 0x28b: 0x00c0, - 0x28c: 0x00c0, 0x28d: 0x00c0, 0x28e: 0x00c0, 0x28f: 0x00c0, 0x290: 0x00c0, 0x291: 0x00c0, - 0x292: 0x0080, 0x293: 0x0080, 0x294: 0x0080, 0x295: 0x0080, 0x296: 0x0080, 0x297: 0x0080, - 0x298: 0x0080, 0x299: 0x0080, 0x29a: 0x0080, 0x29b: 0x0080, 0x29c: 0x0080, 0x29d: 0x0080, - 0x29e: 0x0080, 0x29f: 0x0080, 0x2a0: 0x0080, 0x2a1: 0x0080, 0x2a2: 0x0080, 0x2a3: 0x0080, - 0x2a4: 0x0080, 0x2a5: 0x0080, 0x2a6: 0x0080, 0x2a7: 0x0080, 0x2a8: 0x0080, 0x2a9: 0x0080, - 0x2aa: 0x0080, 0x2ab: 0x0080, 0x2ac: 0x00c0, 0x2ad: 0x0080, 0x2ae: 0x00c0, 0x2af: 0x0080, - 0x2b0: 0x0080, 0x2b1: 0x0080, 0x2b2: 0x0080, 0x2b3: 0x0080, 0x2b4: 0x0080, 0x2b5: 0x0080, - 0x2b6: 0x0080, 0x2b7: 0x0080, 0x2b8: 0x0080, 0x2b9: 0x0080, 0x2ba: 0x0080, 0x2bb: 0x0080, - 0x2bc: 0x0080, 0x2bd: 0x0080, 0x2be: 0x0080, 0x2bf: 0x0080, - // Block 0xb, offset 0x2c0 - 0x2c0: 0x00c3, 0x2c1: 0x00c3, 0x2c2: 0x00c3, 0x2c3: 0x00c3, 0x2c4: 0x00c3, 0x2c5: 0x00c3, - 0x2c6: 0x00c3, 0x2c7: 0x00c3, 0x2c8: 0x00c3, 0x2c9: 0x00c3, 0x2ca: 0x00c3, 0x2cb: 0x00c3, - 0x2cc: 0x00c3, 0x2cd: 0x00c3, 0x2ce: 0x00c3, 0x2cf: 0x00c3, 0x2d0: 0x00c3, 0x2d1: 0x00c3, - 0x2d2: 0x00c3, 0x2d3: 0x00c3, 0x2d4: 0x00c3, 0x2d5: 0x00c3, 0x2d6: 0x00c3, 0x2d7: 0x00c3, - 0x2d8: 0x00c3, 0x2d9: 0x00c3, 0x2da: 0x00c3, 0x2db: 0x00c3, 0x2dc: 0x00c3, 0x2dd: 0x00c3, - 0x2de: 0x00c3, 0x2df: 0x00c3, 0x2e0: 0x00c3, 0x2e1: 0x00c3, 0x2e2: 0x00c3, 0x2e3: 0x00c3, - 0x2e4: 0x00c3, 0x2e5: 0x00c3, 0x2e6: 0x00c3, 0x2e7: 0x00c3, 0x2e8: 0x00c3, 0x2e9: 0x00c3, - 0x2ea: 0x00c3, 0x2eb: 0x00c3, 0x2ec: 0x00c3, 0x2ed: 0x00c3, 0x2ee: 0x00c3, 0x2ef: 0x00c3, - 0x2f0: 0x00c3, 0x2f1: 0x00c3, 0x2f2: 0x00c3, 0x2f3: 0x00c3, 0x2f4: 0x00c3, 0x2f5: 0x00c3, - 0x2f6: 0x00c3, 0x2f7: 0x00c3, 0x2f8: 0x00c3, 0x2f9: 0x00c3, 0x2fa: 0x00c3, 0x2fb: 0x00c3, - 0x2fc: 0x00c3, 0x2fd: 0x00c3, 0x2fe: 0x00c3, 0x2ff: 0x00c3, - // Block 0xc, offset 0x300 - 0x300: 0x0083, 0x301: 0x0083, 0x302: 0x00c3, 0x303: 0x0083, 0x304: 0x0083, 0x305: 0x00c3, - 0x306: 0x00c3, 0x307: 0x00c3, 0x308: 0x00c3, 0x309: 0x00c3, 0x30a: 0x00c3, 0x30b: 0x00c3, - 0x30c: 0x00c3, 0x30d: 0x00c3, 0x30e: 0x00c3, 0x30f: 0x0040, 0x310: 0x00c3, 0x311: 0x00c3, - 0x312: 0x00c3, 0x313: 0x00c3, 0x314: 0x00c3, 0x315: 0x00c3, 0x316: 0x00c3, 0x317: 0x00c3, - 0x318: 0x00c3, 0x319: 0x00c3, 0x31a: 0x00c3, 0x31b: 0x00c3, 0x31c: 0x00c3, 0x31d: 0x00c3, - 0x31e: 0x00c3, 0x31f: 0x00c3, 0x320: 0x00c3, 0x321: 0x00c3, 0x322: 0x00c3, 0x323: 0x00c3, - 0x324: 0x00c3, 0x325: 0x00c3, 0x326: 0x00c3, 0x327: 0x00c3, 0x328: 0x00c3, 0x329: 0x00c3, - 0x32a: 0x00c3, 0x32b: 0x00c3, 0x32c: 0x00c3, 0x32d: 0x00c3, 0x32e: 0x00c3, 0x32f: 0x00c3, - 0x330: 0x00c8, 0x331: 0x00c8, 0x332: 0x00c8, 0x333: 0x00c8, 0x334: 0x0080, 0x335: 0x0050, - 0x336: 0x00c8, 0x337: 0x00c8, 0x33a: 0x0088, 0x33b: 0x00c8, - 0x33c: 0x00c8, 0x33d: 0x00c8, 0x33e: 0x0080, 0x33f: 0x00c8, - // Block 0xd, offset 0x340 - 0x344: 0x0088, 0x345: 0x0080, - 0x346: 0x00c8, 0x347: 0x0080, 0x348: 0x00c8, 0x349: 0x00c8, 0x34a: 0x00c8, - 0x34c: 0x00c8, 0x34e: 0x00c8, 0x34f: 0x00c8, 0x350: 0x00c8, 0x351: 0x00c8, - 0x352: 0x00c8, 0x353: 0x00c8, 0x354: 0x00c8, 0x355: 0x00c8, 0x356: 0x00c8, 0x357: 0x00c8, - 0x358: 0x00c8, 0x359: 0x00c8, 0x35a: 0x00c8, 0x35b: 0x00c8, 0x35c: 0x00c8, 0x35d: 0x00c8, - 0x35e: 0x00c8, 0x35f: 0x00c8, 0x360: 0x00c8, 0x361: 0x00c8, 0x363: 0x00c8, - 0x364: 0x00c8, 0x365: 0x00c8, 0x366: 0x00c8, 0x367: 0x00c8, 0x368: 0x00c8, 0x369: 0x00c8, - 0x36a: 0x00c8, 0x36b: 0x00c8, 0x36c: 0x00c8, 0x36d: 0x00c8, 0x36e: 0x00c8, 0x36f: 0x00c8, - 0x370: 0x00c8, 0x371: 0x00c8, 0x372: 0x00c8, 0x373: 0x00c8, 0x374: 0x00c8, 0x375: 0x00c8, - 0x376: 0x00c8, 0x377: 0x00c8, 0x378: 0x00c8, 0x379: 0x00c8, 0x37a: 0x00c8, 0x37b: 0x00c8, - 0x37c: 0x00c8, 0x37d: 0x00c8, 0x37e: 0x00c8, 0x37f: 0x00c8, - // Block 0xe, offset 0x380 - 0x380: 0x00c8, 0x381: 0x00c8, 0x382: 0x00c8, 0x383: 0x00c8, 0x384: 0x00c8, 0x385: 0x00c8, - 0x386: 0x00c8, 0x387: 0x00c8, 0x388: 0x00c8, 0x389: 0x00c8, 0x38a: 0x00c8, 0x38b: 0x00c8, - 0x38c: 0x00c8, 0x38d: 0x00c8, 0x38e: 0x00c8, 0x38f: 0x00c8, 0x390: 0x0088, 0x391: 0x0088, - 0x392: 0x0088, 0x393: 0x0088, 0x394: 0x0088, 0x395: 0x0088, 0x396: 0x0088, 0x397: 0x00c8, - 0x398: 0x00c8, 0x399: 0x00c8, 0x39a: 0x00c8, 0x39b: 0x00c8, 0x39c: 0x00c8, 0x39d: 0x00c8, - 0x39e: 0x00c8, 0x39f: 0x00c8, 0x3a0: 0x00c8, 0x3a1: 0x00c8, 0x3a2: 0x00c0, 0x3a3: 0x00c0, - 0x3a4: 0x00c0, 0x3a5: 0x00c0, 0x3a6: 0x00c0, 0x3a7: 0x00c0, 0x3a8: 0x00c0, 0x3a9: 0x00c0, - 0x3aa: 0x00c0, 0x3ab: 0x00c0, 0x3ac: 0x00c0, 0x3ad: 0x00c0, 0x3ae: 0x00c0, 0x3af: 0x00c0, - 0x3b0: 0x0088, 0x3b1: 0x0088, 0x3b2: 0x0088, 0x3b3: 0x00c8, 0x3b4: 0x0088, 0x3b5: 0x0088, - 0x3b6: 0x0088, 0x3b7: 0x00c8, 0x3b8: 0x00c8, 0x3b9: 0x0088, 0x3ba: 0x00c8, 0x3bb: 0x00c8, - 0x3bc: 0x00c8, 0x3bd: 0x00c8, 0x3be: 0x00c8, 0x3bf: 0x00c8, - // Block 0xf, offset 0x3c0 - 0x3c0: 0x00c0, 0x3c1: 0x00c0, 0x3c2: 0x0080, 0x3c3: 0x00c3, 0x3c4: 0x00c3, 0x3c5: 0x00c3, - 0x3c6: 0x00c3, 0x3c7: 0x00c3, 0x3c8: 0x0083, 0x3c9: 0x0083, 0x3ca: 0x00c0, 0x3cb: 0x00c0, - 0x3cc: 0x00c0, 0x3cd: 0x00c0, 0x3ce: 0x00c0, 0x3cf: 0x00c0, 0x3d0: 0x00c0, 0x3d1: 0x00c0, - 0x3d2: 0x00c0, 0x3d3: 0x00c0, 0x3d4: 0x00c0, 0x3d5: 0x00c0, 0x3d6: 0x00c0, 0x3d7: 0x00c0, - 0x3d8: 0x00c0, 0x3d9: 0x00c0, 0x3da: 0x00c0, 0x3db: 0x00c0, 0x3dc: 0x00c0, 0x3dd: 0x00c0, - 0x3de: 0x00c0, 0x3df: 0x00c0, 0x3e0: 0x00c0, 0x3e1: 0x00c0, 0x3e2: 0x00c0, 0x3e3: 0x00c0, - 0x3e4: 0x00c0, 0x3e5: 0x00c0, 0x3e6: 0x00c0, 0x3e7: 0x00c0, 0x3e8: 0x00c0, 0x3e9: 0x00c0, - 0x3ea: 0x00c0, 0x3eb: 0x00c0, 0x3ec: 0x00c0, 0x3ed: 0x00c0, 0x3ee: 0x00c0, 0x3ef: 0x00c0, - 0x3f0: 0x00c0, 0x3f1: 0x00c0, 0x3f2: 0x00c0, 0x3f3: 0x00c0, 0x3f4: 0x00c0, 0x3f5: 0x00c0, - 0x3f6: 0x00c0, 0x3f7: 0x00c0, 0x3f8: 0x00c0, 0x3f9: 0x00c0, 0x3fa: 0x00c0, 0x3fb: 0x00c0, - 0x3fc: 0x00c0, 0x3fd: 0x00c0, 0x3fe: 0x00c0, 0x3ff: 0x00c0, - // Block 0x10, offset 0x400 - 0x400: 0x00c0, 0x401: 0x00c0, 0x402: 0x00c0, 0x403: 0x00c0, 0x404: 0x00c0, 0x405: 0x00c0, - 0x406: 0x00c0, 0x407: 0x00c0, 0x408: 0x00c0, 0x409: 0x00c0, 0x40a: 0x00c0, 0x40b: 0x00c0, - 0x40c: 0x00c0, 0x40d: 0x00c0, 0x40e: 0x00c0, 0x40f: 0x00c0, 0x410: 0x00c0, 0x411: 0x00c0, - 0x412: 0x00c0, 0x413: 0x00c0, 0x414: 0x00c0, 0x415: 0x00c0, 0x416: 0x00c0, 0x417: 0x00c0, - 0x418: 0x00c0, 0x419: 0x00c0, 0x41a: 0x00c0, 0x41b: 0x00c0, 0x41c: 0x00c0, 0x41d: 0x00c0, - 0x41e: 0x00c0, 0x41f: 0x00c0, 0x420: 0x00c0, 0x421: 0x00c0, 0x422: 0x00c0, 0x423: 0x00c0, - 0x424: 0x00c0, 0x425: 0x00c0, 0x426: 0x00c0, 0x427: 0x00c0, 0x428: 0x00c0, 0x429: 0x00c0, - 0x42a: 0x00c0, 0x42b: 0x00c0, 0x42c: 0x00c0, 0x42d: 0x00c0, 0x42e: 0x00c0, 0x42f: 0x00c0, - 0x431: 0x00c0, 0x432: 0x00c0, 0x433: 0x00c0, 0x434: 0x00c0, 0x435: 0x00c0, - 0x436: 0x00c0, 0x437: 0x00c0, 0x438: 0x00c0, 0x439: 0x00c0, 0x43a: 0x00c0, 0x43b: 0x00c0, - 0x43c: 0x00c0, 0x43d: 0x00c0, 0x43e: 0x00c0, 0x43f: 0x00c0, - // Block 0x11, offset 0x440 - 0x440: 0x00c0, 0x441: 0x00c0, 0x442: 0x00c0, 0x443: 0x00c0, 0x444: 0x00c0, 0x445: 0x00c0, - 0x446: 0x00c0, 0x447: 0x00c0, 0x448: 0x00c0, 0x449: 0x00c0, 0x44a: 0x00c0, 0x44b: 0x00c0, - 0x44c: 0x00c0, 0x44d: 0x00c0, 0x44e: 0x00c0, 0x44f: 0x00c0, 0x450: 0x00c0, 0x451: 0x00c0, - 0x452: 0x00c0, 0x453: 0x00c0, 0x454: 0x00c0, 0x455: 0x00c0, 0x456: 0x00c0, - 0x459: 0x00c0, 0x45a: 0x0080, 0x45b: 0x0080, 0x45c: 0x0080, 0x45d: 0x0080, - 0x45e: 0x0080, 0x45f: 0x0080, 0x461: 0x00c0, 0x462: 0x00c0, 0x463: 0x00c0, - 0x464: 0x00c0, 0x465: 0x00c0, 0x466: 0x00c0, 0x467: 0x00c0, 0x468: 0x00c0, 0x469: 0x00c0, - 0x46a: 0x00c0, 0x46b: 0x00c0, 0x46c: 0x00c0, 0x46d: 0x00c0, 0x46e: 0x00c0, 0x46f: 0x00c0, - 0x470: 0x00c0, 0x471: 0x00c0, 0x472: 0x00c0, 0x473: 0x00c0, 0x474: 0x00c0, 0x475: 0x00c0, - 0x476: 0x00c0, 0x477: 0x00c0, 0x478: 0x00c0, 0x479: 0x00c0, 0x47a: 0x00c0, 0x47b: 0x00c0, - 0x47c: 0x00c0, 0x47d: 0x00c0, 0x47e: 0x00c0, 0x47f: 0x00c0, - // Block 0x12, offset 0x480 - 0x480: 0x00c0, 0x481: 0x00c0, 0x482: 0x00c0, 0x483: 0x00c0, 0x484: 0x00c0, 0x485: 0x00c0, - 0x486: 0x00c0, 0x487: 0x0080, 0x489: 0x0080, 0x48a: 0x0080, - 0x48d: 0x0080, 0x48e: 0x0080, 0x48f: 0x0080, 0x491: 0x00cb, - 0x492: 0x00cb, 0x493: 0x00cb, 0x494: 0x00cb, 0x495: 0x00cb, 0x496: 0x00cb, 0x497: 0x00cb, - 0x498: 0x00cb, 0x499: 0x00cb, 0x49a: 0x00cb, 0x49b: 0x00cb, 0x49c: 0x00cb, 0x49d: 0x00cb, - 0x49e: 0x00cb, 0x49f: 0x00cb, 0x4a0: 0x00cb, 0x4a1: 0x00cb, 0x4a2: 0x00cb, 0x4a3: 0x00cb, - 0x4a4: 0x00cb, 0x4a5: 0x00cb, 0x4a6: 0x00cb, 0x4a7: 0x00cb, 0x4a8: 0x00cb, 0x4a9: 0x00cb, - 0x4aa: 0x00cb, 0x4ab: 0x00cb, 0x4ac: 0x00cb, 0x4ad: 0x00cb, 0x4ae: 0x00cb, 0x4af: 0x00cb, - 0x4b0: 0x00cb, 0x4b1: 0x00cb, 0x4b2: 0x00cb, 0x4b3: 0x00cb, 0x4b4: 0x00cb, 0x4b5: 0x00cb, - 0x4b6: 0x00cb, 0x4b7: 0x00cb, 0x4b8: 0x00cb, 0x4b9: 0x00cb, 0x4ba: 0x00cb, 0x4bb: 0x00cb, - 0x4bc: 0x00cb, 0x4bd: 0x00cb, 0x4be: 0x008a, 0x4bf: 0x00cb, - // Block 0x13, offset 0x4c0 - 0x4c0: 0x008a, 0x4c1: 0x00cb, 0x4c2: 0x00cb, 0x4c3: 0x008a, 0x4c4: 0x00cb, 0x4c5: 0x00cb, - 0x4c6: 0x008a, 0x4c7: 0x00cb, - 0x4d0: 0x00ca, 0x4d1: 0x00ca, - 0x4d2: 0x00ca, 0x4d3: 0x00ca, 0x4d4: 0x00ca, 0x4d5: 0x00ca, 0x4d6: 0x00ca, 0x4d7: 0x00ca, - 0x4d8: 0x00ca, 0x4d9: 0x00ca, 0x4da: 0x00ca, 0x4db: 0x00ca, 0x4dc: 0x00ca, 0x4dd: 0x00ca, - 0x4de: 0x00ca, 0x4df: 0x00ca, 0x4e0: 0x00ca, 0x4e1: 0x00ca, 0x4e2: 0x00ca, 0x4e3: 0x00ca, - 0x4e4: 0x00ca, 0x4e5: 0x00ca, 0x4e6: 0x00ca, 0x4e7: 0x00ca, 0x4e8: 0x00ca, 0x4e9: 0x00ca, - 0x4ea: 0x00ca, - 0x4f0: 0x00ca, 0x4f1: 0x00ca, 0x4f2: 0x00ca, 0x4f3: 0x0051, 0x4f4: 0x0051, - // Block 0x14, offset 0x500 - 0x500: 0x0040, 0x501: 0x0040, 0x502: 0x0040, 0x503: 0x0040, 0x504: 0x0040, 0x505: 0x0040, - 0x506: 0x0080, 0x507: 0x0080, 0x508: 0x0080, 0x509: 0x0080, 0x50a: 0x0080, 0x50b: 0x0080, - 0x50c: 0x0080, 0x50d: 0x0080, 0x50e: 0x0080, 0x50f: 0x0080, 0x510: 0x00c3, 0x511: 0x00c3, - 0x512: 0x00c3, 0x513: 0x00c3, 0x514: 0x00c3, 0x515: 0x00c3, 0x516: 0x00c3, 0x517: 0x00c3, - 0x518: 0x00c3, 0x519: 0x00c3, 0x51a: 0x00c3, 0x51b: 0x0080, 0x51c: 0x0040, - 0x51e: 0x0080, 0x51f: 0x0080, 0x520: 0x00c2, 0x521: 0x00c0, 0x522: 0x00c4, 0x523: 0x00c4, - 0x524: 0x00c4, 0x525: 0x00c4, 0x526: 0x00c2, 0x527: 0x00c4, 0x528: 0x00c2, 0x529: 0x00c4, - 0x52a: 0x00c2, 0x52b: 0x00c2, 0x52c: 0x00c2, 0x52d: 0x00c2, 0x52e: 0x00c2, 0x52f: 0x00c4, - 0x530: 0x00c4, 0x531: 0x00c4, 0x532: 0x00c4, 0x533: 0x00c2, 0x534: 0x00c2, 0x535: 0x00c2, - 0x536: 0x00c2, 0x537: 0x00c2, 0x538: 0x00c2, 0x539: 0x00c2, 0x53a: 0x00c2, 0x53b: 0x00c2, - 0x53c: 0x00c2, 0x53d: 0x00c2, 0x53e: 0x00c2, 0x53f: 0x00c2, - // Block 0x15, offset 0x540 - 0x540: 0x0040, 0x541: 0x00c2, 0x542: 0x00c2, 0x543: 0x00c2, 0x544: 0x00c2, 0x545: 0x00c2, - 0x546: 0x00c2, 0x547: 0x00c2, 0x548: 0x00c4, 0x549: 0x00c2, 0x54a: 0x00c2, 0x54b: 0x00c3, - 0x54c: 0x00c3, 0x54d: 0x00c3, 0x54e: 0x00c3, 0x54f: 0x00c3, 0x550: 0x00c3, 0x551: 0x00c3, - 0x552: 0x00c3, 0x553: 0x00c3, 0x554: 0x00c3, 0x555: 0x00c3, 0x556: 0x00c3, 0x557: 0x00c3, - 0x558: 0x00c3, 0x559: 0x00c3, 0x55a: 0x00c3, 0x55b: 0x00c3, 0x55c: 0x00c3, 0x55d: 0x00c3, - 0x55e: 0x00c3, 0x55f: 0x00c3, 0x560: 0x0053, 0x561: 0x0053, 0x562: 0x0053, 0x563: 0x0053, - 0x564: 0x0053, 0x565: 0x0053, 0x566: 0x0053, 0x567: 0x0053, 0x568: 0x0053, 0x569: 0x0053, - 0x56a: 0x0080, 0x56b: 0x0080, 0x56c: 0x0080, 0x56d: 0x0080, 0x56e: 0x00c2, 0x56f: 0x00c2, - 0x570: 0x00c3, 0x571: 0x00c4, 0x572: 0x00c4, 0x573: 0x00c4, 0x574: 0x00c0, 0x575: 0x0084, - 0x576: 0x0084, 0x577: 0x0084, 0x578: 0x0082, 0x579: 0x00c2, 0x57a: 0x00c2, 0x57b: 0x00c2, - 0x57c: 0x00c2, 0x57d: 0x00c2, 0x57e: 0x00c2, 0x57f: 0x00c2, - // Block 0x16, offset 0x580 - 0x580: 0x00c2, 0x581: 0x00c2, 0x582: 0x00c2, 0x583: 0x00c2, 0x584: 0x00c2, 0x585: 0x00c2, - 0x586: 0x00c2, 0x587: 0x00c2, 0x588: 0x00c4, 0x589: 0x00c4, 0x58a: 0x00c4, 0x58b: 0x00c4, - 0x58c: 0x00c4, 0x58d: 0x00c4, 0x58e: 0x00c4, 0x58f: 0x00c4, 0x590: 0x00c4, 0x591: 0x00c4, - 0x592: 0x00c4, 0x593: 0x00c4, 0x594: 0x00c4, 0x595: 0x00c4, 0x596: 0x00c4, 0x597: 0x00c4, - 0x598: 0x00c4, 0x599: 0x00c4, 0x59a: 0x00c2, 0x59b: 0x00c2, 0x59c: 0x00c2, 0x59d: 0x00c2, - 0x59e: 0x00c2, 0x59f: 0x00c2, 0x5a0: 0x00c2, 0x5a1: 0x00c2, 0x5a2: 0x00c2, 0x5a3: 0x00c2, - 0x5a4: 0x00c2, 0x5a5: 0x00c2, 0x5a6: 0x00c2, 0x5a7: 0x00c2, 0x5a8: 0x00c2, 0x5a9: 0x00c2, - 0x5aa: 0x00c2, 0x5ab: 0x00c2, 0x5ac: 0x00c2, 0x5ad: 0x00c2, 0x5ae: 0x00c2, 0x5af: 0x00c2, - 0x5b0: 0x00c2, 0x5b1: 0x00c2, 0x5b2: 0x00c2, 0x5b3: 0x00c2, 0x5b4: 0x00c2, 0x5b5: 0x00c2, - 0x5b6: 0x00c2, 0x5b7: 0x00c2, 0x5b8: 0x00c2, 0x5b9: 0x00c2, 0x5ba: 0x00c2, 0x5bb: 0x00c2, - 0x5bc: 0x00c2, 0x5bd: 0x00c2, 0x5be: 0x00c2, 0x5bf: 0x00c2, - // Block 0x17, offset 0x5c0 - 0x5c0: 0x00c4, 0x5c1: 0x00c2, 0x5c2: 0x00c2, 0x5c3: 0x00c4, 0x5c4: 0x00c4, 0x5c5: 0x00c4, - 0x5c6: 0x00c4, 0x5c7: 0x00c4, 0x5c8: 0x00c4, 0x5c9: 0x00c4, 0x5ca: 0x00c4, 0x5cb: 0x00c4, - 0x5cc: 0x00c2, 0x5cd: 0x00c4, 0x5ce: 0x00c2, 0x5cf: 0x00c4, 0x5d0: 0x00c2, 0x5d1: 0x00c2, - 0x5d2: 0x00c4, 0x5d3: 0x00c4, 0x5d4: 0x0080, 0x5d5: 0x00c4, 0x5d6: 0x00c3, 0x5d7: 0x00c3, - 0x5d8: 0x00c3, 0x5d9: 0x00c3, 0x5da: 0x00c3, 0x5db: 0x00c3, 0x5dc: 0x00c3, 0x5dd: 0x0040, - 0x5de: 0x0080, 0x5df: 0x00c3, 0x5e0: 0x00c3, 0x5e1: 0x00c3, 0x5e2: 0x00c3, 0x5e3: 0x00c3, - 0x5e4: 0x00c3, 0x5e5: 0x00c0, 0x5e6: 0x00c0, 0x5e7: 0x00c3, 0x5e8: 0x00c3, 0x5e9: 0x0080, - 0x5ea: 0x00c3, 0x5eb: 0x00c3, 0x5ec: 0x00c3, 0x5ed: 0x00c3, 0x5ee: 0x00c4, 0x5ef: 0x00c4, - 0x5f0: 0x0054, 0x5f1: 0x0054, 0x5f2: 0x0054, 0x5f3: 0x0054, 0x5f4: 0x0054, 0x5f5: 0x0054, - 0x5f6: 0x0054, 0x5f7: 0x0054, 0x5f8: 0x0054, 0x5f9: 0x0054, 0x5fa: 0x00c2, 0x5fb: 0x00c2, - 0x5fc: 0x00c2, 0x5fd: 0x00c0, 0x5fe: 0x00c0, 0x5ff: 0x00c2, - // Block 0x18, offset 0x600 - 0x600: 0x0080, 0x601: 0x0080, 0x602: 0x0080, 0x603: 0x0080, 0x604: 0x0080, 0x605: 0x0080, - 0x606: 0x0080, 0x607: 0x0080, 0x608: 0x0080, 0x609: 0x0080, 0x60a: 0x0080, 0x60b: 0x0080, - 0x60c: 0x0080, 0x60d: 0x0080, 0x60f: 0x0040, 0x610: 0x00c4, 0x611: 0x00c3, - 0x612: 0x00c2, 0x613: 0x00c2, 0x614: 0x00c2, 0x615: 0x00c4, 0x616: 0x00c4, 0x617: 0x00c4, - 0x618: 0x00c4, 0x619: 0x00c4, 0x61a: 0x00c2, 0x61b: 0x00c2, 0x61c: 0x00c2, 0x61d: 0x00c2, - 0x61e: 0x00c4, 0x61f: 0x00c2, 0x620: 0x00c2, 0x621: 0x00c2, 0x622: 0x00c2, 0x623: 0x00c2, - 0x624: 0x00c2, 0x625: 0x00c2, 0x626: 0x00c2, 0x627: 0x00c2, 0x628: 0x00c4, 0x629: 0x00c2, - 0x62a: 0x00c4, 0x62b: 0x00c2, 0x62c: 0x00c4, 0x62d: 0x00c2, 0x62e: 0x00c2, 0x62f: 0x00c4, - 0x630: 0x00c3, 0x631: 0x00c3, 0x632: 0x00c3, 0x633: 0x00c3, 0x634: 0x00c3, 0x635: 0x00c3, - 0x636: 0x00c3, 0x637: 0x00c3, 0x638: 0x00c3, 0x639: 0x00c3, 0x63a: 0x00c3, 0x63b: 0x00c3, - 0x63c: 0x00c3, 0x63d: 0x00c3, 0x63e: 0x00c3, 0x63f: 0x00c3, - // Block 0x19, offset 0x640 - 0x640: 0x00c3, 0x641: 0x00c3, 0x642: 0x00c3, 0x643: 0x00c3, 0x644: 0x00c3, 0x645: 0x00c3, - 0x646: 0x00c3, 0x647: 0x00c3, 0x648: 0x00c3, 0x649: 0x00c3, 0x64a: 0x00c3, - 0x64d: 0x00c4, 0x64e: 0x00c2, 0x64f: 0x00c2, 0x650: 0x00c2, 0x651: 0x00c2, - 0x652: 0x00c2, 0x653: 0x00c2, 0x654: 0x00c2, 0x655: 0x00c2, 0x656: 0x00c2, 0x657: 0x00c2, - 0x658: 0x00c2, 0x659: 0x00c4, 0x65a: 0x00c4, 0x65b: 0x00c4, 0x65c: 0x00c2, 0x65d: 0x00c2, - 0x65e: 0x00c2, 0x65f: 0x00c2, 0x660: 0x00c2, 0x661: 0x00c2, 0x662: 0x00c2, 0x663: 0x00c2, - 0x664: 0x00c2, 0x665: 0x00c2, 0x666: 0x00c2, 0x667: 0x00c2, 0x668: 0x00c2, 0x669: 0x00c2, - 0x66a: 0x00c2, 0x66b: 0x00c4, 0x66c: 0x00c4, 0x66d: 0x00c2, 0x66e: 0x00c2, 0x66f: 0x00c2, - 0x670: 0x00c2, 0x671: 0x00c4, 0x672: 0x00c2, 0x673: 0x00c4, 0x674: 0x00c4, 0x675: 0x00c2, - 0x676: 0x00c2, 0x677: 0x00c2, 0x678: 0x00c4, 0x679: 0x00c4, 0x67a: 0x00c2, 0x67b: 0x00c2, - 0x67c: 0x00c2, 0x67d: 0x00c2, 0x67e: 0x00c2, 0x67f: 0x00c2, - // Block 0x1a, offset 0x680 - 0x680: 0x00c0, 0x681: 0x00c0, 0x682: 0x00c0, 0x683: 0x00c0, 0x684: 0x00c0, 0x685: 0x00c0, - 0x686: 0x00c0, 0x687: 0x00c0, 0x688: 0x00c0, 0x689: 0x00c0, 0x68a: 0x00c0, 0x68b: 0x00c0, - 0x68c: 0x00c0, 0x68d: 0x00c0, 0x68e: 0x00c0, 0x68f: 0x00c0, 0x690: 0x00c0, 0x691: 0x00c0, - 0x692: 0x00c0, 0x693: 0x00c0, 0x694: 0x00c0, 0x695: 0x00c0, 0x696: 0x00c0, 0x697: 0x00c0, - 0x698: 0x00c0, 0x699: 0x00c0, 0x69a: 0x00c0, 0x69b: 0x00c0, 0x69c: 0x00c0, 0x69d: 0x00c0, - 0x69e: 0x00c0, 0x69f: 0x00c0, 0x6a0: 0x00c0, 0x6a1: 0x00c0, 0x6a2: 0x00c0, 0x6a3: 0x00c0, - 0x6a4: 0x00c0, 0x6a5: 0x00c0, 0x6a6: 0x00c3, 0x6a7: 0x00c3, 0x6a8: 0x00c3, 0x6a9: 0x00c3, - 0x6aa: 0x00c3, 0x6ab: 0x00c3, 0x6ac: 0x00c3, 0x6ad: 0x00c3, 0x6ae: 0x00c3, 0x6af: 0x00c3, - 0x6b0: 0x00c3, 0x6b1: 0x00c0, - // Block 0x1b, offset 0x6c0 - 0x6c0: 0x00c0, 0x6c1: 0x00c0, 0x6c2: 0x00c0, 0x6c3: 0x00c0, 0x6c4: 0x00c0, 0x6c5: 0x00c0, - 0x6c6: 0x00c0, 0x6c7: 0x00c0, 0x6c8: 0x00c0, 0x6c9: 0x00c0, 0x6ca: 0x00c2, 0x6cb: 0x00c2, - 0x6cc: 0x00c2, 0x6cd: 0x00c2, 0x6ce: 0x00c2, 0x6cf: 0x00c2, 0x6d0: 0x00c2, 0x6d1: 0x00c2, - 0x6d2: 0x00c2, 0x6d3: 0x00c2, 0x6d4: 0x00c2, 0x6d5: 0x00c2, 0x6d6: 0x00c2, 0x6d7: 0x00c2, - 0x6d8: 0x00c2, 0x6d9: 0x00c2, 0x6da: 0x00c2, 0x6db: 0x00c2, 0x6dc: 0x00c2, 0x6dd: 0x00c2, - 0x6de: 0x00c2, 0x6df: 0x00c2, 0x6e0: 0x00c2, 0x6e1: 0x00c2, 0x6e2: 0x00c2, 0x6e3: 0x00c2, - 0x6e4: 0x00c2, 0x6e5: 0x00c2, 0x6e6: 0x00c2, 0x6e7: 0x00c2, 0x6e8: 0x00c2, 0x6e9: 0x00c2, - 0x6ea: 0x00c2, 0x6eb: 0x00c3, 0x6ec: 0x00c3, 0x6ed: 0x00c3, 0x6ee: 0x00c3, 0x6ef: 0x00c3, - 0x6f0: 0x00c3, 0x6f1: 0x00c3, 0x6f2: 0x00c3, 0x6f3: 0x00c3, 0x6f4: 0x00c0, 0x6f5: 0x00c0, - 0x6f6: 0x0080, 0x6f7: 0x0080, 0x6f8: 0x0080, 0x6f9: 0x0080, 0x6fa: 0x0040, - // Block 0x1c, offset 0x700 - 0x700: 0x00c0, 0x701: 0x00c0, 0x702: 0x00c0, 0x703: 0x00c0, 0x704: 0x00c0, 0x705: 0x00c0, - 0x706: 0x00c0, 0x707: 0x00c0, 0x708: 0x00c0, 0x709: 0x00c0, 0x70a: 0x00c0, 0x70b: 0x00c0, - 0x70c: 0x00c0, 0x70d: 0x00c0, 0x70e: 0x00c0, 0x70f: 0x00c0, 0x710: 0x00c0, 0x711: 0x00c0, - 0x712: 0x00c0, 0x713: 0x00c0, 0x714: 0x00c0, 0x715: 0x00c0, 0x716: 0x00c3, 0x717: 0x00c3, - 0x718: 0x00c3, 0x719: 0x00c3, 0x71a: 0x00c0, 0x71b: 0x00c3, 0x71c: 0x00c3, 0x71d: 0x00c3, - 0x71e: 0x00c3, 0x71f: 0x00c3, 0x720: 0x00c3, 0x721: 0x00c3, 0x722: 0x00c3, 0x723: 0x00c3, - 0x724: 0x00c0, 0x725: 0x00c3, 0x726: 0x00c3, 0x727: 0x00c3, 0x728: 0x00c0, 0x729: 0x00c3, - 0x72a: 0x00c3, 0x72b: 0x00c3, 0x72c: 0x00c3, 0x72d: 0x00c3, - 0x730: 0x0080, 0x731: 0x0080, 0x732: 0x0080, 0x733: 0x0080, 0x734: 0x0080, 0x735: 0x0080, - 0x736: 0x0080, 0x737: 0x0080, 0x738: 0x0080, 0x739: 0x0080, 0x73a: 0x0080, 0x73b: 0x0080, - 0x73c: 0x0080, 0x73d: 0x0080, 0x73e: 0x0080, - // Block 0x1d, offset 0x740 - 0x740: 0x00c4, 0x741: 0x00c2, 0x742: 0x00c2, 0x743: 0x00c2, 0x744: 0x00c2, 0x745: 0x00c2, - 0x746: 0x00c4, 0x747: 0x00c4, 0x748: 0x00c2, 0x749: 0x00c4, 0x74a: 0x00c2, 0x74b: 0x00c2, - 0x74c: 0x00c2, 0x74d: 0x00c2, 0x74e: 0x00c2, 0x74f: 0x00c2, 0x750: 0x00c2, 0x751: 0x00c2, - 0x752: 0x00c2, 0x753: 0x00c2, 0x754: 0x00c4, 0x755: 0x00c2, 0x756: 0x00c0, 0x757: 0x00c0, - 0x758: 0x00c0, 0x759: 0x00c3, 0x75a: 0x00c3, 0x75b: 0x00c3, - 0x75e: 0x0080, - // Block 0x1e, offset 0x780 - 0x7a0: 0x00c2, 0x7a1: 0x00c2, 0x7a2: 0x00c2, 0x7a3: 0x00c2, - 0x7a4: 0x00c2, 0x7a5: 0x00c2, 0x7a6: 0x00c2, 0x7a7: 0x00c2, 0x7a8: 0x00c2, 0x7a9: 0x00c2, - 0x7aa: 0x00c4, 0x7ab: 0x00c4, 0x7ac: 0x00c4, 0x7ad: 0x00c0, 0x7ae: 0x00c4, 0x7af: 0x00c2, - 0x7b0: 0x00c2, 0x7b1: 0x00c4, 0x7b2: 0x00c4, 0x7b3: 0x00c2, 0x7b4: 0x00c2, - 0x7b6: 0x00c2, 0x7b7: 0x00c2, 0x7b8: 0x00c2, 0x7b9: 0x00c4, 0x7ba: 0x00c2, 0x7bb: 0x00c2, - 0x7bc: 0x00c2, 0x7bd: 0x00c2, - // Block 0x1f, offset 0x7c0 - 0x7d4: 0x00c3, 0x7d5: 0x00c3, 0x7d6: 0x00c3, 0x7d7: 0x00c3, - 0x7d8: 0x00c3, 0x7d9: 0x00c3, 0x7da: 0x00c3, 0x7db: 0x00c3, 0x7dc: 0x00c3, 0x7dd: 0x00c3, - 0x7de: 0x00c3, 0x7df: 0x00c3, 0x7e0: 0x00c3, 0x7e1: 0x00c3, 0x7e2: 0x0040, 0x7e3: 0x00c3, - 0x7e4: 0x00c3, 0x7e5: 0x00c3, 0x7e6: 0x00c3, 0x7e7: 0x00c3, 0x7e8: 0x00c3, 0x7e9: 0x00c3, - 0x7ea: 0x00c3, 0x7eb: 0x00c3, 0x7ec: 0x00c3, 0x7ed: 0x00c3, 0x7ee: 0x00c3, 0x7ef: 0x00c3, - 0x7f0: 0x00c3, 0x7f1: 0x00c3, 0x7f2: 0x00c3, 0x7f3: 0x00c3, 0x7f4: 0x00c3, 0x7f5: 0x00c3, - 0x7f6: 0x00c3, 0x7f7: 0x00c3, 0x7f8: 0x00c3, 0x7f9: 0x00c3, 0x7fa: 0x00c3, 0x7fb: 0x00c3, - 0x7fc: 0x00c3, 0x7fd: 0x00c3, 0x7fe: 0x00c3, 0x7ff: 0x00c3, - // Block 0x20, offset 0x800 - 0x800: 0x00c3, 0x801: 0x00c3, 0x802: 0x00c3, 0x803: 0x00c0, 0x804: 0x00c0, 0x805: 0x00c0, - 0x806: 0x00c0, 0x807: 0x00c0, 0x808: 0x00c0, 0x809: 0x00c0, 0x80a: 0x00c0, 0x80b: 0x00c0, - 0x80c: 0x00c0, 0x80d: 0x00c0, 0x80e: 0x00c0, 0x80f: 0x00c0, 0x810: 0x00c0, 0x811: 0x00c0, - 0x812: 0x00c0, 0x813: 0x00c0, 0x814: 0x00c0, 0x815: 0x00c0, 0x816: 0x00c0, 0x817: 0x00c0, - 0x818: 0x00c0, 0x819: 0x00c0, 0x81a: 0x00c0, 0x81b: 0x00c0, 0x81c: 0x00c0, 0x81d: 0x00c0, - 0x81e: 0x00c0, 0x81f: 0x00c0, 0x820: 0x00c0, 0x821: 0x00c0, 0x822: 0x00c0, 0x823: 0x00c0, - 0x824: 0x00c0, 0x825: 0x00c0, 0x826: 0x00c0, 0x827: 0x00c0, 0x828: 0x00c0, 0x829: 0x00c0, - 0x82a: 0x00c0, 0x82b: 0x00c0, 0x82c: 0x00c0, 0x82d: 0x00c0, 0x82e: 0x00c0, 0x82f: 0x00c0, - 0x830: 0x00c0, 0x831: 0x00c0, 0x832: 0x00c0, 0x833: 0x00c0, 0x834: 0x00c0, 0x835: 0x00c0, - 0x836: 0x00c0, 0x837: 0x00c0, 0x838: 0x00c0, 0x839: 0x00c0, 0x83a: 0x00c3, 0x83b: 0x00c0, - 0x83c: 0x00c3, 0x83d: 0x00c0, 0x83e: 0x00c0, 0x83f: 0x00c0, - // Block 0x21, offset 0x840 - 0x840: 0x00c0, 0x841: 0x00c3, 0x842: 0x00c3, 0x843: 0x00c3, 0x844: 0x00c3, 0x845: 0x00c3, - 0x846: 0x00c3, 0x847: 0x00c3, 0x848: 0x00c3, 0x849: 0x00c0, 0x84a: 0x00c0, 0x84b: 0x00c0, - 0x84c: 0x00c0, 0x84d: 0x00c6, 0x84e: 0x00c0, 0x84f: 0x00c0, 0x850: 0x00c0, 0x851: 0x00c3, - 0x852: 0x00c3, 0x853: 0x00c3, 0x854: 0x00c3, 0x855: 0x00c3, 0x856: 0x00c3, 0x857: 0x00c3, - 0x858: 0x0080, 0x859: 0x0080, 0x85a: 0x0080, 0x85b: 0x0080, 0x85c: 0x0080, 0x85d: 0x0080, - 0x85e: 0x0080, 0x85f: 0x0080, 0x860: 0x00c0, 0x861: 0x00c0, 0x862: 0x00c3, 0x863: 0x00c3, - 0x864: 0x0080, 0x865: 0x0080, 0x866: 0x00c0, 0x867: 0x00c0, 0x868: 0x00c0, 0x869: 0x00c0, - 0x86a: 0x00c0, 0x86b: 0x00c0, 0x86c: 0x00c0, 0x86d: 0x00c0, 0x86e: 0x00c0, 0x86f: 0x00c0, - 0x870: 0x0080, 0x871: 0x00c0, 0x872: 0x00c0, 0x873: 0x00c0, 0x874: 0x00c0, 0x875: 0x00c0, - 0x876: 0x00c0, 0x877: 0x00c0, 0x878: 0x00c0, 0x879: 0x00c0, 0x87a: 0x00c0, 0x87b: 0x00c0, - 0x87c: 0x00c0, 0x87d: 0x00c0, 0x87e: 0x00c0, 0x87f: 0x00c0, - // Block 0x22, offset 0x880 - 0x880: 0x00c0, 0x881: 0x00c3, 0x882: 0x00c0, 0x883: 0x00c0, 0x885: 0x00c0, - 0x886: 0x00c0, 0x887: 0x00c0, 0x888: 0x00c0, 0x889: 0x00c0, 0x88a: 0x00c0, 0x88b: 0x00c0, - 0x88c: 0x00c0, 0x88f: 0x00c0, 0x890: 0x00c0, - 0x893: 0x00c0, 0x894: 0x00c0, 0x895: 0x00c0, 0x896: 0x00c0, 0x897: 0x00c0, - 0x898: 0x00c0, 0x899: 0x00c0, 0x89a: 0x00c0, 0x89b: 0x00c0, 0x89c: 0x00c0, 0x89d: 0x00c0, - 0x89e: 0x00c0, 0x89f: 0x00c0, 0x8a0: 0x00c0, 0x8a1: 0x00c0, 0x8a2: 0x00c0, 0x8a3: 0x00c0, - 0x8a4: 0x00c0, 0x8a5: 0x00c0, 0x8a6: 0x00c0, 0x8a7: 0x00c0, 0x8a8: 0x00c0, - 0x8aa: 0x00c0, 0x8ab: 0x00c0, 0x8ac: 0x00c0, 0x8ad: 0x00c0, 0x8ae: 0x00c0, 0x8af: 0x00c0, - 0x8b0: 0x00c0, 0x8b2: 0x00c0, - 0x8b6: 0x00c0, 0x8b7: 0x00c0, 0x8b8: 0x00c0, 0x8b9: 0x00c0, - 0x8bc: 0x00c3, 0x8bd: 0x00c0, 0x8be: 0x00c0, 0x8bf: 0x00c0, - // Block 0x23, offset 0x8c0 - 0x8c0: 0x00c0, 0x8c1: 0x00c3, 0x8c2: 0x00c3, 0x8c3: 0x00c3, 0x8c4: 0x00c3, - 0x8c7: 0x00c0, 0x8c8: 0x00c0, 0x8cb: 0x00c0, - 0x8cc: 0x00c0, 0x8cd: 0x00c6, 0x8ce: 0x00c0, - 0x8d7: 0x00c0, - 0x8dc: 0x0080, 0x8dd: 0x0080, - 0x8df: 0x0080, 0x8e0: 0x00c0, 0x8e1: 0x00c0, 0x8e2: 0x00c3, 0x8e3: 0x00c3, - 0x8e6: 0x00c0, 0x8e7: 0x00c0, 0x8e8: 0x00c0, 0x8e9: 0x00c0, - 0x8ea: 0x00c0, 0x8eb: 0x00c0, 0x8ec: 0x00c0, 0x8ed: 0x00c0, 0x8ee: 0x00c0, 0x8ef: 0x00c0, - 0x8f0: 0x00c0, 0x8f1: 0x00c0, 0x8f2: 0x0080, 0x8f3: 0x0080, 0x8f4: 0x0080, 0x8f5: 0x0080, - 0x8f6: 0x0080, 0x8f7: 0x0080, 0x8f8: 0x0080, 0x8f9: 0x0080, 0x8fa: 0x0080, 0x8fb: 0x0080, - // Block 0x24, offset 0x900 - 0x901: 0x00c3, 0x902: 0x00c3, 0x903: 0x00c0, 0x905: 0x00c0, - 0x906: 0x00c0, 0x907: 0x00c0, 0x908: 0x00c0, 0x909: 0x00c0, 0x90a: 0x00c0, - 0x90f: 0x00c0, 0x910: 0x00c0, - 0x913: 0x00c0, 0x914: 0x00c0, 0x915: 0x00c0, 0x916: 0x00c0, 0x917: 0x00c0, - 0x918: 0x00c0, 0x919: 0x00c0, 0x91a: 0x00c0, 0x91b: 0x00c0, 0x91c: 0x00c0, 0x91d: 0x00c0, - 0x91e: 0x00c0, 0x91f: 0x00c0, 0x920: 0x00c0, 0x921: 0x00c0, 0x922: 0x00c0, 0x923: 0x00c0, - 0x924: 0x00c0, 0x925: 0x00c0, 0x926: 0x00c0, 0x927: 0x00c0, 0x928: 0x00c0, - 0x92a: 0x00c0, 0x92b: 0x00c0, 0x92c: 0x00c0, 0x92d: 0x00c0, 0x92e: 0x00c0, 0x92f: 0x00c0, - 0x930: 0x00c0, 0x932: 0x00c0, 0x933: 0x0080, 0x935: 0x00c0, - 0x936: 0x0080, 0x938: 0x00c0, 0x939: 0x00c0, - 0x93c: 0x00c3, 0x93e: 0x00c0, 0x93f: 0x00c0, - // Block 0x25, offset 0x940 - 0x940: 0x00c0, 0x941: 0x00c3, 0x942: 0x00c3, - 0x947: 0x00c3, 0x948: 0x00c3, 0x94b: 0x00c3, - 0x94c: 0x00c3, 0x94d: 0x00c6, 0x951: 0x00c3, - 0x959: 0x0080, 0x95a: 0x0080, 0x95b: 0x0080, 0x95c: 0x00c0, - 0x95e: 0x0080, - 0x966: 0x00c0, 0x967: 0x00c0, 0x968: 0x00c0, 0x969: 0x00c0, - 0x96a: 0x00c0, 0x96b: 0x00c0, 0x96c: 0x00c0, 0x96d: 0x00c0, 0x96e: 0x00c0, 0x96f: 0x00c0, - 0x970: 0x00c3, 0x971: 0x00c3, 0x972: 0x00c0, 0x973: 0x00c0, 0x974: 0x00c0, 0x975: 0x00c3, - // Block 0x26, offset 0x980 - 0x981: 0x00c3, 0x982: 0x00c3, 0x983: 0x00c0, 0x985: 0x00c0, - 0x986: 0x00c0, 0x987: 0x00c0, 0x988: 0x00c0, 0x989: 0x00c0, 0x98a: 0x00c0, 0x98b: 0x00c0, - 0x98c: 0x00c0, 0x98d: 0x00c0, 0x98f: 0x00c0, 0x990: 0x00c0, 0x991: 0x00c0, - 0x993: 0x00c0, 0x994: 0x00c0, 0x995: 0x00c0, 0x996: 0x00c0, 0x997: 0x00c0, - 0x998: 0x00c0, 0x999: 0x00c0, 0x99a: 0x00c0, 0x99b: 0x00c0, 0x99c: 0x00c0, 0x99d: 0x00c0, - 0x99e: 0x00c0, 0x99f: 0x00c0, 0x9a0: 0x00c0, 0x9a1: 0x00c0, 0x9a2: 0x00c0, 0x9a3: 0x00c0, - 0x9a4: 0x00c0, 0x9a5: 0x00c0, 0x9a6: 0x00c0, 0x9a7: 0x00c0, 0x9a8: 0x00c0, - 0x9aa: 0x00c0, 0x9ab: 0x00c0, 0x9ac: 0x00c0, 0x9ad: 0x00c0, 0x9ae: 0x00c0, 0x9af: 0x00c0, - 0x9b0: 0x00c0, 0x9b2: 0x00c0, 0x9b3: 0x00c0, 0x9b5: 0x00c0, - 0x9b6: 0x00c0, 0x9b7: 0x00c0, 0x9b8: 0x00c0, 0x9b9: 0x00c0, - 0x9bc: 0x00c3, 0x9bd: 0x00c0, 0x9be: 0x00c0, 0x9bf: 0x00c0, - // Block 0x27, offset 0x9c0 - 0x9c0: 0x00c0, 0x9c1: 0x00c3, 0x9c2: 0x00c3, 0x9c3: 0x00c3, 0x9c4: 0x00c3, 0x9c5: 0x00c3, - 0x9c7: 0x00c3, 0x9c8: 0x00c3, 0x9c9: 0x00c0, 0x9cb: 0x00c0, - 0x9cc: 0x00c0, 0x9cd: 0x00c6, 0x9d0: 0x00c0, - 0x9e0: 0x00c0, 0x9e1: 0x00c0, 0x9e2: 0x00c3, 0x9e3: 0x00c3, - 0x9e6: 0x00c0, 0x9e7: 0x00c0, 0x9e8: 0x00c0, 0x9e9: 0x00c0, - 0x9ea: 0x00c0, 0x9eb: 0x00c0, 0x9ec: 0x00c0, 0x9ed: 0x00c0, 0x9ee: 0x00c0, 0x9ef: 0x00c0, - 0x9f0: 0x0080, 0x9f1: 0x0080, - 0x9f9: 0x00c0, - // Block 0x28, offset 0xa00 - 0xa01: 0x00c3, 0xa02: 0x00c0, 0xa03: 0x00c0, 0xa05: 0x00c0, - 0xa06: 0x00c0, 0xa07: 0x00c0, 0xa08: 0x00c0, 0xa09: 0x00c0, 0xa0a: 0x00c0, 0xa0b: 0x00c0, - 0xa0c: 0x00c0, 0xa0f: 0x00c0, 0xa10: 0x00c0, - 0xa13: 0x00c0, 0xa14: 0x00c0, 0xa15: 0x00c0, 0xa16: 0x00c0, 0xa17: 0x00c0, - 0xa18: 0x00c0, 0xa19: 0x00c0, 0xa1a: 0x00c0, 0xa1b: 0x00c0, 0xa1c: 0x00c0, 0xa1d: 0x00c0, - 0xa1e: 0x00c0, 0xa1f: 0x00c0, 0xa20: 0x00c0, 0xa21: 0x00c0, 0xa22: 0x00c0, 0xa23: 0x00c0, - 0xa24: 0x00c0, 0xa25: 0x00c0, 0xa26: 0x00c0, 0xa27: 0x00c0, 0xa28: 0x00c0, - 0xa2a: 0x00c0, 0xa2b: 0x00c0, 0xa2c: 0x00c0, 0xa2d: 0x00c0, 0xa2e: 0x00c0, 0xa2f: 0x00c0, - 0xa30: 0x00c0, 0xa32: 0x00c0, 0xa33: 0x00c0, 0xa35: 0x00c0, - 0xa36: 0x00c0, 0xa37: 0x00c0, 0xa38: 0x00c0, 0xa39: 0x00c0, - 0xa3c: 0x00c3, 0xa3d: 0x00c0, 0xa3e: 0x00c0, 0xa3f: 0x00c3, - // Block 0x29, offset 0xa40 - 0xa40: 0x00c0, 0xa41: 0x00c3, 0xa42: 0x00c3, 0xa43: 0x00c3, 0xa44: 0x00c3, - 0xa47: 0x00c0, 0xa48: 0x00c0, 0xa4b: 0x00c0, - 0xa4c: 0x00c0, 0xa4d: 0x00c6, - 0xa56: 0x00c3, 0xa57: 0x00c0, - 0xa5c: 0x0080, 0xa5d: 0x0080, - 0xa5f: 0x00c0, 0xa60: 0x00c0, 0xa61: 0x00c0, 0xa62: 0x00c3, 0xa63: 0x00c3, - 0xa66: 0x00c0, 0xa67: 0x00c0, 0xa68: 0x00c0, 0xa69: 0x00c0, - 0xa6a: 0x00c0, 0xa6b: 0x00c0, 0xa6c: 0x00c0, 0xa6d: 0x00c0, 0xa6e: 0x00c0, 0xa6f: 0x00c0, - 0xa70: 0x0080, 0xa71: 0x00c0, 0xa72: 0x0080, 0xa73: 0x0080, 0xa74: 0x0080, 0xa75: 0x0080, - 0xa76: 0x0080, 0xa77: 0x0080, - // Block 0x2a, offset 0xa80 - 0xa82: 0x00c3, 0xa83: 0x00c0, 0xa85: 0x00c0, - 0xa86: 0x00c0, 0xa87: 0x00c0, 0xa88: 0x00c0, 0xa89: 0x00c0, 0xa8a: 0x00c0, - 0xa8e: 0x00c0, 0xa8f: 0x00c0, 0xa90: 0x00c0, - 0xa92: 0x00c0, 0xa93: 0x00c0, 0xa94: 0x00c0, 0xa95: 0x00c0, - 0xa99: 0x00c0, 0xa9a: 0x00c0, 0xa9c: 0x00c0, - 0xa9e: 0x00c0, 0xa9f: 0x00c0, 0xaa3: 0x00c0, - 0xaa4: 0x00c0, 0xaa8: 0x00c0, 0xaa9: 0x00c0, - 0xaaa: 0x00c0, 0xaae: 0x00c0, 0xaaf: 0x00c0, - 0xab0: 0x00c0, 0xab1: 0x00c0, 0xab2: 0x00c0, 0xab3: 0x00c0, 0xab4: 0x00c0, 0xab5: 0x00c0, - 0xab6: 0x00c0, 0xab7: 0x00c0, 0xab8: 0x00c0, 0xab9: 0x00c0, - 0xabe: 0x00c0, 0xabf: 0x00c0, - // Block 0x2b, offset 0xac0 - 0xac0: 0x00c3, 0xac1: 0x00c0, 0xac2: 0x00c0, - 0xac6: 0x00c0, 0xac7: 0x00c0, 0xac8: 0x00c0, 0xaca: 0x00c0, 0xacb: 0x00c0, - 0xacc: 0x00c0, 0xacd: 0x00c6, 0xad0: 0x00c0, - 0xad7: 0x00c0, - 0xae6: 0x00c0, 0xae7: 0x00c0, 0xae8: 0x00c0, 0xae9: 0x00c0, - 0xaea: 0x00c0, 0xaeb: 0x00c0, 0xaec: 0x00c0, 0xaed: 0x00c0, 0xaee: 0x00c0, 0xaef: 0x00c0, - 0xaf0: 0x0080, 0xaf1: 0x0080, 0xaf2: 0x0080, 0xaf3: 0x0080, 0xaf4: 0x0080, 0xaf5: 0x0080, - 0xaf6: 0x0080, 0xaf7: 0x0080, 0xaf8: 0x0080, 0xaf9: 0x0080, 0xafa: 0x0080, - // Block 0x2c, offset 0xb00 - 0xb00: 0x00c3, 0xb01: 0x00c0, 0xb02: 0x00c0, 0xb03: 0x00c0, 0xb05: 0x00c0, - 0xb06: 0x00c0, 0xb07: 0x00c0, 0xb08: 0x00c0, 0xb09: 0x00c0, 0xb0a: 0x00c0, 0xb0b: 0x00c0, - 0xb0c: 0x00c0, 0xb0e: 0x00c0, 0xb0f: 0x00c0, 0xb10: 0x00c0, - 0xb12: 0x00c0, 0xb13: 0x00c0, 0xb14: 0x00c0, 0xb15: 0x00c0, 0xb16: 0x00c0, 0xb17: 0x00c0, - 0xb18: 0x00c0, 0xb19: 0x00c0, 0xb1a: 0x00c0, 0xb1b: 0x00c0, 0xb1c: 0x00c0, 0xb1d: 0x00c0, - 0xb1e: 0x00c0, 0xb1f: 0x00c0, 0xb20: 0x00c0, 0xb21: 0x00c0, 0xb22: 0x00c0, 0xb23: 0x00c0, - 0xb24: 0x00c0, 0xb25: 0x00c0, 0xb26: 0x00c0, 0xb27: 0x00c0, 0xb28: 0x00c0, - 0xb2a: 0x00c0, 0xb2b: 0x00c0, 0xb2c: 0x00c0, 0xb2d: 0x00c0, 0xb2e: 0x00c0, 0xb2f: 0x00c0, - 0xb30: 0x00c0, 0xb31: 0x00c0, 0xb32: 0x00c0, 0xb33: 0x00c0, 0xb34: 0x00c0, 0xb35: 0x00c0, - 0xb36: 0x00c0, 0xb37: 0x00c0, 0xb38: 0x00c0, 0xb39: 0x00c0, - 0xb3d: 0x00c0, 0xb3e: 0x00c3, 0xb3f: 0x00c3, - // Block 0x2d, offset 0xb40 - 0xb40: 0x00c3, 0xb41: 0x00c0, 0xb42: 0x00c0, 0xb43: 0x00c0, 0xb44: 0x00c0, - 0xb46: 0x00c3, 0xb47: 0x00c3, 0xb48: 0x00c3, 0xb4a: 0x00c3, 0xb4b: 0x00c3, - 0xb4c: 0x00c3, 0xb4d: 0x00c6, - 0xb55: 0x00c3, 0xb56: 0x00c3, - 0xb58: 0x00c0, 0xb59: 0x00c0, 0xb5a: 0x00c0, - 0xb60: 0x00c0, 0xb61: 0x00c0, 0xb62: 0x00c3, 0xb63: 0x00c3, - 0xb66: 0x00c0, 0xb67: 0x00c0, 0xb68: 0x00c0, 0xb69: 0x00c0, - 0xb6a: 0x00c0, 0xb6b: 0x00c0, 0xb6c: 0x00c0, 0xb6d: 0x00c0, 0xb6e: 0x00c0, 0xb6f: 0x00c0, - 0xb78: 0x0080, 0xb79: 0x0080, 0xb7a: 0x0080, 0xb7b: 0x0080, - 0xb7c: 0x0080, 0xb7d: 0x0080, 0xb7e: 0x0080, 0xb7f: 0x0080, - // Block 0x2e, offset 0xb80 - 0xb80: 0x00c0, 0xb81: 0x00c3, 0xb82: 0x00c0, 0xb83: 0x00c0, 0xb85: 0x00c0, - 0xb86: 0x00c0, 0xb87: 0x00c0, 0xb88: 0x00c0, 0xb89: 0x00c0, 0xb8a: 0x00c0, 0xb8b: 0x00c0, - 0xb8c: 0x00c0, 0xb8e: 0x00c0, 0xb8f: 0x00c0, 0xb90: 0x00c0, - 0xb92: 0x00c0, 0xb93: 0x00c0, 0xb94: 0x00c0, 0xb95: 0x00c0, 0xb96: 0x00c0, 0xb97: 0x00c0, - 0xb98: 0x00c0, 0xb99: 0x00c0, 0xb9a: 0x00c0, 0xb9b: 0x00c0, 0xb9c: 0x00c0, 0xb9d: 0x00c0, - 0xb9e: 0x00c0, 0xb9f: 0x00c0, 0xba0: 0x00c0, 0xba1: 0x00c0, 0xba2: 0x00c0, 0xba3: 0x00c0, - 0xba4: 0x00c0, 0xba5: 0x00c0, 0xba6: 0x00c0, 0xba7: 0x00c0, 0xba8: 0x00c0, - 0xbaa: 0x00c0, 0xbab: 0x00c0, 0xbac: 0x00c0, 0xbad: 0x00c0, 0xbae: 0x00c0, 0xbaf: 0x00c0, - 0xbb0: 0x00c0, 0xbb1: 0x00c0, 0xbb2: 0x00c0, 0xbb3: 0x00c0, 0xbb5: 0x00c0, - 0xbb6: 0x00c0, 0xbb7: 0x00c0, 0xbb8: 0x00c0, 0xbb9: 0x00c0, - 0xbbc: 0x00c3, 0xbbd: 0x00c0, 0xbbe: 0x00c0, 0xbbf: 0x00c3, - // Block 0x2f, offset 0xbc0 - 0xbc0: 0x00c0, 0xbc1: 0x00c0, 0xbc2: 0x00c0, 0xbc3: 0x00c0, 0xbc4: 0x00c0, - 0xbc6: 0x00c3, 0xbc7: 0x00c0, 0xbc8: 0x00c0, 0xbca: 0x00c0, 0xbcb: 0x00c0, - 0xbcc: 0x00c3, 0xbcd: 0x00c6, - 0xbd5: 0x00c0, 0xbd6: 0x00c0, - 0xbde: 0x00c0, 0xbe0: 0x00c0, 0xbe1: 0x00c0, 0xbe2: 0x00c3, 0xbe3: 0x00c3, - 0xbe6: 0x00c0, 0xbe7: 0x00c0, 0xbe8: 0x00c0, 0xbe9: 0x00c0, - 0xbea: 0x00c0, 0xbeb: 0x00c0, 0xbec: 0x00c0, 0xbed: 0x00c0, 0xbee: 0x00c0, 0xbef: 0x00c0, - 0xbf1: 0x00c0, 0xbf2: 0x00c0, - // Block 0x30, offset 0xc00 - 0xc01: 0x00c3, 0xc02: 0x00c0, 0xc03: 0x00c0, 0xc05: 0x00c0, - 0xc06: 0x00c0, 0xc07: 0x00c0, 0xc08: 0x00c0, 0xc09: 0x00c0, 0xc0a: 0x00c0, 0xc0b: 0x00c0, - 0xc0c: 0x00c0, 0xc0e: 0x00c0, 0xc0f: 0x00c0, 0xc10: 0x00c0, - 0xc12: 0x00c0, 0xc13: 0x00c0, 0xc14: 0x00c0, 0xc15: 0x00c0, 0xc16: 0x00c0, 0xc17: 0x00c0, - 0xc18: 0x00c0, 0xc19: 0x00c0, 0xc1a: 0x00c0, 0xc1b: 0x00c0, 0xc1c: 0x00c0, 0xc1d: 0x00c0, - 0xc1e: 0x00c0, 0xc1f: 0x00c0, 0xc20: 0x00c0, 0xc21: 0x00c0, 0xc22: 0x00c0, 0xc23: 0x00c0, - 0xc24: 0x00c0, 0xc25: 0x00c0, 0xc26: 0x00c0, 0xc27: 0x00c0, 0xc28: 0x00c0, 0xc29: 0x00c0, - 0xc2a: 0x00c0, 0xc2b: 0x00c0, 0xc2c: 0x00c0, 0xc2d: 0x00c0, 0xc2e: 0x00c0, 0xc2f: 0x00c0, - 0xc30: 0x00c0, 0xc31: 0x00c0, 0xc32: 0x00c0, 0xc33: 0x00c0, 0xc34: 0x00c0, 0xc35: 0x00c0, - 0xc36: 0x00c0, 0xc37: 0x00c0, 0xc38: 0x00c0, 0xc39: 0x00c0, 0xc3a: 0x00c0, - 0xc3d: 0x00c0, 0xc3e: 0x00c0, 0xc3f: 0x00c0, - // Block 0x31, offset 0xc40 - 0xc40: 0x00c0, 0xc41: 0x00c3, 0xc42: 0x00c3, 0xc43: 0x00c3, 0xc44: 0x00c3, - 0xc46: 0x00c0, 0xc47: 0x00c0, 0xc48: 0x00c0, 0xc4a: 0x00c0, 0xc4b: 0x00c0, - 0xc4c: 0x00c0, 0xc4d: 0x00c6, 0xc4e: 0x00c0, 0xc4f: 0x0080, - 0xc54: 0x00c0, 0xc55: 0x00c0, 0xc56: 0x00c0, 0xc57: 0x00c0, - 0xc58: 0x0080, 0xc59: 0x0080, 0xc5a: 0x0080, 0xc5b: 0x0080, 0xc5c: 0x0080, 0xc5d: 0x0080, - 0xc5e: 0x0080, 0xc5f: 0x00c0, 0xc60: 0x00c0, 0xc61: 0x00c0, 0xc62: 0x00c3, 0xc63: 0x00c3, - 0xc66: 0x00c0, 0xc67: 0x00c0, 0xc68: 0x00c0, 0xc69: 0x00c0, - 0xc6a: 0x00c0, 0xc6b: 0x00c0, 0xc6c: 0x00c0, 0xc6d: 0x00c0, 0xc6e: 0x00c0, 0xc6f: 0x00c0, - 0xc70: 0x0080, 0xc71: 0x0080, 0xc72: 0x0080, 0xc73: 0x0080, 0xc74: 0x0080, 0xc75: 0x0080, - 0xc76: 0x0080, 0xc77: 0x0080, 0xc78: 0x0080, 0xc79: 0x0080, 0xc7a: 0x00c0, 0xc7b: 0x00c0, - 0xc7c: 0x00c0, 0xc7d: 0x00c0, 0xc7e: 0x00c0, 0xc7f: 0x00c0, - // Block 0x32, offset 0xc80 - 0xc82: 0x00c0, 0xc83: 0x00c0, 0xc85: 0x00c0, - 0xc86: 0x00c0, 0xc87: 0x00c0, 0xc88: 0x00c0, 0xc89: 0x00c0, 0xc8a: 0x00c0, 0xc8b: 0x00c0, - 0xc8c: 0x00c0, 0xc8d: 0x00c0, 0xc8e: 0x00c0, 0xc8f: 0x00c0, 0xc90: 0x00c0, 0xc91: 0x00c0, - 0xc92: 0x00c0, 0xc93: 0x00c0, 0xc94: 0x00c0, 0xc95: 0x00c0, 0xc96: 0x00c0, - 0xc9a: 0x00c0, 0xc9b: 0x00c0, 0xc9c: 0x00c0, 0xc9d: 0x00c0, - 0xc9e: 0x00c0, 0xc9f: 0x00c0, 0xca0: 0x00c0, 0xca1: 0x00c0, 0xca2: 0x00c0, 0xca3: 0x00c0, - 0xca4: 0x00c0, 0xca5: 0x00c0, 0xca6: 0x00c0, 0xca7: 0x00c0, 0xca8: 0x00c0, 0xca9: 0x00c0, - 0xcaa: 0x00c0, 0xcab: 0x00c0, 0xcac: 0x00c0, 0xcad: 0x00c0, 0xcae: 0x00c0, 0xcaf: 0x00c0, - 0xcb0: 0x00c0, 0xcb1: 0x00c0, 0xcb3: 0x00c0, 0xcb4: 0x00c0, 0xcb5: 0x00c0, - 0xcb6: 0x00c0, 0xcb7: 0x00c0, 0xcb8: 0x00c0, 0xcb9: 0x00c0, 0xcba: 0x00c0, 0xcbb: 0x00c0, - 0xcbd: 0x00c0, - // Block 0x33, offset 0xcc0 - 0xcc0: 0x00c0, 0xcc1: 0x00c0, 0xcc2: 0x00c0, 0xcc3: 0x00c0, 0xcc4: 0x00c0, 0xcc5: 0x00c0, - 0xcc6: 0x00c0, 0xcca: 0x00c6, - 0xccf: 0x00c0, 0xcd0: 0x00c0, 0xcd1: 0x00c0, - 0xcd2: 0x00c3, 0xcd3: 0x00c3, 0xcd4: 0x00c3, 0xcd6: 0x00c3, - 0xcd8: 0x00c0, 0xcd9: 0x00c0, 0xcda: 0x00c0, 0xcdb: 0x00c0, 0xcdc: 0x00c0, 0xcdd: 0x00c0, - 0xcde: 0x00c0, 0xcdf: 0x00c0, - 0xce6: 0x00c0, 0xce7: 0x00c0, 0xce8: 0x00c0, 0xce9: 0x00c0, - 0xcea: 0x00c0, 0xceb: 0x00c0, 0xcec: 0x00c0, 0xced: 0x00c0, 0xcee: 0x00c0, 0xcef: 0x00c0, - 0xcf2: 0x00c0, 0xcf3: 0x00c0, 0xcf4: 0x0080, - // Block 0x34, offset 0xd00 - 0xd01: 0x00c0, 0xd02: 0x00c0, 0xd03: 0x00c0, 0xd04: 0x00c0, 0xd05: 0x00c0, - 0xd06: 0x00c0, 0xd07: 0x00c0, 0xd08: 0x00c0, 0xd09: 0x00c0, 0xd0a: 0x00c0, 0xd0b: 0x00c0, - 0xd0c: 0x00c0, 0xd0d: 0x00c0, 0xd0e: 0x00c0, 0xd0f: 0x00c0, 0xd10: 0x00c0, 0xd11: 0x00c0, - 0xd12: 0x00c0, 0xd13: 0x00c0, 0xd14: 0x00c0, 0xd15: 0x00c0, 0xd16: 0x00c0, 0xd17: 0x00c0, - 0xd18: 0x00c0, 0xd19: 0x00c0, 0xd1a: 0x00c0, 0xd1b: 0x00c0, 0xd1c: 0x00c0, 0xd1d: 0x00c0, - 0xd1e: 0x00c0, 0xd1f: 0x00c0, 0xd20: 0x00c0, 0xd21: 0x00c0, 0xd22: 0x00c0, 0xd23: 0x00c0, - 0xd24: 0x00c0, 0xd25: 0x00c0, 0xd26: 0x00c0, 0xd27: 0x00c0, 0xd28: 0x00c0, 0xd29: 0x00c0, - 0xd2a: 0x00c0, 0xd2b: 0x00c0, 0xd2c: 0x00c0, 0xd2d: 0x00c0, 0xd2e: 0x00c0, 0xd2f: 0x00c0, - 0xd30: 0x00c0, 0xd31: 0x00c3, 0xd32: 0x00c0, 0xd33: 0x0080, 0xd34: 0x00c3, 0xd35: 0x00c3, - 0xd36: 0x00c3, 0xd37: 0x00c3, 0xd38: 0x00c3, 0xd39: 0x00c3, 0xd3a: 0x00c6, - 0xd3f: 0x0080, - // Block 0x35, offset 0xd40 - 0xd40: 0x00c0, 0xd41: 0x00c0, 0xd42: 0x00c0, 0xd43: 0x00c0, 0xd44: 0x00c0, 0xd45: 0x00c0, - 0xd46: 0x00c0, 0xd47: 0x00c3, 0xd48: 0x00c3, 0xd49: 0x00c3, 0xd4a: 0x00c3, 0xd4b: 0x00c3, - 0xd4c: 0x00c3, 0xd4d: 0x00c3, 0xd4e: 0x00c3, 0xd4f: 0x0080, 0xd50: 0x00c0, 0xd51: 0x00c0, - 0xd52: 0x00c0, 0xd53: 0x00c0, 0xd54: 0x00c0, 0xd55: 0x00c0, 0xd56: 0x00c0, 0xd57: 0x00c0, - 0xd58: 0x00c0, 0xd59: 0x00c0, 0xd5a: 0x0080, 0xd5b: 0x0080, - // Block 0x36, offset 0xd80 - 0xd81: 0x00c0, 0xd82: 0x00c0, 0xd84: 0x00c0, - 0xd87: 0x00c0, 0xd88: 0x00c0, 0xd8a: 0x00c0, - 0xd8d: 0x00c0, - 0xd94: 0x00c0, 0xd95: 0x00c0, 0xd96: 0x00c0, 0xd97: 0x00c0, - 0xd99: 0x00c0, 0xd9a: 0x00c0, 0xd9b: 0x00c0, 0xd9c: 0x00c0, 0xd9d: 0x00c0, - 0xd9e: 0x00c0, 0xd9f: 0x00c0, 0xda1: 0x00c0, 0xda2: 0x00c0, 0xda3: 0x00c0, - 0xda5: 0x00c0, 0xda7: 0x00c0, - 0xdaa: 0x00c0, 0xdab: 0x00c0, 0xdad: 0x00c0, 0xdae: 0x00c0, 0xdaf: 0x00c0, - 0xdb0: 0x00c0, 0xdb1: 0x00c3, 0xdb2: 0x00c0, 0xdb3: 0x0080, 0xdb4: 0x00c3, 0xdb5: 0x00c3, - 0xdb6: 0x00c3, 0xdb7: 0x00c3, 0xdb8: 0x00c3, 0xdb9: 0x00c3, 0xdbb: 0x00c3, - 0xdbc: 0x00c3, 0xdbd: 0x00c0, - // Block 0x37, offset 0xdc0 - 0xdc0: 0x00c0, 0xdc1: 0x00c0, 0xdc2: 0x00c0, 0xdc3: 0x00c0, 0xdc4: 0x00c0, - 0xdc6: 0x00c0, 0xdc8: 0x00c3, 0xdc9: 0x00c3, 0xdca: 0x00c3, 0xdcb: 0x00c3, - 0xdcc: 0x00c3, 0xdcd: 0x00c3, 0xdd0: 0x00c0, 0xdd1: 0x00c0, - 0xdd2: 0x00c0, 0xdd3: 0x00c0, 0xdd4: 0x00c0, 0xdd5: 0x00c0, 0xdd6: 0x00c0, 0xdd7: 0x00c0, - 0xdd8: 0x00c0, 0xdd9: 0x00c0, 0xddc: 0x0080, 0xddd: 0x0080, - 0xdde: 0x00c0, 0xddf: 0x00c0, - // Block 0x38, offset 0xe00 - 0xe00: 0x00c0, 0xe01: 0x0080, 0xe02: 0x0080, 0xe03: 0x0080, 0xe04: 0x0080, 0xe05: 0x0080, - 0xe06: 0x0080, 0xe07: 0x0080, 0xe08: 0x0080, 0xe09: 0x0080, 0xe0a: 0x0080, 0xe0b: 0x00c0, - 0xe0c: 0x0080, 0xe0d: 0x0080, 0xe0e: 0x0080, 0xe0f: 0x0080, 0xe10: 0x0080, 0xe11: 0x0080, - 0xe12: 0x0080, 0xe13: 0x0080, 0xe14: 0x0080, 0xe15: 0x0080, 0xe16: 0x0080, 0xe17: 0x0080, - 0xe18: 0x00c3, 0xe19: 0x00c3, 0xe1a: 0x0080, 0xe1b: 0x0080, 0xe1c: 0x0080, 0xe1d: 0x0080, - 0xe1e: 0x0080, 0xe1f: 0x0080, 0xe20: 0x00c0, 0xe21: 0x00c0, 0xe22: 0x00c0, 0xe23: 0x00c0, - 0xe24: 0x00c0, 0xe25: 0x00c0, 0xe26: 0x00c0, 0xe27: 0x00c0, 0xe28: 0x00c0, 0xe29: 0x00c0, - 0xe2a: 0x0080, 0xe2b: 0x0080, 0xe2c: 0x0080, 0xe2d: 0x0080, 0xe2e: 0x0080, 0xe2f: 0x0080, - 0xe30: 0x0080, 0xe31: 0x0080, 0xe32: 0x0080, 0xe33: 0x0080, 0xe34: 0x0080, 0xe35: 0x00c3, - 0xe36: 0x0080, 0xe37: 0x00c3, 0xe38: 0x0080, 0xe39: 0x00c3, 0xe3a: 0x0080, 0xe3b: 0x0080, - 0xe3c: 0x0080, 0xe3d: 0x0080, 0xe3e: 0x00c0, 0xe3f: 0x00c0, - // Block 0x39, offset 0xe40 - 0xe40: 0x00c0, 0xe41: 0x00c0, 0xe42: 0x00c0, 0xe43: 0x0080, 0xe44: 0x00c0, 0xe45: 0x00c0, - 0xe46: 0x00c0, 0xe47: 0x00c0, 0xe49: 0x00c0, 0xe4a: 0x00c0, 0xe4b: 0x00c0, - 0xe4c: 0x00c0, 0xe4d: 0x0080, 0xe4e: 0x00c0, 0xe4f: 0x00c0, 0xe50: 0x00c0, 0xe51: 0x00c0, - 0xe52: 0x0080, 0xe53: 0x00c0, 0xe54: 0x00c0, 0xe55: 0x00c0, 0xe56: 0x00c0, 0xe57: 0x0080, - 0xe58: 0x00c0, 0xe59: 0x00c0, 0xe5a: 0x00c0, 0xe5b: 0x00c0, 0xe5c: 0x0080, 0xe5d: 0x00c0, - 0xe5e: 0x00c0, 0xe5f: 0x00c0, 0xe60: 0x00c0, 0xe61: 0x00c0, 0xe62: 0x00c0, 0xe63: 0x00c0, - 0xe64: 0x00c0, 0xe65: 0x00c0, 0xe66: 0x00c0, 0xe67: 0x00c0, 0xe68: 0x00c0, 0xe69: 0x0080, - 0xe6a: 0x00c0, 0xe6b: 0x00c0, 0xe6c: 0x00c0, - 0xe71: 0x00c3, 0xe72: 0x00c3, 0xe73: 0x0083, 0xe74: 0x00c3, 0xe75: 0x0083, - 0xe76: 0x0083, 0xe77: 0x0083, 0xe78: 0x0083, 0xe79: 0x0083, 0xe7a: 0x00c3, 0xe7b: 0x00c3, - 0xe7c: 0x00c3, 0xe7d: 0x00c3, 0xe7e: 0x00c3, 0xe7f: 0x00c0, - // Block 0x3a, offset 0xe80 - 0xe80: 0x00c3, 0xe81: 0x0083, 0xe82: 0x00c3, 0xe83: 0x00c3, 0xe84: 0x00c6, 0xe85: 0x0080, - 0xe86: 0x00c3, 0xe87: 0x00c3, 0xe88: 0x00c0, 0xe89: 0x00c0, 0xe8a: 0x00c0, 0xe8b: 0x00c0, - 0xe8c: 0x00c0, 0xe8d: 0x00c3, 0xe8e: 0x00c3, 0xe8f: 0x00c3, 0xe90: 0x00c3, 0xe91: 0x00c3, - 0xe92: 0x00c3, 0xe93: 0x0083, 0xe94: 0x00c3, 0xe95: 0x00c3, 0xe96: 0x00c3, 0xe97: 0x00c3, - 0xe99: 0x00c3, 0xe9a: 0x00c3, 0xe9b: 0x00c3, 0xe9c: 0x00c3, 0xe9d: 0x0083, - 0xe9e: 0x00c3, 0xe9f: 0x00c3, 0xea0: 0x00c3, 0xea1: 0x00c3, 0xea2: 0x0083, 0xea3: 0x00c3, - 0xea4: 0x00c3, 0xea5: 0x00c3, 0xea6: 0x00c3, 0xea7: 0x0083, 0xea8: 0x00c3, 0xea9: 0x00c3, - 0xeaa: 0x00c3, 0xeab: 0x00c3, 0xeac: 0x0083, 0xead: 0x00c3, 0xeae: 0x00c3, 0xeaf: 0x00c3, - 0xeb0: 0x00c3, 0xeb1: 0x00c3, 0xeb2: 0x00c3, 0xeb3: 0x00c3, 0xeb4: 0x00c3, 0xeb5: 0x00c3, - 0xeb6: 0x00c3, 0xeb7: 0x00c3, 0xeb8: 0x00c3, 0xeb9: 0x0083, 0xeba: 0x00c3, 0xebb: 0x00c3, - 0xebc: 0x00c3, 0xebe: 0x0080, 0xebf: 0x0080, - // Block 0x3b, offset 0xec0 - 0xec0: 0x0080, 0xec1: 0x0080, 0xec2: 0x0080, 0xec3: 0x0080, 0xec4: 0x0080, 0xec5: 0x0080, - 0xec6: 0x00c3, 0xec7: 0x0080, 0xec8: 0x0080, 0xec9: 0x0080, 0xeca: 0x0080, 0xecb: 0x0080, - 0xecc: 0x0080, 0xece: 0x0080, 0xecf: 0x0080, 0xed0: 0x0080, 0xed1: 0x0080, - 0xed2: 0x0080, 0xed3: 0x0080, 0xed4: 0x0080, 0xed5: 0x0080, 0xed6: 0x0080, 0xed7: 0x0080, - 0xed8: 0x0080, 0xed9: 0x0080, 0xeda: 0x0080, - // Block 0x3c, offset 0xf00 - 0xf00: 0x00c0, 0xf01: 0x00c0, 0xf02: 0x00c0, 0xf03: 0x00c0, 0xf04: 0x00c0, 0xf05: 0x00c0, - 0xf06: 0x00c0, 0xf07: 0x00c0, 0xf08: 0x00c0, 0xf09: 0x00c0, 0xf0a: 0x00c0, 0xf0b: 0x00c0, - 0xf0c: 0x00c0, 0xf0d: 0x00c0, 0xf0e: 0x00c0, 0xf0f: 0x00c0, 0xf10: 0x00c0, 0xf11: 0x00c0, - 0xf12: 0x00c0, 0xf13: 0x00c0, 0xf14: 0x00c0, 0xf15: 0x00c0, 0xf16: 0x00c0, 0xf17: 0x00c0, - 0xf18: 0x00c0, 0xf19: 0x00c0, 0xf1a: 0x00c0, 0xf1b: 0x00c0, 0xf1c: 0x00c0, 0xf1d: 0x00c0, - 0xf1e: 0x00c0, 0xf1f: 0x00c0, 0xf20: 0x00c0, 0xf21: 0x00c0, 0xf22: 0x00c0, 0xf23: 0x00c0, - 0xf24: 0x00c0, 0xf25: 0x00c0, 0xf26: 0x00c0, 0xf27: 0x00c0, 0xf28: 0x00c0, 0xf29: 0x00c0, - 0xf2a: 0x00c0, 0xf2b: 0x00c0, 0xf2c: 0x00c0, 0xf2d: 0x00c3, 0xf2e: 0x00c3, 0xf2f: 0x00c3, - 0xf30: 0x00c3, 0xf31: 0x00c0, 0xf32: 0x00c3, 0xf33: 0x00c3, 0xf34: 0x00c3, 0xf35: 0x00c3, - 0xf36: 0x00c3, 0xf37: 0x00c3, 0xf38: 0x00c0, 0xf39: 0x00c6, 0xf3a: 0x00c6, 0xf3b: 0x00c0, - 0xf3c: 0x00c0, 0xf3d: 0x00c3, 0xf3e: 0x00c3, 0xf3f: 0x00c0, - // Block 0x3d, offset 0xf40 - 0xf40: 0x00c0, 0xf41: 0x00c0, 0xf42: 0x00c0, 0xf43: 0x00c0, 0xf44: 0x00c0, 0xf45: 0x00c0, - 0xf46: 0x00c0, 0xf47: 0x00c0, 0xf48: 0x00c0, 0xf49: 0x00c0, 0xf4a: 0x0080, 0xf4b: 0x0080, - 0xf4c: 0x0080, 0xf4d: 0x0080, 0xf4e: 0x0080, 0xf4f: 0x0080, 0xf50: 0x00c0, 0xf51: 0x00c0, - 0xf52: 0x00c0, 0xf53: 0x00c0, 0xf54: 0x00c0, 0xf55: 0x00c0, 0xf56: 0x00c0, 0xf57: 0x00c0, - 0xf58: 0x00c3, 0xf59: 0x00c3, 0xf5a: 0x00c0, 0xf5b: 0x00c0, 0xf5c: 0x00c0, 0xf5d: 0x00c0, - 0xf5e: 0x00c3, 0xf5f: 0x00c3, 0xf60: 0x00c3, 0xf61: 0x00c0, 0xf62: 0x00c0, 0xf63: 0x00c0, - 0xf64: 0x00c0, 0xf65: 0x00c0, 0xf66: 0x00c0, 0xf67: 0x00c0, 0xf68: 0x00c0, 0xf69: 0x00c0, - 0xf6a: 0x00c0, 0xf6b: 0x00c0, 0xf6c: 0x00c0, 0xf6d: 0x00c0, 0xf6e: 0x00c0, 0xf6f: 0x00c0, - 0xf70: 0x00c0, 0xf71: 0x00c3, 0xf72: 0x00c3, 0xf73: 0x00c3, 0xf74: 0x00c3, 0xf75: 0x00c0, - 0xf76: 0x00c0, 0xf77: 0x00c0, 0xf78: 0x00c0, 0xf79: 0x00c0, 0xf7a: 0x00c0, 0xf7b: 0x00c0, - 0xf7c: 0x00c0, 0xf7d: 0x00c0, 0xf7e: 0x00c0, 0xf7f: 0x00c0, - // Block 0x3e, offset 0xf80 - 0xf80: 0x00c0, 0xf81: 0x00c0, 0xf82: 0x00c3, 0xf83: 0x00c0, 0xf84: 0x00c0, 0xf85: 0x00c3, - 0xf86: 0x00c3, 0xf87: 0x00c0, 0xf88: 0x00c0, 0xf89: 0x00c0, 0xf8a: 0x00c0, 0xf8b: 0x00c0, - 0xf8c: 0x00c0, 0xf8d: 0x00c3, 0xf8e: 0x00c0, 0xf8f: 0x00c0, 0xf90: 0x00c0, 0xf91: 0x00c0, - 0xf92: 0x00c0, 0xf93: 0x00c0, 0xf94: 0x00c0, 0xf95: 0x00c0, 0xf96: 0x00c0, 0xf97: 0x00c0, - 0xf98: 0x00c0, 0xf99: 0x00c0, 0xf9a: 0x00c0, 0xf9b: 0x00c0, 0xf9c: 0x00c0, 0xf9d: 0x00c3, - 0xf9e: 0x0080, 0xf9f: 0x0080, 0xfa0: 0x00c0, 0xfa1: 0x00c0, 0xfa2: 0x00c0, 0xfa3: 0x00c0, - 0xfa4: 0x00c0, 0xfa5: 0x00c0, 0xfa6: 0x00c0, 0xfa7: 0x00c0, 0xfa8: 0x00c0, 0xfa9: 0x00c0, - 0xfaa: 0x00c0, 0xfab: 0x00c0, 0xfac: 0x00c0, 0xfad: 0x00c0, 0xfae: 0x00c0, 0xfaf: 0x00c0, - 0xfb0: 0x00c0, 0xfb1: 0x00c0, 0xfb2: 0x00c0, 0xfb3: 0x00c0, 0xfb4: 0x00c0, 0xfb5: 0x00c0, - 0xfb6: 0x00c0, 0xfb7: 0x00c0, 0xfb8: 0x00c0, 0xfb9: 0x00c0, 0xfba: 0x00c0, 0xfbb: 0x00c0, - 0xfbc: 0x00c0, 0xfbd: 0x00c0, 0xfbe: 0x00c0, 0xfbf: 0x00c0, - // Block 0x3f, offset 0xfc0 - 0xfc0: 0x00c0, 0xfc1: 0x00c0, 0xfc2: 0x00c0, 0xfc3: 0x00c0, 0xfc4: 0x00c0, 0xfc5: 0x00c0, - 0xfc7: 0x00c0, - 0xfcd: 0x00c0, 0xfd0: 0x00c0, 0xfd1: 0x00c0, - 0xfd2: 0x00c0, 0xfd3: 0x00c0, 0xfd4: 0x00c0, 0xfd5: 0x00c0, 0xfd6: 0x00c0, 0xfd7: 0x00c0, - 0xfd8: 0x00c0, 0xfd9: 0x00c0, 0xfda: 0x00c0, 0xfdb: 0x00c0, 0xfdc: 0x00c0, 0xfdd: 0x00c0, - 0xfde: 0x00c0, 0xfdf: 0x00c0, 0xfe0: 0x00c0, 0xfe1: 0x00c0, 0xfe2: 0x00c0, 0xfe3: 0x00c0, - 0xfe4: 0x00c0, 0xfe5: 0x00c0, 0xfe6: 0x00c0, 0xfe7: 0x00c0, 0xfe8: 0x00c0, 0xfe9: 0x00c0, - 0xfea: 0x00c0, 0xfeb: 0x00c0, 0xfec: 0x00c0, 0xfed: 0x00c0, 0xfee: 0x00c0, 0xfef: 0x00c0, - 0xff0: 0x00c0, 0xff1: 0x00c0, 0xff2: 0x00c0, 0xff3: 0x00c0, 0xff4: 0x00c0, 0xff5: 0x00c0, - 0xff6: 0x00c0, 0xff7: 0x00c0, 0xff8: 0x00c0, 0xff9: 0x00c0, 0xffa: 0x00c0, 0xffb: 0x0080, - 0xffc: 0x0080, 0xffd: 0x00c0, 0xffe: 0x00c0, 0xfff: 0x00c0, - // Block 0x40, offset 0x1000 - 0x1000: 0x0040, 0x1001: 0x0040, 0x1002: 0x0040, 0x1003: 0x0040, 0x1004: 0x0040, 0x1005: 0x0040, - 0x1006: 0x0040, 0x1007: 0x0040, 0x1008: 0x0040, 0x1009: 0x0040, 0x100a: 0x0040, 0x100b: 0x0040, - 0x100c: 0x0040, 0x100d: 0x0040, 0x100e: 0x0040, 0x100f: 0x0040, 0x1010: 0x0040, 0x1011: 0x0040, - 0x1012: 0x0040, 0x1013: 0x0040, 0x1014: 0x0040, 0x1015: 0x0040, 0x1016: 0x0040, 0x1017: 0x0040, - 0x1018: 0x0040, 0x1019: 0x0040, 0x101a: 0x0040, 0x101b: 0x0040, 0x101c: 0x0040, 0x101d: 0x0040, - 0x101e: 0x0040, 0x101f: 0x0040, 0x1020: 0x0040, 0x1021: 0x0040, 0x1022: 0x0040, 0x1023: 0x0040, - 0x1024: 0x0040, 0x1025: 0x0040, 0x1026: 0x0040, 0x1027: 0x0040, 0x1028: 0x0040, 0x1029: 0x0040, - 0x102a: 0x0040, 0x102b: 0x0040, 0x102c: 0x0040, 0x102d: 0x0040, 0x102e: 0x0040, 0x102f: 0x0040, - 0x1030: 0x0040, 0x1031: 0x0040, 0x1032: 0x0040, 0x1033: 0x0040, 0x1034: 0x0040, 0x1035: 0x0040, - 0x1036: 0x0040, 0x1037: 0x0040, 0x1038: 0x0040, 0x1039: 0x0040, 0x103a: 0x0040, 0x103b: 0x0040, - 0x103c: 0x0040, 0x103d: 0x0040, 0x103e: 0x0040, 0x103f: 0x0040, - // Block 0x41, offset 0x1040 - 0x1040: 0x00c0, 0x1041: 0x00c0, 0x1042: 0x00c0, 0x1043: 0x00c0, 0x1044: 0x00c0, 0x1045: 0x00c0, - 0x1046: 0x00c0, 0x1047: 0x00c0, 0x1048: 0x00c0, 0x104a: 0x00c0, 0x104b: 0x00c0, - 0x104c: 0x00c0, 0x104d: 0x00c0, 0x1050: 0x00c0, 0x1051: 0x00c0, - 0x1052: 0x00c0, 0x1053: 0x00c0, 0x1054: 0x00c0, 0x1055: 0x00c0, 0x1056: 0x00c0, - 0x1058: 0x00c0, 0x105a: 0x00c0, 0x105b: 0x00c0, 0x105c: 0x00c0, 0x105d: 0x00c0, - 0x1060: 0x00c0, 0x1061: 0x00c0, 0x1062: 0x00c0, 0x1063: 0x00c0, - 0x1064: 0x00c0, 0x1065: 0x00c0, 0x1066: 0x00c0, 0x1067: 0x00c0, 0x1068: 0x00c0, 0x1069: 0x00c0, - 0x106a: 0x00c0, 0x106b: 0x00c0, 0x106c: 0x00c0, 0x106d: 0x00c0, 0x106e: 0x00c0, 0x106f: 0x00c0, - 0x1070: 0x00c0, 0x1071: 0x00c0, 0x1072: 0x00c0, 0x1073: 0x00c0, 0x1074: 0x00c0, 0x1075: 0x00c0, - 0x1076: 0x00c0, 0x1077: 0x00c0, 0x1078: 0x00c0, 0x1079: 0x00c0, 0x107a: 0x00c0, 0x107b: 0x00c0, - 0x107c: 0x00c0, 0x107d: 0x00c0, 0x107e: 0x00c0, 0x107f: 0x00c0, - // Block 0x42, offset 0x1080 - 0x1080: 0x00c0, 0x1081: 0x00c0, 0x1082: 0x00c0, 0x1083: 0x00c0, 0x1084: 0x00c0, 0x1085: 0x00c0, - 0x1086: 0x00c0, 0x1087: 0x00c0, 0x1088: 0x00c0, 0x108a: 0x00c0, 0x108b: 0x00c0, - 0x108c: 0x00c0, 0x108d: 0x00c0, 0x1090: 0x00c0, 0x1091: 0x00c0, - 0x1092: 0x00c0, 0x1093: 0x00c0, 0x1094: 0x00c0, 0x1095: 0x00c0, 0x1096: 0x00c0, 0x1097: 0x00c0, - 0x1098: 0x00c0, 0x1099: 0x00c0, 0x109a: 0x00c0, 0x109b: 0x00c0, 0x109c: 0x00c0, 0x109d: 0x00c0, - 0x109e: 0x00c0, 0x109f: 0x00c0, 0x10a0: 0x00c0, 0x10a1: 0x00c0, 0x10a2: 0x00c0, 0x10a3: 0x00c0, - 0x10a4: 0x00c0, 0x10a5: 0x00c0, 0x10a6: 0x00c0, 0x10a7: 0x00c0, 0x10a8: 0x00c0, 0x10a9: 0x00c0, - 0x10aa: 0x00c0, 0x10ab: 0x00c0, 0x10ac: 0x00c0, 0x10ad: 0x00c0, 0x10ae: 0x00c0, 0x10af: 0x00c0, - 0x10b0: 0x00c0, 0x10b2: 0x00c0, 0x10b3: 0x00c0, 0x10b4: 0x00c0, 0x10b5: 0x00c0, - 0x10b8: 0x00c0, 0x10b9: 0x00c0, 0x10ba: 0x00c0, 0x10bb: 0x00c0, - 0x10bc: 0x00c0, 0x10bd: 0x00c0, 0x10be: 0x00c0, - // Block 0x43, offset 0x10c0 - 0x10c0: 0x00c0, 0x10c2: 0x00c0, 0x10c3: 0x00c0, 0x10c4: 0x00c0, 0x10c5: 0x00c0, - 0x10c8: 0x00c0, 0x10c9: 0x00c0, 0x10ca: 0x00c0, 0x10cb: 0x00c0, - 0x10cc: 0x00c0, 0x10cd: 0x00c0, 0x10ce: 0x00c0, 0x10cf: 0x00c0, 0x10d0: 0x00c0, 0x10d1: 0x00c0, - 0x10d2: 0x00c0, 0x10d3: 0x00c0, 0x10d4: 0x00c0, 0x10d5: 0x00c0, 0x10d6: 0x00c0, - 0x10d8: 0x00c0, 0x10d9: 0x00c0, 0x10da: 0x00c0, 0x10db: 0x00c0, 0x10dc: 0x00c0, 0x10dd: 0x00c0, - 0x10de: 0x00c0, 0x10df: 0x00c0, 0x10e0: 0x00c0, 0x10e1: 0x00c0, 0x10e2: 0x00c0, 0x10e3: 0x00c0, - 0x10e4: 0x00c0, 0x10e5: 0x00c0, 0x10e6: 0x00c0, 0x10e7: 0x00c0, 0x10e8: 0x00c0, 0x10e9: 0x00c0, - 0x10ea: 0x00c0, 0x10eb: 0x00c0, 0x10ec: 0x00c0, 0x10ed: 0x00c0, 0x10ee: 0x00c0, 0x10ef: 0x00c0, - 0x10f0: 0x00c0, 0x10f1: 0x00c0, 0x10f2: 0x00c0, 0x10f3: 0x00c0, 0x10f4: 0x00c0, 0x10f5: 0x00c0, - 0x10f6: 0x00c0, 0x10f7: 0x00c0, 0x10f8: 0x00c0, 0x10f9: 0x00c0, 0x10fa: 0x00c0, 0x10fb: 0x00c0, - 0x10fc: 0x00c0, 0x10fd: 0x00c0, 0x10fe: 0x00c0, 0x10ff: 0x00c0, - // Block 0x44, offset 0x1100 - 0x1100: 0x00c0, 0x1101: 0x00c0, 0x1102: 0x00c0, 0x1103: 0x00c0, 0x1104: 0x00c0, 0x1105: 0x00c0, - 0x1106: 0x00c0, 0x1107: 0x00c0, 0x1108: 0x00c0, 0x1109: 0x00c0, 0x110a: 0x00c0, 0x110b: 0x00c0, - 0x110c: 0x00c0, 0x110d: 0x00c0, 0x110e: 0x00c0, 0x110f: 0x00c0, 0x1110: 0x00c0, - 0x1112: 0x00c0, 0x1113: 0x00c0, 0x1114: 0x00c0, 0x1115: 0x00c0, - 0x1118: 0x00c0, 0x1119: 0x00c0, 0x111a: 0x00c0, 0x111b: 0x00c0, 0x111c: 0x00c0, 0x111d: 0x00c0, - 0x111e: 0x00c0, 0x111f: 0x00c0, 0x1120: 0x00c0, 0x1121: 0x00c0, 0x1122: 0x00c0, 0x1123: 0x00c0, - 0x1124: 0x00c0, 0x1125: 0x00c0, 0x1126: 0x00c0, 0x1127: 0x00c0, 0x1128: 0x00c0, 0x1129: 0x00c0, - 0x112a: 0x00c0, 0x112b: 0x00c0, 0x112c: 0x00c0, 0x112d: 0x00c0, 0x112e: 0x00c0, 0x112f: 0x00c0, - 0x1130: 0x00c0, 0x1131: 0x00c0, 0x1132: 0x00c0, 0x1133: 0x00c0, 0x1134: 0x00c0, 0x1135: 0x00c0, - 0x1136: 0x00c0, 0x1137: 0x00c0, 0x1138: 0x00c0, 0x1139: 0x00c0, 0x113a: 0x00c0, 0x113b: 0x00c0, - 0x113c: 0x00c0, 0x113d: 0x00c0, 0x113e: 0x00c0, 0x113f: 0x00c0, - // Block 0x45, offset 0x1140 - 0x1140: 0x00c0, 0x1141: 0x00c0, 0x1142: 0x00c0, 0x1143: 0x00c0, 0x1144: 0x00c0, 0x1145: 0x00c0, - 0x1146: 0x00c0, 0x1147: 0x00c0, 0x1148: 0x00c0, 0x1149: 0x00c0, 0x114a: 0x00c0, 0x114b: 0x00c0, - 0x114c: 0x00c0, 0x114d: 0x00c0, 0x114e: 0x00c0, 0x114f: 0x00c0, 0x1150: 0x00c0, 0x1151: 0x00c0, - 0x1152: 0x00c0, 0x1153: 0x00c0, 0x1154: 0x00c0, 0x1155: 0x00c0, 0x1156: 0x00c0, 0x1157: 0x00c0, - 0x1158: 0x00c0, 0x1159: 0x00c0, 0x115a: 0x00c0, 0x115d: 0x00c3, - 0x115e: 0x00c3, 0x115f: 0x00c3, 0x1160: 0x0080, 0x1161: 0x0080, 0x1162: 0x0080, 0x1163: 0x0080, - 0x1164: 0x0080, 0x1165: 0x0080, 0x1166: 0x0080, 0x1167: 0x0080, 0x1168: 0x0080, 0x1169: 0x0080, - 0x116a: 0x0080, 0x116b: 0x0080, 0x116c: 0x0080, 0x116d: 0x0080, 0x116e: 0x0080, 0x116f: 0x0080, - 0x1170: 0x0080, 0x1171: 0x0080, 0x1172: 0x0080, 0x1173: 0x0080, 0x1174: 0x0080, 0x1175: 0x0080, - 0x1176: 0x0080, 0x1177: 0x0080, 0x1178: 0x0080, 0x1179: 0x0080, 0x117a: 0x0080, 0x117b: 0x0080, - 0x117c: 0x0080, - // Block 0x46, offset 0x1180 - 0x1180: 0x00c0, 0x1181: 0x00c0, 0x1182: 0x00c0, 0x1183: 0x00c0, 0x1184: 0x00c0, 0x1185: 0x00c0, - 0x1186: 0x00c0, 0x1187: 0x00c0, 0x1188: 0x00c0, 0x1189: 0x00c0, 0x118a: 0x00c0, 0x118b: 0x00c0, - 0x118c: 0x00c0, 0x118d: 0x00c0, 0x118e: 0x00c0, 0x118f: 0x00c0, 0x1190: 0x0080, 0x1191: 0x0080, - 0x1192: 0x0080, 0x1193: 0x0080, 0x1194: 0x0080, 0x1195: 0x0080, 0x1196: 0x0080, 0x1197: 0x0080, - 0x1198: 0x0080, 0x1199: 0x0080, - 0x11a0: 0x00c0, 0x11a1: 0x00c0, 0x11a2: 0x00c0, 0x11a3: 0x00c0, - 0x11a4: 0x00c0, 0x11a5: 0x00c0, 0x11a6: 0x00c0, 0x11a7: 0x00c0, 0x11a8: 0x00c0, 0x11a9: 0x00c0, - 0x11aa: 0x00c0, 0x11ab: 0x00c0, 0x11ac: 0x00c0, 0x11ad: 0x00c0, 0x11ae: 0x00c0, 0x11af: 0x00c0, - 0x11b0: 0x00c0, 0x11b1: 0x00c0, 0x11b2: 0x00c0, 0x11b3: 0x00c0, 0x11b4: 0x00c0, 0x11b5: 0x00c0, - 0x11b6: 0x00c0, 0x11b7: 0x00c0, 0x11b8: 0x00c0, 0x11b9: 0x00c0, 0x11ba: 0x00c0, 0x11bb: 0x00c0, - 0x11bc: 0x00c0, 0x11bd: 0x00c0, 0x11be: 0x00c0, 0x11bf: 0x00c0, - // Block 0x47, offset 0x11c0 - 0x11c0: 0x00c0, 0x11c1: 0x00c0, 0x11c2: 0x00c0, 0x11c3: 0x00c0, 0x11c4: 0x00c0, 0x11c5: 0x00c0, - 0x11c6: 0x00c0, 0x11c7: 0x00c0, 0x11c8: 0x00c0, 0x11c9: 0x00c0, 0x11ca: 0x00c0, 0x11cb: 0x00c0, - 0x11cc: 0x00c0, 0x11cd: 0x00c0, 0x11ce: 0x00c0, 0x11cf: 0x00c0, 0x11d0: 0x00c0, 0x11d1: 0x00c0, - 0x11d2: 0x00c0, 0x11d3: 0x00c0, 0x11d4: 0x00c0, 0x11d5: 0x00c0, 0x11d6: 0x00c0, 0x11d7: 0x00c0, - 0x11d8: 0x00c0, 0x11d9: 0x00c0, 0x11da: 0x00c0, 0x11db: 0x00c0, 0x11dc: 0x00c0, 0x11dd: 0x00c0, - 0x11de: 0x00c0, 0x11df: 0x00c0, 0x11e0: 0x00c0, 0x11e1: 0x00c0, 0x11e2: 0x00c0, 0x11e3: 0x00c0, - 0x11e4: 0x00c0, 0x11e5: 0x00c0, 0x11e6: 0x00c0, 0x11e7: 0x00c0, 0x11e8: 0x00c0, 0x11e9: 0x00c0, - 0x11ea: 0x00c0, 0x11eb: 0x00c0, 0x11ec: 0x00c0, 0x11ed: 0x00c0, 0x11ee: 0x00c0, 0x11ef: 0x00c0, - 0x11f0: 0x00c0, 0x11f1: 0x00c0, 0x11f2: 0x00c0, 0x11f3: 0x00c0, 0x11f4: 0x00c0, 0x11f5: 0x00c0, - 0x11f8: 0x00c0, 0x11f9: 0x00c0, 0x11fa: 0x00c0, 0x11fb: 0x00c0, - 0x11fc: 0x00c0, 0x11fd: 0x00c0, - // Block 0x48, offset 0x1200 - 0x1200: 0x0080, 0x1201: 0x00c0, 0x1202: 0x00c0, 0x1203: 0x00c0, 0x1204: 0x00c0, 0x1205: 0x00c0, - 0x1206: 0x00c0, 0x1207: 0x00c0, 0x1208: 0x00c0, 0x1209: 0x00c0, 0x120a: 0x00c0, 0x120b: 0x00c0, - 0x120c: 0x00c0, 0x120d: 0x00c0, 0x120e: 0x00c0, 0x120f: 0x00c0, 0x1210: 0x00c0, 0x1211: 0x00c0, - 0x1212: 0x00c0, 0x1213: 0x00c0, 0x1214: 0x00c0, 0x1215: 0x00c0, 0x1216: 0x00c0, 0x1217: 0x00c0, - 0x1218: 0x00c0, 0x1219: 0x00c0, 0x121a: 0x00c0, 0x121b: 0x00c0, 0x121c: 0x00c0, 0x121d: 0x00c0, - 0x121e: 0x00c0, 0x121f: 0x00c0, 0x1220: 0x00c0, 0x1221: 0x00c0, 0x1222: 0x00c0, 0x1223: 0x00c0, - 0x1224: 0x00c0, 0x1225: 0x00c0, 0x1226: 0x00c0, 0x1227: 0x00c0, 0x1228: 0x00c0, 0x1229: 0x00c0, - 0x122a: 0x00c0, 0x122b: 0x00c0, 0x122c: 0x00c0, 0x122d: 0x00c0, 0x122e: 0x00c0, 0x122f: 0x00c0, - 0x1230: 0x00c0, 0x1231: 0x00c0, 0x1232: 0x00c0, 0x1233: 0x00c0, 0x1234: 0x00c0, 0x1235: 0x00c0, - 0x1236: 0x00c0, 0x1237: 0x00c0, 0x1238: 0x00c0, 0x1239: 0x00c0, 0x123a: 0x00c0, 0x123b: 0x00c0, - 0x123c: 0x00c0, 0x123d: 0x00c0, 0x123e: 0x00c0, 0x123f: 0x00c0, - // Block 0x49, offset 0x1240 - 0x1240: 0x00c0, 0x1241: 0x00c0, 0x1242: 0x00c0, 0x1243: 0x00c0, 0x1244: 0x00c0, 0x1245: 0x00c0, - 0x1246: 0x00c0, 0x1247: 0x00c0, 0x1248: 0x00c0, 0x1249: 0x00c0, 0x124a: 0x00c0, 0x124b: 0x00c0, - 0x124c: 0x00c0, 0x124d: 0x00c0, 0x124e: 0x00c0, 0x124f: 0x00c0, 0x1250: 0x00c0, 0x1251: 0x00c0, - 0x1252: 0x00c0, 0x1253: 0x00c0, 0x1254: 0x00c0, 0x1255: 0x00c0, 0x1256: 0x00c0, 0x1257: 0x00c0, - 0x1258: 0x00c0, 0x1259: 0x00c0, 0x125a: 0x00c0, 0x125b: 0x00c0, 0x125c: 0x00c0, 0x125d: 0x00c0, - 0x125e: 0x00c0, 0x125f: 0x00c0, 0x1260: 0x00c0, 0x1261: 0x00c0, 0x1262: 0x00c0, 0x1263: 0x00c0, - 0x1264: 0x00c0, 0x1265: 0x00c0, 0x1266: 0x00c0, 0x1267: 0x00c0, 0x1268: 0x00c0, 0x1269: 0x00c0, - 0x126a: 0x00c0, 0x126b: 0x00c0, 0x126c: 0x00c0, 0x126d: 0x0080, 0x126e: 0x0080, 0x126f: 0x00c0, - 0x1270: 0x00c0, 0x1271: 0x00c0, 0x1272: 0x00c0, 0x1273: 0x00c0, 0x1274: 0x00c0, 0x1275: 0x00c0, - 0x1276: 0x00c0, 0x1277: 0x00c0, 0x1278: 0x00c0, 0x1279: 0x00c0, 0x127a: 0x00c0, 0x127b: 0x00c0, - 0x127c: 0x00c0, 0x127d: 0x00c0, 0x127e: 0x00c0, 0x127f: 0x00c0, - // Block 0x4a, offset 0x1280 - 0x1280: 0x0080, 0x1281: 0x00c0, 0x1282: 0x00c0, 0x1283: 0x00c0, 0x1284: 0x00c0, 0x1285: 0x00c0, - 0x1286: 0x00c0, 0x1287: 0x00c0, 0x1288: 0x00c0, 0x1289: 0x00c0, 0x128a: 0x00c0, 0x128b: 0x00c0, - 0x128c: 0x00c0, 0x128d: 0x00c0, 0x128e: 0x00c0, 0x128f: 0x00c0, 0x1290: 0x00c0, 0x1291: 0x00c0, - 0x1292: 0x00c0, 0x1293: 0x00c0, 0x1294: 0x00c0, 0x1295: 0x00c0, 0x1296: 0x00c0, 0x1297: 0x00c0, - 0x1298: 0x00c0, 0x1299: 0x00c0, 0x129a: 0x00c0, 0x129b: 0x0080, 0x129c: 0x0080, - 0x12a0: 0x00c0, 0x12a1: 0x00c0, 0x12a2: 0x00c0, 0x12a3: 0x00c0, - 0x12a4: 0x00c0, 0x12a5: 0x00c0, 0x12a6: 0x00c0, 0x12a7: 0x00c0, 0x12a8: 0x00c0, 0x12a9: 0x00c0, - 0x12aa: 0x00c0, 0x12ab: 0x00c0, 0x12ac: 0x00c0, 0x12ad: 0x00c0, 0x12ae: 0x00c0, 0x12af: 0x00c0, - 0x12b0: 0x00c0, 0x12b1: 0x00c0, 0x12b2: 0x00c0, 0x12b3: 0x00c0, 0x12b4: 0x00c0, 0x12b5: 0x00c0, - 0x12b6: 0x00c0, 0x12b7: 0x00c0, 0x12b8: 0x00c0, 0x12b9: 0x00c0, 0x12ba: 0x00c0, 0x12bb: 0x00c0, - 0x12bc: 0x00c0, 0x12bd: 0x00c0, 0x12be: 0x00c0, 0x12bf: 0x00c0, - // Block 0x4b, offset 0x12c0 - 0x12c0: 0x00c0, 0x12c1: 0x00c0, 0x12c2: 0x00c0, 0x12c3: 0x00c0, 0x12c4: 0x00c0, 0x12c5: 0x00c0, - 0x12c6: 0x00c0, 0x12c7: 0x00c0, 0x12c8: 0x00c0, 0x12c9: 0x00c0, 0x12ca: 0x00c0, 0x12cb: 0x00c0, - 0x12cc: 0x00c0, 0x12cd: 0x00c0, 0x12ce: 0x00c0, 0x12cf: 0x00c0, 0x12d0: 0x00c0, 0x12d1: 0x00c0, - 0x12d2: 0x00c0, 0x12d3: 0x00c0, 0x12d4: 0x00c0, 0x12d5: 0x00c0, 0x12d6: 0x00c0, 0x12d7: 0x00c0, - 0x12d8: 0x00c0, 0x12d9: 0x00c0, 0x12da: 0x00c0, 0x12db: 0x00c0, 0x12dc: 0x00c0, 0x12dd: 0x00c0, - 0x12de: 0x00c0, 0x12df: 0x00c0, 0x12e0: 0x00c0, 0x12e1: 0x00c0, 0x12e2: 0x00c0, 0x12e3: 0x00c0, - 0x12e4: 0x00c0, 0x12e5: 0x00c0, 0x12e6: 0x00c0, 0x12e7: 0x00c0, 0x12e8: 0x00c0, 0x12e9: 0x00c0, - 0x12ea: 0x00c0, 0x12eb: 0x0080, 0x12ec: 0x0080, 0x12ed: 0x0080, 0x12ee: 0x0080, 0x12ef: 0x0080, - 0x12f0: 0x0080, 0x12f1: 0x00c0, 0x12f2: 0x00c0, 0x12f3: 0x00c0, 0x12f4: 0x00c0, 0x12f5: 0x00c0, - 0x12f6: 0x00c0, 0x12f7: 0x00c0, 0x12f8: 0x00c0, - // Block 0x4c, offset 0x1300 - 0x1300: 0x00c0, 0x1301: 0x00c0, 0x1302: 0x00c0, 0x1303: 0x00c0, 0x1304: 0x00c0, 0x1305: 0x00c0, - 0x1306: 0x00c0, 0x1307: 0x00c0, 0x1308: 0x00c0, 0x1309: 0x00c0, 0x130a: 0x00c0, 0x130b: 0x00c0, - 0x130c: 0x00c0, 0x130e: 0x00c0, 0x130f: 0x00c0, 0x1310: 0x00c0, 0x1311: 0x00c0, - 0x1312: 0x00c3, 0x1313: 0x00c3, 0x1314: 0x00c6, - 0x1320: 0x00c0, 0x1321: 0x00c0, 0x1322: 0x00c0, 0x1323: 0x00c0, - 0x1324: 0x00c0, 0x1325: 0x00c0, 0x1326: 0x00c0, 0x1327: 0x00c0, 0x1328: 0x00c0, 0x1329: 0x00c0, - 0x132a: 0x00c0, 0x132b: 0x00c0, 0x132c: 0x00c0, 0x132d: 0x00c0, 0x132e: 0x00c0, 0x132f: 0x00c0, - 0x1330: 0x00c0, 0x1331: 0x00c0, 0x1332: 0x00c3, 0x1333: 0x00c3, 0x1334: 0x00c6, 0x1335: 0x0080, - 0x1336: 0x0080, - // Block 0x4d, offset 0x1340 - 0x1340: 0x00c0, 0x1341: 0x00c0, 0x1342: 0x00c0, 0x1343: 0x00c0, 0x1344: 0x00c0, 0x1345: 0x00c0, - 0x1346: 0x00c0, 0x1347: 0x00c0, 0x1348: 0x00c0, 0x1349: 0x00c0, 0x134a: 0x00c0, 0x134b: 0x00c0, - 0x134c: 0x00c0, 0x134d: 0x00c0, 0x134e: 0x00c0, 0x134f: 0x00c0, 0x1350: 0x00c0, 0x1351: 0x00c0, - 0x1352: 0x00c3, 0x1353: 0x00c3, - 0x1360: 0x00c0, 0x1361: 0x00c0, 0x1362: 0x00c0, 0x1363: 0x00c0, - 0x1364: 0x00c0, 0x1365: 0x00c0, 0x1366: 0x00c0, 0x1367: 0x00c0, 0x1368: 0x00c0, 0x1369: 0x00c0, - 0x136a: 0x00c0, 0x136b: 0x00c0, 0x136c: 0x00c0, 0x136e: 0x00c0, 0x136f: 0x00c0, - 0x1370: 0x00c0, 0x1372: 0x00c3, 0x1373: 0x00c3, - // Block 0x4e, offset 0x1380 - 0x1380: 0x00c0, 0x1381: 0x00c0, 0x1382: 0x00c0, 0x1383: 0x00c0, 0x1384: 0x00c0, 0x1385: 0x00c0, - 0x1386: 0x00c0, 0x1387: 0x00c0, 0x1388: 0x00c0, 0x1389: 0x00c0, 0x138a: 0x00c0, 0x138b: 0x00c0, - 0x138c: 0x00c0, 0x138d: 0x00c0, 0x138e: 0x00c0, 0x138f: 0x00c0, 0x1390: 0x00c0, 0x1391: 0x00c0, - 0x1392: 0x00c0, 0x1393: 0x00c0, 0x1394: 0x00c0, 0x1395: 0x00c0, 0x1396: 0x00c0, 0x1397: 0x00c0, - 0x1398: 0x00c0, 0x1399: 0x00c0, 0x139a: 0x00c0, 0x139b: 0x00c0, 0x139c: 0x00c0, 0x139d: 0x00c0, - 0x139e: 0x00c0, 0x139f: 0x00c0, 0x13a0: 0x00c0, 0x13a1: 0x00c0, 0x13a2: 0x00c0, 0x13a3: 0x00c0, - 0x13a4: 0x00c0, 0x13a5: 0x00c0, 0x13a6: 0x00c0, 0x13a7: 0x00c0, 0x13a8: 0x00c0, 0x13a9: 0x00c0, - 0x13aa: 0x00c0, 0x13ab: 0x00c0, 0x13ac: 0x00c0, 0x13ad: 0x00c0, 0x13ae: 0x00c0, 0x13af: 0x00c0, - 0x13b0: 0x00c0, 0x13b1: 0x00c0, 0x13b2: 0x00c0, 0x13b3: 0x00c0, 0x13b4: 0x0040, 0x13b5: 0x0040, - 0x13b6: 0x00c0, 0x13b7: 0x00c3, 0x13b8: 0x00c3, 0x13b9: 0x00c3, 0x13ba: 0x00c3, 0x13bb: 0x00c3, - 0x13bc: 0x00c3, 0x13bd: 0x00c3, 0x13be: 0x00c0, 0x13bf: 0x00c0, - // Block 0x4f, offset 0x13c0 - 0x13c0: 0x00c0, 0x13c1: 0x00c0, 0x13c2: 0x00c0, 0x13c3: 0x00c0, 0x13c4: 0x00c0, 0x13c5: 0x00c0, - 0x13c6: 0x00c3, 0x13c7: 0x00c0, 0x13c8: 0x00c0, 0x13c9: 0x00c3, 0x13ca: 0x00c3, 0x13cb: 0x00c3, - 0x13cc: 0x00c3, 0x13cd: 0x00c3, 0x13ce: 0x00c3, 0x13cf: 0x00c3, 0x13d0: 0x00c3, 0x13d1: 0x00c3, - 0x13d2: 0x00c6, 0x13d3: 0x00c3, 0x13d4: 0x0080, 0x13d5: 0x0080, 0x13d6: 0x0080, 0x13d7: 0x00c0, - 0x13d8: 0x0080, 0x13d9: 0x0080, 0x13da: 0x0080, 0x13db: 0x0080, 0x13dc: 0x00c0, 0x13dd: 0x00c3, - 0x13e0: 0x00c0, 0x13e1: 0x00c0, 0x13e2: 0x00c0, 0x13e3: 0x00c0, - 0x13e4: 0x00c0, 0x13e5: 0x00c0, 0x13e6: 0x00c0, 0x13e7: 0x00c0, 0x13e8: 0x00c0, 0x13e9: 0x00c0, - 0x13f0: 0x0080, 0x13f1: 0x0080, 0x13f2: 0x0080, 0x13f3: 0x0080, 0x13f4: 0x0080, 0x13f5: 0x0080, - 0x13f6: 0x0080, 0x13f7: 0x0080, 0x13f8: 0x0080, 0x13f9: 0x0080, - // Block 0x50, offset 0x1400 - 0x1400: 0x0080, 0x1401: 0x0080, 0x1402: 0x0080, 0x1403: 0x0080, 0x1404: 0x0080, 0x1405: 0x0080, - 0x1406: 0x0080, 0x1407: 0x0082, 0x1408: 0x0080, 0x1409: 0x0080, 0x140a: 0x0080, 0x140b: 0x0040, - 0x140c: 0x0040, 0x140d: 0x0040, 0x140e: 0x0040, 0x1410: 0x00c0, 0x1411: 0x00c0, - 0x1412: 0x00c0, 0x1413: 0x00c0, 0x1414: 0x00c0, 0x1415: 0x00c0, 0x1416: 0x00c0, 0x1417: 0x00c0, - 0x1418: 0x00c0, 0x1419: 0x00c0, - 0x1420: 0x00c2, 0x1421: 0x00c2, 0x1422: 0x00c2, 0x1423: 0x00c2, - 0x1424: 0x00c2, 0x1425: 0x00c2, 0x1426: 0x00c2, 0x1427: 0x00c2, 0x1428: 0x00c2, 0x1429: 0x00c2, - 0x142a: 0x00c2, 0x142b: 0x00c2, 0x142c: 0x00c2, 0x142d: 0x00c2, 0x142e: 0x00c2, 0x142f: 0x00c2, - 0x1430: 0x00c2, 0x1431: 0x00c2, 0x1432: 0x00c2, 0x1433: 0x00c2, 0x1434: 0x00c2, 0x1435: 0x00c2, - 0x1436: 0x00c2, 0x1437: 0x00c2, 0x1438: 0x00c2, 0x1439: 0x00c2, 0x143a: 0x00c2, 0x143b: 0x00c2, - 0x143c: 0x00c2, 0x143d: 0x00c2, 0x143e: 0x00c2, 0x143f: 0x00c2, - // Block 0x51, offset 0x1440 - 0x1440: 0x00c2, 0x1441: 0x00c2, 0x1442: 0x00c2, 0x1443: 0x00c2, 0x1444: 0x00c2, 0x1445: 0x00c2, - 0x1446: 0x00c2, 0x1447: 0x00c2, 0x1448: 0x00c2, 0x1449: 0x00c2, 0x144a: 0x00c2, 0x144b: 0x00c2, - 0x144c: 0x00c2, 0x144d: 0x00c2, 0x144e: 0x00c2, 0x144f: 0x00c2, 0x1450: 0x00c2, 0x1451: 0x00c2, - 0x1452: 0x00c2, 0x1453: 0x00c2, 0x1454: 0x00c2, 0x1455: 0x00c2, 0x1456: 0x00c2, 0x1457: 0x00c2, - 0x1458: 0x00c2, 0x1459: 0x00c2, 0x145a: 0x00c2, 0x145b: 0x00c2, 0x145c: 0x00c2, 0x145d: 0x00c2, - 0x145e: 0x00c2, 0x145f: 0x00c2, 0x1460: 0x00c2, 0x1461: 0x00c2, 0x1462: 0x00c2, 0x1463: 0x00c2, - 0x1464: 0x00c2, 0x1465: 0x00c2, 0x1466: 0x00c2, 0x1467: 0x00c2, 0x1468: 0x00c2, 0x1469: 0x00c2, - 0x146a: 0x00c2, 0x146b: 0x00c2, 0x146c: 0x00c2, 0x146d: 0x00c2, 0x146e: 0x00c2, 0x146f: 0x00c2, - 0x1470: 0x00c2, 0x1471: 0x00c2, 0x1472: 0x00c2, 0x1473: 0x00c2, 0x1474: 0x00c2, 0x1475: 0x00c2, - 0x1476: 0x00c2, 0x1477: 0x00c2, - // Block 0x52, offset 0x1480 - 0x1480: 0x00c0, 0x1481: 0x00c0, 0x1482: 0x00c0, 0x1483: 0x00c0, 0x1484: 0x00c0, 0x1485: 0x00c3, - 0x1486: 0x00c3, 0x1487: 0x00c2, 0x1488: 0x00c2, 0x1489: 0x00c2, 0x148a: 0x00c2, 0x148b: 0x00c2, - 0x148c: 0x00c2, 0x148d: 0x00c2, 0x148e: 0x00c2, 0x148f: 0x00c2, 0x1490: 0x00c2, 0x1491: 0x00c2, - 0x1492: 0x00c2, 0x1493: 0x00c2, 0x1494: 0x00c2, 0x1495: 0x00c2, 0x1496: 0x00c2, 0x1497: 0x00c2, - 0x1498: 0x00c2, 0x1499: 0x00c2, 0x149a: 0x00c2, 0x149b: 0x00c2, 0x149c: 0x00c2, 0x149d: 0x00c2, - 0x149e: 0x00c2, 0x149f: 0x00c2, 0x14a0: 0x00c2, 0x14a1: 0x00c2, 0x14a2: 0x00c2, 0x14a3: 0x00c2, - 0x14a4: 0x00c2, 0x14a5: 0x00c2, 0x14a6: 0x00c2, 0x14a7: 0x00c2, 0x14a8: 0x00c2, 0x14a9: 0x00c3, - 0x14aa: 0x00c2, - 0x14b0: 0x00c0, 0x14b1: 0x00c0, 0x14b2: 0x00c0, 0x14b3: 0x00c0, 0x14b4: 0x00c0, 0x14b5: 0x00c0, - 0x14b6: 0x00c0, 0x14b7: 0x00c0, 0x14b8: 0x00c0, 0x14b9: 0x00c0, 0x14ba: 0x00c0, 0x14bb: 0x00c0, - 0x14bc: 0x00c0, 0x14bd: 0x00c0, 0x14be: 0x00c0, 0x14bf: 0x00c0, - // Block 0x53, offset 0x14c0 - 0x14c0: 0x00c0, 0x14c1: 0x00c0, 0x14c2: 0x00c0, 0x14c3: 0x00c0, 0x14c4: 0x00c0, 0x14c5: 0x00c0, - 0x14c6: 0x00c0, 0x14c7: 0x00c0, 0x14c8: 0x00c0, 0x14c9: 0x00c0, 0x14ca: 0x00c0, 0x14cb: 0x00c0, - 0x14cc: 0x00c0, 0x14cd: 0x00c0, 0x14ce: 0x00c0, 0x14cf: 0x00c0, 0x14d0: 0x00c0, 0x14d1: 0x00c0, - 0x14d2: 0x00c0, 0x14d3: 0x00c0, 0x14d4: 0x00c0, 0x14d5: 0x00c0, 0x14d6: 0x00c0, 0x14d7: 0x00c0, - 0x14d8: 0x00c0, 0x14d9: 0x00c0, 0x14da: 0x00c0, 0x14db: 0x00c0, 0x14dc: 0x00c0, 0x14dd: 0x00c0, - 0x14de: 0x00c0, 0x14df: 0x00c0, 0x14e0: 0x00c0, 0x14e1: 0x00c0, 0x14e2: 0x00c0, 0x14e3: 0x00c0, - 0x14e4: 0x00c0, 0x14e5: 0x00c0, 0x14e6: 0x00c0, 0x14e7: 0x00c0, 0x14e8: 0x00c0, 0x14e9: 0x00c0, - 0x14ea: 0x00c0, 0x14eb: 0x00c0, 0x14ec: 0x00c0, 0x14ed: 0x00c0, 0x14ee: 0x00c0, 0x14ef: 0x00c0, - 0x14f0: 0x00c0, 0x14f1: 0x00c0, 0x14f2: 0x00c0, 0x14f3: 0x00c0, 0x14f4: 0x00c0, 0x14f5: 0x00c0, - // Block 0x54, offset 0x1500 - 0x1500: 0x00c0, 0x1501: 0x00c0, 0x1502: 0x00c0, 0x1503: 0x00c0, 0x1504: 0x00c0, 0x1505: 0x00c0, - 0x1506: 0x00c0, 0x1507: 0x00c0, 0x1508: 0x00c0, 0x1509: 0x00c0, 0x150a: 0x00c0, 0x150b: 0x00c0, - 0x150c: 0x00c0, 0x150d: 0x00c0, 0x150e: 0x00c0, 0x150f: 0x00c0, 0x1510: 0x00c0, 0x1511: 0x00c0, - 0x1512: 0x00c0, 0x1513: 0x00c0, 0x1514: 0x00c0, 0x1515: 0x00c0, 0x1516: 0x00c0, 0x1517: 0x00c0, - 0x1518: 0x00c0, 0x1519: 0x00c0, 0x151a: 0x00c0, 0x151b: 0x00c0, 0x151c: 0x00c0, 0x151d: 0x00c0, - 0x151e: 0x00c0, 0x1520: 0x00c3, 0x1521: 0x00c3, 0x1522: 0x00c3, 0x1523: 0x00c0, - 0x1524: 0x00c0, 0x1525: 0x00c0, 0x1526: 0x00c0, 0x1527: 0x00c3, 0x1528: 0x00c3, 0x1529: 0x00c0, - 0x152a: 0x00c0, 0x152b: 0x00c0, - 0x1530: 0x00c0, 0x1531: 0x00c0, 0x1532: 0x00c3, 0x1533: 0x00c0, 0x1534: 0x00c0, 0x1535: 0x00c0, - 0x1536: 0x00c0, 0x1537: 0x00c0, 0x1538: 0x00c0, 0x1539: 0x00c3, 0x153a: 0x00c3, 0x153b: 0x00c3, - // Block 0x55, offset 0x1540 - 0x1540: 0x0080, 0x1544: 0x0080, 0x1545: 0x0080, - 0x1546: 0x00c0, 0x1547: 0x00c0, 0x1548: 0x00c0, 0x1549: 0x00c0, 0x154a: 0x00c0, 0x154b: 0x00c0, - 0x154c: 0x00c0, 0x154d: 0x00c0, 0x154e: 0x00c0, 0x154f: 0x00c0, 0x1550: 0x00c0, 0x1551: 0x00c0, - 0x1552: 0x00c0, 0x1553: 0x00c0, 0x1554: 0x00c0, 0x1555: 0x00c0, 0x1556: 0x00c0, 0x1557: 0x00c0, - 0x1558: 0x00c0, 0x1559: 0x00c0, 0x155a: 0x00c0, 0x155b: 0x00c0, 0x155c: 0x00c0, 0x155d: 0x00c0, - 0x155e: 0x00c0, 0x155f: 0x00c0, 0x1560: 0x00c0, 0x1561: 0x00c0, 0x1562: 0x00c0, 0x1563: 0x00c0, - 0x1564: 0x00c0, 0x1565: 0x00c0, 0x1566: 0x00c0, 0x1567: 0x00c0, 0x1568: 0x00c0, 0x1569: 0x00c0, - 0x156a: 0x00c0, 0x156b: 0x00c0, 0x156c: 0x00c0, 0x156d: 0x00c0, - 0x1570: 0x00c0, 0x1571: 0x00c0, 0x1572: 0x00c0, 0x1573: 0x00c0, 0x1574: 0x00c0, - // Block 0x56, offset 0x1580 - 0x1580: 0x00c0, 0x1581: 0x00c0, 0x1582: 0x00c0, 0x1583: 0x00c0, 0x1584: 0x00c0, 0x1585: 0x00c0, - 0x1586: 0x00c0, 0x1587: 0x00c0, 0x1588: 0x00c0, 0x1589: 0x00c0, 0x158a: 0x00c0, 0x158b: 0x00c0, - 0x158c: 0x00c0, 0x158d: 0x00c0, 0x158e: 0x00c0, 0x158f: 0x00c0, 0x1590: 0x00c0, 0x1591: 0x00c0, - 0x1592: 0x00c0, 0x1593: 0x00c0, 0x1594: 0x00c0, 0x1595: 0x00c0, 0x1596: 0x00c0, 0x1597: 0x00c0, - 0x1598: 0x00c0, 0x1599: 0x00c0, 0x159a: 0x00c0, 0x159b: 0x00c0, 0x159c: 0x00c0, 0x159d: 0x00c0, - 0x159e: 0x00c0, 0x159f: 0x00c0, 0x15a0: 0x00c0, 0x15a1: 0x00c0, 0x15a2: 0x00c0, 0x15a3: 0x00c0, - 0x15a4: 0x00c0, 0x15a5: 0x00c0, 0x15a6: 0x00c0, 0x15a7: 0x00c0, 0x15a8: 0x00c0, 0x15a9: 0x00c0, - 0x15aa: 0x00c0, 0x15ab: 0x00c0, - 0x15b0: 0x00c0, 0x15b1: 0x00c0, 0x15b2: 0x00c0, 0x15b3: 0x00c0, 0x15b4: 0x00c0, 0x15b5: 0x00c0, - 0x15b6: 0x00c0, 0x15b7: 0x00c0, 0x15b8: 0x00c0, 0x15b9: 0x00c0, 0x15ba: 0x00c0, 0x15bb: 0x00c0, - 0x15bc: 0x00c0, 0x15bd: 0x00c0, 0x15be: 0x00c0, 0x15bf: 0x00c0, - // Block 0x57, offset 0x15c0 - 0x15c0: 0x00c0, 0x15c1: 0x00c0, 0x15c2: 0x00c0, 0x15c3: 0x00c0, 0x15c4: 0x00c0, 0x15c5: 0x00c0, - 0x15c6: 0x00c0, 0x15c7: 0x00c0, 0x15c8: 0x00c0, 0x15c9: 0x00c0, - 0x15d0: 0x00c0, 0x15d1: 0x00c0, - 0x15d2: 0x00c0, 0x15d3: 0x00c0, 0x15d4: 0x00c0, 0x15d5: 0x00c0, 0x15d6: 0x00c0, 0x15d7: 0x00c0, - 0x15d8: 0x00c0, 0x15d9: 0x00c0, 0x15da: 0x0080, - 0x15de: 0x0080, 0x15df: 0x0080, 0x15e0: 0x0080, 0x15e1: 0x0080, 0x15e2: 0x0080, 0x15e3: 0x0080, - 0x15e4: 0x0080, 0x15e5: 0x0080, 0x15e6: 0x0080, 0x15e7: 0x0080, 0x15e8: 0x0080, 0x15e9: 0x0080, - 0x15ea: 0x0080, 0x15eb: 0x0080, 0x15ec: 0x0080, 0x15ed: 0x0080, 0x15ee: 0x0080, 0x15ef: 0x0080, - 0x15f0: 0x0080, 0x15f1: 0x0080, 0x15f2: 0x0080, 0x15f3: 0x0080, 0x15f4: 0x0080, 0x15f5: 0x0080, - 0x15f6: 0x0080, 0x15f7: 0x0080, 0x15f8: 0x0080, 0x15f9: 0x0080, 0x15fa: 0x0080, 0x15fb: 0x0080, - 0x15fc: 0x0080, 0x15fd: 0x0080, 0x15fe: 0x0080, 0x15ff: 0x0080, - // Block 0x58, offset 0x1600 - 0x1600: 0x00c0, 0x1601: 0x00c0, 0x1602: 0x00c0, 0x1603: 0x00c0, 0x1604: 0x00c0, 0x1605: 0x00c0, - 0x1606: 0x00c0, 0x1607: 0x00c0, 0x1608: 0x00c0, 0x1609: 0x00c0, 0x160a: 0x00c0, 0x160b: 0x00c0, - 0x160c: 0x00c0, 0x160d: 0x00c0, 0x160e: 0x00c0, 0x160f: 0x00c0, 0x1610: 0x00c0, 0x1611: 0x00c0, - 0x1612: 0x00c0, 0x1613: 0x00c0, 0x1614: 0x00c0, 0x1615: 0x00c0, 0x1616: 0x00c0, 0x1617: 0x00c3, - 0x1618: 0x00c3, 0x1619: 0x00c0, 0x161a: 0x00c0, 0x161b: 0x00c3, - 0x161e: 0x0080, 0x161f: 0x0080, 0x1620: 0x00c0, 0x1621: 0x00c0, 0x1622: 0x00c0, 0x1623: 0x00c0, - 0x1624: 0x00c0, 0x1625: 0x00c0, 0x1626: 0x00c0, 0x1627: 0x00c0, 0x1628: 0x00c0, 0x1629: 0x00c0, - 0x162a: 0x00c0, 0x162b: 0x00c0, 0x162c: 0x00c0, 0x162d: 0x00c0, 0x162e: 0x00c0, 0x162f: 0x00c0, - 0x1630: 0x00c0, 0x1631: 0x00c0, 0x1632: 0x00c0, 0x1633: 0x00c0, 0x1634: 0x00c0, 0x1635: 0x00c0, - 0x1636: 0x00c0, 0x1637: 0x00c0, 0x1638: 0x00c0, 0x1639: 0x00c0, 0x163a: 0x00c0, 0x163b: 0x00c0, - 0x163c: 0x00c0, 0x163d: 0x00c0, 0x163e: 0x00c0, 0x163f: 0x00c0, - // Block 0x59, offset 0x1640 - 0x1640: 0x00c0, 0x1641: 0x00c0, 0x1642: 0x00c0, 0x1643: 0x00c0, 0x1644: 0x00c0, 0x1645: 0x00c0, - 0x1646: 0x00c0, 0x1647: 0x00c0, 0x1648: 0x00c0, 0x1649: 0x00c0, 0x164a: 0x00c0, 0x164b: 0x00c0, - 0x164c: 0x00c0, 0x164d: 0x00c0, 0x164e: 0x00c0, 0x164f: 0x00c0, 0x1650: 0x00c0, 0x1651: 0x00c0, - 0x1652: 0x00c0, 0x1653: 0x00c0, 0x1654: 0x00c0, 0x1655: 0x00c0, 0x1656: 0x00c3, 0x1657: 0x00c0, - 0x1658: 0x00c3, 0x1659: 0x00c3, 0x165a: 0x00c3, 0x165b: 0x00c3, 0x165c: 0x00c3, 0x165d: 0x00c3, - 0x165e: 0x00c3, 0x1660: 0x00c6, 0x1661: 0x00c0, 0x1662: 0x00c3, 0x1663: 0x00c0, - 0x1664: 0x00c0, 0x1665: 0x00c3, 0x1666: 0x00c3, 0x1667: 0x00c3, 0x1668: 0x00c3, 0x1669: 0x00c3, - 0x166a: 0x00c3, 0x166b: 0x00c3, 0x166c: 0x00c3, 0x166d: 0x00c0, 0x166e: 0x00c0, 0x166f: 0x00c0, - 0x1670: 0x00c0, 0x1671: 0x00c0, 0x1672: 0x00c0, 0x1673: 0x00c3, 0x1674: 0x00c3, 0x1675: 0x00c3, - 0x1676: 0x00c3, 0x1677: 0x00c3, 0x1678: 0x00c3, 0x1679: 0x00c3, 0x167a: 0x00c3, 0x167b: 0x00c3, - 0x167c: 0x00c3, 0x167f: 0x00c3, - // Block 0x5a, offset 0x1680 - 0x1680: 0x00c0, 0x1681: 0x00c0, 0x1682: 0x00c0, 0x1683: 0x00c0, 0x1684: 0x00c0, 0x1685: 0x00c0, - 0x1686: 0x00c0, 0x1687: 0x00c0, 0x1688: 0x00c0, 0x1689: 0x00c0, - 0x1690: 0x00c0, 0x1691: 0x00c0, - 0x1692: 0x00c0, 0x1693: 0x00c0, 0x1694: 0x00c0, 0x1695: 0x00c0, 0x1696: 0x00c0, 0x1697: 0x00c0, - 0x1698: 0x00c0, 0x1699: 0x00c0, - 0x16a0: 0x0080, 0x16a1: 0x0080, 0x16a2: 0x0080, 0x16a3: 0x0080, - 0x16a4: 0x0080, 0x16a5: 0x0080, 0x16a6: 0x0080, 0x16a7: 0x00c0, 0x16a8: 0x0080, 0x16a9: 0x0080, - 0x16aa: 0x0080, 0x16ab: 0x0080, 0x16ac: 0x0080, 0x16ad: 0x0080, - 0x16b0: 0x00c3, 0x16b1: 0x00c3, 0x16b2: 0x00c3, 0x16b3: 0x00c3, 0x16b4: 0x00c3, 0x16b5: 0x00c3, - 0x16b6: 0x00c3, 0x16b7: 0x00c3, 0x16b8: 0x00c3, 0x16b9: 0x00c3, 0x16ba: 0x00c3, 0x16bb: 0x00c3, - 0x16bc: 0x00c3, 0x16bd: 0x00c3, 0x16be: 0x0083, - // Block 0x5b, offset 0x16c0 - 0x16c0: 0x00c3, 0x16c1: 0x00c3, 0x16c2: 0x00c3, 0x16c3: 0x00c3, 0x16c4: 0x00c0, 0x16c5: 0x00c0, - 0x16c6: 0x00c0, 0x16c7: 0x00c0, 0x16c8: 0x00c0, 0x16c9: 0x00c0, 0x16ca: 0x00c0, 0x16cb: 0x00c0, - 0x16cc: 0x00c0, 0x16cd: 0x00c0, 0x16ce: 0x00c0, 0x16cf: 0x00c0, 0x16d0: 0x00c0, 0x16d1: 0x00c0, - 0x16d2: 0x00c0, 0x16d3: 0x00c0, 0x16d4: 0x00c0, 0x16d5: 0x00c0, 0x16d6: 0x00c0, 0x16d7: 0x00c0, - 0x16d8: 0x00c0, 0x16d9: 0x00c0, 0x16da: 0x00c0, 0x16db: 0x00c0, 0x16dc: 0x00c0, 0x16dd: 0x00c0, - 0x16de: 0x00c0, 0x16df: 0x00c0, 0x16e0: 0x00c0, 0x16e1: 0x00c0, 0x16e2: 0x00c0, 0x16e3: 0x00c0, - 0x16e4: 0x00c0, 0x16e5: 0x00c0, 0x16e6: 0x00c0, 0x16e7: 0x00c0, 0x16e8: 0x00c0, 0x16e9: 0x00c0, - 0x16ea: 0x00c0, 0x16eb: 0x00c0, 0x16ec: 0x00c0, 0x16ed: 0x00c0, 0x16ee: 0x00c0, 0x16ef: 0x00c0, - 0x16f0: 0x00c0, 0x16f1: 0x00c0, 0x16f2: 0x00c0, 0x16f3: 0x00c0, 0x16f4: 0x00c3, 0x16f5: 0x00c0, - 0x16f6: 0x00c3, 0x16f7: 0x00c3, 0x16f8: 0x00c3, 0x16f9: 0x00c3, 0x16fa: 0x00c3, 0x16fb: 0x00c0, - 0x16fc: 0x00c3, 0x16fd: 0x00c0, 0x16fe: 0x00c0, 0x16ff: 0x00c0, - // Block 0x5c, offset 0x1700 - 0x1700: 0x00c0, 0x1701: 0x00c0, 0x1702: 0x00c3, 0x1703: 0x00c0, 0x1704: 0x00c5, 0x1705: 0x00c0, - 0x1706: 0x00c0, 0x1707: 0x00c0, 0x1708: 0x00c0, 0x1709: 0x00c0, 0x170a: 0x00c0, 0x170b: 0x00c0, - 0x1710: 0x00c0, 0x1711: 0x00c0, - 0x1712: 0x00c0, 0x1713: 0x00c0, 0x1714: 0x00c0, 0x1715: 0x00c0, 0x1716: 0x00c0, 0x1717: 0x00c0, - 0x1718: 0x00c0, 0x1719: 0x00c0, 0x171a: 0x0080, 0x171b: 0x0080, 0x171c: 0x0080, 0x171d: 0x0080, - 0x171e: 0x0080, 0x171f: 0x0080, 0x1720: 0x0080, 0x1721: 0x0080, 0x1722: 0x0080, 0x1723: 0x0080, - 0x1724: 0x0080, 0x1725: 0x0080, 0x1726: 0x0080, 0x1727: 0x0080, 0x1728: 0x0080, 0x1729: 0x0080, - 0x172a: 0x0080, 0x172b: 0x00c3, 0x172c: 0x00c3, 0x172d: 0x00c3, 0x172e: 0x00c3, 0x172f: 0x00c3, - 0x1730: 0x00c3, 0x1731: 0x00c3, 0x1732: 0x00c3, 0x1733: 0x00c3, 0x1734: 0x0080, 0x1735: 0x0080, - 0x1736: 0x0080, 0x1737: 0x0080, 0x1738: 0x0080, 0x1739: 0x0080, 0x173a: 0x0080, 0x173b: 0x0080, - 0x173c: 0x0080, - // Block 0x5d, offset 0x1740 - 0x1740: 0x00c3, 0x1741: 0x00c3, 0x1742: 0x00c0, 0x1743: 0x00c0, 0x1744: 0x00c0, 0x1745: 0x00c0, - 0x1746: 0x00c0, 0x1747: 0x00c0, 0x1748: 0x00c0, 0x1749: 0x00c0, 0x174a: 0x00c0, 0x174b: 0x00c0, - 0x174c: 0x00c0, 0x174d: 0x00c0, 0x174e: 0x00c0, 0x174f: 0x00c0, 0x1750: 0x00c0, 0x1751: 0x00c0, - 0x1752: 0x00c0, 0x1753: 0x00c0, 0x1754: 0x00c0, 0x1755: 0x00c0, 0x1756: 0x00c0, 0x1757: 0x00c0, - 0x1758: 0x00c0, 0x1759: 0x00c0, 0x175a: 0x00c0, 0x175b: 0x00c0, 0x175c: 0x00c0, 0x175d: 0x00c0, - 0x175e: 0x00c0, 0x175f: 0x00c0, 0x1760: 0x00c0, 0x1761: 0x00c0, 0x1762: 0x00c3, 0x1763: 0x00c3, - 0x1764: 0x00c3, 0x1765: 0x00c3, 0x1766: 0x00c0, 0x1767: 0x00c0, 0x1768: 0x00c3, 0x1769: 0x00c3, - 0x176a: 0x00c5, 0x176b: 0x00c6, 0x176c: 0x00c3, 0x176d: 0x00c3, 0x176e: 0x00c0, 0x176f: 0x00c0, - 0x1770: 0x00c0, 0x1771: 0x00c0, 0x1772: 0x00c0, 0x1773: 0x00c0, 0x1774: 0x00c0, 0x1775: 0x00c0, - 0x1776: 0x00c0, 0x1777: 0x00c0, 0x1778: 0x00c0, 0x1779: 0x00c0, 0x177a: 0x00c0, 0x177b: 0x00c0, - 0x177c: 0x00c0, 0x177d: 0x00c0, 0x177e: 0x00c0, 0x177f: 0x00c0, - // Block 0x5e, offset 0x1780 - 0x1780: 0x00c0, 0x1781: 0x00c0, 0x1782: 0x00c0, 0x1783: 0x00c0, 0x1784: 0x00c0, 0x1785: 0x00c0, - 0x1786: 0x00c0, 0x1787: 0x00c0, 0x1788: 0x00c0, 0x1789: 0x00c0, 0x178a: 0x00c0, 0x178b: 0x00c0, - 0x178c: 0x00c0, 0x178d: 0x00c0, 0x178e: 0x00c0, 0x178f: 0x00c0, 0x1790: 0x00c0, 0x1791: 0x00c0, - 0x1792: 0x00c0, 0x1793: 0x00c0, 0x1794: 0x00c0, 0x1795: 0x00c0, 0x1796: 0x00c0, 0x1797: 0x00c0, - 0x1798: 0x00c0, 0x1799: 0x00c0, 0x179a: 0x00c0, 0x179b: 0x00c0, 0x179c: 0x00c0, 0x179d: 0x00c0, - 0x179e: 0x00c0, 0x179f: 0x00c0, 0x17a0: 0x00c0, 0x17a1: 0x00c0, 0x17a2: 0x00c0, 0x17a3: 0x00c0, - 0x17a4: 0x00c0, 0x17a5: 0x00c0, 0x17a6: 0x00c3, 0x17a7: 0x00c0, 0x17a8: 0x00c3, 0x17a9: 0x00c3, - 0x17aa: 0x00c0, 0x17ab: 0x00c0, 0x17ac: 0x00c0, 0x17ad: 0x00c3, 0x17ae: 0x00c0, 0x17af: 0x00c3, - 0x17b0: 0x00c3, 0x17b1: 0x00c3, 0x17b2: 0x00c5, 0x17b3: 0x00c5, - 0x17bc: 0x0080, 0x17bd: 0x0080, 0x17be: 0x0080, 0x17bf: 0x0080, - // Block 0x5f, offset 0x17c0 - 0x17c0: 0x00c0, 0x17c1: 0x00c0, 0x17c2: 0x00c0, 0x17c3: 0x00c0, 0x17c4: 0x00c0, 0x17c5: 0x00c0, - 0x17c6: 0x00c0, 0x17c7: 0x00c0, 0x17c8: 0x00c0, 0x17c9: 0x00c0, 0x17ca: 0x00c0, 0x17cb: 0x00c0, - 0x17cc: 0x00c0, 0x17cd: 0x00c0, 0x17ce: 0x00c0, 0x17cf: 0x00c0, 0x17d0: 0x00c0, 0x17d1: 0x00c0, - 0x17d2: 0x00c0, 0x17d3: 0x00c0, 0x17d4: 0x00c0, 0x17d5: 0x00c0, 0x17d6: 0x00c0, 0x17d7: 0x00c0, - 0x17d8: 0x00c0, 0x17d9: 0x00c0, 0x17da: 0x00c0, 0x17db: 0x00c0, 0x17dc: 0x00c0, 0x17dd: 0x00c0, - 0x17de: 0x00c0, 0x17df: 0x00c0, 0x17e0: 0x00c0, 0x17e1: 0x00c0, 0x17e2: 0x00c0, 0x17e3: 0x00c0, - 0x17e4: 0x00c0, 0x17e5: 0x00c0, 0x17e6: 0x00c0, 0x17e7: 0x00c0, 0x17e8: 0x00c0, 0x17e9: 0x00c0, - 0x17ea: 0x00c0, 0x17eb: 0x00c0, 0x17ec: 0x00c3, 0x17ed: 0x00c3, 0x17ee: 0x00c3, 0x17ef: 0x00c3, - 0x17f0: 0x00c3, 0x17f1: 0x00c3, 0x17f2: 0x00c3, 0x17f3: 0x00c3, 0x17f4: 0x00c0, 0x17f5: 0x00c0, - 0x17f6: 0x00c3, 0x17f7: 0x00c3, 0x17fb: 0x0080, - 0x17fc: 0x0080, 0x17fd: 0x0080, 0x17fe: 0x0080, 0x17ff: 0x0080, - // Block 0x60, offset 0x1800 - 0x1800: 0x00c0, 0x1801: 0x00c0, 0x1802: 0x00c0, 0x1803: 0x00c0, 0x1804: 0x00c0, 0x1805: 0x00c0, - 0x1806: 0x00c0, 0x1807: 0x00c0, 0x1808: 0x00c0, 0x1809: 0x00c0, - 0x180d: 0x00c0, 0x180e: 0x00c0, 0x180f: 0x00c0, 0x1810: 0x00c0, 0x1811: 0x00c0, - 0x1812: 0x00c0, 0x1813: 0x00c0, 0x1814: 0x00c0, 0x1815: 0x00c0, 0x1816: 0x00c0, 0x1817: 0x00c0, - 0x1818: 0x00c0, 0x1819: 0x00c0, 0x181a: 0x00c0, 0x181b: 0x00c0, 0x181c: 0x00c0, 0x181d: 0x00c0, - 0x181e: 0x00c0, 0x181f: 0x00c0, 0x1820: 0x00c0, 0x1821: 0x00c0, 0x1822: 0x00c0, 0x1823: 0x00c0, - 0x1824: 0x00c0, 0x1825: 0x00c0, 0x1826: 0x00c0, 0x1827: 0x00c0, 0x1828: 0x00c0, 0x1829: 0x00c0, - 0x182a: 0x00c0, 0x182b: 0x00c0, 0x182c: 0x00c0, 0x182d: 0x00c0, 0x182e: 0x00c0, 0x182f: 0x00c0, - 0x1830: 0x00c0, 0x1831: 0x00c0, 0x1832: 0x00c0, 0x1833: 0x00c0, 0x1834: 0x00c0, 0x1835: 0x00c0, - 0x1836: 0x00c0, 0x1837: 0x00c0, 0x1838: 0x00c0, 0x1839: 0x00c0, 0x183a: 0x00c0, 0x183b: 0x00c0, - 0x183c: 0x00c0, 0x183d: 0x00c0, 0x183e: 0x0080, 0x183f: 0x0080, - // Block 0x61, offset 0x1840 - 0x1840: 0x00c0, 0x1841: 0x00c0, 0x1842: 0x00c0, 0x1843: 0x00c0, 0x1844: 0x00c0, 0x1845: 0x00c0, - 0x1846: 0x00c0, 0x1847: 0x00c0, 0x1848: 0x00c0, - // Block 0x62, offset 0x1880 - 0x1880: 0x0080, 0x1881: 0x0080, 0x1882: 0x0080, 0x1883: 0x0080, 0x1884: 0x0080, 0x1885: 0x0080, - 0x1886: 0x0080, 0x1887: 0x0080, - 0x1890: 0x00c3, 0x1891: 0x00c3, - 0x1892: 0x00c3, 0x1893: 0x0080, 0x1894: 0x00c3, 0x1895: 0x00c3, 0x1896: 0x00c3, 0x1897: 0x00c3, - 0x1898: 0x00c3, 0x1899: 0x00c3, 0x189a: 0x00c3, 0x189b: 0x00c3, 0x189c: 0x00c3, 0x189d: 0x00c3, - 0x189e: 0x00c3, 0x189f: 0x00c3, 0x18a0: 0x00c3, 0x18a1: 0x00c0, 0x18a2: 0x00c3, 0x18a3: 0x00c3, - 0x18a4: 0x00c3, 0x18a5: 0x00c3, 0x18a6: 0x00c3, 0x18a7: 0x00c3, 0x18a8: 0x00c3, 0x18a9: 0x00c0, - 0x18aa: 0x00c0, 0x18ab: 0x00c0, 0x18ac: 0x00c0, 0x18ad: 0x00c3, 0x18ae: 0x00c0, 0x18af: 0x00c0, - 0x18b0: 0x00c0, 0x18b1: 0x00c0, 0x18b2: 0x00c0, 0x18b3: 0x00c0, 0x18b4: 0x00c3, 0x18b5: 0x00c0, - 0x18b6: 0x00c0, 0x18b8: 0x00c3, 0x18b9: 0x00c3, - // Block 0x63, offset 0x18c0 - 0x18c0: 0x00c0, 0x18c1: 0x00c0, 0x18c2: 0x00c0, 0x18c3: 0x00c0, 0x18c4: 0x00c0, 0x18c5: 0x00c0, - 0x18c6: 0x00c0, 0x18c7: 0x00c0, 0x18c8: 0x00c0, 0x18c9: 0x00c0, 0x18ca: 0x00c0, 0x18cb: 0x00c0, - 0x18cc: 0x00c0, 0x18cd: 0x00c0, 0x18ce: 0x00c0, 0x18cf: 0x00c0, 0x18d0: 0x00c0, 0x18d1: 0x00c0, - 0x18d2: 0x00c0, 0x18d3: 0x00c0, 0x18d4: 0x00c0, 0x18d5: 0x00c0, 0x18d6: 0x00c0, 0x18d7: 0x00c0, - 0x18d8: 0x00c0, 0x18d9: 0x00c0, 0x18da: 0x00c0, 0x18db: 0x00c0, 0x18dc: 0x00c0, 0x18dd: 0x00c0, - 0x18de: 0x00c0, 0x18df: 0x00c0, 0x18e0: 0x00c0, 0x18e1: 0x00c0, 0x18e2: 0x00c0, 0x18e3: 0x00c0, - 0x18e4: 0x00c0, 0x18e5: 0x00c0, 0x18e6: 0x00c8, 0x18e7: 0x00c8, 0x18e8: 0x00c8, 0x18e9: 0x00c8, - 0x18ea: 0x00c8, 0x18eb: 0x00c0, 0x18ec: 0x0080, 0x18ed: 0x0080, 0x18ee: 0x0080, 0x18ef: 0x00c0, - 0x18f0: 0x0080, 0x18f1: 0x0080, 0x18f2: 0x0080, 0x18f3: 0x0080, 0x18f4: 0x0080, 0x18f5: 0x0080, - 0x18f6: 0x0080, 0x18f7: 0x0080, 0x18f8: 0x0080, 0x18f9: 0x0080, 0x18fa: 0x0080, 0x18fb: 0x00c0, - 0x18fc: 0x0080, 0x18fd: 0x0080, 0x18fe: 0x0080, 0x18ff: 0x0080, - // Block 0x64, offset 0x1900 - 0x1900: 0x0080, 0x1901: 0x0080, 0x1902: 0x0080, 0x1903: 0x0080, 0x1904: 0x0080, 0x1905: 0x0080, - 0x1906: 0x0080, 0x1907: 0x0080, 0x1908: 0x0080, 0x1909: 0x0080, 0x190a: 0x0080, 0x190b: 0x0080, - 0x190c: 0x0080, 0x190d: 0x0080, 0x190e: 0x00c0, 0x190f: 0x0080, 0x1910: 0x0080, 0x1911: 0x0080, - 0x1912: 0x0080, 0x1913: 0x0080, 0x1914: 0x0080, 0x1915: 0x0080, 0x1916: 0x0080, 0x1917: 0x0080, - 0x1918: 0x0080, 0x1919: 0x0080, 0x191a: 0x0080, 0x191b: 0x0080, 0x191c: 0x0080, 0x191d: 0x0088, - 0x191e: 0x0088, 0x191f: 0x0088, 0x1920: 0x0088, 0x1921: 0x0088, 0x1922: 0x0080, 0x1923: 0x0080, - 0x1924: 0x0080, 0x1925: 0x0080, 0x1926: 0x0088, 0x1927: 0x0088, 0x1928: 0x0088, 0x1929: 0x0088, - 0x192a: 0x0088, 0x192b: 0x00c0, 0x192c: 0x00c0, 0x192d: 0x00c0, 0x192e: 0x00c0, 0x192f: 0x00c0, - 0x1930: 0x00c0, 0x1931: 0x00c0, 0x1932: 0x00c0, 0x1933: 0x00c0, 0x1934: 0x00c0, 0x1935: 0x00c0, - 0x1936: 0x00c0, 0x1937: 0x00c0, 0x1938: 0x0080, 0x1939: 0x00c0, 0x193a: 0x00c0, 0x193b: 0x00c0, - 0x193c: 0x00c0, 0x193d: 0x00c0, 0x193e: 0x00c0, 0x193f: 0x00c0, - // Block 0x65, offset 0x1940 - 0x1940: 0x00c0, 0x1941: 0x00c0, 0x1942: 0x00c0, 0x1943: 0x00c0, 0x1944: 0x00c0, 0x1945: 0x00c0, - 0x1946: 0x00c0, 0x1947: 0x00c0, 0x1948: 0x00c0, 0x1949: 0x00c0, 0x194a: 0x00c0, 0x194b: 0x00c0, - 0x194c: 0x00c0, 0x194d: 0x00c0, 0x194e: 0x00c0, 0x194f: 0x00c0, 0x1950: 0x00c0, 0x1951: 0x00c0, - 0x1952: 0x00c0, 0x1953: 0x00c0, 0x1954: 0x00c0, 0x1955: 0x00c0, 0x1956: 0x00c0, 0x1957: 0x00c0, - 0x1958: 0x00c0, 0x1959: 0x00c0, 0x195a: 0x00c0, 0x195b: 0x0080, 0x195c: 0x0080, 0x195d: 0x0080, - 0x195e: 0x0080, 0x195f: 0x0080, 0x1960: 0x0080, 0x1961: 0x0080, 0x1962: 0x0080, 0x1963: 0x0080, - 0x1964: 0x0080, 0x1965: 0x0080, 0x1966: 0x0080, 0x1967: 0x0080, 0x1968: 0x0080, 0x1969: 0x0080, - 0x196a: 0x0080, 0x196b: 0x0080, 0x196c: 0x0080, 0x196d: 0x0080, 0x196e: 0x0080, 0x196f: 0x0080, - 0x1970: 0x0080, 0x1971: 0x0080, 0x1972: 0x0080, 0x1973: 0x0080, 0x1974: 0x0080, 0x1975: 0x0080, - 0x1976: 0x0080, 0x1977: 0x0080, 0x1978: 0x0080, 0x1979: 0x0080, 0x197a: 0x0080, 0x197b: 0x0080, - 0x197c: 0x0080, 0x197d: 0x0080, 0x197e: 0x0080, 0x197f: 0x0088, - // Block 0x66, offset 0x1980 - 0x1980: 0x00c3, 0x1981: 0x00c3, 0x1982: 0x00c3, 0x1983: 0x00c3, 0x1984: 0x00c3, 0x1985: 0x00c3, - 0x1986: 0x00c3, 0x1987: 0x00c3, 0x1988: 0x00c3, 0x1989: 0x00c3, 0x198a: 0x00c3, 0x198b: 0x00c3, - 0x198c: 0x00c3, 0x198d: 0x00c3, 0x198e: 0x00c3, 0x198f: 0x00c3, 0x1990: 0x00c3, 0x1991: 0x00c3, - 0x1992: 0x00c3, 0x1993: 0x00c3, 0x1994: 0x00c3, 0x1995: 0x00c3, 0x1996: 0x00c3, 0x1997: 0x00c3, - 0x1998: 0x00c3, 0x1999: 0x00c3, 0x199a: 0x00c3, 0x199b: 0x00c3, 0x199c: 0x00c3, 0x199d: 0x00c3, - 0x199e: 0x00c3, 0x199f: 0x00c3, 0x19a0: 0x00c3, 0x19a1: 0x00c3, 0x19a2: 0x00c3, 0x19a3: 0x00c3, - 0x19a4: 0x00c3, 0x19a5: 0x00c3, 0x19a6: 0x00c3, 0x19a7: 0x00c3, 0x19a8: 0x00c3, 0x19a9: 0x00c3, - 0x19aa: 0x00c3, 0x19ab: 0x00c3, 0x19ac: 0x00c3, 0x19ad: 0x00c3, 0x19ae: 0x00c3, 0x19af: 0x00c3, - 0x19b0: 0x00c3, 0x19b1: 0x00c3, 0x19b2: 0x00c3, 0x19b3: 0x00c3, 0x19b4: 0x00c3, 0x19b5: 0x00c3, - 0x19bb: 0x00c3, - 0x19bc: 0x00c3, 0x19bd: 0x00c3, 0x19be: 0x00c3, 0x19bf: 0x00c3, - // Block 0x67, offset 0x19c0 - 0x19c0: 0x00c0, 0x19c1: 0x00c0, 0x19c2: 0x00c0, 0x19c3: 0x00c0, 0x19c4: 0x00c0, 0x19c5: 0x00c0, - 0x19c6: 0x00c0, 0x19c7: 0x00c0, 0x19c8: 0x00c0, 0x19c9: 0x00c0, 0x19ca: 0x00c0, 0x19cb: 0x00c0, - 0x19cc: 0x00c0, 0x19cd: 0x00c0, 0x19ce: 0x00c0, 0x19cf: 0x00c0, 0x19d0: 0x00c0, 0x19d1: 0x00c0, - 0x19d2: 0x00c0, 0x19d3: 0x00c0, 0x19d4: 0x00c0, 0x19d5: 0x00c0, 0x19d6: 0x00c0, 0x19d7: 0x00c0, - 0x19d8: 0x00c0, 0x19d9: 0x00c0, 0x19da: 0x0080, 0x19db: 0x0080, 0x19dc: 0x00c0, 0x19dd: 0x00c0, - 0x19de: 0x00c0, 0x19df: 0x00c0, 0x19e0: 0x00c0, 0x19e1: 0x00c0, 0x19e2: 0x00c0, 0x19e3: 0x00c0, - 0x19e4: 0x00c0, 0x19e5: 0x00c0, 0x19e6: 0x00c0, 0x19e7: 0x00c0, 0x19e8: 0x00c0, 0x19e9: 0x00c0, - 0x19ea: 0x00c0, 0x19eb: 0x00c0, 0x19ec: 0x00c0, 0x19ed: 0x00c0, 0x19ee: 0x00c0, 0x19ef: 0x00c0, - 0x19f0: 0x00c0, 0x19f1: 0x00c0, 0x19f2: 0x00c0, 0x19f3: 0x00c0, 0x19f4: 0x00c0, 0x19f5: 0x00c0, - 0x19f6: 0x00c0, 0x19f7: 0x00c0, 0x19f8: 0x00c0, 0x19f9: 0x00c0, 0x19fa: 0x00c0, 0x19fb: 0x00c0, - 0x19fc: 0x00c0, 0x19fd: 0x00c0, 0x19fe: 0x00c0, 0x19ff: 0x00c0, - // Block 0x68, offset 0x1a00 - 0x1a00: 0x00c8, 0x1a01: 0x00c8, 0x1a02: 0x00c8, 0x1a03: 0x00c8, 0x1a04: 0x00c8, 0x1a05: 0x00c8, - 0x1a06: 0x00c8, 0x1a07: 0x00c8, 0x1a08: 0x00c8, 0x1a09: 0x00c8, 0x1a0a: 0x00c8, 0x1a0b: 0x00c8, - 0x1a0c: 0x00c8, 0x1a0d: 0x00c8, 0x1a0e: 0x00c8, 0x1a0f: 0x00c8, 0x1a10: 0x00c8, 0x1a11: 0x00c8, - 0x1a12: 0x00c8, 0x1a13: 0x00c8, 0x1a14: 0x00c8, 0x1a15: 0x00c8, - 0x1a18: 0x00c8, 0x1a19: 0x00c8, 0x1a1a: 0x00c8, 0x1a1b: 0x00c8, 0x1a1c: 0x00c8, 0x1a1d: 0x00c8, - 0x1a20: 0x00c8, 0x1a21: 0x00c8, 0x1a22: 0x00c8, 0x1a23: 0x00c8, - 0x1a24: 0x00c8, 0x1a25: 0x00c8, 0x1a26: 0x00c8, 0x1a27: 0x00c8, 0x1a28: 0x00c8, 0x1a29: 0x00c8, - 0x1a2a: 0x00c8, 0x1a2b: 0x00c8, 0x1a2c: 0x00c8, 0x1a2d: 0x00c8, 0x1a2e: 0x00c8, 0x1a2f: 0x00c8, - 0x1a30: 0x00c8, 0x1a31: 0x00c8, 0x1a32: 0x00c8, 0x1a33: 0x00c8, 0x1a34: 0x00c8, 0x1a35: 0x00c8, - 0x1a36: 0x00c8, 0x1a37: 0x00c8, 0x1a38: 0x00c8, 0x1a39: 0x00c8, 0x1a3a: 0x00c8, 0x1a3b: 0x00c8, - 0x1a3c: 0x00c8, 0x1a3d: 0x00c8, 0x1a3e: 0x00c8, 0x1a3f: 0x00c8, - // Block 0x69, offset 0x1a40 - 0x1a40: 0x00c8, 0x1a41: 0x00c8, 0x1a42: 0x00c8, 0x1a43: 0x00c8, 0x1a44: 0x00c8, 0x1a45: 0x00c8, - 0x1a48: 0x00c8, 0x1a49: 0x00c8, 0x1a4a: 0x00c8, 0x1a4b: 0x00c8, - 0x1a4c: 0x00c8, 0x1a4d: 0x00c8, 0x1a50: 0x00c8, 0x1a51: 0x00c8, - 0x1a52: 0x00c8, 0x1a53: 0x00c8, 0x1a54: 0x00c8, 0x1a55: 0x00c8, 0x1a56: 0x00c8, 0x1a57: 0x00c8, - 0x1a59: 0x00c8, 0x1a5b: 0x00c8, 0x1a5d: 0x00c8, - 0x1a5f: 0x00c8, 0x1a60: 0x00c8, 0x1a61: 0x00c8, 0x1a62: 0x00c8, 0x1a63: 0x00c8, - 0x1a64: 0x00c8, 0x1a65: 0x00c8, 0x1a66: 0x00c8, 0x1a67: 0x00c8, 0x1a68: 0x00c8, 0x1a69: 0x00c8, - 0x1a6a: 0x00c8, 0x1a6b: 0x00c8, 0x1a6c: 0x00c8, 0x1a6d: 0x00c8, 0x1a6e: 0x00c8, 0x1a6f: 0x00c8, - 0x1a70: 0x00c8, 0x1a71: 0x0088, 0x1a72: 0x00c8, 0x1a73: 0x0088, 0x1a74: 0x00c8, 0x1a75: 0x0088, - 0x1a76: 0x00c8, 0x1a77: 0x0088, 0x1a78: 0x00c8, 0x1a79: 0x0088, 0x1a7a: 0x00c8, 0x1a7b: 0x0088, - 0x1a7c: 0x00c8, 0x1a7d: 0x0088, - // Block 0x6a, offset 0x1a80 - 0x1a80: 0x00c8, 0x1a81: 0x00c8, 0x1a82: 0x00c8, 0x1a83: 0x00c8, 0x1a84: 0x00c8, 0x1a85: 0x00c8, - 0x1a86: 0x00c8, 0x1a87: 0x00c8, 0x1a88: 0x0088, 0x1a89: 0x0088, 0x1a8a: 0x0088, 0x1a8b: 0x0088, - 0x1a8c: 0x0088, 0x1a8d: 0x0088, 0x1a8e: 0x0088, 0x1a8f: 0x0088, 0x1a90: 0x00c8, 0x1a91: 0x00c8, - 0x1a92: 0x00c8, 0x1a93: 0x00c8, 0x1a94: 0x00c8, 0x1a95: 0x00c8, 0x1a96: 0x00c8, 0x1a97: 0x00c8, - 0x1a98: 0x0088, 0x1a99: 0x0088, 0x1a9a: 0x0088, 0x1a9b: 0x0088, 0x1a9c: 0x0088, 0x1a9d: 0x0088, - 0x1a9e: 0x0088, 0x1a9f: 0x0088, 0x1aa0: 0x00c8, 0x1aa1: 0x00c8, 0x1aa2: 0x00c8, 0x1aa3: 0x00c8, - 0x1aa4: 0x00c8, 0x1aa5: 0x00c8, 0x1aa6: 0x00c8, 0x1aa7: 0x00c8, 0x1aa8: 0x0088, 0x1aa9: 0x0088, - 0x1aaa: 0x0088, 0x1aab: 0x0088, 0x1aac: 0x0088, 0x1aad: 0x0088, 0x1aae: 0x0088, 0x1aaf: 0x0088, - 0x1ab0: 0x00c8, 0x1ab1: 0x00c8, 0x1ab2: 0x00c8, 0x1ab3: 0x00c8, 0x1ab4: 0x00c8, - 0x1ab6: 0x00c8, 0x1ab7: 0x00c8, 0x1ab8: 0x00c8, 0x1ab9: 0x00c8, 0x1aba: 0x00c8, 0x1abb: 0x0088, - 0x1abc: 0x0088, 0x1abd: 0x0088, 0x1abe: 0x0088, 0x1abf: 0x0088, - // Block 0x6b, offset 0x1ac0 - 0x1ac0: 0x0088, 0x1ac1: 0x0088, 0x1ac2: 0x00c8, 0x1ac3: 0x00c8, 0x1ac4: 0x00c8, - 0x1ac6: 0x00c8, 0x1ac7: 0x00c8, 0x1ac8: 0x00c8, 0x1ac9: 0x0088, 0x1aca: 0x00c8, 0x1acb: 0x0088, - 0x1acc: 0x0088, 0x1acd: 0x0088, 0x1ace: 0x0088, 0x1acf: 0x0088, 0x1ad0: 0x00c8, 0x1ad1: 0x00c8, - 0x1ad2: 0x00c8, 0x1ad3: 0x0088, 0x1ad6: 0x00c8, 0x1ad7: 0x00c8, - 0x1ad8: 0x00c8, 0x1ad9: 0x00c8, 0x1ada: 0x00c8, 0x1adb: 0x0088, 0x1add: 0x0088, - 0x1ade: 0x0088, 0x1adf: 0x0088, 0x1ae0: 0x00c8, 0x1ae1: 0x00c8, 0x1ae2: 0x00c8, 0x1ae3: 0x0088, - 0x1ae4: 0x00c8, 0x1ae5: 0x00c8, 0x1ae6: 0x00c8, 0x1ae7: 0x00c8, 0x1ae8: 0x00c8, 0x1ae9: 0x00c8, - 0x1aea: 0x00c8, 0x1aeb: 0x0088, 0x1aec: 0x00c8, 0x1aed: 0x0088, 0x1aee: 0x0088, 0x1aef: 0x0088, - 0x1af2: 0x00c8, 0x1af3: 0x00c8, 0x1af4: 0x00c8, - 0x1af6: 0x00c8, 0x1af7: 0x00c8, 0x1af8: 0x00c8, 0x1af9: 0x0088, 0x1afa: 0x00c8, 0x1afb: 0x0088, - 0x1afc: 0x0088, 0x1afd: 0x0088, 0x1afe: 0x0088, - // Block 0x6c, offset 0x1b00 - 0x1b00: 0x0080, 0x1b01: 0x0080, 0x1b02: 0x0080, 0x1b03: 0x0080, 0x1b04: 0x0080, 0x1b05: 0x0080, - 0x1b06: 0x0080, 0x1b07: 0x0080, 0x1b08: 0x0080, 0x1b09: 0x0080, 0x1b0a: 0x0080, 0x1b0b: 0x0040, - 0x1b0c: 0x004d, 0x1b0d: 0x004e, 0x1b0e: 0x0040, 0x1b0f: 0x0040, 0x1b10: 0x0080, 0x1b11: 0x0080, - 0x1b12: 0x0080, 0x1b13: 0x0080, 0x1b14: 0x0080, 0x1b15: 0x0080, 0x1b16: 0x0080, 0x1b17: 0x0080, - 0x1b18: 0x0080, 0x1b19: 0x0080, 0x1b1a: 0x0080, 0x1b1b: 0x0080, 0x1b1c: 0x0080, 0x1b1d: 0x0080, - 0x1b1e: 0x0080, 0x1b1f: 0x0080, 0x1b20: 0x0080, 0x1b21: 0x0080, 0x1b22: 0x0080, 0x1b23: 0x0080, - 0x1b24: 0x0080, 0x1b25: 0x0080, 0x1b26: 0x0080, 0x1b27: 0x0080, 0x1b28: 0x0040, 0x1b29: 0x0040, - 0x1b2a: 0x0040, 0x1b2b: 0x0040, 0x1b2c: 0x0040, 0x1b2d: 0x0040, 0x1b2e: 0x0040, 0x1b2f: 0x0080, - 0x1b30: 0x0080, 0x1b31: 0x0080, 0x1b32: 0x0080, 0x1b33: 0x0080, 0x1b34: 0x0080, 0x1b35: 0x0080, - 0x1b36: 0x0080, 0x1b37: 0x0080, 0x1b38: 0x0080, 0x1b39: 0x0080, 0x1b3a: 0x0080, 0x1b3b: 0x0080, - 0x1b3c: 0x0080, 0x1b3d: 0x0080, 0x1b3e: 0x0080, 0x1b3f: 0x0080, - // Block 0x6d, offset 0x1b40 - 0x1b40: 0x0080, 0x1b41: 0x0080, 0x1b42: 0x0080, 0x1b43: 0x0080, 0x1b44: 0x0080, 0x1b45: 0x0080, - 0x1b46: 0x0080, 0x1b47: 0x0080, 0x1b48: 0x0080, 0x1b49: 0x0080, 0x1b4a: 0x0080, 0x1b4b: 0x0080, - 0x1b4c: 0x0080, 0x1b4d: 0x0080, 0x1b4e: 0x0080, 0x1b4f: 0x0080, 0x1b50: 0x0080, 0x1b51: 0x0080, - 0x1b52: 0x0080, 0x1b53: 0x0080, 0x1b54: 0x0080, 0x1b55: 0x0080, 0x1b56: 0x0080, 0x1b57: 0x0080, - 0x1b58: 0x0080, 0x1b59: 0x0080, 0x1b5a: 0x0080, 0x1b5b: 0x0080, 0x1b5c: 0x0080, 0x1b5d: 0x0080, - 0x1b5e: 0x0080, 0x1b5f: 0x0080, 0x1b60: 0x0040, 0x1b61: 0x0040, 0x1b62: 0x0040, 0x1b63: 0x0040, - 0x1b64: 0x0040, 0x1b66: 0x0040, 0x1b67: 0x0040, 0x1b68: 0x0040, 0x1b69: 0x0040, - 0x1b6a: 0x0040, 0x1b6b: 0x0040, 0x1b6c: 0x0040, 0x1b6d: 0x0040, 0x1b6e: 0x0040, 0x1b6f: 0x0040, - 0x1b70: 0x0080, 0x1b71: 0x0080, 0x1b74: 0x0080, 0x1b75: 0x0080, - 0x1b76: 0x0080, 0x1b77: 0x0080, 0x1b78: 0x0080, 0x1b79: 0x0080, 0x1b7a: 0x0080, 0x1b7b: 0x0080, - 0x1b7c: 0x0080, 0x1b7d: 0x0080, 0x1b7e: 0x0080, 0x1b7f: 0x0080, - // Block 0x6e, offset 0x1b80 - 0x1b80: 0x0080, 0x1b81: 0x0080, 0x1b82: 0x0080, 0x1b83: 0x0080, 0x1b84: 0x0080, 0x1b85: 0x0080, - 0x1b86: 0x0080, 0x1b87: 0x0080, 0x1b88: 0x0080, 0x1b89: 0x0080, 0x1b8a: 0x0080, 0x1b8b: 0x0080, - 0x1b8c: 0x0080, 0x1b8d: 0x0080, 0x1b8e: 0x0080, 0x1b90: 0x0080, 0x1b91: 0x0080, - 0x1b92: 0x0080, 0x1b93: 0x0080, 0x1b94: 0x0080, 0x1b95: 0x0080, 0x1b96: 0x0080, 0x1b97: 0x0080, - 0x1b98: 0x0080, 0x1b99: 0x0080, 0x1b9a: 0x0080, 0x1b9b: 0x0080, 0x1b9c: 0x0080, - 0x1ba0: 0x0080, 0x1ba1: 0x0080, 0x1ba2: 0x0080, 0x1ba3: 0x0080, - 0x1ba4: 0x0080, 0x1ba5: 0x0080, 0x1ba6: 0x0080, 0x1ba7: 0x0080, 0x1ba8: 0x0080, 0x1ba9: 0x0080, - 0x1baa: 0x0080, 0x1bab: 0x0080, 0x1bac: 0x0080, 0x1bad: 0x0080, 0x1bae: 0x0080, 0x1baf: 0x0080, - 0x1bb0: 0x0080, 0x1bb1: 0x0080, 0x1bb2: 0x0080, 0x1bb3: 0x0080, 0x1bb4: 0x0080, 0x1bb5: 0x0080, - 0x1bb6: 0x0080, 0x1bb7: 0x0080, 0x1bb8: 0x0080, 0x1bb9: 0x0080, 0x1bba: 0x0080, 0x1bbb: 0x0080, - 0x1bbc: 0x0080, 0x1bbd: 0x0080, 0x1bbe: 0x0080, - // Block 0x6f, offset 0x1bc0 - 0x1bd0: 0x00c3, 0x1bd1: 0x00c3, - 0x1bd2: 0x00c3, 0x1bd3: 0x00c3, 0x1bd4: 0x00c3, 0x1bd5: 0x00c3, 0x1bd6: 0x00c3, 0x1bd7: 0x00c3, - 0x1bd8: 0x00c3, 0x1bd9: 0x00c3, 0x1bda: 0x00c3, 0x1bdb: 0x00c3, 0x1bdc: 0x00c3, 0x1bdd: 0x0083, - 0x1bde: 0x0083, 0x1bdf: 0x0083, 0x1be0: 0x0083, 0x1be1: 0x00c3, 0x1be2: 0x0083, 0x1be3: 0x0083, - 0x1be4: 0x0083, 0x1be5: 0x00c3, 0x1be6: 0x00c3, 0x1be7: 0x00c3, 0x1be8: 0x00c3, 0x1be9: 0x00c3, - 0x1bea: 0x00c3, 0x1beb: 0x00c3, 0x1bec: 0x00c3, 0x1bed: 0x00c3, 0x1bee: 0x00c3, 0x1bef: 0x00c3, - 0x1bf0: 0x00c3, - // Block 0x70, offset 0x1c00 - 0x1c00: 0x0080, 0x1c01: 0x0080, 0x1c02: 0x0080, 0x1c03: 0x0080, 0x1c04: 0x0080, 0x1c05: 0x0080, - 0x1c06: 0x0080, 0x1c07: 0x0080, 0x1c08: 0x0080, 0x1c09: 0x0080, 0x1c0a: 0x0080, 0x1c0b: 0x0080, - 0x1c0c: 0x0080, 0x1c0d: 0x0080, 0x1c0e: 0x0080, 0x1c0f: 0x0080, 0x1c10: 0x0080, 0x1c11: 0x0080, - 0x1c12: 0x0080, 0x1c13: 0x0080, 0x1c14: 0x0080, 0x1c15: 0x0080, 0x1c16: 0x0080, 0x1c17: 0x0080, - 0x1c18: 0x0080, 0x1c19: 0x0080, 0x1c1a: 0x0080, 0x1c1b: 0x0080, 0x1c1c: 0x0080, 0x1c1d: 0x0080, - 0x1c1e: 0x0080, 0x1c1f: 0x0080, 0x1c20: 0x0080, 0x1c21: 0x0080, 0x1c22: 0x0080, 0x1c23: 0x0080, - 0x1c24: 0x0080, 0x1c25: 0x0080, 0x1c26: 0x0088, 0x1c27: 0x0080, 0x1c28: 0x0080, 0x1c29: 0x0080, - 0x1c2a: 0x0080, 0x1c2b: 0x0080, 0x1c2c: 0x0080, 0x1c2d: 0x0080, 0x1c2e: 0x0080, 0x1c2f: 0x0080, - 0x1c30: 0x0080, 0x1c31: 0x0080, 0x1c32: 0x00c0, 0x1c33: 0x0080, 0x1c34: 0x0080, 0x1c35: 0x0080, - 0x1c36: 0x0080, 0x1c37: 0x0080, 0x1c38: 0x0080, 0x1c39: 0x0080, 0x1c3a: 0x0080, 0x1c3b: 0x0080, - 0x1c3c: 0x0080, 0x1c3d: 0x0080, 0x1c3e: 0x0080, 0x1c3f: 0x0080, - // Block 0x71, offset 0x1c40 - 0x1c40: 0x0080, 0x1c41: 0x0080, 0x1c42: 0x0080, 0x1c43: 0x0080, 0x1c44: 0x0080, 0x1c45: 0x0080, - 0x1c46: 0x0080, 0x1c47: 0x0080, 0x1c48: 0x0080, 0x1c49: 0x0080, 0x1c4a: 0x0080, 0x1c4b: 0x0080, - 0x1c4c: 0x0080, 0x1c4d: 0x0080, 0x1c4e: 0x00c0, 0x1c4f: 0x0080, 0x1c50: 0x0080, 0x1c51: 0x0080, - 0x1c52: 0x0080, 0x1c53: 0x0080, 0x1c54: 0x0080, 0x1c55: 0x0080, 0x1c56: 0x0080, 0x1c57: 0x0080, - 0x1c58: 0x0080, 0x1c59: 0x0080, 0x1c5a: 0x0080, 0x1c5b: 0x0080, 0x1c5c: 0x0080, 0x1c5d: 0x0080, - 0x1c5e: 0x0080, 0x1c5f: 0x0080, 0x1c60: 0x0080, 0x1c61: 0x0080, 0x1c62: 0x0080, 0x1c63: 0x0080, - 0x1c64: 0x0080, 0x1c65: 0x0080, 0x1c66: 0x0080, 0x1c67: 0x0080, 0x1c68: 0x0080, 0x1c69: 0x0080, - 0x1c6a: 0x0080, 0x1c6b: 0x0080, 0x1c6c: 0x0080, 0x1c6d: 0x0080, 0x1c6e: 0x0080, 0x1c6f: 0x0080, - 0x1c70: 0x0080, 0x1c71: 0x0080, 0x1c72: 0x0080, 0x1c73: 0x0080, 0x1c74: 0x0080, 0x1c75: 0x0080, - 0x1c76: 0x0080, 0x1c77: 0x0080, 0x1c78: 0x0080, 0x1c79: 0x0080, 0x1c7a: 0x0080, 0x1c7b: 0x0080, - 0x1c7c: 0x0080, 0x1c7d: 0x0080, 0x1c7e: 0x0080, 0x1c7f: 0x0080, - // Block 0x72, offset 0x1c80 - 0x1c80: 0x0080, 0x1c81: 0x0080, 0x1c82: 0x0080, 0x1c83: 0x00c0, 0x1c84: 0x00c0, 0x1c85: 0x0080, - 0x1c86: 0x0080, 0x1c87: 0x0080, 0x1c88: 0x0080, 0x1c89: 0x0080, 0x1c8a: 0x0080, 0x1c8b: 0x0080, - 0x1c90: 0x0080, 0x1c91: 0x0080, - 0x1c92: 0x0080, 0x1c93: 0x0080, 0x1c94: 0x0080, 0x1c95: 0x0080, 0x1c96: 0x0080, 0x1c97: 0x0080, - 0x1c98: 0x0080, 0x1c99: 0x0080, 0x1c9a: 0x0080, 0x1c9b: 0x0080, 0x1c9c: 0x0080, 0x1c9d: 0x0080, - 0x1c9e: 0x0080, 0x1c9f: 0x0080, 0x1ca0: 0x0080, 0x1ca1: 0x0080, 0x1ca2: 0x0080, 0x1ca3: 0x0080, - 0x1ca4: 0x0080, 0x1ca5: 0x0080, 0x1ca6: 0x0080, 0x1ca7: 0x0080, 0x1ca8: 0x0080, 0x1ca9: 0x0080, - 0x1caa: 0x0080, 0x1cab: 0x0080, 0x1cac: 0x0080, 0x1cad: 0x0080, 0x1cae: 0x0080, 0x1caf: 0x0080, - 0x1cb0: 0x0080, 0x1cb1: 0x0080, 0x1cb2: 0x0080, 0x1cb3: 0x0080, 0x1cb4: 0x0080, 0x1cb5: 0x0080, - 0x1cb6: 0x0080, 0x1cb7: 0x0080, 0x1cb8: 0x0080, 0x1cb9: 0x0080, 0x1cba: 0x0080, 0x1cbb: 0x0080, - 0x1cbc: 0x0080, 0x1cbd: 0x0080, 0x1cbe: 0x0080, 0x1cbf: 0x0080, - // Block 0x73, offset 0x1cc0 - 0x1cc0: 0x0080, 0x1cc1: 0x0080, 0x1cc2: 0x0080, 0x1cc3: 0x0080, 0x1cc4: 0x0080, 0x1cc5: 0x0080, - 0x1cc6: 0x0080, 0x1cc7: 0x0080, 0x1cc8: 0x0080, 0x1cc9: 0x0080, 0x1cca: 0x0080, 0x1ccb: 0x0080, - 0x1ccc: 0x0080, 0x1ccd: 0x0080, 0x1cce: 0x0080, 0x1ccf: 0x0080, 0x1cd0: 0x0080, 0x1cd1: 0x0080, - 0x1cd2: 0x0080, 0x1cd3: 0x0080, 0x1cd4: 0x0080, 0x1cd5: 0x0080, 0x1cd6: 0x0080, 0x1cd7: 0x0080, - 0x1cd8: 0x0080, 0x1cd9: 0x0080, 0x1cda: 0x0080, 0x1cdb: 0x0080, 0x1cdc: 0x0080, 0x1cdd: 0x0080, - 0x1cde: 0x0080, 0x1cdf: 0x0080, 0x1ce0: 0x0080, 0x1ce1: 0x0080, 0x1ce2: 0x0080, 0x1ce3: 0x0080, - 0x1ce4: 0x0080, 0x1ce5: 0x0080, 0x1ce6: 0x0080, 0x1ce7: 0x0080, 0x1ce8: 0x0080, 0x1ce9: 0x0080, - 0x1cea: 0x0080, 0x1ceb: 0x0080, 0x1cec: 0x0080, 0x1ced: 0x0080, 0x1cee: 0x0080, 0x1cef: 0x0080, - 0x1cf0: 0x0080, 0x1cf1: 0x0080, 0x1cf2: 0x0080, 0x1cf3: 0x0080, 0x1cf4: 0x0080, 0x1cf5: 0x0080, - 0x1cf6: 0x0080, 0x1cf7: 0x0080, 0x1cf8: 0x0080, 0x1cf9: 0x0080, 0x1cfa: 0x0080, 0x1cfb: 0x0080, - 0x1cfc: 0x0080, 0x1cfd: 0x0080, 0x1cfe: 0x0080, 0x1cff: 0x0080, - // Block 0x74, offset 0x1d00 - 0x1d00: 0x0080, 0x1d01: 0x0080, 0x1d02: 0x0080, 0x1d03: 0x0080, 0x1d04: 0x0080, 0x1d05: 0x0080, - 0x1d06: 0x0080, 0x1d07: 0x0080, 0x1d08: 0x0080, 0x1d09: 0x0080, 0x1d0a: 0x0080, 0x1d0b: 0x0080, - 0x1d0c: 0x0080, 0x1d0d: 0x0080, 0x1d0e: 0x0080, 0x1d0f: 0x0080, 0x1d10: 0x0080, 0x1d11: 0x0080, - 0x1d12: 0x0080, 0x1d13: 0x0080, 0x1d14: 0x0080, 0x1d15: 0x0080, 0x1d16: 0x0080, 0x1d17: 0x0080, - 0x1d18: 0x0080, 0x1d19: 0x0080, 0x1d1a: 0x0080, 0x1d1b: 0x0080, 0x1d1c: 0x0080, 0x1d1d: 0x0080, - 0x1d1e: 0x0080, 0x1d1f: 0x0080, 0x1d20: 0x0080, 0x1d21: 0x0080, 0x1d22: 0x0080, 0x1d23: 0x0080, - 0x1d24: 0x0080, 0x1d25: 0x0080, 0x1d26: 0x0080, 0x1d27: 0x0080, 0x1d28: 0x0080, 0x1d29: 0x0080, - 0x1d2a: 0x0080, 0x1d2b: 0x0080, 0x1d2c: 0x0080, 0x1d2d: 0x0080, 0x1d2e: 0x0080, 0x1d2f: 0x0080, - 0x1d30: 0x0080, 0x1d31: 0x0080, 0x1d32: 0x0080, 0x1d33: 0x0080, 0x1d34: 0x0080, 0x1d35: 0x0080, - 0x1d36: 0x0080, 0x1d37: 0x0080, 0x1d38: 0x0080, 0x1d39: 0x0080, 0x1d3a: 0x0080, 0x1d3b: 0x0080, - 0x1d3c: 0x0080, 0x1d3d: 0x0080, 0x1d3e: 0x0080, - // Block 0x75, offset 0x1d40 - 0x1d40: 0x0080, 0x1d41: 0x0080, 0x1d42: 0x0080, 0x1d43: 0x0080, 0x1d44: 0x0080, 0x1d45: 0x0080, - 0x1d46: 0x0080, 0x1d47: 0x0080, 0x1d48: 0x0080, 0x1d49: 0x0080, 0x1d4a: 0x0080, 0x1d4b: 0x0080, - 0x1d4c: 0x0080, 0x1d4d: 0x0080, 0x1d4e: 0x0080, 0x1d4f: 0x0080, 0x1d50: 0x0080, 0x1d51: 0x0080, - 0x1d52: 0x0080, 0x1d53: 0x0080, 0x1d54: 0x0080, 0x1d55: 0x0080, 0x1d56: 0x0080, 0x1d57: 0x0080, - 0x1d58: 0x0080, 0x1d59: 0x0080, 0x1d5a: 0x0080, 0x1d5b: 0x0080, 0x1d5c: 0x0080, 0x1d5d: 0x0080, - 0x1d5e: 0x0080, 0x1d5f: 0x0080, 0x1d60: 0x0080, 0x1d61: 0x0080, 0x1d62: 0x0080, 0x1d63: 0x0080, - 0x1d64: 0x0080, 0x1d65: 0x0080, 0x1d66: 0x0080, - // Block 0x76, offset 0x1d80 - 0x1d80: 0x0080, 0x1d81: 0x0080, 0x1d82: 0x0080, 0x1d83: 0x0080, 0x1d84: 0x0080, 0x1d85: 0x0080, - 0x1d86: 0x0080, 0x1d87: 0x0080, 0x1d88: 0x0080, 0x1d89: 0x0080, 0x1d8a: 0x0080, - 0x1da0: 0x0080, 0x1da1: 0x0080, 0x1da2: 0x0080, 0x1da3: 0x0080, - 0x1da4: 0x0080, 0x1da5: 0x0080, 0x1da6: 0x0080, 0x1da7: 0x0080, 0x1da8: 0x0080, 0x1da9: 0x0080, - 0x1daa: 0x0080, 0x1dab: 0x0080, 0x1dac: 0x0080, 0x1dad: 0x0080, 0x1dae: 0x0080, 0x1daf: 0x0080, - 0x1db0: 0x0080, 0x1db1: 0x0080, 0x1db2: 0x0080, 0x1db3: 0x0080, 0x1db4: 0x0080, 0x1db5: 0x0080, - 0x1db6: 0x0080, 0x1db7: 0x0080, 0x1db8: 0x0080, 0x1db9: 0x0080, 0x1dba: 0x0080, 0x1dbb: 0x0080, - 0x1dbc: 0x0080, 0x1dbd: 0x0080, 0x1dbe: 0x0080, 0x1dbf: 0x0080, - // Block 0x77, offset 0x1dc0 - 0x1dc0: 0x0080, 0x1dc1: 0x0080, 0x1dc2: 0x0080, 0x1dc3: 0x0080, 0x1dc4: 0x0080, 0x1dc5: 0x0080, - 0x1dc6: 0x0080, 0x1dc7: 0x0080, 0x1dc8: 0x0080, 0x1dc9: 0x0080, 0x1dca: 0x0080, 0x1dcb: 0x0080, - 0x1dcc: 0x0080, 0x1dcd: 0x0080, 0x1dce: 0x0080, 0x1dcf: 0x0080, 0x1dd0: 0x0080, 0x1dd1: 0x0080, - 0x1dd2: 0x0080, 0x1dd3: 0x0080, 0x1dd4: 0x0080, 0x1dd5: 0x0080, 0x1dd6: 0x0080, 0x1dd7: 0x0080, - 0x1dd8: 0x0080, 0x1dd9: 0x0080, 0x1dda: 0x0080, 0x1ddb: 0x0080, 0x1ddc: 0x0080, 0x1ddd: 0x0080, - 0x1dde: 0x0080, 0x1ddf: 0x0080, 0x1de0: 0x0080, 0x1de1: 0x0080, 0x1de2: 0x0080, 0x1de3: 0x0080, - 0x1de4: 0x0080, 0x1de5: 0x0080, 0x1de6: 0x0080, 0x1de7: 0x0080, 0x1de8: 0x0080, 0x1de9: 0x0080, - 0x1dea: 0x0080, 0x1deb: 0x0080, 0x1dec: 0x0080, 0x1ded: 0x0080, 0x1dee: 0x0080, 0x1def: 0x0080, - 0x1df0: 0x0080, 0x1df1: 0x0080, 0x1df2: 0x0080, 0x1df3: 0x0080, - 0x1df6: 0x0080, 0x1df7: 0x0080, 0x1df8: 0x0080, 0x1df9: 0x0080, 0x1dfa: 0x0080, 0x1dfb: 0x0080, - 0x1dfc: 0x0080, 0x1dfd: 0x0080, 0x1dfe: 0x0080, 0x1dff: 0x0080, - // Block 0x78, offset 0x1e00 - 0x1e00: 0x0080, 0x1e01: 0x0080, 0x1e02: 0x0080, 0x1e03: 0x0080, 0x1e04: 0x0080, 0x1e05: 0x0080, - 0x1e06: 0x0080, 0x1e07: 0x0080, 0x1e08: 0x0080, 0x1e09: 0x0080, 0x1e0a: 0x0080, 0x1e0b: 0x0080, - 0x1e0c: 0x0080, 0x1e0d: 0x0080, 0x1e0e: 0x0080, 0x1e0f: 0x0080, 0x1e10: 0x0080, 0x1e11: 0x0080, - 0x1e12: 0x0080, 0x1e13: 0x0080, 0x1e14: 0x0080, 0x1e15: 0x0080, - 0x1e18: 0x0080, 0x1e19: 0x0080, 0x1e1a: 0x0080, 0x1e1b: 0x0080, 0x1e1c: 0x0080, 0x1e1d: 0x0080, - 0x1e1e: 0x0080, 0x1e1f: 0x0080, 0x1e20: 0x0080, 0x1e21: 0x0080, 0x1e22: 0x0080, 0x1e23: 0x0080, - 0x1e24: 0x0080, 0x1e25: 0x0080, 0x1e26: 0x0080, 0x1e27: 0x0080, 0x1e28: 0x0080, 0x1e29: 0x0080, - 0x1e2a: 0x0080, 0x1e2b: 0x0080, 0x1e2c: 0x0080, 0x1e2d: 0x0080, 0x1e2e: 0x0080, 0x1e2f: 0x0080, - 0x1e30: 0x0080, 0x1e31: 0x0080, 0x1e32: 0x0080, 0x1e33: 0x0080, 0x1e34: 0x0080, 0x1e35: 0x0080, - 0x1e36: 0x0080, 0x1e37: 0x0080, 0x1e38: 0x0080, 0x1e39: 0x0080, - 0x1e3d: 0x0080, 0x1e3e: 0x0080, 0x1e3f: 0x0080, - // Block 0x79, offset 0x1e40 - 0x1e40: 0x0080, 0x1e41: 0x0080, 0x1e42: 0x0080, 0x1e43: 0x0080, 0x1e44: 0x0080, 0x1e45: 0x0080, - 0x1e46: 0x0080, 0x1e47: 0x0080, 0x1e48: 0x0080, 0x1e4a: 0x0080, 0x1e4b: 0x0080, - 0x1e4c: 0x0080, 0x1e4d: 0x0080, 0x1e4e: 0x0080, 0x1e4f: 0x0080, 0x1e50: 0x0080, 0x1e51: 0x0080, - 0x1e6c: 0x0080, 0x1e6d: 0x0080, 0x1e6e: 0x0080, 0x1e6f: 0x0080, - // Block 0x7a, offset 0x1e80 - 0x1e80: 0x00c0, 0x1e81: 0x00c0, 0x1e82: 0x00c0, 0x1e83: 0x00c0, 0x1e84: 0x00c0, 0x1e85: 0x00c0, - 0x1e86: 0x00c0, 0x1e87: 0x00c0, 0x1e88: 0x00c0, 0x1e89: 0x00c0, 0x1e8a: 0x00c0, 0x1e8b: 0x00c0, - 0x1e8c: 0x00c0, 0x1e8d: 0x00c0, 0x1e8e: 0x00c0, 0x1e8f: 0x00c0, 0x1e90: 0x00c0, 0x1e91: 0x00c0, - 0x1e92: 0x00c0, 0x1e93: 0x00c0, 0x1e94: 0x00c0, 0x1e95: 0x00c0, 0x1e96: 0x00c0, 0x1e97: 0x00c0, - 0x1e98: 0x00c0, 0x1e99: 0x00c0, 0x1e9a: 0x00c0, 0x1e9b: 0x00c0, 0x1e9c: 0x00c0, 0x1e9d: 0x00c0, - 0x1e9e: 0x00c0, 0x1e9f: 0x00c0, 0x1ea0: 0x00c0, 0x1ea1: 0x00c0, 0x1ea2: 0x00c0, 0x1ea3: 0x00c0, - 0x1ea4: 0x00c0, 0x1ea5: 0x00c0, 0x1ea6: 0x00c0, 0x1ea7: 0x00c0, 0x1ea8: 0x00c0, 0x1ea9: 0x00c0, - 0x1eaa: 0x00c0, 0x1eab: 0x00c0, 0x1eac: 0x00c0, 0x1ead: 0x00c0, 0x1eae: 0x00c0, - 0x1eb0: 0x00c0, 0x1eb1: 0x00c0, 0x1eb2: 0x00c0, 0x1eb3: 0x00c0, 0x1eb4: 0x00c0, 0x1eb5: 0x00c0, - 0x1eb6: 0x00c0, 0x1eb7: 0x00c0, 0x1eb8: 0x00c0, 0x1eb9: 0x00c0, 0x1eba: 0x00c0, 0x1ebb: 0x00c0, - 0x1ebc: 0x00c0, 0x1ebd: 0x00c0, 0x1ebe: 0x00c0, 0x1ebf: 0x00c0, - // Block 0x7b, offset 0x1ec0 - 0x1ec0: 0x00c0, 0x1ec1: 0x00c0, 0x1ec2: 0x00c0, 0x1ec3: 0x00c0, 0x1ec4: 0x00c0, 0x1ec5: 0x00c0, - 0x1ec6: 0x00c0, 0x1ec7: 0x00c0, 0x1ec8: 0x00c0, 0x1ec9: 0x00c0, 0x1eca: 0x00c0, 0x1ecb: 0x00c0, - 0x1ecc: 0x00c0, 0x1ecd: 0x00c0, 0x1ece: 0x00c0, 0x1ecf: 0x00c0, 0x1ed0: 0x00c0, 0x1ed1: 0x00c0, - 0x1ed2: 0x00c0, 0x1ed3: 0x00c0, 0x1ed4: 0x00c0, 0x1ed5: 0x00c0, 0x1ed6: 0x00c0, 0x1ed7: 0x00c0, - 0x1ed8: 0x00c0, 0x1ed9: 0x00c0, 0x1eda: 0x00c0, 0x1edb: 0x00c0, 0x1edc: 0x00c0, 0x1edd: 0x00c0, - 0x1ede: 0x00c0, 0x1ee0: 0x00c0, 0x1ee1: 0x00c0, 0x1ee2: 0x00c0, 0x1ee3: 0x00c0, - 0x1ee4: 0x00c0, 0x1ee5: 0x00c0, 0x1ee6: 0x00c0, 0x1ee7: 0x00c0, 0x1ee8: 0x00c0, 0x1ee9: 0x00c0, - 0x1eea: 0x00c0, 0x1eeb: 0x00c0, 0x1eec: 0x00c0, 0x1eed: 0x00c0, 0x1eee: 0x00c0, 0x1eef: 0x00c0, - 0x1ef0: 0x00c0, 0x1ef1: 0x00c0, 0x1ef2: 0x00c0, 0x1ef3: 0x00c0, 0x1ef4: 0x00c0, 0x1ef5: 0x00c0, - 0x1ef6: 0x00c0, 0x1ef7: 0x00c0, 0x1ef8: 0x00c0, 0x1ef9: 0x00c0, 0x1efa: 0x00c0, 0x1efb: 0x00c0, - 0x1efc: 0x0080, 0x1efd: 0x0080, 0x1efe: 0x00c0, 0x1eff: 0x00c0, - // Block 0x7c, offset 0x1f00 - 0x1f00: 0x00c0, 0x1f01: 0x00c0, 0x1f02: 0x00c0, 0x1f03: 0x00c0, 0x1f04: 0x00c0, 0x1f05: 0x00c0, - 0x1f06: 0x00c0, 0x1f07: 0x00c0, 0x1f08: 0x00c0, 0x1f09: 0x00c0, 0x1f0a: 0x00c0, 0x1f0b: 0x00c0, - 0x1f0c: 0x00c0, 0x1f0d: 0x00c0, 0x1f0e: 0x00c0, 0x1f0f: 0x00c0, 0x1f10: 0x00c0, 0x1f11: 0x00c0, - 0x1f12: 0x00c0, 0x1f13: 0x00c0, 0x1f14: 0x00c0, 0x1f15: 0x00c0, 0x1f16: 0x00c0, 0x1f17: 0x00c0, - 0x1f18: 0x00c0, 0x1f19: 0x00c0, 0x1f1a: 0x00c0, 0x1f1b: 0x00c0, 0x1f1c: 0x00c0, 0x1f1d: 0x00c0, - 0x1f1e: 0x00c0, 0x1f1f: 0x00c0, 0x1f20: 0x00c0, 0x1f21: 0x00c0, 0x1f22: 0x00c0, 0x1f23: 0x00c0, - 0x1f24: 0x00c0, 0x1f25: 0x0080, 0x1f26: 0x0080, 0x1f27: 0x0080, 0x1f28: 0x0080, 0x1f29: 0x0080, - 0x1f2a: 0x0080, 0x1f2b: 0x00c0, 0x1f2c: 0x00c0, 0x1f2d: 0x00c0, 0x1f2e: 0x00c0, 0x1f2f: 0x00c3, - 0x1f30: 0x00c3, 0x1f31: 0x00c3, 0x1f32: 0x00c0, 0x1f33: 0x00c0, - 0x1f39: 0x0080, 0x1f3a: 0x0080, 0x1f3b: 0x0080, - 0x1f3c: 0x0080, 0x1f3d: 0x0080, 0x1f3e: 0x0080, 0x1f3f: 0x0080, - // Block 0x7d, offset 0x1f40 - 0x1f40: 0x00c0, 0x1f41: 0x00c0, 0x1f42: 0x00c0, 0x1f43: 0x00c0, 0x1f44: 0x00c0, 0x1f45: 0x00c0, - 0x1f46: 0x00c0, 0x1f47: 0x00c0, 0x1f48: 0x00c0, 0x1f49: 0x00c0, 0x1f4a: 0x00c0, 0x1f4b: 0x00c0, - 0x1f4c: 0x00c0, 0x1f4d: 0x00c0, 0x1f4e: 0x00c0, 0x1f4f: 0x00c0, 0x1f50: 0x00c0, 0x1f51: 0x00c0, - 0x1f52: 0x00c0, 0x1f53: 0x00c0, 0x1f54: 0x00c0, 0x1f55: 0x00c0, 0x1f56: 0x00c0, 0x1f57: 0x00c0, - 0x1f58: 0x00c0, 0x1f59: 0x00c0, 0x1f5a: 0x00c0, 0x1f5b: 0x00c0, 0x1f5c: 0x00c0, 0x1f5d: 0x00c0, - 0x1f5e: 0x00c0, 0x1f5f: 0x00c0, 0x1f60: 0x00c0, 0x1f61: 0x00c0, 0x1f62: 0x00c0, 0x1f63: 0x00c0, - 0x1f64: 0x00c0, 0x1f65: 0x00c0, 0x1f67: 0x00c0, - 0x1f6d: 0x00c0, - 0x1f70: 0x00c0, 0x1f71: 0x00c0, 0x1f72: 0x00c0, 0x1f73: 0x00c0, 0x1f74: 0x00c0, 0x1f75: 0x00c0, - 0x1f76: 0x00c0, 0x1f77: 0x00c0, 0x1f78: 0x00c0, 0x1f79: 0x00c0, 0x1f7a: 0x00c0, 0x1f7b: 0x00c0, - 0x1f7c: 0x00c0, 0x1f7d: 0x00c0, 0x1f7e: 0x00c0, 0x1f7f: 0x00c0, - // Block 0x7e, offset 0x1f80 - 0x1f80: 0x00c0, 0x1f81: 0x00c0, 0x1f82: 0x00c0, 0x1f83: 0x00c0, 0x1f84: 0x00c0, 0x1f85: 0x00c0, - 0x1f86: 0x00c0, 0x1f87: 0x00c0, 0x1f88: 0x00c0, 0x1f89: 0x00c0, 0x1f8a: 0x00c0, 0x1f8b: 0x00c0, - 0x1f8c: 0x00c0, 0x1f8d: 0x00c0, 0x1f8e: 0x00c0, 0x1f8f: 0x00c0, 0x1f90: 0x00c0, 0x1f91: 0x00c0, - 0x1f92: 0x00c0, 0x1f93: 0x00c0, 0x1f94: 0x00c0, 0x1f95: 0x00c0, 0x1f96: 0x00c0, 0x1f97: 0x00c0, - 0x1f98: 0x00c0, 0x1f99: 0x00c0, 0x1f9a: 0x00c0, 0x1f9b: 0x00c0, 0x1f9c: 0x00c0, 0x1f9d: 0x00c0, - 0x1f9e: 0x00c0, 0x1f9f: 0x00c0, 0x1fa0: 0x00c0, 0x1fa1: 0x00c0, 0x1fa2: 0x00c0, 0x1fa3: 0x00c0, - 0x1fa4: 0x00c0, 0x1fa5: 0x00c0, 0x1fa6: 0x00c0, 0x1fa7: 0x00c0, - 0x1faf: 0x0080, - 0x1fb0: 0x0080, - 0x1fbf: 0x00c6, - // Block 0x7f, offset 0x1fc0 - 0x1fc0: 0x00c0, 0x1fc1: 0x00c0, 0x1fc2: 0x00c0, 0x1fc3: 0x00c0, 0x1fc4: 0x00c0, 0x1fc5: 0x00c0, - 0x1fc6: 0x00c0, 0x1fc7: 0x00c0, 0x1fc8: 0x00c0, 0x1fc9: 0x00c0, 0x1fca: 0x00c0, 0x1fcb: 0x00c0, - 0x1fcc: 0x00c0, 0x1fcd: 0x00c0, 0x1fce: 0x00c0, 0x1fcf: 0x00c0, 0x1fd0: 0x00c0, 0x1fd1: 0x00c0, - 0x1fd2: 0x00c0, 0x1fd3: 0x00c0, 0x1fd4: 0x00c0, 0x1fd5: 0x00c0, 0x1fd6: 0x00c0, - 0x1fe0: 0x00c0, 0x1fe1: 0x00c0, 0x1fe2: 0x00c0, 0x1fe3: 0x00c0, - 0x1fe4: 0x00c0, 0x1fe5: 0x00c0, 0x1fe6: 0x00c0, 0x1fe8: 0x00c0, 0x1fe9: 0x00c0, - 0x1fea: 0x00c0, 0x1feb: 0x00c0, 0x1fec: 0x00c0, 0x1fed: 0x00c0, 0x1fee: 0x00c0, - 0x1ff0: 0x00c0, 0x1ff1: 0x00c0, 0x1ff2: 0x00c0, 0x1ff3: 0x00c0, 0x1ff4: 0x00c0, 0x1ff5: 0x00c0, - 0x1ff6: 0x00c0, 0x1ff8: 0x00c0, 0x1ff9: 0x00c0, 0x1ffa: 0x00c0, 0x1ffb: 0x00c0, - 0x1ffc: 0x00c0, 0x1ffd: 0x00c0, 0x1ffe: 0x00c0, - // Block 0x80, offset 0x2000 - 0x2000: 0x00c0, 0x2001: 0x00c0, 0x2002: 0x00c0, 0x2003: 0x00c0, 0x2004: 0x00c0, 0x2005: 0x00c0, - 0x2006: 0x00c0, 0x2008: 0x00c0, 0x2009: 0x00c0, 0x200a: 0x00c0, 0x200b: 0x00c0, - 0x200c: 0x00c0, 0x200d: 0x00c0, 0x200e: 0x00c0, 0x2010: 0x00c0, 0x2011: 0x00c0, - 0x2012: 0x00c0, 0x2013: 0x00c0, 0x2014: 0x00c0, 0x2015: 0x00c0, 0x2016: 0x00c0, - 0x2018: 0x00c0, 0x2019: 0x00c0, 0x201a: 0x00c0, 0x201b: 0x00c0, 0x201c: 0x00c0, 0x201d: 0x00c0, - 0x201e: 0x00c0, 0x2020: 0x00c3, 0x2021: 0x00c3, 0x2022: 0x00c3, 0x2023: 0x00c3, - 0x2024: 0x00c3, 0x2025: 0x00c3, 0x2026: 0x00c3, 0x2027: 0x00c3, 0x2028: 0x00c3, 0x2029: 0x00c3, - 0x202a: 0x00c3, 0x202b: 0x00c3, 0x202c: 0x00c3, 0x202d: 0x00c3, 0x202e: 0x00c3, 0x202f: 0x00c3, - 0x2030: 0x00c3, 0x2031: 0x00c3, 0x2032: 0x00c3, 0x2033: 0x00c3, 0x2034: 0x00c3, 0x2035: 0x00c3, - 0x2036: 0x00c3, 0x2037: 0x00c3, 0x2038: 0x00c3, 0x2039: 0x00c3, 0x203a: 0x00c3, 0x203b: 0x00c3, - 0x203c: 0x00c3, 0x203d: 0x00c3, 0x203e: 0x00c3, 0x203f: 0x00c3, - // Block 0x81, offset 0x2040 - 0x2040: 0x0080, 0x2041: 0x0080, 0x2042: 0x0080, 0x2043: 0x0080, 0x2044: 0x0080, 0x2045: 0x0080, - 0x2046: 0x0080, 0x2047: 0x0080, 0x2048: 0x0080, 0x2049: 0x0080, 0x204a: 0x0080, 0x204b: 0x0080, - 0x204c: 0x0080, 0x204d: 0x0080, 0x204e: 0x0080, 0x204f: 0x0080, 0x2050: 0x0080, 0x2051: 0x0080, - 0x2052: 0x0080, 0x2053: 0x0080, 0x2054: 0x0080, 0x2055: 0x0080, 0x2056: 0x0080, 0x2057: 0x0080, - 0x2058: 0x0080, 0x2059: 0x0080, 0x205a: 0x0080, 0x205b: 0x0080, 0x205c: 0x0080, 0x205d: 0x0080, - 0x205e: 0x0080, 0x205f: 0x0080, 0x2060: 0x0080, 0x2061: 0x0080, 0x2062: 0x0080, 0x2063: 0x0080, - 0x2064: 0x0080, 0x2065: 0x0080, 0x2066: 0x0080, 0x2067: 0x0080, 0x2068: 0x0080, 0x2069: 0x0080, - 0x206a: 0x0080, 0x206b: 0x0080, 0x206c: 0x0080, 0x206d: 0x0080, 0x206e: 0x0080, 0x206f: 0x00c0, - 0x2070: 0x0080, 0x2071: 0x0080, 0x2072: 0x0080, 0x2073: 0x0080, 0x2074: 0x0080, 0x2075: 0x0080, - 0x2076: 0x0080, 0x2077: 0x0080, 0x2078: 0x0080, 0x2079: 0x0080, 0x207a: 0x0080, 0x207b: 0x0080, - 0x207c: 0x0080, 0x207d: 0x0080, 0x207e: 0x0080, 0x207f: 0x0080, - // Block 0x82, offset 0x2080 - 0x2080: 0x0080, 0x2081: 0x0080, 0x2082: 0x0080, 0x2083: 0x0080, 0x2084: 0x0080, - // Block 0x83, offset 0x20c0 - 0x20c0: 0x008c, 0x20c1: 0x008c, 0x20c2: 0x008c, 0x20c3: 0x008c, 0x20c4: 0x008c, 0x20c5: 0x008c, - 0x20c6: 0x008c, 0x20c7: 0x008c, 0x20c8: 0x008c, 0x20c9: 0x008c, 0x20ca: 0x008c, 0x20cb: 0x008c, - 0x20cc: 0x008c, 0x20cd: 0x008c, 0x20ce: 0x008c, 0x20cf: 0x008c, 0x20d0: 0x008c, 0x20d1: 0x008c, - 0x20d2: 0x008c, 0x20d3: 0x008c, 0x20d4: 0x008c, 0x20d5: 0x008c, 0x20d6: 0x008c, 0x20d7: 0x008c, - 0x20d8: 0x008c, 0x20d9: 0x008c, 0x20db: 0x008c, 0x20dc: 0x008c, 0x20dd: 0x008c, - 0x20de: 0x008c, 0x20df: 0x008c, 0x20e0: 0x008c, 0x20e1: 0x008c, 0x20e2: 0x008c, 0x20e3: 0x008c, - 0x20e4: 0x008c, 0x20e5: 0x008c, 0x20e6: 0x008c, 0x20e7: 0x008c, 0x20e8: 0x008c, 0x20e9: 0x008c, - 0x20ea: 0x008c, 0x20eb: 0x008c, 0x20ec: 0x008c, 0x20ed: 0x008c, 0x20ee: 0x008c, 0x20ef: 0x008c, - 0x20f0: 0x008c, 0x20f1: 0x008c, 0x20f2: 0x008c, 0x20f3: 0x008c, 0x20f4: 0x008c, 0x20f5: 0x008c, - 0x20f6: 0x008c, 0x20f7: 0x008c, 0x20f8: 0x008c, 0x20f9: 0x008c, 0x20fa: 0x008c, 0x20fb: 0x008c, - 0x20fc: 0x008c, 0x20fd: 0x008c, 0x20fe: 0x008c, 0x20ff: 0x008c, - // Block 0x84, offset 0x2100 - 0x2100: 0x008c, 0x2101: 0x008c, 0x2102: 0x008c, 0x2103: 0x008c, 0x2104: 0x008c, 0x2105: 0x008c, - 0x2106: 0x008c, 0x2107: 0x008c, 0x2108: 0x008c, 0x2109: 0x008c, 0x210a: 0x008c, 0x210b: 0x008c, - 0x210c: 0x008c, 0x210d: 0x008c, 0x210e: 0x008c, 0x210f: 0x008c, 0x2110: 0x008c, 0x2111: 0x008c, - 0x2112: 0x008c, 0x2113: 0x008c, 0x2114: 0x008c, 0x2115: 0x008c, 0x2116: 0x008c, 0x2117: 0x008c, - 0x2118: 0x008c, 0x2119: 0x008c, 0x211a: 0x008c, 0x211b: 0x008c, 0x211c: 0x008c, 0x211d: 0x008c, - 0x211e: 0x008c, 0x211f: 0x008c, 0x2120: 0x008c, 0x2121: 0x008c, 0x2122: 0x008c, 0x2123: 0x008c, - 0x2124: 0x008c, 0x2125: 0x008c, 0x2126: 0x008c, 0x2127: 0x008c, 0x2128: 0x008c, 0x2129: 0x008c, - 0x212a: 0x008c, 0x212b: 0x008c, 0x212c: 0x008c, 0x212d: 0x008c, 0x212e: 0x008c, 0x212f: 0x008c, - 0x2130: 0x008c, 0x2131: 0x008c, 0x2132: 0x008c, 0x2133: 0x008c, - // Block 0x85, offset 0x2140 - 0x2140: 0x008c, 0x2141: 0x008c, 0x2142: 0x008c, 0x2143: 0x008c, 0x2144: 0x008c, 0x2145: 0x008c, - 0x2146: 0x008c, 0x2147: 0x008c, 0x2148: 0x008c, 0x2149: 0x008c, 0x214a: 0x008c, 0x214b: 0x008c, - 0x214c: 0x008c, 0x214d: 0x008c, 0x214e: 0x008c, 0x214f: 0x008c, 0x2150: 0x008c, 0x2151: 0x008c, - 0x2152: 0x008c, 0x2153: 0x008c, 0x2154: 0x008c, 0x2155: 0x008c, 0x2156: 0x008c, 0x2157: 0x008c, - 0x2158: 0x008c, 0x2159: 0x008c, 0x215a: 0x008c, 0x215b: 0x008c, 0x215c: 0x008c, 0x215d: 0x008c, - 0x215e: 0x008c, 0x215f: 0x008c, 0x2160: 0x008c, 0x2161: 0x008c, 0x2162: 0x008c, 0x2163: 0x008c, - 0x2164: 0x008c, 0x2165: 0x008c, 0x2166: 0x008c, 0x2167: 0x008c, 0x2168: 0x008c, 0x2169: 0x008c, - 0x216a: 0x008c, 0x216b: 0x008c, 0x216c: 0x008c, 0x216d: 0x008c, 0x216e: 0x008c, 0x216f: 0x008c, - 0x2170: 0x008c, 0x2171: 0x008c, 0x2172: 0x008c, 0x2173: 0x008c, 0x2174: 0x008c, 0x2175: 0x008c, - 0x2176: 0x008c, 0x2177: 0x008c, 0x2178: 0x008c, 0x2179: 0x008c, 0x217a: 0x008c, 0x217b: 0x008c, - 0x217c: 0x008c, 0x217d: 0x008c, 0x217e: 0x008c, 0x217f: 0x008c, - // Block 0x86, offset 0x2180 - 0x2180: 0x008c, 0x2181: 0x008c, 0x2182: 0x008c, 0x2183: 0x008c, 0x2184: 0x008c, 0x2185: 0x008c, - 0x2186: 0x008c, 0x2187: 0x008c, 0x2188: 0x008c, 0x2189: 0x008c, 0x218a: 0x008c, 0x218b: 0x008c, - 0x218c: 0x008c, 0x218d: 0x008c, 0x218e: 0x008c, 0x218f: 0x008c, 0x2190: 0x008c, 0x2191: 0x008c, - 0x2192: 0x008c, 0x2193: 0x008c, 0x2194: 0x008c, 0x2195: 0x008c, - 0x21b0: 0x0080, 0x21b1: 0x0080, 0x21b2: 0x0080, 0x21b3: 0x0080, 0x21b4: 0x0080, 0x21b5: 0x0080, - 0x21b6: 0x0080, 0x21b7: 0x0080, 0x21b8: 0x0080, 0x21b9: 0x0080, 0x21ba: 0x0080, 0x21bb: 0x0080, - // Block 0x87, offset 0x21c0 - 0x21c0: 0x0080, 0x21c1: 0x0080, 0x21c2: 0x0080, 0x21c3: 0x0080, 0x21c4: 0x0080, 0x21c5: 0x00cc, - 0x21c6: 0x00c0, 0x21c7: 0x00cc, 0x21c8: 0x0080, 0x21c9: 0x0080, 0x21ca: 0x0080, 0x21cb: 0x0080, - 0x21cc: 0x0080, 0x21cd: 0x0080, 0x21ce: 0x0080, 0x21cf: 0x0080, 0x21d0: 0x0080, 0x21d1: 0x0080, - 0x21d2: 0x0080, 0x21d3: 0x0080, 0x21d4: 0x0080, 0x21d5: 0x0080, 0x21d6: 0x0080, 0x21d7: 0x0080, - 0x21d8: 0x0080, 0x21d9: 0x0080, 0x21da: 0x0080, 0x21db: 0x0080, 0x21dc: 0x0080, 0x21dd: 0x0080, - 0x21de: 0x0080, 0x21df: 0x0080, 0x21e0: 0x0080, 0x21e1: 0x008c, 0x21e2: 0x008c, 0x21e3: 0x008c, - 0x21e4: 0x008c, 0x21e5: 0x008c, 0x21e6: 0x008c, 0x21e7: 0x008c, 0x21e8: 0x008c, 0x21e9: 0x008c, - 0x21ea: 0x00c3, 0x21eb: 0x00c3, 0x21ec: 0x00c3, 0x21ed: 0x00c3, 0x21ee: 0x0040, 0x21ef: 0x0040, - 0x21f0: 0x0080, 0x21f1: 0x0040, 0x21f2: 0x0040, 0x21f3: 0x0040, 0x21f4: 0x0040, 0x21f5: 0x0040, - 0x21f6: 0x0080, 0x21f7: 0x0080, 0x21f8: 0x008c, 0x21f9: 0x008c, 0x21fa: 0x008c, 0x21fb: 0x0040, - 0x21fc: 0x00c0, 0x21fd: 0x0080, 0x21fe: 0x0080, 0x21ff: 0x0080, - // Block 0x88, offset 0x2200 - 0x2201: 0x00cc, 0x2202: 0x00cc, 0x2203: 0x00cc, 0x2204: 0x00cc, 0x2205: 0x00cc, - 0x2206: 0x00cc, 0x2207: 0x00cc, 0x2208: 0x00cc, 0x2209: 0x00cc, 0x220a: 0x00cc, 0x220b: 0x00cc, - 0x220c: 0x00cc, 0x220d: 0x00cc, 0x220e: 0x00cc, 0x220f: 0x00cc, 0x2210: 0x00cc, 0x2211: 0x00cc, - 0x2212: 0x00cc, 0x2213: 0x00cc, 0x2214: 0x00cc, 0x2215: 0x00cc, 0x2216: 0x00cc, 0x2217: 0x00cc, - 0x2218: 0x00cc, 0x2219: 0x00cc, 0x221a: 0x00cc, 0x221b: 0x00cc, 0x221c: 0x00cc, 0x221d: 0x00cc, - 0x221e: 0x00cc, 0x221f: 0x00cc, 0x2220: 0x00cc, 0x2221: 0x00cc, 0x2222: 0x00cc, 0x2223: 0x00cc, - 0x2224: 0x00cc, 0x2225: 0x00cc, 0x2226: 0x00cc, 0x2227: 0x00cc, 0x2228: 0x00cc, 0x2229: 0x00cc, - 0x222a: 0x00cc, 0x222b: 0x00cc, 0x222c: 0x00cc, 0x222d: 0x00cc, 0x222e: 0x00cc, 0x222f: 0x00cc, - 0x2230: 0x00cc, 0x2231: 0x00cc, 0x2232: 0x00cc, 0x2233: 0x00cc, 0x2234: 0x00cc, 0x2235: 0x00cc, - 0x2236: 0x00cc, 0x2237: 0x00cc, 0x2238: 0x00cc, 0x2239: 0x00cc, 0x223a: 0x00cc, 0x223b: 0x00cc, - 0x223c: 0x00cc, 0x223d: 0x00cc, 0x223e: 0x00cc, 0x223f: 0x00cc, - // Block 0x89, offset 0x2240 - 0x2240: 0x00cc, 0x2241: 0x00cc, 0x2242: 0x00cc, 0x2243: 0x00cc, 0x2244: 0x00cc, 0x2245: 0x00cc, - 0x2246: 0x00cc, 0x2247: 0x00cc, 0x2248: 0x00cc, 0x2249: 0x00cc, 0x224a: 0x00cc, 0x224b: 0x00cc, - 0x224c: 0x00cc, 0x224d: 0x00cc, 0x224e: 0x00cc, 0x224f: 0x00cc, 0x2250: 0x00cc, 0x2251: 0x00cc, - 0x2252: 0x00cc, 0x2253: 0x00cc, 0x2254: 0x00cc, 0x2255: 0x00cc, 0x2256: 0x00cc, - 0x2259: 0x00c3, 0x225a: 0x00c3, 0x225b: 0x0080, 0x225c: 0x0080, 0x225d: 0x00cc, - 0x225e: 0x00cc, 0x225f: 0x008c, 0x2260: 0x0080, 0x2261: 0x00cc, 0x2262: 0x00cc, 0x2263: 0x00cc, - 0x2264: 0x00cc, 0x2265: 0x00cc, 0x2266: 0x00cc, 0x2267: 0x00cc, 0x2268: 0x00cc, 0x2269: 0x00cc, - 0x226a: 0x00cc, 0x226b: 0x00cc, 0x226c: 0x00cc, 0x226d: 0x00cc, 0x226e: 0x00cc, 0x226f: 0x00cc, - 0x2270: 0x00cc, 0x2271: 0x00cc, 0x2272: 0x00cc, 0x2273: 0x00cc, 0x2274: 0x00cc, 0x2275: 0x00cc, - 0x2276: 0x00cc, 0x2277: 0x00cc, 0x2278: 0x00cc, 0x2279: 0x00cc, 0x227a: 0x00cc, 0x227b: 0x00cc, - 0x227c: 0x00cc, 0x227d: 0x00cc, 0x227e: 0x00cc, 0x227f: 0x00cc, - // Block 0x8a, offset 0x2280 - 0x2280: 0x00cc, 0x2281: 0x00cc, 0x2282: 0x00cc, 0x2283: 0x00cc, 0x2284: 0x00cc, 0x2285: 0x00cc, - 0x2286: 0x00cc, 0x2287: 0x00cc, 0x2288: 0x00cc, 0x2289: 0x00cc, 0x228a: 0x00cc, 0x228b: 0x00cc, - 0x228c: 0x00cc, 0x228d: 0x00cc, 0x228e: 0x00cc, 0x228f: 0x00cc, 0x2290: 0x00cc, 0x2291: 0x00cc, - 0x2292: 0x00cc, 0x2293: 0x00cc, 0x2294: 0x00cc, 0x2295: 0x00cc, 0x2296: 0x00cc, 0x2297: 0x00cc, - 0x2298: 0x00cc, 0x2299: 0x00cc, 0x229a: 0x00cc, 0x229b: 0x00cc, 0x229c: 0x00cc, 0x229d: 0x00cc, - 0x229e: 0x00cc, 0x229f: 0x00cc, 0x22a0: 0x00cc, 0x22a1: 0x00cc, 0x22a2: 0x00cc, 0x22a3: 0x00cc, - 0x22a4: 0x00cc, 0x22a5: 0x00cc, 0x22a6: 0x00cc, 0x22a7: 0x00cc, 0x22a8: 0x00cc, 0x22a9: 0x00cc, - 0x22aa: 0x00cc, 0x22ab: 0x00cc, 0x22ac: 0x00cc, 0x22ad: 0x00cc, 0x22ae: 0x00cc, 0x22af: 0x00cc, - 0x22b0: 0x00cc, 0x22b1: 0x00cc, 0x22b2: 0x00cc, 0x22b3: 0x00cc, 0x22b4: 0x00cc, 0x22b5: 0x00cc, - 0x22b6: 0x00cc, 0x22b7: 0x00cc, 0x22b8: 0x00cc, 0x22b9: 0x00cc, 0x22ba: 0x00cc, 0x22bb: 0x00d2, - 0x22bc: 0x00c0, 0x22bd: 0x00cc, 0x22be: 0x00cc, 0x22bf: 0x008c, - // Block 0x8b, offset 0x22c0 - 0x22c5: 0x00c0, - 0x22c6: 0x00c0, 0x22c7: 0x00c0, 0x22c8: 0x00c0, 0x22c9: 0x00c0, 0x22ca: 0x00c0, 0x22cb: 0x00c0, - 0x22cc: 0x00c0, 0x22cd: 0x00c0, 0x22ce: 0x00c0, 0x22cf: 0x00c0, 0x22d0: 0x00c0, 0x22d1: 0x00c0, - 0x22d2: 0x00c0, 0x22d3: 0x00c0, 0x22d4: 0x00c0, 0x22d5: 0x00c0, 0x22d6: 0x00c0, 0x22d7: 0x00c0, - 0x22d8: 0x00c0, 0x22d9: 0x00c0, 0x22da: 0x00c0, 0x22db: 0x00c0, 0x22dc: 0x00c0, 0x22dd: 0x00c0, - 0x22de: 0x00c0, 0x22df: 0x00c0, 0x22e0: 0x00c0, 0x22e1: 0x00c0, 0x22e2: 0x00c0, 0x22e3: 0x00c0, - 0x22e4: 0x00c0, 0x22e5: 0x00c0, 0x22e6: 0x00c0, 0x22e7: 0x00c0, 0x22e8: 0x00c0, 0x22e9: 0x00c0, - 0x22ea: 0x00c0, 0x22eb: 0x00c0, 0x22ec: 0x00c0, 0x22ed: 0x00c0, - 0x22f1: 0x0080, 0x22f2: 0x0080, 0x22f3: 0x0080, 0x22f4: 0x0080, 0x22f5: 0x0080, - 0x22f6: 0x0080, 0x22f7: 0x0080, 0x22f8: 0x0080, 0x22f9: 0x0080, 0x22fa: 0x0080, 0x22fb: 0x0080, - 0x22fc: 0x0080, 0x22fd: 0x0080, 0x22fe: 0x0080, 0x22ff: 0x0080, - // Block 0x8c, offset 0x2300 - 0x2300: 0x0080, 0x2301: 0x0080, 0x2302: 0x0080, 0x2303: 0x0080, 0x2304: 0x0080, 0x2305: 0x0080, - 0x2306: 0x0080, 0x2307: 0x0080, 0x2308: 0x0080, 0x2309: 0x0080, 0x230a: 0x0080, 0x230b: 0x0080, - 0x230c: 0x0080, 0x230d: 0x0080, 0x230e: 0x0080, 0x230f: 0x0080, 0x2310: 0x0080, 0x2311: 0x0080, - 0x2312: 0x0080, 0x2313: 0x0080, 0x2314: 0x0080, 0x2315: 0x0080, 0x2316: 0x0080, 0x2317: 0x0080, - 0x2318: 0x0080, 0x2319: 0x0080, 0x231a: 0x0080, 0x231b: 0x0080, 0x231c: 0x0080, 0x231d: 0x0080, - 0x231e: 0x0080, 0x231f: 0x0080, 0x2320: 0x0080, 0x2321: 0x0080, 0x2322: 0x0080, 0x2323: 0x0080, - 0x2324: 0x0040, 0x2325: 0x0080, 0x2326: 0x0080, 0x2327: 0x0080, 0x2328: 0x0080, 0x2329: 0x0080, - 0x232a: 0x0080, 0x232b: 0x0080, 0x232c: 0x0080, 0x232d: 0x0080, 0x232e: 0x0080, 0x232f: 0x0080, - 0x2330: 0x0080, 0x2331: 0x0080, 0x2332: 0x0080, 0x2333: 0x0080, 0x2334: 0x0080, 0x2335: 0x0080, - 0x2336: 0x0080, 0x2337: 0x0080, 0x2338: 0x0080, 0x2339: 0x0080, 0x233a: 0x0080, 0x233b: 0x0080, - 0x233c: 0x0080, 0x233d: 0x0080, 0x233e: 0x0080, 0x233f: 0x0080, - // Block 0x8d, offset 0x2340 - 0x2340: 0x0080, 0x2341: 0x0080, 0x2342: 0x0080, 0x2343: 0x0080, 0x2344: 0x0080, 0x2345: 0x0080, - 0x2346: 0x0080, 0x2347: 0x0080, 0x2348: 0x0080, 0x2349: 0x0080, 0x234a: 0x0080, 0x234b: 0x0080, - 0x234c: 0x0080, 0x234d: 0x0080, 0x234e: 0x0080, 0x2350: 0x0080, 0x2351: 0x0080, - 0x2352: 0x0080, 0x2353: 0x0080, 0x2354: 0x0080, 0x2355: 0x0080, 0x2356: 0x0080, 0x2357: 0x0080, - 0x2358: 0x0080, 0x2359: 0x0080, 0x235a: 0x0080, 0x235b: 0x0080, 0x235c: 0x0080, 0x235d: 0x0080, - 0x235e: 0x0080, 0x235f: 0x0080, 0x2360: 0x00c0, 0x2361: 0x00c0, 0x2362: 0x00c0, 0x2363: 0x00c0, - 0x2364: 0x00c0, 0x2365: 0x00c0, 0x2366: 0x00c0, 0x2367: 0x00c0, 0x2368: 0x00c0, 0x2369: 0x00c0, - 0x236a: 0x00c0, 0x236b: 0x00c0, 0x236c: 0x00c0, 0x236d: 0x00c0, 0x236e: 0x00c0, 0x236f: 0x00c0, - 0x2370: 0x00c0, 0x2371: 0x00c0, 0x2372: 0x00c0, 0x2373: 0x00c0, 0x2374: 0x00c0, 0x2375: 0x00c0, - 0x2376: 0x00c0, 0x2377: 0x00c0, 0x2378: 0x00c0, 0x2379: 0x00c0, 0x237a: 0x00c0, - // Block 0x8e, offset 0x2380 - 0x2380: 0x0080, 0x2381: 0x0080, 0x2382: 0x0080, 0x2383: 0x0080, 0x2384: 0x0080, 0x2385: 0x0080, - 0x2386: 0x0080, 0x2387: 0x0080, 0x2388: 0x0080, 0x2389: 0x0080, 0x238a: 0x0080, 0x238b: 0x0080, - 0x238c: 0x0080, 0x238d: 0x0080, 0x238e: 0x0080, 0x238f: 0x0080, 0x2390: 0x0080, 0x2391: 0x0080, - 0x2392: 0x0080, 0x2393: 0x0080, 0x2394: 0x0080, 0x2395: 0x0080, 0x2396: 0x0080, 0x2397: 0x0080, - 0x2398: 0x0080, 0x2399: 0x0080, 0x239a: 0x0080, 0x239b: 0x0080, 0x239c: 0x0080, 0x239d: 0x0080, - 0x239e: 0x0080, 0x239f: 0x0080, 0x23a0: 0x0080, 0x23a1: 0x0080, 0x23a2: 0x0080, 0x23a3: 0x0080, - 0x23b0: 0x00cc, 0x23b1: 0x00cc, 0x23b2: 0x00cc, 0x23b3: 0x00cc, 0x23b4: 0x00cc, 0x23b5: 0x00cc, - 0x23b6: 0x00cc, 0x23b7: 0x00cc, 0x23b8: 0x00cc, 0x23b9: 0x00cc, 0x23ba: 0x00cc, 0x23bb: 0x00cc, - 0x23bc: 0x00cc, 0x23bd: 0x00cc, 0x23be: 0x00cc, 0x23bf: 0x00cc, - // Block 0x8f, offset 0x23c0 - 0x23c0: 0x0080, 0x23c1: 0x0080, 0x23c2: 0x0080, 0x23c3: 0x0080, 0x23c4: 0x0080, 0x23c5: 0x0080, - 0x23c6: 0x0080, 0x23c7: 0x0080, 0x23c8: 0x0080, 0x23c9: 0x0080, 0x23ca: 0x0080, 0x23cb: 0x0080, - 0x23cc: 0x0080, 0x23cd: 0x0080, 0x23ce: 0x0080, 0x23cf: 0x0080, 0x23d0: 0x0080, 0x23d1: 0x0080, - 0x23d2: 0x0080, 0x23d3: 0x0080, 0x23d4: 0x0080, 0x23d5: 0x0080, 0x23d6: 0x0080, 0x23d7: 0x0080, - 0x23d8: 0x0080, 0x23d9: 0x0080, 0x23da: 0x0080, 0x23db: 0x0080, 0x23dc: 0x0080, 0x23dd: 0x0080, - 0x23de: 0x0080, 0x23e0: 0x0080, 0x23e1: 0x0080, 0x23e2: 0x0080, 0x23e3: 0x0080, - 0x23e4: 0x0080, 0x23e5: 0x0080, 0x23e6: 0x0080, 0x23e7: 0x0080, 0x23e8: 0x0080, 0x23e9: 0x0080, - 0x23ea: 0x0080, 0x23eb: 0x0080, 0x23ec: 0x0080, 0x23ed: 0x0080, 0x23ee: 0x0080, 0x23ef: 0x0080, - 0x23f0: 0x0080, 0x23f1: 0x0080, 0x23f2: 0x0080, 0x23f3: 0x0080, 0x23f4: 0x0080, 0x23f5: 0x0080, - 0x23f6: 0x0080, 0x23f7: 0x0080, 0x23f8: 0x0080, 0x23f9: 0x0080, 0x23fa: 0x0080, 0x23fb: 0x0080, - 0x23fc: 0x0080, 0x23fd: 0x0080, 0x23fe: 0x0080, 0x23ff: 0x0080, - // Block 0x90, offset 0x2400 - 0x2400: 0x0080, 0x2401: 0x0080, 0x2402: 0x0080, 0x2403: 0x0080, 0x2404: 0x0080, 0x2405: 0x0080, - 0x2406: 0x0080, 0x2407: 0x0080, 0x2408: 0x0080, 0x2409: 0x0080, 0x240a: 0x0080, 0x240b: 0x0080, - 0x240c: 0x0080, 0x240d: 0x0080, 0x240e: 0x0080, 0x240f: 0x0080, 0x2410: 0x008c, 0x2411: 0x008c, - 0x2412: 0x008c, 0x2413: 0x008c, 0x2414: 0x008c, 0x2415: 0x008c, 0x2416: 0x008c, 0x2417: 0x008c, - 0x2418: 0x008c, 0x2419: 0x008c, 0x241a: 0x008c, 0x241b: 0x008c, 0x241c: 0x008c, 0x241d: 0x008c, - 0x241e: 0x008c, 0x241f: 0x008c, 0x2420: 0x008c, 0x2421: 0x008c, 0x2422: 0x008c, 0x2423: 0x008c, - 0x2424: 0x008c, 0x2425: 0x008c, 0x2426: 0x008c, 0x2427: 0x008c, 0x2428: 0x008c, 0x2429: 0x008c, - 0x242a: 0x008c, 0x242b: 0x008c, 0x242c: 0x008c, 0x242d: 0x008c, 0x242e: 0x008c, 0x242f: 0x008c, - 0x2430: 0x008c, 0x2431: 0x008c, 0x2432: 0x008c, 0x2433: 0x008c, 0x2434: 0x008c, 0x2435: 0x008c, - 0x2436: 0x008c, 0x2437: 0x008c, 0x2438: 0x008c, 0x2439: 0x008c, 0x243a: 0x008c, 0x243b: 0x008c, - 0x243c: 0x008c, 0x243d: 0x008c, 0x243e: 0x008c, - // Block 0x91, offset 0x2440 - 0x2440: 0x008c, 0x2441: 0x008c, 0x2442: 0x008c, 0x2443: 0x008c, 0x2444: 0x008c, 0x2445: 0x008c, - 0x2446: 0x008c, 0x2447: 0x008c, 0x2448: 0x008c, 0x2449: 0x008c, 0x244a: 0x008c, 0x244b: 0x008c, - 0x244c: 0x008c, 0x244d: 0x008c, 0x244e: 0x008c, 0x244f: 0x008c, 0x2450: 0x008c, 0x2451: 0x008c, - 0x2452: 0x008c, 0x2453: 0x008c, 0x2454: 0x008c, 0x2455: 0x008c, 0x2456: 0x008c, 0x2457: 0x008c, - 0x2458: 0x0080, 0x2459: 0x0080, 0x245a: 0x0080, 0x245b: 0x0080, 0x245c: 0x0080, 0x245d: 0x0080, - 0x245e: 0x0080, 0x245f: 0x0080, 0x2460: 0x0080, 0x2461: 0x0080, 0x2462: 0x0080, 0x2463: 0x0080, - 0x2464: 0x0080, 0x2465: 0x0080, 0x2466: 0x0080, 0x2467: 0x0080, 0x2468: 0x0080, 0x2469: 0x0080, - 0x246a: 0x0080, 0x246b: 0x0080, 0x246c: 0x0080, 0x246d: 0x0080, 0x246e: 0x0080, 0x246f: 0x0080, - 0x2470: 0x0080, 0x2471: 0x0080, 0x2472: 0x0080, 0x2473: 0x0080, 0x2474: 0x0080, 0x2475: 0x0080, - 0x2476: 0x0080, 0x2477: 0x0080, 0x2478: 0x0080, 0x2479: 0x0080, 0x247a: 0x0080, 0x247b: 0x0080, - 0x247c: 0x0080, 0x247d: 0x0080, 0x247e: 0x0080, 0x247f: 0x0080, - // Block 0x92, offset 0x2480 - 0x2480: 0x00cc, 0x2481: 0x00cc, 0x2482: 0x00cc, 0x2483: 0x00cc, 0x2484: 0x00cc, 0x2485: 0x00cc, - 0x2486: 0x00cc, 0x2487: 0x00cc, 0x2488: 0x00cc, 0x2489: 0x00cc, 0x248a: 0x00cc, 0x248b: 0x00cc, - 0x248c: 0x00cc, 0x248d: 0x00cc, 0x248e: 0x00cc, 0x248f: 0x00cc, 0x2490: 0x00cc, 0x2491: 0x00cc, - 0x2492: 0x00cc, 0x2493: 0x00cc, 0x2494: 0x00cc, 0x2495: 0x00cc, 0x2496: 0x00cc, 0x2497: 0x00cc, - 0x2498: 0x00cc, 0x2499: 0x00cc, 0x249a: 0x00cc, 0x249b: 0x00cc, 0x249c: 0x00cc, 0x249d: 0x00cc, - 0x249e: 0x00cc, 0x249f: 0x00cc, 0x24a0: 0x00cc, 0x24a1: 0x00cc, 0x24a2: 0x00cc, 0x24a3: 0x00cc, - 0x24a4: 0x00cc, 0x24a5: 0x00cc, 0x24a6: 0x00cc, 0x24a7: 0x00cc, 0x24a8: 0x00cc, 0x24a9: 0x00cc, - 0x24aa: 0x00cc, 0x24ab: 0x00cc, 0x24ac: 0x00cc, 0x24ad: 0x00cc, 0x24ae: 0x00cc, 0x24af: 0x00cc, - 0x24b0: 0x00cc, 0x24b1: 0x00cc, 0x24b2: 0x00cc, 0x24b3: 0x00cc, 0x24b4: 0x00cc, 0x24b5: 0x00cc, - 0x24b6: 0x00cc, 0x24b7: 0x00cc, 0x24b8: 0x00cc, 0x24b9: 0x00cc, 0x24ba: 0x00cc, 0x24bb: 0x00cc, - 0x24bc: 0x00cc, 0x24bd: 0x00cc, 0x24be: 0x00cc, 0x24bf: 0x00cc, - // Block 0x93, offset 0x24c0 - 0x24c0: 0x00cc, 0x24c1: 0x00cc, 0x24c2: 0x00cc, 0x24c3: 0x00cc, 0x24c4: 0x00cc, 0x24c5: 0x00cc, - 0x24c6: 0x00cc, 0x24c7: 0x00cc, 0x24c8: 0x00cc, 0x24c9: 0x00cc, 0x24ca: 0x00cc, 0x24cb: 0x00cc, - 0x24cc: 0x00cc, 0x24cd: 0x00cc, 0x24ce: 0x00cc, 0x24cf: 0x00cc, 0x24d0: 0x00cc, 0x24d1: 0x00cc, - 0x24d2: 0x00cc, 0x24d3: 0x00cc, 0x24d4: 0x00cc, 0x24d5: 0x00cc, 0x24d6: 0x00cc, 0x24d7: 0x00cc, - 0x24d8: 0x00cc, 0x24d9: 0x00cc, 0x24da: 0x00cc, 0x24db: 0x00cc, 0x24dc: 0x00cc, 0x24dd: 0x00cc, - 0x24de: 0x00cc, 0x24df: 0x00cc, 0x24e0: 0x00cc, 0x24e1: 0x00cc, 0x24e2: 0x00cc, 0x24e3: 0x00cc, - 0x24e4: 0x00cc, 0x24e5: 0x00cc, 0x24e6: 0x00cc, 0x24e7: 0x00cc, 0x24e8: 0x00cc, 0x24e9: 0x00cc, - 0x24ea: 0x00cc, 0x24eb: 0x00cc, 0x24ec: 0x00cc, 0x24ed: 0x00cc, 0x24ee: 0x00cc, 0x24ef: 0x00cc, - 0x24f0: 0x00cc, 0x24f1: 0x00cc, 0x24f2: 0x00cc, 0x24f3: 0x00cc, 0x24f4: 0x00cc, 0x24f5: 0x00cc, - // Block 0x94, offset 0x2500 - 0x2500: 0x00cc, 0x2501: 0x00cc, 0x2502: 0x00cc, 0x2503: 0x00cc, 0x2504: 0x00cc, 0x2505: 0x00cc, - 0x2506: 0x00cc, 0x2507: 0x00cc, 0x2508: 0x00cc, 0x2509: 0x00cc, 0x250a: 0x00cc, 0x250b: 0x00cc, - 0x250c: 0x00cc, 0x250d: 0x00cc, 0x250e: 0x00cc, 0x250f: 0x00cc, 0x2510: 0x00cc, 0x2511: 0x00cc, - 0x2512: 0x00cc, 0x2513: 0x00cc, 0x2514: 0x00cc, 0x2515: 0x00cc, - // Block 0x95, offset 0x2540 - 0x2540: 0x00c0, 0x2541: 0x00c0, 0x2542: 0x00c0, 0x2543: 0x00c0, 0x2544: 0x00c0, 0x2545: 0x00c0, - 0x2546: 0x00c0, 0x2547: 0x00c0, 0x2548: 0x00c0, 0x2549: 0x00c0, 0x254a: 0x00c0, 0x254b: 0x00c0, - 0x254c: 0x00c0, 0x2550: 0x0080, 0x2551: 0x0080, - 0x2552: 0x0080, 0x2553: 0x0080, 0x2554: 0x0080, 0x2555: 0x0080, 0x2556: 0x0080, 0x2557: 0x0080, - 0x2558: 0x0080, 0x2559: 0x0080, 0x255a: 0x0080, 0x255b: 0x0080, 0x255c: 0x0080, 0x255d: 0x0080, - 0x255e: 0x0080, 0x255f: 0x0080, 0x2560: 0x0080, 0x2561: 0x0080, 0x2562: 0x0080, 0x2563: 0x0080, - 0x2564: 0x0080, 0x2565: 0x0080, 0x2566: 0x0080, 0x2567: 0x0080, 0x2568: 0x0080, 0x2569: 0x0080, - 0x256a: 0x0080, 0x256b: 0x0080, 0x256c: 0x0080, 0x256d: 0x0080, 0x256e: 0x0080, 0x256f: 0x0080, - 0x2570: 0x0080, 0x2571: 0x0080, 0x2572: 0x0080, 0x2573: 0x0080, 0x2574: 0x0080, 0x2575: 0x0080, - 0x2576: 0x0080, 0x2577: 0x0080, 0x2578: 0x0080, 0x2579: 0x0080, 0x257a: 0x0080, 0x257b: 0x0080, - 0x257c: 0x0080, 0x257d: 0x0080, 0x257e: 0x0080, 0x257f: 0x0080, - // Block 0x96, offset 0x2580 - 0x2580: 0x0080, 0x2581: 0x0080, 0x2582: 0x0080, 0x2583: 0x0080, 0x2584: 0x0080, 0x2585: 0x0080, - 0x2586: 0x0080, - 0x2590: 0x00c0, 0x2591: 0x00c0, - 0x2592: 0x00c0, 0x2593: 0x00c0, 0x2594: 0x00c0, 0x2595: 0x00c0, 0x2596: 0x00c0, 0x2597: 0x00c0, - 0x2598: 0x00c0, 0x2599: 0x00c0, 0x259a: 0x00c0, 0x259b: 0x00c0, 0x259c: 0x00c0, 0x259d: 0x00c0, - 0x259e: 0x00c0, 0x259f: 0x00c0, 0x25a0: 0x00c0, 0x25a1: 0x00c0, 0x25a2: 0x00c0, 0x25a3: 0x00c0, - 0x25a4: 0x00c0, 0x25a5: 0x00c0, 0x25a6: 0x00c0, 0x25a7: 0x00c0, 0x25a8: 0x00c0, 0x25a9: 0x00c0, - 0x25aa: 0x00c0, 0x25ab: 0x00c0, 0x25ac: 0x00c0, 0x25ad: 0x00c0, 0x25ae: 0x00c0, 0x25af: 0x00c0, - 0x25b0: 0x00c0, 0x25b1: 0x00c0, 0x25b2: 0x00c0, 0x25b3: 0x00c0, 0x25b4: 0x00c0, 0x25b5: 0x00c0, - 0x25b6: 0x00c0, 0x25b7: 0x00c0, 0x25b8: 0x00c0, 0x25b9: 0x00c0, 0x25ba: 0x00c0, 0x25bb: 0x00c0, - 0x25bc: 0x00c0, 0x25bd: 0x00c0, 0x25be: 0x0080, 0x25bf: 0x0080, - // Block 0x97, offset 0x25c0 - 0x25c0: 0x00c0, 0x25c1: 0x00c0, 0x25c2: 0x00c0, 0x25c3: 0x00c0, 0x25c4: 0x00c0, 0x25c5: 0x00c0, - 0x25c6: 0x00c0, 0x25c7: 0x00c0, 0x25c8: 0x00c0, 0x25c9: 0x00c0, 0x25ca: 0x00c0, 0x25cb: 0x00c0, - 0x25cc: 0x00c0, 0x25cd: 0x0080, 0x25ce: 0x0080, 0x25cf: 0x0080, 0x25d0: 0x00c0, 0x25d1: 0x00c0, - 0x25d2: 0x00c0, 0x25d3: 0x00c0, 0x25d4: 0x00c0, 0x25d5: 0x00c0, 0x25d6: 0x00c0, 0x25d7: 0x00c0, - 0x25d8: 0x00c0, 0x25d9: 0x00c0, 0x25da: 0x00c0, 0x25db: 0x00c0, 0x25dc: 0x00c0, 0x25dd: 0x00c0, - 0x25de: 0x00c0, 0x25df: 0x00c0, 0x25e0: 0x00c0, 0x25e1: 0x00c0, 0x25e2: 0x00c0, 0x25e3: 0x00c0, - 0x25e4: 0x00c0, 0x25e5: 0x00c0, 0x25e6: 0x00c0, 0x25e7: 0x00c0, 0x25e8: 0x00c0, 0x25e9: 0x00c0, - 0x25ea: 0x00c0, 0x25eb: 0x00c0, - // Block 0x98, offset 0x2600 - 0x2600: 0x00c0, 0x2601: 0x00c0, 0x2602: 0x00c0, 0x2603: 0x00c0, 0x2604: 0x00c0, 0x2605: 0x00c0, - 0x2606: 0x00c0, 0x2607: 0x00c0, 0x2608: 0x00c0, 0x2609: 0x00c0, 0x260a: 0x00c0, 0x260b: 0x00c0, - 0x260c: 0x00c0, 0x260d: 0x00c0, 0x260e: 0x00c0, 0x260f: 0x00c0, 0x2610: 0x00c0, 0x2611: 0x00c0, - 0x2612: 0x00c0, 0x2613: 0x00c0, 0x2614: 0x00c0, 0x2615: 0x00c0, 0x2616: 0x00c0, 0x2617: 0x00c0, - 0x2618: 0x00c0, 0x2619: 0x00c0, 0x261a: 0x00c0, 0x261b: 0x00c0, 0x261c: 0x00c0, 0x261d: 0x00c0, - 0x261e: 0x00c0, 0x261f: 0x00c0, 0x2620: 0x00c0, 0x2621: 0x00c0, 0x2622: 0x00c0, 0x2623: 0x00c0, - 0x2624: 0x00c0, 0x2625: 0x00c0, 0x2626: 0x00c0, 0x2627: 0x00c0, 0x2628: 0x00c0, 0x2629: 0x00c0, - 0x262a: 0x00c0, 0x262b: 0x00c0, 0x262c: 0x00c0, 0x262d: 0x00c0, 0x262e: 0x00c0, 0x262f: 0x00c3, - 0x2630: 0x0083, 0x2631: 0x0083, 0x2632: 0x0083, 0x2633: 0x0080, 0x2634: 0x00c3, 0x2635: 0x00c3, - 0x2636: 0x00c3, 0x2637: 0x00c3, 0x2638: 0x00c3, 0x2639: 0x00c3, 0x263a: 0x00c3, 0x263b: 0x00c3, - 0x263c: 0x00c3, 0x263d: 0x00c3, 0x263e: 0x0080, 0x263f: 0x00c0, - // Block 0x99, offset 0x2640 - 0x2640: 0x00c0, 0x2641: 0x00c0, 0x2642: 0x00c0, 0x2643: 0x00c0, 0x2644: 0x00c0, 0x2645: 0x00c0, - 0x2646: 0x00c0, 0x2647: 0x00c0, 0x2648: 0x00c0, 0x2649: 0x00c0, 0x264a: 0x00c0, 0x264b: 0x00c0, - 0x264c: 0x00c0, 0x264d: 0x00c0, 0x264e: 0x00c0, 0x264f: 0x00c0, 0x2650: 0x00c0, 0x2651: 0x00c0, - 0x2652: 0x00c0, 0x2653: 0x00c0, 0x2654: 0x00c0, 0x2655: 0x00c0, 0x2656: 0x00c0, 0x2657: 0x00c0, - 0x2658: 0x00c0, 0x2659: 0x00c0, 0x265a: 0x00c0, 0x265b: 0x00c0, 0x265c: 0x0080, 0x265d: 0x0080, - 0x265e: 0x00c3, 0x265f: 0x00c3, 0x2660: 0x00c0, 0x2661: 0x00c0, 0x2662: 0x00c0, 0x2663: 0x00c0, - 0x2664: 0x00c0, 0x2665: 0x00c0, 0x2666: 0x00c0, 0x2667: 0x00c0, 0x2668: 0x00c0, 0x2669: 0x00c0, - 0x266a: 0x00c0, 0x266b: 0x00c0, 0x266c: 0x00c0, 0x266d: 0x00c0, 0x266e: 0x00c0, 0x266f: 0x00c0, - 0x2670: 0x00c0, 0x2671: 0x00c0, 0x2672: 0x00c0, 0x2673: 0x00c0, 0x2674: 0x00c0, 0x2675: 0x00c0, - 0x2676: 0x00c0, 0x2677: 0x00c0, 0x2678: 0x00c0, 0x2679: 0x00c0, 0x267a: 0x00c0, 0x267b: 0x00c0, - 0x267c: 0x00c0, 0x267d: 0x00c0, 0x267e: 0x00c0, 0x267f: 0x00c0, - // Block 0x9a, offset 0x2680 - 0x2680: 0x00c0, 0x2681: 0x00c0, 0x2682: 0x00c0, 0x2683: 0x00c0, 0x2684: 0x00c0, 0x2685: 0x00c0, - 0x2686: 0x00c0, 0x2687: 0x00c0, 0x2688: 0x00c0, 0x2689: 0x00c0, 0x268a: 0x00c0, 0x268b: 0x00c0, - 0x268c: 0x00c0, 0x268d: 0x00c0, 0x268e: 0x00c0, 0x268f: 0x00c0, 0x2690: 0x00c0, 0x2691: 0x00c0, - 0x2692: 0x00c0, 0x2693: 0x00c0, 0x2694: 0x00c0, 0x2695: 0x00c0, 0x2696: 0x00c0, 0x2697: 0x00c0, - 0x2698: 0x00c0, 0x2699: 0x00c0, 0x269a: 0x00c0, 0x269b: 0x00c0, 0x269c: 0x00c0, 0x269d: 0x00c0, - 0x269e: 0x00c0, 0x269f: 0x00c0, 0x26a0: 0x00c0, 0x26a1: 0x00c0, 0x26a2: 0x00c0, 0x26a3: 0x00c0, - 0x26a4: 0x00c0, 0x26a5: 0x00c0, 0x26a6: 0x0080, 0x26a7: 0x0080, 0x26a8: 0x0080, 0x26a9: 0x0080, - 0x26aa: 0x0080, 0x26ab: 0x0080, 0x26ac: 0x0080, 0x26ad: 0x0080, 0x26ae: 0x0080, 0x26af: 0x0080, - 0x26b0: 0x00c3, 0x26b1: 0x00c3, 0x26b2: 0x0080, 0x26b3: 0x0080, 0x26b4: 0x0080, 0x26b5: 0x0080, - 0x26b6: 0x0080, 0x26b7: 0x0080, - // Block 0x9b, offset 0x26c0 - 0x26c0: 0x0080, 0x26c1: 0x0080, 0x26c2: 0x0080, 0x26c3: 0x0080, 0x26c4: 0x0080, 0x26c5: 0x0080, - 0x26c6: 0x0080, 0x26c7: 0x0080, 0x26c8: 0x0080, 0x26c9: 0x0080, 0x26ca: 0x0080, 0x26cb: 0x0080, - 0x26cc: 0x0080, 0x26cd: 0x0080, 0x26ce: 0x0080, 0x26cf: 0x0080, 0x26d0: 0x0080, 0x26d1: 0x0080, - 0x26d2: 0x0080, 0x26d3: 0x0080, 0x26d4: 0x0080, 0x26d5: 0x0080, 0x26d6: 0x0080, 0x26d7: 0x00c0, - 0x26d8: 0x00c0, 0x26d9: 0x00c0, 0x26da: 0x00c0, 0x26db: 0x00c0, 0x26dc: 0x00c0, 0x26dd: 0x00c0, - 0x26de: 0x00c0, 0x26df: 0x00c0, 0x26e0: 0x0080, 0x26e1: 0x0080, 0x26e2: 0x00c0, 0x26e3: 0x00c0, - 0x26e4: 0x00c0, 0x26e5: 0x00c0, 0x26e6: 0x00c0, 0x26e7: 0x00c0, 0x26e8: 0x00c0, 0x26e9: 0x00c0, - 0x26ea: 0x00c0, 0x26eb: 0x00c0, 0x26ec: 0x00c0, 0x26ed: 0x00c0, 0x26ee: 0x00c0, 0x26ef: 0x00c0, - 0x26f0: 0x00c0, 0x26f1: 0x00c0, 0x26f2: 0x00c0, 0x26f3: 0x00c0, 0x26f4: 0x00c0, 0x26f5: 0x00c0, - 0x26f6: 0x00c0, 0x26f7: 0x00c0, 0x26f8: 0x00c0, 0x26f9: 0x00c0, 0x26fa: 0x00c0, 0x26fb: 0x00c0, - 0x26fc: 0x00c0, 0x26fd: 0x00c0, 0x26fe: 0x00c0, 0x26ff: 0x00c0, - // Block 0x9c, offset 0x2700 - 0x2700: 0x00c0, 0x2701: 0x00c0, 0x2702: 0x00c0, 0x2703: 0x00c0, 0x2704: 0x00c0, 0x2705: 0x00c0, - 0x2706: 0x00c0, 0x2707: 0x00c0, 0x2708: 0x00c0, 0x2709: 0x00c0, 0x270a: 0x00c0, 0x270b: 0x00c0, - 0x270c: 0x00c0, 0x270d: 0x00c0, 0x270e: 0x00c0, 0x270f: 0x00c0, 0x2710: 0x00c0, 0x2711: 0x00c0, - 0x2712: 0x00c0, 0x2713: 0x00c0, 0x2714: 0x00c0, 0x2715: 0x00c0, 0x2716: 0x00c0, 0x2717: 0x00c0, - 0x2718: 0x00c0, 0x2719: 0x00c0, 0x271a: 0x00c0, 0x271b: 0x00c0, 0x271c: 0x00c0, 0x271d: 0x00c0, - 0x271e: 0x00c0, 0x271f: 0x00c0, 0x2720: 0x00c0, 0x2721: 0x00c0, 0x2722: 0x00c0, 0x2723: 0x00c0, - 0x2724: 0x00c0, 0x2725: 0x00c0, 0x2726: 0x00c0, 0x2727: 0x00c0, 0x2728: 0x00c0, 0x2729: 0x00c0, - 0x272a: 0x00c0, 0x272b: 0x00c0, 0x272c: 0x00c0, 0x272d: 0x00c0, 0x272e: 0x00c0, 0x272f: 0x00c0, - 0x2730: 0x0080, 0x2731: 0x00c0, 0x2732: 0x00c0, 0x2733: 0x00c0, 0x2734: 0x00c0, 0x2735: 0x00c0, - 0x2736: 0x00c0, 0x2737: 0x00c0, 0x2738: 0x00c0, 0x2739: 0x00c0, 0x273a: 0x00c0, 0x273b: 0x00c0, - 0x273c: 0x00c0, 0x273d: 0x00c0, 0x273e: 0x00c0, 0x273f: 0x00c0, - // Block 0x9d, offset 0x2740 - 0x2740: 0x00c0, 0x2741: 0x00c0, 0x2742: 0x00c0, 0x2743: 0x00c0, 0x2744: 0x00c0, 0x2745: 0x00c0, - 0x2746: 0x00c0, 0x2747: 0x00c0, 0x2748: 0x00c0, 0x2749: 0x0080, 0x274a: 0x0080, 0x274b: 0x00c0, - 0x274c: 0x00c0, 0x274d: 0x00c0, 0x274e: 0x00c0, 0x274f: 0x00c0, 0x2750: 0x00c0, 0x2751: 0x00c0, - 0x2752: 0x00c0, 0x2753: 0x00c0, 0x2754: 0x00c0, 0x2755: 0x00c0, 0x2756: 0x00c0, 0x2757: 0x00c0, - 0x2758: 0x00c0, 0x2759: 0x00c0, 0x275a: 0x00c0, 0x275b: 0x00c0, 0x275c: 0x00c0, 0x275d: 0x00c0, - 0x275e: 0x00c0, 0x275f: 0x00c0, 0x2760: 0x00c0, 0x2761: 0x00c0, 0x2762: 0x00c0, 0x2763: 0x00c0, - 0x2764: 0x00c0, 0x2765: 0x00c0, 0x2766: 0x00c0, 0x2767: 0x00c0, 0x2768: 0x00c0, 0x2769: 0x00c0, - 0x276a: 0x00c0, 0x276b: 0x00c0, 0x276c: 0x00c0, 0x276d: 0x00c0, 0x276e: 0x00c0, - 0x2770: 0x00c0, 0x2771: 0x00c0, 0x2772: 0x00c0, 0x2773: 0x00c0, 0x2774: 0x00c0, 0x2775: 0x00c0, - 0x2776: 0x00c0, 0x2777: 0x00c0, - // Block 0x9e, offset 0x2780 - 0x27b7: 0x00c0, 0x27b8: 0x0080, 0x27b9: 0x0080, 0x27ba: 0x00c0, 0x27bb: 0x00c0, - 0x27bc: 0x00c0, 0x27bd: 0x00c0, 0x27be: 0x00c0, 0x27bf: 0x00c0, - // Block 0x9f, offset 0x27c0 - 0x27c0: 0x00c0, 0x27c1: 0x00c0, 0x27c2: 0x00c3, 0x27c3: 0x00c0, 0x27c4: 0x00c0, 0x27c5: 0x00c0, - 0x27c6: 0x00c6, 0x27c7: 0x00c0, 0x27c8: 0x00c0, 0x27c9: 0x00c0, 0x27ca: 0x00c0, 0x27cb: 0x00c3, - 0x27cc: 0x00c0, 0x27cd: 0x00c0, 0x27ce: 0x00c0, 0x27cf: 0x00c0, 0x27d0: 0x00c0, 0x27d1: 0x00c0, - 0x27d2: 0x00c0, 0x27d3: 0x00c0, 0x27d4: 0x00c0, 0x27d5: 0x00c0, 0x27d6: 0x00c0, 0x27d7: 0x00c0, - 0x27d8: 0x00c0, 0x27d9: 0x00c0, 0x27da: 0x00c0, 0x27db: 0x00c0, 0x27dc: 0x00c0, 0x27dd: 0x00c0, - 0x27de: 0x00c0, 0x27df: 0x00c0, 0x27e0: 0x00c0, 0x27e1: 0x00c0, 0x27e2: 0x00c0, 0x27e3: 0x00c0, - 0x27e4: 0x00c0, 0x27e5: 0x00c3, 0x27e6: 0x00c3, 0x27e7: 0x00c0, 0x27e8: 0x0080, 0x27e9: 0x0080, - 0x27ea: 0x0080, 0x27eb: 0x0080, - 0x27f0: 0x0080, 0x27f1: 0x0080, 0x27f2: 0x0080, 0x27f3: 0x0080, 0x27f4: 0x0080, 0x27f5: 0x0080, - 0x27f6: 0x0080, 0x27f7: 0x0080, 0x27f8: 0x0080, 0x27f9: 0x0080, - // Block 0xa0, offset 0x2800 - 0x2800: 0x00c2, 0x2801: 0x00c2, 0x2802: 0x00c2, 0x2803: 0x00c2, 0x2804: 0x00c2, 0x2805: 0x00c2, - 0x2806: 0x00c2, 0x2807: 0x00c2, 0x2808: 0x00c2, 0x2809: 0x00c2, 0x280a: 0x00c2, 0x280b: 0x00c2, - 0x280c: 0x00c2, 0x280d: 0x00c2, 0x280e: 0x00c2, 0x280f: 0x00c2, 0x2810: 0x00c2, 0x2811: 0x00c2, - 0x2812: 0x00c2, 0x2813: 0x00c2, 0x2814: 0x00c2, 0x2815: 0x00c2, 0x2816: 0x00c2, 0x2817: 0x00c2, - 0x2818: 0x00c2, 0x2819: 0x00c2, 0x281a: 0x00c2, 0x281b: 0x00c2, 0x281c: 0x00c2, 0x281d: 0x00c2, - 0x281e: 0x00c2, 0x281f: 0x00c2, 0x2820: 0x00c2, 0x2821: 0x00c2, 0x2822: 0x00c2, 0x2823: 0x00c2, - 0x2824: 0x00c2, 0x2825: 0x00c2, 0x2826: 0x00c2, 0x2827: 0x00c2, 0x2828: 0x00c2, 0x2829: 0x00c2, - 0x282a: 0x00c2, 0x282b: 0x00c2, 0x282c: 0x00c2, 0x282d: 0x00c2, 0x282e: 0x00c2, 0x282f: 0x00c2, - 0x2830: 0x00c2, 0x2831: 0x00c2, 0x2832: 0x00c1, 0x2833: 0x00c0, 0x2834: 0x0080, 0x2835: 0x0080, - 0x2836: 0x0080, 0x2837: 0x0080, - // Block 0xa1, offset 0x2840 - 0x2840: 0x00c0, 0x2841: 0x00c0, 0x2842: 0x00c0, 0x2843: 0x00c0, 0x2844: 0x00c6, 0x2845: 0x00c3, - 0x284e: 0x0080, 0x284f: 0x0080, 0x2850: 0x00c0, 0x2851: 0x00c0, - 0x2852: 0x00c0, 0x2853: 0x00c0, 0x2854: 0x00c0, 0x2855: 0x00c0, 0x2856: 0x00c0, 0x2857: 0x00c0, - 0x2858: 0x00c0, 0x2859: 0x00c0, - 0x2860: 0x00c3, 0x2861: 0x00c3, 0x2862: 0x00c3, 0x2863: 0x00c3, - 0x2864: 0x00c3, 0x2865: 0x00c3, 0x2866: 0x00c3, 0x2867: 0x00c3, 0x2868: 0x00c3, 0x2869: 0x00c3, - 0x286a: 0x00c3, 0x286b: 0x00c3, 0x286c: 0x00c3, 0x286d: 0x00c3, 0x286e: 0x00c3, 0x286f: 0x00c3, - 0x2870: 0x00c3, 0x2871: 0x00c3, 0x2872: 0x00c0, 0x2873: 0x00c0, 0x2874: 0x00c0, 0x2875: 0x00c0, - 0x2876: 0x00c0, 0x2877: 0x00c0, 0x2878: 0x0080, 0x2879: 0x0080, 0x287a: 0x0080, 0x287b: 0x00c0, - 0x287c: 0x0080, 0x287d: 0x00c0, - // Block 0xa2, offset 0x2880 - 0x2880: 0x00c0, 0x2881: 0x00c0, 0x2882: 0x00c0, 0x2883: 0x00c0, 0x2884: 0x00c0, 0x2885: 0x00c0, - 0x2886: 0x00c0, 0x2887: 0x00c0, 0x2888: 0x00c0, 0x2889: 0x00c0, 0x288a: 0x00c0, 0x288b: 0x00c0, - 0x288c: 0x00c0, 0x288d: 0x00c0, 0x288e: 0x00c0, 0x288f: 0x00c0, 0x2890: 0x00c0, 0x2891: 0x00c0, - 0x2892: 0x00c0, 0x2893: 0x00c0, 0x2894: 0x00c0, 0x2895: 0x00c0, 0x2896: 0x00c0, 0x2897: 0x00c0, - 0x2898: 0x00c0, 0x2899: 0x00c0, 0x289a: 0x00c0, 0x289b: 0x00c0, 0x289c: 0x00c0, 0x289d: 0x00c0, - 0x289e: 0x00c0, 0x289f: 0x00c0, 0x28a0: 0x00c0, 0x28a1: 0x00c0, 0x28a2: 0x00c0, 0x28a3: 0x00c0, - 0x28a4: 0x00c0, 0x28a5: 0x00c0, 0x28a6: 0x00c3, 0x28a7: 0x00c3, 0x28a8: 0x00c3, 0x28a9: 0x00c3, - 0x28aa: 0x00c3, 0x28ab: 0x00c3, 0x28ac: 0x00c3, 0x28ad: 0x00c3, 0x28ae: 0x0080, 0x28af: 0x0080, - 0x28b0: 0x00c0, 0x28b1: 0x00c0, 0x28b2: 0x00c0, 0x28b3: 0x00c0, 0x28b4: 0x00c0, 0x28b5: 0x00c0, - 0x28b6: 0x00c0, 0x28b7: 0x00c0, 0x28b8: 0x00c0, 0x28b9: 0x00c0, 0x28ba: 0x00c0, 0x28bb: 0x00c0, - 0x28bc: 0x00c0, 0x28bd: 0x00c0, 0x28be: 0x00c0, 0x28bf: 0x00c0, - // Block 0xa3, offset 0x28c0 - 0x28c0: 0x00c0, 0x28c1: 0x00c0, 0x28c2: 0x00c0, 0x28c3: 0x00c0, 0x28c4: 0x00c0, 0x28c5: 0x00c0, - 0x28c6: 0x00c0, 0x28c7: 0x00c3, 0x28c8: 0x00c3, 0x28c9: 0x00c3, 0x28ca: 0x00c3, 0x28cb: 0x00c3, - 0x28cc: 0x00c3, 0x28cd: 0x00c3, 0x28ce: 0x00c3, 0x28cf: 0x00c3, 0x28d0: 0x00c3, 0x28d1: 0x00c3, - 0x28d2: 0x00c0, 0x28d3: 0x00c5, - 0x28df: 0x0080, 0x28e0: 0x0040, 0x28e1: 0x0040, 0x28e2: 0x0040, 0x28e3: 0x0040, - 0x28e4: 0x0040, 0x28e5: 0x0040, 0x28e6: 0x0040, 0x28e7: 0x0040, 0x28e8: 0x0040, 0x28e9: 0x0040, - 0x28ea: 0x0040, 0x28eb: 0x0040, 0x28ec: 0x0040, 0x28ed: 0x0040, 0x28ee: 0x0040, 0x28ef: 0x0040, - 0x28f0: 0x0040, 0x28f1: 0x0040, 0x28f2: 0x0040, 0x28f3: 0x0040, 0x28f4: 0x0040, 0x28f5: 0x0040, - 0x28f6: 0x0040, 0x28f7: 0x0040, 0x28f8: 0x0040, 0x28f9: 0x0040, 0x28fa: 0x0040, 0x28fb: 0x0040, - 0x28fc: 0x0040, - // Block 0xa4, offset 0x2900 - 0x2900: 0x00c3, 0x2901: 0x00c3, 0x2902: 0x00c3, 0x2903: 0x00c0, 0x2904: 0x00c0, 0x2905: 0x00c0, - 0x2906: 0x00c0, 0x2907: 0x00c0, 0x2908: 0x00c0, 0x2909: 0x00c0, 0x290a: 0x00c0, 0x290b: 0x00c0, - 0x290c: 0x00c0, 0x290d: 0x00c0, 0x290e: 0x00c0, 0x290f: 0x00c0, 0x2910: 0x00c0, 0x2911: 0x00c0, - 0x2912: 0x00c0, 0x2913: 0x00c0, 0x2914: 0x00c0, 0x2915: 0x00c0, 0x2916: 0x00c0, 0x2917: 0x00c0, - 0x2918: 0x00c0, 0x2919: 0x00c0, 0x291a: 0x00c0, 0x291b: 0x00c0, 0x291c: 0x00c0, 0x291d: 0x00c0, - 0x291e: 0x00c0, 0x291f: 0x00c0, 0x2920: 0x00c0, 0x2921: 0x00c0, 0x2922: 0x00c0, 0x2923: 0x00c0, - 0x2924: 0x00c0, 0x2925: 0x00c0, 0x2926: 0x00c0, 0x2927: 0x00c0, 0x2928: 0x00c0, 0x2929: 0x00c0, - 0x292a: 0x00c0, 0x292b: 0x00c0, 0x292c: 0x00c0, 0x292d: 0x00c0, 0x292e: 0x00c0, 0x292f: 0x00c0, - 0x2930: 0x00c0, 0x2931: 0x00c0, 0x2932: 0x00c0, 0x2933: 0x00c3, 0x2934: 0x00c0, 0x2935: 0x00c0, - 0x2936: 0x00c3, 0x2937: 0x00c3, 0x2938: 0x00c3, 0x2939: 0x00c3, 0x293a: 0x00c0, 0x293b: 0x00c0, - 0x293c: 0x00c3, 0x293d: 0x00c0, 0x293e: 0x00c0, 0x293f: 0x00c0, - // Block 0xa5, offset 0x2940 - 0x2940: 0x00c5, 0x2941: 0x0080, 0x2942: 0x0080, 0x2943: 0x0080, 0x2944: 0x0080, 0x2945: 0x0080, - 0x2946: 0x0080, 0x2947: 0x0080, 0x2948: 0x0080, 0x2949: 0x0080, 0x294a: 0x0080, 0x294b: 0x0080, - 0x294c: 0x0080, 0x294d: 0x0080, 0x294f: 0x00c0, 0x2950: 0x00c0, 0x2951: 0x00c0, - 0x2952: 0x00c0, 0x2953: 0x00c0, 0x2954: 0x00c0, 0x2955: 0x00c0, 0x2956: 0x00c0, 0x2957: 0x00c0, - 0x2958: 0x00c0, 0x2959: 0x00c0, - 0x295e: 0x0080, 0x295f: 0x0080, 0x2960: 0x00c0, 0x2961: 0x00c0, 0x2962: 0x00c0, 0x2963: 0x00c0, - 0x2964: 0x00c0, 0x2965: 0x00c3, 0x2966: 0x00c0, 0x2967: 0x00c0, 0x2968: 0x00c0, 0x2969: 0x00c0, - 0x296a: 0x00c0, 0x296b: 0x00c0, 0x296c: 0x00c0, 0x296d: 0x00c0, 0x296e: 0x00c0, 0x296f: 0x00c0, - 0x2970: 0x00c0, 0x2971: 0x00c0, 0x2972: 0x00c0, 0x2973: 0x00c0, 0x2974: 0x00c0, 0x2975: 0x00c0, - 0x2976: 0x00c0, 0x2977: 0x00c0, 0x2978: 0x00c0, 0x2979: 0x00c0, 0x297a: 0x00c0, 0x297b: 0x00c0, - 0x297c: 0x00c0, 0x297d: 0x00c0, 0x297e: 0x00c0, - // Block 0xa6, offset 0x2980 - 0x2980: 0x00c0, 0x2981: 0x00c0, 0x2982: 0x00c0, 0x2983: 0x00c0, 0x2984: 0x00c0, 0x2985: 0x00c0, - 0x2986: 0x00c0, 0x2987: 0x00c0, 0x2988: 0x00c0, 0x2989: 0x00c0, 0x298a: 0x00c0, 0x298b: 0x00c0, - 0x298c: 0x00c0, 0x298d: 0x00c0, 0x298e: 0x00c0, 0x298f: 0x00c0, 0x2990: 0x00c0, 0x2991: 0x00c0, - 0x2992: 0x00c0, 0x2993: 0x00c0, 0x2994: 0x00c0, 0x2995: 0x00c0, 0x2996: 0x00c0, 0x2997: 0x00c0, - 0x2998: 0x00c0, 0x2999: 0x00c0, 0x299a: 0x00c0, 0x299b: 0x00c0, 0x299c: 0x00c0, 0x299d: 0x00c0, - 0x299e: 0x00c0, 0x299f: 0x00c0, 0x29a0: 0x00c0, 0x29a1: 0x00c0, 0x29a2: 0x00c0, 0x29a3: 0x00c0, - 0x29a4: 0x00c0, 0x29a5: 0x00c0, 0x29a6: 0x00c0, 0x29a7: 0x00c0, 0x29a8: 0x00c0, 0x29a9: 0x00c3, - 0x29aa: 0x00c3, 0x29ab: 0x00c3, 0x29ac: 0x00c3, 0x29ad: 0x00c3, 0x29ae: 0x00c3, 0x29af: 0x00c0, - 0x29b0: 0x00c0, 0x29b1: 0x00c3, 0x29b2: 0x00c3, 0x29b3: 0x00c0, 0x29b4: 0x00c0, 0x29b5: 0x00c3, - 0x29b6: 0x00c3, - // Block 0xa7, offset 0x29c0 - 0x29c0: 0x00c0, 0x29c1: 0x00c0, 0x29c2: 0x00c0, 0x29c3: 0x00c3, 0x29c4: 0x00c0, 0x29c5: 0x00c0, - 0x29c6: 0x00c0, 0x29c7: 0x00c0, 0x29c8: 0x00c0, 0x29c9: 0x00c0, 0x29ca: 0x00c0, 0x29cb: 0x00c0, - 0x29cc: 0x00c3, 0x29cd: 0x00c0, 0x29d0: 0x00c0, 0x29d1: 0x00c0, - 0x29d2: 0x00c0, 0x29d3: 0x00c0, 0x29d4: 0x00c0, 0x29d5: 0x00c0, 0x29d6: 0x00c0, 0x29d7: 0x00c0, - 0x29d8: 0x00c0, 0x29d9: 0x00c0, 0x29dc: 0x0080, 0x29dd: 0x0080, - 0x29de: 0x0080, 0x29df: 0x0080, 0x29e0: 0x00c0, 0x29e1: 0x00c0, 0x29e2: 0x00c0, 0x29e3: 0x00c0, - 0x29e4: 0x00c0, 0x29e5: 0x00c0, 0x29e6: 0x00c0, 0x29e7: 0x00c0, 0x29e8: 0x00c0, 0x29e9: 0x00c0, - 0x29ea: 0x00c0, 0x29eb: 0x00c0, 0x29ec: 0x00c0, 0x29ed: 0x00c0, 0x29ee: 0x00c0, 0x29ef: 0x00c0, - 0x29f0: 0x00c0, 0x29f1: 0x00c0, 0x29f2: 0x00c0, 0x29f3: 0x00c0, 0x29f4: 0x00c0, 0x29f5: 0x00c0, - 0x29f6: 0x00c0, 0x29f7: 0x0080, 0x29f8: 0x0080, 0x29f9: 0x0080, 0x29fa: 0x00c0, 0x29fb: 0x00c0, - 0x29fc: 0x00c3, 0x29fd: 0x00c0, 0x29fe: 0x00c0, 0x29ff: 0x00c0, - // Block 0xa8, offset 0x2a00 - 0x2a00: 0x00c0, 0x2a01: 0x00c0, 0x2a02: 0x00c0, 0x2a03: 0x00c0, 0x2a04: 0x00c0, 0x2a05: 0x00c0, - 0x2a06: 0x00c0, 0x2a07: 0x00c0, 0x2a08: 0x00c0, 0x2a09: 0x00c0, 0x2a0a: 0x00c0, 0x2a0b: 0x00c0, - 0x2a0c: 0x00c0, 0x2a0d: 0x00c0, 0x2a0e: 0x00c0, 0x2a0f: 0x00c0, 0x2a10: 0x00c0, 0x2a11: 0x00c0, - 0x2a12: 0x00c0, 0x2a13: 0x00c0, 0x2a14: 0x00c0, 0x2a15: 0x00c0, 0x2a16: 0x00c0, 0x2a17: 0x00c0, - 0x2a18: 0x00c0, 0x2a19: 0x00c0, 0x2a1a: 0x00c0, 0x2a1b: 0x00c0, 0x2a1c: 0x00c0, 0x2a1d: 0x00c0, - 0x2a1e: 0x00c0, 0x2a1f: 0x00c0, 0x2a20: 0x00c0, 0x2a21: 0x00c0, 0x2a22: 0x00c0, 0x2a23: 0x00c0, - 0x2a24: 0x00c0, 0x2a25: 0x00c0, 0x2a26: 0x00c0, 0x2a27: 0x00c0, 0x2a28: 0x00c0, 0x2a29: 0x00c0, - 0x2a2a: 0x00c0, 0x2a2b: 0x00c0, 0x2a2c: 0x00c0, 0x2a2d: 0x00c0, 0x2a2e: 0x00c0, 0x2a2f: 0x00c0, - 0x2a30: 0x00c3, 0x2a31: 0x00c0, 0x2a32: 0x00c3, 0x2a33: 0x00c3, 0x2a34: 0x00c3, 0x2a35: 0x00c0, - 0x2a36: 0x00c0, 0x2a37: 0x00c3, 0x2a38: 0x00c3, 0x2a39: 0x00c0, 0x2a3a: 0x00c0, 0x2a3b: 0x00c0, - 0x2a3c: 0x00c0, 0x2a3d: 0x00c0, 0x2a3e: 0x00c3, 0x2a3f: 0x00c3, - // Block 0xa9, offset 0x2a40 - 0x2a40: 0x00c0, 0x2a41: 0x00c3, 0x2a42: 0x00c0, - 0x2a5b: 0x00c0, 0x2a5c: 0x00c0, 0x2a5d: 0x00c0, - 0x2a5e: 0x0080, 0x2a5f: 0x0080, 0x2a60: 0x00c0, 0x2a61: 0x00c0, 0x2a62: 0x00c0, 0x2a63: 0x00c0, - 0x2a64: 0x00c0, 0x2a65: 0x00c0, 0x2a66: 0x00c0, 0x2a67: 0x00c0, 0x2a68: 0x00c0, 0x2a69: 0x00c0, - 0x2a6a: 0x00c0, 0x2a6b: 0x00c0, 0x2a6c: 0x00c3, 0x2a6d: 0x00c3, 0x2a6e: 0x00c0, 0x2a6f: 0x00c0, - 0x2a70: 0x0080, 0x2a71: 0x0080, 0x2a72: 0x00c0, 0x2a73: 0x00c0, 0x2a74: 0x00c0, 0x2a75: 0x00c0, - 0x2a76: 0x00c6, - // Block 0xaa, offset 0x2a80 - 0x2a81: 0x00c0, 0x2a82: 0x00c0, 0x2a83: 0x00c0, 0x2a84: 0x00c0, 0x2a85: 0x00c0, - 0x2a86: 0x00c0, 0x2a89: 0x00c0, 0x2a8a: 0x00c0, 0x2a8b: 0x00c0, - 0x2a8c: 0x00c0, 0x2a8d: 0x00c0, 0x2a8e: 0x00c0, 0x2a91: 0x00c0, - 0x2a92: 0x00c0, 0x2a93: 0x00c0, 0x2a94: 0x00c0, 0x2a95: 0x00c0, 0x2a96: 0x00c0, - 0x2aa0: 0x00c0, 0x2aa1: 0x00c0, 0x2aa2: 0x00c0, 0x2aa3: 0x00c0, - 0x2aa4: 0x00c0, 0x2aa5: 0x00c0, 0x2aa6: 0x00c0, 0x2aa8: 0x00c0, 0x2aa9: 0x00c0, - 0x2aaa: 0x00c0, 0x2aab: 0x00c0, 0x2aac: 0x00c0, 0x2aad: 0x00c0, 0x2aae: 0x00c0, - 0x2ab0: 0x00c0, 0x2ab1: 0x00c0, 0x2ab2: 0x00c0, 0x2ab3: 0x00c0, 0x2ab4: 0x00c0, 0x2ab5: 0x00c0, - 0x2ab6: 0x00c0, 0x2ab7: 0x00c0, 0x2ab8: 0x00c0, 0x2ab9: 0x00c0, 0x2aba: 0x00c0, 0x2abb: 0x00c0, - 0x2abc: 0x00c0, 0x2abd: 0x00c0, 0x2abe: 0x00c0, 0x2abf: 0x00c0, - // Block 0xab, offset 0x2ac0 - 0x2ac0: 0x00c0, 0x2ac1: 0x00c0, 0x2ac2: 0x00c0, 0x2ac3: 0x00c0, 0x2ac4: 0x00c0, 0x2ac5: 0x00c0, - 0x2ac6: 0x00c0, 0x2ac7: 0x00c0, 0x2ac8: 0x00c0, 0x2ac9: 0x00c0, 0x2aca: 0x00c0, 0x2acb: 0x00c0, - 0x2acc: 0x00c0, 0x2acd: 0x00c0, 0x2ace: 0x00c0, 0x2acf: 0x00c0, 0x2ad0: 0x00c0, 0x2ad1: 0x00c0, - 0x2ad2: 0x00c0, 0x2ad3: 0x00c0, 0x2ad4: 0x00c0, 0x2ad5: 0x00c0, 0x2ad6: 0x00c0, 0x2ad7: 0x00c0, - 0x2ad8: 0x00c0, 0x2ad9: 0x00c0, 0x2ada: 0x00c0, 0x2adb: 0x0080, 0x2adc: 0x0080, 0x2add: 0x0080, - 0x2ade: 0x0080, 0x2adf: 0x0080, 0x2ae0: 0x00c0, 0x2ae1: 0x00c0, 0x2ae2: 0x00c0, 0x2ae3: 0x00c0, - 0x2ae4: 0x00c0, 0x2ae5: 0x00c8, - 0x2af0: 0x00c0, 0x2af1: 0x00c0, 0x2af2: 0x00c0, 0x2af3: 0x00c0, 0x2af4: 0x00c0, 0x2af5: 0x00c0, - 0x2af6: 0x00c0, 0x2af7: 0x00c0, 0x2af8: 0x00c0, 0x2af9: 0x00c0, 0x2afa: 0x00c0, 0x2afb: 0x00c0, - 0x2afc: 0x00c0, 0x2afd: 0x00c0, 0x2afe: 0x00c0, 0x2aff: 0x00c0, - // Block 0xac, offset 0x2b00 - 0x2b00: 0x00c0, 0x2b01: 0x00c0, 0x2b02: 0x00c0, 0x2b03: 0x00c0, 0x2b04: 0x00c0, 0x2b05: 0x00c0, - 0x2b06: 0x00c0, 0x2b07: 0x00c0, 0x2b08: 0x00c0, 0x2b09: 0x00c0, 0x2b0a: 0x00c0, 0x2b0b: 0x00c0, - 0x2b0c: 0x00c0, 0x2b0d: 0x00c0, 0x2b0e: 0x00c0, 0x2b0f: 0x00c0, 0x2b10: 0x00c0, 0x2b11: 0x00c0, - 0x2b12: 0x00c0, 0x2b13: 0x00c0, 0x2b14: 0x00c0, 0x2b15: 0x00c0, 0x2b16: 0x00c0, 0x2b17: 0x00c0, - 0x2b18: 0x00c0, 0x2b19: 0x00c0, 0x2b1a: 0x00c0, 0x2b1b: 0x00c0, 0x2b1c: 0x00c0, 0x2b1d: 0x00c0, - 0x2b1e: 0x00c0, 0x2b1f: 0x00c0, 0x2b20: 0x00c0, 0x2b21: 0x00c0, 0x2b22: 0x00c0, 0x2b23: 0x00c0, - 0x2b24: 0x00c0, 0x2b25: 0x00c3, 0x2b26: 0x00c0, 0x2b27: 0x00c0, 0x2b28: 0x00c3, 0x2b29: 0x00c0, - 0x2b2a: 0x00c0, 0x2b2b: 0x0080, 0x2b2c: 0x00c0, 0x2b2d: 0x00c6, - 0x2b30: 0x00c0, 0x2b31: 0x00c0, 0x2b32: 0x00c0, 0x2b33: 0x00c0, 0x2b34: 0x00c0, 0x2b35: 0x00c0, - 0x2b36: 0x00c0, 0x2b37: 0x00c0, 0x2b38: 0x00c0, 0x2b39: 0x00c0, - // Block 0xad, offset 0x2b40 - 0x2b40: 0x00c0, 0x2b41: 0x00c0, 0x2b42: 0x00c0, 0x2b43: 0x00c0, 0x2b44: 0x00c0, 0x2b45: 0x00c0, - 0x2b46: 0x00c0, 0x2b47: 0x00c0, 0x2b48: 0x00c0, 0x2b49: 0x00c0, 0x2b4a: 0x00c0, 0x2b4b: 0x00c0, - 0x2b4c: 0x00c0, 0x2b4d: 0x00c0, 0x2b4e: 0x00c0, 0x2b4f: 0x00c0, 0x2b50: 0x00c0, 0x2b51: 0x00c0, - 0x2b52: 0x00c0, 0x2b53: 0x00c0, 0x2b54: 0x00c0, 0x2b55: 0x00c0, 0x2b56: 0x00c0, 0x2b57: 0x00c0, - 0x2b58: 0x00c0, 0x2b59: 0x00c0, 0x2b5a: 0x00c0, 0x2b5b: 0x00c0, 0x2b5c: 0x00c0, 0x2b5d: 0x00c0, - 0x2b5e: 0x00c0, 0x2b5f: 0x00c0, 0x2b60: 0x00c0, 0x2b61: 0x00c0, 0x2b62: 0x00c0, 0x2b63: 0x00c0, - 0x2b70: 0x0040, 0x2b71: 0x0040, 0x2b72: 0x0040, 0x2b73: 0x0040, 0x2b74: 0x0040, 0x2b75: 0x0040, - 0x2b76: 0x0040, 0x2b77: 0x0040, 0x2b78: 0x0040, 0x2b79: 0x0040, 0x2b7a: 0x0040, 0x2b7b: 0x0040, - 0x2b7c: 0x0040, 0x2b7d: 0x0040, 0x2b7e: 0x0040, 0x2b7f: 0x0040, - // Block 0xae, offset 0x2b80 - 0x2b80: 0x0040, 0x2b81: 0x0040, 0x2b82: 0x0040, 0x2b83: 0x0040, 0x2b84: 0x0040, 0x2b85: 0x0040, - 0x2b86: 0x0040, 0x2b8b: 0x0040, - 0x2b8c: 0x0040, 0x2b8d: 0x0040, 0x2b8e: 0x0040, 0x2b8f: 0x0040, 0x2b90: 0x0040, 0x2b91: 0x0040, - 0x2b92: 0x0040, 0x2b93: 0x0040, 0x2b94: 0x0040, 0x2b95: 0x0040, 0x2b96: 0x0040, 0x2b97: 0x0040, - 0x2b98: 0x0040, 0x2b99: 0x0040, 0x2b9a: 0x0040, 0x2b9b: 0x0040, 0x2b9c: 0x0040, 0x2b9d: 0x0040, - 0x2b9e: 0x0040, 0x2b9f: 0x0040, 0x2ba0: 0x0040, 0x2ba1: 0x0040, 0x2ba2: 0x0040, 0x2ba3: 0x0040, - 0x2ba4: 0x0040, 0x2ba5: 0x0040, 0x2ba6: 0x0040, 0x2ba7: 0x0040, 0x2ba8: 0x0040, 0x2ba9: 0x0040, - 0x2baa: 0x0040, 0x2bab: 0x0040, 0x2bac: 0x0040, 0x2bad: 0x0040, 0x2bae: 0x0040, 0x2baf: 0x0040, - 0x2bb0: 0x0040, 0x2bb1: 0x0040, 0x2bb2: 0x0040, 0x2bb3: 0x0040, 0x2bb4: 0x0040, 0x2bb5: 0x0040, - 0x2bb6: 0x0040, 0x2bb7: 0x0040, 0x2bb8: 0x0040, 0x2bb9: 0x0040, 0x2bba: 0x0040, 0x2bbb: 0x0040, - // Block 0xaf, offset 0x2bc0 - 0x2bc0: 0x008c, 0x2bc1: 0x008c, 0x2bc2: 0x008c, 0x2bc3: 0x008c, 0x2bc4: 0x008c, 0x2bc5: 0x008c, - 0x2bc6: 0x008c, 0x2bc7: 0x008c, 0x2bc8: 0x008c, 0x2bc9: 0x008c, 0x2bca: 0x008c, 0x2bcb: 0x008c, - 0x2bcc: 0x008c, 0x2bcd: 0x008c, 0x2bce: 0x00cc, 0x2bcf: 0x00cc, 0x2bd0: 0x008c, 0x2bd1: 0x00cc, - 0x2bd2: 0x008c, 0x2bd3: 0x00cc, 0x2bd4: 0x00cc, 0x2bd5: 0x008c, 0x2bd6: 0x008c, 0x2bd7: 0x008c, - 0x2bd8: 0x008c, 0x2bd9: 0x008c, 0x2bda: 0x008c, 0x2bdb: 0x008c, 0x2bdc: 0x008c, 0x2bdd: 0x008c, - 0x2bde: 0x008c, 0x2bdf: 0x00cc, 0x2be0: 0x008c, 0x2be1: 0x00cc, 0x2be2: 0x008c, 0x2be3: 0x00cc, - 0x2be4: 0x00cc, 0x2be5: 0x008c, 0x2be6: 0x008c, 0x2be7: 0x00cc, 0x2be8: 0x00cc, 0x2be9: 0x00cc, - 0x2bea: 0x008c, 0x2beb: 0x008c, 0x2bec: 0x008c, 0x2bed: 0x008c, 0x2bee: 0x008c, 0x2bef: 0x008c, - 0x2bf0: 0x008c, 0x2bf1: 0x008c, 0x2bf2: 0x008c, 0x2bf3: 0x008c, 0x2bf4: 0x008c, 0x2bf5: 0x008c, - 0x2bf6: 0x008c, 0x2bf7: 0x008c, 0x2bf8: 0x008c, 0x2bf9: 0x008c, 0x2bfa: 0x008c, 0x2bfb: 0x008c, - 0x2bfc: 0x008c, 0x2bfd: 0x008c, 0x2bfe: 0x008c, 0x2bff: 0x008c, - // Block 0xb0, offset 0x2c00 - 0x2c00: 0x008c, 0x2c01: 0x008c, 0x2c02: 0x008c, 0x2c03: 0x008c, 0x2c04: 0x008c, 0x2c05: 0x008c, - 0x2c06: 0x008c, 0x2c07: 0x008c, 0x2c08: 0x008c, 0x2c09: 0x008c, 0x2c0a: 0x008c, 0x2c0b: 0x008c, - 0x2c0c: 0x008c, 0x2c0d: 0x008c, 0x2c0e: 0x008c, 0x2c0f: 0x008c, 0x2c10: 0x008c, 0x2c11: 0x008c, - 0x2c12: 0x008c, 0x2c13: 0x008c, 0x2c14: 0x008c, 0x2c15: 0x008c, 0x2c16: 0x008c, 0x2c17: 0x008c, - 0x2c18: 0x008c, 0x2c19: 0x008c, 0x2c1a: 0x008c, 0x2c1b: 0x008c, 0x2c1c: 0x008c, 0x2c1d: 0x008c, - 0x2c1e: 0x008c, 0x2c1f: 0x008c, 0x2c20: 0x008c, 0x2c21: 0x008c, 0x2c22: 0x008c, 0x2c23: 0x008c, - 0x2c24: 0x008c, 0x2c25: 0x008c, 0x2c26: 0x008c, 0x2c27: 0x008c, 0x2c28: 0x008c, 0x2c29: 0x008c, - 0x2c2a: 0x008c, 0x2c2b: 0x008c, 0x2c2c: 0x008c, 0x2c2d: 0x008c, - 0x2c30: 0x008c, 0x2c31: 0x008c, 0x2c32: 0x008c, 0x2c33: 0x008c, 0x2c34: 0x008c, 0x2c35: 0x008c, - 0x2c36: 0x008c, 0x2c37: 0x008c, 0x2c38: 0x008c, 0x2c39: 0x008c, 0x2c3a: 0x008c, 0x2c3b: 0x008c, - 0x2c3c: 0x008c, 0x2c3d: 0x008c, 0x2c3e: 0x008c, 0x2c3f: 0x008c, - // Block 0xb1, offset 0x2c40 - 0x2c40: 0x008c, 0x2c41: 0x008c, 0x2c42: 0x008c, 0x2c43: 0x008c, 0x2c44: 0x008c, 0x2c45: 0x008c, - 0x2c46: 0x008c, 0x2c47: 0x008c, 0x2c48: 0x008c, 0x2c49: 0x008c, 0x2c4a: 0x008c, 0x2c4b: 0x008c, - 0x2c4c: 0x008c, 0x2c4d: 0x008c, 0x2c4e: 0x008c, 0x2c4f: 0x008c, 0x2c50: 0x008c, 0x2c51: 0x008c, - 0x2c52: 0x008c, 0x2c53: 0x008c, 0x2c54: 0x008c, 0x2c55: 0x008c, 0x2c56: 0x008c, 0x2c57: 0x008c, - 0x2c58: 0x008c, 0x2c59: 0x008c, - // Block 0xb2, offset 0x2c80 - 0x2c80: 0x0080, 0x2c81: 0x0080, 0x2c82: 0x0080, 0x2c83: 0x0080, 0x2c84: 0x0080, 0x2c85: 0x0080, - 0x2c86: 0x0080, - 0x2c93: 0x0080, 0x2c94: 0x0080, 0x2c95: 0x0080, 0x2c96: 0x0080, 0x2c97: 0x0080, - 0x2c9d: 0x008a, - 0x2c9e: 0x00cb, 0x2c9f: 0x008a, 0x2ca0: 0x008a, 0x2ca1: 0x008a, 0x2ca2: 0x008a, 0x2ca3: 0x008a, - 0x2ca4: 0x008a, 0x2ca5: 0x008a, 0x2ca6: 0x008a, 0x2ca7: 0x008a, 0x2ca8: 0x008a, 0x2ca9: 0x008a, - 0x2caa: 0x008a, 0x2cab: 0x008a, 0x2cac: 0x008a, 0x2cad: 0x008a, 0x2cae: 0x008a, 0x2caf: 0x008a, - 0x2cb0: 0x008a, 0x2cb1: 0x008a, 0x2cb2: 0x008a, 0x2cb3: 0x008a, 0x2cb4: 0x008a, 0x2cb5: 0x008a, - 0x2cb6: 0x008a, 0x2cb8: 0x008a, 0x2cb9: 0x008a, 0x2cba: 0x008a, 0x2cbb: 0x008a, - 0x2cbc: 0x008a, 0x2cbe: 0x008a, - // Block 0xb3, offset 0x2cc0 - 0x2cc0: 0x008a, 0x2cc1: 0x008a, 0x2cc3: 0x008a, 0x2cc4: 0x008a, - 0x2cc6: 0x008a, 0x2cc7: 0x008a, 0x2cc8: 0x008a, 0x2cc9: 0x008a, 0x2cca: 0x008a, 0x2ccb: 0x008a, - 0x2ccc: 0x008a, 0x2ccd: 0x008a, 0x2cce: 0x008a, 0x2ccf: 0x008a, 0x2cd0: 0x0080, 0x2cd1: 0x0080, - 0x2cd2: 0x0080, 0x2cd3: 0x0080, 0x2cd4: 0x0080, 0x2cd5: 0x0080, 0x2cd6: 0x0080, 0x2cd7: 0x0080, - 0x2cd8: 0x0080, 0x2cd9: 0x0080, 0x2cda: 0x0080, 0x2cdb: 0x0080, 0x2cdc: 0x0080, 0x2cdd: 0x0080, - 0x2cde: 0x0080, 0x2cdf: 0x0080, 0x2ce0: 0x0080, 0x2ce1: 0x0080, 0x2ce2: 0x0080, 0x2ce3: 0x0080, - 0x2ce4: 0x0080, 0x2ce5: 0x0080, 0x2ce6: 0x0080, 0x2ce7: 0x0080, 0x2ce8: 0x0080, 0x2ce9: 0x0080, - 0x2cea: 0x0080, 0x2ceb: 0x0080, 0x2cec: 0x0080, 0x2ced: 0x0080, 0x2cee: 0x0080, 0x2cef: 0x0080, - 0x2cf0: 0x0080, 0x2cf1: 0x0080, 0x2cf2: 0x0080, 0x2cf3: 0x0080, 0x2cf4: 0x0080, 0x2cf5: 0x0080, - 0x2cf6: 0x0080, 0x2cf7: 0x0080, 0x2cf8: 0x0080, 0x2cf9: 0x0080, 0x2cfa: 0x0080, 0x2cfb: 0x0080, - 0x2cfc: 0x0080, 0x2cfd: 0x0080, 0x2cfe: 0x0080, 0x2cff: 0x0080, - // Block 0xb4, offset 0x2d00 - 0x2d00: 0x0080, 0x2d01: 0x0080, - 0x2d13: 0x0080, 0x2d14: 0x0080, 0x2d15: 0x0080, 0x2d16: 0x0080, 0x2d17: 0x0080, - 0x2d18: 0x0080, 0x2d19: 0x0080, 0x2d1a: 0x0080, 0x2d1b: 0x0080, 0x2d1c: 0x0080, 0x2d1d: 0x0080, - 0x2d1e: 0x0080, 0x2d1f: 0x0080, 0x2d20: 0x0080, 0x2d21: 0x0080, 0x2d22: 0x0080, 0x2d23: 0x0080, - 0x2d24: 0x0080, 0x2d25: 0x0080, 0x2d26: 0x0080, 0x2d27: 0x0080, 0x2d28: 0x0080, 0x2d29: 0x0080, - 0x2d2a: 0x0080, 0x2d2b: 0x0080, 0x2d2c: 0x0080, 0x2d2d: 0x0080, 0x2d2e: 0x0080, 0x2d2f: 0x0080, - 0x2d30: 0x0080, 0x2d31: 0x0080, 0x2d32: 0x0080, 0x2d33: 0x0080, 0x2d34: 0x0080, 0x2d35: 0x0080, - 0x2d36: 0x0080, 0x2d37: 0x0080, 0x2d38: 0x0080, 0x2d39: 0x0080, 0x2d3a: 0x0080, 0x2d3b: 0x0080, - 0x2d3c: 0x0080, 0x2d3d: 0x0080, 0x2d3e: 0x0080, 0x2d3f: 0x0080, - // Block 0xb5, offset 0x2d40 - 0x2d50: 0x0080, 0x2d51: 0x0080, - 0x2d52: 0x0080, 0x2d53: 0x0080, 0x2d54: 0x0080, 0x2d55: 0x0080, 0x2d56: 0x0080, 0x2d57: 0x0080, - 0x2d58: 0x0080, 0x2d59: 0x0080, 0x2d5a: 0x0080, 0x2d5b: 0x0080, 0x2d5c: 0x0080, 0x2d5d: 0x0080, - 0x2d5e: 0x0080, 0x2d5f: 0x0080, 0x2d60: 0x0080, 0x2d61: 0x0080, 0x2d62: 0x0080, 0x2d63: 0x0080, - 0x2d64: 0x0080, 0x2d65: 0x0080, 0x2d66: 0x0080, 0x2d67: 0x0080, 0x2d68: 0x0080, 0x2d69: 0x0080, - 0x2d6a: 0x0080, 0x2d6b: 0x0080, 0x2d6c: 0x0080, 0x2d6d: 0x0080, 0x2d6e: 0x0080, 0x2d6f: 0x0080, - 0x2d70: 0x0080, 0x2d71: 0x0080, 0x2d72: 0x0080, 0x2d73: 0x0080, 0x2d74: 0x0080, 0x2d75: 0x0080, - 0x2d76: 0x0080, 0x2d77: 0x0080, 0x2d78: 0x0080, 0x2d79: 0x0080, 0x2d7a: 0x0080, 0x2d7b: 0x0080, - 0x2d7c: 0x0080, 0x2d7d: 0x0080, 0x2d7e: 0x0080, 0x2d7f: 0x0080, - // Block 0xb6, offset 0x2d80 - 0x2d80: 0x0080, 0x2d81: 0x0080, 0x2d82: 0x0080, 0x2d83: 0x0080, 0x2d84: 0x0080, 0x2d85: 0x0080, - 0x2d86: 0x0080, 0x2d87: 0x0080, 0x2d88: 0x0080, 0x2d89: 0x0080, 0x2d8a: 0x0080, 0x2d8b: 0x0080, - 0x2d8c: 0x0080, 0x2d8d: 0x0080, 0x2d8e: 0x0080, 0x2d8f: 0x0080, - 0x2d92: 0x0080, 0x2d93: 0x0080, 0x2d94: 0x0080, 0x2d95: 0x0080, 0x2d96: 0x0080, 0x2d97: 0x0080, - 0x2d98: 0x0080, 0x2d99: 0x0080, 0x2d9a: 0x0080, 0x2d9b: 0x0080, 0x2d9c: 0x0080, 0x2d9d: 0x0080, - 0x2d9e: 0x0080, 0x2d9f: 0x0080, 0x2da0: 0x0080, 0x2da1: 0x0080, 0x2da2: 0x0080, 0x2da3: 0x0080, - 0x2da4: 0x0080, 0x2da5: 0x0080, 0x2da6: 0x0080, 0x2da7: 0x0080, 0x2da8: 0x0080, 0x2da9: 0x0080, - 0x2daa: 0x0080, 0x2dab: 0x0080, 0x2dac: 0x0080, 0x2dad: 0x0080, 0x2dae: 0x0080, 0x2daf: 0x0080, - 0x2db0: 0x0080, 0x2db1: 0x0080, 0x2db2: 0x0080, 0x2db3: 0x0080, 0x2db4: 0x0080, 0x2db5: 0x0080, - 0x2db6: 0x0080, 0x2db7: 0x0080, 0x2db8: 0x0080, 0x2db9: 0x0080, 0x2dba: 0x0080, 0x2dbb: 0x0080, - 0x2dbc: 0x0080, 0x2dbd: 0x0080, 0x2dbe: 0x0080, 0x2dbf: 0x0080, - // Block 0xb7, offset 0x2dc0 - 0x2dc0: 0x0080, 0x2dc1: 0x0080, 0x2dc2: 0x0080, 0x2dc3: 0x0080, 0x2dc4: 0x0080, 0x2dc5: 0x0080, - 0x2dc6: 0x0080, 0x2dc7: 0x0080, - 0x2df0: 0x0080, 0x2df1: 0x0080, 0x2df2: 0x0080, 0x2df3: 0x0080, 0x2df4: 0x0080, 0x2df5: 0x0080, - 0x2df6: 0x0080, 0x2df7: 0x0080, 0x2df8: 0x0080, 0x2df9: 0x0080, 0x2dfa: 0x0080, 0x2dfb: 0x0080, - 0x2dfc: 0x0080, 0x2dfd: 0x0080, - // Block 0xb8, offset 0x2e00 - 0x2e00: 0x0040, 0x2e01: 0x0040, 0x2e02: 0x0040, 0x2e03: 0x0040, 0x2e04: 0x0040, 0x2e05: 0x0040, - 0x2e06: 0x0040, 0x2e07: 0x0040, 0x2e08: 0x0040, 0x2e09: 0x0040, 0x2e0a: 0x0040, 0x2e0b: 0x0040, - 0x2e0c: 0x0040, 0x2e0d: 0x0040, 0x2e0e: 0x0040, 0x2e0f: 0x0040, 0x2e10: 0x0080, 0x2e11: 0x0080, - 0x2e12: 0x0080, 0x2e13: 0x0080, 0x2e14: 0x0080, 0x2e15: 0x0080, 0x2e16: 0x0080, 0x2e17: 0x0080, - 0x2e18: 0x0080, 0x2e19: 0x0080, - 0x2e20: 0x00c3, 0x2e21: 0x00c3, 0x2e22: 0x00c3, 0x2e23: 0x00c3, - 0x2e24: 0x00c3, 0x2e25: 0x00c3, 0x2e26: 0x00c3, 0x2e27: 0x00c3, 0x2e28: 0x00c3, 0x2e29: 0x00c3, - 0x2e2a: 0x00c3, 0x2e2b: 0x00c3, 0x2e2c: 0x00c3, 0x2e2d: 0x00c3, 0x2e2e: 0x00c3, 0x2e2f: 0x00c3, - 0x2e30: 0x0080, 0x2e31: 0x0080, 0x2e32: 0x0080, 0x2e33: 0x0080, 0x2e34: 0x0080, 0x2e35: 0x0080, - 0x2e36: 0x0080, 0x2e37: 0x0080, 0x2e38: 0x0080, 0x2e39: 0x0080, 0x2e3a: 0x0080, 0x2e3b: 0x0080, - 0x2e3c: 0x0080, 0x2e3d: 0x0080, 0x2e3e: 0x0080, 0x2e3f: 0x0080, - // Block 0xb9, offset 0x2e40 - 0x2e40: 0x0080, 0x2e41: 0x0080, 0x2e42: 0x0080, 0x2e43: 0x0080, 0x2e44: 0x0080, 0x2e45: 0x0080, - 0x2e46: 0x0080, 0x2e47: 0x0080, 0x2e48: 0x0080, 0x2e49: 0x0080, 0x2e4a: 0x0080, 0x2e4b: 0x0080, - 0x2e4c: 0x0080, 0x2e4d: 0x0080, 0x2e4e: 0x0080, 0x2e4f: 0x0080, 0x2e50: 0x0080, 0x2e51: 0x0080, - 0x2e52: 0x0080, 0x2e54: 0x0080, 0x2e55: 0x0080, 0x2e56: 0x0080, 0x2e57: 0x0080, - 0x2e58: 0x0080, 0x2e59: 0x0080, 0x2e5a: 0x0080, 0x2e5b: 0x0080, 0x2e5c: 0x0080, 0x2e5d: 0x0080, - 0x2e5e: 0x0080, 0x2e5f: 0x0080, 0x2e60: 0x0080, 0x2e61: 0x0080, 0x2e62: 0x0080, 0x2e63: 0x0080, - 0x2e64: 0x0080, 0x2e65: 0x0080, 0x2e66: 0x0080, 0x2e68: 0x0080, 0x2e69: 0x0080, - 0x2e6a: 0x0080, 0x2e6b: 0x0080, - 0x2e70: 0x0080, 0x2e71: 0x0080, 0x2e72: 0x0080, 0x2e73: 0x00c0, 0x2e74: 0x0080, - 0x2e76: 0x0080, 0x2e77: 0x0080, 0x2e78: 0x0080, 0x2e79: 0x0080, 0x2e7a: 0x0080, 0x2e7b: 0x0080, - 0x2e7c: 0x0080, 0x2e7d: 0x0080, 0x2e7e: 0x0080, 0x2e7f: 0x0080, - // Block 0xba, offset 0x2e80 - 0x2e80: 0x0080, 0x2e81: 0x0080, 0x2e82: 0x0080, 0x2e83: 0x0080, 0x2e84: 0x0080, 0x2e85: 0x0080, - 0x2e86: 0x0080, 0x2e87: 0x0080, 0x2e88: 0x0080, 0x2e89: 0x0080, 0x2e8a: 0x0080, 0x2e8b: 0x0080, - 0x2e8c: 0x0080, 0x2e8d: 0x0080, 0x2e8e: 0x0080, 0x2e8f: 0x0080, 0x2e90: 0x0080, 0x2e91: 0x0080, - 0x2e92: 0x0080, 0x2e93: 0x0080, 0x2e94: 0x0080, 0x2e95: 0x0080, 0x2e96: 0x0080, 0x2e97: 0x0080, - 0x2e98: 0x0080, 0x2e99: 0x0080, 0x2e9a: 0x0080, 0x2e9b: 0x0080, 0x2e9c: 0x0080, 0x2e9d: 0x0080, - 0x2e9e: 0x0080, 0x2e9f: 0x0080, 0x2ea0: 0x0080, 0x2ea1: 0x0080, 0x2ea2: 0x0080, 0x2ea3: 0x0080, - 0x2ea4: 0x0080, 0x2ea5: 0x0080, 0x2ea6: 0x0080, 0x2ea7: 0x0080, 0x2ea8: 0x0080, 0x2ea9: 0x0080, - 0x2eaa: 0x0080, 0x2eab: 0x0080, 0x2eac: 0x0080, 0x2ead: 0x0080, 0x2eae: 0x0080, 0x2eaf: 0x0080, - 0x2eb0: 0x0080, 0x2eb1: 0x0080, 0x2eb2: 0x0080, 0x2eb3: 0x0080, 0x2eb4: 0x0080, 0x2eb5: 0x0080, - 0x2eb6: 0x0080, 0x2eb7: 0x0080, 0x2eb8: 0x0080, 0x2eb9: 0x0080, 0x2eba: 0x0080, 0x2ebb: 0x0080, - 0x2ebc: 0x0080, 0x2ebf: 0x0040, - // Block 0xbb, offset 0x2ec0 - 0x2ec1: 0x0080, 0x2ec2: 0x0080, 0x2ec3: 0x0080, 0x2ec4: 0x0080, 0x2ec5: 0x0080, - 0x2ec6: 0x0080, 0x2ec7: 0x0080, 0x2ec8: 0x0080, 0x2ec9: 0x0080, 0x2eca: 0x0080, 0x2ecb: 0x0080, - 0x2ecc: 0x0080, 0x2ecd: 0x0080, 0x2ece: 0x0080, 0x2ecf: 0x0080, 0x2ed0: 0x0080, 0x2ed1: 0x0080, - 0x2ed2: 0x0080, 0x2ed3: 0x0080, 0x2ed4: 0x0080, 0x2ed5: 0x0080, 0x2ed6: 0x0080, 0x2ed7: 0x0080, - 0x2ed8: 0x0080, 0x2ed9: 0x0080, 0x2eda: 0x0080, 0x2edb: 0x0080, 0x2edc: 0x0080, 0x2edd: 0x0080, - 0x2ede: 0x0080, 0x2edf: 0x0080, 0x2ee0: 0x0080, 0x2ee1: 0x0080, 0x2ee2: 0x0080, 0x2ee3: 0x0080, - 0x2ee4: 0x0080, 0x2ee5: 0x0080, 0x2ee6: 0x0080, 0x2ee7: 0x0080, 0x2ee8: 0x0080, 0x2ee9: 0x0080, - 0x2eea: 0x0080, 0x2eeb: 0x0080, 0x2eec: 0x0080, 0x2eed: 0x0080, 0x2eee: 0x0080, 0x2eef: 0x0080, - 0x2ef0: 0x0080, 0x2ef1: 0x0080, 0x2ef2: 0x0080, 0x2ef3: 0x0080, 0x2ef4: 0x0080, 0x2ef5: 0x0080, - 0x2ef6: 0x0080, 0x2ef7: 0x0080, 0x2ef8: 0x0080, 0x2ef9: 0x0080, 0x2efa: 0x0080, 0x2efb: 0x0080, - 0x2efc: 0x0080, 0x2efd: 0x0080, 0x2efe: 0x0080, 0x2eff: 0x0080, - // Block 0xbc, offset 0x2f00 - 0x2f00: 0x0080, 0x2f01: 0x0080, 0x2f02: 0x0080, 0x2f03: 0x0080, 0x2f04: 0x0080, 0x2f05: 0x0080, - 0x2f06: 0x0080, 0x2f07: 0x0080, 0x2f08: 0x0080, 0x2f09: 0x0080, 0x2f0a: 0x0080, 0x2f0b: 0x0080, - 0x2f0c: 0x0080, 0x2f0d: 0x0080, 0x2f0e: 0x0080, 0x2f0f: 0x0080, 0x2f10: 0x0080, 0x2f11: 0x0080, - 0x2f12: 0x0080, 0x2f13: 0x0080, 0x2f14: 0x0080, 0x2f15: 0x0080, 0x2f16: 0x0080, 0x2f17: 0x0080, - 0x2f18: 0x0080, 0x2f19: 0x0080, 0x2f1a: 0x0080, 0x2f1b: 0x0080, 0x2f1c: 0x0080, 0x2f1d: 0x0080, - 0x2f1e: 0x0080, 0x2f1f: 0x0080, 0x2f20: 0x0080, 0x2f21: 0x0080, 0x2f22: 0x0080, 0x2f23: 0x0080, - 0x2f24: 0x0080, 0x2f25: 0x0080, 0x2f26: 0x008c, 0x2f27: 0x008c, 0x2f28: 0x008c, 0x2f29: 0x008c, - 0x2f2a: 0x008c, 0x2f2b: 0x008c, 0x2f2c: 0x008c, 0x2f2d: 0x008c, 0x2f2e: 0x008c, 0x2f2f: 0x008c, - 0x2f30: 0x0080, 0x2f31: 0x008c, 0x2f32: 0x008c, 0x2f33: 0x008c, 0x2f34: 0x008c, 0x2f35: 0x008c, - 0x2f36: 0x008c, 0x2f37: 0x008c, 0x2f38: 0x008c, 0x2f39: 0x008c, 0x2f3a: 0x008c, 0x2f3b: 0x008c, - 0x2f3c: 0x008c, 0x2f3d: 0x008c, 0x2f3e: 0x008c, 0x2f3f: 0x008c, - // Block 0xbd, offset 0x2f40 - 0x2f40: 0x008c, 0x2f41: 0x008c, 0x2f42: 0x008c, 0x2f43: 0x008c, 0x2f44: 0x008c, 0x2f45: 0x008c, - 0x2f46: 0x008c, 0x2f47: 0x008c, 0x2f48: 0x008c, 0x2f49: 0x008c, 0x2f4a: 0x008c, 0x2f4b: 0x008c, - 0x2f4c: 0x008c, 0x2f4d: 0x008c, 0x2f4e: 0x008c, 0x2f4f: 0x008c, 0x2f50: 0x008c, 0x2f51: 0x008c, - 0x2f52: 0x008c, 0x2f53: 0x008c, 0x2f54: 0x008c, 0x2f55: 0x008c, 0x2f56: 0x008c, 0x2f57: 0x008c, - 0x2f58: 0x008c, 0x2f59: 0x008c, 0x2f5a: 0x008c, 0x2f5b: 0x008c, 0x2f5c: 0x008c, 0x2f5d: 0x008c, - 0x2f5e: 0x0080, 0x2f5f: 0x0080, 0x2f60: 0x0040, 0x2f61: 0x0080, 0x2f62: 0x0080, 0x2f63: 0x0080, - 0x2f64: 0x0080, 0x2f65: 0x0080, 0x2f66: 0x0080, 0x2f67: 0x0080, 0x2f68: 0x0080, 0x2f69: 0x0080, - 0x2f6a: 0x0080, 0x2f6b: 0x0080, 0x2f6c: 0x0080, 0x2f6d: 0x0080, 0x2f6e: 0x0080, 0x2f6f: 0x0080, - 0x2f70: 0x0080, 0x2f71: 0x0080, 0x2f72: 0x0080, 0x2f73: 0x0080, 0x2f74: 0x0080, 0x2f75: 0x0080, - 0x2f76: 0x0080, 0x2f77: 0x0080, 0x2f78: 0x0080, 0x2f79: 0x0080, 0x2f7a: 0x0080, 0x2f7b: 0x0080, - 0x2f7c: 0x0080, 0x2f7d: 0x0080, 0x2f7e: 0x0080, - // Block 0xbe, offset 0x2f80 - 0x2f82: 0x0080, 0x2f83: 0x0080, 0x2f84: 0x0080, 0x2f85: 0x0080, - 0x2f86: 0x0080, 0x2f87: 0x0080, 0x2f8a: 0x0080, 0x2f8b: 0x0080, - 0x2f8c: 0x0080, 0x2f8d: 0x0080, 0x2f8e: 0x0080, 0x2f8f: 0x0080, - 0x2f92: 0x0080, 0x2f93: 0x0080, 0x2f94: 0x0080, 0x2f95: 0x0080, 0x2f96: 0x0080, 0x2f97: 0x0080, - 0x2f9a: 0x0080, 0x2f9b: 0x0080, 0x2f9c: 0x0080, - 0x2fa0: 0x0080, 0x2fa1: 0x0080, 0x2fa2: 0x0080, 0x2fa3: 0x0080, - 0x2fa4: 0x0080, 0x2fa5: 0x0080, 0x2fa6: 0x0080, 0x2fa8: 0x0080, 0x2fa9: 0x0080, - 0x2faa: 0x0080, 0x2fab: 0x0080, 0x2fac: 0x0080, 0x2fad: 0x0080, 0x2fae: 0x0080, - 0x2fb9: 0x0040, 0x2fba: 0x0040, 0x2fbb: 0x0040, - 0x2fbc: 0x0080, 0x2fbd: 0x0080, - // Block 0xbf, offset 0x2fc0 - 0x2fc0: 0x00c0, 0x2fc1: 0x00c0, 0x2fc2: 0x00c0, 0x2fc3: 0x00c0, 0x2fc4: 0x00c0, 0x2fc5: 0x00c0, - 0x2fc6: 0x00c0, 0x2fc7: 0x00c0, 0x2fc8: 0x00c0, 0x2fc9: 0x00c0, 0x2fca: 0x00c0, 0x2fcb: 0x00c0, - 0x2fcd: 0x00c0, 0x2fce: 0x00c0, 0x2fcf: 0x00c0, 0x2fd0: 0x00c0, 0x2fd1: 0x00c0, - 0x2fd2: 0x00c0, 0x2fd3: 0x00c0, 0x2fd4: 0x00c0, 0x2fd5: 0x00c0, 0x2fd6: 0x00c0, 0x2fd7: 0x00c0, - 0x2fd8: 0x00c0, 0x2fd9: 0x00c0, 0x2fda: 0x00c0, 0x2fdb: 0x00c0, 0x2fdc: 0x00c0, 0x2fdd: 0x00c0, - 0x2fde: 0x00c0, 0x2fdf: 0x00c0, 0x2fe0: 0x00c0, 0x2fe1: 0x00c0, 0x2fe2: 0x00c0, 0x2fe3: 0x00c0, - 0x2fe4: 0x00c0, 0x2fe5: 0x00c0, 0x2fe6: 0x00c0, 0x2fe8: 0x00c0, 0x2fe9: 0x00c0, - 0x2fea: 0x00c0, 0x2feb: 0x00c0, 0x2fec: 0x00c0, 0x2fed: 0x00c0, 0x2fee: 0x00c0, 0x2fef: 0x00c0, - 0x2ff0: 0x00c0, 0x2ff1: 0x00c0, 0x2ff2: 0x00c0, 0x2ff3: 0x00c0, 0x2ff4: 0x00c0, 0x2ff5: 0x00c0, - 0x2ff6: 0x00c0, 0x2ff7: 0x00c0, 0x2ff8: 0x00c0, 0x2ff9: 0x00c0, 0x2ffa: 0x00c0, - 0x2ffc: 0x00c0, 0x2ffd: 0x00c0, 0x2fff: 0x00c0, - // Block 0xc0, offset 0x3000 - 0x3000: 0x00c0, 0x3001: 0x00c0, 0x3002: 0x00c0, 0x3003: 0x00c0, 0x3004: 0x00c0, 0x3005: 0x00c0, - 0x3006: 0x00c0, 0x3007: 0x00c0, 0x3008: 0x00c0, 0x3009: 0x00c0, 0x300a: 0x00c0, 0x300b: 0x00c0, - 0x300c: 0x00c0, 0x300d: 0x00c0, 0x3010: 0x00c0, 0x3011: 0x00c0, - 0x3012: 0x00c0, 0x3013: 0x00c0, 0x3014: 0x00c0, 0x3015: 0x00c0, 0x3016: 0x00c0, 0x3017: 0x00c0, - 0x3018: 0x00c0, 0x3019: 0x00c0, 0x301a: 0x00c0, 0x301b: 0x00c0, 0x301c: 0x00c0, 0x301d: 0x00c0, - // Block 0xc1, offset 0x3040 - 0x3040: 0x00c0, 0x3041: 0x00c0, 0x3042: 0x00c0, 0x3043: 0x00c0, 0x3044: 0x00c0, 0x3045: 0x00c0, - 0x3046: 0x00c0, 0x3047: 0x00c0, 0x3048: 0x00c0, 0x3049: 0x00c0, 0x304a: 0x00c0, 0x304b: 0x00c0, - 0x304c: 0x00c0, 0x304d: 0x00c0, 0x304e: 0x00c0, 0x304f: 0x00c0, 0x3050: 0x00c0, 0x3051: 0x00c0, - 0x3052: 0x00c0, 0x3053: 0x00c0, 0x3054: 0x00c0, 0x3055: 0x00c0, 0x3056: 0x00c0, 0x3057: 0x00c0, - 0x3058: 0x00c0, 0x3059: 0x00c0, 0x305a: 0x00c0, 0x305b: 0x00c0, 0x305c: 0x00c0, 0x305d: 0x00c0, - 0x305e: 0x00c0, 0x305f: 0x00c0, 0x3060: 0x00c0, 0x3061: 0x00c0, 0x3062: 0x00c0, 0x3063: 0x00c0, - 0x3064: 0x00c0, 0x3065: 0x00c0, 0x3066: 0x00c0, 0x3067: 0x00c0, 0x3068: 0x00c0, 0x3069: 0x00c0, - 0x306a: 0x00c0, 0x306b: 0x00c0, 0x306c: 0x00c0, 0x306d: 0x00c0, 0x306e: 0x00c0, 0x306f: 0x00c0, - 0x3070: 0x00c0, 0x3071: 0x00c0, 0x3072: 0x00c0, 0x3073: 0x00c0, 0x3074: 0x00c0, 0x3075: 0x00c0, - 0x3076: 0x00c0, 0x3077: 0x00c0, 0x3078: 0x00c0, 0x3079: 0x00c0, 0x307a: 0x00c0, - // Block 0xc2, offset 0x3080 - 0x3080: 0x0080, 0x3081: 0x0080, 0x3082: 0x0080, - 0x3087: 0x0080, 0x3088: 0x0080, 0x3089: 0x0080, 0x308a: 0x0080, 0x308b: 0x0080, - 0x308c: 0x0080, 0x308d: 0x0080, 0x308e: 0x0080, 0x308f: 0x0080, 0x3090: 0x0080, 0x3091: 0x0080, - 0x3092: 0x0080, 0x3093: 0x0080, 0x3094: 0x0080, 0x3095: 0x0080, 0x3096: 0x0080, 0x3097: 0x0080, - 0x3098: 0x0080, 0x3099: 0x0080, 0x309a: 0x0080, 0x309b: 0x0080, 0x309c: 0x0080, 0x309d: 0x0080, - 0x309e: 0x0080, 0x309f: 0x0080, 0x30a0: 0x0080, 0x30a1: 0x0080, 0x30a2: 0x0080, 0x30a3: 0x0080, - 0x30a4: 0x0080, 0x30a5: 0x0080, 0x30a6: 0x0080, 0x30a7: 0x0080, 0x30a8: 0x0080, 0x30a9: 0x0080, - 0x30aa: 0x0080, 0x30ab: 0x0080, 0x30ac: 0x0080, 0x30ad: 0x0080, 0x30ae: 0x0080, 0x30af: 0x0080, - 0x30b0: 0x0080, 0x30b1: 0x0080, 0x30b2: 0x0080, 0x30b3: 0x0080, - 0x30b7: 0x0080, 0x30b8: 0x0080, 0x30b9: 0x0080, 0x30ba: 0x0080, 0x30bb: 0x0080, - 0x30bc: 0x0080, 0x30bd: 0x0080, 0x30be: 0x0080, 0x30bf: 0x0080, - // Block 0xc3, offset 0x30c0 - 0x30c0: 0x0088, 0x30c1: 0x0088, 0x30c2: 0x0088, 0x30c3: 0x0088, 0x30c4: 0x0088, 0x30c5: 0x0088, - 0x30c6: 0x0088, 0x30c7: 0x0088, 0x30c8: 0x0088, 0x30c9: 0x0088, 0x30ca: 0x0088, 0x30cb: 0x0088, - 0x30cc: 0x0088, 0x30cd: 0x0088, 0x30ce: 0x0088, 0x30cf: 0x0088, 0x30d0: 0x0088, 0x30d1: 0x0088, - 0x30d2: 0x0088, 0x30d3: 0x0088, 0x30d4: 0x0088, 0x30d5: 0x0088, 0x30d6: 0x0088, 0x30d7: 0x0088, - 0x30d8: 0x0088, 0x30d9: 0x0088, 0x30da: 0x0088, 0x30db: 0x0088, 0x30dc: 0x0088, 0x30dd: 0x0088, - 0x30de: 0x0088, 0x30df: 0x0088, 0x30e0: 0x0088, 0x30e1: 0x0088, 0x30e2: 0x0088, 0x30e3: 0x0088, - 0x30e4: 0x0088, 0x30e5: 0x0088, 0x30e6: 0x0088, 0x30e7: 0x0088, 0x30e8: 0x0088, 0x30e9: 0x0088, - 0x30ea: 0x0088, 0x30eb: 0x0088, 0x30ec: 0x0088, 0x30ed: 0x0088, 0x30ee: 0x0088, 0x30ef: 0x0088, - 0x30f0: 0x0088, 0x30f1: 0x0088, 0x30f2: 0x0088, 0x30f3: 0x0088, 0x30f4: 0x0088, 0x30f5: 0x0088, - 0x30f6: 0x0088, 0x30f7: 0x0088, 0x30f8: 0x0088, 0x30f9: 0x0088, 0x30fa: 0x0088, 0x30fb: 0x0088, - 0x30fc: 0x0088, 0x30fd: 0x0088, 0x30fe: 0x0088, 0x30ff: 0x0088, - // Block 0xc4, offset 0x3100 - 0x3100: 0x0088, 0x3101: 0x0088, 0x3102: 0x0088, 0x3103: 0x0088, 0x3104: 0x0088, 0x3105: 0x0088, - 0x3106: 0x0088, 0x3107: 0x0088, 0x3108: 0x0088, 0x3109: 0x0088, 0x310a: 0x0088, 0x310b: 0x0088, - 0x310c: 0x0088, 0x310d: 0x0088, 0x310e: 0x0088, 0x3110: 0x0080, 0x3111: 0x0080, - 0x3112: 0x0080, 0x3113: 0x0080, 0x3114: 0x0080, 0x3115: 0x0080, 0x3116: 0x0080, 0x3117: 0x0080, - 0x3118: 0x0080, 0x3119: 0x0080, 0x311a: 0x0080, 0x311b: 0x0080, - 0x3120: 0x0088, - // Block 0xc5, offset 0x3140 - 0x3150: 0x0080, 0x3151: 0x0080, - 0x3152: 0x0080, 0x3153: 0x0080, 0x3154: 0x0080, 0x3155: 0x0080, 0x3156: 0x0080, 0x3157: 0x0080, - 0x3158: 0x0080, 0x3159: 0x0080, 0x315a: 0x0080, 0x315b: 0x0080, 0x315c: 0x0080, 0x315d: 0x0080, - 0x315e: 0x0080, 0x315f: 0x0080, 0x3160: 0x0080, 0x3161: 0x0080, 0x3162: 0x0080, 0x3163: 0x0080, - 0x3164: 0x0080, 0x3165: 0x0080, 0x3166: 0x0080, 0x3167: 0x0080, 0x3168: 0x0080, 0x3169: 0x0080, - 0x316a: 0x0080, 0x316b: 0x0080, 0x316c: 0x0080, 0x316d: 0x0080, 0x316e: 0x0080, 0x316f: 0x0080, - 0x3170: 0x0080, 0x3171: 0x0080, 0x3172: 0x0080, 0x3173: 0x0080, 0x3174: 0x0080, 0x3175: 0x0080, - 0x3176: 0x0080, 0x3177: 0x0080, 0x3178: 0x0080, 0x3179: 0x0080, 0x317a: 0x0080, 0x317b: 0x0080, - 0x317c: 0x0080, 0x317d: 0x00c3, - // Block 0xc6, offset 0x3180 - 0x3180: 0x00c0, 0x3181: 0x00c0, 0x3182: 0x00c0, 0x3183: 0x00c0, 0x3184: 0x00c0, 0x3185: 0x00c0, - 0x3186: 0x00c0, 0x3187: 0x00c0, 0x3188: 0x00c0, 0x3189: 0x00c0, 0x318a: 0x00c0, 0x318b: 0x00c0, - 0x318c: 0x00c0, 0x318d: 0x00c0, 0x318e: 0x00c0, 0x318f: 0x00c0, 0x3190: 0x00c0, 0x3191: 0x00c0, - 0x3192: 0x00c0, 0x3193: 0x00c0, 0x3194: 0x00c0, 0x3195: 0x00c0, 0x3196: 0x00c0, 0x3197: 0x00c0, - 0x3198: 0x00c0, 0x3199: 0x00c0, 0x319a: 0x00c0, 0x319b: 0x00c0, 0x319c: 0x00c0, - 0x31a0: 0x00c0, 0x31a1: 0x00c0, 0x31a2: 0x00c0, 0x31a3: 0x00c0, - 0x31a4: 0x00c0, 0x31a5: 0x00c0, 0x31a6: 0x00c0, 0x31a7: 0x00c0, 0x31a8: 0x00c0, 0x31a9: 0x00c0, - 0x31aa: 0x00c0, 0x31ab: 0x00c0, 0x31ac: 0x00c0, 0x31ad: 0x00c0, 0x31ae: 0x00c0, 0x31af: 0x00c0, - 0x31b0: 0x00c0, 0x31b1: 0x00c0, 0x31b2: 0x00c0, 0x31b3: 0x00c0, 0x31b4: 0x00c0, 0x31b5: 0x00c0, - 0x31b6: 0x00c0, 0x31b7: 0x00c0, 0x31b8: 0x00c0, 0x31b9: 0x00c0, 0x31ba: 0x00c0, 0x31bb: 0x00c0, - 0x31bc: 0x00c0, 0x31bd: 0x00c0, 0x31be: 0x00c0, 0x31bf: 0x00c0, - // Block 0xc7, offset 0x31c0 - 0x31c0: 0x00c0, 0x31c1: 0x00c0, 0x31c2: 0x00c0, 0x31c3: 0x00c0, 0x31c4: 0x00c0, 0x31c5: 0x00c0, - 0x31c6: 0x00c0, 0x31c7: 0x00c0, 0x31c8: 0x00c0, 0x31c9: 0x00c0, 0x31ca: 0x00c0, 0x31cb: 0x00c0, - 0x31cc: 0x00c0, 0x31cd: 0x00c0, 0x31ce: 0x00c0, 0x31cf: 0x00c0, 0x31d0: 0x00c0, - 0x31e0: 0x00c3, 0x31e1: 0x0080, 0x31e2: 0x0080, 0x31e3: 0x0080, - 0x31e4: 0x0080, 0x31e5: 0x0080, 0x31e6: 0x0080, 0x31e7: 0x0080, 0x31e8: 0x0080, 0x31e9: 0x0080, - 0x31ea: 0x0080, 0x31eb: 0x0080, 0x31ec: 0x0080, 0x31ed: 0x0080, 0x31ee: 0x0080, 0x31ef: 0x0080, - 0x31f0: 0x0080, 0x31f1: 0x0080, 0x31f2: 0x0080, 0x31f3: 0x0080, 0x31f4: 0x0080, 0x31f5: 0x0080, - 0x31f6: 0x0080, 0x31f7: 0x0080, 0x31f8: 0x0080, 0x31f9: 0x0080, 0x31fa: 0x0080, 0x31fb: 0x0080, - // Block 0xc8, offset 0x3200 - 0x3200: 0x00c0, 0x3201: 0x00c0, 0x3202: 0x00c0, 0x3203: 0x00c0, 0x3204: 0x00c0, 0x3205: 0x00c0, - 0x3206: 0x00c0, 0x3207: 0x00c0, 0x3208: 0x00c0, 0x3209: 0x00c0, 0x320a: 0x00c0, 0x320b: 0x00c0, - 0x320c: 0x00c0, 0x320d: 0x00c0, 0x320e: 0x00c0, 0x320f: 0x00c0, 0x3210: 0x00c0, 0x3211: 0x00c0, - 0x3212: 0x00c0, 0x3213: 0x00c0, 0x3214: 0x00c0, 0x3215: 0x00c0, 0x3216: 0x00c0, 0x3217: 0x00c0, - 0x3218: 0x00c0, 0x3219: 0x00c0, 0x321a: 0x00c0, 0x321b: 0x00c0, 0x321c: 0x00c0, 0x321d: 0x00c0, - 0x321e: 0x00c0, 0x321f: 0x00c0, 0x3220: 0x0080, 0x3221: 0x0080, 0x3222: 0x0080, 0x3223: 0x0080, - 0x3230: 0x00c0, 0x3231: 0x00c0, 0x3232: 0x00c0, 0x3233: 0x00c0, 0x3234: 0x00c0, 0x3235: 0x00c0, - 0x3236: 0x00c0, 0x3237: 0x00c0, 0x3238: 0x00c0, 0x3239: 0x00c0, 0x323a: 0x00c0, 0x323b: 0x00c0, - 0x323c: 0x00c0, 0x323d: 0x00c0, 0x323e: 0x00c0, 0x323f: 0x00c0, - // Block 0xc9, offset 0x3240 - 0x3240: 0x00c0, 0x3241: 0x0080, 0x3242: 0x00c0, 0x3243: 0x00c0, 0x3244: 0x00c0, 0x3245: 0x00c0, - 0x3246: 0x00c0, 0x3247: 0x00c0, 0x3248: 0x00c0, 0x3249: 0x00c0, 0x324a: 0x0080, - 0x3250: 0x00c0, 0x3251: 0x00c0, - 0x3252: 0x00c0, 0x3253: 0x00c0, 0x3254: 0x00c0, 0x3255: 0x00c0, 0x3256: 0x00c0, 0x3257: 0x00c0, - 0x3258: 0x00c0, 0x3259: 0x00c0, 0x325a: 0x00c0, 0x325b: 0x00c0, 0x325c: 0x00c0, 0x325d: 0x00c0, - 0x325e: 0x00c0, 0x325f: 0x00c0, 0x3260: 0x00c0, 0x3261: 0x00c0, 0x3262: 0x00c0, 0x3263: 0x00c0, - 0x3264: 0x00c0, 0x3265: 0x00c0, 0x3266: 0x00c0, 0x3267: 0x00c0, 0x3268: 0x00c0, 0x3269: 0x00c0, - 0x326a: 0x00c0, 0x326b: 0x00c0, 0x326c: 0x00c0, 0x326d: 0x00c0, 0x326e: 0x00c0, 0x326f: 0x00c0, - 0x3270: 0x00c0, 0x3271: 0x00c0, 0x3272: 0x00c0, 0x3273: 0x00c0, 0x3274: 0x00c0, 0x3275: 0x00c0, - 0x3276: 0x00c3, 0x3277: 0x00c3, 0x3278: 0x00c3, 0x3279: 0x00c3, 0x327a: 0x00c3, - // Block 0xca, offset 0x3280 - 0x3280: 0x00c0, 0x3281: 0x00c0, 0x3282: 0x00c0, 0x3283: 0x00c0, 0x3284: 0x00c0, 0x3285: 0x00c0, - 0x3286: 0x00c0, 0x3287: 0x00c0, 0x3288: 0x00c0, 0x3289: 0x00c0, 0x328a: 0x00c0, 0x328b: 0x00c0, - 0x328c: 0x00c0, 0x328d: 0x00c0, 0x328e: 0x00c0, 0x328f: 0x00c0, 0x3290: 0x00c0, 0x3291: 0x00c0, - 0x3292: 0x00c0, 0x3293: 0x00c0, 0x3294: 0x00c0, 0x3295: 0x00c0, 0x3296: 0x00c0, 0x3297: 0x00c0, - 0x3298: 0x00c0, 0x3299: 0x00c0, 0x329a: 0x00c0, 0x329b: 0x00c0, 0x329c: 0x00c0, 0x329d: 0x00c0, - 0x329f: 0x0080, 0x32a0: 0x00c0, 0x32a1: 0x00c0, 0x32a2: 0x00c0, 0x32a3: 0x00c0, - 0x32a4: 0x00c0, 0x32a5: 0x00c0, 0x32a6: 0x00c0, 0x32a7: 0x00c0, 0x32a8: 0x00c0, 0x32a9: 0x00c0, - 0x32aa: 0x00c0, 0x32ab: 0x00c0, 0x32ac: 0x00c0, 0x32ad: 0x00c0, 0x32ae: 0x00c0, 0x32af: 0x00c0, - 0x32b0: 0x00c0, 0x32b1: 0x00c0, 0x32b2: 0x00c0, 0x32b3: 0x00c0, 0x32b4: 0x00c0, 0x32b5: 0x00c0, - 0x32b6: 0x00c0, 0x32b7: 0x00c0, 0x32b8: 0x00c0, 0x32b9: 0x00c0, 0x32ba: 0x00c0, 0x32bb: 0x00c0, - 0x32bc: 0x00c0, 0x32bd: 0x00c0, 0x32be: 0x00c0, 0x32bf: 0x00c0, - // Block 0xcb, offset 0x32c0 - 0x32c0: 0x00c0, 0x32c1: 0x00c0, 0x32c2: 0x00c0, 0x32c3: 0x00c0, - 0x32c8: 0x00c0, 0x32c9: 0x00c0, 0x32ca: 0x00c0, 0x32cb: 0x00c0, - 0x32cc: 0x00c0, 0x32cd: 0x00c0, 0x32ce: 0x00c0, 0x32cf: 0x00c0, 0x32d0: 0x0080, 0x32d1: 0x0080, - 0x32d2: 0x0080, 0x32d3: 0x0080, 0x32d4: 0x0080, 0x32d5: 0x0080, - // Block 0xcc, offset 0x3300 - 0x3300: 0x00c0, 0x3301: 0x00c0, 0x3302: 0x00c0, 0x3303: 0x00c0, 0x3304: 0x00c0, 0x3305: 0x00c0, - 0x3306: 0x00c0, 0x3307: 0x00c0, 0x3308: 0x00c0, 0x3309: 0x00c0, 0x330a: 0x00c0, 0x330b: 0x00c0, - 0x330c: 0x00c0, 0x330d: 0x00c0, 0x330e: 0x00c0, 0x330f: 0x00c0, 0x3310: 0x00c0, 0x3311: 0x00c0, - 0x3312: 0x00c0, 0x3313: 0x00c0, 0x3314: 0x00c0, 0x3315: 0x00c0, 0x3316: 0x00c0, 0x3317: 0x00c0, - 0x3318: 0x00c0, 0x3319: 0x00c0, 0x331a: 0x00c0, 0x331b: 0x00c0, 0x331c: 0x00c0, 0x331d: 0x00c0, - 0x3320: 0x00c0, 0x3321: 0x00c0, 0x3322: 0x00c0, 0x3323: 0x00c0, - 0x3324: 0x00c0, 0x3325: 0x00c0, 0x3326: 0x00c0, 0x3327: 0x00c0, 0x3328: 0x00c0, 0x3329: 0x00c0, - 0x3330: 0x00c0, 0x3331: 0x00c0, 0x3332: 0x00c0, 0x3333: 0x00c0, 0x3334: 0x00c0, 0x3335: 0x00c0, - 0x3336: 0x00c0, 0x3337: 0x00c0, 0x3338: 0x00c0, 0x3339: 0x00c0, 0x333a: 0x00c0, 0x333b: 0x00c0, - 0x333c: 0x00c0, 0x333d: 0x00c0, 0x333e: 0x00c0, 0x333f: 0x00c0, - // Block 0xcd, offset 0x3340 - 0x3340: 0x00c0, 0x3341: 0x00c0, 0x3342: 0x00c0, 0x3343: 0x00c0, 0x3344: 0x00c0, 0x3345: 0x00c0, - 0x3346: 0x00c0, 0x3347: 0x00c0, 0x3348: 0x00c0, 0x3349: 0x00c0, 0x334a: 0x00c0, 0x334b: 0x00c0, - 0x334c: 0x00c0, 0x334d: 0x00c0, 0x334e: 0x00c0, 0x334f: 0x00c0, 0x3350: 0x00c0, 0x3351: 0x00c0, - 0x3352: 0x00c0, 0x3353: 0x00c0, - 0x3358: 0x00c0, 0x3359: 0x00c0, 0x335a: 0x00c0, 0x335b: 0x00c0, 0x335c: 0x00c0, 0x335d: 0x00c0, - 0x335e: 0x00c0, 0x335f: 0x00c0, 0x3360: 0x00c0, 0x3361: 0x00c0, 0x3362: 0x00c0, 0x3363: 0x00c0, - 0x3364: 0x00c0, 0x3365: 0x00c0, 0x3366: 0x00c0, 0x3367: 0x00c0, 0x3368: 0x00c0, 0x3369: 0x00c0, - 0x336a: 0x00c0, 0x336b: 0x00c0, 0x336c: 0x00c0, 0x336d: 0x00c0, 0x336e: 0x00c0, 0x336f: 0x00c0, - 0x3370: 0x00c0, 0x3371: 0x00c0, 0x3372: 0x00c0, 0x3373: 0x00c0, 0x3374: 0x00c0, 0x3375: 0x00c0, - 0x3376: 0x00c0, 0x3377: 0x00c0, 0x3378: 0x00c0, 0x3379: 0x00c0, 0x337a: 0x00c0, 0x337b: 0x00c0, - // Block 0xce, offset 0x3380 - 0x3380: 0x00c0, 0x3381: 0x00c0, 0x3382: 0x00c0, 0x3383: 0x00c0, 0x3384: 0x00c0, 0x3385: 0x00c0, - 0x3386: 0x00c0, 0x3387: 0x00c0, 0x3388: 0x00c0, 0x3389: 0x00c0, 0x338a: 0x00c0, 0x338b: 0x00c0, - 0x338c: 0x00c0, 0x338d: 0x00c0, 0x338e: 0x00c0, 0x338f: 0x00c0, 0x3390: 0x00c0, 0x3391: 0x00c0, - 0x3392: 0x00c0, 0x3393: 0x00c0, 0x3394: 0x00c0, 0x3395: 0x00c0, 0x3396: 0x00c0, 0x3397: 0x00c0, - 0x3398: 0x00c0, 0x3399: 0x00c0, 0x339a: 0x00c0, 0x339b: 0x00c0, 0x339c: 0x00c0, 0x339d: 0x00c0, - 0x339e: 0x00c0, 0x339f: 0x00c0, 0x33a0: 0x00c0, 0x33a1: 0x00c0, 0x33a2: 0x00c0, 0x33a3: 0x00c0, - 0x33a4: 0x00c0, 0x33a5: 0x00c0, 0x33a6: 0x00c0, 0x33a7: 0x00c0, - 0x33b0: 0x00c0, 0x33b1: 0x00c0, 0x33b2: 0x00c0, 0x33b3: 0x00c0, 0x33b4: 0x00c0, 0x33b5: 0x00c0, - 0x33b6: 0x00c0, 0x33b7: 0x00c0, 0x33b8: 0x00c0, 0x33b9: 0x00c0, 0x33ba: 0x00c0, 0x33bb: 0x00c0, - 0x33bc: 0x00c0, 0x33bd: 0x00c0, 0x33be: 0x00c0, 0x33bf: 0x00c0, - // Block 0xcf, offset 0x33c0 - 0x33c0: 0x00c0, 0x33c1: 0x00c0, 0x33c2: 0x00c0, 0x33c3: 0x00c0, 0x33c4: 0x00c0, 0x33c5: 0x00c0, - 0x33c6: 0x00c0, 0x33c7: 0x00c0, 0x33c8: 0x00c0, 0x33c9: 0x00c0, 0x33ca: 0x00c0, 0x33cb: 0x00c0, - 0x33cc: 0x00c0, 0x33cd: 0x00c0, 0x33ce: 0x00c0, 0x33cf: 0x00c0, 0x33d0: 0x00c0, 0x33d1: 0x00c0, - 0x33d2: 0x00c0, 0x33d3: 0x00c0, 0x33d4: 0x00c0, 0x33d5: 0x00c0, 0x33d6: 0x00c0, 0x33d7: 0x00c0, - 0x33d8: 0x00c0, 0x33d9: 0x00c0, 0x33da: 0x00c0, 0x33db: 0x00c0, 0x33dc: 0x00c0, 0x33dd: 0x00c0, - 0x33de: 0x00c0, 0x33df: 0x00c0, 0x33e0: 0x00c0, 0x33e1: 0x00c0, 0x33e2: 0x00c0, 0x33e3: 0x00c0, - 0x33ef: 0x0080, - // Block 0xd0, offset 0x3400 - 0x3400: 0x00c0, 0x3401: 0x00c0, 0x3402: 0x00c0, 0x3403: 0x00c0, 0x3404: 0x00c0, 0x3405: 0x00c0, - 0x3406: 0x00c0, 0x3407: 0x00c0, 0x3408: 0x00c0, 0x3409: 0x00c0, 0x340a: 0x00c0, 0x340b: 0x00c0, - 0x340c: 0x00c0, 0x340d: 0x00c0, 0x340e: 0x00c0, 0x340f: 0x00c0, 0x3410: 0x00c0, 0x3411: 0x00c0, - 0x3412: 0x00c0, 0x3413: 0x00c0, 0x3414: 0x00c0, 0x3415: 0x00c0, 0x3416: 0x00c0, 0x3417: 0x00c0, - 0x3418: 0x00c0, 0x3419: 0x00c0, 0x341a: 0x00c0, 0x341b: 0x00c0, 0x341c: 0x00c0, 0x341d: 0x00c0, - 0x341e: 0x00c0, 0x341f: 0x00c0, 0x3420: 0x00c0, 0x3421: 0x00c0, 0x3422: 0x00c0, 0x3423: 0x00c0, - 0x3424: 0x00c0, 0x3425: 0x00c0, 0x3426: 0x00c0, 0x3427: 0x00c0, 0x3428: 0x00c0, 0x3429: 0x00c0, - 0x342a: 0x00c0, 0x342b: 0x00c0, 0x342c: 0x00c0, 0x342d: 0x00c0, 0x342e: 0x00c0, 0x342f: 0x00c0, - 0x3430: 0x00c0, 0x3431: 0x00c0, 0x3432: 0x00c0, 0x3433: 0x00c0, 0x3434: 0x00c0, 0x3435: 0x00c0, - 0x3436: 0x00c0, - // Block 0xd1, offset 0x3440 - 0x3440: 0x00c0, 0x3441: 0x00c0, 0x3442: 0x00c0, 0x3443: 0x00c0, 0x3444: 0x00c0, 0x3445: 0x00c0, - 0x3446: 0x00c0, 0x3447: 0x00c0, 0x3448: 0x00c0, 0x3449: 0x00c0, 0x344a: 0x00c0, 0x344b: 0x00c0, - 0x344c: 0x00c0, 0x344d: 0x00c0, 0x344e: 0x00c0, 0x344f: 0x00c0, 0x3450: 0x00c0, 0x3451: 0x00c0, - 0x3452: 0x00c0, 0x3453: 0x00c0, 0x3454: 0x00c0, 0x3455: 0x00c0, - 0x3460: 0x00c0, 0x3461: 0x00c0, 0x3462: 0x00c0, 0x3463: 0x00c0, - 0x3464: 0x00c0, 0x3465: 0x00c0, 0x3466: 0x00c0, 0x3467: 0x00c0, - // Block 0xd2, offset 0x3480 - 0x3480: 0x00c0, 0x3481: 0x00c0, 0x3482: 0x00c0, 0x3483: 0x00c0, 0x3484: 0x00c0, 0x3485: 0x00c0, - 0x3488: 0x00c0, 0x348a: 0x00c0, 0x348b: 0x00c0, - 0x348c: 0x00c0, 0x348d: 0x00c0, 0x348e: 0x00c0, 0x348f: 0x00c0, 0x3490: 0x00c0, 0x3491: 0x00c0, - 0x3492: 0x00c0, 0x3493: 0x00c0, 0x3494: 0x00c0, 0x3495: 0x00c0, 0x3496: 0x00c0, 0x3497: 0x00c0, - 0x3498: 0x00c0, 0x3499: 0x00c0, 0x349a: 0x00c0, 0x349b: 0x00c0, 0x349c: 0x00c0, 0x349d: 0x00c0, - 0x349e: 0x00c0, 0x349f: 0x00c0, 0x34a0: 0x00c0, 0x34a1: 0x00c0, 0x34a2: 0x00c0, 0x34a3: 0x00c0, - 0x34a4: 0x00c0, 0x34a5: 0x00c0, 0x34a6: 0x00c0, 0x34a7: 0x00c0, 0x34a8: 0x00c0, 0x34a9: 0x00c0, - 0x34aa: 0x00c0, 0x34ab: 0x00c0, 0x34ac: 0x00c0, 0x34ad: 0x00c0, 0x34ae: 0x00c0, 0x34af: 0x00c0, - 0x34b0: 0x00c0, 0x34b1: 0x00c0, 0x34b2: 0x00c0, 0x34b3: 0x00c0, 0x34b4: 0x00c0, 0x34b5: 0x00c0, - 0x34b7: 0x00c0, 0x34b8: 0x00c0, - 0x34bc: 0x00c0, 0x34bf: 0x00c0, - // Block 0xd3, offset 0x34c0 - 0x34c0: 0x00c0, 0x34c1: 0x00c0, 0x34c2: 0x00c0, 0x34c3: 0x00c0, 0x34c4: 0x00c0, 0x34c5: 0x00c0, - 0x34c6: 0x00c0, 0x34c7: 0x00c0, 0x34c8: 0x00c0, 0x34c9: 0x00c0, 0x34ca: 0x00c0, 0x34cb: 0x00c0, - 0x34cc: 0x00c0, 0x34cd: 0x00c0, 0x34ce: 0x00c0, 0x34cf: 0x00c0, 0x34d0: 0x00c0, 0x34d1: 0x00c0, - 0x34d2: 0x00c0, 0x34d3: 0x00c0, 0x34d4: 0x00c0, 0x34d5: 0x00c0, 0x34d7: 0x0080, - 0x34d8: 0x0080, 0x34d9: 0x0080, 0x34da: 0x0080, 0x34db: 0x0080, 0x34dc: 0x0080, 0x34dd: 0x0080, - 0x34de: 0x0080, 0x34df: 0x0080, 0x34e0: 0x00c0, 0x34e1: 0x00c0, 0x34e2: 0x00c0, 0x34e3: 0x00c0, - 0x34e4: 0x00c0, 0x34e5: 0x00c0, 0x34e6: 0x00c0, 0x34e7: 0x00c0, 0x34e8: 0x00c0, 0x34e9: 0x00c0, - 0x34ea: 0x00c0, 0x34eb: 0x00c0, 0x34ec: 0x00c0, 0x34ed: 0x00c0, 0x34ee: 0x00c0, 0x34ef: 0x00c0, - 0x34f0: 0x00c0, 0x34f1: 0x00c0, 0x34f2: 0x00c0, 0x34f3: 0x00c0, 0x34f4: 0x00c0, 0x34f5: 0x00c0, - 0x34f6: 0x00c0, 0x34f7: 0x0080, 0x34f8: 0x0080, 0x34f9: 0x0080, 0x34fa: 0x0080, 0x34fb: 0x0080, - 0x34fc: 0x0080, 0x34fd: 0x0080, 0x34fe: 0x0080, 0x34ff: 0x0080, - // Block 0xd4, offset 0x3500 - 0x3500: 0x00c0, 0x3501: 0x00c0, 0x3502: 0x00c0, 0x3503: 0x00c0, 0x3504: 0x00c0, 0x3505: 0x00c0, - 0x3506: 0x00c0, 0x3507: 0x00c0, 0x3508: 0x00c0, 0x3509: 0x00c0, 0x350a: 0x00c0, 0x350b: 0x00c0, - 0x350c: 0x00c0, 0x350d: 0x00c0, 0x350e: 0x00c0, 0x350f: 0x00c0, 0x3510: 0x00c0, 0x3511: 0x00c0, - 0x3512: 0x00c0, 0x3513: 0x00c0, 0x3514: 0x00c0, 0x3515: 0x00c0, 0x3516: 0x00c0, 0x3517: 0x00c0, - 0x3518: 0x00c0, 0x3519: 0x00c0, 0x351a: 0x00c0, 0x351b: 0x00c0, 0x351c: 0x00c0, 0x351d: 0x00c0, - 0x351e: 0x00c0, - 0x3527: 0x0080, 0x3528: 0x0080, 0x3529: 0x0080, - 0x352a: 0x0080, 0x352b: 0x0080, 0x352c: 0x0080, 0x352d: 0x0080, 0x352e: 0x0080, 0x352f: 0x0080, - // Block 0xd5, offset 0x3540 - 0x3560: 0x00c0, 0x3561: 0x00c0, 0x3562: 0x00c0, 0x3563: 0x00c0, - 0x3564: 0x00c0, 0x3565: 0x00c0, 0x3566: 0x00c0, 0x3567: 0x00c0, 0x3568: 0x00c0, 0x3569: 0x00c0, - 0x356a: 0x00c0, 0x356b: 0x00c0, 0x356c: 0x00c0, 0x356d: 0x00c0, 0x356e: 0x00c0, 0x356f: 0x00c0, - 0x3570: 0x00c0, 0x3571: 0x00c0, 0x3572: 0x00c0, 0x3574: 0x00c0, 0x3575: 0x00c0, - 0x357b: 0x0080, - 0x357c: 0x0080, 0x357d: 0x0080, 0x357e: 0x0080, 0x357f: 0x0080, - // Block 0xd6, offset 0x3580 - 0x3580: 0x00c0, 0x3581: 0x00c0, 0x3582: 0x00c0, 0x3583: 0x00c0, 0x3584: 0x00c0, 0x3585: 0x00c0, - 0x3586: 0x00c0, 0x3587: 0x00c0, 0x3588: 0x00c0, 0x3589: 0x00c0, 0x358a: 0x00c0, 0x358b: 0x00c0, - 0x358c: 0x00c0, 0x358d: 0x00c0, 0x358e: 0x00c0, 0x358f: 0x00c0, 0x3590: 0x00c0, 0x3591: 0x00c0, - 0x3592: 0x00c0, 0x3593: 0x00c0, 0x3594: 0x00c0, 0x3595: 0x00c0, 0x3596: 0x0080, 0x3597: 0x0080, - 0x3598: 0x0080, 0x3599: 0x0080, 0x359a: 0x0080, 0x359b: 0x0080, - 0x359f: 0x0080, 0x35a0: 0x00c0, 0x35a1: 0x00c0, 0x35a2: 0x00c0, 0x35a3: 0x00c0, - 0x35a4: 0x00c0, 0x35a5: 0x00c0, 0x35a6: 0x00c0, 0x35a7: 0x00c0, 0x35a8: 0x00c0, 0x35a9: 0x00c0, - 0x35aa: 0x00c0, 0x35ab: 0x00c0, 0x35ac: 0x00c0, 0x35ad: 0x00c0, 0x35ae: 0x00c0, 0x35af: 0x00c0, - 0x35b0: 0x00c0, 0x35b1: 0x00c0, 0x35b2: 0x00c0, 0x35b3: 0x00c0, 0x35b4: 0x00c0, 0x35b5: 0x00c0, - 0x35b6: 0x00c0, 0x35b7: 0x00c0, 0x35b8: 0x00c0, 0x35b9: 0x00c0, - 0x35bf: 0x0080, - // Block 0xd7, offset 0x35c0 - 0x35c0: 0x00c0, 0x35c1: 0x00c0, 0x35c2: 0x00c0, 0x35c3: 0x00c0, 0x35c4: 0x00c0, 0x35c5: 0x00c0, - 0x35c6: 0x00c0, 0x35c7: 0x00c0, 0x35c8: 0x00c0, 0x35c9: 0x00c0, 0x35ca: 0x00c0, 0x35cb: 0x00c0, - 0x35cc: 0x00c0, 0x35cd: 0x00c0, 0x35ce: 0x00c0, 0x35cf: 0x00c0, 0x35d0: 0x00c0, 0x35d1: 0x00c0, - 0x35d2: 0x00c0, 0x35d3: 0x00c0, 0x35d4: 0x00c0, 0x35d5: 0x00c0, 0x35d6: 0x00c0, 0x35d7: 0x00c0, - 0x35d8: 0x00c0, 0x35d9: 0x00c0, 0x35da: 0x00c0, 0x35db: 0x00c0, 0x35dc: 0x00c0, 0x35dd: 0x00c0, - 0x35de: 0x00c0, 0x35df: 0x00c0, 0x35e0: 0x00c0, 0x35e1: 0x00c0, 0x35e2: 0x00c0, 0x35e3: 0x00c0, - 0x35e4: 0x00c0, 0x35e5: 0x00c0, 0x35e6: 0x00c0, 0x35e7: 0x00c0, 0x35e8: 0x00c0, 0x35e9: 0x00c0, - 0x35ea: 0x00c0, 0x35eb: 0x00c0, 0x35ec: 0x00c0, 0x35ed: 0x00c0, 0x35ee: 0x00c0, 0x35ef: 0x00c0, - 0x35f0: 0x00c0, 0x35f1: 0x00c0, 0x35f2: 0x00c0, 0x35f3: 0x00c0, 0x35f4: 0x00c0, 0x35f5: 0x00c0, - 0x35f6: 0x00c0, 0x35f7: 0x00c0, - 0x35fc: 0x0080, 0x35fd: 0x0080, 0x35fe: 0x00c0, 0x35ff: 0x00c0, - // Block 0xd8, offset 0x3600 - 0x3600: 0x00c0, 0x3601: 0x00c3, 0x3602: 0x00c3, 0x3603: 0x00c3, 0x3605: 0x00c3, - 0x3606: 0x00c3, - 0x360c: 0x00c3, 0x360d: 0x00c3, 0x360e: 0x00c3, 0x360f: 0x00c3, 0x3610: 0x00c0, 0x3611: 0x00c0, - 0x3612: 0x00c0, 0x3613: 0x00c0, 0x3615: 0x00c0, 0x3616: 0x00c0, 0x3617: 0x00c0, - 0x3619: 0x00c0, 0x361a: 0x00c0, 0x361b: 0x00c0, 0x361c: 0x00c0, 0x361d: 0x00c0, - 0x361e: 0x00c0, 0x361f: 0x00c0, 0x3620: 0x00c0, 0x3621: 0x00c0, 0x3622: 0x00c0, 0x3623: 0x00c0, - 0x3624: 0x00c0, 0x3625: 0x00c0, 0x3626: 0x00c0, 0x3627: 0x00c0, 0x3628: 0x00c0, 0x3629: 0x00c0, - 0x362a: 0x00c0, 0x362b: 0x00c0, 0x362c: 0x00c0, 0x362d: 0x00c0, 0x362e: 0x00c0, 0x362f: 0x00c0, - 0x3630: 0x00c0, 0x3631: 0x00c0, 0x3632: 0x00c0, 0x3633: 0x00c0, - 0x3638: 0x00c3, 0x3639: 0x00c3, 0x363a: 0x00c3, - 0x363f: 0x00c6, - // Block 0xd9, offset 0x3640 - 0x3640: 0x0080, 0x3641: 0x0080, 0x3642: 0x0080, 0x3643: 0x0080, 0x3644: 0x0080, 0x3645: 0x0080, - 0x3646: 0x0080, 0x3647: 0x0080, - 0x3650: 0x0080, 0x3651: 0x0080, - 0x3652: 0x0080, 0x3653: 0x0080, 0x3654: 0x0080, 0x3655: 0x0080, 0x3656: 0x0080, 0x3657: 0x0080, - 0x3658: 0x0080, - 0x3660: 0x00c0, 0x3661: 0x00c0, 0x3662: 0x00c0, 0x3663: 0x00c0, - 0x3664: 0x00c0, 0x3665: 0x00c0, 0x3666: 0x00c0, 0x3667: 0x00c0, 0x3668: 0x00c0, 0x3669: 0x00c0, - 0x366a: 0x00c0, 0x366b: 0x00c0, 0x366c: 0x00c0, 0x366d: 0x00c0, 0x366e: 0x00c0, 0x366f: 0x00c0, - 0x3670: 0x00c0, 0x3671: 0x00c0, 0x3672: 0x00c0, 0x3673: 0x00c0, 0x3674: 0x00c0, 0x3675: 0x00c0, - 0x3676: 0x00c0, 0x3677: 0x00c0, 0x3678: 0x00c0, 0x3679: 0x00c0, 0x367a: 0x00c0, 0x367b: 0x00c0, - 0x367c: 0x00c0, 0x367d: 0x0080, 0x367e: 0x0080, 0x367f: 0x0080, - // Block 0xda, offset 0x3680 - 0x3680: 0x00c0, 0x3681: 0x00c0, 0x3682: 0x00c0, 0x3683: 0x00c0, 0x3684: 0x00c0, 0x3685: 0x00c0, - 0x3686: 0x00c0, 0x3687: 0x00c0, 0x3688: 0x00c0, 0x3689: 0x00c0, 0x368a: 0x00c0, 0x368b: 0x00c0, - 0x368c: 0x00c0, 0x368d: 0x00c0, 0x368e: 0x00c0, 0x368f: 0x00c0, 0x3690: 0x00c0, 0x3691: 0x00c0, - 0x3692: 0x00c0, 0x3693: 0x00c0, 0x3694: 0x00c0, 0x3695: 0x00c0, 0x3696: 0x00c0, 0x3697: 0x00c0, - 0x3698: 0x00c0, 0x3699: 0x00c0, 0x369a: 0x00c0, 0x369b: 0x00c0, 0x369c: 0x00c0, 0x369d: 0x0080, - 0x369e: 0x0080, 0x369f: 0x0080, - // Block 0xdb, offset 0x36c0 - 0x36c0: 0x00c2, 0x36c1: 0x00c2, 0x36c2: 0x00c2, 0x36c3: 0x00c2, 0x36c4: 0x00c2, 0x36c5: 0x00c4, - 0x36c6: 0x00c0, 0x36c7: 0x00c4, 0x36c8: 0x0080, 0x36c9: 0x00c4, 0x36ca: 0x00c4, 0x36cb: 0x00c0, - 0x36cc: 0x00c0, 0x36cd: 0x00c1, 0x36ce: 0x00c4, 0x36cf: 0x00c4, 0x36d0: 0x00c4, 0x36d1: 0x00c4, - 0x36d2: 0x00c4, 0x36d3: 0x00c2, 0x36d4: 0x00c2, 0x36d5: 0x00c2, 0x36d6: 0x00c2, 0x36d7: 0x00c1, - 0x36d8: 0x00c2, 0x36d9: 0x00c2, 0x36da: 0x00c2, 0x36db: 0x00c2, 0x36dc: 0x00c2, 0x36dd: 0x00c4, - 0x36de: 0x00c2, 0x36df: 0x00c2, 0x36e0: 0x00c2, 0x36e1: 0x00c4, 0x36e2: 0x00c0, 0x36e3: 0x00c0, - 0x36e4: 0x00c4, 0x36e5: 0x00c3, 0x36e6: 0x00c3, - 0x36eb: 0x0082, 0x36ec: 0x0082, 0x36ed: 0x0082, 0x36ee: 0x0082, 0x36ef: 0x0084, - 0x36f0: 0x0080, 0x36f1: 0x0080, 0x36f2: 0x0080, 0x36f3: 0x0080, 0x36f4: 0x0080, 0x36f5: 0x0080, - 0x36f6: 0x0080, - // Block 0xdc, offset 0x3700 - 0x3700: 0x00c0, 0x3701: 0x00c0, 0x3702: 0x00c0, 0x3703: 0x00c0, 0x3704: 0x00c0, 0x3705: 0x00c0, - 0x3706: 0x00c0, 0x3707: 0x00c0, 0x3708: 0x00c0, 0x3709: 0x00c0, 0x370a: 0x00c0, 0x370b: 0x00c0, - 0x370c: 0x00c0, 0x370d: 0x00c0, 0x370e: 0x00c0, 0x370f: 0x00c0, 0x3710: 0x00c0, 0x3711: 0x00c0, - 0x3712: 0x00c0, 0x3713: 0x00c0, 0x3714: 0x00c0, 0x3715: 0x00c0, 0x3716: 0x00c0, 0x3717: 0x00c0, - 0x3718: 0x00c0, 0x3719: 0x00c0, 0x371a: 0x00c0, 0x371b: 0x00c0, 0x371c: 0x00c0, 0x371d: 0x00c0, - 0x371e: 0x00c0, 0x371f: 0x00c0, 0x3720: 0x00c0, 0x3721: 0x00c0, 0x3722: 0x00c0, 0x3723: 0x00c0, - 0x3724: 0x00c0, 0x3725: 0x00c0, 0x3726: 0x00c0, 0x3727: 0x00c0, 0x3728: 0x00c0, 0x3729: 0x00c0, - 0x372a: 0x00c0, 0x372b: 0x00c0, 0x372c: 0x00c0, 0x372d: 0x00c0, 0x372e: 0x00c0, 0x372f: 0x00c0, - 0x3730: 0x00c0, 0x3731: 0x00c0, 0x3732: 0x00c0, 0x3733: 0x00c0, 0x3734: 0x00c0, 0x3735: 0x00c0, - 0x3739: 0x0080, 0x373a: 0x0080, 0x373b: 0x0080, - 0x373c: 0x0080, 0x373d: 0x0080, 0x373e: 0x0080, 0x373f: 0x0080, - // Block 0xdd, offset 0x3740 - 0x3740: 0x00c0, 0x3741: 0x00c0, 0x3742: 0x00c0, 0x3743: 0x00c0, 0x3744: 0x00c0, 0x3745: 0x00c0, - 0x3746: 0x00c0, 0x3747: 0x00c0, 0x3748: 0x00c0, 0x3749: 0x00c0, 0x374a: 0x00c0, 0x374b: 0x00c0, - 0x374c: 0x00c0, 0x374d: 0x00c0, 0x374e: 0x00c0, 0x374f: 0x00c0, 0x3750: 0x00c0, 0x3751: 0x00c0, - 0x3752: 0x00c0, 0x3753: 0x00c0, 0x3754: 0x00c0, 0x3755: 0x00c0, - 0x3758: 0x0080, 0x3759: 0x0080, 0x375a: 0x0080, 0x375b: 0x0080, 0x375c: 0x0080, 0x375d: 0x0080, - 0x375e: 0x0080, 0x375f: 0x0080, 0x3760: 0x00c0, 0x3761: 0x00c0, 0x3762: 0x00c0, 0x3763: 0x00c0, - 0x3764: 0x00c0, 0x3765: 0x00c0, 0x3766: 0x00c0, 0x3767: 0x00c0, 0x3768: 0x00c0, 0x3769: 0x00c0, - 0x376a: 0x00c0, 0x376b: 0x00c0, 0x376c: 0x00c0, 0x376d: 0x00c0, 0x376e: 0x00c0, 0x376f: 0x00c0, - 0x3770: 0x00c0, 0x3771: 0x00c0, 0x3772: 0x00c0, - 0x3778: 0x0080, 0x3779: 0x0080, 0x377a: 0x0080, 0x377b: 0x0080, - 0x377c: 0x0080, 0x377d: 0x0080, 0x377e: 0x0080, 0x377f: 0x0080, - // Block 0xde, offset 0x3780 - 0x3780: 0x00c2, 0x3781: 0x00c4, 0x3782: 0x00c2, 0x3783: 0x00c4, 0x3784: 0x00c4, 0x3785: 0x00c4, - 0x3786: 0x00c2, 0x3787: 0x00c2, 0x3788: 0x00c2, 0x3789: 0x00c4, 0x378a: 0x00c2, 0x378b: 0x00c2, - 0x378c: 0x00c4, 0x378d: 0x00c2, 0x378e: 0x00c4, 0x378f: 0x00c4, 0x3790: 0x00c2, 0x3791: 0x00c4, - 0x3799: 0x0080, 0x379a: 0x0080, 0x379b: 0x0080, 0x379c: 0x0080, - 0x37a9: 0x0084, - 0x37aa: 0x0084, 0x37ab: 0x0084, 0x37ac: 0x0084, 0x37ad: 0x0082, 0x37ae: 0x0082, 0x37af: 0x0080, - // Block 0xdf, offset 0x37c0 - 0x37c0: 0x00c0, 0x37c1: 0x00c0, 0x37c2: 0x00c0, 0x37c3: 0x00c0, 0x37c4: 0x00c0, 0x37c5: 0x00c0, - 0x37c6: 0x00c0, 0x37c7: 0x00c0, 0x37c8: 0x00c0, 0x37c9: 0x00c0, 0x37ca: 0x00c0, 0x37cb: 0x00c0, - 0x37cc: 0x00c0, 0x37cd: 0x00c0, 0x37ce: 0x00c0, 0x37cf: 0x00c0, 0x37d0: 0x00c0, 0x37d1: 0x00c0, - 0x37d2: 0x00c0, 0x37d3: 0x00c0, 0x37d4: 0x00c0, 0x37d5: 0x00c0, 0x37d6: 0x00c0, 0x37d7: 0x00c0, - 0x37d8: 0x00c0, 0x37d9: 0x00c0, 0x37da: 0x00c0, 0x37db: 0x00c0, 0x37dc: 0x00c0, 0x37dd: 0x00c0, - 0x37de: 0x00c0, 0x37df: 0x00c0, 0x37e0: 0x00c0, 0x37e1: 0x00c0, 0x37e2: 0x00c0, 0x37e3: 0x00c0, - 0x37e4: 0x00c0, 0x37e5: 0x00c0, 0x37e6: 0x00c0, 0x37e7: 0x00c0, 0x37e8: 0x00c0, 0x37e9: 0x00c0, - 0x37ea: 0x00c0, 0x37eb: 0x00c0, 0x37ec: 0x00c0, 0x37ed: 0x00c0, 0x37ee: 0x00c0, 0x37ef: 0x00c0, - 0x37f0: 0x00c0, 0x37f1: 0x00c0, 0x37f2: 0x00c0, - // Block 0xe0, offset 0x3800 - 0x3800: 0x00c0, 0x3801: 0x00c0, 0x3802: 0x00c0, 0x3803: 0x00c0, 0x3804: 0x00c0, 0x3805: 0x00c0, - 0x3806: 0x00c0, 0x3807: 0x00c0, 0x3808: 0x00c0, 0x3809: 0x00c0, 0x380a: 0x00c0, 0x380b: 0x00c0, - 0x380c: 0x00c0, 0x380d: 0x00c0, 0x380e: 0x00c0, 0x380f: 0x00c0, 0x3810: 0x00c0, 0x3811: 0x00c0, - 0x3812: 0x00c0, 0x3813: 0x00c0, 0x3814: 0x00c0, 0x3815: 0x00c0, 0x3816: 0x00c0, 0x3817: 0x00c0, - 0x3818: 0x00c0, 0x3819: 0x00c0, 0x381a: 0x00c0, 0x381b: 0x00c0, 0x381c: 0x00c0, 0x381d: 0x00c0, - 0x381e: 0x00c0, 0x381f: 0x00c0, 0x3820: 0x00c0, 0x3821: 0x00c0, 0x3822: 0x00c0, 0x3823: 0x00c0, - 0x3824: 0x00c0, 0x3825: 0x00c0, 0x3826: 0x00c0, 0x3827: 0x00c0, 0x3828: 0x00c0, 0x3829: 0x00c0, - 0x382a: 0x00c0, 0x382b: 0x00c0, 0x382c: 0x00c0, 0x382d: 0x00c0, 0x382e: 0x00c0, 0x382f: 0x00c0, - 0x3830: 0x00c0, 0x3831: 0x00c0, 0x3832: 0x00c0, - 0x383a: 0x0080, 0x383b: 0x0080, - 0x383c: 0x0080, 0x383d: 0x0080, 0x383e: 0x0080, 0x383f: 0x0080, - // Block 0xe1, offset 0x3840 - 0x3860: 0x0080, 0x3861: 0x0080, 0x3862: 0x0080, 0x3863: 0x0080, - 0x3864: 0x0080, 0x3865: 0x0080, 0x3866: 0x0080, 0x3867: 0x0080, 0x3868: 0x0080, 0x3869: 0x0080, - 0x386a: 0x0080, 0x386b: 0x0080, 0x386c: 0x0080, 0x386d: 0x0080, 0x386e: 0x0080, 0x386f: 0x0080, - 0x3870: 0x0080, 0x3871: 0x0080, 0x3872: 0x0080, 0x3873: 0x0080, 0x3874: 0x0080, 0x3875: 0x0080, - 0x3876: 0x0080, 0x3877: 0x0080, 0x3878: 0x0080, 0x3879: 0x0080, 0x387a: 0x0080, 0x387b: 0x0080, - 0x387c: 0x0080, 0x387d: 0x0080, 0x387e: 0x0080, - // Block 0xe2, offset 0x3880 - 0x3880: 0x00c0, 0x3881: 0x00c3, 0x3882: 0x00c0, 0x3883: 0x00c0, 0x3884: 0x00c0, 0x3885: 0x00c0, - 0x3886: 0x00c0, 0x3887: 0x00c0, 0x3888: 0x00c0, 0x3889: 0x00c0, 0x388a: 0x00c0, 0x388b: 0x00c0, - 0x388c: 0x00c0, 0x388d: 0x00c0, 0x388e: 0x00c0, 0x388f: 0x00c0, 0x3890: 0x00c0, 0x3891: 0x00c0, - 0x3892: 0x00c0, 0x3893: 0x00c0, 0x3894: 0x00c0, 0x3895: 0x00c0, 0x3896: 0x00c0, 0x3897: 0x00c0, - 0x3898: 0x00c0, 0x3899: 0x00c0, 0x389a: 0x00c0, 0x389b: 0x00c0, 0x389c: 0x00c0, 0x389d: 0x00c0, - 0x389e: 0x00c0, 0x389f: 0x00c0, 0x38a0: 0x00c0, 0x38a1: 0x00c0, 0x38a2: 0x00c0, 0x38a3: 0x00c0, - 0x38a4: 0x00c0, 0x38a5: 0x00c0, 0x38a6: 0x00c0, 0x38a7: 0x00c0, 0x38a8: 0x00c0, 0x38a9: 0x00c0, - 0x38aa: 0x00c0, 0x38ab: 0x00c0, 0x38ac: 0x00c0, 0x38ad: 0x00c0, 0x38ae: 0x00c0, 0x38af: 0x00c0, - 0x38b0: 0x00c0, 0x38b1: 0x00c0, 0x38b2: 0x00c0, 0x38b3: 0x00c0, 0x38b4: 0x00c0, 0x38b5: 0x00c0, - 0x38b6: 0x00c0, 0x38b7: 0x00c0, 0x38b8: 0x00c3, 0x38b9: 0x00c3, 0x38ba: 0x00c3, 0x38bb: 0x00c3, - 0x38bc: 0x00c3, 0x38bd: 0x00c3, 0x38be: 0x00c3, 0x38bf: 0x00c3, - // Block 0xe3, offset 0x38c0 - 0x38c0: 0x00c3, 0x38c1: 0x00c3, 0x38c2: 0x00c3, 0x38c3: 0x00c3, 0x38c4: 0x00c3, 0x38c5: 0x00c3, - 0x38c6: 0x00c6, 0x38c7: 0x0080, 0x38c8: 0x0080, 0x38c9: 0x0080, 0x38ca: 0x0080, 0x38cb: 0x0080, - 0x38cc: 0x0080, 0x38cd: 0x0080, - 0x38d2: 0x0080, 0x38d3: 0x0080, 0x38d4: 0x0080, 0x38d5: 0x0080, 0x38d6: 0x0080, 0x38d7: 0x0080, - 0x38d8: 0x0080, 0x38d9: 0x0080, 0x38da: 0x0080, 0x38db: 0x0080, 0x38dc: 0x0080, 0x38dd: 0x0080, - 0x38de: 0x0080, 0x38df: 0x0080, 0x38e0: 0x0080, 0x38e1: 0x0080, 0x38e2: 0x0080, 0x38e3: 0x0080, - 0x38e4: 0x0080, 0x38e5: 0x0080, 0x38e6: 0x00c0, 0x38e7: 0x00c0, 0x38e8: 0x00c0, 0x38e9: 0x00c0, - 0x38ea: 0x00c0, 0x38eb: 0x00c0, 0x38ec: 0x00c0, 0x38ed: 0x00c0, 0x38ee: 0x00c0, 0x38ef: 0x00c0, - 0x38ff: 0x00c6, - // Block 0xe4, offset 0x3900 - 0x3900: 0x00c3, 0x3901: 0x00c3, 0x3902: 0x00c0, 0x3903: 0x00c0, 0x3904: 0x00c0, 0x3905: 0x00c0, - 0x3906: 0x00c0, 0x3907: 0x00c0, 0x3908: 0x00c0, 0x3909: 0x00c0, 0x390a: 0x00c0, 0x390b: 0x00c0, - 0x390c: 0x00c0, 0x390d: 0x00c0, 0x390e: 0x00c0, 0x390f: 0x00c0, 0x3910: 0x00c0, 0x3911: 0x00c0, - 0x3912: 0x00c0, 0x3913: 0x00c0, 0x3914: 0x00c0, 0x3915: 0x00c0, 0x3916: 0x00c0, 0x3917: 0x00c0, - 0x3918: 0x00c0, 0x3919: 0x00c0, 0x391a: 0x00c0, 0x391b: 0x00c0, 0x391c: 0x00c0, 0x391d: 0x00c0, - 0x391e: 0x00c0, 0x391f: 0x00c0, 0x3920: 0x00c0, 0x3921: 0x00c0, 0x3922: 0x00c0, 0x3923: 0x00c0, - 0x3924: 0x00c0, 0x3925: 0x00c0, 0x3926: 0x00c0, 0x3927: 0x00c0, 0x3928: 0x00c0, 0x3929: 0x00c0, - 0x392a: 0x00c0, 0x392b: 0x00c0, 0x392c: 0x00c0, 0x392d: 0x00c0, 0x392e: 0x00c0, 0x392f: 0x00c0, - 0x3930: 0x00c0, 0x3931: 0x00c0, 0x3932: 0x00c0, 0x3933: 0x00c3, 0x3934: 0x00c3, 0x3935: 0x00c3, - 0x3936: 0x00c3, 0x3937: 0x00c0, 0x3938: 0x00c0, 0x3939: 0x00c6, 0x393a: 0x00c3, 0x393b: 0x0080, - 0x393c: 0x0080, 0x393d: 0x0040, 0x393e: 0x0080, 0x393f: 0x0080, - // Block 0xe5, offset 0x3940 - 0x3940: 0x0080, 0x3941: 0x0080, - 0x3950: 0x00c0, 0x3951: 0x00c0, - 0x3952: 0x00c0, 0x3953: 0x00c0, 0x3954: 0x00c0, 0x3955: 0x00c0, 0x3956: 0x00c0, 0x3957: 0x00c0, - 0x3958: 0x00c0, 0x3959: 0x00c0, 0x395a: 0x00c0, 0x395b: 0x00c0, 0x395c: 0x00c0, 0x395d: 0x00c0, - 0x395e: 0x00c0, 0x395f: 0x00c0, 0x3960: 0x00c0, 0x3961: 0x00c0, 0x3962: 0x00c0, 0x3963: 0x00c0, - 0x3964: 0x00c0, 0x3965: 0x00c0, 0x3966: 0x00c0, 0x3967: 0x00c0, 0x3968: 0x00c0, - 0x3970: 0x00c0, 0x3971: 0x00c0, 0x3972: 0x00c0, 0x3973: 0x00c0, 0x3974: 0x00c0, 0x3975: 0x00c0, - 0x3976: 0x00c0, 0x3977: 0x00c0, 0x3978: 0x00c0, 0x3979: 0x00c0, - // Block 0xe6, offset 0x3980 - 0x3980: 0x00c3, 0x3981: 0x00c3, 0x3982: 0x00c3, 0x3983: 0x00c0, 0x3984: 0x00c0, 0x3985: 0x00c0, - 0x3986: 0x00c0, 0x3987: 0x00c0, 0x3988: 0x00c0, 0x3989: 0x00c0, 0x398a: 0x00c0, 0x398b: 0x00c0, - 0x398c: 0x00c0, 0x398d: 0x00c0, 0x398e: 0x00c0, 0x398f: 0x00c0, 0x3990: 0x00c0, 0x3991: 0x00c0, - 0x3992: 0x00c0, 0x3993: 0x00c0, 0x3994: 0x00c0, 0x3995: 0x00c0, 0x3996: 0x00c0, 0x3997: 0x00c0, - 0x3998: 0x00c0, 0x3999: 0x00c0, 0x399a: 0x00c0, 0x399b: 0x00c0, 0x399c: 0x00c0, 0x399d: 0x00c0, - 0x399e: 0x00c0, 0x399f: 0x00c0, 0x39a0: 0x00c0, 0x39a1: 0x00c0, 0x39a2: 0x00c0, 0x39a3: 0x00c0, - 0x39a4: 0x00c0, 0x39a5: 0x00c0, 0x39a6: 0x00c0, 0x39a7: 0x00c3, 0x39a8: 0x00c3, 0x39a9: 0x00c3, - 0x39aa: 0x00c3, 0x39ab: 0x00c3, 0x39ac: 0x00c0, 0x39ad: 0x00c3, 0x39ae: 0x00c3, 0x39af: 0x00c3, - 0x39b0: 0x00c3, 0x39b1: 0x00c3, 0x39b2: 0x00c3, 0x39b3: 0x00c6, 0x39b4: 0x00c6, - 0x39b6: 0x00c0, 0x39b7: 0x00c0, 0x39b8: 0x00c0, 0x39b9: 0x00c0, 0x39ba: 0x00c0, 0x39bb: 0x00c0, - 0x39bc: 0x00c0, 0x39bd: 0x00c0, 0x39be: 0x00c0, 0x39bf: 0x00c0, - // Block 0xe7, offset 0x39c0 - 0x39c0: 0x0080, 0x39c1: 0x0080, 0x39c2: 0x0080, 0x39c3: 0x0080, - 0x39d0: 0x00c0, 0x39d1: 0x00c0, - 0x39d2: 0x00c0, 0x39d3: 0x00c0, 0x39d4: 0x00c0, 0x39d5: 0x00c0, 0x39d6: 0x00c0, 0x39d7: 0x00c0, - 0x39d8: 0x00c0, 0x39d9: 0x00c0, 0x39da: 0x00c0, 0x39db: 0x00c0, 0x39dc: 0x00c0, 0x39dd: 0x00c0, - 0x39de: 0x00c0, 0x39df: 0x00c0, 0x39e0: 0x00c0, 0x39e1: 0x00c0, 0x39e2: 0x00c0, 0x39e3: 0x00c0, - 0x39e4: 0x00c0, 0x39e5: 0x00c0, 0x39e6: 0x00c0, 0x39e7: 0x00c0, 0x39e8: 0x00c0, 0x39e9: 0x00c0, - 0x39ea: 0x00c0, 0x39eb: 0x00c0, 0x39ec: 0x00c0, 0x39ed: 0x00c0, 0x39ee: 0x00c0, 0x39ef: 0x00c0, - 0x39f0: 0x00c0, 0x39f1: 0x00c0, 0x39f2: 0x00c0, 0x39f3: 0x00c3, 0x39f4: 0x0080, 0x39f5: 0x0080, - 0x39f6: 0x00c0, - // Block 0xe8, offset 0x3a00 - 0x3a00: 0x00c3, 0x3a01: 0x00c3, 0x3a02: 0x00c0, 0x3a03: 0x00c0, 0x3a04: 0x00c0, 0x3a05: 0x00c0, - 0x3a06: 0x00c0, 0x3a07: 0x00c0, 0x3a08: 0x00c0, 0x3a09: 0x00c0, 0x3a0a: 0x00c0, 0x3a0b: 0x00c0, - 0x3a0c: 0x00c0, 0x3a0d: 0x00c0, 0x3a0e: 0x00c0, 0x3a0f: 0x00c0, 0x3a10: 0x00c0, 0x3a11: 0x00c0, - 0x3a12: 0x00c0, 0x3a13: 0x00c0, 0x3a14: 0x00c0, 0x3a15: 0x00c0, 0x3a16: 0x00c0, 0x3a17: 0x00c0, - 0x3a18: 0x00c0, 0x3a19: 0x00c0, 0x3a1a: 0x00c0, 0x3a1b: 0x00c0, 0x3a1c: 0x00c0, 0x3a1d: 0x00c0, - 0x3a1e: 0x00c0, 0x3a1f: 0x00c0, 0x3a20: 0x00c0, 0x3a21: 0x00c0, 0x3a22: 0x00c0, 0x3a23: 0x00c0, - 0x3a24: 0x00c0, 0x3a25: 0x00c0, 0x3a26: 0x00c0, 0x3a27: 0x00c0, 0x3a28: 0x00c0, 0x3a29: 0x00c0, - 0x3a2a: 0x00c0, 0x3a2b: 0x00c0, 0x3a2c: 0x00c0, 0x3a2d: 0x00c0, 0x3a2e: 0x00c0, 0x3a2f: 0x00c0, - 0x3a30: 0x00c0, 0x3a31: 0x00c0, 0x3a32: 0x00c0, 0x3a33: 0x00c0, 0x3a34: 0x00c0, 0x3a35: 0x00c0, - 0x3a36: 0x00c3, 0x3a37: 0x00c3, 0x3a38: 0x00c3, 0x3a39: 0x00c3, 0x3a3a: 0x00c3, 0x3a3b: 0x00c3, - 0x3a3c: 0x00c3, 0x3a3d: 0x00c3, 0x3a3e: 0x00c3, 0x3a3f: 0x00c0, - // Block 0xe9, offset 0x3a40 - 0x3a40: 0x00c5, 0x3a41: 0x00c0, 0x3a42: 0x00c0, 0x3a43: 0x00c0, 0x3a44: 0x00c0, 0x3a45: 0x0080, - 0x3a46: 0x0080, 0x3a47: 0x0080, 0x3a48: 0x0080, 0x3a49: 0x0080, 0x3a4a: 0x00c3, 0x3a4b: 0x00c3, - 0x3a4c: 0x00c3, 0x3a4d: 0x0080, 0x3a50: 0x00c0, 0x3a51: 0x00c0, - 0x3a52: 0x00c0, 0x3a53: 0x00c0, 0x3a54: 0x00c0, 0x3a55: 0x00c0, 0x3a56: 0x00c0, 0x3a57: 0x00c0, - 0x3a58: 0x00c0, 0x3a59: 0x00c0, 0x3a5a: 0x00c0, 0x3a5b: 0x0080, 0x3a5c: 0x00c0, 0x3a5d: 0x0080, - 0x3a5e: 0x0080, 0x3a5f: 0x0080, 0x3a61: 0x0080, 0x3a62: 0x0080, 0x3a63: 0x0080, - 0x3a64: 0x0080, 0x3a65: 0x0080, 0x3a66: 0x0080, 0x3a67: 0x0080, 0x3a68: 0x0080, 0x3a69: 0x0080, - 0x3a6a: 0x0080, 0x3a6b: 0x0080, 0x3a6c: 0x0080, 0x3a6d: 0x0080, 0x3a6e: 0x0080, 0x3a6f: 0x0080, - 0x3a70: 0x0080, 0x3a71: 0x0080, 0x3a72: 0x0080, 0x3a73: 0x0080, 0x3a74: 0x0080, - // Block 0xea, offset 0x3a80 - 0x3a80: 0x00c0, 0x3a81: 0x00c0, 0x3a82: 0x00c0, 0x3a83: 0x00c0, 0x3a84: 0x00c0, 0x3a85: 0x00c0, - 0x3a86: 0x00c0, 0x3a87: 0x00c0, 0x3a88: 0x00c0, 0x3a89: 0x00c0, 0x3a8a: 0x00c0, 0x3a8b: 0x00c0, - 0x3a8c: 0x00c0, 0x3a8d: 0x00c0, 0x3a8e: 0x00c0, 0x3a8f: 0x00c0, 0x3a90: 0x00c0, 0x3a91: 0x00c0, - 0x3a93: 0x00c0, 0x3a94: 0x00c0, 0x3a95: 0x00c0, 0x3a96: 0x00c0, 0x3a97: 0x00c0, - 0x3a98: 0x00c0, 0x3a99: 0x00c0, 0x3a9a: 0x00c0, 0x3a9b: 0x00c0, 0x3a9c: 0x00c0, 0x3a9d: 0x00c0, - 0x3a9e: 0x00c0, 0x3a9f: 0x00c0, 0x3aa0: 0x00c0, 0x3aa1: 0x00c0, 0x3aa2: 0x00c0, 0x3aa3: 0x00c0, - 0x3aa4: 0x00c0, 0x3aa5: 0x00c0, 0x3aa6: 0x00c0, 0x3aa7: 0x00c0, 0x3aa8: 0x00c0, 0x3aa9: 0x00c0, - 0x3aaa: 0x00c0, 0x3aab: 0x00c0, 0x3aac: 0x00c0, 0x3aad: 0x00c0, 0x3aae: 0x00c0, 0x3aaf: 0x00c3, - 0x3ab0: 0x00c3, 0x3ab1: 0x00c3, 0x3ab2: 0x00c0, 0x3ab3: 0x00c0, 0x3ab4: 0x00c3, 0x3ab5: 0x00c5, - 0x3ab6: 0x00c3, 0x3ab7: 0x00c3, 0x3ab8: 0x0080, 0x3ab9: 0x0080, 0x3aba: 0x0080, 0x3abb: 0x0080, - 0x3abc: 0x0080, 0x3abd: 0x0080, 0x3abe: 0x00c3, - // Block 0xeb, offset 0x3ac0 - 0x3ac0: 0x00c0, 0x3ac1: 0x00c0, 0x3ac2: 0x00c0, 0x3ac3: 0x00c0, 0x3ac4: 0x00c0, 0x3ac5: 0x00c0, - 0x3ac6: 0x00c0, 0x3ac8: 0x00c0, 0x3aca: 0x00c0, 0x3acb: 0x00c0, - 0x3acc: 0x00c0, 0x3acd: 0x00c0, 0x3acf: 0x00c0, 0x3ad0: 0x00c0, 0x3ad1: 0x00c0, - 0x3ad2: 0x00c0, 0x3ad3: 0x00c0, 0x3ad4: 0x00c0, 0x3ad5: 0x00c0, 0x3ad6: 0x00c0, 0x3ad7: 0x00c0, - 0x3ad8: 0x00c0, 0x3ad9: 0x00c0, 0x3ada: 0x00c0, 0x3adb: 0x00c0, 0x3adc: 0x00c0, 0x3add: 0x00c0, - 0x3adf: 0x00c0, 0x3ae0: 0x00c0, 0x3ae1: 0x00c0, 0x3ae2: 0x00c0, 0x3ae3: 0x00c0, - 0x3ae4: 0x00c0, 0x3ae5: 0x00c0, 0x3ae6: 0x00c0, 0x3ae7: 0x00c0, 0x3ae8: 0x00c0, 0x3ae9: 0x0080, - 0x3af0: 0x00c0, 0x3af1: 0x00c0, 0x3af2: 0x00c0, 0x3af3: 0x00c0, 0x3af4: 0x00c0, 0x3af5: 0x00c0, - 0x3af6: 0x00c0, 0x3af7: 0x00c0, 0x3af8: 0x00c0, 0x3af9: 0x00c0, 0x3afa: 0x00c0, 0x3afb: 0x00c0, - 0x3afc: 0x00c0, 0x3afd: 0x00c0, 0x3afe: 0x00c0, 0x3aff: 0x00c0, - // Block 0xec, offset 0x3b00 - 0x3b00: 0x00c0, 0x3b01: 0x00c0, 0x3b02: 0x00c0, 0x3b03: 0x00c0, 0x3b04: 0x00c0, 0x3b05: 0x00c0, - 0x3b06: 0x00c0, 0x3b07: 0x00c0, 0x3b08: 0x00c0, 0x3b09: 0x00c0, 0x3b0a: 0x00c0, 0x3b0b: 0x00c0, - 0x3b0c: 0x00c0, 0x3b0d: 0x00c0, 0x3b0e: 0x00c0, 0x3b0f: 0x00c0, 0x3b10: 0x00c0, 0x3b11: 0x00c0, - 0x3b12: 0x00c0, 0x3b13: 0x00c0, 0x3b14: 0x00c0, 0x3b15: 0x00c0, 0x3b16: 0x00c0, 0x3b17: 0x00c0, - 0x3b18: 0x00c0, 0x3b19: 0x00c0, 0x3b1a: 0x00c0, 0x3b1b: 0x00c0, 0x3b1c: 0x00c0, 0x3b1d: 0x00c0, - 0x3b1e: 0x00c0, 0x3b1f: 0x00c3, 0x3b20: 0x00c0, 0x3b21: 0x00c0, 0x3b22: 0x00c0, 0x3b23: 0x00c3, - 0x3b24: 0x00c3, 0x3b25: 0x00c3, 0x3b26: 0x00c3, 0x3b27: 0x00c3, 0x3b28: 0x00c3, 0x3b29: 0x00c3, - 0x3b2a: 0x00c6, - 0x3b30: 0x00c0, 0x3b31: 0x00c0, 0x3b32: 0x00c0, 0x3b33: 0x00c0, 0x3b34: 0x00c0, 0x3b35: 0x00c0, - 0x3b36: 0x00c0, 0x3b37: 0x00c0, 0x3b38: 0x00c0, 0x3b39: 0x00c0, - // Block 0xed, offset 0x3b40 - 0x3b40: 0x00c3, 0x3b41: 0x00c3, 0x3b42: 0x00c0, 0x3b43: 0x00c0, 0x3b45: 0x00c0, - 0x3b46: 0x00c0, 0x3b47: 0x00c0, 0x3b48: 0x00c0, 0x3b49: 0x00c0, 0x3b4a: 0x00c0, 0x3b4b: 0x00c0, - 0x3b4c: 0x00c0, 0x3b4f: 0x00c0, 0x3b50: 0x00c0, - 0x3b53: 0x00c0, 0x3b54: 0x00c0, 0x3b55: 0x00c0, 0x3b56: 0x00c0, 0x3b57: 0x00c0, - 0x3b58: 0x00c0, 0x3b59: 0x00c0, 0x3b5a: 0x00c0, 0x3b5b: 0x00c0, 0x3b5c: 0x00c0, 0x3b5d: 0x00c0, - 0x3b5e: 0x00c0, 0x3b5f: 0x00c0, 0x3b60: 0x00c0, 0x3b61: 0x00c0, 0x3b62: 0x00c0, 0x3b63: 0x00c0, - 0x3b64: 0x00c0, 0x3b65: 0x00c0, 0x3b66: 0x00c0, 0x3b67: 0x00c0, 0x3b68: 0x00c0, - 0x3b6a: 0x00c0, 0x3b6b: 0x00c0, 0x3b6c: 0x00c0, 0x3b6d: 0x00c0, 0x3b6e: 0x00c0, 0x3b6f: 0x00c0, - 0x3b70: 0x00c0, 0x3b72: 0x00c0, 0x3b73: 0x00c0, 0x3b75: 0x00c0, - 0x3b76: 0x00c0, 0x3b77: 0x00c0, 0x3b78: 0x00c0, 0x3b79: 0x00c0, - 0x3b7c: 0x00c3, 0x3b7d: 0x00c0, 0x3b7e: 0x00c0, 0x3b7f: 0x00c0, - // Block 0xee, offset 0x3b80 - 0x3b80: 0x00c3, 0x3b81: 0x00c0, 0x3b82: 0x00c0, 0x3b83: 0x00c0, 0x3b84: 0x00c0, - 0x3b87: 0x00c0, 0x3b88: 0x00c0, 0x3b8b: 0x00c0, - 0x3b8c: 0x00c0, 0x3b8d: 0x00c5, 0x3b90: 0x00c0, - 0x3b97: 0x00c0, - 0x3b9d: 0x00c0, - 0x3b9e: 0x00c0, 0x3b9f: 0x00c0, 0x3ba0: 0x00c0, 0x3ba1: 0x00c0, 0x3ba2: 0x00c0, 0x3ba3: 0x00c0, - 0x3ba6: 0x00c3, 0x3ba7: 0x00c3, 0x3ba8: 0x00c3, 0x3ba9: 0x00c3, - 0x3baa: 0x00c3, 0x3bab: 0x00c3, 0x3bac: 0x00c3, - 0x3bb0: 0x00c3, 0x3bb1: 0x00c3, 0x3bb2: 0x00c3, 0x3bb3: 0x00c3, 0x3bb4: 0x00c3, - // Block 0xef, offset 0x3bc0 - 0x3bc0: 0x00c0, 0x3bc1: 0x00c0, 0x3bc2: 0x00c0, 0x3bc3: 0x00c0, 0x3bc4: 0x00c0, 0x3bc5: 0x00c0, - 0x3bc6: 0x00c0, 0x3bc7: 0x00c0, 0x3bc8: 0x00c0, 0x3bc9: 0x00c0, 0x3bca: 0x00c0, 0x3bcb: 0x00c0, - 0x3bcc: 0x00c0, 0x3bcd: 0x00c0, 0x3bce: 0x00c0, 0x3bcf: 0x00c0, 0x3bd0: 0x00c0, 0x3bd1: 0x00c0, - 0x3bd2: 0x00c0, 0x3bd3: 0x00c0, 0x3bd4: 0x00c0, 0x3bd5: 0x00c0, 0x3bd6: 0x00c0, 0x3bd7: 0x00c0, - 0x3bd8: 0x00c0, 0x3bd9: 0x00c0, 0x3bda: 0x00c0, 0x3bdb: 0x00c0, 0x3bdc: 0x00c0, 0x3bdd: 0x00c0, - 0x3bde: 0x00c0, 0x3bdf: 0x00c0, 0x3be0: 0x00c0, 0x3be1: 0x00c0, 0x3be2: 0x00c0, 0x3be3: 0x00c0, - 0x3be4: 0x00c0, 0x3be5: 0x00c0, 0x3be6: 0x00c0, 0x3be7: 0x00c0, 0x3be8: 0x00c0, 0x3be9: 0x00c0, - 0x3bea: 0x00c0, 0x3beb: 0x00c0, 0x3bec: 0x00c0, 0x3bed: 0x00c0, 0x3bee: 0x00c0, 0x3bef: 0x00c0, - 0x3bf0: 0x00c0, 0x3bf1: 0x00c0, 0x3bf2: 0x00c0, 0x3bf3: 0x00c0, 0x3bf4: 0x00c0, 0x3bf5: 0x00c0, - 0x3bf6: 0x00c0, 0x3bf7: 0x00c0, 0x3bf8: 0x00c3, 0x3bf9: 0x00c3, 0x3bfa: 0x00c3, 0x3bfb: 0x00c3, - 0x3bfc: 0x00c3, 0x3bfd: 0x00c3, 0x3bfe: 0x00c3, 0x3bff: 0x00c3, - // Block 0xf0, offset 0x3c00 - 0x3c00: 0x00c0, 0x3c01: 0x00c0, 0x3c02: 0x00c6, 0x3c03: 0x00c3, 0x3c04: 0x00c3, 0x3c05: 0x00c0, - 0x3c06: 0x00c3, 0x3c07: 0x00c0, 0x3c08: 0x00c0, 0x3c09: 0x00c0, 0x3c0a: 0x00c0, 0x3c0b: 0x0080, - 0x3c0c: 0x0080, 0x3c0d: 0x0080, 0x3c0e: 0x0080, 0x3c0f: 0x0080, 0x3c10: 0x00c0, 0x3c11: 0x00c0, - 0x3c12: 0x00c0, 0x3c13: 0x00c0, 0x3c14: 0x00c0, 0x3c15: 0x00c0, 0x3c16: 0x00c0, 0x3c17: 0x00c0, - 0x3c18: 0x00c0, 0x3c19: 0x00c0, 0x3c1b: 0x0080, 0x3c1d: 0x0080, - // Block 0xf1, offset 0x3c40 - 0x3c40: 0x00c0, 0x3c41: 0x00c0, 0x3c42: 0x00c0, 0x3c43: 0x00c0, 0x3c44: 0x00c0, 0x3c45: 0x00c0, - 0x3c46: 0x00c0, 0x3c47: 0x00c0, 0x3c48: 0x00c0, 0x3c49: 0x00c0, 0x3c4a: 0x00c0, 0x3c4b: 0x00c0, - 0x3c4c: 0x00c0, 0x3c4d: 0x00c0, 0x3c4e: 0x00c0, 0x3c4f: 0x00c0, 0x3c50: 0x00c0, 0x3c51: 0x00c0, - 0x3c52: 0x00c0, 0x3c53: 0x00c0, 0x3c54: 0x00c0, 0x3c55: 0x00c0, 0x3c56: 0x00c0, 0x3c57: 0x00c0, - 0x3c58: 0x00c0, 0x3c59: 0x00c0, 0x3c5a: 0x00c0, 0x3c5b: 0x00c0, 0x3c5c: 0x00c0, 0x3c5d: 0x00c0, - 0x3c5e: 0x00c0, 0x3c5f: 0x00c0, 0x3c60: 0x00c0, 0x3c61: 0x00c0, 0x3c62: 0x00c0, 0x3c63: 0x00c0, - 0x3c64: 0x00c0, 0x3c65: 0x00c0, 0x3c66: 0x00c0, 0x3c67: 0x00c0, 0x3c68: 0x00c0, 0x3c69: 0x00c0, - 0x3c6a: 0x00c0, 0x3c6b: 0x00c0, 0x3c6c: 0x00c0, 0x3c6d: 0x00c0, 0x3c6e: 0x00c0, 0x3c6f: 0x00c0, - 0x3c70: 0x00c0, 0x3c71: 0x00c0, 0x3c72: 0x00c0, 0x3c73: 0x00c3, 0x3c74: 0x00c3, 0x3c75: 0x00c3, - 0x3c76: 0x00c3, 0x3c77: 0x00c3, 0x3c78: 0x00c3, 0x3c79: 0x00c0, 0x3c7a: 0x00c3, 0x3c7b: 0x00c0, - 0x3c7c: 0x00c0, 0x3c7d: 0x00c0, 0x3c7e: 0x00c0, 0x3c7f: 0x00c3, - // Block 0xf2, offset 0x3c80 - 0x3c80: 0x00c3, 0x3c81: 0x00c0, 0x3c82: 0x00c6, 0x3c83: 0x00c3, 0x3c84: 0x00c0, 0x3c85: 0x00c0, - 0x3c86: 0x0080, 0x3c87: 0x00c0, - 0x3c90: 0x00c0, 0x3c91: 0x00c0, - 0x3c92: 0x00c0, 0x3c93: 0x00c0, 0x3c94: 0x00c0, 0x3c95: 0x00c0, 0x3c96: 0x00c0, 0x3c97: 0x00c0, - 0x3c98: 0x00c0, 0x3c99: 0x00c0, - // Block 0xf3, offset 0x3cc0 - 0x3cc0: 0x00c0, 0x3cc1: 0x00c0, 0x3cc2: 0x00c0, 0x3cc3: 0x00c0, 0x3cc4: 0x00c0, 0x3cc5: 0x00c0, - 0x3cc6: 0x00c0, 0x3cc7: 0x00c0, 0x3cc8: 0x00c0, 0x3cc9: 0x00c0, 0x3cca: 0x00c0, 0x3ccb: 0x00c0, - 0x3ccc: 0x00c0, 0x3ccd: 0x00c0, 0x3cce: 0x00c0, 0x3ccf: 0x00c0, 0x3cd0: 0x00c0, 0x3cd1: 0x00c0, - 0x3cd2: 0x00c0, 0x3cd3: 0x00c0, 0x3cd4: 0x00c0, 0x3cd5: 0x00c0, 0x3cd6: 0x00c0, 0x3cd7: 0x00c0, - 0x3cd8: 0x00c0, 0x3cd9: 0x00c0, 0x3cda: 0x00c0, 0x3cdb: 0x00c0, 0x3cdc: 0x00c0, 0x3cdd: 0x00c0, - 0x3cde: 0x00c0, 0x3cdf: 0x00c0, 0x3ce0: 0x00c0, 0x3ce1: 0x00c0, 0x3ce2: 0x00c0, 0x3ce3: 0x00c0, - 0x3ce4: 0x00c0, 0x3ce5: 0x00c0, 0x3ce6: 0x00c0, 0x3ce7: 0x00c0, 0x3ce8: 0x00c0, 0x3ce9: 0x00c0, - 0x3cea: 0x00c0, 0x3ceb: 0x00c0, 0x3cec: 0x00c0, 0x3ced: 0x00c0, 0x3cee: 0x00c0, 0x3cef: 0x00c0, - 0x3cf0: 0x00c0, 0x3cf1: 0x00c0, 0x3cf2: 0x00c3, 0x3cf3: 0x00c3, 0x3cf4: 0x00c3, 0x3cf5: 0x00c3, - 0x3cf8: 0x00c0, 0x3cf9: 0x00c0, 0x3cfa: 0x00c0, 0x3cfb: 0x00c0, - 0x3cfc: 0x00c3, 0x3cfd: 0x00c3, 0x3cfe: 0x00c0, 0x3cff: 0x00c6, - // Block 0xf4, offset 0x3d00 - 0x3d00: 0x00c3, 0x3d01: 0x0080, 0x3d02: 0x0080, 0x3d03: 0x0080, 0x3d04: 0x0080, 0x3d05: 0x0080, - 0x3d06: 0x0080, 0x3d07: 0x0080, 0x3d08: 0x0080, 0x3d09: 0x0080, 0x3d0a: 0x0080, 0x3d0b: 0x0080, - 0x3d0c: 0x0080, 0x3d0d: 0x0080, 0x3d0e: 0x0080, 0x3d0f: 0x0080, 0x3d10: 0x0080, 0x3d11: 0x0080, - 0x3d12: 0x0080, 0x3d13: 0x0080, 0x3d14: 0x0080, 0x3d15: 0x0080, 0x3d16: 0x0080, 0x3d17: 0x0080, - 0x3d18: 0x00c0, 0x3d19: 0x00c0, 0x3d1a: 0x00c0, 0x3d1b: 0x00c0, 0x3d1c: 0x00c3, 0x3d1d: 0x00c3, - // Block 0xf5, offset 0x3d40 - 0x3d40: 0x00c0, 0x3d41: 0x00c0, 0x3d42: 0x00c0, 0x3d43: 0x00c0, 0x3d44: 0x00c0, 0x3d45: 0x00c0, - 0x3d46: 0x00c0, 0x3d47: 0x00c0, 0x3d48: 0x00c0, 0x3d49: 0x00c0, 0x3d4a: 0x00c0, 0x3d4b: 0x00c0, - 0x3d4c: 0x00c0, 0x3d4d: 0x00c0, 0x3d4e: 0x00c0, 0x3d4f: 0x00c0, 0x3d50: 0x00c0, 0x3d51: 0x00c0, - 0x3d52: 0x00c0, 0x3d53: 0x00c0, 0x3d54: 0x00c0, 0x3d55: 0x00c0, 0x3d56: 0x00c0, 0x3d57: 0x00c0, - 0x3d58: 0x00c0, 0x3d59: 0x00c0, 0x3d5a: 0x00c0, 0x3d5b: 0x00c0, 0x3d5c: 0x00c0, 0x3d5d: 0x00c0, - 0x3d5e: 0x00c0, 0x3d5f: 0x00c0, 0x3d60: 0x00c0, 0x3d61: 0x00c0, 0x3d62: 0x00c0, 0x3d63: 0x00c0, - 0x3d64: 0x00c0, 0x3d65: 0x00c0, 0x3d66: 0x00c0, 0x3d67: 0x00c0, 0x3d68: 0x00c0, 0x3d69: 0x00c0, - 0x3d6a: 0x00c0, 0x3d6b: 0x00c0, 0x3d6c: 0x00c0, 0x3d6d: 0x00c0, 0x3d6e: 0x00c0, 0x3d6f: 0x00c0, - 0x3d70: 0x00c0, 0x3d71: 0x00c0, 0x3d72: 0x00c0, 0x3d73: 0x00c3, 0x3d74: 0x00c3, 0x3d75: 0x00c3, - 0x3d76: 0x00c3, 0x3d77: 0x00c3, 0x3d78: 0x00c3, 0x3d79: 0x00c3, 0x3d7a: 0x00c3, 0x3d7b: 0x00c0, - 0x3d7c: 0x00c0, 0x3d7d: 0x00c3, 0x3d7e: 0x00c0, 0x3d7f: 0x00c6, - // Block 0xf6, offset 0x3d80 - 0x3d80: 0x00c3, 0x3d81: 0x0080, 0x3d82: 0x0080, 0x3d83: 0x0080, 0x3d84: 0x00c0, - 0x3d90: 0x00c0, 0x3d91: 0x00c0, - 0x3d92: 0x00c0, 0x3d93: 0x00c0, 0x3d94: 0x00c0, 0x3d95: 0x00c0, 0x3d96: 0x00c0, 0x3d97: 0x00c0, - 0x3d98: 0x00c0, 0x3d99: 0x00c0, - 0x3da0: 0x0080, 0x3da1: 0x0080, 0x3da2: 0x0080, 0x3da3: 0x0080, - 0x3da4: 0x0080, 0x3da5: 0x0080, 0x3da6: 0x0080, 0x3da7: 0x0080, 0x3da8: 0x0080, 0x3da9: 0x0080, - 0x3daa: 0x0080, 0x3dab: 0x0080, 0x3dac: 0x0080, - // Block 0xf7, offset 0x3dc0 - 0x3dc0: 0x00c0, 0x3dc1: 0x00c0, 0x3dc2: 0x00c0, 0x3dc3: 0x00c0, 0x3dc4: 0x00c0, 0x3dc5: 0x00c0, - 0x3dc6: 0x00c0, 0x3dc7: 0x00c0, 0x3dc8: 0x00c0, 0x3dc9: 0x00c0, 0x3dca: 0x00c0, 0x3dcb: 0x00c0, - 0x3dcc: 0x00c0, 0x3dcd: 0x00c0, 0x3dce: 0x00c0, 0x3dcf: 0x00c0, 0x3dd0: 0x00c0, 0x3dd1: 0x00c0, - 0x3dd2: 0x00c0, 0x3dd3: 0x00c0, 0x3dd4: 0x00c0, 0x3dd5: 0x00c0, 0x3dd6: 0x00c0, 0x3dd7: 0x00c0, - 0x3dd8: 0x00c0, 0x3dd9: 0x00c0, 0x3dda: 0x00c0, 0x3ddb: 0x00c0, 0x3ddc: 0x00c0, 0x3ddd: 0x00c0, - 0x3dde: 0x00c0, 0x3ddf: 0x00c0, 0x3de0: 0x00c0, 0x3de1: 0x00c0, 0x3de2: 0x00c0, 0x3de3: 0x00c0, - 0x3de4: 0x00c0, 0x3de5: 0x00c0, 0x3de6: 0x00c0, 0x3de7: 0x00c0, 0x3de8: 0x00c0, 0x3de9: 0x00c0, - 0x3dea: 0x00c0, 0x3deb: 0x00c3, 0x3dec: 0x00c0, 0x3ded: 0x00c3, 0x3dee: 0x00c0, 0x3def: 0x00c0, - 0x3df0: 0x00c3, 0x3df1: 0x00c3, 0x3df2: 0x00c3, 0x3df3: 0x00c3, 0x3df4: 0x00c3, 0x3df5: 0x00c3, - 0x3df6: 0x00c5, 0x3df7: 0x00c3, - // Block 0xf8, offset 0x3e00 - 0x3e00: 0x00c0, 0x3e01: 0x00c0, 0x3e02: 0x00c0, 0x3e03: 0x00c0, 0x3e04: 0x00c0, 0x3e05: 0x00c0, - 0x3e06: 0x00c0, 0x3e07: 0x00c0, 0x3e08: 0x00c0, 0x3e09: 0x00c0, - // Block 0xf9, offset 0x3e40 - 0x3e40: 0x00c0, 0x3e41: 0x00c0, 0x3e42: 0x00c0, 0x3e43: 0x00c0, 0x3e44: 0x00c0, 0x3e45: 0x00c0, - 0x3e46: 0x00c0, 0x3e47: 0x00c0, 0x3e48: 0x00c0, 0x3e49: 0x00c0, 0x3e4a: 0x00c0, 0x3e4b: 0x00c0, - 0x3e4c: 0x00c0, 0x3e4d: 0x00c0, 0x3e4e: 0x00c0, 0x3e4f: 0x00c0, 0x3e50: 0x00c0, 0x3e51: 0x00c0, - 0x3e52: 0x00c0, 0x3e53: 0x00c0, 0x3e54: 0x00c0, 0x3e55: 0x00c0, 0x3e56: 0x00c0, 0x3e57: 0x00c0, - 0x3e58: 0x00c0, 0x3e59: 0x00c0, 0x3e5d: 0x00c3, - 0x3e5e: 0x00c3, 0x3e5f: 0x00c3, 0x3e60: 0x00c0, 0x3e61: 0x00c0, 0x3e62: 0x00c3, 0x3e63: 0x00c3, - 0x3e64: 0x00c3, 0x3e65: 0x00c3, 0x3e66: 0x00c0, 0x3e67: 0x00c3, 0x3e68: 0x00c3, 0x3e69: 0x00c3, - 0x3e6a: 0x00c3, 0x3e6b: 0x00c6, - 0x3e70: 0x00c0, 0x3e71: 0x00c0, 0x3e72: 0x00c0, 0x3e73: 0x00c0, 0x3e74: 0x00c0, 0x3e75: 0x00c0, - 0x3e76: 0x00c0, 0x3e77: 0x00c0, 0x3e78: 0x00c0, 0x3e79: 0x00c0, 0x3e7a: 0x0080, 0x3e7b: 0x0080, - 0x3e7c: 0x0080, 0x3e7d: 0x0080, 0x3e7e: 0x0080, 0x3e7f: 0x0080, - // Block 0xfa, offset 0x3e80 - 0x3ea0: 0x00c0, 0x3ea1: 0x00c0, 0x3ea2: 0x00c0, 0x3ea3: 0x00c0, - 0x3ea4: 0x00c0, 0x3ea5: 0x00c0, 0x3ea6: 0x00c0, 0x3ea7: 0x00c0, 0x3ea8: 0x00c0, 0x3ea9: 0x00c0, - 0x3eaa: 0x00c0, 0x3eab: 0x00c0, 0x3eac: 0x00c0, 0x3ead: 0x00c0, 0x3eae: 0x00c0, 0x3eaf: 0x00c0, - 0x3eb0: 0x00c0, 0x3eb1: 0x00c0, 0x3eb2: 0x00c0, 0x3eb3: 0x00c0, 0x3eb4: 0x00c0, 0x3eb5: 0x00c0, - 0x3eb6: 0x00c0, 0x3eb7: 0x00c0, 0x3eb8: 0x00c0, 0x3eb9: 0x00c0, 0x3eba: 0x00c0, 0x3ebb: 0x00c0, - 0x3ebc: 0x00c0, 0x3ebd: 0x00c0, 0x3ebe: 0x00c0, 0x3ebf: 0x00c0, - // Block 0xfb, offset 0x3ec0 - 0x3ec0: 0x00c0, 0x3ec1: 0x00c0, 0x3ec2: 0x00c0, 0x3ec3: 0x00c0, 0x3ec4: 0x00c0, 0x3ec5: 0x00c0, - 0x3ec6: 0x00c0, 0x3ec7: 0x00c0, 0x3ec8: 0x00c0, 0x3ec9: 0x00c0, 0x3eca: 0x00c0, 0x3ecb: 0x00c0, - 0x3ecc: 0x00c0, 0x3ecd: 0x00c0, 0x3ece: 0x00c0, 0x3ecf: 0x00c0, 0x3ed0: 0x00c0, 0x3ed1: 0x00c0, - 0x3ed2: 0x00c0, 0x3ed3: 0x00c0, 0x3ed4: 0x00c0, 0x3ed5: 0x00c0, 0x3ed6: 0x00c0, 0x3ed7: 0x00c0, - 0x3ed8: 0x00c0, 0x3ed9: 0x00c0, 0x3eda: 0x00c0, 0x3edb: 0x00c0, 0x3edc: 0x00c0, 0x3edd: 0x00c0, - 0x3ede: 0x00c0, 0x3edf: 0x00c0, 0x3ee0: 0x00c0, 0x3ee1: 0x00c0, 0x3ee2: 0x00c0, 0x3ee3: 0x00c0, - 0x3ee4: 0x00c0, 0x3ee5: 0x00c0, 0x3ee6: 0x00c0, 0x3ee7: 0x00c0, 0x3ee8: 0x00c0, 0x3ee9: 0x00c0, - 0x3eea: 0x0080, 0x3eeb: 0x0080, 0x3eec: 0x0080, 0x3eed: 0x0080, 0x3eee: 0x0080, 0x3eef: 0x0080, - 0x3ef0: 0x0080, 0x3ef1: 0x0080, 0x3ef2: 0x0080, - 0x3eff: 0x00c0, - // Block 0xfc, offset 0x3f00 - 0x3f00: 0x00c0, 0x3f01: 0x00c0, 0x3f02: 0x00c0, 0x3f03: 0x00c0, 0x3f04: 0x00c0, 0x3f05: 0x00c0, - 0x3f06: 0x00c0, 0x3f07: 0x00c0, 0x3f08: 0x00c0, 0x3f09: 0x00c0, 0x3f0a: 0x00c0, 0x3f0b: 0x00c0, - 0x3f0c: 0x00c0, 0x3f0d: 0x00c0, 0x3f0e: 0x00c0, 0x3f0f: 0x00c0, 0x3f10: 0x00c0, 0x3f11: 0x00c0, - 0x3f12: 0x00c0, 0x3f13: 0x00c0, 0x3f14: 0x00c0, 0x3f15: 0x00c0, 0x3f16: 0x00c0, 0x3f17: 0x00c0, - 0x3f18: 0x00c0, 0x3f19: 0x00c0, 0x3f1a: 0x00c0, 0x3f1b: 0x00c0, 0x3f1c: 0x00c0, 0x3f1d: 0x00c0, - 0x3f1e: 0x00c0, 0x3f1f: 0x00c0, 0x3f20: 0x00c0, 0x3f21: 0x00c0, 0x3f22: 0x00c0, 0x3f23: 0x00c0, - 0x3f24: 0x00c0, 0x3f25: 0x00c0, 0x3f26: 0x00c0, 0x3f27: 0x00c0, 0x3f28: 0x00c0, 0x3f29: 0x00c0, - 0x3f2a: 0x00c0, 0x3f2b: 0x00c0, 0x3f2c: 0x00c0, 0x3f2d: 0x00c0, 0x3f2e: 0x00c0, 0x3f2f: 0x00c0, - 0x3f30: 0x00c0, 0x3f31: 0x00c0, 0x3f32: 0x00c0, 0x3f33: 0x00c0, 0x3f34: 0x00c0, 0x3f35: 0x00c0, - 0x3f36: 0x00c0, 0x3f37: 0x00c0, 0x3f38: 0x00c0, - // Block 0xfd, offset 0x3f40 - 0x3f40: 0x00c0, 0x3f41: 0x00c0, 0x3f42: 0x00c0, 0x3f43: 0x00c0, 0x3f44: 0x00c0, 0x3f45: 0x00c0, - 0x3f46: 0x00c0, 0x3f47: 0x00c0, 0x3f48: 0x00c0, 0x3f4a: 0x00c0, 0x3f4b: 0x00c0, - 0x3f4c: 0x00c0, 0x3f4d: 0x00c0, 0x3f4e: 0x00c0, 0x3f4f: 0x00c0, 0x3f50: 0x00c0, 0x3f51: 0x00c0, - 0x3f52: 0x00c0, 0x3f53: 0x00c0, 0x3f54: 0x00c0, 0x3f55: 0x00c0, 0x3f56: 0x00c0, 0x3f57: 0x00c0, - 0x3f58: 0x00c0, 0x3f59: 0x00c0, 0x3f5a: 0x00c0, 0x3f5b: 0x00c0, 0x3f5c: 0x00c0, 0x3f5d: 0x00c0, - 0x3f5e: 0x00c0, 0x3f5f: 0x00c0, 0x3f60: 0x00c0, 0x3f61: 0x00c0, 0x3f62: 0x00c0, 0x3f63: 0x00c0, - 0x3f64: 0x00c0, 0x3f65: 0x00c0, 0x3f66: 0x00c0, 0x3f67: 0x00c0, 0x3f68: 0x00c0, 0x3f69: 0x00c0, - 0x3f6a: 0x00c0, 0x3f6b: 0x00c0, 0x3f6c: 0x00c0, 0x3f6d: 0x00c0, 0x3f6e: 0x00c0, 0x3f6f: 0x00c0, - 0x3f70: 0x00c3, 0x3f71: 0x00c3, 0x3f72: 0x00c3, 0x3f73: 0x00c3, 0x3f74: 0x00c3, 0x3f75: 0x00c3, - 0x3f76: 0x00c3, 0x3f78: 0x00c3, 0x3f79: 0x00c3, 0x3f7a: 0x00c3, 0x3f7b: 0x00c3, - 0x3f7c: 0x00c3, 0x3f7d: 0x00c3, 0x3f7e: 0x00c0, 0x3f7f: 0x00c6, - // Block 0xfe, offset 0x3f80 - 0x3f80: 0x00c0, 0x3f81: 0x0080, 0x3f82: 0x0080, 0x3f83: 0x0080, 0x3f84: 0x0080, 0x3f85: 0x0080, - 0x3f90: 0x00c0, 0x3f91: 0x00c0, - 0x3f92: 0x00c0, 0x3f93: 0x00c0, 0x3f94: 0x00c0, 0x3f95: 0x00c0, 0x3f96: 0x00c0, 0x3f97: 0x00c0, - 0x3f98: 0x00c0, 0x3f99: 0x00c0, 0x3f9a: 0x0080, 0x3f9b: 0x0080, 0x3f9c: 0x0080, 0x3f9d: 0x0080, - 0x3f9e: 0x0080, 0x3f9f: 0x0080, 0x3fa0: 0x0080, 0x3fa1: 0x0080, 0x3fa2: 0x0080, 0x3fa3: 0x0080, - 0x3fa4: 0x0080, 0x3fa5: 0x0080, 0x3fa6: 0x0080, 0x3fa7: 0x0080, 0x3fa8: 0x0080, 0x3fa9: 0x0080, - 0x3faa: 0x0080, 0x3fab: 0x0080, 0x3fac: 0x0080, - 0x3fb0: 0x0080, 0x3fb1: 0x0080, 0x3fb2: 0x00c0, 0x3fb3: 0x00c0, 0x3fb4: 0x00c0, 0x3fb5: 0x00c0, - 0x3fb6: 0x00c0, 0x3fb7: 0x00c0, 0x3fb8: 0x00c0, 0x3fb9: 0x00c0, 0x3fba: 0x00c0, 0x3fbb: 0x00c0, - 0x3fbc: 0x00c0, 0x3fbd: 0x00c0, 0x3fbe: 0x00c0, 0x3fbf: 0x00c0, - // Block 0xff, offset 0x3fc0 - 0x3fc0: 0x00c0, 0x3fc1: 0x00c0, 0x3fc2: 0x00c0, 0x3fc3: 0x00c0, 0x3fc4: 0x00c0, 0x3fc5: 0x00c0, - 0x3fc6: 0x00c0, 0x3fc7: 0x00c0, 0x3fc8: 0x00c0, 0x3fc9: 0x00c0, 0x3fca: 0x00c0, 0x3fcb: 0x00c0, - 0x3fcc: 0x00c0, 0x3fcd: 0x00c0, 0x3fce: 0x00c0, 0x3fcf: 0x00c0, - 0x3fd2: 0x00c3, 0x3fd3: 0x00c3, 0x3fd4: 0x00c3, 0x3fd5: 0x00c3, 0x3fd6: 0x00c3, 0x3fd7: 0x00c3, - 0x3fd8: 0x00c3, 0x3fd9: 0x00c3, 0x3fda: 0x00c3, 0x3fdb: 0x00c3, 0x3fdc: 0x00c3, 0x3fdd: 0x00c3, - 0x3fde: 0x00c3, 0x3fdf: 0x00c3, 0x3fe0: 0x00c3, 0x3fe1: 0x00c3, 0x3fe2: 0x00c3, 0x3fe3: 0x00c3, - 0x3fe4: 0x00c3, 0x3fe5: 0x00c3, 0x3fe6: 0x00c3, 0x3fe7: 0x00c3, 0x3fe9: 0x00c0, - 0x3fea: 0x00c3, 0x3feb: 0x00c3, 0x3fec: 0x00c3, 0x3fed: 0x00c3, 0x3fee: 0x00c3, 0x3fef: 0x00c3, - 0x3ff0: 0x00c3, 0x3ff1: 0x00c0, 0x3ff2: 0x00c3, 0x3ff3: 0x00c3, 0x3ff4: 0x00c0, 0x3ff5: 0x00c3, - 0x3ff6: 0x00c3, - // Block 0x100, offset 0x4000 - 0x4000: 0x00c0, 0x4001: 0x00c0, 0x4002: 0x00c0, 0x4003: 0x00c0, 0x4004: 0x00c0, 0x4005: 0x00c0, - 0x4006: 0x00c0, 0x4007: 0x00c0, 0x4008: 0x00c0, 0x4009: 0x00c0, 0x400a: 0x00c0, 0x400b: 0x00c0, - 0x400c: 0x00c0, 0x400d: 0x00c0, 0x400e: 0x00c0, 0x400f: 0x00c0, 0x4010: 0x00c0, 0x4011: 0x00c0, - 0x4012: 0x00c0, 0x4013: 0x00c0, 0x4014: 0x00c0, 0x4015: 0x00c0, 0x4016: 0x00c0, 0x4017: 0x00c0, - 0x4018: 0x00c0, 0x4019: 0x00c0, - // Block 0x101, offset 0x4040 - 0x4040: 0x0080, 0x4041: 0x0080, 0x4042: 0x0080, 0x4043: 0x0080, 0x4044: 0x0080, 0x4045: 0x0080, - 0x4046: 0x0080, 0x4047: 0x0080, 0x4048: 0x0080, 0x4049: 0x0080, 0x404a: 0x0080, 0x404b: 0x0080, - 0x404c: 0x0080, 0x404d: 0x0080, 0x404e: 0x0080, 0x404f: 0x0080, 0x4050: 0x0080, 0x4051: 0x0080, - 0x4052: 0x0080, 0x4053: 0x0080, 0x4054: 0x0080, 0x4055: 0x0080, 0x4056: 0x0080, 0x4057: 0x0080, - 0x4058: 0x0080, 0x4059: 0x0080, 0x405a: 0x0080, 0x405b: 0x0080, 0x405c: 0x0080, 0x405d: 0x0080, - 0x405e: 0x0080, 0x405f: 0x0080, 0x4060: 0x0080, 0x4061: 0x0080, 0x4062: 0x0080, 0x4063: 0x0080, - 0x4064: 0x0080, 0x4065: 0x0080, 0x4066: 0x0080, 0x4067: 0x0080, 0x4068: 0x0080, 0x4069: 0x0080, - 0x406a: 0x0080, 0x406b: 0x0080, 0x406c: 0x0080, 0x406d: 0x0080, 0x406e: 0x0080, - 0x4070: 0x0080, 0x4071: 0x0080, 0x4072: 0x0080, 0x4073: 0x0080, 0x4074: 0x0080, - // Block 0x102, offset 0x4080 - 0x4080: 0x00c0, 0x4081: 0x00c0, 0x4082: 0x00c0, 0x4083: 0x00c0, - // Block 0x103, offset 0x40c0 - 0x40c0: 0x00c0, 0x40c1: 0x00c0, 0x40c2: 0x00c0, 0x40c3: 0x00c0, 0x40c4: 0x00c0, 0x40c5: 0x00c0, - 0x40c6: 0x00c0, 0x40c7: 0x00c0, 0x40c8: 0x00c0, 0x40c9: 0x00c0, 0x40ca: 0x00c0, 0x40cb: 0x00c0, - 0x40cc: 0x00c0, 0x40cd: 0x00c0, 0x40ce: 0x00c0, 0x40cf: 0x00c0, 0x40d0: 0x00c0, 0x40d1: 0x00c0, - 0x40d2: 0x00c0, 0x40d3: 0x00c0, 0x40d4: 0x00c0, 0x40d5: 0x00c0, 0x40d6: 0x00c0, 0x40d7: 0x00c0, - 0x40d8: 0x00c0, 0x40d9: 0x00c0, 0x40da: 0x00c0, 0x40db: 0x00c0, 0x40dc: 0x00c0, 0x40dd: 0x00c0, - 0x40de: 0x00c0, 0x40df: 0x00c0, 0x40e0: 0x00c0, 0x40e1: 0x00c0, 0x40e2: 0x00c0, 0x40e3: 0x00c0, - 0x40e4: 0x00c0, 0x40e5: 0x00c0, 0x40e6: 0x00c0, 0x40e7: 0x00c0, 0x40e8: 0x00c0, 0x40e9: 0x00c0, - 0x40ea: 0x00c0, 0x40eb: 0x00c0, 0x40ec: 0x00c0, 0x40ed: 0x00c0, 0x40ee: 0x00c0, - // Block 0x104, offset 0x4100 - 0x4100: 0x00c0, 0x4101: 0x00c0, 0x4102: 0x00c0, 0x4103: 0x00c0, 0x4104: 0x00c0, 0x4105: 0x00c0, - 0x4106: 0x00c0, - // Block 0x105, offset 0x4140 - 0x4140: 0x00c0, 0x4141: 0x00c0, 0x4142: 0x00c0, 0x4143: 0x00c0, 0x4144: 0x00c0, 0x4145: 0x00c0, - 0x4146: 0x00c0, 0x4147: 0x00c0, 0x4148: 0x00c0, 0x4149: 0x00c0, 0x414a: 0x00c0, 0x414b: 0x00c0, - 0x414c: 0x00c0, 0x414d: 0x00c0, 0x414e: 0x00c0, 0x414f: 0x00c0, 0x4150: 0x00c0, 0x4151: 0x00c0, - 0x4152: 0x00c0, 0x4153: 0x00c0, 0x4154: 0x00c0, 0x4155: 0x00c0, 0x4156: 0x00c0, 0x4157: 0x00c0, - 0x4158: 0x00c0, 0x4159: 0x00c0, 0x415a: 0x00c0, 0x415b: 0x00c0, 0x415c: 0x00c0, 0x415d: 0x00c0, - 0x415e: 0x00c0, 0x4160: 0x00c0, 0x4161: 0x00c0, 0x4162: 0x00c0, 0x4163: 0x00c0, - 0x4164: 0x00c0, 0x4165: 0x00c0, 0x4166: 0x00c0, 0x4167: 0x00c0, 0x4168: 0x00c0, 0x4169: 0x00c0, - 0x416e: 0x0080, 0x416f: 0x0080, - // Block 0x106, offset 0x4180 - 0x4190: 0x00c0, 0x4191: 0x00c0, - 0x4192: 0x00c0, 0x4193: 0x00c0, 0x4194: 0x00c0, 0x4195: 0x00c0, 0x4196: 0x00c0, 0x4197: 0x00c0, - 0x4198: 0x00c0, 0x4199: 0x00c0, 0x419a: 0x00c0, 0x419b: 0x00c0, 0x419c: 0x00c0, 0x419d: 0x00c0, - 0x419e: 0x00c0, 0x419f: 0x00c0, 0x41a0: 0x00c0, 0x41a1: 0x00c0, 0x41a2: 0x00c0, 0x41a3: 0x00c0, - 0x41a4: 0x00c0, 0x41a5: 0x00c0, 0x41a6: 0x00c0, 0x41a7: 0x00c0, 0x41a8: 0x00c0, 0x41a9: 0x00c0, - 0x41aa: 0x00c0, 0x41ab: 0x00c0, 0x41ac: 0x00c0, 0x41ad: 0x00c0, - 0x41b0: 0x00c3, 0x41b1: 0x00c3, 0x41b2: 0x00c3, 0x41b3: 0x00c3, 0x41b4: 0x00c3, 0x41b5: 0x0080, - // Block 0x107, offset 0x41c0 - 0x41c0: 0x00c0, 0x41c1: 0x00c0, 0x41c2: 0x00c0, 0x41c3: 0x00c0, 0x41c4: 0x00c0, 0x41c5: 0x00c0, - 0x41c6: 0x00c0, 0x41c7: 0x00c0, 0x41c8: 0x00c0, 0x41c9: 0x00c0, 0x41ca: 0x00c0, 0x41cb: 0x00c0, - 0x41cc: 0x00c0, 0x41cd: 0x00c0, 0x41ce: 0x00c0, 0x41cf: 0x00c0, 0x41d0: 0x00c0, 0x41d1: 0x00c0, - 0x41d2: 0x00c0, 0x41d3: 0x00c0, 0x41d4: 0x00c0, 0x41d5: 0x00c0, 0x41d6: 0x00c0, 0x41d7: 0x00c0, - 0x41d8: 0x00c0, 0x41d9: 0x00c0, 0x41da: 0x00c0, 0x41db: 0x00c0, 0x41dc: 0x00c0, 0x41dd: 0x00c0, - 0x41de: 0x00c0, 0x41df: 0x00c0, 0x41e0: 0x00c0, 0x41e1: 0x00c0, 0x41e2: 0x00c0, 0x41e3: 0x00c0, - 0x41e4: 0x00c0, 0x41e5: 0x00c0, 0x41e6: 0x00c0, 0x41e7: 0x00c0, 0x41e8: 0x00c0, 0x41e9: 0x00c0, - 0x41ea: 0x00c0, 0x41eb: 0x00c0, 0x41ec: 0x00c0, 0x41ed: 0x00c0, 0x41ee: 0x00c0, 0x41ef: 0x00c0, - 0x41f0: 0x00c3, 0x41f1: 0x00c3, 0x41f2: 0x00c3, 0x41f3: 0x00c3, 0x41f4: 0x00c3, 0x41f5: 0x00c3, - 0x41f6: 0x00c3, 0x41f7: 0x0080, 0x41f8: 0x0080, 0x41f9: 0x0080, 0x41fa: 0x0080, 0x41fb: 0x0080, - 0x41fc: 0x0080, 0x41fd: 0x0080, 0x41fe: 0x0080, 0x41ff: 0x0080, - // Block 0x108, offset 0x4200 - 0x4200: 0x00c0, 0x4201: 0x00c0, 0x4202: 0x00c0, 0x4203: 0x00c0, 0x4204: 0x0080, 0x4205: 0x0080, - 0x4210: 0x00c0, 0x4211: 0x00c0, - 0x4212: 0x00c0, 0x4213: 0x00c0, 0x4214: 0x00c0, 0x4215: 0x00c0, 0x4216: 0x00c0, 0x4217: 0x00c0, - 0x4218: 0x00c0, 0x4219: 0x00c0, 0x421b: 0x0080, 0x421c: 0x0080, 0x421d: 0x0080, - 0x421e: 0x0080, 0x421f: 0x0080, 0x4220: 0x0080, 0x4221: 0x0080, 0x4223: 0x00c0, - 0x4224: 0x00c0, 0x4225: 0x00c0, 0x4226: 0x00c0, 0x4227: 0x00c0, 0x4228: 0x00c0, 0x4229: 0x00c0, - 0x422a: 0x00c0, 0x422b: 0x00c0, 0x422c: 0x00c0, 0x422d: 0x00c0, 0x422e: 0x00c0, 0x422f: 0x00c0, - 0x4230: 0x00c0, 0x4231: 0x00c0, 0x4232: 0x00c0, 0x4233: 0x00c0, 0x4234: 0x00c0, 0x4235: 0x00c0, - 0x4236: 0x00c0, 0x4237: 0x00c0, - 0x423d: 0x00c0, 0x423e: 0x00c0, 0x423f: 0x00c0, - // Block 0x109, offset 0x4240 - 0x4240: 0x00c0, 0x4241: 0x00c0, 0x4242: 0x00c0, 0x4243: 0x00c0, 0x4244: 0x00c0, 0x4245: 0x00c0, - 0x4246: 0x00c0, 0x4247: 0x00c0, 0x4248: 0x00c0, 0x4249: 0x00c0, 0x424a: 0x00c0, 0x424b: 0x00c0, - 0x424c: 0x00c0, 0x424d: 0x00c0, 0x424e: 0x00c0, 0x424f: 0x00c0, - // Block 0x10a, offset 0x4280 - 0x4280: 0x00c0, 0x4281: 0x00c0, 0x4282: 0x00c0, 0x4283: 0x00c0, 0x4284: 0x00c0, - 0x4290: 0x00c0, 0x4291: 0x00c0, - 0x4292: 0x00c0, 0x4293: 0x00c0, 0x4294: 0x00c0, 0x4295: 0x00c0, 0x4296: 0x00c0, 0x4297: 0x00c0, - 0x4298: 0x00c0, 0x4299: 0x00c0, 0x429a: 0x00c0, 0x429b: 0x00c0, 0x429c: 0x00c0, 0x429d: 0x00c0, - 0x429e: 0x00c0, 0x429f: 0x00c0, 0x42a0: 0x00c0, 0x42a1: 0x00c0, 0x42a2: 0x00c0, 0x42a3: 0x00c0, - 0x42a4: 0x00c0, 0x42a5: 0x00c0, 0x42a6: 0x00c0, 0x42a7: 0x00c0, 0x42a8: 0x00c0, 0x42a9: 0x00c0, - 0x42aa: 0x00c0, 0x42ab: 0x00c0, 0x42ac: 0x00c0, 0x42ad: 0x00c0, 0x42ae: 0x00c0, 0x42af: 0x00c0, - 0x42b0: 0x00c0, 0x42b1: 0x00c0, 0x42b2: 0x00c0, 0x42b3: 0x00c0, 0x42b4: 0x00c0, 0x42b5: 0x00c0, - 0x42b6: 0x00c0, 0x42b7: 0x00c0, 0x42b8: 0x00c0, 0x42b9: 0x00c0, 0x42ba: 0x00c0, 0x42bb: 0x00c0, - 0x42bc: 0x00c0, 0x42bd: 0x00c0, 0x42be: 0x00c0, - // Block 0x10b, offset 0x42c0 - 0x42cf: 0x00c3, 0x42d0: 0x00c3, 0x42d1: 0x00c3, - 0x42d2: 0x00c3, 0x42d3: 0x00c0, 0x42d4: 0x00c0, 0x42d5: 0x00c0, 0x42d6: 0x00c0, 0x42d7: 0x00c0, - 0x42d8: 0x00c0, 0x42d9: 0x00c0, 0x42da: 0x00c0, 0x42db: 0x00c0, 0x42dc: 0x00c0, 0x42dd: 0x00c0, - 0x42de: 0x00c0, 0x42df: 0x00c0, - // Block 0x10c, offset 0x4300 - 0x4320: 0x00c0, - // Block 0x10d, offset 0x4340 - 0x4340: 0x00c0, 0x4341: 0x00c0, 0x4342: 0x00c0, 0x4343: 0x00c0, 0x4344: 0x00c0, 0x4345: 0x00c0, - 0x4346: 0x00c0, 0x4347: 0x00c0, 0x4348: 0x00c0, 0x4349: 0x00c0, 0x434a: 0x00c0, 0x434b: 0x00c0, - 0x434c: 0x00c0, 0x434d: 0x00c0, 0x434e: 0x00c0, 0x434f: 0x00c0, 0x4350: 0x00c0, 0x4351: 0x00c0, - 0x4352: 0x00c0, 0x4353: 0x00c0, 0x4354: 0x00c0, 0x4355: 0x00c0, 0x4356: 0x00c0, 0x4357: 0x00c0, - 0x4358: 0x00c0, 0x4359: 0x00c0, 0x435a: 0x00c0, 0x435b: 0x00c0, 0x435c: 0x00c0, 0x435d: 0x00c0, - 0x435e: 0x00c0, 0x435f: 0x00c0, 0x4360: 0x00c0, 0x4361: 0x00c0, 0x4362: 0x00c0, 0x4363: 0x00c0, - 0x4364: 0x00c0, 0x4365: 0x00c0, 0x4366: 0x00c0, 0x4367: 0x00c0, 0x4368: 0x00c0, 0x4369: 0x00c0, - 0x436a: 0x00c0, 0x436b: 0x00c0, 0x436c: 0x00c0, - // Block 0x10e, offset 0x4380 - 0x4380: 0x00cc, 0x4381: 0x00cc, - // Block 0x10f, offset 0x43c0 - 0x43c0: 0x00c0, 0x43c1: 0x00c0, 0x43c2: 0x00c0, 0x43c3: 0x00c0, 0x43c4: 0x00c0, 0x43c5: 0x00c0, - 0x43c6: 0x00c0, 0x43c7: 0x00c0, 0x43c8: 0x00c0, 0x43c9: 0x00c0, 0x43ca: 0x00c0, 0x43cb: 0x00c0, - 0x43cc: 0x00c0, 0x43cd: 0x00c0, 0x43ce: 0x00c0, 0x43cf: 0x00c0, 0x43d0: 0x00c0, 0x43d1: 0x00c0, - 0x43d2: 0x00c0, 0x43d3: 0x00c0, 0x43d4: 0x00c0, 0x43d5: 0x00c0, 0x43d6: 0x00c0, 0x43d7: 0x00c0, - 0x43d8: 0x00c0, 0x43d9: 0x00c0, 0x43da: 0x00c0, 0x43db: 0x00c0, 0x43dc: 0x00c0, 0x43dd: 0x00c0, - 0x43de: 0x00c0, 0x43df: 0x00c0, 0x43e0: 0x00c0, 0x43e1: 0x00c0, 0x43e2: 0x00c0, 0x43e3: 0x00c0, - 0x43e4: 0x00c0, 0x43e5: 0x00c0, 0x43e6: 0x00c0, 0x43e7: 0x00c0, 0x43e8: 0x00c0, 0x43e9: 0x00c0, - 0x43ea: 0x00c0, - 0x43f0: 0x00c0, 0x43f1: 0x00c0, 0x43f2: 0x00c0, 0x43f3: 0x00c0, 0x43f4: 0x00c0, 0x43f5: 0x00c0, - 0x43f6: 0x00c0, 0x43f7: 0x00c0, 0x43f8: 0x00c0, 0x43f9: 0x00c0, 0x43fa: 0x00c0, 0x43fb: 0x00c0, - 0x43fc: 0x00c0, - // Block 0x110, offset 0x4400 - 0x4400: 0x00c0, 0x4401: 0x00c0, 0x4402: 0x00c0, 0x4403: 0x00c0, 0x4404: 0x00c0, 0x4405: 0x00c0, - 0x4406: 0x00c0, 0x4407: 0x00c0, 0x4408: 0x00c0, - 0x4410: 0x00c0, 0x4411: 0x00c0, - 0x4412: 0x00c0, 0x4413: 0x00c0, 0x4414: 0x00c0, 0x4415: 0x00c0, 0x4416: 0x00c0, 0x4417: 0x00c0, - 0x4418: 0x00c0, 0x4419: 0x00c0, 0x441c: 0x0080, 0x441d: 0x00c3, - 0x441e: 0x00c3, 0x441f: 0x0080, 0x4420: 0x0040, 0x4421: 0x0040, 0x4422: 0x0040, 0x4423: 0x0040, - // Block 0x111, offset 0x4440 - 0x4440: 0x0080, 0x4441: 0x0080, 0x4442: 0x0080, 0x4443: 0x0080, 0x4444: 0x0080, 0x4445: 0x0080, - 0x4446: 0x0080, 0x4447: 0x0080, 0x4448: 0x0080, 0x4449: 0x0080, 0x444a: 0x0080, 0x444b: 0x0080, - 0x444c: 0x0080, 0x444d: 0x0080, 0x444e: 0x0080, 0x444f: 0x0080, 0x4450: 0x0080, 0x4451: 0x0080, - 0x4452: 0x0080, 0x4453: 0x0080, 0x4454: 0x0080, 0x4455: 0x0080, 0x4456: 0x0080, 0x4457: 0x0080, - 0x4458: 0x0080, 0x4459: 0x0080, 0x445a: 0x0080, 0x445b: 0x0080, 0x445c: 0x0080, 0x445d: 0x0080, - 0x445e: 0x0080, 0x445f: 0x0080, 0x4460: 0x0080, 0x4461: 0x0080, 0x4462: 0x0080, 0x4463: 0x0080, - 0x4464: 0x0080, 0x4465: 0x0080, 0x4466: 0x0080, 0x4467: 0x0080, 0x4468: 0x0080, 0x4469: 0x0080, - 0x446a: 0x0080, 0x446b: 0x0080, 0x446c: 0x0080, 0x446d: 0x0080, 0x446e: 0x0080, 0x446f: 0x0080, - 0x4470: 0x0080, 0x4471: 0x0080, 0x4472: 0x0080, 0x4473: 0x0080, 0x4474: 0x0080, 0x4475: 0x0080, - // Block 0x112, offset 0x4480 - 0x4480: 0x0080, 0x4481: 0x0080, 0x4482: 0x0080, 0x4483: 0x0080, 0x4484: 0x0080, 0x4485: 0x0080, - 0x4486: 0x0080, 0x4487: 0x0080, 0x4488: 0x0080, 0x4489: 0x0080, 0x448a: 0x0080, 0x448b: 0x0080, - 0x448c: 0x0080, 0x448d: 0x0080, 0x448e: 0x0080, 0x448f: 0x0080, 0x4490: 0x0080, 0x4491: 0x0080, - 0x4492: 0x0080, 0x4493: 0x0080, 0x4494: 0x0080, 0x4495: 0x0080, 0x4496: 0x0080, 0x4497: 0x0080, - 0x4498: 0x0080, 0x4499: 0x0080, 0x449a: 0x0080, 0x449b: 0x0080, 0x449c: 0x0080, 0x449d: 0x0080, - 0x449e: 0x0080, 0x449f: 0x0080, 0x44a0: 0x0080, 0x44a1: 0x0080, 0x44a2: 0x0080, 0x44a3: 0x0080, - 0x44a4: 0x0080, 0x44a5: 0x0080, 0x44a6: 0x0080, 0x44a9: 0x0080, - 0x44aa: 0x0080, 0x44ab: 0x0080, 0x44ac: 0x0080, 0x44ad: 0x0080, 0x44ae: 0x0080, 0x44af: 0x0080, - 0x44b0: 0x0080, 0x44b1: 0x0080, 0x44b2: 0x0080, 0x44b3: 0x0080, 0x44b4: 0x0080, 0x44b5: 0x0080, - 0x44b6: 0x0080, 0x44b7: 0x0080, 0x44b8: 0x0080, 0x44b9: 0x0080, 0x44ba: 0x0080, 0x44bb: 0x0080, - 0x44bc: 0x0080, 0x44bd: 0x0080, 0x44be: 0x0080, 0x44bf: 0x0080, - // Block 0x113, offset 0x44c0 - 0x44c0: 0x0080, 0x44c1: 0x0080, 0x44c2: 0x0080, 0x44c3: 0x0080, 0x44c4: 0x0080, 0x44c5: 0x0080, - 0x44c6: 0x0080, 0x44c7: 0x0080, 0x44c8: 0x0080, 0x44c9: 0x0080, 0x44ca: 0x0080, 0x44cb: 0x0080, - 0x44cc: 0x0080, 0x44cd: 0x0080, 0x44ce: 0x0080, 0x44cf: 0x0080, 0x44d0: 0x0080, 0x44d1: 0x0080, - 0x44d2: 0x0080, 0x44d3: 0x0080, 0x44d4: 0x0080, 0x44d5: 0x0080, 0x44d6: 0x0080, 0x44d7: 0x0080, - 0x44d8: 0x0080, 0x44d9: 0x0080, 0x44da: 0x0080, 0x44db: 0x0080, 0x44dc: 0x0080, 0x44dd: 0x0080, - 0x44de: 0x0080, 0x44df: 0x0080, 0x44e0: 0x0080, 0x44e1: 0x0080, 0x44e2: 0x0080, 0x44e3: 0x0080, - 0x44e4: 0x0080, 0x44e5: 0x00c0, 0x44e6: 0x00c0, 0x44e7: 0x00c3, 0x44e8: 0x00c3, 0x44e9: 0x00c3, - 0x44ea: 0x0080, 0x44eb: 0x0080, 0x44ec: 0x0080, 0x44ed: 0x00c0, 0x44ee: 0x00c0, 0x44ef: 0x00c0, - 0x44f0: 0x00c0, 0x44f1: 0x00c0, 0x44f2: 0x00c0, 0x44f3: 0x0040, 0x44f4: 0x0040, 0x44f5: 0x0040, - 0x44f6: 0x0040, 0x44f7: 0x0040, 0x44f8: 0x0040, 0x44f9: 0x0040, 0x44fa: 0x0040, 0x44fb: 0x00c3, - 0x44fc: 0x00c3, 0x44fd: 0x00c3, 0x44fe: 0x00c3, 0x44ff: 0x00c3, - // Block 0x114, offset 0x4500 - 0x4500: 0x00c3, 0x4501: 0x00c3, 0x4502: 0x00c3, 0x4503: 0x0080, 0x4504: 0x0080, 0x4505: 0x00c3, - 0x4506: 0x00c3, 0x4507: 0x00c3, 0x4508: 0x00c3, 0x4509: 0x00c3, 0x450a: 0x00c3, 0x450b: 0x00c3, - 0x450c: 0x0080, 0x450d: 0x0080, 0x450e: 0x0080, 0x450f: 0x0080, 0x4510: 0x0080, 0x4511: 0x0080, - 0x4512: 0x0080, 0x4513: 0x0080, 0x4514: 0x0080, 0x4515: 0x0080, 0x4516: 0x0080, 0x4517: 0x0080, - 0x4518: 0x0080, 0x4519: 0x0080, 0x451a: 0x0080, 0x451b: 0x0080, 0x451c: 0x0080, 0x451d: 0x0080, - 0x451e: 0x0080, 0x451f: 0x0080, 0x4520: 0x0080, 0x4521: 0x0080, 0x4522: 0x0080, 0x4523: 0x0080, - 0x4524: 0x0080, 0x4525: 0x0080, 0x4526: 0x0080, 0x4527: 0x0080, 0x4528: 0x0080, 0x4529: 0x0080, - 0x452a: 0x00c3, 0x452b: 0x00c3, 0x452c: 0x00c3, 0x452d: 0x00c3, 0x452e: 0x0080, 0x452f: 0x0080, - 0x4530: 0x0080, 0x4531: 0x0080, 0x4532: 0x0080, 0x4533: 0x0080, 0x4534: 0x0080, 0x4535: 0x0080, - 0x4536: 0x0080, 0x4537: 0x0080, 0x4538: 0x0080, 0x4539: 0x0080, 0x453a: 0x0080, 0x453b: 0x0080, - 0x453c: 0x0080, 0x453d: 0x0080, 0x453e: 0x0080, 0x453f: 0x0080, - // Block 0x115, offset 0x4540 - 0x4540: 0x0080, 0x4541: 0x0080, 0x4542: 0x0080, 0x4543: 0x0080, 0x4544: 0x0080, 0x4545: 0x0080, - 0x4546: 0x0080, 0x4547: 0x0080, 0x4548: 0x0080, 0x4549: 0x0080, 0x454a: 0x0080, 0x454b: 0x0080, - 0x454c: 0x0080, 0x454d: 0x0080, 0x454e: 0x0080, 0x454f: 0x0080, 0x4550: 0x0080, 0x4551: 0x0080, - 0x4552: 0x0080, 0x4553: 0x0080, 0x4554: 0x0080, 0x4555: 0x0080, 0x4556: 0x0080, 0x4557: 0x0080, - 0x4558: 0x0080, 0x4559: 0x0080, 0x455a: 0x0080, 0x455b: 0x0080, 0x455c: 0x0080, 0x455d: 0x0080, - 0x455e: 0x0080, 0x455f: 0x0080, 0x4560: 0x0080, 0x4561: 0x0080, 0x4562: 0x0080, 0x4563: 0x0080, - 0x4564: 0x0080, 0x4565: 0x0080, 0x4566: 0x0080, 0x4567: 0x0080, 0x4568: 0x0080, - // Block 0x116, offset 0x4580 - 0x4580: 0x0088, 0x4581: 0x0088, 0x4582: 0x00c9, 0x4583: 0x00c9, 0x4584: 0x00c9, 0x4585: 0x0088, - // Block 0x117, offset 0x45c0 - 0x45c0: 0x0080, 0x45c1: 0x0080, 0x45c2: 0x0080, 0x45c3: 0x0080, 0x45c4: 0x0080, 0x45c5: 0x0080, - 0x45c6: 0x0080, 0x45c7: 0x0080, 0x45c8: 0x0080, 0x45c9: 0x0080, 0x45ca: 0x0080, 0x45cb: 0x0080, - 0x45cc: 0x0080, 0x45cd: 0x0080, 0x45ce: 0x0080, 0x45cf: 0x0080, 0x45d0: 0x0080, 0x45d1: 0x0080, - 0x45d2: 0x0080, 0x45d3: 0x0080, 0x45d4: 0x0080, 0x45d5: 0x0080, 0x45d6: 0x0080, - 0x45e0: 0x0080, 0x45e1: 0x0080, 0x45e2: 0x0080, 0x45e3: 0x0080, - 0x45e4: 0x0080, 0x45e5: 0x0080, 0x45e6: 0x0080, 0x45e7: 0x0080, 0x45e8: 0x0080, 0x45e9: 0x0080, - 0x45ea: 0x0080, 0x45eb: 0x0080, 0x45ec: 0x0080, 0x45ed: 0x0080, 0x45ee: 0x0080, 0x45ef: 0x0080, - 0x45f0: 0x0080, 0x45f1: 0x0080, - // Block 0x118, offset 0x4600 - 0x4600: 0x0080, 0x4601: 0x0080, 0x4602: 0x0080, 0x4603: 0x0080, 0x4604: 0x0080, 0x4605: 0x0080, - 0x4606: 0x0080, 0x4607: 0x0080, 0x4608: 0x0080, 0x4609: 0x0080, 0x460a: 0x0080, 0x460b: 0x0080, - 0x460c: 0x0080, 0x460d: 0x0080, 0x460e: 0x0080, 0x460f: 0x0080, 0x4610: 0x0080, 0x4611: 0x0080, - 0x4612: 0x0080, 0x4613: 0x0080, 0x4614: 0x0080, 0x4616: 0x0080, 0x4617: 0x0080, - 0x4618: 0x0080, 0x4619: 0x0080, 0x461a: 0x0080, 0x461b: 0x0080, 0x461c: 0x0080, 0x461d: 0x0080, - 0x461e: 0x0080, 0x461f: 0x0080, 0x4620: 0x0080, 0x4621: 0x0080, 0x4622: 0x0080, 0x4623: 0x0080, - 0x4624: 0x0080, 0x4625: 0x0080, 0x4626: 0x0080, 0x4627: 0x0080, 0x4628: 0x0080, 0x4629: 0x0080, - 0x462a: 0x0080, 0x462b: 0x0080, 0x462c: 0x0080, 0x462d: 0x0080, 0x462e: 0x0080, 0x462f: 0x0080, - 0x4630: 0x0080, 0x4631: 0x0080, 0x4632: 0x0080, 0x4633: 0x0080, 0x4634: 0x0080, 0x4635: 0x0080, - 0x4636: 0x0080, 0x4637: 0x0080, 0x4638: 0x0080, 0x4639: 0x0080, 0x463a: 0x0080, 0x463b: 0x0080, - 0x463c: 0x0080, 0x463d: 0x0080, 0x463e: 0x0080, 0x463f: 0x0080, - // Block 0x119, offset 0x4640 - 0x4640: 0x0080, 0x4641: 0x0080, 0x4642: 0x0080, 0x4643: 0x0080, 0x4644: 0x0080, 0x4645: 0x0080, - 0x4646: 0x0080, 0x4647: 0x0080, 0x4648: 0x0080, 0x4649: 0x0080, 0x464a: 0x0080, 0x464b: 0x0080, - 0x464c: 0x0080, 0x464d: 0x0080, 0x464e: 0x0080, 0x464f: 0x0080, 0x4650: 0x0080, 0x4651: 0x0080, - 0x4652: 0x0080, 0x4653: 0x0080, 0x4654: 0x0080, 0x4655: 0x0080, 0x4656: 0x0080, 0x4657: 0x0080, - 0x4658: 0x0080, 0x4659: 0x0080, 0x465a: 0x0080, 0x465b: 0x0080, 0x465c: 0x0080, - 0x465e: 0x0080, 0x465f: 0x0080, 0x4662: 0x0080, - 0x4665: 0x0080, 0x4666: 0x0080, 0x4669: 0x0080, - 0x466a: 0x0080, 0x466b: 0x0080, 0x466c: 0x0080, 0x466e: 0x0080, 0x466f: 0x0080, - 0x4670: 0x0080, 0x4671: 0x0080, 0x4672: 0x0080, 0x4673: 0x0080, 0x4674: 0x0080, 0x4675: 0x0080, - 0x4676: 0x0080, 0x4677: 0x0080, 0x4678: 0x0080, 0x4679: 0x0080, 0x467b: 0x0080, - 0x467d: 0x0080, 0x467e: 0x0080, 0x467f: 0x0080, - // Block 0x11a, offset 0x4680 - 0x4680: 0x0080, 0x4681: 0x0080, 0x4682: 0x0080, 0x4683: 0x0080, 0x4685: 0x0080, - 0x4686: 0x0080, 0x4687: 0x0080, 0x4688: 0x0080, 0x4689: 0x0080, 0x468a: 0x0080, 0x468b: 0x0080, - 0x468c: 0x0080, 0x468d: 0x0080, 0x468e: 0x0080, 0x468f: 0x0080, 0x4690: 0x0080, 0x4691: 0x0080, - 0x4692: 0x0080, 0x4693: 0x0080, 0x4694: 0x0080, 0x4695: 0x0080, 0x4696: 0x0080, 0x4697: 0x0080, - 0x4698: 0x0080, 0x4699: 0x0080, 0x469a: 0x0080, 0x469b: 0x0080, 0x469c: 0x0080, 0x469d: 0x0080, - 0x469e: 0x0080, 0x469f: 0x0080, 0x46a0: 0x0080, 0x46a1: 0x0080, 0x46a2: 0x0080, 0x46a3: 0x0080, - 0x46a4: 0x0080, 0x46a5: 0x0080, 0x46a6: 0x0080, 0x46a7: 0x0080, 0x46a8: 0x0080, 0x46a9: 0x0080, - 0x46aa: 0x0080, 0x46ab: 0x0080, 0x46ac: 0x0080, 0x46ad: 0x0080, 0x46ae: 0x0080, 0x46af: 0x0080, - 0x46b0: 0x0080, 0x46b1: 0x0080, 0x46b2: 0x0080, 0x46b3: 0x0080, 0x46b4: 0x0080, 0x46b5: 0x0080, - 0x46b6: 0x0080, 0x46b7: 0x0080, 0x46b8: 0x0080, 0x46b9: 0x0080, 0x46ba: 0x0080, 0x46bb: 0x0080, - 0x46bc: 0x0080, 0x46bd: 0x0080, 0x46be: 0x0080, 0x46bf: 0x0080, - // Block 0x11b, offset 0x46c0 - 0x46c0: 0x0080, 0x46c1: 0x0080, 0x46c2: 0x0080, 0x46c3: 0x0080, 0x46c4: 0x0080, 0x46c5: 0x0080, - 0x46c7: 0x0080, 0x46c8: 0x0080, 0x46c9: 0x0080, 0x46ca: 0x0080, - 0x46cd: 0x0080, 0x46ce: 0x0080, 0x46cf: 0x0080, 0x46d0: 0x0080, 0x46d1: 0x0080, - 0x46d2: 0x0080, 0x46d3: 0x0080, 0x46d4: 0x0080, 0x46d6: 0x0080, 0x46d7: 0x0080, - 0x46d8: 0x0080, 0x46d9: 0x0080, 0x46da: 0x0080, 0x46db: 0x0080, 0x46dc: 0x0080, - 0x46de: 0x0080, 0x46df: 0x0080, 0x46e0: 0x0080, 0x46e1: 0x0080, 0x46e2: 0x0080, 0x46e3: 0x0080, - 0x46e4: 0x0080, 0x46e5: 0x0080, 0x46e6: 0x0080, 0x46e7: 0x0080, 0x46e8: 0x0080, 0x46e9: 0x0080, - 0x46ea: 0x0080, 0x46eb: 0x0080, 0x46ec: 0x0080, 0x46ed: 0x0080, 0x46ee: 0x0080, 0x46ef: 0x0080, - 0x46f0: 0x0080, 0x46f1: 0x0080, 0x46f2: 0x0080, 0x46f3: 0x0080, 0x46f4: 0x0080, 0x46f5: 0x0080, - 0x46f6: 0x0080, 0x46f7: 0x0080, 0x46f8: 0x0080, 0x46f9: 0x0080, 0x46fb: 0x0080, - 0x46fc: 0x0080, 0x46fd: 0x0080, 0x46fe: 0x0080, - // Block 0x11c, offset 0x4700 - 0x4700: 0x0080, 0x4701: 0x0080, 0x4702: 0x0080, 0x4703: 0x0080, 0x4704: 0x0080, - 0x4706: 0x0080, 0x470a: 0x0080, 0x470b: 0x0080, - 0x470c: 0x0080, 0x470d: 0x0080, 0x470e: 0x0080, 0x470f: 0x0080, 0x4710: 0x0080, - 0x4712: 0x0080, 0x4713: 0x0080, 0x4714: 0x0080, 0x4715: 0x0080, 0x4716: 0x0080, 0x4717: 0x0080, - 0x4718: 0x0080, 0x4719: 0x0080, 0x471a: 0x0080, 0x471b: 0x0080, 0x471c: 0x0080, 0x471d: 0x0080, - 0x471e: 0x0080, 0x471f: 0x0080, 0x4720: 0x0080, 0x4721: 0x0080, 0x4722: 0x0080, 0x4723: 0x0080, - 0x4724: 0x0080, 0x4725: 0x0080, 0x4726: 0x0080, 0x4727: 0x0080, 0x4728: 0x0080, 0x4729: 0x0080, - 0x472a: 0x0080, 0x472b: 0x0080, 0x472c: 0x0080, 0x472d: 0x0080, 0x472e: 0x0080, 0x472f: 0x0080, - 0x4730: 0x0080, 0x4731: 0x0080, 0x4732: 0x0080, 0x4733: 0x0080, 0x4734: 0x0080, 0x4735: 0x0080, - 0x4736: 0x0080, 0x4737: 0x0080, 0x4738: 0x0080, 0x4739: 0x0080, 0x473a: 0x0080, 0x473b: 0x0080, - 0x473c: 0x0080, 0x473d: 0x0080, 0x473e: 0x0080, 0x473f: 0x0080, - // Block 0x11d, offset 0x4740 - 0x4740: 0x0080, 0x4741: 0x0080, 0x4742: 0x0080, 0x4743: 0x0080, 0x4744: 0x0080, 0x4745: 0x0080, - 0x4746: 0x0080, 0x4747: 0x0080, 0x4748: 0x0080, 0x4749: 0x0080, 0x474a: 0x0080, 0x474b: 0x0080, - 0x474c: 0x0080, 0x474d: 0x0080, 0x474e: 0x0080, 0x474f: 0x0080, 0x4750: 0x0080, 0x4751: 0x0080, - 0x4752: 0x0080, 0x4753: 0x0080, 0x4754: 0x0080, 0x4755: 0x0080, 0x4756: 0x0080, 0x4757: 0x0080, - 0x4758: 0x0080, 0x4759: 0x0080, 0x475a: 0x0080, 0x475b: 0x0080, 0x475c: 0x0080, 0x475d: 0x0080, - 0x475e: 0x0080, 0x475f: 0x0080, 0x4760: 0x0080, 0x4761: 0x0080, 0x4762: 0x0080, 0x4763: 0x0080, - 0x4764: 0x0080, 0x4765: 0x0080, 0x4768: 0x0080, 0x4769: 0x0080, - 0x476a: 0x0080, 0x476b: 0x0080, 0x476c: 0x0080, 0x476d: 0x0080, 0x476e: 0x0080, 0x476f: 0x0080, - 0x4770: 0x0080, 0x4771: 0x0080, 0x4772: 0x0080, 0x4773: 0x0080, 0x4774: 0x0080, 0x4775: 0x0080, - 0x4776: 0x0080, 0x4777: 0x0080, 0x4778: 0x0080, 0x4779: 0x0080, 0x477a: 0x0080, 0x477b: 0x0080, - 0x477c: 0x0080, 0x477d: 0x0080, 0x477e: 0x0080, 0x477f: 0x0080, - // Block 0x11e, offset 0x4780 - 0x4780: 0x0080, 0x4781: 0x0080, 0x4782: 0x0080, 0x4783: 0x0080, 0x4784: 0x0080, 0x4785: 0x0080, - 0x4786: 0x0080, 0x4787: 0x0080, 0x4788: 0x0080, 0x4789: 0x0080, 0x478a: 0x0080, 0x478b: 0x0080, - 0x478e: 0x0080, 0x478f: 0x0080, 0x4790: 0x0080, 0x4791: 0x0080, - 0x4792: 0x0080, 0x4793: 0x0080, 0x4794: 0x0080, 0x4795: 0x0080, 0x4796: 0x0080, 0x4797: 0x0080, - 0x4798: 0x0080, 0x4799: 0x0080, 0x479a: 0x0080, 0x479b: 0x0080, 0x479c: 0x0080, 0x479d: 0x0080, - 0x479e: 0x0080, 0x479f: 0x0080, 0x47a0: 0x0080, 0x47a1: 0x0080, 0x47a2: 0x0080, 0x47a3: 0x0080, - 0x47a4: 0x0080, 0x47a5: 0x0080, 0x47a6: 0x0080, 0x47a7: 0x0080, 0x47a8: 0x0080, 0x47a9: 0x0080, - 0x47aa: 0x0080, 0x47ab: 0x0080, 0x47ac: 0x0080, 0x47ad: 0x0080, 0x47ae: 0x0080, 0x47af: 0x0080, - 0x47b0: 0x0080, 0x47b1: 0x0080, 0x47b2: 0x0080, 0x47b3: 0x0080, 0x47b4: 0x0080, 0x47b5: 0x0080, - 0x47b6: 0x0080, 0x47b7: 0x0080, 0x47b8: 0x0080, 0x47b9: 0x0080, 0x47ba: 0x0080, 0x47bb: 0x0080, - 0x47bc: 0x0080, 0x47bd: 0x0080, 0x47be: 0x0080, 0x47bf: 0x0080, - // Block 0x11f, offset 0x47c0 - 0x47c0: 0x00c3, 0x47c1: 0x00c3, 0x47c2: 0x00c3, 0x47c3: 0x00c3, 0x47c4: 0x00c3, 0x47c5: 0x00c3, - 0x47c6: 0x00c3, 0x47c7: 0x00c3, 0x47c8: 0x00c3, 0x47c9: 0x00c3, 0x47ca: 0x00c3, 0x47cb: 0x00c3, - 0x47cc: 0x00c3, 0x47cd: 0x00c3, 0x47ce: 0x00c3, 0x47cf: 0x00c3, 0x47d0: 0x00c3, 0x47d1: 0x00c3, - 0x47d2: 0x00c3, 0x47d3: 0x00c3, 0x47d4: 0x00c3, 0x47d5: 0x00c3, 0x47d6: 0x00c3, 0x47d7: 0x00c3, - 0x47d8: 0x00c3, 0x47d9: 0x00c3, 0x47da: 0x00c3, 0x47db: 0x00c3, 0x47dc: 0x00c3, 0x47dd: 0x00c3, - 0x47de: 0x00c3, 0x47df: 0x00c3, 0x47e0: 0x00c3, 0x47e1: 0x00c3, 0x47e2: 0x00c3, 0x47e3: 0x00c3, - 0x47e4: 0x00c3, 0x47e5: 0x00c3, 0x47e6: 0x00c3, 0x47e7: 0x00c3, 0x47e8: 0x00c3, 0x47e9: 0x00c3, - 0x47ea: 0x00c3, 0x47eb: 0x00c3, 0x47ec: 0x00c3, 0x47ed: 0x00c3, 0x47ee: 0x00c3, 0x47ef: 0x00c3, - 0x47f0: 0x00c3, 0x47f1: 0x00c3, 0x47f2: 0x00c3, 0x47f3: 0x00c3, 0x47f4: 0x00c3, 0x47f5: 0x00c3, - 0x47f6: 0x00c3, 0x47f7: 0x0080, 0x47f8: 0x0080, 0x47f9: 0x0080, 0x47fa: 0x0080, 0x47fb: 0x00c3, - 0x47fc: 0x00c3, 0x47fd: 0x00c3, 0x47fe: 0x00c3, 0x47ff: 0x00c3, - // Block 0x120, offset 0x4800 - 0x4800: 0x00c3, 0x4801: 0x00c3, 0x4802: 0x00c3, 0x4803: 0x00c3, 0x4804: 0x00c3, 0x4805: 0x00c3, - 0x4806: 0x00c3, 0x4807: 0x00c3, 0x4808: 0x00c3, 0x4809: 0x00c3, 0x480a: 0x00c3, 0x480b: 0x00c3, - 0x480c: 0x00c3, 0x480d: 0x00c3, 0x480e: 0x00c3, 0x480f: 0x00c3, 0x4810: 0x00c3, 0x4811: 0x00c3, - 0x4812: 0x00c3, 0x4813: 0x00c3, 0x4814: 0x00c3, 0x4815: 0x00c3, 0x4816: 0x00c3, 0x4817: 0x00c3, - 0x4818: 0x00c3, 0x4819: 0x00c3, 0x481a: 0x00c3, 0x481b: 0x00c3, 0x481c: 0x00c3, 0x481d: 0x00c3, - 0x481e: 0x00c3, 0x481f: 0x00c3, 0x4820: 0x00c3, 0x4821: 0x00c3, 0x4822: 0x00c3, 0x4823: 0x00c3, - 0x4824: 0x00c3, 0x4825: 0x00c3, 0x4826: 0x00c3, 0x4827: 0x00c3, 0x4828: 0x00c3, 0x4829: 0x00c3, - 0x482a: 0x00c3, 0x482b: 0x00c3, 0x482c: 0x00c3, 0x482d: 0x0080, 0x482e: 0x0080, 0x482f: 0x0080, - 0x4830: 0x0080, 0x4831: 0x0080, 0x4832: 0x0080, 0x4833: 0x0080, 0x4834: 0x0080, 0x4835: 0x00c3, - 0x4836: 0x0080, 0x4837: 0x0080, 0x4838: 0x0080, 0x4839: 0x0080, 0x483a: 0x0080, 0x483b: 0x0080, - 0x483c: 0x0080, 0x483d: 0x0080, 0x483e: 0x0080, 0x483f: 0x0080, - // Block 0x121, offset 0x4840 - 0x4840: 0x0080, 0x4841: 0x0080, 0x4842: 0x0080, 0x4843: 0x0080, 0x4844: 0x00c3, 0x4845: 0x0080, - 0x4846: 0x0080, 0x4847: 0x0080, 0x4848: 0x0080, 0x4849: 0x0080, 0x484a: 0x0080, 0x484b: 0x0080, - 0x485b: 0x00c3, 0x485c: 0x00c3, 0x485d: 0x00c3, - 0x485e: 0x00c3, 0x485f: 0x00c3, 0x4861: 0x00c3, 0x4862: 0x00c3, 0x4863: 0x00c3, - 0x4864: 0x00c3, 0x4865: 0x00c3, 0x4866: 0x00c3, 0x4867: 0x00c3, 0x4868: 0x00c3, 0x4869: 0x00c3, - 0x486a: 0x00c3, 0x486b: 0x00c3, 0x486c: 0x00c3, 0x486d: 0x00c3, 0x486e: 0x00c3, 0x486f: 0x00c3, - // Block 0x122, offset 0x4880 - 0x4880: 0x00c3, 0x4881: 0x00c3, 0x4882: 0x00c3, 0x4883: 0x00c3, 0x4884: 0x00c3, 0x4885: 0x00c3, - 0x4886: 0x00c3, 0x4888: 0x00c3, 0x4889: 0x00c3, 0x488a: 0x00c3, 0x488b: 0x00c3, - 0x488c: 0x00c3, 0x488d: 0x00c3, 0x488e: 0x00c3, 0x488f: 0x00c3, 0x4890: 0x00c3, 0x4891: 0x00c3, - 0x4892: 0x00c3, 0x4893: 0x00c3, 0x4894: 0x00c3, 0x4895: 0x00c3, 0x4896: 0x00c3, 0x4897: 0x00c3, - 0x4898: 0x00c3, 0x489b: 0x00c3, 0x489c: 0x00c3, 0x489d: 0x00c3, - 0x489e: 0x00c3, 0x489f: 0x00c3, 0x48a0: 0x00c3, 0x48a1: 0x00c3, 0x48a3: 0x00c3, - 0x48a4: 0x00c3, 0x48a6: 0x00c3, 0x48a7: 0x00c3, 0x48a8: 0x00c3, 0x48a9: 0x00c3, - 0x48aa: 0x00c3, - // Block 0x123, offset 0x48c0 - 0x48c0: 0x00c0, 0x48c1: 0x00c0, 0x48c2: 0x00c0, 0x48c3: 0x00c0, 0x48c4: 0x00c0, - 0x48c7: 0x0080, 0x48c8: 0x0080, 0x48c9: 0x0080, 0x48ca: 0x0080, 0x48cb: 0x0080, - 0x48cc: 0x0080, 0x48cd: 0x0080, 0x48ce: 0x0080, 0x48cf: 0x0080, 0x48d0: 0x00c3, 0x48d1: 0x00c3, - 0x48d2: 0x00c3, 0x48d3: 0x00c3, 0x48d4: 0x00c3, 0x48d5: 0x00c3, 0x48d6: 0x00c3, - // Block 0x124, offset 0x4900 - 0x4900: 0x00c2, 0x4901: 0x00c2, 0x4902: 0x00c2, 0x4903: 0x00c2, 0x4904: 0x00c2, 0x4905: 0x00c2, - 0x4906: 0x00c2, 0x4907: 0x00c2, 0x4908: 0x00c2, 0x4909: 0x00c2, 0x490a: 0x00c2, 0x490b: 0x00c2, - 0x490c: 0x00c2, 0x490d: 0x00c2, 0x490e: 0x00c2, 0x490f: 0x00c2, 0x4910: 0x00c2, 0x4911: 0x00c2, - 0x4912: 0x00c2, 0x4913: 0x00c2, 0x4914: 0x00c2, 0x4915: 0x00c2, 0x4916: 0x00c2, 0x4917: 0x00c2, - 0x4918: 0x00c2, 0x4919: 0x00c2, 0x491a: 0x00c2, 0x491b: 0x00c2, 0x491c: 0x00c2, 0x491d: 0x00c2, - 0x491e: 0x00c2, 0x491f: 0x00c2, 0x4920: 0x00c2, 0x4921: 0x00c2, 0x4922: 0x00c2, 0x4923: 0x00c2, - 0x4924: 0x00c2, 0x4925: 0x00c2, 0x4926: 0x00c2, 0x4927: 0x00c2, 0x4928: 0x00c2, 0x4929: 0x00c2, - 0x492a: 0x00c2, 0x492b: 0x00c2, 0x492c: 0x00c2, 0x492d: 0x00c2, 0x492e: 0x00c2, 0x492f: 0x00c2, - 0x4930: 0x00c2, 0x4931: 0x00c2, 0x4932: 0x00c2, 0x4933: 0x00c2, 0x4934: 0x00c2, 0x4935: 0x00c2, - 0x4936: 0x00c2, 0x4937: 0x00c2, 0x4938: 0x00c2, 0x4939: 0x00c2, 0x493a: 0x00c2, 0x493b: 0x00c2, - 0x493c: 0x00c2, 0x493d: 0x00c2, 0x493e: 0x00c2, 0x493f: 0x00c2, - // Block 0x125, offset 0x4940 - 0x4940: 0x00c2, 0x4941: 0x00c2, 0x4942: 0x00c2, 0x4943: 0x00c2, 0x4944: 0x00c3, 0x4945: 0x00c3, - 0x4946: 0x00c3, 0x4947: 0x00c3, 0x4948: 0x00c3, 0x4949: 0x00c3, 0x494a: 0x00c3, - 0x4950: 0x00c0, 0x4951: 0x00c0, - 0x4952: 0x00c0, 0x4953: 0x00c0, 0x4954: 0x00c0, 0x4955: 0x00c0, 0x4956: 0x00c0, 0x4957: 0x00c0, - 0x4958: 0x00c0, 0x4959: 0x00c0, - 0x495e: 0x0080, 0x495f: 0x0080, - // Block 0x126, offset 0x4980 - 0x4980: 0x0080, 0x4981: 0x0080, 0x4982: 0x0080, 0x4983: 0x0080, 0x4985: 0x0080, - 0x4986: 0x0080, 0x4987: 0x0080, 0x4988: 0x0080, 0x4989: 0x0080, 0x498a: 0x0080, 0x498b: 0x0080, - 0x498c: 0x0080, 0x498d: 0x0080, 0x498e: 0x0080, 0x498f: 0x0080, 0x4990: 0x0080, 0x4991: 0x0080, - 0x4992: 0x0080, 0x4993: 0x0080, 0x4994: 0x0080, 0x4995: 0x0080, 0x4996: 0x0080, 0x4997: 0x0080, - 0x4998: 0x0080, 0x4999: 0x0080, 0x499a: 0x0080, 0x499b: 0x0080, 0x499c: 0x0080, 0x499d: 0x0080, - 0x499e: 0x0080, 0x499f: 0x0080, 0x49a1: 0x0080, 0x49a2: 0x0080, - 0x49a4: 0x0080, 0x49a7: 0x0080, 0x49a9: 0x0080, - 0x49aa: 0x0080, 0x49ab: 0x0080, 0x49ac: 0x0080, 0x49ad: 0x0080, 0x49ae: 0x0080, 0x49af: 0x0080, - 0x49b0: 0x0080, 0x49b1: 0x0080, 0x49b2: 0x0080, 0x49b4: 0x0080, 0x49b5: 0x0080, - 0x49b6: 0x0080, 0x49b7: 0x0080, 0x49b9: 0x0080, 0x49bb: 0x0080, - // Block 0x127, offset 0x49c0 - 0x49c2: 0x0080, - 0x49c7: 0x0080, 0x49c9: 0x0080, 0x49cb: 0x0080, - 0x49cd: 0x0080, 0x49ce: 0x0080, 0x49cf: 0x0080, 0x49d1: 0x0080, - 0x49d2: 0x0080, 0x49d4: 0x0080, 0x49d7: 0x0080, - 0x49d9: 0x0080, 0x49db: 0x0080, 0x49dd: 0x0080, - 0x49df: 0x0080, 0x49e1: 0x0080, 0x49e2: 0x0080, - 0x49e4: 0x0080, 0x49e7: 0x0080, 0x49e8: 0x0080, 0x49e9: 0x0080, - 0x49ea: 0x0080, 0x49ec: 0x0080, 0x49ed: 0x0080, 0x49ee: 0x0080, 0x49ef: 0x0080, - 0x49f0: 0x0080, 0x49f1: 0x0080, 0x49f2: 0x0080, 0x49f4: 0x0080, 0x49f5: 0x0080, - 0x49f6: 0x0080, 0x49f7: 0x0080, 0x49f9: 0x0080, 0x49fa: 0x0080, 0x49fb: 0x0080, - 0x49fc: 0x0080, 0x49fe: 0x0080, - // Block 0x128, offset 0x4a00 - 0x4a00: 0x0080, 0x4a01: 0x0080, 0x4a02: 0x0080, 0x4a03: 0x0080, 0x4a04: 0x0080, 0x4a05: 0x0080, - 0x4a06: 0x0080, 0x4a07: 0x0080, 0x4a08: 0x0080, 0x4a09: 0x0080, 0x4a0b: 0x0080, - 0x4a0c: 0x0080, 0x4a0d: 0x0080, 0x4a0e: 0x0080, 0x4a0f: 0x0080, 0x4a10: 0x0080, 0x4a11: 0x0080, - 0x4a12: 0x0080, 0x4a13: 0x0080, 0x4a14: 0x0080, 0x4a15: 0x0080, 0x4a16: 0x0080, 0x4a17: 0x0080, - 0x4a18: 0x0080, 0x4a19: 0x0080, 0x4a1a: 0x0080, 0x4a1b: 0x0080, - 0x4a21: 0x0080, 0x4a22: 0x0080, 0x4a23: 0x0080, - 0x4a25: 0x0080, 0x4a26: 0x0080, 0x4a27: 0x0080, 0x4a28: 0x0080, 0x4a29: 0x0080, - 0x4a2b: 0x0080, 0x4a2c: 0x0080, 0x4a2d: 0x0080, 0x4a2e: 0x0080, 0x4a2f: 0x0080, - 0x4a30: 0x0080, 0x4a31: 0x0080, 0x4a32: 0x0080, 0x4a33: 0x0080, 0x4a34: 0x0080, 0x4a35: 0x0080, - 0x4a36: 0x0080, 0x4a37: 0x0080, 0x4a38: 0x0080, 0x4a39: 0x0080, 0x4a3a: 0x0080, 0x4a3b: 0x0080, - // Block 0x129, offset 0x4a40 - 0x4a70: 0x0080, 0x4a71: 0x0080, - // Block 0x12a, offset 0x4a80 - 0x4a80: 0x0080, 0x4a81: 0x0080, 0x4a82: 0x0080, 0x4a83: 0x0080, 0x4a84: 0x0080, 0x4a85: 0x0080, - 0x4a86: 0x0080, 0x4a87: 0x0080, 0x4a88: 0x0080, 0x4a89: 0x0080, 0x4a8a: 0x0080, 0x4a8b: 0x0080, - 0x4a8c: 0x0080, 0x4a8d: 0x0080, 0x4a8e: 0x0080, 0x4a8f: 0x0080, 0x4a90: 0x0080, 0x4a91: 0x0080, - 0x4a92: 0x0080, 0x4a93: 0x0080, 0x4a94: 0x0080, 0x4a95: 0x0080, 0x4a96: 0x0080, 0x4a97: 0x0080, - 0x4a98: 0x0080, 0x4a99: 0x0080, 0x4a9a: 0x0080, 0x4a9b: 0x0080, 0x4a9c: 0x0080, 0x4a9d: 0x0080, - 0x4a9e: 0x0080, 0x4a9f: 0x0080, 0x4aa0: 0x0080, 0x4aa1: 0x0080, 0x4aa2: 0x0080, 0x4aa3: 0x0080, - 0x4aa4: 0x0080, 0x4aa5: 0x0080, 0x4aa6: 0x0080, 0x4aa7: 0x0080, 0x4aa8: 0x0080, 0x4aa9: 0x0080, - 0x4aaa: 0x0080, 0x4aab: 0x0080, - 0x4ab0: 0x0080, 0x4ab1: 0x0080, 0x4ab2: 0x0080, 0x4ab3: 0x0080, 0x4ab4: 0x0080, 0x4ab5: 0x0080, - 0x4ab6: 0x0080, 0x4ab7: 0x0080, 0x4ab8: 0x0080, 0x4ab9: 0x0080, 0x4aba: 0x0080, 0x4abb: 0x0080, - 0x4abc: 0x0080, 0x4abd: 0x0080, 0x4abe: 0x0080, 0x4abf: 0x0080, - // Block 0x12b, offset 0x4ac0 - 0x4ac0: 0x0080, 0x4ac1: 0x0080, 0x4ac2: 0x0080, 0x4ac3: 0x0080, 0x4ac4: 0x0080, 0x4ac5: 0x0080, - 0x4ac6: 0x0080, 0x4ac7: 0x0080, 0x4ac8: 0x0080, 0x4ac9: 0x0080, 0x4aca: 0x0080, 0x4acb: 0x0080, - 0x4acc: 0x0080, 0x4acd: 0x0080, 0x4ace: 0x0080, 0x4acf: 0x0080, 0x4ad0: 0x0080, 0x4ad1: 0x0080, - 0x4ad2: 0x0080, 0x4ad3: 0x0080, - 0x4ae0: 0x0080, 0x4ae1: 0x0080, 0x4ae2: 0x0080, 0x4ae3: 0x0080, - 0x4ae4: 0x0080, 0x4ae5: 0x0080, 0x4ae6: 0x0080, 0x4ae7: 0x0080, 0x4ae8: 0x0080, 0x4ae9: 0x0080, - 0x4aea: 0x0080, 0x4aeb: 0x0080, 0x4aec: 0x0080, 0x4aed: 0x0080, 0x4aee: 0x0080, - 0x4af1: 0x0080, 0x4af2: 0x0080, 0x4af3: 0x0080, 0x4af4: 0x0080, 0x4af5: 0x0080, - 0x4af6: 0x0080, 0x4af7: 0x0080, 0x4af8: 0x0080, 0x4af9: 0x0080, 0x4afa: 0x0080, 0x4afb: 0x0080, - 0x4afc: 0x0080, 0x4afd: 0x0080, 0x4afe: 0x0080, 0x4aff: 0x0080, - // Block 0x12c, offset 0x4b00 - 0x4b01: 0x0080, 0x4b02: 0x0080, 0x4b03: 0x0080, 0x4b04: 0x0080, 0x4b05: 0x0080, - 0x4b06: 0x0080, 0x4b07: 0x0080, 0x4b08: 0x0080, 0x4b09: 0x0080, 0x4b0a: 0x0080, 0x4b0b: 0x0080, - 0x4b0c: 0x0080, 0x4b0d: 0x0080, 0x4b0e: 0x0080, 0x4b0f: 0x0080, 0x4b11: 0x0080, - 0x4b12: 0x0080, 0x4b13: 0x0080, 0x4b14: 0x0080, 0x4b15: 0x0080, 0x4b16: 0x0080, 0x4b17: 0x0080, - 0x4b18: 0x0080, 0x4b19: 0x0080, 0x4b1a: 0x0080, 0x4b1b: 0x0080, 0x4b1c: 0x0080, 0x4b1d: 0x0080, - 0x4b1e: 0x0080, 0x4b1f: 0x0080, 0x4b20: 0x0080, 0x4b21: 0x0080, 0x4b22: 0x0080, 0x4b23: 0x0080, - 0x4b24: 0x0080, 0x4b25: 0x0080, 0x4b26: 0x0080, 0x4b27: 0x0080, 0x4b28: 0x0080, 0x4b29: 0x0080, - 0x4b2a: 0x0080, 0x4b2b: 0x0080, 0x4b2c: 0x0080, 0x4b2d: 0x0080, 0x4b2e: 0x0080, 0x4b2f: 0x0080, - 0x4b30: 0x0080, 0x4b31: 0x0080, 0x4b32: 0x0080, 0x4b33: 0x0080, 0x4b34: 0x0080, 0x4b35: 0x0080, - // Block 0x12d, offset 0x4b40 - 0x4b40: 0x0080, 0x4b41: 0x0080, 0x4b42: 0x0080, 0x4b43: 0x0080, 0x4b44: 0x0080, 0x4b45: 0x0080, - 0x4b46: 0x0080, 0x4b47: 0x0080, 0x4b48: 0x0080, 0x4b49: 0x0080, 0x4b4a: 0x0080, 0x4b4b: 0x0080, - 0x4b4c: 0x0080, 0x4b50: 0x0080, 0x4b51: 0x0080, - 0x4b52: 0x0080, 0x4b53: 0x0080, 0x4b54: 0x0080, 0x4b55: 0x0080, 0x4b56: 0x0080, 0x4b57: 0x0080, - 0x4b58: 0x0080, 0x4b59: 0x0080, 0x4b5a: 0x0080, 0x4b5b: 0x0080, 0x4b5c: 0x0080, 0x4b5d: 0x0080, - 0x4b5e: 0x0080, 0x4b5f: 0x0080, 0x4b60: 0x0080, 0x4b61: 0x0080, 0x4b62: 0x0080, 0x4b63: 0x0080, - 0x4b64: 0x0080, 0x4b65: 0x0080, 0x4b66: 0x0080, 0x4b67: 0x0080, 0x4b68: 0x0080, 0x4b69: 0x0080, - 0x4b6a: 0x0080, 0x4b6b: 0x0080, 0x4b6c: 0x0080, 0x4b6d: 0x0080, 0x4b6e: 0x0080, - 0x4b70: 0x0080, 0x4b71: 0x0080, 0x4b72: 0x0080, 0x4b73: 0x0080, 0x4b74: 0x0080, 0x4b75: 0x0080, - 0x4b76: 0x0080, 0x4b77: 0x0080, 0x4b78: 0x0080, 0x4b79: 0x0080, 0x4b7a: 0x0080, 0x4b7b: 0x0080, - 0x4b7c: 0x0080, 0x4b7d: 0x0080, 0x4b7e: 0x0080, 0x4b7f: 0x0080, - // Block 0x12e, offset 0x4b80 - 0x4b80: 0x0080, 0x4b81: 0x0080, 0x4b82: 0x0080, 0x4b83: 0x0080, 0x4b84: 0x0080, 0x4b85: 0x0080, - 0x4b86: 0x0080, 0x4b87: 0x0080, 0x4b88: 0x0080, 0x4b89: 0x0080, 0x4b8a: 0x0080, 0x4b8b: 0x0080, - 0x4b8c: 0x0080, 0x4b8d: 0x0080, 0x4b8e: 0x0080, 0x4b8f: 0x0080, 0x4b90: 0x0080, 0x4b91: 0x0080, - 0x4b92: 0x0080, 0x4b93: 0x0080, 0x4b94: 0x0080, 0x4b95: 0x0080, 0x4b96: 0x0080, 0x4b97: 0x0080, - 0x4b98: 0x0080, 0x4b99: 0x0080, 0x4b9a: 0x0080, 0x4b9b: 0x0080, 0x4b9c: 0x0080, 0x4b9d: 0x0080, - 0x4b9e: 0x0080, 0x4b9f: 0x0080, 0x4ba0: 0x0080, 0x4ba1: 0x0080, 0x4ba2: 0x0080, 0x4ba3: 0x0080, - 0x4ba4: 0x0080, 0x4ba5: 0x0080, 0x4ba6: 0x0080, 0x4ba7: 0x0080, 0x4ba8: 0x0080, 0x4ba9: 0x0080, - 0x4baa: 0x0080, 0x4bab: 0x0080, 0x4bac: 0x0080, - // Block 0x12f, offset 0x4bc0 - 0x4be6: 0x0080, 0x4be7: 0x0080, 0x4be8: 0x0080, 0x4be9: 0x0080, - 0x4bea: 0x0080, 0x4beb: 0x0080, 0x4bec: 0x0080, 0x4bed: 0x0080, 0x4bee: 0x0080, 0x4bef: 0x0080, - 0x4bf0: 0x0080, 0x4bf1: 0x0080, 0x4bf2: 0x0080, 0x4bf3: 0x0080, 0x4bf4: 0x0080, 0x4bf5: 0x0080, - 0x4bf6: 0x0080, 0x4bf7: 0x0080, 0x4bf8: 0x0080, 0x4bf9: 0x0080, 0x4bfa: 0x0080, 0x4bfb: 0x0080, - 0x4bfc: 0x0080, 0x4bfd: 0x0080, 0x4bfe: 0x0080, 0x4bff: 0x0080, - // Block 0x130, offset 0x4c00 - 0x4c00: 0x008c, 0x4c01: 0x0080, 0x4c02: 0x0080, - 0x4c10: 0x0080, 0x4c11: 0x0080, - 0x4c12: 0x0080, 0x4c13: 0x0080, 0x4c14: 0x0080, 0x4c15: 0x0080, 0x4c16: 0x0080, 0x4c17: 0x0080, - 0x4c18: 0x0080, 0x4c19: 0x0080, 0x4c1a: 0x0080, 0x4c1b: 0x0080, 0x4c1c: 0x0080, 0x4c1d: 0x0080, - 0x4c1e: 0x0080, 0x4c1f: 0x0080, 0x4c20: 0x0080, 0x4c21: 0x0080, 0x4c22: 0x0080, 0x4c23: 0x0080, - 0x4c24: 0x0080, 0x4c25: 0x0080, 0x4c26: 0x0080, 0x4c27: 0x0080, 0x4c28: 0x0080, 0x4c29: 0x0080, - 0x4c2a: 0x0080, 0x4c2b: 0x0080, 0x4c2c: 0x0080, 0x4c2d: 0x0080, 0x4c2e: 0x0080, 0x4c2f: 0x0080, - 0x4c30: 0x0080, 0x4c31: 0x0080, 0x4c32: 0x0080, 0x4c33: 0x0080, 0x4c34: 0x0080, 0x4c35: 0x0080, - 0x4c36: 0x0080, 0x4c37: 0x0080, 0x4c38: 0x0080, 0x4c39: 0x0080, 0x4c3a: 0x0080, 0x4c3b: 0x0080, - // Block 0x131, offset 0x4c40 - 0x4c40: 0x0080, 0x4c41: 0x0080, 0x4c42: 0x0080, 0x4c43: 0x0080, 0x4c44: 0x0080, 0x4c45: 0x0080, - 0x4c46: 0x0080, 0x4c47: 0x0080, 0x4c48: 0x0080, - 0x4c50: 0x0080, 0x4c51: 0x0080, - // Block 0x132, offset 0x4c80 - 0x4c80: 0x0080, 0x4c81: 0x0080, 0x4c82: 0x0080, 0x4c83: 0x0080, 0x4c84: 0x0080, 0x4c85: 0x0080, - 0x4c86: 0x0080, 0x4c87: 0x0080, 0x4c88: 0x0080, 0x4c89: 0x0080, 0x4c8a: 0x0080, 0x4c8b: 0x0080, - 0x4c8c: 0x0080, 0x4c8d: 0x0080, 0x4c8e: 0x0080, 0x4c8f: 0x0080, 0x4c90: 0x0080, 0x4c91: 0x0080, - 0x4c92: 0x0080, - 0x4ca0: 0x0080, 0x4ca1: 0x0080, 0x4ca2: 0x0080, 0x4ca3: 0x0080, - 0x4ca4: 0x0080, 0x4ca5: 0x0080, 0x4ca6: 0x0080, 0x4ca7: 0x0080, 0x4ca8: 0x0080, 0x4ca9: 0x0080, - 0x4caa: 0x0080, 0x4cab: 0x0080, 0x4cac: 0x0080, - 0x4cb0: 0x0080, 0x4cb1: 0x0080, 0x4cb2: 0x0080, 0x4cb3: 0x0080, 0x4cb4: 0x0080, 0x4cb5: 0x0080, - 0x4cb6: 0x0080, - // Block 0x133, offset 0x4cc0 - 0x4cc0: 0x0080, 0x4cc1: 0x0080, 0x4cc2: 0x0080, 0x4cc3: 0x0080, 0x4cc4: 0x0080, 0x4cc5: 0x0080, - 0x4cc6: 0x0080, 0x4cc7: 0x0080, 0x4cc8: 0x0080, 0x4cc9: 0x0080, 0x4cca: 0x0080, 0x4ccb: 0x0080, - 0x4ccc: 0x0080, 0x4ccd: 0x0080, 0x4cce: 0x0080, 0x4ccf: 0x0080, 0x4cd0: 0x0080, 0x4cd1: 0x0080, - 0x4cd2: 0x0080, 0x4cd3: 0x0080, 0x4cd4: 0x0080, 0x4cd5: 0x0080, 0x4cd6: 0x0080, 0x4cd7: 0x0080, - 0x4cd8: 0x0080, 0x4cd9: 0x0080, 0x4cda: 0x0080, 0x4cdb: 0x0080, 0x4cdc: 0x0080, 0x4cdd: 0x0080, - 0x4cde: 0x0080, 0x4cdf: 0x0080, 0x4ce0: 0x0080, 0x4ce1: 0x0080, 0x4ce2: 0x0080, 0x4ce3: 0x0080, - 0x4ce4: 0x0080, 0x4ce5: 0x0080, 0x4ce6: 0x0080, 0x4ce7: 0x0080, 0x4ce8: 0x0080, 0x4ce9: 0x0080, - 0x4cea: 0x0080, 0x4ceb: 0x0080, 0x4cec: 0x0080, 0x4ced: 0x0080, 0x4cee: 0x0080, 0x4cef: 0x0080, - 0x4cf0: 0x0080, 0x4cf1: 0x0080, 0x4cf2: 0x0080, 0x4cf3: 0x0080, - // Block 0x134, offset 0x4d00 - 0x4d00: 0x0080, 0x4d01: 0x0080, 0x4d02: 0x0080, 0x4d03: 0x0080, 0x4d04: 0x0080, 0x4d05: 0x0080, - 0x4d06: 0x0080, 0x4d07: 0x0080, 0x4d08: 0x0080, 0x4d09: 0x0080, 0x4d0a: 0x0080, 0x4d0b: 0x0080, - 0x4d0c: 0x0080, 0x4d0d: 0x0080, 0x4d0e: 0x0080, 0x4d0f: 0x0080, 0x4d10: 0x0080, 0x4d11: 0x0080, - 0x4d12: 0x0080, 0x4d13: 0x0080, 0x4d14: 0x0080, - // Block 0x135, offset 0x4d40 - 0x4d40: 0x0080, 0x4d41: 0x0080, 0x4d42: 0x0080, 0x4d43: 0x0080, 0x4d44: 0x0080, 0x4d45: 0x0080, - 0x4d46: 0x0080, 0x4d47: 0x0080, 0x4d48: 0x0080, 0x4d49: 0x0080, 0x4d4a: 0x0080, 0x4d4b: 0x0080, - 0x4d50: 0x0080, 0x4d51: 0x0080, - 0x4d52: 0x0080, 0x4d53: 0x0080, 0x4d54: 0x0080, 0x4d55: 0x0080, 0x4d56: 0x0080, 0x4d57: 0x0080, - 0x4d58: 0x0080, 0x4d59: 0x0080, 0x4d5a: 0x0080, 0x4d5b: 0x0080, 0x4d5c: 0x0080, 0x4d5d: 0x0080, - 0x4d5e: 0x0080, 0x4d5f: 0x0080, 0x4d60: 0x0080, 0x4d61: 0x0080, 0x4d62: 0x0080, 0x4d63: 0x0080, - 0x4d64: 0x0080, 0x4d65: 0x0080, 0x4d66: 0x0080, 0x4d67: 0x0080, 0x4d68: 0x0080, 0x4d69: 0x0080, - 0x4d6a: 0x0080, 0x4d6b: 0x0080, 0x4d6c: 0x0080, 0x4d6d: 0x0080, 0x4d6e: 0x0080, 0x4d6f: 0x0080, - 0x4d70: 0x0080, 0x4d71: 0x0080, 0x4d72: 0x0080, 0x4d73: 0x0080, 0x4d74: 0x0080, 0x4d75: 0x0080, - 0x4d76: 0x0080, 0x4d77: 0x0080, 0x4d78: 0x0080, 0x4d79: 0x0080, 0x4d7a: 0x0080, 0x4d7b: 0x0080, - 0x4d7c: 0x0080, 0x4d7d: 0x0080, 0x4d7e: 0x0080, 0x4d7f: 0x0080, - // Block 0x136, offset 0x4d80 - 0x4d80: 0x0080, 0x4d81: 0x0080, 0x4d82: 0x0080, 0x4d83: 0x0080, 0x4d84: 0x0080, 0x4d85: 0x0080, - 0x4d86: 0x0080, 0x4d87: 0x0080, - 0x4d90: 0x0080, 0x4d91: 0x0080, - 0x4d92: 0x0080, 0x4d93: 0x0080, 0x4d94: 0x0080, 0x4d95: 0x0080, 0x4d96: 0x0080, 0x4d97: 0x0080, - 0x4d98: 0x0080, 0x4d99: 0x0080, - 0x4da0: 0x0080, 0x4da1: 0x0080, 0x4da2: 0x0080, 0x4da3: 0x0080, - 0x4da4: 0x0080, 0x4da5: 0x0080, 0x4da6: 0x0080, 0x4da7: 0x0080, 0x4da8: 0x0080, 0x4da9: 0x0080, - 0x4daa: 0x0080, 0x4dab: 0x0080, 0x4dac: 0x0080, 0x4dad: 0x0080, 0x4dae: 0x0080, 0x4daf: 0x0080, - 0x4db0: 0x0080, 0x4db1: 0x0080, 0x4db2: 0x0080, 0x4db3: 0x0080, 0x4db4: 0x0080, 0x4db5: 0x0080, - 0x4db6: 0x0080, 0x4db7: 0x0080, 0x4db8: 0x0080, 0x4db9: 0x0080, 0x4dba: 0x0080, 0x4dbb: 0x0080, - 0x4dbc: 0x0080, 0x4dbd: 0x0080, 0x4dbe: 0x0080, 0x4dbf: 0x0080, - // Block 0x137, offset 0x4dc0 - 0x4dc0: 0x0080, 0x4dc1: 0x0080, 0x4dc2: 0x0080, 0x4dc3: 0x0080, 0x4dc4: 0x0080, 0x4dc5: 0x0080, - 0x4dc6: 0x0080, 0x4dc7: 0x0080, - 0x4dd0: 0x0080, 0x4dd1: 0x0080, - 0x4dd2: 0x0080, 0x4dd3: 0x0080, 0x4dd4: 0x0080, 0x4dd5: 0x0080, 0x4dd6: 0x0080, 0x4dd7: 0x0080, - 0x4dd8: 0x0080, 0x4dd9: 0x0080, 0x4dda: 0x0080, 0x4ddb: 0x0080, 0x4ddc: 0x0080, 0x4ddd: 0x0080, - 0x4dde: 0x0080, 0x4ddf: 0x0080, 0x4de0: 0x0080, 0x4de1: 0x0080, 0x4de2: 0x0080, 0x4de3: 0x0080, - 0x4de4: 0x0080, 0x4de5: 0x0080, 0x4de6: 0x0080, 0x4de7: 0x0080, 0x4de8: 0x0080, 0x4de9: 0x0080, - 0x4dea: 0x0080, 0x4deb: 0x0080, 0x4dec: 0x0080, 0x4ded: 0x0080, - // Block 0x138, offset 0x4e00 - 0x4e10: 0x0080, 0x4e11: 0x0080, - 0x4e12: 0x0080, 0x4e13: 0x0080, 0x4e14: 0x0080, 0x4e15: 0x0080, 0x4e16: 0x0080, 0x4e17: 0x0080, - 0x4e18: 0x0080, 0x4e19: 0x0080, 0x4e1a: 0x0080, 0x4e1b: 0x0080, 0x4e1c: 0x0080, 0x4e1d: 0x0080, - 0x4e1e: 0x0080, 0x4e20: 0x0080, 0x4e21: 0x0080, 0x4e22: 0x0080, 0x4e23: 0x0080, - 0x4e24: 0x0080, 0x4e25: 0x0080, 0x4e26: 0x0080, 0x4e27: 0x0080, - 0x4e30: 0x0080, 0x4e33: 0x0080, 0x4e34: 0x0080, 0x4e35: 0x0080, - 0x4e36: 0x0080, 0x4e37: 0x0080, 0x4e38: 0x0080, 0x4e39: 0x0080, 0x4e3a: 0x0080, 0x4e3b: 0x0080, - 0x4e3c: 0x0080, 0x4e3d: 0x0080, 0x4e3e: 0x0080, - // Block 0x139, offset 0x4e40 - 0x4e40: 0x0080, 0x4e41: 0x0080, 0x4e42: 0x0080, 0x4e43: 0x0080, 0x4e44: 0x0080, 0x4e45: 0x0080, - 0x4e46: 0x0080, 0x4e47: 0x0080, 0x4e48: 0x0080, 0x4e49: 0x0080, 0x4e4a: 0x0080, 0x4e4b: 0x0080, - 0x4e50: 0x0080, 0x4e51: 0x0080, - 0x4e52: 0x0080, 0x4e53: 0x0080, 0x4e54: 0x0080, 0x4e55: 0x0080, 0x4e56: 0x0080, 0x4e57: 0x0080, - 0x4e58: 0x0080, 0x4e59: 0x0080, 0x4e5a: 0x0080, 0x4e5b: 0x0080, 0x4e5c: 0x0080, 0x4e5d: 0x0080, - 0x4e5e: 0x0080, - // Block 0x13a, offset 0x4e80 - 0x4e80: 0x0080, 0x4e81: 0x0080, 0x4e82: 0x0080, 0x4e83: 0x0080, 0x4e84: 0x0080, 0x4e85: 0x0080, - 0x4e86: 0x0080, 0x4e87: 0x0080, 0x4e88: 0x0080, 0x4e89: 0x0080, 0x4e8a: 0x0080, 0x4e8b: 0x0080, - 0x4e8c: 0x0080, 0x4e8d: 0x0080, 0x4e8e: 0x0080, 0x4e8f: 0x0080, 0x4e90: 0x0080, 0x4e91: 0x0080, - // Block 0x13b, offset 0x4ec0 - 0x4ec0: 0x0080, - // Block 0x13c, offset 0x4f00 - 0x4f00: 0x00cc, 0x4f01: 0x00cc, 0x4f02: 0x00cc, 0x4f03: 0x00cc, 0x4f04: 0x00cc, 0x4f05: 0x00cc, - 0x4f06: 0x00cc, 0x4f07: 0x00cc, 0x4f08: 0x00cc, 0x4f09: 0x00cc, 0x4f0a: 0x00cc, 0x4f0b: 0x00cc, - 0x4f0c: 0x00cc, 0x4f0d: 0x00cc, 0x4f0e: 0x00cc, 0x4f0f: 0x00cc, 0x4f10: 0x00cc, 0x4f11: 0x00cc, - 0x4f12: 0x00cc, 0x4f13: 0x00cc, 0x4f14: 0x00cc, 0x4f15: 0x00cc, 0x4f16: 0x00cc, - // Block 0x13d, offset 0x4f40 - 0x4f40: 0x00cc, 0x4f41: 0x00cc, 0x4f42: 0x00cc, 0x4f43: 0x00cc, 0x4f44: 0x00cc, 0x4f45: 0x00cc, - 0x4f46: 0x00cc, 0x4f47: 0x00cc, 0x4f48: 0x00cc, 0x4f49: 0x00cc, 0x4f4a: 0x00cc, 0x4f4b: 0x00cc, - 0x4f4c: 0x00cc, 0x4f4d: 0x00cc, 0x4f4e: 0x00cc, 0x4f4f: 0x00cc, 0x4f50: 0x00cc, 0x4f51: 0x00cc, - 0x4f52: 0x00cc, 0x4f53: 0x00cc, 0x4f54: 0x00cc, 0x4f55: 0x00cc, 0x4f56: 0x00cc, 0x4f57: 0x00cc, - 0x4f58: 0x00cc, 0x4f59: 0x00cc, 0x4f5a: 0x00cc, 0x4f5b: 0x00cc, 0x4f5c: 0x00cc, 0x4f5d: 0x00cc, - 0x4f5e: 0x00cc, 0x4f5f: 0x00cc, 0x4f60: 0x00cc, 0x4f61: 0x00cc, 0x4f62: 0x00cc, 0x4f63: 0x00cc, - 0x4f64: 0x00cc, 0x4f65: 0x00cc, 0x4f66: 0x00cc, 0x4f67: 0x00cc, 0x4f68: 0x00cc, 0x4f69: 0x00cc, - 0x4f6a: 0x00cc, 0x4f6b: 0x00cc, 0x4f6c: 0x00cc, 0x4f6d: 0x00cc, 0x4f6e: 0x00cc, 0x4f6f: 0x00cc, - 0x4f70: 0x00cc, 0x4f71: 0x00cc, 0x4f72: 0x00cc, 0x4f73: 0x00cc, 0x4f74: 0x00cc, - // Block 0x13e, offset 0x4f80 - 0x4f80: 0x00cc, 0x4f81: 0x00cc, 0x4f82: 0x00cc, 0x4f83: 0x00cc, 0x4f84: 0x00cc, 0x4f85: 0x00cc, - 0x4f86: 0x00cc, 0x4f87: 0x00cc, 0x4f88: 0x00cc, 0x4f89: 0x00cc, 0x4f8a: 0x00cc, 0x4f8b: 0x00cc, - 0x4f8c: 0x00cc, 0x4f8d: 0x00cc, 0x4f8e: 0x00cc, 0x4f8f: 0x00cc, 0x4f90: 0x00cc, 0x4f91: 0x00cc, - 0x4f92: 0x00cc, 0x4f93: 0x00cc, 0x4f94: 0x00cc, 0x4f95: 0x00cc, 0x4f96: 0x00cc, 0x4f97: 0x00cc, - 0x4f98: 0x00cc, 0x4f99: 0x00cc, 0x4f9a: 0x00cc, 0x4f9b: 0x00cc, 0x4f9c: 0x00cc, 0x4f9d: 0x00cc, - 0x4fa0: 0x00cc, 0x4fa1: 0x00cc, 0x4fa2: 0x00cc, 0x4fa3: 0x00cc, - 0x4fa4: 0x00cc, 0x4fa5: 0x00cc, 0x4fa6: 0x00cc, 0x4fa7: 0x00cc, 0x4fa8: 0x00cc, 0x4fa9: 0x00cc, - 0x4faa: 0x00cc, 0x4fab: 0x00cc, 0x4fac: 0x00cc, 0x4fad: 0x00cc, 0x4fae: 0x00cc, 0x4faf: 0x00cc, - 0x4fb0: 0x00cc, 0x4fb1: 0x00cc, 0x4fb2: 0x00cc, 0x4fb3: 0x00cc, 0x4fb4: 0x00cc, 0x4fb5: 0x00cc, - 0x4fb6: 0x00cc, 0x4fb7: 0x00cc, 0x4fb8: 0x00cc, 0x4fb9: 0x00cc, 0x4fba: 0x00cc, 0x4fbb: 0x00cc, - 0x4fbc: 0x00cc, 0x4fbd: 0x00cc, 0x4fbe: 0x00cc, 0x4fbf: 0x00cc, - // Block 0x13f, offset 0x4fc0 - 0x4fc0: 0x00cc, 0x4fc1: 0x00cc, 0x4fc2: 0x00cc, 0x4fc3: 0x00cc, 0x4fc4: 0x00cc, 0x4fc5: 0x00cc, - 0x4fc6: 0x00cc, 0x4fc7: 0x00cc, 0x4fc8: 0x00cc, 0x4fc9: 0x00cc, 0x4fca: 0x00cc, 0x4fcb: 0x00cc, - 0x4fcc: 0x00cc, 0x4fcd: 0x00cc, 0x4fce: 0x00cc, 0x4fcf: 0x00cc, 0x4fd0: 0x00cc, 0x4fd1: 0x00cc, - 0x4fd2: 0x00cc, 0x4fd3: 0x00cc, 0x4fd4: 0x00cc, 0x4fd5: 0x00cc, 0x4fd6: 0x00cc, 0x4fd7: 0x00cc, - 0x4fd8: 0x00cc, 0x4fd9: 0x00cc, 0x4fda: 0x00cc, 0x4fdb: 0x00cc, 0x4fdc: 0x00cc, 0x4fdd: 0x00cc, - 0x4fde: 0x00cc, 0x4fdf: 0x00cc, 0x4fe0: 0x00cc, 0x4fe1: 0x00cc, - // Block 0x140, offset 0x5000 - 0x5000: 0x008c, 0x5001: 0x008c, 0x5002: 0x008c, 0x5003: 0x008c, 0x5004: 0x008c, 0x5005: 0x008c, - 0x5006: 0x008c, 0x5007: 0x008c, 0x5008: 0x008c, 0x5009: 0x008c, 0x500a: 0x008c, 0x500b: 0x008c, - 0x500c: 0x008c, 0x500d: 0x008c, 0x500e: 0x008c, 0x500f: 0x008c, 0x5010: 0x008c, 0x5011: 0x008c, - 0x5012: 0x008c, 0x5013: 0x008c, 0x5014: 0x008c, 0x5015: 0x008c, 0x5016: 0x008c, 0x5017: 0x008c, - 0x5018: 0x008c, 0x5019: 0x008c, 0x501a: 0x008c, 0x501b: 0x008c, 0x501c: 0x008c, 0x501d: 0x008c, - // Block 0x141, offset 0x5040 - 0x5041: 0x0040, - 0x5060: 0x0040, 0x5061: 0x0040, 0x5062: 0x0040, 0x5063: 0x0040, - 0x5064: 0x0040, 0x5065: 0x0040, 0x5066: 0x0040, 0x5067: 0x0040, 0x5068: 0x0040, 0x5069: 0x0040, - 0x506a: 0x0040, 0x506b: 0x0040, 0x506c: 0x0040, 0x506d: 0x0040, 0x506e: 0x0040, 0x506f: 0x0040, - 0x5070: 0x0040, 0x5071: 0x0040, 0x5072: 0x0040, 0x5073: 0x0040, 0x5074: 0x0040, 0x5075: 0x0040, - 0x5076: 0x0040, 0x5077: 0x0040, 0x5078: 0x0040, 0x5079: 0x0040, 0x507a: 0x0040, 0x507b: 0x0040, - 0x507c: 0x0040, 0x507d: 0x0040, 0x507e: 0x0040, 0x507f: 0x0040, - // Block 0x142, offset 0x5080 - 0x5080: 0x0040, 0x5081: 0x0040, 0x5082: 0x0040, 0x5083: 0x0040, 0x5084: 0x0040, 0x5085: 0x0040, - 0x5086: 0x0040, 0x5087: 0x0040, 0x5088: 0x0040, 0x5089: 0x0040, 0x508a: 0x0040, 0x508b: 0x0040, - 0x508c: 0x0040, 0x508d: 0x0040, 0x508e: 0x0040, 0x508f: 0x0040, 0x5090: 0x0040, 0x5091: 0x0040, - 0x5092: 0x0040, 0x5093: 0x0040, 0x5094: 0x0040, 0x5095: 0x0040, 0x5096: 0x0040, 0x5097: 0x0040, - 0x5098: 0x0040, 0x5099: 0x0040, 0x509a: 0x0040, 0x509b: 0x0040, 0x509c: 0x0040, 0x509d: 0x0040, - 0x509e: 0x0040, 0x509f: 0x0040, 0x50a0: 0x0040, 0x50a1: 0x0040, 0x50a2: 0x0040, 0x50a3: 0x0040, - 0x50a4: 0x0040, 0x50a5: 0x0040, 0x50a6: 0x0040, 0x50a7: 0x0040, 0x50a8: 0x0040, 0x50a9: 0x0040, - 0x50aa: 0x0040, 0x50ab: 0x0040, 0x50ac: 0x0040, 0x50ad: 0x0040, 0x50ae: 0x0040, 0x50af: 0x0040, - // Block 0x143, offset 0x50c0 - 0x50c0: 0x0040, 0x50c1: 0x0040, 0x50c2: 0x0040, 0x50c3: 0x0040, 0x50c4: 0x0040, 0x50c5: 0x0040, - 0x50c6: 0x0040, 0x50c7: 0x0040, 0x50c8: 0x0040, 0x50c9: 0x0040, 0x50ca: 0x0040, 0x50cb: 0x0040, - 0x50cc: 0x0040, 0x50cd: 0x0040, 0x50ce: 0x0040, 0x50cf: 0x0040, 0x50d0: 0x0040, 0x50d1: 0x0040, - 0x50d2: 0x0040, 0x50d3: 0x0040, 0x50d4: 0x0040, 0x50d5: 0x0040, 0x50d6: 0x0040, 0x50d7: 0x0040, - 0x50d8: 0x0040, 0x50d9: 0x0040, 0x50da: 0x0040, 0x50db: 0x0040, 0x50dc: 0x0040, 0x50dd: 0x0040, - 0x50de: 0x0040, 0x50df: 0x0040, 0x50e0: 0x0040, 0x50e1: 0x0040, 0x50e2: 0x0040, 0x50e3: 0x0040, - 0x50e4: 0x0040, 0x50e5: 0x0040, 0x50e6: 0x0040, 0x50e7: 0x0040, 0x50e8: 0x0040, 0x50e9: 0x0040, - 0x50ea: 0x0040, 0x50eb: 0x0040, 0x50ec: 0x0040, 0x50ed: 0x0040, 0x50ee: 0x0040, 0x50ef: 0x0040, - 0x50f0: 0x0040, 0x50f1: 0x0040, 0x50f2: 0x0040, 0x50f3: 0x0040, 0x50f4: 0x0040, 0x50f5: 0x0040, - 0x50f6: 0x0040, 0x50f7: 0x0040, 0x50f8: 0x0040, 0x50f9: 0x0040, 0x50fa: 0x0040, 0x50fb: 0x0040, - 0x50fc: 0x0040, 0x50fd: 0x0040, -} - -// derivedPropertiesIndex: 36 blocks, 2304 entries, 4608 bytes -// Block 0 is the zero block. -var derivedPropertiesIndex = [2304]uint16{ - // Block 0x0, offset 0x0 - // Block 0x1, offset 0x40 - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc2: 0x01, 0xc3: 0x02, 0xc4: 0x03, 0xc5: 0x04, 0xc6: 0x05, 0xc7: 0x06, - 0xc8: 0x05, 0xc9: 0x05, 0xca: 0x07, 0xcb: 0x08, 0xcc: 0x09, 0xcd: 0x0a, 0xce: 0x0b, 0xcf: 0x0c, - 0xd0: 0x05, 0xd1: 0x05, 0xd2: 0x0d, 0xd3: 0x05, 0xd4: 0x0e, 0xd5: 0x0f, 0xd6: 0x10, 0xd7: 0x11, - 0xd8: 0x12, 0xd9: 0x13, 0xda: 0x14, 0xdb: 0x15, 0xdc: 0x16, 0xdd: 0x17, 0xde: 0x18, 0xdf: 0x19, - 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, 0xe5: 0x07, 0xe6: 0x07, 0xe7: 0x07, - 0xe8: 0x07, 0xe9: 0x08, 0xea: 0x09, 0xeb: 0x0a, 0xec: 0x0a, 0xed: 0x0b, 0xee: 0x0c, 0xef: 0x0d, - 0xf0: 0x1d, 0xf3: 0x20, 0xf4: 0x21, - // Block 0x4, offset 0x100 - 0x120: 0x1a, 0x121: 0x1b, 0x122: 0x1c, 0x123: 0x1d, 0x124: 0x1e, 0x125: 0x1f, 0x126: 0x20, 0x127: 0x21, - 0x128: 0x22, 0x129: 0x23, 0x12a: 0x24, 0x12b: 0x25, 0x12c: 0x26, 0x12d: 0x27, 0x12e: 0x28, 0x12f: 0x29, - 0x130: 0x2a, 0x131: 0x2b, 0x132: 0x2c, 0x133: 0x2d, 0x134: 0x2e, 0x135: 0x2f, 0x136: 0x30, 0x137: 0x31, - 0x138: 0x32, 0x139: 0x33, 0x13a: 0x34, 0x13b: 0x35, 0x13c: 0x36, 0x13d: 0x37, 0x13e: 0x38, 0x13f: 0x39, - // Block 0x5, offset 0x140 - 0x140: 0x3a, 0x141: 0x3b, 0x142: 0x3c, 0x143: 0x3d, 0x144: 0x3e, 0x145: 0x3e, 0x146: 0x3e, 0x147: 0x3e, - 0x148: 0x05, 0x149: 0x3f, 0x14a: 0x40, 0x14b: 0x41, 0x14c: 0x42, 0x14d: 0x43, 0x14e: 0x44, 0x14f: 0x45, - 0x150: 0x46, 0x151: 0x05, 0x152: 0x05, 0x153: 0x05, 0x154: 0x05, 0x155: 0x05, 0x156: 0x05, 0x157: 0x05, - 0x158: 0x05, 0x159: 0x47, 0x15a: 0x48, 0x15b: 0x49, 0x15c: 0x4a, 0x15d: 0x4b, 0x15e: 0x4c, 0x15f: 0x4d, - 0x160: 0x4e, 0x161: 0x4f, 0x162: 0x50, 0x163: 0x51, 0x164: 0x52, 0x165: 0x53, 0x166: 0x54, 0x167: 0x55, - 0x168: 0x56, 0x169: 0x57, 0x16a: 0x58, 0x16c: 0x59, 0x16d: 0x5a, 0x16e: 0x5b, 0x16f: 0x5c, - 0x170: 0x5d, 0x171: 0x5e, 0x172: 0x5f, 0x173: 0x60, 0x174: 0x61, 0x175: 0x62, 0x176: 0x63, 0x177: 0x64, - 0x178: 0x05, 0x179: 0x05, 0x17a: 0x65, 0x17b: 0x05, 0x17c: 0x66, 0x17d: 0x67, 0x17e: 0x68, 0x17f: 0x69, - // Block 0x6, offset 0x180 - 0x180: 0x6a, 0x181: 0x6b, 0x182: 0x6c, 0x183: 0x6d, 0x184: 0x6e, 0x185: 0x6f, 0x186: 0x70, 0x187: 0x71, - 0x188: 0x71, 0x189: 0x71, 0x18a: 0x71, 0x18b: 0x71, 0x18c: 0x71, 0x18d: 0x71, 0x18e: 0x71, 0x18f: 0x72, - 0x190: 0x73, 0x191: 0x74, 0x192: 0x71, 0x193: 0x71, 0x194: 0x71, 0x195: 0x71, 0x196: 0x71, 0x197: 0x71, - 0x198: 0x71, 0x199: 0x71, 0x19a: 0x71, 0x19b: 0x71, 0x19c: 0x71, 0x19d: 0x71, 0x19e: 0x71, 0x19f: 0x71, - 0x1a0: 0x71, 0x1a1: 0x71, 0x1a2: 0x71, 0x1a3: 0x71, 0x1a4: 0x71, 0x1a5: 0x71, 0x1a6: 0x71, 0x1a7: 0x71, - 0x1a8: 0x71, 0x1a9: 0x71, 0x1aa: 0x71, 0x1ab: 0x71, 0x1ac: 0x71, 0x1ad: 0x75, 0x1ae: 0x76, 0x1af: 0x77, - 0x1b0: 0x78, 0x1b1: 0x79, 0x1b2: 0x05, 0x1b3: 0x7a, 0x1b4: 0x7b, 0x1b5: 0x7c, 0x1b6: 0x7d, 0x1b7: 0x7e, - 0x1b8: 0x7f, 0x1b9: 0x80, 0x1ba: 0x81, 0x1bb: 0x82, 0x1bc: 0x83, 0x1bd: 0x83, 0x1be: 0x83, 0x1bf: 0x84, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x85, 0x1c1: 0x86, 0x1c2: 0x87, 0x1c3: 0x88, 0x1c4: 0x89, 0x1c5: 0x8a, 0x1c6: 0x8b, 0x1c7: 0x8c, - 0x1c8: 0x8d, 0x1c9: 0x71, 0x1ca: 0x71, 0x1cb: 0x8e, 0x1cc: 0x83, 0x1cd: 0x8f, 0x1ce: 0x71, 0x1cf: 0x71, - 0x1d0: 0x90, 0x1d1: 0x90, 0x1d2: 0x90, 0x1d3: 0x90, 0x1d4: 0x90, 0x1d5: 0x90, 0x1d6: 0x90, 0x1d7: 0x90, - 0x1d8: 0x90, 0x1d9: 0x90, 0x1da: 0x90, 0x1db: 0x90, 0x1dc: 0x90, 0x1dd: 0x90, 0x1de: 0x90, 0x1df: 0x90, - 0x1e0: 0x90, 0x1e1: 0x90, 0x1e2: 0x90, 0x1e3: 0x90, 0x1e4: 0x90, 0x1e5: 0x90, 0x1e6: 0x90, 0x1e7: 0x90, - 0x1e8: 0x90, 0x1e9: 0x90, 0x1ea: 0x90, 0x1eb: 0x90, 0x1ec: 0x90, 0x1ed: 0x90, 0x1ee: 0x90, 0x1ef: 0x90, - 0x1f0: 0x90, 0x1f1: 0x90, 0x1f2: 0x90, 0x1f3: 0x90, 0x1f4: 0x90, 0x1f5: 0x90, 0x1f6: 0x90, 0x1f7: 0x90, - 0x1f8: 0x90, 0x1f9: 0x90, 0x1fa: 0x90, 0x1fb: 0x90, 0x1fc: 0x90, 0x1fd: 0x90, 0x1fe: 0x90, 0x1ff: 0x90, - // Block 0x8, offset 0x200 - 0x200: 0x90, 0x201: 0x90, 0x202: 0x90, 0x203: 0x90, 0x204: 0x90, 0x205: 0x90, 0x206: 0x90, 0x207: 0x90, - 0x208: 0x90, 0x209: 0x90, 0x20a: 0x90, 0x20b: 0x90, 0x20c: 0x90, 0x20d: 0x90, 0x20e: 0x90, 0x20f: 0x90, - 0x210: 0x90, 0x211: 0x90, 0x212: 0x90, 0x213: 0x90, 0x214: 0x90, 0x215: 0x90, 0x216: 0x90, 0x217: 0x90, - 0x218: 0x90, 0x219: 0x90, 0x21a: 0x90, 0x21b: 0x90, 0x21c: 0x90, 0x21d: 0x90, 0x21e: 0x90, 0x21f: 0x90, - 0x220: 0x90, 0x221: 0x90, 0x222: 0x90, 0x223: 0x90, 0x224: 0x90, 0x225: 0x90, 0x226: 0x90, 0x227: 0x90, - 0x228: 0x90, 0x229: 0x90, 0x22a: 0x90, 0x22b: 0x90, 0x22c: 0x90, 0x22d: 0x90, 0x22e: 0x90, 0x22f: 0x90, - 0x230: 0x90, 0x231: 0x90, 0x232: 0x90, 0x233: 0x90, 0x234: 0x90, 0x235: 0x90, 0x236: 0x91, 0x237: 0x71, - 0x238: 0x90, 0x239: 0x90, 0x23a: 0x90, 0x23b: 0x90, 0x23c: 0x90, 0x23d: 0x90, 0x23e: 0x90, 0x23f: 0x90, - // Block 0x9, offset 0x240 - 0x240: 0x90, 0x241: 0x90, 0x242: 0x90, 0x243: 0x90, 0x244: 0x90, 0x245: 0x90, 0x246: 0x90, 0x247: 0x90, - 0x248: 0x90, 0x249: 0x90, 0x24a: 0x90, 0x24b: 0x90, 0x24c: 0x90, 0x24d: 0x90, 0x24e: 0x90, 0x24f: 0x90, - 0x250: 0x90, 0x251: 0x90, 0x252: 0x90, 0x253: 0x90, 0x254: 0x90, 0x255: 0x90, 0x256: 0x90, 0x257: 0x90, - 0x258: 0x90, 0x259: 0x90, 0x25a: 0x90, 0x25b: 0x90, 0x25c: 0x90, 0x25d: 0x90, 0x25e: 0x90, 0x25f: 0x90, - 0x260: 0x90, 0x261: 0x90, 0x262: 0x90, 0x263: 0x90, 0x264: 0x90, 0x265: 0x90, 0x266: 0x90, 0x267: 0x90, - 0x268: 0x90, 0x269: 0x90, 0x26a: 0x90, 0x26b: 0x90, 0x26c: 0x90, 0x26d: 0x90, 0x26e: 0x90, 0x26f: 0x90, - 0x270: 0x90, 0x271: 0x90, 0x272: 0x90, 0x273: 0x90, 0x274: 0x90, 0x275: 0x90, 0x276: 0x90, 0x277: 0x90, - 0x278: 0x90, 0x279: 0x90, 0x27a: 0x90, 0x27b: 0x90, 0x27c: 0x90, 0x27d: 0x90, 0x27e: 0x90, 0x27f: 0x90, - // Block 0xa, offset 0x280 - 0x280: 0x90, 0x281: 0x90, 0x282: 0x90, 0x283: 0x90, 0x284: 0x90, 0x285: 0x90, 0x286: 0x90, 0x287: 0x90, - 0x288: 0x90, 0x289: 0x90, 0x28a: 0x90, 0x28b: 0x90, 0x28c: 0x90, 0x28d: 0x90, 0x28e: 0x90, 0x28f: 0x90, - 0x290: 0x90, 0x291: 0x90, 0x292: 0x90, 0x293: 0x90, 0x294: 0x90, 0x295: 0x90, 0x296: 0x90, 0x297: 0x90, - 0x298: 0x90, 0x299: 0x90, 0x29a: 0x90, 0x29b: 0x90, 0x29c: 0x90, 0x29d: 0x90, 0x29e: 0x90, 0x29f: 0x90, - 0x2a0: 0x90, 0x2a1: 0x90, 0x2a2: 0x90, 0x2a3: 0x90, 0x2a4: 0x90, 0x2a5: 0x90, 0x2a6: 0x90, 0x2a7: 0x90, - 0x2a8: 0x90, 0x2a9: 0x90, 0x2aa: 0x90, 0x2ab: 0x90, 0x2ac: 0x90, 0x2ad: 0x90, 0x2ae: 0x90, 0x2af: 0x90, - 0x2b0: 0x90, 0x2b1: 0x90, 0x2b2: 0x90, 0x2b3: 0x90, 0x2b4: 0x90, 0x2b5: 0x90, 0x2b6: 0x90, 0x2b7: 0x90, - 0x2b8: 0x90, 0x2b9: 0x90, 0x2ba: 0x90, 0x2bb: 0x90, 0x2bc: 0x90, 0x2bd: 0x90, 0x2be: 0x90, 0x2bf: 0x92, - // Block 0xb, offset 0x2c0 - 0x2c0: 0x05, 0x2c1: 0x05, 0x2c2: 0x05, 0x2c3: 0x05, 0x2c4: 0x05, 0x2c5: 0x05, 0x2c6: 0x05, 0x2c7: 0x05, - 0x2c8: 0x05, 0x2c9: 0x05, 0x2ca: 0x05, 0x2cb: 0x05, 0x2cc: 0x05, 0x2cd: 0x05, 0x2ce: 0x05, 0x2cf: 0x05, - 0x2d0: 0x05, 0x2d1: 0x05, 0x2d2: 0x93, 0x2d3: 0x94, 0x2d4: 0x05, 0x2d5: 0x05, 0x2d6: 0x05, 0x2d7: 0x05, - 0x2d8: 0x95, 0x2d9: 0x96, 0x2da: 0x97, 0x2db: 0x98, 0x2dc: 0x99, 0x2dd: 0x9a, 0x2de: 0x9b, 0x2df: 0x9c, - 0x2e0: 0x9d, 0x2e1: 0x9e, 0x2e2: 0x05, 0x2e3: 0x9f, 0x2e4: 0xa0, 0x2e5: 0xa1, 0x2e6: 0xa2, 0x2e7: 0xa3, - 0x2e8: 0xa4, 0x2e9: 0xa5, 0x2ea: 0xa6, 0x2eb: 0xa7, 0x2ec: 0xa8, 0x2ed: 0xa9, 0x2ee: 0x05, 0x2ef: 0xaa, - 0x2f0: 0x05, 0x2f1: 0x05, 0x2f2: 0x05, 0x2f3: 0x05, 0x2f4: 0x05, 0x2f5: 0x05, 0x2f6: 0x05, 0x2f7: 0x05, - 0x2f8: 0x05, 0x2f9: 0x05, 0x2fa: 0x05, 0x2fb: 0x05, 0x2fc: 0x05, 0x2fd: 0x05, 0x2fe: 0x05, 0x2ff: 0x05, - // Block 0xc, offset 0x300 - 0x300: 0x05, 0x301: 0x05, 0x302: 0x05, 0x303: 0x05, 0x304: 0x05, 0x305: 0x05, 0x306: 0x05, 0x307: 0x05, - 0x308: 0x05, 0x309: 0x05, 0x30a: 0x05, 0x30b: 0x05, 0x30c: 0x05, 0x30d: 0x05, 0x30e: 0x05, 0x30f: 0x05, - 0x310: 0x05, 0x311: 0x05, 0x312: 0x05, 0x313: 0x05, 0x314: 0x05, 0x315: 0x05, 0x316: 0x05, 0x317: 0x05, - 0x318: 0x05, 0x319: 0x05, 0x31a: 0x05, 0x31b: 0x05, 0x31c: 0x05, 0x31d: 0x05, 0x31e: 0x05, 0x31f: 0x05, - 0x320: 0x05, 0x321: 0x05, 0x322: 0x05, 0x323: 0x05, 0x324: 0x05, 0x325: 0x05, 0x326: 0x05, 0x327: 0x05, - 0x328: 0x05, 0x329: 0x05, 0x32a: 0x05, 0x32b: 0x05, 0x32c: 0x05, 0x32d: 0x05, 0x32e: 0x05, 0x32f: 0x05, - 0x330: 0x05, 0x331: 0x05, 0x332: 0x05, 0x333: 0x05, 0x334: 0x05, 0x335: 0x05, 0x336: 0x05, 0x337: 0x05, - 0x338: 0x05, 0x339: 0x05, 0x33a: 0x05, 0x33b: 0x05, 0x33c: 0x05, 0x33d: 0x05, 0x33e: 0x05, 0x33f: 0x05, - // Block 0xd, offset 0x340 - 0x340: 0x05, 0x341: 0x05, 0x342: 0x05, 0x343: 0x05, 0x344: 0x05, 0x345: 0x05, 0x346: 0x05, 0x347: 0x05, - 0x348: 0x05, 0x349: 0x05, 0x34a: 0x05, 0x34b: 0x05, 0x34c: 0x05, 0x34d: 0x05, 0x34e: 0x05, 0x34f: 0x05, - 0x350: 0x05, 0x351: 0x05, 0x352: 0x05, 0x353: 0x05, 0x354: 0x05, 0x355: 0x05, 0x356: 0x05, 0x357: 0x05, - 0x358: 0x05, 0x359: 0x05, 0x35a: 0x05, 0x35b: 0x05, 0x35c: 0x05, 0x35d: 0x05, 0x35e: 0xab, 0x35f: 0xac, - // Block 0xe, offset 0x380 - 0x380: 0x3e, 0x381: 0x3e, 0x382: 0x3e, 0x383: 0x3e, 0x384: 0x3e, 0x385: 0x3e, 0x386: 0x3e, 0x387: 0x3e, - 0x388: 0x3e, 0x389: 0x3e, 0x38a: 0x3e, 0x38b: 0x3e, 0x38c: 0x3e, 0x38d: 0x3e, 0x38e: 0x3e, 0x38f: 0x3e, - 0x390: 0x3e, 0x391: 0x3e, 0x392: 0x3e, 0x393: 0x3e, 0x394: 0x3e, 0x395: 0x3e, 0x396: 0x3e, 0x397: 0x3e, - 0x398: 0x3e, 0x399: 0x3e, 0x39a: 0x3e, 0x39b: 0x3e, 0x39c: 0x3e, 0x39d: 0x3e, 0x39e: 0x3e, 0x39f: 0x3e, - 0x3a0: 0x3e, 0x3a1: 0x3e, 0x3a2: 0x3e, 0x3a3: 0x3e, 0x3a4: 0x3e, 0x3a5: 0x3e, 0x3a6: 0x3e, 0x3a7: 0x3e, - 0x3a8: 0x3e, 0x3a9: 0x3e, 0x3aa: 0x3e, 0x3ab: 0x3e, 0x3ac: 0x3e, 0x3ad: 0x3e, 0x3ae: 0x3e, 0x3af: 0x3e, - 0x3b0: 0x3e, 0x3b1: 0x3e, 0x3b2: 0x3e, 0x3b3: 0x3e, 0x3b4: 0x3e, 0x3b5: 0x3e, 0x3b6: 0x3e, 0x3b7: 0x3e, - 0x3b8: 0x3e, 0x3b9: 0x3e, 0x3ba: 0x3e, 0x3bb: 0x3e, 0x3bc: 0x3e, 0x3bd: 0x3e, 0x3be: 0x3e, 0x3bf: 0x3e, - // Block 0xf, offset 0x3c0 - 0x3c0: 0x3e, 0x3c1: 0x3e, 0x3c2: 0x3e, 0x3c3: 0x3e, 0x3c4: 0x3e, 0x3c5: 0x3e, 0x3c6: 0x3e, 0x3c7: 0x3e, - 0x3c8: 0x3e, 0x3c9: 0x3e, 0x3ca: 0x3e, 0x3cb: 0x3e, 0x3cc: 0x3e, 0x3cd: 0x3e, 0x3ce: 0x3e, 0x3cf: 0x3e, - 0x3d0: 0x3e, 0x3d1: 0x3e, 0x3d2: 0x3e, 0x3d3: 0x3e, 0x3d4: 0x3e, 0x3d5: 0x3e, 0x3d6: 0x3e, 0x3d7: 0x3e, - 0x3d8: 0x3e, 0x3d9: 0x3e, 0x3da: 0x3e, 0x3db: 0x3e, 0x3dc: 0x3e, 0x3dd: 0x3e, 0x3de: 0x3e, 0x3df: 0x3e, - 0x3e0: 0x3e, 0x3e1: 0x3e, 0x3e2: 0x3e, 0x3e3: 0x3e, 0x3e4: 0x83, 0x3e5: 0x83, 0x3e6: 0x83, 0x3e7: 0x83, - 0x3e8: 0xad, 0x3e9: 0xae, 0x3ea: 0x83, 0x3eb: 0xaf, 0x3ec: 0xb0, 0x3ed: 0xb1, 0x3ee: 0x71, 0x3ef: 0xb2, - 0x3f0: 0x71, 0x3f1: 0x71, 0x3f2: 0x71, 0x3f3: 0x71, 0x3f4: 0x71, 0x3f5: 0xb3, 0x3f6: 0xb4, 0x3f7: 0xb5, - 0x3f8: 0xb6, 0x3f9: 0xb7, 0x3fa: 0x71, 0x3fb: 0xb8, 0x3fc: 0xb9, 0x3fd: 0xba, 0x3fe: 0xbb, 0x3ff: 0xbc, - // Block 0x10, offset 0x400 - 0x400: 0xbd, 0x401: 0xbe, 0x402: 0x05, 0x403: 0xbf, 0x404: 0xc0, 0x405: 0xc1, 0x406: 0xc2, 0x407: 0xc3, - 0x40a: 0xc4, 0x40b: 0xc5, 0x40c: 0xc6, 0x40d: 0xc7, 0x40e: 0xc8, 0x40f: 0xc9, - 0x410: 0x05, 0x411: 0x05, 0x412: 0xca, 0x413: 0xcb, 0x414: 0xcc, 0x415: 0xcd, - 0x418: 0x05, 0x419: 0x05, 0x41a: 0x05, 0x41b: 0x05, 0x41c: 0xce, 0x41d: 0xcf, - 0x420: 0xd0, 0x421: 0xd1, 0x422: 0xd2, 0x423: 0xd3, 0x424: 0xd4, 0x426: 0xd5, 0x427: 0xb4, - 0x428: 0xd6, 0x429: 0xd7, 0x42a: 0xd8, 0x42b: 0xd9, 0x42c: 0xda, 0x42d: 0xdb, 0x42e: 0xdc, - 0x430: 0x05, 0x431: 0x5f, 0x432: 0xdd, 0x433: 0xde, - 0x439: 0xdf, - // Block 0x11, offset 0x440 - 0x440: 0xe0, 0x441: 0xe1, 0x442: 0xe2, 0x443: 0xe3, 0x444: 0xe4, 0x445: 0xe5, 0x446: 0xe6, 0x447: 0xe7, - 0x448: 0xe8, 0x44a: 0xe9, 0x44b: 0xea, 0x44c: 0xeb, 0x44d: 0xec, - 0x450: 0xed, 0x451: 0xee, 0x452: 0xef, 0x453: 0xf0, 0x456: 0xf1, 0x457: 0xf2, - 0x458: 0xf3, 0x459: 0xf4, 0x45a: 0xf5, 0x45b: 0xf6, 0x45c: 0xf7, - 0x462: 0xf8, 0x463: 0xf9, - 0x46b: 0xfa, - 0x470: 0xfb, 0x471: 0xfc, 0x472: 0xfd, - // Block 0x12, offset 0x480 - 0x480: 0x05, 0x481: 0x05, 0x482: 0x05, 0x483: 0x05, 0x484: 0x05, 0x485: 0x05, 0x486: 0x05, 0x487: 0x05, - 0x488: 0x05, 0x489: 0x05, 0x48a: 0x05, 0x48b: 0x05, 0x48c: 0x05, 0x48d: 0x05, 0x48e: 0xfe, - 0x490: 0x71, 0x491: 0xff, 0x492: 0x05, 0x493: 0x05, 0x494: 0x05, 0x495: 0x100, - // Block 0x13, offset 0x4c0 - 0x4c0: 0x05, 0x4c1: 0x05, 0x4c2: 0x05, 0x4c3: 0x05, 0x4c4: 0x05, 0x4c5: 0x05, 0x4c6: 0x05, 0x4c7: 0x05, - 0x4c8: 0x05, 0x4c9: 0x05, 0x4ca: 0x05, 0x4cb: 0x05, 0x4cc: 0x05, 0x4cd: 0x05, 0x4ce: 0x05, 0x4cf: 0x05, - 0x4d0: 0x101, - // Block 0x14, offset 0x500 - 0x510: 0x05, 0x511: 0x05, 0x512: 0x05, 0x513: 0x05, 0x514: 0x05, 0x515: 0x05, 0x516: 0x05, 0x517: 0x05, - 0x518: 0x05, 0x519: 0x102, - // Block 0x15, offset 0x540 - 0x560: 0x05, 0x561: 0x05, 0x562: 0x05, 0x563: 0x05, 0x564: 0x05, 0x565: 0x05, 0x566: 0x05, 0x567: 0x05, - 0x568: 0xfa, 0x569: 0x103, 0x56b: 0x104, 0x56c: 0x105, 0x56d: 0x106, 0x56e: 0x107, - 0x57c: 0x05, 0x57d: 0x108, 0x57e: 0x109, 0x57f: 0x10a, - // Block 0x16, offset 0x580 - 0x580: 0x05, 0x581: 0x05, 0x582: 0x05, 0x583: 0x05, 0x584: 0x05, 0x585: 0x05, 0x586: 0x05, 0x587: 0x05, - 0x588: 0x05, 0x589: 0x05, 0x58a: 0x05, 0x58b: 0x05, 0x58c: 0x05, 0x58d: 0x05, 0x58e: 0x05, 0x58f: 0x05, - 0x590: 0x05, 0x591: 0x05, 0x592: 0x05, 0x593: 0x05, 0x594: 0x05, 0x595: 0x05, 0x596: 0x05, 0x597: 0x05, - 0x598: 0x05, 0x599: 0x05, 0x59a: 0x05, 0x59b: 0x05, 0x59c: 0x05, 0x59d: 0x05, 0x59e: 0x05, 0x59f: 0x10b, - 0x5a0: 0x05, 0x5a1: 0x05, 0x5a2: 0x05, 0x5a3: 0x05, 0x5a4: 0x05, 0x5a5: 0x05, 0x5a6: 0x05, 0x5a7: 0x05, - 0x5a8: 0x05, 0x5a9: 0x05, 0x5aa: 0x05, 0x5ab: 0xdd, - // Block 0x17, offset 0x5c0 - 0x5c0: 0x10c, - 0x5f0: 0x05, 0x5f1: 0x10d, 0x5f2: 0x10e, - // Block 0x18, offset 0x600 - 0x600: 0x71, 0x601: 0x71, 0x602: 0x71, 0x603: 0x10f, 0x604: 0x110, 0x605: 0x111, 0x606: 0x112, 0x607: 0x113, - 0x608: 0xc1, 0x609: 0x114, 0x60c: 0x71, 0x60d: 0x115, - 0x610: 0x71, 0x611: 0x116, 0x612: 0x117, 0x613: 0x118, 0x614: 0x119, 0x615: 0x11a, 0x616: 0x71, 0x617: 0x71, - 0x618: 0x71, 0x619: 0x71, 0x61a: 0x11b, 0x61b: 0x71, 0x61c: 0x71, 0x61d: 0x71, 0x61e: 0x71, 0x61f: 0x11c, - 0x620: 0x71, 0x621: 0x71, 0x622: 0x71, 0x623: 0x71, 0x624: 0x71, 0x625: 0x71, 0x626: 0x71, 0x627: 0x71, - 0x628: 0x11d, 0x629: 0x11e, 0x62a: 0x11f, - // Block 0x19, offset 0x640 - 0x640: 0x120, - 0x660: 0x05, 0x661: 0x05, 0x662: 0x05, 0x663: 0x121, 0x664: 0x122, 0x665: 0x123, - 0x678: 0x124, 0x679: 0x125, 0x67a: 0x126, 0x67b: 0x127, - // Block 0x1a, offset 0x680 - 0x680: 0x128, 0x681: 0x71, 0x682: 0x129, 0x683: 0x12a, 0x684: 0x12b, 0x685: 0x128, 0x686: 0x12c, 0x687: 0x12d, - 0x688: 0x12e, 0x689: 0x12f, 0x68c: 0x71, 0x68d: 0x71, 0x68e: 0x71, 0x68f: 0x71, - 0x690: 0x71, 0x691: 0x71, 0x692: 0x71, 0x693: 0x71, 0x694: 0x71, 0x695: 0x71, 0x696: 0x71, 0x697: 0x71, - 0x698: 0x71, 0x699: 0x71, 0x69a: 0x71, 0x69b: 0x130, 0x69c: 0x71, 0x69d: 0x131, 0x69e: 0x71, 0x69f: 0x132, - 0x6a0: 0x133, 0x6a1: 0x134, 0x6a2: 0x135, 0x6a4: 0x136, 0x6a5: 0x137, 0x6a6: 0x138, 0x6a7: 0x139, - // Block 0x1b, offset 0x6c0 - 0x6c0: 0x90, 0x6c1: 0x90, 0x6c2: 0x90, 0x6c3: 0x90, 0x6c4: 0x90, 0x6c5: 0x90, 0x6c6: 0x90, 0x6c7: 0x90, - 0x6c8: 0x90, 0x6c9: 0x90, 0x6ca: 0x90, 0x6cb: 0x90, 0x6cc: 0x90, 0x6cd: 0x90, 0x6ce: 0x90, 0x6cf: 0x90, - 0x6d0: 0x90, 0x6d1: 0x90, 0x6d2: 0x90, 0x6d3: 0x90, 0x6d4: 0x90, 0x6d5: 0x90, 0x6d6: 0x90, 0x6d7: 0x90, - 0x6d8: 0x90, 0x6d9: 0x90, 0x6da: 0x90, 0x6db: 0x13a, 0x6dc: 0x90, 0x6dd: 0x90, 0x6de: 0x90, 0x6df: 0x90, - 0x6e0: 0x90, 0x6e1: 0x90, 0x6e2: 0x90, 0x6e3: 0x90, 0x6e4: 0x90, 0x6e5: 0x90, 0x6e6: 0x90, 0x6e7: 0x90, - 0x6e8: 0x90, 0x6e9: 0x90, 0x6ea: 0x90, 0x6eb: 0x90, 0x6ec: 0x90, 0x6ed: 0x90, 0x6ee: 0x90, 0x6ef: 0x90, - 0x6f0: 0x90, 0x6f1: 0x90, 0x6f2: 0x90, 0x6f3: 0x90, 0x6f4: 0x90, 0x6f5: 0x90, 0x6f6: 0x90, 0x6f7: 0x90, - 0x6f8: 0x90, 0x6f9: 0x90, 0x6fa: 0x90, 0x6fb: 0x90, 0x6fc: 0x90, 0x6fd: 0x90, 0x6fe: 0x90, 0x6ff: 0x90, - // Block 0x1c, offset 0x700 - 0x700: 0x90, 0x701: 0x90, 0x702: 0x90, 0x703: 0x90, 0x704: 0x90, 0x705: 0x90, 0x706: 0x90, 0x707: 0x90, - 0x708: 0x90, 0x709: 0x90, 0x70a: 0x90, 0x70b: 0x90, 0x70c: 0x90, 0x70d: 0x90, 0x70e: 0x90, 0x70f: 0x90, - 0x710: 0x90, 0x711: 0x90, 0x712: 0x90, 0x713: 0x90, 0x714: 0x90, 0x715: 0x90, 0x716: 0x90, 0x717: 0x90, - 0x718: 0x90, 0x719: 0x90, 0x71a: 0x90, 0x71b: 0x90, 0x71c: 0x13b, 0x71d: 0x90, 0x71e: 0x90, 0x71f: 0x90, - 0x720: 0x13c, 0x721: 0x90, 0x722: 0x90, 0x723: 0x90, 0x724: 0x90, 0x725: 0x90, 0x726: 0x90, 0x727: 0x90, - 0x728: 0x90, 0x729: 0x90, 0x72a: 0x90, 0x72b: 0x90, 0x72c: 0x90, 0x72d: 0x90, 0x72e: 0x90, 0x72f: 0x90, - 0x730: 0x90, 0x731: 0x90, 0x732: 0x90, 0x733: 0x90, 0x734: 0x90, 0x735: 0x90, 0x736: 0x90, 0x737: 0x90, - 0x738: 0x90, 0x739: 0x90, 0x73a: 0x90, 0x73b: 0x90, 0x73c: 0x90, 0x73d: 0x90, 0x73e: 0x90, 0x73f: 0x90, - // Block 0x1d, offset 0x740 - 0x740: 0x90, 0x741: 0x90, 0x742: 0x90, 0x743: 0x90, 0x744: 0x90, 0x745: 0x90, 0x746: 0x90, 0x747: 0x90, - 0x748: 0x90, 0x749: 0x90, 0x74a: 0x90, 0x74b: 0x90, 0x74c: 0x90, 0x74d: 0x90, 0x74e: 0x90, 0x74f: 0x90, - 0x750: 0x90, 0x751: 0x90, 0x752: 0x90, 0x753: 0x90, 0x754: 0x90, 0x755: 0x90, 0x756: 0x90, 0x757: 0x90, - 0x758: 0x90, 0x759: 0x90, 0x75a: 0x90, 0x75b: 0x90, 0x75c: 0x90, 0x75d: 0x90, 0x75e: 0x90, 0x75f: 0x90, - 0x760: 0x90, 0x761: 0x90, 0x762: 0x90, 0x763: 0x90, 0x764: 0x90, 0x765: 0x90, 0x766: 0x90, 0x767: 0x90, - 0x768: 0x90, 0x769: 0x90, 0x76a: 0x90, 0x76b: 0x90, 0x76c: 0x90, 0x76d: 0x90, 0x76e: 0x90, 0x76f: 0x90, - 0x770: 0x90, 0x771: 0x90, 0x772: 0x90, 0x773: 0x90, 0x774: 0x90, 0x775: 0x90, 0x776: 0x90, 0x777: 0x90, - 0x778: 0x90, 0x779: 0x90, 0x77a: 0x13d, - // Block 0x1e, offset 0x780 - 0x7a0: 0x83, 0x7a1: 0x83, 0x7a2: 0x83, 0x7a3: 0x83, 0x7a4: 0x83, 0x7a5: 0x83, 0x7a6: 0x83, 0x7a7: 0x83, - 0x7a8: 0x13e, - // Block 0x1f, offset 0x7c0 - 0x7d0: 0x0e, 0x7d1: 0x0f, 0x7d2: 0x10, 0x7d3: 0x11, 0x7d4: 0x12, 0x7d6: 0x13, 0x7d7: 0x0a, - 0x7d8: 0x14, 0x7db: 0x15, 0x7dd: 0x16, 0x7de: 0x17, 0x7df: 0x18, - 0x7e0: 0x07, 0x7e1: 0x07, 0x7e2: 0x07, 0x7e3: 0x07, 0x7e4: 0x07, 0x7e5: 0x07, 0x7e6: 0x07, 0x7e7: 0x07, - 0x7e8: 0x07, 0x7e9: 0x07, 0x7ea: 0x19, 0x7eb: 0x1a, 0x7ec: 0x1b, 0x7ef: 0x1c, - // Block 0x20, offset 0x800 - 0x800: 0x13f, 0x801: 0x3e, 0x804: 0x3e, 0x805: 0x3e, 0x806: 0x3e, 0x807: 0x140, - // Block 0x21, offset 0x840 - 0x840: 0x3e, 0x841: 0x3e, 0x842: 0x3e, 0x843: 0x3e, 0x844: 0x3e, 0x845: 0x3e, 0x846: 0x3e, 0x847: 0x3e, - 0x848: 0x3e, 0x849: 0x3e, 0x84a: 0x3e, 0x84b: 0x3e, 0x84c: 0x3e, 0x84d: 0x3e, 0x84e: 0x3e, 0x84f: 0x3e, - 0x850: 0x3e, 0x851: 0x3e, 0x852: 0x3e, 0x853: 0x3e, 0x854: 0x3e, 0x855: 0x3e, 0x856: 0x3e, 0x857: 0x3e, - 0x858: 0x3e, 0x859: 0x3e, 0x85a: 0x3e, 0x85b: 0x3e, 0x85c: 0x3e, 0x85d: 0x3e, 0x85e: 0x3e, 0x85f: 0x3e, - 0x860: 0x3e, 0x861: 0x3e, 0x862: 0x3e, 0x863: 0x3e, 0x864: 0x3e, 0x865: 0x3e, 0x866: 0x3e, 0x867: 0x3e, - 0x868: 0x3e, 0x869: 0x3e, 0x86a: 0x3e, 0x86b: 0x3e, 0x86c: 0x3e, 0x86d: 0x3e, 0x86e: 0x3e, 0x86f: 0x3e, - 0x870: 0x3e, 0x871: 0x3e, 0x872: 0x3e, 0x873: 0x3e, 0x874: 0x3e, 0x875: 0x3e, 0x876: 0x3e, 0x877: 0x3e, - 0x878: 0x3e, 0x879: 0x3e, 0x87a: 0x3e, 0x87b: 0x3e, 0x87c: 0x3e, 0x87d: 0x3e, 0x87e: 0x3e, 0x87f: 0x141, - // Block 0x22, offset 0x880 - 0x8a0: 0x1e, - 0x8b0: 0x0c, 0x8b1: 0x0c, 0x8b2: 0x0c, 0x8b3: 0x0c, 0x8b4: 0x0c, 0x8b5: 0x0c, 0x8b6: 0x0c, 0x8b7: 0x0c, - 0x8b8: 0x0c, 0x8b9: 0x0c, 0x8ba: 0x0c, 0x8bb: 0x0c, 0x8bc: 0x0c, 0x8bd: 0x0c, 0x8be: 0x0c, 0x8bf: 0x1f, - // Block 0x23, offset 0x8c0 - 0x8c0: 0x0c, 0x8c1: 0x0c, 0x8c2: 0x0c, 0x8c3: 0x0c, 0x8c4: 0x0c, 0x8c5: 0x0c, 0x8c6: 0x0c, 0x8c7: 0x0c, - 0x8c8: 0x0c, 0x8c9: 0x0c, 0x8ca: 0x0c, 0x8cb: 0x0c, 0x8cc: 0x0c, 0x8cd: 0x0c, 0x8ce: 0x0c, 0x8cf: 0x1f, -} - -// Total table size 25344 bytes (24KiB); checksum: 811C9DC5 diff --git a/vendor/golang.org/x/text/secure/precis/tables10.0.0.go b/vendor/golang.org/x/text/secure/precis/tables10.0.0.go new file mode 100644 index 0000000..22d5ee8 --- /dev/null +++ b/vendor/golang.org/x/text/secure/precis/tables10.0.0.go @@ -0,0 +1,3889 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// +build go1.10 + +package precis + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "10.0.0" + +// 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 *derivedPropertiesTrie) lookup(s []byte) (v uint8, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return derivedPropertiesValues[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 := derivedPropertiesIndex[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 := derivedPropertiesIndex[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 = derivedPropertiesIndex[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 := derivedPropertiesIndex[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 = derivedPropertiesIndex[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 = derivedPropertiesIndex[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 *derivedPropertiesTrie) lookupUnsafe(s []byte) uint8 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return derivedPropertiesValues[c0] + } + i := derivedPropertiesIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = derivedPropertiesIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = derivedPropertiesIndex[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 *derivedPropertiesTrie) lookupString(s string) (v uint8, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return derivedPropertiesValues[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 := derivedPropertiesIndex[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 := derivedPropertiesIndex[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 = derivedPropertiesIndex[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 := derivedPropertiesIndex[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 = derivedPropertiesIndex[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 = derivedPropertiesIndex[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 *derivedPropertiesTrie) lookupStringUnsafe(s string) uint8 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return derivedPropertiesValues[c0] + } + i := derivedPropertiesIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = derivedPropertiesIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = derivedPropertiesIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// derivedPropertiesTrie. Total size: 25920 bytes (25.31 KiB). Checksum: 25eb1c8ad0a9331f. +type derivedPropertiesTrie struct{} + +func newDerivedPropertiesTrie(i int) *derivedPropertiesTrie { + return &derivedPropertiesTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *derivedPropertiesTrie) lookupValue(n uint32, b byte) uint8 { + switch { + default: + return uint8(derivedPropertiesValues[n<<6+uint32(b)]) + } +} + +// derivedPropertiesValues: 331 blocks, 21184 entries, 21184 bytes +// The third block is the zero block. +var derivedPropertiesValues = [21184]uint8{ + // Block 0x0, offset 0x0 + 0x00: 0x0040, 0x01: 0x0040, 0x02: 0x0040, 0x03: 0x0040, 0x04: 0x0040, 0x05: 0x0040, + 0x06: 0x0040, 0x07: 0x0040, 0x08: 0x0040, 0x09: 0x0040, 0x0a: 0x0040, 0x0b: 0x0040, + 0x0c: 0x0040, 0x0d: 0x0040, 0x0e: 0x0040, 0x0f: 0x0040, 0x10: 0x0040, 0x11: 0x0040, + 0x12: 0x0040, 0x13: 0x0040, 0x14: 0x0040, 0x15: 0x0040, 0x16: 0x0040, 0x17: 0x0040, + 0x18: 0x0040, 0x19: 0x0040, 0x1a: 0x0040, 0x1b: 0x0040, 0x1c: 0x0040, 0x1d: 0x0040, + 0x1e: 0x0040, 0x1f: 0x0040, 0x20: 0x0080, 0x21: 0x00c0, 0x22: 0x00c0, 0x23: 0x00c0, + 0x24: 0x00c0, 0x25: 0x00c0, 0x26: 0x00c0, 0x27: 0x00c0, 0x28: 0x00c0, 0x29: 0x00c0, + 0x2a: 0x00c0, 0x2b: 0x00c0, 0x2c: 0x00c0, 0x2d: 0x00c0, 0x2e: 0x00c0, 0x2f: 0x00c0, + 0x30: 0x00c0, 0x31: 0x00c0, 0x32: 0x00c0, 0x33: 0x00c0, 0x34: 0x00c0, 0x35: 0x00c0, + 0x36: 0x00c0, 0x37: 0x00c0, 0x38: 0x00c0, 0x39: 0x00c0, 0x3a: 0x00c0, 0x3b: 0x00c0, + 0x3c: 0x00c0, 0x3d: 0x00c0, 0x3e: 0x00c0, 0x3f: 0x00c0, + // Block 0x1, offset 0x40 + 0x40: 0x00c0, 0x41: 0x00c0, 0x42: 0x00c0, 0x43: 0x00c0, 0x44: 0x00c0, 0x45: 0x00c0, + 0x46: 0x00c0, 0x47: 0x00c0, 0x48: 0x00c0, 0x49: 0x00c0, 0x4a: 0x00c0, 0x4b: 0x00c0, + 0x4c: 0x00c0, 0x4d: 0x00c0, 0x4e: 0x00c0, 0x4f: 0x00c0, 0x50: 0x00c0, 0x51: 0x00c0, + 0x52: 0x00c0, 0x53: 0x00c0, 0x54: 0x00c0, 0x55: 0x00c0, 0x56: 0x00c0, 0x57: 0x00c0, + 0x58: 0x00c0, 0x59: 0x00c0, 0x5a: 0x00c0, 0x5b: 0x00c0, 0x5c: 0x00c0, 0x5d: 0x00c0, + 0x5e: 0x00c0, 0x5f: 0x00c0, 0x60: 0x00c0, 0x61: 0x00c0, 0x62: 0x00c0, 0x63: 0x00c0, + 0x64: 0x00c0, 0x65: 0x00c0, 0x66: 0x00c0, 0x67: 0x00c0, 0x68: 0x00c0, 0x69: 0x00c0, + 0x6a: 0x00c0, 0x6b: 0x00c0, 0x6c: 0x00c7, 0x6d: 0x00c0, 0x6e: 0x00c0, 0x6f: 0x00c0, + 0x70: 0x00c0, 0x71: 0x00c0, 0x72: 0x00c0, 0x73: 0x00c0, 0x74: 0x00c0, 0x75: 0x00c0, + 0x76: 0x00c0, 0x77: 0x00c0, 0x78: 0x00c0, 0x79: 0x00c0, 0x7a: 0x00c0, 0x7b: 0x00c0, + 0x7c: 0x00c0, 0x7d: 0x00c0, 0x7e: 0x00c0, 0x7f: 0x0040, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc0: 0x0040, 0xc1: 0x0040, 0xc2: 0x0040, 0xc3: 0x0040, 0xc4: 0x0040, 0xc5: 0x0040, + 0xc6: 0x0040, 0xc7: 0x0040, 0xc8: 0x0040, 0xc9: 0x0040, 0xca: 0x0040, 0xcb: 0x0040, + 0xcc: 0x0040, 0xcd: 0x0040, 0xce: 0x0040, 0xcf: 0x0040, 0xd0: 0x0040, 0xd1: 0x0040, + 0xd2: 0x0040, 0xd3: 0x0040, 0xd4: 0x0040, 0xd5: 0x0040, 0xd6: 0x0040, 0xd7: 0x0040, + 0xd8: 0x0040, 0xd9: 0x0040, 0xda: 0x0040, 0xdb: 0x0040, 0xdc: 0x0040, 0xdd: 0x0040, + 0xde: 0x0040, 0xdf: 0x0040, 0xe0: 0x0080, 0xe1: 0x0080, 0xe2: 0x0080, 0xe3: 0x0080, + 0xe4: 0x0080, 0xe5: 0x0080, 0xe6: 0x0080, 0xe7: 0x0080, 0xe8: 0x0080, 0xe9: 0x0080, + 0xea: 0x0080, 0xeb: 0x0080, 0xec: 0x0080, 0xed: 0x0040, 0xee: 0x0080, 0xef: 0x0080, + 0xf0: 0x0080, 0xf1: 0x0080, 0xf2: 0x0080, 0xf3: 0x0080, 0xf4: 0x0080, 0xf5: 0x0080, + 0xf6: 0x0080, 0xf7: 0x004f, 0xf8: 0x0080, 0xf9: 0x0080, 0xfa: 0x0080, 0xfb: 0x0080, + 0xfc: 0x0080, 0xfd: 0x0080, 0xfe: 0x0080, 0xff: 0x0080, + // Block 0x4, offset 0x100 + 0x100: 0x00c0, 0x101: 0x00c0, 0x102: 0x00c0, 0x103: 0x00c0, 0x104: 0x00c0, 0x105: 0x00c0, + 0x106: 0x00c0, 0x107: 0x00c0, 0x108: 0x00c0, 0x109: 0x00c0, 0x10a: 0x00c0, 0x10b: 0x00c0, + 0x10c: 0x00c0, 0x10d: 0x00c0, 0x10e: 0x00c0, 0x10f: 0x00c0, 0x110: 0x00c0, 0x111: 0x00c0, + 0x112: 0x00c0, 0x113: 0x00c0, 0x114: 0x00c0, 0x115: 0x00c0, 0x116: 0x00c0, 0x117: 0x0080, + 0x118: 0x00c0, 0x119: 0x00c0, 0x11a: 0x00c0, 0x11b: 0x00c0, 0x11c: 0x00c0, 0x11d: 0x00c0, + 0x11e: 0x00c0, 0x11f: 0x00c0, 0x120: 0x00c0, 0x121: 0x00c0, 0x122: 0x00c0, 0x123: 0x00c0, + 0x124: 0x00c0, 0x125: 0x00c0, 0x126: 0x00c0, 0x127: 0x00c0, 0x128: 0x00c0, 0x129: 0x00c0, + 0x12a: 0x00c0, 0x12b: 0x00c0, 0x12c: 0x00c0, 0x12d: 0x00c0, 0x12e: 0x00c0, 0x12f: 0x00c0, + 0x130: 0x00c0, 0x131: 0x00c0, 0x132: 0x00c0, 0x133: 0x00c0, 0x134: 0x00c0, 0x135: 0x00c0, + 0x136: 0x00c0, 0x137: 0x0080, 0x138: 0x00c0, 0x139: 0x00c0, 0x13a: 0x00c0, 0x13b: 0x00c0, + 0x13c: 0x00c0, 0x13d: 0x00c0, 0x13e: 0x00c0, 0x13f: 0x00c0, + // Block 0x5, offset 0x140 + 0x140: 0x00c0, 0x141: 0x00c0, 0x142: 0x00c0, 0x143: 0x00c0, 0x144: 0x00c0, 0x145: 0x00c0, + 0x146: 0x00c0, 0x147: 0x00c0, 0x148: 0x00c0, 0x149: 0x00c0, 0x14a: 0x00c0, 0x14b: 0x00c0, + 0x14c: 0x00c0, 0x14d: 0x00c0, 0x14e: 0x00c0, 0x14f: 0x00c0, 0x150: 0x00c0, 0x151: 0x00c0, + 0x152: 0x00c0, 0x153: 0x00c0, 0x154: 0x00c0, 0x155: 0x00c0, 0x156: 0x00c0, 0x157: 0x00c0, + 0x158: 0x00c0, 0x159: 0x00c0, 0x15a: 0x00c0, 0x15b: 0x00c0, 0x15c: 0x00c0, 0x15d: 0x00c0, + 0x15e: 0x00c0, 0x15f: 0x00c0, 0x160: 0x00c0, 0x161: 0x00c0, 0x162: 0x00c0, 0x163: 0x00c0, + 0x164: 0x00c0, 0x165: 0x00c0, 0x166: 0x00c0, 0x167: 0x00c0, 0x168: 0x00c0, 0x169: 0x00c0, + 0x16a: 0x00c0, 0x16b: 0x00c0, 0x16c: 0x00c0, 0x16d: 0x00c0, 0x16e: 0x00c0, 0x16f: 0x00c0, + 0x170: 0x00c0, 0x171: 0x00c0, 0x172: 0x0080, 0x173: 0x0080, 0x174: 0x00c0, 0x175: 0x00c0, + 0x176: 0x00c0, 0x177: 0x00c0, 0x178: 0x00c0, 0x179: 0x00c0, 0x17a: 0x00c0, 0x17b: 0x00c0, + 0x17c: 0x00c0, 0x17d: 0x00c0, 0x17e: 0x00c0, 0x17f: 0x0080, + // Block 0x6, offset 0x180 + 0x180: 0x0080, 0x181: 0x00c0, 0x182: 0x00c0, 0x183: 0x00c0, 0x184: 0x00c0, 0x185: 0x00c0, + 0x186: 0x00c0, 0x187: 0x00c0, 0x188: 0x00c0, 0x189: 0x0080, 0x18a: 0x00c0, 0x18b: 0x00c0, + 0x18c: 0x00c0, 0x18d: 0x00c0, 0x18e: 0x00c0, 0x18f: 0x00c0, 0x190: 0x00c0, 0x191: 0x00c0, + 0x192: 0x00c0, 0x193: 0x00c0, 0x194: 0x00c0, 0x195: 0x00c0, 0x196: 0x00c0, 0x197: 0x00c0, + 0x198: 0x00c0, 0x199: 0x00c0, 0x19a: 0x00c0, 0x19b: 0x00c0, 0x19c: 0x00c0, 0x19d: 0x00c0, + 0x19e: 0x00c0, 0x19f: 0x00c0, 0x1a0: 0x00c0, 0x1a1: 0x00c0, 0x1a2: 0x00c0, 0x1a3: 0x00c0, + 0x1a4: 0x00c0, 0x1a5: 0x00c0, 0x1a6: 0x00c0, 0x1a7: 0x00c0, 0x1a8: 0x00c0, 0x1a9: 0x00c0, + 0x1aa: 0x00c0, 0x1ab: 0x00c0, 0x1ac: 0x00c0, 0x1ad: 0x00c0, 0x1ae: 0x00c0, 0x1af: 0x00c0, + 0x1b0: 0x00c0, 0x1b1: 0x00c0, 0x1b2: 0x00c0, 0x1b3: 0x00c0, 0x1b4: 0x00c0, 0x1b5: 0x00c0, + 0x1b6: 0x00c0, 0x1b7: 0x00c0, 0x1b8: 0x00c0, 0x1b9: 0x00c0, 0x1ba: 0x00c0, 0x1bb: 0x00c0, + 0x1bc: 0x00c0, 0x1bd: 0x00c0, 0x1be: 0x00c0, 0x1bf: 0x0080, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x00c0, 0x1c1: 0x00c0, 0x1c2: 0x00c0, 0x1c3: 0x00c0, 0x1c4: 0x00c0, 0x1c5: 0x00c0, + 0x1c6: 0x00c0, 0x1c7: 0x00c0, 0x1c8: 0x00c0, 0x1c9: 0x00c0, 0x1ca: 0x00c0, 0x1cb: 0x00c0, + 0x1cc: 0x00c0, 0x1cd: 0x00c0, 0x1ce: 0x00c0, 0x1cf: 0x00c0, 0x1d0: 0x00c0, 0x1d1: 0x00c0, + 0x1d2: 0x00c0, 0x1d3: 0x00c0, 0x1d4: 0x00c0, 0x1d5: 0x00c0, 0x1d6: 0x00c0, 0x1d7: 0x00c0, + 0x1d8: 0x00c0, 0x1d9: 0x00c0, 0x1da: 0x00c0, 0x1db: 0x00c0, 0x1dc: 0x00c0, 0x1dd: 0x00c0, + 0x1de: 0x00c0, 0x1df: 0x00c0, 0x1e0: 0x00c0, 0x1e1: 0x00c0, 0x1e2: 0x00c0, 0x1e3: 0x00c0, + 0x1e4: 0x00c0, 0x1e5: 0x00c0, 0x1e6: 0x00c0, 0x1e7: 0x00c0, 0x1e8: 0x00c0, 0x1e9: 0x00c0, + 0x1ea: 0x00c0, 0x1eb: 0x00c0, 0x1ec: 0x00c0, 0x1ed: 0x00c0, 0x1ee: 0x00c0, 0x1ef: 0x00c0, + 0x1f0: 0x00c0, 0x1f1: 0x00c0, 0x1f2: 0x00c0, 0x1f3: 0x00c0, 0x1f4: 0x00c0, 0x1f5: 0x00c0, + 0x1f6: 0x00c0, 0x1f7: 0x00c0, 0x1f8: 0x00c0, 0x1f9: 0x00c0, 0x1fa: 0x00c0, 0x1fb: 0x00c0, + 0x1fc: 0x00c0, 0x1fd: 0x00c0, 0x1fe: 0x00c0, 0x1ff: 0x00c0, + // Block 0x8, offset 0x200 + 0x200: 0x00c0, 0x201: 0x00c0, 0x202: 0x00c0, 0x203: 0x00c0, 0x204: 0x0080, 0x205: 0x0080, + 0x206: 0x0080, 0x207: 0x0080, 0x208: 0x0080, 0x209: 0x0080, 0x20a: 0x0080, 0x20b: 0x0080, + 0x20c: 0x0080, 0x20d: 0x00c0, 0x20e: 0x00c0, 0x20f: 0x00c0, 0x210: 0x00c0, 0x211: 0x00c0, + 0x212: 0x00c0, 0x213: 0x00c0, 0x214: 0x00c0, 0x215: 0x00c0, 0x216: 0x00c0, 0x217: 0x00c0, + 0x218: 0x00c0, 0x219: 0x00c0, 0x21a: 0x00c0, 0x21b: 0x00c0, 0x21c: 0x00c0, 0x21d: 0x00c0, + 0x21e: 0x00c0, 0x21f: 0x00c0, 0x220: 0x00c0, 0x221: 0x00c0, 0x222: 0x00c0, 0x223: 0x00c0, + 0x224: 0x00c0, 0x225: 0x00c0, 0x226: 0x00c0, 0x227: 0x00c0, 0x228: 0x00c0, 0x229: 0x00c0, + 0x22a: 0x00c0, 0x22b: 0x00c0, 0x22c: 0x00c0, 0x22d: 0x00c0, 0x22e: 0x00c0, 0x22f: 0x00c0, + 0x230: 0x00c0, 0x231: 0x0080, 0x232: 0x0080, 0x233: 0x0080, 0x234: 0x00c0, 0x235: 0x00c0, + 0x236: 0x00c0, 0x237: 0x00c0, 0x238: 0x00c0, 0x239: 0x00c0, 0x23a: 0x00c0, 0x23b: 0x00c0, + 0x23c: 0x00c0, 0x23d: 0x00c0, 0x23e: 0x00c0, 0x23f: 0x00c0, + // Block 0x9, offset 0x240 + 0x240: 0x00c0, 0x241: 0x00c0, 0x242: 0x00c0, 0x243: 0x00c0, 0x244: 0x00c0, 0x245: 0x00c0, + 0x246: 0x00c0, 0x247: 0x00c0, 0x248: 0x00c0, 0x249: 0x00c0, 0x24a: 0x00c0, 0x24b: 0x00c0, + 0x24c: 0x00c0, 0x24d: 0x00c0, 0x24e: 0x00c0, 0x24f: 0x00c0, 0x250: 0x00c0, 0x251: 0x00c0, + 0x252: 0x00c0, 0x253: 0x00c0, 0x254: 0x00c0, 0x255: 0x00c0, 0x256: 0x00c0, 0x257: 0x00c0, + 0x258: 0x00c0, 0x259: 0x00c0, 0x25a: 0x00c0, 0x25b: 0x00c0, 0x25c: 0x00c0, 0x25d: 0x00c0, + 0x25e: 0x00c0, 0x25f: 0x00c0, 0x260: 0x00c0, 0x261: 0x00c0, 0x262: 0x00c0, 0x263: 0x00c0, + 0x264: 0x00c0, 0x265: 0x00c0, 0x266: 0x00c0, 0x267: 0x00c0, 0x268: 0x00c0, 0x269: 0x00c0, + 0x26a: 0x00c0, 0x26b: 0x00c0, 0x26c: 0x00c0, 0x26d: 0x00c0, 0x26e: 0x00c0, 0x26f: 0x00c0, + 0x270: 0x0080, 0x271: 0x0080, 0x272: 0x0080, 0x273: 0x0080, 0x274: 0x0080, 0x275: 0x0080, + 0x276: 0x0080, 0x277: 0x0080, 0x278: 0x0080, 0x279: 0x00c0, 0x27a: 0x00c0, 0x27b: 0x00c0, + 0x27c: 0x00c0, 0x27d: 0x00c0, 0x27e: 0x00c0, 0x27f: 0x00c0, + // Block 0xa, offset 0x280 + 0x280: 0x00c0, 0x281: 0x00c0, 0x282: 0x0080, 0x283: 0x0080, 0x284: 0x0080, 0x285: 0x0080, + 0x286: 0x00c0, 0x287: 0x00c0, 0x288: 0x00c0, 0x289: 0x00c0, 0x28a: 0x00c0, 0x28b: 0x00c0, + 0x28c: 0x00c0, 0x28d: 0x00c0, 0x28e: 0x00c0, 0x28f: 0x00c0, 0x290: 0x00c0, 0x291: 0x00c0, + 0x292: 0x0080, 0x293: 0x0080, 0x294: 0x0080, 0x295: 0x0080, 0x296: 0x0080, 0x297: 0x0080, + 0x298: 0x0080, 0x299: 0x0080, 0x29a: 0x0080, 0x29b: 0x0080, 0x29c: 0x0080, 0x29d: 0x0080, + 0x29e: 0x0080, 0x29f: 0x0080, 0x2a0: 0x0080, 0x2a1: 0x0080, 0x2a2: 0x0080, 0x2a3: 0x0080, + 0x2a4: 0x0080, 0x2a5: 0x0080, 0x2a6: 0x0080, 0x2a7: 0x0080, 0x2a8: 0x0080, 0x2a9: 0x0080, + 0x2aa: 0x0080, 0x2ab: 0x0080, 0x2ac: 0x00c0, 0x2ad: 0x0080, 0x2ae: 0x00c0, 0x2af: 0x0080, + 0x2b0: 0x0080, 0x2b1: 0x0080, 0x2b2: 0x0080, 0x2b3: 0x0080, 0x2b4: 0x0080, 0x2b5: 0x0080, + 0x2b6: 0x0080, 0x2b7: 0x0080, 0x2b8: 0x0080, 0x2b9: 0x0080, 0x2ba: 0x0080, 0x2bb: 0x0080, + 0x2bc: 0x0080, 0x2bd: 0x0080, 0x2be: 0x0080, 0x2bf: 0x0080, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x00c3, 0x2c1: 0x00c3, 0x2c2: 0x00c3, 0x2c3: 0x00c3, 0x2c4: 0x00c3, 0x2c5: 0x00c3, + 0x2c6: 0x00c3, 0x2c7: 0x00c3, 0x2c8: 0x00c3, 0x2c9: 0x00c3, 0x2ca: 0x00c3, 0x2cb: 0x00c3, + 0x2cc: 0x00c3, 0x2cd: 0x00c3, 0x2ce: 0x00c3, 0x2cf: 0x00c3, 0x2d0: 0x00c3, 0x2d1: 0x00c3, + 0x2d2: 0x00c3, 0x2d3: 0x00c3, 0x2d4: 0x00c3, 0x2d5: 0x00c3, 0x2d6: 0x00c3, 0x2d7: 0x00c3, + 0x2d8: 0x00c3, 0x2d9: 0x00c3, 0x2da: 0x00c3, 0x2db: 0x00c3, 0x2dc: 0x00c3, 0x2dd: 0x00c3, + 0x2de: 0x00c3, 0x2df: 0x00c3, 0x2e0: 0x00c3, 0x2e1: 0x00c3, 0x2e2: 0x00c3, 0x2e3: 0x00c3, + 0x2e4: 0x00c3, 0x2e5: 0x00c3, 0x2e6: 0x00c3, 0x2e7: 0x00c3, 0x2e8: 0x00c3, 0x2e9: 0x00c3, + 0x2ea: 0x00c3, 0x2eb: 0x00c3, 0x2ec: 0x00c3, 0x2ed: 0x00c3, 0x2ee: 0x00c3, 0x2ef: 0x00c3, + 0x2f0: 0x00c3, 0x2f1: 0x00c3, 0x2f2: 0x00c3, 0x2f3: 0x00c3, 0x2f4: 0x00c3, 0x2f5: 0x00c3, + 0x2f6: 0x00c3, 0x2f7: 0x00c3, 0x2f8: 0x00c3, 0x2f9: 0x00c3, 0x2fa: 0x00c3, 0x2fb: 0x00c3, + 0x2fc: 0x00c3, 0x2fd: 0x00c3, 0x2fe: 0x00c3, 0x2ff: 0x00c3, + // Block 0xc, offset 0x300 + 0x300: 0x0083, 0x301: 0x0083, 0x302: 0x00c3, 0x303: 0x0083, 0x304: 0x0083, 0x305: 0x00c3, + 0x306: 0x00c3, 0x307: 0x00c3, 0x308: 0x00c3, 0x309: 0x00c3, 0x30a: 0x00c3, 0x30b: 0x00c3, + 0x30c: 0x00c3, 0x30d: 0x00c3, 0x30e: 0x00c3, 0x30f: 0x0040, 0x310: 0x00c3, 0x311: 0x00c3, + 0x312: 0x00c3, 0x313: 0x00c3, 0x314: 0x00c3, 0x315: 0x00c3, 0x316: 0x00c3, 0x317: 0x00c3, + 0x318: 0x00c3, 0x319: 0x00c3, 0x31a: 0x00c3, 0x31b: 0x00c3, 0x31c: 0x00c3, 0x31d: 0x00c3, + 0x31e: 0x00c3, 0x31f: 0x00c3, 0x320: 0x00c3, 0x321: 0x00c3, 0x322: 0x00c3, 0x323: 0x00c3, + 0x324: 0x00c3, 0x325: 0x00c3, 0x326: 0x00c3, 0x327: 0x00c3, 0x328: 0x00c3, 0x329: 0x00c3, + 0x32a: 0x00c3, 0x32b: 0x00c3, 0x32c: 0x00c3, 0x32d: 0x00c3, 0x32e: 0x00c3, 0x32f: 0x00c3, + 0x330: 0x00c8, 0x331: 0x00c8, 0x332: 0x00c8, 0x333: 0x00c8, 0x334: 0x0080, 0x335: 0x0050, + 0x336: 0x00c8, 0x337: 0x00c8, 0x33a: 0x0088, 0x33b: 0x00c8, + 0x33c: 0x00c8, 0x33d: 0x00c8, 0x33e: 0x0080, 0x33f: 0x00c8, + // Block 0xd, offset 0x340 + 0x344: 0x0088, 0x345: 0x0080, + 0x346: 0x00c8, 0x347: 0x0080, 0x348: 0x00c8, 0x349: 0x00c8, 0x34a: 0x00c8, + 0x34c: 0x00c8, 0x34e: 0x00c8, 0x34f: 0x00c8, 0x350: 0x00c8, 0x351: 0x00c8, + 0x352: 0x00c8, 0x353: 0x00c8, 0x354: 0x00c8, 0x355: 0x00c8, 0x356: 0x00c8, 0x357: 0x00c8, + 0x358: 0x00c8, 0x359: 0x00c8, 0x35a: 0x00c8, 0x35b: 0x00c8, 0x35c: 0x00c8, 0x35d: 0x00c8, + 0x35e: 0x00c8, 0x35f: 0x00c8, 0x360: 0x00c8, 0x361: 0x00c8, 0x363: 0x00c8, + 0x364: 0x00c8, 0x365: 0x00c8, 0x366: 0x00c8, 0x367: 0x00c8, 0x368: 0x00c8, 0x369: 0x00c8, + 0x36a: 0x00c8, 0x36b: 0x00c8, 0x36c: 0x00c8, 0x36d: 0x00c8, 0x36e: 0x00c8, 0x36f: 0x00c8, + 0x370: 0x00c8, 0x371: 0x00c8, 0x372: 0x00c8, 0x373: 0x00c8, 0x374: 0x00c8, 0x375: 0x00c8, + 0x376: 0x00c8, 0x377: 0x00c8, 0x378: 0x00c8, 0x379: 0x00c8, 0x37a: 0x00c8, 0x37b: 0x00c8, + 0x37c: 0x00c8, 0x37d: 0x00c8, 0x37e: 0x00c8, 0x37f: 0x00c8, + // Block 0xe, offset 0x380 + 0x380: 0x00c8, 0x381: 0x00c8, 0x382: 0x00c8, 0x383: 0x00c8, 0x384: 0x00c8, 0x385: 0x00c8, + 0x386: 0x00c8, 0x387: 0x00c8, 0x388: 0x00c8, 0x389: 0x00c8, 0x38a: 0x00c8, 0x38b: 0x00c8, + 0x38c: 0x00c8, 0x38d: 0x00c8, 0x38e: 0x00c8, 0x38f: 0x00c8, 0x390: 0x0088, 0x391: 0x0088, + 0x392: 0x0088, 0x393: 0x0088, 0x394: 0x0088, 0x395: 0x0088, 0x396: 0x0088, 0x397: 0x00c8, + 0x398: 0x00c8, 0x399: 0x00c8, 0x39a: 0x00c8, 0x39b: 0x00c8, 0x39c: 0x00c8, 0x39d: 0x00c8, + 0x39e: 0x00c8, 0x39f: 0x00c8, 0x3a0: 0x00c8, 0x3a1: 0x00c8, 0x3a2: 0x00c0, 0x3a3: 0x00c0, + 0x3a4: 0x00c0, 0x3a5: 0x00c0, 0x3a6: 0x00c0, 0x3a7: 0x00c0, 0x3a8: 0x00c0, 0x3a9: 0x00c0, + 0x3aa: 0x00c0, 0x3ab: 0x00c0, 0x3ac: 0x00c0, 0x3ad: 0x00c0, 0x3ae: 0x00c0, 0x3af: 0x00c0, + 0x3b0: 0x0088, 0x3b1: 0x0088, 0x3b2: 0x0088, 0x3b3: 0x00c8, 0x3b4: 0x0088, 0x3b5: 0x0088, + 0x3b6: 0x0088, 0x3b7: 0x00c8, 0x3b8: 0x00c8, 0x3b9: 0x0088, 0x3ba: 0x00c8, 0x3bb: 0x00c8, + 0x3bc: 0x00c8, 0x3bd: 0x00c8, 0x3be: 0x00c8, 0x3bf: 0x00c8, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x00c0, 0x3c1: 0x00c0, 0x3c2: 0x0080, 0x3c3: 0x00c3, 0x3c4: 0x00c3, 0x3c5: 0x00c3, + 0x3c6: 0x00c3, 0x3c7: 0x00c3, 0x3c8: 0x0083, 0x3c9: 0x0083, 0x3ca: 0x00c0, 0x3cb: 0x00c0, + 0x3cc: 0x00c0, 0x3cd: 0x00c0, 0x3ce: 0x00c0, 0x3cf: 0x00c0, 0x3d0: 0x00c0, 0x3d1: 0x00c0, + 0x3d2: 0x00c0, 0x3d3: 0x00c0, 0x3d4: 0x00c0, 0x3d5: 0x00c0, 0x3d6: 0x00c0, 0x3d7: 0x00c0, + 0x3d8: 0x00c0, 0x3d9: 0x00c0, 0x3da: 0x00c0, 0x3db: 0x00c0, 0x3dc: 0x00c0, 0x3dd: 0x00c0, + 0x3de: 0x00c0, 0x3df: 0x00c0, 0x3e0: 0x00c0, 0x3e1: 0x00c0, 0x3e2: 0x00c0, 0x3e3: 0x00c0, + 0x3e4: 0x00c0, 0x3e5: 0x00c0, 0x3e6: 0x00c0, 0x3e7: 0x00c0, 0x3e8: 0x00c0, 0x3e9: 0x00c0, + 0x3ea: 0x00c0, 0x3eb: 0x00c0, 0x3ec: 0x00c0, 0x3ed: 0x00c0, 0x3ee: 0x00c0, 0x3ef: 0x00c0, + 0x3f0: 0x00c0, 0x3f1: 0x00c0, 0x3f2: 0x00c0, 0x3f3: 0x00c0, 0x3f4: 0x00c0, 0x3f5: 0x00c0, + 0x3f6: 0x00c0, 0x3f7: 0x00c0, 0x3f8: 0x00c0, 0x3f9: 0x00c0, 0x3fa: 0x00c0, 0x3fb: 0x00c0, + 0x3fc: 0x00c0, 0x3fd: 0x00c0, 0x3fe: 0x00c0, 0x3ff: 0x00c0, + // Block 0x10, offset 0x400 + 0x400: 0x00c0, 0x401: 0x00c0, 0x402: 0x00c0, 0x403: 0x00c0, 0x404: 0x00c0, 0x405: 0x00c0, + 0x406: 0x00c0, 0x407: 0x00c0, 0x408: 0x00c0, 0x409: 0x00c0, 0x40a: 0x00c0, 0x40b: 0x00c0, + 0x40c: 0x00c0, 0x40d: 0x00c0, 0x40e: 0x00c0, 0x40f: 0x00c0, 0x410: 0x00c0, 0x411: 0x00c0, + 0x412: 0x00c0, 0x413: 0x00c0, 0x414: 0x00c0, 0x415: 0x00c0, 0x416: 0x00c0, 0x417: 0x00c0, + 0x418: 0x00c0, 0x419: 0x00c0, 0x41a: 0x00c0, 0x41b: 0x00c0, 0x41c: 0x00c0, 0x41d: 0x00c0, + 0x41e: 0x00c0, 0x41f: 0x00c0, 0x420: 0x00c0, 0x421: 0x00c0, 0x422: 0x00c0, 0x423: 0x00c0, + 0x424: 0x00c0, 0x425: 0x00c0, 0x426: 0x00c0, 0x427: 0x00c0, 0x428: 0x00c0, 0x429: 0x00c0, + 0x42a: 0x00c0, 0x42b: 0x00c0, 0x42c: 0x00c0, 0x42d: 0x00c0, 0x42e: 0x00c0, 0x42f: 0x00c0, + 0x431: 0x00c0, 0x432: 0x00c0, 0x433: 0x00c0, 0x434: 0x00c0, 0x435: 0x00c0, + 0x436: 0x00c0, 0x437: 0x00c0, 0x438: 0x00c0, 0x439: 0x00c0, 0x43a: 0x00c0, 0x43b: 0x00c0, + 0x43c: 0x00c0, 0x43d: 0x00c0, 0x43e: 0x00c0, 0x43f: 0x00c0, + // Block 0x11, offset 0x440 + 0x440: 0x00c0, 0x441: 0x00c0, 0x442: 0x00c0, 0x443: 0x00c0, 0x444: 0x00c0, 0x445: 0x00c0, + 0x446: 0x00c0, 0x447: 0x00c0, 0x448: 0x00c0, 0x449: 0x00c0, 0x44a: 0x00c0, 0x44b: 0x00c0, + 0x44c: 0x00c0, 0x44d: 0x00c0, 0x44e: 0x00c0, 0x44f: 0x00c0, 0x450: 0x00c0, 0x451: 0x00c0, + 0x452: 0x00c0, 0x453: 0x00c0, 0x454: 0x00c0, 0x455: 0x00c0, 0x456: 0x00c0, + 0x459: 0x00c0, 0x45a: 0x0080, 0x45b: 0x0080, 0x45c: 0x0080, 0x45d: 0x0080, + 0x45e: 0x0080, 0x45f: 0x0080, 0x461: 0x00c0, 0x462: 0x00c0, 0x463: 0x00c0, + 0x464: 0x00c0, 0x465: 0x00c0, 0x466: 0x00c0, 0x467: 0x00c0, 0x468: 0x00c0, 0x469: 0x00c0, + 0x46a: 0x00c0, 0x46b: 0x00c0, 0x46c: 0x00c0, 0x46d: 0x00c0, 0x46e: 0x00c0, 0x46f: 0x00c0, + 0x470: 0x00c0, 0x471: 0x00c0, 0x472: 0x00c0, 0x473: 0x00c0, 0x474: 0x00c0, 0x475: 0x00c0, + 0x476: 0x00c0, 0x477: 0x00c0, 0x478: 0x00c0, 0x479: 0x00c0, 0x47a: 0x00c0, 0x47b: 0x00c0, + 0x47c: 0x00c0, 0x47d: 0x00c0, 0x47e: 0x00c0, 0x47f: 0x00c0, + // Block 0x12, offset 0x480 + 0x480: 0x00c0, 0x481: 0x00c0, 0x482: 0x00c0, 0x483: 0x00c0, 0x484: 0x00c0, 0x485: 0x00c0, + 0x486: 0x00c0, 0x487: 0x0080, 0x489: 0x0080, 0x48a: 0x0080, + 0x48d: 0x0080, 0x48e: 0x0080, 0x48f: 0x0080, 0x491: 0x00cb, + 0x492: 0x00cb, 0x493: 0x00cb, 0x494: 0x00cb, 0x495: 0x00cb, 0x496: 0x00cb, 0x497: 0x00cb, + 0x498: 0x00cb, 0x499: 0x00cb, 0x49a: 0x00cb, 0x49b: 0x00cb, 0x49c: 0x00cb, 0x49d: 0x00cb, + 0x49e: 0x00cb, 0x49f: 0x00cb, 0x4a0: 0x00cb, 0x4a1: 0x00cb, 0x4a2: 0x00cb, 0x4a3: 0x00cb, + 0x4a4: 0x00cb, 0x4a5: 0x00cb, 0x4a6: 0x00cb, 0x4a7: 0x00cb, 0x4a8: 0x00cb, 0x4a9: 0x00cb, + 0x4aa: 0x00cb, 0x4ab: 0x00cb, 0x4ac: 0x00cb, 0x4ad: 0x00cb, 0x4ae: 0x00cb, 0x4af: 0x00cb, + 0x4b0: 0x00cb, 0x4b1: 0x00cb, 0x4b2: 0x00cb, 0x4b3: 0x00cb, 0x4b4: 0x00cb, 0x4b5: 0x00cb, + 0x4b6: 0x00cb, 0x4b7: 0x00cb, 0x4b8: 0x00cb, 0x4b9: 0x00cb, 0x4ba: 0x00cb, 0x4bb: 0x00cb, + 0x4bc: 0x00cb, 0x4bd: 0x00cb, 0x4be: 0x008a, 0x4bf: 0x00cb, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x008a, 0x4c1: 0x00cb, 0x4c2: 0x00cb, 0x4c3: 0x008a, 0x4c4: 0x00cb, 0x4c5: 0x00cb, + 0x4c6: 0x008a, 0x4c7: 0x00cb, + 0x4d0: 0x00ca, 0x4d1: 0x00ca, + 0x4d2: 0x00ca, 0x4d3: 0x00ca, 0x4d4: 0x00ca, 0x4d5: 0x00ca, 0x4d6: 0x00ca, 0x4d7: 0x00ca, + 0x4d8: 0x00ca, 0x4d9: 0x00ca, 0x4da: 0x00ca, 0x4db: 0x00ca, 0x4dc: 0x00ca, 0x4dd: 0x00ca, + 0x4de: 0x00ca, 0x4df: 0x00ca, 0x4e0: 0x00ca, 0x4e1: 0x00ca, 0x4e2: 0x00ca, 0x4e3: 0x00ca, + 0x4e4: 0x00ca, 0x4e5: 0x00ca, 0x4e6: 0x00ca, 0x4e7: 0x00ca, 0x4e8: 0x00ca, 0x4e9: 0x00ca, + 0x4ea: 0x00ca, + 0x4f0: 0x00ca, 0x4f1: 0x00ca, 0x4f2: 0x00ca, 0x4f3: 0x0051, 0x4f4: 0x0051, + // Block 0x14, offset 0x500 + 0x500: 0x0040, 0x501: 0x0040, 0x502: 0x0040, 0x503: 0x0040, 0x504: 0x0040, 0x505: 0x0040, + 0x506: 0x0080, 0x507: 0x0080, 0x508: 0x0080, 0x509: 0x0080, 0x50a: 0x0080, 0x50b: 0x0080, + 0x50c: 0x0080, 0x50d: 0x0080, 0x50e: 0x0080, 0x50f: 0x0080, 0x510: 0x00c3, 0x511: 0x00c3, + 0x512: 0x00c3, 0x513: 0x00c3, 0x514: 0x00c3, 0x515: 0x00c3, 0x516: 0x00c3, 0x517: 0x00c3, + 0x518: 0x00c3, 0x519: 0x00c3, 0x51a: 0x00c3, 0x51b: 0x0080, 0x51c: 0x0040, + 0x51e: 0x0080, 0x51f: 0x0080, 0x520: 0x00c2, 0x521: 0x00c0, 0x522: 0x00c4, 0x523: 0x00c4, + 0x524: 0x00c4, 0x525: 0x00c4, 0x526: 0x00c2, 0x527: 0x00c4, 0x528: 0x00c2, 0x529: 0x00c4, + 0x52a: 0x00c2, 0x52b: 0x00c2, 0x52c: 0x00c2, 0x52d: 0x00c2, 0x52e: 0x00c2, 0x52f: 0x00c4, + 0x530: 0x00c4, 0x531: 0x00c4, 0x532: 0x00c4, 0x533: 0x00c2, 0x534: 0x00c2, 0x535: 0x00c2, + 0x536: 0x00c2, 0x537: 0x00c2, 0x538: 0x00c2, 0x539: 0x00c2, 0x53a: 0x00c2, 0x53b: 0x00c2, + 0x53c: 0x00c2, 0x53d: 0x00c2, 0x53e: 0x00c2, 0x53f: 0x00c2, + // Block 0x15, offset 0x540 + 0x540: 0x0040, 0x541: 0x00c2, 0x542: 0x00c2, 0x543: 0x00c2, 0x544: 0x00c2, 0x545: 0x00c2, + 0x546: 0x00c2, 0x547: 0x00c2, 0x548: 0x00c4, 0x549: 0x00c2, 0x54a: 0x00c2, 0x54b: 0x00c3, + 0x54c: 0x00c3, 0x54d: 0x00c3, 0x54e: 0x00c3, 0x54f: 0x00c3, 0x550: 0x00c3, 0x551: 0x00c3, + 0x552: 0x00c3, 0x553: 0x00c3, 0x554: 0x00c3, 0x555: 0x00c3, 0x556: 0x00c3, 0x557: 0x00c3, + 0x558: 0x00c3, 0x559: 0x00c3, 0x55a: 0x00c3, 0x55b: 0x00c3, 0x55c: 0x00c3, 0x55d: 0x00c3, + 0x55e: 0x00c3, 0x55f: 0x00c3, 0x560: 0x0053, 0x561: 0x0053, 0x562: 0x0053, 0x563: 0x0053, + 0x564: 0x0053, 0x565: 0x0053, 0x566: 0x0053, 0x567: 0x0053, 0x568: 0x0053, 0x569: 0x0053, + 0x56a: 0x0080, 0x56b: 0x0080, 0x56c: 0x0080, 0x56d: 0x0080, 0x56e: 0x00c2, 0x56f: 0x00c2, + 0x570: 0x00c3, 0x571: 0x00c4, 0x572: 0x00c4, 0x573: 0x00c4, 0x574: 0x00c0, 0x575: 0x0084, + 0x576: 0x0084, 0x577: 0x0084, 0x578: 0x0082, 0x579: 0x00c2, 0x57a: 0x00c2, 0x57b: 0x00c2, + 0x57c: 0x00c2, 0x57d: 0x00c2, 0x57e: 0x00c2, 0x57f: 0x00c2, + // Block 0x16, offset 0x580 + 0x580: 0x00c2, 0x581: 0x00c2, 0x582: 0x00c2, 0x583: 0x00c2, 0x584: 0x00c2, 0x585: 0x00c2, + 0x586: 0x00c2, 0x587: 0x00c2, 0x588: 0x00c4, 0x589: 0x00c4, 0x58a: 0x00c4, 0x58b: 0x00c4, + 0x58c: 0x00c4, 0x58d: 0x00c4, 0x58e: 0x00c4, 0x58f: 0x00c4, 0x590: 0x00c4, 0x591: 0x00c4, + 0x592: 0x00c4, 0x593: 0x00c4, 0x594: 0x00c4, 0x595: 0x00c4, 0x596: 0x00c4, 0x597: 0x00c4, + 0x598: 0x00c4, 0x599: 0x00c4, 0x59a: 0x00c2, 0x59b: 0x00c2, 0x59c: 0x00c2, 0x59d: 0x00c2, + 0x59e: 0x00c2, 0x59f: 0x00c2, 0x5a0: 0x00c2, 0x5a1: 0x00c2, 0x5a2: 0x00c2, 0x5a3: 0x00c2, + 0x5a4: 0x00c2, 0x5a5: 0x00c2, 0x5a6: 0x00c2, 0x5a7: 0x00c2, 0x5a8: 0x00c2, 0x5a9: 0x00c2, + 0x5aa: 0x00c2, 0x5ab: 0x00c2, 0x5ac: 0x00c2, 0x5ad: 0x00c2, 0x5ae: 0x00c2, 0x5af: 0x00c2, + 0x5b0: 0x00c2, 0x5b1: 0x00c2, 0x5b2: 0x00c2, 0x5b3: 0x00c2, 0x5b4: 0x00c2, 0x5b5: 0x00c2, + 0x5b6: 0x00c2, 0x5b7: 0x00c2, 0x5b8: 0x00c2, 0x5b9: 0x00c2, 0x5ba: 0x00c2, 0x5bb: 0x00c2, + 0x5bc: 0x00c2, 0x5bd: 0x00c2, 0x5be: 0x00c2, 0x5bf: 0x00c2, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x00c4, 0x5c1: 0x00c2, 0x5c2: 0x00c2, 0x5c3: 0x00c4, 0x5c4: 0x00c4, 0x5c5: 0x00c4, + 0x5c6: 0x00c4, 0x5c7: 0x00c4, 0x5c8: 0x00c4, 0x5c9: 0x00c4, 0x5ca: 0x00c4, 0x5cb: 0x00c4, + 0x5cc: 0x00c2, 0x5cd: 0x00c4, 0x5ce: 0x00c2, 0x5cf: 0x00c4, 0x5d0: 0x00c2, 0x5d1: 0x00c2, + 0x5d2: 0x00c4, 0x5d3: 0x00c4, 0x5d4: 0x0080, 0x5d5: 0x00c4, 0x5d6: 0x00c3, 0x5d7: 0x00c3, + 0x5d8: 0x00c3, 0x5d9: 0x00c3, 0x5da: 0x00c3, 0x5db: 0x00c3, 0x5dc: 0x00c3, 0x5dd: 0x0040, + 0x5de: 0x0080, 0x5df: 0x00c3, 0x5e0: 0x00c3, 0x5e1: 0x00c3, 0x5e2: 0x00c3, 0x5e3: 0x00c3, + 0x5e4: 0x00c3, 0x5e5: 0x00c0, 0x5e6: 0x00c0, 0x5e7: 0x00c3, 0x5e8: 0x00c3, 0x5e9: 0x0080, + 0x5ea: 0x00c3, 0x5eb: 0x00c3, 0x5ec: 0x00c3, 0x5ed: 0x00c3, 0x5ee: 0x00c4, 0x5ef: 0x00c4, + 0x5f0: 0x0054, 0x5f1: 0x0054, 0x5f2: 0x0054, 0x5f3: 0x0054, 0x5f4: 0x0054, 0x5f5: 0x0054, + 0x5f6: 0x0054, 0x5f7: 0x0054, 0x5f8: 0x0054, 0x5f9: 0x0054, 0x5fa: 0x00c2, 0x5fb: 0x00c2, + 0x5fc: 0x00c2, 0x5fd: 0x00c0, 0x5fe: 0x00c0, 0x5ff: 0x00c2, + // Block 0x18, offset 0x600 + 0x600: 0x0080, 0x601: 0x0080, 0x602: 0x0080, 0x603: 0x0080, 0x604: 0x0080, 0x605: 0x0080, + 0x606: 0x0080, 0x607: 0x0080, 0x608: 0x0080, 0x609: 0x0080, 0x60a: 0x0080, 0x60b: 0x0080, + 0x60c: 0x0080, 0x60d: 0x0080, 0x60f: 0x0040, 0x610: 0x00c4, 0x611: 0x00c3, + 0x612: 0x00c2, 0x613: 0x00c2, 0x614: 0x00c2, 0x615: 0x00c4, 0x616: 0x00c4, 0x617: 0x00c4, + 0x618: 0x00c4, 0x619: 0x00c4, 0x61a: 0x00c2, 0x61b: 0x00c2, 0x61c: 0x00c2, 0x61d: 0x00c2, + 0x61e: 0x00c4, 0x61f: 0x00c2, 0x620: 0x00c2, 0x621: 0x00c2, 0x622: 0x00c2, 0x623: 0x00c2, + 0x624: 0x00c2, 0x625: 0x00c2, 0x626: 0x00c2, 0x627: 0x00c2, 0x628: 0x00c4, 0x629: 0x00c2, + 0x62a: 0x00c4, 0x62b: 0x00c2, 0x62c: 0x00c4, 0x62d: 0x00c2, 0x62e: 0x00c2, 0x62f: 0x00c4, + 0x630: 0x00c3, 0x631: 0x00c3, 0x632: 0x00c3, 0x633: 0x00c3, 0x634: 0x00c3, 0x635: 0x00c3, + 0x636: 0x00c3, 0x637: 0x00c3, 0x638: 0x00c3, 0x639: 0x00c3, 0x63a: 0x00c3, 0x63b: 0x00c3, + 0x63c: 0x00c3, 0x63d: 0x00c3, 0x63e: 0x00c3, 0x63f: 0x00c3, + // Block 0x19, offset 0x640 + 0x640: 0x00c3, 0x641: 0x00c3, 0x642: 0x00c3, 0x643: 0x00c3, 0x644: 0x00c3, 0x645: 0x00c3, + 0x646: 0x00c3, 0x647: 0x00c3, 0x648: 0x00c3, 0x649: 0x00c3, 0x64a: 0x00c3, + 0x64d: 0x00c4, 0x64e: 0x00c2, 0x64f: 0x00c2, 0x650: 0x00c2, 0x651: 0x00c2, + 0x652: 0x00c2, 0x653: 0x00c2, 0x654: 0x00c2, 0x655: 0x00c2, 0x656: 0x00c2, 0x657: 0x00c2, + 0x658: 0x00c2, 0x659: 0x00c4, 0x65a: 0x00c4, 0x65b: 0x00c4, 0x65c: 0x00c2, 0x65d: 0x00c2, + 0x65e: 0x00c2, 0x65f: 0x00c2, 0x660: 0x00c2, 0x661: 0x00c2, 0x662: 0x00c2, 0x663: 0x00c2, + 0x664: 0x00c2, 0x665: 0x00c2, 0x666: 0x00c2, 0x667: 0x00c2, 0x668: 0x00c2, 0x669: 0x00c2, + 0x66a: 0x00c2, 0x66b: 0x00c4, 0x66c: 0x00c4, 0x66d: 0x00c2, 0x66e: 0x00c2, 0x66f: 0x00c2, + 0x670: 0x00c2, 0x671: 0x00c4, 0x672: 0x00c2, 0x673: 0x00c4, 0x674: 0x00c4, 0x675: 0x00c2, + 0x676: 0x00c2, 0x677: 0x00c2, 0x678: 0x00c4, 0x679: 0x00c4, 0x67a: 0x00c2, 0x67b: 0x00c2, + 0x67c: 0x00c2, 0x67d: 0x00c2, 0x67e: 0x00c2, 0x67f: 0x00c2, + // Block 0x1a, offset 0x680 + 0x680: 0x00c0, 0x681: 0x00c0, 0x682: 0x00c0, 0x683: 0x00c0, 0x684: 0x00c0, 0x685: 0x00c0, + 0x686: 0x00c0, 0x687: 0x00c0, 0x688: 0x00c0, 0x689: 0x00c0, 0x68a: 0x00c0, 0x68b: 0x00c0, + 0x68c: 0x00c0, 0x68d: 0x00c0, 0x68e: 0x00c0, 0x68f: 0x00c0, 0x690: 0x00c0, 0x691: 0x00c0, + 0x692: 0x00c0, 0x693: 0x00c0, 0x694: 0x00c0, 0x695: 0x00c0, 0x696: 0x00c0, 0x697: 0x00c0, + 0x698: 0x00c0, 0x699: 0x00c0, 0x69a: 0x00c0, 0x69b: 0x00c0, 0x69c: 0x00c0, 0x69d: 0x00c0, + 0x69e: 0x00c0, 0x69f: 0x00c0, 0x6a0: 0x00c0, 0x6a1: 0x00c0, 0x6a2: 0x00c0, 0x6a3: 0x00c0, + 0x6a4: 0x00c0, 0x6a5: 0x00c0, 0x6a6: 0x00c3, 0x6a7: 0x00c3, 0x6a8: 0x00c3, 0x6a9: 0x00c3, + 0x6aa: 0x00c3, 0x6ab: 0x00c3, 0x6ac: 0x00c3, 0x6ad: 0x00c3, 0x6ae: 0x00c3, 0x6af: 0x00c3, + 0x6b0: 0x00c3, 0x6b1: 0x00c0, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x00c0, 0x6c1: 0x00c0, 0x6c2: 0x00c0, 0x6c3: 0x00c0, 0x6c4: 0x00c0, 0x6c5: 0x00c0, + 0x6c6: 0x00c0, 0x6c7: 0x00c0, 0x6c8: 0x00c0, 0x6c9: 0x00c0, 0x6ca: 0x00c2, 0x6cb: 0x00c2, + 0x6cc: 0x00c2, 0x6cd: 0x00c2, 0x6ce: 0x00c2, 0x6cf: 0x00c2, 0x6d0: 0x00c2, 0x6d1: 0x00c2, + 0x6d2: 0x00c2, 0x6d3: 0x00c2, 0x6d4: 0x00c2, 0x6d5: 0x00c2, 0x6d6: 0x00c2, 0x6d7: 0x00c2, + 0x6d8: 0x00c2, 0x6d9: 0x00c2, 0x6da: 0x00c2, 0x6db: 0x00c2, 0x6dc: 0x00c2, 0x6dd: 0x00c2, + 0x6de: 0x00c2, 0x6df: 0x00c2, 0x6e0: 0x00c2, 0x6e1: 0x00c2, 0x6e2: 0x00c2, 0x6e3: 0x00c2, + 0x6e4: 0x00c2, 0x6e5: 0x00c2, 0x6e6: 0x00c2, 0x6e7: 0x00c2, 0x6e8: 0x00c2, 0x6e9: 0x00c2, + 0x6ea: 0x00c2, 0x6eb: 0x00c3, 0x6ec: 0x00c3, 0x6ed: 0x00c3, 0x6ee: 0x00c3, 0x6ef: 0x00c3, + 0x6f0: 0x00c3, 0x6f1: 0x00c3, 0x6f2: 0x00c3, 0x6f3: 0x00c3, 0x6f4: 0x00c0, 0x6f5: 0x00c0, + 0x6f6: 0x0080, 0x6f7: 0x0080, 0x6f8: 0x0080, 0x6f9: 0x0080, 0x6fa: 0x0040, + // Block 0x1c, offset 0x700 + 0x700: 0x00c0, 0x701: 0x00c0, 0x702: 0x00c0, 0x703: 0x00c0, 0x704: 0x00c0, 0x705: 0x00c0, + 0x706: 0x00c0, 0x707: 0x00c0, 0x708: 0x00c0, 0x709: 0x00c0, 0x70a: 0x00c0, 0x70b: 0x00c0, + 0x70c: 0x00c0, 0x70d: 0x00c0, 0x70e: 0x00c0, 0x70f: 0x00c0, 0x710: 0x00c0, 0x711: 0x00c0, + 0x712: 0x00c0, 0x713: 0x00c0, 0x714: 0x00c0, 0x715: 0x00c0, 0x716: 0x00c3, 0x717: 0x00c3, + 0x718: 0x00c3, 0x719: 0x00c3, 0x71a: 0x00c0, 0x71b: 0x00c3, 0x71c: 0x00c3, 0x71d: 0x00c3, + 0x71e: 0x00c3, 0x71f: 0x00c3, 0x720: 0x00c3, 0x721: 0x00c3, 0x722: 0x00c3, 0x723: 0x00c3, + 0x724: 0x00c0, 0x725: 0x00c3, 0x726: 0x00c3, 0x727: 0x00c3, 0x728: 0x00c0, 0x729: 0x00c3, + 0x72a: 0x00c3, 0x72b: 0x00c3, 0x72c: 0x00c3, 0x72d: 0x00c3, + 0x730: 0x0080, 0x731: 0x0080, 0x732: 0x0080, 0x733: 0x0080, 0x734: 0x0080, 0x735: 0x0080, + 0x736: 0x0080, 0x737: 0x0080, 0x738: 0x0080, 0x739: 0x0080, 0x73a: 0x0080, 0x73b: 0x0080, + 0x73c: 0x0080, 0x73d: 0x0080, 0x73e: 0x0080, + // Block 0x1d, offset 0x740 + 0x740: 0x00c4, 0x741: 0x00c2, 0x742: 0x00c2, 0x743: 0x00c2, 0x744: 0x00c2, 0x745: 0x00c2, + 0x746: 0x00c4, 0x747: 0x00c4, 0x748: 0x00c2, 0x749: 0x00c4, 0x74a: 0x00c2, 0x74b: 0x00c2, + 0x74c: 0x00c2, 0x74d: 0x00c2, 0x74e: 0x00c2, 0x74f: 0x00c2, 0x750: 0x00c2, 0x751: 0x00c2, + 0x752: 0x00c2, 0x753: 0x00c2, 0x754: 0x00c4, 0x755: 0x00c2, 0x756: 0x00c0, 0x757: 0x00c0, + 0x758: 0x00c0, 0x759: 0x00c3, 0x75a: 0x00c3, 0x75b: 0x00c3, + 0x75e: 0x0080, 0x760: 0x00c2, 0x761: 0x00c0, 0x762: 0x00c2, 0x763: 0x00c2, + 0x764: 0x00c2, 0x765: 0x00c2, 0x766: 0x00c0, 0x767: 0x00c4, 0x768: 0x00c2, 0x769: 0x00c4, + 0x76a: 0x00c4, + // Block 0x1e, offset 0x780 + 0x7a0: 0x00c2, 0x7a1: 0x00c2, 0x7a2: 0x00c2, 0x7a3: 0x00c2, + 0x7a4: 0x00c2, 0x7a5: 0x00c2, 0x7a6: 0x00c2, 0x7a7: 0x00c2, 0x7a8: 0x00c2, 0x7a9: 0x00c2, + 0x7aa: 0x00c4, 0x7ab: 0x00c4, 0x7ac: 0x00c4, 0x7ad: 0x00c0, 0x7ae: 0x00c4, 0x7af: 0x00c2, + 0x7b0: 0x00c2, 0x7b1: 0x00c4, 0x7b2: 0x00c4, 0x7b3: 0x00c2, 0x7b4: 0x00c2, + 0x7b6: 0x00c2, 0x7b7: 0x00c2, 0x7b8: 0x00c2, 0x7b9: 0x00c4, 0x7ba: 0x00c2, 0x7bb: 0x00c2, + 0x7bc: 0x00c2, 0x7bd: 0x00c2, + // Block 0x1f, offset 0x7c0 + 0x7d4: 0x00c3, 0x7d5: 0x00c3, 0x7d6: 0x00c3, 0x7d7: 0x00c3, + 0x7d8: 0x00c3, 0x7d9: 0x00c3, 0x7da: 0x00c3, 0x7db: 0x00c3, 0x7dc: 0x00c3, 0x7dd: 0x00c3, + 0x7de: 0x00c3, 0x7df: 0x00c3, 0x7e0: 0x00c3, 0x7e1: 0x00c3, 0x7e2: 0x0040, 0x7e3: 0x00c3, + 0x7e4: 0x00c3, 0x7e5: 0x00c3, 0x7e6: 0x00c3, 0x7e7: 0x00c3, 0x7e8: 0x00c3, 0x7e9: 0x00c3, + 0x7ea: 0x00c3, 0x7eb: 0x00c3, 0x7ec: 0x00c3, 0x7ed: 0x00c3, 0x7ee: 0x00c3, 0x7ef: 0x00c3, + 0x7f0: 0x00c3, 0x7f1: 0x00c3, 0x7f2: 0x00c3, 0x7f3: 0x00c3, 0x7f4: 0x00c3, 0x7f5: 0x00c3, + 0x7f6: 0x00c3, 0x7f7: 0x00c3, 0x7f8: 0x00c3, 0x7f9: 0x00c3, 0x7fa: 0x00c3, 0x7fb: 0x00c3, + 0x7fc: 0x00c3, 0x7fd: 0x00c3, 0x7fe: 0x00c3, 0x7ff: 0x00c3, + // Block 0x20, offset 0x800 + 0x800: 0x00c3, 0x801: 0x00c3, 0x802: 0x00c3, 0x803: 0x00c0, 0x804: 0x00c0, 0x805: 0x00c0, + 0x806: 0x00c0, 0x807: 0x00c0, 0x808: 0x00c0, 0x809: 0x00c0, 0x80a: 0x00c0, 0x80b: 0x00c0, + 0x80c: 0x00c0, 0x80d: 0x00c0, 0x80e: 0x00c0, 0x80f: 0x00c0, 0x810: 0x00c0, 0x811: 0x00c0, + 0x812: 0x00c0, 0x813: 0x00c0, 0x814: 0x00c0, 0x815: 0x00c0, 0x816: 0x00c0, 0x817: 0x00c0, + 0x818: 0x00c0, 0x819: 0x00c0, 0x81a: 0x00c0, 0x81b: 0x00c0, 0x81c: 0x00c0, 0x81d: 0x00c0, + 0x81e: 0x00c0, 0x81f: 0x00c0, 0x820: 0x00c0, 0x821: 0x00c0, 0x822: 0x00c0, 0x823: 0x00c0, + 0x824: 0x00c0, 0x825: 0x00c0, 0x826: 0x00c0, 0x827: 0x00c0, 0x828: 0x00c0, 0x829: 0x00c0, + 0x82a: 0x00c0, 0x82b: 0x00c0, 0x82c: 0x00c0, 0x82d: 0x00c0, 0x82e: 0x00c0, 0x82f: 0x00c0, + 0x830: 0x00c0, 0x831: 0x00c0, 0x832: 0x00c0, 0x833: 0x00c0, 0x834: 0x00c0, 0x835: 0x00c0, + 0x836: 0x00c0, 0x837: 0x00c0, 0x838: 0x00c0, 0x839: 0x00c0, 0x83a: 0x00c3, 0x83b: 0x00c0, + 0x83c: 0x00c3, 0x83d: 0x00c0, 0x83e: 0x00c0, 0x83f: 0x00c0, + // Block 0x21, offset 0x840 + 0x840: 0x00c0, 0x841: 0x00c3, 0x842: 0x00c3, 0x843: 0x00c3, 0x844: 0x00c3, 0x845: 0x00c3, + 0x846: 0x00c3, 0x847: 0x00c3, 0x848: 0x00c3, 0x849: 0x00c0, 0x84a: 0x00c0, 0x84b: 0x00c0, + 0x84c: 0x00c0, 0x84d: 0x00c6, 0x84e: 0x00c0, 0x84f: 0x00c0, 0x850: 0x00c0, 0x851: 0x00c3, + 0x852: 0x00c3, 0x853: 0x00c3, 0x854: 0x00c3, 0x855: 0x00c3, 0x856: 0x00c3, 0x857: 0x00c3, + 0x858: 0x0080, 0x859: 0x0080, 0x85a: 0x0080, 0x85b: 0x0080, 0x85c: 0x0080, 0x85d: 0x0080, + 0x85e: 0x0080, 0x85f: 0x0080, 0x860: 0x00c0, 0x861: 0x00c0, 0x862: 0x00c3, 0x863: 0x00c3, + 0x864: 0x0080, 0x865: 0x0080, 0x866: 0x00c0, 0x867: 0x00c0, 0x868: 0x00c0, 0x869: 0x00c0, + 0x86a: 0x00c0, 0x86b: 0x00c0, 0x86c: 0x00c0, 0x86d: 0x00c0, 0x86e: 0x00c0, 0x86f: 0x00c0, + 0x870: 0x0080, 0x871: 0x00c0, 0x872: 0x00c0, 0x873: 0x00c0, 0x874: 0x00c0, 0x875: 0x00c0, + 0x876: 0x00c0, 0x877: 0x00c0, 0x878: 0x00c0, 0x879: 0x00c0, 0x87a: 0x00c0, 0x87b: 0x00c0, + 0x87c: 0x00c0, 0x87d: 0x00c0, 0x87e: 0x00c0, 0x87f: 0x00c0, + // Block 0x22, offset 0x880 + 0x880: 0x00c0, 0x881: 0x00c3, 0x882: 0x00c0, 0x883: 0x00c0, 0x885: 0x00c0, + 0x886: 0x00c0, 0x887: 0x00c0, 0x888: 0x00c0, 0x889: 0x00c0, 0x88a: 0x00c0, 0x88b: 0x00c0, + 0x88c: 0x00c0, 0x88f: 0x00c0, 0x890: 0x00c0, + 0x893: 0x00c0, 0x894: 0x00c0, 0x895: 0x00c0, 0x896: 0x00c0, 0x897: 0x00c0, + 0x898: 0x00c0, 0x899: 0x00c0, 0x89a: 0x00c0, 0x89b: 0x00c0, 0x89c: 0x00c0, 0x89d: 0x00c0, + 0x89e: 0x00c0, 0x89f: 0x00c0, 0x8a0: 0x00c0, 0x8a1: 0x00c0, 0x8a2: 0x00c0, 0x8a3: 0x00c0, + 0x8a4: 0x00c0, 0x8a5: 0x00c0, 0x8a6: 0x00c0, 0x8a7: 0x00c0, 0x8a8: 0x00c0, + 0x8aa: 0x00c0, 0x8ab: 0x00c0, 0x8ac: 0x00c0, 0x8ad: 0x00c0, 0x8ae: 0x00c0, 0x8af: 0x00c0, + 0x8b0: 0x00c0, 0x8b2: 0x00c0, + 0x8b6: 0x00c0, 0x8b7: 0x00c0, 0x8b8: 0x00c0, 0x8b9: 0x00c0, + 0x8bc: 0x00c3, 0x8bd: 0x00c0, 0x8be: 0x00c0, 0x8bf: 0x00c0, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x00c0, 0x8c1: 0x00c3, 0x8c2: 0x00c3, 0x8c3: 0x00c3, 0x8c4: 0x00c3, + 0x8c7: 0x00c0, 0x8c8: 0x00c0, 0x8cb: 0x00c0, + 0x8cc: 0x00c0, 0x8cd: 0x00c6, 0x8ce: 0x00c0, + 0x8d7: 0x00c0, + 0x8dc: 0x0080, 0x8dd: 0x0080, + 0x8df: 0x0080, 0x8e0: 0x00c0, 0x8e1: 0x00c0, 0x8e2: 0x00c3, 0x8e3: 0x00c3, + 0x8e6: 0x00c0, 0x8e7: 0x00c0, 0x8e8: 0x00c0, 0x8e9: 0x00c0, + 0x8ea: 0x00c0, 0x8eb: 0x00c0, 0x8ec: 0x00c0, 0x8ed: 0x00c0, 0x8ee: 0x00c0, 0x8ef: 0x00c0, + 0x8f0: 0x00c0, 0x8f1: 0x00c0, 0x8f2: 0x0080, 0x8f3: 0x0080, 0x8f4: 0x0080, 0x8f5: 0x0080, + 0x8f6: 0x0080, 0x8f7: 0x0080, 0x8f8: 0x0080, 0x8f9: 0x0080, 0x8fa: 0x0080, 0x8fb: 0x0080, + 0x8fc: 0x00c0, 0x8fd: 0x0080, + // Block 0x24, offset 0x900 + 0x901: 0x00c3, 0x902: 0x00c3, 0x903: 0x00c0, 0x905: 0x00c0, + 0x906: 0x00c0, 0x907: 0x00c0, 0x908: 0x00c0, 0x909: 0x00c0, 0x90a: 0x00c0, + 0x90f: 0x00c0, 0x910: 0x00c0, + 0x913: 0x00c0, 0x914: 0x00c0, 0x915: 0x00c0, 0x916: 0x00c0, 0x917: 0x00c0, + 0x918: 0x00c0, 0x919: 0x00c0, 0x91a: 0x00c0, 0x91b: 0x00c0, 0x91c: 0x00c0, 0x91d: 0x00c0, + 0x91e: 0x00c0, 0x91f: 0x00c0, 0x920: 0x00c0, 0x921: 0x00c0, 0x922: 0x00c0, 0x923: 0x00c0, + 0x924: 0x00c0, 0x925: 0x00c0, 0x926: 0x00c0, 0x927: 0x00c0, 0x928: 0x00c0, + 0x92a: 0x00c0, 0x92b: 0x00c0, 0x92c: 0x00c0, 0x92d: 0x00c0, 0x92e: 0x00c0, 0x92f: 0x00c0, + 0x930: 0x00c0, 0x932: 0x00c0, 0x933: 0x0080, 0x935: 0x00c0, + 0x936: 0x0080, 0x938: 0x00c0, 0x939: 0x00c0, + 0x93c: 0x00c3, 0x93e: 0x00c0, 0x93f: 0x00c0, + // Block 0x25, offset 0x940 + 0x940: 0x00c0, 0x941: 0x00c3, 0x942: 0x00c3, + 0x947: 0x00c3, 0x948: 0x00c3, 0x94b: 0x00c3, + 0x94c: 0x00c3, 0x94d: 0x00c6, 0x951: 0x00c3, + 0x959: 0x0080, 0x95a: 0x0080, 0x95b: 0x0080, 0x95c: 0x00c0, + 0x95e: 0x0080, + 0x966: 0x00c0, 0x967: 0x00c0, 0x968: 0x00c0, 0x969: 0x00c0, + 0x96a: 0x00c0, 0x96b: 0x00c0, 0x96c: 0x00c0, 0x96d: 0x00c0, 0x96e: 0x00c0, 0x96f: 0x00c0, + 0x970: 0x00c3, 0x971: 0x00c3, 0x972: 0x00c0, 0x973: 0x00c0, 0x974: 0x00c0, 0x975: 0x00c3, + // Block 0x26, offset 0x980 + 0x981: 0x00c3, 0x982: 0x00c3, 0x983: 0x00c0, 0x985: 0x00c0, + 0x986: 0x00c0, 0x987: 0x00c0, 0x988: 0x00c0, 0x989: 0x00c0, 0x98a: 0x00c0, 0x98b: 0x00c0, + 0x98c: 0x00c0, 0x98d: 0x00c0, 0x98f: 0x00c0, 0x990: 0x00c0, 0x991: 0x00c0, + 0x993: 0x00c0, 0x994: 0x00c0, 0x995: 0x00c0, 0x996: 0x00c0, 0x997: 0x00c0, + 0x998: 0x00c0, 0x999: 0x00c0, 0x99a: 0x00c0, 0x99b: 0x00c0, 0x99c: 0x00c0, 0x99d: 0x00c0, + 0x99e: 0x00c0, 0x99f: 0x00c0, 0x9a0: 0x00c0, 0x9a1: 0x00c0, 0x9a2: 0x00c0, 0x9a3: 0x00c0, + 0x9a4: 0x00c0, 0x9a5: 0x00c0, 0x9a6: 0x00c0, 0x9a7: 0x00c0, 0x9a8: 0x00c0, + 0x9aa: 0x00c0, 0x9ab: 0x00c0, 0x9ac: 0x00c0, 0x9ad: 0x00c0, 0x9ae: 0x00c0, 0x9af: 0x00c0, + 0x9b0: 0x00c0, 0x9b2: 0x00c0, 0x9b3: 0x00c0, 0x9b5: 0x00c0, + 0x9b6: 0x00c0, 0x9b7: 0x00c0, 0x9b8: 0x00c0, 0x9b9: 0x00c0, + 0x9bc: 0x00c3, 0x9bd: 0x00c0, 0x9be: 0x00c0, 0x9bf: 0x00c0, + // Block 0x27, offset 0x9c0 + 0x9c0: 0x00c0, 0x9c1: 0x00c3, 0x9c2: 0x00c3, 0x9c3: 0x00c3, 0x9c4: 0x00c3, 0x9c5: 0x00c3, + 0x9c7: 0x00c3, 0x9c8: 0x00c3, 0x9c9: 0x00c0, 0x9cb: 0x00c0, + 0x9cc: 0x00c0, 0x9cd: 0x00c6, 0x9d0: 0x00c0, + 0x9e0: 0x00c0, 0x9e1: 0x00c0, 0x9e2: 0x00c3, 0x9e3: 0x00c3, + 0x9e6: 0x00c0, 0x9e7: 0x00c0, 0x9e8: 0x00c0, 0x9e9: 0x00c0, + 0x9ea: 0x00c0, 0x9eb: 0x00c0, 0x9ec: 0x00c0, 0x9ed: 0x00c0, 0x9ee: 0x00c0, 0x9ef: 0x00c0, + 0x9f0: 0x0080, 0x9f1: 0x0080, + 0x9f9: 0x00c0, 0x9fa: 0x00c3, 0x9fb: 0x00c3, + 0x9fc: 0x00c3, 0x9fd: 0x00c3, 0x9fe: 0x00c3, 0x9ff: 0x00c3, + // Block 0x28, offset 0xa00 + 0xa01: 0x00c3, 0xa02: 0x00c0, 0xa03: 0x00c0, 0xa05: 0x00c0, + 0xa06: 0x00c0, 0xa07: 0x00c0, 0xa08: 0x00c0, 0xa09: 0x00c0, 0xa0a: 0x00c0, 0xa0b: 0x00c0, + 0xa0c: 0x00c0, 0xa0f: 0x00c0, 0xa10: 0x00c0, + 0xa13: 0x00c0, 0xa14: 0x00c0, 0xa15: 0x00c0, 0xa16: 0x00c0, 0xa17: 0x00c0, + 0xa18: 0x00c0, 0xa19: 0x00c0, 0xa1a: 0x00c0, 0xa1b: 0x00c0, 0xa1c: 0x00c0, 0xa1d: 0x00c0, + 0xa1e: 0x00c0, 0xa1f: 0x00c0, 0xa20: 0x00c0, 0xa21: 0x00c0, 0xa22: 0x00c0, 0xa23: 0x00c0, + 0xa24: 0x00c0, 0xa25: 0x00c0, 0xa26: 0x00c0, 0xa27: 0x00c0, 0xa28: 0x00c0, + 0xa2a: 0x00c0, 0xa2b: 0x00c0, 0xa2c: 0x00c0, 0xa2d: 0x00c0, 0xa2e: 0x00c0, 0xa2f: 0x00c0, + 0xa30: 0x00c0, 0xa32: 0x00c0, 0xa33: 0x00c0, 0xa35: 0x00c0, + 0xa36: 0x00c0, 0xa37: 0x00c0, 0xa38: 0x00c0, 0xa39: 0x00c0, + 0xa3c: 0x00c3, 0xa3d: 0x00c0, 0xa3e: 0x00c0, 0xa3f: 0x00c3, + // Block 0x29, offset 0xa40 + 0xa40: 0x00c0, 0xa41: 0x00c3, 0xa42: 0x00c3, 0xa43: 0x00c3, 0xa44: 0x00c3, + 0xa47: 0x00c0, 0xa48: 0x00c0, 0xa4b: 0x00c0, + 0xa4c: 0x00c0, 0xa4d: 0x00c6, + 0xa56: 0x00c3, 0xa57: 0x00c0, + 0xa5c: 0x0080, 0xa5d: 0x0080, + 0xa5f: 0x00c0, 0xa60: 0x00c0, 0xa61: 0x00c0, 0xa62: 0x00c3, 0xa63: 0x00c3, + 0xa66: 0x00c0, 0xa67: 0x00c0, 0xa68: 0x00c0, 0xa69: 0x00c0, + 0xa6a: 0x00c0, 0xa6b: 0x00c0, 0xa6c: 0x00c0, 0xa6d: 0x00c0, 0xa6e: 0x00c0, 0xa6f: 0x00c0, + 0xa70: 0x0080, 0xa71: 0x00c0, 0xa72: 0x0080, 0xa73: 0x0080, 0xa74: 0x0080, 0xa75: 0x0080, + 0xa76: 0x0080, 0xa77: 0x0080, + // Block 0x2a, offset 0xa80 + 0xa82: 0x00c3, 0xa83: 0x00c0, 0xa85: 0x00c0, + 0xa86: 0x00c0, 0xa87: 0x00c0, 0xa88: 0x00c0, 0xa89: 0x00c0, 0xa8a: 0x00c0, + 0xa8e: 0x00c0, 0xa8f: 0x00c0, 0xa90: 0x00c0, + 0xa92: 0x00c0, 0xa93: 0x00c0, 0xa94: 0x00c0, 0xa95: 0x00c0, + 0xa99: 0x00c0, 0xa9a: 0x00c0, 0xa9c: 0x00c0, + 0xa9e: 0x00c0, 0xa9f: 0x00c0, 0xaa3: 0x00c0, + 0xaa4: 0x00c0, 0xaa8: 0x00c0, 0xaa9: 0x00c0, + 0xaaa: 0x00c0, 0xaae: 0x00c0, 0xaaf: 0x00c0, + 0xab0: 0x00c0, 0xab1: 0x00c0, 0xab2: 0x00c0, 0xab3: 0x00c0, 0xab4: 0x00c0, 0xab5: 0x00c0, + 0xab6: 0x00c0, 0xab7: 0x00c0, 0xab8: 0x00c0, 0xab9: 0x00c0, + 0xabe: 0x00c0, 0xabf: 0x00c0, + // Block 0x2b, offset 0xac0 + 0xac0: 0x00c3, 0xac1: 0x00c0, 0xac2: 0x00c0, + 0xac6: 0x00c0, 0xac7: 0x00c0, 0xac8: 0x00c0, 0xaca: 0x00c0, 0xacb: 0x00c0, + 0xacc: 0x00c0, 0xacd: 0x00c6, 0xad0: 0x00c0, + 0xad7: 0x00c0, + 0xae6: 0x00c0, 0xae7: 0x00c0, 0xae8: 0x00c0, 0xae9: 0x00c0, + 0xaea: 0x00c0, 0xaeb: 0x00c0, 0xaec: 0x00c0, 0xaed: 0x00c0, 0xaee: 0x00c0, 0xaef: 0x00c0, + 0xaf0: 0x0080, 0xaf1: 0x0080, 0xaf2: 0x0080, 0xaf3: 0x0080, 0xaf4: 0x0080, 0xaf5: 0x0080, + 0xaf6: 0x0080, 0xaf7: 0x0080, 0xaf8: 0x0080, 0xaf9: 0x0080, 0xafa: 0x0080, + // Block 0x2c, offset 0xb00 + 0xb00: 0x00c3, 0xb01: 0x00c0, 0xb02: 0x00c0, 0xb03: 0x00c0, 0xb05: 0x00c0, + 0xb06: 0x00c0, 0xb07: 0x00c0, 0xb08: 0x00c0, 0xb09: 0x00c0, 0xb0a: 0x00c0, 0xb0b: 0x00c0, + 0xb0c: 0x00c0, 0xb0e: 0x00c0, 0xb0f: 0x00c0, 0xb10: 0x00c0, + 0xb12: 0x00c0, 0xb13: 0x00c0, 0xb14: 0x00c0, 0xb15: 0x00c0, 0xb16: 0x00c0, 0xb17: 0x00c0, + 0xb18: 0x00c0, 0xb19: 0x00c0, 0xb1a: 0x00c0, 0xb1b: 0x00c0, 0xb1c: 0x00c0, 0xb1d: 0x00c0, + 0xb1e: 0x00c0, 0xb1f: 0x00c0, 0xb20: 0x00c0, 0xb21: 0x00c0, 0xb22: 0x00c0, 0xb23: 0x00c0, + 0xb24: 0x00c0, 0xb25: 0x00c0, 0xb26: 0x00c0, 0xb27: 0x00c0, 0xb28: 0x00c0, + 0xb2a: 0x00c0, 0xb2b: 0x00c0, 0xb2c: 0x00c0, 0xb2d: 0x00c0, 0xb2e: 0x00c0, 0xb2f: 0x00c0, + 0xb30: 0x00c0, 0xb31: 0x00c0, 0xb32: 0x00c0, 0xb33: 0x00c0, 0xb34: 0x00c0, 0xb35: 0x00c0, + 0xb36: 0x00c0, 0xb37: 0x00c0, 0xb38: 0x00c0, 0xb39: 0x00c0, + 0xb3d: 0x00c0, 0xb3e: 0x00c3, 0xb3f: 0x00c3, + // Block 0x2d, offset 0xb40 + 0xb40: 0x00c3, 0xb41: 0x00c0, 0xb42: 0x00c0, 0xb43: 0x00c0, 0xb44: 0x00c0, + 0xb46: 0x00c3, 0xb47: 0x00c3, 0xb48: 0x00c3, 0xb4a: 0x00c3, 0xb4b: 0x00c3, + 0xb4c: 0x00c3, 0xb4d: 0x00c6, + 0xb55: 0x00c3, 0xb56: 0x00c3, + 0xb58: 0x00c0, 0xb59: 0x00c0, 0xb5a: 0x00c0, + 0xb60: 0x00c0, 0xb61: 0x00c0, 0xb62: 0x00c3, 0xb63: 0x00c3, + 0xb66: 0x00c0, 0xb67: 0x00c0, 0xb68: 0x00c0, 0xb69: 0x00c0, + 0xb6a: 0x00c0, 0xb6b: 0x00c0, 0xb6c: 0x00c0, 0xb6d: 0x00c0, 0xb6e: 0x00c0, 0xb6f: 0x00c0, + 0xb78: 0x0080, 0xb79: 0x0080, 0xb7a: 0x0080, 0xb7b: 0x0080, + 0xb7c: 0x0080, 0xb7d: 0x0080, 0xb7e: 0x0080, 0xb7f: 0x0080, + // Block 0x2e, offset 0xb80 + 0xb80: 0x00c0, 0xb81: 0x00c3, 0xb82: 0x00c0, 0xb83: 0x00c0, 0xb85: 0x00c0, + 0xb86: 0x00c0, 0xb87: 0x00c0, 0xb88: 0x00c0, 0xb89: 0x00c0, 0xb8a: 0x00c0, 0xb8b: 0x00c0, + 0xb8c: 0x00c0, 0xb8e: 0x00c0, 0xb8f: 0x00c0, 0xb90: 0x00c0, + 0xb92: 0x00c0, 0xb93: 0x00c0, 0xb94: 0x00c0, 0xb95: 0x00c0, 0xb96: 0x00c0, 0xb97: 0x00c0, + 0xb98: 0x00c0, 0xb99: 0x00c0, 0xb9a: 0x00c0, 0xb9b: 0x00c0, 0xb9c: 0x00c0, 0xb9d: 0x00c0, + 0xb9e: 0x00c0, 0xb9f: 0x00c0, 0xba0: 0x00c0, 0xba1: 0x00c0, 0xba2: 0x00c0, 0xba3: 0x00c0, + 0xba4: 0x00c0, 0xba5: 0x00c0, 0xba6: 0x00c0, 0xba7: 0x00c0, 0xba8: 0x00c0, + 0xbaa: 0x00c0, 0xbab: 0x00c0, 0xbac: 0x00c0, 0xbad: 0x00c0, 0xbae: 0x00c0, 0xbaf: 0x00c0, + 0xbb0: 0x00c0, 0xbb1: 0x00c0, 0xbb2: 0x00c0, 0xbb3: 0x00c0, 0xbb5: 0x00c0, + 0xbb6: 0x00c0, 0xbb7: 0x00c0, 0xbb8: 0x00c0, 0xbb9: 0x00c0, + 0xbbc: 0x00c3, 0xbbd: 0x00c0, 0xbbe: 0x00c0, 0xbbf: 0x00c3, + // Block 0x2f, offset 0xbc0 + 0xbc0: 0x00c0, 0xbc1: 0x00c0, 0xbc2: 0x00c0, 0xbc3: 0x00c0, 0xbc4: 0x00c0, + 0xbc6: 0x00c3, 0xbc7: 0x00c0, 0xbc8: 0x00c0, 0xbca: 0x00c0, 0xbcb: 0x00c0, + 0xbcc: 0x00c3, 0xbcd: 0x00c6, + 0xbd5: 0x00c0, 0xbd6: 0x00c0, + 0xbde: 0x00c0, 0xbe0: 0x00c0, 0xbe1: 0x00c0, 0xbe2: 0x00c3, 0xbe3: 0x00c3, + 0xbe6: 0x00c0, 0xbe7: 0x00c0, 0xbe8: 0x00c0, 0xbe9: 0x00c0, + 0xbea: 0x00c0, 0xbeb: 0x00c0, 0xbec: 0x00c0, 0xbed: 0x00c0, 0xbee: 0x00c0, 0xbef: 0x00c0, + 0xbf1: 0x00c0, 0xbf2: 0x00c0, + // Block 0x30, offset 0xc00 + 0xc00: 0x00c3, 0xc01: 0x00c3, 0xc02: 0x00c0, 0xc03: 0x00c0, 0xc05: 0x00c0, + 0xc06: 0x00c0, 0xc07: 0x00c0, 0xc08: 0x00c0, 0xc09: 0x00c0, 0xc0a: 0x00c0, 0xc0b: 0x00c0, + 0xc0c: 0x00c0, 0xc0e: 0x00c0, 0xc0f: 0x00c0, 0xc10: 0x00c0, + 0xc12: 0x00c0, 0xc13: 0x00c0, 0xc14: 0x00c0, 0xc15: 0x00c0, 0xc16: 0x00c0, 0xc17: 0x00c0, + 0xc18: 0x00c0, 0xc19: 0x00c0, 0xc1a: 0x00c0, 0xc1b: 0x00c0, 0xc1c: 0x00c0, 0xc1d: 0x00c0, + 0xc1e: 0x00c0, 0xc1f: 0x00c0, 0xc20: 0x00c0, 0xc21: 0x00c0, 0xc22: 0x00c0, 0xc23: 0x00c0, + 0xc24: 0x00c0, 0xc25: 0x00c0, 0xc26: 0x00c0, 0xc27: 0x00c0, 0xc28: 0x00c0, 0xc29: 0x00c0, + 0xc2a: 0x00c0, 0xc2b: 0x00c0, 0xc2c: 0x00c0, 0xc2d: 0x00c0, 0xc2e: 0x00c0, 0xc2f: 0x00c0, + 0xc30: 0x00c0, 0xc31: 0x00c0, 0xc32: 0x00c0, 0xc33: 0x00c0, 0xc34: 0x00c0, 0xc35: 0x00c0, + 0xc36: 0x00c0, 0xc37: 0x00c0, 0xc38: 0x00c0, 0xc39: 0x00c0, 0xc3a: 0x00c0, 0xc3b: 0x00c6, + 0xc3c: 0x00c6, 0xc3d: 0x00c0, 0xc3e: 0x00c0, 0xc3f: 0x00c0, + // Block 0x31, offset 0xc40 + 0xc40: 0x00c0, 0xc41: 0x00c3, 0xc42: 0x00c3, 0xc43: 0x00c3, 0xc44: 0x00c3, + 0xc46: 0x00c0, 0xc47: 0x00c0, 0xc48: 0x00c0, 0xc4a: 0x00c0, 0xc4b: 0x00c0, + 0xc4c: 0x00c0, 0xc4d: 0x00c6, 0xc4e: 0x00c0, 0xc4f: 0x0080, + 0xc54: 0x00c0, 0xc55: 0x00c0, 0xc56: 0x00c0, 0xc57: 0x00c0, + 0xc58: 0x0080, 0xc59: 0x0080, 0xc5a: 0x0080, 0xc5b: 0x0080, 0xc5c: 0x0080, 0xc5d: 0x0080, + 0xc5e: 0x0080, 0xc5f: 0x00c0, 0xc60: 0x00c0, 0xc61: 0x00c0, 0xc62: 0x00c3, 0xc63: 0x00c3, + 0xc66: 0x00c0, 0xc67: 0x00c0, 0xc68: 0x00c0, 0xc69: 0x00c0, + 0xc6a: 0x00c0, 0xc6b: 0x00c0, 0xc6c: 0x00c0, 0xc6d: 0x00c0, 0xc6e: 0x00c0, 0xc6f: 0x00c0, + 0xc70: 0x0080, 0xc71: 0x0080, 0xc72: 0x0080, 0xc73: 0x0080, 0xc74: 0x0080, 0xc75: 0x0080, + 0xc76: 0x0080, 0xc77: 0x0080, 0xc78: 0x0080, 0xc79: 0x0080, 0xc7a: 0x00c0, 0xc7b: 0x00c0, + 0xc7c: 0x00c0, 0xc7d: 0x00c0, 0xc7e: 0x00c0, 0xc7f: 0x00c0, + // Block 0x32, offset 0xc80 + 0xc82: 0x00c0, 0xc83: 0x00c0, 0xc85: 0x00c0, + 0xc86: 0x00c0, 0xc87: 0x00c0, 0xc88: 0x00c0, 0xc89: 0x00c0, 0xc8a: 0x00c0, 0xc8b: 0x00c0, + 0xc8c: 0x00c0, 0xc8d: 0x00c0, 0xc8e: 0x00c0, 0xc8f: 0x00c0, 0xc90: 0x00c0, 0xc91: 0x00c0, + 0xc92: 0x00c0, 0xc93: 0x00c0, 0xc94: 0x00c0, 0xc95: 0x00c0, 0xc96: 0x00c0, + 0xc9a: 0x00c0, 0xc9b: 0x00c0, 0xc9c: 0x00c0, 0xc9d: 0x00c0, + 0xc9e: 0x00c0, 0xc9f: 0x00c0, 0xca0: 0x00c0, 0xca1: 0x00c0, 0xca2: 0x00c0, 0xca3: 0x00c0, + 0xca4: 0x00c0, 0xca5: 0x00c0, 0xca6: 0x00c0, 0xca7: 0x00c0, 0xca8: 0x00c0, 0xca9: 0x00c0, + 0xcaa: 0x00c0, 0xcab: 0x00c0, 0xcac: 0x00c0, 0xcad: 0x00c0, 0xcae: 0x00c0, 0xcaf: 0x00c0, + 0xcb0: 0x00c0, 0xcb1: 0x00c0, 0xcb3: 0x00c0, 0xcb4: 0x00c0, 0xcb5: 0x00c0, + 0xcb6: 0x00c0, 0xcb7: 0x00c0, 0xcb8: 0x00c0, 0xcb9: 0x00c0, 0xcba: 0x00c0, 0xcbb: 0x00c0, + 0xcbd: 0x00c0, + // Block 0x33, offset 0xcc0 + 0xcc0: 0x00c0, 0xcc1: 0x00c0, 0xcc2: 0x00c0, 0xcc3: 0x00c0, 0xcc4: 0x00c0, 0xcc5: 0x00c0, + 0xcc6: 0x00c0, 0xcca: 0x00c6, + 0xccf: 0x00c0, 0xcd0: 0x00c0, 0xcd1: 0x00c0, + 0xcd2: 0x00c3, 0xcd3: 0x00c3, 0xcd4: 0x00c3, 0xcd6: 0x00c3, + 0xcd8: 0x00c0, 0xcd9: 0x00c0, 0xcda: 0x00c0, 0xcdb: 0x00c0, 0xcdc: 0x00c0, 0xcdd: 0x00c0, + 0xcde: 0x00c0, 0xcdf: 0x00c0, + 0xce6: 0x00c0, 0xce7: 0x00c0, 0xce8: 0x00c0, 0xce9: 0x00c0, + 0xcea: 0x00c0, 0xceb: 0x00c0, 0xcec: 0x00c0, 0xced: 0x00c0, 0xcee: 0x00c0, 0xcef: 0x00c0, + 0xcf2: 0x00c0, 0xcf3: 0x00c0, 0xcf4: 0x0080, + // Block 0x34, offset 0xd00 + 0xd01: 0x00c0, 0xd02: 0x00c0, 0xd03: 0x00c0, 0xd04: 0x00c0, 0xd05: 0x00c0, + 0xd06: 0x00c0, 0xd07: 0x00c0, 0xd08: 0x00c0, 0xd09: 0x00c0, 0xd0a: 0x00c0, 0xd0b: 0x00c0, + 0xd0c: 0x00c0, 0xd0d: 0x00c0, 0xd0e: 0x00c0, 0xd0f: 0x00c0, 0xd10: 0x00c0, 0xd11: 0x00c0, + 0xd12: 0x00c0, 0xd13: 0x00c0, 0xd14: 0x00c0, 0xd15: 0x00c0, 0xd16: 0x00c0, 0xd17: 0x00c0, + 0xd18: 0x00c0, 0xd19: 0x00c0, 0xd1a: 0x00c0, 0xd1b: 0x00c0, 0xd1c: 0x00c0, 0xd1d: 0x00c0, + 0xd1e: 0x00c0, 0xd1f: 0x00c0, 0xd20: 0x00c0, 0xd21: 0x00c0, 0xd22: 0x00c0, 0xd23: 0x00c0, + 0xd24: 0x00c0, 0xd25: 0x00c0, 0xd26: 0x00c0, 0xd27: 0x00c0, 0xd28: 0x00c0, 0xd29: 0x00c0, + 0xd2a: 0x00c0, 0xd2b: 0x00c0, 0xd2c: 0x00c0, 0xd2d: 0x00c0, 0xd2e: 0x00c0, 0xd2f: 0x00c0, + 0xd30: 0x00c0, 0xd31: 0x00c3, 0xd32: 0x00c0, 0xd33: 0x0080, 0xd34: 0x00c3, 0xd35: 0x00c3, + 0xd36: 0x00c3, 0xd37: 0x00c3, 0xd38: 0x00c3, 0xd39: 0x00c3, 0xd3a: 0x00c6, + 0xd3f: 0x0080, + // Block 0x35, offset 0xd40 + 0xd40: 0x00c0, 0xd41: 0x00c0, 0xd42: 0x00c0, 0xd43: 0x00c0, 0xd44: 0x00c0, 0xd45: 0x00c0, + 0xd46: 0x00c0, 0xd47: 0x00c3, 0xd48: 0x00c3, 0xd49: 0x00c3, 0xd4a: 0x00c3, 0xd4b: 0x00c3, + 0xd4c: 0x00c3, 0xd4d: 0x00c3, 0xd4e: 0x00c3, 0xd4f: 0x0080, 0xd50: 0x00c0, 0xd51: 0x00c0, + 0xd52: 0x00c0, 0xd53: 0x00c0, 0xd54: 0x00c0, 0xd55: 0x00c0, 0xd56: 0x00c0, 0xd57: 0x00c0, + 0xd58: 0x00c0, 0xd59: 0x00c0, 0xd5a: 0x0080, 0xd5b: 0x0080, + // Block 0x36, offset 0xd80 + 0xd81: 0x00c0, 0xd82: 0x00c0, 0xd84: 0x00c0, + 0xd87: 0x00c0, 0xd88: 0x00c0, 0xd8a: 0x00c0, + 0xd8d: 0x00c0, + 0xd94: 0x00c0, 0xd95: 0x00c0, 0xd96: 0x00c0, 0xd97: 0x00c0, + 0xd99: 0x00c0, 0xd9a: 0x00c0, 0xd9b: 0x00c0, 0xd9c: 0x00c0, 0xd9d: 0x00c0, + 0xd9e: 0x00c0, 0xd9f: 0x00c0, 0xda1: 0x00c0, 0xda2: 0x00c0, 0xda3: 0x00c0, + 0xda5: 0x00c0, 0xda7: 0x00c0, + 0xdaa: 0x00c0, 0xdab: 0x00c0, 0xdad: 0x00c0, 0xdae: 0x00c0, 0xdaf: 0x00c0, + 0xdb0: 0x00c0, 0xdb1: 0x00c3, 0xdb2: 0x00c0, 0xdb3: 0x0080, 0xdb4: 0x00c3, 0xdb5: 0x00c3, + 0xdb6: 0x00c3, 0xdb7: 0x00c3, 0xdb8: 0x00c3, 0xdb9: 0x00c3, 0xdbb: 0x00c3, + 0xdbc: 0x00c3, 0xdbd: 0x00c0, + // Block 0x37, offset 0xdc0 + 0xdc0: 0x00c0, 0xdc1: 0x00c0, 0xdc2: 0x00c0, 0xdc3: 0x00c0, 0xdc4: 0x00c0, + 0xdc6: 0x00c0, 0xdc8: 0x00c3, 0xdc9: 0x00c3, 0xdca: 0x00c3, 0xdcb: 0x00c3, + 0xdcc: 0x00c3, 0xdcd: 0x00c3, 0xdd0: 0x00c0, 0xdd1: 0x00c0, + 0xdd2: 0x00c0, 0xdd3: 0x00c0, 0xdd4: 0x00c0, 0xdd5: 0x00c0, 0xdd6: 0x00c0, 0xdd7: 0x00c0, + 0xdd8: 0x00c0, 0xdd9: 0x00c0, 0xddc: 0x0080, 0xddd: 0x0080, + 0xdde: 0x00c0, 0xddf: 0x00c0, + // Block 0x38, offset 0xe00 + 0xe00: 0x00c0, 0xe01: 0x0080, 0xe02: 0x0080, 0xe03: 0x0080, 0xe04: 0x0080, 0xe05: 0x0080, + 0xe06: 0x0080, 0xe07: 0x0080, 0xe08: 0x0080, 0xe09: 0x0080, 0xe0a: 0x0080, 0xe0b: 0x00c0, + 0xe0c: 0x0080, 0xe0d: 0x0080, 0xe0e: 0x0080, 0xe0f: 0x0080, 0xe10: 0x0080, 0xe11: 0x0080, + 0xe12: 0x0080, 0xe13: 0x0080, 0xe14: 0x0080, 0xe15: 0x0080, 0xe16: 0x0080, 0xe17: 0x0080, + 0xe18: 0x00c3, 0xe19: 0x00c3, 0xe1a: 0x0080, 0xe1b: 0x0080, 0xe1c: 0x0080, 0xe1d: 0x0080, + 0xe1e: 0x0080, 0xe1f: 0x0080, 0xe20: 0x00c0, 0xe21: 0x00c0, 0xe22: 0x00c0, 0xe23: 0x00c0, + 0xe24: 0x00c0, 0xe25: 0x00c0, 0xe26: 0x00c0, 0xe27: 0x00c0, 0xe28: 0x00c0, 0xe29: 0x00c0, + 0xe2a: 0x0080, 0xe2b: 0x0080, 0xe2c: 0x0080, 0xe2d: 0x0080, 0xe2e: 0x0080, 0xe2f: 0x0080, + 0xe30: 0x0080, 0xe31: 0x0080, 0xe32: 0x0080, 0xe33: 0x0080, 0xe34: 0x0080, 0xe35: 0x00c3, + 0xe36: 0x0080, 0xe37: 0x00c3, 0xe38: 0x0080, 0xe39: 0x00c3, 0xe3a: 0x0080, 0xe3b: 0x0080, + 0xe3c: 0x0080, 0xe3d: 0x0080, 0xe3e: 0x00c0, 0xe3f: 0x00c0, + // Block 0x39, offset 0xe40 + 0xe40: 0x00c0, 0xe41: 0x00c0, 0xe42: 0x00c0, 0xe43: 0x0080, 0xe44: 0x00c0, 0xe45: 0x00c0, + 0xe46: 0x00c0, 0xe47: 0x00c0, 0xe49: 0x00c0, 0xe4a: 0x00c0, 0xe4b: 0x00c0, + 0xe4c: 0x00c0, 0xe4d: 0x0080, 0xe4e: 0x00c0, 0xe4f: 0x00c0, 0xe50: 0x00c0, 0xe51: 0x00c0, + 0xe52: 0x0080, 0xe53: 0x00c0, 0xe54: 0x00c0, 0xe55: 0x00c0, 0xe56: 0x00c0, 0xe57: 0x0080, + 0xe58: 0x00c0, 0xe59: 0x00c0, 0xe5a: 0x00c0, 0xe5b: 0x00c0, 0xe5c: 0x0080, 0xe5d: 0x00c0, + 0xe5e: 0x00c0, 0xe5f: 0x00c0, 0xe60: 0x00c0, 0xe61: 0x00c0, 0xe62: 0x00c0, 0xe63: 0x00c0, + 0xe64: 0x00c0, 0xe65: 0x00c0, 0xe66: 0x00c0, 0xe67: 0x00c0, 0xe68: 0x00c0, 0xe69: 0x0080, + 0xe6a: 0x00c0, 0xe6b: 0x00c0, 0xe6c: 0x00c0, + 0xe71: 0x00c3, 0xe72: 0x00c3, 0xe73: 0x0083, 0xe74: 0x00c3, 0xe75: 0x0083, + 0xe76: 0x0083, 0xe77: 0x0083, 0xe78: 0x0083, 0xe79: 0x0083, 0xe7a: 0x00c3, 0xe7b: 0x00c3, + 0xe7c: 0x00c3, 0xe7d: 0x00c3, 0xe7e: 0x00c3, 0xe7f: 0x00c0, + // Block 0x3a, offset 0xe80 + 0xe80: 0x00c3, 0xe81: 0x0083, 0xe82: 0x00c3, 0xe83: 0x00c3, 0xe84: 0x00c6, 0xe85: 0x0080, + 0xe86: 0x00c3, 0xe87: 0x00c3, 0xe88: 0x00c0, 0xe89: 0x00c0, 0xe8a: 0x00c0, 0xe8b: 0x00c0, + 0xe8c: 0x00c0, 0xe8d: 0x00c3, 0xe8e: 0x00c3, 0xe8f: 0x00c3, 0xe90: 0x00c3, 0xe91: 0x00c3, + 0xe92: 0x00c3, 0xe93: 0x0083, 0xe94: 0x00c3, 0xe95: 0x00c3, 0xe96: 0x00c3, 0xe97: 0x00c3, + 0xe99: 0x00c3, 0xe9a: 0x00c3, 0xe9b: 0x00c3, 0xe9c: 0x00c3, 0xe9d: 0x0083, + 0xe9e: 0x00c3, 0xe9f: 0x00c3, 0xea0: 0x00c3, 0xea1: 0x00c3, 0xea2: 0x0083, 0xea3: 0x00c3, + 0xea4: 0x00c3, 0xea5: 0x00c3, 0xea6: 0x00c3, 0xea7: 0x0083, 0xea8: 0x00c3, 0xea9: 0x00c3, + 0xeaa: 0x00c3, 0xeab: 0x00c3, 0xeac: 0x0083, 0xead: 0x00c3, 0xeae: 0x00c3, 0xeaf: 0x00c3, + 0xeb0: 0x00c3, 0xeb1: 0x00c3, 0xeb2: 0x00c3, 0xeb3: 0x00c3, 0xeb4: 0x00c3, 0xeb5: 0x00c3, + 0xeb6: 0x00c3, 0xeb7: 0x00c3, 0xeb8: 0x00c3, 0xeb9: 0x0083, 0xeba: 0x00c3, 0xebb: 0x00c3, + 0xebc: 0x00c3, 0xebe: 0x0080, 0xebf: 0x0080, + // Block 0x3b, offset 0xec0 + 0xec0: 0x0080, 0xec1: 0x0080, 0xec2: 0x0080, 0xec3: 0x0080, 0xec4: 0x0080, 0xec5: 0x0080, + 0xec6: 0x00c3, 0xec7: 0x0080, 0xec8: 0x0080, 0xec9: 0x0080, 0xeca: 0x0080, 0xecb: 0x0080, + 0xecc: 0x0080, 0xece: 0x0080, 0xecf: 0x0080, 0xed0: 0x0080, 0xed1: 0x0080, + 0xed2: 0x0080, 0xed3: 0x0080, 0xed4: 0x0080, 0xed5: 0x0080, 0xed6: 0x0080, 0xed7: 0x0080, + 0xed8: 0x0080, 0xed9: 0x0080, 0xeda: 0x0080, + // Block 0x3c, offset 0xf00 + 0xf00: 0x00c0, 0xf01: 0x00c0, 0xf02: 0x00c0, 0xf03: 0x00c0, 0xf04: 0x00c0, 0xf05: 0x00c0, + 0xf06: 0x00c0, 0xf07: 0x00c0, 0xf08: 0x00c0, 0xf09: 0x00c0, 0xf0a: 0x00c0, 0xf0b: 0x00c0, + 0xf0c: 0x00c0, 0xf0d: 0x00c0, 0xf0e: 0x00c0, 0xf0f: 0x00c0, 0xf10: 0x00c0, 0xf11: 0x00c0, + 0xf12: 0x00c0, 0xf13: 0x00c0, 0xf14: 0x00c0, 0xf15: 0x00c0, 0xf16: 0x00c0, 0xf17: 0x00c0, + 0xf18: 0x00c0, 0xf19: 0x00c0, 0xf1a: 0x00c0, 0xf1b: 0x00c0, 0xf1c: 0x00c0, 0xf1d: 0x00c0, + 0xf1e: 0x00c0, 0xf1f: 0x00c0, 0xf20: 0x00c0, 0xf21: 0x00c0, 0xf22: 0x00c0, 0xf23: 0x00c0, + 0xf24: 0x00c0, 0xf25: 0x00c0, 0xf26: 0x00c0, 0xf27: 0x00c0, 0xf28: 0x00c0, 0xf29: 0x00c0, + 0xf2a: 0x00c0, 0xf2b: 0x00c0, 0xf2c: 0x00c0, 0xf2d: 0x00c3, 0xf2e: 0x00c3, 0xf2f: 0x00c3, + 0xf30: 0x00c3, 0xf31: 0x00c0, 0xf32: 0x00c3, 0xf33: 0x00c3, 0xf34: 0x00c3, 0xf35: 0x00c3, + 0xf36: 0x00c3, 0xf37: 0x00c3, 0xf38: 0x00c0, 0xf39: 0x00c6, 0xf3a: 0x00c6, 0xf3b: 0x00c0, + 0xf3c: 0x00c0, 0xf3d: 0x00c3, 0xf3e: 0x00c3, 0xf3f: 0x00c0, + // Block 0x3d, offset 0xf40 + 0xf40: 0x00c0, 0xf41: 0x00c0, 0xf42: 0x00c0, 0xf43: 0x00c0, 0xf44: 0x00c0, 0xf45: 0x00c0, + 0xf46: 0x00c0, 0xf47: 0x00c0, 0xf48: 0x00c0, 0xf49: 0x00c0, 0xf4a: 0x0080, 0xf4b: 0x0080, + 0xf4c: 0x0080, 0xf4d: 0x0080, 0xf4e: 0x0080, 0xf4f: 0x0080, 0xf50: 0x00c0, 0xf51: 0x00c0, + 0xf52: 0x00c0, 0xf53: 0x00c0, 0xf54: 0x00c0, 0xf55: 0x00c0, 0xf56: 0x00c0, 0xf57: 0x00c0, + 0xf58: 0x00c3, 0xf59: 0x00c3, 0xf5a: 0x00c0, 0xf5b: 0x00c0, 0xf5c: 0x00c0, 0xf5d: 0x00c0, + 0xf5e: 0x00c3, 0xf5f: 0x00c3, 0xf60: 0x00c3, 0xf61: 0x00c0, 0xf62: 0x00c0, 0xf63: 0x00c0, + 0xf64: 0x00c0, 0xf65: 0x00c0, 0xf66: 0x00c0, 0xf67: 0x00c0, 0xf68: 0x00c0, 0xf69: 0x00c0, + 0xf6a: 0x00c0, 0xf6b: 0x00c0, 0xf6c: 0x00c0, 0xf6d: 0x00c0, 0xf6e: 0x00c0, 0xf6f: 0x00c0, + 0xf70: 0x00c0, 0xf71: 0x00c3, 0xf72: 0x00c3, 0xf73: 0x00c3, 0xf74: 0x00c3, 0xf75: 0x00c0, + 0xf76: 0x00c0, 0xf77: 0x00c0, 0xf78: 0x00c0, 0xf79: 0x00c0, 0xf7a: 0x00c0, 0xf7b: 0x00c0, + 0xf7c: 0x00c0, 0xf7d: 0x00c0, 0xf7e: 0x00c0, 0xf7f: 0x00c0, + // Block 0x3e, offset 0xf80 + 0xf80: 0x00c0, 0xf81: 0x00c0, 0xf82: 0x00c3, 0xf83: 0x00c0, 0xf84: 0x00c0, 0xf85: 0x00c3, + 0xf86: 0x00c3, 0xf87: 0x00c0, 0xf88: 0x00c0, 0xf89: 0x00c0, 0xf8a: 0x00c0, 0xf8b: 0x00c0, + 0xf8c: 0x00c0, 0xf8d: 0x00c3, 0xf8e: 0x00c0, 0xf8f: 0x00c0, 0xf90: 0x00c0, 0xf91: 0x00c0, + 0xf92: 0x00c0, 0xf93: 0x00c0, 0xf94: 0x00c0, 0xf95: 0x00c0, 0xf96: 0x00c0, 0xf97: 0x00c0, + 0xf98: 0x00c0, 0xf99: 0x00c0, 0xf9a: 0x00c0, 0xf9b: 0x00c0, 0xf9c: 0x00c0, 0xf9d: 0x00c3, + 0xf9e: 0x0080, 0xf9f: 0x0080, 0xfa0: 0x00c0, 0xfa1: 0x00c0, 0xfa2: 0x00c0, 0xfa3: 0x00c0, + 0xfa4: 0x00c0, 0xfa5: 0x00c0, 0xfa6: 0x00c0, 0xfa7: 0x00c0, 0xfa8: 0x00c0, 0xfa9: 0x00c0, + 0xfaa: 0x00c0, 0xfab: 0x00c0, 0xfac: 0x00c0, 0xfad: 0x00c0, 0xfae: 0x00c0, 0xfaf: 0x00c0, + 0xfb0: 0x00c0, 0xfb1: 0x00c0, 0xfb2: 0x00c0, 0xfb3: 0x00c0, 0xfb4: 0x00c0, 0xfb5: 0x00c0, + 0xfb6: 0x00c0, 0xfb7: 0x00c0, 0xfb8: 0x00c0, 0xfb9: 0x00c0, 0xfba: 0x00c0, 0xfbb: 0x00c0, + 0xfbc: 0x00c0, 0xfbd: 0x00c0, 0xfbe: 0x00c0, 0xfbf: 0x00c0, + // Block 0x3f, offset 0xfc0 + 0xfc0: 0x00c0, 0xfc1: 0x00c0, 0xfc2: 0x00c0, 0xfc3: 0x00c0, 0xfc4: 0x00c0, 0xfc5: 0x00c0, + 0xfc7: 0x00c0, + 0xfcd: 0x00c0, 0xfd0: 0x00c0, 0xfd1: 0x00c0, + 0xfd2: 0x00c0, 0xfd3: 0x00c0, 0xfd4: 0x00c0, 0xfd5: 0x00c0, 0xfd6: 0x00c0, 0xfd7: 0x00c0, + 0xfd8: 0x00c0, 0xfd9: 0x00c0, 0xfda: 0x00c0, 0xfdb: 0x00c0, 0xfdc: 0x00c0, 0xfdd: 0x00c0, + 0xfde: 0x00c0, 0xfdf: 0x00c0, 0xfe0: 0x00c0, 0xfe1: 0x00c0, 0xfe2: 0x00c0, 0xfe3: 0x00c0, + 0xfe4: 0x00c0, 0xfe5: 0x00c0, 0xfe6: 0x00c0, 0xfe7: 0x00c0, 0xfe8: 0x00c0, 0xfe9: 0x00c0, + 0xfea: 0x00c0, 0xfeb: 0x00c0, 0xfec: 0x00c0, 0xfed: 0x00c0, 0xfee: 0x00c0, 0xfef: 0x00c0, + 0xff0: 0x00c0, 0xff1: 0x00c0, 0xff2: 0x00c0, 0xff3: 0x00c0, 0xff4: 0x00c0, 0xff5: 0x00c0, + 0xff6: 0x00c0, 0xff7: 0x00c0, 0xff8: 0x00c0, 0xff9: 0x00c0, 0xffa: 0x00c0, 0xffb: 0x0080, + 0xffc: 0x0080, 0xffd: 0x00c0, 0xffe: 0x00c0, 0xfff: 0x00c0, + // Block 0x40, offset 0x1000 + 0x1000: 0x0040, 0x1001: 0x0040, 0x1002: 0x0040, 0x1003: 0x0040, 0x1004: 0x0040, 0x1005: 0x0040, + 0x1006: 0x0040, 0x1007: 0x0040, 0x1008: 0x0040, 0x1009: 0x0040, 0x100a: 0x0040, 0x100b: 0x0040, + 0x100c: 0x0040, 0x100d: 0x0040, 0x100e: 0x0040, 0x100f: 0x0040, 0x1010: 0x0040, 0x1011: 0x0040, + 0x1012: 0x0040, 0x1013: 0x0040, 0x1014: 0x0040, 0x1015: 0x0040, 0x1016: 0x0040, 0x1017: 0x0040, + 0x1018: 0x0040, 0x1019: 0x0040, 0x101a: 0x0040, 0x101b: 0x0040, 0x101c: 0x0040, 0x101d: 0x0040, + 0x101e: 0x0040, 0x101f: 0x0040, 0x1020: 0x0040, 0x1021: 0x0040, 0x1022: 0x0040, 0x1023: 0x0040, + 0x1024: 0x0040, 0x1025: 0x0040, 0x1026: 0x0040, 0x1027: 0x0040, 0x1028: 0x0040, 0x1029: 0x0040, + 0x102a: 0x0040, 0x102b: 0x0040, 0x102c: 0x0040, 0x102d: 0x0040, 0x102e: 0x0040, 0x102f: 0x0040, + 0x1030: 0x0040, 0x1031: 0x0040, 0x1032: 0x0040, 0x1033: 0x0040, 0x1034: 0x0040, 0x1035: 0x0040, + 0x1036: 0x0040, 0x1037: 0x0040, 0x1038: 0x0040, 0x1039: 0x0040, 0x103a: 0x0040, 0x103b: 0x0040, + 0x103c: 0x0040, 0x103d: 0x0040, 0x103e: 0x0040, 0x103f: 0x0040, + // Block 0x41, offset 0x1040 + 0x1040: 0x00c0, 0x1041: 0x00c0, 0x1042: 0x00c0, 0x1043: 0x00c0, 0x1044: 0x00c0, 0x1045: 0x00c0, + 0x1046: 0x00c0, 0x1047: 0x00c0, 0x1048: 0x00c0, 0x104a: 0x00c0, 0x104b: 0x00c0, + 0x104c: 0x00c0, 0x104d: 0x00c0, 0x1050: 0x00c0, 0x1051: 0x00c0, + 0x1052: 0x00c0, 0x1053: 0x00c0, 0x1054: 0x00c0, 0x1055: 0x00c0, 0x1056: 0x00c0, + 0x1058: 0x00c0, 0x105a: 0x00c0, 0x105b: 0x00c0, 0x105c: 0x00c0, 0x105d: 0x00c0, + 0x1060: 0x00c0, 0x1061: 0x00c0, 0x1062: 0x00c0, 0x1063: 0x00c0, + 0x1064: 0x00c0, 0x1065: 0x00c0, 0x1066: 0x00c0, 0x1067: 0x00c0, 0x1068: 0x00c0, 0x1069: 0x00c0, + 0x106a: 0x00c0, 0x106b: 0x00c0, 0x106c: 0x00c0, 0x106d: 0x00c0, 0x106e: 0x00c0, 0x106f: 0x00c0, + 0x1070: 0x00c0, 0x1071: 0x00c0, 0x1072: 0x00c0, 0x1073: 0x00c0, 0x1074: 0x00c0, 0x1075: 0x00c0, + 0x1076: 0x00c0, 0x1077: 0x00c0, 0x1078: 0x00c0, 0x1079: 0x00c0, 0x107a: 0x00c0, 0x107b: 0x00c0, + 0x107c: 0x00c0, 0x107d: 0x00c0, 0x107e: 0x00c0, 0x107f: 0x00c0, + // Block 0x42, offset 0x1080 + 0x1080: 0x00c0, 0x1081: 0x00c0, 0x1082: 0x00c0, 0x1083: 0x00c0, 0x1084: 0x00c0, 0x1085: 0x00c0, + 0x1086: 0x00c0, 0x1087: 0x00c0, 0x1088: 0x00c0, 0x108a: 0x00c0, 0x108b: 0x00c0, + 0x108c: 0x00c0, 0x108d: 0x00c0, 0x1090: 0x00c0, 0x1091: 0x00c0, + 0x1092: 0x00c0, 0x1093: 0x00c0, 0x1094: 0x00c0, 0x1095: 0x00c0, 0x1096: 0x00c0, 0x1097: 0x00c0, + 0x1098: 0x00c0, 0x1099: 0x00c0, 0x109a: 0x00c0, 0x109b: 0x00c0, 0x109c: 0x00c0, 0x109d: 0x00c0, + 0x109e: 0x00c0, 0x109f: 0x00c0, 0x10a0: 0x00c0, 0x10a1: 0x00c0, 0x10a2: 0x00c0, 0x10a3: 0x00c0, + 0x10a4: 0x00c0, 0x10a5: 0x00c0, 0x10a6: 0x00c0, 0x10a7: 0x00c0, 0x10a8: 0x00c0, 0x10a9: 0x00c0, + 0x10aa: 0x00c0, 0x10ab: 0x00c0, 0x10ac: 0x00c0, 0x10ad: 0x00c0, 0x10ae: 0x00c0, 0x10af: 0x00c0, + 0x10b0: 0x00c0, 0x10b2: 0x00c0, 0x10b3: 0x00c0, 0x10b4: 0x00c0, 0x10b5: 0x00c0, + 0x10b8: 0x00c0, 0x10b9: 0x00c0, 0x10ba: 0x00c0, 0x10bb: 0x00c0, + 0x10bc: 0x00c0, 0x10bd: 0x00c0, 0x10be: 0x00c0, + // Block 0x43, offset 0x10c0 + 0x10c0: 0x00c0, 0x10c2: 0x00c0, 0x10c3: 0x00c0, 0x10c4: 0x00c0, 0x10c5: 0x00c0, + 0x10c8: 0x00c0, 0x10c9: 0x00c0, 0x10ca: 0x00c0, 0x10cb: 0x00c0, + 0x10cc: 0x00c0, 0x10cd: 0x00c0, 0x10ce: 0x00c0, 0x10cf: 0x00c0, 0x10d0: 0x00c0, 0x10d1: 0x00c0, + 0x10d2: 0x00c0, 0x10d3: 0x00c0, 0x10d4: 0x00c0, 0x10d5: 0x00c0, 0x10d6: 0x00c0, + 0x10d8: 0x00c0, 0x10d9: 0x00c0, 0x10da: 0x00c0, 0x10db: 0x00c0, 0x10dc: 0x00c0, 0x10dd: 0x00c0, + 0x10de: 0x00c0, 0x10df: 0x00c0, 0x10e0: 0x00c0, 0x10e1: 0x00c0, 0x10e2: 0x00c0, 0x10e3: 0x00c0, + 0x10e4: 0x00c0, 0x10e5: 0x00c0, 0x10e6: 0x00c0, 0x10e7: 0x00c0, 0x10e8: 0x00c0, 0x10e9: 0x00c0, + 0x10ea: 0x00c0, 0x10eb: 0x00c0, 0x10ec: 0x00c0, 0x10ed: 0x00c0, 0x10ee: 0x00c0, 0x10ef: 0x00c0, + 0x10f0: 0x00c0, 0x10f1: 0x00c0, 0x10f2: 0x00c0, 0x10f3: 0x00c0, 0x10f4: 0x00c0, 0x10f5: 0x00c0, + 0x10f6: 0x00c0, 0x10f7: 0x00c0, 0x10f8: 0x00c0, 0x10f9: 0x00c0, 0x10fa: 0x00c0, 0x10fb: 0x00c0, + 0x10fc: 0x00c0, 0x10fd: 0x00c0, 0x10fe: 0x00c0, 0x10ff: 0x00c0, + // Block 0x44, offset 0x1100 + 0x1100: 0x00c0, 0x1101: 0x00c0, 0x1102: 0x00c0, 0x1103: 0x00c0, 0x1104: 0x00c0, 0x1105: 0x00c0, + 0x1106: 0x00c0, 0x1107: 0x00c0, 0x1108: 0x00c0, 0x1109: 0x00c0, 0x110a: 0x00c0, 0x110b: 0x00c0, + 0x110c: 0x00c0, 0x110d: 0x00c0, 0x110e: 0x00c0, 0x110f: 0x00c0, 0x1110: 0x00c0, + 0x1112: 0x00c0, 0x1113: 0x00c0, 0x1114: 0x00c0, 0x1115: 0x00c0, + 0x1118: 0x00c0, 0x1119: 0x00c0, 0x111a: 0x00c0, 0x111b: 0x00c0, 0x111c: 0x00c0, 0x111d: 0x00c0, + 0x111e: 0x00c0, 0x111f: 0x00c0, 0x1120: 0x00c0, 0x1121: 0x00c0, 0x1122: 0x00c0, 0x1123: 0x00c0, + 0x1124: 0x00c0, 0x1125: 0x00c0, 0x1126: 0x00c0, 0x1127: 0x00c0, 0x1128: 0x00c0, 0x1129: 0x00c0, + 0x112a: 0x00c0, 0x112b: 0x00c0, 0x112c: 0x00c0, 0x112d: 0x00c0, 0x112e: 0x00c0, 0x112f: 0x00c0, + 0x1130: 0x00c0, 0x1131: 0x00c0, 0x1132: 0x00c0, 0x1133: 0x00c0, 0x1134: 0x00c0, 0x1135: 0x00c0, + 0x1136: 0x00c0, 0x1137: 0x00c0, 0x1138: 0x00c0, 0x1139: 0x00c0, 0x113a: 0x00c0, 0x113b: 0x00c0, + 0x113c: 0x00c0, 0x113d: 0x00c0, 0x113e: 0x00c0, 0x113f: 0x00c0, + // Block 0x45, offset 0x1140 + 0x1140: 0x00c0, 0x1141: 0x00c0, 0x1142: 0x00c0, 0x1143: 0x00c0, 0x1144: 0x00c0, 0x1145: 0x00c0, + 0x1146: 0x00c0, 0x1147: 0x00c0, 0x1148: 0x00c0, 0x1149: 0x00c0, 0x114a: 0x00c0, 0x114b: 0x00c0, + 0x114c: 0x00c0, 0x114d: 0x00c0, 0x114e: 0x00c0, 0x114f: 0x00c0, 0x1150: 0x00c0, 0x1151: 0x00c0, + 0x1152: 0x00c0, 0x1153: 0x00c0, 0x1154: 0x00c0, 0x1155: 0x00c0, 0x1156: 0x00c0, 0x1157: 0x00c0, + 0x1158: 0x00c0, 0x1159: 0x00c0, 0x115a: 0x00c0, 0x115d: 0x00c3, + 0x115e: 0x00c3, 0x115f: 0x00c3, 0x1160: 0x0080, 0x1161: 0x0080, 0x1162: 0x0080, 0x1163: 0x0080, + 0x1164: 0x0080, 0x1165: 0x0080, 0x1166: 0x0080, 0x1167: 0x0080, 0x1168: 0x0080, 0x1169: 0x0080, + 0x116a: 0x0080, 0x116b: 0x0080, 0x116c: 0x0080, 0x116d: 0x0080, 0x116e: 0x0080, 0x116f: 0x0080, + 0x1170: 0x0080, 0x1171: 0x0080, 0x1172: 0x0080, 0x1173: 0x0080, 0x1174: 0x0080, 0x1175: 0x0080, + 0x1176: 0x0080, 0x1177: 0x0080, 0x1178: 0x0080, 0x1179: 0x0080, 0x117a: 0x0080, 0x117b: 0x0080, + 0x117c: 0x0080, + // Block 0x46, offset 0x1180 + 0x1180: 0x00c0, 0x1181: 0x00c0, 0x1182: 0x00c0, 0x1183: 0x00c0, 0x1184: 0x00c0, 0x1185: 0x00c0, + 0x1186: 0x00c0, 0x1187: 0x00c0, 0x1188: 0x00c0, 0x1189: 0x00c0, 0x118a: 0x00c0, 0x118b: 0x00c0, + 0x118c: 0x00c0, 0x118d: 0x00c0, 0x118e: 0x00c0, 0x118f: 0x00c0, 0x1190: 0x0080, 0x1191: 0x0080, + 0x1192: 0x0080, 0x1193: 0x0080, 0x1194: 0x0080, 0x1195: 0x0080, 0x1196: 0x0080, 0x1197: 0x0080, + 0x1198: 0x0080, 0x1199: 0x0080, + 0x11a0: 0x00c0, 0x11a1: 0x00c0, 0x11a2: 0x00c0, 0x11a3: 0x00c0, + 0x11a4: 0x00c0, 0x11a5: 0x00c0, 0x11a6: 0x00c0, 0x11a7: 0x00c0, 0x11a8: 0x00c0, 0x11a9: 0x00c0, + 0x11aa: 0x00c0, 0x11ab: 0x00c0, 0x11ac: 0x00c0, 0x11ad: 0x00c0, 0x11ae: 0x00c0, 0x11af: 0x00c0, + 0x11b0: 0x00c0, 0x11b1: 0x00c0, 0x11b2: 0x00c0, 0x11b3: 0x00c0, 0x11b4: 0x00c0, 0x11b5: 0x00c0, + 0x11b6: 0x00c0, 0x11b7: 0x00c0, 0x11b8: 0x00c0, 0x11b9: 0x00c0, 0x11ba: 0x00c0, 0x11bb: 0x00c0, + 0x11bc: 0x00c0, 0x11bd: 0x00c0, 0x11be: 0x00c0, 0x11bf: 0x00c0, + // Block 0x47, offset 0x11c0 + 0x11c0: 0x00c0, 0x11c1: 0x00c0, 0x11c2: 0x00c0, 0x11c3: 0x00c0, 0x11c4: 0x00c0, 0x11c5: 0x00c0, + 0x11c6: 0x00c0, 0x11c7: 0x00c0, 0x11c8: 0x00c0, 0x11c9: 0x00c0, 0x11ca: 0x00c0, 0x11cb: 0x00c0, + 0x11cc: 0x00c0, 0x11cd: 0x00c0, 0x11ce: 0x00c0, 0x11cf: 0x00c0, 0x11d0: 0x00c0, 0x11d1: 0x00c0, + 0x11d2: 0x00c0, 0x11d3: 0x00c0, 0x11d4: 0x00c0, 0x11d5: 0x00c0, 0x11d6: 0x00c0, 0x11d7: 0x00c0, + 0x11d8: 0x00c0, 0x11d9: 0x00c0, 0x11da: 0x00c0, 0x11db: 0x00c0, 0x11dc: 0x00c0, 0x11dd: 0x00c0, + 0x11de: 0x00c0, 0x11df: 0x00c0, 0x11e0: 0x00c0, 0x11e1: 0x00c0, 0x11e2: 0x00c0, 0x11e3: 0x00c0, + 0x11e4: 0x00c0, 0x11e5: 0x00c0, 0x11e6: 0x00c0, 0x11e7: 0x00c0, 0x11e8: 0x00c0, 0x11e9: 0x00c0, + 0x11ea: 0x00c0, 0x11eb: 0x00c0, 0x11ec: 0x00c0, 0x11ed: 0x00c0, 0x11ee: 0x00c0, 0x11ef: 0x00c0, + 0x11f0: 0x00c0, 0x11f1: 0x00c0, 0x11f2: 0x00c0, 0x11f3: 0x00c0, 0x11f4: 0x00c0, 0x11f5: 0x00c0, + 0x11f8: 0x00c0, 0x11f9: 0x00c0, 0x11fa: 0x00c0, 0x11fb: 0x00c0, + 0x11fc: 0x00c0, 0x11fd: 0x00c0, + // Block 0x48, offset 0x1200 + 0x1200: 0x0080, 0x1201: 0x00c0, 0x1202: 0x00c0, 0x1203: 0x00c0, 0x1204: 0x00c0, 0x1205: 0x00c0, + 0x1206: 0x00c0, 0x1207: 0x00c0, 0x1208: 0x00c0, 0x1209: 0x00c0, 0x120a: 0x00c0, 0x120b: 0x00c0, + 0x120c: 0x00c0, 0x120d: 0x00c0, 0x120e: 0x00c0, 0x120f: 0x00c0, 0x1210: 0x00c0, 0x1211: 0x00c0, + 0x1212: 0x00c0, 0x1213: 0x00c0, 0x1214: 0x00c0, 0x1215: 0x00c0, 0x1216: 0x00c0, 0x1217: 0x00c0, + 0x1218: 0x00c0, 0x1219: 0x00c0, 0x121a: 0x00c0, 0x121b: 0x00c0, 0x121c: 0x00c0, 0x121d: 0x00c0, + 0x121e: 0x00c0, 0x121f: 0x00c0, 0x1220: 0x00c0, 0x1221: 0x00c0, 0x1222: 0x00c0, 0x1223: 0x00c0, + 0x1224: 0x00c0, 0x1225: 0x00c0, 0x1226: 0x00c0, 0x1227: 0x00c0, 0x1228: 0x00c0, 0x1229: 0x00c0, + 0x122a: 0x00c0, 0x122b: 0x00c0, 0x122c: 0x00c0, 0x122d: 0x00c0, 0x122e: 0x00c0, 0x122f: 0x00c0, + 0x1230: 0x00c0, 0x1231: 0x00c0, 0x1232: 0x00c0, 0x1233: 0x00c0, 0x1234: 0x00c0, 0x1235: 0x00c0, + 0x1236: 0x00c0, 0x1237: 0x00c0, 0x1238: 0x00c0, 0x1239: 0x00c0, 0x123a: 0x00c0, 0x123b: 0x00c0, + 0x123c: 0x00c0, 0x123d: 0x00c0, 0x123e: 0x00c0, 0x123f: 0x00c0, + // Block 0x49, offset 0x1240 + 0x1240: 0x00c0, 0x1241: 0x00c0, 0x1242: 0x00c0, 0x1243: 0x00c0, 0x1244: 0x00c0, 0x1245: 0x00c0, + 0x1246: 0x00c0, 0x1247: 0x00c0, 0x1248: 0x00c0, 0x1249: 0x00c0, 0x124a: 0x00c0, 0x124b: 0x00c0, + 0x124c: 0x00c0, 0x124d: 0x00c0, 0x124e: 0x00c0, 0x124f: 0x00c0, 0x1250: 0x00c0, 0x1251: 0x00c0, + 0x1252: 0x00c0, 0x1253: 0x00c0, 0x1254: 0x00c0, 0x1255: 0x00c0, 0x1256: 0x00c0, 0x1257: 0x00c0, + 0x1258: 0x00c0, 0x1259: 0x00c0, 0x125a: 0x00c0, 0x125b: 0x00c0, 0x125c: 0x00c0, 0x125d: 0x00c0, + 0x125e: 0x00c0, 0x125f: 0x00c0, 0x1260: 0x00c0, 0x1261: 0x00c0, 0x1262: 0x00c0, 0x1263: 0x00c0, + 0x1264: 0x00c0, 0x1265: 0x00c0, 0x1266: 0x00c0, 0x1267: 0x00c0, 0x1268: 0x00c0, 0x1269: 0x00c0, + 0x126a: 0x00c0, 0x126b: 0x00c0, 0x126c: 0x00c0, 0x126d: 0x0080, 0x126e: 0x0080, 0x126f: 0x00c0, + 0x1270: 0x00c0, 0x1271: 0x00c0, 0x1272: 0x00c0, 0x1273: 0x00c0, 0x1274: 0x00c0, 0x1275: 0x00c0, + 0x1276: 0x00c0, 0x1277: 0x00c0, 0x1278: 0x00c0, 0x1279: 0x00c0, 0x127a: 0x00c0, 0x127b: 0x00c0, + 0x127c: 0x00c0, 0x127d: 0x00c0, 0x127e: 0x00c0, 0x127f: 0x00c0, + // Block 0x4a, offset 0x1280 + 0x1280: 0x0080, 0x1281: 0x00c0, 0x1282: 0x00c0, 0x1283: 0x00c0, 0x1284: 0x00c0, 0x1285: 0x00c0, + 0x1286: 0x00c0, 0x1287: 0x00c0, 0x1288: 0x00c0, 0x1289: 0x00c0, 0x128a: 0x00c0, 0x128b: 0x00c0, + 0x128c: 0x00c0, 0x128d: 0x00c0, 0x128e: 0x00c0, 0x128f: 0x00c0, 0x1290: 0x00c0, 0x1291: 0x00c0, + 0x1292: 0x00c0, 0x1293: 0x00c0, 0x1294: 0x00c0, 0x1295: 0x00c0, 0x1296: 0x00c0, 0x1297: 0x00c0, + 0x1298: 0x00c0, 0x1299: 0x00c0, 0x129a: 0x00c0, 0x129b: 0x0080, 0x129c: 0x0080, + 0x12a0: 0x00c0, 0x12a1: 0x00c0, 0x12a2: 0x00c0, 0x12a3: 0x00c0, + 0x12a4: 0x00c0, 0x12a5: 0x00c0, 0x12a6: 0x00c0, 0x12a7: 0x00c0, 0x12a8: 0x00c0, 0x12a9: 0x00c0, + 0x12aa: 0x00c0, 0x12ab: 0x00c0, 0x12ac: 0x00c0, 0x12ad: 0x00c0, 0x12ae: 0x00c0, 0x12af: 0x00c0, + 0x12b0: 0x00c0, 0x12b1: 0x00c0, 0x12b2: 0x00c0, 0x12b3: 0x00c0, 0x12b4: 0x00c0, 0x12b5: 0x00c0, + 0x12b6: 0x00c0, 0x12b7: 0x00c0, 0x12b8: 0x00c0, 0x12b9: 0x00c0, 0x12ba: 0x00c0, 0x12bb: 0x00c0, + 0x12bc: 0x00c0, 0x12bd: 0x00c0, 0x12be: 0x00c0, 0x12bf: 0x00c0, + // Block 0x4b, offset 0x12c0 + 0x12c0: 0x00c0, 0x12c1: 0x00c0, 0x12c2: 0x00c0, 0x12c3: 0x00c0, 0x12c4: 0x00c0, 0x12c5: 0x00c0, + 0x12c6: 0x00c0, 0x12c7: 0x00c0, 0x12c8: 0x00c0, 0x12c9: 0x00c0, 0x12ca: 0x00c0, 0x12cb: 0x00c0, + 0x12cc: 0x00c0, 0x12cd: 0x00c0, 0x12ce: 0x00c0, 0x12cf: 0x00c0, 0x12d0: 0x00c0, 0x12d1: 0x00c0, + 0x12d2: 0x00c0, 0x12d3: 0x00c0, 0x12d4: 0x00c0, 0x12d5: 0x00c0, 0x12d6: 0x00c0, 0x12d7: 0x00c0, + 0x12d8: 0x00c0, 0x12d9: 0x00c0, 0x12da: 0x00c0, 0x12db: 0x00c0, 0x12dc: 0x00c0, 0x12dd: 0x00c0, + 0x12de: 0x00c0, 0x12df: 0x00c0, 0x12e0: 0x00c0, 0x12e1: 0x00c0, 0x12e2: 0x00c0, 0x12e3: 0x00c0, + 0x12e4: 0x00c0, 0x12e5: 0x00c0, 0x12e6: 0x00c0, 0x12e7: 0x00c0, 0x12e8: 0x00c0, 0x12e9: 0x00c0, + 0x12ea: 0x00c0, 0x12eb: 0x0080, 0x12ec: 0x0080, 0x12ed: 0x0080, 0x12ee: 0x0080, 0x12ef: 0x0080, + 0x12f0: 0x0080, 0x12f1: 0x00c0, 0x12f2: 0x00c0, 0x12f3: 0x00c0, 0x12f4: 0x00c0, 0x12f5: 0x00c0, + 0x12f6: 0x00c0, 0x12f7: 0x00c0, 0x12f8: 0x00c0, + // Block 0x4c, offset 0x1300 + 0x1300: 0x00c0, 0x1301: 0x00c0, 0x1302: 0x00c0, 0x1303: 0x00c0, 0x1304: 0x00c0, 0x1305: 0x00c0, + 0x1306: 0x00c0, 0x1307: 0x00c0, 0x1308: 0x00c0, 0x1309: 0x00c0, 0x130a: 0x00c0, 0x130b: 0x00c0, + 0x130c: 0x00c0, 0x130e: 0x00c0, 0x130f: 0x00c0, 0x1310: 0x00c0, 0x1311: 0x00c0, + 0x1312: 0x00c3, 0x1313: 0x00c3, 0x1314: 0x00c6, + 0x1320: 0x00c0, 0x1321: 0x00c0, 0x1322: 0x00c0, 0x1323: 0x00c0, + 0x1324: 0x00c0, 0x1325: 0x00c0, 0x1326: 0x00c0, 0x1327: 0x00c0, 0x1328: 0x00c0, 0x1329: 0x00c0, + 0x132a: 0x00c0, 0x132b: 0x00c0, 0x132c: 0x00c0, 0x132d: 0x00c0, 0x132e: 0x00c0, 0x132f: 0x00c0, + 0x1330: 0x00c0, 0x1331: 0x00c0, 0x1332: 0x00c3, 0x1333: 0x00c3, 0x1334: 0x00c6, 0x1335: 0x0080, + 0x1336: 0x0080, + // Block 0x4d, offset 0x1340 + 0x1340: 0x00c0, 0x1341: 0x00c0, 0x1342: 0x00c0, 0x1343: 0x00c0, 0x1344: 0x00c0, 0x1345: 0x00c0, + 0x1346: 0x00c0, 0x1347: 0x00c0, 0x1348: 0x00c0, 0x1349: 0x00c0, 0x134a: 0x00c0, 0x134b: 0x00c0, + 0x134c: 0x00c0, 0x134d: 0x00c0, 0x134e: 0x00c0, 0x134f: 0x00c0, 0x1350: 0x00c0, 0x1351: 0x00c0, + 0x1352: 0x00c3, 0x1353: 0x00c3, + 0x1360: 0x00c0, 0x1361: 0x00c0, 0x1362: 0x00c0, 0x1363: 0x00c0, + 0x1364: 0x00c0, 0x1365: 0x00c0, 0x1366: 0x00c0, 0x1367: 0x00c0, 0x1368: 0x00c0, 0x1369: 0x00c0, + 0x136a: 0x00c0, 0x136b: 0x00c0, 0x136c: 0x00c0, 0x136e: 0x00c0, 0x136f: 0x00c0, + 0x1370: 0x00c0, 0x1372: 0x00c3, 0x1373: 0x00c3, + // Block 0x4e, offset 0x1380 + 0x1380: 0x00c0, 0x1381: 0x00c0, 0x1382: 0x00c0, 0x1383: 0x00c0, 0x1384: 0x00c0, 0x1385: 0x00c0, + 0x1386: 0x00c0, 0x1387: 0x00c0, 0x1388: 0x00c0, 0x1389: 0x00c0, 0x138a: 0x00c0, 0x138b: 0x00c0, + 0x138c: 0x00c0, 0x138d: 0x00c0, 0x138e: 0x00c0, 0x138f: 0x00c0, 0x1390: 0x00c0, 0x1391: 0x00c0, + 0x1392: 0x00c0, 0x1393: 0x00c0, 0x1394: 0x00c0, 0x1395: 0x00c0, 0x1396: 0x00c0, 0x1397: 0x00c0, + 0x1398: 0x00c0, 0x1399: 0x00c0, 0x139a: 0x00c0, 0x139b: 0x00c0, 0x139c: 0x00c0, 0x139d: 0x00c0, + 0x139e: 0x00c0, 0x139f: 0x00c0, 0x13a0: 0x00c0, 0x13a1: 0x00c0, 0x13a2: 0x00c0, 0x13a3: 0x00c0, + 0x13a4: 0x00c0, 0x13a5: 0x00c0, 0x13a6: 0x00c0, 0x13a7: 0x00c0, 0x13a8: 0x00c0, 0x13a9: 0x00c0, + 0x13aa: 0x00c0, 0x13ab: 0x00c0, 0x13ac: 0x00c0, 0x13ad: 0x00c0, 0x13ae: 0x00c0, 0x13af: 0x00c0, + 0x13b0: 0x00c0, 0x13b1: 0x00c0, 0x13b2: 0x00c0, 0x13b3: 0x00c0, 0x13b4: 0x0040, 0x13b5: 0x0040, + 0x13b6: 0x00c0, 0x13b7: 0x00c3, 0x13b8: 0x00c3, 0x13b9: 0x00c3, 0x13ba: 0x00c3, 0x13bb: 0x00c3, + 0x13bc: 0x00c3, 0x13bd: 0x00c3, 0x13be: 0x00c0, 0x13bf: 0x00c0, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x00c0, 0x13c1: 0x00c0, 0x13c2: 0x00c0, 0x13c3: 0x00c0, 0x13c4: 0x00c0, 0x13c5: 0x00c0, + 0x13c6: 0x00c3, 0x13c7: 0x00c0, 0x13c8: 0x00c0, 0x13c9: 0x00c3, 0x13ca: 0x00c3, 0x13cb: 0x00c3, + 0x13cc: 0x00c3, 0x13cd: 0x00c3, 0x13ce: 0x00c3, 0x13cf: 0x00c3, 0x13d0: 0x00c3, 0x13d1: 0x00c3, + 0x13d2: 0x00c6, 0x13d3: 0x00c3, 0x13d4: 0x0080, 0x13d5: 0x0080, 0x13d6: 0x0080, 0x13d7: 0x00c0, + 0x13d8: 0x0080, 0x13d9: 0x0080, 0x13da: 0x0080, 0x13db: 0x0080, 0x13dc: 0x00c0, 0x13dd: 0x00c3, + 0x13e0: 0x00c0, 0x13e1: 0x00c0, 0x13e2: 0x00c0, 0x13e3: 0x00c0, + 0x13e4: 0x00c0, 0x13e5: 0x00c0, 0x13e6: 0x00c0, 0x13e7: 0x00c0, 0x13e8: 0x00c0, 0x13e9: 0x00c0, + 0x13f0: 0x0080, 0x13f1: 0x0080, 0x13f2: 0x0080, 0x13f3: 0x0080, 0x13f4: 0x0080, 0x13f5: 0x0080, + 0x13f6: 0x0080, 0x13f7: 0x0080, 0x13f8: 0x0080, 0x13f9: 0x0080, + // Block 0x50, offset 0x1400 + 0x1400: 0x0080, 0x1401: 0x0080, 0x1402: 0x0080, 0x1403: 0x0080, 0x1404: 0x0080, 0x1405: 0x0080, + 0x1406: 0x0080, 0x1407: 0x0082, 0x1408: 0x0080, 0x1409: 0x0080, 0x140a: 0x0080, 0x140b: 0x0040, + 0x140c: 0x0040, 0x140d: 0x0040, 0x140e: 0x0040, 0x1410: 0x00c0, 0x1411: 0x00c0, + 0x1412: 0x00c0, 0x1413: 0x00c0, 0x1414: 0x00c0, 0x1415: 0x00c0, 0x1416: 0x00c0, 0x1417: 0x00c0, + 0x1418: 0x00c0, 0x1419: 0x00c0, + 0x1420: 0x00c2, 0x1421: 0x00c2, 0x1422: 0x00c2, 0x1423: 0x00c2, + 0x1424: 0x00c2, 0x1425: 0x00c2, 0x1426: 0x00c2, 0x1427: 0x00c2, 0x1428: 0x00c2, 0x1429: 0x00c2, + 0x142a: 0x00c2, 0x142b: 0x00c2, 0x142c: 0x00c2, 0x142d: 0x00c2, 0x142e: 0x00c2, 0x142f: 0x00c2, + 0x1430: 0x00c2, 0x1431: 0x00c2, 0x1432: 0x00c2, 0x1433: 0x00c2, 0x1434: 0x00c2, 0x1435: 0x00c2, + 0x1436: 0x00c2, 0x1437: 0x00c2, 0x1438: 0x00c2, 0x1439: 0x00c2, 0x143a: 0x00c2, 0x143b: 0x00c2, + 0x143c: 0x00c2, 0x143d: 0x00c2, 0x143e: 0x00c2, 0x143f: 0x00c2, + // Block 0x51, offset 0x1440 + 0x1440: 0x00c2, 0x1441: 0x00c2, 0x1442: 0x00c2, 0x1443: 0x00c2, 0x1444: 0x00c2, 0x1445: 0x00c2, + 0x1446: 0x00c2, 0x1447: 0x00c2, 0x1448: 0x00c2, 0x1449: 0x00c2, 0x144a: 0x00c2, 0x144b: 0x00c2, + 0x144c: 0x00c2, 0x144d: 0x00c2, 0x144e: 0x00c2, 0x144f: 0x00c2, 0x1450: 0x00c2, 0x1451: 0x00c2, + 0x1452: 0x00c2, 0x1453: 0x00c2, 0x1454: 0x00c2, 0x1455: 0x00c2, 0x1456: 0x00c2, 0x1457: 0x00c2, + 0x1458: 0x00c2, 0x1459: 0x00c2, 0x145a: 0x00c2, 0x145b: 0x00c2, 0x145c: 0x00c2, 0x145d: 0x00c2, + 0x145e: 0x00c2, 0x145f: 0x00c2, 0x1460: 0x00c2, 0x1461: 0x00c2, 0x1462: 0x00c2, 0x1463: 0x00c2, + 0x1464: 0x00c2, 0x1465: 0x00c2, 0x1466: 0x00c2, 0x1467: 0x00c2, 0x1468: 0x00c2, 0x1469: 0x00c2, + 0x146a: 0x00c2, 0x146b: 0x00c2, 0x146c: 0x00c2, 0x146d: 0x00c2, 0x146e: 0x00c2, 0x146f: 0x00c2, + 0x1470: 0x00c2, 0x1471: 0x00c2, 0x1472: 0x00c2, 0x1473: 0x00c2, 0x1474: 0x00c2, 0x1475: 0x00c2, + 0x1476: 0x00c2, 0x1477: 0x00c2, + // Block 0x52, offset 0x1480 + 0x1480: 0x00c0, 0x1481: 0x00c0, 0x1482: 0x00c0, 0x1483: 0x00c0, 0x1484: 0x00c0, 0x1485: 0x00c3, + 0x1486: 0x00c3, 0x1487: 0x00c2, 0x1488: 0x00c2, 0x1489: 0x00c2, 0x148a: 0x00c2, 0x148b: 0x00c2, + 0x148c: 0x00c2, 0x148d: 0x00c2, 0x148e: 0x00c2, 0x148f: 0x00c2, 0x1490: 0x00c2, 0x1491: 0x00c2, + 0x1492: 0x00c2, 0x1493: 0x00c2, 0x1494: 0x00c2, 0x1495: 0x00c2, 0x1496: 0x00c2, 0x1497: 0x00c2, + 0x1498: 0x00c2, 0x1499: 0x00c2, 0x149a: 0x00c2, 0x149b: 0x00c2, 0x149c: 0x00c2, 0x149d: 0x00c2, + 0x149e: 0x00c2, 0x149f: 0x00c2, 0x14a0: 0x00c2, 0x14a1: 0x00c2, 0x14a2: 0x00c2, 0x14a3: 0x00c2, + 0x14a4: 0x00c2, 0x14a5: 0x00c2, 0x14a6: 0x00c2, 0x14a7: 0x00c2, 0x14a8: 0x00c2, 0x14a9: 0x00c3, + 0x14aa: 0x00c2, + 0x14b0: 0x00c0, 0x14b1: 0x00c0, 0x14b2: 0x00c0, 0x14b3: 0x00c0, 0x14b4: 0x00c0, 0x14b5: 0x00c0, + 0x14b6: 0x00c0, 0x14b7: 0x00c0, 0x14b8: 0x00c0, 0x14b9: 0x00c0, 0x14ba: 0x00c0, 0x14bb: 0x00c0, + 0x14bc: 0x00c0, 0x14bd: 0x00c0, 0x14be: 0x00c0, 0x14bf: 0x00c0, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x00c0, 0x14c1: 0x00c0, 0x14c2: 0x00c0, 0x14c3: 0x00c0, 0x14c4: 0x00c0, 0x14c5: 0x00c0, + 0x14c6: 0x00c0, 0x14c7: 0x00c0, 0x14c8: 0x00c0, 0x14c9: 0x00c0, 0x14ca: 0x00c0, 0x14cb: 0x00c0, + 0x14cc: 0x00c0, 0x14cd: 0x00c0, 0x14ce: 0x00c0, 0x14cf: 0x00c0, 0x14d0: 0x00c0, 0x14d1: 0x00c0, + 0x14d2: 0x00c0, 0x14d3: 0x00c0, 0x14d4: 0x00c0, 0x14d5: 0x00c0, 0x14d6: 0x00c0, 0x14d7: 0x00c0, + 0x14d8: 0x00c0, 0x14d9: 0x00c0, 0x14da: 0x00c0, 0x14db: 0x00c0, 0x14dc: 0x00c0, 0x14dd: 0x00c0, + 0x14de: 0x00c0, 0x14df: 0x00c0, 0x14e0: 0x00c0, 0x14e1: 0x00c0, 0x14e2: 0x00c0, 0x14e3: 0x00c0, + 0x14e4: 0x00c0, 0x14e5: 0x00c0, 0x14e6: 0x00c0, 0x14e7: 0x00c0, 0x14e8: 0x00c0, 0x14e9: 0x00c0, + 0x14ea: 0x00c0, 0x14eb: 0x00c0, 0x14ec: 0x00c0, 0x14ed: 0x00c0, 0x14ee: 0x00c0, 0x14ef: 0x00c0, + 0x14f0: 0x00c0, 0x14f1: 0x00c0, 0x14f2: 0x00c0, 0x14f3: 0x00c0, 0x14f4: 0x00c0, 0x14f5: 0x00c0, + // Block 0x54, offset 0x1500 + 0x1500: 0x00c0, 0x1501: 0x00c0, 0x1502: 0x00c0, 0x1503: 0x00c0, 0x1504: 0x00c0, 0x1505: 0x00c0, + 0x1506: 0x00c0, 0x1507: 0x00c0, 0x1508: 0x00c0, 0x1509: 0x00c0, 0x150a: 0x00c0, 0x150b: 0x00c0, + 0x150c: 0x00c0, 0x150d: 0x00c0, 0x150e: 0x00c0, 0x150f: 0x00c0, 0x1510: 0x00c0, 0x1511: 0x00c0, + 0x1512: 0x00c0, 0x1513: 0x00c0, 0x1514: 0x00c0, 0x1515: 0x00c0, 0x1516: 0x00c0, 0x1517: 0x00c0, + 0x1518: 0x00c0, 0x1519: 0x00c0, 0x151a: 0x00c0, 0x151b: 0x00c0, 0x151c: 0x00c0, 0x151d: 0x00c0, + 0x151e: 0x00c0, 0x1520: 0x00c3, 0x1521: 0x00c3, 0x1522: 0x00c3, 0x1523: 0x00c0, + 0x1524: 0x00c0, 0x1525: 0x00c0, 0x1526: 0x00c0, 0x1527: 0x00c3, 0x1528: 0x00c3, 0x1529: 0x00c0, + 0x152a: 0x00c0, 0x152b: 0x00c0, + 0x1530: 0x00c0, 0x1531: 0x00c0, 0x1532: 0x00c3, 0x1533: 0x00c0, 0x1534: 0x00c0, 0x1535: 0x00c0, + 0x1536: 0x00c0, 0x1537: 0x00c0, 0x1538: 0x00c0, 0x1539: 0x00c3, 0x153a: 0x00c3, 0x153b: 0x00c3, + // Block 0x55, offset 0x1540 + 0x1540: 0x0080, 0x1544: 0x0080, 0x1545: 0x0080, + 0x1546: 0x00c0, 0x1547: 0x00c0, 0x1548: 0x00c0, 0x1549: 0x00c0, 0x154a: 0x00c0, 0x154b: 0x00c0, + 0x154c: 0x00c0, 0x154d: 0x00c0, 0x154e: 0x00c0, 0x154f: 0x00c0, 0x1550: 0x00c0, 0x1551: 0x00c0, + 0x1552: 0x00c0, 0x1553: 0x00c0, 0x1554: 0x00c0, 0x1555: 0x00c0, 0x1556: 0x00c0, 0x1557: 0x00c0, + 0x1558: 0x00c0, 0x1559: 0x00c0, 0x155a: 0x00c0, 0x155b: 0x00c0, 0x155c: 0x00c0, 0x155d: 0x00c0, + 0x155e: 0x00c0, 0x155f: 0x00c0, 0x1560: 0x00c0, 0x1561: 0x00c0, 0x1562: 0x00c0, 0x1563: 0x00c0, + 0x1564: 0x00c0, 0x1565: 0x00c0, 0x1566: 0x00c0, 0x1567: 0x00c0, 0x1568: 0x00c0, 0x1569: 0x00c0, + 0x156a: 0x00c0, 0x156b: 0x00c0, 0x156c: 0x00c0, 0x156d: 0x00c0, + 0x1570: 0x00c0, 0x1571: 0x00c0, 0x1572: 0x00c0, 0x1573: 0x00c0, 0x1574: 0x00c0, + // Block 0x56, offset 0x1580 + 0x1580: 0x00c0, 0x1581: 0x00c0, 0x1582: 0x00c0, 0x1583: 0x00c0, 0x1584: 0x00c0, 0x1585: 0x00c0, + 0x1586: 0x00c0, 0x1587: 0x00c0, 0x1588: 0x00c0, 0x1589: 0x00c0, 0x158a: 0x00c0, 0x158b: 0x00c0, + 0x158c: 0x00c0, 0x158d: 0x00c0, 0x158e: 0x00c0, 0x158f: 0x00c0, 0x1590: 0x00c0, 0x1591: 0x00c0, + 0x1592: 0x00c0, 0x1593: 0x00c0, 0x1594: 0x00c0, 0x1595: 0x00c0, 0x1596: 0x00c0, 0x1597: 0x00c0, + 0x1598: 0x00c0, 0x1599: 0x00c0, 0x159a: 0x00c0, 0x159b: 0x00c0, 0x159c: 0x00c0, 0x159d: 0x00c0, + 0x159e: 0x00c0, 0x159f: 0x00c0, 0x15a0: 0x00c0, 0x15a1: 0x00c0, 0x15a2: 0x00c0, 0x15a3: 0x00c0, + 0x15a4: 0x00c0, 0x15a5: 0x00c0, 0x15a6: 0x00c0, 0x15a7: 0x00c0, 0x15a8: 0x00c0, 0x15a9: 0x00c0, + 0x15aa: 0x00c0, 0x15ab: 0x00c0, + 0x15b0: 0x00c0, 0x15b1: 0x00c0, 0x15b2: 0x00c0, 0x15b3: 0x00c0, 0x15b4: 0x00c0, 0x15b5: 0x00c0, + 0x15b6: 0x00c0, 0x15b7: 0x00c0, 0x15b8: 0x00c0, 0x15b9: 0x00c0, 0x15ba: 0x00c0, 0x15bb: 0x00c0, + 0x15bc: 0x00c0, 0x15bd: 0x00c0, 0x15be: 0x00c0, 0x15bf: 0x00c0, + // Block 0x57, offset 0x15c0 + 0x15c0: 0x00c0, 0x15c1: 0x00c0, 0x15c2: 0x00c0, 0x15c3: 0x00c0, 0x15c4: 0x00c0, 0x15c5: 0x00c0, + 0x15c6: 0x00c0, 0x15c7: 0x00c0, 0x15c8: 0x00c0, 0x15c9: 0x00c0, + 0x15d0: 0x00c0, 0x15d1: 0x00c0, + 0x15d2: 0x00c0, 0x15d3: 0x00c0, 0x15d4: 0x00c0, 0x15d5: 0x00c0, 0x15d6: 0x00c0, 0x15d7: 0x00c0, + 0x15d8: 0x00c0, 0x15d9: 0x00c0, 0x15da: 0x0080, + 0x15de: 0x0080, 0x15df: 0x0080, 0x15e0: 0x0080, 0x15e1: 0x0080, 0x15e2: 0x0080, 0x15e3: 0x0080, + 0x15e4: 0x0080, 0x15e5: 0x0080, 0x15e6: 0x0080, 0x15e7: 0x0080, 0x15e8: 0x0080, 0x15e9: 0x0080, + 0x15ea: 0x0080, 0x15eb: 0x0080, 0x15ec: 0x0080, 0x15ed: 0x0080, 0x15ee: 0x0080, 0x15ef: 0x0080, + 0x15f0: 0x0080, 0x15f1: 0x0080, 0x15f2: 0x0080, 0x15f3: 0x0080, 0x15f4: 0x0080, 0x15f5: 0x0080, + 0x15f6: 0x0080, 0x15f7: 0x0080, 0x15f8: 0x0080, 0x15f9: 0x0080, 0x15fa: 0x0080, 0x15fb: 0x0080, + 0x15fc: 0x0080, 0x15fd: 0x0080, 0x15fe: 0x0080, 0x15ff: 0x0080, + // Block 0x58, offset 0x1600 + 0x1600: 0x00c0, 0x1601: 0x00c0, 0x1602: 0x00c0, 0x1603: 0x00c0, 0x1604: 0x00c0, 0x1605: 0x00c0, + 0x1606: 0x00c0, 0x1607: 0x00c0, 0x1608: 0x00c0, 0x1609: 0x00c0, 0x160a: 0x00c0, 0x160b: 0x00c0, + 0x160c: 0x00c0, 0x160d: 0x00c0, 0x160e: 0x00c0, 0x160f: 0x00c0, 0x1610: 0x00c0, 0x1611: 0x00c0, + 0x1612: 0x00c0, 0x1613: 0x00c0, 0x1614: 0x00c0, 0x1615: 0x00c0, 0x1616: 0x00c0, 0x1617: 0x00c3, + 0x1618: 0x00c3, 0x1619: 0x00c0, 0x161a: 0x00c0, 0x161b: 0x00c3, + 0x161e: 0x0080, 0x161f: 0x0080, 0x1620: 0x00c0, 0x1621: 0x00c0, 0x1622: 0x00c0, 0x1623: 0x00c0, + 0x1624: 0x00c0, 0x1625: 0x00c0, 0x1626: 0x00c0, 0x1627: 0x00c0, 0x1628: 0x00c0, 0x1629: 0x00c0, + 0x162a: 0x00c0, 0x162b: 0x00c0, 0x162c: 0x00c0, 0x162d: 0x00c0, 0x162e: 0x00c0, 0x162f: 0x00c0, + 0x1630: 0x00c0, 0x1631: 0x00c0, 0x1632: 0x00c0, 0x1633: 0x00c0, 0x1634: 0x00c0, 0x1635: 0x00c0, + 0x1636: 0x00c0, 0x1637: 0x00c0, 0x1638: 0x00c0, 0x1639: 0x00c0, 0x163a: 0x00c0, 0x163b: 0x00c0, + 0x163c: 0x00c0, 0x163d: 0x00c0, 0x163e: 0x00c0, 0x163f: 0x00c0, + // Block 0x59, offset 0x1640 + 0x1640: 0x00c0, 0x1641: 0x00c0, 0x1642: 0x00c0, 0x1643: 0x00c0, 0x1644: 0x00c0, 0x1645: 0x00c0, + 0x1646: 0x00c0, 0x1647: 0x00c0, 0x1648: 0x00c0, 0x1649: 0x00c0, 0x164a: 0x00c0, 0x164b: 0x00c0, + 0x164c: 0x00c0, 0x164d: 0x00c0, 0x164e: 0x00c0, 0x164f: 0x00c0, 0x1650: 0x00c0, 0x1651: 0x00c0, + 0x1652: 0x00c0, 0x1653: 0x00c0, 0x1654: 0x00c0, 0x1655: 0x00c0, 0x1656: 0x00c3, 0x1657: 0x00c0, + 0x1658: 0x00c3, 0x1659: 0x00c3, 0x165a: 0x00c3, 0x165b: 0x00c3, 0x165c: 0x00c3, 0x165d: 0x00c3, + 0x165e: 0x00c3, 0x1660: 0x00c6, 0x1661: 0x00c0, 0x1662: 0x00c3, 0x1663: 0x00c0, + 0x1664: 0x00c0, 0x1665: 0x00c3, 0x1666: 0x00c3, 0x1667: 0x00c3, 0x1668: 0x00c3, 0x1669: 0x00c3, + 0x166a: 0x00c3, 0x166b: 0x00c3, 0x166c: 0x00c3, 0x166d: 0x00c0, 0x166e: 0x00c0, 0x166f: 0x00c0, + 0x1670: 0x00c0, 0x1671: 0x00c0, 0x1672: 0x00c0, 0x1673: 0x00c3, 0x1674: 0x00c3, 0x1675: 0x00c3, + 0x1676: 0x00c3, 0x1677: 0x00c3, 0x1678: 0x00c3, 0x1679: 0x00c3, 0x167a: 0x00c3, 0x167b: 0x00c3, + 0x167c: 0x00c3, 0x167f: 0x00c3, + // Block 0x5a, offset 0x1680 + 0x1680: 0x00c0, 0x1681: 0x00c0, 0x1682: 0x00c0, 0x1683: 0x00c0, 0x1684: 0x00c0, 0x1685: 0x00c0, + 0x1686: 0x00c0, 0x1687: 0x00c0, 0x1688: 0x00c0, 0x1689: 0x00c0, + 0x1690: 0x00c0, 0x1691: 0x00c0, + 0x1692: 0x00c0, 0x1693: 0x00c0, 0x1694: 0x00c0, 0x1695: 0x00c0, 0x1696: 0x00c0, 0x1697: 0x00c0, + 0x1698: 0x00c0, 0x1699: 0x00c0, + 0x16a0: 0x0080, 0x16a1: 0x0080, 0x16a2: 0x0080, 0x16a3: 0x0080, + 0x16a4: 0x0080, 0x16a5: 0x0080, 0x16a6: 0x0080, 0x16a7: 0x00c0, 0x16a8: 0x0080, 0x16a9: 0x0080, + 0x16aa: 0x0080, 0x16ab: 0x0080, 0x16ac: 0x0080, 0x16ad: 0x0080, + 0x16b0: 0x00c3, 0x16b1: 0x00c3, 0x16b2: 0x00c3, 0x16b3: 0x00c3, 0x16b4: 0x00c3, 0x16b5: 0x00c3, + 0x16b6: 0x00c3, 0x16b7: 0x00c3, 0x16b8: 0x00c3, 0x16b9: 0x00c3, 0x16ba: 0x00c3, 0x16bb: 0x00c3, + 0x16bc: 0x00c3, 0x16bd: 0x00c3, 0x16be: 0x0083, + // Block 0x5b, offset 0x16c0 + 0x16c0: 0x00c3, 0x16c1: 0x00c3, 0x16c2: 0x00c3, 0x16c3: 0x00c3, 0x16c4: 0x00c0, 0x16c5: 0x00c0, + 0x16c6: 0x00c0, 0x16c7: 0x00c0, 0x16c8: 0x00c0, 0x16c9: 0x00c0, 0x16ca: 0x00c0, 0x16cb: 0x00c0, + 0x16cc: 0x00c0, 0x16cd: 0x00c0, 0x16ce: 0x00c0, 0x16cf: 0x00c0, 0x16d0: 0x00c0, 0x16d1: 0x00c0, + 0x16d2: 0x00c0, 0x16d3: 0x00c0, 0x16d4: 0x00c0, 0x16d5: 0x00c0, 0x16d6: 0x00c0, 0x16d7: 0x00c0, + 0x16d8: 0x00c0, 0x16d9: 0x00c0, 0x16da: 0x00c0, 0x16db: 0x00c0, 0x16dc: 0x00c0, 0x16dd: 0x00c0, + 0x16de: 0x00c0, 0x16df: 0x00c0, 0x16e0: 0x00c0, 0x16e1: 0x00c0, 0x16e2: 0x00c0, 0x16e3: 0x00c0, + 0x16e4: 0x00c0, 0x16e5: 0x00c0, 0x16e6: 0x00c0, 0x16e7: 0x00c0, 0x16e8: 0x00c0, 0x16e9: 0x00c0, + 0x16ea: 0x00c0, 0x16eb: 0x00c0, 0x16ec: 0x00c0, 0x16ed: 0x00c0, 0x16ee: 0x00c0, 0x16ef: 0x00c0, + 0x16f0: 0x00c0, 0x16f1: 0x00c0, 0x16f2: 0x00c0, 0x16f3: 0x00c0, 0x16f4: 0x00c3, 0x16f5: 0x00c0, + 0x16f6: 0x00c3, 0x16f7: 0x00c3, 0x16f8: 0x00c3, 0x16f9: 0x00c3, 0x16fa: 0x00c3, 0x16fb: 0x00c0, + 0x16fc: 0x00c3, 0x16fd: 0x00c0, 0x16fe: 0x00c0, 0x16ff: 0x00c0, + // Block 0x5c, offset 0x1700 + 0x1700: 0x00c0, 0x1701: 0x00c0, 0x1702: 0x00c3, 0x1703: 0x00c0, 0x1704: 0x00c5, 0x1705: 0x00c0, + 0x1706: 0x00c0, 0x1707: 0x00c0, 0x1708: 0x00c0, 0x1709: 0x00c0, 0x170a: 0x00c0, 0x170b: 0x00c0, + 0x1710: 0x00c0, 0x1711: 0x00c0, + 0x1712: 0x00c0, 0x1713: 0x00c0, 0x1714: 0x00c0, 0x1715: 0x00c0, 0x1716: 0x00c0, 0x1717: 0x00c0, + 0x1718: 0x00c0, 0x1719: 0x00c0, 0x171a: 0x0080, 0x171b: 0x0080, 0x171c: 0x0080, 0x171d: 0x0080, + 0x171e: 0x0080, 0x171f: 0x0080, 0x1720: 0x0080, 0x1721: 0x0080, 0x1722: 0x0080, 0x1723: 0x0080, + 0x1724: 0x0080, 0x1725: 0x0080, 0x1726: 0x0080, 0x1727: 0x0080, 0x1728: 0x0080, 0x1729: 0x0080, + 0x172a: 0x0080, 0x172b: 0x00c3, 0x172c: 0x00c3, 0x172d: 0x00c3, 0x172e: 0x00c3, 0x172f: 0x00c3, + 0x1730: 0x00c3, 0x1731: 0x00c3, 0x1732: 0x00c3, 0x1733: 0x00c3, 0x1734: 0x0080, 0x1735: 0x0080, + 0x1736: 0x0080, 0x1737: 0x0080, 0x1738: 0x0080, 0x1739: 0x0080, 0x173a: 0x0080, 0x173b: 0x0080, + 0x173c: 0x0080, + // Block 0x5d, offset 0x1740 + 0x1740: 0x00c3, 0x1741: 0x00c3, 0x1742: 0x00c0, 0x1743: 0x00c0, 0x1744: 0x00c0, 0x1745: 0x00c0, + 0x1746: 0x00c0, 0x1747: 0x00c0, 0x1748: 0x00c0, 0x1749: 0x00c0, 0x174a: 0x00c0, 0x174b: 0x00c0, + 0x174c: 0x00c0, 0x174d: 0x00c0, 0x174e: 0x00c0, 0x174f: 0x00c0, 0x1750: 0x00c0, 0x1751: 0x00c0, + 0x1752: 0x00c0, 0x1753: 0x00c0, 0x1754: 0x00c0, 0x1755: 0x00c0, 0x1756: 0x00c0, 0x1757: 0x00c0, + 0x1758: 0x00c0, 0x1759: 0x00c0, 0x175a: 0x00c0, 0x175b: 0x00c0, 0x175c: 0x00c0, 0x175d: 0x00c0, + 0x175e: 0x00c0, 0x175f: 0x00c0, 0x1760: 0x00c0, 0x1761: 0x00c0, 0x1762: 0x00c3, 0x1763: 0x00c3, + 0x1764: 0x00c3, 0x1765: 0x00c3, 0x1766: 0x00c0, 0x1767: 0x00c0, 0x1768: 0x00c3, 0x1769: 0x00c3, + 0x176a: 0x00c5, 0x176b: 0x00c6, 0x176c: 0x00c3, 0x176d: 0x00c3, 0x176e: 0x00c0, 0x176f: 0x00c0, + 0x1770: 0x00c0, 0x1771: 0x00c0, 0x1772: 0x00c0, 0x1773: 0x00c0, 0x1774: 0x00c0, 0x1775: 0x00c0, + 0x1776: 0x00c0, 0x1777: 0x00c0, 0x1778: 0x00c0, 0x1779: 0x00c0, 0x177a: 0x00c0, 0x177b: 0x00c0, + 0x177c: 0x00c0, 0x177d: 0x00c0, 0x177e: 0x00c0, 0x177f: 0x00c0, + // Block 0x5e, offset 0x1780 + 0x1780: 0x00c0, 0x1781: 0x00c0, 0x1782: 0x00c0, 0x1783: 0x00c0, 0x1784: 0x00c0, 0x1785: 0x00c0, + 0x1786: 0x00c0, 0x1787: 0x00c0, 0x1788: 0x00c0, 0x1789: 0x00c0, 0x178a: 0x00c0, 0x178b: 0x00c0, + 0x178c: 0x00c0, 0x178d: 0x00c0, 0x178e: 0x00c0, 0x178f: 0x00c0, 0x1790: 0x00c0, 0x1791: 0x00c0, + 0x1792: 0x00c0, 0x1793: 0x00c0, 0x1794: 0x00c0, 0x1795: 0x00c0, 0x1796: 0x00c0, 0x1797: 0x00c0, + 0x1798: 0x00c0, 0x1799: 0x00c0, 0x179a: 0x00c0, 0x179b: 0x00c0, 0x179c: 0x00c0, 0x179d: 0x00c0, + 0x179e: 0x00c0, 0x179f: 0x00c0, 0x17a0: 0x00c0, 0x17a1: 0x00c0, 0x17a2: 0x00c0, 0x17a3: 0x00c0, + 0x17a4: 0x00c0, 0x17a5: 0x00c0, 0x17a6: 0x00c3, 0x17a7: 0x00c0, 0x17a8: 0x00c3, 0x17a9: 0x00c3, + 0x17aa: 0x00c0, 0x17ab: 0x00c0, 0x17ac: 0x00c0, 0x17ad: 0x00c3, 0x17ae: 0x00c0, 0x17af: 0x00c3, + 0x17b0: 0x00c3, 0x17b1: 0x00c3, 0x17b2: 0x00c5, 0x17b3: 0x00c5, + 0x17bc: 0x0080, 0x17bd: 0x0080, 0x17be: 0x0080, 0x17bf: 0x0080, + // Block 0x5f, offset 0x17c0 + 0x17c0: 0x00c0, 0x17c1: 0x00c0, 0x17c2: 0x00c0, 0x17c3: 0x00c0, 0x17c4: 0x00c0, 0x17c5: 0x00c0, + 0x17c6: 0x00c0, 0x17c7: 0x00c0, 0x17c8: 0x00c0, 0x17c9: 0x00c0, 0x17ca: 0x00c0, 0x17cb: 0x00c0, + 0x17cc: 0x00c0, 0x17cd: 0x00c0, 0x17ce: 0x00c0, 0x17cf: 0x00c0, 0x17d0: 0x00c0, 0x17d1: 0x00c0, + 0x17d2: 0x00c0, 0x17d3: 0x00c0, 0x17d4: 0x00c0, 0x17d5: 0x00c0, 0x17d6: 0x00c0, 0x17d7: 0x00c0, + 0x17d8: 0x00c0, 0x17d9: 0x00c0, 0x17da: 0x00c0, 0x17db: 0x00c0, 0x17dc: 0x00c0, 0x17dd: 0x00c0, + 0x17de: 0x00c0, 0x17df: 0x00c0, 0x17e0: 0x00c0, 0x17e1: 0x00c0, 0x17e2: 0x00c0, 0x17e3: 0x00c0, + 0x17e4: 0x00c0, 0x17e5: 0x00c0, 0x17e6: 0x00c0, 0x17e7: 0x00c0, 0x17e8: 0x00c0, 0x17e9: 0x00c0, + 0x17ea: 0x00c0, 0x17eb: 0x00c0, 0x17ec: 0x00c3, 0x17ed: 0x00c3, 0x17ee: 0x00c3, 0x17ef: 0x00c3, + 0x17f0: 0x00c3, 0x17f1: 0x00c3, 0x17f2: 0x00c3, 0x17f3: 0x00c3, 0x17f4: 0x00c0, 0x17f5: 0x00c0, + 0x17f6: 0x00c3, 0x17f7: 0x00c3, 0x17fb: 0x0080, + 0x17fc: 0x0080, 0x17fd: 0x0080, 0x17fe: 0x0080, 0x17ff: 0x0080, + // Block 0x60, offset 0x1800 + 0x1800: 0x00c0, 0x1801: 0x00c0, 0x1802: 0x00c0, 0x1803: 0x00c0, 0x1804: 0x00c0, 0x1805: 0x00c0, + 0x1806: 0x00c0, 0x1807: 0x00c0, 0x1808: 0x00c0, 0x1809: 0x00c0, + 0x180d: 0x00c0, 0x180e: 0x00c0, 0x180f: 0x00c0, 0x1810: 0x00c0, 0x1811: 0x00c0, + 0x1812: 0x00c0, 0x1813: 0x00c0, 0x1814: 0x00c0, 0x1815: 0x00c0, 0x1816: 0x00c0, 0x1817: 0x00c0, + 0x1818: 0x00c0, 0x1819: 0x00c0, 0x181a: 0x00c0, 0x181b: 0x00c0, 0x181c: 0x00c0, 0x181d: 0x00c0, + 0x181e: 0x00c0, 0x181f: 0x00c0, 0x1820: 0x00c0, 0x1821: 0x00c0, 0x1822: 0x00c0, 0x1823: 0x00c0, + 0x1824: 0x00c0, 0x1825: 0x00c0, 0x1826: 0x00c0, 0x1827: 0x00c0, 0x1828: 0x00c0, 0x1829: 0x00c0, + 0x182a: 0x00c0, 0x182b: 0x00c0, 0x182c: 0x00c0, 0x182d: 0x00c0, 0x182e: 0x00c0, 0x182f: 0x00c0, + 0x1830: 0x00c0, 0x1831: 0x00c0, 0x1832: 0x00c0, 0x1833: 0x00c0, 0x1834: 0x00c0, 0x1835: 0x00c0, + 0x1836: 0x00c0, 0x1837: 0x00c0, 0x1838: 0x00c0, 0x1839: 0x00c0, 0x183a: 0x00c0, 0x183b: 0x00c0, + 0x183c: 0x00c0, 0x183d: 0x00c0, 0x183e: 0x0080, 0x183f: 0x0080, + // Block 0x61, offset 0x1840 + 0x1840: 0x00c0, 0x1841: 0x00c0, 0x1842: 0x00c0, 0x1843: 0x00c0, 0x1844: 0x00c0, 0x1845: 0x00c0, + 0x1846: 0x00c0, 0x1847: 0x00c0, 0x1848: 0x00c0, + // Block 0x62, offset 0x1880 + 0x1880: 0x0080, 0x1881: 0x0080, 0x1882: 0x0080, 0x1883: 0x0080, 0x1884: 0x0080, 0x1885: 0x0080, + 0x1886: 0x0080, 0x1887: 0x0080, + 0x1890: 0x00c3, 0x1891: 0x00c3, + 0x1892: 0x00c3, 0x1893: 0x0080, 0x1894: 0x00c3, 0x1895: 0x00c3, 0x1896: 0x00c3, 0x1897: 0x00c3, + 0x1898: 0x00c3, 0x1899: 0x00c3, 0x189a: 0x00c3, 0x189b: 0x00c3, 0x189c: 0x00c3, 0x189d: 0x00c3, + 0x189e: 0x00c3, 0x189f: 0x00c3, 0x18a0: 0x00c3, 0x18a1: 0x00c0, 0x18a2: 0x00c3, 0x18a3: 0x00c3, + 0x18a4: 0x00c3, 0x18a5: 0x00c3, 0x18a6: 0x00c3, 0x18a7: 0x00c3, 0x18a8: 0x00c3, 0x18a9: 0x00c0, + 0x18aa: 0x00c0, 0x18ab: 0x00c0, 0x18ac: 0x00c0, 0x18ad: 0x00c3, 0x18ae: 0x00c0, 0x18af: 0x00c0, + 0x18b0: 0x00c0, 0x18b1: 0x00c0, 0x18b2: 0x00c0, 0x18b3: 0x00c0, 0x18b4: 0x00c3, 0x18b5: 0x00c0, + 0x18b6: 0x00c0, 0x18b7: 0x00c0, 0x18b8: 0x00c3, 0x18b9: 0x00c3, + // Block 0x63, offset 0x18c0 + 0x18c0: 0x00c0, 0x18c1: 0x00c0, 0x18c2: 0x00c0, 0x18c3: 0x00c0, 0x18c4: 0x00c0, 0x18c5: 0x00c0, + 0x18c6: 0x00c0, 0x18c7: 0x00c0, 0x18c8: 0x00c0, 0x18c9: 0x00c0, 0x18ca: 0x00c0, 0x18cb: 0x00c0, + 0x18cc: 0x00c0, 0x18cd: 0x00c0, 0x18ce: 0x00c0, 0x18cf: 0x00c0, 0x18d0: 0x00c0, 0x18d1: 0x00c0, + 0x18d2: 0x00c0, 0x18d3: 0x00c0, 0x18d4: 0x00c0, 0x18d5: 0x00c0, 0x18d6: 0x00c0, 0x18d7: 0x00c0, + 0x18d8: 0x00c0, 0x18d9: 0x00c0, 0x18da: 0x00c0, 0x18db: 0x00c0, 0x18dc: 0x00c0, 0x18dd: 0x00c0, + 0x18de: 0x00c0, 0x18df: 0x00c0, 0x18e0: 0x00c0, 0x18e1: 0x00c0, 0x18e2: 0x00c0, 0x18e3: 0x00c0, + 0x18e4: 0x00c0, 0x18e5: 0x00c0, 0x18e6: 0x00c8, 0x18e7: 0x00c8, 0x18e8: 0x00c8, 0x18e9: 0x00c8, + 0x18ea: 0x00c8, 0x18eb: 0x00c0, 0x18ec: 0x0080, 0x18ed: 0x0080, 0x18ee: 0x0080, 0x18ef: 0x00c0, + 0x18f0: 0x0080, 0x18f1: 0x0080, 0x18f2: 0x0080, 0x18f3: 0x0080, 0x18f4: 0x0080, 0x18f5: 0x0080, + 0x18f6: 0x0080, 0x18f7: 0x0080, 0x18f8: 0x0080, 0x18f9: 0x0080, 0x18fa: 0x0080, 0x18fb: 0x00c0, + 0x18fc: 0x0080, 0x18fd: 0x0080, 0x18fe: 0x0080, 0x18ff: 0x0080, + // Block 0x64, offset 0x1900 + 0x1900: 0x0080, 0x1901: 0x0080, 0x1902: 0x0080, 0x1903: 0x0080, 0x1904: 0x0080, 0x1905: 0x0080, + 0x1906: 0x0080, 0x1907: 0x0080, 0x1908: 0x0080, 0x1909: 0x0080, 0x190a: 0x0080, 0x190b: 0x0080, + 0x190c: 0x0080, 0x190d: 0x0080, 0x190e: 0x00c0, 0x190f: 0x0080, 0x1910: 0x0080, 0x1911: 0x0080, + 0x1912: 0x0080, 0x1913: 0x0080, 0x1914: 0x0080, 0x1915: 0x0080, 0x1916: 0x0080, 0x1917: 0x0080, + 0x1918: 0x0080, 0x1919: 0x0080, 0x191a: 0x0080, 0x191b: 0x0080, 0x191c: 0x0080, 0x191d: 0x0088, + 0x191e: 0x0088, 0x191f: 0x0088, 0x1920: 0x0088, 0x1921: 0x0088, 0x1922: 0x0080, 0x1923: 0x0080, + 0x1924: 0x0080, 0x1925: 0x0080, 0x1926: 0x0088, 0x1927: 0x0088, 0x1928: 0x0088, 0x1929: 0x0088, + 0x192a: 0x0088, 0x192b: 0x00c0, 0x192c: 0x00c0, 0x192d: 0x00c0, 0x192e: 0x00c0, 0x192f: 0x00c0, + 0x1930: 0x00c0, 0x1931: 0x00c0, 0x1932: 0x00c0, 0x1933: 0x00c0, 0x1934: 0x00c0, 0x1935: 0x00c0, + 0x1936: 0x00c0, 0x1937: 0x00c0, 0x1938: 0x0080, 0x1939: 0x00c0, 0x193a: 0x00c0, 0x193b: 0x00c0, + 0x193c: 0x00c0, 0x193d: 0x00c0, 0x193e: 0x00c0, 0x193f: 0x00c0, + // Block 0x65, offset 0x1940 + 0x1940: 0x00c0, 0x1941: 0x00c0, 0x1942: 0x00c0, 0x1943: 0x00c0, 0x1944: 0x00c0, 0x1945: 0x00c0, + 0x1946: 0x00c0, 0x1947: 0x00c0, 0x1948: 0x00c0, 0x1949: 0x00c0, 0x194a: 0x00c0, 0x194b: 0x00c0, + 0x194c: 0x00c0, 0x194d: 0x00c0, 0x194e: 0x00c0, 0x194f: 0x00c0, 0x1950: 0x00c0, 0x1951: 0x00c0, + 0x1952: 0x00c0, 0x1953: 0x00c0, 0x1954: 0x00c0, 0x1955: 0x00c0, 0x1956: 0x00c0, 0x1957: 0x00c0, + 0x1958: 0x00c0, 0x1959: 0x00c0, 0x195a: 0x00c0, 0x195b: 0x0080, 0x195c: 0x0080, 0x195d: 0x0080, + 0x195e: 0x0080, 0x195f: 0x0080, 0x1960: 0x0080, 0x1961: 0x0080, 0x1962: 0x0080, 0x1963: 0x0080, + 0x1964: 0x0080, 0x1965: 0x0080, 0x1966: 0x0080, 0x1967: 0x0080, 0x1968: 0x0080, 0x1969: 0x0080, + 0x196a: 0x0080, 0x196b: 0x0080, 0x196c: 0x0080, 0x196d: 0x0080, 0x196e: 0x0080, 0x196f: 0x0080, + 0x1970: 0x0080, 0x1971: 0x0080, 0x1972: 0x0080, 0x1973: 0x0080, 0x1974: 0x0080, 0x1975: 0x0080, + 0x1976: 0x0080, 0x1977: 0x0080, 0x1978: 0x0080, 0x1979: 0x0080, 0x197a: 0x0080, 0x197b: 0x0080, + 0x197c: 0x0080, 0x197d: 0x0080, 0x197e: 0x0080, 0x197f: 0x0088, + // Block 0x66, offset 0x1980 + 0x1980: 0x00c3, 0x1981: 0x00c3, 0x1982: 0x00c3, 0x1983: 0x00c3, 0x1984: 0x00c3, 0x1985: 0x00c3, + 0x1986: 0x00c3, 0x1987: 0x00c3, 0x1988: 0x00c3, 0x1989: 0x00c3, 0x198a: 0x00c3, 0x198b: 0x00c3, + 0x198c: 0x00c3, 0x198d: 0x00c3, 0x198e: 0x00c3, 0x198f: 0x00c3, 0x1990: 0x00c3, 0x1991: 0x00c3, + 0x1992: 0x00c3, 0x1993: 0x00c3, 0x1994: 0x00c3, 0x1995: 0x00c3, 0x1996: 0x00c3, 0x1997: 0x00c3, + 0x1998: 0x00c3, 0x1999: 0x00c3, 0x199a: 0x00c3, 0x199b: 0x00c3, 0x199c: 0x00c3, 0x199d: 0x00c3, + 0x199e: 0x00c3, 0x199f: 0x00c3, 0x19a0: 0x00c3, 0x19a1: 0x00c3, 0x19a2: 0x00c3, 0x19a3: 0x00c3, + 0x19a4: 0x00c3, 0x19a5: 0x00c3, 0x19a6: 0x00c3, 0x19a7: 0x00c3, 0x19a8: 0x00c3, 0x19a9: 0x00c3, + 0x19aa: 0x00c3, 0x19ab: 0x00c3, 0x19ac: 0x00c3, 0x19ad: 0x00c3, 0x19ae: 0x00c3, 0x19af: 0x00c3, + 0x19b0: 0x00c3, 0x19b1: 0x00c3, 0x19b2: 0x00c3, 0x19b3: 0x00c3, 0x19b4: 0x00c3, 0x19b5: 0x00c3, + 0x19b6: 0x00c3, 0x19b7: 0x00c3, 0x19b8: 0x00c3, 0x19b9: 0x00c3, 0x19bb: 0x00c3, + 0x19bc: 0x00c3, 0x19bd: 0x00c3, 0x19be: 0x00c3, 0x19bf: 0x00c3, + // Block 0x67, offset 0x19c0 + 0x19c0: 0x00c0, 0x19c1: 0x00c0, 0x19c2: 0x00c0, 0x19c3: 0x00c0, 0x19c4: 0x00c0, 0x19c5: 0x00c0, + 0x19c6: 0x00c0, 0x19c7: 0x00c0, 0x19c8: 0x00c0, 0x19c9: 0x00c0, 0x19ca: 0x00c0, 0x19cb: 0x00c0, + 0x19cc: 0x00c0, 0x19cd: 0x00c0, 0x19ce: 0x00c0, 0x19cf: 0x00c0, 0x19d0: 0x00c0, 0x19d1: 0x00c0, + 0x19d2: 0x00c0, 0x19d3: 0x00c0, 0x19d4: 0x00c0, 0x19d5: 0x00c0, 0x19d6: 0x00c0, 0x19d7: 0x00c0, + 0x19d8: 0x00c0, 0x19d9: 0x00c0, 0x19da: 0x0080, 0x19db: 0x0080, 0x19dc: 0x00c0, 0x19dd: 0x00c0, + 0x19de: 0x00c0, 0x19df: 0x00c0, 0x19e0: 0x00c0, 0x19e1: 0x00c0, 0x19e2: 0x00c0, 0x19e3: 0x00c0, + 0x19e4: 0x00c0, 0x19e5: 0x00c0, 0x19e6: 0x00c0, 0x19e7: 0x00c0, 0x19e8: 0x00c0, 0x19e9: 0x00c0, + 0x19ea: 0x00c0, 0x19eb: 0x00c0, 0x19ec: 0x00c0, 0x19ed: 0x00c0, 0x19ee: 0x00c0, 0x19ef: 0x00c0, + 0x19f0: 0x00c0, 0x19f1: 0x00c0, 0x19f2: 0x00c0, 0x19f3: 0x00c0, 0x19f4: 0x00c0, 0x19f5: 0x00c0, + 0x19f6: 0x00c0, 0x19f7: 0x00c0, 0x19f8: 0x00c0, 0x19f9: 0x00c0, 0x19fa: 0x00c0, 0x19fb: 0x00c0, + 0x19fc: 0x00c0, 0x19fd: 0x00c0, 0x19fe: 0x00c0, 0x19ff: 0x00c0, + // Block 0x68, offset 0x1a00 + 0x1a00: 0x00c8, 0x1a01: 0x00c8, 0x1a02: 0x00c8, 0x1a03: 0x00c8, 0x1a04: 0x00c8, 0x1a05: 0x00c8, + 0x1a06: 0x00c8, 0x1a07: 0x00c8, 0x1a08: 0x00c8, 0x1a09: 0x00c8, 0x1a0a: 0x00c8, 0x1a0b: 0x00c8, + 0x1a0c: 0x00c8, 0x1a0d: 0x00c8, 0x1a0e: 0x00c8, 0x1a0f: 0x00c8, 0x1a10: 0x00c8, 0x1a11: 0x00c8, + 0x1a12: 0x00c8, 0x1a13: 0x00c8, 0x1a14: 0x00c8, 0x1a15: 0x00c8, + 0x1a18: 0x00c8, 0x1a19: 0x00c8, 0x1a1a: 0x00c8, 0x1a1b: 0x00c8, 0x1a1c: 0x00c8, 0x1a1d: 0x00c8, + 0x1a20: 0x00c8, 0x1a21: 0x00c8, 0x1a22: 0x00c8, 0x1a23: 0x00c8, + 0x1a24: 0x00c8, 0x1a25: 0x00c8, 0x1a26: 0x00c8, 0x1a27: 0x00c8, 0x1a28: 0x00c8, 0x1a29: 0x00c8, + 0x1a2a: 0x00c8, 0x1a2b: 0x00c8, 0x1a2c: 0x00c8, 0x1a2d: 0x00c8, 0x1a2e: 0x00c8, 0x1a2f: 0x00c8, + 0x1a30: 0x00c8, 0x1a31: 0x00c8, 0x1a32: 0x00c8, 0x1a33: 0x00c8, 0x1a34: 0x00c8, 0x1a35: 0x00c8, + 0x1a36: 0x00c8, 0x1a37: 0x00c8, 0x1a38: 0x00c8, 0x1a39: 0x00c8, 0x1a3a: 0x00c8, 0x1a3b: 0x00c8, + 0x1a3c: 0x00c8, 0x1a3d: 0x00c8, 0x1a3e: 0x00c8, 0x1a3f: 0x00c8, + // Block 0x69, offset 0x1a40 + 0x1a40: 0x00c8, 0x1a41: 0x00c8, 0x1a42: 0x00c8, 0x1a43: 0x00c8, 0x1a44: 0x00c8, 0x1a45: 0x00c8, + 0x1a48: 0x00c8, 0x1a49: 0x00c8, 0x1a4a: 0x00c8, 0x1a4b: 0x00c8, + 0x1a4c: 0x00c8, 0x1a4d: 0x00c8, 0x1a50: 0x00c8, 0x1a51: 0x00c8, + 0x1a52: 0x00c8, 0x1a53: 0x00c8, 0x1a54: 0x00c8, 0x1a55: 0x00c8, 0x1a56: 0x00c8, 0x1a57: 0x00c8, + 0x1a59: 0x00c8, 0x1a5b: 0x00c8, 0x1a5d: 0x00c8, + 0x1a5f: 0x00c8, 0x1a60: 0x00c8, 0x1a61: 0x00c8, 0x1a62: 0x00c8, 0x1a63: 0x00c8, + 0x1a64: 0x00c8, 0x1a65: 0x00c8, 0x1a66: 0x00c8, 0x1a67: 0x00c8, 0x1a68: 0x00c8, 0x1a69: 0x00c8, + 0x1a6a: 0x00c8, 0x1a6b: 0x00c8, 0x1a6c: 0x00c8, 0x1a6d: 0x00c8, 0x1a6e: 0x00c8, 0x1a6f: 0x00c8, + 0x1a70: 0x00c8, 0x1a71: 0x0088, 0x1a72: 0x00c8, 0x1a73: 0x0088, 0x1a74: 0x00c8, 0x1a75: 0x0088, + 0x1a76: 0x00c8, 0x1a77: 0x0088, 0x1a78: 0x00c8, 0x1a79: 0x0088, 0x1a7a: 0x00c8, 0x1a7b: 0x0088, + 0x1a7c: 0x00c8, 0x1a7d: 0x0088, + // Block 0x6a, offset 0x1a80 + 0x1a80: 0x00c8, 0x1a81: 0x00c8, 0x1a82: 0x00c8, 0x1a83: 0x00c8, 0x1a84: 0x00c8, 0x1a85: 0x00c8, + 0x1a86: 0x00c8, 0x1a87: 0x00c8, 0x1a88: 0x0088, 0x1a89: 0x0088, 0x1a8a: 0x0088, 0x1a8b: 0x0088, + 0x1a8c: 0x0088, 0x1a8d: 0x0088, 0x1a8e: 0x0088, 0x1a8f: 0x0088, 0x1a90: 0x00c8, 0x1a91: 0x00c8, + 0x1a92: 0x00c8, 0x1a93: 0x00c8, 0x1a94: 0x00c8, 0x1a95: 0x00c8, 0x1a96: 0x00c8, 0x1a97: 0x00c8, + 0x1a98: 0x0088, 0x1a99: 0x0088, 0x1a9a: 0x0088, 0x1a9b: 0x0088, 0x1a9c: 0x0088, 0x1a9d: 0x0088, + 0x1a9e: 0x0088, 0x1a9f: 0x0088, 0x1aa0: 0x00c8, 0x1aa1: 0x00c8, 0x1aa2: 0x00c8, 0x1aa3: 0x00c8, + 0x1aa4: 0x00c8, 0x1aa5: 0x00c8, 0x1aa6: 0x00c8, 0x1aa7: 0x00c8, 0x1aa8: 0x0088, 0x1aa9: 0x0088, + 0x1aaa: 0x0088, 0x1aab: 0x0088, 0x1aac: 0x0088, 0x1aad: 0x0088, 0x1aae: 0x0088, 0x1aaf: 0x0088, + 0x1ab0: 0x00c8, 0x1ab1: 0x00c8, 0x1ab2: 0x00c8, 0x1ab3: 0x00c8, 0x1ab4: 0x00c8, + 0x1ab6: 0x00c8, 0x1ab7: 0x00c8, 0x1ab8: 0x00c8, 0x1ab9: 0x00c8, 0x1aba: 0x00c8, 0x1abb: 0x0088, + 0x1abc: 0x0088, 0x1abd: 0x0088, 0x1abe: 0x0088, 0x1abf: 0x0088, + // Block 0x6b, offset 0x1ac0 + 0x1ac0: 0x0088, 0x1ac1: 0x0088, 0x1ac2: 0x00c8, 0x1ac3: 0x00c8, 0x1ac4: 0x00c8, + 0x1ac6: 0x00c8, 0x1ac7: 0x00c8, 0x1ac8: 0x00c8, 0x1ac9: 0x0088, 0x1aca: 0x00c8, 0x1acb: 0x0088, + 0x1acc: 0x0088, 0x1acd: 0x0088, 0x1ace: 0x0088, 0x1acf: 0x0088, 0x1ad0: 0x00c8, 0x1ad1: 0x00c8, + 0x1ad2: 0x00c8, 0x1ad3: 0x0088, 0x1ad6: 0x00c8, 0x1ad7: 0x00c8, + 0x1ad8: 0x00c8, 0x1ad9: 0x00c8, 0x1ada: 0x00c8, 0x1adb: 0x0088, 0x1add: 0x0088, + 0x1ade: 0x0088, 0x1adf: 0x0088, 0x1ae0: 0x00c8, 0x1ae1: 0x00c8, 0x1ae2: 0x00c8, 0x1ae3: 0x0088, + 0x1ae4: 0x00c8, 0x1ae5: 0x00c8, 0x1ae6: 0x00c8, 0x1ae7: 0x00c8, 0x1ae8: 0x00c8, 0x1ae9: 0x00c8, + 0x1aea: 0x00c8, 0x1aeb: 0x0088, 0x1aec: 0x00c8, 0x1aed: 0x0088, 0x1aee: 0x0088, 0x1aef: 0x0088, + 0x1af2: 0x00c8, 0x1af3: 0x00c8, 0x1af4: 0x00c8, + 0x1af6: 0x00c8, 0x1af7: 0x00c8, 0x1af8: 0x00c8, 0x1af9: 0x0088, 0x1afa: 0x00c8, 0x1afb: 0x0088, + 0x1afc: 0x0088, 0x1afd: 0x0088, 0x1afe: 0x0088, + // Block 0x6c, offset 0x1b00 + 0x1b00: 0x0080, 0x1b01: 0x0080, 0x1b02: 0x0080, 0x1b03: 0x0080, 0x1b04: 0x0080, 0x1b05: 0x0080, + 0x1b06: 0x0080, 0x1b07: 0x0080, 0x1b08: 0x0080, 0x1b09: 0x0080, 0x1b0a: 0x0080, 0x1b0b: 0x0040, + 0x1b0c: 0x004d, 0x1b0d: 0x004e, 0x1b0e: 0x0040, 0x1b0f: 0x0040, 0x1b10: 0x0080, 0x1b11: 0x0080, + 0x1b12: 0x0080, 0x1b13: 0x0080, 0x1b14: 0x0080, 0x1b15: 0x0080, 0x1b16: 0x0080, 0x1b17: 0x0080, + 0x1b18: 0x0080, 0x1b19: 0x0080, 0x1b1a: 0x0080, 0x1b1b: 0x0080, 0x1b1c: 0x0080, 0x1b1d: 0x0080, + 0x1b1e: 0x0080, 0x1b1f: 0x0080, 0x1b20: 0x0080, 0x1b21: 0x0080, 0x1b22: 0x0080, 0x1b23: 0x0080, + 0x1b24: 0x0080, 0x1b25: 0x0080, 0x1b26: 0x0080, 0x1b27: 0x0080, 0x1b28: 0x0040, 0x1b29: 0x0040, + 0x1b2a: 0x0040, 0x1b2b: 0x0040, 0x1b2c: 0x0040, 0x1b2d: 0x0040, 0x1b2e: 0x0040, 0x1b2f: 0x0080, + 0x1b30: 0x0080, 0x1b31: 0x0080, 0x1b32: 0x0080, 0x1b33: 0x0080, 0x1b34: 0x0080, 0x1b35: 0x0080, + 0x1b36: 0x0080, 0x1b37: 0x0080, 0x1b38: 0x0080, 0x1b39: 0x0080, 0x1b3a: 0x0080, 0x1b3b: 0x0080, + 0x1b3c: 0x0080, 0x1b3d: 0x0080, 0x1b3e: 0x0080, 0x1b3f: 0x0080, + // Block 0x6d, offset 0x1b40 + 0x1b40: 0x0080, 0x1b41: 0x0080, 0x1b42: 0x0080, 0x1b43: 0x0080, 0x1b44: 0x0080, 0x1b45: 0x0080, + 0x1b46: 0x0080, 0x1b47: 0x0080, 0x1b48: 0x0080, 0x1b49: 0x0080, 0x1b4a: 0x0080, 0x1b4b: 0x0080, + 0x1b4c: 0x0080, 0x1b4d: 0x0080, 0x1b4e: 0x0080, 0x1b4f: 0x0080, 0x1b50: 0x0080, 0x1b51: 0x0080, + 0x1b52: 0x0080, 0x1b53: 0x0080, 0x1b54: 0x0080, 0x1b55: 0x0080, 0x1b56: 0x0080, 0x1b57: 0x0080, + 0x1b58: 0x0080, 0x1b59: 0x0080, 0x1b5a: 0x0080, 0x1b5b: 0x0080, 0x1b5c: 0x0080, 0x1b5d: 0x0080, + 0x1b5e: 0x0080, 0x1b5f: 0x0080, 0x1b60: 0x0040, 0x1b61: 0x0040, 0x1b62: 0x0040, 0x1b63: 0x0040, + 0x1b64: 0x0040, 0x1b66: 0x0040, 0x1b67: 0x0040, 0x1b68: 0x0040, 0x1b69: 0x0040, + 0x1b6a: 0x0040, 0x1b6b: 0x0040, 0x1b6c: 0x0040, 0x1b6d: 0x0040, 0x1b6e: 0x0040, 0x1b6f: 0x0040, + 0x1b70: 0x0080, 0x1b71: 0x0080, 0x1b74: 0x0080, 0x1b75: 0x0080, + 0x1b76: 0x0080, 0x1b77: 0x0080, 0x1b78: 0x0080, 0x1b79: 0x0080, 0x1b7a: 0x0080, 0x1b7b: 0x0080, + 0x1b7c: 0x0080, 0x1b7d: 0x0080, 0x1b7e: 0x0080, 0x1b7f: 0x0080, + // Block 0x6e, offset 0x1b80 + 0x1b80: 0x0080, 0x1b81: 0x0080, 0x1b82: 0x0080, 0x1b83: 0x0080, 0x1b84: 0x0080, 0x1b85: 0x0080, + 0x1b86: 0x0080, 0x1b87: 0x0080, 0x1b88: 0x0080, 0x1b89: 0x0080, 0x1b8a: 0x0080, 0x1b8b: 0x0080, + 0x1b8c: 0x0080, 0x1b8d: 0x0080, 0x1b8e: 0x0080, 0x1b90: 0x0080, 0x1b91: 0x0080, + 0x1b92: 0x0080, 0x1b93: 0x0080, 0x1b94: 0x0080, 0x1b95: 0x0080, 0x1b96: 0x0080, 0x1b97: 0x0080, + 0x1b98: 0x0080, 0x1b99: 0x0080, 0x1b9a: 0x0080, 0x1b9b: 0x0080, 0x1b9c: 0x0080, + 0x1ba0: 0x0080, 0x1ba1: 0x0080, 0x1ba2: 0x0080, 0x1ba3: 0x0080, + 0x1ba4: 0x0080, 0x1ba5: 0x0080, 0x1ba6: 0x0080, 0x1ba7: 0x0080, 0x1ba8: 0x0080, 0x1ba9: 0x0080, + 0x1baa: 0x0080, 0x1bab: 0x0080, 0x1bac: 0x0080, 0x1bad: 0x0080, 0x1bae: 0x0080, 0x1baf: 0x0080, + 0x1bb0: 0x0080, 0x1bb1: 0x0080, 0x1bb2: 0x0080, 0x1bb3: 0x0080, 0x1bb4: 0x0080, 0x1bb5: 0x0080, + 0x1bb6: 0x0080, 0x1bb7: 0x0080, 0x1bb8: 0x0080, 0x1bb9: 0x0080, 0x1bba: 0x0080, 0x1bbb: 0x0080, + 0x1bbc: 0x0080, 0x1bbd: 0x0080, 0x1bbe: 0x0080, 0x1bbf: 0x0080, + // Block 0x6f, offset 0x1bc0 + 0x1bd0: 0x00c3, 0x1bd1: 0x00c3, + 0x1bd2: 0x00c3, 0x1bd3: 0x00c3, 0x1bd4: 0x00c3, 0x1bd5: 0x00c3, 0x1bd6: 0x00c3, 0x1bd7: 0x00c3, + 0x1bd8: 0x00c3, 0x1bd9: 0x00c3, 0x1bda: 0x00c3, 0x1bdb: 0x00c3, 0x1bdc: 0x00c3, 0x1bdd: 0x0083, + 0x1bde: 0x0083, 0x1bdf: 0x0083, 0x1be0: 0x0083, 0x1be1: 0x00c3, 0x1be2: 0x0083, 0x1be3: 0x0083, + 0x1be4: 0x0083, 0x1be5: 0x00c3, 0x1be6: 0x00c3, 0x1be7: 0x00c3, 0x1be8: 0x00c3, 0x1be9: 0x00c3, + 0x1bea: 0x00c3, 0x1beb: 0x00c3, 0x1bec: 0x00c3, 0x1bed: 0x00c3, 0x1bee: 0x00c3, 0x1bef: 0x00c3, + 0x1bf0: 0x00c3, + // Block 0x70, offset 0x1c00 + 0x1c00: 0x0080, 0x1c01: 0x0080, 0x1c02: 0x0080, 0x1c03: 0x0080, 0x1c04: 0x0080, 0x1c05: 0x0080, + 0x1c06: 0x0080, 0x1c07: 0x0080, 0x1c08: 0x0080, 0x1c09: 0x0080, 0x1c0a: 0x0080, 0x1c0b: 0x0080, + 0x1c0c: 0x0080, 0x1c0d: 0x0080, 0x1c0e: 0x0080, 0x1c0f: 0x0080, 0x1c10: 0x0080, 0x1c11: 0x0080, + 0x1c12: 0x0080, 0x1c13: 0x0080, 0x1c14: 0x0080, 0x1c15: 0x0080, 0x1c16: 0x0080, 0x1c17: 0x0080, + 0x1c18: 0x0080, 0x1c19: 0x0080, 0x1c1a: 0x0080, 0x1c1b: 0x0080, 0x1c1c: 0x0080, 0x1c1d: 0x0080, + 0x1c1e: 0x0080, 0x1c1f: 0x0080, 0x1c20: 0x0080, 0x1c21: 0x0080, 0x1c22: 0x0080, 0x1c23: 0x0080, + 0x1c24: 0x0080, 0x1c25: 0x0080, 0x1c26: 0x0088, 0x1c27: 0x0080, 0x1c28: 0x0080, 0x1c29: 0x0080, + 0x1c2a: 0x0080, 0x1c2b: 0x0080, 0x1c2c: 0x0080, 0x1c2d: 0x0080, 0x1c2e: 0x0080, 0x1c2f: 0x0080, + 0x1c30: 0x0080, 0x1c31: 0x0080, 0x1c32: 0x00c0, 0x1c33: 0x0080, 0x1c34: 0x0080, 0x1c35: 0x0080, + 0x1c36: 0x0080, 0x1c37: 0x0080, 0x1c38: 0x0080, 0x1c39: 0x0080, 0x1c3a: 0x0080, 0x1c3b: 0x0080, + 0x1c3c: 0x0080, 0x1c3d: 0x0080, 0x1c3e: 0x0080, 0x1c3f: 0x0080, + // Block 0x71, offset 0x1c40 + 0x1c40: 0x0080, 0x1c41: 0x0080, 0x1c42: 0x0080, 0x1c43: 0x0080, 0x1c44: 0x0080, 0x1c45: 0x0080, + 0x1c46: 0x0080, 0x1c47: 0x0080, 0x1c48: 0x0080, 0x1c49: 0x0080, 0x1c4a: 0x0080, 0x1c4b: 0x0080, + 0x1c4c: 0x0080, 0x1c4d: 0x0080, 0x1c4e: 0x00c0, 0x1c4f: 0x0080, 0x1c50: 0x0080, 0x1c51: 0x0080, + 0x1c52: 0x0080, 0x1c53: 0x0080, 0x1c54: 0x0080, 0x1c55: 0x0080, 0x1c56: 0x0080, 0x1c57: 0x0080, + 0x1c58: 0x0080, 0x1c59: 0x0080, 0x1c5a: 0x0080, 0x1c5b: 0x0080, 0x1c5c: 0x0080, 0x1c5d: 0x0080, + 0x1c5e: 0x0080, 0x1c5f: 0x0080, 0x1c60: 0x0080, 0x1c61: 0x0080, 0x1c62: 0x0080, 0x1c63: 0x0080, + 0x1c64: 0x0080, 0x1c65: 0x0080, 0x1c66: 0x0080, 0x1c67: 0x0080, 0x1c68: 0x0080, 0x1c69: 0x0080, + 0x1c6a: 0x0080, 0x1c6b: 0x0080, 0x1c6c: 0x0080, 0x1c6d: 0x0080, 0x1c6e: 0x0080, 0x1c6f: 0x0080, + 0x1c70: 0x0080, 0x1c71: 0x0080, 0x1c72: 0x0080, 0x1c73: 0x0080, 0x1c74: 0x0080, 0x1c75: 0x0080, + 0x1c76: 0x0080, 0x1c77: 0x0080, 0x1c78: 0x0080, 0x1c79: 0x0080, 0x1c7a: 0x0080, 0x1c7b: 0x0080, + 0x1c7c: 0x0080, 0x1c7d: 0x0080, 0x1c7e: 0x0080, 0x1c7f: 0x0080, + // Block 0x72, offset 0x1c80 + 0x1c80: 0x0080, 0x1c81: 0x0080, 0x1c82: 0x0080, 0x1c83: 0x00c0, 0x1c84: 0x00c0, 0x1c85: 0x0080, + 0x1c86: 0x0080, 0x1c87: 0x0080, 0x1c88: 0x0080, 0x1c89: 0x0080, 0x1c8a: 0x0080, 0x1c8b: 0x0080, + 0x1c90: 0x0080, 0x1c91: 0x0080, + 0x1c92: 0x0080, 0x1c93: 0x0080, 0x1c94: 0x0080, 0x1c95: 0x0080, 0x1c96: 0x0080, 0x1c97: 0x0080, + 0x1c98: 0x0080, 0x1c99: 0x0080, 0x1c9a: 0x0080, 0x1c9b: 0x0080, 0x1c9c: 0x0080, 0x1c9d: 0x0080, + 0x1c9e: 0x0080, 0x1c9f: 0x0080, 0x1ca0: 0x0080, 0x1ca1: 0x0080, 0x1ca2: 0x0080, 0x1ca3: 0x0080, + 0x1ca4: 0x0080, 0x1ca5: 0x0080, 0x1ca6: 0x0080, 0x1ca7: 0x0080, 0x1ca8: 0x0080, 0x1ca9: 0x0080, + 0x1caa: 0x0080, 0x1cab: 0x0080, 0x1cac: 0x0080, 0x1cad: 0x0080, 0x1cae: 0x0080, 0x1caf: 0x0080, + 0x1cb0: 0x0080, 0x1cb1: 0x0080, 0x1cb2: 0x0080, 0x1cb3: 0x0080, 0x1cb4: 0x0080, 0x1cb5: 0x0080, + 0x1cb6: 0x0080, 0x1cb7: 0x0080, 0x1cb8: 0x0080, 0x1cb9: 0x0080, 0x1cba: 0x0080, 0x1cbb: 0x0080, + 0x1cbc: 0x0080, 0x1cbd: 0x0080, 0x1cbe: 0x0080, 0x1cbf: 0x0080, + // Block 0x73, offset 0x1cc0 + 0x1cc0: 0x0080, 0x1cc1: 0x0080, 0x1cc2: 0x0080, 0x1cc3: 0x0080, 0x1cc4: 0x0080, 0x1cc5: 0x0080, + 0x1cc6: 0x0080, 0x1cc7: 0x0080, 0x1cc8: 0x0080, 0x1cc9: 0x0080, 0x1cca: 0x0080, 0x1ccb: 0x0080, + 0x1ccc: 0x0080, 0x1ccd: 0x0080, 0x1cce: 0x0080, 0x1ccf: 0x0080, 0x1cd0: 0x0080, 0x1cd1: 0x0080, + 0x1cd2: 0x0080, 0x1cd3: 0x0080, 0x1cd4: 0x0080, 0x1cd5: 0x0080, 0x1cd6: 0x0080, 0x1cd7: 0x0080, + 0x1cd8: 0x0080, 0x1cd9: 0x0080, 0x1cda: 0x0080, 0x1cdb: 0x0080, 0x1cdc: 0x0080, 0x1cdd: 0x0080, + 0x1cde: 0x0080, 0x1cdf: 0x0080, 0x1ce0: 0x0080, 0x1ce1: 0x0080, 0x1ce2: 0x0080, 0x1ce3: 0x0080, + 0x1ce4: 0x0080, 0x1ce5: 0x0080, 0x1ce6: 0x0080, 0x1ce7: 0x0080, 0x1ce8: 0x0080, 0x1ce9: 0x0080, + 0x1cea: 0x0080, 0x1ceb: 0x0080, 0x1cec: 0x0080, 0x1ced: 0x0080, 0x1cee: 0x0080, 0x1cef: 0x0080, + 0x1cf0: 0x0080, 0x1cf1: 0x0080, 0x1cf2: 0x0080, 0x1cf3: 0x0080, 0x1cf4: 0x0080, 0x1cf5: 0x0080, + 0x1cf6: 0x0080, 0x1cf7: 0x0080, 0x1cf8: 0x0080, 0x1cf9: 0x0080, 0x1cfa: 0x0080, 0x1cfb: 0x0080, + 0x1cfc: 0x0080, 0x1cfd: 0x0080, 0x1cfe: 0x0080, 0x1cff: 0x0080, + // Block 0x74, offset 0x1d00 + 0x1d00: 0x0080, 0x1d01: 0x0080, 0x1d02: 0x0080, 0x1d03: 0x0080, 0x1d04: 0x0080, 0x1d05: 0x0080, + 0x1d06: 0x0080, 0x1d07: 0x0080, 0x1d08: 0x0080, 0x1d09: 0x0080, 0x1d0a: 0x0080, 0x1d0b: 0x0080, + 0x1d0c: 0x0080, 0x1d0d: 0x0080, 0x1d0e: 0x0080, 0x1d0f: 0x0080, 0x1d10: 0x0080, 0x1d11: 0x0080, + 0x1d12: 0x0080, 0x1d13: 0x0080, 0x1d14: 0x0080, 0x1d15: 0x0080, 0x1d16: 0x0080, 0x1d17: 0x0080, + 0x1d18: 0x0080, 0x1d19: 0x0080, 0x1d1a: 0x0080, 0x1d1b: 0x0080, 0x1d1c: 0x0080, 0x1d1d: 0x0080, + 0x1d1e: 0x0080, 0x1d1f: 0x0080, 0x1d20: 0x0080, 0x1d21: 0x0080, 0x1d22: 0x0080, 0x1d23: 0x0080, + 0x1d24: 0x0080, 0x1d25: 0x0080, 0x1d26: 0x0080, + // Block 0x75, offset 0x1d40 + 0x1d40: 0x0080, 0x1d41: 0x0080, 0x1d42: 0x0080, 0x1d43: 0x0080, 0x1d44: 0x0080, 0x1d45: 0x0080, + 0x1d46: 0x0080, 0x1d47: 0x0080, 0x1d48: 0x0080, 0x1d49: 0x0080, 0x1d4a: 0x0080, + 0x1d60: 0x0080, 0x1d61: 0x0080, 0x1d62: 0x0080, 0x1d63: 0x0080, + 0x1d64: 0x0080, 0x1d65: 0x0080, 0x1d66: 0x0080, 0x1d67: 0x0080, 0x1d68: 0x0080, 0x1d69: 0x0080, + 0x1d6a: 0x0080, 0x1d6b: 0x0080, 0x1d6c: 0x0080, 0x1d6d: 0x0080, 0x1d6e: 0x0080, 0x1d6f: 0x0080, + 0x1d70: 0x0080, 0x1d71: 0x0080, 0x1d72: 0x0080, 0x1d73: 0x0080, 0x1d74: 0x0080, 0x1d75: 0x0080, + 0x1d76: 0x0080, 0x1d77: 0x0080, 0x1d78: 0x0080, 0x1d79: 0x0080, 0x1d7a: 0x0080, 0x1d7b: 0x0080, + 0x1d7c: 0x0080, 0x1d7d: 0x0080, 0x1d7e: 0x0080, 0x1d7f: 0x0080, + // Block 0x76, offset 0x1d80 + 0x1d80: 0x0080, 0x1d81: 0x0080, 0x1d82: 0x0080, 0x1d83: 0x0080, 0x1d84: 0x0080, 0x1d85: 0x0080, + 0x1d86: 0x0080, 0x1d87: 0x0080, 0x1d88: 0x0080, 0x1d89: 0x0080, 0x1d8a: 0x0080, 0x1d8b: 0x0080, + 0x1d8c: 0x0080, 0x1d8d: 0x0080, 0x1d8e: 0x0080, 0x1d8f: 0x0080, 0x1d90: 0x0080, 0x1d91: 0x0080, + 0x1d92: 0x0080, 0x1d93: 0x0080, 0x1d94: 0x0080, 0x1d95: 0x0080, 0x1d96: 0x0080, 0x1d97: 0x0080, + 0x1d98: 0x0080, 0x1d99: 0x0080, 0x1d9a: 0x0080, 0x1d9b: 0x0080, 0x1d9c: 0x0080, 0x1d9d: 0x0080, + 0x1d9e: 0x0080, 0x1d9f: 0x0080, 0x1da0: 0x0080, 0x1da1: 0x0080, 0x1da2: 0x0080, 0x1da3: 0x0080, + 0x1da4: 0x0080, 0x1da5: 0x0080, 0x1da6: 0x0080, 0x1da7: 0x0080, 0x1da8: 0x0080, 0x1da9: 0x0080, + 0x1daa: 0x0080, 0x1dab: 0x0080, 0x1dac: 0x0080, 0x1dad: 0x0080, 0x1dae: 0x0080, 0x1daf: 0x0080, + 0x1db0: 0x0080, 0x1db1: 0x0080, 0x1db2: 0x0080, 0x1db3: 0x0080, + 0x1db6: 0x0080, 0x1db7: 0x0080, 0x1db8: 0x0080, 0x1db9: 0x0080, 0x1dba: 0x0080, 0x1dbb: 0x0080, + 0x1dbc: 0x0080, 0x1dbd: 0x0080, 0x1dbe: 0x0080, 0x1dbf: 0x0080, + // Block 0x77, offset 0x1dc0 + 0x1dc0: 0x0080, 0x1dc1: 0x0080, 0x1dc2: 0x0080, 0x1dc3: 0x0080, 0x1dc4: 0x0080, 0x1dc5: 0x0080, + 0x1dc6: 0x0080, 0x1dc7: 0x0080, 0x1dc8: 0x0080, 0x1dc9: 0x0080, 0x1dca: 0x0080, 0x1dcb: 0x0080, + 0x1dcc: 0x0080, 0x1dcd: 0x0080, 0x1dce: 0x0080, 0x1dcf: 0x0080, 0x1dd0: 0x0080, 0x1dd1: 0x0080, + 0x1dd2: 0x0080, 0x1dd3: 0x0080, 0x1dd4: 0x0080, 0x1dd5: 0x0080, + 0x1dd8: 0x0080, 0x1dd9: 0x0080, 0x1dda: 0x0080, 0x1ddb: 0x0080, 0x1ddc: 0x0080, 0x1ddd: 0x0080, + 0x1dde: 0x0080, 0x1ddf: 0x0080, 0x1de0: 0x0080, 0x1de1: 0x0080, 0x1de2: 0x0080, 0x1de3: 0x0080, + 0x1de4: 0x0080, 0x1de5: 0x0080, 0x1de6: 0x0080, 0x1de7: 0x0080, 0x1de8: 0x0080, 0x1de9: 0x0080, + 0x1dea: 0x0080, 0x1deb: 0x0080, 0x1dec: 0x0080, 0x1ded: 0x0080, 0x1dee: 0x0080, 0x1def: 0x0080, + 0x1df0: 0x0080, 0x1df1: 0x0080, 0x1df2: 0x0080, 0x1df3: 0x0080, 0x1df4: 0x0080, 0x1df5: 0x0080, + 0x1df6: 0x0080, 0x1df7: 0x0080, 0x1df8: 0x0080, 0x1df9: 0x0080, + 0x1dfd: 0x0080, 0x1dfe: 0x0080, 0x1dff: 0x0080, + // Block 0x78, offset 0x1e00 + 0x1e00: 0x0080, 0x1e01: 0x0080, 0x1e02: 0x0080, 0x1e03: 0x0080, 0x1e04: 0x0080, 0x1e05: 0x0080, + 0x1e06: 0x0080, 0x1e07: 0x0080, 0x1e08: 0x0080, 0x1e0a: 0x0080, 0x1e0b: 0x0080, + 0x1e0c: 0x0080, 0x1e0d: 0x0080, 0x1e0e: 0x0080, 0x1e0f: 0x0080, 0x1e10: 0x0080, 0x1e11: 0x0080, + 0x1e12: 0x0080, + 0x1e2c: 0x0080, 0x1e2d: 0x0080, 0x1e2e: 0x0080, 0x1e2f: 0x0080, + // Block 0x79, offset 0x1e40 + 0x1e40: 0x00c0, 0x1e41: 0x00c0, 0x1e42: 0x00c0, 0x1e43: 0x00c0, 0x1e44: 0x00c0, 0x1e45: 0x00c0, + 0x1e46: 0x00c0, 0x1e47: 0x00c0, 0x1e48: 0x00c0, 0x1e49: 0x00c0, 0x1e4a: 0x00c0, 0x1e4b: 0x00c0, + 0x1e4c: 0x00c0, 0x1e4d: 0x00c0, 0x1e4e: 0x00c0, 0x1e4f: 0x00c0, 0x1e50: 0x00c0, 0x1e51: 0x00c0, + 0x1e52: 0x00c0, 0x1e53: 0x00c0, 0x1e54: 0x00c0, 0x1e55: 0x00c0, 0x1e56: 0x00c0, 0x1e57: 0x00c0, + 0x1e58: 0x00c0, 0x1e59: 0x00c0, 0x1e5a: 0x00c0, 0x1e5b: 0x00c0, 0x1e5c: 0x00c0, 0x1e5d: 0x00c0, + 0x1e5e: 0x00c0, 0x1e5f: 0x00c0, 0x1e60: 0x00c0, 0x1e61: 0x00c0, 0x1e62: 0x00c0, 0x1e63: 0x00c0, + 0x1e64: 0x00c0, 0x1e65: 0x00c0, 0x1e66: 0x00c0, 0x1e67: 0x00c0, 0x1e68: 0x00c0, 0x1e69: 0x00c0, + 0x1e6a: 0x00c0, 0x1e6b: 0x00c0, 0x1e6c: 0x00c0, 0x1e6d: 0x00c0, 0x1e6e: 0x00c0, + 0x1e70: 0x00c0, 0x1e71: 0x00c0, 0x1e72: 0x00c0, 0x1e73: 0x00c0, 0x1e74: 0x00c0, 0x1e75: 0x00c0, + 0x1e76: 0x00c0, 0x1e77: 0x00c0, 0x1e78: 0x00c0, 0x1e79: 0x00c0, 0x1e7a: 0x00c0, 0x1e7b: 0x00c0, + 0x1e7c: 0x00c0, 0x1e7d: 0x00c0, 0x1e7e: 0x00c0, 0x1e7f: 0x00c0, + // Block 0x7a, offset 0x1e80 + 0x1e80: 0x00c0, 0x1e81: 0x00c0, 0x1e82: 0x00c0, 0x1e83: 0x00c0, 0x1e84: 0x00c0, 0x1e85: 0x00c0, + 0x1e86: 0x00c0, 0x1e87: 0x00c0, 0x1e88: 0x00c0, 0x1e89: 0x00c0, 0x1e8a: 0x00c0, 0x1e8b: 0x00c0, + 0x1e8c: 0x00c0, 0x1e8d: 0x00c0, 0x1e8e: 0x00c0, 0x1e8f: 0x00c0, 0x1e90: 0x00c0, 0x1e91: 0x00c0, + 0x1e92: 0x00c0, 0x1e93: 0x00c0, 0x1e94: 0x00c0, 0x1e95: 0x00c0, 0x1e96: 0x00c0, 0x1e97: 0x00c0, + 0x1e98: 0x00c0, 0x1e99: 0x00c0, 0x1e9a: 0x00c0, 0x1e9b: 0x00c0, 0x1e9c: 0x00c0, 0x1e9d: 0x00c0, + 0x1e9e: 0x00c0, 0x1ea0: 0x00c0, 0x1ea1: 0x00c0, 0x1ea2: 0x00c0, 0x1ea3: 0x00c0, + 0x1ea4: 0x00c0, 0x1ea5: 0x00c0, 0x1ea6: 0x00c0, 0x1ea7: 0x00c0, 0x1ea8: 0x00c0, 0x1ea9: 0x00c0, + 0x1eaa: 0x00c0, 0x1eab: 0x00c0, 0x1eac: 0x00c0, 0x1ead: 0x00c0, 0x1eae: 0x00c0, 0x1eaf: 0x00c0, + 0x1eb0: 0x00c0, 0x1eb1: 0x00c0, 0x1eb2: 0x00c0, 0x1eb3: 0x00c0, 0x1eb4: 0x00c0, 0x1eb5: 0x00c0, + 0x1eb6: 0x00c0, 0x1eb7: 0x00c0, 0x1eb8: 0x00c0, 0x1eb9: 0x00c0, 0x1eba: 0x00c0, 0x1ebb: 0x00c0, + 0x1ebc: 0x0080, 0x1ebd: 0x0080, 0x1ebe: 0x00c0, 0x1ebf: 0x00c0, + // Block 0x7b, offset 0x1ec0 + 0x1ec0: 0x00c0, 0x1ec1: 0x00c0, 0x1ec2: 0x00c0, 0x1ec3: 0x00c0, 0x1ec4: 0x00c0, 0x1ec5: 0x00c0, + 0x1ec6: 0x00c0, 0x1ec7: 0x00c0, 0x1ec8: 0x00c0, 0x1ec9: 0x00c0, 0x1eca: 0x00c0, 0x1ecb: 0x00c0, + 0x1ecc: 0x00c0, 0x1ecd: 0x00c0, 0x1ece: 0x00c0, 0x1ecf: 0x00c0, 0x1ed0: 0x00c0, 0x1ed1: 0x00c0, + 0x1ed2: 0x00c0, 0x1ed3: 0x00c0, 0x1ed4: 0x00c0, 0x1ed5: 0x00c0, 0x1ed6: 0x00c0, 0x1ed7: 0x00c0, + 0x1ed8: 0x00c0, 0x1ed9: 0x00c0, 0x1eda: 0x00c0, 0x1edb: 0x00c0, 0x1edc: 0x00c0, 0x1edd: 0x00c0, + 0x1ede: 0x00c0, 0x1edf: 0x00c0, 0x1ee0: 0x00c0, 0x1ee1: 0x00c0, 0x1ee2: 0x00c0, 0x1ee3: 0x00c0, + 0x1ee4: 0x00c0, 0x1ee5: 0x0080, 0x1ee6: 0x0080, 0x1ee7: 0x0080, 0x1ee8: 0x0080, 0x1ee9: 0x0080, + 0x1eea: 0x0080, 0x1eeb: 0x00c0, 0x1eec: 0x00c0, 0x1eed: 0x00c0, 0x1eee: 0x00c0, 0x1eef: 0x00c3, + 0x1ef0: 0x00c3, 0x1ef1: 0x00c3, 0x1ef2: 0x00c0, 0x1ef3: 0x00c0, + 0x1ef9: 0x0080, 0x1efa: 0x0080, 0x1efb: 0x0080, + 0x1efc: 0x0080, 0x1efd: 0x0080, 0x1efe: 0x0080, 0x1eff: 0x0080, + // Block 0x7c, offset 0x1f00 + 0x1f00: 0x00c0, 0x1f01: 0x00c0, 0x1f02: 0x00c0, 0x1f03: 0x00c0, 0x1f04: 0x00c0, 0x1f05: 0x00c0, + 0x1f06: 0x00c0, 0x1f07: 0x00c0, 0x1f08: 0x00c0, 0x1f09: 0x00c0, 0x1f0a: 0x00c0, 0x1f0b: 0x00c0, + 0x1f0c: 0x00c0, 0x1f0d: 0x00c0, 0x1f0e: 0x00c0, 0x1f0f: 0x00c0, 0x1f10: 0x00c0, 0x1f11: 0x00c0, + 0x1f12: 0x00c0, 0x1f13: 0x00c0, 0x1f14: 0x00c0, 0x1f15: 0x00c0, 0x1f16: 0x00c0, 0x1f17: 0x00c0, + 0x1f18: 0x00c0, 0x1f19: 0x00c0, 0x1f1a: 0x00c0, 0x1f1b: 0x00c0, 0x1f1c: 0x00c0, 0x1f1d: 0x00c0, + 0x1f1e: 0x00c0, 0x1f1f: 0x00c0, 0x1f20: 0x00c0, 0x1f21: 0x00c0, 0x1f22: 0x00c0, 0x1f23: 0x00c0, + 0x1f24: 0x00c0, 0x1f25: 0x00c0, 0x1f27: 0x00c0, + 0x1f2d: 0x00c0, + 0x1f30: 0x00c0, 0x1f31: 0x00c0, 0x1f32: 0x00c0, 0x1f33: 0x00c0, 0x1f34: 0x00c0, 0x1f35: 0x00c0, + 0x1f36: 0x00c0, 0x1f37: 0x00c0, 0x1f38: 0x00c0, 0x1f39: 0x00c0, 0x1f3a: 0x00c0, 0x1f3b: 0x00c0, + 0x1f3c: 0x00c0, 0x1f3d: 0x00c0, 0x1f3e: 0x00c0, 0x1f3f: 0x00c0, + // Block 0x7d, offset 0x1f40 + 0x1f40: 0x00c0, 0x1f41: 0x00c0, 0x1f42: 0x00c0, 0x1f43: 0x00c0, 0x1f44: 0x00c0, 0x1f45: 0x00c0, + 0x1f46: 0x00c0, 0x1f47: 0x00c0, 0x1f48: 0x00c0, 0x1f49: 0x00c0, 0x1f4a: 0x00c0, 0x1f4b: 0x00c0, + 0x1f4c: 0x00c0, 0x1f4d: 0x00c0, 0x1f4e: 0x00c0, 0x1f4f: 0x00c0, 0x1f50: 0x00c0, 0x1f51: 0x00c0, + 0x1f52: 0x00c0, 0x1f53: 0x00c0, 0x1f54: 0x00c0, 0x1f55: 0x00c0, 0x1f56: 0x00c0, 0x1f57: 0x00c0, + 0x1f58: 0x00c0, 0x1f59: 0x00c0, 0x1f5a: 0x00c0, 0x1f5b: 0x00c0, 0x1f5c: 0x00c0, 0x1f5d: 0x00c0, + 0x1f5e: 0x00c0, 0x1f5f: 0x00c0, 0x1f60: 0x00c0, 0x1f61: 0x00c0, 0x1f62: 0x00c0, 0x1f63: 0x00c0, + 0x1f64: 0x00c0, 0x1f65: 0x00c0, 0x1f66: 0x00c0, 0x1f67: 0x00c0, + 0x1f6f: 0x0080, + 0x1f70: 0x0080, + 0x1f7f: 0x00c6, + // Block 0x7e, offset 0x1f80 + 0x1f80: 0x00c0, 0x1f81: 0x00c0, 0x1f82: 0x00c0, 0x1f83: 0x00c0, 0x1f84: 0x00c0, 0x1f85: 0x00c0, + 0x1f86: 0x00c0, 0x1f87: 0x00c0, 0x1f88: 0x00c0, 0x1f89: 0x00c0, 0x1f8a: 0x00c0, 0x1f8b: 0x00c0, + 0x1f8c: 0x00c0, 0x1f8d: 0x00c0, 0x1f8e: 0x00c0, 0x1f8f: 0x00c0, 0x1f90: 0x00c0, 0x1f91: 0x00c0, + 0x1f92: 0x00c0, 0x1f93: 0x00c0, 0x1f94: 0x00c0, 0x1f95: 0x00c0, 0x1f96: 0x00c0, + 0x1fa0: 0x00c0, 0x1fa1: 0x00c0, 0x1fa2: 0x00c0, 0x1fa3: 0x00c0, + 0x1fa4: 0x00c0, 0x1fa5: 0x00c0, 0x1fa6: 0x00c0, 0x1fa8: 0x00c0, 0x1fa9: 0x00c0, + 0x1faa: 0x00c0, 0x1fab: 0x00c0, 0x1fac: 0x00c0, 0x1fad: 0x00c0, 0x1fae: 0x00c0, + 0x1fb0: 0x00c0, 0x1fb1: 0x00c0, 0x1fb2: 0x00c0, 0x1fb3: 0x00c0, 0x1fb4: 0x00c0, 0x1fb5: 0x00c0, + 0x1fb6: 0x00c0, 0x1fb8: 0x00c0, 0x1fb9: 0x00c0, 0x1fba: 0x00c0, 0x1fbb: 0x00c0, + 0x1fbc: 0x00c0, 0x1fbd: 0x00c0, 0x1fbe: 0x00c0, + // Block 0x7f, offset 0x1fc0 + 0x1fc0: 0x00c0, 0x1fc1: 0x00c0, 0x1fc2: 0x00c0, 0x1fc3: 0x00c0, 0x1fc4: 0x00c0, 0x1fc5: 0x00c0, + 0x1fc6: 0x00c0, 0x1fc8: 0x00c0, 0x1fc9: 0x00c0, 0x1fca: 0x00c0, 0x1fcb: 0x00c0, + 0x1fcc: 0x00c0, 0x1fcd: 0x00c0, 0x1fce: 0x00c0, 0x1fd0: 0x00c0, 0x1fd1: 0x00c0, + 0x1fd2: 0x00c0, 0x1fd3: 0x00c0, 0x1fd4: 0x00c0, 0x1fd5: 0x00c0, 0x1fd6: 0x00c0, + 0x1fd8: 0x00c0, 0x1fd9: 0x00c0, 0x1fda: 0x00c0, 0x1fdb: 0x00c0, 0x1fdc: 0x00c0, 0x1fdd: 0x00c0, + 0x1fde: 0x00c0, 0x1fe0: 0x00c3, 0x1fe1: 0x00c3, 0x1fe2: 0x00c3, 0x1fe3: 0x00c3, + 0x1fe4: 0x00c3, 0x1fe5: 0x00c3, 0x1fe6: 0x00c3, 0x1fe7: 0x00c3, 0x1fe8: 0x00c3, 0x1fe9: 0x00c3, + 0x1fea: 0x00c3, 0x1feb: 0x00c3, 0x1fec: 0x00c3, 0x1fed: 0x00c3, 0x1fee: 0x00c3, 0x1fef: 0x00c3, + 0x1ff0: 0x00c3, 0x1ff1: 0x00c3, 0x1ff2: 0x00c3, 0x1ff3: 0x00c3, 0x1ff4: 0x00c3, 0x1ff5: 0x00c3, + 0x1ff6: 0x00c3, 0x1ff7: 0x00c3, 0x1ff8: 0x00c3, 0x1ff9: 0x00c3, 0x1ffa: 0x00c3, 0x1ffb: 0x00c3, + 0x1ffc: 0x00c3, 0x1ffd: 0x00c3, 0x1ffe: 0x00c3, 0x1fff: 0x00c3, + // Block 0x80, offset 0x2000 + 0x2000: 0x0080, 0x2001: 0x0080, 0x2002: 0x0080, 0x2003: 0x0080, 0x2004: 0x0080, 0x2005: 0x0080, + 0x2006: 0x0080, 0x2007: 0x0080, 0x2008: 0x0080, 0x2009: 0x0080, 0x200a: 0x0080, 0x200b: 0x0080, + 0x200c: 0x0080, 0x200d: 0x0080, 0x200e: 0x0080, 0x200f: 0x0080, 0x2010: 0x0080, 0x2011: 0x0080, + 0x2012: 0x0080, 0x2013: 0x0080, 0x2014: 0x0080, 0x2015: 0x0080, 0x2016: 0x0080, 0x2017: 0x0080, + 0x2018: 0x0080, 0x2019: 0x0080, 0x201a: 0x0080, 0x201b: 0x0080, 0x201c: 0x0080, 0x201d: 0x0080, + 0x201e: 0x0080, 0x201f: 0x0080, 0x2020: 0x0080, 0x2021: 0x0080, 0x2022: 0x0080, 0x2023: 0x0080, + 0x2024: 0x0080, 0x2025: 0x0080, 0x2026: 0x0080, 0x2027: 0x0080, 0x2028: 0x0080, 0x2029: 0x0080, + 0x202a: 0x0080, 0x202b: 0x0080, 0x202c: 0x0080, 0x202d: 0x0080, 0x202e: 0x0080, 0x202f: 0x00c0, + 0x2030: 0x0080, 0x2031: 0x0080, 0x2032: 0x0080, 0x2033: 0x0080, 0x2034: 0x0080, 0x2035: 0x0080, + 0x2036: 0x0080, 0x2037: 0x0080, 0x2038: 0x0080, 0x2039: 0x0080, 0x203a: 0x0080, 0x203b: 0x0080, + 0x203c: 0x0080, 0x203d: 0x0080, 0x203e: 0x0080, 0x203f: 0x0080, + // Block 0x81, offset 0x2040 + 0x2040: 0x0080, 0x2041: 0x0080, 0x2042: 0x0080, 0x2043: 0x0080, 0x2044: 0x0080, 0x2045: 0x0080, + 0x2046: 0x0080, 0x2047: 0x0080, 0x2048: 0x0080, 0x2049: 0x0080, + // Block 0x82, offset 0x2080 + 0x2080: 0x008c, 0x2081: 0x008c, 0x2082: 0x008c, 0x2083: 0x008c, 0x2084: 0x008c, 0x2085: 0x008c, + 0x2086: 0x008c, 0x2087: 0x008c, 0x2088: 0x008c, 0x2089: 0x008c, 0x208a: 0x008c, 0x208b: 0x008c, + 0x208c: 0x008c, 0x208d: 0x008c, 0x208e: 0x008c, 0x208f: 0x008c, 0x2090: 0x008c, 0x2091: 0x008c, + 0x2092: 0x008c, 0x2093: 0x008c, 0x2094: 0x008c, 0x2095: 0x008c, 0x2096: 0x008c, 0x2097: 0x008c, + 0x2098: 0x008c, 0x2099: 0x008c, 0x209b: 0x008c, 0x209c: 0x008c, 0x209d: 0x008c, + 0x209e: 0x008c, 0x209f: 0x008c, 0x20a0: 0x008c, 0x20a1: 0x008c, 0x20a2: 0x008c, 0x20a3: 0x008c, + 0x20a4: 0x008c, 0x20a5: 0x008c, 0x20a6: 0x008c, 0x20a7: 0x008c, 0x20a8: 0x008c, 0x20a9: 0x008c, + 0x20aa: 0x008c, 0x20ab: 0x008c, 0x20ac: 0x008c, 0x20ad: 0x008c, 0x20ae: 0x008c, 0x20af: 0x008c, + 0x20b0: 0x008c, 0x20b1: 0x008c, 0x20b2: 0x008c, 0x20b3: 0x008c, 0x20b4: 0x008c, 0x20b5: 0x008c, + 0x20b6: 0x008c, 0x20b7: 0x008c, 0x20b8: 0x008c, 0x20b9: 0x008c, 0x20ba: 0x008c, 0x20bb: 0x008c, + 0x20bc: 0x008c, 0x20bd: 0x008c, 0x20be: 0x008c, 0x20bf: 0x008c, + // Block 0x83, offset 0x20c0 + 0x20c0: 0x008c, 0x20c1: 0x008c, 0x20c2: 0x008c, 0x20c3: 0x008c, 0x20c4: 0x008c, 0x20c5: 0x008c, + 0x20c6: 0x008c, 0x20c7: 0x008c, 0x20c8: 0x008c, 0x20c9: 0x008c, 0x20ca: 0x008c, 0x20cb: 0x008c, + 0x20cc: 0x008c, 0x20cd: 0x008c, 0x20ce: 0x008c, 0x20cf: 0x008c, 0x20d0: 0x008c, 0x20d1: 0x008c, + 0x20d2: 0x008c, 0x20d3: 0x008c, 0x20d4: 0x008c, 0x20d5: 0x008c, 0x20d6: 0x008c, 0x20d7: 0x008c, + 0x20d8: 0x008c, 0x20d9: 0x008c, 0x20da: 0x008c, 0x20db: 0x008c, 0x20dc: 0x008c, 0x20dd: 0x008c, + 0x20de: 0x008c, 0x20df: 0x008c, 0x20e0: 0x008c, 0x20e1: 0x008c, 0x20e2: 0x008c, 0x20e3: 0x008c, + 0x20e4: 0x008c, 0x20e5: 0x008c, 0x20e6: 0x008c, 0x20e7: 0x008c, 0x20e8: 0x008c, 0x20e9: 0x008c, + 0x20ea: 0x008c, 0x20eb: 0x008c, 0x20ec: 0x008c, 0x20ed: 0x008c, 0x20ee: 0x008c, 0x20ef: 0x008c, + 0x20f0: 0x008c, 0x20f1: 0x008c, 0x20f2: 0x008c, 0x20f3: 0x008c, + // Block 0x84, offset 0x2100 + 0x2100: 0x008c, 0x2101: 0x008c, 0x2102: 0x008c, 0x2103: 0x008c, 0x2104: 0x008c, 0x2105: 0x008c, + 0x2106: 0x008c, 0x2107: 0x008c, 0x2108: 0x008c, 0x2109: 0x008c, 0x210a: 0x008c, 0x210b: 0x008c, + 0x210c: 0x008c, 0x210d: 0x008c, 0x210e: 0x008c, 0x210f: 0x008c, 0x2110: 0x008c, 0x2111: 0x008c, + 0x2112: 0x008c, 0x2113: 0x008c, 0x2114: 0x008c, 0x2115: 0x008c, 0x2116: 0x008c, 0x2117: 0x008c, + 0x2118: 0x008c, 0x2119: 0x008c, 0x211a: 0x008c, 0x211b: 0x008c, 0x211c: 0x008c, 0x211d: 0x008c, + 0x211e: 0x008c, 0x211f: 0x008c, 0x2120: 0x008c, 0x2121: 0x008c, 0x2122: 0x008c, 0x2123: 0x008c, + 0x2124: 0x008c, 0x2125: 0x008c, 0x2126: 0x008c, 0x2127: 0x008c, 0x2128: 0x008c, 0x2129: 0x008c, + 0x212a: 0x008c, 0x212b: 0x008c, 0x212c: 0x008c, 0x212d: 0x008c, 0x212e: 0x008c, 0x212f: 0x008c, + 0x2130: 0x008c, 0x2131: 0x008c, 0x2132: 0x008c, 0x2133: 0x008c, 0x2134: 0x008c, 0x2135: 0x008c, + 0x2136: 0x008c, 0x2137: 0x008c, 0x2138: 0x008c, 0x2139: 0x008c, 0x213a: 0x008c, 0x213b: 0x008c, + 0x213c: 0x008c, 0x213d: 0x008c, 0x213e: 0x008c, 0x213f: 0x008c, + // Block 0x85, offset 0x2140 + 0x2140: 0x008c, 0x2141: 0x008c, 0x2142: 0x008c, 0x2143: 0x008c, 0x2144: 0x008c, 0x2145: 0x008c, + 0x2146: 0x008c, 0x2147: 0x008c, 0x2148: 0x008c, 0x2149: 0x008c, 0x214a: 0x008c, 0x214b: 0x008c, + 0x214c: 0x008c, 0x214d: 0x008c, 0x214e: 0x008c, 0x214f: 0x008c, 0x2150: 0x008c, 0x2151: 0x008c, + 0x2152: 0x008c, 0x2153: 0x008c, 0x2154: 0x008c, 0x2155: 0x008c, + 0x2170: 0x0080, 0x2171: 0x0080, 0x2172: 0x0080, 0x2173: 0x0080, 0x2174: 0x0080, 0x2175: 0x0080, + 0x2176: 0x0080, 0x2177: 0x0080, 0x2178: 0x0080, 0x2179: 0x0080, 0x217a: 0x0080, 0x217b: 0x0080, + // Block 0x86, offset 0x2180 + 0x2180: 0x0080, 0x2181: 0x0080, 0x2182: 0x0080, 0x2183: 0x0080, 0x2184: 0x0080, 0x2185: 0x00cc, + 0x2186: 0x00c0, 0x2187: 0x00cc, 0x2188: 0x0080, 0x2189: 0x0080, 0x218a: 0x0080, 0x218b: 0x0080, + 0x218c: 0x0080, 0x218d: 0x0080, 0x218e: 0x0080, 0x218f: 0x0080, 0x2190: 0x0080, 0x2191: 0x0080, + 0x2192: 0x0080, 0x2193: 0x0080, 0x2194: 0x0080, 0x2195: 0x0080, 0x2196: 0x0080, 0x2197: 0x0080, + 0x2198: 0x0080, 0x2199: 0x0080, 0x219a: 0x0080, 0x219b: 0x0080, 0x219c: 0x0080, 0x219d: 0x0080, + 0x219e: 0x0080, 0x219f: 0x0080, 0x21a0: 0x0080, 0x21a1: 0x008c, 0x21a2: 0x008c, 0x21a3: 0x008c, + 0x21a4: 0x008c, 0x21a5: 0x008c, 0x21a6: 0x008c, 0x21a7: 0x008c, 0x21a8: 0x008c, 0x21a9: 0x008c, + 0x21aa: 0x00c3, 0x21ab: 0x00c3, 0x21ac: 0x00c3, 0x21ad: 0x00c3, 0x21ae: 0x0040, 0x21af: 0x0040, + 0x21b0: 0x0080, 0x21b1: 0x0040, 0x21b2: 0x0040, 0x21b3: 0x0040, 0x21b4: 0x0040, 0x21b5: 0x0040, + 0x21b6: 0x0080, 0x21b7: 0x0080, 0x21b8: 0x008c, 0x21b9: 0x008c, 0x21ba: 0x008c, 0x21bb: 0x0040, + 0x21bc: 0x00c0, 0x21bd: 0x0080, 0x21be: 0x0080, 0x21bf: 0x0080, + // Block 0x87, offset 0x21c0 + 0x21c1: 0x00cc, 0x21c2: 0x00cc, 0x21c3: 0x00cc, 0x21c4: 0x00cc, 0x21c5: 0x00cc, + 0x21c6: 0x00cc, 0x21c7: 0x00cc, 0x21c8: 0x00cc, 0x21c9: 0x00cc, 0x21ca: 0x00cc, 0x21cb: 0x00cc, + 0x21cc: 0x00cc, 0x21cd: 0x00cc, 0x21ce: 0x00cc, 0x21cf: 0x00cc, 0x21d0: 0x00cc, 0x21d1: 0x00cc, + 0x21d2: 0x00cc, 0x21d3: 0x00cc, 0x21d4: 0x00cc, 0x21d5: 0x00cc, 0x21d6: 0x00cc, 0x21d7: 0x00cc, + 0x21d8: 0x00cc, 0x21d9: 0x00cc, 0x21da: 0x00cc, 0x21db: 0x00cc, 0x21dc: 0x00cc, 0x21dd: 0x00cc, + 0x21de: 0x00cc, 0x21df: 0x00cc, 0x21e0: 0x00cc, 0x21e1: 0x00cc, 0x21e2: 0x00cc, 0x21e3: 0x00cc, + 0x21e4: 0x00cc, 0x21e5: 0x00cc, 0x21e6: 0x00cc, 0x21e7: 0x00cc, 0x21e8: 0x00cc, 0x21e9: 0x00cc, + 0x21ea: 0x00cc, 0x21eb: 0x00cc, 0x21ec: 0x00cc, 0x21ed: 0x00cc, 0x21ee: 0x00cc, 0x21ef: 0x00cc, + 0x21f0: 0x00cc, 0x21f1: 0x00cc, 0x21f2: 0x00cc, 0x21f3: 0x00cc, 0x21f4: 0x00cc, 0x21f5: 0x00cc, + 0x21f6: 0x00cc, 0x21f7: 0x00cc, 0x21f8: 0x00cc, 0x21f9: 0x00cc, 0x21fa: 0x00cc, 0x21fb: 0x00cc, + 0x21fc: 0x00cc, 0x21fd: 0x00cc, 0x21fe: 0x00cc, 0x21ff: 0x00cc, + // Block 0x88, offset 0x2200 + 0x2200: 0x00cc, 0x2201: 0x00cc, 0x2202: 0x00cc, 0x2203: 0x00cc, 0x2204: 0x00cc, 0x2205: 0x00cc, + 0x2206: 0x00cc, 0x2207: 0x00cc, 0x2208: 0x00cc, 0x2209: 0x00cc, 0x220a: 0x00cc, 0x220b: 0x00cc, + 0x220c: 0x00cc, 0x220d: 0x00cc, 0x220e: 0x00cc, 0x220f: 0x00cc, 0x2210: 0x00cc, 0x2211: 0x00cc, + 0x2212: 0x00cc, 0x2213: 0x00cc, 0x2214: 0x00cc, 0x2215: 0x00cc, 0x2216: 0x00cc, + 0x2219: 0x00c3, 0x221a: 0x00c3, 0x221b: 0x0080, 0x221c: 0x0080, 0x221d: 0x00cc, + 0x221e: 0x00cc, 0x221f: 0x008c, 0x2220: 0x0080, 0x2221: 0x00cc, 0x2222: 0x00cc, 0x2223: 0x00cc, + 0x2224: 0x00cc, 0x2225: 0x00cc, 0x2226: 0x00cc, 0x2227: 0x00cc, 0x2228: 0x00cc, 0x2229: 0x00cc, + 0x222a: 0x00cc, 0x222b: 0x00cc, 0x222c: 0x00cc, 0x222d: 0x00cc, 0x222e: 0x00cc, 0x222f: 0x00cc, + 0x2230: 0x00cc, 0x2231: 0x00cc, 0x2232: 0x00cc, 0x2233: 0x00cc, 0x2234: 0x00cc, 0x2235: 0x00cc, + 0x2236: 0x00cc, 0x2237: 0x00cc, 0x2238: 0x00cc, 0x2239: 0x00cc, 0x223a: 0x00cc, 0x223b: 0x00cc, + 0x223c: 0x00cc, 0x223d: 0x00cc, 0x223e: 0x00cc, 0x223f: 0x00cc, + // Block 0x89, offset 0x2240 + 0x2240: 0x00cc, 0x2241: 0x00cc, 0x2242: 0x00cc, 0x2243: 0x00cc, 0x2244: 0x00cc, 0x2245: 0x00cc, + 0x2246: 0x00cc, 0x2247: 0x00cc, 0x2248: 0x00cc, 0x2249: 0x00cc, 0x224a: 0x00cc, 0x224b: 0x00cc, + 0x224c: 0x00cc, 0x224d: 0x00cc, 0x224e: 0x00cc, 0x224f: 0x00cc, 0x2250: 0x00cc, 0x2251: 0x00cc, + 0x2252: 0x00cc, 0x2253: 0x00cc, 0x2254: 0x00cc, 0x2255: 0x00cc, 0x2256: 0x00cc, 0x2257: 0x00cc, + 0x2258: 0x00cc, 0x2259: 0x00cc, 0x225a: 0x00cc, 0x225b: 0x00cc, 0x225c: 0x00cc, 0x225d: 0x00cc, + 0x225e: 0x00cc, 0x225f: 0x00cc, 0x2260: 0x00cc, 0x2261: 0x00cc, 0x2262: 0x00cc, 0x2263: 0x00cc, + 0x2264: 0x00cc, 0x2265: 0x00cc, 0x2266: 0x00cc, 0x2267: 0x00cc, 0x2268: 0x00cc, 0x2269: 0x00cc, + 0x226a: 0x00cc, 0x226b: 0x00cc, 0x226c: 0x00cc, 0x226d: 0x00cc, 0x226e: 0x00cc, 0x226f: 0x00cc, + 0x2270: 0x00cc, 0x2271: 0x00cc, 0x2272: 0x00cc, 0x2273: 0x00cc, 0x2274: 0x00cc, 0x2275: 0x00cc, + 0x2276: 0x00cc, 0x2277: 0x00cc, 0x2278: 0x00cc, 0x2279: 0x00cc, 0x227a: 0x00cc, 0x227b: 0x00d2, + 0x227c: 0x00c0, 0x227d: 0x00cc, 0x227e: 0x00cc, 0x227f: 0x008c, + // Block 0x8a, offset 0x2280 + 0x2285: 0x00c0, + 0x2286: 0x00c0, 0x2287: 0x00c0, 0x2288: 0x00c0, 0x2289: 0x00c0, 0x228a: 0x00c0, 0x228b: 0x00c0, + 0x228c: 0x00c0, 0x228d: 0x00c0, 0x228e: 0x00c0, 0x228f: 0x00c0, 0x2290: 0x00c0, 0x2291: 0x00c0, + 0x2292: 0x00c0, 0x2293: 0x00c0, 0x2294: 0x00c0, 0x2295: 0x00c0, 0x2296: 0x00c0, 0x2297: 0x00c0, + 0x2298: 0x00c0, 0x2299: 0x00c0, 0x229a: 0x00c0, 0x229b: 0x00c0, 0x229c: 0x00c0, 0x229d: 0x00c0, + 0x229e: 0x00c0, 0x229f: 0x00c0, 0x22a0: 0x00c0, 0x22a1: 0x00c0, 0x22a2: 0x00c0, 0x22a3: 0x00c0, + 0x22a4: 0x00c0, 0x22a5: 0x00c0, 0x22a6: 0x00c0, 0x22a7: 0x00c0, 0x22a8: 0x00c0, 0x22a9: 0x00c0, + 0x22aa: 0x00c0, 0x22ab: 0x00c0, 0x22ac: 0x00c0, 0x22ad: 0x00c0, 0x22ae: 0x00c0, + 0x22b1: 0x0080, 0x22b2: 0x0080, 0x22b3: 0x0080, 0x22b4: 0x0080, 0x22b5: 0x0080, + 0x22b6: 0x0080, 0x22b7: 0x0080, 0x22b8: 0x0080, 0x22b9: 0x0080, 0x22ba: 0x0080, 0x22bb: 0x0080, + 0x22bc: 0x0080, 0x22bd: 0x0080, 0x22be: 0x0080, 0x22bf: 0x0080, + // Block 0x8b, offset 0x22c0 + 0x22c0: 0x0080, 0x22c1: 0x0080, 0x22c2: 0x0080, 0x22c3: 0x0080, 0x22c4: 0x0080, 0x22c5: 0x0080, + 0x22c6: 0x0080, 0x22c7: 0x0080, 0x22c8: 0x0080, 0x22c9: 0x0080, 0x22ca: 0x0080, 0x22cb: 0x0080, + 0x22cc: 0x0080, 0x22cd: 0x0080, 0x22ce: 0x0080, 0x22cf: 0x0080, 0x22d0: 0x0080, 0x22d1: 0x0080, + 0x22d2: 0x0080, 0x22d3: 0x0080, 0x22d4: 0x0080, 0x22d5: 0x0080, 0x22d6: 0x0080, 0x22d7: 0x0080, + 0x22d8: 0x0080, 0x22d9: 0x0080, 0x22da: 0x0080, 0x22db: 0x0080, 0x22dc: 0x0080, 0x22dd: 0x0080, + 0x22de: 0x0080, 0x22df: 0x0080, 0x22e0: 0x0080, 0x22e1: 0x0080, 0x22e2: 0x0080, 0x22e3: 0x0080, + 0x22e4: 0x0040, 0x22e5: 0x0080, 0x22e6: 0x0080, 0x22e7: 0x0080, 0x22e8: 0x0080, 0x22e9: 0x0080, + 0x22ea: 0x0080, 0x22eb: 0x0080, 0x22ec: 0x0080, 0x22ed: 0x0080, 0x22ee: 0x0080, 0x22ef: 0x0080, + 0x22f0: 0x0080, 0x22f1: 0x0080, 0x22f2: 0x0080, 0x22f3: 0x0080, 0x22f4: 0x0080, 0x22f5: 0x0080, + 0x22f6: 0x0080, 0x22f7: 0x0080, 0x22f8: 0x0080, 0x22f9: 0x0080, 0x22fa: 0x0080, 0x22fb: 0x0080, + 0x22fc: 0x0080, 0x22fd: 0x0080, 0x22fe: 0x0080, 0x22ff: 0x0080, + // Block 0x8c, offset 0x2300 + 0x2300: 0x0080, 0x2301: 0x0080, 0x2302: 0x0080, 0x2303: 0x0080, 0x2304: 0x0080, 0x2305: 0x0080, + 0x2306: 0x0080, 0x2307: 0x0080, 0x2308: 0x0080, 0x2309: 0x0080, 0x230a: 0x0080, 0x230b: 0x0080, + 0x230c: 0x0080, 0x230d: 0x0080, 0x230e: 0x0080, 0x2310: 0x0080, 0x2311: 0x0080, + 0x2312: 0x0080, 0x2313: 0x0080, 0x2314: 0x0080, 0x2315: 0x0080, 0x2316: 0x0080, 0x2317: 0x0080, + 0x2318: 0x0080, 0x2319: 0x0080, 0x231a: 0x0080, 0x231b: 0x0080, 0x231c: 0x0080, 0x231d: 0x0080, + 0x231e: 0x0080, 0x231f: 0x0080, 0x2320: 0x00c0, 0x2321: 0x00c0, 0x2322: 0x00c0, 0x2323: 0x00c0, + 0x2324: 0x00c0, 0x2325: 0x00c0, 0x2326: 0x00c0, 0x2327: 0x00c0, 0x2328: 0x00c0, 0x2329: 0x00c0, + 0x232a: 0x00c0, 0x232b: 0x00c0, 0x232c: 0x00c0, 0x232d: 0x00c0, 0x232e: 0x00c0, 0x232f: 0x00c0, + 0x2330: 0x00c0, 0x2331: 0x00c0, 0x2332: 0x00c0, 0x2333: 0x00c0, 0x2334: 0x00c0, 0x2335: 0x00c0, + 0x2336: 0x00c0, 0x2337: 0x00c0, 0x2338: 0x00c0, 0x2339: 0x00c0, 0x233a: 0x00c0, + // Block 0x8d, offset 0x2340 + 0x2340: 0x0080, 0x2341: 0x0080, 0x2342: 0x0080, 0x2343: 0x0080, 0x2344: 0x0080, 0x2345: 0x0080, + 0x2346: 0x0080, 0x2347: 0x0080, 0x2348: 0x0080, 0x2349: 0x0080, 0x234a: 0x0080, 0x234b: 0x0080, + 0x234c: 0x0080, 0x234d: 0x0080, 0x234e: 0x0080, 0x234f: 0x0080, 0x2350: 0x0080, 0x2351: 0x0080, + 0x2352: 0x0080, 0x2353: 0x0080, 0x2354: 0x0080, 0x2355: 0x0080, 0x2356: 0x0080, 0x2357: 0x0080, + 0x2358: 0x0080, 0x2359: 0x0080, 0x235a: 0x0080, 0x235b: 0x0080, 0x235c: 0x0080, 0x235d: 0x0080, + 0x235e: 0x0080, 0x235f: 0x0080, 0x2360: 0x0080, 0x2361: 0x0080, 0x2362: 0x0080, 0x2363: 0x0080, + 0x2370: 0x00cc, 0x2371: 0x00cc, 0x2372: 0x00cc, 0x2373: 0x00cc, 0x2374: 0x00cc, 0x2375: 0x00cc, + 0x2376: 0x00cc, 0x2377: 0x00cc, 0x2378: 0x00cc, 0x2379: 0x00cc, 0x237a: 0x00cc, 0x237b: 0x00cc, + 0x237c: 0x00cc, 0x237d: 0x00cc, 0x237e: 0x00cc, 0x237f: 0x00cc, + // Block 0x8e, offset 0x2380 + 0x2380: 0x0080, 0x2381: 0x0080, 0x2382: 0x0080, 0x2383: 0x0080, 0x2384: 0x0080, 0x2385: 0x0080, + 0x2386: 0x0080, 0x2387: 0x0080, 0x2388: 0x0080, 0x2389: 0x0080, 0x238a: 0x0080, 0x238b: 0x0080, + 0x238c: 0x0080, 0x238d: 0x0080, 0x238e: 0x0080, 0x238f: 0x0080, 0x2390: 0x0080, 0x2391: 0x0080, + 0x2392: 0x0080, 0x2393: 0x0080, 0x2394: 0x0080, 0x2395: 0x0080, 0x2396: 0x0080, 0x2397: 0x0080, + 0x2398: 0x0080, 0x2399: 0x0080, 0x239a: 0x0080, 0x239b: 0x0080, 0x239c: 0x0080, 0x239d: 0x0080, + 0x239e: 0x0080, 0x23a0: 0x0080, 0x23a1: 0x0080, 0x23a2: 0x0080, 0x23a3: 0x0080, + 0x23a4: 0x0080, 0x23a5: 0x0080, 0x23a6: 0x0080, 0x23a7: 0x0080, 0x23a8: 0x0080, 0x23a9: 0x0080, + 0x23aa: 0x0080, 0x23ab: 0x0080, 0x23ac: 0x0080, 0x23ad: 0x0080, 0x23ae: 0x0080, 0x23af: 0x0080, + 0x23b0: 0x0080, 0x23b1: 0x0080, 0x23b2: 0x0080, 0x23b3: 0x0080, 0x23b4: 0x0080, 0x23b5: 0x0080, + 0x23b6: 0x0080, 0x23b7: 0x0080, 0x23b8: 0x0080, 0x23b9: 0x0080, 0x23ba: 0x0080, 0x23bb: 0x0080, + 0x23bc: 0x0080, 0x23bd: 0x0080, 0x23be: 0x0080, 0x23bf: 0x0080, + // Block 0x8f, offset 0x23c0 + 0x23c0: 0x0080, 0x23c1: 0x0080, 0x23c2: 0x0080, 0x23c3: 0x0080, 0x23c4: 0x0080, 0x23c5: 0x0080, + 0x23c6: 0x0080, 0x23c7: 0x0080, 0x23c8: 0x0080, 0x23c9: 0x0080, 0x23ca: 0x0080, 0x23cb: 0x0080, + 0x23cc: 0x0080, 0x23cd: 0x0080, 0x23ce: 0x0080, 0x23cf: 0x0080, 0x23d0: 0x008c, 0x23d1: 0x008c, + 0x23d2: 0x008c, 0x23d3: 0x008c, 0x23d4: 0x008c, 0x23d5: 0x008c, 0x23d6: 0x008c, 0x23d7: 0x008c, + 0x23d8: 0x008c, 0x23d9: 0x008c, 0x23da: 0x008c, 0x23db: 0x008c, 0x23dc: 0x008c, 0x23dd: 0x008c, + 0x23de: 0x008c, 0x23df: 0x008c, 0x23e0: 0x008c, 0x23e1: 0x008c, 0x23e2: 0x008c, 0x23e3: 0x008c, + 0x23e4: 0x008c, 0x23e5: 0x008c, 0x23e6: 0x008c, 0x23e7: 0x008c, 0x23e8: 0x008c, 0x23e9: 0x008c, + 0x23ea: 0x008c, 0x23eb: 0x008c, 0x23ec: 0x008c, 0x23ed: 0x008c, 0x23ee: 0x008c, 0x23ef: 0x008c, + 0x23f0: 0x008c, 0x23f1: 0x008c, 0x23f2: 0x008c, 0x23f3: 0x008c, 0x23f4: 0x008c, 0x23f5: 0x008c, + 0x23f6: 0x008c, 0x23f7: 0x008c, 0x23f8: 0x008c, 0x23f9: 0x008c, 0x23fa: 0x008c, 0x23fb: 0x008c, + 0x23fc: 0x008c, 0x23fd: 0x008c, 0x23fe: 0x008c, + // Block 0x90, offset 0x2400 + 0x2400: 0x008c, 0x2401: 0x008c, 0x2402: 0x008c, 0x2403: 0x008c, 0x2404: 0x008c, 0x2405: 0x008c, + 0x2406: 0x008c, 0x2407: 0x008c, 0x2408: 0x008c, 0x2409: 0x008c, 0x240a: 0x008c, 0x240b: 0x008c, + 0x240c: 0x008c, 0x240d: 0x008c, 0x240e: 0x008c, 0x240f: 0x008c, 0x2410: 0x008c, 0x2411: 0x008c, + 0x2412: 0x008c, 0x2413: 0x008c, 0x2414: 0x008c, 0x2415: 0x008c, 0x2416: 0x008c, 0x2417: 0x008c, + 0x2418: 0x0080, 0x2419: 0x0080, 0x241a: 0x0080, 0x241b: 0x0080, 0x241c: 0x0080, 0x241d: 0x0080, + 0x241e: 0x0080, 0x241f: 0x0080, 0x2420: 0x0080, 0x2421: 0x0080, 0x2422: 0x0080, 0x2423: 0x0080, + 0x2424: 0x0080, 0x2425: 0x0080, 0x2426: 0x0080, 0x2427: 0x0080, 0x2428: 0x0080, 0x2429: 0x0080, + 0x242a: 0x0080, 0x242b: 0x0080, 0x242c: 0x0080, 0x242d: 0x0080, 0x242e: 0x0080, 0x242f: 0x0080, + 0x2430: 0x0080, 0x2431: 0x0080, 0x2432: 0x0080, 0x2433: 0x0080, 0x2434: 0x0080, 0x2435: 0x0080, + 0x2436: 0x0080, 0x2437: 0x0080, 0x2438: 0x0080, 0x2439: 0x0080, 0x243a: 0x0080, 0x243b: 0x0080, + 0x243c: 0x0080, 0x243d: 0x0080, 0x243e: 0x0080, 0x243f: 0x0080, + // Block 0x91, offset 0x2440 + 0x2440: 0x00cc, 0x2441: 0x00cc, 0x2442: 0x00cc, 0x2443: 0x00cc, 0x2444: 0x00cc, 0x2445: 0x00cc, + 0x2446: 0x00cc, 0x2447: 0x00cc, 0x2448: 0x00cc, 0x2449: 0x00cc, 0x244a: 0x00cc, 0x244b: 0x00cc, + 0x244c: 0x00cc, 0x244d: 0x00cc, 0x244e: 0x00cc, 0x244f: 0x00cc, 0x2450: 0x00cc, 0x2451: 0x00cc, + 0x2452: 0x00cc, 0x2453: 0x00cc, 0x2454: 0x00cc, 0x2455: 0x00cc, 0x2456: 0x00cc, 0x2457: 0x00cc, + 0x2458: 0x00cc, 0x2459: 0x00cc, 0x245a: 0x00cc, 0x245b: 0x00cc, 0x245c: 0x00cc, 0x245d: 0x00cc, + 0x245e: 0x00cc, 0x245f: 0x00cc, 0x2460: 0x00cc, 0x2461: 0x00cc, 0x2462: 0x00cc, 0x2463: 0x00cc, + 0x2464: 0x00cc, 0x2465: 0x00cc, 0x2466: 0x00cc, 0x2467: 0x00cc, 0x2468: 0x00cc, 0x2469: 0x00cc, + 0x246a: 0x00cc, 0x246b: 0x00cc, 0x246c: 0x00cc, 0x246d: 0x00cc, 0x246e: 0x00cc, 0x246f: 0x00cc, + 0x2470: 0x00cc, 0x2471: 0x00cc, 0x2472: 0x00cc, 0x2473: 0x00cc, 0x2474: 0x00cc, 0x2475: 0x00cc, + 0x2476: 0x00cc, 0x2477: 0x00cc, 0x2478: 0x00cc, 0x2479: 0x00cc, 0x247a: 0x00cc, 0x247b: 0x00cc, + 0x247c: 0x00cc, 0x247d: 0x00cc, 0x247e: 0x00cc, 0x247f: 0x00cc, + // Block 0x92, offset 0x2480 + 0x2480: 0x00cc, 0x2481: 0x00cc, 0x2482: 0x00cc, 0x2483: 0x00cc, 0x2484: 0x00cc, 0x2485: 0x00cc, + 0x2486: 0x00cc, 0x2487: 0x00cc, 0x2488: 0x00cc, 0x2489: 0x00cc, 0x248a: 0x00cc, 0x248b: 0x00cc, + 0x248c: 0x00cc, 0x248d: 0x00cc, 0x248e: 0x00cc, 0x248f: 0x00cc, 0x2490: 0x00cc, 0x2491: 0x00cc, + 0x2492: 0x00cc, 0x2493: 0x00cc, 0x2494: 0x00cc, 0x2495: 0x00cc, 0x2496: 0x00cc, 0x2497: 0x00cc, + 0x2498: 0x00cc, 0x2499: 0x00cc, 0x249a: 0x00cc, 0x249b: 0x00cc, 0x249c: 0x00cc, 0x249d: 0x00cc, + 0x249e: 0x00cc, 0x249f: 0x00cc, 0x24a0: 0x00cc, 0x24a1: 0x00cc, 0x24a2: 0x00cc, 0x24a3: 0x00cc, + 0x24a4: 0x00cc, 0x24a5: 0x00cc, 0x24a6: 0x00cc, 0x24a7: 0x00cc, 0x24a8: 0x00cc, 0x24a9: 0x00cc, + 0x24aa: 0x00cc, 0x24ab: 0x00cc, 0x24ac: 0x00cc, 0x24ad: 0x00cc, 0x24ae: 0x00cc, 0x24af: 0x00cc, + 0x24b0: 0x00cc, 0x24b1: 0x00cc, 0x24b2: 0x00cc, 0x24b3: 0x00cc, 0x24b4: 0x00cc, 0x24b5: 0x00cc, + // Block 0x93, offset 0x24c0 + 0x24c0: 0x00cc, 0x24c1: 0x00cc, 0x24c2: 0x00cc, 0x24c3: 0x00cc, 0x24c4: 0x00cc, 0x24c5: 0x00cc, + 0x24c6: 0x00cc, 0x24c7: 0x00cc, 0x24c8: 0x00cc, 0x24c9: 0x00cc, 0x24ca: 0x00cc, 0x24cb: 0x00cc, + 0x24cc: 0x00cc, 0x24cd: 0x00cc, 0x24ce: 0x00cc, 0x24cf: 0x00cc, 0x24d0: 0x00cc, 0x24d1: 0x00cc, + 0x24d2: 0x00cc, 0x24d3: 0x00cc, 0x24d4: 0x00cc, 0x24d5: 0x00cc, 0x24d6: 0x00cc, 0x24d7: 0x00cc, + 0x24d8: 0x00cc, 0x24d9: 0x00cc, 0x24da: 0x00cc, 0x24db: 0x00cc, 0x24dc: 0x00cc, 0x24dd: 0x00cc, + 0x24de: 0x00cc, 0x24df: 0x00cc, 0x24e0: 0x00cc, 0x24e1: 0x00cc, 0x24e2: 0x00cc, 0x24e3: 0x00cc, + 0x24e4: 0x00cc, 0x24e5: 0x00cc, 0x24e6: 0x00cc, 0x24e7: 0x00cc, 0x24e8: 0x00cc, 0x24e9: 0x00cc, + 0x24ea: 0x00cc, + // Block 0x94, offset 0x2500 + 0x2500: 0x00c0, 0x2501: 0x00c0, 0x2502: 0x00c0, 0x2503: 0x00c0, 0x2504: 0x00c0, 0x2505: 0x00c0, + 0x2506: 0x00c0, 0x2507: 0x00c0, 0x2508: 0x00c0, 0x2509: 0x00c0, 0x250a: 0x00c0, 0x250b: 0x00c0, + 0x250c: 0x00c0, 0x2510: 0x0080, 0x2511: 0x0080, + 0x2512: 0x0080, 0x2513: 0x0080, 0x2514: 0x0080, 0x2515: 0x0080, 0x2516: 0x0080, 0x2517: 0x0080, + 0x2518: 0x0080, 0x2519: 0x0080, 0x251a: 0x0080, 0x251b: 0x0080, 0x251c: 0x0080, 0x251d: 0x0080, + 0x251e: 0x0080, 0x251f: 0x0080, 0x2520: 0x0080, 0x2521: 0x0080, 0x2522: 0x0080, 0x2523: 0x0080, + 0x2524: 0x0080, 0x2525: 0x0080, 0x2526: 0x0080, 0x2527: 0x0080, 0x2528: 0x0080, 0x2529: 0x0080, + 0x252a: 0x0080, 0x252b: 0x0080, 0x252c: 0x0080, 0x252d: 0x0080, 0x252e: 0x0080, 0x252f: 0x0080, + 0x2530: 0x0080, 0x2531: 0x0080, 0x2532: 0x0080, 0x2533: 0x0080, 0x2534: 0x0080, 0x2535: 0x0080, + 0x2536: 0x0080, 0x2537: 0x0080, 0x2538: 0x0080, 0x2539: 0x0080, 0x253a: 0x0080, 0x253b: 0x0080, + 0x253c: 0x0080, 0x253d: 0x0080, 0x253e: 0x0080, 0x253f: 0x0080, + // Block 0x95, offset 0x2540 + 0x2540: 0x0080, 0x2541: 0x0080, 0x2542: 0x0080, 0x2543: 0x0080, 0x2544: 0x0080, 0x2545: 0x0080, + 0x2546: 0x0080, + 0x2550: 0x00c0, 0x2551: 0x00c0, + 0x2552: 0x00c0, 0x2553: 0x00c0, 0x2554: 0x00c0, 0x2555: 0x00c0, 0x2556: 0x00c0, 0x2557: 0x00c0, + 0x2558: 0x00c0, 0x2559: 0x00c0, 0x255a: 0x00c0, 0x255b: 0x00c0, 0x255c: 0x00c0, 0x255d: 0x00c0, + 0x255e: 0x00c0, 0x255f: 0x00c0, 0x2560: 0x00c0, 0x2561: 0x00c0, 0x2562: 0x00c0, 0x2563: 0x00c0, + 0x2564: 0x00c0, 0x2565: 0x00c0, 0x2566: 0x00c0, 0x2567: 0x00c0, 0x2568: 0x00c0, 0x2569: 0x00c0, + 0x256a: 0x00c0, 0x256b: 0x00c0, 0x256c: 0x00c0, 0x256d: 0x00c0, 0x256e: 0x00c0, 0x256f: 0x00c0, + 0x2570: 0x00c0, 0x2571: 0x00c0, 0x2572: 0x00c0, 0x2573: 0x00c0, 0x2574: 0x00c0, 0x2575: 0x00c0, + 0x2576: 0x00c0, 0x2577: 0x00c0, 0x2578: 0x00c0, 0x2579: 0x00c0, 0x257a: 0x00c0, 0x257b: 0x00c0, + 0x257c: 0x00c0, 0x257d: 0x00c0, 0x257e: 0x0080, 0x257f: 0x0080, + // Block 0x96, offset 0x2580 + 0x2580: 0x00c0, 0x2581: 0x00c0, 0x2582: 0x00c0, 0x2583: 0x00c0, 0x2584: 0x00c0, 0x2585: 0x00c0, + 0x2586: 0x00c0, 0x2587: 0x00c0, 0x2588: 0x00c0, 0x2589: 0x00c0, 0x258a: 0x00c0, 0x258b: 0x00c0, + 0x258c: 0x00c0, 0x258d: 0x0080, 0x258e: 0x0080, 0x258f: 0x0080, 0x2590: 0x00c0, 0x2591: 0x00c0, + 0x2592: 0x00c0, 0x2593: 0x00c0, 0x2594: 0x00c0, 0x2595: 0x00c0, 0x2596: 0x00c0, 0x2597: 0x00c0, + 0x2598: 0x00c0, 0x2599: 0x00c0, 0x259a: 0x00c0, 0x259b: 0x00c0, 0x259c: 0x00c0, 0x259d: 0x00c0, + 0x259e: 0x00c0, 0x259f: 0x00c0, 0x25a0: 0x00c0, 0x25a1: 0x00c0, 0x25a2: 0x00c0, 0x25a3: 0x00c0, + 0x25a4: 0x00c0, 0x25a5: 0x00c0, 0x25a6: 0x00c0, 0x25a7: 0x00c0, 0x25a8: 0x00c0, 0x25a9: 0x00c0, + 0x25aa: 0x00c0, 0x25ab: 0x00c0, + // Block 0x97, offset 0x25c0 + 0x25c0: 0x00c0, 0x25c1: 0x00c0, 0x25c2: 0x00c0, 0x25c3: 0x00c0, 0x25c4: 0x00c0, 0x25c5: 0x00c0, + 0x25c6: 0x00c0, 0x25c7: 0x00c0, 0x25c8: 0x00c0, 0x25c9: 0x00c0, 0x25ca: 0x00c0, 0x25cb: 0x00c0, + 0x25cc: 0x00c0, 0x25cd: 0x00c0, 0x25ce: 0x00c0, 0x25cf: 0x00c0, 0x25d0: 0x00c0, 0x25d1: 0x00c0, + 0x25d2: 0x00c0, 0x25d3: 0x00c0, 0x25d4: 0x00c0, 0x25d5: 0x00c0, 0x25d6: 0x00c0, 0x25d7: 0x00c0, + 0x25d8: 0x00c0, 0x25d9: 0x00c0, 0x25da: 0x00c0, 0x25db: 0x00c0, 0x25dc: 0x00c0, 0x25dd: 0x00c0, + 0x25de: 0x00c0, 0x25df: 0x00c0, 0x25e0: 0x00c0, 0x25e1: 0x00c0, 0x25e2: 0x00c0, 0x25e3: 0x00c0, + 0x25e4: 0x00c0, 0x25e5: 0x00c0, 0x25e6: 0x00c0, 0x25e7: 0x00c0, 0x25e8: 0x00c0, 0x25e9: 0x00c0, + 0x25ea: 0x00c0, 0x25eb: 0x00c0, 0x25ec: 0x00c0, 0x25ed: 0x00c0, 0x25ee: 0x00c0, 0x25ef: 0x00c3, + 0x25f0: 0x0083, 0x25f1: 0x0083, 0x25f2: 0x0083, 0x25f3: 0x0080, 0x25f4: 0x00c3, 0x25f5: 0x00c3, + 0x25f6: 0x00c3, 0x25f7: 0x00c3, 0x25f8: 0x00c3, 0x25f9: 0x00c3, 0x25fa: 0x00c3, 0x25fb: 0x00c3, + 0x25fc: 0x00c3, 0x25fd: 0x00c3, 0x25fe: 0x0080, 0x25ff: 0x00c0, + // Block 0x98, offset 0x2600 + 0x2600: 0x00c0, 0x2601: 0x00c0, 0x2602: 0x00c0, 0x2603: 0x00c0, 0x2604: 0x00c0, 0x2605: 0x00c0, + 0x2606: 0x00c0, 0x2607: 0x00c0, 0x2608: 0x00c0, 0x2609: 0x00c0, 0x260a: 0x00c0, 0x260b: 0x00c0, + 0x260c: 0x00c0, 0x260d: 0x00c0, 0x260e: 0x00c0, 0x260f: 0x00c0, 0x2610: 0x00c0, 0x2611: 0x00c0, + 0x2612: 0x00c0, 0x2613: 0x00c0, 0x2614: 0x00c0, 0x2615: 0x00c0, 0x2616: 0x00c0, 0x2617: 0x00c0, + 0x2618: 0x00c0, 0x2619: 0x00c0, 0x261a: 0x00c0, 0x261b: 0x00c0, 0x261c: 0x0080, 0x261d: 0x0080, + 0x261e: 0x00c3, 0x261f: 0x00c3, 0x2620: 0x00c0, 0x2621: 0x00c0, 0x2622: 0x00c0, 0x2623: 0x00c0, + 0x2624: 0x00c0, 0x2625: 0x00c0, 0x2626: 0x00c0, 0x2627: 0x00c0, 0x2628: 0x00c0, 0x2629: 0x00c0, + 0x262a: 0x00c0, 0x262b: 0x00c0, 0x262c: 0x00c0, 0x262d: 0x00c0, 0x262e: 0x00c0, 0x262f: 0x00c0, + 0x2630: 0x00c0, 0x2631: 0x00c0, 0x2632: 0x00c0, 0x2633: 0x00c0, 0x2634: 0x00c0, 0x2635: 0x00c0, + 0x2636: 0x00c0, 0x2637: 0x00c0, 0x2638: 0x00c0, 0x2639: 0x00c0, 0x263a: 0x00c0, 0x263b: 0x00c0, + 0x263c: 0x00c0, 0x263d: 0x00c0, 0x263e: 0x00c0, 0x263f: 0x00c0, + // Block 0x99, offset 0x2640 + 0x2640: 0x00c0, 0x2641: 0x00c0, 0x2642: 0x00c0, 0x2643: 0x00c0, 0x2644: 0x00c0, 0x2645: 0x00c0, + 0x2646: 0x00c0, 0x2647: 0x00c0, 0x2648: 0x00c0, 0x2649: 0x00c0, 0x264a: 0x00c0, 0x264b: 0x00c0, + 0x264c: 0x00c0, 0x264d: 0x00c0, 0x264e: 0x00c0, 0x264f: 0x00c0, 0x2650: 0x00c0, 0x2651: 0x00c0, + 0x2652: 0x00c0, 0x2653: 0x00c0, 0x2654: 0x00c0, 0x2655: 0x00c0, 0x2656: 0x00c0, 0x2657: 0x00c0, + 0x2658: 0x00c0, 0x2659: 0x00c0, 0x265a: 0x00c0, 0x265b: 0x00c0, 0x265c: 0x00c0, 0x265d: 0x00c0, + 0x265e: 0x00c0, 0x265f: 0x00c0, 0x2660: 0x00c0, 0x2661: 0x00c0, 0x2662: 0x00c0, 0x2663: 0x00c0, + 0x2664: 0x00c0, 0x2665: 0x00c0, 0x2666: 0x0080, 0x2667: 0x0080, 0x2668: 0x0080, 0x2669: 0x0080, + 0x266a: 0x0080, 0x266b: 0x0080, 0x266c: 0x0080, 0x266d: 0x0080, 0x266e: 0x0080, 0x266f: 0x0080, + 0x2670: 0x00c3, 0x2671: 0x00c3, 0x2672: 0x0080, 0x2673: 0x0080, 0x2674: 0x0080, 0x2675: 0x0080, + 0x2676: 0x0080, 0x2677: 0x0080, + // Block 0x9a, offset 0x2680 + 0x2680: 0x0080, 0x2681: 0x0080, 0x2682: 0x0080, 0x2683: 0x0080, 0x2684: 0x0080, 0x2685: 0x0080, + 0x2686: 0x0080, 0x2687: 0x0080, 0x2688: 0x0080, 0x2689: 0x0080, 0x268a: 0x0080, 0x268b: 0x0080, + 0x268c: 0x0080, 0x268d: 0x0080, 0x268e: 0x0080, 0x268f: 0x0080, 0x2690: 0x0080, 0x2691: 0x0080, + 0x2692: 0x0080, 0x2693: 0x0080, 0x2694: 0x0080, 0x2695: 0x0080, 0x2696: 0x0080, 0x2697: 0x00c0, + 0x2698: 0x00c0, 0x2699: 0x00c0, 0x269a: 0x00c0, 0x269b: 0x00c0, 0x269c: 0x00c0, 0x269d: 0x00c0, + 0x269e: 0x00c0, 0x269f: 0x00c0, 0x26a0: 0x0080, 0x26a1: 0x0080, 0x26a2: 0x00c0, 0x26a3: 0x00c0, + 0x26a4: 0x00c0, 0x26a5: 0x00c0, 0x26a6: 0x00c0, 0x26a7: 0x00c0, 0x26a8: 0x00c0, 0x26a9: 0x00c0, + 0x26aa: 0x00c0, 0x26ab: 0x00c0, 0x26ac: 0x00c0, 0x26ad: 0x00c0, 0x26ae: 0x00c0, 0x26af: 0x00c0, + 0x26b0: 0x00c0, 0x26b1: 0x00c0, 0x26b2: 0x00c0, 0x26b3: 0x00c0, 0x26b4: 0x00c0, 0x26b5: 0x00c0, + 0x26b6: 0x00c0, 0x26b7: 0x00c0, 0x26b8: 0x00c0, 0x26b9: 0x00c0, 0x26ba: 0x00c0, 0x26bb: 0x00c0, + 0x26bc: 0x00c0, 0x26bd: 0x00c0, 0x26be: 0x00c0, 0x26bf: 0x00c0, + // Block 0x9b, offset 0x26c0 + 0x26c0: 0x00c0, 0x26c1: 0x00c0, 0x26c2: 0x00c0, 0x26c3: 0x00c0, 0x26c4: 0x00c0, 0x26c5: 0x00c0, + 0x26c6: 0x00c0, 0x26c7: 0x00c0, 0x26c8: 0x00c0, 0x26c9: 0x00c0, 0x26ca: 0x00c0, 0x26cb: 0x00c0, + 0x26cc: 0x00c0, 0x26cd: 0x00c0, 0x26ce: 0x00c0, 0x26cf: 0x00c0, 0x26d0: 0x00c0, 0x26d1: 0x00c0, + 0x26d2: 0x00c0, 0x26d3: 0x00c0, 0x26d4: 0x00c0, 0x26d5: 0x00c0, 0x26d6: 0x00c0, 0x26d7: 0x00c0, + 0x26d8: 0x00c0, 0x26d9: 0x00c0, 0x26da: 0x00c0, 0x26db: 0x00c0, 0x26dc: 0x00c0, 0x26dd: 0x00c0, + 0x26de: 0x00c0, 0x26df: 0x00c0, 0x26e0: 0x00c0, 0x26e1: 0x00c0, 0x26e2: 0x00c0, 0x26e3: 0x00c0, + 0x26e4: 0x00c0, 0x26e5: 0x00c0, 0x26e6: 0x00c0, 0x26e7: 0x00c0, 0x26e8: 0x00c0, 0x26e9: 0x00c0, + 0x26ea: 0x00c0, 0x26eb: 0x00c0, 0x26ec: 0x00c0, 0x26ed: 0x00c0, 0x26ee: 0x00c0, 0x26ef: 0x00c0, + 0x26f0: 0x0080, 0x26f1: 0x00c0, 0x26f2: 0x00c0, 0x26f3: 0x00c0, 0x26f4: 0x00c0, 0x26f5: 0x00c0, + 0x26f6: 0x00c0, 0x26f7: 0x00c0, 0x26f8: 0x00c0, 0x26f9: 0x00c0, 0x26fa: 0x00c0, 0x26fb: 0x00c0, + 0x26fc: 0x00c0, 0x26fd: 0x00c0, 0x26fe: 0x00c0, 0x26ff: 0x00c0, + // Block 0x9c, offset 0x2700 + 0x2700: 0x00c0, 0x2701: 0x00c0, 0x2702: 0x00c0, 0x2703: 0x00c0, 0x2704: 0x00c0, 0x2705: 0x00c0, + 0x2706: 0x00c0, 0x2707: 0x00c0, 0x2708: 0x00c0, 0x2709: 0x0080, 0x270a: 0x0080, 0x270b: 0x00c0, + 0x270c: 0x00c0, 0x270d: 0x00c0, 0x270e: 0x00c0, 0x270f: 0x00c0, 0x2710: 0x00c0, 0x2711: 0x00c0, + 0x2712: 0x00c0, 0x2713: 0x00c0, 0x2714: 0x00c0, 0x2715: 0x00c0, 0x2716: 0x00c0, 0x2717: 0x00c0, + 0x2718: 0x00c0, 0x2719: 0x00c0, 0x271a: 0x00c0, 0x271b: 0x00c0, 0x271c: 0x00c0, 0x271d: 0x00c0, + 0x271e: 0x00c0, 0x271f: 0x00c0, 0x2720: 0x00c0, 0x2721: 0x00c0, 0x2722: 0x00c0, 0x2723: 0x00c0, + 0x2724: 0x00c0, 0x2725: 0x00c0, 0x2726: 0x00c0, 0x2727: 0x00c0, 0x2728: 0x00c0, 0x2729: 0x00c0, + 0x272a: 0x00c0, 0x272b: 0x00c0, 0x272c: 0x00c0, 0x272d: 0x00c0, 0x272e: 0x00c0, + 0x2730: 0x00c0, 0x2731: 0x00c0, 0x2732: 0x00c0, 0x2733: 0x00c0, 0x2734: 0x00c0, 0x2735: 0x00c0, + 0x2736: 0x00c0, 0x2737: 0x00c0, + // Block 0x9d, offset 0x2740 + 0x2777: 0x00c0, 0x2778: 0x0080, 0x2779: 0x0080, 0x277a: 0x00c0, 0x277b: 0x00c0, + 0x277c: 0x00c0, 0x277d: 0x00c0, 0x277e: 0x00c0, 0x277f: 0x00c0, + // Block 0x9e, offset 0x2780 + 0x2780: 0x00c0, 0x2781: 0x00c0, 0x2782: 0x00c3, 0x2783: 0x00c0, 0x2784: 0x00c0, 0x2785: 0x00c0, + 0x2786: 0x00c6, 0x2787: 0x00c0, 0x2788: 0x00c0, 0x2789: 0x00c0, 0x278a: 0x00c0, 0x278b: 0x00c3, + 0x278c: 0x00c0, 0x278d: 0x00c0, 0x278e: 0x00c0, 0x278f: 0x00c0, 0x2790: 0x00c0, 0x2791: 0x00c0, + 0x2792: 0x00c0, 0x2793: 0x00c0, 0x2794: 0x00c0, 0x2795: 0x00c0, 0x2796: 0x00c0, 0x2797: 0x00c0, + 0x2798: 0x00c0, 0x2799: 0x00c0, 0x279a: 0x00c0, 0x279b: 0x00c0, 0x279c: 0x00c0, 0x279d: 0x00c0, + 0x279e: 0x00c0, 0x279f: 0x00c0, 0x27a0: 0x00c0, 0x27a1: 0x00c0, 0x27a2: 0x00c0, 0x27a3: 0x00c0, + 0x27a4: 0x00c0, 0x27a5: 0x00c3, 0x27a6: 0x00c3, 0x27a7: 0x00c0, 0x27a8: 0x0080, 0x27a9: 0x0080, + 0x27aa: 0x0080, 0x27ab: 0x0080, + 0x27b0: 0x0080, 0x27b1: 0x0080, 0x27b2: 0x0080, 0x27b3: 0x0080, 0x27b4: 0x0080, 0x27b5: 0x0080, + 0x27b6: 0x0080, 0x27b7: 0x0080, 0x27b8: 0x0080, 0x27b9: 0x0080, + // Block 0x9f, offset 0x27c0 + 0x27c0: 0x00c2, 0x27c1: 0x00c2, 0x27c2: 0x00c2, 0x27c3: 0x00c2, 0x27c4: 0x00c2, 0x27c5: 0x00c2, + 0x27c6: 0x00c2, 0x27c7: 0x00c2, 0x27c8: 0x00c2, 0x27c9: 0x00c2, 0x27ca: 0x00c2, 0x27cb: 0x00c2, + 0x27cc: 0x00c2, 0x27cd: 0x00c2, 0x27ce: 0x00c2, 0x27cf: 0x00c2, 0x27d0: 0x00c2, 0x27d1: 0x00c2, + 0x27d2: 0x00c2, 0x27d3: 0x00c2, 0x27d4: 0x00c2, 0x27d5: 0x00c2, 0x27d6: 0x00c2, 0x27d7: 0x00c2, + 0x27d8: 0x00c2, 0x27d9: 0x00c2, 0x27da: 0x00c2, 0x27db: 0x00c2, 0x27dc: 0x00c2, 0x27dd: 0x00c2, + 0x27de: 0x00c2, 0x27df: 0x00c2, 0x27e0: 0x00c2, 0x27e1: 0x00c2, 0x27e2: 0x00c2, 0x27e3: 0x00c2, + 0x27e4: 0x00c2, 0x27e5: 0x00c2, 0x27e6: 0x00c2, 0x27e7: 0x00c2, 0x27e8: 0x00c2, 0x27e9: 0x00c2, + 0x27ea: 0x00c2, 0x27eb: 0x00c2, 0x27ec: 0x00c2, 0x27ed: 0x00c2, 0x27ee: 0x00c2, 0x27ef: 0x00c2, + 0x27f0: 0x00c2, 0x27f1: 0x00c2, 0x27f2: 0x00c1, 0x27f3: 0x00c0, 0x27f4: 0x0080, 0x27f5: 0x0080, + 0x27f6: 0x0080, 0x27f7: 0x0080, + // Block 0xa0, offset 0x2800 + 0x2800: 0x00c0, 0x2801: 0x00c0, 0x2802: 0x00c0, 0x2803: 0x00c0, 0x2804: 0x00c6, 0x2805: 0x00c3, + 0x280e: 0x0080, 0x280f: 0x0080, 0x2810: 0x00c0, 0x2811: 0x00c0, + 0x2812: 0x00c0, 0x2813: 0x00c0, 0x2814: 0x00c0, 0x2815: 0x00c0, 0x2816: 0x00c0, 0x2817: 0x00c0, + 0x2818: 0x00c0, 0x2819: 0x00c0, + 0x2820: 0x00c3, 0x2821: 0x00c3, 0x2822: 0x00c3, 0x2823: 0x00c3, + 0x2824: 0x00c3, 0x2825: 0x00c3, 0x2826: 0x00c3, 0x2827: 0x00c3, 0x2828: 0x00c3, 0x2829: 0x00c3, + 0x282a: 0x00c3, 0x282b: 0x00c3, 0x282c: 0x00c3, 0x282d: 0x00c3, 0x282e: 0x00c3, 0x282f: 0x00c3, + 0x2830: 0x00c3, 0x2831: 0x00c3, 0x2832: 0x00c0, 0x2833: 0x00c0, 0x2834: 0x00c0, 0x2835: 0x00c0, + 0x2836: 0x00c0, 0x2837: 0x00c0, 0x2838: 0x0080, 0x2839: 0x0080, 0x283a: 0x0080, 0x283b: 0x00c0, + 0x283c: 0x0080, 0x283d: 0x00c0, + // Block 0xa1, offset 0x2840 + 0x2840: 0x00c0, 0x2841: 0x00c0, 0x2842: 0x00c0, 0x2843: 0x00c0, 0x2844: 0x00c0, 0x2845: 0x00c0, + 0x2846: 0x00c0, 0x2847: 0x00c0, 0x2848: 0x00c0, 0x2849: 0x00c0, 0x284a: 0x00c0, 0x284b: 0x00c0, + 0x284c: 0x00c0, 0x284d: 0x00c0, 0x284e: 0x00c0, 0x284f: 0x00c0, 0x2850: 0x00c0, 0x2851: 0x00c0, + 0x2852: 0x00c0, 0x2853: 0x00c0, 0x2854: 0x00c0, 0x2855: 0x00c0, 0x2856: 0x00c0, 0x2857: 0x00c0, + 0x2858: 0x00c0, 0x2859: 0x00c0, 0x285a: 0x00c0, 0x285b: 0x00c0, 0x285c: 0x00c0, 0x285d: 0x00c0, + 0x285e: 0x00c0, 0x285f: 0x00c0, 0x2860: 0x00c0, 0x2861: 0x00c0, 0x2862: 0x00c0, 0x2863: 0x00c0, + 0x2864: 0x00c0, 0x2865: 0x00c0, 0x2866: 0x00c3, 0x2867: 0x00c3, 0x2868: 0x00c3, 0x2869: 0x00c3, + 0x286a: 0x00c3, 0x286b: 0x00c3, 0x286c: 0x00c3, 0x286d: 0x00c3, 0x286e: 0x0080, 0x286f: 0x0080, + 0x2870: 0x00c0, 0x2871: 0x00c0, 0x2872: 0x00c0, 0x2873: 0x00c0, 0x2874: 0x00c0, 0x2875: 0x00c0, + 0x2876: 0x00c0, 0x2877: 0x00c0, 0x2878: 0x00c0, 0x2879: 0x00c0, 0x287a: 0x00c0, 0x287b: 0x00c0, + 0x287c: 0x00c0, 0x287d: 0x00c0, 0x287e: 0x00c0, 0x287f: 0x00c0, + // Block 0xa2, offset 0x2880 + 0x2880: 0x00c0, 0x2881: 0x00c0, 0x2882: 0x00c0, 0x2883: 0x00c0, 0x2884: 0x00c0, 0x2885: 0x00c0, + 0x2886: 0x00c0, 0x2887: 0x00c3, 0x2888: 0x00c3, 0x2889: 0x00c3, 0x288a: 0x00c3, 0x288b: 0x00c3, + 0x288c: 0x00c3, 0x288d: 0x00c3, 0x288e: 0x00c3, 0x288f: 0x00c3, 0x2890: 0x00c3, 0x2891: 0x00c3, + 0x2892: 0x00c0, 0x2893: 0x00c5, + 0x289f: 0x0080, 0x28a0: 0x0040, 0x28a1: 0x0040, 0x28a2: 0x0040, 0x28a3: 0x0040, + 0x28a4: 0x0040, 0x28a5: 0x0040, 0x28a6: 0x0040, 0x28a7: 0x0040, 0x28a8: 0x0040, 0x28a9: 0x0040, + 0x28aa: 0x0040, 0x28ab: 0x0040, 0x28ac: 0x0040, 0x28ad: 0x0040, 0x28ae: 0x0040, 0x28af: 0x0040, + 0x28b0: 0x0040, 0x28b1: 0x0040, 0x28b2: 0x0040, 0x28b3: 0x0040, 0x28b4: 0x0040, 0x28b5: 0x0040, + 0x28b6: 0x0040, 0x28b7: 0x0040, 0x28b8: 0x0040, 0x28b9: 0x0040, 0x28ba: 0x0040, 0x28bb: 0x0040, + 0x28bc: 0x0040, + // Block 0xa3, offset 0x28c0 + 0x28c0: 0x00c3, 0x28c1: 0x00c3, 0x28c2: 0x00c3, 0x28c3: 0x00c0, 0x28c4: 0x00c0, 0x28c5: 0x00c0, + 0x28c6: 0x00c0, 0x28c7: 0x00c0, 0x28c8: 0x00c0, 0x28c9: 0x00c0, 0x28ca: 0x00c0, 0x28cb: 0x00c0, + 0x28cc: 0x00c0, 0x28cd: 0x00c0, 0x28ce: 0x00c0, 0x28cf: 0x00c0, 0x28d0: 0x00c0, 0x28d1: 0x00c0, + 0x28d2: 0x00c0, 0x28d3: 0x00c0, 0x28d4: 0x00c0, 0x28d5: 0x00c0, 0x28d6: 0x00c0, 0x28d7: 0x00c0, + 0x28d8: 0x00c0, 0x28d9: 0x00c0, 0x28da: 0x00c0, 0x28db: 0x00c0, 0x28dc: 0x00c0, 0x28dd: 0x00c0, + 0x28de: 0x00c0, 0x28df: 0x00c0, 0x28e0: 0x00c0, 0x28e1: 0x00c0, 0x28e2: 0x00c0, 0x28e3: 0x00c0, + 0x28e4: 0x00c0, 0x28e5: 0x00c0, 0x28e6: 0x00c0, 0x28e7: 0x00c0, 0x28e8: 0x00c0, 0x28e9: 0x00c0, + 0x28ea: 0x00c0, 0x28eb: 0x00c0, 0x28ec: 0x00c0, 0x28ed: 0x00c0, 0x28ee: 0x00c0, 0x28ef: 0x00c0, + 0x28f0: 0x00c0, 0x28f1: 0x00c0, 0x28f2: 0x00c0, 0x28f3: 0x00c3, 0x28f4: 0x00c0, 0x28f5: 0x00c0, + 0x28f6: 0x00c3, 0x28f7: 0x00c3, 0x28f8: 0x00c3, 0x28f9: 0x00c3, 0x28fa: 0x00c0, 0x28fb: 0x00c0, + 0x28fc: 0x00c3, 0x28fd: 0x00c0, 0x28fe: 0x00c0, 0x28ff: 0x00c0, + // Block 0xa4, offset 0x2900 + 0x2900: 0x00c5, 0x2901: 0x0080, 0x2902: 0x0080, 0x2903: 0x0080, 0x2904: 0x0080, 0x2905: 0x0080, + 0x2906: 0x0080, 0x2907: 0x0080, 0x2908: 0x0080, 0x2909: 0x0080, 0x290a: 0x0080, 0x290b: 0x0080, + 0x290c: 0x0080, 0x290d: 0x0080, 0x290f: 0x00c0, 0x2910: 0x00c0, 0x2911: 0x00c0, + 0x2912: 0x00c0, 0x2913: 0x00c0, 0x2914: 0x00c0, 0x2915: 0x00c0, 0x2916: 0x00c0, 0x2917: 0x00c0, + 0x2918: 0x00c0, 0x2919: 0x00c0, + 0x291e: 0x0080, 0x291f: 0x0080, 0x2920: 0x00c0, 0x2921: 0x00c0, 0x2922: 0x00c0, 0x2923: 0x00c0, + 0x2924: 0x00c0, 0x2925: 0x00c3, 0x2926: 0x00c0, 0x2927: 0x00c0, 0x2928: 0x00c0, 0x2929: 0x00c0, + 0x292a: 0x00c0, 0x292b: 0x00c0, 0x292c: 0x00c0, 0x292d: 0x00c0, 0x292e: 0x00c0, 0x292f: 0x00c0, + 0x2930: 0x00c0, 0x2931: 0x00c0, 0x2932: 0x00c0, 0x2933: 0x00c0, 0x2934: 0x00c0, 0x2935: 0x00c0, + 0x2936: 0x00c0, 0x2937: 0x00c0, 0x2938: 0x00c0, 0x2939: 0x00c0, 0x293a: 0x00c0, 0x293b: 0x00c0, + 0x293c: 0x00c0, 0x293d: 0x00c0, 0x293e: 0x00c0, + // Block 0xa5, offset 0x2940 + 0x2940: 0x00c0, 0x2941: 0x00c0, 0x2942: 0x00c0, 0x2943: 0x00c0, 0x2944: 0x00c0, 0x2945: 0x00c0, + 0x2946: 0x00c0, 0x2947: 0x00c0, 0x2948: 0x00c0, 0x2949: 0x00c0, 0x294a: 0x00c0, 0x294b: 0x00c0, + 0x294c: 0x00c0, 0x294d: 0x00c0, 0x294e: 0x00c0, 0x294f: 0x00c0, 0x2950: 0x00c0, 0x2951: 0x00c0, + 0x2952: 0x00c0, 0x2953: 0x00c0, 0x2954: 0x00c0, 0x2955: 0x00c0, 0x2956: 0x00c0, 0x2957: 0x00c0, + 0x2958: 0x00c0, 0x2959: 0x00c0, 0x295a: 0x00c0, 0x295b: 0x00c0, 0x295c: 0x00c0, 0x295d: 0x00c0, + 0x295e: 0x00c0, 0x295f: 0x00c0, 0x2960: 0x00c0, 0x2961: 0x00c0, 0x2962: 0x00c0, 0x2963: 0x00c0, + 0x2964: 0x00c0, 0x2965: 0x00c0, 0x2966: 0x00c0, 0x2967: 0x00c0, 0x2968: 0x00c0, 0x2969: 0x00c3, + 0x296a: 0x00c3, 0x296b: 0x00c3, 0x296c: 0x00c3, 0x296d: 0x00c3, 0x296e: 0x00c3, 0x296f: 0x00c0, + 0x2970: 0x00c0, 0x2971: 0x00c3, 0x2972: 0x00c3, 0x2973: 0x00c0, 0x2974: 0x00c0, 0x2975: 0x00c3, + 0x2976: 0x00c3, + // Block 0xa6, offset 0x2980 + 0x2980: 0x00c0, 0x2981: 0x00c0, 0x2982: 0x00c0, 0x2983: 0x00c3, 0x2984: 0x00c0, 0x2985: 0x00c0, + 0x2986: 0x00c0, 0x2987: 0x00c0, 0x2988: 0x00c0, 0x2989: 0x00c0, 0x298a: 0x00c0, 0x298b: 0x00c0, + 0x298c: 0x00c3, 0x298d: 0x00c0, 0x2990: 0x00c0, 0x2991: 0x00c0, + 0x2992: 0x00c0, 0x2993: 0x00c0, 0x2994: 0x00c0, 0x2995: 0x00c0, 0x2996: 0x00c0, 0x2997: 0x00c0, + 0x2998: 0x00c0, 0x2999: 0x00c0, 0x299c: 0x0080, 0x299d: 0x0080, + 0x299e: 0x0080, 0x299f: 0x0080, 0x29a0: 0x00c0, 0x29a1: 0x00c0, 0x29a2: 0x00c0, 0x29a3: 0x00c0, + 0x29a4: 0x00c0, 0x29a5: 0x00c0, 0x29a6: 0x00c0, 0x29a7: 0x00c0, 0x29a8: 0x00c0, 0x29a9: 0x00c0, + 0x29aa: 0x00c0, 0x29ab: 0x00c0, 0x29ac: 0x00c0, 0x29ad: 0x00c0, 0x29ae: 0x00c0, 0x29af: 0x00c0, + 0x29b0: 0x00c0, 0x29b1: 0x00c0, 0x29b2: 0x00c0, 0x29b3: 0x00c0, 0x29b4: 0x00c0, 0x29b5: 0x00c0, + 0x29b6: 0x00c0, 0x29b7: 0x0080, 0x29b8: 0x0080, 0x29b9: 0x0080, 0x29ba: 0x00c0, 0x29bb: 0x00c0, + 0x29bc: 0x00c3, 0x29bd: 0x00c0, 0x29be: 0x00c0, 0x29bf: 0x00c0, + // Block 0xa7, offset 0x29c0 + 0x29c0: 0x00c0, 0x29c1: 0x00c0, 0x29c2: 0x00c0, 0x29c3: 0x00c0, 0x29c4: 0x00c0, 0x29c5: 0x00c0, + 0x29c6: 0x00c0, 0x29c7: 0x00c0, 0x29c8: 0x00c0, 0x29c9: 0x00c0, 0x29ca: 0x00c0, 0x29cb: 0x00c0, + 0x29cc: 0x00c0, 0x29cd: 0x00c0, 0x29ce: 0x00c0, 0x29cf: 0x00c0, 0x29d0: 0x00c0, 0x29d1: 0x00c0, + 0x29d2: 0x00c0, 0x29d3: 0x00c0, 0x29d4: 0x00c0, 0x29d5: 0x00c0, 0x29d6: 0x00c0, 0x29d7: 0x00c0, + 0x29d8: 0x00c0, 0x29d9: 0x00c0, 0x29da: 0x00c0, 0x29db: 0x00c0, 0x29dc: 0x00c0, 0x29dd: 0x00c0, + 0x29de: 0x00c0, 0x29df: 0x00c0, 0x29e0: 0x00c0, 0x29e1: 0x00c0, 0x29e2: 0x00c0, 0x29e3: 0x00c0, + 0x29e4: 0x00c0, 0x29e5: 0x00c0, 0x29e6: 0x00c0, 0x29e7: 0x00c0, 0x29e8: 0x00c0, 0x29e9: 0x00c0, + 0x29ea: 0x00c0, 0x29eb: 0x00c0, 0x29ec: 0x00c0, 0x29ed: 0x00c0, 0x29ee: 0x00c0, 0x29ef: 0x00c0, + 0x29f0: 0x00c3, 0x29f1: 0x00c0, 0x29f2: 0x00c3, 0x29f3: 0x00c3, 0x29f4: 0x00c3, 0x29f5: 0x00c0, + 0x29f6: 0x00c0, 0x29f7: 0x00c3, 0x29f8: 0x00c3, 0x29f9: 0x00c0, 0x29fa: 0x00c0, 0x29fb: 0x00c0, + 0x29fc: 0x00c0, 0x29fd: 0x00c0, 0x29fe: 0x00c3, 0x29ff: 0x00c3, + // Block 0xa8, offset 0x2a00 + 0x2a00: 0x00c0, 0x2a01: 0x00c3, 0x2a02: 0x00c0, + 0x2a1b: 0x00c0, 0x2a1c: 0x00c0, 0x2a1d: 0x00c0, + 0x2a1e: 0x0080, 0x2a1f: 0x0080, 0x2a20: 0x00c0, 0x2a21: 0x00c0, 0x2a22: 0x00c0, 0x2a23: 0x00c0, + 0x2a24: 0x00c0, 0x2a25: 0x00c0, 0x2a26: 0x00c0, 0x2a27: 0x00c0, 0x2a28: 0x00c0, 0x2a29: 0x00c0, + 0x2a2a: 0x00c0, 0x2a2b: 0x00c0, 0x2a2c: 0x00c3, 0x2a2d: 0x00c3, 0x2a2e: 0x00c0, 0x2a2f: 0x00c0, + 0x2a30: 0x0080, 0x2a31: 0x0080, 0x2a32: 0x00c0, 0x2a33: 0x00c0, 0x2a34: 0x00c0, 0x2a35: 0x00c0, + 0x2a36: 0x00c6, + // Block 0xa9, offset 0x2a40 + 0x2a41: 0x00c0, 0x2a42: 0x00c0, 0x2a43: 0x00c0, 0x2a44: 0x00c0, 0x2a45: 0x00c0, + 0x2a46: 0x00c0, 0x2a49: 0x00c0, 0x2a4a: 0x00c0, 0x2a4b: 0x00c0, + 0x2a4c: 0x00c0, 0x2a4d: 0x00c0, 0x2a4e: 0x00c0, 0x2a51: 0x00c0, + 0x2a52: 0x00c0, 0x2a53: 0x00c0, 0x2a54: 0x00c0, 0x2a55: 0x00c0, 0x2a56: 0x00c0, + 0x2a60: 0x00c0, 0x2a61: 0x00c0, 0x2a62: 0x00c0, 0x2a63: 0x00c0, + 0x2a64: 0x00c0, 0x2a65: 0x00c0, 0x2a66: 0x00c0, 0x2a68: 0x00c0, 0x2a69: 0x00c0, + 0x2a6a: 0x00c0, 0x2a6b: 0x00c0, 0x2a6c: 0x00c0, 0x2a6d: 0x00c0, 0x2a6e: 0x00c0, + 0x2a70: 0x00c0, 0x2a71: 0x00c0, 0x2a72: 0x00c0, 0x2a73: 0x00c0, 0x2a74: 0x00c0, 0x2a75: 0x00c0, + 0x2a76: 0x00c0, 0x2a77: 0x00c0, 0x2a78: 0x00c0, 0x2a79: 0x00c0, 0x2a7a: 0x00c0, 0x2a7b: 0x00c0, + 0x2a7c: 0x00c0, 0x2a7d: 0x00c0, 0x2a7e: 0x00c0, 0x2a7f: 0x00c0, + // Block 0xaa, offset 0x2a80 + 0x2a80: 0x00c0, 0x2a81: 0x00c0, 0x2a82: 0x00c0, 0x2a83: 0x00c0, 0x2a84: 0x00c0, 0x2a85: 0x00c0, + 0x2a86: 0x00c0, 0x2a87: 0x00c0, 0x2a88: 0x00c0, 0x2a89: 0x00c0, 0x2a8a: 0x00c0, 0x2a8b: 0x00c0, + 0x2a8c: 0x00c0, 0x2a8d: 0x00c0, 0x2a8e: 0x00c0, 0x2a8f: 0x00c0, 0x2a90: 0x00c0, 0x2a91: 0x00c0, + 0x2a92: 0x00c0, 0x2a93: 0x00c0, 0x2a94: 0x00c0, 0x2a95: 0x00c0, 0x2a96: 0x00c0, 0x2a97: 0x00c0, + 0x2a98: 0x00c0, 0x2a99: 0x00c0, 0x2a9a: 0x00c0, 0x2a9b: 0x0080, 0x2a9c: 0x0080, 0x2a9d: 0x0080, + 0x2a9e: 0x0080, 0x2a9f: 0x0080, 0x2aa0: 0x00c0, 0x2aa1: 0x00c0, 0x2aa2: 0x00c0, 0x2aa3: 0x00c0, + 0x2aa4: 0x00c0, 0x2aa5: 0x00c8, + 0x2ab0: 0x00c0, 0x2ab1: 0x00c0, 0x2ab2: 0x00c0, 0x2ab3: 0x00c0, 0x2ab4: 0x00c0, 0x2ab5: 0x00c0, + 0x2ab6: 0x00c0, 0x2ab7: 0x00c0, 0x2ab8: 0x00c0, 0x2ab9: 0x00c0, 0x2aba: 0x00c0, 0x2abb: 0x00c0, + 0x2abc: 0x00c0, 0x2abd: 0x00c0, 0x2abe: 0x00c0, 0x2abf: 0x00c0, + // Block 0xab, offset 0x2ac0 + 0x2ac0: 0x00c0, 0x2ac1: 0x00c0, 0x2ac2: 0x00c0, 0x2ac3: 0x00c0, 0x2ac4: 0x00c0, 0x2ac5: 0x00c0, + 0x2ac6: 0x00c0, 0x2ac7: 0x00c0, 0x2ac8: 0x00c0, 0x2ac9: 0x00c0, 0x2aca: 0x00c0, 0x2acb: 0x00c0, + 0x2acc: 0x00c0, 0x2acd: 0x00c0, 0x2ace: 0x00c0, 0x2acf: 0x00c0, 0x2ad0: 0x00c0, 0x2ad1: 0x00c0, + 0x2ad2: 0x00c0, 0x2ad3: 0x00c0, 0x2ad4: 0x00c0, 0x2ad5: 0x00c0, 0x2ad6: 0x00c0, 0x2ad7: 0x00c0, + 0x2ad8: 0x00c0, 0x2ad9: 0x00c0, 0x2ada: 0x00c0, 0x2adb: 0x00c0, 0x2adc: 0x00c0, 0x2add: 0x00c0, + 0x2ade: 0x00c0, 0x2adf: 0x00c0, 0x2ae0: 0x00c0, 0x2ae1: 0x00c0, 0x2ae2: 0x00c0, 0x2ae3: 0x00c0, + 0x2ae4: 0x00c0, 0x2ae5: 0x00c3, 0x2ae6: 0x00c0, 0x2ae7: 0x00c0, 0x2ae8: 0x00c3, 0x2ae9: 0x00c0, + 0x2aea: 0x00c0, 0x2aeb: 0x0080, 0x2aec: 0x00c0, 0x2aed: 0x00c6, + 0x2af0: 0x00c0, 0x2af1: 0x00c0, 0x2af2: 0x00c0, 0x2af3: 0x00c0, 0x2af4: 0x00c0, 0x2af5: 0x00c0, + 0x2af6: 0x00c0, 0x2af7: 0x00c0, 0x2af8: 0x00c0, 0x2af9: 0x00c0, + // Block 0xac, offset 0x2b00 + 0x2b00: 0x00c0, 0x2b01: 0x00c0, 0x2b02: 0x00c0, 0x2b03: 0x00c0, 0x2b04: 0x00c0, 0x2b05: 0x00c0, + 0x2b06: 0x00c0, 0x2b07: 0x00c0, 0x2b08: 0x00c0, 0x2b09: 0x00c0, 0x2b0a: 0x00c0, 0x2b0b: 0x00c0, + 0x2b0c: 0x00c0, 0x2b0d: 0x00c0, 0x2b0e: 0x00c0, 0x2b0f: 0x00c0, 0x2b10: 0x00c0, 0x2b11: 0x00c0, + 0x2b12: 0x00c0, 0x2b13: 0x00c0, 0x2b14: 0x00c0, 0x2b15: 0x00c0, 0x2b16: 0x00c0, 0x2b17: 0x00c0, + 0x2b18: 0x00c0, 0x2b19: 0x00c0, 0x2b1a: 0x00c0, 0x2b1b: 0x00c0, 0x2b1c: 0x00c0, 0x2b1d: 0x00c0, + 0x2b1e: 0x00c0, 0x2b1f: 0x00c0, 0x2b20: 0x00c0, 0x2b21: 0x00c0, 0x2b22: 0x00c0, 0x2b23: 0x00c0, + 0x2b30: 0x0040, 0x2b31: 0x0040, 0x2b32: 0x0040, 0x2b33: 0x0040, 0x2b34: 0x0040, 0x2b35: 0x0040, + 0x2b36: 0x0040, 0x2b37: 0x0040, 0x2b38: 0x0040, 0x2b39: 0x0040, 0x2b3a: 0x0040, 0x2b3b: 0x0040, + 0x2b3c: 0x0040, 0x2b3d: 0x0040, 0x2b3e: 0x0040, 0x2b3f: 0x0040, + // Block 0xad, offset 0x2b40 + 0x2b40: 0x0040, 0x2b41: 0x0040, 0x2b42: 0x0040, 0x2b43: 0x0040, 0x2b44: 0x0040, 0x2b45: 0x0040, + 0x2b46: 0x0040, 0x2b4b: 0x0040, + 0x2b4c: 0x0040, 0x2b4d: 0x0040, 0x2b4e: 0x0040, 0x2b4f: 0x0040, 0x2b50: 0x0040, 0x2b51: 0x0040, + 0x2b52: 0x0040, 0x2b53: 0x0040, 0x2b54: 0x0040, 0x2b55: 0x0040, 0x2b56: 0x0040, 0x2b57: 0x0040, + 0x2b58: 0x0040, 0x2b59: 0x0040, 0x2b5a: 0x0040, 0x2b5b: 0x0040, 0x2b5c: 0x0040, 0x2b5d: 0x0040, + 0x2b5e: 0x0040, 0x2b5f: 0x0040, 0x2b60: 0x0040, 0x2b61: 0x0040, 0x2b62: 0x0040, 0x2b63: 0x0040, + 0x2b64: 0x0040, 0x2b65: 0x0040, 0x2b66: 0x0040, 0x2b67: 0x0040, 0x2b68: 0x0040, 0x2b69: 0x0040, + 0x2b6a: 0x0040, 0x2b6b: 0x0040, 0x2b6c: 0x0040, 0x2b6d: 0x0040, 0x2b6e: 0x0040, 0x2b6f: 0x0040, + 0x2b70: 0x0040, 0x2b71: 0x0040, 0x2b72: 0x0040, 0x2b73: 0x0040, 0x2b74: 0x0040, 0x2b75: 0x0040, + 0x2b76: 0x0040, 0x2b77: 0x0040, 0x2b78: 0x0040, 0x2b79: 0x0040, 0x2b7a: 0x0040, 0x2b7b: 0x0040, + // Block 0xae, offset 0x2b80 + 0x2b80: 0x008c, 0x2b81: 0x008c, 0x2b82: 0x008c, 0x2b83: 0x008c, 0x2b84: 0x008c, 0x2b85: 0x008c, + 0x2b86: 0x008c, 0x2b87: 0x008c, 0x2b88: 0x008c, 0x2b89: 0x008c, 0x2b8a: 0x008c, 0x2b8b: 0x008c, + 0x2b8c: 0x008c, 0x2b8d: 0x008c, 0x2b8e: 0x00cc, 0x2b8f: 0x00cc, 0x2b90: 0x008c, 0x2b91: 0x00cc, + 0x2b92: 0x008c, 0x2b93: 0x00cc, 0x2b94: 0x00cc, 0x2b95: 0x008c, 0x2b96: 0x008c, 0x2b97: 0x008c, + 0x2b98: 0x008c, 0x2b99: 0x008c, 0x2b9a: 0x008c, 0x2b9b: 0x008c, 0x2b9c: 0x008c, 0x2b9d: 0x008c, + 0x2b9e: 0x008c, 0x2b9f: 0x00cc, 0x2ba0: 0x008c, 0x2ba1: 0x00cc, 0x2ba2: 0x008c, 0x2ba3: 0x00cc, + 0x2ba4: 0x00cc, 0x2ba5: 0x008c, 0x2ba6: 0x008c, 0x2ba7: 0x00cc, 0x2ba8: 0x00cc, 0x2ba9: 0x00cc, + 0x2baa: 0x008c, 0x2bab: 0x008c, 0x2bac: 0x008c, 0x2bad: 0x008c, 0x2bae: 0x008c, 0x2baf: 0x008c, + 0x2bb0: 0x008c, 0x2bb1: 0x008c, 0x2bb2: 0x008c, 0x2bb3: 0x008c, 0x2bb4: 0x008c, 0x2bb5: 0x008c, + 0x2bb6: 0x008c, 0x2bb7: 0x008c, 0x2bb8: 0x008c, 0x2bb9: 0x008c, 0x2bba: 0x008c, 0x2bbb: 0x008c, + 0x2bbc: 0x008c, 0x2bbd: 0x008c, 0x2bbe: 0x008c, 0x2bbf: 0x008c, + // Block 0xaf, offset 0x2bc0 + 0x2bc0: 0x008c, 0x2bc1: 0x008c, 0x2bc2: 0x008c, 0x2bc3: 0x008c, 0x2bc4: 0x008c, 0x2bc5: 0x008c, + 0x2bc6: 0x008c, 0x2bc7: 0x008c, 0x2bc8: 0x008c, 0x2bc9: 0x008c, 0x2bca: 0x008c, 0x2bcb: 0x008c, + 0x2bcc: 0x008c, 0x2bcd: 0x008c, 0x2bce: 0x008c, 0x2bcf: 0x008c, 0x2bd0: 0x008c, 0x2bd1: 0x008c, + 0x2bd2: 0x008c, 0x2bd3: 0x008c, 0x2bd4: 0x008c, 0x2bd5: 0x008c, 0x2bd6: 0x008c, 0x2bd7: 0x008c, + 0x2bd8: 0x008c, 0x2bd9: 0x008c, 0x2bda: 0x008c, 0x2bdb: 0x008c, 0x2bdc: 0x008c, 0x2bdd: 0x008c, + 0x2bde: 0x008c, 0x2bdf: 0x008c, 0x2be0: 0x008c, 0x2be1: 0x008c, 0x2be2: 0x008c, 0x2be3: 0x008c, + 0x2be4: 0x008c, 0x2be5: 0x008c, 0x2be6: 0x008c, 0x2be7: 0x008c, 0x2be8: 0x008c, 0x2be9: 0x008c, + 0x2bea: 0x008c, 0x2beb: 0x008c, 0x2bec: 0x008c, 0x2bed: 0x008c, + 0x2bf0: 0x008c, 0x2bf1: 0x008c, 0x2bf2: 0x008c, 0x2bf3: 0x008c, 0x2bf4: 0x008c, 0x2bf5: 0x008c, + 0x2bf6: 0x008c, 0x2bf7: 0x008c, 0x2bf8: 0x008c, 0x2bf9: 0x008c, 0x2bfa: 0x008c, 0x2bfb: 0x008c, + 0x2bfc: 0x008c, 0x2bfd: 0x008c, 0x2bfe: 0x008c, 0x2bff: 0x008c, + // Block 0xb0, offset 0x2c00 + 0x2c00: 0x008c, 0x2c01: 0x008c, 0x2c02: 0x008c, 0x2c03: 0x008c, 0x2c04: 0x008c, 0x2c05: 0x008c, + 0x2c06: 0x008c, 0x2c07: 0x008c, 0x2c08: 0x008c, 0x2c09: 0x008c, 0x2c0a: 0x008c, 0x2c0b: 0x008c, + 0x2c0c: 0x008c, 0x2c0d: 0x008c, 0x2c0e: 0x008c, 0x2c0f: 0x008c, 0x2c10: 0x008c, 0x2c11: 0x008c, + 0x2c12: 0x008c, 0x2c13: 0x008c, 0x2c14: 0x008c, 0x2c15: 0x008c, 0x2c16: 0x008c, 0x2c17: 0x008c, + 0x2c18: 0x008c, 0x2c19: 0x008c, + // Block 0xb1, offset 0x2c40 + 0x2c40: 0x0080, 0x2c41: 0x0080, 0x2c42: 0x0080, 0x2c43: 0x0080, 0x2c44: 0x0080, 0x2c45: 0x0080, + 0x2c46: 0x0080, + 0x2c53: 0x0080, 0x2c54: 0x0080, 0x2c55: 0x0080, 0x2c56: 0x0080, 0x2c57: 0x0080, + 0x2c5d: 0x008a, + 0x2c5e: 0x00cb, 0x2c5f: 0x008a, 0x2c60: 0x008a, 0x2c61: 0x008a, 0x2c62: 0x008a, 0x2c63: 0x008a, + 0x2c64: 0x008a, 0x2c65: 0x008a, 0x2c66: 0x008a, 0x2c67: 0x008a, 0x2c68: 0x008a, 0x2c69: 0x008a, + 0x2c6a: 0x008a, 0x2c6b: 0x008a, 0x2c6c: 0x008a, 0x2c6d: 0x008a, 0x2c6e: 0x008a, 0x2c6f: 0x008a, + 0x2c70: 0x008a, 0x2c71: 0x008a, 0x2c72: 0x008a, 0x2c73: 0x008a, 0x2c74: 0x008a, 0x2c75: 0x008a, + 0x2c76: 0x008a, 0x2c78: 0x008a, 0x2c79: 0x008a, 0x2c7a: 0x008a, 0x2c7b: 0x008a, + 0x2c7c: 0x008a, 0x2c7e: 0x008a, + // Block 0xb2, offset 0x2c80 + 0x2c80: 0x008a, 0x2c81: 0x008a, 0x2c83: 0x008a, 0x2c84: 0x008a, + 0x2c86: 0x008a, 0x2c87: 0x008a, 0x2c88: 0x008a, 0x2c89: 0x008a, 0x2c8a: 0x008a, 0x2c8b: 0x008a, + 0x2c8c: 0x008a, 0x2c8d: 0x008a, 0x2c8e: 0x008a, 0x2c8f: 0x008a, 0x2c90: 0x0080, 0x2c91: 0x0080, + 0x2c92: 0x0080, 0x2c93: 0x0080, 0x2c94: 0x0080, 0x2c95: 0x0080, 0x2c96: 0x0080, 0x2c97: 0x0080, + 0x2c98: 0x0080, 0x2c99: 0x0080, 0x2c9a: 0x0080, 0x2c9b: 0x0080, 0x2c9c: 0x0080, 0x2c9d: 0x0080, + 0x2c9e: 0x0080, 0x2c9f: 0x0080, 0x2ca0: 0x0080, 0x2ca1: 0x0080, 0x2ca2: 0x0080, 0x2ca3: 0x0080, + 0x2ca4: 0x0080, 0x2ca5: 0x0080, 0x2ca6: 0x0080, 0x2ca7: 0x0080, 0x2ca8: 0x0080, 0x2ca9: 0x0080, + 0x2caa: 0x0080, 0x2cab: 0x0080, 0x2cac: 0x0080, 0x2cad: 0x0080, 0x2cae: 0x0080, 0x2caf: 0x0080, + 0x2cb0: 0x0080, 0x2cb1: 0x0080, 0x2cb2: 0x0080, 0x2cb3: 0x0080, 0x2cb4: 0x0080, 0x2cb5: 0x0080, + 0x2cb6: 0x0080, 0x2cb7: 0x0080, 0x2cb8: 0x0080, 0x2cb9: 0x0080, 0x2cba: 0x0080, 0x2cbb: 0x0080, + 0x2cbc: 0x0080, 0x2cbd: 0x0080, 0x2cbe: 0x0080, 0x2cbf: 0x0080, + // Block 0xb3, offset 0x2cc0 + 0x2cc0: 0x0080, 0x2cc1: 0x0080, + 0x2cd3: 0x0080, 0x2cd4: 0x0080, 0x2cd5: 0x0080, 0x2cd6: 0x0080, 0x2cd7: 0x0080, + 0x2cd8: 0x0080, 0x2cd9: 0x0080, 0x2cda: 0x0080, 0x2cdb: 0x0080, 0x2cdc: 0x0080, 0x2cdd: 0x0080, + 0x2cde: 0x0080, 0x2cdf: 0x0080, 0x2ce0: 0x0080, 0x2ce1: 0x0080, 0x2ce2: 0x0080, 0x2ce3: 0x0080, + 0x2ce4: 0x0080, 0x2ce5: 0x0080, 0x2ce6: 0x0080, 0x2ce7: 0x0080, 0x2ce8: 0x0080, 0x2ce9: 0x0080, + 0x2cea: 0x0080, 0x2ceb: 0x0080, 0x2cec: 0x0080, 0x2ced: 0x0080, 0x2cee: 0x0080, 0x2cef: 0x0080, + 0x2cf0: 0x0080, 0x2cf1: 0x0080, 0x2cf2: 0x0080, 0x2cf3: 0x0080, 0x2cf4: 0x0080, 0x2cf5: 0x0080, + 0x2cf6: 0x0080, 0x2cf7: 0x0080, 0x2cf8: 0x0080, 0x2cf9: 0x0080, 0x2cfa: 0x0080, 0x2cfb: 0x0080, + 0x2cfc: 0x0080, 0x2cfd: 0x0080, 0x2cfe: 0x0080, 0x2cff: 0x0080, + // Block 0xb4, offset 0x2d00 + 0x2d10: 0x0080, 0x2d11: 0x0080, + 0x2d12: 0x0080, 0x2d13: 0x0080, 0x2d14: 0x0080, 0x2d15: 0x0080, 0x2d16: 0x0080, 0x2d17: 0x0080, + 0x2d18: 0x0080, 0x2d19: 0x0080, 0x2d1a: 0x0080, 0x2d1b: 0x0080, 0x2d1c: 0x0080, 0x2d1d: 0x0080, + 0x2d1e: 0x0080, 0x2d1f: 0x0080, 0x2d20: 0x0080, 0x2d21: 0x0080, 0x2d22: 0x0080, 0x2d23: 0x0080, + 0x2d24: 0x0080, 0x2d25: 0x0080, 0x2d26: 0x0080, 0x2d27: 0x0080, 0x2d28: 0x0080, 0x2d29: 0x0080, + 0x2d2a: 0x0080, 0x2d2b: 0x0080, 0x2d2c: 0x0080, 0x2d2d: 0x0080, 0x2d2e: 0x0080, 0x2d2f: 0x0080, + 0x2d30: 0x0080, 0x2d31: 0x0080, 0x2d32: 0x0080, 0x2d33: 0x0080, 0x2d34: 0x0080, 0x2d35: 0x0080, + 0x2d36: 0x0080, 0x2d37: 0x0080, 0x2d38: 0x0080, 0x2d39: 0x0080, 0x2d3a: 0x0080, 0x2d3b: 0x0080, + 0x2d3c: 0x0080, 0x2d3d: 0x0080, 0x2d3e: 0x0080, 0x2d3f: 0x0080, + // Block 0xb5, offset 0x2d40 + 0x2d40: 0x0080, 0x2d41: 0x0080, 0x2d42: 0x0080, 0x2d43: 0x0080, 0x2d44: 0x0080, 0x2d45: 0x0080, + 0x2d46: 0x0080, 0x2d47: 0x0080, 0x2d48: 0x0080, 0x2d49: 0x0080, 0x2d4a: 0x0080, 0x2d4b: 0x0080, + 0x2d4c: 0x0080, 0x2d4d: 0x0080, 0x2d4e: 0x0080, 0x2d4f: 0x0080, + 0x2d52: 0x0080, 0x2d53: 0x0080, 0x2d54: 0x0080, 0x2d55: 0x0080, 0x2d56: 0x0080, 0x2d57: 0x0080, + 0x2d58: 0x0080, 0x2d59: 0x0080, 0x2d5a: 0x0080, 0x2d5b: 0x0080, 0x2d5c: 0x0080, 0x2d5d: 0x0080, + 0x2d5e: 0x0080, 0x2d5f: 0x0080, 0x2d60: 0x0080, 0x2d61: 0x0080, 0x2d62: 0x0080, 0x2d63: 0x0080, + 0x2d64: 0x0080, 0x2d65: 0x0080, 0x2d66: 0x0080, 0x2d67: 0x0080, 0x2d68: 0x0080, 0x2d69: 0x0080, + 0x2d6a: 0x0080, 0x2d6b: 0x0080, 0x2d6c: 0x0080, 0x2d6d: 0x0080, 0x2d6e: 0x0080, 0x2d6f: 0x0080, + 0x2d70: 0x0080, 0x2d71: 0x0080, 0x2d72: 0x0080, 0x2d73: 0x0080, 0x2d74: 0x0080, 0x2d75: 0x0080, + 0x2d76: 0x0080, 0x2d77: 0x0080, 0x2d78: 0x0080, 0x2d79: 0x0080, 0x2d7a: 0x0080, 0x2d7b: 0x0080, + 0x2d7c: 0x0080, 0x2d7d: 0x0080, 0x2d7e: 0x0080, 0x2d7f: 0x0080, + // Block 0xb6, offset 0x2d80 + 0x2d80: 0x0080, 0x2d81: 0x0080, 0x2d82: 0x0080, 0x2d83: 0x0080, 0x2d84: 0x0080, 0x2d85: 0x0080, + 0x2d86: 0x0080, 0x2d87: 0x0080, + 0x2db0: 0x0080, 0x2db1: 0x0080, 0x2db2: 0x0080, 0x2db3: 0x0080, 0x2db4: 0x0080, 0x2db5: 0x0080, + 0x2db6: 0x0080, 0x2db7: 0x0080, 0x2db8: 0x0080, 0x2db9: 0x0080, 0x2dba: 0x0080, 0x2dbb: 0x0080, + 0x2dbc: 0x0080, 0x2dbd: 0x0080, + // Block 0xb7, offset 0x2dc0 + 0x2dc0: 0x0040, 0x2dc1: 0x0040, 0x2dc2: 0x0040, 0x2dc3: 0x0040, 0x2dc4: 0x0040, 0x2dc5: 0x0040, + 0x2dc6: 0x0040, 0x2dc7: 0x0040, 0x2dc8: 0x0040, 0x2dc9: 0x0040, 0x2dca: 0x0040, 0x2dcb: 0x0040, + 0x2dcc: 0x0040, 0x2dcd: 0x0040, 0x2dce: 0x0040, 0x2dcf: 0x0040, 0x2dd0: 0x0080, 0x2dd1: 0x0080, + 0x2dd2: 0x0080, 0x2dd3: 0x0080, 0x2dd4: 0x0080, 0x2dd5: 0x0080, 0x2dd6: 0x0080, 0x2dd7: 0x0080, + 0x2dd8: 0x0080, 0x2dd9: 0x0080, + 0x2de0: 0x00c3, 0x2de1: 0x00c3, 0x2de2: 0x00c3, 0x2de3: 0x00c3, + 0x2de4: 0x00c3, 0x2de5: 0x00c3, 0x2de6: 0x00c3, 0x2de7: 0x00c3, 0x2de8: 0x00c3, 0x2de9: 0x00c3, + 0x2dea: 0x00c3, 0x2deb: 0x00c3, 0x2dec: 0x00c3, 0x2ded: 0x00c3, 0x2dee: 0x00c3, 0x2def: 0x00c3, + 0x2df0: 0x0080, 0x2df1: 0x0080, 0x2df2: 0x0080, 0x2df3: 0x0080, 0x2df4: 0x0080, 0x2df5: 0x0080, + 0x2df6: 0x0080, 0x2df7: 0x0080, 0x2df8: 0x0080, 0x2df9: 0x0080, 0x2dfa: 0x0080, 0x2dfb: 0x0080, + 0x2dfc: 0x0080, 0x2dfd: 0x0080, 0x2dfe: 0x0080, 0x2dff: 0x0080, + // Block 0xb8, offset 0x2e00 + 0x2e00: 0x0080, 0x2e01: 0x0080, 0x2e02: 0x0080, 0x2e03: 0x0080, 0x2e04: 0x0080, 0x2e05: 0x0080, + 0x2e06: 0x0080, 0x2e07: 0x0080, 0x2e08: 0x0080, 0x2e09: 0x0080, 0x2e0a: 0x0080, 0x2e0b: 0x0080, + 0x2e0c: 0x0080, 0x2e0d: 0x0080, 0x2e0e: 0x0080, 0x2e0f: 0x0080, 0x2e10: 0x0080, 0x2e11: 0x0080, + 0x2e12: 0x0080, 0x2e14: 0x0080, 0x2e15: 0x0080, 0x2e16: 0x0080, 0x2e17: 0x0080, + 0x2e18: 0x0080, 0x2e19: 0x0080, 0x2e1a: 0x0080, 0x2e1b: 0x0080, 0x2e1c: 0x0080, 0x2e1d: 0x0080, + 0x2e1e: 0x0080, 0x2e1f: 0x0080, 0x2e20: 0x0080, 0x2e21: 0x0080, 0x2e22: 0x0080, 0x2e23: 0x0080, + 0x2e24: 0x0080, 0x2e25: 0x0080, 0x2e26: 0x0080, 0x2e28: 0x0080, 0x2e29: 0x0080, + 0x2e2a: 0x0080, 0x2e2b: 0x0080, + 0x2e30: 0x0080, 0x2e31: 0x0080, 0x2e32: 0x0080, 0x2e33: 0x00c0, 0x2e34: 0x0080, + 0x2e36: 0x0080, 0x2e37: 0x0080, 0x2e38: 0x0080, 0x2e39: 0x0080, 0x2e3a: 0x0080, 0x2e3b: 0x0080, + 0x2e3c: 0x0080, 0x2e3d: 0x0080, 0x2e3e: 0x0080, 0x2e3f: 0x0080, + // Block 0xb9, offset 0x2e40 + 0x2e40: 0x0080, 0x2e41: 0x0080, 0x2e42: 0x0080, 0x2e43: 0x0080, 0x2e44: 0x0080, 0x2e45: 0x0080, + 0x2e46: 0x0080, 0x2e47: 0x0080, 0x2e48: 0x0080, 0x2e49: 0x0080, 0x2e4a: 0x0080, 0x2e4b: 0x0080, + 0x2e4c: 0x0080, 0x2e4d: 0x0080, 0x2e4e: 0x0080, 0x2e4f: 0x0080, 0x2e50: 0x0080, 0x2e51: 0x0080, + 0x2e52: 0x0080, 0x2e53: 0x0080, 0x2e54: 0x0080, 0x2e55: 0x0080, 0x2e56: 0x0080, 0x2e57: 0x0080, + 0x2e58: 0x0080, 0x2e59: 0x0080, 0x2e5a: 0x0080, 0x2e5b: 0x0080, 0x2e5c: 0x0080, 0x2e5d: 0x0080, + 0x2e5e: 0x0080, 0x2e5f: 0x0080, 0x2e60: 0x0080, 0x2e61: 0x0080, 0x2e62: 0x0080, 0x2e63: 0x0080, + 0x2e64: 0x0080, 0x2e65: 0x0080, 0x2e66: 0x0080, 0x2e67: 0x0080, 0x2e68: 0x0080, 0x2e69: 0x0080, + 0x2e6a: 0x0080, 0x2e6b: 0x0080, 0x2e6c: 0x0080, 0x2e6d: 0x0080, 0x2e6e: 0x0080, 0x2e6f: 0x0080, + 0x2e70: 0x0080, 0x2e71: 0x0080, 0x2e72: 0x0080, 0x2e73: 0x0080, 0x2e74: 0x0080, 0x2e75: 0x0080, + 0x2e76: 0x0080, 0x2e77: 0x0080, 0x2e78: 0x0080, 0x2e79: 0x0080, 0x2e7a: 0x0080, 0x2e7b: 0x0080, + 0x2e7c: 0x0080, 0x2e7f: 0x0040, + // Block 0xba, offset 0x2e80 + 0x2e81: 0x0080, 0x2e82: 0x0080, 0x2e83: 0x0080, 0x2e84: 0x0080, 0x2e85: 0x0080, + 0x2e86: 0x0080, 0x2e87: 0x0080, 0x2e88: 0x0080, 0x2e89: 0x0080, 0x2e8a: 0x0080, 0x2e8b: 0x0080, + 0x2e8c: 0x0080, 0x2e8d: 0x0080, 0x2e8e: 0x0080, 0x2e8f: 0x0080, 0x2e90: 0x0080, 0x2e91: 0x0080, + 0x2e92: 0x0080, 0x2e93: 0x0080, 0x2e94: 0x0080, 0x2e95: 0x0080, 0x2e96: 0x0080, 0x2e97: 0x0080, + 0x2e98: 0x0080, 0x2e99: 0x0080, 0x2e9a: 0x0080, 0x2e9b: 0x0080, 0x2e9c: 0x0080, 0x2e9d: 0x0080, + 0x2e9e: 0x0080, 0x2e9f: 0x0080, 0x2ea0: 0x0080, 0x2ea1: 0x0080, 0x2ea2: 0x0080, 0x2ea3: 0x0080, + 0x2ea4: 0x0080, 0x2ea5: 0x0080, 0x2ea6: 0x0080, 0x2ea7: 0x0080, 0x2ea8: 0x0080, 0x2ea9: 0x0080, + 0x2eaa: 0x0080, 0x2eab: 0x0080, 0x2eac: 0x0080, 0x2ead: 0x0080, 0x2eae: 0x0080, 0x2eaf: 0x0080, + 0x2eb0: 0x0080, 0x2eb1: 0x0080, 0x2eb2: 0x0080, 0x2eb3: 0x0080, 0x2eb4: 0x0080, 0x2eb5: 0x0080, + 0x2eb6: 0x0080, 0x2eb7: 0x0080, 0x2eb8: 0x0080, 0x2eb9: 0x0080, 0x2eba: 0x0080, 0x2ebb: 0x0080, + 0x2ebc: 0x0080, 0x2ebd: 0x0080, 0x2ebe: 0x0080, 0x2ebf: 0x0080, + // Block 0xbb, offset 0x2ec0 + 0x2ec0: 0x0080, 0x2ec1: 0x0080, 0x2ec2: 0x0080, 0x2ec3: 0x0080, 0x2ec4: 0x0080, 0x2ec5: 0x0080, + 0x2ec6: 0x0080, 0x2ec7: 0x0080, 0x2ec8: 0x0080, 0x2ec9: 0x0080, 0x2eca: 0x0080, 0x2ecb: 0x0080, + 0x2ecc: 0x0080, 0x2ecd: 0x0080, 0x2ece: 0x0080, 0x2ecf: 0x0080, 0x2ed0: 0x0080, 0x2ed1: 0x0080, + 0x2ed2: 0x0080, 0x2ed3: 0x0080, 0x2ed4: 0x0080, 0x2ed5: 0x0080, 0x2ed6: 0x0080, 0x2ed7: 0x0080, + 0x2ed8: 0x0080, 0x2ed9: 0x0080, 0x2eda: 0x0080, 0x2edb: 0x0080, 0x2edc: 0x0080, 0x2edd: 0x0080, + 0x2ede: 0x0080, 0x2edf: 0x0080, 0x2ee0: 0x0080, 0x2ee1: 0x0080, 0x2ee2: 0x0080, 0x2ee3: 0x0080, + 0x2ee4: 0x0080, 0x2ee5: 0x0080, 0x2ee6: 0x008c, 0x2ee7: 0x008c, 0x2ee8: 0x008c, 0x2ee9: 0x008c, + 0x2eea: 0x008c, 0x2eeb: 0x008c, 0x2eec: 0x008c, 0x2eed: 0x008c, 0x2eee: 0x008c, 0x2eef: 0x008c, + 0x2ef0: 0x0080, 0x2ef1: 0x008c, 0x2ef2: 0x008c, 0x2ef3: 0x008c, 0x2ef4: 0x008c, 0x2ef5: 0x008c, + 0x2ef6: 0x008c, 0x2ef7: 0x008c, 0x2ef8: 0x008c, 0x2ef9: 0x008c, 0x2efa: 0x008c, 0x2efb: 0x008c, + 0x2efc: 0x008c, 0x2efd: 0x008c, 0x2efe: 0x008c, 0x2eff: 0x008c, + // Block 0xbc, offset 0x2f00 + 0x2f00: 0x008c, 0x2f01: 0x008c, 0x2f02: 0x008c, 0x2f03: 0x008c, 0x2f04: 0x008c, 0x2f05: 0x008c, + 0x2f06: 0x008c, 0x2f07: 0x008c, 0x2f08: 0x008c, 0x2f09: 0x008c, 0x2f0a: 0x008c, 0x2f0b: 0x008c, + 0x2f0c: 0x008c, 0x2f0d: 0x008c, 0x2f0e: 0x008c, 0x2f0f: 0x008c, 0x2f10: 0x008c, 0x2f11: 0x008c, + 0x2f12: 0x008c, 0x2f13: 0x008c, 0x2f14: 0x008c, 0x2f15: 0x008c, 0x2f16: 0x008c, 0x2f17: 0x008c, + 0x2f18: 0x008c, 0x2f19: 0x008c, 0x2f1a: 0x008c, 0x2f1b: 0x008c, 0x2f1c: 0x008c, 0x2f1d: 0x008c, + 0x2f1e: 0x0080, 0x2f1f: 0x0080, 0x2f20: 0x0040, 0x2f21: 0x0080, 0x2f22: 0x0080, 0x2f23: 0x0080, + 0x2f24: 0x0080, 0x2f25: 0x0080, 0x2f26: 0x0080, 0x2f27: 0x0080, 0x2f28: 0x0080, 0x2f29: 0x0080, + 0x2f2a: 0x0080, 0x2f2b: 0x0080, 0x2f2c: 0x0080, 0x2f2d: 0x0080, 0x2f2e: 0x0080, 0x2f2f: 0x0080, + 0x2f30: 0x0080, 0x2f31: 0x0080, 0x2f32: 0x0080, 0x2f33: 0x0080, 0x2f34: 0x0080, 0x2f35: 0x0080, + 0x2f36: 0x0080, 0x2f37: 0x0080, 0x2f38: 0x0080, 0x2f39: 0x0080, 0x2f3a: 0x0080, 0x2f3b: 0x0080, + 0x2f3c: 0x0080, 0x2f3d: 0x0080, 0x2f3e: 0x0080, + // Block 0xbd, offset 0x2f40 + 0x2f42: 0x0080, 0x2f43: 0x0080, 0x2f44: 0x0080, 0x2f45: 0x0080, + 0x2f46: 0x0080, 0x2f47: 0x0080, 0x2f4a: 0x0080, 0x2f4b: 0x0080, + 0x2f4c: 0x0080, 0x2f4d: 0x0080, 0x2f4e: 0x0080, 0x2f4f: 0x0080, + 0x2f52: 0x0080, 0x2f53: 0x0080, 0x2f54: 0x0080, 0x2f55: 0x0080, 0x2f56: 0x0080, 0x2f57: 0x0080, + 0x2f5a: 0x0080, 0x2f5b: 0x0080, 0x2f5c: 0x0080, + 0x2f60: 0x0080, 0x2f61: 0x0080, 0x2f62: 0x0080, 0x2f63: 0x0080, + 0x2f64: 0x0080, 0x2f65: 0x0080, 0x2f66: 0x0080, 0x2f68: 0x0080, 0x2f69: 0x0080, + 0x2f6a: 0x0080, 0x2f6b: 0x0080, 0x2f6c: 0x0080, 0x2f6d: 0x0080, 0x2f6e: 0x0080, + 0x2f79: 0x0040, 0x2f7a: 0x0040, 0x2f7b: 0x0040, + 0x2f7c: 0x0080, 0x2f7d: 0x0080, + // Block 0xbe, offset 0x2f80 + 0x2f80: 0x00c0, 0x2f81: 0x00c0, 0x2f82: 0x00c0, 0x2f83: 0x00c0, 0x2f84: 0x00c0, 0x2f85: 0x00c0, + 0x2f86: 0x00c0, 0x2f87: 0x00c0, 0x2f88: 0x00c0, 0x2f89: 0x00c0, 0x2f8a: 0x00c0, 0x2f8b: 0x00c0, + 0x2f8d: 0x00c0, 0x2f8e: 0x00c0, 0x2f8f: 0x00c0, 0x2f90: 0x00c0, 0x2f91: 0x00c0, + 0x2f92: 0x00c0, 0x2f93: 0x00c0, 0x2f94: 0x00c0, 0x2f95: 0x00c0, 0x2f96: 0x00c0, 0x2f97: 0x00c0, + 0x2f98: 0x00c0, 0x2f99: 0x00c0, 0x2f9a: 0x00c0, 0x2f9b: 0x00c0, 0x2f9c: 0x00c0, 0x2f9d: 0x00c0, + 0x2f9e: 0x00c0, 0x2f9f: 0x00c0, 0x2fa0: 0x00c0, 0x2fa1: 0x00c0, 0x2fa2: 0x00c0, 0x2fa3: 0x00c0, + 0x2fa4: 0x00c0, 0x2fa5: 0x00c0, 0x2fa6: 0x00c0, 0x2fa8: 0x00c0, 0x2fa9: 0x00c0, + 0x2faa: 0x00c0, 0x2fab: 0x00c0, 0x2fac: 0x00c0, 0x2fad: 0x00c0, 0x2fae: 0x00c0, 0x2faf: 0x00c0, + 0x2fb0: 0x00c0, 0x2fb1: 0x00c0, 0x2fb2: 0x00c0, 0x2fb3: 0x00c0, 0x2fb4: 0x00c0, 0x2fb5: 0x00c0, + 0x2fb6: 0x00c0, 0x2fb7: 0x00c0, 0x2fb8: 0x00c0, 0x2fb9: 0x00c0, 0x2fba: 0x00c0, + 0x2fbc: 0x00c0, 0x2fbd: 0x00c0, 0x2fbf: 0x00c0, + // Block 0xbf, offset 0x2fc0 + 0x2fc0: 0x00c0, 0x2fc1: 0x00c0, 0x2fc2: 0x00c0, 0x2fc3: 0x00c0, 0x2fc4: 0x00c0, 0x2fc5: 0x00c0, + 0x2fc6: 0x00c0, 0x2fc7: 0x00c0, 0x2fc8: 0x00c0, 0x2fc9: 0x00c0, 0x2fca: 0x00c0, 0x2fcb: 0x00c0, + 0x2fcc: 0x00c0, 0x2fcd: 0x00c0, 0x2fd0: 0x00c0, 0x2fd1: 0x00c0, + 0x2fd2: 0x00c0, 0x2fd3: 0x00c0, 0x2fd4: 0x00c0, 0x2fd5: 0x00c0, 0x2fd6: 0x00c0, 0x2fd7: 0x00c0, + 0x2fd8: 0x00c0, 0x2fd9: 0x00c0, 0x2fda: 0x00c0, 0x2fdb: 0x00c0, 0x2fdc: 0x00c0, 0x2fdd: 0x00c0, + // Block 0xc0, offset 0x3000 + 0x3000: 0x00c0, 0x3001: 0x00c0, 0x3002: 0x00c0, 0x3003: 0x00c0, 0x3004: 0x00c0, 0x3005: 0x00c0, + 0x3006: 0x00c0, 0x3007: 0x00c0, 0x3008: 0x00c0, 0x3009: 0x00c0, 0x300a: 0x00c0, 0x300b: 0x00c0, + 0x300c: 0x00c0, 0x300d: 0x00c0, 0x300e: 0x00c0, 0x300f: 0x00c0, 0x3010: 0x00c0, 0x3011: 0x00c0, + 0x3012: 0x00c0, 0x3013: 0x00c0, 0x3014: 0x00c0, 0x3015: 0x00c0, 0x3016: 0x00c0, 0x3017: 0x00c0, + 0x3018: 0x00c0, 0x3019: 0x00c0, 0x301a: 0x00c0, 0x301b: 0x00c0, 0x301c: 0x00c0, 0x301d: 0x00c0, + 0x301e: 0x00c0, 0x301f: 0x00c0, 0x3020: 0x00c0, 0x3021: 0x00c0, 0x3022: 0x00c0, 0x3023: 0x00c0, + 0x3024: 0x00c0, 0x3025: 0x00c0, 0x3026: 0x00c0, 0x3027: 0x00c0, 0x3028: 0x00c0, 0x3029: 0x00c0, + 0x302a: 0x00c0, 0x302b: 0x00c0, 0x302c: 0x00c0, 0x302d: 0x00c0, 0x302e: 0x00c0, 0x302f: 0x00c0, + 0x3030: 0x00c0, 0x3031: 0x00c0, 0x3032: 0x00c0, 0x3033: 0x00c0, 0x3034: 0x00c0, 0x3035: 0x00c0, + 0x3036: 0x00c0, 0x3037: 0x00c0, 0x3038: 0x00c0, 0x3039: 0x00c0, 0x303a: 0x00c0, + // Block 0xc1, offset 0x3040 + 0x3040: 0x0080, 0x3041: 0x0080, 0x3042: 0x0080, + 0x3047: 0x0080, 0x3048: 0x0080, 0x3049: 0x0080, 0x304a: 0x0080, 0x304b: 0x0080, + 0x304c: 0x0080, 0x304d: 0x0080, 0x304e: 0x0080, 0x304f: 0x0080, 0x3050: 0x0080, 0x3051: 0x0080, + 0x3052: 0x0080, 0x3053: 0x0080, 0x3054: 0x0080, 0x3055: 0x0080, 0x3056: 0x0080, 0x3057: 0x0080, + 0x3058: 0x0080, 0x3059: 0x0080, 0x305a: 0x0080, 0x305b: 0x0080, 0x305c: 0x0080, 0x305d: 0x0080, + 0x305e: 0x0080, 0x305f: 0x0080, 0x3060: 0x0080, 0x3061: 0x0080, 0x3062: 0x0080, 0x3063: 0x0080, + 0x3064: 0x0080, 0x3065: 0x0080, 0x3066: 0x0080, 0x3067: 0x0080, 0x3068: 0x0080, 0x3069: 0x0080, + 0x306a: 0x0080, 0x306b: 0x0080, 0x306c: 0x0080, 0x306d: 0x0080, 0x306e: 0x0080, 0x306f: 0x0080, + 0x3070: 0x0080, 0x3071: 0x0080, 0x3072: 0x0080, 0x3073: 0x0080, + 0x3077: 0x0080, 0x3078: 0x0080, 0x3079: 0x0080, 0x307a: 0x0080, 0x307b: 0x0080, + 0x307c: 0x0080, 0x307d: 0x0080, 0x307e: 0x0080, 0x307f: 0x0080, + // Block 0xc2, offset 0x3080 + 0x3080: 0x0088, 0x3081: 0x0088, 0x3082: 0x0088, 0x3083: 0x0088, 0x3084: 0x0088, 0x3085: 0x0088, + 0x3086: 0x0088, 0x3087: 0x0088, 0x3088: 0x0088, 0x3089: 0x0088, 0x308a: 0x0088, 0x308b: 0x0088, + 0x308c: 0x0088, 0x308d: 0x0088, 0x308e: 0x0088, 0x308f: 0x0088, 0x3090: 0x0088, 0x3091: 0x0088, + 0x3092: 0x0088, 0x3093: 0x0088, 0x3094: 0x0088, 0x3095: 0x0088, 0x3096: 0x0088, 0x3097: 0x0088, + 0x3098: 0x0088, 0x3099: 0x0088, 0x309a: 0x0088, 0x309b: 0x0088, 0x309c: 0x0088, 0x309d: 0x0088, + 0x309e: 0x0088, 0x309f: 0x0088, 0x30a0: 0x0088, 0x30a1: 0x0088, 0x30a2: 0x0088, 0x30a3: 0x0088, + 0x30a4: 0x0088, 0x30a5: 0x0088, 0x30a6: 0x0088, 0x30a7: 0x0088, 0x30a8: 0x0088, 0x30a9: 0x0088, + 0x30aa: 0x0088, 0x30ab: 0x0088, 0x30ac: 0x0088, 0x30ad: 0x0088, 0x30ae: 0x0088, 0x30af: 0x0088, + 0x30b0: 0x0088, 0x30b1: 0x0088, 0x30b2: 0x0088, 0x30b3: 0x0088, 0x30b4: 0x0088, 0x30b5: 0x0088, + 0x30b6: 0x0088, 0x30b7: 0x0088, 0x30b8: 0x0088, 0x30b9: 0x0088, 0x30ba: 0x0088, 0x30bb: 0x0088, + 0x30bc: 0x0088, 0x30bd: 0x0088, 0x30be: 0x0088, 0x30bf: 0x0088, + // Block 0xc3, offset 0x30c0 + 0x30c0: 0x0088, 0x30c1: 0x0088, 0x30c2: 0x0088, 0x30c3: 0x0088, 0x30c4: 0x0088, 0x30c5: 0x0088, + 0x30c6: 0x0088, 0x30c7: 0x0088, 0x30c8: 0x0088, 0x30c9: 0x0088, 0x30ca: 0x0088, 0x30cb: 0x0088, + 0x30cc: 0x0088, 0x30cd: 0x0088, 0x30ce: 0x0088, 0x30d0: 0x0080, 0x30d1: 0x0080, + 0x30d2: 0x0080, 0x30d3: 0x0080, 0x30d4: 0x0080, 0x30d5: 0x0080, 0x30d6: 0x0080, 0x30d7: 0x0080, + 0x30d8: 0x0080, 0x30d9: 0x0080, 0x30da: 0x0080, 0x30db: 0x0080, + 0x30e0: 0x0088, + // Block 0xc4, offset 0x3100 + 0x3110: 0x0080, 0x3111: 0x0080, + 0x3112: 0x0080, 0x3113: 0x0080, 0x3114: 0x0080, 0x3115: 0x0080, 0x3116: 0x0080, 0x3117: 0x0080, + 0x3118: 0x0080, 0x3119: 0x0080, 0x311a: 0x0080, 0x311b: 0x0080, 0x311c: 0x0080, 0x311d: 0x0080, + 0x311e: 0x0080, 0x311f: 0x0080, 0x3120: 0x0080, 0x3121: 0x0080, 0x3122: 0x0080, 0x3123: 0x0080, + 0x3124: 0x0080, 0x3125: 0x0080, 0x3126: 0x0080, 0x3127: 0x0080, 0x3128: 0x0080, 0x3129: 0x0080, + 0x312a: 0x0080, 0x312b: 0x0080, 0x312c: 0x0080, 0x312d: 0x0080, 0x312e: 0x0080, 0x312f: 0x0080, + 0x3130: 0x0080, 0x3131: 0x0080, 0x3132: 0x0080, 0x3133: 0x0080, 0x3134: 0x0080, 0x3135: 0x0080, + 0x3136: 0x0080, 0x3137: 0x0080, 0x3138: 0x0080, 0x3139: 0x0080, 0x313a: 0x0080, 0x313b: 0x0080, + 0x313c: 0x0080, 0x313d: 0x00c3, + // Block 0xc5, offset 0x3140 + 0x3140: 0x00c0, 0x3141: 0x00c0, 0x3142: 0x00c0, 0x3143: 0x00c0, 0x3144: 0x00c0, 0x3145: 0x00c0, + 0x3146: 0x00c0, 0x3147: 0x00c0, 0x3148: 0x00c0, 0x3149: 0x00c0, 0x314a: 0x00c0, 0x314b: 0x00c0, + 0x314c: 0x00c0, 0x314d: 0x00c0, 0x314e: 0x00c0, 0x314f: 0x00c0, 0x3150: 0x00c0, 0x3151: 0x00c0, + 0x3152: 0x00c0, 0x3153: 0x00c0, 0x3154: 0x00c0, 0x3155: 0x00c0, 0x3156: 0x00c0, 0x3157: 0x00c0, + 0x3158: 0x00c0, 0x3159: 0x00c0, 0x315a: 0x00c0, 0x315b: 0x00c0, 0x315c: 0x00c0, + 0x3160: 0x00c0, 0x3161: 0x00c0, 0x3162: 0x00c0, 0x3163: 0x00c0, + 0x3164: 0x00c0, 0x3165: 0x00c0, 0x3166: 0x00c0, 0x3167: 0x00c0, 0x3168: 0x00c0, 0x3169: 0x00c0, + 0x316a: 0x00c0, 0x316b: 0x00c0, 0x316c: 0x00c0, 0x316d: 0x00c0, 0x316e: 0x00c0, 0x316f: 0x00c0, + 0x3170: 0x00c0, 0x3171: 0x00c0, 0x3172: 0x00c0, 0x3173: 0x00c0, 0x3174: 0x00c0, 0x3175: 0x00c0, + 0x3176: 0x00c0, 0x3177: 0x00c0, 0x3178: 0x00c0, 0x3179: 0x00c0, 0x317a: 0x00c0, 0x317b: 0x00c0, + 0x317c: 0x00c0, 0x317d: 0x00c0, 0x317e: 0x00c0, 0x317f: 0x00c0, + // Block 0xc6, offset 0x3180 + 0x3180: 0x00c0, 0x3181: 0x00c0, 0x3182: 0x00c0, 0x3183: 0x00c0, 0x3184: 0x00c0, 0x3185: 0x00c0, + 0x3186: 0x00c0, 0x3187: 0x00c0, 0x3188: 0x00c0, 0x3189: 0x00c0, 0x318a: 0x00c0, 0x318b: 0x00c0, + 0x318c: 0x00c0, 0x318d: 0x00c0, 0x318e: 0x00c0, 0x318f: 0x00c0, 0x3190: 0x00c0, + 0x31a0: 0x00c3, 0x31a1: 0x0080, 0x31a2: 0x0080, 0x31a3: 0x0080, + 0x31a4: 0x0080, 0x31a5: 0x0080, 0x31a6: 0x0080, 0x31a7: 0x0080, 0x31a8: 0x0080, 0x31a9: 0x0080, + 0x31aa: 0x0080, 0x31ab: 0x0080, 0x31ac: 0x0080, 0x31ad: 0x0080, 0x31ae: 0x0080, 0x31af: 0x0080, + 0x31b0: 0x0080, 0x31b1: 0x0080, 0x31b2: 0x0080, 0x31b3: 0x0080, 0x31b4: 0x0080, 0x31b5: 0x0080, + 0x31b6: 0x0080, 0x31b7: 0x0080, 0x31b8: 0x0080, 0x31b9: 0x0080, 0x31ba: 0x0080, 0x31bb: 0x0080, + // Block 0xc7, offset 0x31c0 + 0x31c0: 0x00c0, 0x31c1: 0x00c0, 0x31c2: 0x00c0, 0x31c3: 0x00c0, 0x31c4: 0x00c0, 0x31c5: 0x00c0, + 0x31c6: 0x00c0, 0x31c7: 0x00c0, 0x31c8: 0x00c0, 0x31c9: 0x00c0, 0x31ca: 0x00c0, 0x31cb: 0x00c0, + 0x31cc: 0x00c0, 0x31cd: 0x00c0, 0x31ce: 0x00c0, 0x31cf: 0x00c0, 0x31d0: 0x00c0, 0x31d1: 0x00c0, + 0x31d2: 0x00c0, 0x31d3: 0x00c0, 0x31d4: 0x00c0, 0x31d5: 0x00c0, 0x31d6: 0x00c0, 0x31d7: 0x00c0, + 0x31d8: 0x00c0, 0x31d9: 0x00c0, 0x31da: 0x00c0, 0x31db: 0x00c0, 0x31dc: 0x00c0, 0x31dd: 0x00c0, + 0x31de: 0x00c0, 0x31df: 0x00c0, 0x31e0: 0x0080, 0x31e1: 0x0080, 0x31e2: 0x0080, 0x31e3: 0x0080, + 0x31ed: 0x00c0, 0x31ee: 0x00c0, 0x31ef: 0x00c0, + 0x31f0: 0x00c0, 0x31f1: 0x00c0, 0x31f2: 0x00c0, 0x31f3: 0x00c0, 0x31f4: 0x00c0, 0x31f5: 0x00c0, + 0x31f6: 0x00c0, 0x31f7: 0x00c0, 0x31f8: 0x00c0, 0x31f9: 0x00c0, 0x31fa: 0x00c0, 0x31fb: 0x00c0, + 0x31fc: 0x00c0, 0x31fd: 0x00c0, 0x31fe: 0x00c0, 0x31ff: 0x00c0, + // Block 0xc8, offset 0x3200 + 0x3200: 0x00c0, 0x3201: 0x0080, 0x3202: 0x00c0, 0x3203: 0x00c0, 0x3204: 0x00c0, 0x3205: 0x00c0, + 0x3206: 0x00c0, 0x3207: 0x00c0, 0x3208: 0x00c0, 0x3209: 0x00c0, 0x320a: 0x0080, + 0x3210: 0x00c0, 0x3211: 0x00c0, + 0x3212: 0x00c0, 0x3213: 0x00c0, 0x3214: 0x00c0, 0x3215: 0x00c0, 0x3216: 0x00c0, 0x3217: 0x00c0, + 0x3218: 0x00c0, 0x3219: 0x00c0, 0x321a: 0x00c0, 0x321b: 0x00c0, 0x321c: 0x00c0, 0x321d: 0x00c0, + 0x321e: 0x00c0, 0x321f: 0x00c0, 0x3220: 0x00c0, 0x3221: 0x00c0, 0x3222: 0x00c0, 0x3223: 0x00c0, + 0x3224: 0x00c0, 0x3225: 0x00c0, 0x3226: 0x00c0, 0x3227: 0x00c0, 0x3228: 0x00c0, 0x3229: 0x00c0, + 0x322a: 0x00c0, 0x322b: 0x00c0, 0x322c: 0x00c0, 0x322d: 0x00c0, 0x322e: 0x00c0, 0x322f: 0x00c0, + 0x3230: 0x00c0, 0x3231: 0x00c0, 0x3232: 0x00c0, 0x3233: 0x00c0, 0x3234: 0x00c0, 0x3235: 0x00c0, + 0x3236: 0x00c3, 0x3237: 0x00c3, 0x3238: 0x00c3, 0x3239: 0x00c3, 0x323a: 0x00c3, + // Block 0xc9, offset 0x3240 + 0x3240: 0x00c0, 0x3241: 0x00c0, 0x3242: 0x00c0, 0x3243: 0x00c0, 0x3244: 0x00c0, 0x3245: 0x00c0, + 0x3246: 0x00c0, 0x3247: 0x00c0, 0x3248: 0x00c0, 0x3249: 0x00c0, 0x324a: 0x00c0, 0x324b: 0x00c0, + 0x324c: 0x00c0, 0x324d: 0x00c0, 0x324e: 0x00c0, 0x324f: 0x00c0, 0x3250: 0x00c0, 0x3251: 0x00c0, + 0x3252: 0x00c0, 0x3253: 0x00c0, 0x3254: 0x00c0, 0x3255: 0x00c0, 0x3256: 0x00c0, 0x3257: 0x00c0, + 0x3258: 0x00c0, 0x3259: 0x00c0, 0x325a: 0x00c0, 0x325b: 0x00c0, 0x325c: 0x00c0, 0x325d: 0x00c0, + 0x325f: 0x0080, 0x3260: 0x00c0, 0x3261: 0x00c0, 0x3262: 0x00c0, 0x3263: 0x00c0, + 0x3264: 0x00c0, 0x3265: 0x00c0, 0x3266: 0x00c0, 0x3267: 0x00c0, 0x3268: 0x00c0, 0x3269: 0x00c0, + 0x326a: 0x00c0, 0x326b: 0x00c0, 0x326c: 0x00c0, 0x326d: 0x00c0, 0x326e: 0x00c0, 0x326f: 0x00c0, + 0x3270: 0x00c0, 0x3271: 0x00c0, 0x3272: 0x00c0, 0x3273: 0x00c0, 0x3274: 0x00c0, 0x3275: 0x00c0, + 0x3276: 0x00c0, 0x3277: 0x00c0, 0x3278: 0x00c0, 0x3279: 0x00c0, 0x327a: 0x00c0, 0x327b: 0x00c0, + 0x327c: 0x00c0, 0x327d: 0x00c0, 0x327e: 0x00c0, 0x327f: 0x00c0, + // Block 0xca, offset 0x3280 + 0x3280: 0x00c0, 0x3281: 0x00c0, 0x3282: 0x00c0, 0x3283: 0x00c0, + 0x3288: 0x00c0, 0x3289: 0x00c0, 0x328a: 0x00c0, 0x328b: 0x00c0, + 0x328c: 0x00c0, 0x328d: 0x00c0, 0x328e: 0x00c0, 0x328f: 0x00c0, 0x3290: 0x0080, 0x3291: 0x0080, + 0x3292: 0x0080, 0x3293: 0x0080, 0x3294: 0x0080, 0x3295: 0x0080, + // Block 0xcb, offset 0x32c0 + 0x32c0: 0x00c0, 0x32c1: 0x00c0, 0x32c2: 0x00c0, 0x32c3: 0x00c0, 0x32c4: 0x00c0, 0x32c5: 0x00c0, + 0x32c6: 0x00c0, 0x32c7: 0x00c0, 0x32c8: 0x00c0, 0x32c9: 0x00c0, 0x32ca: 0x00c0, 0x32cb: 0x00c0, + 0x32cc: 0x00c0, 0x32cd: 0x00c0, 0x32ce: 0x00c0, 0x32cf: 0x00c0, 0x32d0: 0x00c0, 0x32d1: 0x00c0, + 0x32d2: 0x00c0, 0x32d3: 0x00c0, 0x32d4: 0x00c0, 0x32d5: 0x00c0, 0x32d6: 0x00c0, 0x32d7: 0x00c0, + 0x32d8: 0x00c0, 0x32d9: 0x00c0, 0x32da: 0x00c0, 0x32db: 0x00c0, 0x32dc: 0x00c0, 0x32dd: 0x00c0, + 0x32e0: 0x00c0, 0x32e1: 0x00c0, 0x32e2: 0x00c0, 0x32e3: 0x00c0, + 0x32e4: 0x00c0, 0x32e5: 0x00c0, 0x32e6: 0x00c0, 0x32e7: 0x00c0, 0x32e8: 0x00c0, 0x32e9: 0x00c0, + 0x32f0: 0x00c0, 0x32f1: 0x00c0, 0x32f2: 0x00c0, 0x32f3: 0x00c0, 0x32f4: 0x00c0, 0x32f5: 0x00c0, + 0x32f6: 0x00c0, 0x32f7: 0x00c0, 0x32f8: 0x00c0, 0x32f9: 0x00c0, 0x32fa: 0x00c0, 0x32fb: 0x00c0, + 0x32fc: 0x00c0, 0x32fd: 0x00c0, 0x32fe: 0x00c0, 0x32ff: 0x00c0, + // Block 0xcc, offset 0x3300 + 0x3300: 0x00c0, 0x3301: 0x00c0, 0x3302: 0x00c0, 0x3303: 0x00c0, 0x3304: 0x00c0, 0x3305: 0x00c0, + 0x3306: 0x00c0, 0x3307: 0x00c0, 0x3308: 0x00c0, 0x3309: 0x00c0, 0x330a: 0x00c0, 0x330b: 0x00c0, + 0x330c: 0x00c0, 0x330d: 0x00c0, 0x330e: 0x00c0, 0x330f: 0x00c0, 0x3310: 0x00c0, 0x3311: 0x00c0, + 0x3312: 0x00c0, 0x3313: 0x00c0, + 0x3318: 0x00c0, 0x3319: 0x00c0, 0x331a: 0x00c0, 0x331b: 0x00c0, 0x331c: 0x00c0, 0x331d: 0x00c0, + 0x331e: 0x00c0, 0x331f: 0x00c0, 0x3320: 0x00c0, 0x3321: 0x00c0, 0x3322: 0x00c0, 0x3323: 0x00c0, + 0x3324: 0x00c0, 0x3325: 0x00c0, 0x3326: 0x00c0, 0x3327: 0x00c0, 0x3328: 0x00c0, 0x3329: 0x00c0, + 0x332a: 0x00c0, 0x332b: 0x00c0, 0x332c: 0x00c0, 0x332d: 0x00c0, 0x332e: 0x00c0, 0x332f: 0x00c0, + 0x3330: 0x00c0, 0x3331: 0x00c0, 0x3332: 0x00c0, 0x3333: 0x00c0, 0x3334: 0x00c0, 0x3335: 0x00c0, + 0x3336: 0x00c0, 0x3337: 0x00c0, 0x3338: 0x00c0, 0x3339: 0x00c0, 0x333a: 0x00c0, 0x333b: 0x00c0, + // Block 0xcd, offset 0x3340 + 0x3340: 0x00c0, 0x3341: 0x00c0, 0x3342: 0x00c0, 0x3343: 0x00c0, 0x3344: 0x00c0, 0x3345: 0x00c0, + 0x3346: 0x00c0, 0x3347: 0x00c0, 0x3348: 0x00c0, 0x3349: 0x00c0, 0x334a: 0x00c0, 0x334b: 0x00c0, + 0x334c: 0x00c0, 0x334d: 0x00c0, 0x334e: 0x00c0, 0x334f: 0x00c0, 0x3350: 0x00c0, 0x3351: 0x00c0, + 0x3352: 0x00c0, 0x3353: 0x00c0, 0x3354: 0x00c0, 0x3355: 0x00c0, 0x3356: 0x00c0, 0x3357: 0x00c0, + 0x3358: 0x00c0, 0x3359: 0x00c0, 0x335a: 0x00c0, 0x335b: 0x00c0, 0x335c: 0x00c0, 0x335d: 0x00c0, + 0x335e: 0x00c0, 0x335f: 0x00c0, 0x3360: 0x00c0, 0x3361: 0x00c0, 0x3362: 0x00c0, 0x3363: 0x00c0, + 0x3364: 0x00c0, 0x3365: 0x00c0, 0x3366: 0x00c0, 0x3367: 0x00c0, + 0x3370: 0x00c0, 0x3371: 0x00c0, 0x3372: 0x00c0, 0x3373: 0x00c0, 0x3374: 0x00c0, 0x3375: 0x00c0, + 0x3376: 0x00c0, 0x3377: 0x00c0, 0x3378: 0x00c0, 0x3379: 0x00c0, 0x337a: 0x00c0, 0x337b: 0x00c0, + 0x337c: 0x00c0, 0x337d: 0x00c0, 0x337e: 0x00c0, 0x337f: 0x00c0, + // Block 0xce, offset 0x3380 + 0x3380: 0x00c0, 0x3381: 0x00c0, 0x3382: 0x00c0, 0x3383: 0x00c0, 0x3384: 0x00c0, 0x3385: 0x00c0, + 0x3386: 0x00c0, 0x3387: 0x00c0, 0x3388: 0x00c0, 0x3389: 0x00c0, 0x338a: 0x00c0, 0x338b: 0x00c0, + 0x338c: 0x00c0, 0x338d: 0x00c0, 0x338e: 0x00c0, 0x338f: 0x00c0, 0x3390: 0x00c0, 0x3391: 0x00c0, + 0x3392: 0x00c0, 0x3393: 0x00c0, 0x3394: 0x00c0, 0x3395: 0x00c0, 0x3396: 0x00c0, 0x3397: 0x00c0, + 0x3398: 0x00c0, 0x3399: 0x00c0, 0x339a: 0x00c0, 0x339b: 0x00c0, 0x339c: 0x00c0, 0x339d: 0x00c0, + 0x339e: 0x00c0, 0x339f: 0x00c0, 0x33a0: 0x00c0, 0x33a1: 0x00c0, 0x33a2: 0x00c0, 0x33a3: 0x00c0, + 0x33af: 0x0080, + // Block 0xcf, offset 0x33c0 + 0x33c0: 0x00c0, 0x33c1: 0x00c0, 0x33c2: 0x00c0, 0x33c3: 0x00c0, 0x33c4: 0x00c0, 0x33c5: 0x00c0, + 0x33c6: 0x00c0, 0x33c7: 0x00c0, 0x33c8: 0x00c0, 0x33c9: 0x00c0, 0x33ca: 0x00c0, 0x33cb: 0x00c0, + 0x33cc: 0x00c0, 0x33cd: 0x00c0, 0x33ce: 0x00c0, 0x33cf: 0x00c0, 0x33d0: 0x00c0, 0x33d1: 0x00c0, + 0x33d2: 0x00c0, 0x33d3: 0x00c0, 0x33d4: 0x00c0, 0x33d5: 0x00c0, 0x33d6: 0x00c0, 0x33d7: 0x00c0, + 0x33d8: 0x00c0, 0x33d9: 0x00c0, 0x33da: 0x00c0, 0x33db: 0x00c0, 0x33dc: 0x00c0, 0x33dd: 0x00c0, + 0x33de: 0x00c0, 0x33df: 0x00c0, 0x33e0: 0x00c0, 0x33e1: 0x00c0, 0x33e2: 0x00c0, 0x33e3: 0x00c0, + 0x33e4: 0x00c0, 0x33e5: 0x00c0, 0x33e6: 0x00c0, 0x33e7: 0x00c0, 0x33e8: 0x00c0, 0x33e9: 0x00c0, + 0x33ea: 0x00c0, 0x33eb: 0x00c0, 0x33ec: 0x00c0, 0x33ed: 0x00c0, 0x33ee: 0x00c0, 0x33ef: 0x00c0, + 0x33f0: 0x00c0, 0x33f1: 0x00c0, 0x33f2: 0x00c0, 0x33f3: 0x00c0, 0x33f4: 0x00c0, 0x33f5: 0x00c0, + 0x33f6: 0x00c0, + // Block 0xd0, offset 0x3400 + 0x3400: 0x00c0, 0x3401: 0x00c0, 0x3402: 0x00c0, 0x3403: 0x00c0, 0x3404: 0x00c0, 0x3405: 0x00c0, + 0x3406: 0x00c0, 0x3407: 0x00c0, 0x3408: 0x00c0, 0x3409: 0x00c0, 0x340a: 0x00c0, 0x340b: 0x00c0, + 0x340c: 0x00c0, 0x340d: 0x00c0, 0x340e: 0x00c0, 0x340f: 0x00c0, 0x3410: 0x00c0, 0x3411: 0x00c0, + 0x3412: 0x00c0, 0x3413: 0x00c0, 0x3414: 0x00c0, 0x3415: 0x00c0, + 0x3420: 0x00c0, 0x3421: 0x00c0, 0x3422: 0x00c0, 0x3423: 0x00c0, + 0x3424: 0x00c0, 0x3425: 0x00c0, 0x3426: 0x00c0, 0x3427: 0x00c0, + // Block 0xd1, offset 0x3440 + 0x3440: 0x00c0, 0x3441: 0x00c0, 0x3442: 0x00c0, 0x3443: 0x00c0, 0x3444: 0x00c0, 0x3445: 0x00c0, + 0x3448: 0x00c0, 0x344a: 0x00c0, 0x344b: 0x00c0, + 0x344c: 0x00c0, 0x344d: 0x00c0, 0x344e: 0x00c0, 0x344f: 0x00c0, 0x3450: 0x00c0, 0x3451: 0x00c0, + 0x3452: 0x00c0, 0x3453: 0x00c0, 0x3454: 0x00c0, 0x3455: 0x00c0, 0x3456: 0x00c0, 0x3457: 0x00c0, + 0x3458: 0x00c0, 0x3459: 0x00c0, 0x345a: 0x00c0, 0x345b: 0x00c0, 0x345c: 0x00c0, 0x345d: 0x00c0, + 0x345e: 0x00c0, 0x345f: 0x00c0, 0x3460: 0x00c0, 0x3461: 0x00c0, 0x3462: 0x00c0, 0x3463: 0x00c0, + 0x3464: 0x00c0, 0x3465: 0x00c0, 0x3466: 0x00c0, 0x3467: 0x00c0, 0x3468: 0x00c0, 0x3469: 0x00c0, + 0x346a: 0x00c0, 0x346b: 0x00c0, 0x346c: 0x00c0, 0x346d: 0x00c0, 0x346e: 0x00c0, 0x346f: 0x00c0, + 0x3470: 0x00c0, 0x3471: 0x00c0, 0x3472: 0x00c0, 0x3473: 0x00c0, 0x3474: 0x00c0, 0x3475: 0x00c0, + 0x3477: 0x00c0, 0x3478: 0x00c0, + 0x347c: 0x00c0, 0x347f: 0x00c0, + // Block 0xd2, offset 0x3480 + 0x3480: 0x00c0, 0x3481: 0x00c0, 0x3482: 0x00c0, 0x3483: 0x00c0, 0x3484: 0x00c0, 0x3485: 0x00c0, + 0x3486: 0x00c0, 0x3487: 0x00c0, 0x3488: 0x00c0, 0x3489: 0x00c0, 0x348a: 0x00c0, 0x348b: 0x00c0, + 0x348c: 0x00c0, 0x348d: 0x00c0, 0x348e: 0x00c0, 0x348f: 0x00c0, 0x3490: 0x00c0, 0x3491: 0x00c0, + 0x3492: 0x00c0, 0x3493: 0x00c0, 0x3494: 0x00c0, 0x3495: 0x00c0, 0x3497: 0x0080, + 0x3498: 0x0080, 0x3499: 0x0080, 0x349a: 0x0080, 0x349b: 0x0080, 0x349c: 0x0080, 0x349d: 0x0080, + 0x349e: 0x0080, 0x349f: 0x0080, 0x34a0: 0x00c0, 0x34a1: 0x00c0, 0x34a2: 0x00c0, 0x34a3: 0x00c0, + 0x34a4: 0x00c0, 0x34a5: 0x00c0, 0x34a6: 0x00c0, 0x34a7: 0x00c0, 0x34a8: 0x00c0, 0x34a9: 0x00c0, + 0x34aa: 0x00c0, 0x34ab: 0x00c0, 0x34ac: 0x00c0, 0x34ad: 0x00c0, 0x34ae: 0x00c0, 0x34af: 0x00c0, + 0x34b0: 0x00c0, 0x34b1: 0x00c0, 0x34b2: 0x00c0, 0x34b3: 0x00c0, 0x34b4: 0x00c0, 0x34b5: 0x00c0, + 0x34b6: 0x00c0, 0x34b7: 0x0080, 0x34b8: 0x0080, 0x34b9: 0x0080, 0x34ba: 0x0080, 0x34bb: 0x0080, + 0x34bc: 0x0080, 0x34bd: 0x0080, 0x34be: 0x0080, 0x34bf: 0x0080, + // Block 0xd3, offset 0x34c0 + 0x34c0: 0x00c0, 0x34c1: 0x00c0, 0x34c2: 0x00c0, 0x34c3: 0x00c0, 0x34c4: 0x00c0, 0x34c5: 0x00c0, + 0x34c6: 0x00c0, 0x34c7: 0x00c0, 0x34c8: 0x00c0, 0x34c9: 0x00c0, 0x34ca: 0x00c0, 0x34cb: 0x00c0, + 0x34cc: 0x00c0, 0x34cd: 0x00c0, 0x34ce: 0x00c0, 0x34cf: 0x00c0, 0x34d0: 0x00c0, 0x34d1: 0x00c0, + 0x34d2: 0x00c0, 0x34d3: 0x00c0, 0x34d4: 0x00c0, 0x34d5: 0x00c0, 0x34d6: 0x00c0, 0x34d7: 0x00c0, + 0x34d8: 0x00c0, 0x34d9: 0x00c0, 0x34da: 0x00c0, 0x34db: 0x00c0, 0x34dc: 0x00c0, 0x34dd: 0x00c0, + 0x34de: 0x00c0, + 0x34e7: 0x0080, 0x34e8: 0x0080, 0x34e9: 0x0080, + 0x34ea: 0x0080, 0x34eb: 0x0080, 0x34ec: 0x0080, 0x34ed: 0x0080, 0x34ee: 0x0080, 0x34ef: 0x0080, + // Block 0xd4, offset 0x3500 + 0x3520: 0x00c0, 0x3521: 0x00c0, 0x3522: 0x00c0, 0x3523: 0x00c0, + 0x3524: 0x00c0, 0x3525: 0x00c0, 0x3526: 0x00c0, 0x3527: 0x00c0, 0x3528: 0x00c0, 0x3529: 0x00c0, + 0x352a: 0x00c0, 0x352b: 0x00c0, 0x352c: 0x00c0, 0x352d: 0x00c0, 0x352e: 0x00c0, 0x352f: 0x00c0, + 0x3530: 0x00c0, 0x3531: 0x00c0, 0x3532: 0x00c0, 0x3534: 0x00c0, 0x3535: 0x00c0, + 0x353b: 0x0080, + 0x353c: 0x0080, 0x353d: 0x0080, 0x353e: 0x0080, 0x353f: 0x0080, + // Block 0xd5, offset 0x3540 + 0x3540: 0x00c0, 0x3541: 0x00c0, 0x3542: 0x00c0, 0x3543: 0x00c0, 0x3544: 0x00c0, 0x3545: 0x00c0, + 0x3546: 0x00c0, 0x3547: 0x00c0, 0x3548: 0x00c0, 0x3549: 0x00c0, 0x354a: 0x00c0, 0x354b: 0x00c0, + 0x354c: 0x00c0, 0x354d: 0x00c0, 0x354e: 0x00c0, 0x354f: 0x00c0, 0x3550: 0x00c0, 0x3551: 0x00c0, + 0x3552: 0x00c0, 0x3553: 0x00c0, 0x3554: 0x00c0, 0x3555: 0x00c0, 0x3556: 0x0080, 0x3557: 0x0080, + 0x3558: 0x0080, 0x3559: 0x0080, 0x355a: 0x0080, 0x355b: 0x0080, + 0x355f: 0x0080, 0x3560: 0x00c0, 0x3561: 0x00c0, 0x3562: 0x00c0, 0x3563: 0x00c0, + 0x3564: 0x00c0, 0x3565: 0x00c0, 0x3566: 0x00c0, 0x3567: 0x00c0, 0x3568: 0x00c0, 0x3569: 0x00c0, + 0x356a: 0x00c0, 0x356b: 0x00c0, 0x356c: 0x00c0, 0x356d: 0x00c0, 0x356e: 0x00c0, 0x356f: 0x00c0, + 0x3570: 0x00c0, 0x3571: 0x00c0, 0x3572: 0x00c0, 0x3573: 0x00c0, 0x3574: 0x00c0, 0x3575: 0x00c0, + 0x3576: 0x00c0, 0x3577: 0x00c0, 0x3578: 0x00c0, 0x3579: 0x00c0, + 0x357f: 0x0080, + // Block 0xd6, offset 0x3580 + 0x3580: 0x00c0, 0x3581: 0x00c0, 0x3582: 0x00c0, 0x3583: 0x00c0, 0x3584: 0x00c0, 0x3585: 0x00c0, + 0x3586: 0x00c0, 0x3587: 0x00c0, 0x3588: 0x00c0, 0x3589: 0x00c0, 0x358a: 0x00c0, 0x358b: 0x00c0, + 0x358c: 0x00c0, 0x358d: 0x00c0, 0x358e: 0x00c0, 0x358f: 0x00c0, 0x3590: 0x00c0, 0x3591: 0x00c0, + 0x3592: 0x00c0, 0x3593: 0x00c0, 0x3594: 0x00c0, 0x3595: 0x00c0, 0x3596: 0x00c0, 0x3597: 0x00c0, + 0x3598: 0x00c0, 0x3599: 0x00c0, 0x359a: 0x00c0, 0x359b: 0x00c0, 0x359c: 0x00c0, 0x359d: 0x00c0, + 0x359e: 0x00c0, 0x359f: 0x00c0, 0x35a0: 0x00c0, 0x35a1: 0x00c0, 0x35a2: 0x00c0, 0x35a3: 0x00c0, + 0x35a4: 0x00c0, 0x35a5: 0x00c0, 0x35a6: 0x00c0, 0x35a7: 0x00c0, 0x35a8: 0x00c0, 0x35a9: 0x00c0, + 0x35aa: 0x00c0, 0x35ab: 0x00c0, 0x35ac: 0x00c0, 0x35ad: 0x00c0, 0x35ae: 0x00c0, 0x35af: 0x00c0, + 0x35b0: 0x00c0, 0x35b1: 0x00c0, 0x35b2: 0x00c0, 0x35b3: 0x00c0, 0x35b4: 0x00c0, 0x35b5: 0x00c0, + 0x35b6: 0x00c0, 0x35b7: 0x00c0, + 0x35bc: 0x0080, 0x35bd: 0x0080, 0x35be: 0x00c0, 0x35bf: 0x00c0, + // Block 0xd7, offset 0x35c0 + 0x35c0: 0x00c0, 0x35c1: 0x00c3, 0x35c2: 0x00c3, 0x35c3: 0x00c3, 0x35c5: 0x00c3, + 0x35c6: 0x00c3, + 0x35cc: 0x00c3, 0x35cd: 0x00c3, 0x35ce: 0x00c3, 0x35cf: 0x00c3, 0x35d0: 0x00c0, 0x35d1: 0x00c0, + 0x35d2: 0x00c0, 0x35d3: 0x00c0, 0x35d5: 0x00c0, 0x35d6: 0x00c0, 0x35d7: 0x00c0, + 0x35d9: 0x00c0, 0x35da: 0x00c0, 0x35db: 0x00c0, 0x35dc: 0x00c0, 0x35dd: 0x00c0, + 0x35de: 0x00c0, 0x35df: 0x00c0, 0x35e0: 0x00c0, 0x35e1: 0x00c0, 0x35e2: 0x00c0, 0x35e3: 0x00c0, + 0x35e4: 0x00c0, 0x35e5: 0x00c0, 0x35e6: 0x00c0, 0x35e7: 0x00c0, 0x35e8: 0x00c0, 0x35e9: 0x00c0, + 0x35ea: 0x00c0, 0x35eb: 0x00c0, 0x35ec: 0x00c0, 0x35ed: 0x00c0, 0x35ee: 0x00c0, 0x35ef: 0x00c0, + 0x35f0: 0x00c0, 0x35f1: 0x00c0, 0x35f2: 0x00c0, 0x35f3: 0x00c0, + 0x35f8: 0x00c3, 0x35f9: 0x00c3, 0x35fa: 0x00c3, + 0x35ff: 0x00c6, + // Block 0xd8, offset 0x3600 + 0x3600: 0x0080, 0x3601: 0x0080, 0x3602: 0x0080, 0x3603: 0x0080, 0x3604: 0x0080, 0x3605: 0x0080, + 0x3606: 0x0080, 0x3607: 0x0080, + 0x3610: 0x0080, 0x3611: 0x0080, + 0x3612: 0x0080, 0x3613: 0x0080, 0x3614: 0x0080, 0x3615: 0x0080, 0x3616: 0x0080, 0x3617: 0x0080, + 0x3618: 0x0080, + 0x3620: 0x00c0, 0x3621: 0x00c0, 0x3622: 0x00c0, 0x3623: 0x00c0, + 0x3624: 0x00c0, 0x3625: 0x00c0, 0x3626: 0x00c0, 0x3627: 0x00c0, 0x3628: 0x00c0, 0x3629: 0x00c0, + 0x362a: 0x00c0, 0x362b: 0x00c0, 0x362c: 0x00c0, 0x362d: 0x00c0, 0x362e: 0x00c0, 0x362f: 0x00c0, + 0x3630: 0x00c0, 0x3631: 0x00c0, 0x3632: 0x00c0, 0x3633: 0x00c0, 0x3634: 0x00c0, 0x3635: 0x00c0, + 0x3636: 0x00c0, 0x3637: 0x00c0, 0x3638: 0x00c0, 0x3639: 0x00c0, 0x363a: 0x00c0, 0x363b: 0x00c0, + 0x363c: 0x00c0, 0x363d: 0x0080, 0x363e: 0x0080, 0x363f: 0x0080, + // Block 0xd9, offset 0x3640 + 0x3640: 0x00c0, 0x3641: 0x00c0, 0x3642: 0x00c0, 0x3643: 0x00c0, 0x3644: 0x00c0, 0x3645: 0x00c0, + 0x3646: 0x00c0, 0x3647: 0x00c0, 0x3648: 0x00c0, 0x3649: 0x00c0, 0x364a: 0x00c0, 0x364b: 0x00c0, + 0x364c: 0x00c0, 0x364d: 0x00c0, 0x364e: 0x00c0, 0x364f: 0x00c0, 0x3650: 0x00c0, 0x3651: 0x00c0, + 0x3652: 0x00c0, 0x3653: 0x00c0, 0x3654: 0x00c0, 0x3655: 0x00c0, 0x3656: 0x00c0, 0x3657: 0x00c0, + 0x3658: 0x00c0, 0x3659: 0x00c0, 0x365a: 0x00c0, 0x365b: 0x00c0, 0x365c: 0x00c0, 0x365d: 0x0080, + 0x365e: 0x0080, 0x365f: 0x0080, + // Block 0xda, offset 0x3680 + 0x3680: 0x00c2, 0x3681: 0x00c2, 0x3682: 0x00c2, 0x3683: 0x00c2, 0x3684: 0x00c2, 0x3685: 0x00c4, + 0x3686: 0x00c0, 0x3687: 0x00c4, 0x3688: 0x0080, 0x3689: 0x00c4, 0x368a: 0x00c4, 0x368b: 0x00c0, + 0x368c: 0x00c0, 0x368d: 0x00c1, 0x368e: 0x00c4, 0x368f: 0x00c4, 0x3690: 0x00c4, 0x3691: 0x00c4, + 0x3692: 0x00c4, 0x3693: 0x00c2, 0x3694: 0x00c2, 0x3695: 0x00c2, 0x3696: 0x00c2, 0x3697: 0x00c1, + 0x3698: 0x00c2, 0x3699: 0x00c2, 0x369a: 0x00c2, 0x369b: 0x00c2, 0x369c: 0x00c2, 0x369d: 0x00c4, + 0x369e: 0x00c2, 0x369f: 0x00c2, 0x36a0: 0x00c2, 0x36a1: 0x00c4, 0x36a2: 0x00c0, 0x36a3: 0x00c0, + 0x36a4: 0x00c4, 0x36a5: 0x00c3, 0x36a6: 0x00c3, + 0x36ab: 0x0082, 0x36ac: 0x0082, 0x36ad: 0x0082, 0x36ae: 0x0082, 0x36af: 0x0084, + 0x36b0: 0x0080, 0x36b1: 0x0080, 0x36b2: 0x0080, 0x36b3: 0x0080, 0x36b4: 0x0080, 0x36b5: 0x0080, + 0x36b6: 0x0080, + // Block 0xdb, offset 0x36c0 + 0x36c0: 0x00c0, 0x36c1: 0x00c0, 0x36c2: 0x00c0, 0x36c3: 0x00c0, 0x36c4: 0x00c0, 0x36c5: 0x00c0, + 0x36c6: 0x00c0, 0x36c7: 0x00c0, 0x36c8: 0x00c0, 0x36c9: 0x00c0, 0x36ca: 0x00c0, 0x36cb: 0x00c0, + 0x36cc: 0x00c0, 0x36cd: 0x00c0, 0x36ce: 0x00c0, 0x36cf: 0x00c0, 0x36d0: 0x00c0, 0x36d1: 0x00c0, + 0x36d2: 0x00c0, 0x36d3: 0x00c0, 0x36d4: 0x00c0, 0x36d5: 0x00c0, 0x36d6: 0x00c0, 0x36d7: 0x00c0, + 0x36d8: 0x00c0, 0x36d9: 0x00c0, 0x36da: 0x00c0, 0x36db: 0x00c0, 0x36dc: 0x00c0, 0x36dd: 0x00c0, + 0x36de: 0x00c0, 0x36df: 0x00c0, 0x36e0: 0x00c0, 0x36e1: 0x00c0, 0x36e2: 0x00c0, 0x36e3: 0x00c0, + 0x36e4: 0x00c0, 0x36e5: 0x00c0, 0x36e6: 0x00c0, 0x36e7: 0x00c0, 0x36e8: 0x00c0, 0x36e9: 0x00c0, + 0x36ea: 0x00c0, 0x36eb: 0x00c0, 0x36ec: 0x00c0, 0x36ed: 0x00c0, 0x36ee: 0x00c0, 0x36ef: 0x00c0, + 0x36f0: 0x00c0, 0x36f1: 0x00c0, 0x36f2: 0x00c0, 0x36f3: 0x00c0, 0x36f4: 0x00c0, 0x36f5: 0x00c0, + 0x36f9: 0x0080, 0x36fa: 0x0080, 0x36fb: 0x0080, + 0x36fc: 0x0080, 0x36fd: 0x0080, 0x36fe: 0x0080, 0x36ff: 0x0080, + // Block 0xdc, offset 0x3700 + 0x3700: 0x00c0, 0x3701: 0x00c0, 0x3702: 0x00c0, 0x3703: 0x00c0, 0x3704: 0x00c0, 0x3705: 0x00c0, + 0x3706: 0x00c0, 0x3707: 0x00c0, 0x3708: 0x00c0, 0x3709: 0x00c0, 0x370a: 0x00c0, 0x370b: 0x00c0, + 0x370c: 0x00c0, 0x370d: 0x00c0, 0x370e: 0x00c0, 0x370f: 0x00c0, 0x3710: 0x00c0, 0x3711: 0x00c0, + 0x3712: 0x00c0, 0x3713: 0x00c0, 0x3714: 0x00c0, 0x3715: 0x00c0, + 0x3718: 0x0080, 0x3719: 0x0080, 0x371a: 0x0080, 0x371b: 0x0080, 0x371c: 0x0080, 0x371d: 0x0080, + 0x371e: 0x0080, 0x371f: 0x0080, 0x3720: 0x00c0, 0x3721: 0x00c0, 0x3722: 0x00c0, 0x3723: 0x00c0, + 0x3724: 0x00c0, 0x3725: 0x00c0, 0x3726: 0x00c0, 0x3727: 0x00c0, 0x3728: 0x00c0, 0x3729: 0x00c0, + 0x372a: 0x00c0, 0x372b: 0x00c0, 0x372c: 0x00c0, 0x372d: 0x00c0, 0x372e: 0x00c0, 0x372f: 0x00c0, + 0x3730: 0x00c0, 0x3731: 0x00c0, 0x3732: 0x00c0, + 0x3738: 0x0080, 0x3739: 0x0080, 0x373a: 0x0080, 0x373b: 0x0080, + 0x373c: 0x0080, 0x373d: 0x0080, 0x373e: 0x0080, 0x373f: 0x0080, + // Block 0xdd, offset 0x3740 + 0x3740: 0x00c2, 0x3741: 0x00c4, 0x3742: 0x00c2, 0x3743: 0x00c4, 0x3744: 0x00c4, 0x3745: 0x00c4, + 0x3746: 0x00c2, 0x3747: 0x00c2, 0x3748: 0x00c2, 0x3749: 0x00c4, 0x374a: 0x00c2, 0x374b: 0x00c2, + 0x374c: 0x00c4, 0x374d: 0x00c2, 0x374e: 0x00c4, 0x374f: 0x00c4, 0x3750: 0x00c2, 0x3751: 0x00c4, + 0x3759: 0x0080, 0x375a: 0x0080, 0x375b: 0x0080, 0x375c: 0x0080, + 0x3769: 0x0084, + 0x376a: 0x0084, 0x376b: 0x0084, 0x376c: 0x0084, 0x376d: 0x0082, 0x376e: 0x0082, 0x376f: 0x0080, + // Block 0xde, offset 0x3780 + 0x3780: 0x00c0, 0x3781: 0x00c0, 0x3782: 0x00c0, 0x3783: 0x00c0, 0x3784: 0x00c0, 0x3785: 0x00c0, + 0x3786: 0x00c0, 0x3787: 0x00c0, 0x3788: 0x00c0, 0x3789: 0x00c0, 0x378a: 0x00c0, 0x378b: 0x00c0, + 0x378c: 0x00c0, 0x378d: 0x00c0, 0x378e: 0x00c0, 0x378f: 0x00c0, 0x3790: 0x00c0, 0x3791: 0x00c0, + 0x3792: 0x00c0, 0x3793: 0x00c0, 0x3794: 0x00c0, 0x3795: 0x00c0, 0x3796: 0x00c0, 0x3797: 0x00c0, + 0x3798: 0x00c0, 0x3799: 0x00c0, 0x379a: 0x00c0, 0x379b: 0x00c0, 0x379c: 0x00c0, 0x379d: 0x00c0, + 0x379e: 0x00c0, 0x379f: 0x00c0, 0x37a0: 0x00c0, 0x37a1: 0x00c0, 0x37a2: 0x00c0, 0x37a3: 0x00c0, + 0x37a4: 0x00c0, 0x37a5: 0x00c0, 0x37a6: 0x00c0, 0x37a7: 0x00c0, 0x37a8: 0x00c0, 0x37a9: 0x00c0, + 0x37aa: 0x00c0, 0x37ab: 0x00c0, 0x37ac: 0x00c0, 0x37ad: 0x00c0, 0x37ae: 0x00c0, 0x37af: 0x00c0, + 0x37b0: 0x00c0, 0x37b1: 0x00c0, 0x37b2: 0x00c0, + // Block 0xdf, offset 0x37c0 + 0x37c0: 0x00c0, 0x37c1: 0x00c0, 0x37c2: 0x00c0, 0x37c3: 0x00c0, 0x37c4: 0x00c0, 0x37c5: 0x00c0, + 0x37c6: 0x00c0, 0x37c7: 0x00c0, 0x37c8: 0x00c0, 0x37c9: 0x00c0, 0x37ca: 0x00c0, 0x37cb: 0x00c0, + 0x37cc: 0x00c0, 0x37cd: 0x00c0, 0x37ce: 0x00c0, 0x37cf: 0x00c0, 0x37d0: 0x00c0, 0x37d1: 0x00c0, + 0x37d2: 0x00c0, 0x37d3: 0x00c0, 0x37d4: 0x00c0, 0x37d5: 0x00c0, 0x37d6: 0x00c0, 0x37d7: 0x00c0, + 0x37d8: 0x00c0, 0x37d9: 0x00c0, 0x37da: 0x00c0, 0x37db: 0x00c0, 0x37dc: 0x00c0, 0x37dd: 0x00c0, + 0x37de: 0x00c0, 0x37df: 0x00c0, 0x37e0: 0x00c0, 0x37e1: 0x00c0, 0x37e2: 0x00c0, 0x37e3: 0x00c0, + 0x37e4: 0x00c0, 0x37e5: 0x00c0, 0x37e6: 0x00c0, 0x37e7: 0x00c0, 0x37e8: 0x00c0, 0x37e9: 0x00c0, + 0x37ea: 0x00c0, 0x37eb: 0x00c0, 0x37ec: 0x00c0, 0x37ed: 0x00c0, 0x37ee: 0x00c0, 0x37ef: 0x00c0, + 0x37f0: 0x00c0, 0x37f1: 0x00c0, 0x37f2: 0x00c0, + 0x37fa: 0x0080, 0x37fb: 0x0080, + 0x37fc: 0x0080, 0x37fd: 0x0080, 0x37fe: 0x0080, 0x37ff: 0x0080, + // Block 0xe0, offset 0x3800 + 0x3820: 0x0080, 0x3821: 0x0080, 0x3822: 0x0080, 0x3823: 0x0080, + 0x3824: 0x0080, 0x3825: 0x0080, 0x3826: 0x0080, 0x3827: 0x0080, 0x3828: 0x0080, 0x3829: 0x0080, + 0x382a: 0x0080, 0x382b: 0x0080, 0x382c: 0x0080, 0x382d: 0x0080, 0x382e: 0x0080, 0x382f: 0x0080, + 0x3830: 0x0080, 0x3831: 0x0080, 0x3832: 0x0080, 0x3833: 0x0080, 0x3834: 0x0080, 0x3835: 0x0080, + 0x3836: 0x0080, 0x3837: 0x0080, 0x3838: 0x0080, 0x3839: 0x0080, 0x383a: 0x0080, 0x383b: 0x0080, + 0x383c: 0x0080, 0x383d: 0x0080, 0x383e: 0x0080, + // Block 0xe1, offset 0x3840 + 0x3840: 0x00c0, 0x3841: 0x00c3, 0x3842: 0x00c0, 0x3843: 0x00c0, 0x3844: 0x00c0, 0x3845: 0x00c0, + 0x3846: 0x00c0, 0x3847: 0x00c0, 0x3848: 0x00c0, 0x3849: 0x00c0, 0x384a: 0x00c0, 0x384b: 0x00c0, + 0x384c: 0x00c0, 0x384d: 0x00c0, 0x384e: 0x00c0, 0x384f: 0x00c0, 0x3850: 0x00c0, 0x3851: 0x00c0, + 0x3852: 0x00c0, 0x3853: 0x00c0, 0x3854: 0x00c0, 0x3855: 0x00c0, 0x3856: 0x00c0, 0x3857: 0x00c0, + 0x3858: 0x00c0, 0x3859: 0x00c0, 0x385a: 0x00c0, 0x385b: 0x00c0, 0x385c: 0x00c0, 0x385d: 0x00c0, + 0x385e: 0x00c0, 0x385f: 0x00c0, 0x3860: 0x00c0, 0x3861: 0x00c0, 0x3862: 0x00c0, 0x3863: 0x00c0, + 0x3864: 0x00c0, 0x3865: 0x00c0, 0x3866: 0x00c0, 0x3867: 0x00c0, 0x3868: 0x00c0, 0x3869: 0x00c0, + 0x386a: 0x00c0, 0x386b: 0x00c0, 0x386c: 0x00c0, 0x386d: 0x00c0, 0x386e: 0x00c0, 0x386f: 0x00c0, + 0x3870: 0x00c0, 0x3871: 0x00c0, 0x3872: 0x00c0, 0x3873: 0x00c0, 0x3874: 0x00c0, 0x3875: 0x00c0, + 0x3876: 0x00c0, 0x3877: 0x00c0, 0x3878: 0x00c3, 0x3879: 0x00c3, 0x387a: 0x00c3, 0x387b: 0x00c3, + 0x387c: 0x00c3, 0x387d: 0x00c3, 0x387e: 0x00c3, 0x387f: 0x00c3, + // Block 0xe2, offset 0x3880 + 0x3880: 0x00c3, 0x3881: 0x00c3, 0x3882: 0x00c3, 0x3883: 0x00c3, 0x3884: 0x00c3, 0x3885: 0x00c3, + 0x3886: 0x00c6, 0x3887: 0x0080, 0x3888: 0x0080, 0x3889: 0x0080, 0x388a: 0x0080, 0x388b: 0x0080, + 0x388c: 0x0080, 0x388d: 0x0080, + 0x3892: 0x0080, 0x3893: 0x0080, 0x3894: 0x0080, 0x3895: 0x0080, 0x3896: 0x0080, 0x3897: 0x0080, + 0x3898: 0x0080, 0x3899: 0x0080, 0x389a: 0x0080, 0x389b: 0x0080, 0x389c: 0x0080, 0x389d: 0x0080, + 0x389e: 0x0080, 0x389f: 0x0080, 0x38a0: 0x0080, 0x38a1: 0x0080, 0x38a2: 0x0080, 0x38a3: 0x0080, + 0x38a4: 0x0080, 0x38a5: 0x0080, 0x38a6: 0x00c0, 0x38a7: 0x00c0, 0x38a8: 0x00c0, 0x38a9: 0x00c0, + 0x38aa: 0x00c0, 0x38ab: 0x00c0, 0x38ac: 0x00c0, 0x38ad: 0x00c0, 0x38ae: 0x00c0, 0x38af: 0x00c0, + 0x38bf: 0x00c6, + // Block 0xe3, offset 0x38c0 + 0x38c0: 0x00c3, 0x38c1: 0x00c3, 0x38c2: 0x00c0, 0x38c3: 0x00c0, 0x38c4: 0x00c0, 0x38c5: 0x00c0, + 0x38c6: 0x00c0, 0x38c7: 0x00c0, 0x38c8: 0x00c0, 0x38c9: 0x00c0, 0x38ca: 0x00c0, 0x38cb: 0x00c0, + 0x38cc: 0x00c0, 0x38cd: 0x00c0, 0x38ce: 0x00c0, 0x38cf: 0x00c0, 0x38d0: 0x00c0, 0x38d1: 0x00c0, + 0x38d2: 0x00c0, 0x38d3: 0x00c0, 0x38d4: 0x00c0, 0x38d5: 0x00c0, 0x38d6: 0x00c0, 0x38d7: 0x00c0, + 0x38d8: 0x00c0, 0x38d9: 0x00c0, 0x38da: 0x00c0, 0x38db: 0x00c0, 0x38dc: 0x00c0, 0x38dd: 0x00c0, + 0x38de: 0x00c0, 0x38df: 0x00c0, 0x38e0: 0x00c0, 0x38e1: 0x00c0, 0x38e2: 0x00c0, 0x38e3: 0x00c0, + 0x38e4: 0x00c0, 0x38e5: 0x00c0, 0x38e6: 0x00c0, 0x38e7: 0x00c0, 0x38e8: 0x00c0, 0x38e9: 0x00c0, + 0x38ea: 0x00c0, 0x38eb: 0x00c0, 0x38ec: 0x00c0, 0x38ed: 0x00c0, 0x38ee: 0x00c0, 0x38ef: 0x00c0, + 0x38f0: 0x00c0, 0x38f1: 0x00c0, 0x38f2: 0x00c0, 0x38f3: 0x00c3, 0x38f4: 0x00c3, 0x38f5: 0x00c3, + 0x38f6: 0x00c3, 0x38f7: 0x00c0, 0x38f8: 0x00c0, 0x38f9: 0x00c6, 0x38fa: 0x00c3, 0x38fb: 0x0080, + 0x38fc: 0x0080, 0x38fd: 0x0040, 0x38fe: 0x0080, 0x38ff: 0x0080, + // Block 0xe4, offset 0x3900 + 0x3900: 0x0080, 0x3901: 0x0080, + 0x3910: 0x00c0, 0x3911: 0x00c0, + 0x3912: 0x00c0, 0x3913: 0x00c0, 0x3914: 0x00c0, 0x3915: 0x00c0, 0x3916: 0x00c0, 0x3917: 0x00c0, + 0x3918: 0x00c0, 0x3919: 0x00c0, 0x391a: 0x00c0, 0x391b: 0x00c0, 0x391c: 0x00c0, 0x391d: 0x00c0, + 0x391e: 0x00c0, 0x391f: 0x00c0, 0x3920: 0x00c0, 0x3921: 0x00c0, 0x3922: 0x00c0, 0x3923: 0x00c0, + 0x3924: 0x00c0, 0x3925: 0x00c0, 0x3926: 0x00c0, 0x3927: 0x00c0, 0x3928: 0x00c0, + 0x3930: 0x00c0, 0x3931: 0x00c0, 0x3932: 0x00c0, 0x3933: 0x00c0, 0x3934: 0x00c0, 0x3935: 0x00c0, + 0x3936: 0x00c0, 0x3937: 0x00c0, 0x3938: 0x00c0, 0x3939: 0x00c0, + // Block 0xe5, offset 0x3940 + 0x3940: 0x00c3, 0x3941: 0x00c3, 0x3942: 0x00c3, 0x3943: 0x00c0, 0x3944: 0x00c0, 0x3945: 0x00c0, + 0x3946: 0x00c0, 0x3947: 0x00c0, 0x3948: 0x00c0, 0x3949: 0x00c0, 0x394a: 0x00c0, 0x394b: 0x00c0, + 0x394c: 0x00c0, 0x394d: 0x00c0, 0x394e: 0x00c0, 0x394f: 0x00c0, 0x3950: 0x00c0, 0x3951: 0x00c0, + 0x3952: 0x00c0, 0x3953: 0x00c0, 0x3954: 0x00c0, 0x3955: 0x00c0, 0x3956: 0x00c0, 0x3957: 0x00c0, + 0x3958: 0x00c0, 0x3959: 0x00c0, 0x395a: 0x00c0, 0x395b: 0x00c0, 0x395c: 0x00c0, 0x395d: 0x00c0, + 0x395e: 0x00c0, 0x395f: 0x00c0, 0x3960: 0x00c0, 0x3961: 0x00c0, 0x3962: 0x00c0, 0x3963: 0x00c0, + 0x3964: 0x00c0, 0x3965: 0x00c0, 0x3966: 0x00c0, 0x3967: 0x00c3, 0x3968: 0x00c3, 0x3969: 0x00c3, + 0x396a: 0x00c3, 0x396b: 0x00c3, 0x396c: 0x00c0, 0x396d: 0x00c3, 0x396e: 0x00c3, 0x396f: 0x00c3, + 0x3970: 0x00c3, 0x3971: 0x00c3, 0x3972: 0x00c3, 0x3973: 0x00c6, 0x3974: 0x00c6, + 0x3976: 0x00c0, 0x3977: 0x00c0, 0x3978: 0x00c0, 0x3979: 0x00c0, 0x397a: 0x00c0, 0x397b: 0x00c0, + 0x397c: 0x00c0, 0x397d: 0x00c0, 0x397e: 0x00c0, 0x397f: 0x00c0, + // Block 0xe6, offset 0x3980 + 0x3980: 0x0080, 0x3981: 0x0080, 0x3982: 0x0080, 0x3983: 0x0080, + 0x3990: 0x00c0, 0x3991: 0x00c0, + 0x3992: 0x00c0, 0x3993: 0x00c0, 0x3994: 0x00c0, 0x3995: 0x00c0, 0x3996: 0x00c0, 0x3997: 0x00c0, + 0x3998: 0x00c0, 0x3999: 0x00c0, 0x399a: 0x00c0, 0x399b: 0x00c0, 0x399c: 0x00c0, 0x399d: 0x00c0, + 0x399e: 0x00c0, 0x399f: 0x00c0, 0x39a0: 0x00c0, 0x39a1: 0x00c0, 0x39a2: 0x00c0, 0x39a3: 0x00c0, + 0x39a4: 0x00c0, 0x39a5: 0x00c0, 0x39a6: 0x00c0, 0x39a7: 0x00c0, 0x39a8: 0x00c0, 0x39a9: 0x00c0, + 0x39aa: 0x00c0, 0x39ab: 0x00c0, 0x39ac: 0x00c0, 0x39ad: 0x00c0, 0x39ae: 0x00c0, 0x39af: 0x00c0, + 0x39b0: 0x00c0, 0x39b1: 0x00c0, 0x39b2: 0x00c0, 0x39b3: 0x00c3, 0x39b4: 0x0080, 0x39b5: 0x0080, + 0x39b6: 0x00c0, + // Block 0xe7, offset 0x39c0 + 0x39c0: 0x00c3, 0x39c1: 0x00c3, 0x39c2: 0x00c0, 0x39c3: 0x00c0, 0x39c4: 0x00c0, 0x39c5: 0x00c0, + 0x39c6: 0x00c0, 0x39c7: 0x00c0, 0x39c8: 0x00c0, 0x39c9: 0x00c0, 0x39ca: 0x00c0, 0x39cb: 0x00c0, + 0x39cc: 0x00c0, 0x39cd: 0x00c0, 0x39ce: 0x00c0, 0x39cf: 0x00c0, 0x39d0: 0x00c0, 0x39d1: 0x00c0, + 0x39d2: 0x00c0, 0x39d3: 0x00c0, 0x39d4: 0x00c0, 0x39d5: 0x00c0, 0x39d6: 0x00c0, 0x39d7: 0x00c0, + 0x39d8: 0x00c0, 0x39d9: 0x00c0, 0x39da: 0x00c0, 0x39db: 0x00c0, 0x39dc: 0x00c0, 0x39dd: 0x00c0, + 0x39de: 0x00c0, 0x39df: 0x00c0, 0x39e0: 0x00c0, 0x39e1: 0x00c0, 0x39e2: 0x00c0, 0x39e3: 0x00c0, + 0x39e4: 0x00c0, 0x39e5: 0x00c0, 0x39e6: 0x00c0, 0x39e7: 0x00c0, 0x39e8: 0x00c0, 0x39e9: 0x00c0, + 0x39ea: 0x00c0, 0x39eb: 0x00c0, 0x39ec: 0x00c0, 0x39ed: 0x00c0, 0x39ee: 0x00c0, 0x39ef: 0x00c0, + 0x39f0: 0x00c0, 0x39f1: 0x00c0, 0x39f2: 0x00c0, 0x39f3: 0x00c0, 0x39f4: 0x00c0, 0x39f5: 0x00c0, + 0x39f6: 0x00c3, 0x39f7: 0x00c3, 0x39f8: 0x00c3, 0x39f9: 0x00c3, 0x39fa: 0x00c3, 0x39fb: 0x00c3, + 0x39fc: 0x00c3, 0x39fd: 0x00c3, 0x39fe: 0x00c3, 0x39ff: 0x00c0, + // Block 0xe8, offset 0x3a00 + 0x3a00: 0x00c5, 0x3a01: 0x00c0, 0x3a02: 0x00c0, 0x3a03: 0x00c0, 0x3a04: 0x00c0, 0x3a05: 0x0080, + 0x3a06: 0x0080, 0x3a07: 0x0080, 0x3a08: 0x0080, 0x3a09: 0x0080, 0x3a0a: 0x00c3, 0x3a0b: 0x00c3, + 0x3a0c: 0x00c3, 0x3a0d: 0x0080, 0x3a10: 0x00c0, 0x3a11: 0x00c0, + 0x3a12: 0x00c0, 0x3a13: 0x00c0, 0x3a14: 0x00c0, 0x3a15: 0x00c0, 0x3a16: 0x00c0, 0x3a17: 0x00c0, + 0x3a18: 0x00c0, 0x3a19: 0x00c0, 0x3a1a: 0x00c0, 0x3a1b: 0x0080, 0x3a1c: 0x00c0, 0x3a1d: 0x0080, + 0x3a1e: 0x0080, 0x3a1f: 0x0080, 0x3a21: 0x0080, 0x3a22: 0x0080, 0x3a23: 0x0080, + 0x3a24: 0x0080, 0x3a25: 0x0080, 0x3a26: 0x0080, 0x3a27: 0x0080, 0x3a28: 0x0080, 0x3a29: 0x0080, + 0x3a2a: 0x0080, 0x3a2b: 0x0080, 0x3a2c: 0x0080, 0x3a2d: 0x0080, 0x3a2e: 0x0080, 0x3a2f: 0x0080, + 0x3a30: 0x0080, 0x3a31: 0x0080, 0x3a32: 0x0080, 0x3a33: 0x0080, 0x3a34: 0x0080, + // Block 0xe9, offset 0x3a40 + 0x3a40: 0x00c0, 0x3a41: 0x00c0, 0x3a42: 0x00c0, 0x3a43: 0x00c0, 0x3a44: 0x00c0, 0x3a45: 0x00c0, + 0x3a46: 0x00c0, 0x3a47: 0x00c0, 0x3a48: 0x00c0, 0x3a49: 0x00c0, 0x3a4a: 0x00c0, 0x3a4b: 0x00c0, + 0x3a4c: 0x00c0, 0x3a4d: 0x00c0, 0x3a4e: 0x00c0, 0x3a4f: 0x00c0, 0x3a50: 0x00c0, 0x3a51: 0x00c0, + 0x3a53: 0x00c0, 0x3a54: 0x00c0, 0x3a55: 0x00c0, 0x3a56: 0x00c0, 0x3a57: 0x00c0, + 0x3a58: 0x00c0, 0x3a59: 0x00c0, 0x3a5a: 0x00c0, 0x3a5b: 0x00c0, 0x3a5c: 0x00c0, 0x3a5d: 0x00c0, + 0x3a5e: 0x00c0, 0x3a5f: 0x00c0, 0x3a60: 0x00c0, 0x3a61: 0x00c0, 0x3a62: 0x00c0, 0x3a63: 0x00c0, + 0x3a64: 0x00c0, 0x3a65: 0x00c0, 0x3a66: 0x00c0, 0x3a67: 0x00c0, 0x3a68: 0x00c0, 0x3a69: 0x00c0, + 0x3a6a: 0x00c0, 0x3a6b: 0x00c0, 0x3a6c: 0x00c0, 0x3a6d: 0x00c0, 0x3a6e: 0x00c0, 0x3a6f: 0x00c3, + 0x3a70: 0x00c3, 0x3a71: 0x00c3, 0x3a72: 0x00c0, 0x3a73: 0x00c0, 0x3a74: 0x00c3, 0x3a75: 0x00c5, + 0x3a76: 0x00c3, 0x3a77: 0x00c3, 0x3a78: 0x0080, 0x3a79: 0x0080, 0x3a7a: 0x0080, 0x3a7b: 0x0080, + 0x3a7c: 0x0080, 0x3a7d: 0x0080, 0x3a7e: 0x00c3, + // Block 0xea, offset 0x3a80 + 0x3a80: 0x00c0, 0x3a81: 0x00c0, 0x3a82: 0x00c0, 0x3a83: 0x00c0, 0x3a84: 0x00c0, 0x3a85: 0x00c0, + 0x3a86: 0x00c0, 0x3a88: 0x00c0, 0x3a8a: 0x00c0, 0x3a8b: 0x00c0, + 0x3a8c: 0x00c0, 0x3a8d: 0x00c0, 0x3a8f: 0x00c0, 0x3a90: 0x00c0, 0x3a91: 0x00c0, + 0x3a92: 0x00c0, 0x3a93: 0x00c0, 0x3a94: 0x00c0, 0x3a95: 0x00c0, 0x3a96: 0x00c0, 0x3a97: 0x00c0, + 0x3a98: 0x00c0, 0x3a99: 0x00c0, 0x3a9a: 0x00c0, 0x3a9b: 0x00c0, 0x3a9c: 0x00c0, 0x3a9d: 0x00c0, + 0x3a9f: 0x00c0, 0x3aa0: 0x00c0, 0x3aa1: 0x00c0, 0x3aa2: 0x00c0, 0x3aa3: 0x00c0, + 0x3aa4: 0x00c0, 0x3aa5: 0x00c0, 0x3aa6: 0x00c0, 0x3aa7: 0x00c0, 0x3aa8: 0x00c0, 0x3aa9: 0x0080, + 0x3ab0: 0x00c0, 0x3ab1: 0x00c0, 0x3ab2: 0x00c0, 0x3ab3: 0x00c0, 0x3ab4: 0x00c0, 0x3ab5: 0x00c0, + 0x3ab6: 0x00c0, 0x3ab7: 0x00c0, 0x3ab8: 0x00c0, 0x3ab9: 0x00c0, 0x3aba: 0x00c0, 0x3abb: 0x00c0, + 0x3abc: 0x00c0, 0x3abd: 0x00c0, 0x3abe: 0x00c0, 0x3abf: 0x00c0, + // Block 0xeb, offset 0x3ac0 + 0x3ac0: 0x00c0, 0x3ac1: 0x00c0, 0x3ac2: 0x00c0, 0x3ac3: 0x00c0, 0x3ac4: 0x00c0, 0x3ac5: 0x00c0, + 0x3ac6: 0x00c0, 0x3ac7: 0x00c0, 0x3ac8: 0x00c0, 0x3ac9: 0x00c0, 0x3aca: 0x00c0, 0x3acb: 0x00c0, + 0x3acc: 0x00c0, 0x3acd: 0x00c0, 0x3ace: 0x00c0, 0x3acf: 0x00c0, 0x3ad0: 0x00c0, 0x3ad1: 0x00c0, + 0x3ad2: 0x00c0, 0x3ad3: 0x00c0, 0x3ad4: 0x00c0, 0x3ad5: 0x00c0, 0x3ad6: 0x00c0, 0x3ad7: 0x00c0, + 0x3ad8: 0x00c0, 0x3ad9: 0x00c0, 0x3ada: 0x00c0, 0x3adb: 0x00c0, 0x3adc: 0x00c0, 0x3add: 0x00c0, + 0x3ade: 0x00c0, 0x3adf: 0x00c3, 0x3ae0: 0x00c0, 0x3ae1: 0x00c0, 0x3ae2: 0x00c0, 0x3ae3: 0x00c3, + 0x3ae4: 0x00c3, 0x3ae5: 0x00c3, 0x3ae6: 0x00c3, 0x3ae7: 0x00c3, 0x3ae8: 0x00c3, 0x3ae9: 0x00c3, + 0x3aea: 0x00c6, + 0x3af0: 0x00c0, 0x3af1: 0x00c0, 0x3af2: 0x00c0, 0x3af3: 0x00c0, 0x3af4: 0x00c0, 0x3af5: 0x00c0, + 0x3af6: 0x00c0, 0x3af7: 0x00c0, 0x3af8: 0x00c0, 0x3af9: 0x00c0, + // Block 0xec, offset 0x3b00 + 0x3b00: 0x00c3, 0x3b01: 0x00c3, 0x3b02: 0x00c0, 0x3b03: 0x00c0, 0x3b05: 0x00c0, + 0x3b06: 0x00c0, 0x3b07: 0x00c0, 0x3b08: 0x00c0, 0x3b09: 0x00c0, 0x3b0a: 0x00c0, 0x3b0b: 0x00c0, + 0x3b0c: 0x00c0, 0x3b0f: 0x00c0, 0x3b10: 0x00c0, + 0x3b13: 0x00c0, 0x3b14: 0x00c0, 0x3b15: 0x00c0, 0x3b16: 0x00c0, 0x3b17: 0x00c0, + 0x3b18: 0x00c0, 0x3b19: 0x00c0, 0x3b1a: 0x00c0, 0x3b1b: 0x00c0, 0x3b1c: 0x00c0, 0x3b1d: 0x00c0, + 0x3b1e: 0x00c0, 0x3b1f: 0x00c0, 0x3b20: 0x00c0, 0x3b21: 0x00c0, 0x3b22: 0x00c0, 0x3b23: 0x00c0, + 0x3b24: 0x00c0, 0x3b25: 0x00c0, 0x3b26: 0x00c0, 0x3b27: 0x00c0, 0x3b28: 0x00c0, + 0x3b2a: 0x00c0, 0x3b2b: 0x00c0, 0x3b2c: 0x00c0, 0x3b2d: 0x00c0, 0x3b2e: 0x00c0, 0x3b2f: 0x00c0, + 0x3b30: 0x00c0, 0x3b32: 0x00c0, 0x3b33: 0x00c0, 0x3b35: 0x00c0, + 0x3b36: 0x00c0, 0x3b37: 0x00c0, 0x3b38: 0x00c0, 0x3b39: 0x00c0, + 0x3b3c: 0x00c3, 0x3b3d: 0x00c0, 0x3b3e: 0x00c0, 0x3b3f: 0x00c0, + // Block 0xed, offset 0x3b40 + 0x3b40: 0x00c3, 0x3b41: 0x00c0, 0x3b42: 0x00c0, 0x3b43: 0x00c0, 0x3b44: 0x00c0, + 0x3b47: 0x00c0, 0x3b48: 0x00c0, 0x3b4b: 0x00c0, + 0x3b4c: 0x00c0, 0x3b4d: 0x00c5, 0x3b50: 0x00c0, + 0x3b57: 0x00c0, + 0x3b5d: 0x00c0, + 0x3b5e: 0x00c0, 0x3b5f: 0x00c0, 0x3b60: 0x00c0, 0x3b61: 0x00c0, 0x3b62: 0x00c0, 0x3b63: 0x00c0, + 0x3b66: 0x00c3, 0x3b67: 0x00c3, 0x3b68: 0x00c3, 0x3b69: 0x00c3, + 0x3b6a: 0x00c3, 0x3b6b: 0x00c3, 0x3b6c: 0x00c3, + 0x3b70: 0x00c3, 0x3b71: 0x00c3, 0x3b72: 0x00c3, 0x3b73: 0x00c3, 0x3b74: 0x00c3, + // Block 0xee, offset 0x3b80 + 0x3b80: 0x00c0, 0x3b81: 0x00c0, 0x3b82: 0x00c0, 0x3b83: 0x00c0, 0x3b84: 0x00c0, 0x3b85: 0x00c0, + 0x3b86: 0x00c0, 0x3b87: 0x00c0, 0x3b88: 0x00c0, 0x3b89: 0x00c0, 0x3b8a: 0x00c0, 0x3b8b: 0x00c0, + 0x3b8c: 0x00c0, 0x3b8d: 0x00c0, 0x3b8e: 0x00c0, 0x3b8f: 0x00c0, 0x3b90: 0x00c0, 0x3b91: 0x00c0, + 0x3b92: 0x00c0, 0x3b93: 0x00c0, 0x3b94: 0x00c0, 0x3b95: 0x00c0, 0x3b96: 0x00c0, 0x3b97: 0x00c0, + 0x3b98: 0x00c0, 0x3b99: 0x00c0, 0x3b9a: 0x00c0, 0x3b9b: 0x00c0, 0x3b9c: 0x00c0, 0x3b9d: 0x00c0, + 0x3b9e: 0x00c0, 0x3b9f: 0x00c0, 0x3ba0: 0x00c0, 0x3ba1: 0x00c0, 0x3ba2: 0x00c0, 0x3ba3: 0x00c0, + 0x3ba4: 0x00c0, 0x3ba5: 0x00c0, 0x3ba6: 0x00c0, 0x3ba7: 0x00c0, 0x3ba8: 0x00c0, 0x3ba9: 0x00c0, + 0x3baa: 0x00c0, 0x3bab: 0x00c0, 0x3bac: 0x00c0, 0x3bad: 0x00c0, 0x3bae: 0x00c0, 0x3baf: 0x00c0, + 0x3bb0: 0x00c0, 0x3bb1: 0x00c0, 0x3bb2: 0x00c0, 0x3bb3: 0x00c0, 0x3bb4: 0x00c0, 0x3bb5: 0x00c0, + 0x3bb6: 0x00c0, 0x3bb7: 0x00c0, 0x3bb8: 0x00c3, 0x3bb9: 0x00c3, 0x3bba: 0x00c3, 0x3bbb: 0x00c3, + 0x3bbc: 0x00c3, 0x3bbd: 0x00c3, 0x3bbe: 0x00c3, 0x3bbf: 0x00c3, + // Block 0xef, offset 0x3bc0 + 0x3bc0: 0x00c0, 0x3bc1: 0x00c0, 0x3bc2: 0x00c6, 0x3bc3: 0x00c3, 0x3bc4: 0x00c3, 0x3bc5: 0x00c0, + 0x3bc6: 0x00c3, 0x3bc7: 0x00c0, 0x3bc8: 0x00c0, 0x3bc9: 0x00c0, 0x3bca: 0x00c0, 0x3bcb: 0x0080, + 0x3bcc: 0x0080, 0x3bcd: 0x0080, 0x3bce: 0x0080, 0x3bcf: 0x0080, 0x3bd0: 0x00c0, 0x3bd1: 0x00c0, + 0x3bd2: 0x00c0, 0x3bd3: 0x00c0, 0x3bd4: 0x00c0, 0x3bd5: 0x00c0, 0x3bd6: 0x00c0, 0x3bd7: 0x00c0, + 0x3bd8: 0x00c0, 0x3bd9: 0x00c0, 0x3bdb: 0x0080, 0x3bdd: 0x0080, + // Block 0xf0, offset 0x3c00 + 0x3c00: 0x00c0, 0x3c01: 0x00c0, 0x3c02: 0x00c0, 0x3c03: 0x00c0, 0x3c04: 0x00c0, 0x3c05: 0x00c0, + 0x3c06: 0x00c0, 0x3c07: 0x00c0, 0x3c08: 0x00c0, 0x3c09: 0x00c0, 0x3c0a: 0x00c0, 0x3c0b: 0x00c0, + 0x3c0c: 0x00c0, 0x3c0d: 0x00c0, 0x3c0e: 0x00c0, 0x3c0f: 0x00c0, 0x3c10: 0x00c0, 0x3c11: 0x00c0, + 0x3c12: 0x00c0, 0x3c13: 0x00c0, 0x3c14: 0x00c0, 0x3c15: 0x00c0, 0x3c16: 0x00c0, 0x3c17: 0x00c0, + 0x3c18: 0x00c0, 0x3c19: 0x00c0, 0x3c1a: 0x00c0, 0x3c1b: 0x00c0, 0x3c1c: 0x00c0, 0x3c1d: 0x00c0, + 0x3c1e: 0x00c0, 0x3c1f: 0x00c0, 0x3c20: 0x00c0, 0x3c21: 0x00c0, 0x3c22: 0x00c0, 0x3c23: 0x00c0, + 0x3c24: 0x00c0, 0x3c25: 0x00c0, 0x3c26: 0x00c0, 0x3c27: 0x00c0, 0x3c28: 0x00c0, 0x3c29: 0x00c0, + 0x3c2a: 0x00c0, 0x3c2b: 0x00c0, 0x3c2c: 0x00c0, 0x3c2d: 0x00c0, 0x3c2e: 0x00c0, 0x3c2f: 0x00c0, + 0x3c30: 0x00c0, 0x3c31: 0x00c0, 0x3c32: 0x00c0, 0x3c33: 0x00c3, 0x3c34: 0x00c3, 0x3c35: 0x00c3, + 0x3c36: 0x00c3, 0x3c37: 0x00c3, 0x3c38: 0x00c3, 0x3c39: 0x00c0, 0x3c3a: 0x00c3, 0x3c3b: 0x00c0, + 0x3c3c: 0x00c0, 0x3c3d: 0x00c0, 0x3c3e: 0x00c0, 0x3c3f: 0x00c3, + // Block 0xf1, offset 0x3c40 + 0x3c40: 0x00c3, 0x3c41: 0x00c0, 0x3c42: 0x00c6, 0x3c43: 0x00c3, 0x3c44: 0x00c0, 0x3c45: 0x00c0, + 0x3c46: 0x0080, 0x3c47: 0x00c0, + 0x3c50: 0x00c0, 0x3c51: 0x00c0, + 0x3c52: 0x00c0, 0x3c53: 0x00c0, 0x3c54: 0x00c0, 0x3c55: 0x00c0, 0x3c56: 0x00c0, 0x3c57: 0x00c0, + 0x3c58: 0x00c0, 0x3c59: 0x00c0, + // Block 0xf2, offset 0x3c80 + 0x3c80: 0x00c0, 0x3c81: 0x00c0, 0x3c82: 0x00c0, 0x3c83: 0x00c0, 0x3c84: 0x00c0, 0x3c85: 0x00c0, + 0x3c86: 0x00c0, 0x3c87: 0x00c0, 0x3c88: 0x00c0, 0x3c89: 0x00c0, 0x3c8a: 0x00c0, 0x3c8b: 0x00c0, + 0x3c8c: 0x00c0, 0x3c8d: 0x00c0, 0x3c8e: 0x00c0, 0x3c8f: 0x00c0, 0x3c90: 0x00c0, 0x3c91: 0x00c0, + 0x3c92: 0x00c0, 0x3c93: 0x00c0, 0x3c94: 0x00c0, 0x3c95: 0x00c0, 0x3c96: 0x00c0, 0x3c97: 0x00c0, + 0x3c98: 0x00c0, 0x3c99: 0x00c0, 0x3c9a: 0x00c0, 0x3c9b: 0x00c0, 0x3c9c: 0x00c0, 0x3c9d: 0x00c0, + 0x3c9e: 0x00c0, 0x3c9f: 0x00c0, 0x3ca0: 0x00c0, 0x3ca1: 0x00c0, 0x3ca2: 0x00c0, 0x3ca3: 0x00c0, + 0x3ca4: 0x00c0, 0x3ca5: 0x00c0, 0x3ca6: 0x00c0, 0x3ca7: 0x00c0, 0x3ca8: 0x00c0, 0x3ca9: 0x00c0, + 0x3caa: 0x00c0, 0x3cab: 0x00c0, 0x3cac: 0x00c0, 0x3cad: 0x00c0, 0x3cae: 0x00c0, 0x3caf: 0x00c0, + 0x3cb0: 0x00c0, 0x3cb1: 0x00c0, 0x3cb2: 0x00c3, 0x3cb3: 0x00c3, 0x3cb4: 0x00c3, 0x3cb5: 0x00c3, + 0x3cb8: 0x00c0, 0x3cb9: 0x00c0, 0x3cba: 0x00c0, 0x3cbb: 0x00c0, + 0x3cbc: 0x00c3, 0x3cbd: 0x00c3, 0x3cbe: 0x00c0, 0x3cbf: 0x00c6, + // Block 0xf3, offset 0x3cc0 + 0x3cc0: 0x00c3, 0x3cc1: 0x0080, 0x3cc2: 0x0080, 0x3cc3: 0x0080, 0x3cc4: 0x0080, 0x3cc5: 0x0080, + 0x3cc6: 0x0080, 0x3cc7: 0x0080, 0x3cc8: 0x0080, 0x3cc9: 0x0080, 0x3cca: 0x0080, 0x3ccb: 0x0080, + 0x3ccc: 0x0080, 0x3ccd: 0x0080, 0x3cce: 0x0080, 0x3ccf: 0x0080, 0x3cd0: 0x0080, 0x3cd1: 0x0080, + 0x3cd2: 0x0080, 0x3cd3: 0x0080, 0x3cd4: 0x0080, 0x3cd5: 0x0080, 0x3cd6: 0x0080, 0x3cd7: 0x0080, + 0x3cd8: 0x00c0, 0x3cd9: 0x00c0, 0x3cda: 0x00c0, 0x3cdb: 0x00c0, 0x3cdc: 0x00c3, 0x3cdd: 0x00c3, + // Block 0xf4, offset 0x3d00 + 0x3d00: 0x00c0, 0x3d01: 0x00c0, 0x3d02: 0x00c0, 0x3d03: 0x00c0, 0x3d04: 0x00c0, 0x3d05: 0x00c0, + 0x3d06: 0x00c0, 0x3d07: 0x00c0, 0x3d08: 0x00c0, 0x3d09: 0x00c0, 0x3d0a: 0x00c0, 0x3d0b: 0x00c0, + 0x3d0c: 0x00c0, 0x3d0d: 0x00c0, 0x3d0e: 0x00c0, 0x3d0f: 0x00c0, 0x3d10: 0x00c0, 0x3d11: 0x00c0, + 0x3d12: 0x00c0, 0x3d13: 0x00c0, 0x3d14: 0x00c0, 0x3d15: 0x00c0, 0x3d16: 0x00c0, 0x3d17: 0x00c0, + 0x3d18: 0x00c0, 0x3d19: 0x00c0, 0x3d1a: 0x00c0, 0x3d1b: 0x00c0, 0x3d1c: 0x00c0, 0x3d1d: 0x00c0, + 0x3d1e: 0x00c0, 0x3d1f: 0x00c0, 0x3d20: 0x00c0, 0x3d21: 0x00c0, 0x3d22: 0x00c0, 0x3d23: 0x00c0, + 0x3d24: 0x00c0, 0x3d25: 0x00c0, 0x3d26: 0x00c0, 0x3d27: 0x00c0, 0x3d28: 0x00c0, 0x3d29: 0x00c0, + 0x3d2a: 0x00c0, 0x3d2b: 0x00c0, 0x3d2c: 0x00c0, 0x3d2d: 0x00c0, 0x3d2e: 0x00c0, 0x3d2f: 0x00c0, + 0x3d30: 0x00c0, 0x3d31: 0x00c0, 0x3d32: 0x00c0, 0x3d33: 0x00c3, 0x3d34: 0x00c3, 0x3d35: 0x00c3, + 0x3d36: 0x00c3, 0x3d37: 0x00c3, 0x3d38: 0x00c3, 0x3d39: 0x00c3, 0x3d3a: 0x00c3, 0x3d3b: 0x00c0, + 0x3d3c: 0x00c0, 0x3d3d: 0x00c3, 0x3d3e: 0x00c0, 0x3d3f: 0x00c6, + // Block 0xf5, offset 0x3d40 + 0x3d40: 0x00c3, 0x3d41: 0x0080, 0x3d42: 0x0080, 0x3d43: 0x0080, 0x3d44: 0x00c0, + 0x3d50: 0x00c0, 0x3d51: 0x00c0, + 0x3d52: 0x00c0, 0x3d53: 0x00c0, 0x3d54: 0x00c0, 0x3d55: 0x00c0, 0x3d56: 0x00c0, 0x3d57: 0x00c0, + 0x3d58: 0x00c0, 0x3d59: 0x00c0, + 0x3d60: 0x0080, 0x3d61: 0x0080, 0x3d62: 0x0080, 0x3d63: 0x0080, + 0x3d64: 0x0080, 0x3d65: 0x0080, 0x3d66: 0x0080, 0x3d67: 0x0080, 0x3d68: 0x0080, 0x3d69: 0x0080, + 0x3d6a: 0x0080, 0x3d6b: 0x0080, 0x3d6c: 0x0080, + // Block 0xf6, offset 0x3d80 + 0x3d80: 0x00c0, 0x3d81: 0x00c0, 0x3d82: 0x00c0, 0x3d83: 0x00c0, 0x3d84: 0x00c0, 0x3d85: 0x00c0, + 0x3d86: 0x00c0, 0x3d87: 0x00c0, 0x3d88: 0x00c0, 0x3d89: 0x00c0, 0x3d8a: 0x00c0, 0x3d8b: 0x00c0, + 0x3d8c: 0x00c0, 0x3d8d: 0x00c0, 0x3d8e: 0x00c0, 0x3d8f: 0x00c0, 0x3d90: 0x00c0, 0x3d91: 0x00c0, + 0x3d92: 0x00c0, 0x3d93: 0x00c0, 0x3d94: 0x00c0, 0x3d95: 0x00c0, 0x3d96: 0x00c0, 0x3d97: 0x00c0, + 0x3d98: 0x00c0, 0x3d99: 0x00c0, 0x3d9a: 0x00c0, 0x3d9b: 0x00c0, 0x3d9c: 0x00c0, 0x3d9d: 0x00c0, + 0x3d9e: 0x00c0, 0x3d9f: 0x00c0, 0x3da0: 0x00c0, 0x3da1: 0x00c0, 0x3da2: 0x00c0, 0x3da3: 0x00c0, + 0x3da4: 0x00c0, 0x3da5: 0x00c0, 0x3da6: 0x00c0, 0x3da7: 0x00c0, 0x3da8: 0x00c0, 0x3da9: 0x00c0, + 0x3daa: 0x00c0, 0x3dab: 0x00c3, 0x3dac: 0x00c0, 0x3dad: 0x00c3, 0x3dae: 0x00c0, 0x3daf: 0x00c0, + 0x3db0: 0x00c3, 0x3db1: 0x00c3, 0x3db2: 0x00c3, 0x3db3: 0x00c3, 0x3db4: 0x00c3, 0x3db5: 0x00c3, + 0x3db6: 0x00c5, 0x3db7: 0x00c3, + // Block 0xf7, offset 0x3dc0 + 0x3dc0: 0x00c0, 0x3dc1: 0x00c0, 0x3dc2: 0x00c0, 0x3dc3: 0x00c0, 0x3dc4: 0x00c0, 0x3dc5: 0x00c0, + 0x3dc6: 0x00c0, 0x3dc7: 0x00c0, 0x3dc8: 0x00c0, 0x3dc9: 0x00c0, + // Block 0xf8, offset 0x3e00 + 0x3e00: 0x00c0, 0x3e01: 0x00c0, 0x3e02: 0x00c0, 0x3e03: 0x00c0, 0x3e04: 0x00c0, 0x3e05: 0x00c0, + 0x3e06: 0x00c0, 0x3e07: 0x00c0, 0x3e08: 0x00c0, 0x3e09: 0x00c0, 0x3e0a: 0x00c0, 0x3e0b: 0x00c0, + 0x3e0c: 0x00c0, 0x3e0d: 0x00c0, 0x3e0e: 0x00c0, 0x3e0f: 0x00c0, 0x3e10: 0x00c0, 0x3e11: 0x00c0, + 0x3e12: 0x00c0, 0x3e13: 0x00c0, 0x3e14: 0x00c0, 0x3e15: 0x00c0, 0x3e16: 0x00c0, 0x3e17: 0x00c0, + 0x3e18: 0x00c0, 0x3e19: 0x00c0, 0x3e1d: 0x00c3, + 0x3e1e: 0x00c3, 0x3e1f: 0x00c3, 0x3e20: 0x00c0, 0x3e21: 0x00c0, 0x3e22: 0x00c3, 0x3e23: 0x00c3, + 0x3e24: 0x00c3, 0x3e25: 0x00c3, 0x3e26: 0x00c0, 0x3e27: 0x00c3, 0x3e28: 0x00c3, 0x3e29: 0x00c3, + 0x3e2a: 0x00c3, 0x3e2b: 0x00c6, + 0x3e30: 0x00c0, 0x3e31: 0x00c0, 0x3e32: 0x00c0, 0x3e33: 0x00c0, 0x3e34: 0x00c0, 0x3e35: 0x00c0, + 0x3e36: 0x00c0, 0x3e37: 0x00c0, 0x3e38: 0x00c0, 0x3e39: 0x00c0, 0x3e3a: 0x0080, 0x3e3b: 0x0080, + 0x3e3c: 0x0080, 0x3e3d: 0x0080, 0x3e3e: 0x0080, 0x3e3f: 0x0080, + // Block 0xf9, offset 0x3e40 + 0x3e60: 0x00c0, 0x3e61: 0x00c0, 0x3e62: 0x00c0, 0x3e63: 0x00c0, + 0x3e64: 0x00c0, 0x3e65: 0x00c0, 0x3e66: 0x00c0, 0x3e67: 0x00c0, 0x3e68: 0x00c0, 0x3e69: 0x00c0, + 0x3e6a: 0x00c0, 0x3e6b: 0x00c0, 0x3e6c: 0x00c0, 0x3e6d: 0x00c0, 0x3e6e: 0x00c0, 0x3e6f: 0x00c0, + 0x3e70: 0x00c0, 0x3e71: 0x00c0, 0x3e72: 0x00c0, 0x3e73: 0x00c0, 0x3e74: 0x00c0, 0x3e75: 0x00c0, + 0x3e76: 0x00c0, 0x3e77: 0x00c0, 0x3e78: 0x00c0, 0x3e79: 0x00c0, 0x3e7a: 0x00c0, 0x3e7b: 0x00c0, + 0x3e7c: 0x00c0, 0x3e7d: 0x00c0, 0x3e7e: 0x00c0, 0x3e7f: 0x00c0, + // Block 0xfa, offset 0x3e80 + 0x3e80: 0x00c0, 0x3e81: 0x00c0, 0x3e82: 0x00c0, 0x3e83: 0x00c0, 0x3e84: 0x00c0, 0x3e85: 0x00c0, + 0x3e86: 0x00c0, 0x3e87: 0x00c0, 0x3e88: 0x00c0, 0x3e89: 0x00c0, 0x3e8a: 0x00c0, 0x3e8b: 0x00c0, + 0x3e8c: 0x00c0, 0x3e8d: 0x00c0, 0x3e8e: 0x00c0, 0x3e8f: 0x00c0, 0x3e90: 0x00c0, 0x3e91: 0x00c0, + 0x3e92: 0x00c0, 0x3e93: 0x00c0, 0x3e94: 0x00c0, 0x3e95: 0x00c0, 0x3e96: 0x00c0, 0x3e97: 0x00c0, + 0x3e98: 0x00c0, 0x3e99: 0x00c0, 0x3e9a: 0x00c0, 0x3e9b: 0x00c0, 0x3e9c: 0x00c0, 0x3e9d: 0x00c0, + 0x3e9e: 0x00c0, 0x3e9f: 0x00c0, 0x3ea0: 0x00c0, 0x3ea1: 0x00c0, 0x3ea2: 0x00c0, 0x3ea3: 0x00c0, + 0x3ea4: 0x00c0, 0x3ea5: 0x00c0, 0x3ea6: 0x00c0, 0x3ea7: 0x00c0, 0x3ea8: 0x00c0, 0x3ea9: 0x00c0, + 0x3eaa: 0x0080, 0x3eab: 0x0080, 0x3eac: 0x0080, 0x3ead: 0x0080, 0x3eae: 0x0080, 0x3eaf: 0x0080, + 0x3eb0: 0x0080, 0x3eb1: 0x0080, 0x3eb2: 0x0080, + 0x3ebf: 0x00c0, + // Block 0xfb, offset 0x3ec0 + 0x3ec0: 0x00c0, 0x3ec1: 0x00c3, 0x3ec2: 0x00c3, 0x3ec3: 0x00c3, 0x3ec4: 0x00c3, 0x3ec5: 0x00c3, + 0x3ec6: 0x00c3, 0x3ec7: 0x00c0, 0x3ec8: 0x00c0, 0x3ec9: 0x00c3, 0x3eca: 0x00c3, 0x3ecb: 0x00c0, + 0x3ecc: 0x00c0, 0x3ecd: 0x00c0, 0x3ece: 0x00c0, 0x3ecf: 0x00c0, 0x3ed0: 0x00c0, 0x3ed1: 0x00c0, + 0x3ed2: 0x00c0, 0x3ed3: 0x00c0, 0x3ed4: 0x00c0, 0x3ed5: 0x00c0, 0x3ed6: 0x00c0, 0x3ed7: 0x00c0, + 0x3ed8: 0x00c0, 0x3ed9: 0x00c0, 0x3eda: 0x00c0, 0x3edb: 0x00c0, 0x3edc: 0x00c0, 0x3edd: 0x00c0, + 0x3ede: 0x00c0, 0x3edf: 0x00c0, 0x3ee0: 0x00c0, 0x3ee1: 0x00c0, 0x3ee2: 0x00c0, 0x3ee3: 0x00c0, + 0x3ee4: 0x00c0, 0x3ee5: 0x00c0, 0x3ee6: 0x00c0, 0x3ee7: 0x00c0, 0x3ee8: 0x00c0, 0x3ee9: 0x00c0, + 0x3eea: 0x00c0, 0x3eeb: 0x00c0, 0x3eec: 0x00c0, 0x3eed: 0x00c0, 0x3eee: 0x00c0, 0x3eef: 0x00c0, + 0x3ef0: 0x00c0, 0x3ef1: 0x00c0, 0x3ef2: 0x00c0, 0x3ef3: 0x00c3, 0x3ef4: 0x00c6, 0x3ef5: 0x00c3, + 0x3ef6: 0x00c3, 0x3ef7: 0x00c3, 0x3ef8: 0x00c3, 0x3ef9: 0x00c0, 0x3efa: 0x00c0, 0x3efb: 0x00c3, + 0x3efc: 0x00c3, 0x3efd: 0x00c3, 0x3efe: 0x00c3, 0x3eff: 0x0080, + // Block 0xfc, offset 0x3f00 + 0x3f00: 0x0080, 0x3f01: 0x0080, 0x3f02: 0x0080, 0x3f03: 0x0080, 0x3f04: 0x0080, 0x3f05: 0x0080, + 0x3f06: 0x0080, 0x3f07: 0x00c6, + 0x3f10: 0x00c0, 0x3f11: 0x00c3, + 0x3f12: 0x00c3, 0x3f13: 0x00c3, 0x3f14: 0x00c3, 0x3f15: 0x00c3, 0x3f16: 0x00c3, 0x3f17: 0x00c0, + 0x3f18: 0x00c0, 0x3f19: 0x00c3, 0x3f1a: 0x00c3, 0x3f1b: 0x00c3, 0x3f1c: 0x00c0, 0x3f1d: 0x00c0, + 0x3f1e: 0x00c0, 0x3f1f: 0x00c0, 0x3f20: 0x00c0, 0x3f21: 0x00c0, 0x3f22: 0x00c0, 0x3f23: 0x00c0, + 0x3f24: 0x00c0, 0x3f25: 0x00c0, 0x3f26: 0x00c0, 0x3f27: 0x00c0, 0x3f28: 0x00c0, 0x3f29: 0x00c0, + 0x3f2a: 0x00c0, 0x3f2b: 0x00c0, 0x3f2c: 0x00c0, 0x3f2d: 0x00c0, 0x3f2e: 0x00c0, 0x3f2f: 0x00c0, + 0x3f30: 0x00c0, 0x3f31: 0x00c0, 0x3f32: 0x00c0, 0x3f33: 0x00c0, 0x3f34: 0x00c0, 0x3f35: 0x00c0, + 0x3f36: 0x00c0, 0x3f37: 0x00c0, 0x3f38: 0x00c0, 0x3f39: 0x00c0, 0x3f3a: 0x00c0, 0x3f3b: 0x00c0, + 0x3f3c: 0x00c0, 0x3f3d: 0x00c0, 0x3f3e: 0x00c0, 0x3f3f: 0x00c0, + // Block 0xfd, offset 0x3f40 + 0x3f40: 0x00c0, 0x3f41: 0x00c0, 0x3f42: 0x00c0, 0x3f43: 0x00c0, + 0x3f46: 0x00c0, 0x3f47: 0x00c0, 0x3f48: 0x00c0, 0x3f49: 0x00c0, 0x3f4a: 0x00c3, 0x3f4b: 0x00c3, + 0x3f4c: 0x00c3, 0x3f4d: 0x00c3, 0x3f4e: 0x00c3, 0x3f4f: 0x00c3, 0x3f50: 0x00c3, 0x3f51: 0x00c3, + 0x3f52: 0x00c3, 0x3f53: 0x00c3, 0x3f54: 0x00c3, 0x3f55: 0x00c3, 0x3f56: 0x00c3, 0x3f57: 0x00c0, + 0x3f58: 0x00c3, 0x3f59: 0x00c6, 0x3f5a: 0x0080, 0x3f5b: 0x0080, 0x3f5c: 0x0080, + 0x3f5e: 0x0080, 0x3f5f: 0x0080, 0x3f60: 0x0080, 0x3f61: 0x0080, 0x3f62: 0x0080, + // Block 0xfe, offset 0x3f80 + 0x3f80: 0x00c0, 0x3f81: 0x00c0, 0x3f82: 0x00c0, 0x3f83: 0x00c0, 0x3f84: 0x00c0, 0x3f85: 0x00c0, + 0x3f86: 0x00c0, 0x3f87: 0x00c0, 0x3f88: 0x00c0, 0x3f89: 0x00c0, 0x3f8a: 0x00c0, 0x3f8b: 0x00c0, + 0x3f8c: 0x00c0, 0x3f8d: 0x00c0, 0x3f8e: 0x00c0, 0x3f8f: 0x00c0, 0x3f90: 0x00c0, 0x3f91: 0x00c0, + 0x3f92: 0x00c0, 0x3f93: 0x00c0, 0x3f94: 0x00c0, 0x3f95: 0x00c0, 0x3f96: 0x00c0, 0x3f97: 0x00c0, + 0x3f98: 0x00c0, 0x3f99: 0x00c0, 0x3f9a: 0x00c0, 0x3f9b: 0x00c0, 0x3f9c: 0x00c0, 0x3f9d: 0x00c0, + 0x3f9e: 0x00c0, 0x3f9f: 0x00c0, 0x3fa0: 0x00c0, 0x3fa1: 0x00c0, 0x3fa2: 0x00c0, 0x3fa3: 0x00c0, + 0x3fa4: 0x00c0, 0x3fa5: 0x00c0, 0x3fa6: 0x00c0, 0x3fa7: 0x00c0, 0x3fa8: 0x00c0, 0x3fa9: 0x00c0, + 0x3faa: 0x00c0, 0x3fab: 0x00c0, 0x3fac: 0x00c0, 0x3fad: 0x00c0, 0x3fae: 0x00c0, 0x3faf: 0x00c0, + 0x3fb0: 0x00c0, 0x3fb1: 0x00c0, 0x3fb2: 0x00c0, 0x3fb3: 0x00c0, 0x3fb4: 0x00c0, 0x3fb5: 0x00c0, + 0x3fb6: 0x00c0, 0x3fb7: 0x00c0, 0x3fb8: 0x00c0, + // Block 0xff, offset 0x3fc0 + 0x3fc0: 0x00c0, 0x3fc1: 0x00c0, 0x3fc2: 0x00c0, 0x3fc3: 0x00c0, 0x3fc4: 0x00c0, 0x3fc5: 0x00c0, + 0x3fc6: 0x00c0, 0x3fc7: 0x00c0, 0x3fc8: 0x00c0, 0x3fca: 0x00c0, 0x3fcb: 0x00c0, + 0x3fcc: 0x00c0, 0x3fcd: 0x00c0, 0x3fce: 0x00c0, 0x3fcf: 0x00c0, 0x3fd0: 0x00c0, 0x3fd1: 0x00c0, + 0x3fd2: 0x00c0, 0x3fd3: 0x00c0, 0x3fd4: 0x00c0, 0x3fd5: 0x00c0, 0x3fd6: 0x00c0, 0x3fd7: 0x00c0, + 0x3fd8: 0x00c0, 0x3fd9: 0x00c0, 0x3fda: 0x00c0, 0x3fdb: 0x00c0, 0x3fdc: 0x00c0, 0x3fdd: 0x00c0, + 0x3fde: 0x00c0, 0x3fdf: 0x00c0, 0x3fe0: 0x00c0, 0x3fe1: 0x00c0, 0x3fe2: 0x00c0, 0x3fe3: 0x00c0, + 0x3fe4: 0x00c0, 0x3fe5: 0x00c0, 0x3fe6: 0x00c0, 0x3fe7: 0x00c0, 0x3fe8: 0x00c0, 0x3fe9: 0x00c0, + 0x3fea: 0x00c0, 0x3feb: 0x00c0, 0x3fec: 0x00c0, 0x3fed: 0x00c0, 0x3fee: 0x00c0, 0x3fef: 0x00c0, + 0x3ff0: 0x00c3, 0x3ff1: 0x00c3, 0x3ff2: 0x00c3, 0x3ff3: 0x00c3, 0x3ff4: 0x00c3, 0x3ff5: 0x00c3, + 0x3ff6: 0x00c3, 0x3ff8: 0x00c3, 0x3ff9: 0x00c3, 0x3ffa: 0x00c3, 0x3ffb: 0x00c3, + 0x3ffc: 0x00c3, 0x3ffd: 0x00c3, 0x3ffe: 0x00c0, 0x3fff: 0x00c6, + // Block 0x100, offset 0x4000 + 0x4000: 0x00c0, 0x4001: 0x0080, 0x4002: 0x0080, 0x4003: 0x0080, 0x4004: 0x0080, 0x4005: 0x0080, + 0x4010: 0x00c0, 0x4011: 0x00c0, + 0x4012: 0x00c0, 0x4013: 0x00c0, 0x4014: 0x00c0, 0x4015: 0x00c0, 0x4016: 0x00c0, 0x4017: 0x00c0, + 0x4018: 0x00c0, 0x4019: 0x00c0, 0x401a: 0x0080, 0x401b: 0x0080, 0x401c: 0x0080, 0x401d: 0x0080, + 0x401e: 0x0080, 0x401f: 0x0080, 0x4020: 0x0080, 0x4021: 0x0080, 0x4022: 0x0080, 0x4023: 0x0080, + 0x4024: 0x0080, 0x4025: 0x0080, 0x4026: 0x0080, 0x4027: 0x0080, 0x4028: 0x0080, 0x4029: 0x0080, + 0x402a: 0x0080, 0x402b: 0x0080, 0x402c: 0x0080, + 0x4030: 0x0080, 0x4031: 0x0080, 0x4032: 0x00c0, 0x4033: 0x00c0, 0x4034: 0x00c0, 0x4035: 0x00c0, + 0x4036: 0x00c0, 0x4037: 0x00c0, 0x4038: 0x00c0, 0x4039: 0x00c0, 0x403a: 0x00c0, 0x403b: 0x00c0, + 0x403c: 0x00c0, 0x403d: 0x00c0, 0x403e: 0x00c0, 0x403f: 0x00c0, + // Block 0x101, offset 0x4040 + 0x4040: 0x00c0, 0x4041: 0x00c0, 0x4042: 0x00c0, 0x4043: 0x00c0, 0x4044: 0x00c0, 0x4045: 0x00c0, + 0x4046: 0x00c0, 0x4047: 0x00c0, 0x4048: 0x00c0, 0x4049: 0x00c0, 0x404a: 0x00c0, 0x404b: 0x00c0, + 0x404c: 0x00c0, 0x404d: 0x00c0, 0x404e: 0x00c0, 0x404f: 0x00c0, + 0x4052: 0x00c3, 0x4053: 0x00c3, 0x4054: 0x00c3, 0x4055: 0x00c3, 0x4056: 0x00c3, 0x4057: 0x00c3, + 0x4058: 0x00c3, 0x4059: 0x00c3, 0x405a: 0x00c3, 0x405b: 0x00c3, 0x405c: 0x00c3, 0x405d: 0x00c3, + 0x405e: 0x00c3, 0x405f: 0x00c3, 0x4060: 0x00c3, 0x4061: 0x00c3, 0x4062: 0x00c3, 0x4063: 0x00c3, + 0x4064: 0x00c3, 0x4065: 0x00c3, 0x4066: 0x00c3, 0x4067: 0x00c3, 0x4069: 0x00c0, + 0x406a: 0x00c3, 0x406b: 0x00c3, 0x406c: 0x00c3, 0x406d: 0x00c3, 0x406e: 0x00c3, 0x406f: 0x00c3, + 0x4070: 0x00c3, 0x4071: 0x00c0, 0x4072: 0x00c3, 0x4073: 0x00c3, 0x4074: 0x00c0, 0x4075: 0x00c3, + 0x4076: 0x00c3, + // Block 0x102, offset 0x4080 + 0x4080: 0x00c0, 0x4081: 0x00c0, 0x4082: 0x00c0, 0x4083: 0x00c0, 0x4084: 0x00c0, 0x4085: 0x00c0, + 0x4086: 0x00c0, 0x4088: 0x00c0, 0x4089: 0x00c0, 0x408b: 0x00c0, + 0x408c: 0x00c0, 0x408d: 0x00c0, 0x408e: 0x00c0, 0x408f: 0x00c0, 0x4090: 0x00c0, 0x4091: 0x00c0, + 0x4092: 0x00c0, 0x4093: 0x00c0, 0x4094: 0x00c0, 0x4095: 0x00c0, 0x4096: 0x00c0, 0x4097: 0x00c0, + 0x4098: 0x00c0, 0x4099: 0x00c0, 0x409a: 0x00c0, 0x409b: 0x00c0, 0x409c: 0x00c0, 0x409d: 0x00c0, + 0x409e: 0x00c0, 0x409f: 0x00c0, 0x40a0: 0x00c0, 0x40a1: 0x00c0, 0x40a2: 0x00c0, 0x40a3: 0x00c0, + 0x40a4: 0x00c0, 0x40a5: 0x00c0, 0x40a6: 0x00c0, 0x40a7: 0x00c0, 0x40a8: 0x00c0, 0x40a9: 0x00c0, + 0x40aa: 0x00c0, 0x40ab: 0x00c0, 0x40ac: 0x00c0, 0x40ad: 0x00c0, 0x40ae: 0x00c0, 0x40af: 0x00c0, + 0x40b0: 0x00c0, 0x40b1: 0x00c3, 0x40b2: 0x00c3, 0x40b3: 0x00c3, 0x40b4: 0x00c3, 0x40b5: 0x00c3, + 0x40b6: 0x00c3, 0x40ba: 0x00c3, + 0x40bc: 0x00c3, 0x40bd: 0x00c3, 0x40bf: 0x00c3, + // Block 0x103, offset 0x40c0 + 0x40c0: 0x00c3, 0x40c1: 0x00c3, 0x40c2: 0x00c3, 0x40c3: 0x00c3, 0x40c4: 0x00c6, 0x40c5: 0x00c6, + 0x40c6: 0x00c0, 0x40c7: 0x00c3, + 0x40d0: 0x00c0, 0x40d1: 0x00c0, + 0x40d2: 0x00c0, 0x40d3: 0x00c0, 0x40d4: 0x00c0, 0x40d5: 0x00c0, 0x40d6: 0x00c0, 0x40d7: 0x00c0, + 0x40d8: 0x00c0, 0x40d9: 0x00c0, + // Block 0x104, offset 0x4100 + 0x4100: 0x00c0, 0x4101: 0x00c0, 0x4102: 0x00c0, 0x4103: 0x00c0, 0x4104: 0x00c0, 0x4105: 0x00c0, + 0x4106: 0x00c0, 0x4107: 0x00c0, 0x4108: 0x00c0, 0x4109: 0x00c0, 0x410a: 0x00c0, 0x410b: 0x00c0, + 0x410c: 0x00c0, 0x410d: 0x00c0, 0x410e: 0x00c0, 0x410f: 0x00c0, 0x4110: 0x00c0, 0x4111: 0x00c0, + 0x4112: 0x00c0, 0x4113: 0x00c0, 0x4114: 0x00c0, 0x4115: 0x00c0, 0x4116: 0x00c0, 0x4117: 0x00c0, + 0x4118: 0x00c0, 0x4119: 0x00c0, + // Block 0x105, offset 0x4140 + 0x4140: 0x0080, 0x4141: 0x0080, 0x4142: 0x0080, 0x4143: 0x0080, 0x4144: 0x0080, 0x4145: 0x0080, + 0x4146: 0x0080, 0x4147: 0x0080, 0x4148: 0x0080, 0x4149: 0x0080, 0x414a: 0x0080, 0x414b: 0x0080, + 0x414c: 0x0080, 0x414d: 0x0080, 0x414e: 0x0080, 0x414f: 0x0080, 0x4150: 0x0080, 0x4151: 0x0080, + 0x4152: 0x0080, 0x4153: 0x0080, 0x4154: 0x0080, 0x4155: 0x0080, 0x4156: 0x0080, 0x4157: 0x0080, + 0x4158: 0x0080, 0x4159: 0x0080, 0x415a: 0x0080, 0x415b: 0x0080, 0x415c: 0x0080, 0x415d: 0x0080, + 0x415e: 0x0080, 0x415f: 0x0080, 0x4160: 0x0080, 0x4161: 0x0080, 0x4162: 0x0080, 0x4163: 0x0080, + 0x4164: 0x0080, 0x4165: 0x0080, 0x4166: 0x0080, 0x4167: 0x0080, 0x4168: 0x0080, 0x4169: 0x0080, + 0x416a: 0x0080, 0x416b: 0x0080, 0x416c: 0x0080, 0x416d: 0x0080, 0x416e: 0x0080, + 0x4170: 0x0080, 0x4171: 0x0080, 0x4172: 0x0080, 0x4173: 0x0080, 0x4174: 0x0080, + // Block 0x106, offset 0x4180 + 0x4180: 0x00c0, 0x4181: 0x00c0, 0x4182: 0x00c0, 0x4183: 0x00c0, + // Block 0x107, offset 0x41c0 + 0x41c0: 0x00c0, 0x41c1: 0x00c0, 0x41c2: 0x00c0, 0x41c3: 0x00c0, 0x41c4: 0x00c0, 0x41c5: 0x00c0, + 0x41c6: 0x00c0, 0x41c7: 0x00c0, 0x41c8: 0x00c0, 0x41c9: 0x00c0, 0x41ca: 0x00c0, 0x41cb: 0x00c0, + 0x41cc: 0x00c0, 0x41cd: 0x00c0, 0x41ce: 0x00c0, 0x41cf: 0x00c0, 0x41d0: 0x00c0, 0x41d1: 0x00c0, + 0x41d2: 0x00c0, 0x41d3: 0x00c0, 0x41d4: 0x00c0, 0x41d5: 0x00c0, 0x41d6: 0x00c0, 0x41d7: 0x00c0, + 0x41d8: 0x00c0, 0x41d9: 0x00c0, 0x41da: 0x00c0, 0x41db: 0x00c0, 0x41dc: 0x00c0, 0x41dd: 0x00c0, + 0x41de: 0x00c0, 0x41df: 0x00c0, 0x41e0: 0x00c0, 0x41e1: 0x00c0, 0x41e2: 0x00c0, 0x41e3: 0x00c0, + 0x41e4: 0x00c0, 0x41e5: 0x00c0, 0x41e6: 0x00c0, 0x41e7: 0x00c0, 0x41e8: 0x00c0, 0x41e9: 0x00c0, + 0x41ea: 0x00c0, 0x41eb: 0x00c0, 0x41ec: 0x00c0, 0x41ed: 0x00c0, 0x41ee: 0x00c0, + // Block 0x108, offset 0x4200 + 0x4200: 0x00c0, 0x4201: 0x00c0, 0x4202: 0x00c0, 0x4203: 0x00c0, 0x4204: 0x00c0, 0x4205: 0x00c0, + 0x4206: 0x00c0, + // Block 0x109, offset 0x4240 + 0x4240: 0x00c0, 0x4241: 0x00c0, 0x4242: 0x00c0, 0x4243: 0x00c0, 0x4244: 0x00c0, 0x4245: 0x00c0, + 0x4246: 0x00c0, 0x4247: 0x00c0, 0x4248: 0x00c0, 0x4249: 0x00c0, 0x424a: 0x00c0, 0x424b: 0x00c0, + 0x424c: 0x00c0, 0x424d: 0x00c0, 0x424e: 0x00c0, 0x424f: 0x00c0, 0x4250: 0x00c0, 0x4251: 0x00c0, + 0x4252: 0x00c0, 0x4253: 0x00c0, 0x4254: 0x00c0, 0x4255: 0x00c0, 0x4256: 0x00c0, 0x4257: 0x00c0, + 0x4258: 0x00c0, 0x4259: 0x00c0, 0x425a: 0x00c0, 0x425b: 0x00c0, 0x425c: 0x00c0, 0x425d: 0x00c0, + 0x425e: 0x00c0, 0x4260: 0x00c0, 0x4261: 0x00c0, 0x4262: 0x00c0, 0x4263: 0x00c0, + 0x4264: 0x00c0, 0x4265: 0x00c0, 0x4266: 0x00c0, 0x4267: 0x00c0, 0x4268: 0x00c0, 0x4269: 0x00c0, + 0x426e: 0x0080, 0x426f: 0x0080, + // Block 0x10a, offset 0x4280 + 0x4290: 0x00c0, 0x4291: 0x00c0, + 0x4292: 0x00c0, 0x4293: 0x00c0, 0x4294: 0x00c0, 0x4295: 0x00c0, 0x4296: 0x00c0, 0x4297: 0x00c0, + 0x4298: 0x00c0, 0x4299: 0x00c0, 0x429a: 0x00c0, 0x429b: 0x00c0, 0x429c: 0x00c0, 0x429d: 0x00c0, + 0x429e: 0x00c0, 0x429f: 0x00c0, 0x42a0: 0x00c0, 0x42a1: 0x00c0, 0x42a2: 0x00c0, 0x42a3: 0x00c0, + 0x42a4: 0x00c0, 0x42a5: 0x00c0, 0x42a6: 0x00c0, 0x42a7: 0x00c0, 0x42a8: 0x00c0, 0x42a9: 0x00c0, + 0x42aa: 0x00c0, 0x42ab: 0x00c0, 0x42ac: 0x00c0, 0x42ad: 0x00c0, + 0x42b0: 0x00c3, 0x42b1: 0x00c3, 0x42b2: 0x00c3, 0x42b3: 0x00c3, 0x42b4: 0x00c3, 0x42b5: 0x0080, + // Block 0x10b, offset 0x42c0 + 0x42c0: 0x00c0, 0x42c1: 0x00c0, 0x42c2: 0x00c0, 0x42c3: 0x00c0, 0x42c4: 0x00c0, 0x42c5: 0x00c0, + 0x42c6: 0x00c0, 0x42c7: 0x00c0, 0x42c8: 0x00c0, 0x42c9: 0x00c0, 0x42ca: 0x00c0, 0x42cb: 0x00c0, + 0x42cc: 0x00c0, 0x42cd: 0x00c0, 0x42ce: 0x00c0, 0x42cf: 0x00c0, 0x42d0: 0x00c0, 0x42d1: 0x00c0, + 0x42d2: 0x00c0, 0x42d3: 0x00c0, 0x42d4: 0x00c0, 0x42d5: 0x00c0, 0x42d6: 0x00c0, 0x42d7: 0x00c0, + 0x42d8: 0x00c0, 0x42d9: 0x00c0, 0x42da: 0x00c0, 0x42db: 0x00c0, 0x42dc: 0x00c0, 0x42dd: 0x00c0, + 0x42de: 0x00c0, 0x42df: 0x00c0, 0x42e0: 0x00c0, 0x42e1: 0x00c0, 0x42e2: 0x00c0, 0x42e3: 0x00c0, + 0x42e4: 0x00c0, 0x42e5: 0x00c0, 0x42e6: 0x00c0, 0x42e7: 0x00c0, 0x42e8: 0x00c0, 0x42e9: 0x00c0, + 0x42ea: 0x00c0, 0x42eb: 0x00c0, 0x42ec: 0x00c0, 0x42ed: 0x00c0, 0x42ee: 0x00c0, 0x42ef: 0x00c0, + 0x42f0: 0x00c3, 0x42f1: 0x00c3, 0x42f2: 0x00c3, 0x42f3: 0x00c3, 0x42f4: 0x00c3, 0x42f5: 0x00c3, + 0x42f6: 0x00c3, 0x42f7: 0x0080, 0x42f8: 0x0080, 0x42f9: 0x0080, 0x42fa: 0x0080, 0x42fb: 0x0080, + 0x42fc: 0x0080, 0x42fd: 0x0080, 0x42fe: 0x0080, 0x42ff: 0x0080, + // Block 0x10c, offset 0x4300 + 0x4300: 0x00c0, 0x4301: 0x00c0, 0x4302: 0x00c0, 0x4303: 0x00c0, 0x4304: 0x0080, 0x4305: 0x0080, + 0x4310: 0x00c0, 0x4311: 0x00c0, + 0x4312: 0x00c0, 0x4313: 0x00c0, 0x4314: 0x00c0, 0x4315: 0x00c0, 0x4316: 0x00c0, 0x4317: 0x00c0, + 0x4318: 0x00c0, 0x4319: 0x00c0, 0x431b: 0x0080, 0x431c: 0x0080, 0x431d: 0x0080, + 0x431e: 0x0080, 0x431f: 0x0080, 0x4320: 0x0080, 0x4321: 0x0080, 0x4323: 0x00c0, + 0x4324: 0x00c0, 0x4325: 0x00c0, 0x4326: 0x00c0, 0x4327: 0x00c0, 0x4328: 0x00c0, 0x4329: 0x00c0, + 0x432a: 0x00c0, 0x432b: 0x00c0, 0x432c: 0x00c0, 0x432d: 0x00c0, 0x432e: 0x00c0, 0x432f: 0x00c0, + 0x4330: 0x00c0, 0x4331: 0x00c0, 0x4332: 0x00c0, 0x4333: 0x00c0, 0x4334: 0x00c0, 0x4335: 0x00c0, + 0x4336: 0x00c0, 0x4337: 0x00c0, + 0x433d: 0x00c0, 0x433e: 0x00c0, 0x433f: 0x00c0, + // Block 0x10d, offset 0x4340 + 0x4340: 0x00c0, 0x4341: 0x00c0, 0x4342: 0x00c0, 0x4343: 0x00c0, 0x4344: 0x00c0, 0x4345: 0x00c0, + 0x4346: 0x00c0, 0x4347: 0x00c0, 0x4348: 0x00c0, 0x4349: 0x00c0, 0x434a: 0x00c0, 0x434b: 0x00c0, + 0x434c: 0x00c0, 0x434d: 0x00c0, 0x434e: 0x00c0, 0x434f: 0x00c0, + // Block 0x10e, offset 0x4380 + 0x4380: 0x00c0, 0x4381: 0x00c0, 0x4382: 0x00c0, 0x4383: 0x00c0, 0x4384: 0x00c0, + 0x4390: 0x00c0, 0x4391: 0x00c0, + 0x4392: 0x00c0, 0x4393: 0x00c0, 0x4394: 0x00c0, 0x4395: 0x00c0, 0x4396: 0x00c0, 0x4397: 0x00c0, + 0x4398: 0x00c0, 0x4399: 0x00c0, 0x439a: 0x00c0, 0x439b: 0x00c0, 0x439c: 0x00c0, 0x439d: 0x00c0, + 0x439e: 0x00c0, 0x439f: 0x00c0, 0x43a0: 0x00c0, 0x43a1: 0x00c0, 0x43a2: 0x00c0, 0x43a3: 0x00c0, + 0x43a4: 0x00c0, 0x43a5: 0x00c0, 0x43a6: 0x00c0, 0x43a7: 0x00c0, 0x43a8: 0x00c0, 0x43a9: 0x00c0, + 0x43aa: 0x00c0, 0x43ab: 0x00c0, 0x43ac: 0x00c0, 0x43ad: 0x00c0, 0x43ae: 0x00c0, 0x43af: 0x00c0, + 0x43b0: 0x00c0, 0x43b1: 0x00c0, 0x43b2: 0x00c0, 0x43b3: 0x00c0, 0x43b4: 0x00c0, 0x43b5: 0x00c0, + 0x43b6: 0x00c0, 0x43b7: 0x00c0, 0x43b8: 0x00c0, 0x43b9: 0x00c0, 0x43ba: 0x00c0, 0x43bb: 0x00c0, + 0x43bc: 0x00c0, 0x43bd: 0x00c0, 0x43be: 0x00c0, + // Block 0x10f, offset 0x43c0 + 0x43cf: 0x00c3, 0x43d0: 0x00c3, 0x43d1: 0x00c3, + 0x43d2: 0x00c3, 0x43d3: 0x00c0, 0x43d4: 0x00c0, 0x43d5: 0x00c0, 0x43d6: 0x00c0, 0x43d7: 0x00c0, + 0x43d8: 0x00c0, 0x43d9: 0x00c0, 0x43da: 0x00c0, 0x43db: 0x00c0, 0x43dc: 0x00c0, 0x43dd: 0x00c0, + 0x43de: 0x00c0, 0x43df: 0x00c0, + // Block 0x110, offset 0x4400 + 0x4420: 0x00c0, 0x4421: 0x00c0, + // Block 0x111, offset 0x4440 + 0x4440: 0x00c0, 0x4441: 0x00c0, 0x4442: 0x00c0, 0x4443: 0x00c0, 0x4444: 0x00c0, 0x4445: 0x00c0, + 0x4446: 0x00c0, 0x4447: 0x00c0, 0x4448: 0x00c0, 0x4449: 0x00c0, 0x444a: 0x00c0, 0x444b: 0x00c0, + 0x444c: 0x00c0, 0x444d: 0x00c0, 0x444e: 0x00c0, 0x444f: 0x00c0, 0x4450: 0x00c0, 0x4451: 0x00c0, + 0x4452: 0x00c0, 0x4453: 0x00c0, 0x4454: 0x00c0, 0x4455: 0x00c0, 0x4456: 0x00c0, 0x4457: 0x00c0, + 0x4458: 0x00c0, 0x4459: 0x00c0, 0x445a: 0x00c0, 0x445b: 0x00c0, 0x445c: 0x00c0, 0x445d: 0x00c0, + 0x445e: 0x00c0, 0x445f: 0x00c0, 0x4460: 0x00c0, 0x4461: 0x00c0, 0x4462: 0x00c0, 0x4463: 0x00c0, + 0x4464: 0x00c0, 0x4465: 0x00c0, 0x4466: 0x00c0, 0x4467: 0x00c0, 0x4468: 0x00c0, 0x4469: 0x00c0, + 0x446a: 0x00c0, 0x446b: 0x00c0, 0x446c: 0x00c0, + // Block 0x112, offset 0x4480 + 0x4480: 0x00cc, 0x4481: 0x00cc, 0x4482: 0x00cc, 0x4483: 0x00cc, 0x4484: 0x00cc, 0x4485: 0x00cc, + 0x4486: 0x00cc, 0x4487: 0x00cc, 0x4488: 0x00cc, 0x4489: 0x00cc, 0x448a: 0x00cc, 0x448b: 0x00cc, + 0x448c: 0x00cc, 0x448d: 0x00cc, 0x448e: 0x00cc, 0x448f: 0x00cc, 0x4490: 0x00cc, 0x4491: 0x00cc, + 0x4492: 0x00cc, 0x4493: 0x00cc, 0x4494: 0x00cc, 0x4495: 0x00cc, 0x4496: 0x00cc, 0x4497: 0x00cc, + 0x4498: 0x00cc, 0x4499: 0x00cc, 0x449a: 0x00cc, 0x449b: 0x00cc, 0x449c: 0x00cc, 0x449d: 0x00cc, + 0x449e: 0x00cc, + // Block 0x113, offset 0x44c0 + 0x44f0: 0x00c0, 0x44f1: 0x00c0, 0x44f2: 0x00c0, 0x44f3: 0x00c0, 0x44f4: 0x00c0, 0x44f5: 0x00c0, + 0x44f6: 0x00c0, 0x44f7: 0x00c0, 0x44f8: 0x00c0, 0x44f9: 0x00c0, 0x44fa: 0x00c0, 0x44fb: 0x00c0, + 0x44fc: 0x00c0, 0x44fd: 0x00c0, 0x44fe: 0x00c0, 0x44ff: 0x00c0, + // Block 0x114, offset 0x4500 + 0x4500: 0x00c0, 0x4501: 0x00c0, 0x4502: 0x00c0, 0x4503: 0x00c0, 0x4504: 0x00c0, 0x4505: 0x00c0, + 0x4506: 0x00c0, 0x4507: 0x00c0, 0x4508: 0x00c0, 0x4509: 0x00c0, 0x450a: 0x00c0, 0x450b: 0x00c0, + 0x450c: 0x00c0, 0x450d: 0x00c0, 0x450e: 0x00c0, 0x450f: 0x00c0, 0x4510: 0x00c0, 0x4511: 0x00c0, + 0x4512: 0x00c0, 0x4513: 0x00c0, 0x4514: 0x00c0, 0x4515: 0x00c0, 0x4516: 0x00c0, 0x4517: 0x00c0, + 0x4518: 0x00c0, 0x4519: 0x00c0, 0x451a: 0x00c0, 0x451b: 0x00c0, 0x451c: 0x00c0, 0x451d: 0x00c0, + 0x451e: 0x00c0, 0x451f: 0x00c0, 0x4520: 0x00c0, 0x4521: 0x00c0, 0x4522: 0x00c0, 0x4523: 0x00c0, + 0x4524: 0x00c0, 0x4525: 0x00c0, 0x4526: 0x00c0, 0x4527: 0x00c0, 0x4528: 0x00c0, 0x4529: 0x00c0, + 0x452a: 0x00c0, 0x452b: 0x00c0, 0x452c: 0x00c0, 0x452d: 0x00c0, 0x452e: 0x00c0, 0x452f: 0x00c0, + 0x4530: 0x00c0, 0x4531: 0x00c0, 0x4532: 0x00c0, 0x4533: 0x00c0, 0x4534: 0x00c0, 0x4535: 0x00c0, + 0x4536: 0x00c0, 0x4537: 0x00c0, 0x4538: 0x00c0, 0x4539: 0x00c0, 0x453a: 0x00c0, 0x453b: 0x00c0, + // Block 0x115, offset 0x4540 + 0x4540: 0x00c0, 0x4541: 0x00c0, 0x4542: 0x00c0, 0x4543: 0x00c0, 0x4544: 0x00c0, 0x4545: 0x00c0, + 0x4546: 0x00c0, 0x4547: 0x00c0, 0x4548: 0x00c0, 0x4549: 0x00c0, 0x454a: 0x00c0, 0x454b: 0x00c0, + 0x454c: 0x00c0, 0x454d: 0x00c0, 0x454e: 0x00c0, 0x454f: 0x00c0, 0x4550: 0x00c0, 0x4551: 0x00c0, + 0x4552: 0x00c0, 0x4553: 0x00c0, 0x4554: 0x00c0, 0x4555: 0x00c0, 0x4556: 0x00c0, 0x4557: 0x00c0, + 0x4558: 0x00c0, 0x4559: 0x00c0, 0x455a: 0x00c0, 0x455b: 0x00c0, 0x455c: 0x00c0, 0x455d: 0x00c0, + 0x455e: 0x00c0, 0x455f: 0x00c0, 0x4560: 0x00c0, 0x4561: 0x00c0, 0x4562: 0x00c0, 0x4563: 0x00c0, + 0x4564: 0x00c0, 0x4565: 0x00c0, 0x4566: 0x00c0, 0x4567: 0x00c0, 0x4568: 0x00c0, 0x4569: 0x00c0, + 0x456a: 0x00c0, + 0x4570: 0x00c0, 0x4571: 0x00c0, 0x4572: 0x00c0, 0x4573: 0x00c0, 0x4574: 0x00c0, 0x4575: 0x00c0, + 0x4576: 0x00c0, 0x4577: 0x00c0, 0x4578: 0x00c0, 0x4579: 0x00c0, 0x457a: 0x00c0, 0x457b: 0x00c0, + 0x457c: 0x00c0, + // Block 0x116, offset 0x4580 + 0x4580: 0x00c0, 0x4581: 0x00c0, 0x4582: 0x00c0, 0x4583: 0x00c0, 0x4584: 0x00c0, 0x4585: 0x00c0, + 0x4586: 0x00c0, 0x4587: 0x00c0, 0x4588: 0x00c0, + 0x4590: 0x00c0, 0x4591: 0x00c0, + 0x4592: 0x00c0, 0x4593: 0x00c0, 0x4594: 0x00c0, 0x4595: 0x00c0, 0x4596: 0x00c0, 0x4597: 0x00c0, + 0x4598: 0x00c0, 0x4599: 0x00c0, 0x459c: 0x0080, 0x459d: 0x00c3, + 0x459e: 0x00c3, 0x459f: 0x0080, 0x45a0: 0x0040, 0x45a1: 0x0040, 0x45a2: 0x0040, 0x45a3: 0x0040, + // Block 0x117, offset 0x45c0 + 0x45c0: 0x0080, 0x45c1: 0x0080, 0x45c2: 0x0080, 0x45c3: 0x0080, 0x45c4: 0x0080, 0x45c5: 0x0080, + 0x45c6: 0x0080, 0x45c7: 0x0080, 0x45c8: 0x0080, 0x45c9: 0x0080, 0x45ca: 0x0080, 0x45cb: 0x0080, + 0x45cc: 0x0080, 0x45cd: 0x0080, 0x45ce: 0x0080, 0x45cf: 0x0080, 0x45d0: 0x0080, 0x45d1: 0x0080, + 0x45d2: 0x0080, 0x45d3: 0x0080, 0x45d4: 0x0080, 0x45d5: 0x0080, 0x45d6: 0x0080, 0x45d7: 0x0080, + 0x45d8: 0x0080, 0x45d9: 0x0080, 0x45da: 0x0080, 0x45db: 0x0080, 0x45dc: 0x0080, 0x45dd: 0x0080, + 0x45de: 0x0080, 0x45df: 0x0080, 0x45e0: 0x0080, 0x45e1: 0x0080, 0x45e2: 0x0080, 0x45e3: 0x0080, + 0x45e4: 0x0080, 0x45e5: 0x0080, 0x45e6: 0x0080, 0x45e7: 0x0080, 0x45e8: 0x0080, 0x45e9: 0x0080, + 0x45ea: 0x0080, 0x45eb: 0x0080, 0x45ec: 0x0080, 0x45ed: 0x0080, 0x45ee: 0x0080, 0x45ef: 0x0080, + 0x45f0: 0x0080, 0x45f1: 0x0080, 0x45f2: 0x0080, 0x45f3: 0x0080, 0x45f4: 0x0080, 0x45f5: 0x0080, + // Block 0x118, offset 0x4600 + 0x4600: 0x0080, 0x4601: 0x0080, 0x4602: 0x0080, 0x4603: 0x0080, 0x4604: 0x0080, 0x4605: 0x0080, + 0x4606: 0x0080, 0x4607: 0x0080, 0x4608: 0x0080, 0x4609: 0x0080, 0x460a: 0x0080, 0x460b: 0x0080, + 0x460c: 0x0080, 0x460d: 0x0080, 0x460e: 0x0080, 0x460f: 0x0080, 0x4610: 0x0080, 0x4611: 0x0080, + 0x4612: 0x0080, 0x4613: 0x0080, 0x4614: 0x0080, 0x4615: 0x0080, 0x4616: 0x0080, 0x4617: 0x0080, + 0x4618: 0x0080, 0x4619: 0x0080, 0x461a: 0x0080, 0x461b: 0x0080, 0x461c: 0x0080, 0x461d: 0x0080, + 0x461e: 0x0080, 0x461f: 0x0080, 0x4620: 0x0080, 0x4621: 0x0080, 0x4622: 0x0080, 0x4623: 0x0080, + 0x4624: 0x0080, 0x4625: 0x0080, 0x4626: 0x0080, 0x4629: 0x0080, + 0x462a: 0x0080, 0x462b: 0x0080, 0x462c: 0x0080, 0x462d: 0x0080, 0x462e: 0x0080, 0x462f: 0x0080, + 0x4630: 0x0080, 0x4631: 0x0080, 0x4632: 0x0080, 0x4633: 0x0080, 0x4634: 0x0080, 0x4635: 0x0080, + 0x4636: 0x0080, 0x4637: 0x0080, 0x4638: 0x0080, 0x4639: 0x0080, 0x463a: 0x0080, 0x463b: 0x0080, + 0x463c: 0x0080, 0x463d: 0x0080, 0x463e: 0x0080, 0x463f: 0x0080, + // Block 0x119, offset 0x4640 + 0x4640: 0x0080, 0x4641: 0x0080, 0x4642: 0x0080, 0x4643: 0x0080, 0x4644: 0x0080, 0x4645: 0x0080, + 0x4646: 0x0080, 0x4647: 0x0080, 0x4648: 0x0080, 0x4649: 0x0080, 0x464a: 0x0080, 0x464b: 0x0080, + 0x464c: 0x0080, 0x464d: 0x0080, 0x464e: 0x0080, 0x464f: 0x0080, 0x4650: 0x0080, 0x4651: 0x0080, + 0x4652: 0x0080, 0x4653: 0x0080, 0x4654: 0x0080, 0x4655: 0x0080, 0x4656: 0x0080, 0x4657: 0x0080, + 0x4658: 0x0080, 0x4659: 0x0080, 0x465a: 0x0080, 0x465b: 0x0080, 0x465c: 0x0080, 0x465d: 0x0080, + 0x465e: 0x0080, 0x465f: 0x0080, 0x4660: 0x0080, 0x4661: 0x0080, 0x4662: 0x0080, 0x4663: 0x0080, + 0x4664: 0x0080, 0x4665: 0x00c0, 0x4666: 0x00c0, 0x4667: 0x00c3, 0x4668: 0x00c3, 0x4669: 0x00c3, + 0x466a: 0x0080, 0x466b: 0x0080, 0x466c: 0x0080, 0x466d: 0x00c0, 0x466e: 0x00c0, 0x466f: 0x00c0, + 0x4670: 0x00c0, 0x4671: 0x00c0, 0x4672: 0x00c0, 0x4673: 0x0040, 0x4674: 0x0040, 0x4675: 0x0040, + 0x4676: 0x0040, 0x4677: 0x0040, 0x4678: 0x0040, 0x4679: 0x0040, 0x467a: 0x0040, 0x467b: 0x00c3, + 0x467c: 0x00c3, 0x467d: 0x00c3, 0x467e: 0x00c3, 0x467f: 0x00c3, + // Block 0x11a, offset 0x4680 + 0x4680: 0x00c3, 0x4681: 0x00c3, 0x4682: 0x00c3, 0x4683: 0x0080, 0x4684: 0x0080, 0x4685: 0x00c3, + 0x4686: 0x00c3, 0x4687: 0x00c3, 0x4688: 0x00c3, 0x4689: 0x00c3, 0x468a: 0x00c3, 0x468b: 0x00c3, + 0x468c: 0x0080, 0x468d: 0x0080, 0x468e: 0x0080, 0x468f: 0x0080, 0x4690: 0x0080, 0x4691: 0x0080, + 0x4692: 0x0080, 0x4693: 0x0080, 0x4694: 0x0080, 0x4695: 0x0080, 0x4696: 0x0080, 0x4697: 0x0080, + 0x4698: 0x0080, 0x4699: 0x0080, 0x469a: 0x0080, 0x469b: 0x0080, 0x469c: 0x0080, 0x469d: 0x0080, + 0x469e: 0x0080, 0x469f: 0x0080, 0x46a0: 0x0080, 0x46a1: 0x0080, 0x46a2: 0x0080, 0x46a3: 0x0080, + 0x46a4: 0x0080, 0x46a5: 0x0080, 0x46a6: 0x0080, 0x46a7: 0x0080, 0x46a8: 0x0080, 0x46a9: 0x0080, + 0x46aa: 0x00c3, 0x46ab: 0x00c3, 0x46ac: 0x00c3, 0x46ad: 0x00c3, 0x46ae: 0x0080, 0x46af: 0x0080, + 0x46b0: 0x0080, 0x46b1: 0x0080, 0x46b2: 0x0080, 0x46b3: 0x0080, 0x46b4: 0x0080, 0x46b5: 0x0080, + 0x46b6: 0x0080, 0x46b7: 0x0080, 0x46b8: 0x0080, 0x46b9: 0x0080, 0x46ba: 0x0080, 0x46bb: 0x0080, + 0x46bc: 0x0080, 0x46bd: 0x0080, 0x46be: 0x0080, 0x46bf: 0x0080, + // Block 0x11b, offset 0x46c0 + 0x46c0: 0x0080, 0x46c1: 0x0080, 0x46c2: 0x0080, 0x46c3: 0x0080, 0x46c4: 0x0080, 0x46c5: 0x0080, + 0x46c6: 0x0080, 0x46c7: 0x0080, 0x46c8: 0x0080, 0x46c9: 0x0080, 0x46ca: 0x0080, 0x46cb: 0x0080, + 0x46cc: 0x0080, 0x46cd: 0x0080, 0x46ce: 0x0080, 0x46cf: 0x0080, 0x46d0: 0x0080, 0x46d1: 0x0080, + 0x46d2: 0x0080, 0x46d3: 0x0080, 0x46d4: 0x0080, 0x46d5: 0x0080, 0x46d6: 0x0080, 0x46d7: 0x0080, + 0x46d8: 0x0080, 0x46d9: 0x0080, 0x46da: 0x0080, 0x46db: 0x0080, 0x46dc: 0x0080, 0x46dd: 0x0080, + 0x46de: 0x0080, 0x46df: 0x0080, 0x46e0: 0x0080, 0x46e1: 0x0080, 0x46e2: 0x0080, 0x46e3: 0x0080, + 0x46e4: 0x0080, 0x46e5: 0x0080, 0x46e6: 0x0080, 0x46e7: 0x0080, 0x46e8: 0x0080, + // Block 0x11c, offset 0x4700 + 0x4700: 0x0088, 0x4701: 0x0088, 0x4702: 0x00c9, 0x4703: 0x00c9, 0x4704: 0x00c9, 0x4705: 0x0088, + // Block 0x11d, offset 0x4740 + 0x4740: 0x0080, 0x4741: 0x0080, 0x4742: 0x0080, 0x4743: 0x0080, 0x4744: 0x0080, 0x4745: 0x0080, + 0x4746: 0x0080, 0x4747: 0x0080, 0x4748: 0x0080, 0x4749: 0x0080, 0x474a: 0x0080, 0x474b: 0x0080, + 0x474c: 0x0080, 0x474d: 0x0080, 0x474e: 0x0080, 0x474f: 0x0080, 0x4750: 0x0080, 0x4751: 0x0080, + 0x4752: 0x0080, 0x4753: 0x0080, 0x4754: 0x0080, 0x4755: 0x0080, 0x4756: 0x0080, + 0x4760: 0x0080, 0x4761: 0x0080, 0x4762: 0x0080, 0x4763: 0x0080, + 0x4764: 0x0080, 0x4765: 0x0080, 0x4766: 0x0080, 0x4767: 0x0080, 0x4768: 0x0080, 0x4769: 0x0080, + 0x476a: 0x0080, 0x476b: 0x0080, 0x476c: 0x0080, 0x476d: 0x0080, 0x476e: 0x0080, 0x476f: 0x0080, + 0x4770: 0x0080, 0x4771: 0x0080, + // Block 0x11e, offset 0x4780 + 0x4780: 0x0080, 0x4781: 0x0080, 0x4782: 0x0080, 0x4783: 0x0080, 0x4784: 0x0080, 0x4785: 0x0080, + 0x4786: 0x0080, 0x4787: 0x0080, 0x4788: 0x0080, 0x4789: 0x0080, 0x478a: 0x0080, 0x478b: 0x0080, + 0x478c: 0x0080, 0x478d: 0x0080, 0x478e: 0x0080, 0x478f: 0x0080, 0x4790: 0x0080, 0x4791: 0x0080, + 0x4792: 0x0080, 0x4793: 0x0080, 0x4794: 0x0080, 0x4796: 0x0080, 0x4797: 0x0080, + 0x4798: 0x0080, 0x4799: 0x0080, 0x479a: 0x0080, 0x479b: 0x0080, 0x479c: 0x0080, 0x479d: 0x0080, + 0x479e: 0x0080, 0x479f: 0x0080, 0x47a0: 0x0080, 0x47a1: 0x0080, 0x47a2: 0x0080, 0x47a3: 0x0080, + 0x47a4: 0x0080, 0x47a5: 0x0080, 0x47a6: 0x0080, 0x47a7: 0x0080, 0x47a8: 0x0080, 0x47a9: 0x0080, + 0x47aa: 0x0080, 0x47ab: 0x0080, 0x47ac: 0x0080, 0x47ad: 0x0080, 0x47ae: 0x0080, 0x47af: 0x0080, + 0x47b0: 0x0080, 0x47b1: 0x0080, 0x47b2: 0x0080, 0x47b3: 0x0080, 0x47b4: 0x0080, 0x47b5: 0x0080, + 0x47b6: 0x0080, 0x47b7: 0x0080, 0x47b8: 0x0080, 0x47b9: 0x0080, 0x47ba: 0x0080, 0x47bb: 0x0080, + 0x47bc: 0x0080, 0x47bd: 0x0080, 0x47be: 0x0080, 0x47bf: 0x0080, + // Block 0x11f, offset 0x47c0 + 0x47c0: 0x0080, 0x47c1: 0x0080, 0x47c2: 0x0080, 0x47c3: 0x0080, 0x47c4: 0x0080, 0x47c5: 0x0080, + 0x47c6: 0x0080, 0x47c7: 0x0080, 0x47c8: 0x0080, 0x47c9: 0x0080, 0x47ca: 0x0080, 0x47cb: 0x0080, + 0x47cc: 0x0080, 0x47cd: 0x0080, 0x47ce: 0x0080, 0x47cf: 0x0080, 0x47d0: 0x0080, 0x47d1: 0x0080, + 0x47d2: 0x0080, 0x47d3: 0x0080, 0x47d4: 0x0080, 0x47d5: 0x0080, 0x47d6: 0x0080, 0x47d7: 0x0080, + 0x47d8: 0x0080, 0x47d9: 0x0080, 0x47da: 0x0080, 0x47db: 0x0080, 0x47dc: 0x0080, + 0x47de: 0x0080, 0x47df: 0x0080, 0x47e2: 0x0080, + 0x47e5: 0x0080, 0x47e6: 0x0080, 0x47e9: 0x0080, + 0x47ea: 0x0080, 0x47eb: 0x0080, 0x47ec: 0x0080, 0x47ee: 0x0080, 0x47ef: 0x0080, + 0x47f0: 0x0080, 0x47f1: 0x0080, 0x47f2: 0x0080, 0x47f3: 0x0080, 0x47f4: 0x0080, 0x47f5: 0x0080, + 0x47f6: 0x0080, 0x47f7: 0x0080, 0x47f8: 0x0080, 0x47f9: 0x0080, 0x47fb: 0x0080, + 0x47fd: 0x0080, 0x47fe: 0x0080, 0x47ff: 0x0080, + // Block 0x120, offset 0x4800 + 0x4800: 0x0080, 0x4801: 0x0080, 0x4802: 0x0080, 0x4803: 0x0080, 0x4805: 0x0080, + 0x4806: 0x0080, 0x4807: 0x0080, 0x4808: 0x0080, 0x4809: 0x0080, 0x480a: 0x0080, 0x480b: 0x0080, + 0x480c: 0x0080, 0x480d: 0x0080, 0x480e: 0x0080, 0x480f: 0x0080, 0x4810: 0x0080, 0x4811: 0x0080, + 0x4812: 0x0080, 0x4813: 0x0080, 0x4814: 0x0080, 0x4815: 0x0080, 0x4816: 0x0080, 0x4817: 0x0080, + 0x4818: 0x0080, 0x4819: 0x0080, 0x481a: 0x0080, 0x481b: 0x0080, 0x481c: 0x0080, 0x481d: 0x0080, + 0x481e: 0x0080, 0x481f: 0x0080, 0x4820: 0x0080, 0x4821: 0x0080, 0x4822: 0x0080, 0x4823: 0x0080, + 0x4824: 0x0080, 0x4825: 0x0080, 0x4826: 0x0080, 0x4827: 0x0080, 0x4828: 0x0080, 0x4829: 0x0080, + 0x482a: 0x0080, 0x482b: 0x0080, 0x482c: 0x0080, 0x482d: 0x0080, 0x482e: 0x0080, 0x482f: 0x0080, + 0x4830: 0x0080, 0x4831: 0x0080, 0x4832: 0x0080, 0x4833: 0x0080, 0x4834: 0x0080, 0x4835: 0x0080, + 0x4836: 0x0080, 0x4837: 0x0080, 0x4838: 0x0080, 0x4839: 0x0080, 0x483a: 0x0080, 0x483b: 0x0080, + 0x483c: 0x0080, 0x483d: 0x0080, 0x483e: 0x0080, 0x483f: 0x0080, + // Block 0x121, offset 0x4840 + 0x4840: 0x0080, 0x4841: 0x0080, 0x4842: 0x0080, 0x4843: 0x0080, 0x4844: 0x0080, 0x4845: 0x0080, + 0x4847: 0x0080, 0x4848: 0x0080, 0x4849: 0x0080, 0x484a: 0x0080, + 0x484d: 0x0080, 0x484e: 0x0080, 0x484f: 0x0080, 0x4850: 0x0080, 0x4851: 0x0080, + 0x4852: 0x0080, 0x4853: 0x0080, 0x4854: 0x0080, 0x4856: 0x0080, 0x4857: 0x0080, + 0x4858: 0x0080, 0x4859: 0x0080, 0x485a: 0x0080, 0x485b: 0x0080, 0x485c: 0x0080, + 0x485e: 0x0080, 0x485f: 0x0080, 0x4860: 0x0080, 0x4861: 0x0080, 0x4862: 0x0080, 0x4863: 0x0080, + 0x4864: 0x0080, 0x4865: 0x0080, 0x4866: 0x0080, 0x4867: 0x0080, 0x4868: 0x0080, 0x4869: 0x0080, + 0x486a: 0x0080, 0x486b: 0x0080, 0x486c: 0x0080, 0x486d: 0x0080, 0x486e: 0x0080, 0x486f: 0x0080, + 0x4870: 0x0080, 0x4871: 0x0080, 0x4872: 0x0080, 0x4873: 0x0080, 0x4874: 0x0080, 0x4875: 0x0080, + 0x4876: 0x0080, 0x4877: 0x0080, 0x4878: 0x0080, 0x4879: 0x0080, 0x487b: 0x0080, + 0x487c: 0x0080, 0x487d: 0x0080, 0x487e: 0x0080, + // Block 0x122, offset 0x4880 + 0x4880: 0x0080, 0x4881: 0x0080, 0x4882: 0x0080, 0x4883: 0x0080, 0x4884: 0x0080, + 0x4886: 0x0080, 0x488a: 0x0080, 0x488b: 0x0080, + 0x488c: 0x0080, 0x488d: 0x0080, 0x488e: 0x0080, 0x488f: 0x0080, 0x4890: 0x0080, + 0x4892: 0x0080, 0x4893: 0x0080, 0x4894: 0x0080, 0x4895: 0x0080, 0x4896: 0x0080, 0x4897: 0x0080, + 0x4898: 0x0080, 0x4899: 0x0080, 0x489a: 0x0080, 0x489b: 0x0080, 0x489c: 0x0080, 0x489d: 0x0080, + 0x489e: 0x0080, 0x489f: 0x0080, 0x48a0: 0x0080, 0x48a1: 0x0080, 0x48a2: 0x0080, 0x48a3: 0x0080, + 0x48a4: 0x0080, 0x48a5: 0x0080, 0x48a6: 0x0080, 0x48a7: 0x0080, 0x48a8: 0x0080, 0x48a9: 0x0080, + 0x48aa: 0x0080, 0x48ab: 0x0080, 0x48ac: 0x0080, 0x48ad: 0x0080, 0x48ae: 0x0080, 0x48af: 0x0080, + 0x48b0: 0x0080, 0x48b1: 0x0080, 0x48b2: 0x0080, 0x48b3: 0x0080, 0x48b4: 0x0080, 0x48b5: 0x0080, + 0x48b6: 0x0080, 0x48b7: 0x0080, 0x48b8: 0x0080, 0x48b9: 0x0080, 0x48ba: 0x0080, 0x48bb: 0x0080, + 0x48bc: 0x0080, 0x48bd: 0x0080, 0x48be: 0x0080, 0x48bf: 0x0080, + // Block 0x123, offset 0x48c0 + 0x48c0: 0x0080, 0x48c1: 0x0080, 0x48c2: 0x0080, 0x48c3: 0x0080, 0x48c4: 0x0080, 0x48c5: 0x0080, + 0x48c6: 0x0080, 0x48c7: 0x0080, 0x48c8: 0x0080, 0x48c9: 0x0080, 0x48ca: 0x0080, 0x48cb: 0x0080, + 0x48cc: 0x0080, 0x48cd: 0x0080, 0x48ce: 0x0080, 0x48cf: 0x0080, 0x48d0: 0x0080, 0x48d1: 0x0080, + 0x48d2: 0x0080, 0x48d3: 0x0080, 0x48d4: 0x0080, 0x48d5: 0x0080, 0x48d6: 0x0080, 0x48d7: 0x0080, + 0x48d8: 0x0080, 0x48d9: 0x0080, 0x48da: 0x0080, 0x48db: 0x0080, 0x48dc: 0x0080, 0x48dd: 0x0080, + 0x48de: 0x0080, 0x48df: 0x0080, 0x48e0: 0x0080, 0x48e1: 0x0080, 0x48e2: 0x0080, 0x48e3: 0x0080, + 0x48e4: 0x0080, 0x48e5: 0x0080, 0x48e8: 0x0080, 0x48e9: 0x0080, + 0x48ea: 0x0080, 0x48eb: 0x0080, 0x48ec: 0x0080, 0x48ed: 0x0080, 0x48ee: 0x0080, 0x48ef: 0x0080, + 0x48f0: 0x0080, 0x48f1: 0x0080, 0x48f2: 0x0080, 0x48f3: 0x0080, 0x48f4: 0x0080, 0x48f5: 0x0080, + 0x48f6: 0x0080, 0x48f7: 0x0080, 0x48f8: 0x0080, 0x48f9: 0x0080, 0x48fa: 0x0080, 0x48fb: 0x0080, + 0x48fc: 0x0080, 0x48fd: 0x0080, 0x48fe: 0x0080, 0x48ff: 0x0080, + // Block 0x124, offset 0x4900 + 0x4900: 0x0080, 0x4901: 0x0080, 0x4902: 0x0080, 0x4903: 0x0080, 0x4904: 0x0080, 0x4905: 0x0080, + 0x4906: 0x0080, 0x4907: 0x0080, 0x4908: 0x0080, 0x4909: 0x0080, 0x490a: 0x0080, 0x490b: 0x0080, + 0x490e: 0x0080, 0x490f: 0x0080, 0x4910: 0x0080, 0x4911: 0x0080, + 0x4912: 0x0080, 0x4913: 0x0080, 0x4914: 0x0080, 0x4915: 0x0080, 0x4916: 0x0080, 0x4917: 0x0080, + 0x4918: 0x0080, 0x4919: 0x0080, 0x491a: 0x0080, 0x491b: 0x0080, 0x491c: 0x0080, 0x491d: 0x0080, + 0x491e: 0x0080, 0x491f: 0x0080, 0x4920: 0x0080, 0x4921: 0x0080, 0x4922: 0x0080, 0x4923: 0x0080, + 0x4924: 0x0080, 0x4925: 0x0080, 0x4926: 0x0080, 0x4927: 0x0080, 0x4928: 0x0080, 0x4929: 0x0080, + 0x492a: 0x0080, 0x492b: 0x0080, 0x492c: 0x0080, 0x492d: 0x0080, 0x492e: 0x0080, 0x492f: 0x0080, + 0x4930: 0x0080, 0x4931: 0x0080, 0x4932: 0x0080, 0x4933: 0x0080, 0x4934: 0x0080, 0x4935: 0x0080, + 0x4936: 0x0080, 0x4937: 0x0080, 0x4938: 0x0080, 0x4939: 0x0080, 0x493a: 0x0080, 0x493b: 0x0080, + 0x493c: 0x0080, 0x493d: 0x0080, 0x493e: 0x0080, 0x493f: 0x0080, + // Block 0x125, offset 0x4940 + 0x4940: 0x00c3, 0x4941: 0x00c3, 0x4942: 0x00c3, 0x4943: 0x00c3, 0x4944: 0x00c3, 0x4945: 0x00c3, + 0x4946: 0x00c3, 0x4947: 0x00c3, 0x4948: 0x00c3, 0x4949: 0x00c3, 0x494a: 0x00c3, 0x494b: 0x00c3, + 0x494c: 0x00c3, 0x494d: 0x00c3, 0x494e: 0x00c3, 0x494f: 0x00c3, 0x4950: 0x00c3, 0x4951: 0x00c3, + 0x4952: 0x00c3, 0x4953: 0x00c3, 0x4954: 0x00c3, 0x4955: 0x00c3, 0x4956: 0x00c3, 0x4957: 0x00c3, + 0x4958: 0x00c3, 0x4959: 0x00c3, 0x495a: 0x00c3, 0x495b: 0x00c3, 0x495c: 0x00c3, 0x495d: 0x00c3, + 0x495e: 0x00c3, 0x495f: 0x00c3, 0x4960: 0x00c3, 0x4961: 0x00c3, 0x4962: 0x00c3, 0x4963: 0x00c3, + 0x4964: 0x00c3, 0x4965: 0x00c3, 0x4966: 0x00c3, 0x4967: 0x00c3, 0x4968: 0x00c3, 0x4969: 0x00c3, + 0x496a: 0x00c3, 0x496b: 0x00c3, 0x496c: 0x00c3, 0x496d: 0x00c3, 0x496e: 0x00c3, 0x496f: 0x00c3, + 0x4970: 0x00c3, 0x4971: 0x00c3, 0x4972: 0x00c3, 0x4973: 0x00c3, 0x4974: 0x00c3, 0x4975: 0x00c3, + 0x4976: 0x00c3, 0x4977: 0x0080, 0x4978: 0x0080, 0x4979: 0x0080, 0x497a: 0x0080, 0x497b: 0x00c3, + 0x497c: 0x00c3, 0x497d: 0x00c3, 0x497e: 0x00c3, 0x497f: 0x00c3, + // Block 0x126, offset 0x4980 + 0x4980: 0x00c3, 0x4981: 0x00c3, 0x4982: 0x00c3, 0x4983: 0x00c3, 0x4984: 0x00c3, 0x4985: 0x00c3, + 0x4986: 0x00c3, 0x4987: 0x00c3, 0x4988: 0x00c3, 0x4989: 0x00c3, 0x498a: 0x00c3, 0x498b: 0x00c3, + 0x498c: 0x00c3, 0x498d: 0x00c3, 0x498e: 0x00c3, 0x498f: 0x00c3, 0x4990: 0x00c3, 0x4991: 0x00c3, + 0x4992: 0x00c3, 0x4993: 0x00c3, 0x4994: 0x00c3, 0x4995: 0x00c3, 0x4996: 0x00c3, 0x4997: 0x00c3, + 0x4998: 0x00c3, 0x4999: 0x00c3, 0x499a: 0x00c3, 0x499b: 0x00c3, 0x499c: 0x00c3, 0x499d: 0x00c3, + 0x499e: 0x00c3, 0x499f: 0x00c3, 0x49a0: 0x00c3, 0x49a1: 0x00c3, 0x49a2: 0x00c3, 0x49a3: 0x00c3, + 0x49a4: 0x00c3, 0x49a5: 0x00c3, 0x49a6: 0x00c3, 0x49a7: 0x00c3, 0x49a8: 0x00c3, 0x49a9: 0x00c3, + 0x49aa: 0x00c3, 0x49ab: 0x00c3, 0x49ac: 0x00c3, 0x49ad: 0x0080, 0x49ae: 0x0080, 0x49af: 0x0080, + 0x49b0: 0x0080, 0x49b1: 0x0080, 0x49b2: 0x0080, 0x49b3: 0x0080, 0x49b4: 0x0080, 0x49b5: 0x00c3, + 0x49b6: 0x0080, 0x49b7: 0x0080, 0x49b8: 0x0080, 0x49b9: 0x0080, 0x49ba: 0x0080, 0x49bb: 0x0080, + 0x49bc: 0x0080, 0x49bd: 0x0080, 0x49be: 0x0080, 0x49bf: 0x0080, + // Block 0x127, offset 0x49c0 + 0x49c0: 0x0080, 0x49c1: 0x0080, 0x49c2: 0x0080, 0x49c3: 0x0080, 0x49c4: 0x00c3, 0x49c5: 0x0080, + 0x49c6: 0x0080, 0x49c7: 0x0080, 0x49c8: 0x0080, 0x49c9: 0x0080, 0x49ca: 0x0080, 0x49cb: 0x0080, + 0x49db: 0x00c3, 0x49dc: 0x00c3, 0x49dd: 0x00c3, + 0x49de: 0x00c3, 0x49df: 0x00c3, 0x49e1: 0x00c3, 0x49e2: 0x00c3, 0x49e3: 0x00c3, + 0x49e4: 0x00c3, 0x49e5: 0x00c3, 0x49e6: 0x00c3, 0x49e7: 0x00c3, 0x49e8: 0x00c3, 0x49e9: 0x00c3, + 0x49ea: 0x00c3, 0x49eb: 0x00c3, 0x49ec: 0x00c3, 0x49ed: 0x00c3, 0x49ee: 0x00c3, 0x49ef: 0x00c3, + // Block 0x128, offset 0x4a00 + 0x4a00: 0x00c3, 0x4a01: 0x00c3, 0x4a02: 0x00c3, 0x4a03: 0x00c3, 0x4a04: 0x00c3, 0x4a05: 0x00c3, + 0x4a06: 0x00c3, 0x4a08: 0x00c3, 0x4a09: 0x00c3, 0x4a0a: 0x00c3, 0x4a0b: 0x00c3, + 0x4a0c: 0x00c3, 0x4a0d: 0x00c3, 0x4a0e: 0x00c3, 0x4a0f: 0x00c3, 0x4a10: 0x00c3, 0x4a11: 0x00c3, + 0x4a12: 0x00c3, 0x4a13: 0x00c3, 0x4a14: 0x00c3, 0x4a15: 0x00c3, 0x4a16: 0x00c3, 0x4a17: 0x00c3, + 0x4a18: 0x00c3, 0x4a1b: 0x00c3, 0x4a1c: 0x00c3, 0x4a1d: 0x00c3, + 0x4a1e: 0x00c3, 0x4a1f: 0x00c3, 0x4a20: 0x00c3, 0x4a21: 0x00c3, 0x4a23: 0x00c3, + 0x4a24: 0x00c3, 0x4a26: 0x00c3, 0x4a27: 0x00c3, 0x4a28: 0x00c3, 0x4a29: 0x00c3, + 0x4a2a: 0x00c3, + // Block 0x129, offset 0x4a40 + 0x4a40: 0x00c0, 0x4a41: 0x00c0, 0x4a42: 0x00c0, 0x4a43: 0x00c0, 0x4a44: 0x00c0, + 0x4a47: 0x0080, 0x4a48: 0x0080, 0x4a49: 0x0080, 0x4a4a: 0x0080, 0x4a4b: 0x0080, + 0x4a4c: 0x0080, 0x4a4d: 0x0080, 0x4a4e: 0x0080, 0x4a4f: 0x0080, 0x4a50: 0x00c3, 0x4a51: 0x00c3, + 0x4a52: 0x00c3, 0x4a53: 0x00c3, 0x4a54: 0x00c3, 0x4a55: 0x00c3, 0x4a56: 0x00c3, + // Block 0x12a, offset 0x4a80 + 0x4a80: 0x00c2, 0x4a81: 0x00c2, 0x4a82: 0x00c2, 0x4a83: 0x00c2, 0x4a84: 0x00c2, 0x4a85: 0x00c2, + 0x4a86: 0x00c2, 0x4a87: 0x00c2, 0x4a88: 0x00c2, 0x4a89: 0x00c2, 0x4a8a: 0x00c2, 0x4a8b: 0x00c2, + 0x4a8c: 0x00c2, 0x4a8d: 0x00c2, 0x4a8e: 0x00c2, 0x4a8f: 0x00c2, 0x4a90: 0x00c2, 0x4a91: 0x00c2, + 0x4a92: 0x00c2, 0x4a93: 0x00c2, 0x4a94: 0x00c2, 0x4a95: 0x00c2, 0x4a96: 0x00c2, 0x4a97: 0x00c2, + 0x4a98: 0x00c2, 0x4a99: 0x00c2, 0x4a9a: 0x00c2, 0x4a9b: 0x00c2, 0x4a9c: 0x00c2, 0x4a9d: 0x00c2, + 0x4a9e: 0x00c2, 0x4a9f: 0x00c2, 0x4aa0: 0x00c2, 0x4aa1: 0x00c2, 0x4aa2: 0x00c2, 0x4aa3: 0x00c2, + 0x4aa4: 0x00c2, 0x4aa5: 0x00c2, 0x4aa6: 0x00c2, 0x4aa7: 0x00c2, 0x4aa8: 0x00c2, 0x4aa9: 0x00c2, + 0x4aaa: 0x00c2, 0x4aab: 0x00c2, 0x4aac: 0x00c2, 0x4aad: 0x00c2, 0x4aae: 0x00c2, 0x4aaf: 0x00c2, + 0x4ab0: 0x00c2, 0x4ab1: 0x00c2, 0x4ab2: 0x00c2, 0x4ab3: 0x00c2, 0x4ab4: 0x00c2, 0x4ab5: 0x00c2, + 0x4ab6: 0x00c2, 0x4ab7: 0x00c2, 0x4ab8: 0x00c2, 0x4ab9: 0x00c2, 0x4aba: 0x00c2, 0x4abb: 0x00c2, + 0x4abc: 0x00c2, 0x4abd: 0x00c2, 0x4abe: 0x00c2, 0x4abf: 0x00c2, + // Block 0x12b, offset 0x4ac0 + 0x4ac0: 0x00c2, 0x4ac1: 0x00c2, 0x4ac2: 0x00c2, 0x4ac3: 0x00c2, 0x4ac4: 0x00c3, 0x4ac5: 0x00c3, + 0x4ac6: 0x00c3, 0x4ac7: 0x00c3, 0x4ac8: 0x00c3, 0x4ac9: 0x00c3, 0x4aca: 0x00c3, + 0x4ad0: 0x00c0, 0x4ad1: 0x00c0, + 0x4ad2: 0x00c0, 0x4ad3: 0x00c0, 0x4ad4: 0x00c0, 0x4ad5: 0x00c0, 0x4ad6: 0x00c0, 0x4ad7: 0x00c0, + 0x4ad8: 0x00c0, 0x4ad9: 0x00c0, + 0x4ade: 0x0080, 0x4adf: 0x0080, + // Block 0x12c, offset 0x4b00 + 0x4b00: 0x0080, 0x4b01: 0x0080, 0x4b02: 0x0080, 0x4b03: 0x0080, 0x4b05: 0x0080, + 0x4b06: 0x0080, 0x4b07: 0x0080, 0x4b08: 0x0080, 0x4b09: 0x0080, 0x4b0a: 0x0080, 0x4b0b: 0x0080, + 0x4b0c: 0x0080, 0x4b0d: 0x0080, 0x4b0e: 0x0080, 0x4b0f: 0x0080, 0x4b10: 0x0080, 0x4b11: 0x0080, + 0x4b12: 0x0080, 0x4b13: 0x0080, 0x4b14: 0x0080, 0x4b15: 0x0080, 0x4b16: 0x0080, 0x4b17: 0x0080, + 0x4b18: 0x0080, 0x4b19: 0x0080, 0x4b1a: 0x0080, 0x4b1b: 0x0080, 0x4b1c: 0x0080, 0x4b1d: 0x0080, + 0x4b1e: 0x0080, 0x4b1f: 0x0080, 0x4b21: 0x0080, 0x4b22: 0x0080, + 0x4b24: 0x0080, 0x4b27: 0x0080, 0x4b29: 0x0080, + 0x4b2a: 0x0080, 0x4b2b: 0x0080, 0x4b2c: 0x0080, 0x4b2d: 0x0080, 0x4b2e: 0x0080, 0x4b2f: 0x0080, + 0x4b30: 0x0080, 0x4b31: 0x0080, 0x4b32: 0x0080, 0x4b34: 0x0080, 0x4b35: 0x0080, + 0x4b36: 0x0080, 0x4b37: 0x0080, 0x4b39: 0x0080, 0x4b3b: 0x0080, + // Block 0x12d, offset 0x4b40 + 0x4b42: 0x0080, + 0x4b47: 0x0080, 0x4b49: 0x0080, 0x4b4b: 0x0080, + 0x4b4d: 0x0080, 0x4b4e: 0x0080, 0x4b4f: 0x0080, 0x4b51: 0x0080, + 0x4b52: 0x0080, 0x4b54: 0x0080, 0x4b57: 0x0080, + 0x4b59: 0x0080, 0x4b5b: 0x0080, 0x4b5d: 0x0080, + 0x4b5f: 0x0080, 0x4b61: 0x0080, 0x4b62: 0x0080, + 0x4b64: 0x0080, 0x4b67: 0x0080, 0x4b68: 0x0080, 0x4b69: 0x0080, + 0x4b6a: 0x0080, 0x4b6c: 0x0080, 0x4b6d: 0x0080, 0x4b6e: 0x0080, 0x4b6f: 0x0080, + 0x4b70: 0x0080, 0x4b71: 0x0080, 0x4b72: 0x0080, 0x4b74: 0x0080, 0x4b75: 0x0080, + 0x4b76: 0x0080, 0x4b77: 0x0080, 0x4b79: 0x0080, 0x4b7a: 0x0080, 0x4b7b: 0x0080, + 0x4b7c: 0x0080, 0x4b7e: 0x0080, + // Block 0x12e, offset 0x4b80 + 0x4b80: 0x0080, 0x4b81: 0x0080, 0x4b82: 0x0080, 0x4b83: 0x0080, 0x4b84: 0x0080, 0x4b85: 0x0080, + 0x4b86: 0x0080, 0x4b87: 0x0080, 0x4b88: 0x0080, 0x4b89: 0x0080, 0x4b8b: 0x0080, + 0x4b8c: 0x0080, 0x4b8d: 0x0080, 0x4b8e: 0x0080, 0x4b8f: 0x0080, 0x4b90: 0x0080, 0x4b91: 0x0080, + 0x4b92: 0x0080, 0x4b93: 0x0080, 0x4b94: 0x0080, 0x4b95: 0x0080, 0x4b96: 0x0080, 0x4b97: 0x0080, + 0x4b98: 0x0080, 0x4b99: 0x0080, 0x4b9a: 0x0080, 0x4b9b: 0x0080, + 0x4ba1: 0x0080, 0x4ba2: 0x0080, 0x4ba3: 0x0080, + 0x4ba5: 0x0080, 0x4ba6: 0x0080, 0x4ba7: 0x0080, 0x4ba8: 0x0080, 0x4ba9: 0x0080, + 0x4bab: 0x0080, 0x4bac: 0x0080, 0x4bad: 0x0080, 0x4bae: 0x0080, 0x4baf: 0x0080, + 0x4bb0: 0x0080, 0x4bb1: 0x0080, 0x4bb2: 0x0080, 0x4bb3: 0x0080, 0x4bb4: 0x0080, 0x4bb5: 0x0080, + 0x4bb6: 0x0080, 0x4bb7: 0x0080, 0x4bb8: 0x0080, 0x4bb9: 0x0080, 0x4bba: 0x0080, 0x4bbb: 0x0080, + // Block 0x12f, offset 0x4bc0 + 0x4bf0: 0x0080, 0x4bf1: 0x0080, + // Block 0x130, offset 0x4c00 + 0x4c00: 0x0080, 0x4c01: 0x0080, 0x4c02: 0x0080, 0x4c03: 0x0080, 0x4c04: 0x0080, 0x4c05: 0x0080, + 0x4c06: 0x0080, 0x4c07: 0x0080, 0x4c08: 0x0080, 0x4c09: 0x0080, 0x4c0a: 0x0080, 0x4c0b: 0x0080, + 0x4c0c: 0x0080, 0x4c0d: 0x0080, 0x4c0e: 0x0080, 0x4c0f: 0x0080, 0x4c10: 0x0080, 0x4c11: 0x0080, + 0x4c12: 0x0080, 0x4c13: 0x0080, 0x4c14: 0x0080, 0x4c15: 0x0080, 0x4c16: 0x0080, 0x4c17: 0x0080, + 0x4c18: 0x0080, 0x4c19: 0x0080, 0x4c1a: 0x0080, 0x4c1b: 0x0080, 0x4c1c: 0x0080, 0x4c1d: 0x0080, + 0x4c1e: 0x0080, 0x4c1f: 0x0080, 0x4c20: 0x0080, 0x4c21: 0x0080, 0x4c22: 0x0080, 0x4c23: 0x0080, + 0x4c24: 0x0080, 0x4c25: 0x0080, 0x4c26: 0x0080, 0x4c27: 0x0080, 0x4c28: 0x0080, 0x4c29: 0x0080, + 0x4c2a: 0x0080, 0x4c2b: 0x0080, + 0x4c30: 0x0080, 0x4c31: 0x0080, 0x4c32: 0x0080, 0x4c33: 0x0080, 0x4c34: 0x0080, 0x4c35: 0x0080, + 0x4c36: 0x0080, 0x4c37: 0x0080, 0x4c38: 0x0080, 0x4c39: 0x0080, 0x4c3a: 0x0080, 0x4c3b: 0x0080, + 0x4c3c: 0x0080, 0x4c3d: 0x0080, 0x4c3e: 0x0080, 0x4c3f: 0x0080, + // Block 0x131, offset 0x4c40 + 0x4c40: 0x0080, 0x4c41: 0x0080, 0x4c42: 0x0080, 0x4c43: 0x0080, 0x4c44: 0x0080, 0x4c45: 0x0080, + 0x4c46: 0x0080, 0x4c47: 0x0080, 0x4c48: 0x0080, 0x4c49: 0x0080, 0x4c4a: 0x0080, 0x4c4b: 0x0080, + 0x4c4c: 0x0080, 0x4c4d: 0x0080, 0x4c4e: 0x0080, 0x4c4f: 0x0080, 0x4c50: 0x0080, 0x4c51: 0x0080, + 0x4c52: 0x0080, 0x4c53: 0x0080, + 0x4c60: 0x0080, 0x4c61: 0x0080, 0x4c62: 0x0080, 0x4c63: 0x0080, + 0x4c64: 0x0080, 0x4c65: 0x0080, 0x4c66: 0x0080, 0x4c67: 0x0080, 0x4c68: 0x0080, 0x4c69: 0x0080, + 0x4c6a: 0x0080, 0x4c6b: 0x0080, 0x4c6c: 0x0080, 0x4c6d: 0x0080, 0x4c6e: 0x0080, + 0x4c71: 0x0080, 0x4c72: 0x0080, 0x4c73: 0x0080, 0x4c74: 0x0080, 0x4c75: 0x0080, + 0x4c76: 0x0080, 0x4c77: 0x0080, 0x4c78: 0x0080, 0x4c79: 0x0080, 0x4c7a: 0x0080, 0x4c7b: 0x0080, + 0x4c7c: 0x0080, 0x4c7d: 0x0080, 0x4c7e: 0x0080, 0x4c7f: 0x0080, + // Block 0x132, offset 0x4c80 + 0x4c81: 0x0080, 0x4c82: 0x0080, 0x4c83: 0x0080, 0x4c84: 0x0080, 0x4c85: 0x0080, + 0x4c86: 0x0080, 0x4c87: 0x0080, 0x4c88: 0x0080, 0x4c89: 0x0080, 0x4c8a: 0x0080, 0x4c8b: 0x0080, + 0x4c8c: 0x0080, 0x4c8d: 0x0080, 0x4c8e: 0x0080, 0x4c8f: 0x0080, 0x4c91: 0x0080, + 0x4c92: 0x0080, 0x4c93: 0x0080, 0x4c94: 0x0080, 0x4c95: 0x0080, 0x4c96: 0x0080, 0x4c97: 0x0080, + 0x4c98: 0x0080, 0x4c99: 0x0080, 0x4c9a: 0x0080, 0x4c9b: 0x0080, 0x4c9c: 0x0080, 0x4c9d: 0x0080, + 0x4c9e: 0x0080, 0x4c9f: 0x0080, 0x4ca0: 0x0080, 0x4ca1: 0x0080, 0x4ca2: 0x0080, 0x4ca3: 0x0080, + 0x4ca4: 0x0080, 0x4ca5: 0x0080, 0x4ca6: 0x0080, 0x4ca7: 0x0080, 0x4ca8: 0x0080, 0x4ca9: 0x0080, + 0x4caa: 0x0080, 0x4cab: 0x0080, 0x4cac: 0x0080, 0x4cad: 0x0080, 0x4cae: 0x0080, 0x4caf: 0x0080, + 0x4cb0: 0x0080, 0x4cb1: 0x0080, 0x4cb2: 0x0080, 0x4cb3: 0x0080, 0x4cb4: 0x0080, 0x4cb5: 0x0080, + // Block 0x133, offset 0x4cc0 + 0x4cc0: 0x0080, 0x4cc1: 0x0080, 0x4cc2: 0x0080, 0x4cc3: 0x0080, 0x4cc4: 0x0080, 0x4cc5: 0x0080, + 0x4cc6: 0x0080, 0x4cc7: 0x0080, 0x4cc8: 0x0080, 0x4cc9: 0x0080, 0x4cca: 0x0080, 0x4ccb: 0x0080, + 0x4ccc: 0x0080, 0x4cd0: 0x0080, 0x4cd1: 0x0080, + 0x4cd2: 0x0080, 0x4cd3: 0x0080, 0x4cd4: 0x0080, 0x4cd5: 0x0080, 0x4cd6: 0x0080, 0x4cd7: 0x0080, + 0x4cd8: 0x0080, 0x4cd9: 0x0080, 0x4cda: 0x0080, 0x4cdb: 0x0080, 0x4cdc: 0x0080, 0x4cdd: 0x0080, + 0x4cde: 0x0080, 0x4cdf: 0x0080, 0x4ce0: 0x0080, 0x4ce1: 0x0080, 0x4ce2: 0x0080, 0x4ce3: 0x0080, + 0x4ce4: 0x0080, 0x4ce5: 0x0080, 0x4ce6: 0x0080, 0x4ce7: 0x0080, 0x4ce8: 0x0080, 0x4ce9: 0x0080, + 0x4cea: 0x0080, 0x4ceb: 0x0080, 0x4cec: 0x0080, 0x4ced: 0x0080, 0x4cee: 0x0080, + 0x4cf0: 0x0080, 0x4cf1: 0x0080, 0x4cf2: 0x0080, 0x4cf3: 0x0080, 0x4cf4: 0x0080, 0x4cf5: 0x0080, + 0x4cf6: 0x0080, 0x4cf7: 0x0080, 0x4cf8: 0x0080, 0x4cf9: 0x0080, 0x4cfa: 0x0080, 0x4cfb: 0x0080, + 0x4cfc: 0x0080, 0x4cfd: 0x0080, 0x4cfe: 0x0080, 0x4cff: 0x0080, + // Block 0x134, offset 0x4d00 + 0x4d00: 0x0080, 0x4d01: 0x0080, 0x4d02: 0x0080, 0x4d03: 0x0080, 0x4d04: 0x0080, 0x4d05: 0x0080, + 0x4d06: 0x0080, 0x4d07: 0x0080, 0x4d08: 0x0080, 0x4d09: 0x0080, 0x4d0a: 0x0080, 0x4d0b: 0x0080, + 0x4d0c: 0x0080, 0x4d0d: 0x0080, 0x4d0e: 0x0080, 0x4d0f: 0x0080, 0x4d10: 0x0080, 0x4d11: 0x0080, + 0x4d12: 0x0080, 0x4d13: 0x0080, 0x4d14: 0x0080, 0x4d15: 0x0080, 0x4d16: 0x0080, 0x4d17: 0x0080, + 0x4d18: 0x0080, 0x4d19: 0x0080, 0x4d1a: 0x0080, 0x4d1b: 0x0080, 0x4d1c: 0x0080, 0x4d1d: 0x0080, + 0x4d1e: 0x0080, 0x4d1f: 0x0080, 0x4d20: 0x0080, 0x4d21: 0x0080, 0x4d22: 0x0080, 0x4d23: 0x0080, + 0x4d24: 0x0080, 0x4d25: 0x0080, 0x4d26: 0x0080, 0x4d27: 0x0080, 0x4d28: 0x0080, 0x4d29: 0x0080, + 0x4d2a: 0x0080, 0x4d2b: 0x0080, 0x4d2c: 0x0080, + // Block 0x135, offset 0x4d40 + 0x4d66: 0x0080, 0x4d67: 0x0080, 0x4d68: 0x0080, 0x4d69: 0x0080, + 0x4d6a: 0x0080, 0x4d6b: 0x0080, 0x4d6c: 0x0080, 0x4d6d: 0x0080, 0x4d6e: 0x0080, 0x4d6f: 0x0080, + 0x4d70: 0x0080, 0x4d71: 0x0080, 0x4d72: 0x0080, 0x4d73: 0x0080, 0x4d74: 0x0080, 0x4d75: 0x0080, + 0x4d76: 0x0080, 0x4d77: 0x0080, 0x4d78: 0x0080, 0x4d79: 0x0080, 0x4d7a: 0x0080, 0x4d7b: 0x0080, + 0x4d7c: 0x0080, 0x4d7d: 0x0080, 0x4d7e: 0x0080, 0x4d7f: 0x0080, + // Block 0x136, offset 0x4d80 + 0x4d80: 0x008c, 0x4d81: 0x0080, 0x4d82: 0x0080, + 0x4d90: 0x0080, 0x4d91: 0x0080, + 0x4d92: 0x0080, 0x4d93: 0x0080, 0x4d94: 0x0080, 0x4d95: 0x0080, 0x4d96: 0x0080, 0x4d97: 0x0080, + 0x4d98: 0x0080, 0x4d99: 0x0080, 0x4d9a: 0x0080, 0x4d9b: 0x0080, 0x4d9c: 0x0080, 0x4d9d: 0x0080, + 0x4d9e: 0x0080, 0x4d9f: 0x0080, 0x4da0: 0x0080, 0x4da1: 0x0080, 0x4da2: 0x0080, 0x4da3: 0x0080, + 0x4da4: 0x0080, 0x4da5: 0x0080, 0x4da6: 0x0080, 0x4da7: 0x0080, 0x4da8: 0x0080, 0x4da9: 0x0080, + 0x4daa: 0x0080, 0x4dab: 0x0080, 0x4dac: 0x0080, 0x4dad: 0x0080, 0x4dae: 0x0080, 0x4daf: 0x0080, + 0x4db0: 0x0080, 0x4db1: 0x0080, 0x4db2: 0x0080, 0x4db3: 0x0080, 0x4db4: 0x0080, 0x4db5: 0x0080, + 0x4db6: 0x0080, 0x4db7: 0x0080, 0x4db8: 0x0080, 0x4db9: 0x0080, 0x4dba: 0x0080, 0x4dbb: 0x0080, + // Block 0x137, offset 0x4dc0 + 0x4dc0: 0x0080, 0x4dc1: 0x0080, 0x4dc2: 0x0080, 0x4dc3: 0x0080, 0x4dc4: 0x0080, 0x4dc5: 0x0080, + 0x4dc6: 0x0080, 0x4dc7: 0x0080, 0x4dc8: 0x0080, + 0x4dd0: 0x0080, 0x4dd1: 0x0080, + 0x4de0: 0x0080, 0x4de1: 0x0080, 0x4de2: 0x0080, 0x4de3: 0x0080, + 0x4de4: 0x0080, 0x4de5: 0x0080, + // Block 0x138, offset 0x4e00 + 0x4e00: 0x0080, 0x4e01: 0x0080, 0x4e02: 0x0080, 0x4e03: 0x0080, 0x4e04: 0x0080, 0x4e05: 0x0080, + 0x4e06: 0x0080, 0x4e07: 0x0080, 0x4e08: 0x0080, 0x4e09: 0x0080, 0x4e0a: 0x0080, 0x4e0b: 0x0080, + 0x4e0c: 0x0080, 0x4e0d: 0x0080, 0x4e0e: 0x0080, 0x4e0f: 0x0080, 0x4e10: 0x0080, 0x4e11: 0x0080, + 0x4e12: 0x0080, 0x4e13: 0x0080, 0x4e14: 0x0080, + 0x4e20: 0x0080, 0x4e21: 0x0080, 0x4e22: 0x0080, 0x4e23: 0x0080, + 0x4e24: 0x0080, 0x4e25: 0x0080, 0x4e26: 0x0080, 0x4e27: 0x0080, 0x4e28: 0x0080, 0x4e29: 0x0080, + 0x4e2a: 0x0080, 0x4e2b: 0x0080, 0x4e2c: 0x0080, + 0x4e30: 0x0080, 0x4e31: 0x0080, 0x4e32: 0x0080, 0x4e33: 0x0080, 0x4e34: 0x0080, 0x4e35: 0x0080, + 0x4e36: 0x0080, 0x4e37: 0x0080, 0x4e38: 0x0080, + // Block 0x139, offset 0x4e40 + 0x4e40: 0x0080, 0x4e41: 0x0080, 0x4e42: 0x0080, 0x4e43: 0x0080, 0x4e44: 0x0080, 0x4e45: 0x0080, + 0x4e46: 0x0080, 0x4e47: 0x0080, 0x4e48: 0x0080, 0x4e49: 0x0080, 0x4e4a: 0x0080, 0x4e4b: 0x0080, + 0x4e4c: 0x0080, 0x4e4d: 0x0080, 0x4e4e: 0x0080, 0x4e4f: 0x0080, 0x4e50: 0x0080, 0x4e51: 0x0080, + 0x4e52: 0x0080, 0x4e53: 0x0080, 0x4e54: 0x0080, 0x4e55: 0x0080, 0x4e56: 0x0080, 0x4e57: 0x0080, + 0x4e58: 0x0080, 0x4e59: 0x0080, 0x4e5a: 0x0080, 0x4e5b: 0x0080, 0x4e5c: 0x0080, 0x4e5d: 0x0080, + 0x4e5e: 0x0080, 0x4e5f: 0x0080, 0x4e60: 0x0080, 0x4e61: 0x0080, 0x4e62: 0x0080, 0x4e63: 0x0080, + 0x4e64: 0x0080, 0x4e65: 0x0080, 0x4e66: 0x0080, 0x4e67: 0x0080, 0x4e68: 0x0080, 0x4e69: 0x0080, + 0x4e6a: 0x0080, 0x4e6b: 0x0080, 0x4e6c: 0x0080, 0x4e6d: 0x0080, 0x4e6e: 0x0080, 0x4e6f: 0x0080, + 0x4e70: 0x0080, 0x4e71: 0x0080, 0x4e72: 0x0080, 0x4e73: 0x0080, + // Block 0x13a, offset 0x4e80 + 0x4e80: 0x0080, 0x4e81: 0x0080, 0x4e82: 0x0080, 0x4e83: 0x0080, 0x4e84: 0x0080, 0x4e85: 0x0080, + 0x4e86: 0x0080, 0x4e87: 0x0080, 0x4e88: 0x0080, 0x4e89: 0x0080, 0x4e8a: 0x0080, 0x4e8b: 0x0080, + 0x4e8c: 0x0080, 0x4e8d: 0x0080, 0x4e8e: 0x0080, 0x4e8f: 0x0080, 0x4e90: 0x0080, 0x4e91: 0x0080, + 0x4e92: 0x0080, 0x4e93: 0x0080, 0x4e94: 0x0080, + // Block 0x13b, offset 0x4ec0 + 0x4ec0: 0x0080, 0x4ec1: 0x0080, 0x4ec2: 0x0080, 0x4ec3: 0x0080, 0x4ec4: 0x0080, 0x4ec5: 0x0080, + 0x4ec6: 0x0080, 0x4ec7: 0x0080, 0x4ec8: 0x0080, 0x4ec9: 0x0080, 0x4eca: 0x0080, 0x4ecb: 0x0080, + 0x4ed0: 0x0080, 0x4ed1: 0x0080, + 0x4ed2: 0x0080, 0x4ed3: 0x0080, 0x4ed4: 0x0080, 0x4ed5: 0x0080, 0x4ed6: 0x0080, 0x4ed7: 0x0080, + 0x4ed8: 0x0080, 0x4ed9: 0x0080, 0x4eda: 0x0080, 0x4edb: 0x0080, 0x4edc: 0x0080, 0x4edd: 0x0080, + 0x4ede: 0x0080, 0x4edf: 0x0080, 0x4ee0: 0x0080, 0x4ee1: 0x0080, 0x4ee2: 0x0080, 0x4ee3: 0x0080, + 0x4ee4: 0x0080, 0x4ee5: 0x0080, 0x4ee6: 0x0080, 0x4ee7: 0x0080, 0x4ee8: 0x0080, 0x4ee9: 0x0080, + 0x4eea: 0x0080, 0x4eeb: 0x0080, 0x4eec: 0x0080, 0x4eed: 0x0080, 0x4eee: 0x0080, 0x4eef: 0x0080, + 0x4ef0: 0x0080, 0x4ef1: 0x0080, 0x4ef2: 0x0080, 0x4ef3: 0x0080, 0x4ef4: 0x0080, 0x4ef5: 0x0080, + 0x4ef6: 0x0080, 0x4ef7: 0x0080, 0x4ef8: 0x0080, 0x4ef9: 0x0080, 0x4efa: 0x0080, 0x4efb: 0x0080, + 0x4efc: 0x0080, 0x4efd: 0x0080, 0x4efe: 0x0080, 0x4eff: 0x0080, + // Block 0x13c, offset 0x4f00 + 0x4f00: 0x0080, 0x4f01: 0x0080, 0x4f02: 0x0080, 0x4f03: 0x0080, 0x4f04: 0x0080, 0x4f05: 0x0080, + 0x4f06: 0x0080, 0x4f07: 0x0080, + 0x4f10: 0x0080, 0x4f11: 0x0080, + 0x4f12: 0x0080, 0x4f13: 0x0080, 0x4f14: 0x0080, 0x4f15: 0x0080, 0x4f16: 0x0080, 0x4f17: 0x0080, + 0x4f18: 0x0080, 0x4f19: 0x0080, + 0x4f20: 0x0080, 0x4f21: 0x0080, 0x4f22: 0x0080, 0x4f23: 0x0080, + 0x4f24: 0x0080, 0x4f25: 0x0080, 0x4f26: 0x0080, 0x4f27: 0x0080, 0x4f28: 0x0080, 0x4f29: 0x0080, + 0x4f2a: 0x0080, 0x4f2b: 0x0080, 0x4f2c: 0x0080, 0x4f2d: 0x0080, 0x4f2e: 0x0080, 0x4f2f: 0x0080, + 0x4f30: 0x0080, 0x4f31: 0x0080, 0x4f32: 0x0080, 0x4f33: 0x0080, 0x4f34: 0x0080, 0x4f35: 0x0080, + 0x4f36: 0x0080, 0x4f37: 0x0080, 0x4f38: 0x0080, 0x4f39: 0x0080, 0x4f3a: 0x0080, 0x4f3b: 0x0080, + 0x4f3c: 0x0080, 0x4f3d: 0x0080, 0x4f3e: 0x0080, 0x4f3f: 0x0080, + // Block 0x13d, offset 0x4f40 + 0x4f40: 0x0080, 0x4f41: 0x0080, 0x4f42: 0x0080, 0x4f43: 0x0080, 0x4f44: 0x0080, 0x4f45: 0x0080, + 0x4f46: 0x0080, 0x4f47: 0x0080, + 0x4f50: 0x0080, 0x4f51: 0x0080, + 0x4f52: 0x0080, 0x4f53: 0x0080, 0x4f54: 0x0080, 0x4f55: 0x0080, 0x4f56: 0x0080, 0x4f57: 0x0080, + 0x4f58: 0x0080, 0x4f59: 0x0080, 0x4f5a: 0x0080, 0x4f5b: 0x0080, 0x4f5c: 0x0080, 0x4f5d: 0x0080, + 0x4f5e: 0x0080, 0x4f5f: 0x0080, 0x4f60: 0x0080, 0x4f61: 0x0080, 0x4f62: 0x0080, 0x4f63: 0x0080, + 0x4f64: 0x0080, 0x4f65: 0x0080, 0x4f66: 0x0080, 0x4f67: 0x0080, 0x4f68: 0x0080, 0x4f69: 0x0080, + 0x4f6a: 0x0080, 0x4f6b: 0x0080, 0x4f6c: 0x0080, 0x4f6d: 0x0080, + // Block 0x13e, offset 0x4f80 + 0x4f80: 0x0080, 0x4f81: 0x0080, 0x4f82: 0x0080, 0x4f83: 0x0080, 0x4f84: 0x0080, 0x4f85: 0x0080, + 0x4f86: 0x0080, 0x4f87: 0x0080, 0x4f88: 0x0080, 0x4f89: 0x0080, 0x4f8a: 0x0080, 0x4f8b: 0x0080, + 0x4f90: 0x0080, 0x4f91: 0x0080, + 0x4f92: 0x0080, 0x4f93: 0x0080, 0x4f94: 0x0080, 0x4f95: 0x0080, 0x4f96: 0x0080, 0x4f97: 0x0080, + 0x4f98: 0x0080, 0x4f99: 0x0080, 0x4f9a: 0x0080, 0x4f9b: 0x0080, 0x4f9c: 0x0080, 0x4f9d: 0x0080, + 0x4f9e: 0x0080, 0x4f9f: 0x0080, 0x4fa0: 0x0080, 0x4fa1: 0x0080, 0x4fa2: 0x0080, 0x4fa3: 0x0080, + 0x4fa4: 0x0080, 0x4fa5: 0x0080, 0x4fa6: 0x0080, 0x4fa7: 0x0080, 0x4fa8: 0x0080, 0x4fa9: 0x0080, + 0x4faa: 0x0080, 0x4fab: 0x0080, 0x4fac: 0x0080, 0x4fad: 0x0080, 0x4fae: 0x0080, 0x4faf: 0x0080, + 0x4fb0: 0x0080, 0x4fb1: 0x0080, 0x4fb2: 0x0080, 0x4fb3: 0x0080, 0x4fb4: 0x0080, 0x4fb5: 0x0080, + 0x4fb6: 0x0080, 0x4fb7: 0x0080, 0x4fb8: 0x0080, 0x4fb9: 0x0080, 0x4fba: 0x0080, 0x4fbb: 0x0080, + 0x4fbc: 0x0080, 0x4fbd: 0x0080, 0x4fbe: 0x0080, + // Block 0x13f, offset 0x4fc0 + 0x4fc0: 0x0080, 0x4fc1: 0x0080, 0x4fc2: 0x0080, 0x4fc3: 0x0080, 0x4fc4: 0x0080, 0x4fc5: 0x0080, + 0x4fc6: 0x0080, 0x4fc7: 0x0080, 0x4fc8: 0x0080, 0x4fc9: 0x0080, 0x4fca: 0x0080, 0x4fcb: 0x0080, + 0x4fcc: 0x0080, 0x4fd0: 0x0080, 0x4fd1: 0x0080, + 0x4fd2: 0x0080, 0x4fd3: 0x0080, 0x4fd4: 0x0080, 0x4fd5: 0x0080, 0x4fd6: 0x0080, 0x4fd7: 0x0080, + 0x4fd8: 0x0080, 0x4fd9: 0x0080, 0x4fda: 0x0080, 0x4fdb: 0x0080, 0x4fdc: 0x0080, 0x4fdd: 0x0080, + 0x4fde: 0x0080, 0x4fdf: 0x0080, 0x4fe0: 0x0080, 0x4fe1: 0x0080, 0x4fe2: 0x0080, 0x4fe3: 0x0080, + 0x4fe4: 0x0080, 0x4fe5: 0x0080, 0x4fe6: 0x0080, 0x4fe7: 0x0080, 0x4fe8: 0x0080, 0x4fe9: 0x0080, + 0x4fea: 0x0080, 0x4feb: 0x0080, + // Block 0x140, offset 0x5000 + 0x5000: 0x0080, 0x5001: 0x0080, 0x5002: 0x0080, 0x5003: 0x0080, 0x5004: 0x0080, 0x5005: 0x0080, + 0x5006: 0x0080, 0x5007: 0x0080, 0x5008: 0x0080, 0x5009: 0x0080, 0x500a: 0x0080, 0x500b: 0x0080, + 0x500c: 0x0080, 0x500d: 0x0080, 0x500e: 0x0080, 0x500f: 0x0080, 0x5010: 0x0080, 0x5011: 0x0080, + 0x5012: 0x0080, 0x5013: 0x0080, 0x5014: 0x0080, 0x5015: 0x0080, 0x5016: 0x0080, 0x5017: 0x0080, + // Block 0x141, offset 0x5040 + 0x5040: 0x0080, + 0x5050: 0x0080, 0x5051: 0x0080, + 0x5052: 0x0080, 0x5053: 0x0080, 0x5054: 0x0080, 0x5055: 0x0080, 0x5056: 0x0080, 0x5057: 0x0080, + 0x5058: 0x0080, 0x5059: 0x0080, 0x505a: 0x0080, 0x505b: 0x0080, 0x505c: 0x0080, 0x505d: 0x0080, + 0x505e: 0x0080, 0x505f: 0x0080, 0x5060: 0x0080, 0x5061: 0x0080, 0x5062: 0x0080, 0x5063: 0x0080, + 0x5064: 0x0080, 0x5065: 0x0080, 0x5066: 0x0080, + // Block 0x142, offset 0x5080 + 0x5080: 0x00cc, 0x5081: 0x00cc, 0x5082: 0x00cc, 0x5083: 0x00cc, 0x5084: 0x00cc, 0x5085: 0x00cc, + 0x5086: 0x00cc, 0x5087: 0x00cc, 0x5088: 0x00cc, 0x5089: 0x00cc, 0x508a: 0x00cc, 0x508b: 0x00cc, + 0x508c: 0x00cc, 0x508d: 0x00cc, 0x508e: 0x00cc, 0x508f: 0x00cc, 0x5090: 0x00cc, 0x5091: 0x00cc, + 0x5092: 0x00cc, 0x5093: 0x00cc, 0x5094: 0x00cc, 0x5095: 0x00cc, 0x5096: 0x00cc, + // Block 0x143, offset 0x50c0 + 0x50c0: 0x00cc, 0x50c1: 0x00cc, 0x50c2: 0x00cc, 0x50c3: 0x00cc, 0x50c4: 0x00cc, 0x50c5: 0x00cc, + 0x50c6: 0x00cc, 0x50c7: 0x00cc, 0x50c8: 0x00cc, 0x50c9: 0x00cc, 0x50ca: 0x00cc, 0x50cb: 0x00cc, + 0x50cc: 0x00cc, 0x50cd: 0x00cc, 0x50ce: 0x00cc, 0x50cf: 0x00cc, 0x50d0: 0x00cc, 0x50d1: 0x00cc, + 0x50d2: 0x00cc, 0x50d3: 0x00cc, 0x50d4: 0x00cc, 0x50d5: 0x00cc, 0x50d6: 0x00cc, 0x50d7: 0x00cc, + 0x50d8: 0x00cc, 0x50d9: 0x00cc, 0x50da: 0x00cc, 0x50db: 0x00cc, 0x50dc: 0x00cc, 0x50dd: 0x00cc, + 0x50de: 0x00cc, 0x50df: 0x00cc, 0x50e0: 0x00cc, 0x50e1: 0x00cc, 0x50e2: 0x00cc, 0x50e3: 0x00cc, + 0x50e4: 0x00cc, 0x50e5: 0x00cc, 0x50e6: 0x00cc, 0x50e7: 0x00cc, 0x50e8: 0x00cc, 0x50e9: 0x00cc, + 0x50ea: 0x00cc, 0x50eb: 0x00cc, 0x50ec: 0x00cc, 0x50ed: 0x00cc, 0x50ee: 0x00cc, 0x50ef: 0x00cc, + 0x50f0: 0x00cc, 0x50f1: 0x00cc, 0x50f2: 0x00cc, 0x50f3: 0x00cc, 0x50f4: 0x00cc, + // Block 0x144, offset 0x5100 + 0x5100: 0x00cc, 0x5101: 0x00cc, 0x5102: 0x00cc, 0x5103: 0x00cc, 0x5104: 0x00cc, 0x5105: 0x00cc, + 0x5106: 0x00cc, 0x5107: 0x00cc, 0x5108: 0x00cc, 0x5109: 0x00cc, 0x510a: 0x00cc, 0x510b: 0x00cc, + 0x510c: 0x00cc, 0x510d: 0x00cc, 0x510e: 0x00cc, 0x510f: 0x00cc, 0x5110: 0x00cc, 0x5111: 0x00cc, + 0x5112: 0x00cc, 0x5113: 0x00cc, 0x5114: 0x00cc, 0x5115: 0x00cc, 0x5116: 0x00cc, 0x5117: 0x00cc, + 0x5118: 0x00cc, 0x5119: 0x00cc, 0x511a: 0x00cc, 0x511b: 0x00cc, 0x511c: 0x00cc, 0x511d: 0x00cc, + 0x5120: 0x00cc, 0x5121: 0x00cc, 0x5122: 0x00cc, 0x5123: 0x00cc, + 0x5124: 0x00cc, 0x5125: 0x00cc, 0x5126: 0x00cc, 0x5127: 0x00cc, 0x5128: 0x00cc, 0x5129: 0x00cc, + 0x512a: 0x00cc, 0x512b: 0x00cc, 0x512c: 0x00cc, 0x512d: 0x00cc, 0x512e: 0x00cc, 0x512f: 0x00cc, + 0x5130: 0x00cc, 0x5131: 0x00cc, 0x5132: 0x00cc, 0x5133: 0x00cc, 0x5134: 0x00cc, 0x5135: 0x00cc, + 0x5136: 0x00cc, 0x5137: 0x00cc, 0x5138: 0x00cc, 0x5139: 0x00cc, 0x513a: 0x00cc, 0x513b: 0x00cc, + 0x513c: 0x00cc, 0x513d: 0x00cc, 0x513e: 0x00cc, 0x513f: 0x00cc, + // Block 0x145, offset 0x5140 + 0x5140: 0x00cc, 0x5141: 0x00cc, 0x5142: 0x00cc, 0x5143: 0x00cc, 0x5144: 0x00cc, 0x5145: 0x00cc, + 0x5146: 0x00cc, 0x5147: 0x00cc, 0x5148: 0x00cc, 0x5149: 0x00cc, 0x514a: 0x00cc, 0x514b: 0x00cc, + 0x514c: 0x00cc, 0x514d: 0x00cc, 0x514e: 0x00cc, 0x514f: 0x00cc, 0x5150: 0x00cc, 0x5151: 0x00cc, + 0x5152: 0x00cc, 0x5153: 0x00cc, 0x5154: 0x00cc, 0x5155: 0x00cc, 0x5156: 0x00cc, 0x5157: 0x00cc, + 0x5158: 0x00cc, 0x5159: 0x00cc, 0x515a: 0x00cc, 0x515b: 0x00cc, 0x515c: 0x00cc, 0x515d: 0x00cc, + 0x515e: 0x00cc, 0x515f: 0x00cc, 0x5160: 0x00cc, 0x5161: 0x00cc, + 0x5170: 0x00cc, 0x5171: 0x00cc, 0x5172: 0x00cc, 0x5173: 0x00cc, 0x5174: 0x00cc, 0x5175: 0x00cc, + 0x5176: 0x00cc, 0x5177: 0x00cc, 0x5178: 0x00cc, 0x5179: 0x00cc, 0x517a: 0x00cc, 0x517b: 0x00cc, + 0x517c: 0x00cc, 0x517d: 0x00cc, 0x517e: 0x00cc, 0x517f: 0x00cc, + // Block 0x146, offset 0x5180 + 0x5180: 0x00cc, 0x5181: 0x00cc, 0x5182: 0x00cc, 0x5183: 0x00cc, 0x5184: 0x00cc, 0x5185: 0x00cc, + 0x5186: 0x00cc, 0x5187: 0x00cc, 0x5188: 0x00cc, 0x5189: 0x00cc, 0x518a: 0x00cc, 0x518b: 0x00cc, + 0x518c: 0x00cc, 0x518d: 0x00cc, 0x518e: 0x00cc, 0x518f: 0x00cc, 0x5190: 0x00cc, 0x5191: 0x00cc, + 0x5192: 0x00cc, 0x5193: 0x00cc, 0x5194: 0x00cc, 0x5195: 0x00cc, 0x5196: 0x00cc, 0x5197: 0x00cc, + 0x5198: 0x00cc, 0x5199: 0x00cc, 0x519a: 0x00cc, 0x519b: 0x00cc, 0x519c: 0x00cc, 0x519d: 0x00cc, + 0x519e: 0x00cc, 0x519f: 0x00cc, 0x51a0: 0x00cc, + // Block 0x147, offset 0x51c0 + 0x51c0: 0x008c, 0x51c1: 0x008c, 0x51c2: 0x008c, 0x51c3: 0x008c, 0x51c4: 0x008c, 0x51c5: 0x008c, + 0x51c6: 0x008c, 0x51c7: 0x008c, 0x51c8: 0x008c, 0x51c9: 0x008c, 0x51ca: 0x008c, 0x51cb: 0x008c, + 0x51cc: 0x008c, 0x51cd: 0x008c, 0x51ce: 0x008c, 0x51cf: 0x008c, 0x51d0: 0x008c, 0x51d1: 0x008c, + 0x51d2: 0x008c, 0x51d3: 0x008c, 0x51d4: 0x008c, 0x51d5: 0x008c, 0x51d6: 0x008c, 0x51d7: 0x008c, + 0x51d8: 0x008c, 0x51d9: 0x008c, 0x51da: 0x008c, 0x51db: 0x008c, 0x51dc: 0x008c, 0x51dd: 0x008c, + // Block 0x148, offset 0x5200 + 0x5201: 0x0040, + 0x5220: 0x0040, 0x5221: 0x0040, 0x5222: 0x0040, 0x5223: 0x0040, + 0x5224: 0x0040, 0x5225: 0x0040, 0x5226: 0x0040, 0x5227: 0x0040, 0x5228: 0x0040, 0x5229: 0x0040, + 0x522a: 0x0040, 0x522b: 0x0040, 0x522c: 0x0040, 0x522d: 0x0040, 0x522e: 0x0040, 0x522f: 0x0040, + 0x5230: 0x0040, 0x5231: 0x0040, 0x5232: 0x0040, 0x5233: 0x0040, 0x5234: 0x0040, 0x5235: 0x0040, + 0x5236: 0x0040, 0x5237: 0x0040, 0x5238: 0x0040, 0x5239: 0x0040, 0x523a: 0x0040, 0x523b: 0x0040, + 0x523c: 0x0040, 0x523d: 0x0040, 0x523e: 0x0040, 0x523f: 0x0040, + // Block 0x149, offset 0x5240 + 0x5240: 0x0040, 0x5241: 0x0040, 0x5242: 0x0040, 0x5243: 0x0040, 0x5244: 0x0040, 0x5245: 0x0040, + 0x5246: 0x0040, 0x5247: 0x0040, 0x5248: 0x0040, 0x5249: 0x0040, 0x524a: 0x0040, 0x524b: 0x0040, + 0x524c: 0x0040, 0x524d: 0x0040, 0x524e: 0x0040, 0x524f: 0x0040, 0x5250: 0x0040, 0x5251: 0x0040, + 0x5252: 0x0040, 0x5253: 0x0040, 0x5254: 0x0040, 0x5255: 0x0040, 0x5256: 0x0040, 0x5257: 0x0040, + 0x5258: 0x0040, 0x5259: 0x0040, 0x525a: 0x0040, 0x525b: 0x0040, 0x525c: 0x0040, 0x525d: 0x0040, + 0x525e: 0x0040, 0x525f: 0x0040, 0x5260: 0x0040, 0x5261: 0x0040, 0x5262: 0x0040, 0x5263: 0x0040, + 0x5264: 0x0040, 0x5265: 0x0040, 0x5266: 0x0040, 0x5267: 0x0040, 0x5268: 0x0040, 0x5269: 0x0040, + 0x526a: 0x0040, 0x526b: 0x0040, 0x526c: 0x0040, 0x526d: 0x0040, 0x526e: 0x0040, 0x526f: 0x0040, + // Block 0x14a, offset 0x5280 + 0x5280: 0x0040, 0x5281: 0x0040, 0x5282: 0x0040, 0x5283: 0x0040, 0x5284: 0x0040, 0x5285: 0x0040, + 0x5286: 0x0040, 0x5287: 0x0040, 0x5288: 0x0040, 0x5289: 0x0040, 0x528a: 0x0040, 0x528b: 0x0040, + 0x528c: 0x0040, 0x528d: 0x0040, 0x528e: 0x0040, 0x528f: 0x0040, 0x5290: 0x0040, 0x5291: 0x0040, + 0x5292: 0x0040, 0x5293: 0x0040, 0x5294: 0x0040, 0x5295: 0x0040, 0x5296: 0x0040, 0x5297: 0x0040, + 0x5298: 0x0040, 0x5299: 0x0040, 0x529a: 0x0040, 0x529b: 0x0040, 0x529c: 0x0040, 0x529d: 0x0040, + 0x529e: 0x0040, 0x529f: 0x0040, 0x52a0: 0x0040, 0x52a1: 0x0040, 0x52a2: 0x0040, 0x52a3: 0x0040, + 0x52a4: 0x0040, 0x52a5: 0x0040, 0x52a6: 0x0040, 0x52a7: 0x0040, 0x52a8: 0x0040, 0x52a9: 0x0040, + 0x52aa: 0x0040, 0x52ab: 0x0040, 0x52ac: 0x0040, 0x52ad: 0x0040, 0x52ae: 0x0040, 0x52af: 0x0040, + 0x52b0: 0x0040, 0x52b1: 0x0040, 0x52b2: 0x0040, 0x52b3: 0x0040, 0x52b4: 0x0040, 0x52b5: 0x0040, + 0x52b6: 0x0040, 0x52b7: 0x0040, 0x52b8: 0x0040, 0x52b9: 0x0040, 0x52ba: 0x0040, 0x52bb: 0x0040, + 0x52bc: 0x0040, 0x52bd: 0x0040, +} + +// derivedPropertiesIndex: 37 blocks, 2368 entries, 4736 bytes +// Block 0 is the zero block. +var derivedPropertiesIndex = [2368]uint16{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x02, 0xc4: 0x03, 0xc5: 0x04, 0xc6: 0x05, 0xc7: 0x06, + 0xc8: 0x05, 0xc9: 0x05, 0xca: 0x07, 0xcb: 0x08, 0xcc: 0x09, 0xcd: 0x0a, 0xce: 0x0b, 0xcf: 0x0c, + 0xd0: 0x05, 0xd1: 0x05, 0xd2: 0x0d, 0xd3: 0x05, 0xd4: 0x0e, 0xd5: 0x0f, 0xd6: 0x10, 0xd7: 0x11, + 0xd8: 0x12, 0xd9: 0x13, 0xda: 0x14, 0xdb: 0x15, 0xdc: 0x16, 0xdd: 0x17, 0xde: 0x18, 0xdf: 0x19, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, 0xe5: 0x07, 0xe6: 0x07, 0xe7: 0x07, + 0xe8: 0x07, 0xe9: 0x08, 0xea: 0x09, 0xeb: 0x0a, 0xec: 0x0a, 0xed: 0x0b, 0xee: 0x0c, 0xef: 0x0d, + 0xf0: 0x1e, 0xf3: 0x21, 0xf4: 0x22, + // Block 0x4, offset 0x100 + 0x120: 0x1a, 0x121: 0x1b, 0x122: 0x1c, 0x123: 0x1d, 0x124: 0x1e, 0x125: 0x1f, 0x126: 0x20, 0x127: 0x21, + 0x128: 0x22, 0x129: 0x23, 0x12a: 0x24, 0x12b: 0x25, 0x12c: 0x26, 0x12d: 0x27, 0x12e: 0x28, 0x12f: 0x29, + 0x130: 0x2a, 0x131: 0x2b, 0x132: 0x2c, 0x133: 0x2d, 0x134: 0x2e, 0x135: 0x2f, 0x136: 0x30, 0x137: 0x31, + 0x138: 0x32, 0x139: 0x33, 0x13a: 0x34, 0x13b: 0x35, 0x13c: 0x36, 0x13d: 0x37, 0x13e: 0x38, 0x13f: 0x39, + // Block 0x5, offset 0x140 + 0x140: 0x3a, 0x141: 0x3b, 0x142: 0x3c, 0x143: 0x3d, 0x144: 0x3e, 0x145: 0x3e, 0x146: 0x3e, 0x147: 0x3e, + 0x148: 0x05, 0x149: 0x3f, 0x14a: 0x40, 0x14b: 0x41, 0x14c: 0x42, 0x14d: 0x43, 0x14e: 0x44, 0x14f: 0x45, + 0x150: 0x46, 0x151: 0x05, 0x152: 0x05, 0x153: 0x05, 0x154: 0x05, 0x155: 0x05, 0x156: 0x05, 0x157: 0x05, + 0x158: 0x05, 0x159: 0x47, 0x15a: 0x48, 0x15b: 0x49, 0x15c: 0x4a, 0x15d: 0x4b, 0x15e: 0x4c, 0x15f: 0x4d, + 0x160: 0x4e, 0x161: 0x4f, 0x162: 0x50, 0x163: 0x51, 0x164: 0x52, 0x165: 0x53, 0x166: 0x54, 0x167: 0x55, + 0x168: 0x56, 0x169: 0x57, 0x16a: 0x58, 0x16c: 0x59, 0x16d: 0x5a, 0x16e: 0x5b, 0x16f: 0x5c, + 0x170: 0x5d, 0x171: 0x5e, 0x172: 0x5f, 0x173: 0x60, 0x174: 0x61, 0x175: 0x62, 0x176: 0x63, 0x177: 0x64, + 0x178: 0x05, 0x179: 0x05, 0x17a: 0x65, 0x17b: 0x05, 0x17c: 0x66, 0x17d: 0x67, 0x17e: 0x68, 0x17f: 0x69, + // Block 0x6, offset 0x180 + 0x180: 0x6a, 0x181: 0x6b, 0x182: 0x6c, 0x183: 0x6d, 0x184: 0x6e, 0x185: 0x6f, 0x186: 0x70, 0x187: 0x71, + 0x188: 0x71, 0x189: 0x71, 0x18a: 0x71, 0x18b: 0x71, 0x18c: 0x71, 0x18d: 0x71, 0x18e: 0x71, 0x18f: 0x71, + 0x190: 0x72, 0x191: 0x73, 0x192: 0x71, 0x193: 0x71, 0x194: 0x71, 0x195: 0x71, 0x196: 0x71, 0x197: 0x71, + 0x198: 0x71, 0x199: 0x71, 0x19a: 0x71, 0x19b: 0x71, 0x19c: 0x71, 0x19d: 0x71, 0x19e: 0x71, 0x19f: 0x71, + 0x1a0: 0x71, 0x1a1: 0x71, 0x1a2: 0x71, 0x1a3: 0x71, 0x1a4: 0x71, 0x1a5: 0x71, 0x1a6: 0x71, 0x1a7: 0x71, + 0x1a8: 0x71, 0x1a9: 0x71, 0x1aa: 0x71, 0x1ab: 0x71, 0x1ac: 0x71, 0x1ad: 0x74, 0x1ae: 0x75, 0x1af: 0x76, + 0x1b0: 0x77, 0x1b1: 0x78, 0x1b2: 0x05, 0x1b3: 0x79, 0x1b4: 0x7a, 0x1b5: 0x7b, 0x1b6: 0x7c, 0x1b7: 0x7d, + 0x1b8: 0x7e, 0x1b9: 0x7f, 0x1ba: 0x80, 0x1bb: 0x81, 0x1bc: 0x82, 0x1bd: 0x82, 0x1be: 0x82, 0x1bf: 0x83, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x84, 0x1c1: 0x85, 0x1c2: 0x86, 0x1c3: 0x87, 0x1c4: 0x88, 0x1c5: 0x89, 0x1c6: 0x8a, 0x1c7: 0x8b, + 0x1c8: 0x8c, 0x1c9: 0x71, 0x1ca: 0x71, 0x1cb: 0x8d, 0x1cc: 0x82, 0x1cd: 0x8e, 0x1ce: 0x71, 0x1cf: 0x71, + 0x1d0: 0x8f, 0x1d1: 0x8f, 0x1d2: 0x8f, 0x1d3: 0x8f, 0x1d4: 0x8f, 0x1d5: 0x8f, 0x1d6: 0x8f, 0x1d7: 0x8f, + 0x1d8: 0x8f, 0x1d9: 0x8f, 0x1da: 0x8f, 0x1db: 0x8f, 0x1dc: 0x8f, 0x1dd: 0x8f, 0x1de: 0x8f, 0x1df: 0x8f, + 0x1e0: 0x8f, 0x1e1: 0x8f, 0x1e2: 0x8f, 0x1e3: 0x8f, 0x1e4: 0x8f, 0x1e5: 0x8f, 0x1e6: 0x8f, 0x1e7: 0x8f, + 0x1e8: 0x8f, 0x1e9: 0x8f, 0x1ea: 0x8f, 0x1eb: 0x8f, 0x1ec: 0x8f, 0x1ed: 0x8f, 0x1ee: 0x8f, 0x1ef: 0x8f, + 0x1f0: 0x8f, 0x1f1: 0x8f, 0x1f2: 0x8f, 0x1f3: 0x8f, 0x1f4: 0x8f, 0x1f5: 0x8f, 0x1f6: 0x8f, 0x1f7: 0x8f, + 0x1f8: 0x8f, 0x1f9: 0x8f, 0x1fa: 0x8f, 0x1fb: 0x8f, 0x1fc: 0x8f, 0x1fd: 0x8f, 0x1fe: 0x8f, 0x1ff: 0x8f, + // Block 0x8, offset 0x200 + 0x200: 0x8f, 0x201: 0x8f, 0x202: 0x8f, 0x203: 0x8f, 0x204: 0x8f, 0x205: 0x8f, 0x206: 0x8f, 0x207: 0x8f, + 0x208: 0x8f, 0x209: 0x8f, 0x20a: 0x8f, 0x20b: 0x8f, 0x20c: 0x8f, 0x20d: 0x8f, 0x20e: 0x8f, 0x20f: 0x8f, + 0x210: 0x8f, 0x211: 0x8f, 0x212: 0x8f, 0x213: 0x8f, 0x214: 0x8f, 0x215: 0x8f, 0x216: 0x8f, 0x217: 0x8f, + 0x218: 0x8f, 0x219: 0x8f, 0x21a: 0x8f, 0x21b: 0x8f, 0x21c: 0x8f, 0x21d: 0x8f, 0x21e: 0x8f, 0x21f: 0x8f, + 0x220: 0x8f, 0x221: 0x8f, 0x222: 0x8f, 0x223: 0x8f, 0x224: 0x8f, 0x225: 0x8f, 0x226: 0x8f, 0x227: 0x8f, + 0x228: 0x8f, 0x229: 0x8f, 0x22a: 0x8f, 0x22b: 0x8f, 0x22c: 0x8f, 0x22d: 0x8f, 0x22e: 0x8f, 0x22f: 0x8f, + 0x230: 0x8f, 0x231: 0x8f, 0x232: 0x8f, 0x233: 0x8f, 0x234: 0x8f, 0x235: 0x8f, 0x236: 0x90, 0x237: 0x71, + 0x238: 0x8f, 0x239: 0x8f, 0x23a: 0x8f, 0x23b: 0x8f, 0x23c: 0x8f, 0x23d: 0x8f, 0x23e: 0x8f, 0x23f: 0x8f, + // Block 0x9, offset 0x240 + 0x240: 0x8f, 0x241: 0x8f, 0x242: 0x8f, 0x243: 0x8f, 0x244: 0x8f, 0x245: 0x8f, 0x246: 0x8f, 0x247: 0x8f, + 0x248: 0x8f, 0x249: 0x8f, 0x24a: 0x8f, 0x24b: 0x8f, 0x24c: 0x8f, 0x24d: 0x8f, 0x24e: 0x8f, 0x24f: 0x8f, + 0x250: 0x8f, 0x251: 0x8f, 0x252: 0x8f, 0x253: 0x8f, 0x254: 0x8f, 0x255: 0x8f, 0x256: 0x8f, 0x257: 0x8f, + 0x258: 0x8f, 0x259: 0x8f, 0x25a: 0x8f, 0x25b: 0x8f, 0x25c: 0x8f, 0x25d: 0x8f, 0x25e: 0x8f, 0x25f: 0x8f, + 0x260: 0x8f, 0x261: 0x8f, 0x262: 0x8f, 0x263: 0x8f, 0x264: 0x8f, 0x265: 0x8f, 0x266: 0x8f, 0x267: 0x8f, + 0x268: 0x8f, 0x269: 0x8f, 0x26a: 0x8f, 0x26b: 0x8f, 0x26c: 0x8f, 0x26d: 0x8f, 0x26e: 0x8f, 0x26f: 0x8f, + 0x270: 0x8f, 0x271: 0x8f, 0x272: 0x8f, 0x273: 0x8f, 0x274: 0x8f, 0x275: 0x8f, 0x276: 0x8f, 0x277: 0x8f, + 0x278: 0x8f, 0x279: 0x8f, 0x27a: 0x8f, 0x27b: 0x8f, 0x27c: 0x8f, 0x27d: 0x8f, 0x27e: 0x8f, 0x27f: 0x8f, + // Block 0xa, offset 0x280 + 0x280: 0x8f, 0x281: 0x8f, 0x282: 0x8f, 0x283: 0x8f, 0x284: 0x8f, 0x285: 0x8f, 0x286: 0x8f, 0x287: 0x8f, + 0x288: 0x8f, 0x289: 0x8f, 0x28a: 0x8f, 0x28b: 0x8f, 0x28c: 0x8f, 0x28d: 0x8f, 0x28e: 0x8f, 0x28f: 0x8f, + 0x290: 0x8f, 0x291: 0x8f, 0x292: 0x8f, 0x293: 0x8f, 0x294: 0x8f, 0x295: 0x8f, 0x296: 0x8f, 0x297: 0x8f, + 0x298: 0x8f, 0x299: 0x8f, 0x29a: 0x8f, 0x29b: 0x8f, 0x29c: 0x8f, 0x29d: 0x8f, 0x29e: 0x8f, 0x29f: 0x8f, + 0x2a0: 0x8f, 0x2a1: 0x8f, 0x2a2: 0x8f, 0x2a3: 0x8f, 0x2a4: 0x8f, 0x2a5: 0x8f, 0x2a6: 0x8f, 0x2a7: 0x8f, + 0x2a8: 0x8f, 0x2a9: 0x8f, 0x2aa: 0x8f, 0x2ab: 0x8f, 0x2ac: 0x8f, 0x2ad: 0x8f, 0x2ae: 0x8f, 0x2af: 0x8f, + 0x2b0: 0x8f, 0x2b1: 0x8f, 0x2b2: 0x8f, 0x2b3: 0x8f, 0x2b4: 0x8f, 0x2b5: 0x8f, 0x2b6: 0x8f, 0x2b7: 0x8f, + 0x2b8: 0x8f, 0x2b9: 0x8f, 0x2ba: 0x8f, 0x2bb: 0x8f, 0x2bc: 0x8f, 0x2bd: 0x8f, 0x2be: 0x8f, 0x2bf: 0x91, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x05, 0x2c1: 0x05, 0x2c2: 0x05, 0x2c3: 0x05, 0x2c4: 0x05, 0x2c5: 0x05, 0x2c6: 0x05, 0x2c7: 0x05, + 0x2c8: 0x05, 0x2c9: 0x05, 0x2ca: 0x05, 0x2cb: 0x05, 0x2cc: 0x05, 0x2cd: 0x05, 0x2ce: 0x05, 0x2cf: 0x05, + 0x2d0: 0x05, 0x2d1: 0x05, 0x2d2: 0x92, 0x2d3: 0x93, 0x2d4: 0x05, 0x2d5: 0x05, 0x2d6: 0x05, 0x2d7: 0x05, + 0x2d8: 0x94, 0x2d9: 0x95, 0x2da: 0x96, 0x2db: 0x97, 0x2dc: 0x98, 0x2dd: 0x99, 0x2de: 0x9a, 0x2df: 0x9b, + 0x2e0: 0x9c, 0x2e1: 0x9d, 0x2e2: 0x05, 0x2e3: 0x9e, 0x2e4: 0x9f, 0x2e5: 0xa0, 0x2e6: 0xa1, 0x2e7: 0xa2, + 0x2e8: 0xa3, 0x2e9: 0xa4, 0x2ea: 0xa5, 0x2eb: 0xa6, 0x2ec: 0xa7, 0x2ed: 0xa8, 0x2ee: 0x05, 0x2ef: 0xa9, + 0x2f0: 0x05, 0x2f1: 0x05, 0x2f2: 0x05, 0x2f3: 0x05, 0x2f4: 0x05, 0x2f5: 0x05, 0x2f6: 0x05, 0x2f7: 0x05, + 0x2f8: 0x05, 0x2f9: 0x05, 0x2fa: 0x05, 0x2fb: 0x05, 0x2fc: 0x05, 0x2fd: 0x05, 0x2fe: 0x05, 0x2ff: 0x05, + // Block 0xc, offset 0x300 + 0x300: 0x05, 0x301: 0x05, 0x302: 0x05, 0x303: 0x05, 0x304: 0x05, 0x305: 0x05, 0x306: 0x05, 0x307: 0x05, + 0x308: 0x05, 0x309: 0x05, 0x30a: 0x05, 0x30b: 0x05, 0x30c: 0x05, 0x30d: 0x05, 0x30e: 0x05, 0x30f: 0x05, + 0x310: 0x05, 0x311: 0x05, 0x312: 0x05, 0x313: 0x05, 0x314: 0x05, 0x315: 0x05, 0x316: 0x05, 0x317: 0x05, + 0x318: 0x05, 0x319: 0x05, 0x31a: 0x05, 0x31b: 0x05, 0x31c: 0x05, 0x31d: 0x05, 0x31e: 0x05, 0x31f: 0x05, + 0x320: 0x05, 0x321: 0x05, 0x322: 0x05, 0x323: 0x05, 0x324: 0x05, 0x325: 0x05, 0x326: 0x05, 0x327: 0x05, + 0x328: 0x05, 0x329: 0x05, 0x32a: 0x05, 0x32b: 0x05, 0x32c: 0x05, 0x32d: 0x05, 0x32e: 0x05, 0x32f: 0x05, + 0x330: 0x05, 0x331: 0x05, 0x332: 0x05, 0x333: 0x05, 0x334: 0x05, 0x335: 0x05, 0x336: 0x05, 0x337: 0x05, + 0x338: 0x05, 0x339: 0x05, 0x33a: 0x05, 0x33b: 0x05, 0x33c: 0x05, 0x33d: 0x05, 0x33e: 0x05, 0x33f: 0x05, + // Block 0xd, offset 0x340 + 0x340: 0x05, 0x341: 0x05, 0x342: 0x05, 0x343: 0x05, 0x344: 0x05, 0x345: 0x05, 0x346: 0x05, 0x347: 0x05, + 0x348: 0x05, 0x349: 0x05, 0x34a: 0x05, 0x34b: 0x05, 0x34c: 0x05, 0x34d: 0x05, 0x34e: 0x05, 0x34f: 0x05, + 0x350: 0x05, 0x351: 0x05, 0x352: 0x05, 0x353: 0x05, 0x354: 0x05, 0x355: 0x05, 0x356: 0x05, 0x357: 0x05, + 0x358: 0x05, 0x359: 0x05, 0x35a: 0x05, 0x35b: 0x05, 0x35c: 0x05, 0x35d: 0x05, 0x35e: 0xaa, 0x35f: 0xab, + // Block 0xe, offset 0x380 + 0x380: 0x3e, 0x381: 0x3e, 0x382: 0x3e, 0x383: 0x3e, 0x384: 0x3e, 0x385: 0x3e, 0x386: 0x3e, 0x387: 0x3e, + 0x388: 0x3e, 0x389: 0x3e, 0x38a: 0x3e, 0x38b: 0x3e, 0x38c: 0x3e, 0x38d: 0x3e, 0x38e: 0x3e, 0x38f: 0x3e, + 0x390: 0x3e, 0x391: 0x3e, 0x392: 0x3e, 0x393: 0x3e, 0x394: 0x3e, 0x395: 0x3e, 0x396: 0x3e, 0x397: 0x3e, + 0x398: 0x3e, 0x399: 0x3e, 0x39a: 0x3e, 0x39b: 0x3e, 0x39c: 0x3e, 0x39d: 0x3e, 0x39e: 0x3e, 0x39f: 0x3e, + 0x3a0: 0x3e, 0x3a1: 0x3e, 0x3a2: 0x3e, 0x3a3: 0x3e, 0x3a4: 0x3e, 0x3a5: 0x3e, 0x3a6: 0x3e, 0x3a7: 0x3e, + 0x3a8: 0x3e, 0x3a9: 0x3e, 0x3aa: 0x3e, 0x3ab: 0x3e, 0x3ac: 0x3e, 0x3ad: 0x3e, 0x3ae: 0x3e, 0x3af: 0x3e, + 0x3b0: 0x3e, 0x3b1: 0x3e, 0x3b2: 0x3e, 0x3b3: 0x3e, 0x3b4: 0x3e, 0x3b5: 0x3e, 0x3b6: 0x3e, 0x3b7: 0x3e, + 0x3b8: 0x3e, 0x3b9: 0x3e, 0x3ba: 0x3e, 0x3bb: 0x3e, 0x3bc: 0x3e, 0x3bd: 0x3e, 0x3be: 0x3e, 0x3bf: 0x3e, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x3e, 0x3c1: 0x3e, 0x3c2: 0x3e, 0x3c3: 0x3e, 0x3c4: 0x3e, 0x3c5: 0x3e, 0x3c6: 0x3e, 0x3c7: 0x3e, + 0x3c8: 0x3e, 0x3c9: 0x3e, 0x3ca: 0x3e, 0x3cb: 0x3e, 0x3cc: 0x3e, 0x3cd: 0x3e, 0x3ce: 0x3e, 0x3cf: 0x3e, + 0x3d0: 0x3e, 0x3d1: 0x3e, 0x3d2: 0x3e, 0x3d3: 0x3e, 0x3d4: 0x3e, 0x3d5: 0x3e, 0x3d6: 0x3e, 0x3d7: 0x3e, + 0x3d8: 0x3e, 0x3d9: 0x3e, 0x3da: 0x3e, 0x3db: 0x3e, 0x3dc: 0x3e, 0x3dd: 0x3e, 0x3de: 0x3e, 0x3df: 0x3e, + 0x3e0: 0x3e, 0x3e1: 0x3e, 0x3e2: 0x3e, 0x3e3: 0x3e, 0x3e4: 0x82, 0x3e5: 0x82, 0x3e6: 0x82, 0x3e7: 0x82, + 0x3e8: 0xac, 0x3e9: 0xad, 0x3ea: 0x82, 0x3eb: 0xae, 0x3ec: 0xaf, 0x3ed: 0xb0, 0x3ee: 0x71, 0x3ef: 0xb1, + 0x3f0: 0x71, 0x3f1: 0x71, 0x3f2: 0x71, 0x3f3: 0x71, 0x3f4: 0x71, 0x3f5: 0xb2, 0x3f6: 0xb3, 0x3f7: 0xb4, + 0x3f8: 0xb5, 0x3f9: 0xb6, 0x3fa: 0x71, 0x3fb: 0xb7, 0x3fc: 0xb8, 0x3fd: 0xb9, 0x3fe: 0xba, 0x3ff: 0xbb, + // Block 0x10, offset 0x400 + 0x400: 0xbc, 0x401: 0xbd, 0x402: 0x05, 0x403: 0xbe, 0x404: 0xbf, 0x405: 0xc0, 0x406: 0xc1, 0x407: 0xc2, + 0x40a: 0xc3, 0x40b: 0xc4, 0x40c: 0xc5, 0x40d: 0xc6, 0x40e: 0xc7, 0x40f: 0xc8, + 0x410: 0x05, 0x411: 0x05, 0x412: 0xc9, 0x413: 0xca, 0x414: 0xcb, 0x415: 0xcc, + 0x418: 0x05, 0x419: 0x05, 0x41a: 0x05, 0x41b: 0x05, 0x41c: 0xcd, 0x41d: 0xce, + 0x420: 0xcf, 0x421: 0xd0, 0x422: 0xd1, 0x423: 0xd2, 0x424: 0xd3, 0x426: 0xd4, 0x427: 0xb3, + 0x428: 0xd5, 0x429: 0xd6, 0x42a: 0xd7, 0x42b: 0xd8, 0x42c: 0xd9, 0x42d: 0xda, 0x42e: 0xdb, + 0x430: 0x05, 0x431: 0x5f, 0x432: 0xdc, 0x433: 0xdd, + 0x439: 0xde, + // Block 0x11, offset 0x440 + 0x440: 0xdf, 0x441: 0xe0, 0x442: 0xe1, 0x443: 0xe2, 0x444: 0xe3, 0x445: 0xe4, 0x446: 0xe5, 0x447: 0xe6, + 0x448: 0xe7, 0x44a: 0xe8, 0x44b: 0xe9, 0x44c: 0xea, 0x44d: 0xeb, + 0x450: 0xec, 0x451: 0xed, 0x452: 0xee, 0x453: 0xef, 0x456: 0xf0, 0x457: 0xf1, + 0x458: 0xf2, 0x459: 0xf3, 0x45a: 0xf4, 0x45b: 0xf5, 0x45c: 0xf6, + 0x462: 0xf7, 0x463: 0xf8, + 0x468: 0xf9, 0x469: 0xfa, 0x46a: 0xfb, 0x46b: 0xfc, + 0x470: 0xfd, 0x471: 0xfe, 0x472: 0xff, 0x474: 0x100, 0x475: 0x101, + // Block 0x12, offset 0x480 + 0x480: 0x05, 0x481: 0x05, 0x482: 0x05, 0x483: 0x05, 0x484: 0x05, 0x485: 0x05, 0x486: 0x05, 0x487: 0x05, + 0x488: 0x05, 0x489: 0x05, 0x48a: 0x05, 0x48b: 0x05, 0x48c: 0x05, 0x48d: 0x05, 0x48e: 0x102, + 0x490: 0x71, 0x491: 0x103, 0x492: 0x05, 0x493: 0x05, 0x494: 0x05, 0x495: 0x104, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x05, 0x4c1: 0x05, 0x4c2: 0x05, 0x4c3: 0x05, 0x4c4: 0x05, 0x4c5: 0x05, 0x4c6: 0x05, 0x4c7: 0x05, + 0x4c8: 0x05, 0x4c9: 0x05, 0x4ca: 0x05, 0x4cb: 0x05, 0x4cc: 0x05, 0x4cd: 0x05, 0x4ce: 0x05, 0x4cf: 0x05, + 0x4d0: 0x105, + // Block 0x14, offset 0x500 + 0x510: 0x05, 0x511: 0x05, 0x512: 0x05, 0x513: 0x05, 0x514: 0x05, 0x515: 0x05, 0x516: 0x05, 0x517: 0x05, + 0x518: 0x05, 0x519: 0x106, + // Block 0x15, offset 0x540 + 0x560: 0x05, 0x561: 0x05, 0x562: 0x05, 0x563: 0x05, 0x564: 0x05, 0x565: 0x05, 0x566: 0x05, 0x567: 0x05, + 0x568: 0xfc, 0x569: 0x107, 0x56b: 0x108, 0x56c: 0x109, 0x56d: 0x10a, 0x56e: 0x10b, + 0x57c: 0x05, 0x57d: 0x10c, 0x57e: 0x10d, 0x57f: 0x10e, + // Block 0x16, offset 0x580 + 0x580: 0x05, 0x581: 0x05, 0x582: 0x05, 0x583: 0x05, 0x584: 0x05, 0x585: 0x05, 0x586: 0x05, 0x587: 0x05, + 0x588: 0x05, 0x589: 0x05, 0x58a: 0x05, 0x58b: 0x05, 0x58c: 0x05, 0x58d: 0x05, 0x58e: 0x05, 0x58f: 0x05, + 0x590: 0x05, 0x591: 0x05, 0x592: 0x05, 0x593: 0x05, 0x594: 0x05, 0x595: 0x05, 0x596: 0x05, 0x597: 0x05, + 0x598: 0x05, 0x599: 0x05, 0x59a: 0x05, 0x59b: 0x05, 0x59c: 0x05, 0x59d: 0x05, 0x59e: 0x05, 0x59f: 0x10f, + 0x5a0: 0x05, 0x5a1: 0x05, 0x5a2: 0x05, 0x5a3: 0x05, 0x5a4: 0x05, 0x5a5: 0x05, 0x5a6: 0x05, 0x5a7: 0x05, + 0x5a8: 0x05, 0x5a9: 0x05, 0x5aa: 0x05, 0x5ab: 0xdc, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x8f, 0x5c1: 0x8f, 0x5c2: 0x8f, 0x5c3: 0x8f, 0x5c4: 0x110, 0x5c5: 0x111, 0x5c6: 0x05, 0x5c7: 0x05, + 0x5c8: 0x05, 0x5c9: 0x05, 0x5ca: 0x05, 0x5cb: 0x112, + 0x5f0: 0x05, 0x5f1: 0x113, 0x5f2: 0x114, + // Block 0x18, offset 0x600 + 0x600: 0x71, 0x601: 0x71, 0x602: 0x71, 0x603: 0x115, 0x604: 0x116, 0x605: 0x117, 0x606: 0x118, 0x607: 0x119, + 0x608: 0xc0, 0x609: 0x11a, 0x60c: 0x71, 0x60d: 0x11b, + 0x610: 0x71, 0x611: 0x11c, 0x612: 0x11d, 0x613: 0x11e, 0x614: 0x11f, 0x615: 0x120, 0x616: 0x71, 0x617: 0x71, + 0x618: 0x71, 0x619: 0x71, 0x61a: 0x121, 0x61b: 0x71, 0x61c: 0x71, 0x61d: 0x71, 0x61e: 0x71, 0x61f: 0x122, + 0x620: 0x71, 0x621: 0x71, 0x622: 0x71, 0x623: 0x71, 0x624: 0x71, 0x625: 0x71, 0x626: 0x71, 0x627: 0x71, + 0x628: 0x123, 0x629: 0x124, 0x62a: 0x125, + // Block 0x19, offset 0x640 + 0x640: 0x126, + 0x660: 0x05, 0x661: 0x05, 0x662: 0x05, 0x663: 0x127, 0x664: 0x128, 0x665: 0x129, + 0x678: 0x12a, 0x679: 0x12b, 0x67a: 0x12c, 0x67b: 0x12d, + // Block 0x1a, offset 0x680 + 0x680: 0x12e, 0x681: 0x71, 0x682: 0x12f, 0x683: 0x130, 0x684: 0x131, 0x685: 0x12e, 0x686: 0x132, 0x687: 0x133, + 0x688: 0x134, 0x689: 0x135, 0x68c: 0x71, 0x68d: 0x71, 0x68e: 0x71, 0x68f: 0x71, + 0x690: 0x71, 0x691: 0x71, 0x692: 0x71, 0x693: 0x71, 0x694: 0x71, 0x695: 0x71, 0x696: 0x71, 0x697: 0x71, + 0x698: 0x71, 0x699: 0x71, 0x69a: 0x71, 0x69b: 0x136, 0x69c: 0x71, 0x69d: 0x137, 0x69e: 0x71, 0x69f: 0x138, + 0x6a0: 0x139, 0x6a1: 0x13a, 0x6a2: 0x13b, 0x6a4: 0x13c, 0x6a5: 0x13d, 0x6a6: 0x13e, 0x6a7: 0x13f, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x8f, 0x6c1: 0x8f, 0x6c2: 0x8f, 0x6c3: 0x8f, 0x6c4: 0x8f, 0x6c5: 0x8f, 0x6c6: 0x8f, 0x6c7: 0x8f, + 0x6c8: 0x8f, 0x6c9: 0x8f, 0x6ca: 0x8f, 0x6cb: 0x8f, 0x6cc: 0x8f, 0x6cd: 0x8f, 0x6ce: 0x8f, 0x6cf: 0x8f, + 0x6d0: 0x8f, 0x6d1: 0x8f, 0x6d2: 0x8f, 0x6d3: 0x8f, 0x6d4: 0x8f, 0x6d5: 0x8f, 0x6d6: 0x8f, 0x6d7: 0x8f, + 0x6d8: 0x8f, 0x6d9: 0x8f, 0x6da: 0x8f, 0x6db: 0x140, 0x6dc: 0x8f, 0x6dd: 0x8f, 0x6de: 0x8f, 0x6df: 0x8f, + 0x6e0: 0x8f, 0x6e1: 0x8f, 0x6e2: 0x8f, 0x6e3: 0x8f, 0x6e4: 0x8f, 0x6e5: 0x8f, 0x6e6: 0x8f, 0x6e7: 0x8f, + 0x6e8: 0x8f, 0x6e9: 0x8f, 0x6ea: 0x8f, 0x6eb: 0x8f, 0x6ec: 0x8f, 0x6ed: 0x8f, 0x6ee: 0x8f, 0x6ef: 0x8f, + 0x6f0: 0x8f, 0x6f1: 0x8f, 0x6f2: 0x8f, 0x6f3: 0x8f, 0x6f4: 0x8f, 0x6f5: 0x8f, 0x6f6: 0x8f, 0x6f7: 0x8f, + 0x6f8: 0x8f, 0x6f9: 0x8f, 0x6fa: 0x8f, 0x6fb: 0x8f, 0x6fc: 0x8f, 0x6fd: 0x8f, 0x6fe: 0x8f, 0x6ff: 0x8f, + // Block 0x1c, offset 0x700 + 0x700: 0x8f, 0x701: 0x8f, 0x702: 0x8f, 0x703: 0x8f, 0x704: 0x8f, 0x705: 0x8f, 0x706: 0x8f, 0x707: 0x8f, + 0x708: 0x8f, 0x709: 0x8f, 0x70a: 0x8f, 0x70b: 0x8f, 0x70c: 0x8f, 0x70d: 0x8f, 0x70e: 0x8f, 0x70f: 0x8f, + 0x710: 0x8f, 0x711: 0x8f, 0x712: 0x8f, 0x713: 0x8f, 0x714: 0x8f, 0x715: 0x8f, 0x716: 0x8f, 0x717: 0x8f, + 0x718: 0x8f, 0x719: 0x8f, 0x71a: 0x8f, 0x71b: 0x8f, 0x71c: 0x141, 0x71d: 0x8f, 0x71e: 0x8f, 0x71f: 0x8f, + 0x720: 0x142, 0x721: 0x8f, 0x722: 0x8f, 0x723: 0x8f, 0x724: 0x8f, 0x725: 0x8f, 0x726: 0x8f, 0x727: 0x8f, + 0x728: 0x8f, 0x729: 0x8f, 0x72a: 0x8f, 0x72b: 0x8f, 0x72c: 0x8f, 0x72d: 0x8f, 0x72e: 0x8f, 0x72f: 0x8f, + 0x730: 0x8f, 0x731: 0x8f, 0x732: 0x8f, 0x733: 0x8f, 0x734: 0x8f, 0x735: 0x8f, 0x736: 0x8f, 0x737: 0x8f, + 0x738: 0x8f, 0x739: 0x8f, 0x73a: 0x8f, 0x73b: 0x8f, 0x73c: 0x8f, 0x73d: 0x8f, 0x73e: 0x8f, 0x73f: 0x8f, + // Block 0x1d, offset 0x740 + 0x740: 0x8f, 0x741: 0x8f, 0x742: 0x8f, 0x743: 0x8f, 0x744: 0x8f, 0x745: 0x8f, 0x746: 0x8f, 0x747: 0x8f, + 0x748: 0x8f, 0x749: 0x8f, 0x74a: 0x8f, 0x74b: 0x8f, 0x74c: 0x8f, 0x74d: 0x8f, 0x74e: 0x8f, 0x74f: 0x8f, + 0x750: 0x8f, 0x751: 0x8f, 0x752: 0x8f, 0x753: 0x8f, 0x754: 0x8f, 0x755: 0x8f, 0x756: 0x8f, 0x757: 0x8f, + 0x758: 0x8f, 0x759: 0x8f, 0x75a: 0x8f, 0x75b: 0x8f, 0x75c: 0x8f, 0x75d: 0x8f, 0x75e: 0x8f, 0x75f: 0x8f, + 0x760: 0x8f, 0x761: 0x8f, 0x762: 0x8f, 0x763: 0x8f, 0x764: 0x8f, 0x765: 0x8f, 0x766: 0x8f, 0x767: 0x8f, + 0x768: 0x8f, 0x769: 0x8f, 0x76a: 0x8f, 0x76b: 0x8f, 0x76c: 0x8f, 0x76d: 0x8f, 0x76e: 0x8f, 0x76f: 0x8f, + 0x770: 0x8f, 0x771: 0x8f, 0x772: 0x8f, 0x773: 0x8f, 0x774: 0x8f, 0x775: 0x8f, 0x776: 0x8f, 0x777: 0x8f, + 0x778: 0x8f, 0x779: 0x8f, 0x77a: 0x143, 0x77b: 0x8f, 0x77c: 0x8f, 0x77d: 0x8f, 0x77e: 0x8f, 0x77f: 0x8f, + // Block 0x1e, offset 0x780 + 0x780: 0x8f, 0x781: 0x8f, 0x782: 0x8f, 0x783: 0x8f, 0x784: 0x8f, 0x785: 0x8f, 0x786: 0x8f, 0x787: 0x8f, + 0x788: 0x8f, 0x789: 0x8f, 0x78a: 0x8f, 0x78b: 0x8f, 0x78c: 0x8f, 0x78d: 0x8f, 0x78e: 0x8f, 0x78f: 0x8f, + 0x790: 0x8f, 0x791: 0x8f, 0x792: 0x8f, 0x793: 0x8f, 0x794: 0x8f, 0x795: 0x8f, 0x796: 0x8f, 0x797: 0x8f, + 0x798: 0x8f, 0x799: 0x8f, 0x79a: 0x8f, 0x79b: 0x8f, 0x79c: 0x8f, 0x79d: 0x8f, 0x79e: 0x8f, 0x79f: 0x8f, + 0x7a0: 0x8f, 0x7a1: 0x8f, 0x7a2: 0x8f, 0x7a3: 0x8f, 0x7a4: 0x8f, 0x7a5: 0x8f, 0x7a6: 0x8f, 0x7a7: 0x8f, + 0x7a8: 0x8f, 0x7a9: 0x8f, 0x7aa: 0x8f, 0x7ab: 0x8f, 0x7ac: 0x8f, 0x7ad: 0x8f, 0x7ae: 0x8f, 0x7af: 0x144, + // Block 0x1f, offset 0x7c0 + 0x7e0: 0x82, 0x7e1: 0x82, 0x7e2: 0x82, 0x7e3: 0x82, 0x7e4: 0x82, 0x7e5: 0x82, 0x7e6: 0x82, 0x7e7: 0x82, + 0x7e8: 0x145, + // Block 0x20, offset 0x800 + 0x810: 0x0e, 0x811: 0x0f, 0x812: 0x10, 0x813: 0x11, 0x814: 0x12, 0x816: 0x13, 0x817: 0x0a, + 0x818: 0x14, 0x81b: 0x15, 0x81d: 0x16, 0x81e: 0x17, 0x81f: 0x18, + 0x820: 0x07, 0x821: 0x07, 0x822: 0x07, 0x823: 0x07, 0x824: 0x07, 0x825: 0x07, 0x826: 0x07, 0x827: 0x07, + 0x828: 0x07, 0x829: 0x07, 0x82a: 0x19, 0x82b: 0x1a, 0x82c: 0x1b, 0x82d: 0x07, 0x82e: 0x1c, 0x82f: 0x1d, + // Block 0x21, offset 0x840 + 0x840: 0x146, 0x841: 0x3e, 0x844: 0x3e, 0x845: 0x3e, 0x846: 0x3e, 0x847: 0x147, + // Block 0x22, offset 0x880 + 0x880: 0x3e, 0x881: 0x3e, 0x882: 0x3e, 0x883: 0x3e, 0x884: 0x3e, 0x885: 0x3e, 0x886: 0x3e, 0x887: 0x3e, + 0x888: 0x3e, 0x889: 0x3e, 0x88a: 0x3e, 0x88b: 0x3e, 0x88c: 0x3e, 0x88d: 0x3e, 0x88e: 0x3e, 0x88f: 0x3e, + 0x890: 0x3e, 0x891: 0x3e, 0x892: 0x3e, 0x893: 0x3e, 0x894: 0x3e, 0x895: 0x3e, 0x896: 0x3e, 0x897: 0x3e, + 0x898: 0x3e, 0x899: 0x3e, 0x89a: 0x3e, 0x89b: 0x3e, 0x89c: 0x3e, 0x89d: 0x3e, 0x89e: 0x3e, 0x89f: 0x3e, + 0x8a0: 0x3e, 0x8a1: 0x3e, 0x8a2: 0x3e, 0x8a3: 0x3e, 0x8a4: 0x3e, 0x8a5: 0x3e, 0x8a6: 0x3e, 0x8a7: 0x3e, + 0x8a8: 0x3e, 0x8a9: 0x3e, 0x8aa: 0x3e, 0x8ab: 0x3e, 0x8ac: 0x3e, 0x8ad: 0x3e, 0x8ae: 0x3e, 0x8af: 0x3e, + 0x8b0: 0x3e, 0x8b1: 0x3e, 0x8b2: 0x3e, 0x8b3: 0x3e, 0x8b4: 0x3e, 0x8b5: 0x3e, 0x8b6: 0x3e, 0x8b7: 0x3e, + 0x8b8: 0x3e, 0x8b9: 0x3e, 0x8ba: 0x3e, 0x8bb: 0x3e, 0x8bc: 0x3e, 0x8bd: 0x3e, 0x8be: 0x3e, 0x8bf: 0x148, + // Block 0x23, offset 0x8c0 + 0x8e0: 0x1f, + 0x8f0: 0x0c, 0x8f1: 0x0c, 0x8f2: 0x0c, 0x8f3: 0x0c, 0x8f4: 0x0c, 0x8f5: 0x0c, 0x8f6: 0x0c, 0x8f7: 0x0c, + 0x8f8: 0x0c, 0x8f9: 0x0c, 0x8fa: 0x0c, 0x8fb: 0x0c, 0x8fc: 0x0c, 0x8fd: 0x0c, 0x8fe: 0x0c, 0x8ff: 0x20, + // Block 0x24, offset 0x900 + 0x900: 0x0c, 0x901: 0x0c, 0x902: 0x0c, 0x903: 0x0c, 0x904: 0x0c, 0x905: 0x0c, 0x906: 0x0c, 0x907: 0x0c, + 0x908: 0x0c, 0x909: 0x0c, 0x90a: 0x0c, 0x90b: 0x0c, 0x90c: 0x0c, 0x90d: 0x0c, 0x90e: 0x0c, 0x90f: 0x20, +} + +// Total table size 25920 bytes (25KiB); checksum: 811C9DC5 diff --git a/vendor/golang.org/x/text/secure/precis/tables9.0.0.go b/vendor/golang.org/x/text/secure/precis/tables9.0.0.go new file mode 100644 index 0000000..dacaf6a --- /dev/null +++ b/vendor/golang.org/x/text/secure/precis/tables9.0.0.go @@ -0,0 +1,3790 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// +build !go1.10 + +package precis + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "9.0.0" + +// 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 *derivedPropertiesTrie) lookup(s []byte) (v uint8, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return derivedPropertiesValues[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 := derivedPropertiesIndex[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 := derivedPropertiesIndex[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 = derivedPropertiesIndex[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 := derivedPropertiesIndex[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 = derivedPropertiesIndex[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 = derivedPropertiesIndex[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 *derivedPropertiesTrie) lookupUnsafe(s []byte) uint8 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return derivedPropertiesValues[c0] + } + i := derivedPropertiesIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = derivedPropertiesIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = derivedPropertiesIndex[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 *derivedPropertiesTrie) lookupString(s string) (v uint8, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return derivedPropertiesValues[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 := derivedPropertiesIndex[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 := derivedPropertiesIndex[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 = derivedPropertiesIndex[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 := derivedPropertiesIndex[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 = derivedPropertiesIndex[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 = derivedPropertiesIndex[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 *derivedPropertiesTrie) lookupStringUnsafe(s string) uint8 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return derivedPropertiesValues[c0] + } + i := derivedPropertiesIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = derivedPropertiesIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = derivedPropertiesIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// derivedPropertiesTrie. Total size: 25344 bytes (24.75 KiB). Checksum: c5b977d76d42d8a. +type derivedPropertiesTrie struct{} + +func newDerivedPropertiesTrie(i int) *derivedPropertiesTrie { + return &derivedPropertiesTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *derivedPropertiesTrie) lookupValue(n uint32, b byte) uint8 { + switch { + default: + return uint8(derivedPropertiesValues[n<<6+uint32(b)]) + } +} + +// derivedPropertiesValues: 324 blocks, 20736 entries, 20736 bytes +// The third block is the zero block. +var derivedPropertiesValues = [20736]uint8{ + // Block 0x0, offset 0x0 + 0x00: 0x0040, 0x01: 0x0040, 0x02: 0x0040, 0x03: 0x0040, 0x04: 0x0040, 0x05: 0x0040, + 0x06: 0x0040, 0x07: 0x0040, 0x08: 0x0040, 0x09: 0x0040, 0x0a: 0x0040, 0x0b: 0x0040, + 0x0c: 0x0040, 0x0d: 0x0040, 0x0e: 0x0040, 0x0f: 0x0040, 0x10: 0x0040, 0x11: 0x0040, + 0x12: 0x0040, 0x13: 0x0040, 0x14: 0x0040, 0x15: 0x0040, 0x16: 0x0040, 0x17: 0x0040, + 0x18: 0x0040, 0x19: 0x0040, 0x1a: 0x0040, 0x1b: 0x0040, 0x1c: 0x0040, 0x1d: 0x0040, + 0x1e: 0x0040, 0x1f: 0x0040, 0x20: 0x0080, 0x21: 0x00c0, 0x22: 0x00c0, 0x23: 0x00c0, + 0x24: 0x00c0, 0x25: 0x00c0, 0x26: 0x00c0, 0x27: 0x00c0, 0x28: 0x00c0, 0x29: 0x00c0, + 0x2a: 0x00c0, 0x2b: 0x00c0, 0x2c: 0x00c0, 0x2d: 0x00c0, 0x2e: 0x00c0, 0x2f: 0x00c0, + 0x30: 0x00c0, 0x31: 0x00c0, 0x32: 0x00c0, 0x33: 0x00c0, 0x34: 0x00c0, 0x35: 0x00c0, + 0x36: 0x00c0, 0x37: 0x00c0, 0x38: 0x00c0, 0x39: 0x00c0, 0x3a: 0x00c0, 0x3b: 0x00c0, + 0x3c: 0x00c0, 0x3d: 0x00c0, 0x3e: 0x00c0, 0x3f: 0x00c0, + // Block 0x1, offset 0x40 + 0x40: 0x00c0, 0x41: 0x00c0, 0x42: 0x00c0, 0x43: 0x00c0, 0x44: 0x00c0, 0x45: 0x00c0, + 0x46: 0x00c0, 0x47: 0x00c0, 0x48: 0x00c0, 0x49: 0x00c0, 0x4a: 0x00c0, 0x4b: 0x00c0, + 0x4c: 0x00c0, 0x4d: 0x00c0, 0x4e: 0x00c0, 0x4f: 0x00c0, 0x50: 0x00c0, 0x51: 0x00c0, + 0x52: 0x00c0, 0x53: 0x00c0, 0x54: 0x00c0, 0x55: 0x00c0, 0x56: 0x00c0, 0x57: 0x00c0, + 0x58: 0x00c0, 0x59: 0x00c0, 0x5a: 0x00c0, 0x5b: 0x00c0, 0x5c: 0x00c0, 0x5d: 0x00c0, + 0x5e: 0x00c0, 0x5f: 0x00c0, 0x60: 0x00c0, 0x61: 0x00c0, 0x62: 0x00c0, 0x63: 0x00c0, + 0x64: 0x00c0, 0x65: 0x00c0, 0x66: 0x00c0, 0x67: 0x00c0, 0x68: 0x00c0, 0x69: 0x00c0, + 0x6a: 0x00c0, 0x6b: 0x00c0, 0x6c: 0x00c7, 0x6d: 0x00c0, 0x6e: 0x00c0, 0x6f: 0x00c0, + 0x70: 0x00c0, 0x71: 0x00c0, 0x72: 0x00c0, 0x73: 0x00c0, 0x74: 0x00c0, 0x75: 0x00c0, + 0x76: 0x00c0, 0x77: 0x00c0, 0x78: 0x00c0, 0x79: 0x00c0, 0x7a: 0x00c0, 0x7b: 0x00c0, + 0x7c: 0x00c0, 0x7d: 0x00c0, 0x7e: 0x00c0, 0x7f: 0x0040, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc0: 0x0040, 0xc1: 0x0040, 0xc2: 0x0040, 0xc3: 0x0040, 0xc4: 0x0040, 0xc5: 0x0040, + 0xc6: 0x0040, 0xc7: 0x0040, 0xc8: 0x0040, 0xc9: 0x0040, 0xca: 0x0040, 0xcb: 0x0040, + 0xcc: 0x0040, 0xcd: 0x0040, 0xce: 0x0040, 0xcf: 0x0040, 0xd0: 0x0040, 0xd1: 0x0040, + 0xd2: 0x0040, 0xd3: 0x0040, 0xd4: 0x0040, 0xd5: 0x0040, 0xd6: 0x0040, 0xd7: 0x0040, + 0xd8: 0x0040, 0xd9: 0x0040, 0xda: 0x0040, 0xdb: 0x0040, 0xdc: 0x0040, 0xdd: 0x0040, + 0xde: 0x0040, 0xdf: 0x0040, 0xe0: 0x0080, 0xe1: 0x0080, 0xe2: 0x0080, 0xe3: 0x0080, + 0xe4: 0x0080, 0xe5: 0x0080, 0xe6: 0x0080, 0xe7: 0x0080, 0xe8: 0x0080, 0xe9: 0x0080, + 0xea: 0x0080, 0xeb: 0x0080, 0xec: 0x0080, 0xed: 0x0040, 0xee: 0x0080, 0xef: 0x0080, + 0xf0: 0x0080, 0xf1: 0x0080, 0xf2: 0x0080, 0xf3: 0x0080, 0xf4: 0x0080, 0xf5: 0x0080, + 0xf6: 0x0080, 0xf7: 0x004f, 0xf8: 0x0080, 0xf9: 0x0080, 0xfa: 0x0080, 0xfb: 0x0080, + 0xfc: 0x0080, 0xfd: 0x0080, 0xfe: 0x0080, 0xff: 0x0080, + // Block 0x4, offset 0x100 + 0x100: 0x00c0, 0x101: 0x00c0, 0x102: 0x00c0, 0x103: 0x00c0, 0x104: 0x00c0, 0x105: 0x00c0, + 0x106: 0x00c0, 0x107: 0x00c0, 0x108: 0x00c0, 0x109: 0x00c0, 0x10a: 0x00c0, 0x10b: 0x00c0, + 0x10c: 0x00c0, 0x10d: 0x00c0, 0x10e: 0x00c0, 0x10f: 0x00c0, 0x110: 0x00c0, 0x111: 0x00c0, + 0x112: 0x00c0, 0x113: 0x00c0, 0x114: 0x00c0, 0x115: 0x00c0, 0x116: 0x00c0, 0x117: 0x0080, + 0x118: 0x00c0, 0x119: 0x00c0, 0x11a: 0x00c0, 0x11b: 0x00c0, 0x11c: 0x00c0, 0x11d: 0x00c0, + 0x11e: 0x00c0, 0x11f: 0x00c0, 0x120: 0x00c0, 0x121: 0x00c0, 0x122: 0x00c0, 0x123: 0x00c0, + 0x124: 0x00c0, 0x125: 0x00c0, 0x126: 0x00c0, 0x127: 0x00c0, 0x128: 0x00c0, 0x129: 0x00c0, + 0x12a: 0x00c0, 0x12b: 0x00c0, 0x12c: 0x00c0, 0x12d: 0x00c0, 0x12e: 0x00c0, 0x12f: 0x00c0, + 0x130: 0x00c0, 0x131: 0x00c0, 0x132: 0x00c0, 0x133: 0x00c0, 0x134: 0x00c0, 0x135: 0x00c0, + 0x136: 0x00c0, 0x137: 0x0080, 0x138: 0x00c0, 0x139: 0x00c0, 0x13a: 0x00c0, 0x13b: 0x00c0, + 0x13c: 0x00c0, 0x13d: 0x00c0, 0x13e: 0x00c0, 0x13f: 0x00c0, + // Block 0x5, offset 0x140 + 0x140: 0x00c0, 0x141: 0x00c0, 0x142: 0x00c0, 0x143: 0x00c0, 0x144: 0x00c0, 0x145: 0x00c0, + 0x146: 0x00c0, 0x147: 0x00c0, 0x148: 0x00c0, 0x149: 0x00c0, 0x14a: 0x00c0, 0x14b: 0x00c0, + 0x14c: 0x00c0, 0x14d: 0x00c0, 0x14e: 0x00c0, 0x14f: 0x00c0, 0x150: 0x00c0, 0x151: 0x00c0, + 0x152: 0x00c0, 0x153: 0x00c0, 0x154: 0x00c0, 0x155: 0x00c0, 0x156: 0x00c0, 0x157: 0x00c0, + 0x158: 0x00c0, 0x159: 0x00c0, 0x15a: 0x00c0, 0x15b: 0x00c0, 0x15c: 0x00c0, 0x15d: 0x00c0, + 0x15e: 0x00c0, 0x15f: 0x00c0, 0x160: 0x00c0, 0x161: 0x00c0, 0x162: 0x00c0, 0x163: 0x00c0, + 0x164: 0x00c0, 0x165: 0x00c0, 0x166: 0x00c0, 0x167: 0x00c0, 0x168: 0x00c0, 0x169: 0x00c0, + 0x16a: 0x00c0, 0x16b: 0x00c0, 0x16c: 0x00c0, 0x16d: 0x00c0, 0x16e: 0x00c0, 0x16f: 0x00c0, + 0x170: 0x00c0, 0x171: 0x00c0, 0x172: 0x0080, 0x173: 0x0080, 0x174: 0x00c0, 0x175: 0x00c0, + 0x176: 0x00c0, 0x177: 0x00c0, 0x178: 0x00c0, 0x179: 0x00c0, 0x17a: 0x00c0, 0x17b: 0x00c0, + 0x17c: 0x00c0, 0x17d: 0x00c0, 0x17e: 0x00c0, 0x17f: 0x0080, + // Block 0x6, offset 0x180 + 0x180: 0x0080, 0x181: 0x00c0, 0x182: 0x00c0, 0x183: 0x00c0, 0x184: 0x00c0, 0x185: 0x00c0, + 0x186: 0x00c0, 0x187: 0x00c0, 0x188: 0x00c0, 0x189: 0x0080, 0x18a: 0x00c0, 0x18b: 0x00c0, + 0x18c: 0x00c0, 0x18d: 0x00c0, 0x18e: 0x00c0, 0x18f: 0x00c0, 0x190: 0x00c0, 0x191: 0x00c0, + 0x192: 0x00c0, 0x193: 0x00c0, 0x194: 0x00c0, 0x195: 0x00c0, 0x196: 0x00c0, 0x197: 0x00c0, + 0x198: 0x00c0, 0x199: 0x00c0, 0x19a: 0x00c0, 0x19b: 0x00c0, 0x19c: 0x00c0, 0x19d: 0x00c0, + 0x19e: 0x00c0, 0x19f: 0x00c0, 0x1a0: 0x00c0, 0x1a1: 0x00c0, 0x1a2: 0x00c0, 0x1a3: 0x00c0, + 0x1a4: 0x00c0, 0x1a5: 0x00c0, 0x1a6: 0x00c0, 0x1a7: 0x00c0, 0x1a8: 0x00c0, 0x1a9: 0x00c0, + 0x1aa: 0x00c0, 0x1ab: 0x00c0, 0x1ac: 0x00c0, 0x1ad: 0x00c0, 0x1ae: 0x00c0, 0x1af: 0x00c0, + 0x1b0: 0x00c0, 0x1b1: 0x00c0, 0x1b2: 0x00c0, 0x1b3: 0x00c0, 0x1b4: 0x00c0, 0x1b5: 0x00c0, + 0x1b6: 0x00c0, 0x1b7: 0x00c0, 0x1b8: 0x00c0, 0x1b9: 0x00c0, 0x1ba: 0x00c0, 0x1bb: 0x00c0, + 0x1bc: 0x00c0, 0x1bd: 0x00c0, 0x1be: 0x00c0, 0x1bf: 0x0080, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x00c0, 0x1c1: 0x00c0, 0x1c2: 0x00c0, 0x1c3: 0x00c0, 0x1c4: 0x00c0, 0x1c5: 0x00c0, + 0x1c6: 0x00c0, 0x1c7: 0x00c0, 0x1c8: 0x00c0, 0x1c9: 0x00c0, 0x1ca: 0x00c0, 0x1cb: 0x00c0, + 0x1cc: 0x00c0, 0x1cd: 0x00c0, 0x1ce: 0x00c0, 0x1cf: 0x00c0, 0x1d0: 0x00c0, 0x1d1: 0x00c0, + 0x1d2: 0x00c0, 0x1d3: 0x00c0, 0x1d4: 0x00c0, 0x1d5: 0x00c0, 0x1d6: 0x00c0, 0x1d7: 0x00c0, + 0x1d8: 0x00c0, 0x1d9: 0x00c0, 0x1da: 0x00c0, 0x1db: 0x00c0, 0x1dc: 0x00c0, 0x1dd: 0x00c0, + 0x1de: 0x00c0, 0x1df: 0x00c0, 0x1e0: 0x00c0, 0x1e1: 0x00c0, 0x1e2: 0x00c0, 0x1e3: 0x00c0, + 0x1e4: 0x00c0, 0x1e5: 0x00c0, 0x1e6: 0x00c0, 0x1e7: 0x00c0, 0x1e8: 0x00c0, 0x1e9: 0x00c0, + 0x1ea: 0x00c0, 0x1eb: 0x00c0, 0x1ec: 0x00c0, 0x1ed: 0x00c0, 0x1ee: 0x00c0, 0x1ef: 0x00c0, + 0x1f0: 0x00c0, 0x1f1: 0x00c0, 0x1f2: 0x00c0, 0x1f3: 0x00c0, 0x1f4: 0x00c0, 0x1f5: 0x00c0, + 0x1f6: 0x00c0, 0x1f7: 0x00c0, 0x1f8: 0x00c0, 0x1f9: 0x00c0, 0x1fa: 0x00c0, 0x1fb: 0x00c0, + 0x1fc: 0x00c0, 0x1fd: 0x00c0, 0x1fe: 0x00c0, 0x1ff: 0x00c0, + // Block 0x8, offset 0x200 + 0x200: 0x00c0, 0x201: 0x00c0, 0x202: 0x00c0, 0x203: 0x00c0, 0x204: 0x0080, 0x205: 0x0080, + 0x206: 0x0080, 0x207: 0x0080, 0x208: 0x0080, 0x209: 0x0080, 0x20a: 0x0080, 0x20b: 0x0080, + 0x20c: 0x0080, 0x20d: 0x00c0, 0x20e: 0x00c0, 0x20f: 0x00c0, 0x210: 0x00c0, 0x211: 0x00c0, + 0x212: 0x00c0, 0x213: 0x00c0, 0x214: 0x00c0, 0x215: 0x00c0, 0x216: 0x00c0, 0x217: 0x00c0, + 0x218: 0x00c0, 0x219: 0x00c0, 0x21a: 0x00c0, 0x21b: 0x00c0, 0x21c: 0x00c0, 0x21d: 0x00c0, + 0x21e: 0x00c0, 0x21f: 0x00c0, 0x220: 0x00c0, 0x221: 0x00c0, 0x222: 0x00c0, 0x223: 0x00c0, + 0x224: 0x00c0, 0x225: 0x00c0, 0x226: 0x00c0, 0x227: 0x00c0, 0x228: 0x00c0, 0x229: 0x00c0, + 0x22a: 0x00c0, 0x22b: 0x00c0, 0x22c: 0x00c0, 0x22d: 0x00c0, 0x22e: 0x00c0, 0x22f: 0x00c0, + 0x230: 0x00c0, 0x231: 0x0080, 0x232: 0x0080, 0x233: 0x0080, 0x234: 0x00c0, 0x235: 0x00c0, + 0x236: 0x00c0, 0x237: 0x00c0, 0x238: 0x00c0, 0x239: 0x00c0, 0x23a: 0x00c0, 0x23b: 0x00c0, + 0x23c: 0x00c0, 0x23d: 0x00c0, 0x23e: 0x00c0, 0x23f: 0x00c0, + // Block 0x9, offset 0x240 + 0x240: 0x00c0, 0x241: 0x00c0, 0x242: 0x00c0, 0x243: 0x00c0, 0x244: 0x00c0, 0x245: 0x00c0, + 0x246: 0x00c0, 0x247: 0x00c0, 0x248: 0x00c0, 0x249: 0x00c0, 0x24a: 0x00c0, 0x24b: 0x00c0, + 0x24c: 0x00c0, 0x24d: 0x00c0, 0x24e: 0x00c0, 0x24f: 0x00c0, 0x250: 0x00c0, 0x251: 0x00c0, + 0x252: 0x00c0, 0x253: 0x00c0, 0x254: 0x00c0, 0x255: 0x00c0, 0x256: 0x00c0, 0x257: 0x00c0, + 0x258: 0x00c0, 0x259: 0x00c0, 0x25a: 0x00c0, 0x25b: 0x00c0, 0x25c: 0x00c0, 0x25d: 0x00c0, + 0x25e: 0x00c0, 0x25f: 0x00c0, 0x260: 0x00c0, 0x261: 0x00c0, 0x262: 0x00c0, 0x263: 0x00c0, + 0x264: 0x00c0, 0x265: 0x00c0, 0x266: 0x00c0, 0x267: 0x00c0, 0x268: 0x00c0, 0x269: 0x00c0, + 0x26a: 0x00c0, 0x26b: 0x00c0, 0x26c: 0x00c0, 0x26d: 0x00c0, 0x26e: 0x00c0, 0x26f: 0x00c0, + 0x270: 0x0080, 0x271: 0x0080, 0x272: 0x0080, 0x273: 0x0080, 0x274: 0x0080, 0x275: 0x0080, + 0x276: 0x0080, 0x277: 0x0080, 0x278: 0x0080, 0x279: 0x00c0, 0x27a: 0x00c0, 0x27b: 0x00c0, + 0x27c: 0x00c0, 0x27d: 0x00c0, 0x27e: 0x00c0, 0x27f: 0x00c0, + // Block 0xa, offset 0x280 + 0x280: 0x00c0, 0x281: 0x00c0, 0x282: 0x0080, 0x283: 0x0080, 0x284: 0x0080, 0x285: 0x0080, + 0x286: 0x00c0, 0x287: 0x00c0, 0x288: 0x00c0, 0x289: 0x00c0, 0x28a: 0x00c0, 0x28b: 0x00c0, + 0x28c: 0x00c0, 0x28d: 0x00c0, 0x28e: 0x00c0, 0x28f: 0x00c0, 0x290: 0x00c0, 0x291: 0x00c0, + 0x292: 0x0080, 0x293: 0x0080, 0x294: 0x0080, 0x295: 0x0080, 0x296: 0x0080, 0x297: 0x0080, + 0x298: 0x0080, 0x299: 0x0080, 0x29a: 0x0080, 0x29b: 0x0080, 0x29c: 0x0080, 0x29d: 0x0080, + 0x29e: 0x0080, 0x29f: 0x0080, 0x2a0: 0x0080, 0x2a1: 0x0080, 0x2a2: 0x0080, 0x2a3: 0x0080, + 0x2a4: 0x0080, 0x2a5: 0x0080, 0x2a6: 0x0080, 0x2a7: 0x0080, 0x2a8: 0x0080, 0x2a9: 0x0080, + 0x2aa: 0x0080, 0x2ab: 0x0080, 0x2ac: 0x00c0, 0x2ad: 0x0080, 0x2ae: 0x00c0, 0x2af: 0x0080, + 0x2b0: 0x0080, 0x2b1: 0x0080, 0x2b2: 0x0080, 0x2b3: 0x0080, 0x2b4: 0x0080, 0x2b5: 0x0080, + 0x2b6: 0x0080, 0x2b7: 0x0080, 0x2b8: 0x0080, 0x2b9: 0x0080, 0x2ba: 0x0080, 0x2bb: 0x0080, + 0x2bc: 0x0080, 0x2bd: 0x0080, 0x2be: 0x0080, 0x2bf: 0x0080, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x00c3, 0x2c1: 0x00c3, 0x2c2: 0x00c3, 0x2c3: 0x00c3, 0x2c4: 0x00c3, 0x2c5: 0x00c3, + 0x2c6: 0x00c3, 0x2c7: 0x00c3, 0x2c8: 0x00c3, 0x2c9: 0x00c3, 0x2ca: 0x00c3, 0x2cb: 0x00c3, + 0x2cc: 0x00c3, 0x2cd: 0x00c3, 0x2ce: 0x00c3, 0x2cf: 0x00c3, 0x2d0: 0x00c3, 0x2d1: 0x00c3, + 0x2d2: 0x00c3, 0x2d3: 0x00c3, 0x2d4: 0x00c3, 0x2d5: 0x00c3, 0x2d6: 0x00c3, 0x2d7: 0x00c3, + 0x2d8: 0x00c3, 0x2d9: 0x00c3, 0x2da: 0x00c3, 0x2db: 0x00c3, 0x2dc: 0x00c3, 0x2dd: 0x00c3, + 0x2de: 0x00c3, 0x2df: 0x00c3, 0x2e0: 0x00c3, 0x2e1: 0x00c3, 0x2e2: 0x00c3, 0x2e3: 0x00c3, + 0x2e4: 0x00c3, 0x2e5: 0x00c3, 0x2e6: 0x00c3, 0x2e7: 0x00c3, 0x2e8: 0x00c3, 0x2e9: 0x00c3, + 0x2ea: 0x00c3, 0x2eb: 0x00c3, 0x2ec: 0x00c3, 0x2ed: 0x00c3, 0x2ee: 0x00c3, 0x2ef: 0x00c3, + 0x2f0: 0x00c3, 0x2f1: 0x00c3, 0x2f2: 0x00c3, 0x2f3: 0x00c3, 0x2f4: 0x00c3, 0x2f5: 0x00c3, + 0x2f6: 0x00c3, 0x2f7: 0x00c3, 0x2f8: 0x00c3, 0x2f9: 0x00c3, 0x2fa: 0x00c3, 0x2fb: 0x00c3, + 0x2fc: 0x00c3, 0x2fd: 0x00c3, 0x2fe: 0x00c3, 0x2ff: 0x00c3, + // Block 0xc, offset 0x300 + 0x300: 0x0083, 0x301: 0x0083, 0x302: 0x00c3, 0x303: 0x0083, 0x304: 0x0083, 0x305: 0x00c3, + 0x306: 0x00c3, 0x307: 0x00c3, 0x308: 0x00c3, 0x309: 0x00c3, 0x30a: 0x00c3, 0x30b: 0x00c3, + 0x30c: 0x00c3, 0x30d: 0x00c3, 0x30e: 0x00c3, 0x30f: 0x0040, 0x310: 0x00c3, 0x311: 0x00c3, + 0x312: 0x00c3, 0x313: 0x00c3, 0x314: 0x00c3, 0x315: 0x00c3, 0x316: 0x00c3, 0x317: 0x00c3, + 0x318: 0x00c3, 0x319: 0x00c3, 0x31a: 0x00c3, 0x31b: 0x00c3, 0x31c: 0x00c3, 0x31d: 0x00c3, + 0x31e: 0x00c3, 0x31f: 0x00c3, 0x320: 0x00c3, 0x321: 0x00c3, 0x322: 0x00c3, 0x323: 0x00c3, + 0x324: 0x00c3, 0x325: 0x00c3, 0x326: 0x00c3, 0x327: 0x00c3, 0x328: 0x00c3, 0x329: 0x00c3, + 0x32a: 0x00c3, 0x32b: 0x00c3, 0x32c: 0x00c3, 0x32d: 0x00c3, 0x32e: 0x00c3, 0x32f: 0x00c3, + 0x330: 0x00c8, 0x331: 0x00c8, 0x332: 0x00c8, 0x333: 0x00c8, 0x334: 0x0080, 0x335: 0x0050, + 0x336: 0x00c8, 0x337: 0x00c8, 0x33a: 0x0088, 0x33b: 0x00c8, + 0x33c: 0x00c8, 0x33d: 0x00c8, 0x33e: 0x0080, 0x33f: 0x00c8, + // Block 0xd, offset 0x340 + 0x344: 0x0088, 0x345: 0x0080, + 0x346: 0x00c8, 0x347: 0x0080, 0x348: 0x00c8, 0x349: 0x00c8, 0x34a: 0x00c8, + 0x34c: 0x00c8, 0x34e: 0x00c8, 0x34f: 0x00c8, 0x350: 0x00c8, 0x351: 0x00c8, + 0x352: 0x00c8, 0x353: 0x00c8, 0x354: 0x00c8, 0x355: 0x00c8, 0x356: 0x00c8, 0x357: 0x00c8, + 0x358: 0x00c8, 0x359: 0x00c8, 0x35a: 0x00c8, 0x35b: 0x00c8, 0x35c: 0x00c8, 0x35d: 0x00c8, + 0x35e: 0x00c8, 0x35f: 0x00c8, 0x360: 0x00c8, 0x361: 0x00c8, 0x363: 0x00c8, + 0x364: 0x00c8, 0x365: 0x00c8, 0x366: 0x00c8, 0x367: 0x00c8, 0x368: 0x00c8, 0x369: 0x00c8, + 0x36a: 0x00c8, 0x36b: 0x00c8, 0x36c: 0x00c8, 0x36d: 0x00c8, 0x36e: 0x00c8, 0x36f: 0x00c8, + 0x370: 0x00c8, 0x371: 0x00c8, 0x372: 0x00c8, 0x373: 0x00c8, 0x374: 0x00c8, 0x375: 0x00c8, + 0x376: 0x00c8, 0x377: 0x00c8, 0x378: 0x00c8, 0x379: 0x00c8, 0x37a: 0x00c8, 0x37b: 0x00c8, + 0x37c: 0x00c8, 0x37d: 0x00c8, 0x37e: 0x00c8, 0x37f: 0x00c8, + // Block 0xe, offset 0x380 + 0x380: 0x00c8, 0x381: 0x00c8, 0x382: 0x00c8, 0x383: 0x00c8, 0x384: 0x00c8, 0x385: 0x00c8, + 0x386: 0x00c8, 0x387: 0x00c8, 0x388: 0x00c8, 0x389: 0x00c8, 0x38a: 0x00c8, 0x38b: 0x00c8, + 0x38c: 0x00c8, 0x38d: 0x00c8, 0x38e: 0x00c8, 0x38f: 0x00c8, 0x390: 0x0088, 0x391: 0x0088, + 0x392: 0x0088, 0x393: 0x0088, 0x394: 0x0088, 0x395: 0x0088, 0x396: 0x0088, 0x397: 0x00c8, + 0x398: 0x00c8, 0x399: 0x00c8, 0x39a: 0x00c8, 0x39b: 0x00c8, 0x39c: 0x00c8, 0x39d: 0x00c8, + 0x39e: 0x00c8, 0x39f: 0x00c8, 0x3a0: 0x00c8, 0x3a1: 0x00c8, 0x3a2: 0x00c0, 0x3a3: 0x00c0, + 0x3a4: 0x00c0, 0x3a5: 0x00c0, 0x3a6: 0x00c0, 0x3a7: 0x00c0, 0x3a8: 0x00c0, 0x3a9: 0x00c0, + 0x3aa: 0x00c0, 0x3ab: 0x00c0, 0x3ac: 0x00c0, 0x3ad: 0x00c0, 0x3ae: 0x00c0, 0x3af: 0x00c0, + 0x3b0: 0x0088, 0x3b1: 0x0088, 0x3b2: 0x0088, 0x3b3: 0x00c8, 0x3b4: 0x0088, 0x3b5: 0x0088, + 0x3b6: 0x0088, 0x3b7: 0x00c8, 0x3b8: 0x00c8, 0x3b9: 0x0088, 0x3ba: 0x00c8, 0x3bb: 0x00c8, + 0x3bc: 0x00c8, 0x3bd: 0x00c8, 0x3be: 0x00c8, 0x3bf: 0x00c8, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x00c0, 0x3c1: 0x00c0, 0x3c2: 0x0080, 0x3c3: 0x00c3, 0x3c4: 0x00c3, 0x3c5: 0x00c3, + 0x3c6: 0x00c3, 0x3c7: 0x00c3, 0x3c8: 0x0083, 0x3c9: 0x0083, 0x3ca: 0x00c0, 0x3cb: 0x00c0, + 0x3cc: 0x00c0, 0x3cd: 0x00c0, 0x3ce: 0x00c0, 0x3cf: 0x00c0, 0x3d0: 0x00c0, 0x3d1: 0x00c0, + 0x3d2: 0x00c0, 0x3d3: 0x00c0, 0x3d4: 0x00c0, 0x3d5: 0x00c0, 0x3d6: 0x00c0, 0x3d7: 0x00c0, + 0x3d8: 0x00c0, 0x3d9: 0x00c0, 0x3da: 0x00c0, 0x3db: 0x00c0, 0x3dc: 0x00c0, 0x3dd: 0x00c0, + 0x3de: 0x00c0, 0x3df: 0x00c0, 0x3e0: 0x00c0, 0x3e1: 0x00c0, 0x3e2: 0x00c0, 0x3e3: 0x00c0, + 0x3e4: 0x00c0, 0x3e5: 0x00c0, 0x3e6: 0x00c0, 0x3e7: 0x00c0, 0x3e8: 0x00c0, 0x3e9: 0x00c0, + 0x3ea: 0x00c0, 0x3eb: 0x00c0, 0x3ec: 0x00c0, 0x3ed: 0x00c0, 0x3ee: 0x00c0, 0x3ef: 0x00c0, + 0x3f0: 0x00c0, 0x3f1: 0x00c0, 0x3f2: 0x00c0, 0x3f3: 0x00c0, 0x3f4: 0x00c0, 0x3f5: 0x00c0, + 0x3f6: 0x00c0, 0x3f7: 0x00c0, 0x3f8: 0x00c0, 0x3f9: 0x00c0, 0x3fa: 0x00c0, 0x3fb: 0x00c0, + 0x3fc: 0x00c0, 0x3fd: 0x00c0, 0x3fe: 0x00c0, 0x3ff: 0x00c0, + // Block 0x10, offset 0x400 + 0x400: 0x00c0, 0x401: 0x00c0, 0x402: 0x00c0, 0x403: 0x00c0, 0x404: 0x00c0, 0x405: 0x00c0, + 0x406: 0x00c0, 0x407: 0x00c0, 0x408: 0x00c0, 0x409: 0x00c0, 0x40a: 0x00c0, 0x40b: 0x00c0, + 0x40c: 0x00c0, 0x40d: 0x00c0, 0x40e: 0x00c0, 0x40f: 0x00c0, 0x410: 0x00c0, 0x411: 0x00c0, + 0x412: 0x00c0, 0x413: 0x00c0, 0x414: 0x00c0, 0x415: 0x00c0, 0x416: 0x00c0, 0x417: 0x00c0, + 0x418: 0x00c0, 0x419: 0x00c0, 0x41a: 0x00c0, 0x41b: 0x00c0, 0x41c: 0x00c0, 0x41d: 0x00c0, + 0x41e: 0x00c0, 0x41f: 0x00c0, 0x420: 0x00c0, 0x421: 0x00c0, 0x422: 0x00c0, 0x423: 0x00c0, + 0x424: 0x00c0, 0x425: 0x00c0, 0x426: 0x00c0, 0x427: 0x00c0, 0x428: 0x00c0, 0x429: 0x00c0, + 0x42a: 0x00c0, 0x42b: 0x00c0, 0x42c: 0x00c0, 0x42d: 0x00c0, 0x42e: 0x00c0, 0x42f: 0x00c0, + 0x431: 0x00c0, 0x432: 0x00c0, 0x433: 0x00c0, 0x434: 0x00c0, 0x435: 0x00c0, + 0x436: 0x00c0, 0x437: 0x00c0, 0x438: 0x00c0, 0x439: 0x00c0, 0x43a: 0x00c0, 0x43b: 0x00c0, + 0x43c: 0x00c0, 0x43d: 0x00c0, 0x43e: 0x00c0, 0x43f: 0x00c0, + // Block 0x11, offset 0x440 + 0x440: 0x00c0, 0x441: 0x00c0, 0x442: 0x00c0, 0x443: 0x00c0, 0x444: 0x00c0, 0x445: 0x00c0, + 0x446: 0x00c0, 0x447: 0x00c0, 0x448: 0x00c0, 0x449: 0x00c0, 0x44a: 0x00c0, 0x44b: 0x00c0, + 0x44c: 0x00c0, 0x44d: 0x00c0, 0x44e: 0x00c0, 0x44f: 0x00c0, 0x450: 0x00c0, 0x451: 0x00c0, + 0x452: 0x00c0, 0x453: 0x00c0, 0x454: 0x00c0, 0x455: 0x00c0, 0x456: 0x00c0, + 0x459: 0x00c0, 0x45a: 0x0080, 0x45b: 0x0080, 0x45c: 0x0080, 0x45d: 0x0080, + 0x45e: 0x0080, 0x45f: 0x0080, 0x461: 0x00c0, 0x462: 0x00c0, 0x463: 0x00c0, + 0x464: 0x00c0, 0x465: 0x00c0, 0x466: 0x00c0, 0x467: 0x00c0, 0x468: 0x00c0, 0x469: 0x00c0, + 0x46a: 0x00c0, 0x46b: 0x00c0, 0x46c: 0x00c0, 0x46d: 0x00c0, 0x46e: 0x00c0, 0x46f: 0x00c0, + 0x470: 0x00c0, 0x471: 0x00c0, 0x472: 0x00c0, 0x473: 0x00c0, 0x474: 0x00c0, 0x475: 0x00c0, + 0x476: 0x00c0, 0x477: 0x00c0, 0x478: 0x00c0, 0x479: 0x00c0, 0x47a: 0x00c0, 0x47b: 0x00c0, + 0x47c: 0x00c0, 0x47d: 0x00c0, 0x47e: 0x00c0, 0x47f: 0x00c0, + // Block 0x12, offset 0x480 + 0x480: 0x00c0, 0x481: 0x00c0, 0x482: 0x00c0, 0x483: 0x00c0, 0x484: 0x00c0, 0x485: 0x00c0, + 0x486: 0x00c0, 0x487: 0x0080, 0x489: 0x0080, 0x48a: 0x0080, + 0x48d: 0x0080, 0x48e: 0x0080, 0x48f: 0x0080, 0x491: 0x00cb, + 0x492: 0x00cb, 0x493: 0x00cb, 0x494: 0x00cb, 0x495: 0x00cb, 0x496: 0x00cb, 0x497: 0x00cb, + 0x498: 0x00cb, 0x499: 0x00cb, 0x49a: 0x00cb, 0x49b: 0x00cb, 0x49c: 0x00cb, 0x49d: 0x00cb, + 0x49e: 0x00cb, 0x49f: 0x00cb, 0x4a0: 0x00cb, 0x4a1: 0x00cb, 0x4a2: 0x00cb, 0x4a3: 0x00cb, + 0x4a4: 0x00cb, 0x4a5: 0x00cb, 0x4a6: 0x00cb, 0x4a7: 0x00cb, 0x4a8: 0x00cb, 0x4a9: 0x00cb, + 0x4aa: 0x00cb, 0x4ab: 0x00cb, 0x4ac: 0x00cb, 0x4ad: 0x00cb, 0x4ae: 0x00cb, 0x4af: 0x00cb, + 0x4b0: 0x00cb, 0x4b1: 0x00cb, 0x4b2: 0x00cb, 0x4b3: 0x00cb, 0x4b4: 0x00cb, 0x4b5: 0x00cb, + 0x4b6: 0x00cb, 0x4b7: 0x00cb, 0x4b8: 0x00cb, 0x4b9: 0x00cb, 0x4ba: 0x00cb, 0x4bb: 0x00cb, + 0x4bc: 0x00cb, 0x4bd: 0x00cb, 0x4be: 0x008a, 0x4bf: 0x00cb, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x008a, 0x4c1: 0x00cb, 0x4c2: 0x00cb, 0x4c3: 0x008a, 0x4c4: 0x00cb, 0x4c5: 0x00cb, + 0x4c6: 0x008a, 0x4c7: 0x00cb, + 0x4d0: 0x00ca, 0x4d1: 0x00ca, + 0x4d2: 0x00ca, 0x4d3: 0x00ca, 0x4d4: 0x00ca, 0x4d5: 0x00ca, 0x4d6: 0x00ca, 0x4d7: 0x00ca, + 0x4d8: 0x00ca, 0x4d9: 0x00ca, 0x4da: 0x00ca, 0x4db: 0x00ca, 0x4dc: 0x00ca, 0x4dd: 0x00ca, + 0x4de: 0x00ca, 0x4df: 0x00ca, 0x4e0: 0x00ca, 0x4e1: 0x00ca, 0x4e2: 0x00ca, 0x4e3: 0x00ca, + 0x4e4: 0x00ca, 0x4e5: 0x00ca, 0x4e6: 0x00ca, 0x4e7: 0x00ca, 0x4e8: 0x00ca, 0x4e9: 0x00ca, + 0x4ea: 0x00ca, + 0x4f0: 0x00ca, 0x4f1: 0x00ca, 0x4f2: 0x00ca, 0x4f3: 0x0051, 0x4f4: 0x0051, + // Block 0x14, offset 0x500 + 0x500: 0x0040, 0x501: 0x0040, 0x502: 0x0040, 0x503: 0x0040, 0x504: 0x0040, 0x505: 0x0040, + 0x506: 0x0080, 0x507: 0x0080, 0x508: 0x0080, 0x509: 0x0080, 0x50a: 0x0080, 0x50b: 0x0080, + 0x50c: 0x0080, 0x50d: 0x0080, 0x50e: 0x0080, 0x50f: 0x0080, 0x510: 0x00c3, 0x511: 0x00c3, + 0x512: 0x00c3, 0x513: 0x00c3, 0x514: 0x00c3, 0x515: 0x00c3, 0x516: 0x00c3, 0x517: 0x00c3, + 0x518: 0x00c3, 0x519: 0x00c3, 0x51a: 0x00c3, 0x51b: 0x0080, 0x51c: 0x0040, + 0x51e: 0x0080, 0x51f: 0x0080, 0x520: 0x00c2, 0x521: 0x00c0, 0x522: 0x00c4, 0x523: 0x00c4, + 0x524: 0x00c4, 0x525: 0x00c4, 0x526: 0x00c2, 0x527: 0x00c4, 0x528: 0x00c2, 0x529: 0x00c4, + 0x52a: 0x00c2, 0x52b: 0x00c2, 0x52c: 0x00c2, 0x52d: 0x00c2, 0x52e: 0x00c2, 0x52f: 0x00c4, + 0x530: 0x00c4, 0x531: 0x00c4, 0x532: 0x00c4, 0x533: 0x00c2, 0x534: 0x00c2, 0x535: 0x00c2, + 0x536: 0x00c2, 0x537: 0x00c2, 0x538: 0x00c2, 0x539: 0x00c2, 0x53a: 0x00c2, 0x53b: 0x00c2, + 0x53c: 0x00c2, 0x53d: 0x00c2, 0x53e: 0x00c2, 0x53f: 0x00c2, + // Block 0x15, offset 0x540 + 0x540: 0x0040, 0x541: 0x00c2, 0x542: 0x00c2, 0x543: 0x00c2, 0x544: 0x00c2, 0x545: 0x00c2, + 0x546: 0x00c2, 0x547: 0x00c2, 0x548: 0x00c4, 0x549: 0x00c2, 0x54a: 0x00c2, 0x54b: 0x00c3, + 0x54c: 0x00c3, 0x54d: 0x00c3, 0x54e: 0x00c3, 0x54f: 0x00c3, 0x550: 0x00c3, 0x551: 0x00c3, + 0x552: 0x00c3, 0x553: 0x00c3, 0x554: 0x00c3, 0x555: 0x00c3, 0x556: 0x00c3, 0x557: 0x00c3, + 0x558: 0x00c3, 0x559: 0x00c3, 0x55a: 0x00c3, 0x55b: 0x00c3, 0x55c: 0x00c3, 0x55d: 0x00c3, + 0x55e: 0x00c3, 0x55f: 0x00c3, 0x560: 0x0053, 0x561: 0x0053, 0x562: 0x0053, 0x563: 0x0053, + 0x564: 0x0053, 0x565: 0x0053, 0x566: 0x0053, 0x567: 0x0053, 0x568: 0x0053, 0x569: 0x0053, + 0x56a: 0x0080, 0x56b: 0x0080, 0x56c: 0x0080, 0x56d: 0x0080, 0x56e: 0x00c2, 0x56f: 0x00c2, + 0x570: 0x00c3, 0x571: 0x00c4, 0x572: 0x00c4, 0x573: 0x00c4, 0x574: 0x00c0, 0x575: 0x0084, + 0x576: 0x0084, 0x577: 0x0084, 0x578: 0x0082, 0x579: 0x00c2, 0x57a: 0x00c2, 0x57b: 0x00c2, + 0x57c: 0x00c2, 0x57d: 0x00c2, 0x57e: 0x00c2, 0x57f: 0x00c2, + // Block 0x16, offset 0x580 + 0x580: 0x00c2, 0x581: 0x00c2, 0x582: 0x00c2, 0x583: 0x00c2, 0x584: 0x00c2, 0x585: 0x00c2, + 0x586: 0x00c2, 0x587: 0x00c2, 0x588: 0x00c4, 0x589: 0x00c4, 0x58a: 0x00c4, 0x58b: 0x00c4, + 0x58c: 0x00c4, 0x58d: 0x00c4, 0x58e: 0x00c4, 0x58f: 0x00c4, 0x590: 0x00c4, 0x591: 0x00c4, + 0x592: 0x00c4, 0x593: 0x00c4, 0x594: 0x00c4, 0x595: 0x00c4, 0x596: 0x00c4, 0x597: 0x00c4, + 0x598: 0x00c4, 0x599: 0x00c4, 0x59a: 0x00c2, 0x59b: 0x00c2, 0x59c: 0x00c2, 0x59d: 0x00c2, + 0x59e: 0x00c2, 0x59f: 0x00c2, 0x5a0: 0x00c2, 0x5a1: 0x00c2, 0x5a2: 0x00c2, 0x5a3: 0x00c2, + 0x5a4: 0x00c2, 0x5a5: 0x00c2, 0x5a6: 0x00c2, 0x5a7: 0x00c2, 0x5a8: 0x00c2, 0x5a9: 0x00c2, + 0x5aa: 0x00c2, 0x5ab: 0x00c2, 0x5ac: 0x00c2, 0x5ad: 0x00c2, 0x5ae: 0x00c2, 0x5af: 0x00c2, + 0x5b0: 0x00c2, 0x5b1: 0x00c2, 0x5b2: 0x00c2, 0x5b3: 0x00c2, 0x5b4: 0x00c2, 0x5b5: 0x00c2, + 0x5b6: 0x00c2, 0x5b7: 0x00c2, 0x5b8: 0x00c2, 0x5b9: 0x00c2, 0x5ba: 0x00c2, 0x5bb: 0x00c2, + 0x5bc: 0x00c2, 0x5bd: 0x00c2, 0x5be: 0x00c2, 0x5bf: 0x00c2, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x00c4, 0x5c1: 0x00c2, 0x5c2: 0x00c2, 0x5c3: 0x00c4, 0x5c4: 0x00c4, 0x5c5: 0x00c4, + 0x5c6: 0x00c4, 0x5c7: 0x00c4, 0x5c8: 0x00c4, 0x5c9: 0x00c4, 0x5ca: 0x00c4, 0x5cb: 0x00c4, + 0x5cc: 0x00c2, 0x5cd: 0x00c4, 0x5ce: 0x00c2, 0x5cf: 0x00c4, 0x5d0: 0x00c2, 0x5d1: 0x00c2, + 0x5d2: 0x00c4, 0x5d3: 0x00c4, 0x5d4: 0x0080, 0x5d5: 0x00c4, 0x5d6: 0x00c3, 0x5d7: 0x00c3, + 0x5d8: 0x00c3, 0x5d9: 0x00c3, 0x5da: 0x00c3, 0x5db: 0x00c3, 0x5dc: 0x00c3, 0x5dd: 0x0040, + 0x5de: 0x0080, 0x5df: 0x00c3, 0x5e0: 0x00c3, 0x5e1: 0x00c3, 0x5e2: 0x00c3, 0x5e3: 0x00c3, + 0x5e4: 0x00c3, 0x5e5: 0x00c0, 0x5e6: 0x00c0, 0x5e7: 0x00c3, 0x5e8: 0x00c3, 0x5e9: 0x0080, + 0x5ea: 0x00c3, 0x5eb: 0x00c3, 0x5ec: 0x00c3, 0x5ed: 0x00c3, 0x5ee: 0x00c4, 0x5ef: 0x00c4, + 0x5f0: 0x0054, 0x5f1: 0x0054, 0x5f2: 0x0054, 0x5f3: 0x0054, 0x5f4: 0x0054, 0x5f5: 0x0054, + 0x5f6: 0x0054, 0x5f7: 0x0054, 0x5f8: 0x0054, 0x5f9: 0x0054, 0x5fa: 0x00c2, 0x5fb: 0x00c2, + 0x5fc: 0x00c2, 0x5fd: 0x00c0, 0x5fe: 0x00c0, 0x5ff: 0x00c2, + // Block 0x18, offset 0x600 + 0x600: 0x0080, 0x601: 0x0080, 0x602: 0x0080, 0x603: 0x0080, 0x604: 0x0080, 0x605: 0x0080, + 0x606: 0x0080, 0x607: 0x0080, 0x608: 0x0080, 0x609: 0x0080, 0x60a: 0x0080, 0x60b: 0x0080, + 0x60c: 0x0080, 0x60d: 0x0080, 0x60f: 0x0040, 0x610: 0x00c4, 0x611: 0x00c3, + 0x612: 0x00c2, 0x613: 0x00c2, 0x614: 0x00c2, 0x615: 0x00c4, 0x616: 0x00c4, 0x617: 0x00c4, + 0x618: 0x00c4, 0x619: 0x00c4, 0x61a: 0x00c2, 0x61b: 0x00c2, 0x61c: 0x00c2, 0x61d: 0x00c2, + 0x61e: 0x00c4, 0x61f: 0x00c2, 0x620: 0x00c2, 0x621: 0x00c2, 0x622: 0x00c2, 0x623: 0x00c2, + 0x624: 0x00c2, 0x625: 0x00c2, 0x626: 0x00c2, 0x627: 0x00c2, 0x628: 0x00c4, 0x629: 0x00c2, + 0x62a: 0x00c4, 0x62b: 0x00c2, 0x62c: 0x00c4, 0x62d: 0x00c2, 0x62e: 0x00c2, 0x62f: 0x00c4, + 0x630: 0x00c3, 0x631: 0x00c3, 0x632: 0x00c3, 0x633: 0x00c3, 0x634: 0x00c3, 0x635: 0x00c3, + 0x636: 0x00c3, 0x637: 0x00c3, 0x638: 0x00c3, 0x639: 0x00c3, 0x63a: 0x00c3, 0x63b: 0x00c3, + 0x63c: 0x00c3, 0x63d: 0x00c3, 0x63e: 0x00c3, 0x63f: 0x00c3, + // Block 0x19, offset 0x640 + 0x640: 0x00c3, 0x641: 0x00c3, 0x642: 0x00c3, 0x643: 0x00c3, 0x644: 0x00c3, 0x645: 0x00c3, + 0x646: 0x00c3, 0x647: 0x00c3, 0x648: 0x00c3, 0x649: 0x00c3, 0x64a: 0x00c3, + 0x64d: 0x00c4, 0x64e: 0x00c2, 0x64f: 0x00c2, 0x650: 0x00c2, 0x651: 0x00c2, + 0x652: 0x00c2, 0x653: 0x00c2, 0x654: 0x00c2, 0x655: 0x00c2, 0x656: 0x00c2, 0x657: 0x00c2, + 0x658: 0x00c2, 0x659: 0x00c4, 0x65a: 0x00c4, 0x65b: 0x00c4, 0x65c: 0x00c2, 0x65d: 0x00c2, + 0x65e: 0x00c2, 0x65f: 0x00c2, 0x660: 0x00c2, 0x661: 0x00c2, 0x662: 0x00c2, 0x663: 0x00c2, + 0x664: 0x00c2, 0x665: 0x00c2, 0x666: 0x00c2, 0x667: 0x00c2, 0x668: 0x00c2, 0x669: 0x00c2, + 0x66a: 0x00c2, 0x66b: 0x00c4, 0x66c: 0x00c4, 0x66d: 0x00c2, 0x66e: 0x00c2, 0x66f: 0x00c2, + 0x670: 0x00c2, 0x671: 0x00c4, 0x672: 0x00c2, 0x673: 0x00c4, 0x674: 0x00c4, 0x675: 0x00c2, + 0x676: 0x00c2, 0x677: 0x00c2, 0x678: 0x00c4, 0x679: 0x00c4, 0x67a: 0x00c2, 0x67b: 0x00c2, + 0x67c: 0x00c2, 0x67d: 0x00c2, 0x67e: 0x00c2, 0x67f: 0x00c2, + // Block 0x1a, offset 0x680 + 0x680: 0x00c0, 0x681: 0x00c0, 0x682: 0x00c0, 0x683: 0x00c0, 0x684: 0x00c0, 0x685: 0x00c0, + 0x686: 0x00c0, 0x687: 0x00c0, 0x688: 0x00c0, 0x689: 0x00c0, 0x68a: 0x00c0, 0x68b: 0x00c0, + 0x68c: 0x00c0, 0x68d: 0x00c0, 0x68e: 0x00c0, 0x68f: 0x00c0, 0x690: 0x00c0, 0x691: 0x00c0, + 0x692: 0x00c0, 0x693: 0x00c0, 0x694: 0x00c0, 0x695: 0x00c0, 0x696: 0x00c0, 0x697: 0x00c0, + 0x698: 0x00c0, 0x699: 0x00c0, 0x69a: 0x00c0, 0x69b: 0x00c0, 0x69c: 0x00c0, 0x69d: 0x00c0, + 0x69e: 0x00c0, 0x69f: 0x00c0, 0x6a0: 0x00c0, 0x6a1: 0x00c0, 0x6a2: 0x00c0, 0x6a3: 0x00c0, + 0x6a4: 0x00c0, 0x6a5: 0x00c0, 0x6a6: 0x00c3, 0x6a7: 0x00c3, 0x6a8: 0x00c3, 0x6a9: 0x00c3, + 0x6aa: 0x00c3, 0x6ab: 0x00c3, 0x6ac: 0x00c3, 0x6ad: 0x00c3, 0x6ae: 0x00c3, 0x6af: 0x00c3, + 0x6b0: 0x00c3, 0x6b1: 0x00c0, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x00c0, 0x6c1: 0x00c0, 0x6c2: 0x00c0, 0x6c3: 0x00c0, 0x6c4: 0x00c0, 0x6c5: 0x00c0, + 0x6c6: 0x00c0, 0x6c7: 0x00c0, 0x6c8: 0x00c0, 0x6c9: 0x00c0, 0x6ca: 0x00c2, 0x6cb: 0x00c2, + 0x6cc: 0x00c2, 0x6cd: 0x00c2, 0x6ce: 0x00c2, 0x6cf: 0x00c2, 0x6d0: 0x00c2, 0x6d1: 0x00c2, + 0x6d2: 0x00c2, 0x6d3: 0x00c2, 0x6d4: 0x00c2, 0x6d5: 0x00c2, 0x6d6: 0x00c2, 0x6d7: 0x00c2, + 0x6d8: 0x00c2, 0x6d9: 0x00c2, 0x6da: 0x00c2, 0x6db: 0x00c2, 0x6dc: 0x00c2, 0x6dd: 0x00c2, + 0x6de: 0x00c2, 0x6df: 0x00c2, 0x6e0: 0x00c2, 0x6e1: 0x00c2, 0x6e2: 0x00c2, 0x6e3: 0x00c2, + 0x6e4: 0x00c2, 0x6e5: 0x00c2, 0x6e6: 0x00c2, 0x6e7: 0x00c2, 0x6e8: 0x00c2, 0x6e9: 0x00c2, + 0x6ea: 0x00c2, 0x6eb: 0x00c3, 0x6ec: 0x00c3, 0x6ed: 0x00c3, 0x6ee: 0x00c3, 0x6ef: 0x00c3, + 0x6f0: 0x00c3, 0x6f1: 0x00c3, 0x6f2: 0x00c3, 0x6f3: 0x00c3, 0x6f4: 0x00c0, 0x6f5: 0x00c0, + 0x6f6: 0x0080, 0x6f7: 0x0080, 0x6f8: 0x0080, 0x6f9: 0x0080, 0x6fa: 0x0040, + // Block 0x1c, offset 0x700 + 0x700: 0x00c0, 0x701: 0x00c0, 0x702: 0x00c0, 0x703: 0x00c0, 0x704: 0x00c0, 0x705: 0x00c0, + 0x706: 0x00c0, 0x707: 0x00c0, 0x708: 0x00c0, 0x709: 0x00c0, 0x70a: 0x00c0, 0x70b: 0x00c0, + 0x70c: 0x00c0, 0x70d: 0x00c0, 0x70e: 0x00c0, 0x70f: 0x00c0, 0x710: 0x00c0, 0x711: 0x00c0, + 0x712: 0x00c0, 0x713: 0x00c0, 0x714: 0x00c0, 0x715: 0x00c0, 0x716: 0x00c3, 0x717: 0x00c3, + 0x718: 0x00c3, 0x719: 0x00c3, 0x71a: 0x00c0, 0x71b: 0x00c3, 0x71c: 0x00c3, 0x71d: 0x00c3, + 0x71e: 0x00c3, 0x71f: 0x00c3, 0x720: 0x00c3, 0x721: 0x00c3, 0x722: 0x00c3, 0x723: 0x00c3, + 0x724: 0x00c0, 0x725: 0x00c3, 0x726: 0x00c3, 0x727: 0x00c3, 0x728: 0x00c0, 0x729: 0x00c3, + 0x72a: 0x00c3, 0x72b: 0x00c3, 0x72c: 0x00c3, 0x72d: 0x00c3, + 0x730: 0x0080, 0x731: 0x0080, 0x732: 0x0080, 0x733: 0x0080, 0x734: 0x0080, 0x735: 0x0080, + 0x736: 0x0080, 0x737: 0x0080, 0x738: 0x0080, 0x739: 0x0080, 0x73a: 0x0080, 0x73b: 0x0080, + 0x73c: 0x0080, 0x73d: 0x0080, 0x73e: 0x0080, + // Block 0x1d, offset 0x740 + 0x740: 0x00c4, 0x741: 0x00c2, 0x742: 0x00c2, 0x743: 0x00c2, 0x744: 0x00c2, 0x745: 0x00c2, + 0x746: 0x00c4, 0x747: 0x00c4, 0x748: 0x00c2, 0x749: 0x00c4, 0x74a: 0x00c2, 0x74b: 0x00c2, + 0x74c: 0x00c2, 0x74d: 0x00c2, 0x74e: 0x00c2, 0x74f: 0x00c2, 0x750: 0x00c2, 0x751: 0x00c2, + 0x752: 0x00c2, 0x753: 0x00c2, 0x754: 0x00c4, 0x755: 0x00c2, 0x756: 0x00c0, 0x757: 0x00c0, + 0x758: 0x00c0, 0x759: 0x00c3, 0x75a: 0x00c3, 0x75b: 0x00c3, + 0x75e: 0x0080, + // Block 0x1e, offset 0x780 + 0x7a0: 0x00c2, 0x7a1: 0x00c2, 0x7a2: 0x00c2, 0x7a3: 0x00c2, + 0x7a4: 0x00c2, 0x7a5: 0x00c2, 0x7a6: 0x00c2, 0x7a7: 0x00c2, 0x7a8: 0x00c2, 0x7a9: 0x00c2, + 0x7aa: 0x00c4, 0x7ab: 0x00c4, 0x7ac: 0x00c4, 0x7ad: 0x00c0, 0x7ae: 0x00c4, 0x7af: 0x00c2, + 0x7b0: 0x00c2, 0x7b1: 0x00c4, 0x7b2: 0x00c4, 0x7b3: 0x00c2, 0x7b4: 0x00c2, + 0x7b6: 0x00c2, 0x7b7: 0x00c2, 0x7b8: 0x00c2, 0x7b9: 0x00c4, 0x7ba: 0x00c2, 0x7bb: 0x00c2, + 0x7bc: 0x00c2, 0x7bd: 0x00c2, + // Block 0x1f, offset 0x7c0 + 0x7d4: 0x00c3, 0x7d5: 0x00c3, 0x7d6: 0x00c3, 0x7d7: 0x00c3, + 0x7d8: 0x00c3, 0x7d9: 0x00c3, 0x7da: 0x00c3, 0x7db: 0x00c3, 0x7dc: 0x00c3, 0x7dd: 0x00c3, + 0x7de: 0x00c3, 0x7df: 0x00c3, 0x7e0: 0x00c3, 0x7e1: 0x00c3, 0x7e2: 0x0040, 0x7e3: 0x00c3, + 0x7e4: 0x00c3, 0x7e5: 0x00c3, 0x7e6: 0x00c3, 0x7e7: 0x00c3, 0x7e8: 0x00c3, 0x7e9: 0x00c3, + 0x7ea: 0x00c3, 0x7eb: 0x00c3, 0x7ec: 0x00c3, 0x7ed: 0x00c3, 0x7ee: 0x00c3, 0x7ef: 0x00c3, + 0x7f0: 0x00c3, 0x7f1: 0x00c3, 0x7f2: 0x00c3, 0x7f3: 0x00c3, 0x7f4: 0x00c3, 0x7f5: 0x00c3, + 0x7f6: 0x00c3, 0x7f7: 0x00c3, 0x7f8: 0x00c3, 0x7f9: 0x00c3, 0x7fa: 0x00c3, 0x7fb: 0x00c3, + 0x7fc: 0x00c3, 0x7fd: 0x00c3, 0x7fe: 0x00c3, 0x7ff: 0x00c3, + // Block 0x20, offset 0x800 + 0x800: 0x00c3, 0x801: 0x00c3, 0x802: 0x00c3, 0x803: 0x00c0, 0x804: 0x00c0, 0x805: 0x00c0, + 0x806: 0x00c0, 0x807: 0x00c0, 0x808: 0x00c0, 0x809: 0x00c0, 0x80a: 0x00c0, 0x80b: 0x00c0, + 0x80c: 0x00c0, 0x80d: 0x00c0, 0x80e: 0x00c0, 0x80f: 0x00c0, 0x810: 0x00c0, 0x811: 0x00c0, + 0x812: 0x00c0, 0x813: 0x00c0, 0x814: 0x00c0, 0x815: 0x00c0, 0x816: 0x00c0, 0x817: 0x00c0, + 0x818: 0x00c0, 0x819: 0x00c0, 0x81a: 0x00c0, 0x81b: 0x00c0, 0x81c: 0x00c0, 0x81d: 0x00c0, + 0x81e: 0x00c0, 0x81f: 0x00c0, 0x820: 0x00c0, 0x821: 0x00c0, 0x822: 0x00c0, 0x823: 0x00c0, + 0x824: 0x00c0, 0x825: 0x00c0, 0x826: 0x00c0, 0x827: 0x00c0, 0x828: 0x00c0, 0x829: 0x00c0, + 0x82a: 0x00c0, 0x82b: 0x00c0, 0x82c: 0x00c0, 0x82d: 0x00c0, 0x82e: 0x00c0, 0x82f: 0x00c0, + 0x830: 0x00c0, 0x831: 0x00c0, 0x832: 0x00c0, 0x833: 0x00c0, 0x834: 0x00c0, 0x835: 0x00c0, + 0x836: 0x00c0, 0x837: 0x00c0, 0x838: 0x00c0, 0x839: 0x00c0, 0x83a: 0x00c3, 0x83b: 0x00c0, + 0x83c: 0x00c3, 0x83d: 0x00c0, 0x83e: 0x00c0, 0x83f: 0x00c0, + // Block 0x21, offset 0x840 + 0x840: 0x00c0, 0x841: 0x00c3, 0x842: 0x00c3, 0x843: 0x00c3, 0x844: 0x00c3, 0x845: 0x00c3, + 0x846: 0x00c3, 0x847: 0x00c3, 0x848: 0x00c3, 0x849: 0x00c0, 0x84a: 0x00c0, 0x84b: 0x00c0, + 0x84c: 0x00c0, 0x84d: 0x00c6, 0x84e: 0x00c0, 0x84f: 0x00c0, 0x850: 0x00c0, 0x851: 0x00c3, + 0x852: 0x00c3, 0x853: 0x00c3, 0x854: 0x00c3, 0x855: 0x00c3, 0x856: 0x00c3, 0x857: 0x00c3, + 0x858: 0x0080, 0x859: 0x0080, 0x85a: 0x0080, 0x85b: 0x0080, 0x85c: 0x0080, 0x85d: 0x0080, + 0x85e: 0x0080, 0x85f: 0x0080, 0x860: 0x00c0, 0x861: 0x00c0, 0x862: 0x00c3, 0x863: 0x00c3, + 0x864: 0x0080, 0x865: 0x0080, 0x866: 0x00c0, 0x867: 0x00c0, 0x868: 0x00c0, 0x869: 0x00c0, + 0x86a: 0x00c0, 0x86b: 0x00c0, 0x86c: 0x00c0, 0x86d: 0x00c0, 0x86e: 0x00c0, 0x86f: 0x00c0, + 0x870: 0x0080, 0x871: 0x00c0, 0x872: 0x00c0, 0x873: 0x00c0, 0x874: 0x00c0, 0x875: 0x00c0, + 0x876: 0x00c0, 0x877: 0x00c0, 0x878: 0x00c0, 0x879: 0x00c0, 0x87a: 0x00c0, 0x87b: 0x00c0, + 0x87c: 0x00c0, 0x87d: 0x00c0, 0x87e: 0x00c0, 0x87f: 0x00c0, + // Block 0x22, offset 0x880 + 0x880: 0x00c0, 0x881: 0x00c3, 0x882: 0x00c0, 0x883: 0x00c0, 0x885: 0x00c0, + 0x886: 0x00c0, 0x887: 0x00c0, 0x888: 0x00c0, 0x889: 0x00c0, 0x88a: 0x00c0, 0x88b: 0x00c0, + 0x88c: 0x00c0, 0x88f: 0x00c0, 0x890: 0x00c0, + 0x893: 0x00c0, 0x894: 0x00c0, 0x895: 0x00c0, 0x896: 0x00c0, 0x897: 0x00c0, + 0x898: 0x00c0, 0x899: 0x00c0, 0x89a: 0x00c0, 0x89b: 0x00c0, 0x89c: 0x00c0, 0x89d: 0x00c0, + 0x89e: 0x00c0, 0x89f: 0x00c0, 0x8a0: 0x00c0, 0x8a1: 0x00c0, 0x8a2: 0x00c0, 0x8a3: 0x00c0, + 0x8a4: 0x00c0, 0x8a5: 0x00c0, 0x8a6: 0x00c0, 0x8a7: 0x00c0, 0x8a8: 0x00c0, + 0x8aa: 0x00c0, 0x8ab: 0x00c0, 0x8ac: 0x00c0, 0x8ad: 0x00c0, 0x8ae: 0x00c0, 0x8af: 0x00c0, + 0x8b0: 0x00c0, 0x8b2: 0x00c0, + 0x8b6: 0x00c0, 0x8b7: 0x00c0, 0x8b8: 0x00c0, 0x8b9: 0x00c0, + 0x8bc: 0x00c3, 0x8bd: 0x00c0, 0x8be: 0x00c0, 0x8bf: 0x00c0, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x00c0, 0x8c1: 0x00c3, 0x8c2: 0x00c3, 0x8c3: 0x00c3, 0x8c4: 0x00c3, + 0x8c7: 0x00c0, 0x8c8: 0x00c0, 0x8cb: 0x00c0, + 0x8cc: 0x00c0, 0x8cd: 0x00c6, 0x8ce: 0x00c0, + 0x8d7: 0x00c0, + 0x8dc: 0x0080, 0x8dd: 0x0080, + 0x8df: 0x0080, 0x8e0: 0x00c0, 0x8e1: 0x00c0, 0x8e2: 0x00c3, 0x8e3: 0x00c3, + 0x8e6: 0x00c0, 0x8e7: 0x00c0, 0x8e8: 0x00c0, 0x8e9: 0x00c0, + 0x8ea: 0x00c0, 0x8eb: 0x00c0, 0x8ec: 0x00c0, 0x8ed: 0x00c0, 0x8ee: 0x00c0, 0x8ef: 0x00c0, + 0x8f0: 0x00c0, 0x8f1: 0x00c0, 0x8f2: 0x0080, 0x8f3: 0x0080, 0x8f4: 0x0080, 0x8f5: 0x0080, + 0x8f6: 0x0080, 0x8f7: 0x0080, 0x8f8: 0x0080, 0x8f9: 0x0080, 0x8fa: 0x0080, 0x8fb: 0x0080, + // Block 0x24, offset 0x900 + 0x901: 0x00c3, 0x902: 0x00c3, 0x903: 0x00c0, 0x905: 0x00c0, + 0x906: 0x00c0, 0x907: 0x00c0, 0x908: 0x00c0, 0x909: 0x00c0, 0x90a: 0x00c0, + 0x90f: 0x00c0, 0x910: 0x00c0, + 0x913: 0x00c0, 0x914: 0x00c0, 0x915: 0x00c0, 0x916: 0x00c0, 0x917: 0x00c0, + 0x918: 0x00c0, 0x919: 0x00c0, 0x91a: 0x00c0, 0x91b: 0x00c0, 0x91c: 0x00c0, 0x91d: 0x00c0, + 0x91e: 0x00c0, 0x91f: 0x00c0, 0x920: 0x00c0, 0x921: 0x00c0, 0x922: 0x00c0, 0x923: 0x00c0, + 0x924: 0x00c0, 0x925: 0x00c0, 0x926: 0x00c0, 0x927: 0x00c0, 0x928: 0x00c0, + 0x92a: 0x00c0, 0x92b: 0x00c0, 0x92c: 0x00c0, 0x92d: 0x00c0, 0x92e: 0x00c0, 0x92f: 0x00c0, + 0x930: 0x00c0, 0x932: 0x00c0, 0x933: 0x0080, 0x935: 0x00c0, + 0x936: 0x0080, 0x938: 0x00c0, 0x939: 0x00c0, + 0x93c: 0x00c3, 0x93e: 0x00c0, 0x93f: 0x00c0, + // Block 0x25, offset 0x940 + 0x940: 0x00c0, 0x941: 0x00c3, 0x942: 0x00c3, + 0x947: 0x00c3, 0x948: 0x00c3, 0x94b: 0x00c3, + 0x94c: 0x00c3, 0x94d: 0x00c6, 0x951: 0x00c3, + 0x959: 0x0080, 0x95a: 0x0080, 0x95b: 0x0080, 0x95c: 0x00c0, + 0x95e: 0x0080, + 0x966: 0x00c0, 0x967: 0x00c0, 0x968: 0x00c0, 0x969: 0x00c0, + 0x96a: 0x00c0, 0x96b: 0x00c0, 0x96c: 0x00c0, 0x96d: 0x00c0, 0x96e: 0x00c0, 0x96f: 0x00c0, + 0x970: 0x00c3, 0x971: 0x00c3, 0x972: 0x00c0, 0x973: 0x00c0, 0x974: 0x00c0, 0x975: 0x00c3, + // Block 0x26, offset 0x980 + 0x981: 0x00c3, 0x982: 0x00c3, 0x983: 0x00c0, 0x985: 0x00c0, + 0x986: 0x00c0, 0x987: 0x00c0, 0x988: 0x00c0, 0x989: 0x00c0, 0x98a: 0x00c0, 0x98b: 0x00c0, + 0x98c: 0x00c0, 0x98d: 0x00c0, 0x98f: 0x00c0, 0x990: 0x00c0, 0x991: 0x00c0, + 0x993: 0x00c0, 0x994: 0x00c0, 0x995: 0x00c0, 0x996: 0x00c0, 0x997: 0x00c0, + 0x998: 0x00c0, 0x999: 0x00c0, 0x99a: 0x00c0, 0x99b: 0x00c0, 0x99c: 0x00c0, 0x99d: 0x00c0, + 0x99e: 0x00c0, 0x99f: 0x00c0, 0x9a0: 0x00c0, 0x9a1: 0x00c0, 0x9a2: 0x00c0, 0x9a3: 0x00c0, + 0x9a4: 0x00c0, 0x9a5: 0x00c0, 0x9a6: 0x00c0, 0x9a7: 0x00c0, 0x9a8: 0x00c0, + 0x9aa: 0x00c0, 0x9ab: 0x00c0, 0x9ac: 0x00c0, 0x9ad: 0x00c0, 0x9ae: 0x00c0, 0x9af: 0x00c0, + 0x9b0: 0x00c0, 0x9b2: 0x00c0, 0x9b3: 0x00c0, 0x9b5: 0x00c0, + 0x9b6: 0x00c0, 0x9b7: 0x00c0, 0x9b8: 0x00c0, 0x9b9: 0x00c0, + 0x9bc: 0x00c3, 0x9bd: 0x00c0, 0x9be: 0x00c0, 0x9bf: 0x00c0, + // Block 0x27, offset 0x9c0 + 0x9c0: 0x00c0, 0x9c1: 0x00c3, 0x9c2: 0x00c3, 0x9c3: 0x00c3, 0x9c4: 0x00c3, 0x9c5: 0x00c3, + 0x9c7: 0x00c3, 0x9c8: 0x00c3, 0x9c9: 0x00c0, 0x9cb: 0x00c0, + 0x9cc: 0x00c0, 0x9cd: 0x00c6, 0x9d0: 0x00c0, + 0x9e0: 0x00c0, 0x9e1: 0x00c0, 0x9e2: 0x00c3, 0x9e3: 0x00c3, + 0x9e6: 0x00c0, 0x9e7: 0x00c0, 0x9e8: 0x00c0, 0x9e9: 0x00c0, + 0x9ea: 0x00c0, 0x9eb: 0x00c0, 0x9ec: 0x00c0, 0x9ed: 0x00c0, 0x9ee: 0x00c0, 0x9ef: 0x00c0, + 0x9f0: 0x0080, 0x9f1: 0x0080, + 0x9f9: 0x00c0, + // Block 0x28, offset 0xa00 + 0xa01: 0x00c3, 0xa02: 0x00c0, 0xa03: 0x00c0, 0xa05: 0x00c0, + 0xa06: 0x00c0, 0xa07: 0x00c0, 0xa08: 0x00c0, 0xa09: 0x00c0, 0xa0a: 0x00c0, 0xa0b: 0x00c0, + 0xa0c: 0x00c0, 0xa0f: 0x00c0, 0xa10: 0x00c0, + 0xa13: 0x00c0, 0xa14: 0x00c0, 0xa15: 0x00c0, 0xa16: 0x00c0, 0xa17: 0x00c0, + 0xa18: 0x00c0, 0xa19: 0x00c0, 0xa1a: 0x00c0, 0xa1b: 0x00c0, 0xa1c: 0x00c0, 0xa1d: 0x00c0, + 0xa1e: 0x00c0, 0xa1f: 0x00c0, 0xa20: 0x00c0, 0xa21: 0x00c0, 0xa22: 0x00c0, 0xa23: 0x00c0, + 0xa24: 0x00c0, 0xa25: 0x00c0, 0xa26: 0x00c0, 0xa27: 0x00c0, 0xa28: 0x00c0, + 0xa2a: 0x00c0, 0xa2b: 0x00c0, 0xa2c: 0x00c0, 0xa2d: 0x00c0, 0xa2e: 0x00c0, 0xa2f: 0x00c0, + 0xa30: 0x00c0, 0xa32: 0x00c0, 0xa33: 0x00c0, 0xa35: 0x00c0, + 0xa36: 0x00c0, 0xa37: 0x00c0, 0xa38: 0x00c0, 0xa39: 0x00c0, + 0xa3c: 0x00c3, 0xa3d: 0x00c0, 0xa3e: 0x00c0, 0xa3f: 0x00c3, + // Block 0x29, offset 0xa40 + 0xa40: 0x00c0, 0xa41: 0x00c3, 0xa42: 0x00c3, 0xa43: 0x00c3, 0xa44: 0x00c3, + 0xa47: 0x00c0, 0xa48: 0x00c0, 0xa4b: 0x00c0, + 0xa4c: 0x00c0, 0xa4d: 0x00c6, + 0xa56: 0x00c3, 0xa57: 0x00c0, + 0xa5c: 0x0080, 0xa5d: 0x0080, + 0xa5f: 0x00c0, 0xa60: 0x00c0, 0xa61: 0x00c0, 0xa62: 0x00c3, 0xa63: 0x00c3, + 0xa66: 0x00c0, 0xa67: 0x00c0, 0xa68: 0x00c0, 0xa69: 0x00c0, + 0xa6a: 0x00c0, 0xa6b: 0x00c0, 0xa6c: 0x00c0, 0xa6d: 0x00c0, 0xa6e: 0x00c0, 0xa6f: 0x00c0, + 0xa70: 0x0080, 0xa71: 0x00c0, 0xa72: 0x0080, 0xa73: 0x0080, 0xa74: 0x0080, 0xa75: 0x0080, + 0xa76: 0x0080, 0xa77: 0x0080, + // Block 0x2a, offset 0xa80 + 0xa82: 0x00c3, 0xa83: 0x00c0, 0xa85: 0x00c0, + 0xa86: 0x00c0, 0xa87: 0x00c0, 0xa88: 0x00c0, 0xa89: 0x00c0, 0xa8a: 0x00c0, + 0xa8e: 0x00c0, 0xa8f: 0x00c0, 0xa90: 0x00c0, + 0xa92: 0x00c0, 0xa93: 0x00c0, 0xa94: 0x00c0, 0xa95: 0x00c0, + 0xa99: 0x00c0, 0xa9a: 0x00c0, 0xa9c: 0x00c0, + 0xa9e: 0x00c0, 0xa9f: 0x00c0, 0xaa3: 0x00c0, + 0xaa4: 0x00c0, 0xaa8: 0x00c0, 0xaa9: 0x00c0, + 0xaaa: 0x00c0, 0xaae: 0x00c0, 0xaaf: 0x00c0, + 0xab0: 0x00c0, 0xab1: 0x00c0, 0xab2: 0x00c0, 0xab3: 0x00c0, 0xab4: 0x00c0, 0xab5: 0x00c0, + 0xab6: 0x00c0, 0xab7: 0x00c0, 0xab8: 0x00c0, 0xab9: 0x00c0, + 0xabe: 0x00c0, 0xabf: 0x00c0, + // Block 0x2b, offset 0xac0 + 0xac0: 0x00c3, 0xac1: 0x00c0, 0xac2: 0x00c0, + 0xac6: 0x00c0, 0xac7: 0x00c0, 0xac8: 0x00c0, 0xaca: 0x00c0, 0xacb: 0x00c0, + 0xacc: 0x00c0, 0xacd: 0x00c6, 0xad0: 0x00c0, + 0xad7: 0x00c0, + 0xae6: 0x00c0, 0xae7: 0x00c0, 0xae8: 0x00c0, 0xae9: 0x00c0, + 0xaea: 0x00c0, 0xaeb: 0x00c0, 0xaec: 0x00c0, 0xaed: 0x00c0, 0xaee: 0x00c0, 0xaef: 0x00c0, + 0xaf0: 0x0080, 0xaf1: 0x0080, 0xaf2: 0x0080, 0xaf3: 0x0080, 0xaf4: 0x0080, 0xaf5: 0x0080, + 0xaf6: 0x0080, 0xaf7: 0x0080, 0xaf8: 0x0080, 0xaf9: 0x0080, 0xafa: 0x0080, + // Block 0x2c, offset 0xb00 + 0xb00: 0x00c3, 0xb01: 0x00c0, 0xb02: 0x00c0, 0xb03: 0x00c0, 0xb05: 0x00c0, + 0xb06: 0x00c0, 0xb07: 0x00c0, 0xb08: 0x00c0, 0xb09: 0x00c0, 0xb0a: 0x00c0, 0xb0b: 0x00c0, + 0xb0c: 0x00c0, 0xb0e: 0x00c0, 0xb0f: 0x00c0, 0xb10: 0x00c0, + 0xb12: 0x00c0, 0xb13: 0x00c0, 0xb14: 0x00c0, 0xb15: 0x00c0, 0xb16: 0x00c0, 0xb17: 0x00c0, + 0xb18: 0x00c0, 0xb19: 0x00c0, 0xb1a: 0x00c0, 0xb1b: 0x00c0, 0xb1c: 0x00c0, 0xb1d: 0x00c0, + 0xb1e: 0x00c0, 0xb1f: 0x00c0, 0xb20: 0x00c0, 0xb21: 0x00c0, 0xb22: 0x00c0, 0xb23: 0x00c0, + 0xb24: 0x00c0, 0xb25: 0x00c0, 0xb26: 0x00c0, 0xb27: 0x00c0, 0xb28: 0x00c0, + 0xb2a: 0x00c0, 0xb2b: 0x00c0, 0xb2c: 0x00c0, 0xb2d: 0x00c0, 0xb2e: 0x00c0, 0xb2f: 0x00c0, + 0xb30: 0x00c0, 0xb31: 0x00c0, 0xb32: 0x00c0, 0xb33: 0x00c0, 0xb34: 0x00c0, 0xb35: 0x00c0, + 0xb36: 0x00c0, 0xb37: 0x00c0, 0xb38: 0x00c0, 0xb39: 0x00c0, + 0xb3d: 0x00c0, 0xb3e: 0x00c3, 0xb3f: 0x00c3, + // Block 0x2d, offset 0xb40 + 0xb40: 0x00c3, 0xb41: 0x00c0, 0xb42: 0x00c0, 0xb43: 0x00c0, 0xb44: 0x00c0, + 0xb46: 0x00c3, 0xb47: 0x00c3, 0xb48: 0x00c3, 0xb4a: 0x00c3, 0xb4b: 0x00c3, + 0xb4c: 0x00c3, 0xb4d: 0x00c6, + 0xb55: 0x00c3, 0xb56: 0x00c3, + 0xb58: 0x00c0, 0xb59: 0x00c0, 0xb5a: 0x00c0, + 0xb60: 0x00c0, 0xb61: 0x00c0, 0xb62: 0x00c3, 0xb63: 0x00c3, + 0xb66: 0x00c0, 0xb67: 0x00c0, 0xb68: 0x00c0, 0xb69: 0x00c0, + 0xb6a: 0x00c0, 0xb6b: 0x00c0, 0xb6c: 0x00c0, 0xb6d: 0x00c0, 0xb6e: 0x00c0, 0xb6f: 0x00c0, + 0xb78: 0x0080, 0xb79: 0x0080, 0xb7a: 0x0080, 0xb7b: 0x0080, + 0xb7c: 0x0080, 0xb7d: 0x0080, 0xb7e: 0x0080, 0xb7f: 0x0080, + // Block 0x2e, offset 0xb80 + 0xb80: 0x00c0, 0xb81: 0x00c3, 0xb82: 0x00c0, 0xb83: 0x00c0, 0xb85: 0x00c0, + 0xb86: 0x00c0, 0xb87: 0x00c0, 0xb88: 0x00c0, 0xb89: 0x00c0, 0xb8a: 0x00c0, 0xb8b: 0x00c0, + 0xb8c: 0x00c0, 0xb8e: 0x00c0, 0xb8f: 0x00c0, 0xb90: 0x00c0, + 0xb92: 0x00c0, 0xb93: 0x00c0, 0xb94: 0x00c0, 0xb95: 0x00c0, 0xb96: 0x00c0, 0xb97: 0x00c0, + 0xb98: 0x00c0, 0xb99: 0x00c0, 0xb9a: 0x00c0, 0xb9b: 0x00c0, 0xb9c: 0x00c0, 0xb9d: 0x00c0, + 0xb9e: 0x00c0, 0xb9f: 0x00c0, 0xba0: 0x00c0, 0xba1: 0x00c0, 0xba2: 0x00c0, 0xba3: 0x00c0, + 0xba4: 0x00c0, 0xba5: 0x00c0, 0xba6: 0x00c0, 0xba7: 0x00c0, 0xba8: 0x00c0, + 0xbaa: 0x00c0, 0xbab: 0x00c0, 0xbac: 0x00c0, 0xbad: 0x00c0, 0xbae: 0x00c0, 0xbaf: 0x00c0, + 0xbb0: 0x00c0, 0xbb1: 0x00c0, 0xbb2: 0x00c0, 0xbb3: 0x00c0, 0xbb5: 0x00c0, + 0xbb6: 0x00c0, 0xbb7: 0x00c0, 0xbb8: 0x00c0, 0xbb9: 0x00c0, + 0xbbc: 0x00c3, 0xbbd: 0x00c0, 0xbbe: 0x00c0, 0xbbf: 0x00c3, + // Block 0x2f, offset 0xbc0 + 0xbc0: 0x00c0, 0xbc1: 0x00c0, 0xbc2: 0x00c0, 0xbc3: 0x00c0, 0xbc4: 0x00c0, + 0xbc6: 0x00c3, 0xbc7: 0x00c0, 0xbc8: 0x00c0, 0xbca: 0x00c0, 0xbcb: 0x00c0, + 0xbcc: 0x00c3, 0xbcd: 0x00c6, + 0xbd5: 0x00c0, 0xbd6: 0x00c0, + 0xbde: 0x00c0, 0xbe0: 0x00c0, 0xbe1: 0x00c0, 0xbe2: 0x00c3, 0xbe3: 0x00c3, + 0xbe6: 0x00c0, 0xbe7: 0x00c0, 0xbe8: 0x00c0, 0xbe9: 0x00c0, + 0xbea: 0x00c0, 0xbeb: 0x00c0, 0xbec: 0x00c0, 0xbed: 0x00c0, 0xbee: 0x00c0, 0xbef: 0x00c0, + 0xbf1: 0x00c0, 0xbf2: 0x00c0, + // Block 0x30, offset 0xc00 + 0xc01: 0x00c3, 0xc02: 0x00c0, 0xc03: 0x00c0, 0xc05: 0x00c0, + 0xc06: 0x00c0, 0xc07: 0x00c0, 0xc08: 0x00c0, 0xc09: 0x00c0, 0xc0a: 0x00c0, 0xc0b: 0x00c0, + 0xc0c: 0x00c0, 0xc0e: 0x00c0, 0xc0f: 0x00c0, 0xc10: 0x00c0, + 0xc12: 0x00c0, 0xc13: 0x00c0, 0xc14: 0x00c0, 0xc15: 0x00c0, 0xc16: 0x00c0, 0xc17: 0x00c0, + 0xc18: 0x00c0, 0xc19: 0x00c0, 0xc1a: 0x00c0, 0xc1b: 0x00c0, 0xc1c: 0x00c0, 0xc1d: 0x00c0, + 0xc1e: 0x00c0, 0xc1f: 0x00c0, 0xc20: 0x00c0, 0xc21: 0x00c0, 0xc22: 0x00c0, 0xc23: 0x00c0, + 0xc24: 0x00c0, 0xc25: 0x00c0, 0xc26: 0x00c0, 0xc27: 0x00c0, 0xc28: 0x00c0, 0xc29: 0x00c0, + 0xc2a: 0x00c0, 0xc2b: 0x00c0, 0xc2c: 0x00c0, 0xc2d: 0x00c0, 0xc2e: 0x00c0, 0xc2f: 0x00c0, + 0xc30: 0x00c0, 0xc31: 0x00c0, 0xc32: 0x00c0, 0xc33: 0x00c0, 0xc34: 0x00c0, 0xc35: 0x00c0, + 0xc36: 0x00c0, 0xc37: 0x00c0, 0xc38: 0x00c0, 0xc39: 0x00c0, 0xc3a: 0x00c0, + 0xc3d: 0x00c0, 0xc3e: 0x00c0, 0xc3f: 0x00c0, + // Block 0x31, offset 0xc40 + 0xc40: 0x00c0, 0xc41: 0x00c3, 0xc42: 0x00c3, 0xc43: 0x00c3, 0xc44: 0x00c3, + 0xc46: 0x00c0, 0xc47: 0x00c0, 0xc48: 0x00c0, 0xc4a: 0x00c0, 0xc4b: 0x00c0, + 0xc4c: 0x00c0, 0xc4d: 0x00c6, 0xc4e: 0x00c0, 0xc4f: 0x0080, + 0xc54: 0x00c0, 0xc55: 0x00c0, 0xc56: 0x00c0, 0xc57: 0x00c0, + 0xc58: 0x0080, 0xc59: 0x0080, 0xc5a: 0x0080, 0xc5b: 0x0080, 0xc5c: 0x0080, 0xc5d: 0x0080, + 0xc5e: 0x0080, 0xc5f: 0x00c0, 0xc60: 0x00c0, 0xc61: 0x00c0, 0xc62: 0x00c3, 0xc63: 0x00c3, + 0xc66: 0x00c0, 0xc67: 0x00c0, 0xc68: 0x00c0, 0xc69: 0x00c0, + 0xc6a: 0x00c0, 0xc6b: 0x00c0, 0xc6c: 0x00c0, 0xc6d: 0x00c0, 0xc6e: 0x00c0, 0xc6f: 0x00c0, + 0xc70: 0x0080, 0xc71: 0x0080, 0xc72: 0x0080, 0xc73: 0x0080, 0xc74: 0x0080, 0xc75: 0x0080, + 0xc76: 0x0080, 0xc77: 0x0080, 0xc78: 0x0080, 0xc79: 0x0080, 0xc7a: 0x00c0, 0xc7b: 0x00c0, + 0xc7c: 0x00c0, 0xc7d: 0x00c0, 0xc7e: 0x00c0, 0xc7f: 0x00c0, + // Block 0x32, offset 0xc80 + 0xc82: 0x00c0, 0xc83: 0x00c0, 0xc85: 0x00c0, + 0xc86: 0x00c0, 0xc87: 0x00c0, 0xc88: 0x00c0, 0xc89: 0x00c0, 0xc8a: 0x00c0, 0xc8b: 0x00c0, + 0xc8c: 0x00c0, 0xc8d: 0x00c0, 0xc8e: 0x00c0, 0xc8f: 0x00c0, 0xc90: 0x00c0, 0xc91: 0x00c0, + 0xc92: 0x00c0, 0xc93: 0x00c0, 0xc94: 0x00c0, 0xc95: 0x00c0, 0xc96: 0x00c0, + 0xc9a: 0x00c0, 0xc9b: 0x00c0, 0xc9c: 0x00c0, 0xc9d: 0x00c0, + 0xc9e: 0x00c0, 0xc9f: 0x00c0, 0xca0: 0x00c0, 0xca1: 0x00c0, 0xca2: 0x00c0, 0xca3: 0x00c0, + 0xca4: 0x00c0, 0xca5: 0x00c0, 0xca6: 0x00c0, 0xca7: 0x00c0, 0xca8: 0x00c0, 0xca9: 0x00c0, + 0xcaa: 0x00c0, 0xcab: 0x00c0, 0xcac: 0x00c0, 0xcad: 0x00c0, 0xcae: 0x00c0, 0xcaf: 0x00c0, + 0xcb0: 0x00c0, 0xcb1: 0x00c0, 0xcb3: 0x00c0, 0xcb4: 0x00c0, 0xcb5: 0x00c0, + 0xcb6: 0x00c0, 0xcb7: 0x00c0, 0xcb8: 0x00c0, 0xcb9: 0x00c0, 0xcba: 0x00c0, 0xcbb: 0x00c0, + 0xcbd: 0x00c0, + // Block 0x33, offset 0xcc0 + 0xcc0: 0x00c0, 0xcc1: 0x00c0, 0xcc2: 0x00c0, 0xcc3: 0x00c0, 0xcc4: 0x00c0, 0xcc5: 0x00c0, + 0xcc6: 0x00c0, 0xcca: 0x00c6, + 0xccf: 0x00c0, 0xcd0: 0x00c0, 0xcd1: 0x00c0, + 0xcd2: 0x00c3, 0xcd3: 0x00c3, 0xcd4: 0x00c3, 0xcd6: 0x00c3, + 0xcd8: 0x00c0, 0xcd9: 0x00c0, 0xcda: 0x00c0, 0xcdb: 0x00c0, 0xcdc: 0x00c0, 0xcdd: 0x00c0, + 0xcde: 0x00c0, 0xcdf: 0x00c0, + 0xce6: 0x00c0, 0xce7: 0x00c0, 0xce8: 0x00c0, 0xce9: 0x00c0, + 0xcea: 0x00c0, 0xceb: 0x00c0, 0xcec: 0x00c0, 0xced: 0x00c0, 0xcee: 0x00c0, 0xcef: 0x00c0, + 0xcf2: 0x00c0, 0xcf3: 0x00c0, 0xcf4: 0x0080, + // Block 0x34, offset 0xd00 + 0xd01: 0x00c0, 0xd02: 0x00c0, 0xd03: 0x00c0, 0xd04: 0x00c0, 0xd05: 0x00c0, + 0xd06: 0x00c0, 0xd07: 0x00c0, 0xd08: 0x00c0, 0xd09: 0x00c0, 0xd0a: 0x00c0, 0xd0b: 0x00c0, + 0xd0c: 0x00c0, 0xd0d: 0x00c0, 0xd0e: 0x00c0, 0xd0f: 0x00c0, 0xd10: 0x00c0, 0xd11: 0x00c0, + 0xd12: 0x00c0, 0xd13: 0x00c0, 0xd14: 0x00c0, 0xd15: 0x00c0, 0xd16: 0x00c0, 0xd17: 0x00c0, + 0xd18: 0x00c0, 0xd19: 0x00c0, 0xd1a: 0x00c0, 0xd1b: 0x00c0, 0xd1c: 0x00c0, 0xd1d: 0x00c0, + 0xd1e: 0x00c0, 0xd1f: 0x00c0, 0xd20: 0x00c0, 0xd21: 0x00c0, 0xd22: 0x00c0, 0xd23: 0x00c0, + 0xd24: 0x00c0, 0xd25: 0x00c0, 0xd26: 0x00c0, 0xd27: 0x00c0, 0xd28: 0x00c0, 0xd29: 0x00c0, + 0xd2a: 0x00c0, 0xd2b: 0x00c0, 0xd2c: 0x00c0, 0xd2d: 0x00c0, 0xd2e: 0x00c0, 0xd2f: 0x00c0, + 0xd30: 0x00c0, 0xd31: 0x00c3, 0xd32: 0x00c0, 0xd33: 0x0080, 0xd34: 0x00c3, 0xd35: 0x00c3, + 0xd36: 0x00c3, 0xd37: 0x00c3, 0xd38: 0x00c3, 0xd39: 0x00c3, 0xd3a: 0x00c6, + 0xd3f: 0x0080, + // Block 0x35, offset 0xd40 + 0xd40: 0x00c0, 0xd41: 0x00c0, 0xd42: 0x00c0, 0xd43: 0x00c0, 0xd44: 0x00c0, 0xd45: 0x00c0, + 0xd46: 0x00c0, 0xd47: 0x00c3, 0xd48: 0x00c3, 0xd49: 0x00c3, 0xd4a: 0x00c3, 0xd4b: 0x00c3, + 0xd4c: 0x00c3, 0xd4d: 0x00c3, 0xd4e: 0x00c3, 0xd4f: 0x0080, 0xd50: 0x00c0, 0xd51: 0x00c0, + 0xd52: 0x00c0, 0xd53: 0x00c0, 0xd54: 0x00c0, 0xd55: 0x00c0, 0xd56: 0x00c0, 0xd57: 0x00c0, + 0xd58: 0x00c0, 0xd59: 0x00c0, 0xd5a: 0x0080, 0xd5b: 0x0080, + // Block 0x36, offset 0xd80 + 0xd81: 0x00c0, 0xd82: 0x00c0, 0xd84: 0x00c0, + 0xd87: 0x00c0, 0xd88: 0x00c0, 0xd8a: 0x00c0, + 0xd8d: 0x00c0, + 0xd94: 0x00c0, 0xd95: 0x00c0, 0xd96: 0x00c0, 0xd97: 0x00c0, + 0xd99: 0x00c0, 0xd9a: 0x00c0, 0xd9b: 0x00c0, 0xd9c: 0x00c0, 0xd9d: 0x00c0, + 0xd9e: 0x00c0, 0xd9f: 0x00c0, 0xda1: 0x00c0, 0xda2: 0x00c0, 0xda3: 0x00c0, + 0xda5: 0x00c0, 0xda7: 0x00c0, + 0xdaa: 0x00c0, 0xdab: 0x00c0, 0xdad: 0x00c0, 0xdae: 0x00c0, 0xdaf: 0x00c0, + 0xdb0: 0x00c0, 0xdb1: 0x00c3, 0xdb2: 0x00c0, 0xdb3: 0x0080, 0xdb4: 0x00c3, 0xdb5: 0x00c3, + 0xdb6: 0x00c3, 0xdb7: 0x00c3, 0xdb8: 0x00c3, 0xdb9: 0x00c3, 0xdbb: 0x00c3, + 0xdbc: 0x00c3, 0xdbd: 0x00c0, + // Block 0x37, offset 0xdc0 + 0xdc0: 0x00c0, 0xdc1: 0x00c0, 0xdc2: 0x00c0, 0xdc3: 0x00c0, 0xdc4: 0x00c0, + 0xdc6: 0x00c0, 0xdc8: 0x00c3, 0xdc9: 0x00c3, 0xdca: 0x00c3, 0xdcb: 0x00c3, + 0xdcc: 0x00c3, 0xdcd: 0x00c3, 0xdd0: 0x00c0, 0xdd1: 0x00c0, + 0xdd2: 0x00c0, 0xdd3: 0x00c0, 0xdd4: 0x00c0, 0xdd5: 0x00c0, 0xdd6: 0x00c0, 0xdd7: 0x00c0, + 0xdd8: 0x00c0, 0xdd9: 0x00c0, 0xddc: 0x0080, 0xddd: 0x0080, + 0xdde: 0x00c0, 0xddf: 0x00c0, + // Block 0x38, offset 0xe00 + 0xe00: 0x00c0, 0xe01: 0x0080, 0xe02: 0x0080, 0xe03: 0x0080, 0xe04: 0x0080, 0xe05: 0x0080, + 0xe06: 0x0080, 0xe07: 0x0080, 0xe08: 0x0080, 0xe09: 0x0080, 0xe0a: 0x0080, 0xe0b: 0x00c0, + 0xe0c: 0x0080, 0xe0d: 0x0080, 0xe0e: 0x0080, 0xe0f: 0x0080, 0xe10: 0x0080, 0xe11: 0x0080, + 0xe12: 0x0080, 0xe13: 0x0080, 0xe14: 0x0080, 0xe15: 0x0080, 0xe16: 0x0080, 0xe17: 0x0080, + 0xe18: 0x00c3, 0xe19: 0x00c3, 0xe1a: 0x0080, 0xe1b: 0x0080, 0xe1c: 0x0080, 0xe1d: 0x0080, + 0xe1e: 0x0080, 0xe1f: 0x0080, 0xe20: 0x00c0, 0xe21: 0x00c0, 0xe22: 0x00c0, 0xe23: 0x00c0, + 0xe24: 0x00c0, 0xe25: 0x00c0, 0xe26: 0x00c0, 0xe27: 0x00c0, 0xe28: 0x00c0, 0xe29: 0x00c0, + 0xe2a: 0x0080, 0xe2b: 0x0080, 0xe2c: 0x0080, 0xe2d: 0x0080, 0xe2e: 0x0080, 0xe2f: 0x0080, + 0xe30: 0x0080, 0xe31: 0x0080, 0xe32: 0x0080, 0xe33: 0x0080, 0xe34: 0x0080, 0xe35: 0x00c3, + 0xe36: 0x0080, 0xe37: 0x00c3, 0xe38: 0x0080, 0xe39: 0x00c3, 0xe3a: 0x0080, 0xe3b: 0x0080, + 0xe3c: 0x0080, 0xe3d: 0x0080, 0xe3e: 0x00c0, 0xe3f: 0x00c0, + // Block 0x39, offset 0xe40 + 0xe40: 0x00c0, 0xe41: 0x00c0, 0xe42: 0x00c0, 0xe43: 0x0080, 0xe44: 0x00c0, 0xe45: 0x00c0, + 0xe46: 0x00c0, 0xe47: 0x00c0, 0xe49: 0x00c0, 0xe4a: 0x00c0, 0xe4b: 0x00c0, + 0xe4c: 0x00c0, 0xe4d: 0x0080, 0xe4e: 0x00c0, 0xe4f: 0x00c0, 0xe50: 0x00c0, 0xe51: 0x00c0, + 0xe52: 0x0080, 0xe53: 0x00c0, 0xe54: 0x00c0, 0xe55: 0x00c0, 0xe56: 0x00c0, 0xe57: 0x0080, + 0xe58: 0x00c0, 0xe59: 0x00c0, 0xe5a: 0x00c0, 0xe5b: 0x00c0, 0xe5c: 0x0080, 0xe5d: 0x00c0, + 0xe5e: 0x00c0, 0xe5f: 0x00c0, 0xe60: 0x00c0, 0xe61: 0x00c0, 0xe62: 0x00c0, 0xe63: 0x00c0, + 0xe64: 0x00c0, 0xe65: 0x00c0, 0xe66: 0x00c0, 0xe67: 0x00c0, 0xe68: 0x00c0, 0xe69: 0x0080, + 0xe6a: 0x00c0, 0xe6b: 0x00c0, 0xe6c: 0x00c0, + 0xe71: 0x00c3, 0xe72: 0x00c3, 0xe73: 0x0083, 0xe74: 0x00c3, 0xe75: 0x0083, + 0xe76: 0x0083, 0xe77: 0x0083, 0xe78: 0x0083, 0xe79: 0x0083, 0xe7a: 0x00c3, 0xe7b: 0x00c3, + 0xe7c: 0x00c3, 0xe7d: 0x00c3, 0xe7e: 0x00c3, 0xe7f: 0x00c0, + // Block 0x3a, offset 0xe80 + 0xe80: 0x00c3, 0xe81: 0x0083, 0xe82: 0x00c3, 0xe83: 0x00c3, 0xe84: 0x00c6, 0xe85: 0x0080, + 0xe86: 0x00c3, 0xe87: 0x00c3, 0xe88: 0x00c0, 0xe89: 0x00c0, 0xe8a: 0x00c0, 0xe8b: 0x00c0, + 0xe8c: 0x00c0, 0xe8d: 0x00c3, 0xe8e: 0x00c3, 0xe8f: 0x00c3, 0xe90: 0x00c3, 0xe91: 0x00c3, + 0xe92: 0x00c3, 0xe93: 0x0083, 0xe94: 0x00c3, 0xe95: 0x00c3, 0xe96: 0x00c3, 0xe97: 0x00c3, + 0xe99: 0x00c3, 0xe9a: 0x00c3, 0xe9b: 0x00c3, 0xe9c: 0x00c3, 0xe9d: 0x0083, + 0xe9e: 0x00c3, 0xe9f: 0x00c3, 0xea0: 0x00c3, 0xea1: 0x00c3, 0xea2: 0x0083, 0xea3: 0x00c3, + 0xea4: 0x00c3, 0xea5: 0x00c3, 0xea6: 0x00c3, 0xea7: 0x0083, 0xea8: 0x00c3, 0xea9: 0x00c3, + 0xeaa: 0x00c3, 0xeab: 0x00c3, 0xeac: 0x0083, 0xead: 0x00c3, 0xeae: 0x00c3, 0xeaf: 0x00c3, + 0xeb0: 0x00c3, 0xeb1: 0x00c3, 0xeb2: 0x00c3, 0xeb3: 0x00c3, 0xeb4: 0x00c3, 0xeb5: 0x00c3, + 0xeb6: 0x00c3, 0xeb7: 0x00c3, 0xeb8: 0x00c3, 0xeb9: 0x0083, 0xeba: 0x00c3, 0xebb: 0x00c3, + 0xebc: 0x00c3, 0xebe: 0x0080, 0xebf: 0x0080, + // Block 0x3b, offset 0xec0 + 0xec0: 0x0080, 0xec1: 0x0080, 0xec2: 0x0080, 0xec3: 0x0080, 0xec4: 0x0080, 0xec5: 0x0080, + 0xec6: 0x00c3, 0xec7: 0x0080, 0xec8: 0x0080, 0xec9: 0x0080, 0xeca: 0x0080, 0xecb: 0x0080, + 0xecc: 0x0080, 0xece: 0x0080, 0xecf: 0x0080, 0xed0: 0x0080, 0xed1: 0x0080, + 0xed2: 0x0080, 0xed3: 0x0080, 0xed4: 0x0080, 0xed5: 0x0080, 0xed6: 0x0080, 0xed7: 0x0080, + 0xed8: 0x0080, 0xed9: 0x0080, 0xeda: 0x0080, + // Block 0x3c, offset 0xf00 + 0xf00: 0x00c0, 0xf01: 0x00c0, 0xf02: 0x00c0, 0xf03: 0x00c0, 0xf04: 0x00c0, 0xf05: 0x00c0, + 0xf06: 0x00c0, 0xf07: 0x00c0, 0xf08: 0x00c0, 0xf09: 0x00c0, 0xf0a: 0x00c0, 0xf0b: 0x00c0, + 0xf0c: 0x00c0, 0xf0d: 0x00c0, 0xf0e: 0x00c0, 0xf0f: 0x00c0, 0xf10: 0x00c0, 0xf11: 0x00c0, + 0xf12: 0x00c0, 0xf13: 0x00c0, 0xf14: 0x00c0, 0xf15: 0x00c0, 0xf16: 0x00c0, 0xf17: 0x00c0, + 0xf18: 0x00c0, 0xf19: 0x00c0, 0xf1a: 0x00c0, 0xf1b: 0x00c0, 0xf1c: 0x00c0, 0xf1d: 0x00c0, + 0xf1e: 0x00c0, 0xf1f: 0x00c0, 0xf20: 0x00c0, 0xf21: 0x00c0, 0xf22: 0x00c0, 0xf23: 0x00c0, + 0xf24: 0x00c0, 0xf25: 0x00c0, 0xf26: 0x00c0, 0xf27: 0x00c0, 0xf28: 0x00c0, 0xf29: 0x00c0, + 0xf2a: 0x00c0, 0xf2b: 0x00c0, 0xf2c: 0x00c0, 0xf2d: 0x00c3, 0xf2e: 0x00c3, 0xf2f: 0x00c3, + 0xf30: 0x00c3, 0xf31: 0x00c0, 0xf32: 0x00c3, 0xf33: 0x00c3, 0xf34: 0x00c3, 0xf35: 0x00c3, + 0xf36: 0x00c3, 0xf37: 0x00c3, 0xf38: 0x00c0, 0xf39: 0x00c6, 0xf3a: 0x00c6, 0xf3b: 0x00c0, + 0xf3c: 0x00c0, 0xf3d: 0x00c3, 0xf3e: 0x00c3, 0xf3f: 0x00c0, + // Block 0x3d, offset 0xf40 + 0xf40: 0x00c0, 0xf41: 0x00c0, 0xf42: 0x00c0, 0xf43: 0x00c0, 0xf44: 0x00c0, 0xf45: 0x00c0, + 0xf46: 0x00c0, 0xf47: 0x00c0, 0xf48: 0x00c0, 0xf49: 0x00c0, 0xf4a: 0x0080, 0xf4b: 0x0080, + 0xf4c: 0x0080, 0xf4d: 0x0080, 0xf4e: 0x0080, 0xf4f: 0x0080, 0xf50: 0x00c0, 0xf51: 0x00c0, + 0xf52: 0x00c0, 0xf53: 0x00c0, 0xf54: 0x00c0, 0xf55: 0x00c0, 0xf56: 0x00c0, 0xf57: 0x00c0, + 0xf58: 0x00c3, 0xf59: 0x00c3, 0xf5a: 0x00c0, 0xf5b: 0x00c0, 0xf5c: 0x00c0, 0xf5d: 0x00c0, + 0xf5e: 0x00c3, 0xf5f: 0x00c3, 0xf60: 0x00c3, 0xf61: 0x00c0, 0xf62: 0x00c0, 0xf63: 0x00c0, + 0xf64: 0x00c0, 0xf65: 0x00c0, 0xf66: 0x00c0, 0xf67: 0x00c0, 0xf68: 0x00c0, 0xf69: 0x00c0, + 0xf6a: 0x00c0, 0xf6b: 0x00c0, 0xf6c: 0x00c0, 0xf6d: 0x00c0, 0xf6e: 0x00c0, 0xf6f: 0x00c0, + 0xf70: 0x00c0, 0xf71: 0x00c3, 0xf72: 0x00c3, 0xf73: 0x00c3, 0xf74: 0x00c3, 0xf75: 0x00c0, + 0xf76: 0x00c0, 0xf77: 0x00c0, 0xf78: 0x00c0, 0xf79: 0x00c0, 0xf7a: 0x00c0, 0xf7b: 0x00c0, + 0xf7c: 0x00c0, 0xf7d: 0x00c0, 0xf7e: 0x00c0, 0xf7f: 0x00c0, + // Block 0x3e, offset 0xf80 + 0xf80: 0x00c0, 0xf81: 0x00c0, 0xf82: 0x00c3, 0xf83: 0x00c0, 0xf84: 0x00c0, 0xf85: 0x00c3, + 0xf86: 0x00c3, 0xf87: 0x00c0, 0xf88: 0x00c0, 0xf89: 0x00c0, 0xf8a: 0x00c0, 0xf8b: 0x00c0, + 0xf8c: 0x00c0, 0xf8d: 0x00c3, 0xf8e: 0x00c0, 0xf8f: 0x00c0, 0xf90: 0x00c0, 0xf91: 0x00c0, + 0xf92: 0x00c0, 0xf93: 0x00c0, 0xf94: 0x00c0, 0xf95: 0x00c0, 0xf96: 0x00c0, 0xf97: 0x00c0, + 0xf98: 0x00c0, 0xf99: 0x00c0, 0xf9a: 0x00c0, 0xf9b: 0x00c0, 0xf9c: 0x00c0, 0xf9d: 0x00c3, + 0xf9e: 0x0080, 0xf9f: 0x0080, 0xfa0: 0x00c0, 0xfa1: 0x00c0, 0xfa2: 0x00c0, 0xfa3: 0x00c0, + 0xfa4: 0x00c0, 0xfa5: 0x00c0, 0xfa6: 0x00c0, 0xfa7: 0x00c0, 0xfa8: 0x00c0, 0xfa9: 0x00c0, + 0xfaa: 0x00c0, 0xfab: 0x00c0, 0xfac: 0x00c0, 0xfad: 0x00c0, 0xfae: 0x00c0, 0xfaf: 0x00c0, + 0xfb0: 0x00c0, 0xfb1: 0x00c0, 0xfb2: 0x00c0, 0xfb3: 0x00c0, 0xfb4: 0x00c0, 0xfb5: 0x00c0, + 0xfb6: 0x00c0, 0xfb7: 0x00c0, 0xfb8: 0x00c0, 0xfb9: 0x00c0, 0xfba: 0x00c0, 0xfbb: 0x00c0, + 0xfbc: 0x00c0, 0xfbd: 0x00c0, 0xfbe: 0x00c0, 0xfbf: 0x00c0, + // Block 0x3f, offset 0xfc0 + 0xfc0: 0x00c0, 0xfc1: 0x00c0, 0xfc2: 0x00c0, 0xfc3: 0x00c0, 0xfc4: 0x00c0, 0xfc5: 0x00c0, + 0xfc7: 0x00c0, + 0xfcd: 0x00c0, 0xfd0: 0x00c0, 0xfd1: 0x00c0, + 0xfd2: 0x00c0, 0xfd3: 0x00c0, 0xfd4: 0x00c0, 0xfd5: 0x00c0, 0xfd6: 0x00c0, 0xfd7: 0x00c0, + 0xfd8: 0x00c0, 0xfd9: 0x00c0, 0xfda: 0x00c0, 0xfdb: 0x00c0, 0xfdc: 0x00c0, 0xfdd: 0x00c0, + 0xfde: 0x00c0, 0xfdf: 0x00c0, 0xfe0: 0x00c0, 0xfe1: 0x00c0, 0xfe2: 0x00c0, 0xfe3: 0x00c0, + 0xfe4: 0x00c0, 0xfe5: 0x00c0, 0xfe6: 0x00c0, 0xfe7: 0x00c0, 0xfe8: 0x00c0, 0xfe9: 0x00c0, + 0xfea: 0x00c0, 0xfeb: 0x00c0, 0xfec: 0x00c0, 0xfed: 0x00c0, 0xfee: 0x00c0, 0xfef: 0x00c0, + 0xff0: 0x00c0, 0xff1: 0x00c0, 0xff2: 0x00c0, 0xff3: 0x00c0, 0xff4: 0x00c0, 0xff5: 0x00c0, + 0xff6: 0x00c0, 0xff7: 0x00c0, 0xff8: 0x00c0, 0xff9: 0x00c0, 0xffa: 0x00c0, 0xffb: 0x0080, + 0xffc: 0x0080, 0xffd: 0x00c0, 0xffe: 0x00c0, 0xfff: 0x00c0, + // Block 0x40, offset 0x1000 + 0x1000: 0x0040, 0x1001: 0x0040, 0x1002: 0x0040, 0x1003: 0x0040, 0x1004: 0x0040, 0x1005: 0x0040, + 0x1006: 0x0040, 0x1007: 0x0040, 0x1008: 0x0040, 0x1009: 0x0040, 0x100a: 0x0040, 0x100b: 0x0040, + 0x100c: 0x0040, 0x100d: 0x0040, 0x100e: 0x0040, 0x100f: 0x0040, 0x1010: 0x0040, 0x1011: 0x0040, + 0x1012: 0x0040, 0x1013: 0x0040, 0x1014: 0x0040, 0x1015: 0x0040, 0x1016: 0x0040, 0x1017: 0x0040, + 0x1018: 0x0040, 0x1019: 0x0040, 0x101a: 0x0040, 0x101b: 0x0040, 0x101c: 0x0040, 0x101d: 0x0040, + 0x101e: 0x0040, 0x101f: 0x0040, 0x1020: 0x0040, 0x1021: 0x0040, 0x1022: 0x0040, 0x1023: 0x0040, + 0x1024: 0x0040, 0x1025: 0x0040, 0x1026: 0x0040, 0x1027: 0x0040, 0x1028: 0x0040, 0x1029: 0x0040, + 0x102a: 0x0040, 0x102b: 0x0040, 0x102c: 0x0040, 0x102d: 0x0040, 0x102e: 0x0040, 0x102f: 0x0040, + 0x1030: 0x0040, 0x1031: 0x0040, 0x1032: 0x0040, 0x1033: 0x0040, 0x1034: 0x0040, 0x1035: 0x0040, + 0x1036: 0x0040, 0x1037: 0x0040, 0x1038: 0x0040, 0x1039: 0x0040, 0x103a: 0x0040, 0x103b: 0x0040, + 0x103c: 0x0040, 0x103d: 0x0040, 0x103e: 0x0040, 0x103f: 0x0040, + // Block 0x41, offset 0x1040 + 0x1040: 0x00c0, 0x1041: 0x00c0, 0x1042: 0x00c0, 0x1043: 0x00c0, 0x1044: 0x00c0, 0x1045: 0x00c0, + 0x1046: 0x00c0, 0x1047: 0x00c0, 0x1048: 0x00c0, 0x104a: 0x00c0, 0x104b: 0x00c0, + 0x104c: 0x00c0, 0x104d: 0x00c0, 0x1050: 0x00c0, 0x1051: 0x00c0, + 0x1052: 0x00c0, 0x1053: 0x00c0, 0x1054: 0x00c0, 0x1055: 0x00c0, 0x1056: 0x00c0, + 0x1058: 0x00c0, 0x105a: 0x00c0, 0x105b: 0x00c0, 0x105c: 0x00c0, 0x105d: 0x00c0, + 0x1060: 0x00c0, 0x1061: 0x00c0, 0x1062: 0x00c0, 0x1063: 0x00c0, + 0x1064: 0x00c0, 0x1065: 0x00c0, 0x1066: 0x00c0, 0x1067: 0x00c0, 0x1068: 0x00c0, 0x1069: 0x00c0, + 0x106a: 0x00c0, 0x106b: 0x00c0, 0x106c: 0x00c0, 0x106d: 0x00c0, 0x106e: 0x00c0, 0x106f: 0x00c0, + 0x1070: 0x00c0, 0x1071: 0x00c0, 0x1072: 0x00c0, 0x1073: 0x00c0, 0x1074: 0x00c0, 0x1075: 0x00c0, + 0x1076: 0x00c0, 0x1077: 0x00c0, 0x1078: 0x00c0, 0x1079: 0x00c0, 0x107a: 0x00c0, 0x107b: 0x00c0, + 0x107c: 0x00c0, 0x107d: 0x00c0, 0x107e: 0x00c0, 0x107f: 0x00c0, + // Block 0x42, offset 0x1080 + 0x1080: 0x00c0, 0x1081: 0x00c0, 0x1082: 0x00c0, 0x1083: 0x00c0, 0x1084: 0x00c0, 0x1085: 0x00c0, + 0x1086: 0x00c0, 0x1087: 0x00c0, 0x1088: 0x00c0, 0x108a: 0x00c0, 0x108b: 0x00c0, + 0x108c: 0x00c0, 0x108d: 0x00c0, 0x1090: 0x00c0, 0x1091: 0x00c0, + 0x1092: 0x00c0, 0x1093: 0x00c0, 0x1094: 0x00c0, 0x1095: 0x00c0, 0x1096: 0x00c0, 0x1097: 0x00c0, + 0x1098: 0x00c0, 0x1099: 0x00c0, 0x109a: 0x00c0, 0x109b: 0x00c0, 0x109c: 0x00c0, 0x109d: 0x00c0, + 0x109e: 0x00c0, 0x109f: 0x00c0, 0x10a0: 0x00c0, 0x10a1: 0x00c0, 0x10a2: 0x00c0, 0x10a3: 0x00c0, + 0x10a4: 0x00c0, 0x10a5: 0x00c0, 0x10a6: 0x00c0, 0x10a7: 0x00c0, 0x10a8: 0x00c0, 0x10a9: 0x00c0, + 0x10aa: 0x00c0, 0x10ab: 0x00c0, 0x10ac: 0x00c0, 0x10ad: 0x00c0, 0x10ae: 0x00c0, 0x10af: 0x00c0, + 0x10b0: 0x00c0, 0x10b2: 0x00c0, 0x10b3: 0x00c0, 0x10b4: 0x00c0, 0x10b5: 0x00c0, + 0x10b8: 0x00c0, 0x10b9: 0x00c0, 0x10ba: 0x00c0, 0x10bb: 0x00c0, + 0x10bc: 0x00c0, 0x10bd: 0x00c0, 0x10be: 0x00c0, + // Block 0x43, offset 0x10c0 + 0x10c0: 0x00c0, 0x10c2: 0x00c0, 0x10c3: 0x00c0, 0x10c4: 0x00c0, 0x10c5: 0x00c0, + 0x10c8: 0x00c0, 0x10c9: 0x00c0, 0x10ca: 0x00c0, 0x10cb: 0x00c0, + 0x10cc: 0x00c0, 0x10cd: 0x00c0, 0x10ce: 0x00c0, 0x10cf: 0x00c0, 0x10d0: 0x00c0, 0x10d1: 0x00c0, + 0x10d2: 0x00c0, 0x10d3: 0x00c0, 0x10d4: 0x00c0, 0x10d5: 0x00c0, 0x10d6: 0x00c0, + 0x10d8: 0x00c0, 0x10d9: 0x00c0, 0x10da: 0x00c0, 0x10db: 0x00c0, 0x10dc: 0x00c0, 0x10dd: 0x00c0, + 0x10de: 0x00c0, 0x10df: 0x00c0, 0x10e0: 0x00c0, 0x10e1: 0x00c0, 0x10e2: 0x00c0, 0x10e3: 0x00c0, + 0x10e4: 0x00c0, 0x10e5: 0x00c0, 0x10e6: 0x00c0, 0x10e7: 0x00c0, 0x10e8: 0x00c0, 0x10e9: 0x00c0, + 0x10ea: 0x00c0, 0x10eb: 0x00c0, 0x10ec: 0x00c0, 0x10ed: 0x00c0, 0x10ee: 0x00c0, 0x10ef: 0x00c0, + 0x10f0: 0x00c0, 0x10f1: 0x00c0, 0x10f2: 0x00c0, 0x10f3: 0x00c0, 0x10f4: 0x00c0, 0x10f5: 0x00c0, + 0x10f6: 0x00c0, 0x10f7: 0x00c0, 0x10f8: 0x00c0, 0x10f9: 0x00c0, 0x10fa: 0x00c0, 0x10fb: 0x00c0, + 0x10fc: 0x00c0, 0x10fd: 0x00c0, 0x10fe: 0x00c0, 0x10ff: 0x00c0, + // Block 0x44, offset 0x1100 + 0x1100: 0x00c0, 0x1101: 0x00c0, 0x1102: 0x00c0, 0x1103: 0x00c0, 0x1104: 0x00c0, 0x1105: 0x00c0, + 0x1106: 0x00c0, 0x1107: 0x00c0, 0x1108: 0x00c0, 0x1109: 0x00c0, 0x110a: 0x00c0, 0x110b: 0x00c0, + 0x110c: 0x00c0, 0x110d: 0x00c0, 0x110e: 0x00c0, 0x110f: 0x00c0, 0x1110: 0x00c0, + 0x1112: 0x00c0, 0x1113: 0x00c0, 0x1114: 0x00c0, 0x1115: 0x00c0, + 0x1118: 0x00c0, 0x1119: 0x00c0, 0x111a: 0x00c0, 0x111b: 0x00c0, 0x111c: 0x00c0, 0x111d: 0x00c0, + 0x111e: 0x00c0, 0x111f: 0x00c0, 0x1120: 0x00c0, 0x1121: 0x00c0, 0x1122: 0x00c0, 0x1123: 0x00c0, + 0x1124: 0x00c0, 0x1125: 0x00c0, 0x1126: 0x00c0, 0x1127: 0x00c0, 0x1128: 0x00c0, 0x1129: 0x00c0, + 0x112a: 0x00c0, 0x112b: 0x00c0, 0x112c: 0x00c0, 0x112d: 0x00c0, 0x112e: 0x00c0, 0x112f: 0x00c0, + 0x1130: 0x00c0, 0x1131: 0x00c0, 0x1132: 0x00c0, 0x1133: 0x00c0, 0x1134: 0x00c0, 0x1135: 0x00c0, + 0x1136: 0x00c0, 0x1137: 0x00c0, 0x1138: 0x00c0, 0x1139: 0x00c0, 0x113a: 0x00c0, 0x113b: 0x00c0, + 0x113c: 0x00c0, 0x113d: 0x00c0, 0x113e: 0x00c0, 0x113f: 0x00c0, + // Block 0x45, offset 0x1140 + 0x1140: 0x00c0, 0x1141: 0x00c0, 0x1142: 0x00c0, 0x1143: 0x00c0, 0x1144: 0x00c0, 0x1145: 0x00c0, + 0x1146: 0x00c0, 0x1147: 0x00c0, 0x1148: 0x00c0, 0x1149: 0x00c0, 0x114a: 0x00c0, 0x114b: 0x00c0, + 0x114c: 0x00c0, 0x114d: 0x00c0, 0x114e: 0x00c0, 0x114f: 0x00c0, 0x1150: 0x00c0, 0x1151: 0x00c0, + 0x1152: 0x00c0, 0x1153: 0x00c0, 0x1154: 0x00c0, 0x1155: 0x00c0, 0x1156: 0x00c0, 0x1157: 0x00c0, + 0x1158: 0x00c0, 0x1159: 0x00c0, 0x115a: 0x00c0, 0x115d: 0x00c3, + 0x115e: 0x00c3, 0x115f: 0x00c3, 0x1160: 0x0080, 0x1161: 0x0080, 0x1162: 0x0080, 0x1163: 0x0080, + 0x1164: 0x0080, 0x1165: 0x0080, 0x1166: 0x0080, 0x1167: 0x0080, 0x1168: 0x0080, 0x1169: 0x0080, + 0x116a: 0x0080, 0x116b: 0x0080, 0x116c: 0x0080, 0x116d: 0x0080, 0x116e: 0x0080, 0x116f: 0x0080, + 0x1170: 0x0080, 0x1171: 0x0080, 0x1172: 0x0080, 0x1173: 0x0080, 0x1174: 0x0080, 0x1175: 0x0080, + 0x1176: 0x0080, 0x1177: 0x0080, 0x1178: 0x0080, 0x1179: 0x0080, 0x117a: 0x0080, 0x117b: 0x0080, + 0x117c: 0x0080, + // Block 0x46, offset 0x1180 + 0x1180: 0x00c0, 0x1181: 0x00c0, 0x1182: 0x00c0, 0x1183: 0x00c0, 0x1184: 0x00c0, 0x1185: 0x00c0, + 0x1186: 0x00c0, 0x1187: 0x00c0, 0x1188: 0x00c0, 0x1189: 0x00c0, 0x118a: 0x00c0, 0x118b: 0x00c0, + 0x118c: 0x00c0, 0x118d: 0x00c0, 0x118e: 0x00c0, 0x118f: 0x00c0, 0x1190: 0x0080, 0x1191: 0x0080, + 0x1192: 0x0080, 0x1193: 0x0080, 0x1194: 0x0080, 0x1195: 0x0080, 0x1196: 0x0080, 0x1197: 0x0080, + 0x1198: 0x0080, 0x1199: 0x0080, + 0x11a0: 0x00c0, 0x11a1: 0x00c0, 0x11a2: 0x00c0, 0x11a3: 0x00c0, + 0x11a4: 0x00c0, 0x11a5: 0x00c0, 0x11a6: 0x00c0, 0x11a7: 0x00c0, 0x11a8: 0x00c0, 0x11a9: 0x00c0, + 0x11aa: 0x00c0, 0x11ab: 0x00c0, 0x11ac: 0x00c0, 0x11ad: 0x00c0, 0x11ae: 0x00c0, 0x11af: 0x00c0, + 0x11b0: 0x00c0, 0x11b1: 0x00c0, 0x11b2: 0x00c0, 0x11b3: 0x00c0, 0x11b4: 0x00c0, 0x11b5: 0x00c0, + 0x11b6: 0x00c0, 0x11b7: 0x00c0, 0x11b8: 0x00c0, 0x11b9: 0x00c0, 0x11ba: 0x00c0, 0x11bb: 0x00c0, + 0x11bc: 0x00c0, 0x11bd: 0x00c0, 0x11be: 0x00c0, 0x11bf: 0x00c0, + // Block 0x47, offset 0x11c0 + 0x11c0: 0x00c0, 0x11c1: 0x00c0, 0x11c2: 0x00c0, 0x11c3: 0x00c0, 0x11c4: 0x00c0, 0x11c5: 0x00c0, + 0x11c6: 0x00c0, 0x11c7: 0x00c0, 0x11c8: 0x00c0, 0x11c9: 0x00c0, 0x11ca: 0x00c0, 0x11cb: 0x00c0, + 0x11cc: 0x00c0, 0x11cd: 0x00c0, 0x11ce: 0x00c0, 0x11cf: 0x00c0, 0x11d0: 0x00c0, 0x11d1: 0x00c0, + 0x11d2: 0x00c0, 0x11d3: 0x00c0, 0x11d4: 0x00c0, 0x11d5: 0x00c0, 0x11d6: 0x00c0, 0x11d7: 0x00c0, + 0x11d8: 0x00c0, 0x11d9: 0x00c0, 0x11da: 0x00c0, 0x11db: 0x00c0, 0x11dc: 0x00c0, 0x11dd: 0x00c0, + 0x11de: 0x00c0, 0x11df: 0x00c0, 0x11e0: 0x00c0, 0x11e1: 0x00c0, 0x11e2: 0x00c0, 0x11e3: 0x00c0, + 0x11e4: 0x00c0, 0x11e5: 0x00c0, 0x11e6: 0x00c0, 0x11e7: 0x00c0, 0x11e8: 0x00c0, 0x11e9: 0x00c0, + 0x11ea: 0x00c0, 0x11eb: 0x00c0, 0x11ec: 0x00c0, 0x11ed: 0x00c0, 0x11ee: 0x00c0, 0x11ef: 0x00c0, + 0x11f0: 0x00c0, 0x11f1: 0x00c0, 0x11f2: 0x00c0, 0x11f3: 0x00c0, 0x11f4: 0x00c0, 0x11f5: 0x00c0, + 0x11f8: 0x00c0, 0x11f9: 0x00c0, 0x11fa: 0x00c0, 0x11fb: 0x00c0, + 0x11fc: 0x00c0, 0x11fd: 0x00c0, + // Block 0x48, offset 0x1200 + 0x1200: 0x0080, 0x1201: 0x00c0, 0x1202: 0x00c0, 0x1203: 0x00c0, 0x1204: 0x00c0, 0x1205: 0x00c0, + 0x1206: 0x00c0, 0x1207: 0x00c0, 0x1208: 0x00c0, 0x1209: 0x00c0, 0x120a: 0x00c0, 0x120b: 0x00c0, + 0x120c: 0x00c0, 0x120d: 0x00c0, 0x120e: 0x00c0, 0x120f: 0x00c0, 0x1210: 0x00c0, 0x1211: 0x00c0, + 0x1212: 0x00c0, 0x1213: 0x00c0, 0x1214: 0x00c0, 0x1215: 0x00c0, 0x1216: 0x00c0, 0x1217: 0x00c0, + 0x1218: 0x00c0, 0x1219: 0x00c0, 0x121a: 0x00c0, 0x121b: 0x00c0, 0x121c: 0x00c0, 0x121d: 0x00c0, + 0x121e: 0x00c0, 0x121f: 0x00c0, 0x1220: 0x00c0, 0x1221: 0x00c0, 0x1222: 0x00c0, 0x1223: 0x00c0, + 0x1224: 0x00c0, 0x1225: 0x00c0, 0x1226: 0x00c0, 0x1227: 0x00c0, 0x1228: 0x00c0, 0x1229: 0x00c0, + 0x122a: 0x00c0, 0x122b: 0x00c0, 0x122c: 0x00c0, 0x122d: 0x00c0, 0x122e: 0x00c0, 0x122f: 0x00c0, + 0x1230: 0x00c0, 0x1231: 0x00c0, 0x1232: 0x00c0, 0x1233: 0x00c0, 0x1234: 0x00c0, 0x1235: 0x00c0, + 0x1236: 0x00c0, 0x1237: 0x00c0, 0x1238: 0x00c0, 0x1239: 0x00c0, 0x123a: 0x00c0, 0x123b: 0x00c0, + 0x123c: 0x00c0, 0x123d: 0x00c0, 0x123e: 0x00c0, 0x123f: 0x00c0, + // Block 0x49, offset 0x1240 + 0x1240: 0x00c0, 0x1241: 0x00c0, 0x1242: 0x00c0, 0x1243: 0x00c0, 0x1244: 0x00c0, 0x1245: 0x00c0, + 0x1246: 0x00c0, 0x1247: 0x00c0, 0x1248: 0x00c0, 0x1249: 0x00c0, 0x124a: 0x00c0, 0x124b: 0x00c0, + 0x124c: 0x00c0, 0x124d: 0x00c0, 0x124e: 0x00c0, 0x124f: 0x00c0, 0x1250: 0x00c0, 0x1251: 0x00c0, + 0x1252: 0x00c0, 0x1253: 0x00c0, 0x1254: 0x00c0, 0x1255: 0x00c0, 0x1256: 0x00c0, 0x1257: 0x00c0, + 0x1258: 0x00c0, 0x1259: 0x00c0, 0x125a: 0x00c0, 0x125b: 0x00c0, 0x125c: 0x00c0, 0x125d: 0x00c0, + 0x125e: 0x00c0, 0x125f: 0x00c0, 0x1260: 0x00c0, 0x1261: 0x00c0, 0x1262: 0x00c0, 0x1263: 0x00c0, + 0x1264: 0x00c0, 0x1265: 0x00c0, 0x1266: 0x00c0, 0x1267: 0x00c0, 0x1268: 0x00c0, 0x1269: 0x00c0, + 0x126a: 0x00c0, 0x126b: 0x00c0, 0x126c: 0x00c0, 0x126d: 0x0080, 0x126e: 0x0080, 0x126f: 0x00c0, + 0x1270: 0x00c0, 0x1271: 0x00c0, 0x1272: 0x00c0, 0x1273: 0x00c0, 0x1274: 0x00c0, 0x1275: 0x00c0, + 0x1276: 0x00c0, 0x1277: 0x00c0, 0x1278: 0x00c0, 0x1279: 0x00c0, 0x127a: 0x00c0, 0x127b: 0x00c0, + 0x127c: 0x00c0, 0x127d: 0x00c0, 0x127e: 0x00c0, 0x127f: 0x00c0, + // Block 0x4a, offset 0x1280 + 0x1280: 0x0080, 0x1281: 0x00c0, 0x1282: 0x00c0, 0x1283: 0x00c0, 0x1284: 0x00c0, 0x1285: 0x00c0, + 0x1286: 0x00c0, 0x1287: 0x00c0, 0x1288: 0x00c0, 0x1289: 0x00c0, 0x128a: 0x00c0, 0x128b: 0x00c0, + 0x128c: 0x00c0, 0x128d: 0x00c0, 0x128e: 0x00c0, 0x128f: 0x00c0, 0x1290: 0x00c0, 0x1291: 0x00c0, + 0x1292: 0x00c0, 0x1293: 0x00c0, 0x1294: 0x00c0, 0x1295: 0x00c0, 0x1296: 0x00c0, 0x1297: 0x00c0, + 0x1298: 0x00c0, 0x1299: 0x00c0, 0x129a: 0x00c0, 0x129b: 0x0080, 0x129c: 0x0080, + 0x12a0: 0x00c0, 0x12a1: 0x00c0, 0x12a2: 0x00c0, 0x12a3: 0x00c0, + 0x12a4: 0x00c0, 0x12a5: 0x00c0, 0x12a6: 0x00c0, 0x12a7: 0x00c0, 0x12a8: 0x00c0, 0x12a9: 0x00c0, + 0x12aa: 0x00c0, 0x12ab: 0x00c0, 0x12ac: 0x00c0, 0x12ad: 0x00c0, 0x12ae: 0x00c0, 0x12af: 0x00c0, + 0x12b0: 0x00c0, 0x12b1: 0x00c0, 0x12b2: 0x00c0, 0x12b3: 0x00c0, 0x12b4: 0x00c0, 0x12b5: 0x00c0, + 0x12b6: 0x00c0, 0x12b7: 0x00c0, 0x12b8: 0x00c0, 0x12b9: 0x00c0, 0x12ba: 0x00c0, 0x12bb: 0x00c0, + 0x12bc: 0x00c0, 0x12bd: 0x00c0, 0x12be: 0x00c0, 0x12bf: 0x00c0, + // Block 0x4b, offset 0x12c0 + 0x12c0: 0x00c0, 0x12c1: 0x00c0, 0x12c2: 0x00c0, 0x12c3: 0x00c0, 0x12c4: 0x00c0, 0x12c5: 0x00c0, + 0x12c6: 0x00c0, 0x12c7: 0x00c0, 0x12c8: 0x00c0, 0x12c9: 0x00c0, 0x12ca: 0x00c0, 0x12cb: 0x00c0, + 0x12cc: 0x00c0, 0x12cd: 0x00c0, 0x12ce: 0x00c0, 0x12cf: 0x00c0, 0x12d0: 0x00c0, 0x12d1: 0x00c0, + 0x12d2: 0x00c0, 0x12d3: 0x00c0, 0x12d4: 0x00c0, 0x12d5: 0x00c0, 0x12d6: 0x00c0, 0x12d7: 0x00c0, + 0x12d8: 0x00c0, 0x12d9: 0x00c0, 0x12da: 0x00c0, 0x12db: 0x00c0, 0x12dc: 0x00c0, 0x12dd: 0x00c0, + 0x12de: 0x00c0, 0x12df: 0x00c0, 0x12e0: 0x00c0, 0x12e1: 0x00c0, 0x12e2: 0x00c0, 0x12e3: 0x00c0, + 0x12e4: 0x00c0, 0x12e5: 0x00c0, 0x12e6: 0x00c0, 0x12e7: 0x00c0, 0x12e8: 0x00c0, 0x12e9: 0x00c0, + 0x12ea: 0x00c0, 0x12eb: 0x0080, 0x12ec: 0x0080, 0x12ed: 0x0080, 0x12ee: 0x0080, 0x12ef: 0x0080, + 0x12f0: 0x0080, 0x12f1: 0x00c0, 0x12f2: 0x00c0, 0x12f3: 0x00c0, 0x12f4: 0x00c0, 0x12f5: 0x00c0, + 0x12f6: 0x00c0, 0x12f7: 0x00c0, 0x12f8: 0x00c0, + // Block 0x4c, offset 0x1300 + 0x1300: 0x00c0, 0x1301: 0x00c0, 0x1302: 0x00c0, 0x1303: 0x00c0, 0x1304: 0x00c0, 0x1305: 0x00c0, + 0x1306: 0x00c0, 0x1307: 0x00c0, 0x1308: 0x00c0, 0x1309: 0x00c0, 0x130a: 0x00c0, 0x130b: 0x00c0, + 0x130c: 0x00c0, 0x130e: 0x00c0, 0x130f: 0x00c0, 0x1310: 0x00c0, 0x1311: 0x00c0, + 0x1312: 0x00c3, 0x1313: 0x00c3, 0x1314: 0x00c6, + 0x1320: 0x00c0, 0x1321: 0x00c0, 0x1322: 0x00c0, 0x1323: 0x00c0, + 0x1324: 0x00c0, 0x1325: 0x00c0, 0x1326: 0x00c0, 0x1327: 0x00c0, 0x1328: 0x00c0, 0x1329: 0x00c0, + 0x132a: 0x00c0, 0x132b: 0x00c0, 0x132c: 0x00c0, 0x132d: 0x00c0, 0x132e: 0x00c0, 0x132f: 0x00c0, + 0x1330: 0x00c0, 0x1331: 0x00c0, 0x1332: 0x00c3, 0x1333: 0x00c3, 0x1334: 0x00c6, 0x1335: 0x0080, + 0x1336: 0x0080, + // Block 0x4d, offset 0x1340 + 0x1340: 0x00c0, 0x1341: 0x00c0, 0x1342: 0x00c0, 0x1343: 0x00c0, 0x1344: 0x00c0, 0x1345: 0x00c0, + 0x1346: 0x00c0, 0x1347: 0x00c0, 0x1348: 0x00c0, 0x1349: 0x00c0, 0x134a: 0x00c0, 0x134b: 0x00c0, + 0x134c: 0x00c0, 0x134d: 0x00c0, 0x134e: 0x00c0, 0x134f: 0x00c0, 0x1350: 0x00c0, 0x1351: 0x00c0, + 0x1352: 0x00c3, 0x1353: 0x00c3, + 0x1360: 0x00c0, 0x1361: 0x00c0, 0x1362: 0x00c0, 0x1363: 0x00c0, + 0x1364: 0x00c0, 0x1365: 0x00c0, 0x1366: 0x00c0, 0x1367: 0x00c0, 0x1368: 0x00c0, 0x1369: 0x00c0, + 0x136a: 0x00c0, 0x136b: 0x00c0, 0x136c: 0x00c0, 0x136e: 0x00c0, 0x136f: 0x00c0, + 0x1370: 0x00c0, 0x1372: 0x00c3, 0x1373: 0x00c3, + // Block 0x4e, offset 0x1380 + 0x1380: 0x00c0, 0x1381: 0x00c0, 0x1382: 0x00c0, 0x1383: 0x00c0, 0x1384: 0x00c0, 0x1385: 0x00c0, + 0x1386: 0x00c0, 0x1387: 0x00c0, 0x1388: 0x00c0, 0x1389: 0x00c0, 0x138a: 0x00c0, 0x138b: 0x00c0, + 0x138c: 0x00c0, 0x138d: 0x00c0, 0x138e: 0x00c0, 0x138f: 0x00c0, 0x1390: 0x00c0, 0x1391: 0x00c0, + 0x1392: 0x00c0, 0x1393: 0x00c0, 0x1394: 0x00c0, 0x1395: 0x00c0, 0x1396: 0x00c0, 0x1397: 0x00c0, + 0x1398: 0x00c0, 0x1399: 0x00c0, 0x139a: 0x00c0, 0x139b: 0x00c0, 0x139c: 0x00c0, 0x139d: 0x00c0, + 0x139e: 0x00c0, 0x139f: 0x00c0, 0x13a0: 0x00c0, 0x13a1: 0x00c0, 0x13a2: 0x00c0, 0x13a3: 0x00c0, + 0x13a4: 0x00c0, 0x13a5: 0x00c0, 0x13a6: 0x00c0, 0x13a7: 0x00c0, 0x13a8: 0x00c0, 0x13a9: 0x00c0, + 0x13aa: 0x00c0, 0x13ab: 0x00c0, 0x13ac: 0x00c0, 0x13ad: 0x00c0, 0x13ae: 0x00c0, 0x13af: 0x00c0, + 0x13b0: 0x00c0, 0x13b1: 0x00c0, 0x13b2: 0x00c0, 0x13b3: 0x00c0, 0x13b4: 0x0040, 0x13b5: 0x0040, + 0x13b6: 0x00c0, 0x13b7: 0x00c3, 0x13b8: 0x00c3, 0x13b9: 0x00c3, 0x13ba: 0x00c3, 0x13bb: 0x00c3, + 0x13bc: 0x00c3, 0x13bd: 0x00c3, 0x13be: 0x00c0, 0x13bf: 0x00c0, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x00c0, 0x13c1: 0x00c0, 0x13c2: 0x00c0, 0x13c3: 0x00c0, 0x13c4: 0x00c0, 0x13c5: 0x00c0, + 0x13c6: 0x00c3, 0x13c7: 0x00c0, 0x13c8: 0x00c0, 0x13c9: 0x00c3, 0x13ca: 0x00c3, 0x13cb: 0x00c3, + 0x13cc: 0x00c3, 0x13cd: 0x00c3, 0x13ce: 0x00c3, 0x13cf: 0x00c3, 0x13d0: 0x00c3, 0x13d1: 0x00c3, + 0x13d2: 0x00c6, 0x13d3: 0x00c3, 0x13d4: 0x0080, 0x13d5: 0x0080, 0x13d6: 0x0080, 0x13d7: 0x00c0, + 0x13d8: 0x0080, 0x13d9: 0x0080, 0x13da: 0x0080, 0x13db: 0x0080, 0x13dc: 0x00c0, 0x13dd: 0x00c3, + 0x13e0: 0x00c0, 0x13e1: 0x00c0, 0x13e2: 0x00c0, 0x13e3: 0x00c0, + 0x13e4: 0x00c0, 0x13e5: 0x00c0, 0x13e6: 0x00c0, 0x13e7: 0x00c0, 0x13e8: 0x00c0, 0x13e9: 0x00c0, + 0x13f0: 0x0080, 0x13f1: 0x0080, 0x13f2: 0x0080, 0x13f3: 0x0080, 0x13f4: 0x0080, 0x13f5: 0x0080, + 0x13f6: 0x0080, 0x13f7: 0x0080, 0x13f8: 0x0080, 0x13f9: 0x0080, + // Block 0x50, offset 0x1400 + 0x1400: 0x0080, 0x1401: 0x0080, 0x1402: 0x0080, 0x1403: 0x0080, 0x1404: 0x0080, 0x1405: 0x0080, + 0x1406: 0x0080, 0x1407: 0x0082, 0x1408: 0x0080, 0x1409: 0x0080, 0x140a: 0x0080, 0x140b: 0x0040, + 0x140c: 0x0040, 0x140d: 0x0040, 0x140e: 0x0040, 0x1410: 0x00c0, 0x1411: 0x00c0, + 0x1412: 0x00c0, 0x1413: 0x00c0, 0x1414: 0x00c0, 0x1415: 0x00c0, 0x1416: 0x00c0, 0x1417: 0x00c0, + 0x1418: 0x00c0, 0x1419: 0x00c0, + 0x1420: 0x00c2, 0x1421: 0x00c2, 0x1422: 0x00c2, 0x1423: 0x00c2, + 0x1424: 0x00c2, 0x1425: 0x00c2, 0x1426: 0x00c2, 0x1427: 0x00c2, 0x1428: 0x00c2, 0x1429: 0x00c2, + 0x142a: 0x00c2, 0x142b: 0x00c2, 0x142c: 0x00c2, 0x142d: 0x00c2, 0x142e: 0x00c2, 0x142f: 0x00c2, + 0x1430: 0x00c2, 0x1431: 0x00c2, 0x1432: 0x00c2, 0x1433: 0x00c2, 0x1434: 0x00c2, 0x1435: 0x00c2, + 0x1436: 0x00c2, 0x1437: 0x00c2, 0x1438: 0x00c2, 0x1439: 0x00c2, 0x143a: 0x00c2, 0x143b: 0x00c2, + 0x143c: 0x00c2, 0x143d: 0x00c2, 0x143e: 0x00c2, 0x143f: 0x00c2, + // Block 0x51, offset 0x1440 + 0x1440: 0x00c2, 0x1441: 0x00c2, 0x1442: 0x00c2, 0x1443: 0x00c2, 0x1444: 0x00c2, 0x1445: 0x00c2, + 0x1446: 0x00c2, 0x1447: 0x00c2, 0x1448: 0x00c2, 0x1449: 0x00c2, 0x144a: 0x00c2, 0x144b: 0x00c2, + 0x144c: 0x00c2, 0x144d: 0x00c2, 0x144e: 0x00c2, 0x144f: 0x00c2, 0x1450: 0x00c2, 0x1451: 0x00c2, + 0x1452: 0x00c2, 0x1453: 0x00c2, 0x1454: 0x00c2, 0x1455: 0x00c2, 0x1456: 0x00c2, 0x1457: 0x00c2, + 0x1458: 0x00c2, 0x1459: 0x00c2, 0x145a: 0x00c2, 0x145b: 0x00c2, 0x145c: 0x00c2, 0x145d: 0x00c2, + 0x145e: 0x00c2, 0x145f: 0x00c2, 0x1460: 0x00c2, 0x1461: 0x00c2, 0x1462: 0x00c2, 0x1463: 0x00c2, + 0x1464: 0x00c2, 0x1465: 0x00c2, 0x1466: 0x00c2, 0x1467: 0x00c2, 0x1468: 0x00c2, 0x1469: 0x00c2, + 0x146a: 0x00c2, 0x146b: 0x00c2, 0x146c: 0x00c2, 0x146d: 0x00c2, 0x146e: 0x00c2, 0x146f: 0x00c2, + 0x1470: 0x00c2, 0x1471: 0x00c2, 0x1472: 0x00c2, 0x1473: 0x00c2, 0x1474: 0x00c2, 0x1475: 0x00c2, + 0x1476: 0x00c2, 0x1477: 0x00c2, + // Block 0x52, offset 0x1480 + 0x1480: 0x00c0, 0x1481: 0x00c0, 0x1482: 0x00c0, 0x1483: 0x00c0, 0x1484: 0x00c0, 0x1485: 0x00c3, + 0x1486: 0x00c3, 0x1487: 0x00c2, 0x1488: 0x00c2, 0x1489: 0x00c2, 0x148a: 0x00c2, 0x148b: 0x00c2, + 0x148c: 0x00c2, 0x148d: 0x00c2, 0x148e: 0x00c2, 0x148f: 0x00c2, 0x1490: 0x00c2, 0x1491: 0x00c2, + 0x1492: 0x00c2, 0x1493: 0x00c2, 0x1494: 0x00c2, 0x1495: 0x00c2, 0x1496: 0x00c2, 0x1497: 0x00c2, + 0x1498: 0x00c2, 0x1499: 0x00c2, 0x149a: 0x00c2, 0x149b: 0x00c2, 0x149c: 0x00c2, 0x149d: 0x00c2, + 0x149e: 0x00c2, 0x149f: 0x00c2, 0x14a0: 0x00c2, 0x14a1: 0x00c2, 0x14a2: 0x00c2, 0x14a3: 0x00c2, + 0x14a4: 0x00c2, 0x14a5: 0x00c2, 0x14a6: 0x00c2, 0x14a7: 0x00c2, 0x14a8: 0x00c2, 0x14a9: 0x00c3, + 0x14aa: 0x00c2, + 0x14b0: 0x00c0, 0x14b1: 0x00c0, 0x14b2: 0x00c0, 0x14b3: 0x00c0, 0x14b4: 0x00c0, 0x14b5: 0x00c0, + 0x14b6: 0x00c0, 0x14b7: 0x00c0, 0x14b8: 0x00c0, 0x14b9: 0x00c0, 0x14ba: 0x00c0, 0x14bb: 0x00c0, + 0x14bc: 0x00c0, 0x14bd: 0x00c0, 0x14be: 0x00c0, 0x14bf: 0x00c0, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x00c0, 0x14c1: 0x00c0, 0x14c2: 0x00c0, 0x14c3: 0x00c0, 0x14c4: 0x00c0, 0x14c5: 0x00c0, + 0x14c6: 0x00c0, 0x14c7: 0x00c0, 0x14c8: 0x00c0, 0x14c9: 0x00c0, 0x14ca: 0x00c0, 0x14cb: 0x00c0, + 0x14cc: 0x00c0, 0x14cd: 0x00c0, 0x14ce: 0x00c0, 0x14cf: 0x00c0, 0x14d0: 0x00c0, 0x14d1: 0x00c0, + 0x14d2: 0x00c0, 0x14d3: 0x00c0, 0x14d4: 0x00c0, 0x14d5: 0x00c0, 0x14d6: 0x00c0, 0x14d7: 0x00c0, + 0x14d8: 0x00c0, 0x14d9: 0x00c0, 0x14da: 0x00c0, 0x14db: 0x00c0, 0x14dc: 0x00c0, 0x14dd: 0x00c0, + 0x14de: 0x00c0, 0x14df: 0x00c0, 0x14e0: 0x00c0, 0x14e1: 0x00c0, 0x14e2: 0x00c0, 0x14e3: 0x00c0, + 0x14e4: 0x00c0, 0x14e5: 0x00c0, 0x14e6: 0x00c0, 0x14e7: 0x00c0, 0x14e8: 0x00c0, 0x14e9: 0x00c0, + 0x14ea: 0x00c0, 0x14eb: 0x00c0, 0x14ec: 0x00c0, 0x14ed: 0x00c0, 0x14ee: 0x00c0, 0x14ef: 0x00c0, + 0x14f0: 0x00c0, 0x14f1: 0x00c0, 0x14f2: 0x00c0, 0x14f3: 0x00c0, 0x14f4: 0x00c0, 0x14f5: 0x00c0, + // Block 0x54, offset 0x1500 + 0x1500: 0x00c0, 0x1501: 0x00c0, 0x1502: 0x00c0, 0x1503: 0x00c0, 0x1504: 0x00c0, 0x1505: 0x00c0, + 0x1506: 0x00c0, 0x1507: 0x00c0, 0x1508: 0x00c0, 0x1509: 0x00c0, 0x150a: 0x00c0, 0x150b: 0x00c0, + 0x150c: 0x00c0, 0x150d: 0x00c0, 0x150e: 0x00c0, 0x150f: 0x00c0, 0x1510: 0x00c0, 0x1511: 0x00c0, + 0x1512: 0x00c0, 0x1513: 0x00c0, 0x1514: 0x00c0, 0x1515: 0x00c0, 0x1516: 0x00c0, 0x1517: 0x00c0, + 0x1518: 0x00c0, 0x1519: 0x00c0, 0x151a: 0x00c0, 0x151b: 0x00c0, 0x151c: 0x00c0, 0x151d: 0x00c0, + 0x151e: 0x00c0, 0x1520: 0x00c3, 0x1521: 0x00c3, 0x1522: 0x00c3, 0x1523: 0x00c0, + 0x1524: 0x00c0, 0x1525: 0x00c0, 0x1526: 0x00c0, 0x1527: 0x00c3, 0x1528: 0x00c3, 0x1529: 0x00c0, + 0x152a: 0x00c0, 0x152b: 0x00c0, + 0x1530: 0x00c0, 0x1531: 0x00c0, 0x1532: 0x00c3, 0x1533: 0x00c0, 0x1534: 0x00c0, 0x1535: 0x00c0, + 0x1536: 0x00c0, 0x1537: 0x00c0, 0x1538: 0x00c0, 0x1539: 0x00c3, 0x153a: 0x00c3, 0x153b: 0x00c3, + // Block 0x55, offset 0x1540 + 0x1540: 0x0080, 0x1544: 0x0080, 0x1545: 0x0080, + 0x1546: 0x00c0, 0x1547: 0x00c0, 0x1548: 0x00c0, 0x1549: 0x00c0, 0x154a: 0x00c0, 0x154b: 0x00c0, + 0x154c: 0x00c0, 0x154d: 0x00c0, 0x154e: 0x00c0, 0x154f: 0x00c0, 0x1550: 0x00c0, 0x1551: 0x00c0, + 0x1552: 0x00c0, 0x1553: 0x00c0, 0x1554: 0x00c0, 0x1555: 0x00c0, 0x1556: 0x00c0, 0x1557: 0x00c0, + 0x1558: 0x00c0, 0x1559: 0x00c0, 0x155a: 0x00c0, 0x155b: 0x00c0, 0x155c: 0x00c0, 0x155d: 0x00c0, + 0x155e: 0x00c0, 0x155f: 0x00c0, 0x1560: 0x00c0, 0x1561: 0x00c0, 0x1562: 0x00c0, 0x1563: 0x00c0, + 0x1564: 0x00c0, 0x1565: 0x00c0, 0x1566: 0x00c0, 0x1567: 0x00c0, 0x1568: 0x00c0, 0x1569: 0x00c0, + 0x156a: 0x00c0, 0x156b: 0x00c0, 0x156c: 0x00c0, 0x156d: 0x00c0, + 0x1570: 0x00c0, 0x1571: 0x00c0, 0x1572: 0x00c0, 0x1573: 0x00c0, 0x1574: 0x00c0, + // Block 0x56, offset 0x1580 + 0x1580: 0x00c0, 0x1581: 0x00c0, 0x1582: 0x00c0, 0x1583: 0x00c0, 0x1584: 0x00c0, 0x1585: 0x00c0, + 0x1586: 0x00c0, 0x1587: 0x00c0, 0x1588: 0x00c0, 0x1589: 0x00c0, 0x158a: 0x00c0, 0x158b: 0x00c0, + 0x158c: 0x00c0, 0x158d: 0x00c0, 0x158e: 0x00c0, 0x158f: 0x00c0, 0x1590: 0x00c0, 0x1591: 0x00c0, + 0x1592: 0x00c0, 0x1593: 0x00c0, 0x1594: 0x00c0, 0x1595: 0x00c0, 0x1596: 0x00c0, 0x1597: 0x00c0, + 0x1598: 0x00c0, 0x1599: 0x00c0, 0x159a: 0x00c0, 0x159b: 0x00c0, 0x159c: 0x00c0, 0x159d: 0x00c0, + 0x159e: 0x00c0, 0x159f: 0x00c0, 0x15a0: 0x00c0, 0x15a1: 0x00c0, 0x15a2: 0x00c0, 0x15a3: 0x00c0, + 0x15a4: 0x00c0, 0x15a5: 0x00c0, 0x15a6: 0x00c0, 0x15a7: 0x00c0, 0x15a8: 0x00c0, 0x15a9: 0x00c0, + 0x15aa: 0x00c0, 0x15ab: 0x00c0, + 0x15b0: 0x00c0, 0x15b1: 0x00c0, 0x15b2: 0x00c0, 0x15b3: 0x00c0, 0x15b4: 0x00c0, 0x15b5: 0x00c0, + 0x15b6: 0x00c0, 0x15b7: 0x00c0, 0x15b8: 0x00c0, 0x15b9: 0x00c0, 0x15ba: 0x00c0, 0x15bb: 0x00c0, + 0x15bc: 0x00c0, 0x15bd: 0x00c0, 0x15be: 0x00c0, 0x15bf: 0x00c0, + // Block 0x57, offset 0x15c0 + 0x15c0: 0x00c0, 0x15c1: 0x00c0, 0x15c2: 0x00c0, 0x15c3: 0x00c0, 0x15c4: 0x00c0, 0x15c5: 0x00c0, + 0x15c6: 0x00c0, 0x15c7: 0x00c0, 0x15c8: 0x00c0, 0x15c9: 0x00c0, + 0x15d0: 0x00c0, 0x15d1: 0x00c0, + 0x15d2: 0x00c0, 0x15d3: 0x00c0, 0x15d4: 0x00c0, 0x15d5: 0x00c0, 0x15d6: 0x00c0, 0x15d7: 0x00c0, + 0x15d8: 0x00c0, 0x15d9: 0x00c0, 0x15da: 0x0080, + 0x15de: 0x0080, 0x15df: 0x0080, 0x15e0: 0x0080, 0x15e1: 0x0080, 0x15e2: 0x0080, 0x15e3: 0x0080, + 0x15e4: 0x0080, 0x15e5: 0x0080, 0x15e6: 0x0080, 0x15e7: 0x0080, 0x15e8: 0x0080, 0x15e9: 0x0080, + 0x15ea: 0x0080, 0x15eb: 0x0080, 0x15ec: 0x0080, 0x15ed: 0x0080, 0x15ee: 0x0080, 0x15ef: 0x0080, + 0x15f0: 0x0080, 0x15f1: 0x0080, 0x15f2: 0x0080, 0x15f3: 0x0080, 0x15f4: 0x0080, 0x15f5: 0x0080, + 0x15f6: 0x0080, 0x15f7: 0x0080, 0x15f8: 0x0080, 0x15f9: 0x0080, 0x15fa: 0x0080, 0x15fb: 0x0080, + 0x15fc: 0x0080, 0x15fd: 0x0080, 0x15fe: 0x0080, 0x15ff: 0x0080, + // Block 0x58, offset 0x1600 + 0x1600: 0x00c0, 0x1601: 0x00c0, 0x1602: 0x00c0, 0x1603: 0x00c0, 0x1604: 0x00c0, 0x1605: 0x00c0, + 0x1606: 0x00c0, 0x1607: 0x00c0, 0x1608: 0x00c0, 0x1609: 0x00c0, 0x160a: 0x00c0, 0x160b: 0x00c0, + 0x160c: 0x00c0, 0x160d: 0x00c0, 0x160e: 0x00c0, 0x160f: 0x00c0, 0x1610: 0x00c0, 0x1611: 0x00c0, + 0x1612: 0x00c0, 0x1613: 0x00c0, 0x1614: 0x00c0, 0x1615: 0x00c0, 0x1616: 0x00c0, 0x1617: 0x00c3, + 0x1618: 0x00c3, 0x1619: 0x00c0, 0x161a: 0x00c0, 0x161b: 0x00c3, + 0x161e: 0x0080, 0x161f: 0x0080, 0x1620: 0x00c0, 0x1621: 0x00c0, 0x1622: 0x00c0, 0x1623: 0x00c0, + 0x1624: 0x00c0, 0x1625: 0x00c0, 0x1626: 0x00c0, 0x1627: 0x00c0, 0x1628: 0x00c0, 0x1629: 0x00c0, + 0x162a: 0x00c0, 0x162b: 0x00c0, 0x162c: 0x00c0, 0x162d: 0x00c0, 0x162e: 0x00c0, 0x162f: 0x00c0, + 0x1630: 0x00c0, 0x1631: 0x00c0, 0x1632: 0x00c0, 0x1633: 0x00c0, 0x1634: 0x00c0, 0x1635: 0x00c0, + 0x1636: 0x00c0, 0x1637: 0x00c0, 0x1638: 0x00c0, 0x1639: 0x00c0, 0x163a: 0x00c0, 0x163b: 0x00c0, + 0x163c: 0x00c0, 0x163d: 0x00c0, 0x163e: 0x00c0, 0x163f: 0x00c0, + // Block 0x59, offset 0x1640 + 0x1640: 0x00c0, 0x1641: 0x00c0, 0x1642: 0x00c0, 0x1643: 0x00c0, 0x1644: 0x00c0, 0x1645: 0x00c0, + 0x1646: 0x00c0, 0x1647: 0x00c0, 0x1648: 0x00c0, 0x1649: 0x00c0, 0x164a: 0x00c0, 0x164b: 0x00c0, + 0x164c: 0x00c0, 0x164d: 0x00c0, 0x164e: 0x00c0, 0x164f: 0x00c0, 0x1650: 0x00c0, 0x1651: 0x00c0, + 0x1652: 0x00c0, 0x1653: 0x00c0, 0x1654: 0x00c0, 0x1655: 0x00c0, 0x1656: 0x00c3, 0x1657: 0x00c0, + 0x1658: 0x00c3, 0x1659: 0x00c3, 0x165a: 0x00c3, 0x165b: 0x00c3, 0x165c: 0x00c3, 0x165d: 0x00c3, + 0x165e: 0x00c3, 0x1660: 0x00c6, 0x1661: 0x00c0, 0x1662: 0x00c3, 0x1663: 0x00c0, + 0x1664: 0x00c0, 0x1665: 0x00c3, 0x1666: 0x00c3, 0x1667: 0x00c3, 0x1668: 0x00c3, 0x1669: 0x00c3, + 0x166a: 0x00c3, 0x166b: 0x00c3, 0x166c: 0x00c3, 0x166d: 0x00c0, 0x166e: 0x00c0, 0x166f: 0x00c0, + 0x1670: 0x00c0, 0x1671: 0x00c0, 0x1672: 0x00c0, 0x1673: 0x00c3, 0x1674: 0x00c3, 0x1675: 0x00c3, + 0x1676: 0x00c3, 0x1677: 0x00c3, 0x1678: 0x00c3, 0x1679: 0x00c3, 0x167a: 0x00c3, 0x167b: 0x00c3, + 0x167c: 0x00c3, 0x167f: 0x00c3, + // Block 0x5a, offset 0x1680 + 0x1680: 0x00c0, 0x1681: 0x00c0, 0x1682: 0x00c0, 0x1683: 0x00c0, 0x1684: 0x00c0, 0x1685: 0x00c0, + 0x1686: 0x00c0, 0x1687: 0x00c0, 0x1688: 0x00c0, 0x1689: 0x00c0, + 0x1690: 0x00c0, 0x1691: 0x00c0, + 0x1692: 0x00c0, 0x1693: 0x00c0, 0x1694: 0x00c0, 0x1695: 0x00c0, 0x1696: 0x00c0, 0x1697: 0x00c0, + 0x1698: 0x00c0, 0x1699: 0x00c0, + 0x16a0: 0x0080, 0x16a1: 0x0080, 0x16a2: 0x0080, 0x16a3: 0x0080, + 0x16a4: 0x0080, 0x16a5: 0x0080, 0x16a6: 0x0080, 0x16a7: 0x00c0, 0x16a8: 0x0080, 0x16a9: 0x0080, + 0x16aa: 0x0080, 0x16ab: 0x0080, 0x16ac: 0x0080, 0x16ad: 0x0080, + 0x16b0: 0x00c3, 0x16b1: 0x00c3, 0x16b2: 0x00c3, 0x16b3: 0x00c3, 0x16b4: 0x00c3, 0x16b5: 0x00c3, + 0x16b6: 0x00c3, 0x16b7: 0x00c3, 0x16b8: 0x00c3, 0x16b9: 0x00c3, 0x16ba: 0x00c3, 0x16bb: 0x00c3, + 0x16bc: 0x00c3, 0x16bd: 0x00c3, 0x16be: 0x0083, + // Block 0x5b, offset 0x16c0 + 0x16c0: 0x00c3, 0x16c1: 0x00c3, 0x16c2: 0x00c3, 0x16c3: 0x00c3, 0x16c4: 0x00c0, 0x16c5: 0x00c0, + 0x16c6: 0x00c0, 0x16c7: 0x00c0, 0x16c8: 0x00c0, 0x16c9: 0x00c0, 0x16ca: 0x00c0, 0x16cb: 0x00c0, + 0x16cc: 0x00c0, 0x16cd: 0x00c0, 0x16ce: 0x00c0, 0x16cf: 0x00c0, 0x16d0: 0x00c0, 0x16d1: 0x00c0, + 0x16d2: 0x00c0, 0x16d3: 0x00c0, 0x16d4: 0x00c0, 0x16d5: 0x00c0, 0x16d6: 0x00c0, 0x16d7: 0x00c0, + 0x16d8: 0x00c0, 0x16d9: 0x00c0, 0x16da: 0x00c0, 0x16db: 0x00c0, 0x16dc: 0x00c0, 0x16dd: 0x00c0, + 0x16de: 0x00c0, 0x16df: 0x00c0, 0x16e0: 0x00c0, 0x16e1: 0x00c0, 0x16e2: 0x00c0, 0x16e3: 0x00c0, + 0x16e4: 0x00c0, 0x16e5: 0x00c0, 0x16e6: 0x00c0, 0x16e7: 0x00c0, 0x16e8: 0x00c0, 0x16e9: 0x00c0, + 0x16ea: 0x00c0, 0x16eb: 0x00c0, 0x16ec: 0x00c0, 0x16ed: 0x00c0, 0x16ee: 0x00c0, 0x16ef: 0x00c0, + 0x16f0: 0x00c0, 0x16f1: 0x00c0, 0x16f2: 0x00c0, 0x16f3: 0x00c0, 0x16f4: 0x00c3, 0x16f5: 0x00c0, + 0x16f6: 0x00c3, 0x16f7: 0x00c3, 0x16f8: 0x00c3, 0x16f9: 0x00c3, 0x16fa: 0x00c3, 0x16fb: 0x00c0, + 0x16fc: 0x00c3, 0x16fd: 0x00c0, 0x16fe: 0x00c0, 0x16ff: 0x00c0, + // Block 0x5c, offset 0x1700 + 0x1700: 0x00c0, 0x1701: 0x00c0, 0x1702: 0x00c3, 0x1703: 0x00c0, 0x1704: 0x00c5, 0x1705: 0x00c0, + 0x1706: 0x00c0, 0x1707: 0x00c0, 0x1708: 0x00c0, 0x1709: 0x00c0, 0x170a: 0x00c0, 0x170b: 0x00c0, + 0x1710: 0x00c0, 0x1711: 0x00c0, + 0x1712: 0x00c0, 0x1713: 0x00c0, 0x1714: 0x00c0, 0x1715: 0x00c0, 0x1716: 0x00c0, 0x1717: 0x00c0, + 0x1718: 0x00c0, 0x1719: 0x00c0, 0x171a: 0x0080, 0x171b: 0x0080, 0x171c: 0x0080, 0x171d: 0x0080, + 0x171e: 0x0080, 0x171f: 0x0080, 0x1720: 0x0080, 0x1721: 0x0080, 0x1722: 0x0080, 0x1723: 0x0080, + 0x1724: 0x0080, 0x1725: 0x0080, 0x1726: 0x0080, 0x1727: 0x0080, 0x1728: 0x0080, 0x1729: 0x0080, + 0x172a: 0x0080, 0x172b: 0x00c3, 0x172c: 0x00c3, 0x172d: 0x00c3, 0x172e: 0x00c3, 0x172f: 0x00c3, + 0x1730: 0x00c3, 0x1731: 0x00c3, 0x1732: 0x00c3, 0x1733: 0x00c3, 0x1734: 0x0080, 0x1735: 0x0080, + 0x1736: 0x0080, 0x1737: 0x0080, 0x1738: 0x0080, 0x1739: 0x0080, 0x173a: 0x0080, 0x173b: 0x0080, + 0x173c: 0x0080, + // Block 0x5d, offset 0x1740 + 0x1740: 0x00c3, 0x1741: 0x00c3, 0x1742: 0x00c0, 0x1743: 0x00c0, 0x1744: 0x00c0, 0x1745: 0x00c0, + 0x1746: 0x00c0, 0x1747: 0x00c0, 0x1748: 0x00c0, 0x1749: 0x00c0, 0x174a: 0x00c0, 0x174b: 0x00c0, + 0x174c: 0x00c0, 0x174d: 0x00c0, 0x174e: 0x00c0, 0x174f: 0x00c0, 0x1750: 0x00c0, 0x1751: 0x00c0, + 0x1752: 0x00c0, 0x1753: 0x00c0, 0x1754: 0x00c0, 0x1755: 0x00c0, 0x1756: 0x00c0, 0x1757: 0x00c0, + 0x1758: 0x00c0, 0x1759: 0x00c0, 0x175a: 0x00c0, 0x175b: 0x00c0, 0x175c: 0x00c0, 0x175d: 0x00c0, + 0x175e: 0x00c0, 0x175f: 0x00c0, 0x1760: 0x00c0, 0x1761: 0x00c0, 0x1762: 0x00c3, 0x1763: 0x00c3, + 0x1764: 0x00c3, 0x1765: 0x00c3, 0x1766: 0x00c0, 0x1767: 0x00c0, 0x1768: 0x00c3, 0x1769: 0x00c3, + 0x176a: 0x00c5, 0x176b: 0x00c6, 0x176c: 0x00c3, 0x176d: 0x00c3, 0x176e: 0x00c0, 0x176f: 0x00c0, + 0x1770: 0x00c0, 0x1771: 0x00c0, 0x1772: 0x00c0, 0x1773: 0x00c0, 0x1774: 0x00c0, 0x1775: 0x00c0, + 0x1776: 0x00c0, 0x1777: 0x00c0, 0x1778: 0x00c0, 0x1779: 0x00c0, 0x177a: 0x00c0, 0x177b: 0x00c0, + 0x177c: 0x00c0, 0x177d: 0x00c0, 0x177e: 0x00c0, 0x177f: 0x00c0, + // Block 0x5e, offset 0x1780 + 0x1780: 0x00c0, 0x1781: 0x00c0, 0x1782: 0x00c0, 0x1783: 0x00c0, 0x1784: 0x00c0, 0x1785: 0x00c0, + 0x1786: 0x00c0, 0x1787: 0x00c0, 0x1788: 0x00c0, 0x1789: 0x00c0, 0x178a: 0x00c0, 0x178b: 0x00c0, + 0x178c: 0x00c0, 0x178d: 0x00c0, 0x178e: 0x00c0, 0x178f: 0x00c0, 0x1790: 0x00c0, 0x1791: 0x00c0, + 0x1792: 0x00c0, 0x1793: 0x00c0, 0x1794: 0x00c0, 0x1795: 0x00c0, 0x1796: 0x00c0, 0x1797: 0x00c0, + 0x1798: 0x00c0, 0x1799: 0x00c0, 0x179a: 0x00c0, 0x179b: 0x00c0, 0x179c: 0x00c0, 0x179d: 0x00c0, + 0x179e: 0x00c0, 0x179f: 0x00c0, 0x17a0: 0x00c0, 0x17a1: 0x00c0, 0x17a2: 0x00c0, 0x17a3: 0x00c0, + 0x17a4: 0x00c0, 0x17a5: 0x00c0, 0x17a6: 0x00c3, 0x17a7: 0x00c0, 0x17a8: 0x00c3, 0x17a9: 0x00c3, + 0x17aa: 0x00c0, 0x17ab: 0x00c0, 0x17ac: 0x00c0, 0x17ad: 0x00c3, 0x17ae: 0x00c0, 0x17af: 0x00c3, + 0x17b0: 0x00c3, 0x17b1: 0x00c3, 0x17b2: 0x00c5, 0x17b3: 0x00c5, + 0x17bc: 0x0080, 0x17bd: 0x0080, 0x17be: 0x0080, 0x17bf: 0x0080, + // Block 0x5f, offset 0x17c0 + 0x17c0: 0x00c0, 0x17c1: 0x00c0, 0x17c2: 0x00c0, 0x17c3: 0x00c0, 0x17c4: 0x00c0, 0x17c5: 0x00c0, + 0x17c6: 0x00c0, 0x17c7: 0x00c0, 0x17c8: 0x00c0, 0x17c9: 0x00c0, 0x17ca: 0x00c0, 0x17cb: 0x00c0, + 0x17cc: 0x00c0, 0x17cd: 0x00c0, 0x17ce: 0x00c0, 0x17cf: 0x00c0, 0x17d0: 0x00c0, 0x17d1: 0x00c0, + 0x17d2: 0x00c0, 0x17d3: 0x00c0, 0x17d4: 0x00c0, 0x17d5: 0x00c0, 0x17d6: 0x00c0, 0x17d7: 0x00c0, + 0x17d8: 0x00c0, 0x17d9: 0x00c0, 0x17da: 0x00c0, 0x17db: 0x00c0, 0x17dc: 0x00c0, 0x17dd: 0x00c0, + 0x17de: 0x00c0, 0x17df: 0x00c0, 0x17e0: 0x00c0, 0x17e1: 0x00c0, 0x17e2: 0x00c0, 0x17e3: 0x00c0, + 0x17e4: 0x00c0, 0x17e5: 0x00c0, 0x17e6: 0x00c0, 0x17e7: 0x00c0, 0x17e8: 0x00c0, 0x17e9: 0x00c0, + 0x17ea: 0x00c0, 0x17eb: 0x00c0, 0x17ec: 0x00c3, 0x17ed: 0x00c3, 0x17ee: 0x00c3, 0x17ef: 0x00c3, + 0x17f0: 0x00c3, 0x17f1: 0x00c3, 0x17f2: 0x00c3, 0x17f3: 0x00c3, 0x17f4: 0x00c0, 0x17f5: 0x00c0, + 0x17f6: 0x00c3, 0x17f7: 0x00c3, 0x17fb: 0x0080, + 0x17fc: 0x0080, 0x17fd: 0x0080, 0x17fe: 0x0080, 0x17ff: 0x0080, + // Block 0x60, offset 0x1800 + 0x1800: 0x00c0, 0x1801: 0x00c0, 0x1802: 0x00c0, 0x1803: 0x00c0, 0x1804: 0x00c0, 0x1805: 0x00c0, + 0x1806: 0x00c0, 0x1807: 0x00c0, 0x1808: 0x00c0, 0x1809: 0x00c0, + 0x180d: 0x00c0, 0x180e: 0x00c0, 0x180f: 0x00c0, 0x1810: 0x00c0, 0x1811: 0x00c0, + 0x1812: 0x00c0, 0x1813: 0x00c0, 0x1814: 0x00c0, 0x1815: 0x00c0, 0x1816: 0x00c0, 0x1817: 0x00c0, + 0x1818: 0x00c0, 0x1819: 0x00c0, 0x181a: 0x00c0, 0x181b: 0x00c0, 0x181c: 0x00c0, 0x181d: 0x00c0, + 0x181e: 0x00c0, 0x181f: 0x00c0, 0x1820: 0x00c0, 0x1821: 0x00c0, 0x1822: 0x00c0, 0x1823: 0x00c0, + 0x1824: 0x00c0, 0x1825: 0x00c0, 0x1826: 0x00c0, 0x1827: 0x00c0, 0x1828: 0x00c0, 0x1829: 0x00c0, + 0x182a: 0x00c0, 0x182b: 0x00c0, 0x182c: 0x00c0, 0x182d: 0x00c0, 0x182e: 0x00c0, 0x182f: 0x00c0, + 0x1830: 0x00c0, 0x1831: 0x00c0, 0x1832: 0x00c0, 0x1833: 0x00c0, 0x1834: 0x00c0, 0x1835: 0x00c0, + 0x1836: 0x00c0, 0x1837: 0x00c0, 0x1838: 0x00c0, 0x1839: 0x00c0, 0x183a: 0x00c0, 0x183b: 0x00c0, + 0x183c: 0x00c0, 0x183d: 0x00c0, 0x183e: 0x0080, 0x183f: 0x0080, + // Block 0x61, offset 0x1840 + 0x1840: 0x00c0, 0x1841: 0x00c0, 0x1842: 0x00c0, 0x1843: 0x00c0, 0x1844: 0x00c0, 0x1845: 0x00c0, + 0x1846: 0x00c0, 0x1847: 0x00c0, 0x1848: 0x00c0, + // Block 0x62, offset 0x1880 + 0x1880: 0x0080, 0x1881: 0x0080, 0x1882: 0x0080, 0x1883: 0x0080, 0x1884: 0x0080, 0x1885: 0x0080, + 0x1886: 0x0080, 0x1887: 0x0080, + 0x1890: 0x00c3, 0x1891: 0x00c3, + 0x1892: 0x00c3, 0x1893: 0x0080, 0x1894: 0x00c3, 0x1895: 0x00c3, 0x1896: 0x00c3, 0x1897: 0x00c3, + 0x1898: 0x00c3, 0x1899: 0x00c3, 0x189a: 0x00c3, 0x189b: 0x00c3, 0x189c: 0x00c3, 0x189d: 0x00c3, + 0x189e: 0x00c3, 0x189f: 0x00c3, 0x18a0: 0x00c3, 0x18a1: 0x00c0, 0x18a2: 0x00c3, 0x18a3: 0x00c3, + 0x18a4: 0x00c3, 0x18a5: 0x00c3, 0x18a6: 0x00c3, 0x18a7: 0x00c3, 0x18a8: 0x00c3, 0x18a9: 0x00c0, + 0x18aa: 0x00c0, 0x18ab: 0x00c0, 0x18ac: 0x00c0, 0x18ad: 0x00c3, 0x18ae: 0x00c0, 0x18af: 0x00c0, + 0x18b0: 0x00c0, 0x18b1: 0x00c0, 0x18b2: 0x00c0, 0x18b3: 0x00c0, 0x18b4: 0x00c3, 0x18b5: 0x00c0, + 0x18b6: 0x00c0, 0x18b8: 0x00c3, 0x18b9: 0x00c3, + // Block 0x63, offset 0x18c0 + 0x18c0: 0x00c0, 0x18c1: 0x00c0, 0x18c2: 0x00c0, 0x18c3: 0x00c0, 0x18c4: 0x00c0, 0x18c5: 0x00c0, + 0x18c6: 0x00c0, 0x18c7: 0x00c0, 0x18c8: 0x00c0, 0x18c9: 0x00c0, 0x18ca: 0x00c0, 0x18cb: 0x00c0, + 0x18cc: 0x00c0, 0x18cd: 0x00c0, 0x18ce: 0x00c0, 0x18cf: 0x00c0, 0x18d0: 0x00c0, 0x18d1: 0x00c0, + 0x18d2: 0x00c0, 0x18d3: 0x00c0, 0x18d4: 0x00c0, 0x18d5: 0x00c0, 0x18d6: 0x00c0, 0x18d7: 0x00c0, + 0x18d8: 0x00c0, 0x18d9: 0x00c0, 0x18da: 0x00c0, 0x18db: 0x00c0, 0x18dc: 0x00c0, 0x18dd: 0x00c0, + 0x18de: 0x00c0, 0x18df: 0x00c0, 0x18e0: 0x00c0, 0x18e1: 0x00c0, 0x18e2: 0x00c0, 0x18e3: 0x00c0, + 0x18e4: 0x00c0, 0x18e5: 0x00c0, 0x18e6: 0x00c8, 0x18e7: 0x00c8, 0x18e8: 0x00c8, 0x18e9: 0x00c8, + 0x18ea: 0x00c8, 0x18eb: 0x00c0, 0x18ec: 0x0080, 0x18ed: 0x0080, 0x18ee: 0x0080, 0x18ef: 0x00c0, + 0x18f0: 0x0080, 0x18f1: 0x0080, 0x18f2: 0x0080, 0x18f3: 0x0080, 0x18f4: 0x0080, 0x18f5: 0x0080, + 0x18f6: 0x0080, 0x18f7: 0x0080, 0x18f8: 0x0080, 0x18f9: 0x0080, 0x18fa: 0x0080, 0x18fb: 0x00c0, + 0x18fc: 0x0080, 0x18fd: 0x0080, 0x18fe: 0x0080, 0x18ff: 0x0080, + // Block 0x64, offset 0x1900 + 0x1900: 0x0080, 0x1901: 0x0080, 0x1902: 0x0080, 0x1903: 0x0080, 0x1904: 0x0080, 0x1905: 0x0080, + 0x1906: 0x0080, 0x1907: 0x0080, 0x1908: 0x0080, 0x1909: 0x0080, 0x190a: 0x0080, 0x190b: 0x0080, + 0x190c: 0x0080, 0x190d: 0x0080, 0x190e: 0x00c0, 0x190f: 0x0080, 0x1910: 0x0080, 0x1911: 0x0080, + 0x1912: 0x0080, 0x1913: 0x0080, 0x1914: 0x0080, 0x1915: 0x0080, 0x1916: 0x0080, 0x1917: 0x0080, + 0x1918: 0x0080, 0x1919: 0x0080, 0x191a: 0x0080, 0x191b: 0x0080, 0x191c: 0x0080, 0x191d: 0x0088, + 0x191e: 0x0088, 0x191f: 0x0088, 0x1920: 0x0088, 0x1921: 0x0088, 0x1922: 0x0080, 0x1923: 0x0080, + 0x1924: 0x0080, 0x1925: 0x0080, 0x1926: 0x0088, 0x1927: 0x0088, 0x1928: 0x0088, 0x1929: 0x0088, + 0x192a: 0x0088, 0x192b: 0x00c0, 0x192c: 0x00c0, 0x192d: 0x00c0, 0x192e: 0x00c0, 0x192f: 0x00c0, + 0x1930: 0x00c0, 0x1931: 0x00c0, 0x1932: 0x00c0, 0x1933: 0x00c0, 0x1934: 0x00c0, 0x1935: 0x00c0, + 0x1936: 0x00c0, 0x1937: 0x00c0, 0x1938: 0x0080, 0x1939: 0x00c0, 0x193a: 0x00c0, 0x193b: 0x00c0, + 0x193c: 0x00c0, 0x193d: 0x00c0, 0x193e: 0x00c0, 0x193f: 0x00c0, + // Block 0x65, offset 0x1940 + 0x1940: 0x00c0, 0x1941: 0x00c0, 0x1942: 0x00c0, 0x1943: 0x00c0, 0x1944: 0x00c0, 0x1945: 0x00c0, + 0x1946: 0x00c0, 0x1947: 0x00c0, 0x1948: 0x00c0, 0x1949: 0x00c0, 0x194a: 0x00c0, 0x194b: 0x00c0, + 0x194c: 0x00c0, 0x194d: 0x00c0, 0x194e: 0x00c0, 0x194f: 0x00c0, 0x1950: 0x00c0, 0x1951: 0x00c0, + 0x1952: 0x00c0, 0x1953: 0x00c0, 0x1954: 0x00c0, 0x1955: 0x00c0, 0x1956: 0x00c0, 0x1957: 0x00c0, + 0x1958: 0x00c0, 0x1959: 0x00c0, 0x195a: 0x00c0, 0x195b: 0x0080, 0x195c: 0x0080, 0x195d: 0x0080, + 0x195e: 0x0080, 0x195f: 0x0080, 0x1960: 0x0080, 0x1961: 0x0080, 0x1962: 0x0080, 0x1963: 0x0080, + 0x1964: 0x0080, 0x1965: 0x0080, 0x1966: 0x0080, 0x1967: 0x0080, 0x1968: 0x0080, 0x1969: 0x0080, + 0x196a: 0x0080, 0x196b: 0x0080, 0x196c: 0x0080, 0x196d: 0x0080, 0x196e: 0x0080, 0x196f: 0x0080, + 0x1970: 0x0080, 0x1971: 0x0080, 0x1972: 0x0080, 0x1973: 0x0080, 0x1974: 0x0080, 0x1975: 0x0080, + 0x1976: 0x0080, 0x1977: 0x0080, 0x1978: 0x0080, 0x1979: 0x0080, 0x197a: 0x0080, 0x197b: 0x0080, + 0x197c: 0x0080, 0x197d: 0x0080, 0x197e: 0x0080, 0x197f: 0x0088, + // Block 0x66, offset 0x1980 + 0x1980: 0x00c3, 0x1981: 0x00c3, 0x1982: 0x00c3, 0x1983: 0x00c3, 0x1984: 0x00c3, 0x1985: 0x00c3, + 0x1986: 0x00c3, 0x1987: 0x00c3, 0x1988: 0x00c3, 0x1989: 0x00c3, 0x198a: 0x00c3, 0x198b: 0x00c3, + 0x198c: 0x00c3, 0x198d: 0x00c3, 0x198e: 0x00c3, 0x198f: 0x00c3, 0x1990: 0x00c3, 0x1991: 0x00c3, + 0x1992: 0x00c3, 0x1993: 0x00c3, 0x1994: 0x00c3, 0x1995: 0x00c3, 0x1996: 0x00c3, 0x1997: 0x00c3, + 0x1998: 0x00c3, 0x1999: 0x00c3, 0x199a: 0x00c3, 0x199b: 0x00c3, 0x199c: 0x00c3, 0x199d: 0x00c3, + 0x199e: 0x00c3, 0x199f: 0x00c3, 0x19a0: 0x00c3, 0x19a1: 0x00c3, 0x19a2: 0x00c3, 0x19a3: 0x00c3, + 0x19a4: 0x00c3, 0x19a5: 0x00c3, 0x19a6: 0x00c3, 0x19a7: 0x00c3, 0x19a8: 0x00c3, 0x19a9: 0x00c3, + 0x19aa: 0x00c3, 0x19ab: 0x00c3, 0x19ac: 0x00c3, 0x19ad: 0x00c3, 0x19ae: 0x00c3, 0x19af: 0x00c3, + 0x19b0: 0x00c3, 0x19b1: 0x00c3, 0x19b2: 0x00c3, 0x19b3: 0x00c3, 0x19b4: 0x00c3, 0x19b5: 0x00c3, + 0x19bb: 0x00c3, + 0x19bc: 0x00c3, 0x19bd: 0x00c3, 0x19be: 0x00c3, 0x19bf: 0x00c3, + // Block 0x67, offset 0x19c0 + 0x19c0: 0x00c0, 0x19c1: 0x00c0, 0x19c2: 0x00c0, 0x19c3: 0x00c0, 0x19c4: 0x00c0, 0x19c5: 0x00c0, + 0x19c6: 0x00c0, 0x19c7: 0x00c0, 0x19c8: 0x00c0, 0x19c9: 0x00c0, 0x19ca: 0x00c0, 0x19cb: 0x00c0, + 0x19cc: 0x00c0, 0x19cd: 0x00c0, 0x19ce: 0x00c0, 0x19cf: 0x00c0, 0x19d0: 0x00c0, 0x19d1: 0x00c0, + 0x19d2: 0x00c0, 0x19d3: 0x00c0, 0x19d4: 0x00c0, 0x19d5: 0x00c0, 0x19d6: 0x00c0, 0x19d7: 0x00c0, + 0x19d8: 0x00c0, 0x19d9: 0x00c0, 0x19da: 0x0080, 0x19db: 0x0080, 0x19dc: 0x00c0, 0x19dd: 0x00c0, + 0x19de: 0x00c0, 0x19df: 0x00c0, 0x19e0: 0x00c0, 0x19e1: 0x00c0, 0x19e2: 0x00c0, 0x19e3: 0x00c0, + 0x19e4: 0x00c0, 0x19e5: 0x00c0, 0x19e6: 0x00c0, 0x19e7: 0x00c0, 0x19e8: 0x00c0, 0x19e9: 0x00c0, + 0x19ea: 0x00c0, 0x19eb: 0x00c0, 0x19ec: 0x00c0, 0x19ed: 0x00c0, 0x19ee: 0x00c0, 0x19ef: 0x00c0, + 0x19f0: 0x00c0, 0x19f1: 0x00c0, 0x19f2: 0x00c0, 0x19f3: 0x00c0, 0x19f4: 0x00c0, 0x19f5: 0x00c0, + 0x19f6: 0x00c0, 0x19f7: 0x00c0, 0x19f8: 0x00c0, 0x19f9: 0x00c0, 0x19fa: 0x00c0, 0x19fb: 0x00c0, + 0x19fc: 0x00c0, 0x19fd: 0x00c0, 0x19fe: 0x00c0, 0x19ff: 0x00c0, + // Block 0x68, offset 0x1a00 + 0x1a00: 0x00c8, 0x1a01: 0x00c8, 0x1a02: 0x00c8, 0x1a03: 0x00c8, 0x1a04: 0x00c8, 0x1a05: 0x00c8, + 0x1a06: 0x00c8, 0x1a07: 0x00c8, 0x1a08: 0x00c8, 0x1a09: 0x00c8, 0x1a0a: 0x00c8, 0x1a0b: 0x00c8, + 0x1a0c: 0x00c8, 0x1a0d: 0x00c8, 0x1a0e: 0x00c8, 0x1a0f: 0x00c8, 0x1a10: 0x00c8, 0x1a11: 0x00c8, + 0x1a12: 0x00c8, 0x1a13: 0x00c8, 0x1a14: 0x00c8, 0x1a15: 0x00c8, + 0x1a18: 0x00c8, 0x1a19: 0x00c8, 0x1a1a: 0x00c8, 0x1a1b: 0x00c8, 0x1a1c: 0x00c8, 0x1a1d: 0x00c8, + 0x1a20: 0x00c8, 0x1a21: 0x00c8, 0x1a22: 0x00c8, 0x1a23: 0x00c8, + 0x1a24: 0x00c8, 0x1a25: 0x00c8, 0x1a26: 0x00c8, 0x1a27: 0x00c8, 0x1a28: 0x00c8, 0x1a29: 0x00c8, + 0x1a2a: 0x00c8, 0x1a2b: 0x00c8, 0x1a2c: 0x00c8, 0x1a2d: 0x00c8, 0x1a2e: 0x00c8, 0x1a2f: 0x00c8, + 0x1a30: 0x00c8, 0x1a31: 0x00c8, 0x1a32: 0x00c8, 0x1a33: 0x00c8, 0x1a34: 0x00c8, 0x1a35: 0x00c8, + 0x1a36: 0x00c8, 0x1a37: 0x00c8, 0x1a38: 0x00c8, 0x1a39: 0x00c8, 0x1a3a: 0x00c8, 0x1a3b: 0x00c8, + 0x1a3c: 0x00c8, 0x1a3d: 0x00c8, 0x1a3e: 0x00c8, 0x1a3f: 0x00c8, + // Block 0x69, offset 0x1a40 + 0x1a40: 0x00c8, 0x1a41: 0x00c8, 0x1a42: 0x00c8, 0x1a43: 0x00c8, 0x1a44: 0x00c8, 0x1a45: 0x00c8, + 0x1a48: 0x00c8, 0x1a49: 0x00c8, 0x1a4a: 0x00c8, 0x1a4b: 0x00c8, + 0x1a4c: 0x00c8, 0x1a4d: 0x00c8, 0x1a50: 0x00c8, 0x1a51: 0x00c8, + 0x1a52: 0x00c8, 0x1a53: 0x00c8, 0x1a54: 0x00c8, 0x1a55: 0x00c8, 0x1a56: 0x00c8, 0x1a57: 0x00c8, + 0x1a59: 0x00c8, 0x1a5b: 0x00c8, 0x1a5d: 0x00c8, + 0x1a5f: 0x00c8, 0x1a60: 0x00c8, 0x1a61: 0x00c8, 0x1a62: 0x00c8, 0x1a63: 0x00c8, + 0x1a64: 0x00c8, 0x1a65: 0x00c8, 0x1a66: 0x00c8, 0x1a67: 0x00c8, 0x1a68: 0x00c8, 0x1a69: 0x00c8, + 0x1a6a: 0x00c8, 0x1a6b: 0x00c8, 0x1a6c: 0x00c8, 0x1a6d: 0x00c8, 0x1a6e: 0x00c8, 0x1a6f: 0x00c8, + 0x1a70: 0x00c8, 0x1a71: 0x0088, 0x1a72: 0x00c8, 0x1a73: 0x0088, 0x1a74: 0x00c8, 0x1a75: 0x0088, + 0x1a76: 0x00c8, 0x1a77: 0x0088, 0x1a78: 0x00c8, 0x1a79: 0x0088, 0x1a7a: 0x00c8, 0x1a7b: 0x0088, + 0x1a7c: 0x00c8, 0x1a7d: 0x0088, + // Block 0x6a, offset 0x1a80 + 0x1a80: 0x00c8, 0x1a81: 0x00c8, 0x1a82: 0x00c8, 0x1a83: 0x00c8, 0x1a84: 0x00c8, 0x1a85: 0x00c8, + 0x1a86: 0x00c8, 0x1a87: 0x00c8, 0x1a88: 0x0088, 0x1a89: 0x0088, 0x1a8a: 0x0088, 0x1a8b: 0x0088, + 0x1a8c: 0x0088, 0x1a8d: 0x0088, 0x1a8e: 0x0088, 0x1a8f: 0x0088, 0x1a90: 0x00c8, 0x1a91: 0x00c8, + 0x1a92: 0x00c8, 0x1a93: 0x00c8, 0x1a94: 0x00c8, 0x1a95: 0x00c8, 0x1a96: 0x00c8, 0x1a97: 0x00c8, + 0x1a98: 0x0088, 0x1a99: 0x0088, 0x1a9a: 0x0088, 0x1a9b: 0x0088, 0x1a9c: 0x0088, 0x1a9d: 0x0088, + 0x1a9e: 0x0088, 0x1a9f: 0x0088, 0x1aa0: 0x00c8, 0x1aa1: 0x00c8, 0x1aa2: 0x00c8, 0x1aa3: 0x00c8, + 0x1aa4: 0x00c8, 0x1aa5: 0x00c8, 0x1aa6: 0x00c8, 0x1aa7: 0x00c8, 0x1aa8: 0x0088, 0x1aa9: 0x0088, + 0x1aaa: 0x0088, 0x1aab: 0x0088, 0x1aac: 0x0088, 0x1aad: 0x0088, 0x1aae: 0x0088, 0x1aaf: 0x0088, + 0x1ab0: 0x00c8, 0x1ab1: 0x00c8, 0x1ab2: 0x00c8, 0x1ab3: 0x00c8, 0x1ab4: 0x00c8, + 0x1ab6: 0x00c8, 0x1ab7: 0x00c8, 0x1ab8: 0x00c8, 0x1ab9: 0x00c8, 0x1aba: 0x00c8, 0x1abb: 0x0088, + 0x1abc: 0x0088, 0x1abd: 0x0088, 0x1abe: 0x0088, 0x1abf: 0x0088, + // Block 0x6b, offset 0x1ac0 + 0x1ac0: 0x0088, 0x1ac1: 0x0088, 0x1ac2: 0x00c8, 0x1ac3: 0x00c8, 0x1ac4: 0x00c8, + 0x1ac6: 0x00c8, 0x1ac7: 0x00c8, 0x1ac8: 0x00c8, 0x1ac9: 0x0088, 0x1aca: 0x00c8, 0x1acb: 0x0088, + 0x1acc: 0x0088, 0x1acd: 0x0088, 0x1ace: 0x0088, 0x1acf: 0x0088, 0x1ad0: 0x00c8, 0x1ad1: 0x00c8, + 0x1ad2: 0x00c8, 0x1ad3: 0x0088, 0x1ad6: 0x00c8, 0x1ad7: 0x00c8, + 0x1ad8: 0x00c8, 0x1ad9: 0x00c8, 0x1ada: 0x00c8, 0x1adb: 0x0088, 0x1add: 0x0088, + 0x1ade: 0x0088, 0x1adf: 0x0088, 0x1ae0: 0x00c8, 0x1ae1: 0x00c8, 0x1ae2: 0x00c8, 0x1ae3: 0x0088, + 0x1ae4: 0x00c8, 0x1ae5: 0x00c8, 0x1ae6: 0x00c8, 0x1ae7: 0x00c8, 0x1ae8: 0x00c8, 0x1ae9: 0x00c8, + 0x1aea: 0x00c8, 0x1aeb: 0x0088, 0x1aec: 0x00c8, 0x1aed: 0x0088, 0x1aee: 0x0088, 0x1aef: 0x0088, + 0x1af2: 0x00c8, 0x1af3: 0x00c8, 0x1af4: 0x00c8, + 0x1af6: 0x00c8, 0x1af7: 0x00c8, 0x1af8: 0x00c8, 0x1af9: 0x0088, 0x1afa: 0x00c8, 0x1afb: 0x0088, + 0x1afc: 0x0088, 0x1afd: 0x0088, 0x1afe: 0x0088, + // Block 0x6c, offset 0x1b00 + 0x1b00: 0x0080, 0x1b01: 0x0080, 0x1b02: 0x0080, 0x1b03: 0x0080, 0x1b04: 0x0080, 0x1b05: 0x0080, + 0x1b06: 0x0080, 0x1b07: 0x0080, 0x1b08: 0x0080, 0x1b09: 0x0080, 0x1b0a: 0x0080, 0x1b0b: 0x0040, + 0x1b0c: 0x004d, 0x1b0d: 0x004e, 0x1b0e: 0x0040, 0x1b0f: 0x0040, 0x1b10: 0x0080, 0x1b11: 0x0080, + 0x1b12: 0x0080, 0x1b13: 0x0080, 0x1b14: 0x0080, 0x1b15: 0x0080, 0x1b16: 0x0080, 0x1b17: 0x0080, + 0x1b18: 0x0080, 0x1b19: 0x0080, 0x1b1a: 0x0080, 0x1b1b: 0x0080, 0x1b1c: 0x0080, 0x1b1d: 0x0080, + 0x1b1e: 0x0080, 0x1b1f: 0x0080, 0x1b20: 0x0080, 0x1b21: 0x0080, 0x1b22: 0x0080, 0x1b23: 0x0080, + 0x1b24: 0x0080, 0x1b25: 0x0080, 0x1b26: 0x0080, 0x1b27: 0x0080, 0x1b28: 0x0040, 0x1b29: 0x0040, + 0x1b2a: 0x0040, 0x1b2b: 0x0040, 0x1b2c: 0x0040, 0x1b2d: 0x0040, 0x1b2e: 0x0040, 0x1b2f: 0x0080, + 0x1b30: 0x0080, 0x1b31: 0x0080, 0x1b32: 0x0080, 0x1b33: 0x0080, 0x1b34: 0x0080, 0x1b35: 0x0080, + 0x1b36: 0x0080, 0x1b37: 0x0080, 0x1b38: 0x0080, 0x1b39: 0x0080, 0x1b3a: 0x0080, 0x1b3b: 0x0080, + 0x1b3c: 0x0080, 0x1b3d: 0x0080, 0x1b3e: 0x0080, 0x1b3f: 0x0080, + // Block 0x6d, offset 0x1b40 + 0x1b40: 0x0080, 0x1b41: 0x0080, 0x1b42: 0x0080, 0x1b43: 0x0080, 0x1b44: 0x0080, 0x1b45: 0x0080, + 0x1b46: 0x0080, 0x1b47: 0x0080, 0x1b48: 0x0080, 0x1b49: 0x0080, 0x1b4a: 0x0080, 0x1b4b: 0x0080, + 0x1b4c: 0x0080, 0x1b4d: 0x0080, 0x1b4e: 0x0080, 0x1b4f: 0x0080, 0x1b50: 0x0080, 0x1b51: 0x0080, + 0x1b52: 0x0080, 0x1b53: 0x0080, 0x1b54: 0x0080, 0x1b55: 0x0080, 0x1b56: 0x0080, 0x1b57: 0x0080, + 0x1b58: 0x0080, 0x1b59: 0x0080, 0x1b5a: 0x0080, 0x1b5b: 0x0080, 0x1b5c: 0x0080, 0x1b5d: 0x0080, + 0x1b5e: 0x0080, 0x1b5f: 0x0080, 0x1b60: 0x0040, 0x1b61: 0x0040, 0x1b62: 0x0040, 0x1b63: 0x0040, + 0x1b64: 0x0040, 0x1b66: 0x0040, 0x1b67: 0x0040, 0x1b68: 0x0040, 0x1b69: 0x0040, + 0x1b6a: 0x0040, 0x1b6b: 0x0040, 0x1b6c: 0x0040, 0x1b6d: 0x0040, 0x1b6e: 0x0040, 0x1b6f: 0x0040, + 0x1b70: 0x0080, 0x1b71: 0x0080, 0x1b74: 0x0080, 0x1b75: 0x0080, + 0x1b76: 0x0080, 0x1b77: 0x0080, 0x1b78: 0x0080, 0x1b79: 0x0080, 0x1b7a: 0x0080, 0x1b7b: 0x0080, + 0x1b7c: 0x0080, 0x1b7d: 0x0080, 0x1b7e: 0x0080, 0x1b7f: 0x0080, + // Block 0x6e, offset 0x1b80 + 0x1b80: 0x0080, 0x1b81: 0x0080, 0x1b82: 0x0080, 0x1b83: 0x0080, 0x1b84: 0x0080, 0x1b85: 0x0080, + 0x1b86: 0x0080, 0x1b87: 0x0080, 0x1b88: 0x0080, 0x1b89: 0x0080, 0x1b8a: 0x0080, 0x1b8b: 0x0080, + 0x1b8c: 0x0080, 0x1b8d: 0x0080, 0x1b8e: 0x0080, 0x1b90: 0x0080, 0x1b91: 0x0080, + 0x1b92: 0x0080, 0x1b93: 0x0080, 0x1b94: 0x0080, 0x1b95: 0x0080, 0x1b96: 0x0080, 0x1b97: 0x0080, + 0x1b98: 0x0080, 0x1b99: 0x0080, 0x1b9a: 0x0080, 0x1b9b: 0x0080, 0x1b9c: 0x0080, + 0x1ba0: 0x0080, 0x1ba1: 0x0080, 0x1ba2: 0x0080, 0x1ba3: 0x0080, + 0x1ba4: 0x0080, 0x1ba5: 0x0080, 0x1ba6: 0x0080, 0x1ba7: 0x0080, 0x1ba8: 0x0080, 0x1ba9: 0x0080, + 0x1baa: 0x0080, 0x1bab: 0x0080, 0x1bac: 0x0080, 0x1bad: 0x0080, 0x1bae: 0x0080, 0x1baf: 0x0080, + 0x1bb0: 0x0080, 0x1bb1: 0x0080, 0x1bb2: 0x0080, 0x1bb3: 0x0080, 0x1bb4: 0x0080, 0x1bb5: 0x0080, + 0x1bb6: 0x0080, 0x1bb7: 0x0080, 0x1bb8: 0x0080, 0x1bb9: 0x0080, 0x1bba: 0x0080, 0x1bbb: 0x0080, + 0x1bbc: 0x0080, 0x1bbd: 0x0080, 0x1bbe: 0x0080, + // Block 0x6f, offset 0x1bc0 + 0x1bd0: 0x00c3, 0x1bd1: 0x00c3, + 0x1bd2: 0x00c3, 0x1bd3: 0x00c3, 0x1bd4: 0x00c3, 0x1bd5: 0x00c3, 0x1bd6: 0x00c3, 0x1bd7: 0x00c3, + 0x1bd8: 0x00c3, 0x1bd9: 0x00c3, 0x1bda: 0x00c3, 0x1bdb: 0x00c3, 0x1bdc: 0x00c3, 0x1bdd: 0x0083, + 0x1bde: 0x0083, 0x1bdf: 0x0083, 0x1be0: 0x0083, 0x1be1: 0x00c3, 0x1be2: 0x0083, 0x1be3: 0x0083, + 0x1be4: 0x0083, 0x1be5: 0x00c3, 0x1be6: 0x00c3, 0x1be7: 0x00c3, 0x1be8: 0x00c3, 0x1be9: 0x00c3, + 0x1bea: 0x00c3, 0x1beb: 0x00c3, 0x1bec: 0x00c3, 0x1bed: 0x00c3, 0x1bee: 0x00c3, 0x1bef: 0x00c3, + 0x1bf0: 0x00c3, + // Block 0x70, offset 0x1c00 + 0x1c00: 0x0080, 0x1c01: 0x0080, 0x1c02: 0x0080, 0x1c03: 0x0080, 0x1c04: 0x0080, 0x1c05: 0x0080, + 0x1c06: 0x0080, 0x1c07: 0x0080, 0x1c08: 0x0080, 0x1c09: 0x0080, 0x1c0a: 0x0080, 0x1c0b: 0x0080, + 0x1c0c: 0x0080, 0x1c0d: 0x0080, 0x1c0e: 0x0080, 0x1c0f: 0x0080, 0x1c10: 0x0080, 0x1c11: 0x0080, + 0x1c12: 0x0080, 0x1c13: 0x0080, 0x1c14: 0x0080, 0x1c15: 0x0080, 0x1c16: 0x0080, 0x1c17: 0x0080, + 0x1c18: 0x0080, 0x1c19: 0x0080, 0x1c1a: 0x0080, 0x1c1b: 0x0080, 0x1c1c: 0x0080, 0x1c1d: 0x0080, + 0x1c1e: 0x0080, 0x1c1f: 0x0080, 0x1c20: 0x0080, 0x1c21: 0x0080, 0x1c22: 0x0080, 0x1c23: 0x0080, + 0x1c24: 0x0080, 0x1c25: 0x0080, 0x1c26: 0x0088, 0x1c27: 0x0080, 0x1c28: 0x0080, 0x1c29: 0x0080, + 0x1c2a: 0x0080, 0x1c2b: 0x0080, 0x1c2c: 0x0080, 0x1c2d: 0x0080, 0x1c2e: 0x0080, 0x1c2f: 0x0080, + 0x1c30: 0x0080, 0x1c31: 0x0080, 0x1c32: 0x00c0, 0x1c33: 0x0080, 0x1c34: 0x0080, 0x1c35: 0x0080, + 0x1c36: 0x0080, 0x1c37: 0x0080, 0x1c38: 0x0080, 0x1c39: 0x0080, 0x1c3a: 0x0080, 0x1c3b: 0x0080, + 0x1c3c: 0x0080, 0x1c3d: 0x0080, 0x1c3e: 0x0080, 0x1c3f: 0x0080, + // Block 0x71, offset 0x1c40 + 0x1c40: 0x0080, 0x1c41: 0x0080, 0x1c42: 0x0080, 0x1c43: 0x0080, 0x1c44: 0x0080, 0x1c45: 0x0080, + 0x1c46: 0x0080, 0x1c47: 0x0080, 0x1c48: 0x0080, 0x1c49: 0x0080, 0x1c4a: 0x0080, 0x1c4b: 0x0080, + 0x1c4c: 0x0080, 0x1c4d: 0x0080, 0x1c4e: 0x00c0, 0x1c4f: 0x0080, 0x1c50: 0x0080, 0x1c51: 0x0080, + 0x1c52: 0x0080, 0x1c53: 0x0080, 0x1c54: 0x0080, 0x1c55: 0x0080, 0x1c56: 0x0080, 0x1c57: 0x0080, + 0x1c58: 0x0080, 0x1c59: 0x0080, 0x1c5a: 0x0080, 0x1c5b: 0x0080, 0x1c5c: 0x0080, 0x1c5d: 0x0080, + 0x1c5e: 0x0080, 0x1c5f: 0x0080, 0x1c60: 0x0080, 0x1c61: 0x0080, 0x1c62: 0x0080, 0x1c63: 0x0080, + 0x1c64: 0x0080, 0x1c65: 0x0080, 0x1c66: 0x0080, 0x1c67: 0x0080, 0x1c68: 0x0080, 0x1c69: 0x0080, + 0x1c6a: 0x0080, 0x1c6b: 0x0080, 0x1c6c: 0x0080, 0x1c6d: 0x0080, 0x1c6e: 0x0080, 0x1c6f: 0x0080, + 0x1c70: 0x0080, 0x1c71: 0x0080, 0x1c72: 0x0080, 0x1c73: 0x0080, 0x1c74: 0x0080, 0x1c75: 0x0080, + 0x1c76: 0x0080, 0x1c77: 0x0080, 0x1c78: 0x0080, 0x1c79: 0x0080, 0x1c7a: 0x0080, 0x1c7b: 0x0080, + 0x1c7c: 0x0080, 0x1c7d: 0x0080, 0x1c7e: 0x0080, 0x1c7f: 0x0080, + // Block 0x72, offset 0x1c80 + 0x1c80: 0x0080, 0x1c81: 0x0080, 0x1c82: 0x0080, 0x1c83: 0x00c0, 0x1c84: 0x00c0, 0x1c85: 0x0080, + 0x1c86: 0x0080, 0x1c87: 0x0080, 0x1c88: 0x0080, 0x1c89: 0x0080, 0x1c8a: 0x0080, 0x1c8b: 0x0080, + 0x1c90: 0x0080, 0x1c91: 0x0080, + 0x1c92: 0x0080, 0x1c93: 0x0080, 0x1c94: 0x0080, 0x1c95: 0x0080, 0x1c96: 0x0080, 0x1c97: 0x0080, + 0x1c98: 0x0080, 0x1c99: 0x0080, 0x1c9a: 0x0080, 0x1c9b: 0x0080, 0x1c9c: 0x0080, 0x1c9d: 0x0080, + 0x1c9e: 0x0080, 0x1c9f: 0x0080, 0x1ca0: 0x0080, 0x1ca1: 0x0080, 0x1ca2: 0x0080, 0x1ca3: 0x0080, + 0x1ca4: 0x0080, 0x1ca5: 0x0080, 0x1ca6: 0x0080, 0x1ca7: 0x0080, 0x1ca8: 0x0080, 0x1ca9: 0x0080, + 0x1caa: 0x0080, 0x1cab: 0x0080, 0x1cac: 0x0080, 0x1cad: 0x0080, 0x1cae: 0x0080, 0x1caf: 0x0080, + 0x1cb0: 0x0080, 0x1cb1: 0x0080, 0x1cb2: 0x0080, 0x1cb3: 0x0080, 0x1cb4: 0x0080, 0x1cb5: 0x0080, + 0x1cb6: 0x0080, 0x1cb7: 0x0080, 0x1cb8: 0x0080, 0x1cb9: 0x0080, 0x1cba: 0x0080, 0x1cbb: 0x0080, + 0x1cbc: 0x0080, 0x1cbd: 0x0080, 0x1cbe: 0x0080, 0x1cbf: 0x0080, + // Block 0x73, offset 0x1cc0 + 0x1cc0: 0x0080, 0x1cc1: 0x0080, 0x1cc2: 0x0080, 0x1cc3: 0x0080, 0x1cc4: 0x0080, 0x1cc5: 0x0080, + 0x1cc6: 0x0080, 0x1cc7: 0x0080, 0x1cc8: 0x0080, 0x1cc9: 0x0080, 0x1cca: 0x0080, 0x1ccb: 0x0080, + 0x1ccc: 0x0080, 0x1ccd: 0x0080, 0x1cce: 0x0080, 0x1ccf: 0x0080, 0x1cd0: 0x0080, 0x1cd1: 0x0080, + 0x1cd2: 0x0080, 0x1cd3: 0x0080, 0x1cd4: 0x0080, 0x1cd5: 0x0080, 0x1cd6: 0x0080, 0x1cd7: 0x0080, + 0x1cd8: 0x0080, 0x1cd9: 0x0080, 0x1cda: 0x0080, 0x1cdb: 0x0080, 0x1cdc: 0x0080, 0x1cdd: 0x0080, + 0x1cde: 0x0080, 0x1cdf: 0x0080, 0x1ce0: 0x0080, 0x1ce1: 0x0080, 0x1ce2: 0x0080, 0x1ce3: 0x0080, + 0x1ce4: 0x0080, 0x1ce5: 0x0080, 0x1ce6: 0x0080, 0x1ce7: 0x0080, 0x1ce8: 0x0080, 0x1ce9: 0x0080, + 0x1cea: 0x0080, 0x1ceb: 0x0080, 0x1cec: 0x0080, 0x1ced: 0x0080, 0x1cee: 0x0080, 0x1cef: 0x0080, + 0x1cf0: 0x0080, 0x1cf1: 0x0080, 0x1cf2: 0x0080, 0x1cf3: 0x0080, 0x1cf4: 0x0080, 0x1cf5: 0x0080, + 0x1cf6: 0x0080, 0x1cf7: 0x0080, 0x1cf8: 0x0080, 0x1cf9: 0x0080, 0x1cfa: 0x0080, 0x1cfb: 0x0080, + 0x1cfc: 0x0080, 0x1cfd: 0x0080, 0x1cfe: 0x0080, 0x1cff: 0x0080, + // Block 0x74, offset 0x1d00 + 0x1d00: 0x0080, 0x1d01: 0x0080, 0x1d02: 0x0080, 0x1d03: 0x0080, 0x1d04: 0x0080, 0x1d05: 0x0080, + 0x1d06: 0x0080, 0x1d07: 0x0080, 0x1d08: 0x0080, 0x1d09: 0x0080, 0x1d0a: 0x0080, 0x1d0b: 0x0080, + 0x1d0c: 0x0080, 0x1d0d: 0x0080, 0x1d0e: 0x0080, 0x1d0f: 0x0080, 0x1d10: 0x0080, 0x1d11: 0x0080, + 0x1d12: 0x0080, 0x1d13: 0x0080, 0x1d14: 0x0080, 0x1d15: 0x0080, 0x1d16: 0x0080, 0x1d17: 0x0080, + 0x1d18: 0x0080, 0x1d19: 0x0080, 0x1d1a: 0x0080, 0x1d1b: 0x0080, 0x1d1c: 0x0080, 0x1d1d: 0x0080, + 0x1d1e: 0x0080, 0x1d1f: 0x0080, 0x1d20: 0x0080, 0x1d21: 0x0080, 0x1d22: 0x0080, 0x1d23: 0x0080, + 0x1d24: 0x0080, 0x1d25: 0x0080, 0x1d26: 0x0080, 0x1d27: 0x0080, 0x1d28: 0x0080, 0x1d29: 0x0080, + 0x1d2a: 0x0080, 0x1d2b: 0x0080, 0x1d2c: 0x0080, 0x1d2d: 0x0080, 0x1d2e: 0x0080, 0x1d2f: 0x0080, + 0x1d30: 0x0080, 0x1d31: 0x0080, 0x1d32: 0x0080, 0x1d33: 0x0080, 0x1d34: 0x0080, 0x1d35: 0x0080, + 0x1d36: 0x0080, 0x1d37: 0x0080, 0x1d38: 0x0080, 0x1d39: 0x0080, 0x1d3a: 0x0080, 0x1d3b: 0x0080, + 0x1d3c: 0x0080, 0x1d3d: 0x0080, 0x1d3e: 0x0080, + // Block 0x75, offset 0x1d40 + 0x1d40: 0x0080, 0x1d41: 0x0080, 0x1d42: 0x0080, 0x1d43: 0x0080, 0x1d44: 0x0080, 0x1d45: 0x0080, + 0x1d46: 0x0080, 0x1d47: 0x0080, 0x1d48: 0x0080, 0x1d49: 0x0080, 0x1d4a: 0x0080, 0x1d4b: 0x0080, + 0x1d4c: 0x0080, 0x1d4d: 0x0080, 0x1d4e: 0x0080, 0x1d4f: 0x0080, 0x1d50: 0x0080, 0x1d51: 0x0080, + 0x1d52: 0x0080, 0x1d53: 0x0080, 0x1d54: 0x0080, 0x1d55: 0x0080, 0x1d56: 0x0080, 0x1d57: 0x0080, + 0x1d58: 0x0080, 0x1d59: 0x0080, 0x1d5a: 0x0080, 0x1d5b: 0x0080, 0x1d5c: 0x0080, 0x1d5d: 0x0080, + 0x1d5e: 0x0080, 0x1d5f: 0x0080, 0x1d60: 0x0080, 0x1d61: 0x0080, 0x1d62: 0x0080, 0x1d63: 0x0080, + 0x1d64: 0x0080, 0x1d65: 0x0080, 0x1d66: 0x0080, + // Block 0x76, offset 0x1d80 + 0x1d80: 0x0080, 0x1d81: 0x0080, 0x1d82: 0x0080, 0x1d83: 0x0080, 0x1d84: 0x0080, 0x1d85: 0x0080, + 0x1d86: 0x0080, 0x1d87: 0x0080, 0x1d88: 0x0080, 0x1d89: 0x0080, 0x1d8a: 0x0080, + 0x1da0: 0x0080, 0x1da1: 0x0080, 0x1da2: 0x0080, 0x1da3: 0x0080, + 0x1da4: 0x0080, 0x1da5: 0x0080, 0x1da6: 0x0080, 0x1da7: 0x0080, 0x1da8: 0x0080, 0x1da9: 0x0080, + 0x1daa: 0x0080, 0x1dab: 0x0080, 0x1dac: 0x0080, 0x1dad: 0x0080, 0x1dae: 0x0080, 0x1daf: 0x0080, + 0x1db0: 0x0080, 0x1db1: 0x0080, 0x1db2: 0x0080, 0x1db3: 0x0080, 0x1db4: 0x0080, 0x1db5: 0x0080, + 0x1db6: 0x0080, 0x1db7: 0x0080, 0x1db8: 0x0080, 0x1db9: 0x0080, 0x1dba: 0x0080, 0x1dbb: 0x0080, + 0x1dbc: 0x0080, 0x1dbd: 0x0080, 0x1dbe: 0x0080, 0x1dbf: 0x0080, + // Block 0x77, offset 0x1dc0 + 0x1dc0: 0x0080, 0x1dc1: 0x0080, 0x1dc2: 0x0080, 0x1dc3: 0x0080, 0x1dc4: 0x0080, 0x1dc5: 0x0080, + 0x1dc6: 0x0080, 0x1dc7: 0x0080, 0x1dc8: 0x0080, 0x1dc9: 0x0080, 0x1dca: 0x0080, 0x1dcb: 0x0080, + 0x1dcc: 0x0080, 0x1dcd: 0x0080, 0x1dce: 0x0080, 0x1dcf: 0x0080, 0x1dd0: 0x0080, 0x1dd1: 0x0080, + 0x1dd2: 0x0080, 0x1dd3: 0x0080, 0x1dd4: 0x0080, 0x1dd5: 0x0080, 0x1dd6: 0x0080, 0x1dd7: 0x0080, + 0x1dd8: 0x0080, 0x1dd9: 0x0080, 0x1dda: 0x0080, 0x1ddb: 0x0080, 0x1ddc: 0x0080, 0x1ddd: 0x0080, + 0x1dde: 0x0080, 0x1ddf: 0x0080, 0x1de0: 0x0080, 0x1de1: 0x0080, 0x1de2: 0x0080, 0x1de3: 0x0080, + 0x1de4: 0x0080, 0x1de5: 0x0080, 0x1de6: 0x0080, 0x1de7: 0x0080, 0x1de8: 0x0080, 0x1de9: 0x0080, + 0x1dea: 0x0080, 0x1deb: 0x0080, 0x1dec: 0x0080, 0x1ded: 0x0080, 0x1dee: 0x0080, 0x1def: 0x0080, + 0x1df0: 0x0080, 0x1df1: 0x0080, 0x1df2: 0x0080, 0x1df3: 0x0080, + 0x1df6: 0x0080, 0x1df7: 0x0080, 0x1df8: 0x0080, 0x1df9: 0x0080, 0x1dfa: 0x0080, 0x1dfb: 0x0080, + 0x1dfc: 0x0080, 0x1dfd: 0x0080, 0x1dfe: 0x0080, 0x1dff: 0x0080, + // Block 0x78, offset 0x1e00 + 0x1e00: 0x0080, 0x1e01: 0x0080, 0x1e02: 0x0080, 0x1e03: 0x0080, 0x1e04: 0x0080, 0x1e05: 0x0080, + 0x1e06: 0x0080, 0x1e07: 0x0080, 0x1e08: 0x0080, 0x1e09: 0x0080, 0x1e0a: 0x0080, 0x1e0b: 0x0080, + 0x1e0c: 0x0080, 0x1e0d: 0x0080, 0x1e0e: 0x0080, 0x1e0f: 0x0080, 0x1e10: 0x0080, 0x1e11: 0x0080, + 0x1e12: 0x0080, 0x1e13: 0x0080, 0x1e14: 0x0080, 0x1e15: 0x0080, + 0x1e18: 0x0080, 0x1e19: 0x0080, 0x1e1a: 0x0080, 0x1e1b: 0x0080, 0x1e1c: 0x0080, 0x1e1d: 0x0080, + 0x1e1e: 0x0080, 0x1e1f: 0x0080, 0x1e20: 0x0080, 0x1e21: 0x0080, 0x1e22: 0x0080, 0x1e23: 0x0080, + 0x1e24: 0x0080, 0x1e25: 0x0080, 0x1e26: 0x0080, 0x1e27: 0x0080, 0x1e28: 0x0080, 0x1e29: 0x0080, + 0x1e2a: 0x0080, 0x1e2b: 0x0080, 0x1e2c: 0x0080, 0x1e2d: 0x0080, 0x1e2e: 0x0080, 0x1e2f: 0x0080, + 0x1e30: 0x0080, 0x1e31: 0x0080, 0x1e32: 0x0080, 0x1e33: 0x0080, 0x1e34: 0x0080, 0x1e35: 0x0080, + 0x1e36: 0x0080, 0x1e37: 0x0080, 0x1e38: 0x0080, 0x1e39: 0x0080, + 0x1e3d: 0x0080, 0x1e3e: 0x0080, 0x1e3f: 0x0080, + // Block 0x79, offset 0x1e40 + 0x1e40: 0x0080, 0x1e41: 0x0080, 0x1e42: 0x0080, 0x1e43: 0x0080, 0x1e44: 0x0080, 0x1e45: 0x0080, + 0x1e46: 0x0080, 0x1e47: 0x0080, 0x1e48: 0x0080, 0x1e4a: 0x0080, 0x1e4b: 0x0080, + 0x1e4c: 0x0080, 0x1e4d: 0x0080, 0x1e4e: 0x0080, 0x1e4f: 0x0080, 0x1e50: 0x0080, 0x1e51: 0x0080, + 0x1e6c: 0x0080, 0x1e6d: 0x0080, 0x1e6e: 0x0080, 0x1e6f: 0x0080, + // Block 0x7a, offset 0x1e80 + 0x1e80: 0x00c0, 0x1e81: 0x00c0, 0x1e82: 0x00c0, 0x1e83: 0x00c0, 0x1e84: 0x00c0, 0x1e85: 0x00c0, + 0x1e86: 0x00c0, 0x1e87: 0x00c0, 0x1e88: 0x00c0, 0x1e89: 0x00c0, 0x1e8a: 0x00c0, 0x1e8b: 0x00c0, + 0x1e8c: 0x00c0, 0x1e8d: 0x00c0, 0x1e8e: 0x00c0, 0x1e8f: 0x00c0, 0x1e90: 0x00c0, 0x1e91: 0x00c0, + 0x1e92: 0x00c0, 0x1e93: 0x00c0, 0x1e94: 0x00c0, 0x1e95: 0x00c0, 0x1e96: 0x00c0, 0x1e97: 0x00c0, + 0x1e98: 0x00c0, 0x1e99: 0x00c0, 0x1e9a: 0x00c0, 0x1e9b: 0x00c0, 0x1e9c: 0x00c0, 0x1e9d: 0x00c0, + 0x1e9e: 0x00c0, 0x1e9f: 0x00c0, 0x1ea0: 0x00c0, 0x1ea1: 0x00c0, 0x1ea2: 0x00c0, 0x1ea3: 0x00c0, + 0x1ea4: 0x00c0, 0x1ea5: 0x00c0, 0x1ea6: 0x00c0, 0x1ea7: 0x00c0, 0x1ea8: 0x00c0, 0x1ea9: 0x00c0, + 0x1eaa: 0x00c0, 0x1eab: 0x00c0, 0x1eac: 0x00c0, 0x1ead: 0x00c0, 0x1eae: 0x00c0, + 0x1eb0: 0x00c0, 0x1eb1: 0x00c0, 0x1eb2: 0x00c0, 0x1eb3: 0x00c0, 0x1eb4: 0x00c0, 0x1eb5: 0x00c0, + 0x1eb6: 0x00c0, 0x1eb7: 0x00c0, 0x1eb8: 0x00c0, 0x1eb9: 0x00c0, 0x1eba: 0x00c0, 0x1ebb: 0x00c0, + 0x1ebc: 0x00c0, 0x1ebd: 0x00c0, 0x1ebe: 0x00c0, 0x1ebf: 0x00c0, + // Block 0x7b, offset 0x1ec0 + 0x1ec0: 0x00c0, 0x1ec1: 0x00c0, 0x1ec2: 0x00c0, 0x1ec3: 0x00c0, 0x1ec4: 0x00c0, 0x1ec5: 0x00c0, + 0x1ec6: 0x00c0, 0x1ec7: 0x00c0, 0x1ec8: 0x00c0, 0x1ec9: 0x00c0, 0x1eca: 0x00c0, 0x1ecb: 0x00c0, + 0x1ecc: 0x00c0, 0x1ecd: 0x00c0, 0x1ece: 0x00c0, 0x1ecf: 0x00c0, 0x1ed0: 0x00c0, 0x1ed1: 0x00c0, + 0x1ed2: 0x00c0, 0x1ed3: 0x00c0, 0x1ed4: 0x00c0, 0x1ed5: 0x00c0, 0x1ed6: 0x00c0, 0x1ed7: 0x00c0, + 0x1ed8: 0x00c0, 0x1ed9: 0x00c0, 0x1eda: 0x00c0, 0x1edb: 0x00c0, 0x1edc: 0x00c0, 0x1edd: 0x00c0, + 0x1ede: 0x00c0, 0x1ee0: 0x00c0, 0x1ee1: 0x00c0, 0x1ee2: 0x00c0, 0x1ee3: 0x00c0, + 0x1ee4: 0x00c0, 0x1ee5: 0x00c0, 0x1ee6: 0x00c0, 0x1ee7: 0x00c0, 0x1ee8: 0x00c0, 0x1ee9: 0x00c0, + 0x1eea: 0x00c0, 0x1eeb: 0x00c0, 0x1eec: 0x00c0, 0x1eed: 0x00c0, 0x1eee: 0x00c0, 0x1eef: 0x00c0, + 0x1ef0: 0x00c0, 0x1ef1: 0x00c0, 0x1ef2: 0x00c0, 0x1ef3: 0x00c0, 0x1ef4: 0x00c0, 0x1ef5: 0x00c0, + 0x1ef6: 0x00c0, 0x1ef7: 0x00c0, 0x1ef8: 0x00c0, 0x1ef9: 0x00c0, 0x1efa: 0x00c0, 0x1efb: 0x00c0, + 0x1efc: 0x0080, 0x1efd: 0x0080, 0x1efe: 0x00c0, 0x1eff: 0x00c0, + // Block 0x7c, offset 0x1f00 + 0x1f00: 0x00c0, 0x1f01: 0x00c0, 0x1f02: 0x00c0, 0x1f03: 0x00c0, 0x1f04: 0x00c0, 0x1f05: 0x00c0, + 0x1f06: 0x00c0, 0x1f07: 0x00c0, 0x1f08: 0x00c0, 0x1f09: 0x00c0, 0x1f0a: 0x00c0, 0x1f0b: 0x00c0, + 0x1f0c: 0x00c0, 0x1f0d: 0x00c0, 0x1f0e: 0x00c0, 0x1f0f: 0x00c0, 0x1f10: 0x00c0, 0x1f11: 0x00c0, + 0x1f12: 0x00c0, 0x1f13: 0x00c0, 0x1f14: 0x00c0, 0x1f15: 0x00c0, 0x1f16: 0x00c0, 0x1f17: 0x00c0, + 0x1f18: 0x00c0, 0x1f19: 0x00c0, 0x1f1a: 0x00c0, 0x1f1b: 0x00c0, 0x1f1c: 0x00c0, 0x1f1d: 0x00c0, + 0x1f1e: 0x00c0, 0x1f1f: 0x00c0, 0x1f20: 0x00c0, 0x1f21: 0x00c0, 0x1f22: 0x00c0, 0x1f23: 0x00c0, + 0x1f24: 0x00c0, 0x1f25: 0x0080, 0x1f26: 0x0080, 0x1f27: 0x0080, 0x1f28: 0x0080, 0x1f29: 0x0080, + 0x1f2a: 0x0080, 0x1f2b: 0x00c0, 0x1f2c: 0x00c0, 0x1f2d: 0x00c0, 0x1f2e: 0x00c0, 0x1f2f: 0x00c3, + 0x1f30: 0x00c3, 0x1f31: 0x00c3, 0x1f32: 0x00c0, 0x1f33: 0x00c0, + 0x1f39: 0x0080, 0x1f3a: 0x0080, 0x1f3b: 0x0080, + 0x1f3c: 0x0080, 0x1f3d: 0x0080, 0x1f3e: 0x0080, 0x1f3f: 0x0080, + // Block 0x7d, offset 0x1f40 + 0x1f40: 0x00c0, 0x1f41: 0x00c0, 0x1f42: 0x00c0, 0x1f43: 0x00c0, 0x1f44: 0x00c0, 0x1f45: 0x00c0, + 0x1f46: 0x00c0, 0x1f47: 0x00c0, 0x1f48: 0x00c0, 0x1f49: 0x00c0, 0x1f4a: 0x00c0, 0x1f4b: 0x00c0, + 0x1f4c: 0x00c0, 0x1f4d: 0x00c0, 0x1f4e: 0x00c0, 0x1f4f: 0x00c0, 0x1f50: 0x00c0, 0x1f51: 0x00c0, + 0x1f52: 0x00c0, 0x1f53: 0x00c0, 0x1f54: 0x00c0, 0x1f55: 0x00c0, 0x1f56: 0x00c0, 0x1f57: 0x00c0, + 0x1f58: 0x00c0, 0x1f59: 0x00c0, 0x1f5a: 0x00c0, 0x1f5b: 0x00c0, 0x1f5c: 0x00c0, 0x1f5d: 0x00c0, + 0x1f5e: 0x00c0, 0x1f5f: 0x00c0, 0x1f60: 0x00c0, 0x1f61: 0x00c0, 0x1f62: 0x00c0, 0x1f63: 0x00c0, + 0x1f64: 0x00c0, 0x1f65: 0x00c0, 0x1f67: 0x00c0, + 0x1f6d: 0x00c0, + 0x1f70: 0x00c0, 0x1f71: 0x00c0, 0x1f72: 0x00c0, 0x1f73: 0x00c0, 0x1f74: 0x00c0, 0x1f75: 0x00c0, + 0x1f76: 0x00c0, 0x1f77: 0x00c0, 0x1f78: 0x00c0, 0x1f79: 0x00c0, 0x1f7a: 0x00c0, 0x1f7b: 0x00c0, + 0x1f7c: 0x00c0, 0x1f7d: 0x00c0, 0x1f7e: 0x00c0, 0x1f7f: 0x00c0, + // Block 0x7e, offset 0x1f80 + 0x1f80: 0x00c0, 0x1f81: 0x00c0, 0x1f82: 0x00c0, 0x1f83: 0x00c0, 0x1f84: 0x00c0, 0x1f85: 0x00c0, + 0x1f86: 0x00c0, 0x1f87: 0x00c0, 0x1f88: 0x00c0, 0x1f89: 0x00c0, 0x1f8a: 0x00c0, 0x1f8b: 0x00c0, + 0x1f8c: 0x00c0, 0x1f8d: 0x00c0, 0x1f8e: 0x00c0, 0x1f8f: 0x00c0, 0x1f90: 0x00c0, 0x1f91: 0x00c0, + 0x1f92: 0x00c0, 0x1f93: 0x00c0, 0x1f94: 0x00c0, 0x1f95: 0x00c0, 0x1f96: 0x00c0, 0x1f97: 0x00c0, + 0x1f98: 0x00c0, 0x1f99: 0x00c0, 0x1f9a: 0x00c0, 0x1f9b: 0x00c0, 0x1f9c: 0x00c0, 0x1f9d: 0x00c0, + 0x1f9e: 0x00c0, 0x1f9f: 0x00c0, 0x1fa0: 0x00c0, 0x1fa1: 0x00c0, 0x1fa2: 0x00c0, 0x1fa3: 0x00c0, + 0x1fa4: 0x00c0, 0x1fa5: 0x00c0, 0x1fa6: 0x00c0, 0x1fa7: 0x00c0, + 0x1faf: 0x0080, + 0x1fb0: 0x0080, + 0x1fbf: 0x00c6, + // Block 0x7f, offset 0x1fc0 + 0x1fc0: 0x00c0, 0x1fc1: 0x00c0, 0x1fc2: 0x00c0, 0x1fc3: 0x00c0, 0x1fc4: 0x00c0, 0x1fc5: 0x00c0, + 0x1fc6: 0x00c0, 0x1fc7: 0x00c0, 0x1fc8: 0x00c0, 0x1fc9: 0x00c0, 0x1fca: 0x00c0, 0x1fcb: 0x00c0, + 0x1fcc: 0x00c0, 0x1fcd: 0x00c0, 0x1fce: 0x00c0, 0x1fcf: 0x00c0, 0x1fd0: 0x00c0, 0x1fd1: 0x00c0, + 0x1fd2: 0x00c0, 0x1fd3: 0x00c0, 0x1fd4: 0x00c0, 0x1fd5: 0x00c0, 0x1fd6: 0x00c0, + 0x1fe0: 0x00c0, 0x1fe1: 0x00c0, 0x1fe2: 0x00c0, 0x1fe3: 0x00c0, + 0x1fe4: 0x00c0, 0x1fe5: 0x00c0, 0x1fe6: 0x00c0, 0x1fe8: 0x00c0, 0x1fe9: 0x00c0, + 0x1fea: 0x00c0, 0x1feb: 0x00c0, 0x1fec: 0x00c0, 0x1fed: 0x00c0, 0x1fee: 0x00c0, + 0x1ff0: 0x00c0, 0x1ff1: 0x00c0, 0x1ff2: 0x00c0, 0x1ff3: 0x00c0, 0x1ff4: 0x00c0, 0x1ff5: 0x00c0, + 0x1ff6: 0x00c0, 0x1ff8: 0x00c0, 0x1ff9: 0x00c0, 0x1ffa: 0x00c0, 0x1ffb: 0x00c0, + 0x1ffc: 0x00c0, 0x1ffd: 0x00c0, 0x1ffe: 0x00c0, + // Block 0x80, offset 0x2000 + 0x2000: 0x00c0, 0x2001: 0x00c0, 0x2002: 0x00c0, 0x2003: 0x00c0, 0x2004: 0x00c0, 0x2005: 0x00c0, + 0x2006: 0x00c0, 0x2008: 0x00c0, 0x2009: 0x00c0, 0x200a: 0x00c0, 0x200b: 0x00c0, + 0x200c: 0x00c0, 0x200d: 0x00c0, 0x200e: 0x00c0, 0x2010: 0x00c0, 0x2011: 0x00c0, + 0x2012: 0x00c0, 0x2013: 0x00c0, 0x2014: 0x00c0, 0x2015: 0x00c0, 0x2016: 0x00c0, + 0x2018: 0x00c0, 0x2019: 0x00c0, 0x201a: 0x00c0, 0x201b: 0x00c0, 0x201c: 0x00c0, 0x201d: 0x00c0, + 0x201e: 0x00c0, 0x2020: 0x00c3, 0x2021: 0x00c3, 0x2022: 0x00c3, 0x2023: 0x00c3, + 0x2024: 0x00c3, 0x2025: 0x00c3, 0x2026: 0x00c3, 0x2027: 0x00c3, 0x2028: 0x00c3, 0x2029: 0x00c3, + 0x202a: 0x00c3, 0x202b: 0x00c3, 0x202c: 0x00c3, 0x202d: 0x00c3, 0x202e: 0x00c3, 0x202f: 0x00c3, + 0x2030: 0x00c3, 0x2031: 0x00c3, 0x2032: 0x00c3, 0x2033: 0x00c3, 0x2034: 0x00c3, 0x2035: 0x00c3, + 0x2036: 0x00c3, 0x2037: 0x00c3, 0x2038: 0x00c3, 0x2039: 0x00c3, 0x203a: 0x00c3, 0x203b: 0x00c3, + 0x203c: 0x00c3, 0x203d: 0x00c3, 0x203e: 0x00c3, 0x203f: 0x00c3, + // Block 0x81, offset 0x2040 + 0x2040: 0x0080, 0x2041: 0x0080, 0x2042: 0x0080, 0x2043: 0x0080, 0x2044: 0x0080, 0x2045: 0x0080, + 0x2046: 0x0080, 0x2047: 0x0080, 0x2048: 0x0080, 0x2049: 0x0080, 0x204a: 0x0080, 0x204b: 0x0080, + 0x204c: 0x0080, 0x204d: 0x0080, 0x204e: 0x0080, 0x204f: 0x0080, 0x2050: 0x0080, 0x2051: 0x0080, + 0x2052: 0x0080, 0x2053: 0x0080, 0x2054: 0x0080, 0x2055: 0x0080, 0x2056: 0x0080, 0x2057: 0x0080, + 0x2058: 0x0080, 0x2059: 0x0080, 0x205a: 0x0080, 0x205b: 0x0080, 0x205c: 0x0080, 0x205d: 0x0080, + 0x205e: 0x0080, 0x205f: 0x0080, 0x2060: 0x0080, 0x2061: 0x0080, 0x2062: 0x0080, 0x2063: 0x0080, + 0x2064: 0x0080, 0x2065: 0x0080, 0x2066: 0x0080, 0x2067: 0x0080, 0x2068: 0x0080, 0x2069: 0x0080, + 0x206a: 0x0080, 0x206b: 0x0080, 0x206c: 0x0080, 0x206d: 0x0080, 0x206e: 0x0080, 0x206f: 0x00c0, + 0x2070: 0x0080, 0x2071: 0x0080, 0x2072: 0x0080, 0x2073: 0x0080, 0x2074: 0x0080, 0x2075: 0x0080, + 0x2076: 0x0080, 0x2077: 0x0080, 0x2078: 0x0080, 0x2079: 0x0080, 0x207a: 0x0080, 0x207b: 0x0080, + 0x207c: 0x0080, 0x207d: 0x0080, 0x207e: 0x0080, 0x207f: 0x0080, + // Block 0x82, offset 0x2080 + 0x2080: 0x0080, 0x2081: 0x0080, 0x2082: 0x0080, 0x2083: 0x0080, 0x2084: 0x0080, + // Block 0x83, offset 0x20c0 + 0x20c0: 0x008c, 0x20c1: 0x008c, 0x20c2: 0x008c, 0x20c3: 0x008c, 0x20c4: 0x008c, 0x20c5: 0x008c, + 0x20c6: 0x008c, 0x20c7: 0x008c, 0x20c8: 0x008c, 0x20c9: 0x008c, 0x20ca: 0x008c, 0x20cb: 0x008c, + 0x20cc: 0x008c, 0x20cd: 0x008c, 0x20ce: 0x008c, 0x20cf: 0x008c, 0x20d0: 0x008c, 0x20d1: 0x008c, + 0x20d2: 0x008c, 0x20d3: 0x008c, 0x20d4: 0x008c, 0x20d5: 0x008c, 0x20d6: 0x008c, 0x20d7: 0x008c, + 0x20d8: 0x008c, 0x20d9: 0x008c, 0x20db: 0x008c, 0x20dc: 0x008c, 0x20dd: 0x008c, + 0x20de: 0x008c, 0x20df: 0x008c, 0x20e0: 0x008c, 0x20e1: 0x008c, 0x20e2: 0x008c, 0x20e3: 0x008c, + 0x20e4: 0x008c, 0x20e5: 0x008c, 0x20e6: 0x008c, 0x20e7: 0x008c, 0x20e8: 0x008c, 0x20e9: 0x008c, + 0x20ea: 0x008c, 0x20eb: 0x008c, 0x20ec: 0x008c, 0x20ed: 0x008c, 0x20ee: 0x008c, 0x20ef: 0x008c, + 0x20f0: 0x008c, 0x20f1: 0x008c, 0x20f2: 0x008c, 0x20f3: 0x008c, 0x20f4: 0x008c, 0x20f5: 0x008c, + 0x20f6: 0x008c, 0x20f7: 0x008c, 0x20f8: 0x008c, 0x20f9: 0x008c, 0x20fa: 0x008c, 0x20fb: 0x008c, + 0x20fc: 0x008c, 0x20fd: 0x008c, 0x20fe: 0x008c, 0x20ff: 0x008c, + // Block 0x84, offset 0x2100 + 0x2100: 0x008c, 0x2101: 0x008c, 0x2102: 0x008c, 0x2103: 0x008c, 0x2104: 0x008c, 0x2105: 0x008c, + 0x2106: 0x008c, 0x2107: 0x008c, 0x2108: 0x008c, 0x2109: 0x008c, 0x210a: 0x008c, 0x210b: 0x008c, + 0x210c: 0x008c, 0x210d: 0x008c, 0x210e: 0x008c, 0x210f: 0x008c, 0x2110: 0x008c, 0x2111: 0x008c, + 0x2112: 0x008c, 0x2113: 0x008c, 0x2114: 0x008c, 0x2115: 0x008c, 0x2116: 0x008c, 0x2117: 0x008c, + 0x2118: 0x008c, 0x2119: 0x008c, 0x211a: 0x008c, 0x211b: 0x008c, 0x211c: 0x008c, 0x211d: 0x008c, + 0x211e: 0x008c, 0x211f: 0x008c, 0x2120: 0x008c, 0x2121: 0x008c, 0x2122: 0x008c, 0x2123: 0x008c, + 0x2124: 0x008c, 0x2125: 0x008c, 0x2126: 0x008c, 0x2127: 0x008c, 0x2128: 0x008c, 0x2129: 0x008c, + 0x212a: 0x008c, 0x212b: 0x008c, 0x212c: 0x008c, 0x212d: 0x008c, 0x212e: 0x008c, 0x212f: 0x008c, + 0x2130: 0x008c, 0x2131: 0x008c, 0x2132: 0x008c, 0x2133: 0x008c, + // Block 0x85, offset 0x2140 + 0x2140: 0x008c, 0x2141: 0x008c, 0x2142: 0x008c, 0x2143: 0x008c, 0x2144: 0x008c, 0x2145: 0x008c, + 0x2146: 0x008c, 0x2147: 0x008c, 0x2148: 0x008c, 0x2149: 0x008c, 0x214a: 0x008c, 0x214b: 0x008c, + 0x214c: 0x008c, 0x214d: 0x008c, 0x214e: 0x008c, 0x214f: 0x008c, 0x2150: 0x008c, 0x2151: 0x008c, + 0x2152: 0x008c, 0x2153: 0x008c, 0x2154: 0x008c, 0x2155: 0x008c, 0x2156: 0x008c, 0x2157: 0x008c, + 0x2158: 0x008c, 0x2159: 0x008c, 0x215a: 0x008c, 0x215b: 0x008c, 0x215c: 0x008c, 0x215d: 0x008c, + 0x215e: 0x008c, 0x215f: 0x008c, 0x2160: 0x008c, 0x2161: 0x008c, 0x2162: 0x008c, 0x2163: 0x008c, + 0x2164: 0x008c, 0x2165: 0x008c, 0x2166: 0x008c, 0x2167: 0x008c, 0x2168: 0x008c, 0x2169: 0x008c, + 0x216a: 0x008c, 0x216b: 0x008c, 0x216c: 0x008c, 0x216d: 0x008c, 0x216e: 0x008c, 0x216f: 0x008c, + 0x2170: 0x008c, 0x2171: 0x008c, 0x2172: 0x008c, 0x2173: 0x008c, 0x2174: 0x008c, 0x2175: 0x008c, + 0x2176: 0x008c, 0x2177: 0x008c, 0x2178: 0x008c, 0x2179: 0x008c, 0x217a: 0x008c, 0x217b: 0x008c, + 0x217c: 0x008c, 0x217d: 0x008c, 0x217e: 0x008c, 0x217f: 0x008c, + // Block 0x86, offset 0x2180 + 0x2180: 0x008c, 0x2181: 0x008c, 0x2182: 0x008c, 0x2183: 0x008c, 0x2184: 0x008c, 0x2185: 0x008c, + 0x2186: 0x008c, 0x2187: 0x008c, 0x2188: 0x008c, 0x2189: 0x008c, 0x218a: 0x008c, 0x218b: 0x008c, + 0x218c: 0x008c, 0x218d: 0x008c, 0x218e: 0x008c, 0x218f: 0x008c, 0x2190: 0x008c, 0x2191: 0x008c, + 0x2192: 0x008c, 0x2193: 0x008c, 0x2194: 0x008c, 0x2195: 0x008c, + 0x21b0: 0x0080, 0x21b1: 0x0080, 0x21b2: 0x0080, 0x21b3: 0x0080, 0x21b4: 0x0080, 0x21b5: 0x0080, + 0x21b6: 0x0080, 0x21b7: 0x0080, 0x21b8: 0x0080, 0x21b9: 0x0080, 0x21ba: 0x0080, 0x21bb: 0x0080, + // Block 0x87, offset 0x21c0 + 0x21c0: 0x0080, 0x21c1: 0x0080, 0x21c2: 0x0080, 0x21c3: 0x0080, 0x21c4: 0x0080, 0x21c5: 0x00cc, + 0x21c6: 0x00c0, 0x21c7: 0x00cc, 0x21c8: 0x0080, 0x21c9: 0x0080, 0x21ca: 0x0080, 0x21cb: 0x0080, + 0x21cc: 0x0080, 0x21cd: 0x0080, 0x21ce: 0x0080, 0x21cf: 0x0080, 0x21d0: 0x0080, 0x21d1: 0x0080, + 0x21d2: 0x0080, 0x21d3: 0x0080, 0x21d4: 0x0080, 0x21d5: 0x0080, 0x21d6: 0x0080, 0x21d7: 0x0080, + 0x21d8: 0x0080, 0x21d9: 0x0080, 0x21da: 0x0080, 0x21db: 0x0080, 0x21dc: 0x0080, 0x21dd: 0x0080, + 0x21de: 0x0080, 0x21df: 0x0080, 0x21e0: 0x0080, 0x21e1: 0x008c, 0x21e2: 0x008c, 0x21e3: 0x008c, + 0x21e4: 0x008c, 0x21e5: 0x008c, 0x21e6: 0x008c, 0x21e7: 0x008c, 0x21e8: 0x008c, 0x21e9: 0x008c, + 0x21ea: 0x00c3, 0x21eb: 0x00c3, 0x21ec: 0x00c3, 0x21ed: 0x00c3, 0x21ee: 0x0040, 0x21ef: 0x0040, + 0x21f0: 0x0080, 0x21f1: 0x0040, 0x21f2: 0x0040, 0x21f3: 0x0040, 0x21f4: 0x0040, 0x21f5: 0x0040, + 0x21f6: 0x0080, 0x21f7: 0x0080, 0x21f8: 0x008c, 0x21f9: 0x008c, 0x21fa: 0x008c, 0x21fb: 0x0040, + 0x21fc: 0x00c0, 0x21fd: 0x0080, 0x21fe: 0x0080, 0x21ff: 0x0080, + // Block 0x88, offset 0x2200 + 0x2201: 0x00cc, 0x2202: 0x00cc, 0x2203: 0x00cc, 0x2204: 0x00cc, 0x2205: 0x00cc, + 0x2206: 0x00cc, 0x2207: 0x00cc, 0x2208: 0x00cc, 0x2209: 0x00cc, 0x220a: 0x00cc, 0x220b: 0x00cc, + 0x220c: 0x00cc, 0x220d: 0x00cc, 0x220e: 0x00cc, 0x220f: 0x00cc, 0x2210: 0x00cc, 0x2211: 0x00cc, + 0x2212: 0x00cc, 0x2213: 0x00cc, 0x2214: 0x00cc, 0x2215: 0x00cc, 0x2216: 0x00cc, 0x2217: 0x00cc, + 0x2218: 0x00cc, 0x2219: 0x00cc, 0x221a: 0x00cc, 0x221b: 0x00cc, 0x221c: 0x00cc, 0x221d: 0x00cc, + 0x221e: 0x00cc, 0x221f: 0x00cc, 0x2220: 0x00cc, 0x2221: 0x00cc, 0x2222: 0x00cc, 0x2223: 0x00cc, + 0x2224: 0x00cc, 0x2225: 0x00cc, 0x2226: 0x00cc, 0x2227: 0x00cc, 0x2228: 0x00cc, 0x2229: 0x00cc, + 0x222a: 0x00cc, 0x222b: 0x00cc, 0x222c: 0x00cc, 0x222d: 0x00cc, 0x222e: 0x00cc, 0x222f: 0x00cc, + 0x2230: 0x00cc, 0x2231: 0x00cc, 0x2232: 0x00cc, 0x2233: 0x00cc, 0x2234: 0x00cc, 0x2235: 0x00cc, + 0x2236: 0x00cc, 0x2237: 0x00cc, 0x2238: 0x00cc, 0x2239: 0x00cc, 0x223a: 0x00cc, 0x223b: 0x00cc, + 0x223c: 0x00cc, 0x223d: 0x00cc, 0x223e: 0x00cc, 0x223f: 0x00cc, + // Block 0x89, offset 0x2240 + 0x2240: 0x00cc, 0x2241: 0x00cc, 0x2242: 0x00cc, 0x2243: 0x00cc, 0x2244: 0x00cc, 0x2245: 0x00cc, + 0x2246: 0x00cc, 0x2247: 0x00cc, 0x2248: 0x00cc, 0x2249: 0x00cc, 0x224a: 0x00cc, 0x224b: 0x00cc, + 0x224c: 0x00cc, 0x224d: 0x00cc, 0x224e: 0x00cc, 0x224f: 0x00cc, 0x2250: 0x00cc, 0x2251: 0x00cc, + 0x2252: 0x00cc, 0x2253: 0x00cc, 0x2254: 0x00cc, 0x2255: 0x00cc, 0x2256: 0x00cc, + 0x2259: 0x00c3, 0x225a: 0x00c3, 0x225b: 0x0080, 0x225c: 0x0080, 0x225d: 0x00cc, + 0x225e: 0x00cc, 0x225f: 0x008c, 0x2260: 0x0080, 0x2261: 0x00cc, 0x2262: 0x00cc, 0x2263: 0x00cc, + 0x2264: 0x00cc, 0x2265: 0x00cc, 0x2266: 0x00cc, 0x2267: 0x00cc, 0x2268: 0x00cc, 0x2269: 0x00cc, + 0x226a: 0x00cc, 0x226b: 0x00cc, 0x226c: 0x00cc, 0x226d: 0x00cc, 0x226e: 0x00cc, 0x226f: 0x00cc, + 0x2270: 0x00cc, 0x2271: 0x00cc, 0x2272: 0x00cc, 0x2273: 0x00cc, 0x2274: 0x00cc, 0x2275: 0x00cc, + 0x2276: 0x00cc, 0x2277: 0x00cc, 0x2278: 0x00cc, 0x2279: 0x00cc, 0x227a: 0x00cc, 0x227b: 0x00cc, + 0x227c: 0x00cc, 0x227d: 0x00cc, 0x227e: 0x00cc, 0x227f: 0x00cc, + // Block 0x8a, offset 0x2280 + 0x2280: 0x00cc, 0x2281: 0x00cc, 0x2282: 0x00cc, 0x2283: 0x00cc, 0x2284: 0x00cc, 0x2285: 0x00cc, + 0x2286: 0x00cc, 0x2287: 0x00cc, 0x2288: 0x00cc, 0x2289: 0x00cc, 0x228a: 0x00cc, 0x228b: 0x00cc, + 0x228c: 0x00cc, 0x228d: 0x00cc, 0x228e: 0x00cc, 0x228f: 0x00cc, 0x2290: 0x00cc, 0x2291: 0x00cc, + 0x2292: 0x00cc, 0x2293: 0x00cc, 0x2294: 0x00cc, 0x2295: 0x00cc, 0x2296: 0x00cc, 0x2297: 0x00cc, + 0x2298: 0x00cc, 0x2299: 0x00cc, 0x229a: 0x00cc, 0x229b: 0x00cc, 0x229c: 0x00cc, 0x229d: 0x00cc, + 0x229e: 0x00cc, 0x229f: 0x00cc, 0x22a0: 0x00cc, 0x22a1: 0x00cc, 0x22a2: 0x00cc, 0x22a3: 0x00cc, + 0x22a4: 0x00cc, 0x22a5: 0x00cc, 0x22a6: 0x00cc, 0x22a7: 0x00cc, 0x22a8: 0x00cc, 0x22a9: 0x00cc, + 0x22aa: 0x00cc, 0x22ab: 0x00cc, 0x22ac: 0x00cc, 0x22ad: 0x00cc, 0x22ae: 0x00cc, 0x22af: 0x00cc, + 0x22b0: 0x00cc, 0x22b1: 0x00cc, 0x22b2: 0x00cc, 0x22b3: 0x00cc, 0x22b4: 0x00cc, 0x22b5: 0x00cc, + 0x22b6: 0x00cc, 0x22b7: 0x00cc, 0x22b8: 0x00cc, 0x22b9: 0x00cc, 0x22ba: 0x00cc, 0x22bb: 0x00d2, + 0x22bc: 0x00c0, 0x22bd: 0x00cc, 0x22be: 0x00cc, 0x22bf: 0x008c, + // Block 0x8b, offset 0x22c0 + 0x22c5: 0x00c0, + 0x22c6: 0x00c0, 0x22c7: 0x00c0, 0x22c8: 0x00c0, 0x22c9: 0x00c0, 0x22ca: 0x00c0, 0x22cb: 0x00c0, + 0x22cc: 0x00c0, 0x22cd: 0x00c0, 0x22ce: 0x00c0, 0x22cf: 0x00c0, 0x22d0: 0x00c0, 0x22d1: 0x00c0, + 0x22d2: 0x00c0, 0x22d3: 0x00c0, 0x22d4: 0x00c0, 0x22d5: 0x00c0, 0x22d6: 0x00c0, 0x22d7: 0x00c0, + 0x22d8: 0x00c0, 0x22d9: 0x00c0, 0x22da: 0x00c0, 0x22db: 0x00c0, 0x22dc: 0x00c0, 0x22dd: 0x00c0, + 0x22de: 0x00c0, 0x22df: 0x00c0, 0x22e0: 0x00c0, 0x22e1: 0x00c0, 0x22e2: 0x00c0, 0x22e3: 0x00c0, + 0x22e4: 0x00c0, 0x22e5: 0x00c0, 0x22e6: 0x00c0, 0x22e7: 0x00c0, 0x22e8: 0x00c0, 0x22e9: 0x00c0, + 0x22ea: 0x00c0, 0x22eb: 0x00c0, 0x22ec: 0x00c0, 0x22ed: 0x00c0, + 0x22f1: 0x0080, 0x22f2: 0x0080, 0x22f3: 0x0080, 0x22f4: 0x0080, 0x22f5: 0x0080, + 0x22f6: 0x0080, 0x22f7: 0x0080, 0x22f8: 0x0080, 0x22f9: 0x0080, 0x22fa: 0x0080, 0x22fb: 0x0080, + 0x22fc: 0x0080, 0x22fd: 0x0080, 0x22fe: 0x0080, 0x22ff: 0x0080, + // Block 0x8c, offset 0x2300 + 0x2300: 0x0080, 0x2301: 0x0080, 0x2302: 0x0080, 0x2303: 0x0080, 0x2304: 0x0080, 0x2305: 0x0080, + 0x2306: 0x0080, 0x2307: 0x0080, 0x2308: 0x0080, 0x2309: 0x0080, 0x230a: 0x0080, 0x230b: 0x0080, + 0x230c: 0x0080, 0x230d: 0x0080, 0x230e: 0x0080, 0x230f: 0x0080, 0x2310: 0x0080, 0x2311: 0x0080, + 0x2312: 0x0080, 0x2313: 0x0080, 0x2314: 0x0080, 0x2315: 0x0080, 0x2316: 0x0080, 0x2317: 0x0080, + 0x2318: 0x0080, 0x2319: 0x0080, 0x231a: 0x0080, 0x231b: 0x0080, 0x231c: 0x0080, 0x231d: 0x0080, + 0x231e: 0x0080, 0x231f: 0x0080, 0x2320: 0x0080, 0x2321: 0x0080, 0x2322: 0x0080, 0x2323: 0x0080, + 0x2324: 0x0040, 0x2325: 0x0080, 0x2326: 0x0080, 0x2327: 0x0080, 0x2328: 0x0080, 0x2329: 0x0080, + 0x232a: 0x0080, 0x232b: 0x0080, 0x232c: 0x0080, 0x232d: 0x0080, 0x232e: 0x0080, 0x232f: 0x0080, + 0x2330: 0x0080, 0x2331: 0x0080, 0x2332: 0x0080, 0x2333: 0x0080, 0x2334: 0x0080, 0x2335: 0x0080, + 0x2336: 0x0080, 0x2337: 0x0080, 0x2338: 0x0080, 0x2339: 0x0080, 0x233a: 0x0080, 0x233b: 0x0080, + 0x233c: 0x0080, 0x233d: 0x0080, 0x233e: 0x0080, 0x233f: 0x0080, + // Block 0x8d, offset 0x2340 + 0x2340: 0x0080, 0x2341: 0x0080, 0x2342: 0x0080, 0x2343: 0x0080, 0x2344: 0x0080, 0x2345: 0x0080, + 0x2346: 0x0080, 0x2347: 0x0080, 0x2348: 0x0080, 0x2349: 0x0080, 0x234a: 0x0080, 0x234b: 0x0080, + 0x234c: 0x0080, 0x234d: 0x0080, 0x234e: 0x0080, 0x2350: 0x0080, 0x2351: 0x0080, + 0x2352: 0x0080, 0x2353: 0x0080, 0x2354: 0x0080, 0x2355: 0x0080, 0x2356: 0x0080, 0x2357: 0x0080, + 0x2358: 0x0080, 0x2359: 0x0080, 0x235a: 0x0080, 0x235b: 0x0080, 0x235c: 0x0080, 0x235d: 0x0080, + 0x235e: 0x0080, 0x235f: 0x0080, 0x2360: 0x00c0, 0x2361: 0x00c0, 0x2362: 0x00c0, 0x2363: 0x00c0, + 0x2364: 0x00c0, 0x2365: 0x00c0, 0x2366: 0x00c0, 0x2367: 0x00c0, 0x2368: 0x00c0, 0x2369: 0x00c0, + 0x236a: 0x00c0, 0x236b: 0x00c0, 0x236c: 0x00c0, 0x236d: 0x00c0, 0x236e: 0x00c0, 0x236f: 0x00c0, + 0x2370: 0x00c0, 0x2371: 0x00c0, 0x2372: 0x00c0, 0x2373: 0x00c0, 0x2374: 0x00c0, 0x2375: 0x00c0, + 0x2376: 0x00c0, 0x2377: 0x00c0, 0x2378: 0x00c0, 0x2379: 0x00c0, 0x237a: 0x00c0, + // Block 0x8e, offset 0x2380 + 0x2380: 0x0080, 0x2381: 0x0080, 0x2382: 0x0080, 0x2383: 0x0080, 0x2384: 0x0080, 0x2385: 0x0080, + 0x2386: 0x0080, 0x2387: 0x0080, 0x2388: 0x0080, 0x2389: 0x0080, 0x238a: 0x0080, 0x238b: 0x0080, + 0x238c: 0x0080, 0x238d: 0x0080, 0x238e: 0x0080, 0x238f: 0x0080, 0x2390: 0x0080, 0x2391: 0x0080, + 0x2392: 0x0080, 0x2393: 0x0080, 0x2394: 0x0080, 0x2395: 0x0080, 0x2396: 0x0080, 0x2397: 0x0080, + 0x2398: 0x0080, 0x2399: 0x0080, 0x239a: 0x0080, 0x239b: 0x0080, 0x239c: 0x0080, 0x239d: 0x0080, + 0x239e: 0x0080, 0x239f: 0x0080, 0x23a0: 0x0080, 0x23a1: 0x0080, 0x23a2: 0x0080, 0x23a3: 0x0080, + 0x23b0: 0x00cc, 0x23b1: 0x00cc, 0x23b2: 0x00cc, 0x23b3: 0x00cc, 0x23b4: 0x00cc, 0x23b5: 0x00cc, + 0x23b6: 0x00cc, 0x23b7: 0x00cc, 0x23b8: 0x00cc, 0x23b9: 0x00cc, 0x23ba: 0x00cc, 0x23bb: 0x00cc, + 0x23bc: 0x00cc, 0x23bd: 0x00cc, 0x23be: 0x00cc, 0x23bf: 0x00cc, + // Block 0x8f, offset 0x23c0 + 0x23c0: 0x0080, 0x23c1: 0x0080, 0x23c2: 0x0080, 0x23c3: 0x0080, 0x23c4: 0x0080, 0x23c5: 0x0080, + 0x23c6: 0x0080, 0x23c7: 0x0080, 0x23c8: 0x0080, 0x23c9: 0x0080, 0x23ca: 0x0080, 0x23cb: 0x0080, + 0x23cc: 0x0080, 0x23cd: 0x0080, 0x23ce: 0x0080, 0x23cf: 0x0080, 0x23d0: 0x0080, 0x23d1: 0x0080, + 0x23d2: 0x0080, 0x23d3: 0x0080, 0x23d4: 0x0080, 0x23d5: 0x0080, 0x23d6: 0x0080, 0x23d7: 0x0080, + 0x23d8: 0x0080, 0x23d9: 0x0080, 0x23da: 0x0080, 0x23db: 0x0080, 0x23dc: 0x0080, 0x23dd: 0x0080, + 0x23de: 0x0080, 0x23e0: 0x0080, 0x23e1: 0x0080, 0x23e2: 0x0080, 0x23e3: 0x0080, + 0x23e4: 0x0080, 0x23e5: 0x0080, 0x23e6: 0x0080, 0x23e7: 0x0080, 0x23e8: 0x0080, 0x23e9: 0x0080, + 0x23ea: 0x0080, 0x23eb: 0x0080, 0x23ec: 0x0080, 0x23ed: 0x0080, 0x23ee: 0x0080, 0x23ef: 0x0080, + 0x23f0: 0x0080, 0x23f1: 0x0080, 0x23f2: 0x0080, 0x23f3: 0x0080, 0x23f4: 0x0080, 0x23f5: 0x0080, + 0x23f6: 0x0080, 0x23f7: 0x0080, 0x23f8: 0x0080, 0x23f9: 0x0080, 0x23fa: 0x0080, 0x23fb: 0x0080, + 0x23fc: 0x0080, 0x23fd: 0x0080, 0x23fe: 0x0080, 0x23ff: 0x0080, + // Block 0x90, offset 0x2400 + 0x2400: 0x0080, 0x2401: 0x0080, 0x2402: 0x0080, 0x2403: 0x0080, 0x2404: 0x0080, 0x2405: 0x0080, + 0x2406: 0x0080, 0x2407: 0x0080, 0x2408: 0x0080, 0x2409: 0x0080, 0x240a: 0x0080, 0x240b: 0x0080, + 0x240c: 0x0080, 0x240d: 0x0080, 0x240e: 0x0080, 0x240f: 0x0080, 0x2410: 0x008c, 0x2411: 0x008c, + 0x2412: 0x008c, 0x2413: 0x008c, 0x2414: 0x008c, 0x2415: 0x008c, 0x2416: 0x008c, 0x2417: 0x008c, + 0x2418: 0x008c, 0x2419: 0x008c, 0x241a: 0x008c, 0x241b: 0x008c, 0x241c: 0x008c, 0x241d: 0x008c, + 0x241e: 0x008c, 0x241f: 0x008c, 0x2420: 0x008c, 0x2421: 0x008c, 0x2422: 0x008c, 0x2423: 0x008c, + 0x2424: 0x008c, 0x2425: 0x008c, 0x2426: 0x008c, 0x2427: 0x008c, 0x2428: 0x008c, 0x2429: 0x008c, + 0x242a: 0x008c, 0x242b: 0x008c, 0x242c: 0x008c, 0x242d: 0x008c, 0x242e: 0x008c, 0x242f: 0x008c, + 0x2430: 0x008c, 0x2431: 0x008c, 0x2432: 0x008c, 0x2433: 0x008c, 0x2434: 0x008c, 0x2435: 0x008c, + 0x2436: 0x008c, 0x2437: 0x008c, 0x2438: 0x008c, 0x2439: 0x008c, 0x243a: 0x008c, 0x243b: 0x008c, + 0x243c: 0x008c, 0x243d: 0x008c, 0x243e: 0x008c, + // Block 0x91, offset 0x2440 + 0x2440: 0x008c, 0x2441: 0x008c, 0x2442: 0x008c, 0x2443: 0x008c, 0x2444: 0x008c, 0x2445: 0x008c, + 0x2446: 0x008c, 0x2447: 0x008c, 0x2448: 0x008c, 0x2449: 0x008c, 0x244a: 0x008c, 0x244b: 0x008c, + 0x244c: 0x008c, 0x244d: 0x008c, 0x244e: 0x008c, 0x244f: 0x008c, 0x2450: 0x008c, 0x2451: 0x008c, + 0x2452: 0x008c, 0x2453: 0x008c, 0x2454: 0x008c, 0x2455: 0x008c, 0x2456: 0x008c, 0x2457: 0x008c, + 0x2458: 0x0080, 0x2459: 0x0080, 0x245a: 0x0080, 0x245b: 0x0080, 0x245c: 0x0080, 0x245d: 0x0080, + 0x245e: 0x0080, 0x245f: 0x0080, 0x2460: 0x0080, 0x2461: 0x0080, 0x2462: 0x0080, 0x2463: 0x0080, + 0x2464: 0x0080, 0x2465: 0x0080, 0x2466: 0x0080, 0x2467: 0x0080, 0x2468: 0x0080, 0x2469: 0x0080, + 0x246a: 0x0080, 0x246b: 0x0080, 0x246c: 0x0080, 0x246d: 0x0080, 0x246e: 0x0080, 0x246f: 0x0080, + 0x2470: 0x0080, 0x2471: 0x0080, 0x2472: 0x0080, 0x2473: 0x0080, 0x2474: 0x0080, 0x2475: 0x0080, + 0x2476: 0x0080, 0x2477: 0x0080, 0x2478: 0x0080, 0x2479: 0x0080, 0x247a: 0x0080, 0x247b: 0x0080, + 0x247c: 0x0080, 0x247d: 0x0080, 0x247e: 0x0080, 0x247f: 0x0080, + // Block 0x92, offset 0x2480 + 0x2480: 0x00cc, 0x2481: 0x00cc, 0x2482: 0x00cc, 0x2483: 0x00cc, 0x2484: 0x00cc, 0x2485: 0x00cc, + 0x2486: 0x00cc, 0x2487: 0x00cc, 0x2488: 0x00cc, 0x2489: 0x00cc, 0x248a: 0x00cc, 0x248b: 0x00cc, + 0x248c: 0x00cc, 0x248d: 0x00cc, 0x248e: 0x00cc, 0x248f: 0x00cc, 0x2490: 0x00cc, 0x2491: 0x00cc, + 0x2492: 0x00cc, 0x2493: 0x00cc, 0x2494: 0x00cc, 0x2495: 0x00cc, 0x2496: 0x00cc, 0x2497: 0x00cc, + 0x2498: 0x00cc, 0x2499: 0x00cc, 0x249a: 0x00cc, 0x249b: 0x00cc, 0x249c: 0x00cc, 0x249d: 0x00cc, + 0x249e: 0x00cc, 0x249f: 0x00cc, 0x24a0: 0x00cc, 0x24a1: 0x00cc, 0x24a2: 0x00cc, 0x24a3: 0x00cc, + 0x24a4: 0x00cc, 0x24a5: 0x00cc, 0x24a6: 0x00cc, 0x24a7: 0x00cc, 0x24a8: 0x00cc, 0x24a9: 0x00cc, + 0x24aa: 0x00cc, 0x24ab: 0x00cc, 0x24ac: 0x00cc, 0x24ad: 0x00cc, 0x24ae: 0x00cc, 0x24af: 0x00cc, + 0x24b0: 0x00cc, 0x24b1: 0x00cc, 0x24b2: 0x00cc, 0x24b3: 0x00cc, 0x24b4: 0x00cc, 0x24b5: 0x00cc, + 0x24b6: 0x00cc, 0x24b7: 0x00cc, 0x24b8: 0x00cc, 0x24b9: 0x00cc, 0x24ba: 0x00cc, 0x24bb: 0x00cc, + 0x24bc: 0x00cc, 0x24bd: 0x00cc, 0x24be: 0x00cc, 0x24bf: 0x00cc, + // Block 0x93, offset 0x24c0 + 0x24c0: 0x00cc, 0x24c1: 0x00cc, 0x24c2: 0x00cc, 0x24c3: 0x00cc, 0x24c4: 0x00cc, 0x24c5: 0x00cc, + 0x24c6: 0x00cc, 0x24c7: 0x00cc, 0x24c8: 0x00cc, 0x24c9: 0x00cc, 0x24ca: 0x00cc, 0x24cb: 0x00cc, + 0x24cc: 0x00cc, 0x24cd: 0x00cc, 0x24ce: 0x00cc, 0x24cf: 0x00cc, 0x24d0: 0x00cc, 0x24d1: 0x00cc, + 0x24d2: 0x00cc, 0x24d3: 0x00cc, 0x24d4: 0x00cc, 0x24d5: 0x00cc, 0x24d6: 0x00cc, 0x24d7: 0x00cc, + 0x24d8: 0x00cc, 0x24d9: 0x00cc, 0x24da: 0x00cc, 0x24db: 0x00cc, 0x24dc: 0x00cc, 0x24dd: 0x00cc, + 0x24de: 0x00cc, 0x24df: 0x00cc, 0x24e0: 0x00cc, 0x24e1: 0x00cc, 0x24e2: 0x00cc, 0x24e3: 0x00cc, + 0x24e4: 0x00cc, 0x24e5: 0x00cc, 0x24e6: 0x00cc, 0x24e7: 0x00cc, 0x24e8: 0x00cc, 0x24e9: 0x00cc, + 0x24ea: 0x00cc, 0x24eb: 0x00cc, 0x24ec: 0x00cc, 0x24ed: 0x00cc, 0x24ee: 0x00cc, 0x24ef: 0x00cc, + 0x24f0: 0x00cc, 0x24f1: 0x00cc, 0x24f2: 0x00cc, 0x24f3: 0x00cc, 0x24f4: 0x00cc, 0x24f5: 0x00cc, + // Block 0x94, offset 0x2500 + 0x2500: 0x00cc, 0x2501: 0x00cc, 0x2502: 0x00cc, 0x2503: 0x00cc, 0x2504: 0x00cc, 0x2505: 0x00cc, + 0x2506: 0x00cc, 0x2507: 0x00cc, 0x2508: 0x00cc, 0x2509: 0x00cc, 0x250a: 0x00cc, 0x250b: 0x00cc, + 0x250c: 0x00cc, 0x250d: 0x00cc, 0x250e: 0x00cc, 0x250f: 0x00cc, 0x2510: 0x00cc, 0x2511: 0x00cc, + 0x2512: 0x00cc, 0x2513: 0x00cc, 0x2514: 0x00cc, 0x2515: 0x00cc, + // Block 0x95, offset 0x2540 + 0x2540: 0x00c0, 0x2541: 0x00c0, 0x2542: 0x00c0, 0x2543: 0x00c0, 0x2544: 0x00c0, 0x2545: 0x00c0, + 0x2546: 0x00c0, 0x2547: 0x00c0, 0x2548: 0x00c0, 0x2549: 0x00c0, 0x254a: 0x00c0, 0x254b: 0x00c0, + 0x254c: 0x00c0, 0x2550: 0x0080, 0x2551: 0x0080, + 0x2552: 0x0080, 0x2553: 0x0080, 0x2554: 0x0080, 0x2555: 0x0080, 0x2556: 0x0080, 0x2557: 0x0080, + 0x2558: 0x0080, 0x2559: 0x0080, 0x255a: 0x0080, 0x255b: 0x0080, 0x255c: 0x0080, 0x255d: 0x0080, + 0x255e: 0x0080, 0x255f: 0x0080, 0x2560: 0x0080, 0x2561: 0x0080, 0x2562: 0x0080, 0x2563: 0x0080, + 0x2564: 0x0080, 0x2565: 0x0080, 0x2566: 0x0080, 0x2567: 0x0080, 0x2568: 0x0080, 0x2569: 0x0080, + 0x256a: 0x0080, 0x256b: 0x0080, 0x256c: 0x0080, 0x256d: 0x0080, 0x256e: 0x0080, 0x256f: 0x0080, + 0x2570: 0x0080, 0x2571: 0x0080, 0x2572: 0x0080, 0x2573: 0x0080, 0x2574: 0x0080, 0x2575: 0x0080, + 0x2576: 0x0080, 0x2577: 0x0080, 0x2578: 0x0080, 0x2579: 0x0080, 0x257a: 0x0080, 0x257b: 0x0080, + 0x257c: 0x0080, 0x257d: 0x0080, 0x257e: 0x0080, 0x257f: 0x0080, + // Block 0x96, offset 0x2580 + 0x2580: 0x0080, 0x2581: 0x0080, 0x2582: 0x0080, 0x2583: 0x0080, 0x2584: 0x0080, 0x2585: 0x0080, + 0x2586: 0x0080, + 0x2590: 0x00c0, 0x2591: 0x00c0, + 0x2592: 0x00c0, 0x2593: 0x00c0, 0x2594: 0x00c0, 0x2595: 0x00c0, 0x2596: 0x00c0, 0x2597: 0x00c0, + 0x2598: 0x00c0, 0x2599: 0x00c0, 0x259a: 0x00c0, 0x259b: 0x00c0, 0x259c: 0x00c0, 0x259d: 0x00c0, + 0x259e: 0x00c0, 0x259f: 0x00c0, 0x25a0: 0x00c0, 0x25a1: 0x00c0, 0x25a2: 0x00c0, 0x25a3: 0x00c0, + 0x25a4: 0x00c0, 0x25a5: 0x00c0, 0x25a6: 0x00c0, 0x25a7: 0x00c0, 0x25a8: 0x00c0, 0x25a9: 0x00c0, + 0x25aa: 0x00c0, 0x25ab: 0x00c0, 0x25ac: 0x00c0, 0x25ad: 0x00c0, 0x25ae: 0x00c0, 0x25af: 0x00c0, + 0x25b0: 0x00c0, 0x25b1: 0x00c0, 0x25b2: 0x00c0, 0x25b3: 0x00c0, 0x25b4: 0x00c0, 0x25b5: 0x00c0, + 0x25b6: 0x00c0, 0x25b7: 0x00c0, 0x25b8: 0x00c0, 0x25b9: 0x00c0, 0x25ba: 0x00c0, 0x25bb: 0x00c0, + 0x25bc: 0x00c0, 0x25bd: 0x00c0, 0x25be: 0x0080, 0x25bf: 0x0080, + // Block 0x97, offset 0x25c0 + 0x25c0: 0x00c0, 0x25c1: 0x00c0, 0x25c2: 0x00c0, 0x25c3: 0x00c0, 0x25c4: 0x00c0, 0x25c5: 0x00c0, + 0x25c6: 0x00c0, 0x25c7: 0x00c0, 0x25c8: 0x00c0, 0x25c9: 0x00c0, 0x25ca: 0x00c0, 0x25cb: 0x00c0, + 0x25cc: 0x00c0, 0x25cd: 0x0080, 0x25ce: 0x0080, 0x25cf: 0x0080, 0x25d0: 0x00c0, 0x25d1: 0x00c0, + 0x25d2: 0x00c0, 0x25d3: 0x00c0, 0x25d4: 0x00c0, 0x25d5: 0x00c0, 0x25d6: 0x00c0, 0x25d7: 0x00c0, + 0x25d8: 0x00c0, 0x25d9: 0x00c0, 0x25da: 0x00c0, 0x25db: 0x00c0, 0x25dc: 0x00c0, 0x25dd: 0x00c0, + 0x25de: 0x00c0, 0x25df: 0x00c0, 0x25e0: 0x00c0, 0x25e1: 0x00c0, 0x25e2: 0x00c0, 0x25e3: 0x00c0, + 0x25e4: 0x00c0, 0x25e5: 0x00c0, 0x25e6: 0x00c0, 0x25e7: 0x00c0, 0x25e8: 0x00c0, 0x25e9: 0x00c0, + 0x25ea: 0x00c0, 0x25eb: 0x00c0, + // Block 0x98, offset 0x2600 + 0x2600: 0x00c0, 0x2601: 0x00c0, 0x2602: 0x00c0, 0x2603: 0x00c0, 0x2604: 0x00c0, 0x2605: 0x00c0, + 0x2606: 0x00c0, 0x2607: 0x00c0, 0x2608: 0x00c0, 0x2609: 0x00c0, 0x260a: 0x00c0, 0x260b: 0x00c0, + 0x260c: 0x00c0, 0x260d: 0x00c0, 0x260e: 0x00c0, 0x260f: 0x00c0, 0x2610: 0x00c0, 0x2611: 0x00c0, + 0x2612: 0x00c0, 0x2613: 0x00c0, 0x2614: 0x00c0, 0x2615: 0x00c0, 0x2616: 0x00c0, 0x2617: 0x00c0, + 0x2618: 0x00c0, 0x2619: 0x00c0, 0x261a: 0x00c0, 0x261b: 0x00c0, 0x261c: 0x00c0, 0x261d: 0x00c0, + 0x261e: 0x00c0, 0x261f: 0x00c0, 0x2620: 0x00c0, 0x2621: 0x00c0, 0x2622: 0x00c0, 0x2623: 0x00c0, + 0x2624: 0x00c0, 0x2625: 0x00c0, 0x2626: 0x00c0, 0x2627: 0x00c0, 0x2628: 0x00c0, 0x2629: 0x00c0, + 0x262a: 0x00c0, 0x262b: 0x00c0, 0x262c: 0x00c0, 0x262d: 0x00c0, 0x262e: 0x00c0, 0x262f: 0x00c3, + 0x2630: 0x0083, 0x2631: 0x0083, 0x2632: 0x0083, 0x2633: 0x0080, 0x2634: 0x00c3, 0x2635: 0x00c3, + 0x2636: 0x00c3, 0x2637: 0x00c3, 0x2638: 0x00c3, 0x2639: 0x00c3, 0x263a: 0x00c3, 0x263b: 0x00c3, + 0x263c: 0x00c3, 0x263d: 0x00c3, 0x263e: 0x0080, 0x263f: 0x00c0, + // Block 0x99, offset 0x2640 + 0x2640: 0x00c0, 0x2641: 0x00c0, 0x2642: 0x00c0, 0x2643: 0x00c0, 0x2644: 0x00c0, 0x2645: 0x00c0, + 0x2646: 0x00c0, 0x2647: 0x00c0, 0x2648: 0x00c0, 0x2649: 0x00c0, 0x264a: 0x00c0, 0x264b: 0x00c0, + 0x264c: 0x00c0, 0x264d: 0x00c0, 0x264e: 0x00c0, 0x264f: 0x00c0, 0x2650: 0x00c0, 0x2651: 0x00c0, + 0x2652: 0x00c0, 0x2653: 0x00c0, 0x2654: 0x00c0, 0x2655: 0x00c0, 0x2656: 0x00c0, 0x2657: 0x00c0, + 0x2658: 0x00c0, 0x2659: 0x00c0, 0x265a: 0x00c0, 0x265b: 0x00c0, 0x265c: 0x0080, 0x265d: 0x0080, + 0x265e: 0x00c3, 0x265f: 0x00c3, 0x2660: 0x00c0, 0x2661: 0x00c0, 0x2662: 0x00c0, 0x2663: 0x00c0, + 0x2664: 0x00c0, 0x2665: 0x00c0, 0x2666: 0x00c0, 0x2667: 0x00c0, 0x2668: 0x00c0, 0x2669: 0x00c0, + 0x266a: 0x00c0, 0x266b: 0x00c0, 0x266c: 0x00c0, 0x266d: 0x00c0, 0x266e: 0x00c0, 0x266f: 0x00c0, + 0x2670: 0x00c0, 0x2671: 0x00c0, 0x2672: 0x00c0, 0x2673: 0x00c0, 0x2674: 0x00c0, 0x2675: 0x00c0, + 0x2676: 0x00c0, 0x2677: 0x00c0, 0x2678: 0x00c0, 0x2679: 0x00c0, 0x267a: 0x00c0, 0x267b: 0x00c0, + 0x267c: 0x00c0, 0x267d: 0x00c0, 0x267e: 0x00c0, 0x267f: 0x00c0, + // Block 0x9a, offset 0x2680 + 0x2680: 0x00c0, 0x2681: 0x00c0, 0x2682: 0x00c0, 0x2683: 0x00c0, 0x2684: 0x00c0, 0x2685: 0x00c0, + 0x2686: 0x00c0, 0x2687: 0x00c0, 0x2688: 0x00c0, 0x2689: 0x00c0, 0x268a: 0x00c0, 0x268b: 0x00c0, + 0x268c: 0x00c0, 0x268d: 0x00c0, 0x268e: 0x00c0, 0x268f: 0x00c0, 0x2690: 0x00c0, 0x2691: 0x00c0, + 0x2692: 0x00c0, 0x2693: 0x00c0, 0x2694: 0x00c0, 0x2695: 0x00c0, 0x2696: 0x00c0, 0x2697: 0x00c0, + 0x2698: 0x00c0, 0x2699: 0x00c0, 0x269a: 0x00c0, 0x269b: 0x00c0, 0x269c: 0x00c0, 0x269d: 0x00c0, + 0x269e: 0x00c0, 0x269f: 0x00c0, 0x26a0: 0x00c0, 0x26a1: 0x00c0, 0x26a2: 0x00c0, 0x26a3: 0x00c0, + 0x26a4: 0x00c0, 0x26a5: 0x00c0, 0x26a6: 0x0080, 0x26a7: 0x0080, 0x26a8: 0x0080, 0x26a9: 0x0080, + 0x26aa: 0x0080, 0x26ab: 0x0080, 0x26ac: 0x0080, 0x26ad: 0x0080, 0x26ae: 0x0080, 0x26af: 0x0080, + 0x26b0: 0x00c3, 0x26b1: 0x00c3, 0x26b2: 0x0080, 0x26b3: 0x0080, 0x26b4: 0x0080, 0x26b5: 0x0080, + 0x26b6: 0x0080, 0x26b7: 0x0080, + // Block 0x9b, offset 0x26c0 + 0x26c0: 0x0080, 0x26c1: 0x0080, 0x26c2: 0x0080, 0x26c3: 0x0080, 0x26c4: 0x0080, 0x26c5: 0x0080, + 0x26c6: 0x0080, 0x26c7: 0x0080, 0x26c8: 0x0080, 0x26c9: 0x0080, 0x26ca: 0x0080, 0x26cb: 0x0080, + 0x26cc: 0x0080, 0x26cd: 0x0080, 0x26ce: 0x0080, 0x26cf: 0x0080, 0x26d0: 0x0080, 0x26d1: 0x0080, + 0x26d2: 0x0080, 0x26d3: 0x0080, 0x26d4: 0x0080, 0x26d5: 0x0080, 0x26d6: 0x0080, 0x26d7: 0x00c0, + 0x26d8: 0x00c0, 0x26d9: 0x00c0, 0x26da: 0x00c0, 0x26db: 0x00c0, 0x26dc: 0x00c0, 0x26dd: 0x00c0, + 0x26de: 0x00c0, 0x26df: 0x00c0, 0x26e0: 0x0080, 0x26e1: 0x0080, 0x26e2: 0x00c0, 0x26e3: 0x00c0, + 0x26e4: 0x00c0, 0x26e5: 0x00c0, 0x26e6: 0x00c0, 0x26e7: 0x00c0, 0x26e8: 0x00c0, 0x26e9: 0x00c0, + 0x26ea: 0x00c0, 0x26eb: 0x00c0, 0x26ec: 0x00c0, 0x26ed: 0x00c0, 0x26ee: 0x00c0, 0x26ef: 0x00c0, + 0x26f0: 0x00c0, 0x26f1: 0x00c0, 0x26f2: 0x00c0, 0x26f3: 0x00c0, 0x26f4: 0x00c0, 0x26f5: 0x00c0, + 0x26f6: 0x00c0, 0x26f7: 0x00c0, 0x26f8: 0x00c0, 0x26f9: 0x00c0, 0x26fa: 0x00c0, 0x26fb: 0x00c0, + 0x26fc: 0x00c0, 0x26fd: 0x00c0, 0x26fe: 0x00c0, 0x26ff: 0x00c0, + // Block 0x9c, offset 0x2700 + 0x2700: 0x00c0, 0x2701: 0x00c0, 0x2702: 0x00c0, 0x2703: 0x00c0, 0x2704: 0x00c0, 0x2705: 0x00c0, + 0x2706: 0x00c0, 0x2707: 0x00c0, 0x2708: 0x00c0, 0x2709: 0x00c0, 0x270a: 0x00c0, 0x270b: 0x00c0, + 0x270c: 0x00c0, 0x270d: 0x00c0, 0x270e: 0x00c0, 0x270f: 0x00c0, 0x2710: 0x00c0, 0x2711: 0x00c0, + 0x2712: 0x00c0, 0x2713: 0x00c0, 0x2714: 0x00c0, 0x2715: 0x00c0, 0x2716: 0x00c0, 0x2717: 0x00c0, + 0x2718: 0x00c0, 0x2719: 0x00c0, 0x271a: 0x00c0, 0x271b: 0x00c0, 0x271c: 0x00c0, 0x271d: 0x00c0, + 0x271e: 0x00c0, 0x271f: 0x00c0, 0x2720: 0x00c0, 0x2721: 0x00c0, 0x2722: 0x00c0, 0x2723: 0x00c0, + 0x2724: 0x00c0, 0x2725: 0x00c0, 0x2726: 0x00c0, 0x2727: 0x00c0, 0x2728: 0x00c0, 0x2729: 0x00c0, + 0x272a: 0x00c0, 0x272b: 0x00c0, 0x272c: 0x00c0, 0x272d: 0x00c0, 0x272e: 0x00c0, 0x272f: 0x00c0, + 0x2730: 0x0080, 0x2731: 0x00c0, 0x2732: 0x00c0, 0x2733: 0x00c0, 0x2734: 0x00c0, 0x2735: 0x00c0, + 0x2736: 0x00c0, 0x2737: 0x00c0, 0x2738: 0x00c0, 0x2739: 0x00c0, 0x273a: 0x00c0, 0x273b: 0x00c0, + 0x273c: 0x00c0, 0x273d: 0x00c0, 0x273e: 0x00c0, 0x273f: 0x00c0, + // Block 0x9d, offset 0x2740 + 0x2740: 0x00c0, 0x2741: 0x00c0, 0x2742: 0x00c0, 0x2743: 0x00c0, 0x2744: 0x00c0, 0x2745: 0x00c0, + 0x2746: 0x00c0, 0x2747: 0x00c0, 0x2748: 0x00c0, 0x2749: 0x0080, 0x274a: 0x0080, 0x274b: 0x00c0, + 0x274c: 0x00c0, 0x274d: 0x00c0, 0x274e: 0x00c0, 0x274f: 0x00c0, 0x2750: 0x00c0, 0x2751: 0x00c0, + 0x2752: 0x00c0, 0x2753: 0x00c0, 0x2754: 0x00c0, 0x2755: 0x00c0, 0x2756: 0x00c0, 0x2757: 0x00c0, + 0x2758: 0x00c0, 0x2759: 0x00c0, 0x275a: 0x00c0, 0x275b: 0x00c0, 0x275c: 0x00c0, 0x275d: 0x00c0, + 0x275e: 0x00c0, 0x275f: 0x00c0, 0x2760: 0x00c0, 0x2761: 0x00c0, 0x2762: 0x00c0, 0x2763: 0x00c0, + 0x2764: 0x00c0, 0x2765: 0x00c0, 0x2766: 0x00c0, 0x2767: 0x00c0, 0x2768: 0x00c0, 0x2769: 0x00c0, + 0x276a: 0x00c0, 0x276b: 0x00c0, 0x276c: 0x00c0, 0x276d: 0x00c0, 0x276e: 0x00c0, + 0x2770: 0x00c0, 0x2771: 0x00c0, 0x2772: 0x00c0, 0x2773: 0x00c0, 0x2774: 0x00c0, 0x2775: 0x00c0, + 0x2776: 0x00c0, 0x2777: 0x00c0, + // Block 0x9e, offset 0x2780 + 0x27b7: 0x00c0, 0x27b8: 0x0080, 0x27b9: 0x0080, 0x27ba: 0x00c0, 0x27bb: 0x00c0, + 0x27bc: 0x00c0, 0x27bd: 0x00c0, 0x27be: 0x00c0, 0x27bf: 0x00c0, + // Block 0x9f, offset 0x27c0 + 0x27c0: 0x00c0, 0x27c1: 0x00c0, 0x27c2: 0x00c3, 0x27c3: 0x00c0, 0x27c4: 0x00c0, 0x27c5: 0x00c0, + 0x27c6: 0x00c6, 0x27c7: 0x00c0, 0x27c8: 0x00c0, 0x27c9: 0x00c0, 0x27ca: 0x00c0, 0x27cb: 0x00c3, + 0x27cc: 0x00c0, 0x27cd: 0x00c0, 0x27ce: 0x00c0, 0x27cf: 0x00c0, 0x27d0: 0x00c0, 0x27d1: 0x00c0, + 0x27d2: 0x00c0, 0x27d3: 0x00c0, 0x27d4: 0x00c0, 0x27d5: 0x00c0, 0x27d6: 0x00c0, 0x27d7: 0x00c0, + 0x27d8: 0x00c0, 0x27d9: 0x00c0, 0x27da: 0x00c0, 0x27db: 0x00c0, 0x27dc: 0x00c0, 0x27dd: 0x00c0, + 0x27de: 0x00c0, 0x27df: 0x00c0, 0x27e0: 0x00c0, 0x27e1: 0x00c0, 0x27e2: 0x00c0, 0x27e3: 0x00c0, + 0x27e4: 0x00c0, 0x27e5: 0x00c3, 0x27e6: 0x00c3, 0x27e7: 0x00c0, 0x27e8: 0x0080, 0x27e9: 0x0080, + 0x27ea: 0x0080, 0x27eb: 0x0080, + 0x27f0: 0x0080, 0x27f1: 0x0080, 0x27f2: 0x0080, 0x27f3: 0x0080, 0x27f4: 0x0080, 0x27f5: 0x0080, + 0x27f6: 0x0080, 0x27f7: 0x0080, 0x27f8: 0x0080, 0x27f9: 0x0080, + // Block 0xa0, offset 0x2800 + 0x2800: 0x00c2, 0x2801: 0x00c2, 0x2802: 0x00c2, 0x2803: 0x00c2, 0x2804: 0x00c2, 0x2805: 0x00c2, + 0x2806: 0x00c2, 0x2807: 0x00c2, 0x2808: 0x00c2, 0x2809: 0x00c2, 0x280a: 0x00c2, 0x280b: 0x00c2, + 0x280c: 0x00c2, 0x280d: 0x00c2, 0x280e: 0x00c2, 0x280f: 0x00c2, 0x2810: 0x00c2, 0x2811: 0x00c2, + 0x2812: 0x00c2, 0x2813: 0x00c2, 0x2814: 0x00c2, 0x2815: 0x00c2, 0x2816: 0x00c2, 0x2817: 0x00c2, + 0x2818: 0x00c2, 0x2819: 0x00c2, 0x281a: 0x00c2, 0x281b: 0x00c2, 0x281c: 0x00c2, 0x281d: 0x00c2, + 0x281e: 0x00c2, 0x281f: 0x00c2, 0x2820: 0x00c2, 0x2821: 0x00c2, 0x2822: 0x00c2, 0x2823: 0x00c2, + 0x2824: 0x00c2, 0x2825: 0x00c2, 0x2826: 0x00c2, 0x2827: 0x00c2, 0x2828: 0x00c2, 0x2829: 0x00c2, + 0x282a: 0x00c2, 0x282b: 0x00c2, 0x282c: 0x00c2, 0x282d: 0x00c2, 0x282e: 0x00c2, 0x282f: 0x00c2, + 0x2830: 0x00c2, 0x2831: 0x00c2, 0x2832: 0x00c1, 0x2833: 0x00c0, 0x2834: 0x0080, 0x2835: 0x0080, + 0x2836: 0x0080, 0x2837: 0x0080, + // Block 0xa1, offset 0x2840 + 0x2840: 0x00c0, 0x2841: 0x00c0, 0x2842: 0x00c0, 0x2843: 0x00c0, 0x2844: 0x00c6, 0x2845: 0x00c3, + 0x284e: 0x0080, 0x284f: 0x0080, 0x2850: 0x00c0, 0x2851: 0x00c0, + 0x2852: 0x00c0, 0x2853: 0x00c0, 0x2854: 0x00c0, 0x2855: 0x00c0, 0x2856: 0x00c0, 0x2857: 0x00c0, + 0x2858: 0x00c0, 0x2859: 0x00c0, + 0x2860: 0x00c3, 0x2861: 0x00c3, 0x2862: 0x00c3, 0x2863: 0x00c3, + 0x2864: 0x00c3, 0x2865: 0x00c3, 0x2866: 0x00c3, 0x2867: 0x00c3, 0x2868: 0x00c3, 0x2869: 0x00c3, + 0x286a: 0x00c3, 0x286b: 0x00c3, 0x286c: 0x00c3, 0x286d: 0x00c3, 0x286e: 0x00c3, 0x286f: 0x00c3, + 0x2870: 0x00c3, 0x2871: 0x00c3, 0x2872: 0x00c0, 0x2873: 0x00c0, 0x2874: 0x00c0, 0x2875: 0x00c0, + 0x2876: 0x00c0, 0x2877: 0x00c0, 0x2878: 0x0080, 0x2879: 0x0080, 0x287a: 0x0080, 0x287b: 0x00c0, + 0x287c: 0x0080, 0x287d: 0x00c0, + // Block 0xa2, offset 0x2880 + 0x2880: 0x00c0, 0x2881: 0x00c0, 0x2882: 0x00c0, 0x2883: 0x00c0, 0x2884: 0x00c0, 0x2885: 0x00c0, + 0x2886: 0x00c0, 0x2887: 0x00c0, 0x2888: 0x00c0, 0x2889: 0x00c0, 0x288a: 0x00c0, 0x288b: 0x00c0, + 0x288c: 0x00c0, 0x288d: 0x00c0, 0x288e: 0x00c0, 0x288f: 0x00c0, 0x2890: 0x00c0, 0x2891: 0x00c0, + 0x2892: 0x00c0, 0x2893: 0x00c0, 0x2894: 0x00c0, 0x2895: 0x00c0, 0x2896: 0x00c0, 0x2897: 0x00c0, + 0x2898: 0x00c0, 0x2899: 0x00c0, 0x289a: 0x00c0, 0x289b: 0x00c0, 0x289c: 0x00c0, 0x289d: 0x00c0, + 0x289e: 0x00c0, 0x289f: 0x00c0, 0x28a0: 0x00c0, 0x28a1: 0x00c0, 0x28a2: 0x00c0, 0x28a3: 0x00c0, + 0x28a4: 0x00c0, 0x28a5: 0x00c0, 0x28a6: 0x00c3, 0x28a7: 0x00c3, 0x28a8: 0x00c3, 0x28a9: 0x00c3, + 0x28aa: 0x00c3, 0x28ab: 0x00c3, 0x28ac: 0x00c3, 0x28ad: 0x00c3, 0x28ae: 0x0080, 0x28af: 0x0080, + 0x28b0: 0x00c0, 0x28b1: 0x00c0, 0x28b2: 0x00c0, 0x28b3: 0x00c0, 0x28b4: 0x00c0, 0x28b5: 0x00c0, + 0x28b6: 0x00c0, 0x28b7: 0x00c0, 0x28b8: 0x00c0, 0x28b9: 0x00c0, 0x28ba: 0x00c0, 0x28bb: 0x00c0, + 0x28bc: 0x00c0, 0x28bd: 0x00c0, 0x28be: 0x00c0, 0x28bf: 0x00c0, + // Block 0xa3, offset 0x28c0 + 0x28c0: 0x00c0, 0x28c1: 0x00c0, 0x28c2: 0x00c0, 0x28c3: 0x00c0, 0x28c4: 0x00c0, 0x28c5: 0x00c0, + 0x28c6: 0x00c0, 0x28c7: 0x00c3, 0x28c8: 0x00c3, 0x28c9: 0x00c3, 0x28ca: 0x00c3, 0x28cb: 0x00c3, + 0x28cc: 0x00c3, 0x28cd: 0x00c3, 0x28ce: 0x00c3, 0x28cf: 0x00c3, 0x28d0: 0x00c3, 0x28d1: 0x00c3, + 0x28d2: 0x00c0, 0x28d3: 0x00c5, + 0x28df: 0x0080, 0x28e0: 0x0040, 0x28e1: 0x0040, 0x28e2: 0x0040, 0x28e3: 0x0040, + 0x28e4: 0x0040, 0x28e5: 0x0040, 0x28e6: 0x0040, 0x28e7: 0x0040, 0x28e8: 0x0040, 0x28e9: 0x0040, + 0x28ea: 0x0040, 0x28eb: 0x0040, 0x28ec: 0x0040, 0x28ed: 0x0040, 0x28ee: 0x0040, 0x28ef: 0x0040, + 0x28f0: 0x0040, 0x28f1: 0x0040, 0x28f2: 0x0040, 0x28f3: 0x0040, 0x28f4: 0x0040, 0x28f5: 0x0040, + 0x28f6: 0x0040, 0x28f7: 0x0040, 0x28f8: 0x0040, 0x28f9: 0x0040, 0x28fa: 0x0040, 0x28fb: 0x0040, + 0x28fc: 0x0040, + // Block 0xa4, offset 0x2900 + 0x2900: 0x00c3, 0x2901: 0x00c3, 0x2902: 0x00c3, 0x2903: 0x00c0, 0x2904: 0x00c0, 0x2905: 0x00c0, + 0x2906: 0x00c0, 0x2907: 0x00c0, 0x2908: 0x00c0, 0x2909: 0x00c0, 0x290a: 0x00c0, 0x290b: 0x00c0, + 0x290c: 0x00c0, 0x290d: 0x00c0, 0x290e: 0x00c0, 0x290f: 0x00c0, 0x2910: 0x00c0, 0x2911: 0x00c0, + 0x2912: 0x00c0, 0x2913: 0x00c0, 0x2914: 0x00c0, 0x2915: 0x00c0, 0x2916: 0x00c0, 0x2917: 0x00c0, + 0x2918: 0x00c0, 0x2919: 0x00c0, 0x291a: 0x00c0, 0x291b: 0x00c0, 0x291c: 0x00c0, 0x291d: 0x00c0, + 0x291e: 0x00c0, 0x291f: 0x00c0, 0x2920: 0x00c0, 0x2921: 0x00c0, 0x2922: 0x00c0, 0x2923: 0x00c0, + 0x2924: 0x00c0, 0x2925: 0x00c0, 0x2926: 0x00c0, 0x2927: 0x00c0, 0x2928: 0x00c0, 0x2929: 0x00c0, + 0x292a: 0x00c0, 0x292b: 0x00c0, 0x292c: 0x00c0, 0x292d: 0x00c0, 0x292e: 0x00c0, 0x292f: 0x00c0, + 0x2930: 0x00c0, 0x2931: 0x00c0, 0x2932: 0x00c0, 0x2933: 0x00c3, 0x2934: 0x00c0, 0x2935: 0x00c0, + 0x2936: 0x00c3, 0x2937: 0x00c3, 0x2938: 0x00c3, 0x2939: 0x00c3, 0x293a: 0x00c0, 0x293b: 0x00c0, + 0x293c: 0x00c3, 0x293d: 0x00c0, 0x293e: 0x00c0, 0x293f: 0x00c0, + // Block 0xa5, offset 0x2940 + 0x2940: 0x00c5, 0x2941: 0x0080, 0x2942: 0x0080, 0x2943: 0x0080, 0x2944: 0x0080, 0x2945: 0x0080, + 0x2946: 0x0080, 0x2947: 0x0080, 0x2948: 0x0080, 0x2949: 0x0080, 0x294a: 0x0080, 0x294b: 0x0080, + 0x294c: 0x0080, 0x294d: 0x0080, 0x294f: 0x00c0, 0x2950: 0x00c0, 0x2951: 0x00c0, + 0x2952: 0x00c0, 0x2953: 0x00c0, 0x2954: 0x00c0, 0x2955: 0x00c0, 0x2956: 0x00c0, 0x2957: 0x00c0, + 0x2958: 0x00c0, 0x2959: 0x00c0, + 0x295e: 0x0080, 0x295f: 0x0080, 0x2960: 0x00c0, 0x2961: 0x00c0, 0x2962: 0x00c0, 0x2963: 0x00c0, + 0x2964: 0x00c0, 0x2965: 0x00c3, 0x2966: 0x00c0, 0x2967: 0x00c0, 0x2968: 0x00c0, 0x2969: 0x00c0, + 0x296a: 0x00c0, 0x296b: 0x00c0, 0x296c: 0x00c0, 0x296d: 0x00c0, 0x296e: 0x00c0, 0x296f: 0x00c0, + 0x2970: 0x00c0, 0x2971: 0x00c0, 0x2972: 0x00c0, 0x2973: 0x00c0, 0x2974: 0x00c0, 0x2975: 0x00c0, + 0x2976: 0x00c0, 0x2977: 0x00c0, 0x2978: 0x00c0, 0x2979: 0x00c0, 0x297a: 0x00c0, 0x297b: 0x00c0, + 0x297c: 0x00c0, 0x297d: 0x00c0, 0x297e: 0x00c0, + // Block 0xa6, offset 0x2980 + 0x2980: 0x00c0, 0x2981: 0x00c0, 0x2982: 0x00c0, 0x2983: 0x00c0, 0x2984: 0x00c0, 0x2985: 0x00c0, + 0x2986: 0x00c0, 0x2987: 0x00c0, 0x2988: 0x00c0, 0x2989: 0x00c0, 0x298a: 0x00c0, 0x298b: 0x00c0, + 0x298c: 0x00c0, 0x298d: 0x00c0, 0x298e: 0x00c0, 0x298f: 0x00c0, 0x2990: 0x00c0, 0x2991: 0x00c0, + 0x2992: 0x00c0, 0x2993: 0x00c0, 0x2994: 0x00c0, 0x2995: 0x00c0, 0x2996: 0x00c0, 0x2997: 0x00c0, + 0x2998: 0x00c0, 0x2999: 0x00c0, 0x299a: 0x00c0, 0x299b: 0x00c0, 0x299c: 0x00c0, 0x299d: 0x00c0, + 0x299e: 0x00c0, 0x299f: 0x00c0, 0x29a0: 0x00c0, 0x29a1: 0x00c0, 0x29a2: 0x00c0, 0x29a3: 0x00c0, + 0x29a4: 0x00c0, 0x29a5: 0x00c0, 0x29a6: 0x00c0, 0x29a7: 0x00c0, 0x29a8: 0x00c0, 0x29a9: 0x00c3, + 0x29aa: 0x00c3, 0x29ab: 0x00c3, 0x29ac: 0x00c3, 0x29ad: 0x00c3, 0x29ae: 0x00c3, 0x29af: 0x00c0, + 0x29b0: 0x00c0, 0x29b1: 0x00c3, 0x29b2: 0x00c3, 0x29b3: 0x00c0, 0x29b4: 0x00c0, 0x29b5: 0x00c3, + 0x29b6: 0x00c3, + // Block 0xa7, offset 0x29c0 + 0x29c0: 0x00c0, 0x29c1: 0x00c0, 0x29c2: 0x00c0, 0x29c3: 0x00c3, 0x29c4: 0x00c0, 0x29c5: 0x00c0, + 0x29c6: 0x00c0, 0x29c7: 0x00c0, 0x29c8: 0x00c0, 0x29c9: 0x00c0, 0x29ca: 0x00c0, 0x29cb: 0x00c0, + 0x29cc: 0x00c3, 0x29cd: 0x00c0, 0x29d0: 0x00c0, 0x29d1: 0x00c0, + 0x29d2: 0x00c0, 0x29d3: 0x00c0, 0x29d4: 0x00c0, 0x29d5: 0x00c0, 0x29d6: 0x00c0, 0x29d7: 0x00c0, + 0x29d8: 0x00c0, 0x29d9: 0x00c0, 0x29dc: 0x0080, 0x29dd: 0x0080, + 0x29de: 0x0080, 0x29df: 0x0080, 0x29e0: 0x00c0, 0x29e1: 0x00c0, 0x29e2: 0x00c0, 0x29e3: 0x00c0, + 0x29e4: 0x00c0, 0x29e5: 0x00c0, 0x29e6: 0x00c0, 0x29e7: 0x00c0, 0x29e8: 0x00c0, 0x29e9: 0x00c0, + 0x29ea: 0x00c0, 0x29eb: 0x00c0, 0x29ec: 0x00c0, 0x29ed: 0x00c0, 0x29ee: 0x00c0, 0x29ef: 0x00c0, + 0x29f0: 0x00c0, 0x29f1: 0x00c0, 0x29f2: 0x00c0, 0x29f3: 0x00c0, 0x29f4: 0x00c0, 0x29f5: 0x00c0, + 0x29f6: 0x00c0, 0x29f7: 0x0080, 0x29f8: 0x0080, 0x29f9: 0x0080, 0x29fa: 0x00c0, 0x29fb: 0x00c0, + 0x29fc: 0x00c3, 0x29fd: 0x00c0, 0x29fe: 0x00c0, 0x29ff: 0x00c0, + // Block 0xa8, offset 0x2a00 + 0x2a00: 0x00c0, 0x2a01: 0x00c0, 0x2a02: 0x00c0, 0x2a03: 0x00c0, 0x2a04: 0x00c0, 0x2a05: 0x00c0, + 0x2a06: 0x00c0, 0x2a07: 0x00c0, 0x2a08: 0x00c0, 0x2a09: 0x00c0, 0x2a0a: 0x00c0, 0x2a0b: 0x00c0, + 0x2a0c: 0x00c0, 0x2a0d: 0x00c0, 0x2a0e: 0x00c0, 0x2a0f: 0x00c0, 0x2a10: 0x00c0, 0x2a11: 0x00c0, + 0x2a12: 0x00c0, 0x2a13: 0x00c0, 0x2a14: 0x00c0, 0x2a15: 0x00c0, 0x2a16: 0x00c0, 0x2a17: 0x00c0, + 0x2a18: 0x00c0, 0x2a19: 0x00c0, 0x2a1a: 0x00c0, 0x2a1b: 0x00c0, 0x2a1c: 0x00c0, 0x2a1d: 0x00c0, + 0x2a1e: 0x00c0, 0x2a1f: 0x00c0, 0x2a20: 0x00c0, 0x2a21: 0x00c0, 0x2a22: 0x00c0, 0x2a23: 0x00c0, + 0x2a24: 0x00c0, 0x2a25: 0x00c0, 0x2a26: 0x00c0, 0x2a27: 0x00c0, 0x2a28: 0x00c0, 0x2a29: 0x00c0, + 0x2a2a: 0x00c0, 0x2a2b: 0x00c0, 0x2a2c: 0x00c0, 0x2a2d: 0x00c0, 0x2a2e: 0x00c0, 0x2a2f: 0x00c0, + 0x2a30: 0x00c3, 0x2a31: 0x00c0, 0x2a32: 0x00c3, 0x2a33: 0x00c3, 0x2a34: 0x00c3, 0x2a35: 0x00c0, + 0x2a36: 0x00c0, 0x2a37: 0x00c3, 0x2a38: 0x00c3, 0x2a39: 0x00c0, 0x2a3a: 0x00c0, 0x2a3b: 0x00c0, + 0x2a3c: 0x00c0, 0x2a3d: 0x00c0, 0x2a3e: 0x00c3, 0x2a3f: 0x00c3, + // Block 0xa9, offset 0x2a40 + 0x2a40: 0x00c0, 0x2a41: 0x00c3, 0x2a42: 0x00c0, + 0x2a5b: 0x00c0, 0x2a5c: 0x00c0, 0x2a5d: 0x00c0, + 0x2a5e: 0x0080, 0x2a5f: 0x0080, 0x2a60: 0x00c0, 0x2a61: 0x00c0, 0x2a62: 0x00c0, 0x2a63: 0x00c0, + 0x2a64: 0x00c0, 0x2a65: 0x00c0, 0x2a66: 0x00c0, 0x2a67: 0x00c0, 0x2a68: 0x00c0, 0x2a69: 0x00c0, + 0x2a6a: 0x00c0, 0x2a6b: 0x00c0, 0x2a6c: 0x00c3, 0x2a6d: 0x00c3, 0x2a6e: 0x00c0, 0x2a6f: 0x00c0, + 0x2a70: 0x0080, 0x2a71: 0x0080, 0x2a72: 0x00c0, 0x2a73: 0x00c0, 0x2a74: 0x00c0, 0x2a75: 0x00c0, + 0x2a76: 0x00c6, + // Block 0xaa, offset 0x2a80 + 0x2a81: 0x00c0, 0x2a82: 0x00c0, 0x2a83: 0x00c0, 0x2a84: 0x00c0, 0x2a85: 0x00c0, + 0x2a86: 0x00c0, 0x2a89: 0x00c0, 0x2a8a: 0x00c0, 0x2a8b: 0x00c0, + 0x2a8c: 0x00c0, 0x2a8d: 0x00c0, 0x2a8e: 0x00c0, 0x2a91: 0x00c0, + 0x2a92: 0x00c0, 0x2a93: 0x00c0, 0x2a94: 0x00c0, 0x2a95: 0x00c0, 0x2a96: 0x00c0, + 0x2aa0: 0x00c0, 0x2aa1: 0x00c0, 0x2aa2: 0x00c0, 0x2aa3: 0x00c0, + 0x2aa4: 0x00c0, 0x2aa5: 0x00c0, 0x2aa6: 0x00c0, 0x2aa8: 0x00c0, 0x2aa9: 0x00c0, + 0x2aaa: 0x00c0, 0x2aab: 0x00c0, 0x2aac: 0x00c0, 0x2aad: 0x00c0, 0x2aae: 0x00c0, + 0x2ab0: 0x00c0, 0x2ab1: 0x00c0, 0x2ab2: 0x00c0, 0x2ab3: 0x00c0, 0x2ab4: 0x00c0, 0x2ab5: 0x00c0, + 0x2ab6: 0x00c0, 0x2ab7: 0x00c0, 0x2ab8: 0x00c0, 0x2ab9: 0x00c0, 0x2aba: 0x00c0, 0x2abb: 0x00c0, + 0x2abc: 0x00c0, 0x2abd: 0x00c0, 0x2abe: 0x00c0, 0x2abf: 0x00c0, + // Block 0xab, offset 0x2ac0 + 0x2ac0: 0x00c0, 0x2ac1: 0x00c0, 0x2ac2: 0x00c0, 0x2ac3: 0x00c0, 0x2ac4: 0x00c0, 0x2ac5: 0x00c0, + 0x2ac6: 0x00c0, 0x2ac7: 0x00c0, 0x2ac8: 0x00c0, 0x2ac9: 0x00c0, 0x2aca: 0x00c0, 0x2acb: 0x00c0, + 0x2acc: 0x00c0, 0x2acd: 0x00c0, 0x2ace: 0x00c0, 0x2acf: 0x00c0, 0x2ad0: 0x00c0, 0x2ad1: 0x00c0, + 0x2ad2: 0x00c0, 0x2ad3: 0x00c0, 0x2ad4: 0x00c0, 0x2ad5: 0x00c0, 0x2ad6: 0x00c0, 0x2ad7: 0x00c0, + 0x2ad8: 0x00c0, 0x2ad9: 0x00c0, 0x2ada: 0x00c0, 0x2adb: 0x0080, 0x2adc: 0x0080, 0x2add: 0x0080, + 0x2ade: 0x0080, 0x2adf: 0x0080, 0x2ae0: 0x00c0, 0x2ae1: 0x00c0, 0x2ae2: 0x00c0, 0x2ae3: 0x00c0, + 0x2ae4: 0x00c0, 0x2ae5: 0x00c8, + 0x2af0: 0x00c0, 0x2af1: 0x00c0, 0x2af2: 0x00c0, 0x2af3: 0x00c0, 0x2af4: 0x00c0, 0x2af5: 0x00c0, + 0x2af6: 0x00c0, 0x2af7: 0x00c0, 0x2af8: 0x00c0, 0x2af9: 0x00c0, 0x2afa: 0x00c0, 0x2afb: 0x00c0, + 0x2afc: 0x00c0, 0x2afd: 0x00c0, 0x2afe: 0x00c0, 0x2aff: 0x00c0, + // Block 0xac, offset 0x2b00 + 0x2b00: 0x00c0, 0x2b01: 0x00c0, 0x2b02: 0x00c0, 0x2b03: 0x00c0, 0x2b04: 0x00c0, 0x2b05: 0x00c0, + 0x2b06: 0x00c0, 0x2b07: 0x00c0, 0x2b08: 0x00c0, 0x2b09: 0x00c0, 0x2b0a: 0x00c0, 0x2b0b: 0x00c0, + 0x2b0c: 0x00c0, 0x2b0d: 0x00c0, 0x2b0e: 0x00c0, 0x2b0f: 0x00c0, 0x2b10: 0x00c0, 0x2b11: 0x00c0, + 0x2b12: 0x00c0, 0x2b13: 0x00c0, 0x2b14: 0x00c0, 0x2b15: 0x00c0, 0x2b16: 0x00c0, 0x2b17: 0x00c0, + 0x2b18: 0x00c0, 0x2b19: 0x00c0, 0x2b1a: 0x00c0, 0x2b1b: 0x00c0, 0x2b1c: 0x00c0, 0x2b1d: 0x00c0, + 0x2b1e: 0x00c0, 0x2b1f: 0x00c0, 0x2b20: 0x00c0, 0x2b21: 0x00c0, 0x2b22: 0x00c0, 0x2b23: 0x00c0, + 0x2b24: 0x00c0, 0x2b25: 0x00c3, 0x2b26: 0x00c0, 0x2b27: 0x00c0, 0x2b28: 0x00c3, 0x2b29: 0x00c0, + 0x2b2a: 0x00c0, 0x2b2b: 0x0080, 0x2b2c: 0x00c0, 0x2b2d: 0x00c6, + 0x2b30: 0x00c0, 0x2b31: 0x00c0, 0x2b32: 0x00c0, 0x2b33: 0x00c0, 0x2b34: 0x00c0, 0x2b35: 0x00c0, + 0x2b36: 0x00c0, 0x2b37: 0x00c0, 0x2b38: 0x00c0, 0x2b39: 0x00c0, + // Block 0xad, offset 0x2b40 + 0x2b40: 0x00c0, 0x2b41: 0x00c0, 0x2b42: 0x00c0, 0x2b43: 0x00c0, 0x2b44: 0x00c0, 0x2b45: 0x00c0, + 0x2b46: 0x00c0, 0x2b47: 0x00c0, 0x2b48: 0x00c0, 0x2b49: 0x00c0, 0x2b4a: 0x00c0, 0x2b4b: 0x00c0, + 0x2b4c: 0x00c0, 0x2b4d: 0x00c0, 0x2b4e: 0x00c0, 0x2b4f: 0x00c0, 0x2b50: 0x00c0, 0x2b51: 0x00c0, + 0x2b52: 0x00c0, 0x2b53: 0x00c0, 0x2b54: 0x00c0, 0x2b55: 0x00c0, 0x2b56: 0x00c0, 0x2b57: 0x00c0, + 0x2b58: 0x00c0, 0x2b59: 0x00c0, 0x2b5a: 0x00c0, 0x2b5b: 0x00c0, 0x2b5c: 0x00c0, 0x2b5d: 0x00c0, + 0x2b5e: 0x00c0, 0x2b5f: 0x00c0, 0x2b60: 0x00c0, 0x2b61: 0x00c0, 0x2b62: 0x00c0, 0x2b63: 0x00c0, + 0x2b70: 0x0040, 0x2b71: 0x0040, 0x2b72: 0x0040, 0x2b73: 0x0040, 0x2b74: 0x0040, 0x2b75: 0x0040, + 0x2b76: 0x0040, 0x2b77: 0x0040, 0x2b78: 0x0040, 0x2b79: 0x0040, 0x2b7a: 0x0040, 0x2b7b: 0x0040, + 0x2b7c: 0x0040, 0x2b7d: 0x0040, 0x2b7e: 0x0040, 0x2b7f: 0x0040, + // Block 0xae, offset 0x2b80 + 0x2b80: 0x0040, 0x2b81: 0x0040, 0x2b82: 0x0040, 0x2b83: 0x0040, 0x2b84: 0x0040, 0x2b85: 0x0040, + 0x2b86: 0x0040, 0x2b8b: 0x0040, + 0x2b8c: 0x0040, 0x2b8d: 0x0040, 0x2b8e: 0x0040, 0x2b8f: 0x0040, 0x2b90: 0x0040, 0x2b91: 0x0040, + 0x2b92: 0x0040, 0x2b93: 0x0040, 0x2b94: 0x0040, 0x2b95: 0x0040, 0x2b96: 0x0040, 0x2b97: 0x0040, + 0x2b98: 0x0040, 0x2b99: 0x0040, 0x2b9a: 0x0040, 0x2b9b: 0x0040, 0x2b9c: 0x0040, 0x2b9d: 0x0040, + 0x2b9e: 0x0040, 0x2b9f: 0x0040, 0x2ba0: 0x0040, 0x2ba1: 0x0040, 0x2ba2: 0x0040, 0x2ba3: 0x0040, + 0x2ba4: 0x0040, 0x2ba5: 0x0040, 0x2ba6: 0x0040, 0x2ba7: 0x0040, 0x2ba8: 0x0040, 0x2ba9: 0x0040, + 0x2baa: 0x0040, 0x2bab: 0x0040, 0x2bac: 0x0040, 0x2bad: 0x0040, 0x2bae: 0x0040, 0x2baf: 0x0040, + 0x2bb0: 0x0040, 0x2bb1: 0x0040, 0x2bb2: 0x0040, 0x2bb3: 0x0040, 0x2bb4: 0x0040, 0x2bb5: 0x0040, + 0x2bb6: 0x0040, 0x2bb7: 0x0040, 0x2bb8: 0x0040, 0x2bb9: 0x0040, 0x2bba: 0x0040, 0x2bbb: 0x0040, + // Block 0xaf, offset 0x2bc0 + 0x2bc0: 0x008c, 0x2bc1: 0x008c, 0x2bc2: 0x008c, 0x2bc3: 0x008c, 0x2bc4: 0x008c, 0x2bc5: 0x008c, + 0x2bc6: 0x008c, 0x2bc7: 0x008c, 0x2bc8: 0x008c, 0x2bc9: 0x008c, 0x2bca: 0x008c, 0x2bcb: 0x008c, + 0x2bcc: 0x008c, 0x2bcd: 0x008c, 0x2bce: 0x00cc, 0x2bcf: 0x00cc, 0x2bd0: 0x008c, 0x2bd1: 0x00cc, + 0x2bd2: 0x008c, 0x2bd3: 0x00cc, 0x2bd4: 0x00cc, 0x2bd5: 0x008c, 0x2bd6: 0x008c, 0x2bd7: 0x008c, + 0x2bd8: 0x008c, 0x2bd9: 0x008c, 0x2bda: 0x008c, 0x2bdb: 0x008c, 0x2bdc: 0x008c, 0x2bdd: 0x008c, + 0x2bde: 0x008c, 0x2bdf: 0x00cc, 0x2be0: 0x008c, 0x2be1: 0x00cc, 0x2be2: 0x008c, 0x2be3: 0x00cc, + 0x2be4: 0x00cc, 0x2be5: 0x008c, 0x2be6: 0x008c, 0x2be7: 0x00cc, 0x2be8: 0x00cc, 0x2be9: 0x00cc, + 0x2bea: 0x008c, 0x2beb: 0x008c, 0x2bec: 0x008c, 0x2bed: 0x008c, 0x2bee: 0x008c, 0x2bef: 0x008c, + 0x2bf0: 0x008c, 0x2bf1: 0x008c, 0x2bf2: 0x008c, 0x2bf3: 0x008c, 0x2bf4: 0x008c, 0x2bf5: 0x008c, + 0x2bf6: 0x008c, 0x2bf7: 0x008c, 0x2bf8: 0x008c, 0x2bf9: 0x008c, 0x2bfa: 0x008c, 0x2bfb: 0x008c, + 0x2bfc: 0x008c, 0x2bfd: 0x008c, 0x2bfe: 0x008c, 0x2bff: 0x008c, + // Block 0xb0, offset 0x2c00 + 0x2c00: 0x008c, 0x2c01: 0x008c, 0x2c02: 0x008c, 0x2c03: 0x008c, 0x2c04: 0x008c, 0x2c05: 0x008c, + 0x2c06: 0x008c, 0x2c07: 0x008c, 0x2c08: 0x008c, 0x2c09: 0x008c, 0x2c0a: 0x008c, 0x2c0b: 0x008c, + 0x2c0c: 0x008c, 0x2c0d: 0x008c, 0x2c0e: 0x008c, 0x2c0f: 0x008c, 0x2c10: 0x008c, 0x2c11: 0x008c, + 0x2c12: 0x008c, 0x2c13: 0x008c, 0x2c14: 0x008c, 0x2c15: 0x008c, 0x2c16: 0x008c, 0x2c17: 0x008c, + 0x2c18: 0x008c, 0x2c19: 0x008c, 0x2c1a: 0x008c, 0x2c1b: 0x008c, 0x2c1c: 0x008c, 0x2c1d: 0x008c, + 0x2c1e: 0x008c, 0x2c1f: 0x008c, 0x2c20: 0x008c, 0x2c21: 0x008c, 0x2c22: 0x008c, 0x2c23: 0x008c, + 0x2c24: 0x008c, 0x2c25: 0x008c, 0x2c26: 0x008c, 0x2c27: 0x008c, 0x2c28: 0x008c, 0x2c29: 0x008c, + 0x2c2a: 0x008c, 0x2c2b: 0x008c, 0x2c2c: 0x008c, 0x2c2d: 0x008c, + 0x2c30: 0x008c, 0x2c31: 0x008c, 0x2c32: 0x008c, 0x2c33: 0x008c, 0x2c34: 0x008c, 0x2c35: 0x008c, + 0x2c36: 0x008c, 0x2c37: 0x008c, 0x2c38: 0x008c, 0x2c39: 0x008c, 0x2c3a: 0x008c, 0x2c3b: 0x008c, + 0x2c3c: 0x008c, 0x2c3d: 0x008c, 0x2c3e: 0x008c, 0x2c3f: 0x008c, + // Block 0xb1, offset 0x2c40 + 0x2c40: 0x008c, 0x2c41: 0x008c, 0x2c42: 0x008c, 0x2c43: 0x008c, 0x2c44: 0x008c, 0x2c45: 0x008c, + 0x2c46: 0x008c, 0x2c47: 0x008c, 0x2c48: 0x008c, 0x2c49: 0x008c, 0x2c4a: 0x008c, 0x2c4b: 0x008c, + 0x2c4c: 0x008c, 0x2c4d: 0x008c, 0x2c4e: 0x008c, 0x2c4f: 0x008c, 0x2c50: 0x008c, 0x2c51: 0x008c, + 0x2c52: 0x008c, 0x2c53: 0x008c, 0x2c54: 0x008c, 0x2c55: 0x008c, 0x2c56: 0x008c, 0x2c57: 0x008c, + 0x2c58: 0x008c, 0x2c59: 0x008c, + // Block 0xb2, offset 0x2c80 + 0x2c80: 0x0080, 0x2c81: 0x0080, 0x2c82: 0x0080, 0x2c83: 0x0080, 0x2c84: 0x0080, 0x2c85: 0x0080, + 0x2c86: 0x0080, + 0x2c93: 0x0080, 0x2c94: 0x0080, 0x2c95: 0x0080, 0x2c96: 0x0080, 0x2c97: 0x0080, + 0x2c9d: 0x008a, + 0x2c9e: 0x00cb, 0x2c9f: 0x008a, 0x2ca0: 0x008a, 0x2ca1: 0x008a, 0x2ca2: 0x008a, 0x2ca3: 0x008a, + 0x2ca4: 0x008a, 0x2ca5: 0x008a, 0x2ca6: 0x008a, 0x2ca7: 0x008a, 0x2ca8: 0x008a, 0x2ca9: 0x008a, + 0x2caa: 0x008a, 0x2cab: 0x008a, 0x2cac: 0x008a, 0x2cad: 0x008a, 0x2cae: 0x008a, 0x2caf: 0x008a, + 0x2cb0: 0x008a, 0x2cb1: 0x008a, 0x2cb2: 0x008a, 0x2cb3: 0x008a, 0x2cb4: 0x008a, 0x2cb5: 0x008a, + 0x2cb6: 0x008a, 0x2cb8: 0x008a, 0x2cb9: 0x008a, 0x2cba: 0x008a, 0x2cbb: 0x008a, + 0x2cbc: 0x008a, 0x2cbe: 0x008a, + // Block 0xb3, offset 0x2cc0 + 0x2cc0: 0x008a, 0x2cc1: 0x008a, 0x2cc3: 0x008a, 0x2cc4: 0x008a, + 0x2cc6: 0x008a, 0x2cc7: 0x008a, 0x2cc8: 0x008a, 0x2cc9: 0x008a, 0x2cca: 0x008a, 0x2ccb: 0x008a, + 0x2ccc: 0x008a, 0x2ccd: 0x008a, 0x2cce: 0x008a, 0x2ccf: 0x008a, 0x2cd0: 0x0080, 0x2cd1: 0x0080, + 0x2cd2: 0x0080, 0x2cd3: 0x0080, 0x2cd4: 0x0080, 0x2cd5: 0x0080, 0x2cd6: 0x0080, 0x2cd7: 0x0080, + 0x2cd8: 0x0080, 0x2cd9: 0x0080, 0x2cda: 0x0080, 0x2cdb: 0x0080, 0x2cdc: 0x0080, 0x2cdd: 0x0080, + 0x2cde: 0x0080, 0x2cdf: 0x0080, 0x2ce0: 0x0080, 0x2ce1: 0x0080, 0x2ce2: 0x0080, 0x2ce3: 0x0080, + 0x2ce4: 0x0080, 0x2ce5: 0x0080, 0x2ce6: 0x0080, 0x2ce7: 0x0080, 0x2ce8: 0x0080, 0x2ce9: 0x0080, + 0x2cea: 0x0080, 0x2ceb: 0x0080, 0x2cec: 0x0080, 0x2ced: 0x0080, 0x2cee: 0x0080, 0x2cef: 0x0080, + 0x2cf0: 0x0080, 0x2cf1: 0x0080, 0x2cf2: 0x0080, 0x2cf3: 0x0080, 0x2cf4: 0x0080, 0x2cf5: 0x0080, + 0x2cf6: 0x0080, 0x2cf7: 0x0080, 0x2cf8: 0x0080, 0x2cf9: 0x0080, 0x2cfa: 0x0080, 0x2cfb: 0x0080, + 0x2cfc: 0x0080, 0x2cfd: 0x0080, 0x2cfe: 0x0080, 0x2cff: 0x0080, + // Block 0xb4, offset 0x2d00 + 0x2d00: 0x0080, 0x2d01: 0x0080, + 0x2d13: 0x0080, 0x2d14: 0x0080, 0x2d15: 0x0080, 0x2d16: 0x0080, 0x2d17: 0x0080, + 0x2d18: 0x0080, 0x2d19: 0x0080, 0x2d1a: 0x0080, 0x2d1b: 0x0080, 0x2d1c: 0x0080, 0x2d1d: 0x0080, + 0x2d1e: 0x0080, 0x2d1f: 0x0080, 0x2d20: 0x0080, 0x2d21: 0x0080, 0x2d22: 0x0080, 0x2d23: 0x0080, + 0x2d24: 0x0080, 0x2d25: 0x0080, 0x2d26: 0x0080, 0x2d27: 0x0080, 0x2d28: 0x0080, 0x2d29: 0x0080, + 0x2d2a: 0x0080, 0x2d2b: 0x0080, 0x2d2c: 0x0080, 0x2d2d: 0x0080, 0x2d2e: 0x0080, 0x2d2f: 0x0080, + 0x2d30: 0x0080, 0x2d31: 0x0080, 0x2d32: 0x0080, 0x2d33: 0x0080, 0x2d34: 0x0080, 0x2d35: 0x0080, + 0x2d36: 0x0080, 0x2d37: 0x0080, 0x2d38: 0x0080, 0x2d39: 0x0080, 0x2d3a: 0x0080, 0x2d3b: 0x0080, + 0x2d3c: 0x0080, 0x2d3d: 0x0080, 0x2d3e: 0x0080, 0x2d3f: 0x0080, + // Block 0xb5, offset 0x2d40 + 0x2d50: 0x0080, 0x2d51: 0x0080, + 0x2d52: 0x0080, 0x2d53: 0x0080, 0x2d54: 0x0080, 0x2d55: 0x0080, 0x2d56: 0x0080, 0x2d57: 0x0080, + 0x2d58: 0x0080, 0x2d59: 0x0080, 0x2d5a: 0x0080, 0x2d5b: 0x0080, 0x2d5c: 0x0080, 0x2d5d: 0x0080, + 0x2d5e: 0x0080, 0x2d5f: 0x0080, 0x2d60: 0x0080, 0x2d61: 0x0080, 0x2d62: 0x0080, 0x2d63: 0x0080, + 0x2d64: 0x0080, 0x2d65: 0x0080, 0x2d66: 0x0080, 0x2d67: 0x0080, 0x2d68: 0x0080, 0x2d69: 0x0080, + 0x2d6a: 0x0080, 0x2d6b: 0x0080, 0x2d6c: 0x0080, 0x2d6d: 0x0080, 0x2d6e: 0x0080, 0x2d6f: 0x0080, + 0x2d70: 0x0080, 0x2d71: 0x0080, 0x2d72: 0x0080, 0x2d73: 0x0080, 0x2d74: 0x0080, 0x2d75: 0x0080, + 0x2d76: 0x0080, 0x2d77: 0x0080, 0x2d78: 0x0080, 0x2d79: 0x0080, 0x2d7a: 0x0080, 0x2d7b: 0x0080, + 0x2d7c: 0x0080, 0x2d7d: 0x0080, 0x2d7e: 0x0080, 0x2d7f: 0x0080, + // Block 0xb6, offset 0x2d80 + 0x2d80: 0x0080, 0x2d81: 0x0080, 0x2d82: 0x0080, 0x2d83: 0x0080, 0x2d84: 0x0080, 0x2d85: 0x0080, + 0x2d86: 0x0080, 0x2d87: 0x0080, 0x2d88: 0x0080, 0x2d89: 0x0080, 0x2d8a: 0x0080, 0x2d8b: 0x0080, + 0x2d8c: 0x0080, 0x2d8d: 0x0080, 0x2d8e: 0x0080, 0x2d8f: 0x0080, + 0x2d92: 0x0080, 0x2d93: 0x0080, 0x2d94: 0x0080, 0x2d95: 0x0080, 0x2d96: 0x0080, 0x2d97: 0x0080, + 0x2d98: 0x0080, 0x2d99: 0x0080, 0x2d9a: 0x0080, 0x2d9b: 0x0080, 0x2d9c: 0x0080, 0x2d9d: 0x0080, + 0x2d9e: 0x0080, 0x2d9f: 0x0080, 0x2da0: 0x0080, 0x2da1: 0x0080, 0x2da2: 0x0080, 0x2da3: 0x0080, + 0x2da4: 0x0080, 0x2da5: 0x0080, 0x2da6: 0x0080, 0x2da7: 0x0080, 0x2da8: 0x0080, 0x2da9: 0x0080, + 0x2daa: 0x0080, 0x2dab: 0x0080, 0x2dac: 0x0080, 0x2dad: 0x0080, 0x2dae: 0x0080, 0x2daf: 0x0080, + 0x2db0: 0x0080, 0x2db1: 0x0080, 0x2db2: 0x0080, 0x2db3: 0x0080, 0x2db4: 0x0080, 0x2db5: 0x0080, + 0x2db6: 0x0080, 0x2db7: 0x0080, 0x2db8: 0x0080, 0x2db9: 0x0080, 0x2dba: 0x0080, 0x2dbb: 0x0080, + 0x2dbc: 0x0080, 0x2dbd: 0x0080, 0x2dbe: 0x0080, 0x2dbf: 0x0080, + // Block 0xb7, offset 0x2dc0 + 0x2dc0: 0x0080, 0x2dc1: 0x0080, 0x2dc2: 0x0080, 0x2dc3: 0x0080, 0x2dc4: 0x0080, 0x2dc5: 0x0080, + 0x2dc6: 0x0080, 0x2dc7: 0x0080, + 0x2df0: 0x0080, 0x2df1: 0x0080, 0x2df2: 0x0080, 0x2df3: 0x0080, 0x2df4: 0x0080, 0x2df5: 0x0080, + 0x2df6: 0x0080, 0x2df7: 0x0080, 0x2df8: 0x0080, 0x2df9: 0x0080, 0x2dfa: 0x0080, 0x2dfb: 0x0080, + 0x2dfc: 0x0080, 0x2dfd: 0x0080, + // Block 0xb8, offset 0x2e00 + 0x2e00: 0x0040, 0x2e01: 0x0040, 0x2e02: 0x0040, 0x2e03: 0x0040, 0x2e04: 0x0040, 0x2e05: 0x0040, + 0x2e06: 0x0040, 0x2e07: 0x0040, 0x2e08: 0x0040, 0x2e09: 0x0040, 0x2e0a: 0x0040, 0x2e0b: 0x0040, + 0x2e0c: 0x0040, 0x2e0d: 0x0040, 0x2e0e: 0x0040, 0x2e0f: 0x0040, 0x2e10: 0x0080, 0x2e11: 0x0080, + 0x2e12: 0x0080, 0x2e13: 0x0080, 0x2e14: 0x0080, 0x2e15: 0x0080, 0x2e16: 0x0080, 0x2e17: 0x0080, + 0x2e18: 0x0080, 0x2e19: 0x0080, + 0x2e20: 0x00c3, 0x2e21: 0x00c3, 0x2e22: 0x00c3, 0x2e23: 0x00c3, + 0x2e24: 0x00c3, 0x2e25: 0x00c3, 0x2e26: 0x00c3, 0x2e27: 0x00c3, 0x2e28: 0x00c3, 0x2e29: 0x00c3, + 0x2e2a: 0x00c3, 0x2e2b: 0x00c3, 0x2e2c: 0x00c3, 0x2e2d: 0x00c3, 0x2e2e: 0x00c3, 0x2e2f: 0x00c3, + 0x2e30: 0x0080, 0x2e31: 0x0080, 0x2e32: 0x0080, 0x2e33: 0x0080, 0x2e34: 0x0080, 0x2e35: 0x0080, + 0x2e36: 0x0080, 0x2e37: 0x0080, 0x2e38: 0x0080, 0x2e39: 0x0080, 0x2e3a: 0x0080, 0x2e3b: 0x0080, + 0x2e3c: 0x0080, 0x2e3d: 0x0080, 0x2e3e: 0x0080, 0x2e3f: 0x0080, + // Block 0xb9, offset 0x2e40 + 0x2e40: 0x0080, 0x2e41: 0x0080, 0x2e42: 0x0080, 0x2e43: 0x0080, 0x2e44: 0x0080, 0x2e45: 0x0080, + 0x2e46: 0x0080, 0x2e47: 0x0080, 0x2e48: 0x0080, 0x2e49: 0x0080, 0x2e4a: 0x0080, 0x2e4b: 0x0080, + 0x2e4c: 0x0080, 0x2e4d: 0x0080, 0x2e4e: 0x0080, 0x2e4f: 0x0080, 0x2e50: 0x0080, 0x2e51: 0x0080, + 0x2e52: 0x0080, 0x2e54: 0x0080, 0x2e55: 0x0080, 0x2e56: 0x0080, 0x2e57: 0x0080, + 0x2e58: 0x0080, 0x2e59: 0x0080, 0x2e5a: 0x0080, 0x2e5b: 0x0080, 0x2e5c: 0x0080, 0x2e5d: 0x0080, + 0x2e5e: 0x0080, 0x2e5f: 0x0080, 0x2e60: 0x0080, 0x2e61: 0x0080, 0x2e62: 0x0080, 0x2e63: 0x0080, + 0x2e64: 0x0080, 0x2e65: 0x0080, 0x2e66: 0x0080, 0x2e68: 0x0080, 0x2e69: 0x0080, + 0x2e6a: 0x0080, 0x2e6b: 0x0080, + 0x2e70: 0x0080, 0x2e71: 0x0080, 0x2e72: 0x0080, 0x2e73: 0x00c0, 0x2e74: 0x0080, + 0x2e76: 0x0080, 0x2e77: 0x0080, 0x2e78: 0x0080, 0x2e79: 0x0080, 0x2e7a: 0x0080, 0x2e7b: 0x0080, + 0x2e7c: 0x0080, 0x2e7d: 0x0080, 0x2e7e: 0x0080, 0x2e7f: 0x0080, + // Block 0xba, offset 0x2e80 + 0x2e80: 0x0080, 0x2e81: 0x0080, 0x2e82: 0x0080, 0x2e83: 0x0080, 0x2e84: 0x0080, 0x2e85: 0x0080, + 0x2e86: 0x0080, 0x2e87: 0x0080, 0x2e88: 0x0080, 0x2e89: 0x0080, 0x2e8a: 0x0080, 0x2e8b: 0x0080, + 0x2e8c: 0x0080, 0x2e8d: 0x0080, 0x2e8e: 0x0080, 0x2e8f: 0x0080, 0x2e90: 0x0080, 0x2e91: 0x0080, + 0x2e92: 0x0080, 0x2e93: 0x0080, 0x2e94: 0x0080, 0x2e95: 0x0080, 0x2e96: 0x0080, 0x2e97: 0x0080, + 0x2e98: 0x0080, 0x2e99: 0x0080, 0x2e9a: 0x0080, 0x2e9b: 0x0080, 0x2e9c: 0x0080, 0x2e9d: 0x0080, + 0x2e9e: 0x0080, 0x2e9f: 0x0080, 0x2ea0: 0x0080, 0x2ea1: 0x0080, 0x2ea2: 0x0080, 0x2ea3: 0x0080, + 0x2ea4: 0x0080, 0x2ea5: 0x0080, 0x2ea6: 0x0080, 0x2ea7: 0x0080, 0x2ea8: 0x0080, 0x2ea9: 0x0080, + 0x2eaa: 0x0080, 0x2eab: 0x0080, 0x2eac: 0x0080, 0x2ead: 0x0080, 0x2eae: 0x0080, 0x2eaf: 0x0080, + 0x2eb0: 0x0080, 0x2eb1: 0x0080, 0x2eb2: 0x0080, 0x2eb3: 0x0080, 0x2eb4: 0x0080, 0x2eb5: 0x0080, + 0x2eb6: 0x0080, 0x2eb7: 0x0080, 0x2eb8: 0x0080, 0x2eb9: 0x0080, 0x2eba: 0x0080, 0x2ebb: 0x0080, + 0x2ebc: 0x0080, 0x2ebf: 0x0040, + // Block 0xbb, offset 0x2ec0 + 0x2ec1: 0x0080, 0x2ec2: 0x0080, 0x2ec3: 0x0080, 0x2ec4: 0x0080, 0x2ec5: 0x0080, + 0x2ec6: 0x0080, 0x2ec7: 0x0080, 0x2ec8: 0x0080, 0x2ec9: 0x0080, 0x2eca: 0x0080, 0x2ecb: 0x0080, + 0x2ecc: 0x0080, 0x2ecd: 0x0080, 0x2ece: 0x0080, 0x2ecf: 0x0080, 0x2ed0: 0x0080, 0x2ed1: 0x0080, + 0x2ed2: 0x0080, 0x2ed3: 0x0080, 0x2ed4: 0x0080, 0x2ed5: 0x0080, 0x2ed6: 0x0080, 0x2ed7: 0x0080, + 0x2ed8: 0x0080, 0x2ed9: 0x0080, 0x2eda: 0x0080, 0x2edb: 0x0080, 0x2edc: 0x0080, 0x2edd: 0x0080, + 0x2ede: 0x0080, 0x2edf: 0x0080, 0x2ee0: 0x0080, 0x2ee1: 0x0080, 0x2ee2: 0x0080, 0x2ee3: 0x0080, + 0x2ee4: 0x0080, 0x2ee5: 0x0080, 0x2ee6: 0x0080, 0x2ee7: 0x0080, 0x2ee8: 0x0080, 0x2ee9: 0x0080, + 0x2eea: 0x0080, 0x2eeb: 0x0080, 0x2eec: 0x0080, 0x2eed: 0x0080, 0x2eee: 0x0080, 0x2eef: 0x0080, + 0x2ef0: 0x0080, 0x2ef1: 0x0080, 0x2ef2: 0x0080, 0x2ef3: 0x0080, 0x2ef4: 0x0080, 0x2ef5: 0x0080, + 0x2ef6: 0x0080, 0x2ef7: 0x0080, 0x2ef8: 0x0080, 0x2ef9: 0x0080, 0x2efa: 0x0080, 0x2efb: 0x0080, + 0x2efc: 0x0080, 0x2efd: 0x0080, 0x2efe: 0x0080, 0x2eff: 0x0080, + // Block 0xbc, offset 0x2f00 + 0x2f00: 0x0080, 0x2f01: 0x0080, 0x2f02: 0x0080, 0x2f03: 0x0080, 0x2f04: 0x0080, 0x2f05: 0x0080, + 0x2f06: 0x0080, 0x2f07: 0x0080, 0x2f08: 0x0080, 0x2f09: 0x0080, 0x2f0a: 0x0080, 0x2f0b: 0x0080, + 0x2f0c: 0x0080, 0x2f0d: 0x0080, 0x2f0e: 0x0080, 0x2f0f: 0x0080, 0x2f10: 0x0080, 0x2f11: 0x0080, + 0x2f12: 0x0080, 0x2f13: 0x0080, 0x2f14: 0x0080, 0x2f15: 0x0080, 0x2f16: 0x0080, 0x2f17: 0x0080, + 0x2f18: 0x0080, 0x2f19: 0x0080, 0x2f1a: 0x0080, 0x2f1b: 0x0080, 0x2f1c: 0x0080, 0x2f1d: 0x0080, + 0x2f1e: 0x0080, 0x2f1f: 0x0080, 0x2f20: 0x0080, 0x2f21: 0x0080, 0x2f22: 0x0080, 0x2f23: 0x0080, + 0x2f24: 0x0080, 0x2f25: 0x0080, 0x2f26: 0x008c, 0x2f27: 0x008c, 0x2f28: 0x008c, 0x2f29: 0x008c, + 0x2f2a: 0x008c, 0x2f2b: 0x008c, 0x2f2c: 0x008c, 0x2f2d: 0x008c, 0x2f2e: 0x008c, 0x2f2f: 0x008c, + 0x2f30: 0x0080, 0x2f31: 0x008c, 0x2f32: 0x008c, 0x2f33: 0x008c, 0x2f34: 0x008c, 0x2f35: 0x008c, + 0x2f36: 0x008c, 0x2f37: 0x008c, 0x2f38: 0x008c, 0x2f39: 0x008c, 0x2f3a: 0x008c, 0x2f3b: 0x008c, + 0x2f3c: 0x008c, 0x2f3d: 0x008c, 0x2f3e: 0x008c, 0x2f3f: 0x008c, + // Block 0xbd, offset 0x2f40 + 0x2f40: 0x008c, 0x2f41: 0x008c, 0x2f42: 0x008c, 0x2f43: 0x008c, 0x2f44: 0x008c, 0x2f45: 0x008c, + 0x2f46: 0x008c, 0x2f47: 0x008c, 0x2f48: 0x008c, 0x2f49: 0x008c, 0x2f4a: 0x008c, 0x2f4b: 0x008c, + 0x2f4c: 0x008c, 0x2f4d: 0x008c, 0x2f4e: 0x008c, 0x2f4f: 0x008c, 0x2f50: 0x008c, 0x2f51: 0x008c, + 0x2f52: 0x008c, 0x2f53: 0x008c, 0x2f54: 0x008c, 0x2f55: 0x008c, 0x2f56: 0x008c, 0x2f57: 0x008c, + 0x2f58: 0x008c, 0x2f59: 0x008c, 0x2f5a: 0x008c, 0x2f5b: 0x008c, 0x2f5c: 0x008c, 0x2f5d: 0x008c, + 0x2f5e: 0x0080, 0x2f5f: 0x0080, 0x2f60: 0x0040, 0x2f61: 0x0080, 0x2f62: 0x0080, 0x2f63: 0x0080, + 0x2f64: 0x0080, 0x2f65: 0x0080, 0x2f66: 0x0080, 0x2f67: 0x0080, 0x2f68: 0x0080, 0x2f69: 0x0080, + 0x2f6a: 0x0080, 0x2f6b: 0x0080, 0x2f6c: 0x0080, 0x2f6d: 0x0080, 0x2f6e: 0x0080, 0x2f6f: 0x0080, + 0x2f70: 0x0080, 0x2f71: 0x0080, 0x2f72: 0x0080, 0x2f73: 0x0080, 0x2f74: 0x0080, 0x2f75: 0x0080, + 0x2f76: 0x0080, 0x2f77: 0x0080, 0x2f78: 0x0080, 0x2f79: 0x0080, 0x2f7a: 0x0080, 0x2f7b: 0x0080, + 0x2f7c: 0x0080, 0x2f7d: 0x0080, 0x2f7e: 0x0080, + // Block 0xbe, offset 0x2f80 + 0x2f82: 0x0080, 0x2f83: 0x0080, 0x2f84: 0x0080, 0x2f85: 0x0080, + 0x2f86: 0x0080, 0x2f87: 0x0080, 0x2f8a: 0x0080, 0x2f8b: 0x0080, + 0x2f8c: 0x0080, 0x2f8d: 0x0080, 0x2f8e: 0x0080, 0x2f8f: 0x0080, + 0x2f92: 0x0080, 0x2f93: 0x0080, 0x2f94: 0x0080, 0x2f95: 0x0080, 0x2f96: 0x0080, 0x2f97: 0x0080, + 0x2f9a: 0x0080, 0x2f9b: 0x0080, 0x2f9c: 0x0080, + 0x2fa0: 0x0080, 0x2fa1: 0x0080, 0x2fa2: 0x0080, 0x2fa3: 0x0080, + 0x2fa4: 0x0080, 0x2fa5: 0x0080, 0x2fa6: 0x0080, 0x2fa8: 0x0080, 0x2fa9: 0x0080, + 0x2faa: 0x0080, 0x2fab: 0x0080, 0x2fac: 0x0080, 0x2fad: 0x0080, 0x2fae: 0x0080, + 0x2fb9: 0x0040, 0x2fba: 0x0040, 0x2fbb: 0x0040, + 0x2fbc: 0x0080, 0x2fbd: 0x0080, + // Block 0xbf, offset 0x2fc0 + 0x2fc0: 0x00c0, 0x2fc1: 0x00c0, 0x2fc2: 0x00c0, 0x2fc3: 0x00c0, 0x2fc4: 0x00c0, 0x2fc5: 0x00c0, + 0x2fc6: 0x00c0, 0x2fc7: 0x00c0, 0x2fc8: 0x00c0, 0x2fc9: 0x00c0, 0x2fca: 0x00c0, 0x2fcb: 0x00c0, + 0x2fcd: 0x00c0, 0x2fce: 0x00c0, 0x2fcf: 0x00c0, 0x2fd0: 0x00c0, 0x2fd1: 0x00c0, + 0x2fd2: 0x00c0, 0x2fd3: 0x00c0, 0x2fd4: 0x00c0, 0x2fd5: 0x00c0, 0x2fd6: 0x00c0, 0x2fd7: 0x00c0, + 0x2fd8: 0x00c0, 0x2fd9: 0x00c0, 0x2fda: 0x00c0, 0x2fdb: 0x00c0, 0x2fdc: 0x00c0, 0x2fdd: 0x00c0, + 0x2fde: 0x00c0, 0x2fdf: 0x00c0, 0x2fe0: 0x00c0, 0x2fe1: 0x00c0, 0x2fe2: 0x00c0, 0x2fe3: 0x00c0, + 0x2fe4: 0x00c0, 0x2fe5: 0x00c0, 0x2fe6: 0x00c0, 0x2fe8: 0x00c0, 0x2fe9: 0x00c0, + 0x2fea: 0x00c0, 0x2feb: 0x00c0, 0x2fec: 0x00c0, 0x2fed: 0x00c0, 0x2fee: 0x00c0, 0x2fef: 0x00c0, + 0x2ff0: 0x00c0, 0x2ff1: 0x00c0, 0x2ff2: 0x00c0, 0x2ff3: 0x00c0, 0x2ff4: 0x00c0, 0x2ff5: 0x00c0, + 0x2ff6: 0x00c0, 0x2ff7: 0x00c0, 0x2ff8: 0x00c0, 0x2ff9: 0x00c0, 0x2ffa: 0x00c0, + 0x2ffc: 0x00c0, 0x2ffd: 0x00c0, 0x2fff: 0x00c0, + // Block 0xc0, offset 0x3000 + 0x3000: 0x00c0, 0x3001: 0x00c0, 0x3002: 0x00c0, 0x3003: 0x00c0, 0x3004: 0x00c0, 0x3005: 0x00c0, + 0x3006: 0x00c0, 0x3007: 0x00c0, 0x3008: 0x00c0, 0x3009: 0x00c0, 0x300a: 0x00c0, 0x300b: 0x00c0, + 0x300c: 0x00c0, 0x300d: 0x00c0, 0x3010: 0x00c0, 0x3011: 0x00c0, + 0x3012: 0x00c0, 0x3013: 0x00c0, 0x3014: 0x00c0, 0x3015: 0x00c0, 0x3016: 0x00c0, 0x3017: 0x00c0, + 0x3018: 0x00c0, 0x3019: 0x00c0, 0x301a: 0x00c0, 0x301b: 0x00c0, 0x301c: 0x00c0, 0x301d: 0x00c0, + // Block 0xc1, offset 0x3040 + 0x3040: 0x00c0, 0x3041: 0x00c0, 0x3042: 0x00c0, 0x3043: 0x00c0, 0x3044: 0x00c0, 0x3045: 0x00c0, + 0x3046: 0x00c0, 0x3047: 0x00c0, 0x3048: 0x00c0, 0x3049: 0x00c0, 0x304a: 0x00c0, 0x304b: 0x00c0, + 0x304c: 0x00c0, 0x304d: 0x00c0, 0x304e: 0x00c0, 0x304f: 0x00c0, 0x3050: 0x00c0, 0x3051: 0x00c0, + 0x3052: 0x00c0, 0x3053: 0x00c0, 0x3054: 0x00c0, 0x3055: 0x00c0, 0x3056: 0x00c0, 0x3057: 0x00c0, + 0x3058: 0x00c0, 0x3059: 0x00c0, 0x305a: 0x00c0, 0x305b: 0x00c0, 0x305c: 0x00c0, 0x305d: 0x00c0, + 0x305e: 0x00c0, 0x305f: 0x00c0, 0x3060: 0x00c0, 0x3061: 0x00c0, 0x3062: 0x00c0, 0x3063: 0x00c0, + 0x3064: 0x00c0, 0x3065: 0x00c0, 0x3066: 0x00c0, 0x3067: 0x00c0, 0x3068: 0x00c0, 0x3069: 0x00c0, + 0x306a: 0x00c0, 0x306b: 0x00c0, 0x306c: 0x00c0, 0x306d: 0x00c0, 0x306e: 0x00c0, 0x306f: 0x00c0, + 0x3070: 0x00c0, 0x3071: 0x00c0, 0x3072: 0x00c0, 0x3073: 0x00c0, 0x3074: 0x00c0, 0x3075: 0x00c0, + 0x3076: 0x00c0, 0x3077: 0x00c0, 0x3078: 0x00c0, 0x3079: 0x00c0, 0x307a: 0x00c0, + // Block 0xc2, offset 0x3080 + 0x3080: 0x0080, 0x3081: 0x0080, 0x3082: 0x0080, + 0x3087: 0x0080, 0x3088: 0x0080, 0x3089: 0x0080, 0x308a: 0x0080, 0x308b: 0x0080, + 0x308c: 0x0080, 0x308d: 0x0080, 0x308e: 0x0080, 0x308f: 0x0080, 0x3090: 0x0080, 0x3091: 0x0080, + 0x3092: 0x0080, 0x3093: 0x0080, 0x3094: 0x0080, 0x3095: 0x0080, 0x3096: 0x0080, 0x3097: 0x0080, + 0x3098: 0x0080, 0x3099: 0x0080, 0x309a: 0x0080, 0x309b: 0x0080, 0x309c: 0x0080, 0x309d: 0x0080, + 0x309e: 0x0080, 0x309f: 0x0080, 0x30a0: 0x0080, 0x30a1: 0x0080, 0x30a2: 0x0080, 0x30a3: 0x0080, + 0x30a4: 0x0080, 0x30a5: 0x0080, 0x30a6: 0x0080, 0x30a7: 0x0080, 0x30a8: 0x0080, 0x30a9: 0x0080, + 0x30aa: 0x0080, 0x30ab: 0x0080, 0x30ac: 0x0080, 0x30ad: 0x0080, 0x30ae: 0x0080, 0x30af: 0x0080, + 0x30b0: 0x0080, 0x30b1: 0x0080, 0x30b2: 0x0080, 0x30b3: 0x0080, + 0x30b7: 0x0080, 0x30b8: 0x0080, 0x30b9: 0x0080, 0x30ba: 0x0080, 0x30bb: 0x0080, + 0x30bc: 0x0080, 0x30bd: 0x0080, 0x30be: 0x0080, 0x30bf: 0x0080, + // Block 0xc3, offset 0x30c0 + 0x30c0: 0x0088, 0x30c1: 0x0088, 0x30c2: 0x0088, 0x30c3: 0x0088, 0x30c4: 0x0088, 0x30c5: 0x0088, + 0x30c6: 0x0088, 0x30c7: 0x0088, 0x30c8: 0x0088, 0x30c9: 0x0088, 0x30ca: 0x0088, 0x30cb: 0x0088, + 0x30cc: 0x0088, 0x30cd: 0x0088, 0x30ce: 0x0088, 0x30cf: 0x0088, 0x30d0: 0x0088, 0x30d1: 0x0088, + 0x30d2: 0x0088, 0x30d3: 0x0088, 0x30d4: 0x0088, 0x30d5: 0x0088, 0x30d6: 0x0088, 0x30d7: 0x0088, + 0x30d8: 0x0088, 0x30d9: 0x0088, 0x30da: 0x0088, 0x30db: 0x0088, 0x30dc: 0x0088, 0x30dd: 0x0088, + 0x30de: 0x0088, 0x30df: 0x0088, 0x30e0: 0x0088, 0x30e1: 0x0088, 0x30e2: 0x0088, 0x30e3: 0x0088, + 0x30e4: 0x0088, 0x30e5: 0x0088, 0x30e6: 0x0088, 0x30e7: 0x0088, 0x30e8: 0x0088, 0x30e9: 0x0088, + 0x30ea: 0x0088, 0x30eb: 0x0088, 0x30ec: 0x0088, 0x30ed: 0x0088, 0x30ee: 0x0088, 0x30ef: 0x0088, + 0x30f0: 0x0088, 0x30f1: 0x0088, 0x30f2: 0x0088, 0x30f3: 0x0088, 0x30f4: 0x0088, 0x30f5: 0x0088, + 0x30f6: 0x0088, 0x30f7: 0x0088, 0x30f8: 0x0088, 0x30f9: 0x0088, 0x30fa: 0x0088, 0x30fb: 0x0088, + 0x30fc: 0x0088, 0x30fd: 0x0088, 0x30fe: 0x0088, 0x30ff: 0x0088, + // Block 0xc4, offset 0x3100 + 0x3100: 0x0088, 0x3101: 0x0088, 0x3102: 0x0088, 0x3103: 0x0088, 0x3104: 0x0088, 0x3105: 0x0088, + 0x3106: 0x0088, 0x3107: 0x0088, 0x3108: 0x0088, 0x3109: 0x0088, 0x310a: 0x0088, 0x310b: 0x0088, + 0x310c: 0x0088, 0x310d: 0x0088, 0x310e: 0x0088, 0x3110: 0x0080, 0x3111: 0x0080, + 0x3112: 0x0080, 0x3113: 0x0080, 0x3114: 0x0080, 0x3115: 0x0080, 0x3116: 0x0080, 0x3117: 0x0080, + 0x3118: 0x0080, 0x3119: 0x0080, 0x311a: 0x0080, 0x311b: 0x0080, + 0x3120: 0x0088, + // Block 0xc5, offset 0x3140 + 0x3150: 0x0080, 0x3151: 0x0080, + 0x3152: 0x0080, 0x3153: 0x0080, 0x3154: 0x0080, 0x3155: 0x0080, 0x3156: 0x0080, 0x3157: 0x0080, + 0x3158: 0x0080, 0x3159: 0x0080, 0x315a: 0x0080, 0x315b: 0x0080, 0x315c: 0x0080, 0x315d: 0x0080, + 0x315e: 0x0080, 0x315f: 0x0080, 0x3160: 0x0080, 0x3161: 0x0080, 0x3162: 0x0080, 0x3163: 0x0080, + 0x3164: 0x0080, 0x3165: 0x0080, 0x3166: 0x0080, 0x3167: 0x0080, 0x3168: 0x0080, 0x3169: 0x0080, + 0x316a: 0x0080, 0x316b: 0x0080, 0x316c: 0x0080, 0x316d: 0x0080, 0x316e: 0x0080, 0x316f: 0x0080, + 0x3170: 0x0080, 0x3171: 0x0080, 0x3172: 0x0080, 0x3173: 0x0080, 0x3174: 0x0080, 0x3175: 0x0080, + 0x3176: 0x0080, 0x3177: 0x0080, 0x3178: 0x0080, 0x3179: 0x0080, 0x317a: 0x0080, 0x317b: 0x0080, + 0x317c: 0x0080, 0x317d: 0x00c3, + // Block 0xc6, offset 0x3180 + 0x3180: 0x00c0, 0x3181: 0x00c0, 0x3182: 0x00c0, 0x3183: 0x00c0, 0x3184: 0x00c0, 0x3185: 0x00c0, + 0x3186: 0x00c0, 0x3187: 0x00c0, 0x3188: 0x00c0, 0x3189: 0x00c0, 0x318a: 0x00c0, 0x318b: 0x00c0, + 0x318c: 0x00c0, 0x318d: 0x00c0, 0x318e: 0x00c0, 0x318f: 0x00c0, 0x3190: 0x00c0, 0x3191: 0x00c0, + 0x3192: 0x00c0, 0x3193: 0x00c0, 0x3194: 0x00c0, 0x3195: 0x00c0, 0x3196: 0x00c0, 0x3197: 0x00c0, + 0x3198: 0x00c0, 0x3199: 0x00c0, 0x319a: 0x00c0, 0x319b: 0x00c0, 0x319c: 0x00c0, + 0x31a0: 0x00c0, 0x31a1: 0x00c0, 0x31a2: 0x00c0, 0x31a3: 0x00c0, + 0x31a4: 0x00c0, 0x31a5: 0x00c0, 0x31a6: 0x00c0, 0x31a7: 0x00c0, 0x31a8: 0x00c0, 0x31a9: 0x00c0, + 0x31aa: 0x00c0, 0x31ab: 0x00c0, 0x31ac: 0x00c0, 0x31ad: 0x00c0, 0x31ae: 0x00c0, 0x31af: 0x00c0, + 0x31b0: 0x00c0, 0x31b1: 0x00c0, 0x31b2: 0x00c0, 0x31b3: 0x00c0, 0x31b4: 0x00c0, 0x31b5: 0x00c0, + 0x31b6: 0x00c0, 0x31b7: 0x00c0, 0x31b8: 0x00c0, 0x31b9: 0x00c0, 0x31ba: 0x00c0, 0x31bb: 0x00c0, + 0x31bc: 0x00c0, 0x31bd: 0x00c0, 0x31be: 0x00c0, 0x31bf: 0x00c0, + // Block 0xc7, offset 0x31c0 + 0x31c0: 0x00c0, 0x31c1: 0x00c0, 0x31c2: 0x00c0, 0x31c3: 0x00c0, 0x31c4: 0x00c0, 0x31c5: 0x00c0, + 0x31c6: 0x00c0, 0x31c7: 0x00c0, 0x31c8: 0x00c0, 0x31c9: 0x00c0, 0x31ca: 0x00c0, 0x31cb: 0x00c0, + 0x31cc: 0x00c0, 0x31cd: 0x00c0, 0x31ce: 0x00c0, 0x31cf: 0x00c0, 0x31d0: 0x00c0, + 0x31e0: 0x00c3, 0x31e1: 0x0080, 0x31e2: 0x0080, 0x31e3: 0x0080, + 0x31e4: 0x0080, 0x31e5: 0x0080, 0x31e6: 0x0080, 0x31e7: 0x0080, 0x31e8: 0x0080, 0x31e9: 0x0080, + 0x31ea: 0x0080, 0x31eb: 0x0080, 0x31ec: 0x0080, 0x31ed: 0x0080, 0x31ee: 0x0080, 0x31ef: 0x0080, + 0x31f0: 0x0080, 0x31f1: 0x0080, 0x31f2: 0x0080, 0x31f3: 0x0080, 0x31f4: 0x0080, 0x31f5: 0x0080, + 0x31f6: 0x0080, 0x31f7: 0x0080, 0x31f8: 0x0080, 0x31f9: 0x0080, 0x31fa: 0x0080, 0x31fb: 0x0080, + // Block 0xc8, offset 0x3200 + 0x3200: 0x00c0, 0x3201: 0x00c0, 0x3202: 0x00c0, 0x3203: 0x00c0, 0x3204: 0x00c0, 0x3205: 0x00c0, + 0x3206: 0x00c0, 0x3207: 0x00c0, 0x3208: 0x00c0, 0x3209: 0x00c0, 0x320a: 0x00c0, 0x320b: 0x00c0, + 0x320c: 0x00c0, 0x320d: 0x00c0, 0x320e: 0x00c0, 0x320f: 0x00c0, 0x3210: 0x00c0, 0x3211: 0x00c0, + 0x3212: 0x00c0, 0x3213: 0x00c0, 0x3214: 0x00c0, 0x3215: 0x00c0, 0x3216: 0x00c0, 0x3217: 0x00c0, + 0x3218: 0x00c0, 0x3219: 0x00c0, 0x321a: 0x00c0, 0x321b: 0x00c0, 0x321c: 0x00c0, 0x321d: 0x00c0, + 0x321e: 0x00c0, 0x321f: 0x00c0, 0x3220: 0x0080, 0x3221: 0x0080, 0x3222: 0x0080, 0x3223: 0x0080, + 0x3230: 0x00c0, 0x3231: 0x00c0, 0x3232: 0x00c0, 0x3233: 0x00c0, 0x3234: 0x00c0, 0x3235: 0x00c0, + 0x3236: 0x00c0, 0x3237: 0x00c0, 0x3238: 0x00c0, 0x3239: 0x00c0, 0x323a: 0x00c0, 0x323b: 0x00c0, + 0x323c: 0x00c0, 0x323d: 0x00c0, 0x323e: 0x00c0, 0x323f: 0x00c0, + // Block 0xc9, offset 0x3240 + 0x3240: 0x00c0, 0x3241: 0x0080, 0x3242: 0x00c0, 0x3243: 0x00c0, 0x3244: 0x00c0, 0x3245: 0x00c0, + 0x3246: 0x00c0, 0x3247: 0x00c0, 0x3248: 0x00c0, 0x3249: 0x00c0, 0x324a: 0x0080, + 0x3250: 0x00c0, 0x3251: 0x00c0, + 0x3252: 0x00c0, 0x3253: 0x00c0, 0x3254: 0x00c0, 0x3255: 0x00c0, 0x3256: 0x00c0, 0x3257: 0x00c0, + 0x3258: 0x00c0, 0x3259: 0x00c0, 0x325a: 0x00c0, 0x325b: 0x00c0, 0x325c: 0x00c0, 0x325d: 0x00c0, + 0x325e: 0x00c0, 0x325f: 0x00c0, 0x3260: 0x00c0, 0x3261: 0x00c0, 0x3262: 0x00c0, 0x3263: 0x00c0, + 0x3264: 0x00c0, 0x3265: 0x00c0, 0x3266: 0x00c0, 0x3267: 0x00c0, 0x3268: 0x00c0, 0x3269: 0x00c0, + 0x326a: 0x00c0, 0x326b: 0x00c0, 0x326c: 0x00c0, 0x326d: 0x00c0, 0x326e: 0x00c0, 0x326f: 0x00c0, + 0x3270: 0x00c0, 0x3271: 0x00c0, 0x3272: 0x00c0, 0x3273: 0x00c0, 0x3274: 0x00c0, 0x3275: 0x00c0, + 0x3276: 0x00c3, 0x3277: 0x00c3, 0x3278: 0x00c3, 0x3279: 0x00c3, 0x327a: 0x00c3, + // Block 0xca, offset 0x3280 + 0x3280: 0x00c0, 0x3281: 0x00c0, 0x3282: 0x00c0, 0x3283: 0x00c0, 0x3284: 0x00c0, 0x3285: 0x00c0, + 0x3286: 0x00c0, 0x3287: 0x00c0, 0x3288: 0x00c0, 0x3289: 0x00c0, 0x328a: 0x00c0, 0x328b: 0x00c0, + 0x328c: 0x00c0, 0x328d: 0x00c0, 0x328e: 0x00c0, 0x328f: 0x00c0, 0x3290: 0x00c0, 0x3291: 0x00c0, + 0x3292: 0x00c0, 0x3293: 0x00c0, 0x3294: 0x00c0, 0x3295: 0x00c0, 0x3296: 0x00c0, 0x3297: 0x00c0, + 0x3298: 0x00c0, 0x3299: 0x00c0, 0x329a: 0x00c0, 0x329b: 0x00c0, 0x329c: 0x00c0, 0x329d: 0x00c0, + 0x329f: 0x0080, 0x32a0: 0x00c0, 0x32a1: 0x00c0, 0x32a2: 0x00c0, 0x32a3: 0x00c0, + 0x32a4: 0x00c0, 0x32a5: 0x00c0, 0x32a6: 0x00c0, 0x32a7: 0x00c0, 0x32a8: 0x00c0, 0x32a9: 0x00c0, + 0x32aa: 0x00c0, 0x32ab: 0x00c0, 0x32ac: 0x00c0, 0x32ad: 0x00c0, 0x32ae: 0x00c0, 0x32af: 0x00c0, + 0x32b0: 0x00c0, 0x32b1: 0x00c0, 0x32b2: 0x00c0, 0x32b3: 0x00c0, 0x32b4: 0x00c0, 0x32b5: 0x00c0, + 0x32b6: 0x00c0, 0x32b7: 0x00c0, 0x32b8: 0x00c0, 0x32b9: 0x00c0, 0x32ba: 0x00c0, 0x32bb: 0x00c0, + 0x32bc: 0x00c0, 0x32bd: 0x00c0, 0x32be: 0x00c0, 0x32bf: 0x00c0, + // Block 0xcb, offset 0x32c0 + 0x32c0: 0x00c0, 0x32c1: 0x00c0, 0x32c2: 0x00c0, 0x32c3: 0x00c0, + 0x32c8: 0x00c0, 0x32c9: 0x00c0, 0x32ca: 0x00c0, 0x32cb: 0x00c0, + 0x32cc: 0x00c0, 0x32cd: 0x00c0, 0x32ce: 0x00c0, 0x32cf: 0x00c0, 0x32d0: 0x0080, 0x32d1: 0x0080, + 0x32d2: 0x0080, 0x32d3: 0x0080, 0x32d4: 0x0080, 0x32d5: 0x0080, + // Block 0xcc, offset 0x3300 + 0x3300: 0x00c0, 0x3301: 0x00c0, 0x3302: 0x00c0, 0x3303: 0x00c0, 0x3304: 0x00c0, 0x3305: 0x00c0, + 0x3306: 0x00c0, 0x3307: 0x00c0, 0x3308: 0x00c0, 0x3309: 0x00c0, 0x330a: 0x00c0, 0x330b: 0x00c0, + 0x330c: 0x00c0, 0x330d: 0x00c0, 0x330e: 0x00c0, 0x330f: 0x00c0, 0x3310: 0x00c0, 0x3311: 0x00c0, + 0x3312: 0x00c0, 0x3313: 0x00c0, 0x3314: 0x00c0, 0x3315: 0x00c0, 0x3316: 0x00c0, 0x3317: 0x00c0, + 0x3318: 0x00c0, 0x3319: 0x00c0, 0x331a: 0x00c0, 0x331b: 0x00c0, 0x331c: 0x00c0, 0x331d: 0x00c0, + 0x3320: 0x00c0, 0x3321: 0x00c0, 0x3322: 0x00c0, 0x3323: 0x00c0, + 0x3324: 0x00c0, 0x3325: 0x00c0, 0x3326: 0x00c0, 0x3327: 0x00c0, 0x3328: 0x00c0, 0x3329: 0x00c0, + 0x3330: 0x00c0, 0x3331: 0x00c0, 0x3332: 0x00c0, 0x3333: 0x00c0, 0x3334: 0x00c0, 0x3335: 0x00c0, + 0x3336: 0x00c0, 0x3337: 0x00c0, 0x3338: 0x00c0, 0x3339: 0x00c0, 0x333a: 0x00c0, 0x333b: 0x00c0, + 0x333c: 0x00c0, 0x333d: 0x00c0, 0x333e: 0x00c0, 0x333f: 0x00c0, + // Block 0xcd, offset 0x3340 + 0x3340: 0x00c0, 0x3341: 0x00c0, 0x3342: 0x00c0, 0x3343: 0x00c0, 0x3344: 0x00c0, 0x3345: 0x00c0, + 0x3346: 0x00c0, 0x3347: 0x00c0, 0x3348: 0x00c0, 0x3349: 0x00c0, 0x334a: 0x00c0, 0x334b: 0x00c0, + 0x334c: 0x00c0, 0x334d: 0x00c0, 0x334e: 0x00c0, 0x334f: 0x00c0, 0x3350: 0x00c0, 0x3351: 0x00c0, + 0x3352: 0x00c0, 0x3353: 0x00c0, + 0x3358: 0x00c0, 0x3359: 0x00c0, 0x335a: 0x00c0, 0x335b: 0x00c0, 0x335c: 0x00c0, 0x335d: 0x00c0, + 0x335e: 0x00c0, 0x335f: 0x00c0, 0x3360: 0x00c0, 0x3361: 0x00c0, 0x3362: 0x00c0, 0x3363: 0x00c0, + 0x3364: 0x00c0, 0x3365: 0x00c0, 0x3366: 0x00c0, 0x3367: 0x00c0, 0x3368: 0x00c0, 0x3369: 0x00c0, + 0x336a: 0x00c0, 0x336b: 0x00c0, 0x336c: 0x00c0, 0x336d: 0x00c0, 0x336e: 0x00c0, 0x336f: 0x00c0, + 0x3370: 0x00c0, 0x3371: 0x00c0, 0x3372: 0x00c0, 0x3373: 0x00c0, 0x3374: 0x00c0, 0x3375: 0x00c0, + 0x3376: 0x00c0, 0x3377: 0x00c0, 0x3378: 0x00c0, 0x3379: 0x00c0, 0x337a: 0x00c0, 0x337b: 0x00c0, + // Block 0xce, offset 0x3380 + 0x3380: 0x00c0, 0x3381: 0x00c0, 0x3382: 0x00c0, 0x3383: 0x00c0, 0x3384: 0x00c0, 0x3385: 0x00c0, + 0x3386: 0x00c0, 0x3387: 0x00c0, 0x3388: 0x00c0, 0x3389: 0x00c0, 0x338a: 0x00c0, 0x338b: 0x00c0, + 0x338c: 0x00c0, 0x338d: 0x00c0, 0x338e: 0x00c0, 0x338f: 0x00c0, 0x3390: 0x00c0, 0x3391: 0x00c0, + 0x3392: 0x00c0, 0x3393: 0x00c0, 0x3394: 0x00c0, 0x3395: 0x00c0, 0x3396: 0x00c0, 0x3397: 0x00c0, + 0x3398: 0x00c0, 0x3399: 0x00c0, 0x339a: 0x00c0, 0x339b: 0x00c0, 0x339c: 0x00c0, 0x339d: 0x00c0, + 0x339e: 0x00c0, 0x339f: 0x00c0, 0x33a0: 0x00c0, 0x33a1: 0x00c0, 0x33a2: 0x00c0, 0x33a3: 0x00c0, + 0x33a4: 0x00c0, 0x33a5: 0x00c0, 0x33a6: 0x00c0, 0x33a7: 0x00c0, + 0x33b0: 0x00c0, 0x33b1: 0x00c0, 0x33b2: 0x00c0, 0x33b3: 0x00c0, 0x33b4: 0x00c0, 0x33b5: 0x00c0, + 0x33b6: 0x00c0, 0x33b7: 0x00c0, 0x33b8: 0x00c0, 0x33b9: 0x00c0, 0x33ba: 0x00c0, 0x33bb: 0x00c0, + 0x33bc: 0x00c0, 0x33bd: 0x00c0, 0x33be: 0x00c0, 0x33bf: 0x00c0, + // Block 0xcf, offset 0x33c0 + 0x33c0: 0x00c0, 0x33c1: 0x00c0, 0x33c2: 0x00c0, 0x33c3: 0x00c0, 0x33c4: 0x00c0, 0x33c5: 0x00c0, + 0x33c6: 0x00c0, 0x33c7: 0x00c0, 0x33c8: 0x00c0, 0x33c9: 0x00c0, 0x33ca: 0x00c0, 0x33cb: 0x00c0, + 0x33cc: 0x00c0, 0x33cd: 0x00c0, 0x33ce: 0x00c0, 0x33cf: 0x00c0, 0x33d0: 0x00c0, 0x33d1: 0x00c0, + 0x33d2: 0x00c0, 0x33d3: 0x00c0, 0x33d4: 0x00c0, 0x33d5: 0x00c0, 0x33d6: 0x00c0, 0x33d7: 0x00c0, + 0x33d8: 0x00c0, 0x33d9: 0x00c0, 0x33da: 0x00c0, 0x33db: 0x00c0, 0x33dc: 0x00c0, 0x33dd: 0x00c0, + 0x33de: 0x00c0, 0x33df: 0x00c0, 0x33e0: 0x00c0, 0x33e1: 0x00c0, 0x33e2: 0x00c0, 0x33e3: 0x00c0, + 0x33ef: 0x0080, + // Block 0xd0, offset 0x3400 + 0x3400: 0x00c0, 0x3401: 0x00c0, 0x3402: 0x00c0, 0x3403: 0x00c0, 0x3404: 0x00c0, 0x3405: 0x00c0, + 0x3406: 0x00c0, 0x3407: 0x00c0, 0x3408: 0x00c0, 0x3409: 0x00c0, 0x340a: 0x00c0, 0x340b: 0x00c0, + 0x340c: 0x00c0, 0x340d: 0x00c0, 0x340e: 0x00c0, 0x340f: 0x00c0, 0x3410: 0x00c0, 0x3411: 0x00c0, + 0x3412: 0x00c0, 0x3413: 0x00c0, 0x3414: 0x00c0, 0x3415: 0x00c0, 0x3416: 0x00c0, 0x3417: 0x00c0, + 0x3418: 0x00c0, 0x3419: 0x00c0, 0x341a: 0x00c0, 0x341b: 0x00c0, 0x341c: 0x00c0, 0x341d: 0x00c0, + 0x341e: 0x00c0, 0x341f: 0x00c0, 0x3420: 0x00c0, 0x3421: 0x00c0, 0x3422: 0x00c0, 0x3423: 0x00c0, + 0x3424: 0x00c0, 0x3425: 0x00c0, 0x3426: 0x00c0, 0x3427: 0x00c0, 0x3428: 0x00c0, 0x3429: 0x00c0, + 0x342a: 0x00c0, 0x342b: 0x00c0, 0x342c: 0x00c0, 0x342d: 0x00c0, 0x342e: 0x00c0, 0x342f: 0x00c0, + 0x3430: 0x00c0, 0x3431: 0x00c0, 0x3432: 0x00c0, 0x3433: 0x00c0, 0x3434: 0x00c0, 0x3435: 0x00c0, + 0x3436: 0x00c0, + // Block 0xd1, offset 0x3440 + 0x3440: 0x00c0, 0x3441: 0x00c0, 0x3442: 0x00c0, 0x3443: 0x00c0, 0x3444: 0x00c0, 0x3445: 0x00c0, + 0x3446: 0x00c0, 0x3447: 0x00c0, 0x3448: 0x00c0, 0x3449: 0x00c0, 0x344a: 0x00c0, 0x344b: 0x00c0, + 0x344c: 0x00c0, 0x344d: 0x00c0, 0x344e: 0x00c0, 0x344f: 0x00c0, 0x3450: 0x00c0, 0x3451: 0x00c0, + 0x3452: 0x00c0, 0x3453: 0x00c0, 0x3454: 0x00c0, 0x3455: 0x00c0, + 0x3460: 0x00c0, 0x3461: 0x00c0, 0x3462: 0x00c0, 0x3463: 0x00c0, + 0x3464: 0x00c0, 0x3465: 0x00c0, 0x3466: 0x00c0, 0x3467: 0x00c0, + // Block 0xd2, offset 0x3480 + 0x3480: 0x00c0, 0x3481: 0x00c0, 0x3482: 0x00c0, 0x3483: 0x00c0, 0x3484: 0x00c0, 0x3485: 0x00c0, + 0x3488: 0x00c0, 0x348a: 0x00c0, 0x348b: 0x00c0, + 0x348c: 0x00c0, 0x348d: 0x00c0, 0x348e: 0x00c0, 0x348f: 0x00c0, 0x3490: 0x00c0, 0x3491: 0x00c0, + 0x3492: 0x00c0, 0x3493: 0x00c0, 0x3494: 0x00c0, 0x3495: 0x00c0, 0x3496: 0x00c0, 0x3497: 0x00c0, + 0x3498: 0x00c0, 0x3499: 0x00c0, 0x349a: 0x00c0, 0x349b: 0x00c0, 0x349c: 0x00c0, 0x349d: 0x00c0, + 0x349e: 0x00c0, 0x349f: 0x00c0, 0x34a0: 0x00c0, 0x34a1: 0x00c0, 0x34a2: 0x00c0, 0x34a3: 0x00c0, + 0x34a4: 0x00c0, 0x34a5: 0x00c0, 0x34a6: 0x00c0, 0x34a7: 0x00c0, 0x34a8: 0x00c0, 0x34a9: 0x00c0, + 0x34aa: 0x00c0, 0x34ab: 0x00c0, 0x34ac: 0x00c0, 0x34ad: 0x00c0, 0x34ae: 0x00c0, 0x34af: 0x00c0, + 0x34b0: 0x00c0, 0x34b1: 0x00c0, 0x34b2: 0x00c0, 0x34b3: 0x00c0, 0x34b4: 0x00c0, 0x34b5: 0x00c0, + 0x34b7: 0x00c0, 0x34b8: 0x00c0, + 0x34bc: 0x00c0, 0x34bf: 0x00c0, + // Block 0xd3, offset 0x34c0 + 0x34c0: 0x00c0, 0x34c1: 0x00c0, 0x34c2: 0x00c0, 0x34c3: 0x00c0, 0x34c4: 0x00c0, 0x34c5: 0x00c0, + 0x34c6: 0x00c0, 0x34c7: 0x00c0, 0x34c8: 0x00c0, 0x34c9: 0x00c0, 0x34ca: 0x00c0, 0x34cb: 0x00c0, + 0x34cc: 0x00c0, 0x34cd: 0x00c0, 0x34ce: 0x00c0, 0x34cf: 0x00c0, 0x34d0: 0x00c0, 0x34d1: 0x00c0, + 0x34d2: 0x00c0, 0x34d3: 0x00c0, 0x34d4: 0x00c0, 0x34d5: 0x00c0, 0x34d7: 0x0080, + 0x34d8: 0x0080, 0x34d9: 0x0080, 0x34da: 0x0080, 0x34db: 0x0080, 0x34dc: 0x0080, 0x34dd: 0x0080, + 0x34de: 0x0080, 0x34df: 0x0080, 0x34e0: 0x00c0, 0x34e1: 0x00c0, 0x34e2: 0x00c0, 0x34e3: 0x00c0, + 0x34e4: 0x00c0, 0x34e5: 0x00c0, 0x34e6: 0x00c0, 0x34e7: 0x00c0, 0x34e8: 0x00c0, 0x34e9: 0x00c0, + 0x34ea: 0x00c0, 0x34eb: 0x00c0, 0x34ec: 0x00c0, 0x34ed: 0x00c0, 0x34ee: 0x00c0, 0x34ef: 0x00c0, + 0x34f0: 0x00c0, 0x34f1: 0x00c0, 0x34f2: 0x00c0, 0x34f3: 0x00c0, 0x34f4: 0x00c0, 0x34f5: 0x00c0, + 0x34f6: 0x00c0, 0x34f7: 0x0080, 0x34f8: 0x0080, 0x34f9: 0x0080, 0x34fa: 0x0080, 0x34fb: 0x0080, + 0x34fc: 0x0080, 0x34fd: 0x0080, 0x34fe: 0x0080, 0x34ff: 0x0080, + // Block 0xd4, offset 0x3500 + 0x3500: 0x00c0, 0x3501: 0x00c0, 0x3502: 0x00c0, 0x3503: 0x00c0, 0x3504: 0x00c0, 0x3505: 0x00c0, + 0x3506: 0x00c0, 0x3507: 0x00c0, 0x3508: 0x00c0, 0x3509: 0x00c0, 0x350a: 0x00c0, 0x350b: 0x00c0, + 0x350c: 0x00c0, 0x350d: 0x00c0, 0x350e: 0x00c0, 0x350f: 0x00c0, 0x3510: 0x00c0, 0x3511: 0x00c0, + 0x3512: 0x00c0, 0x3513: 0x00c0, 0x3514: 0x00c0, 0x3515: 0x00c0, 0x3516: 0x00c0, 0x3517: 0x00c0, + 0x3518: 0x00c0, 0x3519: 0x00c0, 0x351a: 0x00c0, 0x351b: 0x00c0, 0x351c: 0x00c0, 0x351d: 0x00c0, + 0x351e: 0x00c0, + 0x3527: 0x0080, 0x3528: 0x0080, 0x3529: 0x0080, + 0x352a: 0x0080, 0x352b: 0x0080, 0x352c: 0x0080, 0x352d: 0x0080, 0x352e: 0x0080, 0x352f: 0x0080, + // Block 0xd5, offset 0x3540 + 0x3560: 0x00c0, 0x3561: 0x00c0, 0x3562: 0x00c0, 0x3563: 0x00c0, + 0x3564: 0x00c0, 0x3565: 0x00c0, 0x3566: 0x00c0, 0x3567: 0x00c0, 0x3568: 0x00c0, 0x3569: 0x00c0, + 0x356a: 0x00c0, 0x356b: 0x00c0, 0x356c: 0x00c0, 0x356d: 0x00c0, 0x356e: 0x00c0, 0x356f: 0x00c0, + 0x3570: 0x00c0, 0x3571: 0x00c0, 0x3572: 0x00c0, 0x3574: 0x00c0, 0x3575: 0x00c0, + 0x357b: 0x0080, + 0x357c: 0x0080, 0x357d: 0x0080, 0x357e: 0x0080, 0x357f: 0x0080, + // Block 0xd6, offset 0x3580 + 0x3580: 0x00c0, 0x3581: 0x00c0, 0x3582: 0x00c0, 0x3583: 0x00c0, 0x3584: 0x00c0, 0x3585: 0x00c0, + 0x3586: 0x00c0, 0x3587: 0x00c0, 0x3588: 0x00c0, 0x3589: 0x00c0, 0x358a: 0x00c0, 0x358b: 0x00c0, + 0x358c: 0x00c0, 0x358d: 0x00c0, 0x358e: 0x00c0, 0x358f: 0x00c0, 0x3590: 0x00c0, 0x3591: 0x00c0, + 0x3592: 0x00c0, 0x3593: 0x00c0, 0x3594: 0x00c0, 0x3595: 0x00c0, 0x3596: 0x0080, 0x3597: 0x0080, + 0x3598: 0x0080, 0x3599: 0x0080, 0x359a: 0x0080, 0x359b: 0x0080, + 0x359f: 0x0080, 0x35a0: 0x00c0, 0x35a1: 0x00c0, 0x35a2: 0x00c0, 0x35a3: 0x00c0, + 0x35a4: 0x00c0, 0x35a5: 0x00c0, 0x35a6: 0x00c0, 0x35a7: 0x00c0, 0x35a8: 0x00c0, 0x35a9: 0x00c0, + 0x35aa: 0x00c0, 0x35ab: 0x00c0, 0x35ac: 0x00c0, 0x35ad: 0x00c0, 0x35ae: 0x00c0, 0x35af: 0x00c0, + 0x35b0: 0x00c0, 0x35b1: 0x00c0, 0x35b2: 0x00c0, 0x35b3: 0x00c0, 0x35b4: 0x00c0, 0x35b5: 0x00c0, + 0x35b6: 0x00c0, 0x35b7: 0x00c0, 0x35b8: 0x00c0, 0x35b9: 0x00c0, + 0x35bf: 0x0080, + // Block 0xd7, offset 0x35c0 + 0x35c0: 0x00c0, 0x35c1: 0x00c0, 0x35c2: 0x00c0, 0x35c3: 0x00c0, 0x35c4: 0x00c0, 0x35c5: 0x00c0, + 0x35c6: 0x00c0, 0x35c7: 0x00c0, 0x35c8: 0x00c0, 0x35c9: 0x00c0, 0x35ca: 0x00c0, 0x35cb: 0x00c0, + 0x35cc: 0x00c0, 0x35cd: 0x00c0, 0x35ce: 0x00c0, 0x35cf: 0x00c0, 0x35d0: 0x00c0, 0x35d1: 0x00c0, + 0x35d2: 0x00c0, 0x35d3: 0x00c0, 0x35d4: 0x00c0, 0x35d5: 0x00c0, 0x35d6: 0x00c0, 0x35d7: 0x00c0, + 0x35d8: 0x00c0, 0x35d9: 0x00c0, 0x35da: 0x00c0, 0x35db: 0x00c0, 0x35dc: 0x00c0, 0x35dd: 0x00c0, + 0x35de: 0x00c0, 0x35df: 0x00c0, 0x35e0: 0x00c0, 0x35e1: 0x00c0, 0x35e2: 0x00c0, 0x35e3: 0x00c0, + 0x35e4: 0x00c0, 0x35e5: 0x00c0, 0x35e6: 0x00c0, 0x35e7: 0x00c0, 0x35e8: 0x00c0, 0x35e9: 0x00c0, + 0x35ea: 0x00c0, 0x35eb: 0x00c0, 0x35ec: 0x00c0, 0x35ed: 0x00c0, 0x35ee: 0x00c0, 0x35ef: 0x00c0, + 0x35f0: 0x00c0, 0x35f1: 0x00c0, 0x35f2: 0x00c0, 0x35f3: 0x00c0, 0x35f4: 0x00c0, 0x35f5: 0x00c0, + 0x35f6: 0x00c0, 0x35f7: 0x00c0, + 0x35fc: 0x0080, 0x35fd: 0x0080, 0x35fe: 0x00c0, 0x35ff: 0x00c0, + // Block 0xd8, offset 0x3600 + 0x3600: 0x00c0, 0x3601: 0x00c3, 0x3602: 0x00c3, 0x3603: 0x00c3, 0x3605: 0x00c3, + 0x3606: 0x00c3, + 0x360c: 0x00c3, 0x360d: 0x00c3, 0x360e: 0x00c3, 0x360f: 0x00c3, 0x3610: 0x00c0, 0x3611: 0x00c0, + 0x3612: 0x00c0, 0x3613: 0x00c0, 0x3615: 0x00c0, 0x3616: 0x00c0, 0x3617: 0x00c0, + 0x3619: 0x00c0, 0x361a: 0x00c0, 0x361b: 0x00c0, 0x361c: 0x00c0, 0x361d: 0x00c0, + 0x361e: 0x00c0, 0x361f: 0x00c0, 0x3620: 0x00c0, 0x3621: 0x00c0, 0x3622: 0x00c0, 0x3623: 0x00c0, + 0x3624: 0x00c0, 0x3625: 0x00c0, 0x3626: 0x00c0, 0x3627: 0x00c0, 0x3628: 0x00c0, 0x3629: 0x00c0, + 0x362a: 0x00c0, 0x362b: 0x00c0, 0x362c: 0x00c0, 0x362d: 0x00c0, 0x362e: 0x00c0, 0x362f: 0x00c0, + 0x3630: 0x00c0, 0x3631: 0x00c0, 0x3632: 0x00c0, 0x3633: 0x00c0, + 0x3638: 0x00c3, 0x3639: 0x00c3, 0x363a: 0x00c3, + 0x363f: 0x00c6, + // Block 0xd9, offset 0x3640 + 0x3640: 0x0080, 0x3641: 0x0080, 0x3642: 0x0080, 0x3643: 0x0080, 0x3644: 0x0080, 0x3645: 0x0080, + 0x3646: 0x0080, 0x3647: 0x0080, + 0x3650: 0x0080, 0x3651: 0x0080, + 0x3652: 0x0080, 0x3653: 0x0080, 0x3654: 0x0080, 0x3655: 0x0080, 0x3656: 0x0080, 0x3657: 0x0080, + 0x3658: 0x0080, + 0x3660: 0x00c0, 0x3661: 0x00c0, 0x3662: 0x00c0, 0x3663: 0x00c0, + 0x3664: 0x00c0, 0x3665: 0x00c0, 0x3666: 0x00c0, 0x3667: 0x00c0, 0x3668: 0x00c0, 0x3669: 0x00c0, + 0x366a: 0x00c0, 0x366b: 0x00c0, 0x366c: 0x00c0, 0x366d: 0x00c0, 0x366e: 0x00c0, 0x366f: 0x00c0, + 0x3670: 0x00c0, 0x3671: 0x00c0, 0x3672: 0x00c0, 0x3673: 0x00c0, 0x3674: 0x00c0, 0x3675: 0x00c0, + 0x3676: 0x00c0, 0x3677: 0x00c0, 0x3678: 0x00c0, 0x3679: 0x00c0, 0x367a: 0x00c0, 0x367b: 0x00c0, + 0x367c: 0x00c0, 0x367d: 0x0080, 0x367e: 0x0080, 0x367f: 0x0080, + // Block 0xda, offset 0x3680 + 0x3680: 0x00c0, 0x3681: 0x00c0, 0x3682: 0x00c0, 0x3683: 0x00c0, 0x3684: 0x00c0, 0x3685: 0x00c0, + 0x3686: 0x00c0, 0x3687: 0x00c0, 0x3688: 0x00c0, 0x3689: 0x00c0, 0x368a: 0x00c0, 0x368b: 0x00c0, + 0x368c: 0x00c0, 0x368d: 0x00c0, 0x368e: 0x00c0, 0x368f: 0x00c0, 0x3690: 0x00c0, 0x3691: 0x00c0, + 0x3692: 0x00c0, 0x3693: 0x00c0, 0x3694: 0x00c0, 0x3695: 0x00c0, 0x3696: 0x00c0, 0x3697: 0x00c0, + 0x3698: 0x00c0, 0x3699: 0x00c0, 0x369a: 0x00c0, 0x369b: 0x00c0, 0x369c: 0x00c0, 0x369d: 0x0080, + 0x369e: 0x0080, 0x369f: 0x0080, + // Block 0xdb, offset 0x36c0 + 0x36c0: 0x00c2, 0x36c1: 0x00c2, 0x36c2: 0x00c2, 0x36c3: 0x00c2, 0x36c4: 0x00c2, 0x36c5: 0x00c4, + 0x36c6: 0x00c0, 0x36c7: 0x00c4, 0x36c8: 0x0080, 0x36c9: 0x00c4, 0x36ca: 0x00c4, 0x36cb: 0x00c0, + 0x36cc: 0x00c0, 0x36cd: 0x00c1, 0x36ce: 0x00c4, 0x36cf: 0x00c4, 0x36d0: 0x00c4, 0x36d1: 0x00c4, + 0x36d2: 0x00c4, 0x36d3: 0x00c2, 0x36d4: 0x00c2, 0x36d5: 0x00c2, 0x36d6: 0x00c2, 0x36d7: 0x00c1, + 0x36d8: 0x00c2, 0x36d9: 0x00c2, 0x36da: 0x00c2, 0x36db: 0x00c2, 0x36dc: 0x00c2, 0x36dd: 0x00c4, + 0x36de: 0x00c2, 0x36df: 0x00c2, 0x36e0: 0x00c2, 0x36e1: 0x00c4, 0x36e2: 0x00c0, 0x36e3: 0x00c0, + 0x36e4: 0x00c4, 0x36e5: 0x00c3, 0x36e6: 0x00c3, + 0x36eb: 0x0082, 0x36ec: 0x0082, 0x36ed: 0x0082, 0x36ee: 0x0082, 0x36ef: 0x0084, + 0x36f0: 0x0080, 0x36f1: 0x0080, 0x36f2: 0x0080, 0x36f3: 0x0080, 0x36f4: 0x0080, 0x36f5: 0x0080, + 0x36f6: 0x0080, + // Block 0xdc, offset 0x3700 + 0x3700: 0x00c0, 0x3701: 0x00c0, 0x3702: 0x00c0, 0x3703: 0x00c0, 0x3704: 0x00c0, 0x3705: 0x00c0, + 0x3706: 0x00c0, 0x3707: 0x00c0, 0x3708: 0x00c0, 0x3709: 0x00c0, 0x370a: 0x00c0, 0x370b: 0x00c0, + 0x370c: 0x00c0, 0x370d: 0x00c0, 0x370e: 0x00c0, 0x370f: 0x00c0, 0x3710: 0x00c0, 0x3711: 0x00c0, + 0x3712: 0x00c0, 0x3713: 0x00c0, 0x3714: 0x00c0, 0x3715: 0x00c0, 0x3716: 0x00c0, 0x3717: 0x00c0, + 0x3718: 0x00c0, 0x3719: 0x00c0, 0x371a: 0x00c0, 0x371b: 0x00c0, 0x371c: 0x00c0, 0x371d: 0x00c0, + 0x371e: 0x00c0, 0x371f: 0x00c0, 0x3720: 0x00c0, 0x3721: 0x00c0, 0x3722: 0x00c0, 0x3723: 0x00c0, + 0x3724: 0x00c0, 0x3725: 0x00c0, 0x3726: 0x00c0, 0x3727: 0x00c0, 0x3728: 0x00c0, 0x3729: 0x00c0, + 0x372a: 0x00c0, 0x372b: 0x00c0, 0x372c: 0x00c0, 0x372d: 0x00c0, 0x372e: 0x00c0, 0x372f: 0x00c0, + 0x3730: 0x00c0, 0x3731: 0x00c0, 0x3732: 0x00c0, 0x3733: 0x00c0, 0x3734: 0x00c0, 0x3735: 0x00c0, + 0x3739: 0x0080, 0x373a: 0x0080, 0x373b: 0x0080, + 0x373c: 0x0080, 0x373d: 0x0080, 0x373e: 0x0080, 0x373f: 0x0080, + // Block 0xdd, offset 0x3740 + 0x3740: 0x00c0, 0x3741: 0x00c0, 0x3742: 0x00c0, 0x3743: 0x00c0, 0x3744: 0x00c0, 0x3745: 0x00c0, + 0x3746: 0x00c0, 0x3747: 0x00c0, 0x3748: 0x00c0, 0x3749: 0x00c0, 0x374a: 0x00c0, 0x374b: 0x00c0, + 0x374c: 0x00c0, 0x374d: 0x00c0, 0x374e: 0x00c0, 0x374f: 0x00c0, 0x3750: 0x00c0, 0x3751: 0x00c0, + 0x3752: 0x00c0, 0x3753: 0x00c0, 0x3754: 0x00c0, 0x3755: 0x00c0, + 0x3758: 0x0080, 0x3759: 0x0080, 0x375a: 0x0080, 0x375b: 0x0080, 0x375c: 0x0080, 0x375d: 0x0080, + 0x375e: 0x0080, 0x375f: 0x0080, 0x3760: 0x00c0, 0x3761: 0x00c0, 0x3762: 0x00c0, 0x3763: 0x00c0, + 0x3764: 0x00c0, 0x3765: 0x00c0, 0x3766: 0x00c0, 0x3767: 0x00c0, 0x3768: 0x00c0, 0x3769: 0x00c0, + 0x376a: 0x00c0, 0x376b: 0x00c0, 0x376c: 0x00c0, 0x376d: 0x00c0, 0x376e: 0x00c0, 0x376f: 0x00c0, + 0x3770: 0x00c0, 0x3771: 0x00c0, 0x3772: 0x00c0, + 0x3778: 0x0080, 0x3779: 0x0080, 0x377a: 0x0080, 0x377b: 0x0080, + 0x377c: 0x0080, 0x377d: 0x0080, 0x377e: 0x0080, 0x377f: 0x0080, + // Block 0xde, offset 0x3780 + 0x3780: 0x00c2, 0x3781: 0x00c4, 0x3782: 0x00c2, 0x3783: 0x00c4, 0x3784: 0x00c4, 0x3785: 0x00c4, + 0x3786: 0x00c2, 0x3787: 0x00c2, 0x3788: 0x00c2, 0x3789: 0x00c4, 0x378a: 0x00c2, 0x378b: 0x00c2, + 0x378c: 0x00c4, 0x378d: 0x00c2, 0x378e: 0x00c4, 0x378f: 0x00c4, 0x3790: 0x00c2, 0x3791: 0x00c4, + 0x3799: 0x0080, 0x379a: 0x0080, 0x379b: 0x0080, 0x379c: 0x0080, + 0x37a9: 0x0084, + 0x37aa: 0x0084, 0x37ab: 0x0084, 0x37ac: 0x0084, 0x37ad: 0x0082, 0x37ae: 0x0082, 0x37af: 0x0080, + // Block 0xdf, offset 0x37c0 + 0x37c0: 0x00c0, 0x37c1: 0x00c0, 0x37c2: 0x00c0, 0x37c3: 0x00c0, 0x37c4: 0x00c0, 0x37c5: 0x00c0, + 0x37c6: 0x00c0, 0x37c7: 0x00c0, 0x37c8: 0x00c0, 0x37c9: 0x00c0, 0x37ca: 0x00c0, 0x37cb: 0x00c0, + 0x37cc: 0x00c0, 0x37cd: 0x00c0, 0x37ce: 0x00c0, 0x37cf: 0x00c0, 0x37d0: 0x00c0, 0x37d1: 0x00c0, + 0x37d2: 0x00c0, 0x37d3: 0x00c0, 0x37d4: 0x00c0, 0x37d5: 0x00c0, 0x37d6: 0x00c0, 0x37d7: 0x00c0, + 0x37d8: 0x00c0, 0x37d9: 0x00c0, 0x37da: 0x00c0, 0x37db: 0x00c0, 0x37dc: 0x00c0, 0x37dd: 0x00c0, + 0x37de: 0x00c0, 0x37df: 0x00c0, 0x37e0: 0x00c0, 0x37e1: 0x00c0, 0x37e2: 0x00c0, 0x37e3: 0x00c0, + 0x37e4: 0x00c0, 0x37e5: 0x00c0, 0x37e6: 0x00c0, 0x37e7: 0x00c0, 0x37e8: 0x00c0, 0x37e9: 0x00c0, + 0x37ea: 0x00c0, 0x37eb: 0x00c0, 0x37ec: 0x00c0, 0x37ed: 0x00c0, 0x37ee: 0x00c0, 0x37ef: 0x00c0, + 0x37f0: 0x00c0, 0x37f1: 0x00c0, 0x37f2: 0x00c0, + // Block 0xe0, offset 0x3800 + 0x3800: 0x00c0, 0x3801: 0x00c0, 0x3802: 0x00c0, 0x3803: 0x00c0, 0x3804: 0x00c0, 0x3805: 0x00c0, + 0x3806: 0x00c0, 0x3807: 0x00c0, 0x3808: 0x00c0, 0x3809: 0x00c0, 0x380a: 0x00c0, 0x380b: 0x00c0, + 0x380c: 0x00c0, 0x380d: 0x00c0, 0x380e: 0x00c0, 0x380f: 0x00c0, 0x3810: 0x00c0, 0x3811: 0x00c0, + 0x3812: 0x00c0, 0x3813: 0x00c0, 0x3814: 0x00c0, 0x3815: 0x00c0, 0x3816: 0x00c0, 0x3817: 0x00c0, + 0x3818: 0x00c0, 0x3819: 0x00c0, 0x381a: 0x00c0, 0x381b: 0x00c0, 0x381c: 0x00c0, 0x381d: 0x00c0, + 0x381e: 0x00c0, 0x381f: 0x00c0, 0x3820: 0x00c0, 0x3821: 0x00c0, 0x3822: 0x00c0, 0x3823: 0x00c0, + 0x3824: 0x00c0, 0x3825: 0x00c0, 0x3826: 0x00c0, 0x3827: 0x00c0, 0x3828: 0x00c0, 0x3829: 0x00c0, + 0x382a: 0x00c0, 0x382b: 0x00c0, 0x382c: 0x00c0, 0x382d: 0x00c0, 0x382e: 0x00c0, 0x382f: 0x00c0, + 0x3830: 0x00c0, 0x3831: 0x00c0, 0x3832: 0x00c0, + 0x383a: 0x0080, 0x383b: 0x0080, + 0x383c: 0x0080, 0x383d: 0x0080, 0x383e: 0x0080, 0x383f: 0x0080, + // Block 0xe1, offset 0x3840 + 0x3860: 0x0080, 0x3861: 0x0080, 0x3862: 0x0080, 0x3863: 0x0080, + 0x3864: 0x0080, 0x3865: 0x0080, 0x3866: 0x0080, 0x3867: 0x0080, 0x3868: 0x0080, 0x3869: 0x0080, + 0x386a: 0x0080, 0x386b: 0x0080, 0x386c: 0x0080, 0x386d: 0x0080, 0x386e: 0x0080, 0x386f: 0x0080, + 0x3870: 0x0080, 0x3871: 0x0080, 0x3872: 0x0080, 0x3873: 0x0080, 0x3874: 0x0080, 0x3875: 0x0080, + 0x3876: 0x0080, 0x3877: 0x0080, 0x3878: 0x0080, 0x3879: 0x0080, 0x387a: 0x0080, 0x387b: 0x0080, + 0x387c: 0x0080, 0x387d: 0x0080, 0x387e: 0x0080, + // Block 0xe2, offset 0x3880 + 0x3880: 0x00c0, 0x3881: 0x00c3, 0x3882: 0x00c0, 0x3883: 0x00c0, 0x3884: 0x00c0, 0x3885: 0x00c0, + 0x3886: 0x00c0, 0x3887: 0x00c0, 0x3888: 0x00c0, 0x3889: 0x00c0, 0x388a: 0x00c0, 0x388b: 0x00c0, + 0x388c: 0x00c0, 0x388d: 0x00c0, 0x388e: 0x00c0, 0x388f: 0x00c0, 0x3890: 0x00c0, 0x3891: 0x00c0, + 0x3892: 0x00c0, 0x3893: 0x00c0, 0x3894: 0x00c0, 0x3895: 0x00c0, 0x3896: 0x00c0, 0x3897: 0x00c0, + 0x3898: 0x00c0, 0x3899: 0x00c0, 0x389a: 0x00c0, 0x389b: 0x00c0, 0x389c: 0x00c0, 0x389d: 0x00c0, + 0x389e: 0x00c0, 0x389f: 0x00c0, 0x38a0: 0x00c0, 0x38a1: 0x00c0, 0x38a2: 0x00c0, 0x38a3: 0x00c0, + 0x38a4: 0x00c0, 0x38a5: 0x00c0, 0x38a6: 0x00c0, 0x38a7: 0x00c0, 0x38a8: 0x00c0, 0x38a9: 0x00c0, + 0x38aa: 0x00c0, 0x38ab: 0x00c0, 0x38ac: 0x00c0, 0x38ad: 0x00c0, 0x38ae: 0x00c0, 0x38af: 0x00c0, + 0x38b0: 0x00c0, 0x38b1: 0x00c0, 0x38b2: 0x00c0, 0x38b3: 0x00c0, 0x38b4: 0x00c0, 0x38b5: 0x00c0, + 0x38b6: 0x00c0, 0x38b7: 0x00c0, 0x38b8: 0x00c3, 0x38b9: 0x00c3, 0x38ba: 0x00c3, 0x38bb: 0x00c3, + 0x38bc: 0x00c3, 0x38bd: 0x00c3, 0x38be: 0x00c3, 0x38bf: 0x00c3, + // Block 0xe3, offset 0x38c0 + 0x38c0: 0x00c3, 0x38c1: 0x00c3, 0x38c2: 0x00c3, 0x38c3: 0x00c3, 0x38c4: 0x00c3, 0x38c5: 0x00c3, + 0x38c6: 0x00c6, 0x38c7: 0x0080, 0x38c8: 0x0080, 0x38c9: 0x0080, 0x38ca: 0x0080, 0x38cb: 0x0080, + 0x38cc: 0x0080, 0x38cd: 0x0080, + 0x38d2: 0x0080, 0x38d3: 0x0080, 0x38d4: 0x0080, 0x38d5: 0x0080, 0x38d6: 0x0080, 0x38d7: 0x0080, + 0x38d8: 0x0080, 0x38d9: 0x0080, 0x38da: 0x0080, 0x38db: 0x0080, 0x38dc: 0x0080, 0x38dd: 0x0080, + 0x38de: 0x0080, 0x38df: 0x0080, 0x38e0: 0x0080, 0x38e1: 0x0080, 0x38e2: 0x0080, 0x38e3: 0x0080, + 0x38e4: 0x0080, 0x38e5: 0x0080, 0x38e6: 0x00c0, 0x38e7: 0x00c0, 0x38e8: 0x00c0, 0x38e9: 0x00c0, + 0x38ea: 0x00c0, 0x38eb: 0x00c0, 0x38ec: 0x00c0, 0x38ed: 0x00c0, 0x38ee: 0x00c0, 0x38ef: 0x00c0, + 0x38ff: 0x00c6, + // Block 0xe4, offset 0x3900 + 0x3900: 0x00c3, 0x3901: 0x00c3, 0x3902: 0x00c0, 0x3903: 0x00c0, 0x3904: 0x00c0, 0x3905: 0x00c0, + 0x3906: 0x00c0, 0x3907: 0x00c0, 0x3908: 0x00c0, 0x3909: 0x00c0, 0x390a: 0x00c0, 0x390b: 0x00c0, + 0x390c: 0x00c0, 0x390d: 0x00c0, 0x390e: 0x00c0, 0x390f: 0x00c0, 0x3910: 0x00c0, 0x3911: 0x00c0, + 0x3912: 0x00c0, 0x3913: 0x00c0, 0x3914: 0x00c0, 0x3915: 0x00c0, 0x3916: 0x00c0, 0x3917: 0x00c0, + 0x3918: 0x00c0, 0x3919: 0x00c0, 0x391a: 0x00c0, 0x391b: 0x00c0, 0x391c: 0x00c0, 0x391d: 0x00c0, + 0x391e: 0x00c0, 0x391f: 0x00c0, 0x3920: 0x00c0, 0x3921: 0x00c0, 0x3922: 0x00c0, 0x3923: 0x00c0, + 0x3924: 0x00c0, 0x3925: 0x00c0, 0x3926: 0x00c0, 0x3927: 0x00c0, 0x3928: 0x00c0, 0x3929: 0x00c0, + 0x392a: 0x00c0, 0x392b: 0x00c0, 0x392c: 0x00c0, 0x392d: 0x00c0, 0x392e: 0x00c0, 0x392f: 0x00c0, + 0x3930: 0x00c0, 0x3931: 0x00c0, 0x3932: 0x00c0, 0x3933: 0x00c3, 0x3934: 0x00c3, 0x3935: 0x00c3, + 0x3936: 0x00c3, 0x3937: 0x00c0, 0x3938: 0x00c0, 0x3939: 0x00c6, 0x393a: 0x00c3, 0x393b: 0x0080, + 0x393c: 0x0080, 0x393d: 0x0040, 0x393e: 0x0080, 0x393f: 0x0080, + // Block 0xe5, offset 0x3940 + 0x3940: 0x0080, 0x3941: 0x0080, + 0x3950: 0x00c0, 0x3951: 0x00c0, + 0x3952: 0x00c0, 0x3953: 0x00c0, 0x3954: 0x00c0, 0x3955: 0x00c0, 0x3956: 0x00c0, 0x3957: 0x00c0, + 0x3958: 0x00c0, 0x3959: 0x00c0, 0x395a: 0x00c0, 0x395b: 0x00c0, 0x395c: 0x00c0, 0x395d: 0x00c0, + 0x395e: 0x00c0, 0x395f: 0x00c0, 0x3960: 0x00c0, 0x3961: 0x00c0, 0x3962: 0x00c0, 0x3963: 0x00c0, + 0x3964: 0x00c0, 0x3965: 0x00c0, 0x3966: 0x00c0, 0x3967: 0x00c0, 0x3968: 0x00c0, + 0x3970: 0x00c0, 0x3971: 0x00c0, 0x3972: 0x00c0, 0x3973: 0x00c0, 0x3974: 0x00c0, 0x3975: 0x00c0, + 0x3976: 0x00c0, 0x3977: 0x00c0, 0x3978: 0x00c0, 0x3979: 0x00c0, + // Block 0xe6, offset 0x3980 + 0x3980: 0x00c3, 0x3981: 0x00c3, 0x3982: 0x00c3, 0x3983: 0x00c0, 0x3984: 0x00c0, 0x3985: 0x00c0, + 0x3986: 0x00c0, 0x3987: 0x00c0, 0x3988: 0x00c0, 0x3989: 0x00c0, 0x398a: 0x00c0, 0x398b: 0x00c0, + 0x398c: 0x00c0, 0x398d: 0x00c0, 0x398e: 0x00c0, 0x398f: 0x00c0, 0x3990: 0x00c0, 0x3991: 0x00c0, + 0x3992: 0x00c0, 0x3993: 0x00c0, 0x3994: 0x00c0, 0x3995: 0x00c0, 0x3996: 0x00c0, 0x3997: 0x00c0, + 0x3998: 0x00c0, 0x3999: 0x00c0, 0x399a: 0x00c0, 0x399b: 0x00c0, 0x399c: 0x00c0, 0x399d: 0x00c0, + 0x399e: 0x00c0, 0x399f: 0x00c0, 0x39a0: 0x00c0, 0x39a1: 0x00c0, 0x39a2: 0x00c0, 0x39a3: 0x00c0, + 0x39a4: 0x00c0, 0x39a5: 0x00c0, 0x39a6: 0x00c0, 0x39a7: 0x00c3, 0x39a8: 0x00c3, 0x39a9: 0x00c3, + 0x39aa: 0x00c3, 0x39ab: 0x00c3, 0x39ac: 0x00c0, 0x39ad: 0x00c3, 0x39ae: 0x00c3, 0x39af: 0x00c3, + 0x39b0: 0x00c3, 0x39b1: 0x00c3, 0x39b2: 0x00c3, 0x39b3: 0x00c6, 0x39b4: 0x00c6, + 0x39b6: 0x00c0, 0x39b7: 0x00c0, 0x39b8: 0x00c0, 0x39b9: 0x00c0, 0x39ba: 0x00c0, 0x39bb: 0x00c0, + 0x39bc: 0x00c0, 0x39bd: 0x00c0, 0x39be: 0x00c0, 0x39bf: 0x00c0, + // Block 0xe7, offset 0x39c0 + 0x39c0: 0x0080, 0x39c1: 0x0080, 0x39c2: 0x0080, 0x39c3: 0x0080, + 0x39d0: 0x00c0, 0x39d1: 0x00c0, + 0x39d2: 0x00c0, 0x39d3: 0x00c0, 0x39d4: 0x00c0, 0x39d5: 0x00c0, 0x39d6: 0x00c0, 0x39d7: 0x00c0, + 0x39d8: 0x00c0, 0x39d9: 0x00c0, 0x39da: 0x00c0, 0x39db: 0x00c0, 0x39dc: 0x00c0, 0x39dd: 0x00c0, + 0x39de: 0x00c0, 0x39df: 0x00c0, 0x39e0: 0x00c0, 0x39e1: 0x00c0, 0x39e2: 0x00c0, 0x39e3: 0x00c0, + 0x39e4: 0x00c0, 0x39e5: 0x00c0, 0x39e6: 0x00c0, 0x39e7: 0x00c0, 0x39e8: 0x00c0, 0x39e9: 0x00c0, + 0x39ea: 0x00c0, 0x39eb: 0x00c0, 0x39ec: 0x00c0, 0x39ed: 0x00c0, 0x39ee: 0x00c0, 0x39ef: 0x00c0, + 0x39f0: 0x00c0, 0x39f1: 0x00c0, 0x39f2: 0x00c0, 0x39f3: 0x00c3, 0x39f4: 0x0080, 0x39f5: 0x0080, + 0x39f6: 0x00c0, + // Block 0xe8, offset 0x3a00 + 0x3a00: 0x00c3, 0x3a01: 0x00c3, 0x3a02: 0x00c0, 0x3a03: 0x00c0, 0x3a04: 0x00c0, 0x3a05: 0x00c0, + 0x3a06: 0x00c0, 0x3a07: 0x00c0, 0x3a08: 0x00c0, 0x3a09: 0x00c0, 0x3a0a: 0x00c0, 0x3a0b: 0x00c0, + 0x3a0c: 0x00c0, 0x3a0d: 0x00c0, 0x3a0e: 0x00c0, 0x3a0f: 0x00c0, 0x3a10: 0x00c0, 0x3a11: 0x00c0, + 0x3a12: 0x00c0, 0x3a13: 0x00c0, 0x3a14: 0x00c0, 0x3a15: 0x00c0, 0x3a16: 0x00c0, 0x3a17: 0x00c0, + 0x3a18: 0x00c0, 0x3a19: 0x00c0, 0x3a1a: 0x00c0, 0x3a1b: 0x00c0, 0x3a1c: 0x00c0, 0x3a1d: 0x00c0, + 0x3a1e: 0x00c0, 0x3a1f: 0x00c0, 0x3a20: 0x00c0, 0x3a21: 0x00c0, 0x3a22: 0x00c0, 0x3a23: 0x00c0, + 0x3a24: 0x00c0, 0x3a25: 0x00c0, 0x3a26: 0x00c0, 0x3a27: 0x00c0, 0x3a28: 0x00c0, 0x3a29: 0x00c0, + 0x3a2a: 0x00c0, 0x3a2b: 0x00c0, 0x3a2c: 0x00c0, 0x3a2d: 0x00c0, 0x3a2e: 0x00c0, 0x3a2f: 0x00c0, + 0x3a30: 0x00c0, 0x3a31: 0x00c0, 0x3a32: 0x00c0, 0x3a33: 0x00c0, 0x3a34: 0x00c0, 0x3a35: 0x00c0, + 0x3a36: 0x00c3, 0x3a37: 0x00c3, 0x3a38: 0x00c3, 0x3a39: 0x00c3, 0x3a3a: 0x00c3, 0x3a3b: 0x00c3, + 0x3a3c: 0x00c3, 0x3a3d: 0x00c3, 0x3a3e: 0x00c3, 0x3a3f: 0x00c0, + // Block 0xe9, offset 0x3a40 + 0x3a40: 0x00c5, 0x3a41: 0x00c0, 0x3a42: 0x00c0, 0x3a43: 0x00c0, 0x3a44: 0x00c0, 0x3a45: 0x0080, + 0x3a46: 0x0080, 0x3a47: 0x0080, 0x3a48: 0x0080, 0x3a49: 0x0080, 0x3a4a: 0x00c3, 0x3a4b: 0x00c3, + 0x3a4c: 0x00c3, 0x3a4d: 0x0080, 0x3a50: 0x00c0, 0x3a51: 0x00c0, + 0x3a52: 0x00c0, 0x3a53: 0x00c0, 0x3a54: 0x00c0, 0x3a55: 0x00c0, 0x3a56: 0x00c0, 0x3a57: 0x00c0, + 0x3a58: 0x00c0, 0x3a59: 0x00c0, 0x3a5a: 0x00c0, 0x3a5b: 0x0080, 0x3a5c: 0x00c0, 0x3a5d: 0x0080, + 0x3a5e: 0x0080, 0x3a5f: 0x0080, 0x3a61: 0x0080, 0x3a62: 0x0080, 0x3a63: 0x0080, + 0x3a64: 0x0080, 0x3a65: 0x0080, 0x3a66: 0x0080, 0x3a67: 0x0080, 0x3a68: 0x0080, 0x3a69: 0x0080, + 0x3a6a: 0x0080, 0x3a6b: 0x0080, 0x3a6c: 0x0080, 0x3a6d: 0x0080, 0x3a6e: 0x0080, 0x3a6f: 0x0080, + 0x3a70: 0x0080, 0x3a71: 0x0080, 0x3a72: 0x0080, 0x3a73: 0x0080, 0x3a74: 0x0080, + // Block 0xea, offset 0x3a80 + 0x3a80: 0x00c0, 0x3a81: 0x00c0, 0x3a82: 0x00c0, 0x3a83: 0x00c0, 0x3a84: 0x00c0, 0x3a85: 0x00c0, + 0x3a86: 0x00c0, 0x3a87: 0x00c0, 0x3a88: 0x00c0, 0x3a89: 0x00c0, 0x3a8a: 0x00c0, 0x3a8b: 0x00c0, + 0x3a8c: 0x00c0, 0x3a8d: 0x00c0, 0x3a8e: 0x00c0, 0x3a8f: 0x00c0, 0x3a90: 0x00c0, 0x3a91: 0x00c0, + 0x3a93: 0x00c0, 0x3a94: 0x00c0, 0x3a95: 0x00c0, 0x3a96: 0x00c0, 0x3a97: 0x00c0, + 0x3a98: 0x00c0, 0x3a99: 0x00c0, 0x3a9a: 0x00c0, 0x3a9b: 0x00c0, 0x3a9c: 0x00c0, 0x3a9d: 0x00c0, + 0x3a9e: 0x00c0, 0x3a9f: 0x00c0, 0x3aa0: 0x00c0, 0x3aa1: 0x00c0, 0x3aa2: 0x00c0, 0x3aa3: 0x00c0, + 0x3aa4: 0x00c0, 0x3aa5: 0x00c0, 0x3aa6: 0x00c0, 0x3aa7: 0x00c0, 0x3aa8: 0x00c0, 0x3aa9: 0x00c0, + 0x3aaa: 0x00c0, 0x3aab: 0x00c0, 0x3aac: 0x00c0, 0x3aad: 0x00c0, 0x3aae: 0x00c0, 0x3aaf: 0x00c3, + 0x3ab0: 0x00c3, 0x3ab1: 0x00c3, 0x3ab2: 0x00c0, 0x3ab3: 0x00c0, 0x3ab4: 0x00c3, 0x3ab5: 0x00c5, + 0x3ab6: 0x00c3, 0x3ab7: 0x00c3, 0x3ab8: 0x0080, 0x3ab9: 0x0080, 0x3aba: 0x0080, 0x3abb: 0x0080, + 0x3abc: 0x0080, 0x3abd: 0x0080, 0x3abe: 0x00c3, + // Block 0xeb, offset 0x3ac0 + 0x3ac0: 0x00c0, 0x3ac1: 0x00c0, 0x3ac2: 0x00c0, 0x3ac3: 0x00c0, 0x3ac4: 0x00c0, 0x3ac5: 0x00c0, + 0x3ac6: 0x00c0, 0x3ac8: 0x00c0, 0x3aca: 0x00c0, 0x3acb: 0x00c0, + 0x3acc: 0x00c0, 0x3acd: 0x00c0, 0x3acf: 0x00c0, 0x3ad0: 0x00c0, 0x3ad1: 0x00c0, + 0x3ad2: 0x00c0, 0x3ad3: 0x00c0, 0x3ad4: 0x00c0, 0x3ad5: 0x00c0, 0x3ad6: 0x00c0, 0x3ad7: 0x00c0, + 0x3ad8: 0x00c0, 0x3ad9: 0x00c0, 0x3ada: 0x00c0, 0x3adb: 0x00c0, 0x3adc: 0x00c0, 0x3add: 0x00c0, + 0x3adf: 0x00c0, 0x3ae0: 0x00c0, 0x3ae1: 0x00c0, 0x3ae2: 0x00c0, 0x3ae3: 0x00c0, + 0x3ae4: 0x00c0, 0x3ae5: 0x00c0, 0x3ae6: 0x00c0, 0x3ae7: 0x00c0, 0x3ae8: 0x00c0, 0x3ae9: 0x0080, + 0x3af0: 0x00c0, 0x3af1: 0x00c0, 0x3af2: 0x00c0, 0x3af3: 0x00c0, 0x3af4: 0x00c0, 0x3af5: 0x00c0, + 0x3af6: 0x00c0, 0x3af7: 0x00c0, 0x3af8: 0x00c0, 0x3af9: 0x00c0, 0x3afa: 0x00c0, 0x3afb: 0x00c0, + 0x3afc: 0x00c0, 0x3afd: 0x00c0, 0x3afe: 0x00c0, 0x3aff: 0x00c0, + // Block 0xec, offset 0x3b00 + 0x3b00: 0x00c0, 0x3b01: 0x00c0, 0x3b02: 0x00c0, 0x3b03: 0x00c0, 0x3b04: 0x00c0, 0x3b05: 0x00c0, + 0x3b06: 0x00c0, 0x3b07: 0x00c0, 0x3b08: 0x00c0, 0x3b09: 0x00c0, 0x3b0a: 0x00c0, 0x3b0b: 0x00c0, + 0x3b0c: 0x00c0, 0x3b0d: 0x00c0, 0x3b0e: 0x00c0, 0x3b0f: 0x00c0, 0x3b10: 0x00c0, 0x3b11: 0x00c0, + 0x3b12: 0x00c0, 0x3b13: 0x00c0, 0x3b14: 0x00c0, 0x3b15: 0x00c0, 0x3b16: 0x00c0, 0x3b17: 0x00c0, + 0x3b18: 0x00c0, 0x3b19: 0x00c0, 0x3b1a: 0x00c0, 0x3b1b: 0x00c0, 0x3b1c: 0x00c0, 0x3b1d: 0x00c0, + 0x3b1e: 0x00c0, 0x3b1f: 0x00c3, 0x3b20: 0x00c0, 0x3b21: 0x00c0, 0x3b22: 0x00c0, 0x3b23: 0x00c3, + 0x3b24: 0x00c3, 0x3b25: 0x00c3, 0x3b26: 0x00c3, 0x3b27: 0x00c3, 0x3b28: 0x00c3, 0x3b29: 0x00c3, + 0x3b2a: 0x00c6, + 0x3b30: 0x00c0, 0x3b31: 0x00c0, 0x3b32: 0x00c0, 0x3b33: 0x00c0, 0x3b34: 0x00c0, 0x3b35: 0x00c0, + 0x3b36: 0x00c0, 0x3b37: 0x00c0, 0x3b38: 0x00c0, 0x3b39: 0x00c0, + // Block 0xed, offset 0x3b40 + 0x3b40: 0x00c3, 0x3b41: 0x00c3, 0x3b42: 0x00c0, 0x3b43: 0x00c0, 0x3b45: 0x00c0, + 0x3b46: 0x00c0, 0x3b47: 0x00c0, 0x3b48: 0x00c0, 0x3b49: 0x00c0, 0x3b4a: 0x00c0, 0x3b4b: 0x00c0, + 0x3b4c: 0x00c0, 0x3b4f: 0x00c0, 0x3b50: 0x00c0, + 0x3b53: 0x00c0, 0x3b54: 0x00c0, 0x3b55: 0x00c0, 0x3b56: 0x00c0, 0x3b57: 0x00c0, + 0x3b58: 0x00c0, 0x3b59: 0x00c0, 0x3b5a: 0x00c0, 0x3b5b: 0x00c0, 0x3b5c: 0x00c0, 0x3b5d: 0x00c0, + 0x3b5e: 0x00c0, 0x3b5f: 0x00c0, 0x3b60: 0x00c0, 0x3b61: 0x00c0, 0x3b62: 0x00c0, 0x3b63: 0x00c0, + 0x3b64: 0x00c0, 0x3b65: 0x00c0, 0x3b66: 0x00c0, 0x3b67: 0x00c0, 0x3b68: 0x00c0, + 0x3b6a: 0x00c0, 0x3b6b: 0x00c0, 0x3b6c: 0x00c0, 0x3b6d: 0x00c0, 0x3b6e: 0x00c0, 0x3b6f: 0x00c0, + 0x3b70: 0x00c0, 0x3b72: 0x00c0, 0x3b73: 0x00c0, 0x3b75: 0x00c0, + 0x3b76: 0x00c0, 0x3b77: 0x00c0, 0x3b78: 0x00c0, 0x3b79: 0x00c0, + 0x3b7c: 0x00c3, 0x3b7d: 0x00c0, 0x3b7e: 0x00c0, 0x3b7f: 0x00c0, + // Block 0xee, offset 0x3b80 + 0x3b80: 0x00c3, 0x3b81: 0x00c0, 0x3b82: 0x00c0, 0x3b83: 0x00c0, 0x3b84: 0x00c0, + 0x3b87: 0x00c0, 0x3b88: 0x00c0, 0x3b8b: 0x00c0, + 0x3b8c: 0x00c0, 0x3b8d: 0x00c5, 0x3b90: 0x00c0, + 0x3b97: 0x00c0, + 0x3b9d: 0x00c0, + 0x3b9e: 0x00c0, 0x3b9f: 0x00c0, 0x3ba0: 0x00c0, 0x3ba1: 0x00c0, 0x3ba2: 0x00c0, 0x3ba3: 0x00c0, + 0x3ba6: 0x00c3, 0x3ba7: 0x00c3, 0x3ba8: 0x00c3, 0x3ba9: 0x00c3, + 0x3baa: 0x00c3, 0x3bab: 0x00c3, 0x3bac: 0x00c3, + 0x3bb0: 0x00c3, 0x3bb1: 0x00c3, 0x3bb2: 0x00c3, 0x3bb3: 0x00c3, 0x3bb4: 0x00c3, + // Block 0xef, offset 0x3bc0 + 0x3bc0: 0x00c0, 0x3bc1: 0x00c0, 0x3bc2: 0x00c0, 0x3bc3: 0x00c0, 0x3bc4: 0x00c0, 0x3bc5: 0x00c0, + 0x3bc6: 0x00c0, 0x3bc7: 0x00c0, 0x3bc8: 0x00c0, 0x3bc9: 0x00c0, 0x3bca: 0x00c0, 0x3bcb: 0x00c0, + 0x3bcc: 0x00c0, 0x3bcd: 0x00c0, 0x3bce: 0x00c0, 0x3bcf: 0x00c0, 0x3bd0: 0x00c0, 0x3bd1: 0x00c0, + 0x3bd2: 0x00c0, 0x3bd3: 0x00c0, 0x3bd4: 0x00c0, 0x3bd5: 0x00c0, 0x3bd6: 0x00c0, 0x3bd7: 0x00c0, + 0x3bd8: 0x00c0, 0x3bd9: 0x00c0, 0x3bda: 0x00c0, 0x3bdb: 0x00c0, 0x3bdc: 0x00c0, 0x3bdd: 0x00c0, + 0x3bde: 0x00c0, 0x3bdf: 0x00c0, 0x3be0: 0x00c0, 0x3be1: 0x00c0, 0x3be2: 0x00c0, 0x3be3: 0x00c0, + 0x3be4: 0x00c0, 0x3be5: 0x00c0, 0x3be6: 0x00c0, 0x3be7: 0x00c0, 0x3be8: 0x00c0, 0x3be9: 0x00c0, + 0x3bea: 0x00c0, 0x3beb: 0x00c0, 0x3bec: 0x00c0, 0x3bed: 0x00c0, 0x3bee: 0x00c0, 0x3bef: 0x00c0, + 0x3bf0: 0x00c0, 0x3bf1: 0x00c0, 0x3bf2: 0x00c0, 0x3bf3: 0x00c0, 0x3bf4: 0x00c0, 0x3bf5: 0x00c0, + 0x3bf6: 0x00c0, 0x3bf7: 0x00c0, 0x3bf8: 0x00c3, 0x3bf9: 0x00c3, 0x3bfa: 0x00c3, 0x3bfb: 0x00c3, + 0x3bfc: 0x00c3, 0x3bfd: 0x00c3, 0x3bfe: 0x00c3, 0x3bff: 0x00c3, + // Block 0xf0, offset 0x3c00 + 0x3c00: 0x00c0, 0x3c01: 0x00c0, 0x3c02: 0x00c6, 0x3c03: 0x00c3, 0x3c04: 0x00c3, 0x3c05: 0x00c0, + 0x3c06: 0x00c3, 0x3c07: 0x00c0, 0x3c08: 0x00c0, 0x3c09: 0x00c0, 0x3c0a: 0x00c0, 0x3c0b: 0x0080, + 0x3c0c: 0x0080, 0x3c0d: 0x0080, 0x3c0e: 0x0080, 0x3c0f: 0x0080, 0x3c10: 0x00c0, 0x3c11: 0x00c0, + 0x3c12: 0x00c0, 0x3c13: 0x00c0, 0x3c14: 0x00c0, 0x3c15: 0x00c0, 0x3c16: 0x00c0, 0x3c17: 0x00c0, + 0x3c18: 0x00c0, 0x3c19: 0x00c0, 0x3c1b: 0x0080, 0x3c1d: 0x0080, + // Block 0xf1, offset 0x3c40 + 0x3c40: 0x00c0, 0x3c41: 0x00c0, 0x3c42: 0x00c0, 0x3c43: 0x00c0, 0x3c44: 0x00c0, 0x3c45: 0x00c0, + 0x3c46: 0x00c0, 0x3c47: 0x00c0, 0x3c48: 0x00c0, 0x3c49: 0x00c0, 0x3c4a: 0x00c0, 0x3c4b: 0x00c0, + 0x3c4c: 0x00c0, 0x3c4d: 0x00c0, 0x3c4e: 0x00c0, 0x3c4f: 0x00c0, 0x3c50: 0x00c0, 0x3c51: 0x00c0, + 0x3c52: 0x00c0, 0x3c53: 0x00c0, 0x3c54: 0x00c0, 0x3c55: 0x00c0, 0x3c56: 0x00c0, 0x3c57: 0x00c0, + 0x3c58: 0x00c0, 0x3c59: 0x00c0, 0x3c5a: 0x00c0, 0x3c5b: 0x00c0, 0x3c5c: 0x00c0, 0x3c5d: 0x00c0, + 0x3c5e: 0x00c0, 0x3c5f: 0x00c0, 0x3c60: 0x00c0, 0x3c61: 0x00c0, 0x3c62: 0x00c0, 0x3c63: 0x00c0, + 0x3c64: 0x00c0, 0x3c65: 0x00c0, 0x3c66: 0x00c0, 0x3c67: 0x00c0, 0x3c68: 0x00c0, 0x3c69: 0x00c0, + 0x3c6a: 0x00c0, 0x3c6b: 0x00c0, 0x3c6c: 0x00c0, 0x3c6d: 0x00c0, 0x3c6e: 0x00c0, 0x3c6f: 0x00c0, + 0x3c70: 0x00c0, 0x3c71: 0x00c0, 0x3c72: 0x00c0, 0x3c73: 0x00c3, 0x3c74: 0x00c3, 0x3c75: 0x00c3, + 0x3c76: 0x00c3, 0x3c77: 0x00c3, 0x3c78: 0x00c3, 0x3c79: 0x00c0, 0x3c7a: 0x00c3, 0x3c7b: 0x00c0, + 0x3c7c: 0x00c0, 0x3c7d: 0x00c0, 0x3c7e: 0x00c0, 0x3c7f: 0x00c3, + // Block 0xf2, offset 0x3c80 + 0x3c80: 0x00c3, 0x3c81: 0x00c0, 0x3c82: 0x00c6, 0x3c83: 0x00c3, 0x3c84: 0x00c0, 0x3c85: 0x00c0, + 0x3c86: 0x0080, 0x3c87: 0x00c0, + 0x3c90: 0x00c0, 0x3c91: 0x00c0, + 0x3c92: 0x00c0, 0x3c93: 0x00c0, 0x3c94: 0x00c0, 0x3c95: 0x00c0, 0x3c96: 0x00c0, 0x3c97: 0x00c0, + 0x3c98: 0x00c0, 0x3c99: 0x00c0, + // Block 0xf3, offset 0x3cc0 + 0x3cc0: 0x00c0, 0x3cc1: 0x00c0, 0x3cc2: 0x00c0, 0x3cc3: 0x00c0, 0x3cc4: 0x00c0, 0x3cc5: 0x00c0, + 0x3cc6: 0x00c0, 0x3cc7: 0x00c0, 0x3cc8: 0x00c0, 0x3cc9: 0x00c0, 0x3cca: 0x00c0, 0x3ccb: 0x00c0, + 0x3ccc: 0x00c0, 0x3ccd: 0x00c0, 0x3cce: 0x00c0, 0x3ccf: 0x00c0, 0x3cd0: 0x00c0, 0x3cd1: 0x00c0, + 0x3cd2: 0x00c0, 0x3cd3: 0x00c0, 0x3cd4: 0x00c0, 0x3cd5: 0x00c0, 0x3cd6: 0x00c0, 0x3cd7: 0x00c0, + 0x3cd8: 0x00c0, 0x3cd9: 0x00c0, 0x3cda: 0x00c0, 0x3cdb: 0x00c0, 0x3cdc: 0x00c0, 0x3cdd: 0x00c0, + 0x3cde: 0x00c0, 0x3cdf: 0x00c0, 0x3ce0: 0x00c0, 0x3ce1: 0x00c0, 0x3ce2: 0x00c0, 0x3ce3: 0x00c0, + 0x3ce4: 0x00c0, 0x3ce5: 0x00c0, 0x3ce6: 0x00c0, 0x3ce7: 0x00c0, 0x3ce8: 0x00c0, 0x3ce9: 0x00c0, + 0x3cea: 0x00c0, 0x3ceb: 0x00c0, 0x3cec: 0x00c0, 0x3ced: 0x00c0, 0x3cee: 0x00c0, 0x3cef: 0x00c0, + 0x3cf0: 0x00c0, 0x3cf1: 0x00c0, 0x3cf2: 0x00c3, 0x3cf3: 0x00c3, 0x3cf4: 0x00c3, 0x3cf5: 0x00c3, + 0x3cf8: 0x00c0, 0x3cf9: 0x00c0, 0x3cfa: 0x00c0, 0x3cfb: 0x00c0, + 0x3cfc: 0x00c3, 0x3cfd: 0x00c3, 0x3cfe: 0x00c0, 0x3cff: 0x00c6, + // Block 0xf4, offset 0x3d00 + 0x3d00: 0x00c3, 0x3d01: 0x0080, 0x3d02: 0x0080, 0x3d03: 0x0080, 0x3d04: 0x0080, 0x3d05: 0x0080, + 0x3d06: 0x0080, 0x3d07: 0x0080, 0x3d08: 0x0080, 0x3d09: 0x0080, 0x3d0a: 0x0080, 0x3d0b: 0x0080, + 0x3d0c: 0x0080, 0x3d0d: 0x0080, 0x3d0e: 0x0080, 0x3d0f: 0x0080, 0x3d10: 0x0080, 0x3d11: 0x0080, + 0x3d12: 0x0080, 0x3d13: 0x0080, 0x3d14: 0x0080, 0x3d15: 0x0080, 0x3d16: 0x0080, 0x3d17: 0x0080, + 0x3d18: 0x00c0, 0x3d19: 0x00c0, 0x3d1a: 0x00c0, 0x3d1b: 0x00c0, 0x3d1c: 0x00c3, 0x3d1d: 0x00c3, + // Block 0xf5, offset 0x3d40 + 0x3d40: 0x00c0, 0x3d41: 0x00c0, 0x3d42: 0x00c0, 0x3d43: 0x00c0, 0x3d44: 0x00c0, 0x3d45: 0x00c0, + 0x3d46: 0x00c0, 0x3d47: 0x00c0, 0x3d48: 0x00c0, 0x3d49: 0x00c0, 0x3d4a: 0x00c0, 0x3d4b: 0x00c0, + 0x3d4c: 0x00c0, 0x3d4d: 0x00c0, 0x3d4e: 0x00c0, 0x3d4f: 0x00c0, 0x3d50: 0x00c0, 0x3d51: 0x00c0, + 0x3d52: 0x00c0, 0x3d53: 0x00c0, 0x3d54: 0x00c0, 0x3d55: 0x00c0, 0x3d56: 0x00c0, 0x3d57: 0x00c0, + 0x3d58: 0x00c0, 0x3d59: 0x00c0, 0x3d5a: 0x00c0, 0x3d5b: 0x00c0, 0x3d5c: 0x00c0, 0x3d5d: 0x00c0, + 0x3d5e: 0x00c0, 0x3d5f: 0x00c0, 0x3d60: 0x00c0, 0x3d61: 0x00c0, 0x3d62: 0x00c0, 0x3d63: 0x00c0, + 0x3d64: 0x00c0, 0x3d65: 0x00c0, 0x3d66: 0x00c0, 0x3d67: 0x00c0, 0x3d68: 0x00c0, 0x3d69: 0x00c0, + 0x3d6a: 0x00c0, 0x3d6b: 0x00c0, 0x3d6c: 0x00c0, 0x3d6d: 0x00c0, 0x3d6e: 0x00c0, 0x3d6f: 0x00c0, + 0x3d70: 0x00c0, 0x3d71: 0x00c0, 0x3d72: 0x00c0, 0x3d73: 0x00c3, 0x3d74: 0x00c3, 0x3d75: 0x00c3, + 0x3d76: 0x00c3, 0x3d77: 0x00c3, 0x3d78: 0x00c3, 0x3d79: 0x00c3, 0x3d7a: 0x00c3, 0x3d7b: 0x00c0, + 0x3d7c: 0x00c0, 0x3d7d: 0x00c3, 0x3d7e: 0x00c0, 0x3d7f: 0x00c6, + // Block 0xf6, offset 0x3d80 + 0x3d80: 0x00c3, 0x3d81: 0x0080, 0x3d82: 0x0080, 0x3d83: 0x0080, 0x3d84: 0x00c0, + 0x3d90: 0x00c0, 0x3d91: 0x00c0, + 0x3d92: 0x00c0, 0x3d93: 0x00c0, 0x3d94: 0x00c0, 0x3d95: 0x00c0, 0x3d96: 0x00c0, 0x3d97: 0x00c0, + 0x3d98: 0x00c0, 0x3d99: 0x00c0, + 0x3da0: 0x0080, 0x3da1: 0x0080, 0x3da2: 0x0080, 0x3da3: 0x0080, + 0x3da4: 0x0080, 0x3da5: 0x0080, 0x3da6: 0x0080, 0x3da7: 0x0080, 0x3da8: 0x0080, 0x3da9: 0x0080, + 0x3daa: 0x0080, 0x3dab: 0x0080, 0x3dac: 0x0080, + // Block 0xf7, offset 0x3dc0 + 0x3dc0: 0x00c0, 0x3dc1: 0x00c0, 0x3dc2: 0x00c0, 0x3dc3: 0x00c0, 0x3dc4: 0x00c0, 0x3dc5: 0x00c0, + 0x3dc6: 0x00c0, 0x3dc7: 0x00c0, 0x3dc8: 0x00c0, 0x3dc9: 0x00c0, 0x3dca: 0x00c0, 0x3dcb: 0x00c0, + 0x3dcc: 0x00c0, 0x3dcd: 0x00c0, 0x3dce: 0x00c0, 0x3dcf: 0x00c0, 0x3dd0: 0x00c0, 0x3dd1: 0x00c0, + 0x3dd2: 0x00c0, 0x3dd3: 0x00c0, 0x3dd4: 0x00c0, 0x3dd5: 0x00c0, 0x3dd6: 0x00c0, 0x3dd7: 0x00c0, + 0x3dd8: 0x00c0, 0x3dd9: 0x00c0, 0x3dda: 0x00c0, 0x3ddb: 0x00c0, 0x3ddc: 0x00c0, 0x3ddd: 0x00c0, + 0x3dde: 0x00c0, 0x3ddf: 0x00c0, 0x3de0: 0x00c0, 0x3de1: 0x00c0, 0x3de2: 0x00c0, 0x3de3: 0x00c0, + 0x3de4: 0x00c0, 0x3de5: 0x00c0, 0x3de6: 0x00c0, 0x3de7: 0x00c0, 0x3de8: 0x00c0, 0x3de9: 0x00c0, + 0x3dea: 0x00c0, 0x3deb: 0x00c3, 0x3dec: 0x00c0, 0x3ded: 0x00c3, 0x3dee: 0x00c0, 0x3def: 0x00c0, + 0x3df0: 0x00c3, 0x3df1: 0x00c3, 0x3df2: 0x00c3, 0x3df3: 0x00c3, 0x3df4: 0x00c3, 0x3df5: 0x00c3, + 0x3df6: 0x00c5, 0x3df7: 0x00c3, + // Block 0xf8, offset 0x3e00 + 0x3e00: 0x00c0, 0x3e01: 0x00c0, 0x3e02: 0x00c0, 0x3e03: 0x00c0, 0x3e04: 0x00c0, 0x3e05: 0x00c0, + 0x3e06: 0x00c0, 0x3e07: 0x00c0, 0x3e08: 0x00c0, 0x3e09: 0x00c0, + // Block 0xf9, offset 0x3e40 + 0x3e40: 0x00c0, 0x3e41: 0x00c0, 0x3e42: 0x00c0, 0x3e43: 0x00c0, 0x3e44: 0x00c0, 0x3e45: 0x00c0, + 0x3e46: 0x00c0, 0x3e47: 0x00c0, 0x3e48: 0x00c0, 0x3e49: 0x00c0, 0x3e4a: 0x00c0, 0x3e4b: 0x00c0, + 0x3e4c: 0x00c0, 0x3e4d: 0x00c0, 0x3e4e: 0x00c0, 0x3e4f: 0x00c0, 0x3e50: 0x00c0, 0x3e51: 0x00c0, + 0x3e52: 0x00c0, 0x3e53: 0x00c0, 0x3e54: 0x00c0, 0x3e55: 0x00c0, 0x3e56: 0x00c0, 0x3e57: 0x00c0, + 0x3e58: 0x00c0, 0x3e59: 0x00c0, 0x3e5d: 0x00c3, + 0x3e5e: 0x00c3, 0x3e5f: 0x00c3, 0x3e60: 0x00c0, 0x3e61: 0x00c0, 0x3e62: 0x00c3, 0x3e63: 0x00c3, + 0x3e64: 0x00c3, 0x3e65: 0x00c3, 0x3e66: 0x00c0, 0x3e67: 0x00c3, 0x3e68: 0x00c3, 0x3e69: 0x00c3, + 0x3e6a: 0x00c3, 0x3e6b: 0x00c6, + 0x3e70: 0x00c0, 0x3e71: 0x00c0, 0x3e72: 0x00c0, 0x3e73: 0x00c0, 0x3e74: 0x00c0, 0x3e75: 0x00c0, + 0x3e76: 0x00c0, 0x3e77: 0x00c0, 0x3e78: 0x00c0, 0x3e79: 0x00c0, 0x3e7a: 0x0080, 0x3e7b: 0x0080, + 0x3e7c: 0x0080, 0x3e7d: 0x0080, 0x3e7e: 0x0080, 0x3e7f: 0x0080, + // Block 0xfa, offset 0x3e80 + 0x3ea0: 0x00c0, 0x3ea1: 0x00c0, 0x3ea2: 0x00c0, 0x3ea3: 0x00c0, + 0x3ea4: 0x00c0, 0x3ea5: 0x00c0, 0x3ea6: 0x00c0, 0x3ea7: 0x00c0, 0x3ea8: 0x00c0, 0x3ea9: 0x00c0, + 0x3eaa: 0x00c0, 0x3eab: 0x00c0, 0x3eac: 0x00c0, 0x3ead: 0x00c0, 0x3eae: 0x00c0, 0x3eaf: 0x00c0, + 0x3eb0: 0x00c0, 0x3eb1: 0x00c0, 0x3eb2: 0x00c0, 0x3eb3: 0x00c0, 0x3eb4: 0x00c0, 0x3eb5: 0x00c0, + 0x3eb6: 0x00c0, 0x3eb7: 0x00c0, 0x3eb8: 0x00c0, 0x3eb9: 0x00c0, 0x3eba: 0x00c0, 0x3ebb: 0x00c0, + 0x3ebc: 0x00c0, 0x3ebd: 0x00c0, 0x3ebe: 0x00c0, 0x3ebf: 0x00c0, + // Block 0xfb, offset 0x3ec0 + 0x3ec0: 0x00c0, 0x3ec1: 0x00c0, 0x3ec2: 0x00c0, 0x3ec3: 0x00c0, 0x3ec4: 0x00c0, 0x3ec5: 0x00c0, + 0x3ec6: 0x00c0, 0x3ec7: 0x00c0, 0x3ec8: 0x00c0, 0x3ec9: 0x00c0, 0x3eca: 0x00c0, 0x3ecb: 0x00c0, + 0x3ecc: 0x00c0, 0x3ecd: 0x00c0, 0x3ece: 0x00c0, 0x3ecf: 0x00c0, 0x3ed0: 0x00c0, 0x3ed1: 0x00c0, + 0x3ed2: 0x00c0, 0x3ed3: 0x00c0, 0x3ed4: 0x00c0, 0x3ed5: 0x00c0, 0x3ed6: 0x00c0, 0x3ed7: 0x00c0, + 0x3ed8: 0x00c0, 0x3ed9: 0x00c0, 0x3eda: 0x00c0, 0x3edb: 0x00c0, 0x3edc: 0x00c0, 0x3edd: 0x00c0, + 0x3ede: 0x00c0, 0x3edf: 0x00c0, 0x3ee0: 0x00c0, 0x3ee1: 0x00c0, 0x3ee2: 0x00c0, 0x3ee3: 0x00c0, + 0x3ee4: 0x00c0, 0x3ee5: 0x00c0, 0x3ee6: 0x00c0, 0x3ee7: 0x00c0, 0x3ee8: 0x00c0, 0x3ee9: 0x00c0, + 0x3eea: 0x0080, 0x3eeb: 0x0080, 0x3eec: 0x0080, 0x3eed: 0x0080, 0x3eee: 0x0080, 0x3eef: 0x0080, + 0x3ef0: 0x0080, 0x3ef1: 0x0080, 0x3ef2: 0x0080, + 0x3eff: 0x00c0, + // Block 0xfc, offset 0x3f00 + 0x3f00: 0x00c0, 0x3f01: 0x00c0, 0x3f02: 0x00c0, 0x3f03: 0x00c0, 0x3f04: 0x00c0, 0x3f05: 0x00c0, + 0x3f06: 0x00c0, 0x3f07: 0x00c0, 0x3f08: 0x00c0, 0x3f09: 0x00c0, 0x3f0a: 0x00c0, 0x3f0b: 0x00c0, + 0x3f0c: 0x00c0, 0x3f0d: 0x00c0, 0x3f0e: 0x00c0, 0x3f0f: 0x00c0, 0x3f10: 0x00c0, 0x3f11: 0x00c0, + 0x3f12: 0x00c0, 0x3f13: 0x00c0, 0x3f14: 0x00c0, 0x3f15: 0x00c0, 0x3f16: 0x00c0, 0x3f17: 0x00c0, + 0x3f18: 0x00c0, 0x3f19: 0x00c0, 0x3f1a: 0x00c0, 0x3f1b: 0x00c0, 0x3f1c: 0x00c0, 0x3f1d: 0x00c0, + 0x3f1e: 0x00c0, 0x3f1f: 0x00c0, 0x3f20: 0x00c0, 0x3f21: 0x00c0, 0x3f22: 0x00c0, 0x3f23: 0x00c0, + 0x3f24: 0x00c0, 0x3f25: 0x00c0, 0x3f26: 0x00c0, 0x3f27: 0x00c0, 0x3f28: 0x00c0, 0x3f29: 0x00c0, + 0x3f2a: 0x00c0, 0x3f2b: 0x00c0, 0x3f2c: 0x00c0, 0x3f2d: 0x00c0, 0x3f2e: 0x00c0, 0x3f2f: 0x00c0, + 0x3f30: 0x00c0, 0x3f31: 0x00c0, 0x3f32: 0x00c0, 0x3f33: 0x00c0, 0x3f34: 0x00c0, 0x3f35: 0x00c0, + 0x3f36: 0x00c0, 0x3f37: 0x00c0, 0x3f38: 0x00c0, + // Block 0xfd, offset 0x3f40 + 0x3f40: 0x00c0, 0x3f41: 0x00c0, 0x3f42: 0x00c0, 0x3f43: 0x00c0, 0x3f44: 0x00c0, 0x3f45: 0x00c0, + 0x3f46: 0x00c0, 0x3f47: 0x00c0, 0x3f48: 0x00c0, 0x3f4a: 0x00c0, 0x3f4b: 0x00c0, + 0x3f4c: 0x00c0, 0x3f4d: 0x00c0, 0x3f4e: 0x00c0, 0x3f4f: 0x00c0, 0x3f50: 0x00c0, 0x3f51: 0x00c0, + 0x3f52: 0x00c0, 0x3f53: 0x00c0, 0x3f54: 0x00c0, 0x3f55: 0x00c0, 0x3f56: 0x00c0, 0x3f57: 0x00c0, + 0x3f58: 0x00c0, 0x3f59: 0x00c0, 0x3f5a: 0x00c0, 0x3f5b: 0x00c0, 0x3f5c: 0x00c0, 0x3f5d: 0x00c0, + 0x3f5e: 0x00c0, 0x3f5f: 0x00c0, 0x3f60: 0x00c0, 0x3f61: 0x00c0, 0x3f62: 0x00c0, 0x3f63: 0x00c0, + 0x3f64: 0x00c0, 0x3f65: 0x00c0, 0x3f66: 0x00c0, 0x3f67: 0x00c0, 0x3f68: 0x00c0, 0x3f69: 0x00c0, + 0x3f6a: 0x00c0, 0x3f6b: 0x00c0, 0x3f6c: 0x00c0, 0x3f6d: 0x00c0, 0x3f6e: 0x00c0, 0x3f6f: 0x00c0, + 0x3f70: 0x00c3, 0x3f71: 0x00c3, 0x3f72: 0x00c3, 0x3f73: 0x00c3, 0x3f74: 0x00c3, 0x3f75: 0x00c3, + 0x3f76: 0x00c3, 0x3f78: 0x00c3, 0x3f79: 0x00c3, 0x3f7a: 0x00c3, 0x3f7b: 0x00c3, + 0x3f7c: 0x00c3, 0x3f7d: 0x00c3, 0x3f7e: 0x00c0, 0x3f7f: 0x00c6, + // Block 0xfe, offset 0x3f80 + 0x3f80: 0x00c0, 0x3f81: 0x0080, 0x3f82: 0x0080, 0x3f83: 0x0080, 0x3f84: 0x0080, 0x3f85: 0x0080, + 0x3f90: 0x00c0, 0x3f91: 0x00c0, + 0x3f92: 0x00c0, 0x3f93: 0x00c0, 0x3f94: 0x00c0, 0x3f95: 0x00c0, 0x3f96: 0x00c0, 0x3f97: 0x00c0, + 0x3f98: 0x00c0, 0x3f99: 0x00c0, 0x3f9a: 0x0080, 0x3f9b: 0x0080, 0x3f9c: 0x0080, 0x3f9d: 0x0080, + 0x3f9e: 0x0080, 0x3f9f: 0x0080, 0x3fa0: 0x0080, 0x3fa1: 0x0080, 0x3fa2: 0x0080, 0x3fa3: 0x0080, + 0x3fa4: 0x0080, 0x3fa5: 0x0080, 0x3fa6: 0x0080, 0x3fa7: 0x0080, 0x3fa8: 0x0080, 0x3fa9: 0x0080, + 0x3faa: 0x0080, 0x3fab: 0x0080, 0x3fac: 0x0080, + 0x3fb0: 0x0080, 0x3fb1: 0x0080, 0x3fb2: 0x00c0, 0x3fb3: 0x00c0, 0x3fb4: 0x00c0, 0x3fb5: 0x00c0, + 0x3fb6: 0x00c0, 0x3fb7: 0x00c0, 0x3fb8: 0x00c0, 0x3fb9: 0x00c0, 0x3fba: 0x00c0, 0x3fbb: 0x00c0, + 0x3fbc: 0x00c0, 0x3fbd: 0x00c0, 0x3fbe: 0x00c0, 0x3fbf: 0x00c0, + // Block 0xff, offset 0x3fc0 + 0x3fc0: 0x00c0, 0x3fc1: 0x00c0, 0x3fc2: 0x00c0, 0x3fc3: 0x00c0, 0x3fc4: 0x00c0, 0x3fc5: 0x00c0, + 0x3fc6: 0x00c0, 0x3fc7: 0x00c0, 0x3fc8: 0x00c0, 0x3fc9: 0x00c0, 0x3fca: 0x00c0, 0x3fcb: 0x00c0, + 0x3fcc: 0x00c0, 0x3fcd: 0x00c0, 0x3fce: 0x00c0, 0x3fcf: 0x00c0, + 0x3fd2: 0x00c3, 0x3fd3: 0x00c3, 0x3fd4: 0x00c3, 0x3fd5: 0x00c3, 0x3fd6: 0x00c3, 0x3fd7: 0x00c3, + 0x3fd8: 0x00c3, 0x3fd9: 0x00c3, 0x3fda: 0x00c3, 0x3fdb: 0x00c3, 0x3fdc: 0x00c3, 0x3fdd: 0x00c3, + 0x3fde: 0x00c3, 0x3fdf: 0x00c3, 0x3fe0: 0x00c3, 0x3fe1: 0x00c3, 0x3fe2: 0x00c3, 0x3fe3: 0x00c3, + 0x3fe4: 0x00c3, 0x3fe5: 0x00c3, 0x3fe6: 0x00c3, 0x3fe7: 0x00c3, 0x3fe9: 0x00c0, + 0x3fea: 0x00c3, 0x3feb: 0x00c3, 0x3fec: 0x00c3, 0x3fed: 0x00c3, 0x3fee: 0x00c3, 0x3fef: 0x00c3, + 0x3ff0: 0x00c3, 0x3ff1: 0x00c0, 0x3ff2: 0x00c3, 0x3ff3: 0x00c3, 0x3ff4: 0x00c0, 0x3ff5: 0x00c3, + 0x3ff6: 0x00c3, + // Block 0x100, offset 0x4000 + 0x4000: 0x00c0, 0x4001: 0x00c0, 0x4002: 0x00c0, 0x4003: 0x00c0, 0x4004: 0x00c0, 0x4005: 0x00c0, + 0x4006: 0x00c0, 0x4007: 0x00c0, 0x4008: 0x00c0, 0x4009: 0x00c0, 0x400a: 0x00c0, 0x400b: 0x00c0, + 0x400c: 0x00c0, 0x400d: 0x00c0, 0x400e: 0x00c0, 0x400f: 0x00c0, 0x4010: 0x00c0, 0x4011: 0x00c0, + 0x4012: 0x00c0, 0x4013: 0x00c0, 0x4014: 0x00c0, 0x4015: 0x00c0, 0x4016: 0x00c0, 0x4017: 0x00c0, + 0x4018: 0x00c0, 0x4019: 0x00c0, + // Block 0x101, offset 0x4040 + 0x4040: 0x0080, 0x4041: 0x0080, 0x4042: 0x0080, 0x4043: 0x0080, 0x4044: 0x0080, 0x4045: 0x0080, + 0x4046: 0x0080, 0x4047: 0x0080, 0x4048: 0x0080, 0x4049: 0x0080, 0x404a: 0x0080, 0x404b: 0x0080, + 0x404c: 0x0080, 0x404d: 0x0080, 0x404e: 0x0080, 0x404f: 0x0080, 0x4050: 0x0080, 0x4051: 0x0080, + 0x4052: 0x0080, 0x4053: 0x0080, 0x4054: 0x0080, 0x4055: 0x0080, 0x4056: 0x0080, 0x4057: 0x0080, + 0x4058: 0x0080, 0x4059: 0x0080, 0x405a: 0x0080, 0x405b: 0x0080, 0x405c: 0x0080, 0x405d: 0x0080, + 0x405e: 0x0080, 0x405f: 0x0080, 0x4060: 0x0080, 0x4061: 0x0080, 0x4062: 0x0080, 0x4063: 0x0080, + 0x4064: 0x0080, 0x4065: 0x0080, 0x4066: 0x0080, 0x4067: 0x0080, 0x4068: 0x0080, 0x4069: 0x0080, + 0x406a: 0x0080, 0x406b: 0x0080, 0x406c: 0x0080, 0x406d: 0x0080, 0x406e: 0x0080, + 0x4070: 0x0080, 0x4071: 0x0080, 0x4072: 0x0080, 0x4073: 0x0080, 0x4074: 0x0080, + // Block 0x102, offset 0x4080 + 0x4080: 0x00c0, 0x4081: 0x00c0, 0x4082: 0x00c0, 0x4083: 0x00c0, + // Block 0x103, offset 0x40c0 + 0x40c0: 0x00c0, 0x40c1: 0x00c0, 0x40c2: 0x00c0, 0x40c3: 0x00c0, 0x40c4: 0x00c0, 0x40c5: 0x00c0, + 0x40c6: 0x00c0, 0x40c7: 0x00c0, 0x40c8: 0x00c0, 0x40c9: 0x00c0, 0x40ca: 0x00c0, 0x40cb: 0x00c0, + 0x40cc: 0x00c0, 0x40cd: 0x00c0, 0x40ce: 0x00c0, 0x40cf: 0x00c0, 0x40d0: 0x00c0, 0x40d1: 0x00c0, + 0x40d2: 0x00c0, 0x40d3: 0x00c0, 0x40d4: 0x00c0, 0x40d5: 0x00c0, 0x40d6: 0x00c0, 0x40d7: 0x00c0, + 0x40d8: 0x00c0, 0x40d9: 0x00c0, 0x40da: 0x00c0, 0x40db: 0x00c0, 0x40dc: 0x00c0, 0x40dd: 0x00c0, + 0x40de: 0x00c0, 0x40df: 0x00c0, 0x40e0: 0x00c0, 0x40e1: 0x00c0, 0x40e2: 0x00c0, 0x40e3: 0x00c0, + 0x40e4: 0x00c0, 0x40e5: 0x00c0, 0x40e6: 0x00c0, 0x40e7: 0x00c0, 0x40e8: 0x00c0, 0x40e9: 0x00c0, + 0x40ea: 0x00c0, 0x40eb: 0x00c0, 0x40ec: 0x00c0, 0x40ed: 0x00c0, 0x40ee: 0x00c0, + // Block 0x104, offset 0x4100 + 0x4100: 0x00c0, 0x4101: 0x00c0, 0x4102: 0x00c0, 0x4103: 0x00c0, 0x4104: 0x00c0, 0x4105: 0x00c0, + 0x4106: 0x00c0, + // Block 0x105, offset 0x4140 + 0x4140: 0x00c0, 0x4141: 0x00c0, 0x4142: 0x00c0, 0x4143: 0x00c0, 0x4144: 0x00c0, 0x4145: 0x00c0, + 0x4146: 0x00c0, 0x4147: 0x00c0, 0x4148: 0x00c0, 0x4149: 0x00c0, 0x414a: 0x00c0, 0x414b: 0x00c0, + 0x414c: 0x00c0, 0x414d: 0x00c0, 0x414e: 0x00c0, 0x414f: 0x00c0, 0x4150: 0x00c0, 0x4151: 0x00c0, + 0x4152: 0x00c0, 0x4153: 0x00c0, 0x4154: 0x00c0, 0x4155: 0x00c0, 0x4156: 0x00c0, 0x4157: 0x00c0, + 0x4158: 0x00c0, 0x4159: 0x00c0, 0x415a: 0x00c0, 0x415b: 0x00c0, 0x415c: 0x00c0, 0x415d: 0x00c0, + 0x415e: 0x00c0, 0x4160: 0x00c0, 0x4161: 0x00c0, 0x4162: 0x00c0, 0x4163: 0x00c0, + 0x4164: 0x00c0, 0x4165: 0x00c0, 0x4166: 0x00c0, 0x4167: 0x00c0, 0x4168: 0x00c0, 0x4169: 0x00c0, + 0x416e: 0x0080, 0x416f: 0x0080, + // Block 0x106, offset 0x4180 + 0x4190: 0x00c0, 0x4191: 0x00c0, + 0x4192: 0x00c0, 0x4193: 0x00c0, 0x4194: 0x00c0, 0x4195: 0x00c0, 0x4196: 0x00c0, 0x4197: 0x00c0, + 0x4198: 0x00c0, 0x4199: 0x00c0, 0x419a: 0x00c0, 0x419b: 0x00c0, 0x419c: 0x00c0, 0x419d: 0x00c0, + 0x419e: 0x00c0, 0x419f: 0x00c0, 0x41a0: 0x00c0, 0x41a1: 0x00c0, 0x41a2: 0x00c0, 0x41a3: 0x00c0, + 0x41a4: 0x00c0, 0x41a5: 0x00c0, 0x41a6: 0x00c0, 0x41a7: 0x00c0, 0x41a8: 0x00c0, 0x41a9: 0x00c0, + 0x41aa: 0x00c0, 0x41ab: 0x00c0, 0x41ac: 0x00c0, 0x41ad: 0x00c0, + 0x41b0: 0x00c3, 0x41b1: 0x00c3, 0x41b2: 0x00c3, 0x41b3: 0x00c3, 0x41b4: 0x00c3, 0x41b5: 0x0080, + // Block 0x107, offset 0x41c0 + 0x41c0: 0x00c0, 0x41c1: 0x00c0, 0x41c2: 0x00c0, 0x41c3: 0x00c0, 0x41c4: 0x00c0, 0x41c5: 0x00c0, + 0x41c6: 0x00c0, 0x41c7: 0x00c0, 0x41c8: 0x00c0, 0x41c9: 0x00c0, 0x41ca: 0x00c0, 0x41cb: 0x00c0, + 0x41cc: 0x00c0, 0x41cd: 0x00c0, 0x41ce: 0x00c0, 0x41cf: 0x00c0, 0x41d0: 0x00c0, 0x41d1: 0x00c0, + 0x41d2: 0x00c0, 0x41d3: 0x00c0, 0x41d4: 0x00c0, 0x41d5: 0x00c0, 0x41d6: 0x00c0, 0x41d7: 0x00c0, + 0x41d8: 0x00c0, 0x41d9: 0x00c0, 0x41da: 0x00c0, 0x41db: 0x00c0, 0x41dc: 0x00c0, 0x41dd: 0x00c0, + 0x41de: 0x00c0, 0x41df: 0x00c0, 0x41e0: 0x00c0, 0x41e1: 0x00c0, 0x41e2: 0x00c0, 0x41e3: 0x00c0, + 0x41e4: 0x00c0, 0x41e5: 0x00c0, 0x41e6: 0x00c0, 0x41e7: 0x00c0, 0x41e8: 0x00c0, 0x41e9: 0x00c0, + 0x41ea: 0x00c0, 0x41eb: 0x00c0, 0x41ec: 0x00c0, 0x41ed: 0x00c0, 0x41ee: 0x00c0, 0x41ef: 0x00c0, + 0x41f0: 0x00c3, 0x41f1: 0x00c3, 0x41f2: 0x00c3, 0x41f3: 0x00c3, 0x41f4: 0x00c3, 0x41f5: 0x00c3, + 0x41f6: 0x00c3, 0x41f7: 0x0080, 0x41f8: 0x0080, 0x41f9: 0x0080, 0x41fa: 0x0080, 0x41fb: 0x0080, + 0x41fc: 0x0080, 0x41fd: 0x0080, 0x41fe: 0x0080, 0x41ff: 0x0080, + // Block 0x108, offset 0x4200 + 0x4200: 0x00c0, 0x4201: 0x00c0, 0x4202: 0x00c0, 0x4203: 0x00c0, 0x4204: 0x0080, 0x4205: 0x0080, + 0x4210: 0x00c0, 0x4211: 0x00c0, + 0x4212: 0x00c0, 0x4213: 0x00c0, 0x4214: 0x00c0, 0x4215: 0x00c0, 0x4216: 0x00c0, 0x4217: 0x00c0, + 0x4218: 0x00c0, 0x4219: 0x00c0, 0x421b: 0x0080, 0x421c: 0x0080, 0x421d: 0x0080, + 0x421e: 0x0080, 0x421f: 0x0080, 0x4220: 0x0080, 0x4221: 0x0080, 0x4223: 0x00c0, + 0x4224: 0x00c0, 0x4225: 0x00c0, 0x4226: 0x00c0, 0x4227: 0x00c0, 0x4228: 0x00c0, 0x4229: 0x00c0, + 0x422a: 0x00c0, 0x422b: 0x00c0, 0x422c: 0x00c0, 0x422d: 0x00c0, 0x422e: 0x00c0, 0x422f: 0x00c0, + 0x4230: 0x00c0, 0x4231: 0x00c0, 0x4232: 0x00c0, 0x4233: 0x00c0, 0x4234: 0x00c0, 0x4235: 0x00c0, + 0x4236: 0x00c0, 0x4237: 0x00c0, + 0x423d: 0x00c0, 0x423e: 0x00c0, 0x423f: 0x00c0, + // Block 0x109, offset 0x4240 + 0x4240: 0x00c0, 0x4241: 0x00c0, 0x4242: 0x00c0, 0x4243: 0x00c0, 0x4244: 0x00c0, 0x4245: 0x00c0, + 0x4246: 0x00c0, 0x4247: 0x00c0, 0x4248: 0x00c0, 0x4249: 0x00c0, 0x424a: 0x00c0, 0x424b: 0x00c0, + 0x424c: 0x00c0, 0x424d: 0x00c0, 0x424e: 0x00c0, 0x424f: 0x00c0, + // Block 0x10a, offset 0x4280 + 0x4280: 0x00c0, 0x4281: 0x00c0, 0x4282: 0x00c0, 0x4283: 0x00c0, 0x4284: 0x00c0, + 0x4290: 0x00c0, 0x4291: 0x00c0, + 0x4292: 0x00c0, 0x4293: 0x00c0, 0x4294: 0x00c0, 0x4295: 0x00c0, 0x4296: 0x00c0, 0x4297: 0x00c0, + 0x4298: 0x00c0, 0x4299: 0x00c0, 0x429a: 0x00c0, 0x429b: 0x00c0, 0x429c: 0x00c0, 0x429d: 0x00c0, + 0x429e: 0x00c0, 0x429f: 0x00c0, 0x42a0: 0x00c0, 0x42a1: 0x00c0, 0x42a2: 0x00c0, 0x42a3: 0x00c0, + 0x42a4: 0x00c0, 0x42a5: 0x00c0, 0x42a6: 0x00c0, 0x42a7: 0x00c0, 0x42a8: 0x00c0, 0x42a9: 0x00c0, + 0x42aa: 0x00c0, 0x42ab: 0x00c0, 0x42ac: 0x00c0, 0x42ad: 0x00c0, 0x42ae: 0x00c0, 0x42af: 0x00c0, + 0x42b0: 0x00c0, 0x42b1: 0x00c0, 0x42b2: 0x00c0, 0x42b3: 0x00c0, 0x42b4: 0x00c0, 0x42b5: 0x00c0, + 0x42b6: 0x00c0, 0x42b7: 0x00c0, 0x42b8: 0x00c0, 0x42b9: 0x00c0, 0x42ba: 0x00c0, 0x42bb: 0x00c0, + 0x42bc: 0x00c0, 0x42bd: 0x00c0, 0x42be: 0x00c0, + // Block 0x10b, offset 0x42c0 + 0x42cf: 0x00c3, 0x42d0: 0x00c3, 0x42d1: 0x00c3, + 0x42d2: 0x00c3, 0x42d3: 0x00c0, 0x42d4: 0x00c0, 0x42d5: 0x00c0, 0x42d6: 0x00c0, 0x42d7: 0x00c0, + 0x42d8: 0x00c0, 0x42d9: 0x00c0, 0x42da: 0x00c0, 0x42db: 0x00c0, 0x42dc: 0x00c0, 0x42dd: 0x00c0, + 0x42de: 0x00c0, 0x42df: 0x00c0, + // Block 0x10c, offset 0x4300 + 0x4320: 0x00c0, + // Block 0x10d, offset 0x4340 + 0x4340: 0x00c0, 0x4341: 0x00c0, 0x4342: 0x00c0, 0x4343: 0x00c0, 0x4344: 0x00c0, 0x4345: 0x00c0, + 0x4346: 0x00c0, 0x4347: 0x00c0, 0x4348: 0x00c0, 0x4349: 0x00c0, 0x434a: 0x00c0, 0x434b: 0x00c0, + 0x434c: 0x00c0, 0x434d: 0x00c0, 0x434e: 0x00c0, 0x434f: 0x00c0, 0x4350: 0x00c0, 0x4351: 0x00c0, + 0x4352: 0x00c0, 0x4353: 0x00c0, 0x4354: 0x00c0, 0x4355: 0x00c0, 0x4356: 0x00c0, 0x4357: 0x00c0, + 0x4358: 0x00c0, 0x4359: 0x00c0, 0x435a: 0x00c0, 0x435b: 0x00c0, 0x435c: 0x00c0, 0x435d: 0x00c0, + 0x435e: 0x00c0, 0x435f: 0x00c0, 0x4360: 0x00c0, 0x4361: 0x00c0, 0x4362: 0x00c0, 0x4363: 0x00c0, + 0x4364: 0x00c0, 0x4365: 0x00c0, 0x4366: 0x00c0, 0x4367: 0x00c0, 0x4368: 0x00c0, 0x4369: 0x00c0, + 0x436a: 0x00c0, 0x436b: 0x00c0, 0x436c: 0x00c0, + // Block 0x10e, offset 0x4380 + 0x4380: 0x00cc, 0x4381: 0x00cc, + // Block 0x10f, offset 0x43c0 + 0x43c0: 0x00c0, 0x43c1: 0x00c0, 0x43c2: 0x00c0, 0x43c3: 0x00c0, 0x43c4: 0x00c0, 0x43c5: 0x00c0, + 0x43c6: 0x00c0, 0x43c7: 0x00c0, 0x43c8: 0x00c0, 0x43c9: 0x00c0, 0x43ca: 0x00c0, 0x43cb: 0x00c0, + 0x43cc: 0x00c0, 0x43cd: 0x00c0, 0x43ce: 0x00c0, 0x43cf: 0x00c0, 0x43d0: 0x00c0, 0x43d1: 0x00c0, + 0x43d2: 0x00c0, 0x43d3: 0x00c0, 0x43d4: 0x00c0, 0x43d5: 0x00c0, 0x43d6: 0x00c0, 0x43d7: 0x00c0, + 0x43d8: 0x00c0, 0x43d9: 0x00c0, 0x43da: 0x00c0, 0x43db: 0x00c0, 0x43dc: 0x00c0, 0x43dd: 0x00c0, + 0x43de: 0x00c0, 0x43df: 0x00c0, 0x43e0: 0x00c0, 0x43e1: 0x00c0, 0x43e2: 0x00c0, 0x43e3: 0x00c0, + 0x43e4: 0x00c0, 0x43e5: 0x00c0, 0x43e6: 0x00c0, 0x43e7: 0x00c0, 0x43e8: 0x00c0, 0x43e9: 0x00c0, + 0x43ea: 0x00c0, + 0x43f0: 0x00c0, 0x43f1: 0x00c0, 0x43f2: 0x00c0, 0x43f3: 0x00c0, 0x43f4: 0x00c0, 0x43f5: 0x00c0, + 0x43f6: 0x00c0, 0x43f7: 0x00c0, 0x43f8: 0x00c0, 0x43f9: 0x00c0, 0x43fa: 0x00c0, 0x43fb: 0x00c0, + 0x43fc: 0x00c0, + // Block 0x110, offset 0x4400 + 0x4400: 0x00c0, 0x4401: 0x00c0, 0x4402: 0x00c0, 0x4403: 0x00c0, 0x4404: 0x00c0, 0x4405: 0x00c0, + 0x4406: 0x00c0, 0x4407: 0x00c0, 0x4408: 0x00c0, + 0x4410: 0x00c0, 0x4411: 0x00c0, + 0x4412: 0x00c0, 0x4413: 0x00c0, 0x4414: 0x00c0, 0x4415: 0x00c0, 0x4416: 0x00c0, 0x4417: 0x00c0, + 0x4418: 0x00c0, 0x4419: 0x00c0, 0x441c: 0x0080, 0x441d: 0x00c3, + 0x441e: 0x00c3, 0x441f: 0x0080, 0x4420: 0x0040, 0x4421: 0x0040, 0x4422: 0x0040, 0x4423: 0x0040, + // Block 0x111, offset 0x4440 + 0x4440: 0x0080, 0x4441: 0x0080, 0x4442: 0x0080, 0x4443: 0x0080, 0x4444: 0x0080, 0x4445: 0x0080, + 0x4446: 0x0080, 0x4447: 0x0080, 0x4448: 0x0080, 0x4449: 0x0080, 0x444a: 0x0080, 0x444b: 0x0080, + 0x444c: 0x0080, 0x444d: 0x0080, 0x444e: 0x0080, 0x444f: 0x0080, 0x4450: 0x0080, 0x4451: 0x0080, + 0x4452: 0x0080, 0x4453: 0x0080, 0x4454: 0x0080, 0x4455: 0x0080, 0x4456: 0x0080, 0x4457: 0x0080, + 0x4458: 0x0080, 0x4459: 0x0080, 0x445a: 0x0080, 0x445b: 0x0080, 0x445c: 0x0080, 0x445d: 0x0080, + 0x445e: 0x0080, 0x445f: 0x0080, 0x4460: 0x0080, 0x4461: 0x0080, 0x4462: 0x0080, 0x4463: 0x0080, + 0x4464: 0x0080, 0x4465: 0x0080, 0x4466: 0x0080, 0x4467: 0x0080, 0x4468: 0x0080, 0x4469: 0x0080, + 0x446a: 0x0080, 0x446b: 0x0080, 0x446c: 0x0080, 0x446d: 0x0080, 0x446e: 0x0080, 0x446f: 0x0080, + 0x4470: 0x0080, 0x4471: 0x0080, 0x4472: 0x0080, 0x4473: 0x0080, 0x4474: 0x0080, 0x4475: 0x0080, + // Block 0x112, offset 0x4480 + 0x4480: 0x0080, 0x4481: 0x0080, 0x4482: 0x0080, 0x4483: 0x0080, 0x4484: 0x0080, 0x4485: 0x0080, + 0x4486: 0x0080, 0x4487: 0x0080, 0x4488: 0x0080, 0x4489: 0x0080, 0x448a: 0x0080, 0x448b: 0x0080, + 0x448c: 0x0080, 0x448d: 0x0080, 0x448e: 0x0080, 0x448f: 0x0080, 0x4490: 0x0080, 0x4491: 0x0080, + 0x4492: 0x0080, 0x4493: 0x0080, 0x4494: 0x0080, 0x4495: 0x0080, 0x4496: 0x0080, 0x4497: 0x0080, + 0x4498: 0x0080, 0x4499: 0x0080, 0x449a: 0x0080, 0x449b: 0x0080, 0x449c: 0x0080, 0x449d: 0x0080, + 0x449e: 0x0080, 0x449f: 0x0080, 0x44a0: 0x0080, 0x44a1: 0x0080, 0x44a2: 0x0080, 0x44a3: 0x0080, + 0x44a4: 0x0080, 0x44a5: 0x0080, 0x44a6: 0x0080, 0x44a9: 0x0080, + 0x44aa: 0x0080, 0x44ab: 0x0080, 0x44ac: 0x0080, 0x44ad: 0x0080, 0x44ae: 0x0080, 0x44af: 0x0080, + 0x44b0: 0x0080, 0x44b1: 0x0080, 0x44b2: 0x0080, 0x44b3: 0x0080, 0x44b4: 0x0080, 0x44b5: 0x0080, + 0x44b6: 0x0080, 0x44b7: 0x0080, 0x44b8: 0x0080, 0x44b9: 0x0080, 0x44ba: 0x0080, 0x44bb: 0x0080, + 0x44bc: 0x0080, 0x44bd: 0x0080, 0x44be: 0x0080, 0x44bf: 0x0080, + // Block 0x113, offset 0x44c0 + 0x44c0: 0x0080, 0x44c1: 0x0080, 0x44c2: 0x0080, 0x44c3: 0x0080, 0x44c4: 0x0080, 0x44c5: 0x0080, + 0x44c6: 0x0080, 0x44c7: 0x0080, 0x44c8: 0x0080, 0x44c9: 0x0080, 0x44ca: 0x0080, 0x44cb: 0x0080, + 0x44cc: 0x0080, 0x44cd: 0x0080, 0x44ce: 0x0080, 0x44cf: 0x0080, 0x44d0: 0x0080, 0x44d1: 0x0080, + 0x44d2: 0x0080, 0x44d3: 0x0080, 0x44d4: 0x0080, 0x44d5: 0x0080, 0x44d6: 0x0080, 0x44d7: 0x0080, + 0x44d8: 0x0080, 0x44d9: 0x0080, 0x44da: 0x0080, 0x44db: 0x0080, 0x44dc: 0x0080, 0x44dd: 0x0080, + 0x44de: 0x0080, 0x44df: 0x0080, 0x44e0: 0x0080, 0x44e1: 0x0080, 0x44e2: 0x0080, 0x44e3: 0x0080, + 0x44e4: 0x0080, 0x44e5: 0x00c0, 0x44e6: 0x00c0, 0x44e7: 0x00c3, 0x44e8: 0x00c3, 0x44e9: 0x00c3, + 0x44ea: 0x0080, 0x44eb: 0x0080, 0x44ec: 0x0080, 0x44ed: 0x00c0, 0x44ee: 0x00c0, 0x44ef: 0x00c0, + 0x44f0: 0x00c0, 0x44f1: 0x00c0, 0x44f2: 0x00c0, 0x44f3: 0x0040, 0x44f4: 0x0040, 0x44f5: 0x0040, + 0x44f6: 0x0040, 0x44f7: 0x0040, 0x44f8: 0x0040, 0x44f9: 0x0040, 0x44fa: 0x0040, 0x44fb: 0x00c3, + 0x44fc: 0x00c3, 0x44fd: 0x00c3, 0x44fe: 0x00c3, 0x44ff: 0x00c3, + // Block 0x114, offset 0x4500 + 0x4500: 0x00c3, 0x4501: 0x00c3, 0x4502: 0x00c3, 0x4503: 0x0080, 0x4504: 0x0080, 0x4505: 0x00c3, + 0x4506: 0x00c3, 0x4507: 0x00c3, 0x4508: 0x00c3, 0x4509: 0x00c3, 0x450a: 0x00c3, 0x450b: 0x00c3, + 0x450c: 0x0080, 0x450d: 0x0080, 0x450e: 0x0080, 0x450f: 0x0080, 0x4510: 0x0080, 0x4511: 0x0080, + 0x4512: 0x0080, 0x4513: 0x0080, 0x4514: 0x0080, 0x4515: 0x0080, 0x4516: 0x0080, 0x4517: 0x0080, + 0x4518: 0x0080, 0x4519: 0x0080, 0x451a: 0x0080, 0x451b: 0x0080, 0x451c: 0x0080, 0x451d: 0x0080, + 0x451e: 0x0080, 0x451f: 0x0080, 0x4520: 0x0080, 0x4521: 0x0080, 0x4522: 0x0080, 0x4523: 0x0080, + 0x4524: 0x0080, 0x4525: 0x0080, 0x4526: 0x0080, 0x4527: 0x0080, 0x4528: 0x0080, 0x4529: 0x0080, + 0x452a: 0x00c3, 0x452b: 0x00c3, 0x452c: 0x00c3, 0x452d: 0x00c3, 0x452e: 0x0080, 0x452f: 0x0080, + 0x4530: 0x0080, 0x4531: 0x0080, 0x4532: 0x0080, 0x4533: 0x0080, 0x4534: 0x0080, 0x4535: 0x0080, + 0x4536: 0x0080, 0x4537: 0x0080, 0x4538: 0x0080, 0x4539: 0x0080, 0x453a: 0x0080, 0x453b: 0x0080, + 0x453c: 0x0080, 0x453d: 0x0080, 0x453e: 0x0080, 0x453f: 0x0080, + // Block 0x115, offset 0x4540 + 0x4540: 0x0080, 0x4541: 0x0080, 0x4542: 0x0080, 0x4543: 0x0080, 0x4544: 0x0080, 0x4545: 0x0080, + 0x4546: 0x0080, 0x4547: 0x0080, 0x4548: 0x0080, 0x4549: 0x0080, 0x454a: 0x0080, 0x454b: 0x0080, + 0x454c: 0x0080, 0x454d: 0x0080, 0x454e: 0x0080, 0x454f: 0x0080, 0x4550: 0x0080, 0x4551: 0x0080, + 0x4552: 0x0080, 0x4553: 0x0080, 0x4554: 0x0080, 0x4555: 0x0080, 0x4556: 0x0080, 0x4557: 0x0080, + 0x4558: 0x0080, 0x4559: 0x0080, 0x455a: 0x0080, 0x455b: 0x0080, 0x455c: 0x0080, 0x455d: 0x0080, + 0x455e: 0x0080, 0x455f: 0x0080, 0x4560: 0x0080, 0x4561: 0x0080, 0x4562: 0x0080, 0x4563: 0x0080, + 0x4564: 0x0080, 0x4565: 0x0080, 0x4566: 0x0080, 0x4567: 0x0080, 0x4568: 0x0080, + // Block 0x116, offset 0x4580 + 0x4580: 0x0088, 0x4581: 0x0088, 0x4582: 0x00c9, 0x4583: 0x00c9, 0x4584: 0x00c9, 0x4585: 0x0088, + // Block 0x117, offset 0x45c0 + 0x45c0: 0x0080, 0x45c1: 0x0080, 0x45c2: 0x0080, 0x45c3: 0x0080, 0x45c4: 0x0080, 0x45c5: 0x0080, + 0x45c6: 0x0080, 0x45c7: 0x0080, 0x45c8: 0x0080, 0x45c9: 0x0080, 0x45ca: 0x0080, 0x45cb: 0x0080, + 0x45cc: 0x0080, 0x45cd: 0x0080, 0x45ce: 0x0080, 0x45cf: 0x0080, 0x45d0: 0x0080, 0x45d1: 0x0080, + 0x45d2: 0x0080, 0x45d3: 0x0080, 0x45d4: 0x0080, 0x45d5: 0x0080, 0x45d6: 0x0080, + 0x45e0: 0x0080, 0x45e1: 0x0080, 0x45e2: 0x0080, 0x45e3: 0x0080, + 0x45e4: 0x0080, 0x45e5: 0x0080, 0x45e6: 0x0080, 0x45e7: 0x0080, 0x45e8: 0x0080, 0x45e9: 0x0080, + 0x45ea: 0x0080, 0x45eb: 0x0080, 0x45ec: 0x0080, 0x45ed: 0x0080, 0x45ee: 0x0080, 0x45ef: 0x0080, + 0x45f0: 0x0080, 0x45f1: 0x0080, + // Block 0x118, offset 0x4600 + 0x4600: 0x0080, 0x4601: 0x0080, 0x4602: 0x0080, 0x4603: 0x0080, 0x4604: 0x0080, 0x4605: 0x0080, + 0x4606: 0x0080, 0x4607: 0x0080, 0x4608: 0x0080, 0x4609: 0x0080, 0x460a: 0x0080, 0x460b: 0x0080, + 0x460c: 0x0080, 0x460d: 0x0080, 0x460e: 0x0080, 0x460f: 0x0080, 0x4610: 0x0080, 0x4611: 0x0080, + 0x4612: 0x0080, 0x4613: 0x0080, 0x4614: 0x0080, 0x4616: 0x0080, 0x4617: 0x0080, + 0x4618: 0x0080, 0x4619: 0x0080, 0x461a: 0x0080, 0x461b: 0x0080, 0x461c: 0x0080, 0x461d: 0x0080, + 0x461e: 0x0080, 0x461f: 0x0080, 0x4620: 0x0080, 0x4621: 0x0080, 0x4622: 0x0080, 0x4623: 0x0080, + 0x4624: 0x0080, 0x4625: 0x0080, 0x4626: 0x0080, 0x4627: 0x0080, 0x4628: 0x0080, 0x4629: 0x0080, + 0x462a: 0x0080, 0x462b: 0x0080, 0x462c: 0x0080, 0x462d: 0x0080, 0x462e: 0x0080, 0x462f: 0x0080, + 0x4630: 0x0080, 0x4631: 0x0080, 0x4632: 0x0080, 0x4633: 0x0080, 0x4634: 0x0080, 0x4635: 0x0080, + 0x4636: 0x0080, 0x4637: 0x0080, 0x4638: 0x0080, 0x4639: 0x0080, 0x463a: 0x0080, 0x463b: 0x0080, + 0x463c: 0x0080, 0x463d: 0x0080, 0x463e: 0x0080, 0x463f: 0x0080, + // Block 0x119, offset 0x4640 + 0x4640: 0x0080, 0x4641: 0x0080, 0x4642: 0x0080, 0x4643: 0x0080, 0x4644: 0x0080, 0x4645: 0x0080, + 0x4646: 0x0080, 0x4647: 0x0080, 0x4648: 0x0080, 0x4649: 0x0080, 0x464a: 0x0080, 0x464b: 0x0080, + 0x464c: 0x0080, 0x464d: 0x0080, 0x464e: 0x0080, 0x464f: 0x0080, 0x4650: 0x0080, 0x4651: 0x0080, + 0x4652: 0x0080, 0x4653: 0x0080, 0x4654: 0x0080, 0x4655: 0x0080, 0x4656: 0x0080, 0x4657: 0x0080, + 0x4658: 0x0080, 0x4659: 0x0080, 0x465a: 0x0080, 0x465b: 0x0080, 0x465c: 0x0080, + 0x465e: 0x0080, 0x465f: 0x0080, 0x4662: 0x0080, + 0x4665: 0x0080, 0x4666: 0x0080, 0x4669: 0x0080, + 0x466a: 0x0080, 0x466b: 0x0080, 0x466c: 0x0080, 0x466e: 0x0080, 0x466f: 0x0080, + 0x4670: 0x0080, 0x4671: 0x0080, 0x4672: 0x0080, 0x4673: 0x0080, 0x4674: 0x0080, 0x4675: 0x0080, + 0x4676: 0x0080, 0x4677: 0x0080, 0x4678: 0x0080, 0x4679: 0x0080, 0x467b: 0x0080, + 0x467d: 0x0080, 0x467e: 0x0080, 0x467f: 0x0080, + // Block 0x11a, offset 0x4680 + 0x4680: 0x0080, 0x4681: 0x0080, 0x4682: 0x0080, 0x4683: 0x0080, 0x4685: 0x0080, + 0x4686: 0x0080, 0x4687: 0x0080, 0x4688: 0x0080, 0x4689: 0x0080, 0x468a: 0x0080, 0x468b: 0x0080, + 0x468c: 0x0080, 0x468d: 0x0080, 0x468e: 0x0080, 0x468f: 0x0080, 0x4690: 0x0080, 0x4691: 0x0080, + 0x4692: 0x0080, 0x4693: 0x0080, 0x4694: 0x0080, 0x4695: 0x0080, 0x4696: 0x0080, 0x4697: 0x0080, + 0x4698: 0x0080, 0x4699: 0x0080, 0x469a: 0x0080, 0x469b: 0x0080, 0x469c: 0x0080, 0x469d: 0x0080, + 0x469e: 0x0080, 0x469f: 0x0080, 0x46a0: 0x0080, 0x46a1: 0x0080, 0x46a2: 0x0080, 0x46a3: 0x0080, + 0x46a4: 0x0080, 0x46a5: 0x0080, 0x46a6: 0x0080, 0x46a7: 0x0080, 0x46a8: 0x0080, 0x46a9: 0x0080, + 0x46aa: 0x0080, 0x46ab: 0x0080, 0x46ac: 0x0080, 0x46ad: 0x0080, 0x46ae: 0x0080, 0x46af: 0x0080, + 0x46b0: 0x0080, 0x46b1: 0x0080, 0x46b2: 0x0080, 0x46b3: 0x0080, 0x46b4: 0x0080, 0x46b5: 0x0080, + 0x46b6: 0x0080, 0x46b7: 0x0080, 0x46b8: 0x0080, 0x46b9: 0x0080, 0x46ba: 0x0080, 0x46bb: 0x0080, + 0x46bc: 0x0080, 0x46bd: 0x0080, 0x46be: 0x0080, 0x46bf: 0x0080, + // Block 0x11b, offset 0x46c0 + 0x46c0: 0x0080, 0x46c1: 0x0080, 0x46c2: 0x0080, 0x46c3: 0x0080, 0x46c4: 0x0080, 0x46c5: 0x0080, + 0x46c7: 0x0080, 0x46c8: 0x0080, 0x46c9: 0x0080, 0x46ca: 0x0080, + 0x46cd: 0x0080, 0x46ce: 0x0080, 0x46cf: 0x0080, 0x46d0: 0x0080, 0x46d1: 0x0080, + 0x46d2: 0x0080, 0x46d3: 0x0080, 0x46d4: 0x0080, 0x46d6: 0x0080, 0x46d7: 0x0080, + 0x46d8: 0x0080, 0x46d9: 0x0080, 0x46da: 0x0080, 0x46db: 0x0080, 0x46dc: 0x0080, + 0x46de: 0x0080, 0x46df: 0x0080, 0x46e0: 0x0080, 0x46e1: 0x0080, 0x46e2: 0x0080, 0x46e3: 0x0080, + 0x46e4: 0x0080, 0x46e5: 0x0080, 0x46e6: 0x0080, 0x46e7: 0x0080, 0x46e8: 0x0080, 0x46e9: 0x0080, + 0x46ea: 0x0080, 0x46eb: 0x0080, 0x46ec: 0x0080, 0x46ed: 0x0080, 0x46ee: 0x0080, 0x46ef: 0x0080, + 0x46f0: 0x0080, 0x46f1: 0x0080, 0x46f2: 0x0080, 0x46f3: 0x0080, 0x46f4: 0x0080, 0x46f5: 0x0080, + 0x46f6: 0x0080, 0x46f7: 0x0080, 0x46f8: 0x0080, 0x46f9: 0x0080, 0x46fb: 0x0080, + 0x46fc: 0x0080, 0x46fd: 0x0080, 0x46fe: 0x0080, + // Block 0x11c, offset 0x4700 + 0x4700: 0x0080, 0x4701: 0x0080, 0x4702: 0x0080, 0x4703: 0x0080, 0x4704: 0x0080, + 0x4706: 0x0080, 0x470a: 0x0080, 0x470b: 0x0080, + 0x470c: 0x0080, 0x470d: 0x0080, 0x470e: 0x0080, 0x470f: 0x0080, 0x4710: 0x0080, + 0x4712: 0x0080, 0x4713: 0x0080, 0x4714: 0x0080, 0x4715: 0x0080, 0x4716: 0x0080, 0x4717: 0x0080, + 0x4718: 0x0080, 0x4719: 0x0080, 0x471a: 0x0080, 0x471b: 0x0080, 0x471c: 0x0080, 0x471d: 0x0080, + 0x471e: 0x0080, 0x471f: 0x0080, 0x4720: 0x0080, 0x4721: 0x0080, 0x4722: 0x0080, 0x4723: 0x0080, + 0x4724: 0x0080, 0x4725: 0x0080, 0x4726: 0x0080, 0x4727: 0x0080, 0x4728: 0x0080, 0x4729: 0x0080, + 0x472a: 0x0080, 0x472b: 0x0080, 0x472c: 0x0080, 0x472d: 0x0080, 0x472e: 0x0080, 0x472f: 0x0080, + 0x4730: 0x0080, 0x4731: 0x0080, 0x4732: 0x0080, 0x4733: 0x0080, 0x4734: 0x0080, 0x4735: 0x0080, + 0x4736: 0x0080, 0x4737: 0x0080, 0x4738: 0x0080, 0x4739: 0x0080, 0x473a: 0x0080, 0x473b: 0x0080, + 0x473c: 0x0080, 0x473d: 0x0080, 0x473e: 0x0080, 0x473f: 0x0080, + // Block 0x11d, offset 0x4740 + 0x4740: 0x0080, 0x4741: 0x0080, 0x4742: 0x0080, 0x4743: 0x0080, 0x4744: 0x0080, 0x4745: 0x0080, + 0x4746: 0x0080, 0x4747: 0x0080, 0x4748: 0x0080, 0x4749: 0x0080, 0x474a: 0x0080, 0x474b: 0x0080, + 0x474c: 0x0080, 0x474d: 0x0080, 0x474e: 0x0080, 0x474f: 0x0080, 0x4750: 0x0080, 0x4751: 0x0080, + 0x4752: 0x0080, 0x4753: 0x0080, 0x4754: 0x0080, 0x4755: 0x0080, 0x4756: 0x0080, 0x4757: 0x0080, + 0x4758: 0x0080, 0x4759: 0x0080, 0x475a: 0x0080, 0x475b: 0x0080, 0x475c: 0x0080, 0x475d: 0x0080, + 0x475e: 0x0080, 0x475f: 0x0080, 0x4760: 0x0080, 0x4761: 0x0080, 0x4762: 0x0080, 0x4763: 0x0080, + 0x4764: 0x0080, 0x4765: 0x0080, 0x4768: 0x0080, 0x4769: 0x0080, + 0x476a: 0x0080, 0x476b: 0x0080, 0x476c: 0x0080, 0x476d: 0x0080, 0x476e: 0x0080, 0x476f: 0x0080, + 0x4770: 0x0080, 0x4771: 0x0080, 0x4772: 0x0080, 0x4773: 0x0080, 0x4774: 0x0080, 0x4775: 0x0080, + 0x4776: 0x0080, 0x4777: 0x0080, 0x4778: 0x0080, 0x4779: 0x0080, 0x477a: 0x0080, 0x477b: 0x0080, + 0x477c: 0x0080, 0x477d: 0x0080, 0x477e: 0x0080, 0x477f: 0x0080, + // Block 0x11e, offset 0x4780 + 0x4780: 0x0080, 0x4781: 0x0080, 0x4782: 0x0080, 0x4783: 0x0080, 0x4784: 0x0080, 0x4785: 0x0080, + 0x4786: 0x0080, 0x4787: 0x0080, 0x4788: 0x0080, 0x4789: 0x0080, 0x478a: 0x0080, 0x478b: 0x0080, + 0x478e: 0x0080, 0x478f: 0x0080, 0x4790: 0x0080, 0x4791: 0x0080, + 0x4792: 0x0080, 0x4793: 0x0080, 0x4794: 0x0080, 0x4795: 0x0080, 0x4796: 0x0080, 0x4797: 0x0080, + 0x4798: 0x0080, 0x4799: 0x0080, 0x479a: 0x0080, 0x479b: 0x0080, 0x479c: 0x0080, 0x479d: 0x0080, + 0x479e: 0x0080, 0x479f: 0x0080, 0x47a0: 0x0080, 0x47a1: 0x0080, 0x47a2: 0x0080, 0x47a3: 0x0080, + 0x47a4: 0x0080, 0x47a5: 0x0080, 0x47a6: 0x0080, 0x47a7: 0x0080, 0x47a8: 0x0080, 0x47a9: 0x0080, + 0x47aa: 0x0080, 0x47ab: 0x0080, 0x47ac: 0x0080, 0x47ad: 0x0080, 0x47ae: 0x0080, 0x47af: 0x0080, + 0x47b0: 0x0080, 0x47b1: 0x0080, 0x47b2: 0x0080, 0x47b3: 0x0080, 0x47b4: 0x0080, 0x47b5: 0x0080, + 0x47b6: 0x0080, 0x47b7: 0x0080, 0x47b8: 0x0080, 0x47b9: 0x0080, 0x47ba: 0x0080, 0x47bb: 0x0080, + 0x47bc: 0x0080, 0x47bd: 0x0080, 0x47be: 0x0080, 0x47bf: 0x0080, + // Block 0x11f, offset 0x47c0 + 0x47c0: 0x00c3, 0x47c1: 0x00c3, 0x47c2: 0x00c3, 0x47c3: 0x00c3, 0x47c4: 0x00c3, 0x47c5: 0x00c3, + 0x47c6: 0x00c3, 0x47c7: 0x00c3, 0x47c8: 0x00c3, 0x47c9: 0x00c3, 0x47ca: 0x00c3, 0x47cb: 0x00c3, + 0x47cc: 0x00c3, 0x47cd: 0x00c3, 0x47ce: 0x00c3, 0x47cf: 0x00c3, 0x47d0: 0x00c3, 0x47d1: 0x00c3, + 0x47d2: 0x00c3, 0x47d3: 0x00c3, 0x47d4: 0x00c3, 0x47d5: 0x00c3, 0x47d6: 0x00c3, 0x47d7: 0x00c3, + 0x47d8: 0x00c3, 0x47d9: 0x00c3, 0x47da: 0x00c3, 0x47db: 0x00c3, 0x47dc: 0x00c3, 0x47dd: 0x00c3, + 0x47de: 0x00c3, 0x47df: 0x00c3, 0x47e0: 0x00c3, 0x47e1: 0x00c3, 0x47e2: 0x00c3, 0x47e3: 0x00c3, + 0x47e4: 0x00c3, 0x47e5: 0x00c3, 0x47e6: 0x00c3, 0x47e7: 0x00c3, 0x47e8: 0x00c3, 0x47e9: 0x00c3, + 0x47ea: 0x00c3, 0x47eb: 0x00c3, 0x47ec: 0x00c3, 0x47ed: 0x00c3, 0x47ee: 0x00c3, 0x47ef: 0x00c3, + 0x47f0: 0x00c3, 0x47f1: 0x00c3, 0x47f2: 0x00c3, 0x47f3: 0x00c3, 0x47f4: 0x00c3, 0x47f5: 0x00c3, + 0x47f6: 0x00c3, 0x47f7: 0x0080, 0x47f8: 0x0080, 0x47f9: 0x0080, 0x47fa: 0x0080, 0x47fb: 0x00c3, + 0x47fc: 0x00c3, 0x47fd: 0x00c3, 0x47fe: 0x00c3, 0x47ff: 0x00c3, + // Block 0x120, offset 0x4800 + 0x4800: 0x00c3, 0x4801: 0x00c3, 0x4802: 0x00c3, 0x4803: 0x00c3, 0x4804: 0x00c3, 0x4805: 0x00c3, + 0x4806: 0x00c3, 0x4807: 0x00c3, 0x4808: 0x00c3, 0x4809: 0x00c3, 0x480a: 0x00c3, 0x480b: 0x00c3, + 0x480c: 0x00c3, 0x480d: 0x00c3, 0x480e: 0x00c3, 0x480f: 0x00c3, 0x4810: 0x00c3, 0x4811: 0x00c3, + 0x4812: 0x00c3, 0x4813: 0x00c3, 0x4814: 0x00c3, 0x4815: 0x00c3, 0x4816: 0x00c3, 0x4817: 0x00c3, + 0x4818: 0x00c3, 0x4819: 0x00c3, 0x481a: 0x00c3, 0x481b: 0x00c3, 0x481c: 0x00c3, 0x481d: 0x00c3, + 0x481e: 0x00c3, 0x481f: 0x00c3, 0x4820: 0x00c3, 0x4821: 0x00c3, 0x4822: 0x00c3, 0x4823: 0x00c3, + 0x4824: 0x00c3, 0x4825: 0x00c3, 0x4826: 0x00c3, 0x4827: 0x00c3, 0x4828: 0x00c3, 0x4829: 0x00c3, + 0x482a: 0x00c3, 0x482b: 0x00c3, 0x482c: 0x00c3, 0x482d: 0x0080, 0x482e: 0x0080, 0x482f: 0x0080, + 0x4830: 0x0080, 0x4831: 0x0080, 0x4832: 0x0080, 0x4833: 0x0080, 0x4834: 0x0080, 0x4835: 0x00c3, + 0x4836: 0x0080, 0x4837: 0x0080, 0x4838: 0x0080, 0x4839: 0x0080, 0x483a: 0x0080, 0x483b: 0x0080, + 0x483c: 0x0080, 0x483d: 0x0080, 0x483e: 0x0080, 0x483f: 0x0080, + // Block 0x121, offset 0x4840 + 0x4840: 0x0080, 0x4841: 0x0080, 0x4842: 0x0080, 0x4843: 0x0080, 0x4844: 0x00c3, 0x4845: 0x0080, + 0x4846: 0x0080, 0x4847: 0x0080, 0x4848: 0x0080, 0x4849: 0x0080, 0x484a: 0x0080, 0x484b: 0x0080, + 0x485b: 0x00c3, 0x485c: 0x00c3, 0x485d: 0x00c3, + 0x485e: 0x00c3, 0x485f: 0x00c3, 0x4861: 0x00c3, 0x4862: 0x00c3, 0x4863: 0x00c3, + 0x4864: 0x00c3, 0x4865: 0x00c3, 0x4866: 0x00c3, 0x4867: 0x00c3, 0x4868: 0x00c3, 0x4869: 0x00c3, + 0x486a: 0x00c3, 0x486b: 0x00c3, 0x486c: 0x00c3, 0x486d: 0x00c3, 0x486e: 0x00c3, 0x486f: 0x00c3, + // Block 0x122, offset 0x4880 + 0x4880: 0x00c3, 0x4881: 0x00c3, 0x4882: 0x00c3, 0x4883: 0x00c3, 0x4884: 0x00c3, 0x4885: 0x00c3, + 0x4886: 0x00c3, 0x4888: 0x00c3, 0x4889: 0x00c3, 0x488a: 0x00c3, 0x488b: 0x00c3, + 0x488c: 0x00c3, 0x488d: 0x00c3, 0x488e: 0x00c3, 0x488f: 0x00c3, 0x4890: 0x00c3, 0x4891: 0x00c3, + 0x4892: 0x00c3, 0x4893: 0x00c3, 0x4894: 0x00c3, 0x4895: 0x00c3, 0x4896: 0x00c3, 0x4897: 0x00c3, + 0x4898: 0x00c3, 0x489b: 0x00c3, 0x489c: 0x00c3, 0x489d: 0x00c3, + 0x489e: 0x00c3, 0x489f: 0x00c3, 0x48a0: 0x00c3, 0x48a1: 0x00c3, 0x48a3: 0x00c3, + 0x48a4: 0x00c3, 0x48a6: 0x00c3, 0x48a7: 0x00c3, 0x48a8: 0x00c3, 0x48a9: 0x00c3, + 0x48aa: 0x00c3, + // Block 0x123, offset 0x48c0 + 0x48c0: 0x00c0, 0x48c1: 0x00c0, 0x48c2: 0x00c0, 0x48c3: 0x00c0, 0x48c4: 0x00c0, + 0x48c7: 0x0080, 0x48c8: 0x0080, 0x48c9: 0x0080, 0x48ca: 0x0080, 0x48cb: 0x0080, + 0x48cc: 0x0080, 0x48cd: 0x0080, 0x48ce: 0x0080, 0x48cf: 0x0080, 0x48d0: 0x00c3, 0x48d1: 0x00c3, + 0x48d2: 0x00c3, 0x48d3: 0x00c3, 0x48d4: 0x00c3, 0x48d5: 0x00c3, 0x48d6: 0x00c3, + // Block 0x124, offset 0x4900 + 0x4900: 0x00c2, 0x4901: 0x00c2, 0x4902: 0x00c2, 0x4903: 0x00c2, 0x4904: 0x00c2, 0x4905: 0x00c2, + 0x4906: 0x00c2, 0x4907: 0x00c2, 0x4908: 0x00c2, 0x4909: 0x00c2, 0x490a: 0x00c2, 0x490b: 0x00c2, + 0x490c: 0x00c2, 0x490d: 0x00c2, 0x490e: 0x00c2, 0x490f: 0x00c2, 0x4910: 0x00c2, 0x4911: 0x00c2, + 0x4912: 0x00c2, 0x4913: 0x00c2, 0x4914: 0x00c2, 0x4915: 0x00c2, 0x4916: 0x00c2, 0x4917: 0x00c2, + 0x4918: 0x00c2, 0x4919: 0x00c2, 0x491a: 0x00c2, 0x491b: 0x00c2, 0x491c: 0x00c2, 0x491d: 0x00c2, + 0x491e: 0x00c2, 0x491f: 0x00c2, 0x4920: 0x00c2, 0x4921: 0x00c2, 0x4922: 0x00c2, 0x4923: 0x00c2, + 0x4924: 0x00c2, 0x4925: 0x00c2, 0x4926: 0x00c2, 0x4927: 0x00c2, 0x4928: 0x00c2, 0x4929: 0x00c2, + 0x492a: 0x00c2, 0x492b: 0x00c2, 0x492c: 0x00c2, 0x492d: 0x00c2, 0x492e: 0x00c2, 0x492f: 0x00c2, + 0x4930: 0x00c2, 0x4931: 0x00c2, 0x4932: 0x00c2, 0x4933: 0x00c2, 0x4934: 0x00c2, 0x4935: 0x00c2, + 0x4936: 0x00c2, 0x4937: 0x00c2, 0x4938: 0x00c2, 0x4939: 0x00c2, 0x493a: 0x00c2, 0x493b: 0x00c2, + 0x493c: 0x00c2, 0x493d: 0x00c2, 0x493e: 0x00c2, 0x493f: 0x00c2, + // Block 0x125, offset 0x4940 + 0x4940: 0x00c2, 0x4941: 0x00c2, 0x4942: 0x00c2, 0x4943: 0x00c2, 0x4944: 0x00c3, 0x4945: 0x00c3, + 0x4946: 0x00c3, 0x4947: 0x00c3, 0x4948: 0x00c3, 0x4949: 0x00c3, 0x494a: 0x00c3, + 0x4950: 0x00c0, 0x4951: 0x00c0, + 0x4952: 0x00c0, 0x4953: 0x00c0, 0x4954: 0x00c0, 0x4955: 0x00c0, 0x4956: 0x00c0, 0x4957: 0x00c0, + 0x4958: 0x00c0, 0x4959: 0x00c0, + 0x495e: 0x0080, 0x495f: 0x0080, + // Block 0x126, offset 0x4980 + 0x4980: 0x0080, 0x4981: 0x0080, 0x4982: 0x0080, 0x4983: 0x0080, 0x4985: 0x0080, + 0x4986: 0x0080, 0x4987: 0x0080, 0x4988: 0x0080, 0x4989: 0x0080, 0x498a: 0x0080, 0x498b: 0x0080, + 0x498c: 0x0080, 0x498d: 0x0080, 0x498e: 0x0080, 0x498f: 0x0080, 0x4990: 0x0080, 0x4991: 0x0080, + 0x4992: 0x0080, 0x4993: 0x0080, 0x4994: 0x0080, 0x4995: 0x0080, 0x4996: 0x0080, 0x4997: 0x0080, + 0x4998: 0x0080, 0x4999: 0x0080, 0x499a: 0x0080, 0x499b: 0x0080, 0x499c: 0x0080, 0x499d: 0x0080, + 0x499e: 0x0080, 0x499f: 0x0080, 0x49a1: 0x0080, 0x49a2: 0x0080, + 0x49a4: 0x0080, 0x49a7: 0x0080, 0x49a9: 0x0080, + 0x49aa: 0x0080, 0x49ab: 0x0080, 0x49ac: 0x0080, 0x49ad: 0x0080, 0x49ae: 0x0080, 0x49af: 0x0080, + 0x49b0: 0x0080, 0x49b1: 0x0080, 0x49b2: 0x0080, 0x49b4: 0x0080, 0x49b5: 0x0080, + 0x49b6: 0x0080, 0x49b7: 0x0080, 0x49b9: 0x0080, 0x49bb: 0x0080, + // Block 0x127, offset 0x49c0 + 0x49c2: 0x0080, + 0x49c7: 0x0080, 0x49c9: 0x0080, 0x49cb: 0x0080, + 0x49cd: 0x0080, 0x49ce: 0x0080, 0x49cf: 0x0080, 0x49d1: 0x0080, + 0x49d2: 0x0080, 0x49d4: 0x0080, 0x49d7: 0x0080, + 0x49d9: 0x0080, 0x49db: 0x0080, 0x49dd: 0x0080, + 0x49df: 0x0080, 0x49e1: 0x0080, 0x49e2: 0x0080, + 0x49e4: 0x0080, 0x49e7: 0x0080, 0x49e8: 0x0080, 0x49e9: 0x0080, + 0x49ea: 0x0080, 0x49ec: 0x0080, 0x49ed: 0x0080, 0x49ee: 0x0080, 0x49ef: 0x0080, + 0x49f0: 0x0080, 0x49f1: 0x0080, 0x49f2: 0x0080, 0x49f4: 0x0080, 0x49f5: 0x0080, + 0x49f6: 0x0080, 0x49f7: 0x0080, 0x49f9: 0x0080, 0x49fa: 0x0080, 0x49fb: 0x0080, + 0x49fc: 0x0080, 0x49fe: 0x0080, + // Block 0x128, offset 0x4a00 + 0x4a00: 0x0080, 0x4a01: 0x0080, 0x4a02: 0x0080, 0x4a03: 0x0080, 0x4a04: 0x0080, 0x4a05: 0x0080, + 0x4a06: 0x0080, 0x4a07: 0x0080, 0x4a08: 0x0080, 0x4a09: 0x0080, 0x4a0b: 0x0080, + 0x4a0c: 0x0080, 0x4a0d: 0x0080, 0x4a0e: 0x0080, 0x4a0f: 0x0080, 0x4a10: 0x0080, 0x4a11: 0x0080, + 0x4a12: 0x0080, 0x4a13: 0x0080, 0x4a14: 0x0080, 0x4a15: 0x0080, 0x4a16: 0x0080, 0x4a17: 0x0080, + 0x4a18: 0x0080, 0x4a19: 0x0080, 0x4a1a: 0x0080, 0x4a1b: 0x0080, + 0x4a21: 0x0080, 0x4a22: 0x0080, 0x4a23: 0x0080, + 0x4a25: 0x0080, 0x4a26: 0x0080, 0x4a27: 0x0080, 0x4a28: 0x0080, 0x4a29: 0x0080, + 0x4a2b: 0x0080, 0x4a2c: 0x0080, 0x4a2d: 0x0080, 0x4a2e: 0x0080, 0x4a2f: 0x0080, + 0x4a30: 0x0080, 0x4a31: 0x0080, 0x4a32: 0x0080, 0x4a33: 0x0080, 0x4a34: 0x0080, 0x4a35: 0x0080, + 0x4a36: 0x0080, 0x4a37: 0x0080, 0x4a38: 0x0080, 0x4a39: 0x0080, 0x4a3a: 0x0080, 0x4a3b: 0x0080, + // Block 0x129, offset 0x4a40 + 0x4a70: 0x0080, 0x4a71: 0x0080, + // Block 0x12a, offset 0x4a80 + 0x4a80: 0x0080, 0x4a81: 0x0080, 0x4a82: 0x0080, 0x4a83: 0x0080, 0x4a84: 0x0080, 0x4a85: 0x0080, + 0x4a86: 0x0080, 0x4a87: 0x0080, 0x4a88: 0x0080, 0x4a89: 0x0080, 0x4a8a: 0x0080, 0x4a8b: 0x0080, + 0x4a8c: 0x0080, 0x4a8d: 0x0080, 0x4a8e: 0x0080, 0x4a8f: 0x0080, 0x4a90: 0x0080, 0x4a91: 0x0080, + 0x4a92: 0x0080, 0x4a93: 0x0080, 0x4a94: 0x0080, 0x4a95: 0x0080, 0x4a96: 0x0080, 0x4a97: 0x0080, + 0x4a98: 0x0080, 0x4a99: 0x0080, 0x4a9a: 0x0080, 0x4a9b: 0x0080, 0x4a9c: 0x0080, 0x4a9d: 0x0080, + 0x4a9e: 0x0080, 0x4a9f: 0x0080, 0x4aa0: 0x0080, 0x4aa1: 0x0080, 0x4aa2: 0x0080, 0x4aa3: 0x0080, + 0x4aa4: 0x0080, 0x4aa5: 0x0080, 0x4aa6: 0x0080, 0x4aa7: 0x0080, 0x4aa8: 0x0080, 0x4aa9: 0x0080, + 0x4aaa: 0x0080, 0x4aab: 0x0080, + 0x4ab0: 0x0080, 0x4ab1: 0x0080, 0x4ab2: 0x0080, 0x4ab3: 0x0080, 0x4ab4: 0x0080, 0x4ab5: 0x0080, + 0x4ab6: 0x0080, 0x4ab7: 0x0080, 0x4ab8: 0x0080, 0x4ab9: 0x0080, 0x4aba: 0x0080, 0x4abb: 0x0080, + 0x4abc: 0x0080, 0x4abd: 0x0080, 0x4abe: 0x0080, 0x4abf: 0x0080, + // Block 0x12b, offset 0x4ac0 + 0x4ac0: 0x0080, 0x4ac1: 0x0080, 0x4ac2: 0x0080, 0x4ac3: 0x0080, 0x4ac4: 0x0080, 0x4ac5: 0x0080, + 0x4ac6: 0x0080, 0x4ac7: 0x0080, 0x4ac8: 0x0080, 0x4ac9: 0x0080, 0x4aca: 0x0080, 0x4acb: 0x0080, + 0x4acc: 0x0080, 0x4acd: 0x0080, 0x4ace: 0x0080, 0x4acf: 0x0080, 0x4ad0: 0x0080, 0x4ad1: 0x0080, + 0x4ad2: 0x0080, 0x4ad3: 0x0080, + 0x4ae0: 0x0080, 0x4ae1: 0x0080, 0x4ae2: 0x0080, 0x4ae3: 0x0080, + 0x4ae4: 0x0080, 0x4ae5: 0x0080, 0x4ae6: 0x0080, 0x4ae7: 0x0080, 0x4ae8: 0x0080, 0x4ae9: 0x0080, + 0x4aea: 0x0080, 0x4aeb: 0x0080, 0x4aec: 0x0080, 0x4aed: 0x0080, 0x4aee: 0x0080, + 0x4af1: 0x0080, 0x4af2: 0x0080, 0x4af3: 0x0080, 0x4af4: 0x0080, 0x4af5: 0x0080, + 0x4af6: 0x0080, 0x4af7: 0x0080, 0x4af8: 0x0080, 0x4af9: 0x0080, 0x4afa: 0x0080, 0x4afb: 0x0080, + 0x4afc: 0x0080, 0x4afd: 0x0080, 0x4afe: 0x0080, 0x4aff: 0x0080, + // Block 0x12c, offset 0x4b00 + 0x4b01: 0x0080, 0x4b02: 0x0080, 0x4b03: 0x0080, 0x4b04: 0x0080, 0x4b05: 0x0080, + 0x4b06: 0x0080, 0x4b07: 0x0080, 0x4b08: 0x0080, 0x4b09: 0x0080, 0x4b0a: 0x0080, 0x4b0b: 0x0080, + 0x4b0c: 0x0080, 0x4b0d: 0x0080, 0x4b0e: 0x0080, 0x4b0f: 0x0080, 0x4b11: 0x0080, + 0x4b12: 0x0080, 0x4b13: 0x0080, 0x4b14: 0x0080, 0x4b15: 0x0080, 0x4b16: 0x0080, 0x4b17: 0x0080, + 0x4b18: 0x0080, 0x4b19: 0x0080, 0x4b1a: 0x0080, 0x4b1b: 0x0080, 0x4b1c: 0x0080, 0x4b1d: 0x0080, + 0x4b1e: 0x0080, 0x4b1f: 0x0080, 0x4b20: 0x0080, 0x4b21: 0x0080, 0x4b22: 0x0080, 0x4b23: 0x0080, + 0x4b24: 0x0080, 0x4b25: 0x0080, 0x4b26: 0x0080, 0x4b27: 0x0080, 0x4b28: 0x0080, 0x4b29: 0x0080, + 0x4b2a: 0x0080, 0x4b2b: 0x0080, 0x4b2c: 0x0080, 0x4b2d: 0x0080, 0x4b2e: 0x0080, 0x4b2f: 0x0080, + 0x4b30: 0x0080, 0x4b31: 0x0080, 0x4b32: 0x0080, 0x4b33: 0x0080, 0x4b34: 0x0080, 0x4b35: 0x0080, + // Block 0x12d, offset 0x4b40 + 0x4b40: 0x0080, 0x4b41: 0x0080, 0x4b42: 0x0080, 0x4b43: 0x0080, 0x4b44: 0x0080, 0x4b45: 0x0080, + 0x4b46: 0x0080, 0x4b47: 0x0080, 0x4b48: 0x0080, 0x4b49: 0x0080, 0x4b4a: 0x0080, 0x4b4b: 0x0080, + 0x4b4c: 0x0080, 0x4b50: 0x0080, 0x4b51: 0x0080, + 0x4b52: 0x0080, 0x4b53: 0x0080, 0x4b54: 0x0080, 0x4b55: 0x0080, 0x4b56: 0x0080, 0x4b57: 0x0080, + 0x4b58: 0x0080, 0x4b59: 0x0080, 0x4b5a: 0x0080, 0x4b5b: 0x0080, 0x4b5c: 0x0080, 0x4b5d: 0x0080, + 0x4b5e: 0x0080, 0x4b5f: 0x0080, 0x4b60: 0x0080, 0x4b61: 0x0080, 0x4b62: 0x0080, 0x4b63: 0x0080, + 0x4b64: 0x0080, 0x4b65: 0x0080, 0x4b66: 0x0080, 0x4b67: 0x0080, 0x4b68: 0x0080, 0x4b69: 0x0080, + 0x4b6a: 0x0080, 0x4b6b: 0x0080, 0x4b6c: 0x0080, 0x4b6d: 0x0080, 0x4b6e: 0x0080, + 0x4b70: 0x0080, 0x4b71: 0x0080, 0x4b72: 0x0080, 0x4b73: 0x0080, 0x4b74: 0x0080, 0x4b75: 0x0080, + 0x4b76: 0x0080, 0x4b77: 0x0080, 0x4b78: 0x0080, 0x4b79: 0x0080, 0x4b7a: 0x0080, 0x4b7b: 0x0080, + 0x4b7c: 0x0080, 0x4b7d: 0x0080, 0x4b7e: 0x0080, 0x4b7f: 0x0080, + // Block 0x12e, offset 0x4b80 + 0x4b80: 0x0080, 0x4b81: 0x0080, 0x4b82: 0x0080, 0x4b83: 0x0080, 0x4b84: 0x0080, 0x4b85: 0x0080, + 0x4b86: 0x0080, 0x4b87: 0x0080, 0x4b88: 0x0080, 0x4b89: 0x0080, 0x4b8a: 0x0080, 0x4b8b: 0x0080, + 0x4b8c: 0x0080, 0x4b8d: 0x0080, 0x4b8e: 0x0080, 0x4b8f: 0x0080, 0x4b90: 0x0080, 0x4b91: 0x0080, + 0x4b92: 0x0080, 0x4b93: 0x0080, 0x4b94: 0x0080, 0x4b95: 0x0080, 0x4b96: 0x0080, 0x4b97: 0x0080, + 0x4b98: 0x0080, 0x4b99: 0x0080, 0x4b9a: 0x0080, 0x4b9b: 0x0080, 0x4b9c: 0x0080, 0x4b9d: 0x0080, + 0x4b9e: 0x0080, 0x4b9f: 0x0080, 0x4ba0: 0x0080, 0x4ba1: 0x0080, 0x4ba2: 0x0080, 0x4ba3: 0x0080, + 0x4ba4: 0x0080, 0x4ba5: 0x0080, 0x4ba6: 0x0080, 0x4ba7: 0x0080, 0x4ba8: 0x0080, 0x4ba9: 0x0080, + 0x4baa: 0x0080, 0x4bab: 0x0080, 0x4bac: 0x0080, + // Block 0x12f, offset 0x4bc0 + 0x4be6: 0x0080, 0x4be7: 0x0080, 0x4be8: 0x0080, 0x4be9: 0x0080, + 0x4bea: 0x0080, 0x4beb: 0x0080, 0x4bec: 0x0080, 0x4bed: 0x0080, 0x4bee: 0x0080, 0x4bef: 0x0080, + 0x4bf0: 0x0080, 0x4bf1: 0x0080, 0x4bf2: 0x0080, 0x4bf3: 0x0080, 0x4bf4: 0x0080, 0x4bf5: 0x0080, + 0x4bf6: 0x0080, 0x4bf7: 0x0080, 0x4bf8: 0x0080, 0x4bf9: 0x0080, 0x4bfa: 0x0080, 0x4bfb: 0x0080, + 0x4bfc: 0x0080, 0x4bfd: 0x0080, 0x4bfe: 0x0080, 0x4bff: 0x0080, + // Block 0x130, offset 0x4c00 + 0x4c00: 0x008c, 0x4c01: 0x0080, 0x4c02: 0x0080, + 0x4c10: 0x0080, 0x4c11: 0x0080, + 0x4c12: 0x0080, 0x4c13: 0x0080, 0x4c14: 0x0080, 0x4c15: 0x0080, 0x4c16: 0x0080, 0x4c17: 0x0080, + 0x4c18: 0x0080, 0x4c19: 0x0080, 0x4c1a: 0x0080, 0x4c1b: 0x0080, 0x4c1c: 0x0080, 0x4c1d: 0x0080, + 0x4c1e: 0x0080, 0x4c1f: 0x0080, 0x4c20: 0x0080, 0x4c21: 0x0080, 0x4c22: 0x0080, 0x4c23: 0x0080, + 0x4c24: 0x0080, 0x4c25: 0x0080, 0x4c26: 0x0080, 0x4c27: 0x0080, 0x4c28: 0x0080, 0x4c29: 0x0080, + 0x4c2a: 0x0080, 0x4c2b: 0x0080, 0x4c2c: 0x0080, 0x4c2d: 0x0080, 0x4c2e: 0x0080, 0x4c2f: 0x0080, + 0x4c30: 0x0080, 0x4c31: 0x0080, 0x4c32: 0x0080, 0x4c33: 0x0080, 0x4c34: 0x0080, 0x4c35: 0x0080, + 0x4c36: 0x0080, 0x4c37: 0x0080, 0x4c38: 0x0080, 0x4c39: 0x0080, 0x4c3a: 0x0080, 0x4c3b: 0x0080, + // Block 0x131, offset 0x4c40 + 0x4c40: 0x0080, 0x4c41: 0x0080, 0x4c42: 0x0080, 0x4c43: 0x0080, 0x4c44: 0x0080, 0x4c45: 0x0080, + 0x4c46: 0x0080, 0x4c47: 0x0080, 0x4c48: 0x0080, + 0x4c50: 0x0080, 0x4c51: 0x0080, + // Block 0x132, offset 0x4c80 + 0x4c80: 0x0080, 0x4c81: 0x0080, 0x4c82: 0x0080, 0x4c83: 0x0080, 0x4c84: 0x0080, 0x4c85: 0x0080, + 0x4c86: 0x0080, 0x4c87: 0x0080, 0x4c88: 0x0080, 0x4c89: 0x0080, 0x4c8a: 0x0080, 0x4c8b: 0x0080, + 0x4c8c: 0x0080, 0x4c8d: 0x0080, 0x4c8e: 0x0080, 0x4c8f: 0x0080, 0x4c90: 0x0080, 0x4c91: 0x0080, + 0x4c92: 0x0080, + 0x4ca0: 0x0080, 0x4ca1: 0x0080, 0x4ca2: 0x0080, 0x4ca3: 0x0080, + 0x4ca4: 0x0080, 0x4ca5: 0x0080, 0x4ca6: 0x0080, 0x4ca7: 0x0080, 0x4ca8: 0x0080, 0x4ca9: 0x0080, + 0x4caa: 0x0080, 0x4cab: 0x0080, 0x4cac: 0x0080, + 0x4cb0: 0x0080, 0x4cb1: 0x0080, 0x4cb2: 0x0080, 0x4cb3: 0x0080, 0x4cb4: 0x0080, 0x4cb5: 0x0080, + 0x4cb6: 0x0080, + // Block 0x133, offset 0x4cc0 + 0x4cc0: 0x0080, 0x4cc1: 0x0080, 0x4cc2: 0x0080, 0x4cc3: 0x0080, 0x4cc4: 0x0080, 0x4cc5: 0x0080, + 0x4cc6: 0x0080, 0x4cc7: 0x0080, 0x4cc8: 0x0080, 0x4cc9: 0x0080, 0x4cca: 0x0080, 0x4ccb: 0x0080, + 0x4ccc: 0x0080, 0x4ccd: 0x0080, 0x4cce: 0x0080, 0x4ccf: 0x0080, 0x4cd0: 0x0080, 0x4cd1: 0x0080, + 0x4cd2: 0x0080, 0x4cd3: 0x0080, 0x4cd4: 0x0080, 0x4cd5: 0x0080, 0x4cd6: 0x0080, 0x4cd7: 0x0080, + 0x4cd8: 0x0080, 0x4cd9: 0x0080, 0x4cda: 0x0080, 0x4cdb: 0x0080, 0x4cdc: 0x0080, 0x4cdd: 0x0080, + 0x4cde: 0x0080, 0x4cdf: 0x0080, 0x4ce0: 0x0080, 0x4ce1: 0x0080, 0x4ce2: 0x0080, 0x4ce3: 0x0080, + 0x4ce4: 0x0080, 0x4ce5: 0x0080, 0x4ce6: 0x0080, 0x4ce7: 0x0080, 0x4ce8: 0x0080, 0x4ce9: 0x0080, + 0x4cea: 0x0080, 0x4ceb: 0x0080, 0x4cec: 0x0080, 0x4ced: 0x0080, 0x4cee: 0x0080, 0x4cef: 0x0080, + 0x4cf0: 0x0080, 0x4cf1: 0x0080, 0x4cf2: 0x0080, 0x4cf3: 0x0080, + // Block 0x134, offset 0x4d00 + 0x4d00: 0x0080, 0x4d01: 0x0080, 0x4d02: 0x0080, 0x4d03: 0x0080, 0x4d04: 0x0080, 0x4d05: 0x0080, + 0x4d06: 0x0080, 0x4d07: 0x0080, 0x4d08: 0x0080, 0x4d09: 0x0080, 0x4d0a: 0x0080, 0x4d0b: 0x0080, + 0x4d0c: 0x0080, 0x4d0d: 0x0080, 0x4d0e: 0x0080, 0x4d0f: 0x0080, 0x4d10: 0x0080, 0x4d11: 0x0080, + 0x4d12: 0x0080, 0x4d13: 0x0080, 0x4d14: 0x0080, + // Block 0x135, offset 0x4d40 + 0x4d40: 0x0080, 0x4d41: 0x0080, 0x4d42: 0x0080, 0x4d43: 0x0080, 0x4d44: 0x0080, 0x4d45: 0x0080, + 0x4d46: 0x0080, 0x4d47: 0x0080, 0x4d48: 0x0080, 0x4d49: 0x0080, 0x4d4a: 0x0080, 0x4d4b: 0x0080, + 0x4d50: 0x0080, 0x4d51: 0x0080, + 0x4d52: 0x0080, 0x4d53: 0x0080, 0x4d54: 0x0080, 0x4d55: 0x0080, 0x4d56: 0x0080, 0x4d57: 0x0080, + 0x4d58: 0x0080, 0x4d59: 0x0080, 0x4d5a: 0x0080, 0x4d5b: 0x0080, 0x4d5c: 0x0080, 0x4d5d: 0x0080, + 0x4d5e: 0x0080, 0x4d5f: 0x0080, 0x4d60: 0x0080, 0x4d61: 0x0080, 0x4d62: 0x0080, 0x4d63: 0x0080, + 0x4d64: 0x0080, 0x4d65: 0x0080, 0x4d66: 0x0080, 0x4d67: 0x0080, 0x4d68: 0x0080, 0x4d69: 0x0080, + 0x4d6a: 0x0080, 0x4d6b: 0x0080, 0x4d6c: 0x0080, 0x4d6d: 0x0080, 0x4d6e: 0x0080, 0x4d6f: 0x0080, + 0x4d70: 0x0080, 0x4d71: 0x0080, 0x4d72: 0x0080, 0x4d73: 0x0080, 0x4d74: 0x0080, 0x4d75: 0x0080, + 0x4d76: 0x0080, 0x4d77: 0x0080, 0x4d78: 0x0080, 0x4d79: 0x0080, 0x4d7a: 0x0080, 0x4d7b: 0x0080, + 0x4d7c: 0x0080, 0x4d7d: 0x0080, 0x4d7e: 0x0080, 0x4d7f: 0x0080, + // Block 0x136, offset 0x4d80 + 0x4d80: 0x0080, 0x4d81: 0x0080, 0x4d82: 0x0080, 0x4d83: 0x0080, 0x4d84: 0x0080, 0x4d85: 0x0080, + 0x4d86: 0x0080, 0x4d87: 0x0080, + 0x4d90: 0x0080, 0x4d91: 0x0080, + 0x4d92: 0x0080, 0x4d93: 0x0080, 0x4d94: 0x0080, 0x4d95: 0x0080, 0x4d96: 0x0080, 0x4d97: 0x0080, + 0x4d98: 0x0080, 0x4d99: 0x0080, + 0x4da0: 0x0080, 0x4da1: 0x0080, 0x4da2: 0x0080, 0x4da3: 0x0080, + 0x4da4: 0x0080, 0x4da5: 0x0080, 0x4da6: 0x0080, 0x4da7: 0x0080, 0x4da8: 0x0080, 0x4da9: 0x0080, + 0x4daa: 0x0080, 0x4dab: 0x0080, 0x4dac: 0x0080, 0x4dad: 0x0080, 0x4dae: 0x0080, 0x4daf: 0x0080, + 0x4db0: 0x0080, 0x4db1: 0x0080, 0x4db2: 0x0080, 0x4db3: 0x0080, 0x4db4: 0x0080, 0x4db5: 0x0080, + 0x4db6: 0x0080, 0x4db7: 0x0080, 0x4db8: 0x0080, 0x4db9: 0x0080, 0x4dba: 0x0080, 0x4dbb: 0x0080, + 0x4dbc: 0x0080, 0x4dbd: 0x0080, 0x4dbe: 0x0080, 0x4dbf: 0x0080, + // Block 0x137, offset 0x4dc0 + 0x4dc0: 0x0080, 0x4dc1: 0x0080, 0x4dc2: 0x0080, 0x4dc3: 0x0080, 0x4dc4: 0x0080, 0x4dc5: 0x0080, + 0x4dc6: 0x0080, 0x4dc7: 0x0080, + 0x4dd0: 0x0080, 0x4dd1: 0x0080, + 0x4dd2: 0x0080, 0x4dd3: 0x0080, 0x4dd4: 0x0080, 0x4dd5: 0x0080, 0x4dd6: 0x0080, 0x4dd7: 0x0080, + 0x4dd8: 0x0080, 0x4dd9: 0x0080, 0x4dda: 0x0080, 0x4ddb: 0x0080, 0x4ddc: 0x0080, 0x4ddd: 0x0080, + 0x4dde: 0x0080, 0x4ddf: 0x0080, 0x4de0: 0x0080, 0x4de1: 0x0080, 0x4de2: 0x0080, 0x4de3: 0x0080, + 0x4de4: 0x0080, 0x4de5: 0x0080, 0x4de6: 0x0080, 0x4de7: 0x0080, 0x4de8: 0x0080, 0x4de9: 0x0080, + 0x4dea: 0x0080, 0x4deb: 0x0080, 0x4dec: 0x0080, 0x4ded: 0x0080, + // Block 0x138, offset 0x4e00 + 0x4e10: 0x0080, 0x4e11: 0x0080, + 0x4e12: 0x0080, 0x4e13: 0x0080, 0x4e14: 0x0080, 0x4e15: 0x0080, 0x4e16: 0x0080, 0x4e17: 0x0080, + 0x4e18: 0x0080, 0x4e19: 0x0080, 0x4e1a: 0x0080, 0x4e1b: 0x0080, 0x4e1c: 0x0080, 0x4e1d: 0x0080, + 0x4e1e: 0x0080, 0x4e20: 0x0080, 0x4e21: 0x0080, 0x4e22: 0x0080, 0x4e23: 0x0080, + 0x4e24: 0x0080, 0x4e25: 0x0080, 0x4e26: 0x0080, 0x4e27: 0x0080, + 0x4e30: 0x0080, 0x4e33: 0x0080, 0x4e34: 0x0080, 0x4e35: 0x0080, + 0x4e36: 0x0080, 0x4e37: 0x0080, 0x4e38: 0x0080, 0x4e39: 0x0080, 0x4e3a: 0x0080, 0x4e3b: 0x0080, + 0x4e3c: 0x0080, 0x4e3d: 0x0080, 0x4e3e: 0x0080, + // Block 0x139, offset 0x4e40 + 0x4e40: 0x0080, 0x4e41: 0x0080, 0x4e42: 0x0080, 0x4e43: 0x0080, 0x4e44: 0x0080, 0x4e45: 0x0080, + 0x4e46: 0x0080, 0x4e47: 0x0080, 0x4e48: 0x0080, 0x4e49: 0x0080, 0x4e4a: 0x0080, 0x4e4b: 0x0080, + 0x4e50: 0x0080, 0x4e51: 0x0080, + 0x4e52: 0x0080, 0x4e53: 0x0080, 0x4e54: 0x0080, 0x4e55: 0x0080, 0x4e56: 0x0080, 0x4e57: 0x0080, + 0x4e58: 0x0080, 0x4e59: 0x0080, 0x4e5a: 0x0080, 0x4e5b: 0x0080, 0x4e5c: 0x0080, 0x4e5d: 0x0080, + 0x4e5e: 0x0080, + // Block 0x13a, offset 0x4e80 + 0x4e80: 0x0080, 0x4e81: 0x0080, 0x4e82: 0x0080, 0x4e83: 0x0080, 0x4e84: 0x0080, 0x4e85: 0x0080, + 0x4e86: 0x0080, 0x4e87: 0x0080, 0x4e88: 0x0080, 0x4e89: 0x0080, 0x4e8a: 0x0080, 0x4e8b: 0x0080, + 0x4e8c: 0x0080, 0x4e8d: 0x0080, 0x4e8e: 0x0080, 0x4e8f: 0x0080, 0x4e90: 0x0080, 0x4e91: 0x0080, + // Block 0x13b, offset 0x4ec0 + 0x4ec0: 0x0080, + // Block 0x13c, offset 0x4f00 + 0x4f00: 0x00cc, 0x4f01: 0x00cc, 0x4f02: 0x00cc, 0x4f03: 0x00cc, 0x4f04: 0x00cc, 0x4f05: 0x00cc, + 0x4f06: 0x00cc, 0x4f07: 0x00cc, 0x4f08: 0x00cc, 0x4f09: 0x00cc, 0x4f0a: 0x00cc, 0x4f0b: 0x00cc, + 0x4f0c: 0x00cc, 0x4f0d: 0x00cc, 0x4f0e: 0x00cc, 0x4f0f: 0x00cc, 0x4f10: 0x00cc, 0x4f11: 0x00cc, + 0x4f12: 0x00cc, 0x4f13: 0x00cc, 0x4f14: 0x00cc, 0x4f15: 0x00cc, 0x4f16: 0x00cc, + // Block 0x13d, offset 0x4f40 + 0x4f40: 0x00cc, 0x4f41: 0x00cc, 0x4f42: 0x00cc, 0x4f43: 0x00cc, 0x4f44: 0x00cc, 0x4f45: 0x00cc, + 0x4f46: 0x00cc, 0x4f47: 0x00cc, 0x4f48: 0x00cc, 0x4f49: 0x00cc, 0x4f4a: 0x00cc, 0x4f4b: 0x00cc, + 0x4f4c: 0x00cc, 0x4f4d: 0x00cc, 0x4f4e: 0x00cc, 0x4f4f: 0x00cc, 0x4f50: 0x00cc, 0x4f51: 0x00cc, + 0x4f52: 0x00cc, 0x4f53: 0x00cc, 0x4f54: 0x00cc, 0x4f55: 0x00cc, 0x4f56: 0x00cc, 0x4f57: 0x00cc, + 0x4f58: 0x00cc, 0x4f59: 0x00cc, 0x4f5a: 0x00cc, 0x4f5b: 0x00cc, 0x4f5c: 0x00cc, 0x4f5d: 0x00cc, + 0x4f5e: 0x00cc, 0x4f5f: 0x00cc, 0x4f60: 0x00cc, 0x4f61: 0x00cc, 0x4f62: 0x00cc, 0x4f63: 0x00cc, + 0x4f64: 0x00cc, 0x4f65: 0x00cc, 0x4f66: 0x00cc, 0x4f67: 0x00cc, 0x4f68: 0x00cc, 0x4f69: 0x00cc, + 0x4f6a: 0x00cc, 0x4f6b: 0x00cc, 0x4f6c: 0x00cc, 0x4f6d: 0x00cc, 0x4f6e: 0x00cc, 0x4f6f: 0x00cc, + 0x4f70: 0x00cc, 0x4f71: 0x00cc, 0x4f72: 0x00cc, 0x4f73: 0x00cc, 0x4f74: 0x00cc, + // Block 0x13e, offset 0x4f80 + 0x4f80: 0x00cc, 0x4f81: 0x00cc, 0x4f82: 0x00cc, 0x4f83: 0x00cc, 0x4f84: 0x00cc, 0x4f85: 0x00cc, + 0x4f86: 0x00cc, 0x4f87: 0x00cc, 0x4f88: 0x00cc, 0x4f89: 0x00cc, 0x4f8a: 0x00cc, 0x4f8b: 0x00cc, + 0x4f8c: 0x00cc, 0x4f8d: 0x00cc, 0x4f8e: 0x00cc, 0x4f8f: 0x00cc, 0x4f90: 0x00cc, 0x4f91: 0x00cc, + 0x4f92: 0x00cc, 0x4f93: 0x00cc, 0x4f94: 0x00cc, 0x4f95: 0x00cc, 0x4f96: 0x00cc, 0x4f97: 0x00cc, + 0x4f98: 0x00cc, 0x4f99: 0x00cc, 0x4f9a: 0x00cc, 0x4f9b: 0x00cc, 0x4f9c: 0x00cc, 0x4f9d: 0x00cc, + 0x4fa0: 0x00cc, 0x4fa1: 0x00cc, 0x4fa2: 0x00cc, 0x4fa3: 0x00cc, + 0x4fa4: 0x00cc, 0x4fa5: 0x00cc, 0x4fa6: 0x00cc, 0x4fa7: 0x00cc, 0x4fa8: 0x00cc, 0x4fa9: 0x00cc, + 0x4faa: 0x00cc, 0x4fab: 0x00cc, 0x4fac: 0x00cc, 0x4fad: 0x00cc, 0x4fae: 0x00cc, 0x4faf: 0x00cc, + 0x4fb0: 0x00cc, 0x4fb1: 0x00cc, 0x4fb2: 0x00cc, 0x4fb3: 0x00cc, 0x4fb4: 0x00cc, 0x4fb5: 0x00cc, + 0x4fb6: 0x00cc, 0x4fb7: 0x00cc, 0x4fb8: 0x00cc, 0x4fb9: 0x00cc, 0x4fba: 0x00cc, 0x4fbb: 0x00cc, + 0x4fbc: 0x00cc, 0x4fbd: 0x00cc, 0x4fbe: 0x00cc, 0x4fbf: 0x00cc, + // Block 0x13f, offset 0x4fc0 + 0x4fc0: 0x00cc, 0x4fc1: 0x00cc, 0x4fc2: 0x00cc, 0x4fc3: 0x00cc, 0x4fc4: 0x00cc, 0x4fc5: 0x00cc, + 0x4fc6: 0x00cc, 0x4fc7: 0x00cc, 0x4fc8: 0x00cc, 0x4fc9: 0x00cc, 0x4fca: 0x00cc, 0x4fcb: 0x00cc, + 0x4fcc: 0x00cc, 0x4fcd: 0x00cc, 0x4fce: 0x00cc, 0x4fcf: 0x00cc, 0x4fd0: 0x00cc, 0x4fd1: 0x00cc, + 0x4fd2: 0x00cc, 0x4fd3: 0x00cc, 0x4fd4: 0x00cc, 0x4fd5: 0x00cc, 0x4fd6: 0x00cc, 0x4fd7: 0x00cc, + 0x4fd8: 0x00cc, 0x4fd9: 0x00cc, 0x4fda: 0x00cc, 0x4fdb: 0x00cc, 0x4fdc: 0x00cc, 0x4fdd: 0x00cc, + 0x4fde: 0x00cc, 0x4fdf: 0x00cc, 0x4fe0: 0x00cc, 0x4fe1: 0x00cc, + // Block 0x140, offset 0x5000 + 0x5000: 0x008c, 0x5001: 0x008c, 0x5002: 0x008c, 0x5003: 0x008c, 0x5004: 0x008c, 0x5005: 0x008c, + 0x5006: 0x008c, 0x5007: 0x008c, 0x5008: 0x008c, 0x5009: 0x008c, 0x500a: 0x008c, 0x500b: 0x008c, + 0x500c: 0x008c, 0x500d: 0x008c, 0x500e: 0x008c, 0x500f: 0x008c, 0x5010: 0x008c, 0x5011: 0x008c, + 0x5012: 0x008c, 0x5013: 0x008c, 0x5014: 0x008c, 0x5015: 0x008c, 0x5016: 0x008c, 0x5017: 0x008c, + 0x5018: 0x008c, 0x5019: 0x008c, 0x501a: 0x008c, 0x501b: 0x008c, 0x501c: 0x008c, 0x501d: 0x008c, + // Block 0x141, offset 0x5040 + 0x5041: 0x0040, + 0x5060: 0x0040, 0x5061: 0x0040, 0x5062: 0x0040, 0x5063: 0x0040, + 0x5064: 0x0040, 0x5065: 0x0040, 0x5066: 0x0040, 0x5067: 0x0040, 0x5068: 0x0040, 0x5069: 0x0040, + 0x506a: 0x0040, 0x506b: 0x0040, 0x506c: 0x0040, 0x506d: 0x0040, 0x506e: 0x0040, 0x506f: 0x0040, + 0x5070: 0x0040, 0x5071: 0x0040, 0x5072: 0x0040, 0x5073: 0x0040, 0x5074: 0x0040, 0x5075: 0x0040, + 0x5076: 0x0040, 0x5077: 0x0040, 0x5078: 0x0040, 0x5079: 0x0040, 0x507a: 0x0040, 0x507b: 0x0040, + 0x507c: 0x0040, 0x507d: 0x0040, 0x507e: 0x0040, 0x507f: 0x0040, + // Block 0x142, offset 0x5080 + 0x5080: 0x0040, 0x5081: 0x0040, 0x5082: 0x0040, 0x5083: 0x0040, 0x5084: 0x0040, 0x5085: 0x0040, + 0x5086: 0x0040, 0x5087: 0x0040, 0x5088: 0x0040, 0x5089: 0x0040, 0x508a: 0x0040, 0x508b: 0x0040, + 0x508c: 0x0040, 0x508d: 0x0040, 0x508e: 0x0040, 0x508f: 0x0040, 0x5090: 0x0040, 0x5091: 0x0040, + 0x5092: 0x0040, 0x5093: 0x0040, 0x5094: 0x0040, 0x5095: 0x0040, 0x5096: 0x0040, 0x5097: 0x0040, + 0x5098: 0x0040, 0x5099: 0x0040, 0x509a: 0x0040, 0x509b: 0x0040, 0x509c: 0x0040, 0x509d: 0x0040, + 0x509e: 0x0040, 0x509f: 0x0040, 0x50a0: 0x0040, 0x50a1: 0x0040, 0x50a2: 0x0040, 0x50a3: 0x0040, + 0x50a4: 0x0040, 0x50a5: 0x0040, 0x50a6: 0x0040, 0x50a7: 0x0040, 0x50a8: 0x0040, 0x50a9: 0x0040, + 0x50aa: 0x0040, 0x50ab: 0x0040, 0x50ac: 0x0040, 0x50ad: 0x0040, 0x50ae: 0x0040, 0x50af: 0x0040, + // Block 0x143, offset 0x50c0 + 0x50c0: 0x0040, 0x50c1: 0x0040, 0x50c2: 0x0040, 0x50c3: 0x0040, 0x50c4: 0x0040, 0x50c5: 0x0040, + 0x50c6: 0x0040, 0x50c7: 0x0040, 0x50c8: 0x0040, 0x50c9: 0x0040, 0x50ca: 0x0040, 0x50cb: 0x0040, + 0x50cc: 0x0040, 0x50cd: 0x0040, 0x50ce: 0x0040, 0x50cf: 0x0040, 0x50d0: 0x0040, 0x50d1: 0x0040, + 0x50d2: 0x0040, 0x50d3: 0x0040, 0x50d4: 0x0040, 0x50d5: 0x0040, 0x50d6: 0x0040, 0x50d7: 0x0040, + 0x50d8: 0x0040, 0x50d9: 0x0040, 0x50da: 0x0040, 0x50db: 0x0040, 0x50dc: 0x0040, 0x50dd: 0x0040, + 0x50de: 0x0040, 0x50df: 0x0040, 0x50e0: 0x0040, 0x50e1: 0x0040, 0x50e2: 0x0040, 0x50e3: 0x0040, + 0x50e4: 0x0040, 0x50e5: 0x0040, 0x50e6: 0x0040, 0x50e7: 0x0040, 0x50e8: 0x0040, 0x50e9: 0x0040, + 0x50ea: 0x0040, 0x50eb: 0x0040, 0x50ec: 0x0040, 0x50ed: 0x0040, 0x50ee: 0x0040, 0x50ef: 0x0040, + 0x50f0: 0x0040, 0x50f1: 0x0040, 0x50f2: 0x0040, 0x50f3: 0x0040, 0x50f4: 0x0040, 0x50f5: 0x0040, + 0x50f6: 0x0040, 0x50f7: 0x0040, 0x50f8: 0x0040, 0x50f9: 0x0040, 0x50fa: 0x0040, 0x50fb: 0x0040, + 0x50fc: 0x0040, 0x50fd: 0x0040, +} + +// derivedPropertiesIndex: 36 blocks, 2304 entries, 4608 bytes +// Block 0 is the zero block. +var derivedPropertiesIndex = [2304]uint16{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x02, 0xc4: 0x03, 0xc5: 0x04, 0xc6: 0x05, 0xc7: 0x06, + 0xc8: 0x05, 0xc9: 0x05, 0xca: 0x07, 0xcb: 0x08, 0xcc: 0x09, 0xcd: 0x0a, 0xce: 0x0b, 0xcf: 0x0c, + 0xd0: 0x05, 0xd1: 0x05, 0xd2: 0x0d, 0xd3: 0x05, 0xd4: 0x0e, 0xd5: 0x0f, 0xd6: 0x10, 0xd7: 0x11, + 0xd8: 0x12, 0xd9: 0x13, 0xda: 0x14, 0xdb: 0x15, 0xdc: 0x16, 0xdd: 0x17, 0xde: 0x18, 0xdf: 0x19, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, 0xe5: 0x07, 0xe6: 0x07, 0xe7: 0x07, + 0xe8: 0x07, 0xe9: 0x08, 0xea: 0x09, 0xeb: 0x0a, 0xec: 0x0a, 0xed: 0x0b, 0xee: 0x0c, 0xef: 0x0d, + 0xf0: 0x1d, 0xf3: 0x20, 0xf4: 0x21, + // Block 0x4, offset 0x100 + 0x120: 0x1a, 0x121: 0x1b, 0x122: 0x1c, 0x123: 0x1d, 0x124: 0x1e, 0x125: 0x1f, 0x126: 0x20, 0x127: 0x21, + 0x128: 0x22, 0x129: 0x23, 0x12a: 0x24, 0x12b: 0x25, 0x12c: 0x26, 0x12d: 0x27, 0x12e: 0x28, 0x12f: 0x29, + 0x130: 0x2a, 0x131: 0x2b, 0x132: 0x2c, 0x133: 0x2d, 0x134: 0x2e, 0x135: 0x2f, 0x136: 0x30, 0x137: 0x31, + 0x138: 0x32, 0x139: 0x33, 0x13a: 0x34, 0x13b: 0x35, 0x13c: 0x36, 0x13d: 0x37, 0x13e: 0x38, 0x13f: 0x39, + // Block 0x5, offset 0x140 + 0x140: 0x3a, 0x141: 0x3b, 0x142: 0x3c, 0x143: 0x3d, 0x144: 0x3e, 0x145: 0x3e, 0x146: 0x3e, 0x147: 0x3e, + 0x148: 0x05, 0x149: 0x3f, 0x14a: 0x40, 0x14b: 0x41, 0x14c: 0x42, 0x14d: 0x43, 0x14e: 0x44, 0x14f: 0x45, + 0x150: 0x46, 0x151: 0x05, 0x152: 0x05, 0x153: 0x05, 0x154: 0x05, 0x155: 0x05, 0x156: 0x05, 0x157: 0x05, + 0x158: 0x05, 0x159: 0x47, 0x15a: 0x48, 0x15b: 0x49, 0x15c: 0x4a, 0x15d: 0x4b, 0x15e: 0x4c, 0x15f: 0x4d, + 0x160: 0x4e, 0x161: 0x4f, 0x162: 0x50, 0x163: 0x51, 0x164: 0x52, 0x165: 0x53, 0x166: 0x54, 0x167: 0x55, + 0x168: 0x56, 0x169: 0x57, 0x16a: 0x58, 0x16c: 0x59, 0x16d: 0x5a, 0x16e: 0x5b, 0x16f: 0x5c, + 0x170: 0x5d, 0x171: 0x5e, 0x172: 0x5f, 0x173: 0x60, 0x174: 0x61, 0x175: 0x62, 0x176: 0x63, 0x177: 0x64, + 0x178: 0x05, 0x179: 0x05, 0x17a: 0x65, 0x17b: 0x05, 0x17c: 0x66, 0x17d: 0x67, 0x17e: 0x68, 0x17f: 0x69, + // Block 0x6, offset 0x180 + 0x180: 0x6a, 0x181: 0x6b, 0x182: 0x6c, 0x183: 0x6d, 0x184: 0x6e, 0x185: 0x6f, 0x186: 0x70, 0x187: 0x71, + 0x188: 0x71, 0x189: 0x71, 0x18a: 0x71, 0x18b: 0x71, 0x18c: 0x71, 0x18d: 0x71, 0x18e: 0x71, 0x18f: 0x72, + 0x190: 0x73, 0x191: 0x74, 0x192: 0x71, 0x193: 0x71, 0x194: 0x71, 0x195: 0x71, 0x196: 0x71, 0x197: 0x71, + 0x198: 0x71, 0x199: 0x71, 0x19a: 0x71, 0x19b: 0x71, 0x19c: 0x71, 0x19d: 0x71, 0x19e: 0x71, 0x19f: 0x71, + 0x1a0: 0x71, 0x1a1: 0x71, 0x1a2: 0x71, 0x1a3: 0x71, 0x1a4: 0x71, 0x1a5: 0x71, 0x1a6: 0x71, 0x1a7: 0x71, + 0x1a8: 0x71, 0x1a9: 0x71, 0x1aa: 0x71, 0x1ab: 0x71, 0x1ac: 0x71, 0x1ad: 0x75, 0x1ae: 0x76, 0x1af: 0x77, + 0x1b0: 0x78, 0x1b1: 0x79, 0x1b2: 0x05, 0x1b3: 0x7a, 0x1b4: 0x7b, 0x1b5: 0x7c, 0x1b6: 0x7d, 0x1b7: 0x7e, + 0x1b8: 0x7f, 0x1b9: 0x80, 0x1ba: 0x81, 0x1bb: 0x82, 0x1bc: 0x83, 0x1bd: 0x83, 0x1be: 0x83, 0x1bf: 0x84, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x85, 0x1c1: 0x86, 0x1c2: 0x87, 0x1c3: 0x88, 0x1c4: 0x89, 0x1c5: 0x8a, 0x1c6: 0x8b, 0x1c7: 0x8c, + 0x1c8: 0x8d, 0x1c9: 0x71, 0x1ca: 0x71, 0x1cb: 0x8e, 0x1cc: 0x83, 0x1cd: 0x8f, 0x1ce: 0x71, 0x1cf: 0x71, + 0x1d0: 0x90, 0x1d1: 0x90, 0x1d2: 0x90, 0x1d3: 0x90, 0x1d4: 0x90, 0x1d5: 0x90, 0x1d6: 0x90, 0x1d7: 0x90, + 0x1d8: 0x90, 0x1d9: 0x90, 0x1da: 0x90, 0x1db: 0x90, 0x1dc: 0x90, 0x1dd: 0x90, 0x1de: 0x90, 0x1df: 0x90, + 0x1e0: 0x90, 0x1e1: 0x90, 0x1e2: 0x90, 0x1e3: 0x90, 0x1e4: 0x90, 0x1e5: 0x90, 0x1e6: 0x90, 0x1e7: 0x90, + 0x1e8: 0x90, 0x1e9: 0x90, 0x1ea: 0x90, 0x1eb: 0x90, 0x1ec: 0x90, 0x1ed: 0x90, 0x1ee: 0x90, 0x1ef: 0x90, + 0x1f0: 0x90, 0x1f1: 0x90, 0x1f2: 0x90, 0x1f3: 0x90, 0x1f4: 0x90, 0x1f5: 0x90, 0x1f6: 0x90, 0x1f7: 0x90, + 0x1f8: 0x90, 0x1f9: 0x90, 0x1fa: 0x90, 0x1fb: 0x90, 0x1fc: 0x90, 0x1fd: 0x90, 0x1fe: 0x90, 0x1ff: 0x90, + // Block 0x8, offset 0x200 + 0x200: 0x90, 0x201: 0x90, 0x202: 0x90, 0x203: 0x90, 0x204: 0x90, 0x205: 0x90, 0x206: 0x90, 0x207: 0x90, + 0x208: 0x90, 0x209: 0x90, 0x20a: 0x90, 0x20b: 0x90, 0x20c: 0x90, 0x20d: 0x90, 0x20e: 0x90, 0x20f: 0x90, + 0x210: 0x90, 0x211: 0x90, 0x212: 0x90, 0x213: 0x90, 0x214: 0x90, 0x215: 0x90, 0x216: 0x90, 0x217: 0x90, + 0x218: 0x90, 0x219: 0x90, 0x21a: 0x90, 0x21b: 0x90, 0x21c: 0x90, 0x21d: 0x90, 0x21e: 0x90, 0x21f: 0x90, + 0x220: 0x90, 0x221: 0x90, 0x222: 0x90, 0x223: 0x90, 0x224: 0x90, 0x225: 0x90, 0x226: 0x90, 0x227: 0x90, + 0x228: 0x90, 0x229: 0x90, 0x22a: 0x90, 0x22b: 0x90, 0x22c: 0x90, 0x22d: 0x90, 0x22e: 0x90, 0x22f: 0x90, + 0x230: 0x90, 0x231: 0x90, 0x232: 0x90, 0x233: 0x90, 0x234: 0x90, 0x235: 0x90, 0x236: 0x91, 0x237: 0x71, + 0x238: 0x90, 0x239: 0x90, 0x23a: 0x90, 0x23b: 0x90, 0x23c: 0x90, 0x23d: 0x90, 0x23e: 0x90, 0x23f: 0x90, + // Block 0x9, offset 0x240 + 0x240: 0x90, 0x241: 0x90, 0x242: 0x90, 0x243: 0x90, 0x244: 0x90, 0x245: 0x90, 0x246: 0x90, 0x247: 0x90, + 0x248: 0x90, 0x249: 0x90, 0x24a: 0x90, 0x24b: 0x90, 0x24c: 0x90, 0x24d: 0x90, 0x24e: 0x90, 0x24f: 0x90, + 0x250: 0x90, 0x251: 0x90, 0x252: 0x90, 0x253: 0x90, 0x254: 0x90, 0x255: 0x90, 0x256: 0x90, 0x257: 0x90, + 0x258: 0x90, 0x259: 0x90, 0x25a: 0x90, 0x25b: 0x90, 0x25c: 0x90, 0x25d: 0x90, 0x25e: 0x90, 0x25f: 0x90, + 0x260: 0x90, 0x261: 0x90, 0x262: 0x90, 0x263: 0x90, 0x264: 0x90, 0x265: 0x90, 0x266: 0x90, 0x267: 0x90, + 0x268: 0x90, 0x269: 0x90, 0x26a: 0x90, 0x26b: 0x90, 0x26c: 0x90, 0x26d: 0x90, 0x26e: 0x90, 0x26f: 0x90, + 0x270: 0x90, 0x271: 0x90, 0x272: 0x90, 0x273: 0x90, 0x274: 0x90, 0x275: 0x90, 0x276: 0x90, 0x277: 0x90, + 0x278: 0x90, 0x279: 0x90, 0x27a: 0x90, 0x27b: 0x90, 0x27c: 0x90, 0x27d: 0x90, 0x27e: 0x90, 0x27f: 0x90, + // Block 0xa, offset 0x280 + 0x280: 0x90, 0x281: 0x90, 0x282: 0x90, 0x283: 0x90, 0x284: 0x90, 0x285: 0x90, 0x286: 0x90, 0x287: 0x90, + 0x288: 0x90, 0x289: 0x90, 0x28a: 0x90, 0x28b: 0x90, 0x28c: 0x90, 0x28d: 0x90, 0x28e: 0x90, 0x28f: 0x90, + 0x290: 0x90, 0x291: 0x90, 0x292: 0x90, 0x293: 0x90, 0x294: 0x90, 0x295: 0x90, 0x296: 0x90, 0x297: 0x90, + 0x298: 0x90, 0x299: 0x90, 0x29a: 0x90, 0x29b: 0x90, 0x29c: 0x90, 0x29d: 0x90, 0x29e: 0x90, 0x29f: 0x90, + 0x2a0: 0x90, 0x2a1: 0x90, 0x2a2: 0x90, 0x2a3: 0x90, 0x2a4: 0x90, 0x2a5: 0x90, 0x2a6: 0x90, 0x2a7: 0x90, + 0x2a8: 0x90, 0x2a9: 0x90, 0x2aa: 0x90, 0x2ab: 0x90, 0x2ac: 0x90, 0x2ad: 0x90, 0x2ae: 0x90, 0x2af: 0x90, + 0x2b0: 0x90, 0x2b1: 0x90, 0x2b2: 0x90, 0x2b3: 0x90, 0x2b4: 0x90, 0x2b5: 0x90, 0x2b6: 0x90, 0x2b7: 0x90, + 0x2b8: 0x90, 0x2b9: 0x90, 0x2ba: 0x90, 0x2bb: 0x90, 0x2bc: 0x90, 0x2bd: 0x90, 0x2be: 0x90, 0x2bf: 0x92, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x05, 0x2c1: 0x05, 0x2c2: 0x05, 0x2c3: 0x05, 0x2c4: 0x05, 0x2c5: 0x05, 0x2c6: 0x05, 0x2c7: 0x05, + 0x2c8: 0x05, 0x2c9: 0x05, 0x2ca: 0x05, 0x2cb: 0x05, 0x2cc: 0x05, 0x2cd: 0x05, 0x2ce: 0x05, 0x2cf: 0x05, + 0x2d0: 0x05, 0x2d1: 0x05, 0x2d2: 0x93, 0x2d3: 0x94, 0x2d4: 0x05, 0x2d5: 0x05, 0x2d6: 0x05, 0x2d7: 0x05, + 0x2d8: 0x95, 0x2d9: 0x96, 0x2da: 0x97, 0x2db: 0x98, 0x2dc: 0x99, 0x2dd: 0x9a, 0x2de: 0x9b, 0x2df: 0x9c, + 0x2e0: 0x9d, 0x2e1: 0x9e, 0x2e2: 0x05, 0x2e3: 0x9f, 0x2e4: 0xa0, 0x2e5: 0xa1, 0x2e6: 0xa2, 0x2e7: 0xa3, + 0x2e8: 0xa4, 0x2e9: 0xa5, 0x2ea: 0xa6, 0x2eb: 0xa7, 0x2ec: 0xa8, 0x2ed: 0xa9, 0x2ee: 0x05, 0x2ef: 0xaa, + 0x2f0: 0x05, 0x2f1: 0x05, 0x2f2: 0x05, 0x2f3: 0x05, 0x2f4: 0x05, 0x2f5: 0x05, 0x2f6: 0x05, 0x2f7: 0x05, + 0x2f8: 0x05, 0x2f9: 0x05, 0x2fa: 0x05, 0x2fb: 0x05, 0x2fc: 0x05, 0x2fd: 0x05, 0x2fe: 0x05, 0x2ff: 0x05, + // Block 0xc, offset 0x300 + 0x300: 0x05, 0x301: 0x05, 0x302: 0x05, 0x303: 0x05, 0x304: 0x05, 0x305: 0x05, 0x306: 0x05, 0x307: 0x05, + 0x308: 0x05, 0x309: 0x05, 0x30a: 0x05, 0x30b: 0x05, 0x30c: 0x05, 0x30d: 0x05, 0x30e: 0x05, 0x30f: 0x05, + 0x310: 0x05, 0x311: 0x05, 0x312: 0x05, 0x313: 0x05, 0x314: 0x05, 0x315: 0x05, 0x316: 0x05, 0x317: 0x05, + 0x318: 0x05, 0x319: 0x05, 0x31a: 0x05, 0x31b: 0x05, 0x31c: 0x05, 0x31d: 0x05, 0x31e: 0x05, 0x31f: 0x05, + 0x320: 0x05, 0x321: 0x05, 0x322: 0x05, 0x323: 0x05, 0x324: 0x05, 0x325: 0x05, 0x326: 0x05, 0x327: 0x05, + 0x328: 0x05, 0x329: 0x05, 0x32a: 0x05, 0x32b: 0x05, 0x32c: 0x05, 0x32d: 0x05, 0x32e: 0x05, 0x32f: 0x05, + 0x330: 0x05, 0x331: 0x05, 0x332: 0x05, 0x333: 0x05, 0x334: 0x05, 0x335: 0x05, 0x336: 0x05, 0x337: 0x05, + 0x338: 0x05, 0x339: 0x05, 0x33a: 0x05, 0x33b: 0x05, 0x33c: 0x05, 0x33d: 0x05, 0x33e: 0x05, 0x33f: 0x05, + // Block 0xd, offset 0x340 + 0x340: 0x05, 0x341: 0x05, 0x342: 0x05, 0x343: 0x05, 0x344: 0x05, 0x345: 0x05, 0x346: 0x05, 0x347: 0x05, + 0x348: 0x05, 0x349: 0x05, 0x34a: 0x05, 0x34b: 0x05, 0x34c: 0x05, 0x34d: 0x05, 0x34e: 0x05, 0x34f: 0x05, + 0x350: 0x05, 0x351: 0x05, 0x352: 0x05, 0x353: 0x05, 0x354: 0x05, 0x355: 0x05, 0x356: 0x05, 0x357: 0x05, + 0x358: 0x05, 0x359: 0x05, 0x35a: 0x05, 0x35b: 0x05, 0x35c: 0x05, 0x35d: 0x05, 0x35e: 0xab, 0x35f: 0xac, + // Block 0xe, offset 0x380 + 0x380: 0x3e, 0x381: 0x3e, 0x382: 0x3e, 0x383: 0x3e, 0x384: 0x3e, 0x385: 0x3e, 0x386: 0x3e, 0x387: 0x3e, + 0x388: 0x3e, 0x389: 0x3e, 0x38a: 0x3e, 0x38b: 0x3e, 0x38c: 0x3e, 0x38d: 0x3e, 0x38e: 0x3e, 0x38f: 0x3e, + 0x390: 0x3e, 0x391: 0x3e, 0x392: 0x3e, 0x393: 0x3e, 0x394: 0x3e, 0x395: 0x3e, 0x396: 0x3e, 0x397: 0x3e, + 0x398: 0x3e, 0x399: 0x3e, 0x39a: 0x3e, 0x39b: 0x3e, 0x39c: 0x3e, 0x39d: 0x3e, 0x39e: 0x3e, 0x39f: 0x3e, + 0x3a0: 0x3e, 0x3a1: 0x3e, 0x3a2: 0x3e, 0x3a3: 0x3e, 0x3a4: 0x3e, 0x3a5: 0x3e, 0x3a6: 0x3e, 0x3a7: 0x3e, + 0x3a8: 0x3e, 0x3a9: 0x3e, 0x3aa: 0x3e, 0x3ab: 0x3e, 0x3ac: 0x3e, 0x3ad: 0x3e, 0x3ae: 0x3e, 0x3af: 0x3e, + 0x3b0: 0x3e, 0x3b1: 0x3e, 0x3b2: 0x3e, 0x3b3: 0x3e, 0x3b4: 0x3e, 0x3b5: 0x3e, 0x3b6: 0x3e, 0x3b7: 0x3e, + 0x3b8: 0x3e, 0x3b9: 0x3e, 0x3ba: 0x3e, 0x3bb: 0x3e, 0x3bc: 0x3e, 0x3bd: 0x3e, 0x3be: 0x3e, 0x3bf: 0x3e, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x3e, 0x3c1: 0x3e, 0x3c2: 0x3e, 0x3c3: 0x3e, 0x3c4: 0x3e, 0x3c5: 0x3e, 0x3c6: 0x3e, 0x3c7: 0x3e, + 0x3c8: 0x3e, 0x3c9: 0x3e, 0x3ca: 0x3e, 0x3cb: 0x3e, 0x3cc: 0x3e, 0x3cd: 0x3e, 0x3ce: 0x3e, 0x3cf: 0x3e, + 0x3d0: 0x3e, 0x3d1: 0x3e, 0x3d2: 0x3e, 0x3d3: 0x3e, 0x3d4: 0x3e, 0x3d5: 0x3e, 0x3d6: 0x3e, 0x3d7: 0x3e, + 0x3d8: 0x3e, 0x3d9: 0x3e, 0x3da: 0x3e, 0x3db: 0x3e, 0x3dc: 0x3e, 0x3dd: 0x3e, 0x3de: 0x3e, 0x3df: 0x3e, + 0x3e0: 0x3e, 0x3e1: 0x3e, 0x3e2: 0x3e, 0x3e3: 0x3e, 0x3e4: 0x83, 0x3e5: 0x83, 0x3e6: 0x83, 0x3e7: 0x83, + 0x3e8: 0xad, 0x3e9: 0xae, 0x3ea: 0x83, 0x3eb: 0xaf, 0x3ec: 0xb0, 0x3ed: 0xb1, 0x3ee: 0x71, 0x3ef: 0xb2, + 0x3f0: 0x71, 0x3f1: 0x71, 0x3f2: 0x71, 0x3f3: 0x71, 0x3f4: 0x71, 0x3f5: 0xb3, 0x3f6: 0xb4, 0x3f7: 0xb5, + 0x3f8: 0xb6, 0x3f9: 0xb7, 0x3fa: 0x71, 0x3fb: 0xb8, 0x3fc: 0xb9, 0x3fd: 0xba, 0x3fe: 0xbb, 0x3ff: 0xbc, + // Block 0x10, offset 0x400 + 0x400: 0xbd, 0x401: 0xbe, 0x402: 0x05, 0x403: 0xbf, 0x404: 0xc0, 0x405: 0xc1, 0x406: 0xc2, 0x407: 0xc3, + 0x40a: 0xc4, 0x40b: 0xc5, 0x40c: 0xc6, 0x40d: 0xc7, 0x40e: 0xc8, 0x40f: 0xc9, + 0x410: 0x05, 0x411: 0x05, 0x412: 0xca, 0x413: 0xcb, 0x414: 0xcc, 0x415: 0xcd, + 0x418: 0x05, 0x419: 0x05, 0x41a: 0x05, 0x41b: 0x05, 0x41c: 0xce, 0x41d: 0xcf, + 0x420: 0xd0, 0x421: 0xd1, 0x422: 0xd2, 0x423: 0xd3, 0x424: 0xd4, 0x426: 0xd5, 0x427: 0xb4, + 0x428: 0xd6, 0x429: 0xd7, 0x42a: 0xd8, 0x42b: 0xd9, 0x42c: 0xda, 0x42d: 0xdb, 0x42e: 0xdc, + 0x430: 0x05, 0x431: 0x5f, 0x432: 0xdd, 0x433: 0xde, + 0x439: 0xdf, + // Block 0x11, offset 0x440 + 0x440: 0xe0, 0x441: 0xe1, 0x442: 0xe2, 0x443: 0xe3, 0x444: 0xe4, 0x445: 0xe5, 0x446: 0xe6, 0x447: 0xe7, + 0x448: 0xe8, 0x44a: 0xe9, 0x44b: 0xea, 0x44c: 0xeb, 0x44d: 0xec, + 0x450: 0xed, 0x451: 0xee, 0x452: 0xef, 0x453: 0xf0, 0x456: 0xf1, 0x457: 0xf2, + 0x458: 0xf3, 0x459: 0xf4, 0x45a: 0xf5, 0x45b: 0xf6, 0x45c: 0xf7, + 0x462: 0xf8, 0x463: 0xf9, + 0x46b: 0xfa, + 0x470: 0xfb, 0x471: 0xfc, 0x472: 0xfd, + // Block 0x12, offset 0x480 + 0x480: 0x05, 0x481: 0x05, 0x482: 0x05, 0x483: 0x05, 0x484: 0x05, 0x485: 0x05, 0x486: 0x05, 0x487: 0x05, + 0x488: 0x05, 0x489: 0x05, 0x48a: 0x05, 0x48b: 0x05, 0x48c: 0x05, 0x48d: 0x05, 0x48e: 0xfe, + 0x490: 0x71, 0x491: 0xff, 0x492: 0x05, 0x493: 0x05, 0x494: 0x05, 0x495: 0x100, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x05, 0x4c1: 0x05, 0x4c2: 0x05, 0x4c3: 0x05, 0x4c4: 0x05, 0x4c5: 0x05, 0x4c6: 0x05, 0x4c7: 0x05, + 0x4c8: 0x05, 0x4c9: 0x05, 0x4ca: 0x05, 0x4cb: 0x05, 0x4cc: 0x05, 0x4cd: 0x05, 0x4ce: 0x05, 0x4cf: 0x05, + 0x4d0: 0x101, + // Block 0x14, offset 0x500 + 0x510: 0x05, 0x511: 0x05, 0x512: 0x05, 0x513: 0x05, 0x514: 0x05, 0x515: 0x05, 0x516: 0x05, 0x517: 0x05, + 0x518: 0x05, 0x519: 0x102, + // Block 0x15, offset 0x540 + 0x560: 0x05, 0x561: 0x05, 0x562: 0x05, 0x563: 0x05, 0x564: 0x05, 0x565: 0x05, 0x566: 0x05, 0x567: 0x05, + 0x568: 0xfa, 0x569: 0x103, 0x56b: 0x104, 0x56c: 0x105, 0x56d: 0x106, 0x56e: 0x107, + 0x57c: 0x05, 0x57d: 0x108, 0x57e: 0x109, 0x57f: 0x10a, + // Block 0x16, offset 0x580 + 0x580: 0x05, 0x581: 0x05, 0x582: 0x05, 0x583: 0x05, 0x584: 0x05, 0x585: 0x05, 0x586: 0x05, 0x587: 0x05, + 0x588: 0x05, 0x589: 0x05, 0x58a: 0x05, 0x58b: 0x05, 0x58c: 0x05, 0x58d: 0x05, 0x58e: 0x05, 0x58f: 0x05, + 0x590: 0x05, 0x591: 0x05, 0x592: 0x05, 0x593: 0x05, 0x594: 0x05, 0x595: 0x05, 0x596: 0x05, 0x597: 0x05, + 0x598: 0x05, 0x599: 0x05, 0x59a: 0x05, 0x59b: 0x05, 0x59c: 0x05, 0x59d: 0x05, 0x59e: 0x05, 0x59f: 0x10b, + 0x5a0: 0x05, 0x5a1: 0x05, 0x5a2: 0x05, 0x5a3: 0x05, 0x5a4: 0x05, 0x5a5: 0x05, 0x5a6: 0x05, 0x5a7: 0x05, + 0x5a8: 0x05, 0x5a9: 0x05, 0x5aa: 0x05, 0x5ab: 0xdd, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x10c, + 0x5f0: 0x05, 0x5f1: 0x10d, 0x5f2: 0x10e, + // Block 0x18, offset 0x600 + 0x600: 0x71, 0x601: 0x71, 0x602: 0x71, 0x603: 0x10f, 0x604: 0x110, 0x605: 0x111, 0x606: 0x112, 0x607: 0x113, + 0x608: 0xc1, 0x609: 0x114, 0x60c: 0x71, 0x60d: 0x115, + 0x610: 0x71, 0x611: 0x116, 0x612: 0x117, 0x613: 0x118, 0x614: 0x119, 0x615: 0x11a, 0x616: 0x71, 0x617: 0x71, + 0x618: 0x71, 0x619: 0x71, 0x61a: 0x11b, 0x61b: 0x71, 0x61c: 0x71, 0x61d: 0x71, 0x61e: 0x71, 0x61f: 0x11c, + 0x620: 0x71, 0x621: 0x71, 0x622: 0x71, 0x623: 0x71, 0x624: 0x71, 0x625: 0x71, 0x626: 0x71, 0x627: 0x71, + 0x628: 0x11d, 0x629: 0x11e, 0x62a: 0x11f, + // Block 0x19, offset 0x640 + 0x640: 0x120, + 0x660: 0x05, 0x661: 0x05, 0x662: 0x05, 0x663: 0x121, 0x664: 0x122, 0x665: 0x123, + 0x678: 0x124, 0x679: 0x125, 0x67a: 0x126, 0x67b: 0x127, + // Block 0x1a, offset 0x680 + 0x680: 0x128, 0x681: 0x71, 0x682: 0x129, 0x683: 0x12a, 0x684: 0x12b, 0x685: 0x128, 0x686: 0x12c, 0x687: 0x12d, + 0x688: 0x12e, 0x689: 0x12f, 0x68c: 0x71, 0x68d: 0x71, 0x68e: 0x71, 0x68f: 0x71, + 0x690: 0x71, 0x691: 0x71, 0x692: 0x71, 0x693: 0x71, 0x694: 0x71, 0x695: 0x71, 0x696: 0x71, 0x697: 0x71, + 0x698: 0x71, 0x699: 0x71, 0x69a: 0x71, 0x69b: 0x130, 0x69c: 0x71, 0x69d: 0x131, 0x69e: 0x71, 0x69f: 0x132, + 0x6a0: 0x133, 0x6a1: 0x134, 0x6a2: 0x135, 0x6a4: 0x136, 0x6a5: 0x137, 0x6a6: 0x138, 0x6a7: 0x139, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x90, 0x6c1: 0x90, 0x6c2: 0x90, 0x6c3: 0x90, 0x6c4: 0x90, 0x6c5: 0x90, 0x6c6: 0x90, 0x6c7: 0x90, + 0x6c8: 0x90, 0x6c9: 0x90, 0x6ca: 0x90, 0x6cb: 0x90, 0x6cc: 0x90, 0x6cd: 0x90, 0x6ce: 0x90, 0x6cf: 0x90, + 0x6d0: 0x90, 0x6d1: 0x90, 0x6d2: 0x90, 0x6d3: 0x90, 0x6d4: 0x90, 0x6d5: 0x90, 0x6d6: 0x90, 0x6d7: 0x90, + 0x6d8: 0x90, 0x6d9: 0x90, 0x6da: 0x90, 0x6db: 0x13a, 0x6dc: 0x90, 0x6dd: 0x90, 0x6de: 0x90, 0x6df: 0x90, + 0x6e0: 0x90, 0x6e1: 0x90, 0x6e2: 0x90, 0x6e3: 0x90, 0x6e4: 0x90, 0x6e5: 0x90, 0x6e6: 0x90, 0x6e7: 0x90, + 0x6e8: 0x90, 0x6e9: 0x90, 0x6ea: 0x90, 0x6eb: 0x90, 0x6ec: 0x90, 0x6ed: 0x90, 0x6ee: 0x90, 0x6ef: 0x90, + 0x6f0: 0x90, 0x6f1: 0x90, 0x6f2: 0x90, 0x6f3: 0x90, 0x6f4: 0x90, 0x6f5: 0x90, 0x6f6: 0x90, 0x6f7: 0x90, + 0x6f8: 0x90, 0x6f9: 0x90, 0x6fa: 0x90, 0x6fb: 0x90, 0x6fc: 0x90, 0x6fd: 0x90, 0x6fe: 0x90, 0x6ff: 0x90, + // Block 0x1c, offset 0x700 + 0x700: 0x90, 0x701: 0x90, 0x702: 0x90, 0x703: 0x90, 0x704: 0x90, 0x705: 0x90, 0x706: 0x90, 0x707: 0x90, + 0x708: 0x90, 0x709: 0x90, 0x70a: 0x90, 0x70b: 0x90, 0x70c: 0x90, 0x70d: 0x90, 0x70e: 0x90, 0x70f: 0x90, + 0x710: 0x90, 0x711: 0x90, 0x712: 0x90, 0x713: 0x90, 0x714: 0x90, 0x715: 0x90, 0x716: 0x90, 0x717: 0x90, + 0x718: 0x90, 0x719: 0x90, 0x71a: 0x90, 0x71b: 0x90, 0x71c: 0x13b, 0x71d: 0x90, 0x71e: 0x90, 0x71f: 0x90, + 0x720: 0x13c, 0x721: 0x90, 0x722: 0x90, 0x723: 0x90, 0x724: 0x90, 0x725: 0x90, 0x726: 0x90, 0x727: 0x90, + 0x728: 0x90, 0x729: 0x90, 0x72a: 0x90, 0x72b: 0x90, 0x72c: 0x90, 0x72d: 0x90, 0x72e: 0x90, 0x72f: 0x90, + 0x730: 0x90, 0x731: 0x90, 0x732: 0x90, 0x733: 0x90, 0x734: 0x90, 0x735: 0x90, 0x736: 0x90, 0x737: 0x90, + 0x738: 0x90, 0x739: 0x90, 0x73a: 0x90, 0x73b: 0x90, 0x73c: 0x90, 0x73d: 0x90, 0x73e: 0x90, 0x73f: 0x90, + // Block 0x1d, offset 0x740 + 0x740: 0x90, 0x741: 0x90, 0x742: 0x90, 0x743: 0x90, 0x744: 0x90, 0x745: 0x90, 0x746: 0x90, 0x747: 0x90, + 0x748: 0x90, 0x749: 0x90, 0x74a: 0x90, 0x74b: 0x90, 0x74c: 0x90, 0x74d: 0x90, 0x74e: 0x90, 0x74f: 0x90, + 0x750: 0x90, 0x751: 0x90, 0x752: 0x90, 0x753: 0x90, 0x754: 0x90, 0x755: 0x90, 0x756: 0x90, 0x757: 0x90, + 0x758: 0x90, 0x759: 0x90, 0x75a: 0x90, 0x75b: 0x90, 0x75c: 0x90, 0x75d: 0x90, 0x75e: 0x90, 0x75f: 0x90, + 0x760: 0x90, 0x761: 0x90, 0x762: 0x90, 0x763: 0x90, 0x764: 0x90, 0x765: 0x90, 0x766: 0x90, 0x767: 0x90, + 0x768: 0x90, 0x769: 0x90, 0x76a: 0x90, 0x76b: 0x90, 0x76c: 0x90, 0x76d: 0x90, 0x76e: 0x90, 0x76f: 0x90, + 0x770: 0x90, 0x771: 0x90, 0x772: 0x90, 0x773: 0x90, 0x774: 0x90, 0x775: 0x90, 0x776: 0x90, 0x777: 0x90, + 0x778: 0x90, 0x779: 0x90, 0x77a: 0x13d, + // Block 0x1e, offset 0x780 + 0x7a0: 0x83, 0x7a1: 0x83, 0x7a2: 0x83, 0x7a3: 0x83, 0x7a4: 0x83, 0x7a5: 0x83, 0x7a6: 0x83, 0x7a7: 0x83, + 0x7a8: 0x13e, + // Block 0x1f, offset 0x7c0 + 0x7d0: 0x0e, 0x7d1: 0x0f, 0x7d2: 0x10, 0x7d3: 0x11, 0x7d4: 0x12, 0x7d6: 0x13, 0x7d7: 0x0a, + 0x7d8: 0x14, 0x7db: 0x15, 0x7dd: 0x16, 0x7de: 0x17, 0x7df: 0x18, + 0x7e0: 0x07, 0x7e1: 0x07, 0x7e2: 0x07, 0x7e3: 0x07, 0x7e4: 0x07, 0x7e5: 0x07, 0x7e6: 0x07, 0x7e7: 0x07, + 0x7e8: 0x07, 0x7e9: 0x07, 0x7ea: 0x19, 0x7eb: 0x1a, 0x7ec: 0x1b, 0x7ef: 0x1c, + // Block 0x20, offset 0x800 + 0x800: 0x13f, 0x801: 0x3e, 0x804: 0x3e, 0x805: 0x3e, 0x806: 0x3e, 0x807: 0x140, + // Block 0x21, offset 0x840 + 0x840: 0x3e, 0x841: 0x3e, 0x842: 0x3e, 0x843: 0x3e, 0x844: 0x3e, 0x845: 0x3e, 0x846: 0x3e, 0x847: 0x3e, + 0x848: 0x3e, 0x849: 0x3e, 0x84a: 0x3e, 0x84b: 0x3e, 0x84c: 0x3e, 0x84d: 0x3e, 0x84e: 0x3e, 0x84f: 0x3e, + 0x850: 0x3e, 0x851: 0x3e, 0x852: 0x3e, 0x853: 0x3e, 0x854: 0x3e, 0x855: 0x3e, 0x856: 0x3e, 0x857: 0x3e, + 0x858: 0x3e, 0x859: 0x3e, 0x85a: 0x3e, 0x85b: 0x3e, 0x85c: 0x3e, 0x85d: 0x3e, 0x85e: 0x3e, 0x85f: 0x3e, + 0x860: 0x3e, 0x861: 0x3e, 0x862: 0x3e, 0x863: 0x3e, 0x864: 0x3e, 0x865: 0x3e, 0x866: 0x3e, 0x867: 0x3e, + 0x868: 0x3e, 0x869: 0x3e, 0x86a: 0x3e, 0x86b: 0x3e, 0x86c: 0x3e, 0x86d: 0x3e, 0x86e: 0x3e, 0x86f: 0x3e, + 0x870: 0x3e, 0x871: 0x3e, 0x872: 0x3e, 0x873: 0x3e, 0x874: 0x3e, 0x875: 0x3e, 0x876: 0x3e, 0x877: 0x3e, + 0x878: 0x3e, 0x879: 0x3e, 0x87a: 0x3e, 0x87b: 0x3e, 0x87c: 0x3e, 0x87d: 0x3e, 0x87e: 0x3e, 0x87f: 0x141, + // Block 0x22, offset 0x880 + 0x8a0: 0x1e, + 0x8b0: 0x0c, 0x8b1: 0x0c, 0x8b2: 0x0c, 0x8b3: 0x0c, 0x8b4: 0x0c, 0x8b5: 0x0c, 0x8b6: 0x0c, 0x8b7: 0x0c, + 0x8b8: 0x0c, 0x8b9: 0x0c, 0x8ba: 0x0c, 0x8bb: 0x0c, 0x8bc: 0x0c, 0x8bd: 0x0c, 0x8be: 0x0c, 0x8bf: 0x1f, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x0c, 0x8c1: 0x0c, 0x8c2: 0x0c, 0x8c3: 0x0c, 0x8c4: 0x0c, 0x8c5: 0x0c, 0x8c6: 0x0c, 0x8c7: 0x0c, + 0x8c8: 0x0c, 0x8c9: 0x0c, 0x8ca: 0x0c, 0x8cb: 0x0c, 0x8cc: 0x0c, 0x8cd: 0x0c, 0x8ce: 0x0c, 0x8cf: 0x1f, +} + +// Total table size 25344 bytes (24KiB); checksum: 811C9DC5 diff --git a/vendor/golang.org/x/text/unicode/bidi/gen.go b/vendor/golang.org/x/text/unicode/bidi/gen.go index 040f301..4e1c7ba 100644 --- a/vendor/golang.org/x/text/unicode/bidi/gen.go +++ b/vendor/golang.org/x/text/unicode/bidi/gen.go @@ -59,7 +59,7 @@ func genTables() { log.Fatalf("Too many Class constants (%#x > 0x0F).", numClass) } w := gen.NewCodeWriter() - defer w.WriteGoFile(*outputFile, "bidi") + defer w.WriteVersionedGoFile(*outputFile, "bidi") gen.WriteUnicodeVersion(w) diff --git a/vendor/golang.org/x/text/unicode/bidi/tables.go b/vendor/golang.org/x/text/unicode/bidi/tables.go deleted file mode 100644 index 7212d5a..0000000 --- a/vendor/golang.org/x/text/unicode/bidi/tables.go +++ /dev/null @@ -1,1779 +0,0 @@ -// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. - -package bidi - -// UnicodeVersion is the Unicode version from which the tables in this package are derived. -const UnicodeVersion = "9.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: 15744 bytes (15.38 KiB). Checksum: b4c3b70954803b86. -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: 222 blocks, 14208 entries, 14208 bytes -// The third block is the zero block. -var bidiValues = [14208]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: 0x0001, 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: 0x0001, 0x5e1: 0x0001, 0x5e2: 0x0001, 0x5e3: 0x0001, - 0x5e4: 0x0001, 0x5e5: 0x0001, 0x5e6: 0x0001, 0x5e7: 0x0001, 0x5e8: 0x0001, 0x5e9: 0x0001, - 0x5ea: 0x0001, 0x5eb: 0x0001, 0x5ec: 0x0001, 0x5ed: 0x0001, 0x5ee: 0x0001, 0x5ef: 0x0001, - 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: 0x000d, 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, - // 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, - // Block 0x21, offset 0x840 - 0x841: 0x000c, - 0x87c: 0x000c, 0x87f: 0x000c, - // Block 0x22, offset 0x880 - 0x881: 0x000c, 0x882: 0x000c, 0x883: 0x000c, 0x884: 0x000c, - 0x88d: 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, - 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 - 0xa01: 0x000c, - // Block 0x29, offset 0xa40 - 0xa41: 0x000c, 0xa42: 0x000c, 0xa43: 0x000c, 0xa44: 0x000c, - 0xa4d: 0x000c, - 0xa62: 0x000c, 0xa63: 0x000c, - // Block 0x2a, offset 0xa80 - 0xa8a: 0x000c, - 0xa92: 0x000c, 0xa93: 0x000c, 0xa94: 0x000c, 0xa96: 0x000c, - // Block 0x2b, offset 0xac0 - 0xaf1: 0x000c, 0xaf4: 0x000c, 0xaf5: 0x000c, - 0xaf6: 0x000c, 0xaf7: 0x000c, 0xaf8: 0x000c, 0xaf9: 0x000c, 0xafa: 0x000c, - 0xaff: 0x0004, - // Block 0x2c, offset 0xb00 - 0xb07: 0x000c, 0xb08: 0x000c, 0xb09: 0x000c, 0xb0a: 0x000c, 0xb0b: 0x000c, - 0xb0c: 0x000c, 0xb0d: 0x000c, 0xb0e: 0x000c, - // Block 0x2d, offset 0xb40 - 0xb71: 0x000c, 0xb74: 0x000c, 0xb75: 0x000c, - 0xb76: 0x000c, 0xb77: 0x000c, 0xb78: 0x000c, 0xb79: 0x000c, 0xb7b: 0x000c, - 0xb7c: 0x000c, - // Block 0x2e, offset 0xb80 - 0xb88: 0x000c, 0xb89: 0x000c, 0xb8a: 0x000c, 0xb8b: 0x000c, - 0xb8c: 0x000c, 0xb8d: 0x000c, - // Block 0x2f, offset 0xbc0 - 0xbd8: 0x000c, 0xbd9: 0x000c, - 0xbf5: 0x000c, - 0xbf7: 0x000c, 0xbf9: 0x000c, 0xbfa: 0x003a, 0xbfb: 0x002a, - 0xbfc: 0x003a, 0xbfd: 0x002a, - // Block 0x30, offset 0xc00 - 0xc31: 0x000c, 0xc32: 0x000c, 0xc33: 0x000c, 0xc34: 0x000c, 0xc35: 0x000c, - 0xc36: 0x000c, 0xc37: 0x000c, 0xc38: 0x000c, 0xc39: 0x000c, 0xc3a: 0x000c, 0xc3b: 0x000c, - 0xc3c: 0x000c, 0xc3d: 0x000c, 0xc3e: 0x000c, - // Block 0x31, offset 0xc40 - 0xc40: 0x000c, 0xc41: 0x000c, 0xc42: 0x000c, 0xc43: 0x000c, 0xc44: 0x000c, - 0xc46: 0x000c, 0xc47: 0x000c, - 0xc4d: 0x000c, 0xc4e: 0x000c, 0xc4f: 0x000c, 0xc50: 0x000c, 0xc51: 0x000c, - 0xc52: 0x000c, 0xc53: 0x000c, 0xc54: 0x000c, 0xc55: 0x000c, 0xc56: 0x000c, 0xc57: 0x000c, - 0xc59: 0x000c, 0xc5a: 0x000c, 0xc5b: 0x000c, 0xc5c: 0x000c, 0xc5d: 0x000c, - 0xc5e: 0x000c, 0xc5f: 0x000c, 0xc60: 0x000c, 0xc61: 0x000c, 0xc62: 0x000c, 0xc63: 0x000c, - 0xc64: 0x000c, 0xc65: 0x000c, 0xc66: 0x000c, 0xc67: 0x000c, 0xc68: 0x000c, 0xc69: 0x000c, - 0xc6a: 0x000c, 0xc6b: 0x000c, 0xc6c: 0x000c, 0xc6d: 0x000c, 0xc6e: 0x000c, 0xc6f: 0x000c, - 0xc70: 0x000c, 0xc71: 0x000c, 0xc72: 0x000c, 0xc73: 0x000c, 0xc74: 0x000c, 0xc75: 0x000c, - 0xc76: 0x000c, 0xc77: 0x000c, 0xc78: 0x000c, 0xc79: 0x000c, 0xc7a: 0x000c, 0xc7b: 0x000c, - 0xc7c: 0x000c, - // Block 0x32, offset 0xc80 - 0xc86: 0x000c, - // Block 0x33, offset 0xcc0 - 0xced: 0x000c, 0xcee: 0x000c, 0xcef: 0x000c, - 0xcf0: 0x000c, 0xcf2: 0x000c, 0xcf3: 0x000c, 0xcf4: 0x000c, 0xcf5: 0x000c, - 0xcf6: 0x000c, 0xcf7: 0x000c, 0xcf9: 0x000c, 0xcfa: 0x000c, - 0xcfd: 0x000c, 0xcfe: 0x000c, - // Block 0x34, offset 0xd00 - 0xd18: 0x000c, 0xd19: 0x000c, - 0xd1e: 0x000c, 0xd1f: 0x000c, 0xd20: 0x000c, - 0xd31: 0x000c, 0xd32: 0x000c, 0xd33: 0x000c, 0xd34: 0x000c, - // Block 0x35, offset 0xd40 - 0xd42: 0x000c, 0xd45: 0x000c, - 0xd46: 0x000c, - 0xd4d: 0x000c, - 0xd5d: 0x000c, - // Block 0x36, offset 0xd80 - 0xd9d: 0x000c, - 0xd9e: 0x000c, 0xd9f: 0x000c, - // Block 0x37, offset 0xdc0 - 0xdd0: 0x000a, 0xdd1: 0x000a, - 0xdd2: 0x000a, 0xdd3: 0x000a, 0xdd4: 0x000a, 0xdd5: 0x000a, 0xdd6: 0x000a, 0xdd7: 0x000a, - 0xdd8: 0x000a, 0xdd9: 0x000a, - // Block 0x38, offset 0xe00 - 0xe00: 0x000a, - // Block 0x39, offset 0xe40 - 0xe40: 0x0009, - 0xe5b: 0x007a, 0xe5c: 0x006a, - // Block 0x3a, offset 0xe80 - 0xe92: 0x000c, 0xe93: 0x000c, 0xe94: 0x000c, - 0xeb2: 0x000c, 0xeb3: 0x000c, 0xeb4: 0x000c, - // Block 0x3b, offset 0xec0 - 0xed2: 0x000c, 0xed3: 0x000c, - 0xef2: 0x000c, 0xef3: 0x000c, - // Block 0x3c, offset 0xf00 - 0xf34: 0x000c, 0xf35: 0x000c, - 0xf37: 0x000c, 0xf38: 0x000c, 0xf39: 0x000c, 0xf3a: 0x000c, 0xf3b: 0x000c, - 0xf3c: 0x000c, 0xf3d: 0x000c, - // Block 0x3d, offset 0xf40 - 0xf46: 0x000c, 0xf49: 0x000c, 0xf4a: 0x000c, 0xf4b: 0x000c, - 0xf4c: 0x000c, 0xf4d: 0x000c, 0xf4e: 0x000c, 0xf4f: 0x000c, 0xf50: 0x000c, 0xf51: 0x000c, - 0xf52: 0x000c, 0xf53: 0x000c, - 0xf5b: 0x0004, 0xf5d: 0x000c, - 0xf70: 0x000a, 0xf71: 0x000a, 0xf72: 0x000a, 0xf73: 0x000a, 0xf74: 0x000a, 0xf75: 0x000a, - 0xf76: 0x000a, 0xf77: 0x000a, 0xf78: 0x000a, 0xf79: 0x000a, - // Block 0x3e, offset 0xf80 - 0xf80: 0x000a, 0xf81: 0x000a, 0xf82: 0x000a, 0xf83: 0x000a, 0xf84: 0x000a, 0xf85: 0x000a, - 0xf86: 0x000a, 0xf87: 0x000a, 0xf88: 0x000a, 0xf89: 0x000a, 0xf8a: 0x000a, 0xf8b: 0x000c, - 0xf8c: 0x000c, 0xf8d: 0x000c, 0xf8e: 0x000b, - // Block 0x3f, offset 0xfc0 - 0xfc5: 0x000c, - 0xfc6: 0x000c, - 0xfe9: 0x000c, - // Block 0x40, offset 0x1000 - 0x1020: 0x000c, 0x1021: 0x000c, 0x1022: 0x000c, - 0x1027: 0x000c, 0x1028: 0x000c, - 0x1032: 0x000c, - 0x1039: 0x000c, 0x103a: 0x000c, 0x103b: 0x000c, - // Block 0x41, offset 0x1040 - 0x1040: 0x000a, 0x1044: 0x000a, 0x1045: 0x000a, - // Block 0x42, offset 0x1080 - 0x109e: 0x000a, 0x109f: 0x000a, 0x10a0: 0x000a, 0x10a1: 0x000a, 0x10a2: 0x000a, 0x10a3: 0x000a, - 0x10a4: 0x000a, 0x10a5: 0x000a, 0x10a6: 0x000a, 0x10a7: 0x000a, 0x10a8: 0x000a, 0x10a9: 0x000a, - 0x10aa: 0x000a, 0x10ab: 0x000a, 0x10ac: 0x000a, 0x10ad: 0x000a, 0x10ae: 0x000a, 0x10af: 0x000a, - 0x10b0: 0x000a, 0x10b1: 0x000a, 0x10b2: 0x000a, 0x10b3: 0x000a, 0x10b4: 0x000a, 0x10b5: 0x000a, - 0x10b6: 0x000a, 0x10b7: 0x000a, 0x10b8: 0x000a, 0x10b9: 0x000a, 0x10ba: 0x000a, 0x10bb: 0x000a, - 0x10bc: 0x000a, 0x10bd: 0x000a, 0x10be: 0x000a, 0x10bf: 0x000a, - // Block 0x43, offset 0x10c0 - 0x10d7: 0x000c, - 0x10d8: 0x000c, 0x10db: 0x000c, - // Block 0x44, offset 0x1100 - 0x1116: 0x000c, - 0x1118: 0x000c, 0x1119: 0x000c, 0x111a: 0x000c, 0x111b: 0x000c, 0x111c: 0x000c, 0x111d: 0x000c, - 0x111e: 0x000c, 0x1120: 0x000c, 0x1122: 0x000c, - 0x1125: 0x000c, 0x1126: 0x000c, 0x1127: 0x000c, 0x1128: 0x000c, 0x1129: 0x000c, - 0x112a: 0x000c, 0x112b: 0x000c, 0x112c: 0x000c, - 0x1133: 0x000c, 0x1134: 0x000c, 0x1135: 0x000c, - 0x1136: 0x000c, 0x1137: 0x000c, 0x1138: 0x000c, 0x1139: 0x000c, 0x113a: 0x000c, 0x113b: 0x000c, - 0x113c: 0x000c, 0x113f: 0x000c, - // Block 0x45, offset 0x1140 - 0x1170: 0x000c, 0x1171: 0x000c, 0x1172: 0x000c, 0x1173: 0x000c, 0x1174: 0x000c, 0x1175: 0x000c, - 0x1176: 0x000c, 0x1177: 0x000c, 0x1178: 0x000c, 0x1179: 0x000c, 0x117a: 0x000c, 0x117b: 0x000c, - 0x117c: 0x000c, 0x117d: 0x000c, 0x117e: 0x000c, - // Block 0x46, offset 0x1180 - 0x1180: 0x000c, 0x1181: 0x000c, 0x1182: 0x000c, 0x1183: 0x000c, - 0x11b4: 0x000c, - 0x11b6: 0x000c, 0x11b7: 0x000c, 0x11b8: 0x000c, 0x11b9: 0x000c, 0x11ba: 0x000c, - 0x11bc: 0x000c, - // Block 0x47, offset 0x11c0 - 0x11c2: 0x000c, - 0x11eb: 0x000c, 0x11ec: 0x000c, 0x11ed: 0x000c, 0x11ee: 0x000c, 0x11ef: 0x000c, - 0x11f0: 0x000c, 0x11f1: 0x000c, 0x11f2: 0x000c, 0x11f3: 0x000c, - // Block 0x48, offset 0x1200 - 0x1200: 0x000c, 0x1201: 0x000c, - 0x1222: 0x000c, 0x1223: 0x000c, - 0x1224: 0x000c, 0x1225: 0x000c, 0x1228: 0x000c, 0x1229: 0x000c, - 0x122b: 0x000c, 0x122c: 0x000c, 0x122d: 0x000c, - // Block 0x49, offset 0x1240 - 0x1266: 0x000c, 0x1268: 0x000c, 0x1269: 0x000c, - 0x126d: 0x000c, 0x126f: 0x000c, - 0x1270: 0x000c, 0x1271: 0x000c, - // Block 0x4a, offset 0x1280 - 0x12ac: 0x000c, 0x12ad: 0x000c, 0x12ae: 0x000c, 0x12af: 0x000c, - 0x12b0: 0x000c, 0x12b1: 0x000c, 0x12b2: 0x000c, 0x12b3: 0x000c, - 0x12b6: 0x000c, 0x12b7: 0x000c, - // Block 0x4b, offset 0x12c0 - 0x12d0: 0x000c, 0x12d1: 0x000c, - 0x12d2: 0x000c, 0x12d4: 0x000c, 0x12d5: 0x000c, 0x12d6: 0x000c, 0x12d7: 0x000c, - 0x12d8: 0x000c, 0x12d9: 0x000c, 0x12da: 0x000c, 0x12db: 0x000c, 0x12dc: 0x000c, 0x12dd: 0x000c, - 0x12de: 0x000c, 0x12df: 0x000c, 0x12e0: 0x000c, 0x12e2: 0x000c, 0x12e3: 0x000c, - 0x12e4: 0x000c, 0x12e5: 0x000c, 0x12e6: 0x000c, 0x12e7: 0x000c, 0x12e8: 0x000c, - 0x12ed: 0x000c, - 0x12f4: 0x000c, - 0x12f8: 0x000c, 0x12f9: 0x000c, - // Block 0x4c, offset 0x1300 - 0x1300: 0x000c, 0x1301: 0x000c, 0x1302: 0x000c, 0x1303: 0x000c, 0x1304: 0x000c, 0x1305: 0x000c, - 0x1306: 0x000c, 0x1307: 0x000c, 0x1308: 0x000c, 0x1309: 0x000c, 0x130a: 0x000c, 0x130b: 0x000c, - 0x130c: 0x000c, 0x130d: 0x000c, 0x130e: 0x000c, 0x130f: 0x000c, 0x1310: 0x000c, 0x1311: 0x000c, - 0x1312: 0x000c, 0x1313: 0x000c, 0x1314: 0x000c, 0x1315: 0x000c, 0x1316: 0x000c, 0x1317: 0x000c, - 0x1318: 0x000c, 0x1319: 0x000c, 0x131a: 0x000c, 0x131b: 0x000c, 0x131c: 0x000c, 0x131d: 0x000c, - 0x131e: 0x000c, 0x131f: 0x000c, 0x1320: 0x000c, 0x1321: 0x000c, 0x1322: 0x000c, 0x1323: 0x000c, - 0x1324: 0x000c, 0x1325: 0x000c, 0x1326: 0x000c, 0x1327: 0x000c, 0x1328: 0x000c, 0x1329: 0x000c, - 0x132a: 0x000c, 0x132b: 0x000c, 0x132c: 0x000c, 0x132d: 0x000c, 0x132e: 0x000c, 0x132f: 0x000c, - 0x1330: 0x000c, 0x1331: 0x000c, 0x1332: 0x000c, 0x1333: 0x000c, 0x1334: 0x000c, 0x1335: 0x000c, - 0x133b: 0x000c, - 0x133c: 0x000c, 0x133d: 0x000c, 0x133e: 0x000c, 0x133f: 0x000c, - // Block 0x4d, offset 0x1340 - 0x137d: 0x000a, 0x137f: 0x000a, - // Block 0x4e, offset 0x1380 - 0x1380: 0x000a, 0x1381: 0x000a, - 0x138d: 0x000a, 0x138e: 0x000a, 0x138f: 0x000a, - 0x139d: 0x000a, - 0x139e: 0x000a, 0x139f: 0x000a, - 0x13ad: 0x000a, 0x13ae: 0x000a, 0x13af: 0x000a, - 0x13bd: 0x000a, 0x13be: 0x000a, - // Block 0x4f, offset 0x13c0 - 0x13c0: 0x0009, 0x13c1: 0x0009, 0x13c2: 0x0009, 0x13c3: 0x0009, 0x13c4: 0x0009, 0x13c5: 0x0009, - 0x13c6: 0x0009, 0x13c7: 0x0009, 0x13c8: 0x0009, 0x13c9: 0x0009, 0x13ca: 0x0009, 0x13cb: 0x000b, - 0x13cc: 0x000b, 0x13cd: 0x000b, 0x13cf: 0x0001, 0x13d0: 0x000a, 0x13d1: 0x000a, - 0x13d2: 0x000a, 0x13d3: 0x000a, 0x13d4: 0x000a, 0x13d5: 0x000a, 0x13d6: 0x000a, 0x13d7: 0x000a, - 0x13d8: 0x000a, 0x13d9: 0x000a, 0x13da: 0x000a, 0x13db: 0x000a, 0x13dc: 0x000a, 0x13dd: 0x000a, - 0x13de: 0x000a, 0x13df: 0x000a, 0x13e0: 0x000a, 0x13e1: 0x000a, 0x13e2: 0x000a, 0x13e3: 0x000a, - 0x13e4: 0x000a, 0x13e5: 0x000a, 0x13e6: 0x000a, 0x13e7: 0x000a, 0x13e8: 0x0009, 0x13e9: 0x0007, - 0x13ea: 0x000e, 0x13eb: 0x000e, 0x13ec: 0x000e, 0x13ed: 0x000e, 0x13ee: 0x000e, 0x13ef: 0x0006, - 0x13f0: 0x0004, 0x13f1: 0x0004, 0x13f2: 0x0004, 0x13f3: 0x0004, 0x13f4: 0x0004, 0x13f5: 0x000a, - 0x13f6: 0x000a, 0x13f7: 0x000a, 0x13f8: 0x000a, 0x13f9: 0x000a, 0x13fa: 0x000a, 0x13fb: 0x000a, - 0x13fc: 0x000a, 0x13fd: 0x000a, 0x13fe: 0x000a, 0x13ff: 0x000a, - // Block 0x50, offset 0x1400 - 0x1400: 0x000a, 0x1401: 0x000a, 0x1402: 0x000a, 0x1403: 0x000a, 0x1404: 0x0006, 0x1405: 0x009a, - 0x1406: 0x008a, 0x1407: 0x000a, 0x1408: 0x000a, 0x1409: 0x000a, 0x140a: 0x000a, 0x140b: 0x000a, - 0x140c: 0x000a, 0x140d: 0x000a, 0x140e: 0x000a, 0x140f: 0x000a, 0x1410: 0x000a, 0x1411: 0x000a, - 0x1412: 0x000a, 0x1413: 0x000a, 0x1414: 0x000a, 0x1415: 0x000a, 0x1416: 0x000a, 0x1417: 0x000a, - 0x1418: 0x000a, 0x1419: 0x000a, 0x141a: 0x000a, 0x141b: 0x000a, 0x141c: 0x000a, 0x141d: 0x000a, - 0x141e: 0x000a, 0x141f: 0x0009, 0x1420: 0x000b, 0x1421: 0x000b, 0x1422: 0x000b, 0x1423: 0x000b, - 0x1424: 0x000b, 0x1425: 0x000b, 0x1426: 0x000e, 0x1427: 0x000e, 0x1428: 0x000e, 0x1429: 0x000e, - 0x142a: 0x000b, 0x142b: 0x000b, 0x142c: 0x000b, 0x142d: 0x000b, 0x142e: 0x000b, 0x142f: 0x000b, - 0x1430: 0x0002, 0x1434: 0x0002, 0x1435: 0x0002, - 0x1436: 0x0002, 0x1437: 0x0002, 0x1438: 0x0002, 0x1439: 0x0002, 0x143a: 0x0003, 0x143b: 0x0003, - 0x143c: 0x000a, 0x143d: 0x009a, 0x143e: 0x008a, - // Block 0x51, offset 0x1440 - 0x1440: 0x0002, 0x1441: 0x0002, 0x1442: 0x0002, 0x1443: 0x0002, 0x1444: 0x0002, 0x1445: 0x0002, - 0x1446: 0x0002, 0x1447: 0x0002, 0x1448: 0x0002, 0x1449: 0x0002, 0x144a: 0x0003, 0x144b: 0x0003, - 0x144c: 0x000a, 0x144d: 0x009a, 0x144e: 0x008a, - 0x1460: 0x0004, 0x1461: 0x0004, 0x1462: 0x0004, 0x1463: 0x0004, - 0x1464: 0x0004, 0x1465: 0x0004, 0x1466: 0x0004, 0x1467: 0x0004, 0x1468: 0x0004, 0x1469: 0x0004, - 0x146a: 0x0004, 0x146b: 0x0004, 0x146c: 0x0004, 0x146d: 0x0004, 0x146e: 0x0004, 0x146f: 0x0004, - 0x1470: 0x0004, 0x1471: 0x0004, 0x1472: 0x0004, 0x1473: 0x0004, 0x1474: 0x0004, 0x1475: 0x0004, - 0x1476: 0x0004, 0x1477: 0x0004, 0x1478: 0x0004, 0x1479: 0x0004, 0x147a: 0x0004, 0x147b: 0x0004, - 0x147c: 0x0004, 0x147d: 0x0004, 0x147e: 0x0004, 0x147f: 0x0004, - // Block 0x52, offset 0x1480 - 0x1480: 0x0004, 0x1481: 0x0004, 0x1482: 0x0004, 0x1483: 0x0004, 0x1484: 0x0004, 0x1485: 0x0004, - 0x1486: 0x0004, 0x1487: 0x0004, 0x1488: 0x0004, 0x1489: 0x0004, 0x148a: 0x0004, 0x148b: 0x0004, - 0x148c: 0x0004, 0x148d: 0x0004, 0x148e: 0x0004, 0x148f: 0x0004, 0x1490: 0x000c, 0x1491: 0x000c, - 0x1492: 0x000c, 0x1493: 0x000c, 0x1494: 0x000c, 0x1495: 0x000c, 0x1496: 0x000c, 0x1497: 0x000c, - 0x1498: 0x000c, 0x1499: 0x000c, 0x149a: 0x000c, 0x149b: 0x000c, 0x149c: 0x000c, 0x149d: 0x000c, - 0x149e: 0x000c, 0x149f: 0x000c, 0x14a0: 0x000c, 0x14a1: 0x000c, 0x14a2: 0x000c, 0x14a3: 0x000c, - 0x14a4: 0x000c, 0x14a5: 0x000c, 0x14a6: 0x000c, 0x14a7: 0x000c, 0x14a8: 0x000c, 0x14a9: 0x000c, - 0x14aa: 0x000c, 0x14ab: 0x000c, 0x14ac: 0x000c, 0x14ad: 0x000c, 0x14ae: 0x000c, 0x14af: 0x000c, - 0x14b0: 0x000c, - // Block 0x53, offset 0x14c0 - 0x14c0: 0x000a, 0x14c1: 0x000a, 0x14c3: 0x000a, 0x14c4: 0x000a, 0x14c5: 0x000a, - 0x14c6: 0x000a, 0x14c8: 0x000a, 0x14c9: 0x000a, - 0x14d4: 0x000a, 0x14d6: 0x000a, 0x14d7: 0x000a, - 0x14d8: 0x000a, - 0x14de: 0x000a, 0x14df: 0x000a, 0x14e0: 0x000a, 0x14e1: 0x000a, 0x14e2: 0x000a, 0x14e3: 0x000a, - 0x14e5: 0x000a, 0x14e7: 0x000a, 0x14e9: 0x000a, - 0x14ee: 0x0004, - 0x14fa: 0x000a, 0x14fb: 0x000a, - // Block 0x54, offset 0x1500 - 0x1500: 0x000a, 0x1501: 0x000a, 0x1502: 0x000a, 0x1503: 0x000a, 0x1504: 0x000a, - 0x150a: 0x000a, 0x150b: 0x000a, - 0x150c: 0x000a, 0x150d: 0x000a, 0x1510: 0x000a, 0x1511: 0x000a, - 0x1512: 0x000a, 0x1513: 0x000a, 0x1514: 0x000a, 0x1515: 0x000a, 0x1516: 0x000a, 0x1517: 0x000a, - 0x1518: 0x000a, 0x1519: 0x000a, 0x151a: 0x000a, 0x151b: 0x000a, 0x151c: 0x000a, 0x151d: 0x000a, - 0x151e: 0x000a, 0x151f: 0x000a, - // Block 0x55, offset 0x1540 - 0x1549: 0x000a, 0x154a: 0x000a, 0x154b: 0x000a, - 0x1550: 0x000a, 0x1551: 0x000a, - 0x1552: 0x000a, 0x1553: 0x000a, 0x1554: 0x000a, 0x1555: 0x000a, 0x1556: 0x000a, 0x1557: 0x000a, - 0x1558: 0x000a, 0x1559: 0x000a, 0x155a: 0x000a, 0x155b: 0x000a, 0x155c: 0x000a, 0x155d: 0x000a, - 0x155e: 0x000a, 0x155f: 0x000a, 0x1560: 0x000a, 0x1561: 0x000a, 0x1562: 0x000a, 0x1563: 0x000a, - 0x1564: 0x000a, 0x1565: 0x000a, 0x1566: 0x000a, 0x1567: 0x000a, 0x1568: 0x000a, 0x1569: 0x000a, - 0x156a: 0x000a, 0x156b: 0x000a, 0x156c: 0x000a, 0x156d: 0x000a, 0x156e: 0x000a, 0x156f: 0x000a, - 0x1570: 0x000a, 0x1571: 0x000a, 0x1572: 0x000a, 0x1573: 0x000a, 0x1574: 0x000a, 0x1575: 0x000a, - 0x1576: 0x000a, 0x1577: 0x000a, 0x1578: 0x000a, 0x1579: 0x000a, 0x157a: 0x000a, 0x157b: 0x000a, - 0x157c: 0x000a, 0x157d: 0x000a, 0x157e: 0x000a, 0x157f: 0x000a, - // Block 0x56, offset 0x1580 - 0x1580: 0x000a, 0x1581: 0x000a, 0x1582: 0x000a, 0x1583: 0x000a, 0x1584: 0x000a, 0x1585: 0x000a, - 0x1586: 0x000a, 0x1587: 0x000a, 0x1588: 0x000a, 0x1589: 0x000a, 0x158a: 0x000a, 0x158b: 0x000a, - 0x158c: 0x000a, 0x158d: 0x000a, 0x158e: 0x000a, 0x158f: 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, 0x15a0: 0x000a, 0x15a1: 0x000a, 0x15a2: 0x000a, 0x15a3: 0x000a, - 0x15a4: 0x000a, 0x15a5: 0x000a, 0x15a6: 0x000a, 0x15a7: 0x000a, 0x15a8: 0x000a, 0x15a9: 0x000a, - 0x15aa: 0x000a, 0x15ab: 0x000a, 0x15ac: 0x000a, 0x15ad: 0x000a, 0x15ae: 0x000a, 0x15af: 0x000a, - 0x15b0: 0x000a, 0x15b1: 0x000a, 0x15b2: 0x000a, 0x15b3: 0x000a, 0x15b4: 0x000a, 0x15b5: 0x000a, - 0x15b6: 0x000a, 0x15b7: 0x000a, 0x15b8: 0x000a, 0x15b9: 0x000a, 0x15ba: 0x000a, 0x15bb: 0x000a, - 0x15bc: 0x000a, 0x15bd: 0x000a, 0x15be: 0x000a, 0x15bf: 0x000a, - // Block 0x57, offset 0x15c0 - 0x15c0: 0x000a, 0x15c1: 0x000a, 0x15c2: 0x000a, 0x15c3: 0x000a, 0x15c4: 0x000a, 0x15c5: 0x000a, - 0x15c6: 0x000a, 0x15c7: 0x000a, 0x15c8: 0x000a, 0x15c9: 0x000a, 0x15ca: 0x000a, 0x15cb: 0x000a, - 0x15cc: 0x000a, 0x15cd: 0x000a, 0x15ce: 0x000a, 0x15cf: 0x000a, 0x15d0: 0x000a, 0x15d1: 0x000a, - 0x15d2: 0x0003, 0x15d3: 0x0004, 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: 0x003a, 0x1609: 0x002a, 0x160a: 0x003a, 0x160b: 0x002a, - 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: 0x009a, - 0x162a: 0x008a, 0x162b: 0x000a, 0x162c: 0x000a, 0x162d: 0x000a, 0x162e: 0x000a, 0x162f: 0x000a, - 0x1630: 0x000a, 0x1631: 0x000a, 0x1632: 0x000a, 0x1633: 0x000a, 0x1634: 0x000a, 0x1635: 0x000a, - // Block 0x59, offset 0x1640 - 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: 0x000a, 0x1689: 0x000a, 0x168a: 0x000a, 0x168b: 0x000a, - 0x168c: 0x000a, 0x168d: 0x000a, 0x168e: 0x000a, 0x168f: 0x000a, 0x1690: 0x000a, 0x1691: 0x000a, - 0x1692: 0x000a, 0x1693: 0x000a, 0x1694: 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: 0x000a, - 0x16aa: 0x000a, 0x16ab: 0x000a, 0x16ac: 0x000a, 0x16ad: 0x000a, 0x16ae: 0x000a, 0x16af: 0x000a, - 0x16b0: 0x000a, 0x16b1: 0x000a, 0x16b2: 0x000a, 0x16b3: 0x000a, 0x16b4: 0x000a, 0x16b5: 0x000a, - 0x16b6: 0x000a, 0x16b7: 0x000a, 0x16b8: 0x000a, 0x16b9: 0x000a, 0x16ba: 0x000a, 0x16bb: 0x000a, - 0x16bc: 0x000a, 0x16bd: 0x000a, 0x16be: 0x000a, 0x16bf: 0x000a, - // Block 0x5b, offset 0x16c0 - 0x16c0: 0x000a, 0x16c1: 0x000a, 0x16c2: 0x000a, 0x16c3: 0x000a, 0x16c4: 0x000a, 0x16c5: 0x000a, - 0x16c6: 0x000a, 0x16c7: 0x000a, 0x16c8: 0x000a, 0x16c9: 0x000a, 0x16ca: 0x000a, 0x16cb: 0x000a, - 0x16cc: 0x000a, 0x16cd: 0x000a, 0x16ce: 0x000a, 0x16cf: 0x000a, 0x16d0: 0x000a, 0x16d1: 0x000a, - 0x16d2: 0x000a, 0x16d3: 0x000a, 0x16d4: 0x000a, 0x16d5: 0x000a, 0x16d6: 0x000a, 0x16d7: 0x000a, - 0x16d8: 0x000a, 0x16d9: 0x000a, 0x16da: 0x000a, 0x16db: 0x000a, 0x16dc: 0x000a, 0x16dd: 0x000a, - 0x16de: 0x000a, 0x16df: 0x000a, 0x16e0: 0x000a, 0x16e1: 0x000a, 0x16e2: 0x000a, 0x16e3: 0x000a, - 0x16e4: 0x000a, 0x16e5: 0x000a, 0x16e6: 0x000a, 0x16e7: 0x000a, 0x16e8: 0x000a, 0x16e9: 0x000a, - 0x16ea: 0x000a, 0x16eb: 0x000a, 0x16ec: 0x000a, 0x16ed: 0x000a, 0x16ee: 0x000a, 0x16ef: 0x000a, - 0x16f0: 0x000a, 0x16f1: 0x000a, 0x16f2: 0x000a, 0x16f3: 0x000a, 0x16f4: 0x000a, 0x16f5: 0x000a, - 0x16f6: 0x000a, 0x16f7: 0x000a, 0x16f8: 0x000a, 0x16f9: 0x000a, 0x16fa: 0x000a, 0x16fb: 0x000a, - 0x16fc: 0x000a, 0x16fd: 0x000a, 0x16fe: 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, 0x1715: 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, - // 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, - 0x1760: 0x000a, 0x1761: 0x000a, 0x1762: 0x000a, 0x1763: 0x000a, - 0x1764: 0x000a, 0x1765: 0x000a, 0x1766: 0x000a, 0x1767: 0x000a, 0x1768: 0x000a, 0x1769: 0x000a, - 0x176a: 0x000a, 0x176b: 0x000a, 0x176c: 0x000a, 0x176d: 0x000a, 0x176e: 0x000a, 0x176f: 0x000a, - 0x1770: 0x000a, 0x1771: 0x000a, 0x1772: 0x000a, 0x1773: 0x000a, 0x1774: 0x000a, 0x1775: 0x000a, - 0x1776: 0x000a, 0x1777: 0x000a, 0x1778: 0x000a, 0x1779: 0x000a, 0x177a: 0x000a, 0x177b: 0x000a, - 0x177c: 0x000a, 0x177d: 0x000a, 0x177e: 0x000a, 0x177f: 0x000a, - // Block 0x5e, offset 0x1780 - 0x1780: 0x000a, 0x1781: 0x000a, 0x1782: 0x000a, 0x1783: 0x000a, 0x1784: 0x000a, 0x1785: 0x000a, - 0x1786: 0x000a, 0x1787: 0x000a, 0x1788: 0x0002, 0x1789: 0x0002, 0x178a: 0x0002, 0x178b: 0x0002, - 0x178c: 0x0002, 0x178d: 0x0002, 0x178e: 0x0002, 0x178f: 0x0002, 0x1790: 0x0002, 0x1791: 0x0002, - 0x1792: 0x0002, 0x1793: 0x0002, 0x1794: 0x0002, 0x1795: 0x0002, 0x1796: 0x0002, 0x1797: 0x0002, - 0x1798: 0x0002, 0x1799: 0x0002, 0x179a: 0x0002, 0x179b: 0x0002, - // Block 0x5f, offset 0x17c0 - 0x17ea: 0x000a, 0x17eb: 0x000a, 0x17ec: 0x000a, 0x17ed: 0x000a, 0x17ee: 0x000a, 0x17ef: 0x000a, - 0x17f0: 0x000a, 0x17f1: 0x000a, 0x17f2: 0x000a, 0x17f3: 0x000a, 0x17f4: 0x000a, 0x17f5: 0x000a, - 0x17f6: 0x000a, 0x17f7: 0x000a, 0x17f8: 0x000a, 0x17f9: 0x000a, 0x17fa: 0x000a, 0x17fb: 0x000a, - 0x17fc: 0x000a, 0x17fd: 0x000a, 0x17fe: 0x000a, 0x17ff: 0x000a, - // Block 0x60, offset 0x1800 - 0x1800: 0x000a, 0x1801: 0x000a, 0x1802: 0x000a, 0x1803: 0x000a, 0x1804: 0x000a, 0x1805: 0x000a, - 0x1806: 0x000a, 0x1807: 0x000a, 0x1808: 0x000a, 0x1809: 0x000a, 0x180a: 0x000a, 0x180b: 0x000a, - 0x180c: 0x000a, 0x180d: 0x000a, 0x180e: 0x000a, 0x180f: 0x000a, 0x1810: 0x000a, 0x1811: 0x000a, - 0x1812: 0x000a, 0x1813: 0x000a, 0x1814: 0x000a, 0x1815: 0x000a, 0x1816: 0x000a, 0x1817: 0x000a, - 0x1818: 0x000a, 0x1819: 0x000a, 0x181a: 0x000a, 0x181b: 0x000a, 0x181c: 0x000a, 0x181d: 0x000a, - 0x181e: 0x000a, 0x181f: 0x000a, 0x1820: 0x000a, 0x1821: 0x000a, 0x1822: 0x000a, 0x1823: 0x000a, - 0x1824: 0x000a, 0x1825: 0x000a, 0x1826: 0x000a, 0x1827: 0x000a, 0x1828: 0x000a, 0x1829: 0x000a, - 0x182a: 0x000a, 0x182b: 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: 0x003a, 0x1869: 0x002a, - 0x186a: 0x003a, 0x186b: 0x002a, 0x186c: 0x003a, 0x186d: 0x002a, 0x186e: 0x003a, 0x186f: 0x002a, - 0x1870: 0x003a, 0x1871: 0x002a, 0x1872: 0x003a, 0x1873: 0x002a, 0x1874: 0x003a, 0x1875: 0x002a, - 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: 0x009a, - 0x1886: 0x008a, 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: 0x003a, 0x18a7: 0x002a, 0x18a8: 0x003a, 0x18a9: 0x002a, - 0x18aa: 0x003a, 0x18ab: 0x002a, 0x18ac: 0x003a, 0x18ad: 0x002a, 0x18ae: 0x003a, 0x18af: 0x002a, - 0x18b0: 0x000a, 0x18b1: 0x000a, 0x18b2: 0x000a, 0x18b3: 0x000a, 0x18b4: 0x000a, 0x18b5: 0x000a, - 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: 0x007a, 0x18c4: 0x006a, 0x18c5: 0x009a, - 0x18c6: 0x008a, 0x18c7: 0x00ba, 0x18c8: 0x00aa, 0x18c9: 0x009a, 0x18ca: 0x008a, 0x18cb: 0x007a, - 0x18cc: 0x006a, 0x18cd: 0x00da, 0x18ce: 0x002a, 0x18cf: 0x003a, 0x18d0: 0x00ca, 0x18d1: 0x009a, - 0x18d2: 0x008a, 0x18d3: 0x007a, 0x18d4: 0x006a, 0x18d5: 0x009a, 0x18d6: 0x008a, 0x18d7: 0x00ba, - 0x18d8: 0x00aa, 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: 0x000a, 0x18e7: 0x000a, 0x18e8: 0x000a, 0x18e9: 0x000a, - 0x18ea: 0x000a, 0x18eb: 0x000a, 0x18ec: 0x000a, 0x18ed: 0x000a, 0x18ee: 0x000a, 0x18ef: 0x000a, - 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: 0x000a, 0x1904: 0x000a, 0x1905: 0x000a, - 0x1906: 0x000a, 0x1907: 0x000a, 0x1908: 0x000a, 0x1909: 0x000a, 0x190a: 0x000a, 0x190b: 0x000a, - 0x190c: 0x000a, 0x190d: 0x000a, 0x190e: 0x000a, 0x190f: 0x000a, 0x1910: 0x000a, 0x1911: 0x000a, - 0x1912: 0x000a, 0x1913: 0x000a, 0x1914: 0x000a, 0x1915: 0x000a, 0x1916: 0x000a, 0x1917: 0x000a, - 0x1918: 0x003a, 0x1919: 0x002a, 0x191a: 0x003a, 0x191b: 0x002a, 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: 0x003a, 0x193d: 0x002a, 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: 0x000a, 0x1959: 0x000a, 0x195a: 0x000a, 0x195b: 0x000a, 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, - 0x1976: 0x000a, 0x1977: 0x000a, 0x1978: 0x000a, 0x1979: 0x000a, 0x197a: 0x000a, 0x197b: 0x000a, - 0x197c: 0x000a, 0x197d: 0x000a, 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, - 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, 0x19b4: 0x000a, 0x19b5: 0x000a, - 0x19b6: 0x000a, 0x19b7: 0x000a, 0x19b8: 0x000a, 0x19b9: 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, 0x19ca: 0x000a, 0x19cb: 0x000a, - 0x19cc: 0x000a, 0x19cd: 0x000a, 0x19ce: 0x000a, 0x19cf: 0x000a, 0x19d0: 0x000a, 0x19d1: 0x000a, - 0x19ec: 0x000a, 0x19ed: 0x000a, 0x19ee: 0x000a, 0x19ef: 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, - // 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, - 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, - // 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, - // 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 - 0x2365: 0x000c, 0x2368: 0x000c, - 0x236d: 0x000c, - // Block 0x8e, offset 0x2380 - 0x239d: 0x0001, - 0x239e: 0x000c, 0x239f: 0x0001, 0x23a0: 0x0001, 0x23a1: 0x0001, 0x23a2: 0x0001, 0x23a3: 0x0001, - 0x23a4: 0x0001, 0x23a5: 0x0001, 0x23a6: 0x0001, 0x23a7: 0x0001, 0x23a8: 0x0001, 0x23a9: 0x0003, - 0x23aa: 0x0001, 0x23ab: 0x0001, 0x23ac: 0x0001, 0x23ad: 0x0001, 0x23ae: 0x0001, 0x23af: 0x0001, - 0x23b0: 0x0001, 0x23b1: 0x0001, 0x23b2: 0x0001, 0x23b3: 0x0001, 0x23b4: 0x0001, 0x23b5: 0x0001, - 0x23b6: 0x0001, 0x23b7: 0x0001, 0x23b8: 0x0001, 0x23b9: 0x0001, 0x23ba: 0x0001, 0x23bb: 0x0001, - 0x23bc: 0x0001, 0x23bd: 0x0001, 0x23be: 0x0001, 0x23bf: 0x0001, - // Block 0x8f, offset 0x23c0 - 0x23c0: 0x0001, 0x23c1: 0x0001, 0x23c2: 0x0001, 0x23c3: 0x0001, 0x23c4: 0x0001, 0x23c5: 0x0001, - 0x23c6: 0x0001, 0x23c7: 0x0001, 0x23c8: 0x0001, 0x23c9: 0x0001, 0x23ca: 0x0001, 0x23cb: 0x0001, - 0x23cc: 0x0001, 0x23cd: 0x0001, 0x23ce: 0x0001, 0x23cf: 0x0001, 0x23d0: 0x000d, 0x23d1: 0x000d, - 0x23d2: 0x000d, 0x23d3: 0x000d, 0x23d4: 0x000d, 0x23d5: 0x000d, 0x23d6: 0x000d, 0x23d7: 0x000d, - 0x23d8: 0x000d, 0x23d9: 0x000d, 0x23da: 0x000d, 0x23db: 0x000d, 0x23dc: 0x000d, 0x23dd: 0x000d, - 0x23de: 0x000d, 0x23df: 0x000d, 0x23e0: 0x000d, 0x23e1: 0x000d, 0x23e2: 0x000d, 0x23e3: 0x000d, - 0x23e4: 0x000d, 0x23e5: 0x000d, 0x23e6: 0x000d, 0x23e7: 0x000d, 0x23e8: 0x000d, 0x23e9: 0x000d, - 0x23ea: 0x000d, 0x23eb: 0x000d, 0x23ec: 0x000d, 0x23ed: 0x000d, 0x23ee: 0x000d, 0x23ef: 0x000d, - 0x23f0: 0x000d, 0x23f1: 0x000d, 0x23f2: 0x000d, 0x23f3: 0x000d, 0x23f4: 0x000d, 0x23f5: 0x000d, - 0x23f6: 0x000d, 0x23f7: 0x000d, 0x23f8: 0x000d, 0x23f9: 0x000d, 0x23fa: 0x000d, 0x23fb: 0x000d, - 0x23fc: 0x000d, 0x23fd: 0x000d, 0x23fe: 0x000d, 0x23ff: 0x000d, - // Block 0x90, offset 0x2400 - 0x2400: 0x000d, 0x2401: 0x000d, 0x2402: 0x000d, 0x2403: 0x000d, 0x2404: 0x000d, 0x2405: 0x000d, - 0x2406: 0x000d, 0x2407: 0x000d, 0x2408: 0x000d, 0x2409: 0x000d, 0x240a: 0x000d, 0x240b: 0x000d, - 0x240c: 0x000d, 0x240d: 0x000d, 0x240e: 0x000d, 0x240f: 0x000d, 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: 0x000a, 0x243f: 0x000a, - // 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: 0x000b, 0x2451: 0x000b, - 0x2452: 0x000b, 0x2453: 0x000b, 0x2454: 0x000b, 0x2455: 0x000b, 0x2456: 0x000b, 0x2457: 0x000b, - 0x2458: 0x000b, 0x2459: 0x000b, 0x245a: 0x000b, 0x245b: 0x000b, 0x245c: 0x000b, 0x245d: 0x000b, - 0x245e: 0x000b, 0x245f: 0x000b, 0x2460: 0x000b, 0x2461: 0x000b, 0x2462: 0x000b, 0x2463: 0x000b, - 0x2464: 0x000b, 0x2465: 0x000b, 0x2466: 0x000b, 0x2467: 0x000b, 0x2468: 0x000b, 0x2469: 0x000b, - 0x246a: 0x000b, 0x246b: 0x000b, 0x246c: 0x000b, 0x246d: 0x000b, 0x246e: 0x000b, 0x246f: 0x000b, - 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: 0x000a, 0x247e: 0x000d, 0x247f: 0x000d, - // Block 0x92, offset 0x2480 - 0x2480: 0x000c, 0x2481: 0x000c, 0x2482: 0x000c, 0x2483: 0x000c, 0x2484: 0x000c, 0x2485: 0x000c, - 0x2486: 0x000c, 0x2487: 0x000c, 0x2488: 0x000c, 0x2489: 0x000c, 0x248a: 0x000c, 0x248b: 0x000c, - 0x248c: 0x000c, 0x248d: 0x000c, 0x248e: 0x000c, 0x248f: 0x000c, 0x2490: 0x000a, 0x2491: 0x000a, - 0x2492: 0x000a, 0x2493: 0x000a, 0x2494: 0x000a, 0x2495: 0x000a, 0x2496: 0x000a, 0x2497: 0x000a, - 0x2498: 0x000a, 0x2499: 0x000a, - 0x24a0: 0x000c, 0x24a1: 0x000c, 0x24a2: 0x000c, 0x24a3: 0x000c, - 0x24a4: 0x000c, 0x24a5: 0x000c, 0x24a6: 0x000c, 0x24a7: 0x000c, 0x24a8: 0x000c, 0x24a9: 0x000c, - 0x24aa: 0x000c, 0x24ab: 0x000c, 0x24ac: 0x000c, 0x24ad: 0x000c, 0x24ae: 0x000c, 0x24af: 0x000c, - 0x24b0: 0x000a, 0x24b1: 0x000a, 0x24b2: 0x000a, 0x24b3: 0x000a, 0x24b4: 0x000a, 0x24b5: 0x000a, - 0x24b6: 0x000a, 0x24b7: 0x000a, 0x24b8: 0x000a, 0x24b9: 0x000a, 0x24ba: 0x000a, 0x24bb: 0x000a, - 0x24bc: 0x000a, 0x24bd: 0x000a, 0x24be: 0x000a, 0x24bf: 0x000a, - // Block 0x93, offset 0x24c0 - 0x24c0: 0x000a, 0x24c1: 0x000a, 0x24c2: 0x000a, 0x24c3: 0x000a, 0x24c4: 0x000a, 0x24c5: 0x000a, - 0x24c6: 0x000a, 0x24c7: 0x000a, 0x24c8: 0x000a, 0x24c9: 0x000a, 0x24ca: 0x000a, 0x24cb: 0x000a, - 0x24cc: 0x000a, 0x24cd: 0x000a, 0x24ce: 0x000a, 0x24cf: 0x000a, 0x24d0: 0x0006, 0x24d1: 0x000a, - 0x24d2: 0x0006, 0x24d4: 0x000a, 0x24d5: 0x0006, 0x24d6: 0x000a, 0x24d7: 0x000a, - 0x24d8: 0x000a, 0x24d9: 0x009a, 0x24da: 0x008a, 0x24db: 0x007a, 0x24dc: 0x006a, 0x24dd: 0x009a, - 0x24de: 0x008a, 0x24df: 0x0004, 0x24e0: 0x000a, 0x24e1: 0x000a, 0x24e2: 0x0003, 0x24e3: 0x0003, - 0x24e4: 0x000a, 0x24e5: 0x000a, 0x24e6: 0x000a, 0x24e8: 0x000a, 0x24e9: 0x0004, - 0x24ea: 0x0004, 0x24eb: 0x000a, - 0x24f0: 0x000d, 0x24f1: 0x000d, 0x24f2: 0x000d, 0x24f3: 0x000d, 0x24f4: 0x000d, 0x24f5: 0x000d, - 0x24f6: 0x000d, 0x24f7: 0x000d, 0x24f8: 0x000d, 0x24f9: 0x000d, 0x24fa: 0x000d, 0x24fb: 0x000d, - 0x24fc: 0x000d, 0x24fd: 0x000d, 0x24fe: 0x000d, 0x24ff: 0x000d, - // Block 0x94, offset 0x2500 - 0x2500: 0x000d, 0x2501: 0x000d, 0x2502: 0x000d, 0x2503: 0x000d, 0x2504: 0x000d, 0x2505: 0x000d, - 0x2506: 0x000d, 0x2507: 0x000d, 0x2508: 0x000d, 0x2509: 0x000d, 0x250a: 0x000d, 0x250b: 0x000d, - 0x250c: 0x000d, 0x250d: 0x000d, 0x250e: 0x000d, 0x250f: 0x000d, 0x2510: 0x000d, 0x2511: 0x000d, - 0x2512: 0x000d, 0x2513: 0x000d, 0x2514: 0x000d, 0x2515: 0x000d, 0x2516: 0x000d, 0x2517: 0x000d, - 0x2518: 0x000d, 0x2519: 0x000d, 0x251a: 0x000d, 0x251b: 0x000d, 0x251c: 0x000d, 0x251d: 0x000d, - 0x251e: 0x000d, 0x251f: 0x000d, 0x2520: 0x000d, 0x2521: 0x000d, 0x2522: 0x000d, 0x2523: 0x000d, - 0x2524: 0x000d, 0x2525: 0x000d, 0x2526: 0x000d, 0x2527: 0x000d, 0x2528: 0x000d, 0x2529: 0x000d, - 0x252a: 0x000d, 0x252b: 0x000d, 0x252c: 0x000d, 0x252d: 0x000d, 0x252e: 0x000d, 0x252f: 0x000d, - 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: 0x000b, - // Block 0x95, offset 0x2540 - 0x2541: 0x000a, 0x2542: 0x000a, 0x2543: 0x0004, 0x2544: 0x0004, 0x2545: 0x0004, - 0x2546: 0x000a, 0x2547: 0x000a, 0x2548: 0x003a, 0x2549: 0x002a, 0x254a: 0x000a, 0x254b: 0x0003, - 0x254c: 0x0006, 0x254d: 0x0003, 0x254e: 0x0006, 0x254f: 0x0006, 0x2550: 0x0002, 0x2551: 0x0002, - 0x2552: 0x0002, 0x2553: 0x0002, 0x2554: 0x0002, 0x2555: 0x0002, 0x2556: 0x0002, 0x2557: 0x0002, - 0x2558: 0x0002, 0x2559: 0x0002, 0x255a: 0x0006, 0x255b: 0x000a, 0x255c: 0x000a, 0x255d: 0x000a, - 0x255e: 0x000a, 0x255f: 0x000a, 0x2560: 0x000a, - 0x257b: 0x005a, - 0x257c: 0x000a, 0x257d: 0x004a, 0x257e: 0x000a, 0x257f: 0x000a, - // Block 0x96, offset 0x2580 - 0x2580: 0x000a, - 0x259b: 0x005a, 0x259c: 0x000a, 0x259d: 0x004a, - 0x259e: 0x000a, 0x259f: 0x00fa, 0x25a0: 0x00ea, 0x25a1: 0x000a, 0x25a2: 0x003a, 0x25a3: 0x002a, - 0x25a4: 0x000a, 0x25a5: 0x000a, - // Block 0x97, offset 0x25c0 - 0x25e0: 0x0004, 0x25e1: 0x0004, 0x25e2: 0x000a, 0x25e3: 0x000a, - 0x25e4: 0x000a, 0x25e5: 0x0004, 0x25e6: 0x0004, 0x25e8: 0x000a, 0x25e9: 0x000a, - 0x25ea: 0x000a, 0x25eb: 0x000a, 0x25ec: 0x000a, 0x25ed: 0x000a, 0x25ee: 0x000a, - 0x25f0: 0x000b, 0x25f1: 0x000b, 0x25f2: 0x000b, 0x25f3: 0x000b, 0x25f4: 0x000b, 0x25f5: 0x000b, - 0x25f6: 0x000b, 0x25f7: 0x000b, 0x25f8: 0x000b, 0x25f9: 0x000a, 0x25fa: 0x000a, 0x25fb: 0x000a, - 0x25fc: 0x000a, 0x25fd: 0x000a, 0x25fe: 0x000b, 0x25ff: 0x000b, - // Block 0x98, offset 0x2600 - 0x2601: 0x000a, - // Block 0x99, offset 0x2640 - 0x2640: 0x000a, 0x2641: 0x000a, 0x2642: 0x000a, 0x2643: 0x000a, 0x2644: 0x000a, 0x2645: 0x000a, - 0x2646: 0x000a, 0x2647: 0x000a, 0x2648: 0x000a, 0x2649: 0x000a, 0x264a: 0x000a, 0x264b: 0x000a, - 0x264c: 0x000a, 0x2650: 0x000a, 0x2651: 0x000a, - 0x2652: 0x000a, 0x2653: 0x000a, 0x2654: 0x000a, 0x2655: 0x000a, 0x2656: 0x000a, 0x2657: 0x000a, - 0x2658: 0x000a, 0x2659: 0x000a, 0x265a: 0x000a, 0x265b: 0x000a, - 0x2660: 0x000a, - // Block 0x9a, offset 0x2680 - 0x26bd: 0x000c, - // Block 0x9b, offset 0x26c0 - 0x26e0: 0x000c, 0x26e1: 0x0002, 0x26e2: 0x0002, 0x26e3: 0x0002, - 0x26e4: 0x0002, 0x26e5: 0x0002, 0x26e6: 0x0002, 0x26e7: 0x0002, 0x26e8: 0x0002, 0x26e9: 0x0002, - 0x26ea: 0x0002, 0x26eb: 0x0002, 0x26ec: 0x0002, 0x26ed: 0x0002, 0x26ee: 0x0002, 0x26ef: 0x0002, - 0x26f0: 0x0002, 0x26f1: 0x0002, 0x26f2: 0x0002, 0x26f3: 0x0002, 0x26f4: 0x0002, 0x26f5: 0x0002, - 0x26f6: 0x0002, 0x26f7: 0x0002, 0x26f8: 0x0002, 0x26f9: 0x0002, 0x26fa: 0x0002, 0x26fb: 0x0002, - // Block 0x9c, offset 0x2700 - 0x2736: 0x000c, 0x2737: 0x000c, 0x2738: 0x000c, 0x2739: 0x000c, 0x273a: 0x000c, - // Block 0x9d, offset 0x2740 - 0x2740: 0x0001, 0x2741: 0x0001, 0x2742: 0x0001, 0x2743: 0x0001, 0x2744: 0x0001, 0x2745: 0x0001, - 0x2746: 0x0001, 0x2747: 0x0001, 0x2748: 0x0001, 0x2749: 0x0001, 0x274a: 0x0001, 0x274b: 0x0001, - 0x274c: 0x0001, 0x274d: 0x0001, 0x274e: 0x0001, 0x274f: 0x0001, 0x2750: 0x0001, 0x2751: 0x0001, - 0x2752: 0x0001, 0x2753: 0x0001, 0x2754: 0x0001, 0x2755: 0x0001, 0x2756: 0x0001, 0x2757: 0x0001, - 0x2758: 0x0001, 0x2759: 0x0001, 0x275a: 0x0001, 0x275b: 0x0001, 0x275c: 0x0001, 0x275d: 0x0001, - 0x275e: 0x0001, 0x275f: 0x0001, 0x2760: 0x0001, 0x2761: 0x0001, 0x2762: 0x0001, 0x2763: 0x0001, - 0x2764: 0x0001, 0x2765: 0x0001, 0x2766: 0x0001, 0x2767: 0x0001, 0x2768: 0x0001, 0x2769: 0x0001, - 0x276a: 0x0001, 0x276b: 0x0001, 0x276c: 0x0001, 0x276d: 0x0001, 0x276e: 0x0001, 0x276f: 0x0001, - 0x2770: 0x0001, 0x2771: 0x0001, 0x2772: 0x0001, 0x2773: 0x0001, 0x2774: 0x0001, 0x2775: 0x0001, - 0x2776: 0x0001, 0x2777: 0x0001, 0x2778: 0x0001, 0x2779: 0x0001, 0x277a: 0x0001, 0x277b: 0x0001, - 0x277c: 0x0001, 0x277d: 0x0001, 0x277e: 0x0001, 0x277f: 0x0001, - // 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: 0x000a, 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: 0x000c, 0x27c2: 0x000c, 0x27c3: 0x000c, 0x27c4: 0x0001, 0x27c5: 0x000c, - 0x27c6: 0x000c, 0x27c7: 0x0001, 0x27c8: 0x0001, 0x27c9: 0x0001, 0x27ca: 0x0001, 0x27cb: 0x0001, - 0x27cc: 0x000c, 0x27cd: 0x000c, 0x27ce: 0x000c, 0x27cf: 0x000c, 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: 0x0001, 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: 0x000c, 0x27f9: 0x000c, 0x27fa: 0x000c, 0x27fb: 0x0001, - 0x27fc: 0x0001, 0x27fd: 0x0001, 0x27fe: 0x0001, 0x27ff: 0x000c, - // Block 0xa0, offset 0x2800 - 0x2800: 0x0001, 0x2801: 0x0001, 0x2802: 0x0001, 0x2803: 0x0001, 0x2804: 0x0001, 0x2805: 0x0001, - 0x2806: 0x0001, 0x2807: 0x0001, 0x2808: 0x0001, 0x2809: 0x0001, 0x280a: 0x0001, 0x280b: 0x0001, - 0x280c: 0x0001, 0x280d: 0x0001, 0x280e: 0x0001, 0x280f: 0x0001, 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: 0x000c, 0x2826: 0x000c, 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: 0x0001, 0x2839: 0x0001, 0x283a: 0x0001, 0x283b: 0x0001, - 0x283c: 0x0001, 0x283d: 0x0001, 0x283e: 0x0001, 0x283f: 0x0001, - // 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: 0x0001, 0x2866: 0x0001, 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: 0x000a, 0x287a: 0x000a, 0x287b: 0x000a, - 0x287c: 0x000a, 0x287d: 0x000a, 0x287e: 0x000a, 0x287f: 0x000a, - // 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: 0x0005, 0x28a1: 0x0005, 0x28a2: 0x0005, 0x28a3: 0x0005, - 0x28a4: 0x0005, 0x28a5: 0x0005, 0x28a6: 0x0005, 0x28a7: 0x0005, 0x28a8: 0x0005, 0x28a9: 0x0005, - 0x28aa: 0x0005, 0x28ab: 0x0005, 0x28ac: 0x0005, 0x28ad: 0x0005, 0x28ae: 0x0005, 0x28af: 0x0005, - 0x28b0: 0x0005, 0x28b1: 0x0005, 0x28b2: 0x0005, 0x28b3: 0x0005, 0x28b4: 0x0005, 0x28b5: 0x0005, - 0x28b6: 0x0005, 0x28b7: 0x0005, 0x28b8: 0x0005, 0x28b9: 0x0005, 0x28ba: 0x0005, 0x28bb: 0x0005, - 0x28bc: 0x0005, 0x28bd: 0x0005, 0x28be: 0x0005, 0x28bf: 0x0001, - // Block 0xa3, offset 0x28c0 - 0x28c1: 0x000c, - 0x28f8: 0x000c, 0x28f9: 0x000c, 0x28fa: 0x000c, 0x28fb: 0x000c, - 0x28fc: 0x000c, 0x28fd: 0x000c, 0x28fe: 0x000c, 0x28ff: 0x000c, - // Block 0xa4, offset 0x2900 - 0x2900: 0x000c, 0x2901: 0x000c, 0x2902: 0x000c, 0x2903: 0x000c, 0x2904: 0x000c, 0x2905: 0x000c, - 0x2906: 0x000c, - 0x2912: 0x000a, 0x2913: 0x000a, 0x2914: 0x000a, 0x2915: 0x000a, 0x2916: 0x000a, 0x2917: 0x000a, - 0x2918: 0x000a, 0x2919: 0x000a, 0x291a: 0x000a, 0x291b: 0x000a, 0x291c: 0x000a, 0x291d: 0x000a, - 0x291e: 0x000a, 0x291f: 0x000a, 0x2920: 0x000a, 0x2921: 0x000a, 0x2922: 0x000a, 0x2923: 0x000a, - 0x2924: 0x000a, 0x2925: 0x000a, - 0x293f: 0x000c, - // Block 0xa5, offset 0x2940 - 0x2940: 0x000c, 0x2941: 0x000c, - 0x2973: 0x000c, 0x2974: 0x000c, 0x2975: 0x000c, - 0x2976: 0x000c, 0x2979: 0x000c, 0x297a: 0x000c, - // Block 0xa6, offset 0x2980 - 0x2980: 0x000c, 0x2981: 0x000c, 0x2982: 0x000c, - 0x29a7: 0x000c, 0x29a8: 0x000c, 0x29a9: 0x000c, - 0x29aa: 0x000c, 0x29ab: 0x000c, 0x29ad: 0x000c, 0x29ae: 0x000c, 0x29af: 0x000c, - 0x29b0: 0x000c, 0x29b1: 0x000c, 0x29b2: 0x000c, 0x29b3: 0x000c, 0x29b4: 0x000c, - // Block 0xa7, offset 0x29c0 - 0x29f3: 0x000c, - // Block 0xa8, offset 0x2a00 - 0x2a00: 0x000c, 0x2a01: 0x000c, - 0x2a36: 0x000c, 0x2a37: 0x000c, 0x2a38: 0x000c, 0x2a39: 0x000c, 0x2a3a: 0x000c, 0x2a3b: 0x000c, - 0x2a3c: 0x000c, 0x2a3d: 0x000c, 0x2a3e: 0x000c, - // Block 0xa9, offset 0x2a40 - 0x2a4a: 0x000c, 0x2a4b: 0x000c, - 0x2a4c: 0x000c, - // Block 0xaa, offset 0x2a80 - 0x2aaf: 0x000c, - 0x2ab0: 0x000c, 0x2ab1: 0x000c, 0x2ab4: 0x000c, - 0x2ab6: 0x000c, 0x2ab7: 0x000c, - 0x2abe: 0x000c, - // Block 0xab, offset 0x2ac0 - 0x2adf: 0x000c, 0x2ae3: 0x000c, - 0x2ae4: 0x000c, 0x2ae5: 0x000c, 0x2ae6: 0x000c, 0x2ae7: 0x000c, 0x2ae8: 0x000c, 0x2ae9: 0x000c, - 0x2aea: 0x000c, - // Block 0xac, offset 0x2b00 - 0x2b00: 0x000c, 0x2b01: 0x000c, - 0x2b3c: 0x000c, - // Block 0xad, offset 0x2b40 - 0x2b40: 0x000c, - 0x2b66: 0x000c, 0x2b67: 0x000c, 0x2b68: 0x000c, 0x2b69: 0x000c, - 0x2b6a: 0x000c, 0x2b6b: 0x000c, 0x2b6c: 0x000c, - 0x2b70: 0x000c, 0x2b71: 0x000c, 0x2b72: 0x000c, 0x2b73: 0x000c, 0x2b74: 0x000c, - // Block 0xae, offset 0x2b80 - 0x2bb8: 0x000c, 0x2bb9: 0x000c, 0x2bba: 0x000c, 0x2bbb: 0x000c, - 0x2bbc: 0x000c, 0x2bbd: 0x000c, 0x2bbe: 0x000c, 0x2bbf: 0x000c, - // Block 0xaf, offset 0x2bc0 - 0x2bc2: 0x000c, 0x2bc3: 0x000c, 0x2bc4: 0x000c, - 0x2bc6: 0x000c, - // Block 0xb0, offset 0x2c00 - 0x2c33: 0x000c, 0x2c34: 0x000c, 0x2c35: 0x000c, - 0x2c36: 0x000c, 0x2c37: 0x000c, 0x2c38: 0x000c, 0x2c3a: 0x000c, - 0x2c3f: 0x000c, - // Block 0xb1, offset 0x2c40 - 0x2c40: 0x000c, 0x2c42: 0x000c, 0x2c43: 0x000c, - // Block 0xb2, offset 0x2c80 - 0x2cb2: 0x000c, 0x2cb3: 0x000c, 0x2cb4: 0x000c, 0x2cb5: 0x000c, - 0x2cbc: 0x000c, 0x2cbd: 0x000c, 0x2cbf: 0x000c, - // Block 0xb3, offset 0x2cc0 - 0x2cc0: 0x000c, - 0x2cdc: 0x000c, 0x2cdd: 0x000c, - // Block 0xb4, offset 0x2d00 - 0x2d33: 0x000c, 0x2d34: 0x000c, 0x2d35: 0x000c, - 0x2d36: 0x000c, 0x2d37: 0x000c, 0x2d38: 0x000c, 0x2d39: 0x000c, 0x2d3a: 0x000c, - 0x2d3d: 0x000c, 0x2d3f: 0x000c, - // Block 0xb5, offset 0x2d40 - 0x2d40: 0x000c, - 0x2d60: 0x000a, 0x2d61: 0x000a, 0x2d62: 0x000a, 0x2d63: 0x000a, - 0x2d64: 0x000a, 0x2d65: 0x000a, 0x2d66: 0x000a, 0x2d67: 0x000a, 0x2d68: 0x000a, 0x2d69: 0x000a, - 0x2d6a: 0x000a, 0x2d6b: 0x000a, 0x2d6c: 0x000a, - // Block 0xb6, offset 0x2d80 - 0x2dab: 0x000c, 0x2dad: 0x000c, - 0x2db0: 0x000c, 0x2db1: 0x000c, 0x2db2: 0x000c, 0x2db3: 0x000c, 0x2db4: 0x000c, 0x2db5: 0x000c, - 0x2db7: 0x000c, - // Block 0xb7, offset 0x2dc0 - 0x2ddd: 0x000c, - 0x2dde: 0x000c, 0x2ddf: 0x000c, 0x2de2: 0x000c, 0x2de3: 0x000c, - 0x2de4: 0x000c, 0x2de5: 0x000c, 0x2de7: 0x000c, 0x2de8: 0x000c, 0x2de9: 0x000c, - 0x2dea: 0x000c, 0x2deb: 0x000c, - // Block 0xb8, offset 0x2e00 - 0x2e30: 0x000c, 0x2e31: 0x000c, 0x2e32: 0x000c, 0x2e33: 0x000c, 0x2e34: 0x000c, 0x2e35: 0x000c, - 0x2e36: 0x000c, 0x2e38: 0x000c, 0x2e39: 0x000c, 0x2e3a: 0x000c, 0x2e3b: 0x000c, - 0x2e3c: 0x000c, 0x2e3d: 0x000c, - // Block 0xb9, offset 0x2e40 - 0x2e52: 0x000c, 0x2e53: 0x000c, 0x2e54: 0x000c, 0x2e55: 0x000c, 0x2e56: 0x000c, 0x2e57: 0x000c, - 0x2e58: 0x000c, 0x2e59: 0x000c, 0x2e5a: 0x000c, 0x2e5b: 0x000c, 0x2e5c: 0x000c, 0x2e5d: 0x000c, - 0x2e5e: 0x000c, 0x2e5f: 0x000c, 0x2e60: 0x000c, 0x2e61: 0x000c, 0x2e62: 0x000c, 0x2e63: 0x000c, - 0x2e64: 0x000c, 0x2e65: 0x000c, 0x2e66: 0x000c, 0x2e67: 0x000c, - 0x2e6a: 0x000c, 0x2e6b: 0x000c, 0x2e6c: 0x000c, 0x2e6d: 0x000c, 0x2e6e: 0x000c, 0x2e6f: 0x000c, - 0x2e70: 0x000c, 0x2e72: 0x000c, 0x2e73: 0x000c, 0x2e75: 0x000c, - 0x2e76: 0x000c, - // Block 0xba, offset 0x2e80 - 0x2eb0: 0x000c, 0x2eb1: 0x000c, 0x2eb2: 0x000c, 0x2eb3: 0x000c, 0x2eb4: 0x000c, - // Block 0xbb, offset 0x2ec0 - 0x2ef0: 0x000c, 0x2ef1: 0x000c, 0x2ef2: 0x000c, 0x2ef3: 0x000c, 0x2ef4: 0x000c, 0x2ef5: 0x000c, - 0x2ef6: 0x000c, - // Block 0xbc, offset 0x2f00 - 0x2f0f: 0x000c, 0x2f10: 0x000c, 0x2f11: 0x000c, - 0x2f12: 0x000c, - // Block 0xbd, offset 0x2f40 - 0x2f5d: 0x000c, - 0x2f5e: 0x000c, 0x2f60: 0x000b, 0x2f61: 0x000b, 0x2f62: 0x000b, 0x2f63: 0x000b, - // Block 0xbe, offset 0x2f80 - 0x2fa7: 0x000c, 0x2fa8: 0x000c, 0x2fa9: 0x000c, - 0x2fb3: 0x000b, 0x2fb4: 0x000b, 0x2fb5: 0x000b, - 0x2fb6: 0x000b, 0x2fb7: 0x000b, 0x2fb8: 0x000b, 0x2fb9: 0x000b, 0x2fba: 0x000b, 0x2fbb: 0x000c, - 0x2fbc: 0x000c, 0x2fbd: 0x000c, 0x2fbe: 0x000c, 0x2fbf: 0x000c, - // Block 0xbf, offset 0x2fc0 - 0x2fc0: 0x000c, 0x2fc1: 0x000c, 0x2fc2: 0x000c, 0x2fc5: 0x000c, - 0x2fc6: 0x000c, 0x2fc7: 0x000c, 0x2fc8: 0x000c, 0x2fc9: 0x000c, 0x2fca: 0x000c, 0x2fcb: 0x000c, - 0x2fea: 0x000c, 0x2feb: 0x000c, 0x2fec: 0x000c, 0x2fed: 0x000c, - // Block 0xc0, offset 0x3000 - 0x3000: 0x000a, 0x3001: 0x000a, 0x3002: 0x000c, 0x3003: 0x000c, 0x3004: 0x000c, 0x3005: 0x000a, - // Block 0xc1, offset 0x3040 - 0x3040: 0x000a, 0x3041: 0x000a, 0x3042: 0x000a, 0x3043: 0x000a, 0x3044: 0x000a, 0x3045: 0x000a, - 0x3046: 0x000a, 0x3047: 0x000a, 0x3048: 0x000a, 0x3049: 0x000a, 0x304a: 0x000a, 0x304b: 0x000a, - 0x304c: 0x000a, 0x304d: 0x000a, 0x304e: 0x000a, 0x304f: 0x000a, 0x3050: 0x000a, 0x3051: 0x000a, - 0x3052: 0x000a, 0x3053: 0x000a, 0x3054: 0x000a, 0x3055: 0x000a, 0x3056: 0x000a, - // Block 0xc2, offset 0x3080 - 0x309b: 0x000a, - // Block 0xc3, offset 0x30c0 - 0x30d5: 0x000a, - // Block 0xc4, offset 0x3100 - 0x310f: 0x000a, - // Block 0xc5, offset 0x3140 - 0x3149: 0x000a, - // Block 0xc6, offset 0x3180 - 0x3183: 0x000a, - 0x318e: 0x0002, 0x318f: 0x0002, 0x3190: 0x0002, 0x3191: 0x0002, - 0x3192: 0x0002, 0x3193: 0x0002, 0x3194: 0x0002, 0x3195: 0x0002, 0x3196: 0x0002, 0x3197: 0x0002, - 0x3198: 0x0002, 0x3199: 0x0002, 0x319a: 0x0002, 0x319b: 0x0002, 0x319c: 0x0002, 0x319d: 0x0002, - 0x319e: 0x0002, 0x319f: 0x0002, 0x31a0: 0x0002, 0x31a1: 0x0002, 0x31a2: 0x0002, 0x31a3: 0x0002, - 0x31a4: 0x0002, 0x31a5: 0x0002, 0x31a6: 0x0002, 0x31a7: 0x0002, 0x31a8: 0x0002, 0x31a9: 0x0002, - 0x31aa: 0x0002, 0x31ab: 0x0002, 0x31ac: 0x0002, 0x31ad: 0x0002, 0x31ae: 0x0002, 0x31af: 0x0002, - 0x31b0: 0x0002, 0x31b1: 0x0002, 0x31b2: 0x0002, 0x31b3: 0x0002, 0x31b4: 0x0002, 0x31b5: 0x0002, - 0x31b6: 0x0002, 0x31b7: 0x0002, 0x31b8: 0x0002, 0x31b9: 0x0002, 0x31ba: 0x0002, 0x31bb: 0x0002, - 0x31bc: 0x0002, 0x31bd: 0x0002, 0x31be: 0x0002, 0x31bf: 0x0002, - // Block 0xc7, offset 0x31c0 - 0x31c0: 0x000c, 0x31c1: 0x000c, 0x31c2: 0x000c, 0x31c3: 0x000c, 0x31c4: 0x000c, 0x31c5: 0x000c, - 0x31c6: 0x000c, 0x31c7: 0x000c, 0x31c8: 0x000c, 0x31c9: 0x000c, 0x31ca: 0x000c, 0x31cb: 0x000c, - 0x31cc: 0x000c, 0x31cd: 0x000c, 0x31ce: 0x000c, 0x31cf: 0x000c, 0x31d0: 0x000c, 0x31d1: 0x000c, - 0x31d2: 0x000c, 0x31d3: 0x000c, 0x31d4: 0x000c, 0x31d5: 0x000c, 0x31d6: 0x000c, 0x31d7: 0x000c, - 0x31d8: 0x000c, 0x31d9: 0x000c, 0x31da: 0x000c, 0x31db: 0x000c, 0x31dc: 0x000c, 0x31dd: 0x000c, - 0x31de: 0x000c, 0x31df: 0x000c, 0x31e0: 0x000c, 0x31e1: 0x000c, 0x31e2: 0x000c, 0x31e3: 0x000c, - 0x31e4: 0x000c, 0x31e5: 0x000c, 0x31e6: 0x000c, 0x31e7: 0x000c, 0x31e8: 0x000c, 0x31e9: 0x000c, - 0x31ea: 0x000c, 0x31eb: 0x000c, 0x31ec: 0x000c, 0x31ed: 0x000c, 0x31ee: 0x000c, 0x31ef: 0x000c, - 0x31f0: 0x000c, 0x31f1: 0x000c, 0x31f2: 0x000c, 0x31f3: 0x000c, 0x31f4: 0x000c, 0x31f5: 0x000c, - 0x31f6: 0x000c, 0x31fb: 0x000c, - 0x31fc: 0x000c, 0x31fd: 0x000c, 0x31fe: 0x000c, 0x31ff: 0x000c, - // Block 0xc8, offset 0x3200 - 0x3200: 0x000c, 0x3201: 0x000c, 0x3202: 0x000c, 0x3203: 0x000c, 0x3204: 0x000c, 0x3205: 0x000c, - 0x3206: 0x000c, 0x3207: 0x000c, 0x3208: 0x000c, 0x3209: 0x000c, 0x320a: 0x000c, 0x320b: 0x000c, - 0x320c: 0x000c, 0x320d: 0x000c, 0x320e: 0x000c, 0x320f: 0x000c, 0x3210: 0x000c, 0x3211: 0x000c, - 0x3212: 0x000c, 0x3213: 0x000c, 0x3214: 0x000c, 0x3215: 0x000c, 0x3216: 0x000c, 0x3217: 0x000c, - 0x3218: 0x000c, 0x3219: 0x000c, 0x321a: 0x000c, 0x321b: 0x000c, 0x321c: 0x000c, 0x321d: 0x000c, - 0x321e: 0x000c, 0x321f: 0x000c, 0x3220: 0x000c, 0x3221: 0x000c, 0x3222: 0x000c, 0x3223: 0x000c, - 0x3224: 0x000c, 0x3225: 0x000c, 0x3226: 0x000c, 0x3227: 0x000c, 0x3228: 0x000c, 0x3229: 0x000c, - 0x322a: 0x000c, 0x322b: 0x000c, 0x322c: 0x000c, - 0x3235: 0x000c, - // Block 0xc9, offset 0x3240 - 0x3244: 0x000c, - 0x325b: 0x000c, 0x325c: 0x000c, 0x325d: 0x000c, - 0x325e: 0x000c, 0x325f: 0x000c, 0x3261: 0x000c, 0x3262: 0x000c, 0x3263: 0x000c, - 0x3264: 0x000c, 0x3265: 0x000c, 0x3266: 0x000c, 0x3267: 0x000c, 0x3268: 0x000c, 0x3269: 0x000c, - 0x326a: 0x000c, 0x326b: 0x000c, 0x326c: 0x000c, 0x326d: 0x000c, 0x326e: 0x000c, 0x326f: 0x000c, - // Block 0xca, offset 0x3280 - 0x3280: 0x000c, 0x3281: 0x000c, 0x3282: 0x000c, 0x3283: 0x000c, 0x3284: 0x000c, 0x3285: 0x000c, - 0x3286: 0x000c, 0x3288: 0x000c, 0x3289: 0x000c, 0x328a: 0x000c, 0x328b: 0x000c, - 0x328c: 0x000c, 0x328d: 0x000c, 0x328e: 0x000c, 0x328f: 0x000c, 0x3290: 0x000c, 0x3291: 0x000c, - 0x3292: 0x000c, 0x3293: 0x000c, 0x3294: 0x000c, 0x3295: 0x000c, 0x3296: 0x000c, 0x3297: 0x000c, - 0x3298: 0x000c, 0x329b: 0x000c, 0x329c: 0x000c, 0x329d: 0x000c, - 0x329e: 0x000c, 0x329f: 0x000c, 0x32a0: 0x000c, 0x32a1: 0x000c, 0x32a3: 0x000c, - 0x32a4: 0x000c, 0x32a6: 0x000c, 0x32a7: 0x000c, 0x32a8: 0x000c, 0x32a9: 0x000c, - 0x32aa: 0x000c, - // Block 0xcb, offset 0x32c0 - 0x32c0: 0x0001, 0x32c1: 0x0001, 0x32c2: 0x0001, 0x32c3: 0x0001, 0x32c4: 0x0001, 0x32c5: 0x0001, - 0x32c6: 0x0001, 0x32c7: 0x0001, 0x32c8: 0x0001, 0x32c9: 0x0001, 0x32ca: 0x0001, 0x32cb: 0x0001, - 0x32cc: 0x0001, 0x32cd: 0x0001, 0x32ce: 0x0001, 0x32cf: 0x0001, 0x32d0: 0x000c, 0x32d1: 0x000c, - 0x32d2: 0x000c, 0x32d3: 0x000c, 0x32d4: 0x000c, 0x32d5: 0x000c, 0x32d6: 0x000c, 0x32d7: 0x0001, - 0x32d8: 0x0001, 0x32d9: 0x0001, 0x32da: 0x0001, 0x32db: 0x0001, 0x32dc: 0x0001, 0x32dd: 0x0001, - 0x32de: 0x0001, 0x32df: 0x0001, 0x32e0: 0x0001, 0x32e1: 0x0001, 0x32e2: 0x0001, 0x32e3: 0x0001, - 0x32e4: 0x0001, 0x32e5: 0x0001, 0x32e6: 0x0001, 0x32e7: 0x0001, 0x32e8: 0x0001, 0x32e9: 0x0001, - 0x32ea: 0x0001, 0x32eb: 0x0001, 0x32ec: 0x0001, 0x32ed: 0x0001, 0x32ee: 0x0001, 0x32ef: 0x0001, - 0x32f0: 0x0001, 0x32f1: 0x0001, 0x32f2: 0x0001, 0x32f3: 0x0001, 0x32f4: 0x0001, 0x32f5: 0x0001, - 0x32f6: 0x0001, 0x32f7: 0x0001, 0x32f8: 0x0001, 0x32f9: 0x0001, 0x32fa: 0x0001, 0x32fb: 0x0001, - 0x32fc: 0x0001, 0x32fd: 0x0001, 0x32fe: 0x0001, 0x32ff: 0x0001, - // Block 0xcc, offset 0x3300 - 0x3300: 0x0001, 0x3301: 0x0001, 0x3302: 0x0001, 0x3303: 0x0001, 0x3304: 0x000c, 0x3305: 0x000c, - 0x3306: 0x000c, 0x3307: 0x000c, 0x3308: 0x000c, 0x3309: 0x000c, 0x330a: 0x000c, 0x330b: 0x0001, - 0x330c: 0x0001, 0x330d: 0x0001, 0x330e: 0x0001, 0x330f: 0x0001, 0x3310: 0x0001, 0x3311: 0x0001, - 0x3312: 0x0001, 0x3313: 0x0001, 0x3314: 0x0001, 0x3315: 0x0001, 0x3316: 0x0001, 0x3317: 0x0001, - 0x3318: 0x0001, 0x3319: 0x0001, 0x331a: 0x0001, 0x331b: 0x0001, 0x331c: 0x0001, 0x331d: 0x0001, - 0x331e: 0x0001, 0x331f: 0x0001, 0x3320: 0x0001, 0x3321: 0x0001, 0x3322: 0x0001, 0x3323: 0x0001, - 0x3324: 0x0001, 0x3325: 0x0001, 0x3326: 0x0001, 0x3327: 0x0001, 0x3328: 0x0001, 0x3329: 0x0001, - 0x332a: 0x0001, 0x332b: 0x0001, 0x332c: 0x0001, 0x332d: 0x0001, 0x332e: 0x0001, 0x332f: 0x0001, - 0x3330: 0x0001, 0x3331: 0x0001, 0x3332: 0x0001, 0x3333: 0x0001, 0x3334: 0x0001, 0x3335: 0x0001, - 0x3336: 0x0001, 0x3337: 0x0001, 0x3338: 0x0001, 0x3339: 0x0001, 0x333a: 0x0001, 0x333b: 0x0001, - 0x333c: 0x0001, 0x333d: 0x0001, 0x333e: 0x0001, 0x333f: 0x0001, - // Block 0xcd, offset 0x3340 - 0x3340: 0x000d, 0x3341: 0x000d, 0x3342: 0x000d, 0x3343: 0x000d, 0x3344: 0x000d, 0x3345: 0x000d, - 0x3346: 0x000d, 0x3347: 0x000d, 0x3348: 0x000d, 0x3349: 0x000d, 0x334a: 0x000d, 0x334b: 0x000d, - 0x334c: 0x000d, 0x334d: 0x000d, 0x334e: 0x000d, 0x334f: 0x000d, 0x3350: 0x000d, 0x3351: 0x000d, - 0x3352: 0x000d, 0x3353: 0x000d, 0x3354: 0x000d, 0x3355: 0x000d, 0x3356: 0x000d, 0x3357: 0x000d, - 0x3358: 0x000d, 0x3359: 0x000d, 0x335a: 0x000d, 0x335b: 0x000d, 0x335c: 0x000d, 0x335d: 0x000d, - 0x335e: 0x000d, 0x335f: 0x000d, 0x3360: 0x000d, 0x3361: 0x000d, 0x3362: 0x000d, 0x3363: 0x000d, - 0x3364: 0x000d, 0x3365: 0x000d, 0x3366: 0x000d, 0x3367: 0x000d, 0x3368: 0x000d, 0x3369: 0x000d, - 0x336a: 0x000d, 0x336b: 0x000d, 0x336c: 0x000d, 0x336d: 0x000d, 0x336e: 0x000d, 0x336f: 0x000d, - 0x3370: 0x000a, 0x3371: 0x000a, 0x3372: 0x000d, 0x3373: 0x000d, 0x3374: 0x000d, 0x3375: 0x000d, - 0x3376: 0x000d, 0x3377: 0x000d, 0x3378: 0x000d, 0x3379: 0x000d, 0x337a: 0x000d, 0x337b: 0x000d, - 0x337c: 0x000d, 0x337d: 0x000d, 0x337e: 0x000d, 0x337f: 0x000d, - // Block 0xce, offset 0x3380 - 0x3380: 0x000a, 0x3381: 0x000a, 0x3382: 0x000a, 0x3383: 0x000a, 0x3384: 0x000a, 0x3385: 0x000a, - 0x3386: 0x000a, 0x3387: 0x000a, 0x3388: 0x000a, 0x3389: 0x000a, 0x338a: 0x000a, 0x338b: 0x000a, - 0x338c: 0x000a, 0x338d: 0x000a, 0x338e: 0x000a, 0x338f: 0x000a, 0x3390: 0x000a, 0x3391: 0x000a, - 0x3392: 0x000a, 0x3393: 0x000a, 0x3394: 0x000a, 0x3395: 0x000a, 0x3396: 0x000a, 0x3397: 0x000a, - 0x3398: 0x000a, 0x3399: 0x000a, 0x339a: 0x000a, 0x339b: 0x000a, 0x339c: 0x000a, 0x339d: 0x000a, - 0x339e: 0x000a, 0x339f: 0x000a, 0x33a0: 0x000a, 0x33a1: 0x000a, 0x33a2: 0x000a, 0x33a3: 0x000a, - 0x33a4: 0x000a, 0x33a5: 0x000a, 0x33a6: 0x000a, 0x33a7: 0x000a, 0x33a8: 0x000a, 0x33a9: 0x000a, - 0x33aa: 0x000a, 0x33ab: 0x000a, - 0x33b0: 0x000a, 0x33b1: 0x000a, 0x33b2: 0x000a, 0x33b3: 0x000a, 0x33b4: 0x000a, 0x33b5: 0x000a, - 0x33b6: 0x000a, 0x33b7: 0x000a, 0x33b8: 0x000a, 0x33b9: 0x000a, 0x33ba: 0x000a, 0x33bb: 0x000a, - 0x33bc: 0x000a, 0x33bd: 0x000a, 0x33be: 0x000a, 0x33bf: 0x000a, - // Block 0xcf, offset 0x33c0 - 0x33c0: 0x000a, 0x33c1: 0x000a, 0x33c2: 0x000a, 0x33c3: 0x000a, 0x33c4: 0x000a, 0x33c5: 0x000a, - 0x33c6: 0x000a, 0x33c7: 0x000a, 0x33c8: 0x000a, 0x33c9: 0x000a, 0x33ca: 0x000a, 0x33cb: 0x000a, - 0x33cc: 0x000a, 0x33cd: 0x000a, 0x33ce: 0x000a, 0x33cf: 0x000a, 0x33d0: 0x000a, 0x33d1: 0x000a, - 0x33d2: 0x000a, 0x33d3: 0x000a, - 0x33e0: 0x000a, 0x33e1: 0x000a, 0x33e2: 0x000a, 0x33e3: 0x000a, - 0x33e4: 0x000a, 0x33e5: 0x000a, 0x33e6: 0x000a, 0x33e7: 0x000a, 0x33e8: 0x000a, 0x33e9: 0x000a, - 0x33ea: 0x000a, 0x33eb: 0x000a, 0x33ec: 0x000a, 0x33ed: 0x000a, 0x33ee: 0x000a, - 0x33f1: 0x000a, 0x33f2: 0x000a, 0x33f3: 0x000a, 0x33f4: 0x000a, 0x33f5: 0x000a, - 0x33f6: 0x000a, 0x33f7: 0x000a, 0x33f8: 0x000a, 0x33f9: 0x000a, 0x33fa: 0x000a, 0x33fb: 0x000a, - 0x33fc: 0x000a, 0x33fd: 0x000a, 0x33fe: 0x000a, 0x33ff: 0x000a, - // Block 0xd0, offset 0x3400 - 0x3401: 0x000a, 0x3402: 0x000a, 0x3403: 0x000a, 0x3404: 0x000a, 0x3405: 0x000a, - 0x3406: 0x000a, 0x3407: 0x000a, 0x3408: 0x000a, 0x3409: 0x000a, 0x340a: 0x000a, 0x340b: 0x000a, - 0x340c: 0x000a, 0x340d: 0x000a, 0x340e: 0x000a, 0x340f: 0x000a, 0x3411: 0x000a, - 0x3412: 0x000a, 0x3413: 0x000a, 0x3414: 0x000a, 0x3415: 0x000a, 0x3416: 0x000a, 0x3417: 0x000a, - 0x3418: 0x000a, 0x3419: 0x000a, 0x341a: 0x000a, 0x341b: 0x000a, 0x341c: 0x000a, 0x341d: 0x000a, - 0x341e: 0x000a, 0x341f: 0x000a, 0x3420: 0x000a, 0x3421: 0x000a, 0x3422: 0x000a, 0x3423: 0x000a, - 0x3424: 0x000a, 0x3425: 0x000a, 0x3426: 0x000a, 0x3427: 0x000a, 0x3428: 0x000a, 0x3429: 0x000a, - 0x342a: 0x000a, 0x342b: 0x000a, 0x342c: 0x000a, 0x342d: 0x000a, 0x342e: 0x000a, 0x342f: 0x000a, - 0x3430: 0x000a, 0x3431: 0x000a, 0x3432: 0x000a, 0x3433: 0x000a, 0x3434: 0x000a, 0x3435: 0x000a, - // Block 0xd1, offset 0x3440 - 0x3440: 0x0002, 0x3441: 0x0002, 0x3442: 0x0002, 0x3443: 0x0002, 0x3444: 0x0002, 0x3445: 0x0002, - 0x3446: 0x0002, 0x3447: 0x0002, 0x3448: 0x0002, 0x3449: 0x0002, 0x344a: 0x0002, 0x344b: 0x000a, - 0x344c: 0x000a, - // Block 0xd2, offset 0x3480 - 0x34aa: 0x000a, 0x34ab: 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, - 0x34e0: 0x000a, 0x34e1: 0x000a, 0x34e2: 0x000a, 0x34e3: 0x000a, - 0x34e4: 0x000a, 0x34e5: 0x000a, 0x34e6: 0x000a, 0x34e7: 0x000a, 0x34e8: 0x000a, 0x34e9: 0x000a, - 0x34ea: 0x000a, 0x34eb: 0x000a, 0x34ec: 0x000a, - 0x34f0: 0x000a, 0x34f1: 0x000a, 0x34f2: 0x000a, 0x34f3: 0x000a, 0x34f4: 0x000a, 0x34f5: 0x000a, - 0x34f6: 0x000a, - // Block 0xd4, offset 0x3500 - 0x3500: 0x000a, 0x3501: 0x000a, 0x3502: 0x000a, 0x3503: 0x000a, 0x3504: 0x000a, 0x3505: 0x000a, - 0x3506: 0x000a, 0x3507: 0x000a, 0x3508: 0x000a, 0x3509: 0x000a, 0x350a: 0x000a, 0x350b: 0x000a, - 0x350c: 0x000a, 0x350d: 0x000a, 0x350e: 0x000a, 0x350f: 0x000a, 0x3510: 0x000a, 0x3511: 0x000a, - 0x3512: 0x000a, 0x3513: 0x000a, 0x3514: 0x000a, - // Block 0xd5, offset 0x3540 - 0x3540: 0x000a, 0x3541: 0x000a, 0x3542: 0x000a, 0x3543: 0x000a, 0x3544: 0x000a, 0x3545: 0x000a, - 0x3546: 0x000a, 0x3547: 0x000a, 0x3548: 0x000a, 0x3549: 0x000a, 0x354a: 0x000a, 0x354b: 0x000a, - 0x3550: 0x000a, 0x3551: 0x000a, - 0x3552: 0x000a, 0x3553: 0x000a, 0x3554: 0x000a, 0x3555: 0x000a, 0x3556: 0x000a, 0x3557: 0x000a, - 0x3558: 0x000a, 0x3559: 0x000a, 0x355a: 0x000a, 0x355b: 0x000a, 0x355c: 0x000a, 0x355d: 0x000a, - 0x355e: 0x000a, 0x355f: 0x000a, 0x3560: 0x000a, 0x3561: 0x000a, 0x3562: 0x000a, 0x3563: 0x000a, - 0x3564: 0x000a, 0x3565: 0x000a, 0x3566: 0x000a, 0x3567: 0x000a, 0x3568: 0x000a, 0x3569: 0x000a, - 0x356a: 0x000a, 0x356b: 0x000a, 0x356c: 0x000a, 0x356d: 0x000a, 0x356e: 0x000a, 0x356f: 0x000a, - 0x3570: 0x000a, 0x3571: 0x000a, 0x3572: 0x000a, 0x3573: 0x000a, 0x3574: 0x000a, 0x3575: 0x000a, - 0x3576: 0x000a, 0x3577: 0x000a, 0x3578: 0x000a, 0x3579: 0x000a, 0x357a: 0x000a, 0x357b: 0x000a, - 0x357c: 0x000a, 0x357d: 0x000a, 0x357e: 0x000a, 0x357f: 0x000a, - // Block 0xd6, offset 0x3580 - 0x3580: 0x000a, 0x3581: 0x000a, 0x3582: 0x000a, 0x3583: 0x000a, 0x3584: 0x000a, 0x3585: 0x000a, - 0x3586: 0x000a, 0x3587: 0x000a, - 0x3590: 0x000a, 0x3591: 0x000a, - 0x3592: 0x000a, 0x3593: 0x000a, 0x3594: 0x000a, 0x3595: 0x000a, 0x3596: 0x000a, 0x3597: 0x000a, - 0x3598: 0x000a, 0x3599: 0x000a, - 0x35a0: 0x000a, 0x35a1: 0x000a, 0x35a2: 0x000a, 0x35a3: 0x000a, - 0x35a4: 0x000a, 0x35a5: 0x000a, 0x35a6: 0x000a, 0x35a7: 0x000a, 0x35a8: 0x000a, 0x35a9: 0x000a, - 0x35aa: 0x000a, 0x35ab: 0x000a, 0x35ac: 0x000a, 0x35ad: 0x000a, 0x35ae: 0x000a, 0x35af: 0x000a, - 0x35b0: 0x000a, 0x35b1: 0x000a, 0x35b2: 0x000a, 0x35b3: 0x000a, 0x35b4: 0x000a, 0x35b5: 0x000a, - 0x35b6: 0x000a, 0x35b7: 0x000a, 0x35b8: 0x000a, 0x35b9: 0x000a, 0x35ba: 0x000a, 0x35bb: 0x000a, - 0x35bc: 0x000a, 0x35bd: 0x000a, 0x35be: 0x000a, 0x35bf: 0x000a, - // Block 0xd7, offset 0x35c0 - 0x35c0: 0x000a, 0x35c1: 0x000a, 0x35c2: 0x000a, 0x35c3: 0x000a, 0x35c4: 0x000a, 0x35c5: 0x000a, - 0x35c6: 0x000a, 0x35c7: 0x000a, - 0x35d0: 0x000a, 0x35d1: 0x000a, - 0x35d2: 0x000a, 0x35d3: 0x000a, 0x35d4: 0x000a, 0x35d5: 0x000a, 0x35d6: 0x000a, 0x35d7: 0x000a, - 0x35d8: 0x000a, 0x35d9: 0x000a, 0x35da: 0x000a, 0x35db: 0x000a, 0x35dc: 0x000a, 0x35dd: 0x000a, - 0x35de: 0x000a, 0x35df: 0x000a, 0x35e0: 0x000a, 0x35e1: 0x000a, 0x35e2: 0x000a, 0x35e3: 0x000a, - 0x35e4: 0x000a, 0x35e5: 0x000a, 0x35e6: 0x000a, 0x35e7: 0x000a, 0x35e8: 0x000a, 0x35e9: 0x000a, - 0x35ea: 0x000a, 0x35eb: 0x000a, 0x35ec: 0x000a, 0x35ed: 0x000a, - // Block 0xd8, offset 0x3600 - 0x3610: 0x000a, 0x3611: 0x000a, - 0x3612: 0x000a, 0x3613: 0x000a, 0x3614: 0x000a, 0x3615: 0x000a, 0x3616: 0x000a, 0x3617: 0x000a, - 0x3618: 0x000a, 0x3619: 0x000a, 0x361a: 0x000a, 0x361b: 0x000a, 0x361c: 0x000a, 0x361d: 0x000a, - 0x361e: 0x000a, 0x3620: 0x000a, 0x3621: 0x000a, 0x3622: 0x000a, 0x3623: 0x000a, - 0x3624: 0x000a, 0x3625: 0x000a, 0x3626: 0x000a, 0x3627: 0x000a, - 0x3630: 0x000a, 0x3633: 0x000a, 0x3634: 0x000a, 0x3635: 0x000a, - 0x3636: 0x000a, 0x3637: 0x000a, 0x3638: 0x000a, 0x3639: 0x000a, 0x363a: 0x000a, 0x363b: 0x000a, - 0x363c: 0x000a, 0x363d: 0x000a, 0x363e: 0x000a, - // Block 0xd9, offset 0x3640 - 0x3640: 0x000a, 0x3641: 0x000a, 0x3642: 0x000a, 0x3643: 0x000a, 0x3644: 0x000a, 0x3645: 0x000a, - 0x3646: 0x000a, 0x3647: 0x000a, 0x3648: 0x000a, 0x3649: 0x000a, 0x364a: 0x000a, 0x364b: 0x000a, - 0x3650: 0x000a, 0x3651: 0x000a, - 0x3652: 0x000a, 0x3653: 0x000a, 0x3654: 0x000a, 0x3655: 0x000a, 0x3656: 0x000a, 0x3657: 0x000a, - 0x3658: 0x000a, 0x3659: 0x000a, 0x365a: 0x000a, 0x365b: 0x000a, 0x365c: 0x000a, 0x365d: 0x000a, - 0x365e: 0x000a, - // Block 0xda, offset 0x3680 - 0x3680: 0x000a, 0x3681: 0x000a, 0x3682: 0x000a, 0x3683: 0x000a, 0x3684: 0x000a, 0x3685: 0x000a, - 0x3686: 0x000a, 0x3687: 0x000a, 0x3688: 0x000a, 0x3689: 0x000a, 0x368a: 0x000a, 0x368b: 0x000a, - 0x368c: 0x000a, 0x368d: 0x000a, 0x368e: 0x000a, 0x368f: 0x000a, 0x3690: 0x000a, 0x3691: 0x000a, - // Block 0xdb, offset 0x36c0 - 0x36fe: 0x000b, 0x36ff: 0x000b, - // Block 0xdc, offset 0x3700 - 0x3700: 0x000b, 0x3701: 0x000b, 0x3702: 0x000b, 0x3703: 0x000b, 0x3704: 0x000b, 0x3705: 0x000b, - 0x3706: 0x000b, 0x3707: 0x000b, 0x3708: 0x000b, 0x3709: 0x000b, 0x370a: 0x000b, 0x370b: 0x000b, - 0x370c: 0x000b, 0x370d: 0x000b, 0x370e: 0x000b, 0x370f: 0x000b, 0x3710: 0x000b, 0x3711: 0x000b, - 0x3712: 0x000b, 0x3713: 0x000b, 0x3714: 0x000b, 0x3715: 0x000b, 0x3716: 0x000b, 0x3717: 0x000b, - 0x3718: 0x000b, 0x3719: 0x000b, 0x371a: 0x000b, 0x371b: 0x000b, 0x371c: 0x000b, 0x371d: 0x000b, - 0x371e: 0x000b, 0x371f: 0x000b, 0x3720: 0x000b, 0x3721: 0x000b, 0x3722: 0x000b, 0x3723: 0x000b, - 0x3724: 0x000b, 0x3725: 0x000b, 0x3726: 0x000b, 0x3727: 0x000b, 0x3728: 0x000b, 0x3729: 0x000b, - 0x372a: 0x000b, 0x372b: 0x000b, 0x372c: 0x000b, 0x372d: 0x000b, 0x372e: 0x000b, 0x372f: 0x000b, - 0x3730: 0x000b, 0x3731: 0x000b, 0x3732: 0x000b, 0x3733: 0x000b, 0x3734: 0x000b, 0x3735: 0x000b, - 0x3736: 0x000b, 0x3737: 0x000b, 0x3738: 0x000b, 0x3739: 0x000b, 0x373a: 0x000b, 0x373b: 0x000b, - 0x373c: 0x000b, 0x373d: 0x000b, 0x373e: 0x000b, 0x373f: 0x000b, - // Block 0xdd, offset 0x3740 - 0x3740: 0x000c, 0x3741: 0x000c, 0x3742: 0x000c, 0x3743: 0x000c, 0x3744: 0x000c, 0x3745: 0x000c, - 0x3746: 0x000c, 0x3747: 0x000c, 0x3748: 0x000c, 0x3749: 0x000c, 0x374a: 0x000c, 0x374b: 0x000c, - 0x374c: 0x000c, 0x374d: 0x000c, 0x374e: 0x000c, 0x374f: 0x000c, 0x3750: 0x000c, 0x3751: 0x000c, - 0x3752: 0x000c, 0x3753: 0x000c, 0x3754: 0x000c, 0x3755: 0x000c, 0x3756: 0x000c, 0x3757: 0x000c, - 0x3758: 0x000c, 0x3759: 0x000c, 0x375a: 0x000c, 0x375b: 0x000c, 0x375c: 0x000c, 0x375d: 0x000c, - 0x375e: 0x000c, 0x375f: 0x000c, 0x3760: 0x000c, 0x3761: 0x000c, 0x3762: 0x000c, 0x3763: 0x000c, - 0x3764: 0x000c, 0x3765: 0x000c, 0x3766: 0x000c, 0x3767: 0x000c, 0x3768: 0x000c, 0x3769: 0x000c, - 0x376a: 0x000c, 0x376b: 0x000c, 0x376c: 0x000c, 0x376d: 0x000c, 0x376e: 0x000c, 0x376f: 0x000c, - 0x3770: 0x000b, 0x3771: 0x000b, 0x3772: 0x000b, 0x3773: 0x000b, 0x3774: 0x000b, 0x3775: 0x000b, - 0x3776: 0x000b, 0x3777: 0x000b, 0x3778: 0x000b, 0x3779: 0x000b, 0x377a: 0x000b, 0x377b: 0x000b, - 0x377c: 0x000b, 0x377d: 0x000b, 0x377e: 0x000b, 0x377f: 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, 0x137: 0x28, - 0x138: 0x29, 0x139: 0x2a, 0x13a: 0x2b, 0x13b: 0x2c, 0x13c: 0x2d, 0x13d: 0x2e, 0x13e: 0x2f, 0x13f: 0x30, - // Block 0x5, offset 0x140 - 0x140: 0x31, 0x141: 0x32, 0x142: 0x33, - 0x14d: 0x34, 0x14e: 0x35, - 0x150: 0x36, - 0x15a: 0x37, 0x15c: 0x38, 0x15d: 0x39, 0x15e: 0x3a, 0x15f: 0x3b, - 0x160: 0x3c, 0x162: 0x3d, 0x164: 0x3e, 0x165: 0x3f, 0x167: 0x40, - 0x168: 0x41, 0x169: 0x42, 0x16a: 0x43, 0x16c: 0x44, 0x16d: 0x45, 0x16e: 0x46, 0x16f: 0x47, - 0x170: 0x48, 0x173: 0x49, 0x177: 0x4a, - 0x17e: 0x4b, 0x17f: 0x4c, - // Block 0x6, offset 0x180 - 0x180: 0x4d, 0x181: 0x4e, 0x182: 0x4f, 0x183: 0x50, 0x184: 0x51, 0x185: 0x52, 0x186: 0x53, 0x187: 0x54, - 0x188: 0x55, 0x189: 0x54, 0x18a: 0x54, 0x18b: 0x54, 0x18c: 0x56, 0x18d: 0x57, 0x18e: 0x58, 0x18f: 0x59, - 0x190: 0x5a, 0x191: 0x5b, 0x192: 0x5c, 0x193: 0x5d, 0x194: 0x54, 0x195: 0x54, 0x196: 0x54, 0x197: 0x54, - 0x198: 0x54, 0x199: 0x54, 0x19a: 0x5e, 0x19b: 0x54, 0x19c: 0x54, 0x19d: 0x5f, 0x19e: 0x54, 0x19f: 0x60, - 0x1a4: 0x54, 0x1a5: 0x54, 0x1a6: 0x61, 0x1a7: 0x62, - 0x1a8: 0x54, 0x1a9: 0x54, 0x1aa: 0x54, 0x1ab: 0x54, 0x1ac: 0x54, 0x1ad: 0x63, 0x1ae: 0x64, 0x1af: 0x65, - 0x1b3: 0x66, 0x1b5: 0x67, 0x1b7: 0x68, - 0x1b8: 0x69, 0x1b9: 0x6a, 0x1ba: 0x6b, 0x1bb: 0x6c, 0x1bc: 0x54, 0x1bd: 0x54, 0x1be: 0x54, 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: 0x54, - // 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, 0x26f: 0x8b, - // Block 0xa, offset 0x280 - 0x2ac: 0x8c, 0x2ad: 0x8d, 0x2ae: 0x0e, 0x2af: 0x0e, - 0x2b0: 0x0e, 0x2b1: 0x0e, 0x2b2: 0x0e, 0x2b3: 0x0e, 0x2b4: 0x8e, 0x2b5: 0x0e, 0x2b6: 0x0e, 0x2b7: 0x8f, - 0x2b8: 0x90, 0x2b9: 0x91, 0x2ba: 0x0e, 0x2bb: 0x92, 0x2bc: 0x93, 0x2bd: 0x94, 0x2bf: 0x95, - // Block 0xb, offset 0x2c0 - 0x2c4: 0x96, 0x2c5: 0x54, 0x2c6: 0x97, 0x2c7: 0x98, - 0x2cb: 0x99, 0x2cd: 0x9a, - 0x2e0: 0x9b, 0x2e1: 0x9b, 0x2e2: 0x9b, 0x2e3: 0x9b, 0x2e4: 0x9c, 0x2e5: 0x9b, 0x2e6: 0x9b, 0x2e7: 0x9b, - 0x2e8: 0x9d, 0x2e9: 0x9b, 0x2ea: 0x9b, 0x2eb: 0x9e, 0x2ec: 0x9f, 0x2ed: 0x9b, 0x2ee: 0x9b, 0x2ef: 0x9b, - 0x2f0: 0x9b, 0x2f1: 0x9b, 0x2f2: 0x9b, 0x2f3: 0x9b, 0x2f4: 0x9b, 0x2f5: 0x9b, 0x2f6: 0x9b, 0x2f7: 0x9b, - 0x2f8: 0x9b, 0x2f9: 0xa0, 0x2fa: 0x9b, 0x2fb: 0x9b, 0x2fc: 0x9b, 0x2fd: 0x9b, 0x2fe: 0x9b, 0x2ff: 0x9b, - // Block 0xc, offset 0x300 - 0x300: 0xa1, 0x301: 0xa2, 0x302: 0xa3, 0x304: 0xa4, 0x305: 0xa5, 0x306: 0xa6, 0x307: 0xa7, - 0x308: 0xa8, 0x30b: 0xa9, 0x30c: 0xaa, 0x30d: 0xab, - 0x310: 0xac, 0x311: 0xad, 0x312: 0xae, 0x313: 0xaf, 0x316: 0xb0, 0x317: 0xb1, - 0x318: 0xb2, 0x319: 0xb3, 0x31a: 0xb4, 0x31c: 0xb5, - 0x330: 0xb6, 0x332: 0xb7, - // Block 0xd, offset 0x340 - 0x36b: 0xb8, 0x36c: 0xb9, - 0x37e: 0xba, - // Block 0xe, offset 0x380 - 0x3b2: 0xbb, - // Block 0xf, offset 0x3c0 - 0x3c5: 0xbc, 0x3c6: 0xbd, - 0x3c8: 0x54, 0x3c9: 0xbe, 0x3cc: 0x54, 0x3cd: 0xbf, - 0x3db: 0xc0, 0x3dc: 0xc1, 0x3dd: 0xc2, 0x3de: 0xc3, 0x3df: 0xc4, - 0x3e8: 0xc5, 0x3e9: 0xc6, 0x3ea: 0xc7, - // Block 0x10, offset 0x400 - 0x400: 0xc8, - 0x420: 0x9b, 0x421: 0x9b, 0x422: 0x9b, 0x423: 0xc9, 0x424: 0x9b, 0x425: 0xca, 0x426: 0x9b, 0x427: 0x9b, - 0x428: 0x9b, 0x429: 0x9b, 0x42a: 0x9b, 0x42b: 0x9b, 0x42c: 0x9b, 0x42d: 0x9b, 0x42e: 0x9b, 0x42f: 0x9b, - 0x430: 0x9b, 0x431: 0x9b, 0x432: 0x9b, 0x433: 0x9b, 0x434: 0x9b, 0x435: 0x9b, 0x436: 0x9b, 0x437: 0x9b, - 0x438: 0x0e, 0x439: 0x0e, 0x43a: 0x0e, 0x43b: 0xcb, 0x43c: 0x9b, 0x43d: 0x9b, 0x43e: 0x9b, 0x43f: 0x9b, - // Block 0x11, offset 0x440 - 0x440: 0xcc, 0x441: 0x54, 0x442: 0xcd, 0x443: 0xce, 0x444: 0xcf, 0x445: 0xd0, - 0x44c: 0x54, 0x44d: 0x54, 0x44e: 0x54, 0x44f: 0x54, - 0x450: 0x54, 0x451: 0x54, 0x452: 0x54, 0x453: 0x54, 0x454: 0x54, 0x455: 0x54, 0x456: 0x54, 0x457: 0x54, - 0x458: 0x54, 0x459: 0x54, 0x45a: 0x54, 0x45b: 0xd1, 0x45c: 0x54, 0x45d: 0x6c, 0x45e: 0x54, 0x45f: 0xd2, - 0x460: 0xd3, 0x461: 0xd4, 0x462: 0xd5, 0x464: 0xd6, 0x465: 0xd7, 0x466: 0xd8, 0x467: 0x36, - 0x47f: 0xd9, - // Block 0x12, offset 0x480 - 0x4bf: 0xd9, - // 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: 0xda, 0x541: 0xda, 0x542: 0xda, 0x543: 0xda, 0x544: 0x05, 0x545: 0x05, 0x546: 0x05, 0x547: 0xdb, - 0x548: 0xda, 0x549: 0xda, 0x54a: 0xda, 0x54b: 0xda, 0x54c: 0xda, 0x54d: 0xda, 0x54e: 0xda, 0x54f: 0xda, - 0x550: 0xda, 0x551: 0xda, 0x552: 0xda, 0x553: 0xda, 0x554: 0xda, 0x555: 0xda, 0x556: 0xda, 0x557: 0xda, - 0x558: 0xda, 0x559: 0xda, 0x55a: 0xda, 0x55b: 0xda, 0x55c: 0xda, 0x55d: 0xda, 0x55e: 0xda, 0x55f: 0xda, - 0x560: 0xda, 0x561: 0xda, 0x562: 0xda, 0x563: 0xda, 0x564: 0xda, 0x565: 0xda, 0x566: 0xda, 0x567: 0xda, - 0x568: 0xda, 0x569: 0xda, 0x56a: 0xda, 0x56b: 0xda, 0x56c: 0xda, 0x56d: 0xda, 0x56e: 0xda, 0x56f: 0xda, - 0x570: 0xda, 0x571: 0xda, 0x572: 0xda, 0x573: 0xda, 0x574: 0xda, 0x575: 0xda, 0x576: 0xda, 0x577: 0xda, - 0x578: 0xda, 0x579: 0xda, 0x57a: 0xda, 0x57b: 0xda, 0x57c: 0xda, 0x57d: 0xda, 0x57e: 0xda, 0x57f: 0xda, - // Block 0x16, offset 0x580 - 0x58f: 0x10, - 0x59f: 0x10, - 0x5a0: 0x13, - 0x5af: 0x10, - 0x5bf: 0x10, - // Block 0x17, offset 0x5c0 - 0x5cf: 0x10, -} - -// Total table size 15800 bytes (15KiB); checksum: F50EF68C diff --git a/vendor/golang.org/x/text/unicode/bidi/tables10.0.0.go b/vendor/golang.org/x/text/unicode/bidi/tables10.0.0.go new file mode 100644 index 0000000..2e1ff19 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/bidi/tables10.0.0.go @@ -0,0 +1,1815 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// +build go1.10 + +package bidi + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "10.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: 16128 bytes (15.75 KiB). Checksum: 8122d83e461996f. +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: 228 blocks, 14592 entries, 14592 bytes +// The third block is the zero block. +var bidiValues = [14592]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: 0x0001, 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: 0x000d, 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, + // 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, + 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, + 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 + 0xa8a: 0x000c, + 0xa92: 0x000c, 0xa93: 0x000c, 0xa94: 0x000c, 0xa96: 0x000c, + // Block 0x2b, offset 0xac0 + 0xaf1: 0x000c, 0xaf4: 0x000c, 0xaf5: 0x000c, + 0xaf6: 0x000c, 0xaf7: 0x000c, 0xaf8: 0x000c, 0xaf9: 0x000c, 0xafa: 0x000c, + 0xaff: 0x0004, + // Block 0x2c, offset 0xb00 + 0xb07: 0x000c, 0xb08: 0x000c, 0xb09: 0x000c, 0xb0a: 0x000c, 0xb0b: 0x000c, + 0xb0c: 0x000c, 0xb0d: 0x000c, 0xb0e: 0x000c, + // Block 0x2d, offset 0xb40 + 0xb71: 0x000c, 0xb74: 0x000c, 0xb75: 0x000c, + 0xb76: 0x000c, 0xb77: 0x000c, 0xb78: 0x000c, 0xb79: 0x000c, 0xb7b: 0x000c, + 0xb7c: 0x000c, + // Block 0x2e, offset 0xb80 + 0xb88: 0x000c, 0xb89: 0x000c, 0xb8a: 0x000c, 0xb8b: 0x000c, + 0xb8c: 0x000c, 0xb8d: 0x000c, + // Block 0x2f, offset 0xbc0 + 0xbd8: 0x000c, 0xbd9: 0x000c, + 0xbf5: 0x000c, + 0xbf7: 0x000c, 0xbf9: 0x000c, 0xbfa: 0x003a, 0xbfb: 0x002a, + 0xbfc: 0x003a, 0xbfd: 0x002a, + // Block 0x30, offset 0xc00 + 0xc31: 0x000c, 0xc32: 0x000c, 0xc33: 0x000c, 0xc34: 0x000c, 0xc35: 0x000c, + 0xc36: 0x000c, 0xc37: 0x000c, 0xc38: 0x000c, 0xc39: 0x000c, 0xc3a: 0x000c, 0xc3b: 0x000c, + 0xc3c: 0x000c, 0xc3d: 0x000c, 0xc3e: 0x000c, + // Block 0x31, offset 0xc40 + 0xc40: 0x000c, 0xc41: 0x000c, 0xc42: 0x000c, 0xc43: 0x000c, 0xc44: 0x000c, + 0xc46: 0x000c, 0xc47: 0x000c, + 0xc4d: 0x000c, 0xc4e: 0x000c, 0xc4f: 0x000c, 0xc50: 0x000c, 0xc51: 0x000c, + 0xc52: 0x000c, 0xc53: 0x000c, 0xc54: 0x000c, 0xc55: 0x000c, 0xc56: 0x000c, 0xc57: 0x000c, + 0xc59: 0x000c, 0xc5a: 0x000c, 0xc5b: 0x000c, 0xc5c: 0x000c, 0xc5d: 0x000c, + 0xc5e: 0x000c, 0xc5f: 0x000c, 0xc60: 0x000c, 0xc61: 0x000c, 0xc62: 0x000c, 0xc63: 0x000c, + 0xc64: 0x000c, 0xc65: 0x000c, 0xc66: 0x000c, 0xc67: 0x000c, 0xc68: 0x000c, 0xc69: 0x000c, + 0xc6a: 0x000c, 0xc6b: 0x000c, 0xc6c: 0x000c, 0xc6d: 0x000c, 0xc6e: 0x000c, 0xc6f: 0x000c, + 0xc70: 0x000c, 0xc71: 0x000c, 0xc72: 0x000c, 0xc73: 0x000c, 0xc74: 0x000c, 0xc75: 0x000c, + 0xc76: 0x000c, 0xc77: 0x000c, 0xc78: 0x000c, 0xc79: 0x000c, 0xc7a: 0x000c, 0xc7b: 0x000c, + 0xc7c: 0x000c, + // Block 0x32, offset 0xc80 + 0xc86: 0x000c, + // Block 0x33, offset 0xcc0 + 0xced: 0x000c, 0xcee: 0x000c, 0xcef: 0x000c, + 0xcf0: 0x000c, 0xcf2: 0x000c, 0xcf3: 0x000c, 0xcf4: 0x000c, 0xcf5: 0x000c, + 0xcf6: 0x000c, 0xcf7: 0x000c, 0xcf9: 0x000c, 0xcfa: 0x000c, + 0xcfd: 0x000c, 0xcfe: 0x000c, + // Block 0x34, offset 0xd00 + 0xd18: 0x000c, 0xd19: 0x000c, + 0xd1e: 0x000c, 0xd1f: 0x000c, 0xd20: 0x000c, + 0xd31: 0x000c, 0xd32: 0x000c, 0xd33: 0x000c, 0xd34: 0x000c, + // Block 0x35, offset 0xd40 + 0xd42: 0x000c, 0xd45: 0x000c, + 0xd46: 0x000c, + 0xd4d: 0x000c, + 0xd5d: 0x000c, + // Block 0x36, offset 0xd80 + 0xd9d: 0x000c, + 0xd9e: 0x000c, 0xd9f: 0x000c, + // Block 0x37, offset 0xdc0 + 0xdd0: 0x000a, 0xdd1: 0x000a, + 0xdd2: 0x000a, 0xdd3: 0x000a, 0xdd4: 0x000a, 0xdd5: 0x000a, 0xdd6: 0x000a, 0xdd7: 0x000a, + 0xdd8: 0x000a, 0xdd9: 0x000a, + // Block 0x38, offset 0xe00 + 0xe00: 0x000a, + // Block 0x39, offset 0xe40 + 0xe40: 0x0009, + 0xe5b: 0x007a, 0xe5c: 0x006a, + // Block 0x3a, offset 0xe80 + 0xe92: 0x000c, 0xe93: 0x000c, 0xe94: 0x000c, + 0xeb2: 0x000c, 0xeb3: 0x000c, 0xeb4: 0x000c, + // Block 0x3b, offset 0xec0 + 0xed2: 0x000c, 0xed3: 0x000c, + 0xef2: 0x000c, 0xef3: 0x000c, + // Block 0x3c, offset 0xf00 + 0xf34: 0x000c, 0xf35: 0x000c, + 0xf37: 0x000c, 0xf38: 0x000c, 0xf39: 0x000c, 0xf3a: 0x000c, 0xf3b: 0x000c, + 0xf3c: 0x000c, 0xf3d: 0x000c, + // Block 0x3d, offset 0xf40 + 0xf46: 0x000c, 0xf49: 0x000c, 0xf4a: 0x000c, 0xf4b: 0x000c, + 0xf4c: 0x000c, 0xf4d: 0x000c, 0xf4e: 0x000c, 0xf4f: 0x000c, 0xf50: 0x000c, 0xf51: 0x000c, + 0xf52: 0x000c, 0xf53: 0x000c, + 0xf5b: 0x0004, 0xf5d: 0x000c, + 0xf70: 0x000a, 0xf71: 0x000a, 0xf72: 0x000a, 0xf73: 0x000a, 0xf74: 0x000a, 0xf75: 0x000a, + 0xf76: 0x000a, 0xf77: 0x000a, 0xf78: 0x000a, 0xf79: 0x000a, + // Block 0x3e, offset 0xf80 + 0xf80: 0x000a, 0xf81: 0x000a, 0xf82: 0x000a, 0xf83: 0x000a, 0xf84: 0x000a, 0xf85: 0x000a, + 0xf86: 0x000a, 0xf87: 0x000a, 0xf88: 0x000a, 0xf89: 0x000a, 0xf8a: 0x000a, 0xf8b: 0x000c, + 0xf8c: 0x000c, 0xf8d: 0x000c, 0xf8e: 0x000b, + // Block 0x3f, offset 0xfc0 + 0xfc5: 0x000c, + 0xfc6: 0x000c, + 0xfe9: 0x000c, + // Block 0x40, offset 0x1000 + 0x1020: 0x000c, 0x1021: 0x000c, 0x1022: 0x000c, + 0x1027: 0x000c, 0x1028: 0x000c, + 0x1032: 0x000c, + 0x1039: 0x000c, 0x103a: 0x000c, 0x103b: 0x000c, + // Block 0x41, offset 0x1040 + 0x1040: 0x000a, 0x1044: 0x000a, 0x1045: 0x000a, + // Block 0x42, offset 0x1080 + 0x109e: 0x000a, 0x109f: 0x000a, 0x10a0: 0x000a, 0x10a1: 0x000a, 0x10a2: 0x000a, 0x10a3: 0x000a, + 0x10a4: 0x000a, 0x10a5: 0x000a, 0x10a6: 0x000a, 0x10a7: 0x000a, 0x10a8: 0x000a, 0x10a9: 0x000a, + 0x10aa: 0x000a, 0x10ab: 0x000a, 0x10ac: 0x000a, 0x10ad: 0x000a, 0x10ae: 0x000a, 0x10af: 0x000a, + 0x10b0: 0x000a, 0x10b1: 0x000a, 0x10b2: 0x000a, 0x10b3: 0x000a, 0x10b4: 0x000a, 0x10b5: 0x000a, + 0x10b6: 0x000a, 0x10b7: 0x000a, 0x10b8: 0x000a, 0x10b9: 0x000a, 0x10ba: 0x000a, 0x10bb: 0x000a, + 0x10bc: 0x000a, 0x10bd: 0x000a, 0x10be: 0x000a, 0x10bf: 0x000a, + // Block 0x43, offset 0x10c0 + 0x10d7: 0x000c, + 0x10d8: 0x000c, 0x10db: 0x000c, + // Block 0x44, offset 0x1100 + 0x1116: 0x000c, + 0x1118: 0x000c, 0x1119: 0x000c, 0x111a: 0x000c, 0x111b: 0x000c, 0x111c: 0x000c, 0x111d: 0x000c, + 0x111e: 0x000c, 0x1120: 0x000c, 0x1122: 0x000c, + 0x1125: 0x000c, 0x1126: 0x000c, 0x1127: 0x000c, 0x1128: 0x000c, 0x1129: 0x000c, + 0x112a: 0x000c, 0x112b: 0x000c, 0x112c: 0x000c, + 0x1133: 0x000c, 0x1134: 0x000c, 0x1135: 0x000c, + 0x1136: 0x000c, 0x1137: 0x000c, 0x1138: 0x000c, 0x1139: 0x000c, 0x113a: 0x000c, 0x113b: 0x000c, + 0x113c: 0x000c, 0x113f: 0x000c, + // Block 0x45, offset 0x1140 + 0x1170: 0x000c, 0x1171: 0x000c, 0x1172: 0x000c, 0x1173: 0x000c, 0x1174: 0x000c, 0x1175: 0x000c, + 0x1176: 0x000c, 0x1177: 0x000c, 0x1178: 0x000c, 0x1179: 0x000c, 0x117a: 0x000c, 0x117b: 0x000c, + 0x117c: 0x000c, 0x117d: 0x000c, 0x117e: 0x000c, + // Block 0x46, offset 0x1180 + 0x1180: 0x000c, 0x1181: 0x000c, 0x1182: 0x000c, 0x1183: 0x000c, + 0x11b4: 0x000c, + 0x11b6: 0x000c, 0x11b7: 0x000c, 0x11b8: 0x000c, 0x11b9: 0x000c, 0x11ba: 0x000c, + 0x11bc: 0x000c, + // Block 0x47, offset 0x11c0 + 0x11c2: 0x000c, + 0x11eb: 0x000c, 0x11ec: 0x000c, 0x11ed: 0x000c, 0x11ee: 0x000c, 0x11ef: 0x000c, + 0x11f0: 0x000c, 0x11f1: 0x000c, 0x11f2: 0x000c, 0x11f3: 0x000c, + // Block 0x48, offset 0x1200 + 0x1200: 0x000c, 0x1201: 0x000c, + 0x1222: 0x000c, 0x1223: 0x000c, + 0x1224: 0x000c, 0x1225: 0x000c, 0x1228: 0x000c, 0x1229: 0x000c, + 0x122b: 0x000c, 0x122c: 0x000c, 0x122d: 0x000c, + // Block 0x49, offset 0x1240 + 0x1266: 0x000c, 0x1268: 0x000c, 0x1269: 0x000c, + 0x126d: 0x000c, 0x126f: 0x000c, + 0x1270: 0x000c, 0x1271: 0x000c, + // Block 0x4a, offset 0x1280 + 0x12ac: 0x000c, 0x12ad: 0x000c, 0x12ae: 0x000c, 0x12af: 0x000c, + 0x12b0: 0x000c, 0x12b1: 0x000c, 0x12b2: 0x000c, 0x12b3: 0x000c, + 0x12b6: 0x000c, 0x12b7: 0x000c, + // Block 0x4b, offset 0x12c0 + 0x12d0: 0x000c, 0x12d1: 0x000c, + 0x12d2: 0x000c, 0x12d4: 0x000c, 0x12d5: 0x000c, 0x12d6: 0x000c, 0x12d7: 0x000c, + 0x12d8: 0x000c, 0x12d9: 0x000c, 0x12da: 0x000c, 0x12db: 0x000c, 0x12dc: 0x000c, 0x12dd: 0x000c, + 0x12de: 0x000c, 0x12df: 0x000c, 0x12e0: 0x000c, 0x12e2: 0x000c, 0x12e3: 0x000c, + 0x12e4: 0x000c, 0x12e5: 0x000c, 0x12e6: 0x000c, 0x12e7: 0x000c, 0x12e8: 0x000c, + 0x12ed: 0x000c, + 0x12f4: 0x000c, + 0x12f8: 0x000c, 0x12f9: 0x000c, + // Block 0x4c, offset 0x1300 + 0x1300: 0x000c, 0x1301: 0x000c, 0x1302: 0x000c, 0x1303: 0x000c, 0x1304: 0x000c, 0x1305: 0x000c, + 0x1306: 0x000c, 0x1307: 0x000c, 0x1308: 0x000c, 0x1309: 0x000c, 0x130a: 0x000c, 0x130b: 0x000c, + 0x130c: 0x000c, 0x130d: 0x000c, 0x130e: 0x000c, 0x130f: 0x000c, 0x1310: 0x000c, 0x1311: 0x000c, + 0x1312: 0x000c, 0x1313: 0x000c, 0x1314: 0x000c, 0x1315: 0x000c, 0x1316: 0x000c, 0x1317: 0x000c, + 0x1318: 0x000c, 0x1319: 0x000c, 0x131a: 0x000c, 0x131b: 0x000c, 0x131c: 0x000c, 0x131d: 0x000c, + 0x131e: 0x000c, 0x131f: 0x000c, 0x1320: 0x000c, 0x1321: 0x000c, 0x1322: 0x000c, 0x1323: 0x000c, + 0x1324: 0x000c, 0x1325: 0x000c, 0x1326: 0x000c, 0x1327: 0x000c, 0x1328: 0x000c, 0x1329: 0x000c, + 0x132a: 0x000c, 0x132b: 0x000c, 0x132c: 0x000c, 0x132d: 0x000c, 0x132e: 0x000c, 0x132f: 0x000c, + 0x1330: 0x000c, 0x1331: 0x000c, 0x1332: 0x000c, 0x1333: 0x000c, 0x1334: 0x000c, 0x1335: 0x000c, + 0x1336: 0x000c, 0x1337: 0x000c, 0x1338: 0x000c, 0x1339: 0x000c, 0x133b: 0x000c, + 0x133c: 0x000c, 0x133d: 0x000c, 0x133e: 0x000c, 0x133f: 0x000c, + // Block 0x4d, offset 0x1340 + 0x137d: 0x000a, 0x137f: 0x000a, + // Block 0x4e, offset 0x1380 + 0x1380: 0x000a, 0x1381: 0x000a, + 0x138d: 0x000a, 0x138e: 0x000a, 0x138f: 0x000a, + 0x139d: 0x000a, + 0x139e: 0x000a, 0x139f: 0x000a, + 0x13ad: 0x000a, 0x13ae: 0x000a, 0x13af: 0x000a, + 0x13bd: 0x000a, 0x13be: 0x000a, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x0009, 0x13c1: 0x0009, 0x13c2: 0x0009, 0x13c3: 0x0009, 0x13c4: 0x0009, 0x13c5: 0x0009, + 0x13c6: 0x0009, 0x13c7: 0x0009, 0x13c8: 0x0009, 0x13c9: 0x0009, 0x13ca: 0x0009, 0x13cb: 0x000b, + 0x13cc: 0x000b, 0x13cd: 0x000b, 0x13cf: 0x0001, 0x13d0: 0x000a, 0x13d1: 0x000a, + 0x13d2: 0x000a, 0x13d3: 0x000a, 0x13d4: 0x000a, 0x13d5: 0x000a, 0x13d6: 0x000a, 0x13d7: 0x000a, + 0x13d8: 0x000a, 0x13d9: 0x000a, 0x13da: 0x000a, 0x13db: 0x000a, 0x13dc: 0x000a, 0x13dd: 0x000a, + 0x13de: 0x000a, 0x13df: 0x000a, 0x13e0: 0x000a, 0x13e1: 0x000a, 0x13e2: 0x000a, 0x13e3: 0x000a, + 0x13e4: 0x000a, 0x13e5: 0x000a, 0x13e6: 0x000a, 0x13e7: 0x000a, 0x13e8: 0x0009, 0x13e9: 0x0007, + 0x13ea: 0x000e, 0x13eb: 0x000e, 0x13ec: 0x000e, 0x13ed: 0x000e, 0x13ee: 0x000e, 0x13ef: 0x0006, + 0x13f0: 0x0004, 0x13f1: 0x0004, 0x13f2: 0x0004, 0x13f3: 0x0004, 0x13f4: 0x0004, 0x13f5: 0x000a, + 0x13f6: 0x000a, 0x13f7: 0x000a, 0x13f8: 0x000a, 0x13f9: 0x000a, 0x13fa: 0x000a, 0x13fb: 0x000a, + 0x13fc: 0x000a, 0x13fd: 0x000a, 0x13fe: 0x000a, 0x13ff: 0x000a, + // Block 0x50, offset 0x1400 + 0x1400: 0x000a, 0x1401: 0x000a, 0x1402: 0x000a, 0x1403: 0x000a, 0x1404: 0x0006, 0x1405: 0x009a, + 0x1406: 0x008a, 0x1407: 0x000a, 0x1408: 0x000a, 0x1409: 0x000a, 0x140a: 0x000a, 0x140b: 0x000a, + 0x140c: 0x000a, 0x140d: 0x000a, 0x140e: 0x000a, 0x140f: 0x000a, 0x1410: 0x000a, 0x1411: 0x000a, + 0x1412: 0x000a, 0x1413: 0x000a, 0x1414: 0x000a, 0x1415: 0x000a, 0x1416: 0x000a, 0x1417: 0x000a, + 0x1418: 0x000a, 0x1419: 0x000a, 0x141a: 0x000a, 0x141b: 0x000a, 0x141c: 0x000a, 0x141d: 0x000a, + 0x141e: 0x000a, 0x141f: 0x0009, 0x1420: 0x000b, 0x1421: 0x000b, 0x1422: 0x000b, 0x1423: 0x000b, + 0x1424: 0x000b, 0x1425: 0x000b, 0x1426: 0x000e, 0x1427: 0x000e, 0x1428: 0x000e, 0x1429: 0x000e, + 0x142a: 0x000b, 0x142b: 0x000b, 0x142c: 0x000b, 0x142d: 0x000b, 0x142e: 0x000b, 0x142f: 0x000b, + 0x1430: 0x0002, 0x1434: 0x0002, 0x1435: 0x0002, + 0x1436: 0x0002, 0x1437: 0x0002, 0x1438: 0x0002, 0x1439: 0x0002, 0x143a: 0x0003, 0x143b: 0x0003, + 0x143c: 0x000a, 0x143d: 0x009a, 0x143e: 0x008a, + // Block 0x51, offset 0x1440 + 0x1440: 0x0002, 0x1441: 0x0002, 0x1442: 0x0002, 0x1443: 0x0002, 0x1444: 0x0002, 0x1445: 0x0002, + 0x1446: 0x0002, 0x1447: 0x0002, 0x1448: 0x0002, 0x1449: 0x0002, 0x144a: 0x0003, 0x144b: 0x0003, + 0x144c: 0x000a, 0x144d: 0x009a, 0x144e: 0x008a, + 0x1460: 0x0004, 0x1461: 0x0004, 0x1462: 0x0004, 0x1463: 0x0004, + 0x1464: 0x0004, 0x1465: 0x0004, 0x1466: 0x0004, 0x1467: 0x0004, 0x1468: 0x0004, 0x1469: 0x0004, + 0x146a: 0x0004, 0x146b: 0x0004, 0x146c: 0x0004, 0x146d: 0x0004, 0x146e: 0x0004, 0x146f: 0x0004, + 0x1470: 0x0004, 0x1471: 0x0004, 0x1472: 0x0004, 0x1473: 0x0004, 0x1474: 0x0004, 0x1475: 0x0004, + 0x1476: 0x0004, 0x1477: 0x0004, 0x1478: 0x0004, 0x1479: 0x0004, 0x147a: 0x0004, 0x147b: 0x0004, + 0x147c: 0x0004, 0x147d: 0x0004, 0x147e: 0x0004, 0x147f: 0x0004, + // Block 0x52, offset 0x1480 + 0x1480: 0x0004, 0x1481: 0x0004, 0x1482: 0x0004, 0x1483: 0x0004, 0x1484: 0x0004, 0x1485: 0x0004, + 0x1486: 0x0004, 0x1487: 0x0004, 0x1488: 0x0004, 0x1489: 0x0004, 0x148a: 0x0004, 0x148b: 0x0004, + 0x148c: 0x0004, 0x148d: 0x0004, 0x148e: 0x0004, 0x148f: 0x0004, 0x1490: 0x000c, 0x1491: 0x000c, + 0x1492: 0x000c, 0x1493: 0x000c, 0x1494: 0x000c, 0x1495: 0x000c, 0x1496: 0x000c, 0x1497: 0x000c, + 0x1498: 0x000c, 0x1499: 0x000c, 0x149a: 0x000c, 0x149b: 0x000c, 0x149c: 0x000c, 0x149d: 0x000c, + 0x149e: 0x000c, 0x149f: 0x000c, 0x14a0: 0x000c, 0x14a1: 0x000c, 0x14a2: 0x000c, 0x14a3: 0x000c, + 0x14a4: 0x000c, 0x14a5: 0x000c, 0x14a6: 0x000c, 0x14a7: 0x000c, 0x14a8: 0x000c, 0x14a9: 0x000c, + 0x14aa: 0x000c, 0x14ab: 0x000c, 0x14ac: 0x000c, 0x14ad: 0x000c, 0x14ae: 0x000c, 0x14af: 0x000c, + 0x14b0: 0x000c, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x000a, 0x14c1: 0x000a, 0x14c3: 0x000a, 0x14c4: 0x000a, 0x14c5: 0x000a, + 0x14c6: 0x000a, 0x14c8: 0x000a, 0x14c9: 0x000a, + 0x14d4: 0x000a, 0x14d6: 0x000a, 0x14d7: 0x000a, + 0x14d8: 0x000a, + 0x14de: 0x000a, 0x14df: 0x000a, 0x14e0: 0x000a, 0x14e1: 0x000a, 0x14e2: 0x000a, 0x14e3: 0x000a, + 0x14e5: 0x000a, 0x14e7: 0x000a, 0x14e9: 0x000a, + 0x14ee: 0x0004, + 0x14fa: 0x000a, 0x14fb: 0x000a, + // Block 0x54, offset 0x1500 + 0x1500: 0x000a, 0x1501: 0x000a, 0x1502: 0x000a, 0x1503: 0x000a, 0x1504: 0x000a, + 0x150a: 0x000a, 0x150b: 0x000a, + 0x150c: 0x000a, 0x150d: 0x000a, 0x1510: 0x000a, 0x1511: 0x000a, + 0x1512: 0x000a, 0x1513: 0x000a, 0x1514: 0x000a, 0x1515: 0x000a, 0x1516: 0x000a, 0x1517: 0x000a, + 0x1518: 0x000a, 0x1519: 0x000a, 0x151a: 0x000a, 0x151b: 0x000a, 0x151c: 0x000a, 0x151d: 0x000a, + 0x151e: 0x000a, 0x151f: 0x000a, + // Block 0x55, offset 0x1540 + 0x1549: 0x000a, 0x154a: 0x000a, 0x154b: 0x000a, + 0x1550: 0x000a, 0x1551: 0x000a, + 0x1552: 0x000a, 0x1553: 0x000a, 0x1554: 0x000a, 0x1555: 0x000a, 0x1556: 0x000a, 0x1557: 0x000a, + 0x1558: 0x000a, 0x1559: 0x000a, 0x155a: 0x000a, 0x155b: 0x000a, 0x155c: 0x000a, 0x155d: 0x000a, + 0x155e: 0x000a, 0x155f: 0x000a, 0x1560: 0x000a, 0x1561: 0x000a, 0x1562: 0x000a, 0x1563: 0x000a, + 0x1564: 0x000a, 0x1565: 0x000a, 0x1566: 0x000a, 0x1567: 0x000a, 0x1568: 0x000a, 0x1569: 0x000a, + 0x156a: 0x000a, 0x156b: 0x000a, 0x156c: 0x000a, 0x156d: 0x000a, 0x156e: 0x000a, 0x156f: 0x000a, + 0x1570: 0x000a, 0x1571: 0x000a, 0x1572: 0x000a, 0x1573: 0x000a, 0x1574: 0x000a, 0x1575: 0x000a, + 0x1576: 0x000a, 0x1577: 0x000a, 0x1578: 0x000a, 0x1579: 0x000a, 0x157a: 0x000a, 0x157b: 0x000a, + 0x157c: 0x000a, 0x157d: 0x000a, 0x157e: 0x000a, 0x157f: 0x000a, + // Block 0x56, offset 0x1580 + 0x1580: 0x000a, 0x1581: 0x000a, 0x1582: 0x000a, 0x1583: 0x000a, 0x1584: 0x000a, 0x1585: 0x000a, + 0x1586: 0x000a, 0x1587: 0x000a, 0x1588: 0x000a, 0x1589: 0x000a, 0x158a: 0x000a, 0x158b: 0x000a, + 0x158c: 0x000a, 0x158d: 0x000a, 0x158e: 0x000a, 0x158f: 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, 0x15a0: 0x000a, 0x15a1: 0x000a, 0x15a2: 0x000a, 0x15a3: 0x000a, + 0x15a4: 0x000a, 0x15a5: 0x000a, 0x15a6: 0x000a, 0x15a7: 0x000a, 0x15a8: 0x000a, 0x15a9: 0x000a, + 0x15aa: 0x000a, 0x15ab: 0x000a, 0x15ac: 0x000a, 0x15ad: 0x000a, 0x15ae: 0x000a, 0x15af: 0x000a, + 0x15b0: 0x000a, 0x15b1: 0x000a, 0x15b2: 0x000a, 0x15b3: 0x000a, 0x15b4: 0x000a, 0x15b5: 0x000a, + 0x15b6: 0x000a, 0x15b7: 0x000a, 0x15b8: 0x000a, 0x15b9: 0x000a, 0x15ba: 0x000a, 0x15bb: 0x000a, + 0x15bc: 0x000a, 0x15bd: 0x000a, 0x15be: 0x000a, 0x15bf: 0x000a, + // Block 0x57, offset 0x15c0 + 0x15c0: 0x000a, 0x15c1: 0x000a, 0x15c2: 0x000a, 0x15c3: 0x000a, 0x15c4: 0x000a, 0x15c5: 0x000a, + 0x15c6: 0x000a, 0x15c7: 0x000a, 0x15c8: 0x000a, 0x15c9: 0x000a, 0x15ca: 0x000a, 0x15cb: 0x000a, + 0x15cc: 0x000a, 0x15cd: 0x000a, 0x15ce: 0x000a, 0x15cf: 0x000a, 0x15d0: 0x000a, 0x15d1: 0x000a, + 0x15d2: 0x0003, 0x15d3: 0x0004, 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: 0x003a, 0x1609: 0x002a, 0x160a: 0x003a, 0x160b: 0x002a, + 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: 0x009a, + 0x162a: 0x008a, 0x162b: 0x000a, 0x162c: 0x000a, 0x162d: 0x000a, 0x162e: 0x000a, 0x162f: 0x000a, + 0x1630: 0x000a, 0x1631: 0x000a, 0x1632: 0x000a, 0x1633: 0x000a, 0x1634: 0x000a, 0x1635: 0x000a, + // Block 0x59, offset 0x1640 + 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: 0x000a, 0x1689: 0x000a, 0x168a: 0x000a, 0x168b: 0x000a, + 0x168c: 0x000a, 0x168d: 0x000a, 0x168e: 0x000a, 0x168f: 0x000a, 0x1690: 0x000a, 0x1691: 0x000a, + 0x1692: 0x000a, 0x1693: 0x000a, 0x1694: 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: 0x000a, + 0x16aa: 0x000a, 0x16ab: 0x000a, 0x16ac: 0x000a, 0x16ad: 0x000a, 0x16ae: 0x000a, 0x16af: 0x000a, + 0x16b0: 0x000a, 0x16b1: 0x000a, 0x16b2: 0x000a, 0x16b3: 0x000a, 0x16b4: 0x000a, 0x16b5: 0x000a, + 0x16b6: 0x000a, 0x16b7: 0x000a, 0x16b8: 0x000a, 0x16b9: 0x000a, 0x16ba: 0x000a, 0x16bb: 0x000a, + 0x16bc: 0x000a, 0x16bd: 0x000a, 0x16be: 0x000a, 0x16bf: 0x000a, + // Block 0x5b, offset 0x16c0 + 0x16c0: 0x000a, 0x16c1: 0x000a, 0x16c2: 0x000a, 0x16c3: 0x000a, 0x16c4: 0x000a, 0x16c5: 0x000a, + 0x16c6: 0x000a, 0x16c7: 0x000a, 0x16c8: 0x000a, 0x16c9: 0x000a, 0x16ca: 0x000a, 0x16cb: 0x000a, + 0x16cc: 0x000a, 0x16cd: 0x000a, 0x16ce: 0x000a, 0x16cf: 0x000a, 0x16d0: 0x000a, 0x16d1: 0x000a, + 0x16d2: 0x000a, 0x16d3: 0x000a, 0x16d4: 0x000a, 0x16d5: 0x000a, 0x16d6: 0x000a, 0x16d7: 0x000a, + 0x16d8: 0x000a, 0x16d9: 0x000a, 0x16da: 0x000a, 0x16db: 0x000a, 0x16dc: 0x000a, 0x16dd: 0x000a, + 0x16de: 0x000a, 0x16df: 0x000a, 0x16e0: 0x000a, 0x16e1: 0x000a, 0x16e2: 0x000a, 0x16e3: 0x000a, + 0x16e4: 0x000a, 0x16e5: 0x000a, 0x16e6: 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, + 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: 0x0002, 0x1749: 0x0002, 0x174a: 0x0002, 0x174b: 0x0002, + 0x174c: 0x0002, 0x174d: 0x0002, 0x174e: 0x0002, 0x174f: 0x0002, 0x1750: 0x0002, 0x1751: 0x0002, + 0x1752: 0x0002, 0x1753: 0x0002, 0x1754: 0x0002, 0x1755: 0x0002, 0x1756: 0x0002, 0x1757: 0x0002, + 0x1758: 0x0002, 0x1759: 0x0002, 0x175a: 0x0002, 0x175b: 0x0002, + // Block 0x5e, offset 0x1780 + 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: 0x000a, 0x17c9: 0x000a, 0x17ca: 0x000a, 0x17cb: 0x000a, + 0x17cc: 0x000a, 0x17cd: 0x000a, 0x17ce: 0x000a, 0x17cf: 0x000a, 0x17d0: 0x000a, 0x17d1: 0x000a, + 0x17d2: 0x000a, 0x17d3: 0x000a, 0x17d4: 0x000a, 0x17d5: 0x000a, 0x17d6: 0x000a, 0x17d7: 0x000a, + 0x17d8: 0x000a, 0x17d9: 0x000a, 0x17da: 0x000a, 0x17db: 0x000a, 0x17dc: 0x000a, 0x17dd: 0x000a, + 0x17de: 0x000a, 0x17df: 0x000a, 0x17e0: 0x000a, 0x17e1: 0x000a, 0x17e2: 0x000a, 0x17e3: 0x000a, + 0x17e4: 0x000a, 0x17e5: 0x000a, 0x17e6: 0x000a, 0x17e7: 0x000a, 0x17e8: 0x000a, 0x17e9: 0x000a, + 0x17ea: 0x000a, 0x17eb: 0x000a, 0x17ed: 0x000a, 0x17ee: 0x000a, 0x17ef: 0x000a, + 0x17f0: 0x000a, 0x17f1: 0x000a, 0x17f2: 0x000a, 0x17f3: 0x000a, 0x17f4: 0x000a, 0x17f5: 0x000a, + 0x17f6: 0x000a, 0x17f7: 0x000a, 0x17f8: 0x000a, 0x17f9: 0x000a, 0x17fa: 0x000a, 0x17fb: 0x000a, + 0x17fc: 0x000a, 0x17fd: 0x000a, 0x17fe: 0x000a, 0x17ff: 0x000a, + // Block 0x60, offset 0x1800 + 0x1800: 0x000a, 0x1801: 0x000a, 0x1802: 0x000a, 0x1803: 0x000a, 0x1804: 0x000a, 0x1805: 0x000a, + 0x1806: 0x000a, 0x1807: 0x000a, 0x1808: 0x000a, 0x1809: 0x000a, 0x180a: 0x000a, 0x180b: 0x000a, + 0x180c: 0x000a, 0x180d: 0x000a, 0x180e: 0x000a, 0x180f: 0x000a, 0x1810: 0x000a, 0x1811: 0x000a, + 0x1812: 0x000a, 0x1813: 0x000a, 0x1814: 0x000a, 0x1815: 0x000a, 0x1816: 0x000a, 0x1817: 0x000a, + 0x1818: 0x000a, 0x1819: 0x000a, 0x181a: 0x000a, 0x181b: 0x000a, 0x181c: 0x000a, 0x181d: 0x000a, + 0x181e: 0x000a, 0x181f: 0x000a, 0x1820: 0x000a, 0x1821: 0x000a, 0x1822: 0x000a, 0x1823: 0x000a, + 0x1824: 0x000a, 0x1825: 0x000a, 0x1826: 0x000a, 0x1827: 0x000a, 0x1828: 0x003a, 0x1829: 0x002a, + 0x182a: 0x003a, 0x182b: 0x002a, 0x182c: 0x003a, 0x182d: 0x002a, 0x182e: 0x003a, 0x182f: 0x002a, + 0x1830: 0x003a, 0x1831: 0x002a, 0x1832: 0x003a, 0x1833: 0x002a, 0x1834: 0x003a, 0x1835: 0x002a, + 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: 0x009a, + 0x1846: 0x008a, 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: 0x003a, 0x1867: 0x002a, 0x1868: 0x003a, 0x1869: 0x002a, + 0x186a: 0x003a, 0x186b: 0x002a, 0x186c: 0x003a, 0x186d: 0x002a, 0x186e: 0x003a, 0x186f: 0x002a, + 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: 0x007a, 0x1884: 0x006a, 0x1885: 0x009a, + 0x1886: 0x008a, 0x1887: 0x00ba, 0x1888: 0x00aa, 0x1889: 0x009a, 0x188a: 0x008a, 0x188b: 0x007a, + 0x188c: 0x006a, 0x188d: 0x00da, 0x188e: 0x002a, 0x188f: 0x003a, 0x1890: 0x00ca, 0x1891: 0x009a, + 0x1892: 0x008a, 0x1893: 0x007a, 0x1894: 0x006a, 0x1895: 0x009a, 0x1896: 0x008a, 0x1897: 0x00ba, + 0x1898: 0x00aa, 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: 0x000a, 0x18a9: 0x000a, + 0x18aa: 0x000a, 0x18ab: 0x000a, 0x18ac: 0x000a, 0x18ad: 0x000a, 0x18ae: 0x000a, 0x18af: 0x000a, + 0x18b0: 0x000a, 0x18b1: 0x000a, 0x18b2: 0x000a, 0x18b3: 0x000a, 0x18b4: 0x000a, 0x18b5: 0x000a, + 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: 0x000a, + 0x18c6: 0x000a, 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: 0x003a, 0x18d9: 0x002a, 0x18da: 0x003a, 0x18db: 0x002a, 0x18dc: 0x000a, 0x18dd: 0x000a, + 0x18de: 0x000a, 0x18df: 0x000a, 0x18e0: 0x000a, 0x18e1: 0x000a, 0x18e2: 0x000a, 0x18e3: 0x000a, + 0x18e4: 0x000a, 0x18e5: 0x000a, 0x18e6: 0x000a, 0x18e7: 0x000a, 0x18e8: 0x000a, 0x18e9: 0x000a, + 0x18ea: 0x000a, 0x18eb: 0x000a, 0x18ec: 0x000a, 0x18ed: 0x000a, 0x18ee: 0x000a, 0x18ef: 0x000a, + 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: 0x003a, 0x18fd: 0x002a, 0x18fe: 0x000a, 0x18ff: 0x000a, + // Block 0x64, offset 0x1900 + 0x1900: 0x000a, 0x1901: 0x000a, 0x1902: 0x000a, 0x1903: 0x000a, 0x1904: 0x000a, 0x1905: 0x000a, + 0x1906: 0x000a, 0x1907: 0x000a, 0x1908: 0x000a, 0x1909: 0x000a, 0x190a: 0x000a, 0x190b: 0x000a, + 0x190c: 0x000a, 0x190d: 0x000a, 0x190e: 0x000a, 0x190f: 0x000a, 0x1910: 0x000a, 0x1911: 0x000a, + 0x1912: 0x000a, 0x1913: 0x000a, 0x1914: 0x000a, 0x1915: 0x000a, 0x1916: 0x000a, 0x1917: 0x000a, + 0x1918: 0x000a, 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, + 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, + 0x1958: 0x000a, 0x1959: 0x000a, 0x195a: 0x000a, 0x195b: 0x000a, 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, + 0x197d: 0x000a, 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, 0x198a: 0x000a, 0x198b: 0x000a, + 0x198c: 0x000a, 0x198d: 0x000a, 0x198e: 0x000a, 0x198f: 0x000a, 0x1990: 0x000a, 0x1991: 0x000a, + 0x1992: 0x000a, + 0x19ac: 0x000a, 0x19ad: 0x000a, 0x19ae: 0x000a, 0x19af: 0x000a, + // Block 0x67, offset 0x19c0 + 0x19e5: 0x000a, 0x19e6: 0x000a, 0x19e7: 0x000a, 0x19e8: 0x000a, 0x19e9: 0x000a, + 0x19ea: 0x000a, 0x19ef: 0x000c, + 0x19f0: 0x000c, 0x19f1: 0x000c, + 0x19f9: 0x000a, 0x19fa: 0x000a, 0x19fb: 0x000a, + 0x19fc: 0x000a, 0x19fd: 0x000a, 0x19fe: 0x000a, 0x19ff: 0x000a, + // Block 0x68, offset 0x1a00 + 0x1a3f: 0x000c, + // Block 0x69, offset 0x1a40 + 0x1a60: 0x000c, 0x1a61: 0x000c, 0x1a62: 0x000c, 0x1a63: 0x000c, + 0x1a64: 0x000c, 0x1a65: 0x000c, 0x1a66: 0x000c, 0x1a67: 0x000c, 0x1a68: 0x000c, 0x1a69: 0x000c, + 0x1a6a: 0x000c, 0x1a6b: 0x000c, 0x1a6c: 0x000c, 0x1a6d: 0x000c, 0x1a6e: 0x000c, 0x1a6f: 0x000c, + 0x1a70: 0x000c, 0x1a71: 0x000c, 0x1a72: 0x000c, 0x1a73: 0x000c, 0x1a74: 0x000c, 0x1a75: 0x000c, + 0x1a76: 0x000c, 0x1a77: 0x000c, 0x1a78: 0x000c, 0x1a79: 0x000c, 0x1a7a: 0x000c, 0x1a7b: 0x000c, + 0x1a7c: 0x000c, 0x1a7d: 0x000c, 0x1a7e: 0x000c, 0x1a7f: 0x000c, + // Block 0x6a, offset 0x1a80 + 0x1a80: 0x000a, 0x1a81: 0x000a, 0x1a82: 0x000a, 0x1a83: 0x000a, 0x1a84: 0x000a, 0x1a85: 0x000a, + 0x1a86: 0x000a, 0x1a87: 0x000a, 0x1a88: 0x000a, 0x1a89: 0x000a, 0x1a8a: 0x000a, 0x1a8b: 0x000a, + 0x1a8c: 0x000a, 0x1a8d: 0x000a, 0x1a8e: 0x000a, 0x1a8f: 0x000a, 0x1a90: 0x000a, 0x1a91: 0x000a, + 0x1a92: 0x000a, 0x1a93: 0x000a, 0x1a94: 0x000a, 0x1a95: 0x000a, 0x1a96: 0x000a, 0x1a97: 0x000a, + 0x1a98: 0x000a, 0x1a99: 0x000a, 0x1a9a: 0x000a, 0x1a9b: 0x000a, 0x1a9c: 0x000a, 0x1a9d: 0x000a, + 0x1a9e: 0x000a, 0x1a9f: 0x000a, 0x1aa0: 0x000a, 0x1aa1: 0x000a, 0x1aa2: 0x003a, 0x1aa3: 0x002a, + 0x1aa4: 0x003a, 0x1aa5: 0x002a, 0x1aa6: 0x003a, 0x1aa7: 0x002a, 0x1aa8: 0x003a, 0x1aa9: 0x002a, + 0x1aaa: 0x000a, 0x1aab: 0x000a, 0x1aac: 0x000a, 0x1aad: 0x000a, 0x1aae: 0x000a, 0x1aaf: 0x000a, + 0x1ab0: 0x000a, 0x1ab1: 0x000a, 0x1ab2: 0x000a, 0x1ab3: 0x000a, 0x1ab4: 0x000a, 0x1ab5: 0x000a, + 0x1ab6: 0x000a, 0x1ab7: 0x000a, 0x1ab8: 0x000a, 0x1ab9: 0x000a, 0x1aba: 0x000a, 0x1abb: 0x000a, + 0x1abc: 0x000a, 0x1abd: 0x000a, 0x1abe: 0x000a, 0x1abf: 0x000a, + // Block 0x6b, offset 0x1ac0 + 0x1ac0: 0x000a, 0x1ac1: 0x000a, 0x1ac2: 0x000a, 0x1ac3: 0x000a, 0x1ac4: 0x000a, 0x1ac5: 0x000a, + 0x1ac6: 0x000a, 0x1ac7: 0x000a, 0x1ac8: 0x000a, 0x1ac9: 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, 0x1b13: 0x000a, 0x1b14: 0x000a, 0x1b15: 0x000a, 0x1b16: 0x000a, 0x1b17: 0x000a, + 0x1b18: 0x000a, 0x1b19: 0x000a, 0x1b1b: 0x000a, 0x1b1c: 0x000a, 0x1b1d: 0x000a, + 0x1b1e: 0x000a, 0x1b1f: 0x000a, 0x1b20: 0x000a, 0x1b21: 0x000a, 0x1b22: 0x000a, 0x1b23: 0x000a, + 0x1b24: 0x000a, 0x1b25: 0x000a, 0x1b26: 0x000a, 0x1b27: 0x000a, 0x1b28: 0x000a, 0x1b29: 0x000a, + 0x1b2a: 0x000a, 0x1b2b: 0x000a, 0x1b2c: 0x000a, 0x1b2d: 0x000a, 0x1b2e: 0x000a, 0x1b2f: 0x000a, + 0x1b30: 0x000a, 0x1b31: 0x000a, 0x1b32: 0x000a, 0x1b33: 0x000a, 0x1b34: 0x000a, 0x1b35: 0x000a, + 0x1b36: 0x000a, 0x1b37: 0x000a, 0x1b38: 0x000a, 0x1b39: 0x000a, 0x1b3a: 0x000a, 0x1b3b: 0x000a, + 0x1b3c: 0x000a, 0x1b3d: 0x000a, 0x1b3e: 0x000a, 0x1b3f: 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, 0x1b5a: 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, + // 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, + 0x1bb0: 0x000a, 0x1bb1: 0x000a, 0x1bb2: 0x000a, 0x1bb3: 0x000a, 0x1bb4: 0x000a, 0x1bb5: 0x000a, + 0x1bb6: 0x000a, 0x1bb7: 0x000a, 0x1bb8: 0x000a, 0x1bb9: 0x000a, 0x1bba: 0x000a, 0x1bbb: 0x000a, + // Block 0x6f, offset 0x1bc0 + 0x1bc0: 0x0009, 0x1bc1: 0x000a, 0x1bc2: 0x000a, 0x1bc3: 0x000a, 0x1bc4: 0x000a, + 0x1bc8: 0x003a, 0x1bc9: 0x002a, 0x1bca: 0x003a, 0x1bcb: 0x002a, + 0x1bcc: 0x003a, 0x1bcd: 0x002a, 0x1bce: 0x003a, 0x1bcf: 0x002a, 0x1bd0: 0x003a, 0x1bd1: 0x002a, + 0x1bd2: 0x000a, 0x1bd3: 0x000a, 0x1bd4: 0x003a, 0x1bd5: 0x002a, 0x1bd6: 0x003a, 0x1bd7: 0x002a, + 0x1bd8: 0x003a, 0x1bd9: 0x002a, 0x1bda: 0x003a, 0x1bdb: 0x002a, 0x1bdc: 0x000a, 0x1bdd: 0x000a, + 0x1bde: 0x000a, 0x1bdf: 0x000a, 0x1be0: 0x000a, + 0x1bea: 0x000c, 0x1beb: 0x000c, 0x1bec: 0x000c, 0x1bed: 0x000c, + 0x1bf0: 0x000a, + 0x1bf6: 0x000a, 0x1bf7: 0x000a, + 0x1bfd: 0x000a, 0x1bfe: 0x000a, 0x1bff: 0x000a, + // Block 0x70, offset 0x1c00 + 0x1c19: 0x000c, 0x1c1a: 0x000c, 0x1c1b: 0x000a, 0x1c1c: 0x000a, + 0x1c20: 0x000a, + // Block 0x71, offset 0x1c40 + 0x1c7b: 0x000a, + // Block 0x72, offset 0x1c80 + 0x1c80: 0x000a, 0x1c81: 0x000a, 0x1c82: 0x000a, 0x1c83: 0x000a, 0x1c84: 0x000a, 0x1c85: 0x000a, + 0x1c86: 0x000a, 0x1c87: 0x000a, 0x1c88: 0x000a, 0x1c89: 0x000a, 0x1c8a: 0x000a, 0x1c8b: 0x000a, + 0x1c8c: 0x000a, 0x1c8d: 0x000a, 0x1c8e: 0x000a, 0x1c8f: 0x000a, 0x1c90: 0x000a, 0x1c91: 0x000a, + 0x1c92: 0x000a, 0x1c93: 0x000a, 0x1c94: 0x000a, 0x1c95: 0x000a, 0x1c96: 0x000a, 0x1c97: 0x000a, + 0x1c98: 0x000a, 0x1c99: 0x000a, 0x1c9a: 0x000a, 0x1c9b: 0x000a, 0x1c9c: 0x000a, 0x1c9d: 0x000a, + 0x1c9e: 0x000a, 0x1c9f: 0x000a, 0x1ca0: 0x000a, 0x1ca1: 0x000a, 0x1ca2: 0x000a, 0x1ca3: 0x000a, + // Block 0x73, offset 0x1cc0 + 0x1cdd: 0x000a, + 0x1cde: 0x000a, + // Block 0x74, offset 0x1d00 + 0x1d10: 0x000a, 0x1d11: 0x000a, + 0x1d12: 0x000a, 0x1d13: 0x000a, 0x1d14: 0x000a, 0x1d15: 0x000a, 0x1d16: 0x000a, 0x1d17: 0x000a, + 0x1d18: 0x000a, 0x1d19: 0x000a, 0x1d1a: 0x000a, 0x1d1b: 0x000a, 0x1d1c: 0x000a, 0x1d1d: 0x000a, + 0x1d1e: 0x000a, 0x1d1f: 0x000a, + 0x1d3c: 0x000a, 0x1d3d: 0x000a, 0x1d3e: 0x000a, + // Block 0x75, offset 0x1d40 + 0x1d71: 0x000a, 0x1d72: 0x000a, 0x1d73: 0x000a, 0x1d74: 0x000a, 0x1d75: 0x000a, + 0x1d76: 0x000a, 0x1d77: 0x000a, 0x1d78: 0x000a, 0x1d79: 0x000a, 0x1d7a: 0x000a, 0x1d7b: 0x000a, + 0x1d7c: 0x000a, 0x1d7d: 0x000a, 0x1d7e: 0x000a, 0x1d7f: 0x000a, + // Block 0x76, offset 0x1d80 + 0x1d8c: 0x000a, 0x1d8d: 0x000a, 0x1d8e: 0x000a, 0x1d8f: 0x000a, + // Block 0x77, offset 0x1dc0 + 0x1df7: 0x000a, 0x1df8: 0x000a, 0x1df9: 0x000a, 0x1dfa: 0x000a, + // Block 0x78, offset 0x1e00 + 0x1e1e: 0x000a, 0x1e1f: 0x000a, + 0x1e3f: 0x000a, + // Block 0x79, offset 0x1e40 + 0x1e50: 0x000a, 0x1e51: 0x000a, + 0x1e52: 0x000a, 0x1e53: 0x000a, 0x1e54: 0x000a, 0x1e55: 0x000a, 0x1e56: 0x000a, 0x1e57: 0x000a, + 0x1e58: 0x000a, 0x1e59: 0x000a, 0x1e5a: 0x000a, 0x1e5b: 0x000a, 0x1e5c: 0x000a, 0x1e5d: 0x000a, + 0x1e5e: 0x000a, 0x1e5f: 0x000a, 0x1e60: 0x000a, 0x1e61: 0x000a, 0x1e62: 0x000a, 0x1e63: 0x000a, + 0x1e64: 0x000a, 0x1e65: 0x000a, 0x1e66: 0x000a, 0x1e67: 0x000a, 0x1e68: 0x000a, 0x1e69: 0x000a, + 0x1e6a: 0x000a, 0x1e6b: 0x000a, 0x1e6c: 0x000a, 0x1e6d: 0x000a, 0x1e6e: 0x000a, 0x1e6f: 0x000a, + 0x1e70: 0x000a, 0x1e71: 0x000a, 0x1e72: 0x000a, 0x1e73: 0x000a, 0x1e74: 0x000a, 0x1e75: 0x000a, + 0x1e76: 0x000a, 0x1e77: 0x000a, 0x1e78: 0x000a, 0x1e79: 0x000a, 0x1e7a: 0x000a, 0x1e7b: 0x000a, + 0x1e7c: 0x000a, 0x1e7d: 0x000a, 0x1e7e: 0x000a, 0x1e7f: 0x000a, + // Block 0x7a, offset 0x1e80 + 0x1e80: 0x000a, 0x1e81: 0x000a, 0x1e82: 0x000a, 0x1e83: 0x000a, 0x1e84: 0x000a, 0x1e85: 0x000a, + 0x1e86: 0x000a, + // Block 0x7b, offset 0x1ec0 + 0x1ecd: 0x000a, 0x1ece: 0x000a, 0x1ecf: 0x000a, + // Block 0x7c, offset 0x1f00 + 0x1f2f: 0x000c, + 0x1f30: 0x000c, 0x1f31: 0x000c, 0x1f32: 0x000c, 0x1f33: 0x000a, 0x1f34: 0x000c, 0x1f35: 0x000c, + 0x1f36: 0x000c, 0x1f37: 0x000c, 0x1f38: 0x000c, 0x1f39: 0x000c, 0x1f3a: 0x000c, 0x1f3b: 0x000c, + 0x1f3c: 0x000c, 0x1f3d: 0x000c, 0x1f3e: 0x000a, 0x1f3f: 0x000a, + // Block 0x7d, offset 0x1f40 + 0x1f5e: 0x000c, 0x1f5f: 0x000c, + // Block 0x7e, offset 0x1f80 + 0x1fb0: 0x000c, 0x1fb1: 0x000c, + // Block 0x7f, offset 0x1fc0 + 0x1fc0: 0x000a, 0x1fc1: 0x000a, 0x1fc2: 0x000a, 0x1fc3: 0x000a, 0x1fc4: 0x000a, 0x1fc5: 0x000a, + 0x1fc6: 0x000a, 0x1fc7: 0x000a, 0x1fc8: 0x000a, 0x1fc9: 0x000a, 0x1fca: 0x000a, 0x1fcb: 0x000a, + 0x1fcc: 0x000a, 0x1fcd: 0x000a, 0x1fce: 0x000a, 0x1fcf: 0x000a, 0x1fd0: 0x000a, 0x1fd1: 0x000a, + 0x1fd2: 0x000a, 0x1fd3: 0x000a, 0x1fd4: 0x000a, 0x1fd5: 0x000a, 0x1fd6: 0x000a, 0x1fd7: 0x000a, + 0x1fd8: 0x000a, 0x1fd9: 0x000a, 0x1fda: 0x000a, 0x1fdb: 0x000a, 0x1fdc: 0x000a, 0x1fdd: 0x000a, + 0x1fde: 0x000a, 0x1fdf: 0x000a, 0x1fe0: 0x000a, 0x1fe1: 0x000a, + // Block 0x80, offset 0x2000 + 0x2008: 0x000a, + // Block 0x81, offset 0x2040 + 0x2042: 0x000c, + 0x2046: 0x000c, 0x204b: 0x000c, + 0x2065: 0x000c, 0x2066: 0x000c, 0x2068: 0x000a, 0x2069: 0x000a, + 0x206a: 0x000a, 0x206b: 0x000a, + 0x2078: 0x0004, 0x2079: 0x0004, + // Block 0x82, offset 0x2080 + 0x20b4: 0x000a, 0x20b5: 0x000a, + 0x20b6: 0x000a, 0x20b7: 0x000a, + // Block 0x83, offset 0x20c0 + 0x20c4: 0x000c, 0x20c5: 0x000c, + 0x20e0: 0x000c, 0x20e1: 0x000c, 0x20e2: 0x000c, 0x20e3: 0x000c, + 0x20e4: 0x000c, 0x20e5: 0x000c, 0x20e6: 0x000c, 0x20e7: 0x000c, 0x20e8: 0x000c, 0x20e9: 0x000c, + 0x20ea: 0x000c, 0x20eb: 0x000c, 0x20ec: 0x000c, 0x20ed: 0x000c, 0x20ee: 0x000c, 0x20ef: 0x000c, + 0x20f0: 0x000c, 0x20f1: 0x000c, + // Block 0x84, offset 0x2100 + 0x2126: 0x000c, 0x2127: 0x000c, 0x2128: 0x000c, 0x2129: 0x000c, + 0x212a: 0x000c, 0x212b: 0x000c, 0x212c: 0x000c, 0x212d: 0x000c, + // Block 0x85, offset 0x2140 + 0x2147: 0x000c, 0x2148: 0x000c, 0x2149: 0x000c, 0x214a: 0x000c, 0x214b: 0x000c, + 0x214c: 0x000c, 0x214d: 0x000c, 0x214e: 0x000c, 0x214f: 0x000c, 0x2150: 0x000c, 0x2151: 0x000c, + // Block 0x86, offset 0x2180 + 0x2180: 0x000c, 0x2181: 0x000c, 0x2182: 0x000c, + 0x21b3: 0x000c, + 0x21b6: 0x000c, 0x21b7: 0x000c, 0x21b8: 0x000c, 0x21b9: 0x000c, + 0x21bc: 0x000c, + // Block 0x87, offset 0x21c0 + 0x21e5: 0x000c, + // Block 0x88, offset 0x2200 + 0x2229: 0x000c, + 0x222a: 0x000c, 0x222b: 0x000c, 0x222c: 0x000c, 0x222d: 0x000c, 0x222e: 0x000c, + 0x2231: 0x000c, 0x2232: 0x000c, 0x2235: 0x000c, + 0x2236: 0x000c, + // Block 0x89, offset 0x2240 + 0x2243: 0x000c, + 0x224c: 0x000c, + 0x227c: 0x000c, + // Block 0x8a, offset 0x2280 + 0x22b0: 0x000c, 0x22b2: 0x000c, 0x22b3: 0x000c, 0x22b4: 0x000c, + 0x22b7: 0x000c, 0x22b8: 0x000c, + 0x22be: 0x000c, 0x22bf: 0x000c, + // Block 0x8b, offset 0x22c0 + 0x22c1: 0x000c, + 0x22ec: 0x000c, 0x22ed: 0x000c, + 0x22f6: 0x000c, + // Block 0x8c, offset 0x2300 + 0x2325: 0x000c, 0x2328: 0x000c, + 0x232d: 0x000c, + // Block 0x8d, offset 0x2340 + 0x235d: 0x0001, + 0x235e: 0x000c, 0x235f: 0x0001, 0x2360: 0x0001, 0x2361: 0x0001, 0x2362: 0x0001, 0x2363: 0x0001, + 0x2364: 0x0001, 0x2365: 0x0001, 0x2366: 0x0001, 0x2367: 0x0001, 0x2368: 0x0001, 0x2369: 0x0003, + 0x236a: 0x0001, 0x236b: 0x0001, 0x236c: 0x0001, 0x236d: 0x0001, 0x236e: 0x0001, 0x236f: 0x0001, + 0x2370: 0x0001, 0x2371: 0x0001, 0x2372: 0x0001, 0x2373: 0x0001, 0x2374: 0x0001, 0x2375: 0x0001, + 0x2376: 0x0001, 0x2377: 0x0001, 0x2378: 0x0001, 0x2379: 0x0001, 0x237a: 0x0001, 0x237b: 0x0001, + 0x237c: 0x0001, 0x237d: 0x0001, 0x237e: 0x0001, 0x237f: 0x0001, + // Block 0x8e, offset 0x2380 + 0x2380: 0x0001, 0x2381: 0x0001, 0x2382: 0x0001, 0x2383: 0x0001, 0x2384: 0x0001, 0x2385: 0x0001, + 0x2386: 0x0001, 0x2387: 0x0001, 0x2388: 0x0001, 0x2389: 0x0001, 0x238a: 0x0001, 0x238b: 0x0001, + 0x238c: 0x0001, 0x238d: 0x0001, 0x238e: 0x0001, 0x238f: 0x0001, 0x2390: 0x000d, 0x2391: 0x000d, + 0x2392: 0x000d, 0x2393: 0x000d, 0x2394: 0x000d, 0x2395: 0x000d, 0x2396: 0x000d, 0x2397: 0x000d, + 0x2398: 0x000d, 0x2399: 0x000d, 0x239a: 0x000d, 0x239b: 0x000d, 0x239c: 0x000d, 0x239d: 0x000d, + 0x239e: 0x000d, 0x239f: 0x000d, 0x23a0: 0x000d, 0x23a1: 0x000d, 0x23a2: 0x000d, 0x23a3: 0x000d, + 0x23a4: 0x000d, 0x23a5: 0x000d, 0x23a6: 0x000d, 0x23a7: 0x000d, 0x23a8: 0x000d, 0x23a9: 0x000d, + 0x23aa: 0x000d, 0x23ab: 0x000d, 0x23ac: 0x000d, 0x23ad: 0x000d, 0x23ae: 0x000d, 0x23af: 0x000d, + 0x23b0: 0x000d, 0x23b1: 0x000d, 0x23b2: 0x000d, 0x23b3: 0x000d, 0x23b4: 0x000d, 0x23b5: 0x000d, + 0x23b6: 0x000d, 0x23b7: 0x000d, 0x23b8: 0x000d, 0x23b9: 0x000d, 0x23ba: 0x000d, 0x23bb: 0x000d, + 0x23bc: 0x000d, 0x23bd: 0x000d, 0x23be: 0x000d, 0x23bf: 0x000d, + // Block 0x8f, offset 0x23c0 + 0x23c0: 0x000d, 0x23c1: 0x000d, 0x23c2: 0x000d, 0x23c3: 0x000d, 0x23c4: 0x000d, 0x23c5: 0x000d, + 0x23c6: 0x000d, 0x23c7: 0x000d, 0x23c8: 0x000d, 0x23c9: 0x000d, 0x23ca: 0x000d, 0x23cb: 0x000d, + 0x23cc: 0x000d, 0x23cd: 0x000d, 0x23ce: 0x000d, 0x23cf: 0x000d, 0x23d0: 0x000d, 0x23d1: 0x000d, + 0x23d2: 0x000d, 0x23d3: 0x000d, 0x23d4: 0x000d, 0x23d5: 0x000d, 0x23d6: 0x000d, 0x23d7: 0x000d, + 0x23d8: 0x000d, 0x23d9: 0x000d, 0x23da: 0x000d, 0x23db: 0x000d, 0x23dc: 0x000d, 0x23dd: 0x000d, + 0x23de: 0x000d, 0x23df: 0x000d, 0x23e0: 0x000d, 0x23e1: 0x000d, 0x23e2: 0x000d, 0x23e3: 0x000d, + 0x23e4: 0x000d, 0x23e5: 0x000d, 0x23e6: 0x000d, 0x23e7: 0x000d, 0x23e8: 0x000d, 0x23e9: 0x000d, + 0x23ea: 0x000d, 0x23eb: 0x000d, 0x23ec: 0x000d, 0x23ed: 0x000d, 0x23ee: 0x000d, 0x23ef: 0x000d, + 0x23f0: 0x000d, 0x23f1: 0x000d, 0x23f2: 0x000d, 0x23f3: 0x000d, 0x23f4: 0x000d, 0x23f5: 0x000d, + 0x23f6: 0x000d, 0x23f7: 0x000d, 0x23f8: 0x000d, 0x23f9: 0x000d, 0x23fa: 0x000d, 0x23fb: 0x000d, + 0x23fc: 0x000d, 0x23fd: 0x000d, 0x23fe: 0x000a, 0x23ff: 0x000a, + // Block 0x90, offset 0x2400 + 0x2400: 0x000d, 0x2401: 0x000d, 0x2402: 0x000d, 0x2403: 0x000d, 0x2404: 0x000d, 0x2405: 0x000d, + 0x2406: 0x000d, 0x2407: 0x000d, 0x2408: 0x000d, 0x2409: 0x000d, 0x240a: 0x000d, 0x240b: 0x000d, + 0x240c: 0x000d, 0x240d: 0x000d, 0x240e: 0x000d, 0x240f: 0x000d, 0x2410: 0x000b, 0x2411: 0x000b, + 0x2412: 0x000b, 0x2413: 0x000b, 0x2414: 0x000b, 0x2415: 0x000b, 0x2416: 0x000b, 0x2417: 0x000b, + 0x2418: 0x000b, 0x2419: 0x000b, 0x241a: 0x000b, 0x241b: 0x000b, 0x241c: 0x000b, 0x241d: 0x000b, + 0x241e: 0x000b, 0x241f: 0x000b, 0x2420: 0x000b, 0x2421: 0x000b, 0x2422: 0x000b, 0x2423: 0x000b, + 0x2424: 0x000b, 0x2425: 0x000b, 0x2426: 0x000b, 0x2427: 0x000b, 0x2428: 0x000b, 0x2429: 0x000b, + 0x242a: 0x000b, 0x242b: 0x000b, 0x242c: 0x000b, 0x242d: 0x000b, 0x242e: 0x000b, 0x242f: 0x000b, + 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: 0x000a, 0x243e: 0x000d, 0x243f: 0x000d, + // Block 0x91, offset 0x2440 + 0x2440: 0x000c, 0x2441: 0x000c, 0x2442: 0x000c, 0x2443: 0x000c, 0x2444: 0x000c, 0x2445: 0x000c, + 0x2446: 0x000c, 0x2447: 0x000c, 0x2448: 0x000c, 0x2449: 0x000c, 0x244a: 0x000c, 0x244b: 0x000c, + 0x244c: 0x000c, 0x244d: 0x000c, 0x244e: 0x000c, 0x244f: 0x000c, 0x2450: 0x000a, 0x2451: 0x000a, + 0x2452: 0x000a, 0x2453: 0x000a, 0x2454: 0x000a, 0x2455: 0x000a, 0x2456: 0x000a, 0x2457: 0x000a, + 0x2458: 0x000a, 0x2459: 0x000a, + 0x2460: 0x000c, 0x2461: 0x000c, 0x2462: 0x000c, 0x2463: 0x000c, + 0x2464: 0x000c, 0x2465: 0x000c, 0x2466: 0x000c, 0x2467: 0x000c, 0x2468: 0x000c, 0x2469: 0x000c, + 0x246a: 0x000c, 0x246b: 0x000c, 0x246c: 0x000c, 0x246d: 0x000c, 0x246e: 0x000c, 0x246f: 0x000c, + 0x2470: 0x000a, 0x2471: 0x000a, 0x2472: 0x000a, 0x2473: 0x000a, 0x2474: 0x000a, 0x2475: 0x000a, + 0x2476: 0x000a, 0x2477: 0x000a, 0x2478: 0x000a, 0x2479: 0x000a, 0x247a: 0x000a, 0x247b: 0x000a, + 0x247c: 0x000a, 0x247d: 0x000a, 0x247e: 0x000a, 0x247f: 0x000a, + // Block 0x92, offset 0x2480 + 0x2480: 0x000a, 0x2481: 0x000a, 0x2482: 0x000a, 0x2483: 0x000a, 0x2484: 0x000a, 0x2485: 0x000a, + 0x2486: 0x000a, 0x2487: 0x000a, 0x2488: 0x000a, 0x2489: 0x000a, 0x248a: 0x000a, 0x248b: 0x000a, + 0x248c: 0x000a, 0x248d: 0x000a, 0x248e: 0x000a, 0x248f: 0x000a, 0x2490: 0x0006, 0x2491: 0x000a, + 0x2492: 0x0006, 0x2494: 0x000a, 0x2495: 0x0006, 0x2496: 0x000a, 0x2497: 0x000a, + 0x2498: 0x000a, 0x2499: 0x009a, 0x249a: 0x008a, 0x249b: 0x007a, 0x249c: 0x006a, 0x249d: 0x009a, + 0x249e: 0x008a, 0x249f: 0x0004, 0x24a0: 0x000a, 0x24a1: 0x000a, 0x24a2: 0x0003, 0x24a3: 0x0003, + 0x24a4: 0x000a, 0x24a5: 0x000a, 0x24a6: 0x000a, 0x24a8: 0x000a, 0x24a9: 0x0004, + 0x24aa: 0x0004, 0x24ab: 0x000a, + 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: 0x000d, 0x24be: 0x000d, 0x24bf: 0x000d, + // Block 0x93, offset 0x24c0 + 0x24c0: 0x000d, 0x24c1: 0x000d, 0x24c2: 0x000d, 0x24c3: 0x000d, 0x24c4: 0x000d, 0x24c5: 0x000d, + 0x24c6: 0x000d, 0x24c7: 0x000d, 0x24c8: 0x000d, 0x24c9: 0x000d, 0x24ca: 0x000d, 0x24cb: 0x000d, + 0x24cc: 0x000d, 0x24cd: 0x000d, 0x24ce: 0x000d, 0x24cf: 0x000d, 0x24d0: 0x000d, 0x24d1: 0x000d, + 0x24d2: 0x000d, 0x24d3: 0x000d, 0x24d4: 0x000d, 0x24d5: 0x000d, 0x24d6: 0x000d, 0x24d7: 0x000d, + 0x24d8: 0x000d, 0x24d9: 0x000d, 0x24da: 0x000d, 0x24db: 0x000d, 0x24dc: 0x000d, 0x24dd: 0x000d, + 0x24de: 0x000d, 0x24df: 0x000d, 0x24e0: 0x000d, 0x24e1: 0x000d, 0x24e2: 0x000d, 0x24e3: 0x000d, + 0x24e4: 0x000d, 0x24e5: 0x000d, 0x24e6: 0x000d, 0x24e7: 0x000d, 0x24e8: 0x000d, 0x24e9: 0x000d, + 0x24ea: 0x000d, 0x24eb: 0x000d, 0x24ec: 0x000d, 0x24ed: 0x000d, 0x24ee: 0x000d, 0x24ef: 0x000d, + 0x24f0: 0x000d, 0x24f1: 0x000d, 0x24f2: 0x000d, 0x24f3: 0x000d, 0x24f4: 0x000d, 0x24f5: 0x000d, + 0x24f6: 0x000d, 0x24f7: 0x000d, 0x24f8: 0x000d, 0x24f9: 0x000d, 0x24fa: 0x000d, 0x24fb: 0x000d, + 0x24fc: 0x000d, 0x24fd: 0x000d, 0x24fe: 0x000d, 0x24ff: 0x000b, + // Block 0x94, offset 0x2500 + 0x2501: 0x000a, 0x2502: 0x000a, 0x2503: 0x0004, 0x2504: 0x0004, 0x2505: 0x0004, + 0x2506: 0x000a, 0x2507: 0x000a, 0x2508: 0x003a, 0x2509: 0x002a, 0x250a: 0x000a, 0x250b: 0x0003, + 0x250c: 0x0006, 0x250d: 0x0003, 0x250e: 0x0006, 0x250f: 0x0006, 0x2510: 0x0002, 0x2511: 0x0002, + 0x2512: 0x0002, 0x2513: 0x0002, 0x2514: 0x0002, 0x2515: 0x0002, 0x2516: 0x0002, 0x2517: 0x0002, + 0x2518: 0x0002, 0x2519: 0x0002, 0x251a: 0x0006, 0x251b: 0x000a, 0x251c: 0x000a, 0x251d: 0x000a, + 0x251e: 0x000a, 0x251f: 0x000a, 0x2520: 0x000a, + 0x253b: 0x005a, + 0x253c: 0x000a, 0x253d: 0x004a, 0x253e: 0x000a, 0x253f: 0x000a, + // Block 0x95, offset 0x2540 + 0x2540: 0x000a, + 0x255b: 0x005a, 0x255c: 0x000a, 0x255d: 0x004a, + 0x255e: 0x000a, 0x255f: 0x00fa, 0x2560: 0x00ea, 0x2561: 0x000a, 0x2562: 0x003a, 0x2563: 0x002a, + 0x2564: 0x000a, 0x2565: 0x000a, + // Block 0x96, offset 0x2580 + 0x25a0: 0x0004, 0x25a1: 0x0004, 0x25a2: 0x000a, 0x25a3: 0x000a, + 0x25a4: 0x000a, 0x25a5: 0x0004, 0x25a6: 0x0004, 0x25a8: 0x000a, 0x25a9: 0x000a, + 0x25aa: 0x000a, 0x25ab: 0x000a, 0x25ac: 0x000a, 0x25ad: 0x000a, 0x25ae: 0x000a, + 0x25b0: 0x000b, 0x25b1: 0x000b, 0x25b2: 0x000b, 0x25b3: 0x000b, 0x25b4: 0x000b, 0x25b5: 0x000b, + 0x25b6: 0x000b, 0x25b7: 0x000b, 0x25b8: 0x000b, 0x25b9: 0x000a, 0x25ba: 0x000a, 0x25bb: 0x000a, + 0x25bc: 0x000a, 0x25bd: 0x000a, 0x25be: 0x000b, 0x25bf: 0x000b, + // Block 0x97, offset 0x25c0 + 0x25c1: 0x000a, + // Block 0x98, offset 0x2600 + 0x2600: 0x000a, 0x2601: 0x000a, 0x2602: 0x000a, 0x2603: 0x000a, 0x2604: 0x000a, 0x2605: 0x000a, + 0x2606: 0x000a, 0x2607: 0x000a, 0x2608: 0x000a, 0x2609: 0x000a, 0x260a: 0x000a, 0x260b: 0x000a, + 0x260c: 0x000a, 0x2610: 0x000a, 0x2611: 0x000a, + 0x2612: 0x000a, 0x2613: 0x000a, 0x2614: 0x000a, 0x2615: 0x000a, 0x2616: 0x000a, 0x2617: 0x000a, + 0x2618: 0x000a, 0x2619: 0x000a, 0x261a: 0x000a, 0x261b: 0x000a, + 0x2620: 0x000a, + // Block 0x99, offset 0x2640 + 0x267d: 0x000c, + // Block 0x9a, offset 0x2680 + 0x26a0: 0x000c, 0x26a1: 0x0002, 0x26a2: 0x0002, 0x26a3: 0x0002, + 0x26a4: 0x0002, 0x26a5: 0x0002, 0x26a6: 0x0002, 0x26a7: 0x0002, 0x26a8: 0x0002, 0x26a9: 0x0002, + 0x26aa: 0x0002, 0x26ab: 0x0002, 0x26ac: 0x0002, 0x26ad: 0x0002, 0x26ae: 0x0002, 0x26af: 0x0002, + 0x26b0: 0x0002, 0x26b1: 0x0002, 0x26b2: 0x0002, 0x26b3: 0x0002, 0x26b4: 0x0002, 0x26b5: 0x0002, + 0x26b6: 0x0002, 0x26b7: 0x0002, 0x26b8: 0x0002, 0x26b9: 0x0002, 0x26ba: 0x0002, 0x26bb: 0x0002, + // Block 0x9b, offset 0x26c0 + 0x26f6: 0x000c, 0x26f7: 0x000c, 0x26f8: 0x000c, 0x26f9: 0x000c, 0x26fa: 0x000c, + // Block 0x9c, offset 0x2700 + 0x2700: 0x0001, 0x2701: 0x0001, 0x2702: 0x0001, 0x2703: 0x0001, 0x2704: 0x0001, 0x2705: 0x0001, + 0x2706: 0x0001, 0x2707: 0x0001, 0x2708: 0x0001, 0x2709: 0x0001, 0x270a: 0x0001, 0x270b: 0x0001, + 0x270c: 0x0001, 0x270d: 0x0001, 0x270e: 0x0001, 0x270f: 0x0001, 0x2710: 0x0001, 0x2711: 0x0001, + 0x2712: 0x0001, 0x2713: 0x0001, 0x2714: 0x0001, 0x2715: 0x0001, 0x2716: 0x0001, 0x2717: 0x0001, + 0x2718: 0x0001, 0x2719: 0x0001, 0x271a: 0x0001, 0x271b: 0x0001, 0x271c: 0x0001, 0x271d: 0x0001, + 0x271e: 0x0001, 0x271f: 0x0001, 0x2720: 0x0001, 0x2721: 0x0001, 0x2722: 0x0001, 0x2723: 0x0001, + 0x2724: 0x0001, 0x2725: 0x0001, 0x2726: 0x0001, 0x2727: 0x0001, 0x2728: 0x0001, 0x2729: 0x0001, + 0x272a: 0x0001, 0x272b: 0x0001, 0x272c: 0x0001, 0x272d: 0x0001, 0x272e: 0x0001, 0x272f: 0x0001, + 0x2730: 0x0001, 0x2731: 0x0001, 0x2732: 0x0001, 0x2733: 0x0001, 0x2734: 0x0001, 0x2735: 0x0001, + 0x2736: 0x0001, 0x2737: 0x0001, 0x2738: 0x0001, 0x2739: 0x0001, 0x273a: 0x0001, 0x273b: 0x0001, + 0x273c: 0x0001, 0x273d: 0x0001, 0x273e: 0x0001, 0x273f: 0x0001, + // Block 0x9d, offset 0x2740 + 0x2740: 0x0001, 0x2741: 0x0001, 0x2742: 0x0001, 0x2743: 0x0001, 0x2744: 0x0001, 0x2745: 0x0001, + 0x2746: 0x0001, 0x2747: 0x0001, 0x2748: 0x0001, 0x2749: 0x0001, 0x274a: 0x0001, 0x274b: 0x0001, + 0x274c: 0x0001, 0x274d: 0x0001, 0x274e: 0x0001, 0x274f: 0x0001, 0x2750: 0x0001, 0x2751: 0x0001, + 0x2752: 0x0001, 0x2753: 0x0001, 0x2754: 0x0001, 0x2755: 0x0001, 0x2756: 0x0001, 0x2757: 0x0001, + 0x2758: 0x0001, 0x2759: 0x0001, 0x275a: 0x0001, 0x275b: 0x0001, 0x275c: 0x0001, 0x275d: 0x0001, + 0x275e: 0x0001, 0x275f: 0x000a, 0x2760: 0x0001, 0x2761: 0x0001, 0x2762: 0x0001, 0x2763: 0x0001, + 0x2764: 0x0001, 0x2765: 0x0001, 0x2766: 0x0001, 0x2767: 0x0001, 0x2768: 0x0001, 0x2769: 0x0001, + 0x276a: 0x0001, 0x276b: 0x0001, 0x276c: 0x0001, 0x276d: 0x0001, 0x276e: 0x0001, 0x276f: 0x0001, + 0x2770: 0x0001, 0x2771: 0x0001, 0x2772: 0x0001, 0x2773: 0x0001, 0x2774: 0x0001, 0x2775: 0x0001, + 0x2776: 0x0001, 0x2777: 0x0001, 0x2778: 0x0001, 0x2779: 0x0001, 0x277a: 0x0001, 0x277b: 0x0001, + 0x277c: 0x0001, 0x277d: 0x0001, 0x277e: 0x0001, 0x277f: 0x0001, + // Block 0x9e, offset 0x2780 + 0x2780: 0x0001, 0x2781: 0x000c, 0x2782: 0x000c, 0x2783: 0x000c, 0x2784: 0x0001, 0x2785: 0x000c, + 0x2786: 0x000c, 0x2787: 0x0001, 0x2788: 0x0001, 0x2789: 0x0001, 0x278a: 0x0001, 0x278b: 0x0001, + 0x278c: 0x000c, 0x278d: 0x000c, 0x278e: 0x000c, 0x278f: 0x000c, 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: 0x000c, 0x27b9: 0x000c, 0x27ba: 0x000c, 0x27bb: 0x0001, + 0x27bc: 0x0001, 0x27bd: 0x0001, 0x27be: 0x0001, 0x27bf: 0x000c, + // 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: 0x0001, 0x27e0: 0x0001, 0x27e1: 0x0001, 0x27e2: 0x0001, 0x27e3: 0x0001, + 0x27e4: 0x0001, 0x27e5: 0x000c, 0x27e6: 0x000c, 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: 0x0001, 0x2802: 0x0001, 0x2803: 0x0001, 0x2804: 0x0001, 0x2805: 0x0001, + 0x2806: 0x0001, 0x2807: 0x0001, 0x2808: 0x0001, 0x2809: 0x0001, 0x280a: 0x0001, 0x280b: 0x0001, + 0x280c: 0x0001, 0x280d: 0x0001, 0x280e: 0x0001, 0x280f: 0x0001, 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: 0x0001, 0x2839: 0x000a, 0x283a: 0x000a, 0x283b: 0x000a, + 0x283c: 0x000a, 0x283d: 0x000a, 0x283e: 0x000a, 0x283f: 0x000a, + // 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: 0x0005, 0x2861: 0x0005, 0x2862: 0x0005, 0x2863: 0x0005, + 0x2864: 0x0005, 0x2865: 0x0005, 0x2866: 0x0005, 0x2867: 0x0005, 0x2868: 0x0005, 0x2869: 0x0005, + 0x286a: 0x0005, 0x286b: 0x0005, 0x286c: 0x0005, 0x286d: 0x0005, 0x286e: 0x0005, 0x286f: 0x0005, + 0x2870: 0x0005, 0x2871: 0x0005, 0x2872: 0x0005, 0x2873: 0x0005, 0x2874: 0x0005, 0x2875: 0x0005, + 0x2876: 0x0005, 0x2877: 0x0005, 0x2878: 0x0005, 0x2879: 0x0005, 0x287a: 0x0005, 0x287b: 0x0005, + 0x287c: 0x0005, 0x287d: 0x0005, 0x287e: 0x0005, 0x287f: 0x0001, + // Block 0xa2, offset 0x2880 + 0x2881: 0x000c, + 0x28b8: 0x000c, 0x28b9: 0x000c, 0x28ba: 0x000c, 0x28bb: 0x000c, + 0x28bc: 0x000c, 0x28bd: 0x000c, 0x28be: 0x000c, 0x28bf: 0x000c, + // Block 0xa3, offset 0x28c0 + 0x28c0: 0x000c, 0x28c1: 0x000c, 0x28c2: 0x000c, 0x28c3: 0x000c, 0x28c4: 0x000c, 0x28c5: 0x000c, + 0x28c6: 0x000c, + 0x28d2: 0x000a, 0x28d3: 0x000a, 0x28d4: 0x000a, 0x28d5: 0x000a, 0x28d6: 0x000a, 0x28d7: 0x000a, + 0x28d8: 0x000a, 0x28d9: 0x000a, 0x28da: 0x000a, 0x28db: 0x000a, 0x28dc: 0x000a, 0x28dd: 0x000a, + 0x28de: 0x000a, 0x28df: 0x000a, 0x28e0: 0x000a, 0x28e1: 0x000a, 0x28e2: 0x000a, 0x28e3: 0x000a, + 0x28e4: 0x000a, 0x28e5: 0x000a, + 0x28ff: 0x000c, + // Block 0xa4, offset 0x2900 + 0x2900: 0x000c, 0x2901: 0x000c, + 0x2933: 0x000c, 0x2934: 0x000c, 0x2935: 0x000c, + 0x2936: 0x000c, 0x2939: 0x000c, 0x293a: 0x000c, + // Block 0xa5, offset 0x2940 + 0x2940: 0x000c, 0x2941: 0x000c, 0x2942: 0x000c, + 0x2967: 0x000c, 0x2968: 0x000c, 0x2969: 0x000c, + 0x296a: 0x000c, 0x296b: 0x000c, 0x296d: 0x000c, 0x296e: 0x000c, 0x296f: 0x000c, + 0x2970: 0x000c, 0x2971: 0x000c, 0x2972: 0x000c, 0x2973: 0x000c, 0x2974: 0x000c, + // Block 0xa6, offset 0x2980 + 0x29b3: 0x000c, + // Block 0xa7, offset 0x29c0 + 0x29c0: 0x000c, 0x29c1: 0x000c, + 0x29f6: 0x000c, 0x29f7: 0x000c, 0x29f8: 0x000c, 0x29f9: 0x000c, 0x29fa: 0x000c, 0x29fb: 0x000c, + 0x29fc: 0x000c, 0x29fd: 0x000c, 0x29fe: 0x000c, + // Block 0xa8, offset 0x2a00 + 0x2a0a: 0x000c, 0x2a0b: 0x000c, + 0x2a0c: 0x000c, + // Block 0xa9, offset 0x2a40 + 0x2a6f: 0x000c, + 0x2a70: 0x000c, 0x2a71: 0x000c, 0x2a74: 0x000c, + 0x2a76: 0x000c, 0x2a77: 0x000c, + 0x2a7e: 0x000c, + // Block 0xaa, offset 0x2a80 + 0x2a9f: 0x000c, 0x2aa3: 0x000c, + 0x2aa4: 0x000c, 0x2aa5: 0x000c, 0x2aa6: 0x000c, 0x2aa7: 0x000c, 0x2aa8: 0x000c, 0x2aa9: 0x000c, + 0x2aaa: 0x000c, + // Block 0xab, offset 0x2ac0 + 0x2ac0: 0x000c, 0x2ac1: 0x000c, + 0x2afc: 0x000c, + // Block 0xac, offset 0x2b00 + 0x2b00: 0x000c, + 0x2b26: 0x000c, 0x2b27: 0x000c, 0x2b28: 0x000c, 0x2b29: 0x000c, + 0x2b2a: 0x000c, 0x2b2b: 0x000c, 0x2b2c: 0x000c, + 0x2b30: 0x000c, 0x2b31: 0x000c, 0x2b32: 0x000c, 0x2b33: 0x000c, 0x2b34: 0x000c, + // Block 0xad, offset 0x2b40 + 0x2b78: 0x000c, 0x2b79: 0x000c, 0x2b7a: 0x000c, 0x2b7b: 0x000c, + 0x2b7c: 0x000c, 0x2b7d: 0x000c, 0x2b7e: 0x000c, 0x2b7f: 0x000c, + // Block 0xae, offset 0x2b80 + 0x2b82: 0x000c, 0x2b83: 0x000c, 0x2b84: 0x000c, + 0x2b86: 0x000c, + // Block 0xaf, offset 0x2bc0 + 0x2bf3: 0x000c, 0x2bf4: 0x000c, 0x2bf5: 0x000c, + 0x2bf6: 0x000c, 0x2bf7: 0x000c, 0x2bf8: 0x000c, 0x2bfa: 0x000c, + 0x2bff: 0x000c, + // Block 0xb0, offset 0x2c00 + 0x2c00: 0x000c, 0x2c02: 0x000c, 0x2c03: 0x000c, + // Block 0xb1, offset 0x2c40 + 0x2c72: 0x000c, 0x2c73: 0x000c, 0x2c74: 0x000c, 0x2c75: 0x000c, + 0x2c7c: 0x000c, 0x2c7d: 0x000c, 0x2c7f: 0x000c, + // Block 0xb2, offset 0x2c80 + 0x2c80: 0x000c, + 0x2c9c: 0x000c, 0x2c9d: 0x000c, + // Block 0xb3, offset 0x2cc0 + 0x2cf3: 0x000c, 0x2cf4: 0x000c, 0x2cf5: 0x000c, + 0x2cf6: 0x000c, 0x2cf7: 0x000c, 0x2cf8: 0x000c, 0x2cf9: 0x000c, 0x2cfa: 0x000c, + 0x2cfd: 0x000c, 0x2cff: 0x000c, + // Block 0xb4, offset 0x2d00 + 0x2d00: 0x000c, + 0x2d20: 0x000a, 0x2d21: 0x000a, 0x2d22: 0x000a, 0x2d23: 0x000a, + 0x2d24: 0x000a, 0x2d25: 0x000a, 0x2d26: 0x000a, 0x2d27: 0x000a, 0x2d28: 0x000a, 0x2d29: 0x000a, + 0x2d2a: 0x000a, 0x2d2b: 0x000a, 0x2d2c: 0x000a, + // Block 0xb5, offset 0x2d40 + 0x2d6b: 0x000c, 0x2d6d: 0x000c, + 0x2d70: 0x000c, 0x2d71: 0x000c, 0x2d72: 0x000c, 0x2d73: 0x000c, 0x2d74: 0x000c, 0x2d75: 0x000c, + 0x2d77: 0x000c, + // Block 0xb6, offset 0x2d80 + 0x2d9d: 0x000c, + 0x2d9e: 0x000c, 0x2d9f: 0x000c, 0x2da2: 0x000c, 0x2da3: 0x000c, + 0x2da4: 0x000c, 0x2da5: 0x000c, 0x2da7: 0x000c, 0x2da8: 0x000c, 0x2da9: 0x000c, + 0x2daa: 0x000c, 0x2dab: 0x000c, + // Block 0xb7, offset 0x2dc0 + 0x2dc1: 0x000c, 0x2dc2: 0x000c, 0x2dc3: 0x000c, 0x2dc4: 0x000c, 0x2dc5: 0x000c, + 0x2dc6: 0x000c, 0x2dc9: 0x000c, 0x2dca: 0x000c, + 0x2df3: 0x000c, 0x2df4: 0x000c, 0x2df5: 0x000c, + 0x2df6: 0x000c, 0x2df7: 0x000c, 0x2df8: 0x000c, 0x2dfb: 0x000c, + 0x2dfc: 0x000c, 0x2dfd: 0x000c, 0x2dfe: 0x000c, + // Block 0xb8, offset 0x2e00 + 0x2e07: 0x000c, + 0x2e11: 0x000c, + 0x2e12: 0x000c, 0x2e13: 0x000c, 0x2e14: 0x000c, 0x2e15: 0x000c, 0x2e16: 0x000c, + 0x2e19: 0x000c, 0x2e1a: 0x000c, 0x2e1b: 0x000c, + // Block 0xb9, offset 0x2e40 + 0x2e4a: 0x000c, 0x2e4b: 0x000c, + 0x2e4c: 0x000c, 0x2e4d: 0x000c, 0x2e4e: 0x000c, 0x2e4f: 0x000c, 0x2e50: 0x000c, 0x2e51: 0x000c, + 0x2e52: 0x000c, 0x2e53: 0x000c, 0x2e54: 0x000c, 0x2e55: 0x000c, 0x2e56: 0x000c, + 0x2e58: 0x000c, 0x2e59: 0x000c, + // Block 0xba, offset 0x2e80 + 0x2eb0: 0x000c, 0x2eb1: 0x000c, 0x2eb2: 0x000c, 0x2eb3: 0x000c, 0x2eb4: 0x000c, 0x2eb5: 0x000c, + 0x2eb6: 0x000c, 0x2eb8: 0x000c, 0x2eb9: 0x000c, 0x2eba: 0x000c, 0x2ebb: 0x000c, + 0x2ebc: 0x000c, 0x2ebd: 0x000c, + // Block 0xbb, offset 0x2ec0 + 0x2ed2: 0x000c, 0x2ed3: 0x000c, 0x2ed4: 0x000c, 0x2ed5: 0x000c, 0x2ed6: 0x000c, 0x2ed7: 0x000c, + 0x2ed8: 0x000c, 0x2ed9: 0x000c, 0x2eda: 0x000c, 0x2edb: 0x000c, 0x2edc: 0x000c, 0x2edd: 0x000c, + 0x2ede: 0x000c, 0x2edf: 0x000c, 0x2ee0: 0x000c, 0x2ee1: 0x000c, 0x2ee2: 0x000c, 0x2ee3: 0x000c, + 0x2ee4: 0x000c, 0x2ee5: 0x000c, 0x2ee6: 0x000c, 0x2ee7: 0x000c, + 0x2eea: 0x000c, 0x2eeb: 0x000c, 0x2eec: 0x000c, 0x2eed: 0x000c, 0x2eee: 0x000c, 0x2eef: 0x000c, + 0x2ef0: 0x000c, 0x2ef2: 0x000c, 0x2ef3: 0x000c, 0x2ef5: 0x000c, + 0x2ef6: 0x000c, + // Block 0xbc, offset 0x2f00 + 0x2f31: 0x000c, 0x2f32: 0x000c, 0x2f33: 0x000c, 0x2f34: 0x000c, 0x2f35: 0x000c, + 0x2f36: 0x000c, 0x2f3a: 0x000c, + 0x2f3c: 0x000c, 0x2f3d: 0x000c, 0x2f3f: 0x000c, + // Block 0xbd, offset 0x2f40 + 0x2f40: 0x000c, 0x2f41: 0x000c, 0x2f42: 0x000c, 0x2f43: 0x000c, 0x2f44: 0x000c, 0x2f45: 0x000c, + 0x2f47: 0x000c, + // Block 0xbe, offset 0x2f80 + 0x2fb0: 0x000c, 0x2fb1: 0x000c, 0x2fb2: 0x000c, 0x2fb3: 0x000c, 0x2fb4: 0x000c, + // Block 0xbf, offset 0x2fc0 + 0x2ff0: 0x000c, 0x2ff1: 0x000c, 0x2ff2: 0x000c, 0x2ff3: 0x000c, 0x2ff4: 0x000c, 0x2ff5: 0x000c, + 0x2ff6: 0x000c, + // Block 0xc0, offset 0x3000 + 0x300f: 0x000c, 0x3010: 0x000c, 0x3011: 0x000c, + 0x3012: 0x000c, + // Block 0xc1, offset 0x3040 + 0x305d: 0x000c, + 0x305e: 0x000c, 0x3060: 0x000b, 0x3061: 0x000b, 0x3062: 0x000b, 0x3063: 0x000b, + // Block 0xc2, offset 0x3080 + 0x30a7: 0x000c, 0x30a8: 0x000c, 0x30a9: 0x000c, + 0x30b3: 0x000b, 0x30b4: 0x000b, 0x30b5: 0x000b, + 0x30b6: 0x000b, 0x30b7: 0x000b, 0x30b8: 0x000b, 0x30b9: 0x000b, 0x30ba: 0x000b, 0x30bb: 0x000c, + 0x30bc: 0x000c, 0x30bd: 0x000c, 0x30be: 0x000c, 0x30bf: 0x000c, + // Block 0xc3, offset 0x30c0 + 0x30c0: 0x000c, 0x30c1: 0x000c, 0x30c2: 0x000c, 0x30c5: 0x000c, + 0x30c6: 0x000c, 0x30c7: 0x000c, 0x30c8: 0x000c, 0x30c9: 0x000c, 0x30ca: 0x000c, 0x30cb: 0x000c, + 0x30ea: 0x000c, 0x30eb: 0x000c, 0x30ec: 0x000c, 0x30ed: 0x000c, + // Block 0xc4, offset 0x3100 + 0x3100: 0x000a, 0x3101: 0x000a, 0x3102: 0x000c, 0x3103: 0x000c, 0x3104: 0x000c, 0x3105: 0x000a, + // Block 0xc5, offset 0x3140 + 0x3140: 0x000a, 0x3141: 0x000a, 0x3142: 0x000a, 0x3143: 0x000a, 0x3144: 0x000a, 0x3145: 0x000a, + 0x3146: 0x000a, 0x3147: 0x000a, 0x3148: 0x000a, 0x3149: 0x000a, 0x314a: 0x000a, 0x314b: 0x000a, + 0x314c: 0x000a, 0x314d: 0x000a, 0x314e: 0x000a, 0x314f: 0x000a, 0x3150: 0x000a, 0x3151: 0x000a, + 0x3152: 0x000a, 0x3153: 0x000a, 0x3154: 0x000a, 0x3155: 0x000a, 0x3156: 0x000a, + // Block 0xc6, offset 0x3180 + 0x319b: 0x000a, + // Block 0xc7, offset 0x31c0 + 0x31d5: 0x000a, + // Block 0xc8, offset 0x3200 + 0x320f: 0x000a, + // Block 0xc9, offset 0x3240 + 0x3249: 0x000a, + // Block 0xca, offset 0x3280 + 0x3283: 0x000a, + 0x328e: 0x0002, 0x328f: 0x0002, 0x3290: 0x0002, 0x3291: 0x0002, + 0x3292: 0x0002, 0x3293: 0x0002, 0x3294: 0x0002, 0x3295: 0x0002, 0x3296: 0x0002, 0x3297: 0x0002, + 0x3298: 0x0002, 0x3299: 0x0002, 0x329a: 0x0002, 0x329b: 0x0002, 0x329c: 0x0002, 0x329d: 0x0002, + 0x329e: 0x0002, 0x329f: 0x0002, 0x32a0: 0x0002, 0x32a1: 0x0002, 0x32a2: 0x0002, 0x32a3: 0x0002, + 0x32a4: 0x0002, 0x32a5: 0x0002, 0x32a6: 0x0002, 0x32a7: 0x0002, 0x32a8: 0x0002, 0x32a9: 0x0002, + 0x32aa: 0x0002, 0x32ab: 0x0002, 0x32ac: 0x0002, 0x32ad: 0x0002, 0x32ae: 0x0002, 0x32af: 0x0002, + 0x32b0: 0x0002, 0x32b1: 0x0002, 0x32b2: 0x0002, 0x32b3: 0x0002, 0x32b4: 0x0002, 0x32b5: 0x0002, + 0x32b6: 0x0002, 0x32b7: 0x0002, 0x32b8: 0x0002, 0x32b9: 0x0002, 0x32ba: 0x0002, 0x32bb: 0x0002, + 0x32bc: 0x0002, 0x32bd: 0x0002, 0x32be: 0x0002, 0x32bf: 0x0002, + // Block 0xcb, offset 0x32c0 + 0x32c0: 0x000c, 0x32c1: 0x000c, 0x32c2: 0x000c, 0x32c3: 0x000c, 0x32c4: 0x000c, 0x32c5: 0x000c, + 0x32c6: 0x000c, 0x32c7: 0x000c, 0x32c8: 0x000c, 0x32c9: 0x000c, 0x32ca: 0x000c, 0x32cb: 0x000c, + 0x32cc: 0x000c, 0x32cd: 0x000c, 0x32ce: 0x000c, 0x32cf: 0x000c, 0x32d0: 0x000c, 0x32d1: 0x000c, + 0x32d2: 0x000c, 0x32d3: 0x000c, 0x32d4: 0x000c, 0x32d5: 0x000c, 0x32d6: 0x000c, 0x32d7: 0x000c, + 0x32d8: 0x000c, 0x32d9: 0x000c, 0x32da: 0x000c, 0x32db: 0x000c, 0x32dc: 0x000c, 0x32dd: 0x000c, + 0x32de: 0x000c, 0x32df: 0x000c, 0x32e0: 0x000c, 0x32e1: 0x000c, 0x32e2: 0x000c, 0x32e3: 0x000c, + 0x32e4: 0x000c, 0x32e5: 0x000c, 0x32e6: 0x000c, 0x32e7: 0x000c, 0x32e8: 0x000c, 0x32e9: 0x000c, + 0x32ea: 0x000c, 0x32eb: 0x000c, 0x32ec: 0x000c, 0x32ed: 0x000c, 0x32ee: 0x000c, 0x32ef: 0x000c, + 0x32f0: 0x000c, 0x32f1: 0x000c, 0x32f2: 0x000c, 0x32f3: 0x000c, 0x32f4: 0x000c, 0x32f5: 0x000c, + 0x32f6: 0x000c, 0x32fb: 0x000c, + 0x32fc: 0x000c, 0x32fd: 0x000c, 0x32fe: 0x000c, 0x32ff: 0x000c, + // Block 0xcc, offset 0x3300 + 0x3300: 0x000c, 0x3301: 0x000c, 0x3302: 0x000c, 0x3303: 0x000c, 0x3304: 0x000c, 0x3305: 0x000c, + 0x3306: 0x000c, 0x3307: 0x000c, 0x3308: 0x000c, 0x3309: 0x000c, 0x330a: 0x000c, 0x330b: 0x000c, + 0x330c: 0x000c, 0x330d: 0x000c, 0x330e: 0x000c, 0x330f: 0x000c, 0x3310: 0x000c, 0x3311: 0x000c, + 0x3312: 0x000c, 0x3313: 0x000c, 0x3314: 0x000c, 0x3315: 0x000c, 0x3316: 0x000c, 0x3317: 0x000c, + 0x3318: 0x000c, 0x3319: 0x000c, 0x331a: 0x000c, 0x331b: 0x000c, 0x331c: 0x000c, 0x331d: 0x000c, + 0x331e: 0x000c, 0x331f: 0x000c, 0x3320: 0x000c, 0x3321: 0x000c, 0x3322: 0x000c, 0x3323: 0x000c, + 0x3324: 0x000c, 0x3325: 0x000c, 0x3326: 0x000c, 0x3327: 0x000c, 0x3328: 0x000c, 0x3329: 0x000c, + 0x332a: 0x000c, 0x332b: 0x000c, 0x332c: 0x000c, + 0x3335: 0x000c, + // Block 0xcd, offset 0x3340 + 0x3344: 0x000c, + 0x335b: 0x000c, 0x335c: 0x000c, 0x335d: 0x000c, + 0x335e: 0x000c, 0x335f: 0x000c, 0x3361: 0x000c, 0x3362: 0x000c, 0x3363: 0x000c, + 0x3364: 0x000c, 0x3365: 0x000c, 0x3366: 0x000c, 0x3367: 0x000c, 0x3368: 0x000c, 0x3369: 0x000c, + 0x336a: 0x000c, 0x336b: 0x000c, 0x336c: 0x000c, 0x336d: 0x000c, 0x336e: 0x000c, 0x336f: 0x000c, + // Block 0xce, offset 0x3380 + 0x3380: 0x000c, 0x3381: 0x000c, 0x3382: 0x000c, 0x3383: 0x000c, 0x3384: 0x000c, 0x3385: 0x000c, + 0x3386: 0x000c, 0x3388: 0x000c, 0x3389: 0x000c, 0x338a: 0x000c, 0x338b: 0x000c, + 0x338c: 0x000c, 0x338d: 0x000c, 0x338e: 0x000c, 0x338f: 0x000c, 0x3390: 0x000c, 0x3391: 0x000c, + 0x3392: 0x000c, 0x3393: 0x000c, 0x3394: 0x000c, 0x3395: 0x000c, 0x3396: 0x000c, 0x3397: 0x000c, + 0x3398: 0x000c, 0x339b: 0x000c, 0x339c: 0x000c, 0x339d: 0x000c, + 0x339e: 0x000c, 0x339f: 0x000c, 0x33a0: 0x000c, 0x33a1: 0x000c, 0x33a3: 0x000c, + 0x33a4: 0x000c, 0x33a6: 0x000c, 0x33a7: 0x000c, 0x33a8: 0x000c, 0x33a9: 0x000c, + 0x33aa: 0x000c, + // Block 0xcf, offset 0x33c0 + 0x33c0: 0x0001, 0x33c1: 0x0001, 0x33c2: 0x0001, 0x33c3: 0x0001, 0x33c4: 0x0001, 0x33c5: 0x0001, + 0x33c6: 0x0001, 0x33c7: 0x0001, 0x33c8: 0x0001, 0x33c9: 0x0001, 0x33ca: 0x0001, 0x33cb: 0x0001, + 0x33cc: 0x0001, 0x33cd: 0x0001, 0x33ce: 0x0001, 0x33cf: 0x0001, 0x33d0: 0x000c, 0x33d1: 0x000c, + 0x33d2: 0x000c, 0x33d3: 0x000c, 0x33d4: 0x000c, 0x33d5: 0x000c, 0x33d6: 0x000c, 0x33d7: 0x0001, + 0x33d8: 0x0001, 0x33d9: 0x0001, 0x33da: 0x0001, 0x33db: 0x0001, 0x33dc: 0x0001, 0x33dd: 0x0001, + 0x33de: 0x0001, 0x33df: 0x0001, 0x33e0: 0x0001, 0x33e1: 0x0001, 0x33e2: 0x0001, 0x33e3: 0x0001, + 0x33e4: 0x0001, 0x33e5: 0x0001, 0x33e6: 0x0001, 0x33e7: 0x0001, 0x33e8: 0x0001, 0x33e9: 0x0001, + 0x33ea: 0x0001, 0x33eb: 0x0001, 0x33ec: 0x0001, 0x33ed: 0x0001, 0x33ee: 0x0001, 0x33ef: 0x0001, + 0x33f0: 0x0001, 0x33f1: 0x0001, 0x33f2: 0x0001, 0x33f3: 0x0001, 0x33f4: 0x0001, 0x33f5: 0x0001, + 0x33f6: 0x0001, 0x33f7: 0x0001, 0x33f8: 0x0001, 0x33f9: 0x0001, 0x33fa: 0x0001, 0x33fb: 0x0001, + 0x33fc: 0x0001, 0x33fd: 0x0001, 0x33fe: 0x0001, 0x33ff: 0x0001, + // Block 0xd0, offset 0x3400 + 0x3400: 0x0001, 0x3401: 0x0001, 0x3402: 0x0001, 0x3403: 0x0001, 0x3404: 0x000c, 0x3405: 0x000c, + 0x3406: 0x000c, 0x3407: 0x000c, 0x3408: 0x000c, 0x3409: 0x000c, 0x340a: 0x000c, 0x340b: 0x0001, + 0x340c: 0x0001, 0x340d: 0x0001, 0x340e: 0x0001, 0x340f: 0x0001, 0x3410: 0x0001, 0x3411: 0x0001, + 0x3412: 0x0001, 0x3413: 0x0001, 0x3414: 0x0001, 0x3415: 0x0001, 0x3416: 0x0001, 0x3417: 0x0001, + 0x3418: 0x0001, 0x3419: 0x0001, 0x341a: 0x0001, 0x341b: 0x0001, 0x341c: 0x0001, 0x341d: 0x0001, + 0x341e: 0x0001, 0x341f: 0x0001, 0x3420: 0x0001, 0x3421: 0x0001, 0x3422: 0x0001, 0x3423: 0x0001, + 0x3424: 0x0001, 0x3425: 0x0001, 0x3426: 0x0001, 0x3427: 0x0001, 0x3428: 0x0001, 0x3429: 0x0001, + 0x342a: 0x0001, 0x342b: 0x0001, 0x342c: 0x0001, 0x342d: 0x0001, 0x342e: 0x0001, 0x342f: 0x0001, + 0x3430: 0x0001, 0x3431: 0x0001, 0x3432: 0x0001, 0x3433: 0x0001, 0x3434: 0x0001, 0x3435: 0x0001, + 0x3436: 0x0001, 0x3437: 0x0001, 0x3438: 0x0001, 0x3439: 0x0001, 0x343a: 0x0001, 0x343b: 0x0001, + 0x343c: 0x0001, 0x343d: 0x0001, 0x343e: 0x0001, 0x343f: 0x0001, + // Block 0xd1, offset 0x3440 + 0x3440: 0x000d, 0x3441: 0x000d, 0x3442: 0x000d, 0x3443: 0x000d, 0x3444: 0x000d, 0x3445: 0x000d, + 0x3446: 0x000d, 0x3447: 0x000d, 0x3448: 0x000d, 0x3449: 0x000d, 0x344a: 0x000d, 0x344b: 0x000d, + 0x344c: 0x000d, 0x344d: 0x000d, 0x344e: 0x000d, 0x344f: 0x000d, 0x3450: 0x000d, 0x3451: 0x000d, + 0x3452: 0x000d, 0x3453: 0x000d, 0x3454: 0x000d, 0x3455: 0x000d, 0x3456: 0x000d, 0x3457: 0x000d, + 0x3458: 0x000d, 0x3459: 0x000d, 0x345a: 0x000d, 0x345b: 0x000d, 0x345c: 0x000d, 0x345d: 0x000d, + 0x345e: 0x000d, 0x345f: 0x000d, 0x3460: 0x000d, 0x3461: 0x000d, 0x3462: 0x000d, 0x3463: 0x000d, + 0x3464: 0x000d, 0x3465: 0x000d, 0x3466: 0x000d, 0x3467: 0x000d, 0x3468: 0x000d, 0x3469: 0x000d, + 0x346a: 0x000d, 0x346b: 0x000d, 0x346c: 0x000d, 0x346d: 0x000d, 0x346e: 0x000d, 0x346f: 0x000d, + 0x3470: 0x000a, 0x3471: 0x000a, 0x3472: 0x000d, 0x3473: 0x000d, 0x3474: 0x000d, 0x3475: 0x000d, + 0x3476: 0x000d, 0x3477: 0x000d, 0x3478: 0x000d, 0x3479: 0x000d, 0x347a: 0x000d, 0x347b: 0x000d, + 0x347c: 0x000d, 0x347d: 0x000d, 0x347e: 0x000d, 0x347f: 0x000d, + // Block 0xd2, offset 0x3480 + 0x3480: 0x000a, 0x3481: 0x000a, 0x3482: 0x000a, 0x3483: 0x000a, 0x3484: 0x000a, 0x3485: 0x000a, + 0x3486: 0x000a, 0x3487: 0x000a, 0x3488: 0x000a, 0x3489: 0x000a, 0x348a: 0x000a, 0x348b: 0x000a, + 0x348c: 0x000a, 0x348d: 0x000a, 0x348e: 0x000a, 0x348f: 0x000a, 0x3490: 0x000a, 0x3491: 0x000a, + 0x3492: 0x000a, 0x3493: 0x000a, 0x3494: 0x000a, 0x3495: 0x000a, 0x3496: 0x000a, 0x3497: 0x000a, + 0x3498: 0x000a, 0x3499: 0x000a, 0x349a: 0x000a, 0x349b: 0x000a, 0x349c: 0x000a, 0x349d: 0x000a, + 0x349e: 0x000a, 0x349f: 0x000a, 0x34a0: 0x000a, 0x34a1: 0x000a, 0x34a2: 0x000a, 0x34a3: 0x000a, + 0x34a4: 0x000a, 0x34a5: 0x000a, 0x34a6: 0x000a, 0x34a7: 0x000a, 0x34a8: 0x000a, 0x34a9: 0x000a, + 0x34aa: 0x000a, 0x34ab: 0x000a, + 0x34b0: 0x000a, 0x34b1: 0x000a, 0x34b2: 0x000a, 0x34b3: 0x000a, 0x34b4: 0x000a, 0x34b5: 0x000a, + 0x34b6: 0x000a, 0x34b7: 0x000a, 0x34b8: 0x000a, 0x34b9: 0x000a, 0x34ba: 0x000a, 0x34bb: 0x000a, + 0x34bc: 0x000a, 0x34bd: 0x000a, 0x34be: 0x000a, 0x34bf: 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, + 0x34e0: 0x000a, 0x34e1: 0x000a, 0x34e2: 0x000a, 0x34e3: 0x000a, + 0x34e4: 0x000a, 0x34e5: 0x000a, 0x34e6: 0x000a, 0x34e7: 0x000a, 0x34e8: 0x000a, 0x34e9: 0x000a, + 0x34ea: 0x000a, 0x34eb: 0x000a, 0x34ec: 0x000a, 0x34ed: 0x000a, 0x34ee: 0x000a, + 0x34f1: 0x000a, 0x34f2: 0x000a, 0x34f3: 0x000a, 0x34f4: 0x000a, 0x34f5: 0x000a, + 0x34f6: 0x000a, 0x34f7: 0x000a, 0x34f8: 0x000a, 0x34f9: 0x000a, 0x34fa: 0x000a, 0x34fb: 0x000a, + 0x34fc: 0x000a, 0x34fd: 0x000a, 0x34fe: 0x000a, 0x34ff: 0x000a, + // Block 0xd4, offset 0x3500 + 0x3501: 0x000a, 0x3502: 0x000a, 0x3503: 0x000a, 0x3504: 0x000a, 0x3505: 0x000a, + 0x3506: 0x000a, 0x3507: 0x000a, 0x3508: 0x000a, 0x3509: 0x000a, 0x350a: 0x000a, 0x350b: 0x000a, + 0x350c: 0x000a, 0x350d: 0x000a, 0x350e: 0x000a, 0x350f: 0x000a, 0x3511: 0x000a, + 0x3512: 0x000a, 0x3513: 0x000a, 0x3514: 0x000a, 0x3515: 0x000a, 0x3516: 0x000a, 0x3517: 0x000a, + 0x3518: 0x000a, 0x3519: 0x000a, 0x351a: 0x000a, 0x351b: 0x000a, 0x351c: 0x000a, 0x351d: 0x000a, + 0x351e: 0x000a, 0x351f: 0x000a, 0x3520: 0x000a, 0x3521: 0x000a, 0x3522: 0x000a, 0x3523: 0x000a, + 0x3524: 0x000a, 0x3525: 0x000a, 0x3526: 0x000a, 0x3527: 0x000a, 0x3528: 0x000a, 0x3529: 0x000a, + 0x352a: 0x000a, 0x352b: 0x000a, 0x352c: 0x000a, 0x352d: 0x000a, 0x352e: 0x000a, 0x352f: 0x000a, + 0x3530: 0x000a, 0x3531: 0x000a, 0x3532: 0x000a, 0x3533: 0x000a, 0x3534: 0x000a, 0x3535: 0x000a, + // Block 0xd5, offset 0x3540 + 0x3540: 0x0002, 0x3541: 0x0002, 0x3542: 0x0002, 0x3543: 0x0002, 0x3544: 0x0002, 0x3545: 0x0002, + 0x3546: 0x0002, 0x3547: 0x0002, 0x3548: 0x0002, 0x3549: 0x0002, 0x354a: 0x0002, 0x354b: 0x000a, + 0x354c: 0x000a, + // Block 0xd6, offset 0x3580 + 0x35aa: 0x000a, 0x35ab: 0x000a, + // Block 0xd7, offset 0x35c0 + 0x35e0: 0x000a, 0x35e1: 0x000a, 0x35e2: 0x000a, 0x35e3: 0x000a, + 0x35e4: 0x000a, 0x35e5: 0x000a, + // Block 0xd8, offset 0x3600 + 0x3600: 0x000a, 0x3601: 0x000a, 0x3602: 0x000a, 0x3603: 0x000a, 0x3604: 0x000a, 0x3605: 0x000a, + 0x3606: 0x000a, 0x3607: 0x000a, 0x3608: 0x000a, 0x3609: 0x000a, 0x360a: 0x000a, 0x360b: 0x000a, + 0x360c: 0x000a, 0x360d: 0x000a, 0x360e: 0x000a, 0x360f: 0x000a, 0x3610: 0x000a, 0x3611: 0x000a, + 0x3612: 0x000a, 0x3613: 0x000a, 0x3614: 0x000a, + 0x3620: 0x000a, 0x3621: 0x000a, 0x3622: 0x000a, 0x3623: 0x000a, + 0x3624: 0x000a, 0x3625: 0x000a, 0x3626: 0x000a, 0x3627: 0x000a, 0x3628: 0x000a, 0x3629: 0x000a, + 0x362a: 0x000a, 0x362b: 0x000a, 0x362c: 0x000a, + 0x3630: 0x000a, 0x3631: 0x000a, 0x3632: 0x000a, 0x3633: 0x000a, 0x3634: 0x000a, 0x3635: 0x000a, + 0x3636: 0x000a, 0x3637: 0x000a, 0x3638: 0x000a, + // Block 0xd9, offset 0x3640 + 0x3640: 0x000a, 0x3641: 0x000a, 0x3642: 0x000a, 0x3643: 0x000a, 0x3644: 0x000a, 0x3645: 0x000a, + 0x3646: 0x000a, 0x3647: 0x000a, 0x3648: 0x000a, 0x3649: 0x000a, 0x364a: 0x000a, 0x364b: 0x000a, + 0x364c: 0x000a, 0x364d: 0x000a, 0x364e: 0x000a, 0x364f: 0x000a, 0x3650: 0x000a, 0x3651: 0x000a, + 0x3652: 0x000a, 0x3653: 0x000a, 0x3654: 0x000a, + // Block 0xda, offset 0x3680 + 0x3680: 0x000a, 0x3681: 0x000a, 0x3682: 0x000a, 0x3683: 0x000a, 0x3684: 0x000a, 0x3685: 0x000a, + 0x3686: 0x000a, 0x3687: 0x000a, 0x3688: 0x000a, 0x3689: 0x000a, 0x368a: 0x000a, 0x368b: 0x000a, + 0x3690: 0x000a, 0x3691: 0x000a, + 0x3692: 0x000a, 0x3693: 0x000a, 0x3694: 0x000a, 0x3695: 0x000a, 0x3696: 0x000a, 0x3697: 0x000a, + 0x3698: 0x000a, 0x3699: 0x000a, 0x369a: 0x000a, 0x369b: 0x000a, 0x369c: 0x000a, 0x369d: 0x000a, + 0x369e: 0x000a, 0x369f: 0x000a, 0x36a0: 0x000a, 0x36a1: 0x000a, 0x36a2: 0x000a, 0x36a3: 0x000a, + 0x36a4: 0x000a, 0x36a5: 0x000a, 0x36a6: 0x000a, 0x36a7: 0x000a, 0x36a8: 0x000a, 0x36a9: 0x000a, + 0x36aa: 0x000a, 0x36ab: 0x000a, 0x36ac: 0x000a, 0x36ad: 0x000a, 0x36ae: 0x000a, 0x36af: 0x000a, + 0x36b0: 0x000a, 0x36b1: 0x000a, 0x36b2: 0x000a, 0x36b3: 0x000a, 0x36b4: 0x000a, 0x36b5: 0x000a, + 0x36b6: 0x000a, 0x36b7: 0x000a, 0x36b8: 0x000a, 0x36b9: 0x000a, 0x36ba: 0x000a, 0x36bb: 0x000a, + 0x36bc: 0x000a, 0x36bd: 0x000a, 0x36be: 0x000a, 0x36bf: 0x000a, + // Block 0xdb, offset 0x36c0 + 0x36c0: 0x000a, 0x36c1: 0x000a, 0x36c2: 0x000a, 0x36c3: 0x000a, 0x36c4: 0x000a, 0x36c5: 0x000a, + 0x36c6: 0x000a, 0x36c7: 0x000a, + 0x36d0: 0x000a, 0x36d1: 0x000a, + 0x36d2: 0x000a, 0x36d3: 0x000a, 0x36d4: 0x000a, 0x36d5: 0x000a, 0x36d6: 0x000a, 0x36d7: 0x000a, + 0x36d8: 0x000a, 0x36d9: 0x000a, + 0x36e0: 0x000a, 0x36e1: 0x000a, 0x36e2: 0x000a, 0x36e3: 0x000a, + 0x36e4: 0x000a, 0x36e5: 0x000a, 0x36e6: 0x000a, 0x36e7: 0x000a, 0x36e8: 0x000a, 0x36e9: 0x000a, + 0x36ea: 0x000a, 0x36eb: 0x000a, 0x36ec: 0x000a, 0x36ed: 0x000a, 0x36ee: 0x000a, 0x36ef: 0x000a, + 0x36f0: 0x000a, 0x36f1: 0x000a, 0x36f2: 0x000a, 0x36f3: 0x000a, 0x36f4: 0x000a, 0x36f5: 0x000a, + 0x36f6: 0x000a, 0x36f7: 0x000a, 0x36f8: 0x000a, 0x36f9: 0x000a, 0x36fa: 0x000a, 0x36fb: 0x000a, + 0x36fc: 0x000a, 0x36fd: 0x000a, 0x36fe: 0x000a, 0x36ff: 0x000a, + // Block 0xdc, offset 0x3700 + 0x3700: 0x000a, 0x3701: 0x000a, 0x3702: 0x000a, 0x3703: 0x000a, 0x3704: 0x000a, 0x3705: 0x000a, + 0x3706: 0x000a, 0x3707: 0x000a, + 0x3710: 0x000a, 0x3711: 0x000a, + 0x3712: 0x000a, 0x3713: 0x000a, 0x3714: 0x000a, 0x3715: 0x000a, 0x3716: 0x000a, 0x3717: 0x000a, + 0x3718: 0x000a, 0x3719: 0x000a, 0x371a: 0x000a, 0x371b: 0x000a, 0x371c: 0x000a, 0x371d: 0x000a, + 0x371e: 0x000a, 0x371f: 0x000a, 0x3720: 0x000a, 0x3721: 0x000a, 0x3722: 0x000a, 0x3723: 0x000a, + 0x3724: 0x000a, 0x3725: 0x000a, 0x3726: 0x000a, 0x3727: 0x000a, 0x3728: 0x000a, 0x3729: 0x000a, + 0x372a: 0x000a, 0x372b: 0x000a, 0x372c: 0x000a, 0x372d: 0x000a, + // Block 0xdd, offset 0x3740 + 0x3740: 0x000a, 0x3741: 0x000a, 0x3742: 0x000a, 0x3743: 0x000a, 0x3744: 0x000a, 0x3745: 0x000a, + 0x3746: 0x000a, 0x3747: 0x000a, 0x3748: 0x000a, 0x3749: 0x000a, 0x374a: 0x000a, 0x374b: 0x000a, + 0x3750: 0x000a, 0x3751: 0x000a, + 0x3752: 0x000a, 0x3753: 0x000a, 0x3754: 0x000a, 0x3755: 0x000a, 0x3756: 0x000a, 0x3757: 0x000a, + 0x3758: 0x000a, 0x3759: 0x000a, 0x375a: 0x000a, 0x375b: 0x000a, 0x375c: 0x000a, 0x375d: 0x000a, + 0x375e: 0x000a, 0x375f: 0x000a, 0x3760: 0x000a, 0x3761: 0x000a, 0x3762: 0x000a, 0x3763: 0x000a, + 0x3764: 0x000a, 0x3765: 0x000a, 0x3766: 0x000a, 0x3767: 0x000a, 0x3768: 0x000a, 0x3769: 0x000a, + 0x376a: 0x000a, 0x376b: 0x000a, 0x376c: 0x000a, 0x376d: 0x000a, 0x376e: 0x000a, 0x376f: 0x000a, + 0x3770: 0x000a, 0x3771: 0x000a, 0x3772: 0x000a, 0x3773: 0x000a, 0x3774: 0x000a, 0x3775: 0x000a, + 0x3776: 0x000a, 0x3777: 0x000a, 0x3778: 0x000a, 0x3779: 0x000a, 0x377a: 0x000a, 0x377b: 0x000a, + 0x377c: 0x000a, 0x377d: 0x000a, 0x377e: 0x000a, + // Block 0xde, offset 0x3780 + 0x3780: 0x000a, 0x3781: 0x000a, 0x3782: 0x000a, 0x3783: 0x000a, 0x3784: 0x000a, 0x3785: 0x000a, + 0x3786: 0x000a, 0x3787: 0x000a, 0x3788: 0x000a, 0x3789: 0x000a, 0x378a: 0x000a, 0x378b: 0x000a, + 0x378c: 0x000a, 0x3790: 0x000a, 0x3791: 0x000a, + 0x3792: 0x000a, 0x3793: 0x000a, 0x3794: 0x000a, 0x3795: 0x000a, 0x3796: 0x000a, 0x3797: 0x000a, + 0x3798: 0x000a, 0x3799: 0x000a, 0x379a: 0x000a, 0x379b: 0x000a, 0x379c: 0x000a, 0x379d: 0x000a, + 0x379e: 0x000a, 0x379f: 0x000a, 0x37a0: 0x000a, 0x37a1: 0x000a, 0x37a2: 0x000a, 0x37a3: 0x000a, + 0x37a4: 0x000a, 0x37a5: 0x000a, 0x37a6: 0x000a, 0x37a7: 0x000a, 0x37a8: 0x000a, 0x37a9: 0x000a, + 0x37aa: 0x000a, 0x37ab: 0x000a, + // Block 0xdf, offset 0x37c0 + 0x37c0: 0x000a, 0x37c1: 0x000a, 0x37c2: 0x000a, 0x37c3: 0x000a, 0x37c4: 0x000a, 0x37c5: 0x000a, + 0x37c6: 0x000a, 0x37c7: 0x000a, 0x37c8: 0x000a, 0x37c9: 0x000a, 0x37ca: 0x000a, 0x37cb: 0x000a, + 0x37cc: 0x000a, 0x37cd: 0x000a, 0x37ce: 0x000a, 0x37cf: 0x000a, 0x37d0: 0x000a, 0x37d1: 0x000a, + 0x37d2: 0x000a, 0x37d3: 0x000a, 0x37d4: 0x000a, 0x37d5: 0x000a, 0x37d6: 0x000a, 0x37d7: 0x000a, + // Block 0xe0, offset 0x3800 + 0x3800: 0x000a, + 0x3810: 0x000a, 0x3811: 0x000a, + 0x3812: 0x000a, 0x3813: 0x000a, 0x3814: 0x000a, 0x3815: 0x000a, 0x3816: 0x000a, 0x3817: 0x000a, + 0x3818: 0x000a, 0x3819: 0x000a, 0x381a: 0x000a, 0x381b: 0x000a, 0x381c: 0x000a, 0x381d: 0x000a, + 0x381e: 0x000a, 0x381f: 0x000a, 0x3820: 0x000a, 0x3821: 0x000a, 0x3822: 0x000a, 0x3823: 0x000a, + 0x3824: 0x000a, 0x3825: 0x000a, 0x3826: 0x000a, + // Block 0xe1, offset 0x3840 + 0x387e: 0x000b, 0x387f: 0x000b, + // Block 0xe2, offset 0x3880 + 0x3880: 0x000b, 0x3881: 0x000b, 0x3882: 0x000b, 0x3883: 0x000b, 0x3884: 0x000b, 0x3885: 0x000b, + 0x3886: 0x000b, 0x3887: 0x000b, 0x3888: 0x000b, 0x3889: 0x000b, 0x388a: 0x000b, 0x388b: 0x000b, + 0x388c: 0x000b, 0x388d: 0x000b, 0x388e: 0x000b, 0x388f: 0x000b, 0x3890: 0x000b, 0x3891: 0x000b, + 0x3892: 0x000b, 0x3893: 0x000b, 0x3894: 0x000b, 0x3895: 0x000b, 0x3896: 0x000b, 0x3897: 0x000b, + 0x3898: 0x000b, 0x3899: 0x000b, 0x389a: 0x000b, 0x389b: 0x000b, 0x389c: 0x000b, 0x389d: 0x000b, + 0x389e: 0x000b, 0x389f: 0x000b, 0x38a0: 0x000b, 0x38a1: 0x000b, 0x38a2: 0x000b, 0x38a3: 0x000b, + 0x38a4: 0x000b, 0x38a5: 0x000b, 0x38a6: 0x000b, 0x38a7: 0x000b, 0x38a8: 0x000b, 0x38a9: 0x000b, + 0x38aa: 0x000b, 0x38ab: 0x000b, 0x38ac: 0x000b, 0x38ad: 0x000b, 0x38ae: 0x000b, 0x38af: 0x000b, + 0x38b0: 0x000b, 0x38b1: 0x000b, 0x38b2: 0x000b, 0x38b3: 0x000b, 0x38b4: 0x000b, 0x38b5: 0x000b, + 0x38b6: 0x000b, 0x38b7: 0x000b, 0x38b8: 0x000b, 0x38b9: 0x000b, 0x38ba: 0x000b, 0x38bb: 0x000b, + 0x38bc: 0x000b, 0x38bd: 0x000b, 0x38be: 0x000b, 0x38bf: 0x000b, + // Block 0xe3, offset 0x38c0 + 0x38c0: 0x000c, 0x38c1: 0x000c, 0x38c2: 0x000c, 0x38c3: 0x000c, 0x38c4: 0x000c, 0x38c5: 0x000c, + 0x38c6: 0x000c, 0x38c7: 0x000c, 0x38c8: 0x000c, 0x38c9: 0x000c, 0x38ca: 0x000c, 0x38cb: 0x000c, + 0x38cc: 0x000c, 0x38cd: 0x000c, 0x38ce: 0x000c, 0x38cf: 0x000c, 0x38d0: 0x000c, 0x38d1: 0x000c, + 0x38d2: 0x000c, 0x38d3: 0x000c, 0x38d4: 0x000c, 0x38d5: 0x000c, 0x38d6: 0x000c, 0x38d7: 0x000c, + 0x38d8: 0x000c, 0x38d9: 0x000c, 0x38da: 0x000c, 0x38db: 0x000c, 0x38dc: 0x000c, 0x38dd: 0x000c, + 0x38de: 0x000c, 0x38df: 0x000c, 0x38e0: 0x000c, 0x38e1: 0x000c, 0x38e2: 0x000c, 0x38e3: 0x000c, + 0x38e4: 0x000c, 0x38e5: 0x000c, 0x38e6: 0x000c, 0x38e7: 0x000c, 0x38e8: 0x000c, 0x38e9: 0x000c, + 0x38ea: 0x000c, 0x38eb: 0x000c, 0x38ec: 0x000c, 0x38ed: 0x000c, 0x38ee: 0x000c, 0x38ef: 0x000c, + 0x38f0: 0x000b, 0x38f1: 0x000b, 0x38f2: 0x000b, 0x38f3: 0x000b, 0x38f4: 0x000b, 0x38f5: 0x000b, + 0x38f6: 0x000b, 0x38f7: 0x000b, 0x38f8: 0x000b, 0x38f9: 0x000b, 0x38fa: 0x000b, 0x38fb: 0x000b, + 0x38fc: 0x000b, 0x38fd: 0x000b, 0x38fe: 0x000b, 0x38ff: 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, 0x137: 0x28, + 0x138: 0x29, 0x139: 0x2a, 0x13a: 0x2b, 0x13b: 0x2c, 0x13c: 0x2d, 0x13d: 0x2e, 0x13e: 0x2f, 0x13f: 0x30, + // Block 0x5, offset 0x140 + 0x140: 0x31, 0x141: 0x32, 0x142: 0x33, + 0x14d: 0x34, 0x14e: 0x35, + 0x150: 0x36, + 0x15a: 0x37, 0x15c: 0x38, 0x15d: 0x39, 0x15e: 0x3a, 0x15f: 0x3b, + 0x160: 0x3c, 0x162: 0x3d, 0x164: 0x3e, 0x165: 0x3f, 0x167: 0x40, + 0x168: 0x41, 0x169: 0x42, 0x16a: 0x43, 0x16c: 0x44, 0x16d: 0x45, 0x16e: 0x46, 0x16f: 0x47, + 0x170: 0x48, 0x173: 0x49, 0x177: 0x4a, + 0x17e: 0x4b, 0x17f: 0x4c, + // Block 0x6, offset 0x180 + 0x180: 0x4d, 0x181: 0x4e, 0x182: 0x4f, 0x183: 0x50, 0x184: 0x51, 0x185: 0x52, 0x186: 0x53, 0x187: 0x54, + 0x188: 0x55, 0x189: 0x54, 0x18a: 0x54, 0x18b: 0x54, 0x18c: 0x56, 0x18d: 0x57, 0x18e: 0x58, 0x18f: 0x54, + 0x190: 0x59, 0x191: 0x5a, 0x192: 0x5b, 0x193: 0x5c, 0x194: 0x54, 0x195: 0x54, 0x196: 0x54, 0x197: 0x54, + 0x198: 0x54, 0x199: 0x54, 0x19a: 0x5d, 0x19b: 0x54, 0x19c: 0x54, 0x19d: 0x5e, 0x19e: 0x54, 0x19f: 0x5f, + 0x1a4: 0x54, 0x1a5: 0x54, 0x1a6: 0x60, 0x1a7: 0x61, + 0x1a8: 0x54, 0x1a9: 0x54, 0x1aa: 0x54, 0x1ab: 0x54, 0x1ac: 0x54, 0x1ad: 0x62, 0x1ae: 0x63, 0x1af: 0x64, + 0x1b3: 0x65, 0x1b5: 0x66, 0x1b7: 0x67, + 0x1b8: 0x68, 0x1b9: 0x69, 0x1ba: 0x6a, 0x1bb: 0x6b, 0x1bc: 0x54, 0x1bd: 0x54, 0x1be: 0x54, 0x1bf: 0x6c, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x6d, 0x1c2: 0x6e, 0x1c3: 0x6f, 0x1c7: 0x70, + 0x1c8: 0x71, 0x1c9: 0x72, 0x1ca: 0x73, 0x1cb: 0x74, 0x1cd: 0x75, 0x1cf: 0x76, + // Block 0x8, offset 0x200 + 0x237: 0x54, + // Block 0x9, offset 0x240 + 0x252: 0x77, 0x253: 0x78, + 0x258: 0x79, 0x259: 0x7a, 0x25a: 0x7b, 0x25b: 0x7c, 0x25c: 0x7d, 0x25e: 0x7e, + 0x260: 0x7f, 0x261: 0x80, 0x263: 0x81, 0x264: 0x82, 0x265: 0x83, 0x266: 0x84, 0x267: 0x85, + 0x268: 0x86, 0x269: 0x87, 0x26a: 0x88, 0x26b: 0x89, 0x26f: 0x8a, + // Block 0xa, offset 0x280 + 0x2ac: 0x8b, 0x2ad: 0x8c, 0x2ae: 0x0e, 0x2af: 0x0e, + 0x2b0: 0x0e, 0x2b1: 0x0e, 0x2b2: 0x0e, 0x2b3: 0x0e, 0x2b4: 0x8d, 0x2b5: 0x0e, 0x2b6: 0x0e, 0x2b7: 0x8e, + 0x2b8: 0x8f, 0x2b9: 0x90, 0x2ba: 0x0e, 0x2bb: 0x91, 0x2bc: 0x92, 0x2bd: 0x93, 0x2bf: 0x94, + // Block 0xb, offset 0x2c0 + 0x2c4: 0x95, 0x2c5: 0x54, 0x2c6: 0x96, 0x2c7: 0x97, + 0x2cb: 0x98, 0x2cd: 0x99, + 0x2e0: 0x9a, 0x2e1: 0x9a, 0x2e2: 0x9a, 0x2e3: 0x9a, 0x2e4: 0x9b, 0x2e5: 0x9a, 0x2e6: 0x9a, 0x2e7: 0x9a, + 0x2e8: 0x9c, 0x2e9: 0x9a, 0x2ea: 0x9a, 0x2eb: 0x9d, 0x2ec: 0x9e, 0x2ed: 0x9a, 0x2ee: 0x9a, 0x2ef: 0x9a, + 0x2f0: 0x9a, 0x2f1: 0x9a, 0x2f2: 0x9a, 0x2f3: 0x9a, 0x2f4: 0x9a, 0x2f5: 0x9a, 0x2f6: 0x9a, 0x2f7: 0x9a, + 0x2f8: 0x9a, 0x2f9: 0x9f, 0x2fa: 0x9a, 0x2fb: 0x9a, 0x2fc: 0x9a, 0x2fd: 0x9a, 0x2fe: 0x9a, 0x2ff: 0x9a, + // Block 0xc, offset 0x300 + 0x300: 0xa0, 0x301: 0xa1, 0x302: 0xa2, 0x304: 0xa3, 0x305: 0xa4, 0x306: 0xa5, 0x307: 0xa6, + 0x308: 0xa7, 0x30b: 0xa8, 0x30c: 0xa9, 0x30d: 0xaa, + 0x310: 0xab, 0x311: 0xac, 0x312: 0xad, 0x313: 0xae, 0x316: 0xaf, 0x317: 0xb0, + 0x318: 0xb1, 0x319: 0xb2, 0x31a: 0xb3, 0x31c: 0xb4, + 0x328: 0xb5, 0x329: 0xb6, 0x32a: 0xb7, + 0x330: 0xb8, 0x332: 0xb9, 0x334: 0xba, 0x335: 0xbb, + // Block 0xd, offset 0x340 + 0x36b: 0xbc, 0x36c: 0xbd, + 0x37e: 0xbe, + // Block 0xe, offset 0x380 + 0x3b2: 0xbf, + // Block 0xf, offset 0x3c0 + 0x3c5: 0xc0, 0x3c6: 0xc1, + 0x3c8: 0x54, 0x3c9: 0xc2, 0x3cc: 0x54, 0x3cd: 0xc3, + 0x3db: 0xc4, 0x3dc: 0xc5, 0x3dd: 0xc6, 0x3de: 0xc7, 0x3df: 0xc8, + 0x3e8: 0xc9, 0x3e9: 0xca, 0x3ea: 0xcb, + // Block 0x10, offset 0x400 + 0x400: 0xcc, + 0x420: 0x9a, 0x421: 0x9a, 0x422: 0x9a, 0x423: 0xcd, 0x424: 0x9a, 0x425: 0xce, 0x426: 0x9a, 0x427: 0x9a, + 0x428: 0x9a, 0x429: 0x9a, 0x42a: 0x9a, 0x42b: 0x9a, 0x42c: 0x9a, 0x42d: 0x9a, 0x42e: 0x9a, 0x42f: 0x9a, + 0x430: 0x9a, 0x431: 0x9a, 0x432: 0x9a, 0x433: 0x9a, 0x434: 0x9a, 0x435: 0x9a, 0x436: 0x9a, 0x437: 0x9a, + 0x438: 0x0e, 0x439: 0x0e, 0x43a: 0x0e, 0x43b: 0xcf, 0x43c: 0x9a, 0x43d: 0x9a, 0x43e: 0x9a, 0x43f: 0x9a, + // Block 0x11, offset 0x440 + 0x440: 0xd0, 0x441: 0x54, 0x442: 0xd1, 0x443: 0xd2, 0x444: 0xd3, 0x445: 0xd4, + 0x449: 0xd5, 0x44c: 0x54, 0x44d: 0x54, 0x44e: 0x54, 0x44f: 0x54, + 0x450: 0x54, 0x451: 0x54, 0x452: 0x54, 0x453: 0x54, 0x454: 0x54, 0x455: 0x54, 0x456: 0x54, 0x457: 0x54, + 0x458: 0x54, 0x459: 0x54, 0x45a: 0x54, 0x45b: 0xd6, 0x45c: 0x54, 0x45d: 0x6b, 0x45e: 0x54, 0x45f: 0xd7, + 0x460: 0xd8, 0x461: 0xd9, 0x462: 0xda, 0x464: 0xdb, 0x465: 0xdc, 0x466: 0xdd, 0x467: 0xde, + 0x47f: 0xdf, + // Block 0x12, offset 0x480 + 0x4bf: 0xdf, + // 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: 0xe0, 0x541: 0xe0, 0x542: 0xe0, 0x543: 0xe0, 0x544: 0x05, 0x545: 0x05, 0x546: 0x05, 0x547: 0xe1, + 0x548: 0xe0, 0x549: 0xe0, 0x54a: 0xe0, 0x54b: 0xe0, 0x54c: 0xe0, 0x54d: 0xe0, 0x54e: 0xe0, 0x54f: 0xe0, + 0x550: 0xe0, 0x551: 0xe0, 0x552: 0xe0, 0x553: 0xe0, 0x554: 0xe0, 0x555: 0xe0, 0x556: 0xe0, 0x557: 0xe0, + 0x558: 0xe0, 0x559: 0xe0, 0x55a: 0xe0, 0x55b: 0xe0, 0x55c: 0xe0, 0x55d: 0xe0, 0x55e: 0xe0, 0x55f: 0xe0, + 0x560: 0xe0, 0x561: 0xe0, 0x562: 0xe0, 0x563: 0xe0, 0x564: 0xe0, 0x565: 0xe0, 0x566: 0xe0, 0x567: 0xe0, + 0x568: 0xe0, 0x569: 0xe0, 0x56a: 0xe0, 0x56b: 0xe0, 0x56c: 0xe0, 0x56d: 0xe0, 0x56e: 0xe0, 0x56f: 0xe0, + 0x570: 0xe0, 0x571: 0xe0, 0x572: 0xe0, 0x573: 0xe0, 0x574: 0xe0, 0x575: 0xe0, 0x576: 0xe0, 0x577: 0xe0, + 0x578: 0xe0, 0x579: 0xe0, 0x57a: 0xe0, 0x57b: 0xe0, 0x57c: 0xe0, 0x57d: 0xe0, 0x57e: 0xe0, 0x57f: 0xe0, + // Block 0x16, offset 0x580 + 0x58f: 0x10, + 0x59f: 0x10, + 0x5a0: 0x13, + 0x5af: 0x10, + 0x5bf: 0x10, + // Block 0x17, offset 0x5c0 + 0x5cf: 0x10, +} + +// Total table size 16184 bytes (15KiB); checksum: F50EF68C diff --git a/vendor/golang.org/x/text/unicode/bidi/tables9.0.0.go b/vendor/golang.org/x/text/unicode/bidi/tables9.0.0.go new file mode 100644 index 0000000..0ca0193 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/bidi/tables9.0.0.go @@ -0,0 +1,1781 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// +build !go1.10 + +package bidi + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "9.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: 15744 bytes (15.38 KiB). Checksum: b4c3b70954803b86. +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: 222 blocks, 14208 entries, 14208 bytes +// The third block is the zero block. +var bidiValues = [14208]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: 0x0001, 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: 0x0001, 0x5e1: 0x0001, 0x5e2: 0x0001, 0x5e3: 0x0001, + 0x5e4: 0x0001, 0x5e5: 0x0001, 0x5e6: 0x0001, 0x5e7: 0x0001, 0x5e8: 0x0001, 0x5e9: 0x0001, + 0x5ea: 0x0001, 0x5eb: 0x0001, 0x5ec: 0x0001, 0x5ed: 0x0001, 0x5ee: 0x0001, 0x5ef: 0x0001, + 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: 0x000d, 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, + // 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, + // Block 0x21, offset 0x840 + 0x841: 0x000c, + 0x87c: 0x000c, 0x87f: 0x000c, + // Block 0x22, offset 0x880 + 0x881: 0x000c, 0x882: 0x000c, 0x883: 0x000c, 0x884: 0x000c, + 0x88d: 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, + 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 + 0xa01: 0x000c, + // Block 0x29, offset 0xa40 + 0xa41: 0x000c, 0xa42: 0x000c, 0xa43: 0x000c, 0xa44: 0x000c, + 0xa4d: 0x000c, + 0xa62: 0x000c, 0xa63: 0x000c, + // Block 0x2a, offset 0xa80 + 0xa8a: 0x000c, + 0xa92: 0x000c, 0xa93: 0x000c, 0xa94: 0x000c, 0xa96: 0x000c, + // Block 0x2b, offset 0xac0 + 0xaf1: 0x000c, 0xaf4: 0x000c, 0xaf5: 0x000c, + 0xaf6: 0x000c, 0xaf7: 0x000c, 0xaf8: 0x000c, 0xaf9: 0x000c, 0xafa: 0x000c, + 0xaff: 0x0004, + // Block 0x2c, offset 0xb00 + 0xb07: 0x000c, 0xb08: 0x000c, 0xb09: 0x000c, 0xb0a: 0x000c, 0xb0b: 0x000c, + 0xb0c: 0x000c, 0xb0d: 0x000c, 0xb0e: 0x000c, + // Block 0x2d, offset 0xb40 + 0xb71: 0x000c, 0xb74: 0x000c, 0xb75: 0x000c, + 0xb76: 0x000c, 0xb77: 0x000c, 0xb78: 0x000c, 0xb79: 0x000c, 0xb7b: 0x000c, + 0xb7c: 0x000c, + // Block 0x2e, offset 0xb80 + 0xb88: 0x000c, 0xb89: 0x000c, 0xb8a: 0x000c, 0xb8b: 0x000c, + 0xb8c: 0x000c, 0xb8d: 0x000c, + // Block 0x2f, offset 0xbc0 + 0xbd8: 0x000c, 0xbd9: 0x000c, + 0xbf5: 0x000c, + 0xbf7: 0x000c, 0xbf9: 0x000c, 0xbfa: 0x003a, 0xbfb: 0x002a, + 0xbfc: 0x003a, 0xbfd: 0x002a, + // Block 0x30, offset 0xc00 + 0xc31: 0x000c, 0xc32: 0x000c, 0xc33: 0x000c, 0xc34: 0x000c, 0xc35: 0x000c, + 0xc36: 0x000c, 0xc37: 0x000c, 0xc38: 0x000c, 0xc39: 0x000c, 0xc3a: 0x000c, 0xc3b: 0x000c, + 0xc3c: 0x000c, 0xc3d: 0x000c, 0xc3e: 0x000c, + // Block 0x31, offset 0xc40 + 0xc40: 0x000c, 0xc41: 0x000c, 0xc42: 0x000c, 0xc43: 0x000c, 0xc44: 0x000c, + 0xc46: 0x000c, 0xc47: 0x000c, + 0xc4d: 0x000c, 0xc4e: 0x000c, 0xc4f: 0x000c, 0xc50: 0x000c, 0xc51: 0x000c, + 0xc52: 0x000c, 0xc53: 0x000c, 0xc54: 0x000c, 0xc55: 0x000c, 0xc56: 0x000c, 0xc57: 0x000c, + 0xc59: 0x000c, 0xc5a: 0x000c, 0xc5b: 0x000c, 0xc5c: 0x000c, 0xc5d: 0x000c, + 0xc5e: 0x000c, 0xc5f: 0x000c, 0xc60: 0x000c, 0xc61: 0x000c, 0xc62: 0x000c, 0xc63: 0x000c, + 0xc64: 0x000c, 0xc65: 0x000c, 0xc66: 0x000c, 0xc67: 0x000c, 0xc68: 0x000c, 0xc69: 0x000c, + 0xc6a: 0x000c, 0xc6b: 0x000c, 0xc6c: 0x000c, 0xc6d: 0x000c, 0xc6e: 0x000c, 0xc6f: 0x000c, + 0xc70: 0x000c, 0xc71: 0x000c, 0xc72: 0x000c, 0xc73: 0x000c, 0xc74: 0x000c, 0xc75: 0x000c, + 0xc76: 0x000c, 0xc77: 0x000c, 0xc78: 0x000c, 0xc79: 0x000c, 0xc7a: 0x000c, 0xc7b: 0x000c, + 0xc7c: 0x000c, + // Block 0x32, offset 0xc80 + 0xc86: 0x000c, + // Block 0x33, offset 0xcc0 + 0xced: 0x000c, 0xcee: 0x000c, 0xcef: 0x000c, + 0xcf0: 0x000c, 0xcf2: 0x000c, 0xcf3: 0x000c, 0xcf4: 0x000c, 0xcf5: 0x000c, + 0xcf6: 0x000c, 0xcf7: 0x000c, 0xcf9: 0x000c, 0xcfa: 0x000c, + 0xcfd: 0x000c, 0xcfe: 0x000c, + // Block 0x34, offset 0xd00 + 0xd18: 0x000c, 0xd19: 0x000c, + 0xd1e: 0x000c, 0xd1f: 0x000c, 0xd20: 0x000c, + 0xd31: 0x000c, 0xd32: 0x000c, 0xd33: 0x000c, 0xd34: 0x000c, + // Block 0x35, offset 0xd40 + 0xd42: 0x000c, 0xd45: 0x000c, + 0xd46: 0x000c, + 0xd4d: 0x000c, + 0xd5d: 0x000c, + // Block 0x36, offset 0xd80 + 0xd9d: 0x000c, + 0xd9e: 0x000c, 0xd9f: 0x000c, + // Block 0x37, offset 0xdc0 + 0xdd0: 0x000a, 0xdd1: 0x000a, + 0xdd2: 0x000a, 0xdd3: 0x000a, 0xdd4: 0x000a, 0xdd5: 0x000a, 0xdd6: 0x000a, 0xdd7: 0x000a, + 0xdd8: 0x000a, 0xdd9: 0x000a, + // Block 0x38, offset 0xe00 + 0xe00: 0x000a, + // Block 0x39, offset 0xe40 + 0xe40: 0x0009, + 0xe5b: 0x007a, 0xe5c: 0x006a, + // Block 0x3a, offset 0xe80 + 0xe92: 0x000c, 0xe93: 0x000c, 0xe94: 0x000c, + 0xeb2: 0x000c, 0xeb3: 0x000c, 0xeb4: 0x000c, + // Block 0x3b, offset 0xec0 + 0xed2: 0x000c, 0xed3: 0x000c, + 0xef2: 0x000c, 0xef3: 0x000c, + // Block 0x3c, offset 0xf00 + 0xf34: 0x000c, 0xf35: 0x000c, + 0xf37: 0x000c, 0xf38: 0x000c, 0xf39: 0x000c, 0xf3a: 0x000c, 0xf3b: 0x000c, + 0xf3c: 0x000c, 0xf3d: 0x000c, + // Block 0x3d, offset 0xf40 + 0xf46: 0x000c, 0xf49: 0x000c, 0xf4a: 0x000c, 0xf4b: 0x000c, + 0xf4c: 0x000c, 0xf4d: 0x000c, 0xf4e: 0x000c, 0xf4f: 0x000c, 0xf50: 0x000c, 0xf51: 0x000c, + 0xf52: 0x000c, 0xf53: 0x000c, + 0xf5b: 0x0004, 0xf5d: 0x000c, + 0xf70: 0x000a, 0xf71: 0x000a, 0xf72: 0x000a, 0xf73: 0x000a, 0xf74: 0x000a, 0xf75: 0x000a, + 0xf76: 0x000a, 0xf77: 0x000a, 0xf78: 0x000a, 0xf79: 0x000a, + // Block 0x3e, offset 0xf80 + 0xf80: 0x000a, 0xf81: 0x000a, 0xf82: 0x000a, 0xf83: 0x000a, 0xf84: 0x000a, 0xf85: 0x000a, + 0xf86: 0x000a, 0xf87: 0x000a, 0xf88: 0x000a, 0xf89: 0x000a, 0xf8a: 0x000a, 0xf8b: 0x000c, + 0xf8c: 0x000c, 0xf8d: 0x000c, 0xf8e: 0x000b, + // Block 0x3f, offset 0xfc0 + 0xfc5: 0x000c, + 0xfc6: 0x000c, + 0xfe9: 0x000c, + // Block 0x40, offset 0x1000 + 0x1020: 0x000c, 0x1021: 0x000c, 0x1022: 0x000c, + 0x1027: 0x000c, 0x1028: 0x000c, + 0x1032: 0x000c, + 0x1039: 0x000c, 0x103a: 0x000c, 0x103b: 0x000c, + // Block 0x41, offset 0x1040 + 0x1040: 0x000a, 0x1044: 0x000a, 0x1045: 0x000a, + // Block 0x42, offset 0x1080 + 0x109e: 0x000a, 0x109f: 0x000a, 0x10a0: 0x000a, 0x10a1: 0x000a, 0x10a2: 0x000a, 0x10a3: 0x000a, + 0x10a4: 0x000a, 0x10a5: 0x000a, 0x10a6: 0x000a, 0x10a7: 0x000a, 0x10a8: 0x000a, 0x10a9: 0x000a, + 0x10aa: 0x000a, 0x10ab: 0x000a, 0x10ac: 0x000a, 0x10ad: 0x000a, 0x10ae: 0x000a, 0x10af: 0x000a, + 0x10b0: 0x000a, 0x10b1: 0x000a, 0x10b2: 0x000a, 0x10b3: 0x000a, 0x10b4: 0x000a, 0x10b5: 0x000a, + 0x10b6: 0x000a, 0x10b7: 0x000a, 0x10b8: 0x000a, 0x10b9: 0x000a, 0x10ba: 0x000a, 0x10bb: 0x000a, + 0x10bc: 0x000a, 0x10bd: 0x000a, 0x10be: 0x000a, 0x10bf: 0x000a, + // Block 0x43, offset 0x10c0 + 0x10d7: 0x000c, + 0x10d8: 0x000c, 0x10db: 0x000c, + // Block 0x44, offset 0x1100 + 0x1116: 0x000c, + 0x1118: 0x000c, 0x1119: 0x000c, 0x111a: 0x000c, 0x111b: 0x000c, 0x111c: 0x000c, 0x111d: 0x000c, + 0x111e: 0x000c, 0x1120: 0x000c, 0x1122: 0x000c, + 0x1125: 0x000c, 0x1126: 0x000c, 0x1127: 0x000c, 0x1128: 0x000c, 0x1129: 0x000c, + 0x112a: 0x000c, 0x112b: 0x000c, 0x112c: 0x000c, + 0x1133: 0x000c, 0x1134: 0x000c, 0x1135: 0x000c, + 0x1136: 0x000c, 0x1137: 0x000c, 0x1138: 0x000c, 0x1139: 0x000c, 0x113a: 0x000c, 0x113b: 0x000c, + 0x113c: 0x000c, 0x113f: 0x000c, + // Block 0x45, offset 0x1140 + 0x1170: 0x000c, 0x1171: 0x000c, 0x1172: 0x000c, 0x1173: 0x000c, 0x1174: 0x000c, 0x1175: 0x000c, + 0x1176: 0x000c, 0x1177: 0x000c, 0x1178: 0x000c, 0x1179: 0x000c, 0x117a: 0x000c, 0x117b: 0x000c, + 0x117c: 0x000c, 0x117d: 0x000c, 0x117e: 0x000c, + // Block 0x46, offset 0x1180 + 0x1180: 0x000c, 0x1181: 0x000c, 0x1182: 0x000c, 0x1183: 0x000c, + 0x11b4: 0x000c, + 0x11b6: 0x000c, 0x11b7: 0x000c, 0x11b8: 0x000c, 0x11b9: 0x000c, 0x11ba: 0x000c, + 0x11bc: 0x000c, + // Block 0x47, offset 0x11c0 + 0x11c2: 0x000c, + 0x11eb: 0x000c, 0x11ec: 0x000c, 0x11ed: 0x000c, 0x11ee: 0x000c, 0x11ef: 0x000c, + 0x11f0: 0x000c, 0x11f1: 0x000c, 0x11f2: 0x000c, 0x11f3: 0x000c, + // Block 0x48, offset 0x1200 + 0x1200: 0x000c, 0x1201: 0x000c, + 0x1222: 0x000c, 0x1223: 0x000c, + 0x1224: 0x000c, 0x1225: 0x000c, 0x1228: 0x000c, 0x1229: 0x000c, + 0x122b: 0x000c, 0x122c: 0x000c, 0x122d: 0x000c, + // Block 0x49, offset 0x1240 + 0x1266: 0x000c, 0x1268: 0x000c, 0x1269: 0x000c, + 0x126d: 0x000c, 0x126f: 0x000c, + 0x1270: 0x000c, 0x1271: 0x000c, + // Block 0x4a, offset 0x1280 + 0x12ac: 0x000c, 0x12ad: 0x000c, 0x12ae: 0x000c, 0x12af: 0x000c, + 0x12b0: 0x000c, 0x12b1: 0x000c, 0x12b2: 0x000c, 0x12b3: 0x000c, + 0x12b6: 0x000c, 0x12b7: 0x000c, + // Block 0x4b, offset 0x12c0 + 0x12d0: 0x000c, 0x12d1: 0x000c, + 0x12d2: 0x000c, 0x12d4: 0x000c, 0x12d5: 0x000c, 0x12d6: 0x000c, 0x12d7: 0x000c, + 0x12d8: 0x000c, 0x12d9: 0x000c, 0x12da: 0x000c, 0x12db: 0x000c, 0x12dc: 0x000c, 0x12dd: 0x000c, + 0x12de: 0x000c, 0x12df: 0x000c, 0x12e0: 0x000c, 0x12e2: 0x000c, 0x12e3: 0x000c, + 0x12e4: 0x000c, 0x12e5: 0x000c, 0x12e6: 0x000c, 0x12e7: 0x000c, 0x12e8: 0x000c, + 0x12ed: 0x000c, + 0x12f4: 0x000c, + 0x12f8: 0x000c, 0x12f9: 0x000c, + // Block 0x4c, offset 0x1300 + 0x1300: 0x000c, 0x1301: 0x000c, 0x1302: 0x000c, 0x1303: 0x000c, 0x1304: 0x000c, 0x1305: 0x000c, + 0x1306: 0x000c, 0x1307: 0x000c, 0x1308: 0x000c, 0x1309: 0x000c, 0x130a: 0x000c, 0x130b: 0x000c, + 0x130c: 0x000c, 0x130d: 0x000c, 0x130e: 0x000c, 0x130f: 0x000c, 0x1310: 0x000c, 0x1311: 0x000c, + 0x1312: 0x000c, 0x1313: 0x000c, 0x1314: 0x000c, 0x1315: 0x000c, 0x1316: 0x000c, 0x1317: 0x000c, + 0x1318: 0x000c, 0x1319: 0x000c, 0x131a: 0x000c, 0x131b: 0x000c, 0x131c: 0x000c, 0x131d: 0x000c, + 0x131e: 0x000c, 0x131f: 0x000c, 0x1320: 0x000c, 0x1321: 0x000c, 0x1322: 0x000c, 0x1323: 0x000c, + 0x1324: 0x000c, 0x1325: 0x000c, 0x1326: 0x000c, 0x1327: 0x000c, 0x1328: 0x000c, 0x1329: 0x000c, + 0x132a: 0x000c, 0x132b: 0x000c, 0x132c: 0x000c, 0x132d: 0x000c, 0x132e: 0x000c, 0x132f: 0x000c, + 0x1330: 0x000c, 0x1331: 0x000c, 0x1332: 0x000c, 0x1333: 0x000c, 0x1334: 0x000c, 0x1335: 0x000c, + 0x133b: 0x000c, + 0x133c: 0x000c, 0x133d: 0x000c, 0x133e: 0x000c, 0x133f: 0x000c, + // Block 0x4d, offset 0x1340 + 0x137d: 0x000a, 0x137f: 0x000a, + // Block 0x4e, offset 0x1380 + 0x1380: 0x000a, 0x1381: 0x000a, + 0x138d: 0x000a, 0x138e: 0x000a, 0x138f: 0x000a, + 0x139d: 0x000a, + 0x139e: 0x000a, 0x139f: 0x000a, + 0x13ad: 0x000a, 0x13ae: 0x000a, 0x13af: 0x000a, + 0x13bd: 0x000a, 0x13be: 0x000a, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x0009, 0x13c1: 0x0009, 0x13c2: 0x0009, 0x13c3: 0x0009, 0x13c4: 0x0009, 0x13c5: 0x0009, + 0x13c6: 0x0009, 0x13c7: 0x0009, 0x13c8: 0x0009, 0x13c9: 0x0009, 0x13ca: 0x0009, 0x13cb: 0x000b, + 0x13cc: 0x000b, 0x13cd: 0x000b, 0x13cf: 0x0001, 0x13d0: 0x000a, 0x13d1: 0x000a, + 0x13d2: 0x000a, 0x13d3: 0x000a, 0x13d4: 0x000a, 0x13d5: 0x000a, 0x13d6: 0x000a, 0x13d7: 0x000a, + 0x13d8: 0x000a, 0x13d9: 0x000a, 0x13da: 0x000a, 0x13db: 0x000a, 0x13dc: 0x000a, 0x13dd: 0x000a, + 0x13de: 0x000a, 0x13df: 0x000a, 0x13e0: 0x000a, 0x13e1: 0x000a, 0x13e2: 0x000a, 0x13e3: 0x000a, + 0x13e4: 0x000a, 0x13e5: 0x000a, 0x13e6: 0x000a, 0x13e7: 0x000a, 0x13e8: 0x0009, 0x13e9: 0x0007, + 0x13ea: 0x000e, 0x13eb: 0x000e, 0x13ec: 0x000e, 0x13ed: 0x000e, 0x13ee: 0x000e, 0x13ef: 0x0006, + 0x13f0: 0x0004, 0x13f1: 0x0004, 0x13f2: 0x0004, 0x13f3: 0x0004, 0x13f4: 0x0004, 0x13f5: 0x000a, + 0x13f6: 0x000a, 0x13f7: 0x000a, 0x13f8: 0x000a, 0x13f9: 0x000a, 0x13fa: 0x000a, 0x13fb: 0x000a, + 0x13fc: 0x000a, 0x13fd: 0x000a, 0x13fe: 0x000a, 0x13ff: 0x000a, + // Block 0x50, offset 0x1400 + 0x1400: 0x000a, 0x1401: 0x000a, 0x1402: 0x000a, 0x1403: 0x000a, 0x1404: 0x0006, 0x1405: 0x009a, + 0x1406: 0x008a, 0x1407: 0x000a, 0x1408: 0x000a, 0x1409: 0x000a, 0x140a: 0x000a, 0x140b: 0x000a, + 0x140c: 0x000a, 0x140d: 0x000a, 0x140e: 0x000a, 0x140f: 0x000a, 0x1410: 0x000a, 0x1411: 0x000a, + 0x1412: 0x000a, 0x1413: 0x000a, 0x1414: 0x000a, 0x1415: 0x000a, 0x1416: 0x000a, 0x1417: 0x000a, + 0x1418: 0x000a, 0x1419: 0x000a, 0x141a: 0x000a, 0x141b: 0x000a, 0x141c: 0x000a, 0x141d: 0x000a, + 0x141e: 0x000a, 0x141f: 0x0009, 0x1420: 0x000b, 0x1421: 0x000b, 0x1422: 0x000b, 0x1423: 0x000b, + 0x1424: 0x000b, 0x1425: 0x000b, 0x1426: 0x000e, 0x1427: 0x000e, 0x1428: 0x000e, 0x1429: 0x000e, + 0x142a: 0x000b, 0x142b: 0x000b, 0x142c: 0x000b, 0x142d: 0x000b, 0x142e: 0x000b, 0x142f: 0x000b, + 0x1430: 0x0002, 0x1434: 0x0002, 0x1435: 0x0002, + 0x1436: 0x0002, 0x1437: 0x0002, 0x1438: 0x0002, 0x1439: 0x0002, 0x143a: 0x0003, 0x143b: 0x0003, + 0x143c: 0x000a, 0x143d: 0x009a, 0x143e: 0x008a, + // Block 0x51, offset 0x1440 + 0x1440: 0x0002, 0x1441: 0x0002, 0x1442: 0x0002, 0x1443: 0x0002, 0x1444: 0x0002, 0x1445: 0x0002, + 0x1446: 0x0002, 0x1447: 0x0002, 0x1448: 0x0002, 0x1449: 0x0002, 0x144a: 0x0003, 0x144b: 0x0003, + 0x144c: 0x000a, 0x144d: 0x009a, 0x144e: 0x008a, + 0x1460: 0x0004, 0x1461: 0x0004, 0x1462: 0x0004, 0x1463: 0x0004, + 0x1464: 0x0004, 0x1465: 0x0004, 0x1466: 0x0004, 0x1467: 0x0004, 0x1468: 0x0004, 0x1469: 0x0004, + 0x146a: 0x0004, 0x146b: 0x0004, 0x146c: 0x0004, 0x146d: 0x0004, 0x146e: 0x0004, 0x146f: 0x0004, + 0x1470: 0x0004, 0x1471: 0x0004, 0x1472: 0x0004, 0x1473: 0x0004, 0x1474: 0x0004, 0x1475: 0x0004, + 0x1476: 0x0004, 0x1477: 0x0004, 0x1478: 0x0004, 0x1479: 0x0004, 0x147a: 0x0004, 0x147b: 0x0004, + 0x147c: 0x0004, 0x147d: 0x0004, 0x147e: 0x0004, 0x147f: 0x0004, + // Block 0x52, offset 0x1480 + 0x1480: 0x0004, 0x1481: 0x0004, 0x1482: 0x0004, 0x1483: 0x0004, 0x1484: 0x0004, 0x1485: 0x0004, + 0x1486: 0x0004, 0x1487: 0x0004, 0x1488: 0x0004, 0x1489: 0x0004, 0x148a: 0x0004, 0x148b: 0x0004, + 0x148c: 0x0004, 0x148d: 0x0004, 0x148e: 0x0004, 0x148f: 0x0004, 0x1490: 0x000c, 0x1491: 0x000c, + 0x1492: 0x000c, 0x1493: 0x000c, 0x1494: 0x000c, 0x1495: 0x000c, 0x1496: 0x000c, 0x1497: 0x000c, + 0x1498: 0x000c, 0x1499: 0x000c, 0x149a: 0x000c, 0x149b: 0x000c, 0x149c: 0x000c, 0x149d: 0x000c, + 0x149e: 0x000c, 0x149f: 0x000c, 0x14a0: 0x000c, 0x14a1: 0x000c, 0x14a2: 0x000c, 0x14a3: 0x000c, + 0x14a4: 0x000c, 0x14a5: 0x000c, 0x14a6: 0x000c, 0x14a7: 0x000c, 0x14a8: 0x000c, 0x14a9: 0x000c, + 0x14aa: 0x000c, 0x14ab: 0x000c, 0x14ac: 0x000c, 0x14ad: 0x000c, 0x14ae: 0x000c, 0x14af: 0x000c, + 0x14b0: 0x000c, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x000a, 0x14c1: 0x000a, 0x14c3: 0x000a, 0x14c4: 0x000a, 0x14c5: 0x000a, + 0x14c6: 0x000a, 0x14c8: 0x000a, 0x14c9: 0x000a, + 0x14d4: 0x000a, 0x14d6: 0x000a, 0x14d7: 0x000a, + 0x14d8: 0x000a, + 0x14de: 0x000a, 0x14df: 0x000a, 0x14e0: 0x000a, 0x14e1: 0x000a, 0x14e2: 0x000a, 0x14e3: 0x000a, + 0x14e5: 0x000a, 0x14e7: 0x000a, 0x14e9: 0x000a, + 0x14ee: 0x0004, + 0x14fa: 0x000a, 0x14fb: 0x000a, + // Block 0x54, offset 0x1500 + 0x1500: 0x000a, 0x1501: 0x000a, 0x1502: 0x000a, 0x1503: 0x000a, 0x1504: 0x000a, + 0x150a: 0x000a, 0x150b: 0x000a, + 0x150c: 0x000a, 0x150d: 0x000a, 0x1510: 0x000a, 0x1511: 0x000a, + 0x1512: 0x000a, 0x1513: 0x000a, 0x1514: 0x000a, 0x1515: 0x000a, 0x1516: 0x000a, 0x1517: 0x000a, + 0x1518: 0x000a, 0x1519: 0x000a, 0x151a: 0x000a, 0x151b: 0x000a, 0x151c: 0x000a, 0x151d: 0x000a, + 0x151e: 0x000a, 0x151f: 0x000a, + // Block 0x55, offset 0x1540 + 0x1549: 0x000a, 0x154a: 0x000a, 0x154b: 0x000a, + 0x1550: 0x000a, 0x1551: 0x000a, + 0x1552: 0x000a, 0x1553: 0x000a, 0x1554: 0x000a, 0x1555: 0x000a, 0x1556: 0x000a, 0x1557: 0x000a, + 0x1558: 0x000a, 0x1559: 0x000a, 0x155a: 0x000a, 0x155b: 0x000a, 0x155c: 0x000a, 0x155d: 0x000a, + 0x155e: 0x000a, 0x155f: 0x000a, 0x1560: 0x000a, 0x1561: 0x000a, 0x1562: 0x000a, 0x1563: 0x000a, + 0x1564: 0x000a, 0x1565: 0x000a, 0x1566: 0x000a, 0x1567: 0x000a, 0x1568: 0x000a, 0x1569: 0x000a, + 0x156a: 0x000a, 0x156b: 0x000a, 0x156c: 0x000a, 0x156d: 0x000a, 0x156e: 0x000a, 0x156f: 0x000a, + 0x1570: 0x000a, 0x1571: 0x000a, 0x1572: 0x000a, 0x1573: 0x000a, 0x1574: 0x000a, 0x1575: 0x000a, + 0x1576: 0x000a, 0x1577: 0x000a, 0x1578: 0x000a, 0x1579: 0x000a, 0x157a: 0x000a, 0x157b: 0x000a, + 0x157c: 0x000a, 0x157d: 0x000a, 0x157e: 0x000a, 0x157f: 0x000a, + // Block 0x56, offset 0x1580 + 0x1580: 0x000a, 0x1581: 0x000a, 0x1582: 0x000a, 0x1583: 0x000a, 0x1584: 0x000a, 0x1585: 0x000a, + 0x1586: 0x000a, 0x1587: 0x000a, 0x1588: 0x000a, 0x1589: 0x000a, 0x158a: 0x000a, 0x158b: 0x000a, + 0x158c: 0x000a, 0x158d: 0x000a, 0x158e: 0x000a, 0x158f: 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, 0x15a0: 0x000a, 0x15a1: 0x000a, 0x15a2: 0x000a, 0x15a3: 0x000a, + 0x15a4: 0x000a, 0x15a5: 0x000a, 0x15a6: 0x000a, 0x15a7: 0x000a, 0x15a8: 0x000a, 0x15a9: 0x000a, + 0x15aa: 0x000a, 0x15ab: 0x000a, 0x15ac: 0x000a, 0x15ad: 0x000a, 0x15ae: 0x000a, 0x15af: 0x000a, + 0x15b0: 0x000a, 0x15b1: 0x000a, 0x15b2: 0x000a, 0x15b3: 0x000a, 0x15b4: 0x000a, 0x15b5: 0x000a, + 0x15b6: 0x000a, 0x15b7: 0x000a, 0x15b8: 0x000a, 0x15b9: 0x000a, 0x15ba: 0x000a, 0x15bb: 0x000a, + 0x15bc: 0x000a, 0x15bd: 0x000a, 0x15be: 0x000a, 0x15bf: 0x000a, + // Block 0x57, offset 0x15c0 + 0x15c0: 0x000a, 0x15c1: 0x000a, 0x15c2: 0x000a, 0x15c3: 0x000a, 0x15c4: 0x000a, 0x15c5: 0x000a, + 0x15c6: 0x000a, 0x15c7: 0x000a, 0x15c8: 0x000a, 0x15c9: 0x000a, 0x15ca: 0x000a, 0x15cb: 0x000a, + 0x15cc: 0x000a, 0x15cd: 0x000a, 0x15ce: 0x000a, 0x15cf: 0x000a, 0x15d0: 0x000a, 0x15d1: 0x000a, + 0x15d2: 0x0003, 0x15d3: 0x0004, 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: 0x003a, 0x1609: 0x002a, 0x160a: 0x003a, 0x160b: 0x002a, + 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: 0x009a, + 0x162a: 0x008a, 0x162b: 0x000a, 0x162c: 0x000a, 0x162d: 0x000a, 0x162e: 0x000a, 0x162f: 0x000a, + 0x1630: 0x000a, 0x1631: 0x000a, 0x1632: 0x000a, 0x1633: 0x000a, 0x1634: 0x000a, 0x1635: 0x000a, + // Block 0x59, offset 0x1640 + 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: 0x000a, 0x1689: 0x000a, 0x168a: 0x000a, 0x168b: 0x000a, + 0x168c: 0x000a, 0x168d: 0x000a, 0x168e: 0x000a, 0x168f: 0x000a, 0x1690: 0x000a, 0x1691: 0x000a, + 0x1692: 0x000a, 0x1693: 0x000a, 0x1694: 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: 0x000a, + 0x16aa: 0x000a, 0x16ab: 0x000a, 0x16ac: 0x000a, 0x16ad: 0x000a, 0x16ae: 0x000a, 0x16af: 0x000a, + 0x16b0: 0x000a, 0x16b1: 0x000a, 0x16b2: 0x000a, 0x16b3: 0x000a, 0x16b4: 0x000a, 0x16b5: 0x000a, + 0x16b6: 0x000a, 0x16b7: 0x000a, 0x16b8: 0x000a, 0x16b9: 0x000a, 0x16ba: 0x000a, 0x16bb: 0x000a, + 0x16bc: 0x000a, 0x16bd: 0x000a, 0x16be: 0x000a, 0x16bf: 0x000a, + // Block 0x5b, offset 0x16c0 + 0x16c0: 0x000a, 0x16c1: 0x000a, 0x16c2: 0x000a, 0x16c3: 0x000a, 0x16c4: 0x000a, 0x16c5: 0x000a, + 0x16c6: 0x000a, 0x16c7: 0x000a, 0x16c8: 0x000a, 0x16c9: 0x000a, 0x16ca: 0x000a, 0x16cb: 0x000a, + 0x16cc: 0x000a, 0x16cd: 0x000a, 0x16ce: 0x000a, 0x16cf: 0x000a, 0x16d0: 0x000a, 0x16d1: 0x000a, + 0x16d2: 0x000a, 0x16d3: 0x000a, 0x16d4: 0x000a, 0x16d5: 0x000a, 0x16d6: 0x000a, 0x16d7: 0x000a, + 0x16d8: 0x000a, 0x16d9: 0x000a, 0x16da: 0x000a, 0x16db: 0x000a, 0x16dc: 0x000a, 0x16dd: 0x000a, + 0x16de: 0x000a, 0x16df: 0x000a, 0x16e0: 0x000a, 0x16e1: 0x000a, 0x16e2: 0x000a, 0x16e3: 0x000a, + 0x16e4: 0x000a, 0x16e5: 0x000a, 0x16e6: 0x000a, 0x16e7: 0x000a, 0x16e8: 0x000a, 0x16e9: 0x000a, + 0x16ea: 0x000a, 0x16eb: 0x000a, 0x16ec: 0x000a, 0x16ed: 0x000a, 0x16ee: 0x000a, 0x16ef: 0x000a, + 0x16f0: 0x000a, 0x16f1: 0x000a, 0x16f2: 0x000a, 0x16f3: 0x000a, 0x16f4: 0x000a, 0x16f5: 0x000a, + 0x16f6: 0x000a, 0x16f7: 0x000a, 0x16f8: 0x000a, 0x16f9: 0x000a, 0x16fa: 0x000a, 0x16fb: 0x000a, + 0x16fc: 0x000a, 0x16fd: 0x000a, 0x16fe: 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, 0x1715: 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, + // 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, + 0x1760: 0x000a, 0x1761: 0x000a, 0x1762: 0x000a, 0x1763: 0x000a, + 0x1764: 0x000a, 0x1765: 0x000a, 0x1766: 0x000a, 0x1767: 0x000a, 0x1768: 0x000a, 0x1769: 0x000a, + 0x176a: 0x000a, 0x176b: 0x000a, 0x176c: 0x000a, 0x176d: 0x000a, 0x176e: 0x000a, 0x176f: 0x000a, + 0x1770: 0x000a, 0x1771: 0x000a, 0x1772: 0x000a, 0x1773: 0x000a, 0x1774: 0x000a, 0x1775: 0x000a, + 0x1776: 0x000a, 0x1777: 0x000a, 0x1778: 0x000a, 0x1779: 0x000a, 0x177a: 0x000a, 0x177b: 0x000a, + 0x177c: 0x000a, 0x177d: 0x000a, 0x177e: 0x000a, 0x177f: 0x000a, + // Block 0x5e, offset 0x1780 + 0x1780: 0x000a, 0x1781: 0x000a, 0x1782: 0x000a, 0x1783: 0x000a, 0x1784: 0x000a, 0x1785: 0x000a, + 0x1786: 0x000a, 0x1787: 0x000a, 0x1788: 0x0002, 0x1789: 0x0002, 0x178a: 0x0002, 0x178b: 0x0002, + 0x178c: 0x0002, 0x178d: 0x0002, 0x178e: 0x0002, 0x178f: 0x0002, 0x1790: 0x0002, 0x1791: 0x0002, + 0x1792: 0x0002, 0x1793: 0x0002, 0x1794: 0x0002, 0x1795: 0x0002, 0x1796: 0x0002, 0x1797: 0x0002, + 0x1798: 0x0002, 0x1799: 0x0002, 0x179a: 0x0002, 0x179b: 0x0002, + // Block 0x5f, offset 0x17c0 + 0x17ea: 0x000a, 0x17eb: 0x000a, 0x17ec: 0x000a, 0x17ed: 0x000a, 0x17ee: 0x000a, 0x17ef: 0x000a, + 0x17f0: 0x000a, 0x17f1: 0x000a, 0x17f2: 0x000a, 0x17f3: 0x000a, 0x17f4: 0x000a, 0x17f5: 0x000a, + 0x17f6: 0x000a, 0x17f7: 0x000a, 0x17f8: 0x000a, 0x17f9: 0x000a, 0x17fa: 0x000a, 0x17fb: 0x000a, + 0x17fc: 0x000a, 0x17fd: 0x000a, 0x17fe: 0x000a, 0x17ff: 0x000a, + // Block 0x60, offset 0x1800 + 0x1800: 0x000a, 0x1801: 0x000a, 0x1802: 0x000a, 0x1803: 0x000a, 0x1804: 0x000a, 0x1805: 0x000a, + 0x1806: 0x000a, 0x1807: 0x000a, 0x1808: 0x000a, 0x1809: 0x000a, 0x180a: 0x000a, 0x180b: 0x000a, + 0x180c: 0x000a, 0x180d: 0x000a, 0x180e: 0x000a, 0x180f: 0x000a, 0x1810: 0x000a, 0x1811: 0x000a, + 0x1812: 0x000a, 0x1813: 0x000a, 0x1814: 0x000a, 0x1815: 0x000a, 0x1816: 0x000a, 0x1817: 0x000a, + 0x1818: 0x000a, 0x1819: 0x000a, 0x181a: 0x000a, 0x181b: 0x000a, 0x181c: 0x000a, 0x181d: 0x000a, + 0x181e: 0x000a, 0x181f: 0x000a, 0x1820: 0x000a, 0x1821: 0x000a, 0x1822: 0x000a, 0x1823: 0x000a, + 0x1824: 0x000a, 0x1825: 0x000a, 0x1826: 0x000a, 0x1827: 0x000a, 0x1828: 0x000a, 0x1829: 0x000a, + 0x182a: 0x000a, 0x182b: 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: 0x003a, 0x1869: 0x002a, + 0x186a: 0x003a, 0x186b: 0x002a, 0x186c: 0x003a, 0x186d: 0x002a, 0x186e: 0x003a, 0x186f: 0x002a, + 0x1870: 0x003a, 0x1871: 0x002a, 0x1872: 0x003a, 0x1873: 0x002a, 0x1874: 0x003a, 0x1875: 0x002a, + 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: 0x009a, + 0x1886: 0x008a, 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: 0x003a, 0x18a7: 0x002a, 0x18a8: 0x003a, 0x18a9: 0x002a, + 0x18aa: 0x003a, 0x18ab: 0x002a, 0x18ac: 0x003a, 0x18ad: 0x002a, 0x18ae: 0x003a, 0x18af: 0x002a, + 0x18b0: 0x000a, 0x18b1: 0x000a, 0x18b2: 0x000a, 0x18b3: 0x000a, 0x18b4: 0x000a, 0x18b5: 0x000a, + 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: 0x007a, 0x18c4: 0x006a, 0x18c5: 0x009a, + 0x18c6: 0x008a, 0x18c7: 0x00ba, 0x18c8: 0x00aa, 0x18c9: 0x009a, 0x18ca: 0x008a, 0x18cb: 0x007a, + 0x18cc: 0x006a, 0x18cd: 0x00da, 0x18ce: 0x002a, 0x18cf: 0x003a, 0x18d0: 0x00ca, 0x18d1: 0x009a, + 0x18d2: 0x008a, 0x18d3: 0x007a, 0x18d4: 0x006a, 0x18d5: 0x009a, 0x18d6: 0x008a, 0x18d7: 0x00ba, + 0x18d8: 0x00aa, 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: 0x000a, 0x18e7: 0x000a, 0x18e8: 0x000a, 0x18e9: 0x000a, + 0x18ea: 0x000a, 0x18eb: 0x000a, 0x18ec: 0x000a, 0x18ed: 0x000a, 0x18ee: 0x000a, 0x18ef: 0x000a, + 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: 0x000a, 0x1904: 0x000a, 0x1905: 0x000a, + 0x1906: 0x000a, 0x1907: 0x000a, 0x1908: 0x000a, 0x1909: 0x000a, 0x190a: 0x000a, 0x190b: 0x000a, + 0x190c: 0x000a, 0x190d: 0x000a, 0x190e: 0x000a, 0x190f: 0x000a, 0x1910: 0x000a, 0x1911: 0x000a, + 0x1912: 0x000a, 0x1913: 0x000a, 0x1914: 0x000a, 0x1915: 0x000a, 0x1916: 0x000a, 0x1917: 0x000a, + 0x1918: 0x003a, 0x1919: 0x002a, 0x191a: 0x003a, 0x191b: 0x002a, 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: 0x003a, 0x193d: 0x002a, 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: 0x000a, 0x1959: 0x000a, 0x195a: 0x000a, 0x195b: 0x000a, 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, + 0x1976: 0x000a, 0x1977: 0x000a, 0x1978: 0x000a, 0x1979: 0x000a, 0x197a: 0x000a, 0x197b: 0x000a, + 0x197c: 0x000a, 0x197d: 0x000a, 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, + 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, 0x19b4: 0x000a, 0x19b5: 0x000a, + 0x19b6: 0x000a, 0x19b7: 0x000a, 0x19b8: 0x000a, 0x19b9: 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, 0x19ca: 0x000a, 0x19cb: 0x000a, + 0x19cc: 0x000a, 0x19cd: 0x000a, 0x19ce: 0x000a, 0x19cf: 0x000a, 0x19d0: 0x000a, 0x19d1: 0x000a, + 0x19ec: 0x000a, 0x19ed: 0x000a, 0x19ee: 0x000a, 0x19ef: 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, + // 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, + 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, + // 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, + // 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 + 0x2365: 0x000c, 0x2368: 0x000c, + 0x236d: 0x000c, + // Block 0x8e, offset 0x2380 + 0x239d: 0x0001, + 0x239e: 0x000c, 0x239f: 0x0001, 0x23a0: 0x0001, 0x23a1: 0x0001, 0x23a2: 0x0001, 0x23a3: 0x0001, + 0x23a4: 0x0001, 0x23a5: 0x0001, 0x23a6: 0x0001, 0x23a7: 0x0001, 0x23a8: 0x0001, 0x23a9: 0x0003, + 0x23aa: 0x0001, 0x23ab: 0x0001, 0x23ac: 0x0001, 0x23ad: 0x0001, 0x23ae: 0x0001, 0x23af: 0x0001, + 0x23b0: 0x0001, 0x23b1: 0x0001, 0x23b2: 0x0001, 0x23b3: 0x0001, 0x23b4: 0x0001, 0x23b5: 0x0001, + 0x23b6: 0x0001, 0x23b7: 0x0001, 0x23b8: 0x0001, 0x23b9: 0x0001, 0x23ba: 0x0001, 0x23bb: 0x0001, + 0x23bc: 0x0001, 0x23bd: 0x0001, 0x23be: 0x0001, 0x23bf: 0x0001, + // Block 0x8f, offset 0x23c0 + 0x23c0: 0x0001, 0x23c1: 0x0001, 0x23c2: 0x0001, 0x23c3: 0x0001, 0x23c4: 0x0001, 0x23c5: 0x0001, + 0x23c6: 0x0001, 0x23c7: 0x0001, 0x23c8: 0x0001, 0x23c9: 0x0001, 0x23ca: 0x0001, 0x23cb: 0x0001, + 0x23cc: 0x0001, 0x23cd: 0x0001, 0x23ce: 0x0001, 0x23cf: 0x0001, 0x23d0: 0x000d, 0x23d1: 0x000d, + 0x23d2: 0x000d, 0x23d3: 0x000d, 0x23d4: 0x000d, 0x23d5: 0x000d, 0x23d6: 0x000d, 0x23d7: 0x000d, + 0x23d8: 0x000d, 0x23d9: 0x000d, 0x23da: 0x000d, 0x23db: 0x000d, 0x23dc: 0x000d, 0x23dd: 0x000d, + 0x23de: 0x000d, 0x23df: 0x000d, 0x23e0: 0x000d, 0x23e1: 0x000d, 0x23e2: 0x000d, 0x23e3: 0x000d, + 0x23e4: 0x000d, 0x23e5: 0x000d, 0x23e6: 0x000d, 0x23e7: 0x000d, 0x23e8: 0x000d, 0x23e9: 0x000d, + 0x23ea: 0x000d, 0x23eb: 0x000d, 0x23ec: 0x000d, 0x23ed: 0x000d, 0x23ee: 0x000d, 0x23ef: 0x000d, + 0x23f0: 0x000d, 0x23f1: 0x000d, 0x23f2: 0x000d, 0x23f3: 0x000d, 0x23f4: 0x000d, 0x23f5: 0x000d, + 0x23f6: 0x000d, 0x23f7: 0x000d, 0x23f8: 0x000d, 0x23f9: 0x000d, 0x23fa: 0x000d, 0x23fb: 0x000d, + 0x23fc: 0x000d, 0x23fd: 0x000d, 0x23fe: 0x000d, 0x23ff: 0x000d, + // Block 0x90, offset 0x2400 + 0x2400: 0x000d, 0x2401: 0x000d, 0x2402: 0x000d, 0x2403: 0x000d, 0x2404: 0x000d, 0x2405: 0x000d, + 0x2406: 0x000d, 0x2407: 0x000d, 0x2408: 0x000d, 0x2409: 0x000d, 0x240a: 0x000d, 0x240b: 0x000d, + 0x240c: 0x000d, 0x240d: 0x000d, 0x240e: 0x000d, 0x240f: 0x000d, 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: 0x000a, 0x243f: 0x000a, + // 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: 0x000b, 0x2451: 0x000b, + 0x2452: 0x000b, 0x2453: 0x000b, 0x2454: 0x000b, 0x2455: 0x000b, 0x2456: 0x000b, 0x2457: 0x000b, + 0x2458: 0x000b, 0x2459: 0x000b, 0x245a: 0x000b, 0x245b: 0x000b, 0x245c: 0x000b, 0x245d: 0x000b, + 0x245e: 0x000b, 0x245f: 0x000b, 0x2460: 0x000b, 0x2461: 0x000b, 0x2462: 0x000b, 0x2463: 0x000b, + 0x2464: 0x000b, 0x2465: 0x000b, 0x2466: 0x000b, 0x2467: 0x000b, 0x2468: 0x000b, 0x2469: 0x000b, + 0x246a: 0x000b, 0x246b: 0x000b, 0x246c: 0x000b, 0x246d: 0x000b, 0x246e: 0x000b, 0x246f: 0x000b, + 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: 0x000a, 0x247e: 0x000d, 0x247f: 0x000d, + // Block 0x92, offset 0x2480 + 0x2480: 0x000c, 0x2481: 0x000c, 0x2482: 0x000c, 0x2483: 0x000c, 0x2484: 0x000c, 0x2485: 0x000c, + 0x2486: 0x000c, 0x2487: 0x000c, 0x2488: 0x000c, 0x2489: 0x000c, 0x248a: 0x000c, 0x248b: 0x000c, + 0x248c: 0x000c, 0x248d: 0x000c, 0x248e: 0x000c, 0x248f: 0x000c, 0x2490: 0x000a, 0x2491: 0x000a, + 0x2492: 0x000a, 0x2493: 0x000a, 0x2494: 0x000a, 0x2495: 0x000a, 0x2496: 0x000a, 0x2497: 0x000a, + 0x2498: 0x000a, 0x2499: 0x000a, + 0x24a0: 0x000c, 0x24a1: 0x000c, 0x24a2: 0x000c, 0x24a3: 0x000c, + 0x24a4: 0x000c, 0x24a5: 0x000c, 0x24a6: 0x000c, 0x24a7: 0x000c, 0x24a8: 0x000c, 0x24a9: 0x000c, + 0x24aa: 0x000c, 0x24ab: 0x000c, 0x24ac: 0x000c, 0x24ad: 0x000c, 0x24ae: 0x000c, 0x24af: 0x000c, + 0x24b0: 0x000a, 0x24b1: 0x000a, 0x24b2: 0x000a, 0x24b3: 0x000a, 0x24b4: 0x000a, 0x24b5: 0x000a, + 0x24b6: 0x000a, 0x24b7: 0x000a, 0x24b8: 0x000a, 0x24b9: 0x000a, 0x24ba: 0x000a, 0x24bb: 0x000a, + 0x24bc: 0x000a, 0x24bd: 0x000a, 0x24be: 0x000a, 0x24bf: 0x000a, + // Block 0x93, offset 0x24c0 + 0x24c0: 0x000a, 0x24c1: 0x000a, 0x24c2: 0x000a, 0x24c3: 0x000a, 0x24c4: 0x000a, 0x24c5: 0x000a, + 0x24c6: 0x000a, 0x24c7: 0x000a, 0x24c8: 0x000a, 0x24c9: 0x000a, 0x24ca: 0x000a, 0x24cb: 0x000a, + 0x24cc: 0x000a, 0x24cd: 0x000a, 0x24ce: 0x000a, 0x24cf: 0x000a, 0x24d0: 0x0006, 0x24d1: 0x000a, + 0x24d2: 0x0006, 0x24d4: 0x000a, 0x24d5: 0x0006, 0x24d6: 0x000a, 0x24d7: 0x000a, + 0x24d8: 0x000a, 0x24d9: 0x009a, 0x24da: 0x008a, 0x24db: 0x007a, 0x24dc: 0x006a, 0x24dd: 0x009a, + 0x24de: 0x008a, 0x24df: 0x0004, 0x24e0: 0x000a, 0x24e1: 0x000a, 0x24e2: 0x0003, 0x24e3: 0x0003, + 0x24e4: 0x000a, 0x24e5: 0x000a, 0x24e6: 0x000a, 0x24e8: 0x000a, 0x24e9: 0x0004, + 0x24ea: 0x0004, 0x24eb: 0x000a, + 0x24f0: 0x000d, 0x24f1: 0x000d, 0x24f2: 0x000d, 0x24f3: 0x000d, 0x24f4: 0x000d, 0x24f5: 0x000d, + 0x24f6: 0x000d, 0x24f7: 0x000d, 0x24f8: 0x000d, 0x24f9: 0x000d, 0x24fa: 0x000d, 0x24fb: 0x000d, + 0x24fc: 0x000d, 0x24fd: 0x000d, 0x24fe: 0x000d, 0x24ff: 0x000d, + // Block 0x94, offset 0x2500 + 0x2500: 0x000d, 0x2501: 0x000d, 0x2502: 0x000d, 0x2503: 0x000d, 0x2504: 0x000d, 0x2505: 0x000d, + 0x2506: 0x000d, 0x2507: 0x000d, 0x2508: 0x000d, 0x2509: 0x000d, 0x250a: 0x000d, 0x250b: 0x000d, + 0x250c: 0x000d, 0x250d: 0x000d, 0x250e: 0x000d, 0x250f: 0x000d, 0x2510: 0x000d, 0x2511: 0x000d, + 0x2512: 0x000d, 0x2513: 0x000d, 0x2514: 0x000d, 0x2515: 0x000d, 0x2516: 0x000d, 0x2517: 0x000d, + 0x2518: 0x000d, 0x2519: 0x000d, 0x251a: 0x000d, 0x251b: 0x000d, 0x251c: 0x000d, 0x251d: 0x000d, + 0x251e: 0x000d, 0x251f: 0x000d, 0x2520: 0x000d, 0x2521: 0x000d, 0x2522: 0x000d, 0x2523: 0x000d, + 0x2524: 0x000d, 0x2525: 0x000d, 0x2526: 0x000d, 0x2527: 0x000d, 0x2528: 0x000d, 0x2529: 0x000d, + 0x252a: 0x000d, 0x252b: 0x000d, 0x252c: 0x000d, 0x252d: 0x000d, 0x252e: 0x000d, 0x252f: 0x000d, + 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: 0x000b, + // Block 0x95, offset 0x2540 + 0x2541: 0x000a, 0x2542: 0x000a, 0x2543: 0x0004, 0x2544: 0x0004, 0x2545: 0x0004, + 0x2546: 0x000a, 0x2547: 0x000a, 0x2548: 0x003a, 0x2549: 0x002a, 0x254a: 0x000a, 0x254b: 0x0003, + 0x254c: 0x0006, 0x254d: 0x0003, 0x254e: 0x0006, 0x254f: 0x0006, 0x2550: 0x0002, 0x2551: 0x0002, + 0x2552: 0x0002, 0x2553: 0x0002, 0x2554: 0x0002, 0x2555: 0x0002, 0x2556: 0x0002, 0x2557: 0x0002, + 0x2558: 0x0002, 0x2559: 0x0002, 0x255a: 0x0006, 0x255b: 0x000a, 0x255c: 0x000a, 0x255d: 0x000a, + 0x255e: 0x000a, 0x255f: 0x000a, 0x2560: 0x000a, + 0x257b: 0x005a, + 0x257c: 0x000a, 0x257d: 0x004a, 0x257e: 0x000a, 0x257f: 0x000a, + // Block 0x96, offset 0x2580 + 0x2580: 0x000a, + 0x259b: 0x005a, 0x259c: 0x000a, 0x259d: 0x004a, + 0x259e: 0x000a, 0x259f: 0x00fa, 0x25a0: 0x00ea, 0x25a1: 0x000a, 0x25a2: 0x003a, 0x25a3: 0x002a, + 0x25a4: 0x000a, 0x25a5: 0x000a, + // Block 0x97, offset 0x25c0 + 0x25e0: 0x0004, 0x25e1: 0x0004, 0x25e2: 0x000a, 0x25e3: 0x000a, + 0x25e4: 0x000a, 0x25e5: 0x0004, 0x25e6: 0x0004, 0x25e8: 0x000a, 0x25e9: 0x000a, + 0x25ea: 0x000a, 0x25eb: 0x000a, 0x25ec: 0x000a, 0x25ed: 0x000a, 0x25ee: 0x000a, + 0x25f0: 0x000b, 0x25f1: 0x000b, 0x25f2: 0x000b, 0x25f3: 0x000b, 0x25f4: 0x000b, 0x25f5: 0x000b, + 0x25f6: 0x000b, 0x25f7: 0x000b, 0x25f8: 0x000b, 0x25f9: 0x000a, 0x25fa: 0x000a, 0x25fb: 0x000a, + 0x25fc: 0x000a, 0x25fd: 0x000a, 0x25fe: 0x000b, 0x25ff: 0x000b, + // Block 0x98, offset 0x2600 + 0x2601: 0x000a, + // Block 0x99, offset 0x2640 + 0x2640: 0x000a, 0x2641: 0x000a, 0x2642: 0x000a, 0x2643: 0x000a, 0x2644: 0x000a, 0x2645: 0x000a, + 0x2646: 0x000a, 0x2647: 0x000a, 0x2648: 0x000a, 0x2649: 0x000a, 0x264a: 0x000a, 0x264b: 0x000a, + 0x264c: 0x000a, 0x2650: 0x000a, 0x2651: 0x000a, + 0x2652: 0x000a, 0x2653: 0x000a, 0x2654: 0x000a, 0x2655: 0x000a, 0x2656: 0x000a, 0x2657: 0x000a, + 0x2658: 0x000a, 0x2659: 0x000a, 0x265a: 0x000a, 0x265b: 0x000a, + 0x2660: 0x000a, + // Block 0x9a, offset 0x2680 + 0x26bd: 0x000c, + // Block 0x9b, offset 0x26c0 + 0x26e0: 0x000c, 0x26e1: 0x0002, 0x26e2: 0x0002, 0x26e3: 0x0002, + 0x26e4: 0x0002, 0x26e5: 0x0002, 0x26e6: 0x0002, 0x26e7: 0x0002, 0x26e8: 0x0002, 0x26e9: 0x0002, + 0x26ea: 0x0002, 0x26eb: 0x0002, 0x26ec: 0x0002, 0x26ed: 0x0002, 0x26ee: 0x0002, 0x26ef: 0x0002, + 0x26f0: 0x0002, 0x26f1: 0x0002, 0x26f2: 0x0002, 0x26f3: 0x0002, 0x26f4: 0x0002, 0x26f5: 0x0002, + 0x26f6: 0x0002, 0x26f7: 0x0002, 0x26f8: 0x0002, 0x26f9: 0x0002, 0x26fa: 0x0002, 0x26fb: 0x0002, + // Block 0x9c, offset 0x2700 + 0x2736: 0x000c, 0x2737: 0x000c, 0x2738: 0x000c, 0x2739: 0x000c, 0x273a: 0x000c, + // Block 0x9d, offset 0x2740 + 0x2740: 0x0001, 0x2741: 0x0001, 0x2742: 0x0001, 0x2743: 0x0001, 0x2744: 0x0001, 0x2745: 0x0001, + 0x2746: 0x0001, 0x2747: 0x0001, 0x2748: 0x0001, 0x2749: 0x0001, 0x274a: 0x0001, 0x274b: 0x0001, + 0x274c: 0x0001, 0x274d: 0x0001, 0x274e: 0x0001, 0x274f: 0x0001, 0x2750: 0x0001, 0x2751: 0x0001, + 0x2752: 0x0001, 0x2753: 0x0001, 0x2754: 0x0001, 0x2755: 0x0001, 0x2756: 0x0001, 0x2757: 0x0001, + 0x2758: 0x0001, 0x2759: 0x0001, 0x275a: 0x0001, 0x275b: 0x0001, 0x275c: 0x0001, 0x275d: 0x0001, + 0x275e: 0x0001, 0x275f: 0x0001, 0x2760: 0x0001, 0x2761: 0x0001, 0x2762: 0x0001, 0x2763: 0x0001, + 0x2764: 0x0001, 0x2765: 0x0001, 0x2766: 0x0001, 0x2767: 0x0001, 0x2768: 0x0001, 0x2769: 0x0001, + 0x276a: 0x0001, 0x276b: 0x0001, 0x276c: 0x0001, 0x276d: 0x0001, 0x276e: 0x0001, 0x276f: 0x0001, + 0x2770: 0x0001, 0x2771: 0x0001, 0x2772: 0x0001, 0x2773: 0x0001, 0x2774: 0x0001, 0x2775: 0x0001, + 0x2776: 0x0001, 0x2777: 0x0001, 0x2778: 0x0001, 0x2779: 0x0001, 0x277a: 0x0001, 0x277b: 0x0001, + 0x277c: 0x0001, 0x277d: 0x0001, 0x277e: 0x0001, 0x277f: 0x0001, + // 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: 0x000a, 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: 0x000c, 0x27c2: 0x000c, 0x27c3: 0x000c, 0x27c4: 0x0001, 0x27c5: 0x000c, + 0x27c6: 0x000c, 0x27c7: 0x0001, 0x27c8: 0x0001, 0x27c9: 0x0001, 0x27ca: 0x0001, 0x27cb: 0x0001, + 0x27cc: 0x000c, 0x27cd: 0x000c, 0x27ce: 0x000c, 0x27cf: 0x000c, 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: 0x0001, 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: 0x000c, 0x27f9: 0x000c, 0x27fa: 0x000c, 0x27fb: 0x0001, + 0x27fc: 0x0001, 0x27fd: 0x0001, 0x27fe: 0x0001, 0x27ff: 0x000c, + // Block 0xa0, offset 0x2800 + 0x2800: 0x0001, 0x2801: 0x0001, 0x2802: 0x0001, 0x2803: 0x0001, 0x2804: 0x0001, 0x2805: 0x0001, + 0x2806: 0x0001, 0x2807: 0x0001, 0x2808: 0x0001, 0x2809: 0x0001, 0x280a: 0x0001, 0x280b: 0x0001, + 0x280c: 0x0001, 0x280d: 0x0001, 0x280e: 0x0001, 0x280f: 0x0001, 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: 0x000c, 0x2826: 0x000c, 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: 0x0001, 0x2839: 0x0001, 0x283a: 0x0001, 0x283b: 0x0001, + 0x283c: 0x0001, 0x283d: 0x0001, 0x283e: 0x0001, 0x283f: 0x0001, + // 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: 0x0001, 0x2866: 0x0001, 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: 0x000a, 0x287a: 0x000a, 0x287b: 0x000a, + 0x287c: 0x000a, 0x287d: 0x000a, 0x287e: 0x000a, 0x287f: 0x000a, + // 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: 0x0005, 0x28a1: 0x0005, 0x28a2: 0x0005, 0x28a3: 0x0005, + 0x28a4: 0x0005, 0x28a5: 0x0005, 0x28a6: 0x0005, 0x28a7: 0x0005, 0x28a8: 0x0005, 0x28a9: 0x0005, + 0x28aa: 0x0005, 0x28ab: 0x0005, 0x28ac: 0x0005, 0x28ad: 0x0005, 0x28ae: 0x0005, 0x28af: 0x0005, + 0x28b0: 0x0005, 0x28b1: 0x0005, 0x28b2: 0x0005, 0x28b3: 0x0005, 0x28b4: 0x0005, 0x28b5: 0x0005, + 0x28b6: 0x0005, 0x28b7: 0x0005, 0x28b8: 0x0005, 0x28b9: 0x0005, 0x28ba: 0x0005, 0x28bb: 0x0005, + 0x28bc: 0x0005, 0x28bd: 0x0005, 0x28be: 0x0005, 0x28bf: 0x0001, + // Block 0xa3, offset 0x28c0 + 0x28c1: 0x000c, + 0x28f8: 0x000c, 0x28f9: 0x000c, 0x28fa: 0x000c, 0x28fb: 0x000c, + 0x28fc: 0x000c, 0x28fd: 0x000c, 0x28fe: 0x000c, 0x28ff: 0x000c, + // Block 0xa4, offset 0x2900 + 0x2900: 0x000c, 0x2901: 0x000c, 0x2902: 0x000c, 0x2903: 0x000c, 0x2904: 0x000c, 0x2905: 0x000c, + 0x2906: 0x000c, + 0x2912: 0x000a, 0x2913: 0x000a, 0x2914: 0x000a, 0x2915: 0x000a, 0x2916: 0x000a, 0x2917: 0x000a, + 0x2918: 0x000a, 0x2919: 0x000a, 0x291a: 0x000a, 0x291b: 0x000a, 0x291c: 0x000a, 0x291d: 0x000a, + 0x291e: 0x000a, 0x291f: 0x000a, 0x2920: 0x000a, 0x2921: 0x000a, 0x2922: 0x000a, 0x2923: 0x000a, + 0x2924: 0x000a, 0x2925: 0x000a, + 0x293f: 0x000c, + // Block 0xa5, offset 0x2940 + 0x2940: 0x000c, 0x2941: 0x000c, + 0x2973: 0x000c, 0x2974: 0x000c, 0x2975: 0x000c, + 0x2976: 0x000c, 0x2979: 0x000c, 0x297a: 0x000c, + // Block 0xa6, offset 0x2980 + 0x2980: 0x000c, 0x2981: 0x000c, 0x2982: 0x000c, + 0x29a7: 0x000c, 0x29a8: 0x000c, 0x29a9: 0x000c, + 0x29aa: 0x000c, 0x29ab: 0x000c, 0x29ad: 0x000c, 0x29ae: 0x000c, 0x29af: 0x000c, + 0x29b0: 0x000c, 0x29b1: 0x000c, 0x29b2: 0x000c, 0x29b3: 0x000c, 0x29b4: 0x000c, + // Block 0xa7, offset 0x29c0 + 0x29f3: 0x000c, + // Block 0xa8, offset 0x2a00 + 0x2a00: 0x000c, 0x2a01: 0x000c, + 0x2a36: 0x000c, 0x2a37: 0x000c, 0x2a38: 0x000c, 0x2a39: 0x000c, 0x2a3a: 0x000c, 0x2a3b: 0x000c, + 0x2a3c: 0x000c, 0x2a3d: 0x000c, 0x2a3e: 0x000c, + // Block 0xa9, offset 0x2a40 + 0x2a4a: 0x000c, 0x2a4b: 0x000c, + 0x2a4c: 0x000c, + // Block 0xaa, offset 0x2a80 + 0x2aaf: 0x000c, + 0x2ab0: 0x000c, 0x2ab1: 0x000c, 0x2ab4: 0x000c, + 0x2ab6: 0x000c, 0x2ab7: 0x000c, + 0x2abe: 0x000c, + // Block 0xab, offset 0x2ac0 + 0x2adf: 0x000c, 0x2ae3: 0x000c, + 0x2ae4: 0x000c, 0x2ae5: 0x000c, 0x2ae6: 0x000c, 0x2ae7: 0x000c, 0x2ae8: 0x000c, 0x2ae9: 0x000c, + 0x2aea: 0x000c, + // Block 0xac, offset 0x2b00 + 0x2b00: 0x000c, 0x2b01: 0x000c, + 0x2b3c: 0x000c, + // Block 0xad, offset 0x2b40 + 0x2b40: 0x000c, + 0x2b66: 0x000c, 0x2b67: 0x000c, 0x2b68: 0x000c, 0x2b69: 0x000c, + 0x2b6a: 0x000c, 0x2b6b: 0x000c, 0x2b6c: 0x000c, + 0x2b70: 0x000c, 0x2b71: 0x000c, 0x2b72: 0x000c, 0x2b73: 0x000c, 0x2b74: 0x000c, + // Block 0xae, offset 0x2b80 + 0x2bb8: 0x000c, 0x2bb9: 0x000c, 0x2bba: 0x000c, 0x2bbb: 0x000c, + 0x2bbc: 0x000c, 0x2bbd: 0x000c, 0x2bbe: 0x000c, 0x2bbf: 0x000c, + // Block 0xaf, offset 0x2bc0 + 0x2bc2: 0x000c, 0x2bc3: 0x000c, 0x2bc4: 0x000c, + 0x2bc6: 0x000c, + // Block 0xb0, offset 0x2c00 + 0x2c33: 0x000c, 0x2c34: 0x000c, 0x2c35: 0x000c, + 0x2c36: 0x000c, 0x2c37: 0x000c, 0x2c38: 0x000c, 0x2c3a: 0x000c, + 0x2c3f: 0x000c, + // Block 0xb1, offset 0x2c40 + 0x2c40: 0x000c, 0x2c42: 0x000c, 0x2c43: 0x000c, + // Block 0xb2, offset 0x2c80 + 0x2cb2: 0x000c, 0x2cb3: 0x000c, 0x2cb4: 0x000c, 0x2cb5: 0x000c, + 0x2cbc: 0x000c, 0x2cbd: 0x000c, 0x2cbf: 0x000c, + // Block 0xb3, offset 0x2cc0 + 0x2cc0: 0x000c, + 0x2cdc: 0x000c, 0x2cdd: 0x000c, + // Block 0xb4, offset 0x2d00 + 0x2d33: 0x000c, 0x2d34: 0x000c, 0x2d35: 0x000c, + 0x2d36: 0x000c, 0x2d37: 0x000c, 0x2d38: 0x000c, 0x2d39: 0x000c, 0x2d3a: 0x000c, + 0x2d3d: 0x000c, 0x2d3f: 0x000c, + // Block 0xb5, offset 0x2d40 + 0x2d40: 0x000c, + 0x2d60: 0x000a, 0x2d61: 0x000a, 0x2d62: 0x000a, 0x2d63: 0x000a, + 0x2d64: 0x000a, 0x2d65: 0x000a, 0x2d66: 0x000a, 0x2d67: 0x000a, 0x2d68: 0x000a, 0x2d69: 0x000a, + 0x2d6a: 0x000a, 0x2d6b: 0x000a, 0x2d6c: 0x000a, + // Block 0xb6, offset 0x2d80 + 0x2dab: 0x000c, 0x2dad: 0x000c, + 0x2db0: 0x000c, 0x2db1: 0x000c, 0x2db2: 0x000c, 0x2db3: 0x000c, 0x2db4: 0x000c, 0x2db5: 0x000c, + 0x2db7: 0x000c, + // Block 0xb7, offset 0x2dc0 + 0x2ddd: 0x000c, + 0x2dde: 0x000c, 0x2ddf: 0x000c, 0x2de2: 0x000c, 0x2de3: 0x000c, + 0x2de4: 0x000c, 0x2de5: 0x000c, 0x2de7: 0x000c, 0x2de8: 0x000c, 0x2de9: 0x000c, + 0x2dea: 0x000c, 0x2deb: 0x000c, + // Block 0xb8, offset 0x2e00 + 0x2e30: 0x000c, 0x2e31: 0x000c, 0x2e32: 0x000c, 0x2e33: 0x000c, 0x2e34: 0x000c, 0x2e35: 0x000c, + 0x2e36: 0x000c, 0x2e38: 0x000c, 0x2e39: 0x000c, 0x2e3a: 0x000c, 0x2e3b: 0x000c, + 0x2e3c: 0x000c, 0x2e3d: 0x000c, + // Block 0xb9, offset 0x2e40 + 0x2e52: 0x000c, 0x2e53: 0x000c, 0x2e54: 0x000c, 0x2e55: 0x000c, 0x2e56: 0x000c, 0x2e57: 0x000c, + 0x2e58: 0x000c, 0x2e59: 0x000c, 0x2e5a: 0x000c, 0x2e5b: 0x000c, 0x2e5c: 0x000c, 0x2e5d: 0x000c, + 0x2e5e: 0x000c, 0x2e5f: 0x000c, 0x2e60: 0x000c, 0x2e61: 0x000c, 0x2e62: 0x000c, 0x2e63: 0x000c, + 0x2e64: 0x000c, 0x2e65: 0x000c, 0x2e66: 0x000c, 0x2e67: 0x000c, + 0x2e6a: 0x000c, 0x2e6b: 0x000c, 0x2e6c: 0x000c, 0x2e6d: 0x000c, 0x2e6e: 0x000c, 0x2e6f: 0x000c, + 0x2e70: 0x000c, 0x2e72: 0x000c, 0x2e73: 0x000c, 0x2e75: 0x000c, + 0x2e76: 0x000c, + // Block 0xba, offset 0x2e80 + 0x2eb0: 0x000c, 0x2eb1: 0x000c, 0x2eb2: 0x000c, 0x2eb3: 0x000c, 0x2eb4: 0x000c, + // Block 0xbb, offset 0x2ec0 + 0x2ef0: 0x000c, 0x2ef1: 0x000c, 0x2ef2: 0x000c, 0x2ef3: 0x000c, 0x2ef4: 0x000c, 0x2ef5: 0x000c, + 0x2ef6: 0x000c, + // Block 0xbc, offset 0x2f00 + 0x2f0f: 0x000c, 0x2f10: 0x000c, 0x2f11: 0x000c, + 0x2f12: 0x000c, + // Block 0xbd, offset 0x2f40 + 0x2f5d: 0x000c, + 0x2f5e: 0x000c, 0x2f60: 0x000b, 0x2f61: 0x000b, 0x2f62: 0x000b, 0x2f63: 0x000b, + // Block 0xbe, offset 0x2f80 + 0x2fa7: 0x000c, 0x2fa8: 0x000c, 0x2fa9: 0x000c, + 0x2fb3: 0x000b, 0x2fb4: 0x000b, 0x2fb5: 0x000b, + 0x2fb6: 0x000b, 0x2fb7: 0x000b, 0x2fb8: 0x000b, 0x2fb9: 0x000b, 0x2fba: 0x000b, 0x2fbb: 0x000c, + 0x2fbc: 0x000c, 0x2fbd: 0x000c, 0x2fbe: 0x000c, 0x2fbf: 0x000c, + // Block 0xbf, offset 0x2fc0 + 0x2fc0: 0x000c, 0x2fc1: 0x000c, 0x2fc2: 0x000c, 0x2fc5: 0x000c, + 0x2fc6: 0x000c, 0x2fc7: 0x000c, 0x2fc8: 0x000c, 0x2fc9: 0x000c, 0x2fca: 0x000c, 0x2fcb: 0x000c, + 0x2fea: 0x000c, 0x2feb: 0x000c, 0x2fec: 0x000c, 0x2fed: 0x000c, + // Block 0xc0, offset 0x3000 + 0x3000: 0x000a, 0x3001: 0x000a, 0x3002: 0x000c, 0x3003: 0x000c, 0x3004: 0x000c, 0x3005: 0x000a, + // Block 0xc1, offset 0x3040 + 0x3040: 0x000a, 0x3041: 0x000a, 0x3042: 0x000a, 0x3043: 0x000a, 0x3044: 0x000a, 0x3045: 0x000a, + 0x3046: 0x000a, 0x3047: 0x000a, 0x3048: 0x000a, 0x3049: 0x000a, 0x304a: 0x000a, 0x304b: 0x000a, + 0x304c: 0x000a, 0x304d: 0x000a, 0x304e: 0x000a, 0x304f: 0x000a, 0x3050: 0x000a, 0x3051: 0x000a, + 0x3052: 0x000a, 0x3053: 0x000a, 0x3054: 0x000a, 0x3055: 0x000a, 0x3056: 0x000a, + // Block 0xc2, offset 0x3080 + 0x309b: 0x000a, + // Block 0xc3, offset 0x30c0 + 0x30d5: 0x000a, + // Block 0xc4, offset 0x3100 + 0x310f: 0x000a, + // Block 0xc5, offset 0x3140 + 0x3149: 0x000a, + // Block 0xc6, offset 0x3180 + 0x3183: 0x000a, + 0x318e: 0x0002, 0x318f: 0x0002, 0x3190: 0x0002, 0x3191: 0x0002, + 0x3192: 0x0002, 0x3193: 0x0002, 0x3194: 0x0002, 0x3195: 0x0002, 0x3196: 0x0002, 0x3197: 0x0002, + 0x3198: 0x0002, 0x3199: 0x0002, 0x319a: 0x0002, 0x319b: 0x0002, 0x319c: 0x0002, 0x319d: 0x0002, + 0x319e: 0x0002, 0x319f: 0x0002, 0x31a0: 0x0002, 0x31a1: 0x0002, 0x31a2: 0x0002, 0x31a3: 0x0002, + 0x31a4: 0x0002, 0x31a5: 0x0002, 0x31a6: 0x0002, 0x31a7: 0x0002, 0x31a8: 0x0002, 0x31a9: 0x0002, + 0x31aa: 0x0002, 0x31ab: 0x0002, 0x31ac: 0x0002, 0x31ad: 0x0002, 0x31ae: 0x0002, 0x31af: 0x0002, + 0x31b0: 0x0002, 0x31b1: 0x0002, 0x31b2: 0x0002, 0x31b3: 0x0002, 0x31b4: 0x0002, 0x31b5: 0x0002, + 0x31b6: 0x0002, 0x31b7: 0x0002, 0x31b8: 0x0002, 0x31b9: 0x0002, 0x31ba: 0x0002, 0x31bb: 0x0002, + 0x31bc: 0x0002, 0x31bd: 0x0002, 0x31be: 0x0002, 0x31bf: 0x0002, + // Block 0xc7, offset 0x31c0 + 0x31c0: 0x000c, 0x31c1: 0x000c, 0x31c2: 0x000c, 0x31c3: 0x000c, 0x31c4: 0x000c, 0x31c5: 0x000c, + 0x31c6: 0x000c, 0x31c7: 0x000c, 0x31c8: 0x000c, 0x31c9: 0x000c, 0x31ca: 0x000c, 0x31cb: 0x000c, + 0x31cc: 0x000c, 0x31cd: 0x000c, 0x31ce: 0x000c, 0x31cf: 0x000c, 0x31d0: 0x000c, 0x31d1: 0x000c, + 0x31d2: 0x000c, 0x31d3: 0x000c, 0x31d4: 0x000c, 0x31d5: 0x000c, 0x31d6: 0x000c, 0x31d7: 0x000c, + 0x31d8: 0x000c, 0x31d9: 0x000c, 0x31da: 0x000c, 0x31db: 0x000c, 0x31dc: 0x000c, 0x31dd: 0x000c, + 0x31de: 0x000c, 0x31df: 0x000c, 0x31e0: 0x000c, 0x31e1: 0x000c, 0x31e2: 0x000c, 0x31e3: 0x000c, + 0x31e4: 0x000c, 0x31e5: 0x000c, 0x31e6: 0x000c, 0x31e7: 0x000c, 0x31e8: 0x000c, 0x31e9: 0x000c, + 0x31ea: 0x000c, 0x31eb: 0x000c, 0x31ec: 0x000c, 0x31ed: 0x000c, 0x31ee: 0x000c, 0x31ef: 0x000c, + 0x31f0: 0x000c, 0x31f1: 0x000c, 0x31f2: 0x000c, 0x31f3: 0x000c, 0x31f4: 0x000c, 0x31f5: 0x000c, + 0x31f6: 0x000c, 0x31fb: 0x000c, + 0x31fc: 0x000c, 0x31fd: 0x000c, 0x31fe: 0x000c, 0x31ff: 0x000c, + // Block 0xc8, offset 0x3200 + 0x3200: 0x000c, 0x3201: 0x000c, 0x3202: 0x000c, 0x3203: 0x000c, 0x3204: 0x000c, 0x3205: 0x000c, + 0x3206: 0x000c, 0x3207: 0x000c, 0x3208: 0x000c, 0x3209: 0x000c, 0x320a: 0x000c, 0x320b: 0x000c, + 0x320c: 0x000c, 0x320d: 0x000c, 0x320e: 0x000c, 0x320f: 0x000c, 0x3210: 0x000c, 0x3211: 0x000c, + 0x3212: 0x000c, 0x3213: 0x000c, 0x3214: 0x000c, 0x3215: 0x000c, 0x3216: 0x000c, 0x3217: 0x000c, + 0x3218: 0x000c, 0x3219: 0x000c, 0x321a: 0x000c, 0x321b: 0x000c, 0x321c: 0x000c, 0x321d: 0x000c, + 0x321e: 0x000c, 0x321f: 0x000c, 0x3220: 0x000c, 0x3221: 0x000c, 0x3222: 0x000c, 0x3223: 0x000c, + 0x3224: 0x000c, 0x3225: 0x000c, 0x3226: 0x000c, 0x3227: 0x000c, 0x3228: 0x000c, 0x3229: 0x000c, + 0x322a: 0x000c, 0x322b: 0x000c, 0x322c: 0x000c, + 0x3235: 0x000c, + // Block 0xc9, offset 0x3240 + 0x3244: 0x000c, + 0x325b: 0x000c, 0x325c: 0x000c, 0x325d: 0x000c, + 0x325e: 0x000c, 0x325f: 0x000c, 0x3261: 0x000c, 0x3262: 0x000c, 0x3263: 0x000c, + 0x3264: 0x000c, 0x3265: 0x000c, 0x3266: 0x000c, 0x3267: 0x000c, 0x3268: 0x000c, 0x3269: 0x000c, + 0x326a: 0x000c, 0x326b: 0x000c, 0x326c: 0x000c, 0x326d: 0x000c, 0x326e: 0x000c, 0x326f: 0x000c, + // Block 0xca, offset 0x3280 + 0x3280: 0x000c, 0x3281: 0x000c, 0x3282: 0x000c, 0x3283: 0x000c, 0x3284: 0x000c, 0x3285: 0x000c, + 0x3286: 0x000c, 0x3288: 0x000c, 0x3289: 0x000c, 0x328a: 0x000c, 0x328b: 0x000c, + 0x328c: 0x000c, 0x328d: 0x000c, 0x328e: 0x000c, 0x328f: 0x000c, 0x3290: 0x000c, 0x3291: 0x000c, + 0x3292: 0x000c, 0x3293: 0x000c, 0x3294: 0x000c, 0x3295: 0x000c, 0x3296: 0x000c, 0x3297: 0x000c, + 0x3298: 0x000c, 0x329b: 0x000c, 0x329c: 0x000c, 0x329d: 0x000c, + 0x329e: 0x000c, 0x329f: 0x000c, 0x32a0: 0x000c, 0x32a1: 0x000c, 0x32a3: 0x000c, + 0x32a4: 0x000c, 0x32a6: 0x000c, 0x32a7: 0x000c, 0x32a8: 0x000c, 0x32a9: 0x000c, + 0x32aa: 0x000c, + // Block 0xcb, offset 0x32c0 + 0x32c0: 0x0001, 0x32c1: 0x0001, 0x32c2: 0x0001, 0x32c3: 0x0001, 0x32c4: 0x0001, 0x32c5: 0x0001, + 0x32c6: 0x0001, 0x32c7: 0x0001, 0x32c8: 0x0001, 0x32c9: 0x0001, 0x32ca: 0x0001, 0x32cb: 0x0001, + 0x32cc: 0x0001, 0x32cd: 0x0001, 0x32ce: 0x0001, 0x32cf: 0x0001, 0x32d0: 0x000c, 0x32d1: 0x000c, + 0x32d2: 0x000c, 0x32d3: 0x000c, 0x32d4: 0x000c, 0x32d5: 0x000c, 0x32d6: 0x000c, 0x32d7: 0x0001, + 0x32d8: 0x0001, 0x32d9: 0x0001, 0x32da: 0x0001, 0x32db: 0x0001, 0x32dc: 0x0001, 0x32dd: 0x0001, + 0x32de: 0x0001, 0x32df: 0x0001, 0x32e0: 0x0001, 0x32e1: 0x0001, 0x32e2: 0x0001, 0x32e3: 0x0001, + 0x32e4: 0x0001, 0x32e5: 0x0001, 0x32e6: 0x0001, 0x32e7: 0x0001, 0x32e8: 0x0001, 0x32e9: 0x0001, + 0x32ea: 0x0001, 0x32eb: 0x0001, 0x32ec: 0x0001, 0x32ed: 0x0001, 0x32ee: 0x0001, 0x32ef: 0x0001, + 0x32f0: 0x0001, 0x32f1: 0x0001, 0x32f2: 0x0001, 0x32f3: 0x0001, 0x32f4: 0x0001, 0x32f5: 0x0001, + 0x32f6: 0x0001, 0x32f7: 0x0001, 0x32f8: 0x0001, 0x32f9: 0x0001, 0x32fa: 0x0001, 0x32fb: 0x0001, + 0x32fc: 0x0001, 0x32fd: 0x0001, 0x32fe: 0x0001, 0x32ff: 0x0001, + // Block 0xcc, offset 0x3300 + 0x3300: 0x0001, 0x3301: 0x0001, 0x3302: 0x0001, 0x3303: 0x0001, 0x3304: 0x000c, 0x3305: 0x000c, + 0x3306: 0x000c, 0x3307: 0x000c, 0x3308: 0x000c, 0x3309: 0x000c, 0x330a: 0x000c, 0x330b: 0x0001, + 0x330c: 0x0001, 0x330d: 0x0001, 0x330e: 0x0001, 0x330f: 0x0001, 0x3310: 0x0001, 0x3311: 0x0001, + 0x3312: 0x0001, 0x3313: 0x0001, 0x3314: 0x0001, 0x3315: 0x0001, 0x3316: 0x0001, 0x3317: 0x0001, + 0x3318: 0x0001, 0x3319: 0x0001, 0x331a: 0x0001, 0x331b: 0x0001, 0x331c: 0x0001, 0x331d: 0x0001, + 0x331e: 0x0001, 0x331f: 0x0001, 0x3320: 0x0001, 0x3321: 0x0001, 0x3322: 0x0001, 0x3323: 0x0001, + 0x3324: 0x0001, 0x3325: 0x0001, 0x3326: 0x0001, 0x3327: 0x0001, 0x3328: 0x0001, 0x3329: 0x0001, + 0x332a: 0x0001, 0x332b: 0x0001, 0x332c: 0x0001, 0x332d: 0x0001, 0x332e: 0x0001, 0x332f: 0x0001, + 0x3330: 0x0001, 0x3331: 0x0001, 0x3332: 0x0001, 0x3333: 0x0001, 0x3334: 0x0001, 0x3335: 0x0001, + 0x3336: 0x0001, 0x3337: 0x0001, 0x3338: 0x0001, 0x3339: 0x0001, 0x333a: 0x0001, 0x333b: 0x0001, + 0x333c: 0x0001, 0x333d: 0x0001, 0x333e: 0x0001, 0x333f: 0x0001, + // Block 0xcd, offset 0x3340 + 0x3340: 0x000d, 0x3341: 0x000d, 0x3342: 0x000d, 0x3343: 0x000d, 0x3344: 0x000d, 0x3345: 0x000d, + 0x3346: 0x000d, 0x3347: 0x000d, 0x3348: 0x000d, 0x3349: 0x000d, 0x334a: 0x000d, 0x334b: 0x000d, + 0x334c: 0x000d, 0x334d: 0x000d, 0x334e: 0x000d, 0x334f: 0x000d, 0x3350: 0x000d, 0x3351: 0x000d, + 0x3352: 0x000d, 0x3353: 0x000d, 0x3354: 0x000d, 0x3355: 0x000d, 0x3356: 0x000d, 0x3357: 0x000d, + 0x3358: 0x000d, 0x3359: 0x000d, 0x335a: 0x000d, 0x335b: 0x000d, 0x335c: 0x000d, 0x335d: 0x000d, + 0x335e: 0x000d, 0x335f: 0x000d, 0x3360: 0x000d, 0x3361: 0x000d, 0x3362: 0x000d, 0x3363: 0x000d, + 0x3364: 0x000d, 0x3365: 0x000d, 0x3366: 0x000d, 0x3367: 0x000d, 0x3368: 0x000d, 0x3369: 0x000d, + 0x336a: 0x000d, 0x336b: 0x000d, 0x336c: 0x000d, 0x336d: 0x000d, 0x336e: 0x000d, 0x336f: 0x000d, + 0x3370: 0x000a, 0x3371: 0x000a, 0x3372: 0x000d, 0x3373: 0x000d, 0x3374: 0x000d, 0x3375: 0x000d, + 0x3376: 0x000d, 0x3377: 0x000d, 0x3378: 0x000d, 0x3379: 0x000d, 0x337a: 0x000d, 0x337b: 0x000d, + 0x337c: 0x000d, 0x337d: 0x000d, 0x337e: 0x000d, 0x337f: 0x000d, + // Block 0xce, offset 0x3380 + 0x3380: 0x000a, 0x3381: 0x000a, 0x3382: 0x000a, 0x3383: 0x000a, 0x3384: 0x000a, 0x3385: 0x000a, + 0x3386: 0x000a, 0x3387: 0x000a, 0x3388: 0x000a, 0x3389: 0x000a, 0x338a: 0x000a, 0x338b: 0x000a, + 0x338c: 0x000a, 0x338d: 0x000a, 0x338e: 0x000a, 0x338f: 0x000a, 0x3390: 0x000a, 0x3391: 0x000a, + 0x3392: 0x000a, 0x3393: 0x000a, 0x3394: 0x000a, 0x3395: 0x000a, 0x3396: 0x000a, 0x3397: 0x000a, + 0x3398: 0x000a, 0x3399: 0x000a, 0x339a: 0x000a, 0x339b: 0x000a, 0x339c: 0x000a, 0x339d: 0x000a, + 0x339e: 0x000a, 0x339f: 0x000a, 0x33a0: 0x000a, 0x33a1: 0x000a, 0x33a2: 0x000a, 0x33a3: 0x000a, + 0x33a4: 0x000a, 0x33a5: 0x000a, 0x33a6: 0x000a, 0x33a7: 0x000a, 0x33a8: 0x000a, 0x33a9: 0x000a, + 0x33aa: 0x000a, 0x33ab: 0x000a, + 0x33b0: 0x000a, 0x33b1: 0x000a, 0x33b2: 0x000a, 0x33b3: 0x000a, 0x33b4: 0x000a, 0x33b5: 0x000a, + 0x33b6: 0x000a, 0x33b7: 0x000a, 0x33b8: 0x000a, 0x33b9: 0x000a, 0x33ba: 0x000a, 0x33bb: 0x000a, + 0x33bc: 0x000a, 0x33bd: 0x000a, 0x33be: 0x000a, 0x33bf: 0x000a, + // Block 0xcf, offset 0x33c0 + 0x33c0: 0x000a, 0x33c1: 0x000a, 0x33c2: 0x000a, 0x33c3: 0x000a, 0x33c4: 0x000a, 0x33c5: 0x000a, + 0x33c6: 0x000a, 0x33c7: 0x000a, 0x33c8: 0x000a, 0x33c9: 0x000a, 0x33ca: 0x000a, 0x33cb: 0x000a, + 0x33cc: 0x000a, 0x33cd: 0x000a, 0x33ce: 0x000a, 0x33cf: 0x000a, 0x33d0: 0x000a, 0x33d1: 0x000a, + 0x33d2: 0x000a, 0x33d3: 0x000a, + 0x33e0: 0x000a, 0x33e1: 0x000a, 0x33e2: 0x000a, 0x33e3: 0x000a, + 0x33e4: 0x000a, 0x33e5: 0x000a, 0x33e6: 0x000a, 0x33e7: 0x000a, 0x33e8: 0x000a, 0x33e9: 0x000a, + 0x33ea: 0x000a, 0x33eb: 0x000a, 0x33ec: 0x000a, 0x33ed: 0x000a, 0x33ee: 0x000a, + 0x33f1: 0x000a, 0x33f2: 0x000a, 0x33f3: 0x000a, 0x33f4: 0x000a, 0x33f5: 0x000a, + 0x33f6: 0x000a, 0x33f7: 0x000a, 0x33f8: 0x000a, 0x33f9: 0x000a, 0x33fa: 0x000a, 0x33fb: 0x000a, + 0x33fc: 0x000a, 0x33fd: 0x000a, 0x33fe: 0x000a, 0x33ff: 0x000a, + // Block 0xd0, offset 0x3400 + 0x3401: 0x000a, 0x3402: 0x000a, 0x3403: 0x000a, 0x3404: 0x000a, 0x3405: 0x000a, + 0x3406: 0x000a, 0x3407: 0x000a, 0x3408: 0x000a, 0x3409: 0x000a, 0x340a: 0x000a, 0x340b: 0x000a, + 0x340c: 0x000a, 0x340d: 0x000a, 0x340e: 0x000a, 0x340f: 0x000a, 0x3411: 0x000a, + 0x3412: 0x000a, 0x3413: 0x000a, 0x3414: 0x000a, 0x3415: 0x000a, 0x3416: 0x000a, 0x3417: 0x000a, + 0x3418: 0x000a, 0x3419: 0x000a, 0x341a: 0x000a, 0x341b: 0x000a, 0x341c: 0x000a, 0x341d: 0x000a, + 0x341e: 0x000a, 0x341f: 0x000a, 0x3420: 0x000a, 0x3421: 0x000a, 0x3422: 0x000a, 0x3423: 0x000a, + 0x3424: 0x000a, 0x3425: 0x000a, 0x3426: 0x000a, 0x3427: 0x000a, 0x3428: 0x000a, 0x3429: 0x000a, + 0x342a: 0x000a, 0x342b: 0x000a, 0x342c: 0x000a, 0x342d: 0x000a, 0x342e: 0x000a, 0x342f: 0x000a, + 0x3430: 0x000a, 0x3431: 0x000a, 0x3432: 0x000a, 0x3433: 0x000a, 0x3434: 0x000a, 0x3435: 0x000a, + // Block 0xd1, offset 0x3440 + 0x3440: 0x0002, 0x3441: 0x0002, 0x3442: 0x0002, 0x3443: 0x0002, 0x3444: 0x0002, 0x3445: 0x0002, + 0x3446: 0x0002, 0x3447: 0x0002, 0x3448: 0x0002, 0x3449: 0x0002, 0x344a: 0x0002, 0x344b: 0x000a, + 0x344c: 0x000a, + // Block 0xd2, offset 0x3480 + 0x34aa: 0x000a, 0x34ab: 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, + 0x34e0: 0x000a, 0x34e1: 0x000a, 0x34e2: 0x000a, 0x34e3: 0x000a, + 0x34e4: 0x000a, 0x34e5: 0x000a, 0x34e6: 0x000a, 0x34e7: 0x000a, 0x34e8: 0x000a, 0x34e9: 0x000a, + 0x34ea: 0x000a, 0x34eb: 0x000a, 0x34ec: 0x000a, + 0x34f0: 0x000a, 0x34f1: 0x000a, 0x34f2: 0x000a, 0x34f3: 0x000a, 0x34f4: 0x000a, 0x34f5: 0x000a, + 0x34f6: 0x000a, + // Block 0xd4, offset 0x3500 + 0x3500: 0x000a, 0x3501: 0x000a, 0x3502: 0x000a, 0x3503: 0x000a, 0x3504: 0x000a, 0x3505: 0x000a, + 0x3506: 0x000a, 0x3507: 0x000a, 0x3508: 0x000a, 0x3509: 0x000a, 0x350a: 0x000a, 0x350b: 0x000a, + 0x350c: 0x000a, 0x350d: 0x000a, 0x350e: 0x000a, 0x350f: 0x000a, 0x3510: 0x000a, 0x3511: 0x000a, + 0x3512: 0x000a, 0x3513: 0x000a, 0x3514: 0x000a, + // Block 0xd5, offset 0x3540 + 0x3540: 0x000a, 0x3541: 0x000a, 0x3542: 0x000a, 0x3543: 0x000a, 0x3544: 0x000a, 0x3545: 0x000a, + 0x3546: 0x000a, 0x3547: 0x000a, 0x3548: 0x000a, 0x3549: 0x000a, 0x354a: 0x000a, 0x354b: 0x000a, + 0x3550: 0x000a, 0x3551: 0x000a, + 0x3552: 0x000a, 0x3553: 0x000a, 0x3554: 0x000a, 0x3555: 0x000a, 0x3556: 0x000a, 0x3557: 0x000a, + 0x3558: 0x000a, 0x3559: 0x000a, 0x355a: 0x000a, 0x355b: 0x000a, 0x355c: 0x000a, 0x355d: 0x000a, + 0x355e: 0x000a, 0x355f: 0x000a, 0x3560: 0x000a, 0x3561: 0x000a, 0x3562: 0x000a, 0x3563: 0x000a, + 0x3564: 0x000a, 0x3565: 0x000a, 0x3566: 0x000a, 0x3567: 0x000a, 0x3568: 0x000a, 0x3569: 0x000a, + 0x356a: 0x000a, 0x356b: 0x000a, 0x356c: 0x000a, 0x356d: 0x000a, 0x356e: 0x000a, 0x356f: 0x000a, + 0x3570: 0x000a, 0x3571: 0x000a, 0x3572: 0x000a, 0x3573: 0x000a, 0x3574: 0x000a, 0x3575: 0x000a, + 0x3576: 0x000a, 0x3577: 0x000a, 0x3578: 0x000a, 0x3579: 0x000a, 0x357a: 0x000a, 0x357b: 0x000a, + 0x357c: 0x000a, 0x357d: 0x000a, 0x357e: 0x000a, 0x357f: 0x000a, + // Block 0xd6, offset 0x3580 + 0x3580: 0x000a, 0x3581: 0x000a, 0x3582: 0x000a, 0x3583: 0x000a, 0x3584: 0x000a, 0x3585: 0x000a, + 0x3586: 0x000a, 0x3587: 0x000a, + 0x3590: 0x000a, 0x3591: 0x000a, + 0x3592: 0x000a, 0x3593: 0x000a, 0x3594: 0x000a, 0x3595: 0x000a, 0x3596: 0x000a, 0x3597: 0x000a, + 0x3598: 0x000a, 0x3599: 0x000a, + 0x35a0: 0x000a, 0x35a1: 0x000a, 0x35a2: 0x000a, 0x35a3: 0x000a, + 0x35a4: 0x000a, 0x35a5: 0x000a, 0x35a6: 0x000a, 0x35a7: 0x000a, 0x35a8: 0x000a, 0x35a9: 0x000a, + 0x35aa: 0x000a, 0x35ab: 0x000a, 0x35ac: 0x000a, 0x35ad: 0x000a, 0x35ae: 0x000a, 0x35af: 0x000a, + 0x35b0: 0x000a, 0x35b1: 0x000a, 0x35b2: 0x000a, 0x35b3: 0x000a, 0x35b4: 0x000a, 0x35b5: 0x000a, + 0x35b6: 0x000a, 0x35b7: 0x000a, 0x35b8: 0x000a, 0x35b9: 0x000a, 0x35ba: 0x000a, 0x35bb: 0x000a, + 0x35bc: 0x000a, 0x35bd: 0x000a, 0x35be: 0x000a, 0x35bf: 0x000a, + // Block 0xd7, offset 0x35c0 + 0x35c0: 0x000a, 0x35c1: 0x000a, 0x35c2: 0x000a, 0x35c3: 0x000a, 0x35c4: 0x000a, 0x35c5: 0x000a, + 0x35c6: 0x000a, 0x35c7: 0x000a, + 0x35d0: 0x000a, 0x35d1: 0x000a, + 0x35d2: 0x000a, 0x35d3: 0x000a, 0x35d4: 0x000a, 0x35d5: 0x000a, 0x35d6: 0x000a, 0x35d7: 0x000a, + 0x35d8: 0x000a, 0x35d9: 0x000a, 0x35da: 0x000a, 0x35db: 0x000a, 0x35dc: 0x000a, 0x35dd: 0x000a, + 0x35de: 0x000a, 0x35df: 0x000a, 0x35e0: 0x000a, 0x35e1: 0x000a, 0x35e2: 0x000a, 0x35e3: 0x000a, + 0x35e4: 0x000a, 0x35e5: 0x000a, 0x35e6: 0x000a, 0x35e7: 0x000a, 0x35e8: 0x000a, 0x35e9: 0x000a, + 0x35ea: 0x000a, 0x35eb: 0x000a, 0x35ec: 0x000a, 0x35ed: 0x000a, + // Block 0xd8, offset 0x3600 + 0x3610: 0x000a, 0x3611: 0x000a, + 0x3612: 0x000a, 0x3613: 0x000a, 0x3614: 0x000a, 0x3615: 0x000a, 0x3616: 0x000a, 0x3617: 0x000a, + 0x3618: 0x000a, 0x3619: 0x000a, 0x361a: 0x000a, 0x361b: 0x000a, 0x361c: 0x000a, 0x361d: 0x000a, + 0x361e: 0x000a, 0x3620: 0x000a, 0x3621: 0x000a, 0x3622: 0x000a, 0x3623: 0x000a, + 0x3624: 0x000a, 0x3625: 0x000a, 0x3626: 0x000a, 0x3627: 0x000a, + 0x3630: 0x000a, 0x3633: 0x000a, 0x3634: 0x000a, 0x3635: 0x000a, + 0x3636: 0x000a, 0x3637: 0x000a, 0x3638: 0x000a, 0x3639: 0x000a, 0x363a: 0x000a, 0x363b: 0x000a, + 0x363c: 0x000a, 0x363d: 0x000a, 0x363e: 0x000a, + // Block 0xd9, offset 0x3640 + 0x3640: 0x000a, 0x3641: 0x000a, 0x3642: 0x000a, 0x3643: 0x000a, 0x3644: 0x000a, 0x3645: 0x000a, + 0x3646: 0x000a, 0x3647: 0x000a, 0x3648: 0x000a, 0x3649: 0x000a, 0x364a: 0x000a, 0x364b: 0x000a, + 0x3650: 0x000a, 0x3651: 0x000a, + 0x3652: 0x000a, 0x3653: 0x000a, 0x3654: 0x000a, 0x3655: 0x000a, 0x3656: 0x000a, 0x3657: 0x000a, + 0x3658: 0x000a, 0x3659: 0x000a, 0x365a: 0x000a, 0x365b: 0x000a, 0x365c: 0x000a, 0x365d: 0x000a, + 0x365e: 0x000a, + // Block 0xda, offset 0x3680 + 0x3680: 0x000a, 0x3681: 0x000a, 0x3682: 0x000a, 0x3683: 0x000a, 0x3684: 0x000a, 0x3685: 0x000a, + 0x3686: 0x000a, 0x3687: 0x000a, 0x3688: 0x000a, 0x3689: 0x000a, 0x368a: 0x000a, 0x368b: 0x000a, + 0x368c: 0x000a, 0x368d: 0x000a, 0x368e: 0x000a, 0x368f: 0x000a, 0x3690: 0x000a, 0x3691: 0x000a, + // Block 0xdb, offset 0x36c0 + 0x36fe: 0x000b, 0x36ff: 0x000b, + // Block 0xdc, offset 0x3700 + 0x3700: 0x000b, 0x3701: 0x000b, 0x3702: 0x000b, 0x3703: 0x000b, 0x3704: 0x000b, 0x3705: 0x000b, + 0x3706: 0x000b, 0x3707: 0x000b, 0x3708: 0x000b, 0x3709: 0x000b, 0x370a: 0x000b, 0x370b: 0x000b, + 0x370c: 0x000b, 0x370d: 0x000b, 0x370e: 0x000b, 0x370f: 0x000b, 0x3710: 0x000b, 0x3711: 0x000b, + 0x3712: 0x000b, 0x3713: 0x000b, 0x3714: 0x000b, 0x3715: 0x000b, 0x3716: 0x000b, 0x3717: 0x000b, + 0x3718: 0x000b, 0x3719: 0x000b, 0x371a: 0x000b, 0x371b: 0x000b, 0x371c: 0x000b, 0x371d: 0x000b, + 0x371e: 0x000b, 0x371f: 0x000b, 0x3720: 0x000b, 0x3721: 0x000b, 0x3722: 0x000b, 0x3723: 0x000b, + 0x3724: 0x000b, 0x3725: 0x000b, 0x3726: 0x000b, 0x3727: 0x000b, 0x3728: 0x000b, 0x3729: 0x000b, + 0x372a: 0x000b, 0x372b: 0x000b, 0x372c: 0x000b, 0x372d: 0x000b, 0x372e: 0x000b, 0x372f: 0x000b, + 0x3730: 0x000b, 0x3731: 0x000b, 0x3732: 0x000b, 0x3733: 0x000b, 0x3734: 0x000b, 0x3735: 0x000b, + 0x3736: 0x000b, 0x3737: 0x000b, 0x3738: 0x000b, 0x3739: 0x000b, 0x373a: 0x000b, 0x373b: 0x000b, + 0x373c: 0x000b, 0x373d: 0x000b, 0x373e: 0x000b, 0x373f: 0x000b, + // Block 0xdd, offset 0x3740 + 0x3740: 0x000c, 0x3741: 0x000c, 0x3742: 0x000c, 0x3743: 0x000c, 0x3744: 0x000c, 0x3745: 0x000c, + 0x3746: 0x000c, 0x3747: 0x000c, 0x3748: 0x000c, 0x3749: 0x000c, 0x374a: 0x000c, 0x374b: 0x000c, + 0x374c: 0x000c, 0x374d: 0x000c, 0x374e: 0x000c, 0x374f: 0x000c, 0x3750: 0x000c, 0x3751: 0x000c, + 0x3752: 0x000c, 0x3753: 0x000c, 0x3754: 0x000c, 0x3755: 0x000c, 0x3756: 0x000c, 0x3757: 0x000c, + 0x3758: 0x000c, 0x3759: 0x000c, 0x375a: 0x000c, 0x375b: 0x000c, 0x375c: 0x000c, 0x375d: 0x000c, + 0x375e: 0x000c, 0x375f: 0x000c, 0x3760: 0x000c, 0x3761: 0x000c, 0x3762: 0x000c, 0x3763: 0x000c, + 0x3764: 0x000c, 0x3765: 0x000c, 0x3766: 0x000c, 0x3767: 0x000c, 0x3768: 0x000c, 0x3769: 0x000c, + 0x376a: 0x000c, 0x376b: 0x000c, 0x376c: 0x000c, 0x376d: 0x000c, 0x376e: 0x000c, 0x376f: 0x000c, + 0x3770: 0x000b, 0x3771: 0x000b, 0x3772: 0x000b, 0x3773: 0x000b, 0x3774: 0x000b, 0x3775: 0x000b, + 0x3776: 0x000b, 0x3777: 0x000b, 0x3778: 0x000b, 0x3779: 0x000b, 0x377a: 0x000b, 0x377b: 0x000b, + 0x377c: 0x000b, 0x377d: 0x000b, 0x377e: 0x000b, 0x377f: 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, 0x137: 0x28, + 0x138: 0x29, 0x139: 0x2a, 0x13a: 0x2b, 0x13b: 0x2c, 0x13c: 0x2d, 0x13d: 0x2e, 0x13e: 0x2f, 0x13f: 0x30, + // Block 0x5, offset 0x140 + 0x140: 0x31, 0x141: 0x32, 0x142: 0x33, + 0x14d: 0x34, 0x14e: 0x35, + 0x150: 0x36, + 0x15a: 0x37, 0x15c: 0x38, 0x15d: 0x39, 0x15e: 0x3a, 0x15f: 0x3b, + 0x160: 0x3c, 0x162: 0x3d, 0x164: 0x3e, 0x165: 0x3f, 0x167: 0x40, + 0x168: 0x41, 0x169: 0x42, 0x16a: 0x43, 0x16c: 0x44, 0x16d: 0x45, 0x16e: 0x46, 0x16f: 0x47, + 0x170: 0x48, 0x173: 0x49, 0x177: 0x4a, + 0x17e: 0x4b, 0x17f: 0x4c, + // Block 0x6, offset 0x180 + 0x180: 0x4d, 0x181: 0x4e, 0x182: 0x4f, 0x183: 0x50, 0x184: 0x51, 0x185: 0x52, 0x186: 0x53, 0x187: 0x54, + 0x188: 0x55, 0x189: 0x54, 0x18a: 0x54, 0x18b: 0x54, 0x18c: 0x56, 0x18d: 0x57, 0x18e: 0x58, 0x18f: 0x59, + 0x190: 0x5a, 0x191: 0x5b, 0x192: 0x5c, 0x193: 0x5d, 0x194: 0x54, 0x195: 0x54, 0x196: 0x54, 0x197: 0x54, + 0x198: 0x54, 0x199: 0x54, 0x19a: 0x5e, 0x19b: 0x54, 0x19c: 0x54, 0x19d: 0x5f, 0x19e: 0x54, 0x19f: 0x60, + 0x1a4: 0x54, 0x1a5: 0x54, 0x1a6: 0x61, 0x1a7: 0x62, + 0x1a8: 0x54, 0x1a9: 0x54, 0x1aa: 0x54, 0x1ab: 0x54, 0x1ac: 0x54, 0x1ad: 0x63, 0x1ae: 0x64, 0x1af: 0x65, + 0x1b3: 0x66, 0x1b5: 0x67, 0x1b7: 0x68, + 0x1b8: 0x69, 0x1b9: 0x6a, 0x1ba: 0x6b, 0x1bb: 0x6c, 0x1bc: 0x54, 0x1bd: 0x54, 0x1be: 0x54, 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: 0x54, + // 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, 0x26f: 0x8b, + // Block 0xa, offset 0x280 + 0x2ac: 0x8c, 0x2ad: 0x8d, 0x2ae: 0x0e, 0x2af: 0x0e, + 0x2b0: 0x0e, 0x2b1: 0x0e, 0x2b2: 0x0e, 0x2b3: 0x0e, 0x2b4: 0x8e, 0x2b5: 0x0e, 0x2b6: 0x0e, 0x2b7: 0x8f, + 0x2b8: 0x90, 0x2b9: 0x91, 0x2ba: 0x0e, 0x2bb: 0x92, 0x2bc: 0x93, 0x2bd: 0x94, 0x2bf: 0x95, + // Block 0xb, offset 0x2c0 + 0x2c4: 0x96, 0x2c5: 0x54, 0x2c6: 0x97, 0x2c7: 0x98, + 0x2cb: 0x99, 0x2cd: 0x9a, + 0x2e0: 0x9b, 0x2e1: 0x9b, 0x2e2: 0x9b, 0x2e3: 0x9b, 0x2e4: 0x9c, 0x2e5: 0x9b, 0x2e6: 0x9b, 0x2e7: 0x9b, + 0x2e8: 0x9d, 0x2e9: 0x9b, 0x2ea: 0x9b, 0x2eb: 0x9e, 0x2ec: 0x9f, 0x2ed: 0x9b, 0x2ee: 0x9b, 0x2ef: 0x9b, + 0x2f0: 0x9b, 0x2f1: 0x9b, 0x2f2: 0x9b, 0x2f3: 0x9b, 0x2f4: 0x9b, 0x2f5: 0x9b, 0x2f6: 0x9b, 0x2f7: 0x9b, + 0x2f8: 0x9b, 0x2f9: 0xa0, 0x2fa: 0x9b, 0x2fb: 0x9b, 0x2fc: 0x9b, 0x2fd: 0x9b, 0x2fe: 0x9b, 0x2ff: 0x9b, + // Block 0xc, offset 0x300 + 0x300: 0xa1, 0x301: 0xa2, 0x302: 0xa3, 0x304: 0xa4, 0x305: 0xa5, 0x306: 0xa6, 0x307: 0xa7, + 0x308: 0xa8, 0x30b: 0xa9, 0x30c: 0xaa, 0x30d: 0xab, + 0x310: 0xac, 0x311: 0xad, 0x312: 0xae, 0x313: 0xaf, 0x316: 0xb0, 0x317: 0xb1, + 0x318: 0xb2, 0x319: 0xb3, 0x31a: 0xb4, 0x31c: 0xb5, + 0x330: 0xb6, 0x332: 0xb7, + // Block 0xd, offset 0x340 + 0x36b: 0xb8, 0x36c: 0xb9, + 0x37e: 0xba, + // Block 0xe, offset 0x380 + 0x3b2: 0xbb, + // Block 0xf, offset 0x3c0 + 0x3c5: 0xbc, 0x3c6: 0xbd, + 0x3c8: 0x54, 0x3c9: 0xbe, 0x3cc: 0x54, 0x3cd: 0xbf, + 0x3db: 0xc0, 0x3dc: 0xc1, 0x3dd: 0xc2, 0x3de: 0xc3, 0x3df: 0xc4, + 0x3e8: 0xc5, 0x3e9: 0xc6, 0x3ea: 0xc7, + // Block 0x10, offset 0x400 + 0x400: 0xc8, + 0x420: 0x9b, 0x421: 0x9b, 0x422: 0x9b, 0x423: 0xc9, 0x424: 0x9b, 0x425: 0xca, 0x426: 0x9b, 0x427: 0x9b, + 0x428: 0x9b, 0x429: 0x9b, 0x42a: 0x9b, 0x42b: 0x9b, 0x42c: 0x9b, 0x42d: 0x9b, 0x42e: 0x9b, 0x42f: 0x9b, + 0x430: 0x9b, 0x431: 0x9b, 0x432: 0x9b, 0x433: 0x9b, 0x434: 0x9b, 0x435: 0x9b, 0x436: 0x9b, 0x437: 0x9b, + 0x438: 0x0e, 0x439: 0x0e, 0x43a: 0x0e, 0x43b: 0xcb, 0x43c: 0x9b, 0x43d: 0x9b, 0x43e: 0x9b, 0x43f: 0x9b, + // Block 0x11, offset 0x440 + 0x440: 0xcc, 0x441: 0x54, 0x442: 0xcd, 0x443: 0xce, 0x444: 0xcf, 0x445: 0xd0, + 0x44c: 0x54, 0x44d: 0x54, 0x44e: 0x54, 0x44f: 0x54, + 0x450: 0x54, 0x451: 0x54, 0x452: 0x54, 0x453: 0x54, 0x454: 0x54, 0x455: 0x54, 0x456: 0x54, 0x457: 0x54, + 0x458: 0x54, 0x459: 0x54, 0x45a: 0x54, 0x45b: 0xd1, 0x45c: 0x54, 0x45d: 0x6c, 0x45e: 0x54, 0x45f: 0xd2, + 0x460: 0xd3, 0x461: 0xd4, 0x462: 0xd5, 0x464: 0xd6, 0x465: 0xd7, 0x466: 0xd8, 0x467: 0x36, + 0x47f: 0xd9, + // Block 0x12, offset 0x480 + 0x4bf: 0xd9, + // 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: 0xda, 0x541: 0xda, 0x542: 0xda, 0x543: 0xda, 0x544: 0x05, 0x545: 0x05, 0x546: 0x05, 0x547: 0xdb, + 0x548: 0xda, 0x549: 0xda, 0x54a: 0xda, 0x54b: 0xda, 0x54c: 0xda, 0x54d: 0xda, 0x54e: 0xda, 0x54f: 0xda, + 0x550: 0xda, 0x551: 0xda, 0x552: 0xda, 0x553: 0xda, 0x554: 0xda, 0x555: 0xda, 0x556: 0xda, 0x557: 0xda, + 0x558: 0xda, 0x559: 0xda, 0x55a: 0xda, 0x55b: 0xda, 0x55c: 0xda, 0x55d: 0xda, 0x55e: 0xda, 0x55f: 0xda, + 0x560: 0xda, 0x561: 0xda, 0x562: 0xda, 0x563: 0xda, 0x564: 0xda, 0x565: 0xda, 0x566: 0xda, 0x567: 0xda, + 0x568: 0xda, 0x569: 0xda, 0x56a: 0xda, 0x56b: 0xda, 0x56c: 0xda, 0x56d: 0xda, 0x56e: 0xda, 0x56f: 0xda, + 0x570: 0xda, 0x571: 0xda, 0x572: 0xda, 0x573: 0xda, 0x574: 0xda, 0x575: 0xda, 0x576: 0xda, 0x577: 0xda, + 0x578: 0xda, 0x579: 0xda, 0x57a: 0xda, 0x57b: 0xda, 0x57c: 0xda, 0x57d: 0xda, 0x57e: 0xda, 0x57f: 0xda, + // Block 0x16, offset 0x580 + 0x58f: 0x10, + 0x59f: 0x10, + 0x5a0: 0x13, + 0x5af: 0x10, + 0x5bf: 0x10, + // Block 0x17, offset 0x5c0 + 0x5cf: 0x10, +} + +// Total table size 15800 bytes (15KiB); checksum: F50EF68C diff --git a/vendor/golang.org/x/text/unicode/cldr/base.go b/vendor/golang.org/x/text/unicode/cldr/base.go index 2382f4d..63cdc16 100644 --- a/vendor/golang.org/x/text/unicode/cldr/base.go +++ b/vendor/golang.org/x/text/unicode/cldr/base.go @@ -62,6 +62,11 @@ func (e *Common) Default() string { return "" } +// Element returns the XML element name. +func (e *Common) Element() string { + return e.name +} + // GetCommon returns e. It is provided such that Common implements Elem. func (e *Common) GetCommon() *Common { return e diff --git a/vendor/golang.org/x/text/unicode/cldr/decode.go b/vendor/golang.org/x/text/unicode/cldr/decode.go index e5ee4ae..094d431 100644 --- a/vendor/golang.org/x/text/unicode/cldr/decode.go +++ b/vendor/golang.org/x/text/unicode/cldr/decode.go @@ -47,7 +47,7 @@ type Loader interface { Reader(i int) (io.ReadCloser, error) } -var fileRe = regexp.MustCompile(".*/(.*)/(.*)\\.xml") +var fileRe = regexp.MustCompile(`.*[/\\](.*)[/\\](.*)\.xml`) // Decode loads and decodes the files represented by l. func (d *Decoder) Decode(l Loader) (cldr *CLDR, err error) { diff --git a/vendor/golang.org/x/text/unicode/cldr/examples_test.go b/vendor/golang.org/x/text/unicode/cldr/examples_test.go index a65e86e..1a69b00 100644 --- a/vendor/golang.org/x/text/unicode/cldr/examples_test.go +++ b/vendor/golang.org/x/text/unicode/cldr/examples_test.go @@ -7,7 +7,7 @@ import ( ) func ExampleSlice() { - var dr *cldr.CLDR // assume this is initalized + var dr *cldr.CLDR // assume this is initialized x, _ := dr.LDML("en") cs := x.Collations.Collation diff --git a/vendor/golang.org/x/text/unicode/cldr/resolve_test.go b/vendor/golang.org/x/text/unicode/cldr/resolve_test.go index 7b19cef..3d8edae 100644 --- a/vendor/golang.org/x/text/unicode/cldr/resolve_test.go +++ b/vendor/golang.org/x/text/unicode/cldr/resolve_test.go @@ -39,7 +39,7 @@ type fieldTest struct { var testStruct = fieldTest{ Common: Common{ - name: "mapping", // exclude "type" as distinguising attribute + name: "mapping", // exclude "type" as distinguishing attribute Type: "foo", Alt: "foo", }, diff --git a/vendor/golang.org/x/text/unicode/cldr/slice_test.go b/vendor/golang.org/x/text/unicode/cldr/slice_test.go index f354329..3d487d3 100644 --- a/vendor/golang.org/x/text/unicode/cldr/slice_test.go +++ b/vendor/golang.org/x/text/unicode/cldr/slice_test.go @@ -158,7 +158,7 @@ func TestSelectOnePerGroup(t *testing.T) { s := MakeSlice(&sl) s.SelectOnePerGroup(tt.attr, tt.values) if len(sl) != len(tt.refs) { - t.Errorf("%d: found result lenght %d; want %d", i, len(sl), len(tt.refs)) + t.Errorf("%d: found result length %d; want %d", i, len(sl), len(tt.refs)) continue } for j, e := range sl { diff --git a/vendor/golang.org/x/text/unicode/cldr/xml.go b/vendor/golang.org/x/text/unicode/cldr/xml.go index 99fa963..f847663 100644 --- a/vendor/golang.org/x/text/unicode/cldr/xml.go +++ b/vendor/golang.org/x/text/unicode/cldr/xml.go @@ -126,6 +126,7 @@ type SupplementalData struct { Population string `xml:"population,attr"` LanguagePopulation []*struct { Common + LiteracyPercent string `xml:"literacyPercent,attr"` WritingPercent string `xml:"writingPercent,attr"` PopulationPercent string `xml:"populationPercent,attr"` OfficialStatus string `xml:"officialStatus,attr"` @@ -517,12 +518,22 @@ type SupplementalData struct { Common LanguageMatches []*struct { Common + ParadigmLocales []*struct { + Common + Locales string `xml:"locales,attr"` + } `xml:"paradigmLocales"` + MatchVariable []*struct { + Common + Id string `xml:"id,attr"` + Value string `xml:"value,attr"` + } `xml:"matchVariable"` LanguageMatch []*struct { Common Desired string `xml:"desired,attr"` - Oneway string `xml:"oneway,attr"` - Percent string `xml:"percent,attr"` Supported string `xml:"supported,attr"` + Percent string `xml:"percent,attr"` + Distance string `xml:"distance,attr"` + Oneway string `xml:"oneway,attr"` } `xml:"languageMatch"` } `xml:"languageMatches"` } `xml:"languageMatching"` @@ -625,6 +636,13 @@ type SupplementalData struct { Path string `xml:"path,attr"` } `xml:"rgPath"` } `xml:"rgScope"` + LanguageGroups *struct { + Common + LanguageGroup []*struct { + Common + Parent string `xml:"parent,attr"` + } `xml:"languageGroup"` + } `xml:"languageGroups"` } // LDML is the top-level type for locale-specific data. @@ -695,6 +713,15 @@ type LDML struct { Common Registry string `xml:"registry,attr"` } `xml:"mapping"` + ParseLenients []*struct { + Common + Scope string `xml:"scope,attr"` + Level string `xml:"level,attr"` + ParseLenient []*struct { + Common + Sample string `xml:"sample,attr"` + } `xml:"parseLenient"` + } `xml:"parseLenients"` } `xml:"characters"` Delimiters *struct { Common @@ -1450,7 +1477,18 @@ type Numbers struct { Count string `xml:"count,attr"` } `xml:"pattern"` } `xml:"miscPatterns"` + MinimalPairs []*struct { + Common + PluralMinimalPairs []*struct { + Common + Count string `xml:"count,attr"` + } `xml:"pluralMinimalPairs"` + OrdinalMinimalPairs []*struct { + Common + Ordinal string `xml:"ordinal,attr"` + } `xml:"ordinalMinimalPairs"` + } `xml:"minimalPairs"` } // Version is the version of CLDR from which the XML definitions are generated. -const Version = "30" +const Version = "32" diff --git a/vendor/golang.org/x/text/unicode/norm/data10.0.0_test.go b/vendor/golang.org/x/text/unicode/norm/data10.0.0_test.go new file mode 100644 index 0000000..1d0f73d --- /dev/null +++ b/vendor/golang.org/x/text/unicode/norm/data10.0.0_test.go @@ -0,0 +1,7424 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// +build go1.10 + +package norm + +const ( + Yes = iota + No + Maybe +) + +type formData struct { + qc uint8 + combinesForward bool + decomposition string +} + +type runeData struct { + r rune + ccc uint8 + nLead uint8 + nTrail uint8 + f [2]formData // 0: canonical; 1: compatibility +} + +func f(qc uint8, cf bool, dec string) [2]formData { + return [2]formData{{qc, cf, dec}, {qc, cf, dec}} +} + +func g(qc, qck uint8, cf, cfk bool, d, dk string) [2]formData { + return [2]formData{{qc, cf, d}, {qck, cfk, dk}} +} + +var testData = []runeData{ + {0x0, 0, 0, 0, f(Yes, false, "")}, + {0x3c, 0, 0, 0, f(Yes, true, "")}, + {0x3f, 0, 0, 0, f(Yes, false, "")}, + {0x41, 0, 0, 0, f(Yes, true, "")}, + {0x51, 0, 0, 0, f(Yes, false, "")}, + {0x52, 0, 0, 0, f(Yes, true, "")}, + {0x5b, 0, 0, 0, f(Yes, false, "")}, + {0x61, 0, 0, 0, f(Yes, true, "")}, + {0x71, 0, 0, 0, f(Yes, false, "")}, + {0x72, 0, 0, 0, f(Yes, true, "")}, + {0x7b, 0, 0, 0, f(Yes, false, "")}, + {0xa0, 0, 0, 0, g(Yes, No, false, false, "", " ")}, + {0xa1, 0, 0, 0, f(Yes, false, "")}, + {0xa8, 0, 0, 1, g(Yes, No, true, false, "", " ̈")}, + {0xa9, 0, 0, 0, f(Yes, false, "")}, + {0xaa, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0xab, 0, 0, 0, f(Yes, false, "")}, + {0xaf, 0, 0, 1, g(Yes, No, false, false, "", " ̄")}, + {0xb0, 0, 0, 0, f(Yes, false, "")}, + {0xb2, 0, 0, 0, g(Yes, No, false, false, "", "2")}, + {0xb3, 0, 0, 0, g(Yes, No, false, false, "", "3")}, + {0xb4, 0, 0, 1, g(Yes, No, false, false, "", " ́")}, + {0xb5, 0, 0, 0, g(Yes, No, false, false, "", "μ")}, + {0xb6, 0, 0, 0, f(Yes, false, "")}, + {0xb8, 0, 0, 1, g(Yes, No, false, false, "", " ̧")}, + {0xb9, 0, 0, 0, g(Yes, No, false, false, "", "1")}, + {0xba, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0xbb, 0, 0, 0, f(Yes, false, "")}, + {0xbc, 0, 0, 0, g(Yes, No, false, false, "", "1⁄4")}, + {0xbd, 0, 0, 0, g(Yes, No, false, false, "", "1⁄2")}, + {0xbe, 0, 0, 0, g(Yes, No, false, false, "", "3⁄4")}, + {0xbf, 0, 0, 0, f(Yes, false, "")}, + {0xc0, 0, 0, 1, f(Yes, false, "À")}, + {0xc1, 0, 0, 1, f(Yes, false, "Á")}, + {0xc2, 0, 0, 1, f(Yes, true, "Â")}, + {0xc3, 0, 0, 1, f(Yes, false, "Ã")}, + {0xc4, 0, 0, 1, f(Yes, true, "Ä")}, + {0xc5, 0, 0, 1, f(Yes, true, "Å")}, + {0xc6, 0, 0, 0, f(Yes, true, "")}, + {0xc7, 0, 0, 1, f(Yes, true, "Ç")}, + {0xc8, 0, 0, 1, f(Yes, false, "È")}, + {0xc9, 0, 0, 1, f(Yes, false, "É")}, + {0xca, 0, 0, 1, f(Yes, true, "Ê")}, + {0xcb, 0, 0, 1, f(Yes, false, "Ë")}, + {0xcc, 0, 0, 1, f(Yes, false, "Ì")}, + {0xcd, 0, 0, 1, f(Yes, false, "Í")}, + {0xce, 0, 0, 1, f(Yes, false, "Î")}, + {0xcf, 0, 0, 1, f(Yes, true, "Ï")}, + {0xd0, 0, 0, 0, f(Yes, false, "")}, + {0xd1, 0, 0, 1, f(Yes, false, "Ñ")}, + {0xd2, 0, 0, 1, f(Yes, false, "Ò")}, + {0xd3, 0, 0, 1, f(Yes, false, "Ó")}, + {0xd4, 0, 0, 1, f(Yes, true, "Ô")}, + {0xd5, 0, 0, 1, f(Yes, true, "Õ")}, + {0xd6, 0, 0, 1, f(Yes, true, "Ö")}, + {0xd7, 0, 0, 0, f(Yes, false, "")}, + {0xd8, 0, 0, 0, f(Yes, true, "")}, + {0xd9, 0, 0, 1, f(Yes, false, "Ù")}, + {0xda, 0, 0, 1, f(Yes, false, "Ú")}, + {0xdb, 0, 0, 1, f(Yes, false, "Û")}, + {0xdc, 0, 0, 1, f(Yes, true, "Ü")}, + {0xdd, 0, 0, 1, f(Yes, false, "Ý")}, + {0xde, 0, 0, 0, f(Yes, false, "")}, + {0xe0, 0, 0, 1, f(Yes, false, "à")}, + {0xe1, 0, 0, 1, f(Yes, false, "á")}, + {0xe2, 0, 0, 1, f(Yes, true, "â")}, + {0xe3, 0, 0, 1, f(Yes, false, "ã")}, + {0xe4, 0, 0, 1, f(Yes, true, "ä")}, + {0xe5, 0, 0, 1, f(Yes, true, "å")}, + {0xe6, 0, 0, 0, f(Yes, true, "")}, + {0xe7, 0, 0, 1, f(Yes, true, "ç")}, + {0xe8, 0, 0, 1, f(Yes, false, "è")}, + {0xe9, 0, 0, 1, f(Yes, false, "é")}, + {0xea, 0, 0, 1, f(Yes, true, "ê")}, + {0xeb, 0, 0, 1, f(Yes, false, "ë")}, + {0xec, 0, 0, 1, f(Yes, false, "ì")}, + {0xed, 0, 0, 1, f(Yes, false, "í")}, + {0xee, 0, 0, 1, f(Yes, false, "î")}, + {0xef, 0, 0, 1, f(Yes, true, "ï")}, + {0xf0, 0, 0, 0, f(Yes, false, "")}, + {0xf1, 0, 0, 1, f(Yes, false, "ñ")}, + {0xf2, 0, 0, 1, f(Yes, false, "ò")}, + {0xf3, 0, 0, 1, f(Yes, false, "ó")}, + {0xf4, 0, 0, 1, f(Yes, true, "ô")}, + {0xf5, 0, 0, 1, f(Yes, true, "õ")}, + {0xf6, 0, 0, 1, f(Yes, true, "ö")}, + {0xf7, 0, 0, 0, f(Yes, false, "")}, + {0xf8, 0, 0, 0, f(Yes, true, "")}, + {0xf9, 0, 0, 1, f(Yes, false, "ù")}, + {0xfa, 0, 0, 1, f(Yes, false, "ú")}, + {0xfb, 0, 0, 1, f(Yes, false, "û")}, + {0xfc, 0, 0, 1, f(Yes, true, "ü")}, + {0xfd, 0, 0, 1, f(Yes, false, "ý")}, + {0xfe, 0, 0, 0, f(Yes, false, "")}, + {0xff, 0, 0, 1, f(Yes, false, "ÿ")}, + {0x100, 0, 0, 1, f(Yes, false, "Ā")}, + {0x101, 0, 0, 1, f(Yes, false, "ā")}, + {0x102, 0, 0, 1, f(Yes, true, "Ă")}, + {0x103, 0, 0, 1, f(Yes, true, "ă")}, + {0x104, 0, 0, 1, f(Yes, false, "Ą")}, + {0x105, 0, 0, 1, f(Yes, false, "ą")}, + {0x106, 0, 0, 1, f(Yes, false, "Ć")}, + {0x107, 0, 0, 1, f(Yes, false, "ć")}, + {0x108, 0, 0, 1, f(Yes, false, "Ĉ")}, + {0x109, 0, 0, 1, f(Yes, false, "ĉ")}, + {0x10a, 0, 0, 1, f(Yes, false, "Ċ")}, + {0x10b, 0, 0, 1, f(Yes, false, "ċ")}, + {0x10c, 0, 0, 1, f(Yes, false, "Č")}, + {0x10d, 0, 0, 1, f(Yes, false, "č")}, + {0x10e, 0, 0, 1, f(Yes, false, "Ď")}, + {0x10f, 0, 0, 1, f(Yes, false, "ď")}, + {0x110, 0, 0, 0, f(Yes, false, "")}, + {0x112, 0, 0, 1, f(Yes, true, "Ē")}, + {0x113, 0, 0, 1, f(Yes, true, "ē")}, + {0x114, 0, 0, 1, f(Yes, false, "Ĕ")}, + {0x115, 0, 0, 1, f(Yes, false, "ĕ")}, + {0x116, 0, 0, 1, f(Yes, false, "Ė")}, + {0x117, 0, 0, 1, f(Yes, false, "ė")}, + {0x118, 0, 0, 1, f(Yes, false, "Ę")}, + {0x119, 0, 0, 1, f(Yes, false, "ę")}, + {0x11a, 0, 0, 1, f(Yes, false, "Ě")}, + {0x11b, 0, 0, 1, f(Yes, false, "ě")}, + {0x11c, 0, 0, 1, f(Yes, false, "Ĝ")}, + {0x11d, 0, 0, 1, f(Yes, false, "ĝ")}, + {0x11e, 0, 0, 1, f(Yes, false, "Ğ")}, + {0x11f, 0, 0, 1, f(Yes, false, "ğ")}, + {0x120, 0, 0, 1, f(Yes, false, "Ġ")}, + {0x121, 0, 0, 1, f(Yes, false, "ġ")}, + {0x122, 0, 0, 1, f(Yes, false, "Ģ")}, + {0x123, 0, 0, 1, f(Yes, false, "ģ")}, + {0x124, 0, 0, 1, f(Yes, false, "Ĥ")}, + {0x125, 0, 0, 1, f(Yes, false, "ĥ")}, + {0x126, 0, 0, 0, f(Yes, false, "")}, + {0x128, 0, 0, 1, f(Yes, false, "Ĩ")}, + {0x129, 0, 0, 1, f(Yes, false, "ĩ")}, + {0x12a, 0, 0, 1, f(Yes, false, "Ī")}, + {0x12b, 0, 0, 1, f(Yes, false, "ī")}, + {0x12c, 0, 0, 1, f(Yes, false, "Ĭ")}, + {0x12d, 0, 0, 1, f(Yes, false, "ĭ")}, + {0x12e, 0, 0, 1, f(Yes, false, "Į")}, + {0x12f, 0, 0, 1, f(Yes, false, "į")}, + {0x130, 0, 0, 1, f(Yes, false, "İ")}, + {0x131, 0, 0, 0, f(Yes, false, "")}, + {0x132, 0, 0, 0, g(Yes, No, false, false, "", "IJ")}, + {0x133, 0, 0, 0, g(Yes, No, false, false, "", "ij")}, + {0x134, 0, 0, 1, f(Yes, false, "Ĵ")}, + {0x135, 0, 0, 1, f(Yes, false, "ĵ")}, + {0x136, 0, 0, 1, f(Yes, false, "Ķ")}, + {0x137, 0, 0, 1, f(Yes, false, "ķ")}, + {0x138, 0, 0, 0, f(Yes, false, "")}, + {0x139, 0, 0, 1, f(Yes, false, "Ĺ")}, + {0x13a, 0, 0, 1, f(Yes, false, "ĺ")}, + {0x13b, 0, 0, 1, f(Yes, false, "Ļ")}, + {0x13c, 0, 0, 1, f(Yes, false, "ļ")}, + {0x13d, 0, 0, 1, f(Yes, false, "Ľ")}, + {0x13e, 0, 0, 1, f(Yes, false, "ľ")}, + {0x13f, 0, 0, 0, g(Yes, No, false, false, "", "L·")}, + {0x140, 0, 0, 0, g(Yes, No, false, false, "", "l·")}, + {0x141, 0, 0, 0, f(Yes, false, "")}, + {0x143, 0, 0, 1, f(Yes, false, "Ń")}, + {0x144, 0, 0, 1, f(Yes, false, "ń")}, + {0x145, 0, 0, 1, f(Yes, false, "Ņ")}, + {0x146, 0, 0, 1, f(Yes, false, "ņ")}, + {0x147, 0, 0, 1, f(Yes, false, "Ň")}, + {0x148, 0, 0, 1, f(Yes, false, "ň")}, + {0x149, 0, 0, 0, g(Yes, No, false, false, "", "ʼn")}, + {0x14a, 0, 0, 0, f(Yes, false, "")}, + {0x14c, 0, 0, 1, f(Yes, true, "Ō")}, + {0x14d, 0, 0, 1, f(Yes, true, "ō")}, + {0x14e, 0, 0, 1, f(Yes, false, "Ŏ")}, + {0x14f, 0, 0, 1, f(Yes, false, "ŏ")}, + {0x150, 0, 0, 1, f(Yes, false, "Ő")}, + {0x151, 0, 0, 1, f(Yes, false, "ő")}, + {0x152, 0, 0, 0, f(Yes, false, "")}, + {0x154, 0, 0, 1, f(Yes, false, "Ŕ")}, + {0x155, 0, 0, 1, f(Yes, false, "ŕ")}, + {0x156, 0, 0, 1, f(Yes, false, "Ŗ")}, + {0x157, 0, 0, 1, f(Yes, false, "ŗ")}, + {0x158, 0, 0, 1, f(Yes, false, "Ř")}, + {0x159, 0, 0, 1, f(Yes, false, "ř")}, + {0x15a, 0, 0, 1, f(Yes, true, "Ś")}, + {0x15b, 0, 0, 1, f(Yes, true, "ś")}, + {0x15c, 0, 0, 1, f(Yes, false, "Ŝ")}, + {0x15d, 0, 0, 1, f(Yes, false, "ŝ")}, + {0x15e, 0, 0, 1, f(Yes, false, "Ş")}, + {0x15f, 0, 0, 1, f(Yes, false, "ş")}, + {0x160, 0, 0, 1, f(Yes, true, "Š")}, + {0x161, 0, 0, 1, f(Yes, true, "š")}, + {0x162, 0, 0, 1, f(Yes, false, "Ţ")}, + {0x163, 0, 0, 1, f(Yes, false, "ţ")}, + {0x164, 0, 0, 1, f(Yes, false, "Ť")}, + {0x165, 0, 0, 1, f(Yes, false, "ť")}, + {0x166, 0, 0, 0, f(Yes, false, "")}, + {0x168, 0, 0, 1, f(Yes, true, "Ũ")}, + {0x169, 0, 0, 1, f(Yes, true, "ũ")}, + {0x16a, 0, 0, 1, f(Yes, true, "Ū")}, + {0x16b, 0, 0, 1, f(Yes, true, "ū")}, + {0x16c, 0, 0, 1, f(Yes, false, "Ŭ")}, + {0x16d, 0, 0, 1, f(Yes, false, "ŭ")}, + {0x16e, 0, 0, 1, f(Yes, false, "Ů")}, + {0x16f, 0, 0, 1, f(Yes, false, "ů")}, + {0x170, 0, 0, 1, f(Yes, false, "Ű")}, + {0x171, 0, 0, 1, f(Yes, false, "ű")}, + {0x172, 0, 0, 1, f(Yes, false, "Ų")}, + {0x173, 0, 0, 1, f(Yes, false, "ų")}, + {0x174, 0, 0, 1, f(Yes, false, "Ŵ")}, + {0x175, 0, 0, 1, f(Yes, false, "ŵ")}, + {0x176, 0, 0, 1, f(Yes, false, "Ŷ")}, + {0x177, 0, 0, 1, f(Yes, false, "ŷ")}, + {0x178, 0, 0, 1, f(Yes, false, "Ÿ")}, + {0x179, 0, 0, 1, f(Yes, false, "Ź")}, + {0x17a, 0, 0, 1, f(Yes, false, "ź")}, + {0x17b, 0, 0, 1, f(Yes, false, "Ż")}, + {0x17c, 0, 0, 1, f(Yes, false, "ż")}, + {0x17d, 0, 0, 1, f(Yes, false, "Ž")}, + {0x17e, 0, 0, 1, f(Yes, false, "ž")}, + {0x17f, 0, 0, 0, g(Yes, No, true, false, "", "s")}, + {0x180, 0, 0, 0, f(Yes, false, "")}, + {0x1a0, 0, 0, 1, f(Yes, true, "Ơ")}, + {0x1a1, 0, 0, 1, f(Yes, true, "ơ")}, + {0x1a2, 0, 0, 0, f(Yes, false, "")}, + {0x1af, 0, 0, 1, f(Yes, true, "Ư")}, + {0x1b0, 0, 0, 1, f(Yes, true, "ư")}, + {0x1b1, 0, 0, 0, f(Yes, false, "")}, + {0x1b7, 0, 0, 0, f(Yes, true, "")}, + {0x1b8, 0, 0, 0, f(Yes, false, "")}, + {0x1c4, 0, 0, 1, g(Yes, No, false, false, "", "DŽ")}, + {0x1c5, 0, 0, 1, g(Yes, No, false, false, "", "Dž")}, + {0x1c6, 0, 0, 1, g(Yes, No, false, false, "", "dž")}, + {0x1c7, 0, 0, 0, g(Yes, No, false, false, "", "LJ")}, + {0x1c8, 0, 0, 0, g(Yes, No, false, false, "", "Lj")}, + {0x1c9, 0, 0, 0, g(Yes, No, false, false, "", "lj")}, + {0x1ca, 0, 0, 0, g(Yes, No, false, false, "", "NJ")}, + {0x1cb, 0, 0, 0, g(Yes, No, false, false, "", "Nj")}, + {0x1cc, 0, 0, 0, g(Yes, No, false, false, "", "nj")}, + {0x1cd, 0, 0, 1, f(Yes, false, "Ǎ")}, + {0x1ce, 0, 0, 1, f(Yes, false, "ǎ")}, + {0x1cf, 0, 0, 1, f(Yes, false, "Ǐ")}, + {0x1d0, 0, 0, 1, f(Yes, false, "ǐ")}, + {0x1d1, 0, 0, 1, f(Yes, false, "Ǒ")}, + {0x1d2, 0, 0, 1, f(Yes, false, "ǒ")}, + {0x1d3, 0, 0, 1, f(Yes, false, "Ǔ")}, + {0x1d4, 0, 0, 1, f(Yes, false, "ǔ")}, + {0x1d5, 0, 0, 2, f(Yes, false, "Ǖ")}, + {0x1d6, 0, 0, 2, f(Yes, false, "ǖ")}, + {0x1d7, 0, 0, 2, f(Yes, false, "Ǘ")}, + {0x1d8, 0, 0, 2, f(Yes, false, "ǘ")}, + {0x1d9, 0, 0, 2, f(Yes, false, "Ǚ")}, + {0x1da, 0, 0, 2, f(Yes, false, "ǚ")}, + {0x1db, 0, 0, 2, f(Yes, false, "Ǜ")}, + {0x1dc, 0, 0, 2, f(Yes, false, "ǜ")}, + {0x1dd, 0, 0, 0, f(Yes, false, "")}, + {0x1de, 0, 0, 2, f(Yes, false, "Ǟ")}, + {0x1df, 0, 0, 2, f(Yes, false, "ǟ")}, + {0x1e0, 0, 0, 2, f(Yes, false, "Ǡ")}, + {0x1e1, 0, 0, 2, f(Yes, false, "ǡ")}, + {0x1e2, 0, 0, 1, f(Yes, false, "Ǣ")}, + {0x1e3, 0, 0, 1, f(Yes, false, "ǣ")}, + {0x1e4, 0, 0, 0, f(Yes, false, "")}, + {0x1e6, 0, 0, 1, f(Yes, false, "Ǧ")}, + {0x1e7, 0, 0, 1, f(Yes, false, "ǧ")}, + {0x1e8, 0, 0, 1, f(Yes, false, "Ǩ")}, + {0x1e9, 0, 0, 1, f(Yes, false, "ǩ")}, + {0x1ea, 0, 0, 1, f(Yes, true, "Ǫ")}, + {0x1eb, 0, 0, 1, f(Yes, true, "ǫ")}, + {0x1ec, 0, 0, 2, f(Yes, false, "Ǭ")}, + {0x1ed, 0, 0, 2, f(Yes, false, "ǭ")}, + {0x1ee, 0, 0, 1, f(Yes, false, "Ǯ")}, + {0x1ef, 0, 0, 1, f(Yes, false, "ǯ")}, + {0x1f0, 0, 0, 1, f(Yes, false, "ǰ")}, + {0x1f1, 0, 0, 0, g(Yes, No, false, false, "", "DZ")}, + {0x1f2, 0, 0, 0, g(Yes, No, false, false, "", "Dz")}, + {0x1f3, 0, 0, 0, g(Yes, No, false, false, "", "dz")}, + {0x1f4, 0, 0, 1, f(Yes, false, "Ǵ")}, + {0x1f5, 0, 0, 1, f(Yes, false, "ǵ")}, + {0x1f6, 0, 0, 0, f(Yes, false, "")}, + {0x1f8, 0, 0, 1, f(Yes, false, "Ǹ")}, + {0x1f9, 0, 0, 1, f(Yes, false, "ǹ")}, + {0x1fa, 0, 0, 2, f(Yes, false, "Ǻ")}, + {0x1fb, 0, 0, 2, f(Yes, false, "ǻ")}, + {0x1fc, 0, 0, 1, f(Yes, false, "Ǽ")}, + {0x1fd, 0, 0, 1, f(Yes, false, "ǽ")}, + {0x1fe, 0, 0, 1, f(Yes, false, "Ǿ")}, + {0x1ff, 0, 0, 1, f(Yes, false, "ǿ")}, + {0x200, 0, 0, 1, f(Yes, false, "Ȁ")}, + {0x201, 0, 0, 1, f(Yes, false, "ȁ")}, + {0x202, 0, 0, 1, f(Yes, false, "Ȃ")}, + {0x203, 0, 0, 1, f(Yes, false, "ȃ")}, + {0x204, 0, 0, 1, f(Yes, false, "Ȅ")}, + {0x205, 0, 0, 1, f(Yes, false, "ȅ")}, + {0x206, 0, 0, 1, f(Yes, false, "Ȇ")}, + {0x207, 0, 0, 1, f(Yes, false, "ȇ")}, + {0x208, 0, 0, 1, f(Yes, false, "Ȉ")}, + {0x209, 0, 0, 1, f(Yes, false, "ȉ")}, + {0x20a, 0, 0, 1, f(Yes, false, "Ȋ")}, + {0x20b, 0, 0, 1, f(Yes, false, "ȋ")}, + {0x20c, 0, 0, 1, f(Yes, false, "Ȍ")}, + {0x20d, 0, 0, 1, f(Yes, false, "ȍ")}, + {0x20e, 0, 0, 1, f(Yes, false, "Ȏ")}, + {0x20f, 0, 0, 1, f(Yes, false, "ȏ")}, + {0x210, 0, 0, 1, f(Yes, false, "Ȑ")}, + {0x211, 0, 0, 1, f(Yes, false, "ȑ")}, + {0x212, 0, 0, 1, f(Yes, false, "Ȓ")}, + {0x213, 0, 0, 1, f(Yes, false, "ȓ")}, + {0x214, 0, 0, 1, f(Yes, false, "Ȕ")}, + {0x215, 0, 0, 1, f(Yes, false, "ȕ")}, + {0x216, 0, 0, 1, f(Yes, false, "Ȗ")}, + {0x217, 0, 0, 1, f(Yes, false, "ȗ")}, + {0x218, 0, 0, 1, f(Yes, false, "Ș")}, + {0x219, 0, 0, 1, f(Yes, false, "ș")}, + {0x21a, 0, 0, 1, f(Yes, false, "Ț")}, + {0x21b, 0, 0, 1, f(Yes, false, "ț")}, + {0x21c, 0, 0, 0, f(Yes, false, "")}, + {0x21e, 0, 0, 1, f(Yes, false, "Ȟ")}, + {0x21f, 0, 0, 1, f(Yes, false, "ȟ")}, + {0x220, 0, 0, 0, f(Yes, false, "")}, + {0x226, 0, 0, 1, f(Yes, true, "Ȧ")}, + {0x227, 0, 0, 1, f(Yes, true, "ȧ")}, + {0x228, 0, 0, 1, f(Yes, true, "Ȩ")}, + {0x229, 0, 0, 1, f(Yes, true, "ȩ")}, + {0x22a, 0, 0, 2, f(Yes, false, "Ȫ")}, + {0x22b, 0, 0, 2, f(Yes, false, "ȫ")}, + {0x22c, 0, 0, 2, f(Yes, false, "Ȭ")}, + {0x22d, 0, 0, 2, f(Yes, false, "ȭ")}, + {0x22e, 0, 0, 1, f(Yes, true, "Ȯ")}, + {0x22f, 0, 0, 1, f(Yes, true, "ȯ")}, + {0x230, 0, 0, 2, f(Yes, false, "Ȱ")}, + {0x231, 0, 0, 2, f(Yes, false, "ȱ")}, + {0x232, 0, 0, 1, f(Yes, false, "Ȳ")}, + {0x233, 0, 0, 1, f(Yes, false, "ȳ")}, + {0x234, 0, 0, 0, f(Yes, false, "")}, + {0x292, 0, 0, 0, f(Yes, true, "")}, + {0x293, 0, 0, 0, f(Yes, false, "")}, + {0x2b0, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0x2b1, 0, 0, 0, g(Yes, No, false, false, "", "ɦ")}, + {0x2b2, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x2b3, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0x2b4, 0, 0, 0, g(Yes, No, false, false, "", "ɹ")}, + {0x2b5, 0, 0, 0, g(Yes, No, false, false, "", "ɻ")}, + {0x2b6, 0, 0, 0, g(Yes, No, false, false, "", "ʁ")}, + {0x2b7, 0, 0, 0, g(Yes, No, false, false, "", "w")}, + {0x2b8, 0, 0, 0, g(Yes, No, false, false, "", "y")}, + {0x2b9, 0, 0, 0, f(Yes, false, "")}, + {0x2d8, 0, 0, 1, g(Yes, No, false, false, "", " ̆")}, + {0x2d9, 0, 0, 1, g(Yes, No, false, false, "", " ̇")}, + {0x2da, 0, 0, 1, g(Yes, No, false, false, "", " ̊")}, + {0x2db, 0, 0, 1, g(Yes, No, false, false, "", " ̨")}, + {0x2dc, 0, 0, 1, g(Yes, No, false, false, "", " ̃")}, + {0x2dd, 0, 0, 1, g(Yes, No, false, false, "", " ̋")}, + {0x2de, 0, 0, 0, f(Yes, false, "")}, + {0x2e0, 0, 0, 0, g(Yes, No, false, false, "", "ɣ")}, + {0x2e1, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x2e2, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0x2e3, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x2e4, 0, 0, 0, g(Yes, No, false, false, "", "ʕ")}, + {0x2e5, 0, 0, 0, f(Yes, false, "")}, + {0x300, 230, 1, 1, f(Maybe, false, "")}, + {0x305, 230, 1, 1, f(Yes, false, "")}, + {0x306, 230, 1, 1, f(Maybe, false, "")}, + {0x30d, 230, 1, 1, f(Yes, false, "")}, + {0x30f, 230, 1, 1, f(Maybe, false, "")}, + {0x310, 230, 1, 1, f(Yes, false, "")}, + {0x311, 230, 1, 1, f(Maybe, false, "")}, + {0x312, 230, 1, 1, f(Yes, false, "")}, + {0x313, 230, 1, 1, f(Maybe, false, "")}, + {0x315, 232, 1, 1, f(Yes, false, "")}, + {0x316, 220, 1, 1, f(Yes, false, "")}, + {0x31a, 232, 1, 1, f(Yes, false, "")}, + {0x31b, 216, 1, 1, f(Maybe, false, "")}, + {0x31c, 220, 1, 1, f(Yes, false, "")}, + {0x321, 202, 1, 1, f(Yes, false, "")}, + {0x323, 220, 1, 1, f(Maybe, false, "")}, + {0x327, 202, 1, 1, f(Maybe, false, "")}, + {0x329, 220, 1, 1, f(Yes, false, "")}, + {0x32d, 220, 1, 1, f(Maybe, false, "")}, + {0x32f, 220, 1, 1, f(Yes, false, "")}, + {0x330, 220, 1, 1, f(Maybe, false, "")}, + {0x332, 220, 1, 1, f(Yes, false, "")}, + {0x334, 1, 1, 1, f(Yes, false, "")}, + {0x338, 1, 1, 1, f(Maybe, false, "")}, + {0x339, 220, 1, 1, f(Yes, false, "")}, + {0x33d, 230, 1, 1, f(Yes, false, "")}, + {0x340, 230, 1, 1, f(No, false, "̀")}, + {0x341, 230, 1, 1, f(No, false, "́")}, + {0x342, 230, 1, 1, f(Maybe, false, "")}, + {0x343, 230, 1, 1, f(No, false, "̓")}, + {0x344, 230, 2, 2, f(No, false, "̈́")}, + {0x345, 240, 1, 1, f(Maybe, false, "")}, + {0x346, 230, 1, 1, f(Yes, false, "")}, + {0x347, 220, 1, 1, f(Yes, false, "")}, + {0x34a, 230, 1, 1, f(Yes, false, "")}, + {0x34d, 220, 1, 1, f(Yes, false, "")}, + {0x34f, 0, 0, 0, f(Yes, false, "")}, + {0x350, 230, 1, 1, f(Yes, false, "")}, + {0x353, 220, 1, 1, f(Yes, false, "")}, + {0x357, 230, 1, 1, f(Yes, false, "")}, + {0x358, 232, 1, 1, f(Yes, false, "")}, + {0x359, 220, 1, 1, f(Yes, false, "")}, + {0x35b, 230, 1, 1, f(Yes, false, "")}, + {0x35c, 233, 1, 1, f(Yes, false, "")}, + {0x35d, 234, 1, 1, f(Yes, false, "")}, + {0x35f, 233, 1, 1, f(Yes, false, "")}, + {0x360, 234, 1, 1, f(Yes, false, "")}, + {0x362, 233, 1, 1, f(Yes, false, "")}, + {0x363, 230, 1, 1, f(Yes, false, "")}, + {0x370, 0, 0, 0, f(Yes, false, "")}, + {0x374, 0, 0, 0, f(No, false, "ʹ")}, + {0x375, 0, 0, 0, f(Yes, false, "")}, + {0x37a, 0, 0, 1, g(Yes, No, false, false, "", " ͅ")}, + {0x37b, 0, 0, 0, f(Yes, false, "")}, + {0x37e, 0, 0, 0, f(No, false, ";")}, + {0x37f, 0, 0, 0, f(Yes, false, "")}, + {0x384, 0, 0, 1, g(Yes, No, false, false, "", " ́")}, + {0x385, 0, 0, 2, g(Yes, No, false, false, "΅", " ̈́")}, + {0x386, 0, 0, 1, f(Yes, false, "Ά")}, + {0x387, 0, 0, 0, f(No, false, "·")}, + {0x388, 0, 0, 1, f(Yes, false, "Έ")}, + {0x389, 0, 0, 1, f(Yes, false, "Ή")}, + {0x38a, 0, 0, 1, f(Yes, false, "Ί")}, + {0x38b, 0, 0, 0, f(Yes, false, "")}, + {0x38c, 0, 0, 1, f(Yes, false, "Ό")}, + {0x38d, 0, 0, 0, f(Yes, false, "")}, + {0x38e, 0, 0, 1, f(Yes, false, "Ύ")}, + {0x38f, 0, 0, 1, f(Yes, false, "Ώ")}, + {0x390, 0, 0, 2, f(Yes, false, "ΐ")}, + {0x391, 0, 0, 0, f(Yes, true, "")}, + {0x392, 0, 0, 0, f(Yes, false, "")}, + {0x395, 0, 0, 0, f(Yes, true, "")}, + {0x396, 0, 0, 0, f(Yes, false, "")}, + {0x397, 0, 0, 0, f(Yes, true, "")}, + {0x398, 0, 0, 0, f(Yes, false, "")}, + {0x399, 0, 0, 0, f(Yes, true, "")}, + {0x39a, 0, 0, 0, f(Yes, false, "")}, + {0x39f, 0, 0, 0, f(Yes, true, "")}, + {0x3a0, 0, 0, 0, f(Yes, false, "")}, + {0x3a1, 0, 0, 0, f(Yes, true, "")}, + {0x3a2, 0, 0, 0, f(Yes, false, "")}, + {0x3a5, 0, 0, 0, f(Yes, true, "")}, + {0x3a6, 0, 0, 0, f(Yes, false, "")}, + {0x3a9, 0, 0, 0, f(Yes, true, "")}, + {0x3aa, 0, 0, 1, f(Yes, false, "Ϊ")}, + {0x3ab, 0, 0, 1, f(Yes, false, "Ϋ")}, + {0x3ac, 0, 0, 1, f(Yes, true, "ά")}, + {0x3ad, 0, 0, 1, f(Yes, false, "έ")}, + {0x3ae, 0, 0, 1, f(Yes, true, "ή")}, + {0x3af, 0, 0, 1, f(Yes, false, "ί")}, + {0x3b0, 0, 0, 2, f(Yes, false, "ΰ")}, + {0x3b1, 0, 0, 0, f(Yes, true, "")}, + {0x3b2, 0, 0, 0, f(Yes, false, "")}, + {0x3b5, 0, 0, 0, f(Yes, true, "")}, + {0x3b6, 0, 0, 0, f(Yes, false, "")}, + {0x3b7, 0, 0, 0, f(Yes, true, "")}, + {0x3b8, 0, 0, 0, f(Yes, false, "")}, + {0x3b9, 0, 0, 0, f(Yes, true, "")}, + {0x3ba, 0, 0, 0, f(Yes, false, "")}, + {0x3bf, 0, 0, 0, f(Yes, true, "")}, + {0x3c0, 0, 0, 0, f(Yes, false, "")}, + {0x3c1, 0, 0, 0, f(Yes, true, "")}, + {0x3c2, 0, 0, 0, f(Yes, false, "")}, + {0x3c5, 0, 0, 0, f(Yes, true, "")}, + {0x3c6, 0, 0, 0, f(Yes, false, "")}, + {0x3c9, 0, 0, 0, f(Yes, true, "")}, + {0x3ca, 0, 0, 1, f(Yes, true, "ϊ")}, + {0x3cb, 0, 0, 1, f(Yes, true, "ϋ")}, + {0x3cc, 0, 0, 1, f(Yes, false, "ό")}, + {0x3cd, 0, 0, 1, f(Yes, false, "ύ")}, + {0x3ce, 0, 0, 1, f(Yes, true, "ώ")}, + {0x3cf, 0, 0, 0, f(Yes, false, "")}, + {0x3d0, 0, 0, 0, g(Yes, No, false, false, "", "β")}, + {0x3d1, 0, 0, 0, g(Yes, No, false, false, "", "θ")}, + {0x3d2, 0, 0, 0, g(Yes, No, true, false, "", "Υ")}, + {0x3d3, 0, 0, 1, g(Yes, No, false, false, "ϓ", "Ύ")}, + {0x3d4, 0, 0, 1, g(Yes, No, false, false, "ϔ", "Ϋ")}, + {0x3d5, 0, 0, 0, g(Yes, No, false, false, "", "φ")}, + {0x3d6, 0, 0, 0, g(Yes, No, false, false, "", "π")}, + {0x3d7, 0, 0, 0, f(Yes, false, "")}, + {0x3f0, 0, 0, 0, g(Yes, No, false, false, "", "κ")}, + {0x3f1, 0, 0, 0, g(Yes, No, false, false, "", "ρ")}, + {0x3f2, 0, 0, 0, g(Yes, No, false, false, "", "ς")}, + {0x3f3, 0, 0, 0, f(Yes, false, "")}, + {0x3f4, 0, 0, 0, g(Yes, No, false, false, "", "Θ")}, + {0x3f5, 0, 0, 0, g(Yes, No, false, false, "", "ε")}, + {0x3f6, 0, 0, 0, f(Yes, false, "")}, + {0x3f9, 0, 0, 0, g(Yes, No, false, false, "", "Σ")}, + {0x3fa, 0, 0, 0, f(Yes, false, "")}, + {0x400, 0, 0, 1, f(Yes, false, "Ѐ")}, + {0x401, 0, 0, 1, f(Yes, false, "Ё")}, + {0x402, 0, 0, 0, f(Yes, false, "")}, + {0x403, 0, 0, 1, f(Yes, false, "Ѓ")}, + {0x404, 0, 0, 0, f(Yes, false, "")}, + {0x406, 0, 0, 0, f(Yes, true, "")}, + {0x407, 0, 0, 1, f(Yes, false, "Ї")}, + {0x408, 0, 0, 0, f(Yes, false, "")}, + {0x40c, 0, 0, 1, f(Yes, false, "Ќ")}, + {0x40d, 0, 0, 1, f(Yes, false, "Ѝ")}, + {0x40e, 0, 0, 1, f(Yes, false, "Ў")}, + {0x40f, 0, 0, 0, f(Yes, false, "")}, + {0x410, 0, 0, 0, f(Yes, true, "")}, + {0x411, 0, 0, 0, f(Yes, false, "")}, + {0x413, 0, 0, 0, f(Yes, true, "")}, + {0x414, 0, 0, 0, f(Yes, false, "")}, + {0x415, 0, 0, 0, f(Yes, true, "")}, + {0x419, 0, 0, 1, f(Yes, false, "Й")}, + {0x41a, 0, 0, 0, f(Yes, true, "")}, + {0x41b, 0, 0, 0, f(Yes, false, "")}, + {0x41e, 0, 0, 0, f(Yes, true, "")}, + {0x41f, 0, 0, 0, f(Yes, false, "")}, + {0x423, 0, 0, 0, f(Yes, true, "")}, + {0x424, 0, 0, 0, f(Yes, false, "")}, + {0x427, 0, 0, 0, f(Yes, true, "")}, + {0x428, 0, 0, 0, f(Yes, false, "")}, + {0x42b, 0, 0, 0, f(Yes, true, "")}, + {0x42c, 0, 0, 0, f(Yes, false, "")}, + {0x42d, 0, 0, 0, f(Yes, true, "")}, + {0x42e, 0, 0, 0, f(Yes, false, "")}, + {0x430, 0, 0, 0, f(Yes, true, "")}, + {0x431, 0, 0, 0, f(Yes, false, "")}, + {0x433, 0, 0, 0, f(Yes, true, "")}, + {0x434, 0, 0, 0, f(Yes, false, "")}, + {0x435, 0, 0, 0, f(Yes, true, "")}, + {0x439, 0, 0, 1, f(Yes, false, "й")}, + {0x43a, 0, 0, 0, f(Yes, true, "")}, + {0x43b, 0, 0, 0, f(Yes, false, "")}, + {0x43e, 0, 0, 0, f(Yes, true, "")}, + {0x43f, 0, 0, 0, f(Yes, false, "")}, + {0x443, 0, 0, 0, f(Yes, true, "")}, + {0x444, 0, 0, 0, f(Yes, false, "")}, + {0x447, 0, 0, 0, f(Yes, true, "")}, + {0x448, 0, 0, 0, f(Yes, false, "")}, + {0x44b, 0, 0, 0, f(Yes, true, "")}, + {0x44c, 0, 0, 0, f(Yes, false, "")}, + {0x44d, 0, 0, 0, f(Yes, true, "")}, + {0x44e, 0, 0, 0, f(Yes, false, "")}, + {0x450, 0, 0, 1, f(Yes, false, "ѐ")}, + {0x451, 0, 0, 1, f(Yes, false, "ё")}, + {0x452, 0, 0, 0, f(Yes, false, "")}, + {0x453, 0, 0, 1, f(Yes, false, "ѓ")}, + {0x454, 0, 0, 0, f(Yes, false, "")}, + {0x456, 0, 0, 0, f(Yes, true, "")}, + {0x457, 0, 0, 1, f(Yes, false, "ї")}, + {0x458, 0, 0, 0, f(Yes, false, "")}, + {0x45c, 0, 0, 1, f(Yes, false, "ќ")}, + {0x45d, 0, 0, 1, f(Yes, false, "ѝ")}, + {0x45e, 0, 0, 1, f(Yes, false, "ў")}, + {0x45f, 0, 0, 0, f(Yes, false, "")}, + {0x474, 0, 0, 0, f(Yes, true, "")}, + {0x476, 0, 0, 1, f(Yes, false, "Ѷ")}, + {0x477, 0, 0, 1, f(Yes, false, "ѷ")}, + {0x478, 0, 0, 0, f(Yes, false, "")}, + {0x483, 230, 1, 1, f(Yes, false, "")}, + {0x488, 0, 0, 0, f(Yes, false, "")}, + {0x4c1, 0, 0, 1, f(Yes, false, "Ӂ")}, + {0x4c2, 0, 0, 1, f(Yes, false, "ӂ")}, + {0x4c3, 0, 0, 0, f(Yes, false, "")}, + {0x4d0, 0, 0, 1, f(Yes, false, "Ӑ")}, + {0x4d1, 0, 0, 1, f(Yes, false, "ӑ")}, + {0x4d2, 0, 0, 1, f(Yes, false, "Ӓ")}, + {0x4d3, 0, 0, 1, f(Yes, false, "ӓ")}, + {0x4d4, 0, 0, 0, f(Yes, false, "")}, + {0x4d6, 0, 0, 1, f(Yes, false, "Ӗ")}, + {0x4d7, 0, 0, 1, f(Yes, false, "ӗ")}, + {0x4d8, 0, 0, 0, f(Yes, true, "")}, + {0x4da, 0, 0, 1, f(Yes, false, "Ӛ")}, + {0x4db, 0, 0, 1, f(Yes, false, "ӛ")}, + {0x4dc, 0, 0, 1, f(Yes, false, "Ӝ")}, + {0x4dd, 0, 0, 1, f(Yes, false, "ӝ")}, + {0x4de, 0, 0, 1, f(Yes, false, "Ӟ")}, + {0x4df, 0, 0, 1, f(Yes, false, "ӟ")}, + {0x4e0, 0, 0, 0, f(Yes, false, "")}, + {0x4e2, 0, 0, 1, f(Yes, false, "Ӣ")}, + {0x4e3, 0, 0, 1, f(Yes, false, "ӣ")}, + {0x4e4, 0, 0, 1, f(Yes, false, "Ӥ")}, + {0x4e5, 0, 0, 1, f(Yes, false, "ӥ")}, + {0x4e6, 0, 0, 1, f(Yes, false, "Ӧ")}, + {0x4e7, 0, 0, 1, f(Yes, false, "ӧ")}, + {0x4e8, 0, 0, 0, f(Yes, true, "")}, + {0x4ea, 0, 0, 1, f(Yes, false, "Ӫ")}, + {0x4eb, 0, 0, 1, f(Yes, false, "ӫ")}, + {0x4ec, 0, 0, 1, f(Yes, false, "Ӭ")}, + {0x4ed, 0, 0, 1, f(Yes, false, "ӭ")}, + {0x4ee, 0, 0, 1, f(Yes, false, "Ӯ")}, + {0x4ef, 0, 0, 1, f(Yes, false, "ӯ")}, + {0x4f0, 0, 0, 1, f(Yes, false, "Ӱ")}, + {0x4f1, 0, 0, 1, f(Yes, false, "ӱ")}, + {0x4f2, 0, 0, 1, f(Yes, false, "Ӳ")}, + {0x4f3, 0, 0, 1, f(Yes, false, "ӳ")}, + {0x4f4, 0, 0, 1, f(Yes, false, "Ӵ")}, + {0x4f5, 0, 0, 1, f(Yes, false, "ӵ")}, + {0x4f6, 0, 0, 0, f(Yes, false, "")}, + {0x4f8, 0, 0, 1, f(Yes, false, "Ӹ")}, + {0x4f9, 0, 0, 1, f(Yes, false, "ӹ")}, + {0x4fa, 0, 0, 0, f(Yes, false, "")}, + {0x587, 0, 0, 0, g(Yes, No, false, false, "", "եւ")}, + {0x588, 0, 0, 0, f(Yes, false, "")}, + {0x591, 220, 1, 1, f(Yes, false, "")}, + {0x592, 230, 1, 1, f(Yes, false, "")}, + {0x596, 220, 1, 1, f(Yes, false, "")}, + {0x597, 230, 1, 1, f(Yes, false, "")}, + {0x59a, 222, 1, 1, f(Yes, false, "")}, + {0x59b, 220, 1, 1, f(Yes, false, "")}, + {0x59c, 230, 1, 1, f(Yes, false, "")}, + {0x5a2, 220, 1, 1, f(Yes, false, "")}, + {0x5a8, 230, 1, 1, f(Yes, false, "")}, + {0x5aa, 220, 1, 1, f(Yes, false, "")}, + {0x5ab, 230, 1, 1, f(Yes, false, "")}, + {0x5ad, 222, 1, 1, f(Yes, false, "")}, + {0x5ae, 228, 1, 1, f(Yes, false, "")}, + {0x5af, 230, 1, 1, f(Yes, false, "")}, + {0x5b0, 10, 1, 1, f(Yes, false, "")}, + {0x5b1, 11, 1, 1, f(Yes, false, "")}, + {0x5b2, 12, 1, 1, f(Yes, false, "")}, + {0x5b3, 13, 1, 1, f(Yes, false, "")}, + {0x5b4, 14, 1, 1, f(Yes, false, "")}, + {0x5b5, 15, 1, 1, f(Yes, false, "")}, + {0x5b6, 16, 1, 1, f(Yes, false, "")}, + {0x5b7, 17, 1, 1, f(Yes, false, "")}, + {0x5b8, 18, 1, 1, f(Yes, false, "")}, + {0x5b9, 19, 1, 1, f(Yes, false, "")}, + {0x5bb, 20, 1, 1, f(Yes, false, "")}, + {0x5bc, 21, 1, 1, f(Yes, false, "")}, + {0x5bd, 22, 1, 1, f(Yes, false, "")}, + {0x5be, 0, 0, 0, f(Yes, false, "")}, + {0x5bf, 23, 1, 1, f(Yes, false, "")}, + {0x5c0, 0, 0, 0, f(Yes, false, "")}, + {0x5c1, 24, 1, 1, f(Yes, false, "")}, + {0x5c2, 25, 1, 1, f(Yes, false, "")}, + {0x5c3, 0, 0, 0, f(Yes, false, "")}, + {0x5c4, 230, 1, 1, f(Yes, false, "")}, + {0x5c5, 220, 1, 1, f(Yes, false, "")}, + {0x5c6, 0, 0, 0, f(Yes, false, "")}, + {0x5c7, 18, 1, 1, f(Yes, false, "")}, + {0x5c8, 0, 0, 0, f(Yes, false, "")}, + {0x610, 230, 1, 1, f(Yes, false, "")}, + {0x618, 30, 1, 1, f(Yes, false, "")}, + {0x619, 31, 1, 1, f(Yes, false, "")}, + {0x61a, 32, 1, 1, f(Yes, false, "")}, + {0x61b, 0, 0, 0, f(Yes, false, "")}, + {0x622, 0, 0, 1, f(Yes, false, "آ")}, + {0x623, 0, 0, 1, f(Yes, false, "أ")}, + {0x624, 0, 0, 1, f(Yes, false, "ؤ")}, + {0x625, 0, 0, 1, f(Yes, false, "إ")}, + {0x626, 0, 0, 1, f(Yes, false, "ئ")}, + {0x627, 0, 0, 0, f(Yes, true, "")}, + {0x628, 0, 0, 0, f(Yes, false, "")}, + {0x648, 0, 0, 0, f(Yes, true, "")}, + {0x649, 0, 0, 0, f(Yes, false, "")}, + {0x64a, 0, 0, 0, f(Yes, true, "")}, + {0x64b, 27, 1, 1, f(Yes, false, "")}, + {0x64c, 28, 1, 1, f(Yes, false, "")}, + {0x64d, 29, 1, 1, f(Yes, false, "")}, + {0x64e, 30, 1, 1, f(Yes, false, "")}, + {0x64f, 31, 1, 1, f(Yes, false, "")}, + {0x650, 32, 1, 1, f(Yes, false, "")}, + {0x651, 33, 1, 1, f(Yes, false, "")}, + {0x652, 34, 1, 1, f(Yes, false, "")}, + {0x653, 230, 1, 1, f(Maybe, false, "")}, + {0x655, 220, 1, 1, f(Maybe, false, "")}, + {0x656, 220, 1, 1, f(Yes, false, "")}, + {0x657, 230, 1, 1, f(Yes, false, "")}, + {0x65c, 220, 1, 1, f(Yes, false, "")}, + {0x65d, 230, 1, 1, f(Yes, false, "")}, + {0x65f, 220, 1, 1, f(Yes, false, "")}, + {0x660, 0, 0, 0, f(Yes, false, "")}, + {0x670, 35, 1, 1, f(Yes, false, "")}, + {0x671, 0, 0, 0, f(Yes, false, "")}, + {0x675, 0, 0, 0, g(Yes, No, false, false, "", "اٴ")}, + {0x676, 0, 0, 0, g(Yes, No, false, false, "", "وٴ")}, + {0x677, 0, 0, 0, g(Yes, No, false, false, "", "ۇٴ")}, + {0x678, 0, 0, 0, g(Yes, No, false, false, "", "يٴ")}, + {0x679, 0, 0, 0, f(Yes, false, "")}, + {0x6c0, 0, 0, 1, f(Yes, false, "ۀ")}, + {0x6c1, 0, 0, 0, f(Yes, true, "")}, + {0x6c2, 0, 0, 1, f(Yes, false, "ۂ")}, + {0x6c3, 0, 0, 0, f(Yes, false, "")}, + {0x6d2, 0, 0, 0, f(Yes, true, "")}, + {0x6d3, 0, 0, 1, f(Yes, false, "ۓ")}, + {0x6d4, 0, 0, 0, f(Yes, false, "")}, + {0x6d5, 0, 0, 0, f(Yes, true, "")}, + {0x6d6, 230, 1, 1, f(Yes, false, "")}, + {0x6dd, 0, 0, 0, f(Yes, false, "")}, + {0x6df, 230, 1, 1, f(Yes, false, "")}, + {0x6e3, 220, 1, 1, f(Yes, false, "")}, + {0x6e4, 230, 1, 1, f(Yes, false, "")}, + {0x6e5, 0, 0, 0, f(Yes, false, "")}, + {0x6e7, 230, 1, 1, f(Yes, false, "")}, + {0x6e9, 0, 0, 0, f(Yes, false, "")}, + {0x6ea, 220, 1, 1, f(Yes, false, "")}, + {0x6eb, 230, 1, 1, f(Yes, false, "")}, + {0x6ed, 220, 1, 1, f(Yes, false, "")}, + {0x6ee, 0, 0, 0, f(Yes, false, "")}, + {0x711, 36, 1, 1, f(Yes, false, "")}, + {0x712, 0, 0, 0, f(Yes, false, "")}, + {0x730, 230, 1, 1, f(Yes, false, "")}, + {0x731, 220, 1, 1, f(Yes, false, "")}, + {0x732, 230, 1, 1, f(Yes, false, "")}, + {0x734, 220, 1, 1, f(Yes, false, "")}, + {0x735, 230, 1, 1, f(Yes, false, "")}, + {0x737, 220, 1, 1, f(Yes, false, "")}, + {0x73a, 230, 1, 1, f(Yes, false, "")}, + {0x73b, 220, 1, 1, f(Yes, false, "")}, + {0x73d, 230, 1, 1, f(Yes, false, "")}, + {0x73e, 220, 1, 1, f(Yes, false, "")}, + {0x73f, 230, 1, 1, f(Yes, false, "")}, + {0x742, 220, 1, 1, f(Yes, false, "")}, + {0x743, 230, 1, 1, f(Yes, false, "")}, + {0x744, 220, 1, 1, f(Yes, false, "")}, + {0x745, 230, 1, 1, f(Yes, false, "")}, + {0x746, 220, 1, 1, f(Yes, false, "")}, + {0x747, 230, 1, 1, f(Yes, false, "")}, + {0x748, 220, 1, 1, f(Yes, false, "")}, + {0x749, 230, 1, 1, f(Yes, false, "")}, + {0x74b, 0, 0, 0, f(Yes, false, "")}, + {0x7eb, 230, 1, 1, f(Yes, false, "")}, + {0x7f2, 220, 1, 1, f(Yes, false, "")}, + {0x7f3, 230, 1, 1, f(Yes, false, "")}, + {0x7f4, 0, 0, 0, f(Yes, false, "")}, + {0x816, 230, 1, 1, f(Yes, false, "")}, + {0x81a, 0, 0, 0, f(Yes, false, "")}, + {0x81b, 230, 1, 1, f(Yes, false, "")}, + {0x824, 0, 0, 0, f(Yes, false, "")}, + {0x825, 230, 1, 1, f(Yes, false, "")}, + {0x828, 0, 0, 0, f(Yes, false, "")}, + {0x829, 230, 1, 1, f(Yes, false, "")}, + {0x82e, 0, 0, 0, f(Yes, false, "")}, + {0x859, 220, 1, 1, f(Yes, false, "")}, + {0x85c, 0, 0, 0, f(Yes, false, "")}, + {0x8d4, 230, 1, 1, f(Yes, false, "")}, + {0x8e2, 0, 0, 0, f(Yes, false, "")}, + {0x8e3, 220, 1, 1, f(Yes, false, "")}, + {0x8e4, 230, 1, 1, f(Yes, false, "")}, + {0x8e6, 220, 1, 1, f(Yes, false, "")}, + {0x8e7, 230, 1, 1, f(Yes, false, "")}, + {0x8e9, 220, 1, 1, f(Yes, false, "")}, + {0x8ea, 230, 1, 1, f(Yes, false, "")}, + {0x8ed, 220, 1, 1, f(Yes, false, "")}, + {0x8f0, 27, 1, 1, f(Yes, false, "")}, + {0x8f1, 28, 1, 1, f(Yes, false, "")}, + {0x8f2, 29, 1, 1, f(Yes, false, "")}, + {0x8f3, 230, 1, 1, f(Yes, false, "")}, + {0x8f6, 220, 1, 1, f(Yes, false, "")}, + {0x8f7, 230, 1, 1, f(Yes, false, "")}, + {0x8f9, 220, 1, 1, f(Yes, false, "")}, + {0x8fb, 230, 1, 1, f(Yes, false, "")}, + {0x900, 0, 0, 0, f(Yes, false, "")}, + {0x928, 0, 0, 0, f(Yes, true, "")}, + {0x929, 0, 0, 1, f(Yes, false, "ऩ")}, + {0x92a, 0, 0, 0, f(Yes, false, "")}, + {0x930, 0, 0, 0, f(Yes, true, "")}, + {0x931, 0, 0, 1, f(Yes, false, "ऱ")}, + {0x932, 0, 0, 0, f(Yes, false, "")}, + {0x933, 0, 0, 0, f(Yes, true, "")}, + {0x934, 0, 0, 1, f(Yes, false, "ऴ")}, + {0x935, 0, 0, 0, f(Yes, false, "")}, + {0x93c, 7, 1, 1, f(Maybe, false, "")}, + {0x93d, 0, 0, 0, f(Yes, false, "")}, + {0x94d, 9, 1, 1, f(Yes, false, "")}, + {0x94e, 0, 0, 0, f(Yes, false, "")}, + {0x951, 230, 1, 1, f(Yes, false, "")}, + {0x952, 220, 1, 1, f(Yes, false, "")}, + {0x953, 230, 1, 1, f(Yes, false, "")}, + {0x955, 0, 0, 0, f(Yes, false, "")}, + {0x958, 0, 0, 1, f(No, false, "क़")}, + {0x959, 0, 0, 1, f(No, false, "ख़")}, + {0x95a, 0, 0, 1, f(No, false, "ग़")}, + {0x95b, 0, 0, 1, f(No, false, "ज़")}, + {0x95c, 0, 0, 1, f(No, false, "ड़")}, + {0x95d, 0, 0, 1, f(No, false, "ढ़")}, + {0x95e, 0, 0, 1, f(No, false, "फ़")}, + {0x95f, 0, 0, 1, f(No, false, "य़")}, + {0x960, 0, 0, 0, f(Yes, false, "")}, + {0x9bc, 7, 1, 1, f(Yes, false, "")}, + {0x9bd, 0, 0, 0, f(Yes, false, "")}, + {0x9be, 0, 1, 1, f(Maybe, false, "")}, + {0x9bf, 0, 0, 0, f(Yes, false, "")}, + {0x9c7, 0, 0, 0, f(Yes, true, "")}, + {0x9c8, 0, 0, 0, f(Yes, false, "")}, + {0x9cb, 0, 0, 1, f(Yes, false, "ো")}, + {0x9cc, 0, 0, 1, f(Yes, false, "ৌ")}, + {0x9cd, 9, 1, 1, f(Yes, false, "")}, + {0x9ce, 0, 0, 0, f(Yes, false, "")}, + {0x9d7, 0, 1, 1, f(Maybe, false, "")}, + {0x9d8, 0, 0, 0, f(Yes, false, "")}, + {0x9dc, 0, 0, 1, f(No, false, "ড়")}, + {0x9dd, 0, 0, 1, f(No, false, "ঢ়")}, + {0x9de, 0, 0, 0, f(Yes, false, "")}, + {0x9df, 0, 0, 1, f(No, false, "য়")}, + {0x9e0, 0, 0, 0, f(Yes, false, "")}, + {0xa33, 0, 0, 1, f(No, false, "ਲ਼")}, + {0xa34, 0, 0, 0, f(Yes, false, "")}, + {0xa36, 0, 0, 1, f(No, false, "ਸ਼")}, + {0xa37, 0, 0, 0, f(Yes, false, "")}, + {0xa3c, 7, 1, 1, f(Yes, false, "")}, + {0xa3d, 0, 0, 0, f(Yes, false, "")}, + {0xa4d, 9, 1, 1, f(Yes, false, "")}, + {0xa4e, 0, 0, 0, f(Yes, false, "")}, + {0xa59, 0, 0, 1, f(No, false, "ਖ਼")}, + {0xa5a, 0, 0, 1, f(No, false, "ਗ਼")}, + {0xa5b, 0, 0, 1, f(No, false, "ਜ਼")}, + {0xa5c, 0, 0, 0, f(Yes, false, "")}, + {0xa5e, 0, 0, 1, f(No, false, "ਫ਼")}, + {0xa5f, 0, 0, 0, f(Yes, false, "")}, + {0xabc, 7, 1, 1, f(Yes, false, "")}, + {0xabd, 0, 0, 0, f(Yes, false, "")}, + {0xacd, 9, 1, 1, f(Yes, false, "")}, + {0xace, 0, 0, 0, f(Yes, false, "")}, + {0xb3c, 7, 1, 1, f(Yes, false, "")}, + {0xb3d, 0, 0, 0, f(Yes, false, "")}, + {0xb3e, 0, 1, 1, f(Maybe, false, "")}, + {0xb3f, 0, 0, 0, f(Yes, false, "")}, + {0xb47, 0, 0, 0, f(Yes, true, "")}, + {0xb48, 0, 0, 1, f(Yes, false, "ୈ")}, + {0xb49, 0, 0, 0, f(Yes, false, "")}, + {0xb4b, 0, 0, 1, f(Yes, false, "ୋ")}, + {0xb4c, 0, 0, 1, f(Yes, false, "ୌ")}, + {0xb4d, 9, 1, 1, f(Yes, false, "")}, + {0xb4e, 0, 0, 0, f(Yes, false, "")}, + {0xb56, 0, 1, 1, f(Maybe, false, "")}, + {0xb58, 0, 0, 0, f(Yes, false, "")}, + {0xb5c, 0, 0, 1, f(No, false, "ଡ଼")}, + {0xb5d, 0, 0, 1, f(No, false, "ଢ଼")}, + {0xb5e, 0, 0, 0, f(Yes, false, "")}, + {0xb92, 0, 0, 0, f(Yes, true, "")}, + {0xb93, 0, 0, 0, f(Yes, false, "")}, + {0xb94, 0, 0, 1, f(Yes, false, "ஔ")}, + {0xb95, 0, 0, 0, f(Yes, false, "")}, + {0xbbe, 0, 1, 1, f(Maybe, false, "")}, + {0xbbf, 0, 0, 0, f(Yes, false, "")}, + {0xbc6, 0, 0, 0, f(Yes, true, "")}, + {0xbc8, 0, 0, 0, f(Yes, false, "")}, + {0xbca, 0, 0, 1, f(Yes, false, "ொ")}, + {0xbcb, 0, 0, 1, f(Yes, false, "ோ")}, + {0xbcc, 0, 0, 1, f(Yes, false, "ௌ")}, + {0xbcd, 9, 1, 1, f(Yes, false, "")}, + {0xbce, 0, 0, 0, f(Yes, false, "")}, + {0xbd7, 0, 1, 1, f(Maybe, false, "")}, + {0xbd8, 0, 0, 0, f(Yes, false, "")}, + {0xc46, 0, 0, 0, f(Yes, true, "")}, + {0xc47, 0, 0, 0, f(Yes, false, "")}, + {0xc48, 0, 0, 1, f(Yes, false, "ై")}, + {0xc49, 0, 0, 0, f(Yes, false, "")}, + {0xc4d, 9, 1, 1, f(Yes, false, "")}, + {0xc4e, 0, 0, 0, f(Yes, false, "")}, + {0xc55, 84, 1, 1, f(Yes, false, "")}, + {0xc56, 91, 1, 1, f(Maybe, false, "")}, + {0xc57, 0, 0, 0, f(Yes, false, "")}, + {0xcbc, 7, 1, 1, f(Yes, false, "")}, + {0xcbd, 0, 0, 0, f(Yes, false, "")}, + {0xcbf, 0, 0, 0, f(Yes, true, "")}, + {0xcc0, 0, 0, 1, f(Yes, false, "ೀ")}, + {0xcc1, 0, 0, 0, f(Yes, false, "")}, + {0xcc2, 0, 1, 1, f(Maybe, false, "")}, + {0xcc3, 0, 0, 0, f(Yes, false, "")}, + {0xcc6, 0, 0, 0, f(Yes, true, "")}, + {0xcc7, 0, 0, 1, f(Yes, false, "ೇ")}, + {0xcc8, 0, 0, 1, f(Yes, false, "ೈ")}, + {0xcc9, 0, 0, 0, f(Yes, false, "")}, + {0xcca, 0, 0, 1, f(Yes, true, "ೊ")}, + {0xccb, 0, 0, 2, f(Yes, false, "ೋ")}, + {0xccc, 0, 0, 0, f(Yes, false, "")}, + {0xccd, 9, 1, 1, f(Yes, false, "")}, + {0xcce, 0, 0, 0, f(Yes, false, "")}, + {0xcd5, 0, 1, 1, f(Maybe, false, "")}, + {0xcd7, 0, 0, 0, f(Yes, false, "")}, + {0xd3b, 9, 1, 1, f(Yes, false, "")}, + {0xd3d, 0, 0, 0, f(Yes, false, "")}, + {0xd3e, 0, 1, 1, f(Maybe, false, "")}, + {0xd3f, 0, 0, 0, f(Yes, false, "")}, + {0xd46, 0, 0, 0, f(Yes, true, "")}, + {0xd48, 0, 0, 0, f(Yes, false, "")}, + {0xd4a, 0, 0, 1, f(Yes, false, "ൊ")}, + {0xd4b, 0, 0, 1, f(Yes, false, "ോ")}, + {0xd4c, 0, 0, 1, f(Yes, false, "ൌ")}, + {0xd4d, 9, 1, 1, f(Yes, false, "")}, + {0xd4e, 0, 0, 0, f(Yes, false, "")}, + {0xd57, 0, 1, 1, f(Maybe, false, "")}, + {0xd58, 0, 0, 0, f(Yes, false, "")}, + {0xdca, 9, 1, 1, f(Maybe, false, "")}, + {0xdcb, 0, 0, 0, f(Yes, false, "")}, + {0xdcf, 0, 1, 1, f(Maybe, false, "")}, + {0xdd0, 0, 0, 0, f(Yes, false, "")}, + {0xdd9, 0, 0, 0, f(Yes, true, "")}, + {0xdda, 0, 0, 1, f(Yes, false, "ේ")}, + {0xddb, 0, 0, 0, f(Yes, false, "")}, + {0xddc, 0, 0, 1, f(Yes, true, "ො")}, + {0xddd, 0, 0, 2, f(Yes, false, "ෝ")}, + {0xdde, 0, 0, 1, f(Yes, false, "ෞ")}, + {0xddf, 0, 1, 1, f(Maybe, false, "")}, + {0xde0, 0, 0, 0, f(Yes, false, "")}, + {0xe33, 0, 0, 0, g(Yes, No, false, false, "", "ํา")}, + {0xe34, 0, 0, 0, f(Yes, false, "")}, + {0xe38, 103, 1, 1, f(Yes, false, "")}, + {0xe3a, 9, 1, 1, f(Yes, false, "")}, + {0xe3b, 0, 0, 0, f(Yes, false, "")}, + {0xe48, 107, 1, 1, f(Yes, false, "")}, + {0xe4c, 0, 0, 0, f(Yes, false, "")}, + {0xeb3, 0, 0, 0, g(Yes, No, false, false, "", "ໍາ")}, + {0xeb4, 0, 0, 0, f(Yes, false, "")}, + {0xeb8, 118, 1, 1, f(Yes, false, "")}, + {0xeba, 0, 0, 0, f(Yes, false, "")}, + {0xec8, 122, 1, 1, f(Yes, false, "")}, + {0xecc, 0, 0, 0, f(Yes, false, "")}, + {0xedc, 0, 0, 0, g(Yes, No, false, false, "", "ຫນ")}, + {0xedd, 0, 0, 0, g(Yes, No, false, false, "", "ຫມ")}, + {0xede, 0, 0, 0, f(Yes, false, "")}, + {0xf0c, 0, 0, 0, g(Yes, No, false, false, "", "་")}, + {0xf0d, 0, 0, 0, f(Yes, false, "")}, + {0xf18, 220, 1, 1, f(Yes, false, "")}, + {0xf1a, 0, 0, 0, f(Yes, false, "")}, + {0xf35, 220, 1, 1, f(Yes, false, "")}, + {0xf36, 0, 0, 0, f(Yes, false, "")}, + {0xf37, 220, 1, 1, f(Yes, false, "")}, + {0xf38, 0, 0, 0, f(Yes, false, "")}, + {0xf39, 216, 1, 1, f(Yes, false, "")}, + {0xf3a, 0, 0, 0, f(Yes, false, "")}, + {0xf43, 0, 0, 0, f(No, false, "གྷ")}, + {0xf44, 0, 0, 0, f(Yes, false, "")}, + {0xf4d, 0, 0, 0, f(No, false, "ཌྷ")}, + {0xf4e, 0, 0, 0, f(Yes, false, "")}, + {0xf52, 0, 0, 0, f(No, false, "དྷ")}, + {0xf53, 0, 0, 0, f(Yes, false, "")}, + {0xf57, 0, 0, 0, f(No, false, "བྷ")}, + {0xf58, 0, 0, 0, f(Yes, false, "")}, + {0xf5c, 0, 0, 0, f(No, false, "ཛྷ")}, + {0xf5d, 0, 0, 0, f(Yes, false, "")}, + {0xf69, 0, 0, 0, f(No, false, "ཀྵ")}, + {0xf6a, 0, 0, 0, f(Yes, false, "")}, + {0xf71, 129, 1, 1, f(Yes, false, "")}, + {0xf72, 130, 1, 1, f(Yes, false, "")}, + {0xf73, 0, 2, 2, f(No, false, "ཱི")}, + {0xf74, 132, 1, 1, f(Yes, false, "")}, + {0xf75, 0, 2, 2, f(No, false, "ཱུ")}, + {0xf76, 0, 0, 1, f(No, false, "ྲྀ")}, + {0xf77, 0, 0, 2, g(Yes, No, false, false, "", "ྲཱྀ")}, + {0xf78, 0, 0, 1, f(No, false, "ླྀ")}, + {0xf79, 0, 0, 2, g(Yes, No, false, false, "", "ླཱྀ")}, + {0xf7a, 130, 1, 1, f(Yes, false, "")}, + {0xf7e, 0, 0, 0, f(Yes, false, "")}, + {0xf80, 130, 1, 1, f(Yes, false, "")}, + {0xf81, 0, 2, 2, f(No, false, "ཱྀ")}, + {0xf82, 230, 1, 1, f(Yes, false, "")}, + {0xf84, 9, 1, 1, f(Yes, false, "")}, + {0xf85, 0, 0, 0, f(Yes, false, "")}, + {0xf86, 230, 1, 1, f(Yes, false, "")}, + {0xf88, 0, 0, 0, f(Yes, false, "")}, + {0xf93, 0, 0, 0, f(No, false, "ྒྷ")}, + {0xf94, 0, 0, 0, f(Yes, false, "")}, + {0xf9d, 0, 0, 0, f(No, false, "ྜྷ")}, + {0xf9e, 0, 0, 0, f(Yes, false, "")}, + {0xfa2, 0, 0, 0, f(No, false, "ྡྷ")}, + {0xfa3, 0, 0, 0, f(Yes, false, "")}, + {0xfa7, 0, 0, 0, f(No, false, "ྦྷ")}, + {0xfa8, 0, 0, 0, f(Yes, false, "")}, + {0xfac, 0, 0, 0, f(No, false, "ྫྷ")}, + {0xfad, 0, 0, 0, f(Yes, false, "")}, + {0xfb9, 0, 0, 0, f(No, false, "ྐྵ")}, + {0xfba, 0, 0, 0, f(Yes, false, "")}, + {0xfc6, 220, 1, 1, f(Yes, false, "")}, + {0xfc7, 0, 0, 0, f(Yes, false, "")}, + {0x1025, 0, 0, 0, f(Yes, true, "")}, + {0x1026, 0, 0, 1, f(Yes, false, "ဦ")}, + {0x1027, 0, 0, 0, f(Yes, false, "")}, + {0x102e, 0, 1, 1, f(Maybe, false, "")}, + {0x102f, 0, 0, 0, f(Yes, false, "")}, + {0x1037, 7, 1, 1, f(Yes, false, "")}, + {0x1038, 0, 0, 0, f(Yes, false, "")}, + {0x1039, 9, 1, 1, f(Yes, false, "")}, + {0x103b, 0, 0, 0, f(Yes, false, "")}, + {0x108d, 220, 1, 1, f(Yes, false, "")}, + {0x108e, 0, 0, 0, f(Yes, false, "")}, + {0x10fc, 0, 0, 0, g(Yes, No, false, false, "", "ნ")}, + {0x10fd, 0, 0, 0, f(Yes, false, "")}, + {0x1100, 0, 0, 0, f(Yes, true, "")}, + {0x1113, 0, 0, 0, f(Yes, false, "")}, + {0x1161, 0, 1, 1, f(Maybe, true, "")}, + {0x1176, 0, 0, 0, f(Yes, false, "")}, + {0x11a8, 0, 1, 1, f(Maybe, false, "")}, + {0x11c3, 0, 0, 0, f(Yes, false, "")}, + {0x135d, 230, 1, 1, f(Yes, false, "")}, + {0x1360, 0, 0, 0, f(Yes, false, "")}, + {0x1714, 9, 1, 1, f(Yes, false, "")}, + {0x1715, 0, 0, 0, f(Yes, false, "")}, + {0x1734, 9, 1, 1, f(Yes, false, "")}, + {0x1735, 0, 0, 0, f(Yes, false, "")}, + {0x17d2, 9, 1, 1, f(Yes, false, "")}, + {0x17d3, 0, 0, 0, f(Yes, false, "")}, + {0x17dd, 230, 1, 1, f(Yes, false, "")}, + {0x17de, 0, 0, 0, f(Yes, false, "")}, + {0x18a9, 228, 1, 1, f(Yes, false, "")}, + {0x18aa, 0, 0, 0, f(Yes, false, "")}, + {0x1939, 222, 1, 1, f(Yes, false, "")}, + {0x193a, 230, 1, 1, f(Yes, false, "")}, + {0x193b, 220, 1, 1, f(Yes, false, "")}, + {0x193c, 0, 0, 0, f(Yes, false, "")}, + {0x1a17, 230, 1, 1, f(Yes, false, "")}, + {0x1a18, 220, 1, 1, f(Yes, false, "")}, + {0x1a19, 0, 0, 0, f(Yes, false, "")}, + {0x1a60, 9, 1, 1, f(Yes, false, "")}, + {0x1a61, 0, 0, 0, f(Yes, false, "")}, + {0x1a75, 230, 1, 1, f(Yes, false, "")}, + {0x1a7d, 0, 0, 0, f(Yes, false, "")}, + {0x1a7f, 220, 1, 1, f(Yes, false, "")}, + {0x1a80, 0, 0, 0, f(Yes, false, "")}, + {0x1ab0, 230, 1, 1, f(Yes, false, "")}, + {0x1ab5, 220, 1, 1, f(Yes, false, "")}, + {0x1abb, 230, 1, 1, f(Yes, false, "")}, + {0x1abd, 220, 1, 1, f(Yes, false, "")}, + {0x1abe, 0, 0, 0, f(Yes, false, "")}, + {0x1b05, 0, 0, 0, f(Yes, true, "")}, + {0x1b06, 0, 0, 1, f(Yes, false, "ᬆ")}, + {0x1b07, 0, 0, 0, f(Yes, true, "")}, + {0x1b08, 0, 0, 1, f(Yes, false, "ᬈ")}, + {0x1b09, 0, 0, 0, f(Yes, true, "")}, + {0x1b0a, 0, 0, 1, f(Yes, false, "ᬊ")}, + {0x1b0b, 0, 0, 0, f(Yes, true, "")}, + {0x1b0c, 0, 0, 1, f(Yes, false, "ᬌ")}, + {0x1b0d, 0, 0, 0, f(Yes, true, "")}, + {0x1b0e, 0, 0, 1, f(Yes, false, "ᬎ")}, + {0x1b0f, 0, 0, 0, f(Yes, false, "")}, + {0x1b11, 0, 0, 0, f(Yes, true, "")}, + {0x1b12, 0, 0, 1, f(Yes, false, "ᬒ")}, + {0x1b13, 0, 0, 0, f(Yes, false, "")}, + {0x1b34, 7, 1, 1, f(Yes, false, "")}, + {0x1b35, 0, 1, 1, f(Maybe, false, "")}, + {0x1b36, 0, 0, 0, f(Yes, false, "")}, + {0x1b3a, 0, 0, 0, f(Yes, true, "")}, + {0x1b3b, 0, 0, 1, f(Yes, false, "ᬻ")}, + {0x1b3c, 0, 0, 0, f(Yes, true, "")}, + {0x1b3d, 0, 0, 1, f(Yes, false, "ᬽ")}, + {0x1b3e, 0, 0, 0, f(Yes, true, "")}, + {0x1b40, 0, 0, 1, f(Yes, false, "ᭀ")}, + {0x1b41, 0, 0, 1, f(Yes, false, "ᭁ")}, + {0x1b42, 0, 0, 0, f(Yes, true, "")}, + {0x1b43, 0, 0, 1, f(Yes, false, "ᭃ")}, + {0x1b44, 9, 1, 1, f(Yes, false, "")}, + {0x1b45, 0, 0, 0, f(Yes, false, "")}, + {0x1b6b, 230, 1, 1, f(Yes, false, "")}, + {0x1b6c, 220, 1, 1, f(Yes, false, "")}, + {0x1b6d, 230, 1, 1, f(Yes, false, "")}, + {0x1b74, 0, 0, 0, f(Yes, false, "")}, + {0x1baa, 9, 1, 1, f(Yes, false, "")}, + {0x1bac, 0, 0, 0, f(Yes, false, "")}, + {0x1be6, 7, 1, 1, f(Yes, false, "")}, + {0x1be7, 0, 0, 0, f(Yes, false, "")}, + {0x1bf2, 9, 1, 1, f(Yes, false, "")}, + {0x1bf4, 0, 0, 0, f(Yes, false, "")}, + {0x1c37, 7, 1, 1, f(Yes, false, "")}, + {0x1c38, 0, 0, 0, f(Yes, false, "")}, + {0x1cd0, 230, 1, 1, f(Yes, false, "")}, + {0x1cd3, 0, 0, 0, f(Yes, false, "")}, + {0x1cd4, 1, 1, 1, f(Yes, false, "")}, + {0x1cd5, 220, 1, 1, f(Yes, false, "")}, + {0x1cda, 230, 1, 1, f(Yes, false, "")}, + {0x1cdc, 220, 1, 1, f(Yes, false, "")}, + {0x1ce0, 230, 1, 1, f(Yes, false, "")}, + {0x1ce1, 0, 0, 0, f(Yes, false, "")}, + {0x1ce2, 1, 1, 1, f(Yes, false, "")}, + {0x1ce9, 0, 0, 0, f(Yes, false, "")}, + {0x1ced, 220, 1, 1, f(Yes, false, "")}, + {0x1cee, 0, 0, 0, f(Yes, false, "")}, + {0x1cf4, 230, 1, 1, f(Yes, false, "")}, + {0x1cf5, 0, 0, 0, f(Yes, false, "")}, + {0x1cf8, 230, 1, 1, f(Yes, false, "")}, + {0x1cfa, 0, 0, 0, f(Yes, false, "")}, + {0x1d2c, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0x1d2d, 0, 0, 0, g(Yes, No, false, false, "", "Æ")}, + {0x1d2e, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0x1d2f, 0, 0, 0, f(Yes, false, "")}, + {0x1d30, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x1d31, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0x1d32, 0, 0, 0, g(Yes, No, false, false, "", "Ǝ")}, + {0x1d33, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0x1d34, 0, 0, 0, g(Yes, No, false, false, "", "H")}, + {0x1d35, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0x1d36, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0x1d37, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0x1d38, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x1d39, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x1d3a, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0x1d3b, 0, 0, 0, f(Yes, false, "")}, + {0x1d3c, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0x1d3d, 0, 0, 0, g(Yes, No, false, false, "", "Ȣ")}, + {0x1d3e, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0x1d3f, 0, 0, 0, g(Yes, No, false, false, "", "R")}, + {0x1d40, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0x1d41, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0x1d42, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0x1d43, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0x1d44, 0, 0, 0, g(Yes, No, false, false, "", "ɐ")}, + {0x1d45, 0, 0, 0, g(Yes, No, false, false, "", "ɑ")}, + {0x1d46, 0, 0, 0, g(Yes, No, false, false, "", "ᴂ")}, + {0x1d47, 0, 0, 0, g(Yes, No, false, false, "", "b")}, + {0x1d48, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x1d49, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x1d4a, 0, 0, 0, g(Yes, No, false, false, "", "ə")}, + {0x1d4b, 0, 0, 0, g(Yes, No, false, false, "", "ɛ")}, + {0x1d4c, 0, 0, 0, g(Yes, No, false, false, "", "ɜ")}, + {0x1d4d, 0, 0, 0, g(Yes, No, false, false, "", "g")}, + {0x1d4e, 0, 0, 0, f(Yes, false, "")}, + {0x1d4f, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0x1d50, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x1d51, 0, 0, 0, g(Yes, No, false, false, "", "ŋ")}, + {0x1d52, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0x1d53, 0, 0, 0, g(Yes, No, false, false, "", "ɔ")}, + {0x1d54, 0, 0, 0, g(Yes, No, false, false, "", "ᴖ")}, + {0x1d55, 0, 0, 0, g(Yes, No, false, false, "", "ᴗ")}, + {0x1d56, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0x1d57, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0x1d58, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0x1d59, 0, 0, 0, g(Yes, No, false, false, "", "ᴝ")}, + {0x1d5a, 0, 0, 0, g(Yes, No, false, false, "", "ɯ")}, + {0x1d5b, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x1d5c, 0, 0, 0, g(Yes, No, false, false, "", "ᴥ")}, + {0x1d5d, 0, 0, 0, g(Yes, No, false, false, "", "β")}, + {0x1d5e, 0, 0, 0, g(Yes, No, false, false, "", "γ")}, + {0x1d5f, 0, 0, 0, g(Yes, No, false, false, "", "δ")}, + {0x1d60, 0, 0, 0, g(Yes, No, false, false, "", "φ")}, + {0x1d61, 0, 0, 0, g(Yes, No, false, false, "", "χ")}, + {0x1d62, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x1d63, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0x1d64, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0x1d65, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x1d66, 0, 0, 0, g(Yes, No, false, false, "", "β")}, + {0x1d67, 0, 0, 0, g(Yes, No, false, false, "", "γ")}, + {0x1d68, 0, 0, 0, g(Yes, No, false, false, "", "ρ")}, + {0x1d69, 0, 0, 0, g(Yes, No, false, false, "", "φ")}, + {0x1d6a, 0, 0, 0, g(Yes, No, false, false, "", "χ")}, + {0x1d6b, 0, 0, 0, f(Yes, false, "")}, + {0x1d78, 0, 0, 0, g(Yes, No, false, false, "", "н")}, + {0x1d79, 0, 0, 0, f(Yes, false, "")}, + {0x1d9b, 0, 0, 0, g(Yes, No, false, false, "", "ɒ")}, + {0x1d9c, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0x1d9d, 0, 0, 0, g(Yes, No, false, false, "", "ɕ")}, + {0x1d9e, 0, 0, 0, g(Yes, No, false, false, "", "ð")}, + {0x1d9f, 0, 0, 0, g(Yes, No, false, false, "", "ɜ")}, + {0x1da0, 0, 0, 0, g(Yes, No, false, false, "", "f")}, + {0x1da1, 0, 0, 0, g(Yes, No, false, false, "", "ɟ")}, + {0x1da2, 0, 0, 0, g(Yes, No, false, false, "", "ɡ")}, + {0x1da3, 0, 0, 0, g(Yes, No, false, false, "", "ɥ")}, + {0x1da4, 0, 0, 0, g(Yes, No, false, false, "", "ɨ")}, + {0x1da5, 0, 0, 0, g(Yes, No, false, false, "", "ɩ")}, + {0x1da6, 0, 0, 0, g(Yes, No, false, false, "", "ɪ")}, + {0x1da7, 0, 0, 0, g(Yes, No, false, false, "", "ᵻ")}, + {0x1da8, 0, 0, 0, g(Yes, No, false, false, "", "ʝ")}, + {0x1da9, 0, 0, 0, g(Yes, No, false, false, "", "ɭ")}, + {0x1daa, 0, 0, 0, g(Yes, No, false, false, "", "ᶅ")}, + {0x1dab, 0, 0, 0, g(Yes, No, false, false, "", "ʟ")}, + {0x1dac, 0, 0, 0, g(Yes, No, false, false, "", "ɱ")}, + {0x1dad, 0, 0, 0, g(Yes, No, false, false, "", "ɰ")}, + {0x1dae, 0, 0, 0, g(Yes, No, false, false, "", "ɲ")}, + {0x1daf, 0, 0, 0, g(Yes, No, false, false, "", "ɳ")}, + {0x1db0, 0, 0, 0, g(Yes, No, false, false, "", "ɴ")}, + {0x1db1, 0, 0, 0, g(Yes, No, false, false, "", "ɵ")}, + {0x1db2, 0, 0, 0, g(Yes, No, false, false, "", "ɸ")}, + {0x1db3, 0, 0, 0, g(Yes, No, false, false, "", "ʂ")}, + {0x1db4, 0, 0, 0, g(Yes, No, false, false, "", "ʃ")}, + {0x1db5, 0, 0, 0, g(Yes, No, false, false, "", "ƫ")}, + {0x1db6, 0, 0, 0, g(Yes, No, false, false, "", "ʉ")}, + {0x1db7, 0, 0, 0, g(Yes, No, false, false, "", "ʊ")}, + {0x1db8, 0, 0, 0, g(Yes, No, false, false, "", "ᴜ")}, + {0x1db9, 0, 0, 0, g(Yes, No, false, false, "", "ʋ")}, + {0x1dba, 0, 0, 0, g(Yes, No, false, false, "", "ʌ")}, + {0x1dbb, 0, 0, 0, g(Yes, No, false, false, "", "z")}, + {0x1dbc, 0, 0, 0, g(Yes, No, false, false, "", "ʐ")}, + {0x1dbd, 0, 0, 0, g(Yes, No, false, false, "", "ʑ")}, + {0x1dbe, 0, 0, 0, g(Yes, No, false, false, "", "ʒ")}, + {0x1dbf, 0, 0, 0, g(Yes, No, false, false, "", "θ")}, + {0x1dc0, 230, 1, 1, f(Yes, false, "")}, + {0x1dc2, 220, 1, 1, f(Yes, false, "")}, + {0x1dc3, 230, 1, 1, f(Yes, false, "")}, + {0x1dca, 220, 1, 1, f(Yes, false, "")}, + {0x1dcb, 230, 1, 1, f(Yes, false, "")}, + {0x1dcd, 234, 1, 1, f(Yes, false, "")}, + {0x1dce, 214, 1, 1, f(Yes, false, "")}, + {0x1dcf, 220, 1, 1, f(Yes, false, "")}, + {0x1dd0, 202, 1, 1, f(Yes, false, "")}, + {0x1dd1, 230, 1, 1, f(Yes, false, "")}, + {0x1df6, 232, 1, 1, f(Yes, false, "")}, + {0x1df7, 228, 1, 1, f(Yes, false, "")}, + {0x1df9, 220, 1, 1, f(Yes, false, "")}, + {0x1dfa, 0, 0, 0, f(Yes, false, "")}, + {0x1dfb, 230, 1, 1, f(Yes, false, "")}, + {0x1dfc, 233, 1, 1, f(Yes, false, "")}, + {0x1dfd, 220, 1, 1, f(Yes, false, "")}, + {0x1dfe, 230, 1, 1, f(Yes, false, "")}, + {0x1dff, 220, 1, 1, f(Yes, false, "")}, + {0x1e00, 0, 0, 1, f(Yes, false, "Ḁ")}, + {0x1e01, 0, 0, 1, f(Yes, false, "ḁ")}, + {0x1e02, 0, 0, 1, f(Yes, false, "Ḃ")}, + {0x1e03, 0, 0, 1, f(Yes, false, "ḃ")}, + {0x1e04, 0, 0, 1, f(Yes, false, "Ḅ")}, + {0x1e05, 0, 0, 1, f(Yes, false, "ḅ")}, + {0x1e06, 0, 0, 1, f(Yes, false, "Ḇ")}, + {0x1e07, 0, 0, 1, f(Yes, false, "ḇ")}, + {0x1e08, 0, 0, 2, f(Yes, false, "Ḉ")}, + {0x1e09, 0, 0, 2, f(Yes, false, "ḉ")}, + {0x1e0a, 0, 0, 1, f(Yes, false, "Ḋ")}, + {0x1e0b, 0, 0, 1, f(Yes, false, "ḋ")}, + {0x1e0c, 0, 0, 1, f(Yes, false, "Ḍ")}, + {0x1e0d, 0, 0, 1, f(Yes, false, "ḍ")}, + {0x1e0e, 0, 0, 1, f(Yes, false, "Ḏ")}, + {0x1e0f, 0, 0, 1, f(Yes, false, "ḏ")}, + {0x1e10, 0, 0, 1, f(Yes, false, "Ḑ")}, + {0x1e11, 0, 0, 1, f(Yes, false, "ḑ")}, + {0x1e12, 0, 0, 1, f(Yes, false, "Ḓ")}, + {0x1e13, 0, 0, 1, f(Yes, false, "ḓ")}, + {0x1e14, 0, 0, 2, f(Yes, false, "Ḕ")}, + {0x1e15, 0, 0, 2, f(Yes, false, "ḕ")}, + {0x1e16, 0, 0, 2, f(Yes, false, "Ḗ")}, + {0x1e17, 0, 0, 2, f(Yes, false, "ḗ")}, + {0x1e18, 0, 0, 1, f(Yes, false, "Ḙ")}, + {0x1e19, 0, 0, 1, f(Yes, false, "ḙ")}, + {0x1e1a, 0, 0, 1, f(Yes, false, "Ḛ")}, + {0x1e1b, 0, 0, 1, f(Yes, false, "ḛ")}, + {0x1e1c, 0, 0, 2, f(Yes, false, "Ḝ")}, + {0x1e1d, 0, 0, 2, f(Yes, false, "ḝ")}, + {0x1e1e, 0, 0, 1, f(Yes, false, "Ḟ")}, + {0x1e1f, 0, 0, 1, f(Yes, false, "ḟ")}, + {0x1e20, 0, 0, 1, f(Yes, false, "Ḡ")}, + {0x1e21, 0, 0, 1, f(Yes, false, "ḡ")}, + {0x1e22, 0, 0, 1, f(Yes, false, "Ḣ")}, + {0x1e23, 0, 0, 1, f(Yes, false, "ḣ")}, + {0x1e24, 0, 0, 1, f(Yes, false, "Ḥ")}, + {0x1e25, 0, 0, 1, f(Yes, false, "ḥ")}, + {0x1e26, 0, 0, 1, f(Yes, false, "Ḧ")}, + {0x1e27, 0, 0, 1, f(Yes, false, "ḧ")}, + {0x1e28, 0, 0, 1, f(Yes, false, "Ḩ")}, + {0x1e29, 0, 0, 1, f(Yes, false, "ḩ")}, + {0x1e2a, 0, 0, 1, f(Yes, false, "Ḫ")}, + {0x1e2b, 0, 0, 1, f(Yes, false, "ḫ")}, + {0x1e2c, 0, 0, 1, f(Yes, false, "Ḭ")}, + {0x1e2d, 0, 0, 1, f(Yes, false, "ḭ")}, + {0x1e2e, 0, 0, 2, f(Yes, false, "Ḯ")}, + {0x1e2f, 0, 0, 2, f(Yes, false, "ḯ")}, + {0x1e30, 0, 0, 1, f(Yes, false, "Ḱ")}, + {0x1e31, 0, 0, 1, f(Yes, false, "ḱ")}, + {0x1e32, 0, 0, 1, f(Yes, false, "Ḳ")}, + {0x1e33, 0, 0, 1, f(Yes, false, "ḳ")}, + {0x1e34, 0, 0, 1, f(Yes, false, "Ḵ")}, + {0x1e35, 0, 0, 1, f(Yes, false, "ḵ")}, + {0x1e36, 0, 0, 1, f(Yes, true, "Ḷ")}, + {0x1e37, 0, 0, 1, f(Yes, true, "ḷ")}, + {0x1e38, 0, 0, 2, f(Yes, false, "Ḹ")}, + {0x1e39, 0, 0, 2, f(Yes, false, "ḹ")}, + {0x1e3a, 0, 0, 1, f(Yes, false, "Ḻ")}, + {0x1e3b, 0, 0, 1, f(Yes, false, "ḻ")}, + {0x1e3c, 0, 0, 1, f(Yes, false, "Ḽ")}, + {0x1e3d, 0, 0, 1, f(Yes, false, "ḽ")}, + {0x1e3e, 0, 0, 1, f(Yes, false, "Ḿ")}, + {0x1e3f, 0, 0, 1, f(Yes, false, "ḿ")}, + {0x1e40, 0, 0, 1, f(Yes, false, "Ṁ")}, + {0x1e41, 0, 0, 1, f(Yes, false, "ṁ")}, + {0x1e42, 0, 0, 1, f(Yes, false, "Ṃ")}, + {0x1e43, 0, 0, 1, f(Yes, false, "ṃ")}, + {0x1e44, 0, 0, 1, f(Yes, false, "Ṅ")}, + {0x1e45, 0, 0, 1, f(Yes, false, "ṅ")}, + {0x1e46, 0, 0, 1, f(Yes, false, "Ṇ")}, + {0x1e47, 0, 0, 1, f(Yes, false, "ṇ")}, + {0x1e48, 0, 0, 1, f(Yes, false, "Ṉ")}, + {0x1e49, 0, 0, 1, f(Yes, false, "ṉ")}, + {0x1e4a, 0, 0, 1, f(Yes, false, "Ṋ")}, + {0x1e4b, 0, 0, 1, f(Yes, false, "ṋ")}, + {0x1e4c, 0, 0, 2, f(Yes, false, "Ṍ")}, + {0x1e4d, 0, 0, 2, f(Yes, false, "ṍ")}, + {0x1e4e, 0, 0, 2, f(Yes, false, "Ṏ")}, + {0x1e4f, 0, 0, 2, f(Yes, false, "ṏ")}, + {0x1e50, 0, 0, 2, f(Yes, false, "Ṑ")}, + {0x1e51, 0, 0, 2, f(Yes, false, "ṑ")}, + {0x1e52, 0, 0, 2, f(Yes, false, "Ṓ")}, + {0x1e53, 0, 0, 2, f(Yes, false, "ṓ")}, + {0x1e54, 0, 0, 1, f(Yes, false, "Ṕ")}, + {0x1e55, 0, 0, 1, f(Yes, false, "ṕ")}, + {0x1e56, 0, 0, 1, f(Yes, false, "Ṗ")}, + {0x1e57, 0, 0, 1, f(Yes, false, "ṗ")}, + {0x1e58, 0, 0, 1, f(Yes, false, "Ṙ")}, + {0x1e59, 0, 0, 1, f(Yes, false, "ṙ")}, + {0x1e5a, 0, 0, 1, f(Yes, true, "Ṛ")}, + {0x1e5b, 0, 0, 1, f(Yes, true, "ṛ")}, + {0x1e5c, 0, 0, 2, f(Yes, false, "Ṝ")}, + {0x1e5d, 0, 0, 2, f(Yes, false, "ṝ")}, + {0x1e5e, 0, 0, 1, f(Yes, false, "Ṟ")}, + {0x1e5f, 0, 0, 1, f(Yes, false, "ṟ")}, + {0x1e60, 0, 0, 1, f(Yes, false, "Ṡ")}, + {0x1e61, 0, 0, 1, f(Yes, false, "ṡ")}, + {0x1e62, 0, 0, 1, f(Yes, true, "Ṣ")}, + {0x1e63, 0, 0, 1, f(Yes, true, "ṣ")}, + {0x1e64, 0, 0, 2, f(Yes, false, "Ṥ")}, + {0x1e65, 0, 0, 2, f(Yes, false, "ṥ")}, + {0x1e66, 0, 0, 2, f(Yes, false, "Ṧ")}, + {0x1e67, 0, 0, 2, f(Yes, false, "ṧ")}, + {0x1e68, 0, 0, 2, f(Yes, false, "Ṩ")}, + {0x1e69, 0, 0, 2, f(Yes, false, "ṩ")}, + {0x1e6a, 0, 0, 1, f(Yes, false, "Ṫ")}, + {0x1e6b, 0, 0, 1, f(Yes, false, "ṫ")}, + {0x1e6c, 0, 0, 1, f(Yes, false, "Ṭ")}, + {0x1e6d, 0, 0, 1, f(Yes, false, "ṭ")}, + {0x1e6e, 0, 0, 1, f(Yes, false, "Ṯ")}, + {0x1e6f, 0, 0, 1, f(Yes, false, "ṯ")}, + {0x1e70, 0, 0, 1, f(Yes, false, "Ṱ")}, + {0x1e71, 0, 0, 1, f(Yes, false, "ṱ")}, + {0x1e72, 0, 0, 1, f(Yes, false, "Ṳ")}, + {0x1e73, 0, 0, 1, f(Yes, false, "ṳ")}, + {0x1e74, 0, 0, 1, f(Yes, false, "Ṵ")}, + {0x1e75, 0, 0, 1, f(Yes, false, "ṵ")}, + {0x1e76, 0, 0, 1, f(Yes, false, "Ṷ")}, + {0x1e77, 0, 0, 1, f(Yes, false, "ṷ")}, + {0x1e78, 0, 0, 2, f(Yes, false, "Ṹ")}, + {0x1e79, 0, 0, 2, f(Yes, false, "ṹ")}, + {0x1e7a, 0, 0, 2, f(Yes, false, "Ṻ")}, + {0x1e7b, 0, 0, 2, f(Yes, false, "ṻ")}, + {0x1e7c, 0, 0, 1, f(Yes, false, "Ṽ")}, + {0x1e7d, 0, 0, 1, f(Yes, false, "ṽ")}, + {0x1e7e, 0, 0, 1, f(Yes, false, "Ṿ")}, + {0x1e7f, 0, 0, 1, f(Yes, false, "ṿ")}, + {0x1e80, 0, 0, 1, f(Yes, false, "Ẁ")}, + {0x1e81, 0, 0, 1, f(Yes, false, "ẁ")}, + {0x1e82, 0, 0, 1, f(Yes, false, "Ẃ")}, + {0x1e83, 0, 0, 1, f(Yes, false, "ẃ")}, + {0x1e84, 0, 0, 1, f(Yes, false, "Ẅ")}, + {0x1e85, 0, 0, 1, f(Yes, false, "ẅ")}, + {0x1e86, 0, 0, 1, f(Yes, false, "Ẇ")}, + {0x1e87, 0, 0, 1, f(Yes, false, "ẇ")}, + {0x1e88, 0, 0, 1, f(Yes, false, "Ẉ")}, + {0x1e89, 0, 0, 1, f(Yes, false, "ẉ")}, + {0x1e8a, 0, 0, 1, f(Yes, false, "Ẋ")}, + {0x1e8b, 0, 0, 1, f(Yes, false, "ẋ")}, + {0x1e8c, 0, 0, 1, f(Yes, false, "Ẍ")}, + {0x1e8d, 0, 0, 1, f(Yes, false, "ẍ")}, + {0x1e8e, 0, 0, 1, f(Yes, false, "Ẏ")}, + {0x1e8f, 0, 0, 1, f(Yes, false, "ẏ")}, + {0x1e90, 0, 0, 1, f(Yes, false, "Ẑ")}, + {0x1e91, 0, 0, 1, f(Yes, false, "ẑ")}, + {0x1e92, 0, 0, 1, f(Yes, false, "Ẓ")}, + {0x1e93, 0, 0, 1, f(Yes, false, "ẓ")}, + {0x1e94, 0, 0, 1, f(Yes, false, "Ẕ")}, + {0x1e95, 0, 0, 1, f(Yes, false, "ẕ")}, + {0x1e96, 0, 0, 1, f(Yes, false, "ẖ")}, + {0x1e97, 0, 0, 1, f(Yes, false, "ẗ")}, + {0x1e98, 0, 0, 1, f(Yes, false, "ẘ")}, + {0x1e99, 0, 0, 1, f(Yes, false, "ẙ")}, + {0x1e9a, 0, 0, 0, g(Yes, No, false, false, "", "aʾ")}, + {0x1e9b, 0, 0, 1, g(Yes, No, false, false, "ẛ", "ṡ")}, + {0x1e9c, 0, 0, 0, f(Yes, false, "")}, + {0x1ea0, 0, 0, 1, f(Yes, true, "Ạ")}, + {0x1ea1, 0, 0, 1, f(Yes, true, "ạ")}, + {0x1ea2, 0, 0, 1, f(Yes, false, "Ả")}, + {0x1ea3, 0, 0, 1, f(Yes, false, "ả")}, + {0x1ea4, 0, 0, 2, f(Yes, false, "Ấ")}, + {0x1ea5, 0, 0, 2, f(Yes, false, "ấ")}, + {0x1ea6, 0, 0, 2, f(Yes, false, "Ầ")}, + {0x1ea7, 0, 0, 2, f(Yes, false, "ầ")}, + {0x1ea8, 0, 0, 2, f(Yes, false, "Ẩ")}, + {0x1ea9, 0, 0, 2, f(Yes, false, "ẩ")}, + {0x1eaa, 0, 0, 2, f(Yes, false, "Ẫ")}, + {0x1eab, 0, 0, 2, f(Yes, false, "ẫ")}, + {0x1eac, 0, 0, 2, f(Yes, false, "Ậ")}, + {0x1ead, 0, 0, 2, f(Yes, false, "ậ")}, + {0x1eae, 0, 0, 2, f(Yes, false, "Ắ")}, + {0x1eaf, 0, 0, 2, f(Yes, false, "ắ")}, + {0x1eb0, 0, 0, 2, f(Yes, false, "Ằ")}, + {0x1eb1, 0, 0, 2, f(Yes, false, "ằ")}, + {0x1eb2, 0, 0, 2, f(Yes, false, "Ẳ")}, + {0x1eb3, 0, 0, 2, f(Yes, false, "ẳ")}, + {0x1eb4, 0, 0, 2, f(Yes, false, "Ẵ")}, + {0x1eb5, 0, 0, 2, f(Yes, false, "ẵ")}, + {0x1eb6, 0, 0, 2, f(Yes, false, "Ặ")}, + {0x1eb7, 0, 0, 2, f(Yes, false, "ặ")}, + {0x1eb8, 0, 0, 1, f(Yes, true, "Ẹ")}, + {0x1eb9, 0, 0, 1, f(Yes, true, "ẹ")}, + {0x1eba, 0, 0, 1, f(Yes, false, "Ẻ")}, + {0x1ebb, 0, 0, 1, f(Yes, false, "ẻ")}, + {0x1ebc, 0, 0, 1, f(Yes, false, "Ẽ")}, + {0x1ebd, 0, 0, 1, f(Yes, false, "ẽ")}, + {0x1ebe, 0, 0, 2, f(Yes, false, "Ế")}, + {0x1ebf, 0, 0, 2, f(Yes, false, "ế")}, + {0x1ec0, 0, 0, 2, f(Yes, false, "Ề")}, + {0x1ec1, 0, 0, 2, f(Yes, false, "ề")}, + {0x1ec2, 0, 0, 2, f(Yes, false, "Ể")}, + {0x1ec3, 0, 0, 2, f(Yes, false, "ể")}, + {0x1ec4, 0, 0, 2, f(Yes, false, "Ễ")}, + {0x1ec5, 0, 0, 2, f(Yes, false, "ễ")}, + {0x1ec6, 0, 0, 2, f(Yes, false, "Ệ")}, + {0x1ec7, 0, 0, 2, f(Yes, false, "ệ")}, + {0x1ec8, 0, 0, 1, f(Yes, false, "Ỉ")}, + {0x1ec9, 0, 0, 1, f(Yes, false, "ỉ")}, + {0x1eca, 0, 0, 1, f(Yes, false, "Ị")}, + {0x1ecb, 0, 0, 1, f(Yes, false, "ị")}, + {0x1ecc, 0, 0, 1, f(Yes, true, "Ọ")}, + {0x1ecd, 0, 0, 1, f(Yes, true, "ọ")}, + {0x1ece, 0, 0, 1, f(Yes, false, "Ỏ")}, + {0x1ecf, 0, 0, 1, f(Yes, false, "ỏ")}, + {0x1ed0, 0, 0, 2, f(Yes, false, "Ố")}, + {0x1ed1, 0, 0, 2, f(Yes, false, "ố")}, + {0x1ed2, 0, 0, 2, f(Yes, false, "Ồ")}, + {0x1ed3, 0, 0, 2, f(Yes, false, "ồ")}, + {0x1ed4, 0, 0, 2, f(Yes, false, "Ổ")}, + {0x1ed5, 0, 0, 2, f(Yes, false, "ổ")}, + {0x1ed6, 0, 0, 2, f(Yes, false, "Ỗ")}, + {0x1ed7, 0, 0, 2, f(Yes, false, "ỗ")}, + {0x1ed8, 0, 0, 2, f(Yes, false, "Ộ")}, + {0x1ed9, 0, 0, 2, f(Yes, false, "ộ")}, + {0x1eda, 0, 0, 2, f(Yes, false, "Ớ")}, + {0x1edb, 0, 0, 2, f(Yes, false, "ớ")}, + {0x1edc, 0, 0, 2, f(Yes, false, "Ờ")}, + {0x1edd, 0, 0, 2, f(Yes, false, "ờ")}, + {0x1ede, 0, 0, 2, f(Yes, false, "Ở")}, + {0x1edf, 0, 0, 2, f(Yes, false, "ở")}, + {0x1ee0, 0, 0, 2, f(Yes, false, "Ỡ")}, + {0x1ee1, 0, 0, 2, f(Yes, false, "ỡ")}, + {0x1ee2, 0, 0, 2, f(Yes, false, "Ợ")}, + {0x1ee3, 0, 0, 2, f(Yes, false, "ợ")}, + {0x1ee4, 0, 0, 1, f(Yes, false, "Ụ")}, + {0x1ee5, 0, 0, 1, f(Yes, false, "ụ")}, + {0x1ee6, 0, 0, 1, f(Yes, false, "Ủ")}, + {0x1ee7, 0, 0, 1, f(Yes, false, "ủ")}, + {0x1ee8, 0, 0, 2, f(Yes, false, "Ứ")}, + {0x1ee9, 0, 0, 2, f(Yes, false, "ứ")}, + {0x1eea, 0, 0, 2, f(Yes, false, "Ừ")}, + {0x1eeb, 0, 0, 2, f(Yes, false, "ừ")}, + {0x1eec, 0, 0, 2, f(Yes, false, "Ử")}, + {0x1eed, 0, 0, 2, f(Yes, false, "ử")}, + {0x1eee, 0, 0, 2, f(Yes, false, "Ữ")}, + {0x1eef, 0, 0, 2, f(Yes, false, "ữ")}, + {0x1ef0, 0, 0, 2, f(Yes, false, "Ự")}, + {0x1ef1, 0, 0, 2, f(Yes, false, "ự")}, + {0x1ef2, 0, 0, 1, f(Yes, false, "Ỳ")}, + {0x1ef3, 0, 0, 1, f(Yes, false, "ỳ")}, + {0x1ef4, 0, 0, 1, f(Yes, false, "Ỵ")}, + {0x1ef5, 0, 0, 1, f(Yes, false, "ỵ")}, + {0x1ef6, 0, 0, 1, f(Yes, false, "Ỷ")}, + {0x1ef7, 0, 0, 1, f(Yes, false, "ỷ")}, + {0x1ef8, 0, 0, 1, f(Yes, false, "Ỹ")}, + {0x1ef9, 0, 0, 1, f(Yes, false, "ỹ")}, + {0x1efa, 0, 0, 0, f(Yes, false, "")}, + {0x1f00, 0, 0, 1, f(Yes, true, "ἀ")}, + {0x1f01, 0, 0, 1, f(Yes, true, "ἁ")}, + {0x1f02, 0, 0, 2, f(Yes, true, "ἂ")}, + {0x1f03, 0, 0, 2, f(Yes, true, "ἃ")}, + {0x1f04, 0, 0, 2, f(Yes, true, "ἄ")}, + {0x1f05, 0, 0, 2, f(Yes, true, "ἅ")}, + {0x1f06, 0, 0, 2, f(Yes, true, "ἆ")}, + {0x1f07, 0, 0, 2, f(Yes, true, "ἇ")}, + {0x1f08, 0, 0, 1, f(Yes, true, "Ἀ")}, + {0x1f09, 0, 0, 1, f(Yes, true, "Ἁ")}, + {0x1f0a, 0, 0, 2, f(Yes, true, "Ἂ")}, + {0x1f0b, 0, 0, 2, f(Yes, true, "Ἃ")}, + {0x1f0c, 0, 0, 2, f(Yes, true, "Ἄ")}, + {0x1f0d, 0, 0, 2, f(Yes, true, "Ἅ")}, + {0x1f0e, 0, 0, 2, f(Yes, true, "Ἆ")}, + {0x1f0f, 0, 0, 2, f(Yes, true, "Ἇ")}, + {0x1f10, 0, 0, 1, f(Yes, true, "ἐ")}, + {0x1f11, 0, 0, 1, f(Yes, true, "ἑ")}, + {0x1f12, 0, 0, 2, f(Yes, false, "ἒ")}, + {0x1f13, 0, 0, 2, f(Yes, false, "ἓ")}, + {0x1f14, 0, 0, 2, f(Yes, false, "ἔ")}, + {0x1f15, 0, 0, 2, f(Yes, false, "ἕ")}, + {0x1f16, 0, 0, 0, f(Yes, false, "")}, + {0x1f18, 0, 0, 1, f(Yes, true, "Ἐ")}, + {0x1f19, 0, 0, 1, f(Yes, true, "Ἑ")}, + {0x1f1a, 0, 0, 2, f(Yes, false, "Ἒ")}, + {0x1f1b, 0, 0, 2, f(Yes, false, "Ἓ")}, + {0x1f1c, 0, 0, 2, f(Yes, false, "Ἔ")}, + {0x1f1d, 0, 0, 2, f(Yes, false, "Ἕ")}, + {0x1f1e, 0, 0, 0, f(Yes, false, "")}, + {0x1f20, 0, 0, 1, f(Yes, true, "ἠ")}, + {0x1f21, 0, 0, 1, f(Yes, true, "ἡ")}, + {0x1f22, 0, 0, 2, f(Yes, true, "ἢ")}, + {0x1f23, 0, 0, 2, f(Yes, true, "ἣ")}, + {0x1f24, 0, 0, 2, f(Yes, true, "ἤ")}, + {0x1f25, 0, 0, 2, f(Yes, true, "ἥ")}, + {0x1f26, 0, 0, 2, f(Yes, true, "ἦ")}, + {0x1f27, 0, 0, 2, f(Yes, true, "ἧ")}, + {0x1f28, 0, 0, 1, f(Yes, true, "Ἠ")}, + {0x1f29, 0, 0, 1, f(Yes, true, "Ἡ")}, + {0x1f2a, 0, 0, 2, f(Yes, true, "Ἢ")}, + {0x1f2b, 0, 0, 2, f(Yes, true, "Ἣ")}, + {0x1f2c, 0, 0, 2, f(Yes, true, "Ἤ")}, + {0x1f2d, 0, 0, 2, f(Yes, true, "Ἥ")}, + {0x1f2e, 0, 0, 2, f(Yes, true, "Ἦ")}, + {0x1f2f, 0, 0, 2, f(Yes, true, "Ἧ")}, + {0x1f30, 0, 0, 1, f(Yes, true, "ἰ")}, + {0x1f31, 0, 0, 1, f(Yes, true, "ἱ")}, + {0x1f32, 0, 0, 2, f(Yes, false, "ἲ")}, + {0x1f33, 0, 0, 2, f(Yes, false, "ἳ")}, + {0x1f34, 0, 0, 2, f(Yes, false, "ἴ")}, + {0x1f35, 0, 0, 2, f(Yes, false, "ἵ")}, + {0x1f36, 0, 0, 2, f(Yes, false, "ἶ")}, + {0x1f37, 0, 0, 2, f(Yes, false, "ἷ")}, + {0x1f38, 0, 0, 1, f(Yes, true, "Ἰ")}, + {0x1f39, 0, 0, 1, f(Yes, true, "Ἱ")}, + {0x1f3a, 0, 0, 2, f(Yes, false, "Ἲ")}, + {0x1f3b, 0, 0, 2, f(Yes, false, "Ἳ")}, + {0x1f3c, 0, 0, 2, f(Yes, false, "Ἴ")}, + {0x1f3d, 0, 0, 2, f(Yes, false, "Ἵ")}, + {0x1f3e, 0, 0, 2, f(Yes, false, "Ἶ")}, + {0x1f3f, 0, 0, 2, f(Yes, false, "Ἷ")}, + {0x1f40, 0, 0, 1, f(Yes, true, "ὀ")}, + {0x1f41, 0, 0, 1, f(Yes, true, "ὁ")}, + {0x1f42, 0, 0, 2, f(Yes, false, "ὂ")}, + {0x1f43, 0, 0, 2, f(Yes, false, "ὃ")}, + {0x1f44, 0, 0, 2, f(Yes, false, "ὄ")}, + {0x1f45, 0, 0, 2, f(Yes, false, "ὅ")}, + {0x1f46, 0, 0, 0, f(Yes, false, "")}, + {0x1f48, 0, 0, 1, f(Yes, true, "Ὀ")}, + {0x1f49, 0, 0, 1, f(Yes, true, "Ὁ")}, + {0x1f4a, 0, 0, 2, f(Yes, false, "Ὂ")}, + {0x1f4b, 0, 0, 2, f(Yes, false, "Ὃ")}, + {0x1f4c, 0, 0, 2, f(Yes, false, "Ὄ")}, + {0x1f4d, 0, 0, 2, f(Yes, false, "Ὅ")}, + {0x1f4e, 0, 0, 0, f(Yes, false, "")}, + {0x1f50, 0, 0, 1, f(Yes, true, "ὐ")}, + {0x1f51, 0, 0, 1, f(Yes, true, "ὑ")}, + {0x1f52, 0, 0, 2, f(Yes, false, "ὒ")}, + {0x1f53, 0, 0, 2, f(Yes, false, "ὓ")}, + {0x1f54, 0, 0, 2, f(Yes, false, "ὔ")}, + {0x1f55, 0, 0, 2, f(Yes, false, "ὕ")}, + {0x1f56, 0, 0, 2, f(Yes, false, "ὖ")}, + {0x1f57, 0, 0, 2, f(Yes, false, "ὗ")}, + {0x1f58, 0, 0, 0, f(Yes, false, "")}, + {0x1f59, 0, 0, 1, f(Yes, true, "Ὑ")}, + {0x1f5a, 0, 0, 0, f(Yes, false, "")}, + {0x1f5b, 0, 0, 2, f(Yes, false, "Ὓ")}, + {0x1f5c, 0, 0, 0, f(Yes, false, "")}, + {0x1f5d, 0, 0, 2, f(Yes, false, "Ὕ")}, + {0x1f5e, 0, 0, 0, f(Yes, false, "")}, + {0x1f5f, 0, 0, 2, f(Yes, false, "Ὗ")}, + {0x1f60, 0, 0, 1, f(Yes, true, "ὠ")}, + {0x1f61, 0, 0, 1, f(Yes, true, "ὡ")}, + {0x1f62, 0, 0, 2, f(Yes, true, "ὢ")}, + {0x1f63, 0, 0, 2, f(Yes, true, "ὣ")}, + {0x1f64, 0, 0, 2, f(Yes, true, "ὤ")}, + {0x1f65, 0, 0, 2, f(Yes, true, "ὥ")}, + {0x1f66, 0, 0, 2, f(Yes, true, "ὦ")}, + {0x1f67, 0, 0, 2, f(Yes, true, "ὧ")}, + {0x1f68, 0, 0, 1, f(Yes, true, "Ὠ")}, + {0x1f69, 0, 0, 1, f(Yes, true, "Ὡ")}, + {0x1f6a, 0, 0, 2, f(Yes, true, "Ὢ")}, + {0x1f6b, 0, 0, 2, f(Yes, true, "Ὣ")}, + {0x1f6c, 0, 0, 2, f(Yes, true, "Ὤ")}, + {0x1f6d, 0, 0, 2, f(Yes, true, "Ὥ")}, + {0x1f6e, 0, 0, 2, f(Yes, true, "Ὦ")}, + {0x1f6f, 0, 0, 2, f(Yes, true, "Ὧ")}, + {0x1f70, 0, 0, 1, f(Yes, true, "ὰ")}, + {0x1f71, 0, 0, 1, f(No, false, "ά")}, + {0x1f72, 0, 0, 1, f(Yes, false, "ὲ")}, + {0x1f73, 0, 0, 1, f(No, false, "έ")}, + {0x1f74, 0, 0, 1, f(Yes, true, "ὴ")}, + {0x1f75, 0, 0, 1, f(No, false, "ή")}, + {0x1f76, 0, 0, 1, f(Yes, false, "ὶ")}, + {0x1f77, 0, 0, 1, f(No, false, "ί")}, + {0x1f78, 0, 0, 1, f(Yes, false, "ὸ")}, + {0x1f79, 0, 0, 1, f(No, false, "ό")}, + {0x1f7a, 0, 0, 1, f(Yes, false, "ὺ")}, + {0x1f7b, 0, 0, 1, f(No, false, "ύ")}, + {0x1f7c, 0, 0, 1, f(Yes, true, "ὼ")}, + {0x1f7d, 0, 0, 1, f(No, false, "ώ")}, + {0x1f7e, 0, 0, 0, f(Yes, false, "")}, + {0x1f80, 0, 0, 2, f(Yes, false, "ᾀ")}, + {0x1f81, 0, 0, 2, f(Yes, false, "ᾁ")}, + {0x1f82, 0, 0, 3, f(Yes, false, "ᾂ")}, + {0x1f83, 0, 0, 3, f(Yes, false, "ᾃ")}, + {0x1f84, 0, 0, 3, f(Yes, false, "ᾄ")}, + {0x1f85, 0, 0, 3, f(Yes, false, "ᾅ")}, + {0x1f86, 0, 0, 3, f(Yes, false, "ᾆ")}, + {0x1f87, 0, 0, 3, f(Yes, false, "ᾇ")}, + {0x1f88, 0, 0, 2, f(Yes, false, "ᾈ")}, + {0x1f89, 0, 0, 2, f(Yes, false, "ᾉ")}, + {0x1f8a, 0, 0, 3, f(Yes, false, "ᾊ")}, + {0x1f8b, 0, 0, 3, f(Yes, false, "ᾋ")}, + {0x1f8c, 0, 0, 3, f(Yes, false, "ᾌ")}, + {0x1f8d, 0, 0, 3, f(Yes, false, "ᾍ")}, + {0x1f8e, 0, 0, 3, f(Yes, false, "ᾎ")}, + {0x1f8f, 0, 0, 3, f(Yes, false, "ᾏ")}, + {0x1f90, 0, 0, 2, f(Yes, false, "ᾐ")}, + {0x1f91, 0, 0, 2, f(Yes, false, "ᾑ")}, + {0x1f92, 0, 0, 3, f(Yes, false, "ᾒ")}, + {0x1f93, 0, 0, 3, f(Yes, false, "ᾓ")}, + {0x1f94, 0, 0, 3, f(Yes, false, "ᾔ")}, + {0x1f95, 0, 0, 3, f(Yes, false, "ᾕ")}, + {0x1f96, 0, 0, 3, f(Yes, false, "ᾖ")}, + {0x1f97, 0, 0, 3, f(Yes, false, "ᾗ")}, + {0x1f98, 0, 0, 2, f(Yes, false, "ᾘ")}, + {0x1f99, 0, 0, 2, f(Yes, false, "ᾙ")}, + {0x1f9a, 0, 0, 3, f(Yes, false, "ᾚ")}, + {0x1f9b, 0, 0, 3, f(Yes, false, "ᾛ")}, + {0x1f9c, 0, 0, 3, f(Yes, false, "ᾜ")}, + {0x1f9d, 0, 0, 3, f(Yes, false, "ᾝ")}, + {0x1f9e, 0, 0, 3, f(Yes, false, "ᾞ")}, + {0x1f9f, 0, 0, 3, f(Yes, false, "ᾟ")}, + {0x1fa0, 0, 0, 2, f(Yes, false, "ᾠ")}, + {0x1fa1, 0, 0, 2, f(Yes, false, "ᾡ")}, + {0x1fa2, 0, 0, 3, f(Yes, false, "ᾢ")}, + {0x1fa3, 0, 0, 3, f(Yes, false, "ᾣ")}, + {0x1fa4, 0, 0, 3, f(Yes, false, "ᾤ")}, + {0x1fa5, 0, 0, 3, f(Yes, false, "ᾥ")}, + {0x1fa6, 0, 0, 3, f(Yes, false, "ᾦ")}, + {0x1fa7, 0, 0, 3, f(Yes, false, "ᾧ")}, + {0x1fa8, 0, 0, 2, f(Yes, false, "ᾨ")}, + {0x1fa9, 0, 0, 2, f(Yes, false, "ᾩ")}, + {0x1faa, 0, 0, 3, f(Yes, false, "ᾪ")}, + {0x1fab, 0, 0, 3, f(Yes, false, "ᾫ")}, + {0x1fac, 0, 0, 3, f(Yes, false, "ᾬ")}, + {0x1fad, 0, 0, 3, f(Yes, false, "ᾭ")}, + {0x1fae, 0, 0, 3, f(Yes, false, "ᾮ")}, + {0x1faf, 0, 0, 3, f(Yes, false, "ᾯ")}, + {0x1fb0, 0, 0, 1, f(Yes, false, "ᾰ")}, + {0x1fb1, 0, 0, 1, f(Yes, false, "ᾱ")}, + {0x1fb2, 0, 0, 2, f(Yes, false, "ᾲ")}, + {0x1fb3, 0, 0, 1, f(Yes, false, "ᾳ")}, + {0x1fb4, 0, 0, 2, f(Yes, false, "ᾴ")}, + {0x1fb5, 0, 0, 0, f(Yes, false, "")}, + {0x1fb6, 0, 0, 1, f(Yes, true, "ᾶ")}, + {0x1fb7, 0, 0, 2, f(Yes, false, "ᾷ")}, + {0x1fb8, 0, 0, 1, f(Yes, false, "Ᾰ")}, + {0x1fb9, 0, 0, 1, f(Yes, false, "Ᾱ")}, + {0x1fba, 0, 0, 1, f(Yes, false, "Ὰ")}, + {0x1fbb, 0, 0, 1, f(No, false, "Ά")}, + {0x1fbc, 0, 0, 1, f(Yes, false, "ᾼ")}, + {0x1fbd, 0, 0, 1, g(Yes, No, false, false, "", " ̓")}, + {0x1fbe, 0, 0, 0, f(No, false, "ι")}, + {0x1fbf, 0, 0, 1, g(Yes, No, true, false, "", " ̓")}, + {0x1fc0, 0, 0, 1, g(Yes, No, false, false, "", " ͂")}, + {0x1fc1, 0, 0, 2, g(Yes, No, false, false, "῁", " ̈͂")}, + {0x1fc2, 0, 0, 2, f(Yes, false, "ῂ")}, + {0x1fc3, 0, 0, 1, f(Yes, false, "ῃ")}, + {0x1fc4, 0, 0, 2, f(Yes, false, "ῄ")}, + {0x1fc5, 0, 0, 0, f(Yes, false, "")}, + {0x1fc6, 0, 0, 1, f(Yes, true, "ῆ")}, + {0x1fc7, 0, 0, 2, f(Yes, false, "ῇ")}, + {0x1fc8, 0, 0, 1, f(Yes, false, "Ὲ")}, + {0x1fc9, 0, 0, 1, f(No, false, "Έ")}, + {0x1fca, 0, 0, 1, f(Yes, false, "Ὴ")}, + {0x1fcb, 0, 0, 1, f(No, false, "Ή")}, + {0x1fcc, 0, 0, 1, f(Yes, false, "ῌ")}, + {0x1fcd, 0, 0, 2, g(Yes, No, false, false, "῍", " ̓̀")}, + {0x1fce, 0, 0, 2, g(Yes, No, false, false, "῎", " ̓́")}, + {0x1fcf, 0, 0, 2, g(Yes, No, false, false, "῏", " ̓͂")}, + {0x1fd0, 0, 0, 1, f(Yes, false, "ῐ")}, + {0x1fd1, 0, 0, 1, f(Yes, false, "ῑ")}, + {0x1fd2, 0, 0, 2, f(Yes, false, "ῒ")}, + {0x1fd3, 0, 0, 2, f(No, false, "ΐ")}, + {0x1fd4, 0, 0, 0, f(Yes, false, "")}, + {0x1fd6, 0, 0, 1, f(Yes, false, "ῖ")}, + {0x1fd7, 0, 0, 2, f(Yes, false, "ῗ")}, + {0x1fd8, 0, 0, 1, f(Yes, false, "Ῐ")}, + {0x1fd9, 0, 0, 1, f(Yes, false, "Ῑ")}, + {0x1fda, 0, 0, 1, f(Yes, false, "Ὶ")}, + {0x1fdb, 0, 0, 1, f(No, false, "Ί")}, + {0x1fdc, 0, 0, 0, f(Yes, false, "")}, + {0x1fdd, 0, 0, 2, g(Yes, No, false, false, "῝", " ̔̀")}, + {0x1fde, 0, 0, 2, g(Yes, No, false, false, "῞", " ̔́")}, + {0x1fdf, 0, 0, 2, g(Yes, No, false, false, "῟", " ̔͂")}, + {0x1fe0, 0, 0, 1, f(Yes, false, "ῠ")}, + {0x1fe1, 0, 0, 1, f(Yes, false, "ῡ")}, + {0x1fe2, 0, 0, 2, f(Yes, false, "ῢ")}, + {0x1fe3, 0, 0, 2, f(No, false, "ΰ")}, + {0x1fe4, 0, 0, 1, f(Yes, false, "ῤ")}, + {0x1fe5, 0, 0, 1, f(Yes, false, "ῥ")}, + {0x1fe6, 0, 0, 1, f(Yes, false, "ῦ")}, + {0x1fe7, 0, 0, 2, f(Yes, false, "ῧ")}, + {0x1fe8, 0, 0, 1, f(Yes, false, "Ῠ")}, + {0x1fe9, 0, 0, 1, f(Yes, false, "Ῡ")}, + {0x1fea, 0, 0, 1, f(Yes, false, "Ὺ")}, + {0x1feb, 0, 0, 1, f(No, false, "Ύ")}, + {0x1fec, 0, 0, 1, f(Yes, false, "Ῥ")}, + {0x1fed, 0, 0, 2, g(Yes, No, false, false, "῭", " ̈̀")}, + {0x1fee, 0, 0, 2, g(No, No, false, false, "΅", " ̈́")}, + {0x1fef, 0, 0, 0, f(No, false, "`")}, + {0x1ff0, 0, 0, 0, f(Yes, false, "")}, + {0x1ff2, 0, 0, 2, f(Yes, false, "ῲ")}, + {0x1ff3, 0, 0, 1, f(Yes, false, "ῳ")}, + {0x1ff4, 0, 0, 2, f(Yes, false, "ῴ")}, + {0x1ff5, 0, 0, 0, f(Yes, false, "")}, + {0x1ff6, 0, 0, 1, f(Yes, true, "ῶ")}, + {0x1ff7, 0, 0, 2, f(Yes, false, "ῷ")}, + {0x1ff8, 0, 0, 1, f(Yes, false, "Ὸ")}, + {0x1ff9, 0, 0, 1, f(No, false, "Ό")}, + {0x1ffa, 0, 0, 1, f(Yes, false, "Ὼ")}, + {0x1ffb, 0, 0, 1, f(No, false, "Ώ")}, + {0x1ffc, 0, 0, 1, f(Yes, false, "ῼ")}, + {0x1ffd, 0, 0, 1, g(No, No, false, false, "´", " ́")}, + {0x1ffe, 0, 0, 1, g(Yes, No, true, false, "", " ̔")}, + {0x1fff, 0, 0, 0, f(Yes, false, "")}, + {0x2000, 0, 0, 0, g(No, No, false, false, "\u2002", " ")}, + {0x2001, 0, 0, 0, g(No, No, false, false, "\u2003", " ")}, + {0x2002, 0, 0, 0, g(Yes, No, false, false, "", " ")}, + {0x200b, 0, 0, 0, f(Yes, false, "")}, + {0x2011, 0, 0, 0, g(Yes, No, false, false, "", "‐")}, + {0x2012, 0, 0, 0, f(Yes, false, "")}, + {0x2017, 0, 0, 1, g(Yes, No, false, false, "", " ̳")}, + {0x2018, 0, 0, 0, f(Yes, false, "")}, + {0x2024, 0, 0, 0, g(Yes, No, false, false, "", ".")}, + {0x2025, 0, 0, 0, g(Yes, No, false, false, "", "..")}, + {0x2026, 0, 0, 0, g(Yes, No, false, false, "", "...")}, + {0x2027, 0, 0, 0, f(Yes, false, "")}, + {0x202f, 0, 0, 0, g(Yes, No, false, false, "", " ")}, + {0x2030, 0, 0, 0, f(Yes, false, "")}, + {0x2033, 0, 0, 0, g(Yes, No, false, false, "", "′′")}, + {0x2034, 0, 0, 0, g(Yes, No, false, false, "", "′′′")}, + {0x2035, 0, 0, 0, f(Yes, false, "")}, + {0x2036, 0, 0, 0, g(Yes, No, false, false, "", "‵‵")}, + {0x2037, 0, 0, 0, g(Yes, No, false, false, "", "‵‵‵")}, + {0x2038, 0, 0, 0, f(Yes, false, "")}, + {0x203c, 0, 0, 0, g(Yes, No, false, false, "", "!!")}, + {0x203d, 0, 0, 0, f(Yes, false, "")}, + {0x203e, 0, 0, 1, g(Yes, No, false, false, "", " ̅")}, + {0x203f, 0, 0, 0, f(Yes, false, "")}, + {0x2047, 0, 0, 0, g(Yes, No, false, false, "", "??")}, + {0x2048, 0, 0, 0, g(Yes, No, false, false, "", "?!")}, + {0x2049, 0, 0, 0, g(Yes, No, false, false, "", "!?")}, + {0x204a, 0, 0, 0, f(Yes, false, "")}, + {0x2057, 0, 0, 0, g(Yes, No, false, false, "", "′′′′")}, + {0x2058, 0, 0, 0, f(Yes, false, "")}, + {0x205f, 0, 0, 0, g(Yes, No, false, false, "", " ")}, + {0x2060, 0, 0, 0, f(Yes, false, "")}, + {0x2070, 0, 0, 0, g(Yes, No, false, false, "", "0")}, + {0x2071, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x2072, 0, 0, 0, f(Yes, false, "")}, + {0x2074, 0, 0, 0, g(Yes, No, false, false, "", "4")}, + {0x2075, 0, 0, 0, g(Yes, No, false, false, "", "5")}, + {0x2076, 0, 0, 0, g(Yes, No, false, false, "", "6")}, + {0x2077, 0, 0, 0, g(Yes, No, false, false, "", "7")}, + {0x2078, 0, 0, 0, g(Yes, No, false, false, "", "8")}, + {0x2079, 0, 0, 0, g(Yes, No, false, false, "", "9")}, + {0x207a, 0, 0, 0, g(Yes, No, false, false, "", "+")}, + {0x207b, 0, 0, 0, g(Yes, No, false, false, "", "−")}, + {0x207c, 0, 0, 0, g(Yes, No, false, false, "", "=")}, + {0x207d, 0, 0, 0, g(Yes, No, false, false, "", "(")}, + {0x207e, 0, 0, 0, g(Yes, No, false, false, "", ")")}, + {0x207f, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0x2080, 0, 0, 0, g(Yes, No, false, false, "", "0")}, + {0x2081, 0, 0, 0, g(Yes, No, false, false, "", "1")}, + {0x2082, 0, 0, 0, g(Yes, No, false, false, "", "2")}, + {0x2083, 0, 0, 0, g(Yes, No, false, false, "", "3")}, + {0x2084, 0, 0, 0, g(Yes, No, false, false, "", "4")}, + {0x2085, 0, 0, 0, g(Yes, No, false, false, "", "5")}, + {0x2086, 0, 0, 0, g(Yes, No, false, false, "", "6")}, + {0x2087, 0, 0, 0, g(Yes, No, false, false, "", "7")}, + {0x2088, 0, 0, 0, g(Yes, No, false, false, "", "8")}, + {0x2089, 0, 0, 0, g(Yes, No, false, false, "", "9")}, + {0x208a, 0, 0, 0, g(Yes, No, false, false, "", "+")}, + {0x208b, 0, 0, 0, g(Yes, No, false, false, "", "−")}, + {0x208c, 0, 0, 0, g(Yes, No, false, false, "", "=")}, + {0x208d, 0, 0, 0, g(Yes, No, false, false, "", "(")}, + {0x208e, 0, 0, 0, g(Yes, No, false, false, "", ")")}, + {0x208f, 0, 0, 0, f(Yes, false, "")}, + {0x2090, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0x2091, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x2092, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0x2093, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x2094, 0, 0, 0, g(Yes, No, false, false, "", "ə")}, + {0x2095, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0x2096, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0x2097, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x2098, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x2099, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0x209a, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0x209b, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0x209c, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0x209d, 0, 0, 0, f(Yes, false, "")}, + {0x20a8, 0, 0, 0, g(Yes, No, false, false, "", "Rs")}, + {0x20a9, 0, 0, 0, f(Yes, false, "")}, + {0x20d0, 230, 1, 1, f(Yes, false, "")}, + {0x20d2, 1, 1, 1, f(Yes, false, "")}, + {0x20d4, 230, 1, 1, f(Yes, false, "")}, + {0x20d8, 1, 1, 1, f(Yes, false, "")}, + {0x20db, 230, 1, 1, f(Yes, false, "")}, + {0x20dd, 0, 0, 0, f(Yes, false, "")}, + {0x20e1, 230, 1, 1, f(Yes, false, "")}, + {0x20e2, 0, 0, 0, f(Yes, false, "")}, + {0x20e5, 1, 1, 1, f(Yes, false, "")}, + {0x20e7, 230, 1, 1, f(Yes, false, "")}, + {0x20e8, 220, 1, 1, f(Yes, false, "")}, + {0x20e9, 230, 1, 1, f(Yes, false, "")}, + {0x20ea, 1, 1, 1, f(Yes, false, "")}, + {0x20ec, 220, 1, 1, f(Yes, false, "")}, + {0x20f0, 230, 1, 1, f(Yes, false, "")}, + {0x20f1, 0, 0, 0, f(Yes, false, "")}, + {0x2100, 0, 0, 0, g(Yes, No, false, false, "", "a/c")}, + {0x2101, 0, 0, 0, g(Yes, No, false, false, "", "a/s")}, + {0x2102, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x2103, 0, 0, 0, g(Yes, No, false, false, "", "°C")}, + {0x2104, 0, 0, 0, f(Yes, false, "")}, + {0x2105, 0, 0, 0, g(Yes, No, false, false, "", "c/o")}, + {0x2106, 0, 0, 0, g(Yes, No, false, false, "", "c/u")}, + {0x2107, 0, 0, 0, g(Yes, No, false, false, "", "Ɛ")}, + {0x2108, 0, 0, 0, f(Yes, false, "")}, + {0x2109, 0, 0, 0, g(Yes, No, false, false, "", "°F")}, + {0x210a, 0, 0, 0, g(Yes, No, false, false, "", "g")}, + {0x210b, 0, 0, 0, g(Yes, No, false, false, "", "H")}, + {0x210e, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0x210f, 0, 0, 0, g(Yes, No, false, false, "", "ħ")}, + {0x2110, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0x2112, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x2113, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x2114, 0, 0, 0, f(Yes, false, "")}, + {0x2115, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0x2116, 0, 0, 0, g(Yes, No, false, false, "", "No")}, + {0x2117, 0, 0, 0, f(Yes, false, "")}, + {0x2119, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0x211a, 0, 0, 0, g(Yes, No, false, false, "", "Q")}, + {0x211b, 0, 0, 0, g(Yes, No, false, false, "", "R")}, + {0x211e, 0, 0, 0, f(Yes, false, "")}, + {0x2120, 0, 0, 0, g(Yes, No, false, false, "", "SM")}, + {0x2121, 0, 0, 0, g(Yes, No, false, false, "", "TEL")}, + {0x2122, 0, 0, 0, g(Yes, No, false, false, "", "TM")}, + {0x2123, 0, 0, 0, f(Yes, false, "")}, + {0x2124, 0, 0, 0, g(Yes, No, false, false, "", "Z")}, + {0x2125, 0, 0, 0, f(Yes, false, "")}, + {0x2126, 0, 0, 0, f(No, false, "Ω")}, + {0x2127, 0, 0, 0, f(Yes, false, "")}, + {0x2128, 0, 0, 0, g(Yes, No, false, false, "", "Z")}, + {0x2129, 0, 0, 0, f(Yes, false, "")}, + {0x212a, 0, 0, 0, f(No, false, "K")}, + {0x212b, 0, 0, 1, f(No, false, "Å")}, + {0x212c, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0x212d, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x212e, 0, 0, 0, f(Yes, false, "")}, + {0x212f, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x2130, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0x2131, 0, 0, 0, g(Yes, No, false, false, "", "F")}, + {0x2132, 0, 0, 0, f(Yes, false, "")}, + {0x2133, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x2134, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0x2135, 0, 0, 0, g(Yes, No, false, false, "", "א")}, + {0x2136, 0, 0, 0, g(Yes, No, false, false, "", "ב")}, + {0x2137, 0, 0, 0, g(Yes, No, false, false, "", "ג")}, + {0x2138, 0, 0, 0, g(Yes, No, false, false, "", "ד")}, + {0x2139, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x213a, 0, 0, 0, f(Yes, false, "")}, + {0x213b, 0, 0, 0, g(Yes, No, false, false, "", "FAX")}, + {0x213c, 0, 0, 0, g(Yes, No, false, false, "", "π")}, + {0x213d, 0, 0, 0, g(Yes, No, false, false, "", "γ")}, + {0x213e, 0, 0, 0, g(Yes, No, false, false, "", "Γ")}, + {0x213f, 0, 0, 0, g(Yes, No, false, false, "", "Π")}, + {0x2140, 0, 0, 0, g(Yes, No, false, false, "", "∑")}, + {0x2141, 0, 0, 0, f(Yes, false, "")}, + {0x2145, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x2146, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x2147, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x2148, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x2149, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x214a, 0, 0, 0, f(Yes, false, "")}, + {0x2150, 0, 0, 0, g(Yes, No, false, false, "", "1⁄7")}, + {0x2151, 0, 0, 0, g(Yes, No, false, false, "", "1⁄9")}, + {0x2152, 0, 0, 0, g(Yes, No, false, false, "", "1⁄10")}, + {0x2153, 0, 0, 0, g(Yes, No, false, false, "", "1⁄3")}, + {0x2154, 0, 0, 0, g(Yes, No, false, false, "", "2⁄3")}, + {0x2155, 0, 0, 0, g(Yes, No, false, false, "", "1⁄5")}, + {0x2156, 0, 0, 0, g(Yes, No, false, false, "", "2⁄5")}, + {0x2157, 0, 0, 0, g(Yes, No, false, false, "", "3⁄5")}, + {0x2158, 0, 0, 0, g(Yes, No, false, false, "", "4⁄5")}, + {0x2159, 0, 0, 0, g(Yes, No, false, false, "", "1⁄6")}, + {0x215a, 0, 0, 0, g(Yes, No, false, false, "", "5⁄6")}, + {0x215b, 0, 0, 0, g(Yes, No, false, false, "", "1⁄8")}, + {0x215c, 0, 0, 0, g(Yes, No, false, false, "", "3⁄8")}, + {0x215d, 0, 0, 0, g(Yes, No, false, false, "", "5⁄8")}, + {0x215e, 0, 0, 0, g(Yes, No, false, false, "", "7⁄8")}, + {0x215f, 0, 0, 0, g(Yes, No, false, false, "", "1⁄")}, + {0x2160, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0x2161, 0, 0, 0, g(Yes, No, false, false, "", "II")}, + {0x2162, 0, 0, 0, g(Yes, No, false, false, "", "III")}, + {0x2163, 0, 0, 0, g(Yes, No, false, false, "", "IV")}, + {0x2164, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x2165, 0, 0, 0, g(Yes, No, false, false, "", "VI")}, + {0x2166, 0, 0, 0, g(Yes, No, false, false, "", "VII")}, + {0x2167, 0, 0, 0, g(Yes, No, false, false, "", "VIII")}, + {0x2168, 0, 0, 0, g(Yes, No, false, false, "", "IX")}, + {0x2169, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0x216a, 0, 0, 0, g(Yes, No, false, false, "", "XI")}, + {0x216b, 0, 0, 0, g(Yes, No, false, false, "", "XII")}, + {0x216c, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x216d, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x216e, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x216f, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x2170, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x2171, 0, 0, 0, g(Yes, No, false, false, "", "ii")}, + {0x2172, 0, 0, 0, g(Yes, No, false, false, "", "iii")}, + {0x2173, 0, 0, 0, g(Yes, No, false, false, "", "iv")}, + {0x2174, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x2175, 0, 0, 0, g(Yes, No, false, false, "", "vi")}, + {0x2176, 0, 0, 0, g(Yes, No, false, false, "", "vii")}, + {0x2177, 0, 0, 0, g(Yes, No, false, false, "", "viii")}, + {0x2178, 0, 0, 0, g(Yes, No, false, false, "", "ix")}, + {0x2179, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x217a, 0, 0, 0, g(Yes, No, false, false, "", "xi")}, + {0x217b, 0, 0, 0, g(Yes, No, false, false, "", "xii")}, + {0x217c, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x217d, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0x217e, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x217f, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x2180, 0, 0, 0, f(Yes, false, "")}, + {0x2189, 0, 0, 0, g(Yes, No, false, false, "", "0⁄3")}, + {0x218a, 0, 0, 0, f(Yes, false, "")}, + {0x2190, 0, 0, 0, f(Yes, true, "")}, + {0x2191, 0, 0, 0, f(Yes, false, "")}, + {0x2192, 0, 0, 0, f(Yes, true, "")}, + {0x2193, 0, 0, 0, f(Yes, false, "")}, + {0x2194, 0, 0, 0, f(Yes, true, "")}, + {0x2195, 0, 0, 0, f(Yes, false, "")}, + {0x219a, 0, 0, 1, f(Yes, false, "↚")}, + {0x219b, 0, 0, 1, f(Yes, false, "↛")}, + {0x219c, 0, 0, 0, f(Yes, false, "")}, + {0x21ae, 0, 0, 1, f(Yes, false, "↮")}, + {0x21af, 0, 0, 0, f(Yes, false, "")}, + {0x21cd, 0, 0, 1, f(Yes, false, "⇍")}, + {0x21ce, 0, 0, 1, f(Yes, false, "⇎")}, + {0x21cf, 0, 0, 1, f(Yes, false, "⇏")}, + {0x21d0, 0, 0, 0, f(Yes, true, "")}, + {0x21d1, 0, 0, 0, f(Yes, false, "")}, + {0x21d2, 0, 0, 0, f(Yes, true, "")}, + {0x21d3, 0, 0, 0, f(Yes, false, "")}, + {0x21d4, 0, 0, 0, f(Yes, true, "")}, + {0x21d5, 0, 0, 0, f(Yes, false, "")}, + {0x2203, 0, 0, 0, f(Yes, true, "")}, + {0x2204, 0, 0, 1, f(Yes, false, "∄")}, + {0x2205, 0, 0, 0, f(Yes, false, "")}, + {0x2208, 0, 0, 0, f(Yes, true, "")}, + {0x2209, 0, 0, 1, f(Yes, false, "∉")}, + {0x220a, 0, 0, 0, f(Yes, false, "")}, + {0x220b, 0, 0, 0, f(Yes, true, "")}, + {0x220c, 0, 0, 1, f(Yes, false, "∌")}, + {0x220d, 0, 0, 0, f(Yes, false, "")}, + {0x2223, 0, 0, 0, f(Yes, true, "")}, + {0x2224, 0, 0, 1, f(Yes, false, "∤")}, + {0x2225, 0, 0, 0, f(Yes, true, "")}, + {0x2226, 0, 0, 1, f(Yes, false, "∦")}, + {0x2227, 0, 0, 0, f(Yes, false, "")}, + {0x222c, 0, 0, 0, g(Yes, No, false, false, "", "∫∫")}, + {0x222d, 0, 0, 0, g(Yes, No, false, false, "", "∫∫∫")}, + {0x222e, 0, 0, 0, f(Yes, false, "")}, + {0x222f, 0, 0, 0, g(Yes, No, false, false, "", "∮∮")}, + {0x2230, 0, 0, 0, g(Yes, No, false, false, "", "∮∮∮")}, + {0x2231, 0, 0, 0, f(Yes, false, "")}, + {0x223c, 0, 0, 0, f(Yes, true, "")}, + {0x223d, 0, 0, 0, f(Yes, false, "")}, + {0x2241, 0, 0, 1, f(Yes, false, "≁")}, + {0x2242, 0, 0, 0, f(Yes, false, "")}, + {0x2243, 0, 0, 0, f(Yes, true, "")}, + {0x2244, 0, 0, 1, f(Yes, false, "≄")}, + {0x2245, 0, 0, 0, f(Yes, true, "")}, + {0x2246, 0, 0, 0, f(Yes, false, "")}, + {0x2247, 0, 0, 1, f(Yes, false, "≇")}, + {0x2248, 0, 0, 0, f(Yes, true, "")}, + {0x2249, 0, 0, 1, f(Yes, false, "≉")}, + {0x224a, 0, 0, 0, f(Yes, false, "")}, + {0x224d, 0, 0, 0, f(Yes, true, "")}, + {0x224e, 0, 0, 0, f(Yes, false, "")}, + {0x2260, 0, 0, 1, f(Yes, false, "≠")}, + {0x2261, 0, 0, 0, f(Yes, true, "")}, + {0x2262, 0, 0, 1, f(Yes, false, "≢")}, + {0x2263, 0, 0, 0, f(Yes, false, "")}, + {0x2264, 0, 0, 0, f(Yes, true, "")}, + {0x2266, 0, 0, 0, f(Yes, false, "")}, + {0x226d, 0, 0, 1, f(Yes, false, "≭")}, + {0x226e, 0, 0, 1, f(Yes, false, "≮")}, + {0x226f, 0, 0, 1, f(Yes, false, "≯")}, + {0x2270, 0, 0, 1, f(Yes, false, "≰")}, + {0x2271, 0, 0, 1, f(Yes, false, "≱")}, + {0x2272, 0, 0, 0, f(Yes, true, "")}, + {0x2274, 0, 0, 1, f(Yes, false, "≴")}, + {0x2275, 0, 0, 1, f(Yes, false, "≵")}, + {0x2276, 0, 0, 0, f(Yes, true, "")}, + {0x2278, 0, 0, 1, f(Yes, false, "≸")}, + {0x2279, 0, 0, 1, f(Yes, false, "≹")}, + {0x227a, 0, 0, 0, f(Yes, true, "")}, + {0x227e, 0, 0, 0, f(Yes, false, "")}, + {0x2280, 0, 0, 1, f(Yes, false, "⊀")}, + {0x2281, 0, 0, 1, f(Yes, false, "⊁")}, + {0x2282, 0, 0, 0, f(Yes, true, "")}, + {0x2284, 0, 0, 1, f(Yes, false, "⊄")}, + {0x2285, 0, 0, 1, f(Yes, false, "⊅")}, + {0x2286, 0, 0, 0, f(Yes, true, "")}, + {0x2288, 0, 0, 1, f(Yes, false, "⊈")}, + {0x2289, 0, 0, 1, f(Yes, false, "⊉")}, + {0x228a, 0, 0, 0, f(Yes, false, "")}, + {0x2291, 0, 0, 0, f(Yes, true, "")}, + {0x2293, 0, 0, 0, f(Yes, false, "")}, + {0x22a2, 0, 0, 0, f(Yes, true, "")}, + {0x22a3, 0, 0, 0, f(Yes, false, "")}, + {0x22a8, 0, 0, 0, f(Yes, true, "")}, + {0x22aa, 0, 0, 0, f(Yes, false, "")}, + {0x22ab, 0, 0, 0, f(Yes, true, "")}, + {0x22ac, 0, 0, 1, f(Yes, false, "⊬")}, + {0x22ad, 0, 0, 1, f(Yes, false, "⊭")}, + {0x22ae, 0, 0, 1, f(Yes, false, "⊮")}, + {0x22af, 0, 0, 1, f(Yes, false, "⊯")}, + {0x22b0, 0, 0, 0, f(Yes, false, "")}, + {0x22b2, 0, 0, 0, f(Yes, true, "")}, + {0x22b6, 0, 0, 0, f(Yes, false, "")}, + {0x22e0, 0, 0, 1, f(Yes, false, "⋠")}, + {0x22e1, 0, 0, 1, f(Yes, false, "⋡")}, + {0x22e2, 0, 0, 1, f(Yes, false, "⋢")}, + {0x22e3, 0, 0, 1, f(Yes, false, "⋣")}, + {0x22e4, 0, 0, 0, f(Yes, false, "")}, + {0x22ea, 0, 0, 1, f(Yes, false, "⋪")}, + {0x22eb, 0, 0, 1, f(Yes, false, "⋫")}, + {0x22ec, 0, 0, 1, f(Yes, false, "⋬")}, + {0x22ed, 0, 0, 1, f(Yes, false, "⋭")}, + {0x22ee, 0, 0, 0, f(Yes, false, "")}, + {0x2329, 0, 0, 0, f(No, false, "〈")}, + {0x232a, 0, 0, 0, f(No, false, "〉")}, + {0x232b, 0, 0, 0, f(Yes, false, "")}, + {0x2460, 0, 0, 0, g(Yes, No, false, false, "", "1")}, + {0x2461, 0, 0, 0, g(Yes, No, false, false, "", "2")}, + {0x2462, 0, 0, 0, g(Yes, No, false, false, "", "3")}, + {0x2463, 0, 0, 0, g(Yes, No, false, false, "", "4")}, + {0x2464, 0, 0, 0, g(Yes, No, false, false, "", "5")}, + {0x2465, 0, 0, 0, g(Yes, No, false, false, "", "6")}, + {0x2466, 0, 0, 0, g(Yes, No, false, false, "", "7")}, + {0x2467, 0, 0, 0, g(Yes, No, false, false, "", "8")}, + {0x2468, 0, 0, 0, g(Yes, No, false, false, "", "9")}, + {0x2469, 0, 0, 0, g(Yes, No, false, false, "", "10")}, + {0x246a, 0, 0, 0, g(Yes, No, false, false, "", "11")}, + {0x246b, 0, 0, 0, g(Yes, No, false, false, "", "12")}, + {0x246c, 0, 0, 0, g(Yes, No, false, false, "", "13")}, + {0x246d, 0, 0, 0, g(Yes, No, false, false, "", "14")}, + {0x246e, 0, 0, 0, g(Yes, No, false, false, "", "15")}, + {0x246f, 0, 0, 0, g(Yes, No, false, false, "", "16")}, + {0x2470, 0, 0, 0, g(Yes, No, false, false, "", "17")}, + {0x2471, 0, 0, 0, g(Yes, No, false, false, "", "18")}, + {0x2472, 0, 0, 0, g(Yes, No, false, false, "", "19")}, + {0x2473, 0, 0, 0, g(Yes, No, false, false, "", "20")}, + {0x2474, 0, 0, 0, g(Yes, No, false, false, "", "(1)")}, + {0x2475, 0, 0, 0, g(Yes, No, false, false, "", "(2)")}, + {0x2476, 0, 0, 0, g(Yes, No, false, false, "", "(3)")}, + {0x2477, 0, 0, 0, g(Yes, No, false, false, "", "(4)")}, + {0x2478, 0, 0, 0, g(Yes, No, false, false, "", "(5)")}, + {0x2479, 0, 0, 0, g(Yes, No, false, false, "", "(6)")}, + {0x247a, 0, 0, 0, g(Yes, No, false, false, "", "(7)")}, + {0x247b, 0, 0, 0, g(Yes, No, false, false, "", "(8)")}, + {0x247c, 0, 0, 0, g(Yes, No, false, false, "", "(9)")}, + {0x247d, 0, 0, 0, g(Yes, No, false, false, "", "(10)")}, + {0x247e, 0, 0, 0, g(Yes, No, false, false, "", "(11)")}, + {0x247f, 0, 0, 0, g(Yes, No, false, false, "", "(12)")}, + {0x2480, 0, 0, 0, g(Yes, No, false, false, "", "(13)")}, + {0x2481, 0, 0, 0, g(Yes, No, false, false, "", "(14)")}, + {0x2482, 0, 0, 0, g(Yes, No, false, false, "", "(15)")}, + {0x2483, 0, 0, 0, g(Yes, No, false, false, "", "(16)")}, + {0x2484, 0, 0, 0, g(Yes, No, false, false, "", "(17)")}, + {0x2485, 0, 0, 0, g(Yes, No, false, false, "", "(18)")}, + {0x2486, 0, 0, 0, g(Yes, No, false, false, "", "(19)")}, + {0x2487, 0, 0, 0, g(Yes, No, false, false, "", "(20)")}, + {0x2488, 0, 0, 0, g(Yes, No, false, false, "", "1.")}, + {0x2489, 0, 0, 0, g(Yes, No, false, false, "", "2.")}, + {0x248a, 0, 0, 0, g(Yes, No, false, false, "", "3.")}, + {0x248b, 0, 0, 0, g(Yes, No, false, false, "", "4.")}, + {0x248c, 0, 0, 0, g(Yes, No, false, false, "", "5.")}, + {0x248d, 0, 0, 0, g(Yes, No, false, false, "", "6.")}, + {0x248e, 0, 0, 0, g(Yes, No, false, false, "", "7.")}, + {0x248f, 0, 0, 0, g(Yes, No, false, false, "", "8.")}, + {0x2490, 0, 0, 0, g(Yes, No, false, false, "", "9.")}, + {0x2491, 0, 0, 0, g(Yes, No, false, false, "", "10.")}, + {0x2492, 0, 0, 0, g(Yes, No, false, false, "", "11.")}, + {0x2493, 0, 0, 0, g(Yes, No, false, false, "", "12.")}, + {0x2494, 0, 0, 0, g(Yes, No, false, false, "", "13.")}, + {0x2495, 0, 0, 0, g(Yes, No, false, false, "", "14.")}, + {0x2496, 0, 0, 0, g(Yes, No, false, false, "", "15.")}, + {0x2497, 0, 0, 0, g(Yes, No, false, false, "", "16.")}, + {0x2498, 0, 0, 0, g(Yes, No, false, false, "", "17.")}, + {0x2499, 0, 0, 0, g(Yes, No, false, false, "", "18.")}, + {0x249a, 0, 0, 0, g(Yes, No, false, false, "", "19.")}, + {0x249b, 0, 0, 0, g(Yes, No, false, false, "", "20.")}, + {0x249c, 0, 0, 0, g(Yes, No, false, false, "", "(a)")}, + {0x249d, 0, 0, 0, g(Yes, No, false, false, "", "(b)")}, + {0x249e, 0, 0, 0, g(Yes, No, false, false, "", "(c)")}, + {0x249f, 0, 0, 0, g(Yes, No, false, false, "", "(d)")}, + {0x24a0, 0, 0, 0, g(Yes, No, false, false, "", "(e)")}, + {0x24a1, 0, 0, 0, g(Yes, No, false, false, "", "(f)")}, + {0x24a2, 0, 0, 0, g(Yes, No, false, false, "", "(g)")}, + {0x24a3, 0, 0, 0, g(Yes, No, false, false, "", "(h)")}, + {0x24a4, 0, 0, 0, g(Yes, No, false, false, "", "(i)")}, + {0x24a5, 0, 0, 0, g(Yes, No, false, false, "", "(j)")}, + {0x24a6, 0, 0, 0, g(Yes, No, false, false, "", "(k)")}, + {0x24a7, 0, 0, 0, g(Yes, No, false, false, "", "(l)")}, + {0x24a8, 0, 0, 0, g(Yes, No, false, false, "", "(m)")}, + {0x24a9, 0, 0, 0, g(Yes, No, false, false, "", "(n)")}, + {0x24aa, 0, 0, 0, g(Yes, No, false, false, "", "(o)")}, + {0x24ab, 0, 0, 0, g(Yes, No, false, false, "", "(p)")}, + {0x24ac, 0, 0, 0, g(Yes, No, false, false, "", "(q)")}, + {0x24ad, 0, 0, 0, g(Yes, No, false, false, "", "(r)")}, + {0x24ae, 0, 0, 0, g(Yes, No, false, false, "", "(s)")}, + {0x24af, 0, 0, 0, g(Yes, No, false, false, "", "(t)")}, + {0x24b0, 0, 0, 0, g(Yes, No, false, false, "", "(u)")}, + {0x24b1, 0, 0, 0, g(Yes, No, false, false, "", "(v)")}, + {0x24b2, 0, 0, 0, g(Yes, No, false, false, "", "(w)")}, + {0x24b3, 0, 0, 0, g(Yes, No, false, false, "", "(x)")}, + {0x24b4, 0, 0, 0, g(Yes, No, false, false, "", "(y)")}, + {0x24b5, 0, 0, 0, g(Yes, No, false, false, "", "(z)")}, + {0x24b6, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0x24b7, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0x24b8, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x24b9, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x24ba, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0x24bb, 0, 0, 0, g(Yes, No, false, false, "", "F")}, + {0x24bc, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0x24bd, 0, 0, 0, g(Yes, No, false, false, "", "H")}, + {0x24be, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0x24bf, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0x24c0, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0x24c1, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x24c2, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x24c3, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0x24c4, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0x24c5, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0x24c6, 0, 0, 0, g(Yes, No, false, false, "", "Q")}, + {0x24c7, 0, 0, 0, g(Yes, No, false, false, "", "R")}, + {0x24c8, 0, 0, 0, g(Yes, No, false, false, "", "S")}, + {0x24c9, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0x24ca, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0x24cb, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x24cc, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0x24cd, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0x24ce, 0, 0, 0, g(Yes, No, false, false, "", "Y")}, + {0x24cf, 0, 0, 0, g(Yes, No, false, false, "", "Z")}, + {0x24d0, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0x24d1, 0, 0, 0, g(Yes, No, false, false, "", "b")}, + {0x24d2, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0x24d3, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x24d4, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x24d5, 0, 0, 0, g(Yes, No, false, false, "", "f")}, + {0x24d6, 0, 0, 0, g(Yes, No, false, false, "", "g")}, + {0x24d7, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0x24d8, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x24d9, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x24da, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0x24db, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x24dc, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x24dd, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0x24de, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0x24df, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0x24e0, 0, 0, 0, g(Yes, No, false, false, "", "q")}, + {0x24e1, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0x24e2, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0x24e3, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0x24e4, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0x24e5, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x24e6, 0, 0, 0, g(Yes, No, false, false, "", "w")}, + {0x24e7, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x24e8, 0, 0, 0, g(Yes, No, false, false, "", "y")}, + {0x24e9, 0, 0, 0, g(Yes, No, false, false, "", "z")}, + {0x24ea, 0, 0, 0, g(Yes, No, false, false, "", "0")}, + {0x24eb, 0, 0, 0, f(Yes, false, "")}, + {0x2a0c, 0, 0, 0, g(Yes, No, false, false, "", "∫∫∫∫")}, + {0x2a0d, 0, 0, 0, f(Yes, false, "")}, + {0x2a74, 0, 0, 0, g(Yes, No, false, false, "", "::=")}, + {0x2a75, 0, 0, 0, g(Yes, No, false, false, "", "==")}, + {0x2a76, 0, 0, 0, g(Yes, No, false, false, "", "===")}, + {0x2a77, 0, 0, 0, f(Yes, false, "")}, + {0x2adc, 0, 0, 1, f(No, false, "⫝̸")}, + {0x2add, 0, 0, 0, f(Yes, false, "")}, + {0x2c7c, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x2c7d, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x2c7e, 0, 0, 0, f(Yes, false, "")}, + {0x2cef, 230, 1, 1, f(Yes, false, "")}, + {0x2cf2, 0, 0, 0, f(Yes, false, "")}, + {0x2d6f, 0, 0, 0, g(Yes, No, false, false, "", "ⵡ")}, + {0x2d70, 0, 0, 0, f(Yes, false, "")}, + {0x2d7f, 9, 1, 1, f(Yes, false, "")}, + {0x2d80, 0, 0, 0, f(Yes, false, "")}, + {0x2de0, 230, 1, 1, f(Yes, false, "")}, + {0x2e00, 0, 0, 0, f(Yes, false, "")}, + {0x2e9f, 0, 0, 0, g(Yes, No, false, false, "", "母")}, + {0x2ea0, 0, 0, 0, f(Yes, false, "")}, + {0x2ef3, 0, 0, 0, g(Yes, No, false, false, "", "龟")}, + {0x2ef4, 0, 0, 0, f(Yes, false, "")}, + {0x2f00, 0, 0, 0, g(Yes, No, false, false, "", "一")}, + {0x2f01, 0, 0, 0, g(Yes, No, false, false, "", "丨")}, + {0x2f02, 0, 0, 0, g(Yes, No, false, false, "", "丶")}, + {0x2f03, 0, 0, 0, g(Yes, No, false, false, "", "丿")}, + {0x2f04, 0, 0, 0, g(Yes, No, false, false, "", "乙")}, + {0x2f05, 0, 0, 0, g(Yes, No, false, false, "", "亅")}, + {0x2f06, 0, 0, 0, g(Yes, No, false, false, "", "二")}, + {0x2f07, 0, 0, 0, g(Yes, No, false, false, "", "亠")}, + {0x2f08, 0, 0, 0, g(Yes, No, false, false, "", "人")}, + {0x2f09, 0, 0, 0, g(Yes, No, false, false, "", "儿")}, + {0x2f0a, 0, 0, 0, g(Yes, No, false, false, "", "入")}, + {0x2f0b, 0, 0, 0, g(Yes, No, false, false, "", "八")}, + {0x2f0c, 0, 0, 0, g(Yes, No, false, false, "", "冂")}, + {0x2f0d, 0, 0, 0, g(Yes, No, false, false, "", "冖")}, + {0x2f0e, 0, 0, 0, g(Yes, No, false, false, "", "冫")}, + {0x2f0f, 0, 0, 0, g(Yes, No, false, false, "", "几")}, + {0x2f10, 0, 0, 0, g(Yes, No, false, false, "", "凵")}, + {0x2f11, 0, 0, 0, g(Yes, No, false, false, "", "刀")}, + {0x2f12, 0, 0, 0, g(Yes, No, false, false, "", "力")}, + {0x2f13, 0, 0, 0, g(Yes, No, false, false, "", "勹")}, + {0x2f14, 0, 0, 0, g(Yes, No, false, false, "", "匕")}, + {0x2f15, 0, 0, 0, g(Yes, No, false, false, "", "匚")}, + {0x2f16, 0, 0, 0, g(Yes, No, false, false, "", "匸")}, + {0x2f17, 0, 0, 0, g(Yes, No, false, false, "", "十")}, + {0x2f18, 0, 0, 0, g(Yes, No, false, false, "", "卜")}, + {0x2f19, 0, 0, 0, g(Yes, No, false, false, "", "卩")}, + {0x2f1a, 0, 0, 0, g(Yes, No, false, false, "", "厂")}, + {0x2f1b, 0, 0, 0, g(Yes, No, false, false, "", "厶")}, + {0x2f1c, 0, 0, 0, g(Yes, No, false, false, "", "又")}, + {0x2f1d, 0, 0, 0, g(Yes, No, false, false, "", "口")}, + {0x2f1e, 0, 0, 0, g(Yes, No, false, false, "", "囗")}, + {0x2f1f, 0, 0, 0, g(Yes, No, false, false, "", "土")}, + {0x2f20, 0, 0, 0, g(Yes, No, false, false, "", "士")}, + {0x2f21, 0, 0, 0, g(Yes, No, false, false, "", "夂")}, + {0x2f22, 0, 0, 0, g(Yes, No, false, false, "", "夊")}, + {0x2f23, 0, 0, 0, g(Yes, No, false, false, "", "夕")}, + {0x2f24, 0, 0, 0, g(Yes, No, false, false, "", "大")}, + {0x2f25, 0, 0, 0, g(Yes, No, false, false, "", "女")}, + {0x2f26, 0, 0, 0, g(Yes, No, false, false, "", "子")}, + {0x2f27, 0, 0, 0, g(Yes, No, false, false, "", "宀")}, + {0x2f28, 0, 0, 0, g(Yes, No, false, false, "", "寸")}, + {0x2f29, 0, 0, 0, g(Yes, No, false, false, "", "小")}, + {0x2f2a, 0, 0, 0, g(Yes, No, false, false, "", "尢")}, + {0x2f2b, 0, 0, 0, g(Yes, No, false, false, "", "尸")}, + {0x2f2c, 0, 0, 0, g(Yes, No, false, false, "", "屮")}, + {0x2f2d, 0, 0, 0, g(Yes, No, false, false, "", "山")}, + {0x2f2e, 0, 0, 0, g(Yes, No, false, false, "", "巛")}, + {0x2f2f, 0, 0, 0, g(Yes, No, false, false, "", "工")}, + {0x2f30, 0, 0, 0, g(Yes, No, false, false, "", "己")}, + {0x2f31, 0, 0, 0, g(Yes, No, false, false, "", "巾")}, + {0x2f32, 0, 0, 0, g(Yes, No, false, false, "", "干")}, + {0x2f33, 0, 0, 0, g(Yes, No, false, false, "", "幺")}, + {0x2f34, 0, 0, 0, g(Yes, No, false, false, "", "广")}, + {0x2f35, 0, 0, 0, g(Yes, No, false, false, "", "廴")}, + {0x2f36, 0, 0, 0, g(Yes, No, false, false, "", "廾")}, + {0x2f37, 0, 0, 0, g(Yes, No, false, false, "", "弋")}, + {0x2f38, 0, 0, 0, g(Yes, No, false, false, "", "弓")}, + {0x2f39, 0, 0, 0, g(Yes, No, false, false, "", "彐")}, + {0x2f3a, 0, 0, 0, g(Yes, No, false, false, "", "彡")}, + {0x2f3b, 0, 0, 0, g(Yes, No, false, false, "", "彳")}, + {0x2f3c, 0, 0, 0, g(Yes, No, false, false, "", "心")}, + {0x2f3d, 0, 0, 0, g(Yes, No, false, false, "", "戈")}, + {0x2f3e, 0, 0, 0, g(Yes, No, false, false, "", "戶")}, + {0x2f3f, 0, 0, 0, g(Yes, No, false, false, "", "手")}, + {0x2f40, 0, 0, 0, g(Yes, No, false, false, "", "支")}, + {0x2f41, 0, 0, 0, g(Yes, No, false, false, "", "攴")}, + {0x2f42, 0, 0, 0, g(Yes, No, false, false, "", "文")}, + {0x2f43, 0, 0, 0, g(Yes, No, false, false, "", "斗")}, + {0x2f44, 0, 0, 0, g(Yes, No, false, false, "", "斤")}, + {0x2f45, 0, 0, 0, g(Yes, No, false, false, "", "方")}, + {0x2f46, 0, 0, 0, g(Yes, No, false, false, "", "无")}, + {0x2f47, 0, 0, 0, g(Yes, No, false, false, "", "日")}, + {0x2f48, 0, 0, 0, g(Yes, No, false, false, "", "曰")}, + {0x2f49, 0, 0, 0, g(Yes, No, false, false, "", "月")}, + {0x2f4a, 0, 0, 0, g(Yes, No, false, false, "", "木")}, + {0x2f4b, 0, 0, 0, g(Yes, No, false, false, "", "欠")}, + {0x2f4c, 0, 0, 0, g(Yes, No, false, false, "", "止")}, + {0x2f4d, 0, 0, 0, g(Yes, No, false, false, "", "歹")}, + {0x2f4e, 0, 0, 0, g(Yes, No, false, false, "", "殳")}, + {0x2f4f, 0, 0, 0, g(Yes, No, false, false, "", "毋")}, + {0x2f50, 0, 0, 0, g(Yes, No, false, false, "", "比")}, + {0x2f51, 0, 0, 0, g(Yes, No, false, false, "", "毛")}, + {0x2f52, 0, 0, 0, g(Yes, No, false, false, "", "氏")}, + {0x2f53, 0, 0, 0, g(Yes, No, false, false, "", "气")}, + {0x2f54, 0, 0, 0, g(Yes, No, false, false, "", "水")}, + {0x2f55, 0, 0, 0, g(Yes, No, false, false, "", "火")}, + {0x2f56, 0, 0, 0, g(Yes, No, false, false, "", "爪")}, + {0x2f57, 0, 0, 0, g(Yes, No, false, false, "", "父")}, + {0x2f58, 0, 0, 0, g(Yes, No, false, false, "", "爻")}, + {0x2f59, 0, 0, 0, g(Yes, No, false, false, "", "爿")}, + {0x2f5a, 0, 0, 0, g(Yes, No, false, false, "", "片")}, + {0x2f5b, 0, 0, 0, g(Yes, No, false, false, "", "牙")}, + {0x2f5c, 0, 0, 0, g(Yes, No, false, false, "", "牛")}, + {0x2f5d, 0, 0, 0, g(Yes, No, false, false, "", "犬")}, + {0x2f5e, 0, 0, 0, g(Yes, No, false, false, "", "玄")}, + {0x2f5f, 0, 0, 0, g(Yes, No, false, false, "", "玉")}, + {0x2f60, 0, 0, 0, g(Yes, No, false, false, "", "瓜")}, + {0x2f61, 0, 0, 0, g(Yes, No, false, false, "", "瓦")}, + {0x2f62, 0, 0, 0, g(Yes, No, false, false, "", "甘")}, + {0x2f63, 0, 0, 0, g(Yes, No, false, false, "", "生")}, + {0x2f64, 0, 0, 0, g(Yes, No, false, false, "", "用")}, + {0x2f65, 0, 0, 0, g(Yes, No, false, false, "", "田")}, + {0x2f66, 0, 0, 0, g(Yes, No, false, false, "", "疋")}, + {0x2f67, 0, 0, 0, g(Yes, No, false, false, "", "疒")}, + {0x2f68, 0, 0, 0, g(Yes, No, false, false, "", "癶")}, + {0x2f69, 0, 0, 0, g(Yes, No, false, false, "", "白")}, + {0x2f6a, 0, 0, 0, g(Yes, No, false, false, "", "皮")}, + {0x2f6b, 0, 0, 0, g(Yes, No, false, false, "", "皿")}, + {0x2f6c, 0, 0, 0, g(Yes, No, false, false, "", "目")}, + {0x2f6d, 0, 0, 0, g(Yes, No, false, false, "", "矛")}, + {0x2f6e, 0, 0, 0, g(Yes, No, false, false, "", "矢")}, + {0x2f6f, 0, 0, 0, g(Yes, No, false, false, "", "石")}, + {0x2f70, 0, 0, 0, g(Yes, No, false, false, "", "示")}, + {0x2f71, 0, 0, 0, g(Yes, No, false, false, "", "禸")}, + {0x2f72, 0, 0, 0, g(Yes, No, false, false, "", "禾")}, + {0x2f73, 0, 0, 0, g(Yes, No, false, false, "", "穴")}, + {0x2f74, 0, 0, 0, g(Yes, No, false, false, "", "立")}, + {0x2f75, 0, 0, 0, g(Yes, No, false, false, "", "竹")}, + {0x2f76, 0, 0, 0, g(Yes, No, false, false, "", "米")}, + {0x2f77, 0, 0, 0, g(Yes, No, false, false, "", "糸")}, + {0x2f78, 0, 0, 0, g(Yes, No, false, false, "", "缶")}, + {0x2f79, 0, 0, 0, g(Yes, No, false, false, "", "网")}, + {0x2f7a, 0, 0, 0, g(Yes, No, false, false, "", "羊")}, + {0x2f7b, 0, 0, 0, g(Yes, No, false, false, "", "羽")}, + {0x2f7c, 0, 0, 0, g(Yes, No, false, false, "", "老")}, + {0x2f7d, 0, 0, 0, g(Yes, No, false, false, "", "而")}, + {0x2f7e, 0, 0, 0, g(Yes, No, false, false, "", "耒")}, + {0x2f7f, 0, 0, 0, g(Yes, No, false, false, "", "耳")}, + {0x2f80, 0, 0, 0, g(Yes, No, false, false, "", "聿")}, + {0x2f81, 0, 0, 0, g(Yes, No, false, false, "", "肉")}, + {0x2f82, 0, 0, 0, g(Yes, No, false, false, "", "臣")}, + {0x2f83, 0, 0, 0, g(Yes, No, false, false, "", "自")}, + {0x2f84, 0, 0, 0, g(Yes, No, false, false, "", "至")}, + {0x2f85, 0, 0, 0, g(Yes, No, false, false, "", "臼")}, + {0x2f86, 0, 0, 0, g(Yes, No, false, false, "", "舌")}, + {0x2f87, 0, 0, 0, g(Yes, No, false, false, "", "舛")}, + {0x2f88, 0, 0, 0, g(Yes, No, false, false, "", "舟")}, + {0x2f89, 0, 0, 0, g(Yes, No, false, false, "", "艮")}, + {0x2f8a, 0, 0, 0, g(Yes, No, false, false, "", "色")}, + {0x2f8b, 0, 0, 0, g(Yes, No, false, false, "", "艸")}, + {0x2f8c, 0, 0, 0, g(Yes, No, false, false, "", "虍")}, + {0x2f8d, 0, 0, 0, g(Yes, No, false, false, "", "虫")}, + {0x2f8e, 0, 0, 0, g(Yes, No, false, false, "", "血")}, + {0x2f8f, 0, 0, 0, g(Yes, No, false, false, "", "行")}, + {0x2f90, 0, 0, 0, g(Yes, No, false, false, "", "衣")}, + {0x2f91, 0, 0, 0, g(Yes, No, false, false, "", "襾")}, + {0x2f92, 0, 0, 0, g(Yes, No, false, false, "", "見")}, + {0x2f93, 0, 0, 0, g(Yes, No, false, false, "", "角")}, + {0x2f94, 0, 0, 0, g(Yes, No, false, false, "", "言")}, + {0x2f95, 0, 0, 0, g(Yes, No, false, false, "", "谷")}, + {0x2f96, 0, 0, 0, g(Yes, No, false, false, "", "豆")}, + {0x2f97, 0, 0, 0, g(Yes, No, false, false, "", "豕")}, + {0x2f98, 0, 0, 0, g(Yes, No, false, false, "", "豸")}, + {0x2f99, 0, 0, 0, g(Yes, No, false, false, "", "貝")}, + {0x2f9a, 0, 0, 0, g(Yes, No, false, false, "", "赤")}, + {0x2f9b, 0, 0, 0, g(Yes, No, false, false, "", "走")}, + {0x2f9c, 0, 0, 0, g(Yes, No, false, false, "", "足")}, + {0x2f9d, 0, 0, 0, g(Yes, No, false, false, "", "身")}, + {0x2f9e, 0, 0, 0, g(Yes, No, false, false, "", "車")}, + {0x2f9f, 0, 0, 0, g(Yes, No, false, false, "", "辛")}, + {0x2fa0, 0, 0, 0, g(Yes, No, false, false, "", "辰")}, + {0x2fa1, 0, 0, 0, g(Yes, No, false, false, "", "辵")}, + {0x2fa2, 0, 0, 0, g(Yes, No, false, false, "", "邑")}, + {0x2fa3, 0, 0, 0, g(Yes, No, false, false, "", "酉")}, + {0x2fa4, 0, 0, 0, g(Yes, No, false, false, "", "釆")}, + {0x2fa5, 0, 0, 0, g(Yes, No, false, false, "", "里")}, + {0x2fa6, 0, 0, 0, g(Yes, No, false, false, "", "金")}, + {0x2fa7, 0, 0, 0, g(Yes, No, false, false, "", "長")}, + {0x2fa8, 0, 0, 0, g(Yes, No, false, false, "", "門")}, + {0x2fa9, 0, 0, 0, g(Yes, No, false, false, "", "阜")}, + {0x2faa, 0, 0, 0, g(Yes, No, false, false, "", "隶")}, + {0x2fab, 0, 0, 0, g(Yes, No, false, false, "", "隹")}, + {0x2fac, 0, 0, 0, g(Yes, No, false, false, "", "雨")}, + {0x2fad, 0, 0, 0, g(Yes, No, false, false, "", "靑")}, + {0x2fae, 0, 0, 0, g(Yes, No, false, false, "", "非")}, + {0x2faf, 0, 0, 0, g(Yes, No, false, false, "", "面")}, + {0x2fb0, 0, 0, 0, g(Yes, No, false, false, "", "革")}, + {0x2fb1, 0, 0, 0, g(Yes, No, false, false, "", "韋")}, + {0x2fb2, 0, 0, 0, g(Yes, No, false, false, "", "韭")}, + {0x2fb3, 0, 0, 0, g(Yes, No, false, false, "", "音")}, + {0x2fb4, 0, 0, 0, g(Yes, No, false, false, "", "頁")}, + {0x2fb5, 0, 0, 0, g(Yes, No, false, false, "", "風")}, + {0x2fb6, 0, 0, 0, g(Yes, No, false, false, "", "飛")}, + {0x2fb7, 0, 0, 0, g(Yes, No, false, false, "", "食")}, + {0x2fb8, 0, 0, 0, g(Yes, No, false, false, "", "首")}, + {0x2fb9, 0, 0, 0, g(Yes, No, false, false, "", "香")}, + {0x2fba, 0, 0, 0, g(Yes, No, false, false, "", "馬")}, + {0x2fbb, 0, 0, 0, g(Yes, No, false, false, "", "骨")}, + {0x2fbc, 0, 0, 0, g(Yes, No, false, false, "", "高")}, + {0x2fbd, 0, 0, 0, g(Yes, No, false, false, "", "髟")}, + {0x2fbe, 0, 0, 0, g(Yes, No, false, false, "", "鬥")}, + {0x2fbf, 0, 0, 0, g(Yes, No, false, false, "", "鬯")}, + {0x2fc0, 0, 0, 0, g(Yes, No, false, false, "", "鬲")}, + {0x2fc1, 0, 0, 0, g(Yes, No, false, false, "", "鬼")}, + {0x2fc2, 0, 0, 0, g(Yes, No, false, false, "", "魚")}, + {0x2fc3, 0, 0, 0, g(Yes, No, false, false, "", "鳥")}, + {0x2fc4, 0, 0, 0, g(Yes, No, false, false, "", "鹵")}, + {0x2fc5, 0, 0, 0, g(Yes, No, false, false, "", "鹿")}, + {0x2fc6, 0, 0, 0, g(Yes, No, false, false, "", "麥")}, + {0x2fc7, 0, 0, 0, g(Yes, No, false, false, "", "麻")}, + {0x2fc8, 0, 0, 0, g(Yes, No, false, false, "", "黃")}, + {0x2fc9, 0, 0, 0, g(Yes, No, false, false, "", "黍")}, + {0x2fca, 0, 0, 0, g(Yes, No, false, false, "", "黑")}, + {0x2fcb, 0, 0, 0, g(Yes, No, false, false, "", "黹")}, + {0x2fcc, 0, 0, 0, g(Yes, No, false, false, "", "黽")}, + {0x2fcd, 0, 0, 0, g(Yes, No, false, false, "", "鼎")}, + {0x2fce, 0, 0, 0, g(Yes, No, false, false, "", "鼓")}, + {0x2fcf, 0, 0, 0, g(Yes, No, false, false, "", "鼠")}, + {0x2fd0, 0, 0, 0, g(Yes, No, false, false, "", "鼻")}, + {0x2fd1, 0, 0, 0, g(Yes, No, false, false, "", "齊")}, + {0x2fd2, 0, 0, 0, g(Yes, No, false, false, "", "齒")}, + {0x2fd3, 0, 0, 0, g(Yes, No, false, false, "", "龍")}, + {0x2fd4, 0, 0, 0, g(Yes, No, false, false, "", "龜")}, + {0x2fd5, 0, 0, 0, g(Yes, No, false, false, "", "龠")}, + {0x2fd6, 0, 0, 0, f(Yes, false, "")}, + {0x3000, 0, 0, 0, g(Yes, No, false, false, "", " ")}, + {0x3001, 0, 0, 0, f(Yes, false, "")}, + {0x302a, 218, 1, 1, f(Yes, false, "")}, + {0x302b, 228, 1, 1, f(Yes, false, "")}, + {0x302c, 232, 1, 1, f(Yes, false, "")}, + {0x302d, 222, 1, 1, f(Yes, false, "")}, + {0x302e, 224, 1, 1, f(Yes, false, "")}, + {0x3030, 0, 0, 0, f(Yes, false, "")}, + {0x3036, 0, 0, 0, g(Yes, No, false, false, "", "〒")}, + {0x3037, 0, 0, 0, f(Yes, false, "")}, + {0x3038, 0, 0, 0, g(Yes, No, false, false, "", "十")}, + {0x3039, 0, 0, 0, g(Yes, No, false, false, "", "卄")}, + {0x303a, 0, 0, 0, g(Yes, No, false, false, "", "卅")}, + {0x303b, 0, 0, 0, f(Yes, false, "")}, + {0x3046, 0, 0, 0, f(Yes, true, "")}, + {0x3047, 0, 0, 0, f(Yes, false, "")}, + {0x304b, 0, 0, 0, f(Yes, true, "")}, + {0x304c, 0, 0, 1, f(Yes, false, "が")}, + {0x304d, 0, 0, 0, f(Yes, true, "")}, + {0x304e, 0, 0, 1, f(Yes, false, "ぎ")}, + {0x304f, 0, 0, 0, f(Yes, true, "")}, + {0x3050, 0, 0, 1, f(Yes, false, "ぐ")}, + {0x3051, 0, 0, 0, f(Yes, true, "")}, + {0x3052, 0, 0, 1, f(Yes, false, "げ")}, + {0x3053, 0, 0, 0, f(Yes, true, "")}, + {0x3054, 0, 0, 1, f(Yes, false, "ご")}, + {0x3055, 0, 0, 0, f(Yes, true, "")}, + {0x3056, 0, 0, 1, f(Yes, false, "ざ")}, + {0x3057, 0, 0, 0, f(Yes, true, "")}, + {0x3058, 0, 0, 1, f(Yes, false, "じ")}, + {0x3059, 0, 0, 0, f(Yes, true, "")}, + {0x305a, 0, 0, 1, f(Yes, false, "ず")}, + {0x305b, 0, 0, 0, f(Yes, true, "")}, + {0x305c, 0, 0, 1, f(Yes, false, "ぜ")}, + {0x305d, 0, 0, 0, f(Yes, true, "")}, + {0x305e, 0, 0, 1, f(Yes, false, "ぞ")}, + {0x305f, 0, 0, 0, f(Yes, true, "")}, + {0x3060, 0, 0, 1, f(Yes, false, "だ")}, + {0x3061, 0, 0, 0, f(Yes, true, "")}, + {0x3062, 0, 0, 1, f(Yes, false, "ぢ")}, + {0x3063, 0, 0, 0, f(Yes, false, "")}, + {0x3064, 0, 0, 0, f(Yes, true, "")}, + {0x3065, 0, 0, 1, f(Yes, false, "づ")}, + {0x3066, 0, 0, 0, f(Yes, true, "")}, + {0x3067, 0, 0, 1, f(Yes, false, "で")}, + {0x3068, 0, 0, 0, f(Yes, true, "")}, + {0x3069, 0, 0, 1, f(Yes, false, "ど")}, + {0x306a, 0, 0, 0, f(Yes, false, "")}, + {0x306f, 0, 0, 0, f(Yes, true, "")}, + {0x3070, 0, 0, 1, f(Yes, false, "ば")}, + {0x3071, 0, 0, 1, f(Yes, false, "ぱ")}, + {0x3072, 0, 0, 0, f(Yes, true, "")}, + {0x3073, 0, 0, 1, f(Yes, false, "び")}, + {0x3074, 0, 0, 1, f(Yes, false, "ぴ")}, + {0x3075, 0, 0, 0, f(Yes, true, "")}, + {0x3076, 0, 0, 1, f(Yes, false, "ぶ")}, + {0x3077, 0, 0, 1, f(Yes, false, "ぷ")}, + {0x3078, 0, 0, 0, f(Yes, true, "")}, + {0x3079, 0, 0, 1, f(Yes, false, "べ")}, + {0x307a, 0, 0, 1, f(Yes, false, "ぺ")}, + {0x307b, 0, 0, 0, f(Yes, true, "")}, + {0x307c, 0, 0, 1, f(Yes, false, "ぼ")}, + {0x307d, 0, 0, 1, f(Yes, false, "ぽ")}, + {0x307e, 0, 0, 0, f(Yes, false, "")}, + {0x3094, 0, 0, 1, f(Yes, false, "ゔ")}, + {0x3095, 0, 0, 0, f(Yes, false, "")}, + {0x3099, 8, 1, 1, f(Maybe, false, "")}, + {0x309b, 0, 0, 1, g(Yes, No, false, false, "", " ゙")}, + {0x309c, 0, 0, 1, g(Yes, No, false, false, "", " ゚")}, + {0x309d, 0, 0, 0, f(Yes, true, "")}, + {0x309e, 0, 0, 1, f(Yes, false, "ゞ")}, + {0x309f, 0, 0, 0, g(Yes, No, false, false, "", "より")}, + {0x30a0, 0, 0, 0, f(Yes, false, "")}, + {0x30a6, 0, 0, 0, f(Yes, true, "")}, + {0x30a7, 0, 0, 0, f(Yes, false, "")}, + {0x30ab, 0, 0, 0, f(Yes, true, "")}, + {0x30ac, 0, 0, 1, f(Yes, false, "ガ")}, + {0x30ad, 0, 0, 0, f(Yes, true, "")}, + {0x30ae, 0, 0, 1, f(Yes, false, "ギ")}, + {0x30af, 0, 0, 0, f(Yes, true, "")}, + {0x30b0, 0, 0, 1, f(Yes, false, "グ")}, + {0x30b1, 0, 0, 0, f(Yes, true, "")}, + {0x30b2, 0, 0, 1, f(Yes, false, "ゲ")}, + {0x30b3, 0, 0, 0, f(Yes, true, "")}, + {0x30b4, 0, 0, 1, f(Yes, false, "ゴ")}, + {0x30b5, 0, 0, 0, f(Yes, true, "")}, + {0x30b6, 0, 0, 1, f(Yes, false, "ザ")}, + {0x30b7, 0, 0, 0, f(Yes, true, "")}, + {0x30b8, 0, 0, 1, f(Yes, false, "ジ")}, + {0x30b9, 0, 0, 0, f(Yes, true, "")}, + {0x30ba, 0, 0, 1, f(Yes, false, "ズ")}, + {0x30bb, 0, 0, 0, f(Yes, true, "")}, + {0x30bc, 0, 0, 1, f(Yes, false, "ゼ")}, + {0x30bd, 0, 0, 0, f(Yes, true, "")}, + {0x30be, 0, 0, 1, f(Yes, false, "ゾ")}, + {0x30bf, 0, 0, 0, f(Yes, true, "")}, + {0x30c0, 0, 0, 1, f(Yes, false, "ダ")}, + {0x30c1, 0, 0, 0, f(Yes, true, "")}, + {0x30c2, 0, 0, 1, f(Yes, false, "ヂ")}, + {0x30c3, 0, 0, 0, f(Yes, false, "")}, + {0x30c4, 0, 0, 0, f(Yes, true, "")}, + {0x30c5, 0, 0, 1, f(Yes, false, "ヅ")}, + {0x30c6, 0, 0, 0, f(Yes, true, "")}, + {0x30c7, 0, 0, 1, f(Yes, false, "デ")}, + {0x30c8, 0, 0, 0, f(Yes, true, "")}, + {0x30c9, 0, 0, 1, f(Yes, false, "ド")}, + {0x30ca, 0, 0, 0, f(Yes, false, "")}, + {0x30cf, 0, 0, 0, f(Yes, true, "")}, + {0x30d0, 0, 0, 1, f(Yes, false, "バ")}, + {0x30d1, 0, 0, 1, f(Yes, false, "パ")}, + {0x30d2, 0, 0, 0, f(Yes, true, "")}, + {0x30d3, 0, 0, 1, f(Yes, false, "ビ")}, + {0x30d4, 0, 0, 1, f(Yes, false, "ピ")}, + {0x30d5, 0, 0, 0, f(Yes, true, "")}, + {0x30d6, 0, 0, 1, f(Yes, false, "ブ")}, + {0x30d7, 0, 0, 1, f(Yes, false, "プ")}, + {0x30d8, 0, 0, 0, f(Yes, true, "")}, + {0x30d9, 0, 0, 1, f(Yes, false, "ベ")}, + {0x30da, 0, 0, 1, f(Yes, false, "ペ")}, + {0x30db, 0, 0, 0, f(Yes, true, "")}, + {0x30dc, 0, 0, 1, f(Yes, false, "ボ")}, + {0x30dd, 0, 0, 1, f(Yes, false, "ポ")}, + {0x30de, 0, 0, 0, f(Yes, false, "")}, + {0x30ef, 0, 0, 0, f(Yes, true, "")}, + {0x30f3, 0, 0, 0, f(Yes, false, "")}, + {0x30f4, 0, 0, 1, f(Yes, false, "ヴ")}, + {0x30f5, 0, 0, 0, f(Yes, false, "")}, + {0x30f7, 0, 0, 1, f(Yes, false, "ヷ")}, + {0x30f8, 0, 0, 1, f(Yes, false, "ヸ")}, + {0x30f9, 0, 0, 1, f(Yes, false, "ヹ")}, + {0x30fa, 0, 0, 1, f(Yes, false, "ヺ")}, + {0x30fb, 0, 0, 0, f(Yes, false, "")}, + {0x30fd, 0, 0, 0, f(Yes, true, "")}, + {0x30fe, 0, 0, 1, f(Yes, false, "ヾ")}, + {0x30ff, 0, 0, 0, g(Yes, No, false, false, "", "コト")}, + {0x3100, 0, 0, 0, f(Yes, false, "")}, + {0x3131, 0, 0, 0, g(Yes, No, false, false, "", "ᄀ")}, + {0x3132, 0, 0, 0, g(Yes, No, false, false, "", "ᄁ")}, + {0x3133, 0, 1, 1, g(Yes, No, false, false, "", "ᆪ")}, + {0x3134, 0, 0, 0, g(Yes, No, false, false, "", "ᄂ")}, + {0x3135, 0, 1, 1, g(Yes, No, false, false, "", "ᆬ")}, + {0x3136, 0, 1, 1, g(Yes, No, false, false, "", "ᆭ")}, + {0x3137, 0, 0, 0, g(Yes, No, false, false, "", "ᄃ")}, + {0x3138, 0, 0, 0, g(Yes, No, false, false, "", "ᄄ")}, + {0x3139, 0, 0, 0, g(Yes, No, false, false, "", "ᄅ")}, + {0x313a, 0, 1, 1, g(Yes, No, false, false, "", "ᆰ")}, + {0x313b, 0, 1, 1, g(Yes, No, false, false, "", "ᆱ")}, + {0x313c, 0, 1, 1, g(Yes, No, false, false, "", "ᆲ")}, + {0x313d, 0, 1, 1, g(Yes, No, false, false, "", "ᆳ")}, + {0x313e, 0, 1, 1, g(Yes, No, false, false, "", "ᆴ")}, + {0x313f, 0, 1, 1, g(Yes, No, false, false, "", "ᆵ")}, + {0x3140, 0, 0, 0, g(Yes, No, false, false, "", "ᄚ")}, + {0x3141, 0, 0, 0, g(Yes, No, false, false, "", "ᄆ")}, + {0x3142, 0, 0, 0, g(Yes, No, false, false, "", "ᄇ")}, + {0x3143, 0, 0, 0, g(Yes, No, false, false, "", "ᄈ")}, + {0x3144, 0, 0, 0, g(Yes, No, false, false, "", "ᄡ")}, + {0x3145, 0, 0, 0, g(Yes, No, false, false, "", "ᄉ")}, + {0x3146, 0, 0, 0, g(Yes, No, false, false, "", "ᄊ")}, + {0x3147, 0, 0, 0, g(Yes, No, false, false, "", "ᄋ")}, + {0x3148, 0, 0, 0, g(Yes, No, false, false, "", "ᄌ")}, + {0x3149, 0, 0, 0, g(Yes, No, false, false, "", "ᄍ")}, + {0x314a, 0, 0, 0, g(Yes, No, false, false, "", "ᄎ")}, + {0x314b, 0, 0, 0, g(Yes, No, false, false, "", "ᄏ")}, + {0x314c, 0, 0, 0, g(Yes, No, false, false, "", "ᄐ")}, + {0x314d, 0, 0, 0, g(Yes, No, false, false, "", "ᄑ")}, + {0x314e, 0, 0, 0, g(Yes, No, false, false, "", "ᄒ")}, + {0x314f, 0, 1, 1, g(Yes, No, false, false, "", "ᅡ")}, + {0x3150, 0, 1, 1, g(Yes, No, false, false, "", "ᅢ")}, + {0x3151, 0, 1, 1, g(Yes, No, false, false, "", "ᅣ")}, + {0x3152, 0, 1, 1, g(Yes, No, false, false, "", "ᅤ")}, + {0x3153, 0, 1, 1, g(Yes, No, false, false, "", "ᅥ")}, + {0x3154, 0, 1, 1, g(Yes, No, false, false, "", "ᅦ")}, + {0x3155, 0, 1, 1, g(Yes, No, false, false, "", "ᅧ")}, + {0x3156, 0, 1, 1, g(Yes, No, false, false, "", "ᅨ")}, + {0x3157, 0, 1, 1, g(Yes, No, false, false, "", "ᅩ")}, + {0x3158, 0, 1, 1, g(Yes, No, false, false, "", "ᅪ")}, + {0x3159, 0, 1, 1, g(Yes, No, false, false, "", "ᅫ")}, + {0x315a, 0, 1, 1, g(Yes, No, false, false, "", "ᅬ")}, + {0x315b, 0, 1, 1, g(Yes, No, false, false, "", "ᅭ")}, + {0x315c, 0, 1, 1, g(Yes, No, false, false, "", "ᅮ")}, + {0x315d, 0, 1, 1, g(Yes, No, false, false, "", "ᅯ")}, + {0x315e, 0, 1, 1, g(Yes, No, false, false, "", "ᅰ")}, + {0x315f, 0, 1, 1, g(Yes, No, false, false, "", "ᅱ")}, + {0x3160, 0, 1, 1, g(Yes, No, false, false, "", "ᅲ")}, + {0x3161, 0, 1, 1, g(Yes, No, false, false, "", "ᅳ")}, + {0x3162, 0, 1, 1, g(Yes, No, false, false, "", "ᅴ")}, + {0x3163, 0, 1, 1, g(Yes, No, false, false, "", "ᅵ")}, + {0x3164, 0, 0, 0, g(Yes, No, false, false, "", "ᅠ")}, + {0x3165, 0, 0, 0, g(Yes, No, false, false, "", "ᄔ")}, + {0x3166, 0, 0, 0, g(Yes, No, false, false, "", "ᄕ")}, + {0x3167, 0, 0, 0, g(Yes, No, false, false, "", "ᇇ")}, + {0x3168, 0, 0, 0, g(Yes, No, false, false, "", "ᇈ")}, + {0x3169, 0, 0, 0, g(Yes, No, false, false, "", "ᇌ")}, + {0x316a, 0, 0, 0, g(Yes, No, false, false, "", "ᇎ")}, + {0x316b, 0, 0, 0, g(Yes, No, false, false, "", "ᇓ")}, + {0x316c, 0, 0, 0, g(Yes, No, false, false, "", "ᇗ")}, + {0x316d, 0, 0, 0, g(Yes, No, false, false, "", "ᇙ")}, + {0x316e, 0, 0, 0, g(Yes, No, false, false, "", "ᄜ")}, + {0x316f, 0, 0, 0, g(Yes, No, false, false, "", "ᇝ")}, + {0x3170, 0, 0, 0, g(Yes, No, false, false, "", "ᇟ")}, + {0x3171, 0, 0, 0, g(Yes, No, false, false, "", "ᄝ")}, + {0x3172, 0, 0, 0, g(Yes, No, false, false, "", "ᄞ")}, + {0x3173, 0, 0, 0, g(Yes, No, false, false, "", "ᄠ")}, + {0x3174, 0, 0, 0, g(Yes, No, false, false, "", "ᄢ")}, + {0x3175, 0, 0, 0, g(Yes, No, false, false, "", "ᄣ")}, + {0x3176, 0, 0, 0, g(Yes, No, false, false, "", "ᄧ")}, + {0x3177, 0, 0, 0, g(Yes, No, false, false, "", "ᄩ")}, + {0x3178, 0, 0, 0, g(Yes, No, false, false, "", "ᄫ")}, + {0x3179, 0, 0, 0, g(Yes, No, false, false, "", "ᄬ")}, + {0x317a, 0, 0, 0, g(Yes, No, false, false, "", "ᄭ")}, + {0x317b, 0, 0, 0, g(Yes, No, false, false, "", "ᄮ")}, + {0x317c, 0, 0, 0, g(Yes, No, false, false, "", "ᄯ")}, + {0x317d, 0, 0, 0, g(Yes, No, false, false, "", "ᄲ")}, + {0x317e, 0, 0, 0, g(Yes, No, false, false, "", "ᄶ")}, + {0x317f, 0, 0, 0, g(Yes, No, false, false, "", "ᅀ")}, + {0x3180, 0, 0, 0, g(Yes, No, false, false, "", "ᅇ")}, + {0x3181, 0, 0, 0, g(Yes, No, false, false, "", "ᅌ")}, + {0x3182, 0, 0, 0, g(Yes, No, false, false, "", "ᇱ")}, + {0x3183, 0, 0, 0, g(Yes, No, false, false, "", "ᇲ")}, + {0x3184, 0, 0, 0, g(Yes, No, false, false, "", "ᅗ")}, + {0x3185, 0, 0, 0, g(Yes, No, false, false, "", "ᅘ")}, + {0x3186, 0, 0, 0, g(Yes, No, false, false, "", "ᅙ")}, + {0x3187, 0, 0, 0, g(Yes, No, false, false, "", "ᆄ")}, + {0x3188, 0, 0, 0, g(Yes, No, false, false, "", "ᆅ")}, + {0x3189, 0, 0, 0, g(Yes, No, false, false, "", "ᆈ")}, + {0x318a, 0, 0, 0, g(Yes, No, false, false, "", "ᆑ")}, + {0x318b, 0, 0, 0, g(Yes, No, false, false, "", "ᆒ")}, + {0x318c, 0, 0, 0, g(Yes, No, false, false, "", "ᆔ")}, + {0x318d, 0, 0, 0, g(Yes, No, false, false, "", "ᆞ")}, + {0x318e, 0, 0, 0, g(Yes, No, false, false, "", "ᆡ")}, + {0x318f, 0, 0, 0, f(Yes, false, "")}, + {0x3192, 0, 0, 0, g(Yes, No, false, false, "", "一")}, + {0x3193, 0, 0, 0, g(Yes, No, false, false, "", "二")}, + {0x3194, 0, 0, 0, g(Yes, No, false, false, "", "三")}, + {0x3195, 0, 0, 0, g(Yes, No, false, false, "", "四")}, + {0x3196, 0, 0, 0, g(Yes, No, false, false, "", "上")}, + {0x3197, 0, 0, 0, g(Yes, No, false, false, "", "中")}, + {0x3198, 0, 0, 0, g(Yes, No, false, false, "", "下")}, + {0x3199, 0, 0, 0, g(Yes, No, false, false, "", "甲")}, + {0x319a, 0, 0, 0, g(Yes, No, false, false, "", "乙")}, + {0x319b, 0, 0, 0, g(Yes, No, false, false, "", "丙")}, + {0x319c, 0, 0, 0, g(Yes, No, false, false, "", "丁")}, + {0x319d, 0, 0, 0, g(Yes, No, false, false, "", "天")}, + {0x319e, 0, 0, 0, g(Yes, No, false, false, "", "地")}, + {0x319f, 0, 0, 0, g(Yes, No, false, false, "", "人")}, + {0x31a0, 0, 0, 0, f(Yes, false, "")}, + {0x3200, 0, 0, 0, g(Yes, No, false, false, "", "(ᄀ)")}, + {0x3201, 0, 0, 0, g(Yes, No, false, false, "", "(ᄂ)")}, + {0x3202, 0, 0, 0, g(Yes, No, false, false, "", "(ᄃ)")}, + {0x3203, 0, 0, 0, g(Yes, No, false, false, "", "(ᄅ)")}, + {0x3204, 0, 0, 0, g(Yes, No, false, false, "", "(ᄆ)")}, + {0x3205, 0, 0, 0, g(Yes, No, false, false, "", "(ᄇ)")}, + {0x3206, 0, 0, 0, g(Yes, No, false, false, "", "(ᄉ)")}, + {0x3207, 0, 0, 0, g(Yes, No, false, false, "", "(ᄋ)")}, + {0x3208, 0, 0, 0, g(Yes, No, false, false, "", "(ᄌ)")}, + {0x3209, 0, 0, 0, g(Yes, No, false, false, "", "(ᄎ)")}, + {0x320a, 0, 0, 0, g(Yes, No, false, false, "", "(ᄏ)")}, + {0x320b, 0, 0, 0, g(Yes, No, false, false, "", "(ᄐ)")}, + {0x320c, 0, 0, 0, g(Yes, No, false, false, "", "(ᄑ)")}, + {0x320d, 0, 0, 0, g(Yes, No, false, false, "", "(ᄒ)")}, + {0x320e, 0, 0, 0, g(Yes, No, false, false, "", "(가)")}, + {0x320f, 0, 0, 0, g(Yes, No, false, false, "", "(나)")}, + {0x3210, 0, 0, 0, g(Yes, No, false, false, "", "(다)")}, + {0x3211, 0, 0, 0, g(Yes, No, false, false, "", "(라)")}, + {0x3212, 0, 0, 0, g(Yes, No, false, false, "", "(마)")}, + {0x3213, 0, 0, 0, g(Yes, No, false, false, "", "(바)")}, + {0x3214, 0, 0, 0, g(Yes, No, false, false, "", "(사)")}, + {0x3215, 0, 0, 0, g(Yes, No, false, false, "", "(아)")}, + {0x3216, 0, 0, 0, g(Yes, No, false, false, "", "(자)")}, + {0x3217, 0, 0, 0, g(Yes, No, false, false, "", "(차)")}, + {0x3218, 0, 0, 0, g(Yes, No, false, false, "", "(카)")}, + {0x3219, 0, 0, 0, g(Yes, No, false, false, "", "(타)")}, + {0x321a, 0, 0, 0, g(Yes, No, false, false, "", "(파)")}, + {0x321b, 0, 0, 0, g(Yes, No, false, false, "", "(하)")}, + {0x321c, 0, 0, 0, g(Yes, No, false, false, "", "(주)")}, + {0x321d, 0, 0, 0, g(Yes, No, false, false, "", "(오전)")}, + {0x321e, 0, 0, 0, g(Yes, No, false, false, "", "(오후)")}, + {0x321f, 0, 0, 0, f(Yes, false, "")}, + {0x3220, 0, 0, 0, g(Yes, No, false, false, "", "(一)")}, + {0x3221, 0, 0, 0, g(Yes, No, false, false, "", "(二)")}, + {0x3222, 0, 0, 0, g(Yes, No, false, false, "", "(三)")}, + {0x3223, 0, 0, 0, g(Yes, No, false, false, "", "(四)")}, + {0x3224, 0, 0, 0, g(Yes, No, false, false, "", "(五)")}, + {0x3225, 0, 0, 0, g(Yes, No, false, false, "", "(六)")}, + {0x3226, 0, 0, 0, g(Yes, No, false, false, "", "(七)")}, + {0x3227, 0, 0, 0, g(Yes, No, false, false, "", "(八)")}, + {0x3228, 0, 0, 0, g(Yes, No, false, false, "", "(九)")}, + {0x3229, 0, 0, 0, g(Yes, No, false, false, "", "(十)")}, + {0x322a, 0, 0, 0, g(Yes, No, false, false, "", "(月)")}, + {0x322b, 0, 0, 0, g(Yes, No, false, false, "", "(火)")}, + {0x322c, 0, 0, 0, g(Yes, No, false, false, "", "(水)")}, + {0x322d, 0, 0, 0, g(Yes, No, false, false, "", "(木)")}, + {0x322e, 0, 0, 0, g(Yes, No, false, false, "", "(金)")}, + {0x322f, 0, 0, 0, g(Yes, No, false, false, "", "(土)")}, + {0x3230, 0, 0, 0, g(Yes, No, false, false, "", "(日)")}, + {0x3231, 0, 0, 0, g(Yes, No, false, false, "", "(株)")}, + {0x3232, 0, 0, 0, g(Yes, No, false, false, "", "(有)")}, + {0x3233, 0, 0, 0, g(Yes, No, false, false, "", "(社)")}, + {0x3234, 0, 0, 0, g(Yes, No, false, false, "", "(名)")}, + {0x3235, 0, 0, 0, g(Yes, No, false, false, "", "(特)")}, + {0x3236, 0, 0, 0, g(Yes, No, false, false, "", "(財)")}, + {0x3237, 0, 0, 0, g(Yes, No, false, false, "", "(祝)")}, + {0x3238, 0, 0, 0, g(Yes, No, false, false, "", "(労)")}, + {0x3239, 0, 0, 0, g(Yes, No, false, false, "", "(代)")}, + {0x323a, 0, 0, 0, g(Yes, No, false, false, "", "(呼)")}, + {0x323b, 0, 0, 0, g(Yes, No, false, false, "", "(学)")}, + {0x323c, 0, 0, 0, g(Yes, No, false, false, "", "(監)")}, + {0x323d, 0, 0, 0, g(Yes, No, false, false, "", "(企)")}, + {0x323e, 0, 0, 0, g(Yes, No, false, false, "", "(資)")}, + {0x323f, 0, 0, 0, g(Yes, No, false, false, "", "(協)")}, + {0x3240, 0, 0, 0, g(Yes, No, false, false, "", "(祭)")}, + {0x3241, 0, 0, 0, g(Yes, No, false, false, "", "(休)")}, + {0x3242, 0, 0, 0, g(Yes, No, false, false, "", "(自)")}, + {0x3243, 0, 0, 0, g(Yes, No, false, false, "", "(至)")}, + {0x3244, 0, 0, 0, g(Yes, No, false, false, "", "問")}, + {0x3245, 0, 0, 0, g(Yes, No, false, false, "", "幼")}, + {0x3246, 0, 0, 0, g(Yes, No, false, false, "", "文")}, + {0x3247, 0, 0, 0, g(Yes, No, false, false, "", "箏")}, + {0x3248, 0, 0, 0, f(Yes, false, "")}, + {0x3250, 0, 0, 0, g(Yes, No, false, false, "", "PTE")}, + {0x3251, 0, 0, 0, g(Yes, No, false, false, "", "21")}, + {0x3252, 0, 0, 0, g(Yes, No, false, false, "", "22")}, + {0x3253, 0, 0, 0, g(Yes, No, false, false, "", "23")}, + {0x3254, 0, 0, 0, g(Yes, No, false, false, "", "24")}, + {0x3255, 0, 0, 0, g(Yes, No, false, false, "", "25")}, + {0x3256, 0, 0, 0, g(Yes, No, false, false, "", "26")}, + {0x3257, 0, 0, 0, g(Yes, No, false, false, "", "27")}, + {0x3258, 0, 0, 0, g(Yes, No, false, false, "", "28")}, + {0x3259, 0, 0, 0, g(Yes, No, false, false, "", "29")}, + {0x325a, 0, 0, 0, g(Yes, No, false, false, "", "30")}, + {0x325b, 0, 0, 0, g(Yes, No, false, false, "", "31")}, + {0x325c, 0, 0, 0, g(Yes, No, false, false, "", "32")}, + {0x325d, 0, 0, 0, g(Yes, No, false, false, "", "33")}, + {0x325e, 0, 0, 0, g(Yes, No, false, false, "", "34")}, + {0x325f, 0, 0, 0, g(Yes, No, false, false, "", "35")}, + {0x3260, 0, 0, 0, g(Yes, No, false, false, "", "ᄀ")}, + {0x3261, 0, 0, 0, g(Yes, No, false, false, "", "ᄂ")}, + {0x3262, 0, 0, 0, g(Yes, No, false, false, "", "ᄃ")}, + {0x3263, 0, 0, 0, g(Yes, No, false, false, "", "ᄅ")}, + {0x3264, 0, 0, 0, g(Yes, No, false, false, "", "ᄆ")}, + {0x3265, 0, 0, 0, g(Yes, No, false, false, "", "ᄇ")}, + {0x3266, 0, 0, 0, g(Yes, No, false, false, "", "ᄉ")}, + {0x3267, 0, 0, 0, g(Yes, No, false, false, "", "ᄋ")}, + {0x3268, 0, 0, 0, g(Yes, No, false, false, "", "ᄌ")}, + {0x3269, 0, 0, 0, g(Yes, No, false, false, "", "ᄎ")}, + {0x326a, 0, 0, 0, g(Yes, No, false, false, "", "ᄏ")}, + {0x326b, 0, 0, 0, g(Yes, No, false, false, "", "ᄐ")}, + {0x326c, 0, 0, 0, g(Yes, No, false, false, "", "ᄑ")}, + {0x326d, 0, 0, 0, g(Yes, No, false, false, "", "ᄒ")}, + {0x326e, 0, 0, 1, g(Yes, No, false, false, "", "가")}, + {0x326f, 0, 0, 1, g(Yes, No, false, false, "", "나")}, + {0x3270, 0, 0, 1, g(Yes, No, false, false, "", "다")}, + {0x3271, 0, 0, 1, g(Yes, No, false, false, "", "라")}, + {0x3272, 0, 0, 1, g(Yes, No, false, false, "", "마")}, + {0x3273, 0, 0, 1, g(Yes, No, false, false, "", "바")}, + {0x3274, 0, 0, 1, g(Yes, No, false, false, "", "사")}, + {0x3275, 0, 0, 1, g(Yes, No, false, false, "", "아")}, + {0x3276, 0, 0, 1, g(Yes, No, false, false, "", "자")}, + {0x3277, 0, 0, 1, g(Yes, No, false, false, "", "차")}, + {0x3278, 0, 0, 1, g(Yes, No, false, false, "", "카")}, + {0x3279, 0, 0, 1, g(Yes, No, false, false, "", "타")}, + {0x327a, 0, 0, 1, g(Yes, No, false, false, "", "파")}, + {0x327b, 0, 0, 1, g(Yes, No, false, false, "", "하")}, + {0x327c, 0, 0, 1, g(Yes, No, false, false, "", "참고")}, + {0x327d, 0, 0, 1, g(Yes, No, false, false, "", "주의")}, + {0x327e, 0, 0, 1, g(Yes, No, false, false, "", "우")}, + {0x327f, 0, 0, 0, f(Yes, false, "")}, + {0x3280, 0, 0, 0, g(Yes, No, false, false, "", "一")}, + {0x3281, 0, 0, 0, g(Yes, No, false, false, "", "二")}, + {0x3282, 0, 0, 0, g(Yes, No, false, false, "", "三")}, + {0x3283, 0, 0, 0, g(Yes, No, false, false, "", "四")}, + {0x3284, 0, 0, 0, g(Yes, No, false, false, "", "五")}, + {0x3285, 0, 0, 0, g(Yes, No, false, false, "", "六")}, + {0x3286, 0, 0, 0, g(Yes, No, false, false, "", "七")}, + {0x3287, 0, 0, 0, g(Yes, No, false, false, "", "八")}, + {0x3288, 0, 0, 0, g(Yes, No, false, false, "", "九")}, + {0x3289, 0, 0, 0, g(Yes, No, false, false, "", "十")}, + {0x328a, 0, 0, 0, g(Yes, No, false, false, "", "月")}, + {0x328b, 0, 0, 0, g(Yes, No, false, false, "", "火")}, + {0x328c, 0, 0, 0, g(Yes, No, false, false, "", "水")}, + {0x328d, 0, 0, 0, g(Yes, No, false, false, "", "木")}, + {0x328e, 0, 0, 0, g(Yes, No, false, false, "", "金")}, + {0x328f, 0, 0, 0, g(Yes, No, false, false, "", "土")}, + {0x3290, 0, 0, 0, g(Yes, No, false, false, "", "日")}, + {0x3291, 0, 0, 0, g(Yes, No, false, false, "", "株")}, + {0x3292, 0, 0, 0, g(Yes, No, false, false, "", "有")}, + {0x3293, 0, 0, 0, g(Yes, No, false, false, "", "社")}, + {0x3294, 0, 0, 0, g(Yes, No, false, false, "", "名")}, + {0x3295, 0, 0, 0, g(Yes, No, false, false, "", "特")}, + {0x3296, 0, 0, 0, g(Yes, No, false, false, "", "財")}, + {0x3297, 0, 0, 0, g(Yes, No, false, false, "", "祝")}, + {0x3298, 0, 0, 0, g(Yes, No, false, false, "", "労")}, + {0x3299, 0, 0, 0, g(Yes, No, false, false, "", "秘")}, + {0x329a, 0, 0, 0, g(Yes, No, false, false, "", "男")}, + {0x329b, 0, 0, 0, g(Yes, No, false, false, "", "女")}, + {0x329c, 0, 0, 0, g(Yes, No, false, false, "", "適")}, + {0x329d, 0, 0, 0, g(Yes, No, false, false, "", "優")}, + {0x329e, 0, 0, 0, g(Yes, No, false, false, "", "印")}, + {0x329f, 0, 0, 0, g(Yes, No, false, false, "", "注")}, + {0x32a0, 0, 0, 0, g(Yes, No, false, false, "", "項")}, + {0x32a1, 0, 0, 0, g(Yes, No, false, false, "", "休")}, + {0x32a2, 0, 0, 0, g(Yes, No, false, false, "", "写")}, + {0x32a3, 0, 0, 0, g(Yes, No, false, false, "", "正")}, + {0x32a4, 0, 0, 0, g(Yes, No, false, false, "", "上")}, + {0x32a5, 0, 0, 0, g(Yes, No, false, false, "", "中")}, + {0x32a6, 0, 0, 0, g(Yes, No, false, false, "", "下")}, + {0x32a7, 0, 0, 0, g(Yes, No, false, false, "", "左")}, + {0x32a8, 0, 0, 0, g(Yes, No, false, false, "", "右")}, + {0x32a9, 0, 0, 0, g(Yes, No, false, false, "", "医")}, + {0x32aa, 0, 0, 0, g(Yes, No, false, false, "", "宗")}, + {0x32ab, 0, 0, 0, g(Yes, No, false, false, "", "学")}, + {0x32ac, 0, 0, 0, g(Yes, No, false, false, "", "監")}, + {0x32ad, 0, 0, 0, g(Yes, No, false, false, "", "企")}, + {0x32ae, 0, 0, 0, g(Yes, No, false, false, "", "資")}, + {0x32af, 0, 0, 0, g(Yes, No, false, false, "", "協")}, + {0x32b0, 0, 0, 0, g(Yes, No, false, false, "", "夜")}, + {0x32b1, 0, 0, 0, g(Yes, No, false, false, "", "36")}, + {0x32b2, 0, 0, 0, g(Yes, No, false, false, "", "37")}, + {0x32b3, 0, 0, 0, g(Yes, No, false, false, "", "38")}, + {0x32b4, 0, 0, 0, g(Yes, No, false, false, "", "39")}, + {0x32b5, 0, 0, 0, g(Yes, No, false, false, "", "40")}, + {0x32b6, 0, 0, 0, g(Yes, No, false, false, "", "41")}, + {0x32b7, 0, 0, 0, g(Yes, No, false, false, "", "42")}, + {0x32b8, 0, 0, 0, g(Yes, No, false, false, "", "43")}, + {0x32b9, 0, 0, 0, g(Yes, No, false, false, "", "44")}, + {0x32ba, 0, 0, 0, g(Yes, No, false, false, "", "45")}, + {0x32bb, 0, 0, 0, g(Yes, No, false, false, "", "46")}, + {0x32bc, 0, 0, 0, g(Yes, No, false, false, "", "47")}, + {0x32bd, 0, 0, 0, g(Yes, No, false, false, "", "48")}, + {0x32be, 0, 0, 0, g(Yes, No, false, false, "", "49")}, + {0x32bf, 0, 0, 0, g(Yes, No, false, false, "", "50")}, + {0x32c0, 0, 0, 0, g(Yes, No, false, false, "", "1月")}, + {0x32c1, 0, 0, 0, g(Yes, No, false, false, "", "2月")}, + {0x32c2, 0, 0, 0, g(Yes, No, false, false, "", "3月")}, + {0x32c3, 0, 0, 0, g(Yes, No, false, false, "", "4月")}, + {0x32c4, 0, 0, 0, g(Yes, No, false, false, "", "5月")}, + {0x32c5, 0, 0, 0, g(Yes, No, false, false, "", "6月")}, + {0x32c6, 0, 0, 0, g(Yes, No, false, false, "", "7月")}, + {0x32c7, 0, 0, 0, g(Yes, No, false, false, "", "8月")}, + {0x32c8, 0, 0, 0, g(Yes, No, false, false, "", "9月")}, + {0x32c9, 0, 0, 0, g(Yes, No, false, false, "", "10月")}, + {0x32ca, 0, 0, 0, g(Yes, No, false, false, "", "11月")}, + {0x32cb, 0, 0, 0, g(Yes, No, false, false, "", "12月")}, + {0x32cc, 0, 0, 0, g(Yes, No, false, false, "", "Hg")}, + {0x32cd, 0, 0, 0, g(Yes, No, false, false, "", "erg")}, + {0x32ce, 0, 0, 0, g(Yes, No, false, false, "", "eV")}, + {0x32cf, 0, 0, 0, g(Yes, No, false, false, "", "LTD")}, + {0x32d0, 0, 0, 0, g(Yes, No, false, false, "", "ア")}, + {0x32d1, 0, 0, 0, g(Yes, No, false, false, "", "イ")}, + {0x32d2, 0, 0, 0, g(Yes, No, false, false, "", "ウ")}, + {0x32d3, 0, 0, 0, g(Yes, No, false, false, "", "エ")}, + {0x32d4, 0, 0, 0, g(Yes, No, false, false, "", "オ")}, + {0x32d5, 0, 0, 0, g(Yes, No, false, false, "", "カ")}, + {0x32d6, 0, 0, 0, g(Yes, No, false, false, "", "キ")}, + {0x32d7, 0, 0, 0, g(Yes, No, false, false, "", "ク")}, + {0x32d8, 0, 0, 0, g(Yes, No, false, false, "", "ケ")}, + {0x32d9, 0, 0, 0, g(Yes, No, false, false, "", "コ")}, + {0x32da, 0, 0, 0, g(Yes, No, false, false, "", "サ")}, + {0x32db, 0, 0, 0, g(Yes, No, false, false, "", "シ")}, + {0x32dc, 0, 0, 0, g(Yes, No, false, false, "", "ス")}, + {0x32dd, 0, 0, 0, g(Yes, No, false, false, "", "セ")}, + {0x32de, 0, 0, 0, g(Yes, No, false, false, "", "ソ")}, + {0x32df, 0, 0, 0, g(Yes, No, false, false, "", "タ")}, + {0x32e0, 0, 0, 0, g(Yes, No, false, false, "", "チ")}, + {0x32e1, 0, 0, 0, g(Yes, No, false, false, "", "ツ")}, + {0x32e2, 0, 0, 0, g(Yes, No, false, false, "", "テ")}, + {0x32e3, 0, 0, 0, g(Yes, No, false, false, "", "ト")}, + {0x32e4, 0, 0, 0, g(Yes, No, false, false, "", "ナ")}, + {0x32e5, 0, 0, 0, g(Yes, No, false, false, "", "ニ")}, + {0x32e6, 0, 0, 0, g(Yes, No, false, false, "", "ヌ")}, + {0x32e7, 0, 0, 0, g(Yes, No, false, false, "", "ネ")}, + {0x32e8, 0, 0, 0, g(Yes, No, false, false, "", "ノ")}, + {0x32e9, 0, 0, 0, g(Yes, No, false, false, "", "ハ")}, + {0x32ea, 0, 0, 0, g(Yes, No, false, false, "", "ヒ")}, + {0x32eb, 0, 0, 0, g(Yes, No, false, false, "", "フ")}, + {0x32ec, 0, 0, 0, g(Yes, No, false, false, "", "ヘ")}, + {0x32ed, 0, 0, 0, g(Yes, No, false, false, "", "ホ")}, + {0x32ee, 0, 0, 0, g(Yes, No, false, false, "", "マ")}, + {0x32ef, 0, 0, 0, g(Yes, No, false, false, "", "ミ")}, + {0x32f0, 0, 0, 0, g(Yes, No, false, false, "", "ム")}, + {0x32f1, 0, 0, 0, g(Yes, No, false, false, "", "メ")}, + {0x32f2, 0, 0, 0, g(Yes, No, false, false, "", "モ")}, + {0x32f3, 0, 0, 0, g(Yes, No, false, false, "", "ヤ")}, + {0x32f4, 0, 0, 0, g(Yes, No, false, false, "", "ユ")}, + {0x32f5, 0, 0, 0, g(Yes, No, false, false, "", "ヨ")}, + {0x32f6, 0, 0, 0, g(Yes, No, false, false, "", "ラ")}, + {0x32f7, 0, 0, 0, g(Yes, No, false, false, "", "リ")}, + {0x32f8, 0, 0, 0, g(Yes, No, false, false, "", "ル")}, + {0x32f9, 0, 0, 0, g(Yes, No, false, false, "", "レ")}, + {0x32fa, 0, 0, 0, g(Yes, No, false, false, "", "ロ")}, + {0x32fb, 0, 0, 0, g(Yes, No, false, false, "", "ワ")}, + {0x32fc, 0, 0, 0, g(Yes, No, false, false, "", "ヰ")}, + {0x32fd, 0, 0, 0, g(Yes, No, false, false, "", "ヱ")}, + {0x32fe, 0, 0, 0, g(Yes, No, false, false, "", "ヲ")}, + {0x32ff, 0, 0, 0, f(Yes, false, "")}, + {0x3300, 0, 0, 0, g(Yes, No, false, false, "", "アパート")}, + {0x3301, 0, 0, 0, g(Yes, No, false, false, "", "アルファ")}, + {0x3302, 0, 0, 0, g(Yes, No, false, false, "", "アンペア")}, + {0x3303, 0, 0, 0, g(Yes, No, false, false, "", "アール")}, + {0x3304, 0, 0, 1, g(Yes, No, false, false, "", "イニング")}, + {0x3305, 0, 0, 0, g(Yes, No, false, false, "", "インチ")}, + {0x3306, 0, 0, 0, g(Yes, No, false, false, "", "ウォン")}, + {0x3307, 0, 0, 1, g(Yes, No, false, false, "", "エスクード")}, + {0x3308, 0, 0, 0, g(Yes, No, false, false, "", "エーカー")}, + {0x3309, 0, 0, 0, g(Yes, No, false, false, "", "オンス")}, + {0x330a, 0, 0, 0, g(Yes, No, false, false, "", "オーム")}, + {0x330b, 0, 0, 0, g(Yes, No, false, false, "", "カイリ")}, + {0x330c, 0, 0, 0, g(Yes, No, false, false, "", "カラット")}, + {0x330d, 0, 0, 0, g(Yes, No, false, false, "", "カロリー")}, + {0x330e, 0, 0, 0, g(Yes, No, false, false, "", "ガロン")}, + {0x330f, 0, 0, 0, g(Yes, No, false, false, "", "ガンマ")}, + {0x3310, 0, 0, 1, g(Yes, No, false, false, "", "ギガ")}, + {0x3311, 0, 0, 0, g(Yes, No, false, false, "", "ギニー")}, + {0x3312, 0, 0, 0, g(Yes, No, false, false, "", "キュリー")}, + {0x3313, 0, 0, 0, g(Yes, No, false, false, "", "ギルダー")}, + {0x3314, 0, 0, 0, g(Yes, No, false, false, "", "キロ")}, + {0x3315, 0, 0, 0, g(Yes, No, false, false, "", "キログラム")}, + {0x3316, 0, 0, 0, g(Yes, No, false, false, "", "キロメートル")}, + {0x3317, 0, 0, 0, g(Yes, No, false, false, "", "キロワット")}, + {0x3318, 0, 0, 0, g(Yes, No, false, false, "", "グラム")}, + {0x3319, 0, 0, 0, g(Yes, No, false, false, "", "グラムトン")}, + {0x331a, 0, 0, 0, g(Yes, No, false, false, "", "クルゼイロ")}, + {0x331b, 0, 0, 0, g(Yes, No, false, false, "", "クローネ")}, + {0x331c, 0, 0, 0, g(Yes, No, false, false, "", "ケース")}, + {0x331d, 0, 0, 0, g(Yes, No, false, false, "", "コルナ")}, + {0x331e, 0, 0, 1, g(Yes, No, false, false, "", "コーポ")}, + {0x331f, 0, 0, 0, g(Yes, No, false, false, "", "サイクル")}, + {0x3320, 0, 0, 0, g(Yes, No, false, false, "", "サンチーム")}, + {0x3321, 0, 0, 1, g(Yes, No, false, false, "", "シリング")}, + {0x3322, 0, 0, 0, g(Yes, No, false, false, "", "センチ")}, + {0x3323, 0, 0, 0, g(Yes, No, false, false, "", "セント")}, + {0x3324, 0, 0, 0, g(Yes, No, false, false, "", "ダース")}, + {0x3325, 0, 0, 0, g(Yes, No, false, false, "", "デシ")}, + {0x3326, 0, 0, 0, g(Yes, No, false, false, "", "ドル")}, + {0x3327, 0, 0, 0, g(Yes, No, false, false, "", "トン")}, + {0x3328, 0, 0, 0, g(Yes, No, false, false, "", "ナノ")}, + {0x3329, 0, 0, 0, g(Yes, No, false, false, "", "ノット")}, + {0x332a, 0, 0, 0, g(Yes, No, false, false, "", "ハイツ")}, + {0x332b, 0, 0, 0, g(Yes, No, false, false, "", "パーセント")}, + {0x332c, 0, 0, 0, g(Yes, No, false, false, "", "パーツ")}, + {0x332d, 0, 0, 0, g(Yes, No, false, false, "", "バーレル")}, + {0x332e, 0, 0, 0, g(Yes, No, false, false, "", "ピアストル")}, + {0x332f, 0, 0, 0, g(Yes, No, false, false, "", "ピクル")}, + {0x3330, 0, 0, 0, g(Yes, No, false, false, "", "ピコ")}, + {0x3331, 0, 0, 0, g(Yes, No, false, false, "", "ビル")}, + {0x3332, 0, 0, 1, g(Yes, No, false, false, "", "ファラッド")}, + {0x3333, 0, 0, 0, g(Yes, No, false, false, "", "フィート")}, + {0x3334, 0, 0, 0, g(Yes, No, false, false, "", "ブッシェル")}, + {0x3335, 0, 0, 0, g(Yes, No, false, false, "", "フラン")}, + {0x3336, 0, 0, 0, g(Yes, No, false, false, "", "ヘクタール")}, + {0x3337, 0, 0, 0, g(Yes, No, false, false, "", "ペソ")}, + {0x3338, 0, 0, 0, g(Yes, No, false, false, "", "ペニヒ")}, + {0x3339, 0, 0, 0, g(Yes, No, false, false, "", "ヘルツ")}, + {0x333a, 0, 0, 0, g(Yes, No, false, false, "", "ペンス")}, + {0x333b, 0, 0, 1, g(Yes, No, false, false, "", "ページ")}, + {0x333c, 0, 0, 0, g(Yes, No, false, false, "", "ベータ")}, + {0x333d, 0, 0, 0, g(Yes, No, false, false, "", "ポイント")}, + {0x333e, 0, 0, 0, g(Yes, No, false, false, "", "ボルト")}, + {0x333f, 0, 0, 0, g(Yes, No, false, false, "", "ホン")}, + {0x3340, 0, 0, 1, g(Yes, No, false, false, "", "ポンド")}, + {0x3341, 0, 0, 0, g(Yes, No, false, false, "", "ホール")}, + {0x3342, 0, 0, 0, g(Yes, No, false, false, "", "ホーン")}, + {0x3343, 0, 0, 0, g(Yes, No, false, false, "", "マイクロ")}, + {0x3344, 0, 0, 0, g(Yes, No, false, false, "", "マイル")}, + {0x3345, 0, 0, 0, g(Yes, No, false, false, "", "マッハ")}, + {0x3346, 0, 0, 0, g(Yes, No, false, false, "", "マルク")}, + {0x3347, 0, 0, 0, g(Yes, No, false, false, "", "マンション")}, + {0x3348, 0, 0, 0, g(Yes, No, false, false, "", "ミクロン")}, + {0x3349, 0, 0, 0, g(Yes, No, false, false, "", "ミリ")}, + {0x334a, 0, 0, 0, g(Yes, No, false, false, "", "ミリバール")}, + {0x334b, 0, 0, 1, g(Yes, No, false, false, "", "メガ")}, + {0x334c, 0, 0, 0, g(Yes, No, false, false, "", "メガトン")}, + {0x334d, 0, 0, 0, g(Yes, No, false, false, "", "メートル")}, + {0x334e, 0, 0, 1, g(Yes, No, false, false, "", "ヤード")}, + {0x334f, 0, 0, 0, g(Yes, No, false, false, "", "ヤール")}, + {0x3350, 0, 0, 0, g(Yes, No, false, false, "", "ユアン")}, + {0x3351, 0, 0, 0, g(Yes, No, false, false, "", "リットル")}, + {0x3352, 0, 0, 0, g(Yes, No, false, false, "", "リラ")}, + {0x3353, 0, 0, 0, g(Yes, No, false, false, "", "ルピー")}, + {0x3354, 0, 0, 0, g(Yes, No, false, false, "", "ルーブル")}, + {0x3355, 0, 0, 0, g(Yes, No, false, false, "", "レム")}, + {0x3356, 0, 0, 0, g(Yes, No, false, false, "", "レントゲン")}, + {0x3357, 0, 0, 0, g(Yes, No, false, false, "", "ワット")}, + {0x3358, 0, 0, 0, g(Yes, No, false, false, "", "0点")}, + {0x3359, 0, 0, 0, g(Yes, No, false, false, "", "1点")}, + {0x335a, 0, 0, 0, g(Yes, No, false, false, "", "2点")}, + {0x335b, 0, 0, 0, g(Yes, No, false, false, "", "3点")}, + {0x335c, 0, 0, 0, g(Yes, No, false, false, "", "4点")}, + {0x335d, 0, 0, 0, g(Yes, No, false, false, "", "5点")}, + {0x335e, 0, 0, 0, g(Yes, No, false, false, "", "6点")}, + {0x335f, 0, 0, 0, g(Yes, No, false, false, "", "7点")}, + {0x3360, 0, 0, 0, g(Yes, No, false, false, "", "8点")}, + {0x3361, 0, 0, 0, g(Yes, No, false, false, "", "9点")}, + {0x3362, 0, 0, 0, g(Yes, No, false, false, "", "10点")}, + {0x3363, 0, 0, 0, g(Yes, No, false, false, "", "11点")}, + {0x3364, 0, 0, 0, g(Yes, No, false, false, "", "12点")}, + {0x3365, 0, 0, 0, g(Yes, No, false, false, "", "13点")}, + {0x3366, 0, 0, 0, g(Yes, No, false, false, "", "14点")}, + {0x3367, 0, 0, 0, g(Yes, No, false, false, "", "15点")}, + {0x3368, 0, 0, 0, g(Yes, No, false, false, "", "16点")}, + {0x3369, 0, 0, 0, g(Yes, No, false, false, "", "17点")}, + {0x336a, 0, 0, 0, g(Yes, No, false, false, "", "18点")}, + {0x336b, 0, 0, 0, g(Yes, No, false, false, "", "19点")}, + {0x336c, 0, 0, 0, g(Yes, No, false, false, "", "20点")}, + {0x336d, 0, 0, 0, g(Yes, No, false, false, "", "21点")}, + {0x336e, 0, 0, 0, g(Yes, No, false, false, "", "22点")}, + {0x336f, 0, 0, 0, g(Yes, No, false, false, "", "23点")}, + {0x3370, 0, 0, 0, g(Yes, No, false, false, "", "24点")}, + {0x3371, 0, 0, 0, g(Yes, No, false, false, "", "hPa")}, + {0x3372, 0, 0, 0, g(Yes, No, false, false, "", "da")}, + {0x3373, 0, 0, 0, g(Yes, No, false, false, "", "AU")}, + {0x3374, 0, 0, 0, g(Yes, No, false, false, "", "bar")}, + {0x3375, 0, 0, 0, g(Yes, No, false, false, "", "oV")}, + {0x3376, 0, 0, 0, g(Yes, No, false, false, "", "pc")}, + {0x3377, 0, 0, 0, g(Yes, No, false, false, "", "dm")}, + {0x3378, 0, 0, 0, g(Yes, No, false, false, "", "dm2")}, + {0x3379, 0, 0, 0, g(Yes, No, false, false, "", "dm3")}, + {0x337a, 0, 0, 0, g(Yes, No, false, false, "", "IU")}, + {0x337b, 0, 0, 0, g(Yes, No, false, false, "", "平成")}, + {0x337c, 0, 0, 0, g(Yes, No, false, false, "", "昭和")}, + {0x337d, 0, 0, 0, g(Yes, No, false, false, "", "大正")}, + {0x337e, 0, 0, 0, g(Yes, No, false, false, "", "明治")}, + {0x337f, 0, 0, 0, g(Yes, No, false, false, "", "株式会社")}, + {0x3380, 0, 0, 0, g(Yes, No, false, false, "", "pA")}, + {0x3381, 0, 0, 0, g(Yes, No, false, false, "", "nA")}, + {0x3382, 0, 0, 0, g(Yes, No, false, false, "", "μA")}, + {0x3383, 0, 0, 0, g(Yes, No, false, false, "", "mA")}, + {0x3384, 0, 0, 0, g(Yes, No, false, false, "", "kA")}, + {0x3385, 0, 0, 0, g(Yes, No, false, false, "", "KB")}, + {0x3386, 0, 0, 0, g(Yes, No, false, false, "", "MB")}, + {0x3387, 0, 0, 0, g(Yes, No, false, false, "", "GB")}, + {0x3388, 0, 0, 0, g(Yes, No, false, false, "", "cal")}, + {0x3389, 0, 0, 0, g(Yes, No, false, false, "", "kcal")}, + {0x338a, 0, 0, 0, g(Yes, No, false, false, "", "pF")}, + {0x338b, 0, 0, 0, g(Yes, No, false, false, "", "nF")}, + {0x338c, 0, 0, 0, g(Yes, No, false, false, "", "μF")}, + {0x338d, 0, 0, 0, g(Yes, No, false, false, "", "μg")}, + {0x338e, 0, 0, 0, g(Yes, No, false, false, "", "mg")}, + {0x338f, 0, 0, 0, g(Yes, No, false, false, "", "kg")}, + {0x3390, 0, 0, 0, g(Yes, No, false, false, "", "Hz")}, + {0x3391, 0, 0, 0, g(Yes, No, false, false, "", "kHz")}, + {0x3392, 0, 0, 0, g(Yes, No, false, false, "", "MHz")}, + {0x3393, 0, 0, 0, g(Yes, No, false, false, "", "GHz")}, + {0x3394, 0, 0, 0, g(Yes, No, false, false, "", "THz")}, + {0x3395, 0, 0, 0, g(Yes, No, false, false, "", "μl")}, + {0x3396, 0, 0, 0, g(Yes, No, false, false, "", "ml")}, + {0x3397, 0, 0, 0, g(Yes, No, false, false, "", "dl")}, + {0x3398, 0, 0, 0, g(Yes, No, false, false, "", "kl")}, + {0x3399, 0, 0, 0, g(Yes, No, false, false, "", "fm")}, + {0x339a, 0, 0, 0, g(Yes, No, false, false, "", "nm")}, + {0x339b, 0, 0, 0, g(Yes, No, false, false, "", "μm")}, + {0x339c, 0, 0, 0, g(Yes, No, false, false, "", "mm")}, + {0x339d, 0, 0, 0, g(Yes, No, false, false, "", "cm")}, + {0x339e, 0, 0, 0, g(Yes, No, false, false, "", "km")}, + {0x339f, 0, 0, 0, g(Yes, No, false, false, "", "mm2")}, + {0x33a0, 0, 0, 0, g(Yes, No, false, false, "", "cm2")}, + {0x33a1, 0, 0, 0, g(Yes, No, false, false, "", "m2")}, + {0x33a2, 0, 0, 0, g(Yes, No, false, false, "", "km2")}, + {0x33a3, 0, 0, 0, g(Yes, No, false, false, "", "mm3")}, + {0x33a4, 0, 0, 0, g(Yes, No, false, false, "", "cm3")}, + {0x33a5, 0, 0, 0, g(Yes, No, false, false, "", "m3")}, + {0x33a6, 0, 0, 0, g(Yes, No, false, false, "", "km3")}, + {0x33a7, 0, 0, 0, g(Yes, No, false, false, "", "m∕s")}, + {0x33a8, 0, 0, 0, g(Yes, No, false, false, "", "m∕s2")}, + {0x33a9, 0, 0, 0, g(Yes, No, false, false, "", "Pa")}, + {0x33aa, 0, 0, 0, g(Yes, No, false, false, "", "kPa")}, + {0x33ab, 0, 0, 0, g(Yes, No, false, false, "", "MPa")}, + {0x33ac, 0, 0, 0, g(Yes, No, false, false, "", "GPa")}, + {0x33ad, 0, 0, 0, g(Yes, No, false, false, "", "rad")}, + {0x33ae, 0, 0, 0, g(Yes, No, false, false, "", "rad∕s")}, + {0x33af, 0, 0, 0, g(Yes, No, false, false, "", "rad∕s2")}, + {0x33b0, 0, 0, 0, g(Yes, No, false, false, "", "ps")}, + {0x33b1, 0, 0, 0, g(Yes, No, false, false, "", "ns")}, + {0x33b2, 0, 0, 0, g(Yes, No, false, false, "", "μs")}, + {0x33b3, 0, 0, 0, g(Yes, No, false, false, "", "ms")}, + {0x33b4, 0, 0, 0, g(Yes, No, false, false, "", "pV")}, + {0x33b5, 0, 0, 0, g(Yes, No, false, false, "", "nV")}, + {0x33b6, 0, 0, 0, g(Yes, No, false, false, "", "μV")}, + {0x33b7, 0, 0, 0, g(Yes, No, false, false, "", "mV")}, + {0x33b8, 0, 0, 0, g(Yes, No, false, false, "", "kV")}, + {0x33b9, 0, 0, 0, g(Yes, No, false, false, "", "MV")}, + {0x33ba, 0, 0, 0, g(Yes, No, false, false, "", "pW")}, + {0x33bb, 0, 0, 0, g(Yes, No, false, false, "", "nW")}, + {0x33bc, 0, 0, 0, g(Yes, No, false, false, "", "μW")}, + {0x33bd, 0, 0, 0, g(Yes, No, false, false, "", "mW")}, + {0x33be, 0, 0, 0, g(Yes, No, false, false, "", "kW")}, + {0x33bf, 0, 0, 0, g(Yes, No, false, false, "", "MW")}, + {0x33c0, 0, 0, 0, g(Yes, No, false, false, "", "kΩ")}, + {0x33c1, 0, 0, 0, g(Yes, No, false, false, "", "MΩ")}, + {0x33c2, 0, 0, 0, g(Yes, No, false, false, "", "a.m.")}, + {0x33c3, 0, 0, 0, g(Yes, No, false, false, "", "Bq")}, + {0x33c4, 0, 0, 0, g(Yes, No, false, false, "", "cc")}, + {0x33c5, 0, 0, 0, g(Yes, No, false, false, "", "cd")}, + {0x33c6, 0, 0, 0, g(Yes, No, false, false, "", "C∕kg")}, + {0x33c7, 0, 0, 0, g(Yes, No, false, false, "", "Co.")}, + {0x33c8, 0, 0, 0, g(Yes, No, false, false, "", "dB")}, + {0x33c9, 0, 0, 0, g(Yes, No, false, false, "", "Gy")}, + {0x33ca, 0, 0, 0, g(Yes, No, false, false, "", "ha")}, + {0x33cb, 0, 0, 0, g(Yes, No, false, false, "", "HP")}, + {0x33cc, 0, 0, 0, g(Yes, No, false, false, "", "in")}, + {0x33cd, 0, 0, 0, g(Yes, No, false, false, "", "KK")}, + {0x33ce, 0, 0, 0, g(Yes, No, false, false, "", "KM")}, + {0x33cf, 0, 0, 0, g(Yes, No, false, false, "", "kt")}, + {0x33d0, 0, 0, 0, g(Yes, No, false, false, "", "lm")}, + {0x33d1, 0, 0, 0, g(Yes, No, false, false, "", "ln")}, + {0x33d2, 0, 0, 0, g(Yes, No, false, false, "", "log")}, + {0x33d3, 0, 0, 0, g(Yes, No, false, false, "", "lx")}, + {0x33d4, 0, 0, 0, g(Yes, No, false, false, "", "mb")}, + {0x33d5, 0, 0, 0, g(Yes, No, false, false, "", "mil")}, + {0x33d6, 0, 0, 0, g(Yes, No, false, false, "", "mol")}, + {0x33d7, 0, 0, 0, g(Yes, No, false, false, "", "PH")}, + {0x33d8, 0, 0, 0, g(Yes, No, false, false, "", "p.m.")}, + {0x33d9, 0, 0, 0, g(Yes, No, false, false, "", "PPM")}, + {0x33da, 0, 0, 0, g(Yes, No, false, false, "", "PR")}, + {0x33db, 0, 0, 0, g(Yes, No, false, false, "", "sr")}, + {0x33dc, 0, 0, 0, g(Yes, No, false, false, "", "Sv")}, + {0x33dd, 0, 0, 0, g(Yes, No, false, false, "", "Wb")}, + {0x33de, 0, 0, 0, g(Yes, No, false, false, "", "V∕m")}, + {0x33df, 0, 0, 0, g(Yes, No, false, false, "", "A∕m")}, + {0x33e0, 0, 0, 0, g(Yes, No, false, false, "", "1日")}, + {0x33e1, 0, 0, 0, g(Yes, No, false, false, "", "2日")}, + {0x33e2, 0, 0, 0, g(Yes, No, false, false, "", "3日")}, + {0x33e3, 0, 0, 0, g(Yes, No, false, false, "", "4日")}, + {0x33e4, 0, 0, 0, g(Yes, No, false, false, "", "5日")}, + {0x33e5, 0, 0, 0, g(Yes, No, false, false, "", "6日")}, + {0x33e6, 0, 0, 0, g(Yes, No, false, false, "", "7日")}, + {0x33e7, 0, 0, 0, g(Yes, No, false, false, "", "8日")}, + {0x33e8, 0, 0, 0, g(Yes, No, false, false, "", "9日")}, + {0x33e9, 0, 0, 0, g(Yes, No, false, false, "", "10日")}, + {0x33ea, 0, 0, 0, g(Yes, No, false, false, "", "11日")}, + {0x33eb, 0, 0, 0, g(Yes, No, false, false, "", "12日")}, + {0x33ec, 0, 0, 0, g(Yes, No, false, false, "", "13日")}, + {0x33ed, 0, 0, 0, g(Yes, No, false, false, "", "14日")}, + {0x33ee, 0, 0, 0, g(Yes, No, false, false, "", "15日")}, + {0x33ef, 0, 0, 0, g(Yes, No, false, false, "", "16日")}, + {0x33f0, 0, 0, 0, g(Yes, No, false, false, "", "17日")}, + {0x33f1, 0, 0, 0, g(Yes, No, false, false, "", "18日")}, + {0x33f2, 0, 0, 0, g(Yes, No, false, false, "", "19日")}, + {0x33f3, 0, 0, 0, g(Yes, No, false, false, "", "20日")}, + {0x33f4, 0, 0, 0, g(Yes, No, false, false, "", "21日")}, + {0x33f5, 0, 0, 0, g(Yes, No, false, false, "", "22日")}, + {0x33f6, 0, 0, 0, g(Yes, No, false, false, "", "23日")}, + {0x33f7, 0, 0, 0, g(Yes, No, false, false, "", "24日")}, + {0x33f8, 0, 0, 0, g(Yes, No, false, false, "", "25日")}, + {0x33f9, 0, 0, 0, g(Yes, No, false, false, "", "26日")}, + {0x33fa, 0, 0, 0, g(Yes, No, false, false, "", "27日")}, + {0x33fb, 0, 0, 0, g(Yes, No, false, false, "", "28日")}, + {0x33fc, 0, 0, 0, g(Yes, No, false, false, "", "29日")}, + {0x33fd, 0, 0, 0, g(Yes, No, false, false, "", "30日")}, + {0x33fe, 0, 0, 0, g(Yes, No, false, false, "", "31日")}, + {0x33ff, 0, 0, 0, g(Yes, No, false, false, "", "gal")}, + {0x3400, 0, 0, 0, f(Yes, false, "")}, + {0xa66f, 230, 1, 1, f(Yes, false, "")}, + {0xa670, 0, 0, 0, f(Yes, false, "")}, + {0xa674, 230, 1, 1, f(Yes, false, "")}, + {0xa67e, 0, 0, 0, f(Yes, false, "")}, + {0xa69c, 0, 0, 0, g(Yes, No, false, false, "", "ъ")}, + {0xa69d, 0, 0, 0, g(Yes, No, false, false, "", "ь")}, + {0xa69e, 230, 1, 1, f(Yes, false, "")}, + {0xa6a0, 0, 0, 0, f(Yes, false, "")}, + {0xa6f0, 230, 1, 1, f(Yes, false, "")}, + {0xa6f2, 0, 0, 0, f(Yes, false, "")}, + {0xa770, 0, 0, 0, g(Yes, No, false, false, "", "ꝯ")}, + {0xa771, 0, 0, 0, f(Yes, false, "")}, + {0xa7f8, 0, 0, 0, g(Yes, No, false, false, "", "Ħ")}, + {0xa7f9, 0, 0, 0, g(Yes, No, false, false, "", "œ")}, + {0xa7fa, 0, 0, 0, f(Yes, false, "")}, + {0xa806, 9, 1, 1, f(Yes, false, "")}, + {0xa807, 0, 0, 0, f(Yes, false, "")}, + {0xa8c4, 9, 1, 1, f(Yes, false, "")}, + {0xa8c5, 0, 0, 0, f(Yes, false, "")}, + {0xa8e0, 230, 1, 1, f(Yes, false, "")}, + {0xa8f2, 0, 0, 0, f(Yes, false, "")}, + {0xa92b, 220, 1, 1, f(Yes, false, "")}, + {0xa92e, 0, 0, 0, f(Yes, false, "")}, + {0xa953, 9, 1, 1, f(Yes, false, "")}, + {0xa954, 0, 0, 0, f(Yes, false, "")}, + {0xa9b3, 7, 1, 1, f(Yes, false, "")}, + {0xa9b4, 0, 0, 0, f(Yes, false, "")}, + {0xa9c0, 9, 1, 1, f(Yes, false, "")}, + {0xa9c1, 0, 0, 0, f(Yes, false, "")}, + {0xaab0, 230, 1, 1, f(Yes, false, "")}, + {0xaab1, 0, 0, 0, f(Yes, false, "")}, + {0xaab2, 230, 1, 1, f(Yes, false, "")}, + {0xaab4, 220, 1, 1, f(Yes, false, "")}, + {0xaab5, 0, 0, 0, f(Yes, false, "")}, + {0xaab7, 230, 1, 1, f(Yes, false, "")}, + {0xaab9, 0, 0, 0, f(Yes, false, "")}, + {0xaabe, 230, 1, 1, f(Yes, false, "")}, + {0xaac0, 0, 0, 0, f(Yes, false, "")}, + {0xaac1, 230, 1, 1, f(Yes, false, "")}, + {0xaac2, 0, 0, 0, f(Yes, false, "")}, + {0xaaf6, 9, 1, 1, f(Yes, false, "")}, + {0xaaf7, 0, 0, 0, f(Yes, false, "")}, + {0xab5c, 0, 0, 0, g(Yes, No, false, false, "", "ꜧ")}, + {0xab5d, 0, 0, 0, g(Yes, No, false, false, "", "ꬷ")}, + {0xab5e, 0, 0, 0, g(Yes, No, false, false, "", "ɫ")}, + {0xab5f, 0, 0, 0, g(Yes, No, false, false, "", "ꭒ")}, + {0xab60, 0, 0, 0, f(Yes, false, "")}, + {0xabed, 9, 1, 1, f(Yes, false, "")}, + {0xabee, 0, 0, 0, f(Yes, false, "")}, + {0xac00, 0, 0, 1, f(Yes, true, "")}, + {0xac01, 0, 0, 2, f(Yes, false, "")}, + {0xac1c, 0, 0, 1, f(Yes, true, "")}, + {0xac1d, 0, 0, 2, f(Yes, false, "")}, + {0xac38, 0, 0, 1, f(Yes, true, "")}, + {0xac39, 0, 0, 2, f(Yes, false, "")}, + {0xac54, 0, 0, 1, f(Yes, true, "")}, + {0xac55, 0, 0, 2, f(Yes, false, "")}, + {0xac70, 0, 0, 1, f(Yes, true, "")}, + {0xac71, 0, 0, 2, f(Yes, false, "")}, + {0xac8c, 0, 0, 1, f(Yes, true, "")}, + {0xac8d, 0, 0, 2, f(Yes, false, "")}, + {0xaca8, 0, 0, 1, f(Yes, true, "")}, + {0xaca9, 0, 0, 2, f(Yes, false, "")}, + {0xacc4, 0, 0, 1, f(Yes, true, "")}, + {0xacc5, 0, 0, 2, f(Yes, false, "")}, + {0xace0, 0, 0, 1, f(Yes, true, "")}, + {0xace1, 0, 0, 2, f(Yes, false, "")}, + {0xacfc, 0, 0, 1, f(Yes, true, "")}, + {0xacfd, 0, 0, 2, f(Yes, false, "")}, + {0xad18, 0, 0, 1, f(Yes, true, "")}, + {0xad19, 0, 0, 2, f(Yes, false, "")}, + {0xad34, 0, 0, 1, f(Yes, true, "")}, + {0xad35, 0, 0, 2, f(Yes, false, "")}, + {0xad50, 0, 0, 1, f(Yes, true, "")}, + {0xad51, 0, 0, 2, f(Yes, false, "")}, + {0xad6c, 0, 0, 1, f(Yes, true, "")}, + {0xad6d, 0, 0, 2, f(Yes, false, "")}, + {0xad88, 0, 0, 1, f(Yes, true, "")}, + {0xad89, 0, 0, 2, f(Yes, false, "")}, + {0xada4, 0, 0, 1, f(Yes, true, "")}, + {0xada5, 0, 0, 2, f(Yes, false, "")}, + {0xadc0, 0, 0, 1, f(Yes, true, "")}, + {0xadc1, 0, 0, 2, f(Yes, false, "")}, + {0xaddc, 0, 0, 1, f(Yes, true, "")}, + {0xaddd, 0, 0, 2, f(Yes, false, "")}, + {0xadf8, 0, 0, 1, f(Yes, true, "")}, + {0xadf9, 0, 0, 2, f(Yes, false, "")}, + {0xae14, 0, 0, 1, f(Yes, true, "")}, + {0xae15, 0, 0, 2, f(Yes, false, "")}, + {0xae30, 0, 0, 1, f(Yes, true, "")}, + {0xae31, 0, 0, 2, f(Yes, false, "")}, + {0xae4c, 0, 0, 1, f(Yes, true, "")}, + {0xae4d, 0, 0, 2, f(Yes, false, "")}, + {0xae68, 0, 0, 1, f(Yes, true, "")}, + {0xae69, 0, 0, 2, f(Yes, false, "")}, + {0xae84, 0, 0, 1, f(Yes, true, "")}, + {0xae85, 0, 0, 2, f(Yes, false, "")}, + {0xaea0, 0, 0, 1, f(Yes, true, "")}, + {0xaea1, 0, 0, 2, f(Yes, false, "")}, + {0xaebc, 0, 0, 1, f(Yes, true, "")}, + {0xaebd, 0, 0, 2, f(Yes, false, "")}, + {0xaed8, 0, 0, 1, f(Yes, true, "")}, + {0xaed9, 0, 0, 2, f(Yes, false, "")}, + {0xaef4, 0, 0, 1, f(Yes, true, "")}, + {0xaef5, 0, 0, 2, f(Yes, false, "")}, + {0xaf10, 0, 0, 1, f(Yes, true, "")}, + {0xaf11, 0, 0, 2, f(Yes, false, "")}, + {0xaf2c, 0, 0, 1, f(Yes, true, "")}, + {0xaf2d, 0, 0, 2, f(Yes, false, "")}, + {0xaf48, 0, 0, 1, f(Yes, true, "")}, + {0xaf49, 0, 0, 2, f(Yes, false, "")}, + {0xaf64, 0, 0, 1, f(Yes, true, "")}, + {0xaf65, 0, 0, 2, f(Yes, false, "")}, + {0xaf80, 0, 0, 1, f(Yes, true, "")}, + {0xaf81, 0, 0, 2, f(Yes, false, "")}, + {0xaf9c, 0, 0, 1, f(Yes, true, "")}, + {0xaf9d, 0, 0, 2, f(Yes, false, "")}, + {0xafb8, 0, 0, 1, f(Yes, true, "")}, + {0xafb9, 0, 0, 2, f(Yes, false, "")}, + {0xafd4, 0, 0, 1, f(Yes, true, "")}, + {0xafd5, 0, 0, 2, f(Yes, false, "")}, + {0xaff0, 0, 0, 1, f(Yes, true, "")}, + {0xaff1, 0, 0, 2, f(Yes, false, "")}, + {0xb00c, 0, 0, 1, f(Yes, true, "")}, + {0xb00d, 0, 0, 2, f(Yes, false, "")}, + {0xb028, 0, 0, 1, f(Yes, true, "")}, + {0xb029, 0, 0, 2, f(Yes, false, "")}, + {0xb044, 0, 0, 1, f(Yes, true, "")}, + {0xb045, 0, 0, 2, f(Yes, false, "")}, + {0xb060, 0, 0, 1, f(Yes, true, "")}, + {0xb061, 0, 0, 2, f(Yes, false, "")}, + {0xb07c, 0, 0, 1, f(Yes, true, "")}, + {0xb07d, 0, 0, 2, f(Yes, false, "")}, + {0xb098, 0, 0, 1, f(Yes, true, "")}, + {0xb099, 0, 0, 2, f(Yes, false, "")}, + {0xb0b4, 0, 0, 1, f(Yes, true, "")}, + {0xb0b5, 0, 0, 2, f(Yes, false, "")}, + {0xb0d0, 0, 0, 1, f(Yes, true, "")}, + {0xb0d1, 0, 0, 2, f(Yes, false, "")}, + {0xb0ec, 0, 0, 1, f(Yes, true, "")}, + {0xb0ed, 0, 0, 2, f(Yes, false, "")}, + {0xb108, 0, 0, 1, f(Yes, true, "")}, + {0xb109, 0, 0, 2, f(Yes, false, "")}, + {0xb124, 0, 0, 1, f(Yes, true, "")}, + {0xb125, 0, 0, 2, f(Yes, false, "")}, + {0xb140, 0, 0, 1, f(Yes, true, "")}, + {0xb141, 0, 0, 2, f(Yes, false, "")}, + {0xb15c, 0, 0, 1, f(Yes, true, "")}, + {0xb15d, 0, 0, 2, f(Yes, false, "")}, + {0xb178, 0, 0, 1, f(Yes, true, "")}, + {0xb179, 0, 0, 2, f(Yes, false, "")}, + {0xb194, 0, 0, 1, f(Yes, true, "")}, + {0xb195, 0, 0, 2, f(Yes, false, "")}, + {0xb1b0, 0, 0, 1, f(Yes, true, "")}, + {0xb1b1, 0, 0, 2, f(Yes, false, "")}, + {0xb1cc, 0, 0, 1, f(Yes, true, "")}, + {0xb1cd, 0, 0, 2, f(Yes, false, "")}, + {0xb1e8, 0, 0, 1, f(Yes, true, "")}, + {0xb1e9, 0, 0, 2, f(Yes, false, "")}, + {0xb204, 0, 0, 1, f(Yes, true, "")}, + {0xb205, 0, 0, 2, f(Yes, false, "")}, + {0xb220, 0, 0, 1, f(Yes, true, "")}, + {0xb221, 0, 0, 2, f(Yes, false, "")}, + {0xb23c, 0, 0, 1, f(Yes, true, "")}, + {0xb23d, 0, 0, 2, f(Yes, false, "")}, + {0xb258, 0, 0, 1, f(Yes, true, "")}, + {0xb259, 0, 0, 2, f(Yes, false, "")}, + {0xb274, 0, 0, 1, f(Yes, true, "")}, + {0xb275, 0, 0, 2, f(Yes, false, "")}, + {0xb290, 0, 0, 1, f(Yes, true, "")}, + {0xb291, 0, 0, 2, f(Yes, false, "")}, + {0xb2ac, 0, 0, 1, f(Yes, true, "")}, + {0xb2ad, 0, 0, 2, f(Yes, false, "")}, + {0xb2c8, 0, 0, 1, f(Yes, true, "")}, + {0xb2c9, 0, 0, 2, f(Yes, false, "")}, + {0xb2e4, 0, 0, 1, f(Yes, true, "")}, + {0xb2e5, 0, 0, 2, f(Yes, false, "")}, + {0xb300, 0, 0, 1, f(Yes, true, "")}, + {0xb301, 0, 0, 2, f(Yes, false, "")}, + {0xb31c, 0, 0, 1, f(Yes, true, "")}, + {0xb31d, 0, 0, 2, f(Yes, false, "")}, + {0xb338, 0, 0, 1, f(Yes, true, "")}, + {0xb339, 0, 0, 2, f(Yes, false, "")}, + {0xb354, 0, 0, 1, f(Yes, true, "")}, + {0xb355, 0, 0, 2, f(Yes, false, "")}, + {0xb370, 0, 0, 1, f(Yes, true, "")}, + {0xb371, 0, 0, 2, f(Yes, false, "")}, + {0xb38c, 0, 0, 1, f(Yes, true, "")}, + {0xb38d, 0, 0, 2, f(Yes, false, "")}, + {0xb3a8, 0, 0, 1, f(Yes, true, "")}, + {0xb3a9, 0, 0, 2, f(Yes, false, "")}, + {0xb3c4, 0, 0, 1, f(Yes, true, "")}, + {0xb3c5, 0, 0, 2, f(Yes, false, "")}, + {0xb3e0, 0, 0, 1, f(Yes, true, "")}, + {0xb3e1, 0, 0, 2, f(Yes, false, "")}, + {0xb3fc, 0, 0, 1, f(Yes, true, "")}, + {0xb3fd, 0, 0, 2, f(Yes, false, "")}, + {0xb418, 0, 0, 1, f(Yes, true, "")}, + {0xb419, 0, 0, 2, f(Yes, false, "")}, + {0xb434, 0, 0, 1, f(Yes, true, "")}, + {0xb435, 0, 0, 2, f(Yes, false, "")}, + {0xb450, 0, 0, 1, f(Yes, true, "")}, + {0xb451, 0, 0, 2, f(Yes, false, "")}, + {0xb46c, 0, 0, 1, f(Yes, true, "")}, + {0xb46d, 0, 0, 2, f(Yes, false, "")}, + {0xb488, 0, 0, 1, f(Yes, true, "")}, + {0xb489, 0, 0, 2, f(Yes, false, "")}, + {0xb4a4, 0, 0, 1, f(Yes, true, "")}, + {0xb4a5, 0, 0, 2, f(Yes, false, "")}, + {0xb4c0, 0, 0, 1, f(Yes, true, "")}, + {0xb4c1, 0, 0, 2, f(Yes, false, "")}, + {0xb4dc, 0, 0, 1, f(Yes, true, "")}, + {0xb4dd, 0, 0, 2, f(Yes, false, "")}, + {0xb4f8, 0, 0, 1, f(Yes, true, "")}, + {0xb4f9, 0, 0, 2, f(Yes, false, "")}, + {0xb514, 0, 0, 1, f(Yes, true, "")}, + {0xb515, 0, 0, 2, f(Yes, false, "")}, + {0xb530, 0, 0, 1, f(Yes, true, "")}, + {0xb531, 0, 0, 2, f(Yes, false, "")}, + {0xb54c, 0, 0, 1, f(Yes, true, "")}, + {0xb54d, 0, 0, 2, f(Yes, false, "")}, + {0xb568, 0, 0, 1, f(Yes, true, "")}, + {0xb569, 0, 0, 2, f(Yes, false, "")}, + {0xb584, 0, 0, 1, f(Yes, true, "")}, + {0xb585, 0, 0, 2, f(Yes, false, "")}, + {0xb5a0, 0, 0, 1, f(Yes, true, "")}, + {0xb5a1, 0, 0, 2, f(Yes, false, "")}, + {0xb5bc, 0, 0, 1, f(Yes, true, "")}, + {0xb5bd, 0, 0, 2, f(Yes, false, "")}, + {0xb5d8, 0, 0, 1, f(Yes, true, "")}, + {0xb5d9, 0, 0, 2, f(Yes, false, "")}, + {0xb5f4, 0, 0, 1, f(Yes, true, "")}, + {0xb5f5, 0, 0, 2, f(Yes, false, "")}, + {0xb610, 0, 0, 1, f(Yes, true, "")}, + {0xb611, 0, 0, 2, f(Yes, false, "")}, + {0xb62c, 0, 0, 1, f(Yes, true, "")}, + {0xb62d, 0, 0, 2, f(Yes, false, "")}, + {0xb648, 0, 0, 1, f(Yes, true, "")}, + {0xb649, 0, 0, 2, f(Yes, false, "")}, + {0xb664, 0, 0, 1, f(Yes, true, "")}, + {0xb665, 0, 0, 2, f(Yes, false, "")}, + {0xb680, 0, 0, 1, f(Yes, true, "")}, + {0xb681, 0, 0, 2, f(Yes, false, "")}, + {0xb69c, 0, 0, 1, f(Yes, true, "")}, + {0xb69d, 0, 0, 2, f(Yes, false, "")}, + {0xb6b8, 0, 0, 1, f(Yes, true, "")}, + {0xb6b9, 0, 0, 2, f(Yes, false, "")}, + {0xb6d4, 0, 0, 1, f(Yes, true, "")}, + {0xb6d5, 0, 0, 2, f(Yes, false, "")}, + {0xb6f0, 0, 0, 1, f(Yes, true, "")}, + {0xb6f1, 0, 0, 2, f(Yes, false, "")}, + {0xb70c, 0, 0, 1, f(Yes, true, "")}, + {0xb70d, 0, 0, 2, f(Yes, false, "")}, + {0xb728, 0, 0, 1, f(Yes, true, "")}, + {0xb729, 0, 0, 2, f(Yes, false, "")}, + {0xb744, 0, 0, 1, f(Yes, true, "")}, + {0xb745, 0, 0, 2, f(Yes, false, "")}, + {0xb760, 0, 0, 1, f(Yes, true, "")}, + {0xb761, 0, 0, 2, f(Yes, false, "")}, + {0xb77c, 0, 0, 1, f(Yes, true, "")}, + {0xb77d, 0, 0, 2, f(Yes, false, "")}, + {0xb798, 0, 0, 1, f(Yes, true, "")}, + {0xb799, 0, 0, 2, f(Yes, false, "")}, + {0xb7b4, 0, 0, 1, f(Yes, true, "")}, + {0xb7b5, 0, 0, 2, f(Yes, false, "")}, + {0xb7d0, 0, 0, 1, f(Yes, true, "")}, + {0xb7d1, 0, 0, 2, f(Yes, false, "")}, + {0xb7ec, 0, 0, 1, f(Yes, true, "")}, + {0xb7ed, 0, 0, 2, f(Yes, false, "")}, + {0xb808, 0, 0, 1, f(Yes, true, "")}, + {0xb809, 0, 0, 2, f(Yes, false, "")}, + {0xb824, 0, 0, 1, f(Yes, true, "")}, + {0xb825, 0, 0, 2, f(Yes, false, "")}, + {0xb840, 0, 0, 1, f(Yes, true, "")}, + {0xb841, 0, 0, 2, f(Yes, false, "")}, + {0xb85c, 0, 0, 1, f(Yes, true, "")}, + {0xb85d, 0, 0, 2, f(Yes, false, "")}, + {0xb878, 0, 0, 1, f(Yes, true, "")}, + {0xb879, 0, 0, 2, f(Yes, false, "")}, + {0xb894, 0, 0, 1, f(Yes, true, "")}, + {0xb895, 0, 0, 2, f(Yes, false, "")}, + {0xb8b0, 0, 0, 1, f(Yes, true, "")}, + {0xb8b1, 0, 0, 2, f(Yes, false, "")}, + {0xb8cc, 0, 0, 1, f(Yes, true, "")}, + {0xb8cd, 0, 0, 2, f(Yes, false, "")}, + {0xb8e8, 0, 0, 1, f(Yes, true, "")}, + {0xb8e9, 0, 0, 2, f(Yes, false, "")}, + {0xb904, 0, 0, 1, f(Yes, true, "")}, + {0xb905, 0, 0, 2, f(Yes, false, "")}, + {0xb920, 0, 0, 1, f(Yes, true, "")}, + {0xb921, 0, 0, 2, f(Yes, false, "")}, + {0xb93c, 0, 0, 1, f(Yes, true, "")}, + {0xb93d, 0, 0, 2, f(Yes, false, "")}, + {0xb958, 0, 0, 1, f(Yes, true, "")}, + {0xb959, 0, 0, 2, f(Yes, false, "")}, + {0xb974, 0, 0, 1, f(Yes, true, "")}, + {0xb975, 0, 0, 2, f(Yes, false, "")}, + {0xb990, 0, 0, 1, f(Yes, true, "")}, + {0xb991, 0, 0, 2, f(Yes, false, "")}, + {0xb9ac, 0, 0, 1, f(Yes, true, "")}, + {0xb9ad, 0, 0, 2, f(Yes, false, "")}, + {0xb9c8, 0, 0, 1, f(Yes, true, "")}, + {0xb9c9, 0, 0, 2, f(Yes, false, "")}, + {0xb9e4, 0, 0, 1, f(Yes, true, "")}, + {0xb9e5, 0, 0, 2, f(Yes, false, "")}, + {0xba00, 0, 0, 1, f(Yes, true, "")}, + {0xba01, 0, 0, 2, f(Yes, false, "")}, + {0xba1c, 0, 0, 1, f(Yes, true, "")}, + {0xba1d, 0, 0, 2, f(Yes, false, "")}, + {0xba38, 0, 0, 1, f(Yes, true, "")}, + {0xba39, 0, 0, 2, f(Yes, false, "")}, + {0xba54, 0, 0, 1, f(Yes, true, "")}, + {0xba55, 0, 0, 2, f(Yes, false, "")}, + {0xba70, 0, 0, 1, f(Yes, true, "")}, + {0xba71, 0, 0, 2, f(Yes, false, "")}, + {0xba8c, 0, 0, 1, f(Yes, true, "")}, + {0xba8d, 0, 0, 2, f(Yes, false, "")}, + {0xbaa8, 0, 0, 1, f(Yes, true, "")}, + {0xbaa9, 0, 0, 2, f(Yes, false, "")}, + {0xbac4, 0, 0, 1, f(Yes, true, "")}, + {0xbac5, 0, 0, 2, f(Yes, false, "")}, + {0xbae0, 0, 0, 1, f(Yes, true, "")}, + {0xbae1, 0, 0, 2, f(Yes, false, "")}, + {0xbafc, 0, 0, 1, f(Yes, true, "")}, + {0xbafd, 0, 0, 2, f(Yes, false, "")}, + {0xbb18, 0, 0, 1, f(Yes, true, "")}, + {0xbb19, 0, 0, 2, f(Yes, false, "")}, + {0xbb34, 0, 0, 1, f(Yes, true, "")}, + {0xbb35, 0, 0, 2, f(Yes, false, "")}, + {0xbb50, 0, 0, 1, f(Yes, true, "")}, + {0xbb51, 0, 0, 2, f(Yes, false, "")}, + {0xbb6c, 0, 0, 1, f(Yes, true, "")}, + {0xbb6d, 0, 0, 2, f(Yes, false, "")}, + {0xbb88, 0, 0, 1, f(Yes, true, "")}, + {0xbb89, 0, 0, 2, f(Yes, false, "")}, + {0xbba4, 0, 0, 1, f(Yes, true, "")}, + {0xbba5, 0, 0, 2, f(Yes, false, "")}, + {0xbbc0, 0, 0, 1, f(Yes, true, "")}, + {0xbbc1, 0, 0, 2, f(Yes, false, "")}, + {0xbbdc, 0, 0, 1, f(Yes, true, "")}, + {0xbbdd, 0, 0, 2, f(Yes, false, "")}, + {0xbbf8, 0, 0, 1, f(Yes, true, "")}, + {0xbbf9, 0, 0, 2, f(Yes, false, "")}, + {0xbc14, 0, 0, 1, f(Yes, true, "")}, + {0xbc15, 0, 0, 2, f(Yes, false, "")}, + {0xbc30, 0, 0, 1, f(Yes, true, "")}, + {0xbc31, 0, 0, 2, f(Yes, false, "")}, + {0xbc4c, 0, 0, 1, f(Yes, true, "")}, + {0xbc4d, 0, 0, 2, f(Yes, false, "")}, + {0xbc68, 0, 0, 1, f(Yes, true, "")}, + {0xbc69, 0, 0, 2, f(Yes, false, "")}, + {0xbc84, 0, 0, 1, f(Yes, true, "")}, + {0xbc85, 0, 0, 2, f(Yes, false, "")}, + {0xbca0, 0, 0, 1, f(Yes, true, "")}, + {0xbca1, 0, 0, 2, f(Yes, false, "")}, + {0xbcbc, 0, 0, 1, f(Yes, true, "")}, + {0xbcbd, 0, 0, 2, f(Yes, false, "")}, + {0xbcd8, 0, 0, 1, f(Yes, true, "")}, + {0xbcd9, 0, 0, 2, f(Yes, false, "")}, + {0xbcf4, 0, 0, 1, f(Yes, true, "")}, + {0xbcf5, 0, 0, 2, f(Yes, false, "")}, + {0xbd10, 0, 0, 1, f(Yes, true, "")}, + {0xbd11, 0, 0, 2, f(Yes, false, "")}, + {0xbd2c, 0, 0, 1, f(Yes, true, "")}, + {0xbd2d, 0, 0, 2, f(Yes, false, "")}, + {0xbd48, 0, 0, 1, f(Yes, true, "")}, + {0xbd49, 0, 0, 2, f(Yes, false, "")}, + {0xbd64, 0, 0, 1, f(Yes, true, "")}, + {0xbd65, 0, 0, 2, f(Yes, false, "")}, + {0xbd80, 0, 0, 1, f(Yes, true, "")}, + {0xbd81, 0, 0, 2, f(Yes, false, "")}, + {0xbd9c, 0, 0, 1, f(Yes, true, "")}, + {0xbd9d, 0, 0, 2, f(Yes, false, "")}, + {0xbdb8, 0, 0, 1, f(Yes, true, "")}, + {0xbdb9, 0, 0, 2, f(Yes, false, "")}, + {0xbdd4, 0, 0, 1, f(Yes, true, "")}, + {0xbdd5, 0, 0, 2, f(Yes, false, "")}, + {0xbdf0, 0, 0, 1, f(Yes, true, "")}, + {0xbdf1, 0, 0, 2, f(Yes, false, "")}, + {0xbe0c, 0, 0, 1, f(Yes, true, "")}, + {0xbe0d, 0, 0, 2, f(Yes, false, "")}, + {0xbe28, 0, 0, 1, f(Yes, true, "")}, + {0xbe29, 0, 0, 2, f(Yes, false, "")}, + {0xbe44, 0, 0, 1, f(Yes, true, "")}, + {0xbe45, 0, 0, 2, f(Yes, false, "")}, + {0xbe60, 0, 0, 1, f(Yes, true, "")}, + {0xbe61, 0, 0, 2, f(Yes, false, "")}, + {0xbe7c, 0, 0, 1, f(Yes, true, "")}, + {0xbe7d, 0, 0, 2, f(Yes, false, "")}, + {0xbe98, 0, 0, 1, f(Yes, true, "")}, + {0xbe99, 0, 0, 2, f(Yes, false, "")}, + {0xbeb4, 0, 0, 1, f(Yes, true, "")}, + {0xbeb5, 0, 0, 2, f(Yes, false, "")}, + {0xbed0, 0, 0, 1, f(Yes, true, "")}, + {0xbed1, 0, 0, 2, f(Yes, false, "")}, + {0xbeec, 0, 0, 1, f(Yes, true, "")}, + {0xbeed, 0, 0, 2, f(Yes, false, "")}, + {0xbf08, 0, 0, 1, f(Yes, true, "")}, + {0xbf09, 0, 0, 2, f(Yes, false, "")}, + {0xbf24, 0, 0, 1, f(Yes, true, "")}, + {0xbf25, 0, 0, 2, f(Yes, false, "")}, + {0xbf40, 0, 0, 1, f(Yes, true, "")}, + {0xbf41, 0, 0, 2, f(Yes, false, "")}, + {0xbf5c, 0, 0, 1, f(Yes, true, "")}, + {0xbf5d, 0, 0, 2, f(Yes, false, "")}, + {0xbf78, 0, 0, 1, f(Yes, true, "")}, + {0xbf79, 0, 0, 2, f(Yes, false, "")}, + {0xbf94, 0, 0, 1, f(Yes, true, "")}, + {0xbf95, 0, 0, 2, f(Yes, false, "")}, + {0xbfb0, 0, 0, 1, f(Yes, true, "")}, + {0xbfb1, 0, 0, 2, f(Yes, false, "")}, + {0xbfcc, 0, 0, 1, f(Yes, true, "")}, + {0xbfcd, 0, 0, 2, f(Yes, false, "")}, + {0xbfe8, 0, 0, 1, f(Yes, true, "")}, + {0xbfe9, 0, 0, 2, f(Yes, false, "")}, + {0xc004, 0, 0, 1, f(Yes, true, "")}, + {0xc005, 0, 0, 2, f(Yes, false, "")}, + {0xc020, 0, 0, 1, f(Yes, true, "")}, + {0xc021, 0, 0, 2, f(Yes, false, "")}, + {0xc03c, 0, 0, 1, f(Yes, true, "")}, + {0xc03d, 0, 0, 2, f(Yes, false, "")}, + {0xc058, 0, 0, 1, f(Yes, true, "")}, + {0xc059, 0, 0, 2, f(Yes, false, "")}, + {0xc074, 0, 0, 1, f(Yes, true, "")}, + {0xc075, 0, 0, 2, f(Yes, false, "")}, + {0xc090, 0, 0, 1, f(Yes, true, "")}, + {0xc091, 0, 0, 2, f(Yes, false, "")}, + {0xc0ac, 0, 0, 1, f(Yes, true, "")}, + {0xc0ad, 0, 0, 2, f(Yes, false, "")}, + {0xc0c8, 0, 0, 1, f(Yes, true, "")}, + {0xc0c9, 0, 0, 2, f(Yes, false, "")}, + {0xc0e4, 0, 0, 1, f(Yes, true, "")}, + {0xc0e5, 0, 0, 2, f(Yes, false, "")}, + {0xc100, 0, 0, 1, f(Yes, true, "")}, + {0xc101, 0, 0, 2, f(Yes, false, "")}, + {0xc11c, 0, 0, 1, f(Yes, true, "")}, + {0xc11d, 0, 0, 2, f(Yes, false, "")}, + {0xc138, 0, 0, 1, f(Yes, true, "")}, + {0xc139, 0, 0, 2, f(Yes, false, "")}, + {0xc154, 0, 0, 1, f(Yes, true, "")}, + {0xc155, 0, 0, 2, f(Yes, false, "")}, + {0xc170, 0, 0, 1, f(Yes, true, "")}, + {0xc171, 0, 0, 2, f(Yes, false, "")}, + {0xc18c, 0, 0, 1, f(Yes, true, "")}, + {0xc18d, 0, 0, 2, f(Yes, false, "")}, + {0xc1a8, 0, 0, 1, f(Yes, true, "")}, + {0xc1a9, 0, 0, 2, f(Yes, false, "")}, + {0xc1c4, 0, 0, 1, f(Yes, true, "")}, + {0xc1c5, 0, 0, 2, f(Yes, false, "")}, + {0xc1e0, 0, 0, 1, f(Yes, true, "")}, + {0xc1e1, 0, 0, 2, f(Yes, false, "")}, + {0xc1fc, 0, 0, 1, f(Yes, true, "")}, + {0xc1fd, 0, 0, 2, f(Yes, false, "")}, + {0xc218, 0, 0, 1, f(Yes, true, "")}, + {0xc219, 0, 0, 2, f(Yes, false, "")}, + {0xc234, 0, 0, 1, f(Yes, true, "")}, + {0xc235, 0, 0, 2, f(Yes, false, "")}, + {0xc250, 0, 0, 1, f(Yes, true, "")}, + {0xc251, 0, 0, 2, f(Yes, false, "")}, + {0xc26c, 0, 0, 1, f(Yes, true, "")}, + {0xc26d, 0, 0, 2, f(Yes, false, "")}, + {0xc288, 0, 0, 1, f(Yes, true, "")}, + {0xc289, 0, 0, 2, f(Yes, false, "")}, + {0xc2a4, 0, 0, 1, f(Yes, true, "")}, + {0xc2a5, 0, 0, 2, f(Yes, false, "")}, + {0xc2c0, 0, 0, 1, f(Yes, true, "")}, + {0xc2c1, 0, 0, 2, f(Yes, false, "")}, + {0xc2dc, 0, 0, 1, f(Yes, true, "")}, + {0xc2dd, 0, 0, 2, f(Yes, false, "")}, + {0xc2f8, 0, 0, 1, f(Yes, true, "")}, + {0xc2f9, 0, 0, 2, f(Yes, false, "")}, + {0xc314, 0, 0, 1, f(Yes, true, "")}, + {0xc315, 0, 0, 2, f(Yes, false, "")}, + {0xc330, 0, 0, 1, f(Yes, true, "")}, + {0xc331, 0, 0, 2, f(Yes, false, "")}, + {0xc34c, 0, 0, 1, f(Yes, true, "")}, + {0xc34d, 0, 0, 2, f(Yes, false, "")}, + {0xc368, 0, 0, 1, f(Yes, true, "")}, + {0xc369, 0, 0, 2, f(Yes, false, "")}, + {0xc384, 0, 0, 1, f(Yes, true, "")}, + {0xc385, 0, 0, 2, f(Yes, false, "")}, + {0xc3a0, 0, 0, 1, f(Yes, true, "")}, + {0xc3a1, 0, 0, 2, f(Yes, false, "")}, + {0xc3bc, 0, 0, 1, f(Yes, true, "")}, + {0xc3bd, 0, 0, 2, f(Yes, false, "")}, + {0xc3d8, 0, 0, 1, f(Yes, true, "")}, + {0xc3d9, 0, 0, 2, f(Yes, false, "")}, + {0xc3f4, 0, 0, 1, f(Yes, true, "")}, + {0xc3f5, 0, 0, 2, f(Yes, false, "")}, + {0xc410, 0, 0, 1, f(Yes, true, "")}, + {0xc411, 0, 0, 2, f(Yes, false, "")}, + {0xc42c, 0, 0, 1, f(Yes, true, "")}, + {0xc42d, 0, 0, 2, f(Yes, false, "")}, + {0xc448, 0, 0, 1, f(Yes, true, "")}, + {0xc449, 0, 0, 2, f(Yes, false, "")}, + {0xc464, 0, 0, 1, f(Yes, true, "")}, + {0xc465, 0, 0, 2, f(Yes, false, "")}, + {0xc480, 0, 0, 1, f(Yes, true, "")}, + {0xc481, 0, 0, 2, f(Yes, false, "")}, + {0xc49c, 0, 0, 1, f(Yes, true, "")}, + {0xc49d, 0, 0, 2, f(Yes, false, "")}, + {0xc4b8, 0, 0, 1, f(Yes, true, "")}, + {0xc4b9, 0, 0, 2, f(Yes, false, "")}, + {0xc4d4, 0, 0, 1, f(Yes, true, "")}, + {0xc4d5, 0, 0, 2, f(Yes, false, "")}, + {0xc4f0, 0, 0, 1, f(Yes, true, "")}, + {0xc4f1, 0, 0, 2, f(Yes, false, "")}, + {0xc50c, 0, 0, 1, f(Yes, true, "")}, + {0xc50d, 0, 0, 2, f(Yes, false, "")}, + {0xc528, 0, 0, 1, f(Yes, true, "")}, + {0xc529, 0, 0, 2, f(Yes, false, "")}, + {0xc544, 0, 0, 1, f(Yes, true, "")}, + {0xc545, 0, 0, 2, f(Yes, false, "")}, + {0xc560, 0, 0, 1, f(Yes, true, "")}, + {0xc561, 0, 0, 2, f(Yes, false, "")}, + {0xc57c, 0, 0, 1, f(Yes, true, "")}, + {0xc57d, 0, 0, 2, f(Yes, false, "")}, + {0xc598, 0, 0, 1, f(Yes, true, "")}, + {0xc599, 0, 0, 2, f(Yes, false, "")}, + {0xc5b4, 0, 0, 1, f(Yes, true, "")}, + {0xc5b5, 0, 0, 2, f(Yes, false, "")}, + {0xc5d0, 0, 0, 1, f(Yes, true, "")}, + {0xc5d1, 0, 0, 2, f(Yes, false, "")}, + {0xc5ec, 0, 0, 1, f(Yes, true, "")}, + {0xc5ed, 0, 0, 2, f(Yes, false, "")}, + {0xc608, 0, 0, 1, f(Yes, true, "")}, + {0xc609, 0, 0, 2, f(Yes, false, "")}, + {0xc624, 0, 0, 1, f(Yes, true, "")}, + {0xc625, 0, 0, 2, f(Yes, false, "")}, + {0xc640, 0, 0, 1, f(Yes, true, "")}, + {0xc641, 0, 0, 2, f(Yes, false, "")}, + {0xc65c, 0, 0, 1, f(Yes, true, "")}, + {0xc65d, 0, 0, 2, f(Yes, false, "")}, + {0xc678, 0, 0, 1, f(Yes, true, "")}, + {0xc679, 0, 0, 2, f(Yes, false, "")}, + {0xc694, 0, 0, 1, f(Yes, true, "")}, + {0xc695, 0, 0, 2, f(Yes, false, "")}, + {0xc6b0, 0, 0, 1, f(Yes, true, "")}, + {0xc6b1, 0, 0, 2, f(Yes, false, "")}, + {0xc6cc, 0, 0, 1, f(Yes, true, "")}, + {0xc6cd, 0, 0, 2, f(Yes, false, "")}, + {0xc6e8, 0, 0, 1, f(Yes, true, "")}, + {0xc6e9, 0, 0, 2, f(Yes, false, "")}, + {0xc704, 0, 0, 1, f(Yes, true, "")}, + {0xc705, 0, 0, 2, f(Yes, false, "")}, + {0xc720, 0, 0, 1, f(Yes, true, "")}, + {0xc721, 0, 0, 2, f(Yes, false, "")}, + {0xc73c, 0, 0, 1, f(Yes, true, "")}, + {0xc73d, 0, 0, 2, f(Yes, false, "")}, + {0xc758, 0, 0, 1, f(Yes, true, "")}, + {0xc759, 0, 0, 2, f(Yes, false, "")}, + {0xc774, 0, 0, 1, f(Yes, true, "")}, + {0xc775, 0, 0, 2, f(Yes, false, "")}, + {0xc790, 0, 0, 1, f(Yes, true, "")}, + {0xc791, 0, 0, 2, f(Yes, false, "")}, + {0xc7ac, 0, 0, 1, f(Yes, true, "")}, + {0xc7ad, 0, 0, 2, f(Yes, false, "")}, + {0xc7c8, 0, 0, 1, f(Yes, true, "")}, + {0xc7c9, 0, 0, 2, f(Yes, false, "")}, + {0xc7e4, 0, 0, 1, f(Yes, true, "")}, + {0xc7e5, 0, 0, 2, f(Yes, false, "")}, + {0xc800, 0, 0, 1, f(Yes, true, "")}, + {0xc801, 0, 0, 2, f(Yes, false, "")}, + {0xc81c, 0, 0, 1, f(Yes, true, "")}, + {0xc81d, 0, 0, 2, f(Yes, false, "")}, + {0xc838, 0, 0, 1, f(Yes, true, "")}, + {0xc839, 0, 0, 2, f(Yes, false, "")}, + {0xc854, 0, 0, 1, f(Yes, true, "")}, + {0xc855, 0, 0, 2, f(Yes, false, "")}, + {0xc870, 0, 0, 1, f(Yes, true, "")}, + {0xc871, 0, 0, 2, f(Yes, false, "")}, + {0xc88c, 0, 0, 1, f(Yes, true, "")}, + {0xc88d, 0, 0, 2, f(Yes, false, "")}, + {0xc8a8, 0, 0, 1, f(Yes, true, "")}, + {0xc8a9, 0, 0, 2, f(Yes, false, "")}, + {0xc8c4, 0, 0, 1, f(Yes, true, "")}, + {0xc8c5, 0, 0, 2, f(Yes, false, "")}, + {0xc8e0, 0, 0, 1, f(Yes, true, "")}, + {0xc8e1, 0, 0, 2, f(Yes, false, "")}, + {0xc8fc, 0, 0, 1, f(Yes, true, "")}, + {0xc8fd, 0, 0, 2, f(Yes, false, "")}, + {0xc918, 0, 0, 1, f(Yes, true, "")}, + {0xc919, 0, 0, 2, f(Yes, false, "")}, + {0xc934, 0, 0, 1, f(Yes, true, "")}, + {0xc935, 0, 0, 2, f(Yes, false, "")}, + {0xc950, 0, 0, 1, f(Yes, true, "")}, + {0xc951, 0, 0, 2, f(Yes, false, "")}, + {0xc96c, 0, 0, 1, f(Yes, true, "")}, + {0xc96d, 0, 0, 2, f(Yes, false, "")}, + {0xc988, 0, 0, 1, f(Yes, true, "")}, + {0xc989, 0, 0, 2, f(Yes, false, "")}, + {0xc9a4, 0, 0, 1, f(Yes, true, "")}, + {0xc9a5, 0, 0, 2, f(Yes, false, "")}, + {0xc9c0, 0, 0, 1, f(Yes, true, "")}, + {0xc9c1, 0, 0, 2, f(Yes, false, "")}, + {0xc9dc, 0, 0, 1, f(Yes, true, "")}, + {0xc9dd, 0, 0, 2, f(Yes, false, "")}, + {0xc9f8, 0, 0, 1, f(Yes, true, "")}, + {0xc9f9, 0, 0, 2, f(Yes, false, "")}, + {0xca14, 0, 0, 1, f(Yes, true, "")}, + {0xca15, 0, 0, 2, f(Yes, false, "")}, + {0xca30, 0, 0, 1, f(Yes, true, "")}, + {0xca31, 0, 0, 2, f(Yes, false, "")}, + {0xca4c, 0, 0, 1, f(Yes, true, "")}, + {0xca4d, 0, 0, 2, f(Yes, false, "")}, + {0xca68, 0, 0, 1, f(Yes, true, "")}, + {0xca69, 0, 0, 2, f(Yes, false, "")}, + {0xca84, 0, 0, 1, f(Yes, true, "")}, + {0xca85, 0, 0, 2, f(Yes, false, "")}, + {0xcaa0, 0, 0, 1, f(Yes, true, "")}, + {0xcaa1, 0, 0, 2, f(Yes, false, "")}, + {0xcabc, 0, 0, 1, f(Yes, true, "")}, + {0xcabd, 0, 0, 2, f(Yes, false, "")}, + {0xcad8, 0, 0, 1, f(Yes, true, "")}, + {0xcad9, 0, 0, 2, f(Yes, false, "")}, + {0xcaf4, 0, 0, 1, f(Yes, true, "")}, + {0xcaf5, 0, 0, 2, f(Yes, false, "")}, + {0xcb10, 0, 0, 1, f(Yes, true, "")}, + {0xcb11, 0, 0, 2, f(Yes, false, "")}, + {0xcb2c, 0, 0, 1, f(Yes, true, "")}, + {0xcb2d, 0, 0, 2, f(Yes, false, "")}, + {0xcb48, 0, 0, 1, f(Yes, true, "")}, + {0xcb49, 0, 0, 2, f(Yes, false, "")}, + {0xcb64, 0, 0, 1, f(Yes, true, "")}, + {0xcb65, 0, 0, 2, f(Yes, false, "")}, + {0xcb80, 0, 0, 1, f(Yes, true, "")}, + {0xcb81, 0, 0, 2, f(Yes, false, "")}, + {0xcb9c, 0, 0, 1, f(Yes, true, "")}, + {0xcb9d, 0, 0, 2, f(Yes, false, "")}, + {0xcbb8, 0, 0, 1, f(Yes, true, "")}, + {0xcbb9, 0, 0, 2, f(Yes, false, "")}, + {0xcbd4, 0, 0, 1, f(Yes, true, "")}, + {0xcbd5, 0, 0, 2, f(Yes, false, "")}, + {0xcbf0, 0, 0, 1, f(Yes, true, "")}, + {0xcbf1, 0, 0, 2, f(Yes, false, "")}, + {0xcc0c, 0, 0, 1, f(Yes, true, "")}, + {0xcc0d, 0, 0, 2, f(Yes, false, "")}, + {0xcc28, 0, 0, 1, f(Yes, true, "")}, + {0xcc29, 0, 0, 2, f(Yes, false, "")}, + {0xcc44, 0, 0, 1, f(Yes, true, "")}, + {0xcc45, 0, 0, 2, f(Yes, false, "")}, + {0xcc60, 0, 0, 1, f(Yes, true, "")}, + {0xcc61, 0, 0, 2, f(Yes, false, "")}, + {0xcc7c, 0, 0, 1, f(Yes, true, "")}, + {0xcc7d, 0, 0, 2, f(Yes, false, "")}, + {0xcc98, 0, 0, 1, f(Yes, true, "")}, + {0xcc99, 0, 0, 2, f(Yes, false, "")}, + {0xccb4, 0, 0, 1, f(Yes, true, "")}, + {0xccb5, 0, 0, 2, f(Yes, false, "")}, + {0xccd0, 0, 0, 1, f(Yes, true, "")}, + {0xccd1, 0, 0, 2, f(Yes, false, "")}, + {0xccec, 0, 0, 1, f(Yes, true, "")}, + {0xcced, 0, 0, 2, f(Yes, false, "")}, + {0xcd08, 0, 0, 1, f(Yes, true, "")}, + {0xcd09, 0, 0, 2, f(Yes, false, "")}, + {0xcd24, 0, 0, 1, f(Yes, true, "")}, + {0xcd25, 0, 0, 2, f(Yes, false, "")}, + {0xcd40, 0, 0, 1, f(Yes, true, "")}, + {0xcd41, 0, 0, 2, f(Yes, false, "")}, + {0xcd5c, 0, 0, 1, f(Yes, true, "")}, + {0xcd5d, 0, 0, 2, f(Yes, false, "")}, + {0xcd78, 0, 0, 1, f(Yes, true, "")}, + {0xcd79, 0, 0, 2, f(Yes, false, "")}, + {0xcd94, 0, 0, 1, f(Yes, true, "")}, + {0xcd95, 0, 0, 2, f(Yes, false, "")}, + {0xcdb0, 0, 0, 1, f(Yes, true, "")}, + {0xcdb1, 0, 0, 2, f(Yes, false, "")}, + {0xcdcc, 0, 0, 1, f(Yes, true, "")}, + {0xcdcd, 0, 0, 2, f(Yes, false, "")}, + {0xcde8, 0, 0, 1, f(Yes, true, "")}, + {0xcde9, 0, 0, 2, f(Yes, false, "")}, + {0xce04, 0, 0, 1, f(Yes, true, "")}, + {0xce05, 0, 0, 2, f(Yes, false, "")}, + {0xce20, 0, 0, 1, f(Yes, true, "")}, + {0xce21, 0, 0, 2, f(Yes, false, "")}, + {0xce3c, 0, 0, 1, f(Yes, true, "")}, + {0xce3d, 0, 0, 2, f(Yes, false, "")}, + {0xce58, 0, 0, 1, f(Yes, true, "")}, + {0xce59, 0, 0, 2, f(Yes, false, "")}, + {0xce74, 0, 0, 1, f(Yes, true, "")}, + {0xce75, 0, 0, 2, f(Yes, false, "")}, + {0xce90, 0, 0, 1, f(Yes, true, "")}, + {0xce91, 0, 0, 2, f(Yes, false, "")}, + {0xceac, 0, 0, 1, f(Yes, true, "")}, + {0xcead, 0, 0, 2, f(Yes, false, "")}, + {0xcec8, 0, 0, 1, f(Yes, true, "")}, + {0xcec9, 0, 0, 2, f(Yes, false, "")}, + {0xcee4, 0, 0, 1, f(Yes, true, "")}, + {0xcee5, 0, 0, 2, f(Yes, false, "")}, + {0xcf00, 0, 0, 1, f(Yes, true, "")}, + {0xcf01, 0, 0, 2, f(Yes, false, "")}, + {0xcf1c, 0, 0, 1, f(Yes, true, "")}, + {0xcf1d, 0, 0, 2, f(Yes, false, "")}, + {0xcf38, 0, 0, 1, f(Yes, true, "")}, + {0xcf39, 0, 0, 2, f(Yes, false, "")}, + {0xcf54, 0, 0, 1, f(Yes, true, "")}, + {0xcf55, 0, 0, 2, f(Yes, false, "")}, + {0xcf70, 0, 0, 1, f(Yes, true, "")}, + {0xcf71, 0, 0, 2, f(Yes, false, "")}, + {0xcf8c, 0, 0, 1, f(Yes, true, "")}, + {0xcf8d, 0, 0, 2, f(Yes, false, "")}, + {0xcfa8, 0, 0, 1, f(Yes, true, "")}, + {0xcfa9, 0, 0, 2, f(Yes, false, "")}, + {0xcfc4, 0, 0, 1, f(Yes, true, "")}, + {0xcfc5, 0, 0, 2, f(Yes, false, "")}, + {0xcfe0, 0, 0, 1, f(Yes, true, "")}, + {0xcfe1, 0, 0, 2, f(Yes, false, "")}, + {0xcffc, 0, 0, 1, f(Yes, true, "")}, + {0xcffd, 0, 0, 2, f(Yes, false, "")}, + {0xd018, 0, 0, 1, f(Yes, true, "")}, + {0xd019, 0, 0, 2, f(Yes, false, "")}, + {0xd034, 0, 0, 1, f(Yes, true, "")}, + {0xd035, 0, 0, 2, f(Yes, false, "")}, + {0xd050, 0, 0, 1, f(Yes, true, "")}, + {0xd051, 0, 0, 2, f(Yes, false, "")}, + {0xd06c, 0, 0, 1, f(Yes, true, "")}, + {0xd06d, 0, 0, 2, f(Yes, false, "")}, + {0xd088, 0, 0, 1, f(Yes, true, "")}, + {0xd089, 0, 0, 2, f(Yes, false, "")}, + {0xd0a4, 0, 0, 1, f(Yes, true, "")}, + {0xd0a5, 0, 0, 2, f(Yes, false, "")}, + {0xd0c0, 0, 0, 1, f(Yes, true, "")}, + {0xd0c1, 0, 0, 2, f(Yes, false, "")}, + {0xd0dc, 0, 0, 1, f(Yes, true, "")}, + {0xd0dd, 0, 0, 2, f(Yes, false, "")}, + {0xd0f8, 0, 0, 1, f(Yes, true, "")}, + {0xd0f9, 0, 0, 2, f(Yes, false, "")}, + {0xd114, 0, 0, 1, f(Yes, true, "")}, + {0xd115, 0, 0, 2, f(Yes, false, "")}, + {0xd130, 0, 0, 1, f(Yes, true, "")}, + {0xd131, 0, 0, 2, f(Yes, false, "")}, + {0xd14c, 0, 0, 1, f(Yes, true, "")}, + {0xd14d, 0, 0, 2, f(Yes, false, "")}, + {0xd168, 0, 0, 1, f(Yes, true, "")}, + {0xd169, 0, 0, 2, f(Yes, false, "")}, + {0xd184, 0, 0, 1, f(Yes, true, "")}, + {0xd185, 0, 0, 2, f(Yes, false, "")}, + {0xd1a0, 0, 0, 1, f(Yes, true, "")}, + {0xd1a1, 0, 0, 2, f(Yes, false, "")}, + {0xd1bc, 0, 0, 1, f(Yes, true, "")}, + {0xd1bd, 0, 0, 2, f(Yes, false, "")}, + {0xd1d8, 0, 0, 1, f(Yes, true, "")}, + {0xd1d9, 0, 0, 2, f(Yes, false, "")}, + {0xd1f4, 0, 0, 1, f(Yes, true, "")}, + {0xd1f5, 0, 0, 2, f(Yes, false, "")}, + {0xd210, 0, 0, 1, f(Yes, true, "")}, + {0xd211, 0, 0, 2, f(Yes, false, "")}, + {0xd22c, 0, 0, 1, f(Yes, true, "")}, + {0xd22d, 0, 0, 2, f(Yes, false, "")}, + {0xd248, 0, 0, 1, f(Yes, true, "")}, + {0xd249, 0, 0, 2, f(Yes, false, "")}, + {0xd264, 0, 0, 1, f(Yes, true, "")}, + {0xd265, 0, 0, 2, f(Yes, false, "")}, + {0xd280, 0, 0, 1, f(Yes, true, "")}, + {0xd281, 0, 0, 2, f(Yes, false, "")}, + {0xd29c, 0, 0, 1, f(Yes, true, "")}, + {0xd29d, 0, 0, 2, f(Yes, false, "")}, + {0xd2b8, 0, 0, 1, f(Yes, true, "")}, + {0xd2b9, 0, 0, 2, f(Yes, false, "")}, + {0xd2d4, 0, 0, 1, f(Yes, true, "")}, + {0xd2d5, 0, 0, 2, f(Yes, false, "")}, + {0xd2f0, 0, 0, 1, f(Yes, true, "")}, + {0xd2f1, 0, 0, 2, f(Yes, false, "")}, + {0xd30c, 0, 0, 1, f(Yes, true, "")}, + {0xd30d, 0, 0, 2, f(Yes, false, "")}, + {0xd328, 0, 0, 1, f(Yes, true, "")}, + {0xd329, 0, 0, 2, f(Yes, false, "")}, + {0xd344, 0, 0, 1, f(Yes, true, "")}, + {0xd345, 0, 0, 2, f(Yes, false, "")}, + {0xd360, 0, 0, 1, f(Yes, true, "")}, + {0xd361, 0, 0, 2, f(Yes, false, "")}, + {0xd37c, 0, 0, 1, f(Yes, true, "")}, + {0xd37d, 0, 0, 2, f(Yes, false, "")}, + {0xd398, 0, 0, 1, f(Yes, true, "")}, + {0xd399, 0, 0, 2, f(Yes, false, "")}, + {0xd3b4, 0, 0, 1, f(Yes, true, "")}, + {0xd3b5, 0, 0, 2, f(Yes, false, "")}, + {0xd3d0, 0, 0, 1, f(Yes, true, "")}, + {0xd3d1, 0, 0, 2, f(Yes, false, "")}, + {0xd3ec, 0, 0, 1, f(Yes, true, "")}, + {0xd3ed, 0, 0, 2, f(Yes, false, "")}, + {0xd408, 0, 0, 1, f(Yes, true, "")}, + {0xd409, 0, 0, 2, f(Yes, false, "")}, + {0xd424, 0, 0, 1, f(Yes, true, "")}, + {0xd425, 0, 0, 2, f(Yes, false, "")}, + {0xd440, 0, 0, 1, f(Yes, true, "")}, + {0xd441, 0, 0, 2, f(Yes, false, "")}, + {0xd45c, 0, 0, 1, f(Yes, true, "")}, + {0xd45d, 0, 0, 2, f(Yes, false, "")}, + {0xd478, 0, 0, 1, f(Yes, true, "")}, + {0xd479, 0, 0, 2, f(Yes, false, "")}, + {0xd494, 0, 0, 1, f(Yes, true, "")}, + {0xd495, 0, 0, 2, f(Yes, false, "")}, + {0xd4b0, 0, 0, 1, f(Yes, true, "")}, + {0xd4b1, 0, 0, 2, f(Yes, false, "")}, + {0xd4cc, 0, 0, 1, f(Yes, true, "")}, + {0xd4cd, 0, 0, 2, f(Yes, false, "")}, + {0xd4e8, 0, 0, 1, f(Yes, true, "")}, + {0xd4e9, 0, 0, 2, f(Yes, false, "")}, + {0xd504, 0, 0, 1, f(Yes, true, "")}, + {0xd505, 0, 0, 2, f(Yes, false, "")}, + {0xd520, 0, 0, 1, f(Yes, true, "")}, + {0xd521, 0, 0, 2, f(Yes, false, "")}, + {0xd53c, 0, 0, 1, f(Yes, true, "")}, + {0xd53d, 0, 0, 2, f(Yes, false, "")}, + {0xd558, 0, 0, 1, f(Yes, true, "")}, + {0xd559, 0, 0, 2, f(Yes, false, "")}, + {0xd574, 0, 0, 1, f(Yes, true, "")}, + {0xd575, 0, 0, 2, f(Yes, false, "")}, + {0xd590, 0, 0, 1, f(Yes, true, "")}, + {0xd591, 0, 0, 2, f(Yes, false, "")}, + {0xd5ac, 0, 0, 1, f(Yes, true, "")}, + {0xd5ad, 0, 0, 2, f(Yes, false, "")}, + {0xd5c8, 0, 0, 1, f(Yes, true, "")}, + {0xd5c9, 0, 0, 2, f(Yes, false, "")}, + {0xd5e4, 0, 0, 1, f(Yes, true, "")}, + {0xd5e5, 0, 0, 2, f(Yes, false, "")}, + {0xd600, 0, 0, 1, f(Yes, true, "")}, + {0xd601, 0, 0, 2, f(Yes, false, "")}, + {0xd61c, 0, 0, 1, f(Yes, true, "")}, + {0xd61d, 0, 0, 2, f(Yes, false, "")}, + {0xd638, 0, 0, 1, f(Yes, true, "")}, + {0xd639, 0, 0, 2, f(Yes, false, "")}, + {0xd654, 0, 0, 1, f(Yes, true, "")}, + {0xd655, 0, 0, 2, f(Yes, false, "")}, + {0xd670, 0, 0, 1, f(Yes, true, "")}, + {0xd671, 0, 0, 2, f(Yes, false, "")}, + {0xd68c, 0, 0, 1, f(Yes, true, "")}, + {0xd68d, 0, 0, 2, f(Yes, false, "")}, + {0xd6a8, 0, 0, 1, f(Yes, true, "")}, + {0xd6a9, 0, 0, 2, f(Yes, false, "")}, + {0xd6c4, 0, 0, 1, f(Yes, true, "")}, + {0xd6c5, 0, 0, 2, f(Yes, false, "")}, + {0xd6e0, 0, 0, 1, f(Yes, true, "")}, + {0xd6e1, 0, 0, 2, f(Yes, false, "")}, + {0xd6fc, 0, 0, 1, f(Yes, true, "")}, + {0xd6fd, 0, 0, 2, f(Yes, false, "")}, + {0xd718, 0, 0, 1, f(Yes, true, "")}, + {0xd719, 0, 0, 2, f(Yes, false, "")}, + {0xd734, 0, 0, 1, f(Yes, true, "")}, + {0xd735, 0, 0, 2, f(Yes, false, "")}, + {0xd750, 0, 0, 1, f(Yes, true, "")}, + {0xd751, 0, 0, 2, f(Yes, false, "")}, + {0xd76c, 0, 0, 1, f(Yes, true, "")}, + {0xd76d, 0, 0, 2, f(Yes, false, "")}, + {0xd788, 0, 0, 1, f(Yes, true, "")}, + {0xd789, 0, 0, 2, f(Yes, false, "")}, + {0xd7a4, 0, 0, 0, f(Yes, false, "")}, + {0xf900, 0, 0, 0, f(No, false, "豈")}, + {0xf901, 0, 0, 0, f(No, false, "更")}, + {0xf902, 0, 0, 0, f(No, false, "車")}, + {0xf903, 0, 0, 0, f(No, false, "賈")}, + {0xf904, 0, 0, 0, f(No, false, "滑")}, + {0xf905, 0, 0, 0, f(No, false, "串")}, + {0xf906, 0, 0, 0, f(No, false, "句")}, + {0xf907, 0, 0, 0, f(No, false, "龜")}, + {0xf909, 0, 0, 0, f(No, false, "契")}, + {0xf90a, 0, 0, 0, f(No, false, "金")}, + {0xf90b, 0, 0, 0, f(No, false, "喇")}, + {0xf90c, 0, 0, 0, f(No, false, "奈")}, + {0xf90d, 0, 0, 0, f(No, false, "懶")}, + {0xf90e, 0, 0, 0, f(No, false, "癩")}, + {0xf90f, 0, 0, 0, f(No, false, "羅")}, + {0xf910, 0, 0, 0, f(No, false, "蘿")}, + {0xf911, 0, 0, 0, f(No, false, "螺")}, + {0xf912, 0, 0, 0, f(No, false, "裸")}, + {0xf913, 0, 0, 0, f(No, false, "邏")}, + {0xf914, 0, 0, 0, f(No, false, "樂")}, + {0xf915, 0, 0, 0, f(No, false, "洛")}, + {0xf916, 0, 0, 0, f(No, false, "烙")}, + {0xf917, 0, 0, 0, f(No, false, "珞")}, + {0xf918, 0, 0, 0, f(No, false, "落")}, + {0xf919, 0, 0, 0, f(No, false, "酪")}, + {0xf91a, 0, 0, 0, f(No, false, "駱")}, + {0xf91b, 0, 0, 0, f(No, false, "亂")}, + {0xf91c, 0, 0, 0, f(No, false, "卵")}, + {0xf91d, 0, 0, 0, f(No, false, "欄")}, + {0xf91e, 0, 0, 0, f(No, false, "爛")}, + {0xf91f, 0, 0, 0, f(No, false, "蘭")}, + {0xf920, 0, 0, 0, f(No, false, "鸞")}, + {0xf921, 0, 0, 0, f(No, false, "嵐")}, + {0xf922, 0, 0, 0, f(No, false, "濫")}, + {0xf923, 0, 0, 0, f(No, false, "藍")}, + {0xf924, 0, 0, 0, f(No, false, "襤")}, + {0xf925, 0, 0, 0, f(No, false, "拉")}, + {0xf926, 0, 0, 0, f(No, false, "臘")}, + {0xf927, 0, 0, 0, f(No, false, "蠟")}, + {0xf928, 0, 0, 0, f(No, false, "廊")}, + {0xf929, 0, 0, 0, f(No, false, "朗")}, + {0xf92a, 0, 0, 0, f(No, false, "浪")}, + {0xf92b, 0, 0, 0, f(No, false, "狼")}, + {0xf92c, 0, 0, 0, f(No, false, "郎")}, + {0xf92d, 0, 0, 0, f(No, false, "來")}, + {0xf92e, 0, 0, 0, f(No, false, "冷")}, + {0xf92f, 0, 0, 0, f(No, false, "勞")}, + {0xf930, 0, 0, 0, f(No, false, "擄")}, + {0xf931, 0, 0, 0, f(No, false, "櫓")}, + {0xf932, 0, 0, 0, f(No, false, "爐")}, + {0xf933, 0, 0, 0, f(No, false, "盧")}, + {0xf934, 0, 0, 0, f(No, false, "老")}, + {0xf935, 0, 0, 0, f(No, false, "蘆")}, + {0xf936, 0, 0, 0, f(No, false, "虜")}, + {0xf937, 0, 0, 0, f(No, false, "路")}, + {0xf938, 0, 0, 0, f(No, false, "露")}, + {0xf939, 0, 0, 0, f(No, false, "魯")}, + {0xf93a, 0, 0, 0, f(No, false, "鷺")}, + {0xf93b, 0, 0, 0, f(No, false, "碌")}, + {0xf93c, 0, 0, 0, f(No, false, "祿")}, + {0xf93d, 0, 0, 0, f(No, false, "綠")}, + {0xf93e, 0, 0, 0, f(No, false, "菉")}, + {0xf93f, 0, 0, 0, f(No, false, "錄")}, + {0xf940, 0, 0, 0, f(No, false, "鹿")}, + {0xf941, 0, 0, 0, f(No, false, "論")}, + {0xf942, 0, 0, 0, f(No, false, "壟")}, + {0xf943, 0, 0, 0, f(No, false, "弄")}, + {0xf944, 0, 0, 0, f(No, false, "籠")}, + {0xf945, 0, 0, 0, f(No, false, "聾")}, + {0xf946, 0, 0, 0, f(No, false, "牢")}, + {0xf947, 0, 0, 0, f(No, false, "磊")}, + {0xf948, 0, 0, 0, f(No, false, "賂")}, + {0xf949, 0, 0, 0, f(No, false, "雷")}, + {0xf94a, 0, 0, 0, f(No, false, "壘")}, + {0xf94b, 0, 0, 0, f(No, false, "屢")}, + {0xf94c, 0, 0, 0, f(No, false, "樓")}, + {0xf94d, 0, 0, 0, f(No, false, "淚")}, + {0xf94e, 0, 0, 0, f(No, false, "漏")}, + {0xf94f, 0, 0, 0, f(No, false, "累")}, + {0xf950, 0, 0, 0, f(No, false, "縷")}, + {0xf951, 0, 0, 0, f(No, false, "陋")}, + {0xf952, 0, 0, 0, f(No, false, "勒")}, + {0xf953, 0, 0, 0, f(No, false, "肋")}, + {0xf954, 0, 0, 0, f(No, false, "凜")}, + {0xf955, 0, 0, 0, f(No, false, "凌")}, + {0xf956, 0, 0, 0, f(No, false, "稜")}, + {0xf957, 0, 0, 0, f(No, false, "綾")}, + {0xf958, 0, 0, 0, f(No, false, "菱")}, + {0xf959, 0, 0, 0, f(No, false, "陵")}, + {0xf95a, 0, 0, 0, f(No, false, "讀")}, + {0xf95b, 0, 0, 0, f(No, false, "拏")}, + {0xf95c, 0, 0, 0, f(No, false, "樂")}, + {0xf95d, 0, 0, 0, f(No, false, "諾")}, + {0xf95e, 0, 0, 0, f(No, false, "丹")}, + {0xf95f, 0, 0, 0, f(No, false, "寧")}, + {0xf960, 0, 0, 0, f(No, false, "怒")}, + {0xf961, 0, 0, 0, f(No, false, "率")}, + {0xf962, 0, 0, 0, f(No, false, "異")}, + {0xf963, 0, 0, 0, f(No, false, "北")}, + {0xf964, 0, 0, 0, f(No, false, "磻")}, + {0xf965, 0, 0, 0, f(No, false, "便")}, + {0xf966, 0, 0, 0, f(No, false, "復")}, + {0xf967, 0, 0, 0, f(No, false, "不")}, + {0xf968, 0, 0, 0, f(No, false, "泌")}, + {0xf969, 0, 0, 0, f(No, false, "數")}, + {0xf96a, 0, 0, 0, f(No, false, "索")}, + {0xf96b, 0, 0, 0, f(No, false, "參")}, + {0xf96c, 0, 0, 0, f(No, false, "塞")}, + {0xf96d, 0, 0, 0, f(No, false, "省")}, + {0xf96e, 0, 0, 0, f(No, false, "葉")}, + {0xf96f, 0, 0, 0, f(No, false, "說")}, + {0xf970, 0, 0, 0, f(No, false, "殺")}, + {0xf971, 0, 0, 0, f(No, false, "辰")}, + {0xf972, 0, 0, 0, f(No, false, "沈")}, + {0xf973, 0, 0, 0, f(No, false, "拾")}, + {0xf974, 0, 0, 0, f(No, false, "若")}, + {0xf975, 0, 0, 0, f(No, false, "掠")}, + {0xf976, 0, 0, 0, f(No, false, "略")}, + {0xf977, 0, 0, 0, f(No, false, "亮")}, + {0xf978, 0, 0, 0, f(No, false, "兩")}, + {0xf979, 0, 0, 0, f(No, false, "凉")}, + {0xf97a, 0, 0, 0, f(No, false, "梁")}, + {0xf97b, 0, 0, 0, f(No, false, "糧")}, + {0xf97c, 0, 0, 0, f(No, false, "良")}, + {0xf97d, 0, 0, 0, f(No, false, "諒")}, + {0xf97e, 0, 0, 0, f(No, false, "量")}, + {0xf97f, 0, 0, 0, f(No, false, "勵")}, + {0xf980, 0, 0, 0, f(No, false, "呂")}, + {0xf981, 0, 0, 0, f(No, false, "女")}, + {0xf982, 0, 0, 0, f(No, false, "廬")}, + {0xf983, 0, 0, 0, f(No, false, "旅")}, + {0xf984, 0, 0, 0, f(No, false, "濾")}, + {0xf985, 0, 0, 0, f(No, false, "礪")}, + {0xf986, 0, 0, 0, f(No, false, "閭")}, + {0xf987, 0, 0, 0, f(No, false, "驪")}, + {0xf988, 0, 0, 0, f(No, false, "麗")}, + {0xf989, 0, 0, 0, f(No, false, "黎")}, + {0xf98a, 0, 0, 0, f(No, false, "力")}, + {0xf98b, 0, 0, 0, f(No, false, "曆")}, + {0xf98c, 0, 0, 0, f(No, false, "歷")}, + {0xf98d, 0, 0, 0, f(No, false, "轢")}, + {0xf98e, 0, 0, 0, f(No, false, "年")}, + {0xf98f, 0, 0, 0, f(No, false, "憐")}, + {0xf990, 0, 0, 0, f(No, false, "戀")}, + {0xf991, 0, 0, 0, f(No, false, "撚")}, + {0xf992, 0, 0, 0, f(No, false, "漣")}, + {0xf993, 0, 0, 0, f(No, false, "煉")}, + {0xf994, 0, 0, 0, f(No, false, "璉")}, + {0xf995, 0, 0, 0, f(No, false, "秊")}, + {0xf996, 0, 0, 0, f(No, false, "練")}, + {0xf997, 0, 0, 0, f(No, false, "聯")}, + {0xf998, 0, 0, 0, f(No, false, "輦")}, + {0xf999, 0, 0, 0, f(No, false, "蓮")}, + {0xf99a, 0, 0, 0, f(No, false, "連")}, + {0xf99b, 0, 0, 0, f(No, false, "鍊")}, + {0xf99c, 0, 0, 0, f(No, false, "列")}, + {0xf99d, 0, 0, 0, f(No, false, "劣")}, + {0xf99e, 0, 0, 0, f(No, false, "咽")}, + {0xf99f, 0, 0, 0, f(No, false, "烈")}, + {0xf9a0, 0, 0, 0, f(No, false, "裂")}, + {0xf9a1, 0, 0, 0, f(No, false, "說")}, + {0xf9a2, 0, 0, 0, f(No, false, "廉")}, + {0xf9a3, 0, 0, 0, f(No, false, "念")}, + {0xf9a4, 0, 0, 0, f(No, false, "捻")}, + {0xf9a5, 0, 0, 0, f(No, false, "殮")}, + {0xf9a6, 0, 0, 0, f(No, false, "簾")}, + {0xf9a7, 0, 0, 0, f(No, false, "獵")}, + {0xf9a8, 0, 0, 0, f(No, false, "令")}, + {0xf9a9, 0, 0, 0, f(No, false, "囹")}, + {0xf9aa, 0, 0, 0, f(No, false, "寧")}, + {0xf9ab, 0, 0, 0, f(No, false, "嶺")}, + {0xf9ac, 0, 0, 0, f(No, false, "怜")}, + {0xf9ad, 0, 0, 0, f(No, false, "玲")}, + {0xf9ae, 0, 0, 0, f(No, false, "瑩")}, + {0xf9af, 0, 0, 0, f(No, false, "羚")}, + {0xf9b0, 0, 0, 0, f(No, false, "聆")}, + {0xf9b1, 0, 0, 0, f(No, false, "鈴")}, + {0xf9b2, 0, 0, 0, f(No, false, "零")}, + {0xf9b3, 0, 0, 0, f(No, false, "靈")}, + {0xf9b4, 0, 0, 0, f(No, false, "領")}, + {0xf9b5, 0, 0, 0, f(No, false, "例")}, + {0xf9b6, 0, 0, 0, f(No, false, "禮")}, + {0xf9b7, 0, 0, 0, f(No, false, "醴")}, + {0xf9b8, 0, 0, 0, f(No, false, "隸")}, + {0xf9b9, 0, 0, 0, f(No, false, "惡")}, + {0xf9ba, 0, 0, 0, f(No, false, "了")}, + {0xf9bb, 0, 0, 0, f(No, false, "僚")}, + {0xf9bc, 0, 0, 0, f(No, false, "寮")}, + {0xf9bd, 0, 0, 0, f(No, false, "尿")}, + {0xf9be, 0, 0, 0, f(No, false, "料")}, + {0xf9bf, 0, 0, 0, f(No, false, "樂")}, + {0xf9c0, 0, 0, 0, f(No, false, "燎")}, + {0xf9c1, 0, 0, 0, f(No, false, "療")}, + {0xf9c2, 0, 0, 0, f(No, false, "蓼")}, + {0xf9c3, 0, 0, 0, f(No, false, "遼")}, + {0xf9c4, 0, 0, 0, f(No, false, "龍")}, + {0xf9c5, 0, 0, 0, f(No, false, "暈")}, + {0xf9c6, 0, 0, 0, f(No, false, "阮")}, + {0xf9c7, 0, 0, 0, f(No, false, "劉")}, + {0xf9c8, 0, 0, 0, f(No, false, "杻")}, + {0xf9c9, 0, 0, 0, f(No, false, "柳")}, + {0xf9ca, 0, 0, 0, f(No, false, "流")}, + {0xf9cb, 0, 0, 0, f(No, false, "溜")}, + {0xf9cc, 0, 0, 0, f(No, false, "琉")}, + {0xf9cd, 0, 0, 0, f(No, false, "留")}, + {0xf9ce, 0, 0, 0, f(No, false, "硫")}, + {0xf9cf, 0, 0, 0, f(No, false, "紐")}, + {0xf9d0, 0, 0, 0, f(No, false, "類")}, + {0xf9d1, 0, 0, 0, f(No, false, "六")}, + {0xf9d2, 0, 0, 0, f(No, false, "戮")}, + {0xf9d3, 0, 0, 0, f(No, false, "陸")}, + {0xf9d4, 0, 0, 0, f(No, false, "倫")}, + {0xf9d5, 0, 0, 0, f(No, false, "崙")}, + {0xf9d6, 0, 0, 0, f(No, false, "淪")}, + {0xf9d7, 0, 0, 0, f(No, false, "輪")}, + {0xf9d8, 0, 0, 0, f(No, false, "律")}, + {0xf9d9, 0, 0, 0, f(No, false, "慄")}, + {0xf9da, 0, 0, 0, f(No, false, "栗")}, + {0xf9db, 0, 0, 0, f(No, false, "率")}, + {0xf9dc, 0, 0, 0, f(No, false, "隆")}, + {0xf9dd, 0, 0, 0, f(No, false, "利")}, + {0xf9de, 0, 0, 0, f(No, false, "吏")}, + {0xf9df, 0, 0, 0, f(No, false, "履")}, + {0xf9e0, 0, 0, 0, f(No, false, "易")}, + {0xf9e1, 0, 0, 0, f(No, false, "李")}, + {0xf9e2, 0, 0, 0, f(No, false, "梨")}, + {0xf9e3, 0, 0, 0, f(No, false, "泥")}, + {0xf9e4, 0, 0, 0, f(No, false, "理")}, + {0xf9e5, 0, 0, 0, f(No, false, "痢")}, + {0xf9e6, 0, 0, 0, f(No, false, "罹")}, + {0xf9e7, 0, 0, 0, f(No, false, "裏")}, + {0xf9e8, 0, 0, 0, f(No, false, "裡")}, + {0xf9e9, 0, 0, 0, f(No, false, "里")}, + {0xf9ea, 0, 0, 0, f(No, false, "離")}, + {0xf9eb, 0, 0, 0, f(No, false, "匿")}, + {0xf9ec, 0, 0, 0, f(No, false, "溺")}, + {0xf9ed, 0, 0, 0, f(No, false, "吝")}, + {0xf9ee, 0, 0, 0, f(No, false, "燐")}, + {0xf9ef, 0, 0, 0, f(No, false, "璘")}, + {0xf9f0, 0, 0, 0, f(No, false, "藺")}, + {0xf9f1, 0, 0, 0, f(No, false, "隣")}, + {0xf9f2, 0, 0, 0, f(No, false, "鱗")}, + {0xf9f3, 0, 0, 0, f(No, false, "麟")}, + {0xf9f4, 0, 0, 0, f(No, false, "林")}, + {0xf9f5, 0, 0, 0, f(No, false, "淋")}, + {0xf9f6, 0, 0, 0, f(No, false, "臨")}, + {0xf9f7, 0, 0, 0, f(No, false, "立")}, + {0xf9f8, 0, 0, 0, f(No, false, "笠")}, + {0xf9f9, 0, 0, 0, f(No, false, "粒")}, + {0xf9fa, 0, 0, 0, f(No, false, "狀")}, + {0xf9fb, 0, 0, 0, f(No, false, "炙")}, + {0xf9fc, 0, 0, 0, f(No, false, "識")}, + {0xf9fd, 0, 0, 0, f(No, false, "什")}, + {0xf9fe, 0, 0, 0, f(No, false, "茶")}, + {0xf9ff, 0, 0, 0, f(No, false, "刺")}, + {0xfa00, 0, 0, 0, f(No, false, "切")}, + {0xfa01, 0, 0, 0, f(No, false, "度")}, + {0xfa02, 0, 0, 0, f(No, false, "拓")}, + {0xfa03, 0, 0, 0, f(No, false, "糖")}, + {0xfa04, 0, 0, 0, f(No, false, "宅")}, + {0xfa05, 0, 0, 0, f(No, false, "洞")}, + {0xfa06, 0, 0, 0, f(No, false, "暴")}, + {0xfa07, 0, 0, 0, f(No, false, "輻")}, + {0xfa08, 0, 0, 0, f(No, false, "行")}, + {0xfa09, 0, 0, 0, f(No, false, "降")}, + {0xfa0a, 0, 0, 0, f(No, false, "見")}, + {0xfa0b, 0, 0, 0, f(No, false, "廓")}, + {0xfa0c, 0, 0, 0, f(No, false, "兀")}, + {0xfa0d, 0, 0, 0, f(No, false, "嗀")}, + {0xfa0e, 0, 0, 0, f(Yes, false, "")}, + {0xfa10, 0, 0, 0, f(No, false, "塚")}, + {0xfa11, 0, 0, 0, f(Yes, false, "")}, + {0xfa12, 0, 0, 0, f(No, false, "晴")}, + {0xfa13, 0, 0, 0, f(Yes, false, "")}, + {0xfa15, 0, 0, 0, f(No, false, "凞")}, + {0xfa16, 0, 0, 0, f(No, false, "猪")}, + {0xfa17, 0, 0, 0, f(No, false, "益")}, + {0xfa18, 0, 0, 0, f(No, false, "礼")}, + {0xfa19, 0, 0, 0, f(No, false, "神")}, + {0xfa1a, 0, 0, 0, f(No, false, "祥")}, + {0xfa1b, 0, 0, 0, f(No, false, "福")}, + {0xfa1c, 0, 0, 0, f(No, false, "靖")}, + {0xfa1d, 0, 0, 0, f(No, false, "精")}, + {0xfa1e, 0, 0, 0, f(No, false, "羽")}, + {0xfa1f, 0, 0, 0, f(Yes, false, "")}, + {0xfa20, 0, 0, 0, f(No, false, "蘒")}, + {0xfa21, 0, 0, 0, f(Yes, false, "")}, + {0xfa22, 0, 0, 0, f(No, false, "諸")}, + {0xfa23, 0, 0, 0, f(Yes, false, "")}, + {0xfa25, 0, 0, 0, f(No, false, "逸")}, + {0xfa26, 0, 0, 0, f(No, false, "都")}, + {0xfa27, 0, 0, 0, f(Yes, false, "")}, + {0xfa2a, 0, 0, 0, f(No, false, "飯")}, + {0xfa2b, 0, 0, 0, f(No, false, "飼")}, + {0xfa2c, 0, 0, 0, f(No, false, "館")}, + {0xfa2d, 0, 0, 0, f(No, false, "鶴")}, + {0xfa2e, 0, 0, 0, f(No, false, "郞")}, + {0xfa2f, 0, 0, 0, f(No, false, "隷")}, + {0xfa30, 0, 0, 0, f(No, false, "侮")}, + {0xfa31, 0, 0, 0, f(No, false, "僧")}, + {0xfa32, 0, 0, 0, f(No, false, "免")}, + {0xfa33, 0, 0, 0, f(No, false, "勉")}, + {0xfa34, 0, 0, 0, f(No, false, "勤")}, + {0xfa35, 0, 0, 0, f(No, false, "卑")}, + {0xfa36, 0, 0, 0, f(No, false, "喝")}, + {0xfa37, 0, 0, 0, f(No, false, "嘆")}, + {0xfa38, 0, 0, 0, f(No, false, "器")}, + {0xfa39, 0, 0, 0, f(No, false, "塀")}, + {0xfa3a, 0, 0, 0, f(No, false, "墨")}, + {0xfa3b, 0, 0, 0, f(No, false, "層")}, + {0xfa3c, 0, 0, 0, f(No, false, "屮")}, + {0xfa3d, 0, 0, 0, f(No, false, "悔")}, + {0xfa3e, 0, 0, 0, f(No, false, "慨")}, + {0xfa3f, 0, 0, 0, f(No, false, "憎")}, + {0xfa40, 0, 0, 0, f(No, false, "懲")}, + {0xfa41, 0, 0, 0, f(No, false, "敏")}, + {0xfa42, 0, 0, 0, f(No, false, "既")}, + {0xfa43, 0, 0, 0, f(No, false, "暑")}, + {0xfa44, 0, 0, 0, f(No, false, "梅")}, + {0xfa45, 0, 0, 0, f(No, false, "海")}, + {0xfa46, 0, 0, 0, f(No, false, "渚")}, + {0xfa47, 0, 0, 0, f(No, false, "漢")}, + {0xfa48, 0, 0, 0, f(No, false, "煮")}, + {0xfa49, 0, 0, 0, f(No, false, "爫")}, + {0xfa4a, 0, 0, 0, f(No, false, "琢")}, + {0xfa4b, 0, 0, 0, f(No, false, "碑")}, + {0xfa4c, 0, 0, 0, f(No, false, "社")}, + {0xfa4d, 0, 0, 0, f(No, false, "祉")}, + {0xfa4e, 0, 0, 0, f(No, false, "祈")}, + {0xfa4f, 0, 0, 0, f(No, false, "祐")}, + {0xfa50, 0, 0, 0, f(No, false, "祖")}, + {0xfa51, 0, 0, 0, f(No, false, "祝")}, + {0xfa52, 0, 0, 0, f(No, false, "禍")}, + {0xfa53, 0, 0, 0, f(No, false, "禎")}, + {0xfa54, 0, 0, 0, f(No, false, "穀")}, + {0xfa55, 0, 0, 0, f(No, false, "突")}, + {0xfa56, 0, 0, 0, f(No, false, "節")}, + {0xfa57, 0, 0, 0, f(No, false, "練")}, + {0xfa58, 0, 0, 0, f(No, false, "縉")}, + {0xfa59, 0, 0, 0, f(No, false, "繁")}, + {0xfa5a, 0, 0, 0, f(No, false, "署")}, + {0xfa5b, 0, 0, 0, f(No, false, "者")}, + {0xfa5c, 0, 0, 0, f(No, false, "臭")}, + {0xfa5d, 0, 0, 0, f(No, false, "艹")}, + {0xfa5f, 0, 0, 0, f(No, false, "著")}, + {0xfa60, 0, 0, 0, f(No, false, "褐")}, + {0xfa61, 0, 0, 0, f(No, false, "視")}, + {0xfa62, 0, 0, 0, f(No, false, "謁")}, + {0xfa63, 0, 0, 0, f(No, false, "謹")}, + {0xfa64, 0, 0, 0, f(No, false, "賓")}, + {0xfa65, 0, 0, 0, f(No, false, "贈")}, + {0xfa66, 0, 0, 0, f(No, false, "辶")}, + {0xfa67, 0, 0, 0, f(No, false, "逸")}, + {0xfa68, 0, 0, 0, f(No, false, "難")}, + {0xfa69, 0, 0, 0, f(No, false, "響")}, + {0xfa6a, 0, 0, 0, f(No, false, "頻")}, + {0xfa6b, 0, 0, 0, f(No, false, "恵")}, + {0xfa6c, 0, 0, 0, f(No, false, "𤋮")}, + {0xfa6d, 0, 0, 0, f(No, false, "舘")}, + {0xfa6e, 0, 0, 0, f(Yes, false, "")}, + {0xfa70, 0, 0, 0, f(No, false, "並")}, + {0xfa71, 0, 0, 0, f(No, false, "况")}, + {0xfa72, 0, 0, 0, f(No, false, "全")}, + {0xfa73, 0, 0, 0, f(No, false, "侀")}, + {0xfa74, 0, 0, 0, f(No, false, "充")}, + {0xfa75, 0, 0, 0, f(No, false, "冀")}, + {0xfa76, 0, 0, 0, f(No, false, "勇")}, + {0xfa77, 0, 0, 0, f(No, false, "勺")}, + {0xfa78, 0, 0, 0, f(No, false, "喝")}, + {0xfa79, 0, 0, 0, f(No, false, "啕")}, + {0xfa7a, 0, 0, 0, f(No, false, "喙")}, + {0xfa7b, 0, 0, 0, f(No, false, "嗢")}, + {0xfa7c, 0, 0, 0, f(No, false, "塚")}, + {0xfa7d, 0, 0, 0, f(No, false, "墳")}, + {0xfa7e, 0, 0, 0, f(No, false, "奄")}, + {0xfa7f, 0, 0, 0, f(No, false, "奔")}, + {0xfa80, 0, 0, 0, f(No, false, "婢")}, + {0xfa81, 0, 0, 0, f(No, false, "嬨")}, + {0xfa82, 0, 0, 0, f(No, false, "廒")}, + {0xfa83, 0, 0, 0, f(No, false, "廙")}, + {0xfa84, 0, 0, 0, f(No, false, "彩")}, + {0xfa85, 0, 0, 0, f(No, false, "徭")}, + {0xfa86, 0, 0, 0, f(No, false, "惘")}, + {0xfa87, 0, 0, 0, f(No, false, "慎")}, + {0xfa88, 0, 0, 0, f(No, false, "愈")}, + {0xfa89, 0, 0, 0, f(No, false, "憎")}, + {0xfa8a, 0, 0, 0, f(No, false, "慠")}, + {0xfa8b, 0, 0, 0, f(No, false, "懲")}, + {0xfa8c, 0, 0, 0, f(No, false, "戴")}, + {0xfa8d, 0, 0, 0, f(No, false, "揄")}, + {0xfa8e, 0, 0, 0, f(No, false, "搜")}, + {0xfa8f, 0, 0, 0, f(No, false, "摒")}, + {0xfa90, 0, 0, 0, f(No, false, "敖")}, + {0xfa91, 0, 0, 0, f(No, false, "晴")}, + {0xfa92, 0, 0, 0, f(No, false, "朗")}, + {0xfa93, 0, 0, 0, f(No, false, "望")}, + {0xfa94, 0, 0, 0, f(No, false, "杖")}, + {0xfa95, 0, 0, 0, f(No, false, "歹")}, + {0xfa96, 0, 0, 0, f(No, false, "殺")}, + {0xfa97, 0, 0, 0, f(No, false, "流")}, + {0xfa98, 0, 0, 0, f(No, false, "滛")}, + {0xfa99, 0, 0, 0, f(No, false, "滋")}, + {0xfa9a, 0, 0, 0, f(No, false, "漢")}, + {0xfa9b, 0, 0, 0, f(No, false, "瀞")}, + {0xfa9c, 0, 0, 0, f(No, false, "煮")}, + {0xfa9d, 0, 0, 0, f(No, false, "瞧")}, + {0xfa9e, 0, 0, 0, f(No, false, "爵")}, + {0xfa9f, 0, 0, 0, f(No, false, "犯")}, + {0xfaa0, 0, 0, 0, f(No, false, "猪")}, + {0xfaa1, 0, 0, 0, f(No, false, "瑱")}, + {0xfaa2, 0, 0, 0, f(No, false, "甆")}, + {0xfaa3, 0, 0, 0, f(No, false, "画")}, + {0xfaa4, 0, 0, 0, f(No, false, "瘝")}, + {0xfaa5, 0, 0, 0, f(No, false, "瘟")}, + {0xfaa6, 0, 0, 0, f(No, false, "益")}, + {0xfaa7, 0, 0, 0, f(No, false, "盛")}, + {0xfaa8, 0, 0, 0, f(No, false, "直")}, + {0xfaa9, 0, 0, 0, f(No, false, "睊")}, + {0xfaaa, 0, 0, 0, f(No, false, "着")}, + {0xfaab, 0, 0, 0, f(No, false, "磌")}, + {0xfaac, 0, 0, 0, f(No, false, "窱")}, + {0xfaad, 0, 0, 0, f(No, false, "節")}, + {0xfaae, 0, 0, 0, f(No, false, "类")}, + {0xfaaf, 0, 0, 0, f(No, false, "絛")}, + {0xfab0, 0, 0, 0, f(No, false, "練")}, + {0xfab1, 0, 0, 0, f(No, false, "缾")}, + {0xfab2, 0, 0, 0, f(No, false, "者")}, + {0xfab3, 0, 0, 0, f(No, false, "荒")}, + {0xfab4, 0, 0, 0, f(No, false, "華")}, + {0xfab5, 0, 0, 0, f(No, false, "蝹")}, + {0xfab6, 0, 0, 0, f(No, false, "襁")}, + {0xfab7, 0, 0, 0, f(No, false, "覆")}, + {0xfab8, 0, 0, 0, f(No, false, "視")}, + {0xfab9, 0, 0, 0, f(No, false, "調")}, + {0xfaba, 0, 0, 0, f(No, false, "諸")}, + {0xfabb, 0, 0, 0, f(No, false, "請")}, + {0xfabc, 0, 0, 0, f(No, false, "謁")}, + {0xfabd, 0, 0, 0, f(No, false, "諾")}, + {0xfabe, 0, 0, 0, f(No, false, "諭")}, + {0xfabf, 0, 0, 0, f(No, false, "謹")}, + {0xfac0, 0, 0, 0, f(No, false, "變")}, + {0xfac1, 0, 0, 0, f(No, false, "贈")}, + {0xfac2, 0, 0, 0, f(No, false, "輸")}, + {0xfac3, 0, 0, 0, f(No, false, "遲")}, + {0xfac4, 0, 0, 0, f(No, false, "醙")}, + {0xfac5, 0, 0, 0, f(No, false, "鉶")}, + {0xfac6, 0, 0, 0, f(No, false, "陼")}, + {0xfac7, 0, 0, 0, f(No, false, "難")}, + {0xfac8, 0, 0, 0, f(No, false, "靖")}, + {0xfac9, 0, 0, 0, f(No, false, "韛")}, + {0xfaca, 0, 0, 0, f(No, false, "響")}, + {0xfacb, 0, 0, 0, f(No, false, "頋")}, + {0xfacc, 0, 0, 0, f(No, false, "頻")}, + {0xfacd, 0, 0, 0, f(No, false, "鬒")}, + {0xface, 0, 0, 0, f(No, false, "龜")}, + {0xfacf, 0, 0, 0, f(No, false, "𢡊")}, + {0xfad0, 0, 0, 0, f(No, false, "𢡄")}, + {0xfad1, 0, 0, 0, f(No, false, "𣏕")}, + {0xfad2, 0, 0, 0, f(No, false, "㮝")}, + {0xfad3, 0, 0, 0, f(No, false, "䀘")}, + {0xfad4, 0, 0, 0, f(No, false, "䀹")}, + {0xfad5, 0, 0, 0, f(No, false, "𥉉")}, + {0xfad6, 0, 0, 0, f(No, false, "𥳐")}, + {0xfad7, 0, 0, 0, f(No, false, "𧻓")}, + {0xfad8, 0, 0, 0, f(No, false, "齃")}, + {0xfad9, 0, 0, 0, f(No, false, "龎")}, + {0xfada, 0, 0, 0, f(Yes, false, "")}, + {0xfb00, 0, 0, 0, g(Yes, No, false, false, "", "ff")}, + {0xfb01, 0, 0, 0, g(Yes, No, false, false, "", "fi")}, + {0xfb02, 0, 0, 0, g(Yes, No, false, false, "", "fl")}, + {0xfb03, 0, 0, 0, g(Yes, No, false, false, "", "ffi")}, + {0xfb04, 0, 0, 0, g(Yes, No, false, false, "", "ffl")}, + {0xfb05, 0, 0, 0, g(Yes, No, false, false, "", "st")}, + {0xfb07, 0, 0, 0, f(Yes, false, "")}, + {0xfb13, 0, 0, 0, g(Yes, No, false, false, "", "մն")}, + {0xfb14, 0, 0, 0, g(Yes, No, false, false, "", "մե")}, + {0xfb15, 0, 0, 0, g(Yes, No, false, false, "", "մի")}, + {0xfb16, 0, 0, 0, g(Yes, No, false, false, "", "վն")}, + {0xfb17, 0, 0, 0, g(Yes, No, false, false, "", "մխ")}, + {0xfb18, 0, 0, 0, f(Yes, false, "")}, + {0xfb1d, 0, 0, 1, f(No, false, "יִ")}, + {0xfb1e, 26, 1, 1, f(Yes, false, "")}, + {0xfb1f, 0, 0, 1, f(No, false, "ײַ")}, + {0xfb20, 0, 0, 0, g(Yes, No, false, false, "", "ע")}, + {0xfb21, 0, 0, 0, g(Yes, No, false, false, "", "א")}, + {0xfb22, 0, 0, 0, g(Yes, No, false, false, "", "ד")}, + {0xfb23, 0, 0, 0, g(Yes, No, false, false, "", "ה")}, + {0xfb24, 0, 0, 0, g(Yes, No, false, false, "", "כ")}, + {0xfb25, 0, 0, 0, g(Yes, No, false, false, "", "ל")}, + {0xfb26, 0, 0, 0, g(Yes, No, false, false, "", "ם")}, + {0xfb27, 0, 0, 0, g(Yes, No, false, false, "", "ר")}, + {0xfb28, 0, 0, 0, g(Yes, No, false, false, "", "ת")}, + {0xfb29, 0, 0, 0, g(Yes, No, false, false, "", "+")}, + {0xfb2a, 0, 0, 1, f(No, false, "שׁ")}, + {0xfb2b, 0, 0, 1, f(No, false, "שׂ")}, + {0xfb2c, 0, 0, 2, f(No, false, "שּׁ")}, + {0xfb2d, 0, 0, 2, f(No, false, "שּׂ")}, + {0xfb2e, 0, 0, 1, f(No, false, "אַ")}, + {0xfb2f, 0, 0, 1, f(No, false, "אָ")}, + {0xfb30, 0, 0, 1, f(No, false, "אּ")}, + {0xfb31, 0, 0, 1, f(No, false, "בּ")}, + {0xfb32, 0, 0, 1, f(No, false, "גּ")}, + {0xfb33, 0, 0, 1, f(No, false, "דּ")}, + {0xfb34, 0, 0, 1, f(No, false, "הּ")}, + {0xfb35, 0, 0, 1, f(No, false, "וּ")}, + {0xfb36, 0, 0, 1, f(No, false, "זּ")}, + {0xfb37, 0, 0, 0, f(Yes, false, "")}, + {0xfb38, 0, 0, 1, f(No, false, "טּ")}, + {0xfb39, 0, 0, 1, f(No, false, "יּ")}, + {0xfb3a, 0, 0, 1, f(No, false, "ךּ")}, + {0xfb3b, 0, 0, 1, f(No, false, "כּ")}, + {0xfb3c, 0, 0, 1, f(No, false, "לּ")}, + {0xfb3d, 0, 0, 0, f(Yes, false, "")}, + {0xfb3e, 0, 0, 1, f(No, false, "מּ")}, + {0xfb3f, 0, 0, 0, f(Yes, false, "")}, + {0xfb40, 0, 0, 1, f(No, false, "נּ")}, + {0xfb41, 0, 0, 1, f(No, false, "סּ")}, + {0xfb42, 0, 0, 0, f(Yes, false, "")}, + {0xfb43, 0, 0, 1, f(No, false, "ףּ")}, + {0xfb44, 0, 0, 1, f(No, false, "פּ")}, + {0xfb45, 0, 0, 0, f(Yes, false, "")}, + {0xfb46, 0, 0, 1, f(No, false, "צּ")}, + {0xfb47, 0, 0, 1, f(No, false, "קּ")}, + {0xfb48, 0, 0, 1, f(No, false, "רּ")}, + {0xfb49, 0, 0, 1, f(No, false, "שּ")}, + {0xfb4a, 0, 0, 1, f(No, false, "תּ")}, + {0xfb4b, 0, 0, 1, f(No, false, "וֹ")}, + {0xfb4c, 0, 0, 1, f(No, false, "בֿ")}, + {0xfb4d, 0, 0, 1, f(No, false, "כֿ")}, + {0xfb4e, 0, 0, 1, f(No, false, "פֿ")}, + {0xfb4f, 0, 0, 0, g(Yes, No, false, false, "", "אל")}, + {0xfb50, 0, 0, 0, g(Yes, No, false, false, "", "ٱ")}, + {0xfb52, 0, 0, 0, g(Yes, No, false, false, "", "ٻ")}, + {0xfb56, 0, 0, 0, g(Yes, No, false, false, "", "پ")}, + {0xfb5a, 0, 0, 0, g(Yes, No, false, false, "", "ڀ")}, + {0xfb5e, 0, 0, 0, g(Yes, No, false, false, "", "ٺ")}, + {0xfb62, 0, 0, 0, g(Yes, No, false, false, "", "ٿ")}, + {0xfb66, 0, 0, 0, g(Yes, No, false, false, "", "ٹ")}, + {0xfb6a, 0, 0, 0, g(Yes, No, false, false, "", "ڤ")}, + {0xfb6e, 0, 0, 0, g(Yes, No, false, false, "", "ڦ")}, + {0xfb72, 0, 0, 0, g(Yes, No, false, false, "", "ڄ")}, + {0xfb76, 0, 0, 0, g(Yes, No, false, false, "", "ڃ")}, + {0xfb7a, 0, 0, 0, g(Yes, No, false, false, "", "چ")}, + {0xfb7e, 0, 0, 0, g(Yes, No, false, false, "", "ڇ")}, + {0xfb82, 0, 0, 0, g(Yes, No, false, false, "", "ڍ")}, + {0xfb84, 0, 0, 0, g(Yes, No, false, false, "", "ڌ")}, + {0xfb86, 0, 0, 0, g(Yes, No, false, false, "", "ڎ")}, + {0xfb88, 0, 0, 0, g(Yes, No, false, false, "", "ڈ")}, + {0xfb8a, 0, 0, 0, g(Yes, No, false, false, "", "ژ")}, + {0xfb8c, 0, 0, 0, g(Yes, No, false, false, "", "ڑ")}, + {0xfb8e, 0, 0, 0, g(Yes, No, false, false, "", "ک")}, + {0xfb92, 0, 0, 0, g(Yes, No, false, false, "", "گ")}, + {0xfb96, 0, 0, 0, g(Yes, No, false, false, "", "ڳ")}, + {0xfb9a, 0, 0, 0, g(Yes, No, false, false, "", "ڱ")}, + {0xfb9e, 0, 0, 0, g(Yes, No, false, false, "", "ں")}, + {0xfba0, 0, 0, 0, g(Yes, No, false, false, "", "ڻ")}, + {0xfba4, 0, 0, 1, g(Yes, No, false, false, "", "ۀ")}, + {0xfba6, 0, 0, 0, g(Yes, No, false, false, "", "ہ")}, + {0xfbaa, 0, 0, 0, g(Yes, No, false, false, "", "ھ")}, + {0xfbae, 0, 0, 0, g(Yes, No, false, false, "", "ے")}, + {0xfbb0, 0, 0, 1, g(Yes, No, false, false, "", "ۓ")}, + {0xfbb2, 0, 0, 0, f(Yes, false, "")}, + {0xfbd3, 0, 0, 0, g(Yes, No, false, false, "", "ڭ")}, + {0xfbd7, 0, 0, 0, g(Yes, No, false, false, "", "ۇ")}, + {0xfbd9, 0, 0, 0, g(Yes, No, false, false, "", "ۆ")}, + {0xfbdb, 0, 0, 0, g(Yes, No, false, false, "", "ۈ")}, + {0xfbdd, 0, 0, 0, g(Yes, No, false, false, "", "ۇٴ")}, + {0xfbde, 0, 0, 0, g(Yes, No, false, false, "", "ۋ")}, + {0xfbe0, 0, 0, 0, g(Yes, No, false, false, "", "ۅ")}, + {0xfbe2, 0, 0, 0, g(Yes, No, false, false, "", "ۉ")}, + {0xfbe4, 0, 0, 0, g(Yes, No, false, false, "", "ې")}, + {0xfbe8, 0, 0, 0, g(Yes, No, false, false, "", "ى")}, + {0xfbea, 0, 0, 0, g(Yes, No, false, false, "", "ئا")}, + {0xfbec, 0, 0, 0, g(Yes, No, false, false, "", "ئە")}, + {0xfbee, 0, 0, 0, g(Yes, No, false, false, "", "ئو")}, + {0xfbf0, 0, 0, 0, g(Yes, No, false, false, "", "ئۇ")}, + {0xfbf2, 0, 0, 0, g(Yes, No, false, false, "", "ئۆ")}, + {0xfbf4, 0, 0, 0, g(Yes, No, false, false, "", "ئۈ")}, + {0xfbf6, 0, 0, 0, g(Yes, No, false, false, "", "ئې")}, + {0xfbf9, 0, 0, 0, g(Yes, No, false, false, "", "ئى")}, + {0xfbfc, 0, 0, 0, g(Yes, No, false, false, "", "ی")}, + {0xfc00, 0, 0, 0, g(Yes, No, false, false, "", "ئج")}, + {0xfc01, 0, 0, 0, g(Yes, No, false, false, "", "ئح")}, + {0xfc02, 0, 0, 0, g(Yes, No, false, false, "", "ئم")}, + {0xfc03, 0, 0, 0, g(Yes, No, false, false, "", "ئى")}, + {0xfc04, 0, 0, 0, g(Yes, No, false, false, "", "ئي")}, + {0xfc05, 0, 0, 0, g(Yes, No, false, false, "", "بج")}, + {0xfc06, 0, 0, 0, g(Yes, No, false, false, "", "بح")}, + {0xfc07, 0, 0, 0, g(Yes, No, false, false, "", "بخ")}, + {0xfc08, 0, 0, 0, g(Yes, No, false, false, "", "بم")}, + {0xfc09, 0, 0, 0, g(Yes, No, false, false, "", "بى")}, + {0xfc0a, 0, 0, 0, g(Yes, No, false, false, "", "بي")}, + {0xfc0b, 0, 0, 0, g(Yes, No, false, false, "", "تج")}, + {0xfc0c, 0, 0, 0, g(Yes, No, false, false, "", "تح")}, + {0xfc0d, 0, 0, 0, g(Yes, No, false, false, "", "تخ")}, + {0xfc0e, 0, 0, 0, g(Yes, No, false, false, "", "تم")}, + {0xfc0f, 0, 0, 0, g(Yes, No, false, false, "", "تى")}, + {0xfc10, 0, 0, 0, g(Yes, No, false, false, "", "تي")}, + {0xfc11, 0, 0, 0, g(Yes, No, false, false, "", "ثج")}, + {0xfc12, 0, 0, 0, g(Yes, No, false, false, "", "ثم")}, + {0xfc13, 0, 0, 0, g(Yes, No, false, false, "", "ثى")}, + {0xfc14, 0, 0, 0, g(Yes, No, false, false, "", "ثي")}, + {0xfc15, 0, 0, 0, g(Yes, No, false, false, "", "جح")}, + {0xfc16, 0, 0, 0, g(Yes, No, false, false, "", "جم")}, + {0xfc17, 0, 0, 0, g(Yes, No, false, false, "", "حج")}, + {0xfc18, 0, 0, 0, g(Yes, No, false, false, "", "حم")}, + {0xfc19, 0, 0, 0, g(Yes, No, false, false, "", "خج")}, + {0xfc1a, 0, 0, 0, g(Yes, No, false, false, "", "خح")}, + {0xfc1b, 0, 0, 0, g(Yes, No, false, false, "", "خم")}, + {0xfc1c, 0, 0, 0, g(Yes, No, false, false, "", "سج")}, + {0xfc1d, 0, 0, 0, g(Yes, No, false, false, "", "سح")}, + {0xfc1e, 0, 0, 0, g(Yes, No, false, false, "", "سخ")}, + {0xfc1f, 0, 0, 0, g(Yes, No, false, false, "", "سم")}, + {0xfc20, 0, 0, 0, g(Yes, No, false, false, "", "صح")}, + {0xfc21, 0, 0, 0, g(Yes, No, false, false, "", "صم")}, + {0xfc22, 0, 0, 0, g(Yes, No, false, false, "", "ضج")}, + {0xfc23, 0, 0, 0, g(Yes, No, false, false, "", "ضح")}, + {0xfc24, 0, 0, 0, g(Yes, No, false, false, "", "ضخ")}, + {0xfc25, 0, 0, 0, g(Yes, No, false, false, "", "ضم")}, + {0xfc26, 0, 0, 0, g(Yes, No, false, false, "", "طح")}, + {0xfc27, 0, 0, 0, g(Yes, No, false, false, "", "طم")}, + {0xfc28, 0, 0, 0, g(Yes, No, false, false, "", "ظم")}, + {0xfc29, 0, 0, 0, g(Yes, No, false, false, "", "عج")}, + {0xfc2a, 0, 0, 0, g(Yes, No, false, false, "", "عم")}, + {0xfc2b, 0, 0, 0, g(Yes, No, false, false, "", "غج")}, + {0xfc2c, 0, 0, 0, g(Yes, No, false, false, "", "غم")}, + {0xfc2d, 0, 0, 0, g(Yes, No, false, false, "", "فج")}, + {0xfc2e, 0, 0, 0, g(Yes, No, false, false, "", "فح")}, + {0xfc2f, 0, 0, 0, g(Yes, No, false, false, "", "فخ")}, + {0xfc30, 0, 0, 0, g(Yes, No, false, false, "", "فم")}, + {0xfc31, 0, 0, 0, g(Yes, No, false, false, "", "فى")}, + {0xfc32, 0, 0, 0, g(Yes, No, false, false, "", "في")}, + {0xfc33, 0, 0, 0, g(Yes, No, false, false, "", "قح")}, + {0xfc34, 0, 0, 0, g(Yes, No, false, false, "", "قم")}, + {0xfc35, 0, 0, 0, g(Yes, No, false, false, "", "قى")}, + {0xfc36, 0, 0, 0, g(Yes, No, false, false, "", "قي")}, + {0xfc37, 0, 0, 0, g(Yes, No, false, false, "", "كا")}, + {0xfc38, 0, 0, 0, g(Yes, No, false, false, "", "كج")}, + {0xfc39, 0, 0, 0, g(Yes, No, false, false, "", "كح")}, + {0xfc3a, 0, 0, 0, g(Yes, No, false, false, "", "كخ")}, + {0xfc3b, 0, 0, 0, g(Yes, No, false, false, "", "كل")}, + {0xfc3c, 0, 0, 0, g(Yes, No, false, false, "", "كم")}, + {0xfc3d, 0, 0, 0, g(Yes, No, false, false, "", "كى")}, + {0xfc3e, 0, 0, 0, g(Yes, No, false, false, "", "كي")}, + {0xfc3f, 0, 0, 0, g(Yes, No, false, false, "", "لج")}, + {0xfc40, 0, 0, 0, g(Yes, No, false, false, "", "لح")}, + {0xfc41, 0, 0, 0, g(Yes, No, false, false, "", "لخ")}, + {0xfc42, 0, 0, 0, g(Yes, No, false, false, "", "لم")}, + {0xfc43, 0, 0, 0, g(Yes, No, false, false, "", "لى")}, + {0xfc44, 0, 0, 0, g(Yes, No, false, false, "", "لي")}, + {0xfc45, 0, 0, 0, g(Yes, No, false, false, "", "مج")}, + {0xfc46, 0, 0, 0, g(Yes, No, false, false, "", "مح")}, + {0xfc47, 0, 0, 0, g(Yes, No, false, false, "", "مخ")}, + {0xfc48, 0, 0, 0, g(Yes, No, false, false, "", "مم")}, + {0xfc49, 0, 0, 0, g(Yes, No, false, false, "", "مى")}, + {0xfc4a, 0, 0, 0, g(Yes, No, false, false, "", "مي")}, + {0xfc4b, 0, 0, 0, g(Yes, No, false, false, "", "نج")}, + {0xfc4c, 0, 0, 0, g(Yes, No, false, false, "", "نح")}, + {0xfc4d, 0, 0, 0, g(Yes, No, false, false, "", "نخ")}, + {0xfc4e, 0, 0, 0, g(Yes, No, false, false, "", "نم")}, + {0xfc4f, 0, 0, 0, g(Yes, No, false, false, "", "نى")}, + {0xfc50, 0, 0, 0, g(Yes, No, false, false, "", "ني")}, + {0xfc51, 0, 0, 0, g(Yes, No, false, false, "", "هج")}, + {0xfc52, 0, 0, 0, g(Yes, No, false, false, "", "هم")}, + {0xfc53, 0, 0, 0, g(Yes, No, false, false, "", "هى")}, + {0xfc54, 0, 0, 0, g(Yes, No, false, false, "", "هي")}, + {0xfc55, 0, 0, 0, g(Yes, No, false, false, "", "يج")}, + {0xfc56, 0, 0, 0, g(Yes, No, false, false, "", "يح")}, + {0xfc57, 0, 0, 0, g(Yes, No, false, false, "", "يخ")}, + {0xfc58, 0, 0, 0, g(Yes, No, false, false, "", "يم")}, + {0xfc59, 0, 0, 0, g(Yes, No, false, false, "", "يى")}, + {0xfc5a, 0, 0, 0, g(Yes, No, false, false, "", "يي")}, + {0xfc5b, 0, 0, 1, g(Yes, No, false, false, "", "ذٰ")}, + {0xfc5c, 0, 0, 1, g(Yes, No, false, false, "", "رٰ")}, + {0xfc5d, 0, 0, 1, g(Yes, No, false, false, "", "ىٰ")}, + {0xfc5e, 0, 0, 2, g(Yes, No, false, false, "", " ٌّ")}, + {0xfc5f, 0, 0, 2, g(Yes, No, false, false, "", " ٍّ")}, + {0xfc60, 0, 0, 2, g(Yes, No, false, false, "", " َّ")}, + {0xfc61, 0, 0, 2, g(Yes, No, false, false, "", " ُّ")}, + {0xfc62, 0, 0, 2, g(Yes, No, false, false, "", " ِّ")}, + {0xfc63, 0, 0, 2, g(Yes, No, false, false, "", " ّٰ")}, + {0xfc64, 0, 0, 0, g(Yes, No, false, false, "", "ئر")}, + {0xfc65, 0, 0, 0, g(Yes, No, false, false, "", "ئز")}, + {0xfc66, 0, 0, 0, g(Yes, No, false, false, "", "ئم")}, + {0xfc67, 0, 0, 0, g(Yes, No, false, false, "", "ئن")}, + {0xfc68, 0, 0, 0, g(Yes, No, false, false, "", "ئى")}, + {0xfc69, 0, 0, 0, g(Yes, No, false, false, "", "ئي")}, + {0xfc6a, 0, 0, 0, g(Yes, No, false, false, "", "بر")}, + {0xfc6b, 0, 0, 0, g(Yes, No, false, false, "", "بز")}, + {0xfc6c, 0, 0, 0, g(Yes, No, false, false, "", "بم")}, + {0xfc6d, 0, 0, 0, g(Yes, No, false, false, "", "بن")}, + {0xfc6e, 0, 0, 0, g(Yes, No, false, false, "", "بى")}, + {0xfc6f, 0, 0, 0, g(Yes, No, false, false, "", "بي")}, + {0xfc70, 0, 0, 0, g(Yes, No, false, false, "", "تر")}, + {0xfc71, 0, 0, 0, g(Yes, No, false, false, "", "تز")}, + {0xfc72, 0, 0, 0, g(Yes, No, false, false, "", "تم")}, + {0xfc73, 0, 0, 0, g(Yes, No, false, false, "", "تن")}, + {0xfc74, 0, 0, 0, g(Yes, No, false, false, "", "تى")}, + {0xfc75, 0, 0, 0, g(Yes, No, false, false, "", "تي")}, + {0xfc76, 0, 0, 0, g(Yes, No, false, false, "", "ثر")}, + {0xfc77, 0, 0, 0, g(Yes, No, false, false, "", "ثز")}, + {0xfc78, 0, 0, 0, g(Yes, No, false, false, "", "ثم")}, + {0xfc79, 0, 0, 0, g(Yes, No, false, false, "", "ثن")}, + {0xfc7a, 0, 0, 0, g(Yes, No, false, false, "", "ثى")}, + {0xfc7b, 0, 0, 0, g(Yes, No, false, false, "", "ثي")}, + {0xfc7c, 0, 0, 0, g(Yes, No, false, false, "", "فى")}, + {0xfc7d, 0, 0, 0, g(Yes, No, false, false, "", "في")}, + {0xfc7e, 0, 0, 0, g(Yes, No, false, false, "", "قى")}, + {0xfc7f, 0, 0, 0, g(Yes, No, false, false, "", "قي")}, + {0xfc80, 0, 0, 0, g(Yes, No, false, false, "", "كا")}, + {0xfc81, 0, 0, 0, g(Yes, No, false, false, "", "كل")}, + {0xfc82, 0, 0, 0, g(Yes, No, false, false, "", "كم")}, + {0xfc83, 0, 0, 0, g(Yes, No, false, false, "", "كى")}, + {0xfc84, 0, 0, 0, g(Yes, No, false, false, "", "كي")}, + {0xfc85, 0, 0, 0, g(Yes, No, false, false, "", "لم")}, + {0xfc86, 0, 0, 0, g(Yes, No, false, false, "", "لى")}, + {0xfc87, 0, 0, 0, g(Yes, No, false, false, "", "لي")}, + {0xfc88, 0, 0, 0, g(Yes, No, false, false, "", "ما")}, + {0xfc89, 0, 0, 0, g(Yes, No, false, false, "", "مم")}, + {0xfc8a, 0, 0, 0, g(Yes, No, false, false, "", "نر")}, + {0xfc8b, 0, 0, 0, g(Yes, No, false, false, "", "نز")}, + {0xfc8c, 0, 0, 0, g(Yes, No, false, false, "", "نم")}, + {0xfc8d, 0, 0, 0, g(Yes, No, false, false, "", "نن")}, + {0xfc8e, 0, 0, 0, g(Yes, No, false, false, "", "نى")}, + {0xfc8f, 0, 0, 0, g(Yes, No, false, false, "", "ني")}, + {0xfc90, 0, 0, 1, g(Yes, No, false, false, "", "ىٰ")}, + {0xfc91, 0, 0, 0, g(Yes, No, false, false, "", "ير")}, + {0xfc92, 0, 0, 0, g(Yes, No, false, false, "", "يز")}, + {0xfc93, 0, 0, 0, g(Yes, No, false, false, "", "يم")}, + {0xfc94, 0, 0, 0, g(Yes, No, false, false, "", "ين")}, + {0xfc95, 0, 0, 0, g(Yes, No, false, false, "", "يى")}, + {0xfc96, 0, 0, 0, g(Yes, No, false, false, "", "يي")}, + {0xfc97, 0, 0, 0, g(Yes, No, false, false, "", "ئج")}, + {0xfc98, 0, 0, 0, g(Yes, No, false, false, "", "ئح")}, + {0xfc99, 0, 0, 0, g(Yes, No, false, false, "", "ئخ")}, + {0xfc9a, 0, 0, 0, g(Yes, No, false, false, "", "ئم")}, + {0xfc9b, 0, 0, 0, g(Yes, No, false, false, "", "ئه")}, + {0xfc9c, 0, 0, 0, g(Yes, No, false, false, "", "بج")}, + {0xfc9d, 0, 0, 0, g(Yes, No, false, false, "", "بح")}, + {0xfc9e, 0, 0, 0, g(Yes, No, false, false, "", "بخ")}, + {0xfc9f, 0, 0, 0, g(Yes, No, false, false, "", "بم")}, + {0xfca0, 0, 0, 0, g(Yes, No, false, false, "", "به")}, + {0xfca1, 0, 0, 0, g(Yes, No, false, false, "", "تج")}, + {0xfca2, 0, 0, 0, g(Yes, No, false, false, "", "تح")}, + {0xfca3, 0, 0, 0, g(Yes, No, false, false, "", "تخ")}, + {0xfca4, 0, 0, 0, g(Yes, No, false, false, "", "تم")}, + {0xfca5, 0, 0, 0, g(Yes, No, false, false, "", "ته")}, + {0xfca6, 0, 0, 0, g(Yes, No, false, false, "", "ثم")}, + {0xfca7, 0, 0, 0, g(Yes, No, false, false, "", "جح")}, + {0xfca8, 0, 0, 0, g(Yes, No, false, false, "", "جم")}, + {0xfca9, 0, 0, 0, g(Yes, No, false, false, "", "حج")}, + {0xfcaa, 0, 0, 0, g(Yes, No, false, false, "", "حم")}, + {0xfcab, 0, 0, 0, g(Yes, No, false, false, "", "خج")}, + {0xfcac, 0, 0, 0, g(Yes, No, false, false, "", "خم")}, + {0xfcad, 0, 0, 0, g(Yes, No, false, false, "", "سج")}, + {0xfcae, 0, 0, 0, g(Yes, No, false, false, "", "سح")}, + {0xfcaf, 0, 0, 0, g(Yes, No, false, false, "", "سخ")}, + {0xfcb0, 0, 0, 0, g(Yes, No, false, false, "", "سم")}, + {0xfcb1, 0, 0, 0, g(Yes, No, false, false, "", "صح")}, + {0xfcb2, 0, 0, 0, g(Yes, No, false, false, "", "صخ")}, + {0xfcb3, 0, 0, 0, g(Yes, No, false, false, "", "صم")}, + {0xfcb4, 0, 0, 0, g(Yes, No, false, false, "", "ضج")}, + {0xfcb5, 0, 0, 0, g(Yes, No, false, false, "", "ضح")}, + {0xfcb6, 0, 0, 0, g(Yes, No, false, false, "", "ضخ")}, + {0xfcb7, 0, 0, 0, g(Yes, No, false, false, "", "ضم")}, + {0xfcb8, 0, 0, 0, g(Yes, No, false, false, "", "طح")}, + {0xfcb9, 0, 0, 0, g(Yes, No, false, false, "", "ظم")}, + {0xfcba, 0, 0, 0, g(Yes, No, false, false, "", "عج")}, + {0xfcbb, 0, 0, 0, g(Yes, No, false, false, "", "عم")}, + {0xfcbc, 0, 0, 0, g(Yes, No, false, false, "", "غج")}, + {0xfcbd, 0, 0, 0, g(Yes, No, false, false, "", "غم")}, + {0xfcbe, 0, 0, 0, g(Yes, No, false, false, "", "فج")}, + {0xfcbf, 0, 0, 0, g(Yes, No, false, false, "", "فح")}, + {0xfcc0, 0, 0, 0, g(Yes, No, false, false, "", "فخ")}, + {0xfcc1, 0, 0, 0, g(Yes, No, false, false, "", "فم")}, + {0xfcc2, 0, 0, 0, g(Yes, No, false, false, "", "قح")}, + {0xfcc3, 0, 0, 0, g(Yes, No, false, false, "", "قم")}, + {0xfcc4, 0, 0, 0, g(Yes, No, false, false, "", "كج")}, + {0xfcc5, 0, 0, 0, g(Yes, No, false, false, "", "كح")}, + {0xfcc6, 0, 0, 0, g(Yes, No, false, false, "", "كخ")}, + {0xfcc7, 0, 0, 0, g(Yes, No, false, false, "", "كل")}, + {0xfcc8, 0, 0, 0, g(Yes, No, false, false, "", "كم")}, + {0xfcc9, 0, 0, 0, g(Yes, No, false, false, "", "لج")}, + {0xfcca, 0, 0, 0, g(Yes, No, false, false, "", "لح")}, + {0xfccb, 0, 0, 0, g(Yes, No, false, false, "", "لخ")}, + {0xfccc, 0, 0, 0, g(Yes, No, false, false, "", "لم")}, + {0xfccd, 0, 0, 0, g(Yes, No, false, false, "", "له")}, + {0xfcce, 0, 0, 0, g(Yes, No, false, false, "", "مج")}, + {0xfccf, 0, 0, 0, g(Yes, No, false, false, "", "مح")}, + {0xfcd0, 0, 0, 0, g(Yes, No, false, false, "", "مخ")}, + {0xfcd1, 0, 0, 0, g(Yes, No, false, false, "", "مم")}, + {0xfcd2, 0, 0, 0, g(Yes, No, false, false, "", "نج")}, + {0xfcd3, 0, 0, 0, g(Yes, No, false, false, "", "نح")}, + {0xfcd4, 0, 0, 0, g(Yes, No, false, false, "", "نخ")}, + {0xfcd5, 0, 0, 0, g(Yes, No, false, false, "", "نم")}, + {0xfcd6, 0, 0, 0, g(Yes, No, false, false, "", "نه")}, + {0xfcd7, 0, 0, 0, g(Yes, No, false, false, "", "هج")}, + {0xfcd8, 0, 0, 0, g(Yes, No, false, false, "", "هم")}, + {0xfcd9, 0, 0, 1, g(Yes, No, false, false, "", "هٰ")}, + {0xfcda, 0, 0, 0, g(Yes, No, false, false, "", "يج")}, + {0xfcdb, 0, 0, 0, g(Yes, No, false, false, "", "يح")}, + {0xfcdc, 0, 0, 0, g(Yes, No, false, false, "", "يخ")}, + {0xfcdd, 0, 0, 0, g(Yes, No, false, false, "", "يم")}, + {0xfcde, 0, 0, 0, g(Yes, No, false, false, "", "يه")}, + {0xfcdf, 0, 0, 0, g(Yes, No, false, false, "", "ئم")}, + {0xfce0, 0, 0, 0, g(Yes, No, false, false, "", "ئه")}, + {0xfce1, 0, 0, 0, g(Yes, No, false, false, "", "بم")}, + {0xfce2, 0, 0, 0, g(Yes, No, false, false, "", "به")}, + {0xfce3, 0, 0, 0, g(Yes, No, false, false, "", "تم")}, + {0xfce4, 0, 0, 0, g(Yes, No, false, false, "", "ته")}, + {0xfce5, 0, 0, 0, g(Yes, No, false, false, "", "ثم")}, + {0xfce6, 0, 0, 0, g(Yes, No, false, false, "", "ثه")}, + {0xfce7, 0, 0, 0, g(Yes, No, false, false, "", "سم")}, + {0xfce8, 0, 0, 0, g(Yes, No, false, false, "", "سه")}, + {0xfce9, 0, 0, 0, g(Yes, No, false, false, "", "شم")}, + {0xfcea, 0, 0, 0, g(Yes, No, false, false, "", "شه")}, + {0xfceb, 0, 0, 0, g(Yes, No, false, false, "", "كل")}, + {0xfcec, 0, 0, 0, g(Yes, No, false, false, "", "كم")}, + {0xfced, 0, 0, 0, g(Yes, No, false, false, "", "لم")}, + {0xfcee, 0, 0, 0, g(Yes, No, false, false, "", "نم")}, + {0xfcef, 0, 0, 0, g(Yes, No, false, false, "", "نه")}, + {0xfcf0, 0, 0, 0, g(Yes, No, false, false, "", "يم")}, + {0xfcf1, 0, 0, 0, g(Yes, No, false, false, "", "يه")}, + {0xfcf2, 0, 0, 2, g(Yes, No, false, false, "", "ـَّ")}, + {0xfcf3, 0, 0, 2, g(Yes, No, false, false, "", "ـُّ")}, + {0xfcf4, 0, 0, 2, g(Yes, No, false, false, "", "ـِّ")}, + {0xfcf5, 0, 0, 0, g(Yes, No, false, false, "", "طى")}, + {0xfcf6, 0, 0, 0, g(Yes, No, false, false, "", "طي")}, + {0xfcf7, 0, 0, 0, g(Yes, No, false, false, "", "عى")}, + {0xfcf8, 0, 0, 0, g(Yes, No, false, false, "", "عي")}, + {0xfcf9, 0, 0, 0, g(Yes, No, false, false, "", "غى")}, + {0xfcfa, 0, 0, 0, g(Yes, No, false, false, "", "غي")}, + {0xfcfb, 0, 0, 0, g(Yes, No, false, false, "", "سى")}, + {0xfcfc, 0, 0, 0, g(Yes, No, false, false, "", "سي")}, + {0xfcfd, 0, 0, 0, g(Yes, No, false, false, "", "شى")}, + {0xfcfe, 0, 0, 0, g(Yes, No, false, false, "", "شي")}, + {0xfcff, 0, 0, 0, g(Yes, No, false, false, "", "حى")}, + {0xfd00, 0, 0, 0, g(Yes, No, false, false, "", "حي")}, + {0xfd01, 0, 0, 0, g(Yes, No, false, false, "", "جى")}, + {0xfd02, 0, 0, 0, g(Yes, No, false, false, "", "جي")}, + {0xfd03, 0, 0, 0, g(Yes, No, false, false, "", "خى")}, + {0xfd04, 0, 0, 0, g(Yes, No, false, false, "", "خي")}, + {0xfd05, 0, 0, 0, g(Yes, No, false, false, "", "صى")}, + {0xfd06, 0, 0, 0, g(Yes, No, false, false, "", "صي")}, + {0xfd07, 0, 0, 0, g(Yes, No, false, false, "", "ضى")}, + {0xfd08, 0, 0, 0, g(Yes, No, false, false, "", "ضي")}, + {0xfd09, 0, 0, 0, g(Yes, No, false, false, "", "شج")}, + {0xfd0a, 0, 0, 0, g(Yes, No, false, false, "", "شح")}, + {0xfd0b, 0, 0, 0, g(Yes, No, false, false, "", "شخ")}, + {0xfd0c, 0, 0, 0, g(Yes, No, false, false, "", "شم")}, + {0xfd0d, 0, 0, 0, g(Yes, No, false, false, "", "شر")}, + {0xfd0e, 0, 0, 0, g(Yes, No, false, false, "", "سر")}, + {0xfd0f, 0, 0, 0, g(Yes, No, false, false, "", "صر")}, + {0xfd10, 0, 0, 0, g(Yes, No, false, false, "", "ضر")}, + {0xfd11, 0, 0, 0, g(Yes, No, false, false, "", "طى")}, + {0xfd12, 0, 0, 0, g(Yes, No, false, false, "", "طي")}, + {0xfd13, 0, 0, 0, g(Yes, No, false, false, "", "عى")}, + {0xfd14, 0, 0, 0, g(Yes, No, false, false, "", "عي")}, + {0xfd15, 0, 0, 0, g(Yes, No, false, false, "", "غى")}, + {0xfd16, 0, 0, 0, g(Yes, No, false, false, "", "غي")}, + {0xfd17, 0, 0, 0, g(Yes, No, false, false, "", "سى")}, + {0xfd18, 0, 0, 0, g(Yes, No, false, false, "", "سي")}, + {0xfd19, 0, 0, 0, g(Yes, No, false, false, "", "شى")}, + {0xfd1a, 0, 0, 0, g(Yes, No, false, false, "", "شي")}, + {0xfd1b, 0, 0, 0, g(Yes, No, false, false, "", "حى")}, + {0xfd1c, 0, 0, 0, g(Yes, No, false, false, "", "حي")}, + {0xfd1d, 0, 0, 0, g(Yes, No, false, false, "", "جى")}, + {0xfd1e, 0, 0, 0, g(Yes, No, false, false, "", "جي")}, + {0xfd1f, 0, 0, 0, g(Yes, No, false, false, "", "خى")}, + {0xfd20, 0, 0, 0, g(Yes, No, false, false, "", "خي")}, + {0xfd21, 0, 0, 0, g(Yes, No, false, false, "", "صى")}, + {0xfd22, 0, 0, 0, g(Yes, No, false, false, "", "صي")}, + {0xfd23, 0, 0, 0, g(Yes, No, false, false, "", "ضى")}, + {0xfd24, 0, 0, 0, g(Yes, No, false, false, "", "ضي")}, + {0xfd25, 0, 0, 0, g(Yes, No, false, false, "", "شج")}, + {0xfd26, 0, 0, 0, g(Yes, No, false, false, "", "شح")}, + {0xfd27, 0, 0, 0, g(Yes, No, false, false, "", "شخ")}, + {0xfd28, 0, 0, 0, g(Yes, No, false, false, "", "شم")}, + {0xfd29, 0, 0, 0, g(Yes, No, false, false, "", "شر")}, + {0xfd2a, 0, 0, 0, g(Yes, No, false, false, "", "سر")}, + {0xfd2b, 0, 0, 0, g(Yes, No, false, false, "", "صر")}, + {0xfd2c, 0, 0, 0, g(Yes, No, false, false, "", "ضر")}, + {0xfd2d, 0, 0, 0, g(Yes, No, false, false, "", "شج")}, + {0xfd2e, 0, 0, 0, g(Yes, No, false, false, "", "شح")}, + {0xfd2f, 0, 0, 0, g(Yes, No, false, false, "", "شخ")}, + {0xfd30, 0, 0, 0, g(Yes, No, false, false, "", "شم")}, + {0xfd31, 0, 0, 0, g(Yes, No, false, false, "", "سه")}, + {0xfd32, 0, 0, 0, g(Yes, No, false, false, "", "شه")}, + {0xfd33, 0, 0, 0, g(Yes, No, false, false, "", "طم")}, + {0xfd34, 0, 0, 0, g(Yes, No, false, false, "", "سج")}, + {0xfd35, 0, 0, 0, g(Yes, No, false, false, "", "سح")}, + {0xfd36, 0, 0, 0, g(Yes, No, false, false, "", "سخ")}, + {0xfd37, 0, 0, 0, g(Yes, No, false, false, "", "شج")}, + {0xfd38, 0, 0, 0, g(Yes, No, false, false, "", "شح")}, + {0xfd39, 0, 0, 0, g(Yes, No, false, false, "", "شخ")}, + {0xfd3a, 0, 0, 0, g(Yes, No, false, false, "", "طم")}, + {0xfd3b, 0, 0, 0, g(Yes, No, false, false, "", "ظم")}, + {0xfd3c, 0, 0, 1, g(Yes, No, false, false, "", "اً")}, + {0xfd3e, 0, 0, 0, f(Yes, false, "")}, + {0xfd50, 0, 0, 0, g(Yes, No, false, false, "", "تجم")}, + {0xfd51, 0, 0, 0, g(Yes, No, false, false, "", "تحج")}, + {0xfd53, 0, 0, 0, g(Yes, No, false, false, "", "تحم")}, + {0xfd54, 0, 0, 0, g(Yes, No, false, false, "", "تخم")}, + {0xfd55, 0, 0, 0, g(Yes, No, false, false, "", "تمج")}, + {0xfd56, 0, 0, 0, g(Yes, No, false, false, "", "تمح")}, + {0xfd57, 0, 0, 0, g(Yes, No, false, false, "", "تمخ")}, + {0xfd58, 0, 0, 0, g(Yes, No, false, false, "", "جمح")}, + {0xfd5a, 0, 0, 0, g(Yes, No, false, false, "", "حمي")}, + {0xfd5b, 0, 0, 0, g(Yes, No, false, false, "", "حمى")}, + {0xfd5c, 0, 0, 0, g(Yes, No, false, false, "", "سحج")}, + {0xfd5d, 0, 0, 0, g(Yes, No, false, false, "", "سجح")}, + {0xfd5e, 0, 0, 0, g(Yes, No, false, false, "", "سجى")}, + {0xfd5f, 0, 0, 0, g(Yes, No, false, false, "", "سمح")}, + {0xfd61, 0, 0, 0, g(Yes, No, false, false, "", "سمج")}, + {0xfd62, 0, 0, 0, g(Yes, No, false, false, "", "سمم")}, + {0xfd64, 0, 0, 0, g(Yes, No, false, false, "", "صحح")}, + {0xfd66, 0, 0, 0, g(Yes, No, false, false, "", "صمم")}, + {0xfd67, 0, 0, 0, g(Yes, No, false, false, "", "شحم")}, + {0xfd69, 0, 0, 0, g(Yes, No, false, false, "", "شجي")}, + {0xfd6a, 0, 0, 0, g(Yes, No, false, false, "", "شمخ")}, + {0xfd6c, 0, 0, 0, g(Yes, No, false, false, "", "شمم")}, + {0xfd6e, 0, 0, 0, g(Yes, No, false, false, "", "ضحى")}, + {0xfd6f, 0, 0, 0, g(Yes, No, false, false, "", "ضخم")}, + {0xfd71, 0, 0, 0, g(Yes, No, false, false, "", "طمح")}, + {0xfd73, 0, 0, 0, g(Yes, No, false, false, "", "طمم")}, + {0xfd74, 0, 0, 0, g(Yes, No, false, false, "", "طمي")}, + {0xfd75, 0, 0, 0, g(Yes, No, false, false, "", "عجم")}, + {0xfd76, 0, 0, 0, g(Yes, No, false, false, "", "عمم")}, + {0xfd78, 0, 0, 0, g(Yes, No, false, false, "", "عمى")}, + {0xfd79, 0, 0, 0, g(Yes, No, false, false, "", "غمم")}, + {0xfd7a, 0, 0, 0, g(Yes, No, false, false, "", "غمي")}, + {0xfd7b, 0, 0, 0, g(Yes, No, false, false, "", "غمى")}, + {0xfd7c, 0, 0, 0, g(Yes, No, false, false, "", "فخم")}, + {0xfd7e, 0, 0, 0, g(Yes, No, false, false, "", "قمح")}, + {0xfd7f, 0, 0, 0, g(Yes, No, false, false, "", "قمم")}, + {0xfd80, 0, 0, 0, g(Yes, No, false, false, "", "لحم")}, + {0xfd81, 0, 0, 0, g(Yes, No, false, false, "", "لحي")}, + {0xfd82, 0, 0, 0, g(Yes, No, false, false, "", "لحى")}, + {0xfd83, 0, 0, 0, g(Yes, No, false, false, "", "لجج")}, + {0xfd85, 0, 0, 0, g(Yes, No, false, false, "", "لخم")}, + {0xfd87, 0, 0, 0, g(Yes, No, false, false, "", "لمح")}, + {0xfd89, 0, 0, 0, g(Yes, No, false, false, "", "محج")}, + {0xfd8a, 0, 0, 0, g(Yes, No, false, false, "", "محم")}, + {0xfd8b, 0, 0, 0, g(Yes, No, false, false, "", "محي")}, + {0xfd8c, 0, 0, 0, g(Yes, No, false, false, "", "مجح")}, + {0xfd8d, 0, 0, 0, g(Yes, No, false, false, "", "مجم")}, + {0xfd8e, 0, 0, 0, g(Yes, No, false, false, "", "مخج")}, + {0xfd8f, 0, 0, 0, g(Yes, No, false, false, "", "مخم")}, + {0xfd90, 0, 0, 0, f(Yes, false, "")}, + {0xfd92, 0, 0, 0, g(Yes, No, false, false, "", "مجخ")}, + {0xfd93, 0, 0, 0, g(Yes, No, false, false, "", "همج")}, + {0xfd94, 0, 0, 0, g(Yes, No, false, false, "", "همم")}, + {0xfd95, 0, 0, 0, g(Yes, No, false, false, "", "نحم")}, + {0xfd96, 0, 0, 0, g(Yes, No, false, false, "", "نحى")}, + {0xfd97, 0, 0, 0, g(Yes, No, false, false, "", "نجم")}, + {0xfd99, 0, 0, 0, g(Yes, No, false, false, "", "نجى")}, + {0xfd9a, 0, 0, 0, g(Yes, No, false, false, "", "نمي")}, + {0xfd9b, 0, 0, 0, g(Yes, No, false, false, "", "نمى")}, + {0xfd9c, 0, 0, 0, g(Yes, No, false, false, "", "يمم")}, + {0xfd9e, 0, 0, 0, g(Yes, No, false, false, "", "بخي")}, + {0xfd9f, 0, 0, 0, g(Yes, No, false, false, "", "تجي")}, + {0xfda0, 0, 0, 0, g(Yes, No, false, false, "", "تجى")}, + {0xfda1, 0, 0, 0, g(Yes, No, false, false, "", "تخي")}, + {0xfda2, 0, 0, 0, g(Yes, No, false, false, "", "تخى")}, + {0xfda3, 0, 0, 0, g(Yes, No, false, false, "", "تمي")}, + {0xfda4, 0, 0, 0, g(Yes, No, false, false, "", "تمى")}, + {0xfda5, 0, 0, 0, g(Yes, No, false, false, "", "جمي")}, + {0xfda6, 0, 0, 0, g(Yes, No, false, false, "", "جحى")}, + {0xfda7, 0, 0, 0, g(Yes, No, false, false, "", "جمى")}, + {0xfda8, 0, 0, 0, g(Yes, No, false, false, "", "سخى")}, + {0xfda9, 0, 0, 0, g(Yes, No, false, false, "", "صحي")}, + {0xfdaa, 0, 0, 0, g(Yes, No, false, false, "", "شحي")}, + {0xfdab, 0, 0, 0, g(Yes, No, false, false, "", "ضحي")}, + {0xfdac, 0, 0, 0, g(Yes, No, false, false, "", "لجي")}, + {0xfdad, 0, 0, 0, g(Yes, No, false, false, "", "لمي")}, + {0xfdae, 0, 0, 0, g(Yes, No, false, false, "", "يحي")}, + {0xfdaf, 0, 0, 0, g(Yes, No, false, false, "", "يجي")}, + {0xfdb0, 0, 0, 0, g(Yes, No, false, false, "", "يمي")}, + {0xfdb1, 0, 0, 0, g(Yes, No, false, false, "", "ممي")}, + {0xfdb2, 0, 0, 0, g(Yes, No, false, false, "", "قمي")}, + {0xfdb3, 0, 0, 0, g(Yes, No, false, false, "", "نحي")}, + {0xfdb4, 0, 0, 0, g(Yes, No, false, false, "", "قمح")}, + {0xfdb5, 0, 0, 0, g(Yes, No, false, false, "", "لحم")}, + {0xfdb6, 0, 0, 0, g(Yes, No, false, false, "", "عمي")}, + {0xfdb7, 0, 0, 0, g(Yes, No, false, false, "", "كمي")}, + {0xfdb8, 0, 0, 0, g(Yes, No, false, false, "", "نجح")}, + {0xfdb9, 0, 0, 0, g(Yes, No, false, false, "", "مخي")}, + {0xfdba, 0, 0, 0, g(Yes, No, false, false, "", "لجم")}, + {0xfdbb, 0, 0, 0, g(Yes, No, false, false, "", "كمم")}, + {0xfdbc, 0, 0, 0, g(Yes, No, false, false, "", "لجم")}, + {0xfdbd, 0, 0, 0, g(Yes, No, false, false, "", "نجح")}, + {0xfdbe, 0, 0, 0, g(Yes, No, false, false, "", "جحي")}, + {0xfdbf, 0, 0, 0, g(Yes, No, false, false, "", "حجي")}, + {0xfdc0, 0, 0, 0, g(Yes, No, false, false, "", "مجي")}, + {0xfdc1, 0, 0, 0, g(Yes, No, false, false, "", "فمي")}, + {0xfdc2, 0, 0, 0, g(Yes, No, false, false, "", "بحي")}, + {0xfdc3, 0, 0, 0, g(Yes, No, false, false, "", "كمم")}, + {0xfdc4, 0, 0, 0, g(Yes, No, false, false, "", "عجم")}, + {0xfdc5, 0, 0, 0, g(Yes, No, false, false, "", "صمم")}, + {0xfdc6, 0, 0, 0, g(Yes, No, false, false, "", "سخي")}, + {0xfdc7, 0, 0, 0, g(Yes, No, false, false, "", "نجي")}, + {0xfdc8, 0, 0, 0, f(Yes, false, "")}, + {0xfdf0, 0, 0, 0, g(Yes, No, false, false, "", "صلے")}, + {0xfdf1, 0, 0, 0, g(Yes, No, false, false, "", "قلے")}, + {0xfdf2, 0, 0, 0, g(Yes, No, false, false, "", "الله")}, + {0xfdf3, 0, 0, 0, g(Yes, No, false, false, "", "اكبر")}, + {0xfdf4, 0, 0, 0, g(Yes, No, false, false, "", "محمد")}, + {0xfdf5, 0, 0, 0, g(Yes, No, false, false, "", "صلعم")}, + {0xfdf6, 0, 0, 0, g(Yes, No, false, false, "", "رسول")}, + {0xfdf7, 0, 0, 0, g(Yes, No, false, false, "", "عليه")}, + {0xfdf8, 0, 0, 0, g(Yes, No, false, false, "", "وسلم")}, + {0xfdf9, 0, 0, 0, g(Yes, No, false, false, "", "صلى")}, + {0xfdfa, 0, 0, 0, g(Yes, No, false, false, "", "صلى الله عليه وسلم")}, + {0xfdfb, 0, 0, 0, g(Yes, No, false, false, "", "جل جلاله")}, + {0xfdfc, 0, 0, 0, g(Yes, No, false, false, "", "ریال")}, + {0xfdfd, 0, 0, 0, f(Yes, false, "")}, + {0xfe10, 0, 0, 0, g(Yes, No, false, false, "", ",")}, + {0xfe11, 0, 0, 0, g(Yes, No, false, false, "", "、")}, + {0xfe12, 0, 0, 0, g(Yes, No, false, false, "", "。")}, + {0xfe13, 0, 0, 0, g(Yes, No, false, false, "", ":")}, + {0xfe14, 0, 0, 0, g(Yes, No, false, false, "", ";")}, + {0xfe15, 0, 0, 0, g(Yes, No, false, false, "", "!")}, + {0xfe16, 0, 0, 0, g(Yes, No, false, false, "", "?")}, + {0xfe17, 0, 0, 0, g(Yes, No, false, false, "", "〖")}, + {0xfe18, 0, 0, 0, g(Yes, No, false, false, "", "〗")}, + {0xfe19, 0, 0, 0, g(Yes, No, false, false, "", "...")}, + {0xfe1a, 0, 0, 0, f(Yes, false, "")}, + {0xfe20, 230, 1, 1, f(Yes, false, "")}, + {0xfe27, 220, 1, 1, f(Yes, false, "")}, + {0xfe2e, 230, 1, 1, f(Yes, false, "")}, + {0xfe30, 0, 0, 0, g(Yes, No, false, false, "", "..")}, + {0xfe31, 0, 0, 0, g(Yes, No, false, false, "", "—")}, + {0xfe32, 0, 0, 0, g(Yes, No, false, false, "", "–")}, + {0xfe33, 0, 0, 0, g(Yes, No, false, false, "", "_")}, + {0xfe35, 0, 0, 0, g(Yes, No, false, false, "", "(")}, + {0xfe36, 0, 0, 0, g(Yes, No, false, false, "", ")")}, + {0xfe37, 0, 0, 0, g(Yes, No, false, false, "", "{")}, + {0xfe38, 0, 0, 0, g(Yes, No, false, false, "", "}")}, + {0xfe39, 0, 0, 0, g(Yes, No, false, false, "", "〔")}, + {0xfe3a, 0, 0, 0, g(Yes, No, false, false, "", "〕")}, + {0xfe3b, 0, 0, 0, g(Yes, No, false, false, "", "【")}, + {0xfe3c, 0, 0, 0, g(Yes, No, false, false, "", "】")}, + {0xfe3d, 0, 0, 0, g(Yes, No, false, false, "", "《")}, + {0xfe3e, 0, 0, 0, g(Yes, No, false, false, "", "》")}, + {0xfe3f, 0, 0, 0, g(Yes, No, false, false, "", "〈")}, + {0xfe40, 0, 0, 0, g(Yes, No, false, false, "", "〉")}, + {0xfe41, 0, 0, 0, g(Yes, No, false, false, "", "「")}, + {0xfe42, 0, 0, 0, g(Yes, No, false, false, "", "」")}, + {0xfe43, 0, 0, 0, g(Yes, No, false, false, "", "『")}, + {0xfe44, 0, 0, 0, g(Yes, No, false, false, "", "』")}, + {0xfe45, 0, 0, 0, f(Yes, false, "")}, + {0xfe47, 0, 0, 0, g(Yes, No, false, false, "", "[")}, + {0xfe48, 0, 0, 0, g(Yes, No, false, false, "", "]")}, + {0xfe49, 0, 0, 1, g(Yes, No, false, false, "", " ̅")}, + {0xfe4d, 0, 0, 0, g(Yes, No, false, false, "", "_")}, + {0xfe50, 0, 0, 0, g(Yes, No, false, false, "", ",")}, + {0xfe51, 0, 0, 0, g(Yes, No, false, false, "", "、")}, + {0xfe52, 0, 0, 0, g(Yes, No, false, false, "", ".")}, + {0xfe53, 0, 0, 0, f(Yes, false, "")}, + {0xfe54, 0, 0, 0, g(Yes, No, false, false, "", ";")}, + {0xfe55, 0, 0, 0, g(Yes, No, false, false, "", ":")}, + {0xfe56, 0, 0, 0, g(Yes, No, false, false, "", "?")}, + {0xfe57, 0, 0, 0, g(Yes, No, false, false, "", "!")}, + {0xfe58, 0, 0, 0, g(Yes, No, false, false, "", "—")}, + {0xfe59, 0, 0, 0, g(Yes, No, false, false, "", "(")}, + {0xfe5a, 0, 0, 0, g(Yes, No, false, false, "", ")")}, + {0xfe5b, 0, 0, 0, g(Yes, No, false, false, "", "{")}, + {0xfe5c, 0, 0, 0, g(Yes, No, false, false, "", "}")}, + {0xfe5d, 0, 0, 0, g(Yes, No, false, false, "", "〔")}, + {0xfe5e, 0, 0, 0, g(Yes, No, false, false, "", "〕")}, + {0xfe5f, 0, 0, 0, g(Yes, No, false, false, "", "#")}, + {0xfe60, 0, 0, 0, g(Yes, No, false, false, "", "&")}, + {0xfe61, 0, 0, 0, g(Yes, No, false, false, "", "*")}, + {0xfe62, 0, 0, 0, g(Yes, No, false, false, "", "+")}, + {0xfe63, 0, 0, 0, g(Yes, No, false, false, "", "-")}, + {0xfe64, 0, 0, 0, g(Yes, No, false, false, "", "<")}, + {0xfe65, 0, 0, 0, g(Yes, No, false, false, "", ">")}, + {0xfe66, 0, 0, 0, g(Yes, No, false, false, "", "=")}, + {0xfe67, 0, 0, 0, f(Yes, false, "")}, + {0xfe68, 0, 0, 0, g(Yes, No, false, false, "", "\\")}, + {0xfe69, 0, 0, 0, g(Yes, No, false, false, "", "$")}, + {0xfe6a, 0, 0, 0, g(Yes, No, false, false, "", "%")}, + {0xfe6b, 0, 0, 0, g(Yes, No, false, false, "", "@")}, + {0xfe6c, 0, 0, 0, f(Yes, false, "")}, + {0xfe70, 0, 0, 1, g(Yes, No, false, false, "", " ً")}, + {0xfe71, 0, 0, 1, g(Yes, No, false, false, "", "ـً")}, + {0xfe72, 0, 0, 1, g(Yes, No, false, false, "", " ٌ")}, + {0xfe73, 0, 0, 0, f(Yes, false, "")}, + {0xfe74, 0, 0, 1, g(Yes, No, false, false, "", " ٍ")}, + {0xfe75, 0, 0, 0, f(Yes, false, "")}, + {0xfe76, 0, 0, 1, g(Yes, No, false, false, "", " َ")}, + {0xfe77, 0, 0, 1, g(Yes, No, false, false, "", "ـَ")}, + {0xfe78, 0, 0, 1, g(Yes, No, false, false, "", " ُ")}, + {0xfe79, 0, 0, 1, g(Yes, No, false, false, "", "ـُ")}, + {0xfe7a, 0, 0, 1, g(Yes, No, false, false, "", " ِ")}, + {0xfe7b, 0, 0, 1, g(Yes, No, false, false, "", "ـِ")}, + {0xfe7c, 0, 0, 1, g(Yes, No, false, false, "", " ّ")}, + {0xfe7d, 0, 0, 1, g(Yes, No, false, false, "", "ـّ")}, + {0xfe7e, 0, 0, 1, g(Yes, No, false, false, "", " ْ")}, + {0xfe7f, 0, 0, 1, g(Yes, No, false, false, "", "ـْ")}, + {0xfe80, 0, 0, 0, g(Yes, No, false, false, "", "ء")}, + {0xfe81, 0, 0, 1, g(Yes, No, false, false, "", "آ")}, + {0xfe83, 0, 0, 1, g(Yes, No, false, false, "", "أ")}, + {0xfe85, 0, 0, 1, g(Yes, No, false, false, "", "ؤ")}, + {0xfe87, 0, 0, 1, g(Yes, No, false, false, "", "إ")}, + {0xfe89, 0, 0, 1, g(Yes, No, false, false, "", "ئ")}, + {0xfe8d, 0, 0, 0, g(Yes, No, false, false, "", "ا")}, + {0xfe8f, 0, 0, 0, g(Yes, No, false, false, "", "ب")}, + {0xfe93, 0, 0, 0, g(Yes, No, false, false, "", "ة")}, + {0xfe95, 0, 0, 0, g(Yes, No, false, false, "", "ت")}, + {0xfe99, 0, 0, 0, g(Yes, No, false, false, "", "ث")}, + {0xfe9d, 0, 0, 0, g(Yes, No, false, false, "", "ج")}, + {0xfea1, 0, 0, 0, g(Yes, No, false, false, "", "ح")}, + {0xfea5, 0, 0, 0, g(Yes, No, false, false, "", "خ")}, + {0xfea9, 0, 0, 0, g(Yes, No, false, false, "", "د")}, + {0xfeab, 0, 0, 0, g(Yes, No, false, false, "", "ذ")}, + {0xfead, 0, 0, 0, g(Yes, No, false, false, "", "ر")}, + {0xfeaf, 0, 0, 0, g(Yes, No, false, false, "", "ز")}, + {0xfeb1, 0, 0, 0, g(Yes, No, false, false, "", "س")}, + {0xfeb5, 0, 0, 0, g(Yes, No, false, false, "", "ش")}, + {0xfeb9, 0, 0, 0, g(Yes, No, false, false, "", "ص")}, + {0xfebd, 0, 0, 0, g(Yes, No, false, false, "", "ض")}, + {0xfec1, 0, 0, 0, g(Yes, No, false, false, "", "ط")}, + {0xfec5, 0, 0, 0, g(Yes, No, false, false, "", "ظ")}, + {0xfec9, 0, 0, 0, g(Yes, No, false, false, "", "ع")}, + {0xfecd, 0, 0, 0, g(Yes, No, false, false, "", "غ")}, + {0xfed1, 0, 0, 0, g(Yes, No, false, false, "", "ف")}, + {0xfed5, 0, 0, 0, g(Yes, No, false, false, "", "ق")}, + {0xfed9, 0, 0, 0, g(Yes, No, false, false, "", "ك")}, + {0xfedd, 0, 0, 0, g(Yes, No, false, false, "", "ل")}, + {0xfee1, 0, 0, 0, g(Yes, No, false, false, "", "م")}, + {0xfee5, 0, 0, 0, g(Yes, No, false, false, "", "ن")}, + {0xfee9, 0, 0, 0, g(Yes, No, false, false, "", "ه")}, + {0xfeed, 0, 0, 0, g(Yes, No, false, false, "", "و")}, + {0xfeef, 0, 0, 0, g(Yes, No, false, false, "", "ى")}, + {0xfef1, 0, 0, 0, g(Yes, No, false, false, "", "ي")}, + {0xfef5, 0, 0, 1, g(Yes, No, false, false, "", "لآ")}, + {0xfef7, 0, 0, 1, g(Yes, No, false, false, "", "لأ")}, + {0xfef9, 0, 0, 1, g(Yes, No, false, false, "", "لإ")}, + {0xfefb, 0, 0, 0, g(Yes, No, false, false, "", "لا")}, + {0xfefd, 0, 0, 0, f(Yes, false, "")}, + {0xff01, 0, 0, 0, g(Yes, No, false, false, "", "!")}, + {0xff02, 0, 0, 0, g(Yes, No, false, false, "", "\"")}, + {0xff03, 0, 0, 0, g(Yes, No, false, false, "", "#")}, + {0xff04, 0, 0, 0, g(Yes, No, false, false, "", "$")}, + {0xff05, 0, 0, 0, g(Yes, No, false, false, "", "%")}, + {0xff06, 0, 0, 0, g(Yes, No, false, false, "", "&")}, + {0xff07, 0, 0, 0, g(Yes, No, false, false, "", "'")}, + {0xff08, 0, 0, 0, g(Yes, No, false, false, "", "(")}, + {0xff09, 0, 0, 0, g(Yes, No, false, false, "", ")")}, + {0xff0a, 0, 0, 0, g(Yes, No, false, false, "", "*")}, + {0xff0b, 0, 0, 0, g(Yes, No, false, false, "", "+")}, + {0xff0c, 0, 0, 0, g(Yes, No, false, false, "", ",")}, + {0xff0d, 0, 0, 0, g(Yes, No, false, false, "", "-")}, + {0xff0e, 0, 0, 0, g(Yes, No, false, false, "", ".")}, + {0xff0f, 0, 0, 0, g(Yes, No, false, false, "", "/")}, + {0xff10, 0, 0, 0, g(Yes, No, false, false, "", "0")}, + {0xff11, 0, 0, 0, g(Yes, No, false, false, "", "1")}, + {0xff12, 0, 0, 0, g(Yes, No, false, false, "", "2")}, + {0xff13, 0, 0, 0, g(Yes, No, false, false, "", "3")}, + {0xff14, 0, 0, 0, g(Yes, No, false, false, "", "4")}, + {0xff15, 0, 0, 0, g(Yes, No, false, false, "", "5")}, + {0xff16, 0, 0, 0, g(Yes, No, false, false, "", "6")}, + {0xff17, 0, 0, 0, g(Yes, No, false, false, "", "7")}, + {0xff18, 0, 0, 0, g(Yes, No, false, false, "", "8")}, + {0xff19, 0, 0, 0, g(Yes, No, false, false, "", "9")}, + {0xff1a, 0, 0, 0, g(Yes, No, false, false, "", ":")}, + {0xff1b, 0, 0, 0, g(Yes, No, false, false, "", ";")}, + {0xff1c, 0, 0, 0, g(Yes, No, false, false, "", "<")}, + {0xff1d, 0, 0, 0, g(Yes, No, false, false, "", "=")}, + {0xff1e, 0, 0, 0, g(Yes, No, false, false, "", ">")}, + {0xff1f, 0, 0, 0, g(Yes, No, false, false, "", "?")}, + {0xff20, 0, 0, 0, g(Yes, No, false, false, "", "@")}, + {0xff21, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0xff22, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0xff23, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0xff24, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0xff25, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0xff26, 0, 0, 0, g(Yes, No, false, false, "", "F")}, + {0xff27, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0xff28, 0, 0, 0, g(Yes, No, false, false, "", "H")}, + {0xff29, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0xff2a, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0xff2b, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0xff2c, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0xff2d, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0xff2e, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0xff2f, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0xff30, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0xff31, 0, 0, 0, g(Yes, No, false, false, "", "Q")}, + {0xff32, 0, 0, 0, g(Yes, No, false, false, "", "R")}, + {0xff33, 0, 0, 0, g(Yes, No, false, false, "", "S")}, + {0xff34, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0xff35, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0xff36, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0xff37, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0xff38, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0xff39, 0, 0, 0, g(Yes, No, false, false, "", "Y")}, + {0xff3a, 0, 0, 0, g(Yes, No, false, false, "", "Z")}, + {0xff3b, 0, 0, 0, g(Yes, No, false, false, "", "[")}, + {0xff3c, 0, 0, 0, g(Yes, No, false, false, "", "\\")}, + {0xff3d, 0, 0, 0, g(Yes, No, false, false, "", "]")}, + {0xff3e, 0, 0, 0, g(Yes, No, false, false, "", "^")}, + {0xff3f, 0, 0, 0, g(Yes, No, false, false, "", "_")}, + {0xff40, 0, 0, 0, g(Yes, No, false, false, "", "`")}, + {0xff41, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0xff42, 0, 0, 0, g(Yes, No, false, false, "", "b")}, + {0xff43, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0xff44, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0xff45, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0xff46, 0, 0, 0, g(Yes, No, false, false, "", "f")}, + {0xff47, 0, 0, 0, g(Yes, No, false, false, "", "g")}, + {0xff48, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0xff49, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0xff4a, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0xff4b, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0xff4c, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0xff4d, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0xff4e, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0xff4f, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0xff50, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0xff51, 0, 0, 0, g(Yes, No, false, false, "", "q")}, + {0xff52, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0xff53, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0xff54, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0xff55, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0xff56, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0xff57, 0, 0, 0, g(Yes, No, false, false, "", "w")}, + {0xff58, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0xff59, 0, 0, 0, g(Yes, No, false, false, "", "y")}, + {0xff5a, 0, 0, 0, g(Yes, No, false, false, "", "z")}, + {0xff5b, 0, 0, 0, g(Yes, No, false, false, "", "{")}, + {0xff5c, 0, 0, 0, g(Yes, No, false, false, "", "|")}, + {0xff5d, 0, 0, 0, g(Yes, No, false, false, "", "}")}, + {0xff5e, 0, 0, 0, g(Yes, No, false, false, "", "~")}, + {0xff5f, 0, 0, 0, g(Yes, No, false, false, "", "⦅")}, + {0xff60, 0, 0, 0, g(Yes, No, false, false, "", "⦆")}, + {0xff61, 0, 0, 0, g(Yes, No, false, false, "", "。")}, + {0xff62, 0, 0, 0, g(Yes, No, false, false, "", "「")}, + {0xff63, 0, 0, 0, g(Yes, No, false, false, "", "」")}, + {0xff64, 0, 0, 0, g(Yes, No, false, false, "", "、")}, + {0xff65, 0, 0, 0, g(Yes, No, false, false, "", "・")}, + {0xff66, 0, 0, 0, g(Yes, No, false, false, "", "ヲ")}, + {0xff67, 0, 0, 0, g(Yes, No, false, false, "", "ァ")}, + {0xff68, 0, 0, 0, g(Yes, No, false, false, "", "ィ")}, + {0xff69, 0, 0, 0, g(Yes, No, false, false, "", "ゥ")}, + {0xff6a, 0, 0, 0, g(Yes, No, false, false, "", "ェ")}, + {0xff6b, 0, 0, 0, g(Yes, No, false, false, "", "ォ")}, + {0xff6c, 0, 0, 0, g(Yes, No, false, false, "", "ャ")}, + {0xff6d, 0, 0, 0, g(Yes, No, false, false, "", "ュ")}, + {0xff6e, 0, 0, 0, g(Yes, No, false, false, "", "ョ")}, + {0xff6f, 0, 0, 0, g(Yes, No, false, false, "", "ッ")}, + {0xff70, 0, 0, 0, g(Yes, No, false, false, "", "ー")}, + {0xff71, 0, 0, 0, g(Yes, No, false, false, "", "ア")}, + {0xff72, 0, 0, 0, g(Yes, No, false, false, "", "イ")}, + {0xff73, 0, 0, 0, g(Yes, No, false, false, "", "ウ")}, + {0xff74, 0, 0, 0, g(Yes, No, false, false, "", "エ")}, + {0xff75, 0, 0, 0, g(Yes, No, false, false, "", "オ")}, + {0xff76, 0, 0, 0, g(Yes, No, false, false, "", "カ")}, + {0xff77, 0, 0, 0, g(Yes, No, false, false, "", "キ")}, + {0xff78, 0, 0, 0, g(Yes, No, false, false, "", "ク")}, + {0xff79, 0, 0, 0, g(Yes, No, false, false, "", "ケ")}, + {0xff7a, 0, 0, 0, g(Yes, No, false, false, "", "コ")}, + {0xff7b, 0, 0, 0, g(Yes, No, false, false, "", "サ")}, + {0xff7c, 0, 0, 0, g(Yes, No, false, false, "", "シ")}, + {0xff7d, 0, 0, 0, g(Yes, No, false, false, "", "ス")}, + {0xff7e, 0, 0, 0, g(Yes, No, false, false, "", "セ")}, + {0xff7f, 0, 0, 0, g(Yes, No, false, false, "", "ソ")}, + {0xff80, 0, 0, 0, g(Yes, No, false, false, "", "タ")}, + {0xff81, 0, 0, 0, g(Yes, No, false, false, "", "チ")}, + {0xff82, 0, 0, 0, g(Yes, No, false, false, "", "ツ")}, + {0xff83, 0, 0, 0, g(Yes, No, false, false, "", "テ")}, + {0xff84, 0, 0, 0, g(Yes, No, false, false, "", "ト")}, + {0xff85, 0, 0, 0, g(Yes, No, false, false, "", "ナ")}, + {0xff86, 0, 0, 0, g(Yes, No, false, false, "", "ニ")}, + {0xff87, 0, 0, 0, g(Yes, No, false, false, "", "ヌ")}, + {0xff88, 0, 0, 0, g(Yes, No, false, false, "", "ネ")}, + {0xff89, 0, 0, 0, g(Yes, No, false, false, "", "ノ")}, + {0xff8a, 0, 0, 0, g(Yes, No, false, false, "", "ハ")}, + {0xff8b, 0, 0, 0, g(Yes, No, false, false, "", "ヒ")}, + {0xff8c, 0, 0, 0, g(Yes, No, false, false, "", "フ")}, + {0xff8d, 0, 0, 0, g(Yes, No, false, false, "", "ヘ")}, + {0xff8e, 0, 0, 0, g(Yes, No, false, false, "", "ホ")}, + {0xff8f, 0, 0, 0, g(Yes, No, false, false, "", "マ")}, + {0xff90, 0, 0, 0, g(Yes, No, false, false, "", "ミ")}, + {0xff91, 0, 0, 0, g(Yes, No, false, false, "", "ム")}, + {0xff92, 0, 0, 0, g(Yes, No, false, false, "", "メ")}, + {0xff93, 0, 0, 0, g(Yes, No, false, false, "", "モ")}, + {0xff94, 0, 0, 0, g(Yes, No, false, false, "", "ヤ")}, + {0xff95, 0, 0, 0, g(Yes, No, false, false, "", "ユ")}, + {0xff96, 0, 0, 0, g(Yes, No, false, false, "", "ヨ")}, + {0xff97, 0, 0, 0, g(Yes, No, false, false, "", "ラ")}, + {0xff98, 0, 0, 0, g(Yes, No, false, false, "", "リ")}, + {0xff99, 0, 0, 0, g(Yes, No, false, false, "", "ル")}, + {0xff9a, 0, 0, 0, g(Yes, No, false, false, "", "レ")}, + {0xff9b, 0, 0, 0, g(Yes, No, false, false, "", "ロ")}, + {0xff9c, 0, 0, 0, g(Yes, No, false, false, "", "ワ")}, + {0xff9d, 0, 0, 0, g(Yes, No, false, false, "", "ン")}, + {0xff9e, 0, 1, 1, g(Yes, No, false, false, "", "゙")}, + {0xff9f, 0, 1, 1, g(Yes, No, false, false, "", "゚")}, + {0xffa0, 0, 0, 0, g(Yes, No, false, false, "", "ᅠ")}, + {0xffa1, 0, 0, 0, g(Yes, No, false, false, "", "ᄀ")}, + {0xffa2, 0, 0, 0, g(Yes, No, false, false, "", "ᄁ")}, + {0xffa3, 0, 1, 1, g(Yes, No, false, false, "", "ᆪ")}, + {0xffa4, 0, 0, 0, g(Yes, No, false, false, "", "ᄂ")}, + {0xffa5, 0, 1, 1, g(Yes, No, false, false, "", "ᆬ")}, + {0xffa6, 0, 1, 1, g(Yes, No, false, false, "", "ᆭ")}, + {0xffa7, 0, 0, 0, g(Yes, No, false, false, "", "ᄃ")}, + {0xffa8, 0, 0, 0, g(Yes, No, false, false, "", "ᄄ")}, + {0xffa9, 0, 0, 0, g(Yes, No, false, false, "", "ᄅ")}, + {0xffaa, 0, 1, 1, g(Yes, No, false, false, "", "ᆰ")}, + {0xffab, 0, 1, 1, g(Yes, No, false, false, "", "ᆱ")}, + {0xffac, 0, 1, 1, g(Yes, No, false, false, "", "ᆲ")}, + {0xffad, 0, 1, 1, g(Yes, No, false, false, "", "ᆳ")}, + {0xffae, 0, 1, 1, g(Yes, No, false, false, "", "ᆴ")}, + {0xffaf, 0, 1, 1, g(Yes, No, false, false, "", "ᆵ")}, + {0xffb0, 0, 0, 0, g(Yes, No, false, false, "", "ᄚ")}, + {0xffb1, 0, 0, 0, g(Yes, No, false, false, "", "ᄆ")}, + {0xffb2, 0, 0, 0, g(Yes, No, false, false, "", "ᄇ")}, + {0xffb3, 0, 0, 0, g(Yes, No, false, false, "", "ᄈ")}, + {0xffb4, 0, 0, 0, g(Yes, No, false, false, "", "ᄡ")}, + {0xffb5, 0, 0, 0, g(Yes, No, false, false, "", "ᄉ")}, + {0xffb6, 0, 0, 0, g(Yes, No, false, false, "", "ᄊ")}, + {0xffb7, 0, 0, 0, g(Yes, No, false, false, "", "ᄋ")}, + {0xffb8, 0, 0, 0, g(Yes, No, false, false, "", "ᄌ")}, + {0xffb9, 0, 0, 0, g(Yes, No, false, false, "", "ᄍ")}, + {0xffba, 0, 0, 0, g(Yes, No, false, false, "", "ᄎ")}, + {0xffbb, 0, 0, 0, g(Yes, No, false, false, "", "ᄏ")}, + {0xffbc, 0, 0, 0, g(Yes, No, false, false, "", "ᄐ")}, + {0xffbd, 0, 0, 0, g(Yes, No, false, false, "", "ᄑ")}, + {0xffbe, 0, 0, 0, g(Yes, No, false, false, "", "ᄒ")}, + {0xffbf, 0, 0, 0, f(Yes, false, "")}, + {0xffc2, 0, 1, 1, g(Yes, No, false, false, "", "ᅡ")}, + {0xffc3, 0, 1, 1, g(Yes, No, false, false, "", "ᅢ")}, + {0xffc4, 0, 1, 1, g(Yes, No, false, false, "", "ᅣ")}, + {0xffc5, 0, 1, 1, g(Yes, No, false, false, "", "ᅤ")}, + {0xffc6, 0, 1, 1, g(Yes, No, false, false, "", "ᅥ")}, + {0xffc7, 0, 1, 1, g(Yes, No, false, false, "", "ᅦ")}, + {0xffc8, 0, 0, 0, f(Yes, false, "")}, + {0xffca, 0, 1, 1, g(Yes, No, false, false, "", "ᅧ")}, + {0xffcb, 0, 1, 1, g(Yes, No, false, false, "", "ᅨ")}, + {0xffcc, 0, 1, 1, g(Yes, No, false, false, "", "ᅩ")}, + {0xffcd, 0, 1, 1, g(Yes, No, false, false, "", "ᅪ")}, + {0xffce, 0, 1, 1, g(Yes, No, false, false, "", "ᅫ")}, + {0xffcf, 0, 1, 1, g(Yes, No, false, false, "", "ᅬ")}, + {0xffd0, 0, 0, 0, f(Yes, false, "")}, + {0xffd2, 0, 1, 1, g(Yes, No, false, false, "", "ᅭ")}, + {0xffd3, 0, 1, 1, g(Yes, No, false, false, "", "ᅮ")}, + {0xffd4, 0, 1, 1, g(Yes, No, false, false, "", "ᅯ")}, + {0xffd5, 0, 1, 1, g(Yes, No, false, false, "", "ᅰ")}, + {0xffd6, 0, 1, 1, g(Yes, No, false, false, "", "ᅱ")}, + {0xffd7, 0, 1, 1, g(Yes, No, false, false, "", "ᅲ")}, + {0xffd8, 0, 0, 0, f(Yes, false, "")}, + {0xffda, 0, 1, 1, g(Yes, No, false, false, "", "ᅳ")}, + {0xffdb, 0, 1, 1, g(Yes, No, false, false, "", "ᅴ")}, + {0xffdc, 0, 1, 1, g(Yes, No, false, false, "", "ᅵ")}, + {0xffdd, 0, 0, 0, f(Yes, false, "")}, + {0xffe0, 0, 0, 0, g(Yes, No, false, false, "", "¢")}, + {0xffe1, 0, 0, 0, g(Yes, No, false, false, "", "£")}, + {0xffe2, 0, 0, 0, g(Yes, No, false, false, "", "¬")}, + {0xffe3, 0, 0, 1, g(Yes, No, false, false, "", " ̄")}, + {0xffe4, 0, 0, 0, g(Yes, No, false, false, "", "¦")}, + {0xffe5, 0, 0, 0, g(Yes, No, false, false, "", "¥")}, + {0xffe6, 0, 0, 0, g(Yes, No, false, false, "", "₩")}, + {0xffe7, 0, 0, 0, f(Yes, false, "")}, + {0xffe8, 0, 0, 0, g(Yes, No, false, false, "", "│")}, + {0xffe9, 0, 0, 0, g(Yes, No, false, false, "", "←")}, + {0xffea, 0, 0, 0, g(Yes, No, false, false, "", "↑")}, + {0xffeb, 0, 0, 0, g(Yes, No, false, false, "", "→")}, + {0xffec, 0, 0, 0, g(Yes, No, false, false, "", "↓")}, + {0xffed, 0, 0, 0, g(Yes, No, false, false, "", "■")}, + {0xffee, 0, 0, 0, g(Yes, No, false, false, "", "○")}, + {0xffef, 0, 0, 0, f(Yes, false, "")}, + {0x101fd, 220, 1, 1, f(Yes, false, "")}, + {0x101fe, 0, 0, 0, f(Yes, false, "")}, + {0x102e0, 220, 1, 1, f(Yes, false, "")}, + {0x102e1, 0, 0, 0, f(Yes, false, "")}, + {0x10376, 230, 1, 1, f(Yes, false, "")}, + {0x1037b, 0, 0, 0, f(Yes, false, "")}, + {0x10a0d, 220, 1, 1, f(Yes, false, "")}, + {0x10a0e, 0, 0, 0, f(Yes, false, "")}, + {0x10a0f, 230, 1, 1, f(Yes, false, "")}, + {0x10a10, 0, 0, 0, f(Yes, false, "")}, + {0x10a38, 230, 1, 1, f(Yes, false, "")}, + {0x10a39, 1, 1, 1, f(Yes, false, "")}, + {0x10a3a, 220, 1, 1, f(Yes, false, "")}, + {0x10a3b, 0, 0, 0, f(Yes, false, "")}, + {0x10a3f, 9, 1, 1, f(Yes, false, "")}, + {0x10a40, 0, 0, 0, f(Yes, false, "")}, + {0x10ae5, 230, 1, 1, f(Yes, false, "")}, + {0x10ae6, 220, 1, 1, f(Yes, false, "")}, + {0x10ae7, 0, 0, 0, f(Yes, false, "")}, + {0x11046, 9, 1, 1, f(Yes, false, "")}, + {0x11047, 0, 0, 0, f(Yes, false, "")}, + {0x1107f, 9, 1, 1, f(Yes, false, "")}, + {0x11080, 0, 0, 0, f(Yes, false, "")}, + {0x11099, 0, 0, 0, f(Yes, true, "")}, + {0x1109a, 0, 0, 1, f(Yes, false, "𑂚")}, + {0x1109b, 0, 0, 0, f(Yes, true, "")}, + {0x1109c, 0, 0, 1, f(Yes, false, "𑂜")}, + {0x1109d, 0, 0, 0, f(Yes, false, "")}, + {0x110a5, 0, 0, 0, f(Yes, true, "")}, + {0x110a6, 0, 0, 0, f(Yes, false, "")}, + {0x110ab, 0, 0, 1, f(Yes, false, "𑂫")}, + {0x110ac, 0, 0, 0, f(Yes, false, "")}, + {0x110b9, 9, 1, 1, f(Yes, false, "")}, + {0x110ba, 7, 1, 1, f(Maybe, false, "")}, + {0x110bb, 0, 0, 0, f(Yes, false, "")}, + {0x11100, 230, 1, 1, f(Yes, false, "")}, + {0x11103, 0, 0, 0, f(Yes, false, "")}, + {0x11127, 0, 1, 1, f(Maybe, false, "")}, + {0x11128, 0, 0, 0, f(Yes, false, "")}, + {0x1112e, 0, 0, 1, f(Yes, false, "𑄮")}, + {0x1112f, 0, 0, 1, f(Yes, false, "𑄯")}, + {0x11130, 0, 0, 0, f(Yes, false, "")}, + {0x11131, 0, 0, 0, f(Yes, true, "")}, + {0x11133, 9, 1, 1, f(Yes, false, "")}, + {0x11135, 0, 0, 0, f(Yes, false, "")}, + {0x11173, 7, 1, 1, f(Yes, false, "")}, + {0x11174, 0, 0, 0, f(Yes, false, "")}, + {0x111c0, 9, 1, 1, f(Yes, false, "")}, + {0x111c1, 0, 0, 0, f(Yes, false, "")}, + {0x111ca, 7, 1, 1, f(Yes, false, "")}, + {0x111cb, 0, 0, 0, f(Yes, false, "")}, + {0x11235, 9, 1, 1, f(Yes, false, "")}, + {0x11236, 7, 1, 1, f(Yes, false, "")}, + {0x11237, 0, 0, 0, f(Yes, false, "")}, + {0x112e9, 7, 1, 1, f(Yes, false, "")}, + {0x112ea, 9, 1, 1, f(Yes, false, "")}, + {0x112eb, 0, 0, 0, f(Yes, false, "")}, + {0x1133c, 7, 1, 1, f(Yes, false, "")}, + {0x1133d, 0, 0, 0, f(Yes, false, "")}, + {0x1133e, 0, 1, 1, f(Maybe, false, "")}, + {0x1133f, 0, 0, 0, f(Yes, false, "")}, + {0x11347, 0, 0, 0, f(Yes, true, "")}, + {0x11348, 0, 0, 0, f(Yes, false, "")}, + {0x1134b, 0, 0, 1, f(Yes, false, "𑍋")}, + {0x1134c, 0, 0, 1, f(Yes, false, "𑍌")}, + {0x1134d, 9, 1, 1, f(Yes, false, "")}, + {0x1134e, 0, 0, 0, f(Yes, false, "")}, + {0x11357, 0, 1, 1, f(Maybe, false, "")}, + {0x11358, 0, 0, 0, f(Yes, false, "")}, + {0x11366, 230, 1, 1, f(Yes, false, "")}, + {0x1136d, 0, 0, 0, f(Yes, false, "")}, + {0x11370, 230, 1, 1, f(Yes, false, "")}, + {0x11375, 0, 0, 0, f(Yes, false, "")}, + {0x11442, 9, 1, 1, f(Yes, false, "")}, + {0x11443, 0, 0, 0, f(Yes, false, "")}, + {0x11446, 7, 1, 1, f(Yes, false, "")}, + {0x11447, 0, 0, 0, f(Yes, false, "")}, + {0x114b0, 0, 1, 1, f(Maybe, false, "")}, + {0x114b1, 0, 0, 0, f(Yes, false, "")}, + {0x114b9, 0, 0, 0, f(Yes, true, "")}, + {0x114ba, 0, 1, 1, f(Maybe, false, "")}, + {0x114bb, 0, 0, 1, f(Yes, false, "𑒻")}, + {0x114bc, 0, 0, 1, f(Yes, false, "𑒼")}, + {0x114bd, 0, 1, 1, f(Maybe, false, "")}, + {0x114be, 0, 0, 1, f(Yes, false, "𑒾")}, + {0x114bf, 0, 0, 0, f(Yes, false, "")}, + {0x114c2, 9, 1, 1, f(Yes, false, "")}, + {0x114c3, 7, 1, 1, f(Yes, false, "")}, + {0x114c4, 0, 0, 0, f(Yes, false, "")}, + {0x115af, 0, 1, 1, f(Maybe, false, "")}, + {0x115b0, 0, 0, 0, f(Yes, false, "")}, + {0x115b8, 0, 0, 0, f(Yes, true, "")}, + {0x115ba, 0, 0, 1, f(Yes, false, "𑖺")}, + {0x115bb, 0, 0, 1, f(Yes, false, "𑖻")}, + {0x115bc, 0, 0, 0, f(Yes, false, "")}, + {0x115bf, 9, 1, 1, f(Yes, false, "")}, + {0x115c0, 7, 1, 1, f(Yes, false, "")}, + {0x115c1, 0, 0, 0, f(Yes, false, "")}, + {0x1163f, 9, 1, 1, f(Yes, false, "")}, + {0x11640, 0, 0, 0, f(Yes, false, "")}, + {0x116b6, 9, 1, 1, f(Yes, false, "")}, + {0x116b7, 7, 1, 1, f(Yes, false, "")}, + {0x116b8, 0, 0, 0, f(Yes, false, "")}, + {0x1172b, 9, 1, 1, f(Yes, false, "")}, + {0x1172c, 0, 0, 0, f(Yes, false, "")}, + {0x11a34, 9, 1, 1, f(Yes, false, "")}, + {0x11a35, 0, 0, 0, f(Yes, false, "")}, + {0x11a47, 9, 1, 1, f(Yes, false, "")}, + {0x11a48, 0, 0, 0, f(Yes, false, "")}, + {0x11a99, 9, 1, 1, f(Yes, false, "")}, + {0x11a9a, 0, 0, 0, f(Yes, false, "")}, + {0x11c3f, 9, 1, 1, f(Yes, false, "")}, + {0x11c40, 0, 0, 0, f(Yes, false, "")}, + {0x11d42, 7, 1, 1, f(Yes, false, "")}, + {0x11d43, 0, 0, 0, f(Yes, false, "")}, + {0x11d44, 9, 1, 1, f(Yes, false, "")}, + {0x11d46, 0, 0, 0, f(Yes, false, "")}, + {0x16af0, 1, 1, 1, f(Yes, false, "")}, + {0x16af5, 0, 0, 0, f(Yes, false, "")}, + {0x16b30, 230, 1, 1, f(Yes, false, "")}, + {0x16b37, 0, 0, 0, f(Yes, false, "")}, + {0x1bc9e, 1, 1, 1, f(Yes, false, "")}, + {0x1bc9f, 0, 0, 0, f(Yes, false, "")}, + {0x1d15e, 0, 0, 1, f(No, false, "𝅗𝅥")}, + {0x1d15f, 0, 0, 1, f(No, false, "𝅘𝅥")}, + {0x1d160, 0, 0, 2, f(No, false, "𝅘𝅥𝅮")}, + {0x1d161, 0, 0, 2, f(No, false, "𝅘𝅥𝅯")}, + {0x1d162, 0, 0, 2, f(No, false, "𝅘𝅥𝅰")}, + {0x1d163, 0, 0, 2, f(No, false, "𝅘𝅥𝅱")}, + {0x1d164, 0, 0, 2, f(No, false, "𝅘𝅥𝅲")}, + {0x1d165, 216, 1, 1, f(Yes, false, "")}, + {0x1d167, 1, 1, 1, f(Yes, false, "")}, + {0x1d16a, 0, 0, 0, f(Yes, false, "")}, + {0x1d16d, 226, 1, 1, f(Yes, false, "")}, + {0x1d16e, 216, 1, 1, f(Yes, false, "")}, + {0x1d173, 0, 0, 0, f(Yes, false, "")}, + {0x1d17b, 220, 1, 1, f(Yes, false, "")}, + {0x1d183, 0, 0, 0, f(Yes, false, "")}, + {0x1d185, 230, 1, 1, f(Yes, false, "")}, + {0x1d18a, 220, 1, 1, f(Yes, false, "")}, + {0x1d18c, 0, 0, 0, f(Yes, false, "")}, + {0x1d1aa, 230, 1, 1, f(Yes, false, "")}, + {0x1d1ae, 0, 0, 0, f(Yes, false, "")}, + {0x1d1bb, 0, 0, 1, f(No, false, "𝆹𝅥")}, + {0x1d1bc, 0, 0, 1, f(No, false, "𝆺𝅥")}, + {0x1d1bd, 0, 0, 2, f(No, false, "𝆹𝅥𝅮")}, + {0x1d1be, 0, 0, 2, f(No, false, "𝆺𝅥𝅮")}, + {0x1d1bf, 0, 0, 2, f(No, false, "𝆹𝅥𝅯")}, + {0x1d1c0, 0, 0, 2, f(No, false, "𝆺𝅥𝅯")}, + {0x1d1c1, 0, 0, 0, f(Yes, false, "")}, + {0x1d242, 230, 1, 1, f(Yes, false, "")}, + {0x1d245, 0, 0, 0, f(Yes, false, "")}, + {0x1d400, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0x1d401, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0x1d402, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x1d403, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x1d404, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0x1d405, 0, 0, 0, g(Yes, No, false, false, "", "F")}, + {0x1d406, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0x1d407, 0, 0, 0, g(Yes, No, false, false, "", "H")}, + {0x1d408, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0x1d409, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0x1d40a, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0x1d40b, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x1d40c, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x1d40d, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0x1d40e, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0x1d40f, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0x1d410, 0, 0, 0, g(Yes, No, false, false, "", "Q")}, + {0x1d411, 0, 0, 0, g(Yes, No, false, false, "", "R")}, + {0x1d412, 0, 0, 0, g(Yes, No, false, false, "", "S")}, + {0x1d413, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0x1d414, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0x1d415, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x1d416, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0x1d417, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0x1d418, 0, 0, 0, g(Yes, No, false, false, "", "Y")}, + {0x1d419, 0, 0, 0, g(Yes, No, false, false, "", "Z")}, + {0x1d41a, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0x1d41b, 0, 0, 0, g(Yes, No, false, false, "", "b")}, + {0x1d41c, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0x1d41d, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x1d41e, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x1d41f, 0, 0, 0, g(Yes, No, false, false, "", "f")}, + {0x1d420, 0, 0, 0, g(Yes, No, false, false, "", "g")}, + {0x1d421, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0x1d422, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x1d423, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x1d424, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0x1d425, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x1d426, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x1d427, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0x1d428, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0x1d429, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0x1d42a, 0, 0, 0, g(Yes, No, false, false, "", "q")}, + {0x1d42b, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0x1d42c, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0x1d42d, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0x1d42e, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0x1d42f, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x1d430, 0, 0, 0, g(Yes, No, false, false, "", "w")}, + {0x1d431, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x1d432, 0, 0, 0, g(Yes, No, false, false, "", "y")}, + {0x1d433, 0, 0, 0, g(Yes, No, false, false, "", "z")}, + {0x1d434, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0x1d435, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0x1d436, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x1d437, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x1d438, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0x1d439, 0, 0, 0, g(Yes, No, false, false, "", "F")}, + {0x1d43a, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0x1d43b, 0, 0, 0, g(Yes, No, false, false, "", "H")}, + {0x1d43c, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0x1d43d, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0x1d43e, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0x1d43f, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x1d440, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x1d441, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0x1d442, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0x1d443, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0x1d444, 0, 0, 0, g(Yes, No, false, false, "", "Q")}, + {0x1d445, 0, 0, 0, g(Yes, No, false, false, "", "R")}, + {0x1d446, 0, 0, 0, g(Yes, No, false, false, "", "S")}, + {0x1d447, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0x1d448, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0x1d449, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x1d44a, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0x1d44b, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0x1d44c, 0, 0, 0, g(Yes, No, false, false, "", "Y")}, + {0x1d44d, 0, 0, 0, g(Yes, No, false, false, "", "Z")}, + {0x1d44e, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0x1d44f, 0, 0, 0, g(Yes, No, false, false, "", "b")}, + {0x1d450, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0x1d451, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x1d452, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x1d453, 0, 0, 0, g(Yes, No, false, false, "", "f")}, + {0x1d454, 0, 0, 0, g(Yes, No, false, false, "", "g")}, + {0x1d455, 0, 0, 0, f(Yes, false, "")}, + {0x1d456, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x1d457, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x1d458, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0x1d459, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x1d45a, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x1d45b, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0x1d45c, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0x1d45d, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0x1d45e, 0, 0, 0, g(Yes, No, false, false, "", "q")}, + {0x1d45f, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0x1d460, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0x1d461, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0x1d462, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0x1d463, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x1d464, 0, 0, 0, g(Yes, No, false, false, "", "w")}, + {0x1d465, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x1d466, 0, 0, 0, g(Yes, No, false, false, "", "y")}, + {0x1d467, 0, 0, 0, g(Yes, No, false, false, "", "z")}, + {0x1d468, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0x1d469, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0x1d46a, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x1d46b, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x1d46c, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0x1d46d, 0, 0, 0, g(Yes, No, false, false, "", "F")}, + {0x1d46e, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0x1d46f, 0, 0, 0, g(Yes, No, false, false, "", "H")}, + {0x1d470, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0x1d471, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0x1d472, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0x1d473, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x1d474, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x1d475, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0x1d476, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0x1d477, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0x1d478, 0, 0, 0, g(Yes, No, false, false, "", "Q")}, + {0x1d479, 0, 0, 0, g(Yes, No, false, false, "", "R")}, + {0x1d47a, 0, 0, 0, g(Yes, No, false, false, "", "S")}, + {0x1d47b, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0x1d47c, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0x1d47d, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x1d47e, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0x1d47f, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0x1d480, 0, 0, 0, g(Yes, No, false, false, "", "Y")}, + {0x1d481, 0, 0, 0, g(Yes, No, false, false, "", "Z")}, + {0x1d482, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0x1d483, 0, 0, 0, g(Yes, No, false, false, "", "b")}, + {0x1d484, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0x1d485, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x1d486, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x1d487, 0, 0, 0, g(Yes, No, false, false, "", "f")}, + {0x1d488, 0, 0, 0, g(Yes, No, false, false, "", "g")}, + {0x1d489, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0x1d48a, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x1d48b, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x1d48c, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0x1d48d, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x1d48e, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x1d48f, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0x1d490, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0x1d491, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0x1d492, 0, 0, 0, g(Yes, No, false, false, "", "q")}, + {0x1d493, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0x1d494, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0x1d495, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0x1d496, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0x1d497, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x1d498, 0, 0, 0, g(Yes, No, false, false, "", "w")}, + {0x1d499, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x1d49a, 0, 0, 0, g(Yes, No, false, false, "", "y")}, + {0x1d49b, 0, 0, 0, g(Yes, No, false, false, "", "z")}, + {0x1d49c, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0x1d49d, 0, 0, 0, f(Yes, false, "")}, + {0x1d49e, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x1d49f, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x1d4a0, 0, 0, 0, f(Yes, false, "")}, + {0x1d4a2, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0x1d4a3, 0, 0, 0, f(Yes, false, "")}, + {0x1d4a5, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0x1d4a6, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0x1d4a7, 0, 0, 0, f(Yes, false, "")}, + {0x1d4a9, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0x1d4aa, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0x1d4ab, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0x1d4ac, 0, 0, 0, g(Yes, No, false, false, "", "Q")}, + {0x1d4ad, 0, 0, 0, f(Yes, false, "")}, + {0x1d4ae, 0, 0, 0, g(Yes, No, false, false, "", "S")}, + {0x1d4af, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0x1d4b0, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0x1d4b1, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x1d4b2, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0x1d4b3, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0x1d4b4, 0, 0, 0, g(Yes, No, false, false, "", "Y")}, + {0x1d4b5, 0, 0, 0, g(Yes, No, false, false, "", "Z")}, + {0x1d4b6, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0x1d4b7, 0, 0, 0, g(Yes, No, false, false, "", "b")}, + {0x1d4b8, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0x1d4b9, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x1d4ba, 0, 0, 0, f(Yes, false, "")}, + {0x1d4bb, 0, 0, 0, g(Yes, No, false, false, "", "f")}, + {0x1d4bc, 0, 0, 0, f(Yes, false, "")}, + {0x1d4bd, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0x1d4be, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x1d4bf, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x1d4c0, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0x1d4c1, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x1d4c2, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x1d4c3, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0x1d4c4, 0, 0, 0, f(Yes, false, "")}, + {0x1d4c5, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0x1d4c6, 0, 0, 0, g(Yes, No, false, false, "", "q")}, + {0x1d4c7, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0x1d4c8, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0x1d4c9, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0x1d4ca, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0x1d4cb, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x1d4cc, 0, 0, 0, g(Yes, No, false, false, "", "w")}, + {0x1d4cd, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x1d4ce, 0, 0, 0, g(Yes, No, false, false, "", "y")}, + {0x1d4cf, 0, 0, 0, g(Yes, No, false, false, "", "z")}, + {0x1d4d0, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0x1d4d1, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0x1d4d2, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x1d4d3, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x1d4d4, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0x1d4d5, 0, 0, 0, g(Yes, No, false, false, "", "F")}, + {0x1d4d6, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0x1d4d7, 0, 0, 0, g(Yes, No, false, false, "", "H")}, + {0x1d4d8, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0x1d4d9, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0x1d4da, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0x1d4db, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x1d4dc, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x1d4dd, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0x1d4de, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0x1d4df, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0x1d4e0, 0, 0, 0, g(Yes, No, false, false, "", "Q")}, + {0x1d4e1, 0, 0, 0, g(Yes, No, false, false, "", "R")}, + {0x1d4e2, 0, 0, 0, g(Yes, No, false, false, "", "S")}, + {0x1d4e3, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0x1d4e4, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0x1d4e5, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x1d4e6, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0x1d4e7, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0x1d4e8, 0, 0, 0, g(Yes, No, false, false, "", "Y")}, + {0x1d4e9, 0, 0, 0, g(Yes, No, false, false, "", "Z")}, + {0x1d4ea, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0x1d4eb, 0, 0, 0, g(Yes, No, false, false, "", "b")}, + {0x1d4ec, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0x1d4ed, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x1d4ee, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x1d4ef, 0, 0, 0, g(Yes, No, false, false, "", "f")}, + {0x1d4f0, 0, 0, 0, g(Yes, No, false, false, "", "g")}, + {0x1d4f1, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0x1d4f2, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x1d4f3, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x1d4f4, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0x1d4f5, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x1d4f6, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x1d4f7, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0x1d4f8, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0x1d4f9, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0x1d4fa, 0, 0, 0, g(Yes, No, false, false, "", "q")}, + {0x1d4fb, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0x1d4fc, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0x1d4fd, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0x1d4fe, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0x1d4ff, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x1d500, 0, 0, 0, g(Yes, No, false, false, "", "w")}, + {0x1d501, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x1d502, 0, 0, 0, g(Yes, No, false, false, "", "y")}, + {0x1d503, 0, 0, 0, g(Yes, No, false, false, "", "z")}, + {0x1d504, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0x1d505, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0x1d506, 0, 0, 0, f(Yes, false, "")}, + {0x1d507, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x1d508, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0x1d509, 0, 0, 0, g(Yes, No, false, false, "", "F")}, + {0x1d50a, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0x1d50b, 0, 0, 0, f(Yes, false, "")}, + {0x1d50d, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0x1d50e, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0x1d50f, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x1d510, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x1d511, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0x1d512, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0x1d513, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0x1d514, 0, 0, 0, g(Yes, No, false, false, "", "Q")}, + {0x1d515, 0, 0, 0, f(Yes, false, "")}, + {0x1d516, 0, 0, 0, g(Yes, No, false, false, "", "S")}, + {0x1d517, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0x1d518, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0x1d519, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x1d51a, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0x1d51b, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0x1d51c, 0, 0, 0, g(Yes, No, false, false, "", "Y")}, + {0x1d51d, 0, 0, 0, f(Yes, false, "")}, + {0x1d51e, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0x1d51f, 0, 0, 0, g(Yes, No, false, false, "", "b")}, + {0x1d520, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0x1d521, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x1d522, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x1d523, 0, 0, 0, g(Yes, No, false, false, "", "f")}, + {0x1d524, 0, 0, 0, g(Yes, No, false, false, "", "g")}, + {0x1d525, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0x1d526, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x1d527, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x1d528, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0x1d529, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x1d52a, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x1d52b, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0x1d52c, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0x1d52d, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0x1d52e, 0, 0, 0, g(Yes, No, false, false, "", "q")}, + {0x1d52f, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0x1d530, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0x1d531, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0x1d532, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0x1d533, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x1d534, 0, 0, 0, g(Yes, No, false, false, "", "w")}, + {0x1d535, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x1d536, 0, 0, 0, g(Yes, No, false, false, "", "y")}, + {0x1d537, 0, 0, 0, g(Yes, No, false, false, "", "z")}, + {0x1d538, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0x1d539, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0x1d53a, 0, 0, 0, f(Yes, false, "")}, + {0x1d53b, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x1d53c, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0x1d53d, 0, 0, 0, g(Yes, No, false, false, "", "F")}, + {0x1d53e, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0x1d53f, 0, 0, 0, f(Yes, false, "")}, + {0x1d540, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0x1d541, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0x1d542, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0x1d543, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x1d544, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x1d545, 0, 0, 0, f(Yes, false, "")}, + {0x1d546, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0x1d547, 0, 0, 0, f(Yes, false, "")}, + {0x1d54a, 0, 0, 0, g(Yes, No, false, false, "", "S")}, + {0x1d54b, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0x1d54c, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0x1d54d, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x1d54e, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0x1d54f, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0x1d550, 0, 0, 0, g(Yes, No, false, false, "", "Y")}, + {0x1d551, 0, 0, 0, f(Yes, false, "")}, + {0x1d552, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0x1d553, 0, 0, 0, g(Yes, No, false, false, "", "b")}, + {0x1d554, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0x1d555, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x1d556, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x1d557, 0, 0, 0, g(Yes, No, false, false, "", "f")}, + {0x1d558, 0, 0, 0, g(Yes, No, false, false, "", "g")}, + {0x1d559, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0x1d55a, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x1d55b, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x1d55c, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0x1d55d, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x1d55e, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x1d55f, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0x1d560, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0x1d561, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0x1d562, 0, 0, 0, g(Yes, No, false, false, "", "q")}, + {0x1d563, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0x1d564, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0x1d565, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0x1d566, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0x1d567, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x1d568, 0, 0, 0, g(Yes, No, false, false, "", "w")}, + {0x1d569, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x1d56a, 0, 0, 0, g(Yes, No, false, false, "", "y")}, + {0x1d56b, 0, 0, 0, g(Yes, No, false, false, "", "z")}, + {0x1d56c, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0x1d56d, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0x1d56e, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x1d56f, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x1d570, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0x1d571, 0, 0, 0, g(Yes, No, false, false, "", "F")}, + {0x1d572, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0x1d573, 0, 0, 0, g(Yes, No, false, false, "", "H")}, + {0x1d574, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0x1d575, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0x1d576, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0x1d577, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x1d578, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x1d579, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0x1d57a, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0x1d57b, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0x1d57c, 0, 0, 0, g(Yes, No, false, false, "", "Q")}, + {0x1d57d, 0, 0, 0, g(Yes, No, false, false, "", "R")}, + {0x1d57e, 0, 0, 0, g(Yes, No, false, false, "", "S")}, + {0x1d57f, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0x1d580, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0x1d581, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x1d582, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0x1d583, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0x1d584, 0, 0, 0, g(Yes, No, false, false, "", "Y")}, + {0x1d585, 0, 0, 0, g(Yes, No, false, false, "", "Z")}, + {0x1d586, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0x1d587, 0, 0, 0, g(Yes, No, false, false, "", "b")}, + {0x1d588, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0x1d589, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x1d58a, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x1d58b, 0, 0, 0, g(Yes, No, false, false, "", "f")}, + {0x1d58c, 0, 0, 0, g(Yes, No, false, false, "", "g")}, + {0x1d58d, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0x1d58e, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x1d58f, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x1d590, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0x1d591, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x1d592, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x1d593, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0x1d594, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0x1d595, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0x1d596, 0, 0, 0, g(Yes, No, false, false, "", "q")}, + {0x1d597, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0x1d598, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0x1d599, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0x1d59a, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0x1d59b, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x1d59c, 0, 0, 0, g(Yes, No, false, false, "", "w")}, + {0x1d59d, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x1d59e, 0, 0, 0, g(Yes, No, false, false, "", "y")}, + {0x1d59f, 0, 0, 0, g(Yes, No, false, false, "", "z")}, + {0x1d5a0, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0x1d5a1, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0x1d5a2, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x1d5a3, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x1d5a4, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0x1d5a5, 0, 0, 0, g(Yes, No, false, false, "", "F")}, + {0x1d5a6, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0x1d5a7, 0, 0, 0, g(Yes, No, false, false, "", "H")}, + {0x1d5a8, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0x1d5a9, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0x1d5aa, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0x1d5ab, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x1d5ac, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x1d5ad, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0x1d5ae, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0x1d5af, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0x1d5b0, 0, 0, 0, g(Yes, No, false, false, "", "Q")}, + {0x1d5b1, 0, 0, 0, g(Yes, No, false, false, "", "R")}, + {0x1d5b2, 0, 0, 0, g(Yes, No, false, false, "", "S")}, + {0x1d5b3, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0x1d5b4, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0x1d5b5, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x1d5b6, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0x1d5b7, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0x1d5b8, 0, 0, 0, g(Yes, No, false, false, "", "Y")}, + {0x1d5b9, 0, 0, 0, g(Yes, No, false, false, "", "Z")}, + {0x1d5ba, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0x1d5bb, 0, 0, 0, g(Yes, No, false, false, "", "b")}, + {0x1d5bc, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0x1d5bd, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x1d5be, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x1d5bf, 0, 0, 0, g(Yes, No, false, false, "", "f")}, + {0x1d5c0, 0, 0, 0, g(Yes, No, false, false, "", "g")}, + {0x1d5c1, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0x1d5c2, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x1d5c3, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x1d5c4, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0x1d5c5, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x1d5c6, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x1d5c7, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0x1d5c8, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0x1d5c9, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0x1d5ca, 0, 0, 0, g(Yes, No, false, false, "", "q")}, + {0x1d5cb, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0x1d5cc, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0x1d5cd, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0x1d5ce, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0x1d5cf, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x1d5d0, 0, 0, 0, g(Yes, No, false, false, "", "w")}, + {0x1d5d1, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x1d5d2, 0, 0, 0, g(Yes, No, false, false, "", "y")}, + {0x1d5d3, 0, 0, 0, g(Yes, No, false, false, "", "z")}, + {0x1d5d4, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0x1d5d5, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0x1d5d6, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x1d5d7, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x1d5d8, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0x1d5d9, 0, 0, 0, g(Yes, No, false, false, "", "F")}, + {0x1d5da, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0x1d5db, 0, 0, 0, g(Yes, No, false, false, "", "H")}, + {0x1d5dc, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0x1d5dd, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0x1d5de, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0x1d5df, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x1d5e0, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x1d5e1, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0x1d5e2, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0x1d5e3, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0x1d5e4, 0, 0, 0, g(Yes, No, false, false, "", "Q")}, + {0x1d5e5, 0, 0, 0, g(Yes, No, false, false, "", "R")}, + {0x1d5e6, 0, 0, 0, g(Yes, No, false, false, "", "S")}, + {0x1d5e7, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0x1d5e8, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0x1d5e9, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x1d5ea, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0x1d5eb, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0x1d5ec, 0, 0, 0, g(Yes, No, false, false, "", "Y")}, + {0x1d5ed, 0, 0, 0, g(Yes, No, false, false, "", "Z")}, + {0x1d5ee, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0x1d5ef, 0, 0, 0, g(Yes, No, false, false, "", "b")}, + {0x1d5f0, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0x1d5f1, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x1d5f2, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x1d5f3, 0, 0, 0, g(Yes, No, false, false, "", "f")}, + {0x1d5f4, 0, 0, 0, g(Yes, No, false, false, "", "g")}, + {0x1d5f5, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0x1d5f6, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x1d5f7, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x1d5f8, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0x1d5f9, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x1d5fa, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x1d5fb, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0x1d5fc, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0x1d5fd, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0x1d5fe, 0, 0, 0, g(Yes, No, false, false, "", "q")}, + {0x1d5ff, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0x1d600, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0x1d601, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0x1d602, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0x1d603, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x1d604, 0, 0, 0, g(Yes, No, false, false, "", "w")}, + {0x1d605, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x1d606, 0, 0, 0, g(Yes, No, false, false, "", "y")}, + {0x1d607, 0, 0, 0, g(Yes, No, false, false, "", "z")}, + {0x1d608, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0x1d609, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0x1d60a, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x1d60b, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x1d60c, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0x1d60d, 0, 0, 0, g(Yes, No, false, false, "", "F")}, + {0x1d60e, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0x1d60f, 0, 0, 0, g(Yes, No, false, false, "", "H")}, + {0x1d610, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0x1d611, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0x1d612, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0x1d613, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x1d614, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x1d615, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0x1d616, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0x1d617, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0x1d618, 0, 0, 0, g(Yes, No, false, false, "", "Q")}, + {0x1d619, 0, 0, 0, g(Yes, No, false, false, "", "R")}, + {0x1d61a, 0, 0, 0, g(Yes, No, false, false, "", "S")}, + {0x1d61b, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0x1d61c, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0x1d61d, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x1d61e, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0x1d61f, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0x1d620, 0, 0, 0, g(Yes, No, false, false, "", "Y")}, + {0x1d621, 0, 0, 0, g(Yes, No, false, false, "", "Z")}, + {0x1d622, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0x1d623, 0, 0, 0, g(Yes, No, false, false, "", "b")}, + {0x1d624, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0x1d625, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x1d626, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x1d627, 0, 0, 0, g(Yes, No, false, false, "", "f")}, + {0x1d628, 0, 0, 0, g(Yes, No, false, false, "", "g")}, + {0x1d629, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0x1d62a, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x1d62b, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x1d62c, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0x1d62d, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x1d62e, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x1d62f, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0x1d630, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0x1d631, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0x1d632, 0, 0, 0, g(Yes, No, false, false, "", "q")}, + {0x1d633, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0x1d634, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0x1d635, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0x1d636, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0x1d637, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x1d638, 0, 0, 0, g(Yes, No, false, false, "", "w")}, + {0x1d639, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x1d63a, 0, 0, 0, g(Yes, No, false, false, "", "y")}, + {0x1d63b, 0, 0, 0, g(Yes, No, false, false, "", "z")}, + {0x1d63c, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0x1d63d, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0x1d63e, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x1d63f, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x1d640, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0x1d641, 0, 0, 0, g(Yes, No, false, false, "", "F")}, + {0x1d642, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0x1d643, 0, 0, 0, g(Yes, No, false, false, "", "H")}, + {0x1d644, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0x1d645, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0x1d646, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0x1d647, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x1d648, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x1d649, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0x1d64a, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0x1d64b, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0x1d64c, 0, 0, 0, g(Yes, No, false, false, "", "Q")}, + {0x1d64d, 0, 0, 0, g(Yes, No, false, false, "", "R")}, + {0x1d64e, 0, 0, 0, g(Yes, No, false, false, "", "S")}, + {0x1d64f, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0x1d650, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0x1d651, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x1d652, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0x1d653, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0x1d654, 0, 0, 0, g(Yes, No, false, false, "", "Y")}, + {0x1d655, 0, 0, 0, g(Yes, No, false, false, "", "Z")}, + {0x1d656, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0x1d657, 0, 0, 0, g(Yes, No, false, false, "", "b")}, + {0x1d658, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0x1d659, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x1d65a, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x1d65b, 0, 0, 0, g(Yes, No, false, false, "", "f")}, + {0x1d65c, 0, 0, 0, g(Yes, No, false, false, "", "g")}, + {0x1d65d, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0x1d65e, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x1d65f, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x1d660, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0x1d661, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x1d662, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x1d663, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0x1d664, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0x1d665, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0x1d666, 0, 0, 0, g(Yes, No, false, false, "", "q")}, + {0x1d667, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0x1d668, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0x1d669, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0x1d66a, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0x1d66b, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x1d66c, 0, 0, 0, g(Yes, No, false, false, "", "w")}, + {0x1d66d, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x1d66e, 0, 0, 0, g(Yes, No, false, false, "", "y")}, + {0x1d66f, 0, 0, 0, g(Yes, No, false, false, "", "z")}, + {0x1d670, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0x1d671, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0x1d672, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x1d673, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x1d674, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0x1d675, 0, 0, 0, g(Yes, No, false, false, "", "F")}, + {0x1d676, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0x1d677, 0, 0, 0, g(Yes, No, false, false, "", "H")}, + {0x1d678, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0x1d679, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0x1d67a, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0x1d67b, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x1d67c, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x1d67d, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0x1d67e, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0x1d67f, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0x1d680, 0, 0, 0, g(Yes, No, false, false, "", "Q")}, + {0x1d681, 0, 0, 0, g(Yes, No, false, false, "", "R")}, + {0x1d682, 0, 0, 0, g(Yes, No, false, false, "", "S")}, + {0x1d683, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0x1d684, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0x1d685, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x1d686, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0x1d687, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0x1d688, 0, 0, 0, g(Yes, No, false, false, "", "Y")}, + {0x1d689, 0, 0, 0, g(Yes, No, false, false, "", "Z")}, + {0x1d68a, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0x1d68b, 0, 0, 0, g(Yes, No, false, false, "", "b")}, + {0x1d68c, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0x1d68d, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x1d68e, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x1d68f, 0, 0, 0, g(Yes, No, false, false, "", "f")}, + {0x1d690, 0, 0, 0, g(Yes, No, false, false, "", "g")}, + {0x1d691, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0x1d692, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x1d693, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x1d694, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0x1d695, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x1d696, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x1d697, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0x1d698, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0x1d699, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0x1d69a, 0, 0, 0, g(Yes, No, false, false, "", "q")}, + {0x1d69b, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0x1d69c, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0x1d69d, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0x1d69e, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0x1d69f, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x1d6a0, 0, 0, 0, g(Yes, No, false, false, "", "w")}, + {0x1d6a1, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x1d6a2, 0, 0, 0, g(Yes, No, false, false, "", "y")}, + {0x1d6a3, 0, 0, 0, g(Yes, No, false, false, "", "z")}, + {0x1d6a4, 0, 0, 0, g(Yes, No, false, false, "", "ı")}, + {0x1d6a5, 0, 0, 0, g(Yes, No, false, false, "", "ȷ")}, + {0x1d6a6, 0, 0, 0, f(Yes, false, "")}, + {0x1d6a8, 0, 0, 0, g(Yes, No, false, false, "", "Α")}, + {0x1d6a9, 0, 0, 0, g(Yes, No, false, false, "", "Β")}, + {0x1d6aa, 0, 0, 0, g(Yes, No, false, false, "", "Γ")}, + {0x1d6ab, 0, 0, 0, g(Yes, No, false, false, "", "Δ")}, + {0x1d6ac, 0, 0, 0, g(Yes, No, false, false, "", "Ε")}, + {0x1d6ad, 0, 0, 0, g(Yes, No, false, false, "", "Ζ")}, + {0x1d6ae, 0, 0, 0, g(Yes, No, false, false, "", "Η")}, + {0x1d6af, 0, 0, 0, g(Yes, No, false, false, "", "Θ")}, + {0x1d6b0, 0, 0, 0, g(Yes, No, false, false, "", "Ι")}, + {0x1d6b1, 0, 0, 0, g(Yes, No, false, false, "", "Κ")}, + {0x1d6b2, 0, 0, 0, g(Yes, No, false, false, "", "Λ")}, + {0x1d6b3, 0, 0, 0, g(Yes, No, false, false, "", "Μ")}, + {0x1d6b4, 0, 0, 0, g(Yes, No, false, false, "", "Ν")}, + {0x1d6b5, 0, 0, 0, g(Yes, No, false, false, "", "Ξ")}, + {0x1d6b6, 0, 0, 0, g(Yes, No, false, false, "", "Ο")}, + {0x1d6b7, 0, 0, 0, g(Yes, No, false, false, "", "Π")}, + {0x1d6b8, 0, 0, 0, g(Yes, No, false, false, "", "Ρ")}, + {0x1d6b9, 0, 0, 0, g(Yes, No, false, false, "", "Θ")}, + {0x1d6ba, 0, 0, 0, g(Yes, No, false, false, "", "Σ")}, + {0x1d6bb, 0, 0, 0, g(Yes, No, false, false, "", "Τ")}, + {0x1d6bc, 0, 0, 0, g(Yes, No, false, false, "", "Υ")}, + {0x1d6bd, 0, 0, 0, g(Yes, No, false, false, "", "Φ")}, + {0x1d6be, 0, 0, 0, g(Yes, No, false, false, "", "Χ")}, + {0x1d6bf, 0, 0, 0, g(Yes, No, false, false, "", "Ψ")}, + {0x1d6c0, 0, 0, 0, g(Yes, No, false, false, "", "Ω")}, + {0x1d6c1, 0, 0, 0, g(Yes, No, false, false, "", "∇")}, + {0x1d6c2, 0, 0, 0, g(Yes, No, false, false, "", "α")}, + {0x1d6c3, 0, 0, 0, g(Yes, No, false, false, "", "β")}, + {0x1d6c4, 0, 0, 0, g(Yes, No, false, false, "", "γ")}, + {0x1d6c5, 0, 0, 0, g(Yes, No, false, false, "", "δ")}, + {0x1d6c6, 0, 0, 0, g(Yes, No, false, false, "", "ε")}, + {0x1d6c7, 0, 0, 0, g(Yes, No, false, false, "", "ζ")}, + {0x1d6c8, 0, 0, 0, g(Yes, No, false, false, "", "η")}, + {0x1d6c9, 0, 0, 0, g(Yes, No, false, false, "", "θ")}, + {0x1d6ca, 0, 0, 0, g(Yes, No, false, false, "", "ι")}, + {0x1d6cb, 0, 0, 0, g(Yes, No, false, false, "", "κ")}, + {0x1d6cc, 0, 0, 0, g(Yes, No, false, false, "", "λ")}, + {0x1d6cd, 0, 0, 0, g(Yes, No, false, false, "", "μ")}, + {0x1d6ce, 0, 0, 0, g(Yes, No, false, false, "", "ν")}, + {0x1d6cf, 0, 0, 0, g(Yes, No, false, false, "", "ξ")}, + {0x1d6d0, 0, 0, 0, g(Yes, No, false, false, "", "ο")}, + {0x1d6d1, 0, 0, 0, g(Yes, No, false, false, "", "π")}, + {0x1d6d2, 0, 0, 0, g(Yes, No, false, false, "", "ρ")}, + {0x1d6d3, 0, 0, 0, g(Yes, No, false, false, "", "ς")}, + {0x1d6d4, 0, 0, 0, g(Yes, No, false, false, "", "σ")}, + {0x1d6d5, 0, 0, 0, g(Yes, No, false, false, "", "τ")}, + {0x1d6d6, 0, 0, 0, g(Yes, No, false, false, "", "υ")}, + {0x1d6d7, 0, 0, 0, g(Yes, No, false, false, "", "φ")}, + {0x1d6d8, 0, 0, 0, g(Yes, No, false, false, "", "χ")}, + {0x1d6d9, 0, 0, 0, g(Yes, No, false, false, "", "ψ")}, + {0x1d6da, 0, 0, 0, g(Yes, No, false, false, "", "ω")}, + {0x1d6db, 0, 0, 0, g(Yes, No, false, false, "", "∂")}, + {0x1d6dc, 0, 0, 0, g(Yes, No, false, false, "", "ε")}, + {0x1d6dd, 0, 0, 0, g(Yes, No, false, false, "", "θ")}, + {0x1d6de, 0, 0, 0, g(Yes, No, false, false, "", "κ")}, + {0x1d6df, 0, 0, 0, g(Yes, No, false, false, "", "φ")}, + {0x1d6e0, 0, 0, 0, g(Yes, No, false, false, "", "ρ")}, + {0x1d6e1, 0, 0, 0, g(Yes, No, false, false, "", "π")}, + {0x1d6e2, 0, 0, 0, g(Yes, No, false, false, "", "Α")}, + {0x1d6e3, 0, 0, 0, g(Yes, No, false, false, "", "Β")}, + {0x1d6e4, 0, 0, 0, g(Yes, No, false, false, "", "Γ")}, + {0x1d6e5, 0, 0, 0, g(Yes, No, false, false, "", "Δ")}, + {0x1d6e6, 0, 0, 0, g(Yes, No, false, false, "", "Ε")}, + {0x1d6e7, 0, 0, 0, g(Yes, No, false, false, "", "Ζ")}, + {0x1d6e8, 0, 0, 0, g(Yes, No, false, false, "", "Η")}, + {0x1d6e9, 0, 0, 0, g(Yes, No, false, false, "", "Θ")}, + {0x1d6ea, 0, 0, 0, g(Yes, No, false, false, "", "Ι")}, + {0x1d6eb, 0, 0, 0, g(Yes, No, false, false, "", "Κ")}, + {0x1d6ec, 0, 0, 0, g(Yes, No, false, false, "", "Λ")}, + {0x1d6ed, 0, 0, 0, g(Yes, No, false, false, "", "Μ")}, + {0x1d6ee, 0, 0, 0, g(Yes, No, false, false, "", "Ν")}, + {0x1d6ef, 0, 0, 0, g(Yes, No, false, false, "", "Ξ")}, + {0x1d6f0, 0, 0, 0, g(Yes, No, false, false, "", "Ο")}, + {0x1d6f1, 0, 0, 0, g(Yes, No, false, false, "", "Π")}, + {0x1d6f2, 0, 0, 0, g(Yes, No, false, false, "", "Ρ")}, + {0x1d6f3, 0, 0, 0, g(Yes, No, false, false, "", "Θ")}, + {0x1d6f4, 0, 0, 0, g(Yes, No, false, false, "", "Σ")}, + {0x1d6f5, 0, 0, 0, g(Yes, No, false, false, "", "Τ")}, + {0x1d6f6, 0, 0, 0, g(Yes, No, false, false, "", "Υ")}, + {0x1d6f7, 0, 0, 0, g(Yes, No, false, false, "", "Φ")}, + {0x1d6f8, 0, 0, 0, g(Yes, No, false, false, "", "Χ")}, + {0x1d6f9, 0, 0, 0, g(Yes, No, false, false, "", "Ψ")}, + {0x1d6fa, 0, 0, 0, g(Yes, No, false, false, "", "Ω")}, + {0x1d6fb, 0, 0, 0, g(Yes, No, false, false, "", "∇")}, + {0x1d6fc, 0, 0, 0, g(Yes, No, false, false, "", "α")}, + {0x1d6fd, 0, 0, 0, g(Yes, No, false, false, "", "β")}, + {0x1d6fe, 0, 0, 0, g(Yes, No, false, false, "", "γ")}, + {0x1d6ff, 0, 0, 0, g(Yes, No, false, false, "", "δ")}, + {0x1d700, 0, 0, 0, g(Yes, No, false, false, "", "ε")}, + {0x1d701, 0, 0, 0, g(Yes, No, false, false, "", "ζ")}, + {0x1d702, 0, 0, 0, g(Yes, No, false, false, "", "η")}, + {0x1d703, 0, 0, 0, g(Yes, No, false, false, "", "θ")}, + {0x1d704, 0, 0, 0, g(Yes, No, false, false, "", "ι")}, + {0x1d705, 0, 0, 0, g(Yes, No, false, false, "", "κ")}, + {0x1d706, 0, 0, 0, g(Yes, No, false, false, "", "λ")}, + {0x1d707, 0, 0, 0, g(Yes, No, false, false, "", "μ")}, + {0x1d708, 0, 0, 0, g(Yes, No, false, false, "", "ν")}, + {0x1d709, 0, 0, 0, g(Yes, No, false, false, "", "ξ")}, + {0x1d70a, 0, 0, 0, g(Yes, No, false, false, "", "ο")}, + {0x1d70b, 0, 0, 0, g(Yes, No, false, false, "", "π")}, + {0x1d70c, 0, 0, 0, g(Yes, No, false, false, "", "ρ")}, + {0x1d70d, 0, 0, 0, g(Yes, No, false, false, "", "ς")}, + {0x1d70e, 0, 0, 0, g(Yes, No, false, false, "", "σ")}, + {0x1d70f, 0, 0, 0, g(Yes, No, false, false, "", "τ")}, + {0x1d710, 0, 0, 0, g(Yes, No, false, false, "", "υ")}, + {0x1d711, 0, 0, 0, g(Yes, No, false, false, "", "φ")}, + {0x1d712, 0, 0, 0, g(Yes, No, false, false, "", "χ")}, + {0x1d713, 0, 0, 0, g(Yes, No, false, false, "", "ψ")}, + {0x1d714, 0, 0, 0, g(Yes, No, false, false, "", "ω")}, + {0x1d715, 0, 0, 0, g(Yes, No, false, false, "", "∂")}, + {0x1d716, 0, 0, 0, g(Yes, No, false, false, "", "ε")}, + {0x1d717, 0, 0, 0, g(Yes, No, false, false, "", "θ")}, + {0x1d718, 0, 0, 0, g(Yes, No, false, false, "", "κ")}, + {0x1d719, 0, 0, 0, g(Yes, No, false, false, "", "φ")}, + {0x1d71a, 0, 0, 0, g(Yes, No, false, false, "", "ρ")}, + {0x1d71b, 0, 0, 0, g(Yes, No, false, false, "", "π")}, + {0x1d71c, 0, 0, 0, g(Yes, No, false, false, "", "Α")}, + {0x1d71d, 0, 0, 0, g(Yes, No, false, false, "", "Β")}, + {0x1d71e, 0, 0, 0, g(Yes, No, false, false, "", "Γ")}, + {0x1d71f, 0, 0, 0, g(Yes, No, false, false, "", "Δ")}, + {0x1d720, 0, 0, 0, g(Yes, No, false, false, "", "Ε")}, + {0x1d721, 0, 0, 0, g(Yes, No, false, false, "", "Ζ")}, + {0x1d722, 0, 0, 0, g(Yes, No, false, false, "", "Η")}, + {0x1d723, 0, 0, 0, g(Yes, No, false, false, "", "Θ")}, + {0x1d724, 0, 0, 0, g(Yes, No, false, false, "", "Ι")}, + {0x1d725, 0, 0, 0, g(Yes, No, false, false, "", "Κ")}, + {0x1d726, 0, 0, 0, g(Yes, No, false, false, "", "Λ")}, + {0x1d727, 0, 0, 0, g(Yes, No, false, false, "", "Μ")}, + {0x1d728, 0, 0, 0, g(Yes, No, false, false, "", "Ν")}, + {0x1d729, 0, 0, 0, g(Yes, No, false, false, "", "Ξ")}, + {0x1d72a, 0, 0, 0, g(Yes, No, false, false, "", "Ο")}, + {0x1d72b, 0, 0, 0, g(Yes, No, false, false, "", "Π")}, + {0x1d72c, 0, 0, 0, g(Yes, No, false, false, "", "Ρ")}, + {0x1d72d, 0, 0, 0, g(Yes, No, false, false, "", "Θ")}, + {0x1d72e, 0, 0, 0, g(Yes, No, false, false, "", "Σ")}, + {0x1d72f, 0, 0, 0, g(Yes, No, false, false, "", "Τ")}, + {0x1d730, 0, 0, 0, g(Yes, No, false, false, "", "Υ")}, + {0x1d731, 0, 0, 0, g(Yes, No, false, false, "", "Φ")}, + {0x1d732, 0, 0, 0, g(Yes, No, false, false, "", "Χ")}, + {0x1d733, 0, 0, 0, g(Yes, No, false, false, "", "Ψ")}, + {0x1d734, 0, 0, 0, g(Yes, No, false, false, "", "Ω")}, + {0x1d735, 0, 0, 0, g(Yes, No, false, false, "", "∇")}, + {0x1d736, 0, 0, 0, g(Yes, No, false, false, "", "α")}, + {0x1d737, 0, 0, 0, g(Yes, No, false, false, "", "β")}, + {0x1d738, 0, 0, 0, g(Yes, No, false, false, "", "γ")}, + {0x1d739, 0, 0, 0, g(Yes, No, false, false, "", "δ")}, + {0x1d73a, 0, 0, 0, g(Yes, No, false, false, "", "ε")}, + {0x1d73b, 0, 0, 0, g(Yes, No, false, false, "", "ζ")}, + {0x1d73c, 0, 0, 0, g(Yes, No, false, false, "", "η")}, + {0x1d73d, 0, 0, 0, g(Yes, No, false, false, "", "θ")}, + {0x1d73e, 0, 0, 0, g(Yes, No, false, false, "", "ι")}, + {0x1d73f, 0, 0, 0, g(Yes, No, false, false, "", "κ")}, + {0x1d740, 0, 0, 0, g(Yes, No, false, false, "", "λ")}, + {0x1d741, 0, 0, 0, g(Yes, No, false, false, "", "μ")}, + {0x1d742, 0, 0, 0, g(Yes, No, false, false, "", "ν")}, + {0x1d743, 0, 0, 0, g(Yes, No, false, false, "", "ξ")}, + {0x1d744, 0, 0, 0, g(Yes, No, false, false, "", "ο")}, + {0x1d745, 0, 0, 0, g(Yes, No, false, false, "", "π")}, + {0x1d746, 0, 0, 0, g(Yes, No, false, false, "", "ρ")}, + {0x1d747, 0, 0, 0, g(Yes, No, false, false, "", "ς")}, + {0x1d748, 0, 0, 0, g(Yes, No, false, false, "", "σ")}, + {0x1d749, 0, 0, 0, g(Yes, No, false, false, "", "τ")}, + {0x1d74a, 0, 0, 0, g(Yes, No, false, false, "", "υ")}, + {0x1d74b, 0, 0, 0, g(Yes, No, false, false, "", "φ")}, + {0x1d74c, 0, 0, 0, g(Yes, No, false, false, "", "χ")}, + {0x1d74d, 0, 0, 0, g(Yes, No, false, false, "", "ψ")}, + {0x1d74e, 0, 0, 0, g(Yes, No, false, false, "", "ω")}, + {0x1d74f, 0, 0, 0, g(Yes, No, false, false, "", "∂")}, + {0x1d750, 0, 0, 0, g(Yes, No, false, false, "", "ε")}, + {0x1d751, 0, 0, 0, g(Yes, No, false, false, "", "θ")}, + {0x1d752, 0, 0, 0, g(Yes, No, false, false, "", "κ")}, + {0x1d753, 0, 0, 0, g(Yes, No, false, false, "", "φ")}, + {0x1d754, 0, 0, 0, g(Yes, No, false, false, "", "ρ")}, + {0x1d755, 0, 0, 0, g(Yes, No, false, false, "", "π")}, + {0x1d756, 0, 0, 0, g(Yes, No, false, false, "", "Α")}, + {0x1d757, 0, 0, 0, g(Yes, No, false, false, "", "Β")}, + {0x1d758, 0, 0, 0, g(Yes, No, false, false, "", "Γ")}, + {0x1d759, 0, 0, 0, g(Yes, No, false, false, "", "Δ")}, + {0x1d75a, 0, 0, 0, g(Yes, No, false, false, "", "Ε")}, + {0x1d75b, 0, 0, 0, g(Yes, No, false, false, "", "Ζ")}, + {0x1d75c, 0, 0, 0, g(Yes, No, false, false, "", "Η")}, + {0x1d75d, 0, 0, 0, g(Yes, No, false, false, "", "Θ")}, + {0x1d75e, 0, 0, 0, g(Yes, No, false, false, "", "Ι")}, + {0x1d75f, 0, 0, 0, g(Yes, No, false, false, "", "Κ")}, + {0x1d760, 0, 0, 0, g(Yes, No, false, false, "", "Λ")}, + {0x1d761, 0, 0, 0, g(Yes, No, false, false, "", "Μ")}, + {0x1d762, 0, 0, 0, g(Yes, No, false, false, "", "Ν")}, + {0x1d763, 0, 0, 0, g(Yes, No, false, false, "", "Ξ")}, + {0x1d764, 0, 0, 0, g(Yes, No, false, false, "", "Ο")}, + {0x1d765, 0, 0, 0, g(Yes, No, false, false, "", "Π")}, + {0x1d766, 0, 0, 0, g(Yes, No, false, false, "", "Ρ")}, + {0x1d767, 0, 0, 0, g(Yes, No, false, false, "", "Θ")}, + {0x1d768, 0, 0, 0, g(Yes, No, false, false, "", "Σ")}, + {0x1d769, 0, 0, 0, g(Yes, No, false, false, "", "Τ")}, + {0x1d76a, 0, 0, 0, g(Yes, No, false, false, "", "Υ")}, + {0x1d76b, 0, 0, 0, g(Yes, No, false, false, "", "Φ")}, + {0x1d76c, 0, 0, 0, g(Yes, No, false, false, "", "Χ")}, + {0x1d76d, 0, 0, 0, g(Yes, No, false, false, "", "Ψ")}, + {0x1d76e, 0, 0, 0, g(Yes, No, false, false, "", "Ω")}, + {0x1d76f, 0, 0, 0, g(Yes, No, false, false, "", "∇")}, + {0x1d770, 0, 0, 0, g(Yes, No, false, false, "", "α")}, + {0x1d771, 0, 0, 0, g(Yes, No, false, false, "", "β")}, + {0x1d772, 0, 0, 0, g(Yes, No, false, false, "", "γ")}, + {0x1d773, 0, 0, 0, g(Yes, No, false, false, "", "δ")}, + {0x1d774, 0, 0, 0, g(Yes, No, false, false, "", "ε")}, + {0x1d775, 0, 0, 0, g(Yes, No, false, false, "", "ζ")}, + {0x1d776, 0, 0, 0, g(Yes, No, false, false, "", "η")}, + {0x1d777, 0, 0, 0, g(Yes, No, false, false, "", "θ")}, + {0x1d778, 0, 0, 0, g(Yes, No, false, false, "", "ι")}, + {0x1d779, 0, 0, 0, g(Yes, No, false, false, "", "κ")}, + {0x1d77a, 0, 0, 0, g(Yes, No, false, false, "", "λ")}, + {0x1d77b, 0, 0, 0, g(Yes, No, false, false, "", "μ")}, + {0x1d77c, 0, 0, 0, g(Yes, No, false, false, "", "ν")}, + {0x1d77d, 0, 0, 0, g(Yes, No, false, false, "", "ξ")}, + {0x1d77e, 0, 0, 0, g(Yes, No, false, false, "", "ο")}, + {0x1d77f, 0, 0, 0, g(Yes, No, false, false, "", "π")}, + {0x1d780, 0, 0, 0, g(Yes, No, false, false, "", "ρ")}, + {0x1d781, 0, 0, 0, g(Yes, No, false, false, "", "ς")}, + {0x1d782, 0, 0, 0, g(Yes, No, false, false, "", "σ")}, + {0x1d783, 0, 0, 0, g(Yes, No, false, false, "", "τ")}, + {0x1d784, 0, 0, 0, g(Yes, No, false, false, "", "υ")}, + {0x1d785, 0, 0, 0, g(Yes, No, false, false, "", "φ")}, + {0x1d786, 0, 0, 0, g(Yes, No, false, false, "", "χ")}, + {0x1d787, 0, 0, 0, g(Yes, No, false, false, "", "ψ")}, + {0x1d788, 0, 0, 0, g(Yes, No, false, false, "", "ω")}, + {0x1d789, 0, 0, 0, g(Yes, No, false, false, "", "∂")}, + {0x1d78a, 0, 0, 0, g(Yes, No, false, false, "", "ε")}, + {0x1d78b, 0, 0, 0, g(Yes, No, false, false, "", "θ")}, + {0x1d78c, 0, 0, 0, g(Yes, No, false, false, "", "κ")}, + {0x1d78d, 0, 0, 0, g(Yes, No, false, false, "", "φ")}, + {0x1d78e, 0, 0, 0, g(Yes, No, false, false, "", "ρ")}, + {0x1d78f, 0, 0, 0, g(Yes, No, false, false, "", "π")}, + {0x1d790, 0, 0, 0, g(Yes, No, false, false, "", "Α")}, + {0x1d791, 0, 0, 0, g(Yes, No, false, false, "", "Β")}, + {0x1d792, 0, 0, 0, g(Yes, No, false, false, "", "Γ")}, + {0x1d793, 0, 0, 0, g(Yes, No, false, false, "", "Δ")}, + {0x1d794, 0, 0, 0, g(Yes, No, false, false, "", "Ε")}, + {0x1d795, 0, 0, 0, g(Yes, No, false, false, "", "Ζ")}, + {0x1d796, 0, 0, 0, g(Yes, No, false, false, "", "Η")}, + {0x1d797, 0, 0, 0, g(Yes, No, false, false, "", "Θ")}, + {0x1d798, 0, 0, 0, g(Yes, No, false, false, "", "Ι")}, + {0x1d799, 0, 0, 0, g(Yes, No, false, false, "", "Κ")}, + {0x1d79a, 0, 0, 0, g(Yes, No, false, false, "", "Λ")}, + {0x1d79b, 0, 0, 0, g(Yes, No, false, false, "", "Μ")}, + {0x1d79c, 0, 0, 0, g(Yes, No, false, false, "", "Ν")}, + {0x1d79d, 0, 0, 0, g(Yes, No, false, false, "", "Ξ")}, + {0x1d79e, 0, 0, 0, g(Yes, No, false, false, "", "Ο")}, + {0x1d79f, 0, 0, 0, g(Yes, No, false, false, "", "Π")}, + {0x1d7a0, 0, 0, 0, g(Yes, No, false, false, "", "Ρ")}, + {0x1d7a1, 0, 0, 0, g(Yes, No, false, false, "", "Θ")}, + {0x1d7a2, 0, 0, 0, g(Yes, No, false, false, "", "Σ")}, + {0x1d7a3, 0, 0, 0, g(Yes, No, false, false, "", "Τ")}, + {0x1d7a4, 0, 0, 0, g(Yes, No, false, false, "", "Υ")}, + {0x1d7a5, 0, 0, 0, g(Yes, No, false, false, "", "Φ")}, + {0x1d7a6, 0, 0, 0, g(Yes, No, false, false, "", "Χ")}, + {0x1d7a7, 0, 0, 0, g(Yes, No, false, false, "", "Ψ")}, + {0x1d7a8, 0, 0, 0, g(Yes, No, false, false, "", "Ω")}, + {0x1d7a9, 0, 0, 0, g(Yes, No, false, false, "", "∇")}, + {0x1d7aa, 0, 0, 0, g(Yes, No, false, false, "", "α")}, + {0x1d7ab, 0, 0, 0, g(Yes, No, false, false, "", "β")}, + {0x1d7ac, 0, 0, 0, g(Yes, No, false, false, "", "γ")}, + {0x1d7ad, 0, 0, 0, g(Yes, No, false, false, "", "δ")}, + {0x1d7ae, 0, 0, 0, g(Yes, No, false, false, "", "ε")}, + {0x1d7af, 0, 0, 0, g(Yes, No, false, false, "", "ζ")}, + {0x1d7b0, 0, 0, 0, g(Yes, No, false, false, "", "η")}, + {0x1d7b1, 0, 0, 0, g(Yes, No, false, false, "", "θ")}, + {0x1d7b2, 0, 0, 0, g(Yes, No, false, false, "", "ι")}, + {0x1d7b3, 0, 0, 0, g(Yes, No, false, false, "", "κ")}, + {0x1d7b4, 0, 0, 0, g(Yes, No, false, false, "", "λ")}, + {0x1d7b5, 0, 0, 0, g(Yes, No, false, false, "", "μ")}, + {0x1d7b6, 0, 0, 0, g(Yes, No, false, false, "", "ν")}, + {0x1d7b7, 0, 0, 0, g(Yes, No, false, false, "", "ξ")}, + {0x1d7b8, 0, 0, 0, g(Yes, No, false, false, "", "ο")}, + {0x1d7b9, 0, 0, 0, g(Yes, No, false, false, "", "π")}, + {0x1d7ba, 0, 0, 0, g(Yes, No, false, false, "", "ρ")}, + {0x1d7bb, 0, 0, 0, g(Yes, No, false, false, "", "ς")}, + {0x1d7bc, 0, 0, 0, g(Yes, No, false, false, "", "σ")}, + {0x1d7bd, 0, 0, 0, g(Yes, No, false, false, "", "τ")}, + {0x1d7be, 0, 0, 0, g(Yes, No, false, false, "", "υ")}, + {0x1d7bf, 0, 0, 0, g(Yes, No, false, false, "", "φ")}, + {0x1d7c0, 0, 0, 0, g(Yes, No, false, false, "", "χ")}, + {0x1d7c1, 0, 0, 0, g(Yes, No, false, false, "", "ψ")}, + {0x1d7c2, 0, 0, 0, g(Yes, No, false, false, "", "ω")}, + {0x1d7c3, 0, 0, 0, g(Yes, No, false, false, "", "∂")}, + {0x1d7c4, 0, 0, 0, g(Yes, No, false, false, "", "ε")}, + {0x1d7c5, 0, 0, 0, g(Yes, No, false, false, "", "θ")}, + {0x1d7c6, 0, 0, 0, g(Yes, No, false, false, "", "κ")}, + {0x1d7c7, 0, 0, 0, g(Yes, No, false, false, "", "φ")}, + {0x1d7c8, 0, 0, 0, g(Yes, No, false, false, "", "ρ")}, + {0x1d7c9, 0, 0, 0, g(Yes, No, false, false, "", "π")}, + {0x1d7ca, 0, 0, 0, g(Yes, No, false, false, "", "Ϝ")}, + {0x1d7cb, 0, 0, 0, g(Yes, No, false, false, "", "ϝ")}, + {0x1d7cc, 0, 0, 0, f(Yes, false, "")}, + {0x1d7ce, 0, 0, 0, g(Yes, No, false, false, "", "0")}, + {0x1d7cf, 0, 0, 0, g(Yes, No, false, false, "", "1")}, + {0x1d7d0, 0, 0, 0, g(Yes, No, false, false, "", "2")}, + {0x1d7d1, 0, 0, 0, g(Yes, No, false, false, "", "3")}, + {0x1d7d2, 0, 0, 0, g(Yes, No, false, false, "", "4")}, + {0x1d7d3, 0, 0, 0, g(Yes, No, false, false, "", "5")}, + {0x1d7d4, 0, 0, 0, g(Yes, No, false, false, "", "6")}, + {0x1d7d5, 0, 0, 0, g(Yes, No, false, false, "", "7")}, + {0x1d7d6, 0, 0, 0, g(Yes, No, false, false, "", "8")}, + {0x1d7d7, 0, 0, 0, g(Yes, No, false, false, "", "9")}, + {0x1d7d8, 0, 0, 0, g(Yes, No, false, false, "", "0")}, + {0x1d7d9, 0, 0, 0, g(Yes, No, false, false, "", "1")}, + {0x1d7da, 0, 0, 0, g(Yes, No, false, false, "", "2")}, + {0x1d7db, 0, 0, 0, g(Yes, No, false, false, "", "3")}, + {0x1d7dc, 0, 0, 0, g(Yes, No, false, false, "", "4")}, + {0x1d7dd, 0, 0, 0, g(Yes, No, false, false, "", "5")}, + {0x1d7de, 0, 0, 0, g(Yes, No, false, false, "", "6")}, + {0x1d7df, 0, 0, 0, g(Yes, No, false, false, "", "7")}, + {0x1d7e0, 0, 0, 0, g(Yes, No, false, false, "", "8")}, + {0x1d7e1, 0, 0, 0, g(Yes, No, false, false, "", "9")}, + {0x1d7e2, 0, 0, 0, g(Yes, No, false, false, "", "0")}, + {0x1d7e3, 0, 0, 0, g(Yes, No, false, false, "", "1")}, + {0x1d7e4, 0, 0, 0, g(Yes, No, false, false, "", "2")}, + {0x1d7e5, 0, 0, 0, g(Yes, No, false, false, "", "3")}, + {0x1d7e6, 0, 0, 0, g(Yes, No, false, false, "", "4")}, + {0x1d7e7, 0, 0, 0, g(Yes, No, false, false, "", "5")}, + {0x1d7e8, 0, 0, 0, g(Yes, No, false, false, "", "6")}, + {0x1d7e9, 0, 0, 0, g(Yes, No, false, false, "", "7")}, + {0x1d7ea, 0, 0, 0, g(Yes, No, false, false, "", "8")}, + {0x1d7eb, 0, 0, 0, g(Yes, No, false, false, "", "9")}, + {0x1d7ec, 0, 0, 0, g(Yes, No, false, false, "", "0")}, + {0x1d7ed, 0, 0, 0, g(Yes, No, false, false, "", "1")}, + {0x1d7ee, 0, 0, 0, g(Yes, No, false, false, "", "2")}, + {0x1d7ef, 0, 0, 0, g(Yes, No, false, false, "", "3")}, + {0x1d7f0, 0, 0, 0, g(Yes, No, false, false, "", "4")}, + {0x1d7f1, 0, 0, 0, g(Yes, No, false, false, "", "5")}, + {0x1d7f2, 0, 0, 0, g(Yes, No, false, false, "", "6")}, + {0x1d7f3, 0, 0, 0, g(Yes, No, false, false, "", "7")}, + {0x1d7f4, 0, 0, 0, g(Yes, No, false, false, "", "8")}, + {0x1d7f5, 0, 0, 0, g(Yes, No, false, false, "", "9")}, + {0x1d7f6, 0, 0, 0, g(Yes, No, false, false, "", "0")}, + {0x1d7f7, 0, 0, 0, g(Yes, No, false, false, "", "1")}, + {0x1d7f8, 0, 0, 0, g(Yes, No, false, false, "", "2")}, + {0x1d7f9, 0, 0, 0, g(Yes, No, false, false, "", "3")}, + {0x1d7fa, 0, 0, 0, g(Yes, No, false, false, "", "4")}, + {0x1d7fb, 0, 0, 0, g(Yes, No, false, false, "", "5")}, + {0x1d7fc, 0, 0, 0, g(Yes, No, false, false, "", "6")}, + {0x1d7fd, 0, 0, 0, g(Yes, No, false, false, "", "7")}, + {0x1d7fe, 0, 0, 0, g(Yes, No, false, false, "", "8")}, + {0x1d7ff, 0, 0, 0, g(Yes, No, false, false, "", "9")}, + {0x1d800, 0, 0, 0, f(Yes, false, "")}, + {0x1e000, 230, 1, 1, f(Yes, false, "")}, + {0x1e007, 0, 0, 0, f(Yes, false, "")}, + {0x1e008, 230, 1, 1, f(Yes, false, "")}, + {0x1e019, 0, 0, 0, f(Yes, false, "")}, + {0x1e01b, 230, 1, 1, f(Yes, false, "")}, + {0x1e022, 0, 0, 0, f(Yes, false, "")}, + {0x1e023, 230, 1, 1, f(Yes, false, "")}, + {0x1e025, 0, 0, 0, f(Yes, false, "")}, + {0x1e026, 230, 1, 1, f(Yes, false, "")}, + {0x1e02b, 0, 0, 0, f(Yes, false, "")}, + {0x1e8d0, 220, 1, 1, f(Yes, false, "")}, + {0x1e8d7, 0, 0, 0, f(Yes, false, "")}, + {0x1e944, 230, 1, 1, f(Yes, false, "")}, + {0x1e94a, 7, 1, 1, f(Yes, false, "")}, + {0x1e94b, 0, 0, 0, f(Yes, false, "")}, + {0x1ee00, 0, 0, 0, g(Yes, No, false, false, "", "ا")}, + {0x1ee01, 0, 0, 0, g(Yes, No, false, false, "", "ب")}, + {0x1ee02, 0, 0, 0, g(Yes, No, false, false, "", "ج")}, + {0x1ee03, 0, 0, 0, g(Yes, No, false, false, "", "د")}, + {0x1ee04, 0, 0, 0, f(Yes, false, "")}, + {0x1ee05, 0, 0, 0, g(Yes, No, false, false, "", "و")}, + {0x1ee06, 0, 0, 0, g(Yes, No, false, false, "", "ز")}, + {0x1ee07, 0, 0, 0, g(Yes, No, false, false, "", "ح")}, + {0x1ee08, 0, 0, 0, g(Yes, No, false, false, "", "ط")}, + {0x1ee09, 0, 0, 0, g(Yes, No, false, false, "", "ي")}, + {0x1ee0a, 0, 0, 0, g(Yes, No, false, false, "", "ك")}, + {0x1ee0b, 0, 0, 0, g(Yes, No, false, false, "", "ل")}, + {0x1ee0c, 0, 0, 0, g(Yes, No, false, false, "", "م")}, + {0x1ee0d, 0, 0, 0, g(Yes, No, false, false, "", "ن")}, + {0x1ee0e, 0, 0, 0, g(Yes, No, false, false, "", "س")}, + {0x1ee0f, 0, 0, 0, g(Yes, No, false, false, "", "ع")}, + {0x1ee10, 0, 0, 0, g(Yes, No, false, false, "", "ف")}, + {0x1ee11, 0, 0, 0, g(Yes, No, false, false, "", "ص")}, + {0x1ee12, 0, 0, 0, g(Yes, No, false, false, "", "ق")}, + {0x1ee13, 0, 0, 0, g(Yes, No, false, false, "", "ر")}, + {0x1ee14, 0, 0, 0, g(Yes, No, false, false, "", "ش")}, + {0x1ee15, 0, 0, 0, g(Yes, No, false, false, "", "ت")}, + {0x1ee16, 0, 0, 0, g(Yes, No, false, false, "", "ث")}, + {0x1ee17, 0, 0, 0, g(Yes, No, false, false, "", "خ")}, + {0x1ee18, 0, 0, 0, g(Yes, No, false, false, "", "ذ")}, + {0x1ee19, 0, 0, 0, g(Yes, No, false, false, "", "ض")}, + {0x1ee1a, 0, 0, 0, g(Yes, No, false, false, "", "ظ")}, + {0x1ee1b, 0, 0, 0, g(Yes, No, false, false, "", "غ")}, + {0x1ee1c, 0, 0, 0, g(Yes, No, false, false, "", "ٮ")}, + {0x1ee1d, 0, 0, 0, g(Yes, No, false, false, "", "ں")}, + {0x1ee1e, 0, 0, 0, g(Yes, No, false, false, "", "ڡ")}, + {0x1ee1f, 0, 0, 0, g(Yes, No, false, false, "", "ٯ")}, + {0x1ee20, 0, 0, 0, f(Yes, false, "")}, + {0x1ee21, 0, 0, 0, g(Yes, No, false, false, "", "ب")}, + {0x1ee22, 0, 0, 0, g(Yes, No, false, false, "", "ج")}, + {0x1ee23, 0, 0, 0, f(Yes, false, "")}, + {0x1ee24, 0, 0, 0, g(Yes, No, false, false, "", "ه")}, + {0x1ee25, 0, 0, 0, f(Yes, false, "")}, + {0x1ee27, 0, 0, 0, g(Yes, No, false, false, "", "ح")}, + {0x1ee28, 0, 0, 0, f(Yes, false, "")}, + {0x1ee29, 0, 0, 0, g(Yes, No, false, false, "", "ي")}, + {0x1ee2a, 0, 0, 0, g(Yes, No, false, false, "", "ك")}, + {0x1ee2b, 0, 0, 0, g(Yes, No, false, false, "", "ل")}, + {0x1ee2c, 0, 0, 0, g(Yes, No, false, false, "", "م")}, + {0x1ee2d, 0, 0, 0, g(Yes, No, false, false, "", "ن")}, + {0x1ee2e, 0, 0, 0, g(Yes, No, false, false, "", "س")}, + {0x1ee2f, 0, 0, 0, g(Yes, No, false, false, "", "ع")}, + {0x1ee30, 0, 0, 0, g(Yes, No, false, false, "", "ف")}, + {0x1ee31, 0, 0, 0, g(Yes, No, false, false, "", "ص")}, + {0x1ee32, 0, 0, 0, g(Yes, No, false, false, "", "ق")}, + {0x1ee33, 0, 0, 0, f(Yes, false, "")}, + {0x1ee34, 0, 0, 0, g(Yes, No, false, false, "", "ش")}, + {0x1ee35, 0, 0, 0, g(Yes, No, false, false, "", "ت")}, + {0x1ee36, 0, 0, 0, g(Yes, No, false, false, "", "ث")}, + {0x1ee37, 0, 0, 0, g(Yes, No, false, false, "", "خ")}, + {0x1ee38, 0, 0, 0, f(Yes, false, "")}, + {0x1ee39, 0, 0, 0, g(Yes, No, false, false, "", "ض")}, + {0x1ee3a, 0, 0, 0, f(Yes, false, "")}, + {0x1ee3b, 0, 0, 0, g(Yes, No, false, false, "", "غ")}, + {0x1ee3c, 0, 0, 0, f(Yes, false, "")}, + {0x1ee42, 0, 0, 0, g(Yes, No, false, false, "", "ج")}, + {0x1ee43, 0, 0, 0, f(Yes, false, "")}, + {0x1ee47, 0, 0, 0, g(Yes, No, false, false, "", "ح")}, + {0x1ee48, 0, 0, 0, f(Yes, false, "")}, + {0x1ee49, 0, 0, 0, g(Yes, No, false, false, "", "ي")}, + {0x1ee4a, 0, 0, 0, f(Yes, false, "")}, + {0x1ee4b, 0, 0, 0, g(Yes, No, false, false, "", "ل")}, + {0x1ee4c, 0, 0, 0, f(Yes, false, "")}, + {0x1ee4d, 0, 0, 0, g(Yes, No, false, false, "", "ن")}, + {0x1ee4e, 0, 0, 0, g(Yes, No, false, false, "", "س")}, + {0x1ee4f, 0, 0, 0, g(Yes, No, false, false, "", "ع")}, + {0x1ee50, 0, 0, 0, f(Yes, false, "")}, + {0x1ee51, 0, 0, 0, g(Yes, No, false, false, "", "ص")}, + {0x1ee52, 0, 0, 0, g(Yes, No, false, false, "", "ق")}, + {0x1ee53, 0, 0, 0, f(Yes, false, "")}, + {0x1ee54, 0, 0, 0, g(Yes, No, false, false, "", "ش")}, + {0x1ee55, 0, 0, 0, f(Yes, false, "")}, + {0x1ee57, 0, 0, 0, g(Yes, No, false, false, "", "خ")}, + {0x1ee58, 0, 0, 0, f(Yes, false, "")}, + {0x1ee59, 0, 0, 0, g(Yes, No, false, false, "", "ض")}, + {0x1ee5a, 0, 0, 0, f(Yes, false, "")}, + {0x1ee5b, 0, 0, 0, g(Yes, No, false, false, "", "غ")}, + {0x1ee5c, 0, 0, 0, f(Yes, false, "")}, + {0x1ee5d, 0, 0, 0, g(Yes, No, false, false, "", "ں")}, + {0x1ee5e, 0, 0, 0, f(Yes, false, "")}, + {0x1ee5f, 0, 0, 0, g(Yes, No, false, false, "", "ٯ")}, + {0x1ee60, 0, 0, 0, f(Yes, false, "")}, + {0x1ee61, 0, 0, 0, g(Yes, No, false, false, "", "ب")}, + {0x1ee62, 0, 0, 0, g(Yes, No, false, false, "", "ج")}, + {0x1ee63, 0, 0, 0, f(Yes, false, "")}, + {0x1ee64, 0, 0, 0, g(Yes, No, false, false, "", "ه")}, + {0x1ee65, 0, 0, 0, f(Yes, false, "")}, + {0x1ee67, 0, 0, 0, g(Yes, No, false, false, "", "ح")}, + {0x1ee68, 0, 0, 0, g(Yes, No, false, false, "", "ط")}, + {0x1ee69, 0, 0, 0, g(Yes, No, false, false, "", "ي")}, + {0x1ee6a, 0, 0, 0, g(Yes, No, false, false, "", "ك")}, + {0x1ee6b, 0, 0, 0, f(Yes, false, "")}, + {0x1ee6c, 0, 0, 0, g(Yes, No, false, false, "", "م")}, + {0x1ee6d, 0, 0, 0, g(Yes, No, false, false, "", "ن")}, + {0x1ee6e, 0, 0, 0, g(Yes, No, false, false, "", "س")}, + {0x1ee6f, 0, 0, 0, g(Yes, No, false, false, "", "ع")}, + {0x1ee70, 0, 0, 0, g(Yes, No, false, false, "", "ف")}, + {0x1ee71, 0, 0, 0, g(Yes, No, false, false, "", "ص")}, + {0x1ee72, 0, 0, 0, g(Yes, No, false, false, "", "ق")}, + {0x1ee73, 0, 0, 0, f(Yes, false, "")}, + {0x1ee74, 0, 0, 0, g(Yes, No, false, false, "", "ش")}, + {0x1ee75, 0, 0, 0, g(Yes, No, false, false, "", "ت")}, + {0x1ee76, 0, 0, 0, g(Yes, No, false, false, "", "ث")}, + {0x1ee77, 0, 0, 0, g(Yes, No, false, false, "", "خ")}, + {0x1ee78, 0, 0, 0, f(Yes, false, "")}, + {0x1ee79, 0, 0, 0, g(Yes, No, false, false, "", "ض")}, + {0x1ee7a, 0, 0, 0, g(Yes, No, false, false, "", "ظ")}, + {0x1ee7b, 0, 0, 0, g(Yes, No, false, false, "", "غ")}, + {0x1ee7c, 0, 0, 0, g(Yes, No, false, false, "", "ٮ")}, + {0x1ee7d, 0, 0, 0, f(Yes, false, "")}, + {0x1ee7e, 0, 0, 0, g(Yes, No, false, false, "", "ڡ")}, + {0x1ee7f, 0, 0, 0, f(Yes, false, "")}, + {0x1ee80, 0, 0, 0, g(Yes, No, false, false, "", "ا")}, + {0x1ee81, 0, 0, 0, g(Yes, No, false, false, "", "ب")}, + {0x1ee82, 0, 0, 0, g(Yes, No, false, false, "", "ج")}, + {0x1ee83, 0, 0, 0, g(Yes, No, false, false, "", "د")}, + {0x1ee84, 0, 0, 0, g(Yes, No, false, false, "", "ه")}, + {0x1ee85, 0, 0, 0, g(Yes, No, false, false, "", "و")}, + {0x1ee86, 0, 0, 0, g(Yes, No, false, false, "", "ز")}, + {0x1ee87, 0, 0, 0, g(Yes, No, false, false, "", "ح")}, + {0x1ee88, 0, 0, 0, g(Yes, No, false, false, "", "ط")}, + {0x1ee89, 0, 0, 0, g(Yes, No, false, false, "", "ي")}, + {0x1ee8a, 0, 0, 0, f(Yes, false, "")}, + {0x1ee8b, 0, 0, 0, g(Yes, No, false, false, "", "ل")}, + {0x1ee8c, 0, 0, 0, g(Yes, No, false, false, "", "م")}, + {0x1ee8d, 0, 0, 0, g(Yes, No, false, false, "", "ن")}, + {0x1ee8e, 0, 0, 0, g(Yes, No, false, false, "", "س")}, + {0x1ee8f, 0, 0, 0, g(Yes, No, false, false, "", "ع")}, + {0x1ee90, 0, 0, 0, g(Yes, No, false, false, "", "ف")}, + {0x1ee91, 0, 0, 0, g(Yes, No, false, false, "", "ص")}, + {0x1ee92, 0, 0, 0, g(Yes, No, false, false, "", "ق")}, + {0x1ee93, 0, 0, 0, g(Yes, No, false, false, "", "ر")}, + {0x1ee94, 0, 0, 0, g(Yes, No, false, false, "", "ش")}, + {0x1ee95, 0, 0, 0, g(Yes, No, false, false, "", "ت")}, + {0x1ee96, 0, 0, 0, g(Yes, No, false, false, "", "ث")}, + {0x1ee97, 0, 0, 0, g(Yes, No, false, false, "", "خ")}, + {0x1ee98, 0, 0, 0, g(Yes, No, false, false, "", "ذ")}, + {0x1ee99, 0, 0, 0, g(Yes, No, false, false, "", "ض")}, + {0x1ee9a, 0, 0, 0, g(Yes, No, false, false, "", "ظ")}, + {0x1ee9b, 0, 0, 0, g(Yes, No, false, false, "", "غ")}, + {0x1ee9c, 0, 0, 0, f(Yes, false, "")}, + {0x1eea1, 0, 0, 0, g(Yes, No, false, false, "", "ب")}, + {0x1eea2, 0, 0, 0, g(Yes, No, false, false, "", "ج")}, + {0x1eea3, 0, 0, 0, g(Yes, No, false, false, "", "د")}, + {0x1eea4, 0, 0, 0, f(Yes, false, "")}, + {0x1eea5, 0, 0, 0, g(Yes, No, false, false, "", "و")}, + {0x1eea6, 0, 0, 0, g(Yes, No, false, false, "", "ز")}, + {0x1eea7, 0, 0, 0, g(Yes, No, false, false, "", "ح")}, + {0x1eea8, 0, 0, 0, g(Yes, No, false, false, "", "ط")}, + {0x1eea9, 0, 0, 0, g(Yes, No, false, false, "", "ي")}, + {0x1eeaa, 0, 0, 0, f(Yes, false, "")}, + {0x1eeab, 0, 0, 0, g(Yes, No, false, false, "", "ل")}, + {0x1eeac, 0, 0, 0, g(Yes, No, false, false, "", "م")}, + {0x1eead, 0, 0, 0, g(Yes, No, false, false, "", "ن")}, + {0x1eeae, 0, 0, 0, g(Yes, No, false, false, "", "س")}, + {0x1eeaf, 0, 0, 0, g(Yes, No, false, false, "", "ع")}, + {0x1eeb0, 0, 0, 0, g(Yes, No, false, false, "", "ف")}, + {0x1eeb1, 0, 0, 0, g(Yes, No, false, false, "", "ص")}, + {0x1eeb2, 0, 0, 0, g(Yes, No, false, false, "", "ق")}, + {0x1eeb3, 0, 0, 0, g(Yes, No, false, false, "", "ر")}, + {0x1eeb4, 0, 0, 0, g(Yes, No, false, false, "", "ش")}, + {0x1eeb5, 0, 0, 0, g(Yes, No, false, false, "", "ت")}, + {0x1eeb6, 0, 0, 0, g(Yes, No, false, false, "", "ث")}, + {0x1eeb7, 0, 0, 0, g(Yes, No, false, false, "", "خ")}, + {0x1eeb8, 0, 0, 0, g(Yes, No, false, false, "", "ذ")}, + {0x1eeb9, 0, 0, 0, g(Yes, No, false, false, "", "ض")}, + {0x1eeba, 0, 0, 0, g(Yes, No, false, false, "", "ظ")}, + {0x1eebb, 0, 0, 0, g(Yes, No, false, false, "", "غ")}, + {0x1eebc, 0, 0, 0, f(Yes, false, "")}, + {0x1f100, 0, 0, 0, g(Yes, No, false, false, "", "0.")}, + {0x1f101, 0, 0, 0, g(Yes, No, false, false, "", "0,")}, + {0x1f102, 0, 0, 0, g(Yes, No, false, false, "", "1,")}, + {0x1f103, 0, 0, 0, g(Yes, No, false, false, "", "2,")}, + {0x1f104, 0, 0, 0, g(Yes, No, false, false, "", "3,")}, + {0x1f105, 0, 0, 0, g(Yes, No, false, false, "", "4,")}, + {0x1f106, 0, 0, 0, g(Yes, No, false, false, "", "5,")}, + {0x1f107, 0, 0, 0, g(Yes, No, false, false, "", "6,")}, + {0x1f108, 0, 0, 0, g(Yes, No, false, false, "", "7,")}, + {0x1f109, 0, 0, 0, g(Yes, No, false, false, "", "8,")}, + {0x1f10a, 0, 0, 0, g(Yes, No, false, false, "", "9,")}, + {0x1f10b, 0, 0, 0, f(Yes, false, "")}, + {0x1f110, 0, 0, 0, g(Yes, No, false, false, "", "(A)")}, + {0x1f111, 0, 0, 0, g(Yes, No, false, false, "", "(B)")}, + {0x1f112, 0, 0, 0, g(Yes, No, false, false, "", "(C)")}, + {0x1f113, 0, 0, 0, g(Yes, No, false, false, "", "(D)")}, + {0x1f114, 0, 0, 0, g(Yes, No, false, false, "", "(E)")}, + {0x1f115, 0, 0, 0, g(Yes, No, false, false, "", "(F)")}, + {0x1f116, 0, 0, 0, g(Yes, No, false, false, "", "(G)")}, + {0x1f117, 0, 0, 0, g(Yes, No, false, false, "", "(H)")}, + {0x1f118, 0, 0, 0, g(Yes, No, false, false, "", "(I)")}, + {0x1f119, 0, 0, 0, g(Yes, No, false, false, "", "(J)")}, + {0x1f11a, 0, 0, 0, g(Yes, No, false, false, "", "(K)")}, + {0x1f11b, 0, 0, 0, g(Yes, No, false, false, "", "(L)")}, + {0x1f11c, 0, 0, 0, g(Yes, No, false, false, "", "(M)")}, + {0x1f11d, 0, 0, 0, g(Yes, No, false, false, "", "(N)")}, + {0x1f11e, 0, 0, 0, g(Yes, No, false, false, "", "(O)")}, + {0x1f11f, 0, 0, 0, g(Yes, No, false, false, "", "(P)")}, + {0x1f120, 0, 0, 0, g(Yes, No, false, false, "", "(Q)")}, + {0x1f121, 0, 0, 0, g(Yes, No, false, false, "", "(R)")}, + {0x1f122, 0, 0, 0, g(Yes, No, false, false, "", "(S)")}, + {0x1f123, 0, 0, 0, g(Yes, No, false, false, "", "(T)")}, + {0x1f124, 0, 0, 0, g(Yes, No, false, false, "", "(U)")}, + {0x1f125, 0, 0, 0, g(Yes, No, false, false, "", "(V)")}, + {0x1f126, 0, 0, 0, g(Yes, No, false, false, "", "(W)")}, + {0x1f127, 0, 0, 0, g(Yes, No, false, false, "", "(X)")}, + {0x1f128, 0, 0, 0, g(Yes, No, false, false, "", "(Y)")}, + {0x1f129, 0, 0, 0, g(Yes, No, false, false, "", "(Z)")}, + {0x1f12a, 0, 0, 0, g(Yes, No, false, false, "", "〔S〕")}, + {0x1f12b, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x1f12c, 0, 0, 0, g(Yes, No, false, false, "", "R")}, + {0x1f12d, 0, 0, 0, g(Yes, No, false, false, "", "CD")}, + {0x1f12e, 0, 0, 0, g(Yes, No, false, false, "", "WZ")}, + {0x1f12f, 0, 0, 0, f(Yes, false, "")}, + {0x1f130, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0x1f131, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0x1f132, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x1f133, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x1f134, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0x1f135, 0, 0, 0, g(Yes, No, false, false, "", "F")}, + {0x1f136, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0x1f137, 0, 0, 0, g(Yes, No, false, false, "", "H")}, + {0x1f138, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0x1f139, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0x1f13a, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0x1f13b, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x1f13c, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x1f13d, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0x1f13e, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0x1f13f, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0x1f140, 0, 0, 0, g(Yes, No, false, false, "", "Q")}, + {0x1f141, 0, 0, 0, g(Yes, No, false, false, "", "R")}, + {0x1f142, 0, 0, 0, g(Yes, No, false, false, "", "S")}, + {0x1f143, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0x1f144, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0x1f145, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x1f146, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0x1f147, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0x1f148, 0, 0, 0, g(Yes, No, false, false, "", "Y")}, + {0x1f149, 0, 0, 0, g(Yes, No, false, false, "", "Z")}, + {0x1f14a, 0, 0, 0, g(Yes, No, false, false, "", "HV")}, + {0x1f14b, 0, 0, 0, g(Yes, No, false, false, "", "MV")}, + {0x1f14c, 0, 0, 0, g(Yes, No, false, false, "", "SD")}, + {0x1f14d, 0, 0, 0, g(Yes, No, false, false, "", "SS")}, + {0x1f14e, 0, 0, 0, g(Yes, No, false, false, "", "PPV")}, + {0x1f14f, 0, 0, 0, g(Yes, No, false, false, "", "WC")}, + {0x1f150, 0, 0, 0, f(Yes, false, "")}, + {0x1f16a, 0, 0, 0, g(Yes, No, false, false, "", "MC")}, + {0x1f16b, 0, 0, 0, g(Yes, No, false, false, "", "MD")}, + {0x1f16c, 0, 0, 0, f(Yes, false, "")}, + {0x1f190, 0, 0, 0, g(Yes, No, false, false, "", "DJ")}, + {0x1f191, 0, 0, 0, f(Yes, false, "")}, + {0x1f200, 0, 0, 0, g(Yes, No, false, false, "", "ほか")}, + {0x1f201, 0, 0, 0, g(Yes, No, false, false, "", "ココ")}, + {0x1f202, 0, 0, 0, g(Yes, No, false, false, "", "サ")}, + {0x1f203, 0, 0, 0, f(Yes, false, "")}, + {0x1f210, 0, 0, 0, g(Yes, No, false, false, "", "手")}, + {0x1f211, 0, 0, 0, g(Yes, No, false, false, "", "字")}, + {0x1f212, 0, 0, 0, g(Yes, No, false, false, "", "双")}, + {0x1f213, 0, 0, 1, g(Yes, No, false, false, "", "デ")}, + {0x1f214, 0, 0, 0, g(Yes, No, false, false, "", "二")}, + {0x1f215, 0, 0, 0, g(Yes, No, false, false, "", "多")}, + {0x1f216, 0, 0, 0, g(Yes, No, false, false, "", "解")}, + {0x1f217, 0, 0, 0, g(Yes, No, false, false, "", "天")}, + {0x1f218, 0, 0, 0, g(Yes, No, false, false, "", "交")}, + {0x1f219, 0, 0, 0, g(Yes, No, false, false, "", "映")}, + {0x1f21a, 0, 0, 0, g(Yes, No, false, false, "", "無")}, + {0x1f21b, 0, 0, 0, g(Yes, No, false, false, "", "料")}, + {0x1f21c, 0, 0, 0, g(Yes, No, false, false, "", "前")}, + {0x1f21d, 0, 0, 0, g(Yes, No, false, false, "", "後")}, + {0x1f21e, 0, 0, 0, g(Yes, No, false, false, "", "再")}, + {0x1f21f, 0, 0, 0, g(Yes, No, false, false, "", "新")}, + {0x1f220, 0, 0, 0, g(Yes, No, false, false, "", "初")}, + {0x1f221, 0, 0, 0, g(Yes, No, false, false, "", "終")}, + {0x1f222, 0, 0, 0, g(Yes, No, false, false, "", "生")}, + {0x1f223, 0, 0, 0, g(Yes, No, false, false, "", "販")}, + {0x1f224, 0, 0, 0, g(Yes, No, false, false, "", "声")}, + {0x1f225, 0, 0, 0, g(Yes, No, false, false, "", "吹")}, + {0x1f226, 0, 0, 0, g(Yes, No, false, false, "", "演")}, + {0x1f227, 0, 0, 0, g(Yes, No, false, false, "", "投")}, + {0x1f228, 0, 0, 0, g(Yes, No, false, false, "", "捕")}, + {0x1f229, 0, 0, 0, g(Yes, No, false, false, "", "一")}, + {0x1f22a, 0, 0, 0, g(Yes, No, false, false, "", "三")}, + {0x1f22b, 0, 0, 0, g(Yes, No, false, false, "", "遊")}, + {0x1f22c, 0, 0, 0, g(Yes, No, false, false, "", "左")}, + {0x1f22d, 0, 0, 0, g(Yes, No, false, false, "", "中")}, + {0x1f22e, 0, 0, 0, g(Yes, No, false, false, "", "右")}, + {0x1f22f, 0, 0, 0, g(Yes, No, false, false, "", "指")}, + {0x1f230, 0, 0, 0, g(Yes, No, false, false, "", "走")}, + {0x1f231, 0, 0, 0, g(Yes, No, false, false, "", "打")}, + {0x1f232, 0, 0, 0, g(Yes, No, false, false, "", "禁")}, + {0x1f233, 0, 0, 0, g(Yes, No, false, false, "", "空")}, + {0x1f234, 0, 0, 0, g(Yes, No, false, false, "", "合")}, + {0x1f235, 0, 0, 0, g(Yes, No, false, false, "", "満")}, + {0x1f236, 0, 0, 0, g(Yes, No, false, false, "", "有")}, + {0x1f237, 0, 0, 0, g(Yes, No, false, false, "", "月")}, + {0x1f238, 0, 0, 0, g(Yes, No, false, false, "", "申")}, + {0x1f239, 0, 0, 0, g(Yes, No, false, false, "", "割")}, + {0x1f23a, 0, 0, 0, g(Yes, No, false, false, "", "営")}, + {0x1f23b, 0, 0, 0, g(Yes, No, false, false, "", "配")}, + {0x1f23c, 0, 0, 0, f(Yes, false, "")}, + {0x1f240, 0, 0, 0, g(Yes, No, false, false, "", "〔本〕")}, + {0x1f241, 0, 0, 0, g(Yes, No, false, false, "", "〔三〕")}, + {0x1f242, 0, 0, 0, g(Yes, No, false, false, "", "〔二〕")}, + {0x1f243, 0, 0, 0, g(Yes, No, false, false, "", "〔安〕")}, + {0x1f244, 0, 0, 0, g(Yes, No, false, false, "", "〔点〕")}, + {0x1f245, 0, 0, 0, g(Yes, No, false, false, "", "〔打〕")}, + {0x1f246, 0, 0, 0, g(Yes, No, false, false, "", "〔盗〕")}, + {0x1f247, 0, 0, 0, g(Yes, No, false, false, "", "〔勝〕")}, + {0x1f248, 0, 0, 0, g(Yes, No, false, false, "", "〔敗〕")}, + {0x1f249, 0, 0, 0, f(Yes, false, "")}, + {0x1f250, 0, 0, 0, g(Yes, No, false, false, "", "得")}, + {0x1f251, 0, 0, 0, g(Yes, No, false, false, "", "可")}, + {0x1f252, 0, 0, 0, f(Yes, false, "")}, + {0x2f800, 0, 0, 0, f(No, false, "丽")}, + {0x2f801, 0, 0, 0, f(No, false, "丸")}, + {0x2f802, 0, 0, 0, f(No, false, "乁")}, + {0x2f803, 0, 0, 0, f(No, false, "𠄢")}, + {0x2f804, 0, 0, 0, f(No, false, "你")}, + {0x2f805, 0, 0, 0, f(No, false, "侮")}, + {0x2f806, 0, 0, 0, f(No, false, "侻")}, + {0x2f807, 0, 0, 0, f(No, false, "倂")}, + {0x2f808, 0, 0, 0, f(No, false, "偺")}, + {0x2f809, 0, 0, 0, f(No, false, "備")}, + {0x2f80a, 0, 0, 0, f(No, false, "僧")}, + {0x2f80b, 0, 0, 0, f(No, false, "像")}, + {0x2f80c, 0, 0, 0, f(No, false, "㒞")}, + {0x2f80d, 0, 0, 0, f(No, false, "𠘺")}, + {0x2f80e, 0, 0, 0, f(No, false, "免")}, + {0x2f80f, 0, 0, 0, f(No, false, "兔")}, + {0x2f810, 0, 0, 0, f(No, false, "兤")}, + {0x2f811, 0, 0, 0, f(No, false, "具")}, + {0x2f812, 0, 0, 0, f(No, false, "𠔜")}, + {0x2f813, 0, 0, 0, f(No, false, "㒹")}, + {0x2f814, 0, 0, 0, f(No, false, "內")}, + {0x2f815, 0, 0, 0, f(No, false, "再")}, + {0x2f816, 0, 0, 0, f(No, false, "𠕋")}, + {0x2f817, 0, 0, 0, f(No, false, "冗")}, + {0x2f818, 0, 0, 0, f(No, false, "冤")}, + {0x2f819, 0, 0, 0, f(No, false, "仌")}, + {0x2f81a, 0, 0, 0, f(No, false, "冬")}, + {0x2f81b, 0, 0, 0, f(No, false, "况")}, + {0x2f81c, 0, 0, 0, f(No, false, "𩇟")}, + {0x2f81d, 0, 0, 0, f(No, false, "凵")}, + {0x2f81e, 0, 0, 0, f(No, false, "刃")}, + {0x2f81f, 0, 0, 0, f(No, false, "㓟")}, + {0x2f820, 0, 0, 0, f(No, false, "刻")}, + {0x2f821, 0, 0, 0, f(No, false, "剆")}, + {0x2f822, 0, 0, 0, f(No, false, "割")}, + {0x2f823, 0, 0, 0, f(No, false, "剷")}, + {0x2f824, 0, 0, 0, f(No, false, "㔕")}, + {0x2f825, 0, 0, 0, f(No, false, "勇")}, + {0x2f826, 0, 0, 0, f(No, false, "勉")}, + {0x2f827, 0, 0, 0, f(No, false, "勤")}, + {0x2f828, 0, 0, 0, f(No, false, "勺")}, + {0x2f829, 0, 0, 0, f(No, false, "包")}, + {0x2f82a, 0, 0, 0, f(No, false, "匆")}, + {0x2f82b, 0, 0, 0, f(No, false, "北")}, + {0x2f82c, 0, 0, 0, f(No, false, "卉")}, + {0x2f82d, 0, 0, 0, f(No, false, "卑")}, + {0x2f82e, 0, 0, 0, f(No, false, "博")}, + {0x2f82f, 0, 0, 0, f(No, false, "即")}, + {0x2f830, 0, 0, 0, f(No, false, "卽")}, + {0x2f831, 0, 0, 0, f(No, false, "卿")}, + {0x2f834, 0, 0, 0, f(No, false, "𠨬")}, + {0x2f835, 0, 0, 0, f(No, false, "灰")}, + {0x2f836, 0, 0, 0, f(No, false, "及")}, + {0x2f837, 0, 0, 0, f(No, false, "叟")}, + {0x2f838, 0, 0, 0, f(No, false, "𠭣")}, + {0x2f839, 0, 0, 0, f(No, false, "叫")}, + {0x2f83a, 0, 0, 0, f(No, false, "叱")}, + {0x2f83b, 0, 0, 0, f(No, false, "吆")}, + {0x2f83c, 0, 0, 0, f(No, false, "咞")}, + {0x2f83d, 0, 0, 0, f(No, false, "吸")}, + {0x2f83e, 0, 0, 0, f(No, false, "呈")}, + {0x2f83f, 0, 0, 0, f(No, false, "周")}, + {0x2f840, 0, 0, 0, f(No, false, "咢")}, + {0x2f841, 0, 0, 0, f(No, false, "哶")}, + {0x2f842, 0, 0, 0, f(No, false, "唐")}, + {0x2f843, 0, 0, 0, f(No, false, "啓")}, + {0x2f844, 0, 0, 0, f(No, false, "啣")}, + {0x2f845, 0, 0, 0, f(No, false, "善")}, + {0x2f847, 0, 0, 0, f(No, false, "喙")}, + {0x2f848, 0, 0, 0, f(No, false, "喫")}, + {0x2f849, 0, 0, 0, f(No, false, "喳")}, + {0x2f84a, 0, 0, 0, f(No, false, "嗂")}, + {0x2f84b, 0, 0, 0, f(No, false, "圖")}, + {0x2f84c, 0, 0, 0, f(No, false, "嘆")}, + {0x2f84d, 0, 0, 0, f(No, false, "圗")}, + {0x2f84e, 0, 0, 0, f(No, false, "噑")}, + {0x2f84f, 0, 0, 0, f(No, false, "噴")}, + {0x2f850, 0, 0, 0, f(No, false, "切")}, + {0x2f851, 0, 0, 0, f(No, false, "壮")}, + {0x2f852, 0, 0, 0, f(No, false, "城")}, + {0x2f853, 0, 0, 0, f(No, false, "埴")}, + {0x2f854, 0, 0, 0, f(No, false, "堍")}, + {0x2f855, 0, 0, 0, f(No, false, "型")}, + {0x2f856, 0, 0, 0, f(No, false, "堲")}, + {0x2f857, 0, 0, 0, f(No, false, "報")}, + {0x2f858, 0, 0, 0, f(No, false, "墬")}, + {0x2f859, 0, 0, 0, f(No, false, "𡓤")}, + {0x2f85a, 0, 0, 0, f(No, false, "売")}, + {0x2f85b, 0, 0, 0, f(No, false, "壷")}, + {0x2f85c, 0, 0, 0, f(No, false, "夆")}, + {0x2f85d, 0, 0, 0, f(No, false, "多")}, + {0x2f85e, 0, 0, 0, f(No, false, "夢")}, + {0x2f85f, 0, 0, 0, f(No, false, "奢")}, + {0x2f860, 0, 0, 0, f(No, false, "𡚨")}, + {0x2f861, 0, 0, 0, f(No, false, "𡛪")}, + {0x2f862, 0, 0, 0, f(No, false, "姬")}, + {0x2f863, 0, 0, 0, f(No, false, "娛")}, + {0x2f864, 0, 0, 0, f(No, false, "娧")}, + {0x2f865, 0, 0, 0, f(No, false, "姘")}, + {0x2f866, 0, 0, 0, f(No, false, "婦")}, + {0x2f867, 0, 0, 0, f(No, false, "㛮")}, + {0x2f868, 0, 0, 0, f(No, false, "㛼")}, + {0x2f869, 0, 0, 0, f(No, false, "嬈")}, + {0x2f86a, 0, 0, 0, f(No, false, "嬾")}, + {0x2f86c, 0, 0, 0, f(No, false, "𡧈")}, + {0x2f86d, 0, 0, 0, f(No, false, "寃")}, + {0x2f86e, 0, 0, 0, f(No, false, "寘")}, + {0x2f86f, 0, 0, 0, f(No, false, "寧")}, + {0x2f870, 0, 0, 0, f(No, false, "寳")}, + {0x2f871, 0, 0, 0, f(No, false, "𡬘")}, + {0x2f872, 0, 0, 0, f(No, false, "寿")}, + {0x2f873, 0, 0, 0, f(No, false, "将")}, + {0x2f874, 0, 0, 0, f(No, false, "当")}, + {0x2f875, 0, 0, 0, f(No, false, "尢")}, + {0x2f876, 0, 0, 0, f(No, false, "㞁")}, + {0x2f877, 0, 0, 0, f(No, false, "屠")}, + {0x2f878, 0, 0, 0, f(No, false, "屮")}, + {0x2f879, 0, 0, 0, f(No, false, "峀")}, + {0x2f87a, 0, 0, 0, f(No, false, "岍")}, + {0x2f87b, 0, 0, 0, f(No, false, "𡷤")}, + {0x2f87c, 0, 0, 0, f(No, false, "嵃")}, + {0x2f87d, 0, 0, 0, f(No, false, "𡷦")}, + {0x2f87e, 0, 0, 0, f(No, false, "嵮")}, + {0x2f87f, 0, 0, 0, f(No, false, "嵫")}, + {0x2f880, 0, 0, 0, f(No, false, "嵼")}, + {0x2f881, 0, 0, 0, f(No, false, "巡")}, + {0x2f882, 0, 0, 0, f(No, false, "巢")}, + {0x2f883, 0, 0, 0, f(No, false, "㠯")}, + {0x2f884, 0, 0, 0, f(No, false, "巽")}, + {0x2f885, 0, 0, 0, f(No, false, "帨")}, + {0x2f886, 0, 0, 0, f(No, false, "帽")}, + {0x2f887, 0, 0, 0, f(No, false, "幩")}, + {0x2f888, 0, 0, 0, f(No, false, "㡢")}, + {0x2f889, 0, 0, 0, f(No, false, "𢆃")}, + {0x2f88a, 0, 0, 0, f(No, false, "㡼")}, + {0x2f88b, 0, 0, 0, f(No, false, "庰")}, + {0x2f88c, 0, 0, 0, f(No, false, "庳")}, + {0x2f88d, 0, 0, 0, f(No, false, "庶")}, + {0x2f88e, 0, 0, 0, f(No, false, "廊")}, + {0x2f88f, 0, 0, 0, f(No, false, "𪎒")}, + {0x2f890, 0, 0, 0, f(No, false, "廾")}, + {0x2f891, 0, 0, 0, f(No, false, "𢌱")}, + {0x2f893, 0, 0, 0, f(No, false, "舁")}, + {0x2f894, 0, 0, 0, f(No, false, "弢")}, + {0x2f896, 0, 0, 0, f(No, false, "㣇")}, + {0x2f897, 0, 0, 0, f(No, false, "𣊸")}, + {0x2f898, 0, 0, 0, f(No, false, "𦇚")}, + {0x2f899, 0, 0, 0, f(No, false, "形")}, + {0x2f89a, 0, 0, 0, f(No, false, "彫")}, + {0x2f89b, 0, 0, 0, f(No, false, "㣣")}, + {0x2f89c, 0, 0, 0, f(No, false, "徚")}, + {0x2f89d, 0, 0, 0, f(No, false, "忍")}, + {0x2f89e, 0, 0, 0, f(No, false, "志")}, + {0x2f89f, 0, 0, 0, f(No, false, "忹")}, + {0x2f8a0, 0, 0, 0, f(No, false, "悁")}, + {0x2f8a1, 0, 0, 0, f(No, false, "㤺")}, + {0x2f8a2, 0, 0, 0, f(No, false, "㤜")}, + {0x2f8a3, 0, 0, 0, f(No, false, "悔")}, + {0x2f8a4, 0, 0, 0, f(No, false, "𢛔")}, + {0x2f8a5, 0, 0, 0, f(No, false, "惇")}, + {0x2f8a6, 0, 0, 0, f(No, false, "慈")}, + {0x2f8a7, 0, 0, 0, f(No, false, "慌")}, + {0x2f8a8, 0, 0, 0, f(No, false, "慎")}, + {0x2f8a9, 0, 0, 0, f(No, false, "慌")}, + {0x2f8aa, 0, 0, 0, f(No, false, "慺")}, + {0x2f8ab, 0, 0, 0, f(No, false, "憎")}, + {0x2f8ac, 0, 0, 0, f(No, false, "憲")}, + {0x2f8ad, 0, 0, 0, f(No, false, "憤")}, + {0x2f8ae, 0, 0, 0, f(No, false, "憯")}, + {0x2f8af, 0, 0, 0, f(No, false, "懞")}, + {0x2f8b0, 0, 0, 0, f(No, false, "懲")}, + {0x2f8b1, 0, 0, 0, f(No, false, "懶")}, + {0x2f8b2, 0, 0, 0, f(No, false, "成")}, + {0x2f8b3, 0, 0, 0, f(No, false, "戛")}, + {0x2f8b4, 0, 0, 0, f(No, false, "扝")}, + {0x2f8b5, 0, 0, 0, f(No, false, "抱")}, + {0x2f8b6, 0, 0, 0, f(No, false, "拔")}, + {0x2f8b7, 0, 0, 0, f(No, false, "捐")}, + {0x2f8b8, 0, 0, 0, f(No, false, "𢬌")}, + {0x2f8b9, 0, 0, 0, f(No, false, "挽")}, + {0x2f8ba, 0, 0, 0, f(No, false, "拼")}, + {0x2f8bb, 0, 0, 0, f(No, false, "捨")}, + {0x2f8bc, 0, 0, 0, f(No, false, "掃")}, + {0x2f8bd, 0, 0, 0, f(No, false, "揤")}, + {0x2f8be, 0, 0, 0, f(No, false, "𢯱")}, + {0x2f8bf, 0, 0, 0, f(No, false, "搢")}, + {0x2f8c0, 0, 0, 0, f(No, false, "揅")}, + {0x2f8c1, 0, 0, 0, f(No, false, "掩")}, + {0x2f8c2, 0, 0, 0, f(No, false, "㨮")}, + {0x2f8c3, 0, 0, 0, f(No, false, "摩")}, + {0x2f8c4, 0, 0, 0, f(No, false, "摾")}, + {0x2f8c5, 0, 0, 0, f(No, false, "撝")}, + {0x2f8c6, 0, 0, 0, f(No, false, "摷")}, + {0x2f8c7, 0, 0, 0, f(No, false, "㩬")}, + {0x2f8c8, 0, 0, 0, f(No, false, "敏")}, + {0x2f8c9, 0, 0, 0, f(No, false, "敬")}, + {0x2f8ca, 0, 0, 0, f(No, false, "𣀊")}, + {0x2f8cb, 0, 0, 0, f(No, false, "旣")}, + {0x2f8cc, 0, 0, 0, f(No, false, "書")}, + {0x2f8cd, 0, 0, 0, f(No, false, "晉")}, + {0x2f8ce, 0, 0, 0, f(No, false, "㬙")}, + {0x2f8cf, 0, 0, 0, f(No, false, "暑")}, + {0x2f8d0, 0, 0, 0, f(No, false, "㬈")}, + {0x2f8d1, 0, 0, 0, f(No, false, "㫤")}, + {0x2f8d2, 0, 0, 0, f(No, false, "冒")}, + {0x2f8d3, 0, 0, 0, f(No, false, "冕")}, + {0x2f8d4, 0, 0, 0, f(No, false, "最")}, + {0x2f8d5, 0, 0, 0, f(No, false, "暜")}, + {0x2f8d6, 0, 0, 0, f(No, false, "肭")}, + {0x2f8d7, 0, 0, 0, f(No, false, "䏙")}, + {0x2f8d8, 0, 0, 0, f(No, false, "朗")}, + {0x2f8d9, 0, 0, 0, f(No, false, "望")}, + {0x2f8da, 0, 0, 0, f(No, false, "朡")}, + {0x2f8db, 0, 0, 0, f(No, false, "杞")}, + {0x2f8dc, 0, 0, 0, f(No, false, "杓")}, + {0x2f8dd, 0, 0, 0, f(No, false, "𣏃")}, + {0x2f8de, 0, 0, 0, f(No, false, "㭉")}, + {0x2f8df, 0, 0, 0, f(No, false, "柺")}, + {0x2f8e0, 0, 0, 0, f(No, false, "枅")}, + {0x2f8e1, 0, 0, 0, f(No, false, "桒")}, + {0x2f8e2, 0, 0, 0, f(No, false, "梅")}, + {0x2f8e3, 0, 0, 0, f(No, false, "𣑭")}, + {0x2f8e4, 0, 0, 0, f(No, false, "梎")}, + {0x2f8e5, 0, 0, 0, f(No, false, "栟")}, + {0x2f8e6, 0, 0, 0, f(No, false, "椔")}, + {0x2f8e7, 0, 0, 0, f(No, false, "㮝")}, + {0x2f8e8, 0, 0, 0, f(No, false, "楂")}, + {0x2f8e9, 0, 0, 0, f(No, false, "榣")}, + {0x2f8ea, 0, 0, 0, f(No, false, "槪")}, + {0x2f8eb, 0, 0, 0, f(No, false, "檨")}, + {0x2f8ec, 0, 0, 0, f(No, false, "𣚣")}, + {0x2f8ed, 0, 0, 0, f(No, false, "櫛")}, + {0x2f8ee, 0, 0, 0, f(No, false, "㰘")}, + {0x2f8ef, 0, 0, 0, f(No, false, "次")}, + {0x2f8f0, 0, 0, 0, f(No, false, "𣢧")}, + {0x2f8f1, 0, 0, 0, f(No, false, "歔")}, + {0x2f8f2, 0, 0, 0, f(No, false, "㱎")}, + {0x2f8f3, 0, 0, 0, f(No, false, "歲")}, + {0x2f8f4, 0, 0, 0, f(No, false, "殟")}, + {0x2f8f5, 0, 0, 0, f(No, false, "殺")}, + {0x2f8f6, 0, 0, 0, f(No, false, "殻")}, + {0x2f8f7, 0, 0, 0, f(No, false, "𣪍")}, + {0x2f8f8, 0, 0, 0, f(No, false, "𡴋")}, + {0x2f8f9, 0, 0, 0, f(No, false, "𣫺")}, + {0x2f8fa, 0, 0, 0, f(No, false, "汎")}, + {0x2f8fb, 0, 0, 0, f(No, false, "𣲼")}, + {0x2f8fc, 0, 0, 0, f(No, false, "沿")}, + {0x2f8fd, 0, 0, 0, f(No, false, "泍")}, + {0x2f8fe, 0, 0, 0, f(No, false, "汧")}, + {0x2f8ff, 0, 0, 0, f(No, false, "洖")}, + {0x2f900, 0, 0, 0, f(No, false, "派")}, + {0x2f901, 0, 0, 0, f(No, false, "海")}, + {0x2f902, 0, 0, 0, f(No, false, "流")}, + {0x2f903, 0, 0, 0, f(No, false, "浩")}, + {0x2f904, 0, 0, 0, f(No, false, "浸")}, + {0x2f905, 0, 0, 0, f(No, false, "涅")}, + {0x2f906, 0, 0, 0, f(No, false, "𣴞")}, + {0x2f907, 0, 0, 0, f(No, false, "洴")}, + {0x2f908, 0, 0, 0, f(No, false, "港")}, + {0x2f909, 0, 0, 0, f(No, false, "湮")}, + {0x2f90a, 0, 0, 0, f(No, false, "㴳")}, + {0x2f90b, 0, 0, 0, f(No, false, "滋")}, + {0x2f90c, 0, 0, 0, f(No, false, "滇")}, + {0x2f90d, 0, 0, 0, f(No, false, "𣻑")}, + {0x2f90e, 0, 0, 0, f(No, false, "淹")}, + {0x2f90f, 0, 0, 0, f(No, false, "潮")}, + {0x2f910, 0, 0, 0, f(No, false, "𣽞")}, + {0x2f911, 0, 0, 0, f(No, false, "𣾎")}, + {0x2f912, 0, 0, 0, f(No, false, "濆")}, + {0x2f913, 0, 0, 0, f(No, false, "瀹")}, + {0x2f914, 0, 0, 0, f(No, false, "瀞")}, + {0x2f915, 0, 0, 0, f(No, false, "瀛")}, + {0x2f916, 0, 0, 0, f(No, false, "㶖")}, + {0x2f917, 0, 0, 0, f(No, false, "灊")}, + {0x2f918, 0, 0, 0, f(No, false, "災")}, + {0x2f919, 0, 0, 0, f(No, false, "灷")}, + {0x2f91a, 0, 0, 0, f(No, false, "炭")}, + {0x2f91b, 0, 0, 0, f(No, false, "𠔥")}, + {0x2f91c, 0, 0, 0, f(No, false, "煅")}, + {0x2f91d, 0, 0, 0, f(No, false, "𤉣")}, + {0x2f91e, 0, 0, 0, f(No, false, "熜")}, + {0x2f91f, 0, 0, 0, f(No, false, "𤎫")}, + {0x2f920, 0, 0, 0, f(No, false, "爨")}, + {0x2f921, 0, 0, 0, f(No, false, "爵")}, + {0x2f922, 0, 0, 0, f(No, false, "牐")}, + {0x2f923, 0, 0, 0, f(No, false, "𤘈")}, + {0x2f924, 0, 0, 0, f(No, false, "犀")}, + {0x2f925, 0, 0, 0, f(No, false, "犕")}, + {0x2f926, 0, 0, 0, f(No, false, "𤜵")}, + {0x2f927, 0, 0, 0, f(No, false, "𤠔")}, + {0x2f928, 0, 0, 0, f(No, false, "獺")}, + {0x2f929, 0, 0, 0, f(No, false, "王")}, + {0x2f92a, 0, 0, 0, f(No, false, "㺬")}, + {0x2f92b, 0, 0, 0, f(No, false, "玥")}, + {0x2f92c, 0, 0, 0, f(No, false, "㺸")}, + {0x2f92e, 0, 0, 0, f(No, false, "瑇")}, + {0x2f92f, 0, 0, 0, f(No, false, "瑜")}, + {0x2f930, 0, 0, 0, f(No, false, "瑱")}, + {0x2f931, 0, 0, 0, f(No, false, "璅")}, + {0x2f932, 0, 0, 0, f(No, false, "瓊")}, + {0x2f933, 0, 0, 0, f(No, false, "㼛")}, + {0x2f934, 0, 0, 0, f(No, false, "甤")}, + {0x2f935, 0, 0, 0, f(No, false, "𤰶")}, + {0x2f936, 0, 0, 0, f(No, false, "甾")}, + {0x2f937, 0, 0, 0, f(No, false, "𤲒")}, + {0x2f938, 0, 0, 0, f(No, false, "異")}, + {0x2f939, 0, 0, 0, f(No, false, "𢆟")}, + {0x2f93a, 0, 0, 0, f(No, false, "瘐")}, + {0x2f93b, 0, 0, 0, f(No, false, "𤾡")}, + {0x2f93c, 0, 0, 0, f(No, false, "𤾸")}, + {0x2f93d, 0, 0, 0, f(No, false, "𥁄")}, + {0x2f93e, 0, 0, 0, f(No, false, "㿼")}, + {0x2f93f, 0, 0, 0, f(No, false, "䀈")}, + {0x2f940, 0, 0, 0, f(No, false, "直")}, + {0x2f941, 0, 0, 0, f(No, false, "𥃳")}, + {0x2f942, 0, 0, 0, f(No, false, "𥃲")}, + {0x2f943, 0, 0, 0, f(No, false, "𥄙")}, + {0x2f944, 0, 0, 0, f(No, false, "𥄳")}, + {0x2f945, 0, 0, 0, f(No, false, "眞")}, + {0x2f946, 0, 0, 0, f(No, false, "真")}, + {0x2f948, 0, 0, 0, f(No, false, "睊")}, + {0x2f949, 0, 0, 0, f(No, false, "䀹")}, + {0x2f94a, 0, 0, 0, f(No, false, "瞋")}, + {0x2f94b, 0, 0, 0, f(No, false, "䁆")}, + {0x2f94c, 0, 0, 0, f(No, false, "䂖")}, + {0x2f94d, 0, 0, 0, f(No, false, "𥐝")}, + {0x2f94e, 0, 0, 0, f(No, false, "硎")}, + {0x2f94f, 0, 0, 0, f(No, false, "碌")}, + {0x2f950, 0, 0, 0, f(No, false, "磌")}, + {0x2f951, 0, 0, 0, f(No, false, "䃣")}, + {0x2f952, 0, 0, 0, f(No, false, "𥘦")}, + {0x2f953, 0, 0, 0, f(No, false, "祖")}, + {0x2f954, 0, 0, 0, f(No, false, "𥚚")}, + {0x2f955, 0, 0, 0, f(No, false, "𥛅")}, + {0x2f956, 0, 0, 0, f(No, false, "福")}, + {0x2f957, 0, 0, 0, f(No, false, "秫")}, + {0x2f958, 0, 0, 0, f(No, false, "䄯")}, + {0x2f959, 0, 0, 0, f(No, false, "穀")}, + {0x2f95a, 0, 0, 0, f(No, false, "穊")}, + {0x2f95b, 0, 0, 0, f(No, false, "穏")}, + {0x2f95c, 0, 0, 0, f(No, false, "𥥼")}, + {0x2f95d, 0, 0, 0, f(No, false, "𥪧")}, + {0x2f95f, 0, 0, 0, f(No, false, "竮")}, + {0x2f960, 0, 0, 0, f(No, false, "䈂")}, + {0x2f961, 0, 0, 0, f(No, false, "𥮫")}, + {0x2f962, 0, 0, 0, f(No, false, "篆")}, + {0x2f963, 0, 0, 0, f(No, false, "築")}, + {0x2f964, 0, 0, 0, f(No, false, "䈧")}, + {0x2f965, 0, 0, 0, f(No, false, "𥲀")}, + {0x2f966, 0, 0, 0, f(No, false, "糒")}, + {0x2f967, 0, 0, 0, f(No, false, "䊠")}, + {0x2f968, 0, 0, 0, f(No, false, "糨")}, + {0x2f969, 0, 0, 0, f(No, false, "糣")}, + {0x2f96a, 0, 0, 0, f(No, false, "紀")}, + {0x2f96b, 0, 0, 0, f(No, false, "𥾆")}, + {0x2f96c, 0, 0, 0, f(No, false, "絣")}, + {0x2f96d, 0, 0, 0, f(No, false, "䌁")}, + {0x2f96e, 0, 0, 0, f(No, false, "緇")}, + {0x2f96f, 0, 0, 0, f(No, false, "縂")}, + {0x2f970, 0, 0, 0, f(No, false, "繅")}, + {0x2f971, 0, 0, 0, f(No, false, "䌴")}, + {0x2f972, 0, 0, 0, f(No, false, "𦈨")}, + {0x2f973, 0, 0, 0, f(No, false, "𦉇")}, + {0x2f974, 0, 0, 0, f(No, false, "䍙")}, + {0x2f975, 0, 0, 0, f(No, false, "𦋙")}, + {0x2f976, 0, 0, 0, f(No, false, "罺")}, + {0x2f977, 0, 0, 0, f(No, false, "𦌾")}, + {0x2f978, 0, 0, 0, f(No, false, "羕")}, + {0x2f979, 0, 0, 0, f(No, false, "翺")}, + {0x2f97a, 0, 0, 0, f(No, false, "者")}, + {0x2f97b, 0, 0, 0, f(No, false, "𦓚")}, + {0x2f97c, 0, 0, 0, f(No, false, "𦔣")}, + {0x2f97d, 0, 0, 0, f(No, false, "聠")}, + {0x2f97e, 0, 0, 0, f(No, false, "𦖨")}, + {0x2f97f, 0, 0, 0, f(No, false, "聰")}, + {0x2f980, 0, 0, 0, f(No, false, "𣍟")}, + {0x2f981, 0, 0, 0, f(No, false, "䏕")}, + {0x2f982, 0, 0, 0, f(No, false, "育")}, + {0x2f983, 0, 0, 0, f(No, false, "脃")}, + {0x2f984, 0, 0, 0, f(No, false, "䐋")}, + {0x2f985, 0, 0, 0, f(No, false, "脾")}, + {0x2f986, 0, 0, 0, f(No, false, "媵")}, + {0x2f987, 0, 0, 0, f(No, false, "𦞧")}, + {0x2f988, 0, 0, 0, f(No, false, "𦞵")}, + {0x2f989, 0, 0, 0, f(No, false, "𣎓")}, + {0x2f98a, 0, 0, 0, f(No, false, "𣎜")}, + {0x2f98b, 0, 0, 0, f(No, false, "舁")}, + {0x2f98c, 0, 0, 0, f(No, false, "舄")}, + {0x2f98d, 0, 0, 0, f(No, false, "辞")}, + {0x2f98e, 0, 0, 0, f(No, false, "䑫")}, + {0x2f98f, 0, 0, 0, f(No, false, "芑")}, + {0x2f990, 0, 0, 0, f(No, false, "芋")}, + {0x2f991, 0, 0, 0, f(No, false, "芝")}, + {0x2f992, 0, 0, 0, f(No, false, "劳")}, + {0x2f993, 0, 0, 0, f(No, false, "花")}, + {0x2f994, 0, 0, 0, f(No, false, "芳")}, + {0x2f995, 0, 0, 0, f(No, false, "芽")}, + {0x2f996, 0, 0, 0, f(No, false, "苦")}, + {0x2f997, 0, 0, 0, f(No, false, "𦬼")}, + {0x2f998, 0, 0, 0, f(No, false, "若")}, + {0x2f999, 0, 0, 0, f(No, false, "茝")}, + {0x2f99a, 0, 0, 0, f(No, false, "荣")}, + {0x2f99b, 0, 0, 0, f(No, false, "莭")}, + {0x2f99c, 0, 0, 0, f(No, false, "茣")}, + {0x2f99d, 0, 0, 0, f(No, false, "莽")}, + {0x2f99e, 0, 0, 0, f(No, false, "菧")}, + {0x2f99f, 0, 0, 0, f(No, false, "著")}, + {0x2f9a0, 0, 0, 0, f(No, false, "荓")}, + {0x2f9a1, 0, 0, 0, f(No, false, "菊")}, + {0x2f9a2, 0, 0, 0, f(No, false, "菌")}, + {0x2f9a3, 0, 0, 0, f(No, false, "菜")}, + {0x2f9a4, 0, 0, 0, f(No, false, "𦰶")}, + {0x2f9a5, 0, 0, 0, f(No, false, "𦵫")}, + {0x2f9a6, 0, 0, 0, f(No, false, "𦳕")}, + {0x2f9a7, 0, 0, 0, f(No, false, "䔫")}, + {0x2f9a8, 0, 0, 0, f(No, false, "蓱")}, + {0x2f9a9, 0, 0, 0, f(No, false, "蓳")}, + {0x2f9aa, 0, 0, 0, f(No, false, "蔖")}, + {0x2f9ab, 0, 0, 0, f(No, false, "𧏊")}, + {0x2f9ac, 0, 0, 0, f(No, false, "蕤")}, + {0x2f9ad, 0, 0, 0, f(No, false, "𦼬")}, + {0x2f9ae, 0, 0, 0, f(No, false, "䕝")}, + {0x2f9af, 0, 0, 0, f(No, false, "䕡")}, + {0x2f9b0, 0, 0, 0, f(No, false, "𦾱")}, + {0x2f9b1, 0, 0, 0, f(No, false, "𧃒")}, + {0x2f9b2, 0, 0, 0, f(No, false, "䕫")}, + {0x2f9b3, 0, 0, 0, f(No, false, "虐")}, + {0x2f9b4, 0, 0, 0, f(No, false, "虜")}, + {0x2f9b5, 0, 0, 0, f(No, false, "虧")}, + {0x2f9b6, 0, 0, 0, f(No, false, "虩")}, + {0x2f9b7, 0, 0, 0, f(No, false, "蚩")}, + {0x2f9b8, 0, 0, 0, f(No, false, "蚈")}, + {0x2f9b9, 0, 0, 0, f(No, false, "蜎")}, + {0x2f9ba, 0, 0, 0, f(No, false, "蛢")}, + {0x2f9bb, 0, 0, 0, f(No, false, "蝹")}, + {0x2f9bc, 0, 0, 0, f(No, false, "蜨")}, + {0x2f9bd, 0, 0, 0, f(No, false, "蝫")}, + {0x2f9be, 0, 0, 0, f(No, false, "螆")}, + {0x2f9bf, 0, 0, 0, f(No, false, "䗗")}, + {0x2f9c0, 0, 0, 0, f(No, false, "蟡")}, + {0x2f9c1, 0, 0, 0, f(No, false, "蠁")}, + {0x2f9c2, 0, 0, 0, f(No, false, "䗹")}, + {0x2f9c3, 0, 0, 0, f(No, false, "衠")}, + {0x2f9c4, 0, 0, 0, f(No, false, "衣")}, + {0x2f9c5, 0, 0, 0, f(No, false, "𧙧")}, + {0x2f9c6, 0, 0, 0, f(No, false, "裗")}, + {0x2f9c7, 0, 0, 0, f(No, false, "裞")}, + {0x2f9c8, 0, 0, 0, f(No, false, "䘵")}, + {0x2f9c9, 0, 0, 0, f(No, false, "裺")}, + {0x2f9ca, 0, 0, 0, f(No, false, "㒻")}, + {0x2f9cb, 0, 0, 0, f(No, false, "𧢮")}, + {0x2f9cc, 0, 0, 0, f(No, false, "𧥦")}, + {0x2f9cd, 0, 0, 0, f(No, false, "䚾")}, + {0x2f9ce, 0, 0, 0, f(No, false, "䛇")}, + {0x2f9cf, 0, 0, 0, f(No, false, "誠")}, + {0x2f9d0, 0, 0, 0, f(No, false, "諭")}, + {0x2f9d1, 0, 0, 0, f(No, false, "變")}, + {0x2f9d2, 0, 0, 0, f(No, false, "豕")}, + {0x2f9d3, 0, 0, 0, f(No, false, "𧲨")}, + {0x2f9d4, 0, 0, 0, f(No, false, "貫")}, + {0x2f9d5, 0, 0, 0, f(No, false, "賁")}, + {0x2f9d6, 0, 0, 0, f(No, false, "贛")}, + {0x2f9d7, 0, 0, 0, f(No, false, "起")}, + {0x2f9d8, 0, 0, 0, f(No, false, "𧼯")}, + {0x2f9d9, 0, 0, 0, f(No, false, "𠠄")}, + {0x2f9da, 0, 0, 0, f(No, false, "跋")}, + {0x2f9db, 0, 0, 0, f(No, false, "趼")}, + {0x2f9dc, 0, 0, 0, f(No, false, "跰")}, + {0x2f9dd, 0, 0, 0, f(No, false, "𠣞")}, + {0x2f9de, 0, 0, 0, f(No, false, "軔")}, + {0x2f9df, 0, 0, 0, f(No, false, "輸")}, + {0x2f9e0, 0, 0, 0, f(No, false, "𨗒")}, + {0x2f9e1, 0, 0, 0, f(No, false, "𨗭")}, + {0x2f9e2, 0, 0, 0, f(No, false, "邔")}, + {0x2f9e3, 0, 0, 0, f(No, false, "郱")}, + {0x2f9e4, 0, 0, 0, f(No, false, "鄑")}, + {0x2f9e5, 0, 0, 0, f(No, false, "𨜮")}, + {0x2f9e6, 0, 0, 0, f(No, false, "鄛")}, + {0x2f9e7, 0, 0, 0, f(No, false, "鈸")}, + {0x2f9e8, 0, 0, 0, f(No, false, "鋗")}, + {0x2f9e9, 0, 0, 0, f(No, false, "鋘")}, + {0x2f9ea, 0, 0, 0, f(No, false, "鉼")}, + {0x2f9eb, 0, 0, 0, f(No, false, "鏹")}, + {0x2f9ec, 0, 0, 0, f(No, false, "鐕")}, + {0x2f9ed, 0, 0, 0, f(No, false, "𨯺")}, + {0x2f9ee, 0, 0, 0, f(No, false, "開")}, + {0x2f9ef, 0, 0, 0, f(No, false, "䦕")}, + {0x2f9f0, 0, 0, 0, f(No, false, "閷")}, + {0x2f9f1, 0, 0, 0, f(No, false, "𨵷")}, + {0x2f9f2, 0, 0, 0, f(No, false, "䧦")}, + {0x2f9f3, 0, 0, 0, f(No, false, "雃")}, + {0x2f9f4, 0, 0, 0, f(No, false, "嶲")}, + {0x2f9f5, 0, 0, 0, f(No, false, "霣")}, + {0x2f9f6, 0, 0, 0, f(No, false, "𩅅")}, + {0x2f9f7, 0, 0, 0, f(No, false, "𩈚")}, + {0x2f9f8, 0, 0, 0, f(No, false, "䩮")}, + {0x2f9f9, 0, 0, 0, f(No, false, "䩶")}, + {0x2f9fa, 0, 0, 0, f(No, false, "韠")}, + {0x2f9fb, 0, 0, 0, f(No, false, "𩐊")}, + {0x2f9fc, 0, 0, 0, f(No, false, "䪲")}, + {0x2f9fd, 0, 0, 0, f(No, false, "𩒖")}, + {0x2f9fe, 0, 0, 0, f(No, false, "頋")}, + {0x2fa00, 0, 0, 0, f(No, false, "頩")}, + {0x2fa01, 0, 0, 0, f(No, false, "𩖶")}, + {0x2fa02, 0, 0, 0, f(No, false, "飢")}, + {0x2fa03, 0, 0, 0, f(No, false, "䬳")}, + {0x2fa04, 0, 0, 0, f(No, false, "餩")}, + {0x2fa05, 0, 0, 0, f(No, false, "馧")}, + {0x2fa06, 0, 0, 0, f(No, false, "駂")}, + {0x2fa07, 0, 0, 0, f(No, false, "駾")}, + {0x2fa08, 0, 0, 0, f(No, false, "䯎")}, + {0x2fa09, 0, 0, 0, f(No, false, "𩬰")}, + {0x2fa0a, 0, 0, 0, f(No, false, "鬒")}, + {0x2fa0b, 0, 0, 0, f(No, false, "鱀")}, + {0x2fa0c, 0, 0, 0, f(No, false, "鳽")}, + {0x2fa0d, 0, 0, 0, f(No, false, "䳎")}, + {0x2fa0e, 0, 0, 0, f(No, false, "䳭")}, + {0x2fa0f, 0, 0, 0, f(No, false, "鵧")}, + {0x2fa10, 0, 0, 0, f(No, false, "𪃎")}, + {0x2fa11, 0, 0, 0, f(No, false, "䳸")}, + {0x2fa12, 0, 0, 0, f(No, false, "𪄅")}, + {0x2fa13, 0, 0, 0, f(No, false, "𪈎")}, + {0x2fa14, 0, 0, 0, f(No, false, "𪊑")}, + {0x2fa15, 0, 0, 0, f(No, false, "麻")}, + {0x2fa16, 0, 0, 0, f(No, false, "䵖")}, + {0x2fa17, 0, 0, 0, f(No, false, "黹")}, + {0x2fa18, 0, 0, 0, f(No, false, "黾")}, + {0x2fa19, 0, 0, 0, f(No, false, "鼅")}, + {0x2fa1a, 0, 0, 0, f(No, false, "鼏")}, + {0x2fa1b, 0, 0, 0, f(No, false, "鼖")}, + {0x2fa1c, 0, 0, 0, f(No, false, "鼻")}, + {0x2fa1d, 0, 0, 0, f(No, false, "𪘀")}, + {0x2fa1e, 0, 0, 0, f(Yes, false, "")}, +} diff --git a/vendor/golang.org/x/text/unicode/norm/data9.0.0_test.go b/vendor/golang.org/x/text/unicode/norm/data9.0.0_test.go new file mode 100644 index 0000000..b1be64d --- /dev/null +++ b/vendor/golang.org/x/text/unicode/norm/data9.0.0_test.go @@ -0,0 +1,7409 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// +build !go1.10 + +package norm + +const ( + Yes = iota + No + Maybe +) + +type formData struct { + qc uint8 + combinesForward bool + decomposition string +} + +type runeData struct { + r rune + ccc uint8 + nLead uint8 + nTrail uint8 + f [2]formData // 0: canonical; 1: compatibility +} + +func f(qc uint8, cf bool, dec string) [2]formData { + return [2]formData{{qc, cf, dec}, {qc, cf, dec}} +} + +func g(qc, qck uint8, cf, cfk bool, d, dk string) [2]formData { + return [2]formData{{qc, cf, d}, {qck, cfk, dk}} +} + +var testData = []runeData{ + {0x0, 0, 0, 0, f(Yes, false, "")}, + {0x3c, 0, 0, 0, f(Yes, true, "")}, + {0x3f, 0, 0, 0, f(Yes, false, "")}, + {0x41, 0, 0, 0, f(Yes, true, "")}, + {0x51, 0, 0, 0, f(Yes, false, "")}, + {0x52, 0, 0, 0, f(Yes, true, "")}, + {0x5b, 0, 0, 0, f(Yes, false, "")}, + {0x61, 0, 0, 0, f(Yes, true, "")}, + {0x71, 0, 0, 0, f(Yes, false, "")}, + {0x72, 0, 0, 0, f(Yes, true, "")}, + {0x7b, 0, 0, 0, f(Yes, false, "")}, + {0xa0, 0, 0, 0, g(Yes, No, false, false, "", " ")}, + {0xa1, 0, 0, 0, f(Yes, false, "")}, + {0xa8, 0, 0, 1, g(Yes, No, true, false, "", " ̈")}, + {0xa9, 0, 0, 0, f(Yes, false, "")}, + {0xaa, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0xab, 0, 0, 0, f(Yes, false, "")}, + {0xaf, 0, 0, 1, g(Yes, No, false, false, "", " ̄")}, + {0xb0, 0, 0, 0, f(Yes, false, "")}, + {0xb2, 0, 0, 0, g(Yes, No, false, false, "", "2")}, + {0xb3, 0, 0, 0, g(Yes, No, false, false, "", "3")}, + {0xb4, 0, 0, 1, g(Yes, No, false, false, "", " ́")}, + {0xb5, 0, 0, 0, g(Yes, No, false, false, "", "μ")}, + {0xb6, 0, 0, 0, f(Yes, false, "")}, + {0xb8, 0, 0, 1, g(Yes, No, false, false, "", " ̧")}, + {0xb9, 0, 0, 0, g(Yes, No, false, false, "", "1")}, + {0xba, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0xbb, 0, 0, 0, f(Yes, false, "")}, + {0xbc, 0, 0, 0, g(Yes, No, false, false, "", "1⁄4")}, + {0xbd, 0, 0, 0, g(Yes, No, false, false, "", "1⁄2")}, + {0xbe, 0, 0, 0, g(Yes, No, false, false, "", "3⁄4")}, + {0xbf, 0, 0, 0, f(Yes, false, "")}, + {0xc0, 0, 0, 1, f(Yes, false, "À")}, + {0xc1, 0, 0, 1, f(Yes, false, "Á")}, + {0xc2, 0, 0, 1, f(Yes, true, "Â")}, + {0xc3, 0, 0, 1, f(Yes, false, "Ã")}, + {0xc4, 0, 0, 1, f(Yes, true, "Ä")}, + {0xc5, 0, 0, 1, f(Yes, true, "Å")}, + {0xc6, 0, 0, 0, f(Yes, true, "")}, + {0xc7, 0, 0, 1, f(Yes, true, "Ç")}, + {0xc8, 0, 0, 1, f(Yes, false, "È")}, + {0xc9, 0, 0, 1, f(Yes, false, "É")}, + {0xca, 0, 0, 1, f(Yes, true, "Ê")}, + {0xcb, 0, 0, 1, f(Yes, false, "Ë")}, + {0xcc, 0, 0, 1, f(Yes, false, "Ì")}, + {0xcd, 0, 0, 1, f(Yes, false, "Í")}, + {0xce, 0, 0, 1, f(Yes, false, "Î")}, + {0xcf, 0, 0, 1, f(Yes, true, "Ï")}, + {0xd0, 0, 0, 0, f(Yes, false, "")}, + {0xd1, 0, 0, 1, f(Yes, false, "Ñ")}, + {0xd2, 0, 0, 1, f(Yes, false, "Ò")}, + {0xd3, 0, 0, 1, f(Yes, false, "Ó")}, + {0xd4, 0, 0, 1, f(Yes, true, "Ô")}, + {0xd5, 0, 0, 1, f(Yes, true, "Õ")}, + {0xd6, 0, 0, 1, f(Yes, true, "Ö")}, + {0xd7, 0, 0, 0, f(Yes, false, "")}, + {0xd8, 0, 0, 0, f(Yes, true, "")}, + {0xd9, 0, 0, 1, f(Yes, false, "Ù")}, + {0xda, 0, 0, 1, f(Yes, false, "Ú")}, + {0xdb, 0, 0, 1, f(Yes, false, "Û")}, + {0xdc, 0, 0, 1, f(Yes, true, "Ü")}, + {0xdd, 0, 0, 1, f(Yes, false, "Ý")}, + {0xde, 0, 0, 0, f(Yes, false, "")}, + {0xe0, 0, 0, 1, f(Yes, false, "à")}, + {0xe1, 0, 0, 1, f(Yes, false, "á")}, + {0xe2, 0, 0, 1, f(Yes, true, "â")}, + {0xe3, 0, 0, 1, f(Yes, false, "ã")}, + {0xe4, 0, 0, 1, f(Yes, true, "ä")}, + {0xe5, 0, 0, 1, f(Yes, true, "å")}, + {0xe6, 0, 0, 0, f(Yes, true, "")}, + {0xe7, 0, 0, 1, f(Yes, true, "ç")}, + {0xe8, 0, 0, 1, f(Yes, false, "è")}, + {0xe9, 0, 0, 1, f(Yes, false, "é")}, + {0xea, 0, 0, 1, f(Yes, true, "ê")}, + {0xeb, 0, 0, 1, f(Yes, false, "ë")}, + {0xec, 0, 0, 1, f(Yes, false, "ì")}, + {0xed, 0, 0, 1, f(Yes, false, "í")}, + {0xee, 0, 0, 1, f(Yes, false, "î")}, + {0xef, 0, 0, 1, f(Yes, true, "ï")}, + {0xf0, 0, 0, 0, f(Yes, false, "")}, + {0xf1, 0, 0, 1, f(Yes, false, "ñ")}, + {0xf2, 0, 0, 1, f(Yes, false, "ò")}, + {0xf3, 0, 0, 1, f(Yes, false, "ó")}, + {0xf4, 0, 0, 1, f(Yes, true, "ô")}, + {0xf5, 0, 0, 1, f(Yes, true, "õ")}, + {0xf6, 0, 0, 1, f(Yes, true, "ö")}, + {0xf7, 0, 0, 0, f(Yes, false, "")}, + {0xf8, 0, 0, 0, f(Yes, true, "")}, + {0xf9, 0, 0, 1, f(Yes, false, "ù")}, + {0xfa, 0, 0, 1, f(Yes, false, "ú")}, + {0xfb, 0, 0, 1, f(Yes, false, "û")}, + {0xfc, 0, 0, 1, f(Yes, true, "ü")}, + {0xfd, 0, 0, 1, f(Yes, false, "ý")}, + {0xfe, 0, 0, 0, f(Yes, false, "")}, + {0xff, 0, 0, 1, f(Yes, false, "ÿ")}, + {0x100, 0, 0, 1, f(Yes, false, "Ā")}, + {0x101, 0, 0, 1, f(Yes, false, "ā")}, + {0x102, 0, 0, 1, f(Yes, true, "Ă")}, + {0x103, 0, 0, 1, f(Yes, true, "ă")}, + {0x104, 0, 0, 1, f(Yes, false, "Ą")}, + {0x105, 0, 0, 1, f(Yes, false, "ą")}, + {0x106, 0, 0, 1, f(Yes, false, "Ć")}, + {0x107, 0, 0, 1, f(Yes, false, "ć")}, + {0x108, 0, 0, 1, f(Yes, false, "Ĉ")}, + {0x109, 0, 0, 1, f(Yes, false, "ĉ")}, + {0x10a, 0, 0, 1, f(Yes, false, "Ċ")}, + {0x10b, 0, 0, 1, f(Yes, false, "ċ")}, + {0x10c, 0, 0, 1, f(Yes, false, "Č")}, + {0x10d, 0, 0, 1, f(Yes, false, "č")}, + {0x10e, 0, 0, 1, f(Yes, false, "Ď")}, + {0x10f, 0, 0, 1, f(Yes, false, "ď")}, + {0x110, 0, 0, 0, f(Yes, false, "")}, + {0x112, 0, 0, 1, f(Yes, true, "Ē")}, + {0x113, 0, 0, 1, f(Yes, true, "ē")}, + {0x114, 0, 0, 1, f(Yes, false, "Ĕ")}, + {0x115, 0, 0, 1, f(Yes, false, "ĕ")}, + {0x116, 0, 0, 1, f(Yes, false, "Ė")}, + {0x117, 0, 0, 1, f(Yes, false, "ė")}, + {0x118, 0, 0, 1, f(Yes, false, "Ę")}, + {0x119, 0, 0, 1, f(Yes, false, "ę")}, + {0x11a, 0, 0, 1, f(Yes, false, "Ě")}, + {0x11b, 0, 0, 1, f(Yes, false, "ě")}, + {0x11c, 0, 0, 1, f(Yes, false, "Ĝ")}, + {0x11d, 0, 0, 1, f(Yes, false, "ĝ")}, + {0x11e, 0, 0, 1, f(Yes, false, "Ğ")}, + {0x11f, 0, 0, 1, f(Yes, false, "ğ")}, + {0x120, 0, 0, 1, f(Yes, false, "Ġ")}, + {0x121, 0, 0, 1, f(Yes, false, "ġ")}, + {0x122, 0, 0, 1, f(Yes, false, "Ģ")}, + {0x123, 0, 0, 1, f(Yes, false, "ģ")}, + {0x124, 0, 0, 1, f(Yes, false, "Ĥ")}, + {0x125, 0, 0, 1, f(Yes, false, "ĥ")}, + {0x126, 0, 0, 0, f(Yes, false, "")}, + {0x128, 0, 0, 1, f(Yes, false, "Ĩ")}, + {0x129, 0, 0, 1, f(Yes, false, "ĩ")}, + {0x12a, 0, 0, 1, f(Yes, false, "Ī")}, + {0x12b, 0, 0, 1, f(Yes, false, "ī")}, + {0x12c, 0, 0, 1, f(Yes, false, "Ĭ")}, + {0x12d, 0, 0, 1, f(Yes, false, "ĭ")}, + {0x12e, 0, 0, 1, f(Yes, false, "Į")}, + {0x12f, 0, 0, 1, f(Yes, false, "į")}, + {0x130, 0, 0, 1, f(Yes, false, "İ")}, + {0x131, 0, 0, 0, f(Yes, false, "")}, + {0x132, 0, 0, 0, g(Yes, No, false, false, "", "IJ")}, + {0x133, 0, 0, 0, g(Yes, No, false, false, "", "ij")}, + {0x134, 0, 0, 1, f(Yes, false, "Ĵ")}, + {0x135, 0, 0, 1, f(Yes, false, "ĵ")}, + {0x136, 0, 0, 1, f(Yes, false, "Ķ")}, + {0x137, 0, 0, 1, f(Yes, false, "ķ")}, + {0x138, 0, 0, 0, f(Yes, false, "")}, + {0x139, 0, 0, 1, f(Yes, false, "Ĺ")}, + {0x13a, 0, 0, 1, f(Yes, false, "ĺ")}, + {0x13b, 0, 0, 1, f(Yes, false, "Ļ")}, + {0x13c, 0, 0, 1, f(Yes, false, "ļ")}, + {0x13d, 0, 0, 1, f(Yes, false, "Ľ")}, + {0x13e, 0, 0, 1, f(Yes, false, "ľ")}, + {0x13f, 0, 0, 0, g(Yes, No, false, false, "", "L·")}, + {0x140, 0, 0, 0, g(Yes, No, false, false, "", "l·")}, + {0x141, 0, 0, 0, f(Yes, false, "")}, + {0x143, 0, 0, 1, f(Yes, false, "Ń")}, + {0x144, 0, 0, 1, f(Yes, false, "ń")}, + {0x145, 0, 0, 1, f(Yes, false, "Ņ")}, + {0x146, 0, 0, 1, f(Yes, false, "ņ")}, + {0x147, 0, 0, 1, f(Yes, false, "Ň")}, + {0x148, 0, 0, 1, f(Yes, false, "ň")}, + {0x149, 0, 0, 0, g(Yes, No, false, false, "", "ʼn")}, + {0x14a, 0, 0, 0, f(Yes, false, "")}, + {0x14c, 0, 0, 1, f(Yes, true, "Ō")}, + {0x14d, 0, 0, 1, f(Yes, true, "ō")}, + {0x14e, 0, 0, 1, f(Yes, false, "Ŏ")}, + {0x14f, 0, 0, 1, f(Yes, false, "ŏ")}, + {0x150, 0, 0, 1, f(Yes, false, "Ő")}, + {0x151, 0, 0, 1, f(Yes, false, "ő")}, + {0x152, 0, 0, 0, f(Yes, false, "")}, + {0x154, 0, 0, 1, f(Yes, false, "Ŕ")}, + {0x155, 0, 0, 1, f(Yes, false, "ŕ")}, + {0x156, 0, 0, 1, f(Yes, false, "Ŗ")}, + {0x157, 0, 0, 1, f(Yes, false, "ŗ")}, + {0x158, 0, 0, 1, f(Yes, false, "Ř")}, + {0x159, 0, 0, 1, f(Yes, false, "ř")}, + {0x15a, 0, 0, 1, f(Yes, true, "Ś")}, + {0x15b, 0, 0, 1, f(Yes, true, "ś")}, + {0x15c, 0, 0, 1, f(Yes, false, "Ŝ")}, + {0x15d, 0, 0, 1, f(Yes, false, "ŝ")}, + {0x15e, 0, 0, 1, f(Yes, false, "Ş")}, + {0x15f, 0, 0, 1, f(Yes, false, "ş")}, + {0x160, 0, 0, 1, f(Yes, true, "Š")}, + {0x161, 0, 0, 1, f(Yes, true, "š")}, + {0x162, 0, 0, 1, f(Yes, false, "Ţ")}, + {0x163, 0, 0, 1, f(Yes, false, "ţ")}, + {0x164, 0, 0, 1, f(Yes, false, "Ť")}, + {0x165, 0, 0, 1, f(Yes, false, "ť")}, + {0x166, 0, 0, 0, f(Yes, false, "")}, + {0x168, 0, 0, 1, f(Yes, true, "Ũ")}, + {0x169, 0, 0, 1, f(Yes, true, "ũ")}, + {0x16a, 0, 0, 1, f(Yes, true, "Ū")}, + {0x16b, 0, 0, 1, f(Yes, true, "ū")}, + {0x16c, 0, 0, 1, f(Yes, false, "Ŭ")}, + {0x16d, 0, 0, 1, f(Yes, false, "ŭ")}, + {0x16e, 0, 0, 1, f(Yes, false, "Ů")}, + {0x16f, 0, 0, 1, f(Yes, false, "ů")}, + {0x170, 0, 0, 1, f(Yes, false, "Ű")}, + {0x171, 0, 0, 1, f(Yes, false, "ű")}, + {0x172, 0, 0, 1, f(Yes, false, "Ų")}, + {0x173, 0, 0, 1, f(Yes, false, "ų")}, + {0x174, 0, 0, 1, f(Yes, false, "Ŵ")}, + {0x175, 0, 0, 1, f(Yes, false, "ŵ")}, + {0x176, 0, 0, 1, f(Yes, false, "Ŷ")}, + {0x177, 0, 0, 1, f(Yes, false, "ŷ")}, + {0x178, 0, 0, 1, f(Yes, false, "Ÿ")}, + {0x179, 0, 0, 1, f(Yes, false, "Ź")}, + {0x17a, 0, 0, 1, f(Yes, false, "ź")}, + {0x17b, 0, 0, 1, f(Yes, false, "Ż")}, + {0x17c, 0, 0, 1, f(Yes, false, "ż")}, + {0x17d, 0, 0, 1, f(Yes, false, "Ž")}, + {0x17e, 0, 0, 1, f(Yes, false, "ž")}, + {0x17f, 0, 0, 0, g(Yes, No, true, false, "", "s")}, + {0x180, 0, 0, 0, f(Yes, false, "")}, + {0x1a0, 0, 0, 1, f(Yes, true, "Ơ")}, + {0x1a1, 0, 0, 1, f(Yes, true, "ơ")}, + {0x1a2, 0, 0, 0, f(Yes, false, "")}, + {0x1af, 0, 0, 1, f(Yes, true, "Ư")}, + {0x1b0, 0, 0, 1, f(Yes, true, "ư")}, + {0x1b1, 0, 0, 0, f(Yes, false, "")}, + {0x1b7, 0, 0, 0, f(Yes, true, "")}, + {0x1b8, 0, 0, 0, f(Yes, false, "")}, + {0x1c4, 0, 0, 1, g(Yes, No, false, false, "", "DŽ")}, + {0x1c5, 0, 0, 1, g(Yes, No, false, false, "", "Dž")}, + {0x1c6, 0, 0, 1, g(Yes, No, false, false, "", "dž")}, + {0x1c7, 0, 0, 0, g(Yes, No, false, false, "", "LJ")}, + {0x1c8, 0, 0, 0, g(Yes, No, false, false, "", "Lj")}, + {0x1c9, 0, 0, 0, g(Yes, No, false, false, "", "lj")}, + {0x1ca, 0, 0, 0, g(Yes, No, false, false, "", "NJ")}, + {0x1cb, 0, 0, 0, g(Yes, No, false, false, "", "Nj")}, + {0x1cc, 0, 0, 0, g(Yes, No, false, false, "", "nj")}, + {0x1cd, 0, 0, 1, f(Yes, false, "Ǎ")}, + {0x1ce, 0, 0, 1, f(Yes, false, "ǎ")}, + {0x1cf, 0, 0, 1, f(Yes, false, "Ǐ")}, + {0x1d0, 0, 0, 1, f(Yes, false, "ǐ")}, + {0x1d1, 0, 0, 1, f(Yes, false, "Ǒ")}, + {0x1d2, 0, 0, 1, f(Yes, false, "ǒ")}, + {0x1d3, 0, 0, 1, f(Yes, false, "Ǔ")}, + {0x1d4, 0, 0, 1, f(Yes, false, "ǔ")}, + {0x1d5, 0, 0, 2, f(Yes, false, "Ǖ")}, + {0x1d6, 0, 0, 2, f(Yes, false, "ǖ")}, + {0x1d7, 0, 0, 2, f(Yes, false, "Ǘ")}, + {0x1d8, 0, 0, 2, f(Yes, false, "ǘ")}, + {0x1d9, 0, 0, 2, f(Yes, false, "Ǚ")}, + {0x1da, 0, 0, 2, f(Yes, false, "ǚ")}, + {0x1db, 0, 0, 2, f(Yes, false, "Ǜ")}, + {0x1dc, 0, 0, 2, f(Yes, false, "ǜ")}, + {0x1dd, 0, 0, 0, f(Yes, false, "")}, + {0x1de, 0, 0, 2, f(Yes, false, "Ǟ")}, + {0x1df, 0, 0, 2, f(Yes, false, "ǟ")}, + {0x1e0, 0, 0, 2, f(Yes, false, "Ǡ")}, + {0x1e1, 0, 0, 2, f(Yes, false, "ǡ")}, + {0x1e2, 0, 0, 1, f(Yes, false, "Ǣ")}, + {0x1e3, 0, 0, 1, f(Yes, false, "ǣ")}, + {0x1e4, 0, 0, 0, f(Yes, false, "")}, + {0x1e6, 0, 0, 1, f(Yes, false, "Ǧ")}, + {0x1e7, 0, 0, 1, f(Yes, false, "ǧ")}, + {0x1e8, 0, 0, 1, f(Yes, false, "Ǩ")}, + {0x1e9, 0, 0, 1, f(Yes, false, "ǩ")}, + {0x1ea, 0, 0, 1, f(Yes, true, "Ǫ")}, + {0x1eb, 0, 0, 1, f(Yes, true, "ǫ")}, + {0x1ec, 0, 0, 2, f(Yes, false, "Ǭ")}, + {0x1ed, 0, 0, 2, f(Yes, false, "ǭ")}, + {0x1ee, 0, 0, 1, f(Yes, false, "Ǯ")}, + {0x1ef, 0, 0, 1, f(Yes, false, "ǯ")}, + {0x1f0, 0, 0, 1, f(Yes, false, "ǰ")}, + {0x1f1, 0, 0, 0, g(Yes, No, false, false, "", "DZ")}, + {0x1f2, 0, 0, 0, g(Yes, No, false, false, "", "Dz")}, + {0x1f3, 0, 0, 0, g(Yes, No, false, false, "", "dz")}, + {0x1f4, 0, 0, 1, f(Yes, false, "Ǵ")}, + {0x1f5, 0, 0, 1, f(Yes, false, "ǵ")}, + {0x1f6, 0, 0, 0, f(Yes, false, "")}, + {0x1f8, 0, 0, 1, f(Yes, false, "Ǹ")}, + {0x1f9, 0, 0, 1, f(Yes, false, "ǹ")}, + {0x1fa, 0, 0, 2, f(Yes, false, "Ǻ")}, + {0x1fb, 0, 0, 2, f(Yes, false, "ǻ")}, + {0x1fc, 0, 0, 1, f(Yes, false, "Ǽ")}, + {0x1fd, 0, 0, 1, f(Yes, false, "ǽ")}, + {0x1fe, 0, 0, 1, f(Yes, false, "Ǿ")}, + {0x1ff, 0, 0, 1, f(Yes, false, "ǿ")}, + {0x200, 0, 0, 1, f(Yes, false, "Ȁ")}, + {0x201, 0, 0, 1, f(Yes, false, "ȁ")}, + {0x202, 0, 0, 1, f(Yes, false, "Ȃ")}, + {0x203, 0, 0, 1, f(Yes, false, "ȃ")}, + {0x204, 0, 0, 1, f(Yes, false, "Ȅ")}, + {0x205, 0, 0, 1, f(Yes, false, "ȅ")}, + {0x206, 0, 0, 1, f(Yes, false, "Ȇ")}, + {0x207, 0, 0, 1, f(Yes, false, "ȇ")}, + {0x208, 0, 0, 1, f(Yes, false, "Ȉ")}, + {0x209, 0, 0, 1, f(Yes, false, "ȉ")}, + {0x20a, 0, 0, 1, f(Yes, false, "Ȋ")}, + {0x20b, 0, 0, 1, f(Yes, false, "ȋ")}, + {0x20c, 0, 0, 1, f(Yes, false, "Ȍ")}, + {0x20d, 0, 0, 1, f(Yes, false, "ȍ")}, + {0x20e, 0, 0, 1, f(Yes, false, "Ȏ")}, + {0x20f, 0, 0, 1, f(Yes, false, "ȏ")}, + {0x210, 0, 0, 1, f(Yes, false, "Ȑ")}, + {0x211, 0, 0, 1, f(Yes, false, "ȑ")}, + {0x212, 0, 0, 1, f(Yes, false, "Ȓ")}, + {0x213, 0, 0, 1, f(Yes, false, "ȓ")}, + {0x214, 0, 0, 1, f(Yes, false, "Ȕ")}, + {0x215, 0, 0, 1, f(Yes, false, "ȕ")}, + {0x216, 0, 0, 1, f(Yes, false, "Ȗ")}, + {0x217, 0, 0, 1, f(Yes, false, "ȗ")}, + {0x218, 0, 0, 1, f(Yes, false, "Ș")}, + {0x219, 0, 0, 1, f(Yes, false, "ș")}, + {0x21a, 0, 0, 1, f(Yes, false, "Ț")}, + {0x21b, 0, 0, 1, f(Yes, false, "ț")}, + {0x21c, 0, 0, 0, f(Yes, false, "")}, + {0x21e, 0, 0, 1, f(Yes, false, "Ȟ")}, + {0x21f, 0, 0, 1, f(Yes, false, "ȟ")}, + {0x220, 0, 0, 0, f(Yes, false, "")}, + {0x226, 0, 0, 1, f(Yes, true, "Ȧ")}, + {0x227, 0, 0, 1, f(Yes, true, "ȧ")}, + {0x228, 0, 0, 1, f(Yes, true, "Ȩ")}, + {0x229, 0, 0, 1, f(Yes, true, "ȩ")}, + {0x22a, 0, 0, 2, f(Yes, false, "Ȫ")}, + {0x22b, 0, 0, 2, f(Yes, false, "ȫ")}, + {0x22c, 0, 0, 2, f(Yes, false, "Ȭ")}, + {0x22d, 0, 0, 2, f(Yes, false, "ȭ")}, + {0x22e, 0, 0, 1, f(Yes, true, "Ȯ")}, + {0x22f, 0, 0, 1, f(Yes, true, "ȯ")}, + {0x230, 0, 0, 2, f(Yes, false, "Ȱ")}, + {0x231, 0, 0, 2, f(Yes, false, "ȱ")}, + {0x232, 0, 0, 1, f(Yes, false, "Ȳ")}, + {0x233, 0, 0, 1, f(Yes, false, "ȳ")}, + {0x234, 0, 0, 0, f(Yes, false, "")}, + {0x292, 0, 0, 0, f(Yes, true, "")}, + {0x293, 0, 0, 0, f(Yes, false, "")}, + {0x2b0, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0x2b1, 0, 0, 0, g(Yes, No, false, false, "", "ɦ")}, + {0x2b2, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x2b3, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0x2b4, 0, 0, 0, g(Yes, No, false, false, "", "ɹ")}, + {0x2b5, 0, 0, 0, g(Yes, No, false, false, "", "ɻ")}, + {0x2b6, 0, 0, 0, g(Yes, No, false, false, "", "ʁ")}, + {0x2b7, 0, 0, 0, g(Yes, No, false, false, "", "w")}, + {0x2b8, 0, 0, 0, g(Yes, No, false, false, "", "y")}, + {0x2b9, 0, 0, 0, f(Yes, false, "")}, + {0x2d8, 0, 0, 1, g(Yes, No, false, false, "", " ̆")}, + {0x2d9, 0, 0, 1, g(Yes, No, false, false, "", " ̇")}, + {0x2da, 0, 0, 1, g(Yes, No, false, false, "", " ̊")}, + {0x2db, 0, 0, 1, g(Yes, No, false, false, "", " ̨")}, + {0x2dc, 0, 0, 1, g(Yes, No, false, false, "", " ̃")}, + {0x2dd, 0, 0, 1, g(Yes, No, false, false, "", " ̋")}, + {0x2de, 0, 0, 0, f(Yes, false, "")}, + {0x2e0, 0, 0, 0, g(Yes, No, false, false, "", "ɣ")}, + {0x2e1, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x2e2, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0x2e3, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x2e4, 0, 0, 0, g(Yes, No, false, false, "", "ʕ")}, + {0x2e5, 0, 0, 0, f(Yes, false, "")}, + {0x300, 230, 1, 1, f(Maybe, false, "")}, + {0x305, 230, 1, 1, f(Yes, false, "")}, + {0x306, 230, 1, 1, f(Maybe, false, "")}, + {0x30d, 230, 1, 1, f(Yes, false, "")}, + {0x30f, 230, 1, 1, f(Maybe, false, "")}, + {0x310, 230, 1, 1, f(Yes, false, "")}, + {0x311, 230, 1, 1, f(Maybe, false, "")}, + {0x312, 230, 1, 1, f(Yes, false, "")}, + {0x313, 230, 1, 1, f(Maybe, false, "")}, + {0x315, 232, 1, 1, f(Yes, false, "")}, + {0x316, 220, 1, 1, f(Yes, false, "")}, + {0x31a, 232, 1, 1, f(Yes, false, "")}, + {0x31b, 216, 1, 1, f(Maybe, false, "")}, + {0x31c, 220, 1, 1, f(Yes, false, "")}, + {0x321, 202, 1, 1, f(Yes, false, "")}, + {0x323, 220, 1, 1, f(Maybe, false, "")}, + {0x327, 202, 1, 1, f(Maybe, false, "")}, + {0x329, 220, 1, 1, f(Yes, false, "")}, + {0x32d, 220, 1, 1, f(Maybe, false, "")}, + {0x32f, 220, 1, 1, f(Yes, false, "")}, + {0x330, 220, 1, 1, f(Maybe, false, "")}, + {0x332, 220, 1, 1, f(Yes, false, "")}, + {0x334, 1, 1, 1, f(Yes, false, "")}, + {0x338, 1, 1, 1, f(Maybe, false, "")}, + {0x339, 220, 1, 1, f(Yes, false, "")}, + {0x33d, 230, 1, 1, f(Yes, false, "")}, + {0x340, 230, 1, 1, f(No, false, "̀")}, + {0x341, 230, 1, 1, f(No, false, "́")}, + {0x342, 230, 1, 1, f(Maybe, false, "")}, + {0x343, 230, 1, 1, f(No, false, "̓")}, + {0x344, 230, 2, 2, f(No, false, "̈́")}, + {0x345, 240, 1, 1, f(Maybe, false, "")}, + {0x346, 230, 1, 1, f(Yes, false, "")}, + {0x347, 220, 1, 1, f(Yes, false, "")}, + {0x34a, 230, 1, 1, f(Yes, false, "")}, + {0x34d, 220, 1, 1, f(Yes, false, "")}, + {0x34f, 0, 0, 0, f(Yes, false, "")}, + {0x350, 230, 1, 1, f(Yes, false, "")}, + {0x353, 220, 1, 1, f(Yes, false, "")}, + {0x357, 230, 1, 1, f(Yes, false, "")}, + {0x358, 232, 1, 1, f(Yes, false, "")}, + {0x359, 220, 1, 1, f(Yes, false, "")}, + {0x35b, 230, 1, 1, f(Yes, false, "")}, + {0x35c, 233, 1, 1, f(Yes, false, "")}, + {0x35d, 234, 1, 1, f(Yes, false, "")}, + {0x35f, 233, 1, 1, f(Yes, false, "")}, + {0x360, 234, 1, 1, f(Yes, false, "")}, + {0x362, 233, 1, 1, f(Yes, false, "")}, + {0x363, 230, 1, 1, f(Yes, false, "")}, + {0x370, 0, 0, 0, f(Yes, false, "")}, + {0x374, 0, 0, 0, f(No, false, "ʹ")}, + {0x375, 0, 0, 0, f(Yes, false, "")}, + {0x37a, 0, 0, 1, g(Yes, No, false, false, "", " ͅ")}, + {0x37b, 0, 0, 0, f(Yes, false, "")}, + {0x37e, 0, 0, 0, f(No, false, ";")}, + {0x37f, 0, 0, 0, f(Yes, false, "")}, + {0x384, 0, 0, 1, g(Yes, No, false, false, "", " ́")}, + {0x385, 0, 0, 2, g(Yes, No, false, false, "΅", " ̈́")}, + {0x386, 0, 0, 1, f(Yes, false, "Ά")}, + {0x387, 0, 0, 0, f(No, false, "·")}, + {0x388, 0, 0, 1, f(Yes, false, "Έ")}, + {0x389, 0, 0, 1, f(Yes, false, "Ή")}, + {0x38a, 0, 0, 1, f(Yes, false, "Ί")}, + {0x38b, 0, 0, 0, f(Yes, false, "")}, + {0x38c, 0, 0, 1, f(Yes, false, "Ό")}, + {0x38d, 0, 0, 0, f(Yes, false, "")}, + {0x38e, 0, 0, 1, f(Yes, false, "Ύ")}, + {0x38f, 0, 0, 1, f(Yes, false, "Ώ")}, + {0x390, 0, 0, 2, f(Yes, false, "ΐ")}, + {0x391, 0, 0, 0, f(Yes, true, "")}, + {0x392, 0, 0, 0, f(Yes, false, "")}, + {0x395, 0, 0, 0, f(Yes, true, "")}, + {0x396, 0, 0, 0, f(Yes, false, "")}, + {0x397, 0, 0, 0, f(Yes, true, "")}, + {0x398, 0, 0, 0, f(Yes, false, "")}, + {0x399, 0, 0, 0, f(Yes, true, "")}, + {0x39a, 0, 0, 0, f(Yes, false, "")}, + {0x39f, 0, 0, 0, f(Yes, true, "")}, + {0x3a0, 0, 0, 0, f(Yes, false, "")}, + {0x3a1, 0, 0, 0, f(Yes, true, "")}, + {0x3a2, 0, 0, 0, f(Yes, false, "")}, + {0x3a5, 0, 0, 0, f(Yes, true, "")}, + {0x3a6, 0, 0, 0, f(Yes, false, "")}, + {0x3a9, 0, 0, 0, f(Yes, true, "")}, + {0x3aa, 0, 0, 1, f(Yes, false, "Ϊ")}, + {0x3ab, 0, 0, 1, f(Yes, false, "Ϋ")}, + {0x3ac, 0, 0, 1, f(Yes, true, "ά")}, + {0x3ad, 0, 0, 1, f(Yes, false, "έ")}, + {0x3ae, 0, 0, 1, f(Yes, true, "ή")}, + {0x3af, 0, 0, 1, f(Yes, false, "ί")}, + {0x3b0, 0, 0, 2, f(Yes, false, "ΰ")}, + {0x3b1, 0, 0, 0, f(Yes, true, "")}, + {0x3b2, 0, 0, 0, f(Yes, false, "")}, + {0x3b5, 0, 0, 0, f(Yes, true, "")}, + {0x3b6, 0, 0, 0, f(Yes, false, "")}, + {0x3b7, 0, 0, 0, f(Yes, true, "")}, + {0x3b8, 0, 0, 0, f(Yes, false, "")}, + {0x3b9, 0, 0, 0, f(Yes, true, "")}, + {0x3ba, 0, 0, 0, f(Yes, false, "")}, + {0x3bf, 0, 0, 0, f(Yes, true, "")}, + {0x3c0, 0, 0, 0, f(Yes, false, "")}, + {0x3c1, 0, 0, 0, f(Yes, true, "")}, + {0x3c2, 0, 0, 0, f(Yes, false, "")}, + {0x3c5, 0, 0, 0, f(Yes, true, "")}, + {0x3c6, 0, 0, 0, f(Yes, false, "")}, + {0x3c9, 0, 0, 0, f(Yes, true, "")}, + {0x3ca, 0, 0, 1, f(Yes, true, "ϊ")}, + {0x3cb, 0, 0, 1, f(Yes, true, "ϋ")}, + {0x3cc, 0, 0, 1, f(Yes, false, "ό")}, + {0x3cd, 0, 0, 1, f(Yes, false, "ύ")}, + {0x3ce, 0, 0, 1, f(Yes, true, "ώ")}, + {0x3cf, 0, 0, 0, f(Yes, false, "")}, + {0x3d0, 0, 0, 0, g(Yes, No, false, false, "", "β")}, + {0x3d1, 0, 0, 0, g(Yes, No, false, false, "", "θ")}, + {0x3d2, 0, 0, 0, g(Yes, No, true, false, "", "Υ")}, + {0x3d3, 0, 0, 1, g(Yes, No, false, false, "ϓ", "Ύ")}, + {0x3d4, 0, 0, 1, g(Yes, No, false, false, "ϔ", "Ϋ")}, + {0x3d5, 0, 0, 0, g(Yes, No, false, false, "", "φ")}, + {0x3d6, 0, 0, 0, g(Yes, No, false, false, "", "π")}, + {0x3d7, 0, 0, 0, f(Yes, false, "")}, + {0x3f0, 0, 0, 0, g(Yes, No, false, false, "", "κ")}, + {0x3f1, 0, 0, 0, g(Yes, No, false, false, "", "ρ")}, + {0x3f2, 0, 0, 0, g(Yes, No, false, false, "", "ς")}, + {0x3f3, 0, 0, 0, f(Yes, false, "")}, + {0x3f4, 0, 0, 0, g(Yes, No, false, false, "", "Θ")}, + {0x3f5, 0, 0, 0, g(Yes, No, false, false, "", "ε")}, + {0x3f6, 0, 0, 0, f(Yes, false, "")}, + {0x3f9, 0, 0, 0, g(Yes, No, false, false, "", "Σ")}, + {0x3fa, 0, 0, 0, f(Yes, false, "")}, + {0x400, 0, 0, 1, f(Yes, false, "Ѐ")}, + {0x401, 0, 0, 1, f(Yes, false, "Ё")}, + {0x402, 0, 0, 0, f(Yes, false, "")}, + {0x403, 0, 0, 1, f(Yes, false, "Ѓ")}, + {0x404, 0, 0, 0, f(Yes, false, "")}, + {0x406, 0, 0, 0, f(Yes, true, "")}, + {0x407, 0, 0, 1, f(Yes, false, "Ї")}, + {0x408, 0, 0, 0, f(Yes, false, "")}, + {0x40c, 0, 0, 1, f(Yes, false, "Ќ")}, + {0x40d, 0, 0, 1, f(Yes, false, "Ѝ")}, + {0x40e, 0, 0, 1, f(Yes, false, "Ў")}, + {0x40f, 0, 0, 0, f(Yes, false, "")}, + {0x410, 0, 0, 0, f(Yes, true, "")}, + {0x411, 0, 0, 0, f(Yes, false, "")}, + {0x413, 0, 0, 0, f(Yes, true, "")}, + {0x414, 0, 0, 0, f(Yes, false, "")}, + {0x415, 0, 0, 0, f(Yes, true, "")}, + {0x419, 0, 0, 1, f(Yes, false, "Й")}, + {0x41a, 0, 0, 0, f(Yes, true, "")}, + {0x41b, 0, 0, 0, f(Yes, false, "")}, + {0x41e, 0, 0, 0, f(Yes, true, "")}, + {0x41f, 0, 0, 0, f(Yes, false, "")}, + {0x423, 0, 0, 0, f(Yes, true, "")}, + {0x424, 0, 0, 0, f(Yes, false, "")}, + {0x427, 0, 0, 0, f(Yes, true, "")}, + {0x428, 0, 0, 0, f(Yes, false, "")}, + {0x42b, 0, 0, 0, f(Yes, true, "")}, + {0x42c, 0, 0, 0, f(Yes, false, "")}, + {0x42d, 0, 0, 0, f(Yes, true, "")}, + {0x42e, 0, 0, 0, f(Yes, false, "")}, + {0x430, 0, 0, 0, f(Yes, true, "")}, + {0x431, 0, 0, 0, f(Yes, false, "")}, + {0x433, 0, 0, 0, f(Yes, true, "")}, + {0x434, 0, 0, 0, f(Yes, false, "")}, + {0x435, 0, 0, 0, f(Yes, true, "")}, + {0x439, 0, 0, 1, f(Yes, false, "й")}, + {0x43a, 0, 0, 0, f(Yes, true, "")}, + {0x43b, 0, 0, 0, f(Yes, false, "")}, + {0x43e, 0, 0, 0, f(Yes, true, "")}, + {0x43f, 0, 0, 0, f(Yes, false, "")}, + {0x443, 0, 0, 0, f(Yes, true, "")}, + {0x444, 0, 0, 0, f(Yes, false, "")}, + {0x447, 0, 0, 0, f(Yes, true, "")}, + {0x448, 0, 0, 0, f(Yes, false, "")}, + {0x44b, 0, 0, 0, f(Yes, true, "")}, + {0x44c, 0, 0, 0, f(Yes, false, "")}, + {0x44d, 0, 0, 0, f(Yes, true, "")}, + {0x44e, 0, 0, 0, f(Yes, false, "")}, + {0x450, 0, 0, 1, f(Yes, false, "ѐ")}, + {0x451, 0, 0, 1, f(Yes, false, "ё")}, + {0x452, 0, 0, 0, f(Yes, false, "")}, + {0x453, 0, 0, 1, f(Yes, false, "ѓ")}, + {0x454, 0, 0, 0, f(Yes, false, "")}, + {0x456, 0, 0, 0, f(Yes, true, "")}, + {0x457, 0, 0, 1, f(Yes, false, "ї")}, + {0x458, 0, 0, 0, f(Yes, false, "")}, + {0x45c, 0, 0, 1, f(Yes, false, "ќ")}, + {0x45d, 0, 0, 1, f(Yes, false, "ѝ")}, + {0x45e, 0, 0, 1, f(Yes, false, "ў")}, + {0x45f, 0, 0, 0, f(Yes, false, "")}, + {0x474, 0, 0, 0, f(Yes, true, "")}, + {0x476, 0, 0, 1, f(Yes, false, "Ѷ")}, + {0x477, 0, 0, 1, f(Yes, false, "ѷ")}, + {0x478, 0, 0, 0, f(Yes, false, "")}, + {0x483, 230, 1, 1, f(Yes, false, "")}, + {0x488, 0, 0, 0, f(Yes, false, "")}, + {0x4c1, 0, 0, 1, f(Yes, false, "Ӂ")}, + {0x4c2, 0, 0, 1, f(Yes, false, "ӂ")}, + {0x4c3, 0, 0, 0, f(Yes, false, "")}, + {0x4d0, 0, 0, 1, f(Yes, false, "Ӑ")}, + {0x4d1, 0, 0, 1, f(Yes, false, "ӑ")}, + {0x4d2, 0, 0, 1, f(Yes, false, "Ӓ")}, + {0x4d3, 0, 0, 1, f(Yes, false, "ӓ")}, + {0x4d4, 0, 0, 0, f(Yes, false, "")}, + {0x4d6, 0, 0, 1, f(Yes, false, "Ӗ")}, + {0x4d7, 0, 0, 1, f(Yes, false, "ӗ")}, + {0x4d8, 0, 0, 0, f(Yes, true, "")}, + {0x4da, 0, 0, 1, f(Yes, false, "Ӛ")}, + {0x4db, 0, 0, 1, f(Yes, false, "ӛ")}, + {0x4dc, 0, 0, 1, f(Yes, false, "Ӝ")}, + {0x4dd, 0, 0, 1, f(Yes, false, "ӝ")}, + {0x4de, 0, 0, 1, f(Yes, false, "Ӟ")}, + {0x4df, 0, 0, 1, f(Yes, false, "ӟ")}, + {0x4e0, 0, 0, 0, f(Yes, false, "")}, + {0x4e2, 0, 0, 1, f(Yes, false, "Ӣ")}, + {0x4e3, 0, 0, 1, f(Yes, false, "ӣ")}, + {0x4e4, 0, 0, 1, f(Yes, false, "Ӥ")}, + {0x4e5, 0, 0, 1, f(Yes, false, "ӥ")}, + {0x4e6, 0, 0, 1, f(Yes, false, "Ӧ")}, + {0x4e7, 0, 0, 1, f(Yes, false, "ӧ")}, + {0x4e8, 0, 0, 0, f(Yes, true, "")}, + {0x4ea, 0, 0, 1, f(Yes, false, "Ӫ")}, + {0x4eb, 0, 0, 1, f(Yes, false, "ӫ")}, + {0x4ec, 0, 0, 1, f(Yes, false, "Ӭ")}, + {0x4ed, 0, 0, 1, f(Yes, false, "ӭ")}, + {0x4ee, 0, 0, 1, f(Yes, false, "Ӯ")}, + {0x4ef, 0, 0, 1, f(Yes, false, "ӯ")}, + {0x4f0, 0, 0, 1, f(Yes, false, "Ӱ")}, + {0x4f1, 0, 0, 1, f(Yes, false, "ӱ")}, + {0x4f2, 0, 0, 1, f(Yes, false, "Ӳ")}, + {0x4f3, 0, 0, 1, f(Yes, false, "ӳ")}, + {0x4f4, 0, 0, 1, f(Yes, false, "Ӵ")}, + {0x4f5, 0, 0, 1, f(Yes, false, "ӵ")}, + {0x4f6, 0, 0, 0, f(Yes, false, "")}, + {0x4f8, 0, 0, 1, f(Yes, false, "Ӹ")}, + {0x4f9, 0, 0, 1, f(Yes, false, "ӹ")}, + {0x4fa, 0, 0, 0, f(Yes, false, "")}, + {0x587, 0, 0, 0, g(Yes, No, false, false, "", "եւ")}, + {0x588, 0, 0, 0, f(Yes, false, "")}, + {0x591, 220, 1, 1, f(Yes, false, "")}, + {0x592, 230, 1, 1, f(Yes, false, "")}, + {0x596, 220, 1, 1, f(Yes, false, "")}, + {0x597, 230, 1, 1, f(Yes, false, "")}, + {0x59a, 222, 1, 1, f(Yes, false, "")}, + {0x59b, 220, 1, 1, f(Yes, false, "")}, + {0x59c, 230, 1, 1, f(Yes, false, "")}, + {0x5a2, 220, 1, 1, f(Yes, false, "")}, + {0x5a8, 230, 1, 1, f(Yes, false, "")}, + {0x5aa, 220, 1, 1, f(Yes, false, "")}, + {0x5ab, 230, 1, 1, f(Yes, false, "")}, + {0x5ad, 222, 1, 1, f(Yes, false, "")}, + {0x5ae, 228, 1, 1, f(Yes, false, "")}, + {0x5af, 230, 1, 1, f(Yes, false, "")}, + {0x5b0, 10, 1, 1, f(Yes, false, "")}, + {0x5b1, 11, 1, 1, f(Yes, false, "")}, + {0x5b2, 12, 1, 1, f(Yes, false, "")}, + {0x5b3, 13, 1, 1, f(Yes, false, "")}, + {0x5b4, 14, 1, 1, f(Yes, false, "")}, + {0x5b5, 15, 1, 1, f(Yes, false, "")}, + {0x5b6, 16, 1, 1, f(Yes, false, "")}, + {0x5b7, 17, 1, 1, f(Yes, false, "")}, + {0x5b8, 18, 1, 1, f(Yes, false, "")}, + {0x5b9, 19, 1, 1, f(Yes, false, "")}, + {0x5bb, 20, 1, 1, f(Yes, false, "")}, + {0x5bc, 21, 1, 1, f(Yes, false, "")}, + {0x5bd, 22, 1, 1, f(Yes, false, "")}, + {0x5be, 0, 0, 0, f(Yes, false, "")}, + {0x5bf, 23, 1, 1, f(Yes, false, "")}, + {0x5c0, 0, 0, 0, f(Yes, false, "")}, + {0x5c1, 24, 1, 1, f(Yes, false, "")}, + {0x5c2, 25, 1, 1, f(Yes, false, "")}, + {0x5c3, 0, 0, 0, f(Yes, false, "")}, + {0x5c4, 230, 1, 1, f(Yes, false, "")}, + {0x5c5, 220, 1, 1, f(Yes, false, "")}, + {0x5c6, 0, 0, 0, f(Yes, false, "")}, + {0x5c7, 18, 1, 1, f(Yes, false, "")}, + {0x5c8, 0, 0, 0, f(Yes, false, "")}, + {0x610, 230, 1, 1, f(Yes, false, "")}, + {0x618, 30, 1, 1, f(Yes, false, "")}, + {0x619, 31, 1, 1, f(Yes, false, "")}, + {0x61a, 32, 1, 1, f(Yes, false, "")}, + {0x61b, 0, 0, 0, f(Yes, false, "")}, + {0x622, 0, 0, 1, f(Yes, false, "آ")}, + {0x623, 0, 0, 1, f(Yes, false, "أ")}, + {0x624, 0, 0, 1, f(Yes, false, "ؤ")}, + {0x625, 0, 0, 1, f(Yes, false, "إ")}, + {0x626, 0, 0, 1, f(Yes, false, "ئ")}, + {0x627, 0, 0, 0, f(Yes, true, "")}, + {0x628, 0, 0, 0, f(Yes, false, "")}, + {0x648, 0, 0, 0, f(Yes, true, "")}, + {0x649, 0, 0, 0, f(Yes, false, "")}, + {0x64a, 0, 0, 0, f(Yes, true, "")}, + {0x64b, 27, 1, 1, f(Yes, false, "")}, + {0x64c, 28, 1, 1, f(Yes, false, "")}, + {0x64d, 29, 1, 1, f(Yes, false, "")}, + {0x64e, 30, 1, 1, f(Yes, false, "")}, + {0x64f, 31, 1, 1, f(Yes, false, "")}, + {0x650, 32, 1, 1, f(Yes, false, "")}, + {0x651, 33, 1, 1, f(Yes, false, "")}, + {0x652, 34, 1, 1, f(Yes, false, "")}, + {0x653, 230, 1, 1, f(Maybe, false, "")}, + {0x655, 220, 1, 1, f(Maybe, false, "")}, + {0x656, 220, 1, 1, f(Yes, false, "")}, + {0x657, 230, 1, 1, f(Yes, false, "")}, + {0x65c, 220, 1, 1, f(Yes, false, "")}, + {0x65d, 230, 1, 1, f(Yes, false, "")}, + {0x65f, 220, 1, 1, f(Yes, false, "")}, + {0x660, 0, 0, 0, f(Yes, false, "")}, + {0x670, 35, 1, 1, f(Yes, false, "")}, + {0x671, 0, 0, 0, f(Yes, false, "")}, + {0x675, 0, 0, 0, g(Yes, No, false, false, "", "اٴ")}, + {0x676, 0, 0, 0, g(Yes, No, false, false, "", "وٴ")}, + {0x677, 0, 0, 0, g(Yes, No, false, false, "", "ۇٴ")}, + {0x678, 0, 0, 0, g(Yes, No, false, false, "", "يٴ")}, + {0x679, 0, 0, 0, f(Yes, false, "")}, + {0x6c0, 0, 0, 1, f(Yes, false, "ۀ")}, + {0x6c1, 0, 0, 0, f(Yes, true, "")}, + {0x6c2, 0, 0, 1, f(Yes, false, "ۂ")}, + {0x6c3, 0, 0, 0, f(Yes, false, "")}, + {0x6d2, 0, 0, 0, f(Yes, true, "")}, + {0x6d3, 0, 0, 1, f(Yes, false, "ۓ")}, + {0x6d4, 0, 0, 0, f(Yes, false, "")}, + {0x6d5, 0, 0, 0, f(Yes, true, "")}, + {0x6d6, 230, 1, 1, f(Yes, false, "")}, + {0x6dd, 0, 0, 0, f(Yes, false, "")}, + {0x6df, 230, 1, 1, f(Yes, false, "")}, + {0x6e3, 220, 1, 1, f(Yes, false, "")}, + {0x6e4, 230, 1, 1, f(Yes, false, "")}, + {0x6e5, 0, 0, 0, f(Yes, false, "")}, + {0x6e7, 230, 1, 1, f(Yes, false, "")}, + {0x6e9, 0, 0, 0, f(Yes, false, "")}, + {0x6ea, 220, 1, 1, f(Yes, false, "")}, + {0x6eb, 230, 1, 1, f(Yes, false, "")}, + {0x6ed, 220, 1, 1, f(Yes, false, "")}, + {0x6ee, 0, 0, 0, f(Yes, false, "")}, + {0x711, 36, 1, 1, f(Yes, false, "")}, + {0x712, 0, 0, 0, f(Yes, false, "")}, + {0x730, 230, 1, 1, f(Yes, false, "")}, + {0x731, 220, 1, 1, f(Yes, false, "")}, + {0x732, 230, 1, 1, f(Yes, false, "")}, + {0x734, 220, 1, 1, f(Yes, false, "")}, + {0x735, 230, 1, 1, f(Yes, false, "")}, + {0x737, 220, 1, 1, f(Yes, false, "")}, + {0x73a, 230, 1, 1, f(Yes, false, "")}, + {0x73b, 220, 1, 1, f(Yes, false, "")}, + {0x73d, 230, 1, 1, f(Yes, false, "")}, + {0x73e, 220, 1, 1, f(Yes, false, "")}, + {0x73f, 230, 1, 1, f(Yes, false, "")}, + {0x742, 220, 1, 1, f(Yes, false, "")}, + {0x743, 230, 1, 1, f(Yes, false, "")}, + {0x744, 220, 1, 1, f(Yes, false, "")}, + {0x745, 230, 1, 1, f(Yes, false, "")}, + {0x746, 220, 1, 1, f(Yes, false, "")}, + {0x747, 230, 1, 1, f(Yes, false, "")}, + {0x748, 220, 1, 1, f(Yes, false, "")}, + {0x749, 230, 1, 1, f(Yes, false, "")}, + {0x74b, 0, 0, 0, f(Yes, false, "")}, + {0x7eb, 230, 1, 1, f(Yes, false, "")}, + {0x7f2, 220, 1, 1, f(Yes, false, "")}, + {0x7f3, 230, 1, 1, f(Yes, false, "")}, + {0x7f4, 0, 0, 0, f(Yes, false, "")}, + {0x816, 230, 1, 1, f(Yes, false, "")}, + {0x81a, 0, 0, 0, f(Yes, false, "")}, + {0x81b, 230, 1, 1, f(Yes, false, "")}, + {0x824, 0, 0, 0, f(Yes, false, "")}, + {0x825, 230, 1, 1, f(Yes, false, "")}, + {0x828, 0, 0, 0, f(Yes, false, "")}, + {0x829, 230, 1, 1, f(Yes, false, "")}, + {0x82e, 0, 0, 0, f(Yes, false, "")}, + {0x859, 220, 1, 1, f(Yes, false, "")}, + {0x85c, 0, 0, 0, f(Yes, false, "")}, + {0x8d4, 230, 1, 1, f(Yes, false, "")}, + {0x8e2, 0, 0, 0, f(Yes, false, "")}, + {0x8e3, 220, 1, 1, f(Yes, false, "")}, + {0x8e4, 230, 1, 1, f(Yes, false, "")}, + {0x8e6, 220, 1, 1, f(Yes, false, "")}, + {0x8e7, 230, 1, 1, f(Yes, false, "")}, + {0x8e9, 220, 1, 1, f(Yes, false, "")}, + {0x8ea, 230, 1, 1, f(Yes, false, "")}, + {0x8ed, 220, 1, 1, f(Yes, false, "")}, + {0x8f0, 27, 1, 1, f(Yes, false, "")}, + {0x8f1, 28, 1, 1, f(Yes, false, "")}, + {0x8f2, 29, 1, 1, f(Yes, false, "")}, + {0x8f3, 230, 1, 1, f(Yes, false, "")}, + {0x8f6, 220, 1, 1, f(Yes, false, "")}, + {0x8f7, 230, 1, 1, f(Yes, false, "")}, + {0x8f9, 220, 1, 1, f(Yes, false, "")}, + {0x8fb, 230, 1, 1, f(Yes, false, "")}, + {0x900, 0, 0, 0, f(Yes, false, "")}, + {0x928, 0, 0, 0, f(Yes, true, "")}, + {0x929, 0, 0, 1, f(Yes, false, "ऩ")}, + {0x92a, 0, 0, 0, f(Yes, false, "")}, + {0x930, 0, 0, 0, f(Yes, true, "")}, + {0x931, 0, 0, 1, f(Yes, false, "ऱ")}, + {0x932, 0, 0, 0, f(Yes, false, "")}, + {0x933, 0, 0, 0, f(Yes, true, "")}, + {0x934, 0, 0, 1, f(Yes, false, "ऴ")}, + {0x935, 0, 0, 0, f(Yes, false, "")}, + {0x93c, 7, 1, 1, f(Maybe, false, "")}, + {0x93d, 0, 0, 0, f(Yes, false, "")}, + {0x94d, 9, 1, 1, f(Yes, false, "")}, + {0x94e, 0, 0, 0, f(Yes, false, "")}, + {0x951, 230, 1, 1, f(Yes, false, "")}, + {0x952, 220, 1, 1, f(Yes, false, "")}, + {0x953, 230, 1, 1, f(Yes, false, "")}, + {0x955, 0, 0, 0, f(Yes, false, "")}, + {0x958, 0, 0, 1, f(No, false, "क़")}, + {0x959, 0, 0, 1, f(No, false, "ख़")}, + {0x95a, 0, 0, 1, f(No, false, "ग़")}, + {0x95b, 0, 0, 1, f(No, false, "ज़")}, + {0x95c, 0, 0, 1, f(No, false, "ड़")}, + {0x95d, 0, 0, 1, f(No, false, "ढ़")}, + {0x95e, 0, 0, 1, f(No, false, "फ़")}, + {0x95f, 0, 0, 1, f(No, false, "य़")}, + {0x960, 0, 0, 0, f(Yes, false, "")}, + {0x9bc, 7, 1, 1, f(Yes, false, "")}, + {0x9bd, 0, 0, 0, f(Yes, false, "")}, + {0x9be, 0, 1, 1, f(Maybe, false, "")}, + {0x9bf, 0, 0, 0, f(Yes, false, "")}, + {0x9c7, 0, 0, 0, f(Yes, true, "")}, + {0x9c8, 0, 0, 0, f(Yes, false, "")}, + {0x9cb, 0, 0, 1, f(Yes, false, "ো")}, + {0x9cc, 0, 0, 1, f(Yes, false, "ৌ")}, + {0x9cd, 9, 1, 1, f(Yes, false, "")}, + {0x9ce, 0, 0, 0, f(Yes, false, "")}, + {0x9d7, 0, 1, 1, f(Maybe, false, "")}, + {0x9d8, 0, 0, 0, f(Yes, false, "")}, + {0x9dc, 0, 0, 1, f(No, false, "ড়")}, + {0x9dd, 0, 0, 1, f(No, false, "ঢ়")}, + {0x9de, 0, 0, 0, f(Yes, false, "")}, + {0x9df, 0, 0, 1, f(No, false, "য়")}, + {0x9e0, 0, 0, 0, f(Yes, false, "")}, + {0xa33, 0, 0, 1, f(No, false, "ਲ਼")}, + {0xa34, 0, 0, 0, f(Yes, false, "")}, + {0xa36, 0, 0, 1, f(No, false, "ਸ਼")}, + {0xa37, 0, 0, 0, f(Yes, false, "")}, + {0xa3c, 7, 1, 1, f(Yes, false, "")}, + {0xa3d, 0, 0, 0, f(Yes, false, "")}, + {0xa4d, 9, 1, 1, f(Yes, false, "")}, + {0xa4e, 0, 0, 0, f(Yes, false, "")}, + {0xa59, 0, 0, 1, f(No, false, "ਖ਼")}, + {0xa5a, 0, 0, 1, f(No, false, "ਗ਼")}, + {0xa5b, 0, 0, 1, f(No, false, "ਜ਼")}, + {0xa5c, 0, 0, 0, f(Yes, false, "")}, + {0xa5e, 0, 0, 1, f(No, false, "ਫ਼")}, + {0xa5f, 0, 0, 0, f(Yes, false, "")}, + {0xabc, 7, 1, 1, f(Yes, false, "")}, + {0xabd, 0, 0, 0, f(Yes, false, "")}, + {0xacd, 9, 1, 1, f(Yes, false, "")}, + {0xace, 0, 0, 0, f(Yes, false, "")}, + {0xb3c, 7, 1, 1, f(Yes, false, "")}, + {0xb3d, 0, 0, 0, f(Yes, false, "")}, + {0xb3e, 0, 1, 1, f(Maybe, false, "")}, + {0xb3f, 0, 0, 0, f(Yes, false, "")}, + {0xb47, 0, 0, 0, f(Yes, true, "")}, + {0xb48, 0, 0, 1, f(Yes, false, "ୈ")}, + {0xb49, 0, 0, 0, f(Yes, false, "")}, + {0xb4b, 0, 0, 1, f(Yes, false, "ୋ")}, + {0xb4c, 0, 0, 1, f(Yes, false, "ୌ")}, + {0xb4d, 9, 1, 1, f(Yes, false, "")}, + {0xb4e, 0, 0, 0, f(Yes, false, "")}, + {0xb56, 0, 1, 1, f(Maybe, false, "")}, + {0xb58, 0, 0, 0, f(Yes, false, "")}, + {0xb5c, 0, 0, 1, f(No, false, "ଡ଼")}, + {0xb5d, 0, 0, 1, f(No, false, "ଢ଼")}, + {0xb5e, 0, 0, 0, f(Yes, false, "")}, + {0xb92, 0, 0, 0, f(Yes, true, "")}, + {0xb93, 0, 0, 0, f(Yes, false, "")}, + {0xb94, 0, 0, 1, f(Yes, false, "ஔ")}, + {0xb95, 0, 0, 0, f(Yes, false, "")}, + {0xbbe, 0, 1, 1, f(Maybe, false, "")}, + {0xbbf, 0, 0, 0, f(Yes, false, "")}, + {0xbc6, 0, 0, 0, f(Yes, true, "")}, + {0xbc8, 0, 0, 0, f(Yes, false, "")}, + {0xbca, 0, 0, 1, f(Yes, false, "ொ")}, + {0xbcb, 0, 0, 1, f(Yes, false, "ோ")}, + {0xbcc, 0, 0, 1, f(Yes, false, "ௌ")}, + {0xbcd, 9, 1, 1, f(Yes, false, "")}, + {0xbce, 0, 0, 0, f(Yes, false, "")}, + {0xbd7, 0, 1, 1, f(Maybe, false, "")}, + {0xbd8, 0, 0, 0, f(Yes, false, "")}, + {0xc46, 0, 0, 0, f(Yes, true, "")}, + {0xc47, 0, 0, 0, f(Yes, false, "")}, + {0xc48, 0, 0, 1, f(Yes, false, "ై")}, + {0xc49, 0, 0, 0, f(Yes, false, "")}, + {0xc4d, 9, 1, 1, f(Yes, false, "")}, + {0xc4e, 0, 0, 0, f(Yes, false, "")}, + {0xc55, 84, 1, 1, f(Yes, false, "")}, + {0xc56, 91, 1, 1, f(Maybe, false, "")}, + {0xc57, 0, 0, 0, f(Yes, false, "")}, + {0xcbc, 7, 1, 1, f(Yes, false, "")}, + {0xcbd, 0, 0, 0, f(Yes, false, "")}, + {0xcbf, 0, 0, 0, f(Yes, true, "")}, + {0xcc0, 0, 0, 1, f(Yes, false, "ೀ")}, + {0xcc1, 0, 0, 0, f(Yes, false, "")}, + {0xcc2, 0, 1, 1, f(Maybe, false, "")}, + {0xcc3, 0, 0, 0, f(Yes, false, "")}, + {0xcc6, 0, 0, 0, f(Yes, true, "")}, + {0xcc7, 0, 0, 1, f(Yes, false, "ೇ")}, + {0xcc8, 0, 0, 1, f(Yes, false, "ೈ")}, + {0xcc9, 0, 0, 0, f(Yes, false, "")}, + {0xcca, 0, 0, 1, f(Yes, true, "ೊ")}, + {0xccb, 0, 0, 2, f(Yes, false, "ೋ")}, + {0xccc, 0, 0, 0, f(Yes, false, "")}, + {0xccd, 9, 1, 1, f(Yes, false, "")}, + {0xcce, 0, 0, 0, f(Yes, false, "")}, + {0xcd5, 0, 1, 1, f(Maybe, false, "")}, + {0xcd7, 0, 0, 0, f(Yes, false, "")}, + {0xd3e, 0, 1, 1, f(Maybe, false, "")}, + {0xd3f, 0, 0, 0, f(Yes, false, "")}, + {0xd46, 0, 0, 0, f(Yes, true, "")}, + {0xd48, 0, 0, 0, f(Yes, false, "")}, + {0xd4a, 0, 0, 1, f(Yes, false, "ൊ")}, + {0xd4b, 0, 0, 1, f(Yes, false, "ോ")}, + {0xd4c, 0, 0, 1, f(Yes, false, "ൌ")}, + {0xd4d, 9, 1, 1, f(Yes, false, "")}, + {0xd4e, 0, 0, 0, f(Yes, false, "")}, + {0xd57, 0, 1, 1, f(Maybe, false, "")}, + {0xd58, 0, 0, 0, f(Yes, false, "")}, + {0xdca, 9, 1, 1, f(Maybe, false, "")}, + {0xdcb, 0, 0, 0, f(Yes, false, "")}, + {0xdcf, 0, 1, 1, f(Maybe, false, "")}, + {0xdd0, 0, 0, 0, f(Yes, false, "")}, + {0xdd9, 0, 0, 0, f(Yes, true, "")}, + {0xdda, 0, 0, 1, f(Yes, false, "ේ")}, + {0xddb, 0, 0, 0, f(Yes, false, "")}, + {0xddc, 0, 0, 1, f(Yes, true, "ො")}, + {0xddd, 0, 0, 2, f(Yes, false, "ෝ")}, + {0xdde, 0, 0, 1, f(Yes, false, "ෞ")}, + {0xddf, 0, 1, 1, f(Maybe, false, "")}, + {0xde0, 0, 0, 0, f(Yes, false, "")}, + {0xe33, 0, 0, 0, g(Yes, No, false, false, "", "ํา")}, + {0xe34, 0, 0, 0, f(Yes, false, "")}, + {0xe38, 103, 1, 1, f(Yes, false, "")}, + {0xe3a, 9, 1, 1, f(Yes, false, "")}, + {0xe3b, 0, 0, 0, f(Yes, false, "")}, + {0xe48, 107, 1, 1, f(Yes, false, "")}, + {0xe4c, 0, 0, 0, f(Yes, false, "")}, + {0xeb3, 0, 0, 0, g(Yes, No, false, false, "", "ໍາ")}, + {0xeb4, 0, 0, 0, f(Yes, false, "")}, + {0xeb8, 118, 1, 1, f(Yes, false, "")}, + {0xeba, 0, 0, 0, f(Yes, false, "")}, + {0xec8, 122, 1, 1, f(Yes, false, "")}, + {0xecc, 0, 0, 0, f(Yes, false, "")}, + {0xedc, 0, 0, 0, g(Yes, No, false, false, "", "ຫນ")}, + {0xedd, 0, 0, 0, g(Yes, No, false, false, "", "ຫມ")}, + {0xede, 0, 0, 0, f(Yes, false, "")}, + {0xf0c, 0, 0, 0, g(Yes, No, false, false, "", "་")}, + {0xf0d, 0, 0, 0, f(Yes, false, "")}, + {0xf18, 220, 1, 1, f(Yes, false, "")}, + {0xf1a, 0, 0, 0, f(Yes, false, "")}, + {0xf35, 220, 1, 1, f(Yes, false, "")}, + {0xf36, 0, 0, 0, f(Yes, false, "")}, + {0xf37, 220, 1, 1, f(Yes, false, "")}, + {0xf38, 0, 0, 0, f(Yes, false, "")}, + {0xf39, 216, 1, 1, f(Yes, false, "")}, + {0xf3a, 0, 0, 0, f(Yes, false, "")}, + {0xf43, 0, 0, 0, f(No, false, "གྷ")}, + {0xf44, 0, 0, 0, f(Yes, false, "")}, + {0xf4d, 0, 0, 0, f(No, false, "ཌྷ")}, + {0xf4e, 0, 0, 0, f(Yes, false, "")}, + {0xf52, 0, 0, 0, f(No, false, "དྷ")}, + {0xf53, 0, 0, 0, f(Yes, false, "")}, + {0xf57, 0, 0, 0, f(No, false, "བྷ")}, + {0xf58, 0, 0, 0, f(Yes, false, "")}, + {0xf5c, 0, 0, 0, f(No, false, "ཛྷ")}, + {0xf5d, 0, 0, 0, f(Yes, false, "")}, + {0xf69, 0, 0, 0, f(No, false, "ཀྵ")}, + {0xf6a, 0, 0, 0, f(Yes, false, "")}, + {0xf71, 129, 1, 1, f(Yes, false, "")}, + {0xf72, 130, 1, 1, f(Yes, false, "")}, + {0xf73, 0, 2, 2, f(No, false, "ཱི")}, + {0xf74, 132, 1, 1, f(Yes, false, "")}, + {0xf75, 0, 2, 2, f(No, false, "ཱུ")}, + {0xf76, 0, 0, 1, f(No, false, "ྲྀ")}, + {0xf77, 0, 0, 2, g(Yes, No, false, false, "", "ྲཱྀ")}, + {0xf78, 0, 0, 1, f(No, false, "ླྀ")}, + {0xf79, 0, 0, 2, g(Yes, No, false, false, "", "ླཱྀ")}, + {0xf7a, 130, 1, 1, f(Yes, false, "")}, + {0xf7e, 0, 0, 0, f(Yes, false, "")}, + {0xf80, 130, 1, 1, f(Yes, false, "")}, + {0xf81, 0, 2, 2, f(No, false, "ཱྀ")}, + {0xf82, 230, 1, 1, f(Yes, false, "")}, + {0xf84, 9, 1, 1, f(Yes, false, "")}, + {0xf85, 0, 0, 0, f(Yes, false, "")}, + {0xf86, 230, 1, 1, f(Yes, false, "")}, + {0xf88, 0, 0, 0, f(Yes, false, "")}, + {0xf93, 0, 0, 0, f(No, false, "ྒྷ")}, + {0xf94, 0, 0, 0, f(Yes, false, "")}, + {0xf9d, 0, 0, 0, f(No, false, "ྜྷ")}, + {0xf9e, 0, 0, 0, f(Yes, false, "")}, + {0xfa2, 0, 0, 0, f(No, false, "ྡྷ")}, + {0xfa3, 0, 0, 0, f(Yes, false, "")}, + {0xfa7, 0, 0, 0, f(No, false, "ྦྷ")}, + {0xfa8, 0, 0, 0, f(Yes, false, "")}, + {0xfac, 0, 0, 0, f(No, false, "ྫྷ")}, + {0xfad, 0, 0, 0, f(Yes, false, "")}, + {0xfb9, 0, 0, 0, f(No, false, "ྐྵ")}, + {0xfba, 0, 0, 0, f(Yes, false, "")}, + {0xfc6, 220, 1, 1, f(Yes, false, "")}, + {0xfc7, 0, 0, 0, f(Yes, false, "")}, + {0x1025, 0, 0, 0, f(Yes, true, "")}, + {0x1026, 0, 0, 1, f(Yes, false, "ဦ")}, + {0x1027, 0, 0, 0, f(Yes, false, "")}, + {0x102e, 0, 1, 1, f(Maybe, false, "")}, + {0x102f, 0, 0, 0, f(Yes, false, "")}, + {0x1037, 7, 1, 1, f(Yes, false, "")}, + {0x1038, 0, 0, 0, f(Yes, false, "")}, + {0x1039, 9, 1, 1, f(Yes, false, "")}, + {0x103b, 0, 0, 0, f(Yes, false, "")}, + {0x108d, 220, 1, 1, f(Yes, false, "")}, + {0x108e, 0, 0, 0, f(Yes, false, "")}, + {0x10fc, 0, 0, 0, g(Yes, No, false, false, "", "ნ")}, + {0x10fd, 0, 0, 0, f(Yes, false, "")}, + {0x1100, 0, 0, 0, f(Yes, true, "")}, + {0x1113, 0, 0, 0, f(Yes, false, "")}, + {0x1161, 0, 1, 1, f(Maybe, true, "")}, + {0x1176, 0, 0, 0, f(Yes, false, "")}, + {0x11a8, 0, 1, 1, f(Maybe, false, "")}, + {0x11c3, 0, 0, 0, f(Yes, false, "")}, + {0x135d, 230, 1, 1, f(Yes, false, "")}, + {0x1360, 0, 0, 0, f(Yes, false, "")}, + {0x1714, 9, 1, 1, f(Yes, false, "")}, + {0x1715, 0, 0, 0, f(Yes, false, "")}, + {0x1734, 9, 1, 1, f(Yes, false, "")}, + {0x1735, 0, 0, 0, f(Yes, false, "")}, + {0x17d2, 9, 1, 1, f(Yes, false, "")}, + {0x17d3, 0, 0, 0, f(Yes, false, "")}, + {0x17dd, 230, 1, 1, f(Yes, false, "")}, + {0x17de, 0, 0, 0, f(Yes, false, "")}, + {0x18a9, 228, 1, 1, f(Yes, false, "")}, + {0x18aa, 0, 0, 0, f(Yes, false, "")}, + {0x1939, 222, 1, 1, f(Yes, false, "")}, + {0x193a, 230, 1, 1, f(Yes, false, "")}, + {0x193b, 220, 1, 1, f(Yes, false, "")}, + {0x193c, 0, 0, 0, f(Yes, false, "")}, + {0x1a17, 230, 1, 1, f(Yes, false, "")}, + {0x1a18, 220, 1, 1, f(Yes, false, "")}, + {0x1a19, 0, 0, 0, f(Yes, false, "")}, + {0x1a60, 9, 1, 1, f(Yes, false, "")}, + {0x1a61, 0, 0, 0, f(Yes, false, "")}, + {0x1a75, 230, 1, 1, f(Yes, false, "")}, + {0x1a7d, 0, 0, 0, f(Yes, false, "")}, + {0x1a7f, 220, 1, 1, f(Yes, false, "")}, + {0x1a80, 0, 0, 0, f(Yes, false, "")}, + {0x1ab0, 230, 1, 1, f(Yes, false, "")}, + {0x1ab5, 220, 1, 1, f(Yes, false, "")}, + {0x1abb, 230, 1, 1, f(Yes, false, "")}, + {0x1abd, 220, 1, 1, f(Yes, false, "")}, + {0x1abe, 0, 0, 0, f(Yes, false, "")}, + {0x1b05, 0, 0, 0, f(Yes, true, "")}, + {0x1b06, 0, 0, 1, f(Yes, false, "ᬆ")}, + {0x1b07, 0, 0, 0, f(Yes, true, "")}, + {0x1b08, 0, 0, 1, f(Yes, false, "ᬈ")}, + {0x1b09, 0, 0, 0, f(Yes, true, "")}, + {0x1b0a, 0, 0, 1, f(Yes, false, "ᬊ")}, + {0x1b0b, 0, 0, 0, f(Yes, true, "")}, + {0x1b0c, 0, 0, 1, f(Yes, false, "ᬌ")}, + {0x1b0d, 0, 0, 0, f(Yes, true, "")}, + {0x1b0e, 0, 0, 1, f(Yes, false, "ᬎ")}, + {0x1b0f, 0, 0, 0, f(Yes, false, "")}, + {0x1b11, 0, 0, 0, f(Yes, true, "")}, + {0x1b12, 0, 0, 1, f(Yes, false, "ᬒ")}, + {0x1b13, 0, 0, 0, f(Yes, false, "")}, + {0x1b34, 7, 1, 1, f(Yes, false, "")}, + {0x1b35, 0, 1, 1, f(Maybe, false, "")}, + {0x1b36, 0, 0, 0, f(Yes, false, "")}, + {0x1b3a, 0, 0, 0, f(Yes, true, "")}, + {0x1b3b, 0, 0, 1, f(Yes, false, "ᬻ")}, + {0x1b3c, 0, 0, 0, f(Yes, true, "")}, + {0x1b3d, 0, 0, 1, f(Yes, false, "ᬽ")}, + {0x1b3e, 0, 0, 0, f(Yes, true, "")}, + {0x1b40, 0, 0, 1, f(Yes, false, "ᭀ")}, + {0x1b41, 0, 0, 1, f(Yes, false, "ᭁ")}, + {0x1b42, 0, 0, 0, f(Yes, true, "")}, + {0x1b43, 0, 0, 1, f(Yes, false, "ᭃ")}, + {0x1b44, 9, 1, 1, f(Yes, false, "")}, + {0x1b45, 0, 0, 0, f(Yes, false, "")}, + {0x1b6b, 230, 1, 1, f(Yes, false, "")}, + {0x1b6c, 220, 1, 1, f(Yes, false, "")}, + {0x1b6d, 230, 1, 1, f(Yes, false, "")}, + {0x1b74, 0, 0, 0, f(Yes, false, "")}, + {0x1baa, 9, 1, 1, f(Yes, false, "")}, + {0x1bac, 0, 0, 0, f(Yes, false, "")}, + {0x1be6, 7, 1, 1, f(Yes, false, "")}, + {0x1be7, 0, 0, 0, f(Yes, false, "")}, + {0x1bf2, 9, 1, 1, f(Yes, false, "")}, + {0x1bf4, 0, 0, 0, f(Yes, false, "")}, + {0x1c37, 7, 1, 1, f(Yes, false, "")}, + {0x1c38, 0, 0, 0, f(Yes, false, "")}, + {0x1cd0, 230, 1, 1, f(Yes, false, "")}, + {0x1cd3, 0, 0, 0, f(Yes, false, "")}, + {0x1cd4, 1, 1, 1, f(Yes, false, "")}, + {0x1cd5, 220, 1, 1, f(Yes, false, "")}, + {0x1cda, 230, 1, 1, f(Yes, false, "")}, + {0x1cdc, 220, 1, 1, f(Yes, false, "")}, + {0x1ce0, 230, 1, 1, f(Yes, false, "")}, + {0x1ce1, 0, 0, 0, f(Yes, false, "")}, + {0x1ce2, 1, 1, 1, f(Yes, false, "")}, + {0x1ce9, 0, 0, 0, f(Yes, false, "")}, + {0x1ced, 220, 1, 1, f(Yes, false, "")}, + {0x1cee, 0, 0, 0, f(Yes, false, "")}, + {0x1cf4, 230, 1, 1, f(Yes, false, "")}, + {0x1cf5, 0, 0, 0, f(Yes, false, "")}, + {0x1cf8, 230, 1, 1, f(Yes, false, "")}, + {0x1cfa, 0, 0, 0, f(Yes, false, "")}, + {0x1d2c, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0x1d2d, 0, 0, 0, g(Yes, No, false, false, "", "Æ")}, + {0x1d2e, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0x1d2f, 0, 0, 0, f(Yes, false, "")}, + {0x1d30, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x1d31, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0x1d32, 0, 0, 0, g(Yes, No, false, false, "", "Ǝ")}, + {0x1d33, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0x1d34, 0, 0, 0, g(Yes, No, false, false, "", "H")}, + {0x1d35, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0x1d36, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0x1d37, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0x1d38, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x1d39, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x1d3a, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0x1d3b, 0, 0, 0, f(Yes, false, "")}, + {0x1d3c, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0x1d3d, 0, 0, 0, g(Yes, No, false, false, "", "Ȣ")}, + {0x1d3e, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0x1d3f, 0, 0, 0, g(Yes, No, false, false, "", "R")}, + {0x1d40, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0x1d41, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0x1d42, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0x1d43, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0x1d44, 0, 0, 0, g(Yes, No, false, false, "", "ɐ")}, + {0x1d45, 0, 0, 0, g(Yes, No, false, false, "", "ɑ")}, + {0x1d46, 0, 0, 0, g(Yes, No, false, false, "", "ᴂ")}, + {0x1d47, 0, 0, 0, g(Yes, No, false, false, "", "b")}, + {0x1d48, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x1d49, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x1d4a, 0, 0, 0, g(Yes, No, false, false, "", "ə")}, + {0x1d4b, 0, 0, 0, g(Yes, No, false, false, "", "ɛ")}, + {0x1d4c, 0, 0, 0, g(Yes, No, false, false, "", "ɜ")}, + {0x1d4d, 0, 0, 0, g(Yes, No, false, false, "", "g")}, + {0x1d4e, 0, 0, 0, f(Yes, false, "")}, + {0x1d4f, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0x1d50, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x1d51, 0, 0, 0, g(Yes, No, false, false, "", "ŋ")}, + {0x1d52, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0x1d53, 0, 0, 0, g(Yes, No, false, false, "", "ɔ")}, + {0x1d54, 0, 0, 0, g(Yes, No, false, false, "", "ᴖ")}, + {0x1d55, 0, 0, 0, g(Yes, No, false, false, "", "ᴗ")}, + {0x1d56, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0x1d57, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0x1d58, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0x1d59, 0, 0, 0, g(Yes, No, false, false, "", "ᴝ")}, + {0x1d5a, 0, 0, 0, g(Yes, No, false, false, "", "ɯ")}, + {0x1d5b, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x1d5c, 0, 0, 0, g(Yes, No, false, false, "", "ᴥ")}, + {0x1d5d, 0, 0, 0, g(Yes, No, false, false, "", "β")}, + {0x1d5e, 0, 0, 0, g(Yes, No, false, false, "", "γ")}, + {0x1d5f, 0, 0, 0, g(Yes, No, false, false, "", "δ")}, + {0x1d60, 0, 0, 0, g(Yes, No, false, false, "", "φ")}, + {0x1d61, 0, 0, 0, g(Yes, No, false, false, "", "χ")}, + {0x1d62, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x1d63, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0x1d64, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0x1d65, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x1d66, 0, 0, 0, g(Yes, No, false, false, "", "β")}, + {0x1d67, 0, 0, 0, g(Yes, No, false, false, "", "γ")}, + {0x1d68, 0, 0, 0, g(Yes, No, false, false, "", "ρ")}, + {0x1d69, 0, 0, 0, g(Yes, No, false, false, "", "φ")}, + {0x1d6a, 0, 0, 0, g(Yes, No, false, false, "", "χ")}, + {0x1d6b, 0, 0, 0, f(Yes, false, "")}, + {0x1d78, 0, 0, 0, g(Yes, No, false, false, "", "н")}, + {0x1d79, 0, 0, 0, f(Yes, false, "")}, + {0x1d9b, 0, 0, 0, g(Yes, No, false, false, "", "ɒ")}, + {0x1d9c, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0x1d9d, 0, 0, 0, g(Yes, No, false, false, "", "ɕ")}, + {0x1d9e, 0, 0, 0, g(Yes, No, false, false, "", "ð")}, + {0x1d9f, 0, 0, 0, g(Yes, No, false, false, "", "ɜ")}, + {0x1da0, 0, 0, 0, g(Yes, No, false, false, "", "f")}, + {0x1da1, 0, 0, 0, g(Yes, No, false, false, "", "ɟ")}, + {0x1da2, 0, 0, 0, g(Yes, No, false, false, "", "ɡ")}, + {0x1da3, 0, 0, 0, g(Yes, No, false, false, "", "ɥ")}, + {0x1da4, 0, 0, 0, g(Yes, No, false, false, "", "ɨ")}, + {0x1da5, 0, 0, 0, g(Yes, No, false, false, "", "ɩ")}, + {0x1da6, 0, 0, 0, g(Yes, No, false, false, "", "ɪ")}, + {0x1da7, 0, 0, 0, g(Yes, No, false, false, "", "ᵻ")}, + {0x1da8, 0, 0, 0, g(Yes, No, false, false, "", "ʝ")}, + {0x1da9, 0, 0, 0, g(Yes, No, false, false, "", "ɭ")}, + {0x1daa, 0, 0, 0, g(Yes, No, false, false, "", "ᶅ")}, + {0x1dab, 0, 0, 0, g(Yes, No, false, false, "", "ʟ")}, + {0x1dac, 0, 0, 0, g(Yes, No, false, false, "", "ɱ")}, + {0x1dad, 0, 0, 0, g(Yes, No, false, false, "", "ɰ")}, + {0x1dae, 0, 0, 0, g(Yes, No, false, false, "", "ɲ")}, + {0x1daf, 0, 0, 0, g(Yes, No, false, false, "", "ɳ")}, + {0x1db0, 0, 0, 0, g(Yes, No, false, false, "", "ɴ")}, + {0x1db1, 0, 0, 0, g(Yes, No, false, false, "", "ɵ")}, + {0x1db2, 0, 0, 0, g(Yes, No, false, false, "", "ɸ")}, + {0x1db3, 0, 0, 0, g(Yes, No, false, false, "", "ʂ")}, + {0x1db4, 0, 0, 0, g(Yes, No, false, false, "", "ʃ")}, + {0x1db5, 0, 0, 0, g(Yes, No, false, false, "", "ƫ")}, + {0x1db6, 0, 0, 0, g(Yes, No, false, false, "", "ʉ")}, + {0x1db7, 0, 0, 0, g(Yes, No, false, false, "", "ʊ")}, + {0x1db8, 0, 0, 0, g(Yes, No, false, false, "", "ᴜ")}, + {0x1db9, 0, 0, 0, g(Yes, No, false, false, "", "ʋ")}, + {0x1dba, 0, 0, 0, g(Yes, No, false, false, "", "ʌ")}, + {0x1dbb, 0, 0, 0, g(Yes, No, false, false, "", "z")}, + {0x1dbc, 0, 0, 0, g(Yes, No, false, false, "", "ʐ")}, + {0x1dbd, 0, 0, 0, g(Yes, No, false, false, "", "ʑ")}, + {0x1dbe, 0, 0, 0, g(Yes, No, false, false, "", "ʒ")}, + {0x1dbf, 0, 0, 0, g(Yes, No, false, false, "", "θ")}, + {0x1dc0, 230, 1, 1, f(Yes, false, "")}, + {0x1dc2, 220, 1, 1, f(Yes, false, "")}, + {0x1dc3, 230, 1, 1, f(Yes, false, "")}, + {0x1dca, 220, 1, 1, f(Yes, false, "")}, + {0x1dcb, 230, 1, 1, f(Yes, false, "")}, + {0x1dcd, 234, 1, 1, f(Yes, false, "")}, + {0x1dce, 214, 1, 1, f(Yes, false, "")}, + {0x1dcf, 220, 1, 1, f(Yes, false, "")}, + {0x1dd0, 202, 1, 1, f(Yes, false, "")}, + {0x1dd1, 230, 1, 1, f(Yes, false, "")}, + {0x1df6, 0, 0, 0, f(Yes, false, "")}, + {0x1dfb, 230, 1, 1, f(Yes, false, "")}, + {0x1dfc, 233, 1, 1, f(Yes, false, "")}, + {0x1dfd, 220, 1, 1, f(Yes, false, "")}, + {0x1dfe, 230, 1, 1, f(Yes, false, "")}, + {0x1dff, 220, 1, 1, f(Yes, false, "")}, + {0x1e00, 0, 0, 1, f(Yes, false, "Ḁ")}, + {0x1e01, 0, 0, 1, f(Yes, false, "ḁ")}, + {0x1e02, 0, 0, 1, f(Yes, false, "Ḃ")}, + {0x1e03, 0, 0, 1, f(Yes, false, "ḃ")}, + {0x1e04, 0, 0, 1, f(Yes, false, "Ḅ")}, + {0x1e05, 0, 0, 1, f(Yes, false, "ḅ")}, + {0x1e06, 0, 0, 1, f(Yes, false, "Ḇ")}, + {0x1e07, 0, 0, 1, f(Yes, false, "ḇ")}, + {0x1e08, 0, 0, 2, f(Yes, false, "Ḉ")}, + {0x1e09, 0, 0, 2, f(Yes, false, "ḉ")}, + {0x1e0a, 0, 0, 1, f(Yes, false, "Ḋ")}, + {0x1e0b, 0, 0, 1, f(Yes, false, "ḋ")}, + {0x1e0c, 0, 0, 1, f(Yes, false, "Ḍ")}, + {0x1e0d, 0, 0, 1, f(Yes, false, "ḍ")}, + {0x1e0e, 0, 0, 1, f(Yes, false, "Ḏ")}, + {0x1e0f, 0, 0, 1, f(Yes, false, "ḏ")}, + {0x1e10, 0, 0, 1, f(Yes, false, "Ḑ")}, + {0x1e11, 0, 0, 1, f(Yes, false, "ḑ")}, + {0x1e12, 0, 0, 1, f(Yes, false, "Ḓ")}, + {0x1e13, 0, 0, 1, f(Yes, false, "ḓ")}, + {0x1e14, 0, 0, 2, f(Yes, false, "Ḕ")}, + {0x1e15, 0, 0, 2, f(Yes, false, "ḕ")}, + {0x1e16, 0, 0, 2, f(Yes, false, "Ḗ")}, + {0x1e17, 0, 0, 2, f(Yes, false, "ḗ")}, + {0x1e18, 0, 0, 1, f(Yes, false, "Ḙ")}, + {0x1e19, 0, 0, 1, f(Yes, false, "ḙ")}, + {0x1e1a, 0, 0, 1, f(Yes, false, "Ḛ")}, + {0x1e1b, 0, 0, 1, f(Yes, false, "ḛ")}, + {0x1e1c, 0, 0, 2, f(Yes, false, "Ḝ")}, + {0x1e1d, 0, 0, 2, f(Yes, false, "ḝ")}, + {0x1e1e, 0, 0, 1, f(Yes, false, "Ḟ")}, + {0x1e1f, 0, 0, 1, f(Yes, false, "ḟ")}, + {0x1e20, 0, 0, 1, f(Yes, false, "Ḡ")}, + {0x1e21, 0, 0, 1, f(Yes, false, "ḡ")}, + {0x1e22, 0, 0, 1, f(Yes, false, "Ḣ")}, + {0x1e23, 0, 0, 1, f(Yes, false, "ḣ")}, + {0x1e24, 0, 0, 1, f(Yes, false, "Ḥ")}, + {0x1e25, 0, 0, 1, f(Yes, false, "ḥ")}, + {0x1e26, 0, 0, 1, f(Yes, false, "Ḧ")}, + {0x1e27, 0, 0, 1, f(Yes, false, "ḧ")}, + {0x1e28, 0, 0, 1, f(Yes, false, "Ḩ")}, + {0x1e29, 0, 0, 1, f(Yes, false, "ḩ")}, + {0x1e2a, 0, 0, 1, f(Yes, false, "Ḫ")}, + {0x1e2b, 0, 0, 1, f(Yes, false, "ḫ")}, + {0x1e2c, 0, 0, 1, f(Yes, false, "Ḭ")}, + {0x1e2d, 0, 0, 1, f(Yes, false, "ḭ")}, + {0x1e2e, 0, 0, 2, f(Yes, false, "Ḯ")}, + {0x1e2f, 0, 0, 2, f(Yes, false, "ḯ")}, + {0x1e30, 0, 0, 1, f(Yes, false, "Ḱ")}, + {0x1e31, 0, 0, 1, f(Yes, false, "ḱ")}, + {0x1e32, 0, 0, 1, f(Yes, false, "Ḳ")}, + {0x1e33, 0, 0, 1, f(Yes, false, "ḳ")}, + {0x1e34, 0, 0, 1, f(Yes, false, "Ḵ")}, + {0x1e35, 0, 0, 1, f(Yes, false, "ḵ")}, + {0x1e36, 0, 0, 1, f(Yes, true, "Ḷ")}, + {0x1e37, 0, 0, 1, f(Yes, true, "ḷ")}, + {0x1e38, 0, 0, 2, f(Yes, false, "Ḹ")}, + {0x1e39, 0, 0, 2, f(Yes, false, "ḹ")}, + {0x1e3a, 0, 0, 1, f(Yes, false, "Ḻ")}, + {0x1e3b, 0, 0, 1, f(Yes, false, "ḻ")}, + {0x1e3c, 0, 0, 1, f(Yes, false, "Ḽ")}, + {0x1e3d, 0, 0, 1, f(Yes, false, "ḽ")}, + {0x1e3e, 0, 0, 1, f(Yes, false, "Ḿ")}, + {0x1e3f, 0, 0, 1, f(Yes, false, "ḿ")}, + {0x1e40, 0, 0, 1, f(Yes, false, "Ṁ")}, + {0x1e41, 0, 0, 1, f(Yes, false, "ṁ")}, + {0x1e42, 0, 0, 1, f(Yes, false, "Ṃ")}, + {0x1e43, 0, 0, 1, f(Yes, false, "ṃ")}, + {0x1e44, 0, 0, 1, f(Yes, false, "Ṅ")}, + {0x1e45, 0, 0, 1, f(Yes, false, "ṅ")}, + {0x1e46, 0, 0, 1, f(Yes, false, "Ṇ")}, + {0x1e47, 0, 0, 1, f(Yes, false, "ṇ")}, + {0x1e48, 0, 0, 1, f(Yes, false, "Ṉ")}, + {0x1e49, 0, 0, 1, f(Yes, false, "ṉ")}, + {0x1e4a, 0, 0, 1, f(Yes, false, "Ṋ")}, + {0x1e4b, 0, 0, 1, f(Yes, false, "ṋ")}, + {0x1e4c, 0, 0, 2, f(Yes, false, "Ṍ")}, + {0x1e4d, 0, 0, 2, f(Yes, false, "ṍ")}, + {0x1e4e, 0, 0, 2, f(Yes, false, "Ṏ")}, + {0x1e4f, 0, 0, 2, f(Yes, false, "ṏ")}, + {0x1e50, 0, 0, 2, f(Yes, false, "Ṑ")}, + {0x1e51, 0, 0, 2, f(Yes, false, "ṑ")}, + {0x1e52, 0, 0, 2, f(Yes, false, "Ṓ")}, + {0x1e53, 0, 0, 2, f(Yes, false, "ṓ")}, + {0x1e54, 0, 0, 1, f(Yes, false, "Ṕ")}, + {0x1e55, 0, 0, 1, f(Yes, false, "ṕ")}, + {0x1e56, 0, 0, 1, f(Yes, false, "Ṗ")}, + {0x1e57, 0, 0, 1, f(Yes, false, "ṗ")}, + {0x1e58, 0, 0, 1, f(Yes, false, "Ṙ")}, + {0x1e59, 0, 0, 1, f(Yes, false, "ṙ")}, + {0x1e5a, 0, 0, 1, f(Yes, true, "Ṛ")}, + {0x1e5b, 0, 0, 1, f(Yes, true, "ṛ")}, + {0x1e5c, 0, 0, 2, f(Yes, false, "Ṝ")}, + {0x1e5d, 0, 0, 2, f(Yes, false, "ṝ")}, + {0x1e5e, 0, 0, 1, f(Yes, false, "Ṟ")}, + {0x1e5f, 0, 0, 1, f(Yes, false, "ṟ")}, + {0x1e60, 0, 0, 1, f(Yes, false, "Ṡ")}, + {0x1e61, 0, 0, 1, f(Yes, false, "ṡ")}, + {0x1e62, 0, 0, 1, f(Yes, true, "Ṣ")}, + {0x1e63, 0, 0, 1, f(Yes, true, "ṣ")}, + {0x1e64, 0, 0, 2, f(Yes, false, "Ṥ")}, + {0x1e65, 0, 0, 2, f(Yes, false, "ṥ")}, + {0x1e66, 0, 0, 2, f(Yes, false, "Ṧ")}, + {0x1e67, 0, 0, 2, f(Yes, false, "ṧ")}, + {0x1e68, 0, 0, 2, f(Yes, false, "Ṩ")}, + {0x1e69, 0, 0, 2, f(Yes, false, "ṩ")}, + {0x1e6a, 0, 0, 1, f(Yes, false, "Ṫ")}, + {0x1e6b, 0, 0, 1, f(Yes, false, "ṫ")}, + {0x1e6c, 0, 0, 1, f(Yes, false, "Ṭ")}, + {0x1e6d, 0, 0, 1, f(Yes, false, "ṭ")}, + {0x1e6e, 0, 0, 1, f(Yes, false, "Ṯ")}, + {0x1e6f, 0, 0, 1, f(Yes, false, "ṯ")}, + {0x1e70, 0, 0, 1, f(Yes, false, "Ṱ")}, + {0x1e71, 0, 0, 1, f(Yes, false, "ṱ")}, + {0x1e72, 0, 0, 1, f(Yes, false, "Ṳ")}, + {0x1e73, 0, 0, 1, f(Yes, false, "ṳ")}, + {0x1e74, 0, 0, 1, f(Yes, false, "Ṵ")}, + {0x1e75, 0, 0, 1, f(Yes, false, "ṵ")}, + {0x1e76, 0, 0, 1, f(Yes, false, "Ṷ")}, + {0x1e77, 0, 0, 1, f(Yes, false, "ṷ")}, + {0x1e78, 0, 0, 2, f(Yes, false, "Ṹ")}, + {0x1e79, 0, 0, 2, f(Yes, false, "ṹ")}, + {0x1e7a, 0, 0, 2, f(Yes, false, "Ṻ")}, + {0x1e7b, 0, 0, 2, f(Yes, false, "ṻ")}, + {0x1e7c, 0, 0, 1, f(Yes, false, "Ṽ")}, + {0x1e7d, 0, 0, 1, f(Yes, false, "ṽ")}, + {0x1e7e, 0, 0, 1, f(Yes, false, "Ṿ")}, + {0x1e7f, 0, 0, 1, f(Yes, false, "ṿ")}, + {0x1e80, 0, 0, 1, f(Yes, false, "Ẁ")}, + {0x1e81, 0, 0, 1, f(Yes, false, "ẁ")}, + {0x1e82, 0, 0, 1, f(Yes, false, "Ẃ")}, + {0x1e83, 0, 0, 1, f(Yes, false, "ẃ")}, + {0x1e84, 0, 0, 1, f(Yes, false, "Ẅ")}, + {0x1e85, 0, 0, 1, f(Yes, false, "ẅ")}, + {0x1e86, 0, 0, 1, f(Yes, false, "Ẇ")}, + {0x1e87, 0, 0, 1, f(Yes, false, "ẇ")}, + {0x1e88, 0, 0, 1, f(Yes, false, "Ẉ")}, + {0x1e89, 0, 0, 1, f(Yes, false, "ẉ")}, + {0x1e8a, 0, 0, 1, f(Yes, false, "Ẋ")}, + {0x1e8b, 0, 0, 1, f(Yes, false, "ẋ")}, + {0x1e8c, 0, 0, 1, f(Yes, false, "Ẍ")}, + {0x1e8d, 0, 0, 1, f(Yes, false, "ẍ")}, + {0x1e8e, 0, 0, 1, f(Yes, false, "Ẏ")}, + {0x1e8f, 0, 0, 1, f(Yes, false, "ẏ")}, + {0x1e90, 0, 0, 1, f(Yes, false, "Ẑ")}, + {0x1e91, 0, 0, 1, f(Yes, false, "ẑ")}, + {0x1e92, 0, 0, 1, f(Yes, false, "Ẓ")}, + {0x1e93, 0, 0, 1, f(Yes, false, "ẓ")}, + {0x1e94, 0, 0, 1, f(Yes, false, "Ẕ")}, + {0x1e95, 0, 0, 1, f(Yes, false, "ẕ")}, + {0x1e96, 0, 0, 1, f(Yes, false, "ẖ")}, + {0x1e97, 0, 0, 1, f(Yes, false, "ẗ")}, + {0x1e98, 0, 0, 1, f(Yes, false, "ẘ")}, + {0x1e99, 0, 0, 1, f(Yes, false, "ẙ")}, + {0x1e9a, 0, 0, 0, g(Yes, No, false, false, "", "aʾ")}, + {0x1e9b, 0, 0, 1, g(Yes, No, false, false, "ẛ", "ṡ")}, + {0x1e9c, 0, 0, 0, f(Yes, false, "")}, + {0x1ea0, 0, 0, 1, f(Yes, true, "Ạ")}, + {0x1ea1, 0, 0, 1, f(Yes, true, "ạ")}, + {0x1ea2, 0, 0, 1, f(Yes, false, "Ả")}, + {0x1ea3, 0, 0, 1, f(Yes, false, "ả")}, + {0x1ea4, 0, 0, 2, f(Yes, false, "Ấ")}, + {0x1ea5, 0, 0, 2, f(Yes, false, "ấ")}, + {0x1ea6, 0, 0, 2, f(Yes, false, "Ầ")}, + {0x1ea7, 0, 0, 2, f(Yes, false, "ầ")}, + {0x1ea8, 0, 0, 2, f(Yes, false, "Ẩ")}, + {0x1ea9, 0, 0, 2, f(Yes, false, "ẩ")}, + {0x1eaa, 0, 0, 2, f(Yes, false, "Ẫ")}, + {0x1eab, 0, 0, 2, f(Yes, false, "ẫ")}, + {0x1eac, 0, 0, 2, f(Yes, false, "Ậ")}, + {0x1ead, 0, 0, 2, f(Yes, false, "ậ")}, + {0x1eae, 0, 0, 2, f(Yes, false, "Ắ")}, + {0x1eaf, 0, 0, 2, f(Yes, false, "ắ")}, + {0x1eb0, 0, 0, 2, f(Yes, false, "Ằ")}, + {0x1eb1, 0, 0, 2, f(Yes, false, "ằ")}, + {0x1eb2, 0, 0, 2, f(Yes, false, "Ẳ")}, + {0x1eb3, 0, 0, 2, f(Yes, false, "ẳ")}, + {0x1eb4, 0, 0, 2, f(Yes, false, "Ẵ")}, + {0x1eb5, 0, 0, 2, f(Yes, false, "ẵ")}, + {0x1eb6, 0, 0, 2, f(Yes, false, "Ặ")}, + {0x1eb7, 0, 0, 2, f(Yes, false, "ặ")}, + {0x1eb8, 0, 0, 1, f(Yes, true, "Ẹ")}, + {0x1eb9, 0, 0, 1, f(Yes, true, "ẹ")}, + {0x1eba, 0, 0, 1, f(Yes, false, "Ẻ")}, + {0x1ebb, 0, 0, 1, f(Yes, false, "ẻ")}, + {0x1ebc, 0, 0, 1, f(Yes, false, "Ẽ")}, + {0x1ebd, 0, 0, 1, f(Yes, false, "ẽ")}, + {0x1ebe, 0, 0, 2, f(Yes, false, "Ế")}, + {0x1ebf, 0, 0, 2, f(Yes, false, "ế")}, + {0x1ec0, 0, 0, 2, f(Yes, false, "Ề")}, + {0x1ec1, 0, 0, 2, f(Yes, false, "ề")}, + {0x1ec2, 0, 0, 2, f(Yes, false, "Ể")}, + {0x1ec3, 0, 0, 2, f(Yes, false, "ể")}, + {0x1ec4, 0, 0, 2, f(Yes, false, "Ễ")}, + {0x1ec5, 0, 0, 2, f(Yes, false, "ễ")}, + {0x1ec6, 0, 0, 2, f(Yes, false, "Ệ")}, + {0x1ec7, 0, 0, 2, f(Yes, false, "ệ")}, + {0x1ec8, 0, 0, 1, f(Yes, false, "Ỉ")}, + {0x1ec9, 0, 0, 1, f(Yes, false, "ỉ")}, + {0x1eca, 0, 0, 1, f(Yes, false, "Ị")}, + {0x1ecb, 0, 0, 1, f(Yes, false, "ị")}, + {0x1ecc, 0, 0, 1, f(Yes, true, "Ọ")}, + {0x1ecd, 0, 0, 1, f(Yes, true, "ọ")}, + {0x1ece, 0, 0, 1, f(Yes, false, "Ỏ")}, + {0x1ecf, 0, 0, 1, f(Yes, false, "ỏ")}, + {0x1ed0, 0, 0, 2, f(Yes, false, "Ố")}, + {0x1ed1, 0, 0, 2, f(Yes, false, "ố")}, + {0x1ed2, 0, 0, 2, f(Yes, false, "Ồ")}, + {0x1ed3, 0, 0, 2, f(Yes, false, "ồ")}, + {0x1ed4, 0, 0, 2, f(Yes, false, "Ổ")}, + {0x1ed5, 0, 0, 2, f(Yes, false, "ổ")}, + {0x1ed6, 0, 0, 2, f(Yes, false, "Ỗ")}, + {0x1ed7, 0, 0, 2, f(Yes, false, "ỗ")}, + {0x1ed8, 0, 0, 2, f(Yes, false, "Ộ")}, + {0x1ed9, 0, 0, 2, f(Yes, false, "ộ")}, + {0x1eda, 0, 0, 2, f(Yes, false, "Ớ")}, + {0x1edb, 0, 0, 2, f(Yes, false, "ớ")}, + {0x1edc, 0, 0, 2, f(Yes, false, "Ờ")}, + {0x1edd, 0, 0, 2, f(Yes, false, "ờ")}, + {0x1ede, 0, 0, 2, f(Yes, false, "Ở")}, + {0x1edf, 0, 0, 2, f(Yes, false, "ở")}, + {0x1ee0, 0, 0, 2, f(Yes, false, "Ỡ")}, + {0x1ee1, 0, 0, 2, f(Yes, false, "ỡ")}, + {0x1ee2, 0, 0, 2, f(Yes, false, "Ợ")}, + {0x1ee3, 0, 0, 2, f(Yes, false, "ợ")}, + {0x1ee4, 0, 0, 1, f(Yes, false, "Ụ")}, + {0x1ee5, 0, 0, 1, f(Yes, false, "ụ")}, + {0x1ee6, 0, 0, 1, f(Yes, false, "Ủ")}, + {0x1ee7, 0, 0, 1, f(Yes, false, "ủ")}, + {0x1ee8, 0, 0, 2, f(Yes, false, "Ứ")}, + {0x1ee9, 0, 0, 2, f(Yes, false, "ứ")}, + {0x1eea, 0, 0, 2, f(Yes, false, "Ừ")}, + {0x1eeb, 0, 0, 2, f(Yes, false, "ừ")}, + {0x1eec, 0, 0, 2, f(Yes, false, "Ử")}, + {0x1eed, 0, 0, 2, f(Yes, false, "ử")}, + {0x1eee, 0, 0, 2, f(Yes, false, "Ữ")}, + {0x1eef, 0, 0, 2, f(Yes, false, "ữ")}, + {0x1ef0, 0, 0, 2, f(Yes, false, "Ự")}, + {0x1ef1, 0, 0, 2, f(Yes, false, "ự")}, + {0x1ef2, 0, 0, 1, f(Yes, false, "Ỳ")}, + {0x1ef3, 0, 0, 1, f(Yes, false, "ỳ")}, + {0x1ef4, 0, 0, 1, f(Yes, false, "Ỵ")}, + {0x1ef5, 0, 0, 1, f(Yes, false, "ỵ")}, + {0x1ef6, 0, 0, 1, f(Yes, false, "Ỷ")}, + {0x1ef7, 0, 0, 1, f(Yes, false, "ỷ")}, + {0x1ef8, 0, 0, 1, f(Yes, false, "Ỹ")}, + {0x1ef9, 0, 0, 1, f(Yes, false, "ỹ")}, + {0x1efa, 0, 0, 0, f(Yes, false, "")}, + {0x1f00, 0, 0, 1, f(Yes, true, "ἀ")}, + {0x1f01, 0, 0, 1, f(Yes, true, "ἁ")}, + {0x1f02, 0, 0, 2, f(Yes, true, "ἂ")}, + {0x1f03, 0, 0, 2, f(Yes, true, "ἃ")}, + {0x1f04, 0, 0, 2, f(Yes, true, "ἄ")}, + {0x1f05, 0, 0, 2, f(Yes, true, "ἅ")}, + {0x1f06, 0, 0, 2, f(Yes, true, "ἆ")}, + {0x1f07, 0, 0, 2, f(Yes, true, "ἇ")}, + {0x1f08, 0, 0, 1, f(Yes, true, "Ἀ")}, + {0x1f09, 0, 0, 1, f(Yes, true, "Ἁ")}, + {0x1f0a, 0, 0, 2, f(Yes, true, "Ἂ")}, + {0x1f0b, 0, 0, 2, f(Yes, true, "Ἃ")}, + {0x1f0c, 0, 0, 2, f(Yes, true, "Ἄ")}, + {0x1f0d, 0, 0, 2, f(Yes, true, "Ἅ")}, + {0x1f0e, 0, 0, 2, f(Yes, true, "Ἆ")}, + {0x1f0f, 0, 0, 2, f(Yes, true, "Ἇ")}, + {0x1f10, 0, 0, 1, f(Yes, true, "ἐ")}, + {0x1f11, 0, 0, 1, f(Yes, true, "ἑ")}, + {0x1f12, 0, 0, 2, f(Yes, false, "ἒ")}, + {0x1f13, 0, 0, 2, f(Yes, false, "ἓ")}, + {0x1f14, 0, 0, 2, f(Yes, false, "ἔ")}, + {0x1f15, 0, 0, 2, f(Yes, false, "ἕ")}, + {0x1f16, 0, 0, 0, f(Yes, false, "")}, + {0x1f18, 0, 0, 1, f(Yes, true, "Ἐ")}, + {0x1f19, 0, 0, 1, f(Yes, true, "Ἑ")}, + {0x1f1a, 0, 0, 2, f(Yes, false, "Ἒ")}, + {0x1f1b, 0, 0, 2, f(Yes, false, "Ἓ")}, + {0x1f1c, 0, 0, 2, f(Yes, false, "Ἔ")}, + {0x1f1d, 0, 0, 2, f(Yes, false, "Ἕ")}, + {0x1f1e, 0, 0, 0, f(Yes, false, "")}, + {0x1f20, 0, 0, 1, f(Yes, true, "ἠ")}, + {0x1f21, 0, 0, 1, f(Yes, true, "ἡ")}, + {0x1f22, 0, 0, 2, f(Yes, true, "ἢ")}, + {0x1f23, 0, 0, 2, f(Yes, true, "ἣ")}, + {0x1f24, 0, 0, 2, f(Yes, true, "ἤ")}, + {0x1f25, 0, 0, 2, f(Yes, true, "ἥ")}, + {0x1f26, 0, 0, 2, f(Yes, true, "ἦ")}, + {0x1f27, 0, 0, 2, f(Yes, true, "ἧ")}, + {0x1f28, 0, 0, 1, f(Yes, true, "Ἠ")}, + {0x1f29, 0, 0, 1, f(Yes, true, "Ἡ")}, + {0x1f2a, 0, 0, 2, f(Yes, true, "Ἢ")}, + {0x1f2b, 0, 0, 2, f(Yes, true, "Ἣ")}, + {0x1f2c, 0, 0, 2, f(Yes, true, "Ἤ")}, + {0x1f2d, 0, 0, 2, f(Yes, true, "Ἥ")}, + {0x1f2e, 0, 0, 2, f(Yes, true, "Ἦ")}, + {0x1f2f, 0, 0, 2, f(Yes, true, "Ἧ")}, + {0x1f30, 0, 0, 1, f(Yes, true, "ἰ")}, + {0x1f31, 0, 0, 1, f(Yes, true, "ἱ")}, + {0x1f32, 0, 0, 2, f(Yes, false, "ἲ")}, + {0x1f33, 0, 0, 2, f(Yes, false, "ἳ")}, + {0x1f34, 0, 0, 2, f(Yes, false, "ἴ")}, + {0x1f35, 0, 0, 2, f(Yes, false, "ἵ")}, + {0x1f36, 0, 0, 2, f(Yes, false, "ἶ")}, + {0x1f37, 0, 0, 2, f(Yes, false, "ἷ")}, + {0x1f38, 0, 0, 1, f(Yes, true, "Ἰ")}, + {0x1f39, 0, 0, 1, f(Yes, true, "Ἱ")}, + {0x1f3a, 0, 0, 2, f(Yes, false, "Ἲ")}, + {0x1f3b, 0, 0, 2, f(Yes, false, "Ἳ")}, + {0x1f3c, 0, 0, 2, f(Yes, false, "Ἴ")}, + {0x1f3d, 0, 0, 2, f(Yes, false, "Ἵ")}, + {0x1f3e, 0, 0, 2, f(Yes, false, "Ἶ")}, + {0x1f3f, 0, 0, 2, f(Yes, false, "Ἷ")}, + {0x1f40, 0, 0, 1, f(Yes, true, "ὀ")}, + {0x1f41, 0, 0, 1, f(Yes, true, "ὁ")}, + {0x1f42, 0, 0, 2, f(Yes, false, "ὂ")}, + {0x1f43, 0, 0, 2, f(Yes, false, "ὃ")}, + {0x1f44, 0, 0, 2, f(Yes, false, "ὄ")}, + {0x1f45, 0, 0, 2, f(Yes, false, "ὅ")}, + {0x1f46, 0, 0, 0, f(Yes, false, "")}, + {0x1f48, 0, 0, 1, f(Yes, true, "Ὀ")}, + {0x1f49, 0, 0, 1, f(Yes, true, "Ὁ")}, + {0x1f4a, 0, 0, 2, f(Yes, false, "Ὂ")}, + {0x1f4b, 0, 0, 2, f(Yes, false, "Ὃ")}, + {0x1f4c, 0, 0, 2, f(Yes, false, "Ὄ")}, + {0x1f4d, 0, 0, 2, f(Yes, false, "Ὅ")}, + {0x1f4e, 0, 0, 0, f(Yes, false, "")}, + {0x1f50, 0, 0, 1, f(Yes, true, "ὐ")}, + {0x1f51, 0, 0, 1, f(Yes, true, "ὑ")}, + {0x1f52, 0, 0, 2, f(Yes, false, "ὒ")}, + {0x1f53, 0, 0, 2, f(Yes, false, "ὓ")}, + {0x1f54, 0, 0, 2, f(Yes, false, "ὔ")}, + {0x1f55, 0, 0, 2, f(Yes, false, "ὕ")}, + {0x1f56, 0, 0, 2, f(Yes, false, "ὖ")}, + {0x1f57, 0, 0, 2, f(Yes, false, "ὗ")}, + {0x1f58, 0, 0, 0, f(Yes, false, "")}, + {0x1f59, 0, 0, 1, f(Yes, true, "Ὑ")}, + {0x1f5a, 0, 0, 0, f(Yes, false, "")}, + {0x1f5b, 0, 0, 2, f(Yes, false, "Ὓ")}, + {0x1f5c, 0, 0, 0, f(Yes, false, "")}, + {0x1f5d, 0, 0, 2, f(Yes, false, "Ὕ")}, + {0x1f5e, 0, 0, 0, f(Yes, false, "")}, + {0x1f5f, 0, 0, 2, f(Yes, false, "Ὗ")}, + {0x1f60, 0, 0, 1, f(Yes, true, "ὠ")}, + {0x1f61, 0, 0, 1, f(Yes, true, "ὡ")}, + {0x1f62, 0, 0, 2, f(Yes, true, "ὢ")}, + {0x1f63, 0, 0, 2, f(Yes, true, "ὣ")}, + {0x1f64, 0, 0, 2, f(Yes, true, "ὤ")}, + {0x1f65, 0, 0, 2, f(Yes, true, "ὥ")}, + {0x1f66, 0, 0, 2, f(Yes, true, "ὦ")}, + {0x1f67, 0, 0, 2, f(Yes, true, "ὧ")}, + {0x1f68, 0, 0, 1, f(Yes, true, "Ὠ")}, + {0x1f69, 0, 0, 1, f(Yes, true, "Ὡ")}, + {0x1f6a, 0, 0, 2, f(Yes, true, "Ὢ")}, + {0x1f6b, 0, 0, 2, f(Yes, true, "Ὣ")}, + {0x1f6c, 0, 0, 2, f(Yes, true, "Ὤ")}, + {0x1f6d, 0, 0, 2, f(Yes, true, "Ὥ")}, + {0x1f6e, 0, 0, 2, f(Yes, true, "Ὦ")}, + {0x1f6f, 0, 0, 2, f(Yes, true, "Ὧ")}, + {0x1f70, 0, 0, 1, f(Yes, true, "ὰ")}, + {0x1f71, 0, 0, 1, f(No, false, "ά")}, + {0x1f72, 0, 0, 1, f(Yes, false, "ὲ")}, + {0x1f73, 0, 0, 1, f(No, false, "έ")}, + {0x1f74, 0, 0, 1, f(Yes, true, "ὴ")}, + {0x1f75, 0, 0, 1, f(No, false, "ή")}, + {0x1f76, 0, 0, 1, f(Yes, false, "ὶ")}, + {0x1f77, 0, 0, 1, f(No, false, "ί")}, + {0x1f78, 0, 0, 1, f(Yes, false, "ὸ")}, + {0x1f79, 0, 0, 1, f(No, false, "ό")}, + {0x1f7a, 0, 0, 1, f(Yes, false, "ὺ")}, + {0x1f7b, 0, 0, 1, f(No, false, "ύ")}, + {0x1f7c, 0, 0, 1, f(Yes, true, "ὼ")}, + {0x1f7d, 0, 0, 1, f(No, false, "ώ")}, + {0x1f7e, 0, 0, 0, f(Yes, false, "")}, + {0x1f80, 0, 0, 2, f(Yes, false, "ᾀ")}, + {0x1f81, 0, 0, 2, f(Yes, false, "ᾁ")}, + {0x1f82, 0, 0, 3, f(Yes, false, "ᾂ")}, + {0x1f83, 0, 0, 3, f(Yes, false, "ᾃ")}, + {0x1f84, 0, 0, 3, f(Yes, false, "ᾄ")}, + {0x1f85, 0, 0, 3, f(Yes, false, "ᾅ")}, + {0x1f86, 0, 0, 3, f(Yes, false, "ᾆ")}, + {0x1f87, 0, 0, 3, f(Yes, false, "ᾇ")}, + {0x1f88, 0, 0, 2, f(Yes, false, "ᾈ")}, + {0x1f89, 0, 0, 2, f(Yes, false, "ᾉ")}, + {0x1f8a, 0, 0, 3, f(Yes, false, "ᾊ")}, + {0x1f8b, 0, 0, 3, f(Yes, false, "ᾋ")}, + {0x1f8c, 0, 0, 3, f(Yes, false, "ᾌ")}, + {0x1f8d, 0, 0, 3, f(Yes, false, "ᾍ")}, + {0x1f8e, 0, 0, 3, f(Yes, false, "ᾎ")}, + {0x1f8f, 0, 0, 3, f(Yes, false, "ᾏ")}, + {0x1f90, 0, 0, 2, f(Yes, false, "ᾐ")}, + {0x1f91, 0, 0, 2, f(Yes, false, "ᾑ")}, + {0x1f92, 0, 0, 3, f(Yes, false, "ᾒ")}, + {0x1f93, 0, 0, 3, f(Yes, false, "ᾓ")}, + {0x1f94, 0, 0, 3, f(Yes, false, "ᾔ")}, + {0x1f95, 0, 0, 3, f(Yes, false, "ᾕ")}, + {0x1f96, 0, 0, 3, f(Yes, false, "ᾖ")}, + {0x1f97, 0, 0, 3, f(Yes, false, "ᾗ")}, + {0x1f98, 0, 0, 2, f(Yes, false, "ᾘ")}, + {0x1f99, 0, 0, 2, f(Yes, false, "ᾙ")}, + {0x1f9a, 0, 0, 3, f(Yes, false, "ᾚ")}, + {0x1f9b, 0, 0, 3, f(Yes, false, "ᾛ")}, + {0x1f9c, 0, 0, 3, f(Yes, false, "ᾜ")}, + {0x1f9d, 0, 0, 3, f(Yes, false, "ᾝ")}, + {0x1f9e, 0, 0, 3, f(Yes, false, "ᾞ")}, + {0x1f9f, 0, 0, 3, f(Yes, false, "ᾟ")}, + {0x1fa0, 0, 0, 2, f(Yes, false, "ᾠ")}, + {0x1fa1, 0, 0, 2, f(Yes, false, "ᾡ")}, + {0x1fa2, 0, 0, 3, f(Yes, false, "ᾢ")}, + {0x1fa3, 0, 0, 3, f(Yes, false, "ᾣ")}, + {0x1fa4, 0, 0, 3, f(Yes, false, "ᾤ")}, + {0x1fa5, 0, 0, 3, f(Yes, false, "ᾥ")}, + {0x1fa6, 0, 0, 3, f(Yes, false, "ᾦ")}, + {0x1fa7, 0, 0, 3, f(Yes, false, "ᾧ")}, + {0x1fa8, 0, 0, 2, f(Yes, false, "ᾨ")}, + {0x1fa9, 0, 0, 2, f(Yes, false, "ᾩ")}, + {0x1faa, 0, 0, 3, f(Yes, false, "ᾪ")}, + {0x1fab, 0, 0, 3, f(Yes, false, "ᾫ")}, + {0x1fac, 0, 0, 3, f(Yes, false, "ᾬ")}, + {0x1fad, 0, 0, 3, f(Yes, false, "ᾭ")}, + {0x1fae, 0, 0, 3, f(Yes, false, "ᾮ")}, + {0x1faf, 0, 0, 3, f(Yes, false, "ᾯ")}, + {0x1fb0, 0, 0, 1, f(Yes, false, "ᾰ")}, + {0x1fb1, 0, 0, 1, f(Yes, false, "ᾱ")}, + {0x1fb2, 0, 0, 2, f(Yes, false, "ᾲ")}, + {0x1fb3, 0, 0, 1, f(Yes, false, "ᾳ")}, + {0x1fb4, 0, 0, 2, f(Yes, false, "ᾴ")}, + {0x1fb5, 0, 0, 0, f(Yes, false, "")}, + {0x1fb6, 0, 0, 1, f(Yes, true, "ᾶ")}, + {0x1fb7, 0, 0, 2, f(Yes, false, "ᾷ")}, + {0x1fb8, 0, 0, 1, f(Yes, false, "Ᾰ")}, + {0x1fb9, 0, 0, 1, f(Yes, false, "Ᾱ")}, + {0x1fba, 0, 0, 1, f(Yes, false, "Ὰ")}, + {0x1fbb, 0, 0, 1, f(No, false, "Ά")}, + {0x1fbc, 0, 0, 1, f(Yes, false, "ᾼ")}, + {0x1fbd, 0, 0, 1, g(Yes, No, false, false, "", " ̓")}, + {0x1fbe, 0, 0, 0, f(No, false, "ι")}, + {0x1fbf, 0, 0, 1, g(Yes, No, true, false, "", " ̓")}, + {0x1fc0, 0, 0, 1, g(Yes, No, false, false, "", " ͂")}, + {0x1fc1, 0, 0, 2, g(Yes, No, false, false, "῁", " ̈͂")}, + {0x1fc2, 0, 0, 2, f(Yes, false, "ῂ")}, + {0x1fc3, 0, 0, 1, f(Yes, false, "ῃ")}, + {0x1fc4, 0, 0, 2, f(Yes, false, "ῄ")}, + {0x1fc5, 0, 0, 0, f(Yes, false, "")}, + {0x1fc6, 0, 0, 1, f(Yes, true, "ῆ")}, + {0x1fc7, 0, 0, 2, f(Yes, false, "ῇ")}, + {0x1fc8, 0, 0, 1, f(Yes, false, "Ὲ")}, + {0x1fc9, 0, 0, 1, f(No, false, "Έ")}, + {0x1fca, 0, 0, 1, f(Yes, false, "Ὴ")}, + {0x1fcb, 0, 0, 1, f(No, false, "Ή")}, + {0x1fcc, 0, 0, 1, f(Yes, false, "ῌ")}, + {0x1fcd, 0, 0, 2, g(Yes, No, false, false, "῍", " ̓̀")}, + {0x1fce, 0, 0, 2, g(Yes, No, false, false, "῎", " ̓́")}, + {0x1fcf, 0, 0, 2, g(Yes, No, false, false, "῏", " ̓͂")}, + {0x1fd0, 0, 0, 1, f(Yes, false, "ῐ")}, + {0x1fd1, 0, 0, 1, f(Yes, false, "ῑ")}, + {0x1fd2, 0, 0, 2, f(Yes, false, "ῒ")}, + {0x1fd3, 0, 0, 2, f(No, false, "ΐ")}, + {0x1fd4, 0, 0, 0, f(Yes, false, "")}, + {0x1fd6, 0, 0, 1, f(Yes, false, "ῖ")}, + {0x1fd7, 0, 0, 2, f(Yes, false, "ῗ")}, + {0x1fd8, 0, 0, 1, f(Yes, false, "Ῐ")}, + {0x1fd9, 0, 0, 1, f(Yes, false, "Ῑ")}, + {0x1fda, 0, 0, 1, f(Yes, false, "Ὶ")}, + {0x1fdb, 0, 0, 1, f(No, false, "Ί")}, + {0x1fdc, 0, 0, 0, f(Yes, false, "")}, + {0x1fdd, 0, 0, 2, g(Yes, No, false, false, "῝", " ̔̀")}, + {0x1fde, 0, 0, 2, g(Yes, No, false, false, "῞", " ̔́")}, + {0x1fdf, 0, 0, 2, g(Yes, No, false, false, "῟", " ̔͂")}, + {0x1fe0, 0, 0, 1, f(Yes, false, "ῠ")}, + {0x1fe1, 0, 0, 1, f(Yes, false, "ῡ")}, + {0x1fe2, 0, 0, 2, f(Yes, false, "ῢ")}, + {0x1fe3, 0, 0, 2, f(No, false, "ΰ")}, + {0x1fe4, 0, 0, 1, f(Yes, false, "ῤ")}, + {0x1fe5, 0, 0, 1, f(Yes, false, "ῥ")}, + {0x1fe6, 0, 0, 1, f(Yes, false, "ῦ")}, + {0x1fe7, 0, 0, 2, f(Yes, false, "ῧ")}, + {0x1fe8, 0, 0, 1, f(Yes, false, "Ῠ")}, + {0x1fe9, 0, 0, 1, f(Yes, false, "Ῡ")}, + {0x1fea, 0, 0, 1, f(Yes, false, "Ὺ")}, + {0x1feb, 0, 0, 1, f(No, false, "Ύ")}, + {0x1fec, 0, 0, 1, f(Yes, false, "Ῥ")}, + {0x1fed, 0, 0, 2, g(Yes, No, false, false, "῭", " ̈̀")}, + {0x1fee, 0, 0, 2, g(No, No, false, false, "΅", " ̈́")}, + {0x1fef, 0, 0, 0, f(No, false, "`")}, + {0x1ff0, 0, 0, 0, f(Yes, false, "")}, + {0x1ff2, 0, 0, 2, f(Yes, false, "ῲ")}, + {0x1ff3, 0, 0, 1, f(Yes, false, "ῳ")}, + {0x1ff4, 0, 0, 2, f(Yes, false, "ῴ")}, + {0x1ff5, 0, 0, 0, f(Yes, false, "")}, + {0x1ff6, 0, 0, 1, f(Yes, true, "ῶ")}, + {0x1ff7, 0, 0, 2, f(Yes, false, "ῷ")}, + {0x1ff8, 0, 0, 1, f(Yes, false, "Ὸ")}, + {0x1ff9, 0, 0, 1, f(No, false, "Ό")}, + {0x1ffa, 0, 0, 1, f(Yes, false, "Ὼ")}, + {0x1ffb, 0, 0, 1, f(No, false, "Ώ")}, + {0x1ffc, 0, 0, 1, f(Yes, false, "ῼ")}, + {0x1ffd, 0, 0, 1, g(No, No, false, false, "´", " ́")}, + {0x1ffe, 0, 0, 1, g(Yes, No, true, false, "", " ̔")}, + {0x1fff, 0, 0, 0, f(Yes, false, "")}, + {0x2000, 0, 0, 0, g(No, No, false, false, "\u2002", " ")}, + {0x2001, 0, 0, 0, g(No, No, false, false, "\u2003", " ")}, + {0x2002, 0, 0, 0, g(Yes, No, false, false, "", " ")}, + {0x200b, 0, 0, 0, f(Yes, false, "")}, + {0x2011, 0, 0, 0, g(Yes, No, false, false, "", "‐")}, + {0x2012, 0, 0, 0, f(Yes, false, "")}, + {0x2017, 0, 0, 1, g(Yes, No, false, false, "", " ̳")}, + {0x2018, 0, 0, 0, f(Yes, false, "")}, + {0x2024, 0, 0, 0, g(Yes, No, false, false, "", ".")}, + {0x2025, 0, 0, 0, g(Yes, No, false, false, "", "..")}, + {0x2026, 0, 0, 0, g(Yes, No, false, false, "", "...")}, + {0x2027, 0, 0, 0, f(Yes, false, "")}, + {0x202f, 0, 0, 0, g(Yes, No, false, false, "", " ")}, + {0x2030, 0, 0, 0, f(Yes, false, "")}, + {0x2033, 0, 0, 0, g(Yes, No, false, false, "", "′′")}, + {0x2034, 0, 0, 0, g(Yes, No, false, false, "", "′′′")}, + {0x2035, 0, 0, 0, f(Yes, false, "")}, + {0x2036, 0, 0, 0, g(Yes, No, false, false, "", "‵‵")}, + {0x2037, 0, 0, 0, g(Yes, No, false, false, "", "‵‵‵")}, + {0x2038, 0, 0, 0, f(Yes, false, "")}, + {0x203c, 0, 0, 0, g(Yes, No, false, false, "", "!!")}, + {0x203d, 0, 0, 0, f(Yes, false, "")}, + {0x203e, 0, 0, 1, g(Yes, No, false, false, "", " ̅")}, + {0x203f, 0, 0, 0, f(Yes, false, "")}, + {0x2047, 0, 0, 0, g(Yes, No, false, false, "", "??")}, + {0x2048, 0, 0, 0, g(Yes, No, false, false, "", "?!")}, + {0x2049, 0, 0, 0, g(Yes, No, false, false, "", "!?")}, + {0x204a, 0, 0, 0, f(Yes, false, "")}, + {0x2057, 0, 0, 0, g(Yes, No, false, false, "", "′′′′")}, + {0x2058, 0, 0, 0, f(Yes, false, "")}, + {0x205f, 0, 0, 0, g(Yes, No, false, false, "", " ")}, + {0x2060, 0, 0, 0, f(Yes, false, "")}, + {0x2070, 0, 0, 0, g(Yes, No, false, false, "", "0")}, + {0x2071, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x2072, 0, 0, 0, f(Yes, false, "")}, + {0x2074, 0, 0, 0, g(Yes, No, false, false, "", "4")}, + {0x2075, 0, 0, 0, g(Yes, No, false, false, "", "5")}, + {0x2076, 0, 0, 0, g(Yes, No, false, false, "", "6")}, + {0x2077, 0, 0, 0, g(Yes, No, false, false, "", "7")}, + {0x2078, 0, 0, 0, g(Yes, No, false, false, "", "8")}, + {0x2079, 0, 0, 0, g(Yes, No, false, false, "", "9")}, + {0x207a, 0, 0, 0, g(Yes, No, false, false, "", "+")}, + {0x207b, 0, 0, 0, g(Yes, No, false, false, "", "−")}, + {0x207c, 0, 0, 0, g(Yes, No, false, false, "", "=")}, + {0x207d, 0, 0, 0, g(Yes, No, false, false, "", "(")}, + {0x207e, 0, 0, 0, g(Yes, No, false, false, "", ")")}, + {0x207f, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0x2080, 0, 0, 0, g(Yes, No, false, false, "", "0")}, + {0x2081, 0, 0, 0, g(Yes, No, false, false, "", "1")}, + {0x2082, 0, 0, 0, g(Yes, No, false, false, "", "2")}, + {0x2083, 0, 0, 0, g(Yes, No, false, false, "", "3")}, + {0x2084, 0, 0, 0, g(Yes, No, false, false, "", "4")}, + {0x2085, 0, 0, 0, g(Yes, No, false, false, "", "5")}, + {0x2086, 0, 0, 0, g(Yes, No, false, false, "", "6")}, + {0x2087, 0, 0, 0, g(Yes, No, false, false, "", "7")}, + {0x2088, 0, 0, 0, g(Yes, No, false, false, "", "8")}, + {0x2089, 0, 0, 0, g(Yes, No, false, false, "", "9")}, + {0x208a, 0, 0, 0, g(Yes, No, false, false, "", "+")}, + {0x208b, 0, 0, 0, g(Yes, No, false, false, "", "−")}, + {0x208c, 0, 0, 0, g(Yes, No, false, false, "", "=")}, + {0x208d, 0, 0, 0, g(Yes, No, false, false, "", "(")}, + {0x208e, 0, 0, 0, g(Yes, No, false, false, "", ")")}, + {0x208f, 0, 0, 0, f(Yes, false, "")}, + {0x2090, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0x2091, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x2092, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0x2093, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x2094, 0, 0, 0, g(Yes, No, false, false, "", "ə")}, + {0x2095, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0x2096, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0x2097, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x2098, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x2099, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0x209a, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0x209b, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0x209c, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0x209d, 0, 0, 0, f(Yes, false, "")}, + {0x20a8, 0, 0, 0, g(Yes, No, false, false, "", "Rs")}, + {0x20a9, 0, 0, 0, f(Yes, false, "")}, + {0x20d0, 230, 1, 1, f(Yes, false, "")}, + {0x20d2, 1, 1, 1, f(Yes, false, "")}, + {0x20d4, 230, 1, 1, f(Yes, false, "")}, + {0x20d8, 1, 1, 1, f(Yes, false, "")}, + {0x20db, 230, 1, 1, f(Yes, false, "")}, + {0x20dd, 0, 0, 0, f(Yes, false, "")}, + {0x20e1, 230, 1, 1, f(Yes, false, "")}, + {0x20e2, 0, 0, 0, f(Yes, false, "")}, + {0x20e5, 1, 1, 1, f(Yes, false, "")}, + {0x20e7, 230, 1, 1, f(Yes, false, "")}, + {0x20e8, 220, 1, 1, f(Yes, false, "")}, + {0x20e9, 230, 1, 1, f(Yes, false, "")}, + {0x20ea, 1, 1, 1, f(Yes, false, "")}, + {0x20ec, 220, 1, 1, f(Yes, false, "")}, + {0x20f0, 230, 1, 1, f(Yes, false, "")}, + {0x20f1, 0, 0, 0, f(Yes, false, "")}, + {0x2100, 0, 0, 0, g(Yes, No, false, false, "", "a/c")}, + {0x2101, 0, 0, 0, g(Yes, No, false, false, "", "a/s")}, + {0x2102, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x2103, 0, 0, 0, g(Yes, No, false, false, "", "°C")}, + {0x2104, 0, 0, 0, f(Yes, false, "")}, + {0x2105, 0, 0, 0, g(Yes, No, false, false, "", "c/o")}, + {0x2106, 0, 0, 0, g(Yes, No, false, false, "", "c/u")}, + {0x2107, 0, 0, 0, g(Yes, No, false, false, "", "Ɛ")}, + {0x2108, 0, 0, 0, f(Yes, false, "")}, + {0x2109, 0, 0, 0, g(Yes, No, false, false, "", "°F")}, + {0x210a, 0, 0, 0, g(Yes, No, false, false, "", "g")}, + {0x210b, 0, 0, 0, g(Yes, No, false, false, "", "H")}, + {0x210e, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0x210f, 0, 0, 0, g(Yes, No, false, false, "", "ħ")}, + {0x2110, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0x2112, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x2113, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x2114, 0, 0, 0, f(Yes, false, "")}, + {0x2115, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0x2116, 0, 0, 0, g(Yes, No, false, false, "", "No")}, + {0x2117, 0, 0, 0, f(Yes, false, "")}, + {0x2119, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0x211a, 0, 0, 0, g(Yes, No, false, false, "", "Q")}, + {0x211b, 0, 0, 0, g(Yes, No, false, false, "", "R")}, + {0x211e, 0, 0, 0, f(Yes, false, "")}, + {0x2120, 0, 0, 0, g(Yes, No, false, false, "", "SM")}, + {0x2121, 0, 0, 0, g(Yes, No, false, false, "", "TEL")}, + {0x2122, 0, 0, 0, g(Yes, No, false, false, "", "TM")}, + {0x2123, 0, 0, 0, f(Yes, false, "")}, + {0x2124, 0, 0, 0, g(Yes, No, false, false, "", "Z")}, + {0x2125, 0, 0, 0, f(Yes, false, "")}, + {0x2126, 0, 0, 0, f(No, false, "Ω")}, + {0x2127, 0, 0, 0, f(Yes, false, "")}, + {0x2128, 0, 0, 0, g(Yes, No, false, false, "", "Z")}, + {0x2129, 0, 0, 0, f(Yes, false, "")}, + {0x212a, 0, 0, 0, f(No, false, "K")}, + {0x212b, 0, 0, 1, f(No, false, "Å")}, + {0x212c, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0x212d, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x212e, 0, 0, 0, f(Yes, false, "")}, + {0x212f, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x2130, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0x2131, 0, 0, 0, g(Yes, No, false, false, "", "F")}, + {0x2132, 0, 0, 0, f(Yes, false, "")}, + {0x2133, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x2134, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0x2135, 0, 0, 0, g(Yes, No, false, false, "", "א")}, + {0x2136, 0, 0, 0, g(Yes, No, false, false, "", "ב")}, + {0x2137, 0, 0, 0, g(Yes, No, false, false, "", "ג")}, + {0x2138, 0, 0, 0, g(Yes, No, false, false, "", "ד")}, + {0x2139, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x213a, 0, 0, 0, f(Yes, false, "")}, + {0x213b, 0, 0, 0, g(Yes, No, false, false, "", "FAX")}, + {0x213c, 0, 0, 0, g(Yes, No, false, false, "", "π")}, + {0x213d, 0, 0, 0, g(Yes, No, false, false, "", "γ")}, + {0x213e, 0, 0, 0, g(Yes, No, false, false, "", "Γ")}, + {0x213f, 0, 0, 0, g(Yes, No, false, false, "", "Π")}, + {0x2140, 0, 0, 0, g(Yes, No, false, false, "", "∑")}, + {0x2141, 0, 0, 0, f(Yes, false, "")}, + {0x2145, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x2146, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x2147, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x2148, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x2149, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x214a, 0, 0, 0, f(Yes, false, "")}, + {0x2150, 0, 0, 0, g(Yes, No, false, false, "", "1⁄7")}, + {0x2151, 0, 0, 0, g(Yes, No, false, false, "", "1⁄9")}, + {0x2152, 0, 0, 0, g(Yes, No, false, false, "", "1⁄10")}, + {0x2153, 0, 0, 0, g(Yes, No, false, false, "", "1⁄3")}, + {0x2154, 0, 0, 0, g(Yes, No, false, false, "", "2⁄3")}, + {0x2155, 0, 0, 0, g(Yes, No, false, false, "", "1⁄5")}, + {0x2156, 0, 0, 0, g(Yes, No, false, false, "", "2⁄5")}, + {0x2157, 0, 0, 0, g(Yes, No, false, false, "", "3⁄5")}, + {0x2158, 0, 0, 0, g(Yes, No, false, false, "", "4⁄5")}, + {0x2159, 0, 0, 0, g(Yes, No, false, false, "", "1⁄6")}, + {0x215a, 0, 0, 0, g(Yes, No, false, false, "", "5⁄6")}, + {0x215b, 0, 0, 0, g(Yes, No, false, false, "", "1⁄8")}, + {0x215c, 0, 0, 0, g(Yes, No, false, false, "", "3⁄8")}, + {0x215d, 0, 0, 0, g(Yes, No, false, false, "", "5⁄8")}, + {0x215e, 0, 0, 0, g(Yes, No, false, false, "", "7⁄8")}, + {0x215f, 0, 0, 0, g(Yes, No, false, false, "", "1⁄")}, + {0x2160, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0x2161, 0, 0, 0, g(Yes, No, false, false, "", "II")}, + {0x2162, 0, 0, 0, g(Yes, No, false, false, "", "III")}, + {0x2163, 0, 0, 0, g(Yes, No, false, false, "", "IV")}, + {0x2164, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x2165, 0, 0, 0, g(Yes, No, false, false, "", "VI")}, + {0x2166, 0, 0, 0, g(Yes, No, false, false, "", "VII")}, + {0x2167, 0, 0, 0, g(Yes, No, false, false, "", "VIII")}, + {0x2168, 0, 0, 0, g(Yes, No, false, false, "", "IX")}, + {0x2169, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0x216a, 0, 0, 0, g(Yes, No, false, false, "", "XI")}, + {0x216b, 0, 0, 0, g(Yes, No, false, false, "", "XII")}, + {0x216c, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x216d, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x216e, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x216f, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x2170, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x2171, 0, 0, 0, g(Yes, No, false, false, "", "ii")}, + {0x2172, 0, 0, 0, g(Yes, No, false, false, "", "iii")}, + {0x2173, 0, 0, 0, g(Yes, No, false, false, "", "iv")}, + {0x2174, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x2175, 0, 0, 0, g(Yes, No, false, false, "", "vi")}, + {0x2176, 0, 0, 0, g(Yes, No, false, false, "", "vii")}, + {0x2177, 0, 0, 0, g(Yes, No, false, false, "", "viii")}, + {0x2178, 0, 0, 0, g(Yes, No, false, false, "", "ix")}, + {0x2179, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x217a, 0, 0, 0, g(Yes, No, false, false, "", "xi")}, + {0x217b, 0, 0, 0, g(Yes, No, false, false, "", "xii")}, + {0x217c, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x217d, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0x217e, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x217f, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x2180, 0, 0, 0, f(Yes, false, "")}, + {0x2189, 0, 0, 0, g(Yes, No, false, false, "", "0⁄3")}, + {0x218a, 0, 0, 0, f(Yes, false, "")}, + {0x2190, 0, 0, 0, f(Yes, true, "")}, + {0x2191, 0, 0, 0, f(Yes, false, "")}, + {0x2192, 0, 0, 0, f(Yes, true, "")}, + {0x2193, 0, 0, 0, f(Yes, false, "")}, + {0x2194, 0, 0, 0, f(Yes, true, "")}, + {0x2195, 0, 0, 0, f(Yes, false, "")}, + {0x219a, 0, 0, 1, f(Yes, false, "↚")}, + {0x219b, 0, 0, 1, f(Yes, false, "↛")}, + {0x219c, 0, 0, 0, f(Yes, false, "")}, + {0x21ae, 0, 0, 1, f(Yes, false, "↮")}, + {0x21af, 0, 0, 0, f(Yes, false, "")}, + {0x21cd, 0, 0, 1, f(Yes, false, "⇍")}, + {0x21ce, 0, 0, 1, f(Yes, false, "⇎")}, + {0x21cf, 0, 0, 1, f(Yes, false, "⇏")}, + {0x21d0, 0, 0, 0, f(Yes, true, "")}, + {0x21d1, 0, 0, 0, f(Yes, false, "")}, + {0x21d2, 0, 0, 0, f(Yes, true, "")}, + {0x21d3, 0, 0, 0, f(Yes, false, "")}, + {0x21d4, 0, 0, 0, f(Yes, true, "")}, + {0x21d5, 0, 0, 0, f(Yes, false, "")}, + {0x2203, 0, 0, 0, f(Yes, true, "")}, + {0x2204, 0, 0, 1, f(Yes, false, "∄")}, + {0x2205, 0, 0, 0, f(Yes, false, "")}, + {0x2208, 0, 0, 0, f(Yes, true, "")}, + {0x2209, 0, 0, 1, f(Yes, false, "∉")}, + {0x220a, 0, 0, 0, f(Yes, false, "")}, + {0x220b, 0, 0, 0, f(Yes, true, "")}, + {0x220c, 0, 0, 1, f(Yes, false, "∌")}, + {0x220d, 0, 0, 0, f(Yes, false, "")}, + {0x2223, 0, 0, 0, f(Yes, true, "")}, + {0x2224, 0, 0, 1, f(Yes, false, "∤")}, + {0x2225, 0, 0, 0, f(Yes, true, "")}, + {0x2226, 0, 0, 1, f(Yes, false, "∦")}, + {0x2227, 0, 0, 0, f(Yes, false, "")}, + {0x222c, 0, 0, 0, g(Yes, No, false, false, "", "∫∫")}, + {0x222d, 0, 0, 0, g(Yes, No, false, false, "", "∫∫∫")}, + {0x222e, 0, 0, 0, f(Yes, false, "")}, + {0x222f, 0, 0, 0, g(Yes, No, false, false, "", "∮∮")}, + {0x2230, 0, 0, 0, g(Yes, No, false, false, "", "∮∮∮")}, + {0x2231, 0, 0, 0, f(Yes, false, "")}, + {0x223c, 0, 0, 0, f(Yes, true, "")}, + {0x223d, 0, 0, 0, f(Yes, false, "")}, + {0x2241, 0, 0, 1, f(Yes, false, "≁")}, + {0x2242, 0, 0, 0, f(Yes, false, "")}, + {0x2243, 0, 0, 0, f(Yes, true, "")}, + {0x2244, 0, 0, 1, f(Yes, false, "≄")}, + {0x2245, 0, 0, 0, f(Yes, true, "")}, + {0x2246, 0, 0, 0, f(Yes, false, "")}, + {0x2247, 0, 0, 1, f(Yes, false, "≇")}, + {0x2248, 0, 0, 0, f(Yes, true, "")}, + {0x2249, 0, 0, 1, f(Yes, false, "≉")}, + {0x224a, 0, 0, 0, f(Yes, false, "")}, + {0x224d, 0, 0, 0, f(Yes, true, "")}, + {0x224e, 0, 0, 0, f(Yes, false, "")}, + {0x2260, 0, 0, 1, f(Yes, false, "≠")}, + {0x2261, 0, 0, 0, f(Yes, true, "")}, + {0x2262, 0, 0, 1, f(Yes, false, "≢")}, + {0x2263, 0, 0, 0, f(Yes, false, "")}, + {0x2264, 0, 0, 0, f(Yes, true, "")}, + {0x2266, 0, 0, 0, f(Yes, false, "")}, + {0x226d, 0, 0, 1, f(Yes, false, "≭")}, + {0x226e, 0, 0, 1, f(Yes, false, "≮")}, + {0x226f, 0, 0, 1, f(Yes, false, "≯")}, + {0x2270, 0, 0, 1, f(Yes, false, "≰")}, + {0x2271, 0, 0, 1, f(Yes, false, "≱")}, + {0x2272, 0, 0, 0, f(Yes, true, "")}, + {0x2274, 0, 0, 1, f(Yes, false, "≴")}, + {0x2275, 0, 0, 1, f(Yes, false, "≵")}, + {0x2276, 0, 0, 0, f(Yes, true, "")}, + {0x2278, 0, 0, 1, f(Yes, false, "≸")}, + {0x2279, 0, 0, 1, f(Yes, false, "≹")}, + {0x227a, 0, 0, 0, f(Yes, true, "")}, + {0x227e, 0, 0, 0, f(Yes, false, "")}, + {0x2280, 0, 0, 1, f(Yes, false, "⊀")}, + {0x2281, 0, 0, 1, f(Yes, false, "⊁")}, + {0x2282, 0, 0, 0, f(Yes, true, "")}, + {0x2284, 0, 0, 1, f(Yes, false, "⊄")}, + {0x2285, 0, 0, 1, f(Yes, false, "⊅")}, + {0x2286, 0, 0, 0, f(Yes, true, "")}, + {0x2288, 0, 0, 1, f(Yes, false, "⊈")}, + {0x2289, 0, 0, 1, f(Yes, false, "⊉")}, + {0x228a, 0, 0, 0, f(Yes, false, "")}, + {0x2291, 0, 0, 0, f(Yes, true, "")}, + {0x2293, 0, 0, 0, f(Yes, false, "")}, + {0x22a2, 0, 0, 0, f(Yes, true, "")}, + {0x22a3, 0, 0, 0, f(Yes, false, "")}, + {0x22a8, 0, 0, 0, f(Yes, true, "")}, + {0x22aa, 0, 0, 0, f(Yes, false, "")}, + {0x22ab, 0, 0, 0, f(Yes, true, "")}, + {0x22ac, 0, 0, 1, f(Yes, false, "⊬")}, + {0x22ad, 0, 0, 1, f(Yes, false, "⊭")}, + {0x22ae, 0, 0, 1, f(Yes, false, "⊮")}, + {0x22af, 0, 0, 1, f(Yes, false, "⊯")}, + {0x22b0, 0, 0, 0, f(Yes, false, "")}, + {0x22b2, 0, 0, 0, f(Yes, true, "")}, + {0x22b6, 0, 0, 0, f(Yes, false, "")}, + {0x22e0, 0, 0, 1, f(Yes, false, "⋠")}, + {0x22e1, 0, 0, 1, f(Yes, false, "⋡")}, + {0x22e2, 0, 0, 1, f(Yes, false, "⋢")}, + {0x22e3, 0, 0, 1, f(Yes, false, "⋣")}, + {0x22e4, 0, 0, 0, f(Yes, false, "")}, + {0x22ea, 0, 0, 1, f(Yes, false, "⋪")}, + {0x22eb, 0, 0, 1, f(Yes, false, "⋫")}, + {0x22ec, 0, 0, 1, f(Yes, false, "⋬")}, + {0x22ed, 0, 0, 1, f(Yes, false, "⋭")}, + {0x22ee, 0, 0, 0, f(Yes, false, "")}, + {0x2329, 0, 0, 0, f(No, false, "〈")}, + {0x232a, 0, 0, 0, f(No, false, "〉")}, + {0x232b, 0, 0, 0, f(Yes, false, "")}, + {0x2460, 0, 0, 0, g(Yes, No, false, false, "", "1")}, + {0x2461, 0, 0, 0, g(Yes, No, false, false, "", "2")}, + {0x2462, 0, 0, 0, g(Yes, No, false, false, "", "3")}, + {0x2463, 0, 0, 0, g(Yes, No, false, false, "", "4")}, + {0x2464, 0, 0, 0, g(Yes, No, false, false, "", "5")}, + {0x2465, 0, 0, 0, g(Yes, No, false, false, "", "6")}, + {0x2466, 0, 0, 0, g(Yes, No, false, false, "", "7")}, + {0x2467, 0, 0, 0, g(Yes, No, false, false, "", "8")}, + {0x2468, 0, 0, 0, g(Yes, No, false, false, "", "9")}, + {0x2469, 0, 0, 0, g(Yes, No, false, false, "", "10")}, + {0x246a, 0, 0, 0, g(Yes, No, false, false, "", "11")}, + {0x246b, 0, 0, 0, g(Yes, No, false, false, "", "12")}, + {0x246c, 0, 0, 0, g(Yes, No, false, false, "", "13")}, + {0x246d, 0, 0, 0, g(Yes, No, false, false, "", "14")}, + {0x246e, 0, 0, 0, g(Yes, No, false, false, "", "15")}, + {0x246f, 0, 0, 0, g(Yes, No, false, false, "", "16")}, + {0x2470, 0, 0, 0, g(Yes, No, false, false, "", "17")}, + {0x2471, 0, 0, 0, g(Yes, No, false, false, "", "18")}, + {0x2472, 0, 0, 0, g(Yes, No, false, false, "", "19")}, + {0x2473, 0, 0, 0, g(Yes, No, false, false, "", "20")}, + {0x2474, 0, 0, 0, g(Yes, No, false, false, "", "(1)")}, + {0x2475, 0, 0, 0, g(Yes, No, false, false, "", "(2)")}, + {0x2476, 0, 0, 0, g(Yes, No, false, false, "", "(3)")}, + {0x2477, 0, 0, 0, g(Yes, No, false, false, "", "(4)")}, + {0x2478, 0, 0, 0, g(Yes, No, false, false, "", "(5)")}, + {0x2479, 0, 0, 0, g(Yes, No, false, false, "", "(6)")}, + {0x247a, 0, 0, 0, g(Yes, No, false, false, "", "(7)")}, + {0x247b, 0, 0, 0, g(Yes, No, false, false, "", "(8)")}, + {0x247c, 0, 0, 0, g(Yes, No, false, false, "", "(9)")}, + {0x247d, 0, 0, 0, g(Yes, No, false, false, "", "(10)")}, + {0x247e, 0, 0, 0, g(Yes, No, false, false, "", "(11)")}, + {0x247f, 0, 0, 0, g(Yes, No, false, false, "", "(12)")}, + {0x2480, 0, 0, 0, g(Yes, No, false, false, "", "(13)")}, + {0x2481, 0, 0, 0, g(Yes, No, false, false, "", "(14)")}, + {0x2482, 0, 0, 0, g(Yes, No, false, false, "", "(15)")}, + {0x2483, 0, 0, 0, g(Yes, No, false, false, "", "(16)")}, + {0x2484, 0, 0, 0, g(Yes, No, false, false, "", "(17)")}, + {0x2485, 0, 0, 0, g(Yes, No, false, false, "", "(18)")}, + {0x2486, 0, 0, 0, g(Yes, No, false, false, "", "(19)")}, + {0x2487, 0, 0, 0, g(Yes, No, false, false, "", "(20)")}, + {0x2488, 0, 0, 0, g(Yes, No, false, false, "", "1.")}, + {0x2489, 0, 0, 0, g(Yes, No, false, false, "", "2.")}, + {0x248a, 0, 0, 0, g(Yes, No, false, false, "", "3.")}, + {0x248b, 0, 0, 0, g(Yes, No, false, false, "", "4.")}, + {0x248c, 0, 0, 0, g(Yes, No, false, false, "", "5.")}, + {0x248d, 0, 0, 0, g(Yes, No, false, false, "", "6.")}, + {0x248e, 0, 0, 0, g(Yes, No, false, false, "", "7.")}, + {0x248f, 0, 0, 0, g(Yes, No, false, false, "", "8.")}, + {0x2490, 0, 0, 0, g(Yes, No, false, false, "", "9.")}, + {0x2491, 0, 0, 0, g(Yes, No, false, false, "", "10.")}, + {0x2492, 0, 0, 0, g(Yes, No, false, false, "", "11.")}, + {0x2493, 0, 0, 0, g(Yes, No, false, false, "", "12.")}, + {0x2494, 0, 0, 0, g(Yes, No, false, false, "", "13.")}, + {0x2495, 0, 0, 0, g(Yes, No, false, false, "", "14.")}, + {0x2496, 0, 0, 0, g(Yes, No, false, false, "", "15.")}, + {0x2497, 0, 0, 0, g(Yes, No, false, false, "", "16.")}, + {0x2498, 0, 0, 0, g(Yes, No, false, false, "", "17.")}, + {0x2499, 0, 0, 0, g(Yes, No, false, false, "", "18.")}, + {0x249a, 0, 0, 0, g(Yes, No, false, false, "", "19.")}, + {0x249b, 0, 0, 0, g(Yes, No, false, false, "", "20.")}, + {0x249c, 0, 0, 0, g(Yes, No, false, false, "", "(a)")}, + {0x249d, 0, 0, 0, g(Yes, No, false, false, "", "(b)")}, + {0x249e, 0, 0, 0, g(Yes, No, false, false, "", "(c)")}, + {0x249f, 0, 0, 0, g(Yes, No, false, false, "", "(d)")}, + {0x24a0, 0, 0, 0, g(Yes, No, false, false, "", "(e)")}, + {0x24a1, 0, 0, 0, g(Yes, No, false, false, "", "(f)")}, + {0x24a2, 0, 0, 0, g(Yes, No, false, false, "", "(g)")}, + {0x24a3, 0, 0, 0, g(Yes, No, false, false, "", "(h)")}, + {0x24a4, 0, 0, 0, g(Yes, No, false, false, "", "(i)")}, + {0x24a5, 0, 0, 0, g(Yes, No, false, false, "", "(j)")}, + {0x24a6, 0, 0, 0, g(Yes, No, false, false, "", "(k)")}, + {0x24a7, 0, 0, 0, g(Yes, No, false, false, "", "(l)")}, + {0x24a8, 0, 0, 0, g(Yes, No, false, false, "", "(m)")}, + {0x24a9, 0, 0, 0, g(Yes, No, false, false, "", "(n)")}, + {0x24aa, 0, 0, 0, g(Yes, No, false, false, "", "(o)")}, + {0x24ab, 0, 0, 0, g(Yes, No, false, false, "", "(p)")}, + {0x24ac, 0, 0, 0, g(Yes, No, false, false, "", "(q)")}, + {0x24ad, 0, 0, 0, g(Yes, No, false, false, "", "(r)")}, + {0x24ae, 0, 0, 0, g(Yes, No, false, false, "", "(s)")}, + {0x24af, 0, 0, 0, g(Yes, No, false, false, "", "(t)")}, + {0x24b0, 0, 0, 0, g(Yes, No, false, false, "", "(u)")}, + {0x24b1, 0, 0, 0, g(Yes, No, false, false, "", "(v)")}, + {0x24b2, 0, 0, 0, g(Yes, No, false, false, "", "(w)")}, + {0x24b3, 0, 0, 0, g(Yes, No, false, false, "", "(x)")}, + {0x24b4, 0, 0, 0, g(Yes, No, false, false, "", "(y)")}, + {0x24b5, 0, 0, 0, g(Yes, No, false, false, "", "(z)")}, + {0x24b6, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0x24b7, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0x24b8, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x24b9, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x24ba, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0x24bb, 0, 0, 0, g(Yes, No, false, false, "", "F")}, + {0x24bc, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0x24bd, 0, 0, 0, g(Yes, No, false, false, "", "H")}, + {0x24be, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0x24bf, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0x24c0, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0x24c1, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x24c2, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x24c3, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0x24c4, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0x24c5, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0x24c6, 0, 0, 0, g(Yes, No, false, false, "", "Q")}, + {0x24c7, 0, 0, 0, g(Yes, No, false, false, "", "R")}, + {0x24c8, 0, 0, 0, g(Yes, No, false, false, "", "S")}, + {0x24c9, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0x24ca, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0x24cb, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x24cc, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0x24cd, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0x24ce, 0, 0, 0, g(Yes, No, false, false, "", "Y")}, + {0x24cf, 0, 0, 0, g(Yes, No, false, false, "", "Z")}, + {0x24d0, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0x24d1, 0, 0, 0, g(Yes, No, false, false, "", "b")}, + {0x24d2, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0x24d3, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x24d4, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x24d5, 0, 0, 0, g(Yes, No, false, false, "", "f")}, + {0x24d6, 0, 0, 0, g(Yes, No, false, false, "", "g")}, + {0x24d7, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0x24d8, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x24d9, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x24da, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0x24db, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x24dc, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x24dd, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0x24de, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0x24df, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0x24e0, 0, 0, 0, g(Yes, No, false, false, "", "q")}, + {0x24e1, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0x24e2, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0x24e3, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0x24e4, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0x24e5, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x24e6, 0, 0, 0, g(Yes, No, false, false, "", "w")}, + {0x24e7, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x24e8, 0, 0, 0, g(Yes, No, false, false, "", "y")}, + {0x24e9, 0, 0, 0, g(Yes, No, false, false, "", "z")}, + {0x24ea, 0, 0, 0, g(Yes, No, false, false, "", "0")}, + {0x24eb, 0, 0, 0, f(Yes, false, "")}, + {0x2a0c, 0, 0, 0, g(Yes, No, false, false, "", "∫∫∫∫")}, + {0x2a0d, 0, 0, 0, f(Yes, false, "")}, + {0x2a74, 0, 0, 0, g(Yes, No, false, false, "", "::=")}, + {0x2a75, 0, 0, 0, g(Yes, No, false, false, "", "==")}, + {0x2a76, 0, 0, 0, g(Yes, No, false, false, "", "===")}, + {0x2a77, 0, 0, 0, f(Yes, false, "")}, + {0x2adc, 0, 0, 1, f(No, false, "⫝̸")}, + {0x2add, 0, 0, 0, f(Yes, false, "")}, + {0x2c7c, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x2c7d, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x2c7e, 0, 0, 0, f(Yes, false, "")}, + {0x2cef, 230, 1, 1, f(Yes, false, "")}, + {0x2cf2, 0, 0, 0, f(Yes, false, "")}, + {0x2d6f, 0, 0, 0, g(Yes, No, false, false, "", "ⵡ")}, + {0x2d70, 0, 0, 0, f(Yes, false, "")}, + {0x2d7f, 9, 1, 1, f(Yes, false, "")}, + {0x2d80, 0, 0, 0, f(Yes, false, "")}, + {0x2de0, 230, 1, 1, f(Yes, false, "")}, + {0x2e00, 0, 0, 0, f(Yes, false, "")}, + {0x2e9f, 0, 0, 0, g(Yes, No, false, false, "", "母")}, + {0x2ea0, 0, 0, 0, f(Yes, false, "")}, + {0x2ef3, 0, 0, 0, g(Yes, No, false, false, "", "龟")}, + {0x2ef4, 0, 0, 0, f(Yes, false, "")}, + {0x2f00, 0, 0, 0, g(Yes, No, false, false, "", "一")}, + {0x2f01, 0, 0, 0, g(Yes, No, false, false, "", "丨")}, + {0x2f02, 0, 0, 0, g(Yes, No, false, false, "", "丶")}, + {0x2f03, 0, 0, 0, g(Yes, No, false, false, "", "丿")}, + {0x2f04, 0, 0, 0, g(Yes, No, false, false, "", "乙")}, + {0x2f05, 0, 0, 0, g(Yes, No, false, false, "", "亅")}, + {0x2f06, 0, 0, 0, g(Yes, No, false, false, "", "二")}, + {0x2f07, 0, 0, 0, g(Yes, No, false, false, "", "亠")}, + {0x2f08, 0, 0, 0, g(Yes, No, false, false, "", "人")}, + {0x2f09, 0, 0, 0, g(Yes, No, false, false, "", "儿")}, + {0x2f0a, 0, 0, 0, g(Yes, No, false, false, "", "入")}, + {0x2f0b, 0, 0, 0, g(Yes, No, false, false, "", "八")}, + {0x2f0c, 0, 0, 0, g(Yes, No, false, false, "", "冂")}, + {0x2f0d, 0, 0, 0, g(Yes, No, false, false, "", "冖")}, + {0x2f0e, 0, 0, 0, g(Yes, No, false, false, "", "冫")}, + {0x2f0f, 0, 0, 0, g(Yes, No, false, false, "", "几")}, + {0x2f10, 0, 0, 0, g(Yes, No, false, false, "", "凵")}, + {0x2f11, 0, 0, 0, g(Yes, No, false, false, "", "刀")}, + {0x2f12, 0, 0, 0, g(Yes, No, false, false, "", "力")}, + {0x2f13, 0, 0, 0, g(Yes, No, false, false, "", "勹")}, + {0x2f14, 0, 0, 0, g(Yes, No, false, false, "", "匕")}, + {0x2f15, 0, 0, 0, g(Yes, No, false, false, "", "匚")}, + {0x2f16, 0, 0, 0, g(Yes, No, false, false, "", "匸")}, + {0x2f17, 0, 0, 0, g(Yes, No, false, false, "", "十")}, + {0x2f18, 0, 0, 0, g(Yes, No, false, false, "", "卜")}, + {0x2f19, 0, 0, 0, g(Yes, No, false, false, "", "卩")}, + {0x2f1a, 0, 0, 0, g(Yes, No, false, false, "", "厂")}, + {0x2f1b, 0, 0, 0, g(Yes, No, false, false, "", "厶")}, + {0x2f1c, 0, 0, 0, g(Yes, No, false, false, "", "又")}, + {0x2f1d, 0, 0, 0, g(Yes, No, false, false, "", "口")}, + {0x2f1e, 0, 0, 0, g(Yes, No, false, false, "", "囗")}, + {0x2f1f, 0, 0, 0, g(Yes, No, false, false, "", "土")}, + {0x2f20, 0, 0, 0, g(Yes, No, false, false, "", "士")}, + {0x2f21, 0, 0, 0, g(Yes, No, false, false, "", "夂")}, + {0x2f22, 0, 0, 0, g(Yes, No, false, false, "", "夊")}, + {0x2f23, 0, 0, 0, g(Yes, No, false, false, "", "夕")}, + {0x2f24, 0, 0, 0, g(Yes, No, false, false, "", "大")}, + {0x2f25, 0, 0, 0, g(Yes, No, false, false, "", "女")}, + {0x2f26, 0, 0, 0, g(Yes, No, false, false, "", "子")}, + {0x2f27, 0, 0, 0, g(Yes, No, false, false, "", "宀")}, + {0x2f28, 0, 0, 0, g(Yes, No, false, false, "", "寸")}, + {0x2f29, 0, 0, 0, g(Yes, No, false, false, "", "小")}, + {0x2f2a, 0, 0, 0, g(Yes, No, false, false, "", "尢")}, + {0x2f2b, 0, 0, 0, g(Yes, No, false, false, "", "尸")}, + {0x2f2c, 0, 0, 0, g(Yes, No, false, false, "", "屮")}, + {0x2f2d, 0, 0, 0, g(Yes, No, false, false, "", "山")}, + {0x2f2e, 0, 0, 0, g(Yes, No, false, false, "", "巛")}, + {0x2f2f, 0, 0, 0, g(Yes, No, false, false, "", "工")}, + {0x2f30, 0, 0, 0, g(Yes, No, false, false, "", "己")}, + {0x2f31, 0, 0, 0, g(Yes, No, false, false, "", "巾")}, + {0x2f32, 0, 0, 0, g(Yes, No, false, false, "", "干")}, + {0x2f33, 0, 0, 0, g(Yes, No, false, false, "", "幺")}, + {0x2f34, 0, 0, 0, g(Yes, No, false, false, "", "广")}, + {0x2f35, 0, 0, 0, g(Yes, No, false, false, "", "廴")}, + {0x2f36, 0, 0, 0, g(Yes, No, false, false, "", "廾")}, + {0x2f37, 0, 0, 0, g(Yes, No, false, false, "", "弋")}, + {0x2f38, 0, 0, 0, g(Yes, No, false, false, "", "弓")}, + {0x2f39, 0, 0, 0, g(Yes, No, false, false, "", "彐")}, + {0x2f3a, 0, 0, 0, g(Yes, No, false, false, "", "彡")}, + {0x2f3b, 0, 0, 0, g(Yes, No, false, false, "", "彳")}, + {0x2f3c, 0, 0, 0, g(Yes, No, false, false, "", "心")}, + {0x2f3d, 0, 0, 0, g(Yes, No, false, false, "", "戈")}, + {0x2f3e, 0, 0, 0, g(Yes, No, false, false, "", "戶")}, + {0x2f3f, 0, 0, 0, g(Yes, No, false, false, "", "手")}, + {0x2f40, 0, 0, 0, g(Yes, No, false, false, "", "支")}, + {0x2f41, 0, 0, 0, g(Yes, No, false, false, "", "攴")}, + {0x2f42, 0, 0, 0, g(Yes, No, false, false, "", "文")}, + {0x2f43, 0, 0, 0, g(Yes, No, false, false, "", "斗")}, + {0x2f44, 0, 0, 0, g(Yes, No, false, false, "", "斤")}, + {0x2f45, 0, 0, 0, g(Yes, No, false, false, "", "方")}, + {0x2f46, 0, 0, 0, g(Yes, No, false, false, "", "无")}, + {0x2f47, 0, 0, 0, g(Yes, No, false, false, "", "日")}, + {0x2f48, 0, 0, 0, g(Yes, No, false, false, "", "曰")}, + {0x2f49, 0, 0, 0, g(Yes, No, false, false, "", "月")}, + {0x2f4a, 0, 0, 0, g(Yes, No, false, false, "", "木")}, + {0x2f4b, 0, 0, 0, g(Yes, No, false, false, "", "欠")}, + {0x2f4c, 0, 0, 0, g(Yes, No, false, false, "", "止")}, + {0x2f4d, 0, 0, 0, g(Yes, No, false, false, "", "歹")}, + {0x2f4e, 0, 0, 0, g(Yes, No, false, false, "", "殳")}, + {0x2f4f, 0, 0, 0, g(Yes, No, false, false, "", "毋")}, + {0x2f50, 0, 0, 0, g(Yes, No, false, false, "", "比")}, + {0x2f51, 0, 0, 0, g(Yes, No, false, false, "", "毛")}, + {0x2f52, 0, 0, 0, g(Yes, No, false, false, "", "氏")}, + {0x2f53, 0, 0, 0, g(Yes, No, false, false, "", "气")}, + {0x2f54, 0, 0, 0, g(Yes, No, false, false, "", "水")}, + {0x2f55, 0, 0, 0, g(Yes, No, false, false, "", "火")}, + {0x2f56, 0, 0, 0, g(Yes, No, false, false, "", "爪")}, + {0x2f57, 0, 0, 0, g(Yes, No, false, false, "", "父")}, + {0x2f58, 0, 0, 0, g(Yes, No, false, false, "", "爻")}, + {0x2f59, 0, 0, 0, g(Yes, No, false, false, "", "爿")}, + {0x2f5a, 0, 0, 0, g(Yes, No, false, false, "", "片")}, + {0x2f5b, 0, 0, 0, g(Yes, No, false, false, "", "牙")}, + {0x2f5c, 0, 0, 0, g(Yes, No, false, false, "", "牛")}, + {0x2f5d, 0, 0, 0, g(Yes, No, false, false, "", "犬")}, + {0x2f5e, 0, 0, 0, g(Yes, No, false, false, "", "玄")}, + {0x2f5f, 0, 0, 0, g(Yes, No, false, false, "", "玉")}, + {0x2f60, 0, 0, 0, g(Yes, No, false, false, "", "瓜")}, + {0x2f61, 0, 0, 0, g(Yes, No, false, false, "", "瓦")}, + {0x2f62, 0, 0, 0, g(Yes, No, false, false, "", "甘")}, + {0x2f63, 0, 0, 0, g(Yes, No, false, false, "", "生")}, + {0x2f64, 0, 0, 0, g(Yes, No, false, false, "", "用")}, + {0x2f65, 0, 0, 0, g(Yes, No, false, false, "", "田")}, + {0x2f66, 0, 0, 0, g(Yes, No, false, false, "", "疋")}, + {0x2f67, 0, 0, 0, g(Yes, No, false, false, "", "疒")}, + {0x2f68, 0, 0, 0, g(Yes, No, false, false, "", "癶")}, + {0x2f69, 0, 0, 0, g(Yes, No, false, false, "", "白")}, + {0x2f6a, 0, 0, 0, g(Yes, No, false, false, "", "皮")}, + {0x2f6b, 0, 0, 0, g(Yes, No, false, false, "", "皿")}, + {0x2f6c, 0, 0, 0, g(Yes, No, false, false, "", "目")}, + {0x2f6d, 0, 0, 0, g(Yes, No, false, false, "", "矛")}, + {0x2f6e, 0, 0, 0, g(Yes, No, false, false, "", "矢")}, + {0x2f6f, 0, 0, 0, g(Yes, No, false, false, "", "石")}, + {0x2f70, 0, 0, 0, g(Yes, No, false, false, "", "示")}, + {0x2f71, 0, 0, 0, g(Yes, No, false, false, "", "禸")}, + {0x2f72, 0, 0, 0, g(Yes, No, false, false, "", "禾")}, + {0x2f73, 0, 0, 0, g(Yes, No, false, false, "", "穴")}, + {0x2f74, 0, 0, 0, g(Yes, No, false, false, "", "立")}, + {0x2f75, 0, 0, 0, g(Yes, No, false, false, "", "竹")}, + {0x2f76, 0, 0, 0, g(Yes, No, false, false, "", "米")}, + {0x2f77, 0, 0, 0, g(Yes, No, false, false, "", "糸")}, + {0x2f78, 0, 0, 0, g(Yes, No, false, false, "", "缶")}, + {0x2f79, 0, 0, 0, g(Yes, No, false, false, "", "网")}, + {0x2f7a, 0, 0, 0, g(Yes, No, false, false, "", "羊")}, + {0x2f7b, 0, 0, 0, g(Yes, No, false, false, "", "羽")}, + {0x2f7c, 0, 0, 0, g(Yes, No, false, false, "", "老")}, + {0x2f7d, 0, 0, 0, g(Yes, No, false, false, "", "而")}, + {0x2f7e, 0, 0, 0, g(Yes, No, false, false, "", "耒")}, + {0x2f7f, 0, 0, 0, g(Yes, No, false, false, "", "耳")}, + {0x2f80, 0, 0, 0, g(Yes, No, false, false, "", "聿")}, + {0x2f81, 0, 0, 0, g(Yes, No, false, false, "", "肉")}, + {0x2f82, 0, 0, 0, g(Yes, No, false, false, "", "臣")}, + {0x2f83, 0, 0, 0, g(Yes, No, false, false, "", "自")}, + {0x2f84, 0, 0, 0, g(Yes, No, false, false, "", "至")}, + {0x2f85, 0, 0, 0, g(Yes, No, false, false, "", "臼")}, + {0x2f86, 0, 0, 0, g(Yes, No, false, false, "", "舌")}, + {0x2f87, 0, 0, 0, g(Yes, No, false, false, "", "舛")}, + {0x2f88, 0, 0, 0, g(Yes, No, false, false, "", "舟")}, + {0x2f89, 0, 0, 0, g(Yes, No, false, false, "", "艮")}, + {0x2f8a, 0, 0, 0, g(Yes, No, false, false, "", "色")}, + {0x2f8b, 0, 0, 0, g(Yes, No, false, false, "", "艸")}, + {0x2f8c, 0, 0, 0, g(Yes, No, false, false, "", "虍")}, + {0x2f8d, 0, 0, 0, g(Yes, No, false, false, "", "虫")}, + {0x2f8e, 0, 0, 0, g(Yes, No, false, false, "", "血")}, + {0x2f8f, 0, 0, 0, g(Yes, No, false, false, "", "行")}, + {0x2f90, 0, 0, 0, g(Yes, No, false, false, "", "衣")}, + {0x2f91, 0, 0, 0, g(Yes, No, false, false, "", "襾")}, + {0x2f92, 0, 0, 0, g(Yes, No, false, false, "", "見")}, + {0x2f93, 0, 0, 0, g(Yes, No, false, false, "", "角")}, + {0x2f94, 0, 0, 0, g(Yes, No, false, false, "", "言")}, + {0x2f95, 0, 0, 0, g(Yes, No, false, false, "", "谷")}, + {0x2f96, 0, 0, 0, g(Yes, No, false, false, "", "豆")}, + {0x2f97, 0, 0, 0, g(Yes, No, false, false, "", "豕")}, + {0x2f98, 0, 0, 0, g(Yes, No, false, false, "", "豸")}, + {0x2f99, 0, 0, 0, g(Yes, No, false, false, "", "貝")}, + {0x2f9a, 0, 0, 0, g(Yes, No, false, false, "", "赤")}, + {0x2f9b, 0, 0, 0, g(Yes, No, false, false, "", "走")}, + {0x2f9c, 0, 0, 0, g(Yes, No, false, false, "", "足")}, + {0x2f9d, 0, 0, 0, g(Yes, No, false, false, "", "身")}, + {0x2f9e, 0, 0, 0, g(Yes, No, false, false, "", "車")}, + {0x2f9f, 0, 0, 0, g(Yes, No, false, false, "", "辛")}, + {0x2fa0, 0, 0, 0, g(Yes, No, false, false, "", "辰")}, + {0x2fa1, 0, 0, 0, g(Yes, No, false, false, "", "辵")}, + {0x2fa2, 0, 0, 0, g(Yes, No, false, false, "", "邑")}, + {0x2fa3, 0, 0, 0, g(Yes, No, false, false, "", "酉")}, + {0x2fa4, 0, 0, 0, g(Yes, No, false, false, "", "釆")}, + {0x2fa5, 0, 0, 0, g(Yes, No, false, false, "", "里")}, + {0x2fa6, 0, 0, 0, g(Yes, No, false, false, "", "金")}, + {0x2fa7, 0, 0, 0, g(Yes, No, false, false, "", "長")}, + {0x2fa8, 0, 0, 0, g(Yes, No, false, false, "", "門")}, + {0x2fa9, 0, 0, 0, g(Yes, No, false, false, "", "阜")}, + {0x2faa, 0, 0, 0, g(Yes, No, false, false, "", "隶")}, + {0x2fab, 0, 0, 0, g(Yes, No, false, false, "", "隹")}, + {0x2fac, 0, 0, 0, g(Yes, No, false, false, "", "雨")}, + {0x2fad, 0, 0, 0, g(Yes, No, false, false, "", "靑")}, + {0x2fae, 0, 0, 0, g(Yes, No, false, false, "", "非")}, + {0x2faf, 0, 0, 0, g(Yes, No, false, false, "", "面")}, + {0x2fb0, 0, 0, 0, g(Yes, No, false, false, "", "革")}, + {0x2fb1, 0, 0, 0, g(Yes, No, false, false, "", "韋")}, + {0x2fb2, 0, 0, 0, g(Yes, No, false, false, "", "韭")}, + {0x2fb3, 0, 0, 0, g(Yes, No, false, false, "", "音")}, + {0x2fb4, 0, 0, 0, g(Yes, No, false, false, "", "頁")}, + {0x2fb5, 0, 0, 0, g(Yes, No, false, false, "", "風")}, + {0x2fb6, 0, 0, 0, g(Yes, No, false, false, "", "飛")}, + {0x2fb7, 0, 0, 0, g(Yes, No, false, false, "", "食")}, + {0x2fb8, 0, 0, 0, g(Yes, No, false, false, "", "首")}, + {0x2fb9, 0, 0, 0, g(Yes, No, false, false, "", "香")}, + {0x2fba, 0, 0, 0, g(Yes, No, false, false, "", "馬")}, + {0x2fbb, 0, 0, 0, g(Yes, No, false, false, "", "骨")}, + {0x2fbc, 0, 0, 0, g(Yes, No, false, false, "", "高")}, + {0x2fbd, 0, 0, 0, g(Yes, No, false, false, "", "髟")}, + {0x2fbe, 0, 0, 0, g(Yes, No, false, false, "", "鬥")}, + {0x2fbf, 0, 0, 0, g(Yes, No, false, false, "", "鬯")}, + {0x2fc0, 0, 0, 0, g(Yes, No, false, false, "", "鬲")}, + {0x2fc1, 0, 0, 0, g(Yes, No, false, false, "", "鬼")}, + {0x2fc2, 0, 0, 0, g(Yes, No, false, false, "", "魚")}, + {0x2fc3, 0, 0, 0, g(Yes, No, false, false, "", "鳥")}, + {0x2fc4, 0, 0, 0, g(Yes, No, false, false, "", "鹵")}, + {0x2fc5, 0, 0, 0, g(Yes, No, false, false, "", "鹿")}, + {0x2fc6, 0, 0, 0, g(Yes, No, false, false, "", "麥")}, + {0x2fc7, 0, 0, 0, g(Yes, No, false, false, "", "麻")}, + {0x2fc8, 0, 0, 0, g(Yes, No, false, false, "", "黃")}, + {0x2fc9, 0, 0, 0, g(Yes, No, false, false, "", "黍")}, + {0x2fca, 0, 0, 0, g(Yes, No, false, false, "", "黑")}, + {0x2fcb, 0, 0, 0, g(Yes, No, false, false, "", "黹")}, + {0x2fcc, 0, 0, 0, g(Yes, No, false, false, "", "黽")}, + {0x2fcd, 0, 0, 0, g(Yes, No, false, false, "", "鼎")}, + {0x2fce, 0, 0, 0, g(Yes, No, false, false, "", "鼓")}, + {0x2fcf, 0, 0, 0, g(Yes, No, false, false, "", "鼠")}, + {0x2fd0, 0, 0, 0, g(Yes, No, false, false, "", "鼻")}, + {0x2fd1, 0, 0, 0, g(Yes, No, false, false, "", "齊")}, + {0x2fd2, 0, 0, 0, g(Yes, No, false, false, "", "齒")}, + {0x2fd3, 0, 0, 0, g(Yes, No, false, false, "", "龍")}, + {0x2fd4, 0, 0, 0, g(Yes, No, false, false, "", "龜")}, + {0x2fd5, 0, 0, 0, g(Yes, No, false, false, "", "龠")}, + {0x2fd6, 0, 0, 0, f(Yes, false, "")}, + {0x3000, 0, 0, 0, g(Yes, No, false, false, "", " ")}, + {0x3001, 0, 0, 0, f(Yes, false, "")}, + {0x302a, 218, 1, 1, f(Yes, false, "")}, + {0x302b, 228, 1, 1, f(Yes, false, "")}, + {0x302c, 232, 1, 1, f(Yes, false, "")}, + {0x302d, 222, 1, 1, f(Yes, false, "")}, + {0x302e, 224, 1, 1, f(Yes, false, "")}, + {0x3030, 0, 0, 0, f(Yes, false, "")}, + {0x3036, 0, 0, 0, g(Yes, No, false, false, "", "〒")}, + {0x3037, 0, 0, 0, f(Yes, false, "")}, + {0x3038, 0, 0, 0, g(Yes, No, false, false, "", "十")}, + {0x3039, 0, 0, 0, g(Yes, No, false, false, "", "卄")}, + {0x303a, 0, 0, 0, g(Yes, No, false, false, "", "卅")}, + {0x303b, 0, 0, 0, f(Yes, false, "")}, + {0x3046, 0, 0, 0, f(Yes, true, "")}, + {0x3047, 0, 0, 0, f(Yes, false, "")}, + {0x304b, 0, 0, 0, f(Yes, true, "")}, + {0x304c, 0, 0, 1, f(Yes, false, "が")}, + {0x304d, 0, 0, 0, f(Yes, true, "")}, + {0x304e, 0, 0, 1, f(Yes, false, "ぎ")}, + {0x304f, 0, 0, 0, f(Yes, true, "")}, + {0x3050, 0, 0, 1, f(Yes, false, "ぐ")}, + {0x3051, 0, 0, 0, f(Yes, true, "")}, + {0x3052, 0, 0, 1, f(Yes, false, "げ")}, + {0x3053, 0, 0, 0, f(Yes, true, "")}, + {0x3054, 0, 0, 1, f(Yes, false, "ご")}, + {0x3055, 0, 0, 0, f(Yes, true, "")}, + {0x3056, 0, 0, 1, f(Yes, false, "ざ")}, + {0x3057, 0, 0, 0, f(Yes, true, "")}, + {0x3058, 0, 0, 1, f(Yes, false, "じ")}, + {0x3059, 0, 0, 0, f(Yes, true, "")}, + {0x305a, 0, 0, 1, f(Yes, false, "ず")}, + {0x305b, 0, 0, 0, f(Yes, true, "")}, + {0x305c, 0, 0, 1, f(Yes, false, "ぜ")}, + {0x305d, 0, 0, 0, f(Yes, true, "")}, + {0x305e, 0, 0, 1, f(Yes, false, "ぞ")}, + {0x305f, 0, 0, 0, f(Yes, true, "")}, + {0x3060, 0, 0, 1, f(Yes, false, "だ")}, + {0x3061, 0, 0, 0, f(Yes, true, "")}, + {0x3062, 0, 0, 1, f(Yes, false, "ぢ")}, + {0x3063, 0, 0, 0, f(Yes, false, "")}, + {0x3064, 0, 0, 0, f(Yes, true, "")}, + {0x3065, 0, 0, 1, f(Yes, false, "づ")}, + {0x3066, 0, 0, 0, f(Yes, true, "")}, + {0x3067, 0, 0, 1, f(Yes, false, "で")}, + {0x3068, 0, 0, 0, f(Yes, true, "")}, + {0x3069, 0, 0, 1, f(Yes, false, "ど")}, + {0x306a, 0, 0, 0, f(Yes, false, "")}, + {0x306f, 0, 0, 0, f(Yes, true, "")}, + {0x3070, 0, 0, 1, f(Yes, false, "ば")}, + {0x3071, 0, 0, 1, f(Yes, false, "ぱ")}, + {0x3072, 0, 0, 0, f(Yes, true, "")}, + {0x3073, 0, 0, 1, f(Yes, false, "び")}, + {0x3074, 0, 0, 1, f(Yes, false, "ぴ")}, + {0x3075, 0, 0, 0, f(Yes, true, "")}, + {0x3076, 0, 0, 1, f(Yes, false, "ぶ")}, + {0x3077, 0, 0, 1, f(Yes, false, "ぷ")}, + {0x3078, 0, 0, 0, f(Yes, true, "")}, + {0x3079, 0, 0, 1, f(Yes, false, "べ")}, + {0x307a, 0, 0, 1, f(Yes, false, "ぺ")}, + {0x307b, 0, 0, 0, f(Yes, true, "")}, + {0x307c, 0, 0, 1, f(Yes, false, "ぼ")}, + {0x307d, 0, 0, 1, f(Yes, false, "ぽ")}, + {0x307e, 0, 0, 0, f(Yes, false, "")}, + {0x3094, 0, 0, 1, f(Yes, false, "ゔ")}, + {0x3095, 0, 0, 0, f(Yes, false, "")}, + {0x3099, 8, 1, 1, f(Maybe, false, "")}, + {0x309b, 0, 0, 1, g(Yes, No, false, false, "", " ゙")}, + {0x309c, 0, 0, 1, g(Yes, No, false, false, "", " ゚")}, + {0x309d, 0, 0, 0, f(Yes, true, "")}, + {0x309e, 0, 0, 1, f(Yes, false, "ゞ")}, + {0x309f, 0, 0, 0, g(Yes, No, false, false, "", "より")}, + {0x30a0, 0, 0, 0, f(Yes, false, "")}, + {0x30a6, 0, 0, 0, f(Yes, true, "")}, + {0x30a7, 0, 0, 0, f(Yes, false, "")}, + {0x30ab, 0, 0, 0, f(Yes, true, "")}, + {0x30ac, 0, 0, 1, f(Yes, false, "ガ")}, + {0x30ad, 0, 0, 0, f(Yes, true, "")}, + {0x30ae, 0, 0, 1, f(Yes, false, "ギ")}, + {0x30af, 0, 0, 0, f(Yes, true, "")}, + {0x30b0, 0, 0, 1, f(Yes, false, "グ")}, + {0x30b1, 0, 0, 0, f(Yes, true, "")}, + {0x30b2, 0, 0, 1, f(Yes, false, "ゲ")}, + {0x30b3, 0, 0, 0, f(Yes, true, "")}, + {0x30b4, 0, 0, 1, f(Yes, false, "ゴ")}, + {0x30b5, 0, 0, 0, f(Yes, true, "")}, + {0x30b6, 0, 0, 1, f(Yes, false, "ザ")}, + {0x30b7, 0, 0, 0, f(Yes, true, "")}, + {0x30b8, 0, 0, 1, f(Yes, false, "ジ")}, + {0x30b9, 0, 0, 0, f(Yes, true, "")}, + {0x30ba, 0, 0, 1, f(Yes, false, "ズ")}, + {0x30bb, 0, 0, 0, f(Yes, true, "")}, + {0x30bc, 0, 0, 1, f(Yes, false, "ゼ")}, + {0x30bd, 0, 0, 0, f(Yes, true, "")}, + {0x30be, 0, 0, 1, f(Yes, false, "ゾ")}, + {0x30bf, 0, 0, 0, f(Yes, true, "")}, + {0x30c0, 0, 0, 1, f(Yes, false, "ダ")}, + {0x30c1, 0, 0, 0, f(Yes, true, "")}, + {0x30c2, 0, 0, 1, f(Yes, false, "ヂ")}, + {0x30c3, 0, 0, 0, f(Yes, false, "")}, + {0x30c4, 0, 0, 0, f(Yes, true, "")}, + {0x30c5, 0, 0, 1, f(Yes, false, "ヅ")}, + {0x30c6, 0, 0, 0, f(Yes, true, "")}, + {0x30c7, 0, 0, 1, f(Yes, false, "デ")}, + {0x30c8, 0, 0, 0, f(Yes, true, "")}, + {0x30c9, 0, 0, 1, f(Yes, false, "ド")}, + {0x30ca, 0, 0, 0, f(Yes, false, "")}, + {0x30cf, 0, 0, 0, f(Yes, true, "")}, + {0x30d0, 0, 0, 1, f(Yes, false, "バ")}, + {0x30d1, 0, 0, 1, f(Yes, false, "パ")}, + {0x30d2, 0, 0, 0, f(Yes, true, "")}, + {0x30d3, 0, 0, 1, f(Yes, false, "ビ")}, + {0x30d4, 0, 0, 1, f(Yes, false, "ピ")}, + {0x30d5, 0, 0, 0, f(Yes, true, "")}, + {0x30d6, 0, 0, 1, f(Yes, false, "ブ")}, + {0x30d7, 0, 0, 1, f(Yes, false, "プ")}, + {0x30d8, 0, 0, 0, f(Yes, true, "")}, + {0x30d9, 0, 0, 1, f(Yes, false, "ベ")}, + {0x30da, 0, 0, 1, f(Yes, false, "ペ")}, + {0x30db, 0, 0, 0, f(Yes, true, "")}, + {0x30dc, 0, 0, 1, f(Yes, false, "ボ")}, + {0x30dd, 0, 0, 1, f(Yes, false, "ポ")}, + {0x30de, 0, 0, 0, f(Yes, false, "")}, + {0x30ef, 0, 0, 0, f(Yes, true, "")}, + {0x30f3, 0, 0, 0, f(Yes, false, "")}, + {0x30f4, 0, 0, 1, f(Yes, false, "ヴ")}, + {0x30f5, 0, 0, 0, f(Yes, false, "")}, + {0x30f7, 0, 0, 1, f(Yes, false, "ヷ")}, + {0x30f8, 0, 0, 1, f(Yes, false, "ヸ")}, + {0x30f9, 0, 0, 1, f(Yes, false, "ヹ")}, + {0x30fa, 0, 0, 1, f(Yes, false, "ヺ")}, + {0x30fb, 0, 0, 0, f(Yes, false, "")}, + {0x30fd, 0, 0, 0, f(Yes, true, "")}, + {0x30fe, 0, 0, 1, f(Yes, false, "ヾ")}, + {0x30ff, 0, 0, 0, g(Yes, No, false, false, "", "コト")}, + {0x3100, 0, 0, 0, f(Yes, false, "")}, + {0x3131, 0, 0, 0, g(Yes, No, false, false, "", "ᄀ")}, + {0x3132, 0, 0, 0, g(Yes, No, false, false, "", "ᄁ")}, + {0x3133, 0, 1, 1, g(Yes, No, false, false, "", "ᆪ")}, + {0x3134, 0, 0, 0, g(Yes, No, false, false, "", "ᄂ")}, + {0x3135, 0, 1, 1, g(Yes, No, false, false, "", "ᆬ")}, + {0x3136, 0, 1, 1, g(Yes, No, false, false, "", "ᆭ")}, + {0x3137, 0, 0, 0, g(Yes, No, false, false, "", "ᄃ")}, + {0x3138, 0, 0, 0, g(Yes, No, false, false, "", "ᄄ")}, + {0x3139, 0, 0, 0, g(Yes, No, false, false, "", "ᄅ")}, + {0x313a, 0, 1, 1, g(Yes, No, false, false, "", "ᆰ")}, + {0x313b, 0, 1, 1, g(Yes, No, false, false, "", "ᆱ")}, + {0x313c, 0, 1, 1, g(Yes, No, false, false, "", "ᆲ")}, + {0x313d, 0, 1, 1, g(Yes, No, false, false, "", "ᆳ")}, + {0x313e, 0, 1, 1, g(Yes, No, false, false, "", "ᆴ")}, + {0x313f, 0, 1, 1, g(Yes, No, false, false, "", "ᆵ")}, + {0x3140, 0, 0, 0, g(Yes, No, false, false, "", "ᄚ")}, + {0x3141, 0, 0, 0, g(Yes, No, false, false, "", "ᄆ")}, + {0x3142, 0, 0, 0, g(Yes, No, false, false, "", "ᄇ")}, + {0x3143, 0, 0, 0, g(Yes, No, false, false, "", "ᄈ")}, + {0x3144, 0, 0, 0, g(Yes, No, false, false, "", "ᄡ")}, + {0x3145, 0, 0, 0, g(Yes, No, false, false, "", "ᄉ")}, + {0x3146, 0, 0, 0, g(Yes, No, false, false, "", "ᄊ")}, + {0x3147, 0, 0, 0, g(Yes, No, false, false, "", "ᄋ")}, + {0x3148, 0, 0, 0, g(Yes, No, false, false, "", "ᄌ")}, + {0x3149, 0, 0, 0, g(Yes, No, false, false, "", "ᄍ")}, + {0x314a, 0, 0, 0, g(Yes, No, false, false, "", "ᄎ")}, + {0x314b, 0, 0, 0, g(Yes, No, false, false, "", "ᄏ")}, + {0x314c, 0, 0, 0, g(Yes, No, false, false, "", "ᄐ")}, + {0x314d, 0, 0, 0, g(Yes, No, false, false, "", "ᄑ")}, + {0x314e, 0, 0, 0, g(Yes, No, false, false, "", "ᄒ")}, + {0x314f, 0, 1, 1, g(Yes, No, false, false, "", "ᅡ")}, + {0x3150, 0, 1, 1, g(Yes, No, false, false, "", "ᅢ")}, + {0x3151, 0, 1, 1, g(Yes, No, false, false, "", "ᅣ")}, + {0x3152, 0, 1, 1, g(Yes, No, false, false, "", "ᅤ")}, + {0x3153, 0, 1, 1, g(Yes, No, false, false, "", "ᅥ")}, + {0x3154, 0, 1, 1, g(Yes, No, false, false, "", "ᅦ")}, + {0x3155, 0, 1, 1, g(Yes, No, false, false, "", "ᅧ")}, + {0x3156, 0, 1, 1, g(Yes, No, false, false, "", "ᅨ")}, + {0x3157, 0, 1, 1, g(Yes, No, false, false, "", "ᅩ")}, + {0x3158, 0, 1, 1, g(Yes, No, false, false, "", "ᅪ")}, + {0x3159, 0, 1, 1, g(Yes, No, false, false, "", "ᅫ")}, + {0x315a, 0, 1, 1, g(Yes, No, false, false, "", "ᅬ")}, + {0x315b, 0, 1, 1, g(Yes, No, false, false, "", "ᅭ")}, + {0x315c, 0, 1, 1, g(Yes, No, false, false, "", "ᅮ")}, + {0x315d, 0, 1, 1, g(Yes, No, false, false, "", "ᅯ")}, + {0x315e, 0, 1, 1, g(Yes, No, false, false, "", "ᅰ")}, + {0x315f, 0, 1, 1, g(Yes, No, false, false, "", "ᅱ")}, + {0x3160, 0, 1, 1, g(Yes, No, false, false, "", "ᅲ")}, + {0x3161, 0, 1, 1, g(Yes, No, false, false, "", "ᅳ")}, + {0x3162, 0, 1, 1, g(Yes, No, false, false, "", "ᅴ")}, + {0x3163, 0, 1, 1, g(Yes, No, false, false, "", "ᅵ")}, + {0x3164, 0, 0, 0, g(Yes, No, false, false, "", "ᅠ")}, + {0x3165, 0, 0, 0, g(Yes, No, false, false, "", "ᄔ")}, + {0x3166, 0, 0, 0, g(Yes, No, false, false, "", "ᄕ")}, + {0x3167, 0, 0, 0, g(Yes, No, false, false, "", "ᇇ")}, + {0x3168, 0, 0, 0, g(Yes, No, false, false, "", "ᇈ")}, + {0x3169, 0, 0, 0, g(Yes, No, false, false, "", "ᇌ")}, + {0x316a, 0, 0, 0, g(Yes, No, false, false, "", "ᇎ")}, + {0x316b, 0, 0, 0, g(Yes, No, false, false, "", "ᇓ")}, + {0x316c, 0, 0, 0, g(Yes, No, false, false, "", "ᇗ")}, + {0x316d, 0, 0, 0, g(Yes, No, false, false, "", "ᇙ")}, + {0x316e, 0, 0, 0, g(Yes, No, false, false, "", "ᄜ")}, + {0x316f, 0, 0, 0, g(Yes, No, false, false, "", "ᇝ")}, + {0x3170, 0, 0, 0, g(Yes, No, false, false, "", "ᇟ")}, + {0x3171, 0, 0, 0, g(Yes, No, false, false, "", "ᄝ")}, + {0x3172, 0, 0, 0, g(Yes, No, false, false, "", "ᄞ")}, + {0x3173, 0, 0, 0, g(Yes, No, false, false, "", "ᄠ")}, + {0x3174, 0, 0, 0, g(Yes, No, false, false, "", "ᄢ")}, + {0x3175, 0, 0, 0, g(Yes, No, false, false, "", "ᄣ")}, + {0x3176, 0, 0, 0, g(Yes, No, false, false, "", "ᄧ")}, + {0x3177, 0, 0, 0, g(Yes, No, false, false, "", "ᄩ")}, + {0x3178, 0, 0, 0, g(Yes, No, false, false, "", "ᄫ")}, + {0x3179, 0, 0, 0, g(Yes, No, false, false, "", "ᄬ")}, + {0x317a, 0, 0, 0, g(Yes, No, false, false, "", "ᄭ")}, + {0x317b, 0, 0, 0, g(Yes, No, false, false, "", "ᄮ")}, + {0x317c, 0, 0, 0, g(Yes, No, false, false, "", "ᄯ")}, + {0x317d, 0, 0, 0, g(Yes, No, false, false, "", "ᄲ")}, + {0x317e, 0, 0, 0, g(Yes, No, false, false, "", "ᄶ")}, + {0x317f, 0, 0, 0, g(Yes, No, false, false, "", "ᅀ")}, + {0x3180, 0, 0, 0, g(Yes, No, false, false, "", "ᅇ")}, + {0x3181, 0, 0, 0, g(Yes, No, false, false, "", "ᅌ")}, + {0x3182, 0, 0, 0, g(Yes, No, false, false, "", "ᇱ")}, + {0x3183, 0, 0, 0, g(Yes, No, false, false, "", "ᇲ")}, + {0x3184, 0, 0, 0, g(Yes, No, false, false, "", "ᅗ")}, + {0x3185, 0, 0, 0, g(Yes, No, false, false, "", "ᅘ")}, + {0x3186, 0, 0, 0, g(Yes, No, false, false, "", "ᅙ")}, + {0x3187, 0, 0, 0, g(Yes, No, false, false, "", "ᆄ")}, + {0x3188, 0, 0, 0, g(Yes, No, false, false, "", "ᆅ")}, + {0x3189, 0, 0, 0, g(Yes, No, false, false, "", "ᆈ")}, + {0x318a, 0, 0, 0, g(Yes, No, false, false, "", "ᆑ")}, + {0x318b, 0, 0, 0, g(Yes, No, false, false, "", "ᆒ")}, + {0x318c, 0, 0, 0, g(Yes, No, false, false, "", "ᆔ")}, + {0x318d, 0, 0, 0, g(Yes, No, false, false, "", "ᆞ")}, + {0x318e, 0, 0, 0, g(Yes, No, false, false, "", "ᆡ")}, + {0x318f, 0, 0, 0, f(Yes, false, "")}, + {0x3192, 0, 0, 0, g(Yes, No, false, false, "", "一")}, + {0x3193, 0, 0, 0, g(Yes, No, false, false, "", "二")}, + {0x3194, 0, 0, 0, g(Yes, No, false, false, "", "三")}, + {0x3195, 0, 0, 0, g(Yes, No, false, false, "", "四")}, + {0x3196, 0, 0, 0, g(Yes, No, false, false, "", "上")}, + {0x3197, 0, 0, 0, g(Yes, No, false, false, "", "中")}, + {0x3198, 0, 0, 0, g(Yes, No, false, false, "", "下")}, + {0x3199, 0, 0, 0, g(Yes, No, false, false, "", "甲")}, + {0x319a, 0, 0, 0, g(Yes, No, false, false, "", "乙")}, + {0x319b, 0, 0, 0, g(Yes, No, false, false, "", "丙")}, + {0x319c, 0, 0, 0, g(Yes, No, false, false, "", "丁")}, + {0x319d, 0, 0, 0, g(Yes, No, false, false, "", "天")}, + {0x319e, 0, 0, 0, g(Yes, No, false, false, "", "地")}, + {0x319f, 0, 0, 0, g(Yes, No, false, false, "", "人")}, + {0x31a0, 0, 0, 0, f(Yes, false, "")}, + {0x3200, 0, 0, 0, g(Yes, No, false, false, "", "(ᄀ)")}, + {0x3201, 0, 0, 0, g(Yes, No, false, false, "", "(ᄂ)")}, + {0x3202, 0, 0, 0, g(Yes, No, false, false, "", "(ᄃ)")}, + {0x3203, 0, 0, 0, g(Yes, No, false, false, "", "(ᄅ)")}, + {0x3204, 0, 0, 0, g(Yes, No, false, false, "", "(ᄆ)")}, + {0x3205, 0, 0, 0, g(Yes, No, false, false, "", "(ᄇ)")}, + {0x3206, 0, 0, 0, g(Yes, No, false, false, "", "(ᄉ)")}, + {0x3207, 0, 0, 0, g(Yes, No, false, false, "", "(ᄋ)")}, + {0x3208, 0, 0, 0, g(Yes, No, false, false, "", "(ᄌ)")}, + {0x3209, 0, 0, 0, g(Yes, No, false, false, "", "(ᄎ)")}, + {0x320a, 0, 0, 0, g(Yes, No, false, false, "", "(ᄏ)")}, + {0x320b, 0, 0, 0, g(Yes, No, false, false, "", "(ᄐ)")}, + {0x320c, 0, 0, 0, g(Yes, No, false, false, "", "(ᄑ)")}, + {0x320d, 0, 0, 0, g(Yes, No, false, false, "", "(ᄒ)")}, + {0x320e, 0, 0, 0, g(Yes, No, false, false, "", "(가)")}, + {0x320f, 0, 0, 0, g(Yes, No, false, false, "", "(나)")}, + {0x3210, 0, 0, 0, g(Yes, No, false, false, "", "(다)")}, + {0x3211, 0, 0, 0, g(Yes, No, false, false, "", "(라)")}, + {0x3212, 0, 0, 0, g(Yes, No, false, false, "", "(마)")}, + {0x3213, 0, 0, 0, g(Yes, No, false, false, "", "(바)")}, + {0x3214, 0, 0, 0, g(Yes, No, false, false, "", "(사)")}, + {0x3215, 0, 0, 0, g(Yes, No, false, false, "", "(아)")}, + {0x3216, 0, 0, 0, g(Yes, No, false, false, "", "(자)")}, + {0x3217, 0, 0, 0, g(Yes, No, false, false, "", "(차)")}, + {0x3218, 0, 0, 0, g(Yes, No, false, false, "", "(카)")}, + {0x3219, 0, 0, 0, g(Yes, No, false, false, "", "(타)")}, + {0x321a, 0, 0, 0, g(Yes, No, false, false, "", "(파)")}, + {0x321b, 0, 0, 0, g(Yes, No, false, false, "", "(하)")}, + {0x321c, 0, 0, 0, g(Yes, No, false, false, "", "(주)")}, + {0x321d, 0, 0, 0, g(Yes, No, false, false, "", "(오전)")}, + {0x321e, 0, 0, 0, g(Yes, No, false, false, "", "(오후)")}, + {0x321f, 0, 0, 0, f(Yes, false, "")}, + {0x3220, 0, 0, 0, g(Yes, No, false, false, "", "(一)")}, + {0x3221, 0, 0, 0, g(Yes, No, false, false, "", "(二)")}, + {0x3222, 0, 0, 0, g(Yes, No, false, false, "", "(三)")}, + {0x3223, 0, 0, 0, g(Yes, No, false, false, "", "(四)")}, + {0x3224, 0, 0, 0, g(Yes, No, false, false, "", "(五)")}, + {0x3225, 0, 0, 0, g(Yes, No, false, false, "", "(六)")}, + {0x3226, 0, 0, 0, g(Yes, No, false, false, "", "(七)")}, + {0x3227, 0, 0, 0, g(Yes, No, false, false, "", "(八)")}, + {0x3228, 0, 0, 0, g(Yes, No, false, false, "", "(九)")}, + {0x3229, 0, 0, 0, g(Yes, No, false, false, "", "(十)")}, + {0x322a, 0, 0, 0, g(Yes, No, false, false, "", "(月)")}, + {0x322b, 0, 0, 0, g(Yes, No, false, false, "", "(火)")}, + {0x322c, 0, 0, 0, g(Yes, No, false, false, "", "(水)")}, + {0x322d, 0, 0, 0, g(Yes, No, false, false, "", "(木)")}, + {0x322e, 0, 0, 0, g(Yes, No, false, false, "", "(金)")}, + {0x322f, 0, 0, 0, g(Yes, No, false, false, "", "(土)")}, + {0x3230, 0, 0, 0, g(Yes, No, false, false, "", "(日)")}, + {0x3231, 0, 0, 0, g(Yes, No, false, false, "", "(株)")}, + {0x3232, 0, 0, 0, g(Yes, No, false, false, "", "(有)")}, + {0x3233, 0, 0, 0, g(Yes, No, false, false, "", "(社)")}, + {0x3234, 0, 0, 0, g(Yes, No, false, false, "", "(名)")}, + {0x3235, 0, 0, 0, g(Yes, No, false, false, "", "(特)")}, + {0x3236, 0, 0, 0, g(Yes, No, false, false, "", "(財)")}, + {0x3237, 0, 0, 0, g(Yes, No, false, false, "", "(祝)")}, + {0x3238, 0, 0, 0, g(Yes, No, false, false, "", "(労)")}, + {0x3239, 0, 0, 0, g(Yes, No, false, false, "", "(代)")}, + {0x323a, 0, 0, 0, g(Yes, No, false, false, "", "(呼)")}, + {0x323b, 0, 0, 0, g(Yes, No, false, false, "", "(学)")}, + {0x323c, 0, 0, 0, g(Yes, No, false, false, "", "(監)")}, + {0x323d, 0, 0, 0, g(Yes, No, false, false, "", "(企)")}, + {0x323e, 0, 0, 0, g(Yes, No, false, false, "", "(資)")}, + {0x323f, 0, 0, 0, g(Yes, No, false, false, "", "(協)")}, + {0x3240, 0, 0, 0, g(Yes, No, false, false, "", "(祭)")}, + {0x3241, 0, 0, 0, g(Yes, No, false, false, "", "(休)")}, + {0x3242, 0, 0, 0, g(Yes, No, false, false, "", "(自)")}, + {0x3243, 0, 0, 0, g(Yes, No, false, false, "", "(至)")}, + {0x3244, 0, 0, 0, g(Yes, No, false, false, "", "問")}, + {0x3245, 0, 0, 0, g(Yes, No, false, false, "", "幼")}, + {0x3246, 0, 0, 0, g(Yes, No, false, false, "", "文")}, + {0x3247, 0, 0, 0, g(Yes, No, false, false, "", "箏")}, + {0x3248, 0, 0, 0, f(Yes, false, "")}, + {0x3250, 0, 0, 0, g(Yes, No, false, false, "", "PTE")}, + {0x3251, 0, 0, 0, g(Yes, No, false, false, "", "21")}, + {0x3252, 0, 0, 0, g(Yes, No, false, false, "", "22")}, + {0x3253, 0, 0, 0, g(Yes, No, false, false, "", "23")}, + {0x3254, 0, 0, 0, g(Yes, No, false, false, "", "24")}, + {0x3255, 0, 0, 0, g(Yes, No, false, false, "", "25")}, + {0x3256, 0, 0, 0, g(Yes, No, false, false, "", "26")}, + {0x3257, 0, 0, 0, g(Yes, No, false, false, "", "27")}, + {0x3258, 0, 0, 0, g(Yes, No, false, false, "", "28")}, + {0x3259, 0, 0, 0, g(Yes, No, false, false, "", "29")}, + {0x325a, 0, 0, 0, g(Yes, No, false, false, "", "30")}, + {0x325b, 0, 0, 0, g(Yes, No, false, false, "", "31")}, + {0x325c, 0, 0, 0, g(Yes, No, false, false, "", "32")}, + {0x325d, 0, 0, 0, g(Yes, No, false, false, "", "33")}, + {0x325e, 0, 0, 0, g(Yes, No, false, false, "", "34")}, + {0x325f, 0, 0, 0, g(Yes, No, false, false, "", "35")}, + {0x3260, 0, 0, 0, g(Yes, No, false, false, "", "ᄀ")}, + {0x3261, 0, 0, 0, g(Yes, No, false, false, "", "ᄂ")}, + {0x3262, 0, 0, 0, g(Yes, No, false, false, "", "ᄃ")}, + {0x3263, 0, 0, 0, g(Yes, No, false, false, "", "ᄅ")}, + {0x3264, 0, 0, 0, g(Yes, No, false, false, "", "ᄆ")}, + {0x3265, 0, 0, 0, g(Yes, No, false, false, "", "ᄇ")}, + {0x3266, 0, 0, 0, g(Yes, No, false, false, "", "ᄉ")}, + {0x3267, 0, 0, 0, g(Yes, No, false, false, "", "ᄋ")}, + {0x3268, 0, 0, 0, g(Yes, No, false, false, "", "ᄌ")}, + {0x3269, 0, 0, 0, g(Yes, No, false, false, "", "ᄎ")}, + {0x326a, 0, 0, 0, g(Yes, No, false, false, "", "ᄏ")}, + {0x326b, 0, 0, 0, g(Yes, No, false, false, "", "ᄐ")}, + {0x326c, 0, 0, 0, g(Yes, No, false, false, "", "ᄑ")}, + {0x326d, 0, 0, 0, g(Yes, No, false, false, "", "ᄒ")}, + {0x326e, 0, 0, 1, g(Yes, No, false, false, "", "가")}, + {0x326f, 0, 0, 1, g(Yes, No, false, false, "", "나")}, + {0x3270, 0, 0, 1, g(Yes, No, false, false, "", "다")}, + {0x3271, 0, 0, 1, g(Yes, No, false, false, "", "라")}, + {0x3272, 0, 0, 1, g(Yes, No, false, false, "", "마")}, + {0x3273, 0, 0, 1, g(Yes, No, false, false, "", "바")}, + {0x3274, 0, 0, 1, g(Yes, No, false, false, "", "사")}, + {0x3275, 0, 0, 1, g(Yes, No, false, false, "", "아")}, + {0x3276, 0, 0, 1, g(Yes, No, false, false, "", "자")}, + {0x3277, 0, 0, 1, g(Yes, No, false, false, "", "차")}, + {0x3278, 0, 0, 1, g(Yes, No, false, false, "", "카")}, + {0x3279, 0, 0, 1, g(Yes, No, false, false, "", "타")}, + {0x327a, 0, 0, 1, g(Yes, No, false, false, "", "파")}, + {0x327b, 0, 0, 1, g(Yes, No, false, false, "", "하")}, + {0x327c, 0, 0, 1, g(Yes, No, false, false, "", "참고")}, + {0x327d, 0, 0, 1, g(Yes, No, false, false, "", "주의")}, + {0x327e, 0, 0, 1, g(Yes, No, false, false, "", "우")}, + {0x327f, 0, 0, 0, f(Yes, false, "")}, + {0x3280, 0, 0, 0, g(Yes, No, false, false, "", "一")}, + {0x3281, 0, 0, 0, g(Yes, No, false, false, "", "二")}, + {0x3282, 0, 0, 0, g(Yes, No, false, false, "", "三")}, + {0x3283, 0, 0, 0, g(Yes, No, false, false, "", "四")}, + {0x3284, 0, 0, 0, g(Yes, No, false, false, "", "五")}, + {0x3285, 0, 0, 0, g(Yes, No, false, false, "", "六")}, + {0x3286, 0, 0, 0, g(Yes, No, false, false, "", "七")}, + {0x3287, 0, 0, 0, g(Yes, No, false, false, "", "八")}, + {0x3288, 0, 0, 0, g(Yes, No, false, false, "", "九")}, + {0x3289, 0, 0, 0, g(Yes, No, false, false, "", "十")}, + {0x328a, 0, 0, 0, g(Yes, No, false, false, "", "月")}, + {0x328b, 0, 0, 0, g(Yes, No, false, false, "", "火")}, + {0x328c, 0, 0, 0, g(Yes, No, false, false, "", "水")}, + {0x328d, 0, 0, 0, g(Yes, No, false, false, "", "木")}, + {0x328e, 0, 0, 0, g(Yes, No, false, false, "", "金")}, + {0x328f, 0, 0, 0, g(Yes, No, false, false, "", "土")}, + {0x3290, 0, 0, 0, g(Yes, No, false, false, "", "日")}, + {0x3291, 0, 0, 0, g(Yes, No, false, false, "", "株")}, + {0x3292, 0, 0, 0, g(Yes, No, false, false, "", "有")}, + {0x3293, 0, 0, 0, g(Yes, No, false, false, "", "社")}, + {0x3294, 0, 0, 0, g(Yes, No, false, false, "", "名")}, + {0x3295, 0, 0, 0, g(Yes, No, false, false, "", "特")}, + {0x3296, 0, 0, 0, g(Yes, No, false, false, "", "財")}, + {0x3297, 0, 0, 0, g(Yes, No, false, false, "", "祝")}, + {0x3298, 0, 0, 0, g(Yes, No, false, false, "", "労")}, + {0x3299, 0, 0, 0, g(Yes, No, false, false, "", "秘")}, + {0x329a, 0, 0, 0, g(Yes, No, false, false, "", "男")}, + {0x329b, 0, 0, 0, g(Yes, No, false, false, "", "女")}, + {0x329c, 0, 0, 0, g(Yes, No, false, false, "", "適")}, + {0x329d, 0, 0, 0, g(Yes, No, false, false, "", "優")}, + {0x329e, 0, 0, 0, g(Yes, No, false, false, "", "印")}, + {0x329f, 0, 0, 0, g(Yes, No, false, false, "", "注")}, + {0x32a0, 0, 0, 0, g(Yes, No, false, false, "", "項")}, + {0x32a1, 0, 0, 0, g(Yes, No, false, false, "", "休")}, + {0x32a2, 0, 0, 0, g(Yes, No, false, false, "", "写")}, + {0x32a3, 0, 0, 0, g(Yes, No, false, false, "", "正")}, + {0x32a4, 0, 0, 0, g(Yes, No, false, false, "", "上")}, + {0x32a5, 0, 0, 0, g(Yes, No, false, false, "", "中")}, + {0x32a6, 0, 0, 0, g(Yes, No, false, false, "", "下")}, + {0x32a7, 0, 0, 0, g(Yes, No, false, false, "", "左")}, + {0x32a8, 0, 0, 0, g(Yes, No, false, false, "", "右")}, + {0x32a9, 0, 0, 0, g(Yes, No, false, false, "", "医")}, + {0x32aa, 0, 0, 0, g(Yes, No, false, false, "", "宗")}, + {0x32ab, 0, 0, 0, g(Yes, No, false, false, "", "学")}, + {0x32ac, 0, 0, 0, g(Yes, No, false, false, "", "監")}, + {0x32ad, 0, 0, 0, g(Yes, No, false, false, "", "企")}, + {0x32ae, 0, 0, 0, g(Yes, No, false, false, "", "資")}, + {0x32af, 0, 0, 0, g(Yes, No, false, false, "", "協")}, + {0x32b0, 0, 0, 0, g(Yes, No, false, false, "", "夜")}, + {0x32b1, 0, 0, 0, g(Yes, No, false, false, "", "36")}, + {0x32b2, 0, 0, 0, g(Yes, No, false, false, "", "37")}, + {0x32b3, 0, 0, 0, g(Yes, No, false, false, "", "38")}, + {0x32b4, 0, 0, 0, g(Yes, No, false, false, "", "39")}, + {0x32b5, 0, 0, 0, g(Yes, No, false, false, "", "40")}, + {0x32b6, 0, 0, 0, g(Yes, No, false, false, "", "41")}, + {0x32b7, 0, 0, 0, g(Yes, No, false, false, "", "42")}, + {0x32b8, 0, 0, 0, g(Yes, No, false, false, "", "43")}, + {0x32b9, 0, 0, 0, g(Yes, No, false, false, "", "44")}, + {0x32ba, 0, 0, 0, g(Yes, No, false, false, "", "45")}, + {0x32bb, 0, 0, 0, g(Yes, No, false, false, "", "46")}, + {0x32bc, 0, 0, 0, g(Yes, No, false, false, "", "47")}, + {0x32bd, 0, 0, 0, g(Yes, No, false, false, "", "48")}, + {0x32be, 0, 0, 0, g(Yes, No, false, false, "", "49")}, + {0x32bf, 0, 0, 0, g(Yes, No, false, false, "", "50")}, + {0x32c0, 0, 0, 0, g(Yes, No, false, false, "", "1月")}, + {0x32c1, 0, 0, 0, g(Yes, No, false, false, "", "2月")}, + {0x32c2, 0, 0, 0, g(Yes, No, false, false, "", "3月")}, + {0x32c3, 0, 0, 0, g(Yes, No, false, false, "", "4月")}, + {0x32c4, 0, 0, 0, g(Yes, No, false, false, "", "5月")}, + {0x32c5, 0, 0, 0, g(Yes, No, false, false, "", "6月")}, + {0x32c6, 0, 0, 0, g(Yes, No, false, false, "", "7月")}, + {0x32c7, 0, 0, 0, g(Yes, No, false, false, "", "8月")}, + {0x32c8, 0, 0, 0, g(Yes, No, false, false, "", "9月")}, + {0x32c9, 0, 0, 0, g(Yes, No, false, false, "", "10月")}, + {0x32ca, 0, 0, 0, g(Yes, No, false, false, "", "11月")}, + {0x32cb, 0, 0, 0, g(Yes, No, false, false, "", "12月")}, + {0x32cc, 0, 0, 0, g(Yes, No, false, false, "", "Hg")}, + {0x32cd, 0, 0, 0, g(Yes, No, false, false, "", "erg")}, + {0x32ce, 0, 0, 0, g(Yes, No, false, false, "", "eV")}, + {0x32cf, 0, 0, 0, g(Yes, No, false, false, "", "LTD")}, + {0x32d0, 0, 0, 0, g(Yes, No, false, false, "", "ア")}, + {0x32d1, 0, 0, 0, g(Yes, No, false, false, "", "イ")}, + {0x32d2, 0, 0, 0, g(Yes, No, false, false, "", "ウ")}, + {0x32d3, 0, 0, 0, g(Yes, No, false, false, "", "エ")}, + {0x32d4, 0, 0, 0, g(Yes, No, false, false, "", "オ")}, + {0x32d5, 0, 0, 0, g(Yes, No, false, false, "", "カ")}, + {0x32d6, 0, 0, 0, g(Yes, No, false, false, "", "キ")}, + {0x32d7, 0, 0, 0, g(Yes, No, false, false, "", "ク")}, + {0x32d8, 0, 0, 0, g(Yes, No, false, false, "", "ケ")}, + {0x32d9, 0, 0, 0, g(Yes, No, false, false, "", "コ")}, + {0x32da, 0, 0, 0, g(Yes, No, false, false, "", "サ")}, + {0x32db, 0, 0, 0, g(Yes, No, false, false, "", "シ")}, + {0x32dc, 0, 0, 0, g(Yes, No, false, false, "", "ス")}, + {0x32dd, 0, 0, 0, g(Yes, No, false, false, "", "セ")}, + {0x32de, 0, 0, 0, g(Yes, No, false, false, "", "ソ")}, + {0x32df, 0, 0, 0, g(Yes, No, false, false, "", "タ")}, + {0x32e0, 0, 0, 0, g(Yes, No, false, false, "", "チ")}, + {0x32e1, 0, 0, 0, g(Yes, No, false, false, "", "ツ")}, + {0x32e2, 0, 0, 0, g(Yes, No, false, false, "", "テ")}, + {0x32e3, 0, 0, 0, g(Yes, No, false, false, "", "ト")}, + {0x32e4, 0, 0, 0, g(Yes, No, false, false, "", "ナ")}, + {0x32e5, 0, 0, 0, g(Yes, No, false, false, "", "ニ")}, + {0x32e6, 0, 0, 0, g(Yes, No, false, false, "", "ヌ")}, + {0x32e7, 0, 0, 0, g(Yes, No, false, false, "", "ネ")}, + {0x32e8, 0, 0, 0, g(Yes, No, false, false, "", "ノ")}, + {0x32e9, 0, 0, 0, g(Yes, No, false, false, "", "ハ")}, + {0x32ea, 0, 0, 0, g(Yes, No, false, false, "", "ヒ")}, + {0x32eb, 0, 0, 0, g(Yes, No, false, false, "", "フ")}, + {0x32ec, 0, 0, 0, g(Yes, No, false, false, "", "ヘ")}, + {0x32ed, 0, 0, 0, g(Yes, No, false, false, "", "ホ")}, + {0x32ee, 0, 0, 0, g(Yes, No, false, false, "", "マ")}, + {0x32ef, 0, 0, 0, g(Yes, No, false, false, "", "ミ")}, + {0x32f0, 0, 0, 0, g(Yes, No, false, false, "", "ム")}, + {0x32f1, 0, 0, 0, g(Yes, No, false, false, "", "メ")}, + {0x32f2, 0, 0, 0, g(Yes, No, false, false, "", "モ")}, + {0x32f3, 0, 0, 0, g(Yes, No, false, false, "", "ヤ")}, + {0x32f4, 0, 0, 0, g(Yes, No, false, false, "", "ユ")}, + {0x32f5, 0, 0, 0, g(Yes, No, false, false, "", "ヨ")}, + {0x32f6, 0, 0, 0, g(Yes, No, false, false, "", "ラ")}, + {0x32f7, 0, 0, 0, g(Yes, No, false, false, "", "リ")}, + {0x32f8, 0, 0, 0, g(Yes, No, false, false, "", "ル")}, + {0x32f9, 0, 0, 0, g(Yes, No, false, false, "", "レ")}, + {0x32fa, 0, 0, 0, g(Yes, No, false, false, "", "ロ")}, + {0x32fb, 0, 0, 0, g(Yes, No, false, false, "", "ワ")}, + {0x32fc, 0, 0, 0, g(Yes, No, false, false, "", "ヰ")}, + {0x32fd, 0, 0, 0, g(Yes, No, false, false, "", "ヱ")}, + {0x32fe, 0, 0, 0, g(Yes, No, false, false, "", "ヲ")}, + {0x32ff, 0, 0, 0, f(Yes, false, "")}, + {0x3300, 0, 0, 0, g(Yes, No, false, false, "", "アパート")}, + {0x3301, 0, 0, 0, g(Yes, No, false, false, "", "アルファ")}, + {0x3302, 0, 0, 0, g(Yes, No, false, false, "", "アンペア")}, + {0x3303, 0, 0, 0, g(Yes, No, false, false, "", "アール")}, + {0x3304, 0, 0, 1, g(Yes, No, false, false, "", "イニング")}, + {0x3305, 0, 0, 0, g(Yes, No, false, false, "", "インチ")}, + {0x3306, 0, 0, 0, g(Yes, No, false, false, "", "ウォン")}, + {0x3307, 0, 0, 1, g(Yes, No, false, false, "", "エスクード")}, + {0x3308, 0, 0, 0, g(Yes, No, false, false, "", "エーカー")}, + {0x3309, 0, 0, 0, g(Yes, No, false, false, "", "オンス")}, + {0x330a, 0, 0, 0, g(Yes, No, false, false, "", "オーム")}, + {0x330b, 0, 0, 0, g(Yes, No, false, false, "", "カイリ")}, + {0x330c, 0, 0, 0, g(Yes, No, false, false, "", "カラット")}, + {0x330d, 0, 0, 0, g(Yes, No, false, false, "", "カロリー")}, + {0x330e, 0, 0, 0, g(Yes, No, false, false, "", "ガロン")}, + {0x330f, 0, 0, 0, g(Yes, No, false, false, "", "ガンマ")}, + {0x3310, 0, 0, 1, g(Yes, No, false, false, "", "ギガ")}, + {0x3311, 0, 0, 0, g(Yes, No, false, false, "", "ギニー")}, + {0x3312, 0, 0, 0, g(Yes, No, false, false, "", "キュリー")}, + {0x3313, 0, 0, 0, g(Yes, No, false, false, "", "ギルダー")}, + {0x3314, 0, 0, 0, g(Yes, No, false, false, "", "キロ")}, + {0x3315, 0, 0, 0, g(Yes, No, false, false, "", "キログラム")}, + {0x3316, 0, 0, 0, g(Yes, No, false, false, "", "キロメートル")}, + {0x3317, 0, 0, 0, g(Yes, No, false, false, "", "キロワット")}, + {0x3318, 0, 0, 0, g(Yes, No, false, false, "", "グラム")}, + {0x3319, 0, 0, 0, g(Yes, No, false, false, "", "グラムトン")}, + {0x331a, 0, 0, 0, g(Yes, No, false, false, "", "クルゼイロ")}, + {0x331b, 0, 0, 0, g(Yes, No, false, false, "", "クローネ")}, + {0x331c, 0, 0, 0, g(Yes, No, false, false, "", "ケース")}, + {0x331d, 0, 0, 0, g(Yes, No, false, false, "", "コルナ")}, + {0x331e, 0, 0, 1, g(Yes, No, false, false, "", "コーポ")}, + {0x331f, 0, 0, 0, g(Yes, No, false, false, "", "サイクル")}, + {0x3320, 0, 0, 0, g(Yes, No, false, false, "", "サンチーム")}, + {0x3321, 0, 0, 1, g(Yes, No, false, false, "", "シリング")}, + {0x3322, 0, 0, 0, g(Yes, No, false, false, "", "センチ")}, + {0x3323, 0, 0, 0, g(Yes, No, false, false, "", "セント")}, + {0x3324, 0, 0, 0, g(Yes, No, false, false, "", "ダース")}, + {0x3325, 0, 0, 0, g(Yes, No, false, false, "", "デシ")}, + {0x3326, 0, 0, 0, g(Yes, No, false, false, "", "ドル")}, + {0x3327, 0, 0, 0, g(Yes, No, false, false, "", "トン")}, + {0x3328, 0, 0, 0, g(Yes, No, false, false, "", "ナノ")}, + {0x3329, 0, 0, 0, g(Yes, No, false, false, "", "ノット")}, + {0x332a, 0, 0, 0, g(Yes, No, false, false, "", "ハイツ")}, + {0x332b, 0, 0, 0, g(Yes, No, false, false, "", "パーセント")}, + {0x332c, 0, 0, 0, g(Yes, No, false, false, "", "パーツ")}, + {0x332d, 0, 0, 0, g(Yes, No, false, false, "", "バーレル")}, + {0x332e, 0, 0, 0, g(Yes, No, false, false, "", "ピアストル")}, + {0x332f, 0, 0, 0, g(Yes, No, false, false, "", "ピクル")}, + {0x3330, 0, 0, 0, g(Yes, No, false, false, "", "ピコ")}, + {0x3331, 0, 0, 0, g(Yes, No, false, false, "", "ビル")}, + {0x3332, 0, 0, 1, g(Yes, No, false, false, "", "ファラッド")}, + {0x3333, 0, 0, 0, g(Yes, No, false, false, "", "フィート")}, + {0x3334, 0, 0, 0, g(Yes, No, false, false, "", "ブッシェル")}, + {0x3335, 0, 0, 0, g(Yes, No, false, false, "", "フラン")}, + {0x3336, 0, 0, 0, g(Yes, No, false, false, "", "ヘクタール")}, + {0x3337, 0, 0, 0, g(Yes, No, false, false, "", "ペソ")}, + {0x3338, 0, 0, 0, g(Yes, No, false, false, "", "ペニヒ")}, + {0x3339, 0, 0, 0, g(Yes, No, false, false, "", "ヘルツ")}, + {0x333a, 0, 0, 0, g(Yes, No, false, false, "", "ペンス")}, + {0x333b, 0, 0, 1, g(Yes, No, false, false, "", "ページ")}, + {0x333c, 0, 0, 0, g(Yes, No, false, false, "", "ベータ")}, + {0x333d, 0, 0, 0, g(Yes, No, false, false, "", "ポイント")}, + {0x333e, 0, 0, 0, g(Yes, No, false, false, "", "ボルト")}, + {0x333f, 0, 0, 0, g(Yes, No, false, false, "", "ホン")}, + {0x3340, 0, 0, 1, g(Yes, No, false, false, "", "ポンド")}, + {0x3341, 0, 0, 0, g(Yes, No, false, false, "", "ホール")}, + {0x3342, 0, 0, 0, g(Yes, No, false, false, "", "ホーン")}, + {0x3343, 0, 0, 0, g(Yes, No, false, false, "", "マイクロ")}, + {0x3344, 0, 0, 0, g(Yes, No, false, false, "", "マイル")}, + {0x3345, 0, 0, 0, g(Yes, No, false, false, "", "マッハ")}, + {0x3346, 0, 0, 0, g(Yes, No, false, false, "", "マルク")}, + {0x3347, 0, 0, 0, g(Yes, No, false, false, "", "マンション")}, + {0x3348, 0, 0, 0, g(Yes, No, false, false, "", "ミクロン")}, + {0x3349, 0, 0, 0, g(Yes, No, false, false, "", "ミリ")}, + {0x334a, 0, 0, 0, g(Yes, No, false, false, "", "ミリバール")}, + {0x334b, 0, 0, 1, g(Yes, No, false, false, "", "メガ")}, + {0x334c, 0, 0, 0, g(Yes, No, false, false, "", "メガトン")}, + {0x334d, 0, 0, 0, g(Yes, No, false, false, "", "メートル")}, + {0x334e, 0, 0, 1, g(Yes, No, false, false, "", "ヤード")}, + {0x334f, 0, 0, 0, g(Yes, No, false, false, "", "ヤール")}, + {0x3350, 0, 0, 0, g(Yes, No, false, false, "", "ユアン")}, + {0x3351, 0, 0, 0, g(Yes, No, false, false, "", "リットル")}, + {0x3352, 0, 0, 0, g(Yes, No, false, false, "", "リラ")}, + {0x3353, 0, 0, 0, g(Yes, No, false, false, "", "ルピー")}, + {0x3354, 0, 0, 0, g(Yes, No, false, false, "", "ルーブル")}, + {0x3355, 0, 0, 0, g(Yes, No, false, false, "", "レム")}, + {0x3356, 0, 0, 0, g(Yes, No, false, false, "", "レントゲン")}, + {0x3357, 0, 0, 0, g(Yes, No, false, false, "", "ワット")}, + {0x3358, 0, 0, 0, g(Yes, No, false, false, "", "0点")}, + {0x3359, 0, 0, 0, g(Yes, No, false, false, "", "1点")}, + {0x335a, 0, 0, 0, g(Yes, No, false, false, "", "2点")}, + {0x335b, 0, 0, 0, g(Yes, No, false, false, "", "3点")}, + {0x335c, 0, 0, 0, g(Yes, No, false, false, "", "4点")}, + {0x335d, 0, 0, 0, g(Yes, No, false, false, "", "5点")}, + {0x335e, 0, 0, 0, g(Yes, No, false, false, "", "6点")}, + {0x335f, 0, 0, 0, g(Yes, No, false, false, "", "7点")}, + {0x3360, 0, 0, 0, g(Yes, No, false, false, "", "8点")}, + {0x3361, 0, 0, 0, g(Yes, No, false, false, "", "9点")}, + {0x3362, 0, 0, 0, g(Yes, No, false, false, "", "10点")}, + {0x3363, 0, 0, 0, g(Yes, No, false, false, "", "11点")}, + {0x3364, 0, 0, 0, g(Yes, No, false, false, "", "12点")}, + {0x3365, 0, 0, 0, g(Yes, No, false, false, "", "13点")}, + {0x3366, 0, 0, 0, g(Yes, No, false, false, "", "14点")}, + {0x3367, 0, 0, 0, g(Yes, No, false, false, "", "15点")}, + {0x3368, 0, 0, 0, g(Yes, No, false, false, "", "16点")}, + {0x3369, 0, 0, 0, g(Yes, No, false, false, "", "17点")}, + {0x336a, 0, 0, 0, g(Yes, No, false, false, "", "18点")}, + {0x336b, 0, 0, 0, g(Yes, No, false, false, "", "19点")}, + {0x336c, 0, 0, 0, g(Yes, No, false, false, "", "20点")}, + {0x336d, 0, 0, 0, g(Yes, No, false, false, "", "21点")}, + {0x336e, 0, 0, 0, g(Yes, No, false, false, "", "22点")}, + {0x336f, 0, 0, 0, g(Yes, No, false, false, "", "23点")}, + {0x3370, 0, 0, 0, g(Yes, No, false, false, "", "24点")}, + {0x3371, 0, 0, 0, g(Yes, No, false, false, "", "hPa")}, + {0x3372, 0, 0, 0, g(Yes, No, false, false, "", "da")}, + {0x3373, 0, 0, 0, g(Yes, No, false, false, "", "AU")}, + {0x3374, 0, 0, 0, g(Yes, No, false, false, "", "bar")}, + {0x3375, 0, 0, 0, g(Yes, No, false, false, "", "oV")}, + {0x3376, 0, 0, 0, g(Yes, No, false, false, "", "pc")}, + {0x3377, 0, 0, 0, g(Yes, No, false, false, "", "dm")}, + {0x3378, 0, 0, 0, g(Yes, No, false, false, "", "dm2")}, + {0x3379, 0, 0, 0, g(Yes, No, false, false, "", "dm3")}, + {0x337a, 0, 0, 0, g(Yes, No, false, false, "", "IU")}, + {0x337b, 0, 0, 0, g(Yes, No, false, false, "", "平成")}, + {0x337c, 0, 0, 0, g(Yes, No, false, false, "", "昭和")}, + {0x337d, 0, 0, 0, g(Yes, No, false, false, "", "大正")}, + {0x337e, 0, 0, 0, g(Yes, No, false, false, "", "明治")}, + {0x337f, 0, 0, 0, g(Yes, No, false, false, "", "株式会社")}, + {0x3380, 0, 0, 0, g(Yes, No, false, false, "", "pA")}, + {0x3381, 0, 0, 0, g(Yes, No, false, false, "", "nA")}, + {0x3382, 0, 0, 0, g(Yes, No, false, false, "", "μA")}, + {0x3383, 0, 0, 0, g(Yes, No, false, false, "", "mA")}, + {0x3384, 0, 0, 0, g(Yes, No, false, false, "", "kA")}, + {0x3385, 0, 0, 0, g(Yes, No, false, false, "", "KB")}, + {0x3386, 0, 0, 0, g(Yes, No, false, false, "", "MB")}, + {0x3387, 0, 0, 0, g(Yes, No, false, false, "", "GB")}, + {0x3388, 0, 0, 0, g(Yes, No, false, false, "", "cal")}, + {0x3389, 0, 0, 0, g(Yes, No, false, false, "", "kcal")}, + {0x338a, 0, 0, 0, g(Yes, No, false, false, "", "pF")}, + {0x338b, 0, 0, 0, g(Yes, No, false, false, "", "nF")}, + {0x338c, 0, 0, 0, g(Yes, No, false, false, "", "μF")}, + {0x338d, 0, 0, 0, g(Yes, No, false, false, "", "μg")}, + {0x338e, 0, 0, 0, g(Yes, No, false, false, "", "mg")}, + {0x338f, 0, 0, 0, g(Yes, No, false, false, "", "kg")}, + {0x3390, 0, 0, 0, g(Yes, No, false, false, "", "Hz")}, + {0x3391, 0, 0, 0, g(Yes, No, false, false, "", "kHz")}, + {0x3392, 0, 0, 0, g(Yes, No, false, false, "", "MHz")}, + {0x3393, 0, 0, 0, g(Yes, No, false, false, "", "GHz")}, + {0x3394, 0, 0, 0, g(Yes, No, false, false, "", "THz")}, + {0x3395, 0, 0, 0, g(Yes, No, false, false, "", "μl")}, + {0x3396, 0, 0, 0, g(Yes, No, false, false, "", "ml")}, + {0x3397, 0, 0, 0, g(Yes, No, false, false, "", "dl")}, + {0x3398, 0, 0, 0, g(Yes, No, false, false, "", "kl")}, + {0x3399, 0, 0, 0, g(Yes, No, false, false, "", "fm")}, + {0x339a, 0, 0, 0, g(Yes, No, false, false, "", "nm")}, + {0x339b, 0, 0, 0, g(Yes, No, false, false, "", "μm")}, + {0x339c, 0, 0, 0, g(Yes, No, false, false, "", "mm")}, + {0x339d, 0, 0, 0, g(Yes, No, false, false, "", "cm")}, + {0x339e, 0, 0, 0, g(Yes, No, false, false, "", "km")}, + {0x339f, 0, 0, 0, g(Yes, No, false, false, "", "mm2")}, + {0x33a0, 0, 0, 0, g(Yes, No, false, false, "", "cm2")}, + {0x33a1, 0, 0, 0, g(Yes, No, false, false, "", "m2")}, + {0x33a2, 0, 0, 0, g(Yes, No, false, false, "", "km2")}, + {0x33a3, 0, 0, 0, g(Yes, No, false, false, "", "mm3")}, + {0x33a4, 0, 0, 0, g(Yes, No, false, false, "", "cm3")}, + {0x33a5, 0, 0, 0, g(Yes, No, false, false, "", "m3")}, + {0x33a6, 0, 0, 0, g(Yes, No, false, false, "", "km3")}, + {0x33a7, 0, 0, 0, g(Yes, No, false, false, "", "m∕s")}, + {0x33a8, 0, 0, 0, g(Yes, No, false, false, "", "m∕s2")}, + {0x33a9, 0, 0, 0, g(Yes, No, false, false, "", "Pa")}, + {0x33aa, 0, 0, 0, g(Yes, No, false, false, "", "kPa")}, + {0x33ab, 0, 0, 0, g(Yes, No, false, false, "", "MPa")}, + {0x33ac, 0, 0, 0, g(Yes, No, false, false, "", "GPa")}, + {0x33ad, 0, 0, 0, g(Yes, No, false, false, "", "rad")}, + {0x33ae, 0, 0, 0, g(Yes, No, false, false, "", "rad∕s")}, + {0x33af, 0, 0, 0, g(Yes, No, false, false, "", "rad∕s2")}, + {0x33b0, 0, 0, 0, g(Yes, No, false, false, "", "ps")}, + {0x33b1, 0, 0, 0, g(Yes, No, false, false, "", "ns")}, + {0x33b2, 0, 0, 0, g(Yes, No, false, false, "", "μs")}, + {0x33b3, 0, 0, 0, g(Yes, No, false, false, "", "ms")}, + {0x33b4, 0, 0, 0, g(Yes, No, false, false, "", "pV")}, + {0x33b5, 0, 0, 0, g(Yes, No, false, false, "", "nV")}, + {0x33b6, 0, 0, 0, g(Yes, No, false, false, "", "μV")}, + {0x33b7, 0, 0, 0, g(Yes, No, false, false, "", "mV")}, + {0x33b8, 0, 0, 0, g(Yes, No, false, false, "", "kV")}, + {0x33b9, 0, 0, 0, g(Yes, No, false, false, "", "MV")}, + {0x33ba, 0, 0, 0, g(Yes, No, false, false, "", "pW")}, + {0x33bb, 0, 0, 0, g(Yes, No, false, false, "", "nW")}, + {0x33bc, 0, 0, 0, g(Yes, No, false, false, "", "μW")}, + {0x33bd, 0, 0, 0, g(Yes, No, false, false, "", "mW")}, + {0x33be, 0, 0, 0, g(Yes, No, false, false, "", "kW")}, + {0x33bf, 0, 0, 0, g(Yes, No, false, false, "", "MW")}, + {0x33c0, 0, 0, 0, g(Yes, No, false, false, "", "kΩ")}, + {0x33c1, 0, 0, 0, g(Yes, No, false, false, "", "MΩ")}, + {0x33c2, 0, 0, 0, g(Yes, No, false, false, "", "a.m.")}, + {0x33c3, 0, 0, 0, g(Yes, No, false, false, "", "Bq")}, + {0x33c4, 0, 0, 0, g(Yes, No, false, false, "", "cc")}, + {0x33c5, 0, 0, 0, g(Yes, No, false, false, "", "cd")}, + {0x33c6, 0, 0, 0, g(Yes, No, false, false, "", "C∕kg")}, + {0x33c7, 0, 0, 0, g(Yes, No, false, false, "", "Co.")}, + {0x33c8, 0, 0, 0, g(Yes, No, false, false, "", "dB")}, + {0x33c9, 0, 0, 0, g(Yes, No, false, false, "", "Gy")}, + {0x33ca, 0, 0, 0, g(Yes, No, false, false, "", "ha")}, + {0x33cb, 0, 0, 0, g(Yes, No, false, false, "", "HP")}, + {0x33cc, 0, 0, 0, g(Yes, No, false, false, "", "in")}, + {0x33cd, 0, 0, 0, g(Yes, No, false, false, "", "KK")}, + {0x33ce, 0, 0, 0, g(Yes, No, false, false, "", "KM")}, + {0x33cf, 0, 0, 0, g(Yes, No, false, false, "", "kt")}, + {0x33d0, 0, 0, 0, g(Yes, No, false, false, "", "lm")}, + {0x33d1, 0, 0, 0, g(Yes, No, false, false, "", "ln")}, + {0x33d2, 0, 0, 0, g(Yes, No, false, false, "", "log")}, + {0x33d3, 0, 0, 0, g(Yes, No, false, false, "", "lx")}, + {0x33d4, 0, 0, 0, g(Yes, No, false, false, "", "mb")}, + {0x33d5, 0, 0, 0, g(Yes, No, false, false, "", "mil")}, + {0x33d6, 0, 0, 0, g(Yes, No, false, false, "", "mol")}, + {0x33d7, 0, 0, 0, g(Yes, No, false, false, "", "PH")}, + {0x33d8, 0, 0, 0, g(Yes, No, false, false, "", "p.m.")}, + {0x33d9, 0, 0, 0, g(Yes, No, false, false, "", "PPM")}, + {0x33da, 0, 0, 0, g(Yes, No, false, false, "", "PR")}, + {0x33db, 0, 0, 0, g(Yes, No, false, false, "", "sr")}, + {0x33dc, 0, 0, 0, g(Yes, No, false, false, "", "Sv")}, + {0x33dd, 0, 0, 0, g(Yes, No, false, false, "", "Wb")}, + {0x33de, 0, 0, 0, g(Yes, No, false, false, "", "V∕m")}, + {0x33df, 0, 0, 0, g(Yes, No, false, false, "", "A∕m")}, + {0x33e0, 0, 0, 0, g(Yes, No, false, false, "", "1日")}, + {0x33e1, 0, 0, 0, g(Yes, No, false, false, "", "2日")}, + {0x33e2, 0, 0, 0, g(Yes, No, false, false, "", "3日")}, + {0x33e3, 0, 0, 0, g(Yes, No, false, false, "", "4日")}, + {0x33e4, 0, 0, 0, g(Yes, No, false, false, "", "5日")}, + {0x33e5, 0, 0, 0, g(Yes, No, false, false, "", "6日")}, + {0x33e6, 0, 0, 0, g(Yes, No, false, false, "", "7日")}, + {0x33e7, 0, 0, 0, g(Yes, No, false, false, "", "8日")}, + {0x33e8, 0, 0, 0, g(Yes, No, false, false, "", "9日")}, + {0x33e9, 0, 0, 0, g(Yes, No, false, false, "", "10日")}, + {0x33ea, 0, 0, 0, g(Yes, No, false, false, "", "11日")}, + {0x33eb, 0, 0, 0, g(Yes, No, false, false, "", "12日")}, + {0x33ec, 0, 0, 0, g(Yes, No, false, false, "", "13日")}, + {0x33ed, 0, 0, 0, g(Yes, No, false, false, "", "14日")}, + {0x33ee, 0, 0, 0, g(Yes, No, false, false, "", "15日")}, + {0x33ef, 0, 0, 0, g(Yes, No, false, false, "", "16日")}, + {0x33f0, 0, 0, 0, g(Yes, No, false, false, "", "17日")}, + {0x33f1, 0, 0, 0, g(Yes, No, false, false, "", "18日")}, + {0x33f2, 0, 0, 0, g(Yes, No, false, false, "", "19日")}, + {0x33f3, 0, 0, 0, g(Yes, No, false, false, "", "20日")}, + {0x33f4, 0, 0, 0, g(Yes, No, false, false, "", "21日")}, + {0x33f5, 0, 0, 0, g(Yes, No, false, false, "", "22日")}, + {0x33f6, 0, 0, 0, g(Yes, No, false, false, "", "23日")}, + {0x33f7, 0, 0, 0, g(Yes, No, false, false, "", "24日")}, + {0x33f8, 0, 0, 0, g(Yes, No, false, false, "", "25日")}, + {0x33f9, 0, 0, 0, g(Yes, No, false, false, "", "26日")}, + {0x33fa, 0, 0, 0, g(Yes, No, false, false, "", "27日")}, + {0x33fb, 0, 0, 0, g(Yes, No, false, false, "", "28日")}, + {0x33fc, 0, 0, 0, g(Yes, No, false, false, "", "29日")}, + {0x33fd, 0, 0, 0, g(Yes, No, false, false, "", "30日")}, + {0x33fe, 0, 0, 0, g(Yes, No, false, false, "", "31日")}, + {0x33ff, 0, 0, 0, g(Yes, No, false, false, "", "gal")}, + {0x3400, 0, 0, 0, f(Yes, false, "")}, + {0xa66f, 230, 1, 1, f(Yes, false, "")}, + {0xa670, 0, 0, 0, f(Yes, false, "")}, + {0xa674, 230, 1, 1, f(Yes, false, "")}, + {0xa67e, 0, 0, 0, f(Yes, false, "")}, + {0xa69c, 0, 0, 0, g(Yes, No, false, false, "", "ъ")}, + {0xa69d, 0, 0, 0, g(Yes, No, false, false, "", "ь")}, + {0xa69e, 230, 1, 1, f(Yes, false, "")}, + {0xa6a0, 0, 0, 0, f(Yes, false, "")}, + {0xa6f0, 230, 1, 1, f(Yes, false, "")}, + {0xa6f2, 0, 0, 0, f(Yes, false, "")}, + {0xa770, 0, 0, 0, g(Yes, No, false, false, "", "ꝯ")}, + {0xa771, 0, 0, 0, f(Yes, false, "")}, + {0xa7f8, 0, 0, 0, g(Yes, No, false, false, "", "Ħ")}, + {0xa7f9, 0, 0, 0, g(Yes, No, false, false, "", "œ")}, + {0xa7fa, 0, 0, 0, f(Yes, false, "")}, + {0xa806, 9, 1, 1, f(Yes, false, "")}, + {0xa807, 0, 0, 0, f(Yes, false, "")}, + {0xa8c4, 9, 1, 1, f(Yes, false, "")}, + {0xa8c5, 0, 0, 0, f(Yes, false, "")}, + {0xa8e0, 230, 1, 1, f(Yes, false, "")}, + {0xa8f2, 0, 0, 0, f(Yes, false, "")}, + {0xa92b, 220, 1, 1, f(Yes, false, "")}, + {0xa92e, 0, 0, 0, f(Yes, false, "")}, + {0xa953, 9, 1, 1, f(Yes, false, "")}, + {0xa954, 0, 0, 0, f(Yes, false, "")}, + {0xa9b3, 7, 1, 1, f(Yes, false, "")}, + {0xa9b4, 0, 0, 0, f(Yes, false, "")}, + {0xa9c0, 9, 1, 1, f(Yes, false, "")}, + {0xa9c1, 0, 0, 0, f(Yes, false, "")}, + {0xaab0, 230, 1, 1, f(Yes, false, "")}, + {0xaab1, 0, 0, 0, f(Yes, false, "")}, + {0xaab2, 230, 1, 1, f(Yes, false, "")}, + {0xaab4, 220, 1, 1, f(Yes, false, "")}, + {0xaab5, 0, 0, 0, f(Yes, false, "")}, + {0xaab7, 230, 1, 1, f(Yes, false, "")}, + {0xaab9, 0, 0, 0, f(Yes, false, "")}, + {0xaabe, 230, 1, 1, f(Yes, false, "")}, + {0xaac0, 0, 0, 0, f(Yes, false, "")}, + {0xaac1, 230, 1, 1, f(Yes, false, "")}, + {0xaac2, 0, 0, 0, f(Yes, false, "")}, + {0xaaf6, 9, 1, 1, f(Yes, false, "")}, + {0xaaf7, 0, 0, 0, f(Yes, false, "")}, + {0xab5c, 0, 0, 0, g(Yes, No, false, false, "", "ꜧ")}, + {0xab5d, 0, 0, 0, g(Yes, No, false, false, "", "ꬷ")}, + {0xab5e, 0, 0, 0, g(Yes, No, false, false, "", "ɫ")}, + {0xab5f, 0, 0, 0, g(Yes, No, false, false, "", "ꭒ")}, + {0xab60, 0, 0, 0, f(Yes, false, "")}, + {0xabed, 9, 1, 1, f(Yes, false, "")}, + {0xabee, 0, 0, 0, f(Yes, false, "")}, + {0xac00, 0, 0, 1, f(Yes, true, "")}, + {0xac01, 0, 0, 2, f(Yes, false, "")}, + {0xac1c, 0, 0, 1, f(Yes, true, "")}, + {0xac1d, 0, 0, 2, f(Yes, false, "")}, + {0xac38, 0, 0, 1, f(Yes, true, "")}, + {0xac39, 0, 0, 2, f(Yes, false, "")}, + {0xac54, 0, 0, 1, f(Yes, true, "")}, + {0xac55, 0, 0, 2, f(Yes, false, "")}, + {0xac70, 0, 0, 1, f(Yes, true, "")}, + {0xac71, 0, 0, 2, f(Yes, false, "")}, + {0xac8c, 0, 0, 1, f(Yes, true, "")}, + {0xac8d, 0, 0, 2, f(Yes, false, "")}, + {0xaca8, 0, 0, 1, f(Yes, true, "")}, + {0xaca9, 0, 0, 2, f(Yes, false, "")}, + {0xacc4, 0, 0, 1, f(Yes, true, "")}, + {0xacc5, 0, 0, 2, f(Yes, false, "")}, + {0xace0, 0, 0, 1, f(Yes, true, "")}, + {0xace1, 0, 0, 2, f(Yes, false, "")}, + {0xacfc, 0, 0, 1, f(Yes, true, "")}, + {0xacfd, 0, 0, 2, f(Yes, false, "")}, + {0xad18, 0, 0, 1, f(Yes, true, "")}, + {0xad19, 0, 0, 2, f(Yes, false, "")}, + {0xad34, 0, 0, 1, f(Yes, true, "")}, + {0xad35, 0, 0, 2, f(Yes, false, "")}, + {0xad50, 0, 0, 1, f(Yes, true, "")}, + {0xad51, 0, 0, 2, f(Yes, false, "")}, + {0xad6c, 0, 0, 1, f(Yes, true, "")}, + {0xad6d, 0, 0, 2, f(Yes, false, "")}, + {0xad88, 0, 0, 1, f(Yes, true, "")}, + {0xad89, 0, 0, 2, f(Yes, false, "")}, + {0xada4, 0, 0, 1, f(Yes, true, "")}, + {0xada5, 0, 0, 2, f(Yes, false, "")}, + {0xadc0, 0, 0, 1, f(Yes, true, "")}, + {0xadc1, 0, 0, 2, f(Yes, false, "")}, + {0xaddc, 0, 0, 1, f(Yes, true, "")}, + {0xaddd, 0, 0, 2, f(Yes, false, "")}, + {0xadf8, 0, 0, 1, f(Yes, true, "")}, + {0xadf9, 0, 0, 2, f(Yes, false, "")}, + {0xae14, 0, 0, 1, f(Yes, true, "")}, + {0xae15, 0, 0, 2, f(Yes, false, "")}, + {0xae30, 0, 0, 1, f(Yes, true, "")}, + {0xae31, 0, 0, 2, f(Yes, false, "")}, + {0xae4c, 0, 0, 1, f(Yes, true, "")}, + {0xae4d, 0, 0, 2, f(Yes, false, "")}, + {0xae68, 0, 0, 1, f(Yes, true, "")}, + {0xae69, 0, 0, 2, f(Yes, false, "")}, + {0xae84, 0, 0, 1, f(Yes, true, "")}, + {0xae85, 0, 0, 2, f(Yes, false, "")}, + {0xaea0, 0, 0, 1, f(Yes, true, "")}, + {0xaea1, 0, 0, 2, f(Yes, false, "")}, + {0xaebc, 0, 0, 1, f(Yes, true, "")}, + {0xaebd, 0, 0, 2, f(Yes, false, "")}, + {0xaed8, 0, 0, 1, f(Yes, true, "")}, + {0xaed9, 0, 0, 2, f(Yes, false, "")}, + {0xaef4, 0, 0, 1, f(Yes, true, "")}, + {0xaef5, 0, 0, 2, f(Yes, false, "")}, + {0xaf10, 0, 0, 1, f(Yes, true, "")}, + {0xaf11, 0, 0, 2, f(Yes, false, "")}, + {0xaf2c, 0, 0, 1, f(Yes, true, "")}, + {0xaf2d, 0, 0, 2, f(Yes, false, "")}, + {0xaf48, 0, 0, 1, f(Yes, true, "")}, + {0xaf49, 0, 0, 2, f(Yes, false, "")}, + {0xaf64, 0, 0, 1, f(Yes, true, "")}, + {0xaf65, 0, 0, 2, f(Yes, false, "")}, + {0xaf80, 0, 0, 1, f(Yes, true, "")}, + {0xaf81, 0, 0, 2, f(Yes, false, "")}, + {0xaf9c, 0, 0, 1, f(Yes, true, "")}, + {0xaf9d, 0, 0, 2, f(Yes, false, "")}, + {0xafb8, 0, 0, 1, f(Yes, true, "")}, + {0xafb9, 0, 0, 2, f(Yes, false, "")}, + {0xafd4, 0, 0, 1, f(Yes, true, "")}, + {0xafd5, 0, 0, 2, f(Yes, false, "")}, + {0xaff0, 0, 0, 1, f(Yes, true, "")}, + {0xaff1, 0, 0, 2, f(Yes, false, "")}, + {0xb00c, 0, 0, 1, f(Yes, true, "")}, + {0xb00d, 0, 0, 2, f(Yes, false, "")}, + {0xb028, 0, 0, 1, f(Yes, true, "")}, + {0xb029, 0, 0, 2, f(Yes, false, "")}, + {0xb044, 0, 0, 1, f(Yes, true, "")}, + {0xb045, 0, 0, 2, f(Yes, false, "")}, + {0xb060, 0, 0, 1, f(Yes, true, "")}, + {0xb061, 0, 0, 2, f(Yes, false, "")}, + {0xb07c, 0, 0, 1, f(Yes, true, "")}, + {0xb07d, 0, 0, 2, f(Yes, false, "")}, + {0xb098, 0, 0, 1, f(Yes, true, "")}, + {0xb099, 0, 0, 2, f(Yes, false, "")}, + {0xb0b4, 0, 0, 1, f(Yes, true, "")}, + {0xb0b5, 0, 0, 2, f(Yes, false, "")}, + {0xb0d0, 0, 0, 1, f(Yes, true, "")}, + {0xb0d1, 0, 0, 2, f(Yes, false, "")}, + {0xb0ec, 0, 0, 1, f(Yes, true, "")}, + {0xb0ed, 0, 0, 2, f(Yes, false, "")}, + {0xb108, 0, 0, 1, f(Yes, true, "")}, + {0xb109, 0, 0, 2, f(Yes, false, "")}, + {0xb124, 0, 0, 1, f(Yes, true, "")}, + {0xb125, 0, 0, 2, f(Yes, false, "")}, + {0xb140, 0, 0, 1, f(Yes, true, "")}, + {0xb141, 0, 0, 2, f(Yes, false, "")}, + {0xb15c, 0, 0, 1, f(Yes, true, "")}, + {0xb15d, 0, 0, 2, f(Yes, false, "")}, + {0xb178, 0, 0, 1, f(Yes, true, "")}, + {0xb179, 0, 0, 2, f(Yes, false, "")}, + {0xb194, 0, 0, 1, f(Yes, true, "")}, + {0xb195, 0, 0, 2, f(Yes, false, "")}, + {0xb1b0, 0, 0, 1, f(Yes, true, "")}, + {0xb1b1, 0, 0, 2, f(Yes, false, "")}, + {0xb1cc, 0, 0, 1, f(Yes, true, "")}, + {0xb1cd, 0, 0, 2, f(Yes, false, "")}, + {0xb1e8, 0, 0, 1, f(Yes, true, "")}, + {0xb1e9, 0, 0, 2, f(Yes, false, "")}, + {0xb204, 0, 0, 1, f(Yes, true, "")}, + {0xb205, 0, 0, 2, f(Yes, false, "")}, + {0xb220, 0, 0, 1, f(Yes, true, "")}, + {0xb221, 0, 0, 2, f(Yes, false, "")}, + {0xb23c, 0, 0, 1, f(Yes, true, "")}, + {0xb23d, 0, 0, 2, f(Yes, false, "")}, + {0xb258, 0, 0, 1, f(Yes, true, "")}, + {0xb259, 0, 0, 2, f(Yes, false, "")}, + {0xb274, 0, 0, 1, f(Yes, true, "")}, + {0xb275, 0, 0, 2, f(Yes, false, "")}, + {0xb290, 0, 0, 1, f(Yes, true, "")}, + {0xb291, 0, 0, 2, f(Yes, false, "")}, + {0xb2ac, 0, 0, 1, f(Yes, true, "")}, + {0xb2ad, 0, 0, 2, f(Yes, false, "")}, + {0xb2c8, 0, 0, 1, f(Yes, true, "")}, + {0xb2c9, 0, 0, 2, f(Yes, false, "")}, + {0xb2e4, 0, 0, 1, f(Yes, true, "")}, + {0xb2e5, 0, 0, 2, f(Yes, false, "")}, + {0xb300, 0, 0, 1, f(Yes, true, "")}, + {0xb301, 0, 0, 2, f(Yes, false, "")}, + {0xb31c, 0, 0, 1, f(Yes, true, "")}, + {0xb31d, 0, 0, 2, f(Yes, false, "")}, + {0xb338, 0, 0, 1, f(Yes, true, "")}, + {0xb339, 0, 0, 2, f(Yes, false, "")}, + {0xb354, 0, 0, 1, f(Yes, true, "")}, + {0xb355, 0, 0, 2, f(Yes, false, "")}, + {0xb370, 0, 0, 1, f(Yes, true, "")}, + {0xb371, 0, 0, 2, f(Yes, false, "")}, + {0xb38c, 0, 0, 1, f(Yes, true, "")}, + {0xb38d, 0, 0, 2, f(Yes, false, "")}, + {0xb3a8, 0, 0, 1, f(Yes, true, "")}, + {0xb3a9, 0, 0, 2, f(Yes, false, "")}, + {0xb3c4, 0, 0, 1, f(Yes, true, "")}, + {0xb3c5, 0, 0, 2, f(Yes, false, "")}, + {0xb3e0, 0, 0, 1, f(Yes, true, "")}, + {0xb3e1, 0, 0, 2, f(Yes, false, "")}, + {0xb3fc, 0, 0, 1, f(Yes, true, "")}, + {0xb3fd, 0, 0, 2, f(Yes, false, "")}, + {0xb418, 0, 0, 1, f(Yes, true, "")}, + {0xb419, 0, 0, 2, f(Yes, false, "")}, + {0xb434, 0, 0, 1, f(Yes, true, "")}, + {0xb435, 0, 0, 2, f(Yes, false, "")}, + {0xb450, 0, 0, 1, f(Yes, true, "")}, + {0xb451, 0, 0, 2, f(Yes, false, "")}, + {0xb46c, 0, 0, 1, f(Yes, true, "")}, + {0xb46d, 0, 0, 2, f(Yes, false, "")}, + {0xb488, 0, 0, 1, f(Yes, true, "")}, + {0xb489, 0, 0, 2, f(Yes, false, "")}, + {0xb4a4, 0, 0, 1, f(Yes, true, "")}, + {0xb4a5, 0, 0, 2, f(Yes, false, "")}, + {0xb4c0, 0, 0, 1, f(Yes, true, "")}, + {0xb4c1, 0, 0, 2, f(Yes, false, "")}, + {0xb4dc, 0, 0, 1, f(Yes, true, "")}, + {0xb4dd, 0, 0, 2, f(Yes, false, "")}, + {0xb4f8, 0, 0, 1, f(Yes, true, "")}, + {0xb4f9, 0, 0, 2, f(Yes, false, "")}, + {0xb514, 0, 0, 1, f(Yes, true, "")}, + {0xb515, 0, 0, 2, f(Yes, false, "")}, + {0xb530, 0, 0, 1, f(Yes, true, "")}, + {0xb531, 0, 0, 2, f(Yes, false, "")}, + {0xb54c, 0, 0, 1, f(Yes, true, "")}, + {0xb54d, 0, 0, 2, f(Yes, false, "")}, + {0xb568, 0, 0, 1, f(Yes, true, "")}, + {0xb569, 0, 0, 2, f(Yes, false, "")}, + {0xb584, 0, 0, 1, f(Yes, true, "")}, + {0xb585, 0, 0, 2, f(Yes, false, "")}, + {0xb5a0, 0, 0, 1, f(Yes, true, "")}, + {0xb5a1, 0, 0, 2, f(Yes, false, "")}, + {0xb5bc, 0, 0, 1, f(Yes, true, "")}, + {0xb5bd, 0, 0, 2, f(Yes, false, "")}, + {0xb5d8, 0, 0, 1, f(Yes, true, "")}, + {0xb5d9, 0, 0, 2, f(Yes, false, "")}, + {0xb5f4, 0, 0, 1, f(Yes, true, "")}, + {0xb5f5, 0, 0, 2, f(Yes, false, "")}, + {0xb610, 0, 0, 1, f(Yes, true, "")}, + {0xb611, 0, 0, 2, f(Yes, false, "")}, + {0xb62c, 0, 0, 1, f(Yes, true, "")}, + {0xb62d, 0, 0, 2, f(Yes, false, "")}, + {0xb648, 0, 0, 1, f(Yes, true, "")}, + {0xb649, 0, 0, 2, f(Yes, false, "")}, + {0xb664, 0, 0, 1, f(Yes, true, "")}, + {0xb665, 0, 0, 2, f(Yes, false, "")}, + {0xb680, 0, 0, 1, f(Yes, true, "")}, + {0xb681, 0, 0, 2, f(Yes, false, "")}, + {0xb69c, 0, 0, 1, f(Yes, true, "")}, + {0xb69d, 0, 0, 2, f(Yes, false, "")}, + {0xb6b8, 0, 0, 1, f(Yes, true, "")}, + {0xb6b9, 0, 0, 2, f(Yes, false, "")}, + {0xb6d4, 0, 0, 1, f(Yes, true, "")}, + {0xb6d5, 0, 0, 2, f(Yes, false, "")}, + {0xb6f0, 0, 0, 1, f(Yes, true, "")}, + {0xb6f1, 0, 0, 2, f(Yes, false, "")}, + {0xb70c, 0, 0, 1, f(Yes, true, "")}, + {0xb70d, 0, 0, 2, f(Yes, false, "")}, + {0xb728, 0, 0, 1, f(Yes, true, "")}, + {0xb729, 0, 0, 2, f(Yes, false, "")}, + {0xb744, 0, 0, 1, f(Yes, true, "")}, + {0xb745, 0, 0, 2, f(Yes, false, "")}, + {0xb760, 0, 0, 1, f(Yes, true, "")}, + {0xb761, 0, 0, 2, f(Yes, false, "")}, + {0xb77c, 0, 0, 1, f(Yes, true, "")}, + {0xb77d, 0, 0, 2, f(Yes, false, "")}, + {0xb798, 0, 0, 1, f(Yes, true, "")}, + {0xb799, 0, 0, 2, f(Yes, false, "")}, + {0xb7b4, 0, 0, 1, f(Yes, true, "")}, + {0xb7b5, 0, 0, 2, f(Yes, false, "")}, + {0xb7d0, 0, 0, 1, f(Yes, true, "")}, + {0xb7d1, 0, 0, 2, f(Yes, false, "")}, + {0xb7ec, 0, 0, 1, f(Yes, true, "")}, + {0xb7ed, 0, 0, 2, f(Yes, false, "")}, + {0xb808, 0, 0, 1, f(Yes, true, "")}, + {0xb809, 0, 0, 2, f(Yes, false, "")}, + {0xb824, 0, 0, 1, f(Yes, true, "")}, + {0xb825, 0, 0, 2, f(Yes, false, "")}, + {0xb840, 0, 0, 1, f(Yes, true, "")}, + {0xb841, 0, 0, 2, f(Yes, false, "")}, + {0xb85c, 0, 0, 1, f(Yes, true, "")}, + {0xb85d, 0, 0, 2, f(Yes, false, "")}, + {0xb878, 0, 0, 1, f(Yes, true, "")}, + {0xb879, 0, 0, 2, f(Yes, false, "")}, + {0xb894, 0, 0, 1, f(Yes, true, "")}, + {0xb895, 0, 0, 2, f(Yes, false, "")}, + {0xb8b0, 0, 0, 1, f(Yes, true, "")}, + {0xb8b1, 0, 0, 2, f(Yes, false, "")}, + {0xb8cc, 0, 0, 1, f(Yes, true, "")}, + {0xb8cd, 0, 0, 2, f(Yes, false, "")}, + {0xb8e8, 0, 0, 1, f(Yes, true, "")}, + {0xb8e9, 0, 0, 2, f(Yes, false, "")}, + {0xb904, 0, 0, 1, f(Yes, true, "")}, + {0xb905, 0, 0, 2, f(Yes, false, "")}, + {0xb920, 0, 0, 1, f(Yes, true, "")}, + {0xb921, 0, 0, 2, f(Yes, false, "")}, + {0xb93c, 0, 0, 1, f(Yes, true, "")}, + {0xb93d, 0, 0, 2, f(Yes, false, "")}, + {0xb958, 0, 0, 1, f(Yes, true, "")}, + {0xb959, 0, 0, 2, f(Yes, false, "")}, + {0xb974, 0, 0, 1, f(Yes, true, "")}, + {0xb975, 0, 0, 2, f(Yes, false, "")}, + {0xb990, 0, 0, 1, f(Yes, true, "")}, + {0xb991, 0, 0, 2, f(Yes, false, "")}, + {0xb9ac, 0, 0, 1, f(Yes, true, "")}, + {0xb9ad, 0, 0, 2, f(Yes, false, "")}, + {0xb9c8, 0, 0, 1, f(Yes, true, "")}, + {0xb9c9, 0, 0, 2, f(Yes, false, "")}, + {0xb9e4, 0, 0, 1, f(Yes, true, "")}, + {0xb9e5, 0, 0, 2, f(Yes, false, "")}, + {0xba00, 0, 0, 1, f(Yes, true, "")}, + {0xba01, 0, 0, 2, f(Yes, false, "")}, + {0xba1c, 0, 0, 1, f(Yes, true, "")}, + {0xba1d, 0, 0, 2, f(Yes, false, "")}, + {0xba38, 0, 0, 1, f(Yes, true, "")}, + {0xba39, 0, 0, 2, f(Yes, false, "")}, + {0xba54, 0, 0, 1, f(Yes, true, "")}, + {0xba55, 0, 0, 2, f(Yes, false, "")}, + {0xba70, 0, 0, 1, f(Yes, true, "")}, + {0xba71, 0, 0, 2, f(Yes, false, "")}, + {0xba8c, 0, 0, 1, f(Yes, true, "")}, + {0xba8d, 0, 0, 2, f(Yes, false, "")}, + {0xbaa8, 0, 0, 1, f(Yes, true, "")}, + {0xbaa9, 0, 0, 2, f(Yes, false, "")}, + {0xbac4, 0, 0, 1, f(Yes, true, "")}, + {0xbac5, 0, 0, 2, f(Yes, false, "")}, + {0xbae0, 0, 0, 1, f(Yes, true, "")}, + {0xbae1, 0, 0, 2, f(Yes, false, "")}, + {0xbafc, 0, 0, 1, f(Yes, true, "")}, + {0xbafd, 0, 0, 2, f(Yes, false, "")}, + {0xbb18, 0, 0, 1, f(Yes, true, "")}, + {0xbb19, 0, 0, 2, f(Yes, false, "")}, + {0xbb34, 0, 0, 1, f(Yes, true, "")}, + {0xbb35, 0, 0, 2, f(Yes, false, "")}, + {0xbb50, 0, 0, 1, f(Yes, true, "")}, + {0xbb51, 0, 0, 2, f(Yes, false, "")}, + {0xbb6c, 0, 0, 1, f(Yes, true, "")}, + {0xbb6d, 0, 0, 2, f(Yes, false, "")}, + {0xbb88, 0, 0, 1, f(Yes, true, "")}, + {0xbb89, 0, 0, 2, f(Yes, false, "")}, + {0xbba4, 0, 0, 1, f(Yes, true, "")}, + {0xbba5, 0, 0, 2, f(Yes, false, "")}, + {0xbbc0, 0, 0, 1, f(Yes, true, "")}, + {0xbbc1, 0, 0, 2, f(Yes, false, "")}, + {0xbbdc, 0, 0, 1, f(Yes, true, "")}, + {0xbbdd, 0, 0, 2, f(Yes, false, "")}, + {0xbbf8, 0, 0, 1, f(Yes, true, "")}, + {0xbbf9, 0, 0, 2, f(Yes, false, "")}, + {0xbc14, 0, 0, 1, f(Yes, true, "")}, + {0xbc15, 0, 0, 2, f(Yes, false, "")}, + {0xbc30, 0, 0, 1, f(Yes, true, "")}, + {0xbc31, 0, 0, 2, f(Yes, false, "")}, + {0xbc4c, 0, 0, 1, f(Yes, true, "")}, + {0xbc4d, 0, 0, 2, f(Yes, false, "")}, + {0xbc68, 0, 0, 1, f(Yes, true, "")}, + {0xbc69, 0, 0, 2, f(Yes, false, "")}, + {0xbc84, 0, 0, 1, f(Yes, true, "")}, + {0xbc85, 0, 0, 2, f(Yes, false, "")}, + {0xbca0, 0, 0, 1, f(Yes, true, "")}, + {0xbca1, 0, 0, 2, f(Yes, false, "")}, + {0xbcbc, 0, 0, 1, f(Yes, true, "")}, + {0xbcbd, 0, 0, 2, f(Yes, false, "")}, + {0xbcd8, 0, 0, 1, f(Yes, true, "")}, + {0xbcd9, 0, 0, 2, f(Yes, false, "")}, + {0xbcf4, 0, 0, 1, f(Yes, true, "")}, + {0xbcf5, 0, 0, 2, f(Yes, false, "")}, + {0xbd10, 0, 0, 1, f(Yes, true, "")}, + {0xbd11, 0, 0, 2, f(Yes, false, "")}, + {0xbd2c, 0, 0, 1, f(Yes, true, "")}, + {0xbd2d, 0, 0, 2, f(Yes, false, "")}, + {0xbd48, 0, 0, 1, f(Yes, true, "")}, + {0xbd49, 0, 0, 2, f(Yes, false, "")}, + {0xbd64, 0, 0, 1, f(Yes, true, "")}, + {0xbd65, 0, 0, 2, f(Yes, false, "")}, + {0xbd80, 0, 0, 1, f(Yes, true, "")}, + {0xbd81, 0, 0, 2, f(Yes, false, "")}, + {0xbd9c, 0, 0, 1, f(Yes, true, "")}, + {0xbd9d, 0, 0, 2, f(Yes, false, "")}, + {0xbdb8, 0, 0, 1, f(Yes, true, "")}, + {0xbdb9, 0, 0, 2, f(Yes, false, "")}, + {0xbdd4, 0, 0, 1, f(Yes, true, "")}, + {0xbdd5, 0, 0, 2, f(Yes, false, "")}, + {0xbdf0, 0, 0, 1, f(Yes, true, "")}, + {0xbdf1, 0, 0, 2, f(Yes, false, "")}, + {0xbe0c, 0, 0, 1, f(Yes, true, "")}, + {0xbe0d, 0, 0, 2, f(Yes, false, "")}, + {0xbe28, 0, 0, 1, f(Yes, true, "")}, + {0xbe29, 0, 0, 2, f(Yes, false, "")}, + {0xbe44, 0, 0, 1, f(Yes, true, "")}, + {0xbe45, 0, 0, 2, f(Yes, false, "")}, + {0xbe60, 0, 0, 1, f(Yes, true, "")}, + {0xbe61, 0, 0, 2, f(Yes, false, "")}, + {0xbe7c, 0, 0, 1, f(Yes, true, "")}, + {0xbe7d, 0, 0, 2, f(Yes, false, "")}, + {0xbe98, 0, 0, 1, f(Yes, true, "")}, + {0xbe99, 0, 0, 2, f(Yes, false, "")}, + {0xbeb4, 0, 0, 1, f(Yes, true, "")}, + {0xbeb5, 0, 0, 2, f(Yes, false, "")}, + {0xbed0, 0, 0, 1, f(Yes, true, "")}, + {0xbed1, 0, 0, 2, f(Yes, false, "")}, + {0xbeec, 0, 0, 1, f(Yes, true, "")}, + {0xbeed, 0, 0, 2, f(Yes, false, "")}, + {0xbf08, 0, 0, 1, f(Yes, true, "")}, + {0xbf09, 0, 0, 2, f(Yes, false, "")}, + {0xbf24, 0, 0, 1, f(Yes, true, "")}, + {0xbf25, 0, 0, 2, f(Yes, false, "")}, + {0xbf40, 0, 0, 1, f(Yes, true, "")}, + {0xbf41, 0, 0, 2, f(Yes, false, "")}, + {0xbf5c, 0, 0, 1, f(Yes, true, "")}, + {0xbf5d, 0, 0, 2, f(Yes, false, "")}, + {0xbf78, 0, 0, 1, f(Yes, true, "")}, + {0xbf79, 0, 0, 2, f(Yes, false, "")}, + {0xbf94, 0, 0, 1, f(Yes, true, "")}, + {0xbf95, 0, 0, 2, f(Yes, false, "")}, + {0xbfb0, 0, 0, 1, f(Yes, true, "")}, + {0xbfb1, 0, 0, 2, f(Yes, false, "")}, + {0xbfcc, 0, 0, 1, f(Yes, true, "")}, + {0xbfcd, 0, 0, 2, f(Yes, false, "")}, + {0xbfe8, 0, 0, 1, f(Yes, true, "")}, + {0xbfe9, 0, 0, 2, f(Yes, false, "")}, + {0xc004, 0, 0, 1, f(Yes, true, "")}, + {0xc005, 0, 0, 2, f(Yes, false, "")}, + {0xc020, 0, 0, 1, f(Yes, true, "")}, + {0xc021, 0, 0, 2, f(Yes, false, "")}, + {0xc03c, 0, 0, 1, f(Yes, true, "")}, + {0xc03d, 0, 0, 2, f(Yes, false, "")}, + {0xc058, 0, 0, 1, f(Yes, true, "")}, + {0xc059, 0, 0, 2, f(Yes, false, "")}, + {0xc074, 0, 0, 1, f(Yes, true, "")}, + {0xc075, 0, 0, 2, f(Yes, false, "")}, + {0xc090, 0, 0, 1, f(Yes, true, "")}, + {0xc091, 0, 0, 2, f(Yes, false, "")}, + {0xc0ac, 0, 0, 1, f(Yes, true, "")}, + {0xc0ad, 0, 0, 2, f(Yes, false, "")}, + {0xc0c8, 0, 0, 1, f(Yes, true, "")}, + {0xc0c9, 0, 0, 2, f(Yes, false, "")}, + {0xc0e4, 0, 0, 1, f(Yes, true, "")}, + {0xc0e5, 0, 0, 2, f(Yes, false, "")}, + {0xc100, 0, 0, 1, f(Yes, true, "")}, + {0xc101, 0, 0, 2, f(Yes, false, "")}, + {0xc11c, 0, 0, 1, f(Yes, true, "")}, + {0xc11d, 0, 0, 2, f(Yes, false, "")}, + {0xc138, 0, 0, 1, f(Yes, true, "")}, + {0xc139, 0, 0, 2, f(Yes, false, "")}, + {0xc154, 0, 0, 1, f(Yes, true, "")}, + {0xc155, 0, 0, 2, f(Yes, false, "")}, + {0xc170, 0, 0, 1, f(Yes, true, "")}, + {0xc171, 0, 0, 2, f(Yes, false, "")}, + {0xc18c, 0, 0, 1, f(Yes, true, "")}, + {0xc18d, 0, 0, 2, f(Yes, false, "")}, + {0xc1a8, 0, 0, 1, f(Yes, true, "")}, + {0xc1a9, 0, 0, 2, f(Yes, false, "")}, + {0xc1c4, 0, 0, 1, f(Yes, true, "")}, + {0xc1c5, 0, 0, 2, f(Yes, false, "")}, + {0xc1e0, 0, 0, 1, f(Yes, true, "")}, + {0xc1e1, 0, 0, 2, f(Yes, false, "")}, + {0xc1fc, 0, 0, 1, f(Yes, true, "")}, + {0xc1fd, 0, 0, 2, f(Yes, false, "")}, + {0xc218, 0, 0, 1, f(Yes, true, "")}, + {0xc219, 0, 0, 2, f(Yes, false, "")}, + {0xc234, 0, 0, 1, f(Yes, true, "")}, + {0xc235, 0, 0, 2, f(Yes, false, "")}, + {0xc250, 0, 0, 1, f(Yes, true, "")}, + {0xc251, 0, 0, 2, f(Yes, false, "")}, + {0xc26c, 0, 0, 1, f(Yes, true, "")}, + {0xc26d, 0, 0, 2, f(Yes, false, "")}, + {0xc288, 0, 0, 1, f(Yes, true, "")}, + {0xc289, 0, 0, 2, f(Yes, false, "")}, + {0xc2a4, 0, 0, 1, f(Yes, true, "")}, + {0xc2a5, 0, 0, 2, f(Yes, false, "")}, + {0xc2c0, 0, 0, 1, f(Yes, true, "")}, + {0xc2c1, 0, 0, 2, f(Yes, false, "")}, + {0xc2dc, 0, 0, 1, f(Yes, true, "")}, + {0xc2dd, 0, 0, 2, f(Yes, false, "")}, + {0xc2f8, 0, 0, 1, f(Yes, true, "")}, + {0xc2f9, 0, 0, 2, f(Yes, false, "")}, + {0xc314, 0, 0, 1, f(Yes, true, "")}, + {0xc315, 0, 0, 2, f(Yes, false, "")}, + {0xc330, 0, 0, 1, f(Yes, true, "")}, + {0xc331, 0, 0, 2, f(Yes, false, "")}, + {0xc34c, 0, 0, 1, f(Yes, true, "")}, + {0xc34d, 0, 0, 2, f(Yes, false, "")}, + {0xc368, 0, 0, 1, f(Yes, true, "")}, + {0xc369, 0, 0, 2, f(Yes, false, "")}, + {0xc384, 0, 0, 1, f(Yes, true, "")}, + {0xc385, 0, 0, 2, f(Yes, false, "")}, + {0xc3a0, 0, 0, 1, f(Yes, true, "")}, + {0xc3a1, 0, 0, 2, f(Yes, false, "")}, + {0xc3bc, 0, 0, 1, f(Yes, true, "")}, + {0xc3bd, 0, 0, 2, f(Yes, false, "")}, + {0xc3d8, 0, 0, 1, f(Yes, true, "")}, + {0xc3d9, 0, 0, 2, f(Yes, false, "")}, + {0xc3f4, 0, 0, 1, f(Yes, true, "")}, + {0xc3f5, 0, 0, 2, f(Yes, false, "")}, + {0xc410, 0, 0, 1, f(Yes, true, "")}, + {0xc411, 0, 0, 2, f(Yes, false, "")}, + {0xc42c, 0, 0, 1, f(Yes, true, "")}, + {0xc42d, 0, 0, 2, f(Yes, false, "")}, + {0xc448, 0, 0, 1, f(Yes, true, "")}, + {0xc449, 0, 0, 2, f(Yes, false, "")}, + {0xc464, 0, 0, 1, f(Yes, true, "")}, + {0xc465, 0, 0, 2, f(Yes, false, "")}, + {0xc480, 0, 0, 1, f(Yes, true, "")}, + {0xc481, 0, 0, 2, f(Yes, false, "")}, + {0xc49c, 0, 0, 1, f(Yes, true, "")}, + {0xc49d, 0, 0, 2, f(Yes, false, "")}, + {0xc4b8, 0, 0, 1, f(Yes, true, "")}, + {0xc4b9, 0, 0, 2, f(Yes, false, "")}, + {0xc4d4, 0, 0, 1, f(Yes, true, "")}, + {0xc4d5, 0, 0, 2, f(Yes, false, "")}, + {0xc4f0, 0, 0, 1, f(Yes, true, "")}, + {0xc4f1, 0, 0, 2, f(Yes, false, "")}, + {0xc50c, 0, 0, 1, f(Yes, true, "")}, + {0xc50d, 0, 0, 2, f(Yes, false, "")}, + {0xc528, 0, 0, 1, f(Yes, true, "")}, + {0xc529, 0, 0, 2, f(Yes, false, "")}, + {0xc544, 0, 0, 1, f(Yes, true, "")}, + {0xc545, 0, 0, 2, f(Yes, false, "")}, + {0xc560, 0, 0, 1, f(Yes, true, "")}, + {0xc561, 0, 0, 2, f(Yes, false, "")}, + {0xc57c, 0, 0, 1, f(Yes, true, "")}, + {0xc57d, 0, 0, 2, f(Yes, false, "")}, + {0xc598, 0, 0, 1, f(Yes, true, "")}, + {0xc599, 0, 0, 2, f(Yes, false, "")}, + {0xc5b4, 0, 0, 1, f(Yes, true, "")}, + {0xc5b5, 0, 0, 2, f(Yes, false, "")}, + {0xc5d0, 0, 0, 1, f(Yes, true, "")}, + {0xc5d1, 0, 0, 2, f(Yes, false, "")}, + {0xc5ec, 0, 0, 1, f(Yes, true, "")}, + {0xc5ed, 0, 0, 2, f(Yes, false, "")}, + {0xc608, 0, 0, 1, f(Yes, true, "")}, + {0xc609, 0, 0, 2, f(Yes, false, "")}, + {0xc624, 0, 0, 1, f(Yes, true, "")}, + {0xc625, 0, 0, 2, f(Yes, false, "")}, + {0xc640, 0, 0, 1, f(Yes, true, "")}, + {0xc641, 0, 0, 2, f(Yes, false, "")}, + {0xc65c, 0, 0, 1, f(Yes, true, "")}, + {0xc65d, 0, 0, 2, f(Yes, false, "")}, + {0xc678, 0, 0, 1, f(Yes, true, "")}, + {0xc679, 0, 0, 2, f(Yes, false, "")}, + {0xc694, 0, 0, 1, f(Yes, true, "")}, + {0xc695, 0, 0, 2, f(Yes, false, "")}, + {0xc6b0, 0, 0, 1, f(Yes, true, "")}, + {0xc6b1, 0, 0, 2, f(Yes, false, "")}, + {0xc6cc, 0, 0, 1, f(Yes, true, "")}, + {0xc6cd, 0, 0, 2, f(Yes, false, "")}, + {0xc6e8, 0, 0, 1, f(Yes, true, "")}, + {0xc6e9, 0, 0, 2, f(Yes, false, "")}, + {0xc704, 0, 0, 1, f(Yes, true, "")}, + {0xc705, 0, 0, 2, f(Yes, false, "")}, + {0xc720, 0, 0, 1, f(Yes, true, "")}, + {0xc721, 0, 0, 2, f(Yes, false, "")}, + {0xc73c, 0, 0, 1, f(Yes, true, "")}, + {0xc73d, 0, 0, 2, f(Yes, false, "")}, + {0xc758, 0, 0, 1, f(Yes, true, "")}, + {0xc759, 0, 0, 2, f(Yes, false, "")}, + {0xc774, 0, 0, 1, f(Yes, true, "")}, + {0xc775, 0, 0, 2, f(Yes, false, "")}, + {0xc790, 0, 0, 1, f(Yes, true, "")}, + {0xc791, 0, 0, 2, f(Yes, false, "")}, + {0xc7ac, 0, 0, 1, f(Yes, true, "")}, + {0xc7ad, 0, 0, 2, f(Yes, false, "")}, + {0xc7c8, 0, 0, 1, f(Yes, true, "")}, + {0xc7c9, 0, 0, 2, f(Yes, false, "")}, + {0xc7e4, 0, 0, 1, f(Yes, true, "")}, + {0xc7e5, 0, 0, 2, f(Yes, false, "")}, + {0xc800, 0, 0, 1, f(Yes, true, "")}, + {0xc801, 0, 0, 2, f(Yes, false, "")}, + {0xc81c, 0, 0, 1, f(Yes, true, "")}, + {0xc81d, 0, 0, 2, f(Yes, false, "")}, + {0xc838, 0, 0, 1, f(Yes, true, "")}, + {0xc839, 0, 0, 2, f(Yes, false, "")}, + {0xc854, 0, 0, 1, f(Yes, true, "")}, + {0xc855, 0, 0, 2, f(Yes, false, "")}, + {0xc870, 0, 0, 1, f(Yes, true, "")}, + {0xc871, 0, 0, 2, f(Yes, false, "")}, + {0xc88c, 0, 0, 1, f(Yes, true, "")}, + {0xc88d, 0, 0, 2, f(Yes, false, "")}, + {0xc8a8, 0, 0, 1, f(Yes, true, "")}, + {0xc8a9, 0, 0, 2, f(Yes, false, "")}, + {0xc8c4, 0, 0, 1, f(Yes, true, "")}, + {0xc8c5, 0, 0, 2, f(Yes, false, "")}, + {0xc8e0, 0, 0, 1, f(Yes, true, "")}, + {0xc8e1, 0, 0, 2, f(Yes, false, "")}, + {0xc8fc, 0, 0, 1, f(Yes, true, "")}, + {0xc8fd, 0, 0, 2, f(Yes, false, "")}, + {0xc918, 0, 0, 1, f(Yes, true, "")}, + {0xc919, 0, 0, 2, f(Yes, false, "")}, + {0xc934, 0, 0, 1, f(Yes, true, "")}, + {0xc935, 0, 0, 2, f(Yes, false, "")}, + {0xc950, 0, 0, 1, f(Yes, true, "")}, + {0xc951, 0, 0, 2, f(Yes, false, "")}, + {0xc96c, 0, 0, 1, f(Yes, true, "")}, + {0xc96d, 0, 0, 2, f(Yes, false, "")}, + {0xc988, 0, 0, 1, f(Yes, true, "")}, + {0xc989, 0, 0, 2, f(Yes, false, "")}, + {0xc9a4, 0, 0, 1, f(Yes, true, "")}, + {0xc9a5, 0, 0, 2, f(Yes, false, "")}, + {0xc9c0, 0, 0, 1, f(Yes, true, "")}, + {0xc9c1, 0, 0, 2, f(Yes, false, "")}, + {0xc9dc, 0, 0, 1, f(Yes, true, "")}, + {0xc9dd, 0, 0, 2, f(Yes, false, "")}, + {0xc9f8, 0, 0, 1, f(Yes, true, "")}, + {0xc9f9, 0, 0, 2, f(Yes, false, "")}, + {0xca14, 0, 0, 1, f(Yes, true, "")}, + {0xca15, 0, 0, 2, f(Yes, false, "")}, + {0xca30, 0, 0, 1, f(Yes, true, "")}, + {0xca31, 0, 0, 2, f(Yes, false, "")}, + {0xca4c, 0, 0, 1, f(Yes, true, "")}, + {0xca4d, 0, 0, 2, f(Yes, false, "")}, + {0xca68, 0, 0, 1, f(Yes, true, "")}, + {0xca69, 0, 0, 2, f(Yes, false, "")}, + {0xca84, 0, 0, 1, f(Yes, true, "")}, + {0xca85, 0, 0, 2, f(Yes, false, "")}, + {0xcaa0, 0, 0, 1, f(Yes, true, "")}, + {0xcaa1, 0, 0, 2, f(Yes, false, "")}, + {0xcabc, 0, 0, 1, f(Yes, true, "")}, + {0xcabd, 0, 0, 2, f(Yes, false, "")}, + {0xcad8, 0, 0, 1, f(Yes, true, "")}, + {0xcad9, 0, 0, 2, f(Yes, false, "")}, + {0xcaf4, 0, 0, 1, f(Yes, true, "")}, + {0xcaf5, 0, 0, 2, f(Yes, false, "")}, + {0xcb10, 0, 0, 1, f(Yes, true, "")}, + {0xcb11, 0, 0, 2, f(Yes, false, "")}, + {0xcb2c, 0, 0, 1, f(Yes, true, "")}, + {0xcb2d, 0, 0, 2, f(Yes, false, "")}, + {0xcb48, 0, 0, 1, f(Yes, true, "")}, + {0xcb49, 0, 0, 2, f(Yes, false, "")}, + {0xcb64, 0, 0, 1, f(Yes, true, "")}, + {0xcb65, 0, 0, 2, f(Yes, false, "")}, + {0xcb80, 0, 0, 1, f(Yes, true, "")}, + {0xcb81, 0, 0, 2, f(Yes, false, "")}, + {0xcb9c, 0, 0, 1, f(Yes, true, "")}, + {0xcb9d, 0, 0, 2, f(Yes, false, "")}, + {0xcbb8, 0, 0, 1, f(Yes, true, "")}, + {0xcbb9, 0, 0, 2, f(Yes, false, "")}, + {0xcbd4, 0, 0, 1, f(Yes, true, "")}, + {0xcbd5, 0, 0, 2, f(Yes, false, "")}, + {0xcbf0, 0, 0, 1, f(Yes, true, "")}, + {0xcbf1, 0, 0, 2, f(Yes, false, "")}, + {0xcc0c, 0, 0, 1, f(Yes, true, "")}, + {0xcc0d, 0, 0, 2, f(Yes, false, "")}, + {0xcc28, 0, 0, 1, f(Yes, true, "")}, + {0xcc29, 0, 0, 2, f(Yes, false, "")}, + {0xcc44, 0, 0, 1, f(Yes, true, "")}, + {0xcc45, 0, 0, 2, f(Yes, false, "")}, + {0xcc60, 0, 0, 1, f(Yes, true, "")}, + {0xcc61, 0, 0, 2, f(Yes, false, "")}, + {0xcc7c, 0, 0, 1, f(Yes, true, "")}, + {0xcc7d, 0, 0, 2, f(Yes, false, "")}, + {0xcc98, 0, 0, 1, f(Yes, true, "")}, + {0xcc99, 0, 0, 2, f(Yes, false, "")}, + {0xccb4, 0, 0, 1, f(Yes, true, "")}, + {0xccb5, 0, 0, 2, f(Yes, false, "")}, + {0xccd0, 0, 0, 1, f(Yes, true, "")}, + {0xccd1, 0, 0, 2, f(Yes, false, "")}, + {0xccec, 0, 0, 1, f(Yes, true, "")}, + {0xcced, 0, 0, 2, f(Yes, false, "")}, + {0xcd08, 0, 0, 1, f(Yes, true, "")}, + {0xcd09, 0, 0, 2, f(Yes, false, "")}, + {0xcd24, 0, 0, 1, f(Yes, true, "")}, + {0xcd25, 0, 0, 2, f(Yes, false, "")}, + {0xcd40, 0, 0, 1, f(Yes, true, "")}, + {0xcd41, 0, 0, 2, f(Yes, false, "")}, + {0xcd5c, 0, 0, 1, f(Yes, true, "")}, + {0xcd5d, 0, 0, 2, f(Yes, false, "")}, + {0xcd78, 0, 0, 1, f(Yes, true, "")}, + {0xcd79, 0, 0, 2, f(Yes, false, "")}, + {0xcd94, 0, 0, 1, f(Yes, true, "")}, + {0xcd95, 0, 0, 2, f(Yes, false, "")}, + {0xcdb0, 0, 0, 1, f(Yes, true, "")}, + {0xcdb1, 0, 0, 2, f(Yes, false, "")}, + {0xcdcc, 0, 0, 1, f(Yes, true, "")}, + {0xcdcd, 0, 0, 2, f(Yes, false, "")}, + {0xcde8, 0, 0, 1, f(Yes, true, "")}, + {0xcde9, 0, 0, 2, f(Yes, false, "")}, + {0xce04, 0, 0, 1, f(Yes, true, "")}, + {0xce05, 0, 0, 2, f(Yes, false, "")}, + {0xce20, 0, 0, 1, f(Yes, true, "")}, + {0xce21, 0, 0, 2, f(Yes, false, "")}, + {0xce3c, 0, 0, 1, f(Yes, true, "")}, + {0xce3d, 0, 0, 2, f(Yes, false, "")}, + {0xce58, 0, 0, 1, f(Yes, true, "")}, + {0xce59, 0, 0, 2, f(Yes, false, "")}, + {0xce74, 0, 0, 1, f(Yes, true, "")}, + {0xce75, 0, 0, 2, f(Yes, false, "")}, + {0xce90, 0, 0, 1, f(Yes, true, "")}, + {0xce91, 0, 0, 2, f(Yes, false, "")}, + {0xceac, 0, 0, 1, f(Yes, true, "")}, + {0xcead, 0, 0, 2, f(Yes, false, "")}, + {0xcec8, 0, 0, 1, f(Yes, true, "")}, + {0xcec9, 0, 0, 2, f(Yes, false, "")}, + {0xcee4, 0, 0, 1, f(Yes, true, "")}, + {0xcee5, 0, 0, 2, f(Yes, false, "")}, + {0xcf00, 0, 0, 1, f(Yes, true, "")}, + {0xcf01, 0, 0, 2, f(Yes, false, "")}, + {0xcf1c, 0, 0, 1, f(Yes, true, "")}, + {0xcf1d, 0, 0, 2, f(Yes, false, "")}, + {0xcf38, 0, 0, 1, f(Yes, true, "")}, + {0xcf39, 0, 0, 2, f(Yes, false, "")}, + {0xcf54, 0, 0, 1, f(Yes, true, "")}, + {0xcf55, 0, 0, 2, f(Yes, false, "")}, + {0xcf70, 0, 0, 1, f(Yes, true, "")}, + {0xcf71, 0, 0, 2, f(Yes, false, "")}, + {0xcf8c, 0, 0, 1, f(Yes, true, "")}, + {0xcf8d, 0, 0, 2, f(Yes, false, "")}, + {0xcfa8, 0, 0, 1, f(Yes, true, "")}, + {0xcfa9, 0, 0, 2, f(Yes, false, "")}, + {0xcfc4, 0, 0, 1, f(Yes, true, "")}, + {0xcfc5, 0, 0, 2, f(Yes, false, "")}, + {0xcfe0, 0, 0, 1, f(Yes, true, "")}, + {0xcfe1, 0, 0, 2, f(Yes, false, "")}, + {0xcffc, 0, 0, 1, f(Yes, true, "")}, + {0xcffd, 0, 0, 2, f(Yes, false, "")}, + {0xd018, 0, 0, 1, f(Yes, true, "")}, + {0xd019, 0, 0, 2, f(Yes, false, "")}, + {0xd034, 0, 0, 1, f(Yes, true, "")}, + {0xd035, 0, 0, 2, f(Yes, false, "")}, + {0xd050, 0, 0, 1, f(Yes, true, "")}, + {0xd051, 0, 0, 2, f(Yes, false, "")}, + {0xd06c, 0, 0, 1, f(Yes, true, "")}, + {0xd06d, 0, 0, 2, f(Yes, false, "")}, + {0xd088, 0, 0, 1, f(Yes, true, "")}, + {0xd089, 0, 0, 2, f(Yes, false, "")}, + {0xd0a4, 0, 0, 1, f(Yes, true, "")}, + {0xd0a5, 0, 0, 2, f(Yes, false, "")}, + {0xd0c0, 0, 0, 1, f(Yes, true, "")}, + {0xd0c1, 0, 0, 2, f(Yes, false, "")}, + {0xd0dc, 0, 0, 1, f(Yes, true, "")}, + {0xd0dd, 0, 0, 2, f(Yes, false, "")}, + {0xd0f8, 0, 0, 1, f(Yes, true, "")}, + {0xd0f9, 0, 0, 2, f(Yes, false, "")}, + {0xd114, 0, 0, 1, f(Yes, true, "")}, + {0xd115, 0, 0, 2, f(Yes, false, "")}, + {0xd130, 0, 0, 1, f(Yes, true, "")}, + {0xd131, 0, 0, 2, f(Yes, false, "")}, + {0xd14c, 0, 0, 1, f(Yes, true, "")}, + {0xd14d, 0, 0, 2, f(Yes, false, "")}, + {0xd168, 0, 0, 1, f(Yes, true, "")}, + {0xd169, 0, 0, 2, f(Yes, false, "")}, + {0xd184, 0, 0, 1, f(Yes, true, "")}, + {0xd185, 0, 0, 2, f(Yes, false, "")}, + {0xd1a0, 0, 0, 1, f(Yes, true, "")}, + {0xd1a1, 0, 0, 2, f(Yes, false, "")}, + {0xd1bc, 0, 0, 1, f(Yes, true, "")}, + {0xd1bd, 0, 0, 2, f(Yes, false, "")}, + {0xd1d8, 0, 0, 1, f(Yes, true, "")}, + {0xd1d9, 0, 0, 2, f(Yes, false, "")}, + {0xd1f4, 0, 0, 1, f(Yes, true, "")}, + {0xd1f5, 0, 0, 2, f(Yes, false, "")}, + {0xd210, 0, 0, 1, f(Yes, true, "")}, + {0xd211, 0, 0, 2, f(Yes, false, "")}, + {0xd22c, 0, 0, 1, f(Yes, true, "")}, + {0xd22d, 0, 0, 2, f(Yes, false, "")}, + {0xd248, 0, 0, 1, f(Yes, true, "")}, + {0xd249, 0, 0, 2, f(Yes, false, "")}, + {0xd264, 0, 0, 1, f(Yes, true, "")}, + {0xd265, 0, 0, 2, f(Yes, false, "")}, + {0xd280, 0, 0, 1, f(Yes, true, "")}, + {0xd281, 0, 0, 2, f(Yes, false, "")}, + {0xd29c, 0, 0, 1, f(Yes, true, "")}, + {0xd29d, 0, 0, 2, f(Yes, false, "")}, + {0xd2b8, 0, 0, 1, f(Yes, true, "")}, + {0xd2b9, 0, 0, 2, f(Yes, false, "")}, + {0xd2d4, 0, 0, 1, f(Yes, true, "")}, + {0xd2d5, 0, 0, 2, f(Yes, false, "")}, + {0xd2f0, 0, 0, 1, f(Yes, true, "")}, + {0xd2f1, 0, 0, 2, f(Yes, false, "")}, + {0xd30c, 0, 0, 1, f(Yes, true, "")}, + {0xd30d, 0, 0, 2, f(Yes, false, "")}, + {0xd328, 0, 0, 1, f(Yes, true, "")}, + {0xd329, 0, 0, 2, f(Yes, false, "")}, + {0xd344, 0, 0, 1, f(Yes, true, "")}, + {0xd345, 0, 0, 2, f(Yes, false, "")}, + {0xd360, 0, 0, 1, f(Yes, true, "")}, + {0xd361, 0, 0, 2, f(Yes, false, "")}, + {0xd37c, 0, 0, 1, f(Yes, true, "")}, + {0xd37d, 0, 0, 2, f(Yes, false, "")}, + {0xd398, 0, 0, 1, f(Yes, true, "")}, + {0xd399, 0, 0, 2, f(Yes, false, "")}, + {0xd3b4, 0, 0, 1, f(Yes, true, "")}, + {0xd3b5, 0, 0, 2, f(Yes, false, "")}, + {0xd3d0, 0, 0, 1, f(Yes, true, "")}, + {0xd3d1, 0, 0, 2, f(Yes, false, "")}, + {0xd3ec, 0, 0, 1, f(Yes, true, "")}, + {0xd3ed, 0, 0, 2, f(Yes, false, "")}, + {0xd408, 0, 0, 1, f(Yes, true, "")}, + {0xd409, 0, 0, 2, f(Yes, false, "")}, + {0xd424, 0, 0, 1, f(Yes, true, "")}, + {0xd425, 0, 0, 2, f(Yes, false, "")}, + {0xd440, 0, 0, 1, f(Yes, true, "")}, + {0xd441, 0, 0, 2, f(Yes, false, "")}, + {0xd45c, 0, 0, 1, f(Yes, true, "")}, + {0xd45d, 0, 0, 2, f(Yes, false, "")}, + {0xd478, 0, 0, 1, f(Yes, true, "")}, + {0xd479, 0, 0, 2, f(Yes, false, "")}, + {0xd494, 0, 0, 1, f(Yes, true, "")}, + {0xd495, 0, 0, 2, f(Yes, false, "")}, + {0xd4b0, 0, 0, 1, f(Yes, true, "")}, + {0xd4b1, 0, 0, 2, f(Yes, false, "")}, + {0xd4cc, 0, 0, 1, f(Yes, true, "")}, + {0xd4cd, 0, 0, 2, f(Yes, false, "")}, + {0xd4e8, 0, 0, 1, f(Yes, true, "")}, + {0xd4e9, 0, 0, 2, f(Yes, false, "")}, + {0xd504, 0, 0, 1, f(Yes, true, "")}, + {0xd505, 0, 0, 2, f(Yes, false, "")}, + {0xd520, 0, 0, 1, f(Yes, true, "")}, + {0xd521, 0, 0, 2, f(Yes, false, "")}, + {0xd53c, 0, 0, 1, f(Yes, true, "")}, + {0xd53d, 0, 0, 2, f(Yes, false, "")}, + {0xd558, 0, 0, 1, f(Yes, true, "")}, + {0xd559, 0, 0, 2, f(Yes, false, "")}, + {0xd574, 0, 0, 1, f(Yes, true, "")}, + {0xd575, 0, 0, 2, f(Yes, false, "")}, + {0xd590, 0, 0, 1, f(Yes, true, "")}, + {0xd591, 0, 0, 2, f(Yes, false, "")}, + {0xd5ac, 0, 0, 1, f(Yes, true, "")}, + {0xd5ad, 0, 0, 2, f(Yes, false, "")}, + {0xd5c8, 0, 0, 1, f(Yes, true, "")}, + {0xd5c9, 0, 0, 2, f(Yes, false, "")}, + {0xd5e4, 0, 0, 1, f(Yes, true, "")}, + {0xd5e5, 0, 0, 2, f(Yes, false, "")}, + {0xd600, 0, 0, 1, f(Yes, true, "")}, + {0xd601, 0, 0, 2, f(Yes, false, "")}, + {0xd61c, 0, 0, 1, f(Yes, true, "")}, + {0xd61d, 0, 0, 2, f(Yes, false, "")}, + {0xd638, 0, 0, 1, f(Yes, true, "")}, + {0xd639, 0, 0, 2, f(Yes, false, "")}, + {0xd654, 0, 0, 1, f(Yes, true, "")}, + {0xd655, 0, 0, 2, f(Yes, false, "")}, + {0xd670, 0, 0, 1, f(Yes, true, "")}, + {0xd671, 0, 0, 2, f(Yes, false, "")}, + {0xd68c, 0, 0, 1, f(Yes, true, "")}, + {0xd68d, 0, 0, 2, f(Yes, false, "")}, + {0xd6a8, 0, 0, 1, f(Yes, true, "")}, + {0xd6a9, 0, 0, 2, f(Yes, false, "")}, + {0xd6c4, 0, 0, 1, f(Yes, true, "")}, + {0xd6c5, 0, 0, 2, f(Yes, false, "")}, + {0xd6e0, 0, 0, 1, f(Yes, true, "")}, + {0xd6e1, 0, 0, 2, f(Yes, false, "")}, + {0xd6fc, 0, 0, 1, f(Yes, true, "")}, + {0xd6fd, 0, 0, 2, f(Yes, false, "")}, + {0xd718, 0, 0, 1, f(Yes, true, "")}, + {0xd719, 0, 0, 2, f(Yes, false, "")}, + {0xd734, 0, 0, 1, f(Yes, true, "")}, + {0xd735, 0, 0, 2, f(Yes, false, "")}, + {0xd750, 0, 0, 1, f(Yes, true, "")}, + {0xd751, 0, 0, 2, f(Yes, false, "")}, + {0xd76c, 0, 0, 1, f(Yes, true, "")}, + {0xd76d, 0, 0, 2, f(Yes, false, "")}, + {0xd788, 0, 0, 1, f(Yes, true, "")}, + {0xd789, 0, 0, 2, f(Yes, false, "")}, + {0xd7a4, 0, 0, 0, f(Yes, false, "")}, + {0xf900, 0, 0, 0, f(No, false, "豈")}, + {0xf901, 0, 0, 0, f(No, false, "更")}, + {0xf902, 0, 0, 0, f(No, false, "車")}, + {0xf903, 0, 0, 0, f(No, false, "賈")}, + {0xf904, 0, 0, 0, f(No, false, "滑")}, + {0xf905, 0, 0, 0, f(No, false, "串")}, + {0xf906, 0, 0, 0, f(No, false, "句")}, + {0xf907, 0, 0, 0, f(No, false, "龜")}, + {0xf909, 0, 0, 0, f(No, false, "契")}, + {0xf90a, 0, 0, 0, f(No, false, "金")}, + {0xf90b, 0, 0, 0, f(No, false, "喇")}, + {0xf90c, 0, 0, 0, f(No, false, "奈")}, + {0xf90d, 0, 0, 0, f(No, false, "懶")}, + {0xf90e, 0, 0, 0, f(No, false, "癩")}, + {0xf90f, 0, 0, 0, f(No, false, "羅")}, + {0xf910, 0, 0, 0, f(No, false, "蘿")}, + {0xf911, 0, 0, 0, f(No, false, "螺")}, + {0xf912, 0, 0, 0, f(No, false, "裸")}, + {0xf913, 0, 0, 0, f(No, false, "邏")}, + {0xf914, 0, 0, 0, f(No, false, "樂")}, + {0xf915, 0, 0, 0, f(No, false, "洛")}, + {0xf916, 0, 0, 0, f(No, false, "烙")}, + {0xf917, 0, 0, 0, f(No, false, "珞")}, + {0xf918, 0, 0, 0, f(No, false, "落")}, + {0xf919, 0, 0, 0, f(No, false, "酪")}, + {0xf91a, 0, 0, 0, f(No, false, "駱")}, + {0xf91b, 0, 0, 0, f(No, false, "亂")}, + {0xf91c, 0, 0, 0, f(No, false, "卵")}, + {0xf91d, 0, 0, 0, f(No, false, "欄")}, + {0xf91e, 0, 0, 0, f(No, false, "爛")}, + {0xf91f, 0, 0, 0, f(No, false, "蘭")}, + {0xf920, 0, 0, 0, f(No, false, "鸞")}, + {0xf921, 0, 0, 0, f(No, false, "嵐")}, + {0xf922, 0, 0, 0, f(No, false, "濫")}, + {0xf923, 0, 0, 0, f(No, false, "藍")}, + {0xf924, 0, 0, 0, f(No, false, "襤")}, + {0xf925, 0, 0, 0, f(No, false, "拉")}, + {0xf926, 0, 0, 0, f(No, false, "臘")}, + {0xf927, 0, 0, 0, f(No, false, "蠟")}, + {0xf928, 0, 0, 0, f(No, false, "廊")}, + {0xf929, 0, 0, 0, f(No, false, "朗")}, + {0xf92a, 0, 0, 0, f(No, false, "浪")}, + {0xf92b, 0, 0, 0, f(No, false, "狼")}, + {0xf92c, 0, 0, 0, f(No, false, "郎")}, + {0xf92d, 0, 0, 0, f(No, false, "來")}, + {0xf92e, 0, 0, 0, f(No, false, "冷")}, + {0xf92f, 0, 0, 0, f(No, false, "勞")}, + {0xf930, 0, 0, 0, f(No, false, "擄")}, + {0xf931, 0, 0, 0, f(No, false, "櫓")}, + {0xf932, 0, 0, 0, f(No, false, "爐")}, + {0xf933, 0, 0, 0, f(No, false, "盧")}, + {0xf934, 0, 0, 0, f(No, false, "老")}, + {0xf935, 0, 0, 0, f(No, false, "蘆")}, + {0xf936, 0, 0, 0, f(No, false, "虜")}, + {0xf937, 0, 0, 0, f(No, false, "路")}, + {0xf938, 0, 0, 0, f(No, false, "露")}, + {0xf939, 0, 0, 0, f(No, false, "魯")}, + {0xf93a, 0, 0, 0, f(No, false, "鷺")}, + {0xf93b, 0, 0, 0, f(No, false, "碌")}, + {0xf93c, 0, 0, 0, f(No, false, "祿")}, + {0xf93d, 0, 0, 0, f(No, false, "綠")}, + {0xf93e, 0, 0, 0, f(No, false, "菉")}, + {0xf93f, 0, 0, 0, f(No, false, "錄")}, + {0xf940, 0, 0, 0, f(No, false, "鹿")}, + {0xf941, 0, 0, 0, f(No, false, "論")}, + {0xf942, 0, 0, 0, f(No, false, "壟")}, + {0xf943, 0, 0, 0, f(No, false, "弄")}, + {0xf944, 0, 0, 0, f(No, false, "籠")}, + {0xf945, 0, 0, 0, f(No, false, "聾")}, + {0xf946, 0, 0, 0, f(No, false, "牢")}, + {0xf947, 0, 0, 0, f(No, false, "磊")}, + {0xf948, 0, 0, 0, f(No, false, "賂")}, + {0xf949, 0, 0, 0, f(No, false, "雷")}, + {0xf94a, 0, 0, 0, f(No, false, "壘")}, + {0xf94b, 0, 0, 0, f(No, false, "屢")}, + {0xf94c, 0, 0, 0, f(No, false, "樓")}, + {0xf94d, 0, 0, 0, f(No, false, "淚")}, + {0xf94e, 0, 0, 0, f(No, false, "漏")}, + {0xf94f, 0, 0, 0, f(No, false, "累")}, + {0xf950, 0, 0, 0, f(No, false, "縷")}, + {0xf951, 0, 0, 0, f(No, false, "陋")}, + {0xf952, 0, 0, 0, f(No, false, "勒")}, + {0xf953, 0, 0, 0, f(No, false, "肋")}, + {0xf954, 0, 0, 0, f(No, false, "凜")}, + {0xf955, 0, 0, 0, f(No, false, "凌")}, + {0xf956, 0, 0, 0, f(No, false, "稜")}, + {0xf957, 0, 0, 0, f(No, false, "綾")}, + {0xf958, 0, 0, 0, f(No, false, "菱")}, + {0xf959, 0, 0, 0, f(No, false, "陵")}, + {0xf95a, 0, 0, 0, f(No, false, "讀")}, + {0xf95b, 0, 0, 0, f(No, false, "拏")}, + {0xf95c, 0, 0, 0, f(No, false, "樂")}, + {0xf95d, 0, 0, 0, f(No, false, "諾")}, + {0xf95e, 0, 0, 0, f(No, false, "丹")}, + {0xf95f, 0, 0, 0, f(No, false, "寧")}, + {0xf960, 0, 0, 0, f(No, false, "怒")}, + {0xf961, 0, 0, 0, f(No, false, "率")}, + {0xf962, 0, 0, 0, f(No, false, "異")}, + {0xf963, 0, 0, 0, f(No, false, "北")}, + {0xf964, 0, 0, 0, f(No, false, "磻")}, + {0xf965, 0, 0, 0, f(No, false, "便")}, + {0xf966, 0, 0, 0, f(No, false, "復")}, + {0xf967, 0, 0, 0, f(No, false, "不")}, + {0xf968, 0, 0, 0, f(No, false, "泌")}, + {0xf969, 0, 0, 0, f(No, false, "數")}, + {0xf96a, 0, 0, 0, f(No, false, "索")}, + {0xf96b, 0, 0, 0, f(No, false, "參")}, + {0xf96c, 0, 0, 0, f(No, false, "塞")}, + {0xf96d, 0, 0, 0, f(No, false, "省")}, + {0xf96e, 0, 0, 0, f(No, false, "葉")}, + {0xf96f, 0, 0, 0, f(No, false, "說")}, + {0xf970, 0, 0, 0, f(No, false, "殺")}, + {0xf971, 0, 0, 0, f(No, false, "辰")}, + {0xf972, 0, 0, 0, f(No, false, "沈")}, + {0xf973, 0, 0, 0, f(No, false, "拾")}, + {0xf974, 0, 0, 0, f(No, false, "若")}, + {0xf975, 0, 0, 0, f(No, false, "掠")}, + {0xf976, 0, 0, 0, f(No, false, "略")}, + {0xf977, 0, 0, 0, f(No, false, "亮")}, + {0xf978, 0, 0, 0, f(No, false, "兩")}, + {0xf979, 0, 0, 0, f(No, false, "凉")}, + {0xf97a, 0, 0, 0, f(No, false, "梁")}, + {0xf97b, 0, 0, 0, f(No, false, "糧")}, + {0xf97c, 0, 0, 0, f(No, false, "良")}, + {0xf97d, 0, 0, 0, f(No, false, "諒")}, + {0xf97e, 0, 0, 0, f(No, false, "量")}, + {0xf97f, 0, 0, 0, f(No, false, "勵")}, + {0xf980, 0, 0, 0, f(No, false, "呂")}, + {0xf981, 0, 0, 0, f(No, false, "女")}, + {0xf982, 0, 0, 0, f(No, false, "廬")}, + {0xf983, 0, 0, 0, f(No, false, "旅")}, + {0xf984, 0, 0, 0, f(No, false, "濾")}, + {0xf985, 0, 0, 0, f(No, false, "礪")}, + {0xf986, 0, 0, 0, f(No, false, "閭")}, + {0xf987, 0, 0, 0, f(No, false, "驪")}, + {0xf988, 0, 0, 0, f(No, false, "麗")}, + {0xf989, 0, 0, 0, f(No, false, "黎")}, + {0xf98a, 0, 0, 0, f(No, false, "力")}, + {0xf98b, 0, 0, 0, f(No, false, "曆")}, + {0xf98c, 0, 0, 0, f(No, false, "歷")}, + {0xf98d, 0, 0, 0, f(No, false, "轢")}, + {0xf98e, 0, 0, 0, f(No, false, "年")}, + {0xf98f, 0, 0, 0, f(No, false, "憐")}, + {0xf990, 0, 0, 0, f(No, false, "戀")}, + {0xf991, 0, 0, 0, f(No, false, "撚")}, + {0xf992, 0, 0, 0, f(No, false, "漣")}, + {0xf993, 0, 0, 0, f(No, false, "煉")}, + {0xf994, 0, 0, 0, f(No, false, "璉")}, + {0xf995, 0, 0, 0, f(No, false, "秊")}, + {0xf996, 0, 0, 0, f(No, false, "練")}, + {0xf997, 0, 0, 0, f(No, false, "聯")}, + {0xf998, 0, 0, 0, f(No, false, "輦")}, + {0xf999, 0, 0, 0, f(No, false, "蓮")}, + {0xf99a, 0, 0, 0, f(No, false, "連")}, + {0xf99b, 0, 0, 0, f(No, false, "鍊")}, + {0xf99c, 0, 0, 0, f(No, false, "列")}, + {0xf99d, 0, 0, 0, f(No, false, "劣")}, + {0xf99e, 0, 0, 0, f(No, false, "咽")}, + {0xf99f, 0, 0, 0, f(No, false, "烈")}, + {0xf9a0, 0, 0, 0, f(No, false, "裂")}, + {0xf9a1, 0, 0, 0, f(No, false, "說")}, + {0xf9a2, 0, 0, 0, f(No, false, "廉")}, + {0xf9a3, 0, 0, 0, f(No, false, "念")}, + {0xf9a4, 0, 0, 0, f(No, false, "捻")}, + {0xf9a5, 0, 0, 0, f(No, false, "殮")}, + {0xf9a6, 0, 0, 0, f(No, false, "簾")}, + {0xf9a7, 0, 0, 0, f(No, false, "獵")}, + {0xf9a8, 0, 0, 0, f(No, false, "令")}, + {0xf9a9, 0, 0, 0, f(No, false, "囹")}, + {0xf9aa, 0, 0, 0, f(No, false, "寧")}, + {0xf9ab, 0, 0, 0, f(No, false, "嶺")}, + {0xf9ac, 0, 0, 0, f(No, false, "怜")}, + {0xf9ad, 0, 0, 0, f(No, false, "玲")}, + {0xf9ae, 0, 0, 0, f(No, false, "瑩")}, + {0xf9af, 0, 0, 0, f(No, false, "羚")}, + {0xf9b0, 0, 0, 0, f(No, false, "聆")}, + {0xf9b1, 0, 0, 0, f(No, false, "鈴")}, + {0xf9b2, 0, 0, 0, f(No, false, "零")}, + {0xf9b3, 0, 0, 0, f(No, false, "靈")}, + {0xf9b4, 0, 0, 0, f(No, false, "領")}, + {0xf9b5, 0, 0, 0, f(No, false, "例")}, + {0xf9b6, 0, 0, 0, f(No, false, "禮")}, + {0xf9b7, 0, 0, 0, f(No, false, "醴")}, + {0xf9b8, 0, 0, 0, f(No, false, "隸")}, + {0xf9b9, 0, 0, 0, f(No, false, "惡")}, + {0xf9ba, 0, 0, 0, f(No, false, "了")}, + {0xf9bb, 0, 0, 0, f(No, false, "僚")}, + {0xf9bc, 0, 0, 0, f(No, false, "寮")}, + {0xf9bd, 0, 0, 0, f(No, false, "尿")}, + {0xf9be, 0, 0, 0, f(No, false, "料")}, + {0xf9bf, 0, 0, 0, f(No, false, "樂")}, + {0xf9c0, 0, 0, 0, f(No, false, "燎")}, + {0xf9c1, 0, 0, 0, f(No, false, "療")}, + {0xf9c2, 0, 0, 0, f(No, false, "蓼")}, + {0xf9c3, 0, 0, 0, f(No, false, "遼")}, + {0xf9c4, 0, 0, 0, f(No, false, "龍")}, + {0xf9c5, 0, 0, 0, f(No, false, "暈")}, + {0xf9c6, 0, 0, 0, f(No, false, "阮")}, + {0xf9c7, 0, 0, 0, f(No, false, "劉")}, + {0xf9c8, 0, 0, 0, f(No, false, "杻")}, + {0xf9c9, 0, 0, 0, f(No, false, "柳")}, + {0xf9ca, 0, 0, 0, f(No, false, "流")}, + {0xf9cb, 0, 0, 0, f(No, false, "溜")}, + {0xf9cc, 0, 0, 0, f(No, false, "琉")}, + {0xf9cd, 0, 0, 0, f(No, false, "留")}, + {0xf9ce, 0, 0, 0, f(No, false, "硫")}, + {0xf9cf, 0, 0, 0, f(No, false, "紐")}, + {0xf9d0, 0, 0, 0, f(No, false, "類")}, + {0xf9d1, 0, 0, 0, f(No, false, "六")}, + {0xf9d2, 0, 0, 0, f(No, false, "戮")}, + {0xf9d3, 0, 0, 0, f(No, false, "陸")}, + {0xf9d4, 0, 0, 0, f(No, false, "倫")}, + {0xf9d5, 0, 0, 0, f(No, false, "崙")}, + {0xf9d6, 0, 0, 0, f(No, false, "淪")}, + {0xf9d7, 0, 0, 0, f(No, false, "輪")}, + {0xf9d8, 0, 0, 0, f(No, false, "律")}, + {0xf9d9, 0, 0, 0, f(No, false, "慄")}, + {0xf9da, 0, 0, 0, f(No, false, "栗")}, + {0xf9db, 0, 0, 0, f(No, false, "率")}, + {0xf9dc, 0, 0, 0, f(No, false, "隆")}, + {0xf9dd, 0, 0, 0, f(No, false, "利")}, + {0xf9de, 0, 0, 0, f(No, false, "吏")}, + {0xf9df, 0, 0, 0, f(No, false, "履")}, + {0xf9e0, 0, 0, 0, f(No, false, "易")}, + {0xf9e1, 0, 0, 0, f(No, false, "李")}, + {0xf9e2, 0, 0, 0, f(No, false, "梨")}, + {0xf9e3, 0, 0, 0, f(No, false, "泥")}, + {0xf9e4, 0, 0, 0, f(No, false, "理")}, + {0xf9e5, 0, 0, 0, f(No, false, "痢")}, + {0xf9e6, 0, 0, 0, f(No, false, "罹")}, + {0xf9e7, 0, 0, 0, f(No, false, "裏")}, + {0xf9e8, 0, 0, 0, f(No, false, "裡")}, + {0xf9e9, 0, 0, 0, f(No, false, "里")}, + {0xf9ea, 0, 0, 0, f(No, false, "離")}, + {0xf9eb, 0, 0, 0, f(No, false, "匿")}, + {0xf9ec, 0, 0, 0, f(No, false, "溺")}, + {0xf9ed, 0, 0, 0, f(No, false, "吝")}, + {0xf9ee, 0, 0, 0, f(No, false, "燐")}, + {0xf9ef, 0, 0, 0, f(No, false, "璘")}, + {0xf9f0, 0, 0, 0, f(No, false, "藺")}, + {0xf9f1, 0, 0, 0, f(No, false, "隣")}, + {0xf9f2, 0, 0, 0, f(No, false, "鱗")}, + {0xf9f3, 0, 0, 0, f(No, false, "麟")}, + {0xf9f4, 0, 0, 0, f(No, false, "林")}, + {0xf9f5, 0, 0, 0, f(No, false, "淋")}, + {0xf9f6, 0, 0, 0, f(No, false, "臨")}, + {0xf9f7, 0, 0, 0, f(No, false, "立")}, + {0xf9f8, 0, 0, 0, f(No, false, "笠")}, + {0xf9f9, 0, 0, 0, f(No, false, "粒")}, + {0xf9fa, 0, 0, 0, f(No, false, "狀")}, + {0xf9fb, 0, 0, 0, f(No, false, "炙")}, + {0xf9fc, 0, 0, 0, f(No, false, "識")}, + {0xf9fd, 0, 0, 0, f(No, false, "什")}, + {0xf9fe, 0, 0, 0, f(No, false, "茶")}, + {0xf9ff, 0, 0, 0, f(No, false, "刺")}, + {0xfa00, 0, 0, 0, f(No, false, "切")}, + {0xfa01, 0, 0, 0, f(No, false, "度")}, + {0xfa02, 0, 0, 0, f(No, false, "拓")}, + {0xfa03, 0, 0, 0, f(No, false, "糖")}, + {0xfa04, 0, 0, 0, f(No, false, "宅")}, + {0xfa05, 0, 0, 0, f(No, false, "洞")}, + {0xfa06, 0, 0, 0, f(No, false, "暴")}, + {0xfa07, 0, 0, 0, f(No, false, "輻")}, + {0xfa08, 0, 0, 0, f(No, false, "行")}, + {0xfa09, 0, 0, 0, f(No, false, "降")}, + {0xfa0a, 0, 0, 0, f(No, false, "見")}, + {0xfa0b, 0, 0, 0, f(No, false, "廓")}, + {0xfa0c, 0, 0, 0, f(No, false, "兀")}, + {0xfa0d, 0, 0, 0, f(No, false, "嗀")}, + {0xfa0e, 0, 0, 0, f(Yes, false, "")}, + {0xfa10, 0, 0, 0, f(No, false, "塚")}, + {0xfa11, 0, 0, 0, f(Yes, false, "")}, + {0xfa12, 0, 0, 0, f(No, false, "晴")}, + {0xfa13, 0, 0, 0, f(Yes, false, "")}, + {0xfa15, 0, 0, 0, f(No, false, "凞")}, + {0xfa16, 0, 0, 0, f(No, false, "猪")}, + {0xfa17, 0, 0, 0, f(No, false, "益")}, + {0xfa18, 0, 0, 0, f(No, false, "礼")}, + {0xfa19, 0, 0, 0, f(No, false, "神")}, + {0xfa1a, 0, 0, 0, f(No, false, "祥")}, + {0xfa1b, 0, 0, 0, f(No, false, "福")}, + {0xfa1c, 0, 0, 0, f(No, false, "靖")}, + {0xfa1d, 0, 0, 0, f(No, false, "精")}, + {0xfa1e, 0, 0, 0, f(No, false, "羽")}, + {0xfa1f, 0, 0, 0, f(Yes, false, "")}, + {0xfa20, 0, 0, 0, f(No, false, "蘒")}, + {0xfa21, 0, 0, 0, f(Yes, false, "")}, + {0xfa22, 0, 0, 0, f(No, false, "諸")}, + {0xfa23, 0, 0, 0, f(Yes, false, "")}, + {0xfa25, 0, 0, 0, f(No, false, "逸")}, + {0xfa26, 0, 0, 0, f(No, false, "都")}, + {0xfa27, 0, 0, 0, f(Yes, false, "")}, + {0xfa2a, 0, 0, 0, f(No, false, "飯")}, + {0xfa2b, 0, 0, 0, f(No, false, "飼")}, + {0xfa2c, 0, 0, 0, f(No, false, "館")}, + {0xfa2d, 0, 0, 0, f(No, false, "鶴")}, + {0xfa2e, 0, 0, 0, f(No, false, "郞")}, + {0xfa2f, 0, 0, 0, f(No, false, "隷")}, + {0xfa30, 0, 0, 0, f(No, false, "侮")}, + {0xfa31, 0, 0, 0, f(No, false, "僧")}, + {0xfa32, 0, 0, 0, f(No, false, "免")}, + {0xfa33, 0, 0, 0, f(No, false, "勉")}, + {0xfa34, 0, 0, 0, f(No, false, "勤")}, + {0xfa35, 0, 0, 0, f(No, false, "卑")}, + {0xfa36, 0, 0, 0, f(No, false, "喝")}, + {0xfa37, 0, 0, 0, f(No, false, "嘆")}, + {0xfa38, 0, 0, 0, f(No, false, "器")}, + {0xfa39, 0, 0, 0, f(No, false, "塀")}, + {0xfa3a, 0, 0, 0, f(No, false, "墨")}, + {0xfa3b, 0, 0, 0, f(No, false, "層")}, + {0xfa3c, 0, 0, 0, f(No, false, "屮")}, + {0xfa3d, 0, 0, 0, f(No, false, "悔")}, + {0xfa3e, 0, 0, 0, f(No, false, "慨")}, + {0xfa3f, 0, 0, 0, f(No, false, "憎")}, + {0xfa40, 0, 0, 0, f(No, false, "懲")}, + {0xfa41, 0, 0, 0, f(No, false, "敏")}, + {0xfa42, 0, 0, 0, f(No, false, "既")}, + {0xfa43, 0, 0, 0, f(No, false, "暑")}, + {0xfa44, 0, 0, 0, f(No, false, "梅")}, + {0xfa45, 0, 0, 0, f(No, false, "海")}, + {0xfa46, 0, 0, 0, f(No, false, "渚")}, + {0xfa47, 0, 0, 0, f(No, false, "漢")}, + {0xfa48, 0, 0, 0, f(No, false, "煮")}, + {0xfa49, 0, 0, 0, f(No, false, "爫")}, + {0xfa4a, 0, 0, 0, f(No, false, "琢")}, + {0xfa4b, 0, 0, 0, f(No, false, "碑")}, + {0xfa4c, 0, 0, 0, f(No, false, "社")}, + {0xfa4d, 0, 0, 0, f(No, false, "祉")}, + {0xfa4e, 0, 0, 0, f(No, false, "祈")}, + {0xfa4f, 0, 0, 0, f(No, false, "祐")}, + {0xfa50, 0, 0, 0, f(No, false, "祖")}, + {0xfa51, 0, 0, 0, f(No, false, "祝")}, + {0xfa52, 0, 0, 0, f(No, false, "禍")}, + {0xfa53, 0, 0, 0, f(No, false, "禎")}, + {0xfa54, 0, 0, 0, f(No, false, "穀")}, + {0xfa55, 0, 0, 0, f(No, false, "突")}, + {0xfa56, 0, 0, 0, f(No, false, "節")}, + {0xfa57, 0, 0, 0, f(No, false, "練")}, + {0xfa58, 0, 0, 0, f(No, false, "縉")}, + {0xfa59, 0, 0, 0, f(No, false, "繁")}, + {0xfa5a, 0, 0, 0, f(No, false, "署")}, + {0xfa5b, 0, 0, 0, f(No, false, "者")}, + {0xfa5c, 0, 0, 0, f(No, false, "臭")}, + {0xfa5d, 0, 0, 0, f(No, false, "艹")}, + {0xfa5f, 0, 0, 0, f(No, false, "著")}, + {0xfa60, 0, 0, 0, f(No, false, "褐")}, + {0xfa61, 0, 0, 0, f(No, false, "視")}, + {0xfa62, 0, 0, 0, f(No, false, "謁")}, + {0xfa63, 0, 0, 0, f(No, false, "謹")}, + {0xfa64, 0, 0, 0, f(No, false, "賓")}, + {0xfa65, 0, 0, 0, f(No, false, "贈")}, + {0xfa66, 0, 0, 0, f(No, false, "辶")}, + {0xfa67, 0, 0, 0, f(No, false, "逸")}, + {0xfa68, 0, 0, 0, f(No, false, "難")}, + {0xfa69, 0, 0, 0, f(No, false, "響")}, + {0xfa6a, 0, 0, 0, f(No, false, "頻")}, + {0xfa6b, 0, 0, 0, f(No, false, "恵")}, + {0xfa6c, 0, 0, 0, f(No, false, "𤋮")}, + {0xfa6d, 0, 0, 0, f(No, false, "舘")}, + {0xfa6e, 0, 0, 0, f(Yes, false, "")}, + {0xfa70, 0, 0, 0, f(No, false, "並")}, + {0xfa71, 0, 0, 0, f(No, false, "况")}, + {0xfa72, 0, 0, 0, f(No, false, "全")}, + {0xfa73, 0, 0, 0, f(No, false, "侀")}, + {0xfa74, 0, 0, 0, f(No, false, "充")}, + {0xfa75, 0, 0, 0, f(No, false, "冀")}, + {0xfa76, 0, 0, 0, f(No, false, "勇")}, + {0xfa77, 0, 0, 0, f(No, false, "勺")}, + {0xfa78, 0, 0, 0, f(No, false, "喝")}, + {0xfa79, 0, 0, 0, f(No, false, "啕")}, + {0xfa7a, 0, 0, 0, f(No, false, "喙")}, + {0xfa7b, 0, 0, 0, f(No, false, "嗢")}, + {0xfa7c, 0, 0, 0, f(No, false, "塚")}, + {0xfa7d, 0, 0, 0, f(No, false, "墳")}, + {0xfa7e, 0, 0, 0, f(No, false, "奄")}, + {0xfa7f, 0, 0, 0, f(No, false, "奔")}, + {0xfa80, 0, 0, 0, f(No, false, "婢")}, + {0xfa81, 0, 0, 0, f(No, false, "嬨")}, + {0xfa82, 0, 0, 0, f(No, false, "廒")}, + {0xfa83, 0, 0, 0, f(No, false, "廙")}, + {0xfa84, 0, 0, 0, f(No, false, "彩")}, + {0xfa85, 0, 0, 0, f(No, false, "徭")}, + {0xfa86, 0, 0, 0, f(No, false, "惘")}, + {0xfa87, 0, 0, 0, f(No, false, "慎")}, + {0xfa88, 0, 0, 0, f(No, false, "愈")}, + {0xfa89, 0, 0, 0, f(No, false, "憎")}, + {0xfa8a, 0, 0, 0, f(No, false, "慠")}, + {0xfa8b, 0, 0, 0, f(No, false, "懲")}, + {0xfa8c, 0, 0, 0, f(No, false, "戴")}, + {0xfa8d, 0, 0, 0, f(No, false, "揄")}, + {0xfa8e, 0, 0, 0, f(No, false, "搜")}, + {0xfa8f, 0, 0, 0, f(No, false, "摒")}, + {0xfa90, 0, 0, 0, f(No, false, "敖")}, + {0xfa91, 0, 0, 0, f(No, false, "晴")}, + {0xfa92, 0, 0, 0, f(No, false, "朗")}, + {0xfa93, 0, 0, 0, f(No, false, "望")}, + {0xfa94, 0, 0, 0, f(No, false, "杖")}, + {0xfa95, 0, 0, 0, f(No, false, "歹")}, + {0xfa96, 0, 0, 0, f(No, false, "殺")}, + {0xfa97, 0, 0, 0, f(No, false, "流")}, + {0xfa98, 0, 0, 0, f(No, false, "滛")}, + {0xfa99, 0, 0, 0, f(No, false, "滋")}, + {0xfa9a, 0, 0, 0, f(No, false, "漢")}, + {0xfa9b, 0, 0, 0, f(No, false, "瀞")}, + {0xfa9c, 0, 0, 0, f(No, false, "煮")}, + {0xfa9d, 0, 0, 0, f(No, false, "瞧")}, + {0xfa9e, 0, 0, 0, f(No, false, "爵")}, + {0xfa9f, 0, 0, 0, f(No, false, "犯")}, + {0xfaa0, 0, 0, 0, f(No, false, "猪")}, + {0xfaa1, 0, 0, 0, f(No, false, "瑱")}, + {0xfaa2, 0, 0, 0, f(No, false, "甆")}, + {0xfaa3, 0, 0, 0, f(No, false, "画")}, + {0xfaa4, 0, 0, 0, f(No, false, "瘝")}, + {0xfaa5, 0, 0, 0, f(No, false, "瘟")}, + {0xfaa6, 0, 0, 0, f(No, false, "益")}, + {0xfaa7, 0, 0, 0, f(No, false, "盛")}, + {0xfaa8, 0, 0, 0, f(No, false, "直")}, + {0xfaa9, 0, 0, 0, f(No, false, "睊")}, + {0xfaaa, 0, 0, 0, f(No, false, "着")}, + {0xfaab, 0, 0, 0, f(No, false, "磌")}, + {0xfaac, 0, 0, 0, f(No, false, "窱")}, + {0xfaad, 0, 0, 0, f(No, false, "節")}, + {0xfaae, 0, 0, 0, f(No, false, "类")}, + {0xfaaf, 0, 0, 0, f(No, false, "絛")}, + {0xfab0, 0, 0, 0, f(No, false, "練")}, + {0xfab1, 0, 0, 0, f(No, false, "缾")}, + {0xfab2, 0, 0, 0, f(No, false, "者")}, + {0xfab3, 0, 0, 0, f(No, false, "荒")}, + {0xfab4, 0, 0, 0, f(No, false, "華")}, + {0xfab5, 0, 0, 0, f(No, false, "蝹")}, + {0xfab6, 0, 0, 0, f(No, false, "襁")}, + {0xfab7, 0, 0, 0, f(No, false, "覆")}, + {0xfab8, 0, 0, 0, f(No, false, "視")}, + {0xfab9, 0, 0, 0, f(No, false, "調")}, + {0xfaba, 0, 0, 0, f(No, false, "諸")}, + {0xfabb, 0, 0, 0, f(No, false, "請")}, + {0xfabc, 0, 0, 0, f(No, false, "謁")}, + {0xfabd, 0, 0, 0, f(No, false, "諾")}, + {0xfabe, 0, 0, 0, f(No, false, "諭")}, + {0xfabf, 0, 0, 0, f(No, false, "謹")}, + {0xfac0, 0, 0, 0, f(No, false, "變")}, + {0xfac1, 0, 0, 0, f(No, false, "贈")}, + {0xfac2, 0, 0, 0, f(No, false, "輸")}, + {0xfac3, 0, 0, 0, f(No, false, "遲")}, + {0xfac4, 0, 0, 0, f(No, false, "醙")}, + {0xfac5, 0, 0, 0, f(No, false, "鉶")}, + {0xfac6, 0, 0, 0, f(No, false, "陼")}, + {0xfac7, 0, 0, 0, f(No, false, "難")}, + {0xfac8, 0, 0, 0, f(No, false, "靖")}, + {0xfac9, 0, 0, 0, f(No, false, "韛")}, + {0xfaca, 0, 0, 0, f(No, false, "響")}, + {0xfacb, 0, 0, 0, f(No, false, "頋")}, + {0xfacc, 0, 0, 0, f(No, false, "頻")}, + {0xfacd, 0, 0, 0, f(No, false, "鬒")}, + {0xface, 0, 0, 0, f(No, false, "龜")}, + {0xfacf, 0, 0, 0, f(No, false, "𢡊")}, + {0xfad0, 0, 0, 0, f(No, false, "𢡄")}, + {0xfad1, 0, 0, 0, f(No, false, "𣏕")}, + {0xfad2, 0, 0, 0, f(No, false, "㮝")}, + {0xfad3, 0, 0, 0, f(No, false, "䀘")}, + {0xfad4, 0, 0, 0, f(No, false, "䀹")}, + {0xfad5, 0, 0, 0, f(No, false, "𥉉")}, + {0xfad6, 0, 0, 0, f(No, false, "𥳐")}, + {0xfad7, 0, 0, 0, f(No, false, "𧻓")}, + {0xfad8, 0, 0, 0, f(No, false, "齃")}, + {0xfad9, 0, 0, 0, f(No, false, "龎")}, + {0xfada, 0, 0, 0, f(Yes, false, "")}, + {0xfb00, 0, 0, 0, g(Yes, No, false, false, "", "ff")}, + {0xfb01, 0, 0, 0, g(Yes, No, false, false, "", "fi")}, + {0xfb02, 0, 0, 0, g(Yes, No, false, false, "", "fl")}, + {0xfb03, 0, 0, 0, g(Yes, No, false, false, "", "ffi")}, + {0xfb04, 0, 0, 0, g(Yes, No, false, false, "", "ffl")}, + {0xfb05, 0, 0, 0, g(Yes, No, false, false, "", "st")}, + {0xfb07, 0, 0, 0, f(Yes, false, "")}, + {0xfb13, 0, 0, 0, g(Yes, No, false, false, "", "մն")}, + {0xfb14, 0, 0, 0, g(Yes, No, false, false, "", "մե")}, + {0xfb15, 0, 0, 0, g(Yes, No, false, false, "", "մի")}, + {0xfb16, 0, 0, 0, g(Yes, No, false, false, "", "վն")}, + {0xfb17, 0, 0, 0, g(Yes, No, false, false, "", "մխ")}, + {0xfb18, 0, 0, 0, f(Yes, false, "")}, + {0xfb1d, 0, 0, 1, f(No, false, "יִ")}, + {0xfb1e, 26, 1, 1, f(Yes, false, "")}, + {0xfb1f, 0, 0, 1, f(No, false, "ײַ")}, + {0xfb20, 0, 0, 0, g(Yes, No, false, false, "", "ע")}, + {0xfb21, 0, 0, 0, g(Yes, No, false, false, "", "א")}, + {0xfb22, 0, 0, 0, g(Yes, No, false, false, "", "ד")}, + {0xfb23, 0, 0, 0, g(Yes, No, false, false, "", "ה")}, + {0xfb24, 0, 0, 0, g(Yes, No, false, false, "", "כ")}, + {0xfb25, 0, 0, 0, g(Yes, No, false, false, "", "ל")}, + {0xfb26, 0, 0, 0, g(Yes, No, false, false, "", "ם")}, + {0xfb27, 0, 0, 0, g(Yes, No, false, false, "", "ר")}, + {0xfb28, 0, 0, 0, g(Yes, No, false, false, "", "ת")}, + {0xfb29, 0, 0, 0, g(Yes, No, false, false, "", "+")}, + {0xfb2a, 0, 0, 1, f(No, false, "שׁ")}, + {0xfb2b, 0, 0, 1, f(No, false, "שׂ")}, + {0xfb2c, 0, 0, 2, f(No, false, "שּׁ")}, + {0xfb2d, 0, 0, 2, f(No, false, "שּׂ")}, + {0xfb2e, 0, 0, 1, f(No, false, "אַ")}, + {0xfb2f, 0, 0, 1, f(No, false, "אָ")}, + {0xfb30, 0, 0, 1, f(No, false, "אּ")}, + {0xfb31, 0, 0, 1, f(No, false, "בּ")}, + {0xfb32, 0, 0, 1, f(No, false, "גּ")}, + {0xfb33, 0, 0, 1, f(No, false, "דּ")}, + {0xfb34, 0, 0, 1, f(No, false, "הּ")}, + {0xfb35, 0, 0, 1, f(No, false, "וּ")}, + {0xfb36, 0, 0, 1, f(No, false, "זּ")}, + {0xfb37, 0, 0, 0, f(Yes, false, "")}, + {0xfb38, 0, 0, 1, f(No, false, "טּ")}, + {0xfb39, 0, 0, 1, f(No, false, "יּ")}, + {0xfb3a, 0, 0, 1, f(No, false, "ךּ")}, + {0xfb3b, 0, 0, 1, f(No, false, "כּ")}, + {0xfb3c, 0, 0, 1, f(No, false, "לּ")}, + {0xfb3d, 0, 0, 0, f(Yes, false, "")}, + {0xfb3e, 0, 0, 1, f(No, false, "מּ")}, + {0xfb3f, 0, 0, 0, f(Yes, false, "")}, + {0xfb40, 0, 0, 1, f(No, false, "נּ")}, + {0xfb41, 0, 0, 1, f(No, false, "סּ")}, + {0xfb42, 0, 0, 0, f(Yes, false, "")}, + {0xfb43, 0, 0, 1, f(No, false, "ףּ")}, + {0xfb44, 0, 0, 1, f(No, false, "פּ")}, + {0xfb45, 0, 0, 0, f(Yes, false, "")}, + {0xfb46, 0, 0, 1, f(No, false, "צּ")}, + {0xfb47, 0, 0, 1, f(No, false, "קּ")}, + {0xfb48, 0, 0, 1, f(No, false, "רּ")}, + {0xfb49, 0, 0, 1, f(No, false, "שּ")}, + {0xfb4a, 0, 0, 1, f(No, false, "תּ")}, + {0xfb4b, 0, 0, 1, f(No, false, "וֹ")}, + {0xfb4c, 0, 0, 1, f(No, false, "בֿ")}, + {0xfb4d, 0, 0, 1, f(No, false, "כֿ")}, + {0xfb4e, 0, 0, 1, f(No, false, "פֿ")}, + {0xfb4f, 0, 0, 0, g(Yes, No, false, false, "", "אל")}, + {0xfb50, 0, 0, 0, g(Yes, No, false, false, "", "ٱ")}, + {0xfb52, 0, 0, 0, g(Yes, No, false, false, "", "ٻ")}, + {0xfb56, 0, 0, 0, g(Yes, No, false, false, "", "پ")}, + {0xfb5a, 0, 0, 0, g(Yes, No, false, false, "", "ڀ")}, + {0xfb5e, 0, 0, 0, g(Yes, No, false, false, "", "ٺ")}, + {0xfb62, 0, 0, 0, g(Yes, No, false, false, "", "ٿ")}, + {0xfb66, 0, 0, 0, g(Yes, No, false, false, "", "ٹ")}, + {0xfb6a, 0, 0, 0, g(Yes, No, false, false, "", "ڤ")}, + {0xfb6e, 0, 0, 0, g(Yes, No, false, false, "", "ڦ")}, + {0xfb72, 0, 0, 0, g(Yes, No, false, false, "", "ڄ")}, + {0xfb76, 0, 0, 0, g(Yes, No, false, false, "", "ڃ")}, + {0xfb7a, 0, 0, 0, g(Yes, No, false, false, "", "چ")}, + {0xfb7e, 0, 0, 0, g(Yes, No, false, false, "", "ڇ")}, + {0xfb82, 0, 0, 0, g(Yes, No, false, false, "", "ڍ")}, + {0xfb84, 0, 0, 0, g(Yes, No, false, false, "", "ڌ")}, + {0xfb86, 0, 0, 0, g(Yes, No, false, false, "", "ڎ")}, + {0xfb88, 0, 0, 0, g(Yes, No, false, false, "", "ڈ")}, + {0xfb8a, 0, 0, 0, g(Yes, No, false, false, "", "ژ")}, + {0xfb8c, 0, 0, 0, g(Yes, No, false, false, "", "ڑ")}, + {0xfb8e, 0, 0, 0, g(Yes, No, false, false, "", "ک")}, + {0xfb92, 0, 0, 0, g(Yes, No, false, false, "", "گ")}, + {0xfb96, 0, 0, 0, g(Yes, No, false, false, "", "ڳ")}, + {0xfb9a, 0, 0, 0, g(Yes, No, false, false, "", "ڱ")}, + {0xfb9e, 0, 0, 0, g(Yes, No, false, false, "", "ں")}, + {0xfba0, 0, 0, 0, g(Yes, No, false, false, "", "ڻ")}, + {0xfba4, 0, 0, 1, g(Yes, No, false, false, "", "ۀ")}, + {0xfba6, 0, 0, 0, g(Yes, No, false, false, "", "ہ")}, + {0xfbaa, 0, 0, 0, g(Yes, No, false, false, "", "ھ")}, + {0xfbae, 0, 0, 0, g(Yes, No, false, false, "", "ے")}, + {0xfbb0, 0, 0, 1, g(Yes, No, false, false, "", "ۓ")}, + {0xfbb2, 0, 0, 0, f(Yes, false, "")}, + {0xfbd3, 0, 0, 0, g(Yes, No, false, false, "", "ڭ")}, + {0xfbd7, 0, 0, 0, g(Yes, No, false, false, "", "ۇ")}, + {0xfbd9, 0, 0, 0, g(Yes, No, false, false, "", "ۆ")}, + {0xfbdb, 0, 0, 0, g(Yes, No, false, false, "", "ۈ")}, + {0xfbdd, 0, 0, 0, g(Yes, No, false, false, "", "ۇٴ")}, + {0xfbde, 0, 0, 0, g(Yes, No, false, false, "", "ۋ")}, + {0xfbe0, 0, 0, 0, g(Yes, No, false, false, "", "ۅ")}, + {0xfbe2, 0, 0, 0, g(Yes, No, false, false, "", "ۉ")}, + {0xfbe4, 0, 0, 0, g(Yes, No, false, false, "", "ې")}, + {0xfbe8, 0, 0, 0, g(Yes, No, false, false, "", "ى")}, + {0xfbea, 0, 0, 0, g(Yes, No, false, false, "", "ئا")}, + {0xfbec, 0, 0, 0, g(Yes, No, false, false, "", "ئە")}, + {0xfbee, 0, 0, 0, g(Yes, No, false, false, "", "ئو")}, + {0xfbf0, 0, 0, 0, g(Yes, No, false, false, "", "ئۇ")}, + {0xfbf2, 0, 0, 0, g(Yes, No, false, false, "", "ئۆ")}, + {0xfbf4, 0, 0, 0, g(Yes, No, false, false, "", "ئۈ")}, + {0xfbf6, 0, 0, 0, g(Yes, No, false, false, "", "ئې")}, + {0xfbf9, 0, 0, 0, g(Yes, No, false, false, "", "ئى")}, + {0xfbfc, 0, 0, 0, g(Yes, No, false, false, "", "ی")}, + {0xfc00, 0, 0, 0, g(Yes, No, false, false, "", "ئج")}, + {0xfc01, 0, 0, 0, g(Yes, No, false, false, "", "ئح")}, + {0xfc02, 0, 0, 0, g(Yes, No, false, false, "", "ئم")}, + {0xfc03, 0, 0, 0, g(Yes, No, false, false, "", "ئى")}, + {0xfc04, 0, 0, 0, g(Yes, No, false, false, "", "ئي")}, + {0xfc05, 0, 0, 0, g(Yes, No, false, false, "", "بج")}, + {0xfc06, 0, 0, 0, g(Yes, No, false, false, "", "بح")}, + {0xfc07, 0, 0, 0, g(Yes, No, false, false, "", "بخ")}, + {0xfc08, 0, 0, 0, g(Yes, No, false, false, "", "بم")}, + {0xfc09, 0, 0, 0, g(Yes, No, false, false, "", "بى")}, + {0xfc0a, 0, 0, 0, g(Yes, No, false, false, "", "بي")}, + {0xfc0b, 0, 0, 0, g(Yes, No, false, false, "", "تج")}, + {0xfc0c, 0, 0, 0, g(Yes, No, false, false, "", "تح")}, + {0xfc0d, 0, 0, 0, g(Yes, No, false, false, "", "تخ")}, + {0xfc0e, 0, 0, 0, g(Yes, No, false, false, "", "تم")}, + {0xfc0f, 0, 0, 0, g(Yes, No, false, false, "", "تى")}, + {0xfc10, 0, 0, 0, g(Yes, No, false, false, "", "تي")}, + {0xfc11, 0, 0, 0, g(Yes, No, false, false, "", "ثج")}, + {0xfc12, 0, 0, 0, g(Yes, No, false, false, "", "ثم")}, + {0xfc13, 0, 0, 0, g(Yes, No, false, false, "", "ثى")}, + {0xfc14, 0, 0, 0, g(Yes, No, false, false, "", "ثي")}, + {0xfc15, 0, 0, 0, g(Yes, No, false, false, "", "جح")}, + {0xfc16, 0, 0, 0, g(Yes, No, false, false, "", "جم")}, + {0xfc17, 0, 0, 0, g(Yes, No, false, false, "", "حج")}, + {0xfc18, 0, 0, 0, g(Yes, No, false, false, "", "حم")}, + {0xfc19, 0, 0, 0, g(Yes, No, false, false, "", "خج")}, + {0xfc1a, 0, 0, 0, g(Yes, No, false, false, "", "خح")}, + {0xfc1b, 0, 0, 0, g(Yes, No, false, false, "", "خم")}, + {0xfc1c, 0, 0, 0, g(Yes, No, false, false, "", "سج")}, + {0xfc1d, 0, 0, 0, g(Yes, No, false, false, "", "سح")}, + {0xfc1e, 0, 0, 0, g(Yes, No, false, false, "", "سخ")}, + {0xfc1f, 0, 0, 0, g(Yes, No, false, false, "", "سم")}, + {0xfc20, 0, 0, 0, g(Yes, No, false, false, "", "صح")}, + {0xfc21, 0, 0, 0, g(Yes, No, false, false, "", "صم")}, + {0xfc22, 0, 0, 0, g(Yes, No, false, false, "", "ضج")}, + {0xfc23, 0, 0, 0, g(Yes, No, false, false, "", "ضح")}, + {0xfc24, 0, 0, 0, g(Yes, No, false, false, "", "ضخ")}, + {0xfc25, 0, 0, 0, g(Yes, No, false, false, "", "ضم")}, + {0xfc26, 0, 0, 0, g(Yes, No, false, false, "", "طح")}, + {0xfc27, 0, 0, 0, g(Yes, No, false, false, "", "طم")}, + {0xfc28, 0, 0, 0, g(Yes, No, false, false, "", "ظم")}, + {0xfc29, 0, 0, 0, g(Yes, No, false, false, "", "عج")}, + {0xfc2a, 0, 0, 0, g(Yes, No, false, false, "", "عم")}, + {0xfc2b, 0, 0, 0, g(Yes, No, false, false, "", "غج")}, + {0xfc2c, 0, 0, 0, g(Yes, No, false, false, "", "غم")}, + {0xfc2d, 0, 0, 0, g(Yes, No, false, false, "", "فج")}, + {0xfc2e, 0, 0, 0, g(Yes, No, false, false, "", "فح")}, + {0xfc2f, 0, 0, 0, g(Yes, No, false, false, "", "فخ")}, + {0xfc30, 0, 0, 0, g(Yes, No, false, false, "", "فم")}, + {0xfc31, 0, 0, 0, g(Yes, No, false, false, "", "فى")}, + {0xfc32, 0, 0, 0, g(Yes, No, false, false, "", "في")}, + {0xfc33, 0, 0, 0, g(Yes, No, false, false, "", "قح")}, + {0xfc34, 0, 0, 0, g(Yes, No, false, false, "", "قم")}, + {0xfc35, 0, 0, 0, g(Yes, No, false, false, "", "قى")}, + {0xfc36, 0, 0, 0, g(Yes, No, false, false, "", "قي")}, + {0xfc37, 0, 0, 0, g(Yes, No, false, false, "", "كا")}, + {0xfc38, 0, 0, 0, g(Yes, No, false, false, "", "كج")}, + {0xfc39, 0, 0, 0, g(Yes, No, false, false, "", "كح")}, + {0xfc3a, 0, 0, 0, g(Yes, No, false, false, "", "كخ")}, + {0xfc3b, 0, 0, 0, g(Yes, No, false, false, "", "كل")}, + {0xfc3c, 0, 0, 0, g(Yes, No, false, false, "", "كم")}, + {0xfc3d, 0, 0, 0, g(Yes, No, false, false, "", "كى")}, + {0xfc3e, 0, 0, 0, g(Yes, No, false, false, "", "كي")}, + {0xfc3f, 0, 0, 0, g(Yes, No, false, false, "", "لج")}, + {0xfc40, 0, 0, 0, g(Yes, No, false, false, "", "لح")}, + {0xfc41, 0, 0, 0, g(Yes, No, false, false, "", "لخ")}, + {0xfc42, 0, 0, 0, g(Yes, No, false, false, "", "لم")}, + {0xfc43, 0, 0, 0, g(Yes, No, false, false, "", "لى")}, + {0xfc44, 0, 0, 0, g(Yes, No, false, false, "", "لي")}, + {0xfc45, 0, 0, 0, g(Yes, No, false, false, "", "مج")}, + {0xfc46, 0, 0, 0, g(Yes, No, false, false, "", "مح")}, + {0xfc47, 0, 0, 0, g(Yes, No, false, false, "", "مخ")}, + {0xfc48, 0, 0, 0, g(Yes, No, false, false, "", "مم")}, + {0xfc49, 0, 0, 0, g(Yes, No, false, false, "", "مى")}, + {0xfc4a, 0, 0, 0, g(Yes, No, false, false, "", "مي")}, + {0xfc4b, 0, 0, 0, g(Yes, No, false, false, "", "نج")}, + {0xfc4c, 0, 0, 0, g(Yes, No, false, false, "", "نح")}, + {0xfc4d, 0, 0, 0, g(Yes, No, false, false, "", "نخ")}, + {0xfc4e, 0, 0, 0, g(Yes, No, false, false, "", "نم")}, + {0xfc4f, 0, 0, 0, g(Yes, No, false, false, "", "نى")}, + {0xfc50, 0, 0, 0, g(Yes, No, false, false, "", "ني")}, + {0xfc51, 0, 0, 0, g(Yes, No, false, false, "", "هج")}, + {0xfc52, 0, 0, 0, g(Yes, No, false, false, "", "هم")}, + {0xfc53, 0, 0, 0, g(Yes, No, false, false, "", "هى")}, + {0xfc54, 0, 0, 0, g(Yes, No, false, false, "", "هي")}, + {0xfc55, 0, 0, 0, g(Yes, No, false, false, "", "يج")}, + {0xfc56, 0, 0, 0, g(Yes, No, false, false, "", "يح")}, + {0xfc57, 0, 0, 0, g(Yes, No, false, false, "", "يخ")}, + {0xfc58, 0, 0, 0, g(Yes, No, false, false, "", "يم")}, + {0xfc59, 0, 0, 0, g(Yes, No, false, false, "", "يى")}, + {0xfc5a, 0, 0, 0, g(Yes, No, false, false, "", "يي")}, + {0xfc5b, 0, 0, 1, g(Yes, No, false, false, "", "ذٰ")}, + {0xfc5c, 0, 0, 1, g(Yes, No, false, false, "", "رٰ")}, + {0xfc5d, 0, 0, 1, g(Yes, No, false, false, "", "ىٰ")}, + {0xfc5e, 0, 0, 2, g(Yes, No, false, false, "", " ٌّ")}, + {0xfc5f, 0, 0, 2, g(Yes, No, false, false, "", " ٍّ")}, + {0xfc60, 0, 0, 2, g(Yes, No, false, false, "", " َّ")}, + {0xfc61, 0, 0, 2, g(Yes, No, false, false, "", " ُّ")}, + {0xfc62, 0, 0, 2, g(Yes, No, false, false, "", " ِّ")}, + {0xfc63, 0, 0, 2, g(Yes, No, false, false, "", " ّٰ")}, + {0xfc64, 0, 0, 0, g(Yes, No, false, false, "", "ئر")}, + {0xfc65, 0, 0, 0, g(Yes, No, false, false, "", "ئز")}, + {0xfc66, 0, 0, 0, g(Yes, No, false, false, "", "ئم")}, + {0xfc67, 0, 0, 0, g(Yes, No, false, false, "", "ئن")}, + {0xfc68, 0, 0, 0, g(Yes, No, false, false, "", "ئى")}, + {0xfc69, 0, 0, 0, g(Yes, No, false, false, "", "ئي")}, + {0xfc6a, 0, 0, 0, g(Yes, No, false, false, "", "بر")}, + {0xfc6b, 0, 0, 0, g(Yes, No, false, false, "", "بز")}, + {0xfc6c, 0, 0, 0, g(Yes, No, false, false, "", "بم")}, + {0xfc6d, 0, 0, 0, g(Yes, No, false, false, "", "بن")}, + {0xfc6e, 0, 0, 0, g(Yes, No, false, false, "", "بى")}, + {0xfc6f, 0, 0, 0, g(Yes, No, false, false, "", "بي")}, + {0xfc70, 0, 0, 0, g(Yes, No, false, false, "", "تر")}, + {0xfc71, 0, 0, 0, g(Yes, No, false, false, "", "تز")}, + {0xfc72, 0, 0, 0, g(Yes, No, false, false, "", "تم")}, + {0xfc73, 0, 0, 0, g(Yes, No, false, false, "", "تن")}, + {0xfc74, 0, 0, 0, g(Yes, No, false, false, "", "تى")}, + {0xfc75, 0, 0, 0, g(Yes, No, false, false, "", "تي")}, + {0xfc76, 0, 0, 0, g(Yes, No, false, false, "", "ثر")}, + {0xfc77, 0, 0, 0, g(Yes, No, false, false, "", "ثز")}, + {0xfc78, 0, 0, 0, g(Yes, No, false, false, "", "ثم")}, + {0xfc79, 0, 0, 0, g(Yes, No, false, false, "", "ثن")}, + {0xfc7a, 0, 0, 0, g(Yes, No, false, false, "", "ثى")}, + {0xfc7b, 0, 0, 0, g(Yes, No, false, false, "", "ثي")}, + {0xfc7c, 0, 0, 0, g(Yes, No, false, false, "", "فى")}, + {0xfc7d, 0, 0, 0, g(Yes, No, false, false, "", "في")}, + {0xfc7e, 0, 0, 0, g(Yes, No, false, false, "", "قى")}, + {0xfc7f, 0, 0, 0, g(Yes, No, false, false, "", "قي")}, + {0xfc80, 0, 0, 0, g(Yes, No, false, false, "", "كا")}, + {0xfc81, 0, 0, 0, g(Yes, No, false, false, "", "كل")}, + {0xfc82, 0, 0, 0, g(Yes, No, false, false, "", "كم")}, + {0xfc83, 0, 0, 0, g(Yes, No, false, false, "", "كى")}, + {0xfc84, 0, 0, 0, g(Yes, No, false, false, "", "كي")}, + {0xfc85, 0, 0, 0, g(Yes, No, false, false, "", "لم")}, + {0xfc86, 0, 0, 0, g(Yes, No, false, false, "", "لى")}, + {0xfc87, 0, 0, 0, g(Yes, No, false, false, "", "لي")}, + {0xfc88, 0, 0, 0, g(Yes, No, false, false, "", "ما")}, + {0xfc89, 0, 0, 0, g(Yes, No, false, false, "", "مم")}, + {0xfc8a, 0, 0, 0, g(Yes, No, false, false, "", "نر")}, + {0xfc8b, 0, 0, 0, g(Yes, No, false, false, "", "نز")}, + {0xfc8c, 0, 0, 0, g(Yes, No, false, false, "", "نم")}, + {0xfc8d, 0, 0, 0, g(Yes, No, false, false, "", "نن")}, + {0xfc8e, 0, 0, 0, g(Yes, No, false, false, "", "نى")}, + {0xfc8f, 0, 0, 0, g(Yes, No, false, false, "", "ني")}, + {0xfc90, 0, 0, 1, g(Yes, No, false, false, "", "ىٰ")}, + {0xfc91, 0, 0, 0, g(Yes, No, false, false, "", "ير")}, + {0xfc92, 0, 0, 0, g(Yes, No, false, false, "", "يز")}, + {0xfc93, 0, 0, 0, g(Yes, No, false, false, "", "يم")}, + {0xfc94, 0, 0, 0, g(Yes, No, false, false, "", "ين")}, + {0xfc95, 0, 0, 0, g(Yes, No, false, false, "", "يى")}, + {0xfc96, 0, 0, 0, g(Yes, No, false, false, "", "يي")}, + {0xfc97, 0, 0, 0, g(Yes, No, false, false, "", "ئج")}, + {0xfc98, 0, 0, 0, g(Yes, No, false, false, "", "ئح")}, + {0xfc99, 0, 0, 0, g(Yes, No, false, false, "", "ئخ")}, + {0xfc9a, 0, 0, 0, g(Yes, No, false, false, "", "ئم")}, + {0xfc9b, 0, 0, 0, g(Yes, No, false, false, "", "ئه")}, + {0xfc9c, 0, 0, 0, g(Yes, No, false, false, "", "بج")}, + {0xfc9d, 0, 0, 0, g(Yes, No, false, false, "", "بح")}, + {0xfc9e, 0, 0, 0, g(Yes, No, false, false, "", "بخ")}, + {0xfc9f, 0, 0, 0, g(Yes, No, false, false, "", "بم")}, + {0xfca0, 0, 0, 0, g(Yes, No, false, false, "", "به")}, + {0xfca1, 0, 0, 0, g(Yes, No, false, false, "", "تج")}, + {0xfca2, 0, 0, 0, g(Yes, No, false, false, "", "تح")}, + {0xfca3, 0, 0, 0, g(Yes, No, false, false, "", "تخ")}, + {0xfca4, 0, 0, 0, g(Yes, No, false, false, "", "تم")}, + {0xfca5, 0, 0, 0, g(Yes, No, false, false, "", "ته")}, + {0xfca6, 0, 0, 0, g(Yes, No, false, false, "", "ثم")}, + {0xfca7, 0, 0, 0, g(Yes, No, false, false, "", "جح")}, + {0xfca8, 0, 0, 0, g(Yes, No, false, false, "", "جم")}, + {0xfca9, 0, 0, 0, g(Yes, No, false, false, "", "حج")}, + {0xfcaa, 0, 0, 0, g(Yes, No, false, false, "", "حم")}, + {0xfcab, 0, 0, 0, g(Yes, No, false, false, "", "خج")}, + {0xfcac, 0, 0, 0, g(Yes, No, false, false, "", "خم")}, + {0xfcad, 0, 0, 0, g(Yes, No, false, false, "", "سج")}, + {0xfcae, 0, 0, 0, g(Yes, No, false, false, "", "سح")}, + {0xfcaf, 0, 0, 0, g(Yes, No, false, false, "", "سخ")}, + {0xfcb0, 0, 0, 0, g(Yes, No, false, false, "", "سم")}, + {0xfcb1, 0, 0, 0, g(Yes, No, false, false, "", "صح")}, + {0xfcb2, 0, 0, 0, g(Yes, No, false, false, "", "صخ")}, + {0xfcb3, 0, 0, 0, g(Yes, No, false, false, "", "صم")}, + {0xfcb4, 0, 0, 0, g(Yes, No, false, false, "", "ضج")}, + {0xfcb5, 0, 0, 0, g(Yes, No, false, false, "", "ضح")}, + {0xfcb6, 0, 0, 0, g(Yes, No, false, false, "", "ضخ")}, + {0xfcb7, 0, 0, 0, g(Yes, No, false, false, "", "ضم")}, + {0xfcb8, 0, 0, 0, g(Yes, No, false, false, "", "طح")}, + {0xfcb9, 0, 0, 0, g(Yes, No, false, false, "", "ظم")}, + {0xfcba, 0, 0, 0, g(Yes, No, false, false, "", "عج")}, + {0xfcbb, 0, 0, 0, g(Yes, No, false, false, "", "عم")}, + {0xfcbc, 0, 0, 0, g(Yes, No, false, false, "", "غج")}, + {0xfcbd, 0, 0, 0, g(Yes, No, false, false, "", "غم")}, + {0xfcbe, 0, 0, 0, g(Yes, No, false, false, "", "فج")}, + {0xfcbf, 0, 0, 0, g(Yes, No, false, false, "", "فح")}, + {0xfcc0, 0, 0, 0, g(Yes, No, false, false, "", "فخ")}, + {0xfcc1, 0, 0, 0, g(Yes, No, false, false, "", "فم")}, + {0xfcc2, 0, 0, 0, g(Yes, No, false, false, "", "قح")}, + {0xfcc3, 0, 0, 0, g(Yes, No, false, false, "", "قم")}, + {0xfcc4, 0, 0, 0, g(Yes, No, false, false, "", "كج")}, + {0xfcc5, 0, 0, 0, g(Yes, No, false, false, "", "كح")}, + {0xfcc6, 0, 0, 0, g(Yes, No, false, false, "", "كخ")}, + {0xfcc7, 0, 0, 0, g(Yes, No, false, false, "", "كل")}, + {0xfcc8, 0, 0, 0, g(Yes, No, false, false, "", "كم")}, + {0xfcc9, 0, 0, 0, g(Yes, No, false, false, "", "لج")}, + {0xfcca, 0, 0, 0, g(Yes, No, false, false, "", "لح")}, + {0xfccb, 0, 0, 0, g(Yes, No, false, false, "", "لخ")}, + {0xfccc, 0, 0, 0, g(Yes, No, false, false, "", "لم")}, + {0xfccd, 0, 0, 0, g(Yes, No, false, false, "", "له")}, + {0xfcce, 0, 0, 0, g(Yes, No, false, false, "", "مج")}, + {0xfccf, 0, 0, 0, g(Yes, No, false, false, "", "مح")}, + {0xfcd0, 0, 0, 0, g(Yes, No, false, false, "", "مخ")}, + {0xfcd1, 0, 0, 0, g(Yes, No, false, false, "", "مم")}, + {0xfcd2, 0, 0, 0, g(Yes, No, false, false, "", "نج")}, + {0xfcd3, 0, 0, 0, g(Yes, No, false, false, "", "نح")}, + {0xfcd4, 0, 0, 0, g(Yes, No, false, false, "", "نخ")}, + {0xfcd5, 0, 0, 0, g(Yes, No, false, false, "", "نم")}, + {0xfcd6, 0, 0, 0, g(Yes, No, false, false, "", "نه")}, + {0xfcd7, 0, 0, 0, g(Yes, No, false, false, "", "هج")}, + {0xfcd8, 0, 0, 0, g(Yes, No, false, false, "", "هم")}, + {0xfcd9, 0, 0, 1, g(Yes, No, false, false, "", "هٰ")}, + {0xfcda, 0, 0, 0, g(Yes, No, false, false, "", "يج")}, + {0xfcdb, 0, 0, 0, g(Yes, No, false, false, "", "يح")}, + {0xfcdc, 0, 0, 0, g(Yes, No, false, false, "", "يخ")}, + {0xfcdd, 0, 0, 0, g(Yes, No, false, false, "", "يم")}, + {0xfcde, 0, 0, 0, g(Yes, No, false, false, "", "يه")}, + {0xfcdf, 0, 0, 0, g(Yes, No, false, false, "", "ئم")}, + {0xfce0, 0, 0, 0, g(Yes, No, false, false, "", "ئه")}, + {0xfce1, 0, 0, 0, g(Yes, No, false, false, "", "بم")}, + {0xfce2, 0, 0, 0, g(Yes, No, false, false, "", "به")}, + {0xfce3, 0, 0, 0, g(Yes, No, false, false, "", "تم")}, + {0xfce4, 0, 0, 0, g(Yes, No, false, false, "", "ته")}, + {0xfce5, 0, 0, 0, g(Yes, No, false, false, "", "ثم")}, + {0xfce6, 0, 0, 0, g(Yes, No, false, false, "", "ثه")}, + {0xfce7, 0, 0, 0, g(Yes, No, false, false, "", "سم")}, + {0xfce8, 0, 0, 0, g(Yes, No, false, false, "", "سه")}, + {0xfce9, 0, 0, 0, g(Yes, No, false, false, "", "شم")}, + {0xfcea, 0, 0, 0, g(Yes, No, false, false, "", "شه")}, + {0xfceb, 0, 0, 0, g(Yes, No, false, false, "", "كل")}, + {0xfcec, 0, 0, 0, g(Yes, No, false, false, "", "كم")}, + {0xfced, 0, 0, 0, g(Yes, No, false, false, "", "لم")}, + {0xfcee, 0, 0, 0, g(Yes, No, false, false, "", "نم")}, + {0xfcef, 0, 0, 0, g(Yes, No, false, false, "", "نه")}, + {0xfcf0, 0, 0, 0, g(Yes, No, false, false, "", "يم")}, + {0xfcf1, 0, 0, 0, g(Yes, No, false, false, "", "يه")}, + {0xfcf2, 0, 0, 2, g(Yes, No, false, false, "", "ـَّ")}, + {0xfcf3, 0, 0, 2, g(Yes, No, false, false, "", "ـُّ")}, + {0xfcf4, 0, 0, 2, g(Yes, No, false, false, "", "ـِّ")}, + {0xfcf5, 0, 0, 0, g(Yes, No, false, false, "", "طى")}, + {0xfcf6, 0, 0, 0, g(Yes, No, false, false, "", "طي")}, + {0xfcf7, 0, 0, 0, g(Yes, No, false, false, "", "عى")}, + {0xfcf8, 0, 0, 0, g(Yes, No, false, false, "", "عي")}, + {0xfcf9, 0, 0, 0, g(Yes, No, false, false, "", "غى")}, + {0xfcfa, 0, 0, 0, g(Yes, No, false, false, "", "غي")}, + {0xfcfb, 0, 0, 0, g(Yes, No, false, false, "", "سى")}, + {0xfcfc, 0, 0, 0, g(Yes, No, false, false, "", "سي")}, + {0xfcfd, 0, 0, 0, g(Yes, No, false, false, "", "شى")}, + {0xfcfe, 0, 0, 0, g(Yes, No, false, false, "", "شي")}, + {0xfcff, 0, 0, 0, g(Yes, No, false, false, "", "حى")}, + {0xfd00, 0, 0, 0, g(Yes, No, false, false, "", "حي")}, + {0xfd01, 0, 0, 0, g(Yes, No, false, false, "", "جى")}, + {0xfd02, 0, 0, 0, g(Yes, No, false, false, "", "جي")}, + {0xfd03, 0, 0, 0, g(Yes, No, false, false, "", "خى")}, + {0xfd04, 0, 0, 0, g(Yes, No, false, false, "", "خي")}, + {0xfd05, 0, 0, 0, g(Yes, No, false, false, "", "صى")}, + {0xfd06, 0, 0, 0, g(Yes, No, false, false, "", "صي")}, + {0xfd07, 0, 0, 0, g(Yes, No, false, false, "", "ضى")}, + {0xfd08, 0, 0, 0, g(Yes, No, false, false, "", "ضي")}, + {0xfd09, 0, 0, 0, g(Yes, No, false, false, "", "شج")}, + {0xfd0a, 0, 0, 0, g(Yes, No, false, false, "", "شح")}, + {0xfd0b, 0, 0, 0, g(Yes, No, false, false, "", "شخ")}, + {0xfd0c, 0, 0, 0, g(Yes, No, false, false, "", "شم")}, + {0xfd0d, 0, 0, 0, g(Yes, No, false, false, "", "شر")}, + {0xfd0e, 0, 0, 0, g(Yes, No, false, false, "", "سر")}, + {0xfd0f, 0, 0, 0, g(Yes, No, false, false, "", "صر")}, + {0xfd10, 0, 0, 0, g(Yes, No, false, false, "", "ضر")}, + {0xfd11, 0, 0, 0, g(Yes, No, false, false, "", "طى")}, + {0xfd12, 0, 0, 0, g(Yes, No, false, false, "", "طي")}, + {0xfd13, 0, 0, 0, g(Yes, No, false, false, "", "عى")}, + {0xfd14, 0, 0, 0, g(Yes, No, false, false, "", "عي")}, + {0xfd15, 0, 0, 0, g(Yes, No, false, false, "", "غى")}, + {0xfd16, 0, 0, 0, g(Yes, No, false, false, "", "غي")}, + {0xfd17, 0, 0, 0, g(Yes, No, false, false, "", "سى")}, + {0xfd18, 0, 0, 0, g(Yes, No, false, false, "", "سي")}, + {0xfd19, 0, 0, 0, g(Yes, No, false, false, "", "شى")}, + {0xfd1a, 0, 0, 0, g(Yes, No, false, false, "", "شي")}, + {0xfd1b, 0, 0, 0, g(Yes, No, false, false, "", "حى")}, + {0xfd1c, 0, 0, 0, g(Yes, No, false, false, "", "حي")}, + {0xfd1d, 0, 0, 0, g(Yes, No, false, false, "", "جى")}, + {0xfd1e, 0, 0, 0, g(Yes, No, false, false, "", "جي")}, + {0xfd1f, 0, 0, 0, g(Yes, No, false, false, "", "خى")}, + {0xfd20, 0, 0, 0, g(Yes, No, false, false, "", "خي")}, + {0xfd21, 0, 0, 0, g(Yes, No, false, false, "", "صى")}, + {0xfd22, 0, 0, 0, g(Yes, No, false, false, "", "صي")}, + {0xfd23, 0, 0, 0, g(Yes, No, false, false, "", "ضى")}, + {0xfd24, 0, 0, 0, g(Yes, No, false, false, "", "ضي")}, + {0xfd25, 0, 0, 0, g(Yes, No, false, false, "", "شج")}, + {0xfd26, 0, 0, 0, g(Yes, No, false, false, "", "شح")}, + {0xfd27, 0, 0, 0, g(Yes, No, false, false, "", "شخ")}, + {0xfd28, 0, 0, 0, g(Yes, No, false, false, "", "شم")}, + {0xfd29, 0, 0, 0, g(Yes, No, false, false, "", "شر")}, + {0xfd2a, 0, 0, 0, g(Yes, No, false, false, "", "سر")}, + {0xfd2b, 0, 0, 0, g(Yes, No, false, false, "", "صر")}, + {0xfd2c, 0, 0, 0, g(Yes, No, false, false, "", "ضر")}, + {0xfd2d, 0, 0, 0, g(Yes, No, false, false, "", "شج")}, + {0xfd2e, 0, 0, 0, g(Yes, No, false, false, "", "شح")}, + {0xfd2f, 0, 0, 0, g(Yes, No, false, false, "", "شخ")}, + {0xfd30, 0, 0, 0, g(Yes, No, false, false, "", "شم")}, + {0xfd31, 0, 0, 0, g(Yes, No, false, false, "", "سه")}, + {0xfd32, 0, 0, 0, g(Yes, No, false, false, "", "شه")}, + {0xfd33, 0, 0, 0, g(Yes, No, false, false, "", "طم")}, + {0xfd34, 0, 0, 0, g(Yes, No, false, false, "", "سج")}, + {0xfd35, 0, 0, 0, g(Yes, No, false, false, "", "سح")}, + {0xfd36, 0, 0, 0, g(Yes, No, false, false, "", "سخ")}, + {0xfd37, 0, 0, 0, g(Yes, No, false, false, "", "شج")}, + {0xfd38, 0, 0, 0, g(Yes, No, false, false, "", "شح")}, + {0xfd39, 0, 0, 0, g(Yes, No, false, false, "", "شخ")}, + {0xfd3a, 0, 0, 0, g(Yes, No, false, false, "", "طم")}, + {0xfd3b, 0, 0, 0, g(Yes, No, false, false, "", "ظم")}, + {0xfd3c, 0, 0, 1, g(Yes, No, false, false, "", "اً")}, + {0xfd3e, 0, 0, 0, f(Yes, false, "")}, + {0xfd50, 0, 0, 0, g(Yes, No, false, false, "", "تجم")}, + {0xfd51, 0, 0, 0, g(Yes, No, false, false, "", "تحج")}, + {0xfd53, 0, 0, 0, g(Yes, No, false, false, "", "تحم")}, + {0xfd54, 0, 0, 0, g(Yes, No, false, false, "", "تخم")}, + {0xfd55, 0, 0, 0, g(Yes, No, false, false, "", "تمج")}, + {0xfd56, 0, 0, 0, g(Yes, No, false, false, "", "تمح")}, + {0xfd57, 0, 0, 0, g(Yes, No, false, false, "", "تمخ")}, + {0xfd58, 0, 0, 0, g(Yes, No, false, false, "", "جمح")}, + {0xfd5a, 0, 0, 0, g(Yes, No, false, false, "", "حمي")}, + {0xfd5b, 0, 0, 0, g(Yes, No, false, false, "", "حمى")}, + {0xfd5c, 0, 0, 0, g(Yes, No, false, false, "", "سحج")}, + {0xfd5d, 0, 0, 0, g(Yes, No, false, false, "", "سجح")}, + {0xfd5e, 0, 0, 0, g(Yes, No, false, false, "", "سجى")}, + {0xfd5f, 0, 0, 0, g(Yes, No, false, false, "", "سمح")}, + {0xfd61, 0, 0, 0, g(Yes, No, false, false, "", "سمج")}, + {0xfd62, 0, 0, 0, g(Yes, No, false, false, "", "سمم")}, + {0xfd64, 0, 0, 0, g(Yes, No, false, false, "", "صحح")}, + {0xfd66, 0, 0, 0, g(Yes, No, false, false, "", "صمم")}, + {0xfd67, 0, 0, 0, g(Yes, No, false, false, "", "شحم")}, + {0xfd69, 0, 0, 0, g(Yes, No, false, false, "", "شجي")}, + {0xfd6a, 0, 0, 0, g(Yes, No, false, false, "", "شمخ")}, + {0xfd6c, 0, 0, 0, g(Yes, No, false, false, "", "شمم")}, + {0xfd6e, 0, 0, 0, g(Yes, No, false, false, "", "ضحى")}, + {0xfd6f, 0, 0, 0, g(Yes, No, false, false, "", "ضخم")}, + {0xfd71, 0, 0, 0, g(Yes, No, false, false, "", "طمح")}, + {0xfd73, 0, 0, 0, g(Yes, No, false, false, "", "طمم")}, + {0xfd74, 0, 0, 0, g(Yes, No, false, false, "", "طمي")}, + {0xfd75, 0, 0, 0, g(Yes, No, false, false, "", "عجم")}, + {0xfd76, 0, 0, 0, g(Yes, No, false, false, "", "عمم")}, + {0xfd78, 0, 0, 0, g(Yes, No, false, false, "", "عمى")}, + {0xfd79, 0, 0, 0, g(Yes, No, false, false, "", "غمم")}, + {0xfd7a, 0, 0, 0, g(Yes, No, false, false, "", "غمي")}, + {0xfd7b, 0, 0, 0, g(Yes, No, false, false, "", "غمى")}, + {0xfd7c, 0, 0, 0, g(Yes, No, false, false, "", "فخم")}, + {0xfd7e, 0, 0, 0, g(Yes, No, false, false, "", "قمح")}, + {0xfd7f, 0, 0, 0, g(Yes, No, false, false, "", "قمم")}, + {0xfd80, 0, 0, 0, g(Yes, No, false, false, "", "لحم")}, + {0xfd81, 0, 0, 0, g(Yes, No, false, false, "", "لحي")}, + {0xfd82, 0, 0, 0, g(Yes, No, false, false, "", "لحى")}, + {0xfd83, 0, 0, 0, g(Yes, No, false, false, "", "لجج")}, + {0xfd85, 0, 0, 0, g(Yes, No, false, false, "", "لخم")}, + {0xfd87, 0, 0, 0, g(Yes, No, false, false, "", "لمح")}, + {0xfd89, 0, 0, 0, g(Yes, No, false, false, "", "محج")}, + {0xfd8a, 0, 0, 0, g(Yes, No, false, false, "", "محم")}, + {0xfd8b, 0, 0, 0, g(Yes, No, false, false, "", "محي")}, + {0xfd8c, 0, 0, 0, g(Yes, No, false, false, "", "مجح")}, + {0xfd8d, 0, 0, 0, g(Yes, No, false, false, "", "مجم")}, + {0xfd8e, 0, 0, 0, g(Yes, No, false, false, "", "مخج")}, + {0xfd8f, 0, 0, 0, g(Yes, No, false, false, "", "مخم")}, + {0xfd90, 0, 0, 0, f(Yes, false, "")}, + {0xfd92, 0, 0, 0, g(Yes, No, false, false, "", "مجخ")}, + {0xfd93, 0, 0, 0, g(Yes, No, false, false, "", "همج")}, + {0xfd94, 0, 0, 0, g(Yes, No, false, false, "", "همم")}, + {0xfd95, 0, 0, 0, g(Yes, No, false, false, "", "نحم")}, + {0xfd96, 0, 0, 0, g(Yes, No, false, false, "", "نحى")}, + {0xfd97, 0, 0, 0, g(Yes, No, false, false, "", "نجم")}, + {0xfd99, 0, 0, 0, g(Yes, No, false, false, "", "نجى")}, + {0xfd9a, 0, 0, 0, g(Yes, No, false, false, "", "نمي")}, + {0xfd9b, 0, 0, 0, g(Yes, No, false, false, "", "نمى")}, + {0xfd9c, 0, 0, 0, g(Yes, No, false, false, "", "يمم")}, + {0xfd9e, 0, 0, 0, g(Yes, No, false, false, "", "بخي")}, + {0xfd9f, 0, 0, 0, g(Yes, No, false, false, "", "تجي")}, + {0xfda0, 0, 0, 0, g(Yes, No, false, false, "", "تجى")}, + {0xfda1, 0, 0, 0, g(Yes, No, false, false, "", "تخي")}, + {0xfda2, 0, 0, 0, g(Yes, No, false, false, "", "تخى")}, + {0xfda3, 0, 0, 0, g(Yes, No, false, false, "", "تمي")}, + {0xfda4, 0, 0, 0, g(Yes, No, false, false, "", "تمى")}, + {0xfda5, 0, 0, 0, g(Yes, No, false, false, "", "جمي")}, + {0xfda6, 0, 0, 0, g(Yes, No, false, false, "", "جحى")}, + {0xfda7, 0, 0, 0, g(Yes, No, false, false, "", "جمى")}, + {0xfda8, 0, 0, 0, g(Yes, No, false, false, "", "سخى")}, + {0xfda9, 0, 0, 0, g(Yes, No, false, false, "", "صحي")}, + {0xfdaa, 0, 0, 0, g(Yes, No, false, false, "", "شحي")}, + {0xfdab, 0, 0, 0, g(Yes, No, false, false, "", "ضحي")}, + {0xfdac, 0, 0, 0, g(Yes, No, false, false, "", "لجي")}, + {0xfdad, 0, 0, 0, g(Yes, No, false, false, "", "لمي")}, + {0xfdae, 0, 0, 0, g(Yes, No, false, false, "", "يحي")}, + {0xfdaf, 0, 0, 0, g(Yes, No, false, false, "", "يجي")}, + {0xfdb0, 0, 0, 0, g(Yes, No, false, false, "", "يمي")}, + {0xfdb1, 0, 0, 0, g(Yes, No, false, false, "", "ممي")}, + {0xfdb2, 0, 0, 0, g(Yes, No, false, false, "", "قمي")}, + {0xfdb3, 0, 0, 0, g(Yes, No, false, false, "", "نحي")}, + {0xfdb4, 0, 0, 0, g(Yes, No, false, false, "", "قمح")}, + {0xfdb5, 0, 0, 0, g(Yes, No, false, false, "", "لحم")}, + {0xfdb6, 0, 0, 0, g(Yes, No, false, false, "", "عمي")}, + {0xfdb7, 0, 0, 0, g(Yes, No, false, false, "", "كمي")}, + {0xfdb8, 0, 0, 0, g(Yes, No, false, false, "", "نجح")}, + {0xfdb9, 0, 0, 0, g(Yes, No, false, false, "", "مخي")}, + {0xfdba, 0, 0, 0, g(Yes, No, false, false, "", "لجم")}, + {0xfdbb, 0, 0, 0, g(Yes, No, false, false, "", "كمم")}, + {0xfdbc, 0, 0, 0, g(Yes, No, false, false, "", "لجم")}, + {0xfdbd, 0, 0, 0, g(Yes, No, false, false, "", "نجح")}, + {0xfdbe, 0, 0, 0, g(Yes, No, false, false, "", "جحي")}, + {0xfdbf, 0, 0, 0, g(Yes, No, false, false, "", "حجي")}, + {0xfdc0, 0, 0, 0, g(Yes, No, false, false, "", "مجي")}, + {0xfdc1, 0, 0, 0, g(Yes, No, false, false, "", "فمي")}, + {0xfdc2, 0, 0, 0, g(Yes, No, false, false, "", "بحي")}, + {0xfdc3, 0, 0, 0, g(Yes, No, false, false, "", "كمم")}, + {0xfdc4, 0, 0, 0, g(Yes, No, false, false, "", "عجم")}, + {0xfdc5, 0, 0, 0, g(Yes, No, false, false, "", "صمم")}, + {0xfdc6, 0, 0, 0, g(Yes, No, false, false, "", "سخي")}, + {0xfdc7, 0, 0, 0, g(Yes, No, false, false, "", "نجي")}, + {0xfdc8, 0, 0, 0, f(Yes, false, "")}, + {0xfdf0, 0, 0, 0, g(Yes, No, false, false, "", "صلے")}, + {0xfdf1, 0, 0, 0, g(Yes, No, false, false, "", "قلے")}, + {0xfdf2, 0, 0, 0, g(Yes, No, false, false, "", "الله")}, + {0xfdf3, 0, 0, 0, g(Yes, No, false, false, "", "اكبر")}, + {0xfdf4, 0, 0, 0, g(Yes, No, false, false, "", "محمد")}, + {0xfdf5, 0, 0, 0, g(Yes, No, false, false, "", "صلعم")}, + {0xfdf6, 0, 0, 0, g(Yes, No, false, false, "", "رسول")}, + {0xfdf7, 0, 0, 0, g(Yes, No, false, false, "", "عليه")}, + {0xfdf8, 0, 0, 0, g(Yes, No, false, false, "", "وسلم")}, + {0xfdf9, 0, 0, 0, g(Yes, No, false, false, "", "صلى")}, + {0xfdfa, 0, 0, 0, g(Yes, No, false, false, "", "صلى الله عليه وسلم")}, + {0xfdfb, 0, 0, 0, g(Yes, No, false, false, "", "جل جلاله")}, + {0xfdfc, 0, 0, 0, g(Yes, No, false, false, "", "ریال")}, + {0xfdfd, 0, 0, 0, f(Yes, false, "")}, + {0xfe10, 0, 0, 0, g(Yes, No, false, false, "", ",")}, + {0xfe11, 0, 0, 0, g(Yes, No, false, false, "", "、")}, + {0xfe12, 0, 0, 0, g(Yes, No, false, false, "", "。")}, + {0xfe13, 0, 0, 0, g(Yes, No, false, false, "", ":")}, + {0xfe14, 0, 0, 0, g(Yes, No, false, false, "", ";")}, + {0xfe15, 0, 0, 0, g(Yes, No, false, false, "", "!")}, + {0xfe16, 0, 0, 0, g(Yes, No, false, false, "", "?")}, + {0xfe17, 0, 0, 0, g(Yes, No, false, false, "", "〖")}, + {0xfe18, 0, 0, 0, g(Yes, No, false, false, "", "〗")}, + {0xfe19, 0, 0, 0, g(Yes, No, false, false, "", "...")}, + {0xfe1a, 0, 0, 0, f(Yes, false, "")}, + {0xfe20, 230, 1, 1, f(Yes, false, "")}, + {0xfe27, 220, 1, 1, f(Yes, false, "")}, + {0xfe2e, 230, 1, 1, f(Yes, false, "")}, + {0xfe30, 0, 0, 0, g(Yes, No, false, false, "", "..")}, + {0xfe31, 0, 0, 0, g(Yes, No, false, false, "", "—")}, + {0xfe32, 0, 0, 0, g(Yes, No, false, false, "", "–")}, + {0xfe33, 0, 0, 0, g(Yes, No, false, false, "", "_")}, + {0xfe35, 0, 0, 0, g(Yes, No, false, false, "", "(")}, + {0xfe36, 0, 0, 0, g(Yes, No, false, false, "", ")")}, + {0xfe37, 0, 0, 0, g(Yes, No, false, false, "", "{")}, + {0xfe38, 0, 0, 0, g(Yes, No, false, false, "", "}")}, + {0xfe39, 0, 0, 0, g(Yes, No, false, false, "", "〔")}, + {0xfe3a, 0, 0, 0, g(Yes, No, false, false, "", "〕")}, + {0xfe3b, 0, 0, 0, g(Yes, No, false, false, "", "【")}, + {0xfe3c, 0, 0, 0, g(Yes, No, false, false, "", "】")}, + {0xfe3d, 0, 0, 0, g(Yes, No, false, false, "", "《")}, + {0xfe3e, 0, 0, 0, g(Yes, No, false, false, "", "》")}, + {0xfe3f, 0, 0, 0, g(Yes, No, false, false, "", "〈")}, + {0xfe40, 0, 0, 0, g(Yes, No, false, false, "", "〉")}, + {0xfe41, 0, 0, 0, g(Yes, No, false, false, "", "「")}, + {0xfe42, 0, 0, 0, g(Yes, No, false, false, "", "」")}, + {0xfe43, 0, 0, 0, g(Yes, No, false, false, "", "『")}, + {0xfe44, 0, 0, 0, g(Yes, No, false, false, "", "』")}, + {0xfe45, 0, 0, 0, f(Yes, false, "")}, + {0xfe47, 0, 0, 0, g(Yes, No, false, false, "", "[")}, + {0xfe48, 0, 0, 0, g(Yes, No, false, false, "", "]")}, + {0xfe49, 0, 0, 1, g(Yes, No, false, false, "", " ̅")}, + {0xfe4d, 0, 0, 0, g(Yes, No, false, false, "", "_")}, + {0xfe50, 0, 0, 0, g(Yes, No, false, false, "", ",")}, + {0xfe51, 0, 0, 0, g(Yes, No, false, false, "", "、")}, + {0xfe52, 0, 0, 0, g(Yes, No, false, false, "", ".")}, + {0xfe53, 0, 0, 0, f(Yes, false, "")}, + {0xfe54, 0, 0, 0, g(Yes, No, false, false, "", ";")}, + {0xfe55, 0, 0, 0, g(Yes, No, false, false, "", ":")}, + {0xfe56, 0, 0, 0, g(Yes, No, false, false, "", "?")}, + {0xfe57, 0, 0, 0, g(Yes, No, false, false, "", "!")}, + {0xfe58, 0, 0, 0, g(Yes, No, false, false, "", "—")}, + {0xfe59, 0, 0, 0, g(Yes, No, false, false, "", "(")}, + {0xfe5a, 0, 0, 0, g(Yes, No, false, false, "", ")")}, + {0xfe5b, 0, 0, 0, g(Yes, No, false, false, "", "{")}, + {0xfe5c, 0, 0, 0, g(Yes, No, false, false, "", "}")}, + {0xfe5d, 0, 0, 0, g(Yes, No, false, false, "", "〔")}, + {0xfe5e, 0, 0, 0, g(Yes, No, false, false, "", "〕")}, + {0xfe5f, 0, 0, 0, g(Yes, No, false, false, "", "#")}, + {0xfe60, 0, 0, 0, g(Yes, No, false, false, "", "&")}, + {0xfe61, 0, 0, 0, g(Yes, No, false, false, "", "*")}, + {0xfe62, 0, 0, 0, g(Yes, No, false, false, "", "+")}, + {0xfe63, 0, 0, 0, g(Yes, No, false, false, "", "-")}, + {0xfe64, 0, 0, 0, g(Yes, No, false, false, "", "<")}, + {0xfe65, 0, 0, 0, g(Yes, No, false, false, "", ">")}, + {0xfe66, 0, 0, 0, g(Yes, No, false, false, "", "=")}, + {0xfe67, 0, 0, 0, f(Yes, false, "")}, + {0xfe68, 0, 0, 0, g(Yes, No, false, false, "", "\\")}, + {0xfe69, 0, 0, 0, g(Yes, No, false, false, "", "$")}, + {0xfe6a, 0, 0, 0, g(Yes, No, false, false, "", "%")}, + {0xfe6b, 0, 0, 0, g(Yes, No, false, false, "", "@")}, + {0xfe6c, 0, 0, 0, f(Yes, false, "")}, + {0xfe70, 0, 0, 1, g(Yes, No, false, false, "", " ً")}, + {0xfe71, 0, 0, 1, g(Yes, No, false, false, "", "ـً")}, + {0xfe72, 0, 0, 1, g(Yes, No, false, false, "", " ٌ")}, + {0xfe73, 0, 0, 0, f(Yes, false, "")}, + {0xfe74, 0, 0, 1, g(Yes, No, false, false, "", " ٍ")}, + {0xfe75, 0, 0, 0, f(Yes, false, "")}, + {0xfe76, 0, 0, 1, g(Yes, No, false, false, "", " َ")}, + {0xfe77, 0, 0, 1, g(Yes, No, false, false, "", "ـَ")}, + {0xfe78, 0, 0, 1, g(Yes, No, false, false, "", " ُ")}, + {0xfe79, 0, 0, 1, g(Yes, No, false, false, "", "ـُ")}, + {0xfe7a, 0, 0, 1, g(Yes, No, false, false, "", " ِ")}, + {0xfe7b, 0, 0, 1, g(Yes, No, false, false, "", "ـِ")}, + {0xfe7c, 0, 0, 1, g(Yes, No, false, false, "", " ّ")}, + {0xfe7d, 0, 0, 1, g(Yes, No, false, false, "", "ـّ")}, + {0xfe7e, 0, 0, 1, g(Yes, No, false, false, "", " ْ")}, + {0xfe7f, 0, 0, 1, g(Yes, No, false, false, "", "ـْ")}, + {0xfe80, 0, 0, 0, g(Yes, No, false, false, "", "ء")}, + {0xfe81, 0, 0, 1, g(Yes, No, false, false, "", "آ")}, + {0xfe83, 0, 0, 1, g(Yes, No, false, false, "", "أ")}, + {0xfe85, 0, 0, 1, g(Yes, No, false, false, "", "ؤ")}, + {0xfe87, 0, 0, 1, g(Yes, No, false, false, "", "إ")}, + {0xfe89, 0, 0, 1, g(Yes, No, false, false, "", "ئ")}, + {0xfe8d, 0, 0, 0, g(Yes, No, false, false, "", "ا")}, + {0xfe8f, 0, 0, 0, g(Yes, No, false, false, "", "ب")}, + {0xfe93, 0, 0, 0, g(Yes, No, false, false, "", "ة")}, + {0xfe95, 0, 0, 0, g(Yes, No, false, false, "", "ت")}, + {0xfe99, 0, 0, 0, g(Yes, No, false, false, "", "ث")}, + {0xfe9d, 0, 0, 0, g(Yes, No, false, false, "", "ج")}, + {0xfea1, 0, 0, 0, g(Yes, No, false, false, "", "ح")}, + {0xfea5, 0, 0, 0, g(Yes, No, false, false, "", "خ")}, + {0xfea9, 0, 0, 0, g(Yes, No, false, false, "", "د")}, + {0xfeab, 0, 0, 0, g(Yes, No, false, false, "", "ذ")}, + {0xfead, 0, 0, 0, g(Yes, No, false, false, "", "ر")}, + {0xfeaf, 0, 0, 0, g(Yes, No, false, false, "", "ز")}, + {0xfeb1, 0, 0, 0, g(Yes, No, false, false, "", "س")}, + {0xfeb5, 0, 0, 0, g(Yes, No, false, false, "", "ش")}, + {0xfeb9, 0, 0, 0, g(Yes, No, false, false, "", "ص")}, + {0xfebd, 0, 0, 0, g(Yes, No, false, false, "", "ض")}, + {0xfec1, 0, 0, 0, g(Yes, No, false, false, "", "ط")}, + {0xfec5, 0, 0, 0, g(Yes, No, false, false, "", "ظ")}, + {0xfec9, 0, 0, 0, g(Yes, No, false, false, "", "ع")}, + {0xfecd, 0, 0, 0, g(Yes, No, false, false, "", "غ")}, + {0xfed1, 0, 0, 0, g(Yes, No, false, false, "", "ف")}, + {0xfed5, 0, 0, 0, g(Yes, No, false, false, "", "ق")}, + {0xfed9, 0, 0, 0, g(Yes, No, false, false, "", "ك")}, + {0xfedd, 0, 0, 0, g(Yes, No, false, false, "", "ل")}, + {0xfee1, 0, 0, 0, g(Yes, No, false, false, "", "م")}, + {0xfee5, 0, 0, 0, g(Yes, No, false, false, "", "ن")}, + {0xfee9, 0, 0, 0, g(Yes, No, false, false, "", "ه")}, + {0xfeed, 0, 0, 0, g(Yes, No, false, false, "", "و")}, + {0xfeef, 0, 0, 0, g(Yes, No, false, false, "", "ى")}, + {0xfef1, 0, 0, 0, g(Yes, No, false, false, "", "ي")}, + {0xfef5, 0, 0, 1, g(Yes, No, false, false, "", "لآ")}, + {0xfef7, 0, 0, 1, g(Yes, No, false, false, "", "لأ")}, + {0xfef9, 0, 0, 1, g(Yes, No, false, false, "", "لإ")}, + {0xfefb, 0, 0, 0, g(Yes, No, false, false, "", "لا")}, + {0xfefd, 0, 0, 0, f(Yes, false, "")}, + {0xff01, 0, 0, 0, g(Yes, No, false, false, "", "!")}, + {0xff02, 0, 0, 0, g(Yes, No, false, false, "", "\"")}, + {0xff03, 0, 0, 0, g(Yes, No, false, false, "", "#")}, + {0xff04, 0, 0, 0, g(Yes, No, false, false, "", "$")}, + {0xff05, 0, 0, 0, g(Yes, No, false, false, "", "%")}, + {0xff06, 0, 0, 0, g(Yes, No, false, false, "", "&")}, + {0xff07, 0, 0, 0, g(Yes, No, false, false, "", "'")}, + {0xff08, 0, 0, 0, g(Yes, No, false, false, "", "(")}, + {0xff09, 0, 0, 0, g(Yes, No, false, false, "", ")")}, + {0xff0a, 0, 0, 0, g(Yes, No, false, false, "", "*")}, + {0xff0b, 0, 0, 0, g(Yes, No, false, false, "", "+")}, + {0xff0c, 0, 0, 0, g(Yes, No, false, false, "", ",")}, + {0xff0d, 0, 0, 0, g(Yes, No, false, false, "", "-")}, + {0xff0e, 0, 0, 0, g(Yes, No, false, false, "", ".")}, + {0xff0f, 0, 0, 0, g(Yes, No, false, false, "", "/")}, + {0xff10, 0, 0, 0, g(Yes, No, false, false, "", "0")}, + {0xff11, 0, 0, 0, g(Yes, No, false, false, "", "1")}, + {0xff12, 0, 0, 0, g(Yes, No, false, false, "", "2")}, + {0xff13, 0, 0, 0, g(Yes, No, false, false, "", "3")}, + {0xff14, 0, 0, 0, g(Yes, No, false, false, "", "4")}, + {0xff15, 0, 0, 0, g(Yes, No, false, false, "", "5")}, + {0xff16, 0, 0, 0, g(Yes, No, false, false, "", "6")}, + {0xff17, 0, 0, 0, g(Yes, No, false, false, "", "7")}, + {0xff18, 0, 0, 0, g(Yes, No, false, false, "", "8")}, + {0xff19, 0, 0, 0, g(Yes, No, false, false, "", "9")}, + {0xff1a, 0, 0, 0, g(Yes, No, false, false, "", ":")}, + {0xff1b, 0, 0, 0, g(Yes, No, false, false, "", ";")}, + {0xff1c, 0, 0, 0, g(Yes, No, false, false, "", "<")}, + {0xff1d, 0, 0, 0, g(Yes, No, false, false, "", "=")}, + {0xff1e, 0, 0, 0, g(Yes, No, false, false, "", ">")}, + {0xff1f, 0, 0, 0, g(Yes, No, false, false, "", "?")}, + {0xff20, 0, 0, 0, g(Yes, No, false, false, "", "@")}, + {0xff21, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0xff22, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0xff23, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0xff24, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0xff25, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0xff26, 0, 0, 0, g(Yes, No, false, false, "", "F")}, + {0xff27, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0xff28, 0, 0, 0, g(Yes, No, false, false, "", "H")}, + {0xff29, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0xff2a, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0xff2b, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0xff2c, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0xff2d, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0xff2e, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0xff2f, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0xff30, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0xff31, 0, 0, 0, g(Yes, No, false, false, "", "Q")}, + {0xff32, 0, 0, 0, g(Yes, No, false, false, "", "R")}, + {0xff33, 0, 0, 0, g(Yes, No, false, false, "", "S")}, + {0xff34, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0xff35, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0xff36, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0xff37, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0xff38, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0xff39, 0, 0, 0, g(Yes, No, false, false, "", "Y")}, + {0xff3a, 0, 0, 0, g(Yes, No, false, false, "", "Z")}, + {0xff3b, 0, 0, 0, g(Yes, No, false, false, "", "[")}, + {0xff3c, 0, 0, 0, g(Yes, No, false, false, "", "\\")}, + {0xff3d, 0, 0, 0, g(Yes, No, false, false, "", "]")}, + {0xff3e, 0, 0, 0, g(Yes, No, false, false, "", "^")}, + {0xff3f, 0, 0, 0, g(Yes, No, false, false, "", "_")}, + {0xff40, 0, 0, 0, g(Yes, No, false, false, "", "`")}, + {0xff41, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0xff42, 0, 0, 0, g(Yes, No, false, false, "", "b")}, + {0xff43, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0xff44, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0xff45, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0xff46, 0, 0, 0, g(Yes, No, false, false, "", "f")}, + {0xff47, 0, 0, 0, g(Yes, No, false, false, "", "g")}, + {0xff48, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0xff49, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0xff4a, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0xff4b, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0xff4c, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0xff4d, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0xff4e, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0xff4f, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0xff50, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0xff51, 0, 0, 0, g(Yes, No, false, false, "", "q")}, + {0xff52, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0xff53, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0xff54, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0xff55, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0xff56, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0xff57, 0, 0, 0, g(Yes, No, false, false, "", "w")}, + {0xff58, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0xff59, 0, 0, 0, g(Yes, No, false, false, "", "y")}, + {0xff5a, 0, 0, 0, g(Yes, No, false, false, "", "z")}, + {0xff5b, 0, 0, 0, g(Yes, No, false, false, "", "{")}, + {0xff5c, 0, 0, 0, g(Yes, No, false, false, "", "|")}, + {0xff5d, 0, 0, 0, g(Yes, No, false, false, "", "}")}, + {0xff5e, 0, 0, 0, g(Yes, No, false, false, "", "~")}, + {0xff5f, 0, 0, 0, g(Yes, No, false, false, "", "⦅")}, + {0xff60, 0, 0, 0, g(Yes, No, false, false, "", "⦆")}, + {0xff61, 0, 0, 0, g(Yes, No, false, false, "", "。")}, + {0xff62, 0, 0, 0, g(Yes, No, false, false, "", "「")}, + {0xff63, 0, 0, 0, g(Yes, No, false, false, "", "」")}, + {0xff64, 0, 0, 0, g(Yes, No, false, false, "", "、")}, + {0xff65, 0, 0, 0, g(Yes, No, false, false, "", "・")}, + {0xff66, 0, 0, 0, g(Yes, No, false, false, "", "ヲ")}, + {0xff67, 0, 0, 0, g(Yes, No, false, false, "", "ァ")}, + {0xff68, 0, 0, 0, g(Yes, No, false, false, "", "ィ")}, + {0xff69, 0, 0, 0, g(Yes, No, false, false, "", "ゥ")}, + {0xff6a, 0, 0, 0, g(Yes, No, false, false, "", "ェ")}, + {0xff6b, 0, 0, 0, g(Yes, No, false, false, "", "ォ")}, + {0xff6c, 0, 0, 0, g(Yes, No, false, false, "", "ャ")}, + {0xff6d, 0, 0, 0, g(Yes, No, false, false, "", "ュ")}, + {0xff6e, 0, 0, 0, g(Yes, No, false, false, "", "ョ")}, + {0xff6f, 0, 0, 0, g(Yes, No, false, false, "", "ッ")}, + {0xff70, 0, 0, 0, g(Yes, No, false, false, "", "ー")}, + {0xff71, 0, 0, 0, g(Yes, No, false, false, "", "ア")}, + {0xff72, 0, 0, 0, g(Yes, No, false, false, "", "イ")}, + {0xff73, 0, 0, 0, g(Yes, No, false, false, "", "ウ")}, + {0xff74, 0, 0, 0, g(Yes, No, false, false, "", "エ")}, + {0xff75, 0, 0, 0, g(Yes, No, false, false, "", "オ")}, + {0xff76, 0, 0, 0, g(Yes, No, false, false, "", "カ")}, + {0xff77, 0, 0, 0, g(Yes, No, false, false, "", "キ")}, + {0xff78, 0, 0, 0, g(Yes, No, false, false, "", "ク")}, + {0xff79, 0, 0, 0, g(Yes, No, false, false, "", "ケ")}, + {0xff7a, 0, 0, 0, g(Yes, No, false, false, "", "コ")}, + {0xff7b, 0, 0, 0, g(Yes, No, false, false, "", "サ")}, + {0xff7c, 0, 0, 0, g(Yes, No, false, false, "", "シ")}, + {0xff7d, 0, 0, 0, g(Yes, No, false, false, "", "ス")}, + {0xff7e, 0, 0, 0, g(Yes, No, false, false, "", "セ")}, + {0xff7f, 0, 0, 0, g(Yes, No, false, false, "", "ソ")}, + {0xff80, 0, 0, 0, g(Yes, No, false, false, "", "タ")}, + {0xff81, 0, 0, 0, g(Yes, No, false, false, "", "チ")}, + {0xff82, 0, 0, 0, g(Yes, No, false, false, "", "ツ")}, + {0xff83, 0, 0, 0, g(Yes, No, false, false, "", "テ")}, + {0xff84, 0, 0, 0, g(Yes, No, false, false, "", "ト")}, + {0xff85, 0, 0, 0, g(Yes, No, false, false, "", "ナ")}, + {0xff86, 0, 0, 0, g(Yes, No, false, false, "", "ニ")}, + {0xff87, 0, 0, 0, g(Yes, No, false, false, "", "ヌ")}, + {0xff88, 0, 0, 0, g(Yes, No, false, false, "", "ネ")}, + {0xff89, 0, 0, 0, g(Yes, No, false, false, "", "ノ")}, + {0xff8a, 0, 0, 0, g(Yes, No, false, false, "", "ハ")}, + {0xff8b, 0, 0, 0, g(Yes, No, false, false, "", "ヒ")}, + {0xff8c, 0, 0, 0, g(Yes, No, false, false, "", "フ")}, + {0xff8d, 0, 0, 0, g(Yes, No, false, false, "", "ヘ")}, + {0xff8e, 0, 0, 0, g(Yes, No, false, false, "", "ホ")}, + {0xff8f, 0, 0, 0, g(Yes, No, false, false, "", "マ")}, + {0xff90, 0, 0, 0, g(Yes, No, false, false, "", "ミ")}, + {0xff91, 0, 0, 0, g(Yes, No, false, false, "", "ム")}, + {0xff92, 0, 0, 0, g(Yes, No, false, false, "", "メ")}, + {0xff93, 0, 0, 0, g(Yes, No, false, false, "", "モ")}, + {0xff94, 0, 0, 0, g(Yes, No, false, false, "", "ヤ")}, + {0xff95, 0, 0, 0, g(Yes, No, false, false, "", "ユ")}, + {0xff96, 0, 0, 0, g(Yes, No, false, false, "", "ヨ")}, + {0xff97, 0, 0, 0, g(Yes, No, false, false, "", "ラ")}, + {0xff98, 0, 0, 0, g(Yes, No, false, false, "", "リ")}, + {0xff99, 0, 0, 0, g(Yes, No, false, false, "", "ル")}, + {0xff9a, 0, 0, 0, g(Yes, No, false, false, "", "レ")}, + {0xff9b, 0, 0, 0, g(Yes, No, false, false, "", "ロ")}, + {0xff9c, 0, 0, 0, g(Yes, No, false, false, "", "ワ")}, + {0xff9d, 0, 0, 0, g(Yes, No, false, false, "", "ン")}, + {0xff9e, 0, 1, 1, g(Yes, No, false, false, "", "゙")}, + {0xff9f, 0, 1, 1, g(Yes, No, false, false, "", "゚")}, + {0xffa0, 0, 0, 0, g(Yes, No, false, false, "", "ᅠ")}, + {0xffa1, 0, 0, 0, g(Yes, No, false, false, "", "ᄀ")}, + {0xffa2, 0, 0, 0, g(Yes, No, false, false, "", "ᄁ")}, + {0xffa3, 0, 1, 1, g(Yes, No, false, false, "", "ᆪ")}, + {0xffa4, 0, 0, 0, g(Yes, No, false, false, "", "ᄂ")}, + {0xffa5, 0, 1, 1, g(Yes, No, false, false, "", "ᆬ")}, + {0xffa6, 0, 1, 1, g(Yes, No, false, false, "", "ᆭ")}, + {0xffa7, 0, 0, 0, g(Yes, No, false, false, "", "ᄃ")}, + {0xffa8, 0, 0, 0, g(Yes, No, false, false, "", "ᄄ")}, + {0xffa9, 0, 0, 0, g(Yes, No, false, false, "", "ᄅ")}, + {0xffaa, 0, 1, 1, g(Yes, No, false, false, "", "ᆰ")}, + {0xffab, 0, 1, 1, g(Yes, No, false, false, "", "ᆱ")}, + {0xffac, 0, 1, 1, g(Yes, No, false, false, "", "ᆲ")}, + {0xffad, 0, 1, 1, g(Yes, No, false, false, "", "ᆳ")}, + {0xffae, 0, 1, 1, g(Yes, No, false, false, "", "ᆴ")}, + {0xffaf, 0, 1, 1, g(Yes, No, false, false, "", "ᆵ")}, + {0xffb0, 0, 0, 0, g(Yes, No, false, false, "", "ᄚ")}, + {0xffb1, 0, 0, 0, g(Yes, No, false, false, "", "ᄆ")}, + {0xffb2, 0, 0, 0, g(Yes, No, false, false, "", "ᄇ")}, + {0xffb3, 0, 0, 0, g(Yes, No, false, false, "", "ᄈ")}, + {0xffb4, 0, 0, 0, g(Yes, No, false, false, "", "ᄡ")}, + {0xffb5, 0, 0, 0, g(Yes, No, false, false, "", "ᄉ")}, + {0xffb6, 0, 0, 0, g(Yes, No, false, false, "", "ᄊ")}, + {0xffb7, 0, 0, 0, g(Yes, No, false, false, "", "ᄋ")}, + {0xffb8, 0, 0, 0, g(Yes, No, false, false, "", "ᄌ")}, + {0xffb9, 0, 0, 0, g(Yes, No, false, false, "", "ᄍ")}, + {0xffba, 0, 0, 0, g(Yes, No, false, false, "", "ᄎ")}, + {0xffbb, 0, 0, 0, g(Yes, No, false, false, "", "ᄏ")}, + {0xffbc, 0, 0, 0, g(Yes, No, false, false, "", "ᄐ")}, + {0xffbd, 0, 0, 0, g(Yes, No, false, false, "", "ᄑ")}, + {0xffbe, 0, 0, 0, g(Yes, No, false, false, "", "ᄒ")}, + {0xffbf, 0, 0, 0, f(Yes, false, "")}, + {0xffc2, 0, 1, 1, g(Yes, No, false, false, "", "ᅡ")}, + {0xffc3, 0, 1, 1, g(Yes, No, false, false, "", "ᅢ")}, + {0xffc4, 0, 1, 1, g(Yes, No, false, false, "", "ᅣ")}, + {0xffc5, 0, 1, 1, g(Yes, No, false, false, "", "ᅤ")}, + {0xffc6, 0, 1, 1, g(Yes, No, false, false, "", "ᅥ")}, + {0xffc7, 0, 1, 1, g(Yes, No, false, false, "", "ᅦ")}, + {0xffc8, 0, 0, 0, f(Yes, false, "")}, + {0xffca, 0, 1, 1, g(Yes, No, false, false, "", "ᅧ")}, + {0xffcb, 0, 1, 1, g(Yes, No, false, false, "", "ᅨ")}, + {0xffcc, 0, 1, 1, g(Yes, No, false, false, "", "ᅩ")}, + {0xffcd, 0, 1, 1, g(Yes, No, false, false, "", "ᅪ")}, + {0xffce, 0, 1, 1, g(Yes, No, false, false, "", "ᅫ")}, + {0xffcf, 0, 1, 1, g(Yes, No, false, false, "", "ᅬ")}, + {0xffd0, 0, 0, 0, f(Yes, false, "")}, + {0xffd2, 0, 1, 1, g(Yes, No, false, false, "", "ᅭ")}, + {0xffd3, 0, 1, 1, g(Yes, No, false, false, "", "ᅮ")}, + {0xffd4, 0, 1, 1, g(Yes, No, false, false, "", "ᅯ")}, + {0xffd5, 0, 1, 1, g(Yes, No, false, false, "", "ᅰ")}, + {0xffd6, 0, 1, 1, g(Yes, No, false, false, "", "ᅱ")}, + {0xffd7, 0, 1, 1, g(Yes, No, false, false, "", "ᅲ")}, + {0xffd8, 0, 0, 0, f(Yes, false, "")}, + {0xffda, 0, 1, 1, g(Yes, No, false, false, "", "ᅳ")}, + {0xffdb, 0, 1, 1, g(Yes, No, false, false, "", "ᅴ")}, + {0xffdc, 0, 1, 1, g(Yes, No, false, false, "", "ᅵ")}, + {0xffdd, 0, 0, 0, f(Yes, false, "")}, + {0xffe0, 0, 0, 0, g(Yes, No, false, false, "", "¢")}, + {0xffe1, 0, 0, 0, g(Yes, No, false, false, "", "£")}, + {0xffe2, 0, 0, 0, g(Yes, No, false, false, "", "¬")}, + {0xffe3, 0, 0, 1, g(Yes, No, false, false, "", " ̄")}, + {0xffe4, 0, 0, 0, g(Yes, No, false, false, "", "¦")}, + {0xffe5, 0, 0, 0, g(Yes, No, false, false, "", "¥")}, + {0xffe6, 0, 0, 0, g(Yes, No, false, false, "", "₩")}, + {0xffe7, 0, 0, 0, f(Yes, false, "")}, + {0xffe8, 0, 0, 0, g(Yes, No, false, false, "", "│")}, + {0xffe9, 0, 0, 0, g(Yes, No, false, false, "", "←")}, + {0xffea, 0, 0, 0, g(Yes, No, false, false, "", "↑")}, + {0xffeb, 0, 0, 0, g(Yes, No, false, false, "", "→")}, + {0xffec, 0, 0, 0, g(Yes, No, false, false, "", "↓")}, + {0xffed, 0, 0, 0, g(Yes, No, false, false, "", "■")}, + {0xffee, 0, 0, 0, g(Yes, No, false, false, "", "○")}, + {0xffef, 0, 0, 0, f(Yes, false, "")}, + {0x101fd, 220, 1, 1, f(Yes, false, "")}, + {0x101fe, 0, 0, 0, f(Yes, false, "")}, + {0x102e0, 220, 1, 1, f(Yes, false, "")}, + {0x102e1, 0, 0, 0, f(Yes, false, "")}, + {0x10376, 230, 1, 1, f(Yes, false, "")}, + {0x1037b, 0, 0, 0, f(Yes, false, "")}, + {0x10a0d, 220, 1, 1, f(Yes, false, "")}, + {0x10a0e, 0, 0, 0, f(Yes, false, "")}, + {0x10a0f, 230, 1, 1, f(Yes, false, "")}, + {0x10a10, 0, 0, 0, f(Yes, false, "")}, + {0x10a38, 230, 1, 1, f(Yes, false, "")}, + {0x10a39, 1, 1, 1, f(Yes, false, "")}, + {0x10a3a, 220, 1, 1, f(Yes, false, "")}, + {0x10a3b, 0, 0, 0, f(Yes, false, "")}, + {0x10a3f, 9, 1, 1, f(Yes, false, "")}, + {0x10a40, 0, 0, 0, f(Yes, false, "")}, + {0x10ae5, 230, 1, 1, f(Yes, false, "")}, + {0x10ae6, 220, 1, 1, f(Yes, false, "")}, + {0x10ae7, 0, 0, 0, f(Yes, false, "")}, + {0x11046, 9, 1, 1, f(Yes, false, "")}, + {0x11047, 0, 0, 0, f(Yes, false, "")}, + {0x1107f, 9, 1, 1, f(Yes, false, "")}, + {0x11080, 0, 0, 0, f(Yes, false, "")}, + {0x11099, 0, 0, 0, f(Yes, true, "")}, + {0x1109a, 0, 0, 1, f(Yes, false, "𑂚")}, + {0x1109b, 0, 0, 0, f(Yes, true, "")}, + {0x1109c, 0, 0, 1, f(Yes, false, "𑂜")}, + {0x1109d, 0, 0, 0, f(Yes, false, "")}, + {0x110a5, 0, 0, 0, f(Yes, true, "")}, + {0x110a6, 0, 0, 0, f(Yes, false, "")}, + {0x110ab, 0, 0, 1, f(Yes, false, "𑂫")}, + {0x110ac, 0, 0, 0, f(Yes, false, "")}, + {0x110b9, 9, 1, 1, f(Yes, false, "")}, + {0x110ba, 7, 1, 1, f(Maybe, false, "")}, + {0x110bb, 0, 0, 0, f(Yes, false, "")}, + {0x11100, 230, 1, 1, f(Yes, false, "")}, + {0x11103, 0, 0, 0, f(Yes, false, "")}, + {0x11127, 0, 1, 1, f(Maybe, false, "")}, + {0x11128, 0, 0, 0, f(Yes, false, "")}, + {0x1112e, 0, 0, 1, f(Yes, false, "𑄮")}, + {0x1112f, 0, 0, 1, f(Yes, false, "𑄯")}, + {0x11130, 0, 0, 0, f(Yes, false, "")}, + {0x11131, 0, 0, 0, f(Yes, true, "")}, + {0x11133, 9, 1, 1, f(Yes, false, "")}, + {0x11135, 0, 0, 0, f(Yes, false, "")}, + {0x11173, 7, 1, 1, f(Yes, false, "")}, + {0x11174, 0, 0, 0, f(Yes, false, "")}, + {0x111c0, 9, 1, 1, f(Yes, false, "")}, + {0x111c1, 0, 0, 0, f(Yes, false, "")}, + {0x111ca, 7, 1, 1, f(Yes, false, "")}, + {0x111cb, 0, 0, 0, f(Yes, false, "")}, + {0x11235, 9, 1, 1, f(Yes, false, "")}, + {0x11236, 7, 1, 1, f(Yes, false, "")}, + {0x11237, 0, 0, 0, f(Yes, false, "")}, + {0x112e9, 7, 1, 1, f(Yes, false, "")}, + {0x112ea, 9, 1, 1, f(Yes, false, "")}, + {0x112eb, 0, 0, 0, f(Yes, false, "")}, + {0x1133c, 7, 1, 1, f(Yes, false, "")}, + {0x1133d, 0, 0, 0, f(Yes, false, "")}, + {0x1133e, 0, 1, 1, f(Maybe, false, "")}, + {0x1133f, 0, 0, 0, f(Yes, false, "")}, + {0x11347, 0, 0, 0, f(Yes, true, "")}, + {0x11348, 0, 0, 0, f(Yes, false, "")}, + {0x1134b, 0, 0, 1, f(Yes, false, "𑍋")}, + {0x1134c, 0, 0, 1, f(Yes, false, "𑍌")}, + {0x1134d, 9, 1, 1, f(Yes, false, "")}, + {0x1134e, 0, 0, 0, f(Yes, false, "")}, + {0x11357, 0, 1, 1, f(Maybe, false, "")}, + {0x11358, 0, 0, 0, f(Yes, false, "")}, + {0x11366, 230, 1, 1, f(Yes, false, "")}, + {0x1136d, 0, 0, 0, f(Yes, false, "")}, + {0x11370, 230, 1, 1, f(Yes, false, "")}, + {0x11375, 0, 0, 0, f(Yes, false, "")}, + {0x11442, 9, 1, 1, f(Yes, false, "")}, + {0x11443, 0, 0, 0, f(Yes, false, "")}, + {0x11446, 7, 1, 1, f(Yes, false, "")}, + {0x11447, 0, 0, 0, f(Yes, false, "")}, + {0x114b0, 0, 1, 1, f(Maybe, false, "")}, + {0x114b1, 0, 0, 0, f(Yes, false, "")}, + {0x114b9, 0, 0, 0, f(Yes, true, "")}, + {0x114ba, 0, 1, 1, f(Maybe, false, "")}, + {0x114bb, 0, 0, 1, f(Yes, false, "𑒻")}, + {0x114bc, 0, 0, 1, f(Yes, false, "𑒼")}, + {0x114bd, 0, 1, 1, f(Maybe, false, "")}, + {0x114be, 0, 0, 1, f(Yes, false, "𑒾")}, + {0x114bf, 0, 0, 0, f(Yes, false, "")}, + {0x114c2, 9, 1, 1, f(Yes, false, "")}, + {0x114c3, 7, 1, 1, f(Yes, false, "")}, + {0x114c4, 0, 0, 0, f(Yes, false, "")}, + {0x115af, 0, 1, 1, f(Maybe, false, "")}, + {0x115b0, 0, 0, 0, f(Yes, false, "")}, + {0x115b8, 0, 0, 0, f(Yes, true, "")}, + {0x115ba, 0, 0, 1, f(Yes, false, "𑖺")}, + {0x115bb, 0, 0, 1, f(Yes, false, "𑖻")}, + {0x115bc, 0, 0, 0, f(Yes, false, "")}, + {0x115bf, 9, 1, 1, f(Yes, false, "")}, + {0x115c0, 7, 1, 1, f(Yes, false, "")}, + {0x115c1, 0, 0, 0, f(Yes, false, "")}, + {0x1163f, 9, 1, 1, f(Yes, false, "")}, + {0x11640, 0, 0, 0, f(Yes, false, "")}, + {0x116b6, 9, 1, 1, f(Yes, false, "")}, + {0x116b7, 7, 1, 1, f(Yes, false, "")}, + {0x116b8, 0, 0, 0, f(Yes, false, "")}, + {0x1172b, 9, 1, 1, f(Yes, false, "")}, + {0x1172c, 0, 0, 0, f(Yes, false, "")}, + {0x11c3f, 9, 1, 1, f(Yes, false, "")}, + {0x11c40, 0, 0, 0, f(Yes, false, "")}, + {0x16af0, 1, 1, 1, f(Yes, false, "")}, + {0x16af5, 0, 0, 0, f(Yes, false, "")}, + {0x16b30, 230, 1, 1, f(Yes, false, "")}, + {0x16b37, 0, 0, 0, f(Yes, false, "")}, + {0x1bc9e, 1, 1, 1, f(Yes, false, "")}, + {0x1bc9f, 0, 0, 0, f(Yes, false, "")}, + {0x1d15e, 0, 0, 1, f(No, false, "𝅗𝅥")}, + {0x1d15f, 0, 0, 1, f(No, false, "𝅘𝅥")}, + {0x1d160, 0, 0, 2, f(No, false, "𝅘𝅥𝅮")}, + {0x1d161, 0, 0, 2, f(No, false, "𝅘𝅥𝅯")}, + {0x1d162, 0, 0, 2, f(No, false, "𝅘𝅥𝅰")}, + {0x1d163, 0, 0, 2, f(No, false, "𝅘𝅥𝅱")}, + {0x1d164, 0, 0, 2, f(No, false, "𝅘𝅥𝅲")}, + {0x1d165, 216, 1, 1, f(Yes, false, "")}, + {0x1d167, 1, 1, 1, f(Yes, false, "")}, + {0x1d16a, 0, 0, 0, f(Yes, false, "")}, + {0x1d16d, 226, 1, 1, f(Yes, false, "")}, + {0x1d16e, 216, 1, 1, f(Yes, false, "")}, + {0x1d173, 0, 0, 0, f(Yes, false, "")}, + {0x1d17b, 220, 1, 1, f(Yes, false, "")}, + {0x1d183, 0, 0, 0, f(Yes, false, "")}, + {0x1d185, 230, 1, 1, f(Yes, false, "")}, + {0x1d18a, 220, 1, 1, f(Yes, false, "")}, + {0x1d18c, 0, 0, 0, f(Yes, false, "")}, + {0x1d1aa, 230, 1, 1, f(Yes, false, "")}, + {0x1d1ae, 0, 0, 0, f(Yes, false, "")}, + {0x1d1bb, 0, 0, 1, f(No, false, "𝆹𝅥")}, + {0x1d1bc, 0, 0, 1, f(No, false, "𝆺𝅥")}, + {0x1d1bd, 0, 0, 2, f(No, false, "𝆹𝅥𝅮")}, + {0x1d1be, 0, 0, 2, f(No, false, "𝆺𝅥𝅮")}, + {0x1d1bf, 0, 0, 2, f(No, false, "𝆹𝅥𝅯")}, + {0x1d1c0, 0, 0, 2, f(No, false, "𝆺𝅥𝅯")}, + {0x1d1c1, 0, 0, 0, f(Yes, false, "")}, + {0x1d242, 230, 1, 1, f(Yes, false, "")}, + {0x1d245, 0, 0, 0, f(Yes, false, "")}, + {0x1d400, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0x1d401, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0x1d402, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x1d403, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x1d404, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0x1d405, 0, 0, 0, g(Yes, No, false, false, "", "F")}, + {0x1d406, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0x1d407, 0, 0, 0, g(Yes, No, false, false, "", "H")}, + {0x1d408, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0x1d409, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0x1d40a, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0x1d40b, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x1d40c, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x1d40d, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0x1d40e, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0x1d40f, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0x1d410, 0, 0, 0, g(Yes, No, false, false, "", "Q")}, + {0x1d411, 0, 0, 0, g(Yes, No, false, false, "", "R")}, + {0x1d412, 0, 0, 0, g(Yes, No, false, false, "", "S")}, + {0x1d413, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0x1d414, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0x1d415, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x1d416, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0x1d417, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0x1d418, 0, 0, 0, g(Yes, No, false, false, "", "Y")}, + {0x1d419, 0, 0, 0, g(Yes, No, false, false, "", "Z")}, + {0x1d41a, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0x1d41b, 0, 0, 0, g(Yes, No, false, false, "", "b")}, + {0x1d41c, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0x1d41d, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x1d41e, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x1d41f, 0, 0, 0, g(Yes, No, false, false, "", "f")}, + {0x1d420, 0, 0, 0, g(Yes, No, false, false, "", "g")}, + {0x1d421, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0x1d422, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x1d423, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x1d424, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0x1d425, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x1d426, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x1d427, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0x1d428, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0x1d429, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0x1d42a, 0, 0, 0, g(Yes, No, false, false, "", "q")}, + {0x1d42b, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0x1d42c, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0x1d42d, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0x1d42e, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0x1d42f, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x1d430, 0, 0, 0, g(Yes, No, false, false, "", "w")}, + {0x1d431, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x1d432, 0, 0, 0, g(Yes, No, false, false, "", "y")}, + {0x1d433, 0, 0, 0, g(Yes, No, false, false, "", "z")}, + {0x1d434, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0x1d435, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0x1d436, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x1d437, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x1d438, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0x1d439, 0, 0, 0, g(Yes, No, false, false, "", "F")}, + {0x1d43a, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0x1d43b, 0, 0, 0, g(Yes, No, false, false, "", "H")}, + {0x1d43c, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0x1d43d, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0x1d43e, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0x1d43f, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x1d440, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x1d441, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0x1d442, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0x1d443, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0x1d444, 0, 0, 0, g(Yes, No, false, false, "", "Q")}, + {0x1d445, 0, 0, 0, g(Yes, No, false, false, "", "R")}, + {0x1d446, 0, 0, 0, g(Yes, No, false, false, "", "S")}, + {0x1d447, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0x1d448, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0x1d449, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x1d44a, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0x1d44b, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0x1d44c, 0, 0, 0, g(Yes, No, false, false, "", "Y")}, + {0x1d44d, 0, 0, 0, g(Yes, No, false, false, "", "Z")}, + {0x1d44e, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0x1d44f, 0, 0, 0, g(Yes, No, false, false, "", "b")}, + {0x1d450, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0x1d451, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x1d452, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x1d453, 0, 0, 0, g(Yes, No, false, false, "", "f")}, + {0x1d454, 0, 0, 0, g(Yes, No, false, false, "", "g")}, + {0x1d455, 0, 0, 0, f(Yes, false, "")}, + {0x1d456, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x1d457, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x1d458, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0x1d459, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x1d45a, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x1d45b, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0x1d45c, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0x1d45d, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0x1d45e, 0, 0, 0, g(Yes, No, false, false, "", "q")}, + {0x1d45f, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0x1d460, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0x1d461, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0x1d462, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0x1d463, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x1d464, 0, 0, 0, g(Yes, No, false, false, "", "w")}, + {0x1d465, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x1d466, 0, 0, 0, g(Yes, No, false, false, "", "y")}, + {0x1d467, 0, 0, 0, g(Yes, No, false, false, "", "z")}, + {0x1d468, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0x1d469, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0x1d46a, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x1d46b, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x1d46c, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0x1d46d, 0, 0, 0, g(Yes, No, false, false, "", "F")}, + {0x1d46e, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0x1d46f, 0, 0, 0, g(Yes, No, false, false, "", "H")}, + {0x1d470, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0x1d471, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0x1d472, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0x1d473, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x1d474, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x1d475, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0x1d476, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0x1d477, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0x1d478, 0, 0, 0, g(Yes, No, false, false, "", "Q")}, + {0x1d479, 0, 0, 0, g(Yes, No, false, false, "", "R")}, + {0x1d47a, 0, 0, 0, g(Yes, No, false, false, "", "S")}, + {0x1d47b, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0x1d47c, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0x1d47d, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x1d47e, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0x1d47f, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0x1d480, 0, 0, 0, g(Yes, No, false, false, "", "Y")}, + {0x1d481, 0, 0, 0, g(Yes, No, false, false, "", "Z")}, + {0x1d482, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0x1d483, 0, 0, 0, g(Yes, No, false, false, "", "b")}, + {0x1d484, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0x1d485, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x1d486, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x1d487, 0, 0, 0, g(Yes, No, false, false, "", "f")}, + {0x1d488, 0, 0, 0, g(Yes, No, false, false, "", "g")}, + {0x1d489, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0x1d48a, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x1d48b, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x1d48c, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0x1d48d, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x1d48e, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x1d48f, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0x1d490, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0x1d491, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0x1d492, 0, 0, 0, g(Yes, No, false, false, "", "q")}, + {0x1d493, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0x1d494, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0x1d495, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0x1d496, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0x1d497, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x1d498, 0, 0, 0, g(Yes, No, false, false, "", "w")}, + {0x1d499, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x1d49a, 0, 0, 0, g(Yes, No, false, false, "", "y")}, + {0x1d49b, 0, 0, 0, g(Yes, No, false, false, "", "z")}, + {0x1d49c, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0x1d49d, 0, 0, 0, f(Yes, false, "")}, + {0x1d49e, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x1d49f, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x1d4a0, 0, 0, 0, f(Yes, false, "")}, + {0x1d4a2, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0x1d4a3, 0, 0, 0, f(Yes, false, "")}, + {0x1d4a5, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0x1d4a6, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0x1d4a7, 0, 0, 0, f(Yes, false, "")}, + {0x1d4a9, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0x1d4aa, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0x1d4ab, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0x1d4ac, 0, 0, 0, g(Yes, No, false, false, "", "Q")}, + {0x1d4ad, 0, 0, 0, f(Yes, false, "")}, + {0x1d4ae, 0, 0, 0, g(Yes, No, false, false, "", "S")}, + {0x1d4af, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0x1d4b0, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0x1d4b1, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x1d4b2, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0x1d4b3, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0x1d4b4, 0, 0, 0, g(Yes, No, false, false, "", "Y")}, + {0x1d4b5, 0, 0, 0, g(Yes, No, false, false, "", "Z")}, + {0x1d4b6, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0x1d4b7, 0, 0, 0, g(Yes, No, false, false, "", "b")}, + {0x1d4b8, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0x1d4b9, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x1d4ba, 0, 0, 0, f(Yes, false, "")}, + {0x1d4bb, 0, 0, 0, g(Yes, No, false, false, "", "f")}, + {0x1d4bc, 0, 0, 0, f(Yes, false, "")}, + {0x1d4bd, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0x1d4be, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x1d4bf, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x1d4c0, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0x1d4c1, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x1d4c2, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x1d4c3, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0x1d4c4, 0, 0, 0, f(Yes, false, "")}, + {0x1d4c5, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0x1d4c6, 0, 0, 0, g(Yes, No, false, false, "", "q")}, + {0x1d4c7, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0x1d4c8, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0x1d4c9, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0x1d4ca, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0x1d4cb, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x1d4cc, 0, 0, 0, g(Yes, No, false, false, "", "w")}, + {0x1d4cd, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x1d4ce, 0, 0, 0, g(Yes, No, false, false, "", "y")}, + {0x1d4cf, 0, 0, 0, g(Yes, No, false, false, "", "z")}, + {0x1d4d0, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0x1d4d1, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0x1d4d2, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x1d4d3, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x1d4d4, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0x1d4d5, 0, 0, 0, g(Yes, No, false, false, "", "F")}, + {0x1d4d6, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0x1d4d7, 0, 0, 0, g(Yes, No, false, false, "", "H")}, + {0x1d4d8, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0x1d4d9, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0x1d4da, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0x1d4db, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x1d4dc, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x1d4dd, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0x1d4de, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0x1d4df, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0x1d4e0, 0, 0, 0, g(Yes, No, false, false, "", "Q")}, + {0x1d4e1, 0, 0, 0, g(Yes, No, false, false, "", "R")}, + {0x1d4e2, 0, 0, 0, g(Yes, No, false, false, "", "S")}, + {0x1d4e3, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0x1d4e4, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0x1d4e5, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x1d4e6, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0x1d4e7, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0x1d4e8, 0, 0, 0, g(Yes, No, false, false, "", "Y")}, + {0x1d4e9, 0, 0, 0, g(Yes, No, false, false, "", "Z")}, + {0x1d4ea, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0x1d4eb, 0, 0, 0, g(Yes, No, false, false, "", "b")}, + {0x1d4ec, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0x1d4ed, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x1d4ee, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x1d4ef, 0, 0, 0, g(Yes, No, false, false, "", "f")}, + {0x1d4f0, 0, 0, 0, g(Yes, No, false, false, "", "g")}, + {0x1d4f1, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0x1d4f2, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x1d4f3, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x1d4f4, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0x1d4f5, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x1d4f6, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x1d4f7, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0x1d4f8, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0x1d4f9, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0x1d4fa, 0, 0, 0, g(Yes, No, false, false, "", "q")}, + {0x1d4fb, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0x1d4fc, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0x1d4fd, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0x1d4fe, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0x1d4ff, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x1d500, 0, 0, 0, g(Yes, No, false, false, "", "w")}, + {0x1d501, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x1d502, 0, 0, 0, g(Yes, No, false, false, "", "y")}, + {0x1d503, 0, 0, 0, g(Yes, No, false, false, "", "z")}, + {0x1d504, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0x1d505, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0x1d506, 0, 0, 0, f(Yes, false, "")}, + {0x1d507, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x1d508, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0x1d509, 0, 0, 0, g(Yes, No, false, false, "", "F")}, + {0x1d50a, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0x1d50b, 0, 0, 0, f(Yes, false, "")}, + {0x1d50d, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0x1d50e, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0x1d50f, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x1d510, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x1d511, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0x1d512, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0x1d513, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0x1d514, 0, 0, 0, g(Yes, No, false, false, "", "Q")}, + {0x1d515, 0, 0, 0, f(Yes, false, "")}, + {0x1d516, 0, 0, 0, g(Yes, No, false, false, "", "S")}, + {0x1d517, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0x1d518, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0x1d519, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x1d51a, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0x1d51b, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0x1d51c, 0, 0, 0, g(Yes, No, false, false, "", "Y")}, + {0x1d51d, 0, 0, 0, f(Yes, false, "")}, + {0x1d51e, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0x1d51f, 0, 0, 0, g(Yes, No, false, false, "", "b")}, + {0x1d520, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0x1d521, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x1d522, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x1d523, 0, 0, 0, g(Yes, No, false, false, "", "f")}, + {0x1d524, 0, 0, 0, g(Yes, No, false, false, "", "g")}, + {0x1d525, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0x1d526, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x1d527, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x1d528, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0x1d529, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x1d52a, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x1d52b, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0x1d52c, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0x1d52d, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0x1d52e, 0, 0, 0, g(Yes, No, false, false, "", "q")}, + {0x1d52f, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0x1d530, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0x1d531, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0x1d532, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0x1d533, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x1d534, 0, 0, 0, g(Yes, No, false, false, "", "w")}, + {0x1d535, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x1d536, 0, 0, 0, g(Yes, No, false, false, "", "y")}, + {0x1d537, 0, 0, 0, g(Yes, No, false, false, "", "z")}, + {0x1d538, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0x1d539, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0x1d53a, 0, 0, 0, f(Yes, false, "")}, + {0x1d53b, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x1d53c, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0x1d53d, 0, 0, 0, g(Yes, No, false, false, "", "F")}, + {0x1d53e, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0x1d53f, 0, 0, 0, f(Yes, false, "")}, + {0x1d540, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0x1d541, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0x1d542, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0x1d543, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x1d544, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x1d545, 0, 0, 0, f(Yes, false, "")}, + {0x1d546, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0x1d547, 0, 0, 0, f(Yes, false, "")}, + {0x1d54a, 0, 0, 0, g(Yes, No, false, false, "", "S")}, + {0x1d54b, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0x1d54c, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0x1d54d, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x1d54e, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0x1d54f, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0x1d550, 0, 0, 0, g(Yes, No, false, false, "", "Y")}, + {0x1d551, 0, 0, 0, f(Yes, false, "")}, + {0x1d552, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0x1d553, 0, 0, 0, g(Yes, No, false, false, "", "b")}, + {0x1d554, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0x1d555, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x1d556, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x1d557, 0, 0, 0, g(Yes, No, false, false, "", "f")}, + {0x1d558, 0, 0, 0, g(Yes, No, false, false, "", "g")}, + {0x1d559, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0x1d55a, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x1d55b, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x1d55c, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0x1d55d, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x1d55e, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x1d55f, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0x1d560, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0x1d561, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0x1d562, 0, 0, 0, g(Yes, No, false, false, "", "q")}, + {0x1d563, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0x1d564, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0x1d565, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0x1d566, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0x1d567, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x1d568, 0, 0, 0, g(Yes, No, false, false, "", "w")}, + {0x1d569, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x1d56a, 0, 0, 0, g(Yes, No, false, false, "", "y")}, + {0x1d56b, 0, 0, 0, g(Yes, No, false, false, "", "z")}, + {0x1d56c, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0x1d56d, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0x1d56e, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x1d56f, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x1d570, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0x1d571, 0, 0, 0, g(Yes, No, false, false, "", "F")}, + {0x1d572, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0x1d573, 0, 0, 0, g(Yes, No, false, false, "", "H")}, + {0x1d574, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0x1d575, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0x1d576, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0x1d577, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x1d578, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x1d579, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0x1d57a, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0x1d57b, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0x1d57c, 0, 0, 0, g(Yes, No, false, false, "", "Q")}, + {0x1d57d, 0, 0, 0, g(Yes, No, false, false, "", "R")}, + {0x1d57e, 0, 0, 0, g(Yes, No, false, false, "", "S")}, + {0x1d57f, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0x1d580, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0x1d581, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x1d582, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0x1d583, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0x1d584, 0, 0, 0, g(Yes, No, false, false, "", "Y")}, + {0x1d585, 0, 0, 0, g(Yes, No, false, false, "", "Z")}, + {0x1d586, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0x1d587, 0, 0, 0, g(Yes, No, false, false, "", "b")}, + {0x1d588, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0x1d589, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x1d58a, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x1d58b, 0, 0, 0, g(Yes, No, false, false, "", "f")}, + {0x1d58c, 0, 0, 0, g(Yes, No, false, false, "", "g")}, + {0x1d58d, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0x1d58e, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x1d58f, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x1d590, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0x1d591, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x1d592, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x1d593, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0x1d594, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0x1d595, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0x1d596, 0, 0, 0, g(Yes, No, false, false, "", "q")}, + {0x1d597, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0x1d598, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0x1d599, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0x1d59a, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0x1d59b, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x1d59c, 0, 0, 0, g(Yes, No, false, false, "", "w")}, + {0x1d59d, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x1d59e, 0, 0, 0, g(Yes, No, false, false, "", "y")}, + {0x1d59f, 0, 0, 0, g(Yes, No, false, false, "", "z")}, + {0x1d5a0, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0x1d5a1, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0x1d5a2, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x1d5a3, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x1d5a4, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0x1d5a5, 0, 0, 0, g(Yes, No, false, false, "", "F")}, + {0x1d5a6, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0x1d5a7, 0, 0, 0, g(Yes, No, false, false, "", "H")}, + {0x1d5a8, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0x1d5a9, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0x1d5aa, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0x1d5ab, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x1d5ac, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x1d5ad, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0x1d5ae, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0x1d5af, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0x1d5b0, 0, 0, 0, g(Yes, No, false, false, "", "Q")}, + {0x1d5b1, 0, 0, 0, g(Yes, No, false, false, "", "R")}, + {0x1d5b2, 0, 0, 0, g(Yes, No, false, false, "", "S")}, + {0x1d5b3, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0x1d5b4, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0x1d5b5, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x1d5b6, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0x1d5b7, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0x1d5b8, 0, 0, 0, g(Yes, No, false, false, "", "Y")}, + {0x1d5b9, 0, 0, 0, g(Yes, No, false, false, "", "Z")}, + {0x1d5ba, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0x1d5bb, 0, 0, 0, g(Yes, No, false, false, "", "b")}, + {0x1d5bc, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0x1d5bd, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x1d5be, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x1d5bf, 0, 0, 0, g(Yes, No, false, false, "", "f")}, + {0x1d5c0, 0, 0, 0, g(Yes, No, false, false, "", "g")}, + {0x1d5c1, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0x1d5c2, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x1d5c3, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x1d5c4, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0x1d5c5, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x1d5c6, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x1d5c7, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0x1d5c8, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0x1d5c9, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0x1d5ca, 0, 0, 0, g(Yes, No, false, false, "", "q")}, + {0x1d5cb, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0x1d5cc, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0x1d5cd, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0x1d5ce, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0x1d5cf, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x1d5d0, 0, 0, 0, g(Yes, No, false, false, "", "w")}, + {0x1d5d1, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x1d5d2, 0, 0, 0, g(Yes, No, false, false, "", "y")}, + {0x1d5d3, 0, 0, 0, g(Yes, No, false, false, "", "z")}, + {0x1d5d4, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0x1d5d5, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0x1d5d6, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x1d5d7, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x1d5d8, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0x1d5d9, 0, 0, 0, g(Yes, No, false, false, "", "F")}, + {0x1d5da, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0x1d5db, 0, 0, 0, g(Yes, No, false, false, "", "H")}, + {0x1d5dc, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0x1d5dd, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0x1d5de, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0x1d5df, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x1d5e0, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x1d5e1, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0x1d5e2, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0x1d5e3, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0x1d5e4, 0, 0, 0, g(Yes, No, false, false, "", "Q")}, + {0x1d5e5, 0, 0, 0, g(Yes, No, false, false, "", "R")}, + {0x1d5e6, 0, 0, 0, g(Yes, No, false, false, "", "S")}, + {0x1d5e7, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0x1d5e8, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0x1d5e9, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x1d5ea, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0x1d5eb, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0x1d5ec, 0, 0, 0, g(Yes, No, false, false, "", "Y")}, + {0x1d5ed, 0, 0, 0, g(Yes, No, false, false, "", "Z")}, + {0x1d5ee, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0x1d5ef, 0, 0, 0, g(Yes, No, false, false, "", "b")}, + {0x1d5f0, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0x1d5f1, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x1d5f2, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x1d5f3, 0, 0, 0, g(Yes, No, false, false, "", "f")}, + {0x1d5f4, 0, 0, 0, g(Yes, No, false, false, "", "g")}, + {0x1d5f5, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0x1d5f6, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x1d5f7, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x1d5f8, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0x1d5f9, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x1d5fa, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x1d5fb, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0x1d5fc, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0x1d5fd, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0x1d5fe, 0, 0, 0, g(Yes, No, false, false, "", "q")}, + {0x1d5ff, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0x1d600, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0x1d601, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0x1d602, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0x1d603, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x1d604, 0, 0, 0, g(Yes, No, false, false, "", "w")}, + {0x1d605, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x1d606, 0, 0, 0, g(Yes, No, false, false, "", "y")}, + {0x1d607, 0, 0, 0, g(Yes, No, false, false, "", "z")}, + {0x1d608, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0x1d609, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0x1d60a, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x1d60b, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x1d60c, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0x1d60d, 0, 0, 0, g(Yes, No, false, false, "", "F")}, + {0x1d60e, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0x1d60f, 0, 0, 0, g(Yes, No, false, false, "", "H")}, + {0x1d610, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0x1d611, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0x1d612, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0x1d613, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x1d614, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x1d615, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0x1d616, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0x1d617, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0x1d618, 0, 0, 0, g(Yes, No, false, false, "", "Q")}, + {0x1d619, 0, 0, 0, g(Yes, No, false, false, "", "R")}, + {0x1d61a, 0, 0, 0, g(Yes, No, false, false, "", "S")}, + {0x1d61b, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0x1d61c, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0x1d61d, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x1d61e, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0x1d61f, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0x1d620, 0, 0, 0, g(Yes, No, false, false, "", "Y")}, + {0x1d621, 0, 0, 0, g(Yes, No, false, false, "", "Z")}, + {0x1d622, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0x1d623, 0, 0, 0, g(Yes, No, false, false, "", "b")}, + {0x1d624, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0x1d625, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x1d626, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x1d627, 0, 0, 0, g(Yes, No, false, false, "", "f")}, + {0x1d628, 0, 0, 0, g(Yes, No, false, false, "", "g")}, + {0x1d629, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0x1d62a, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x1d62b, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x1d62c, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0x1d62d, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x1d62e, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x1d62f, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0x1d630, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0x1d631, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0x1d632, 0, 0, 0, g(Yes, No, false, false, "", "q")}, + {0x1d633, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0x1d634, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0x1d635, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0x1d636, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0x1d637, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x1d638, 0, 0, 0, g(Yes, No, false, false, "", "w")}, + {0x1d639, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x1d63a, 0, 0, 0, g(Yes, No, false, false, "", "y")}, + {0x1d63b, 0, 0, 0, g(Yes, No, false, false, "", "z")}, + {0x1d63c, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0x1d63d, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0x1d63e, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x1d63f, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x1d640, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0x1d641, 0, 0, 0, g(Yes, No, false, false, "", "F")}, + {0x1d642, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0x1d643, 0, 0, 0, g(Yes, No, false, false, "", "H")}, + {0x1d644, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0x1d645, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0x1d646, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0x1d647, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x1d648, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x1d649, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0x1d64a, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0x1d64b, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0x1d64c, 0, 0, 0, g(Yes, No, false, false, "", "Q")}, + {0x1d64d, 0, 0, 0, g(Yes, No, false, false, "", "R")}, + {0x1d64e, 0, 0, 0, g(Yes, No, false, false, "", "S")}, + {0x1d64f, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0x1d650, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0x1d651, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x1d652, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0x1d653, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0x1d654, 0, 0, 0, g(Yes, No, false, false, "", "Y")}, + {0x1d655, 0, 0, 0, g(Yes, No, false, false, "", "Z")}, + {0x1d656, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0x1d657, 0, 0, 0, g(Yes, No, false, false, "", "b")}, + {0x1d658, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0x1d659, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x1d65a, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x1d65b, 0, 0, 0, g(Yes, No, false, false, "", "f")}, + {0x1d65c, 0, 0, 0, g(Yes, No, false, false, "", "g")}, + {0x1d65d, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0x1d65e, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x1d65f, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x1d660, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0x1d661, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x1d662, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x1d663, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0x1d664, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0x1d665, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0x1d666, 0, 0, 0, g(Yes, No, false, false, "", "q")}, + {0x1d667, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0x1d668, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0x1d669, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0x1d66a, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0x1d66b, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x1d66c, 0, 0, 0, g(Yes, No, false, false, "", "w")}, + {0x1d66d, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x1d66e, 0, 0, 0, g(Yes, No, false, false, "", "y")}, + {0x1d66f, 0, 0, 0, g(Yes, No, false, false, "", "z")}, + {0x1d670, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0x1d671, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0x1d672, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x1d673, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x1d674, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0x1d675, 0, 0, 0, g(Yes, No, false, false, "", "F")}, + {0x1d676, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0x1d677, 0, 0, 0, g(Yes, No, false, false, "", "H")}, + {0x1d678, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0x1d679, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0x1d67a, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0x1d67b, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x1d67c, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x1d67d, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0x1d67e, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0x1d67f, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0x1d680, 0, 0, 0, g(Yes, No, false, false, "", "Q")}, + {0x1d681, 0, 0, 0, g(Yes, No, false, false, "", "R")}, + {0x1d682, 0, 0, 0, g(Yes, No, false, false, "", "S")}, + {0x1d683, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0x1d684, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0x1d685, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x1d686, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0x1d687, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0x1d688, 0, 0, 0, g(Yes, No, false, false, "", "Y")}, + {0x1d689, 0, 0, 0, g(Yes, No, false, false, "", "Z")}, + {0x1d68a, 0, 0, 0, g(Yes, No, false, false, "", "a")}, + {0x1d68b, 0, 0, 0, g(Yes, No, false, false, "", "b")}, + {0x1d68c, 0, 0, 0, g(Yes, No, false, false, "", "c")}, + {0x1d68d, 0, 0, 0, g(Yes, No, false, false, "", "d")}, + {0x1d68e, 0, 0, 0, g(Yes, No, false, false, "", "e")}, + {0x1d68f, 0, 0, 0, g(Yes, No, false, false, "", "f")}, + {0x1d690, 0, 0, 0, g(Yes, No, false, false, "", "g")}, + {0x1d691, 0, 0, 0, g(Yes, No, false, false, "", "h")}, + {0x1d692, 0, 0, 0, g(Yes, No, false, false, "", "i")}, + {0x1d693, 0, 0, 0, g(Yes, No, false, false, "", "j")}, + {0x1d694, 0, 0, 0, g(Yes, No, false, false, "", "k")}, + {0x1d695, 0, 0, 0, g(Yes, No, false, false, "", "l")}, + {0x1d696, 0, 0, 0, g(Yes, No, false, false, "", "m")}, + {0x1d697, 0, 0, 0, g(Yes, No, false, false, "", "n")}, + {0x1d698, 0, 0, 0, g(Yes, No, false, false, "", "o")}, + {0x1d699, 0, 0, 0, g(Yes, No, false, false, "", "p")}, + {0x1d69a, 0, 0, 0, g(Yes, No, false, false, "", "q")}, + {0x1d69b, 0, 0, 0, g(Yes, No, false, false, "", "r")}, + {0x1d69c, 0, 0, 0, g(Yes, No, false, false, "", "s")}, + {0x1d69d, 0, 0, 0, g(Yes, No, false, false, "", "t")}, + {0x1d69e, 0, 0, 0, g(Yes, No, false, false, "", "u")}, + {0x1d69f, 0, 0, 0, g(Yes, No, false, false, "", "v")}, + {0x1d6a0, 0, 0, 0, g(Yes, No, false, false, "", "w")}, + {0x1d6a1, 0, 0, 0, g(Yes, No, false, false, "", "x")}, + {0x1d6a2, 0, 0, 0, g(Yes, No, false, false, "", "y")}, + {0x1d6a3, 0, 0, 0, g(Yes, No, false, false, "", "z")}, + {0x1d6a4, 0, 0, 0, g(Yes, No, false, false, "", "ı")}, + {0x1d6a5, 0, 0, 0, g(Yes, No, false, false, "", "ȷ")}, + {0x1d6a6, 0, 0, 0, f(Yes, false, "")}, + {0x1d6a8, 0, 0, 0, g(Yes, No, false, false, "", "Α")}, + {0x1d6a9, 0, 0, 0, g(Yes, No, false, false, "", "Β")}, + {0x1d6aa, 0, 0, 0, g(Yes, No, false, false, "", "Γ")}, + {0x1d6ab, 0, 0, 0, g(Yes, No, false, false, "", "Δ")}, + {0x1d6ac, 0, 0, 0, g(Yes, No, false, false, "", "Ε")}, + {0x1d6ad, 0, 0, 0, g(Yes, No, false, false, "", "Ζ")}, + {0x1d6ae, 0, 0, 0, g(Yes, No, false, false, "", "Η")}, + {0x1d6af, 0, 0, 0, g(Yes, No, false, false, "", "Θ")}, + {0x1d6b0, 0, 0, 0, g(Yes, No, false, false, "", "Ι")}, + {0x1d6b1, 0, 0, 0, g(Yes, No, false, false, "", "Κ")}, + {0x1d6b2, 0, 0, 0, g(Yes, No, false, false, "", "Λ")}, + {0x1d6b3, 0, 0, 0, g(Yes, No, false, false, "", "Μ")}, + {0x1d6b4, 0, 0, 0, g(Yes, No, false, false, "", "Ν")}, + {0x1d6b5, 0, 0, 0, g(Yes, No, false, false, "", "Ξ")}, + {0x1d6b6, 0, 0, 0, g(Yes, No, false, false, "", "Ο")}, + {0x1d6b7, 0, 0, 0, g(Yes, No, false, false, "", "Π")}, + {0x1d6b8, 0, 0, 0, g(Yes, No, false, false, "", "Ρ")}, + {0x1d6b9, 0, 0, 0, g(Yes, No, false, false, "", "Θ")}, + {0x1d6ba, 0, 0, 0, g(Yes, No, false, false, "", "Σ")}, + {0x1d6bb, 0, 0, 0, g(Yes, No, false, false, "", "Τ")}, + {0x1d6bc, 0, 0, 0, g(Yes, No, false, false, "", "Υ")}, + {0x1d6bd, 0, 0, 0, g(Yes, No, false, false, "", "Φ")}, + {0x1d6be, 0, 0, 0, g(Yes, No, false, false, "", "Χ")}, + {0x1d6bf, 0, 0, 0, g(Yes, No, false, false, "", "Ψ")}, + {0x1d6c0, 0, 0, 0, g(Yes, No, false, false, "", "Ω")}, + {0x1d6c1, 0, 0, 0, g(Yes, No, false, false, "", "∇")}, + {0x1d6c2, 0, 0, 0, g(Yes, No, false, false, "", "α")}, + {0x1d6c3, 0, 0, 0, g(Yes, No, false, false, "", "β")}, + {0x1d6c4, 0, 0, 0, g(Yes, No, false, false, "", "γ")}, + {0x1d6c5, 0, 0, 0, g(Yes, No, false, false, "", "δ")}, + {0x1d6c6, 0, 0, 0, g(Yes, No, false, false, "", "ε")}, + {0x1d6c7, 0, 0, 0, g(Yes, No, false, false, "", "ζ")}, + {0x1d6c8, 0, 0, 0, g(Yes, No, false, false, "", "η")}, + {0x1d6c9, 0, 0, 0, g(Yes, No, false, false, "", "θ")}, + {0x1d6ca, 0, 0, 0, g(Yes, No, false, false, "", "ι")}, + {0x1d6cb, 0, 0, 0, g(Yes, No, false, false, "", "κ")}, + {0x1d6cc, 0, 0, 0, g(Yes, No, false, false, "", "λ")}, + {0x1d6cd, 0, 0, 0, g(Yes, No, false, false, "", "μ")}, + {0x1d6ce, 0, 0, 0, g(Yes, No, false, false, "", "ν")}, + {0x1d6cf, 0, 0, 0, g(Yes, No, false, false, "", "ξ")}, + {0x1d6d0, 0, 0, 0, g(Yes, No, false, false, "", "ο")}, + {0x1d6d1, 0, 0, 0, g(Yes, No, false, false, "", "π")}, + {0x1d6d2, 0, 0, 0, g(Yes, No, false, false, "", "ρ")}, + {0x1d6d3, 0, 0, 0, g(Yes, No, false, false, "", "ς")}, + {0x1d6d4, 0, 0, 0, g(Yes, No, false, false, "", "σ")}, + {0x1d6d5, 0, 0, 0, g(Yes, No, false, false, "", "τ")}, + {0x1d6d6, 0, 0, 0, g(Yes, No, false, false, "", "υ")}, + {0x1d6d7, 0, 0, 0, g(Yes, No, false, false, "", "φ")}, + {0x1d6d8, 0, 0, 0, g(Yes, No, false, false, "", "χ")}, + {0x1d6d9, 0, 0, 0, g(Yes, No, false, false, "", "ψ")}, + {0x1d6da, 0, 0, 0, g(Yes, No, false, false, "", "ω")}, + {0x1d6db, 0, 0, 0, g(Yes, No, false, false, "", "∂")}, + {0x1d6dc, 0, 0, 0, g(Yes, No, false, false, "", "ε")}, + {0x1d6dd, 0, 0, 0, g(Yes, No, false, false, "", "θ")}, + {0x1d6de, 0, 0, 0, g(Yes, No, false, false, "", "κ")}, + {0x1d6df, 0, 0, 0, g(Yes, No, false, false, "", "φ")}, + {0x1d6e0, 0, 0, 0, g(Yes, No, false, false, "", "ρ")}, + {0x1d6e1, 0, 0, 0, g(Yes, No, false, false, "", "π")}, + {0x1d6e2, 0, 0, 0, g(Yes, No, false, false, "", "Α")}, + {0x1d6e3, 0, 0, 0, g(Yes, No, false, false, "", "Β")}, + {0x1d6e4, 0, 0, 0, g(Yes, No, false, false, "", "Γ")}, + {0x1d6e5, 0, 0, 0, g(Yes, No, false, false, "", "Δ")}, + {0x1d6e6, 0, 0, 0, g(Yes, No, false, false, "", "Ε")}, + {0x1d6e7, 0, 0, 0, g(Yes, No, false, false, "", "Ζ")}, + {0x1d6e8, 0, 0, 0, g(Yes, No, false, false, "", "Η")}, + {0x1d6e9, 0, 0, 0, g(Yes, No, false, false, "", "Θ")}, + {0x1d6ea, 0, 0, 0, g(Yes, No, false, false, "", "Ι")}, + {0x1d6eb, 0, 0, 0, g(Yes, No, false, false, "", "Κ")}, + {0x1d6ec, 0, 0, 0, g(Yes, No, false, false, "", "Λ")}, + {0x1d6ed, 0, 0, 0, g(Yes, No, false, false, "", "Μ")}, + {0x1d6ee, 0, 0, 0, g(Yes, No, false, false, "", "Ν")}, + {0x1d6ef, 0, 0, 0, g(Yes, No, false, false, "", "Ξ")}, + {0x1d6f0, 0, 0, 0, g(Yes, No, false, false, "", "Ο")}, + {0x1d6f1, 0, 0, 0, g(Yes, No, false, false, "", "Π")}, + {0x1d6f2, 0, 0, 0, g(Yes, No, false, false, "", "Ρ")}, + {0x1d6f3, 0, 0, 0, g(Yes, No, false, false, "", "Θ")}, + {0x1d6f4, 0, 0, 0, g(Yes, No, false, false, "", "Σ")}, + {0x1d6f5, 0, 0, 0, g(Yes, No, false, false, "", "Τ")}, + {0x1d6f6, 0, 0, 0, g(Yes, No, false, false, "", "Υ")}, + {0x1d6f7, 0, 0, 0, g(Yes, No, false, false, "", "Φ")}, + {0x1d6f8, 0, 0, 0, g(Yes, No, false, false, "", "Χ")}, + {0x1d6f9, 0, 0, 0, g(Yes, No, false, false, "", "Ψ")}, + {0x1d6fa, 0, 0, 0, g(Yes, No, false, false, "", "Ω")}, + {0x1d6fb, 0, 0, 0, g(Yes, No, false, false, "", "∇")}, + {0x1d6fc, 0, 0, 0, g(Yes, No, false, false, "", "α")}, + {0x1d6fd, 0, 0, 0, g(Yes, No, false, false, "", "β")}, + {0x1d6fe, 0, 0, 0, g(Yes, No, false, false, "", "γ")}, + {0x1d6ff, 0, 0, 0, g(Yes, No, false, false, "", "δ")}, + {0x1d700, 0, 0, 0, g(Yes, No, false, false, "", "ε")}, + {0x1d701, 0, 0, 0, g(Yes, No, false, false, "", "ζ")}, + {0x1d702, 0, 0, 0, g(Yes, No, false, false, "", "η")}, + {0x1d703, 0, 0, 0, g(Yes, No, false, false, "", "θ")}, + {0x1d704, 0, 0, 0, g(Yes, No, false, false, "", "ι")}, + {0x1d705, 0, 0, 0, g(Yes, No, false, false, "", "κ")}, + {0x1d706, 0, 0, 0, g(Yes, No, false, false, "", "λ")}, + {0x1d707, 0, 0, 0, g(Yes, No, false, false, "", "μ")}, + {0x1d708, 0, 0, 0, g(Yes, No, false, false, "", "ν")}, + {0x1d709, 0, 0, 0, g(Yes, No, false, false, "", "ξ")}, + {0x1d70a, 0, 0, 0, g(Yes, No, false, false, "", "ο")}, + {0x1d70b, 0, 0, 0, g(Yes, No, false, false, "", "π")}, + {0x1d70c, 0, 0, 0, g(Yes, No, false, false, "", "ρ")}, + {0x1d70d, 0, 0, 0, g(Yes, No, false, false, "", "ς")}, + {0x1d70e, 0, 0, 0, g(Yes, No, false, false, "", "σ")}, + {0x1d70f, 0, 0, 0, g(Yes, No, false, false, "", "τ")}, + {0x1d710, 0, 0, 0, g(Yes, No, false, false, "", "υ")}, + {0x1d711, 0, 0, 0, g(Yes, No, false, false, "", "φ")}, + {0x1d712, 0, 0, 0, g(Yes, No, false, false, "", "χ")}, + {0x1d713, 0, 0, 0, g(Yes, No, false, false, "", "ψ")}, + {0x1d714, 0, 0, 0, g(Yes, No, false, false, "", "ω")}, + {0x1d715, 0, 0, 0, g(Yes, No, false, false, "", "∂")}, + {0x1d716, 0, 0, 0, g(Yes, No, false, false, "", "ε")}, + {0x1d717, 0, 0, 0, g(Yes, No, false, false, "", "θ")}, + {0x1d718, 0, 0, 0, g(Yes, No, false, false, "", "κ")}, + {0x1d719, 0, 0, 0, g(Yes, No, false, false, "", "φ")}, + {0x1d71a, 0, 0, 0, g(Yes, No, false, false, "", "ρ")}, + {0x1d71b, 0, 0, 0, g(Yes, No, false, false, "", "π")}, + {0x1d71c, 0, 0, 0, g(Yes, No, false, false, "", "Α")}, + {0x1d71d, 0, 0, 0, g(Yes, No, false, false, "", "Β")}, + {0x1d71e, 0, 0, 0, g(Yes, No, false, false, "", "Γ")}, + {0x1d71f, 0, 0, 0, g(Yes, No, false, false, "", "Δ")}, + {0x1d720, 0, 0, 0, g(Yes, No, false, false, "", "Ε")}, + {0x1d721, 0, 0, 0, g(Yes, No, false, false, "", "Ζ")}, + {0x1d722, 0, 0, 0, g(Yes, No, false, false, "", "Η")}, + {0x1d723, 0, 0, 0, g(Yes, No, false, false, "", "Θ")}, + {0x1d724, 0, 0, 0, g(Yes, No, false, false, "", "Ι")}, + {0x1d725, 0, 0, 0, g(Yes, No, false, false, "", "Κ")}, + {0x1d726, 0, 0, 0, g(Yes, No, false, false, "", "Λ")}, + {0x1d727, 0, 0, 0, g(Yes, No, false, false, "", "Μ")}, + {0x1d728, 0, 0, 0, g(Yes, No, false, false, "", "Ν")}, + {0x1d729, 0, 0, 0, g(Yes, No, false, false, "", "Ξ")}, + {0x1d72a, 0, 0, 0, g(Yes, No, false, false, "", "Ο")}, + {0x1d72b, 0, 0, 0, g(Yes, No, false, false, "", "Π")}, + {0x1d72c, 0, 0, 0, g(Yes, No, false, false, "", "Ρ")}, + {0x1d72d, 0, 0, 0, g(Yes, No, false, false, "", "Θ")}, + {0x1d72e, 0, 0, 0, g(Yes, No, false, false, "", "Σ")}, + {0x1d72f, 0, 0, 0, g(Yes, No, false, false, "", "Τ")}, + {0x1d730, 0, 0, 0, g(Yes, No, false, false, "", "Υ")}, + {0x1d731, 0, 0, 0, g(Yes, No, false, false, "", "Φ")}, + {0x1d732, 0, 0, 0, g(Yes, No, false, false, "", "Χ")}, + {0x1d733, 0, 0, 0, g(Yes, No, false, false, "", "Ψ")}, + {0x1d734, 0, 0, 0, g(Yes, No, false, false, "", "Ω")}, + {0x1d735, 0, 0, 0, g(Yes, No, false, false, "", "∇")}, + {0x1d736, 0, 0, 0, g(Yes, No, false, false, "", "α")}, + {0x1d737, 0, 0, 0, g(Yes, No, false, false, "", "β")}, + {0x1d738, 0, 0, 0, g(Yes, No, false, false, "", "γ")}, + {0x1d739, 0, 0, 0, g(Yes, No, false, false, "", "δ")}, + {0x1d73a, 0, 0, 0, g(Yes, No, false, false, "", "ε")}, + {0x1d73b, 0, 0, 0, g(Yes, No, false, false, "", "ζ")}, + {0x1d73c, 0, 0, 0, g(Yes, No, false, false, "", "η")}, + {0x1d73d, 0, 0, 0, g(Yes, No, false, false, "", "θ")}, + {0x1d73e, 0, 0, 0, g(Yes, No, false, false, "", "ι")}, + {0x1d73f, 0, 0, 0, g(Yes, No, false, false, "", "κ")}, + {0x1d740, 0, 0, 0, g(Yes, No, false, false, "", "λ")}, + {0x1d741, 0, 0, 0, g(Yes, No, false, false, "", "μ")}, + {0x1d742, 0, 0, 0, g(Yes, No, false, false, "", "ν")}, + {0x1d743, 0, 0, 0, g(Yes, No, false, false, "", "ξ")}, + {0x1d744, 0, 0, 0, g(Yes, No, false, false, "", "ο")}, + {0x1d745, 0, 0, 0, g(Yes, No, false, false, "", "π")}, + {0x1d746, 0, 0, 0, g(Yes, No, false, false, "", "ρ")}, + {0x1d747, 0, 0, 0, g(Yes, No, false, false, "", "ς")}, + {0x1d748, 0, 0, 0, g(Yes, No, false, false, "", "σ")}, + {0x1d749, 0, 0, 0, g(Yes, No, false, false, "", "τ")}, + {0x1d74a, 0, 0, 0, g(Yes, No, false, false, "", "υ")}, + {0x1d74b, 0, 0, 0, g(Yes, No, false, false, "", "φ")}, + {0x1d74c, 0, 0, 0, g(Yes, No, false, false, "", "χ")}, + {0x1d74d, 0, 0, 0, g(Yes, No, false, false, "", "ψ")}, + {0x1d74e, 0, 0, 0, g(Yes, No, false, false, "", "ω")}, + {0x1d74f, 0, 0, 0, g(Yes, No, false, false, "", "∂")}, + {0x1d750, 0, 0, 0, g(Yes, No, false, false, "", "ε")}, + {0x1d751, 0, 0, 0, g(Yes, No, false, false, "", "θ")}, + {0x1d752, 0, 0, 0, g(Yes, No, false, false, "", "κ")}, + {0x1d753, 0, 0, 0, g(Yes, No, false, false, "", "φ")}, + {0x1d754, 0, 0, 0, g(Yes, No, false, false, "", "ρ")}, + {0x1d755, 0, 0, 0, g(Yes, No, false, false, "", "π")}, + {0x1d756, 0, 0, 0, g(Yes, No, false, false, "", "Α")}, + {0x1d757, 0, 0, 0, g(Yes, No, false, false, "", "Β")}, + {0x1d758, 0, 0, 0, g(Yes, No, false, false, "", "Γ")}, + {0x1d759, 0, 0, 0, g(Yes, No, false, false, "", "Δ")}, + {0x1d75a, 0, 0, 0, g(Yes, No, false, false, "", "Ε")}, + {0x1d75b, 0, 0, 0, g(Yes, No, false, false, "", "Ζ")}, + {0x1d75c, 0, 0, 0, g(Yes, No, false, false, "", "Η")}, + {0x1d75d, 0, 0, 0, g(Yes, No, false, false, "", "Θ")}, + {0x1d75e, 0, 0, 0, g(Yes, No, false, false, "", "Ι")}, + {0x1d75f, 0, 0, 0, g(Yes, No, false, false, "", "Κ")}, + {0x1d760, 0, 0, 0, g(Yes, No, false, false, "", "Λ")}, + {0x1d761, 0, 0, 0, g(Yes, No, false, false, "", "Μ")}, + {0x1d762, 0, 0, 0, g(Yes, No, false, false, "", "Ν")}, + {0x1d763, 0, 0, 0, g(Yes, No, false, false, "", "Ξ")}, + {0x1d764, 0, 0, 0, g(Yes, No, false, false, "", "Ο")}, + {0x1d765, 0, 0, 0, g(Yes, No, false, false, "", "Π")}, + {0x1d766, 0, 0, 0, g(Yes, No, false, false, "", "Ρ")}, + {0x1d767, 0, 0, 0, g(Yes, No, false, false, "", "Θ")}, + {0x1d768, 0, 0, 0, g(Yes, No, false, false, "", "Σ")}, + {0x1d769, 0, 0, 0, g(Yes, No, false, false, "", "Τ")}, + {0x1d76a, 0, 0, 0, g(Yes, No, false, false, "", "Υ")}, + {0x1d76b, 0, 0, 0, g(Yes, No, false, false, "", "Φ")}, + {0x1d76c, 0, 0, 0, g(Yes, No, false, false, "", "Χ")}, + {0x1d76d, 0, 0, 0, g(Yes, No, false, false, "", "Ψ")}, + {0x1d76e, 0, 0, 0, g(Yes, No, false, false, "", "Ω")}, + {0x1d76f, 0, 0, 0, g(Yes, No, false, false, "", "∇")}, + {0x1d770, 0, 0, 0, g(Yes, No, false, false, "", "α")}, + {0x1d771, 0, 0, 0, g(Yes, No, false, false, "", "β")}, + {0x1d772, 0, 0, 0, g(Yes, No, false, false, "", "γ")}, + {0x1d773, 0, 0, 0, g(Yes, No, false, false, "", "δ")}, + {0x1d774, 0, 0, 0, g(Yes, No, false, false, "", "ε")}, + {0x1d775, 0, 0, 0, g(Yes, No, false, false, "", "ζ")}, + {0x1d776, 0, 0, 0, g(Yes, No, false, false, "", "η")}, + {0x1d777, 0, 0, 0, g(Yes, No, false, false, "", "θ")}, + {0x1d778, 0, 0, 0, g(Yes, No, false, false, "", "ι")}, + {0x1d779, 0, 0, 0, g(Yes, No, false, false, "", "κ")}, + {0x1d77a, 0, 0, 0, g(Yes, No, false, false, "", "λ")}, + {0x1d77b, 0, 0, 0, g(Yes, No, false, false, "", "μ")}, + {0x1d77c, 0, 0, 0, g(Yes, No, false, false, "", "ν")}, + {0x1d77d, 0, 0, 0, g(Yes, No, false, false, "", "ξ")}, + {0x1d77e, 0, 0, 0, g(Yes, No, false, false, "", "ο")}, + {0x1d77f, 0, 0, 0, g(Yes, No, false, false, "", "π")}, + {0x1d780, 0, 0, 0, g(Yes, No, false, false, "", "ρ")}, + {0x1d781, 0, 0, 0, g(Yes, No, false, false, "", "ς")}, + {0x1d782, 0, 0, 0, g(Yes, No, false, false, "", "σ")}, + {0x1d783, 0, 0, 0, g(Yes, No, false, false, "", "τ")}, + {0x1d784, 0, 0, 0, g(Yes, No, false, false, "", "υ")}, + {0x1d785, 0, 0, 0, g(Yes, No, false, false, "", "φ")}, + {0x1d786, 0, 0, 0, g(Yes, No, false, false, "", "χ")}, + {0x1d787, 0, 0, 0, g(Yes, No, false, false, "", "ψ")}, + {0x1d788, 0, 0, 0, g(Yes, No, false, false, "", "ω")}, + {0x1d789, 0, 0, 0, g(Yes, No, false, false, "", "∂")}, + {0x1d78a, 0, 0, 0, g(Yes, No, false, false, "", "ε")}, + {0x1d78b, 0, 0, 0, g(Yes, No, false, false, "", "θ")}, + {0x1d78c, 0, 0, 0, g(Yes, No, false, false, "", "κ")}, + {0x1d78d, 0, 0, 0, g(Yes, No, false, false, "", "φ")}, + {0x1d78e, 0, 0, 0, g(Yes, No, false, false, "", "ρ")}, + {0x1d78f, 0, 0, 0, g(Yes, No, false, false, "", "π")}, + {0x1d790, 0, 0, 0, g(Yes, No, false, false, "", "Α")}, + {0x1d791, 0, 0, 0, g(Yes, No, false, false, "", "Β")}, + {0x1d792, 0, 0, 0, g(Yes, No, false, false, "", "Γ")}, + {0x1d793, 0, 0, 0, g(Yes, No, false, false, "", "Δ")}, + {0x1d794, 0, 0, 0, g(Yes, No, false, false, "", "Ε")}, + {0x1d795, 0, 0, 0, g(Yes, No, false, false, "", "Ζ")}, + {0x1d796, 0, 0, 0, g(Yes, No, false, false, "", "Η")}, + {0x1d797, 0, 0, 0, g(Yes, No, false, false, "", "Θ")}, + {0x1d798, 0, 0, 0, g(Yes, No, false, false, "", "Ι")}, + {0x1d799, 0, 0, 0, g(Yes, No, false, false, "", "Κ")}, + {0x1d79a, 0, 0, 0, g(Yes, No, false, false, "", "Λ")}, + {0x1d79b, 0, 0, 0, g(Yes, No, false, false, "", "Μ")}, + {0x1d79c, 0, 0, 0, g(Yes, No, false, false, "", "Ν")}, + {0x1d79d, 0, 0, 0, g(Yes, No, false, false, "", "Ξ")}, + {0x1d79e, 0, 0, 0, g(Yes, No, false, false, "", "Ο")}, + {0x1d79f, 0, 0, 0, g(Yes, No, false, false, "", "Π")}, + {0x1d7a0, 0, 0, 0, g(Yes, No, false, false, "", "Ρ")}, + {0x1d7a1, 0, 0, 0, g(Yes, No, false, false, "", "Θ")}, + {0x1d7a2, 0, 0, 0, g(Yes, No, false, false, "", "Σ")}, + {0x1d7a3, 0, 0, 0, g(Yes, No, false, false, "", "Τ")}, + {0x1d7a4, 0, 0, 0, g(Yes, No, false, false, "", "Υ")}, + {0x1d7a5, 0, 0, 0, g(Yes, No, false, false, "", "Φ")}, + {0x1d7a6, 0, 0, 0, g(Yes, No, false, false, "", "Χ")}, + {0x1d7a7, 0, 0, 0, g(Yes, No, false, false, "", "Ψ")}, + {0x1d7a8, 0, 0, 0, g(Yes, No, false, false, "", "Ω")}, + {0x1d7a9, 0, 0, 0, g(Yes, No, false, false, "", "∇")}, + {0x1d7aa, 0, 0, 0, g(Yes, No, false, false, "", "α")}, + {0x1d7ab, 0, 0, 0, g(Yes, No, false, false, "", "β")}, + {0x1d7ac, 0, 0, 0, g(Yes, No, false, false, "", "γ")}, + {0x1d7ad, 0, 0, 0, g(Yes, No, false, false, "", "δ")}, + {0x1d7ae, 0, 0, 0, g(Yes, No, false, false, "", "ε")}, + {0x1d7af, 0, 0, 0, g(Yes, No, false, false, "", "ζ")}, + {0x1d7b0, 0, 0, 0, g(Yes, No, false, false, "", "η")}, + {0x1d7b1, 0, 0, 0, g(Yes, No, false, false, "", "θ")}, + {0x1d7b2, 0, 0, 0, g(Yes, No, false, false, "", "ι")}, + {0x1d7b3, 0, 0, 0, g(Yes, No, false, false, "", "κ")}, + {0x1d7b4, 0, 0, 0, g(Yes, No, false, false, "", "λ")}, + {0x1d7b5, 0, 0, 0, g(Yes, No, false, false, "", "μ")}, + {0x1d7b6, 0, 0, 0, g(Yes, No, false, false, "", "ν")}, + {0x1d7b7, 0, 0, 0, g(Yes, No, false, false, "", "ξ")}, + {0x1d7b8, 0, 0, 0, g(Yes, No, false, false, "", "ο")}, + {0x1d7b9, 0, 0, 0, g(Yes, No, false, false, "", "π")}, + {0x1d7ba, 0, 0, 0, g(Yes, No, false, false, "", "ρ")}, + {0x1d7bb, 0, 0, 0, g(Yes, No, false, false, "", "ς")}, + {0x1d7bc, 0, 0, 0, g(Yes, No, false, false, "", "σ")}, + {0x1d7bd, 0, 0, 0, g(Yes, No, false, false, "", "τ")}, + {0x1d7be, 0, 0, 0, g(Yes, No, false, false, "", "υ")}, + {0x1d7bf, 0, 0, 0, g(Yes, No, false, false, "", "φ")}, + {0x1d7c0, 0, 0, 0, g(Yes, No, false, false, "", "χ")}, + {0x1d7c1, 0, 0, 0, g(Yes, No, false, false, "", "ψ")}, + {0x1d7c2, 0, 0, 0, g(Yes, No, false, false, "", "ω")}, + {0x1d7c3, 0, 0, 0, g(Yes, No, false, false, "", "∂")}, + {0x1d7c4, 0, 0, 0, g(Yes, No, false, false, "", "ε")}, + {0x1d7c5, 0, 0, 0, g(Yes, No, false, false, "", "θ")}, + {0x1d7c6, 0, 0, 0, g(Yes, No, false, false, "", "κ")}, + {0x1d7c7, 0, 0, 0, g(Yes, No, false, false, "", "φ")}, + {0x1d7c8, 0, 0, 0, g(Yes, No, false, false, "", "ρ")}, + {0x1d7c9, 0, 0, 0, g(Yes, No, false, false, "", "π")}, + {0x1d7ca, 0, 0, 0, g(Yes, No, false, false, "", "Ϝ")}, + {0x1d7cb, 0, 0, 0, g(Yes, No, false, false, "", "ϝ")}, + {0x1d7cc, 0, 0, 0, f(Yes, false, "")}, + {0x1d7ce, 0, 0, 0, g(Yes, No, false, false, "", "0")}, + {0x1d7cf, 0, 0, 0, g(Yes, No, false, false, "", "1")}, + {0x1d7d0, 0, 0, 0, g(Yes, No, false, false, "", "2")}, + {0x1d7d1, 0, 0, 0, g(Yes, No, false, false, "", "3")}, + {0x1d7d2, 0, 0, 0, g(Yes, No, false, false, "", "4")}, + {0x1d7d3, 0, 0, 0, g(Yes, No, false, false, "", "5")}, + {0x1d7d4, 0, 0, 0, g(Yes, No, false, false, "", "6")}, + {0x1d7d5, 0, 0, 0, g(Yes, No, false, false, "", "7")}, + {0x1d7d6, 0, 0, 0, g(Yes, No, false, false, "", "8")}, + {0x1d7d7, 0, 0, 0, g(Yes, No, false, false, "", "9")}, + {0x1d7d8, 0, 0, 0, g(Yes, No, false, false, "", "0")}, + {0x1d7d9, 0, 0, 0, g(Yes, No, false, false, "", "1")}, + {0x1d7da, 0, 0, 0, g(Yes, No, false, false, "", "2")}, + {0x1d7db, 0, 0, 0, g(Yes, No, false, false, "", "3")}, + {0x1d7dc, 0, 0, 0, g(Yes, No, false, false, "", "4")}, + {0x1d7dd, 0, 0, 0, g(Yes, No, false, false, "", "5")}, + {0x1d7de, 0, 0, 0, g(Yes, No, false, false, "", "6")}, + {0x1d7df, 0, 0, 0, g(Yes, No, false, false, "", "7")}, + {0x1d7e0, 0, 0, 0, g(Yes, No, false, false, "", "8")}, + {0x1d7e1, 0, 0, 0, g(Yes, No, false, false, "", "9")}, + {0x1d7e2, 0, 0, 0, g(Yes, No, false, false, "", "0")}, + {0x1d7e3, 0, 0, 0, g(Yes, No, false, false, "", "1")}, + {0x1d7e4, 0, 0, 0, g(Yes, No, false, false, "", "2")}, + {0x1d7e5, 0, 0, 0, g(Yes, No, false, false, "", "3")}, + {0x1d7e6, 0, 0, 0, g(Yes, No, false, false, "", "4")}, + {0x1d7e7, 0, 0, 0, g(Yes, No, false, false, "", "5")}, + {0x1d7e8, 0, 0, 0, g(Yes, No, false, false, "", "6")}, + {0x1d7e9, 0, 0, 0, g(Yes, No, false, false, "", "7")}, + {0x1d7ea, 0, 0, 0, g(Yes, No, false, false, "", "8")}, + {0x1d7eb, 0, 0, 0, g(Yes, No, false, false, "", "9")}, + {0x1d7ec, 0, 0, 0, g(Yes, No, false, false, "", "0")}, + {0x1d7ed, 0, 0, 0, g(Yes, No, false, false, "", "1")}, + {0x1d7ee, 0, 0, 0, g(Yes, No, false, false, "", "2")}, + {0x1d7ef, 0, 0, 0, g(Yes, No, false, false, "", "3")}, + {0x1d7f0, 0, 0, 0, g(Yes, No, false, false, "", "4")}, + {0x1d7f1, 0, 0, 0, g(Yes, No, false, false, "", "5")}, + {0x1d7f2, 0, 0, 0, g(Yes, No, false, false, "", "6")}, + {0x1d7f3, 0, 0, 0, g(Yes, No, false, false, "", "7")}, + {0x1d7f4, 0, 0, 0, g(Yes, No, false, false, "", "8")}, + {0x1d7f5, 0, 0, 0, g(Yes, No, false, false, "", "9")}, + {0x1d7f6, 0, 0, 0, g(Yes, No, false, false, "", "0")}, + {0x1d7f7, 0, 0, 0, g(Yes, No, false, false, "", "1")}, + {0x1d7f8, 0, 0, 0, g(Yes, No, false, false, "", "2")}, + {0x1d7f9, 0, 0, 0, g(Yes, No, false, false, "", "3")}, + {0x1d7fa, 0, 0, 0, g(Yes, No, false, false, "", "4")}, + {0x1d7fb, 0, 0, 0, g(Yes, No, false, false, "", "5")}, + {0x1d7fc, 0, 0, 0, g(Yes, No, false, false, "", "6")}, + {0x1d7fd, 0, 0, 0, g(Yes, No, false, false, "", "7")}, + {0x1d7fe, 0, 0, 0, g(Yes, No, false, false, "", "8")}, + {0x1d7ff, 0, 0, 0, g(Yes, No, false, false, "", "9")}, + {0x1d800, 0, 0, 0, f(Yes, false, "")}, + {0x1e000, 230, 1, 1, f(Yes, false, "")}, + {0x1e007, 0, 0, 0, f(Yes, false, "")}, + {0x1e008, 230, 1, 1, f(Yes, false, "")}, + {0x1e019, 0, 0, 0, f(Yes, false, "")}, + {0x1e01b, 230, 1, 1, f(Yes, false, "")}, + {0x1e022, 0, 0, 0, f(Yes, false, "")}, + {0x1e023, 230, 1, 1, f(Yes, false, "")}, + {0x1e025, 0, 0, 0, f(Yes, false, "")}, + {0x1e026, 230, 1, 1, f(Yes, false, "")}, + {0x1e02b, 0, 0, 0, f(Yes, false, "")}, + {0x1e8d0, 220, 1, 1, f(Yes, false, "")}, + {0x1e8d7, 0, 0, 0, f(Yes, false, "")}, + {0x1e944, 230, 1, 1, f(Yes, false, "")}, + {0x1e94a, 7, 1, 1, f(Yes, false, "")}, + {0x1e94b, 0, 0, 0, f(Yes, false, "")}, + {0x1ee00, 0, 0, 0, g(Yes, No, false, false, "", "ا")}, + {0x1ee01, 0, 0, 0, g(Yes, No, false, false, "", "ب")}, + {0x1ee02, 0, 0, 0, g(Yes, No, false, false, "", "ج")}, + {0x1ee03, 0, 0, 0, g(Yes, No, false, false, "", "د")}, + {0x1ee04, 0, 0, 0, f(Yes, false, "")}, + {0x1ee05, 0, 0, 0, g(Yes, No, false, false, "", "و")}, + {0x1ee06, 0, 0, 0, g(Yes, No, false, false, "", "ز")}, + {0x1ee07, 0, 0, 0, g(Yes, No, false, false, "", "ح")}, + {0x1ee08, 0, 0, 0, g(Yes, No, false, false, "", "ط")}, + {0x1ee09, 0, 0, 0, g(Yes, No, false, false, "", "ي")}, + {0x1ee0a, 0, 0, 0, g(Yes, No, false, false, "", "ك")}, + {0x1ee0b, 0, 0, 0, g(Yes, No, false, false, "", "ل")}, + {0x1ee0c, 0, 0, 0, g(Yes, No, false, false, "", "م")}, + {0x1ee0d, 0, 0, 0, g(Yes, No, false, false, "", "ن")}, + {0x1ee0e, 0, 0, 0, g(Yes, No, false, false, "", "س")}, + {0x1ee0f, 0, 0, 0, g(Yes, No, false, false, "", "ع")}, + {0x1ee10, 0, 0, 0, g(Yes, No, false, false, "", "ف")}, + {0x1ee11, 0, 0, 0, g(Yes, No, false, false, "", "ص")}, + {0x1ee12, 0, 0, 0, g(Yes, No, false, false, "", "ق")}, + {0x1ee13, 0, 0, 0, g(Yes, No, false, false, "", "ر")}, + {0x1ee14, 0, 0, 0, g(Yes, No, false, false, "", "ش")}, + {0x1ee15, 0, 0, 0, g(Yes, No, false, false, "", "ت")}, + {0x1ee16, 0, 0, 0, g(Yes, No, false, false, "", "ث")}, + {0x1ee17, 0, 0, 0, g(Yes, No, false, false, "", "خ")}, + {0x1ee18, 0, 0, 0, g(Yes, No, false, false, "", "ذ")}, + {0x1ee19, 0, 0, 0, g(Yes, No, false, false, "", "ض")}, + {0x1ee1a, 0, 0, 0, g(Yes, No, false, false, "", "ظ")}, + {0x1ee1b, 0, 0, 0, g(Yes, No, false, false, "", "غ")}, + {0x1ee1c, 0, 0, 0, g(Yes, No, false, false, "", "ٮ")}, + {0x1ee1d, 0, 0, 0, g(Yes, No, false, false, "", "ں")}, + {0x1ee1e, 0, 0, 0, g(Yes, No, false, false, "", "ڡ")}, + {0x1ee1f, 0, 0, 0, g(Yes, No, false, false, "", "ٯ")}, + {0x1ee20, 0, 0, 0, f(Yes, false, "")}, + {0x1ee21, 0, 0, 0, g(Yes, No, false, false, "", "ب")}, + {0x1ee22, 0, 0, 0, g(Yes, No, false, false, "", "ج")}, + {0x1ee23, 0, 0, 0, f(Yes, false, "")}, + {0x1ee24, 0, 0, 0, g(Yes, No, false, false, "", "ه")}, + {0x1ee25, 0, 0, 0, f(Yes, false, "")}, + {0x1ee27, 0, 0, 0, g(Yes, No, false, false, "", "ح")}, + {0x1ee28, 0, 0, 0, f(Yes, false, "")}, + {0x1ee29, 0, 0, 0, g(Yes, No, false, false, "", "ي")}, + {0x1ee2a, 0, 0, 0, g(Yes, No, false, false, "", "ك")}, + {0x1ee2b, 0, 0, 0, g(Yes, No, false, false, "", "ل")}, + {0x1ee2c, 0, 0, 0, g(Yes, No, false, false, "", "م")}, + {0x1ee2d, 0, 0, 0, g(Yes, No, false, false, "", "ن")}, + {0x1ee2e, 0, 0, 0, g(Yes, No, false, false, "", "س")}, + {0x1ee2f, 0, 0, 0, g(Yes, No, false, false, "", "ع")}, + {0x1ee30, 0, 0, 0, g(Yes, No, false, false, "", "ف")}, + {0x1ee31, 0, 0, 0, g(Yes, No, false, false, "", "ص")}, + {0x1ee32, 0, 0, 0, g(Yes, No, false, false, "", "ق")}, + {0x1ee33, 0, 0, 0, f(Yes, false, "")}, + {0x1ee34, 0, 0, 0, g(Yes, No, false, false, "", "ش")}, + {0x1ee35, 0, 0, 0, g(Yes, No, false, false, "", "ت")}, + {0x1ee36, 0, 0, 0, g(Yes, No, false, false, "", "ث")}, + {0x1ee37, 0, 0, 0, g(Yes, No, false, false, "", "خ")}, + {0x1ee38, 0, 0, 0, f(Yes, false, "")}, + {0x1ee39, 0, 0, 0, g(Yes, No, false, false, "", "ض")}, + {0x1ee3a, 0, 0, 0, f(Yes, false, "")}, + {0x1ee3b, 0, 0, 0, g(Yes, No, false, false, "", "غ")}, + {0x1ee3c, 0, 0, 0, f(Yes, false, "")}, + {0x1ee42, 0, 0, 0, g(Yes, No, false, false, "", "ج")}, + {0x1ee43, 0, 0, 0, f(Yes, false, "")}, + {0x1ee47, 0, 0, 0, g(Yes, No, false, false, "", "ح")}, + {0x1ee48, 0, 0, 0, f(Yes, false, "")}, + {0x1ee49, 0, 0, 0, g(Yes, No, false, false, "", "ي")}, + {0x1ee4a, 0, 0, 0, f(Yes, false, "")}, + {0x1ee4b, 0, 0, 0, g(Yes, No, false, false, "", "ل")}, + {0x1ee4c, 0, 0, 0, f(Yes, false, "")}, + {0x1ee4d, 0, 0, 0, g(Yes, No, false, false, "", "ن")}, + {0x1ee4e, 0, 0, 0, g(Yes, No, false, false, "", "س")}, + {0x1ee4f, 0, 0, 0, g(Yes, No, false, false, "", "ع")}, + {0x1ee50, 0, 0, 0, f(Yes, false, "")}, + {0x1ee51, 0, 0, 0, g(Yes, No, false, false, "", "ص")}, + {0x1ee52, 0, 0, 0, g(Yes, No, false, false, "", "ق")}, + {0x1ee53, 0, 0, 0, f(Yes, false, "")}, + {0x1ee54, 0, 0, 0, g(Yes, No, false, false, "", "ش")}, + {0x1ee55, 0, 0, 0, f(Yes, false, "")}, + {0x1ee57, 0, 0, 0, g(Yes, No, false, false, "", "خ")}, + {0x1ee58, 0, 0, 0, f(Yes, false, "")}, + {0x1ee59, 0, 0, 0, g(Yes, No, false, false, "", "ض")}, + {0x1ee5a, 0, 0, 0, f(Yes, false, "")}, + {0x1ee5b, 0, 0, 0, g(Yes, No, false, false, "", "غ")}, + {0x1ee5c, 0, 0, 0, f(Yes, false, "")}, + {0x1ee5d, 0, 0, 0, g(Yes, No, false, false, "", "ں")}, + {0x1ee5e, 0, 0, 0, f(Yes, false, "")}, + {0x1ee5f, 0, 0, 0, g(Yes, No, false, false, "", "ٯ")}, + {0x1ee60, 0, 0, 0, f(Yes, false, "")}, + {0x1ee61, 0, 0, 0, g(Yes, No, false, false, "", "ب")}, + {0x1ee62, 0, 0, 0, g(Yes, No, false, false, "", "ج")}, + {0x1ee63, 0, 0, 0, f(Yes, false, "")}, + {0x1ee64, 0, 0, 0, g(Yes, No, false, false, "", "ه")}, + {0x1ee65, 0, 0, 0, f(Yes, false, "")}, + {0x1ee67, 0, 0, 0, g(Yes, No, false, false, "", "ح")}, + {0x1ee68, 0, 0, 0, g(Yes, No, false, false, "", "ط")}, + {0x1ee69, 0, 0, 0, g(Yes, No, false, false, "", "ي")}, + {0x1ee6a, 0, 0, 0, g(Yes, No, false, false, "", "ك")}, + {0x1ee6b, 0, 0, 0, f(Yes, false, "")}, + {0x1ee6c, 0, 0, 0, g(Yes, No, false, false, "", "م")}, + {0x1ee6d, 0, 0, 0, g(Yes, No, false, false, "", "ن")}, + {0x1ee6e, 0, 0, 0, g(Yes, No, false, false, "", "س")}, + {0x1ee6f, 0, 0, 0, g(Yes, No, false, false, "", "ع")}, + {0x1ee70, 0, 0, 0, g(Yes, No, false, false, "", "ف")}, + {0x1ee71, 0, 0, 0, g(Yes, No, false, false, "", "ص")}, + {0x1ee72, 0, 0, 0, g(Yes, No, false, false, "", "ق")}, + {0x1ee73, 0, 0, 0, f(Yes, false, "")}, + {0x1ee74, 0, 0, 0, g(Yes, No, false, false, "", "ش")}, + {0x1ee75, 0, 0, 0, g(Yes, No, false, false, "", "ت")}, + {0x1ee76, 0, 0, 0, g(Yes, No, false, false, "", "ث")}, + {0x1ee77, 0, 0, 0, g(Yes, No, false, false, "", "خ")}, + {0x1ee78, 0, 0, 0, f(Yes, false, "")}, + {0x1ee79, 0, 0, 0, g(Yes, No, false, false, "", "ض")}, + {0x1ee7a, 0, 0, 0, g(Yes, No, false, false, "", "ظ")}, + {0x1ee7b, 0, 0, 0, g(Yes, No, false, false, "", "غ")}, + {0x1ee7c, 0, 0, 0, g(Yes, No, false, false, "", "ٮ")}, + {0x1ee7d, 0, 0, 0, f(Yes, false, "")}, + {0x1ee7e, 0, 0, 0, g(Yes, No, false, false, "", "ڡ")}, + {0x1ee7f, 0, 0, 0, f(Yes, false, "")}, + {0x1ee80, 0, 0, 0, g(Yes, No, false, false, "", "ا")}, + {0x1ee81, 0, 0, 0, g(Yes, No, false, false, "", "ب")}, + {0x1ee82, 0, 0, 0, g(Yes, No, false, false, "", "ج")}, + {0x1ee83, 0, 0, 0, g(Yes, No, false, false, "", "د")}, + {0x1ee84, 0, 0, 0, g(Yes, No, false, false, "", "ه")}, + {0x1ee85, 0, 0, 0, g(Yes, No, false, false, "", "و")}, + {0x1ee86, 0, 0, 0, g(Yes, No, false, false, "", "ز")}, + {0x1ee87, 0, 0, 0, g(Yes, No, false, false, "", "ح")}, + {0x1ee88, 0, 0, 0, g(Yes, No, false, false, "", "ط")}, + {0x1ee89, 0, 0, 0, g(Yes, No, false, false, "", "ي")}, + {0x1ee8a, 0, 0, 0, f(Yes, false, "")}, + {0x1ee8b, 0, 0, 0, g(Yes, No, false, false, "", "ل")}, + {0x1ee8c, 0, 0, 0, g(Yes, No, false, false, "", "م")}, + {0x1ee8d, 0, 0, 0, g(Yes, No, false, false, "", "ن")}, + {0x1ee8e, 0, 0, 0, g(Yes, No, false, false, "", "س")}, + {0x1ee8f, 0, 0, 0, g(Yes, No, false, false, "", "ع")}, + {0x1ee90, 0, 0, 0, g(Yes, No, false, false, "", "ف")}, + {0x1ee91, 0, 0, 0, g(Yes, No, false, false, "", "ص")}, + {0x1ee92, 0, 0, 0, g(Yes, No, false, false, "", "ق")}, + {0x1ee93, 0, 0, 0, g(Yes, No, false, false, "", "ر")}, + {0x1ee94, 0, 0, 0, g(Yes, No, false, false, "", "ش")}, + {0x1ee95, 0, 0, 0, g(Yes, No, false, false, "", "ت")}, + {0x1ee96, 0, 0, 0, g(Yes, No, false, false, "", "ث")}, + {0x1ee97, 0, 0, 0, g(Yes, No, false, false, "", "خ")}, + {0x1ee98, 0, 0, 0, g(Yes, No, false, false, "", "ذ")}, + {0x1ee99, 0, 0, 0, g(Yes, No, false, false, "", "ض")}, + {0x1ee9a, 0, 0, 0, g(Yes, No, false, false, "", "ظ")}, + {0x1ee9b, 0, 0, 0, g(Yes, No, false, false, "", "غ")}, + {0x1ee9c, 0, 0, 0, f(Yes, false, "")}, + {0x1eea1, 0, 0, 0, g(Yes, No, false, false, "", "ب")}, + {0x1eea2, 0, 0, 0, g(Yes, No, false, false, "", "ج")}, + {0x1eea3, 0, 0, 0, g(Yes, No, false, false, "", "د")}, + {0x1eea4, 0, 0, 0, f(Yes, false, "")}, + {0x1eea5, 0, 0, 0, g(Yes, No, false, false, "", "و")}, + {0x1eea6, 0, 0, 0, g(Yes, No, false, false, "", "ز")}, + {0x1eea7, 0, 0, 0, g(Yes, No, false, false, "", "ح")}, + {0x1eea8, 0, 0, 0, g(Yes, No, false, false, "", "ط")}, + {0x1eea9, 0, 0, 0, g(Yes, No, false, false, "", "ي")}, + {0x1eeaa, 0, 0, 0, f(Yes, false, "")}, + {0x1eeab, 0, 0, 0, g(Yes, No, false, false, "", "ل")}, + {0x1eeac, 0, 0, 0, g(Yes, No, false, false, "", "م")}, + {0x1eead, 0, 0, 0, g(Yes, No, false, false, "", "ن")}, + {0x1eeae, 0, 0, 0, g(Yes, No, false, false, "", "س")}, + {0x1eeaf, 0, 0, 0, g(Yes, No, false, false, "", "ع")}, + {0x1eeb0, 0, 0, 0, g(Yes, No, false, false, "", "ف")}, + {0x1eeb1, 0, 0, 0, g(Yes, No, false, false, "", "ص")}, + {0x1eeb2, 0, 0, 0, g(Yes, No, false, false, "", "ق")}, + {0x1eeb3, 0, 0, 0, g(Yes, No, false, false, "", "ر")}, + {0x1eeb4, 0, 0, 0, g(Yes, No, false, false, "", "ش")}, + {0x1eeb5, 0, 0, 0, g(Yes, No, false, false, "", "ت")}, + {0x1eeb6, 0, 0, 0, g(Yes, No, false, false, "", "ث")}, + {0x1eeb7, 0, 0, 0, g(Yes, No, false, false, "", "خ")}, + {0x1eeb8, 0, 0, 0, g(Yes, No, false, false, "", "ذ")}, + {0x1eeb9, 0, 0, 0, g(Yes, No, false, false, "", "ض")}, + {0x1eeba, 0, 0, 0, g(Yes, No, false, false, "", "ظ")}, + {0x1eebb, 0, 0, 0, g(Yes, No, false, false, "", "غ")}, + {0x1eebc, 0, 0, 0, f(Yes, false, "")}, + {0x1f100, 0, 0, 0, g(Yes, No, false, false, "", "0.")}, + {0x1f101, 0, 0, 0, g(Yes, No, false, false, "", "0,")}, + {0x1f102, 0, 0, 0, g(Yes, No, false, false, "", "1,")}, + {0x1f103, 0, 0, 0, g(Yes, No, false, false, "", "2,")}, + {0x1f104, 0, 0, 0, g(Yes, No, false, false, "", "3,")}, + {0x1f105, 0, 0, 0, g(Yes, No, false, false, "", "4,")}, + {0x1f106, 0, 0, 0, g(Yes, No, false, false, "", "5,")}, + {0x1f107, 0, 0, 0, g(Yes, No, false, false, "", "6,")}, + {0x1f108, 0, 0, 0, g(Yes, No, false, false, "", "7,")}, + {0x1f109, 0, 0, 0, g(Yes, No, false, false, "", "8,")}, + {0x1f10a, 0, 0, 0, g(Yes, No, false, false, "", "9,")}, + {0x1f10b, 0, 0, 0, f(Yes, false, "")}, + {0x1f110, 0, 0, 0, g(Yes, No, false, false, "", "(A)")}, + {0x1f111, 0, 0, 0, g(Yes, No, false, false, "", "(B)")}, + {0x1f112, 0, 0, 0, g(Yes, No, false, false, "", "(C)")}, + {0x1f113, 0, 0, 0, g(Yes, No, false, false, "", "(D)")}, + {0x1f114, 0, 0, 0, g(Yes, No, false, false, "", "(E)")}, + {0x1f115, 0, 0, 0, g(Yes, No, false, false, "", "(F)")}, + {0x1f116, 0, 0, 0, g(Yes, No, false, false, "", "(G)")}, + {0x1f117, 0, 0, 0, g(Yes, No, false, false, "", "(H)")}, + {0x1f118, 0, 0, 0, g(Yes, No, false, false, "", "(I)")}, + {0x1f119, 0, 0, 0, g(Yes, No, false, false, "", "(J)")}, + {0x1f11a, 0, 0, 0, g(Yes, No, false, false, "", "(K)")}, + {0x1f11b, 0, 0, 0, g(Yes, No, false, false, "", "(L)")}, + {0x1f11c, 0, 0, 0, g(Yes, No, false, false, "", "(M)")}, + {0x1f11d, 0, 0, 0, g(Yes, No, false, false, "", "(N)")}, + {0x1f11e, 0, 0, 0, g(Yes, No, false, false, "", "(O)")}, + {0x1f11f, 0, 0, 0, g(Yes, No, false, false, "", "(P)")}, + {0x1f120, 0, 0, 0, g(Yes, No, false, false, "", "(Q)")}, + {0x1f121, 0, 0, 0, g(Yes, No, false, false, "", "(R)")}, + {0x1f122, 0, 0, 0, g(Yes, No, false, false, "", "(S)")}, + {0x1f123, 0, 0, 0, g(Yes, No, false, false, "", "(T)")}, + {0x1f124, 0, 0, 0, g(Yes, No, false, false, "", "(U)")}, + {0x1f125, 0, 0, 0, g(Yes, No, false, false, "", "(V)")}, + {0x1f126, 0, 0, 0, g(Yes, No, false, false, "", "(W)")}, + {0x1f127, 0, 0, 0, g(Yes, No, false, false, "", "(X)")}, + {0x1f128, 0, 0, 0, g(Yes, No, false, false, "", "(Y)")}, + {0x1f129, 0, 0, 0, g(Yes, No, false, false, "", "(Z)")}, + {0x1f12a, 0, 0, 0, g(Yes, No, false, false, "", "〔S〕")}, + {0x1f12b, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x1f12c, 0, 0, 0, g(Yes, No, false, false, "", "R")}, + {0x1f12d, 0, 0, 0, g(Yes, No, false, false, "", "CD")}, + {0x1f12e, 0, 0, 0, g(Yes, No, false, false, "", "WZ")}, + {0x1f12f, 0, 0, 0, f(Yes, false, "")}, + {0x1f130, 0, 0, 0, g(Yes, No, false, false, "", "A")}, + {0x1f131, 0, 0, 0, g(Yes, No, false, false, "", "B")}, + {0x1f132, 0, 0, 0, g(Yes, No, false, false, "", "C")}, + {0x1f133, 0, 0, 0, g(Yes, No, false, false, "", "D")}, + {0x1f134, 0, 0, 0, g(Yes, No, false, false, "", "E")}, + {0x1f135, 0, 0, 0, g(Yes, No, false, false, "", "F")}, + {0x1f136, 0, 0, 0, g(Yes, No, false, false, "", "G")}, + {0x1f137, 0, 0, 0, g(Yes, No, false, false, "", "H")}, + {0x1f138, 0, 0, 0, g(Yes, No, false, false, "", "I")}, + {0x1f139, 0, 0, 0, g(Yes, No, false, false, "", "J")}, + {0x1f13a, 0, 0, 0, g(Yes, No, false, false, "", "K")}, + {0x1f13b, 0, 0, 0, g(Yes, No, false, false, "", "L")}, + {0x1f13c, 0, 0, 0, g(Yes, No, false, false, "", "M")}, + {0x1f13d, 0, 0, 0, g(Yes, No, false, false, "", "N")}, + {0x1f13e, 0, 0, 0, g(Yes, No, false, false, "", "O")}, + {0x1f13f, 0, 0, 0, g(Yes, No, false, false, "", "P")}, + {0x1f140, 0, 0, 0, g(Yes, No, false, false, "", "Q")}, + {0x1f141, 0, 0, 0, g(Yes, No, false, false, "", "R")}, + {0x1f142, 0, 0, 0, g(Yes, No, false, false, "", "S")}, + {0x1f143, 0, 0, 0, g(Yes, No, false, false, "", "T")}, + {0x1f144, 0, 0, 0, g(Yes, No, false, false, "", "U")}, + {0x1f145, 0, 0, 0, g(Yes, No, false, false, "", "V")}, + {0x1f146, 0, 0, 0, g(Yes, No, false, false, "", "W")}, + {0x1f147, 0, 0, 0, g(Yes, No, false, false, "", "X")}, + {0x1f148, 0, 0, 0, g(Yes, No, false, false, "", "Y")}, + {0x1f149, 0, 0, 0, g(Yes, No, false, false, "", "Z")}, + {0x1f14a, 0, 0, 0, g(Yes, No, false, false, "", "HV")}, + {0x1f14b, 0, 0, 0, g(Yes, No, false, false, "", "MV")}, + {0x1f14c, 0, 0, 0, g(Yes, No, false, false, "", "SD")}, + {0x1f14d, 0, 0, 0, g(Yes, No, false, false, "", "SS")}, + {0x1f14e, 0, 0, 0, g(Yes, No, false, false, "", "PPV")}, + {0x1f14f, 0, 0, 0, g(Yes, No, false, false, "", "WC")}, + {0x1f150, 0, 0, 0, f(Yes, false, "")}, + {0x1f16a, 0, 0, 0, g(Yes, No, false, false, "", "MC")}, + {0x1f16b, 0, 0, 0, g(Yes, No, false, false, "", "MD")}, + {0x1f16c, 0, 0, 0, f(Yes, false, "")}, + {0x1f190, 0, 0, 0, g(Yes, No, false, false, "", "DJ")}, + {0x1f191, 0, 0, 0, f(Yes, false, "")}, + {0x1f200, 0, 0, 0, g(Yes, No, false, false, "", "ほか")}, + {0x1f201, 0, 0, 0, g(Yes, No, false, false, "", "ココ")}, + {0x1f202, 0, 0, 0, g(Yes, No, false, false, "", "サ")}, + {0x1f203, 0, 0, 0, f(Yes, false, "")}, + {0x1f210, 0, 0, 0, g(Yes, No, false, false, "", "手")}, + {0x1f211, 0, 0, 0, g(Yes, No, false, false, "", "字")}, + {0x1f212, 0, 0, 0, g(Yes, No, false, false, "", "双")}, + {0x1f213, 0, 0, 1, g(Yes, No, false, false, "", "デ")}, + {0x1f214, 0, 0, 0, g(Yes, No, false, false, "", "二")}, + {0x1f215, 0, 0, 0, g(Yes, No, false, false, "", "多")}, + {0x1f216, 0, 0, 0, g(Yes, No, false, false, "", "解")}, + {0x1f217, 0, 0, 0, g(Yes, No, false, false, "", "天")}, + {0x1f218, 0, 0, 0, g(Yes, No, false, false, "", "交")}, + {0x1f219, 0, 0, 0, g(Yes, No, false, false, "", "映")}, + {0x1f21a, 0, 0, 0, g(Yes, No, false, false, "", "無")}, + {0x1f21b, 0, 0, 0, g(Yes, No, false, false, "", "料")}, + {0x1f21c, 0, 0, 0, g(Yes, No, false, false, "", "前")}, + {0x1f21d, 0, 0, 0, g(Yes, No, false, false, "", "後")}, + {0x1f21e, 0, 0, 0, g(Yes, No, false, false, "", "再")}, + {0x1f21f, 0, 0, 0, g(Yes, No, false, false, "", "新")}, + {0x1f220, 0, 0, 0, g(Yes, No, false, false, "", "初")}, + {0x1f221, 0, 0, 0, g(Yes, No, false, false, "", "終")}, + {0x1f222, 0, 0, 0, g(Yes, No, false, false, "", "生")}, + {0x1f223, 0, 0, 0, g(Yes, No, false, false, "", "販")}, + {0x1f224, 0, 0, 0, g(Yes, No, false, false, "", "声")}, + {0x1f225, 0, 0, 0, g(Yes, No, false, false, "", "吹")}, + {0x1f226, 0, 0, 0, g(Yes, No, false, false, "", "演")}, + {0x1f227, 0, 0, 0, g(Yes, No, false, false, "", "投")}, + {0x1f228, 0, 0, 0, g(Yes, No, false, false, "", "捕")}, + {0x1f229, 0, 0, 0, g(Yes, No, false, false, "", "一")}, + {0x1f22a, 0, 0, 0, g(Yes, No, false, false, "", "三")}, + {0x1f22b, 0, 0, 0, g(Yes, No, false, false, "", "遊")}, + {0x1f22c, 0, 0, 0, g(Yes, No, false, false, "", "左")}, + {0x1f22d, 0, 0, 0, g(Yes, No, false, false, "", "中")}, + {0x1f22e, 0, 0, 0, g(Yes, No, false, false, "", "右")}, + {0x1f22f, 0, 0, 0, g(Yes, No, false, false, "", "指")}, + {0x1f230, 0, 0, 0, g(Yes, No, false, false, "", "走")}, + {0x1f231, 0, 0, 0, g(Yes, No, false, false, "", "打")}, + {0x1f232, 0, 0, 0, g(Yes, No, false, false, "", "禁")}, + {0x1f233, 0, 0, 0, g(Yes, No, false, false, "", "空")}, + {0x1f234, 0, 0, 0, g(Yes, No, false, false, "", "合")}, + {0x1f235, 0, 0, 0, g(Yes, No, false, false, "", "満")}, + {0x1f236, 0, 0, 0, g(Yes, No, false, false, "", "有")}, + {0x1f237, 0, 0, 0, g(Yes, No, false, false, "", "月")}, + {0x1f238, 0, 0, 0, g(Yes, No, false, false, "", "申")}, + {0x1f239, 0, 0, 0, g(Yes, No, false, false, "", "割")}, + {0x1f23a, 0, 0, 0, g(Yes, No, false, false, "", "営")}, + {0x1f23b, 0, 0, 0, g(Yes, No, false, false, "", "配")}, + {0x1f23c, 0, 0, 0, f(Yes, false, "")}, + {0x1f240, 0, 0, 0, g(Yes, No, false, false, "", "〔本〕")}, + {0x1f241, 0, 0, 0, g(Yes, No, false, false, "", "〔三〕")}, + {0x1f242, 0, 0, 0, g(Yes, No, false, false, "", "〔二〕")}, + {0x1f243, 0, 0, 0, g(Yes, No, false, false, "", "〔安〕")}, + {0x1f244, 0, 0, 0, g(Yes, No, false, false, "", "〔点〕")}, + {0x1f245, 0, 0, 0, g(Yes, No, false, false, "", "〔打〕")}, + {0x1f246, 0, 0, 0, g(Yes, No, false, false, "", "〔盗〕")}, + {0x1f247, 0, 0, 0, g(Yes, No, false, false, "", "〔勝〕")}, + {0x1f248, 0, 0, 0, g(Yes, No, false, false, "", "〔敗〕")}, + {0x1f249, 0, 0, 0, f(Yes, false, "")}, + {0x1f250, 0, 0, 0, g(Yes, No, false, false, "", "得")}, + {0x1f251, 0, 0, 0, g(Yes, No, false, false, "", "可")}, + {0x1f252, 0, 0, 0, f(Yes, false, "")}, + {0x2f800, 0, 0, 0, f(No, false, "丽")}, + {0x2f801, 0, 0, 0, f(No, false, "丸")}, + {0x2f802, 0, 0, 0, f(No, false, "乁")}, + {0x2f803, 0, 0, 0, f(No, false, "𠄢")}, + {0x2f804, 0, 0, 0, f(No, false, "你")}, + {0x2f805, 0, 0, 0, f(No, false, "侮")}, + {0x2f806, 0, 0, 0, f(No, false, "侻")}, + {0x2f807, 0, 0, 0, f(No, false, "倂")}, + {0x2f808, 0, 0, 0, f(No, false, "偺")}, + {0x2f809, 0, 0, 0, f(No, false, "備")}, + {0x2f80a, 0, 0, 0, f(No, false, "僧")}, + {0x2f80b, 0, 0, 0, f(No, false, "像")}, + {0x2f80c, 0, 0, 0, f(No, false, "㒞")}, + {0x2f80d, 0, 0, 0, f(No, false, "𠘺")}, + {0x2f80e, 0, 0, 0, f(No, false, "免")}, + {0x2f80f, 0, 0, 0, f(No, false, "兔")}, + {0x2f810, 0, 0, 0, f(No, false, "兤")}, + {0x2f811, 0, 0, 0, f(No, false, "具")}, + {0x2f812, 0, 0, 0, f(No, false, "𠔜")}, + {0x2f813, 0, 0, 0, f(No, false, "㒹")}, + {0x2f814, 0, 0, 0, f(No, false, "內")}, + {0x2f815, 0, 0, 0, f(No, false, "再")}, + {0x2f816, 0, 0, 0, f(No, false, "𠕋")}, + {0x2f817, 0, 0, 0, f(No, false, "冗")}, + {0x2f818, 0, 0, 0, f(No, false, "冤")}, + {0x2f819, 0, 0, 0, f(No, false, "仌")}, + {0x2f81a, 0, 0, 0, f(No, false, "冬")}, + {0x2f81b, 0, 0, 0, f(No, false, "况")}, + {0x2f81c, 0, 0, 0, f(No, false, "𩇟")}, + {0x2f81d, 0, 0, 0, f(No, false, "凵")}, + {0x2f81e, 0, 0, 0, f(No, false, "刃")}, + {0x2f81f, 0, 0, 0, f(No, false, "㓟")}, + {0x2f820, 0, 0, 0, f(No, false, "刻")}, + {0x2f821, 0, 0, 0, f(No, false, "剆")}, + {0x2f822, 0, 0, 0, f(No, false, "割")}, + {0x2f823, 0, 0, 0, f(No, false, "剷")}, + {0x2f824, 0, 0, 0, f(No, false, "㔕")}, + {0x2f825, 0, 0, 0, f(No, false, "勇")}, + {0x2f826, 0, 0, 0, f(No, false, "勉")}, + {0x2f827, 0, 0, 0, f(No, false, "勤")}, + {0x2f828, 0, 0, 0, f(No, false, "勺")}, + {0x2f829, 0, 0, 0, f(No, false, "包")}, + {0x2f82a, 0, 0, 0, f(No, false, "匆")}, + {0x2f82b, 0, 0, 0, f(No, false, "北")}, + {0x2f82c, 0, 0, 0, f(No, false, "卉")}, + {0x2f82d, 0, 0, 0, f(No, false, "卑")}, + {0x2f82e, 0, 0, 0, f(No, false, "博")}, + {0x2f82f, 0, 0, 0, f(No, false, "即")}, + {0x2f830, 0, 0, 0, f(No, false, "卽")}, + {0x2f831, 0, 0, 0, f(No, false, "卿")}, + {0x2f834, 0, 0, 0, f(No, false, "𠨬")}, + {0x2f835, 0, 0, 0, f(No, false, "灰")}, + {0x2f836, 0, 0, 0, f(No, false, "及")}, + {0x2f837, 0, 0, 0, f(No, false, "叟")}, + {0x2f838, 0, 0, 0, f(No, false, "𠭣")}, + {0x2f839, 0, 0, 0, f(No, false, "叫")}, + {0x2f83a, 0, 0, 0, f(No, false, "叱")}, + {0x2f83b, 0, 0, 0, f(No, false, "吆")}, + {0x2f83c, 0, 0, 0, f(No, false, "咞")}, + {0x2f83d, 0, 0, 0, f(No, false, "吸")}, + {0x2f83e, 0, 0, 0, f(No, false, "呈")}, + {0x2f83f, 0, 0, 0, f(No, false, "周")}, + {0x2f840, 0, 0, 0, f(No, false, "咢")}, + {0x2f841, 0, 0, 0, f(No, false, "哶")}, + {0x2f842, 0, 0, 0, f(No, false, "唐")}, + {0x2f843, 0, 0, 0, f(No, false, "啓")}, + {0x2f844, 0, 0, 0, f(No, false, "啣")}, + {0x2f845, 0, 0, 0, f(No, false, "善")}, + {0x2f847, 0, 0, 0, f(No, false, "喙")}, + {0x2f848, 0, 0, 0, f(No, false, "喫")}, + {0x2f849, 0, 0, 0, f(No, false, "喳")}, + {0x2f84a, 0, 0, 0, f(No, false, "嗂")}, + {0x2f84b, 0, 0, 0, f(No, false, "圖")}, + {0x2f84c, 0, 0, 0, f(No, false, "嘆")}, + {0x2f84d, 0, 0, 0, f(No, false, "圗")}, + {0x2f84e, 0, 0, 0, f(No, false, "噑")}, + {0x2f84f, 0, 0, 0, f(No, false, "噴")}, + {0x2f850, 0, 0, 0, f(No, false, "切")}, + {0x2f851, 0, 0, 0, f(No, false, "壮")}, + {0x2f852, 0, 0, 0, f(No, false, "城")}, + {0x2f853, 0, 0, 0, f(No, false, "埴")}, + {0x2f854, 0, 0, 0, f(No, false, "堍")}, + {0x2f855, 0, 0, 0, f(No, false, "型")}, + {0x2f856, 0, 0, 0, f(No, false, "堲")}, + {0x2f857, 0, 0, 0, f(No, false, "報")}, + {0x2f858, 0, 0, 0, f(No, false, "墬")}, + {0x2f859, 0, 0, 0, f(No, false, "𡓤")}, + {0x2f85a, 0, 0, 0, f(No, false, "売")}, + {0x2f85b, 0, 0, 0, f(No, false, "壷")}, + {0x2f85c, 0, 0, 0, f(No, false, "夆")}, + {0x2f85d, 0, 0, 0, f(No, false, "多")}, + {0x2f85e, 0, 0, 0, f(No, false, "夢")}, + {0x2f85f, 0, 0, 0, f(No, false, "奢")}, + {0x2f860, 0, 0, 0, f(No, false, "𡚨")}, + {0x2f861, 0, 0, 0, f(No, false, "𡛪")}, + {0x2f862, 0, 0, 0, f(No, false, "姬")}, + {0x2f863, 0, 0, 0, f(No, false, "娛")}, + {0x2f864, 0, 0, 0, f(No, false, "娧")}, + {0x2f865, 0, 0, 0, f(No, false, "姘")}, + {0x2f866, 0, 0, 0, f(No, false, "婦")}, + {0x2f867, 0, 0, 0, f(No, false, "㛮")}, + {0x2f868, 0, 0, 0, f(No, false, "㛼")}, + {0x2f869, 0, 0, 0, f(No, false, "嬈")}, + {0x2f86a, 0, 0, 0, f(No, false, "嬾")}, + {0x2f86c, 0, 0, 0, f(No, false, "𡧈")}, + {0x2f86d, 0, 0, 0, f(No, false, "寃")}, + {0x2f86e, 0, 0, 0, f(No, false, "寘")}, + {0x2f86f, 0, 0, 0, f(No, false, "寧")}, + {0x2f870, 0, 0, 0, f(No, false, "寳")}, + {0x2f871, 0, 0, 0, f(No, false, "𡬘")}, + {0x2f872, 0, 0, 0, f(No, false, "寿")}, + {0x2f873, 0, 0, 0, f(No, false, "将")}, + {0x2f874, 0, 0, 0, f(No, false, "当")}, + {0x2f875, 0, 0, 0, f(No, false, "尢")}, + {0x2f876, 0, 0, 0, f(No, false, "㞁")}, + {0x2f877, 0, 0, 0, f(No, false, "屠")}, + {0x2f878, 0, 0, 0, f(No, false, "屮")}, + {0x2f879, 0, 0, 0, f(No, false, "峀")}, + {0x2f87a, 0, 0, 0, f(No, false, "岍")}, + {0x2f87b, 0, 0, 0, f(No, false, "𡷤")}, + {0x2f87c, 0, 0, 0, f(No, false, "嵃")}, + {0x2f87d, 0, 0, 0, f(No, false, "𡷦")}, + {0x2f87e, 0, 0, 0, f(No, false, "嵮")}, + {0x2f87f, 0, 0, 0, f(No, false, "嵫")}, + {0x2f880, 0, 0, 0, f(No, false, "嵼")}, + {0x2f881, 0, 0, 0, f(No, false, "巡")}, + {0x2f882, 0, 0, 0, f(No, false, "巢")}, + {0x2f883, 0, 0, 0, f(No, false, "㠯")}, + {0x2f884, 0, 0, 0, f(No, false, "巽")}, + {0x2f885, 0, 0, 0, f(No, false, "帨")}, + {0x2f886, 0, 0, 0, f(No, false, "帽")}, + {0x2f887, 0, 0, 0, f(No, false, "幩")}, + {0x2f888, 0, 0, 0, f(No, false, "㡢")}, + {0x2f889, 0, 0, 0, f(No, false, "𢆃")}, + {0x2f88a, 0, 0, 0, f(No, false, "㡼")}, + {0x2f88b, 0, 0, 0, f(No, false, "庰")}, + {0x2f88c, 0, 0, 0, f(No, false, "庳")}, + {0x2f88d, 0, 0, 0, f(No, false, "庶")}, + {0x2f88e, 0, 0, 0, f(No, false, "廊")}, + {0x2f88f, 0, 0, 0, f(No, false, "𪎒")}, + {0x2f890, 0, 0, 0, f(No, false, "廾")}, + {0x2f891, 0, 0, 0, f(No, false, "𢌱")}, + {0x2f893, 0, 0, 0, f(No, false, "舁")}, + {0x2f894, 0, 0, 0, f(No, false, "弢")}, + {0x2f896, 0, 0, 0, f(No, false, "㣇")}, + {0x2f897, 0, 0, 0, f(No, false, "𣊸")}, + {0x2f898, 0, 0, 0, f(No, false, "𦇚")}, + {0x2f899, 0, 0, 0, f(No, false, "形")}, + {0x2f89a, 0, 0, 0, f(No, false, "彫")}, + {0x2f89b, 0, 0, 0, f(No, false, "㣣")}, + {0x2f89c, 0, 0, 0, f(No, false, "徚")}, + {0x2f89d, 0, 0, 0, f(No, false, "忍")}, + {0x2f89e, 0, 0, 0, f(No, false, "志")}, + {0x2f89f, 0, 0, 0, f(No, false, "忹")}, + {0x2f8a0, 0, 0, 0, f(No, false, "悁")}, + {0x2f8a1, 0, 0, 0, f(No, false, "㤺")}, + {0x2f8a2, 0, 0, 0, f(No, false, "㤜")}, + {0x2f8a3, 0, 0, 0, f(No, false, "悔")}, + {0x2f8a4, 0, 0, 0, f(No, false, "𢛔")}, + {0x2f8a5, 0, 0, 0, f(No, false, "惇")}, + {0x2f8a6, 0, 0, 0, f(No, false, "慈")}, + {0x2f8a7, 0, 0, 0, f(No, false, "慌")}, + {0x2f8a8, 0, 0, 0, f(No, false, "慎")}, + {0x2f8a9, 0, 0, 0, f(No, false, "慌")}, + {0x2f8aa, 0, 0, 0, f(No, false, "慺")}, + {0x2f8ab, 0, 0, 0, f(No, false, "憎")}, + {0x2f8ac, 0, 0, 0, f(No, false, "憲")}, + {0x2f8ad, 0, 0, 0, f(No, false, "憤")}, + {0x2f8ae, 0, 0, 0, f(No, false, "憯")}, + {0x2f8af, 0, 0, 0, f(No, false, "懞")}, + {0x2f8b0, 0, 0, 0, f(No, false, "懲")}, + {0x2f8b1, 0, 0, 0, f(No, false, "懶")}, + {0x2f8b2, 0, 0, 0, f(No, false, "成")}, + {0x2f8b3, 0, 0, 0, f(No, false, "戛")}, + {0x2f8b4, 0, 0, 0, f(No, false, "扝")}, + {0x2f8b5, 0, 0, 0, f(No, false, "抱")}, + {0x2f8b6, 0, 0, 0, f(No, false, "拔")}, + {0x2f8b7, 0, 0, 0, f(No, false, "捐")}, + {0x2f8b8, 0, 0, 0, f(No, false, "𢬌")}, + {0x2f8b9, 0, 0, 0, f(No, false, "挽")}, + {0x2f8ba, 0, 0, 0, f(No, false, "拼")}, + {0x2f8bb, 0, 0, 0, f(No, false, "捨")}, + {0x2f8bc, 0, 0, 0, f(No, false, "掃")}, + {0x2f8bd, 0, 0, 0, f(No, false, "揤")}, + {0x2f8be, 0, 0, 0, f(No, false, "𢯱")}, + {0x2f8bf, 0, 0, 0, f(No, false, "搢")}, + {0x2f8c0, 0, 0, 0, f(No, false, "揅")}, + {0x2f8c1, 0, 0, 0, f(No, false, "掩")}, + {0x2f8c2, 0, 0, 0, f(No, false, "㨮")}, + {0x2f8c3, 0, 0, 0, f(No, false, "摩")}, + {0x2f8c4, 0, 0, 0, f(No, false, "摾")}, + {0x2f8c5, 0, 0, 0, f(No, false, "撝")}, + {0x2f8c6, 0, 0, 0, f(No, false, "摷")}, + {0x2f8c7, 0, 0, 0, f(No, false, "㩬")}, + {0x2f8c8, 0, 0, 0, f(No, false, "敏")}, + {0x2f8c9, 0, 0, 0, f(No, false, "敬")}, + {0x2f8ca, 0, 0, 0, f(No, false, "𣀊")}, + {0x2f8cb, 0, 0, 0, f(No, false, "旣")}, + {0x2f8cc, 0, 0, 0, f(No, false, "書")}, + {0x2f8cd, 0, 0, 0, f(No, false, "晉")}, + {0x2f8ce, 0, 0, 0, f(No, false, "㬙")}, + {0x2f8cf, 0, 0, 0, f(No, false, "暑")}, + {0x2f8d0, 0, 0, 0, f(No, false, "㬈")}, + {0x2f8d1, 0, 0, 0, f(No, false, "㫤")}, + {0x2f8d2, 0, 0, 0, f(No, false, "冒")}, + {0x2f8d3, 0, 0, 0, f(No, false, "冕")}, + {0x2f8d4, 0, 0, 0, f(No, false, "最")}, + {0x2f8d5, 0, 0, 0, f(No, false, "暜")}, + {0x2f8d6, 0, 0, 0, f(No, false, "肭")}, + {0x2f8d7, 0, 0, 0, f(No, false, "䏙")}, + {0x2f8d8, 0, 0, 0, f(No, false, "朗")}, + {0x2f8d9, 0, 0, 0, f(No, false, "望")}, + {0x2f8da, 0, 0, 0, f(No, false, "朡")}, + {0x2f8db, 0, 0, 0, f(No, false, "杞")}, + {0x2f8dc, 0, 0, 0, f(No, false, "杓")}, + {0x2f8dd, 0, 0, 0, f(No, false, "𣏃")}, + {0x2f8de, 0, 0, 0, f(No, false, "㭉")}, + {0x2f8df, 0, 0, 0, f(No, false, "柺")}, + {0x2f8e0, 0, 0, 0, f(No, false, "枅")}, + {0x2f8e1, 0, 0, 0, f(No, false, "桒")}, + {0x2f8e2, 0, 0, 0, f(No, false, "梅")}, + {0x2f8e3, 0, 0, 0, f(No, false, "𣑭")}, + {0x2f8e4, 0, 0, 0, f(No, false, "梎")}, + {0x2f8e5, 0, 0, 0, f(No, false, "栟")}, + {0x2f8e6, 0, 0, 0, f(No, false, "椔")}, + {0x2f8e7, 0, 0, 0, f(No, false, "㮝")}, + {0x2f8e8, 0, 0, 0, f(No, false, "楂")}, + {0x2f8e9, 0, 0, 0, f(No, false, "榣")}, + {0x2f8ea, 0, 0, 0, f(No, false, "槪")}, + {0x2f8eb, 0, 0, 0, f(No, false, "檨")}, + {0x2f8ec, 0, 0, 0, f(No, false, "𣚣")}, + {0x2f8ed, 0, 0, 0, f(No, false, "櫛")}, + {0x2f8ee, 0, 0, 0, f(No, false, "㰘")}, + {0x2f8ef, 0, 0, 0, f(No, false, "次")}, + {0x2f8f0, 0, 0, 0, f(No, false, "𣢧")}, + {0x2f8f1, 0, 0, 0, f(No, false, "歔")}, + {0x2f8f2, 0, 0, 0, f(No, false, "㱎")}, + {0x2f8f3, 0, 0, 0, f(No, false, "歲")}, + {0x2f8f4, 0, 0, 0, f(No, false, "殟")}, + {0x2f8f5, 0, 0, 0, f(No, false, "殺")}, + {0x2f8f6, 0, 0, 0, f(No, false, "殻")}, + {0x2f8f7, 0, 0, 0, f(No, false, "𣪍")}, + {0x2f8f8, 0, 0, 0, f(No, false, "𡴋")}, + {0x2f8f9, 0, 0, 0, f(No, false, "𣫺")}, + {0x2f8fa, 0, 0, 0, f(No, false, "汎")}, + {0x2f8fb, 0, 0, 0, f(No, false, "𣲼")}, + {0x2f8fc, 0, 0, 0, f(No, false, "沿")}, + {0x2f8fd, 0, 0, 0, f(No, false, "泍")}, + {0x2f8fe, 0, 0, 0, f(No, false, "汧")}, + {0x2f8ff, 0, 0, 0, f(No, false, "洖")}, + {0x2f900, 0, 0, 0, f(No, false, "派")}, + {0x2f901, 0, 0, 0, f(No, false, "海")}, + {0x2f902, 0, 0, 0, f(No, false, "流")}, + {0x2f903, 0, 0, 0, f(No, false, "浩")}, + {0x2f904, 0, 0, 0, f(No, false, "浸")}, + {0x2f905, 0, 0, 0, f(No, false, "涅")}, + {0x2f906, 0, 0, 0, f(No, false, "𣴞")}, + {0x2f907, 0, 0, 0, f(No, false, "洴")}, + {0x2f908, 0, 0, 0, f(No, false, "港")}, + {0x2f909, 0, 0, 0, f(No, false, "湮")}, + {0x2f90a, 0, 0, 0, f(No, false, "㴳")}, + {0x2f90b, 0, 0, 0, f(No, false, "滋")}, + {0x2f90c, 0, 0, 0, f(No, false, "滇")}, + {0x2f90d, 0, 0, 0, f(No, false, "𣻑")}, + {0x2f90e, 0, 0, 0, f(No, false, "淹")}, + {0x2f90f, 0, 0, 0, f(No, false, "潮")}, + {0x2f910, 0, 0, 0, f(No, false, "𣽞")}, + {0x2f911, 0, 0, 0, f(No, false, "𣾎")}, + {0x2f912, 0, 0, 0, f(No, false, "濆")}, + {0x2f913, 0, 0, 0, f(No, false, "瀹")}, + {0x2f914, 0, 0, 0, f(No, false, "瀞")}, + {0x2f915, 0, 0, 0, f(No, false, "瀛")}, + {0x2f916, 0, 0, 0, f(No, false, "㶖")}, + {0x2f917, 0, 0, 0, f(No, false, "灊")}, + {0x2f918, 0, 0, 0, f(No, false, "災")}, + {0x2f919, 0, 0, 0, f(No, false, "灷")}, + {0x2f91a, 0, 0, 0, f(No, false, "炭")}, + {0x2f91b, 0, 0, 0, f(No, false, "𠔥")}, + {0x2f91c, 0, 0, 0, f(No, false, "煅")}, + {0x2f91d, 0, 0, 0, f(No, false, "𤉣")}, + {0x2f91e, 0, 0, 0, f(No, false, "熜")}, + {0x2f91f, 0, 0, 0, f(No, false, "𤎫")}, + {0x2f920, 0, 0, 0, f(No, false, "爨")}, + {0x2f921, 0, 0, 0, f(No, false, "爵")}, + {0x2f922, 0, 0, 0, f(No, false, "牐")}, + {0x2f923, 0, 0, 0, f(No, false, "𤘈")}, + {0x2f924, 0, 0, 0, f(No, false, "犀")}, + {0x2f925, 0, 0, 0, f(No, false, "犕")}, + {0x2f926, 0, 0, 0, f(No, false, "𤜵")}, + {0x2f927, 0, 0, 0, f(No, false, "𤠔")}, + {0x2f928, 0, 0, 0, f(No, false, "獺")}, + {0x2f929, 0, 0, 0, f(No, false, "王")}, + {0x2f92a, 0, 0, 0, f(No, false, "㺬")}, + {0x2f92b, 0, 0, 0, f(No, false, "玥")}, + {0x2f92c, 0, 0, 0, f(No, false, "㺸")}, + {0x2f92e, 0, 0, 0, f(No, false, "瑇")}, + {0x2f92f, 0, 0, 0, f(No, false, "瑜")}, + {0x2f930, 0, 0, 0, f(No, false, "瑱")}, + {0x2f931, 0, 0, 0, f(No, false, "璅")}, + {0x2f932, 0, 0, 0, f(No, false, "瓊")}, + {0x2f933, 0, 0, 0, f(No, false, "㼛")}, + {0x2f934, 0, 0, 0, f(No, false, "甤")}, + {0x2f935, 0, 0, 0, f(No, false, "𤰶")}, + {0x2f936, 0, 0, 0, f(No, false, "甾")}, + {0x2f937, 0, 0, 0, f(No, false, "𤲒")}, + {0x2f938, 0, 0, 0, f(No, false, "異")}, + {0x2f939, 0, 0, 0, f(No, false, "𢆟")}, + {0x2f93a, 0, 0, 0, f(No, false, "瘐")}, + {0x2f93b, 0, 0, 0, f(No, false, "𤾡")}, + {0x2f93c, 0, 0, 0, f(No, false, "𤾸")}, + {0x2f93d, 0, 0, 0, f(No, false, "𥁄")}, + {0x2f93e, 0, 0, 0, f(No, false, "㿼")}, + {0x2f93f, 0, 0, 0, f(No, false, "䀈")}, + {0x2f940, 0, 0, 0, f(No, false, "直")}, + {0x2f941, 0, 0, 0, f(No, false, "𥃳")}, + {0x2f942, 0, 0, 0, f(No, false, "𥃲")}, + {0x2f943, 0, 0, 0, f(No, false, "𥄙")}, + {0x2f944, 0, 0, 0, f(No, false, "𥄳")}, + {0x2f945, 0, 0, 0, f(No, false, "眞")}, + {0x2f946, 0, 0, 0, f(No, false, "真")}, + {0x2f948, 0, 0, 0, f(No, false, "睊")}, + {0x2f949, 0, 0, 0, f(No, false, "䀹")}, + {0x2f94a, 0, 0, 0, f(No, false, "瞋")}, + {0x2f94b, 0, 0, 0, f(No, false, "䁆")}, + {0x2f94c, 0, 0, 0, f(No, false, "䂖")}, + {0x2f94d, 0, 0, 0, f(No, false, "𥐝")}, + {0x2f94e, 0, 0, 0, f(No, false, "硎")}, + {0x2f94f, 0, 0, 0, f(No, false, "碌")}, + {0x2f950, 0, 0, 0, f(No, false, "磌")}, + {0x2f951, 0, 0, 0, f(No, false, "䃣")}, + {0x2f952, 0, 0, 0, f(No, false, "𥘦")}, + {0x2f953, 0, 0, 0, f(No, false, "祖")}, + {0x2f954, 0, 0, 0, f(No, false, "𥚚")}, + {0x2f955, 0, 0, 0, f(No, false, "𥛅")}, + {0x2f956, 0, 0, 0, f(No, false, "福")}, + {0x2f957, 0, 0, 0, f(No, false, "秫")}, + {0x2f958, 0, 0, 0, f(No, false, "䄯")}, + {0x2f959, 0, 0, 0, f(No, false, "穀")}, + {0x2f95a, 0, 0, 0, f(No, false, "穊")}, + {0x2f95b, 0, 0, 0, f(No, false, "穏")}, + {0x2f95c, 0, 0, 0, f(No, false, "𥥼")}, + {0x2f95d, 0, 0, 0, f(No, false, "𥪧")}, + {0x2f95f, 0, 0, 0, f(No, false, "竮")}, + {0x2f960, 0, 0, 0, f(No, false, "䈂")}, + {0x2f961, 0, 0, 0, f(No, false, "𥮫")}, + {0x2f962, 0, 0, 0, f(No, false, "篆")}, + {0x2f963, 0, 0, 0, f(No, false, "築")}, + {0x2f964, 0, 0, 0, f(No, false, "䈧")}, + {0x2f965, 0, 0, 0, f(No, false, "𥲀")}, + {0x2f966, 0, 0, 0, f(No, false, "糒")}, + {0x2f967, 0, 0, 0, f(No, false, "䊠")}, + {0x2f968, 0, 0, 0, f(No, false, "糨")}, + {0x2f969, 0, 0, 0, f(No, false, "糣")}, + {0x2f96a, 0, 0, 0, f(No, false, "紀")}, + {0x2f96b, 0, 0, 0, f(No, false, "𥾆")}, + {0x2f96c, 0, 0, 0, f(No, false, "絣")}, + {0x2f96d, 0, 0, 0, f(No, false, "䌁")}, + {0x2f96e, 0, 0, 0, f(No, false, "緇")}, + {0x2f96f, 0, 0, 0, f(No, false, "縂")}, + {0x2f970, 0, 0, 0, f(No, false, "繅")}, + {0x2f971, 0, 0, 0, f(No, false, "䌴")}, + {0x2f972, 0, 0, 0, f(No, false, "𦈨")}, + {0x2f973, 0, 0, 0, f(No, false, "𦉇")}, + {0x2f974, 0, 0, 0, f(No, false, "䍙")}, + {0x2f975, 0, 0, 0, f(No, false, "𦋙")}, + {0x2f976, 0, 0, 0, f(No, false, "罺")}, + {0x2f977, 0, 0, 0, f(No, false, "𦌾")}, + {0x2f978, 0, 0, 0, f(No, false, "羕")}, + {0x2f979, 0, 0, 0, f(No, false, "翺")}, + {0x2f97a, 0, 0, 0, f(No, false, "者")}, + {0x2f97b, 0, 0, 0, f(No, false, "𦓚")}, + {0x2f97c, 0, 0, 0, f(No, false, "𦔣")}, + {0x2f97d, 0, 0, 0, f(No, false, "聠")}, + {0x2f97e, 0, 0, 0, f(No, false, "𦖨")}, + {0x2f97f, 0, 0, 0, f(No, false, "聰")}, + {0x2f980, 0, 0, 0, f(No, false, "𣍟")}, + {0x2f981, 0, 0, 0, f(No, false, "䏕")}, + {0x2f982, 0, 0, 0, f(No, false, "育")}, + {0x2f983, 0, 0, 0, f(No, false, "脃")}, + {0x2f984, 0, 0, 0, f(No, false, "䐋")}, + {0x2f985, 0, 0, 0, f(No, false, "脾")}, + {0x2f986, 0, 0, 0, f(No, false, "媵")}, + {0x2f987, 0, 0, 0, f(No, false, "𦞧")}, + {0x2f988, 0, 0, 0, f(No, false, "𦞵")}, + {0x2f989, 0, 0, 0, f(No, false, "𣎓")}, + {0x2f98a, 0, 0, 0, f(No, false, "𣎜")}, + {0x2f98b, 0, 0, 0, f(No, false, "舁")}, + {0x2f98c, 0, 0, 0, f(No, false, "舄")}, + {0x2f98d, 0, 0, 0, f(No, false, "辞")}, + {0x2f98e, 0, 0, 0, f(No, false, "䑫")}, + {0x2f98f, 0, 0, 0, f(No, false, "芑")}, + {0x2f990, 0, 0, 0, f(No, false, "芋")}, + {0x2f991, 0, 0, 0, f(No, false, "芝")}, + {0x2f992, 0, 0, 0, f(No, false, "劳")}, + {0x2f993, 0, 0, 0, f(No, false, "花")}, + {0x2f994, 0, 0, 0, f(No, false, "芳")}, + {0x2f995, 0, 0, 0, f(No, false, "芽")}, + {0x2f996, 0, 0, 0, f(No, false, "苦")}, + {0x2f997, 0, 0, 0, f(No, false, "𦬼")}, + {0x2f998, 0, 0, 0, f(No, false, "若")}, + {0x2f999, 0, 0, 0, f(No, false, "茝")}, + {0x2f99a, 0, 0, 0, f(No, false, "荣")}, + {0x2f99b, 0, 0, 0, f(No, false, "莭")}, + {0x2f99c, 0, 0, 0, f(No, false, "茣")}, + {0x2f99d, 0, 0, 0, f(No, false, "莽")}, + {0x2f99e, 0, 0, 0, f(No, false, "菧")}, + {0x2f99f, 0, 0, 0, f(No, false, "著")}, + {0x2f9a0, 0, 0, 0, f(No, false, "荓")}, + {0x2f9a1, 0, 0, 0, f(No, false, "菊")}, + {0x2f9a2, 0, 0, 0, f(No, false, "菌")}, + {0x2f9a3, 0, 0, 0, f(No, false, "菜")}, + {0x2f9a4, 0, 0, 0, f(No, false, "𦰶")}, + {0x2f9a5, 0, 0, 0, f(No, false, "𦵫")}, + {0x2f9a6, 0, 0, 0, f(No, false, "𦳕")}, + {0x2f9a7, 0, 0, 0, f(No, false, "䔫")}, + {0x2f9a8, 0, 0, 0, f(No, false, "蓱")}, + {0x2f9a9, 0, 0, 0, f(No, false, "蓳")}, + {0x2f9aa, 0, 0, 0, f(No, false, "蔖")}, + {0x2f9ab, 0, 0, 0, f(No, false, "𧏊")}, + {0x2f9ac, 0, 0, 0, f(No, false, "蕤")}, + {0x2f9ad, 0, 0, 0, f(No, false, "𦼬")}, + {0x2f9ae, 0, 0, 0, f(No, false, "䕝")}, + {0x2f9af, 0, 0, 0, f(No, false, "䕡")}, + {0x2f9b0, 0, 0, 0, f(No, false, "𦾱")}, + {0x2f9b1, 0, 0, 0, f(No, false, "𧃒")}, + {0x2f9b2, 0, 0, 0, f(No, false, "䕫")}, + {0x2f9b3, 0, 0, 0, f(No, false, "虐")}, + {0x2f9b4, 0, 0, 0, f(No, false, "虜")}, + {0x2f9b5, 0, 0, 0, f(No, false, "虧")}, + {0x2f9b6, 0, 0, 0, f(No, false, "虩")}, + {0x2f9b7, 0, 0, 0, f(No, false, "蚩")}, + {0x2f9b8, 0, 0, 0, f(No, false, "蚈")}, + {0x2f9b9, 0, 0, 0, f(No, false, "蜎")}, + {0x2f9ba, 0, 0, 0, f(No, false, "蛢")}, + {0x2f9bb, 0, 0, 0, f(No, false, "蝹")}, + {0x2f9bc, 0, 0, 0, f(No, false, "蜨")}, + {0x2f9bd, 0, 0, 0, f(No, false, "蝫")}, + {0x2f9be, 0, 0, 0, f(No, false, "螆")}, + {0x2f9bf, 0, 0, 0, f(No, false, "䗗")}, + {0x2f9c0, 0, 0, 0, f(No, false, "蟡")}, + {0x2f9c1, 0, 0, 0, f(No, false, "蠁")}, + {0x2f9c2, 0, 0, 0, f(No, false, "䗹")}, + {0x2f9c3, 0, 0, 0, f(No, false, "衠")}, + {0x2f9c4, 0, 0, 0, f(No, false, "衣")}, + {0x2f9c5, 0, 0, 0, f(No, false, "𧙧")}, + {0x2f9c6, 0, 0, 0, f(No, false, "裗")}, + {0x2f9c7, 0, 0, 0, f(No, false, "裞")}, + {0x2f9c8, 0, 0, 0, f(No, false, "䘵")}, + {0x2f9c9, 0, 0, 0, f(No, false, "裺")}, + {0x2f9ca, 0, 0, 0, f(No, false, "㒻")}, + {0x2f9cb, 0, 0, 0, f(No, false, "𧢮")}, + {0x2f9cc, 0, 0, 0, f(No, false, "𧥦")}, + {0x2f9cd, 0, 0, 0, f(No, false, "䚾")}, + {0x2f9ce, 0, 0, 0, f(No, false, "䛇")}, + {0x2f9cf, 0, 0, 0, f(No, false, "誠")}, + {0x2f9d0, 0, 0, 0, f(No, false, "諭")}, + {0x2f9d1, 0, 0, 0, f(No, false, "變")}, + {0x2f9d2, 0, 0, 0, f(No, false, "豕")}, + {0x2f9d3, 0, 0, 0, f(No, false, "𧲨")}, + {0x2f9d4, 0, 0, 0, f(No, false, "貫")}, + {0x2f9d5, 0, 0, 0, f(No, false, "賁")}, + {0x2f9d6, 0, 0, 0, f(No, false, "贛")}, + {0x2f9d7, 0, 0, 0, f(No, false, "起")}, + {0x2f9d8, 0, 0, 0, f(No, false, "𧼯")}, + {0x2f9d9, 0, 0, 0, f(No, false, "𠠄")}, + {0x2f9da, 0, 0, 0, f(No, false, "跋")}, + {0x2f9db, 0, 0, 0, f(No, false, "趼")}, + {0x2f9dc, 0, 0, 0, f(No, false, "跰")}, + {0x2f9dd, 0, 0, 0, f(No, false, "𠣞")}, + {0x2f9de, 0, 0, 0, f(No, false, "軔")}, + {0x2f9df, 0, 0, 0, f(No, false, "輸")}, + {0x2f9e0, 0, 0, 0, f(No, false, "𨗒")}, + {0x2f9e1, 0, 0, 0, f(No, false, "𨗭")}, + {0x2f9e2, 0, 0, 0, f(No, false, "邔")}, + {0x2f9e3, 0, 0, 0, f(No, false, "郱")}, + {0x2f9e4, 0, 0, 0, f(No, false, "鄑")}, + {0x2f9e5, 0, 0, 0, f(No, false, "𨜮")}, + {0x2f9e6, 0, 0, 0, f(No, false, "鄛")}, + {0x2f9e7, 0, 0, 0, f(No, false, "鈸")}, + {0x2f9e8, 0, 0, 0, f(No, false, "鋗")}, + {0x2f9e9, 0, 0, 0, f(No, false, "鋘")}, + {0x2f9ea, 0, 0, 0, f(No, false, "鉼")}, + {0x2f9eb, 0, 0, 0, f(No, false, "鏹")}, + {0x2f9ec, 0, 0, 0, f(No, false, "鐕")}, + {0x2f9ed, 0, 0, 0, f(No, false, "𨯺")}, + {0x2f9ee, 0, 0, 0, f(No, false, "開")}, + {0x2f9ef, 0, 0, 0, f(No, false, "䦕")}, + {0x2f9f0, 0, 0, 0, f(No, false, "閷")}, + {0x2f9f1, 0, 0, 0, f(No, false, "𨵷")}, + {0x2f9f2, 0, 0, 0, f(No, false, "䧦")}, + {0x2f9f3, 0, 0, 0, f(No, false, "雃")}, + {0x2f9f4, 0, 0, 0, f(No, false, "嶲")}, + {0x2f9f5, 0, 0, 0, f(No, false, "霣")}, + {0x2f9f6, 0, 0, 0, f(No, false, "𩅅")}, + {0x2f9f7, 0, 0, 0, f(No, false, "𩈚")}, + {0x2f9f8, 0, 0, 0, f(No, false, "䩮")}, + {0x2f9f9, 0, 0, 0, f(No, false, "䩶")}, + {0x2f9fa, 0, 0, 0, f(No, false, "韠")}, + {0x2f9fb, 0, 0, 0, f(No, false, "𩐊")}, + {0x2f9fc, 0, 0, 0, f(No, false, "䪲")}, + {0x2f9fd, 0, 0, 0, f(No, false, "𩒖")}, + {0x2f9fe, 0, 0, 0, f(No, false, "頋")}, + {0x2fa00, 0, 0, 0, f(No, false, "頩")}, + {0x2fa01, 0, 0, 0, f(No, false, "𩖶")}, + {0x2fa02, 0, 0, 0, f(No, false, "飢")}, + {0x2fa03, 0, 0, 0, f(No, false, "䬳")}, + {0x2fa04, 0, 0, 0, f(No, false, "餩")}, + {0x2fa05, 0, 0, 0, f(No, false, "馧")}, + {0x2fa06, 0, 0, 0, f(No, false, "駂")}, + {0x2fa07, 0, 0, 0, f(No, false, "駾")}, + {0x2fa08, 0, 0, 0, f(No, false, "䯎")}, + {0x2fa09, 0, 0, 0, f(No, false, "𩬰")}, + {0x2fa0a, 0, 0, 0, f(No, false, "鬒")}, + {0x2fa0b, 0, 0, 0, f(No, false, "鱀")}, + {0x2fa0c, 0, 0, 0, f(No, false, "鳽")}, + {0x2fa0d, 0, 0, 0, f(No, false, "䳎")}, + {0x2fa0e, 0, 0, 0, f(No, false, "䳭")}, + {0x2fa0f, 0, 0, 0, f(No, false, "鵧")}, + {0x2fa10, 0, 0, 0, f(No, false, "𪃎")}, + {0x2fa11, 0, 0, 0, f(No, false, "䳸")}, + {0x2fa12, 0, 0, 0, f(No, false, "𪄅")}, + {0x2fa13, 0, 0, 0, f(No, false, "𪈎")}, + {0x2fa14, 0, 0, 0, f(No, false, "𪊑")}, + {0x2fa15, 0, 0, 0, f(No, false, "麻")}, + {0x2fa16, 0, 0, 0, f(No, false, "䵖")}, + {0x2fa17, 0, 0, 0, f(No, false, "黹")}, + {0x2fa18, 0, 0, 0, f(No, false, "黾")}, + {0x2fa19, 0, 0, 0, f(No, false, "鼅")}, + {0x2fa1a, 0, 0, 0, f(No, false, "鼏")}, + {0x2fa1b, 0, 0, 0, f(No, false, "鼖")}, + {0x2fa1c, 0, 0, 0, f(No, false, "鼻")}, + {0x2fa1d, 0, 0, 0, f(No, false, "𪘀")}, + {0x2fa1e, 0, 0, 0, f(Yes, false, "")}, +} diff --git a/vendor/golang.org/x/text/unicode/norm/maketables.go b/vendor/golang.org/x/text/unicode/norm/maketables.go index 8d41816..338c395 100644 --- a/vendor/golang.org/x/text/unicode/norm/maketables.go +++ b/vendor/golang.org/x/text/unicode/norm/maketables.go @@ -795,7 +795,7 @@ func makeTables() { } fmt.Fprintf(w, "// Total size of tables: %dKB (%d bytes)\n", (size+512)/1024, size) - gen.WriteGoFile("tables.go", "norm", w.Bytes()) + gen.WriteVersionedGoFile("tables.go", "norm", w.Bytes()) } func printChars() { @@ -972,5 +972,5 @@ func printTestdata() { } } fmt.Fprintln(w, "}") - gen.WriteGoFile("data_test.go", "norm", w.Bytes()) + gen.WriteVersionedGoFile("data_test.go", "norm", w.Bytes()) } diff --git a/vendor/golang.org/x/text/unicode/norm/norm_test.go b/vendor/golang.org/x/text/unicode/norm/norm_test.go deleted file mode 100644 index 12dacfc..0000000 --- a/vendor/golang.org/x/text/unicode/norm/norm_test.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2011 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. - -package norm_test - -import ( - "testing" -) - -func TestPlaceHolder(t *testing.T) { - // Does nothing, just allows the Makefile to be canonical - // while waiting for the package itself to be written. -} diff --git a/vendor/golang.org/x/text/unicode/norm/normalize_test.go b/vendor/golang.org/x/text/unicode/norm/normalize_test.go index 4f83737..e3c0ac7 100644 --- a/vendor/golang.org/x/text/unicode/norm/normalize_test.go +++ b/vendor/golang.org/x/text/unicode/norm/normalize_test.go @@ -720,7 +720,7 @@ var appendTestsNFC = []AppendTest{ } var appendTestsNFD = []AppendTest{ -// TODO: Move some of the tests here. + // TODO: Move some of the tests here. } var appendTestsNFKC = []AppendTest{ diff --git a/vendor/golang.org/x/text/unicode/norm/tables.go b/vendor/golang.org/x/text/unicode/norm/tables.go deleted file mode 100644 index bf9ff80..0000000 --- a/vendor/golang.org/x/text/unicode/norm/tables.go +++ /dev/null @@ -1,7631 +0,0 @@ -// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. - -package norm - -const ( - // Version is the Unicode edition from which the tables are derived. - Version = "9.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 = [55]uint8{ - 0, 1, 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 = 0x186D - firstCCC = 0x2C9E - endMulti = 0x2F60 - firstLeadingCCC = 0x49AE - firstCCCZeroExcept = 0x4A78 - firstStarterWithNLead = 0x4A9F - lastDecomp = 0x4AA1 - maxDecomp = 0x8000 -) - -// decomps: 19105 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, - 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, 0xCE, 0x94, 0x42, - // Bytes 180 - 1bf - 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, 0xB1, 0x42, 0xCE, - // Bytes 1c0 - 1ff - 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, 0x42, 0xCF, 0x87, - // Bytes 200 - 23f - 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, 0xD8, 0xA8, 0x42, - // Bytes 240 - 27f - 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, 0x83, 0x42, 0xD9, - // Bytes 280 - 2bf - 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, 0x42, 0xDA, 0x8C, - // Bytes 2c0 - 2ff - 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, 0xDB, 0x89, 0x42, - // Bytes 300 - 33f - 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, 0x84, 0x8A, 0x43, - // Bytes 340 - 37f - 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, 0x84, 0xA1, 0x43, - // Bytes 380 - 3bf - 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, 0x85, 0x98, 0x43, - // Bytes 3c0 - 3ff - 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, 0x87, 0x97, 0x43, - // Bytes 400 - 43f - 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, 0x80, 0x90, 0x43, - // Bytes 440 - 47f - 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, 0xA6, 0x86, 0x43, - // Bytes 480 - 4bf - 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, 0x80, 0x95, 0x43, - // Bytes 4c0 - 4ff - 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, 0x82, 0xB1, 0x43, - // Bytes 500 - 53f - 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, 0x83, 0x8D, 0x43, - // Bytes 540 - 57f - 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, 0x83, 0xA7, 0x43, - // Bytes 580 - 5bf - 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, 0x92, 0xBB, 0x43, - // Bytes 5c0 - 5ff - 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, 0xAC, 0x88, 0x43, - // Bytes 600 - 63f - 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, 0x82, 0x96, 0x43, - // Bytes 640 - 67f - 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, 0x95, 0xAB, 0x43, - // Bytes 680 - 6bf - 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, 0xB5, 0x96, 0x43, - // Bytes 6c0 - 6ff - 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, 0xB8, 0xBD, 0x43, - // Bytes 700 - 73f - 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, 0xBB, 0xA4, 0x43, - // Bytes 740 - 77f - 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, 0x83, 0xA7, 0x43, - // Bytes 780 - 7bf - 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, 0x86, 0x82, 0x43, - // Bytes 7c0 - 7ff - 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, 0x87, 0xA0, 0x43, - // Bytes 800 - 83f - 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, 0x8A, 0xA3, 0x43, - // Bytes 840 - 87f - 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, 0x8C, 0xB8, 0x43, - // Bytes 880 - 8bf - 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, 0x8D, 0xBF, 0x43, - // Bytes 8c0 - 8ff - 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, 0x90, 0x8D, 0x43, - // Bytes 900 - 93f - 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, 0x95, 0xA3, 0x43, - // Bytes 940 - 97f - 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, 0x9B, 0x9B, 0x43, - // Bytes 980 - 9bf - 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, 0xA2, 0xAC, 0x43, - // Bytes 9c0 - 9ff - 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, 0xA4, 0xA7, 0x43, - // Bytes a00 - a3f - 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, 0xAC, 0xA8, 0x43, - // Bytes a40 - a7f - 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, 0xB0, 0x8F, 0x43, - // Bytes a80 - abf - 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, 0xB5, 0xAE, 0x43, - // Bytes ac0 - aff - 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, 0xB9, 0xB4, 0x43, - // Bytes b00 - b3f - 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, 0xBC, 0x84, 0x43, - // Bytes b40 - b7f - 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, 0xBE, 0xAD, 0x43, - // Bytes b80 - bbf - 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, 0x85, 0x88, 0x43, - // Bytes bc0 - bff - 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, 0x88, 0x90, 0x43, - // Bytes c00 - c3f - 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, 0x8C, 0x87, 0x43, - // Bytes c40 - c7f - 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, 0x91, 0xB7, 0x43, - // Bytes c80 - cbf - 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, 0x96, 0xB9, 0x43, - // Bytes cc0 - cff - 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, 0x9B, 0xB4, 0x43, - // Bytes d00 - d3f - 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, 0x9F, 0xB3, 0x43, - // Bytes d40 - d7f - 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, 0xAA, 0xA8, 0x43, - // Bytes d80 - dbf - 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, 0xAE, 0xBB, 0x43, - // Bytes dc0 - dff - 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, 0xB4, 0x96, 0x43, - // Bytes e00 - e3f - 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, 0xB8, 0xAF, 0x43, - // Bytes e40 - e7f - 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, 0xBF, 0xBE, 0x43, - // Bytes e80 - ebf - 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, 0x85, 0xAE, 0x43, - // Bytes ec0 - eff - 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, 0x89, 0x9B, 0x43, - // Bytes f00 - f3f - 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, 0x8E, 0xA5, 0x43, - // Bytes f40 - f7f - 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, 0x94, 0x86, 0x43, - // Bytes f80 - fbf - 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, 0x97, 0xA2, 0x43, - // Bytes fc0 - fff - 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, 0x9C, 0x81, 0x43, - // Bytes 1000 - 103f - 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, 0xA3, 0xBB, 0x43, - // Bytes 1040 - 107f - 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, 0xA6, 0x8F, 0x43, - // Bytes 1080 - 10bf - 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, 0xAB, 0xAE, 0x43, - // Bytes 10c0 - 10ff - 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, 0xB3, 0xA7, 0x43, - // Bytes 1100 - 113f - 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, 0xB8, 0xB7, 0x43, - // Bytes 1140 - 117f - 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, 0x80, 0x85, 0x43, - // Bytes 1180 - 11bf - 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, 0x87, 0x98, 0x43, - // Bytes 11c0 - 11ff - 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, 0x89, 0xB8, 0x43, - // Bytes 1200 - 123f - 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, 0x8E, 0xAD, 0x43, - // Bytes 1240 - 127f - 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, 0x94, 0x96, 0x43, - // Bytes 1280 - 12bf - 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, 0x9B, 0xA2, 0x43, - // Bytes 12c0 - 12ff - 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, 0xA3, 0x97, 0x43, - // Bytes 1300 - 133f - 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, 0xAA, 0xAA, 0x43, - // Bytes 1340 - 137f - 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, 0xB1, 0x95, 0x43, - // Bytes 1380 - 13bf - 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, 0xB6, 0xB3, 0x43, - // Bytes 13c0 - 13ff - 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, 0xBE, 0xB5, 0x43, - // Bytes 1400 - 143f - 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, 0x84, 0x9B, 0x43, - // Bytes 1440 - 147f - 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, 0x8C, 0x84, 0x43, - // Bytes 1480 - 14bf - 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, 0x9A, 0x86, 0x43, - // Bytes 14c0 - 14ff - 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, 0x9D, 0x96, 0x43, - // Bytes 1500 - 153f - 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, 0xA1, 0x9E, 0x43, - // Bytes 1540 - 157f - 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, 0xA9, 0xAA, 0x43, - // Bytes 1580 - 15bf - 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, 0xB6, 0xB4, 0x43, - // Bytes 15c0 - 15ff - 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, 0xBC, 0x85, 0x43, - // Bytes 1600 - 163f - 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, 0x9D, 0xAF, 0x43, - // Bytes 1640 - 167f - 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, 0xA8, 0x44, 0xF0, - // Bytes 1680 - 16bf - 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, 0xAC, 0x8C, 0x44, - // Bytes 16c0 - 16ff - 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, 0xA3, 0xAB, 0xBA, - // Bytes 1700 - 173f - 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, 0xF0, 0xA4, 0xB2, - // Bytes 1740 - 177f - 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, 0x44, 0xF0, 0xA5, - // Bytes 1780 - 17bf - 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, 0xA3, 0x44, 0xF0, - // Bytes 17c0 - 17ff - 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, 0xA2, 0xAE, 0x44, - // Bytes 1800 - 183f - 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, 0xA9, 0x90, 0x8A, - // Bytes 1840 - 187f - 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, 0x31, 0x2C, 0x42, - // Bytes 1880 - 18bf - 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, 0x37, 0x42, 0x32, - // Bytes 18c0 - 18ff - 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, 0x42, 0x34, 0x35, - // Bytes 1900 - 193f - 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, 0x43, 0x44, 0x42, - // Bytes 1940 - 197f - 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, 0x43, 0x42, 0x4D, - // Bytes 1980 - 19bf - 0x44, 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, 0x42, 0x63, 0x63, 0x42, 0x63, 0x64, - // Bytes 19c0 - 19ff - 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, 0x6B, 0x57, 0x42, 0x6B, 0x67, 0x42, - // Bytes 1a00 - 1a3f - 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, 0x56, 0x42, 0x6E, 0x57, 0x42, 0x6E, - // Bytes 1a40 - 1a7f - 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, 0x35, 0x29, 0x43, 0x28, 0x36, 0x29, - // Bytes 1a80 - 1abf - 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, 0x4C, 0x29, 0x43, 0x28, 0x4D, 0x29, - // Bytes 1ac0 - 1aff - 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, 0x62, 0x29, 0x43, 0x28, 0x63, 0x29, - // Bytes 1b00 - 1b3f - 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, 0x72, 0x29, 0x43, 0x28, 0x73, 0x29, - // Bytes 1b40 - 1b7f - 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, 0x36, 0x2E, 0x43, 0x31, 0x37, 0x2E, - // Bytes 1b80 - 1bbf - 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, 0xCE, 0xA9, 0x43, 0x50, 0x50, 0x4D, - // Bytes 1bc0 - 1bff - 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, 0x6D, 0x33, 0x43, 0x64, 0x6D, 0x32, - // Bytes 1c00 - 1c3f - 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, 0x69, 0x6C, 0x43, 0x6D, 0x6D, 0x32, - // Bytes 1c40 - 1c7f - 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, 0xBC, 0x6D, 0x43, 0xCE, 0xBC, 0x73, - // Bytes 1c80 - 1cbf - 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, 0x82, 0xB9, 0x44, 0x31, 0xE2, 0x81, - // Bytes 1cc0 - 1cff - 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, 0xE7, 0x82, 0xB9, 0x44, 0x35, 0xE6, - // Bytes 1d00 - 1d3f - 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, 0x39, 0xE6, 0x97, 0xA5, 0x44, 0x39, - // Bytes 1d40 - 1d7f - 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, 0x44, 0xD5, 0xBE, 0xD5, 0xB6, 0x44, - // Bytes 1d80 - 1dbf - 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, 0x8A, 0x44, 0xD8, 0xAA, 0xD8, 0xAC, - // Bytes 1dc0 - 1dff - 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, 0xD8, 0xB2, 0x44, 0xD8, 0xAB, 0xD9, - // Bytes 1e00 - 1e3f - 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, 0xAD, 0xD9, 0x8A, 0x44, 0xD8, 0xAE, - // Bytes 1e40 - 1e7f - 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, 0xD8, 0xB3, 0xD9, 0x8A, 0x44, 0xD8, - // Bytes 1e80 - 1ebf - 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, 0x44, 0xD8, 0xB5, 0xD9, 0x89, 0x44, - // Bytes 1ec0 - 1eff - 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, 0x8A, 0x44, 0xD8, 0xB8, 0xD9, 0x85, - // Bytes 1f00 - 1f3f - 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, 0xD9, 0x85, 0x44, 0xD9, 0x81, 0xD9, - // Bytes 1f40 - 1f7f - 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, 0x83, 0xD9, 0x89, 0x44, 0xD9, 0x83, - // Bytes 1f80 - 1fbf - 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, 0xD9, 0x85, 0xD8, 0xAE, 0x44, 0xD9, - // Bytes 1fc0 - 1fff - 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, 0x44, 0xD9, 0x86, 0xD9, 0x8A, 0x44, - // Bytes 2000 - 203f - 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, 0x86, 0x44, 0xD9, 0x8A, 0xD9, 0x87, - // Bytes 2040 - 207f - 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, 0xE1, 0x84, 0x89, 0x29, 0x45, 0x28, - // Bytes 2080 - 20bf - 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, 0x45, 0x28, 0xE4, 0xB9, 0x9D, 0x29, - // Bytes 20c0 - 20ff - 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, 0x94, 0x29, 0x45, 0x28, 0xE5, 0x90, - // Bytes 2100 - 213f - 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, 0xE6, 0xB0, 0xB4, 0x29, 0x45, 0x28, - // Bytes 2140 - 217f - 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, 0x45, 0x28, 0xE9, 0x87, 0x91, 0x29, - // Bytes 2180 - 21bf - 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, 0x82, 0xB9, 0x45, 0x31, 0x33, 0xE6, - // Bytes 21c0 - 21ff - 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, 0x38, 0xE6, 0x97, 0xA5, 0x45, 0x31, - // Bytes 2200 - 223f - 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, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x39, - // Bytes 2240 - 227f - 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, 0x82, 0xB9, 0x45, 0x32, 0x35, 0xE6, - // Bytes 2280 - 22bf - 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, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33, - // Bytes 22c0 - 22ff - 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, 0x6B, 0x67, 0x46, 0x6D, 0xE2, 0x88, - // Bytes 2300 - 233f - 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, 0x85, 0x46, 0xD8, 0xAA, 0xD8, 0xAE, - // Bytes 2340 - 237f - 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, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD8, - // Bytes 2380 - 23bf - 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, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x89, - // Bytes 23c0 - 23ff - 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, 0xB4, 0xD9, 0x85, 0xD9, 0x85, 0x46, - // Bytes 2400 - 243f - 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, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, - // Bytes 2440 - 247f - 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, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x81, - // Bytes 2480 - 24bf - 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, 0xD8, 0xAC, 0x46, 0xD9, 0x84, 0xD8, - // Bytes 24c0 - 24ff - 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, 0xAD, 0x46, 0xD9, 0x85, 0xD8, 0xAC, - // Bytes 2500 - 253f - 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, 0x46, 0xD9, 0x85, 0xD9, 0x85, 0xD9, - // Bytes 2540 - 257f - 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, 0xD9, 0x86, 0xD9, 0x85, 0xD9, 0x8A, - // Bytes 2580 - 25bf - 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, 0x8A, 0xD9, 0x94, 0xD8, 0xAD, 0x46, - // Bytes 25c0 - 25ff - 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, 0xD9, 0x94, 0xD9, 0x8A, 0x46, 0xD9, - // Bytes 2600 - 263f - 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, 0xE0, 0xBA, 0xB2, 0x46, 0xE0, 0xBD, - // Bytes 2640 - 267f - 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, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA1, - // Bytes 2680 - 26bf - 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, 0x8A, 0x46, 0xE3, 0x82, 0xAD, 0xE3, - // Bytes 26c0 - 26ff - 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, 0x46, 0xE5, 0xA4, 0xA7, 0xE6, 0xAD, - // Bytes 2700 - 273f - 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, 0x82, 0xE1, 0x85, 0xA1, 0x29, - 0x48, 0x28, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, - // Bytes 2740 - 277f - 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, 0xE1, 0x85, 0xA1, 0x29, 0x48, - 0x28, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xAE, 0x29, - // Bytes 2780 - 27bf - 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, 0x95, 0x73, 0x32, 0x48, 0xD8, - 0xA7, 0xD9, 0x83, 0xD8, 0xA8, 0xD8, 0xB1, 0x48, - // Bytes 27c0 - 27ff - 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, 0xD8, 0xAF, 0x48, 0xD9, 0x88, - 0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x49, 0xE2, - // Bytes 2800 - 283f - 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, 0x94, 0xE4, 0xBA, 0x8C, 0xE3, - 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE5, 0x8B, - // Bytes 2840 - 287f - 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, 0xE3, 0x80, 0x95, 0x49, 0xE3, - 0x80, 0x94, 0xE7, 0x9B, 0x97, 0xE3, 0x80, 0x95, - // Bytes 2880 - 28bf - 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, 0xE3, 0x82, 0xAB, 0xE3, 0x82, - 0xA4, 0xE3, 0x83, 0xAA, 0x49, 0xE3, 0x82, 0xB1, - // Bytes 28c0 - 28ff - 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, 0x82, 0x99, 0xE3, 0x83, 0xAB, - 0x49, 0xE3, 0x83, 0x8E, 0xE3, 0x83, 0x83, 0xE3, - // Bytes 2900 - 293f - 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, 0xBD, 0x49, 0xE3, 0x83, 0x98, - 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x84, 0x49, 0xE3, - // Bytes 2940 - 297f - 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, 0xA4, 0xE3, 0x83, 0xBC, 0xE3, - 0x83, 0xAB, 0x49, 0xE3, 0x83, 0xA6, 0xE3, 0x82, - // Bytes 2980 - 29bf - 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, 0x82, 0xA1, 0x4C, 0xE3, 0x82, - 0xA8, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xAB, 0xE3, - // Bytes 29c0 - 29ff - 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, 0xE3, 0x83, 0xBC, 0x4C, 0xE3, - 0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0x8B, - // Bytes 2a00 - 2a3f - 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, 0xAF, 0xE3, 0x83, 0xAB, 0x4C, - 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83, - // Bytes 2a40 - 2a7f - 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, 0x83, 0xBC, 0xE3, 0x82, 0xBF, - 0x4C, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, - // Bytes 2a80 - 2abf - 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, 0xE3, 0x83, 0xAD, 0xE3, 0x83, - 0xB3, 0x4C, 0xE3, 0x83, 0xA1, 0xE3, 0x83, 0xBC, - // Bytes 2ac0 - 2aff - 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, 0x85, 0xA9, 0xE1, 0x84, 0x92, - 0xE1, 0x85, 0xAE, 0x29, 0x4F, 0xD8, 0xAC, 0xD9, - // Bytes 2b00 - 2b3f - 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, 0xE3, 0x83, 0xAF, 0xE3, 0x83, - 0x83, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xB5, - // Bytes 2b40 - 2b7f - 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, 0xE3, 0x82, 0xA4, 0xE3, 0x83, - 0xB3, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x83, 0x9E, - // Bytes 2b80 - 2bbf - 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, 0xA9, 0xE1, 0x84, 0x8C, 0xE1, - 0x85, 0xA5, 0xE1, 0x86, 0xAB, 0x29, 0x52, 0xE3, - // Bytes 2bc0 - 2bff - 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, 0x88, 0xE3, 0x83, 0xAB, 0x52, - 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83, - // Bytes 2c00 - 2c3f - 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, 0x92, 0xE3, 0x82, 0x9A, 0xE3, - 0x82, 0xA2, 0xE3, 0x82, 0xB9, 0xE3, 0x83, 0x88, - // Bytes 2c40 - 2c7f - 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, 0xE3, 0x82, 0xB1, 0xE3, 0x82, - 0x99, 0xE3, 0x83, 0xB3, 0x61, 0xD8, 0xB5, 0xD9, - // Bytes 2c80 - 2cbf - 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, 0xAC, 0xBE, 0x01, 0x06, 0xE0, - 0xAD, 0x87, 0xE0, 0xAD, 0x96, 0x01, 0x06, 0xE0, - // Bytes 2cc0 - 2cff - 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, 0xB3, 0x95, 0x01, 0x06, 0xE0, - 0xB3, 0x86, 0xE0, 0xB3, 0x96, 0x01, 0x06, 0xE0, - // Bytes 2d00 - 2d3f - 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, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - 0xAC, 0x89, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - // Bytes 2d40 - 2d7f - 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, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - 0xAD, 0x82, 0xE1, 0xAC, 0xB5, 0x01, 0x08, 0xF0, - // Bytes 2d80 - 2dbf - 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, 0x92, 0xB9, 0xF0, 0x91, 0x92, - 0xBA, 0x01, 0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0, - // Bytes 2dc0 - 2dff - 0x91, 0x92, 0xBD, 0x01, 0x08, 0xF0, 0x91, 0x96, - 0xB8, 0xF0, 0x91, 0x96, 0xAF, 0x01, 0x08, 0xF0, - 0x91, 0x96, 0xB9, 0xF0, 0x91, 0x96, 0xAF, 0x01, - 0x09, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0xE0, - 0xB3, 0x95, 0x02, 0x09, 0xE0, 0xB7, 0x99, 0xE0, - 0xB7, 0x8F, 0xE0, 0xB7, 0x8A, 0x12, 0x44, 0x44, - 0x5A, 0xCC, 0x8C, 0xC9, 0x44, 0x44, 0x7A, 0xCC, - 0x8C, 0xC9, 0x44, 0x64, 0x7A, 0xCC, 0x8C, 0xC9, - // Bytes 2e00 - 2e3f - 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x93, 0xC9, - 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x94, 0xC9, - 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x95, 0xB5, - 0x46, 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x85, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x86, 0xE1, 0x85, 0xA1, 0x01, - // Bytes 2e40 - 2e7f - 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, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x8F, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x90, 0xE1, 0x85, 0xA1, 0x01, - // Bytes 2e80 - 2ebf - 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, 0x0D, 0x4C, 0xE1, 0x84, 0x8C, 0xE1, - 0x85, 0xAE, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xB4, - 0x01, 0x4C, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, - 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0D, 0x4C, - 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0xBC, 0xE3, 0x83, - // Bytes 2ec0 - 2eff - 0x9B, 0xE3, 0x82, 0x9A, 0x0D, 0x4C, 0xE3, 0x83, - 0xA4, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3, - 0x82, 0x99, 0x0D, 0x4F, 0xE1, 0x84, 0x8E, 0xE1, - 0x85, 0xA1, 0xE1, 0x86, 0xB7, 0xE1, 0x84, 0x80, - 0xE1, 0x85, 0xA9, 0x01, 0x4F, 0xE3, 0x82, 0xA4, - 0xE3, 0x83, 0x8B, 0xE3, 0x83, 0xB3, 0xE3, 0x82, - 0xAF, 0xE3, 0x82, 0x99, 0x0D, 0x4F, 0xE3, 0x82, - 0xB7, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, - // Bytes 2f00 - 2f3f - 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x0D, 0x4F, 0xE3, - 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, - 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x0D, 0x4F, - 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0xE3, 0x83, - 0xB3, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D, - 0x52, 0xE3, 0x82, 0xA8, 0xE3, 0x82, 0xB9, 0xE3, - 0x82, 0xAF, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, - 0xE3, 0x82, 0x99, 0x0D, 0x52, 0xE3, 0x83, 0x95, - // Bytes 2f40 - 2f7f - 0xE3, 0x82, 0xA1, 0xE3, 0x83, 0xA9, 0xE3, 0x83, - 0x83, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D, - 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, 0x05, 0x03, 0x3E, 0xCC, 0xB8, 0x05, 0x03, - 0x41, 0xCC, 0x80, 0xC9, 0x03, 0x41, 0xCC, 0x81, - 0xC9, 0x03, 0x41, 0xCC, 0x83, 0xC9, 0x03, 0x41, - // Bytes 2f80 - 2fbf - 0xCC, 0x84, 0xC9, 0x03, 0x41, 0xCC, 0x89, 0xC9, - 0x03, 0x41, 0xCC, 0x8C, 0xC9, 0x03, 0x41, 0xCC, - 0x8F, 0xC9, 0x03, 0x41, 0xCC, 0x91, 0xC9, 0x03, - 0x41, 0xCC, 0xA5, 0xB5, 0x03, 0x41, 0xCC, 0xA8, - 0xA5, 0x03, 0x42, 0xCC, 0x87, 0xC9, 0x03, 0x42, - 0xCC, 0xA3, 0xB5, 0x03, 0x42, 0xCC, 0xB1, 0xB5, - 0x03, 0x43, 0xCC, 0x81, 0xC9, 0x03, 0x43, 0xCC, - 0x82, 0xC9, 0x03, 0x43, 0xCC, 0x87, 0xC9, 0x03, - // Bytes 2fc0 - 2fff - 0x43, 0xCC, 0x8C, 0xC9, 0x03, 0x44, 0xCC, 0x87, - 0xC9, 0x03, 0x44, 0xCC, 0x8C, 0xC9, 0x03, 0x44, - 0xCC, 0xA3, 0xB5, 0x03, 0x44, 0xCC, 0xA7, 0xA5, - 0x03, 0x44, 0xCC, 0xAD, 0xB5, 0x03, 0x44, 0xCC, - 0xB1, 0xB5, 0x03, 0x45, 0xCC, 0x80, 0xC9, 0x03, - 0x45, 0xCC, 0x81, 0xC9, 0x03, 0x45, 0xCC, 0x83, - 0xC9, 0x03, 0x45, 0xCC, 0x86, 0xC9, 0x03, 0x45, - 0xCC, 0x87, 0xC9, 0x03, 0x45, 0xCC, 0x88, 0xC9, - // Bytes 3000 - 303f - 0x03, 0x45, 0xCC, 0x89, 0xC9, 0x03, 0x45, 0xCC, - 0x8C, 0xC9, 0x03, 0x45, 0xCC, 0x8F, 0xC9, 0x03, - 0x45, 0xCC, 0x91, 0xC9, 0x03, 0x45, 0xCC, 0xA8, - 0xA5, 0x03, 0x45, 0xCC, 0xAD, 0xB5, 0x03, 0x45, - 0xCC, 0xB0, 0xB5, 0x03, 0x46, 0xCC, 0x87, 0xC9, - 0x03, 0x47, 0xCC, 0x81, 0xC9, 0x03, 0x47, 0xCC, - 0x82, 0xC9, 0x03, 0x47, 0xCC, 0x84, 0xC9, 0x03, - 0x47, 0xCC, 0x86, 0xC9, 0x03, 0x47, 0xCC, 0x87, - // Bytes 3040 - 307f - 0xC9, 0x03, 0x47, 0xCC, 0x8C, 0xC9, 0x03, 0x47, - 0xCC, 0xA7, 0xA5, 0x03, 0x48, 0xCC, 0x82, 0xC9, - 0x03, 0x48, 0xCC, 0x87, 0xC9, 0x03, 0x48, 0xCC, - 0x88, 0xC9, 0x03, 0x48, 0xCC, 0x8C, 0xC9, 0x03, - 0x48, 0xCC, 0xA3, 0xB5, 0x03, 0x48, 0xCC, 0xA7, - 0xA5, 0x03, 0x48, 0xCC, 0xAE, 0xB5, 0x03, 0x49, - 0xCC, 0x80, 0xC9, 0x03, 0x49, 0xCC, 0x81, 0xC9, - 0x03, 0x49, 0xCC, 0x82, 0xC9, 0x03, 0x49, 0xCC, - // Bytes 3080 - 30bf - 0x83, 0xC9, 0x03, 0x49, 0xCC, 0x84, 0xC9, 0x03, - 0x49, 0xCC, 0x86, 0xC9, 0x03, 0x49, 0xCC, 0x87, - 0xC9, 0x03, 0x49, 0xCC, 0x89, 0xC9, 0x03, 0x49, - 0xCC, 0x8C, 0xC9, 0x03, 0x49, 0xCC, 0x8F, 0xC9, - 0x03, 0x49, 0xCC, 0x91, 0xC9, 0x03, 0x49, 0xCC, - 0xA3, 0xB5, 0x03, 0x49, 0xCC, 0xA8, 0xA5, 0x03, - 0x49, 0xCC, 0xB0, 0xB5, 0x03, 0x4A, 0xCC, 0x82, - 0xC9, 0x03, 0x4B, 0xCC, 0x81, 0xC9, 0x03, 0x4B, - // Bytes 30c0 - 30ff - 0xCC, 0x8C, 0xC9, 0x03, 0x4B, 0xCC, 0xA3, 0xB5, - 0x03, 0x4B, 0xCC, 0xA7, 0xA5, 0x03, 0x4B, 0xCC, - 0xB1, 0xB5, 0x03, 0x4C, 0xCC, 0x81, 0xC9, 0x03, - 0x4C, 0xCC, 0x8C, 0xC9, 0x03, 0x4C, 0xCC, 0xA7, - 0xA5, 0x03, 0x4C, 0xCC, 0xAD, 0xB5, 0x03, 0x4C, - 0xCC, 0xB1, 0xB5, 0x03, 0x4D, 0xCC, 0x81, 0xC9, - 0x03, 0x4D, 0xCC, 0x87, 0xC9, 0x03, 0x4D, 0xCC, - 0xA3, 0xB5, 0x03, 0x4E, 0xCC, 0x80, 0xC9, 0x03, - // Bytes 3100 - 313f - 0x4E, 0xCC, 0x81, 0xC9, 0x03, 0x4E, 0xCC, 0x83, - 0xC9, 0x03, 0x4E, 0xCC, 0x87, 0xC9, 0x03, 0x4E, - 0xCC, 0x8C, 0xC9, 0x03, 0x4E, 0xCC, 0xA3, 0xB5, - 0x03, 0x4E, 0xCC, 0xA7, 0xA5, 0x03, 0x4E, 0xCC, - 0xAD, 0xB5, 0x03, 0x4E, 0xCC, 0xB1, 0xB5, 0x03, - 0x4F, 0xCC, 0x80, 0xC9, 0x03, 0x4F, 0xCC, 0x81, - 0xC9, 0x03, 0x4F, 0xCC, 0x86, 0xC9, 0x03, 0x4F, - 0xCC, 0x89, 0xC9, 0x03, 0x4F, 0xCC, 0x8B, 0xC9, - // Bytes 3140 - 317f - 0x03, 0x4F, 0xCC, 0x8C, 0xC9, 0x03, 0x4F, 0xCC, - 0x8F, 0xC9, 0x03, 0x4F, 0xCC, 0x91, 0xC9, 0x03, - 0x50, 0xCC, 0x81, 0xC9, 0x03, 0x50, 0xCC, 0x87, - 0xC9, 0x03, 0x52, 0xCC, 0x81, 0xC9, 0x03, 0x52, - 0xCC, 0x87, 0xC9, 0x03, 0x52, 0xCC, 0x8C, 0xC9, - 0x03, 0x52, 0xCC, 0x8F, 0xC9, 0x03, 0x52, 0xCC, - 0x91, 0xC9, 0x03, 0x52, 0xCC, 0xA7, 0xA5, 0x03, - 0x52, 0xCC, 0xB1, 0xB5, 0x03, 0x53, 0xCC, 0x82, - // Bytes 3180 - 31bf - 0xC9, 0x03, 0x53, 0xCC, 0x87, 0xC9, 0x03, 0x53, - 0xCC, 0xA6, 0xB5, 0x03, 0x53, 0xCC, 0xA7, 0xA5, - 0x03, 0x54, 0xCC, 0x87, 0xC9, 0x03, 0x54, 0xCC, - 0x8C, 0xC9, 0x03, 0x54, 0xCC, 0xA3, 0xB5, 0x03, - 0x54, 0xCC, 0xA6, 0xB5, 0x03, 0x54, 0xCC, 0xA7, - 0xA5, 0x03, 0x54, 0xCC, 0xAD, 0xB5, 0x03, 0x54, - 0xCC, 0xB1, 0xB5, 0x03, 0x55, 0xCC, 0x80, 0xC9, - 0x03, 0x55, 0xCC, 0x81, 0xC9, 0x03, 0x55, 0xCC, - // Bytes 31c0 - 31ff - 0x82, 0xC9, 0x03, 0x55, 0xCC, 0x86, 0xC9, 0x03, - 0x55, 0xCC, 0x89, 0xC9, 0x03, 0x55, 0xCC, 0x8A, - 0xC9, 0x03, 0x55, 0xCC, 0x8B, 0xC9, 0x03, 0x55, - 0xCC, 0x8C, 0xC9, 0x03, 0x55, 0xCC, 0x8F, 0xC9, - 0x03, 0x55, 0xCC, 0x91, 0xC9, 0x03, 0x55, 0xCC, - 0xA3, 0xB5, 0x03, 0x55, 0xCC, 0xA4, 0xB5, 0x03, - 0x55, 0xCC, 0xA8, 0xA5, 0x03, 0x55, 0xCC, 0xAD, - 0xB5, 0x03, 0x55, 0xCC, 0xB0, 0xB5, 0x03, 0x56, - // Bytes 3200 - 323f - 0xCC, 0x83, 0xC9, 0x03, 0x56, 0xCC, 0xA3, 0xB5, - 0x03, 0x57, 0xCC, 0x80, 0xC9, 0x03, 0x57, 0xCC, - 0x81, 0xC9, 0x03, 0x57, 0xCC, 0x82, 0xC9, 0x03, - 0x57, 0xCC, 0x87, 0xC9, 0x03, 0x57, 0xCC, 0x88, - 0xC9, 0x03, 0x57, 0xCC, 0xA3, 0xB5, 0x03, 0x58, - 0xCC, 0x87, 0xC9, 0x03, 0x58, 0xCC, 0x88, 0xC9, - 0x03, 0x59, 0xCC, 0x80, 0xC9, 0x03, 0x59, 0xCC, - 0x81, 0xC9, 0x03, 0x59, 0xCC, 0x82, 0xC9, 0x03, - // Bytes 3240 - 327f - 0x59, 0xCC, 0x83, 0xC9, 0x03, 0x59, 0xCC, 0x84, - 0xC9, 0x03, 0x59, 0xCC, 0x87, 0xC9, 0x03, 0x59, - 0xCC, 0x88, 0xC9, 0x03, 0x59, 0xCC, 0x89, 0xC9, - 0x03, 0x59, 0xCC, 0xA3, 0xB5, 0x03, 0x5A, 0xCC, - 0x81, 0xC9, 0x03, 0x5A, 0xCC, 0x82, 0xC9, 0x03, - 0x5A, 0xCC, 0x87, 0xC9, 0x03, 0x5A, 0xCC, 0x8C, - 0xC9, 0x03, 0x5A, 0xCC, 0xA3, 0xB5, 0x03, 0x5A, - 0xCC, 0xB1, 0xB5, 0x03, 0x61, 0xCC, 0x80, 0xC9, - // Bytes 3280 - 32bf - 0x03, 0x61, 0xCC, 0x81, 0xC9, 0x03, 0x61, 0xCC, - 0x83, 0xC9, 0x03, 0x61, 0xCC, 0x84, 0xC9, 0x03, - 0x61, 0xCC, 0x89, 0xC9, 0x03, 0x61, 0xCC, 0x8C, - 0xC9, 0x03, 0x61, 0xCC, 0x8F, 0xC9, 0x03, 0x61, - 0xCC, 0x91, 0xC9, 0x03, 0x61, 0xCC, 0xA5, 0xB5, - 0x03, 0x61, 0xCC, 0xA8, 0xA5, 0x03, 0x62, 0xCC, - 0x87, 0xC9, 0x03, 0x62, 0xCC, 0xA3, 0xB5, 0x03, - 0x62, 0xCC, 0xB1, 0xB5, 0x03, 0x63, 0xCC, 0x81, - // Bytes 32c0 - 32ff - 0xC9, 0x03, 0x63, 0xCC, 0x82, 0xC9, 0x03, 0x63, - 0xCC, 0x87, 0xC9, 0x03, 0x63, 0xCC, 0x8C, 0xC9, - 0x03, 0x64, 0xCC, 0x87, 0xC9, 0x03, 0x64, 0xCC, - 0x8C, 0xC9, 0x03, 0x64, 0xCC, 0xA3, 0xB5, 0x03, - 0x64, 0xCC, 0xA7, 0xA5, 0x03, 0x64, 0xCC, 0xAD, - 0xB5, 0x03, 0x64, 0xCC, 0xB1, 0xB5, 0x03, 0x65, - 0xCC, 0x80, 0xC9, 0x03, 0x65, 0xCC, 0x81, 0xC9, - 0x03, 0x65, 0xCC, 0x83, 0xC9, 0x03, 0x65, 0xCC, - // Bytes 3300 - 333f - 0x86, 0xC9, 0x03, 0x65, 0xCC, 0x87, 0xC9, 0x03, - 0x65, 0xCC, 0x88, 0xC9, 0x03, 0x65, 0xCC, 0x89, - 0xC9, 0x03, 0x65, 0xCC, 0x8C, 0xC9, 0x03, 0x65, - 0xCC, 0x8F, 0xC9, 0x03, 0x65, 0xCC, 0x91, 0xC9, - 0x03, 0x65, 0xCC, 0xA8, 0xA5, 0x03, 0x65, 0xCC, - 0xAD, 0xB5, 0x03, 0x65, 0xCC, 0xB0, 0xB5, 0x03, - 0x66, 0xCC, 0x87, 0xC9, 0x03, 0x67, 0xCC, 0x81, - 0xC9, 0x03, 0x67, 0xCC, 0x82, 0xC9, 0x03, 0x67, - // Bytes 3340 - 337f - 0xCC, 0x84, 0xC9, 0x03, 0x67, 0xCC, 0x86, 0xC9, - 0x03, 0x67, 0xCC, 0x87, 0xC9, 0x03, 0x67, 0xCC, - 0x8C, 0xC9, 0x03, 0x67, 0xCC, 0xA7, 0xA5, 0x03, - 0x68, 0xCC, 0x82, 0xC9, 0x03, 0x68, 0xCC, 0x87, - 0xC9, 0x03, 0x68, 0xCC, 0x88, 0xC9, 0x03, 0x68, - 0xCC, 0x8C, 0xC9, 0x03, 0x68, 0xCC, 0xA3, 0xB5, - 0x03, 0x68, 0xCC, 0xA7, 0xA5, 0x03, 0x68, 0xCC, - 0xAE, 0xB5, 0x03, 0x68, 0xCC, 0xB1, 0xB5, 0x03, - // Bytes 3380 - 33bf - 0x69, 0xCC, 0x80, 0xC9, 0x03, 0x69, 0xCC, 0x81, - 0xC9, 0x03, 0x69, 0xCC, 0x82, 0xC9, 0x03, 0x69, - 0xCC, 0x83, 0xC9, 0x03, 0x69, 0xCC, 0x84, 0xC9, - 0x03, 0x69, 0xCC, 0x86, 0xC9, 0x03, 0x69, 0xCC, - 0x89, 0xC9, 0x03, 0x69, 0xCC, 0x8C, 0xC9, 0x03, - 0x69, 0xCC, 0x8F, 0xC9, 0x03, 0x69, 0xCC, 0x91, - 0xC9, 0x03, 0x69, 0xCC, 0xA3, 0xB5, 0x03, 0x69, - 0xCC, 0xA8, 0xA5, 0x03, 0x69, 0xCC, 0xB0, 0xB5, - // Bytes 33c0 - 33ff - 0x03, 0x6A, 0xCC, 0x82, 0xC9, 0x03, 0x6A, 0xCC, - 0x8C, 0xC9, 0x03, 0x6B, 0xCC, 0x81, 0xC9, 0x03, - 0x6B, 0xCC, 0x8C, 0xC9, 0x03, 0x6B, 0xCC, 0xA3, - 0xB5, 0x03, 0x6B, 0xCC, 0xA7, 0xA5, 0x03, 0x6B, - 0xCC, 0xB1, 0xB5, 0x03, 0x6C, 0xCC, 0x81, 0xC9, - 0x03, 0x6C, 0xCC, 0x8C, 0xC9, 0x03, 0x6C, 0xCC, - 0xA7, 0xA5, 0x03, 0x6C, 0xCC, 0xAD, 0xB5, 0x03, - 0x6C, 0xCC, 0xB1, 0xB5, 0x03, 0x6D, 0xCC, 0x81, - // Bytes 3400 - 343f - 0xC9, 0x03, 0x6D, 0xCC, 0x87, 0xC9, 0x03, 0x6D, - 0xCC, 0xA3, 0xB5, 0x03, 0x6E, 0xCC, 0x80, 0xC9, - 0x03, 0x6E, 0xCC, 0x81, 0xC9, 0x03, 0x6E, 0xCC, - 0x83, 0xC9, 0x03, 0x6E, 0xCC, 0x87, 0xC9, 0x03, - 0x6E, 0xCC, 0x8C, 0xC9, 0x03, 0x6E, 0xCC, 0xA3, - 0xB5, 0x03, 0x6E, 0xCC, 0xA7, 0xA5, 0x03, 0x6E, - 0xCC, 0xAD, 0xB5, 0x03, 0x6E, 0xCC, 0xB1, 0xB5, - 0x03, 0x6F, 0xCC, 0x80, 0xC9, 0x03, 0x6F, 0xCC, - // Bytes 3440 - 347f - 0x81, 0xC9, 0x03, 0x6F, 0xCC, 0x86, 0xC9, 0x03, - 0x6F, 0xCC, 0x89, 0xC9, 0x03, 0x6F, 0xCC, 0x8B, - 0xC9, 0x03, 0x6F, 0xCC, 0x8C, 0xC9, 0x03, 0x6F, - 0xCC, 0x8F, 0xC9, 0x03, 0x6F, 0xCC, 0x91, 0xC9, - 0x03, 0x70, 0xCC, 0x81, 0xC9, 0x03, 0x70, 0xCC, - 0x87, 0xC9, 0x03, 0x72, 0xCC, 0x81, 0xC9, 0x03, - 0x72, 0xCC, 0x87, 0xC9, 0x03, 0x72, 0xCC, 0x8C, - 0xC9, 0x03, 0x72, 0xCC, 0x8F, 0xC9, 0x03, 0x72, - // Bytes 3480 - 34bf - 0xCC, 0x91, 0xC9, 0x03, 0x72, 0xCC, 0xA7, 0xA5, - 0x03, 0x72, 0xCC, 0xB1, 0xB5, 0x03, 0x73, 0xCC, - 0x82, 0xC9, 0x03, 0x73, 0xCC, 0x87, 0xC9, 0x03, - 0x73, 0xCC, 0xA6, 0xB5, 0x03, 0x73, 0xCC, 0xA7, - 0xA5, 0x03, 0x74, 0xCC, 0x87, 0xC9, 0x03, 0x74, - 0xCC, 0x88, 0xC9, 0x03, 0x74, 0xCC, 0x8C, 0xC9, - 0x03, 0x74, 0xCC, 0xA3, 0xB5, 0x03, 0x74, 0xCC, - 0xA6, 0xB5, 0x03, 0x74, 0xCC, 0xA7, 0xA5, 0x03, - // Bytes 34c0 - 34ff - 0x74, 0xCC, 0xAD, 0xB5, 0x03, 0x74, 0xCC, 0xB1, - 0xB5, 0x03, 0x75, 0xCC, 0x80, 0xC9, 0x03, 0x75, - 0xCC, 0x81, 0xC9, 0x03, 0x75, 0xCC, 0x82, 0xC9, - 0x03, 0x75, 0xCC, 0x86, 0xC9, 0x03, 0x75, 0xCC, - 0x89, 0xC9, 0x03, 0x75, 0xCC, 0x8A, 0xC9, 0x03, - 0x75, 0xCC, 0x8B, 0xC9, 0x03, 0x75, 0xCC, 0x8C, - 0xC9, 0x03, 0x75, 0xCC, 0x8F, 0xC9, 0x03, 0x75, - 0xCC, 0x91, 0xC9, 0x03, 0x75, 0xCC, 0xA3, 0xB5, - // Bytes 3500 - 353f - 0x03, 0x75, 0xCC, 0xA4, 0xB5, 0x03, 0x75, 0xCC, - 0xA8, 0xA5, 0x03, 0x75, 0xCC, 0xAD, 0xB5, 0x03, - 0x75, 0xCC, 0xB0, 0xB5, 0x03, 0x76, 0xCC, 0x83, - 0xC9, 0x03, 0x76, 0xCC, 0xA3, 0xB5, 0x03, 0x77, - 0xCC, 0x80, 0xC9, 0x03, 0x77, 0xCC, 0x81, 0xC9, - 0x03, 0x77, 0xCC, 0x82, 0xC9, 0x03, 0x77, 0xCC, - 0x87, 0xC9, 0x03, 0x77, 0xCC, 0x88, 0xC9, 0x03, - 0x77, 0xCC, 0x8A, 0xC9, 0x03, 0x77, 0xCC, 0xA3, - // Bytes 3540 - 357f - 0xB5, 0x03, 0x78, 0xCC, 0x87, 0xC9, 0x03, 0x78, - 0xCC, 0x88, 0xC9, 0x03, 0x79, 0xCC, 0x80, 0xC9, - 0x03, 0x79, 0xCC, 0x81, 0xC9, 0x03, 0x79, 0xCC, - 0x82, 0xC9, 0x03, 0x79, 0xCC, 0x83, 0xC9, 0x03, - 0x79, 0xCC, 0x84, 0xC9, 0x03, 0x79, 0xCC, 0x87, - 0xC9, 0x03, 0x79, 0xCC, 0x88, 0xC9, 0x03, 0x79, - 0xCC, 0x89, 0xC9, 0x03, 0x79, 0xCC, 0x8A, 0xC9, - 0x03, 0x79, 0xCC, 0xA3, 0xB5, 0x03, 0x7A, 0xCC, - // Bytes 3580 - 35bf - 0x81, 0xC9, 0x03, 0x7A, 0xCC, 0x82, 0xC9, 0x03, - 0x7A, 0xCC, 0x87, 0xC9, 0x03, 0x7A, 0xCC, 0x8C, - 0xC9, 0x03, 0x7A, 0xCC, 0xA3, 0xB5, 0x03, 0x7A, - 0xCC, 0xB1, 0xB5, 0x04, 0xC2, 0xA8, 0xCC, 0x80, - 0xCA, 0x04, 0xC2, 0xA8, 0xCC, 0x81, 0xCA, 0x04, - 0xC2, 0xA8, 0xCD, 0x82, 0xCA, 0x04, 0xC3, 0x86, - 0xCC, 0x81, 0xC9, 0x04, 0xC3, 0x86, 0xCC, 0x84, - 0xC9, 0x04, 0xC3, 0x98, 0xCC, 0x81, 0xC9, 0x04, - // Bytes 35c0 - 35ff - 0xC3, 0xA6, 0xCC, 0x81, 0xC9, 0x04, 0xC3, 0xA6, - 0xCC, 0x84, 0xC9, 0x04, 0xC3, 0xB8, 0xCC, 0x81, - 0xC9, 0x04, 0xC5, 0xBF, 0xCC, 0x87, 0xC9, 0x04, - 0xC6, 0xB7, 0xCC, 0x8C, 0xC9, 0x04, 0xCA, 0x92, - 0xCC, 0x8C, 0xC9, 0x04, 0xCE, 0x91, 0xCC, 0x80, - 0xC9, 0x04, 0xCE, 0x91, 0xCC, 0x81, 0xC9, 0x04, - 0xCE, 0x91, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0x91, - 0xCC, 0x86, 0xC9, 0x04, 0xCE, 0x91, 0xCD, 0x85, - // Bytes 3600 - 363f - 0xD9, 0x04, 0xCE, 0x95, 0xCC, 0x80, 0xC9, 0x04, - 0xCE, 0x95, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0x97, - 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x97, 0xCC, 0x81, - 0xC9, 0x04, 0xCE, 0x97, 0xCD, 0x85, 0xD9, 0x04, - 0xCE, 0x99, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x99, - 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0x99, 0xCC, 0x84, - 0xC9, 0x04, 0xCE, 0x99, 0xCC, 0x86, 0xC9, 0x04, - 0xCE, 0x99, 0xCC, 0x88, 0xC9, 0x04, 0xCE, 0x9F, - // Bytes 3640 - 367f - 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x9F, 0xCC, 0x81, - 0xC9, 0x04, 0xCE, 0xA1, 0xCC, 0x94, 0xC9, 0x04, - 0xCE, 0xA5, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0xA5, - 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x84, - 0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x86, 0xC9, 0x04, - 0xCE, 0xA5, 0xCC, 0x88, 0xC9, 0x04, 0xCE, 0xA9, - 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0xA9, 0xCC, 0x81, - 0xC9, 0x04, 0xCE, 0xA9, 0xCD, 0x85, 0xD9, 0x04, - // Bytes 3680 - 36bf - 0xCE, 0xB1, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0xB1, - 0xCC, 0x86, 0xC9, 0x04, 0xCE, 0xB1, 0xCD, 0x85, - 0xD9, 0x04, 0xCE, 0xB5, 0xCC, 0x80, 0xC9, 0x04, - 0xCE, 0xB5, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xB7, - 0xCD, 0x85, 0xD9, 0x04, 0xCE, 0xB9, 0xCC, 0x80, - 0xC9, 0x04, 0xCE, 0xB9, 0xCC, 0x81, 0xC9, 0x04, - 0xCE, 0xB9, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0xB9, - 0xCC, 0x86, 0xC9, 0x04, 0xCE, 0xB9, 0xCD, 0x82, - // Bytes 36c0 - 36ff - 0xC9, 0x04, 0xCE, 0xBF, 0xCC, 0x80, 0xC9, 0x04, - 0xCE, 0xBF, 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x81, - 0xCC, 0x93, 0xC9, 0x04, 0xCF, 0x81, 0xCC, 0x94, - 0xC9, 0x04, 0xCF, 0x85, 0xCC, 0x80, 0xC9, 0x04, - 0xCF, 0x85, 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x85, - 0xCC, 0x84, 0xC9, 0x04, 0xCF, 0x85, 0xCC, 0x86, - 0xC9, 0x04, 0xCF, 0x85, 0xCD, 0x82, 0xC9, 0x04, - 0xCF, 0x89, 0xCD, 0x85, 0xD9, 0x04, 0xCF, 0x92, - // Bytes 3700 - 373f - 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x92, 0xCC, 0x88, - 0xC9, 0x04, 0xD0, 0x86, 0xCC, 0x88, 0xC9, 0x04, - 0xD0, 0x90, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0x90, - 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x93, 0xCC, 0x81, - 0xC9, 0x04, 0xD0, 0x95, 0xCC, 0x80, 0xC9, 0x04, - 0xD0, 0x95, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0x95, - 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x96, 0xCC, 0x86, - 0xC9, 0x04, 0xD0, 0x96, 0xCC, 0x88, 0xC9, 0x04, - // Bytes 3740 - 377f - 0xD0, 0x97, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x98, - 0xCC, 0x80, 0xC9, 0x04, 0xD0, 0x98, 0xCC, 0x84, - 0xC9, 0x04, 0xD0, 0x98, 0xCC, 0x86, 0xC9, 0x04, - 0xD0, 0x98, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x9A, - 0xCC, 0x81, 0xC9, 0x04, 0xD0, 0x9E, 0xCC, 0x88, - 0xC9, 0x04, 0xD0, 0xA3, 0xCC, 0x84, 0xC9, 0x04, - 0xD0, 0xA3, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xA3, - 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xA3, 0xCC, 0x8B, - // Bytes 3780 - 37bf - 0xC9, 0x04, 0xD0, 0xA7, 0xCC, 0x88, 0xC9, 0x04, - 0xD0, 0xAB, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xAD, - 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xB0, 0xCC, 0x86, - 0xC9, 0x04, 0xD0, 0xB0, 0xCC, 0x88, 0xC9, 0x04, - 0xD0, 0xB3, 0xCC, 0x81, 0xC9, 0x04, 0xD0, 0xB5, - 0xCC, 0x80, 0xC9, 0x04, 0xD0, 0xB5, 0xCC, 0x86, - 0xC9, 0x04, 0xD0, 0xB5, 0xCC, 0x88, 0xC9, 0x04, - 0xD0, 0xB6, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB6, - // Bytes 37c0 - 37ff - 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xB7, 0xCC, 0x88, - 0xC9, 0x04, 0xD0, 0xB8, 0xCC, 0x80, 0xC9, 0x04, - 0xD0, 0xB8, 0xCC, 0x84, 0xC9, 0x04, 0xD0, 0xB8, - 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB8, 0xCC, 0x88, - 0xC9, 0x04, 0xD0, 0xBA, 0xCC, 0x81, 0xC9, 0x04, - 0xD0, 0xBE, 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0x83, - 0xCC, 0x84, 0xC9, 0x04, 0xD1, 0x83, 0xCC, 0x86, - 0xC9, 0x04, 0xD1, 0x83, 0xCC, 0x88, 0xC9, 0x04, - // Bytes 3800 - 383f - 0xD1, 0x83, 0xCC, 0x8B, 0xC9, 0x04, 0xD1, 0x87, - 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0x8B, 0xCC, 0x88, - 0xC9, 0x04, 0xD1, 0x8D, 0xCC, 0x88, 0xC9, 0x04, - 0xD1, 0x96, 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0xB4, - 0xCC, 0x8F, 0xC9, 0x04, 0xD1, 0xB5, 0xCC, 0x8F, - 0xC9, 0x04, 0xD3, 0x98, 0xCC, 0x88, 0xC9, 0x04, - 0xD3, 0x99, 0xCC, 0x88, 0xC9, 0x04, 0xD3, 0xA8, - 0xCC, 0x88, 0xC9, 0x04, 0xD3, 0xA9, 0xCC, 0x88, - // Bytes 3840 - 387f - 0xC9, 0x04, 0xD8, 0xA7, 0xD9, 0x93, 0xC9, 0x04, - 0xD8, 0xA7, 0xD9, 0x94, 0xC9, 0x04, 0xD8, 0xA7, - 0xD9, 0x95, 0xB5, 0x04, 0xD9, 0x88, 0xD9, 0x94, - 0xC9, 0x04, 0xD9, 0x8A, 0xD9, 0x94, 0xC9, 0x04, - 0xDB, 0x81, 0xD9, 0x94, 0xC9, 0x04, 0xDB, 0x92, - 0xD9, 0x94, 0xC9, 0x04, 0xDB, 0x95, 0xD9, 0x94, - 0xC9, 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x80, 0xCA, - 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, - // Bytes 3880 - 38bf - 0x41, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x41, - 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x41, 0xCC, - 0x86, 0xCC, 0x80, 0xCA, 0x05, 0x41, 0xCC, 0x86, - 0xCC, 0x81, 0xCA, 0x05, 0x41, 0xCC, 0x86, 0xCC, - 0x83, 0xCA, 0x05, 0x41, 0xCC, 0x86, 0xCC, 0x89, - 0xCA, 0x05, 0x41, 0xCC, 0x87, 0xCC, 0x84, 0xCA, - 0x05, 0x41, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, - 0x41, 0xCC, 0x8A, 0xCC, 0x81, 0xCA, 0x05, 0x41, - // Bytes 38c0 - 38ff - 0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x41, 0xCC, - 0xA3, 0xCC, 0x86, 0xCA, 0x05, 0x43, 0xCC, 0xA7, - 0xCC, 0x81, 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, - 0x80, 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x81, - 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x83, 0xCA, - 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, - 0x45, 0xCC, 0x84, 0xCC, 0x80, 0xCA, 0x05, 0x45, - 0xCC, 0x84, 0xCC, 0x81, 0xCA, 0x05, 0x45, 0xCC, - // Bytes 3900 - 393f - 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x45, 0xCC, 0xA7, - 0xCC, 0x86, 0xCA, 0x05, 0x49, 0xCC, 0x88, 0xCC, - 0x81, 0xCA, 0x05, 0x4C, 0xCC, 0xA3, 0xCC, 0x84, - 0xCA, 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x80, 0xCA, - 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, - 0x4F, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x4F, - 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x4F, 0xCC, - 0x83, 0xCC, 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x83, - // Bytes 3940 - 397f - 0xCC, 0x84, 0xCA, 0x05, 0x4F, 0xCC, 0x83, 0xCC, - 0x88, 0xCA, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x80, - 0xCA, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x81, 0xCA, - 0x05, 0x4F, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05, - 0x4F, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x4F, - 0xCC, 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x4F, 0xCC, - 0x9B, 0xCC, 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, - 0xCC, 0x83, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, - // Bytes 3980 - 39bf - 0x89, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, 0xA3, - 0xB6, 0x05, 0x4F, 0xCC, 0xA3, 0xCC, 0x82, 0xCA, - 0x05, 0x4F, 0xCC, 0xA8, 0xCC, 0x84, 0xCA, 0x05, - 0x52, 0xCC, 0xA3, 0xCC, 0x84, 0xCA, 0x05, 0x53, - 0xCC, 0x81, 0xCC, 0x87, 0xCA, 0x05, 0x53, 0xCC, - 0x8C, 0xCC, 0x87, 0xCA, 0x05, 0x53, 0xCC, 0xA3, - 0xCC, 0x87, 0xCA, 0x05, 0x55, 0xCC, 0x83, 0xCC, - 0x81, 0xCA, 0x05, 0x55, 0xCC, 0x84, 0xCC, 0x88, - // Bytes 39c0 - 39ff - 0xCA, 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x80, 0xCA, - 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x05, - 0x55, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x55, - 0xCC, 0x88, 0xCC, 0x8C, 0xCA, 0x05, 0x55, 0xCC, - 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x55, 0xCC, 0x9B, - 0xCC, 0x81, 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, - 0x83, 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0x89, - 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6, - // Bytes 3a00 - 3a3f - 0x05, 0x61, 0xCC, 0x82, 0xCC, 0x80, 0xCA, 0x05, - 0x61, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, 0x61, - 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x61, 0xCC, - 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x61, 0xCC, 0x86, - 0xCC, 0x80, 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, - 0x81, 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x83, - 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x89, 0xCA, - 0x05, 0x61, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05, - // Bytes 3a40 - 3a7f - 0x61, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x61, - 0xCC, 0x8A, 0xCC, 0x81, 0xCA, 0x05, 0x61, 0xCC, - 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x61, 0xCC, 0xA3, - 0xCC, 0x86, 0xCA, 0x05, 0x63, 0xCC, 0xA7, 0xCC, - 0x81, 0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x80, - 0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x81, 0xCA, - 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, - 0x65, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x65, - // Bytes 3a80 - 3abf - 0xCC, 0x84, 0xCC, 0x80, 0xCA, 0x05, 0x65, 0xCC, - 0x84, 0xCC, 0x81, 0xCA, 0x05, 0x65, 0xCC, 0xA3, - 0xCC, 0x82, 0xCA, 0x05, 0x65, 0xCC, 0xA7, 0xCC, - 0x86, 0xCA, 0x05, 0x69, 0xCC, 0x88, 0xCC, 0x81, - 0xCA, 0x05, 0x6C, 0xCC, 0xA3, 0xCC, 0x84, 0xCA, - 0x05, 0x6F, 0xCC, 0x82, 0xCC, 0x80, 0xCA, 0x05, - 0x6F, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, 0x6F, - 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x6F, 0xCC, - // Bytes 3ac0 - 3aff - 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x6F, 0xCC, 0x83, - 0xCC, 0x81, 0xCA, 0x05, 0x6F, 0xCC, 0x83, 0xCC, - 0x84, 0xCA, 0x05, 0x6F, 0xCC, 0x83, 0xCC, 0x88, - 0xCA, 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x80, 0xCA, - 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x81, 0xCA, 0x05, - 0x6F, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05, 0x6F, - 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x6F, 0xCC, - 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, - // Bytes 3b00 - 3b3f - 0xCC, 0x81, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, - 0x83, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0x89, - 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6, - 0x05, 0x6F, 0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05, - 0x6F, 0xCC, 0xA8, 0xCC, 0x84, 0xCA, 0x05, 0x72, - 0xCC, 0xA3, 0xCC, 0x84, 0xCA, 0x05, 0x73, 0xCC, - 0x81, 0xCC, 0x87, 0xCA, 0x05, 0x73, 0xCC, 0x8C, - 0xCC, 0x87, 0xCA, 0x05, 0x73, 0xCC, 0xA3, 0xCC, - // Bytes 3b40 - 3b7f - 0x87, 0xCA, 0x05, 0x75, 0xCC, 0x83, 0xCC, 0x81, - 0xCA, 0x05, 0x75, 0xCC, 0x84, 0xCC, 0x88, 0xCA, - 0x05, 0x75, 0xCC, 0x88, 0xCC, 0x80, 0xCA, 0x05, - 0x75, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x05, 0x75, - 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x75, 0xCC, - 0x88, 0xCC, 0x8C, 0xCA, 0x05, 0x75, 0xCC, 0x9B, - 0xCC, 0x80, 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, - 0x81, 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x83, - // Bytes 3b80 - 3bbf - 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x89, 0xCA, - 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6, 0x05, - 0xE1, 0xBE, 0xBF, 0xCC, 0x80, 0xCA, 0x05, 0xE1, - 0xBE, 0xBF, 0xCC, 0x81, 0xCA, 0x05, 0xE1, 0xBE, - 0xBF, 0xCD, 0x82, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, - 0xCC, 0x80, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, 0xCC, - 0x81, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, 0xCD, 0x82, - 0xCA, 0x05, 0xE2, 0x86, 0x90, 0xCC, 0xB8, 0x05, - // Bytes 3bc0 - 3bff - 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, 0x05, 0x05, 0xE2, 0x88, 0x88, 0xCC, 0xB8, - 0x05, 0x05, 0xE2, 0x88, 0x8B, 0xCC, 0xB8, 0x05, - 0x05, 0xE2, 0x88, 0xA3, 0xCC, 0xB8, 0x05, 0x05, - // Bytes 3c00 - 3c3f - 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, 0x05, 0xE2, 0x89, 0xA1, 0xCC, 0xB8, 0x05, - 0x05, 0xE2, 0x89, 0xA4, 0xCC, 0xB8, 0x05, 0x05, - 0xE2, 0x89, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2, - // Bytes 3c40 - 3c7f - 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, 0xE2, 0x89, 0xBC, 0xCC, 0xB8, 0x05, 0x05, - 0xE2, 0x89, 0xBD, 0xCC, 0xB8, 0x05, 0x05, 0xE2, - 0x8A, 0x82, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, - // Bytes 3c80 - 3cbf - 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, 0x8A, 0xA8, 0xCC, 0xB8, 0x05, 0x05, 0xE2, - 0x8A, 0xA9, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, - 0xAB, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB2, - // Bytes 3cc0 - 3cff - 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, 0xDA, - 0x06, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - // Bytes 3d00 - 3d3f - 0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCD, 0x82, 0xCA, - 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - // Bytes 3d40 - 3d7f - 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCD, 0x82, 0xCA, - 0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCD, 0x82, 0xCA, - // Bytes 3d80 - 3dbf - 0x06, 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB1, 0xCC, 0x80, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB1, 0xCC, 0x81, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB1, 0xCD, 0x82, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - // Bytes 3dc0 - 3dff - 0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0xB7, 0xCC, 0x80, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB7, 0xCC, 0x81, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB7, 0xCD, 0x82, 0xCD, 0x85, 0xDA, - // Bytes 3e00 - 3e3f - 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCD, 0x82, 0xCA, - 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCD, 0x82, 0xCA, - 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - // Bytes 3e40 - 3e7f - 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCD, 0x82, 0xCA, - 0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x80, 0xCA, - 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, 0xCA, - 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCD, 0x82, 0xCA, - // Bytes 3e80 - 3ebf - 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x81, 0xCA, - 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCD, 0x82, 0xCA, - 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCD, 0x82, 0xCA, - 0x06, 0xCF, 0x89, 0xCC, 0x80, 0xCD, 0x85, 0xDA, - 0x06, 0xCF, 0x89, 0xCC, 0x81, 0xCD, 0x85, 0xDA, - // Bytes 3ec0 - 3eff - 0x06, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x85, 0xDA, - 0x06, 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x85, 0xDA, - 0x06, 0xCF, 0x89, 0xCD, 0x82, 0xCD, 0x85, 0xDA, - 0x06, 0xE0, 0xA4, 0xA8, 0xE0, 0xA4, 0xBC, 0x09, - 0x06, 0xE0, 0xA4, 0xB0, 0xE0, 0xA4, 0xBC, 0x09, - 0x06, 0xE0, 0xA4, 0xB3, 0xE0, 0xA4, 0xBC, 0x09, - 0x06, 0xE0, 0xB1, 0x86, 0xE0, 0xB1, 0x96, 0x85, - 0x06, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8A, 0x11, - // Bytes 3f00 - 3f3f - 0x06, 0xE3, 0x81, 0x86, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x8B, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x8D, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x8F, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x91, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x93, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x95, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x97, 0xE3, 0x82, 0x99, 0x0D, - // Bytes 3f40 - 3f7f - 0x06, 0xE3, 0x81, 0x99, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x9B, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x9D, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x9F, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xA1, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xA4, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xA6, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xA8, 0xE3, 0x82, 0x99, 0x0D, - // Bytes 3f80 - 3fbf - 0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x9A, 0x0D, - // Bytes 3fc0 - 3fff - 0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x82, 0x9D, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xA6, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xB1, 0xE3, 0x82, 0x99, 0x0D, - // Bytes 4000 - 403f - 0x06, 0xE3, 0x82, 0xB3, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xB5, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xB9, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xBD, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0x81, 0xE3, 0x82, 0x99, 0x0D, - // Bytes 4040 - 407f - 0x06, 0xE3, 0x83, 0x84, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, 0x0D, - // Bytes 4080 - 40bf - 0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x83, 0xAF, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0xB0, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0xB1, 0xE3, 0x82, 0x99, 0x0D, - // Bytes 40c0 - 40ff - 0x06, 0xE3, 0x83, 0xB2, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0xBD, 0xE3, 0x82, 0x99, 0x0D, - 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCD, - 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC, - 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, - 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, - 0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB, - 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCD, - // Bytes 4100 - 413f - 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCD, - 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC, - 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, - 0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB, - 0x08, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCD, - 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC, 0x94, 0xCC, - 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC, - 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, - // Bytes 4140 - 417f - 0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB, - 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCD, - 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, - 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, - 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, - 0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB, - 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCD, - 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, - // Bytes 4180 - 41bf - 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC, - 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, - 0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB, - 0x08, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCD, - 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC, 0x94, 0xCC, - 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC, - 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, - 0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB, - // Bytes 41c0 - 41ff - 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCD, - 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, - 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, - 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, - 0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB, - 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCD, - 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, - 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC, - // Bytes 4200 - 423f - 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCF, - 0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB, - 0x08, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCD, - 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC, 0x94, 0xCC, - 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC, - 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCF, - 0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB, - 0x08, 0xF0, 0x91, 0x82, 0x99, 0xF0, 0x91, 0x82, - // Bytes 4240 - 427f - 0xBA, 0x09, 0x08, 0xF0, 0x91, 0x82, 0x9B, 0xF0, - 0x91, 0x82, 0xBA, 0x09, 0x08, 0xF0, 0x91, 0x82, - 0xA5, 0xF0, 0x91, 0x82, 0xBA, 0x09, 0x42, 0xC2, - 0xB4, 0x01, 0x43, 0x20, 0xCC, 0x81, 0xC9, 0x43, - 0x20, 0xCC, 0x83, 0xC9, 0x43, 0x20, 0xCC, 0x84, - 0xC9, 0x43, 0x20, 0xCC, 0x85, 0xC9, 0x43, 0x20, - 0xCC, 0x86, 0xC9, 0x43, 0x20, 0xCC, 0x87, 0xC9, - 0x43, 0x20, 0xCC, 0x88, 0xC9, 0x43, 0x20, 0xCC, - // Bytes 4280 - 42bf - 0x8A, 0xC9, 0x43, 0x20, 0xCC, 0x8B, 0xC9, 0x43, - 0x20, 0xCC, 0x93, 0xC9, 0x43, 0x20, 0xCC, 0x94, - 0xC9, 0x43, 0x20, 0xCC, 0xA7, 0xA5, 0x43, 0x20, - 0xCC, 0xA8, 0xA5, 0x43, 0x20, 0xCC, 0xB3, 0xB5, - 0x43, 0x20, 0xCD, 0x82, 0xC9, 0x43, 0x20, 0xCD, - 0x85, 0xD9, 0x43, 0x20, 0xD9, 0x8B, 0x59, 0x43, - 0x20, 0xD9, 0x8C, 0x5D, 0x43, 0x20, 0xD9, 0x8D, - 0x61, 0x43, 0x20, 0xD9, 0x8E, 0x65, 0x43, 0x20, - // Bytes 42c0 - 42ff - 0xD9, 0x8F, 0x69, 0x43, 0x20, 0xD9, 0x90, 0x6D, - 0x43, 0x20, 0xD9, 0x91, 0x71, 0x43, 0x20, 0xD9, - 0x92, 0x75, 0x43, 0x41, 0xCC, 0x8A, 0xC9, 0x43, - 0x73, 0xCC, 0x87, 0xC9, 0x44, 0x20, 0xE3, 0x82, - 0x99, 0x0D, 0x44, 0x20, 0xE3, 0x82, 0x9A, 0x0D, - 0x44, 0xC2, 0xA8, 0xCC, 0x81, 0xCA, 0x44, 0xCE, - 0x91, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0x95, 0xCC, - 0x81, 0xC9, 0x44, 0xCE, 0x97, 0xCC, 0x81, 0xC9, - // Bytes 4300 - 433f - 0x44, 0xCE, 0x99, 0xCC, 0x81, 0xC9, 0x44, 0xCE, - 0x9F, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC, - 0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC, 0x88, 0xC9, - 0x44, 0xCE, 0xA9, 0xCC, 0x81, 0xC9, 0x44, 0xCE, - 0xB1, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xB5, 0xCC, - 0x81, 0xC9, 0x44, 0xCE, 0xB7, 0xCC, 0x81, 0xC9, - 0x44, 0xCE, 0xB9, 0xCC, 0x81, 0xC9, 0x44, 0xCE, - 0xBF, 0xCC, 0x81, 0xC9, 0x44, 0xCF, 0x85, 0xCC, - // Bytes 4340 - 437f - 0x81, 0xC9, 0x44, 0xCF, 0x89, 0xCC, 0x81, 0xC9, - 0x44, 0xD7, 0x90, 0xD6, 0xB7, 0x31, 0x44, 0xD7, - 0x90, 0xD6, 0xB8, 0x35, 0x44, 0xD7, 0x90, 0xD6, - 0xBC, 0x41, 0x44, 0xD7, 0x91, 0xD6, 0xBC, 0x41, - 0x44, 0xD7, 0x91, 0xD6, 0xBF, 0x49, 0x44, 0xD7, - 0x92, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x93, 0xD6, - 0xBC, 0x41, 0x44, 0xD7, 0x94, 0xD6, 0xBC, 0x41, - 0x44, 0xD7, 0x95, 0xD6, 0xB9, 0x39, 0x44, 0xD7, - // Bytes 4380 - 43bf - 0x95, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x96, 0xD6, - 0xBC, 0x41, 0x44, 0xD7, 0x98, 0xD6, 0xBC, 0x41, - 0x44, 0xD7, 0x99, 0xD6, 0xB4, 0x25, 0x44, 0xD7, - 0x99, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9A, 0xD6, - 0xBC, 0x41, 0x44, 0xD7, 0x9B, 0xD6, 0xBC, 0x41, - 0x44, 0xD7, 0x9B, 0xD6, 0xBF, 0x49, 0x44, 0xD7, - 0x9C, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9E, 0xD6, - 0xBC, 0x41, 0x44, 0xD7, 0xA0, 0xD6, 0xBC, 0x41, - // Bytes 43c0 - 43ff - 0x44, 0xD7, 0xA1, 0xD6, 0xBC, 0x41, 0x44, 0xD7, - 0xA3, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6, - 0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6, 0xBF, 0x49, - 0x44, 0xD7, 0xA6, 0xD6, 0xBC, 0x41, 0x44, 0xD7, - 0xA7, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA8, 0xD6, - 0xBC, 0x41, 0x44, 0xD7, 0xA9, 0xD6, 0xBC, 0x41, - 0x44, 0xD7, 0xA9, 0xD7, 0x81, 0x4D, 0x44, 0xD7, - 0xA9, 0xD7, 0x82, 0x51, 0x44, 0xD7, 0xAA, 0xD6, - // Bytes 4400 - 443f - 0xBC, 0x41, 0x44, 0xD7, 0xB2, 0xD6, 0xB7, 0x31, - 0x44, 0xD8, 0xA7, 0xD9, 0x8B, 0x59, 0x44, 0xD8, - 0xA7, 0xD9, 0x93, 0xC9, 0x44, 0xD8, 0xA7, 0xD9, - 0x94, 0xC9, 0x44, 0xD8, 0xA7, 0xD9, 0x95, 0xB5, - 0x44, 0xD8, 0xB0, 0xD9, 0xB0, 0x79, 0x44, 0xD8, - 0xB1, 0xD9, 0xB0, 0x79, 0x44, 0xD9, 0x80, 0xD9, - 0x8B, 0x59, 0x44, 0xD9, 0x80, 0xD9, 0x8E, 0x65, - 0x44, 0xD9, 0x80, 0xD9, 0x8F, 0x69, 0x44, 0xD9, - // Bytes 4440 - 447f - 0x80, 0xD9, 0x90, 0x6D, 0x44, 0xD9, 0x80, 0xD9, - 0x91, 0x71, 0x44, 0xD9, 0x80, 0xD9, 0x92, 0x75, - 0x44, 0xD9, 0x87, 0xD9, 0xB0, 0x79, 0x44, 0xD9, - 0x88, 0xD9, 0x94, 0xC9, 0x44, 0xD9, 0x89, 0xD9, - 0xB0, 0x79, 0x44, 0xD9, 0x8A, 0xD9, 0x94, 0xC9, - 0x44, 0xDB, 0x92, 0xD9, 0x94, 0xC9, 0x44, 0xDB, - 0x95, 0xD9, 0x94, 0xC9, 0x45, 0x20, 0xCC, 0x88, - 0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCC, - // Bytes 4480 - 44bf - 0x81, 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCD, 0x82, - 0xCA, 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x45, - 0x20, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x45, 0x20, - 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC, - 0x94, 0xCC, 0x81, 0xCA, 0x45, 0x20, 0xCC, 0x94, - 0xCD, 0x82, 0xCA, 0x45, 0x20, 0xD9, 0x8C, 0xD9, - 0x91, 0x72, 0x45, 0x20, 0xD9, 0x8D, 0xD9, 0x91, - // Bytes 44c0 - 44ff - 0x72, 0x45, 0x20, 0xD9, 0x8E, 0xD9, 0x91, 0x72, - 0x45, 0x20, 0xD9, 0x8F, 0xD9, 0x91, 0x72, 0x45, - 0x20, 0xD9, 0x90, 0xD9, 0x91, 0x72, 0x45, 0x20, - 0xD9, 0x91, 0xD9, 0xB0, 0x7A, 0x45, 0xE2, 0xAB, - 0x9D, 0xCC, 0xB8, 0x05, 0x46, 0xCE, 0xB9, 0xCC, - 0x88, 0xCC, 0x81, 0xCA, 0x46, 0xCF, 0x85, 0xCC, - 0x88, 0xCC, 0x81, 0xCA, 0x46, 0xD7, 0xA9, 0xD6, - 0xBC, 0xD7, 0x81, 0x4E, 0x46, 0xD7, 0xA9, 0xD6, - // Bytes 4500 - 453f - 0xBC, 0xD7, 0x82, 0x52, 0x46, 0xD9, 0x80, 0xD9, - 0x8E, 0xD9, 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9, - 0x8F, 0xD9, 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9, - 0x90, 0xD9, 0x91, 0x72, 0x46, 0xE0, 0xA4, 0x95, - 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x96, - 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x97, - 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x9C, - 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA1, - // Bytes 4540 - 457f - 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA2, - 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAB, - 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAF, - 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA1, - 0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA2, - 0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xAF, - 0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x96, - 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x97, - // Bytes 4580 - 45bf - 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x9C, - 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xAB, - 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB2, - 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB8, - 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA1, - 0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA2, - 0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, 0xBE, 0xB2, - 0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE0, 0xBE, 0xB3, - // Bytes 45c0 - 45ff - 0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE3, 0x83, 0x86, - 0xE3, 0x82, 0x99, 0x0D, 0x48, 0xF0, 0x9D, 0x85, - 0x97, 0xF0, 0x9D, 0x85, 0xA5, 0xAD, 0x48, 0xF0, - 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xAD, - 0x48, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, - 0xA5, 0xAD, 0x48, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, - 0x9D, 0x85, 0xA5, 0xAD, 0x49, 0xE0, 0xBE, 0xB2, - 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x49, - // Bytes 4600 - 463f - 0xE0, 0xBE, 0xB3, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, - 0x80, 0x9E, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, - 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE, - 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, - 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0, - 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, - 0x9D, 0x85, 0xB0, 0xAE, 0x4C, 0xF0, 0x9D, 0x85, - 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, - // Bytes 4640 - 467f - 0xB1, 0xAE, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, - 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB2, 0xAE, - 0x4C, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, - 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE, 0x4C, 0xF0, - 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, - 0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0, 0x9D, 0x86, - 0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, - 0xAE, 0xAE, 0x4C, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, - // Bytes 4680 - 46bf - 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE, - 0x83, 0x41, 0xCC, 0x82, 0xC9, 0x83, 0x41, 0xCC, - 0x86, 0xC9, 0x83, 0x41, 0xCC, 0x87, 0xC9, 0x83, - 0x41, 0xCC, 0x88, 0xC9, 0x83, 0x41, 0xCC, 0x8A, - 0xC9, 0x83, 0x41, 0xCC, 0xA3, 0xB5, 0x83, 0x43, - 0xCC, 0xA7, 0xA5, 0x83, 0x45, 0xCC, 0x82, 0xC9, - 0x83, 0x45, 0xCC, 0x84, 0xC9, 0x83, 0x45, 0xCC, - 0xA3, 0xB5, 0x83, 0x45, 0xCC, 0xA7, 0xA5, 0x83, - // Bytes 46c0 - 46ff - 0x49, 0xCC, 0x88, 0xC9, 0x83, 0x4C, 0xCC, 0xA3, - 0xB5, 0x83, 0x4F, 0xCC, 0x82, 0xC9, 0x83, 0x4F, - 0xCC, 0x83, 0xC9, 0x83, 0x4F, 0xCC, 0x84, 0xC9, - 0x83, 0x4F, 0xCC, 0x87, 0xC9, 0x83, 0x4F, 0xCC, - 0x88, 0xC9, 0x83, 0x4F, 0xCC, 0x9B, 0xAD, 0x83, - 0x4F, 0xCC, 0xA3, 0xB5, 0x83, 0x4F, 0xCC, 0xA8, - 0xA5, 0x83, 0x52, 0xCC, 0xA3, 0xB5, 0x83, 0x53, - 0xCC, 0x81, 0xC9, 0x83, 0x53, 0xCC, 0x8C, 0xC9, - // Bytes 4700 - 473f - 0x83, 0x53, 0xCC, 0xA3, 0xB5, 0x83, 0x55, 0xCC, - 0x83, 0xC9, 0x83, 0x55, 0xCC, 0x84, 0xC9, 0x83, - 0x55, 0xCC, 0x88, 0xC9, 0x83, 0x55, 0xCC, 0x9B, - 0xAD, 0x83, 0x61, 0xCC, 0x82, 0xC9, 0x83, 0x61, - 0xCC, 0x86, 0xC9, 0x83, 0x61, 0xCC, 0x87, 0xC9, - 0x83, 0x61, 0xCC, 0x88, 0xC9, 0x83, 0x61, 0xCC, - 0x8A, 0xC9, 0x83, 0x61, 0xCC, 0xA3, 0xB5, 0x83, - 0x63, 0xCC, 0xA7, 0xA5, 0x83, 0x65, 0xCC, 0x82, - // Bytes 4740 - 477f - 0xC9, 0x83, 0x65, 0xCC, 0x84, 0xC9, 0x83, 0x65, - 0xCC, 0xA3, 0xB5, 0x83, 0x65, 0xCC, 0xA7, 0xA5, - 0x83, 0x69, 0xCC, 0x88, 0xC9, 0x83, 0x6C, 0xCC, - 0xA3, 0xB5, 0x83, 0x6F, 0xCC, 0x82, 0xC9, 0x83, - 0x6F, 0xCC, 0x83, 0xC9, 0x83, 0x6F, 0xCC, 0x84, - 0xC9, 0x83, 0x6F, 0xCC, 0x87, 0xC9, 0x83, 0x6F, - 0xCC, 0x88, 0xC9, 0x83, 0x6F, 0xCC, 0x9B, 0xAD, - 0x83, 0x6F, 0xCC, 0xA3, 0xB5, 0x83, 0x6F, 0xCC, - // Bytes 4780 - 47bf - 0xA8, 0xA5, 0x83, 0x72, 0xCC, 0xA3, 0xB5, 0x83, - 0x73, 0xCC, 0x81, 0xC9, 0x83, 0x73, 0xCC, 0x8C, - 0xC9, 0x83, 0x73, 0xCC, 0xA3, 0xB5, 0x83, 0x75, - 0xCC, 0x83, 0xC9, 0x83, 0x75, 0xCC, 0x84, 0xC9, - 0x83, 0x75, 0xCC, 0x88, 0xC9, 0x83, 0x75, 0xCC, - 0x9B, 0xAD, 0x84, 0xCE, 0x91, 0xCC, 0x93, 0xC9, - 0x84, 0xCE, 0x91, 0xCC, 0x94, 0xC9, 0x84, 0xCE, - 0x95, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x95, 0xCC, - // Bytes 47c0 - 47ff - 0x94, 0xC9, 0x84, 0xCE, 0x97, 0xCC, 0x93, 0xC9, - 0x84, 0xCE, 0x97, 0xCC, 0x94, 0xC9, 0x84, 0xCE, - 0x99, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x99, 0xCC, - 0x94, 0xC9, 0x84, 0xCE, 0x9F, 0xCC, 0x93, 0xC9, - 0x84, 0xCE, 0x9F, 0xCC, 0x94, 0xC9, 0x84, 0xCE, - 0xA5, 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0xA9, 0xCC, - 0x93, 0xC9, 0x84, 0xCE, 0xA9, 0xCC, 0x94, 0xC9, - 0x84, 0xCE, 0xB1, 0xCC, 0x80, 0xC9, 0x84, 0xCE, - // Bytes 4800 - 483f - 0xB1, 0xCC, 0x81, 0xC9, 0x84, 0xCE, 0xB1, 0xCC, - 0x93, 0xC9, 0x84, 0xCE, 0xB1, 0xCC, 0x94, 0xC9, - 0x84, 0xCE, 0xB1, 0xCD, 0x82, 0xC9, 0x84, 0xCE, - 0xB5, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB5, 0xCC, - 0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCC, 0x80, 0xC9, - 0x84, 0xCE, 0xB7, 0xCC, 0x81, 0xC9, 0x84, 0xCE, - 0xB7, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB7, 0xCC, - 0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCD, 0x82, 0xC9, - // Bytes 4840 - 487f - 0x84, 0xCE, 0xB9, 0xCC, 0x88, 0xC9, 0x84, 0xCE, - 0xB9, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB9, 0xCC, - 0x94, 0xC9, 0x84, 0xCE, 0xBF, 0xCC, 0x93, 0xC9, - 0x84, 0xCE, 0xBF, 0xCC, 0x94, 0xC9, 0x84, 0xCF, - 0x85, 0xCC, 0x88, 0xC9, 0x84, 0xCF, 0x85, 0xCC, - 0x93, 0xC9, 0x84, 0xCF, 0x85, 0xCC, 0x94, 0xC9, - 0x84, 0xCF, 0x89, 0xCC, 0x80, 0xC9, 0x84, 0xCF, - 0x89, 0xCC, 0x81, 0xC9, 0x84, 0xCF, 0x89, 0xCC, - // Bytes 4880 - 48bf - 0x93, 0xC9, 0x84, 0xCF, 0x89, 0xCC, 0x94, 0xC9, - 0x84, 0xCF, 0x89, 0xCD, 0x82, 0xC9, 0x86, 0xCE, - 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0x91, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0x91, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - 0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0x91, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - // Bytes 48c0 - 48ff - 0x97, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - 0x97, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0x97, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0xA9, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - // Bytes 4900 - 493f - 0xA9, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - 0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0xA9, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - 0xB1, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - 0xB1, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - // Bytes 4940 - 497f - 0xB1, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0xB7, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0xB7, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - 0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0xB7, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCF, - // Bytes 4980 - 49bf - 0x89, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCF, - 0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCF, - 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCF, - 0x89, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCF, - 0x89, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCF, - 0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x42, 0xCC, - 0x80, 0xC9, 0x32, 0x42, 0xCC, 0x81, 0xC9, 0x32, - 0x42, 0xCC, 0x93, 0xC9, 0x32, 0x43, 0xE1, 0x85, - // Bytes 49c0 - 49ff - 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, 0x85, 0xA8, 0x01, 0x00, 0x43, 0xE1, 0x85, - 0xA9, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAA, 0x01, - 0x00, 0x43, 0xE1, 0x85, 0xAB, 0x01, 0x00, 0x43, - // Bytes 4a00 - 4a3f - 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, 0x43, 0xE1, 0x85, 0xB3, 0x01, 0x00, 0x43, - 0xE1, 0x85, 0xB4, 0x01, 0x00, 0x43, 0xE1, 0x85, - 0xB5, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xAA, 0x01, - // Bytes 4a40 - 4a7f - 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, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB5, 0x01, - 0x00, 0x44, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x32, - 0x43, 0xE3, 0x82, 0x99, 0x0D, 0x03, 0x43, 0xE3, - // Bytes 4a80 - 4abf - 0x82, 0x9A, 0x0D, 0x03, 0x46, 0xE0, 0xBD, 0xB1, - 0xE0, 0xBD, 0xB2, 0x9E, 0x26, 0x46, 0xE0, 0xBD, - 0xB1, 0xE0, 0xBD, 0xB4, 0xA2, 0x26, 0x46, 0xE0, - 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x26, 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: 10332 bytes (10.09 KiB). Checksum: 51cc525b297fc970. -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 < 44: - return uint16(nfcValues[n<<6+uint32(b)]) - default: - n -= 44 - return uint16(nfcSparse.lookup(n, b)) - } -} - -// nfcValues: 46 blocks, 2944 entries, 5888 bytes -// The third block is the zero block. -var nfcValues = [2944]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: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x4688, 0xc3: 0x2f79, 0xc4: 0x4697, 0xc5: 0x469c, - 0xc6: 0xa000, 0xc7: 0x46a6, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x46ab, 0xcb: 0x2ffb, - 0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x46bf, 0xd1: 0x3104, - 0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x46c9, 0xd5: 0x46ce, 0xd6: 0x46dd, - 0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x470f, 0xdd: 0x3235, - 0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x4719, 0xe3: 0x3285, - 0xe4: 0x4728, 0xe5: 0x472d, 0xe6: 0xa000, 0xe7: 0x4737, 0xe8: 0x32ee, 0xe9: 0x32f3, - 0xea: 0x473c, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x4750, - 0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x475a, 0xf5: 0x475f, - 0xf6: 0x476e, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3, - 0xfc: 0x47a0, 0xfd: 0x3550, 0xff: 0x3569, - // Block 0x4, offset 0x100 - 0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x468d, 0x103: 0x471e, 0x104: 0x2f9c, 0x105: 0x32a8, - 0x106: 0x2fb0, 0x107: 0x32bc, 0x108: 0x2fb5, 0x109: 0x32c1, 0x10a: 0x2fba, 0x10b: 0x32c6, - 0x10c: 0x2fbf, 0x10d: 0x32cb, 0x10e: 0x2fc9, 0x10f: 0x32d5, - 0x112: 0x46b0, 0x113: 0x4741, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302, - 0x118: 0x3014, 0x119: 0x3320, 0x11a: 0x3005, 0x11b: 0x3311, 0x11c: 0x302d, 0x11d: 0x3339, - 0x11e: 0x3037, 0x11f: 0x3343, 0x120: 0x303c, 0x121: 0x3348, 0x122: 0x3046, 0x123: 0x3352, - 0x124: 0x304b, 0x125: 0x3357, 0x128: 0x307d, 0x129: 0x338e, - 0x12a: 0x3082, 0x12b: 0x3393, 0x12c: 0x3087, 0x12d: 0x3398, 0x12e: 0x30aa, 0x12f: 0x33b6, - 0x130: 0x308c, 0x134: 0x30b4, 0x135: 0x33c0, - 0x136: 0x30c8, 0x137: 0x33d9, 0x139: 0x30d2, 0x13a: 0x33e3, 0x13b: 0x30dc, - 0x13c: 0x33ed, 0x13d: 0x30d7, 0x13e: 0x33e8, - // Block 0x5, offset 0x140 - 0x143: 0x30ff, 0x144: 0x3410, 0x145: 0x3118, - 0x146: 0x3429, 0x147: 0x310e, 0x148: 0x341f, - 0x14c: 0x46d3, 0x14d: 0x4764, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c, - 0x154: 0x3159, 0x155: 0x346a, 0x156: 0x3172, 0x157: 0x3483, - 0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x46f6, 0x15b: 0x4787, 0x15c: 0x317c, 0x15d: 0x348d, - 0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x46fb, 0x161: 0x478c, 0x162: 0x31a4, 0x163: 0x34ba, - 0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x4705, 0x169: 0x4796, - 0x16a: 0x470a, 0x16b: 0x479b, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2, - 0x170: 0x31d1, 0x171: 0x34e7, 0x172: 0x31ef, 0x173: 0x3505, 0x174: 0x3212, 0x175: 0x3528, - 0x176: 0x323a, 0x177: 0x3555, 0x178: 0x324e, 0x179: 0x325d, 0x17a: 0x357d, 0x17b: 0x3267, - 0x17c: 0x3587, 0x17d: 0x326c, 0x17e: 0x358c, 0x17f: 0xa000, - // Block 0x6, offset 0x180 - 0x184: 0x8100, 0x185: 0x8100, - 0x186: 0x8100, - 0x18d: 0x2f88, 0x18e: 0x3294, 0x18f: 0x3096, 0x190: 0x33a2, 0x191: 0x3140, - 0x192: 0x3451, 0x193: 0x31d6, 0x194: 0x34ec, 0x195: 0x39cf, 0x196: 0x3b5e, 0x197: 0x39c8, - 0x198: 0x3b57, 0x199: 0x39d6, 0x19a: 0x3b65, 0x19b: 0x39c1, 0x19c: 0x3b50, - 0x19e: 0x38b0, 0x19f: 0x3a3f, 0x1a0: 0x38a9, 0x1a1: 0x3a38, 0x1a2: 0x35b3, 0x1a3: 0x35c5, - 0x1a6: 0x3041, 0x1a7: 0x334d, 0x1a8: 0x30be, 0x1a9: 0x33cf, - 0x1aa: 0x46ec, 0x1ab: 0x477d, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd, - 0x1b0: 0x33c5, 0x1b4: 0x3028, 0x1b5: 0x3334, - 0x1b8: 0x30fa, 0x1b9: 0x340b, 0x1ba: 0x38b7, 0x1bb: 0x3a46, - 0x1bc: 0x35ad, 0x1bd: 0x35bf, 0x1be: 0x35b9, 0x1bf: 0x35cb, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x2f8d, 0x1c1: 0x3299, 0x1c2: 0x2f92, 0x1c3: 0x329e, 0x1c4: 0x300a, 0x1c5: 0x3316, - 0x1c6: 0x300f, 0x1c7: 0x331b, 0x1c8: 0x309b, 0x1c9: 0x33a7, 0x1ca: 0x30a0, 0x1cb: 0x33ac, - 0x1cc: 0x3145, 0x1cd: 0x3456, 0x1ce: 0x314a, 0x1cf: 0x345b, 0x1d0: 0x3168, 0x1d1: 0x3479, - 0x1d2: 0x316d, 0x1d3: 0x347e, 0x1d4: 0x31db, 0x1d5: 0x34f1, 0x1d6: 0x31e0, 0x1d7: 0x34f6, - 0x1d8: 0x3186, 0x1d9: 0x3497, 0x1da: 0x319f, 0x1db: 0x34b5, - 0x1de: 0x305a, 0x1df: 0x3366, - 0x1e6: 0x4692, 0x1e7: 0x4723, 0x1e8: 0x46ba, 0x1e9: 0x474b, - 0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x46d8, 0x1ef: 0x4769, - 0x1f0: 0x3958, 0x1f1: 0x3ae7, 0x1f2: 0x3244, 0x1f3: 0x355f, - // Block 0x8, offset 0x200 - 0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132, - 0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932, - 0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932, - 0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d, - 0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d, - 0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d, - 0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d, - 0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d, - 0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101, - 0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d, - 0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132, - // Block 0x9, offset 0x240 - 0x240: 0x49ae, 0x241: 0x49b3, 0x242: 0x9932, 0x243: 0x49b8, 0x244: 0x4a71, 0x245: 0x9936, - 0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132, - 0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132, - 0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132, - 0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135, - 0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132, - 0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132, - 0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132, - 0x274: 0x0170, - 0x27a: 0x8100, - 0x27e: 0x0037, - // Block 0xa, offset 0x280 - 0x284: 0x8100, 0x285: 0x35a1, - 0x286: 0x35e9, 0x287: 0x00ce, 0x288: 0x3607, 0x289: 0x3613, 0x28a: 0x3625, - 0x28c: 0x3643, 0x28e: 0x3655, 0x28f: 0x3673, 0x290: 0x3e08, 0x291: 0xa000, - 0x295: 0xa000, 0x297: 0xa000, - 0x299: 0xa000, - 0x29f: 0xa000, 0x2a1: 0xa000, - 0x2a5: 0xa000, 0x2a9: 0xa000, - 0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x47fe, 0x2ad: 0x3697, 0x2ae: 0x4828, 0x2af: 0x36a9, - 0x2b0: 0x3e70, 0x2b1: 0xa000, 0x2b5: 0xa000, - 0x2b7: 0xa000, 0x2b9: 0xa000, - 0x2bf: 0xa000, - // Block 0xb, offset 0x2c0 - 0x2c0: 0x3721, 0x2c1: 0x372d, 0x2c3: 0x371b, - 0x2c6: 0xa000, 0x2c7: 0x3709, - 0x2cc: 0x375d, 0x2cd: 0x3745, 0x2ce: 0x376f, 0x2d0: 0xa000, - 0x2d3: 0xa000, 0x2d5: 0xa000, 0x2d6: 0xa000, 0x2d7: 0xa000, - 0x2d8: 0xa000, 0x2d9: 0x3751, 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: 0x37d5, 0x2fa: 0xa000, - 0x2fe: 0xa000, - // Block 0xc, offset 0x300 - 0x301: 0x3733, 0x302: 0x37b7, - 0x310: 0x370f, 0x311: 0x3793, - 0x312: 0x3715, 0x313: 0x3799, 0x316: 0x3727, 0x317: 0x37ab, - 0x318: 0xa000, 0x319: 0xa000, 0x31a: 0x3829, 0x31b: 0x382f, 0x31c: 0x3739, 0x31d: 0x37bd, - 0x31e: 0x373f, 0x31f: 0x37c3, 0x322: 0x374b, 0x323: 0x37cf, - 0x324: 0x3757, 0x325: 0x37db, 0x326: 0x3763, 0x327: 0x37e7, 0x328: 0xa000, 0x329: 0xa000, - 0x32a: 0x3835, 0x32b: 0x383b, 0x32c: 0x378d, 0x32d: 0x3811, 0x32e: 0x3769, 0x32f: 0x37ed, - 0x330: 0x3775, 0x331: 0x37f9, 0x332: 0x377b, 0x333: 0x37ff, 0x334: 0x3781, 0x335: 0x3805, - 0x338: 0x3787, 0x339: 0x380b, - // Block 0xd, offset 0x340 - 0x351: 0x812d, - 0x352: 0x8132, 0x353: 0x8132, 0x354: 0x8132, 0x355: 0x8132, 0x356: 0x812d, 0x357: 0x8132, - 0x358: 0x8132, 0x359: 0x8132, 0x35a: 0x812e, 0x35b: 0x812d, 0x35c: 0x8132, 0x35d: 0x8132, - 0x35e: 0x8132, 0x35f: 0x8132, 0x360: 0x8132, 0x361: 0x8132, 0x362: 0x812d, 0x363: 0x812d, - 0x364: 0x812d, 0x365: 0x812d, 0x366: 0x812d, 0x367: 0x812d, 0x368: 0x8132, 0x369: 0x8132, - 0x36a: 0x812d, 0x36b: 0x8132, 0x36c: 0x8132, 0x36d: 0x812e, 0x36e: 0x8131, 0x36f: 0x8132, - 0x370: 0x8105, 0x371: 0x8106, 0x372: 0x8107, 0x373: 0x8108, 0x374: 0x8109, 0x375: 0x810a, - 0x376: 0x810b, 0x377: 0x810c, 0x378: 0x810d, 0x379: 0x810e, 0x37a: 0x810e, 0x37b: 0x810f, - 0x37c: 0x8110, 0x37d: 0x8111, 0x37f: 0x8112, - // Block 0xe, offset 0x380 - 0x388: 0xa000, 0x38a: 0xa000, 0x38b: 0x8116, - 0x38c: 0x8117, 0x38d: 0x8118, 0x38e: 0x8119, 0x38f: 0x811a, 0x390: 0x811b, 0x391: 0x811c, - 0x392: 0x811d, 0x393: 0x9932, 0x394: 0x9932, 0x395: 0x992d, 0x396: 0x812d, 0x397: 0x8132, - 0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x8132, 0x39b: 0x8132, 0x39c: 0x812d, 0x39d: 0x8132, - 0x39e: 0x8132, 0x39f: 0x812d, - 0x3b0: 0x811e, - // Block 0xf, offset 0x3c0 - 0x3c5: 0xa000, - 0x3c6: 0x2d26, 0x3c7: 0xa000, 0x3c8: 0x2d2e, 0x3c9: 0xa000, 0x3ca: 0x2d36, 0x3cb: 0xa000, - 0x3cc: 0x2d3e, 0x3cd: 0xa000, 0x3ce: 0x2d46, 0x3d1: 0xa000, - 0x3d2: 0x2d4e, - 0x3f4: 0x8102, 0x3f5: 0x9900, - 0x3fa: 0xa000, 0x3fb: 0x2d56, - 0x3fc: 0xa000, 0x3fd: 0x2d5e, 0x3fe: 0xa000, 0x3ff: 0xa000, - // Block 0x10, offset 0x400 - 0x400: 0x2f97, 0x401: 0x32a3, 0x402: 0x2fa1, 0x403: 0x32ad, 0x404: 0x2fa6, 0x405: 0x32b2, - 0x406: 0x2fab, 0x407: 0x32b7, 0x408: 0x38cc, 0x409: 0x3a5b, 0x40a: 0x2fc4, 0x40b: 0x32d0, - 0x40c: 0x2fce, 0x40d: 0x32da, 0x40e: 0x2fdd, 0x40f: 0x32e9, 0x410: 0x2fd3, 0x411: 0x32df, - 0x412: 0x2fd8, 0x413: 0x32e4, 0x414: 0x38ef, 0x415: 0x3a7e, 0x416: 0x38f6, 0x417: 0x3a85, - 0x418: 0x3019, 0x419: 0x3325, 0x41a: 0x301e, 0x41b: 0x332a, 0x41c: 0x3904, 0x41d: 0x3a93, - 0x41e: 0x3023, 0x41f: 0x332f, 0x420: 0x3032, 0x421: 0x333e, 0x422: 0x3050, 0x423: 0x335c, - 0x424: 0x305f, 0x425: 0x336b, 0x426: 0x3055, 0x427: 0x3361, 0x428: 0x3064, 0x429: 0x3370, - 0x42a: 0x3069, 0x42b: 0x3375, 0x42c: 0x30af, 0x42d: 0x33bb, 0x42e: 0x390b, 0x42f: 0x3a9a, - 0x430: 0x30b9, 0x431: 0x33ca, 0x432: 0x30c3, 0x433: 0x33d4, 0x434: 0x30cd, 0x435: 0x33de, - 0x436: 0x46c4, 0x437: 0x4755, 0x438: 0x3912, 0x439: 0x3aa1, 0x43a: 0x30e6, 0x43b: 0x33f7, - 0x43c: 0x30e1, 0x43d: 0x33f2, 0x43e: 0x30eb, 0x43f: 0x33fc, - // Block 0x11, offset 0x440 - 0x440: 0x30f0, 0x441: 0x3401, 0x442: 0x30f5, 0x443: 0x3406, 0x444: 0x3109, 0x445: 0x341a, - 0x446: 0x3113, 0x447: 0x3424, 0x448: 0x3122, 0x449: 0x3433, 0x44a: 0x311d, 0x44b: 0x342e, - 0x44c: 0x3935, 0x44d: 0x3ac4, 0x44e: 0x3943, 0x44f: 0x3ad2, 0x450: 0x394a, 0x451: 0x3ad9, - 0x452: 0x3951, 0x453: 0x3ae0, 0x454: 0x314f, 0x455: 0x3460, 0x456: 0x3154, 0x457: 0x3465, - 0x458: 0x315e, 0x459: 0x346f, 0x45a: 0x46f1, 0x45b: 0x4782, 0x45c: 0x3997, 0x45d: 0x3b26, - 0x45e: 0x3177, 0x45f: 0x3488, 0x460: 0x3181, 0x461: 0x3492, 0x462: 0x4700, 0x463: 0x4791, - 0x464: 0x399e, 0x465: 0x3b2d, 0x466: 0x39a5, 0x467: 0x3b34, 0x468: 0x39ac, 0x469: 0x3b3b, - 0x46a: 0x3190, 0x46b: 0x34a1, 0x46c: 0x319a, 0x46d: 0x34b0, 0x46e: 0x31ae, 0x46f: 0x34c4, - 0x470: 0x31a9, 0x471: 0x34bf, 0x472: 0x31ea, 0x473: 0x3500, 0x474: 0x31f9, 0x475: 0x350f, - 0x476: 0x31f4, 0x477: 0x350a, 0x478: 0x39b3, 0x479: 0x3b42, 0x47a: 0x39ba, 0x47b: 0x3b49, - 0x47c: 0x31fe, 0x47d: 0x3514, 0x47e: 0x3203, 0x47f: 0x3519, - // Block 0x12, offset 0x480 - 0x480: 0x3208, 0x481: 0x351e, 0x482: 0x320d, 0x483: 0x3523, 0x484: 0x321c, 0x485: 0x3532, - 0x486: 0x3217, 0x487: 0x352d, 0x488: 0x3221, 0x489: 0x353c, 0x48a: 0x3226, 0x48b: 0x3541, - 0x48c: 0x322b, 0x48d: 0x3546, 0x48e: 0x3249, 0x48f: 0x3564, 0x490: 0x3262, 0x491: 0x3582, - 0x492: 0x3271, 0x493: 0x3591, 0x494: 0x3276, 0x495: 0x3596, 0x496: 0x337a, 0x497: 0x34a6, - 0x498: 0x3537, 0x499: 0x3573, 0x49b: 0x35d1, - 0x4a0: 0x46a1, 0x4a1: 0x4732, 0x4a2: 0x2f83, 0x4a3: 0x328f, - 0x4a4: 0x3878, 0x4a5: 0x3a07, 0x4a6: 0x3871, 0x4a7: 0x3a00, 0x4a8: 0x3886, 0x4a9: 0x3a15, - 0x4aa: 0x387f, 0x4ab: 0x3a0e, 0x4ac: 0x38be, 0x4ad: 0x3a4d, 0x4ae: 0x3894, 0x4af: 0x3a23, - 0x4b0: 0x388d, 0x4b1: 0x3a1c, 0x4b2: 0x38a2, 0x4b3: 0x3a31, 0x4b4: 0x389b, 0x4b5: 0x3a2a, - 0x4b6: 0x38c5, 0x4b7: 0x3a54, 0x4b8: 0x46b5, 0x4b9: 0x4746, 0x4ba: 0x3000, 0x4bb: 0x330c, - 0x4bc: 0x2fec, 0x4bd: 0x32f8, 0x4be: 0x38da, 0x4bf: 0x3a69, - // Block 0x13, offset 0x4c0 - 0x4c0: 0x38d3, 0x4c1: 0x3a62, 0x4c2: 0x38e8, 0x4c3: 0x3a77, 0x4c4: 0x38e1, 0x4c5: 0x3a70, - 0x4c6: 0x38fd, 0x4c7: 0x3a8c, 0x4c8: 0x3091, 0x4c9: 0x339d, 0x4ca: 0x30a5, 0x4cb: 0x33b1, - 0x4cc: 0x46e7, 0x4cd: 0x4778, 0x4ce: 0x3136, 0x4cf: 0x3447, 0x4d0: 0x3920, 0x4d1: 0x3aaf, - 0x4d2: 0x3919, 0x4d3: 0x3aa8, 0x4d4: 0x392e, 0x4d5: 0x3abd, 0x4d6: 0x3927, 0x4d7: 0x3ab6, - 0x4d8: 0x3989, 0x4d9: 0x3b18, 0x4da: 0x396d, 0x4db: 0x3afc, 0x4dc: 0x3966, 0x4dd: 0x3af5, - 0x4de: 0x397b, 0x4df: 0x3b0a, 0x4e0: 0x3974, 0x4e1: 0x3b03, 0x4e2: 0x3982, 0x4e3: 0x3b11, - 0x4e4: 0x31e5, 0x4e5: 0x34fb, 0x4e6: 0x31c7, 0x4e7: 0x34dd, 0x4e8: 0x39e4, 0x4e9: 0x3b73, - 0x4ea: 0x39dd, 0x4eb: 0x3b6c, 0x4ec: 0x39f2, 0x4ed: 0x3b81, 0x4ee: 0x39eb, 0x4ef: 0x3b7a, - 0x4f0: 0x39f9, 0x4f1: 0x3b88, 0x4f2: 0x3230, 0x4f3: 0x354b, 0x4f4: 0x3258, 0x4f5: 0x3578, - 0x4f6: 0x3253, 0x4f7: 0x356e, 0x4f8: 0x323f, 0x4f9: 0x355a, - // Block 0x14, offset 0x500 - 0x500: 0x4804, 0x501: 0x480a, 0x502: 0x491e, 0x503: 0x4936, 0x504: 0x4926, 0x505: 0x493e, - 0x506: 0x492e, 0x507: 0x4946, 0x508: 0x47aa, 0x509: 0x47b0, 0x50a: 0x488e, 0x50b: 0x48a6, - 0x50c: 0x4896, 0x50d: 0x48ae, 0x50e: 0x489e, 0x50f: 0x48b6, 0x510: 0x4816, 0x511: 0x481c, - 0x512: 0x3db8, 0x513: 0x3dc8, 0x514: 0x3dc0, 0x515: 0x3dd0, - 0x518: 0x47b6, 0x519: 0x47bc, 0x51a: 0x3ce8, 0x51b: 0x3cf8, 0x51c: 0x3cf0, 0x51d: 0x3d00, - 0x520: 0x482e, 0x521: 0x4834, 0x522: 0x494e, 0x523: 0x4966, - 0x524: 0x4956, 0x525: 0x496e, 0x526: 0x495e, 0x527: 0x4976, 0x528: 0x47c2, 0x529: 0x47c8, - 0x52a: 0x48be, 0x52b: 0x48d6, 0x52c: 0x48c6, 0x52d: 0x48de, 0x52e: 0x48ce, 0x52f: 0x48e6, - 0x530: 0x4846, 0x531: 0x484c, 0x532: 0x3e18, 0x533: 0x3e30, 0x534: 0x3e20, 0x535: 0x3e38, - 0x536: 0x3e28, 0x537: 0x3e40, 0x538: 0x47ce, 0x539: 0x47d4, 0x53a: 0x3d18, 0x53b: 0x3d30, - 0x53c: 0x3d20, 0x53d: 0x3d38, 0x53e: 0x3d28, 0x53f: 0x3d40, - // Block 0x15, offset 0x540 - 0x540: 0x4852, 0x541: 0x4858, 0x542: 0x3e48, 0x543: 0x3e58, 0x544: 0x3e50, 0x545: 0x3e60, - 0x548: 0x47da, 0x549: 0x47e0, 0x54a: 0x3d48, 0x54b: 0x3d58, - 0x54c: 0x3d50, 0x54d: 0x3d60, 0x550: 0x4864, 0x551: 0x486a, - 0x552: 0x3e80, 0x553: 0x3e98, 0x554: 0x3e88, 0x555: 0x3ea0, 0x556: 0x3e90, 0x557: 0x3ea8, - 0x559: 0x47e6, 0x55b: 0x3d68, 0x55d: 0x3d70, - 0x55f: 0x3d78, 0x560: 0x487c, 0x561: 0x4882, 0x562: 0x497e, 0x563: 0x4996, - 0x564: 0x4986, 0x565: 0x499e, 0x566: 0x498e, 0x567: 0x49a6, 0x568: 0x47ec, 0x569: 0x47f2, - 0x56a: 0x48ee, 0x56b: 0x4906, 0x56c: 0x48f6, 0x56d: 0x490e, 0x56e: 0x48fe, 0x56f: 0x4916, - 0x570: 0x47f8, 0x571: 0x431e, 0x572: 0x3691, 0x573: 0x4324, 0x574: 0x4822, 0x575: 0x432a, - 0x576: 0x36a3, 0x577: 0x4330, 0x578: 0x36c1, 0x579: 0x4336, 0x57a: 0x36d9, 0x57b: 0x433c, - 0x57c: 0x4870, 0x57d: 0x4342, - // Block 0x16, offset 0x580 - 0x580: 0x3da0, 0x581: 0x3da8, 0x582: 0x4184, 0x583: 0x41a2, 0x584: 0x418e, 0x585: 0x41ac, - 0x586: 0x4198, 0x587: 0x41b6, 0x588: 0x3cd8, 0x589: 0x3ce0, 0x58a: 0x40d0, 0x58b: 0x40ee, - 0x58c: 0x40da, 0x58d: 0x40f8, 0x58e: 0x40e4, 0x58f: 0x4102, 0x590: 0x3de8, 0x591: 0x3df0, - 0x592: 0x41c0, 0x593: 0x41de, 0x594: 0x41ca, 0x595: 0x41e8, 0x596: 0x41d4, 0x597: 0x41f2, - 0x598: 0x3d08, 0x599: 0x3d10, 0x59a: 0x410c, 0x59b: 0x412a, 0x59c: 0x4116, 0x59d: 0x4134, - 0x59e: 0x4120, 0x59f: 0x413e, 0x5a0: 0x3ec0, 0x5a1: 0x3ec8, 0x5a2: 0x41fc, 0x5a3: 0x421a, - 0x5a4: 0x4206, 0x5a5: 0x4224, 0x5a6: 0x4210, 0x5a7: 0x422e, 0x5a8: 0x3d80, 0x5a9: 0x3d88, - 0x5aa: 0x4148, 0x5ab: 0x4166, 0x5ac: 0x4152, 0x5ad: 0x4170, 0x5ae: 0x415c, 0x5af: 0x417a, - 0x5b0: 0x3685, 0x5b1: 0x367f, 0x5b2: 0x3d90, 0x5b3: 0x368b, 0x5b4: 0x3d98, - 0x5b6: 0x4810, 0x5b7: 0x3db0, 0x5b8: 0x35f5, 0x5b9: 0x35ef, 0x5ba: 0x35e3, 0x5bb: 0x42ee, - 0x5bc: 0x35fb, 0x5bd: 0x8100, 0x5be: 0x01d3, 0x5bf: 0xa100, - // Block 0x17, offset 0x5c0 - 0x5c0: 0x8100, 0x5c1: 0x35a7, 0x5c2: 0x3dd8, 0x5c3: 0x369d, 0x5c4: 0x3de0, - 0x5c6: 0x483a, 0x5c7: 0x3df8, 0x5c8: 0x3601, 0x5c9: 0x42f4, 0x5ca: 0x360d, 0x5cb: 0x42fa, - 0x5cc: 0x3619, 0x5cd: 0x3b8f, 0x5ce: 0x3b96, 0x5cf: 0x3b9d, 0x5d0: 0x36b5, 0x5d1: 0x36af, - 0x5d2: 0x3e00, 0x5d3: 0x44e4, 0x5d6: 0x36bb, 0x5d7: 0x3e10, - 0x5d8: 0x3631, 0x5d9: 0x362b, 0x5da: 0x361f, 0x5db: 0x4300, 0x5dd: 0x3ba4, - 0x5de: 0x3bab, 0x5df: 0x3bb2, 0x5e0: 0x36eb, 0x5e1: 0x36e5, 0x5e2: 0x3e68, 0x5e3: 0x44ec, - 0x5e4: 0x36cd, 0x5e5: 0x36d3, 0x5e6: 0x36f1, 0x5e7: 0x3e78, 0x5e8: 0x3661, 0x5e9: 0x365b, - 0x5ea: 0x364f, 0x5eb: 0x430c, 0x5ec: 0x3649, 0x5ed: 0x359b, 0x5ee: 0x42e8, 0x5ef: 0x0081, - 0x5f2: 0x3eb0, 0x5f3: 0x36f7, 0x5f4: 0x3eb8, - 0x5f6: 0x4888, 0x5f7: 0x3ed0, 0x5f8: 0x363d, 0x5f9: 0x4306, 0x5fa: 0x366d, 0x5fb: 0x4318, - 0x5fc: 0x3679, 0x5fd: 0x4256, 0x5fe: 0xa100, - // Block 0x18, offset 0x600 - 0x601: 0x3c06, 0x603: 0xa000, 0x604: 0x3c0d, 0x605: 0xa000, - 0x607: 0x3c14, 0x608: 0xa000, 0x609: 0x3c1b, - 0x60d: 0xa000, - 0x620: 0x2f65, 0x621: 0xa000, 0x622: 0x3c29, - 0x624: 0xa000, 0x625: 0xa000, - 0x62d: 0x3c22, 0x62e: 0x2f60, 0x62f: 0x2f6a, - 0x630: 0x3c30, 0x631: 0x3c37, 0x632: 0xa000, 0x633: 0xa000, 0x634: 0x3c3e, 0x635: 0x3c45, - 0x636: 0xa000, 0x637: 0xa000, 0x638: 0x3c4c, 0x639: 0x3c53, 0x63a: 0xa000, 0x63b: 0xa000, - 0x63c: 0xa000, 0x63d: 0xa000, - // Block 0x19, offset 0x640 - 0x640: 0x3c5a, 0x641: 0x3c61, 0x642: 0xa000, 0x643: 0xa000, 0x644: 0x3c76, 0x645: 0x3c7d, - 0x646: 0xa000, 0x647: 0xa000, 0x648: 0x3c84, 0x649: 0x3c8b, - 0x651: 0xa000, - 0x652: 0xa000, - 0x662: 0xa000, - 0x668: 0xa000, 0x669: 0xa000, - 0x66b: 0xa000, 0x66c: 0x3ca0, 0x66d: 0x3ca7, 0x66e: 0x3cae, 0x66f: 0x3cb5, - 0x672: 0xa000, 0x673: 0xa000, 0x674: 0xa000, 0x675: 0xa000, - // Block 0x1a, offset 0x680 - 0x686: 0xa000, 0x68b: 0xa000, - 0x68c: 0x3f08, 0x68d: 0xa000, 0x68e: 0x3f10, 0x68f: 0xa000, 0x690: 0x3f18, 0x691: 0xa000, - 0x692: 0x3f20, 0x693: 0xa000, 0x694: 0x3f28, 0x695: 0xa000, 0x696: 0x3f30, 0x697: 0xa000, - 0x698: 0x3f38, 0x699: 0xa000, 0x69a: 0x3f40, 0x69b: 0xa000, 0x69c: 0x3f48, 0x69d: 0xa000, - 0x69e: 0x3f50, 0x69f: 0xa000, 0x6a0: 0x3f58, 0x6a1: 0xa000, 0x6a2: 0x3f60, - 0x6a4: 0xa000, 0x6a5: 0x3f68, 0x6a6: 0xa000, 0x6a7: 0x3f70, 0x6a8: 0xa000, 0x6a9: 0x3f78, - 0x6af: 0xa000, - 0x6b0: 0x3f80, 0x6b1: 0x3f88, 0x6b2: 0xa000, 0x6b3: 0x3f90, 0x6b4: 0x3f98, 0x6b5: 0xa000, - 0x6b6: 0x3fa0, 0x6b7: 0x3fa8, 0x6b8: 0xa000, 0x6b9: 0x3fb0, 0x6ba: 0x3fb8, 0x6bb: 0xa000, - 0x6bc: 0x3fc0, 0x6bd: 0x3fc8, - // Block 0x1b, offset 0x6c0 - 0x6d4: 0x3f00, - 0x6d9: 0x9903, 0x6da: 0x9903, 0x6db: 0x8100, 0x6dc: 0x8100, 0x6dd: 0xa000, - 0x6de: 0x3fd0, - 0x6e6: 0xa000, - 0x6eb: 0xa000, 0x6ec: 0x3fe0, 0x6ed: 0xa000, 0x6ee: 0x3fe8, 0x6ef: 0xa000, - 0x6f0: 0x3ff0, 0x6f1: 0xa000, 0x6f2: 0x3ff8, 0x6f3: 0xa000, 0x6f4: 0x4000, 0x6f5: 0xa000, - 0x6f6: 0x4008, 0x6f7: 0xa000, 0x6f8: 0x4010, 0x6f9: 0xa000, 0x6fa: 0x4018, 0x6fb: 0xa000, - 0x6fc: 0x4020, 0x6fd: 0xa000, 0x6fe: 0x4028, 0x6ff: 0xa000, - // Block 0x1c, offset 0x700 - 0x700: 0x4030, 0x701: 0xa000, 0x702: 0x4038, 0x704: 0xa000, 0x705: 0x4040, - 0x706: 0xa000, 0x707: 0x4048, 0x708: 0xa000, 0x709: 0x4050, - 0x70f: 0xa000, 0x710: 0x4058, 0x711: 0x4060, - 0x712: 0xa000, 0x713: 0x4068, 0x714: 0x4070, 0x715: 0xa000, 0x716: 0x4078, 0x717: 0x4080, - 0x718: 0xa000, 0x719: 0x4088, 0x71a: 0x4090, 0x71b: 0xa000, 0x71c: 0x4098, 0x71d: 0x40a0, - 0x72f: 0xa000, - 0x730: 0xa000, 0x731: 0xa000, 0x732: 0xa000, 0x734: 0x3fd8, - 0x737: 0x40a8, 0x738: 0x40b0, 0x739: 0x40b8, 0x73a: 0x40c0, - 0x73d: 0xa000, 0x73e: 0x40c8, - // Block 0x1d, offset 0x740 - 0x740: 0x1377, 0x741: 0x0cfb, 0x742: 0x13d3, 0x743: 0x139f, 0x744: 0x0e57, 0x745: 0x06eb, - 0x746: 0x08df, 0x747: 0x162b, 0x748: 0x162b, 0x749: 0x0a0b, 0x74a: 0x145f, 0x74b: 0x0943, - 0x74c: 0x0a07, 0x74d: 0x0bef, 0x74e: 0x0fcf, 0x74f: 0x115f, 0x750: 0x1297, 0x751: 0x12d3, - 0x752: 0x1307, 0x753: 0x141b, 0x754: 0x0d73, 0x755: 0x0dff, 0x756: 0x0eab, 0x757: 0x0f43, - 0x758: 0x125f, 0x759: 0x1447, 0x75a: 0x1573, 0x75b: 0x070f, 0x75c: 0x08b3, 0x75d: 0x0d87, - 0x75e: 0x0ecf, 0x75f: 0x1293, 0x760: 0x15c3, 0x761: 0x0ab3, 0x762: 0x0e77, 0x763: 0x1283, - 0x764: 0x1317, 0x765: 0x0c23, 0x766: 0x11bb, 0x767: 0x12df, 0x768: 0x0b1f, 0x769: 0x0d0f, - 0x76a: 0x0e17, 0x76b: 0x0f1b, 0x76c: 0x1427, 0x76d: 0x074f, 0x76e: 0x07e7, 0x76f: 0x0853, - 0x770: 0x0c8b, 0x771: 0x0d7f, 0x772: 0x0ecb, 0x773: 0x0fef, 0x774: 0x1177, 0x775: 0x128b, - 0x776: 0x12a3, 0x777: 0x13c7, 0x778: 0x14ef, 0x779: 0x15a3, 0x77a: 0x15bf, 0x77b: 0x102b, - 0x77c: 0x106b, 0x77d: 0x1123, 0x77e: 0x1243, 0x77f: 0x147b, - // Block 0x1e, offset 0x780 - 0x780: 0x15cb, 0x781: 0x134b, 0x782: 0x09c7, 0x783: 0x0b3b, 0x784: 0x10db, 0x785: 0x119b, - 0x786: 0x0eff, 0x787: 0x1033, 0x788: 0x1397, 0x789: 0x14e7, 0x78a: 0x09c3, 0x78b: 0x0a8f, - 0x78c: 0x0d77, 0x78d: 0x0e2b, 0x78e: 0x0e5f, 0x78f: 0x1113, 0x790: 0x113b, 0x791: 0x14a7, - 0x792: 0x084f, 0x793: 0x11a7, 0x794: 0x07f3, 0x795: 0x07ef, 0x796: 0x1097, 0x797: 0x1127, - 0x798: 0x125b, 0x799: 0x14af, 0x79a: 0x1367, 0x79b: 0x0c27, 0x79c: 0x0d73, 0x79d: 0x1357, - 0x79e: 0x06f7, 0x79f: 0x0a63, 0x7a0: 0x0b93, 0x7a1: 0x0f2f, 0x7a2: 0x0faf, 0x7a3: 0x0873, - 0x7a4: 0x103b, 0x7a5: 0x075f, 0x7a6: 0x0b77, 0x7a7: 0x06d7, 0x7a8: 0x0deb, 0x7a9: 0x0ca3, - 0x7aa: 0x110f, 0x7ab: 0x08c7, 0x7ac: 0x09b3, 0x7ad: 0x0ffb, 0x7ae: 0x1263, 0x7af: 0x133b, - 0x7b0: 0x0db7, 0x7b1: 0x13f7, 0x7b2: 0x0de3, 0x7b3: 0x0c37, 0x7b4: 0x121b, 0x7b5: 0x0c57, - 0x7b6: 0x0fab, 0x7b7: 0x072b, 0x7b8: 0x07a7, 0x7b9: 0x07eb, 0x7ba: 0x0d53, 0x7bb: 0x10fb, - 0x7bc: 0x11f3, 0x7bd: 0x1347, 0x7be: 0x145b, 0x7bf: 0x085b, - // Block 0x1f, offset 0x7c0 - 0x7c0: 0x090f, 0x7c1: 0x0a17, 0x7c2: 0x0b2f, 0x7c3: 0x0cbf, 0x7c4: 0x0e7b, 0x7c5: 0x103f, - 0x7c6: 0x1497, 0x7c7: 0x157b, 0x7c8: 0x15cf, 0x7c9: 0x15e7, 0x7ca: 0x0837, 0x7cb: 0x0cf3, - 0x7cc: 0x0da3, 0x7cd: 0x13eb, 0x7ce: 0x0afb, 0x7cf: 0x0bd7, 0x7d0: 0x0bf3, 0x7d1: 0x0c83, - 0x7d2: 0x0e6b, 0x7d3: 0x0eb7, 0x7d4: 0x0f67, 0x7d5: 0x108b, 0x7d6: 0x112f, 0x7d7: 0x1193, - 0x7d8: 0x13db, 0x7d9: 0x126b, 0x7da: 0x1403, 0x7db: 0x147f, 0x7dc: 0x080f, 0x7dd: 0x083b, - 0x7de: 0x0923, 0x7df: 0x0ea7, 0x7e0: 0x12f3, 0x7e1: 0x133b, 0x7e2: 0x0b1b, 0x7e3: 0x0b8b, - 0x7e4: 0x0c4f, 0x7e5: 0x0daf, 0x7e6: 0x10d7, 0x7e7: 0x0f23, 0x7e8: 0x073b, 0x7e9: 0x097f, - 0x7ea: 0x0a63, 0x7eb: 0x0ac7, 0x7ec: 0x0b97, 0x7ed: 0x0f3f, 0x7ee: 0x0f5b, 0x7ef: 0x116b, - 0x7f0: 0x118b, 0x7f1: 0x1463, 0x7f2: 0x14e3, 0x7f3: 0x14f3, 0x7f4: 0x152f, 0x7f5: 0x0753, - 0x7f6: 0x107f, 0x7f7: 0x144f, 0x7f8: 0x14cb, 0x7f9: 0x0baf, 0x7fa: 0x0717, 0x7fb: 0x0777, - 0x7fc: 0x0a67, 0x7fd: 0x0a87, 0x7fe: 0x0caf, 0x7ff: 0x0d73, - // Block 0x20, offset 0x800 - 0x800: 0x0ec3, 0x801: 0x0fcb, 0x802: 0x1277, 0x803: 0x1417, 0x804: 0x1623, 0x805: 0x0ce3, - 0x806: 0x14a3, 0x807: 0x0833, 0x808: 0x0d2f, 0x809: 0x0d3b, 0x80a: 0x0e0f, 0x80b: 0x0e47, - 0x80c: 0x0f4b, 0x80d: 0x0fa7, 0x80e: 0x1027, 0x80f: 0x110b, 0x810: 0x153b, 0x811: 0x07af, - 0x812: 0x0c03, 0x813: 0x14b3, 0x814: 0x0767, 0x815: 0x0aab, 0x816: 0x0e2f, 0x817: 0x13df, - 0x818: 0x0b67, 0x819: 0x0bb7, 0x81a: 0x0d43, 0x81b: 0x0f2f, 0x81c: 0x14bb, 0x81d: 0x0817, - 0x81e: 0x08ff, 0x81f: 0x0a97, 0x820: 0x0cd3, 0x821: 0x0d1f, 0x822: 0x0d5f, 0x823: 0x0df3, - 0x824: 0x0f47, 0x825: 0x0fbb, 0x826: 0x1157, 0x827: 0x12f7, 0x828: 0x1303, 0x829: 0x1457, - 0x82a: 0x14d7, 0x82b: 0x0883, 0x82c: 0x0e4b, 0x82d: 0x0903, 0x82e: 0x0ec7, 0x82f: 0x0f6b, - 0x830: 0x1287, 0x831: 0x14bf, 0x832: 0x15ab, 0x833: 0x15d3, 0x834: 0x0d37, 0x835: 0x0e27, - 0x836: 0x11c3, 0x837: 0x10b7, 0x838: 0x10c3, 0x839: 0x10e7, 0x83a: 0x0f17, 0x83b: 0x0e9f, - 0x83c: 0x1363, 0x83d: 0x0733, 0x83e: 0x122b, 0x83f: 0x081b, - // Block 0x21, offset 0x840 - 0x840: 0x080b, 0x841: 0x0b0b, 0x842: 0x0c2b, 0x843: 0x10f3, 0x844: 0x0a53, 0x845: 0x0e03, - 0x846: 0x0cef, 0x847: 0x13e7, 0x848: 0x12e7, 0x849: 0x14ab, 0x84a: 0x1323, 0x84b: 0x0b27, - 0x84c: 0x0787, 0x84d: 0x095b, 0x850: 0x09af, - 0x852: 0x0cdf, 0x855: 0x07f7, 0x856: 0x0f1f, 0x857: 0x0fe3, - 0x858: 0x1047, 0x859: 0x1063, 0x85a: 0x1067, 0x85b: 0x107b, 0x85c: 0x14fb, 0x85d: 0x10eb, - 0x85e: 0x116f, 0x860: 0x128f, 0x862: 0x1353, - 0x865: 0x1407, 0x866: 0x1433, - 0x86a: 0x154f, 0x86b: 0x1553, 0x86c: 0x1557, 0x86d: 0x15bb, 0x86e: 0x142b, 0x86f: 0x14c7, - 0x870: 0x0757, 0x871: 0x077b, 0x872: 0x078f, 0x873: 0x084b, 0x874: 0x0857, 0x875: 0x0897, - 0x876: 0x094b, 0x877: 0x0967, 0x878: 0x096f, 0x879: 0x09ab, 0x87a: 0x09b7, 0x87b: 0x0a93, - 0x87c: 0x0a9b, 0x87d: 0x0ba3, 0x87e: 0x0bcb, 0x87f: 0x0bd3, - // Block 0x22, offset 0x880 - 0x880: 0x0beb, 0x881: 0x0c97, 0x882: 0x0cc7, 0x883: 0x0ce7, 0x884: 0x0d57, 0x885: 0x0e1b, - 0x886: 0x0e37, 0x887: 0x0e67, 0x888: 0x0ebb, 0x889: 0x0edb, 0x88a: 0x0f4f, 0x88b: 0x102f, - 0x88c: 0x104b, 0x88d: 0x1053, 0x88e: 0x104f, 0x88f: 0x1057, 0x890: 0x105b, 0x891: 0x105f, - 0x892: 0x1073, 0x893: 0x1077, 0x894: 0x109b, 0x895: 0x10af, 0x896: 0x10cb, 0x897: 0x112f, - 0x898: 0x1137, 0x899: 0x113f, 0x89a: 0x1153, 0x89b: 0x117b, 0x89c: 0x11cb, 0x89d: 0x11ff, - 0x89e: 0x11ff, 0x89f: 0x1267, 0x8a0: 0x130f, 0x8a1: 0x1327, 0x8a2: 0x135b, 0x8a3: 0x135f, - 0x8a4: 0x13a3, 0x8a5: 0x13a7, 0x8a6: 0x13ff, 0x8a7: 0x1407, 0x8a8: 0x14db, 0x8a9: 0x151f, - 0x8aa: 0x1537, 0x8ab: 0x0b9b, 0x8ac: 0x171e, 0x8ad: 0x11e3, - 0x8b0: 0x06df, 0x8b1: 0x07e3, 0x8b2: 0x07a3, 0x8b3: 0x074b, 0x8b4: 0x078b, 0x8b5: 0x07b7, - 0x8b6: 0x0847, 0x8b7: 0x0863, 0x8b8: 0x094b, 0x8b9: 0x0937, 0x8ba: 0x0947, 0x8bb: 0x0963, - 0x8bc: 0x09af, 0x8bd: 0x09bf, 0x8be: 0x0a03, 0x8bf: 0x0a0f, - // Block 0x23, offset 0x8c0 - 0x8c0: 0x0a2b, 0x8c1: 0x0a3b, 0x8c2: 0x0b23, 0x8c3: 0x0b2b, 0x8c4: 0x0b5b, 0x8c5: 0x0b7b, - 0x8c6: 0x0bab, 0x8c7: 0x0bc3, 0x8c8: 0x0bb3, 0x8c9: 0x0bd3, 0x8ca: 0x0bc7, 0x8cb: 0x0beb, - 0x8cc: 0x0c07, 0x8cd: 0x0c5f, 0x8ce: 0x0c6b, 0x8cf: 0x0c73, 0x8d0: 0x0c9b, 0x8d1: 0x0cdf, - 0x8d2: 0x0d0f, 0x8d3: 0x0d13, 0x8d4: 0x0d27, 0x8d5: 0x0da7, 0x8d6: 0x0db7, 0x8d7: 0x0e0f, - 0x8d8: 0x0e5b, 0x8d9: 0x0e53, 0x8da: 0x0e67, 0x8db: 0x0e83, 0x8dc: 0x0ebb, 0x8dd: 0x1013, - 0x8de: 0x0edf, 0x8df: 0x0f13, 0x8e0: 0x0f1f, 0x8e1: 0x0f5f, 0x8e2: 0x0f7b, 0x8e3: 0x0f9f, - 0x8e4: 0x0fc3, 0x8e5: 0x0fc7, 0x8e6: 0x0fe3, 0x8e7: 0x0fe7, 0x8e8: 0x0ff7, 0x8e9: 0x100b, - 0x8ea: 0x1007, 0x8eb: 0x1037, 0x8ec: 0x10b3, 0x8ed: 0x10cb, 0x8ee: 0x10e3, 0x8ef: 0x111b, - 0x8f0: 0x112f, 0x8f1: 0x114b, 0x8f2: 0x117b, 0x8f3: 0x122f, 0x8f4: 0x1257, 0x8f5: 0x12cb, - 0x8f6: 0x1313, 0x8f7: 0x131f, 0x8f8: 0x1327, 0x8f9: 0x133f, 0x8fa: 0x1353, 0x8fb: 0x1343, - 0x8fc: 0x135b, 0x8fd: 0x1357, 0x8fe: 0x134f, 0x8ff: 0x135f, - // Block 0x24, offset 0x900 - 0x900: 0x136b, 0x901: 0x13a7, 0x902: 0x13e3, 0x903: 0x1413, 0x904: 0x144b, 0x905: 0x146b, - 0x906: 0x14b7, 0x907: 0x14db, 0x908: 0x14fb, 0x909: 0x150f, 0x90a: 0x151f, 0x90b: 0x152b, - 0x90c: 0x1537, 0x90d: 0x158b, 0x90e: 0x162b, 0x90f: 0x16b5, 0x910: 0x16b0, 0x911: 0x16e2, - 0x912: 0x0607, 0x913: 0x062f, 0x914: 0x0633, 0x915: 0x1764, 0x916: 0x1791, 0x917: 0x1809, - 0x918: 0x1617, 0x919: 0x1627, - // Block 0x25, offset 0x940 - 0x940: 0x06fb, 0x941: 0x06f3, 0x942: 0x0703, 0x943: 0x1647, 0x944: 0x0747, 0x945: 0x0757, - 0x946: 0x075b, 0x947: 0x0763, 0x948: 0x076b, 0x949: 0x076f, 0x94a: 0x077b, 0x94b: 0x0773, - 0x94c: 0x05b3, 0x94d: 0x165b, 0x94e: 0x078f, 0x94f: 0x0793, 0x950: 0x0797, 0x951: 0x07b3, - 0x952: 0x164c, 0x953: 0x05b7, 0x954: 0x079f, 0x955: 0x07bf, 0x956: 0x1656, 0x957: 0x07cf, - 0x958: 0x07d7, 0x959: 0x0737, 0x95a: 0x07df, 0x95b: 0x07e3, 0x95c: 0x1831, 0x95d: 0x07ff, - 0x95e: 0x0807, 0x95f: 0x05bf, 0x960: 0x081f, 0x961: 0x0823, 0x962: 0x082b, 0x963: 0x082f, - 0x964: 0x05c3, 0x965: 0x0847, 0x966: 0x084b, 0x967: 0x0857, 0x968: 0x0863, 0x969: 0x0867, - 0x96a: 0x086b, 0x96b: 0x0873, 0x96c: 0x0893, 0x96d: 0x0897, 0x96e: 0x089f, 0x96f: 0x08af, - 0x970: 0x08b7, 0x971: 0x08bb, 0x972: 0x08bb, 0x973: 0x08bb, 0x974: 0x166a, 0x975: 0x0e93, - 0x976: 0x08cf, 0x977: 0x08d7, 0x978: 0x166f, 0x979: 0x08e3, 0x97a: 0x08eb, 0x97b: 0x08f3, - 0x97c: 0x091b, 0x97d: 0x0907, 0x97e: 0x0913, 0x97f: 0x0917, - // Block 0x26, offset 0x980 - 0x980: 0x091f, 0x981: 0x0927, 0x982: 0x092b, 0x983: 0x0933, 0x984: 0x093b, 0x985: 0x093f, - 0x986: 0x093f, 0x987: 0x0947, 0x988: 0x094f, 0x989: 0x0953, 0x98a: 0x095f, 0x98b: 0x0983, - 0x98c: 0x0967, 0x98d: 0x0987, 0x98e: 0x096b, 0x98f: 0x0973, 0x990: 0x080b, 0x991: 0x09cf, - 0x992: 0x0997, 0x993: 0x099b, 0x994: 0x099f, 0x995: 0x0993, 0x996: 0x09a7, 0x997: 0x09a3, - 0x998: 0x09bb, 0x999: 0x1674, 0x99a: 0x09d7, 0x99b: 0x09db, 0x99c: 0x09e3, 0x99d: 0x09ef, - 0x99e: 0x09f7, 0x99f: 0x0a13, 0x9a0: 0x1679, 0x9a1: 0x167e, 0x9a2: 0x0a1f, 0x9a3: 0x0a23, - 0x9a4: 0x0a27, 0x9a5: 0x0a1b, 0x9a6: 0x0a2f, 0x9a7: 0x05c7, 0x9a8: 0x05cb, 0x9a9: 0x0a37, - 0x9aa: 0x0a3f, 0x9ab: 0x0a3f, 0x9ac: 0x1683, 0x9ad: 0x0a5b, 0x9ae: 0x0a5f, 0x9af: 0x0a63, - 0x9b0: 0x0a6b, 0x9b1: 0x1688, 0x9b2: 0x0a73, 0x9b3: 0x0a77, 0x9b4: 0x0b4f, 0x9b5: 0x0a7f, - 0x9b6: 0x05cf, 0x9b7: 0x0a8b, 0x9b8: 0x0a9b, 0x9b9: 0x0aa7, 0x9ba: 0x0aa3, 0x9bb: 0x1692, - 0x9bc: 0x0aaf, 0x9bd: 0x1697, 0x9be: 0x0abb, 0x9bf: 0x0ab7, - // Block 0x27, offset 0x9c0 - 0x9c0: 0x0abf, 0x9c1: 0x0acf, 0x9c2: 0x0ad3, 0x9c3: 0x05d3, 0x9c4: 0x0ae3, 0x9c5: 0x0aeb, - 0x9c6: 0x0aef, 0x9c7: 0x0af3, 0x9c8: 0x05d7, 0x9c9: 0x169c, 0x9ca: 0x05db, 0x9cb: 0x0b0f, - 0x9cc: 0x0b13, 0x9cd: 0x0b17, 0x9ce: 0x0b1f, 0x9cf: 0x1863, 0x9d0: 0x0b37, 0x9d1: 0x16a6, - 0x9d2: 0x16a6, 0x9d3: 0x11d7, 0x9d4: 0x0b47, 0x9d5: 0x0b47, 0x9d6: 0x05df, 0x9d7: 0x16c9, - 0x9d8: 0x179b, 0x9d9: 0x0b57, 0x9da: 0x0b5f, 0x9db: 0x05e3, 0x9dc: 0x0b73, 0x9dd: 0x0b83, - 0x9de: 0x0b87, 0x9df: 0x0b8f, 0x9e0: 0x0b9f, 0x9e1: 0x05eb, 0x9e2: 0x05e7, 0x9e3: 0x0ba3, - 0x9e4: 0x16ab, 0x9e5: 0x0ba7, 0x9e6: 0x0bbb, 0x9e7: 0x0bbf, 0x9e8: 0x0bc3, 0x9e9: 0x0bbf, - 0x9ea: 0x0bcf, 0x9eb: 0x0bd3, 0x9ec: 0x0be3, 0x9ed: 0x0bdb, 0x9ee: 0x0bdf, 0x9ef: 0x0be7, - 0x9f0: 0x0beb, 0x9f1: 0x0bef, 0x9f2: 0x0bfb, 0x9f3: 0x0bff, 0x9f4: 0x0c17, 0x9f5: 0x0c1f, - 0x9f6: 0x0c2f, 0x9f7: 0x0c43, 0x9f8: 0x16ba, 0x9f9: 0x0c3f, 0x9fa: 0x0c33, 0x9fb: 0x0c4b, - 0x9fc: 0x0c53, 0x9fd: 0x0c67, 0x9fe: 0x16bf, 0x9ff: 0x0c6f, - // Block 0x28, offset 0xa00 - 0xa00: 0x0c63, 0xa01: 0x0c5b, 0xa02: 0x05ef, 0xa03: 0x0c77, 0xa04: 0x0c7f, 0xa05: 0x0c87, - 0xa06: 0x0c7b, 0xa07: 0x05f3, 0xa08: 0x0c97, 0xa09: 0x0c9f, 0xa0a: 0x16c4, 0xa0b: 0x0ccb, - 0xa0c: 0x0cff, 0xa0d: 0x0cdb, 0xa0e: 0x05ff, 0xa0f: 0x0ce7, 0xa10: 0x05fb, 0xa11: 0x05f7, - 0xa12: 0x07c3, 0xa13: 0x07c7, 0xa14: 0x0d03, 0xa15: 0x0ceb, 0xa16: 0x11ab, 0xa17: 0x0663, - 0xa18: 0x0d0f, 0xa19: 0x0d13, 0xa1a: 0x0d17, 0xa1b: 0x0d2b, 0xa1c: 0x0d23, 0xa1d: 0x16dd, - 0xa1e: 0x0603, 0xa1f: 0x0d3f, 0xa20: 0x0d33, 0xa21: 0x0d4f, 0xa22: 0x0d57, 0xa23: 0x16e7, - 0xa24: 0x0d5b, 0xa25: 0x0d47, 0xa26: 0x0d63, 0xa27: 0x0607, 0xa28: 0x0d67, 0xa29: 0x0d6b, - 0xa2a: 0x0d6f, 0xa2b: 0x0d7b, 0xa2c: 0x16ec, 0xa2d: 0x0d83, 0xa2e: 0x060b, 0xa2f: 0x0d8f, - 0xa30: 0x16f1, 0xa31: 0x0d93, 0xa32: 0x060f, 0xa33: 0x0d9f, 0xa34: 0x0dab, 0xa35: 0x0db7, - 0xa36: 0x0dbb, 0xa37: 0x16f6, 0xa38: 0x168d, 0xa39: 0x16fb, 0xa3a: 0x0ddb, 0xa3b: 0x1700, - 0xa3c: 0x0de7, 0xa3d: 0x0def, 0xa3e: 0x0ddf, 0xa3f: 0x0dfb, - // Block 0x29, offset 0xa40 - 0xa40: 0x0e0b, 0xa41: 0x0e1b, 0xa42: 0x0e0f, 0xa43: 0x0e13, 0xa44: 0x0e1f, 0xa45: 0x0e23, - 0xa46: 0x1705, 0xa47: 0x0e07, 0xa48: 0x0e3b, 0xa49: 0x0e3f, 0xa4a: 0x0613, 0xa4b: 0x0e53, - 0xa4c: 0x0e4f, 0xa4d: 0x170a, 0xa4e: 0x0e33, 0xa4f: 0x0e6f, 0xa50: 0x170f, 0xa51: 0x1714, - 0xa52: 0x0e73, 0xa53: 0x0e87, 0xa54: 0x0e83, 0xa55: 0x0e7f, 0xa56: 0x0617, 0xa57: 0x0e8b, - 0xa58: 0x0e9b, 0xa59: 0x0e97, 0xa5a: 0x0ea3, 0xa5b: 0x1651, 0xa5c: 0x0eb3, 0xa5d: 0x1719, - 0xa5e: 0x0ebf, 0xa5f: 0x1723, 0xa60: 0x0ed3, 0xa61: 0x0edf, 0xa62: 0x0ef3, 0xa63: 0x1728, - 0xa64: 0x0f07, 0xa65: 0x0f0b, 0xa66: 0x172d, 0xa67: 0x1732, 0xa68: 0x0f27, 0xa69: 0x0f37, - 0xa6a: 0x061b, 0xa6b: 0x0f3b, 0xa6c: 0x061f, 0xa6d: 0x061f, 0xa6e: 0x0f53, 0xa6f: 0x0f57, - 0xa70: 0x0f5f, 0xa71: 0x0f63, 0xa72: 0x0f6f, 0xa73: 0x0623, 0xa74: 0x0f87, 0xa75: 0x1737, - 0xa76: 0x0fa3, 0xa77: 0x173c, 0xa78: 0x0faf, 0xa79: 0x16a1, 0xa7a: 0x0fbf, 0xa7b: 0x1741, - 0xa7c: 0x1746, 0xa7d: 0x174b, 0xa7e: 0x0627, 0xa7f: 0x062b, - // Block 0x2a, offset 0xa80 - 0xa80: 0x0ff7, 0xa81: 0x1755, 0xa82: 0x1750, 0xa83: 0x175a, 0xa84: 0x175f, 0xa85: 0x0fff, - 0xa86: 0x1003, 0xa87: 0x1003, 0xa88: 0x100b, 0xa89: 0x0633, 0xa8a: 0x100f, 0xa8b: 0x0637, - 0xa8c: 0x063b, 0xa8d: 0x1769, 0xa8e: 0x1023, 0xa8f: 0x102b, 0xa90: 0x1037, 0xa91: 0x063f, - 0xa92: 0x176e, 0xa93: 0x105b, 0xa94: 0x1773, 0xa95: 0x1778, 0xa96: 0x107b, 0xa97: 0x1093, - 0xa98: 0x0643, 0xa99: 0x109b, 0xa9a: 0x109f, 0xa9b: 0x10a3, 0xa9c: 0x177d, 0xa9d: 0x1782, - 0xa9e: 0x1782, 0xa9f: 0x10bb, 0xaa0: 0x0647, 0xaa1: 0x1787, 0xaa2: 0x10cf, 0xaa3: 0x10d3, - 0xaa4: 0x064b, 0xaa5: 0x178c, 0xaa6: 0x10ef, 0xaa7: 0x064f, 0xaa8: 0x10ff, 0xaa9: 0x10f7, - 0xaaa: 0x1107, 0xaab: 0x1796, 0xaac: 0x111f, 0xaad: 0x0653, 0xaae: 0x112b, 0xaaf: 0x1133, - 0xab0: 0x1143, 0xab1: 0x0657, 0xab2: 0x17a0, 0xab3: 0x17a5, 0xab4: 0x065b, 0xab5: 0x17aa, - 0xab6: 0x115b, 0xab7: 0x17af, 0xab8: 0x1167, 0xab9: 0x1173, 0xaba: 0x117b, 0xabb: 0x17b4, - 0xabc: 0x17b9, 0xabd: 0x118f, 0xabe: 0x17be, 0xabf: 0x1197, - // Block 0x2b, offset 0xac0 - 0xac0: 0x16ce, 0xac1: 0x065f, 0xac2: 0x11af, 0xac3: 0x11b3, 0xac4: 0x0667, 0xac5: 0x11b7, - 0xac6: 0x0a33, 0xac7: 0x17c3, 0xac8: 0x17c8, 0xac9: 0x16d3, 0xaca: 0x16d8, 0xacb: 0x11d7, - 0xacc: 0x11db, 0xacd: 0x13f3, 0xace: 0x066b, 0xacf: 0x1207, 0xad0: 0x1203, 0xad1: 0x120b, - 0xad2: 0x083f, 0xad3: 0x120f, 0xad4: 0x1213, 0xad5: 0x1217, 0xad6: 0x121f, 0xad7: 0x17cd, - 0xad8: 0x121b, 0xad9: 0x1223, 0xada: 0x1237, 0xadb: 0x123b, 0xadc: 0x1227, 0xadd: 0x123f, - 0xade: 0x1253, 0xadf: 0x1267, 0xae0: 0x1233, 0xae1: 0x1247, 0xae2: 0x124b, 0xae3: 0x124f, - 0xae4: 0x17d2, 0xae5: 0x17dc, 0xae6: 0x17d7, 0xae7: 0x066f, 0xae8: 0x126f, 0xae9: 0x1273, - 0xaea: 0x127b, 0xaeb: 0x17f0, 0xaec: 0x127f, 0xaed: 0x17e1, 0xaee: 0x0673, 0xaef: 0x0677, - 0xaf0: 0x17e6, 0xaf1: 0x17eb, 0xaf2: 0x067b, 0xaf3: 0x129f, 0xaf4: 0x12a3, 0xaf5: 0x12a7, - 0xaf6: 0x12ab, 0xaf7: 0x12b7, 0xaf8: 0x12b3, 0xaf9: 0x12bf, 0xafa: 0x12bb, 0xafb: 0x12cb, - 0xafc: 0x12c3, 0xafd: 0x12c7, 0xafe: 0x12cf, 0xaff: 0x067f, - // Block 0x2c, offset 0xb00 - 0xb00: 0x12d7, 0xb01: 0x12db, 0xb02: 0x0683, 0xb03: 0x12eb, 0xb04: 0x12ef, 0xb05: 0x17f5, - 0xb06: 0x12fb, 0xb07: 0x12ff, 0xb08: 0x0687, 0xb09: 0x130b, 0xb0a: 0x05bb, 0xb0b: 0x17fa, - 0xb0c: 0x17ff, 0xb0d: 0x068b, 0xb0e: 0x068f, 0xb0f: 0x1337, 0xb10: 0x134f, 0xb11: 0x136b, - 0xb12: 0x137b, 0xb13: 0x1804, 0xb14: 0x138f, 0xb15: 0x1393, 0xb16: 0x13ab, 0xb17: 0x13b7, - 0xb18: 0x180e, 0xb19: 0x1660, 0xb1a: 0x13c3, 0xb1b: 0x13bf, 0xb1c: 0x13cb, 0xb1d: 0x1665, - 0xb1e: 0x13d7, 0xb1f: 0x13e3, 0xb20: 0x1813, 0xb21: 0x1818, 0xb22: 0x1423, 0xb23: 0x142f, - 0xb24: 0x1437, 0xb25: 0x181d, 0xb26: 0x143b, 0xb27: 0x1467, 0xb28: 0x1473, 0xb29: 0x1477, - 0xb2a: 0x146f, 0xb2b: 0x1483, 0xb2c: 0x1487, 0xb2d: 0x1822, 0xb2e: 0x1493, 0xb2f: 0x0693, - 0xb30: 0x149b, 0xb31: 0x1827, 0xb32: 0x0697, 0xb33: 0x14d3, 0xb34: 0x0ac3, 0xb35: 0x14eb, - 0xb36: 0x182c, 0xb37: 0x1836, 0xb38: 0x069b, 0xb39: 0x069f, 0xb3a: 0x1513, 0xb3b: 0x183b, - 0xb3c: 0x06a3, 0xb3d: 0x1840, 0xb3e: 0x152b, 0xb3f: 0x152b, - // Block 0x2d, offset 0xb40 - 0xb40: 0x1533, 0xb41: 0x1845, 0xb42: 0x154b, 0xb43: 0x06a7, 0xb44: 0x155b, 0xb45: 0x1567, - 0xb46: 0x156f, 0xb47: 0x1577, 0xb48: 0x06ab, 0xb49: 0x184a, 0xb4a: 0x158b, 0xb4b: 0x15a7, - 0xb4c: 0x15b3, 0xb4d: 0x06af, 0xb4e: 0x06b3, 0xb4f: 0x15b7, 0xb50: 0x184f, 0xb51: 0x06b7, - 0xb52: 0x1854, 0xb53: 0x1859, 0xb54: 0x185e, 0xb55: 0x15db, 0xb56: 0x06bb, 0xb57: 0x15ef, - 0xb58: 0x15f7, 0xb59: 0x15fb, 0xb5a: 0x1603, 0xb5b: 0x160b, 0xb5c: 0x1613, 0xb5d: 0x1868, -} - -// 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: 0x2c, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x2d, 0xc7: 0x04, - 0xc8: 0x05, 0xca: 0x2e, 0xcb: 0x2f, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x30, - 0xd0: 0x09, 0xd1: 0x31, 0xd2: 0x32, 0xd3: 0x0a, 0xd6: 0x0b, 0xd7: 0x33, - 0xd8: 0x34, 0xd9: 0x0c, 0xdb: 0x35, 0xdc: 0x36, 0xdd: 0x37, 0xdf: 0x38, - 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: 0x39, 0x121: 0x3a, 0x123: 0x3b, 0x124: 0x3c, 0x125: 0x3d, 0x126: 0x3e, 0x127: 0x3f, - 0x128: 0x40, 0x129: 0x41, 0x12a: 0x42, 0x12b: 0x43, 0x12c: 0x3e, 0x12d: 0x44, 0x12e: 0x45, 0x12f: 0x46, - 0x131: 0x47, 0x132: 0x48, 0x133: 0x49, 0x134: 0x4a, 0x135: 0x4b, 0x137: 0x4c, - 0x138: 0x4d, 0x139: 0x4e, 0x13a: 0x4f, 0x13b: 0x50, 0x13c: 0x51, 0x13d: 0x52, 0x13e: 0x53, 0x13f: 0x54, - // Block 0x5, offset 0x140 - 0x140: 0x55, 0x142: 0x56, 0x144: 0x57, 0x145: 0x58, 0x146: 0x59, 0x147: 0x5a, - 0x14d: 0x5b, - 0x15c: 0x5c, 0x15f: 0x5d, - 0x162: 0x5e, 0x164: 0x5f, - 0x168: 0x60, 0x169: 0x61, 0x16a: 0x62, 0x16c: 0x0d, 0x16d: 0x63, 0x16e: 0x64, 0x16f: 0x65, - 0x170: 0x66, 0x173: 0x67, 0x177: 0x68, - 0x178: 0x0e, 0x179: 0x0f, 0x17a: 0x10, 0x17b: 0x11, 0x17c: 0x12, 0x17d: 0x13, 0x17e: 0x14, 0x17f: 0x15, - // Block 0x6, offset 0x180 - 0x180: 0x69, 0x183: 0x6a, 0x184: 0x6b, 0x186: 0x6c, 0x187: 0x6d, - 0x188: 0x6e, 0x189: 0x16, 0x18a: 0x17, 0x18b: 0x6f, 0x18c: 0x70, - 0x1ab: 0x71, - 0x1b3: 0x72, 0x1b5: 0x73, 0x1b7: 0x74, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x75, 0x1c1: 0x18, 0x1c2: 0x19, 0x1c3: 0x1a, 0x1c4: 0x76, 0x1c5: 0x77, - 0x1c9: 0x78, 0x1cc: 0x79, 0x1cd: 0x7a, - // Block 0x8, offset 0x200 - 0x219: 0x7b, 0x21a: 0x7c, 0x21b: 0x7d, - 0x220: 0x7e, 0x223: 0x7f, 0x224: 0x80, 0x225: 0x81, 0x226: 0x82, 0x227: 0x83, - 0x22a: 0x84, 0x22b: 0x85, 0x22f: 0x86, - 0x230: 0x87, 0x231: 0x88, 0x232: 0x89, 0x233: 0x8a, 0x234: 0x8b, 0x235: 0x8c, 0x236: 0x8d, 0x237: 0x87, - 0x238: 0x88, 0x239: 0x89, 0x23a: 0x8a, 0x23b: 0x8b, 0x23c: 0x8c, 0x23d: 0x8d, 0x23e: 0x87, 0x23f: 0x88, - // Block 0x9, offset 0x240 - 0x240: 0x89, 0x241: 0x8a, 0x242: 0x8b, 0x243: 0x8c, 0x244: 0x8d, 0x245: 0x87, 0x246: 0x88, 0x247: 0x89, - 0x248: 0x8a, 0x249: 0x8b, 0x24a: 0x8c, 0x24b: 0x8d, 0x24c: 0x87, 0x24d: 0x88, 0x24e: 0x89, 0x24f: 0x8a, - 0x250: 0x8b, 0x251: 0x8c, 0x252: 0x8d, 0x253: 0x87, 0x254: 0x88, 0x255: 0x89, 0x256: 0x8a, 0x257: 0x8b, - 0x258: 0x8c, 0x259: 0x8d, 0x25a: 0x87, 0x25b: 0x88, 0x25c: 0x89, 0x25d: 0x8a, 0x25e: 0x8b, 0x25f: 0x8c, - 0x260: 0x8d, 0x261: 0x87, 0x262: 0x88, 0x263: 0x89, 0x264: 0x8a, 0x265: 0x8b, 0x266: 0x8c, 0x267: 0x8d, - 0x268: 0x87, 0x269: 0x88, 0x26a: 0x89, 0x26b: 0x8a, 0x26c: 0x8b, 0x26d: 0x8c, 0x26e: 0x8d, 0x26f: 0x87, - 0x270: 0x88, 0x271: 0x89, 0x272: 0x8a, 0x273: 0x8b, 0x274: 0x8c, 0x275: 0x8d, 0x276: 0x87, 0x277: 0x88, - 0x278: 0x89, 0x279: 0x8a, 0x27a: 0x8b, 0x27b: 0x8c, 0x27c: 0x8d, 0x27d: 0x87, 0x27e: 0x88, 0x27f: 0x89, - // Block 0xa, offset 0x280 - 0x280: 0x8a, 0x281: 0x8b, 0x282: 0x8c, 0x283: 0x8d, 0x284: 0x87, 0x285: 0x88, 0x286: 0x89, 0x287: 0x8a, - 0x288: 0x8b, 0x289: 0x8c, 0x28a: 0x8d, 0x28b: 0x87, 0x28c: 0x88, 0x28d: 0x89, 0x28e: 0x8a, 0x28f: 0x8b, - 0x290: 0x8c, 0x291: 0x8d, 0x292: 0x87, 0x293: 0x88, 0x294: 0x89, 0x295: 0x8a, 0x296: 0x8b, 0x297: 0x8c, - 0x298: 0x8d, 0x299: 0x87, 0x29a: 0x88, 0x29b: 0x89, 0x29c: 0x8a, 0x29d: 0x8b, 0x29e: 0x8c, 0x29f: 0x8d, - 0x2a0: 0x87, 0x2a1: 0x88, 0x2a2: 0x89, 0x2a3: 0x8a, 0x2a4: 0x8b, 0x2a5: 0x8c, 0x2a6: 0x8d, 0x2a7: 0x87, - 0x2a8: 0x88, 0x2a9: 0x89, 0x2aa: 0x8a, 0x2ab: 0x8b, 0x2ac: 0x8c, 0x2ad: 0x8d, 0x2ae: 0x87, 0x2af: 0x88, - 0x2b0: 0x89, 0x2b1: 0x8a, 0x2b2: 0x8b, 0x2b3: 0x8c, 0x2b4: 0x8d, 0x2b5: 0x87, 0x2b6: 0x88, 0x2b7: 0x89, - 0x2b8: 0x8a, 0x2b9: 0x8b, 0x2ba: 0x8c, 0x2bb: 0x8d, 0x2bc: 0x87, 0x2bd: 0x88, 0x2be: 0x89, 0x2bf: 0x8a, - // Block 0xb, offset 0x2c0 - 0x2c0: 0x8b, 0x2c1: 0x8c, 0x2c2: 0x8d, 0x2c3: 0x87, 0x2c4: 0x88, 0x2c5: 0x89, 0x2c6: 0x8a, 0x2c7: 0x8b, - 0x2c8: 0x8c, 0x2c9: 0x8d, 0x2ca: 0x87, 0x2cb: 0x88, 0x2cc: 0x89, 0x2cd: 0x8a, 0x2ce: 0x8b, 0x2cf: 0x8c, - 0x2d0: 0x8d, 0x2d1: 0x87, 0x2d2: 0x88, 0x2d3: 0x89, 0x2d4: 0x8a, 0x2d5: 0x8b, 0x2d6: 0x8c, 0x2d7: 0x8d, - 0x2d8: 0x87, 0x2d9: 0x88, 0x2da: 0x89, 0x2db: 0x8a, 0x2dc: 0x8b, 0x2dd: 0x8c, 0x2de: 0x8e, - // Block 0xc, offset 0x300 - 0x324: 0x1b, 0x325: 0x1c, 0x326: 0x1d, 0x327: 0x1e, - 0x328: 0x1f, 0x329: 0x20, 0x32a: 0x21, 0x32b: 0x22, 0x32c: 0x8f, 0x32d: 0x90, 0x32e: 0x91, - 0x331: 0x92, 0x332: 0x93, 0x333: 0x94, 0x334: 0x95, - 0x338: 0x96, 0x339: 0x97, 0x33a: 0x98, 0x33b: 0x99, 0x33e: 0x9a, 0x33f: 0x9b, - // Block 0xd, offset 0x340 - 0x347: 0x9c, - 0x34b: 0x9d, 0x34d: 0x9e, - 0x368: 0x9f, 0x36b: 0xa0, - // Block 0xe, offset 0x380 - 0x381: 0xa1, 0x382: 0xa2, 0x384: 0xa3, 0x385: 0x82, 0x387: 0xa4, - 0x388: 0xa5, 0x38b: 0xa6, 0x38c: 0x3e, 0x38d: 0xa7, - 0x391: 0xa8, 0x392: 0xa9, 0x393: 0xaa, 0x396: 0xab, 0x397: 0xac, - 0x398: 0x73, 0x39a: 0xad, 0x39c: 0xae, - 0x3b0: 0x73, - // Block 0xf, offset 0x3c0 - 0x3eb: 0xaf, 0x3ec: 0xb0, - // Block 0x10, offset 0x400 - 0x432: 0xb1, - // Block 0x11, offset 0x440 - 0x445: 0xb2, 0x446: 0xb3, 0x447: 0xb4, - 0x449: 0xb5, - // Block 0x12, offset 0x480 - 0x480: 0xb6, - 0x4a3: 0xb7, 0x4a5: 0xb8, - // Block 0x13, offset 0x4c0 - 0x4c8: 0xb9, - // Block 0x14, offset 0x500 - 0x520: 0x23, 0x521: 0x24, 0x522: 0x25, 0x523: 0x26, 0x524: 0x27, 0x525: 0x28, 0x526: 0x29, 0x527: 0x2a, - 0x528: 0x2b, - // Block 0x15, offset 0x540 - 0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d, - 0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11, - 0x56f: 0x12, -} - -// nfcSparseOffset: 142 entries, 284 bytes -var nfcSparseOffset = []uint16{0x0, 0x5, 0x9, 0xb, 0xd, 0x18, 0x28, 0x2a, 0x2f, 0x3a, 0x49, 0x56, 0x5e, 0x62, 0x67, 0x69, 0x7a, 0x82, 0x89, 0x8c, 0x93, 0x97, 0x9b, 0x9d, 0x9f, 0xa8, 0xac, 0xb3, 0xb8, 0xbb, 0xc5, 0xc7, 0xce, 0xd6, 0xd9, 0xdb, 0xdd, 0xdf, 0xe4, 0xf5, 0x101, 0x103, 0x109, 0x10b, 0x10d, 0x10f, 0x111, 0x113, 0x115, 0x118, 0x11b, 0x11d, 0x120, 0x123, 0x127, 0x12c, 0x135, 0x137, 0x13a, 0x13c, 0x147, 0x157, 0x15b, 0x169, 0x16c, 0x172, 0x178, 0x183, 0x187, 0x189, 0x18b, 0x18d, 0x18f, 0x191, 0x197, 0x19b, 0x19d, 0x19f, 0x1a7, 0x1ab, 0x1ae, 0x1b0, 0x1b2, 0x1b4, 0x1b7, 0x1b9, 0x1bb, 0x1bd, 0x1bf, 0x1c5, 0x1c8, 0x1ca, 0x1d1, 0x1d7, 0x1dd, 0x1e5, 0x1eb, 0x1f1, 0x1f7, 0x1fb, 0x209, 0x212, 0x215, 0x218, 0x21a, 0x21d, 0x21f, 0x223, 0x228, 0x22a, 0x22c, 0x231, 0x237, 0x239, 0x23b, 0x23d, 0x243, 0x246, 0x249, 0x251, 0x258, 0x25b, 0x25e, 0x260, 0x268, 0x26b, 0x272, 0x275, 0x27b, 0x27d, 0x280, 0x282, 0x284, 0x286, 0x288, 0x295, 0x29f, 0x2a1, 0x2a3, 0x2a9, 0x2ab, 0x2ae} - -// nfcSparseValues: 688 entries, 2752 bytes -var nfcSparseValues = [688]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: 0x46e2, lo: 0xa0, hi: 0xa1}, - {value: 0x4714, 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: 0x4840, lo: 0x8a, hi: 0x8a}, - {value: 0x485e, lo: 0x8b, hi: 0x8b}, - {value: 0x36c7, lo: 0x8c, hi: 0x8c}, - {value: 0x36df, lo: 0x8d, hi: 0x8d}, - {value: 0x4876, lo: 0x8e, hi: 0x8e}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x36fd, 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: 0x37a5, lo: 0x90, hi: 0x90}, - {value: 0x37b1, lo: 0x91, hi: 0x91}, - {value: 0x379f, lo: 0x93, hi: 0x93}, - {value: 0xa000, lo: 0x96, hi: 0x96}, - {value: 0x3817, lo: 0x97, hi: 0x97}, - {value: 0x37e1, lo: 0x9c, hi: 0x9c}, - {value: 0x37c9, lo: 0x9d, hi: 0x9d}, - {value: 0x37f3, lo: 0x9e, hi: 0x9e}, - {value: 0xa000, lo: 0xb4, hi: 0xb5}, - {value: 0x381d, lo: 0xb6, hi: 0xb6}, - {value: 0x3823, lo: 0xb7, hi: 0xb7}, - // Block 0x6, offset 0x28 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x83, hi: 0x87}, - // Block 0x7, offset 0x2a - {value: 0x0001, lo: 0x04}, - {value: 0x8113, lo: 0x81, hi: 0x82}, - {value: 0x8132, lo: 0x84, hi: 0x84}, - {value: 0x812d, lo: 0x85, hi: 0x85}, - {value: 0x810d, lo: 0x87, hi: 0x87}, - // Block 0x8, offset 0x2f - {value: 0x0000, lo: 0x0a}, - {value: 0x8132, lo: 0x90, hi: 0x97}, - {value: 0x8119, lo: 0x98, hi: 0x98}, - {value: 0x811a, lo: 0x99, hi: 0x99}, - {value: 0x811b, lo: 0x9a, hi: 0x9a}, - {value: 0x3841, lo: 0xa2, hi: 0xa2}, - {value: 0x3847, lo: 0xa3, hi: 0xa3}, - {value: 0x3853, lo: 0xa4, hi: 0xa4}, - {value: 0x384d, lo: 0xa5, hi: 0xa5}, - {value: 0x3859, lo: 0xa6, hi: 0xa6}, - {value: 0xa000, lo: 0xa7, hi: 0xa7}, - // Block 0x9, offset 0x3a - {value: 0x0000, lo: 0x0e}, - {value: 0x386b, lo: 0x80, hi: 0x80}, - {value: 0xa000, lo: 0x81, hi: 0x81}, - {value: 0x385f, lo: 0x82, hi: 0x82}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x3865, lo: 0x93, hi: 0x93}, - {value: 0xa000, lo: 0x95, hi: 0x95}, - {value: 0x8132, lo: 0x96, hi: 0x9c}, - {value: 0x8132, lo: 0x9f, hi: 0xa2}, - {value: 0x812d, lo: 0xa3, hi: 0xa3}, - {value: 0x8132, lo: 0xa4, hi: 0xa4}, - {value: 0x8132, lo: 0xa7, hi: 0xa8}, - {value: 0x812d, lo: 0xaa, hi: 0xaa}, - {value: 0x8132, lo: 0xab, hi: 0xac}, - {value: 0x812d, lo: 0xad, hi: 0xad}, - // Block 0xa, offset 0x49 - {value: 0x0000, lo: 0x0c}, - {value: 0x811f, lo: 0x91, hi: 0x91}, - {value: 0x8132, lo: 0xb0, hi: 0xb0}, - {value: 0x812d, lo: 0xb1, hi: 0xb1}, - {value: 0x8132, lo: 0xb2, hi: 0xb3}, - {value: 0x812d, lo: 0xb4, hi: 0xb4}, - {value: 0x8132, lo: 0xb5, hi: 0xb6}, - {value: 0x812d, lo: 0xb7, hi: 0xb9}, - {value: 0x8132, lo: 0xba, hi: 0xba}, - {value: 0x812d, lo: 0xbb, hi: 0xbc}, - {value: 0x8132, lo: 0xbd, hi: 0xbd}, - {value: 0x812d, lo: 0xbe, hi: 0xbe}, - {value: 0x8132, lo: 0xbf, hi: 0xbf}, - // Block 0xb, offset 0x56 - {value: 0x0005, lo: 0x07}, - {value: 0x8132, lo: 0x80, hi: 0x80}, - {value: 0x8132, lo: 0x81, hi: 0x81}, - {value: 0x812d, lo: 0x82, hi: 0x83}, - {value: 0x812d, lo: 0x84, hi: 0x85}, - {value: 0x812d, lo: 0x86, hi: 0x87}, - {value: 0x812d, lo: 0x88, hi: 0x89}, - {value: 0x8132, lo: 0x8a, hi: 0x8a}, - // Block 0xc, offset 0x5e - {value: 0x0000, lo: 0x03}, - {value: 0x8132, lo: 0xab, hi: 0xb1}, - {value: 0x812d, lo: 0xb2, hi: 0xb2}, - {value: 0x8132, lo: 0xb3, hi: 0xb3}, - // Block 0xd, offset 0x62 - {value: 0x0000, lo: 0x04}, - {value: 0x8132, lo: 0x96, hi: 0x99}, - {value: 0x8132, lo: 0x9b, hi: 0xa3}, - {value: 0x8132, lo: 0xa5, hi: 0xa7}, - {value: 0x8132, lo: 0xa9, hi: 0xad}, - // Block 0xe, offset 0x67 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x99, hi: 0x9b}, - // Block 0xf, offset 0x69 - {value: 0x0000, lo: 0x10}, - {value: 0x8132, lo: 0x94, hi: 0xa1}, - {value: 0x812d, lo: 0xa3, hi: 0xa3}, - {value: 0x8132, lo: 0xa4, hi: 0xa5}, - {value: 0x812d, lo: 0xa6, hi: 0xa6}, - {value: 0x8132, lo: 0xa7, hi: 0xa8}, - {value: 0x812d, lo: 0xa9, hi: 0xa9}, - {value: 0x8132, lo: 0xaa, hi: 0xac}, - {value: 0x812d, lo: 0xad, hi: 0xaf}, - {value: 0x8116, lo: 0xb0, hi: 0xb0}, - {value: 0x8117, lo: 0xb1, hi: 0xb1}, - {value: 0x8118, lo: 0xb2, hi: 0xb2}, - {value: 0x8132, lo: 0xb3, hi: 0xb5}, - {value: 0x812d, lo: 0xb6, hi: 0xb6}, - {value: 0x8132, lo: 0xb7, hi: 0xb8}, - {value: 0x812d, lo: 0xb9, hi: 0xba}, - {value: 0x8132, lo: 0xbb, hi: 0xbf}, - // Block 0x10, offset 0x7a - {value: 0x0000, lo: 0x07}, - {value: 0xa000, lo: 0xa8, hi: 0xa8}, - {value: 0x3ed8, lo: 0xa9, hi: 0xa9}, - {value: 0xa000, lo: 0xb0, hi: 0xb0}, - {value: 0x3ee0, lo: 0xb1, hi: 0xb1}, - {value: 0xa000, lo: 0xb3, hi: 0xb3}, - {value: 0x3ee8, lo: 0xb4, hi: 0xb4}, - {value: 0x9902, lo: 0xbc, hi: 0xbc}, - // Block 0x11, offset 0x82 - {value: 0x0008, lo: 0x06}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x8132, lo: 0x91, hi: 0x91}, - {value: 0x812d, lo: 0x92, hi: 0x92}, - {value: 0x8132, lo: 0x93, hi: 0x93}, - {value: 0x8132, lo: 0x94, hi: 0x94}, - {value: 0x451c, lo: 0x98, hi: 0x9f}, - // Block 0x12, offset 0x89 - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x13, offset 0x8c - {value: 0x0008, lo: 0x06}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2c9e, lo: 0x8b, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - {value: 0x455c, lo: 0x9c, hi: 0x9d}, - {value: 0x456c, lo: 0x9f, hi: 0x9f}, - // Block 0x14, offset 0x93 - {value: 0x0000, lo: 0x03}, - {value: 0x4594, lo: 0xb3, hi: 0xb3}, - {value: 0x459c, lo: 0xb6, hi: 0xb6}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - // Block 0x15, offset 0x97 - {value: 0x0008, lo: 0x03}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x4574, lo: 0x99, hi: 0x9b}, - {value: 0x458c, lo: 0x9e, hi: 0x9e}, - // Block 0x16, offset 0x9b - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - // Block 0x17, offset 0x9d - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - // Block 0x18, offset 0x9f - {value: 0x0000, lo: 0x08}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2cb6, lo: 0x88, hi: 0x88}, - {value: 0x2cae, lo: 0x8b, hi: 0x8b}, - {value: 0x2cbe, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x96, hi: 0x97}, - {value: 0x45a4, lo: 0x9c, hi: 0x9c}, - {value: 0x45ac, lo: 0x9d, hi: 0x9d}, - // Block 0x19, offset 0xa8 - {value: 0x0000, lo: 0x03}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x2cc6, lo: 0x94, hi: 0x94}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x1a, offset 0xac - {value: 0x0000, lo: 0x06}, - {value: 0xa000, lo: 0x86, hi: 0x87}, - {value: 0x2cce, lo: 0x8a, hi: 0x8a}, - {value: 0x2cde, lo: 0x8b, hi: 0x8b}, - {value: 0x2cd6, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - // Block 0x1b, offset 0xb3 - {value: 0x1801, lo: 0x04}, - {value: 0xa000, lo: 0x86, hi: 0x86}, - {value: 0x3ef0, lo: 0x88, hi: 0x88}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x8120, lo: 0x95, hi: 0x96}, - // Block 0x1c, offset 0xb8 - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - {value: 0xa000, lo: 0xbf, hi: 0xbf}, - // Block 0x1d, offset 0xbb - {value: 0x0000, lo: 0x09}, - {value: 0x2ce6, lo: 0x80, hi: 0x80}, - {value: 0x9900, lo: 0x82, hi: 0x82}, - {value: 0xa000, lo: 0x86, hi: 0x86}, - {value: 0x2cee, lo: 0x87, hi: 0x87}, - {value: 0x2cf6, lo: 0x88, hi: 0x88}, - {value: 0x2f50, lo: 0x8a, hi: 0x8a}, - {value: 0x2dd8, lo: 0x8b, hi: 0x8b}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x95, hi: 0x96}, - // Block 0x1e, offset 0xc5 - {value: 0x0000, lo: 0x01}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x1f, offset 0xc7 - {value: 0x0000, lo: 0x06}, - {value: 0xa000, lo: 0x86, hi: 0x87}, - {value: 0x2cfe, lo: 0x8a, hi: 0x8a}, - {value: 0x2d0e, lo: 0x8b, hi: 0x8b}, - {value: 0x2d06, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - // Block 0x20, offset 0xce - {value: 0x6bea, lo: 0x07}, - {value: 0x9904, lo: 0x8a, hi: 0x8a}, - {value: 0x9900, lo: 0x8f, hi: 0x8f}, - {value: 0xa000, lo: 0x99, hi: 0x99}, - {value: 0x3ef8, lo: 0x9a, hi: 0x9a}, - {value: 0x2f58, lo: 0x9c, hi: 0x9c}, - {value: 0x2de3, lo: 0x9d, hi: 0x9d}, - {value: 0x2d16, lo: 0x9e, hi: 0x9f}, - // Block 0x21, offset 0xd6 - {value: 0x0000, lo: 0x02}, - {value: 0x8122, lo: 0xb8, hi: 0xb9}, - {value: 0x8104, lo: 0xba, hi: 0xba}, - // Block 0x22, offset 0xd9 - {value: 0x0000, lo: 0x01}, - {value: 0x8123, lo: 0x88, hi: 0x8b}, - // Block 0x23, offset 0xdb - {value: 0x0000, lo: 0x01}, - {value: 0x8124, lo: 0xb8, hi: 0xb9}, - // Block 0x24, offset 0xdd - {value: 0x0000, lo: 0x01}, - {value: 0x8125, lo: 0x88, hi: 0x8b}, - // Block 0x25, offset 0xdf - {value: 0x0000, lo: 0x04}, - {value: 0x812d, lo: 0x98, hi: 0x99}, - {value: 0x812d, lo: 0xb5, hi: 0xb5}, - {value: 0x812d, lo: 0xb7, hi: 0xb7}, - {value: 0x812b, lo: 0xb9, hi: 0xb9}, - // Block 0x26, offset 0xe4 - {value: 0x0000, lo: 0x10}, - {value: 0x2644, lo: 0x83, hi: 0x83}, - {value: 0x264b, lo: 0x8d, hi: 0x8d}, - {value: 0x2652, lo: 0x92, hi: 0x92}, - {value: 0x2659, lo: 0x97, hi: 0x97}, - {value: 0x2660, lo: 0x9c, hi: 0x9c}, - {value: 0x263d, lo: 0xa9, hi: 0xa9}, - {value: 0x8126, lo: 0xb1, hi: 0xb1}, - {value: 0x8127, lo: 0xb2, hi: 0xb2}, - {value: 0x4a84, lo: 0xb3, hi: 0xb3}, - {value: 0x8128, lo: 0xb4, hi: 0xb4}, - {value: 0x4a8d, lo: 0xb5, hi: 0xb5}, - {value: 0x45b4, lo: 0xb6, hi: 0xb6}, - {value: 0x8200, lo: 0xb7, hi: 0xb7}, - {value: 0x45bc, lo: 0xb8, hi: 0xb8}, - {value: 0x8200, lo: 0xb9, hi: 0xb9}, - {value: 0x8127, lo: 0xba, hi: 0xbd}, - // Block 0x27, offset 0xf5 - {value: 0x0000, lo: 0x0b}, - {value: 0x8127, lo: 0x80, hi: 0x80}, - {value: 0x4a96, lo: 0x81, hi: 0x81}, - {value: 0x8132, lo: 0x82, hi: 0x83}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0x86, hi: 0x87}, - {value: 0x266e, lo: 0x93, hi: 0x93}, - {value: 0x2675, lo: 0x9d, hi: 0x9d}, - {value: 0x267c, lo: 0xa2, hi: 0xa2}, - {value: 0x2683, lo: 0xa7, hi: 0xa7}, - {value: 0x268a, lo: 0xac, hi: 0xac}, - {value: 0x2667, lo: 0xb9, hi: 0xb9}, - // Block 0x28, offset 0x101 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x86, hi: 0x86}, - // Block 0x29, offset 0x103 - {value: 0x0000, lo: 0x05}, - {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x2d1e, lo: 0xa6, hi: 0xa6}, - {value: 0x9900, lo: 0xae, hi: 0xae}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - {value: 0x8104, lo: 0xb9, hi: 0xba}, - // Block 0x2a, offset 0x109 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x8d, hi: 0x8d}, - // Block 0x2b, offset 0x10b - {value: 0x0000, lo: 0x01}, - {value: 0xa000, lo: 0x80, hi: 0x92}, - // Block 0x2c, offset 0x10d - {value: 0x0000, lo: 0x01}, - {value: 0xb900, lo: 0xa1, hi: 0xb5}, - // Block 0x2d, offset 0x10f - {value: 0x0000, lo: 0x01}, - {value: 0x9900, lo: 0xa8, hi: 0xbf}, - // Block 0x2e, offset 0x111 - {value: 0x0000, lo: 0x01}, - {value: 0x9900, lo: 0x80, hi: 0x82}, - // Block 0x2f, offset 0x113 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x9d, hi: 0x9f}, - // Block 0x30, offset 0x115 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x94, hi: 0x94}, - {value: 0x8104, lo: 0xb4, hi: 0xb4}, - // Block 0x31, offset 0x118 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x92, hi: 0x92}, - {value: 0x8132, lo: 0x9d, hi: 0x9d}, - // Block 0x32, offset 0x11b - {value: 0x0000, lo: 0x01}, - {value: 0x8131, lo: 0xa9, hi: 0xa9}, - // Block 0x33, offset 0x11d - {value: 0x0004, lo: 0x02}, - {value: 0x812e, lo: 0xb9, hi: 0xba}, - {value: 0x812d, lo: 0xbb, hi: 0xbb}, - // Block 0x34, offset 0x120 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x97, hi: 0x97}, - {value: 0x812d, lo: 0x98, hi: 0x98}, - // Block 0x35, offset 0x123 - {value: 0x0000, lo: 0x03}, - {value: 0x8104, lo: 0xa0, hi: 0xa0}, - {value: 0x8132, lo: 0xb5, hi: 0xbc}, - {value: 0x812d, lo: 0xbf, hi: 0xbf}, - // Block 0x36, offset 0x127 - {value: 0x0000, lo: 0x04}, - {value: 0x8132, lo: 0xb0, hi: 0xb4}, - {value: 0x812d, lo: 0xb5, hi: 0xba}, - {value: 0x8132, lo: 0xbb, hi: 0xbc}, - {value: 0x812d, lo: 0xbd, hi: 0xbd}, - // Block 0x37, offset 0x12c - {value: 0x0000, lo: 0x08}, - {value: 0x2d66, lo: 0x80, hi: 0x80}, - {value: 0x2d6e, lo: 0x81, hi: 0x81}, - {value: 0xa000, lo: 0x82, hi: 0x82}, - {value: 0x2d76, lo: 0x83, hi: 0x83}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0xab, hi: 0xab}, - {value: 0x812d, lo: 0xac, hi: 0xac}, - {value: 0x8132, lo: 0xad, hi: 0xb3}, - // Block 0x38, offset 0x135 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xaa, hi: 0xab}, - // Block 0x39, offset 0x137 - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xa6, hi: 0xa6}, - {value: 0x8104, lo: 0xb2, hi: 0xb3}, - // Block 0x3a, offset 0x13a - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - // Block 0x3b, offset 0x13c - {value: 0x0000, lo: 0x0a}, - {value: 0x8132, lo: 0x90, hi: 0x92}, - {value: 0x8101, lo: 0x94, hi: 0x94}, - {value: 0x812d, lo: 0x95, hi: 0x99}, - {value: 0x8132, lo: 0x9a, hi: 0x9b}, - {value: 0x812d, lo: 0x9c, hi: 0x9f}, - {value: 0x8132, lo: 0xa0, hi: 0xa0}, - {value: 0x8101, lo: 0xa2, hi: 0xa8}, - {value: 0x812d, lo: 0xad, hi: 0xad}, - {value: 0x8132, lo: 0xb4, hi: 0xb4}, - {value: 0x8132, lo: 0xb8, hi: 0xb9}, - // Block 0x3c, offset 0x147 - {value: 0x0000, lo: 0x0f}, - {value: 0x8132, lo: 0x80, hi: 0x81}, - {value: 0x812d, lo: 0x82, hi: 0x82}, - {value: 0x8132, lo: 0x83, hi: 0x89}, - {value: 0x812d, lo: 0x8a, hi: 0x8a}, - {value: 0x8132, lo: 0x8b, hi: 0x8c}, - {value: 0x8135, lo: 0x8d, hi: 0x8d}, - {value: 0x812a, lo: 0x8e, hi: 0x8e}, - {value: 0x812d, lo: 0x8f, hi: 0x8f}, - {value: 0x8129, lo: 0x90, hi: 0x90}, - {value: 0x8132, lo: 0x91, hi: 0xb5}, - {value: 0x8132, lo: 0xbb, hi: 0xbb}, - {value: 0x8134, lo: 0xbc, hi: 0xbc}, - {value: 0x812d, lo: 0xbd, hi: 0xbd}, - {value: 0x8132, lo: 0xbe, hi: 0xbe}, - {value: 0x812d, lo: 0xbf, hi: 0xbf}, - // Block 0x3d, offset 0x157 - {value: 0x0004, lo: 0x03}, - {value: 0x0433, lo: 0x80, hi: 0x81}, - {value: 0x8100, lo: 0x97, hi: 0x97}, - {value: 0x8100, lo: 0xbe, hi: 0xbe}, - // Block 0x3e, offset 0x15b - {value: 0x0000, lo: 0x0d}, - {value: 0x8132, lo: 0x90, hi: 0x91}, - {value: 0x8101, lo: 0x92, hi: 0x93}, - {value: 0x8132, lo: 0x94, hi: 0x97}, - {value: 0x8101, lo: 0x98, hi: 0x9a}, - {value: 0x8132, lo: 0x9b, hi: 0x9c}, - {value: 0x8132, lo: 0xa1, hi: 0xa1}, - {value: 0x8101, lo: 0xa5, hi: 0xa6}, - {value: 0x8132, lo: 0xa7, hi: 0xa7}, - {value: 0x812d, lo: 0xa8, hi: 0xa8}, - {value: 0x8132, lo: 0xa9, hi: 0xa9}, - {value: 0x8101, lo: 0xaa, hi: 0xab}, - {value: 0x812d, lo: 0xac, hi: 0xaf}, - {value: 0x8132, lo: 0xb0, hi: 0xb0}, - // Block 0x3f, offset 0x169 - {value: 0x427b, lo: 0x02}, - {value: 0x01b8, lo: 0xa6, hi: 0xa6}, - {value: 0x0057, lo: 0xaa, hi: 0xab}, - // Block 0x40, offset 0x16c - {value: 0x0007, lo: 0x05}, - {value: 0xa000, lo: 0x90, hi: 0x90}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0xa000, lo: 0x94, hi: 0x94}, - {value: 0x3bb9, lo: 0x9a, hi: 0x9b}, - {value: 0x3bc7, lo: 0xae, hi: 0xae}, - // Block 0x41, offset 0x172 - {value: 0x000e, lo: 0x05}, - {value: 0x3bce, lo: 0x8d, hi: 0x8e}, - {value: 0x3bd5, lo: 0x8f, hi: 0x8f}, - {value: 0xa000, lo: 0x90, hi: 0x90}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0xa000, lo: 0x94, hi: 0x94}, - // Block 0x42, offset 0x178 - {value: 0x6408, lo: 0x0a}, - {value: 0xa000, lo: 0x83, hi: 0x83}, - {value: 0x3be3, lo: 0x84, hi: 0x84}, - {value: 0xa000, lo: 0x88, hi: 0x88}, - {value: 0x3bea, lo: 0x89, hi: 0x89}, - {value: 0xa000, lo: 0x8b, hi: 0x8b}, - {value: 0x3bf1, lo: 0x8c, hi: 0x8c}, - {value: 0xa000, lo: 0xa3, hi: 0xa3}, - {value: 0x3bf8, lo: 0xa4, hi: 0xa5}, - {value: 0x3bff, lo: 0xa6, hi: 0xa6}, - {value: 0xa000, lo: 0xbc, hi: 0xbc}, - // Block 0x43, offset 0x183 - {value: 0x0007, lo: 0x03}, - {value: 0x3c68, lo: 0xa0, hi: 0xa1}, - {value: 0x3c92, lo: 0xa2, hi: 0xa3}, - {value: 0x3cbc, lo: 0xaa, hi: 0xad}, - // Block 0x44, offset 0x187 - {value: 0x0004, lo: 0x01}, - {value: 0x048b, lo: 0xa9, hi: 0xaa}, - // Block 0x45, offset 0x189 - {value: 0x0000, lo: 0x01}, - {value: 0x44dd, lo: 0x9c, hi: 0x9c}, - // Block 0x46, offset 0x18b - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xaf, hi: 0xb1}, - // Block 0x47, offset 0x18d - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x48, offset 0x18f - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xa0, hi: 0xbf}, - // Block 0x49, offset 0x191 - {value: 0x0000, lo: 0x05}, - {value: 0x812c, lo: 0xaa, hi: 0xaa}, - {value: 0x8131, lo: 0xab, hi: 0xab}, - {value: 0x8133, lo: 0xac, hi: 0xac}, - {value: 0x812e, lo: 0xad, hi: 0xad}, - {value: 0x812f, lo: 0xae, hi: 0xaf}, - // Block 0x4a, offset 0x197 - {value: 0x0000, lo: 0x03}, - {value: 0x4a9f, lo: 0xb3, hi: 0xb3}, - {value: 0x4a9f, lo: 0xb5, hi: 0xb6}, - {value: 0x4a9f, lo: 0xba, hi: 0xbf}, - // Block 0x4b, offset 0x19b - {value: 0x0000, lo: 0x01}, - {value: 0x4a9f, lo: 0x8f, hi: 0xa3}, - // Block 0x4c, offset 0x19d - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0xae, hi: 0xbe}, - // Block 0x4d, offset 0x19f - {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 0x4e, offset 0x1a7 - {value: 0x0000, lo: 0x03}, - {value: 0x8100, lo: 0x80, hi: 0x80}, - {value: 0x8100, lo: 0x8b, hi: 0x8b}, - {value: 0x8100, lo: 0x8e, hi: 0x8e}, - // Block 0x4f, offset 0x1ab - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0xaf, hi: 0xaf}, - {value: 0x8132, lo: 0xb4, hi: 0xbd}, - // Block 0x50, offset 0x1ae - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x9e, hi: 0x9f}, - // Block 0x51, offset 0x1b0 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb0, hi: 0xb1}, - // Block 0x52, offset 0x1b2 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x86, hi: 0x86}, - // Block 0x53, offset 0x1b4 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0xa0, hi: 0xb1}, - // Block 0x54, offset 0x1b7 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xab, hi: 0xad}, - // Block 0x55, offset 0x1b9 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x93, hi: 0x93}, - // Block 0x56, offset 0x1bb - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xb3, hi: 0xb3}, - // Block 0x57, offset 0x1bd - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x80, hi: 0x80}, - // Block 0x58, offset 0x1bf - {value: 0x0000, lo: 0x05}, - {value: 0x8132, lo: 0xb0, hi: 0xb0}, - {value: 0x8132, lo: 0xb2, hi: 0xb3}, - {value: 0x812d, lo: 0xb4, hi: 0xb4}, - {value: 0x8132, lo: 0xb7, hi: 0xb8}, - {value: 0x8132, lo: 0xbe, hi: 0xbf}, - // Block 0x59, offset 0x1c5 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x81, hi: 0x81}, - {value: 0x8104, lo: 0xb6, hi: 0xb6}, - // Block 0x5a, offset 0x1c8 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xad, hi: 0xad}, - // Block 0x5b, offset 0x1ca - {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 0x5c, offset 0x1d1 - {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 0x5d, offset 0x1d7 - {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 0x5e, offset 0x1dd - {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 0x5f, offset 0x1e5 - {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 0x60, offset 0x1eb - {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 0x61, offset 0x1f1 - {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 0x62, offset 0x1f7 - {value: 0x0000, lo: 0x03}, - {value: 0xc600, lo: 0x80, hi: 0x87}, - {value: 0xe500, lo: 0x88, hi: 0x88}, - {value: 0xc600, lo: 0x89, hi: 0xa3}, - // Block 0x63, offset 0x1fb - {value: 0x0006, lo: 0x0d}, - {value: 0x4390, lo: 0x9d, hi: 0x9d}, - {value: 0x8115, lo: 0x9e, hi: 0x9e}, - {value: 0x4402, lo: 0x9f, hi: 0x9f}, - {value: 0x43f0, lo: 0xaa, hi: 0xab}, - {value: 0x44f4, lo: 0xac, hi: 0xac}, - {value: 0x44fc, lo: 0xad, hi: 0xad}, - {value: 0x4348, lo: 0xae, hi: 0xb1}, - {value: 0x4366, lo: 0xb2, hi: 0xb4}, - {value: 0x437e, lo: 0xb5, hi: 0xb6}, - {value: 0x438a, lo: 0xb8, hi: 0xb8}, - {value: 0x4396, lo: 0xb9, hi: 0xbb}, - {value: 0x43ae, lo: 0xbc, hi: 0xbc}, - {value: 0x43b4, lo: 0xbe, hi: 0xbe}, - // Block 0x64, offset 0x209 - {value: 0x0006, lo: 0x08}, - {value: 0x43ba, lo: 0x80, hi: 0x81}, - {value: 0x43c6, lo: 0x83, hi: 0x84}, - {value: 0x43d8, lo: 0x86, hi: 0x89}, - {value: 0x43fc, lo: 0x8a, hi: 0x8a}, - {value: 0x4378, lo: 0x8b, hi: 0x8b}, - {value: 0x4360, lo: 0x8c, hi: 0x8c}, - {value: 0x43a8, lo: 0x8d, hi: 0x8d}, - {value: 0x43d2, lo: 0x8e, hi: 0x8e}, - // Block 0x65, offset 0x212 - {value: 0x0000, lo: 0x02}, - {value: 0x8100, lo: 0xa4, hi: 0xa5}, - {value: 0x8100, lo: 0xb0, hi: 0xb1}, - // Block 0x66, offset 0x215 - {value: 0x0000, lo: 0x02}, - {value: 0x8100, lo: 0x9b, hi: 0x9d}, - {value: 0x8200, lo: 0x9e, hi: 0xa3}, - // Block 0x67, offset 0x218 - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0x90, hi: 0x90}, - // Block 0x68, offset 0x21a - {value: 0x0000, lo: 0x02}, - {value: 0x8100, lo: 0x99, hi: 0x99}, - {value: 0x8200, lo: 0xb2, hi: 0xb4}, - // Block 0x69, offset 0x21d - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0xbc, hi: 0xbd}, - // Block 0x6a, offset 0x21f - {value: 0x0000, lo: 0x03}, - {value: 0x8132, lo: 0xa0, hi: 0xa6}, - {value: 0x812d, lo: 0xa7, hi: 0xad}, - {value: 0x8132, lo: 0xae, hi: 0xaf}, - // Block 0x6b, offset 0x223 - {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 0x6c, offset 0x228 - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0x81, hi: 0x8c}, - // Block 0x6d, offset 0x22a - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0xb5, hi: 0xba}, - // Block 0x6e, offset 0x22c - {value: 0x0000, lo: 0x04}, - {value: 0x4a9f, lo: 0x9e, hi: 0x9f}, - {value: 0x4a9f, lo: 0xa3, hi: 0xa3}, - {value: 0x4a9f, lo: 0xa5, hi: 0xa6}, - {value: 0x4a9f, lo: 0xaa, hi: 0xaf}, - // Block 0x6f, offset 0x231 - {value: 0x0000, lo: 0x05}, - {value: 0x4a9f, lo: 0x82, hi: 0x87}, - {value: 0x4a9f, lo: 0x8a, hi: 0x8f}, - {value: 0x4a9f, lo: 0x92, hi: 0x97}, - {value: 0x4a9f, lo: 0x9a, hi: 0x9c}, - {value: 0x8100, lo: 0xa3, hi: 0xa3}, - // Block 0x70, offset 0x237 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xbd, hi: 0xbd}, - // Block 0x71, offset 0x239 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xa0, hi: 0xa0}, - // Block 0x72, offset 0x23b - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb6, hi: 0xba}, - // Block 0x73, offset 0x23d - {value: 0x002c, lo: 0x05}, - {value: 0x812d, lo: 0x8d, hi: 0x8d}, - {value: 0x8132, lo: 0x8f, hi: 0x8f}, - {value: 0x8132, lo: 0xb8, hi: 0xb8}, - {value: 0x8101, lo: 0xb9, hi: 0xba}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x74, offset 0x243 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0xa5, hi: 0xa5}, - {value: 0x812d, lo: 0xa6, hi: 0xa6}, - // Block 0x75, offset 0x246 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x86, hi: 0x86}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x76, offset 0x249 - {value: 0x17fe, lo: 0x07}, - {value: 0xa000, lo: 0x99, hi: 0x99}, - {value: 0x4238, lo: 0x9a, hi: 0x9a}, - {value: 0xa000, lo: 0x9b, hi: 0x9b}, - {value: 0x4242, lo: 0x9c, hi: 0x9c}, - {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x424c, lo: 0xab, hi: 0xab}, - {value: 0x8104, lo: 0xb9, hi: 0xba}, - // Block 0x77, offset 0x251 - {value: 0x0000, lo: 0x06}, - {value: 0x8132, lo: 0x80, hi: 0x82}, - {value: 0x9900, lo: 0xa7, hi: 0xa7}, - {value: 0x2d7e, lo: 0xae, hi: 0xae}, - {value: 0x2d88, lo: 0xaf, hi: 0xaf}, - {value: 0xa000, lo: 0xb1, hi: 0xb2}, - {value: 0x8104, lo: 0xb3, hi: 0xb4}, - // Block 0x78, offset 0x258 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x80, hi: 0x80}, - {value: 0x8102, lo: 0x8a, hi: 0x8a}, - // Block 0x79, offset 0x25b - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xb5, hi: 0xb5}, - {value: 0x8102, lo: 0xb6, hi: 0xb6}, - // Block 0x7a, offset 0x25e - {value: 0x0002, lo: 0x01}, - {value: 0x8102, lo: 0xa9, hi: 0xaa}, - // Block 0x7b, offset 0x260 - {value: 0x0000, lo: 0x07}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2d92, lo: 0x8b, hi: 0x8b}, - {value: 0x2d9c, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - {value: 0x8132, lo: 0xa6, hi: 0xac}, - {value: 0x8132, lo: 0xb0, hi: 0xb4}, - // Block 0x7c, offset 0x268 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x82, hi: 0x82}, - {value: 0x8102, lo: 0x86, hi: 0x86}, - // Block 0x7d, offset 0x26b - {value: 0x6b5a, lo: 0x06}, - {value: 0x9900, lo: 0xb0, hi: 0xb0}, - {value: 0xa000, lo: 0xb9, hi: 0xb9}, - {value: 0x9900, lo: 0xba, hi: 0xba}, - {value: 0x2db0, lo: 0xbb, hi: 0xbb}, - {value: 0x2da6, lo: 0xbc, hi: 0xbd}, - {value: 0x2dba, lo: 0xbe, hi: 0xbe}, - // Block 0x7e, offset 0x272 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x82, hi: 0x82}, - {value: 0x8102, lo: 0x83, hi: 0x83}, - // Block 0x7f, offset 0x275 - {value: 0x0000, lo: 0x05}, - {value: 0x9900, lo: 0xaf, hi: 0xaf}, - {value: 0xa000, lo: 0xb8, hi: 0xb9}, - {value: 0x2dc4, lo: 0xba, hi: 0xba}, - {value: 0x2dce, lo: 0xbb, hi: 0xbb}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x80, offset 0x27b - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0x80, hi: 0x80}, - // Block 0x81, offset 0x27d - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xb6, hi: 0xb6}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - // Block 0x82, offset 0x280 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xab, hi: 0xab}, - // Block 0x83, offset 0x282 - {value: 0x0000, lo: 0x01}, - {value: 0x8101, lo: 0xb0, hi: 0xb4}, - // Block 0x84, offset 0x284 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb0, hi: 0xb6}, - // Block 0x85, offset 0x286 - {value: 0x0000, lo: 0x01}, - {value: 0x8101, lo: 0x9e, hi: 0x9e}, - // Block 0x86, offset 0x288 - {value: 0x0000, lo: 0x0c}, - {value: 0x45cc, lo: 0x9e, hi: 0x9e}, - {value: 0x45d6, lo: 0x9f, hi: 0x9f}, - {value: 0x460a, lo: 0xa0, hi: 0xa0}, - {value: 0x4618, lo: 0xa1, hi: 0xa1}, - {value: 0x4626, lo: 0xa2, hi: 0xa2}, - {value: 0x4634, lo: 0xa3, hi: 0xa3}, - {value: 0x4642, lo: 0xa4, hi: 0xa4}, - {value: 0x812b, lo: 0xa5, hi: 0xa6}, - {value: 0x8101, lo: 0xa7, hi: 0xa9}, - {value: 0x8130, lo: 0xad, hi: 0xad}, - {value: 0x812b, lo: 0xae, hi: 0xb2}, - {value: 0x812d, lo: 0xbb, hi: 0xbf}, - // Block 0x87, offset 0x295 - {value: 0x0000, lo: 0x09}, - {value: 0x812d, lo: 0x80, hi: 0x82}, - {value: 0x8132, lo: 0x85, hi: 0x89}, - {value: 0x812d, lo: 0x8a, hi: 0x8b}, - {value: 0x8132, lo: 0xaa, hi: 0xad}, - {value: 0x45e0, lo: 0xbb, hi: 0xbb}, - {value: 0x45ea, lo: 0xbc, hi: 0xbc}, - {value: 0x4650, lo: 0xbd, hi: 0xbd}, - {value: 0x466c, lo: 0xbe, hi: 0xbe}, - {value: 0x465e, lo: 0xbf, hi: 0xbf}, - // Block 0x88, offset 0x29f - {value: 0x0000, lo: 0x01}, - {value: 0x467a, lo: 0x80, hi: 0x80}, - // Block 0x89, offset 0x2a1 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x82, hi: 0x84}, - // Block 0x8a, offset 0x2a3 - {value: 0x0000, lo: 0x05}, - {value: 0x8132, lo: 0x80, hi: 0x86}, - {value: 0x8132, lo: 0x88, hi: 0x98}, - {value: 0x8132, lo: 0x9b, hi: 0xa1}, - {value: 0x8132, lo: 0xa3, hi: 0xa4}, - {value: 0x8132, lo: 0xa6, hi: 0xaa}, - // Block 0x8b, offset 0x2a9 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x90, hi: 0x96}, - // Block 0x8c, offset 0x2ab - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x84, hi: 0x89}, - {value: 0x8102, lo: 0x8a, hi: 0x8a}, - // Block 0x8d, offset 0x2ae - {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: 16994 bytes (16.60 KiB). Checksum: c3ed54ee046f3c46. -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 < 90: - return uint16(nfkcValues[n<<6+uint32(b)]) - default: - n -= 90 - return uint16(nfkcSparse.lookup(n, b)) - } -} - -// nfkcValues: 92 blocks, 5888 entries, 11776 bytes -// The third block is the zero block. -var nfkcValues = [5888]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: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x4688, 0xc3: 0x2f79, 0xc4: 0x4697, 0xc5: 0x469c, - 0xc6: 0xa000, 0xc7: 0x46a6, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x46ab, 0xcb: 0x2ffb, - 0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x46bf, 0xd1: 0x3104, - 0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x46c9, 0xd5: 0x46ce, 0xd6: 0x46dd, - 0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x470f, 0xdd: 0x3235, - 0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x4719, 0xe3: 0x3285, - 0xe4: 0x4728, 0xe5: 0x472d, 0xe6: 0xa000, 0xe7: 0x4737, 0xe8: 0x32ee, 0xe9: 0x32f3, - 0xea: 0x473c, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x4750, - 0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x475a, 0xf5: 0x475f, - 0xf6: 0x476e, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3, - 0xfc: 0x47a0, 0xfd: 0x3550, 0xff: 0x3569, - // Block 0x4, offset 0x100 - 0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x468d, 0x103: 0x471e, 0x104: 0x2f9c, 0x105: 0x32a8, - 0x106: 0x2fb0, 0x107: 0x32bc, 0x108: 0x2fb5, 0x109: 0x32c1, 0x10a: 0x2fba, 0x10b: 0x32c6, - 0x10c: 0x2fbf, 0x10d: 0x32cb, 0x10e: 0x2fc9, 0x10f: 0x32d5, - 0x112: 0x46b0, 0x113: 0x4741, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302, - 0x118: 0x3014, 0x119: 0x3320, 0x11a: 0x3005, 0x11b: 0x3311, 0x11c: 0x302d, 0x11d: 0x3339, - 0x11e: 0x3037, 0x11f: 0x3343, 0x120: 0x303c, 0x121: 0x3348, 0x122: 0x3046, 0x123: 0x3352, - 0x124: 0x304b, 0x125: 0x3357, 0x128: 0x307d, 0x129: 0x338e, - 0x12a: 0x3082, 0x12b: 0x3393, 0x12c: 0x3087, 0x12d: 0x3398, 0x12e: 0x30aa, 0x12f: 0x33b6, - 0x130: 0x308c, 0x132: 0x195d, 0x133: 0x19e7, 0x134: 0x30b4, 0x135: 0x33c0, - 0x136: 0x30c8, 0x137: 0x33d9, 0x139: 0x30d2, 0x13a: 0x33e3, 0x13b: 0x30dc, - 0x13c: 0x33ed, 0x13d: 0x30d7, 0x13e: 0x33e8, 0x13f: 0x1bac, - // Block 0x5, offset 0x140 - 0x140: 0x1c34, 0x143: 0x30ff, 0x144: 0x3410, 0x145: 0x3118, - 0x146: 0x3429, 0x147: 0x310e, 0x148: 0x341f, 0x149: 0x1c5c, - 0x14c: 0x46d3, 0x14d: 0x4764, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c, - 0x154: 0x3159, 0x155: 0x346a, 0x156: 0x3172, 0x157: 0x3483, - 0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x46f6, 0x15b: 0x4787, 0x15c: 0x317c, 0x15d: 0x348d, - 0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x46fb, 0x161: 0x478c, 0x162: 0x31a4, 0x163: 0x34ba, - 0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x4705, 0x169: 0x4796, - 0x16a: 0x470a, 0x16b: 0x479b, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2, - 0x170: 0x31d1, 0x171: 0x34e7, 0x172: 0x31ef, 0x173: 0x3505, 0x174: 0x3212, 0x175: 0x3528, - 0x176: 0x323a, 0x177: 0x3555, 0x178: 0x324e, 0x179: 0x325d, 0x17a: 0x357d, 0x17b: 0x3267, - 0x17c: 0x3587, 0x17d: 0x326c, 0x17e: 0x358c, 0x17f: 0x00a7, - // Block 0x6, offset 0x180 - 0x184: 0x2dee, 0x185: 0x2df4, - 0x186: 0x2dfa, 0x187: 0x1972, 0x188: 0x1975, 0x189: 0x1a08, 0x18a: 0x1987, 0x18b: 0x198a, - 0x18c: 0x1a3e, 0x18d: 0x2f88, 0x18e: 0x3294, 0x18f: 0x3096, 0x190: 0x33a2, 0x191: 0x3140, - 0x192: 0x3451, 0x193: 0x31d6, 0x194: 0x34ec, 0x195: 0x39cf, 0x196: 0x3b5e, 0x197: 0x39c8, - 0x198: 0x3b57, 0x199: 0x39d6, 0x19a: 0x3b65, 0x19b: 0x39c1, 0x19c: 0x3b50, - 0x19e: 0x38b0, 0x19f: 0x3a3f, 0x1a0: 0x38a9, 0x1a1: 0x3a38, 0x1a2: 0x35b3, 0x1a3: 0x35c5, - 0x1a6: 0x3041, 0x1a7: 0x334d, 0x1a8: 0x30be, 0x1a9: 0x33cf, - 0x1aa: 0x46ec, 0x1ab: 0x477d, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd, - 0x1b0: 0x33c5, 0x1b1: 0x1942, 0x1b2: 0x1945, 0x1b3: 0x19cf, 0x1b4: 0x3028, 0x1b5: 0x3334, - 0x1b8: 0x30fa, 0x1b9: 0x340b, 0x1ba: 0x38b7, 0x1bb: 0x3a46, - 0x1bc: 0x35ad, 0x1bd: 0x35bf, 0x1be: 0x35b9, 0x1bf: 0x35cb, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x2f8d, 0x1c1: 0x3299, 0x1c2: 0x2f92, 0x1c3: 0x329e, 0x1c4: 0x300a, 0x1c5: 0x3316, - 0x1c6: 0x300f, 0x1c7: 0x331b, 0x1c8: 0x309b, 0x1c9: 0x33a7, 0x1ca: 0x30a0, 0x1cb: 0x33ac, - 0x1cc: 0x3145, 0x1cd: 0x3456, 0x1ce: 0x314a, 0x1cf: 0x345b, 0x1d0: 0x3168, 0x1d1: 0x3479, - 0x1d2: 0x316d, 0x1d3: 0x347e, 0x1d4: 0x31db, 0x1d5: 0x34f1, 0x1d6: 0x31e0, 0x1d7: 0x34f6, - 0x1d8: 0x3186, 0x1d9: 0x3497, 0x1da: 0x319f, 0x1db: 0x34b5, - 0x1de: 0x305a, 0x1df: 0x3366, - 0x1e6: 0x4692, 0x1e7: 0x4723, 0x1e8: 0x46ba, 0x1e9: 0x474b, - 0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x46d8, 0x1ef: 0x4769, - 0x1f0: 0x3958, 0x1f1: 0x3ae7, 0x1f2: 0x3244, 0x1f3: 0x355f, - // Block 0x8, offset 0x200 - 0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132, - 0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932, - 0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932, - 0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d, - 0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d, - 0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d, - 0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d, - 0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d, - 0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101, - 0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d, - 0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132, - // Block 0x9, offset 0x240 - 0x240: 0x49ae, 0x241: 0x49b3, 0x242: 0x9932, 0x243: 0x49b8, 0x244: 0x4a71, 0x245: 0x9936, - 0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132, - 0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132, - 0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132, - 0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135, - 0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132, - 0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132, - 0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132, - 0x274: 0x0170, - 0x27a: 0x42a5, - 0x27e: 0x0037, - // Block 0xa, offset 0x280 - 0x284: 0x425a, 0x285: 0x447b, - 0x286: 0x35e9, 0x287: 0x00ce, 0x288: 0x3607, 0x289: 0x3613, 0x28a: 0x3625, - 0x28c: 0x3643, 0x28e: 0x3655, 0x28f: 0x3673, 0x290: 0x3e08, 0x291: 0xa000, - 0x295: 0xa000, 0x297: 0xa000, - 0x299: 0xa000, - 0x29f: 0xa000, 0x2a1: 0xa000, - 0x2a5: 0xa000, 0x2a9: 0xa000, - 0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x47fe, 0x2ad: 0x3697, 0x2ae: 0x4828, 0x2af: 0x36a9, - 0x2b0: 0x3e70, 0x2b1: 0xa000, 0x2b5: 0xa000, - 0x2b7: 0xa000, 0x2b9: 0xa000, - 0x2bf: 0xa000, - // Block 0xb, offset 0x2c0 - 0x2c1: 0xa000, 0x2c5: 0xa000, - 0x2c9: 0xa000, 0x2ca: 0x4840, 0x2cb: 0x485e, - 0x2cc: 0x36c7, 0x2cd: 0x36df, 0x2ce: 0x4876, 0x2d0: 0x01be, 0x2d1: 0x01d0, - 0x2d2: 0x01ac, 0x2d3: 0x430c, 0x2d4: 0x4312, 0x2d5: 0x01fa, 0x2d6: 0x01e8, - 0x2f0: 0x01d6, 0x2f1: 0x01eb, 0x2f2: 0x01ee, 0x2f4: 0x0188, 0x2f5: 0x01c7, - 0x2f9: 0x01a6, - // Block 0xc, offset 0x300 - 0x300: 0x3721, 0x301: 0x372d, 0x303: 0x371b, - 0x306: 0xa000, 0x307: 0x3709, - 0x30c: 0x375d, 0x30d: 0x3745, 0x30e: 0x376f, 0x310: 0xa000, - 0x313: 0xa000, 0x315: 0xa000, 0x316: 0xa000, 0x317: 0xa000, - 0x318: 0xa000, 0x319: 0x3751, 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: 0x37d5, 0x33a: 0xa000, - 0x33e: 0xa000, - // Block 0xd, offset 0x340 - 0x341: 0x3733, 0x342: 0x37b7, - 0x350: 0x370f, 0x351: 0x3793, - 0x352: 0x3715, 0x353: 0x3799, 0x356: 0x3727, 0x357: 0x37ab, - 0x358: 0xa000, 0x359: 0xa000, 0x35a: 0x3829, 0x35b: 0x382f, 0x35c: 0x3739, 0x35d: 0x37bd, - 0x35e: 0x373f, 0x35f: 0x37c3, 0x362: 0x374b, 0x363: 0x37cf, - 0x364: 0x3757, 0x365: 0x37db, 0x366: 0x3763, 0x367: 0x37e7, 0x368: 0xa000, 0x369: 0xa000, - 0x36a: 0x3835, 0x36b: 0x383b, 0x36c: 0x378d, 0x36d: 0x3811, 0x36e: 0x3769, 0x36f: 0x37ed, - 0x370: 0x3775, 0x371: 0x37f9, 0x372: 0x377b, 0x373: 0x37ff, 0x374: 0x3781, 0x375: 0x3805, - 0x378: 0x3787, 0x379: 0x380b, - // Block 0xe, offset 0x380 - 0x387: 0x1d61, - 0x391: 0x812d, - 0x392: 0x8132, 0x393: 0x8132, 0x394: 0x8132, 0x395: 0x8132, 0x396: 0x812d, 0x397: 0x8132, - 0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x812e, 0x39b: 0x812d, 0x39c: 0x8132, 0x39d: 0x8132, - 0x39e: 0x8132, 0x39f: 0x8132, 0x3a0: 0x8132, 0x3a1: 0x8132, 0x3a2: 0x812d, 0x3a3: 0x812d, - 0x3a4: 0x812d, 0x3a5: 0x812d, 0x3a6: 0x812d, 0x3a7: 0x812d, 0x3a8: 0x8132, 0x3a9: 0x8132, - 0x3aa: 0x812d, 0x3ab: 0x8132, 0x3ac: 0x8132, 0x3ad: 0x812e, 0x3ae: 0x8131, 0x3af: 0x8132, - 0x3b0: 0x8105, 0x3b1: 0x8106, 0x3b2: 0x8107, 0x3b3: 0x8108, 0x3b4: 0x8109, 0x3b5: 0x810a, - 0x3b6: 0x810b, 0x3b7: 0x810c, 0x3b8: 0x810d, 0x3b9: 0x810e, 0x3ba: 0x810e, 0x3bb: 0x810f, - 0x3bc: 0x8110, 0x3bd: 0x8111, 0x3bf: 0x8112, - // Block 0xf, offset 0x3c0 - 0x3c8: 0xa000, 0x3ca: 0xa000, 0x3cb: 0x8116, - 0x3cc: 0x8117, 0x3cd: 0x8118, 0x3ce: 0x8119, 0x3cf: 0x811a, 0x3d0: 0x811b, 0x3d1: 0x811c, - 0x3d2: 0x811d, 0x3d3: 0x9932, 0x3d4: 0x9932, 0x3d5: 0x992d, 0x3d6: 0x812d, 0x3d7: 0x8132, - 0x3d8: 0x8132, 0x3d9: 0x8132, 0x3da: 0x8132, 0x3db: 0x8132, 0x3dc: 0x812d, 0x3dd: 0x8132, - 0x3de: 0x8132, 0x3df: 0x812d, - 0x3f0: 0x811e, 0x3f5: 0x1d84, - 0x3f6: 0x2013, 0x3f7: 0x204f, 0x3f8: 0x204a, - // Block 0x10, offset 0x400 - 0x405: 0xa000, - 0x406: 0x2d26, 0x407: 0xa000, 0x408: 0x2d2e, 0x409: 0xa000, 0x40a: 0x2d36, 0x40b: 0xa000, - 0x40c: 0x2d3e, 0x40d: 0xa000, 0x40e: 0x2d46, 0x411: 0xa000, - 0x412: 0x2d4e, - 0x434: 0x8102, 0x435: 0x9900, - 0x43a: 0xa000, 0x43b: 0x2d56, - 0x43c: 0xa000, 0x43d: 0x2d5e, 0x43e: 0xa000, 0x43f: 0xa000, - // Block 0x11, offset 0x440 - 0x440: 0x0069, 0x441: 0x006b, 0x442: 0x006f, 0x443: 0x0083, 0x444: 0x00f5, 0x445: 0x00f8, - 0x446: 0x0413, 0x447: 0x0085, 0x448: 0x0089, 0x449: 0x008b, 0x44a: 0x0104, 0x44b: 0x0107, - 0x44c: 0x010a, 0x44d: 0x008f, 0x44f: 0x0097, 0x450: 0x009b, 0x451: 0x00e0, - 0x452: 0x009f, 0x453: 0x00fe, 0x454: 0x0417, 0x455: 0x041b, 0x456: 0x00a1, 0x457: 0x00a9, - 0x458: 0x00ab, 0x459: 0x0423, 0x45a: 0x012b, 0x45b: 0x00ad, 0x45c: 0x0427, 0x45d: 0x01be, - 0x45e: 0x01c1, 0x45f: 0x01c4, 0x460: 0x01fa, 0x461: 0x01fd, 0x462: 0x0093, 0x463: 0x00a5, - 0x464: 0x00ab, 0x465: 0x00ad, 0x466: 0x01be, 0x467: 0x01c1, 0x468: 0x01eb, 0x469: 0x01fa, - 0x46a: 0x01fd, - 0x478: 0x020c, - // Block 0x12, offset 0x480 - 0x49b: 0x00fb, 0x49c: 0x0087, 0x49d: 0x0101, - 0x49e: 0x00d4, 0x49f: 0x010a, 0x4a0: 0x008d, 0x4a1: 0x010d, 0x4a2: 0x0110, 0x4a3: 0x0116, - 0x4a4: 0x011c, 0x4a5: 0x011f, 0x4a6: 0x0122, 0x4a7: 0x042b, 0x4a8: 0x016a, 0x4a9: 0x0128, - 0x4aa: 0x042f, 0x4ab: 0x016d, 0x4ac: 0x0131, 0x4ad: 0x012e, 0x4ae: 0x0134, 0x4af: 0x0137, - 0x4b0: 0x013a, 0x4b1: 0x013d, 0x4b2: 0x0140, 0x4b3: 0x014c, 0x4b4: 0x014f, 0x4b5: 0x00ec, - 0x4b6: 0x0152, 0x4b7: 0x0155, 0x4b8: 0x041f, 0x4b9: 0x0158, 0x4ba: 0x015b, 0x4bb: 0x00b5, - 0x4bc: 0x015e, 0x4bd: 0x0161, 0x4be: 0x0164, 0x4bf: 0x01d0, - // Block 0x13, offset 0x4c0 - 0x4c0: 0x2f97, 0x4c1: 0x32a3, 0x4c2: 0x2fa1, 0x4c3: 0x32ad, 0x4c4: 0x2fa6, 0x4c5: 0x32b2, - 0x4c6: 0x2fab, 0x4c7: 0x32b7, 0x4c8: 0x38cc, 0x4c9: 0x3a5b, 0x4ca: 0x2fc4, 0x4cb: 0x32d0, - 0x4cc: 0x2fce, 0x4cd: 0x32da, 0x4ce: 0x2fdd, 0x4cf: 0x32e9, 0x4d0: 0x2fd3, 0x4d1: 0x32df, - 0x4d2: 0x2fd8, 0x4d3: 0x32e4, 0x4d4: 0x38ef, 0x4d5: 0x3a7e, 0x4d6: 0x38f6, 0x4d7: 0x3a85, - 0x4d8: 0x3019, 0x4d9: 0x3325, 0x4da: 0x301e, 0x4db: 0x332a, 0x4dc: 0x3904, 0x4dd: 0x3a93, - 0x4de: 0x3023, 0x4df: 0x332f, 0x4e0: 0x3032, 0x4e1: 0x333e, 0x4e2: 0x3050, 0x4e3: 0x335c, - 0x4e4: 0x305f, 0x4e5: 0x336b, 0x4e6: 0x3055, 0x4e7: 0x3361, 0x4e8: 0x3064, 0x4e9: 0x3370, - 0x4ea: 0x3069, 0x4eb: 0x3375, 0x4ec: 0x30af, 0x4ed: 0x33bb, 0x4ee: 0x390b, 0x4ef: 0x3a9a, - 0x4f0: 0x30b9, 0x4f1: 0x33ca, 0x4f2: 0x30c3, 0x4f3: 0x33d4, 0x4f4: 0x30cd, 0x4f5: 0x33de, - 0x4f6: 0x46c4, 0x4f7: 0x4755, 0x4f8: 0x3912, 0x4f9: 0x3aa1, 0x4fa: 0x30e6, 0x4fb: 0x33f7, - 0x4fc: 0x30e1, 0x4fd: 0x33f2, 0x4fe: 0x30eb, 0x4ff: 0x33fc, - // Block 0x14, offset 0x500 - 0x500: 0x30f0, 0x501: 0x3401, 0x502: 0x30f5, 0x503: 0x3406, 0x504: 0x3109, 0x505: 0x341a, - 0x506: 0x3113, 0x507: 0x3424, 0x508: 0x3122, 0x509: 0x3433, 0x50a: 0x311d, 0x50b: 0x342e, - 0x50c: 0x3935, 0x50d: 0x3ac4, 0x50e: 0x3943, 0x50f: 0x3ad2, 0x510: 0x394a, 0x511: 0x3ad9, - 0x512: 0x3951, 0x513: 0x3ae0, 0x514: 0x314f, 0x515: 0x3460, 0x516: 0x3154, 0x517: 0x3465, - 0x518: 0x315e, 0x519: 0x346f, 0x51a: 0x46f1, 0x51b: 0x4782, 0x51c: 0x3997, 0x51d: 0x3b26, - 0x51e: 0x3177, 0x51f: 0x3488, 0x520: 0x3181, 0x521: 0x3492, 0x522: 0x4700, 0x523: 0x4791, - 0x524: 0x399e, 0x525: 0x3b2d, 0x526: 0x39a5, 0x527: 0x3b34, 0x528: 0x39ac, 0x529: 0x3b3b, - 0x52a: 0x3190, 0x52b: 0x34a1, 0x52c: 0x319a, 0x52d: 0x34b0, 0x52e: 0x31ae, 0x52f: 0x34c4, - 0x530: 0x31a9, 0x531: 0x34bf, 0x532: 0x31ea, 0x533: 0x3500, 0x534: 0x31f9, 0x535: 0x350f, - 0x536: 0x31f4, 0x537: 0x350a, 0x538: 0x39b3, 0x539: 0x3b42, 0x53a: 0x39ba, 0x53b: 0x3b49, - 0x53c: 0x31fe, 0x53d: 0x3514, 0x53e: 0x3203, 0x53f: 0x3519, - // Block 0x15, offset 0x540 - 0x540: 0x3208, 0x541: 0x351e, 0x542: 0x320d, 0x543: 0x3523, 0x544: 0x321c, 0x545: 0x3532, - 0x546: 0x3217, 0x547: 0x352d, 0x548: 0x3221, 0x549: 0x353c, 0x54a: 0x3226, 0x54b: 0x3541, - 0x54c: 0x322b, 0x54d: 0x3546, 0x54e: 0x3249, 0x54f: 0x3564, 0x550: 0x3262, 0x551: 0x3582, - 0x552: 0x3271, 0x553: 0x3591, 0x554: 0x3276, 0x555: 0x3596, 0x556: 0x337a, 0x557: 0x34a6, - 0x558: 0x3537, 0x559: 0x3573, 0x55a: 0x1be0, 0x55b: 0x42d7, - 0x560: 0x46a1, 0x561: 0x4732, 0x562: 0x2f83, 0x563: 0x328f, - 0x564: 0x3878, 0x565: 0x3a07, 0x566: 0x3871, 0x567: 0x3a00, 0x568: 0x3886, 0x569: 0x3a15, - 0x56a: 0x387f, 0x56b: 0x3a0e, 0x56c: 0x38be, 0x56d: 0x3a4d, 0x56e: 0x3894, 0x56f: 0x3a23, - 0x570: 0x388d, 0x571: 0x3a1c, 0x572: 0x38a2, 0x573: 0x3a31, 0x574: 0x389b, 0x575: 0x3a2a, - 0x576: 0x38c5, 0x577: 0x3a54, 0x578: 0x46b5, 0x579: 0x4746, 0x57a: 0x3000, 0x57b: 0x330c, - 0x57c: 0x2fec, 0x57d: 0x32f8, 0x57e: 0x38da, 0x57f: 0x3a69, - // Block 0x16, offset 0x580 - 0x580: 0x38d3, 0x581: 0x3a62, 0x582: 0x38e8, 0x583: 0x3a77, 0x584: 0x38e1, 0x585: 0x3a70, - 0x586: 0x38fd, 0x587: 0x3a8c, 0x588: 0x3091, 0x589: 0x339d, 0x58a: 0x30a5, 0x58b: 0x33b1, - 0x58c: 0x46e7, 0x58d: 0x4778, 0x58e: 0x3136, 0x58f: 0x3447, 0x590: 0x3920, 0x591: 0x3aaf, - 0x592: 0x3919, 0x593: 0x3aa8, 0x594: 0x392e, 0x595: 0x3abd, 0x596: 0x3927, 0x597: 0x3ab6, - 0x598: 0x3989, 0x599: 0x3b18, 0x59a: 0x396d, 0x59b: 0x3afc, 0x59c: 0x3966, 0x59d: 0x3af5, - 0x59e: 0x397b, 0x59f: 0x3b0a, 0x5a0: 0x3974, 0x5a1: 0x3b03, 0x5a2: 0x3982, 0x5a3: 0x3b11, - 0x5a4: 0x31e5, 0x5a5: 0x34fb, 0x5a6: 0x31c7, 0x5a7: 0x34dd, 0x5a8: 0x39e4, 0x5a9: 0x3b73, - 0x5aa: 0x39dd, 0x5ab: 0x3b6c, 0x5ac: 0x39f2, 0x5ad: 0x3b81, 0x5ae: 0x39eb, 0x5af: 0x3b7a, - 0x5b0: 0x39f9, 0x5b1: 0x3b88, 0x5b2: 0x3230, 0x5b3: 0x354b, 0x5b4: 0x3258, 0x5b5: 0x3578, - 0x5b6: 0x3253, 0x5b7: 0x356e, 0x5b8: 0x323f, 0x5b9: 0x355a, - // Block 0x17, offset 0x5c0 - 0x5c0: 0x4804, 0x5c1: 0x480a, 0x5c2: 0x491e, 0x5c3: 0x4936, 0x5c4: 0x4926, 0x5c5: 0x493e, - 0x5c6: 0x492e, 0x5c7: 0x4946, 0x5c8: 0x47aa, 0x5c9: 0x47b0, 0x5ca: 0x488e, 0x5cb: 0x48a6, - 0x5cc: 0x4896, 0x5cd: 0x48ae, 0x5ce: 0x489e, 0x5cf: 0x48b6, 0x5d0: 0x4816, 0x5d1: 0x481c, - 0x5d2: 0x3db8, 0x5d3: 0x3dc8, 0x5d4: 0x3dc0, 0x5d5: 0x3dd0, - 0x5d8: 0x47b6, 0x5d9: 0x47bc, 0x5da: 0x3ce8, 0x5db: 0x3cf8, 0x5dc: 0x3cf0, 0x5dd: 0x3d00, - 0x5e0: 0x482e, 0x5e1: 0x4834, 0x5e2: 0x494e, 0x5e3: 0x4966, - 0x5e4: 0x4956, 0x5e5: 0x496e, 0x5e6: 0x495e, 0x5e7: 0x4976, 0x5e8: 0x47c2, 0x5e9: 0x47c8, - 0x5ea: 0x48be, 0x5eb: 0x48d6, 0x5ec: 0x48c6, 0x5ed: 0x48de, 0x5ee: 0x48ce, 0x5ef: 0x48e6, - 0x5f0: 0x4846, 0x5f1: 0x484c, 0x5f2: 0x3e18, 0x5f3: 0x3e30, 0x5f4: 0x3e20, 0x5f5: 0x3e38, - 0x5f6: 0x3e28, 0x5f7: 0x3e40, 0x5f8: 0x47ce, 0x5f9: 0x47d4, 0x5fa: 0x3d18, 0x5fb: 0x3d30, - 0x5fc: 0x3d20, 0x5fd: 0x3d38, 0x5fe: 0x3d28, 0x5ff: 0x3d40, - // Block 0x18, offset 0x600 - 0x600: 0x4852, 0x601: 0x4858, 0x602: 0x3e48, 0x603: 0x3e58, 0x604: 0x3e50, 0x605: 0x3e60, - 0x608: 0x47da, 0x609: 0x47e0, 0x60a: 0x3d48, 0x60b: 0x3d58, - 0x60c: 0x3d50, 0x60d: 0x3d60, 0x610: 0x4864, 0x611: 0x486a, - 0x612: 0x3e80, 0x613: 0x3e98, 0x614: 0x3e88, 0x615: 0x3ea0, 0x616: 0x3e90, 0x617: 0x3ea8, - 0x619: 0x47e6, 0x61b: 0x3d68, 0x61d: 0x3d70, - 0x61f: 0x3d78, 0x620: 0x487c, 0x621: 0x4882, 0x622: 0x497e, 0x623: 0x4996, - 0x624: 0x4986, 0x625: 0x499e, 0x626: 0x498e, 0x627: 0x49a6, 0x628: 0x47ec, 0x629: 0x47f2, - 0x62a: 0x48ee, 0x62b: 0x4906, 0x62c: 0x48f6, 0x62d: 0x490e, 0x62e: 0x48fe, 0x62f: 0x4916, - 0x630: 0x47f8, 0x631: 0x431e, 0x632: 0x3691, 0x633: 0x4324, 0x634: 0x4822, 0x635: 0x432a, - 0x636: 0x36a3, 0x637: 0x4330, 0x638: 0x36c1, 0x639: 0x4336, 0x63a: 0x36d9, 0x63b: 0x433c, - 0x63c: 0x4870, 0x63d: 0x4342, - // Block 0x19, offset 0x640 - 0x640: 0x3da0, 0x641: 0x3da8, 0x642: 0x4184, 0x643: 0x41a2, 0x644: 0x418e, 0x645: 0x41ac, - 0x646: 0x4198, 0x647: 0x41b6, 0x648: 0x3cd8, 0x649: 0x3ce0, 0x64a: 0x40d0, 0x64b: 0x40ee, - 0x64c: 0x40da, 0x64d: 0x40f8, 0x64e: 0x40e4, 0x64f: 0x4102, 0x650: 0x3de8, 0x651: 0x3df0, - 0x652: 0x41c0, 0x653: 0x41de, 0x654: 0x41ca, 0x655: 0x41e8, 0x656: 0x41d4, 0x657: 0x41f2, - 0x658: 0x3d08, 0x659: 0x3d10, 0x65a: 0x410c, 0x65b: 0x412a, 0x65c: 0x4116, 0x65d: 0x4134, - 0x65e: 0x4120, 0x65f: 0x413e, 0x660: 0x3ec0, 0x661: 0x3ec8, 0x662: 0x41fc, 0x663: 0x421a, - 0x664: 0x4206, 0x665: 0x4224, 0x666: 0x4210, 0x667: 0x422e, 0x668: 0x3d80, 0x669: 0x3d88, - 0x66a: 0x4148, 0x66b: 0x4166, 0x66c: 0x4152, 0x66d: 0x4170, 0x66e: 0x415c, 0x66f: 0x417a, - 0x670: 0x3685, 0x671: 0x367f, 0x672: 0x3d90, 0x673: 0x368b, 0x674: 0x3d98, - 0x676: 0x4810, 0x677: 0x3db0, 0x678: 0x35f5, 0x679: 0x35ef, 0x67a: 0x35e3, 0x67b: 0x42ee, - 0x67c: 0x35fb, 0x67d: 0x4287, 0x67e: 0x01d3, 0x67f: 0x4287, - // Block 0x1a, offset 0x680 - 0x680: 0x42a0, 0x681: 0x4482, 0x682: 0x3dd8, 0x683: 0x369d, 0x684: 0x3de0, - 0x686: 0x483a, 0x687: 0x3df8, 0x688: 0x3601, 0x689: 0x42f4, 0x68a: 0x360d, 0x68b: 0x42fa, - 0x68c: 0x3619, 0x68d: 0x4489, 0x68e: 0x4490, 0x68f: 0x4497, 0x690: 0x36b5, 0x691: 0x36af, - 0x692: 0x3e00, 0x693: 0x44e4, 0x696: 0x36bb, 0x697: 0x3e10, - 0x698: 0x3631, 0x699: 0x362b, 0x69a: 0x361f, 0x69b: 0x4300, 0x69d: 0x449e, - 0x69e: 0x44a5, 0x69f: 0x44ac, 0x6a0: 0x36eb, 0x6a1: 0x36e5, 0x6a2: 0x3e68, 0x6a3: 0x44ec, - 0x6a4: 0x36cd, 0x6a5: 0x36d3, 0x6a6: 0x36f1, 0x6a7: 0x3e78, 0x6a8: 0x3661, 0x6a9: 0x365b, - 0x6aa: 0x364f, 0x6ab: 0x430c, 0x6ac: 0x3649, 0x6ad: 0x4474, 0x6ae: 0x447b, 0x6af: 0x0081, - 0x6b2: 0x3eb0, 0x6b3: 0x36f7, 0x6b4: 0x3eb8, - 0x6b6: 0x4888, 0x6b7: 0x3ed0, 0x6b8: 0x363d, 0x6b9: 0x4306, 0x6ba: 0x366d, 0x6bb: 0x4318, - 0x6bc: 0x3679, 0x6bd: 0x425a, 0x6be: 0x428c, - // Block 0x1b, offset 0x6c0 - 0x6c0: 0x1bd8, 0x6c1: 0x1bdc, 0x6c2: 0x0047, 0x6c3: 0x1c54, 0x6c5: 0x1be8, - 0x6c6: 0x1bec, 0x6c7: 0x00e9, 0x6c9: 0x1c58, 0x6ca: 0x008f, 0x6cb: 0x0051, - 0x6cc: 0x0051, 0x6cd: 0x0051, 0x6ce: 0x0091, 0x6cf: 0x00da, 0x6d0: 0x0053, 0x6d1: 0x0053, - 0x6d2: 0x0059, 0x6d3: 0x0099, 0x6d5: 0x005d, 0x6d6: 0x198d, - 0x6d9: 0x0061, 0x6da: 0x0063, 0x6db: 0x0065, 0x6dc: 0x0065, 0x6dd: 0x0065, - 0x6e0: 0x199f, 0x6e1: 0x1bc8, 0x6e2: 0x19a8, - 0x6e4: 0x0075, 0x6e6: 0x01b8, 0x6e8: 0x0075, - 0x6ea: 0x0057, 0x6eb: 0x42d2, 0x6ec: 0x0045, 0x6ed: 0x0047, 0x6ef: 0x008b, - 0x6f0: 0x004b, 0x6f1: 0x004d, 0x6f3: 0x005b, 0x6f4: 0x009f, 0x6f5: 0x0215, - 0x6f6: 0x0218, 0x6f7: 0x021b, 0x6f8: 0x021e, 0x6f9: 0x0093, 0x6fb: 0x1b98, - 0x6fc: 0x01e8, 0x6fd: 0x01c1, 0x6fe: 0x0179, 0x6ff: 0x01a0, - // Block 0x1c, offset 0x700 - 0x700: 0x0463, 0x705: 0x0049, - 0x706: 0x0089, 0x707: 0x008b, 0x708: 0x0093, 0x709: 0x0095, - 0x710: 0x222e, 0x711: 0x223a, - 0x712: 0x22ee, 0x713: 0x2216, 0x714: 0x229a, 0x715: 0x2222, 0x716: 0x22a0, 0x717: 0x22b8, - 0x718: 0x22c4, 0x719: 0x2228, 0x71a: 0x22ca, 0x71b: 0x2234, 0x71c: 0x22be, 0x71d: 0x22d0, - 0x71e: 0x22d6, 0x71f: 0x1cbc, 0x720: 0x0053, 0x721: 0x195a, 0x722: 0x1ba4, 0x723: 0x1963, - 0x724: 0x006d, 0x725: 0x19ab, 0x726: 0x1bd0, 0x727: 0x1d48, 0x728: 0x1966, 0x729: 0x0071, - 0x72a: 0x19b7, 0x72b: 0x1bd4, 0x72c: 0x0059, 0x72d: 0x0047, 0x72e: 0x0049, 0x72f: 0x005b, - 0x730: 0x0093, 0x731: 0x19e4, 0x732: 0x1c18, 0x733: 0x19ed, 0x734: 0x00ad, 0x735: 0x1a62, - 0x736: 0x1c4c, 0x737: 0x1d5c, 0x738: 0x19f0, 0x739: 0x00b1, 0x73a: 0x1a65, 0x73b: 0x1c50, - 0x73c: 0x0099, 0x73d: 0x0087, 0x73e: 0x0089, 0x73f: 0x009b, - // Block 0x1d, offset 0x740 - 0x741: 0x3c06, 0x743: 0xa000, 0x744: 0x3c0d, 0x745: 0xa000, - 0x747: 0x3c14, 0x748: 0xa000, 0x749: 0x3c1b, - 0x74d: 0xa000, - 0x760: 0x2f65, 0x761: 0xa000, 0x762: 0x3c29, - 0x764: 0xa000, 0x765: 0xa000, - 0x76d: 0x3c22, 0x76e: 0x2f60, 0x76f: 0x2f6a, - 0x770: 0x3c30, 0x771: 0x3c37, 0x772: 0xa000, 0x773: 0xa000, 0x774: 0x3c3e, 0x775: 0x3c45, - 0x776: 0xa000, 0x777: 0xa000, 0x778: 0x3c4c, 0x779: 0x3c53, 0x77a: 0xa000, 0x77b: 0xa000, - 0x77c: 0xa000, 0x77d: 0xa000, - // Block 0x1e, offset 0x780 - 0x780: 0x3c5a, 0x781: 0x3c61, 0x782: 0xa000, 0x783: 0xa000, 0x784: 0x3c76, 0x785: 0x3c7d, - 0x786: 0xa000, 0x787: 0xa000, 0x788: 0x3c84, 0x789: 0x3c8b, - 0x791: 0xa000, - 0x792: 0xa000, - 0x7a2: 0xa000, - 0x7a8: 0xa000, 0x7a9: 0xa000, - 0x7ab: 0xa000, 0x7ac: 0x3ca0, 0x7ad: 0x3ca7, 0x7ae: 0x3cae, 0x7af: 0x3cb5, - 0x7b2: 0xa000, 0x7b3: 0xa000, 0x7b4: 0xa000, 0x7b5: 0xa000, - // Block 0x1f, offset 0x7c0 - 0x7e0: 0x0023, 0x7e1: 0x0025, 0x7e2: 0x0027, 0x7e3: 0x0029, - 0x7e4: 0x002b, 0x7e5: 0x002d, 0x7e6: 0x002f, 0x7e7: 0x0031, 0x7e8: 0x0033, 0x7e9: 0x1882, - 0x7ea: 0x1885, 0x7eb: 0x1888, 0x7ec: 0x188b, 0x7ed: 0x188e, 0x7ee: 0x1891, 0x7ef: 0x1894, - 0x7f0: 0x1897, 0x7f1: 0x189a, 0x7f2: 0x189d, 0x7f3: 0x18a6, 0x7f4: 0x1a68, 0x7f5: 0x1a6c, - 0x7f6: 0x1a70, 0x7f7: 0x1a74, 0x7f8: 0x1a78, 0x7f9: 0x1a7c, 0x7fa: 0x1a80, 0x7fb: 0x1a84, - 0x7fc: 0x1a88, 0x7fd: 0x1c80, 0x7fe: 0x1c85, 0x7ff: 0x1c8a, - // Block 0x20, offset 0x800 - 0x800: 0x1c8f, 0x801: 0x1c94, 0x802: 0x1c99, 0x803: 0x1c9e, 0x804: 0x1ca3, 0x805: 0x1ca8, - 0x806: 0x1cad, 0x807: 0x1cb2, 0x808: 0x187f, 0x809: 0x18a3, 0x80a: 0x18c7, 0x80b: 0x18eb, - 0x80c: 0x190f, 0x80d: 0x1918, 0x80e: 0x191e, 0x80f: 0x1924, 0x810: 0x192a, 0x811: 0x1b60, - 0x812: 0x1b64, 0x813: 0x1b68, 0x814: 0x1b6c, 0x815: 0x1b70, 0x816: 0x1b74, 0x817: 0x1b78, - 0x818: 0x1b7c, 0x819: 0x1b80, 0x81a: 0x1b84, 0x81b: 0x1b88, 0x81c: 0x1af4, 0x81d: 0x1af8, - 0x81e: 0x1afc, 0x81f: 0x1b00, 0x820: 0x1b04, 0x821: 0x1b08, 0x822: 0x1b0c, 0x823: 0x1b10, - 0x824: 0x1b14, 0x825: 0x1b18, 0x826: 0x1b1c, 0x827: 0x1b20, 0x828: 0x1b24, 0x829: 0x1b28, - 0x82a: 0x1b2c, 0x82b: 0x1b30, 0x82c: 0x1b34, 0x82d: 0x1b38, 0x82e: 0x1b3c, 0x82f: 0x1b40, - 0x830: 0x1b44, 0x831: 0x1b48, 0x832: 0x1b4c, 0x833: 0x1b50, 0x834: 0x1b54, 0x835: 0x1b58, - 0x836: 0x0043, 0x837: 0x0045, 0x838: 0x0047, 0x839: 0x0049, 0x83a: 0x004b, 0x83b: 0x004d, - 0x83c: 0x004f, 0x83d: 0x0051, 0x83e: 0x0053, 0x83f: 0x0055, - // Block 0x21, offset 0x840 - 0x840: 0x06bf, 0x841: 0x06e3, 0x842: 0x06ef, 0x843: 0x06ff, 0x844: 0x0707, 0x845: 0x0713, - 0x846: 0x071b, 0x847: 0x0723, 0x848: 0x072f, 0x849: 0x0783, 0x84a: 0x079b, 0x84b: 0x07ab, - 0x84c: 0x07bb, 0x84d: 0x07cb, 0x84e: 0x07db, 0x84f: 0x07fb, 0x850: 0x07ff, 0x851: 0x0803, - 0x852: 0x0837, 0x853: 0x085f, 0x854: 0x086f, 0x855: 0x0877, 0x856: 0x087b, 0x857: 0x0887, - 0x858: 0x08a3, 0x859: 0x08a7, 0x85a: 0x08bf, 0x85b: 0x08c3, 0x85c: 0x08cb, 0x85d: 0x08db, - 0x85e: 0x0977, 0x85f: 0x098b, 0x860: 0x09cb, 0x861: 0x09df, 0x862: 0x09e7, 0x863: 0x09eb, - 0x864: 0x09fb, 0x865: 0x0a17, 0x866: 0x0a43, 0x867: 0x0a4f, 0x868: 0x0a6f, 0x869: 0x0a7b, - 0x86a: 0x0a7f, 0x86b: 0x0a83, 0x86c: 0x0a9b, 0x86d: 0x0a9f, 0x86e: 0x0acb, 0x86f: 0x0ad7, - 0x870: 0x0adf, 0x871: 0x0ae7, 0x872: 0x0af7, 0x873: 0x0aff, 0x874: 0x0b07, 0x875: 0x0b33, - 0x876: 0x0b37, 0x877: 0x0b3f, 0x878: 0x0b43, 0x879: 0x0b4b, 0x87a: 0x0b53, 0x87b: 0x0b63, - 0x87c: 0x0b7f, 0x87d: 0x0bf7, 0x87e: 0x0c0b, 0x87f: 0x0c0f, - // Block 0x22, offset 0x880 - 0x880: 0x0c8f, 0x881: 0x0c93, 0x882: 0x0ca7, 0x883: 0x0cab, 0x884: 0x0cb3, 0x885: 0x0cbb, - 0x886: 0x0cc3, 0x887: 0x0ccf, 0x888: 0x0cf7, 0x889: 0x0d07, 0x88a: 0x0d1b, 0x88b: 0x0d8b, - 0x88c: 0x0d97, 0x88d: 0x0da7, 0x88e: 0x0db3, 0x88f: 0x0dbf, 0x890: 0x0dc7, 0x891: 0x0dcb, - 0x892: 0x0dcf, 0x893: 0x0dd3, 0x894: 0x0dd7, 0x895: 0x0e8f, 0x896: 0x0ed7, 0x897: 0x0ee3, - 0x898: 0x0ee7, 0x899: 0x0eeb, 0x89a: 0x0eef, 0x89b: 0x0ef7, 0x89c: 0x0efb, 0x89d: 0x0f0f, - 0x89e: 0x0f2b, 0x89f: 0x0f33, 0x8a0: 0x0f73, 0x8a1: 0x0f77, 0x8a2: 0x0f7f, 0x8a3: 0x0f83, - 0x8a4: 0x0f8b, 0x8a5: 0x0f8f, 0x8a6: 0x0fb3, 0x8a7: 0x0fb7, 0x8a8: 0x0fd3, 0x8a9: 0x0fd7, - 0x8aa: 0x0fdb, 0x8ab: 0x0fdf, 0x8ac: 0x0ff3, 0x8ad: 0x1017, 0x8ae: 0x101b, 0x8af: 0x101f, - 0x8b0: 0x1043, 0x8b1: 0x1083, 0x8b2: 0x1087, 0x8b3: 0x10a7, 0x8b4: 0x10b7, 0x8b5: 0x10bf, - 0x8b6: 0x10df, 0x8b7: 0x1103, 0x8b8: 0x1147, 0x8b9: 0x114f, 0x8ba: 0x1163, 0x8bb: 0x116f, - 0x8bc: 0x1177, 0x8bd: 0x117f, 0x8be: 0x1183, 0x8bf: 0x1187, - // Block 0x23, offset 0x8c0 - 0x8c0: 0x119f, 0x8c1: 0x11a3, 0x8c2: 0x11bf, 0x8c3: 0x11c7, 0x8c4: 0x11cf, 0x8c5: 0x11d3, - 0x8c6: 0x11df, 0x8c7: 0x11e7, 0x8c8: 0x11eb, 0x8c9: 0x11ef, 0x8ca: 0x11f7, 0x8cb: 0x11fb, - 0x8cc: 0x129b, 0x8cd: 0x12af, 0x8ce: 0x12e3, 0x8cf: 0x12e7, 0x8d0: 0x12ef, 0x8d1: 0x131b, - 0x8d2: 0x1323, 0x8d3: 0x132b, 0x8d4: 0x1333, 0x8d5: 0x136f, 0x8d6: 0x1373, 0x8d7: 0x137b, - 0x8d8: 0x137f, 0x8d9: 0x1383, 0x8da: 0x13af, 0x8db: 0x13b3, 0x8dc: 0x13bb, 0x8dd: 0x13cf, - 0x8de: 0x13d3, 0x8df: 0x13ef, 0x8e0: 0x13f7, 0x8e1: 0x13fb, 0x8e2: 0x141f, 0x8e3: 0x143f, - 0x8e4: 0x1453, 0x8e5: 0x1457, 0x8e6: 0x145f, 0x8e7: 0x148b, 0x8e8: 0x148f, 0x8e9: 0x149f, - 0x8ea: 0x14c3, 0x8eb: 0x14cf, 0x8ec: 0x14df, 0x8ed: 0x14f7, 0x8ee: 0x14ff, 0x8ef: 0x1503, - 0x8f0: 0x1507, 0x8f1: 0x150b, 0x8f2: 0x1517, 0x8f3: 0x151b, 0x8f4: 0x1523, 0x8f5: 0x153f, - 0x8f6: 0x1543, 0x8f7: 0x1547, 0x8f8: 0x155f, 0x8f9: 0x1563, 0x8fa: 0x156b, 0x8fb: 0x157f, - 0x8fc: 0x1583, 0x8fd: 0x1587, 0x8fe: 0x158f, 0x8ff: 0x1593, - // Block 0x24, offset 0x900 - 0x906: 0xa000, 0x90b: 0xa000, - 0x90c: 0x3f08, 0x90d: 0xa000, 0x90e: 0x3f10, 0x90f: 0xa000, 0x910: 0x3f18, 0x911: 0xa000, - 0x912: 0x3f20, 0x913: 0xa000, 0x914: 0x3f28, 0x915: 0xa000, 0x916: 0x3f30, 0x917: 0xa000, - 0x918: 0x3f38, 0x919: 0xa000, 0x91a: 0x3f40, 0x91b: 0xa000, 0x91c: 0x3f48, 0x91d: 0xa000, - 0x91e: 0x3f50, 0x91f: 0xa000, 0x920: 0x3f58, 0x921: 0xa000, 0x922: 0x3f60, - 0x924: 0xa000, 0x925: 0x3f68, 0x926: 0xa000, 0x927: 0x3f70, 0x928: 0xa000, 0x929: 0x3f78, - 0x92f: 0xa000, - 0x930: 0x3f80, 0x931: 0x3f88, 0x932: 0xa000, 0x933: 0x3f90, 0x934: 0x3f98, 0x935: 0xa000, - 0x936: 0x3fa0, 0x937: 0x3fa8, 0x938: 0xa000, 0x939: 0x3fb0, 0x93a: 0x3fb8, 0x93b: 0xa000, - 0x93c: 0x3fc0, 0x93d: 0x3fc8, - // Block 0x25, offset 0x940 - 0x954: 0x3f00, - 0x959: 0x9903, 0x95a: 0x9903, 0x95b: 0x42dc, 0x95c: 0x42e2, 0x95d: 0xa000, - 0x95e: 0x3fd0, 0x95f: 0x26b4, - 0x966: 0xa000, - 0x96b: 0xa000, 0x96c: 0x3fe0, 0x96d: 0xa000, 0x96e: 0x3fe8, 0x96f: 0xa000, - 0x970: 0x3ff0, 0x971: 0xa000, 0x972: 0x3ff8, 0x973: 0xa000, 0x974: 0x4000, 0x975: 0xa000, - 0x976: 0x4008, 0x977: 0xa000, 0x978: 0x4010, 0x979: 0xa000, 0x97a: 0x4018, 0x97b: 0xa000, - 0x97c: 0x4020, 0x97d: 0xa000, 0x97e: 0x4028, 0x97f: 0xa000, - // Block 0x26, offset 0x980 - 0x980: 0x4030, 0x981: 0xa000, 0x982: 0x4038, 0x984: 0xa000, 0x985: 0x4040, - 0x986: 0xa000, 0x987: 0x4048, 0x988: 0xa000, 0x989: 0x4050, - 0x98f: 0xa000, 0x990: 0x4058, 0x991: 0x4060, - 0x992: 0xa000, 0x993: 0x4068, 0x994: 0x4070, 0x995: 0xa000, 0x996: 0x4078, 0x997: 0x4080, - 0x998: 0xa000, 0x999: 0x4088, 0x99a: 0x4090, 0x99b: 0xa000, 0x99c: 0x4098, 0x99d: 0x40a0, - 0x9af: 0xa000, - 0x9b0: 0xa000, 0x9b1: 0xa000, 0x9b2: 0xa000, 0x9b4: 0x3fd8, - 0x9b7: 0x40a8, 0x9b8: 0x40b0, 0x9b9: 0x40b8, 0x9ba: 0x40c0, - 0x9bd: 0xa000, 0x9be: 0x40c8, 0x9bf: 0x26c9, - // Block 0x27, offset 0x9c0 - 0x9c0: 0x0367, 0x9c1: 0x032b, 0x9c2: 0x032f, 0x9c3: 0x0333, 0x9c4: 0x037b, 0x9c5: 0x0337, - 0x9c6: 0x033b, 0x9c7: 0x033f, 0x9c8: 0x0343, 0x9c9: 0x0347, 0x9ca: 0x034b, 0x9cb: 0x034f, - 0x9cc: 0x0353, 0x9cd: 0x0357, 0x9ce: 0x035b, 0x9cf: 0x49bd, 0x9d0: 0x49c3, 0x9d1: 0x49c9, - 0x9d2: 0x49cf, 0x9d3: 0x49d5, 0x9d4: 0x49db, 0x9d5: 0x49e1, 0x9d6: 0x49e7, 0x9d7: 0x49ed, - 0x9d8: 0x49f3, 0x9d9: 0x49f9, 0x9da: 0x49ff, 0x9db: 0x4a05, 0x9dc: 0x4a0b, 0x9dd: 0x4a11, - 0x9de: 0x4a17, 0x9df: 0x4a1d, 0x9e0: 0x4a23, 0x9e1: 0x4a29, 0x9e2: 0x4a2f, 0x9e3: 0x4a35, - 0x9e4: 0x03c3, 0x9e5: 0x035f, 0x9e6: 0x0363, 0x9e7: 0x03e7, 0x9e8: 0x03eb, 0x9e9: 0x03ef, - 0x9ea: 0x03f3, 0x9eb: 0x03f7, 0x9ec: 0x03fb, 0x9ed: 0x03ff, 0x9ee: 0x036b, 0x9ef: 0x0403, - 0x9f0: 0x0407, 0x9f1: 0x036f, 0x9f2: 0x0373, 0x9f3: 0x0377, 0x9f4: 0x037f, 0x9f5: 0x0383, - 0x9f6: 0x0387, 0x9f7: 0x038b, 0x9f8: 0x038f, 0x9f9: 0x0393, 0x9fa: 0x0397, 0x9fb: 0x039b, - 0x9fc: 0x039f, 0x9fd: 0x03a3, 0x9fe: 0x03a7, 0x9ff: 0x03ab, - // Block 0x28, offset 0xa00 - 0xa00: 0x03af, 0xa01: 0x03b3, 0xa02: 0x040b, 0xa03: 0x040f, 0xa04: 0x03b7, 0xa05: 0x03bb, - 0xa06: 0x03bf, 0xa07: 0x03c7, 0xa08: 0x03cb, 0xa09: 0x03cf, 0xa0a: 0x03d3, 0xa0b: 0x03d7, - 0xa0c: 0x03db, 0xa0d: 0x03df, 0xa0e: 0x03e3, - 0xa12: 0x06bf, 0xa13: 0x071b, 0xa14: 0x06cb, 0xa15: 0x097b, 0xa16: 0x06cf, 0xa17: 0x06e7, - 0xa18: 0x06d3, 0xa19: 0x0f93, 0xa1a: 0x0707, 0xa1b: 0x06db, 0xa1c: 0x06c3, 0xa1d: 0x09ff, - 0xa1e: 0x098f, 0xa1f: 0x072f, - // Block 0x29, offset 0xa40 - 0xa40: 0x2054, 0xa41: 0x205a, 0xa42: 0x2060, 0xa43: 0x2066, 0xa44: 0x206c, 0xa45: 0x2072, - 0xa46: 0x2078, 0xa47: 0x207e, 0xa48: 0x2084, 0xa49: 0x208a, 0xa4a: 0x2090, 0xa4b: 0x2096, - 0xa4c: 0x209c, 0xa4d: 0x20a2, 0xa4e: 0x2726, 0xa4f: 0x272f, 0xa50: 0x2738, 0xa51: 0x2741, - 0xa52: 0x274a, 0xa53: 0x2753, 0xa54: 0x275c, 0xa55: 0x2765, 0xa56: 0x276e, 0xa57: 0x2780, - 0xa58: 0x2789, 0xa59: 0x2792, 0xa5a: 0x279b, 0xa5b: 0x27a4, 0xa5c: 0x2777, 0xa5d: 0x2bac, - 0xa5e: 0x2aed, 0xa60: 0x20a8, 0xa61: 0x20c0, 0xa62: 0x20b4, 0xa63: 0x2108, - 0xa64: 0x20c6, 0xa65: 0x20e4, 0xa66: 0x20ae, 0xa67: 0x20de, 0xa68: 0x20ba, 0xa69: 0x20f0, - 0xa6a: 0x2120, 0xa6b: 0x213e, 0xa6c: 0x2138, 0xa6d: 0x212c, 0xa6e: 0x217a, 0xa6f: 0x210e, - 0xa70: 0x211a, 0xa71: 0x2132, 0xa72: 0x2126, 0xa73: 0x2150, 0xa74: 0x20fc, 0xa75: 0x2144, - 0xa76: 0x216e, 0xa77: 0x2156, 0xa78: 0x20ea, 0xa79: 0x20cc, 0xa7a: 0x2102, 0xa7b: 0x2114, - 0xa7c: 0x214a, 0xa7d: 0x20d2, 0xa7e: 0x2174, 0xa7f: 0x20f6, - // Block 0x2a, offset 0xa80 - 0xa80: 0x215c, 0xa81: 0x20d8, 0xa82: 0x2162, 0xa83: 0x2168, 0xa84: 0x092f, 0xa85: 0x0b03, - 0xa86: 0x0ca7, 0xa87: 0x10c7, - 0xa90: 0x1bc4, 0xa91: 0x18a9, - 0xa92: 0x18ac, 0xa93: 0x18af, 0xa94: 0x18b2, 0xa95: 0x18b5, 0xa96: 0x18b8, 0xa97: 0x18bb, - 0xa98: 0x18be, 0xa99: 0x18c1, 0xa9a: 0x18ca, 0xa9b: 0x18cd, 0xa9c: 0x18d0, 0xa9d: 0x18d3, - 0xa9e: 0x18d6, 0xa9f: 0x18d9, 0xaa0: 0x0313, 0xaa1: 0x031b, 0xaa2: 0x031f, 0xaa3: 0x0327, - 0xaa4: 0x032b, 0xaa5: 0x032f, 0xaa6: 0x0337, 0xaa7: 0x033f, 0xaa8: 0x0343, 0xaa9: 0x034b, - 0xaaa: 0x034f, 0xaab: 0x0353, 0xaac: 0x0357, 0xaad: 0x035b, 0xaae: 0x2e18, 0xaaf: 0x2e20, - 0xab0: 0x2e28, 0xab1: 0x2e30, 0xab2: 0x2e38, 0xab3: 0x2e40, 0xab4: 0x2e48, 0xab5: 0x2e50, - 0xab6: 0x2e60, 0xab7: 0x2e68, 0xab8: 0x2e70, 0xab9: 0x2e78, 0xaba: 0x2e80, 0xabb: 0x2e88, - 0xabc: 0x2ed3, 0xabd: 0x2e9b, 0xabe: 0x2e58, - // Block 0x2b, offset 0xac0 - 0xac0: 0x06bf, 0xac1: 0x071b, 0xac2: 0x06cb, 0xac3: 0x097b, 0xac4: 0x071f, 0xac5: 0x07af, - 0xac6: 0x06c7, 0xac7: 0x07ab, 0xac8: 0x070b, 0xac9: 0x0887, 0xaca: 0x0d07, 0xacb: 0x0e8f, - 0xacc: 0x0dd7, 0xacd: 0x0d1b, 0xace: 0x145f, 0xacf: 0x098b, 0xad0: 0x0ccf, 0xad1: 0x0d4b, - 0xad2: 0x0d0b, 0xad3: 0x104b, 0xad4: 0x08fb, 0xad5: 0x0f03, 0xad6: 0x1387, 0xad7: 0x105f, - 0xad8: 0x0843, 0xad9: 0x108f, 0xada: 0x0f9b, 0xadb: 0x0a17, 0xadc: 0x140f, 0xadd: 0x077f, - 0xade: 0x08ab, 0xadf: 0x0df7, 0xae0: 0x1527, 0xae1: 0x0743, 0xae2: 0x07d3, 0xae3: 0x0d9b, - 0xae4: 0x06cf, 0xae5: 0x06e7, 0xae6: 0x06d3, 0xae7: 0x0adb, 0xae8: 0x08ef, 0xae9: 0x087f, - 0xaea: 0x0a57, 0xaeb: 0x0a4b, 0xaec: 0x0feb, 0xaed: 0x073f, 0xaee: 0x139b, 0xaef: 0x089b, - 0xaf0: 0x09f3, 0xaf1: 0x18dc, 0xaf2: 0x18df, 0xaf3: 0x18e2, 0xaf4: 0x18e5, 0xaf5: 0x18ee, - 0xaf6: 0x18f1, 0xaf7: 0x18f4, 0xaf8: 0x18f7, 0xaf9: 0x18fa, 0xafa: 0x18fd, 0xafb: 0x1900, - 0xafc: 0x1903, 0xafd: 0x1906, 0xafe: 0x1909, 0xaff: 0x1912, - // Block 0x2c, offset 0xb00 - 0xb00: 0x1cc6, 0xb01: 0x1cd5, 0xb02: 0x1ce4, 0xb03: 0x1cf3, 0xb04: 0x1d02, 0xb05: 0x1d11, - 0xb06: 0x1d20, 0xb07: 0x1d2f, 0xb08: 0x1d3e, 0xb09: 0x218c, 0xb0a: 0x219e, 0xb0b: 0x21b0, - 0xb0c: 0x1954, 0xb0d: 0x1c04, 0xb0e: 0x19d2, 0xb0f: 0x1ba8, 0xb10: 0x04cb, 0xb11: 0x04d3, - 0xb12: 0x04db, 0xb13: 0x04e3, 0xb14: 0x04eb, 0xb15: 0x04ef, 0xb16: 0x04f3, 0xb17: 0x04f7, - 0xb18: 0x04fb, 0xb19: 0x04ff, 0xb1a: 0x0503, 0xb1b: 0x0507, 0xb1c: 0x050b, 0xb1d: 0x050f, - 0xb1e: 0x0513, 0xb1f: 0x0517, 0xb20: 0x051b, 0xb21: 0x0523, 0xb22: 0x0527, 0xb23: 0x052b, - 0xb24: 0x052f, 0xb25: 0x0533, 0xb26: 0x0537, 0xb27: 0x053b, 0xb28: 0x053f, 0xb29: 0x0543, - 0xb2a: 0x0547, 0xb2b: 0x054b, 0xb2c: 0x054f, 0xb2d: 0x0553, 0xb2e: 0x0557, 0xb2f: 0x055b, - 0xb30: 0x055f, 0xb31: 0x0563, 0xb32: 0x0567, 0xb33: 0x056f, 0xb34: 0x0577, 0xb35: 0x057f, - 0xb36: 0x0583, 0xb37: 0x0587, 0xb38: 0x058b, 0xb39: 0x058f, 0xb3a: 0x0593, 0xb3b: 0x0597, - 0xb3c: 0x059b, 0xb3d: 0x059f, 0xb3e: 0x05a3, - // Block 0x2d, offset 0xb40 - 0xb40: 0x2b0c, 0xb41: 0x29a8, 0xb42: 0x2b1c, 0xb43: 0x2880, 0xb44: 0x2ee4, 0xb45: 0x288a, - 0xb46: 0x2894, 0xb47: 0x2f28, 0xb48: 0x29b5, 0xb49: 0x289e, 0xb4a: 0x28a8, 0xb4b: 0x28b2, - 0xb4c: 0x29dc, 0xb4d: 0x29e9, 0xb4e: 0x29c2, 0xb4f: 0x29cf, 0xb50: 0x2ea9, 0xb51: 0x29f6, - 0xb52: 0x2a03, 0xb53: 0x2bbe, 0xb54: 0x26bb, 0xb55: 0x2bd1, 0xb56: 0x2be4, 0xb57: 0x2b2c, - 0xb58: 0x2a10, 0xb59: 0x2bf7, 0xb5a: 0x2c0a, 0xb5b: 0x2a1d, 0xb5c: 0x28bc, 0xb5d: 0x28c6, - 0xb5e: 0x2eb7, 0xb5f: 0x2a2a, 0xb60: 0x2b3c, 0xb61: 0x2ef5, 0xb62: 0x28d0, 0xb63: 0x28da, - 0xb64: 0x2a37, 0xb65: 0x28e4, 0xb66: 0x28ee, 0xb67: 0x26d0, 0xb68: 0x26d7, 0xb69: 0x28f8, - 0xb6a: 0x2902, 0xb6b: 0x2c1d, 0xb6c: 0x2a44, 0xb6d: 0x2b4c, 0xb6e: 0x2c30, 0xb6f: 0x2a51, - 0xb70: 0x2916, 0xb71: 0x290c, 0xb72: 0x2f3c, 0xb73: 0x2a5e, 0xb74: 0x2c43, 0xb75: 0x2920, - 0xb76: 0x2b5c, 0xb77: 0x292a, 0xb78: 0x2a78, 0xb79: 0x2934, 0xb7a: 0x2a85, 0xb7b: 0x2f06, - 0xb7c: 0x2a6b, 0xb7d: 0x2b6c, 0xb7e: 0x2a92, 0xb7f: 0x26de, - // Block 0x2e, offset 0xb80 - 0xb80: 0x2f17, 0xb81: 0x293e, 0xb82: 0x2948, 0xb83: 0x2a9f, 0xb84: 0x2952, 0xb85: 0x295c, - 0xb86: 0x2966, 0xb87: 0x2b7c, 0xb88: 0x2aac, 0xb89: 0x26e5, 0xb8a: 0x2c56, 0xb8b: 0x2e90, - 0xb8c: 0x2b8c, 0xb8d: 0x2ab9, 0xb8e: 0x2ec5, 0xb8f: 0x2970, 0xb90: 0x297a, 0xb91: 0x2ac6, - 0xb92: 0x26ec, 0xb93: 0x2ad3, 0xb94: 0x2b9c, 0xb95: 0x26f3, 0xb96: 0x2c69, 0xb97: 0x2984, - 0xb98: 0x1cb7, 0xb99: 0x1ccb, 0xb9a: 0x1cda, 0xb9b: 0x1ce9, 0xb9c: 0x1cf8, 0xb9d: 0x1d07, - 0xb9e: 0x1d16, 0xb9f: 0x1d25, 0xba0: 0x1d34, 0xba1: 0x1d43, 0xba2: 0x2192, 0xba3: 0x21a4, - 0xba4: 0x21b6, 0xba5: 0x21c2, 0xba6: 0x21ce, 0xba7: 0x21da, 0xba8: 0x21e6, 0xba9: 0x21f2, - 0xbaa: 0x21fe, 0xbab: 0x220a, 0xbac: 0x2246, 0xbad: 0x2252, 0xbae: 0x225e, 0xbaf: 0x226a, - 0xbb0: 0x2276, 0xbb1: 0x1c14, 0xbb2: 0x19c6, 0xbb3: 0x1936, 0xbb4: 0x1be4, 0xbb5: 0x1a47, - 0xbb6: 0x1a56, 0xbb7: 0x19cc, 0xbb8: 0x1bfc, 0xbb9: 0x1c00, 0xbba: 0x1960, 0xbbb: 0x2701, - 0xbbc: 0x270f, 0xbbd: 0x26fa, 0xbbe: 0x2708, 0xbbf: 0x2ae0, - // Block 0x2f, offset 0xbc0 - 0xbc0: 0x1a4a, 0xbc1: 0x1a32, 0xbc2: 0x1c60, 0xbc3: 0x1a1a, 0xbc4: 0x19f3, 0xbc5: 0x1969, - 0xbc6: 0x1978, 0xbc7: 0x1948, 0xbc8: 0x1bf0, 0xbc9: 0x1d52, 0xbca: 0x1a4d, 0xbcb: 0x1a35, - 0xbcc: 0x1c64, 0xbcd: 0x1c70, 0xbce: 0x1a26, 0xbcf: 0x19fc, 0xbd0: 0x1957, 0xbd1: 0x1c1c, - 0xbd2: 0x1bb0, 0xbd3: 0x1b9c, 0xbd4: 0x1bcc, 0xbd5: 0x1c74, 0xbd6: 0x1a29, 0xbd7: 0x19c9, - 0xbd8: 0x19ff, 0xbd9: 0x19de, 0xbda: 0x1a41, 0xbdb: 0x1c78, 0xbdc: 0x1a2c, 0xbdd: 0x19c0, - 0xbde: 0x1a02, 0xbdf: 0x1c3c, 0xbe0: 0x1bf4, 0xbe1: 0x1a14, 0xbe2: 0x1c24, 0xbe3: 0x1c40, - 0xbe4: 0x1bf8, 0xbe5: 0x1a17, 0xbe6: 0x1c28, 0xbe7: 0x22e8, 0xbe8: 0x22fc, 0xbe9: 0x1996, - 0xbea: 0x1c20, 0xbeb: 0x1bb4, 0xbec: 0x1ba0, 0xbed: 0x1c48, 0xbee: 0x2716, 0xbef: 0x27ad, - 0xbf0: 0x1a59, 0xbf1: 0x1a44, 0xbf2: 0x1c7c, 0xbf3: 0x1a2f, 0xbf4: 0x1a50, 0xbf5: 0x1a38, - 0xbf6: 0x1c68, 0xbf7: 0x1a1d, 0xbf8: 0x19f6, 0xbf9: 0x1981, 0xbfa: 0x1a53, 0xbfb: 0x1a3b, - 0xbfc: 0x1c6c, 0xbfd: 0x1a20, 0xbfe: 0x19f9, 0xbff: 0x1984, - // Block 0x30, offset 0xc00 - 0xc00: 0x1c2c, 0xc01: 0x1bb8, 0xc02: 0x1d4d, 0xc03: 0x1939, 0xc04: 0x19ba, 0xc05: 0x19bd, - 0xc06: 0x22f5, 0xc07: 0x1b94, 0xc08: 0x19c3, 0xc09: 0x194b, 0xc0a: 0x19e1, 0xc0b: 0x194e, - 0xc0c: 0x19ea, 0xc0d: 0x196c, 0xc0e: 0x196f, 0xc0f: 0x1a05, 0xc10: 0x1a0b, 0xc11: 0x1a0e, - 0xc12: 0x1c30, 0xc13: 0x1a11, 0xc14: 0x1a23, 0xc15: 0x1c38, 0xc16: 0x1c44, 0xc17: 0x1990, - 0xc18: 0x1d57, 0xc19: 0x1bbc, 0xc1a: 0x1993, 0xc1b: 0x1a5c, 0xc1c: 0x19a5, 0xc1d: 0x19b4, - 0xc1e: 0x22e2, 0xc1f: 0x22dc, 0xc20: 0x1cc1, 0xc21: 0x1cd0, 0xc22: 0x1cdf, 0xc23: 0x1cee, - 0xc24: 0x1cfd, 0xc25: 0x1d0c, 0xc26: 0x1d1b, 0xc27: 0x1d2a, 0xc28: 0x1d39, 0xc29: 0x2186, - 0xc2a: 0x2198, 0xc2b: 0x21aa, 0xc2c: 0x21bc, 0xc2d: 0x21c8, 0xc2e: 0x21d4, 0xc2f: 0x21e0, - 0xc30: 0x21ec, 0xc31: 0x21f8, 0xc32: 0x2204, 0xc33: 0x2240, 0xc34: 0x224c, 0xc35: 0x2258, - 0xc36: 0x2264, 0xc37: 0x2270, 0xc38: 0x227c, 0xc39: 0x2282, 0xc3a: 0x2288, 0xc3b: 0x228e, - 0xc3c: 0x2294, 0xc3d: 0x22a6, 0xc3e: 0x22ac, 0xc3f: 0x1c10, - // Block 0x31, offset 0xc40 - 0xc40: 0x1377, 0xc41: 0x0cfb, 0xc42: 0x13d3, 0xc43: 0x139f, 0xc44: 0x0e57, 0xc45: 0x06eb, - 0xc46: 0x08df, 0xc47: 0x162b, 0xc48: 0x162b, 0xc49: 0x0a0b, 0xc4a: 0x145f, 0xc4b: 0x0943, - 0xc4c: 0x0a07, 0xc4d: 0x0bef, 0xc4e: 0x0fcf, 0xc4f: 0x115f, 0xc50: 0x1297, 0xc51: 0x12d3, - 0xc52: 0x1307, 0xc53: 0x141b, 0xc54: 0x0d73, 0xc55: 0x0dff, 0xc56: 0x0eab, 0xc57: 0x0f43, - 0xc58: 0x125f, 0xc59: 0x1447, 0xc5a: 0x1573, 0xc5b: 0x070f, 0xc5c: 0x08b3, 0xc5d: 0x0d87, - 0xc5e: 0x0ecf, 0xc5f: 0x1293, 0xc60: 0x15c3, 0xc61: 0x0ab3, 0xc62: 0x0e77, 0xc63: 0x1283, - 0xc64: 0x1317, 0xc65: 0x0c23, 0xc66: 0x11bb, 0xc67: 0x12df, 0xc68: 0x0b1f, 0xc69: 0x0d0f, - 0xc6a: 0x0e17, 0xc6b: 0x0f1b, 0xc6c: 0x1427, 0xc6d: 0x074f, 0xc6e: 0x07e7, 0xc6f: 0x0853, - 0xc70: 0x0c8b, 0xc71: 0x0d7f, 0xc72: 0x0ecb, 0xc73: 0x0fef, 0xc74: 0x1177, 0xc75: 0x128b, - 0xc76: 0x12a3, 0xc77: 0x13c7, 0xc78: 0x14ef, 0xc79: 0x15a3, 0xc7a: 0x15bf, 0xc7b: 0x102b, - 0xc7c: 0x106b, 0xc7d: 0x1123, 0xc7e: 0x1243, 0xc7f: 0x147b, - // Block 0x32, offset 0xc80 - 0xc80: 0x15cb, 0xc81: 0x134b, 0xc82: 0x09c7, 0xc83: 0x0b3b, 0xc84: 0x10db, 0xc85: 0x119b, - 0xc86: 0x0eff, 0xc87: 0x1033, 0xc88: 0x1397, 0xc89: 0x14e7, 0xc8a: 0x09c3, 0xc8b: 0x0a8f, - 0xc8c: 0x0d77, 0xc8d: 0x0e2b, 0xc8e: 0x0e5f, 0xc8f: 0x1113, 0xc90: 0x113b, 0xc91: 0x14a7, - 0xc92: 0x084f, 0xc93: 0x11a7, 0xc94: 0x07f3, 0xc95: 0x07ef, 0xc96: 0x1097, 0xc97: 0x1127, - 0xc98: 0x125b, 0xc99: 0x14af, 0xc9a: 0x1367, 0xc9b: 0x0c27, 0xc9c: 0x0d73, 0xc9d: 0x1357, - 0xc9e: 0x06f7, 0xc9f: 0x0a63, 0xca0: 0x0b93, 0xca1: 0x0f2f, 0xca2: 0x0faf, 0xca3: 0x0873, - 0xca4: 0x103b, 0xca5: 0x075f, 0xca6: 0x0b77, 0xca7: 0x06d7, 0xca8: 0x0deb, 0xca9: 0x0ca3, - 0xcaa: 0x110f, 0xcab: 0x08c7, 0xcac: 0x09b3, 0xcad: 0x0ffb, 0xcae: 0x1263, 0xcaf: 0x133b, - 0xcb0: 0x0db7, 0xcb1: 0x13f7, 0xcb2: 0x0de3, 0xcb3: 0x0c37, 0xcb4: 0x121b, 0xcb5: 0x0c57, - 0xcb6: 0x0fab, 0xcb7: 0x072b, 0xcb8: 0x07a7, 0xcb9: 0x07eb, 0xcba: 0x0d53, 0xcbb: 0x10fb, - 0xcbc: 0x11f3, 0xcbd: 0x1347, 0xcbe: 0x145b, 0xcbf: 0x085b, - // Block 0x33, offset 0xcc0 - 0xcc0: 0x090f, 0xcc1: 0x0a17, 0xcc2: 0x0b2f, 0xcc3: 0x0cbf, 0xcc4: 0x0e7b, 0xcc5: 0x103f, - 0xcc6: 0x1497, 0xcc7: 0x157b, 0xcc8: 0x15cf, 0xcc9: 0x15e7, 0xcca: 0x0837, 0xccb: 0x0cf3, - 0xccc: 0x0da3, 0xccd: 0x13eb, 0xcce: 0x0afb, 0xccf: 0x0bd7, 0xcd0: 0x0bf3, 0xcd1: 0x0c83, - 0xcd2: 0x0e6b, 0xcd3: 0x0eb7, 0xcd4: 0x0f67, 0xcd5: 0x108b, 0xcd6: 0x112f, 0xcd7: 0x1193, - 0xcd8: 0x13db, 0xcd9: 0x126b, 0xcda: 0x1403, 0xcdb: 0x147f, 0xcdc: 0x080f, 0xcdd: 0x083b, - 0xcde: 0x0923, 0xcdf: 0x0ea7, 0xce0: 0x12f3, 0xce1: 0x133b, 0xce2: 0x0b1b, 0xce3: 0x0b8b, - 0xce4: 0x0c4f, 0xce5: 0x0daf, 0xce6: 0x10d7, 0xce7: 0x0f23, 0xce8: 0x073b, 0xce9: 0x097f, - 0xcea: 0x0a63, 0xceb: 0x0ac7, 0xcec: 0x0b97, 0xced: 0x0f3f, 0xcee: 0x0f5b, 0xcef: 0x116b, - 0xcf0: 0x118b, 0xcf1: 0x1463, 0xcf2: 0x14e3, 0xcf3: 0x14f3, 0xcf4: 0x152f, 0xcf5: 0x0753, - 0xcf6: 0x107f, 0xcf7: 0x144f, 0xcf8: 0x14cb, 0xcf9: 0x0baf, 0xcfa: 0x0717, 0xcfb: 0x0777, - 0xcfc: 0x0a67, 0xcfd: 0x0a87, 0xcfe: 0x0caf, 0xcff: 0x0d73, - // Block 0x34, offset 0xd00 - 0xd00: 0x0ec3, 0xd01: 0x0fcb, 0xd02: 0x1277, 0xd03: 0x1417, 0xd04: 0x1623, 0xd05: 0x0ce3, - 0xd06: 0x14a3, 0xd07: 0x0833, 0xd08: 0x0d2f, 0xd09: 0x0d3b, 0xd0a: 0x0e0f, 0xd0b: 0x0e47, - 0xd0c: 0x0f4b, 0xd0d: 0x0fa7, 0xd0e: 0x1027, 0xd0f: 0x110b, 0xd10: 0x153b, 0xd11: 0x07af, - 0xd12: 0x0c03, 0xd13: 0x14b3, 0xd14: 0x0767, 0xd15: 0x0aab, 0xd16: 0x0e2f, 0xd17: 0x13df, - 0xd18: 0x0b67, 0xd19: 0x0bb7, 0xd1a: 0x0d43, 0xd1b: 0x0f2f, 0xd1c: 0x14bb, 0xd1d: 0x0817, - 0xd1e: 0x08ff, 0xd1f: 0x0a97, 0xd20: 0x0cd3, 0xd21: 0x0d1f, 0xd22: 0x0d5f, 0xd23: 0x0df3, - 0xd24: 0x0f47, 0xd25: 0x0fbb, 0xd26: 0x1157, 0xd27: 0x12f7, 0xd28: 0x1303, 0xd29: 0x1457, - 0xd2a: 0x14d7, 0xd2b: 0x0883, 0xd2c: 0x0e4b, 0xd2d: 0x0903, 0xd2e: 0x0ec7, 0xd2f: 0x0f6b, - 0xd30: 0x1287, 0xd31: 0x14bf, 0xd32: 0x15ab, 0xd33: 0x15d3, 0xd34: 0x0d37, 0xd35: 0x0e27, - 0xd36: 0x11c3, 0xd37: 0x10b7, 0xd38: 0x10c3, 0xd39: 0x10e7, 0xd3a: 0x0f17, 0xd3b: 0x0e9f, - 0xd3c: 0x1363, 0xd3d: 0x0733, 0xd3e: 0x122b, 0xd3f: 0x081b, - // Block 0x35, offset 0xd40 - 0xd40: 0x080b, 0xd41: 0x0b0b, 0xd42: 0x0c2b, 0xd43: 0x10f3, 0xd44: 0x0a53, 0xd45: 0x0e03, - 0xd46: 0x0cef, 0xd47: 0x13e7, 0xd48: 0x12e7, 0xd49: 0x14ab, 0xd4a: 0x1323, 0xd4b: 0x0b27, - 0xd4c: 0x0787, 0xd4d: 0x095b, 0xd50: 0x09af, - 0xd52: 0x0cdf, 0xd55: 0x07f7, 0xd56: 0x0f1f, 0xd57: 0x0fe3, - 0xd58: 0x1047, 0xd59: 0x1063, 0xd5a: 0x1067, 0xd5b: 0x107b, 0xd5c: 0x14fb, 0xd5d: 0x10eb, - 0xd5e: 0x116f, 0xd60: 0x128f, 0xd62: 0x1353, - 0xd65: 0x1407, 0xd66: 0x1433, - 0xd6a: 0x154f, 0xd6b: 0x1553, 0xd6c: 0x1557, 0xd6d: 0x15bb, 0xd6e: 0x142b, 0xd6f: 0x14c7, - 0xd70: 0x0757, 0xd71: 0x077b, 0xd72: 0x078f, 0xd73: 0x084b, 0xd74: 0x0857, 0xd75: 0x0897, - 0xd76: 0x094b, 0xd77: 0x0967, 0xd78: 0x096f, 0xd79: 0x09ab, 0xd7a: 0x09b7, 0xd7b: 0x0a93, - 0xd7c: 0x0a9b, 0xd7d: 0x0ba3, 0xd7e: 0x0bcb, 0xd7f: 0x0bd3, - // Block 0x36, offset 0xd80 - 0xd80: 0x0beb, 0xd81: 0x0c97, 0xd82: 0x0cc7, 0xd83: 0x0ce7, 0xd84: 0x0d57, 0xd85: 0x0e1b, - 0xd86: 0x0e37, 0xd87: 0x0e67, 0xd88: 0x0ebb, 0xd89: 0x0edb, 0xd8a: 0x0f4f, 0xd8b: 0x102f, - 0xd8c: 0x104b, 0xd8d: 0x1053, 0xd8e: 0x104f, 0xd8f: 0x1057, 0xd90: 0x105b, 0xd91: 0x105f, - 0xd92: 0x1073, 0xd93: 0x1077, 0xd94: 0x109b, 0xd95: 0x10af, 0xd96: 0x10cb, 0xd97: 0x112f, - 0xd98: 0x1137, 0xd99: 0x113f, 0xd9a: 0x1153, 0xd9b: 0x117b, 0xd9c: 0x11cb, 0xd9d: 0x11ff, - 0xd9e: 0x11ff, 0xd9f: 0x1267, 0xda0: 0x130f, 0xda1: 0x1327, 0xda2: 0x135b, 0xda3: 0x135f, - 0xda4: 0x13a3, 0xda5: 0x13a7, 0xda6: 0x13ff, 0xda7: 0x1407, 0xda8: 0x14db, 0xda9: 0x151f, - 0xdaa: 0x1537, 0xdab: 0x0b9b, 0xdac: 0x171e, 0xdad: 0x11e3, - 0xdb0: 0x06df, 0xdb1: 0x07e3, 0xdb2: 0x07a3, 0xdb3: 0x074b, 0xdb4: 0x078b, 0xdb5: 0x07b7, - 0xdb6: 0x0847, 0xdb7: 0x0863, 0xdb8: 0x094b, 0xdb9: 0x0937, 0xdba: 0x0947, 0xdbb: 0x0963, - 0xdbc: 0x09af, 0xdbd: 0x09bf, 0xdbe: 0x0a03, 0xdbf: 0x0a0f, - // Block 0x37, offset 0xdc0 - 0xdc0: 0x0a2b, 0xdc1: 0x0a3b, 0xdc2: 0x0b23, 0xdc3: 0x0b2b, 0xdc4: 0x0b5b, 0xdc5: 0x0b7b, - 0xdc6: 0x0bab, 0xdc7: 0x0bc3, 0xdc8: 0x0bb3, 0xdc9: 0x0bd3, 0xdca: 0x0bc7, 0xdcb: 0x0beb, - 0xdcc: 0x0c07, 0xdcd: 0x0c5f, 0xdce: 0x0c6b, 0xdcf: 0x0c73, 0xdd0: 0x0c9b, 0xdd1: 0x0cdf, - 0xdd2: 0x0d0f, 0xdd3: 0x0d13, 0xdd4: 0x0d27, 0xdd5: 0x0da7, 0xdd6: 0x0db7, 0xdd7: 0x0e0f, - 0xdd8: 0x0e5b, 0xdd9: 0x0e53, 0xdda: 0x0e67, 0xddb: 0x0e83, 0xddc: 0x0ebb, 0xddd: 0x1013, - 0xdde: 0x0edf, 0xddf: 0x0f13, 0xde0: 0x0f1f, 0xde1: 0x0f5f, 0xde2: 0x0f7b, 0xde3: 0x0f9f, - 0xde4: 0x0fc3, 0xde5: 0x0fc7, 0xde6: 0x0fe3, 0xde7: 0x0fe7, 0xde8: 0x0ff7, 0xde9: 0x100b, - 0xdea: 0x1007, 0xdeb: 0x1037, 0xdec: 0x10b3, 0xded: 0x10cb, 0xdee: 0x10e3, 0xdef: 0x111b, - 0xdf0: 0x112f, 0xdf1: 0x114b, 0xdf2: 0x117b, 0xdf3: 0x122f, 0xdf4: 0x1257, 0xdf5: 0x12cb, - 0xdf6: 0x1313, 0xdf7: 0x131f, 0xdf8: 0x1327, 0xdf9: 0x133f, 0xdfa: 0x1353, 0xdfb: 0x1343, - 0xdfc: 0x135b, 0xdfd: 0x1357, 0xdfe: 0x134f, 0xdff: 0x135f, - // Block 0x38, offset 0xe00 - 0xe00: 0x136b, 0xe01: 0x13a7, 0xe02: 0x13e3, 0xe03: 0x1413, 0xe04: 0x144b, 0xe05: 0x146b, - 0xe06: 0x14b7, 0xe07: 0x14db, 0xe08: 0x14fb, 0xe09: 0x150f, 0xe0a: 0x151f, 0xe0b: 0x152b, - 0xe0c: 0x1537, 0xe0d: 0x158b, 0xe0e: 0x162b, 0xe0f: 0x16b5, 0xe10: 0x16b0, 0xe11: 0x16e2, - 0xe12: 0x0607, 0xe13: 0x062f, 0xe14: 0x0633, 0xe15: 0x1764, 0xe16: 0x1791, 0xe17: 0x1809, - 0xe18: 0x1617, 0xe19: 0x1627, - // Block 0x39, offset 0xe40 - 0xe40: 0x19d5, 0xe41: 0x19d8, 0xe42: 0x19db, 0xe43: 0x1c08, 0xe44: 0x1c0c, 0xe45: 0x1a5f, - 0xe46: 0x1a5f, - 0xe53: 0x1d75, 0xe54: 0x1d66, 0xe55: 0x1d6b, 0xe56: 0x1d7a, 0xe57: 0x1d70, - 0xe5d: 0x4390, - 0xe5e: 0x8115, 0xe5f: 0x4402, 0xe60: 0x022d, 0xe61: 0x0215, 0xe62: 0x021e, 0xe63: 0x0221, - 0xe64: 0x0224, 0xe65: 0x0227, 0xe66: 0x022a, 0xe67: 0x0230, 0xe68: 0x0233, 0xe69: 0x0017, - 0xe6a: 0x43f0, 0xe6b: 0x43f6, 0xe6c: 0x44f4, 0xe6d: 0x44fc, 0xe6e: 0x4348, 0xe6f: 0x434e, - 0xe70: 0x4354, 0xe71: 0x435a, 0xe72: 0x4366, 0xe73: 0x436c, 0xe74: 0x4372, 0xe75: 0x437e, - 0xe76: 0x4384, 0xe78: 0x438a, 0xe79: 0x4396, 0xe7a: 0x439c, 0xe7b: 0x43a2, - 0xe7c: 0x43ae, 0xe7e: 0x43b4, - // Block 0x3a, offset 0xe80 - 0xe80: 0x43ba, 0xe81: 0x43c0, 0xe83: 0x43c6, 0xe84: 0x43cc, - 0xe86: 0x43d8, 0xe87: 0x43de, 0xe88: 0x43e4, 0xe89: 0x43ea, 0xe8a: 0x43fc, 0xe8b: 0x4378, - 0xe8c: 0x4360, 0xe8d: 0x43a8, 0xe8e: 0x43d2, 0xe8f: 0x1d7f, 0xe90: 0x0299, 0xe91: 0x0299, - 0xe92: 0x02a2, 0xe93: 0x02a2, 0xe94: 0x02a2, 0xe95: 0x02a2, 0xe96: 0x02a5, 0xe97: 0x02a5, - 0xe98: 0x02a5, 0xe99: 0x02a5, 0xe9a: 0x02ab, 0xe9b: 0x02ab, 0xe9c: 0x02ab, 0xe9d: 0x02ab, - 0xe9e: 0x029f, 0xe9f: 0x029f, 0xea0: 0x029f, 0xea1: 0x029f, 0xea2: 0x02a8, 0xea3: 0x02a8, - 0xea4: 0x02a8, 0xea5: 0x02a8, 0xea6: 0x029c, 0xea7: 0x029c, 0xea8: 0x029c, 0xea9: 0x029c, - 0xeaa: 0x02cf, 0xeab: 0x02cf, 0xeac: 0x02cf, 0xead: 0x02cf, 0xeae: 0x02d2, 0xeaf: 0x02d2, - 0xeb0: 0x02d2, 0xeb1: 0x02d2, 0xeb2: 0x02b1, 0xeb3: 0x02b1, 0xeb4: 0x02b1, 0xeb5: 0x02b1, - 0xeb6: 0x02ae, 0xeb7: 0x02ae, 0xeb8: 0x02ae, 0xeb9: 0x02ae, 0xeba: 0x02b4, 0xebb: 0x02b4, - 0xebc: 0x02b4, 0xebd: 0x02b4, 0xebe: 0x02b7, 0xebf: 0x02b7, - // Block 0x3b, offset 0xec0 - 0xec0: 0x02b7, 0xec1: 0x02b7, 0xec2: 0x02c0, 0xec3: 0x02c0, 0xec4: 0x02bd, 0xec5: 0x02bd, - 0xec6: 0x02c3, 0xec7: 0x02c3, 0xec8: 0x02ba, 0xec9: 0x02ba, 0xeca: 0x02c9, 0xecb: 0x02c9, - 0xecc: 0x02c6, 0xecd: 0x02c6, 0xece: 0x02d5, 0xecf: 0x02d5, 0xed0: 0x02d5, 0xed1: 0x02d5, - 0xed2: 0x02db, 0xed3: 0x02db, 0xed4: 0x02db, 0xed5: 0x02db, 0xed6: 0x02e1, 0xed7: 0x02e1, - 0xed8: 0x02e1, 0xed9: 0x02e1, 0xeda: 0x02de, 0xedb: 0x02de, 0xedc: 0x02de, 0xedd: 0x02de, - 0xede: 0x02e4, 0xedf: 0x02e4, 0xee0: 0x02e7, 0xee1: 0x02e7, 0xee2: 0x02e7, 0xee3: 0x02e7, - 0xee4: 0x446e, 0xee5: 0x446e, 0xee6: 0x02ed, 0xee7: 0x02ed, 0xee8: 0x02ed, 0xee9: 0x02ed, - 0xeea: 0x02ea, 0xeeb: 0x02ea, 0xeec: 0x02ea, 0xeed: 0x02ea, 0xeee: 0x0308, 0xeef: 0x0308, - 0xef0: 0x4468, 0xef1: 0x4468, - // Block 0x3c, offset 0xf00 - 0xf13: 0x02d8, 0xf14: 0x02d8, 0xf15: 0x02d8, 0xf16: 0x02d8, 0xf17: 0x02f6, - 0xf18: 0x02f6, 0xf19: 0x02f3, 0xf1a: 0x02f3, 0xf1b: 0x02f9, 0xf1c: 0x02f9, 0xf1d: 0x204f, - 0xf1e: 0x02ff, 0xf1f: 0x02ff, 0xf20: 0x02f0, 0xf21: 0x02f0, 0xf22: 0x02fc, 0xf23: 0x02fc, - 0xf24: 0x0305, 0xf25: 0x0305, 0xf26: 0x0305, 0xf27: 0x0305, 0xf28: 0x028d, 0xf29: 0x028d, - 0xf2a: 0x25aa, 0xf2b: 0x25aa, 0xf2c: 0x261a, 0xf2d: 0x261a, 0xf2e: 0x25e9, 0xf2f: 0x25e9, - 0xf30: 0x2605, 0xf31: 0x2605, 0xf32: 0x25fe, 0xf33: 0x25fe, 0xf34: 0x260c, 0xf35: 0x260c, - 0xf36: 0x2613, 0xf37: 0x2613, 0xf38: 0x2613, 0xf39: 0x25f0, 0xf3a: 0x25f0, 0xf3b: 0x25f0, - 0xf3c: 0x0302, 0xf3d: 0x0302, 0xf3e: 0x0302, 0xf3f: 0x0302, - // Block 0x3d, offset 0xf40 - 0xf40: 0x25b1, 0xf41: 0x25b8, 0xf42: 0x25d4, 0xf43: 0x25f0, 0xf44: 0x25f7, 0xf45: 0x1d89, - 0xf46: 0x1d8e, 0xf47: 0x1d93, 0xf48: 0x1da2, 0xf49: 0x1db1, 0xf4a: 0x1db6, 0xf4b: 0x1dbb, - 0xf4c: 0x1dc0, 0xf4d: 0x1dc5, 0xf4e: 0x1dd4, 0xf4f: 0x1de3, 0xf50: 0x1de8, 0xf51: 0x1ded, - 0xf52: 0x1dfc, 0xf53: 0x1e0b, 0xf54: 0x1e10, 0xf55: 0x1e15, 0xf56: 0x1e1a, 0xf57: 0x1e29, - 0xf58: 0x1e2e, 0xf59: 0x1e3d, 0xf5a: 0x1e42, 0xf5b: 0x1e47, 0xf5c: 0x1e56, 0xf5d: 0x1e5b, - 0xf5e: 0x1e60, 0xf5f: 0x1e6a, 0xf60: 0x1ea6, 0xf61: 0x1eb5, 0xf62: 0x1ec4, 0xf63: 0x1ec9, - 0xf64: 0x1ece, 0xf65: 0x1ed8, 0xf66: 0x1ee7, 0xf67: 0x1eec, 0xf68: 0x1efb, 0xf69: 0x1f00, - 0xf6a: 0x1f05, 0xf6b: 0x1f14, 0xf6c: 0x1f19, 0xf6d: 0x1f28, 0xf6e: 0x1f2d, 0xf6f: 0x1f32, - 0xf70: 0x1f37, 0xf71: 0x1f3c, 0xf72: 0x1f41, 0xf73: 0x1f46, 0xf74: 0x1f4b, 0xf75: 0x1f50, - 0xf76: 0x1f55, 0xf77: 0x1f5a, 0xf78: 0x1f5f, 0xf79: 0x1f64, 0xf7a: 0x1f69, 0xf7b: 0x1f6e, - 0xf7c: 0x1f73, 0xf7d: 0x1f78, 0xf7e: 0x1f7d, 0xf7f: 0x1f87, - // Block 0x3e, offset 0xf80 - 0xf80: 0x1f8c, 0xf81: 0x1f91, 0xf82: 0x1f96, 0xf83: 0x1fa0, 0xf84: 0x1fa5, 0xf85: 0x1faf, - 0xf86: 0x1fb4, 0xf87: 0x1fb9, 0xf88: 0x1fbe, 0xf89: 0x1fc3, 0xf8a: 0x1fc8, 0xf8b: 0x1fcd, - 0xf8c: 0x1fd2, 0xf8d: 0x1fd7, 0xf8e: 0x1fe6, 0xf8f: 0x1ff5, 0xf90: 0x1ffa, 0xf91: 0x1fff, - 0xf92: 0x2004, 0xf93: 0x2009, 0xf94: 0x200e, 0xf95: 0x2018, 0xf96: 0x201d, 0xf97: 0x2022, - 0xf98: 0x2031, 0xf99: 0x2040, 0xf9a: 0x2045, 0xf9b: 0x4420, 0xf9c: 0x4426, 0xf9d: 0x445c, - 0xf9e: 0x44b3, 0xf9f: 0x44ba, 0xfa0: 0x44c1, 0xfa1: 0x44c8, 0xfa2: 0x44cf, 0xfa3: 0x44d6, - 0xfa4: 0x25c6, 0xfa5: 0x25cd, 0xfa6: 0x25d4, 0xfa7: 0x25db, 0xfa8: 0x25f0, 0xfa9: 0x25f7, - 0xfaa: 0x1d98, 0xfab: 0x1d9d, 0xfac: 0x1da2, 0xfad: 0x1da7, 0xfae: 0x1db1, 0xfaf: 0x1db6, - 0xfb0: 0x1dca, 0xfb1: 0x1dcf, 0xfb2: 0x1dd4, 0xfb3: 0x1dd9, 0xfb4: 0x1de3, 0xfb5: 0x1de8, - 0xfb6: 0x1df2, 0xfb7: 0x1df7, 0xfb8: 0x1dfc, 0xfb9: 0x1e01, 0xfba: 0x1e0b, 0xfbb: 0x1e10, - 0xfbc: 0x1f3c, 0xfbd: 0x1f41, 0xfbe: 0x1f50, 0xfbf: 0x1f55, - // Block 0x3f, offset 0xfc0 - 0xfc0: 0x1f5a, 0xfc1: 0x1f6e, 0xfc2: 0x1f73, 0xfc3: 0x1f78, 0xfc4: 0x1f7d, 0xfc5: 0x1f96, - 0xfc6: 0x1fa0, 0xfc7: 0x1fa5, 0xfc8: 0x1faa, 0xfc9: 0x1fbe, 0xfca: 0x1fdc, 0xfcb: 0x1fe1, - 0xfcc: 0x1fe6, 0xfcd: 0x1feb, 0xfce: 0x1ff5, 0xfcf: 0x1ffa, 0xfd0: 0x445c, 0xfd1: 0x2027, - 0xfd2: 0x202c, 0xfd3: 0x2031, 0xfd4: 0x2036, 0xfd5: 0x2040, 0xfd6: 0x2045, 0xfd7: 0x25b1, - 0xfd8: 0x25b8, 0xfd9: 0x25bf, 0xfda: 0x25d4, 0xfdb: 0x25e2, 0xfdc: 0x1d89, 0xfdd: 0x1d8e, - 0xfde: 0x1d93, 0xfdf: 0x1da2, 0xfe0: 0x1dac, 0xfe1: 0x1dbb, 0xfe2: 0x1dc0, 0xfe3: 0x1dc5, - 0xfe4: 0x1dd4, 0xfe5: 0x1dde, 0xfe6: 0x1dfc, 0xfe7: 0x1e15, 0xfe8: 0x1e1a, 0xfe9: 0x1e29, - 0xfea: 0x1e2e, 0xfeb: 0x1e3d, 0xfec: 0x1e47, 0xfed: 0x1e56, 0xfee: 0x1e5b, 0xfef: 0x1e60, - 0xff0: 0x1e6a, 0xff1: 0x1ea6, 0xff2: 0x1eab, 0xff3: 0x1eb5, 0xff4: 0x1ec4, 0xff5: 0x1ec9, - 0xff6: 0x1ece, 0xff7: 0x1ed8, 0xff8: 0x1ee7, 0xff9: 0x1efb, 0xffa: 0x1f00, 0xffb: 0x1f05, - 0xffc: 0x1f14, 0xffd: 0x1f19, 0xffe: 0x1f28, 0xfff: 0x1f2d, - // Block 0x40, offset 0x1000 - 0x1000: 0x1f32, 0x1001: 0x1f37, 0x1002: 0x1f46, 0x1003: 0x1f4b, 0x1004: 0x1f5f, 0x1005: 0x1f64, - 0x1006: 0x1f69, 0x1007: 0x1f6e, 0x1008: 0x1f73, 0x1009: 0x1f87, 0x100a: 0x1f8c, 0x100b: 0x1f91, - 0x100c: 0x1f96, 0x100d: 0x1f9b, 0x100e: 0x1faf, 0x100f: 0x1fb4, 0x1010: 0x1fb9, 0x1011: 0x1fbe, - 0x1012: 0x1fcd, 0x1013: 0x1fd2, 0x1014: 0x1fd7, 0x1015: 0x1fe6, 0x1016: 0x1ff0, 0x1017: 0x1fff, - 0x1018: 0x2004, 0x1019: 0x4450, 0x101a: 0x2018, 0x101b: 0x201d, 0x101c: 0x2022, 0x101d: 0x2031, - 0x101e: 0x203b, 0x101f: 0x25d4, 0x1020: 0x25e2, 0x1021: 0x1da2, 0x1022: 0x1dac, 0x1023: 0x1dd4, - 0x1024: 0x1dde, 0x1025: 0x1dfc, 0x1026: 0x1e06, 0x1027: 0x1e6a, 0x1028: 0x1e6f, 0x1029: 0x1e92, - 0x102a: 0x1e97, 0x102b: 0x1f6e, 0x102c: 0x1f73, 0x102d: 0x1f96, 0x102e: 0x1fe6, 0x102f: 0x1ff0, - 0x1030: 0x2031, 0x1031: 0x203b, 0x1032: 0x4504, 0x1033: 0x450c, 0x1034: 0x4514, 0x1035: 0x1ef1, - 0x1036: 0x1ef6, 0x1037: 0x1f0a, 0x1038: 0x1f0f, 0x1039: 0x1f1e, 0x103a: 0x1f23, 0x103b: 0x1e74, - 0x103c: 0x1e79, 0x103d: 0x1e9c, 0x103e: 0x1ea1, 0x103f: 0x1e33, - // Block 0x41, offset 0x1040 - 0x1040: 0x1e38, 0x1041: 0x1e1f, 0x1042: 0x1e24, 0x1043: 0x1e4c, 0x1044: 0x1e51, 0x1045: 0x1eba, - 0x1046: 0x1ebf, 0x1047: 0x1edd, 0x1048: 0x1ee2, 0x1049: 0x1e7e, 0x104a: 0x1e83, 0x104b: 0x1e88, - 0x104c: 0x1e92, 0x104d: 0x1e8d, 0x104e: 0x1e65, 0x104f: 0x1eb0, 0x1050: 0x1ed3, 0x1051: 0x1ef1, - 0x1052: 0x1ef6, 0x1053: 0x1f0a, 0x1054: 0x1f0f, 0x1055: 0x1f1e, 0x1056: 0x1f23, 0x1057: 0x1e74, - 0x1058: 0x1e79, 0x1059: 0x1e9c, 0x105a: 0x1ea1, 0x105b: 0x1e33, 0x105c: 0x1e38, 0x105d: 0x1e1f, - 0x105e: 0x1e24, 0x105f: 0x1e4c, 0x1060: 0x1e51, 0x1061: 0x1eba, 0x1062: 0x1ebf, 0x1063: 0x1edd, - 0x1064: 0x1ee2, 0x1065: 0x1e7e, 0x1066: 0x1e83, 0x1067: 0x1e88, 0x1068: 0x1e92, 0x1069: 0x1e8d, - 0x106a: 0x1e65, 0x106b: 0x1eb0, 0x106c: 0x1ed3, 0x106d: 0x1e7e, 0x106e: 0x1e83, 0x106f: 0x1e88, - 0x1070: 0x1e92, 0x1071: 0x1e6f, 0x1072: 0x1e97, 0x1073: 0x1eec, 0x1074: 0x1e56, 0x1075: 0x1e5b, - 0x1076: 0x1e60, 0x1077: 0x1e7e, 0x1078: 0x1e83, 0x1079: 0x1e88, 0x107a: 0x1eec, 0x107b: 0x1efb, - 0x107c: 0x4408, 0x107d: 0x4408, - // Block 0x42, offset 0x1080 - 0x1090: 0x2311, 0x1091: 0x2326, - 0x1092: 0x2326, 0x1093: 0x232d, 0x1094: 0x2334, 0x1095: 0x2349, 0x1096: 0x2350, 0x1097: 0x2357, - 0x1098: 0x237a, 0x1099: 0x237a, 0x109a: 0x239d, 0x109b: 0x2396, 0x109c: 0x23b2, 0x109d: 0x23a4, - 0x109e: 0x23ab, 0x109f: 0x23ce, 0x10a0: 0x23ce, 0x10a1: 0x23c7, 0x10a2: 0x23d5, 0x10a3: 0x23d5, - 0x10a4: 0x23ff, 0x10a5: 0x23ff, 0x10a6: 0x241b, 0x10a7: 0x23e3, 0x10a8: 0x23e3, 0x10a9: 0x23dc, - 0x10aa: 0x23f1, 0x10ab: 0x23f1, 0x10ac: 0x23f8, 0x10ad: 0x23f8, 0x10ae: 0x2422, 0x10af: 0x2430, - 0x10b0: 0x2430, 0x10b1: 0x2437, 0x10b2: 0x2437, 0x10b3: 0x243e, 0x10b4: 0x2445, 0x10b5: 0x244c, - 0x10b6: 0x2453, 0x10b7: 0x2453, 0x10b8: 0x245a, 0x10b9: 0x2468, 0x10ba: 0x2476, 0x10bb: 0x246f, - 0x10bc: 0x247d, 0x10bd: 0x247d, 0x10be: 0x2492, 0x10bf: 0x2499, - // Block 0x43, offset 0x10c0 - 0x10c0: 0x24ca, 0x10c1: 0x24d8, 0x10c2: 0x24d1, 0x10c3: 0x24b5, 0x10c4: 0x24b5, 0x10c5: 0x24df, - 0x10c6: 0x24df, 0x10c7: 0x24e6, 0x10c8: 0x24e6, 0x10c9: 0x2510, 0x10ca: 0x2517, 0x10cb: 0x251e, - 0x10cc: 0x24f4, 0x10cd: 0x2502, 0x10ce: 0x2525, 0x10cf: 0x252c, - 0x10d2: 0x24fb, 0x10d3: 0x2580, 0x10d4: 0x2587, 0x10d5: 0x255d, 0x10d6: 0x2564, 0x10d7: 0x2548, - 0x10d8: 0x2548, 0x10d9: 0x254f, 0x10da: 0x2579, 0x10db: 0x2572, 0x10dc: 0x259c, 0x10dd: 0x259c, - 0x10de: 0x230a, 0x10df: 0x231f, 0x10e0: 0x2318, 0x10e1: 0x2342, 0x10e2: 0x233b, 0x10e3: 0x2365, - 0x10e4: 0x235e, 0x10e5: 0x2388, 0x10e6: 0x236c, 0x10e7: 0x2381, 0x10e8: 0x23b9, 0x10e9: 0x2406, - 0x10ea: 0x23ea, 0x10eb: 0x2429, 0x10ec: 0x24c3, 0x10ed: 0x24ed, 0x10ee: 0x2595, 0x10ef: 0x258e, - 0x10f0: 0x25a3, 0x10f1: 0x253a, 0x10f2: 0x24a0, 0x10f3: 0x256b, 0x10f4: 0x2492, 0x10f5: 0x24ca, - 0x10f6: 0x2461, 0x10f7: 0x24ae, 0x10f8: 0x2541, 0x10f9: 0x2533, 0x10fa: 0x24bc, 0x10fb: 0x24a7, - 0x10fc: 0x24bc, 0x10fd: 0x2541, 0x10fe: 0x2373, 0x10ff: 0x238f, - // Block 0x44, offset 0x1100 - 0x1100: 0x2509, 0x1101: 0x2484, 0x1102: 0x2303, 0x1103: 0x24a7, 0x1104: 0x244c, 0x1105: 0x241b, - 0x1106: 0x23c0, 0x1107: 0x2556, - 0x1130: 0x2414, 0x1131: 0x248b, 0x1132: 0x27bf, 0x1133: 0x27b6, 0x1134: 0x27ec, 0x1135: 0x27da, - 0x1136: 0x27c8, 0x1137: 0x27e3, 0x1138: 0x27f5, 0x1139: 0x240d, 0x113a: 0x2c7c, 0x113b: 0x2afc, - 0x113c: 0x27d1, - // Block 0x45, offset 0x1140 - 0x1150: 0x0019, 0x1151: 0x0483, - 0x1152: 0x0487, 0x1153: 0x0035, 0x1154: 0x0037, 0x1155: 0x0003, 0x1156: 0x003f, 0x1157: 0x04bf, - 0x1158: 0x04c3, 0x1159: 0x1b5c, - 0x1160: 0x8132, 0x1161: 0x8132, 0x1162: 0x8132, 0x1163: 0x8132, - 0x1164: 0x8132, 0x1165: 0x8132, 0x1166: 0x8132, 0x1167: 0x812d, 0x1168: 0x812d, 0x1169: 0x812d, - 0x116a: 0x812d, 0x116b: 0x812d, 0x116c: 0x812d, 0x116d: 0x812d, 0x116e: 0x8132, 0x116f: 0x8132, - 0x1170: 0x1873, 0x1171: 0x0443, 0x1172: 0x043f, 0x1173: 0x007f, 0x1174: 0x007f, 0x1175: 0x0011, - 0x1176: 0x0013, 0x1177: 0x00b7, 0x1178: 0x00bb, 0x1179: 0x04b7, 0x117a: 0x04bb, 0x117b: 0x04ab, - 0x117c: 0x04af, 0x117d: 0x0493, 0x117e: 0x0497, 0x117f: 0x048b, - // Block 0x46, offset 0x1180 - 0x1180: 0x048f, 0x1181: 0x049b, 0x1182: 0x049f, 0x1183: 0x04a3, 0x1184: 0x04a7, - 0x1187: 0x0077, 0x1188: 0x007b, 0x1189: 0x4269, 0x118a: 0x4269, 0x118b: 0x4269, - 0x118c: 0x4269, 0x118d: 0x007f, 0x118e: 0x007f, 0x118f: 0x007f, 0x1190: 0x0019, 0x1191: 0x0483, - 0x1192: 0x001d, 0x1194: 0x0037, 0x1195: 0x0035, 0x1196: 0x003f, 0x1197: 0x0003, - 0x1198: 0x0443, 0x1199: 0x0011, 0x119a: 0x0013, 0x119b: 0x00b7, 0x119c: 0x00bb, 0x119d: 0x04b7, - 0x119e: 0x04bb, 0x119f: 0x0007, 0x11a0: 0x000d, 0x11a1: 0x0015, 0x11a2: 0x0017, 0x11a3: 0x001b, - 0x11a4: 0x0039, 0x11a5: 0x003d, 0x11a6: 0x003b, 0x11a8: 0x0079, 0x11a9: 0x0009, - 0x11aa: 0x000b, 0x11ab: 0x0041, - 0x11b0: 0x42aa, 0x11b1: 0x442c, 0x11b2: 0x42af, 0x11b4: 0x42b4, - 0x11b6: 0x42b9, 0x11b7: 0x4432, 0x11b8: 0x42be, 0x11b9: 0x4438, 0x11ba: 0x42c3, 0x11bb: 0x443e, - 0x11bc: 0x42c8, 0x11bd: 0x4444, 0x11be: 0x42cd, 0x11bf: 0x444a, - // Block 0x47, offset 0x11c0 - 0x11c0: 0x0236, 0x11c1: 0x440e, 0x11c2: 0x440e, 0x11c3: 0x4414, 0x11c4: 0x4414, 0x11c5: 0x4456, - 0x11c6: 0x4456, 0x11c7: 0x441a, 0x11c8: 0x441a, 0x11c9: 0x4462, 0x11ca: 0x4462, 0x11cb: 0x4462, - 0x11cc: 0x4462, 0x11cd: 0x0239, 0x11ce: 0x0239, 0x11cf: 0x023c, 0x11d0: 0x023c, 0x11d1: 0x023c, - 0x11d2: 0x023c, 0x11d3: 0x023f, 0x11d4: 0x023f, 0x11d5: 0x0242, 0x11d6: 0x0242, 0x11d7: 0x0242, - 0x11d8: 0x0242, 0x11d9: 0x0245, 0x11da: 0x0245, 0x11db: 0x0245, 0x11dc: 0x0245, 0x11dd: 0x0248, - 0x11de: 0x0248, 0x11df: 0x0248, 0x11e0: 0x0248, 0x11e1: 0x024b, 0x11e2: 0x024b, 0x11e3: 0x024b, - 0x11e4: 0x024b, 0x11e5: 0x024e, 0x11e6: 0x024e, 0x11e7: 0x024e, 0x11e8: 0x024e, 0x11e9: 0x0251, - 0x11ea: 0x0251, 0x11eb: 0x0254, 0x11ec: 0x0254, 0x11ed: 0x0257, 0x11ee: 0x0257, 0x11ef: 0x025a, - 0x11f0: 0x025a, 0x11f1: 0x025d, 0x11f2: 0x025d, 0x11f3: 0x025d, 0x11f4: 0x025d, 0x11f5: 0x0260, - 0x11f6: 0x0260, 0x11f7: 0x0260, 0x11f8: 0x0260, 0x11f9: 0x0263, 0x11fa: 0x0263, 0x11fb: 0x0263, - 0x11fc: 0x0263, 0x11fd: 0x0266, 0x11fe: 0x0266, 0x11ff: 0x0266, - // Block 0x48, offset 0x1200 - 0x1200: 0x0266, 0x1201: 0x0269, 0x1202: 0x0269, 0x1203: 0x0269, 0x1204: 0x0269, 0x1205: 0x026c, - 0x1206: 0x026c, 0x1207: 0x026c, 0x1208: 0x026c, 0x1209: 0x026f, 0x120a: 0x026f, 0x120b: 0x026f, - 0x120c: 0x026f, 0x120d: 0x0272, 0x120e: 0x0272, 0x120f: 0x0272, 0x1210: 0x0272, 0x1211: 0x0275, - 0x1212: 0x0275, 0x1213: 0x0275, 0x1214: 0x0275, 0x1215: 0x0278, 0x1216: 0x0278, 0x1217: 0x0278, - 0x1218: 0x0278, 0x1219: 0x027b, 0x121a: 0x027b, 0x121b: 0x027b, 0x121c: 0x027b, 0x121d: 0x027e, - 0x121e: 0x027e, 0x121f: 0x027e, 0x1220: 0x027e, 0x1221: 0x0281, 0x1222: 0x0281, 0x1223: 0x0281, - 0x1224: 0x0281, 0x1225: 0x0284, 0x1226: 0x0284, 0x1227: 0x0284, 0x1228: 0x0284, 0x1229: 0x0287, - 0x122a: 0x0287, 0x122b: 0x0287, 0x122c: 0x0287, 0x122d: 0x028a, 0x122e: 0x028a, 0x122f: 0x028d, - 0x1230: 0x028d, 0x1231: 0x0290, 0x1232: 0x0290, 0x1233: 0x0290, 0x1234: 0x0290, 0x1235: 0x2e00, - 0x1236: 0x2e00, 0x1237: 0x2e08, 0x1238: 0x2e08, 0x1239: 0x2e10, 0x123a: 0x2e10, 0x123b: 0x1f82, - 0x123c: 0x1f82, - // Block 0x49, offset 0x1240 - 0x1240: 0x0081, 0x1241: 0x0083, 0x1242: 0x0085, 0x1243: 0x0087, 0x1244: 0x0089, 0x1245: 0x008b, - 0x1246: 0x008d, 0x1247: 0x008f, 0x1248: 0x0091, 0x1249: 0x0093, 0x124a: 0x0095, 0x124b: 0x0097, - 0x124c: 0x0099, 0x124d: 0x009b, 0x124e: 0x009d, 0x124f: 0x009f, 0x1250: 0x00a1, 0x1251: 0x00a3, - 0x1252: 0x00a5, 0x1253: 0x00a7, 0x1254: 0x00a9, 0x1255: 0x00ab, 0x1256: 0x00ad, 0x1257: 0x00af, - 0x1258: 0x00b1, 0x1259: 0x00b3, 0x125a: 0x00b5, 0x125b: 0x00b7, 0x125c: 0x00b9, 0x125d: 0x00bb, - 0x125e: 0x00bd, 0x125f: 0x0477, 0x1260: 0x047b, 0x1261: 0x0487, 0x1262: 0x049b, 0x1263: 0x049f, - 0x1264: 0x0483, 0x1265: 0x05ab, 0x1266: 0x05a3, 0x1267: 0x04c7, 0x1268: 0x04cf, 0x1269: 0x04d7, - 0x126a: 0x04df, 0x126b: 0x04e7, 0x126c: 0x056b, 0x126d: 0x0573, 0x126e: 0x057b, 0x126f: 0x051f, - 0x1270: 0x05af, 0x1271: 0x04cb, 0x1272: 0x04d3, 0x1273: 0x04db, 0x1274: 0x04e3, 0x1275: 0x04eb, - 0x1276: 0x04ef, 0x1277: 0x04f3, 0x1278: 0x04f7, 0x1279: 0x04fb, 0x127a: 0x04ff, 0x127b: 0x0503, - 0x127c: 0x0507, 0x127d: 0x050b, 0x127e: 0x050f, 0x127f: 0x0513, - // Block 0x4a, offset 0x1280 - 0x1280: 0x0517, 0x1281: 0x051b, 0x1282: 0x0523, 0x1283: 0x0527, 0x1284: 0x052b, 0x1285: 0x052f, - 0x1286: 0x0533, 0x1287: 0x0537, 0x1288: 0x053b, 0x1289: 0x053f, 0x128a: 0x0543, 0x128b: 0x0547, - 0x128c: 0x054b, 0x128d: 0x054f, 0x128e: 0x0553, 0x128f: 0x0557, 0x1290: 0x055b, 0x1291: 0x055f, - 0x1292: 0x0563, 0x1293: 0x0567, 0x1294: 0x056f, 0x1295: 0x0577, 0x1296: 0x057f, 0x1297: 0x0583, - 0x1298: 0x0587, 0x1299: 0x058b, 0x129a: 0x058f, 0x129b: 0x0593, 0x129c: 0x0597, 0x129d: 0x05a7, - 0x129e: 0x4a78, 0x129f: 0x4a7e, 0x12a0: 0x03c3, 0x12a1: 0x0313, 0x12a2: 0x0317, 0x12a3: 0x4a3b, - 0x12a4: 0x031b, 0x12a5: 0x4a41, 0x12a6: 0x4a47, 0x12a7: 0x031f, 0x12a8: 0x0323, 0x12a9: 0x0327, - 0x12aa: 0x4a4d, 0x12ab: 0x4a53, 0x12ac: 0x4a59, 0x12ad: 0x4a5f, 0x12ae: 0x4a65, 0x12af: 0x4a6b, - 0x12b0: 0x0367, 0x12b1: 0x032b, 0x12b2: 0x032f, 0x12b3: 0x0333, 0x12b4: 0x037b, 0x12b5: 0x0337, - 0x12b6: 0x033b, 0x12b7: 0x033f, 0x12b8: 0x0343, 0x12b9: 0x0347, 0x12ba: 0x034b, 0x12bb: 0x034f, - 0x12bc: 0x0353, 0x12bd: 0x0357, 0x12be: 0x035b, - // Block 0x4b, offset 0x12c0 - 0x12c2: 0x49bd, 0x12c3: 0x49c3, 0x12c4: 0x49c9, 0x12c5: 0x49cf, - 0x12c6: 0x49d5, 0x12c7: 0x49db, 0x12ca: 0x49e1, 0x12cb: 0x49e7, - 0x12cc: 0x49ed, 0x12cd: 0x49f3, 0x12ce: 0x49f9, 0x12cf: 0x49ff, - 0x12d2: 0x4a05, 0x12d3: 0x4a0b, 0x12d4: 0x4a11, 0x12d5: 0x4a17, 0x12d6: 0x4a1d, 0x12d7: 0x4a23, - 0x12da: 0x4a29, 0x12db: 0x4a2f, 0x12dc: 0x4a35, - 0x12e0: 0x00bf, 0x12e1: 0x00c2, 0x12e2: 0x00cb, 0x12e3: 0x4264, - 0x12e4: 0x00c8, 0x12e5: 0x00c5, 0x12e6: 0x0447, 0x12e8: 0x046b, 0x12e9: 0x044b, - 0x12ea: 0x044f, 0x12eb: 0x0453, 0x12ec: 0x0457, 0x12ed: 0x046f, 0x12ee: 0x0473, - // Block 0x4c, offset 0x1300 - 0x1300: 0x0063, 0x1301: 0x0065, 0x1302: 0x0067, 0x1303: 0x0069, 0x1304: 0x006b, 0x1305: 0x006d, - 0x1306: 0x006f, 0x1307: 0x0071, 0x1308: 0x0073, 0x1309: 0x0075, 0x130a: 0x0083, 0x130b: 0x0085, - 0x130c: 0x0087, 0x130d: 0x0089, 0x130e: 0x008b, 0x130f: 0x008d, 0x1310: 0x008f, 0x1311: 0x0091, - 0x1312: 0x0093, 0x1313: 0x0095, 0x1314: 0x0097, 0x1315: 0x0099, 0x1316: 0x009b, 0x1317: 0x009d, - 0x1318: 0x009f, 0x1319: 0x00a1, 0x131a: 0x00a3, 0x131b: 0x00a5, 0x131c: 0x00a7, 0x131d: 0x00a9, - 0x131e: 0x00ab, 0x131f: 0x00ad, 0x1320: 0x00af, 0x1321: 0x00b1, 0x1322: 0x00b3, 0x1323: 0x00b5, - 0x1324: 0x00dd, 0x1325: 0x00f2, 0x1328: 0x0173, 0x1329: 0x0176, - 0x132a: 0x0179, 0x132b: 0x017c, 0x132c: 0x017f, 0x132d: 0x0182, 0x132e: 0x0185, 0x132f: 0x0188, - 0x1330: 0x018b, 0x1331: 0x018e, 0x1332: 0x0191, 0x1333: 0x0194, 0x1334: 0x0197, 0x1335: 0x019a, - 0x1336: 0x019d, 0x1337: 0x01a0, 0x1338: 0x01a3, 0x1339: 0x0188, 0x133a: 0x01a6, 0x133b: 0x01a9, - 0x133c: 0x01ac, 0x133d: 0x01af, 0x133e: 0x01b2, 0x133f: 0x01b5, - // Block 0x4d, offset 0x1340 - 0x1340: 0x01fd, 0x1341: 0x0200, 0x1342: 0x0203, 0x1343: 0x045b, 0x1344: 0x01c7, 0x1345: 0x01d0, - 0x1346: 0x01d6, 0x1347: 0x01fa, 0x1348: 0x01eb, 0x1349: 0x01e8, 0x134a: 0x0206, 0x134b: 0x0209, - 0x134e: 0x0021, 0x134f: 0x0023, 0x1350: 0x0025, 0x1351: 0x0027, - 0x1352: 0x0029, 0x1353: 0x002b, 0x1354: 0x002d, 0x1355: 0x002f, 0x1356: 0x0031, 0x1357: 0x0033, - 0x1358: 0x0021, 0x1359: 0x0023, 0x135a: 0x0025, 0x135b: 0x0027, 0x135c: 0x0029, 0x135d: 0x002b, - 0x135e: 0x002d, 0x135f: 0x002f, 0x1360: 0x0031, 0x1361: 0x0033, 0x1362: 0x0021, 0x1363: 0x0023, - 0x1364: 0x0025, 0x1365: 0x0027, 0x1366: 0x0029, 0x1367: 0x002b, 0x1368: 0x002d, 0x1369: 0x002f, - 0x136a: 0x0031, 0x136b: 0x0033, 0x136c: 0x0021, 0x136d: 0x0023, 0x136e: 0x0025, 0x136f: 0x0027, - 0x1370: 0x0029, 0x1371: 0x002b, 0x1372: 0x002d, 0x1373: 0x002f, 0x1374: 0x0031, 0x1375: 0x0033, - 0x1376: 0x0021, 0x1377: 0x0023, 0x1378: 0x0025, 0x1379: 0x0027, 0x137a: 0x0029, 0x137b: 0x002b, - 0x137c: 0x002d, 0x137d: 0x002f, 0x137e: 0x0031, 0x137f: 0x0033, - // Block 0x4e, offset 0x1380 - 0x1380: 0x0239, 0x1381: 0x023c, 0x1382: 0x0248, 0x1383: 0x0251, 0x1385: 0x028a, - 0x1386: 0x025a, 0x1387: 0x024b, 0x1388: 0x0269, 0x1389: 0x0290, 0x138a: 0x027b, 0x138b: 0x027e, - 0x138c: 0x0281, 0x138d: 0x0284, 0x138e: 0x025d, 0x138f: 0x026f, 0x1390: 0x0275, 0x1391: 0x0263, - 0x1392: 0x0278, 0x1393: 0x0257, 0x1394: 0x0260, 0x1395: 0x0242, 0x1396: 0x0245, 0x1397: 0x024e, - 0x1398: 0x0254, 0x1399: 0x0266, 0x139a: 0x026c, 0x139b: 0x0272, 0x139c: 0x0293, 0x139d: 0x02e4, - 0x139e: 0x02cc, 0x139f: 0x0296, 0x13a1: 0x023c, 0x13a2: 0x0248, - 0x13a4: 0x0287, 0x13a7: 0x024b, 0x13a9: 0x0290, - 0x13aa: 0x027b, 0x13ab: 0x027e, 0x13ac: 0x0281, 0x13ad: 0x0284, 0x13ae: 0x025d, 0x13af: 0x026f, - 0x13b0: 0x0275, 0x13b1: 0x0263, 0x13b2: 0x0278, 0x13b4: 0x0260, 0x13b5: 0x0242, - 0x13b6: 0x0245, 0x13b7: 0x024e, 0x13b9: 0x0266, 0x13bb: 0x0272, - // Block 0x4f, offset 0x13c0 - 0x13c2: 0x0248, - 0x13c7: 0x024b, 0x13c9: 0x0290, 0x13cb: 0x027e, - 0x13cd: 0x0284, 0x13ce: 0x025d, 0x13cf: 0x026f, 0x13d1: 0x0263, - 0x13d2: 0x0278, 0x13d4: 0x0260, 0x13d7: 0x024e, - 0x13d9: 0x0266, 0x13db: 0x0272, 0x13dd: 0x02e4, - 0x13df: 0x0296, 0x13e1: 0x023c, 0x13e2: 0x0248, - 0x13e4: 0x0287, 0x13e7: 0x024b, 0x13e8: 0x0269, 0x13e9: 0x0290, - 0x13ea: 0x027b, 0x13ec: 0x0281, 0x13ed: 0x0284, 0x13ee: 0x025d, 0x13ef: 0x026f, - 0x13f0: 0x0275, 0x13f1: 0x0263, 0x13f2: 0x0278, 0x13f4: 0x0260, 0x13f5: 0x0242, - 0x13f6: 0x0245, 0x13f7: 0x024e, 0x13f9: 0x0266, 0x13fa: 0x026c, 0x13fb: 0x0272, - 0x13fc: 0x0293, 0x13fe: 0x02cc, - // Block 0x50, offset 0x1400 - 0x1400: 0x0239, 0x1401: 0x023c, 0x1402: 0x0248, 0x1403: 0x0251, 0x1404: 0x0287, 0x1405: 0x028a, - 0x1406: 0x025a, 0x1407: 0x024b, 0x1408: 0x0269, 0x1409: 0x0290, 0x140b: 0x027e, - 0x140c: 0x0281, 0x140d: 0x0284, 0x140e: 0x025d, 0x140f: 0x026f, 0x1410: 0x0275, 0x1411: 0x0263, - 0x1412: 0x0278, 0x1413: 0x0257, 0x1414: 0x0260, 0x1415: 0x0242, 0x1416: 0x0245, 0x1417: 0x024e, - 0x1418: 0x0254, 0x1419: 0x0266, 0x141a: 0x026c, 0x141b: 0x0272, - 0x1421: 0x023c, 0x1422: 0x0248, 0x1423: 0x0251, - 0x1425: 0x028a, 0x1426: 0x025a, 0x1427: 0x024b, 0x1428: 0x0269, 0x1429: 0x0290, - 0x142b: 0x027e, 0x142c: 0x0281, 0x142d: 0x0284, 0x142e: 0x025d, 0x142f: 0x026f, - 0x1430: 0x0275, 0x1431: 0x0263, 0x1432: 0x0278, 0x1433: 0x0257, 0x1434: 0x0260, 0x1435: 0x0242, - 0x1436: 0x0245, 0x1437: 0x024e, 0x1438: 0x0254, 0x1439: 0x0266, 0x143a: 0x026c, 0x143b: 0x0272, - // Block 0x51, offset 0x1440 - 0x1440: 0x1879, 0x1441: 0x1876, 0x1442: 0x187c, 0x1443: 0x18a0, 0x1444: 0x18c4, 0x1445: 0x18e8, - 0x1446: 0x190c, 0x1447: 0x1915, 0x1448: 0x191b, 0x1449: 0x1921, 0x144a: 0x1927, - 0x1450: 0x1a8c, 0x1451: 0x1a90, - 0x1452: 0x1a94, 0x1453: 0x1a98, 0x1454: 0x1a9c, 0x1455: 0x1aa0, 0x1456: 0x1aa4, 0x1457: 0x1aa8, - 0x1458: 0x1aac, 0x1459: 0x1ab0, 0x145a: 0x1ab4, 0x145b: 0x1ab8, 0x145c: 0x1abc, 0x145d: 0x1ac0, - 0x145e: 0x1ac4, 0x145f: 0x1ac8, 0x1460: 0x1acc, 0x1461: 0x1ad0, 0x1462: 0x1ad4, 0x1463: 0x1ad8, - 0x1464: 0x1adc, 0x1465: 0x1ae0, 0x1466: 0x1ae4, 0x1467: 0x1ae8, 0x1468: 0x1aec, 0x1469: 0x1af0, - 0x146a: 0x271e, 0x146b: 0x0047, 0x146c: 0x0065, 0x146d: 0x193c, 0x146e: 0x19b1, - 0x1470: 0x0043, 0x1471: 0x0045, 0x1472: 0x0047, 0x1473: 0x0049, 0x1474: 0x004b, 0x1475: 0x004d, - 0x1476: 0x004f, 0x1477: 0x0051, 0x1478: 0x0053, 0x1479: 0x0055, 0x147a: 0x0057, 0x147b: 0x0059, - 0x147c: 0x005b, 0x147d: 0x005d, 0x147e: 0x005f, 0x147f: 0x0061, - // Block 0x52, offset 0x1480 - 0x1480: 0x26ad, 0x1481: 0x26c2, 0x1482: 0x0503, - 0x1490: 0x0c0f, 0x1491: 0x0a47, - 0x1492: 0x08d3, 0x1493: 0x45c4, 0x1494: 0x071b, 0x1495: 0x09ef, 0x1496: 0x132f, 0x1497: 0x09ff, - 0x1498: 0x0727, 0x1499: 0x0cd7, 0x149a: 0x0eaf, 0x149b: 0x0caf, 0x149c: 0x0827, 0x149d: 0x0b6b, - 0x149e: 0x07bf, 0x149f: 0x0cb7, 0x14a0: 0x0813, 0x14a1: 0x1117, 0x14a2: 0x0f83, 0x14a3: 0x138b, - 0x14a4: 0x09d3, 0x14a5: 0x090b, 0x14a6: 0x0e63, 0x14a7: 0x0c1b, 0x14a8: 0x0c47, 0x14a9: 0x06bf, - 0x14aa: 0x06cb, 0x14ab: 0x140b, 0x14ac: 0x0adb, 0x14ad: 0x06e7, 0x14ae: 0x08ef, 0x14af: 0x0c3b, - 0x14b0: 0x13b3, 0x14b1: 0x0c13, 0x14b2: 0x106f, 0x14b3: 0x10ab, 0x14b4: 0x08f7, 0x14b5: 0x0e43, - 0x14b6: 0x0d0b, 0x14b7: 0x0d07, 0x14b8: 0x0f97, 0x14b9: 0x082b, 0x14ba: 0x0957, 0x14bb: 0x1443, - // Block 0x53, offset 0x14c0 - 0x14c0: 0x06fb, 0x14c1: 0x06f3, 0x14c2: 0x0703, 0x14c3: 0x1647, 0x14c4: 0x0747, 0x14c5: 0x0757, - 0x14c6: 0x075b, 0x14c7: 0x0763, 0x14c8: 0x076b, 0x14c9: 0x076f, 0x14ca: 0x077b, 0x14cb: 0x0773, - 0x14cc: 0x05b3, 0x14cd: 0x165b, 0x14ce: 0x078f, 0x14cf: 0x0793, 0x14d0: 0x0797, 0x14d1: 0x07b3, - 0x14d2: 0x164c, 0x14d3: 0x05b7, 0x14d4: 0x079f, 0x14d5: 0x07bf, 0x14d6: 0x1656, 0x14d7: 0x07cf, - 0x14d8: 0x07d7, 0x14d9: 0x0737, 0x14da: 0x07df, 0x14db: 0x07e3, 0x14dc: 0x1831, 0x14dd: 0x07ff, - 0x14de: 0x0807, 0x14df: 0x05bf, 0x14e0: 0x081f, 0x14e1: 0x0823, 0x14e2: 0x082b, 0x14e3: 0x082f, - 0x14e4: 0x05c3, 0x14e5: 0x0847, 0x14e6: 0x084b, 0x14e7: 0x0857, 0x14e8: 0x0863, 0x14e9: 0x0867, - 0x14ea: 0x086b, 0x14eb: 0x0873, 0x14ec: 0x0893, 0x14ed: 0x0897, 0x14ee: 0x089f, 0x14ef: 0x08af, - 0x14f0: 0x08b7, 0x14f1: 0x08bb, 0x14f2: 0x08bb, 0x14f3: 0x08bb, 0x14f4: 0x166a, 0x14f5: 0x0e93, - 0x14f6: 0x08cf, 0x14f7: 0x08d7, 0x14f8: 0x166f, 0x14f9: 0x08e3, 0x14fa: 0x08eb, 0x14fb: 0x08f3, - 0x14fc: 0x091b, 0x14fd: 0x0907, 0x14fe: 0x0913, 0x14ff: 0x0917, - // Block 0x54, offset 0x1500 - 0x1500: 0x091f, 0x1501: 0x0927, 0x1502: 0x092b, 0x1503: 0x0933, 0x1504: 0x093b, 0x1505: 0x093f, - 0x1506: 0x093f, 0x1507: 0x0947, 0x1508: 0x094f, 0x1509: 0x0953, 0x150a: 0x095f, 0x150b: 0x0983, - 0x150c: 0x0967, 0x150d: 0x0987, 0x150e: 0x096b, 0x150f: 0x0973, 0x1510: 0x080b, 0x1511: 0x09cf, - 0x1512: 0x0997, 0x1513: 0x099b, 0x1514: 0x099f, 0x1515: 0x0993, 0x1516: 0x09a7, 0x1517: 0x09a3, - 0x1518: 0x09bb, 0x1519: 0x1674, 0x151a: 0x09d7, 0x151b: 0x09db, 0x151c: 0x09e3, 0x151d: 0x09ef, - 0x151e: 0x09f7, 0x151f: 0x0a13, 0x1520: 0x1679, 0x1521: 0x167e, 0x1522: 0x0a1f, 0x1523: 0x0a23, - 0x1524: 0x0a27, 0x1525: 0x0a1b, 0x1526: 0x0a2f, 0x1527: 0x05c7, 0x1528: 0x05cb, 0x1529: 0x0a37, - 0x152a: 0x0a3f, 0x152b: 0x0a3f, 0x152c: 0x1683, 0x152d: 0x0a5b, 0x152e: 0x0a5f, 0x152f: 0x0a63, - 0x1530: 0x0a6b, 0x1531: 0x1688, 0x1532: 0x0a73, 0x1533: 0x0a77, 0x1534: 0x0b4f, 0x1535: 0x0a7f, - 0x1536: 0x05cf, 0x1537: 0x0a8b, 0x1538: 0x0a9b, 0x1539: 0x0aa7, 0x153a: 0x0aa3, 0x153b: 0x1692, - 0x153c: 0x0aaf, 0x153d: 0x1697, 0x153e: 0x0abb, 0x153f: 0x0ab7, - // Block 0x55, offset 0x1540 - 0x1540: 0x0abf, 0x1541: 0x0acf, 0x1542: 0x0ad3, 0x1543: 0x05d3, 0x1544: 0x0ae3, 0x1545: 0x0aeb, - 0x1546: 0x0aef, 0x1547: 0x0af3, 0x1548: 0x05d7, 0x1549: 0x169c, 0x154a: 0x05db, 0x154b: 0x0b0f, - 0x154c: 0x0b13, 0x154d: 0x0b17, 0x154e: 0x0b1f, 0x154f: 0x1863, 0x1550: 0x0b37, 0x1551: 0x16a6, - 0x1552: 0x16a6, 0x1553: 0x11d7, 0x1554: 0x0b47, 0x1555: 0x0b47, 0x1556: 0x05df, 0x1557: 0x16c9, - 0x1558: 0x179b, 0x1559: 0x0b57, 0x155a: 0x0b5f, 0x155b: 0x05e3, 0x155c: 0x0b73, 0x155d: 0x0b83, - 0x155e: 0x0b87, 0x155f: 0x0b8f, 0x1560: 0x0b9f, 0x1561: 0x05eb, 0x1562: 0x05e7, 0x1563: 0x0ba3, - 0x1564: 0x16ab, 0x1565: 0x0ba7, 0x1566: 0x0bbb, 0x1567: 0x0bbf, 0x1568: 0x0bc3, 0x1569: 0x0bbf, - 0x156a: 0x0bcf, 0x156b: 0x0bd3, 0x156c: 0x0be3, 0x156d: 0x0bdb, 0x156e: 0x0bdf, 0x156f: 0x0be7, - 0x1570: 0x0beb, 0x1571: 0x0bef, 0x1572: 0x0bfb, 0x1573: 0x0bff, 0x1574: 0x0c17, 0x1575: 0x0c1f, - 0x1576: 0x0c2f, 0x1577: 0x0c43, 0x1578: 0x16ba, 0x1579: 0x0c3f, 0x157a: 0x0c33, 0x157b: 0x0c4b, - 0x157c: 0x0c53, 0x157d: 0x0c67, 0x157e: 0x16bf, 0x157f: 0x0c6f, - // Block 0x56, offset 0x1580 - 0x1580: 0x0c63, 0x1581: 0x0c5b, 0x1582: 0x05ef, 0x1583: 0x0c77, 0x1584: 0x0c7f, 0x1585: 0x0c87, - 0x1586: 0x0c7b, 0x1587: 0x05f3, 0x1588: 0x0c97, 0x1589: 0x0c9f, 0x158a: 0x16c4, 0x158b: 0x0ccb, - 0x158c: 0x0cff, 0x158d: 0x0cdb, 0x158e: 0x05ff, 0x158f: 0x0ce7, 0x1590: 0x05fb, 0x1591: 0x05f7, - 0x1592: 0x07c3, 0x1593: 0x07c7, 0x1594: 0x0d03, 0x1595: 0x0ceb, 0x1596: 0x11ab, 0x1597: 0x0663, - 0x1598: 0x0d0f, 0x1599: 0x0d13, 0x159a: 0x0d17, 0x159b: 0x0d2b, 0x159c: 0x0d23, 0x159d: 0x16dd, - 0x159e: 0x0603, 0x159f: 0x0d3f, 0x15a0: 0x0d33, 0x15a1: 0x0d4f, 0x15a2: 0x0d57, 0x15a3: 0x16e7, - 0x15a4: 0x0d5b, 0x15a5: 0x0d47, 0x15a6: 0x0d63, 0x15a7: 0x0607, 0x15a8: 0x0d67, 0x15a9: 0x0d6b, - 0x15aa: 0x0d6f, 0x15ab: 0x0d7b, 0x15ac: 0x16ec, 0x15ad: 0x0d83, 0x15ae: 0x060b, 0x15af: 0x0d8f, - 0x15b0: 0x16f1, 0x15b1: 0x0d93, 0x15b2: 0x060f, 0x15b3: 0x0d9f, 0x15b4: 0x0dab, 0x15b5: 0x0db7, - 0x15b6: 0x0dbb, 0x15b7: 0x16f6, 0x15b8: 0x168d, 0x15b9: 0x16fb, 0x15ba: 0x0ddb, 0x15bb: 0x1700, - 0x15bc: 0x0de7, 0x15bd: 0x0def, 0x15be: 0x0ddf, 0x15bf: 0x0dfb, - // Block 0x57, offset 0x15c0 - 0x15c0: 0x0e0b, 0x15c1: 0x0e1b, 0x15c2: 0x0e0f, 0x15c3: 0x0e13, 0x15c4: 0x0e1f, 0x15c5: 0x0e23, - 0x15c6: 0x1705, 0x15c7: 0x0e07, 0x15c8: 0x0e3b, 0x15c9: 0x0e3f, 0x15ca: 0x0613, 0x15cb: 0x0e53, - 0x15cc: 0x0e4f, 0x15cd: 0x170a, 0x15ce: 0x0e33, 0x15cf: 0x0e6f, 0x15d0: 0x170f, 0x15d1: 0x1714, - 0x15d2: 0x0e73, 0x15d3: 0x0e87, 0x15d4: 0x0e83, 0x15d5: 0x0e7f, 0x15d6: 0x0617, 0x15d7: 0x0e8b, - 0x15d8: 0x0e9b, 0x15d9: 0x0e97, 0x15da: 0x0ea3, 0x15db: 0x1651, 0x15dc: 0x0eb3, 0x15dd: 0x1719, - 0x15de: 0x0ebf, 0x15df: 0x1723, 0x15e0: 0x0ed3, 0x15e1: 0x0edf, 0x15e2: 0x0ef3, 0x15e3: 0x1728, - 0x15e4: 0x0f07, 0x15e5: 0x0f0b, 0x15e6: 0x172d, 0x15e7: 0x1732, 0x15e8: 0x0f27, 0x15e9: 0x0f37, - 0x15ea: 0x061b, 0x15eb: 0x0f3b, 0x15ec: 0x061f, 0x15ed: 0x061f, 0x15ee: 0x0f53, 0x15ef: 0x0f57, - 0x15f0: 0x0f5f, 0x15f1: 0x0f63, 0x15f2: 0x0f6f, 0x15f3: 0x0623, 0x15f4: 0x0f87, 0x15f5: 0x1737, - 0x15f6: 0x0fa3, 0x15f7: 0x173c, 0x15f8: 0x0faf, 0x15f9: 0x16a1, 0x15fa: 0x0fbf, 0x15fb: 0x1741, - 0x15fc: 0x1746, 0x15fd: 0x174b, 0x15fe: 0x0627, 0x15ff: 0x062b, - // Block 0x58, offset 0x1600 - 0x1600: 0x0ff7, 0x1601: 0x1755, 0x1602: 0x1750, 0x1603: 0x175a, 0x1604: 0x175f, 0x1605: 0x0fff, - 0x1606: 0x1003, 0x1607: 0x1003, 0x1608: 0x100b, 0x1609: 0x0633, 0x160a: 0x100f, 0x160b: 0x0637, - 0x160c: 0x063b, 0x160d: 0x1769, 0x160e: 0x1023, 0x160f: 0x102b, 0x1610: 0x1037, 0x1611: 0x063f, - 0x1612: 0x176e, 0x1613: 0x105b, 0x1614: 0x1773, 0x1615: 0x1778, 0x1616: 0x107b, 0x1617: 0x1093, - 0x1618: 0x0643, 0x1619: 0x109b, 0x161a: 0x109f, 0x161b: 0x10a3, 0x161c: 0x177d, 0x161d: 0x1782, - 0x161e: 0x1782, 0x161f: 0x10bb, 0x1620: 0x0647, 0x1621: 0x1787, 0x1622: 0x10cf, 0x1623: 0x10d3, - 0x1624: 0x064b, 0x1625: 0x178c, 0x1626: 0x10ef, 0x1627: 0x064f, 0x1628: 0x10ff, 0x1629: 0x10f7, - 0x162a: 0x1107, 0x162b: 0x1796, 0x162c: 0x111f, 0x162d: 0x0653, 0x162e: 0x112b, 0x162f: 0x1133, - 0x1630: 0x1143, 0x1631: 0x0657, 0x1632: 0x17a0, 0x1633: 0x17a5, 0x1634: 0x065b, 0x1635: 0x17aa, - 0x1636: 0x115b, 0x1637: 0x17af, 0x1638: 0x1167, 0x1639: 0x1173, 0x163a: 0x117b, 0x163b: 0x17b4, - 0x163c: 0x17b9, 0x163d: 0x118f, 0x163e: 0x17be, 0x163f: 0x1197, - // Block 0x59, offset 0x1640 - 0x1640: 0x16ce, 0x1641: 0x065f, 0x1642: 0x11af, 0x1643: 0x11b3, 0x1644: 0x0667, 0x1645: 0x11b7, - 0x1646: 0x0a33, 0x1647: 0x17c3, 0x1648: 0x17c8, 0x1649: 0x16d3, 0x164a: 0x16d8, 0x164b: 0x11d7, - 0x164c: 0x11db, 0x164d: 0x13f3, 0x164e: 0x066b, 0x164f: 0x1207, 0x1650: 0x1203, 0x1651: 0x120b, - 0x1652: 0x083f, 0x1653: 0x120f, 0x1654: 0x1213, 0x1655: 0x1217, 0x1656: 0x121f, 0x1657: 0x17cd, - 0x1658: 0x121b, 0x1659: 0x1223, 0x165a: 0x1237, 0x165b: 0x123b, 0x165c: 0x1227, 0x165d: 0x123f, - 0x165e: 0x1253, 0x165f: 0x1267, 0x1660: 0x1233, 0x1661: 0x1247, 0x1662: 0x124b, 0x1663: 0x124f, - 0x1664: 0x17d2, 0x1665: 0x17dc, 0x1666: 0x17d7, 0x1667: 0x066f, 0x1668: 0x126f, 0x1669: 0x1273, - 0x166a: 0x127b, 0x166b: 0x17f0, 0x166c: 0x127f, 0x166d: 0x17e1, 0x166e: 0x0673, 0x166f: 0x0677, - 0x1670: 0x17e6, 0x1671: 0x17eb, 0x1672: 0x067b, 0x1673: 0x129f, 0x1674: 0x12a3, 0x1675: 0x12a7, - 0x1676: 0x12ab, 0x1677: 0x12b7, 0x1678: 0x12b3, 0x1679: 0x12bf, 0x167a: 0x12bb, 0x167b: 0x12cb, - 0x167c: 0x12c3, 0x167d: 0x12c7, 0x167e: 0x12cf, 0x167f: 0x067f, - // Block 0x5a, offset 0x1680 - 0x1680: 0x12d7, 0x1681: 0x12db, 0x1682: 0x0683, 0x1683: 0x12eb, 0x1684: 0x12ef, 0x1685: 0x17f5, - 0x1686: 0x12fb, 0x1687: 0x12ff, 0x1688: 0x0687, 0x1689: 0x130b, 0x168a: 0x05bb, 0x168b: 0x17fa, - 0x168c: 0x17ff, 0x168d: 0x068b, 0x168e: 0x068f, 0x168f: 0x1337, 0x1690: 0x134f, 0x1691: 0x136b, - 0x1692: 0x137b, 0x1693: 0x1804, 0x1694: 0x138f, 0x1695: 0x1393, 0x1696: 0x13ab, 0x1697: 0x13b7, - 0x1698: 0x180e, 0x1699: 0x1660, 0x169a: 0x13c3, 0x169b: 0x13bf, 0x169c: 0x13cb, 0x169d: 0x1665, - 0x169e: 0x13d7, 0x169f: 0x13e3, 0x16a0: 0x1813, 0x16a1: 0x1818, 0x16a2: 0x1423, 0x16a3: 0x142f, - 0x16a4: 0x1437, 0x16a5: 0x181d, 0x16a6: 0x143b, 0x16a7: 0x1467, 0x16a8: 0x1473, 0x16a9: 0x1477, - 0x16aa: 0x146f, 0x16ab: 0x1483, 0x16ac: 0x1487, 0x16ad: 0x1822, 0x16ae: 0x1493, 0x16af: 0x0693, - 0x16b0: 0x149b, 0x16b1: 0x1827, 0x16b2: 0x0697, 0x16b3: 0x14d3, 0x16b4: 0x0ac3, 0x16b5: 0x14eb, - 0x16b6: 0x182c, 0x16b7: 0x1836, 0x16b8: 0x069b, 0x16b9: 0x069f, 0x16ba: 0x1513, 0x16bb: 0x183b, - 0x16bc: 0x06a3, 0x16bd: 0x1840, 0x16be: 0x152b, 0x16bf: 0x152b, - // Block 0x5b, offset 0x16c0 - 0x16c0: 0x1533, 0x16c1: 0x1845, 0x16c2: 0x154b, 0x16c3: 0x06a7, 0x16c4: 0x155b, 0x16c5: 0x1567, - 0x16c6: 0x156f, 0x16c7: 0x1577, 0x16c8: 0x06ab, 0x16c9: 0x184a, 0x16ca: 0x158b, 0x16cb: 0x15a7, - 0x16cc: 0x15b3, 0x16cd: 0x06af, 0x16ce: 0x06b3, 0x16cf: 0x15b7, 0x16d0: 0x184f, 0x16d1: 0x06b7, - 0x16d2: 0x1854, 0x16d3: 0x1859, 0x16d4: 0x185e, 0x16d5: 0x15db, 0x16d6: 0x06bb, 0x16d7: 0x15ef, - 0x16d8: 0x15f7, 0x16d9: 0x15fb, 0x16da: 0x1603, 0x16db: 0x160b, 0x16dc: 0x1613, 0x16dd: 0x1868, -} - -// nfkcIndex: 22 blocks, 1408 entries, 1408 bytes -// Block 0 is the zero block. -var nfkcIndex = [1408]uint8{ - // Block 0x0, offset 0x0 - // Block 0x1, offset 0x40 - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc2: 0x5a, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x5b, 0xc7: 0x04, - 0xc8: 0x05, 0xca: 0x5c, 0xcb: 0x5d, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x09, - 0xd0: 0x0a, 0xd1: 0x5e, 0xd2: 0x5f, 0xd3: 0x0b, 0xd6: 0x0c, 0xd7: 0x60, - 0xd8: 0x61, 0xd9: 0x0d, 0xdb: 0x62, 0xdc: 0x63, 0xdd: 0x64, 0xdf: 0x65, - 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: 0x66, 0x121: 0x67, 0x123: 0x68, 0x124: 0x69, 0x125: 0x6a, 0x126: 0x6b, 0x127: 0x6c, - 0x128: 0x6d, 0x129: 0x6e, 0x12a: 0x6f, 0x12b: 0x70, 0x12c: 0x6b, 0x12d: 0x71, 0x12e: 0x72, 0x12f: 0x73, - 0x131: 0x74, 0x132: 0x75, 0x133: 0x76, 0x134: 0x77, 0x135: 0x78, 0x137: 0x79, - 0x138: 0x7a, 0x139: 0x7b, 0x13a: 0x7c, 0x13b: 0x7d, 0x13c: 0x7e, 0x13d: 0x7f, 0x13e: 0x80, 0x13f: 0x81, - // Block 0x5, offset 0x140 - 0x140: 0x82, 0x142: 0x83, 0x143: 0x84, 0x144: 0x85, 0x145: 0x86, 0x146: 0x87, 0x147: 0x88, - 0x14d: 0x89, - 0x15c: 0x8a, 0x15f: 0x8b, - 0x162: 0x8c, 0x164: 0x8d, - 0x168: 0x8e, 0x169: 0x8f, 0x16a: 0x90, 0x16c: 0x0e, 0x16d: 0x91, 0x16e: 0x92, 0x16f: 0x93, - 0x170: 0x94, 0x173: 0x95, 0x174: 0x96, 0x175: 0x0f, 0x176: 0x10, 0x177: 0x97, - 0x178: 0x11, 0x179: 0x12, 0x17a: 0x13, 0x17b: 0x14, 0x17c: 0x15, 0x17d: 0x16, 0x17e: 0x17, 0x17f: 0x18, - // Block 0x6, offset 0x180 - 0x180: 0x98, 0x181: 0x99, 0x182: 0x9a, 0x183: 0x9b, 0x184: 0x19, 0x185: 0x1a, 0x186: 0x9c, 0x187: 0x9d, - 0x188: 0x9e, 0x189: 0x1b, 0x18a: 0x1c, 0x18b: 0x9f, 0x18c: 0xa0, - 0x191: 0x1d, 0x192: 0x1e, 0x193: 0xa1, - 0x1a8: 0xa2, 0x1a9: 0xa3, 0x1ab: 0xa4, - 0x1b1: 0xa5, 0x1b3: 0xa6, 0x1b5: 0xa7, 0x1b7: 0xa8, - 0x1ba: 0xa9, 0x1bb: 0xaa, 0x1bc: 0x1f, 0x1bd: 0x20, 0x1be: 0x21, 0x1bf: 0xab, - // Block 0x7, offset 0x1c0 - 0x1c0: 0xac, 0x1c1: 0x22, 0x1c2: 0x23, 0x1c3: 0x24, 0x1c4: 0xad, 0x1c5: 0x25, 0x1c6: 0x26, - 0x1c8: 0x27, 0x1c9: 0x28, 0x1ca: 0x29, 0x1cb: 0x2a, 0x1cc: 0x2b, 0x1cd: 0x2c, 0x1ce: 0x2d, 0x1cf: 0x2e, - // Block 0x8, offset 0x200 - 0x219: 0xae, 0x21a: 0xaf, 0x21b: 0xb0, 0x21d: 0xb1, 0x21f: 0xb2, - 0x220: 0xb3, 0x223: 0xb4, 0x224: 0xb5, 0x225: 0xb6, 0x226: 0xb7, 0x227: 0xb8, - 0x22a: 0xb9, 0x22b: 0xba, 0x22d: 0xbb, 0x22f: 0xbc, - 0x230: 0xbd, 0x231: 0xbe, 0x232: 0xbf, 0x233: 0xc0, 0x234: 0xc1, 0x235: 0xc2, 0x236: 0xc3, 0x237: 0xbd, - 0x238: 0xbe, 0x239: 0xbf, 0x23a: 0xc0, 0x23b: 0xc1, 0x23c: 0xc2, 0x23d: 0xc3, 0x23e: 0xbd, 0x23f: 0xbe, - // Block 0x9, offset 0x240 - 0x240: 0xbf, 0x241: 0xc0, 0x242: 0xc1, 0x243: 0xc2, 0x244: 0xc3, 0x245: 0xbd, 0x246: 0xbe, 0x247: 0xbf, - 0x248: 0xc0, 0x249: 0xc1, 0x24a: 0xc2, 0x24b: 0xc3, 0x24c: 0xbd, 0x24d: 0xbe, 0x24e: 0xbf, 0x24f: 0xc0, - 0x250: 0xc1, 0x251: 0xc2, 0x252: 0xc3, 0x253: 0xbd, 0x254: 0xbe, 0x255: 0xbf, 0x256: 0xc0, 0x257: 0xc1, - 0x258: 0xc2, 0x259: 0xc3, 0x25a: 0xbd, 0x25b: 0xbe, 0x25c: 0xbf, 0x25d: 0xc0, 0x25e: 0xc1, 0x25f: 0xc2, - 0x260: 0xc3, 0x261: 0xbd, 0x262: 0xbe, 0x263: 0xbf, 0x264: 0xc0, 0x265: 0xc1, 0x266: 0xc2, 0x267: 0xc3, - 0x268: 0xbd, 0x269: 0xbe, 0x26a: 0xbf, 0x26b: 0xc0, 0x26c: 0xc1, 0x26d: 0xc2, 0x26e: 0xc3, 0x26f: 0xbd, - 0x270: 0xbe, 0x271: 0xbf, 0x272: 0xc0, 0x273: 0xc1, 0x274: 0xc2, 0x275: 0xc3, 0x276: 0xbd, 0x277: 0xbe, - 0x278: 0xbf, 0x279: 0xc0, 0x27a: 0xc1, 0x27b: 0xc2, 0x27c: 0xc3, 0x27d: 0xbd, 0x27e: 0xbe, 0x27f: 0xbf, - // Block 0xa, offset 0x280 - 0x280: 0xc0, 0x281: 0xc1, 0x282: 0xc2, 0x283: 0xc3, 0x284: 0xbd, 0x285: 0xbe, 0x286: 0xbf, 0x287: 0xc0, - 0x288: 0xc1, 0x289: 0xc2, 0x28a: 0xc3, 0x28b: 0xbd, 0x28c: 0xbe, 0x28d: 0xbf, 0x28e: 0xc0, 0x28f: 0xc1, - 0x290: 0xc2, 0x291: 0xc3, 0x292: 0xbd, 0x293: 0xbe, 0x294: 0xbf, 0x295: 0xc0, 0x296: 0xc1, 0x297: 0xc2, - 0x298: 0xc3, 0x299: 0xbd, 0x29a: 0xbe, 0x29b: 0xbf, 0x29c: 0xc0, 0x29d: 0xc1, 0x29e: 0xc2, 0x29f: 0xc3, - 0x2a0: 0xbd, 0x2a1: 0xbe, 0x2a2: 0xbf, 0x2a3: 0xc0, 0x2a4: 0xc1, 0x2a5: 0xc2, 0x2a6: 0xc3, 0x2a7: 0xbd, - 0x2a8: 0xbe, 0x2a9: 0xbf, 0x2aa: 0xc0, 0x2ab: 0xc1, 0x2ac: 0xc2, 0x2ad: 0xc3, 0x2ae: 0xbd, 0x2af: 0xbe, - 0x2b0: 0xbf, 0x2b1: 0xc0, 0x2b2: 0xc1, 0x2b3: 0xc2, 0x2b4: 0xc3, 0x2b5: 0xbd, 0x2b6: 0xbe, 0x2b7: 0xbf, - 0x2b8: 0xc0, 0x2b9: 0xc1, 0x2ba: 0xc2, 0x2bb: 0xc3, 0x2bc: 0xbd, 0x2bd: 0xbe, 0x2be: 0xbf, 0x2bf: 0xc0, - // Block 0xb, offset 0x2c0 - 0x2c0: 0xc1, 0x2c1: 0xc2, 0x2c2: 0xc3, 0x2c3: 0xbd, 0x2c4: 0xbe, 0x2c5: 0xbf, 0x2c6: 0xc0, 0x2c7: 0xc1, - 0x2c8: 0xc2, 0x2c9: 0xc3, 0x2ca: 0xbd, 0x2cb: 0xbe, 0x2cc: 0xbf, 0x2cd: 0xc0, 0x2ce: 0xc1, 0x2cf: 0xc2, - 0x2d0: 0xc3, 0x2d1: 0xbd, 0x2d2: 0xbe, 0x2d3: 0xbf, 0x2d4: 0xc0, 0x2d5: 0xc1, 0x2d6: 0xc2, 0x2d7: 0xc3, - 0x2d8: 0xbd, 0x2d9: 0xbe, 0x2da: 0xbf, 0x2db: 0xc0, 0x2dc: 0xc1, 0x2dd: 0xc2, 0x2de: 0xc4, - // Block 0xc, offset 0x300 - 0x324: 0x2f, 0x325: 0x30, 0x326: 0x31, 0x327: 0x32, - 0x328: 0x33, 0x329: 0x34, 0x32a: 0x35, 0x32b: 0x36, 0x32c: 0x37, 0x32d: 0x38, 0x32e: 0x39, 0x32f: 0x3a, - 0x330: 0x3b, 0x331: 0x3c, 0x332: 0x3d, 0x333: 0x3e, 0x334: 0x3f, 0x335: 0x40, 0x336: 0x41, 0x337: 0x42, - 0x338: 0x43, 0x339: 0x44, 0x33a: 0x45, 0x33b: 0x46, 0x33c: 0xc5, 0x33d: 0x47, 0x33e: 0x48, 0x33f: 0x49, - // Block 0xd, offset 0x340 - 0x347: 0xc6, - 0x34b: 0xc7, 0x34d: 0xc8, - 0x368: 0xc9, 0x36b: 0xca, - // Block 0xe, offset 0x380 - 0x381: 0xcb, 0x382: 0xcc, 0x384: 0xcd, 0x385: 0xb7, 0x387: 0xce, - 0x388: 0xcf, 0x38b: 0xd0, 0x38c: 0x6b, 0x38d: 0xd1, - 0x391: 0xd2, 0x392: 0xd3, 0x393: 0xd4, 0x396: 0xd5, 0x397: 0xd6, - 0x398: 0xd7, 0x39a: 0xd8, 0x39c: 0xd9, - 0x3b0: 0xd7, - // Block 0xf, offset 0x3c0 - 0x3eb: 0xda, 0x3ec: 0xdb, - // Block 0x10, offset 0x400 - 0x432: 0xdc, - // Block 0x11, offset 0x440 - 0x445: 0xdd, 0x446: 0xde, 0x447: 0xdf, - 0x449: 0xe0, - 0x450: 0xe1, 0x451: 0xe2, 0x452: 0xe3, 0x453: 0xe4, 0x454: 0xe5, 0x455: 0xe6, 0x456: 0xe7, 0x457: 0xe8, - 0x458: 0xe9, 0x459: 0xea, 0x45a: 0x4a, 0x45b: 0xeb, 0x45c: 0xec, 0x45d: 0xed, 0x45e: 0xee, 0x45f: 0x4b, - // Block 0x12, offset 0x480 - 0x480: 0xef, - 0x4a3: 0xf0, 0x4a5: 0xf1, - 0x4b8: 0x4c, 0x4b9: 0x4d, 0x4ba: 0x4e, - // Block 0x13, offset 0x4c0 - 0x4c4: 0x4f, 0x4c5: 0xf2, 0x4c6: 0xf3, - 0x4c8: 0x50, 0x4c9: 0xf4, - // Block 0x14, offset 0x500 - 0x520: 0x51, 0x521: 0x52, 0x522: 0x53, 0x523: 0x54, 0x524: 0x55, 0x525: 0x56, 0x526: 0x57, 0x527: 0x58, - 0x528: 0x59, - // Block 0x15, offset 0x540 - 0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d, - 0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11, - 0x56f: 0x12, -} - -// nfkcSparseOffset: 155 entries, 310 bytes -var nfkcSparseOffset = []uint16{0x0, 0xe, 0x12, 0x1b, 0x25, 0x35, 0x37, 0x3c, 0x47, 0x56, 0x63, 0x6b, 0x6f, 0x74, 0x76, 0x87, 0x8f, 0x96, 0x99, 0xa0, 0xa4, 0xa8, 0xaa, 0xac, 0xb5, 0xb9, 0xc0, 0xc5, 0xc8, 0xd2, 0xd4, 0xdb, 0xe3, 0xe7, 0xe9, 0xec, 0xf0, 0xf6, 0x107, 0x113, 0x115, 0x11b, 0x11d, 0x11f, 0x121, 0x123, 0x125, 0x127, 0x129, 0x12c, 0x12f, 0x131, 0x134, 0x137, 0x13b, 0x140, 0x149, 0x14b, 0x14e, 0x150, 0x15b, 0x166, 0x176, 0x184, 0x192, 0x1a2, 0x1b0, 0x1b7, 0x1bd, 0x1cc, 0x1d0, 0x1d2, 0x1d6, 0x1d8, 0x1db, 0x1dd, 0x1e0, 0x1e2, 0x1e5, 0x1e7, 0x1e9, 0x1eb, 0x1f7, 0x201, 0x20b, 0x20e, 0x212, 0x214, 0x216, 0x218, 0x21a, 0x21d, 0x21f, 0x221, 0x223, 0x225, 0x22b, 0x22e, 0x232, 0x234, 0x23b, 0x241, 0x247, 0x24f, 0x255, 0x25b, 0x261, 0x265, 0x267, 0x269, 0x26b, 0x26d, 0x273, 0x276, 0x279, 0x281, 0x288, 0x28b, 0x28e, 0x290, 0x298, 0x29b, 0x2a2, 0x2a5, 0x2ab, 0x2ad, 0x2af, 0x2b2, 0x2b4, 0x2b6, 0x2b8, 0x2ba, 0x2c7, 0x2d1, 0x2d3, 0x2d5, 0x2d9, 0x2de, 0x2ea, 0x2ef, 0x2f8, 0x2fe, 0x303, 0x307, 0x30c, 0x310, 0x320, 0x32e, 0x33c, 0x34a, 0x350, 0x352, 0x355, 0x35f, 0x361} - -// nfkcSparseValues: 875 entries, 3500 bytes -var nfkcSparseValues = [875]valueRange{ - // Block 0x0, offset 0x0 - {value: 0x0002, lo: 0x0d}, - {value: 0x0001, lo: 0xa0, hi: 0xa0}, - {value: 0x4278, lo: 0xa8, hi: 0xa8}, - {value: 0x0083, lo: 0xaa, hi: 0xaa}, - {value: 0x4264, lo: 0xaf, hi: 0xaf}, - {value: 0x0025, lo: 0xb2, hi: 0xb3}, - {value: 0x425a, lo: 0xb4, hi: 0xb4}, - {value: 0x01dc, lo: 0xb5, hi: 0xb5}, - {value: 0x4291, lo: 0xb8, hi: 0xb8}, - {value: 0x0023, lo: 0xb9, hi: 0xb9}, - {value: 0x009f, lo: 0xba, hi: 0xba}, - {value: 0x221c, lo: 0xbc, hi: 0xbc}, - {value: 0x2210, lo: 0xbd, hi: 0xbd}, - {value: 0x22b2, lo: 0xbe, hi: 0xbe}, - // Block 0x1, offset 0xe - {value: 0x0091, lo: 0x03}, - {value: 0x46e2, lo: 0xa0, hi: 0xa1}, - {value: 0x4714, 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: 0x426e, lo: 0x98, hi: 0x98}, - {value: 0x4273, lo: 0x99, hi: 0x9a}, - {value: 0x4296, lo: 0x9b, hi: 0x9b}, - {value: 0x425f, lo: 0x9c, hi: 0x9c}, - {value: 0x4282, lo: 0x9d, hi: 0x9d}, - {value: 0x0113, lo: 0xa0, hi: 0xa0}, - {value: 0x0099, lo: 0xa1, hi: 0xa1}, - {value: 0x00a7, lo: 0xa2, hi: 0xa3}, - {value: 0x0167, 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: 0x37a5, lo: 0x90, hi: 0x90}, - {value: 0x37b1, lo: 0x91, hi: 0x91}, - {value: 0x379f, lo: 0x93, hi: 0x93}, - {value: 0xa000, lo: 0x96, hi: 0x96}, - {value: 0x3817, lo: 0x97, hi: 0x97}, - {value: 0x37e1, lo: 0x9c, hi: 0x9c}, - {value: 0x37c9, lo: 0x9d, hi: 0x9d}, - {value: 0x37f3, lo: 0x9e, hi: 0x9e}, - {value: 0xa000, lo: 0xb4, hi: 0xb5}, - {value: 0x381d, lo: 0xb6, hi: 0xb6}, - {value: 0x3823, lo: 0xb7, hi: 0xb7}, - // Block 0x5, offset 0x35 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x83, hi: 0x87}, - // Block 0x6, offset 0x37 - {value: 0x0001, lo: 0x04}, - {value: 0x8113, lo: 0x81, hi: 0x82}, - {value: 0x8132, lo: 0x84, hi: 0x84}, - {value: 0x812d, lo: 0x85, hi: 0x85}, - {value: 0x810d, lo: 0x87, hi: 0x87}, - // Block 0x7, offset 0x3c - {value: 0x0000, lo: 0x0a}, - {value: 0x8132, lo: 0x90, hi: 0x97}, - {value: 0x8119, lo: 0x98, hi: 0x98}, - {value: 0x811a, lo: 0x99, hi: 0x99}, - {value: 0x811b, lo: 0x9a, hi: 0x9a}, - {value: 0x3841, lo: 0xa2, hi: 0xa2}, - {value: 0x3847, lo: 0xa3, hi: 0xa3}, - {value: 0x3853, lo: 0xa4, hi: 0xa4}, - {value: 0x384d, lo: 0xa5, hi: 0xa5}, - {value: 0x3859, lo: 0xa6, hi: 0xa6}, - {value: 0xa000, lo: 0xa7, hi: 0xa7}, - // Block 0x8, offset 0x47 - {value: 0x0000, lo: 0x0e}, - {value: 0x386b, lo: 0x80, hi: 0x80}, - {value: 0xa000, lo: 0x81, hi: 0x81}, - {value: 0x385f, lo: 0x82, hi: 0x82}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x3865, lo: 0x93, hi: 0x93}, - {value: 0xa000, lo: 0x95, hi: 0x95}, - {value: 0x8132, lo: 0x96, hi: 0x9c}, - {value: 0x8132, lo: 0x9f, hi: 0xa2}, - {value: 0x812d, lo: 0xa3, hi: 0xa3}, - {value: 0x8132, lo: 0xa4, hi: 0xa4}, - {value: 0x8132, lo: 0xa7, hi: 0xa8}, - {value: 0x812d, lo: 0xaa, hi: 0xaa}, - {value: 0x8132, lo: 0xab, hi: 0xac}, - {value: 0x812d, lo: 0xad, hi: 0xad}, - // Block 0x9, offset 0x56 - {value: 0x0000, lo: 0x0c}, - {value: 0x811f, lo: 0x91, hi: 0x91}, - {value: 0x8132, lo: 0xb0, hi: 0xb0}, - {value: 0x812d, lo: 0xb1, hi: 0xb1}, - {value: 0x8132, lo: 0xb2, hi: 0xb3}, - {value: 0x812d, lo: 0xb4, hi: 0xb4}, - {value: 0x8132, lo: 0xb5, hi: 0xb6}, - {value: 0x812d, lo: 0xb7, hi: 0xb9}, - {value: 0x8132, lo: 0xba, hi: 0xba}, - {value: 0x812d, lo: 0xbb, hi: 0xbc}, - {value: 0x8132, lo: 0xbd, hi: 0xbd}, - {value: 0x812d, lo: 0xbe, hi: 0xbe}, - {value: 0x8132, lo: 0xbf, hi: 0xbf}, - // Block 0xa, offset 0x63 - {value: 0x0005, lo: 0x07}, - {value: 0x8132, lo: 0x80, hi: 0x80}, - {value: 0x8132, lo: 0x81, hi: 0x81}, - {value: 0x812d, lo: 0x82, hi: 0x83}, - {value: 0x812d, lo: 0x84, hi: 0x85}, - {value: 0x812d, lo: 0x86, hi: 0x87}, - {value: 0x812d, lo: 0x88, hi: 0x89}, - {value: 0x8132, lo: 0x8a, hi: 0x8a}, - // Block 0xb, offset 0x6b - {value: 0x0000, lo: 0x03}, - {value: 0x8132, lo: 0xab, hi: 0xb1}, - {value: 0x812d, lo: 0xb2, hi: 0xb2}, - {value: 0x8132, lo: 0xb3, hi: 0xb3}, - // Block 0xc, offset 0x6f - {value: 0x0000, lo: 0x04}, - {value: 0x8132, lo: 0x96, hi: 0x99}, - {value: 0x8132, lo: 0x9b, hi: 0xa3}, - {value: 0x8132, lo: 0xa5, hi: 0xa7}, - {value: 0x8132, lo: 0xa9, hi: 0xad}, - // Block 0xd, offset 0x74 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x99, hi: 0x9b}, - // Block 0xe, offset 0x76 - {value: 0x0000, lo: 0x10}, - {value: 0x8132, lo: 0x94, hi: 0xa1}, - {value: 0x812d, lo: 0xa3, hi: 0xa3}, - {value: 0x8132, lo: 0xa4, hi: 0xa5}, - {value: 0x812d, lo: 0xa6, hi: 0xa6}, - {value: 0x8132, lo: 0xa7, hi: 0xa8}, - {value: 0x812d, lo: 0xa9, hi: 0xa9}, - {value: 0x8132, lo: 0xaa, hi: 0xac}, - {value: 0x812d, lo: 0xad, hi: 0xaf}, - {value: 0x8116, lo: 0xb0, hi: 0xb0}, - {value: 0x8117, lo: 0xb1, hi: 0xb1}, - {value: 0x8118, lo: 0xb2, hi: 0xb2}, - {value: 0x8132, lo: 0xb3, hi: 0xb5}, - {value: 0x812d, lo: 0xb6, hi: 0xb6}, - {value: 0x8132, lo: 0xb7, hi: 0xb8}, - {value: 0x812d, lo: 0xb9, hi: 0xba}, - {value: 0x8132, lo: 0xbb, hi: 0xbf}, - // Block 0xf, offset 0x87 - {value: 0x0000, lo: 0x07}, - {value: 0xa000, lo: 0xa8, hi: 0xa8}, - {value: 0x3ed8, lo: 0xa9, hi: 0xa9}, - {value: 0xa000, lo: 0xb0, hi: 0xb0}, - {value: 0x3ee0, lo: 0xb1, hi: 0xb1}, - {value: 0xa000, lo: 0xb3, hi: 0xb3}, - {value: 0x3ee8, lo: 0xb4, hi: 0xb4}, - {value: 0x9902, lo: 0xbc, hi: 0xbc}, - // Block 0x10, offset 0x8f - {value: 0x0008, lo: 0x06}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x8132, lo: 0x91, hi: 0x91}, - {value: 0x812d, lo: 0x92, hi: 0x92}, - {value: 0x8132, lo: 0x93, hi: 0x93}, - {value: 0x8132, lo: 0x94, hi: 0x94}, - {value: 0x451c, lo: 0x98, hi: 0x9f}, - // Block 0x11, offset 0x96 - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x12, offset 0x99 - {value: 0x0008, lo: 0x06}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2c9e, lo: 0x8b, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - {value: 0x455c, lo: 0x9c, hi: 0x9d}, - {value: 0x456c, lo: 0x9f, hi: 0x9f}, - // Block 0x13, offset 0xa0 - {value: 0x0000, lo: 0x03}, - {value: 0x4594, lo: 0xb3, hi: 0xb3}, - {value: 0x459c, lo: 0xb6, hi: 0xb6}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - // Block 0x14, offset 0xa4 - {value: 0x0008, lo: 0x03}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x4574, lo: 0x99, hi: 0x9b}, - {value: 0x458c, lo: 0x9e, hi: 0x9e}, - // Block 0x15, offset 0xa8 - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - // Block 0x16, offset 0xaa - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - // Block 0x17, offset 0xac - {value: 0x0000, lo: 0x08}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2cb6, lo: 0x88, hi: 0x88}, - {value: 0x2cae, lo: 0x8b, hi: 0x8b}, - {value: 0x2cbe, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x96, hi: 0x97}, - {value: 0x45a4, lo: 0x9c, hi: 0x9c}, - {value: 0x45ac, lo: 0x9d, hi: 0x9d}, - // Block 0x18, offset 0xb5 - {value: 0x0000, lo: 0x03}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x2cc6, lo: 0x94, hi: 0x94}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x19, offset 0xb9 - {value: 0x0000, lo: 0x06}, - {value: 0xa000, lo: 0x86, hi: 0x87}, - {value: 0x2cce, lo: 0x8a, hi: 0x8a}, - {value: 0x2cde, lo: 0x8b, hi: 0x8b}, - {value: 0x2cd6, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - // Block 0x1a, offset 0xc0 - {value: 0x1801, lo: 0x04}, - {value: 0xa000, lo: 0x86, hi: 0x86}, - {value: 0x3ef0, lo: 0x88, hi: 0x88}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x8120, lo: 0x95, hi: 0x96}, - // Block 0x1b, offset 0xc5 - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - {value: 0xa000, lo: 0xbf, hi: 0xbf}, - // Block 0x1c, offset 0xc8 - {value: 0x0000, lo: 0x09}, - {value: 0x2ce6, lo: 0x80, hi: 0x80}, - {value: 0x9900, lo: 0x82, hi: 0x82}, - {value: 0xa000, lo: 0x86, hi: 0x86}, - {value: 0x2cee, lo: 0x87, hi: 0x87}, - {value: 0x2cf6, lo: 0x88, hi: 0x88}, - {value: 0x2f50, lo: 0x8a, hi: 0x8a}, - {value: 0x2dd8, lo: 0x8b, hi: 0x8b}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x95, hi: 0x96}, - // Block 0x1d, offset 0xd2 - {value: 0x0000, lo: 0x01}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x1e, offset 0xd4 - {value: 0x0000, lo: 0x06}, - {value: 0xa000, lo: 0x86, hi: 0x87}, - {value: 0x2cfe, lo: 0x8a, hi: 0x8a}, - {value: 0x2d0e, lo: 0x8b, hi: 0x8b}, - {value: 0x2d06, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - // Block 0x1f, offset 0xdb - {value: 0x6bea, lo: 0x07}, - {value: 0x9904, lo: 0x8a, hi: 0x8a}, - {value: 0x9900, lo: 0x8f, hi: 0x8f}, - {value: 0xa000, lo: 0x99, hi: 0x99}, - {value: 0x3ef8, lo: 0x9a, hi: 0x9a}, - {value: 0x2f58, lo: 0x9c, hi: 0x9c}, - {value: 0x2de3, lo: 0x9d, hi: 0x9d}, - {value: 0x2d16, lo: 0x9e, hi: 0x9f}, - // Block 0x20, offset 0xe3 - {value: 0x0000, lo: 0x03}, - {value: 0x2621, lo: 0xb3, hi: 0xb3}, - {value: 0x8122, lo: 0xb8, hi: 0xb9}, - {value: 0x8104, lo: 0xba, hi: 0xba}, - // Block 0x21, offset 0xe7 - {value: 0x0000, lo: 0x01}, - {value: 0x8123, lo: 0x88, hi: 0x8b}, - // Block 0x22, offset 0xe9 - {value: 0x0000, lo: 0x02}, - {value: 0x2636, lo: 0xb3, hi: 0xb3}, - {value: 0x8124, lo: 0xb8, hi: 0xb9}, - // Block 0x23, offset 0xec - {value: 0x0000, lo: 0x03}, - {value: 0x8125, lo: 0x88, hi: 0x8b}, - {value: 0x2628, lo: 0x9c, hi: 0x9c}, - {value: 0x262f, lo: 0x9d, hi: 0x9d}, - // Block 0x24, offset 0xf0 - {value: 0x0000, lo: 0x05}, - {value: 0x030b, lo: 0x8c, hi: 0x8c}, - {value: 0x812d, lo: 0x98, hi: 0x99}, - {value: 0x812d, lo: 0xb5, hi: 0xb5}, - {value: 0x812d, lo: 0xb7, hi: 0xb7}, - {value: 0x812b, lo: 0xb9, hi: 0xb9}, - // Block 0x25, offset 0xf6 - {value: 0x0000, lo: 0x10}, - {value: 0x2644, lo: 0x83, hi: 0x83}, - {value: 0x264b, lo: 0x8d, hi: 0x8d}, - {value: 0x2652, lo: 0x92, hi: 0x92}, - {value: 0x2659, lo: 0x97, hi: 0x97}, - {value: 0x2660, lo: 0x9c, hi: 0x9c}, - {value: 0x263d, lo: 0xa9, hi: 0xa9}, - {value: 0x8126, lo: 0xb1, hi: 0xb1}, - {value: 0x8127, lo: 0xb2, hi: 0xb2}, - {value: 0x4a84, lo: 0xb3, hi: 0xb3}, - {value: 0x8128, lo: 0xb4, hi: 0xb4}, - {value: 0x4a8d, lo: 0xb5, hi: 0xb5}, - {value: 0x45b4, lo: 0xb6, hi: 0xb6}, - {value: 0x45f4, lo: 0xb7, hi: 0xb7}, - {value: 0x45bc, lo: 0xb8, hi: 0xb8}, - {value: 0x45ff, lo: 0xb9, hi: 0xb9}, - {value: 0x8127, lo: 0xba, hi: 0xbd}, - // Block 0x26, offset 0x107 - {value: 0x0000, lo: 0x0b}, - {value: 0x8127, lo: 0x80, hi: 0x80}, - {value: 0x4a96, lo: 0x81, hi: 0x81}, - {value: 0x8132, lo: 0x82, hi: 0x83}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0x86, hi: 0x87}, - {value: 0x266e, lo: 0x93, hi: 0x93}, - {value: 0x2675, lo: 0x9d, hi: 0x9d}, - {value: 0x267c, lo: 0xa2, hi: 0xa2}, - {value: 0x2683, lo: 0xa7, hi: 0xa7}, - {value: 0x268a, lo: 0xac, hi: 0xac}, - {value: 0x2667, lo: 0xb9, hi: 0xb9}, - // Block 0x27, offset 0x113 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x86, hi: 0x86}, - // Block 0x28, offset 0x115 - {value: 0x0000, lo: 0x05}, - {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x2d1e, lo: 0xa6, hi: 0xa6}, - {value: 0x9900, lo: 0xae, hi: 0xae}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - {value: 0x8104, lo: 0xb9, hi: 0xba}, - // Block 0x29, offset 0x11b - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x8d, hi: 0x8d}, - // Block 0x2a, offset 0x11d - {value: 0x0000, lo: 0x01}, - {value: 0x030f, lo: 0xbc, hi: 0xbc}, - // Block 0x2b, offset 0x11f - {value: 0x0000, lo: 0x01}, - {value: 0xa000, lo: 0x80, hi: 0x92}, - // Block 0x2c, offset 0x121 - {value: 0x0000, lo: 0x01}, - {value: 0xb900, lo: 0xa1, hi: 0xb5}, - // Block 0x2d, offset 0x123 - {value: 0x0000, lo: 0x01}, - {value: 0x9900, lo: 0xa8, hi: 0xbf}, - // Block 0x2e, offset 0x125 - {value: 0x0000, lo: 0x01}, - {value: 0x9900, lo: 0x80, hi: 0x82}, - // Block 0x2f, offset 0x127 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x9d, hi: 0x9f}, - // Block 0x30, offset 0x129 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x94, hi: 0x94}, - {value: 0x8104, lo: 0xb4, hi: 0xb4}, - // Block 0x31, offset 0x12c - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x92, hi: 0x92}, - {value: 0x8132, lo: 0x9d, hi: 0x9d}, - // Block 0x32, offset 0x12f - {value: 0x0000, lo: 0x01}, - {value: 0x8131, lo: 0xa9, hi: 0xa9}, - // Block 0x33, offset 0x131 - {value: 0x0004, lo: 0x02}, - {value: 0x812e, lo: 0xb9, hi: 0xba}, - {value: 0x812d, lo: 0xbb, hi: 0xbb}, - // Block 0x34, offset 0x134 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x97, hi: 0x97}, - {value: 0x812d, lo: 0x98, hi: 0x98}, - // Block 0x35, offset 0x137 - {value: 0x0000, lo: 0x03}, - {value: 0x8104, lo: 0xa0, hi: 0xa0}, - {value: 0x8132, lo: 0xb5, hi: 0xbc}, - {value: 0x812d, lo: 0xbf, hi: 0xbf}, - // Block 0x36, offset 0x13b - {value: 0x0000, lo: 0x04}, - {value: 0x8132, lo: 0xb0, hi: 0xb4}, - {value: 0x812d, lo: 0xb5, hi: 0xba}, - {value: 0x8132, lo: 0xbb, hi: 0xbc}, - {value: 0x812d, lo: 0xbd, hi: 0xbd}, - // Block 0x37, offset 0x140 - {value: 0x0000, lo: 0x08}, - {value: 0x2d66, lo: 0x80, hi: 0x80}, - {value: 0x2d6e, lo: 0x81, hi: 0x81}, - {value: 0xa000, lo: 0x82, hi: 0x82}, - {value: 0x2d76, lo: 0x83, hi: 0x83}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0xab, hi: 0xab}, - {value: 0x812d, lo: 0xac, hi: 0xac}, - {value: 0x8132, lo: 0xad, hi: 0xb3}, - // Block 0x38, offset 0x149 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xaa, hi: 0xab}, - // Block 0x39, offset 0x14b - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xa6, hi: 0xa6}, - {value: 0x8104, lo: 0xb2, hi: 0xb3}, - // Block 0x3a, offset 0x14e - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - // Block 0x3b, offset 0x150 - {value: 0x0000, lo: 0x0a}, - {value: 0x8132, lo: 0x90, hi: 0x92}, - {value: 0x8101, lo: 0x94, hi: 0x94}, - {value: 0x812d, lo: 0x95, hi: 0x99}, - {value: 0x8132, lo: 0x9a, hi: 0x9b}, - {value: 0x812d, lo: 0x9c, hi: 0x9f}, - {value: 0x8132, lo: 0xa0, hi: 0xa0}, - {value: 0x8101, lo: 0xa2, hi: 0xa8}, - {value: 0x812d, lo: 0xad, hi: 0xad}, - {value: 0x8132, lo: 0xb4, hi: 0xb4}, - {value: 0x8132, lo: 0xb8, hi: 0xb9}, - // Block 0x3c, offset 0x15b - {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 0x166 - {value: 0x0000, lo: 0x0f}, - {value: 0x8132, lo: 0x80, hi: 0x81}, - {value: 0x812d, lo: 0x82, hi: 0x82}, - {value: 0x8132, lo: 0x83, hi: 0x89}, - {value: 0x812d, lo: 0x8a, hi: 0x8a}, - {value: 0x8132, lo: 0x8b, hi: 0x8c}, - {value: 0x8135, lo: 0x8d, hi: 0x8d}, - {value: 0x812a, lo: 0x8e, hi: 0x8e}, - {value: 0x812d, lo: 0x8f, hi: 0x8f}, - {value: 0x8129, lo: 0x90, hi: 0x90}, - {value: 0x8132, lo: 0x91, hi: 0xb5}, - {value: 0x8132, lo: 0xbb, hi: 0xbb}, - {value: 0x8134, lo: 0xbc, hi: 0xbc}, - {value: 0x812d, lo: 0xbd, hi: 0xbd}, - {value: 0x8132, lo: 0xbe, hi: 0xbe}, - {value: 0x812d, lo: 0xbf, hi: 0xbf}, - // Block 0x3e, offset 0x176 - {value: 0x0000, lo: 0x0d}, - {value: 0x0001, lo: 0x80, hi: 0x8a}, - {value: 0x043b, lo: 0x91, hi: 0x91}, - {value: 0x429b, lo: 0x97, hi: 0x97}, - {value: 0x001d, lo: 0xa4, hi: 0xa4}, - {value: 0x1873, lo: 0xa5, hi: 0xa5}, - {value: 0x1b5c, lo: 0xa6, hi: 0xa6}, - {value: 0x0001, lo: 0xaf, hi: 0xaf}, - {value: 0x2691, lo: 0xb3, hi: 0xb3}, - {value: 0x27fe, lo: 0xb4, hi: 0xb4}, - {value: 0x2698, lo: 0xb6, hi: 0xb6}, - {value: 0x2808, lo: 0xb7, hi: 0xb7}, - {value: 0x186d, lo: 0xbc, hi: 0xbc}, - {value: 0x4269, lo: 0xbe, hi: 0xbe}, - // Block 0x3f, offset 0x184 - {value: 0x0002, lo: 0x0d}, - {value: 0x1933, lo: 0x87, hi: 0x87}, - {value: 0x1930, lo: 0x88, hi: 0x88}, - {value: 0x1870, lo: 0x89, hi: 0x89}, - {value: 0x298e, 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: 0x0467, lo: 0xbb, hi: 0xbb}, - {value: 0x003b, lo: 0xbc, hi: 0xbc}, - {value: 0x0011, lo: 0xbd, hi: 0xbe}, - {value: 0x009d, lo: 0xbf, hi: 0xbf}, - // Block 0x40, offset 0x192 - {value: 0x0002, lo: 0x0f}, - {value: 0x0021, lo: 0x80, hi: 0x89}, - {value: 0x0017, lo: 0x8a, hi: 0x8a}, - {value: 0x0467, 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: 0x1999, lo: 0xa8, hi: 0xa8}, - // Block 0x41, offset 0x1a2 - {value: 0x0000, lo: 0x0d}, - {value: 0x8132, lo: 0x90, hi: 0x91}, - {value: 0x8101, lo: 0x92, hi: 0x93}, - {value: 0x8132, lo: 0x94, hi: 0x97}, - {value: 0x8101, lo: 0x98, hi: 0x9a}, - {value: 0x8132, lo: 0x9b, hi: 0x9c}, - {value: 0x8132, lo: 0xa1, hi: 0xa1}, - {value: 0x8101, lo: 0xa5, hi: 0xa6}, - {value: 0x8132, lo: 0xa7, hi: 0xa7}, - {value: 0x812d, lo: 0xa8, hi: 0xa8}, - {value: 0x8132, lo: 0xa9, hi: 0xa9}, - {value: 0x8101, lo: 0xaa, hi: 0xab}, - {value: 0x812d, lo: 0xac, hi: 0xaf}, - {value: 0x8132, lo: 0xb0, hi: 0xb0}, - // Block 0x42, offset 0x1b0 - {value: 0x0007, lo: 0x06}, - {value: 0x2180, lo: 0x89, hi: 0x89}, - {value: 0xa000, lo: 0x90, hi: 0x90}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0xa000, lo: 0x94, hi: 0x94}, - {value: 0x3bb9, lo: 0x9a, hi: 0x9b}, - {value: 0x3bc7, lo: 0xae, hi: 0xae}, - // Block 0x43, offset 0x1b7 - {value: 0x000e, lo: 0x05}, - {value: 0x3bce, lo: 0x8d, hi: 0x8e}, - {value: 0x3bd5, lo: 0x8f, hi: 0x8f}, - {value: 0xa000, lo: 0x90, hi: 0x90}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0xa000, lo: 0x94, hi: 0x94}, - // Block 0x44, offset 0x1bd - {value: 0x0173, lo: 0x0e}, - {value: 0xa000, lo: 0x83, hi: 0x83}, - {value: 0x3be3, lo: 0x84, hi: 0x84}, - {value: 0xa000, lo: 0x88, hi: 0x88}, - {value: 0x3bea, lo: 0x89, hi: 0x89}, - {value: 0xa000, lo: 0x8b, hi: 0x8b}, - {value: 0x3bf1, lo: 0x8c, hi: 0x8c}, - {value: 0xa000, lo: 0xa3, hi: 0xa3}, - {value: 0x3bf8, lo: 0xa4, hi: 0xa4}, - {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x3bff, lo: 0xa6, hi: 0xa6}, - {value: 0x269f, lo: 0xac, hi: 0xad}, - {value: 0x26a6, lo: 0xaf, hi: 0xaf}, - {value: 0x281c, lo: 0xb0, hi: 0xb0}, - {value: 0xa000, lo: 0xbc, hi: 0xbc}, - // Block 0x45, offset 0x1cc - {value: 0x0007, lo: 0x03}, - {value: 0x3c68, lo: 0xa0, hi: 0xa1}, - {value: 0x3c92, lo: 0xa2, hi: 0xa3}, - {value: 0x3cbc, lo: 0xaa, hi: 0xad}, - // Block 0x46, offset 0x1d0 - {value: 0x0004, lo: 0x01}, - {value: 0x048b, lo: 0xa9, hi: 0xaa}, - // Block 0x47, offset 0x1d2 - {value: 0x0002, lo: 0x03}, - {value: 0x0057, lo: 0x80, hi: 0x8f}, - {value: 0x0083, lo: 0x90, hi: 0xa9}, - {value: 0x0021, lo: 0xaa, hi: 0xaa}, - // Block 0x48, offset 0x1d6 - {value: 0x0000, lo: 0x01}, - {value: 0x299b, lo: 0x8c, hi: 0x8c}, - // Block 0x49, offset 0x1d8 - {value: 0x0263, lo: 0x02}, - {value: 0x1b8c, lo: 0xb4, hi: 0xb4}, - {value: 0x192d, lo: 0xb5, hi: 0xb6}, - // Block 0x4a, offset 0x1db - {value: 0x0000, lo: 0x01}, - {value: 0x44dd, lo: 0x9c, hi: 0x9c}, - // Block 0x4b, offset 0x1dd - {value: 0x0000, lo: 0x02}, - {value: 0x0095, lo: 0xbc, hi: 0xbc}, - {value: 0x006d, lo: 0xbd, hi: 0xbd}, - // Block 0x4c, offset 0x1e0 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xaf, hi: 0xb1}, - // Block 0x4d, offset 0x1e2 - {value: 0x0000, lo: 0x02}, - {value: 0x047f, lo: 0xaf, hi: 0xaf}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x4e, offset 0x1e5 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xa0, hi: 0xbf}, - // Block 0x4f, offset 0x1e7 - {value: 0x0000, lo: 0x01}, - {value: 0x0dc3, lo: 0x9f, hi: 0x9f}, - // Block 0x50, offset 0x1e9 - {value: 0x0000, lo: 0x01}, - {value: 0x162f, lo: 0xb3, hi: 0xb3}, - // Block 0x51, offset 0x1eb - {value: 0x0004, lo: 0x0b}, - {value: 0x1597, lo: 0x80, hi: 0x82}, - {value: 0x15af, lo: 0x83, hi: 0x83}, - {value: 0x15c7, lo: 0x84, hi: 0x85}, - {value: 0x15d7, lo: 0x86, hi: 0x89}, - {value: 0x15eb, lo: 0x8a, hi: 0x8c}, - {value: 0x15ff, lo: 0x8d, hi: 0x8d}, - {value: 0x1607, lo: 0x8e, hi: 0x8e}, - {value: 0x160f, lo: 0x8f, hi: 0x90}, - {value: 0x161b, lo: 0x91, hi: 0x93}, - {value: 0x162b, lo: 0x94, hi: 0x94}, - {value: 0x1633, lo: 0x95, hi: 0x95}, - // Block 0x52, offset 0x1f7 - {value: 0x0004, lo: 0x09}, - {value: 0x0001, lo: 0x80, hi: 0x80}, - {value: 0x812c, lo: 0xaa, hi: 0xaa}, - {value: 0x8131, lo: 0xab, hi: 0xab}, - {value: 0x8133, lo: 0xac, hi: 0xac}, - {value: 0x812e, lo: 0xad, hi: 0xad}, - {value: 0x812f, lo: 0xae, hi: 0xae}, - {value: 0x812f, lo: 0xaf, hi: 0xaf}, - {value: 0x04b3, lo: 0xb6, hi: 0xb6}, - {value: 0x0887, lo: 0xb8, hi: 0xba}, - // Block 0x53, offset 0x201 - {value: 0x0006, lo: 0x09}, - {value: 0x0313, lo: 0xb1, hi: 0xb1}, - {value: 0x0317, lo: 0xb2, hi: 0xb2}, - {value: 0x4a3b, lo: 0xb3, hi: 0xb3}, - {value: 0x031b, lo: 0xb4, hi: 0xb4}, - {value: 0x4a41, lo: 0xb5, hi: 0xb6}, - {value: 0x031f, lo: 0xb7, hi: 0xb7}, - {value: 0x0323, lo: 0xb8, hi: 0xb8}, - {value: 0x0327, lo: 0xb9, hi: 0xb9}, - {value: 0x4a4d, lo: 0xba, hi: 0xbf}, - // Block 0x54, offset 0x20b - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0xaf, hi: 0xaf}, - {value: 0x8132, lo: 0xb4, hi: 0xbd}, - // Block 0x55, offset 0x20e - {value: 0x0000, lo: 0x03}, - {value: 0x020f, lo: 0x9c, hi: 0x9c}, - {value: 0x0212, lo: 0x9d, hi: 0x9d}, - {value: 0x8132, lo: 0x9e, hi: 0x9f}, - // Block 0x56, offset 0x212 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb0, hi: 0xb1}, - // Block 0x57, offset 0x214 - {value: 0x0000, lo: 0x01}, - {value: 0x163b, lo: 0xb0, hi: 0xb0}, - // Block 0x58, offset 0x216 - {value: 0x000c, lo: 0x01}, - {value: 0x00d7, lo: 0xb8, hi: 0xb9}, - // Block 0x59, offset 0x218 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x86, hi: 0x86}, - // Block 0x5a, offset 0x21a - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0xa0, hi: 0xb1}, - // Block 0x5b, offset 0x21d - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xab, hi: 0xad}, - // Block 0x5c, offset 0x21f - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x93, hi: 0x93}, - // Block 0x5d, offset 0x221 - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xb3, hi: 0xb3}, - // Block 0x5e, offset 0x223 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x80, hi: 0x80}, - // Block 0x5f, offset 0x225 - {value: 0x0000, lo: 0x05}, - {value: 0x8132, lo: 0xb0, hi: 0xb0}, - {value: 0x8132, lo: 0xb2, hi: 0xb3}, - {value: 0x812d, lo: 0xb4, hi: 0xb4}, - {value: 0x8132, lo: 0xb7, hi: 0xb8}, - {value: 0x8132, lo: 0xbe, hi: 0xbf}, - // Block 0x60, offset 0x22b - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x81, hi: 0x81}, - {value: 0x8104, lo: 0xb6, hi: 0xb6}, - // Block 0x61, offset 0x22e - {value: 0x0008, lo: 0x03}, - {value: 0x1637, lo: 0x9c, hi: 0x9d}, - {value: 0x0125, lo: 0x9e, hi: 0x9e}, - {value: 0x1643, lo: 0x9f, hi: 0x9f}, - // Block 0x62, offset 0x232 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xad, hi: 0xad}, - // Block 0x63, offset 0x234 - {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 0x64, offset 0x23b - {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 0x65, offset 0x241 - {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 0x66, offset 0x247 - {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 0x67, offset 0x24f - {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 0x68, offset 0x255 - {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 0x69, offset 0x25b - {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 0x6a, offset 0x261 - {value: 0x0000, lo: 0x03}, - {value: 0xc600, lo: 0x80, hi: 0x87}, - {value: 0xe500, lo: 0x88, hi: 0x88}, - {value: 0xc600, lo: 0x89, hi: 0xa3}, - // Block 0x6b, offset 0x265 - {value: 0x0002, lo: 0x01}, - {value: 0x0003, lo: 0x81, hi: 0xbf}, - // Block 0x6c, offset 0x267 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xbd, hi: 0xbd}, - // Block 0x6d, offset 0x269 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xa0, hi: 0xa0}, - // Block 0x6e, offset 0x26b - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb6, hi: 0xba}, - // Block 0x6f, offset 0x26d - {value: 0x002c, lo: 0x05}, - {value: 0x812d, lo: 0x8d, hi: 0x8d}, - {value: 0x8132, lo: 0x8f, hi: 0x8f}, - {value: 0x8132, lo: 0xb8, hi: 0xb8}, - {value: 0x8101, lo: 0xb9, hi: 0xba}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x70, offset 0x273 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0xa5, hi: 0xa5}, - {value: 0x812d, lo: 0xa6, hi: 0xa6}, - // Block 0x71, offset 0x276 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x86, hi: 0x86}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x72, offset 0x279 - {value: 0x17fe, lo: 0x07}, - {value: 0xa000, lo: 0x99, hi: 0x99}, - {value: 0x4238, lo: 0x9a, hi: 0x9a}, - {value: 0xa000, lo: 0x9b, hi: 0x9b}, - {value: 0x4242, lo: 0x9c, hi: 0x9c}, - {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x424c, lo: 0xab, hi: 0xab}, - {value: 0x8104, lo: 0xb9, hi: 0xba}, - // Block 0x73, offset 0x281 - {value: 0x0000, lo: 0x06}, - {value: 0x8132, lo: 0x80, hi: 0x82}, - {value: 0x9900, lo: 0xa7, hi: 0xa7}, - {value: 0x2d7e, lo: 0xae, hi: 0xae}, - {value: 0x2d88, lo: 0xaf, hi: 0xaf}, - {value: 0xa000, lo: 0xb1, hi: 0xb2}, - {value: 0x8104, lo: 0xb3, hi: 0xb4}, - // Block 0x74, offset 0x288 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x80, hi: 0x80}, - {value: 0x8102, lo: 0x8a, hi: 0x8a}, - // Block 0x75, offset 0x28b - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xb5, hi: 0xb5}, - {value: 0x8102, lo: 0xb6, hi: 0xb6}, - // Block 0x76, offset 0x28e - {value: 0x0002, lo: 0x01}, - {value: 0x8102, lo: 0xa9, hi: 0xaa}, - // Block 0x77, offset 0x290 - {value: 0x0000, lo: 0x07}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2d92, lo: 0x8b, hi: 0x8b}, - {value: 0x2d9c, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - {value: 0x8132, lo: 0xa6, hi: 0xac}, - {value: 0x8132, lo: 0xb0, hi: 0xb4}, - // Block 0x78, offset 0x298 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x82, hi: 0x82}, - {value: 0x8102, lo: 0x86, hi: 0x86}, - // Block 0x79, offset 0x29b - {value: 0x6b5a, lo: 0x06}, - {value: 0x9900, lo: 0xb0, hi: 0xb0}, - {value: 0xa000, lo: 0xb9, hi: 0xb9}, - {value: 0x9900, lo: 0xba, hi: 0xba}, - {value: 0x2db0, lo: 0xbb, hi: 0xbb}, - {value: 0x2da6, lo: 0xbc, hi: 0xbd}, - {value: 0x2dba, lo: 0xbe, hi: 0xbe}, - // Block 0x7a, offset 0x2a2 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x82, hi: 0x82}, - {value: 0x8102, lo: 0x83, hi: 0x83}, - // Block 0x7b, offset 0x2a5 - {value: 0x0000, lo: 0x05}, - {value: 0x9900, lo: 0xaf, hi: 0xaf}, - {value: 0xa000, lo: 0xb8, hi: 0xb9}, - {value: 0x2dc4, lo: 0xba, hi: 0xba}, - {value: 0x2dce, lo: 0xbb, hi: 0xbb}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x7c, offset 0x2ab - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0x80, hi: 0x80}, - // Block 0x7d, offset 0x2ad - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x7e, offset 0x2af - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xb6, hi: 0xb6}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - // Block 0x7f, offset 0x2b2 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xab, hi: 0xab}, - // Block 0x80, offset 0x2b4 - {value: 0x0000, lo: 0x01}, - {value: 0x8101, lo: 0xb0, hi: 0xb4}, - // Block 0x81, offset 0x2b6 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb0, hi: 0xb6}, - // Block 0x82, offset 0x2b8 - {value: 0x0000, lo: 0x01}, - {value: 0x8101, lo: 0x9e, hi: 0x9e}, - // Block 0x83, offset 0x2ba - {value: 0x0000, lo: 0x0c}, - {value: 0x45cc, lo: 0x9e, hi: 0x9e}, - {value: 0x45d6, lo: 0x9f, hi: 0x9f}, - {value: 0x460a, lo: 0xa0, hi: 0xa0}, - {value: 0x4618, lo: 0xa1, hi: 0xa1}, - {value: 0x4626, lo: 0xa2, hi: 0xa2}, - {value: 0x4634, lo: 0xa3, hi: 0xa3}, - {value: 0x4642, lo: 0xa4, hi: 0xa4}, - {value: 0x812b, lo: 0xa5, hi: 0xa6}, - {value: 0x8101, lo: 0xa7, hi: 0xa9}, - {value: 0x8130, lo: 0xad, hi: 0xad}, - {value: 0x812b, lo: 0xae, hi: 0xb2}, - {value: 0x812d, lo: 0xbb, hi: 0xbf}, - // Block 0x84, offset 0x2c7 - {value: 0x0000, lo: 0x09}, - {value: 0x812d, lo: 0x80, hi: 0x82}, - {value: 0x8132, lo: 0x85, hi: 0x89}, - {value: 0x812d, lo: 0x8a, hi: 0x8b}, - {value: 0x8132, lo: 0xaa, hi: 0xad}, - {value: 0x45e0, lo: 0xbb, hi: 0xbb}, - {value: 0x45ea, lo: 0xbc, hi: 0xbc}, - {value: 0x4650, lo: 0xbd, hi: 0xbd}, - {value: 0x466c, lo: 0xbe, hi: 0xbe}, - {value: 0x465e, lo: 0xbf, hi: 0xbf}, - // Block 0x85, offset 0x2d1 - {value: 0x0000, lo: 0x01}, - {value: 0x467a, lo: 0x80, hi: 0x80}, - // Block 0x86, offset 0x2d3 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x82, hi: 0x84}, - // Block 0x87, offset 0x2d5 - {value: 0x0002, lo: 0x03}, - {value: 0x0043, lo: 0x80, hi: 0x99}, - {value: 0x0083, lo: 0x9a, hi: 0xb3}, - {value: 0x0043, lo: 0xb4, hi: 0xbf}, - // Block 0x88, offset 0x2d9 - {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 0x89, offset 0x2de - {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 0x8a, offset 0x2ea - {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 0x8b, offset 0x2ef - {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 0x8c, offset 0x2f8 - {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 0x8d, offset 0x2fe - {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 0x8e, offset 0x303 - {value: 0x0002, lo: 0x03}, - {value: 0x008f, lo: 0x80, hi: 0x93}, - {value: 0x0043, lo: 0x94, hi: 0xad}, - {value: 0x0083, lo: 0xae, hi: 0xbf}, - // Block 0x8f, offset 0x307 - {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 0x90, offset 0x30c - {value: 0x0002, lo: 0x03}, - {value: 0x004b, lo: 0x80, hi: 0x95}, - {value: 0x0083, lo: 0x96, hi: 0xaf}, - {value: 0x0043, lo: 0xb0, hi: 0xbf}, - // Block 0x91, offset 0x310 - {value: 0x0003, lo: 0x0f}, - {value: 0x01b8, lo: 0x80, hi: 0x80}, - {value: 0x045f, lo: 0x81, hi: 0x81}, - {value: 0x01bb, lo: 0x82, hi: 0x9a}, - {value: 0x045b, lo: 0x9b, hi: 0x9b}, - {value: 0x01c7, lo: 0x9c, hi: 0x9c}, - {value: 0x01d0, lo: 0x9d, hi: 0x9d}, - {value: 0x01d6, lo: 0x9e, hi: 0x9e}, - {value: 0x01fa, lo: 0x9f, hi: 0x9f}, - {value: 0x01eb, lo: 0xa0, hi: 0xa0}, - {value: 0x01e8, lo: 0xa1, hi: 0xa1}, - {value: 0x0173, lo: 0xa2, hi: 0xb2}, - {value: 0x0188, lo: 0xb3, hi: 0xb3}, - {value: 0x01a6, lo: 0xb4, hi: 0xba}, - {value: 0x045f, lo: 0xbb, hi: 0xbb}, - {value: 0x01bb, lo: 0xbc, hi: 0xbf}, - // Block 0x92, offset 0x320 - {value: 0x0003, lo: 0x0d}, - {value: 0x01c7, lo: 0x80, hi: 0x94}, - {value: 0x045b, lo: 0x95, hi: 0x95}, - {value: 0x01c7, lo: 0x96, hi: 0x96}, - {value: 0x01d0, lo: 0x97, hi: 0x97}, - {value: 0x01d6, lo: 0x98, hi: 0x98}, - {value: 0x01fa, lo: 0x99, hi: 0x99}, - {value: 0x01eb, lo: 0x9a, hi: 0x9a}, - {value: 0x01e8, lo: 0x9b, hi: 0x9b}, - {value: 0x0173, lo: 0x9c, hi: 0xac}, - {value: 0x0188, lo: 0xad, hi: 0xad}, - {value: 0x01a6, lo: 0xae, hi: 0xb4}, - {value: 0x045f, lo: 0xb5, hi: 0xb5}, - {value: 0x01bb, lo: 0xb6, hi: 0xbf}, - // Block 0x93, offset 0x32e - {value: 0x0003, lo: 0x0d}, - {value: 0x01d9, lo: 0x80, hi: 0x8e}, - {value: 0x045b, lo: 0x8f, hi: 0x8f}, - {value: 0x01c7, lo: 0x90, hi: 0x90}, - {value: 0x01d0, lo: 0x91, hi: 0x91}, - {value: 0x01d6, lo: 0x92, hi: 0x92}, - {value: 0x01fa, lo: 0x93, hi: 0x93}, - {value: 0x01eb, lo: 0x94, hi: 0x94}, - {value: 0x01e8, lo: 0x95, hi: 0x95}, - {value: 0x0173, lo: 0x96, hi: 0xa6}, - {value: 0x0188, lo: 0xa7, hi: 0xa7}, - {value: 0x01a6, lo: 0xa8, hi: 0xae}, - {value: 0x045f, lo: 0xaf, hi: 0xaf}, - {value: 0x01bb, lo: 0xb0, hi: 0xbf}, - // Block 0x94, offset 0x33c - {value: 0x0003, lo: 0x0d}, - {value: 0x01eb, lo: 0x80, hi: 0x88}, - {value: 0x045b, lo: 0x89, hi: 0x89}, - {value: 0x01c7, lo: 0x8a, hi: 0x8a}, - {value: 0x01d0, lo: 0x8b, hi: 0x8b}, - {value: 0x01d6, lo: 0x8c, hi: 0x8c}, - {value: 0x01fa, lo: 0x8d, hi: 0x8d}, - {value: 0x01eb, lo: 0x8e, hi: 0x8e}, - {value: 0x01e8, lo: 0x8f, hi: 0x8f}, - {value: 0x0173, lo: 0x90, hi: 0xa0}, - {value: 0x0188, lo: 0xa1, hi: 0xa1}, - {value: 0x01a6, lo: 0xa2, hi: 0xa8}, - {value: 0x045f, lo: 0xa9, hi: 0xa9}, - {value: 0x01bb, lo: 0xaa, hi: 0xbf}, - // Block 0x95, offset 0x34a - {value: 0x0000, lo: 0x05}, - {value: 0x8132, lo: 0x80, hi: 0x86}, - {value: 0x8132, lo: 0x88, hi: 0x98}, - {value: 0x8132, lo: 0x9b, hi: 0xa1}, - {value: 0x8132, lo: 0xa3, hi: 0xa4}, - {value: 0x8132, lo: 0xa6, hi: 0xaa}, - // Block 0x96, offset 0x350 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x90, hi: 0x96}, - // Block 0x97, offset 0x352 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x84, hi: 0x89}, - {value: 0x8102, lo: 0x8a, hi: 0x8a}, - // Block 0x98, offset 0x355 - {value: 0x0002, lo: 0x09}, - {value: 0x0063, lo: 0x80, hi: 0x89}, - {value: 0x1951, lo: 0x8a, hi: 0x8a}, - {value: 0x1981, lo: 0x8b, hi: 0x8b}, - {value: 0x199c, lo: 0x8c, hi: 0x8c}, - {value: 0x19a2, lo: 0x8d, hi: 0x8d}, - {value: 0x1bc0, lo: 0x8e, hi: 0x8e}, - {value: 0x19ae, lo: 0x8f, hi: 0x8f}, - {value: 0x197b, lo: 0xaa, hi: 0xaa}, - {value: 0x197e, lo: 0xab, hi: 0xab}, - // Block 0x99, offset 0x35f - {value: 0x0000, lo: 0x01}, - {value: 0x193f, lo: 0x90, hi: 0x90}, - // Block 0x9a, offset 0x361 - {value: 0x0028, lo: 0x09}, - {value: 0x2862, lo: 0x80, hi: 0x80}, - {value: 0x2826, lo: 0x81, hi: 0x81}, - {value: 0x2830, lo: 0x82, hi: 0x82}, - {value: 0x2844, lo: 0x83, hi: 0x84}, - {value: 0x284e, lo: 0x85, hi: 0x86}, - {value: 0x283a, lo: 0x87, hi: 0x87}, - {value: 0x2858, lo: 0x88, hi: 0x88}, - {value: 0x0b6f, lo: 0x90, hi: 0x90}, - {value: 0x08e7, lo: 0x91, hi: 0x91}, -} - -// recompMap: 7520 bytes (entries only) -var recompMap = map[uint32]rune{ - 0x00410300: 0x00C0, - 0x00410301: 0x00C1, - 0x00410302: 0x00C2, - 0x00410303: 0x00C3, - 0x00410308: 0x00C4, - 0x0041030A: 0x00C5, - 0x00430327: 0x00C7, - 0x00450300: 0x00C8, - 0x00450301: 0x00C9, - 0x00450302: 0x00CA, - 0x00450308: 0x00CB, - 0x00490300: 0x00CC, - 0x00490301: 0x00CD, - 0x00490302: 0x00CE, - 0x00490308: 0x00CF, - 0x004E0303: 0x00D1, - 0x004F0300: 0x00D2, - 0x004F0301: 0x00D3, - 0x004F0302: 0x00D4, - 0x004F0303: 0x00D5, - 0x004F0308: 0x00D6, - 0x00550300: 0x00D9, - 0x00550301: 0x00DA, - 0x00550302: 0x00DB, - 0x00550308: 0x00DC, - 0x00590301: 0x00DD, - 0x00610300: 0x00E0, - 0x00610301: 0x00E1, - 0x00610302: 0x00E2, - 0x00610303: 0x00E3, - 0x00610308: 0x00E4, - 0x0061030A: 0x00E5, - 0x00630327: 0x00E7, - 0x00650300: 0x00E8, - 0x00650301: 0x00E9, - 0x00650302: 0x00EA, - 0x00650308: 0x00EB, - 0x00690300: 0x00EC, - 0x00690301: 0x00ED, - 0x00690302: 0x00EE, - 0x00690308: 0x00EF, - 0x006E0303: 0x00F1, - 0x006F0300: 0x00F2, - 0x006F0301: 0x00F3, - 0x006F0302: 0x00F4, - 0x006F0303: 0x00F5, - 0x006F0308: 0x00F6, - 0x00750300: 0x00F9, - 0x00750301: 0x00FA, - 0x00750302: 0x00FB, - 0x00750308: 0x00FC, - 0x00790301: 0x00FD, - 0x00790308: 0x00FF, - 0x00410304: 0x0100, - 0x00610304: 0x0101, - 0x00410306: 0x0102, - 0x00610306: 0x0103, - 0x00410328: 0x0104, - 0x00610328: 0x0105, - 0x00430301: 0x0106, - 0x00630301: 0x0107, - 0x00430302: 0x0108, - 0x00630302: 0x0109, - 0x00430307: 0x010A, - 0x00630307: 0x010B, - 0x0043030C: 0x010C, - 0x0063030C: 0x010D, - 0x0044030C: 0x010E, - 0x0064030C: 0x010F, - 0x00450304: 0x0112, - 0x00650304: 0x0113, - 0x00450306: 0x0114, - 0x00650306: 0x0115, - 0x00450307: 0x0116, - 0x00650307: 0x0117, - 0x00450328: 0x0118, - 0x00650328: 0x0119, - 0x0045030C: 0x011A, - 0x0065030C: 0x011B, - 0x00470302: 0x011C, - 0x00670302: 0x011D, - 0x00470306: 0x011E, - 0x00670306: 0x011F, - 0x00470307: 0x0120, - 0x00670307: 0x0121, - 0x00470327: 0x0122, - 0x00670327: 0x0123, - 0x00480302: 0x0124, - 0x00680302: 0x0125, - 0x00490303: 0x0128, - 0x00690303: 0x0129, - 0x00490304: 0x012A, - 0x00690304: 0x012B, - 0x00490306: 0x012C, - 0x00690306: 0x012D, - 0x00490328: 0x012E, - 0x00690328: 0x012F, - 0x00490307: 0x0130, - 0x004A0302: 0x0134, - 0x006A0302: 0x0135, - 0x004B0327: 0x0136, - 0x006B0327: 0x0137, - 0x004C0301: 0x0139, - 0x006C0301: 0x013A, - 0x004C0327: 0x013B, - 0x006C0327: 0x013C, - 0x004C030C: 0x013D, - 0x006C030C: 0x013E, - 0x004E0301: 0x0143, - 0x006E0301: 0x0144, - 0x004E0327: 0x0145, - 0x006E0327: 0x0146, - 0x004E030C: 0x0147, - 0x006E030C: 0x0148, - 0x004F0304: 0x014C, - 0x006F0304: 0x014D, - 0x004F0306: 0x014E, - 0x006F0306: 0x014F, - 0x004F030B: 0x0150, - 0x006F030B: 0x0151, - 0x00520301: 0x0154, - 0x00720301: 0x0155, - 0x00520327: 0x0156, - 0x00720327: 0x0157, - 0x0052030C: 0x0158, - 0x0072030C: 0x0159, - 0x00530301: 0x015A, - 0x00730301: 0x015B, - 0x00530302: 0x015C, - 0x00730302: 0x015D, - 0x00530327: 0x015E, - 0x00730327: 0x015F, - 0x0053030C: 0x0160, - 0x0073030C: 0x0161, - 0x00540327: 0x0162, - 0x00740327: 0x0163, - 0x0054030C: 0x0164, - 0x0074030C: 0x0165, - 0x00550303: 0x0168, - 0x00750303: 0x0169, - 0x00550304: 0x016A, - 0x00750304: 0x016B, - 0x00550306: 0x016C, - 0x00750306: 0x016D, - 0x0055030A: 0x016E, - 0x0075030A: 0x016F, - 0x0055030B: 0x0170, - 0x0075030B: 0x0171, - 0x00550328: 0x0172, - 0x00750328: 0x0173, - 0x00570302: 0x0174, - 0x00770302: 0x0175, - 0x00590302: 0x0176, - 0x00790302: 0x0177, - 0x00590308: 0x0178, - 0x005A0301: 0x0179, - 0x007A0301: 0x017A, - 0x005A0307: 0x017B, - 0x007A0307: 0x017C, - 0x005A030C: 0x017D, - 0x007A030C: 0x017E, - 0x004F031B: 0x01A0, - 0x006F031B: 0x01A1, - 0x0055031B: 0x01AF, - 0x0075031B: 0x01B0, - 0x0041030C: 0x01CD, - 0x0061030C: 0x01CE, - 0x0049030C: 0x01CF, - 0x0069030C: 0x01D0, - 0x004F030C: 0x01D1, - 0x006F030C: 0x01D2, - 0x0055030C: 0x01D3, - 0x0075030C: 0x01D4, - 0x00DC0304: 0x01D5, - 0x00FC0304: 0x01D6, - 0x00DC0301: 0x01D7, - 0x00FC0301: 0x01D8, - 0x00DC030C: 0x01D9, - 0x00FC030C: 0x01DA, - 0x00DC0300: 0x01DB, - 0x00FC0300: 0x01DC, - 0x00C40304: 0x01DE, - 0x00E40304: 0x01DF, - 0x02260304: 0x01E0, - 0x02270304: 0x01E1, - 0x00C60304: 0x01E2, - 0x00E60304: 0x01E3, - 0x0047030C: 0x01E6, - 0x0067030C: 0x01E7, - 0x004B030C: 0x01E8, - 0x006B030C: 0x01E9, - 0x004F0328: 0x01EA, - 0x006F0328: 0x01EB, - 0x01EA0304: 0x01EC, - 0x01EB0304: 0x01ED, - 0x01B7030C: 0x01EE, - 0x0292030C: 0x01EF, - 0x006A030C: 0x01F0, - 0x00470301: 0x01F4, - 0x00670301: 0x01F5, - 0x004E0300: 0x01F8, - 0x006E0300: 0x01F9, - 0x00C50301: 0x01FA, - 0x00E50301: 0x01FB, - 0x00C60301: 0x01FC, - 0x00E60301: 0x01FD, - 0x00D80301: 0x01FE, - 0x00F80301: 0x01FF, - 0x0041030F: 0x0200, - 0x0061030F: 0x0201, - 0x00410311: 0x0202, - 0x00610311: 0x0203, - 0x0045030F: 0x0204, - 0x0065030F: 0x0205, - 0x00450311: 0x0206, - 0x00650311: 0x0207, - 0x0049030F: 0x0208, - 0x0069030F: 0x0209, - 0x00490311: 0x020A, - 0x00690311: 0x020B, - 0x004F030F: 0x020C, - 0x006F030F: 0x020D, - 0x004F0311: 0x020E, - 0x006F0311: 0x020F, - 0x0052030F: 0x0210, - 0x0072030F: 0x0211, - 0x00520311: 0x0212, - 0x00720311: 0x0213, - 0x0055030F: 0x0214, - 0x0075030F: 0x0215, - 0x00550311: 0x0216, - 0x00750311: 0x0217, - 0x00530326: 0x0218, - 0x00730326: 0x0219, - 0x00540326: 0x021A, - 0x00740326: 0x021B, - 0x0048030C: 0x021E, - 0x0068030C: 0x021F, - 0x00410307: 0x0226, - 0x00610307: 0x0227, - 0x00450327: 0x0228, - 0x00650327: 0x0229, - 0x00D60304: 0x022A, - 0x00F60304: 0x022B, - 0x00D50304: 0x022C, - 0x00F50304: 0x022D, - 0x004F0307: 0x022E, - 0x006F0307: 0x022F, - 0x022E0304: 0x0230, - 0x022F0304: 0x0231, - 0x00590304: 0x0232, - 0x00790304: 0x0233, - 0x00A80301: 0x0385, - 0x03910301: 0x0386, - 0x03950301: 0x0388, - 0x03970301: 0x0389, - 0x03990301: 0x038A, - 0x039F0301: 0x038C, - 0x03A50301: 0x038E, - 0x03A90301: 0x038F, - 0x03CA0301: 0x0390, - 0x03990308: 0x03AA, - 0x03A50308: 0x03AB, - 0x03B10301: 0x03AC, - 0x03B50301: 0x03AD, - 0x03B70301: 0x03AE, - 0x03B90301: 0x03AF, - 0x03CB0301: 0x03B0, - 0x03B90308: 0x03CA, - 0x03C50308: 0x03CB, - 0x03BF0301: 0x03CC, - 0x03C50301: 0x03CD, - 0x03C90301: 0x03CE, - 0x03D20301: 0x03D3, - 0x03D20308: 0x03D4, - 0x04150300: 0x0400, - 0x04150308: 0x0401, - 0x04130301: 0x0403, - 0x04060308: 0x0407, - 0x041A0301: 0x040C, - 0x04180300: 0x040D, - 0x04230306: 0x040E, - 0x04180306: 0x0419, - 0x04380306: 0x0439, - 0x04350300: 0x0450, - 0x04350308: 0x0451, - 0x04330301: 0x0453, - 0x04560308: 0x0457, - 0x043A0301: 0x045C, - 0x04380300: 0x045D, - 0x04430306: 0x045E, - 0x0474030F: 0x0476, - 0x0475030F: 0x0477, - 0x04160306: 0x04C1, - 0x04360306: 0x04C2, - 0x04100306: 0x04D0, - 0x04300306: 0x04D1, - 0x04100308: 0x04D2, - 0x04300308: 0x04D3, - 0x04150306: 0x04D6, - 0x04350306: 0x04D7, - 0x04D80308: 0x04DA, - 0x04D90308: 0x04DB, - 0x04160308: 0x04DC, - 0x04360308: 0x04DD, - 0x04170308: 0x04DE, - 0x04370308: 0x04DF, - 0x04180304: 0x04E2, - 0x04380304: 0x04E3, - 0x04180308: 0x04E4, - 0x04380308: 0x04E5, - 0x041E0308: 0x04E6, - 0x043E0308: 0x04E7, - 0x04E80308: 0x04EA, - 0x04E90308: 0x04EB, - 0x042D0308: 0x04EC, - 0x044D0308: 0x04ED, - 0x04230304: 0x04EE, - 0x04430304: 0x04EF, - 0x04230308: 0x04F0, - 0x04430308: 0x04F1, - 0x0423030B: 0x04F2, - 0x0443030B: 0x04F3, - 0x04270308: 0x04F4, - 0x04470308: 0x04F5, - 0x042B0308: 0x04F8, - 0x044B0308: 0x04F9, - 0x06270653: 0x0622, - 0x06270654: 0x0623, - 0x06480654: 0x0624, - 0x06270655: 0x0625, - 0x064A0654: 0x0626, - 0x06D50654: 0x06C0, - 0x06C10654: 0x06C2, - 0x06D20654: 0x06D3, - 0x0928093C: 0x0929, - 0x0930093C: 0x0931, - 0x0933093C: 0x0934, - 0x09C709BE: 0x09CB, - 0x09C709D7: 0x09CC, - 0x0B470B56: 0x0B48, - 0x0B470B3E: 0x0B4B, - 0x0B470B57: 0x0B4C, - 0x0B920BD7: 0x0B94, - 0x0BC60BBE: 0x0BCA, - 0x0BC70BBE: 0x0BCB, - 0x0BC60BD7: 0x0BCC, - 0x0C460C56: 0x0C48, - 0x0CBF0CD5: 0x0CC0, - 0x0CC60CD5: 0x0CC7, - 0x0CC60CD6: 0x0CC8, - 0x0CC60CC2: 0x0CCA, - 0x0CCA0CD5: 0x0CCB, - 0x0D460D3E: 0x0D4A, - 0x0D470D3E: 0x0D4B, - 0x0D460D57: 0x0D4C, - 0x0DD90DCA: 0x0DDA, - 0x0DD90DCF: 0x0DDC, - 0x0DDC0DCA: 0x0DDD, - 0x0DD90DDF: 0x0DDE, - 0x1025102E: 0x1026, - 0x1B051B35: 0x1B06, - 0x1B071B35: 0x1B08, - 0x1B091B35: 0x1B0A, - 0x1B0B1B35: 0x1B0C, - 0x1B0D1B35: 0x1B0E, - 0x1B111B35: 0x1B12, - 0x1B3A1B35: 0x1B3B, - 0x1B3C1B35: 0x1B3D, - 0x1B3E1B35: 0x1B40, - 0x1B3F1B35: 0x1B41, - 0x1B421B35: 0x1B43, - 0x00410325: 0x1E00, - 0x00610325: 0x1E01, - 0x00420307: 0x1E02, - 0x00620307: 0x1E03, - 0x00420323: 0x1E04, - 0x00620323: 0x1E05, - 0x00420331: 0x1E06, - 0x00620331: 0x1E07, - 0x00C70301: 0x1E08, - 0x00E70301: 0x1E09, - 0x00440307: 0x1E0A, - 0x00640307: 0x1E0B, - 0x00440323: 0x1E0C, - 0x00640323: 0x1E0D, - 0x00440331: 0x1E0E, - 0x00640331: 0x1E0F, - 0x00440327: 0x1E10, - 0x00640327: 0x1E11, - 0x0044032D: 0x1E12, - 0x0064032D: 0x1E13, - 0x01120300: 0x1E14, - 0x01130300: 0x1E15, - 0x01120301: 0x1E16, - 0x01130301: 0x1E17, - 0x0045032D: 0x1E18, - 0x0065032D: 0x1E19, - 0x00450330: 0x1E1A, - 0x00650330: 0x1E1B, - 0x02280306: 0x1E1C, - 0x02290306: 0x1E1D, - 0x00460307: 0x1E1E, - 0x00660307: 0x1E1F, - 0x00470304: 0x1E20, - 0x00670304: 0x1E21, - 0x00480307: 0x1E22, - 0x00680307: 0x1E23, - 0x00480323: 0x1E24, - 0x00680323: 0x1E25, - 0x00480308: 0x1E26, - 0x00680308: 0x1E27, - 0x00480327: 0x1E28, - 0x00680327: 0x1E29, - 0x0048032E: 0x1E2A, - 0x0068032E: 0x1E2B, - 0x00490330: 0x1E2C, - 0x00690330: 0x1E2D, - 0x00CF0301: 0x1E2E, - 0x00EF0301: 0x1E2F, - 0x004B0301: 0x1E30, - 0x006B0301: 0x1E31, - 0x004B0323: 0x1E32, - 0x006B0323: 0x1E33, - 0x004B0331: 0x1E34, - 0x006B0331: 0x1E35, - 0x004C0323: 0x1E36, - 0x006C0323: 0x1E37, - 0x1E360304: 0x1E38, - 0x1E370304: 0x1E39, - 0x004C0331: 0x1E3A, - 0x006C0331: 0x1E3B, - 0x004C032D: 0x1E3C, - 0x006C032D: 0x1E3D, - 0x004D0301: 0x1E3E, - 0x006D0301: 0x1E3F, - 0x004D0307: 0x1E40, - 0x006D0307: 0x1E41, - 0x004D0323: 0x1E42, - 0x006D0323: 0x1E43, - 0x004E0307: 0x1E44, - 0x006E0307: 0x1E45, - 0x004E0323: 0x1E46, - 0x006E0323: 0x1E47, - 0x004E0331: 0x1E48, - 0x006E0331: 0x1E49, - 0x004E032D: 0x1E4A, - 0x006E032D: 0x1E4B, - 0x00D50301: 0x1E4C, - 0x00F50301: 0x1E4D, - 0x00D50308: 0x1E4E, - 0x00F50308: 0x1E4F, - 0x014C0300: 0x1E50, - 0x014D0300: 0x1E51, - 0x014C0301: 0x1E52, - 0x014D0301: 0x1E53, - 0x00500301: 0x1E54, - 0x00700301: 0x1E55, - 0x00500307: 0x1E56, - 0x00700307: 0x1E57, - 0x00520307: 0x1E58, - 0x00720307: 0x1E59, - 0x00520323: 0x1E5A, - 0x00720323: 0x1E5B, - 0x1E5A0304: 0x1E5C, - 0x1E5B0304: 0x1E5D, - 0x00520331: 0x1E5E, - 0x00720331: 0x1E5F, - 0x00530307: 0x1E60, - 0x00730307: 0x1E61, - 0x00530323: 0x1E62, - 0x00730323: 0x1E63, - 0x015A0307: 0x1E64, - 0x015B0307: 0x1E65, - 0x01600307: 0x1E66, - 0x01610307: 0x1E67, - 0x1E620307: 0x1E68, - 0x1E630307: 0x1E69, - 0x00540307: 0x1E6A, - 0x00740307: 0x1E6B, - 0x00540323: 0x1E6C, - 0x00740323: 0x1E6D, - 0x00540331: 0x1E6E, - 0x00740331: 0x1E6F, - 0x0054032D: 0x1E70, - 0x0074032D: 0x1E71, - 0x00550324: 0x1E72, - 0x00750324: 0x1E73, - 0x00550330: 0x1E74, - 0x00750330: 0x1E75, - 0x0055032D: 0x1E76, - 0x0075032D: 0x1E77, - 0x01680301: 0x1E78, - 0x01690301: 0x1E79, - 0x016A0308: 0x1E7A, - 0x016B0308: 0x1E7B, - 0x00560303: 0x1E7C, - 0x00760303: 0x1E7D, - 0x00560323: 0x1E7E, - 0x00760323: 0x1E7F, - 0x00570300: 0x1E80, - 0x00770300: 0x1E81, - 0x00570301: 0x1E82, - 0x00770301: 0x1E83, - 0x00570308: 0x1E84, - 0x00770308: 0x1E85, - 0x00570307: 0x1E86, - 0x00770307: 0x1E87, - 0x00570323: 0x1E88, - 0x00770323: 0x1E89, - 0x00580307: 0x1E8A, - 0x00780307: 0x1E8B, - 0x00580308: 0x1E8C, - 0x00780308: 0x1E8D, - 0x00590307: 0x1E8E, - 0x00790307: 0x1E8F, - 0x005A0302: 0x1E90, - 0x007A0302: 0x1E91, - 0x005A0323: 0x1E92, - 0x007A0323: 0x1E93, - 0x005A0331: 0x1E94, - 0x007A0331: 0x1E95, - 0x00680331: 0x1E96, - 0x00740308: 0x1E97, - 0x0077030A: 0x1E98, - 0x0079030A: 0x1E99, - 0x017F0307: 0x1E9B, - 0x00410323: 0x1EA0, - 0x00610323: 0x1EA1, - 0x00410309: 0x1EA2, - 0x00610309: 0x1EA3, - 0x00C20301: 0x1EA4, - 0x00E20301: 0x1EA5, - 0x00C20300: 0x1EA6, - 0x00E20300: 0x1EA7, - 0x00C20309: 0x1EA8, - 0x00E20309: 0x1EA9, - 0x00C20303: 0x1EAA, - 0x00E20303: 0x1EAB, - 0x1EA00302: 0x1EAC, - 0x1EA10302: 0x1EAD, - 0x01020301: 0x1EAE, - 0x01030301: 0x1EAF, - 0x01020300: 0x1EB0, - 0x01030300: 0x1EB1, - 0x01020309: 0x1EB2, - 0x01030309: 0x1EB3, - 0x01020303: 0x1EB4, - 0x01030303: 0x1EB5, - 0x1EA00306: 0x1EB6, - 0x1EA10306: 0x1EB7, - 0x00450323: 0x1EB8, - 0x00650323: 0x1EB9, - 0x00450309: 0x1EBA, - 0x00650309: 0x1EBB, - 0x00450303: 0x1EBC, - 0x00650303: 0x1EBD, - 0x00CA0301: 0x1EBE, - 0x00EA0301: 0x1EBF, - 0x00CA0300: 0x1EC0, - 0x00EA0300: 0x1EC1, - 0x00CA0309: 0x1EC2, - 0x00EA0309: 0x1EC3, - 0x00CA0303: 0x1EC4, - 0x00EA0303: 0x1EC5, - 0x1EB80302: 0x1EC6, - 0x1EB90302: 0x1EC7, - 0x00490309: 0x1EC8, - 0x00690309: 0x1EC9, - 0x00490323: 0x1ECA, - 0x00690323: 0x1ECB, - 0x004F0323: 0x1ECC, - 0x006F0323: 0x1ECD, - 0x004F0309: 0x1ECE, - 0x006F0309: 0x1ECF, - 0x00D40301: 0x1ED0, - 0x00F40301: 0x1ED1, - 0x00D40300: 0x1ED2, - 0x00F40300: 0x1ED3, - 0x00D40309: 0x1ED4, - 0x00F40309: 0x1ED5, - 0x00D40303: 0x1ED6, - 0x00F40303: 0x1ED7, - 0x1ECC0302: 0x1ED8, - 0x1ECD0302: 0x1ED9, - 0x01A00301: 0x1EDA, - 0x01A10301: 0x1EDB, - 0x01A00300: 0x1EDC, - 0x01A10300: 0x1EDD, - 0x01A00309: 0x1EDE, - 0x01A10309: 0x1EDF, - 0x01A00303: 0x1EE0, - 0x01A10303: 0x1EE1, - 0x01A00323: 0x1EE2, - 0x01A10323: 0x1EE3, - 0x00550323: 0x1EE4, - 0x00750323: 0x1EE5, - 0x00550309: 0x1EE6, - 0x00750309: 0x1EE7, - 0x01AF0301: 0x1EE8, - 0x01B00301: 0x1EE9, - 0x01AF0300: 0x1EEA, - 0x01B00300: 0x1EEB, - 0x01AF0309: 0x1EEC, - 0x01B00309: 0x1EED, - 0x01AF0303: 0x1EEE, - 0x01B00303: 0x1EEF, - 0x01AF0323: 0x1EF0, - 0x01B00323: 0x1EF1, - 0x00590300: 0x1EF2, - 0x00790300: 0x1EF3, - 0x00590323: 0x1EF4, - 0x00790323: 0x1EF5, - 0x00590309: 0x1EF6, - 0x00790309: 0x1EF7, - 0x00590303: 0x1EF8, - 0x00790303: 0x1EF9, - 0x03B10313: 0x1F00, - 0x03B10314: 0x1F01, - 0x1F000300: 0x1F02, - 0x1F010300: 0x1F03, - 0x1F000301: 0x1F04, - 0x1F010301: 0x1F05, - 0x1F000342: 0x1F06, - 0x1F010342: 0x1F07, - 0x03910313: 0x1F08, - 0x03910314: 0x1F09, - 0x1F080300: 0x1F0A, - 0x1F090300: 0x1F0B, - 0x1F080301: 0x1F0C, - 0x1F090301: 0x1F0D, - 0x1F080342: 0x1F0E, - 0x1F090342: 0x1F0F, - 0x03B50313: 0x1F10, - 0x03B50314: 0x1F11, - 0x1F100300: 0x1F12, - 0x1F110300: 0x1F13, - 0x1F100301: 0x1F14, - 0x1F110301: 0x1F15, - 0x03950313: 0x1F18, - 0x03950314: 0x1F19, - 0x1F180300: 0x1F1A, - 0x1F190300: 0x1F1B, - 0x1F180301: 0x1F1C, - 0x1F190301: 0x1F1D, - 0x03B70313: 0x1F20, - 0x03B70314: 0x1F21, - 0x1F200300: 0x1F22, - 0x1F210300: 0x1F23, - 0x1F200301: 0x1F24, - 0x1F210301: 0x1F25, - 0x1F200342: 0x1F26, - 0x1F210342: 0x1F27, - 0x03970313: 0x1F28, - 0x03970314: 0x1F29, - 0x1F280300: 0x1F2A, - 0x1F290300: 0x1F2B, - 0x1F280301: 0x1F2C, - 0x1F290301: 0x1F2D, - 0x1F280342: 0x1F2E, - 0x1F290342: 0x1F2F, - 0x03B90313: 0x1F30, - 0x03B90314: 0x1F31, - 0x1F300300: 0x1F32, - 0x1F310300: 0x1F33, - 0x1F300301: 0x1F34, - 0x1F310301: 0x1F35, - 0x1F300342: 0x1F36, - 0x1F310342: 0x1F37, - 0x03990313: 0x1F38, - 0x03990314: 0x1F39, - 0x1F380300: 0x1F3A, - 0x1F390300: 0x1F3B, - 0x1F380301: 0x1F3C, - 0x1F390301: 0x1F3D, - 0x1F380342: 0x1F3E, - 0x1F390342: 0x1F3F, - 0x03BF0313: 0x1F40, - 0x03BF0314: 0x1F41, - 0x1F400300: 0x1F42, - 0x1F410300: 0x1F43, - 0x1F400301: 0x1F44, - 0x1F410301: 0x1F45, - 0x039F0313: 0x1F48, - 0x039F0314: 0x1F49, - 0x1F480300: 0x1F4A, - 0x1F490300: 0x1F4B, - 0x1F480301: 0x1F4C, - 0x1F490301: 0x1F4D, - 0x03C50313: 0x1F50, - 0x03C50314: 0x1F51, - 0x1F500300: 0x1F52, - 0x1F510300: 0x1F53, - 0x1F500301: 0x1F54, - 0x1F510301: 0x1F55, - 0x1F500342: 0x1F56, - 0x1F510342: 0x1F57, - 0x03A50314: 0x1F59, - 0x1F590300: 0x1F5B, - 0x1F590301: 0x1F5D, - 0x1F590342: 0x1F5F, - 0x03C90313: 0x1F60, - 0x03C90314: 0x1F61, - 0x1F600300: 0x1F62, - 0x1F610300: 0x1F63, - 0x1F600301: 0x1F64, - 0x1F610301: 0x1F65, - 0x1F600342: 0x1F66, - 0x1F610342: 0x1F67, - 0x03A90313: 0x1F68, - 0x03A90314: 0x1F69, - 0x1F680300: 0x1F6A, - 0x1F690300: 0x1F6B, - 0x1F680301: 0x1F6C, - 0x1F690301: 0x1F6D, - 0x1F680342: 0x1F6E, - 0x1F690342: 0x1F6F, - 0x03B10300: 0x1F70, - 0x03B50300: 0x1F72, - 0x03B70300: 0x1F74, - 0x03B90300: 0x1F76, - 0x03BF0300: 0x1F78, - 0x03C50300: 0x1F7A, - 0x03C90300: 0x1F7C, - 0x1F000345: 0x1F80, - 0x1F010345: 0x1F81, - 0x1F020345: 0x1F82, - 0x1F030345: 0x1F83, - 0x1F040345: 0x1F84, - 0x1F050345: 0x1F85, - 0x1F060345: 0x1F86, - 0x1F070345: 0x1F87, - 0x1F080345: 0x1F88, - 0x1F090345: 0x1F89, - 0x1F0A0345: 0x1F8A, - 0x1F0B0345: 0x1F8B, - 0x1F0C0345: 0x1F8C, - 0x1F0D0345: 0x1F8D, - 0x1F0E0345: 0x1F8E, - 0x1F0F0345: 0x1F8F, - 0x1F200345: 0x1F90, - 0x1F210345: 0x1F91, - 0x1F220345: 0x1F92, - 0x1F230345: 0x1F93, - 0x1F240345: 0x1F94, - 0x1F250345: 0x1F95, - 0x1F260345: 0x1F96, - 0x1F270345: 0x1F97, - 0x1F280345: 0x1F98, - 0x1F290345: 0x1F99, - 0x1F2A0345: 0x1F9A, - 0x1F2B0345: 0x1F9B, - 0x1F2C0345: 0x1F9C, - 0x1F2D0345: 0x1F9D, - 0x1F2E0345: 0x1F9E, - 0x1F2F0345: 0x1F9F, - 0x1F600345: 0x1FA0, - 0x1F610345: 0x1FA1, - 0x1F620345: 0x1FA2, - 0x1F630345: 0x1FA3, - 0x1F640345: 0x1FA4, - 0x1F650345: 0x1FA5, - 0x1F660345: 0x1FA6, - 0x1F670345: 0x1FA7, - 0x1F680345: 0x1FA8, - 0x1F690345: 0x1FA9, - 0x1F6A0345: 0x1FAA, - 0x1F6B0345: 0x1FAB, - 0x1F6C0345: 0x1FAC, - 0x1F6D0345: 0x1FAD, - 0x1F6E0345: 0x1FAE, - 0x1F6F0345: 0x1FAF, - 0x03B10306: 0x1FB0, - 0x03B10304: 0x1FB1, - 0x1F700345: 0x1FB2, - 0x03B10345: 0x1FB3, - 0x03AC0345: 0x1FB4, - 0x03B10342: 0x1FB6, - 0x1FB60345: 0x1FB7, - 0x03910306: 0x1FB8, - 0x03910304: 0x1FB9, - 0x03910300: 0x1FBA, - 0x03910345: 0x1FBC, - 0x00A80342: 0x1FC1, - 0x1F740345: 0x1FC2, - 0x03B70345: 0x1FC3, - 0x03AE0345: 0x1FC4, - 0x03B70342: 0x1FC6, - 0x1FC60345: 0x1FC7, - 0x03950300: 0x1FC8, - 0x03970300: 0x1FCA, - 0x03970345: 0x1FCC, - 0x1FBF0300: 0x1FCD, - 0x1FBF0301: 0x1FCE, - 0x1FBF0342: 0x1FCF, - 0x03B90306: 0x1FD0, - 0x03B90304: 0x1FD1, - 0x03CA0300: 0x1FD2, - 0x03B90342: 0x1FD6, - 0x03CA0342: 0x1FD7, - 0x03990306: 0x1FD8, - 0x03990304: 0x1FD9, - 0x03990300: 0x1FDA, - 0x1FFE0300: 0x1FDD, - 0x1FFE0301: 0x1FDE, - 0x1FFE0342: 0x1FDF, - 0x03C50306: 0x1FE0, - 0x03C50304: 0x1FE1, - 0x03CB0300: 0x1FE2, - 0x03C10313: 0x1FE4, - 0x03C10314: 0x1FE5, - 0x03C50342: 0x1FE6, - 0x03CB0342: 0x1FE7, - 0x03A50306: 0x1FE8, - 0x03A50304: 0x1FE9, - 0x03A50300: 0x1FEA, - 0x03A10314: 0x1FEC, - 0x00A80300: 0x1FED, - 0x1F7C0345: 0x1FF2, - 0x03C90345: 0x1FF3, - 0x03CE0345: 0x1FF4, - 0x03C90342: 0x1FF6, - 0x1FF60345: 0x1FF7, - 0x039F0300: 0x1FF8, - 0x03A90300: 0x1FFA, - 0x03A90345: 0x1FFC, - 0x21900338: 0x219A, - 0x21920338: 0x219B, - 0x21940338: 0x21AE, - 0x21D00338: 0x21CD, - 0x21D40338: 0x21CE, - 0x21D20338: 0x21CF, - 0x22030338: 0x2204, - 0x22080338: 0x2209, - 0x220B0338: 0x220C, - 0x22230338: 0x2224, - 0x22250338: 0x2226, - 0x223C0338: 0x2241, - 0x22430338: 0x2244, - 0x22450338: 0x2247, - 0x22480338: 0x2249, - 0x003D0338: 0x2260, - 0x22610338: 0x2262, - 0x224D0338: 0x226D, - 0x003C0338: 0x226E, - 0x003E0338: 0x226F, - 0x22640338: 0x2270, - 0x22650338: 0x2271, - 0x22720338: 0x2274, - 0x22730338: 0x2275, - 0x22760338: 0x2278, - 0x22770338: 0x2279, - 0x227A0338: 0x2280, - 0x227B0338: 0x2281, - 0x22820338: 0x2284, - 0x22830338: 0x2285, - 0x22860338: 0x2288, - 0x22870338: 0x2289, - 0x22A20338: 0x22AC, - 0x22A80338: 0x22AD, - 0x22A90338: 0x22AE, - 0x22AB0338: 0x22AF, - 0x227C0338: 0x22E0, - 0x227D0338: 0x22E1, - 0x22910338: 0x22E2, - 0x22920338: 0x22E3, - 0x22B20338: 0x22EA, - 0x22B30338: 0x22EB, - 0x22B40338: 0x22EC, - 0x22B50338: 0x22ED, - 0x304B3099: 0x304C, - 0x304D3099: 0x304E, - 0x304F3099: 0x3050, - 0x30513099: 0x3052, - 0x30533099: 0x3054, - 0x30553099: 0x3056, - 0x30573099: 0x3058, - 0x30593099: 0x305A, - 0x305B3099: 0x305C, - 0x305D3099: 0x305E, - 0x305F3099: 0x3060, - 0x30613099: 0x3062, - 0x30643099: 0x3065, - 0x30663099: 0x3067, - 0x30683099: 0x3069, - 0x306F3099: 0x3070, - 0x306F309A: 0x3071, - 0x30723099: 0x3073, - 0x3072309A: 0x3074, - 0x30753099: 0x3076, - 0x3075309A: 0x3077, - 0x30783099: 0x3079, - 0x3078309A: 0x307A, - 0x307B3099: 0x307C, - 0x307B309A: 0x307D, - 0x30463099: 0x3094, - 0x309D3099: 0x309E, - 0x30AB3099: 0x30AC, - 0x30AD3099: 0x30AE, - 0x30AF3099: 0x30B0, - 0x30B13099: 0x30B2, - 0x30B33099: 0x30B4, - 0x30B53099: 0x30B6, - 0x30B73099: 0x30B8, - 0x30B93099: 0x30BA, - 0x30BB3099: 0x30BC, - 0x30BD3099: 0x30BE, - 0x30BF3099: 0x30C0, - 0x30C13099: 0x30C2, - 0x30C43099: 0x30C5, - 0x30C63099: 0x30C7, - 0x30C83099: 0x30C9, - 0x30CF3099: 0x30D0, - 0x30CF309A: 0x30D1, - 0x30D23099: 0x30D3, - 0x30D2309A: 0x30D4, - 0x30D53099: 0x30D6, - 0x30D5309A: 0x30D7, - 0x30D83099: 0x30D9, - 0x30D8309A: 0x30DA, - 0x30DB3099: 0x30DC, - 0x30DB309A: 0x30DD, - 0x30A63099: 0x30F4, - 0x30EF3099: 0x30F7, - 0x30F03099: 0x30F8, - 0x30F13099: 0x30F9, - 0x30F23099: 0x30FA, - 0x30FD3099: 0x30FE, - 0x109910BA: 0x1109A, - 0x109B10BA: 0x1109C, - 0x10A510BA: 0x110AB, - 0x11311127: 0x1112E, - 0x11321127: 0x1112F, - 0x1347133E: 0x1134B, - 0x13471357: 0x1134C, - 0x14B914BA: 0x114BB, - 0x14B914B0: 0x114BC, - 0x14B914BD: 0x114BE, - 0x15B815AF: 0x115BA, - 0x15B915AF: 0x115BB, -} - -// Total size of tables: 53KB (54006 bytes) diff --git a/vendor/golang.org/x/text/unicode/norm/tables10.0.0.go b/vendor/golang.org/x/text/unicode/norm/tables10.0.0.go new file mode 100644 index 0000000..44dd397 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/norm/tables10.0.0.go @@ -0,0 +1,7653 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// +build go1.10 + +package norm + +const ( + // Version is the Unicode edition from which the tables are derived. + Version = "10.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 = [55]uint8{ + 0, 1, 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 = 0x186D + firstCCC = 0x2C9E + endMulti = 0x2F60 + firstLeadingCCC = 0x49AE + firstCCCZeroExcept = 0x4A78 + firstStarterWithNLead = 0x4A9F + lastDecomp = 0x4AA1 + maxDecomp = 0x8000 +) + +// decomps: 19105 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, + 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, 0xCE, 0x94, 0x42, + // Bytes 180 - 1bf + 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, 0xB1, 0x42, 0xCE, + // Bytes 1c0 - 1ff + 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, 0x42, 0xCF, 0x87, + // Bytes 200 - 23f + 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, 0xD8, 0xA8, 0x42, + // Bytes 240 - 27f + 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, 0x83, 0x42, 0xD9, + // Bytes 280 - 2bf + 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, 0x42, 0xDA, 0x8C, + // Bytes 2c0 - 2ff + 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, 0xDB, 0x89, 0x42, + // Bytes 300 - 33f + 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, 0x84, 0x8A, 0x43, + // Bytes 340 - 37f + 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, 0x84, 0xA1, 0x43, + // Bytes 380 - 3bf + 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, 0x85, 0x98, 0x43, + // Bytes 3c0 - 3ff + 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, 0x87, 0x97, 0x43, + // Bytes 400 - 43f + 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, 0x80, 0x90, 0x43, + // Bytes 440 - 47f + 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, 0xA6, 0x86, 0x43, + // Bytes 480 - 4bf + 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, 0x80, 0x95, 0x43, + // Bytes 4c0 - 4ff + 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, 0x82, 0xB1, 0x43, + // Bytes 500 - 53f + 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, 0x83, 0x8D, 0x43, + // Bytes 540 - 57f + 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, 0x83, 0xA7, 0x43, + // Bytes 580 - 5bf + 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, 0x92, 0xBB, 0x43, + // Bytes 5c0 - 5ff + 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, 0xAC, 0x88, 0x43, + // Bytes 600 - 63f + 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, 0x82, 0x96, 0x43, + // Bytes 640 - 67f + 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, 0x95, 0xAB, 0x43, + // Bytes 680 - 6bf + 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, 0xB5, 0x96, 0x43, + // Bytes 6c0 - 6ff + 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, 0xB8, 0xBD, 0x43, + // Bytes 700 - 73f + 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, 0xBB, 0xA4, 0x43, + // Bytes 740 - 77f + 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, 0x83, 0xA7, 0x43, + // Bytes 780 - 7bf + 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, 0x86, 0x82, 0x43, + // Bytes 7c0 - 7ff + 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, 0x87, 0xA0, 0x43, + // Bytes 800 - 83f + 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, 0x8A, 0xA3, 0x43, + // Bytes 840 - 87f + 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, 0x8C, 0xB8, 0x43, + // Bytes 880 - 8bf + 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, 0x8D, 0xBF, 0x43, + // Bytes 8c0 - 8ff + 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, 0x90, 0x8D, 0x43, + // Bytes 900 - 93f + 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, 0x95, 0xA3, 0x43, + // Bytes 940 - 97f + 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, 0x9B, 0x9B, 0x43, + // Bytes 980 - 9bf + 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, 0xA2, 0xAC, 0x43, + // Bytes 9c0 - 9ff + 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, 0xA4, 0xA7, 0x43, + // Bytes a00 - a3f + 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, 0xAC, 0xA8, 0x43, + // Bytes a40 - a7f + 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, 0xB0, 0x8F, 0x43, + // Bytes a80 - abf + 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, 0xB5, 0xAE, 0x43, + // Bytes ac0 - aff + 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, 0xB9, 0xB4, 0x43, + // Bytes b00 - b3f + 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, 0xBC, 0x84, 0x43, + // Bytes b40 - b7f + 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, 0xBE, 0xAD, 0x43, + // Bytes b80 - bbf + 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, 0x85, 0x88, 0x43, + // Bytes bc0 - bff + 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, 0x88, 0x90, 0x43, + // Bytes c00 - c3f + 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, 0x8C, 0x87, 0x43, + // Bytes c40 - c7f + 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, 0x91, 0xB7, 0x43, + // Bytes c80 - cbf + 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, 0x96, 0xB9, 0x43, + // Bytes cc0 - cff + 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, 0x9B, 0xB4, 0x43, + // Bytes d00 - d3f + 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, 0x9F, 0xB3, 0x43, + // Bytes d40 - d7f + 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, 0xAA, 0xA8, 0x43, + // Bytes d80 - dbf + 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, 0xAE, 0xBB, 0x43, + // Bytes dc0 - dff + 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, 0xB4, 0x96, 0x43, + // Bytes e00 - e3f + 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, 0xB8, 0xAF, 0x43, + // Bytes e40 - e7f + 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, 0xBF, 0xBE, 0x43, + // Bytes e80 - ebf + 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, 0x85, 0xAE, 0x43, + // Bytes ec0 - eff + 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, 0x89, 0x9B, 0x43, + // Bytes f00 - f3f + 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, 0x8E, 0xA5, 0x43, + // Bytes f40 - f7f + 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, 0x94, 0x86, 0x43, + // Bytes f80 - fbf + 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, 0x97, 0xA2, 0x43, + // Bytes fc0 - fff + 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, 0x9C, 0x81, 0x43, + // Bytes 1000 - 103f + 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, 0xA3, 0xBB, 0x43, + // Bytes 1040 - 107f + 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, 0xA6, 0x8F, 0x43, + // Bytes 1080 - 10bf + 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, 0xAB, 0xAE, 0x43, + // Bytes 10c0 - 10ff + 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, 0xB3, 0xA7, 0x43, + // Bytes 1100 - 113f + 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, 0xB8, 0xB7, 0x43, + // Bytes 1140 - 117f + 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, 0x80, 0x85, 0x43, + // Bytes 1180 - 11bf + 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, 0x87, 0x98, 0x43, + // Bytes 11c0 - 11ff + 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, 0x89, 0xB8, 0x43, + // Bytes 1200 - 123f + 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, 0x8E, 0xAD, 0x43, + // Bytes 1240 - 127f + 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, 0x94, 0x96, 0x43, + // Bytes 1280 - 12bf + 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, 0x9B, 0xA2, 0x43, + // Bytes 12c0 - 12ff + 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, 0xA3, 0x97, 0x43, + // Bytes 1300 - 133f + 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, 0xAA, 0xAA, 0x43, + // Bytes 1340 - 137f + 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, 0xB1, 0x95, 0x43, + // Bytes 1380 - 13bf + 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, 0xB6, 0xB3, 0x43, + // Bytes 13c0 - 13ff + 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, 0xBE, 0xB5, 0x43, + // Bytes 1400 - 143f + 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, 0x84, 0x9B, 0x43, + // Bytes 1440 - 147f + 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, 0x8C, 0x84, 0x43, + // Bytes 1480 - 14bf + 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, 0x9A, 0x86, 0x43, + // Bytes 14c0 - 14ff + 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, 0x9D, 0x96, 0x43, + // Bytes 1500 - 153f + 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, 0xA1, 0x9E, 0x43, + // Bytes 1540 - 157f + 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, 0xA9, 0xAA, 0x43, + // Bytes 1580 - 15bf + 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, 0xB6, 0xB4, 0x43, + // Bytes 15c0 - 15ff + 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, 0xBC, 0x85, 0x43, + // Bytes 1600 - 163f + 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, 0x9D, 0xAF, 0x43, + // Bytes 1640 - 167f + 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, 0xA8, 0x44, 0xF0, + // Bytes 1680 - 16bf + 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, 0xAC, 0x8C, 0x44, + // Bytes 16c0 - 16ff + 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, 0xA3, 0xAB, 0xBA, + // Bytes 1700 - 173f + 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, 0xF0, 0xA4, 0xB2, + // Bytes 1740 - 177f + 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, 0x44, 0xF0, 0xA5, + // Bytes 1780 - 17bf + 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, 0xA3, 0x44, 0xF0, + // Bytes 17c0 - 17ff + 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, 0xA2, 0xAE, 0x44, + // Bytes 1800 - 183f + 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, 0xA9, 0x90, 0x8A, + // Bytes 1840 - 187f + 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, 0x31, 0x2C, 0x42, + // Bytes 1880 - 18bf + 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, 0x37, 0x42, 0x32, + // Bytes 18c0 - 18ff + 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, 0x42, 0x34, 0x35, + // Bytes 1900 - 193f + 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, 0x43, 0x44, 0x42, + // Bytes 1940 - 197f + 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, 0x43, 0x42, 0x4D, + // Bytes 1980 - 19bf + 0x44, 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, 0x42, 0x63, 0x63, 0x42, 0x63, 0x64, + // Bytes 19c0 - 19ff + 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, 0x6B, 0x57, 0x42, 0x6B, 0x67, 0x42, + // Bytes 1a00 - 1a3f + 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, 0x56, 0x42, 0x6E, 0x57, 0x42, 0x6E, + // Bytes 1a40 - 1a7f + 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, 0x35, 0x29, 0x43, 0x28, 0x36, 0x29, + // Bytes 1a80 - 1abf + 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, 0x4C, 0x29, 0x43, 0x28, 0x4D, 0x29, + // Bytes 1ac0 - 1aff + 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, 0x62, 0x29, 0x43, 0x28, 0x63, 0x29, + // Bytes 1b00 - 1b3f + 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, 0x72, 0x29, 0x43, 0x28, 0x73, 0x29, + // Bytes 1b40 - 1b7f + 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, 0x36, 0x2E, 0x43, 0x31, 0x37, 0x2E, + // Bytes 1b80 - 1bbf + 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, 0xCE, 0xA9, 0x43, 0x50, 0x50, 0x4D, + // Bytes 1bc0 - 1bff + 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, 0x6D, 0x33, 0x43, 0x64, 0x6D, 0x32, + // Bytes 1c00 - 1c3f + 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, 0x69, 0x6C, 0x43, 0x6D, 0x6D, 0x32, + // Bytes 1c40 - 1c7f + 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, 0xBC, 0x6D, 0x43, 0xCE, 0xBC, 0x73, + // Bytes 1c80 - 1cbf + 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, 0x82, 0xB9, 0x44, 0x31, 0xE2, 0x81, + // Bytes 1cc0 - 1cff + 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, 0xE7, 0x82, 0xB9, 0x44, 0x35, 0xE6, + // Bytes 1d00 - 1d3f + 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, 0x39, 0xE6, 0x97, 0xA5, 0x44, 0x39, + // Bytes 1d40 - 1d7f + 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, 0x44, 0xD5, 0xBE, 0xD5, 0xB6, 0x44, + // Bytes 1d80 - 1dbf + 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, 0x8A, 0x44, 0xD8, 0xAA, 0xD8, 0xAC, + // Bytes 1dc0 - 1dff + 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, 0xD8, 0xB2, 0x44, 0xD8, 0xAB, 0xD9, + // Bytes 1e00 - 1e3f + 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, 0xAD, 0xD9, 0x8A, 0x44, 0xD8, 0xAE, + // Bytes 1e40 - 1e7f + 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, 0xD8, 0xB3, 0xD9, 0x8A, 0x44, 0xD8, + // Bytes 1e80 - 1ebf + 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, 0x44, 0xD8, 0xB5, 0xD9, 0x89, 0x44, + // Bytes 1ec0 - 1eff + 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, 0x8A, 0x44, 0xD8, 0xB8, 0xD9, 0x85, + // Bytes 1f00 - 1f3f + 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, 0xD9, 0x85, 0x44, 0xD9, 0x81, 0xD9, + // Bytes 1f40 - 1f7f + 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, 0x83, 0xD9, 0x89, 0x44, 0xD9, 0x83, + // Bytes 1f80 - 1fbf + 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, 0xD9, 0x85, 0xD8, 0xAE, 0x44, 0xD9, + // Bytes 1fc0 - 1fff + 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, 0x44, 0xD9, 0x86, 0xD9, 0x8A, 0x44, + // Bytes 2000 - 203f + 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, 0x86, 0x44, 0xD9, 0x8A, 0xD9, 0x87, + // Bytes 2040 - 207f + 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, 0xE1, 0x84, 0x89, 0x29, 0x45, 0x28, + // Bytes 2080 - 20bf + 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, 0x45, 0x28, 0xE4, 0xB9, 0x9D, 0x29, + // Bytes 20c0 - 20ff + 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, 0x94, 0x29, 0x45, 0x28, 0xE5, 0x90, + // Bytes 2100 - 213f + 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, 0xE6, 0xB0, 0xB4, 0x29, 0x45, 0x28, + // Bytes 2140 - 217f + 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, 0x45, 0x28, 0xE9, 0x87, 0x91, 0x29, + // Bytes 2180 - 21bf + 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, 0x82, 0xB9, 0x45, 0x31, 0x33, 0xE6, + // Bytes 21c0 - 21ff + 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, 0x38, 0xE6, 0x97, 0xA5, 0x45, 0x31, + // Bytes 2200 - 223f + 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, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x39, + // Bytes 2240 - 227f + 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, 0x82, 0xB9, 0x45, 0x32, 0x35, 0xE6, + // Bytes 2280 - 22bf + 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, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33, + // Bytes 22c0 - 22ff + 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, 0x6B, 0x67, 0x46, 0x6D, 0xE2, 0x88, + // Bytes 2300 - 233f + 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, 0x85, 0x46, 0xD8, 0xAA, 0xD8, 0xAE, + // Bytes 2340 - 237f + 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, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD8, + // Bytes 2380 - 23bf + 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, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x89, + // Bytes 23c0 - 23ff + 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, 0xB4, 0xD9, 0x85, 0xD9, 0x85, 0x46, + // Bytes 2400 - 243f + 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, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, + // Bytes 2440 - 247f + 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, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x81, + // Bytes 2480 - 24bf + 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, 0xD8, 0xAC, 0x46, 0xD9, 0x84, 0xD8, + // Bytes 24c0 - 24ff + 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, 0xAD, 0x46, 0xD9, 0x85, 0xD8, 0xAC, + // Bytes 2500 - 253f + 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, 0x46, 0xD9, 0x85, 0xD9, 0x85, 0xD9, + // Bytes 2540 - 257f + 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, 0xD9, 0x86, 0xD9, 0x85, 0xD9, 0x8A, + // Bytes 2580 - 25bf + 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, 0x8A, 0xD9, 0x94, 0xD8, 0xAD, 0x46, + // Bytes 25c0 - 25ff + 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, 0xD9, 0x94, 0xD9, 0x8A, 0x46, 0xD9, + // Bytes 2600 - 263f + 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, 0xE0, 0xBA, 0xB2, 0x46, 0xE0, 0xBD, + // Bytes 2640 - 267f + 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, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA1, + // Bytes 2680 - 26bf + 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, 0x8A, 0x46, 0xE3, 0x82, 0xAD, 0xE3, + // Bytes 26c0 - 26ff + 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, 0x46, 0xE5, 0xA4, 0xA7, 0xE6, 0xAD, + // Bytes 2700 - 273f + 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, 0x82, 0xE1, 0x85, 0xA1, 0x29, + 0x48, 0x28, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, + // Bytes 2740 - 277f + 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, 0xE1, 0x85, 0xA1, 0x29, 0x48, + 0x28, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xAE, 0x29, + // Bytes 2780 - 27bf + 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, 0x95, 0x73, 0x32, 0x48, 0xD8, + 0xA7, 0xD9, 0x83, 0xD8, 0xA8, 0xD8, 0xB1, 0x48, + // Bytes 27c0 - 27ff + 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, 0xD8, 0xAF, 0x48, 0xD9, 0x88, + 0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x49, 0xE2, + // Bytes 2800 - 283f + 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, 0x94, 0xE4, 0xBA, 0x8C, 0xE3, + 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE5, 0x8B, + // Bytes 2840 - 287f + 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, 0xE3, 0x80, 0x95, 0x49, 0xE3, + 0x80, 0x94, 0xE7, 0x9B, 0x97, 0xE3, 0x80, 0x95, + // Bytes 2880 - 28bf + 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, 0xE3, 0x82, 0xAB, 0xE3, 0x82, + 0xA4, 0xE3, 0x83, 0xAA, 0x49, 0xE3, 0x82, 0xB1, + // Bytes 28c0 - 28ff + 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, 0x82, 0x99, 0xE3, 0x83, 0xAB, + 0x49, 0xE3, 0x83, 0x8E, 0xE3, 0x83, 0x83, 0xE3, + // Bytes 2900 - 293f + 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, 0xBD, 0x49, 0xE3, 0x83, 0x98, + 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x84, 0x49, 0xE3, + // Bytes 2940 - 297f + 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, 0xA4, 0xE3, 0x83, 0xBC, 0xE3, + 0x83, 0xAB, 0x49, 0xE3, 0x83, 0xA6, 0xE3, 0x82, + // Bytes 2980 - 29bf + 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, 0x82, 0xA1, 0x4C, 0xE3, 0x82, + 0xA8, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xAB, 0xE3, + // Bytes 29c0 - 29ff + 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, 0xE3, 0x83, 0xBC, 0x4C, 0xE3, + 0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0x8B, + // Bytes 2a00 - 2a3f + 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, 0xAF, 0xE3, 0x83, 0xAB, 0x4C, + 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83, + // Bytes 2a40 - 2a7f + 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, 0x83, 0xBC, 0xE3, 0x82, 0xBF, + 0x4C, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, + // Bytes 2a80 - 2abf + 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, 0xE3, 0x83, 0xAD, 0xE3, 0x83, + 0xB3, 0x4C, 0xE3, 0x83, 0xA1, 0xE3, 0x83, 0xBC, + // Bytes 2ac0 - 2aff + 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, 0x85, 0xA9, 0xE1, 0x84, 0x92, + 0xE1, 0x85, 0xAE, 0x29, 0x4F, 0xD8, 0xAC, 0xD9, + // Bytes 2b00 - 2b3f + 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, 0xE3, 0x83, 0xAF, 0xE3, 0x83, + 0x83, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xB5, + // Bytes 2b40 - 2b7f + 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, 0xE3, 0x82, 0xA4, 0xE3, 0x83, + 0xB3, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x83, 0x9E, + // Bytes 2b80 - 2bbf + 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, 0xA9, 0xE1, 0x84, 0x8C, 0xE1, + 0x85, 0xA5, 0xE1, 0x86, 0xAB, 0x29, 0x52, 0xE3, + // Bytes 2bc0 - 2bff + 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, 0x88, 0xE3, 0x83, 0xAB, 0x52, + 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83, + // Bytes 2c00 - 2c3f + 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, 0x92, 0xE3, 0x82, 0x9A, 0xE3, + 0x82, 0xA2, 0xE3, 0x82, 0xB9, 0xE3, 0x83, 0x88, + // Bytes 2c40 - 2c7f + 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, 0xE3, 0x82, 0xB1, 0xE3, 0x82, + 0x99, 0xE3, 0x83, 0xB3, 0x61, 0xD8, 0xB5, 0xD9, + // Bytes 2c80 - 2cbf + 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, 0xAC, 0xBE, 0x01, 0x06, 0xE0, + 0xAD, 0x87, 0xE0, 0xAD, 0x96, 0x01, 0x06, 0xE0, + // Bytes 2cc0 - 2cff + 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, 0xB3, 0x95, 0x01, 0x06, 0xE0, + 0xB3, 0x86, 0xE0, 0xB3, 0x96, 0x01, 0x06, 0xE0, + // Bytes 2d00 - 2d3f + 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, 0xAC, 0xB5, 0x01, 0x06, 0xE1, + 0xAC, 0x89, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, + // Bytes 2d40 - 2d7f + 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, 0xAC, 0xB5, 0x01, 0x06, 0xE1, + 0xAD, 0x82, 0xE1, 0xAC, 0xB5, 0x01, 0x08, 0xF0, + // Bytes 2d80 - 2dbf + 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, 0x92, 0xB9, 0xF0, 0x91, 0x92, + 0xBA, 0x01, 0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0, + // Bytes 2dc0 - 2dff + 0x91, 0x92, 0xBD, 0x01, 0x08, 0xF0, 0x91, 0x96, + 0xB8, 0xF0, 0x91, 0x96, 0xAF, 0x01, 0x08, 0xF0, + 0x91, 0x96, 0xB9, 0xF0, 0x91, 0x96, 0xAF, 0x01, + 0x09, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0xE0, + 0xB3, 0x95, 0x02, 0x09, 0xE0, 0xB7, 0x99, 0xE0, + 0xB7, 0x8F, 0xE0, 0xB7, 0x8A, 0x12, 0x44, 0x44, + 0x5A, 0xCC, 0x8C, 0xC9, 0x44, 0x44, 0x7A, 0xCC, + 0x8C, 0xC9, 0x44, 0x64, 0x7A, 0xCC, 0x8C, 0xC9, + // Bytes 2e00 - 2e3f + 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x93, 0xC9, + 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x94, 0xC9, + 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x95, 0xB5, + 0x46, 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x01, + 0x46, 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x01, + 0x46, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, 0x01, + 0x46, 0xE1, 0x84, 0x85, 0xE1, 0x85, 0xA1, 0x01, + 0x46, 0xE1, 0x84, 0x86, 0xE1, 0x85, 0xA1, 0x01, + // Bytes 2e40 - 2e7f + 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, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1, 0x01, + 0x46, 0xE1, 0x84, 0x8F, 0xE1, 0x85, 0xA1, 0x01, + 0x46, 0xE1, 0x84, 0x90, 0xE1, 0x85, 0xA1, 0x01, + // Bytes 2e80 - 2ebf + 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, 0x0D, 0x4C, 0xE1, 0x84, 0x8C, 0xE1, + 0x85, 0xAE, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xB4, + 0x01, 0x4C, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, + 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0D, 0x4C, + 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0xBC, 0xE3, 0x83, + // Bytes 2ec0 - 2eff + 0x9B, 0xE3, 0x82, 0x9A, 0x0D, 0x4C, 0xE3, 0x83, + 0xA4, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3, + 0x82, 0x99, 0x0D, 0x4F, 0xE1, 0x84, 0x8E, 0xE1, + 0x85, 0xA1, 0xE1, 0x86, 0xB7, 0xE1, 0x84, 0x80, + 0xE1, 0x85, 0xA9, 0x01, 0x4F, 0xE3, 0x82, 0xA4, + 0xE3, 0x83, 0x8B, 0xE3, 0x83, 0xB3, 0xE3, 0x82, + 0xAF, 0xE3, 0x82, 0x99, 0x0D, 0x4F, 0xE3, 0x82, + 0xB7, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, + // Bytes 2f00 - 2f3f + 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x0D, 0x4F, 0xE3, + 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, + 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x0D, 0x4F, + 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0xE3, 0x83, + 0xB3, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D, + 0x52, 0xE3, 0x82, 0xA8, 0xE3, 0x82, 0xB9, 0xE3, + 0x82, 0xAF, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, + 0xE3, 0x82, 0x99, 0x0D, 0x52, 0xE3, 0x83, 0x95, + // Bytes 2f40 - 2f7f + 0xE3, 0x82, 0xA1, 0xE3, 0x83, 0xA9, 0xE3, 0x83, + 0x83, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D, + 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, 0x05, 0x03, 0x3E, 0xCC, 0xB8, 0x05, 0x03, + 0x41, 0xCC, 0x80, 0xC9, 0x03, 0x41, 0xCC, 0x81, + 0xC9, 0x03, 0x41, 0xCC, 0x83, 0xC9, 0x03, 0x41, + // Bytes 2f80 - 2fbf + 0xCC, 0x84, 0xC9, 0x03, 0x41, 0xCC, 0x89, 0xC9, + 0x03, 0x41, 0xCC, 0x8C, 0xC9, 0x03, 0x41, 0xCC, + 0x8F, 0xC9, 0x03, 0x41, 0xCC, 0x91, 0xC9, 0x03, + 0x41, 0xCC, 0xA5, 0xB5, 0x03, 0x41, 0xCC, 0xA8, + 0xA5, 0x03, 0x42, 0xCC, 0x87, 0xC9, 0x03, 0x42, + 0xCC, 0xA3, 0xB5, 0x03, 0x42, 0xCC, 0xB1, 0xB5, + 0x03, 0x43, 0xCC, 0x81, 0xC9, 0x03, 0x43, 0xCC, + 0x82, 0xC9, 0x03, 0x43, 0xCC, 0x87, 0xC9, 0x03, + // Bytes 2fc0 - 2fff + 0x43, 0xCC, 0x8C, 0xC9, 0x03, 0x44, 0xCC, 0x87, + 0xC9, 0x03, 0x44, 0xCC, 0x8C, 0xC9, 0x03, 0x44, + 0xCC, 0xA3, 0xB5, 0x03, 0x44, 0xCC, 0xA7, 0xA5, + 0x03, 0x44, 0xCC, 0xAD, 0xB5, 0x03, 0x44, 0xCC, + 0xB1, 0xB5, 0x03, 0x45, 0xCC, 0x80, 0xC9, 0x03, + 0x45, 0xCC, 0x81, 0xC9, 0x03, 0x45, 0xCC, 0x83, + 0xC9, 0x03, 0x45, 0xCC, 0x86, 0xC9, 0x03, 0x45, + 0xCC, 0x87, 0xC9, 0x03, 0x45, 0xCC, 0x88, 0xC9, + // Bytes 3000 - 303f + 0x03, 0x45, 0xCC, 0x89, 0xC9, 0x03, 0x45, 0xCC, + 0x8C, 0xC9, 0x03, 0x45, 0xCC, 0x8F, 0xC9, 0x03, + 0x45, 0xCC, 0x91, 0xC9, 0x03, 0x45, 0xCC, 0xA8, + 0xA5, 0x03, 0x45, 0xCC, 0xAD, 0xB5, 0x03, 0x45, + 0xCC, 0xB0, 0xB5, 0x03, 0x46, 0xCC, 0x87, 0xC9, + 0x03, 0x47, 0xCC, 0x81, 0xC9, 0x03, 0x47, 0xCC, + 0x82, 0xC9, 0x03, 0x47, 0xCC, 0x84, 0xC9, 0x03, + 0x47, 0xCC, 0x86, 0xC9, 0x03, 0x47, 0xCC, 0x87, + // Bytes 3040 - 307f + 0xC9, 0x03, 0x47, 0xCC, 0x8C, 0xC9, 0x03, 0x47, + 0xCC, 0xA7, 0xA5, 0x03, 0x48, 0xCC, 0x82, 0xC9, + 0x03, 0x48, 0xCC, 0x87, 0xC9, 0x03, 0x48, 0xCC, + 0x88, 0xC9, 0x03, 0x48, 0xCC, 0x8C, 0xC9, 0x03, + 0x48, 0xCC, 0xA3, 0xB5, 0x03, 0x48, 0xCC, 0xA7, + 0xA5, 0x03, 0x48, 0xCC, 0xAE, 0xB5, 0x03, 0x49, + 0xCC, 0x80, 0xC9, 0x03, 0x49, 0xCC, 0x81, 0xC9, + 0x03, 0x49, 0xCC, 0x82, 0xC9, 0x03, 0x49, 0xCC, + // Bytes 3080 - 30bf + 0x83, 0xC9, 0x03, 0x49, 0xCC, 0x84, 0xC9, 0x03, + 0x49, 0xCC, 0x86, 0xC9, 0x03, 0x49, 0xCC, 0x87, + 0xC9, 0x03, 0x49, 0xCC, 0x89, 0xC9, 0x03, 0x49, + 0xCC, 0x8C, 0xC9, 0x03, 0x49, 0xCC, 0x8F, 0xC9, + 0x03, 0x49, 0xCC, 0x91, 0xC9, 0x03, 0x49, 0xCC, + 0xA3, 0xB5, 0x03, 0x49, 0xCC, 0xA8, 0xA5, 0x03, + 0x49, 0xCC, 0xB0, 0xB5, 0x03, 0x4A, 0xCC, 0x82, + 0xC9, 0x03, 0x4B, 0xCC, 0x81, 0xC9, 0x03, 0x4B, + // Bytes 30c0 - 30ff + 0xCC, 0x8C, 0xC9, 0x03, 0x4B, 0xCC, 0xA3, 0xB5, + 0x03, 0x4B, 0xCC, 0xA7, 0xA5, 0x03, 0x4B, 0xCC, + 0xB1, 0xB5, 0x03, 0x4C, 0xCC, 0x81, 0xC9, 0x03, + 0x4C, 0xCC, 0x8C, 0xC9, 0x03, 0x4C, 0xCC, 0xA7, + 0xA5, 0x03, 0x4C, 0xCC, 0xAD, 0xB5, 0x03, 0x4C, + 0xCC, 0xB1, 0xB5, 0x03, 0x4D, 0xCC, 0x81, 0xC9, + 0x03, 0x4D, 0xCC, 0x87, 0xC9, 0x03, 0x4D, 0xCC, + 0xA3, 0xB5, 0x03, 0x4E, 0xCC, 0x80, 0xC9, 0x03, + // Bytes 3100 - 313f + 0x4E, 0xCC, 0x81, 0xC9, 0x03, 0x4E, 0xCC, 0x83, + 0xC9, 0x03, 0x4E, 0xCC, 0x87, 0xC9, 0x03, 0x4E, + 0xCC, 0x8C, 0xC9, 0x03, 0x4E, 0xCC, 0xA3, 0xB5, + 0x03, 0x4E, 0xCC, 0xA7, 0xA5, 0x03, 0x4E, 0xCC, + 0xAD, 0xB5, 0x03, 0x4E, 0xCC, 0xB1, 0xB5, 0x03, + 0x4F, 0xCC, 0x80, 0xC9, 0x03, 0x4F, 0xCC, 0x81, + 0xC9, 0x03, 0x4F, 0xCC, 0x86, 0xC9, 0x03, 0x4F, + 0xCC, 0x89, 0xC9, 0x03, 0x4F, 0xCC, 0x8B, 0xC9, + // Bytes 3140 - 317f + 0x03, 0x4F, 0xCC, 0x8C, 0xC9, 0x03, 0x4F, 0xCC, + 0x8F, 0xC9, 0x03, 0x4F, 0xCC, 0x91, 0xC9, 0x03, + 0x50, 0xCC, 0x81, 0xC9, 0x03, 0x50, 0xCC, 0x87, + 0xC9, 0x03, 0x52, 0xCC, 0x81, 0xC9, 0x03, 0x52, + 0xCC, 0x87, 0xC9, 0x03, 0x52, 0xCC, 0x8C, 0xC9, + 0x03, 0x52, 0xCC, 0x8F, 0xC9, 0x03, 0x52, 0xCC, + 0x91, 0xC9, 0x03, 0x52, 0xCC, 0xA7, 0xA5, 0x03, + 0x52, 0xCC, 0xB1, 0xB5, 0x03, 0x53, 0xCC, 0x82, + // Bytes 3180 - 31bf + 0xC9, 0x03, 0x53, 0xCC, 0x87, 0xC9, 0x03, 0x53, + 0xCC, 0xA6, 0xB5, 0x03, 0x53, 0xCC, 0xA7, 0xA5, + 0x03, 0x54, 0xCC, 0x87, 0xC9, 0x03, 0x54, 0xCC, + 0x8C, 0xC9, 0x03, 0x54, 0xCC, 0xA3, 0xB5, 0x03, + 0x54, 0xCC, 0xA6, 0xB5, 0x03, 0x54, 0xCC, 0xA7, + 0xA5, 0x03, 0x54, 0xCC, 0xAD, 0xB5, 0x03, 0x54, + 0xCC, 0xB1, 0xB5, 0x03, 0x55, 0xCC, 0x80, 0xC9, + 0x03, 0x55, 0xCC, 0x81, 0xC9, 0x03, 0x55, 0xCC, + // Bytes 31c0 - 31ff + 0x82, 0xC9, 0x03, 0x55, 0xCC, 0x86, 0xC9, 0x03, + 0x55, 0xCC, 0x89, 0xC9, 0x03, 0x55, 0xCC, 0x8A, + 0xC9, 0x03, 0x55, 0xCC, 0x8B, 0xC9, 0x03, 0x55, + 0xCC, 0x8C, 0xC9, 0x03, 0x55, 0xCC, 0x8F, 0xC9, + 0x03, 0x55, 0xCC, 0x91, 0xC9, 0x03, 0x55, 0xCC, + 0xA3, 0xB5, 0x03, 0x55, 0xCC, 0xA4, 0xB5, 0x03, + 0x55, 0xCC, 0xA8, 0xA5, 0x03, 0x55, 0xCC, 0xAD, + 0xB5, 0x03, 0x55, 0xCC, 0xB0, 0xB5, 0x03, 0x56, + // Bytes 3200 - 323f + 0xCC, 0x83, 0xC9, 0x03, 0x56, 0xCC, 0xA3, 0xB5, + 0x03, 0x57, 0xCC, 0x80, 0xC9, 0x03, 0x57, 0xCC, + 0x81, 0xC9, 0x03, 0x57, 0xCC, 0x82, 0xC9, 0x03, + 0x57, 0xCC, 0x87, 0xC9, 0x03, 0x57, 0xCC, 0x88, + 0xC9, 0x03, 0x57, 0xCC, 0xA3, 0xB5, 0x03, 0x58, + 0xCC, 0x87, 0xC9, 0x03, 0x58, 0xCC, 0x88, 0xC9, + 0x03, 0x59, 0xCC, 0x80, 0xC9, 0x03, 0x59, 0xCC, + 0x81, 0xC9, 0x03, 0x59, 0xCC, 0x82, 0xC9, 0x03, + // Bytes 3240 - 327f + 0x59, 0xCC, 0x83, 0xC9, 0x03, 0x59, 0xCC, 0x84, + 0xC9, 0x03, 0x59, 0xCC, 0x87, 0xC9, 0x03, 0x59, + 0xCC, 0x88, 0xC9, 0x03, 0x59, 0xCC, 0x89, 0xC9, + 0x03, 0x59, 0xCC, 0xA3, 0xB5, 0x03, 0x5A, 0xCC, + 0x81, 0xC9, 0x03, 0x5A, 0xCC, 0x82, 0xC9, 0x03, + 0x5A, 0xCC, 0x87, 0xC9, 0x03, 0x5A, 0xCC, 0x8C, + 0xC9, 0x03, 0x5A, 0xCC, 0xA3, 0xB5, 0x03, 0x5A, + 0xCC, 0xB1, 0xB5, 0x03, 0x61, 0xCC, 0x80, 0xC9, + // Bytes 3280 - 32bf + 0x03, 0x61, 0xCC, 0x81, 0xC9, 0x03, 0x61, 0xCC, + 0x83, 0xC9, 0x03, 0x61, 0xCC, 0x84, 0xC9, 0x03, + 0x61, 0xCC, 0x89, 0xC9, 0x03, 0x61, 0xCC, 0x8C, + 0xC9, 0x03, 0x61, 0xCC, 0x8F, 0xC9, 0x03, 0x61, + 0xCC, 0x91, 0xC9, 0x03, 0x61, 0xCC, 0xA5, 0xB5, + 0x03, 0x61, 0xCC, 0xA8, 0xA5, 0x03, 0x62, 0xCC, + 0x87, 0xC9, 0x03, 0x62, 0xCC, 0xA3, 0xB5, 0x03, + 0x62, 0xCC, 0xB1, 0xB5, 0x03, 0x63, 0xCC, 0x81, + // Bytes 32c0 - 32ff + 0xC9, 0x03, 0x63, 0xCC, 0x82, 0xC9, 0x03, 0x63, + 0xCC, 0x87, 0xC9, 0x03, 0x63, 0xCC, 0x8C, 0xC9, + 0x03, 0x64, 0xCC, 0x87, 0xC9, 0x03, 0x64, 0xCC, + 0x8C, 0xC9, 0x03, 0x64, 0xCC, 0xA3, 0xB5, 0x03, + 0x64, 0xCC, 0xA7, 0xA5, 0x03, 0x64, 0xCC, 0xAD, + 0xB5, 0x03, 0x64, 0xCC, 0xB1, 0xB5, 0x03, 0x65, + 0xCC, 0x80, 0xC9, 0x03, 0x65, 0xCC, 0x81, 0xC9, + 0x03, 0x65, 0xCC, 0x83, 0xC9, 0x03, 0x65, 0xCC, + // Bytes 3300 - 333f + 0x86, 0xC9, 0x03, 0x65, 0xCC, 0x87, 0xC9, 0x03, + 0x65, 0xCC, 0x88, 0xC9, 0x03, 0x65, 0xCC, 0x89, + 0xC9, 0x03, 0x65, 0xCC, 0x8C, 0xC9, 0x03, 0x65, + 0xCC, 0x8F, 0xC9, 0x03, 0x65, 0xCC, 0x91, 0xC9, + 0x03, 0x65, 0xCC, 0xA8, 0xA5, 0x03, 0x65, 0xCC, + 0xAD, 0xB5, 0x03, 0x65, 0xCC, 0xB0, 0xB5, 0x03, + 0x66, 0xCC, 0x87, 0xC9, 0x03, 0x67, 0xCC, 0x81, + 0xC9, 0x03, 0x67, 0xCC, 0x82, 0xC9, 0x03, 0x67, + // Bytes 3340 - 337f + 0xCC, 0x84, 0xC9, 0x03, 0x67, 0xCC, 0x86, 0xC9, + 0x03, 0x67, 0xCC, 0x87, 0xC9, 0x03, 0x67, 0xCC, + 0x8C, 0xC9, 0x03, 0x67, 0xCC, 0xA7, 0xA5, 0x03, + 0x68, 0xCC, 0x82, 0xC9, 0x03, 0x68, 0xCC, 0x87, + 0xC9, 0x03, 0x68, 0xCC, 0x88, 0xC9, 0x03, 0x68, + 0xCC, 0x8C, 0xC9, 0x03, 0x68, 0xCC, 0xA3, 0xB5, + 0x03, 0x68, 0xCC, 0xA7, 0xA5, 0x03, 0x68, 0xCC, + 0xAE, 0xB5, 0x03, 0x68, 0xCC, 0xB1, 0xB5, 0x03, + // Bytes 3380 - 33bf + 0x69, 0xCC, 0x80, 0xC9, 0x03, 0x69, 0xCC, 0x81, + 0xC9, 0x03, 0x69, 0xCC, 0x82, 0xC9, 0x03, 0x69, + 0xCC, 0x83, 0xC9, 0x03, 0x69, 0xCC, 0x84, 0xC9, + 0x03, 0x69, 0xCC, 0x86, 0xC9, 0x03, 0x69, 0xCC, + 0x89, 0xC9, 0x03, 0x69, 0xCC, 0x8C, 0xC9, 0x03, + 0x69, 0xCC, 0x8F, 0xC9, 0x03, 0x69, 0xCC, 0x91, + 0xC9, 0x03, 0x69, 0xCC, 0xA3, 0xB5, 0x03, 0x69, + 0xCC, 0xA8, 0xA5, 0x03, 0x69, 0xCC, 0xB0, 0xB5, + // Bytes 33c0 - 33ff + 0x03, 0x6A, 0xCC, 0x82, 0xC9, 0x03, 0x6A, 0xCC, + 0x8C, 0xC9, 0x03, 0x6B, 0xCC, 0x81, 0xC9, 0x03, + 0x6B, 0xCC, 0x8C, 0xC9, 0x03, 0x6B, 0xCC, 0xA3, + 0xB5, 0x03, 0x6B, 0xCC, 0xA7, 0xA5, 0x03, 0x6B, + 0xCC, 0xB1, 0xB5, 0x03, 0x6C, 0xCC, 0x81, 0xC9, + 0x03, 0x6C, 0xCC, 0x8C, 0xC9, 0x03, 0x6C, 0xCC, + 0xA7, 0xA5, 0x03, 0x6C, 0xCC, 0xAD, 0xB5, 0x03, + 0x6C, 0xCC, 0xB1, 0xB5, 0x03, 0x6D, 0xCC, 0x81, + // Bytes 3400 - 343f + 0xC9, 0x03, 0x6D, 0xCC, 0x87, 0xC9, 0x03, 0x6D, + 0xCC, 0xA3, 0xB5, 0x03, 0x6E, 0xCC, 0x80, 0xC9, + 0x03, 0x6E, 0xCC, 0x81, 0xC9, 0x03, 0x6E, 0xCC, + 0x83, 0xC9, 0x03, 0x6E, 0xCC, 0x87, 0xC9, 0x03, + 0x6E, 0xCC, 0x8C, 0xC9, 0x03, 0x6E, 0xCC, 0xA3, + 0xB5, 0x03, 0x6E, 0xCC, 0xA7, 0xA5, 0x03, 0x6E, + 0xCC, 0xAD, 0xB5, 0x03, 0x6E, 0xCC, 0xB1, 0xB5, + 0x03, 0x6F, 0xCC, 0x80, 0xC9, 0x03, 0x6F, 0xCC, + // Bytes 3440 - 347f + 0x81, 0xC9, 0x03, 0x6F, 0xCC, 0x86, 0xC9, 0x03, + 0x6F, 0xCC, 0x89, 0xC9, 0x03, 0x6F, 0xCC, 0x8B, + 0xC9, 0x03, 0x6F, 0xCC, 0x8C, 0xC9, 0x03, 0x6F, + 0xCC, 0x8F, 0xC9, 0x03, 0x6F, 0xCC, 0x91, 0xC9, + 0x03, 0x70, 0xCC, 0x81, 0xC9, 0x03, 0x70, 0xCC, + 0x87, 0xC9, 0x03, 0x72, 0xCC, 0x81, 0xC9, 0x03, + 0x72, 0xCC, 0x87, 0xC9, 0x03, 0x72, 0xCC, 0x8C, + 0xC9, 0x03, 0x72, 0xCC, 0x8F, 0xC9, 0x03, 0x72, + // Bytes 3480 - 34bf + 0xCC, 0x91, 0xC9, 0x03, 0x72, 0xCC, 0xA7, 0xA5, + 0x03, 0x72, 0xCC, 0xB1, 0xB5, 0x03, 0x73, 0xCC, + 0x82, 0xC9, 0x03, 0x73, 0xCC, 0x87, 0xC9, 0x03, + 0x73, 0xCC, 0xA6, 0xB5, 0x03, 0x73, 0xCC, 0xA7, + 0xA5, 0x03, 0x74, 0xCC, 0x87, 0xC9, 0x03, 0x74, + 0xCC, 0x88, 0xC9, 0x03, 0x74, 0xCC, 0x8C, 0xC9, + 0x03, 0x74, 0xCC, 0xA3, 0xB5, 0x03, 0x74, 0xCC, + 0xA6, 0xB5, 0x03, 0x74, 0xCC, 0xA7, 0xA5, 0x03, + // Bytes 34c0 - 34ff + 0x74, 0xCC, 0xAD, 0xB5, 0x03, 0x74, 0xCC, 0xB1, + 0xB5, 0x03, 0x75, 0xCC, 0x80, 0xC9, 0x03, 0x75, + 0xCC, 0x81, 0xC9, 0x03, 0x75, 0xCC, 0x82, 0xC9, + 0x03, 0x75, 0xCC, 0x86, 0xC9, 0x03, 0x75, 0xCC, + 0x89, 0xC9, 0x03, 0x75, 0xCC, 0x8A, 0xC9, 0x03, + 0x75, 0xCC, 0x8B, 0xC9, 0x03, 0x75, 0xCC, 0x8C, + 0xC9, 0x03, 0x75, 0xCC, 0x8F, 0xC9, 0x03, 0x75, + 0xCC, 0x91, 0xC9, 0x03, 0x75, 0xCC, 0xA3, 0xB5, + // Bytes 3500 - 353f + 0x03, 0x75, 0xCC, 0xA4, 0xB5, 0x03, 0x75, 0xCC, + 0xA8, 0xA5, 0x03, 0x75, 0xCC, 0xAD, 0xB5, 0x03, + 0x75, 0xCC, 0xB0, 0xB5, 0x03, 0x76, 0xCC, 0x83, + 0xC9, 0x03, 0x76, 0xCC, 0xA3, 0xB5, 0x03, 0x77, + 0xCC, 0x80, 0xC9, 0x03, 0x77, 0xCC, 0x81, 0xC9, + 0x03, 0x77, 0xCC, 0x82, 0xC9, 0x03, 0x77, 0xCC, + 0x87, 0xC9, 0x03, 0x77, 0xCC, 0x88, 0xC9, 0x03, + 0x77, 0xCC, 0x8A, 0xC9, 0x03, 0x77, 0xCC, 0xA3, + // Bytes 3540 - 357f + 0xB5, 0x03, 0x78, 0xCC, 0x87, 0xC9, 0x03, 0x78, + 0xCC, 0x88, 0xC9, 0x03, 0x79, 0xCC, 0x80, 0xC9, + 0x03, 0x79, 0xCC, 0x81, 0xC9, 0x03, 0x79, 0xCC, + 0x82, 0xC9, 0x03, 0x79, 0xCC, 0x83, 0xC9, 0x03, + 0x79, 0xCC, 0x84, 0xC9, 0x03, 0x79, 0xCC, 0x87, + 0xC9, 0x03, 0x79, 0xCC, 0x88, 0xC9, 0x03, 0x79, + 0xCC, 0x89, 0xC9, 0x03, 0x79, 0xCC, 0x8A, 0xC9, + 0x03, 0x79, 0xCC, 0xA3, 0xB5, 0x03, 0x7A, 0xCC, + // Bytes 3580 - 35bf + 0x81, 0xC9, 0x03, 0x7A, 0xCC, 0x82, 0xC9, 0x03, + 0x7A, 0xCC, 0x87, 0xC9, 0x03, 0x7A, 0xCC, 0x8C, + 0xC9, 0x03, 0x7A, 0xCC, 0xA3, 0xB5, 0x03, 0x7A, + 0xCC, 0xB1, 0xB5, 0x04, 0xC2, 0xA8, 0xCC, 0x80, + 0xCA, 0x04, 0xC2, 0xA8, 0xCC, 0x81, 0xCA, 0x04, + 0xC2, 0xA8, 0xCD, 0x82, 0xCA, 0x04, 0xC3, 0x86, + 0xCC, 0x81, 0xC9, 0x04, 0xC3, 0x86, 0xCC, 0x84, + 0xC9, 0x04, 0xC3, 0x98, 0xCC, 0x81, 0xC9, 0x04, + // Bytes 35c0 - 35ff + 0xC3, 0xA6, 0xCC, 0x81, 0xC9, 0x04, 0xC3, 0xA6, + 0xCC, 0x84, 0xC9, 0x04, 0xC3, 0xB8, 0xCC, 0x81, + 0xC9, 0x04, 0xC5, 0xBF, 0xCC, 0x87, 0xC9, 0x04, + 0xC6, 0xB7, 0xCC, 0x8C, 0xC9, 0x04, 0xCA, 0x92, + 0xCC, 0x8C, 0xC9, 0x04, 0xCE, 0x91, 0xCC, 0x80, + 0xC9, 0x04, 0xCE, 0x91, 0xCC, 0x81, 0xC9, 0x04, + 0xCE, 0x91, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0x91, + 0xCC, 0x86, 0xC9, 0x04, 0xCE, 0x91, 0xCD, 0x85, + // Bytes 3600 - 363f + 0xD9, 0x04, 0xCE, 0x95, 0xCC, 0x80, 0xC9, 0x04, + 0xCE, 0x95, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0x97, + 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x97, 0xCC, 0x81, + 0xC9, 0x04, 0xCE, 0x97, 0xCD, 0x85, 0xD9, 0x04, + 0xCE, 0x99, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x99, + 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0x99, 0xCC, 0x84, + 0xC9, 0x04, 0xCE, 0x99, 0xCC, 0x86, 0xC9, 0x04, + 0xCE, 0x99, 0xCC, 0x88, 0xC9, 0x04, 0xCE, 0x9F, + // Bytes 3640 - 367f + 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x9F, 0xCC, 0x81, + 0xC9, 0x04, 0xCE, 0xA1, 0xCC, 0x94, 0xC9, 0x04, + 0xCE, 0xA5, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0xA5, + 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x84, + 0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x86, 0xC9, 0x04, + 0xCE, 0xA5, 0xCC, 0x88, 0xC9, 0x04, 0xCE, 0xA9, + 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0xA9, 0xCC, 0x81, + 0xC9, 0x04, 0xCE, 0xA9, 0xCD, 0x85, 0xD9, 0x04, + // Bytes 3680 - 36bf + 0xCE, 0xB1, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0xB1, + 0xCC, 0x86, 0xC9, 0x04, 0xCE, 0xB1, 0xCD, 0x85, + 0xD9, 0x04, 0xCE, 0xB5, 0xCC, 0x80, 0xC9, 0x04, + 0xCE, 0xB5, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xB7, + 0xCD, 0x85, 0xD9, 0x04, 0xCE, 0xB9, 0xCC, 0x80, + 0xC9, 0x04, 0xCE, 0xB9, 0xCC, 0x81, 0xC9, 0x04, + 0xCE, 0xB9, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0xB9, + 0xCC, 0x86, 0xC9, 0x04, 0xCE, 0xB9, 0xCD, 0x82, + // Bytes 36c0 - 36ff + 0xC9, 0x04, 0xCE, 0xBF, 0xCC, 0x80, 0xC9, 0x04, + 0xCE, 0xBF, 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x81, + 0xCC, 0x93, 0xC9, 0x04, 0xCF, 0x81, 0xCC, 0x94, + 0xC9, 0x04, 0xCF, 0x85, 0xCC, 0x80, 0xC9, 0x04, + 0xCF, 0x85, 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x85, + 0xCC, 0x84, 0xC9, 0x04, 0xCF, 0x85, 0xCC, 0x86, + 0xC9, 0x04, 0xCF, 0x85, 0xCD, 0x82, 0xC9, 0x04, + 0xCF, 0x89, 0xCD, 0x85, 0xD9, 0x04, 0xCF, 0x92, + // Bytes 3700 - 373f + 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x92, 0xCC, 0x88, + 0xC9, 0x04, 0xD0, 0x86, 0xCC, 0x88, 0xC9, 0x04, + 0xD0, 0x90, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0x90, + 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x93, 0xCC, 0x81, + 0xC9, 0x04, 0xD0, 0x95, 0xCC, 0x80, 0xC9, 0x04, + 0xD0, 0x95, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0x95, + 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x96, 0xCC, 0x86, + 0xC9, 0x04, 0xD0, 0x96, 0xCC, 0x88, 0xC9, 0x04, + // Bytes 3740 - 377f + 0xD0, 0x97, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x98, + 0xCC, 0x80, 0xC9, 0x04, 0xD0, 0x98, 0xCC, 0x84, + 0xC9, 0x04, 0xD0, 0x98, 0xCC, 0x86, 0xC9, 0x04, + 0xD0, 0x98, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x9A, + 0xCC, 0x81, 0xC9, 0x04, 0xD0, 0x9E, 0xCC, 0x88, + 0xC9, 0x04, 0xD0, 0xA3, 0xCC, 0x84, 0xC9, 0x04, + 0xD0, 0xA3, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xA3, + 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xA3, 0xCC, 0x8B, + // Bytes 3780 - 37bf + 0xC9, 0x04, 0xD0, 0xA7, 0xCC, 0x88, 0xC9, 0x04, + 0xD0, 0xAB, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xAD, + 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xB0, 0xCC, 0x86, + 0xC9, 0x04, 0xD0, 0xB0, 0xCC, 0x88, 0xC9, 0x04, + 0xD0, 0xB3, 0xCC, 0x81, 0xC9, 0x04, 0xD0, 0xB5, + 0xCC, 0x80, 0xC9, 0x04, 0xD0, 0xB5, 0xCC, 0x86, + 0xC9, 0x04, 0xD0, 0xB5, 0xCC, 0x88, 0xC9, 0x04, + 0xD0, 0xB6, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB6, + // Bytes 37c0 - 37ff + 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xB7, 0xCC, 0x88, + 0xC9, 0x04, 0xD0, 0xB8, 0xCC, 0x80, 0xC9, 0x04, + 0xD0, 0xB8, 0xCC, 0x84, 0xC9, 0x04, 0xD0, 0xB8, + 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB8, 0xCC, 0x88, + 0xC9, 0x04, 0xD0, 0xBA, 0xCC, 0x81, 0xC9, 0x04, + 0xD0, 0xBE, 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0x83, + 0xCC, 0x84, 0xC9, 0x04, 0xD1, 0x83, 0xCC, 0x86, + 0xC9, 0x04, 0xD1, 0x83, 0xCC, 0x88, 0xC9, 0x04, + // Bytes 3800 - 383f + 0xD1, 0x83, 0xCC, 0x8B, 0xC9, 0x04, 0xD1, 0x87, + 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0x8B, 0xCC, 0x88, + 0xC9, 0x04, 0xD1, 0x8D, 0xCC, 0x88, 0xC9, 0x04, + 0xD1, 0x96, 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0xB4, + 0xCC, 0x8F, 0xC9, 0x04, 0xD1, 0xB5, 0xCC, 0x8F, + 0xC9, 0x04, 0xD3, 0x98, 0xCC, 0x88, 0xC9, 0x04, + 0xD3, 0x99, 0xCC, 0x88, 0xC9, 0x04, 0xD3, 0xA8, + 0xCC, 0x88, 0xC9, 0x04, 0xD3, 0xA9, 0xCC, 0x88, + // Bytes 3840 - 387f + 0xC9, 0x04, 0xD8, 0xA7, 0xD9, 0x93, 0xC9, 0x04, + 0xD8, 0xA7, 0xD9, 0x94, 0xC9, 0x04, 0xD8, 0xA7, + 0xD9, 0x95, 0xB5, 0x04, 0xD9, 0x88, 0xD9, 0x94, + 0xC9, 0x04, 0xD9, 0x8A, 0xD9, 0x94, 0xC9, 0x04, + 0xDB, 0x81, 0xD9, 0x94, 0xC9, 0x04, 0xDB, 0x92, + 0xD9, 0x94, 0xC9, 0x04, 0xDB, 0x95, 0xD9, 0x94, + 0xC9, 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x80, 0xCA, + 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, + // Bytes 3880 - 38bf + 0x41, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x41, + 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x41, 0xCC, + 0x86, 0xCC, 0x80, 0xCA, 0x05, 0x41, 0xCC, 0x86, + 0xCC, 0x81, 0xCA, 0x05, 0x41, 0xCC, 0x86, 0xCC, + 0x83, 0xCA, 0x05, 0x41, 0xCC, 0x86, 0xCC, 0x89, + 0xCA, 0x05, 0x41, 0xCC, 0x87, 0xCC, 0x84, 0xCA, + 0x05, 0x41, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, + 0x41, 0xCC, 0x8A, 0xCC, 0x81, 0xCA, 0x05, 0x41, + // Bytes 38c0 - 38ff + 0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x41, 0xCC, + 0xA3, 0xCC, 0x86, 0xCA, 0x05, 0x43, 0xCC, 0xA7, + 0xCC, 0x81, 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, + 0x80, 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x81, + 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x83, 0xCA, + 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, + 0x45, 0xCC, 0x84, 0xCC, 0x80, 0xCA, 0x05, 0x45, + 0xCC, 0x84, 0xCC, 0x81, 0xCA, 0x05, 0x45, 0xCC, + // Bytes 3900 - 393f + 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x45, 0xCC, 0xA7, + 0xCC, 0x86, 0xCA, 0x05, 0x49, 0xCC, 0x88, 0xCC, + 0x81, 0xCA, 0x05, 0x4C, 0xCC, 0xA3, 0xCC, 0x84, + 0xCA, 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x80, 0xCA, + 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, + 0x4F, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x4F, + 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x4F, 0xCC, + 0x83, 0xCC, 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x83, + // Bytes 3940 - 397f + 0xCC, 0x84, 0xCA, 0x05, 0x4F, 0xCC, 0x83, 0xCC, + 0x88, 0xCA, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x80, + 0xCA, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x81, 0xCA, + 0x05, 0x4F, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05, + 0x4F, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x4F, + 0xCC, 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x4F, 0xCC, + 0x9B, 0xCC, 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, + 0xCC, 0x83, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, + // Bytes 3980 - 39bf + 0x89, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, 0xA3, + 0xB6, 0x05, 0x4F, 0xCC, 0xA3, 0xCC, 0x82, 0xCA, + 0x05, 0x4F, 0xCC, 0xA8, 0xCC, 0x84, 0xCA, 0x05, + 0x52, 0xCC, 0xA3, 0xCC, 0x84, 0xCA, 0x05, 0x53, + 0xCC, 0x81, 0xCC, 0x87, 0xCA, 0x05, 0x53, 0xCC, + 0x8C, 0xCC, 0x87, 0xCA, 0x05, 0x53, 0xCC, 0xA3, + 0xCC, 0x87, 0xCA, 0x05, 0x55, 0xCC, 0x83, 0xCC, + 0x81, 0xCA, 0x05, 0x55, 0xCC, 0x84, 0xCC, 0x88, + // Bytes 39c0 - 39ff + 0xCA, 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x80, 0xCA, + 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x05, + 0x55, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x55, + 0xCC, 0x88, 0xCC, 0x8C, 0xCA, 0x05, 0x55, 0xCC, + 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x55, 0xCC, 0x9B, + 0xCC, 0x81, 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, + 0x83, 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0x89, + 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6, + // Bytes 3a00 - 3a3f + 0x05, 0x61, 0xCC, 0x82, 0xCC, 0x80, 0xCA, 0x05, + 0x61, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, 0x61, + 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x61, 0xCC, + 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x61, 0xCC, 0x86, + 0xCC, 0x80, 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, + 0x81, 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x83, + 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x89, 0xCA, + 0x05, 0x61, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05, + // Bytes 3a40 - 3a7f + 0x61, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x61, + 0xCC, 0x8A, 0xCC, 0x81, 0xCA, 0x05, 0x61, 0xCC, + 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x61, 0xCC, 0xA3, + 0xCC, 0x86, 0xCA, 0x05, 0x63, 0xCC, 0xA7, 0xCC, + 0x81, 0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x80, + 0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x81, 0xCA, + 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, + 0x65, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x65, + // Bytes 3a80 - 3abf + 0xCC, 0x84, 0xCC, 0x80, 0xCA, 0x05, 0x65, 0xCC, + 0x84, 0xCC, 0x81, 0xCA, 0x05, 0x65, 0xCC, 0xA3, + 0xCC, 0x82, 0xCA, 0x05, 0x65, 0xCC, 0xA7, 0xCC, + 0x86, 0xCA, 0x05, 0x69, 0xCC, 0x88, 0xCC, 0x81, + 0xCA, 0x05, 0x6C, 0xCC, 0xA3, 0xCC, 0x84, 0xCA, + 0x05, 0x6F, 0xCC, 0x82, 0xCC, 0x80, 0xCA, 0x05, + 0x6F, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, 0x6F, + 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x6F, 0xCC, + // Bytes 3ac0 - 3aff + 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x6F, 0xCC, 0x83, + 0xCC, 0x81, 0xCA, 0x05, 0x6F, 0xCC, 0x83, 0xCC, + 0x84, 0xCA, 0x05, 0x6F, 0xCC, 0x83, 0xCC, 0x88, + 0xCA, 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x80, 0xCA, + 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x81, 0xCA, 0x05, + 0x6F, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05, 0x6F, + 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x6F, 0xCC, + 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, + // Bytes 3b00 - 3b3f + 0xCC, 0x81, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, + 0x83, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0x89, + 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6, + 0x05, 0x6F, 0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05, + 0x6F, 0xCC, 0xA8, 0xCC, 0x84, 0xCA, 0x05, 0x72, + 0xCC, 0xA3, 0xCC, 0x84, 0xCA, 0x05, 0x73, 0xCC, + 0x81, 0xCC, 0x87, 0xCA, 0x05, 0x73, 0xCC, 0x8C, + 0xCC, 0x87, 0xCA, 0x05, 0x73, 0xCC, 0xA3, 0xCC, + // Bytes 3b40 - 3b7f + 0x87, 0xCA, 0x05, 0x75, 0xCC, 0x83, 0xCC, 0x81, + 0xCA, 0x05, 0x75, 0xCC, 0x84, 0xCC, 0x88, 0xCA, + 0x05, 0x75, 0xCC, 0x88, 0xCC, 0x80, 0xCA, 0x05, + 0x75, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x05, 0x75, + 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x75, 0xCC, + 0x88, 0xCC, 0x8C, 0xCA, 0x05, 0x75, 0xCC, 0x9B, + 0xCC, 0x80, 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, + 0x81, 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x83, + // Bytes 3b80 - 3bbf + 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x89, 0xCA, + 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6, 0x05, + 0xE1, 0xBE, 0xBF, 0xCC, 0x80, 0xCA, 0x05, 0xE1, + 0xBE, 0xBF, 0xCC, 0x81, 0xCA, 0x05, 0xE1, 0xBE, + 0xBF, 0xCD, 0x82, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, + 0xCC, 0x80, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, 0xCC, + 0x81, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, 0xCD, 0x82, + 0xCA, 0x05, 0xE2, 0x86, 0x90, 0xCC, 0xB8, 0x05, + // Bytes 3bc0 - 3bff + 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, 0x05, 0x05, 0xE2, 0x88, 0x88, 0xCC, 0xB8, + 0x05, 0x05, 0xE2, 0x88, 0x8B, 0xCC, 0xB8, 0x05, + 0x05, 0xE2, 0x88, 0xA3, 0xCC, 0xB8, 0x05, 0x05, + // Bytes 3c00 - 3c3f + 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, 0x05, 0xE2, 0x89, 0xA1, 0xCC, 0xB8, 0x05, + 0x05, 0xE2, 0x89, 0xA4, 0xCC, 0xB8, 0x05, 0x05, + 0xE2, 0x89, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2, + // Bytes 3c40 - 3c7f + 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, 0xE2, 0x89, 0xBC, 0xCC, 0xB8, 0x05, 0x05, + 0xE2, 0x89, 0xBD, 0xCC, 0xB8, 0x05, 0x05, 0xE2, + 0x8A, 0x82, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, + // Bytes 3c80 - 3cbf + 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, 0x8A, 0xA8, 0xCC, 0xB8, 0x05, 0x05, 0xE2, + 0x8A, 0xA9, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, + 0xAB, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB2, + // Bytes 3cc0 - 3cff + 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, 0xDA, + 0x06, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x80, 0xCA, + // Bytes 3d00 - 3d3f + 0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCD, 0x82, 0xCA, + 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x81, 0xCA, + // Bytes 3d40 - 3d7f + 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCD, 0x82, 0xCA, + 0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCD, 0x82, 0xCA, + // Bytes 3d80 - 3dbf + 0x06, 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xB1, 0xCC, 0x80, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xB1, 0xCC, 0x81, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xB1, 0xCD, 0x82, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x80, 0xCA, + // Bytes 3dc0 - 3dff + 0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0xB7, 0xCC, 0x80, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xB7, 0xCC, 0x81, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xB7, 0xCD, 0x82, 0xCD, 0x85, 0xDA, + // Bytes 3e00 - 3e3f + 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCD, 0x82, 0xCA, + 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCD, 0x82, 0xCA, + 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x81, 0xCA, + // Bytes 3e40 - 3e7f + 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCD, 0x82, 0xCA, + 0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x81, 0xCA, + 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x80, 0xCA, + 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, 0xCA, + 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCD, 0x82, 0xCA, + // Bytes 3e80 - 3ebf + 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x80, 0xCA, + 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x81, 0xCA, + 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCD, 0x82, 0xCA, + 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x80, 0xCA, + 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x81, 0xCA, + 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCD, 0x82, 0xCA, + 0x06, 0xCF, 0x89, 0xCC, 0x80, 0xCD, 0x85, 0xDA, + 0x06, 0xCF, 0x89, 0xCC, 0x81, 0xCD, 0x85, 0xDA, + // Bytes 3ec0 - 3eff + 0x06, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x85, 0xDA, + 0x06, 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x85, 0xDA, + 0x06, 0xCF, 0x89, 0xCD, 0x82, 0xCD, 0x85, 0xDA, + 0x06, 0xE0, 0xA4, 0xA8, 0xE0, 0xA4, 0xBC, 0x09, + 0x06, 0xE0, 0xA4, 0xB0, 0xE0, 0xA4, 0xBC, 0x09, + 0x06, 0xE0, 0xA4, 0xB3, 0xE0, 0xA4, 0xBC, 0x09, + 0x06, 0xE0, 0xB1, 0x86, 0xE0, 0xB1, 0x96, 0x85, + 0x06, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8A, 0x11, + // Bytes 3f00 - 3f3f + 0x06, 0xE3, 0x81, 0x86, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0x8B, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0x8D, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0x8F, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0x91, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0x93, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0x95, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0x97, 0xE3, 0x82, 0x99, 0x0D, + // Bytes 3f40 - 3f7f + 0x06, 0xE3, 0x81, 0x99, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0x9B, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0x9D, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0x9F, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0xA1, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0xA4, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0xA6, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0xA8, 0xE3, 0x82, 0x99, 0x0D, + // Bytes 3f80 - 3fbf + 0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x9A, 0x0D, + 0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x9A, 0x0D, + 0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x9A, 0x0D, + 0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x9A, 0x0D, + // Bytes 3fc0 - 3fff + 0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x9A, 0x0D, + 0x06, 0xE3, 0x82, 0x9D, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xA6, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xB1, 0xE3, 0x82, 0x99, 0x0D, + // Bytes 4000 - 403f + 0x06, 0xE3, 0x82, 0xB3, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xB5, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xB9, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xBD, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0x81, 0xE3, 0x82, 0x99, 0x0D, + // Bytes 4040 - 407f + 0x06, 0xE3, 0x83, 0x84, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0x0D, + 0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0x0D, + 0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, 0x0D, + // Bytes 4080 - 40bf + 0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x9A, 0x0D, + 0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0x0D, + 0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0x0D, + 0x06, 0xE3, 0x83, 0xAF, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0xB0, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0xB1, 0xE3, 0x82, 0x99, 0x0D, + // Bytes 40c0 - 40ff + 0x06, 0xE3, 0x83, 0xB2, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0xBD, 0xE3, 0x82, 0x99, 0x0D, + 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCD, + 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC, + 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, + 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, + 0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB, + 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCD, + // Bytes 4100 - 413f + 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCD, + 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC, + 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, + 0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB, + 0x08, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCD, + 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC, 0x94, 0xCC, + 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC, + 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, + // Bytes 4140 - 417f + 0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB, + 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCD, + 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, + 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, + 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, + 0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB, + 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCD, + 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, + // Bytes 4180 - 41bf + 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC, + 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, + 0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB, + 0x08, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCD, + 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC, 0x94, 0xCC, + 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC, + 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, + 0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB, + // Bytes 41c0 - 41ff + 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCD, + 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, + 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, + 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, + 0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB, + 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCD, + 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, + 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC, + // Bytes 4200 - 423f + 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCF, + 0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB, + 0x08, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCD, + 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC, 0x94, 0xCC, + 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC, + 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCF, + 0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB, + 0x08, 0xF0, 0x91, 0x82, 0x99, 0xF0, 0x91, 0x82, + // Bytes 4240 - 427f + 0xBA, 0x09, 0x08, 0xF0, 0x91, 0x82, 0x9B, 0xF0, + 0x91, 0x82, 0xBA, 0x09, 0x08, 0xF0, 0x91, 0x82, + 0xA5, 0xF0, 0x91, 0x82, 0xBA, 0x09, 0x42, 0xC2, + 0xB4, 0x01, 0x43, 0x20, 0xCC, 0x81, 0xC9, 0x43, + 0x20, 0xCC, 0x83, 0xC9, 0x43, 0x20, 0xCC, 0x84, + 0xC9, 0x43, 0x20, 0xCC, 0x85, 0xC9, 0x43, 0x20, + 0xCC, 0x86, 0xC9, 0x43, 0x20, 0xCC, 0x87, 0xC9, + 0x43, 0x20, 0xCC, 0x88, 0xC9, 0x43, 0x20, 0xCC, + // Bytes 4280 - 42bf + 0x8A, 0xC9, 0x43, 0x20, 0xCC, 0x8B, 0xC9, 0x43, + 0x20, 0xCC, 0x93, 0xC9, 0x43, 0x20, 0xCC, 0x94, + 0xC9, 0x43, 0x20, 0xCC, 0xA7, 0xA5, 0x43, 0x20, + 0xCC, 0xA8, 0xA5, 0x43, 0x20, 0xCC, 0xB3, 0xB5, + 0x43, 0x20, 0xCD, 0x82, 0xC9, 0x43, 0x20, 0xCD, + 0x85, 0xD9, 0x43, 0x20, 0xD9, 0x8B, 0x59, 0x43, + 0x20, 0xD9, 0x8C, 0x5D, 0x43, 0x20, 0xD9, 0x8D, + 0x61, 0x43, 0x20, 0xD9, 0x8E, 0x65, 0x43, 0x20, + // Bytes 42c0 - 42ff + 0xD9, 0x8F, 0x69, 0x43, 0x20, 0xD9, 0x90, 0x6D, + 0x43, 0x20, 0xD9, 0x91, 0x71, 0x43, 0x20, 0xD9, + 0x92, 0x75, 0x43, 0x41, 0xCC, 0x8A, 0xC9, 0x43, + 0x73, 0xCC, 0x87, 0xC9, 0x44, 0x20, 0xE3, 0x82, + 0x99, 0x0D, 0x44, 0x20, 0xE3, 0x82, 0x9A, 0x0D, + 0x44, 0xC2, 0xA8, 0xCC, 0x81, 0xCA, 0x44, 0xCE, + 0x91, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0x95, 0xCC, + 0x81, 0xC9, 0x44, 0xCE, 0x97, 0xCC, 0x81, 0xC9, + // Bytes 4300 - 433f + 0x44, 0xCE, 0x99, 0xCC, 0x81, 0xC9, 0x44, 0xCE, + 0x9F, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC, + 0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC, 0x88, 0xC9, + 0x44, 0xCE, 0xA9, 0xCC, 0x81, 0xC9, 0x44, 0xCE, + 0xB1, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xB5, 0xCC, + 0x81, 0xC9, 0x44, 0xCE, 0xB7, 0xCC, 0x81, 0xC9, + 0x44, 0xCE, 0xB9, 0xCC, 0x81, 0xC9, 0x44, 0xCE, + 0xBF, 0xCC, 0x81, 0xC9, 0x44, 0xCF, 0x85, 0xCC, + // Bytes 4340 - 437f + 0x81, 0xC9, 0x44, 0xCF, 0x89, 0xCC, 0x81, 0xC9, + 0x44, 0xD7, 0x90, 0xD6, 0xB7, 0x31, 0x44, 0xD7, + 0x90, 0xD6, 0xB8, 0x35, 0x44, 0xD7, 0x90, 0xD6, + 0xBC, 0x41, 0x44, 0xD7, 0x91, 0xD6, 0xBC, 0x41, + 0x44, 0xD7, 0x91, 0xD6, 0xBF, 0x49, 0x44, 0xD7, + 0x92, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x93, 0xD6, + 0xBC, 0x41, 0x44, 0xD7, 0x94, 0xD6, 0xBC, 0x41, + 0x44, 0xD7, 0x95, 0xD6, 0xB9, 0x39, 0x44, 0xD7, + // Bytes 4380 - 43bf + 0x95, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x96, 0xD6, + 0xBC, 0x41, 0x44, 0xD7, 0x98, 0xD6, 0xBC, 0x41, + 0x44, 0xD7, 0x99, 0xD6, 0xB4, 0x25, 0x44, 0xD7, + 0x99, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9A, 0xD6, + 0xBC, 0x41, 0x44, 0xD7, 0x9B, 0xD6, 0xBC, 0x41, + 0x44, 0xD7, 0x9B, 0xD6, 0xBF, 0x49, 0x44, 0xD7, + 0x9C, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9E, 0xD6, + 0xBC, 0x41, 0x44, 0xD7, 0xA0, 0xD6, 0xBC, 0x41, + // Bytes 43c0 - 43ff + 0x44, 0xD7, 0xA1, 0xD6, 0xBC, 0x41, 0x44, 0xD7, + 0xA3, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6, + 0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6, 0xBF, 0x49, + 0x44, 0xD7, 0xA6, 0xD6, 0xBC, 0x41, 0x44, 0xD7, + 0xA7, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA8, 0xD6, + 0xBC, 0x41, 0x44, 0xD7, 0xA9, 0xD6, 0xBC, 0x41, + 0x44, 0xD7, 0xA9, 0xD7, 0x81, 0x4D, 0x44, 0xD7, + 0xA9, 0xD7, 0x82, 0x51, 0x44, 0xD7, 0xAA, 0xD6, + // Bytes 4400 - 443f + 0xBC, 0x41, 0x44, 0xD7, 0xB2, 0xD6, 0xB7, 0x31, + 0x44, 0xD8, 0xA7, 0xD9, 0x8B, 0x59, 0x44, 0xD8, + 0xA7, 0xD9, 0x93, 0xC9, 0x44, 0xD8, 0xA7, 0xD9, + 0x94, 0xC9, 0x44, 0xD8, 0xA7, 0xD9, 0x95, 0xB5, + 0x44, 0xD8, 0xB0, 0xD9, 0xB0, 0x79, 0x44, 0xD8, + 0xB1, 0xD9, 0xB0, 0x79, 0x44, 0xD9, 0x80, 0xD9, + 0x8B, 0x59, 0x44, 0xD9, 0x80, 0xD9, 0x8E, 0x65, + 0x44, 0xD9, 0x80, 0xD9, 0x8F, 0x69, 0x44, 0xD9, + // Bytes 4440 - 447f + 0x80, 0xD9, 0x90, 0x6D, 0x44, 0xD9, 0x80, 0xD9, + 0x91, 0x71, 0x44, 0xD9, 0x80, 0xD9, 0x92, 0x75, + 0x44, 0xD9, 0x87, 0xD9, 0xB0, 0x79, 0x44, 0xD9, + 0x88, 0xD9, 0x94, 0xC9, 0x44, 0xD9, 0x89, 0xD9, + 0xB0, 0x79, 0x44, 0xD9, 0x8A, 0xD9, 0x94, 0xC9, + 0x44, 0xDB, 0x92, 0xD9, 0x94, 0xC9, 0x44, 0xDB, + 0x95, 0xD9, 0x94, 0xC9, 0x45, 0x20, 0xCC, 0x88, + 0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCC, + // Bytes 4480 - 44bf + 0x81, 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCD, 0x82, + 0xCA, 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x80, 0xCA, + 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x45, + 0x20, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x45, 0x20, + 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC, + 0x94, 0xCC, 0x81, 0xCA, 0x45, 0x20, 0xCC, 0x94, + 0xCD, 0x82, 0xCA, 0x45, 0x20, 0xD9, 0x8C, 0xD9, + 0x91, 0x72, 0x45, 0x20, 0xD9, 0x8D, 0xD9, 0x91, + // Bytes 44c0 - 44ff + 0x72, 0x45, 0x20, 0xD9, 0x8E, 0xD9, 0x91, 0x72, + 0x45, 0x20, 0xD9, 0x8F, 0xD9, 0x91, 0x72, 0x45, + 0x20, 0xD9, 0x90, 0xD9, 0x91, 0x72, 0x45, 0x20, + 0xD9, 0x91, 0xD9, 0xB0, 0x7A, 0x45, 0xE2, 0xAB, + 0x9D, 0xCC, 0xB8, 0x05, 0x46, 0xCE, 0xB9, 0xCC, + 0x88, 0xCC, 0x81, 0xCA, 0x46, 0xCF, 0x85, 0xCC, + 0x88, 0xCC, 0x81, 0xCA, 0x46, 0xD7, 0xA9, 0xD6, + 0xBC, 0xD7, 0x81, 0x4E, 0x46, 0xD7, 0xA9, 0xD6, + // Bytes 4500 - 453f + 0xBC, 0xD7, 0x82, 0x52, 0x46, 0xD9, 0x80, 0xD9, + 0x8E, 0xD9, 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9, + 0x8F, 0xD9, 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9, + 0x90, 0xD9, 0x91, 0x72, 0x46, 0xE0, 0xA4, 0x95, + 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x96, + 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x97, + 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x9C, + 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA1, + // Bytes 4540 - 457f + 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA2, + 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAB, + 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAF, + 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA1, + 0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA2, + 0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xAF, + 0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x96, + 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x97, + // Bytes 4580 - 45bf + 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x9C, + 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xAB, + 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB2, + 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB8, + 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA1, + 0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA2, + 0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, 0xBE, 0xB2, + 0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE0, 0xBE, 0xB3, + // Bytes 45c0 - 45ff + 0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE3, 0x83, 0x86, + 0xE3, 0x82, 0x99, 0x0D, 0x48, 0xF0, 0x9D, 0x85, + 0x97, 0xF0, 0x9D, 0x85, 0xA5, 0xAD, 0x48, 0xF0, + 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xAD, + 0x48, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, + 0xA5, 0xAD, 0x48, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, + 0x9D, 0x85, 0xA5, 0xAD, 0x49, 0xE0, 0xBE, 0xB2, + 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x49, + // Bytes 4600 - 463f + 0xE0, 0xBE, 0xB3, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, + 0x80, 0x9E, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, + 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE, + 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, + 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0, + 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, + 0x9D, 0x85, 0xB0, 0xAE, 0x4C, 0xF0, 0x9D, 0x85, + 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, + // Bytes 4640 - 467f + 0xB1, 0xAE, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, + 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB2, 0xAE, + 0x4C, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, + 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE, 0x4C, 0xF0, + 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, + 0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0, 0x9D, 0x86, + 0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, + 0xAE, 0xAE, 0x4C, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, + // Bytes 4680 - 46bf + 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE, + 0x83, 0x41, 0xCC, 0x82, 0xC9, 0x83, 0x41, 0xCC, + 0x86, 0xC9, 0x83, 0x41, 0xCC, 0x87, 0xC9, 0x83, + 0x41, 0xCC, 0x88, 0xC9, 0x83, 0x41, 0xCC, 0x8A, + 0xC9, 0x83, 0x41, 0xCC, 0xA3, 0xB5, 0x83, 0x43, + 0xCC, 0xA7, 0xA5, 0x83, 0x45, 0xCC, 0x82, 0xC9, + 0x83, 0x45, 0xCC, 0x84, 0xC9, 0x83, 0x45, 0xCC, + 0xA3, 0xB5, 0x83, 0x45, 0xCC, 0xA7, 0xA5, 0x83, + // Bytes 46c0 - 46ff + 0x49, 0xCC, 0x88, 0xC9, 0x83, 0x4C, 0xCC, 0xA3, + 0xB5, 0x83, 0x4F, 0xCC, 0x82, 0xC9, 0x83, 0x4F, + 0xCC, 0x83, 0xC9, 0x83, 0x4F, 0xCC, 0x84, 0xC9, + 0x83, 0x4F, 0xCC, 0x87, 0xC9, 0x83, 0x4F, 0xCC, + 0x88, 0xC9, 0x83, 0x4F, 0xCC, 0x9B, 0xAD, 0x83, + 0x4F, 0xCC, 0xA3, 0xB5, 0x83, 0x4F, 0xCC, 0xA8, + 0xA5, 0x83, 0x52, 0xCC, 0xA3, 0xB5, 0x83, 0x53, + 0xCC, 0x81, 0xC9, 0x83, 0x53, 0xCC, 0x8C, 0xC9, + // Bytes 4700 - 473f + 0x83, 0x53, 0xCC, 0xA3, 0xB5, 0x83, 0x55, 0xCC, + 0x83, 0xC9, 0x83, 0x55, 0xCC, 0x84, 0xC9, 0x83, + 0x55, 0xCC, 0x88, 0xC9, 0x83, 0x55, 0xCC, 0x9B, + 0xAD, 0x83, 0x61, 0xCC, 0x82, 0xC9, 0x83, 0x61, + 0xCC, 0x86, 0xC9, 0x83, 0x61, 0xCC, 0x87, 0xC9, + 0x83, 0x61, 0xCC, 0x88, 0xC9, 0x83, 0x61, 0xCC, + 0x8A, 0xC9, 0x83, 0x61, 0xCC, 0xA3, 0xB5, 0x83, + 0x63, 0xCC, 0xA7, 0xA5, 0x83, 0x65, 0xCC, 0x82, + // Bytes 4740 - 477f + 0xC9, 0x83, 0x65, 0xCC, 0x84, 0xC9, 0x83, 0x65, + 0xCC, 0xA3, 0xB5, 0x83, 0x65, 0xCC, 0xA7, 0xA5, + 0x83, 0x69, 0xCC, 0x88, 0xC9, 0x83, 0x6C, 0xCC, + 0xA3, 0xB5, 0x83, 0x6F, 0xCC, 0x82, 0xC9, 0x83, + 0x6F, 0xCC, 0x83, 0xC9, 0x83, 0x6F, 0xCC, 0x84, + 0xC9, 0x83, 0x6F, 0xCC, 0x87, 0xC9, 0x83, 0x6F, + 0xCC, 0x88, 0xC9, 0x83, 0x6F, 0xCC, 0x9B, 0xAD, + 0x83, 0x6F, 0xCC, 0xA3, 0xB5, 0x83, 0x6F, 0xCC, + // Bytes 4780 - 47bf + 0xA8, 0xA5, 0x83, 0x72, 0xCC, 0xA3, 0xB5, 0x83, + 0x73, 0xCC, 0x81, 0xC9, 0x83, 0x73, 0xCC, 0x8C, + 0xC9, 0x83, 0x73, 0xCC, 0xA3, 0xB5, 0x83, 0x75, + 0xCC, 0x83, 0xC9, 0x83, 0x75, 0xCC, 0x84, 0xC9, + 0x83, 0x75, 0xCC, 0x88, 0xC9, 0x83, 0x75, 0xCC, + 0x9B, 0xAD, 0x84, 0xCE, 0x91, 0xCC, 0x93, 0xC9, + 0x84, 0xCE, 0x91, 0xCC, 0x94, 0xC9, 0x84, 0xCE, + 0x95, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x95, 0xCC, + // Bytes 47c0 - 47ff + 0x94, 0xC9, 0x84, 0xCE, 0x97, 0xCC, 0x93, 0xC9, + 0x84, 0xCE, 0x97, 0xCC, 0x94, 0xC9, 0x84, 0xCE, + 0x99, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x99, 0xCC, + 0x94, 0xC9, 0x84, 0xCE, 0x9F, 0xCC, 0x93, 0xC9, + 0x84, 0xCE, 0x9F, 0xCC, 0x94, 0xC9, 0x84, 0xCE, + 0xA5, 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0xA9, 0xCC, + 0x93, 0xC9, 0x84, 0xCE, 0xA9, 0xCC, 0x94, 0xC9, + 0x84, 0xCE, 0xB1, 0xCC, 0x80, 0xC9, 0x84, 0xCE, + // Bytes 4800 - 483f + 0xB1, 0xCC, 0x81, 0xC9, 0x84, 0xCE, 0xB1, 0xCC, + 0x93, 0xC9, 0x84, 0xCE, 0xB1, 0xCC, 0x94, 0xC9, + 0x84, 0xCE, 0xB1, 0xCD, 0x82, 0xC9, 0x84, 0xCE, + 0xB5, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB5, 0xCC, + 0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCC, 0x80, 0xC9, + 0x84, 0xCE, 0xB7, 0xCC, 0x81, 0xC9, 0x84, 0xCE, + 0xB7, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB7, 0xCC, + 0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCD, 0x82, 0xC9, + // Bytes 4840 - 487f + 0x84, 0xCE, 0xB9, 0xCC, 0x88, 0xC9, 0x84, 0xCE, + 0xB9, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB9, 0xCC, + 0x94, 0xC9, 0x84, 0xCE, 0xBF, 0xCC, 0x93, 0xC9, + 0x84, 0xCE, 0xBF, 0xCC, 0x94, 0xC9, 0x84, 0xCF, + 0x85, 0xCC, 0x88, 0xC9, 0x84, 0xCF, 0x85, 0xCC, + 0x93, 0xC9, 0x84, 0xCF, 0x85, 0xCC, 0x94, 0xC9, + 0x84, 0xCF, 0x89, 0xCC, 0x80, 0xC9, 0x84, 0xCF, + 0x89, 0xCC, 0x81, 0xC9, 0x84, 0xCF, 0x89, 0xCC, + // Bytes 4880 - 48bf + 0x93, 0xC9, 0x84, 0xCF, 0x89, 0xCC, 0x94, 0xC9, + 0x84, 0xCF, 0x89, 0xCD, 0x82, 0xC9, 0x86, 0xCE, + 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, + 0x91, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, + 0x91, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, + 0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, + 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, + 0x91, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE, + // Bytes 48c0 - 48ff + 0x97, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, + 0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, + 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, + 0x97, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, + 0x97, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, + 0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE, + 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, + 0xA9, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, + // Bytes 4900 - 493f + 0xA9, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, + 0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, + 0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, + 0xA9, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE, + 0xB1, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, + 0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, + 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, + 0xB1, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, + // Bytes 4940 - 497f + 0xB1, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, + 0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE, + 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, + 0xB7, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, + 0xB7, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, + 0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, + 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, + 0xB7, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCF, + // Bytes 4980 - 49bf + 0x89, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCF, + 0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCF, + 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCF, + 0x89, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCF, + 0x89, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCF, + 0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x42, 0xCC, + 0x80, 0xC9, 0x32, 0x42, 0xCC, 0x81, 0xC9, 0x32, + 0x42, 0xCC, 0x93, 0xC9, 0x32, 0x43, 0xE1, 0x85, + // Bytes 49c0 - 49ff + 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, 0x85, 0xA8, 0x01, 0x00, 0x43, 0xE1, 0x85, + 0xA9, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAA, 0x01, + 0x00, 0x43, 0xE1, 0x85, 0xAB, 0x01, 0x00, 0x43, + // Bytes 4a00 - 4a3f + 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, 0x43, 0xE1, 0x85, 0xB3, 0x01, 0x00, 0x43, + 0xE1, 0x85, 0xB4, 0x01, 0x00, 0x43, 0xE1, 0x85, + 0xB5, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xAA, 0x01, + // Bytes 4a40 - 4a7f + 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, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB5, 0x01, + 0x00, 0x44, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x32, + 0x43, 0xE3, 0x82, 0x99, 0x0D, 0x03, 0x43, 0xE3, + // Bytes 4a80 - 4abf + 0x82, 0x9A, 0x0D, 0x03, 0x46, 0xE0, 0xBD, 0xB1, + 0xE0, 0xBD, 0xB2, 0x9E, 0x26, 0x46, 0xE0, 0xBD, + 0xB1, 0xE0, 0xBD, 0xB4, 0xA2, 0x26, 0x46, 0xE0, + 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x26, 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: 10442 bytes (10.20 KiB). Checksum: 4ba400a9d8208e03. +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 < 45: + return uint16(nfcValues[n<<6+uint32(b)]) + default: + n -= 45 + return uint16(nfcSparse.lookup(n, b)) + } +} + +// nfcValues: 47 blocks, 3008 entries, 6016 bytes +// The third block is the zero block. +var nfcValues = [3008]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: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x4688, 0xc3: 0x2f79, 0xc4: 0x4697, 0xc5: 0x469c, + 0xc6: 0xa000, 0xc7: 0x46a6, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x46ab, 0xcb: 0x2ffb, + 0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x46bf, 0xd1: 0x3104, + 0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x46c9, 0xd5: 0x46ce, 0xd6: 0x46dd, + 0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x470f, 0xdd: 0x3235, + 0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x4719, 0xe3: 0x3285, + 0xe4: 0x4728, 0xe5: 0x472d, 0xe6: 0xa000, 0xe7: 0x4737, 0xe8: 0x32ee, 0xe9: 0x32f3, + 0xea: 0x473c, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x4750, + 0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x475a, 0xf5: 0x475f, + 0xf6: 0x476e, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3, + 0xfc: 0x47a0, 0xfd: 0x3550, 0xff: 0x3569, + // Block 0x4, offset 0x100 + 0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x468d, 0x103: 0x471e, 0x104: 0x2f9c, 0x105: 0x32a8, + 0x106: 0x2fb0, 0x107: 0x32bc, 0x108: 0x2fb5, 0x109: 0x32c1, 0x10a: 0x2fba, 0x10b: 0x32c6, + 0x10c: 0x2fbf, 0x10d: 0x32cb, 0x10e: 0x2fc9, 0x10f: 0x32d5, + 0x112: 0x46b0, 0x113: 0x4741, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302, + 0x118: 0x3014, 0x119: 0x3320, 0x11a: 0x3005, 0x11b: 0x3311, 0x11c: 0x302d, 0x11d: 0x3339, + 0x11e: 0x3037, 0x11f: 0x3343, 0x120: 0x303c, 0x121: 0x3348, 0x122: 0x3046, 0x123: 0x3352, + 0x124: 0x304b, 0x125: 0x3357, 0x128: 0x307d, 0x129: 0x338e, + 0x12a: 0x3082, 0x12b: 0x3393, 0x12c: 0x3087, 0x12d: 0x3398, 0x12e: 0x30aa, 0x12f: 0x33b6, + 0x130: 0x308c, 0x134: 0x30b4, 0x135: 0x33c0, + 0x136: 0x30c8, 0x137: 0x33d9, 0x139: 0x30d2, 0x13a: 0x33e3, 0x13b: 0x30dc, + 0x13c: 0x33ed, 0x13d: 0x30d7, 0x13e: 0x33e8, + // Block 0x5, offset 0x140 + 0x143: 0x30ff, 0x144: 0x3410, 0x145: 0x3118, + 0x146: 0x3429, 0x147: 0x310e, 0x148: 0x341f, + 0x14c: 0x46d3, 0x14d: 0x4764, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c, + 0x154: 0x3159, 0x155: 0x346a, 0x156: 0x3172, 0x157: 0x3483, + 0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x46f6, 0x15b: 0x4787, 0x15c: 0x317c, 0x15d: 0x348d, + 0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x46fb, 0x161: 0x478c, 0x162: 0x31a4, 0x163: 0x34ba, + 0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x4705, 0x169: 0x4796, + 0x16a: 0x470a, 0x16b: 0x479b, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2, + 0x170: 0x31d1, 0x171: 0x34e7, 0x172: 0x31ef, 0x173: 0x3505, 0x174: 0x3212, 0x175: 0x3528, + 0x176: 0x323a, 0x177: 0x3555, 0x178: 0x324e, 0x179: 0x325d, 0x17a: 0x357d, 0x17b: 0x3267, + 0x17c: 0x3587, 0x17d: 0x326c, 0x17e: 0x358c, 0x17f: 0xa000, + // Block 0x6, offset 0x180 + 0x184: 0x8100, 0x185: 0x8100, + 0x186: 0x8100, + 0x18d: 0x2f88, 0x18e: 0x3294, 0x18f: 0x3096, 0x190: 0x33a2, 0x191: 0x3140, + 0x192: 0x3451, 0x193: 0x31d6, 0x194: 0x34ec, 0x195: 0x39cf, 0x196: 0x3b5e, 0x197: 0x39c8, + 0x198: 0x3b57, 0x199: 0x39d6, 0x19a: 0x3b65, 0x19b: 0x39c1, 0x19c: 0x3b50, + 0x19e: 0x38b0, 0x19f: 0x3a3f, 0x1a0: 0x38a9, 0x1a1: 0x3a38, 0x1a2: 0x35b3, 0x1a3: 0x35c5, + 0x1a6: 0x3041, 0x1a7: 0x334d, 0x1a8: 0x30be, 0x1a9: 0x33cf, + 0x1aa: 0x46ec, 0x1ab: 0x477d, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd, + 0x1b0: 0x33c5, 0x1b4: 0x3028, 0x1b5: 0x3334, + 0x1b8: 0x30fa, 0x1b9: 0x340b, 0x1ba: 0x38b7, 0x1bb: 0x3a46, + 0x1bc: 0x35ad, 0x1bd: 0x35bf, 0x1be: 0x35b9, 0x1bf: 0x35cb, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x2f8d, 0x1c1: 0x3299, 0x1c2: 0x2f92, 0x1c3: 0x329e, 0x1c4: 0x300a, 0x1c5: 0x3316, + 0x1c6: 0x300f, 0x1c7: 0x331b, 0x1c8: 0x309b, 0x1c9: 0x33a7, 0x1ca: 0x30a0, 0x1cb: 0x33ac, + 0x1cc: 0x3145, 0x1cd: 0x3456, 0x1ce: 0x314a, 0x1cf: 0x345b, 0x1d0: 0x3168, 0x1d1: 0x3479, + 0x1d2: 0x316d, 0x1d3: 0x347e, 0x1d4: 0x31db, 0x1d5: 0x34f1, 0x1d6: 0x31e0, 0x1d7: 0x34f6, + 0x1d8: 0x3186, 0x1d9: 0x3497, 0x1da: 0x319f, 0x1db: 0x34b5, + 0x1de: 0x305a, 0x1df: 0x3366, + 0x1e6: 0x4692, 0x1e7: 0x4723, 0x1e8: 0x46ba, 0x1e9: 0x474b, + 0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x46d8, 0x1ef: 0x4769, + 0x1f0: 0x3958, 0x1f1: 0x3ae7, 0x1f2: 0x3244, 0x1f3: 0x355f, + // Block 0x8, offset 0x200 + 0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132, + 0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932, + 0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932, + 0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d, + 0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d, + 0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d, + 0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d, + 0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d, + 0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101, + 0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d, + 0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132, + // Block 0x9, offset 0x240 + 0x240: 0x49ae, 0x241: 0x49b3, 0x242: 0x9932, 0x243: 0x49b8, 0x244: 0x4a71, 0x245: 0x9936, + 0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132, + 0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132, + 0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132, + 0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135, + 0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132, + 0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132, + 0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132, + 0x274: 0x0170, + 0x27a: 0x8100, + 0x27e: 0x0037, + // Block 0xa, offset 0x280 + 0x284: 0x8100, 0x285: 0x35a1, + 0x286: 0x35e9, 0x287: 0x00ce, 0x288: 0x3607, 0x289: 0x3613, 0x28a: 0x3625, + 0x28c: 0x3643, 0x28e: 0x3655, 0x28f: 0x3673, 0x290: 0x3e08, 0x291: 0xa000, + 0x295: 0xa000, 0x297: 0xa000, + 0x299: 0xa000, + 0x29f: 0xa000, 0x2a1: 0xa000, + 0x2a5: 0xa000, 0x2a9: 0xa000, + 0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x47fe, 0x2ad: 0x3697, 0x2ae: 0x4828, 0x2af: 0x36a9, + 0x2b0: 0x3e70, 0x2b1: 0xa000, 0x2b5: 0xa000, + 0x2b7: 0xa000, 0x2b9: 0xa000, + 0x2bf: 0xa000, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x3721, 0x2c1: 0x372d, 0x2c3: 0x371b, + 0x2c6: 0xa000, 0x2c7: 0x3709, + 0x2cc: 0x375d, 0x2cd: 0x3745, 0x2ce: 0x376f, 0x2d0: 0xa000, + 0x2d3: 0xa000, 0x2d5: 0xa000, 0x2d6: 0xa000, 0x2d7: 0xa000, + 0x2d8: 0xa000, 0x2d9: 0x3751, 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: 0x37d5, 0x2fa: 0xa000, + 0x2fe: 0xa000, + // Block 0xc, offset 0x300 + 0x301: 0x3733, 0x302: 0x37b7, + 0x310: 0x370f, 0x311: 0x3793, + 0x312: 0x3715, 0x313: 0x3799, 0x316: 0x3727, 0x317: 0x37ab, + 0x318: 0xa000, 0x319: 0xa000, 0x31a: 0x3829, 0x31b: 0x382f, 0x31c: 0x3739, 0x31d: 0x37bd, + 0x31e: 0x373f, 0x31f: 0x37c3, 0x322: 0x374b, 0x323: 0x37cf, + 0x324: 0x3757, 0x325: 0x37db, 0x326: 0x3763, 0x327: 0x37e7, 0x328: 0xa000, 0x329: 0xa000, + 0x32a: 0x3835, 0x32b: 0x383b, 0x32c: 0x378d, 0x32d: 0x3811, 0x32e: 0x3769, 0x32f: 0x37ed, + 0x330: 0x3775, 0x331: 0x37f9, 0x332: 0x377b, 0x333: 0x37ff, 0x334: 0x3781, 0x335: 0x3805, + 0x338: 0x3787, 0x339: 0x380b, + // Block 0xd, offset 0x340 + 0x351: 0x812d, + 0x352: 0x8132, 0x353: 0x8132, 0x354: 0x8132, 0x355: 0x8132, 0x356: 0x812d, 0x357: 0x8132, + 0x358: 0x8132, 0x359: 0x8132, 0x35a: 0x812e, 0x35b: 0x812d, 0x35c: 0x8132, 0x35d: 0x8132, + 0x35e: 0x8132, 0x35f: 0x8132, 0x360: 0x8132, 0x361: 0x8132, 0x362: 0x812d, 0x363: 0x812d, + 0x364: 0x812d, 0x365: 0x812d, 0x366: 0x812d, 0x367: 0x812d, 0x368: 0x8132, 0x369: 0x8132, + 0x36a: 0x812d, 0x36b: 0x8132, 0x36c: 0x8132, 0x36d: 0x812e, 0x36e: 0x8131, 0x36f: 0x8132, + 0x370: 0x8105, 0x371: 0x8106, 0x372: 0x8107, 0x373: 0x8108, 0x374: 0x8109, 0x375: 0x810a, + 0x376: 0x810b, 0x377: 0x810c, 0x378: 0x810d, 0x379: 0x810e, 0x37a: 0x810e, 0x37b: 0x810f, + 0x37c: 0x8110, 0x37d: 0x8111, 0x37f: 0x8112, + // Block 0xe, offset 0x380 + 0x388: 0xa000, 0x38a: 0xa000, 0x38b: 0x8116, + 0x38c: 0x8117, 0x38d: 0x8118, 0x38e: 0x8119, 0x38f: 0x811a, 0x390: 0x811b, 0x391: 0x811c, + 0x392: 0x811d, 0x393: 0x9932, 0x394: 0x9932, 0x395: 0x992d, 0x396: 0x812d, 0x397: 0x8132, + 0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x8132, 0x39b: 0x8132, 0x39c: 0x812d, 0x39d: 0x8132, + 0x39e: 0x8132, 0x39f: 0x812d, + 0x3b0: 0x811e, + // Block 0xf, offset 0x3c0 + 0x3c5: 0xa000, + 0x3c6: 0x2d26, 0x3c7: 0xa000, 0x3c8: 0x2d2e, 0x3c9: 0xa000, 0x3ca: 0x2d36, 0x3cb: 0xa000, + 0x3cc: 0x2d3e, 0x3cd: 0xa000, 0x3ce: 0x2d46, 0x3d1: 0xa000, + 0x3d2: 0x2d4e, + 0x3f4: 0x8102, 0x3f5: 0x9900, + 0x3fa: 0xa000, 0x3fb: 0x2d56, + 0x3fc: 0xa000, 0x3fd: 0x2d5e, 0x3fe: 0xa000, 0x3ff: 0xa000, + // Block 0x10, offset 0x400 + 0x400: 0x8132, 0x401: 0x8132, 0x402: 0x812d, 0x403: 0x8132, 0x404: 0x8132, 0x405: 0x8132, + 0x406: 0x8132, 0x407: 0x8132, 0x408: 0x8132, 0x409: 0x8132, 0x40a: 0x812d, 0x40b: 0x8132, + 0x40c: 0x8132, 0x40d: 0x8135, 0x40e: 0x812a, 0x40f: 0x812d, 0x410: 0x8129, 0x411: 0x8132, + 0x412: 0x8132, 0x413: 0x8132, 0x414: 0x8132, 0x415: 0x8132, 0x416: 0x8132, 0x417: 0x8132, + 0x418: 0x8132, 0x419: 0x8132, 0x41a: 0x8132, 0x41b: 0x8132, 0x41c: 0x8132, 0x41d: 0x8132, + 0x41e: 0x8132, 0x41f: 0x8132, 0x420: 0x8132, 0x421: 0x8132, 0x422: 0x8132, 0x423: 0x8132, + 0x424: 0x8132, 0x425: 0x8132, 0x426: 0x8132, 0x427: 0x8132, 0x428: 0x8132, 0x429: 0x8132, + 0x42a: 0x8132, 0x42b: 0x8132, 0x42c: 0x8132, 0x42d: 0x8132, 0x42e: 0x8132, 0x42f: 0x8132, + 0x430: 0x8132, 0x431: 0x8132, 0x432: 0x8132, 0x433: 0x8132, 0x434: 0x8132, 0x435: 0x8132, + 0x436: 0x8133, 0x437: 0x8131, 0x438: 0x8131, 0x439: 0x812d, 0x43b: 0x8132, + 0x43c: 0x8134, 0x43d: 0x812d, 0x43e: 0x8132, 0x43f: 0x812d, + // Block 0x11, offset 0x440 + 0x440: 0x2f97, 0x441: 0x32a3, 0x442: 0x2fa1, 0x443: 0x32ad, 0x444: 0x2fa6, 0x445: 0x32b2, + 0x446: 0x2fab, 0x447: 0x32b7, 0x448: 0x38cc, 0x449: 0x3a5b, 0x44a: 0x2fc4, 0x44b: 0x32d0, + 0x44c: 0x2fce, 0x44d: 0x32da, 0x44e: 0x2fdd, 0x44f: 0x32e9, 0x450: 0x2fd3, 0x451: 0x32df, + 0x452: 0x2fd8, 0x453: 0x32e4, 0x454: 0x38ef, 0x455: 0x3a7e, 0x456: 0x38f6, 0x457: 0x3a85, + 0x458: 0x3019, 0x459: 0x3325, 0x45a: 0x301e, 0x45b: 0x332a, 0x45c: 0x3904, 0x45d: 0x3a93, + 0x45e: 0x3023, 0x45f: 0x332f, 0x460: 0x3032, 0x461: 0x333e, 0x462: 0x3050, 0x463: 0x335c, + 0x464: 0x305f, 0x465: 0x336b, 0x466: 0x3055, 0x467: 0x3361, 0x468: 0x3064, 0x469: 0x3370, + 0x46a: 0x3069, 0x46b: 0x3375, 0x46c: 0x30af, 0x46d: 0x33bb, 0x46e: 0x390b, 0x46f: 0x3a9a, + 0x470: 0x30b9, 0x471: 0x33ca, 0x472: 0x30c3, 0x473: 0x33d4, 0x474: 0x30cd, 0x475: 0x33de, + 0x476: 0x46c4, 0x477: 0x4755, 0x478: 0x3912, 0x479: 0x3aa1, 0x47a: 0x30e6, 0x47b: 0x33f7, + 0x47c: 0x30e1, 0x47d: 0x33f2, 0x47e: 0x30eb, 0x47f: 0x33fc, + // Block 0x12, offset 0x480 + 0x480: 0x30f0, 0x481: 0x3401, 0x482: 0x30f5, 0x483: 0x3406, 0x484: 0x3109, 0x485: 0x341a, + 0x486: 0x3113, 0x487: 0x3424, 0x488: 0x3122, 0x489: 0x3433, 0x48a: 0x311d, 0x48b: 0x342e, + 0x48c: 0x3935, 0x48d: 0x3ac4, 0x48e: 0x3943, 0x48f: 0x3ad2, 0x490: 0x394a, 0x491: 0x3ad9, + 0x492: 0x3951, 0x493: 0x3ae0, 0x494: 0x314f, 0x495: 0x3460, 0x496: 0x3154, 0x497: 0x3465, + 0x498: 0x315e, 0x499: 0x346f, 0x49a: 0x46f1, 0x49b: 0x4782, 0x49c: 0x3997, 0x49d: 0x3b26, + 0x49e: 0x3177, 0x49f: 0x3488, 0x4a0: 0x3181, 0x4a1: 0x3492, 0x4a2: 0x4700, 0x4a3: 0x4791, + 0x4a4: 0x399e, 0x4a5: 0x3b2d, 0x4a6: 0x39a5, 0x4a7: 0x3b34, 0x4a8: 0x39ac, 0x4a9: 0x3b3b, + 0x4aa: 0x3190, 0x4ab: 0x34a1, 0x4ac: 0x319a, 0x4ad: 0x34b0, 0x4ae: 0x31ae, 0x4af: 0x34c4, + 0x4b0: 0x31a9, 0x4b1: 0x34bf, 0x4b2: 0x31ea, 0x4b3: 0x3500, 0x4b4: 0x31f9, 0x4b5: 0x350f, + 0x4b6: 0x31f4, 0x4b7: 0x350a, 0x4b8: 0x39b3, 0x4b9: 0x3b42, 0x4ba: 0x39ba, 0x4bb: 0x3b49, + 0x4bc: 0x31fe, 0x4bd: 0x3514, 0x4be: 0x3203, 0x4bf: 0x3519, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x3208, 0x4c1: 0x351e, 0x4c2: 0x320d, 0x4c3: 0x3523, 0x4c4: 0x321c, 0x4c5: 0x3532, + 0x4c6: 0x3217, 0x4c7: 0x352d, 0x4c8: 0x3221, 0x4c9: 0x353c, 0x4ca: 0x3226, 0x4cb: 0x3541, + 0x4cc: 0x322b, 0x4cd: 0x3546, 0x4ce: 0x3249, 0x4cf: 0x3564, 0x4d0: 0x3262, 0x4d1: 0x3582, + 0x4d2: 0x3271, 0x4d3: 0x3591, 0x4d4: 0x3276, 0x4d5: 0x3596, 0x4d6: 0x337a, 0x4d7: 0x34a6, + 0x4d8: 0x3537, 0x4d9: 0x3573, 0x4db: 0x35d1, + 0x4e0: 0x46a1, 0x4e1: 0x4732, 0x4e2: 0x2f83, 0x4e3: 0x328f, + 0x4e4: 0x3878, 0x4e5: 0x3a07, 0x4e6: 0x3871, 0x4e7: 0x3a00, 0x4e8: 0x3886, 0x4e9: 0x3a15, + 0x4ea: 0x387f, 0x4eb: 0x3a0e, 0x4ec: 0x38be, 0x4ed: 0x3a4d, 0x4ee: 0x3894, 0x4ef: 0x3a23, + 0x4f0: 0x388d, 0x4f1: 0x3a1c, 0x4f2: 0x38a2, 0x4f3: 0x3a31, 0x4f4: 0x389b, 0x4f5: 0x3a2a, + 0x4f6: 0x38c5, 0x4f7: 0x3a54, 0x4f8: 0x46b5, 0x4f9: 0x4746, 0x4fa: 0x3000, 0x4fb: 0x330c, + 0x4fc: 0x2fec, 0x4fd: 0x32f8, 0x4fe: 0x38da, 0x4ff: 0x3a69, + // Block 0x14, offset 0x500 + 0x500: 0x38d3, 0x501: 0x3a62, 0x502: 0x38e8, 0x503: 0x3a77, 0x504: 0x38e1, 0x505: 0x3a70, + 0x506: 0x38fd, 0x507: 0x3a8c, 0x508: 0x3091, 0x509: 0x339d, 0x50a: 0x30a5, 0x50b: 0x33b1, + 0x50c: 0x46e7, 0x50d: 0x4778, 0x50e: 0x3136, 0x50f: 0x3447, 0x510: 0x3920, 0x511: 0x3aaf, + 0x512: 0x3919, 0x513: 0x3aa8, 0x514: 0x392e, 0x515: 0x3abd, 0x516: 0x3927, 0x517: 0x3ab6, + 0x518: 0x3989, 0x519: 0x3b18, 0x51a: 0x396d, 0x51b: 0x3afc, 0x51c: 0x3966, 0x51d: 0x3af5, + 0x51e: 0x397b, 0x51f: 0x3b0a, 0x520: 0x3974, 0x521: 0x3b03, 0x522: 0x3982, 0x523: 0x3b11, + 0x524: 0x31e5, 0x525: 0x34fb, 0x526: 0x31c7, 0x527: 0x34dd, 0x528: 0x39e4, 0x529: 0x3b73, + 0x52a: 0x39dd, 0x52b: 0x3b6c, 0x52c: 0x39f2, 0x52d: 0x3b81, 0x52e: 0x39eb, 0x52f: 0x3b7a, + 0x530: 0x39f9, 0x531: 0x3b88, 0x532: 0x3230, 0x533: 0x354b, 0x534: 0x3258, 0x535: 0x3578, + 0x536: 0x3253, 0x537: 0x356e, 0x538: 0x323f, 0x539: 0x355a, + // Block 0x15, offset 0x540 + 0x540: 0x4804, 0x541: 0x480a, 0x542: 0x491e, 0x543: 0x4936, 0x544: 0x4926, 0x545: 0x493e, + 0x546: 0x492e, 0x547: 0x4946, 0x548: 0x47aa, 0x549: 0x47b0, 0x54a: 0x488e, 0x54b: 0x48a6, + 0x54c: 0x4896, 0x54d: 0x48ae, 0x54e: 0x489e, 0x54f: 0x48b6, 0x550: 0x4816, 0x551: 0x481c, + 0x552: 0x3db8, 0x553: 0x3dc8, 0x554: 0x3dc0, 0x555: 0x3dd0, + 0x558: 0x47b6, 0x559: 0x47bc, 0x55a: 0x3ce8, 0x55b: 0x3cf8, 0x55c: 0x3cf0, 0x55d: 0x3d00, + 0x560: 0x482e, 0x561: 0x4834, 0x562: 0x494e, 0x563: 0x4966, + 0x564: 0x4956, 0x565: 0x496e, 0x566: 0x495e, 0x567: 0x4976, 0x568: 0x47c2, 0x569: 0x47c8, + 0x56a: 0x48be, 0x56b: 0x48d6, 0x56c: 0x48c6, 0x56d: 0x48de, 0x56e: 0x48ce, 0x56f: 0x48e6, + 0x570: 0x4846, 0x571: 0x484c, 0x572: 0x3e18, 0x573: 0x3e30, 0x574: 0x3e20, 0x575: 0x3e38, + 0x576: 0x3e28, 0x577: 0x3e40, 0x578: 0x47ce, 0x579: 0x47d4, 0x57a: 0x3d18, 0x57b: 0x3d30, + 0x57c: 0x3d20, 0x57d: 0x3d38, 0x57e: 0x3d28, 0x57f: 0x3d40, + // Block 0x16, offset 0x580 + 0x580: 0x4852, 0x581: 0x4858, 0x582: 0x3e48, 0x583: 0x3e58, 0x584: 0x3e50, 0x585: 0x3e60, + 0x588: 0x47da, 0x589: 0x47e0, 0x58a: 0x3d48, 0x58b: 0x3d58, + 0x58c: 0x3d50, 0x58d: 0x3d60, 0x590: 0x4864, 0x591: 0x486a, + 0x592: 0x3e80, 0x593: 0x3e98, 0x594: 0x3e88, 0x595: 0x3ea0, 0x596: 0x3e90, 0x597: 0x3ea8, + 0x599: 0x47e6, 0x59b: 0x3d68, 0x59d: 0x3d70, + 0x59f: 0x3d78, 0x5a0: 0x487c, 0x5a1: 0x4882, 0x5a2: 0x497e, 0x5a3: 0x4996, + 0x5a4: 0x4986, 0x5a5: 0x499e, 0x5a6: 0x498e, 0x5a7: 0x49a6, 0x5a8: 0x47ec, 0x5a9: 0x47f2, + 0x5aa: 0x48ee, 0x5ab: 0x4906, 0x5ac: 0x48f6, 0x5ad: 0x490e, 0x5ae: 0x48fe, 0x5af: 0x4916, + 0x5b0: 0x47f8, 0x5b1: 0x431e, 0x5b2: 0x3691, 0x5b3: 0x4324, 0x5b4: 0x4822, 0x5b5: 0x432a, + 0x5b6: 0x36a3, 0x5b7: 0x4330, 0x5b8: 0x36c1, 0x5b9: 0x4336, 0x5ba: 0x36d9, 0x5bb: 0x433c, + 0x5bc: 0x4870, 0x5bd: 0x4342, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x3da0, 0x5c1: 0x3da8, 0x5c2: 0x4184, 0x5c3: 0x41a2, 0x5c4: 0x418e, 0x5c5: 0x41ac, + 0x5c6: 0x4198, 0x5c7: 0x41b6, 0x5c8: 0x3cd8, 0x5c9: 0x3ce0, 0x5ca: 0x40d0, 0x5cb: 0x40ee, + 0x5cc: 0x40da, 0x5cd: 0x40f8, 0x5ce: 0x40e4, 0x5cf: 0x4102, 0x5d0: 0x3de8, 0x5d1: 0x3df0, + 0x5d2: 0x41c0, 0x5d3: 0x41de, 0x5d4: 0x41ca, 0x5d5: 0x41e8, 0x5d6: 0x41d4, 0x5d7: 0x41f2, + 0x5d8: 0x3d08, 0x5d9: 0x3d10, 0x5da: 0x410c, 0x5db: 0x412a, 0x5dc: 0x4116, 0x5dd: 0x4134, + 0x5de: 0x4120, 0x5df: 0x413e, 0x5e0: 0x3ec0, 0x5e1: 0x3ec8, 0x5e2: 0x41fc, 0x5e3: 0x421a, + 0x5e4: 0x4206, 0x5e5: 0x4224, 0x5e6: 0x4210, 0x5e7: 0x422e, 0x5e8: 0x3d80, 0x5e9: 0x3d88, + 0x5ea: 0x4148, 0x5eb: 0x4166, 0x5ec: 0x4152, 0x5ed: 0x4170, 0x5ee: 0x415c, 0x5ef: 0x417a, + 0x5f0: 0x3685, 0x5f1: 0x367f, 0x5f2: 0x3d90, 0x5f3: 0x368b, 0x5f4: 0x3d98, + 0x5f6: 0x4810, 0x5f7: 0x3db0, 0x5f8: 0x35f5, 0x5f9: 0x35ef, 0x5fa: 0x35e3, 0x5fb: 0x42ee, + 0x5fc: 0x35fb, 0x5fd: 0x8100, 0x5fe: 0x01d3, 0x5ff: 0xa100, + // Block 0x18, offset 0x600 + 0x600: 0x8100, 0x601: 0x35a7, 0x602: 0x3dd8, 0x603: 0x369d, 0x604: 0x3de0, + 0x606: 0x483a, 0x607: 0x3df8, 0x608: 0x3601, 0x609: 0x42f4, 0x60a: 0x360d, 0x60b: 0x42fa, + 0x60c: 0x3619, 0x60d: 0x3b8f, 0x60e: 0x3b96, 0x60f: 0x3b9d, 0x610: 0x36b5, 0x611: 0x36af, + 0x612: 0x3e00, 0x613: 0x44e4, 0x616: 0x36bb, 0x617: 0x3e10, + 0x618: 0x3631, 0x619: 0x362b, 0x61a: 0x361f, 0x61b: 0x4300, 0x61d: 0x3ba4, + 0x61e: 0x3bab, 0x61f: 0x3bb2, 0x620: 0x36eb, 0x621: 0x36e5, 0x622: 0x3e68, 0x623: 0x44ec, + 0x624: 0x36cd, 0x625: 0x36d3, 0x626: 0x36f1, 0x627: 0x3e78, 0x628: 0x3661, 0x629: 0x365b, + 0x62a: 0x364f, 0x62b: 0x430c, 0x62c: 0x3649, 0x62d: 0x359b, 0x62e: 0x42e8, 0x62f: 0x0081, + 0x632: 0x3eb0, 0x633: 0x36f7, 0x634: 0x3eb8, + 0x636: 0x4888, 0x637: 0x3ed0, 0x638: 0x363d, 0x639: 0x4306, 0x63a: 0x366d, 0x63b: 0x4318, + 0x63c: 0x3679, 0x63d: 0x4256, 0x63e: 0xa100, + // Block 0x19, offset 0x640 + 0x641: 0x3c06, 0x643: 0xa000, 0x644: 0x3c0d, 0x645: 0xa000, + 0x647: 0x3c14, 0x648: 0xa000, 0x649: 0x3c1b, + 0x64d: 0xa000, + 0x660: 0x2f65, 0x661: 0xa000, 0x662: 0x3c29, + 0x664: 0xa000, 0x665: 0xa000, + 0x66d: 0x3c22, 0x66e: 0x2f60, 0x66f: 0x2f6a, + 0x670: 0x3c30, 0x671: 0x3c37, 0x672: 0xa000, 0x673: 0xa000, 0x674: 0x3c3e, 0x675: 0x3c45, + 0x676: 0xa000, 0x677: 0xa000, 0x678: 0x3c4c, 0x679: 0x3c53, 0x67a: 0xa000, 0x67b: 0xa000, + 0x67c: 0xa000, 0x67d: 0xa000, + // Block 0x1a, offset 0x680 + 0x680: 0x3c5a, 0x681: 0x3c61, 0x682: 0xa000, 0x683: 0xa000, 0x684: 0x3c76, 0x685: 0x3c7d, + 0x686: 0xa000, 0x687: 0xa000, 0x688: 0x3c84, 0x689: 0x3c8b, + 0x691: 0xa000, + 0x692: 0xa000, + 0x6a2: 0xa000, + 0x6a8: 0xa000, 0x6a9: 0xa000, + 0x6ab: 0xa000, 0x6ac: 0x3ca0, 0x6ad: 0x3ca7, 0x6ae: 0x3cae, 0x6af: 0x3cb5, + 0x6b2: 0xa000, 0x6b3: 0xa000, 0x6b4: 0xa000, 0x6b5: 0xa000, + // Block 0x1b, offset 0x6c0 + 0x6c6: 0xa000, 0x6cb: 0xa000, + 0x6cc: 0x3f08, 0x6cd: 0xa000, 0x6ce: 0x3f10, 0x6cf: 0xa000, 0x6d0: 0x3f18, 0x6d1: 0xa000, + 0x6d2: 0x3f20, 0x6d3: 0xa000, 0x6d4: 0x3f28, 0x6d5: 0xa000, 0x6d6: 0x3f30, 0x6d7: 0xa000, + 0x6d8: 0x3f38, 0x6d9: 0xa000, 0x6da: 0x3f40, 0x6db: 0xa000, 0x6dc: 0x3f48, 0x6dd: 0xa000, + 0x6de: 0x3f50, 0x6df: 0xa000, 0x6e0: 0x3f58, 0x6e1: 0xa000, 0x6e2: 0x3f60, + 0x6e4: 0xa000, 0x6e5: 0x3f68, 0x6e6: 0xa000, 0x6e7: 0x3f70, 0x6e8: 0xa000, 0x6e9: 0x3f78, + 0x6ef: 0xa000, + 0x6f0: 0x3f80, 0x6f1: 0x3f88, 0x6f2: 0xa000, 0x6f3: 0x3f90, 0x6f4: 0x3f98, 0x6f5: 0xa000, + 0x6f6: 0x3fa0, 0x6f7: 0x3fa8, 0x6f8: 0xa000, 0x6f9: 0x3fb0, 0x6fa: 0x3fb8, 0x6fb: 0xa000, + 0x6fc: 0x3fc0, 0x6fd: 0x3fc8, + // Block 0x1c, offset 0x700 + 0x714: 0x3f00, + 0x719: 0x9903, 0x71a: 0x9903, 0x71b: 0x8100, 0x71c: 0x8100, 0x71d: 0xa000, + 0x71e: 0x3fd0, + 0x726: 0xa000, + 0x72b: 0xa000, 0x72c: 0x3fe0, 0x72d: 0xa000, 0x72e: 0x3fe8, 0x72f: 0xa000, + 0x730: 0x3ff0, 0x731: 0xa000, 0x732: 0x3ff8, 0x733: 0xa000, 0x734: 0x4000, 0x735: 0xa000, + 0x736: 0x4008, 0x737: 0xa000, 0x738: 0x4010, 0x739: 0xa000, 0x73a: 0x4018, 0x73b: 0xa000, + 0x73c: 0x4020, 0x73d: 0xa000, 0x73e: 0x4028, 0x73f: 0xa000, + // Block 0x1d, offset 0x740 + 0x740: 0x4030, 0x741: 0xa000, 0x742: 0x4038, 0x744: 0xa000, 0x745: 0x4040, + 0x746: 0xa000, 0x747: 0x4048, 0x748: 0xa000, 0x749: 0x4050, + 0x74f: 0xa000, 0x750: 0x4058, 0x751: 0x4060, + 0x752: 0xa000, 0x753: 0x4068, 0x754: 0x4070, 0x755: 0xa000, 0x756: 0x4078, 0x757: 0x4080, + 0x758: 0xa000, 0x759: 0x4088, 0x75a: 0x4090, 0x75b: 0xa000, 0x75c: 0x4098, 0x75d: 0x40a0, + 0x76f: 0xa000, + 0x770: 0xa000, 0x771: 0xa000, 0x772: 0xa000, 0x774: 0x3fd8, + 0x777: 0x40a8, 0x778: 0x40b0, 0x779: 0x40b8, 0x77a: 0x40c0, + 0x77d: 0xa000, 0x77e: 0x40c8, + // Block 0x1e, offset 0x780 + 0x780: 0x1377, 0x781: 0x0cfb, 0x782: 0x13d3, 0x783: 0x139f, 0x784: 0x0e57, 0x785: 0x06eb, + 0x786: 0x08df, 0x787: 0x162b, 0x788: 0x162b, 0x789: 0x0a0b, 0x78a: 0x145f, 0x78b: 0x0943, + 0x78c: 0x0a07, 0x78d: 0x0bef, 0x78e: 0x0fcf, 0x78f: 0x115f, 0x790: 0x1297, 0x791: 0x12d3, + 0x792: 0x1307, 0x793: 0x141b, 0x794: 0x0d73, 0x795: 0x0dff, 0x796: 0x0eab, 0x797: 0x0f43, + 0x798: 0x125f, 0x799: 0x1447, 0x79a: 0x1573, 0x79b: 0x070f, 0x79c: 0x08b3, 0x79d: 0x0d87, + 0x79e: 0x0ecf, 0x79f: 0x1293, 0x7a0: 0x15c3, 0x7a1: 0x0ab3, 0x7a2: 0x0e77, 0x7a3: 0x1283, + 0x7a4: 0x1317, 0x7a5: 0x0c23, 0x7a6: 0x11bb, 0x7a7: 0x12df, 0x7a8: 0x0b1f, 0x7a9: 0x0d0f, + 0x7aa: 0x0e17, 0x7ab: 0x0f1b, 0x7ac: 0x1427, 0x7ad: 0x074f, 0x7ae: 0x07e7, 0x7af: 0x0853, + 0x7b0: 0x0c8b, 0x7b1: 0x0d7f, 0x7b2: 0x0ecb, 0x7b3: 0x0fef, 0x7b4: 0x1177, 0x7b5: 0x128b, + 0x7b6: 0x12a3, 0x7b7: 0x13c7, 0x7b8: 0x14ef, 0x7b9: 0x15a3, 0x7ba: 0x15bf, 0x7bb: 0x102b, + 0x7bc: 0x106b, 0x7bd: 0x1123, 0x7be: 0x1243, 0x7bf: 0x147b, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x15cb, 0x7c1: 0x134b, 0x7c2: 0x09c7, 0x7c3: 0x0b3b, 0x7c4: 0x10db, 0x7c5: 0x119b, + 0x7c6: 0x0eff, 0x7c7: 0x1033, 0x7c8: 0x1397, 0x7c9: 0x14e7, 0x7ca: 0x09c3, 0x7cb: 0x0a8f, + 0x7cc: 0x0d77, 0x7cd: 0x0e2b, 0x7ce: 0x0e5f, 0x7cf: 0x1113, 0x7d0: 0x113b, 0x7d1: 0x14a7, + 0x7d2: 0x084f, 0x7d3: 0x11a7, 0x7d4: 0x07f3, 0x7d5: 0x07ef, 0x7d6: 0x1097, 0x7d7: 0x1127, + 0x7d8: 0x125b, 0x7d9: 0x14af, 0x7da: 0x1367, 0x7db: 0x0c27, 0x7dc: 0x0d73, 0x7dd: 0x1357, + 0x7de: 0x06f7, 0x7df: 0x0a63, 0x7e0: 0x0b93, 0x7e1: 0x0f2f, 0x7e2: 0x0faf, 0x7e3: 0x0873, + 0x7e4: 0x103b, 0x7e5: 0x075f, 0x7e6: 0x0b77, 0x7e7: 0x06d7, 0x7e8: 0x0deb, 0x7e9: 0x0ca3, + 0x7ea: 0x110f, 0x7eb: 0x08c7, 0x7ec: 0x09b3, 0x7ed: 0x0ffb, 0x7ee: 0x1263, 0x7ef: 0x133b, + 0x7f0: 0x0db7, 0x7f1: 0x13f7, 0x7f2: 0x0de3, 0x7f3: 0x0c37, 0x7f4: 0x121b, 0x7f5: 0x0c57, + 0x7f6: 0x0fab, 0x7f7: 0x072b, 0x7f8: 0x07a7, 0x7f9: 0x07eb, 0x7fa: 0x0d53, 0x7fb: 0x10fb, + 0x7fc: 0x11f3, 0x7fd: 0x1347, 0x7fe: 0x145b, 0x7ff: 0x085b, + // Block 0x20, offset 0x800 + 0x800: 0x090f, 0x801: 0x0a17, 0x802: 0x0b2f, 0x803: 0x0cbf, 0x804: 0x0e7b, 0x805: 0x103f, + 0x806: 0x1497, 0x807: 0x157b, 0x808: 0x15cf, 0x809: 0x15e7, 0x80a: 0x0837, 0x80b: 0x0cf3, + 0x80c: 0x0da3, 0x80d: 0x13eb, 0x80e: 0x0afb, 0x80f: 0x0bd7, 0x810: 0x0bf3, 0x811: 0x0c83, + 0x812: 0x0e6b, 0x813: 0x0eb7, 0x814: 0x0f67, 0x815: 0x108b, 0x816: 0x112f, 0x817: 0x1193, + 0x818: 0x13db, 0x819: 0x126b, 0x81a: 0x1403, 0x81b: 0x147f, 0x81c: 0x080f, 0x81d: 0x083b, + 0x81e: 0x0923, 0x81f: 0x0ea7, 0x820: 0x12f3, 0x821: 0x133b, 0x822: 0x0b1b, 0x823: 0x0b8b, + 0x824: 0x0c4f, 0x825: 0x0daf, 0x826: 0x10d7, 0x827: 0x0f23, 0x828: 0x073b, 0x829: 0x097f, + 0x82a: 0x0a63, 0x82b: 0x0ac7, 0x82c: 0x0b97, 0x82d: 0x0f3f, 0x82e: 0x0f5b, 0x82f: 0x116b, + 0x830: 0x118b, 0x831: 0x1463, 0x832: 0x14e3, 0x833: 0x14f3, 0x834: 0x152f, 0x835: 0x0753, + 0x836: 0x107f, 0x837: 0x144f, 0x838: 0x14cb, 0x839: 0x0baf, 0x83a: 0x0717, 0x83b: 0x0777, + 0x83c: 0x0a67, 0x83d: 0x0a87, 0x83e: 0x0caf, 0x83f: 0x0d73, + // Block 0x21, offset 0x840 + 0x840: 0x0ec3, 0x841: 0x0fcb, 0x842: 0x1277, 0x843: 0x1417, 0x844: 0x1623, 0x845: 0x0ce3, + 0x846: 0x14a3, 0x847: 0x0833, 0x848: 0x0d2f, 0x849: 0x0d3b, 0x84a: 0x0e0f, 0x84b: 0x0e47, + 0x84c: 0x0f4b, 0x84d: 0x0fa7, 0x84e: 0x1027, 0x84f: 0x110b, 0x850: 0x153b, 0x851: 0x07af, + 0x852: 0x0c03, 0x853: 0x14b3, 0x854: 0x0767, 0x855: 0x0aab, 0x856: 0x0e2f, 0x857: 0x13df, + 0x858: 0x0b67, 0x859: 0x0bb7, 0x85a: 0x0d43, 0x85b: 0x0f2f, 0x85c: 0x14bb, 0x85d: 0x0817, + 0x85e: 0x08ff, 0x85f: 0x0a97, 0x860: 0x0cd3, 0x861: 0x0d1f, 0x862: 0x0d5f, 0x863: 0x0df3, + 0x864: 0x0f47, 0x865: 0x0fbb, 0x866: 0x1157, 0x867: 0x12f7, 0x868: 0x1303, 0x869: 0x1457, + 0x86a: 0x14d7, 0x86b: 0x0883, 0x86c: 0x0e4b, 0x86d: 0x0903, 0x86e: 0x0ec7, 0x86f: 0x0f6b, + 0x870: 0x1287, 0x871: 0x14bf, 0x872: 0x15ab, 0x873: 0x15d3, 0x874: 0x0d37, 0x875: 0x0e27, + 0x876: 0x11c3, 0x877: 0x10b7, 0x878: 0x10c3, 0x879: 0x10e7, 0x87a: 0x0f17, 0x87b: 0x0e9f, + 0x87c: 0x1363, 0x87d: 0x0733, 0x87e: 0x122b, 0x87f: 0x081b, + // Block 0x22, offset 0x880 + 0x880: 0x080b, 0x881: 0x0b0b, 0x882: 0x0c2b, 0x883: 0x10f3, 0x884: 0x0a53, 0x885: 0x0e03, + 0x886: 0x0cef, 0x887: 0x13e7, 0x888: 0x12e7, 0x889: 0x14ab, 0x88a: 0x1323, 0x88b: 0x0b27, + 0x88c: 0x0787, 0x88d: 0x095b, 0x890: 0x09af, + 0x892: 0x0cdf, 0x895: 0x07f7, 0x896: 0x0f1f, 0x897: 0x0fe3, + 0x898: 0x1047, 0x899: 0x1063, 0x89a: 0x1067, 0x89b: 0x107b, 0x89c: 0x14fb, 0x89d: 0x10eb, + 0x89e: 0x116f, 0x8a0: 0x128f, 0x8a2: 0x1353, + 0x8a5: 0x1407, 0x8a6: 0x1433, + 0x8aa: 0x154f, 0x8ab: 0x1553, 0x8ac: 0x1557, 0x8ad: 0x15bb, 0x8ae: 0x142b, 0x8af: 0x14c7, + 0x8b0: 0x0757, 0x8b1: 0x077b, 0x8b2: 0x078f, 0x8b3: 0x084b, 0x8b4: 0x0857, 0x8b5: 0x0897, + 0x8b6: 0x094b, 0x8b7: 0x0967, 0x8b8: 0x096f, 0x8b9: 0x09ab, 0x8ba: 0x09b7, 0x8bb: 0x0a93, + 0x8bc: 0x0a9b, 0x8bd: 0x0ba3, 0x8be: 0x0bcb, 0x8bf: 0x0bd3, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x0beb, 0x8c1: 0x0c97, 0x8c2: 0x0cc7, 0x8c3: 0x0ce7, 0x8c4: 0x0d57, 0x8c5: 0x0e1b, + 0x8c6: 0x0e37, 0x8c7: 0x0e67, 0x8c8: 0x0ebb, 0x8c9: 0x0edb, 0x8ca: 0x0f4f, 0x8cb: 0x102f, + 0x8cc: 0x104b, 0x8cd: 0x1053, 0x8ce: 0x104f, 0x8cf: 0x1057, 0x8d0: 0x105b, 0x8d1: 0x105f, + 0x8d2: 0x1073, 0x8d3: 0x1077, 0x8d4: 0x109b, 0x8d5: 0x10af, 0x8d6: 0x10cb, 0x8d7: 0x112f, + 0x8d8: 0x1137, 0x8d9: 0x113f, 0x8da: 0x1153, 0x8db: 0x117b, 0x8dc: 0x11cb, 0x8dd: 0x11ff, + 0x8de: 0x11ff, 0x8df: 0x1267, 0x8e0: 0x130f, 0x8e1: 0x1327, 0x8e2: 0x135b, 0x8e3: 0x135f, + 0x8e4: 0x13a3, 0x8e5: 0x13a7, 0x8e6: 0x13ff, 0x8e7: 0x1407, 0x8e8: 0x14db, 0x8e9: 0x151f, + 0x8ea: 0x1537, 0x8eb: 0x0b9b, 0x8ec: 0x171e, 0x8ed: 0x11e3, + 0x8f0: 0x06df, 0x8f1: 0x07e3, 0x8f2: 0x07a3, 0x8f3: 0x074b, 0x8f4: 0x078b, 0x8f5: 0x07b7, + 0x8f6: 0x0847, 0x8f7: 0x0863, 0x8f8: 0x094b, 0x8f9: 0x0937, 0x8fa: 0x0947, 0x8fb: 0x0963, + 0x8fc: 0x09af, 0x8fd: 0x09bf, 0x8fe: 0x0a03, 0x8ff: 0x0a0f, + // Block 0x24, offset 0x900 + 0x900: 0x0a2b, 0x901: 0x0a3b, 0x902: 0x0b23, 0x903: 0x0b2b, 0x904: 0x0b5b, 0x905: 0x0b7b, + 0x906: 0x0bab, 0x907: 0x0bc3, 0x908: 0x0bb3, 0x909: 0x0bd3, 0x90a: 0x0bc7, 0x90b: 0x0beb, + 0x90c: 0x0c07, 0x90d: 0x0c5f, 0x90e: 0x0c6b, 0x90f: 0x0c73, 0x910: 0x0c9b, 0x911: 0x0cdf, + 0x912: 0x0d0f, 0x913: 0x0d13, 0x914: 0x0d27, 0x915: 0x0da7, 0x916: 0x0db7, 0x917: 0x0e0f, + 0x918: 0x0e5b, 0x919: 0x0e53, 0x91a: 0x0e67, 0x91b: 0x0e83, 0x91c: 0x0ebb, 0x91d: 0x1013, + 0x91e: 0x0edf, 0x91f: 0x0f13, 0x920: 0x0f1f, 0x921: 0x0f5f, 0x922: 0x0f7b, 0x923: 0x0f9f, + 0x924: 0x0fc3, 0x925: 0x0fc7, 0x926: 0x0fe3, 0x927: 0x0fe7, 0x928: 0x0ff7, 0x929: 0x100b, + 0x92a: 0x1007, 0x92b: 0x1037, 0x92c: 0x10b3, 0x92d: 0x10cb, 0x92e: 0x10e3, 0x92f: 0x111b, + 0x930: 0x112f, 0x931: 0x114b, 0x932: 0x117b, 0x933: 0x122f, 0x934: 0x1257, 0x935: 0x12cb, + 0x936: 0x1313, 0x937: 0x131f, 0x938: 0x1327, 0x939: 0x133f, 0x93a: 0x1353, 0x93b: 0x1343, + 0x93c: 0x135b, 0x93d: 0x1357, 0x93e: 0x134f, 0x93f: 0x135f, + // Block 0x25, offset 0x940 + 0x940: 0x136b, 0x941: 0x13a7, 0x942: 0x13e3, 0x943: 0x1413, 0x944: 0x144b, 0x945: 0x146b, + 0x946: 0x14b7, 0x947: 0x14db, 0x948: 0x14fb, 0x949: 0x150f, 0x94a: 0x151f, 0x94b: 0x152b, + 0x94c: 0x1537, 0x94d: 0x158b, 0x94e: 0x162b, 0x94f: 0x16b5, 0x950: 0x16b0, 0x951: 0x16e2, + 0x952: 0x0607, 0x953: 0x062f, 0x954: 0x0633, 0x955: 0x1764, 0x956: 0x1791, 0x957: 0x1809, + 0x958: 0x1617, 0x959: 0x1627, + // Block 0x26, offset 0x980 + 0x980: 0x06fb, 0x981: 0x06f3, 0x982: 0x0703, 0x983: 0x1647, 0x984: 0x0747, 0x985: 0x0757, + 0x986: 0x075b, 0x987: 0x0763, 0x988: 0x076b, 0x989: 0x076f, 0x98a: 0x077b, 0x98b: 0x0773, + 0x98c: 0x05b3, 0x98d: 0x165b, 0x98e: 0x078f, 0x98f: 0x0793, 0x990: 0x0797, 0x991: 0x07b3, + 0x992: 0x164c, 0x993: 0x05b7, 0x994: 0x079f, 0x995: 0x07bf, 0x996: 0x1656, 0x997: 0x07cf, + 0x998: 0x07d7, 0x999: 0x0737, 0x99a: 0x07df, 0x99b: 0x07e3, 0x99c: 0x1831, 0x99d: 0x07ff, + 0x99e: 0x0807, 0x99f: 0x05bf, 0x9a0: 0x081f, 0x9a1: 0x0823, 0x9a2: 0x082b, 0x9a3: 0x082f, + 0x9a4: 0x05c3, 0x9a5: 0x0847, 0x9a6: 0x084b, 0x9a7: 0x0857, 0x9a8: 0x0863, 0x9a9: 0x0867, + 0x9aa: 0x086b, 0x9ab: 0x0873, 0x9ac: 0x0893, 0x9ad: 0x0897, 0x9ae: 0x089f, 0x9af: 0x08af, + 0x9b0: 0x08b7, 0x9b1: 0x08bb, 0x9b2: 0x08bb, 0x9b3: 0x08bb, 0x9b4: 0x166a, 0x9b5: 0x0e93, + 0x9b6: 0x08cf, 0x9b7: 0x08d7, 0x9b8: 0x166f, 0x9b9: 0x08e3, 0x9ba: 0x08eb, 0x9bb: 0x08f3, + 0x9bc: 0x091b, 0x9bd: 0x0907, 0x9be: 0x0913, 0x9bf: 0x0917, + // Block 0x27, offset 0x9c0 + 0x9c0: 0x091f, 0x9c1: 0x0927, 0x9c2: 0x092b, 0x9c3: 0x0933, 0x9c4: 0x093b, 0x9c5: 0x093f, + 0x9c6: 0x093f, 0x9c7: 0x0947, 0x9c8: 0x094f, 0x9c9: 0x0953, 0x9ca: 0x095f, 0x9cb: 0x0983, + 0x9cc: 0x0967, 0x9cd: 0x0987, 0x9ce: 0x096b, 0x9cf: 0x0973, 0x9d0: 0x080b, 0x9d1: 0x09cf, + 0x9d2: 0x0997, 0x9d3: 0x099b, 0x9d4: 0x099f, 0x9d5: 0x0993, 0x9d6: 0x09a7, 0x9d7: 0x09a3, + 0x9d8: 0x09bb, 0x9d9: 0x1674, 0x9da: 0x09d7, 0x9db: 0x09db, 0x9dc: 0x09e3, 0x9dd: 0x09ef, + 0x9de: 0x09f7, 0x9df: 0x0a13, 0x9e0: 0x1679, 0x9e1: 0x167e, 0x9e2: 0x0a1f, 0x9e3: 0x0a23, + 0x9e4: 0x0a27, 0x9e5: 0x0a1b, 0x9e6: 0x0a2f, 0x9e7: 0x05c7, 0x9e8: 0x05cb, 0x9e9: 0x0a37, + 0x9ea: 0x0a3f, 0x9eb: 0x0a3f, 0x9ec: 0x1683, 0x9ed: 0x0a5b, 0x9ee: 0x0a5f, 0x9ef: 0x0a63, + 0x9f0: 0x0a6b, 0x9f1: 0x1688, 0x9f2: 0x0a73, 0x9f3: 0x0a77, 0x9f4: 0x0b4f, 0x9f5: 0x0a7f, + 0x9f6: 0x05cf, 0x9f7: 0x0a8b, 0x9f8: 0x0a9b, 0x9f9: 0x0aa7, 0x9fa: 0x0aa3, 0x9fb: 0x1692, + 0x9fc: 0x0aaf, 0x9fd: 0x1697, 0x9fe: 0x0abb, 0x9ff: 0x0ab7, + // Block 0x28, offset 0xa00 + 0xa00: 0x0abf, 0xa01: 0x0acf, 0xa02: 0x0ad3, 0xa03: 0x05d3, 0xa04: 0x0ae3, 0xa05: 0x0aeb, + 0xa06: 0x0aef, 0xa07: 0x0af3, 0xa08: 0x05d7, 0xa09: 0x169c, 0xa0a: 0x05db, 0xa0b: 0x0b0f, + 0xa0c: 0x0b13, 0xa0d: 0x0b17, 0xa0e: 0x0b1f, 0xa0f: 0x1863, 0xa10: 0x0b37, 0xa11: 0x16a6, + 0xa12: 0x16a6, 0xa13: 0x11d7, 0xa14: 0x0b47, 0xa15: 0x0b47, 0xa16: 0x05df, 0xa17: 0x16c9, + 0xa18: 0x179b, 0xa19: 0x0b57, 0xa1a: 0x0b5f, 0xa1b: 0x05e3, 0xa1c: 0x0b73, 0xa1d: 0x0b83, + 0xa1e: 0x0b87, 0xa1f: 0x0b8f, 0xa20: 0x0b9f, 0xa21: 0x05eb, 0xa22: 0x05e7, 0xa23: 0x0ba3, + 0xa24: 0x16ab, 0xa25: 0x0ba7, 0xa26: 0x0bbb, 0xa27: 0x0bbf, 0xa28: 0x0bc3, 0xa29: 0x0bbf, + 0xa2a: 0x0bcf, 0xa2b: 0x0bd3, 0xa2c: 0x0be3, 0xa2d: 0x0bdb, 0xa2e: 0x0bdf, 0xa2f: 0x0be7, + 0xa30: 0x0beb, 0xa31: 0x0bef, 0xa32: 0x0bfb, 0xa33: 0x0bff, 0xa34: 0x0c17, 0xa35: 0x0c1f, + 0xa36: 0x0c2f, 0xa37: 0x0c43, 0xa38: 0x16ba, 0xa39: 0x0c3f, 0xa3a: 0x0c33, 0xa3b: 0x0c4b, + 0xa3c: 0x0c53, 0xa3d: 0x0c67, 0xa3e: 0x16bf, 0xa3f: 0x0c6f, + // Block 0x29, offset 0xa40 + 0xa40: 0x0c63, 0xa41: 0x0c5b, 0xa42: 0x05ef, 0xa43: 0x0c77, 0xa44: 0x0c7f, 0xa45: 0x0c87, + 0xa46: 0x0c7b, 0xa47: 0x05f3, 0xa48: 0x0c97, 0xa49: 0x0c9f, 0xa4a: 0x16c4, 0xa4b: 0x0ccb, + 0xa4c: 0x0cff, 0xa4d: 0x0cdb, 0xa4e: 0x05ff, 0xa4f: 0x0ce7, 0xa50: 0x05fb, 0xa51: 0x05f7, + 0xa52: 0x07c3, 0xa53: 0x07c7, 0xa54: 0x0d03, 0xa55: 0x0ceb, 0xa56: 0x11ab, 0xa57: 0x0663, + 0xa58: 0x0d0f, 0xa59: 0x0d13, 0xa5a: 0x0d17, 0xa5b: 0x0d2b, 0xa5c: 0x0d23, 0xa5d: 0x16dd, + 0xa5e: 0x0603, 0xa5f: 0x0d3f, 0xa60: 0x0d33, 0xa61: 0x0d4f, 0xa62: 0x0d57, 0xa63: 0x16e7, + 0xa64: 0x0d5b, 0xa65: 0x0d47, 0xa66: 0x0d63, 0xa67: 0x0607, 0xa68: 0x0d67, 0xa69: 0x0d6b, + 0xa6a: 0x0d6f, 0xa6b: 0x0d7b, 0xa6c: 0x16ec, 0xa6d: 0x0d83, 0xa6e: 0x060b, 0xa6f: 0x0d8f, + 0xa70: 0x16f1, 0xa71: 0x0d93, 0xa72: 0x060f, 0xa73: 0x0d9f, 0xa74: 0x0dab, 0xa75: 0x0db7, + 0xa76: 0x0dbb, 0xa77: 0x16f6, 0xa78: 0x168d, 0xa79: 0x16fb, 0xa7a: 0x0ddb, 0xa7b: 0x1700, + 0xa7c: 0x0de7, 0xa7d: 0x0def, 0xa7e: 0x0ddf, 0xa7f: 0x0dfb, + // Block 0x2a, offset 0xa80 + 0xa80: 0x0e0b, 0xa81: 0x0e1b, 0xa82: 0x0e0f, 0xa83: 0x0e13, 0xa84: 0x0e1f, 0xa85: 0x0e23, + 0xa86: 0x1705, 0xa87: 0x0e07, 0xa88: 0x0e3b, 0xa89: 0x0e3f, 0xa8a: 0x0613, 0xa8b: 0x0e53, + 0xa8c: 0x0e4f, 0xa8d: 0x170a, 0xa8e: 0x0e33, 0xa8f: 0x0e6f, 0xa90: 0x170f, 0xa91: 0x1714, + 0xa92: 0x0e73, 0xa93: 0x0e87, 0xa94: 0x0e83, 0xa95: 0x0e7f, 0xa96: 0x0617, 0xa97: 0x0e8b, + 0xa98: 0x0e9b, 0xa99: 0x0e97, 0xa9a: 0x0ea3, 0xa9b: 0x1651, 0xa9c: 0x0eb3, 0xa9d: 0x1719, + 0xa9e: 0x0ebf, 0xa9f: 0x1723, 0xaa0: 0x0ed3, 0xaa1: 0x0edf, 0xaa2: 0x0ef3, 0xaa3: 0x1728, + 0xaa4: 0x0f07, 0xaa5: 0x0f0b, 0xaa6: 0x172d, 0xaa7: 0x1732, 0xaa8: 0x0f27, 0xaa9: 0x0f37, + 0xaaa: 0x061b, 0xaab: 0x0f3b, 0xaac: 0x061f, 0xaad: 0x061f, 0xaae: 0x0f53, 0xaaf: 0x0f57, + 0xab0: 0x0f5f, 0xab1: 0x0f63, 0xab2: 0x0f6f, 0xab3: 0x0623, 0xab4: 0x0f87, 0xab5: 0x1737, + 0xab6: 0x0fa3, 0xab7: 0x173c, 0xab8: 0x0faf, 0xab9: 0x16a1, 0xaba: 0x0fbf, 0xabb: 0x1741, + 0xabc: 0x1746, 0xabd: 0x174b, 0xabe: 0x0627, 0xabf: 0x062b, + // Block 0x2b, offset 0xac0 + 0xac0: 0x0ff7, 0xac1: 0x1755, 0xac2: 0x1750, 0xac3: 0x175a, 0xac4: 0x175f, 0xac5: 0x0fff, + 0xac6: 0x1003, 0xac7: 0x1003, 0xac8: 0x100b, 0xac9: 0x0633, 0xaca: 0x100f, 0xacb: 0x0637, + 0xacc: 0x063b, 0xacd: 0x1769, 0xace: 0x1023, 0xacf: 0x102b, 0xad0: 0x1037, 0xad1: 0x063f, + 0xad2: 0x176e, 0xad3: 0x105b, 0xad4: 0x1773, 0xad5: 0x1778, 0xad6: 0x107b, 0xad7: 0x1093, + 0xad8: 0x0643, 0xad9: 0x109b, 0xada: 0x109f, 0xadb: 0x10a3, 0xadc: 0x177d, 0xadd: 0x1782, + 0xade: 0x1782, 0xadf: 0x10bb, 0xae0: 0x0647, 0xae1: 0x1787, 0xae2: 0x10cf, 0xae3: 0x10d3, + 0xae4: 0x064b, 0xae5: 0x178c, 0xae6: 0x10ef, 0xae7: 0x064f, 0xae8: 0x10ff, 0xae9: 0x10f7, + 0xaea: 0x1107, 0xaeb: 0x1796, 0xaec: 0x111f, 0xaed: 0x0653, 0xaee: 0x112b, 0xaef: 0x1133, + 0xaf0: 0x1143, 0xaf1: 0x0657, 0xaf2: 0x17a0, 0xaf3: 0x17a5, 0xaf4: 0x065b, 0xaf5: 0x17aa, + 0xaf6: 0x115b, 0xaf7: 0x17af, 0xaf8: 0x1167, 0xaf9: 0x1173, 0xafa: 0x117b, 0xafb: 0x17b4, + 0xafc: 0x17b9, 0xafd: 0x118f, 0xafe: 0x17be, 0xaff: 0x1197, + // Block 0x2c, offset 0xb00 + 0xb00: 0x16ce, 0xb01: 0x065f, 0xb02: 0x11af, 0xb03: 0x11b3, 0xb04: 0x0667, 0xb05: 0x11b7, + 0xb06: 0x0a33, 0xb07: 0x17c3, 0xb08: 0x17c8, 0xb09: 0x16d3, 0xb0a: 0x16d8, 0xb0b: 0x11d7, + 0xb0c: 0x11db, 0xb0d: 0x13f3, 0xb0e: 0x066b, 0xb0f: 0x1207, 0xb10: 0x1203, 0xb11: 0x120b, + 0xb12: 0x083f, 0xb13: 0x120f, 0xb14: 0x1213, 0xb15: 0x1217, 0xb16: 0x121f, 0xb17: 0x17cd, + 0xb18: 0x121b, 0xb19: 0x1223, 0xb1a: 0x1237, 0xb1b: 0x123b, 0xb1c: 0x1227, 0xb1d: 0x123f, + 0xb1e: 0x1253, 0xb1f: 0x1267, 0xb20: 0x1233, 0xb21: 0x1247, 0xb22: 0x124b, 0xb23: 0x124f, + 0xb24: 0x17d2, 0xb25: 0x17dc, 0xb26: 0x17d7, 0xb27: 0x066f, 0xb28: 0x126f, 0xb29: 0x1273, + 0xb2a: 0x127b, 0xb2b: 0x17f0, 0xb2c: 0x127f, 0xb2d: 0x17e1, 0xb2e: 0x0673, 0xb2f: 0x0677, + 0xb30: 0x17e6, 0xb31: 0x17eb, 0xb32: 0x067b, 0xb33: 0x129f, 0xb34: 0x12a3, 0xb35: 0x12a7, + 0xb36: 0x12ab, 0xb37: 0x12b7, 0xb38: 0x12b3, 0xb39: 0x12bf, 0xb3a: 0x12bb, 0xb3b: 0x12cb, + 0xb3c: 0x12c3, 0xb3d: 0x12c7, 0xb3e: 0x12cf, 0xb3f: 0x067f, + // Block 0x2d, offset 0xb40 + 0xb40: 0x12d7, 0xb41: 0x12db, 0xb42: 0x0683, 0xb43: 0x12eb, 0xb44: 0x12ef, 0xb45: 0x17f5, + 0xb46: 0x12fb, 0xb47: 0x12ff, 0xb48: 0x0687, 0xb49: 0x130b, 0xb4a: 0x05bb, 0xb4b: 0x17fa, + 0xb4c: 0x17ff, 0xb4d: 0x068b, 0xb4e: 0x068f, 0xb4f: 0x1337, 0xb50: 0x134f, 0xb51: 0x136b, + 0xb52: 0x137b, 0xb53: 0x1804, 0xb54: 0x138f, 0xb55: 0x1393, 0xb56: 0x13ab, 0xb57: 0x13b7, + 0xb58: 0x180e, 0xb59: 0x1660, 0xb5a: 0x13c3, 0xb5b: 0x13bf, 0xb5c: 0x13cb, 0xb5d: 0x1665, + 0xb5e: 0x13d7, 0xb5f: 0x13e3, 0xb60: 0x1813, 0xb61: 0x1818, 0xb62: 0x1423, 0xb63: 0x142f, + 0xb64: 0x1437, 0xb65: 0x181d, 0xb66: 0x143b, 0xb67: 0x1467, 0xb68: 0x1473, 0xb69: 0x1477, + 0xb6a: 0x146f, 0xb6b: 0x1483, 0xb6c: 0x1487, 0xb6d: 0x1822, 0xb6e: 0x1493, 0xb6f: 0x0693, + 0xb70: 0x149b, 0xb71: 0x1827, 0xb72: 0x0697, 0xb73: 0x14d3, 0xb74: 0x0ac3, 0xb75: 0x14eb, + 0xb76: 0x182c, 0xb77: 0x1836, 0xb78: 0x069b, 0xb79: 0x069f, 0xb7a: 0x1513, 0xb7b: 0x183b, + 0xb7c: 0x06a3, 0xb7d: 0x1840, 0xb7e: 0x152b, 0xb7f: 0x152b, + // Block 0x2e, offset 0xb80 + 0xb80: 0x1533, 0xb81: 0x1845, 0xb82: 0x154b, 0xb83: 0x06a7, 0xb84: 0x155b, 0xb85: 0x1567, + 0xb86: 0x156f, 0xb87: 0x1577, 0xb88: 0x06ab, 0xb89: 0x184a, 0xb8a: 0x158b, 0xb8b: 0x15a7, + 0xb8c: 0x15b3, 0xb8d: 0x06af, 0xb8e: 0x06b3, 0xb8f: 0x15b7, 0xb90: 0x184f, 0xb91: 0x06b7, + 0xb92: 0x1854, 0xb93: 0x1859, 0xb94: 0x185e, 0xb95: 0x15db, 0xb96: 0x06bb, 0xb97: 0x15ef, + 0xb98: 0x15f7, 0xb99: 0x15fb, 0xb9a: 0x1603, 0xb9b: 0x160b, 0xb9c: 0x1613, 0xb9d: 0x1868, +} + +// 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: 0x2d, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x2e, 0xc7: 0x04, + 0xc8: 0x05, 0xca: 0x2f, 0xcb: 0x30, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x31, + 0xd0: 0x09, 0xd1: 0x32, 0xd2: 0x33, 0xd3: 0x0a, 0xd6: 0x0b, 0xd7: 0x34, + 0xd8: 0x35, 0xd9: 0x0c, 0xdb: 0x36, 0xdc: 0x37, 0xdd: 0x38, 0xdf: 0x39, + 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: 0x3a, 0x121: 0x3b, 0x123: 0x3c, 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, 0x16c: 0x0d, 0x16d: 0x64, 0x16e: 0x65, 0x16f: 0x66, + 0x170: 0x67, 0x173: 0x68, 0x177: 0x0e, + 0x178: 0x0f, 0x179: 0x10, 0x17a: 0x11, 0x17b: 0x12, 0x17c: 0x13, 0x17d: 0x14, 0x17e: 0x15, 0x17f: 0x16, + // Block 0x6, offset 0x180 + 0x180: 0x69, 0x183: 0x6a, 0x184: 0x6b, 0x186: 0x6c, 0x187: 0x6d, + 0x188: 0x6e, 0x189: 0x17, 0x18a: 0x18, 0x18b: 0x6f, 0x18c: 0x70, + 0x1ab: 0x71, + 0x1b3: 0x72, 0x1b5: 0x73, 0x1b7: 0x74, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x75, 0x1c1: 0x19, 0x1c2: 0x1a, 0x1c3: 0x1b, 0x1c4: 0x76, 0x1c5: 0x77, + 0x1c9: 0x78, 0x1cc: 0x79, 0x1cd: 0x7a, + // Block 0x8, offset 0x200 + 0x219: 0x7b, 0x21a: 0x7c, 0x21b: 0x7d, + 0x220: 0x7e, 0x223: 0x7f, 0x224: 0x80, 0x225: 0x81, 0x226: 0x82, 0x227: 0x83, + 0x22a: 0x84, 0x22b: 0x85, 0x22f: 0x86, + 0x230: 0x87, 0x231: 0x88, 0x232: 0x89, 0x233: 0x8a, 0x234: 0x8b, 0x235: 0x8c, 0x236: 0x8d, 0x237: 0x87, + 0x238: 0x88, 0x239: 0x89, 0x23a: 0x8a, 0x23b: 0x8b, 0x23c: 0x8c, 0x23d: 0x8d, 0x23e: 0x87, 0x23f: 0x88, + // Block 0x9, offset 0x240 + 0x240: 0x89, 0x241: 0x8a, 0x242: 0x8b, 0x243: 0x8c, 0x244: 0x8d, 0x245: 0x87, 0x246: 0x88, 0x247: 0x89, + 0x248: 0x8a, 0x249: 0x8b, 0x24a: 0x8c, 0x24b: 0x8d, 0x24c: 0x87, 0x24d: 0x88, 0x24e: 0x89, 0x24f: 0x8a, + 0x250: 0x8b, 0x251: 0x8c, 0x252: 0x8d, 0x253: 0x87, 0x254: 0x88, 0x255: 0x89, 0x256: 0x8a, 0x257: 0x8b, + 0x258: 0x8c, 0x259: 0x8d, 0x25a: 0x87, 0x25b: 0x88, 0x25c: 0x89, 0x25d: 0x8a, 0x25e: 0x8b, 0x25f: 0x8c, + 0x260: 0x8d, 0x261: 0x87, 0x262: 0x88, 0x263: 0x89, 0x264: 0x8a, 0x265: 0x8b, 0x266: 0x8c, 0x267: 0x8d, + 0x268: 0x87, 0x269: 0x88, 0x26a: 0x89, 0x26b: 0x8a, 0x26c: 0x8b, 0x26d: 0x8c, 0x26e: 0x8d, 0x26f: 0x87, + 0x270: 0x88, 0x271: 0x89, 0x272: 0x8a, 0x273: 0x8b, 0x274: 0x8c, 0x275: 0x8d, 0x276: 0x87, 0x277: 0x88, + 0x278: 0x89, 0x279: 0x8a, 0x27a: 0x8b, 0x27b: 0x8c, 0x27c: 0x8d, 0x27d: 0x87, 0x27e: 0x88, 0x27f: 0x89, + // Block 0xa, offset 0x280 + 0x280: 0x8a, 0x281: 0x8b, 0x282: 0x8c, 0x283: 0x8d, 0x284: 0x87, 0x285: 0x88, 0x286: 0x89, 0x287: 0x8a, + 0x288: 0x8b, 0x289: 0x8c, 0x28a: 0x8d, 0x28b: 0x87, 0x28c: 0x88, 0x28d: 0x89, 0x28e: 0x8a, 0x28f: 0x8b, + 0x290: 0x8c, 0x291: 0x8d, 0x292: 0x87, 0x293: 0x88, 0x294: 0x89, 0x295: 0x8a, 0x296: 0x8b, 0x297: 0x8c, + 0x298: 0x8d, 0x299: 0x87, 0x29a: 0x88, 0x29b: 0x89, 0x29c: 0x8a, 0x29d: 0x8b, 0x29e: 0x8c, 0x29f: 0x8d, + 0x2a0: 0x87, 0x2a1: 0x88, 0x2a2: 0x89, 0x2a3: 0x8a, 0x2a4: 0x8b, 0x2a5: 0x8c, 0x2a6: 0x8d, 0x2a7: 0x87, + 0x2a8: 0x88, 0x2a9: 0x89, 0x2aa: 0x8a, 0x2ab: 0x8b, 0x2ac: 0x8c, 0x2ad: 0x8d, 0x2ae: 0x87, 0x2af: 0x88, + 0x2b0: 0x89, 0x2b1: 0x8a, 0x2b2: 0x8b, 0x2b3: 0x8c, 0x2b4: 0x8d, 0x2b5: 0x87, 0x2b6: 0x88, 0x2b7: 0x89, + 0x2b8: 0x8a, 0x2b9: 0x8b, 0x2ba: 0x8c, 0x2bb: 0x8d, 0x2bc: 0x87, 0x2bd: 0x88, 0x2be: 0x89, 0x2bf: 0x8a, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x8b, 0x2c1: 0x8c, 0x2c2: 0x8d, 0x2c3: 0x87, 0x2c4: 0x88, 0x2c5: 0x89, 0x2c6: 0x8a, 0x2c7: 0x8b, + 0x2c8: 0x8c, 0x2c9: 0x8d, 0x2ca: 0x87, 0x2cb: 0x88, 0x2cc: 0x89, 0x2cd: 0x8a, 0x2ce: 0x8b, 0x2cf: 0x8c, + 0x2d0: 0x8d, 0x2d1: 0x87, 0x2d2: 0x88, 0x2d3: 0x89, 0x2d4: 0x8a, 0x2d5: 0x8b, 0x2d6: 0x8c, 0x2d7: 0x8d, + 0x2d8: 0x87, 0x2d9: 0x88, 0x2da: 0x89, 0x2db: 0x8a, 0x2dc: 0x8b, 0x2dd: 0x8c, 0x2de: 0x8e, + // Block 0xc, offset 0x300 + 0x324: 0x1c, 0x325: 0x1d, 0x326: 0x1e, 0x327: 0x1f, + 0x328: 0x20, 0x329: 0x21, 0x32a: 0x22, 0x32b: 0x23, 0x32c: 0x8f, 0x32d: 0x90, 0x32e: 0x91, + 0x331: 0x92, 0x332: 0x93, 0x333: 0x94, 0x334: 0x95, + 0x338: 0x96, 0x339: 0x97, 0x33a: 0x98, 0x33b: 0x99, 0x33e: 0x9a, 0x33f: 0x9b, + // Block 0xd, offset 0x340 + 0x347: 0x9c, + 0x34b: 0x9d, 0x34d: 0x9e, + 0x368: 0x9f, 0x36b: 0xa0, + // Block 0xe, offset 0x380 + 0x381: 0xa1, 0x382: 0xa2, 0x384: 0xa3, 0x385: 0x82, 0x387: 0xa4, + 0x388: 0xa5, 0x38b: 0xa6, 0x38c: 0x3f, 0x38d: 0xa7, + 0x391: 0xa8, 0x392: 0xa9, 0x393: 0xaa, 0x396: 0xab, 0x397: 0xac, + 0x398: 0x73, 0x39a: 0xad, 0x39c: 0xae, + 0x3a8: 0xaf, 0x3a9: 0xb0, 0x3aa: 0xb1, + 0x3b0: 0x73, 0x3b5: 0xb2, + // Block 0xf, offset 0x3c0 + 0x3eb: 0xb3, 0x3ec: 0xb4, + // Block 0x10, offset 0x400 + 0x432: 0xb5, + // Block 0x11, offset 0x440 + 0x445: 0xb6, 0x446: 0xb7, 0x447: 0xb8, + 0x449: 0xb9, + // Block 0x12, offset 0x480 + 0x480: 0xba, + 0x4a3: 0xbb, 0x4a5: 0xbc, + // Block 0x13, offset 0x4c0 + 0x4c8: 0xbd, + // Block 0x14, offset 0x500 + 0x520: 0x24, 0x521: 0x25, 0x522: 0x26, 0x523: 0x27, 0x524: 0x28, 0x525: 0x29, 0x526: 0x2a, 0x527: 0x2b, + 0x528: 0x2c, + // Block 0x15, offset 0x540 + 0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d, + 0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11, + 0x56f: 0x12, +} + +// nfcSparseOffset: 145 entries, 290 bytes +var nfcSparseOffset = []uint16{0x0, 0x5, 0x9, 0xb, 0xd, 0x18, 0x28, 0x2a, 0x2f, 0x3a, 0x49, 0x56, 0x5e, 0x62, 0x67, 0x69, 0x7a, 0x82, 0x89, 0x8c, 0x93, 0x97, 0x9b, 0x9d, 0x9f, 0xa8, 0xac, 0xb3, 0xb8, 0xbb, 0xc5, 0xc8, 0xcf, 0xd7, 0xda, 0xdc, 0xde, 0xe0, 0xe5, 0xf6, 0x102, 0x104, 0x10a, 0x10c, 0x10e, 0x110, 0x112, 0x114, 0x116, 0x119, 0x11c, 0x11e, 0x121, 0x124, 0x128, 0x12d, 0x136, 0x138, 0x13b, 0x13d, 0x148, 0x14c, 0x15a, 0x15d, 0x163, 0x169, 0x174, 0x178, 0x17a, 0x17c, 0x17e, 0x180, 0x182, 0x188, 0x18c, 0x18e, 0x190, 0x198, 0x19c, 0x19f, 0x1a1, 0x1a3, 0x1a5, 0x1a8, 0x1aa, 0x1ac, 0x1ae, 0x1b0, 0x1b6, 0x1b9, 0x1bb, 0x1c2, 0x1c8, 0x1ce, 0x1d6, 0x1dc, 0x1e2, 0x1e8, 0x1ec, 0x1fa, 0x203, 0x206, 0x209, 0x20b, 0x20e, 0x210, 0x214, 0x219, 0x21b, 0x21d, 0x222, 0x228, 0x22a, 0x22c, 0x22e, 0x234, 0x237, 0x23a, 0x242, 0x249, 0x24c, 0x24f, 0x251, 0x259, 0x25c, 0x263, 0x266, 0x26c, 0x26e, 0x271, 0x273, 0x275, 0x277, 0x279, 0x27c, 0x27e, 0x280, 0x282, 0x28f, 0x299, 0x29b, 0x29d, 0x2a3, 0x2a5, 0x2a8} + +// nfcSparseValues: 682 entries, 2728 bytes +var nfcSparseValues = [682]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: 0x46e2, lo: 0xa0, hi: 0xa1}, + {value: 0x4714, 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: 0x4840, lo: 0x8a, hi: 0x8a}, + {value: 0x485e, lo: 0x8b, hi: 0x8b}, + {value: 0x36c7, lo: 0x8c, hi: 0x8c}, + {value: 0x36df, lo: 0x8d, hi: 0x8d}, + {value: 0x4876, lo: 0x8e, hi: 0x8e}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0x36fd, 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: 0x37a5, lo: 0x90, hi: 0x90}, + {value: 0x37b1, lo: 0x91, hi: 0x91}, + {value: 0x379f, lo: 0x93, hi: 0x93}, + {value: 0xa000, lo: 0x96, hi: 0x96}, + {value: 0x3817, lo: 0x97, hi: 0x97}, + {value: 0x37e1, lo: 0x9c, hi: 0x9c}, + {value: 0x37c9, lo: 0x9d, hi: 0x9d}, + {value: 0x37f3, lo: 0x9e, hi: 0x9e}, + {value: 0xa000, lo: 0xb4, hi: 0xb5}, + {value: 0x381d, lo: 0xb6, hi: 0xb6}, + {value: 0x3823, lo: 0xb7, hi: 0xb7}, + // Block 0x6, offset 0x28 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0x83, hi: 0x87}, + // Block 0x7, offset 0x2a + {value: 0x0001, lo: 0x04}, + {value: 0x8113, lo: 0x81, hi: 0x82}, + {value: 0x8132, lo: 0x84, hi: 0x84}, + {value: 0x812d, lo: 0x85, hi: 0x85}, + {value: 0x810d, lo: 0x87, hi: 0x87}, + // Block 0x8, offset 0x2f + {value: 0x0000, lo: 0x0a}, + {value: 0x8132, lo: 0x90, hi: 0x97}, + {value: 0x8119, lo: 0x98, hi: 0x98}, + {value: 0x811a, lo: 0x99, hi: 0x99}, + {value: 0x811b, lo: 0x9a, hi: 0x9a}, + {value: 0x3841, lo: 0xa2, hi: 0xa2}, + {value: 0x3847, lo: 0xa3, hi: 0xa3}, + {value: 0x3853, lo: 0xa4, hi: 0xa4}, + {value: 0x384d, lo: 0xa5, hi: 0xa5}, + {value: 0x3859, lo: 0xa6, hi: 0xa6}, + {value: 0xa000, lo: 0xa7, hi: 0xa7}, + // Block 0x9, offset 0x3a + {value: 0x0000, lo: 0x0e}, + {value: 0x386b, lo: 0x80, hi: 0x80}, + {value: 0xa000, lo: 0x81, hi: 0x81}, + {value: 0x385f, lo: 0x82, hi: 0x82}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0x3865, lo: 0x93, hi: 0x93}, + {value: 0xa000, lo: 0x95, hi: 0x95}, + {value: 0x8132, lo: 0x96, hi: 0x9c}, + {value: 0x8132, lo: 0x9f, hi: 0xa2}, + {value: 0x812d, lo: 0xa3, hi: 0xa3}, + {value: 0x8132, lo: 0xa4, hi: 0xa4}, + {value: 0x8132, lo: 0xa7, hi: 0xa8}, + {value: 0x812d, lo: 0xaa, hi: 0xaa}, + {value: 0x8132, lo: 0xab, hi: 0xac}, + {value: 0x812d, lo: 0xad, hi: 0xad}, + // Block 0xa, offset 0x49 + {value: 0x0000, lo: 0x0c}, + {value: 0x811f, lo: 0x91, hi: 0x91}, + {value: 0x8132, lo: 0xb0, hi: 0xb0}, + {value: 0x812d, lo: 0xb1, hi: 0xb1}, + {value: 0x8132, lo: 0xb2, hi: 0xb3}, + {value: 0x812d, lo: 0xb4, hi: 0xb4}, + {value: 0x8132, lo: 0xb5, hi: 0xb6}, + {value: 0x812d, lo: 0xb7, hi: 0xb9}, + {value: 0x8132, lo: 0xba, hi: 0xba}, + {value: 0x812d, lo: 0xbb, hi: 0xbc}, + {value: 0x8132, lo: 0xbd, hi: 0xbd}, + {value: 0x812d, lo: 0xbe, hi: 0xbe}, + {value: 0x8132, lo: 0xbf, hi: 0xbf}, + // Block 0xb, offset 0x56 + {value: 0x0005, lo: 0x07}, + {value: 0x8132, lo: 0x80, hi: 0x80}, + {value: 0x8132, lo: 0x81, hi: 0x81}, + {value: 0x812d, lo: 0x82, hi: 0x83}, + {value: 0x812d, lo: 0x84, hi: 0x85}, + {value: 0x812d, lo: 0x86, hi: 0x87}, + {value: 0x812d, lo: 0x88, hi: 0x89}, + {value: 0x8132, lo: 0x8a, hi: 0x8a}, + // Block 0xc, offset 0x5e + {value: 0x0000, lo: 0x03}, + {value: 0x8132, lo: 0xab, hi: 0xb1}, + {value: 0x812d, lo: 0xb2, hi: 0xb2}, + {value: 0x8132, lo: 0xb3, hi: 0xb3}, + // Block 0xd, offset 0x62 + {value: 0x0000, lo: 0x04}, + {value: 0x8132, lo: 0x96, hi: 0x99}, + {value: 0x8132, lo: 0x9b, hi: 0xa3}, + {value: 0x8132, lo: 0xa5, hi: 0xa7}, + {value: 0x8132, lo: 0xa9, hi: 0xad}, + // Block 0xe, offset 0x67 + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0x99, hi: 0x9b}, + // Block 0xf, offset 0x69 + {value: 0x0000, lo: 0x10}, + {value: 0x8132, lo: 0x94, hi: 0xa1}, + {value: 0x812d, lo: 0xa3, hi: 0xa3}, + {value: 0x8132, lo: 0xa4, hi: 0xa5}, + {value: 0x812d, lo: 0xa6, hi: 0xa6}, + {value: 0x8132, lo: 0xa7, hi: 0xa8}, + {value: 0x812d, lo: 0xa9, hi: 0xa9}, + {value: 0x8132, lo: 0xaa, hi: 0xac}, + {value: 0x812d, lo: 0xad, hi: 0xaf}, + {value: 0x8116, lo: 0xb0, hi: 0xb0}, + {value: 0x8117, lo: 0xb1, hi: 0xb1}, + {value: 0x8118, lo: 0xb2, hi: 0xb2}, + {value: 0x8132, lo: 0xb3, hi: 0xb5}, + {value: 0x812d, lo: 0xb6, hi: 0xb6}, + {value: 0x8132, lo: 0xb7, hi: 0xb8}, + {value: 0x812d, lo: 0xb9, hi: 0xba}, + {value: 0x8132, lo: 0xbb, hi: 0xbf}, + // Block 0x10, offset 0x7a + {value: 0x0000, lo: 0x07}, + {value: 0xa000, lo: 0xa8, hi: 0xa8}, + {value: 0x3ed8, lo: 0xa9, hi: 0xa9}, + {value: 0xa000, lo: 0xb0, hi: 0xb0}, + {value: 0x3ee0, lo: 0xb1, hi: 0xb1}, + {value: 0xa000, lo: 0xb3, hi: 0xb3}, + {value: 0x3ee8, lo: 0xb4, hi: 0xb4}, + {value: 0x9902, lo: 0xbc, hi: 0xbc}, + // Block 0x11, offset 0x82 + {value: 0x0008, lo: 0x06}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x8132, lo: 0x91, hi: 0x91}, + {value: 0x812d, lo: 0x92, hi: 0x92}, + {value: 0x8132, lo: 0x93, hi: 0x93}, + {value: 0x8132, lo: 0x94, hi: 0x94}, + {value: 0x451c, lo: 0x98, hi: 0x9f}, + // Block 0x12, offset 0x89 + {value: 0x0000, lo: 0x02}, + {value: 0x8102, lo: 0xbc, hi: 0xbc}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x13, offset 0x8c + {value: 0x0008, lo: 0x06}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0x2c9e, lo: 0x8b, hi: 0x8c}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + {value: 0x455c, lo: 0x9c, hi: 0x9d}, + {value: 0x456c, lo: 0x9f, hi: 0x9f}, + // Block 0x14, offset 0x93 + {value: 0x0000, lo: 0x03}, + {value: 0x4594, lo: 0xb3, hi: 0xb3}, + {value: 0x459c, lo: 0xb6, hi: 0xb6}, + {value: 0x8102, lo: 0xbc, hi: 0xbc}, + // Block 0x15, offset 0x97 + {value: 0x0008, lo: 0x03}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x4574, lo: 0x99, hi: 0x9b}, + {value: 0x458c, lo: 0x9e, hi: 0x9e}, + // Block 0x16, offset 0x9b + {value: 0x0000, lo: 0x01}, + {value: 0x8102, lo: 0xbc, hi: 0xbc}, + // Block 0x17, offset 0x9d + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + // Block 0x18, offset 0x9f + {value: 0x0000, lo: 0x08}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0x2cb6, lo: 0x88, hi: 0x88}, + {value: 0x2cae, lo: 0x8b, hi: 0x8b}, + {value: 0x2cbe, lo: 0x8c, hi: 0x8c}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x96, hi: 0x97}, + {value: 0x45a4, lo: 0x9c, hi: 0x9c}, + {value: 0x45ac, lo: 0x9d, hi: 0x9d}, + // Block 0x19, offset 0xa8 + {value: 0x0000, lo: 0x03}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0x2cc6, lo: 0x94, hi: 0x94}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x1a, offset 0xac + {value: 0x0000, lo: 0x06}, + {value: 0xa000, lo: 0x86, hi: 0x87}, + {value: 0x2cce, lo: 0x8a, hi: 0x8a}, + {value: 0x2cde, lo: 0x8b, hi: 0x8b}, + {value: 0x2cd6, lo: 0x8c, hi: 0x8c}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + // Block 0x1b, offset 0xb3 + {value: 0x1801, lo: 0x04}, + {value: 0xa000, lo: 0x86, hi: 0x86}, + {value: 0x3ef0, lo: 0x88, hi: 0x88}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x8120, lo: 0x95, hi: 0x96}, + // Block 0x1c, offset 0xb8 + {value: 0x0000, lo: 0x02}, + {value: 0x8102, lo: 0xbc, hi: 0xbc}, + {value: 0xa000, lo: 0xbf, hi: 0xbf}, + // Block 0x1d, offset 0xbb + {value: 0x0000, lo: 0x09}, + {value: 0x2ce6, lo: 0x80, hi: 0x80}, + {value: 0x9900, lo: 0x82, hi: 0x82}, + {value: 0xa000, lo: 0x86, hi: 0x86}, + {value: 0x2cee, lo: 0x87, hi: 0x87}, + {value: 0x2cf6, lo: 0x88, hi: 0x88}, + {value: 0x2f50, lo: 0x8a, hi: 0x8a}, + {value: 0x2dd8, lo: 0x8b, hi: 0x8b}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x95, hi: 0x96}, + // Block 0x1e, offset 0xc5 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0xbb, hi: 0xbc}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x1f, offset 0xc8 + {value: 0x0000, lo: 0x06}, + {value: 0xa000, lo: 0x86, hi: 0x87}, + {value: 0x2cfe, lo: 0x8a, hi: 0x8a}, + {value: 0x2d0e, lo: 0x8b, hi: 0x8b}, + {value: 0x2d06, lo: 0x8c, hi: 0x8c}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + // Block 0x20, offset 0xcf + {value: 0x6bea, lo: 0x07}, + {value: 0x9904, lo: 0x8a, hi: 0x8a}, + {value: 0x9900, lo: 0x8f, hi: 0x8f}, + {value: 0xa000, lo: 0x99, hi: 0x99}, + {value: 0x3ef8, lo: 0x9a, hi: 0x9a}, + {value: 0x2f58, lo: 0x9c, hi: 0x9c}, + {value: 0x2de3, lo: 0x9d, hi: 0x9d}, + {value: 0x2d16, lo: 0x9e, hi: 0x9f}, + // Block 0x21, offset 0xd7 + {value: 0x0000, lo: 0x02}, + {value: 0x8122, lo: 0xb8, hi: 0xb9}, + {value: 0x8104, lo: 0xba, hi: 0xba}, + // Block 0x22, offset 0xda + {value: 0x0000, lo: 0x01}, + {value: 0x8123, lo: 0x88, hi: 0x8b}, + // Block 0x23, offset 0xdc + {value: 0x0000, lo: 0x01}, + {value: 0x8124, lo: 0xb8, hi: 0xb9}, + // Block 0x24, offset 0xde + {value: 0x0000, lo: 0x01}, + {value: 0x8125, lo: 0x88, hi: 0x8b}, + // Block 0x25, offset 0xe0 + {value: 0x0000, lo: 0x04}, + {value: 0x812d, lo: 0x98, hi: 0x99}, + {value: 0x812d, lo: 0xb5, hi: 0xb5}, + {value: 0x812d, lo: 0xb7, hi: 0xb7}, + {value: 0x812b, lo: 0xb9, hi: 0xb9}, + // Block 0x26, offset 0xe5 + {value: 0x0000, lo: 0x10}, + {value: 0x2644, lo: 0x83, hi: 0x83}, + {value: 0x264b, lo: 0x8d, hi: 0x8d}, + {value: 0x2652, lo: 0x92, hi: 0x92}, + {value: 0x2659, lo: 0x97, hi: 0x97}, + {value: 0x2660, lo: 0x9c, hi: 0x9c}, + {value: 0x263d, lo: 0xa9, hi: 0xa9}, + {value: 0x8126, lo: 0xb1, hi: 0xb1}, + {value: 0x8127, lo: 0xb2, hi: 0xb2}, + {value: 0x4a84, lo: 0xb3, hi: 0xb3}, + {value: 0x8128, lo: 0xb4, hi: 0xb4}, + {value: 0x4a8d, lo: 0xb5, hi: 0xb5}, + {value: 0x45b4, lo: 0xb6, hi: 0xb6}, + {value: 0x8200, lo: 0xb7, hi: 0xb7}, + {value: 0x45bc, lo: 0xb8, hi: 0xb8}, + {value: 0x8200, lo: 0xb9, hi: 0xb9}, + {value: 0x8127, lo: 0xba, hi: 0xbd}, + // Block 0x27, offset 0xf6 + {value: 0x0000, lo: 0x0b}, + {value: 0x8127, lo: 0x80, hi: 0x80}, + {value: 0x4a96, lo: 0x81, hi: 0x81}, + {value: 0x8132, lo: 0x82, hi: 0x83}, + {value: 0x8104, lo: 0x84, hi: 0x84}, + {value: 0x8132, lo: 0x86, hi: 0x87}, + {value: 0x266e, lo: 0x93, hi: 0x93}, + {value: 0x2675, lo: 0x9d, hi: 0x9d}, + {value: 0x267c, lo: 0xa2, hi: 0xa2}, + {value: 0x2683, lo: 0xa7, hi: 0xa7}, + {value: 0x268a, lo: 0xac, hi: 0xac}, + {value: 0x2667, lo: 0xb9, hi: 0xb9}, + // Block 0x28, offset 0x102 + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0x86, hi: 0x86}, + // Block 0x29, offset 0x104 + {value: 0x0000, lo: 0x05}, + {value: 0xa000, lo: 0xa5, hi: 0xa5}, + {value: 0x2d1e, lo: 0xa6, hi: 0xa6}, + {value: 0x9900, lo: 0xae, hi: 0xae}, + {value: 0x8102, lo: 0xb7, hi: 0xb7}, + {value: 0x8104, lo: 0xb9, hi: 0xba}, + // Block 0x2a, offset 0x10a + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0x8d, hi: 0x8d}, + // Block 0x2b, offset 0x10c + {value: 0x0000, lo: 0x01}, + {value: 0xa000, lo: 0x80, hi: 0x92}, + // Block 0x2c, offset 0x10e + {value: 0x0000, lo: 0x01}, + {value: 0xb900, lo: 0xa1, hi: 0xb5}, + // Block 0x2d, offset 0x110 + {value: 0x0000, lo: 0x01}, + {value: 0x9900, lo: 0xa8, hi: 0xbf}, + // Block 0x2e, offset 0x112 + {value: 0x0000, lo: 0x01}, + {value: 0x9900, lo: 0x80, hi: 0x82}, + // Block 0x2f, offset 0x114 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0x9d, hi: 0x9f}, + // Block 0x30, offset 0x116 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x94, hi: 0x94}, + {value: 0x8104, lo: 0xb4, hi: 0xb4}, + // Block 0x31, offset 0x119 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x92, hi: 0x92}, + {value: 0x8132, lo: 0x9d, hi: 0x9d}, + // Block 0x32, offset 0x11c + {value: 0x0000, lo: 0x01}, + {value: 0x8131, lo: 0xa9, hi: 0xa9}, + // Block 0x33, offset 0x11e + {value: 0x0004, lo: 0x02}, + {value: 0x812e, lo: 0xb9, hi: 0xba}, + {value: 0x812d, lo: 0xbb, hi: 0xbb}, + // Block 0x34, offset 0x121 + {value: 0x0000, lo: 0x02}, + {value: 0x8132, lo: 0x97, hi: 0x97}, + {value: 0x812d, lo: 0x98, hi: 0x98}, + // Block 0x35, offset 0x124 + {value: 0x0000, lo: 0x03}, + {value: 0x8104, lo: 0xa0, hi: 0xa0}, + {value: 0x8132, lo: 0xb5, hi: 0xbc}, + {value: 0x812d, lo: 0xbf, hi: 0xbf}, + // Block 0x36, offset 0x128 + {value: 0x0000, lo: 0x04}, + {value: 0x8132, lo: 0xb0, hi: 0xb4}, + {value: 0x812d, lo: 0xb5, hi: 0xba}, + {value: 0x8132, lo: 0xbb, hi: 0xbc}, + {value: 0x812d, lo: 0xbd, hi: 0xbd}, + // Block 0x37, offset 0x12d + {value: 0x0000, lo: 0x08}, + {value: 0x2d66, lo: 0x80, hi: 0x80}, + {value: 0x2d6e, lo: 0x81, hi: 0x81}, + {value: 0xa000, lo: 0x82, hi: 0x82}, + {value: 0x2d76, lo: 0x83, hi: 0x83}, + {value: 0x8104, lo: 0x84, hi: 0x84}, + {value: 0x8132, lo: 0xab, hi: 0xab}, + {value: 0x812d, lo: 0xac, hi: 0xac}, + {value: 0x8132, lo: 0xad, hi: 0xb3}, + // Block 0x38, offset 0x136 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0xaa, hi: 0xab}, + // Block 0x39, offset 0x138 + {value: 0x0000, lo: 0x02}, + {value: 0x8102, lo: 0xa6, hi: 0xa6}, + {value: 0x8104, lo: 0xb2, hi: 0xb3}, + // Block 0x3a, offset 0x13b + {value: 0x0000, lo: 0x01}, + {value: 0x8102, lo: 0xb7, hi: 0xb7}, + // Block 0x3b, offset 0x13d + {value: 0x0000, lo: 0x0a}, + {value: 0x8132, lo: 0x90, hi: 0x92}, + {value: 0x8101, lo: 0x94, hi: 0x94}, + {value: 0x812d, lo: 0x95, hi: 0x99}, + {value: 0x8132, lo: 0x9a, hi: 0x9b}, + {value: 0x812d, lo: 0x9c, hi: 0x9f}, + {value: 0x8132, lo: 0xa0, hi: 0xa0}, + {value: 0x8101, lo: 0xa2, hi: 0xa8}, + {value: 0x812d, lo: 0xad, hi: 0xad}, + {value: 0x8132, lo: 0xb4, hi: 0xb4}, + {value: 0x8132, lo: 0xb8, hi: 0xb9}, + // Block 0x3c, offset 0x148 + {value: 0x0004, lo: 0x03}, + {value: 0x0433, lo: 0x80, hi: 0x81}, + {value: 0x8100, lo: 0x97, hi: 0x97}, + {value: 0x8100, lo: 0xbe, hi: 0xbe}, + // Block 0x3d, offset 0x14c + {value: 0x0000, lo: 0x0d}, + {value: 0x8132, lo: 0x90, hi: 0x91}, + {value: 0x8101, lo: 0x92, hi: 0x93}, + {value: 0x8132, lo: 0x94, hi: 0x97}, + {value: 0x8101, lo: 0x98, hi: 0x9a}, + {value: 0x8132, lo: 0x9b, hi: 0x9c}, + {value: 0x8132, lo: 0xa1, hi: 0xa1}, + {value: 0x8101, lo: 0xa5, hi: 0xa6}, + {value: 0x8132, lo: 0xa7, hi: 0xa7}, + {value: 0x812d, lo: 0xa8, hi: 0xa8}, + {value: 0x8132, lo: 0xa9, hi: 0xa9}, + {value: 0x8101, lo: 0xaa, hi: 0xab}, + {value: 0x812d, lo: 0xac, hi: 0xaf}, + {value: 0x8132, lo: 0xb0, hi: 0xb0}, + // Block 0x3e, offset 0x15a + {value: 0x427b, lo: 0x02}, + {value: 0x01b8, lo: 0xa6, hi: 0xa6}, + {value: 0x0057, lo: 0xaa, hi: 0xab}, + // Block 0x3f, offset 0x15d + {value: 0x0007, lo: 0x05}, + {value: 0xa000, lo: 0x90, hi: 0x90}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0xa000, lo: 0x94, hi: 0x94}, + {value: 0x3bb9, lo: 0x9a, hi: 0x9b}, + {value: 0x3bc7, lo: 0xae, hi: 0xae}, + // Block 0x40, offset 0x163 + {value: 0x000e, lo: 0x05}, + {value: 0x3bce, lo: 0x8d, hi: 0x8e}, + {value: 0x3bd5, 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 0x169 + {value: 0x6408, lo: 0x0a}, + {value: 0xa000, lo: 0x83, hi: 0x83}, + {value: 0x3be3, lo: 0x84, hi: 0x84}, + {value: 0xa000, lo: 0x88, hi: 0x88}, + {value: 0x3bea, lo: 0x89, hi: 0x89}, + {value: 0xa000, lo: 0x8b, hi: 0x8b}, + {value: 0x3bf1, lo: 0x8c, hi: 0x8c}, + {value: 0xa000, lo: 0xa3, hi: 0xa3}, + {value: 0x3bf8, lo: 0xa4, hi: 0xa5}, + {value: 0x3bff, lo: 0xa6, hi: 0xa6}, + {value: 0xa000, lo: 0xbc, hi: 0xbc}, + // Block 0x42, offset 0x174 + {value: 0x0007, lo: 0x03}, + {value: 0x3c68, lo: 0xa0, hi: 0xa1}, + {value: 0x3c92, lo: 0xa2, hi: 0xa3}, + {value: 0x3cbc, lo: 0xaa, hi: 0xad}, + // Block 0x43, offset 0x178 + {value: 0x0004, lo: 0x01}, + {value: 0x048b, lo: 0xa9, hi: 0xaa}, + // Block 0x44, offset 0x17a + {value: 0x0000, lo: 0x01}, + {value: 0x44dd, lo: 0x9c, hi: 0x9c}, + // Block 0x45, offset 0x17c + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xaf, hi: 0xb1}, + // Block 0x46, offset 0x17e + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0xbf, hi: 0xbf}, + // Block 0x47, offset 0x180 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xa0, hi: 0xbf}, + // Block 0x48, offset 0x182 + {value: 0x0000, lo: 0x05}, + {value: 0x812c, lo: 0xaa, hi: 0xaa}, + {value: 0x8131, lo: 0xab, hi: 0xab}, + {value: 0x8133, lo: 0xac, hi: 0xac}, + {value: 0x812e, lo: 0xad, hi: 0xad}, + {value: 0x812f, lo: 0xae, hi: 0xaf}, + // Block 0x49, offset 0x188 + {value: 0x0000, lo: 0x03}, + {value: 0x4a9f, lo: 0xb3, hi: 0xb3}, + {value: 0x4a9f, lo: 0xb5, hi: 0xb6}, + {value: 0x4a9f, lo: 0xba, hi: 0xbf}, + // Block 0x4a, offset 0x18c + {value: 0x0000, lo: 0x01}, + {value: 0x4a9f, lo: 0x8f, hi: 0xa3}, + // Block 0x4b, offset 0x18e + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0xae, hi: 0xbe}, + // Block 0x4c, offset 0x190 + {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 0x198 + {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 0x19c + {value: 0x0000, lo: 0x02}, + {value: 0x8132, lo: 0xaf, hi: 0xaf}, + {value: 0x8132, lo: 0xb4, hi: 0xbd}, + // Block 0x4f, offset 0x19f + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0x9e, hi: 0x9f}, + // Block 0x50, offset 0x1a1 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xb0, hi: 0xb1}, + // Block 0x51, offset 0x1a3 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0x86, hi: 0x86}, + // Block 0x52, offset 0x1a5 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x84, hi: 0x84}, + {value: 0x8132, lo: 0xa0, hi: 0xb1}, + // Block 0x53, offset 0x1a8 + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0xab, hi: 0xad}, + // Block 0x54, offset 0x1aa + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0x93, hi: 0x93}, + // Block 0x55, offset 0x1ac + {value: 0x0000, lo: 0x01}, + {value: 0x8102, lo: 0xb3, hi: 0xb3}, + // Block 0x56, offset 0x1ae + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0x80, hi: 0x80}, + // Block 0x57, offset 0x1b0 + {value: 0x0000, lo: 0x05}, + {value: 0x8132, lo: 0xb0, hi: 0xb0}, + {value: 0x8132, lo: 0xb2, hi: 0xb3}, + {value: 0x812d, lo: 0xb4, hi: 0xb4}, + {value: 0x8132, lo: 0xb7, hi: 0xb8}, + {value: 0x8132, lo: 0xbe, hi: 0xbf}, + // Block 0x58, offset 0x1b6 + {value: 0x0000, lo: 0x02}, + {value: 0x8132, lo: 0x81, hi: 0x81}, + {value: 0x8104, lo: 0xb6, hi: 0xb6}, + // Block 0x59, offset 0x1b9 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0xad, hi: 0xad}, + // Block 0x5a, offset 0x1bb + {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 0x1c2 + {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 0x1c8 + {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 0x1ce + {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 0x1d6 + {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 0x1dc + {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 0x1e2 + {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 0x1e8 + {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 0x1ec + {value: 0x0006, lo: 0x0d}, + {value: 0x4390, lo: 0x9d, hi: 0x9d}, + {value: 0x8115, lo: 0x9e, hi: 0x9e}, + {value: 0x4402, lo: 0x9f, hi: 0x9f}, + {value: 0x43f0, lo: 0xaa, hi: 0xab}, + {value: 0x44f4, lo: 0xac, hi: 0xac}, + {value: 0x44fc, lo: 0xad, hi: 0xad}, + {value: 0x4348, lo: 0xae, hi: 0xb1}, + {value: 0x4366, lo: 0xb2, hi: 0xb4}, + {value: 0x437e, lo: 0xb5, hi: 0xb6}, + {value: 0x438a, lo: 0xb8, hi: 0xb8}, + {value: 0x4396, lo: 0xb9, hi: 0xbb}, + {value: 0x43ae, lo: 0xbc, hi: 0xbc}, + {value: 0x43b4, lo: 0xbe, hi: 0xbe}, + // Block 0x63, offset 0x1fa + {value: 0x0006, lo: 0x08}, + {value: 0x43ba, lo: 0x80, hi: 0x81}, + {value: 0x43c6, lo: 0x83, hi: 0x84}, + {value: 0x43d8, lo: 0x86, hi: 0x89}, + {value: 0x43fc, lo: 0x8a, hi: 0x8a}, + {value: 0x4378, lo: 0x8b, hi: 0x8b}, + {value: 0x4360, lo: 0x8c, hi: 0x8c}, + {value: 0x43a8, lo: 0x8d, hi: 0x8d}, + {value: 0x43d2, lo: 0x8e, hi: 0x8e}, + // Block 0x64, offset 0x203 + {value: 0x0000, lo: 0x02}, + {value: 0x8100, lo: 0xa4, hi: 0xa5}, + {value: 0x8100, lo: 0xb0, hi: 0xb1}, + // Block 0x65, offset 0x206 + {value: 0x0000, lo: 0x02}, + {value: 0x8100, lo: 0x9b, hi: 0x9d}, + {value: 0x8200, lo: 0x9e, hi: 0xa3}, + // Block 0x66, offset 0x209 + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0x90, hi: 0x90}, + // Block 0x67, offset 0x20b + {value: 0x0000, lo: 0x02}, + {value: 0x8100, lo: 0x99, hi: 0x99}, + {value: 0x8200, lo: 0xb2, hi: 0xb4}, + // Block 0x68, offset 0x20e + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0xbc, hi: 0xbd}, + // Block 0x69, offset 0x210 + {value: 0x0000, lo: 0x03}, + {value: 0x8132, lo: 0xa0, hi: 0xa6}, + {value: 0x812d, lo: 0xa7, hi: 0xad}, + {value: 0x8132, lo: 0xae, hi: 0xaf}, + // Block 0x6a, offset 0x214 + {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 0x219 + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0x81, hi: 0x8c}, + // Block 0x6c, offset 0x21b + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0xb5, hi: 0xba}, + // Block 0x6d, offset 0x21d + {value: 0x0000, lo: 0x04}, + {value: 0x4a9f, lo: 0x9e, hi: 0x9f}, + {value: 0x4a9f, lo: 0xa3, hi: 0xa3}, + {value: 0x4a9f, lo: 0xa5, hi: 0xa6}, + {value: 0x4a9f, lo: 0xaa, hi: 0xaf}, + // Block 0x6e, offset 0x222 + {value: 0x0000, lo: 0x05}, + {value: 0x4a9f, lo: 0x82, hi: 0x87}, + {value: 0x4a9f, lo: 0x8a, hi: 0x8f}, + {value: 0x4a9f, lo: 0x92, hi: 0x97}, + {value: 0x4a9f, lo: 0x9a, hi: 0x9c}, + {value: 0x8100, lo: 0xa3, hi: 0xa3}, + // Block 0x6f, offset 0x228 + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0xbd, hi: 0xbd}, + // Block 0x70, offset 0x22a + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0xa0, hi: 0xa0}, + // Block 0x71, offset 0x22c + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xb6, hi: 0xba}, + // Block 0x72, offset 0x22e + {value: 0x002c, lo: 0x05}, + {value: 0x812d, lo: 0x8d, hi: 0x8d}, + {value: 0x8132, lo: 0x8f, hi: 0x8f}, + {value: 0x8132, lo: 0xb8, hi: 0xb8}, + {value: 0x8101, lo: 0xb9, hi: 0xba}, + {value: 0x8104, lo: 0xbf, hi: 0xbf}, + // Block 0x73, offset 0x234 + {value: 0x0000, lo: 0x02}, + {value: 0x8132, lo: 0xa5, hi: 0xa5}, + {value: 0x812d, lo: 0xa6, hi: 0xa6}, + // Block 0x74, offset 0x237 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x86, hi: 0x86}, + {value: 0x8104, lo: 0xbf, hi: 0xbf}, + // Block 0x75, offset 0x23a + {value: 0x17fe, lo: 0x07}, + {value: 0xa000, lo: 0x99, hi: 0x99}, + {value: 0x4238, lo: 0x9a, hi: 0x9a}, + {value: 0xa000, lo: 0x9b, hi: 0x9b}, + {value: 0x4242, lo: 0x9c, hi: 0x9c}, + {value: 0xa000, lo: 0xa5, hi: 0xa5}, + {value: 0x424c, lo: 0xab, hi: 0xab}, + {value: 0x8104, lo: 0xb9, hi: 0xba}, + // Block 0x76, offset 0x242 + {value: 0x0000, lo: 0x06}, + {value: 0x8132, lo: 0x80, hi: 0x82}, + {value: 0x9900, lo: 0xa7, hi: 0xa7}, + {value: 0x2d7e, lo: 0xae, hi: 0xae}, + {value: 0x2d88, lo: 0xaf, hi: 0xaf}, + {value: 0xa000, lo: 0xb1, hi: 0xb2}, + {value: 0x8104, lo: 0xb3, hi: 0xb4}, + // Block 0x77, offset 0x249 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x80, hi: 0x80}, + {value: 0x8102, lo: 0x8a, hi: 0x8a}, + // Block 0x78, offset 0x24c + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0xb5, hi: 0xb5}, + {value: 0x8102, lo: 0xb6, hi: 0xb6}, + // Block 0x79, offset 0x24f + {value: 0x0002, lo: 0x01}, + {value: 0x8102, lo: 0xa9, hi: 0xaa}, + // Block 0x7a, offset 0x251 + {value: 0x0000, lo: 0x07}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0x2d92, lo: 0x8b, hi: 0x8b}, + {value: 0x2d9c, lo: 0x8c, hi: 0x8c}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + {value: 0x8132, lo: 0xa6, hi: 0xac}, + {value: 0x8132, lo: 0xb0, hi: 0xb4}, + // Block 0x7b, offset 0x259 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x82, hi: 0x82}, + {value: 0x8102, lo: 0x86, hi: 0x86}, + // Block 0x7c, offset 0x25c + {value: 0x6b5a, lo: 0x06}, + {value: 0x9900, lo: 0xb0, hi: 0xb0}, + {value: 0xa000, lo: 0xb9, hi: 0xb9}, + {value: 0x9900, lo: 0xba, hi: 0xba}, + {value: 0x2db0, lo: 0xbb, hi: 0xbb}, + {value: 0x2da6, lo: 0xbc, hi: 0xbd}, + {value: 0x2dba, lo: 0xbe, hi: 0xbe}, + // Block 0x7d, offset 0x263 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x82, hi: 0x82}, + {value: 0x8102, lo: 0x83, hi: 0x83}, + // Block 0x7e, offset 0x266 + {value: 0x0000, lo: 0x05}, + {value: 0x9900, lo: 0xaf, hi: 0xaf}, + {value: 0xa000, lo: 0xb8, hi: 0xb9}, + {value: 0x2dc4, lo: 0xba, hi: 0xba}, + {value: 0x2dce, lo: 0xbb, hi: 0xbb}, + {value: 0x8104, lo: 0xbf, hi: 0xbf}, + // Block 0x7f, offset 0x26c + {value: 0x0000, lo: 0x01}, + {value: 0x8102, lo: 0x80, hi: 0x80}, + // Block 0x80, offset 0x26e + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0xb6, hi: 0xb6}, + {value: 0x8102, lo: 0xb7, hi: 0xb7}, + // Block 0x81, offset 0x271 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0xab, hi: 0xab}, + // Block 0x82, offset 0x273 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0xb4, hi: 0xb4}, + // Block 0x83, offset 0x275 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0x87, hi: 0x87}, + // Block 0x84, offset 0x277 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0x99, hi: 0x99}, + // Block 0x85, offset 0x279 + {value: 0x0000, lo: 0x02}, + {value: 0x8102, lo: 0x82, hi: 0x82}, + {value: 0x8104, lo: 0x84, hi: 0x85}, + // Block 0x86, offset 0x27c + {value: 0x0000, lo: 0x01}, + {value: 0x8101, lo: 0xb0, hi: 0xb4}, + // Block 0x87, offset 0x27e + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xb0, hi: 0xb6}, + // Block 0x88, offset 0x280 + {value: 0x0000, lo: 0x01}, + {value: 0x8101, lo: 0x9e, hi: 0x9e}, + // Block 0x89, offset 0x282 + {value: 0x0000, lo: 0x0c}, + {value: 0x45cc, lo: 0x9e, hi: 0x9e}, + {value: 0x45d6, lo: 0x9f, hi: 0x9f}, + {value: 0x460a, lo: 0xa0, hi: 0xa0}, + {value: 0x4618, lo: 0xa1, hi: 0xa1}, + {value: 0x4626, lo: 0xa2, hi: 0xa2}, + {value: 0x4634, lo: 0xa3, hi: 0xa3}, + {value: 0x4642, lo: 0xa4, hi: 0xa4}, + {value: 0x812b, lo: 0xa5, hi: 0xa6}, + {value: 0x8101, lo: 0xa7, hi: 0xa9}, + {value: 0x8130, lo: 0xad, hi: 0xad}, + {value: 0x812b, lo: 0xae, hi: 0xb2}, + {value: 0x812d, lo: 0xbb, hi: 0xbf}, + // Block 0x8a, offset 0x28f + {value: 0x0000, lo: 0x09}, + {value: 0x812d, lo: 0x80, hi: 0x82}, + {value: 0x8132, lo: 0x85, hi: 0x89}, + {value: 0x812d, lo: 0x8a, hi: 0x8b}, + {value: 0x8132, lo: 0xaa, hi: 0xad}, + {value: 0x45e0, lo: 0xbb, hi: 0xbb}, + {value: 0x45ea, lo: 0xbc, hi: 0xbc}, + {value: 0x4650, lo: 0xbd, hi: 0xbd}, + {value: 0x466c, lo: 0xbe, hi: 0xbe}, + {value: 0x465e, lo: 0xbf, hi: 0xbf}, + // Block 0x8b, offset 0x299 + {value: 0x0000, lo: 0x01}, + {value: 0x467a, lo: 0x80, hi: 0x80}, + // Block 0x8c, offset 0x29b + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0x82, hi: 0x84}, + // Block 0x8d, offset 0x29d + {value: 0x0000, lo: 0x05}, + {value: 0x8132, lo: 0x80, hi: 0x86}, + {value: 0x8132, lo: 0x88, hi: 0x98}, + {value: 0x8132, lo: 0x9b, hi: 0xa1}, + {value: 0x8132, lo: 0xa3, hi: 0xa4}, + {value: 0x8132, lo: 0xa6, hi: 0xaa}, + // Block 0x8e, offset 0x2a3 + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0x90, hi: 0x96}, + // Block 0x8f, offset 0x2a5 + {value: 0x0000, lo: 0x02}, + {value: 0x8132, lo: 0x84, hi: 0x89}, + {value: 0x8102, lo: 0x8a, hi: 0x8a}, + // Block 0x90, offset 0x2a8 + {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: 17104 bytes (16.70 KiB). Checksum: d985061cf5307b35. +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 < 91: + return uint16(nfkcValues[n<<6+uint32(b)]) + default: + n -= 91 + return uint16(nfkcSparse.lookup(n, b)) + } +} + +// nfkcValues: 93 blocks, 5952 entries, 11904 bytes +// The third block is the zero block. +var nfkcValues = [5952]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: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x4688, 0xc3: 0x2f79, 0xc4: 0x4697, 0xc5: 0x469c, + 0xc6: 0xa000, 0xc7: 0x46a6, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x46ab, 0xcb: 0x2ffb, + 0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x46bf, 0xd1: 0x3104, + 0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x46c9, 0xd5: 0x46ce, 0xd6: 0x46dd, + 0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x470f, 0xdd: 0x3235, + 0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x4719, 0xe3: 0x3285, + 0xe4: 0x4728, 0xe5: 0x472d, 0xe6: 0xa000, 0xe7: 0x4737, 0xe8: 0x32ee, 0xe9: 0x32f3, + 0xea: 0x473c, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x4750, + 0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x475a, 0xf5: 0x475f, + 0xf6: 0x476e, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3, + 0xfc: 0x47a0, 0xfd: 0x3550, 0xff: 0x3569, + // Block 0x4, offset 0x100 + 0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x468d, 0x103: 0x471e, 0x104: 0x2f9c, 0x105: 0x32a8, + 0x106: 0x2fb0, 0x107: 0x32bc, 0x108: 0x2fb5, 0x109: 0x32c1, 0x10a: 0x2fba, 0x10b: 0x32c6, + 0x10c: 0x2fbf, 0x10d: 0x32cb, 0x10e: 0x2fc9, 0x10f: 0x32d5, + 0x112: 0x46b0, 0x113: 0x4741, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302, + 0x118: 0x3014, 0x119: 0x3320, 0x11a: 0x3005, 0x11b: 0x3311, 0x11c: 0x302d, 0x11d: 0x3339, + 0x11e: 0x3037, 0x11f: 0x3343, 0x120: 0x303c, 0x121: 0x3348, 0x122: 0x3046, 0x123: 0x3352, + 0x124: 0x304b, 0x125: 0x3357, 0x128: 0x307d, 0x129: 0x338e, + 0x12a: 0x3082, 0x12b: 0x3393, 0x12c: 0x3087, 0x12d: 0x3398, 0x12e: 0x30aa, 0x12f: 0x33b6, + 0x130: 0x308c, 0x132: 0x195d, 0x133: 0x19e7, 0x134: 0x30b4, 0x135: 0x33c0, + 0x136: 0x30c8, 0x137: 0x33d9, 0x139: 0x30d2, 0x13a: 0x33e3, 0x13b: 0x30dc, + 0x13c: 0x33ed, 0x13d: 0x30d7, 0x13e: 0x33e8, 0x13f: 0x1bac, + // Block 0x5, offset 0x140 + 0x140: 0x1c34, 0x143: 0x30ff, 0x144: 0x3410, 0x145: 0x3118, + 0x146: 0x3429, 0x147: 0x310e, 0x148: 0x341f, 0x149: 0x1c5c, + 0x14c: 0x46d3, 0x14d: 0x4764, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c, + 0x154: 0x3159, 0x155: 0x346a, 0x156: 0x3172, 0x157: 0x3483, + 0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x46f6, 0x15b: 0x4787, 0x15c: 0x317c, 0x15d: 0x348d, + 0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x46fb, 0x161: 0x478c, 0x162: 0x31a4, 0x163: 0x34ba, + 0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x4705, 0x169: 0x4796, + 0x16a: 0x470a, 0x16b: 0x479b, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2, + 0x170: 0x31d1, 0x171: 0x34e7, 0x172: 0x31ef, 0x173: 0x3505, 0x174: 0x3212, 0x175: 0x3528, + 0x176: 0x323a, 0x177: 0x3555, 0x178: 0x324e, 0x179: 0x325d, 0x17a: 0x357d, 0x17b: 0x3267, + 0x17c: 0x3587, 0x17d: 0x326c, 0x17e: 0x358c, 0x17f: 0x00a7, + // Block 0x6, offset 0x180 + 0x184: 0x2dee, 0x185: 0x2df4, + 0x186: 0x2dfa, 0x187: 0x1972, 0x188: 0x1975, 0x189: 0x1a08, 0x18a: 0x1987, 0x18b: 0x198a, + 0x18c: 0x1a3e, 0x18d: 0x2f88, 0x18e: 0x3294, 0x18f: 0x3096, 0x190: 0x33a2, 0x191: 0x3140, + 0x192: 0x3451, 0x193: 0x31d6, 0x194: 0x34ec, 0x195: 0x39cf, 0x196: 0x3b5e, 0x197: 0x39c8, + 0x198: 0x3b57, 0x199: 0x39d6, 0x19a: 0x3b65, 0x19b: 0x39c1, 0x19c: 0x3b50, + 0x19e: 0x38b0, 0x19f: 0x3a3f, 0x1a0: 0x38a9, 0x1a1: 0x3a38, 0x1a2: 0x35b3, 0x1a3: 0x35c5, + 0x1a6: 0x3041, 0x1a7: 0x334d, 0x1a8: 0x30be, 0x1a9: 0x33cf, + 0x1aa: 0x46ec, 0x1ab: 0x477d, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd, + 0x1b0: 0x33c5, 0x1b1: 0x1942, 0x1b2: 0x1945, 0x1b3: 0x19cf, 0x1b4: 0x3028, 0x1b5: 0x3334, + 0x1b8: 0x30fa, 0x1b9: 0x340b, 0x1ba: 0x38b7, 0x1bb: 0x3a46, + 0x1bc: 0x35ad, 0x1bd: 0x35bf, 0x1be: 0x35b9, 0x1bf: 0x35cb, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x2f8d, 0x1c1: 0x3299, 0x1c2: 0x2f92, 0x1c3: 0x329e, 0x1c4: 0x300a, 0x1c5: 0x3316, + 0x1c6: 0x300f, 0x1c7: 0x331b, 0x1c8: 0x309b, 0x1c9: 0x33a7, 0x1ca: 0x30a0, 0x1cb: 0x33ac, + 0x1cc: 0x3145, 0x1cd: 0x3456, 0x1ce: 0x314a, 0x1cf: 0x345b, 0x1d0: 0x3168, 0x1d1: 0x3479, + 0x1d2: 0x316d, 0x1d3: 0x347e, 0x1d4: 0x31db, 0x1d5: 0x34f1, 0x1d6: 0x31e0, 0x1d7: 0x34f6, + 0x1d8: 0x3186, 0x1d9: 0x3497, 0x1da: 0x319f, 0x1db: 0x34b5, + 0x1de: 0x305a, 0x1df: 0x3366, + 0x1e6: 0x4692, 0x1e7: 0x4723, 0x1e8: 0x46ba, 0x1e9: 0x474b, + 0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x46d8, 0x1ef: 0x4769, + 0x1f0: 0x3958, 0x1f1: 0x3ae7, 0x1f2: 0x3244, 0x1f3: 0x355f, + // Block 0x8, offset 0x200 + 0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132, + 0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932, + 0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932, + 0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d, + 0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d, + 0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d, + 0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d, + 0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d, + 0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101, + 0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d, + 0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132, + // Block 0x9, offset 0x240 + 0x240: 0x49ae, 0x241: 0x49b3, 0x242: 0x9932, 0x243: 0x49b8, 0x244: 0x4a71, 0x245: 0x9936, + 0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132, + 0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132, + 0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132, + 0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135, + 0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132, + 0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132, + 0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132, + 0x274: 0x0170, + 0x27a: 0x42a5, + 0x27e: 0x0037, + // Block 0xa, offset 0x280 + 0x284: 0x425a, 0x285: 0x447b, + 0x286: 0x35e9, 0x287: 0x00ce, 0x288: 0x3607, 0x289: 0x3613, 0x28a: 0x3625, + 0x28c: 0x3643, 0x28e: 0x3655, 0x28f: 0x3673, 0x290: 0x3e08, 0x291: 0xa000, + 0x295: 0xa000, 0x297: 0xa000, + 0x299: 0xa000, + 0x29f: 0xa000, 0x2a1: 0xa000, + 0x2a5: 0xa000, 0x2a9: 0xa000, + 0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x47fe, 0x2ad: 0x3697, 0x2ae: 0x4828, 0x2af: 0x36a9, + 0x2b0: 0x3e70, 0x2b1: 0xa000, 0x2b5: 0xa000, + 0x2b7: 0xa000, 0x2b9: 0xa000, + 0x2bf: 0xa000, + // Block 0xb, offset 0x2c0 + 0x2c1: 0xa000, 0x2c5: 0xa000, + 0x2c9: 0xa000, 0x2ca: 0x4840, 0x2cb: 0x485e, + 0x2cc: 0x36c7, 0x2cd: 0x36df, 0x2ce: 0x4876, 0x2d0: 0x01be, 0x2d1: 0x01d0, + 0x2d2: 0x01ac, 0x2d3: 0x430c, 0x2d4: 0x4312, 0x2d5: 0x01fa, 0x2d6: 0x01e8, + 0x2f0: 0x01d6, 0x2f1: 0x01eb, 0x2f2: 0x01ee, 0x2f4: 0x0188, 0x2f5: 0x01c7, + 0x2f9: 0x01a6, + // Block 0xc, offset 0x300 + 0x300: 0x3721, 0x301: 0x372d, 0x303: 0x371b, + 0x306: 0xa000, 0x307: 0x3709, + 0x30c: 0x375d, 0x30d: 0x3745, 0x30e: 0x376f, 0x310: 0xa000, + 0x313: 0xa000, 0x315: 0xa000, 0x316: 0xa000, 0x317: 0xa000, + 0x318: 0xa000, 0x319: 0x3751, 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: 0x37d5, 0x33a: 0xa000, + 0x33e: 0xa000, + // Block 0xd, offset 0x340 + 0x341: 0x3733, 0x342: 0x37b7, + 0x350: 0x370f, 0x351: 0x3793, + 0x352: 0x3715, 0x353: 0x3799, 0x356: 0x3727, 0x357: 0x37ab, + 0x358: 0xa000, 0x359: 0xa000, 0x35a: 0x3829, 0x35b: 0x382f, 0x35c: 0x3739, 0x35d: 0x37bd, + 0x35e: 0x373f, 0x35f: 0x37c3, 0x362: 0x374b, 0x363: 0x37cf, + 0x364: 0x3757, 0x365: 0x37db, 0x366: 0x3763, 0x367: 0x37e7, 0x368: 0xa000, 0x369: 0xa000, + 0x36a: 0x3835, 0x36b: 0x383b, 0x36c: 0x378d, 0x36d: 0x3811, 0x36e: 0x3769, 0x36f: 0x37ed, + 0x370: 0x3775, 0x371: 0x37f9, 0x372: 0x377b, 0x373: 0x37ff, 0x374: 0x3781, 0x375: 0x3805, + 0x378: 0x3787, 0x379: 0x380b, + // Block 0xe, offset 0x380 + 0x387: 0x1d61, + 0x391: 0x812d, + 0x392: 0x8132, 0x393: 0x8132, 0x394: 0x8132, 0x395: 0x8132, 0x396: 0x812d, 0x397: 0x8132, + 0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x812e, 0x39b: 0x812d, 0x39c: 0x8132, 0x39d: 0x8132, + 0x39e: 0x8132, 0x39f: 0x8132, 0x3a0: 0x8132, 0x3a1: 0x8132, 0x3a2: 0x812d, 0x3a3: 0x812d, + 0x3a4: 0x812d, 0x3a5: 0x812d, 0x3a6: 0x812d, 0x3a7: 0x812d, 0x3a8: 0x8132, 0x3a9: 0x8132, + 0x3aa: 0x812d, 0x3ab: 0x8132, 0x3ac: 0x8132, 0x3ad: 0x812e, 0x3ae: 0x8131, 0x3af: 0x8132, + 0x3b0: 0x8105, 0x3b1: 0x8106, 0x3b2: 0x8107, 0x3b3: 0x8108, 0x3b4: 0x8109, 0x3b5: 0x810a, + 0x3b6: 0x810b, 0x3b7: 0x810c, 0x3b8: 0x810d, 0x3b9: 0x810e, 0x3ba: 0x810e, 0x3bb: 0x810f, + 0x3bc: 0x8110, 0x3bd: 0x8111, 0x3bf: 0x8112, + // Block 0xf, offset 0x3c0 + 0x3c8: 0xa000, 0x3ca: 0xa000, 0x3cb: 0x8116, + 0x3cc: 0x8117, 0x3cd: 0x8118, 0x3ce: 0x8119, 0x3cf: 0x811a, 0x3d0: 0x811b, 0x3d1: 0x811c, + 0x3d2: 0x811d, 0x3d3: 0x9932, 0x3d4: 0x9932, 0x3d5: 0x992d, 0x3d6: 0x812d, 0x3d7: 0x8132, + 0x3d8: 0x8132, 0x3d9: 0x8132, 0x3da: 0x8132, 0x3db: 0x8132, 0x3dc: 0x812d, 0x3dd: 0x8132, + 0x3de: 0x8132, 0x3df: 0x812d, + 0x3f0: 0x811e, 0x3f5: 0x1d84, + 0x3f6: 0x2013, 0x3f7: 0x204f, 0x3f8: 0x204a, + // Block 0x10, offset 0x400 + 0x405: 0xa000, + 0x406: 0x2d26, 0x407: 0xa000, 0x408: 0x2d2e, 0x409: 0xa000, 0x40a: 0x2d36, 0x40b: 0xa000, + 0x40c: 0x2d3e, 0x40d: 0xa000, 0x40e: 0x2d46, 0x411: 0xa000, + 0x412: 0x2d4e, + 0x434: 0x8102, 0x435: 0x9900, + 0x43a: 0xa000, 0x43b: 0x2d56, + 0x43c: 0xa000, 0x43d: 0x2d5e, 0x43e: 0xa000, 0x43f: 0xa000, + // Block 0x11, offset 0x440 + 0x440: 0x0069, 0x441: 0x006b, 0x442: 0x006f, 0x443: 0x0083, 0x444: 0x00f5, 0x445: 0x00f8, + 0x446: 0x0413, 0x447: 0x0085, 0x448: 0x0089, 0x449: 0x008b, 0x44a: 0x0104, 0x44b: 0x0107, + 0x44c: 0x010a, 0x44d: 0x008f, 0x44f: 0x0097, 0x450: 0x009b, 0x451: 0x00e0, + 0x452: 0x009f, 0x453: 0x00fe, 0x454: 0x0417, 0x455: 0x041b, 0x456: 0x00a1, 0x457: 0x00a9, + 0x458: 0x00ab, 0x459: 0x0423, 0x45a: 0x012b, 0x45b: 0x00ad, 0x45c: 0x0427, 0x45d: 0x01be, + 0x45e: 0x01c1, 0x45f: 0x01c4, 0x460: 0x01fa, 0x461: 0x01fd, 0x462: 0x0093, 0x463: 0x00a5, + 0x464: 0x00ab, 0x465: 0x00ad, 0x466: 0x01be, 0x467: 0x01c1, 0x468: 0x01eb, 0x469: 0x01fa, + 0x46a: 0x01fd, + 0x478: 0x020c, + // Block 0x12, offset 0x480 + 0x49b: 0x00fb, 0x49c: 0x0087, 0x49d: 0x0101, + 0x49e: 0x00d4, 0x49f: 0x010a, 0x4a0: 0x008d, 0x4a1: 0x010d, 0x4a2: 0x0110, 0x4a3: 0x0116, + 0x4a4: 0x011c, 0x4a5: 0x011f, 0x4a6: 0x0122, 0x4a7: 0x042b, 0x4a8: 0x016a, 0x4a9: 0x0128, + 0x4aa: 0x042f, 0x4ab: 0x016d, 0x4ac: 0x0131, 0x4ad: 0x012e, 0x4ae: 0x0134, 0x4af: 0x0137, + 0x4b0: 0x013a, 0x4b1: 0x013d, 0x4b2: 0x0140, 0x4b3: 0x014c, 0x4b4: 0x014f, 0x4b5: 0x00ec, + 0x4b6: 0x0152, 0x4b7: 0x0155, 0x4b8: 0x041f, 0x4b9: 0x0158, 0x4ba: 0x015b, 0x4bb: 0x00b5, + 0x4bc: 0x015e, 0x4bd: 0x0161, 0x4be: 0x0164, 0x4bf: 0x01d0, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x8132, 0x4c1: 0x8132, 0x4c2: 0x812d, 0x4c3: 0x8132, 0x4c4: 0x8132, 0x4c5: 0x8132, + 0x4c6: 0x8132, 0x4c7: 0x8132, 0x4c8: 0x8132, 0x4c9: 0x8132, 0x4ca: 0x812d, 0x4cb: 0x8132, + 0x4cc: 0x8132, 0x4cd: 0x8135, 0x4ce: 0x812a, 0x4cf: 0x812d, 0x4d0: 0x8129, 0x4d1: 0x8132, + 0x4d2: 0x8132, 0x4d3: 0x8132, 0x4d4: 0x8132, 0x4d5: 0x8132, 0x4d6: 0x8132, 0x4d7: 0x8132, + 0x4d8: 0x8132, 0x4d9: 0x8132, 0x4da: 0x8132, 0x4db: 0x8132, 0x4dc: 0x8132, 0x4dd: 0x8132, + 0x4de: 0x8132, 0x4df: 0x8132, 0x4e0: 0x8132, 0x4e1: 0x8132, 0x4e2: 0x8132, 0x4e3: 0x8132, + 0x4e4: 0x8132, 0x4e5: 0x8132, 0x4e6: 0x8132, 0x4e7: 0x8132, 0x4e8: 0x8132, 0x4e9: 0x8132, + 0x4ea: 0x8132, 0x4eb: 0x8132, 0x4ec: 0x8132, 0x4ed: 0x8132, 0x4ee: 0x8132, 0x4ef: 0x8132, + 0x4f0: 0x8132, 0x4f1: 0x8132, 0x4f2: 0x8132, 0x4f3: 0x8132, 0x4f4: 0x8132, 0x4f5: 0x8132, + 0x4f6: 0x8133, 0x4f7: 0x8131, 0x4f8: 0x8131, 0x4f9: 0x812d, 0x4fb: 0x8132, + 0x4fc: 0x8134, 0x4fd: 0x812d, 0x4fe: 0x8132, 0x4ff: 0x812d, + // Block 0x14, offset 0x500 + 0x500: 0x2f97, 0x501: 0x32a3, 0x502: 0x2fa1, 0x503: 0x32ad, 0x504: 0x2fa6, 0x505: 0x32b2, + 0x506: 0x2fab, 0x507: 0x32b7, 0x508: 0x38cc, 0x509: 0x3a5b, 0x50a: 0x2fc4, 0x50b: 0x32d0, + 0x50c: 0x2fce, 0x50d: 0x32da, 0x50e: 0x2fdd, 0x50f: 0x32e9, 0x510: 0x2fd3, 0x511: 0x32df, + 0x512: 0x2fd8, 0x513: 0x32e4, 0x514: 0x38ef, 0x515: 0x3a7e, 0x516: 0x38f6, 0x517: 0x3a85, + 0x518: 0x3019, 0x519: 0x3325, 0x51a: 0x301e, 0x51b: 0x332a, 0x51c: 0x3904, 0x51d: 0x3a93, + 0x51e: 0x3023, 0x51f: 0x332f, 0x520: 0x3032, 0x521: 0x333e, 0x522: 0x3050, 0x523: 0x335c, + 0x524: 0x305f, 0x525: 0x336b, 0x526: 0x3055, 0x527: 0x3361, 0x528: 0x3064, 0x529: 0x3370, + 0x52a: 0x3069, 0x52b: 0x3375, 0x52c: 0x30af, 0x52d: 0x33bb, 0x52e: 0x390b, 0x52f: 0x3a9a, + 0x530: 0x30b9, 0x531: 0x33ca, 0x532: 0x30c3, 0x533: 0x33d4, 0x534: 0x30cd, 0x535: 0x33de, + 0x536: 0x46c4, 0x537: 0x4755, 0x538: 0x3912, 0x539: 0x3aa1, 0x53a: 0x30e6, 0x53b: 0x33f7, + 0x53c: 0x30e1, 0x53d: 0x33f2, 0x53e: 0x30eb, 0x53f: 0x33fc, + // Block 0x15, offset 0x540 + 0x540: 0x30f0, 0x541: 0x3401, 0x542: 0x30f5, 0x543: 0x3406, 0x544: 0x3109, 0x545: 0x341a, + 0x546: 0x3113, 0x547: 0x3424, 0x548: 0x3122, 0x549: 0x3433, 0x54a: 0x311d, 0x54b: 0x342e, + 0x54c: 0x3935, 0x54d: 0x3ac4, 0x54e: 0x3943, 0x54f: 0x3ad2, 0x550: 0x394a, 0x551: 0x3ad9, + 0x552: 0x3951, 0x553: 0x3ae0, 0x554: 0x314f, 0x555: 0x3460, 0x556: 0x3154, 0x557: 0x3465, + 0x558: 0x315e, 0x559: 0x346f, 0x55a: 0x46f1, 0x55b: 0x4782, 0x55c: 0x3997, 0x55d: 0x3b26, + 0x55e: 0x3177, 0x55f: 0x3488, 0x560: 0x3181, 0x561: 0x3492, 0x562: 0x4700, 0x563: 0x4791, + 0x564: 0x399e, 0x565: 0x3b2d, 0x566: 0x39a5, 0x567: 0x3b34, 0x568: 0x39ac, 0x569: 0x3b3b, + 0x56a: 0x3190, 0x56b: 0x34a1, 0x56c: 0x319a, 0x56d: 0x34b0, 0x56e: 0x31ae, 0x56f: 0x34c4, + 0x570: 0x31a9, 0x571: 0x34bf, 0x572: 0x31ea, 0x573: 0x3500, 0x574: 0x31f9, 0x575: 0x350f, + 0x576: 0x31f4, 0x577: 0x350a, 0x578: 0x39b3, 0x579: 0x3b42, 0x57a: 0x39ba, 0x57b: 0x3b49, + 0x57c: 0x31fe, 0x57d: 0x3514, 0x57e: 0x3203, 0x57f: 0x3519, + // Block 0x16, offset 0x580 + 0x580: 0x3208, 0x581: 0x351e, 0x582: 0x320d, 0x583: 0x3523, 0x584: 0x321c, 0x585: 0x3532, + 0x586: 0x3217, 0x587: 0x352d, 0x588: 0x3221, 0x589: 0x353c, 0x58a: 0x3226, 0x58b: 0x3541, + 0x58c: 0x322b, 0x58d: 0x3546, 0x58e: 0x3249, 0x58f: 0x3564, 0x590: 0x3262, 0x591: 0x3582, + 0x592: 0x3271, 0x593: 0x3591, 0x594: 0x3276, 0x595: 0x3596, 0x596: 0x337a, 0x597: 0x34a6, + 0x598: 0x3537, 0x599: 0x3573, 0x59a: 0x1be0, 0x59b: 0x42d7, + 0x5a0: 0x46a1, 0x5a1: 0x4732, 0x5a2: 0x2f83, 0x5a3: 0x328f, + 0x5a4: 0x3878, 0x5a5: 0x3a07, 0x5a6: 0x3871, 0x5a7: 0x3a00, 0x5a8: 0x3886, 0x5a9: 0x3a15, + 0x5aa: 0x387f, 0x5ab: 0x3a0e, 0x5ac: 0x38be, 0x5ad: 0x3a4d, 0x5ae: 0x3894, 0x5af: 0x3a23, + 0x5b0: 0x388d, 0x5b1: 0x3a1c, 0x5b2: 0x38a2, 0x5b3: 0x3a31, 0x5b4: 0x389b, 0x5b5: 0x3a2a, + 0x5b6: 0x38c5, 0x5b7: 0x3a54, 0x5b8: 0x46b5, 0x5b9: 0x4746, 0x5ba: 0x3000, 0x5bb: 0x330c, + 0x5bc: 0x2fec, 0x5bd: 0x32f8, 0x5be: 0x38da, 0x5bf: 0x3a69, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x38d3, 0x5c1: 0x3a62, 0x5c2: 0x38e8, 0x5c3: 0x3a77, 0x5c4: 0x38e1, 0x5c5: 0x3a70, + 0x5c6: 0x38fd, 0x5c7: 0x3a8c, 0x5c8: 0x3091, 0x5c9: 0x339d, 0x5ca: 0x30a5, 0x5cb: 0x33b1, + 0x5cc: 0x46e7, 0x5cd: 0x4778, 0x5ce: 0x3136, 0x5cf: 0x3447, 0x5d0: 0x3920, 0x5d1: 0x3aaf, + 0x5d2: 0x3919, 0x5d3: 0x3aa8, 0x5d4: 0x392e, 0x5d5: 0x3abd, 0x5d6: 0x3927, 0x5d7: 0x3ab6, + 0x5d8: 0x3989, 0x5d9: 0x3b18, 0x5da: 0x396d, 0x5db: 0x3afc, 0x5dc: 0x3966, 0x5dd: 0x3af5, + 0x5de: 0x397b, 0x5df: 0x3b0a, 0x5e0: 0x3974, 0x5e1: 0x3b03, 0x5e2: 0x3982, 0x5e3: 0x3b11, + 0x5e4: 0x31e5, 0x5e5: 0x34fb, 0x5e6: 0x31c7, 0x5e7: 0x34dd, 0x5e8: 0x39e4, 0x5e9: 0x3b73, + 0x5ea: 0x39dd, 0x5eb: 0x3b6c, 0x5ec: 0x39f2, 0x5ed: 0x3b81, 0x5ee: 0x39eb, 0x5ef: 0x3b7a, + 0x5f0: 0x39f9, 0x5f1: 0x3b88, 0x5f2: 0x3230, 0x5f3: 0x354b, 0x5f4: 0x3258, 0x5f5: 0x3578, + 0x5f6: 0x3253, 0x5f7: 0x356e, 0x5f8: 0x323f, 0x5f9: 0x355a, + // Block 0x18, offset 0x600 + 0x600: 0x4804, 0x601: 0x480a, 0x602: 0x491e, 0x603: 0x4936, 0x604: 0x4926, 0x605: 0x493e, + 0x606: 0x492e, 0x607: 0x4946, 0x608: 0x47aa, 0x609: 0x47b0, 0x60a: 0x488e, 0x60b: 0x48a6, + 0x60c: 0x4896, 0x60d: 0x48ae, 0x60e: 0x489e, 0x60f: 0x48b6, 0x610: 0x4816, 0x611: 0x481c, + 0x612: 0x3db8, 0x613: 0x3dc8, 0x614: 0x3dc0, 0x615: 0x3dd0, + 0x618: 0x47b6, 0x619: 0x47bc, 0x61a: 0x3ce8, 0x61b: 0x3cf8, 0x61c: 0x3cf0, 0x61d: 0x3d00, + 0x620: 0x482e, 0x621: 0x4834, 0x622: 0x494e, 0x623: 0x4966, + 0x624: 0x4956, 0x625: 0x496e, 0x626: 0x495e, 0x627: 0x4976, 0x628: 0x47c2, 0x629: 0x47c8, + 0x62a: 0x48be, 0x62b: 0x48d6, 0x62c: 0x48c6, 0x62d: 0x48de, 0x62e: 0x48ce, 0x62f: 0x48e6, + 0x630: 0x4846, 0x631: 0x484c, 0x632: 0x3e18, 0x633: 0x3e30, 0x634: 0x3e20, 0x635: 0x3e38, + 0x636: 0x3e28, 0x637: 0x3e40, 0x638: 0x47ce, 0x639: 0x47d4, 0x63a: 0x3d18, 0x63b: 0x3d30, + 0x63c: 0x3d20, 0x63d: 0x3d38, 0x63e: 0x3d28, 0x63f: 0x3d40, + // Block 0x19, offset 0x640 + 0x640: 0x4852, 0x641: 0x4858, 0x642: 0x3e48, 0x643: 0x3e58, 0x644: 0x3e50, 0x645: 0x3e60, + 0x648: 0x47da, 0x649: 0x47e0, 0x64a: 0x3d48, 0x64b: 0x3d58, + 0x64c: 0x3d50, 0x64d: 0x3d60, 0x650: 0x4864, 0x651: 0x486a, + 0x652: 0x3e80, 0x653: 0x3e98, 0x654: 0x3e88, 0x655: 0x3ea0, 0x656: 0x3e90, 0x657: 0x3ea8, + 0x659: 0x47e6, 0x65b: 0x3d68, 0x65d: 0x3d70, + 0x65f: 0x3d78, 0x660: 0x487c, 0x661: 0x4882, 0x662: 0x497e, 0x663: 0x4996, + 0x664: 0x4986, 0x665: 0x499e, 0x666: 0x498e, 0x667: 0x49a6, 0x668: 0x47ec, 0x669: 0x47f2, + 0x66a: 0x48ee, 0x66b: 0x4906, 0x66c: 0x48f6, 0x66d: 0x490e, 0x66e: 0x48fe, 0x66f: 0x4916, + 0x670: 0x47f8, 0x671: 0x431e, 0x672: 0x3691, 0x673: 0x4324, 0x674: 0x4822, 0x675: 0x432a, + 0x676: 0x36a3, 0x677: 0x4330, 0x678: 0x36c1, 0x679: 0x4336, 0x67a: 0x36d9, 0x67b: 0x433c, + 0x67c: 0x4870, 0x67d: 0x4342, + // Block 0x1a, offset 0x680 + 0x680: 0x3da0, 0x681: 0x3da8, 0x682: 0x4184, 0x683: 0x41a2, 0x684: 0x418e, 0x685: 0x41ac, + 0x686: 0x4198, 0x687: 0x41b6, 0x688: 0x3cd8, 0x689: 0x3ce0, 0x68a: 0x40d0, 0x68b: 0x40ee, + 0x68c: 0x40da, 0x68d: 0x40f8, 0x68e: 0x40e4, 0x68f: 0x4102, 0x690: 0x3de8, 0x691: 0x3df0, + 0x692: 0x41c0, 0x693: 0x41de, 0x694: 0x41ca, 0x695: 0x41e8, 0x696: 0x41d4, 0x697: 0x41f2, + 0x698: 0x3d08, 0x699: 0x3d10, 0x69a: 0x410c, 0x69b: 0x412a, 0x69c: 0x4116, 0x69d: 0x4134, + 0x69e: 0x4120, 0x69f: 0x413e, 0x6a0: 0x3ec0, 0x6a1: 0x3ec8, 0x6a2: 0x41fc, 0x6a3: 0x421a, + 0x6a4: 0x4206, 0x6a5: 0x4224, 0x6a6: 0x4210, 0x6a7: 0x422e, 0x6a8: 0x3d80, 0x6a9: 0x3d88, + 0x6aa: 0x4148, 0x6ab: 0x4166, 0x6ac: 0x4152, 0x6ad: 0x4170, 0x6ae: 0x415c, 0x6af: 0x417a, + 0x6b0: 0x3685, 0x6b1: 0x367f, 0x6b2: 0x3d90, 0x6b3: 0x368b, 0x6b4: 0x3d98, + 0x6b6: 0x4810, 0x6b7: 0x3db0, 0x6b8: 0x35f5, 0x6b9: 0x35ef, 0x6ba: 0x35e3, 0x6bb: 0x42ee, + 0x6bc: 0x35fb, 0x6bd: 0x4287, 0x6be: 0x01d3, 0x6bf: 0x4287, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x42a0, 0x6c1: 0x4482, 0x6c2: 0x3dd8, 0x6c3: 0x369d, 0x6c4: 0x3de0, + 0x6c6: 0x483a, 0x6c7: 0x3df8, 0x6c8: 0x3601, 0x6c9: 0x42f4, 0x6ca: 0x360d, 0x6cb: 0x42fa, + 0x6cc: 0x3619, 0x6cd: 0x4489, 0x6ce: 0x4490, 0x6cf: 0x4497, 0x6d0: 0x36b5, 0x6d1: 0x36af, + 0x6d2: 0x3e00, 0x6d3: 0x44e4, 0x6d6: 0x36bb, 0x6d7: 0x3e10, + 0x6d8: 0x3631, 0x6d9: 0x362b, 0x6da: 0x361f, 0x6db: 0x4300, 0x6dd: 0x449e, + 0x6de: 0x44a5, 0x6df: 0x44ac, 0x6e0: 0x36eb, 0x6e1: 0x36e5, 0x6e2: 0x3e68, 0x6e3: 0x44ec, + 0x6e4: 0x36cd, 0x6e5: 0x36d3, 0x6e6: 0x36f1, 0x6e7: 0x3e78, 0x6e8: 0x3661, 0x6e9: 0x365b, + 0x6ea: 0x364f, 0x6eb: 0x430c, 0x6ec: 0x3649, 0x6ed: 0x4474, 0x6ee: 0x447b, 0x6ef: 0x0081, + 0x6f2: 0x3eb0, 0x6f3: 0x36f7, 0x6f4: 0x3eb8, + 0x6f6: 0x4888, 0x6f7: 0x3ed0, 0x6f8: 0x363d, 0x6f9: 0x4306, 0x6fa: 0x366d, 0x6fb: 0x4318, + 0x6fc: 0x3679, 0x6fd: 0x425a, 0x6fe: 0x428c, + // Block 0x1c, offset 0x700 + 0x700: 0x1bd8, 0x701: 0x1bdc, 0x702: 0x0047, 0x703: 0x1c54, 0x705: 0x1be8, + 0x706: 0x1bec, 0x707: 0x00e9, 0x709: 0x1c58, 0x70a: 0x008f, 0x70b: 0x0051, + 0x70c: 0x0051, 0x70d: 0x0051, 0x70e: 0x0091, 0x70f: 0x00da, 0x710: 0x0053, 0x711: 0x0053, + 0x712: 0x0059, 0x713: 0x0099, 0x715: 0x005d, 0x716: 0x198d, + 0x719: 0x0061, 0x71a: 0x0063, 0x71b: 0x0065, 0x71c: 0x0065, 0x71d: 0x0065, + 0x720: 0x199f, 0x721: 0x1bc8, 0x722: 0x19a8, + 0x724: 0x0075, 0x726: 0x01b8, 0x728: 0x0075, + 0x72a: 0x0057, 0x72b: 0x42d2, 0x72c: 0x0045, 0x72d: 0x0047, 0x72f: 0x008b, + 0x730: 0x004b, 0x731: 0x004d, 0x733: 0x005b, 0x734: 0x009f, 0x735: 0x0215, + 0x736: 0x0218, 0x737: 0x021b, 0x738: 0x021e, 0x739: 0x0093, 0x73b: 0x1b98, + 0x73c: 0x01e8, 0x73d: 0x01c1, 0x73e: 0x0179, 0x73f: 0x01a0, + // Block 0x1d, offset 0x740 + 0x740: 0x0463, 0x745: 0x0049, + 0x746: 0x0089, 0x747: 0x008b, 0x748: 0x0093, 0x749: 0x0095, + 0x750: 0x222e, 0x751: 0x223a, + 0x752: 0x22ee, 0x753: 0x2216, 0x754: 0x229a, 0x755: 0x2222, 0x756: 0x22a0, 0x757: 0x22b8, + 0x758: 0x22c4, 0x759: 0x2228, 0x75a: 0x22ca, 0x75b: 0x2234, 0x75c: 0x22be, 0x75d: 0x22d0, + 0x75e: 0x22d6, 0x75f: 0x1cbc, 0x760: 0x0053, 0x761: 0x195a, 0x762: 0x1ba4, 0x763: 0x1963, + 0x764: 0x006d, 0x765: 0x19ab, 0x766: 0x1bd0, 0x767: 0x1d48, 0x768: 0x1966, 0x769: 0x0071, + 0x76a: 0x19b7, 0x76b: 0x1bd4, 0x76c: 0x0059, 0x76d: 0x0047, 0x76e: 0x0049, 0x76f: 0x005b, + 0x770: 0x0093, 0x771: 0x19e4, 0x772: 0x1c18, 0x773: 0x19ed, 0x774: 0x00ad, 0x775: 0x1a62, + 0x776: 0x1c4c, 0x777: 0x1d5c, 0x778: 0x19f0, 0x779: 0x00b1, 0x77a: 0x1a65, 0x77b: 0x1c50, + 0x77c: 0x0099, 0x77d: 0x0087, 0x77e: 0x0089, 0x77f: 0x009b, + // Block 0x1e, offset 0x780 + 0x781: 0x3c06, 0x783: 0xa000, 0x784: 0x3c0d, 0x785: 0xa000, + 0x787: 0x3c14, 0x788: 0xa000, 0x789: 0x3c1b, + 0x78d: 0xa000, + 0x7a0: 0x2f65, 0x7a1: 0xa000, 0x7a2: 0x3c29, + 0x7a4: 0xa000, 0x7a5: 0xa000, + 0x7ad: 0x3c22, 0x7ae: 0x2f60, 0x7af: 0x2f6a, + 0x7b0: 0x3c30, 0x7b1: 0x3c37, 0x7b2: 0xa000, 0x7b3: 0xa000, 0x7b4: 0x3c3e, 0x7b5: 0x3c45, + 0x7b6: 0xa000, 0x7b7: 0xa000, 0x7b8: 0x3c4c, 0x7b9: 0x3c53, 0x7ba: 0xa000, 0x7bb: 0xa000, + 0x7bc: 0xa000, 0x7bd: 0xa000, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x3c5a, 0x7c1: 0x3c61, 0x7c2: 0xa000, 0x7c3: 0xa000, 0x7c4: 0x3c76, 0x7c5: 0x3c7d, + 0x7c6: 0xa000, 0x7c7: 0xa000, 0x7c8: 0x3c84, 0x7c9: 0x3c8b, + 0x7d1: 0xa000, + 0x7d2: 0xa000, + 0x7e2: 0xa000, + 0x7e8: 0xa000, 0x7e9: 0xa000, + 0x7eb: 0xa000, 0x7ec: 0x3ca0, 0x7ed: 0x3ca7, 0x7ee: 0x3cae, 0x7ef: 0x3cb5, + 0x7f2: 0xa000, 0x7f3: 0xa000, 0x7f4: 0xa000, 0x7f5: 0xa000, + // Block 0x20, offset 0x800 + 0x820: 0x0023, 0x821: 0x0025, 0x822: 0x0027, 0x823: 0x0029, + 0x824: 0x002b, 0x825: 0x002d, 0x826: 0x002f, 0x827: 0x0031, 0x828: 0x0033, 0x829: 0x1882, + 0x82a: 0x1885, 0x82b: 0x1888, 0x82c: 0x188b, 0x82d: 0x188e, 0x82e: 0x1891, 0x82f: 0x1894, + 0x830: 0x1897, 0x831: 0x189a, 0x832: 0x189d, 0x833: 0x18a6, 0x834: 0x1a68, 0x835: 0x1a6c, + 0x836: 0x1a70, 0x837: 0x1a74, 0x838: 0x1a78, 0x839: 0x1a7c, 0x83a: 0x1a80, 0x83b: 0x1a84, + 0x83c: 0x1a88, 0x83d: 0x1c80, 0x83e: 0x1c85, 0x83f: 0x1c8a, + // Block 0x21, offset 0x840 + 0x840: 0x1c8f, 0x841: 0x1c94, 0x842: 0x1c99, 0x843: 0x1c9e, 0x844: 0x1ca3, 0x845: 0x1ca8, + 0x846: 0x1cad, 0x847: 0x1cb2, 0x848: 0x187f, 0x849: 0x18a3, 0x84a: 0x18c7, 0x84b: 0x18eb, + 0x84c: 0x190f, 0x84d: 0x1918, 0x84e: 0x191e, 0x84f: 0x1924, 0x850: 0x192a, 0x851: 0x1b60, + 0x852: 0x1b64, 0x853: 0x1b68, 0x854: 0x1b6c, 0x855: 0x1b70, 0x856: 0x1b74, 0x857: 0x1b78, + 0x858: 0x1b7c, 0x859: 0x1b80, 0x85a: 0x1b84, 0x85b: 0x1b88, 0x85c: 0x1af4, 0x85d: 0x1af8, + 0x85e: 0x1afc, 0x85f: 0x1b00, 0x860: 0x1b04, 0x861: 0x1b08, 0x862: 0x1b0c, 0x863: 0x1b10, + 0x864: 0x1b14, 0x865: 0x1b18, 0x866: 0x1b1c, 0x867: 0x1b20, 0x868: 0x1b24, 0x869: 0x1b28, + 0x86a: 0x1b2c, 0x86b: 0x1b30, 0x86c: 0x1b34, 0x86d: 0x1b38, 0x86e: 0x1b3c, 0x86f: 0x1b40, + 0x870: 0x1b44, 0x871: 0x1b48, 0x872: 0x1b4c, 0x873: 0x1b50, 0x874: 0x1b54, 0x875: 0x1b58, + 0x876: 0x0043, 0x877: 0x0045, 0x878: 0x0047, 0x879: 0x0049, 0x87a: 0x004b, 0x87b: 0x004d, + 0x87c: 0x004f, 0x87d: 0x0051, 0x87e: 0x0053, 0x87f: 0x0055, + // Block 0x22, offset 0x880 + 0x880: 0x06bf, 0x881: 0x06e3, 0x882: 0x06ef, 0x883: 0x06ff, 0x884: 0x0707, 0x885: 0x0713, + 0x886: 0x071b, 0x887: 0x0723, 0x888: 0x072f, 0x889: 0x0783, 0x88a: 0x079b, 0x88b: 0x07ab, + 0x88c: 0x07bb, 0x88d: 0x07cb, 0x88e: 0x07db, 0x88f: 0x07fb, 0x890: 0x07ff, 0x891: 0x0803, + 0x892: 0x0837, 0x893: 0x085f, 0x894: 0x086f, 0x895: 0x0877, 0x896: 0x087b, 0x897: 0x0887, + 0x898: 0x08a3, 0x899: 0x08a7, 0x89a: 0x08bf, 0x89b: 0x08c3, 0x89c: 0x08cb, 0x89d: 0x08db, + 0x89e: 0x0977, 0x89f: 0x098b, 0x8a0: 0x09cb, 0x8a1: 0x09df, 0x8a2: 0x09e7, 0x8a3: 0x09eb, + 0x8a4: 0x09fb, 0x8a5: 0x0a17, 0x8a6: 0x0a43, 0x8a7: 0x0a4f, 0x8a8: 0x0a6f, 0x8a9: 0x0a7b, + 0x8aa: 0x0a7f, 0x8ab: 0x0a83, 0x8ac: 0x0a9b, 0x8ad: 0x0a9f, 0x8ae: 0x0acb, 0x8af: 0x0ad7, + 0x8b0: 0x0adf, 0x8b1: 0x0ae7, 0x8b2: 0x0af7, 0x8b3: 0x0aff, 0x8b4: 0x0b07, 0x8b5: 0x0b33, + 0x8b6: 0x0b37, 0x8b7: 0x0b3f, 0x8b8: 0x0b43, 0x8b9: 0x0b4b, 0x8ba: 0x0b53, 0x8bb: 0x0b63, + 0x8bc: 0x0b7f, 0x8bd: 0x0bf7, 0x8be: 0x0c0b, 0x8bf: 0x0c0f, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x0c8f, 0x8c1: 0x0c93, 0x8c2: 0x0ca7, 0x8c3: 0x0cab, 0x8c4: 0x0cb3, 0x8c5: 0x0cbb, + 0x8c6: 0x0cc3, 0x8c7: 0x0ccf, 0x8c8: 0x0cf7, 0x8c9: 0x0d07, 0x8ca: 0x0d1b, 0x8cb: 0x0d8b, + 0x8cc: 0x0d97, 0x8cd: 0x0da7, 0x8ce: 0x0db3, 0x8cf: 0x0dbf, 0x8d0: 0x0dc7, 0x8d1: 0x0dcb, + 0x8d2: 0x0dcf, 0x8d3: 0x0dd3, 0x8d4: 0x0dd7, 0x8d5: 0x0e8f, 0x8d6: 0x0ed7, 0x8d7: 0x0ee3, + 0x8d8: 0x0ee7, 0x8d9: 0x0eeb, 0x8da: 0x0eef, 0x8db: 0x0ef7, 0x8dc: 0x0efb, 0x8dd: 0x0f0f, + 0x8de: 0x0f2b, 0x8df: 0x0f33, 0x8e0: 0x0f73, 0x8e1: 0x0f77, 0x8e2: 0x0f7f, 0x8e3: 0x0f83, + 0x8e4: 0x0f8b, 0x8e5: 0x0f8f, 0x8e6: 0x0fb3, 0x8e7: 0x0fb7, 0x8e8: 0x0fd3, 0x8e9: 0x0fd7, + 0x8ea: 0x0fdb, 0x8eb: 0x0fdf, 0x8ec: 0x0ff3, 0x8ed: 0x1017, 0x8ee: 0x101b, 0x8ef: 0x101f, + 0x8f0: 0x1043, 0x8f1: 0x1083, 0x8f2: 0x1087, 0x8f3: 0x10a7, 0x8f4: 0x10b7, 0x8f5: 0x10bf, + 0x8f6: 0x10df, 0x8f7: 0x1103, 0x8f8: 0x1147, 0x8f9: 0x114f, 0x8fa: 0x1163, 0x8fb: 0x116f, + 0x8fc: 0x1177, 0x8fd: 0x117f, 0x8fe: 0x1183, 0x8ff: 0x1187, + // Block 0x24, offset 0x900 + 0x900: 0x119f, 0x901: 0x11a3, 0x902: 0x11bf, 0x903: 0x11c7, 0x904: 0x11cf, 0x905: 0x11d3, + 0x906: 0x11df, 0x907: 0x11e7, 0x908: 0x11eb, 0x909: 0x11ef, 0x90a: 0x11f7, 0x90b: 0x11fb, + 0x90c: 0x129b, 0x90d: 0x12af, 0x90e: 0x12e3, 0x90f: 0x12e7, 0x910: 0x12ef, 0x911: 0x131b, + 0x912: 0x1323, 0x913: 0x132b, 0x914: 0x1333, 0x915: 0x136f, 0x916: 0x1373, 0x917: 0x137b, + 0x918: 0x137f, 0x919: 0x1383, 0x91a: 0x13af, 0x91b: 0x13b3, 0x91c: 0x13bb, 0x91d: 0x13cf, + 0x91e: 0x13d3, 0x91f: 0x13ef, 0x920: 0x13f7, 0x921: 0x13fb, 0x922: 0x141f, 0x923: 0x143f, + 0x924: 0x1453, 0x925: 0x1457, 0x926: 0x145f, 0x927: 0x148b, 0x928: 0x148f, 0x929: 0x149f, + 0x92a: 0x14c3, 0x92b: 0x14cf, 0x92c: 0x14df, 0x92d: 0x14f7, 0x92e: 0x14ff, 0x92f: 0x1503, + 0x930: 0x1507, 0x931: 0x150b, 0x932: 0x1517, 0x933: 0x151b, 0x934: 0x1523, 0x935: 0x153f, + 0x936: 0x1543, 0x937: 0x1547, 0x938: 0x155f, 0x939: 0x1563, 0x93a: 0x156b, 0x93b: 0x157f, + 0x93c: 0x1583, 0x93d: 0x1587, 0x93e: 0x158f, 0x93f: 0x1593, + // Block 0x25, offset 0x940 + 0x946: 0xa000, 0x94b: 0xa000, + 0x94c: 0x3f08, 0x94d: 0xa000, 0x94e: 0x3f10, 0x94f: 0xa000, 0x950: 0x3f18, 0x951: 0xa000, + 0x952: 0x3f20, 0x953: 0xa000, 0x954: 0x3f28, 0x955: 0xa000, 0x956: 0x3f30, 0x957: 0xa000, + 0x958: 0x3f38, 0x959: 0xa000, 0x95a: 0x3f40, 0x95b: 0xa000, 0x95c: 0x3f48, 0x95d: 0xa000, + 0x95e: 0x3f50, 0x95f: 0xa000, 0x960: 0x3f58, 0x961: 0xa000, 0x962: 0x3f60, + 0x964: 0xa000, 0x965: 0x3f68, 0x966: 0xa000, 0x967: 0x3f70, 0x968: 0xa000, 0x969: 0x3f78, + 0x96f: 0xa000, + 0x970: 0x3f80, 0x971: 0x3f88, 0x972: 0xa000, 0x973: 0x3f90, 0x974: 0x3f98, 0x975: 0xa000, + 0x976: 0x3fa0, 0x977: 0x3fa8, 0x978: 0xa000, 0x979: 0x3fb0, 0x97a: 0x3fb8, 0x97b: 0xa000, + 0x97c: 0x3fc0, 0x97d: 0x3fc8, + // Block 0x26, offset 0x980 + 0x994: 0x3f00, + 0x999: 0x9903, 0x99a: 0x9903, 0x99b: 0x42dc, 0x99c: 0x42e2, 0x99d: 0xa000, + 0x99e: 0x3fd0, 0x99f: 0x26b4, + 0x9a6: 0xa000, + 0x9ab: 0xa000, 0x9ac: 0x3fe0, 0x9ad: 0xa000, 0x9ae: 0x3fe8, 0x9af: 0xa000, + 0x9b0: 0x3ff0, 0x9b1: 0xa000, 0x9b2: 0x3ff8, 0x9b3: 0xa000, 0x9b4: 0x4000, 0x9b5: 0xa000, + 0x9b6: 0x4008, 0x9b7: 0xa000, 0x9b8: 0x4010, 0x9b9: 0xa000, 0x9ba: 0x4018, 0x9bb: 0xa000, + 0x9bc: 0x4020, 0x9bd: 0xa000, 0x9be: 0x4028, 0x9bf: 0xa000, + // Block 0x27, offset 0x9c0 + 0x9c0: 0x4030, 0x9c1: 0xa000, 0x9c2: 0x4038, 0x9c4: 0xa000, 0x9c5: 0x4040, + 0x9c6: 0xa000, 0x9c7: 0x4048, 0x9c8: 0xa000, 0x9c9: 0x4050, + 0x9cf: 0xa000, 0x9d0: 0x4058, 0x9d1: 0x4060, + 0x9d2: 0xa000, 0x9d3: 0x4068, 0x9d4: 0x4070, 0x9d5: 0xa000, 0x9d6: 0x4078, 0x9d7: 0x4080, + 0x9d8: 0xa000, 0x9d9: 0x4088, 0x9da: 0x4090, 0x9db: 0xa000, 0x9dc: 0x4098, 0x9dd: 0x40a0, + 0x9ef: 0xa000, + 0x9f0: 0xa000, 0x9f1: 0xa000, 0x9f2: 0xa000, 0x9f4: 0x3fd8, + 0x9f7: 0x40a8, 0x9f8: 0x40b0, 0x9f9: 0x40b8, 0x9fa: 0x40c0, + 0x9fd: 0xa000, 0x9fe: 0x40c8, 0x9ff: 0x26c9, + // Block 0x28, offset 0xa00 + 0xa00: 0x0367, 0xa01: 0x032b, 0xa02: 0x032f, 0xa03: 0x0333, 0xa04: 0x037b, 0xa05: 0x0337, + 0xa06: 0x033b, 0xa07: 0x033f, 0xa08: 0x0343, 0xa09: 0x0347, 0xa0a: 0x034b, 0xa0b: 0x034f, + 0xa0c: 0x0353, 0xa0d: 0x0357, 0xa0e: 0x035b, 0xa0f: 0x49bd, 0xa10: 0x49c3, 0xa11: 0x49c9, + 0xa12: 0x49cf, 0xa13: 0x49d5, 0xa14: 0x49db, 0xa15: 0x49e1, 0xa16: 0x49e7, 0xa17: 0x49ed, + 0xa18: 0x49f3, 0xa19: 0x49f9, 0xa1a: 0x49ff, 0xa1b: 0x4a05, 0xa1c: 0x4a0b, 0xa1d: 0x4a11, + 0xa1e: 0x4a17, 0xa1f: 0x4a1d, 0xa20: 0x4a23, 0xa21: 0x4a29, 0xa22: 0x4a2f, 0xa23: 0x4a35, + 0xa24: 0x03c3, 0xa25: 0x035f, 0xa26: 0x0363, 0xa27: 0x03e7, 0xa28: 0x03eb, 0xa29: 0x03ef, + 0xa2a: 0x03f3, 0xa2b: 0x03f7, 0xa2c: 0x03fb, 0xa2d: 0x03ff, 0xa2e: 0x036b, 0xa2f: 0x0403, + 0xa30: 0x0407, 0xa31: 0x036f, 0xa32: 0x0373, 0xa33: 0x0377, 0xa34: 0x037f, 0xa35: 0x0383, + 0xa36: 0x0387, 0xa37: 0x038b, 0xa38: 0x038f, 0xa39: 0x0393, 0xa3a: 0x0397, 0xa3b: 0x039b, + 0xa3c: 0x039f, 0xa3d: 0x03a3, 0xa3e: 0x03a7, 0xa3f: 0x03ab, + // Block 0x29, offset 0xa40 + 0xa40: 0x03af, 0xa41: 0x03b3, 0xa42: 0x040b, 0xa43: 0x040f, 0xa44: 0x03b7, 0xa45: 0x03bb, + 0xa46: 0x03bf, 0xa47: 0x03c7, 0xa48: 0x03cb, 0xa49: 0x03cf, 0xa4a: 0x03d3, 0xa4b: 0x03d7, + 0xa4c: 0x03db, 0xa4d: 0x03df, 0xa4e: 0x03e3, + 0xa52: 0x06bf, 0xa53: 0x071b, 0xa54: 0x06cb, 0xa55: 0x097b, 0xa56: 0x06cf, 0xa57: 0x06e7, + 0xa58: 0x06d3, 0xa59: 0x0f93, 0xa5a: 0x0707, 0xa5b: 0x06db, 0xa5c: 0x06c3, 0xa5d: 0x09ff, + 0xa5e: 0x098f, 0xa5f: 0x072f, + // Block 0x2a, offset 0xa80 + 0xa80: 0x2054, 0xa81: 0x205a, 0xa82: 0x2060, 0xa83: 0x2066, 0xa84: 0x206c, 0xa85: 0x2072, + 0xa86: 0x2078, 0xa87: 0x207e, 0xa88: 0x2084, 0xa89: 0x208a, 0xa8a: 0x2090, 0xa8b: 0x2096, + 0xa8c: 0x209c, 0xa8d: 0x20a2, 0xa8e: 0x2726, 0xa8f: 0x272f, 0xa90: 0x2738, 0xa91: 0x2741, + 0xa92: 0x274a, 0xa93: 0x2753, 0xa94: 0x275c, 0xa95: 0x2765, 0xa96: 0x276e, 0xa97: 0x2780, + 0xa98: 0x2789, 0xa99: 0x2792, 0xa9a: 0x279b, 0xa9b: 0x27a4, 0xa9c: 0x2777, 0xa9d: 0x2bac, + 0xa9e: 0x2aed, 0xaa0: 0x20a8, 0xaa1: 0x20c0, 0xaa2: 0x20b4, 0xaa3: 0x2108, + 0xaa4: 0x20c6, 0xaa5: 0x20e4, 0xaa6: 0x20ae, 0xaa7: 0x20de, 0xaa8: 0x20ba, 0xaa9: 0x20f0, + 0xaaa: 0x2120, 0xaab: 0x213e, 0xaac: 0x2138, 0xaad: 0x212c, 0xaae: 0x217a, 0xaaf: 0x210e, + 0xab0: 0x211a, 0xab1: 0x2132, 0xab2: 0x2126, 0xab3: 0x2150, 0xab4: 0x20fc, 0xab5: 0x2144, + 0xab6: 0x216e, 0xab7: 0x2156, 0xab8: 0x20ea, 0xab9: 0x20cc, 0xaba: 0x2102, 0xabb: 0x2114, + 0xabc: 0x214a, 0xabd: 0x20d2, 0xabe: 0x2174, 0xabf: 0x20f6, + // Block 0x2b, offset 0xac0 + 0xac0: 0x215c, 0xac1: 0x20d8, 0xac2: 0x2162, 0xac3: 0x2168, 0xac4: 0x092f, 0xac5: 0x0b03, + 0xac6: 0x0ca7, 0xac7: 0x10c7, + 0xad0: 0x1bc4, 0xad1: 0x18a9, + 0xad2: 0x18ac, 0xad3: 0x18af, 0xad4: 0x18b2, 0xad5: 0x18b5, 0xad6: 0x18b8, 0xad7: 0x18bb, + 0xad8: 0x18be, 0xad9: 0x18c1, 0xada: 0x18ca, 0xadb: 0x18cd, 0xadc: 0x18d0, 0xadd: 0x18d3, + 0xade: 0x18d6, 0xadf: 0x18d9, 0xae0: 0x0313, 0xae1: 0x031b, 0xae2: 0x031f, 0xae3: 0x0327, + 0xae4: 0x032b, 0xae5: 0x032f, 0xae6: 0x0337, 0xae7: 0x033f, 0xae8: 0x0343, 0xae9: 0x034b, + 0xaea: 0x034f, 0xaeb: 0x0353, 0xaec: 0x0357, 0xaed: 0x035b, 0xaee: 0x2e18, 0xaef: 0x2e20, + 0xaf0: 0x2e28, 0xaf1: 0x2e30, 0xaf2: 0x2e38, 0xaf3: 0x2e40, 0xaf4: 0x2e48, 0xaf5: 0x2e50, + 0xaf6: 0x2e60, 0xaf7: 0x2e68, 0xaf8: 0x2e70, 0xaf9: 0x2e78, 0xafa: 0x2e80, 0xafb: 0x2e88, + 0xafc: 0x2ed3, 0xafd: 0x2e9b, 0xafe: 0x2e58, + // Block 0x2c, offset 0xb00 + 0xb00: 0x06bf, 0xb01: 0x071b, 0xb02: 0x06cb, 0xb03: 0x097b, 0xb04: 0x071f, 0xb05: 0x07af, + 0xb06: 0x06c7, 0xb07: 0x07ab, 0xb08: 0x070b, 0xb09: 0x0887, 0xb0a: 0x0d07, 0xb0b: 0x0e8f, + 0xb0c: 0x0dd7, 0xb0d: 0x0d1b, 0xb0e: 0x145f, 0xb0f: 0x098b, 0xb10: 0x0ccf, 0xb11: 0x0d4b, + 0xb12: 0x0d0b, 0xb13: 0x104b, 0xb14: 0x08fb, 0xb15: 0x0f03, 0xb16: 0x1387, 0xb17: 0x105f, + 0xb18: 0x0843, 0xb19: 0x108f, 0xb1a: 0x0f9b, 0xb1b: 0x0a17, 0xb1c: 0x140f, 0xb1d: 0x077f, + 0xb1e: 0x08ab, 0xb1f: 0x0df7, 0xb20: 0x1527, 0xb21: 0x0743, 0xb22: 0x07d3, 0xb23: 0x0d9b, + 0xb24: 0x06cf, 0xb25: 0x06e7, 0xb26: 0x06d3, 0xb27: 0x0adb, 0xb28: 0x08ef, 0xb29: 0x087f, + 0xb2a: 0x0a57, 0xb2b: 0x0a4b, 0xb2c: 0x0feb, 0xb2d: 0x073f, 0xb2e: 0x139b, 0xb2f: 0x089b, + 0xb30: 0x09f3, 0xb31: 0x18dc, 0xb32: 0x18df, 0xb33: 0x18e2, 0xb34: 0x18e5, 0xb35: 0x18ee, + 0xb36: 0x18f1, 0xb37: 0x18f4, 0xb38: 0x18f7, 0xb39: 0x18fa, 0xb3a: 0x18fd, 0xb3b: 0x1900, + 0xb3c: 0x1903, 0xb3d: 0x1906, 0xb3e: 0x1909, 0xb3f: 0x1912, + // Block 0x2d, offset 0xb40 + 0xb40: 0x1cc6, 0xb41: 0x1cd5, 0xb42: 0x1ce4, 0xb43: 0x1cf3, 0xb44: 0x1d02, 0xb45: 0x1d11, + 0xb46: 0x1d20, 0xb47: 0x1d2f, 0xb48: 0x1d3e, 0xb49: 0x218c, 0xb4a: 0x219e, 0xb4b: 0x21b0, + 0xb4c: 0x1954, 0xb4d: 0x1c04, 0xb4e: 0x19d2, 0xb4f: 0x1ba8, 0xb50: 0x04cb, 0xb51: 0x04d3, + 0xb52: 0x04db, 0xb53: 0x04e3, 0xb54: 0x04eb, 0xb55: 0x04ef, 0xb56: 0x04f3, 0xb57: 0x04f7, + 0xb58: 0x04fb, 0xb59: 0x04ff, 0xb5a: 0x0503, 0xb5b: 0x0507, 0xb5c: 0x050b, 0xb5d: 0x050f, + 0xb5e: 0x0513, 0xb5f: 0x0517, 0xb60: 0x051b, 0xb61: 0x0523, 0xb62: 0x0527, 0xb63: 0x052b, + 0xb64: 0x052f, 0xb65: 0x0533, 0xb66: 0x0537, 0xb67: 0x053b, 0xb68: 0x053f, 0xb69: 0x0543, + 0xb6a: 0x0547, 0xb6b: 0x054b, 0xb6c: 0x054f, 0xb6d: 0x0553, 0xb6e: 0x0557, 0xb6f: 0x055b, + 0xb70: 0x055f, 0xb71: 0x0563, 0xb72: 0x0567, 0xb73: 0x056f, 0xb74: 0x0577, 0xb75: 0x057f, + 0xb76: 0x0583, 0xb77: 0x0587, 0xb78: 0x058b, 0xb79: 0x058f, 0xb7a: 0x0593, 0xb7b: 0x0597, + 0xb7c: 0x059b, 0xb7d: 0x059f, 0xb7e: 0x05a3, + // Block 0x2e, offset 0xb80 + 0xb80: 0x2b0c, 0xb81: 0x29a8, 0xb82: 0x2b1c, 0xb83: 0x2880, 0xb84: 0x2ee4, 0xb85: 0x288a, + 0xb86: 0x2894, 0xb87: 0x2f28, 0xb88: 0x29b5, 0xb89: 0x289e, 0xb8a: 0x28a8, 0xb8b: 0x28b2, + 0xb8c: 0x29dc, 0xb8d: 0x29e9, 0xb8e: 0x29c2, 0xb8f: 0x29cf, 0xb90: 0x2ea9, 0xb91: 0x29f6, + 0xb92: 0x2a03, 0xb93: 0x2bbe, 0xb94: 0x26bb, 0xb95: 0x2bd1, 0xb96: 0x2be4, 0xb97: 0x2b2c, + 0xb98: 0x2a10, 0xb99: 0x2bf7, 0xb9a: 0x2c0a, 0xb9b: 0x2a1d, 0xb9c: 0x28bc, 0xb9d: 0x28c6, + 0xb9e: 0x2eb7, 0xb9f: 0x2a2a, 0xba0: 0x2b3c, 0xba1: 0x2ef5, 0xba2: 0x28d0, 0xba3: 0x28da, + 0xba4: 0x2a37, 0xba5: 0x28e4, 0xba6: 0x28ee, 0xba7: 0x26d0, 0xba8: 0x26d7, 0xba9: 0x28f8, + 0xbaa: 0x2902, 0xbab: 0x2c1d, 0xbac: 0x2a44, 0xbad: 0x2b4c, 0xbae: 0x2c30, 0xbaf: 0x2a51, + 0xbb0: 0x2916, 0xbb1: 0x290c, 0xbb2: 0x2f3c, 0xbb3: 0x2a5e, 0xbb4: 0x2c43, 0xbb5: 0x2920, + 0xbb6: 0x2b5c, 0xbb7: 0x292a, 0xbb8: 0x2a78, 0xbb9: 0x2934, 0xbba: 0x2a85, 0xbbb: 0x2f06, + 0xbbc: 0x2a6b, 0xbbd: 0x2b6c, 0xbbe: 0x2a92, 0xbbf: 0x26de, + // Block 0x2f, offset 0xbc0 + 0xbc0: 0x2f17, 0xbc1: 0x293e, 0xbc2: 0x2948, 0xbc3: 0x2a9f, 0xbc4: 0x2952, 0xbc5: 0x295c, + 0xbc6: 0x2966, 0xbc7: 0x2b7c, 0xbc8: 0x2aac, 0xbc9: 0x26e5, 0xbca: 0x2c56, 0xbcb: 0x2e90, + 0xbcc: 0x2b8c, 0xbcd: 0x2ab9, 0xbce: 0x2ec5, 0xbcf: 0x2970, 0xbd0: 0x297a, 0xbd1: 0x2ac6, + 0xbd2: 0x26ec, 0xbd3: 0x2ad3, 0xbd4: 0x2b9c, 0xbd5: 0x26f3, 0xbd6: 0x2c69, 0xbd7: 0x2984, + 0xbd8: 0x1cb7, 0xbd9: 0x1ccb, 0xbda: 0x1cda, 0xbdb: 0x1ce9, 0xbdc: 0x1cf8, 0xbdd: 0x1d07, + 0xbde: 0x1d16, 0xbdf: 0x1d25, 0xbe0: 0x1d34, 0xbe1: 0x1d43, 0xbe2: 0x2192, 0xbe3: 0x21a4, + 0xbe4: 0x21b6, 0xbe5: 0x21c2, 0xbe6: 0x21ce, 0xbe7: 0x21da, 0xbe8: 0x21e6, 0xbe9: 0x21f2, + 0xbea: 0x21fe, 0xbeb: 0x220a, 0xbec: 0x2246, 0xbed: 0x2252, 0xbee: 0x225e, 0xbef: 0x226a, + 0xbf0: 0x2276, 0xbf1: 0x1c14, 0xbf2: 0x19c6, 0xbf3: 0x1936, 0xbf4: 0x1be4, 0xbf5: 0x1a47, + 0xbf6: 0x1a56, 0xbf7: 0x19cc, 0xbf8: 0x1bfc, 0xbf9: 0x1c00, 0xbfa: 0x1960, 0xbfb: 0x2701, + 0xbfc: 0x270f, 0xbfd: 0x26fa, 0xbfe: 0x2708, 0xbff: 0x2ae0, + // Block 0x30, offset 0xc00 + 0xc00: 0x1a4a, 0xc01: 0x1a32, 0xc02: 0x1c60, 0xc03: 0x1a1a, 0xc04: 0x19f3, 0xc05: 0x1969, + 0xc06: 0x1978, 0xc07: 0x1948, 0xc08: 0x1bf0, 0xc09: 0x1d52, 0xc0a: 0x1a4d, 0xc0b: 0x1a35, + 0xc0c: 0x1c64, 0xc0d: 0x1c70, 0xc0e: 0x1a26, 0xc0f: 0x19fc, 0xc10: 0x1957, 0xc11: 0x1c1c, + 0xc12: 0x1bb0, 0xc13: 0x1b9c, 0xc14: 0x1bcc, 0xc15: 0x1c74, 0xc16: 0x1a29, 0xc17: 0x19c9, + 0xc18: 0x19ff, 0xc19: 0x19de, 0xc1a: 0x1a41, 0xc1b: 0x1c78, 0xc1c: 0x1a2c, 0xc1d: 0x19c0, + 0xc1e: 0x1a02, 0xc1f: 0x1c3c, 0xc20: 0x1bf4, 0xc21: 0x1a14, 0xc22: 0x1c24, 0xc23: 0x1c40, + 0xc24: 0x1bf8, 0xc25: 0x1a17, 0xc26: 0x1c28, 0xc27: 0x22e8, 0xc28: 0x22fc, 0xc29: 0x1996, + 0xc2a: 0x1c20, 0xc2b: 0x1bb4, 0xc2c: 0x1ba0, 0xc2d: 0x1c48, 0xc2e: 0x2716, 0xc2f: 0x27ad, + 0xc30: 0x1a59, 0xc31: 0x1a44, 0xc32: 0x1c7c, 0xc33: 0x1a2f, 0xc34: 0x1a50, 0xc35: 0x1a38, + 0xc36: 0x1c68, 0xc37: 0x1a1d, 0xc38: 0x19f6, 0xc39: 0x1981, 0xc3a: 0x1a53, 0xc3b: 0x1a3b, + 0xc3c: 0x1c6c, 0xc3d: 0x1a20, 0xc3e: 0x19f9, 0xc3f: 0x1984, + // Block 0x31, offset 0xc40 + 0xc40: 0x1c2c, 0xc41: 0x1bb8, 0xc42: 0x1d4d, 0xc43: 0x1939, 0xc44: 0x19ba, 0xc45: 0x19bd, + 0xc46: 0x22f5, 0xc47: 0x1b94, 0xc48: 0x19c3, 0xc49: 0x194b, 0xc4a: 0x19e1, 0xc4b: 0x194e, + 0xc4c: 0x19ea, 0xc4d: 0x196c, 0xc4e: 0x196f, 0xc4f: 0x1a05, 0xc50: 0x1a0b, 0xc51: 0x1a0e, + 0xc52: 0x1c30, 0xc53: 0x1a11, 0xc54: 0x1a23, 0xc55: 0x1c38, 0xc56: 0x1c44, 0xc57: 0x1990, + 0xc58: 0x1d57, 0xc59: 0x1bbc, 0xc5a: 0x1993, 0xc5b: 0x1a5c, 0xc5c: 0x19a5, 0xc5d: 0x19b4, + 0xc5e: 0x22e2, 0xc5f: 0x22dc, 0xc60: 0x1cc1, 0xc61: 0x1cd0, 0xc62: 0x1cdf, 0xc63: 0x1cee, + 0xc64: 0x1cfd, 0xc65: 0x1d0c, 0xc66: 0x1d1b, 0xc67: 0x1d2a, 0xc68: 0x1d39, 0xc69: 0x2186, + 0xc6a: 0x2198, 0xc6b: 0x21aa, 0xc6c: 0x21bc, 0xc6d: 0x21c8, 0xc6e: 0x21d4, 0xc6f: 0x21e0, + 0xc70: 0x21ec, 0xc71: 0x21f8, 0xc72: 0x2204, 0xc73: 0x2240, 0xc74: 0x224c, 0xc75: 0x2258, + 0xc76: 0x2264, 0xc77: 0x2270, 0xc78: 0x227c, 0xc79: 0x2282, 0xc7a: 0x2288, 0xc7b: 0x228e, + 0xc7c: 0x2294, 0xc7d: 0x22a6, 0xc7e: 0x22ac, 0xc7f: 0x1c10, + // Block 0x32, offset 0xc80 + 0xc80: 0x1377, 0xc81: 0x0cfb, 0xc82: 0x13d3, 0xc83: 0x139f, 0xc84: 0x0e57, 0xc85: 0x06eb, + 0xc86: 0x08df, 0xc87: 0x162b, 0xc88: 0x162b, 0xc89: 0x0a0b, 0xc8a: 0x145f, 0xc8b: 0x0943, + 0xc8c: 0x0a07, 0xc8d: 0x0bef, 0xc8e: 0x0fcf, 0xc8f: 0x115f, 0xc90: 0x1297, 0xc91: 0x12d3, + 0xc92: 0x1307, 0xc93: 0x141b, 0xc94: 0x0d73, 0xc95: 0x0dff, 0xc96: 0x0eab, 0xc97: 0x0f43, + 0xc98: 0x125f, 0xc99: 0x1447, 0xc9a: 0x1573, 0xc9b: 0x070f, 0xc9c: 0x08b3, 0xc9d: 0x0d87, + 0xc9e: 0x0ecf, 0xc9f: 0x1293, 0xca0: 0x15c3, 0xca1: 0x0ab3, 0xca2: 0x0e77, 0xca3: 0x1283, + 0xca4: 0x1317, 0xca5: 0x0c23, 0xca6: 0x11bb, 0xca7: 0x12df, 0xca8: 0x0b1f, 0xca9: 0x0d0f, + 0xcaa: 0x0e17, 0xcab: 0x0f1b, 0xcac: 0x1427, 0xcad: 0x074f, 0xcae: 0x07e7, 0xcaf: 0x0853, + 0xcb0: 0x0c8b, 0xcb1: 0x0d7f, 0xcb2: 0x0ecb, 0xcb3: 0x0fef, 0xcb4: 0x1177, 0xcb5: 0x128b, + 0xcb6: 0x12a3, 0xcb7: 0x13c7, 0xcb8: 0x14ef, 0xcb9: 0x15a3, 0xcba: 0x15bf, 0xcbb: 0x102b, + 0xcbc: 0x106b, 0xcbd: 0x1123, 0xcbe: 0x1243, 0xcbf: 0x147b, + // Block 0x33, offset 0xcc0 + 0xcc0: 0x15cb, 0xcc1: 0x134b, 0xcc2: 0x09c7, 0xcc3: 0x0b3b, 0xcc4: 0x10db, 0xcc5: 0x119b, + 0xcc6: 0x0eff, 0xcc7: 0x1033, 0xcc8: 0x1397, 0xcc9: 0x14e7, 0xcca: 0x09c3, 0xccb: 0x0a8f, + 0xccc: 0x0d77, 0xccd: 0x0e2b, 0xcce: 0x0e5f, 0xccf: 0x1113, 0xcd0: 0x113b, 0xcd1: 0x14a7, + 0xcd2: 0x084f, 0xcd3: 0x11a7, 0xcd4: 0x07f3, 0xcd5: 0x07ef, 0xcd6: 0x1097, 0xcd7: 0x1127, + 0xcd8: 0x125b, 0xcd9: 0x14af, 0xcda: 0x1367, 0xcdb: 0x0c27, 0xcdc: 0x0d73, 0xcdd: 0x1357, + 0xcde: 0x06f7, 0xcdf: 0x0a63, 0xce0: 0x0b93, 0xce1: 0x0f2f, 0xce2: 0x0faf, 0xce3: 0x0873, + 0xce4: 0x103b, 0xce5: 0x075f, 0xce6: 0x0b77, 0xce7: 0x06d7, 0xce8: 0x0deb, 0xce9: 0x0ca3, + 0xcea: 0x110f, 0xceb: 0x08c7, 0xcec: 0x09b3, 0xced: 0x0ffb, 0xcee: 0x1263, 0xcef: 0x133b, + 0xcf0: 0x0db7, 0xcf1: 0x13f7, 0xcf2: 0x0de3, 0xcf3: 0x0c37, 0xcf4: 0x121b, 0xcf5: 0x0c57, + 0xcf6: 0x0fab, 0xcf7: 0x072b, 0xcf8: 0x07a7, 0xcf9: 0x07eb, 0xcfa: 0x0d53, 0xcfb: 0x10fb, + 0xcfc: 0x11f3, 0xcfd: 0x1347, 0xcfe: 0x145b, 0xcff: 0x085b, + // Block 0x34, offset 0xd00 + 0xd00: 0x090f, 0xd01: 0x0a17, 0xd02: 0x0b2f, 0xd03: 0x0cbf, 0xd04: 0x0e7b, 0xd05: 0x103f, + 0xd06: 0x1497, 0xd07: 0x157b, 0xd08: 0x15cf, 0xd09: 0x15e7, 0xd0a: 0x0837, 0xd0b: 0x0cf3, + 0xd0c: 0x0da3, 0xd0d: 0x13eb, 0xd0e: 0x0afb, 0xd0f: 0x0bd7, 0xd10: 0x0bf3, 0xd11: 0x0c83, + 0xd12: 0x0e6b, 0xd13: 0x0eb7, 0xd14: 0x0f67, 0xd15: 0x108b, 0xd16: 0x112f, 0xd17: 0x1193, + 0xd18: 0x13db, 0xd19: 0x126b, 0xd1a: 0x1403, 0xd1b: 0x147f, 0xd1c: 0x080f, 0xd1d: 0x083b, + 0xd1e: 0x0923, 0xd1f: 0x0ea7, 0xd20: 0x12f3, 0xd21: 0x133b, 0xd22: 0x0b1b, 0xd23: 0x0b8b, + 0xd24: 0x0c4f, 0xd25: 0x0daf, 0xd26: 0x10d7, 0xd27: 0x0f23, 0xd28: 0x073b, 0xd29: 0x097f, + 0xd2a: 0x0a63, 0xd2b: 0x0ac7, 0xd2c: 0x0b97, 0xd2d: 0x0f3f, 0xd2e: 0x0f5b, 0xd2f: 0x116b, + 0xd30: 0x118b, 0xd31: 0x1463, 0xd32: 0x14e3, 0xd33: 0x14f3, 0xd34: 0x152f, 0xd35: 0x0753, + 0xd36: 0x107f, 0xd37: 0x144f, 0xd38: 0x14cb, 0xd39: 0x0baf, 0xd3a: 0x0717, 0xd3b: 0x0777, + 0xd3c: 0x0a67, 0xd3d: 0x0a87, 0xd3e: 0x0caf, 0xd3f: 0x0d73, + // Block 0x35, offset 0xd40 + 0xd40: 0x0ec3, 0xd41: 0x0fcb, 0xd42: 0x1277, 0xd43: 0x1417, 0xd44: 0x1623, 0xd45: 0x0ce3, + 0xd46: 0x14a3, 0xd47: 0x0833, 0xd48: 0x0d2f, 0xd49: 0x0d3b, 0xd4a: 0x0e0f, 0xd4b: 0x0e47, + 0xd4c: 0x0f4b, 0xd4d: 0x0fa7, 0xd4e: 0x1027, 0xd4f: 0x110b, 0xd50: 0x153b, 0xd51: 0x07af, + 0xd52: 0x0c03, 0xd53: 0x14b3, 0xd54: 0x0767, 0xd55: 0x0aab, 0xd56: 0x0e2f, 0xd57: 0x13df, + 0xd58: 0x0b67, 0xd59: 0x0bb7, 0xd5a: 0x0d43, 0xd5b: 0x0f2f, 0xd5c: 0x14bb, 0xd5d: 0x0817, + 0xd5e: 0x08ff, 0xd5f: 0x0a97, 0xd60: 0x0cd3, 0xd61: 0x0d1f, 0xd62: 0x0d5f, 0xd63: 0x0df3, + 0xd64: 0x0f47, 0xd65: 0x0fbb, 0xd66: 0x1157, 0xd67: 0x12f7, 0xd68: 0x1303, 0xd69: 0x1457, + 0xd6a: 0x14d7, 0xd6b: 0x0883, 0xd6c: 0x0e4b, 0xd6d: 0x0903, 0xd6e: 0x0ec7, 0xd6f: 0x0f6b, + 0xd70: 0x1287, 0xd71: 0x14bf, 0xd72: 0x15ab, 0xd73: 0x15d3, 0xd74: 0x0d37, 0xd75: 0x0e27, + 0xd76: 0x11c3, 0xd77: 0x10b7, 0xd78: 0x10c3, 0xd79: 0x10e7, 0xd7a: 0x0f17, 0xd7b: 0x0e9f, + 0xd7c: 0x1363, 0xd7d: 0x0733, 0xd7e: 0x122b, 0xd7f: 0x081b, + // Block 0x36, offset 0xd80 + 0xd80: 0x080b, 0xd81: 0x0b0b, 0xd82: 0x0c2b, 0xd83: 0x10f3, 0xd84: 0x0a53, 0xd85: 0x0e03, + 0xd86: 0x0cef, 0xd87: 0x13e7, 0xd88: 0x12e7, 0xd89: 0x14ab, 0xd8a: 0x1323, 0xd8b: 0x0b27, + 0xd8c: 0x0787, 0xd8d: 0x095b, 0xd90: 0x09af, + 0xd92: 0x0cdf, 0xd95: 0x07f7, 0xd96: 0x0f1f, 0xd97: 0x0fe3, + 0xd98: 0x1047, 0xd99: 0x1063, 0xd9a: 0x1067, 0xd9b: 0x107b, 0xd9c: 0x14fb, 0xd9d: 0x10eb, + 0xd9e: 0x116f, 0xda0: 0x128f, 0xda2: 0x1353, + 0xda5: 0x1407, 0xda6: 0x1433, + 0xdaa: 0x154f, 0xdab: 0x1553, 0xdac: 0x1557, 0xdad: 0x15bb, 0xdae: 0x142b, 0xdaf: 0x14c7, + 0xdb0: 0x0757, 0xdb1: 0x077b, 0xdb2: 0x078f, 0xdb3: 0x084b, 0xdb4: 0x0857, 0xdb5: 0x0897, + 0xdb6: 0x094b, 0xdb7: 0x0967, 0xdb8: 0x096f, 0xdb9: 0x09ab, 0xdba: 0x09b7, 0xdbb: 0x0a93, + 0xdbc: 0x0a9b, 0xdbd: 0x0ba3, 0xdbe: 0x0bcb, 0xdbf: 0x0bd3, + // Block 0x37, offset 0xdc0 + 0xdc0: 0x0beb, 0xdc1: 0x0c97, 0xdc2: 0x0cc7, 0xdc3: 0x0ce7, 0xdc4: 0x0d57, 0xdc5: 0x0e1b, + 0xdc6: 0x0e37, 0xdc7: 0x0e67, 0xdc8: 0x0ebb, 0xdc9: 0x0edb, 0xdca: 0x0f4f, 0xdcb: 0x102f, + 0xdcc: 0x104b, 0xdcd: 0x1053, 0xdce: 0x104f, 0xdcf: 0x1057, 0xdd0: 0x105b, 0xdd1: 0x105f, + 0xdd2: 0x1073, 0xdd3: 0x1077, 0xdd4: 0x109b, 0xdd5: 0x10af, 0xdd6: 0x10cb, 0xdd7: 0x112f, + 0xdd8: 0x1137, 0xdd9: 0x113f, 0xdda: 0x1153, 0xddb: 0x117b, 0xddc: 0x11cb, 0xddd: 0x11ff, + 0xdde: 0x11ff, 0xddf: 0x1267, 0xde0: 0x130f, 0xde1: 0x1327, 0xde2: 0x135b, 0xde3: 0x135f, + 0xde4: 0x13a3, 0xde5: 0x13a7, 0xde6: 0x13ff, 0xde7: 0x1407, 0xde8: 0x14db, 0xde9: 0x151f, + 0xdea: 0x1537, 0xdeb: 0x0b9b, 0xdec: 0x171e, 0xded: 0x11e3, + 0xdf0: 0x06df, 0xdf1: 0x07e3, 0xdf2: 0x07a3, 0xdf3: 0x074b, 0xdf4: 0x078b, 0xdf5: 0x07b7, + 0xdf6: 0x0847, 0xdf7: 0x0863, 0xdf8: 0x094b, 0xdf9: 0x0937, 0xdfa: 0x0947, 0xdfb: 0x0963, + 0xdfc: 0x09af, 0xdfd: 0x09bf, 0xdfe: 0x0a03, 0xdff: 0x0a0f, + // Block 0x38, offset 0xe00 + 0xe00: 0x0a2b, 0xe01: 0x0a3b, 0xe02: 0x0b23, 0xe03: 0x0b2b, 0xe04: 0x0b5b, 0xe05: 0x0b7b, + 0xe06: 0x0bab, 0xe07: 0x0bc3, 0xe08: 0x0bb3, 0xe09: 0x0bd3, 0xe0a: 0x0bc7, 0xe0b: 0x0beb, + 0xe0c: 0x0c07, 0xe0d: 0x0c5f, 0xe0e: 0x0c6b, 0xe0f: 0x0c73, 0xe10: 0x0c9b, 0xe11: 0x0cdf, + 0xe12: 0x0d0f, 0xe13: 0x0d13, 0xe14: 0x0d27, 0xe15: 0x0da7, 0xe16: 0x0db7, 0xe17: 0x0e0f, + 0xe18: 0x0e5b, 0xe19: 0x0e53, 0xe1a: 0x0e67, 0xe1b: 0x0e83, 0xe1c: 0x0ebb, 0xe1d: 0x1013, + 0xe1e: 0x0edf, 0xe1f: 0x0f13, 0xe20: 0x0f1f, 0xe21: 0x0f5f, 0xe22: 0x0f7b, 0xe23: 0x0f9f, + 0xe24: 0x0fc3, 0xe25: 0x0fc7, 0xe26: 0x0fe3, 0xe27: 0x0fe7, 0xe28: 0x0ff7, 0xe29: 0x100b, + 0xe2a: 0x1007, 0xe2b: 0x1037, 0xe2c: 0x10b3, 0xe2d: 0x10cb, 0xe2e: 0x10e3, 0xe2f: 0x111b, + 0xe30: 0x112f, 0xe31: 0x114b, 0xe32: 0x117b, 0xe33: 0x122f, 0xe34: 0x1257, 0xe35: 0x12cb, + 0xe36: 0x1313, 0xe37: 0x131f, 0xe38: 0x1327, 0xe39: 0x133f, 0xe3a: 0x1353, 0xe3b: 0x1343, + 0xe3c: 0x135b, 0xe3d: 0x1357, 0xe3e: 0x134f, 0xe3f: 0x135f, + // Block 0x39, offset 0xe40 + 0xe40: 0x136b, 0xe41: 0x13a7, 0xe42: 0x13e3, 0xe43: 0x1413, 0xe44: 0x144b, 0xe45: 0x146b, + 0xe46: 0x14b7, 0xe47: 0x14db, 0xe48: 0x14fb, 0xe49: 0x150f, 0xe4a: 0x151f, 0xe4b: 0x152b, + 0xe4c: 0x1537, 0xe4d: 0x158b, 0xe4e: 0x162b, 0xe4f: 0x16b5, 0xe50: 0x16b0, 0xe51: 0x16e2, + 0xe52: 0x0607, 0xe53: 0x062f, 0xe54: 0x0633, 0xe55: 0x1764, 0xe56: 0x1791, 0xe57: 0x1809, + 0xe58: 0x1617, 0xe59: 0x1627, + // Block 0x3a, offset 0xe80 + 0xe80: 0x19d5, 0xe81: 0x19d8, 0xe82: 0x19db, 0xe83: 0x1c08, 0xe84: 0x1c0c, 0xe85: 0x1a5f, + 0xe86: 0x1a5f, + 0xe93: 0x1d75, 0xe94: 0x1d66, 0xe95: 0x1d6b, 0xe96: 0x1d7a, 0xe97: 0x1d70, + 0xe9d: 0x4390, + 0xe9e: 0x8115, 0xe9f: 0x4402, 0xea0: 0x022d, 0xea1: 0x0215, 0xea2: 0x021e, 0xea3: 0x0221, + 0xea4: 0x0224, 0xea5: 0x0227, 0xea6: 0x022a, 0xea7: 0x0230, 0xea8: 0x0233, 0xea9: 0x0017, + 0xeaa: 0x43f0, 0xeab: 0x43f6, 0xeac: 0x44f4, 0xead: 0x44fc, 0xeae: 0x4348, 0xeaf: 0x434e, + 0xeb0: 0x4354, 0xeb1: 0x435a, 0xeb2: 0x4366, 0xeb3: 0x436c, 0xeb4: 0x4372, 0xeb5: 0x437e, + 0xeb6: 0x4384, 0xeb8: 0x438a, 0xeb9: 0x4396, 0xeba: 0x439c, 0xebb: 0x43a2, + 0xebc: 0x43ae, 0xebe: 0x43b4, + // Block 0x3b, offset 0xec0 + 0xec0: 0x43ba, 0xec1: 0x43c0, 0xec3: 0x43c6, 0xec4: 0x43cc, + 0xec6: 0x43d8, 0xec7: 0x43de, 0xec8: 0x43e4, 0xec9: 0x43ea, 0xeca: 0x43fc, 0xecb: 0x4378, + 0xecc: 0x4360, 0xecd: 0x43a8, 0xece: 0x43d2, 0xecf: 0x1d7f, 0xed0: 0x0299, 0xed1: 0x0299, + 0xed2: 0x02a2, 0xed3: 0x02a2, 0xed4: 0x02a2, 0xed5: 0x02a2, 0xed6: 0x02a5, 0xed7: 0x02a5, + 0xed8: 0x02a5, 0xed9: 0x02a5, 0xeda: 0x02ab, 0xedb: 0x02ab, 0xedc: 0x02ab, 0xedd: 0x02ab, + 0xede: 0x029f, 0xedf: 0x029f, 0xee0: 0x029f, 0xee1: 0x029f, 0xee2: 0x02a8, 0xee3: 0x02a8, + 0xee4: 0x02a8, 0xee5: 0x02a8, 0xee6: 0x029c, 0xee7: 0x029c, 0xee8: 0x029c, 0xee9: 0x029c, + 0xeea: 0x02cf, 0xeeb: 0x02cf, 0xeec: 0x02cf, 0xeed: 0x02cf, 0xeee: 0x02d2, 0xeef: 0x02d2, + 0xef0: 0x02d2, 0xef1: 0x02d2, 0xef2: 0x02b1, 0xef3: 0x02b1, 0xef4: 0x02b1, 0xef5: 0x02b1, + 0xef6: 0x02ae, 0xef7: 0x02ae, 0xef8: 0x02ae, 0xef9: 0x02ae, 0xefa: 0x02b4, 0xefb: 0x02b4, + 0xefc: 0x02b4, 0xefd: 0x02b4, 0xefe: 0x02b7, 0xeff: 0x02b7, + // Block 0x3c, offset 0xf00 + 0xf00: 0x02b7, 0xf01: 0x02b7, 0xf02: 0x02c0, 0xf03: 0x02c0, 0xf04: 0x02bd, 0xf05: 0x02bd, + 0xf06: 0x02c3, 0xf07: 0x02c3, 0xf08: 0x02ba, 0xf09: 0x02ba, 0xf0a: 0x02c9, 0xf0b: 0x02c9, + 0xf0c: 0x02c6, 0xf0d: 0x02c6, 0xf0e: 0x02d5, 0xf0f: 0x02d5, 0xf10: 0x02d5, 0xf11: 0x02d5, + 0xf12: 0x02db, 0xf13: 0x02db, 0xf14: 0x02db, 0xf15: 0x02db, 0xf16: 0x02e1, 0xf17: 0x02e1, + 0xf18: 0x02e1, 0xf19: 0x02e1, 0xf1a: 0x02de, 0xf1b: 0x02de, 0xf1c: 0x02de, 0xf1d: 0x02de, + 0xf1e: 0x02e4, 0xf1f: 0x02e4, 0xf20: 0x02e7, 0xf21: 0x02e7, 0xf22: 0x02e7, 0xf23: 0x02e7, + 0xf24: 0x446e, 0xf25: 0x446e, 0xf26: 0x02ed, 0xf27: 0x02ed, 0xf28: 0x02ed, 0xf29: 0x02ed, + 0xf2a: 0x02ea, 0xf2b: 0x02ea, 0xf2c: 0x02ea, 0xf2d: 0x02ea, 0xf2e: 0x0308, 0xf2f: 0x0308, + 0xf30: 0x4468, 0xf31: 0x4468, + // Block 0x3d, offset 0xf40 + 0xf53: 0x02d8, 0xf54: 0x02d8, 0xf55: 0x02d8, 0xf56: 0x02d8, 0xf57: 0x02f6, + 0xf58: 0x02f6, 0xf59: 0x02f3, 0xf5a: 0x02f3, 0xf5b: 0x02f9, 0xf5c: 0x02f9, 0xf5d: 0x204f, + 0xf5e: 0x02ff, 0xf5f: 0x02ff, 0xf60: 0x02f0, 0xf61: 0x02f0, 0xf62: 0x02fc, 0xf63: 0x02fc, + 0xf64: 0x0305, 0xf65: 0x0305, 0xf66: 0x0305, 0xf67: 0x0305, 0xf68: 0x028d, 0xf69: 0x028d, + 0xf6a: 0x25aa, 0xf6b: 0x25aa, 0xf6c: 0x261a, 0xf6d: 0x261a, 0xf6e: 0x25e9, 0xf6f: 0x25e9, + 0xf70: 0x2605, 0xf71: 0x2605, 0xf72: 0x25fe, 0xf73: 0x25fe, 0xf74: 0x260c, 0xf75: 0x260c, + 0xf76: 0x2613, 0xf77: 0x2613, 0xf78: 0x2613, 0xf79: 0x25f0, 0xf7a: 0x25f0, 0xf7b: 0x25f0, + 0xf7c: 0x0302, 0xf7d: 0x0302, 0xf7e: 0x0302, 0xf7f: 0x0302, + // Block 0x3e, offset 0xf80 + 0xf80: 0x25b1, 0xf81: 0x25b8, 0xf82: 0x25d4, 0xf83: 0x25f0, 0xf84: 0x25f7, 0xf85: 0x1d89, + 0xf86: 0x1d8e, 0xf87: 0x1d93, 0xf88: 0x1da2, 0xf89: 0x1db1, 0xf8a: 0x1db6, 0xf8b: 0x1dbb, + 0xf8c: 0x1dc0, 0xf8d: 0x1dc5, 0xf8e: 0x1dd4, 0xf8f: 0x1de3, 0xf90: 0x1de8, 0xf91: 0x1ded, + 0xf92: 0x1dfc, 0xf93: 0x1e0b, 0xf94: 0x1e10, 0xf95: 0x1e15, 0xf96: 0x1e1a, 0xf97: 0x1e29, + 0xf98: 0x1e2e, 0xf99: 0x1e3d, 0xf9a: 0x1e42, 0xf9b: 0x1e47, 0xf9c: 0x1e56, 0xf9d: 0x1e5b, + 0xf9e: 0x1e60, 0xf9f: 0x1e6a, 0xfa0: 0x1ea6, 0xfa1: 0x1eb5, 0xfa2: 0x1ec4, 0xfa3: 0x1ec9, + 0xfa4: 0x1ece, 0xfa5: 0x1ed8, 0xfa6: 0x1ee7, 0xfa7: 0x1eec, 0xfa8: 0x1efb, 0xfa9: 0x1f00, + 0xfaa: 0x1f05, 0xfab: 0x1f14, 0xfac: 0x1f19, 0xfad: 0x1f28, 0xfae: 0x1f2d, 0xfaf: 0x1f32, + 0xfb0: 0x1f37, 0xfb1: 0x1f3c, 0xfb2: 0x1f41, 0xfb3: 0x1f46, 0xfb4: 0x1f4b, 0xfb5: 0x1f50, + 0xfb6: 0x1f55, 0xfb7: 0x1f5a, 0xfb8: 0x1f5f, 0xfb9: 0x1f64, 0xfba: 0x1f69, 0xfbb: 0x1f6e, + 0xfbc: 0x1f73, 0xfbd: 0x1f78, 0xfbe: 0x1f7d, 0xfbf: 0x1f87, + // Block 0x3f, offset 0xfc0 + 0xfc0: 0x1f8c, 0xfc1: 0x1f91, 0xfc2: 0x1f96, 0xfc3: 0x1fa0, 0xfc4: 0x1fa5, 0xfc5: 0x1faf, + 0xfc6: 0x1fb4, 0xfc7: 0x1fb9, 0xfc8: 0x1fbe, 0xfc9: 0x1fc3, 0xfca: 0x1fc8, 0xfcb: 0x1fcd, + 0xfcc: 0x1fd2, 0xfcd: 0x1fd7, 0xfce: 0x1fe6, 0xfcf: 0x1ff5, 0xfd0: 0x1ffa, 0xfd1: 0x1fff, + 0xfd2: 0x2004, 0xfd3: 0x2009, 0xfd4: 0x200e, 0xfd5: 0x2018, 0xfd6: 0x201d, 0xfd7: 0x2022, + 0xfd8: 0x2031, 0xfd9: 0x2040, 0xfda: 0x2045, 0xfdb: 0x4420, 0xfdc: 0x4426, 0xfdd: 0x445c, + 0xfde: 0x44b3, 0xfdf: 0x44ba, 0xfe0: 0x44c1, 0xfe1: 0x44c8, 0xfe2: 0x44cf, 0xfe3: 0x44d6, + 0xfe4: 0x25c6, 0xfe5: 0x25cd, 0xfe6: 0x25d4, 0xfe7: 0x25db, 0xfe8: 0x25f0, 0xfe9: 0x25f7, + 0xfea: 0x1d98, 0xfeb: 0x1d9d, 0xfec: 0x1da2, 0xfed: 0x1da7, 0xfee: 0x1db1, 0xfef: 0x1db6, + 0xff0: 0x1dca, 0xff1: 0x1dcf, 0xff2: 0x1dd4, 0xff3: 0x1dd9, 0xff4: 0x1de3, 0xff5: 0x1de8, + 0xff6: 0x1df2, 0xff7: 0x1df7, 0xff8: 0x1dfc, 0xff9: 0x1e01, 0xffa: 0x1e0b, 0xffb: 0x1e10, + 0xffc: 0x1f3c, 0xffd: 0x1f41, 0xffe: 0x1f50, 0xfff: 0x1f55, + // Block 0x40, offset 0x1000 + 0x1000: 0x1f5a, 0x1001: 0x1f6e, 0x1002: 0x1f73, 0x1003: 0x1f78, 0x1004: 0x1f7d, 0x1005: 0x1f96, + 0x1006: 0x1fa0, 0x1007: 0x1fa5, 0x1008: 0x1faa, 0x1009: 0x1fbe, 0x100a: 0x1fdc, 0x100b: 0x1fe1, + 0x100c: 0x1fe6, 0x100d: 0x1feb, 0x100e: 0x1ff5, 0x100f: 0x1ffa, 0x1010: 0x445c, 0x1011: 0x2027, + 0x1012: 0x202c, 0x1013: 0x2031, 0x1014: 0x2036, 0x1015: 0x2040, 0x1016: 0x2045, 0x1017: 0x25b1, + 0x1018: 0x25b8, 0x1019: 0x25bf, 0x101a: 0x25d4, 0x101b: 0x25e2, 0x101c: 0x1d89, 0x101d: 0x1d8e, + 0x101e: 0x1d93, 0x101f: 0x1da2, 0x1020: 0x1dac, 0x1021: 0x1dbb, 0x1022: 0x1dc0, 0x1023: 0x1dc5, + 0x1024: 0x1dd4, 0x1025: 0x1dde, 0x1026: 0x1dfc, 0x1027: 0x1e15, 0x1028: 0x1e1a, 0x1029: 0x1e29, + 0x102a: 0x1e2e, 0x102b: 0x1e3d, 0x102c: 0x1e47, 0x102d: 0x1e56, 0x102e: 0x1e5b, 0x102f: 0x1e60, + 0x1030: 0x1e6a, 0x1031: 0x1ea6, 0x1032: 0x1eab, 0x1033: 0x1eb5, 0x1034: 0x1ec4, 0x1035: 0x1ec9, + 0x1036: 0x1ece, 0x1037: 0x1ed8, 0x1038: 0x1ee7, 0x1039: 0x1efb, 0x103a: 0x1f00, 0x103b: 0x1f05, + 0x103c: 0x1f14, 0x103d: 0x1f19, 0x103e: 0x1f28, 0x103f: 0x1f2d, + // Block 0x41, offset 0x1040 + 0x1040: 0x1f32, 0x1041: 0x1f37, 0x1042: 0x1f46, 0x1043: 0x1f4b, 0x1044: 0x1f5f, 0x1045: 0x1f64, + 0x1046: 0x1f69, 0x1047: 0x1f6e, 0x1048: 0x1f73, 0x1049: 0x1f87, 0x104a: 0x1f8c, 0x104b: 0x1f91, + 0x104c: 0x1f96, 0x104d: 0x1f9b, 0x104e: 0x1faf, 0x104f: 0x1fb4, 0x1050: 0x1fb9, 0x1051: 0x1fbe, + 0x1052: 0x1fcd, 0x1053: 0x1fd2, 0x1054: 0x1fd7, 0x1055: 0x1fe6, 0x1056: 0x1ff0, 0x1057: 0x1fff, + 0x1058: 0x2004, 0x1059: 0x4450, 0x105a: 0x2018, 0x105b: 0x201d, 0x105c: 0x2022, 0x105d: 0x2031, + 0x105e: 0x203b, 0x105f: 0x25d4, 0x1060: 0x25e2, 0x1061: 0x1da2, 0x1062: 0x1dac, 0x1063: 0x1dd4, + 0x1064: 0x1dde, 0x1065: 0x1dfc, 0x1066: 0x1e06, 0x1067: 0x1e6a, 0x1068: 0x1e6f, 0x1069: 0x1e92, + 0x106a: 0x1e97, 0x106b: 0x1f6e, 0x106c: 0x1f73, 0x106d: 0x1f96, 0x106e: 0x1fe6, 0x106f: 0x1ff0, + 0x1070: 0x2031, 0x1071: 0x203b, 0x1072: 0x4504, 0x1073: 0x450c, 0x1074: 0x4514, 0x1075: 0x1ef1, + 0x1076: 0x1ef6, 0x1077: 0x1f0a, 0x1078: 0x1f0f, 0x1079: 0x1f1e, 0x107a: 0x1f23, 0x107b: 0x1e74, + 0x107c: 0x1e79, 0x107d: 0x1e9c, 0x107e: 0x1ea1, 0x107f: 0x1e33, + // Block 0x42, offset 0x1080 + 0x1080: 0x1e38, 0x1081: 0x1e1f, 0x1082: 0x1e24, 0x1083: 0x1e4c, 0x1084: 0x1e51, 0x1085: 0x1eba, + 0x1086: 0x1ebf, 0x1087: 0x1edd, 0x1088: 0x1ee2, 0x1089: 0x1e7e, 0x108a: 0x1e83, 0x108b: 0x1e88, + 0x108c: 0x1e92, 0x108d: 0x1e8d, 0x108e: 0x1e65, 0x108f: 0x1eb0, 0x1090: 0x1ed3, 0x1091: 0x1ef1, + 0x1092: 0x1ef6, 0x1093: 0x1f0a, 0x1094: 0x1f0f, 0x1095: 0x1f1e, 0x1096: 0x1f23, 0x1097: 0x1e74, + 0x1098: 0x1e79, 0x1099: 0x1e9c, 0x109a: 0x1ea1, 0x109b: 0x1e33, 0x109c: 0x1e38, 0x109d: 0x1e1f, + 0x109e: 0x1e24, 0x109f: 0x1e4c, 0x10a0: 0x1e51, 0x10a1: 0x1eba, 0x10a2: 0x1ebf, 0x10a3: 0x1edd, + 0x10a4: 0x1ee2, 0x10a5: 0x1e7e, 0x10a6: 0x1e83, 0x10a7: 0x1e88, 0x10a8: 0x1e92, 0x10a9: 0x1e8d, + 0x10aa: 0x1e65, 0x10ab: 0x1eb0, 0x10ac: 0x1ed3, 0x10ad: 0x1e7e, 0x10ae: 0x1e83, 0x10af: 0x1e88, + 0x10b0: 0x1e92, 0x10b1: 0x1e6f, 0x10b2: 0x1e97, 0x10b3: 0x1eec, 0x10b4: 0x1e56, 0x10b5: 0x1e5b, + 0x10b6: 0x1e60, 0x10b7: 0x1e7e, 0x10b8: 0x1e83, 0x10b9: 0x1e88, 0x10ba: 0x1eec, 0x10bb: 0x1efb, + 0x10bc: 0x4408, 0x10bd: 0x4408, + // Block 0x43, offset 0x10c0 + 0x10d0: 0x2311, 0x10d1: 0x2326, + 0x10d2: 0x2326, 0x10d3: 0x232d, 0x10d4: 0x2334, 0x10d5: 0x2349, 0x10d6: 0x2350, 0x10d7: 0x2357, + 0x10d8: 0x237a, 0x10d9: 0x237a, 0x10da: 0x239d, 0x10db: 0x2396, 0x10dc: 0x23b2, 0x10dd: 0x23a4, + 0x10de: 0x23ab, 0x10df: 0x23ce, 0x10e0: 0x23ce, 0x10e1: 0x23c7, 0x10e2: 0x23d5, 0x10e3: 0x23d5, + 0x10e4: 0x23ff, 0x10e5: 0x23ff, 0x10e6: 0x241b, 0x10e7: 0x23e3, 0x10e8: 0x23e3, 0x10e9: 0x23dc, + 0x10ea: 0x23f1, 0x10eb: 0x23f1, 0x10ec: 0x23f8, 0x10ed: 0x23f8, 0x10ee: 0x2422, 0x10ef: 0x2430, + 0x10f0: 0x2430, 0x10f1: 0x2437, 0x10f2: 0x2437, 0x10f3: 0x243e, 0x10f4: 0x2445, 0x10f5: 0x244c, + 0x10f6: 0x2453, 0x10f7: 0x2453, 0x10f8: 0x245a, 0x10f9: 0x2468, 0x10fa: 0x2476, 0x10fb: 0x246f, + 0x10fc: 0x247d, 0x10fd: 0x247d, 0x10fe: 0x2492, 0x10ff: 0x2499, + // Block 0x44, offset 0x1100 + 0x1100: 0x24ca, 0x1101: 0x24d8, 0x1102: 0x24d1, 0x1103: 0x24b5, 0x1104: 0x24b5, 0x1105: 0x24df, + 0x1106: 0x24df, 0x1107: 0x24e6, 0x1108: 0x24e6, 0x1109: 0x2510, 0x110a: 0x2517, 0x110b: 0x251e, + 0x110c: 0x24f4, 0x110d: 0x2502, 0x110e: 0x2525, 0x110f: 0x252c, + 0x1112: 0x24fb, 0x1113: 0x2580, 0x1114: 0x2587, 0x1115: 0x255d, 0x1116: 0x2564, 0x1117: 0x2548, + 0x1118: 0x2548, 0x1119: 0x254f, 0x111a: 0x2579, 0x111b: 0x2572, 0x111c: 0x259c, 0x111d: 0x259c, + 0x111e: 0x230a, 0x111f: 0x231f, 0x1120: 0x2318, 0x1121: 0x2342, 0x1122: 0x233b, 0x1123: 0x2365, + 0x1124: 0x235e, 0x1125: 0x2388, 0x1126: 0x236c, 0x1127: 0x2381, 0x1128: 0x23b9, 0x1129: 0x2406, + 0x112a: 0x23ea, 0x112b: 0x2429, 0x112c: 0x24c3, 0x112d: 0x24ed, 0x112e: 0x2595, 0x112f: 0x258e, + 0x1130: 0x25a3, 0x1131: 0x253a, 0x1132: 0x24a0, 0x1133: 0x256b, 0x1134: 0x2492, 0x1135: 0x24ca, + 0x1136: 0x2461, 0x1137: 0x24ae, 0x1138: 0x2541, 0x1139: 0x2533, 0x113a: 0x24bc, 0x113b: 0x24a7, + 0x113c: 0x24bc, 0x113d: 0x2541, 0x113e: 0x2373, 0x113f: 0x238f, + // Block 0x45, offset 0x1140 + 0x1140: 0x2509, 0x1141: 0x2484, 0x1142: 0x2303, 0x1143: 0x24a7, 0x1144: 0x244c, 0x1145: 0x241b, + 0x1146: 0x23c0, 0x1147: 0x2556, + 0x1170: 0x2414, 0x1171: 0x248b, 0x1172: 0x27bf, 0x1173: 0x27b6, 0x1174: 0x27ec, 0x1175: 0x27da, + 0x1176: 0x27c8, 0x1177: 0x27e3, 0x1178: 0x27f5, 0x1179: 0x240d, 0x117a: 0x2c7c, 0x117b: 0x2afc, + 0x117c: 0x27d1, + // Block 0x46, offset 0x1180 + 0x1190: 0x0019, 0x1191: 0x0483, + 0x1192: 0x0487, 0x1193: 0x0035, 0x1194: 0x0037, 0x1195: 0x0003, 0x1196: 0x003f, 0x1197: 0x04bf, + 0x1198: 0x04c3, 0x1199: 0x1b5c, + 0x11a0: 0x8132, 0x11a1: 0x8132, 0x11a2: 0x8132, 0x11a3: 0x8132, + 0x11a4: 0x8132, 0x11a5: 0x8132, 0x11a6: 0x8132, 0x11a7: 0x812d, 0x11a8: 0x812d, 0x11a9: 0x812d, + 0x11aa: 0x812d, 0x11ab: 0x812d, 0x11ac: 0x812d, 0x11ad: 0x812d, 0x11ae: 0x8132, 0x11af: 0x8132, + 0x11b0: 0x1873, 0x11b1: 0x0443, 0x11b2: 0x043f, 0x11b3: 0x007f, 0x11b4: 0x007f, 0x11b5: 0x0011, + 0x11b6: 0x0013, 0x11b7: 0x00b7, 0x11b8: 0x00bb, 0x11b9: 0x04b7, 0x11ba: 0x04bb, 0x11bb: 0x04ab, + 0x11bc: 0x04af, 0x11bd: 0x0493, 0x11be: 0x0497, 0x11bf: 0x048b, + // Block 0x47, offset 0x11c0 + 0x11c0: 0x048f, 0x11c1: 0x049b, 0x11c2: 0x049f, 0x11c3: 0x04a3, 0x11c4: 0x04a7, + 0x11c7: 0x0077, 0x11c8: 0x007b, 0x11c9: 0x4269, 0x11ca: 0x4269, 0x11cb: 0x4269, + 0x11cc: 0x4269, 0x11cd: 0x007f, 0x11ce: 0x007f, 0x11cf: 0x007f, 0x11d0: 0x0019, 0x11d1: 0x0483, + 0x11d2: 0x001d, 0x11d4: 0x0037, 0x11d5: 0x0035, 0x11d6: 0x003f, 0x11d7: 0x0003, + 0x11d8: 0x0443, 0x11d9: 0x0011, 0x11da: 0x0013, 0x11db: 0x00b7, 0x11dc: 0x00bb, 0x11dd: 0x04b7, + 0x11de: 0x04bb, 0x11df: 0x0007, 0x11e0: 0x000d, 0x11e1: 0x0015, 0x11e2: 0x0017, 0x11e3: 0x001b, + 0x11e4: 0x0039, 0x11e5: 0x003d, 0x11e6: 0x003b, 0x11e8: 0x0079, 0x11e9: 0x0009, + 0x11ea: 0x000b, 0x11eb: 0x0041, + 0x11f0: 0x42aa, 0x11f1: 0x442c, 0x11f2: 0x42af, 0x11f4: 0x42b4, + 0x11f6: 0x42b9, 0x11f7: 0x4432, 0x11f8: 0x42be, 0x11f9: 0x4438, 0x11fa: 0x42c3, 0x11fb: 0x443e, + 0x11fc: 0x42c8, 0x11fd: 0x4444, 0x11fe: 0x42cd, 0x11ff: 0x444a, + // Block 0x48, offset 0x1200 + 0x1200: 0x0236, 0x1201: 0x440e, 0x1202: 0x440e, 0x1203: 0x4414, 0x1204: 0x4414, 0x1205: 0x4456, + 0x1206: 0x4456, 0x1207: 0x441a, 0x1208: 0x441a, 0x1209: 0x4462, 0x120a: 0x4462, 0x120b: 0x4462, + 0x120c: 0x4462, 0x120d: 0x0239, 0x120e: 0x0239, 0x120f: 0x023c, 0x1210: 0x023c, 0x1211: 0x023c, + 0x1212: 0x023c, 0x1213: 0x023f, 0x1214: 0x023f, 0x1215: 0x0242, 0x1216: 0x0242, 0x1217: 0x0242, + 0x1218: 0x0242, 0x1219: 0x0245, 0x121a: 0x0245, 0x121b: 0x0245, 0x121c: 0x0245, 0x121d: 0x0248, + 0x121e: 0x0248, 0x121f: 0x0248, 0x1220: 0x0248, 0x1221: 0x024b, 0x1222: 0x024b, 0x1223: 0x024b, + 0x1224: 0x024b, 0x1225: 0x024e, 0x1226: 0x024e, 0x1227: 0x024e, 0x1228: 0x024e, 0x1229: 0x0251, + 0x122a: 0x0251, 0x122b: 0x0254, 0x122c: 0x0254, 0x122d: 0x0257, 0x122e: 0x0257, 0x122f: 0x025a, + 0x1230: 0x025a, 0x1231: 0x025d, 0x1232: 0x025d, 0x1233: 0x025d, 0x1234: 0x025d, 0x1235: 0x0260, + 0x1236: 0x0260, 0x1237: 0x0260, 0x1238: 0x0260, 0x1239: 0x0263, 0x123a: 0x0263, 0x123b: 0x0263, + 0x123c: 0x0263, 0x123d: 0x0266, 0x123e: 0x0266, 0x123f: 0x0266, + // Block 0x49, offset 0x1240 + 0x1240: 0x0266, 0x1241: 0x0269, 0x1242: 0x0269, 0x1243: 0x0269, 0x1244: 0x0269, 0x1245: 0x026c, + 0x1246: 0x026c, 0x1247: 0x026c, 0x1248: 0x026c, 0x1249: 0x026f, 0x124a: 0x026f, 0x124b: 0x026f, + 0x124c: 0x026f, 0x124d: 0x0272, 0x124e: 0x0272, 0x124f: 0x0272, 0x1250: 0x0272, 0x1251: 0x0275, + 0x1252: 0x0275, 0x1253: 0x0275, 0x1254: 0x0275, 0x1255: 0x0278, 0x1256: 0x0278, 0x1257: 0x0278, + 0x1258: 0x0278, 0x1259: 0x027b, 0x125a: 0x027b, 0x125b: 0x027b, 0x125c: 0x027b, 0x125d: 0x027e, + 0x125e: 0x027e, 0x125f: 0x027e, 0x1260: 0x027e, 0x1261: 0x0281, 0x1262: 0x0281, 0x1263: 0x0281, + 0x1264: 0x0281, 0x1265: 0x0284, 0x1266: 0x0284, 0x1267: 0x0284, 0x1268: 0x0284, 0x1269: 0x0287, + 0x126a: 0x0287, 0x126b: 0x0287, 0x126c: 0x0287, 0x126d: 0x028a, 0x126e: 0x028a, 0x126f: 0x028d, + 0x1270: 0x028d, 0x1271: 0x0290, 0x1272: 0x0290, 0x1273: 0x0290, 0x1274: 0x0290, 0x1275: 0x2e00, + 0x1276: 0x2e00, 0x1277: 0x2e08, 0x1278: 0x2e08, 0x1279: 0x2e10, 0x127a: 0x2e10, 0x127b: 0x1f82, + 0x127c: 0x1f82, + // Block 0x4a, offset 0x1280 + 0x1280: 0x0081, 0x1281: 0x0083, 0x1282: 0x0085, 0x1283: 0x0087, 0x1284: 0x0089, 0x1285: 0x008b, + 0x1286: 0x008d, 0x1287: 0x008f, 0x1288: 0x0091, 0x1289: 0x0093, 0x128a: 0x0095, 0x128b: 0x0097, + 0x128c: 0x0099, 0x128d: 0x009b, 0x128e: 0x009d, 0x128f: 0x009f, 0x1290: 0x00a1, 0x1291: 0x00a3, + 0x1292: 0x00a5, 0x1293: 0x00a7, 0x1294: 0x00a9, 0x1295: 0x00ab, 0x1296: 0x00ad, 0x1297: 0x00af, + 0x1298: 0x00b1, 0x1299: 0x00b3, 0x129a: 0x00b5, 0x129b: 0x00b7, 0x129c: 0x00b9, 0x129d: 0x00bb, + 0x129e: 0x00bd, 0x129f: 0x0477, 0x12a0: 0x047b, 0x12a1: 0x0487, 0x12a2: 0x049b, 0x12a3: 0x049f, + 0x12a4: 0x0483, 0x12a5: 0x05ab, 0x12a6: 0x05a3, 0x12a7: 0x04c7, 0x12a8: 0x04cf, 0x12a9: 0x04d7, + 0x12aa: 0x04df, 0x12ab: 0x04e7, 0x12ac: 0x056b, 0x12ad: 0x0573, 0x12ae: 0x057b, 0x12af: 0x051f, + 0x12b0: 0x05af, 0x12b1: 0x04cb, 0x12b2: 0x04d3, 0x12b3: 0x04db, 0x12b4: 0x04e3, 0x12b5: 0x04eb, + 0x12b6: 0x04ef, 0x12b7: 0x04f3, 0x12b8: 0x04f7, 0x12b9: 0x04fb, 0x12ba: 0x04ff, 0x12bb: 0x0503, + 0x12bc: 0x0507, 0x12bd: 0x050b, 0x12be: 0x050f, 0x12bf: 0x0513, + // Block 0x4b, offset 0x12c0 + 0x12c0: 0x0517, 0x12c1: 0x051b, 0x12c2: 0x0523, 0x12c3: 0x0527, 0x12c4: 0x052b, 0x12c5: 0x052f, + 0x12c6: 0x0533, 0x12c7: 0x0537, 0x12c8: 0x053b, 0x12c9: 0x053f, 0x12ca: 0x0543, 0x12cb: 0x0547, + 0x12cc: 0x054b, 0x12cd: 0x054f, 0x12ce: 0x0553, 0x12cf: 0x0557, 0x12d0: 0x055b, 0x12d1: 0x055f, + 0x12d2: 0x0563, 0x12d3: 0x0567, 0x12d4: 0x056f, 0x12d5: 0x0577, 0x12d6: 0x057f, 0x12d7: 0x0583, + 0x12d8: 0x0587, 0x12d9: 0x058b, 0x12da: 0x058f, 0x12db: 0x0593, 0x12dc: 0x0597, 0x12dd: 0x05a7, + 0x12de: 0x4a78, 0x12df: 0x4a7e, 0x12e0: 0x03c3, 0x12e1: 0x0313, 0x12e2: 0x0317, 0x12e3: 0x4a3b, + 0x12e4: 0x031b, 0x12e5: 0x4a41, 0x12e6: 0x4a47, 0x12e7: 0x031f, 0x12e8: 0x0323, 0x12e9: 0x0327, + 0x12ea: 0x4a4d, 0x12eb: 0x4a53, 0x12ec: 0x4a59, 0x12ed: 0x4a5f, 0x12ee: 0x4a65, 0x12ef: 0x4a6b, + 0x12f0: 0x0367, 0x12f1: 0x032b, 0x12f2: 0x032f, 0x12f3: 0x0333, 0x12f4: 0x037b, 0x12f5: 0x0337, + 0x12f6: 0x033b, 0x12f7: 0x033f, 0x12f8: 0x0343, 0x12f9: 0x0347, 0x12fa: 0x034b, 0x12fb: 0x034f, + 0x12fc: 0x0353, 0x12fd: 0x0357, 0x12fe: 0x035b, + // Block 0x4c, offset 0x1300 + 0x1302: 0x49bd, 0x1303: 0x49c3, 0x1304: 0x49c9, 0x1305: 0x49cf, + 0x1306: 0x49d5, 0x1307: 0x49db, 0x130a: 0x49e1, 0x130b: 0x49e7, + 0x130c: 0x49ed, 0x130d: 0x49f3, 0x130e: 0x49f9, 0x130f: 0x49ff, + 0x1312: 0x4a05, 0x1313: 0x4a0b, 0x1314: 0x4a11, 0x1315: 0x4a17, 0x1316: 0x4a1d, 0x1317: 0x4a23, + 0x131a: 0x4a29, 0x131b: 0x4a2f, 0x131c: 0x4a35, + 0x1320: 0x00bf, 0x1321: 0x00c2, 0x1322: 0x00cb, 0x1323: 0x4264, + 0x1324: 0x00c8, 0x1325: 0x00c5, 0x1326: 0x0447, 0x1328: 0x046b, 0x1329: 0x044b, + 0x132a: 0x044f, 0x132b: 0x0453, 0x132c: 0x0457, 0x132d: 0x046f, 0x132e: 0x0473, + // Block 0x4d, offset 0x1340 + 0x1340: 0x0063, 0x1341: 0x0065, 0x1342: 0x0067, 0x1343: 0x0069, 0x1344: 0x006b, 0x1345: 0x006d, + 0x1346: 0x006f, 0x1347: 0x0071, 0x1348: 0x0073, 0x1349: 0x0075, 0x134a: 0x0083, 0x134b: 0x0085, + 0x134c: 0x0087, 0x134d: 0x0089, 0x134e: 0x008b, 0x134f: 0x008d, 0x1350: 0x008f, 0x1351: 0x0091, + 0x1352: 0x0093, 0x1353: 0x0095, 0x1354: 0x0097, 0x1355: 0x0099, 0x1356: 0x009b, 0x1357: 0x009d, + 0x1358: 0x009f, 0x1359: 0x00a1, 0x135a: 0x00a3, 0x135b: 0x00a5, 0x135c: 0x00a7, 0x135d: 0x00a9, + 0x135e: 0x00ab, 0x135f: 0x00ad, 0x1360: 0x00af, 0x1361: 0x00b1, 0x1362: 0x00b3, 0x1363: 0x00b5, + 0x1364: 0x00dd, 0x1365: 0x00f2, 0x1368: 0x0173, 0x1369: 0x0176, + 0x136a: 0x0179, 0x136b: 0x017c, 0x136c: 0x017f, 0x136d: 0x0182, 0x136e: 0x0185, 0x136f: 0x0188, + 0x1370: 0x018b, 0x1371: 0x018e, 0x1372: 0x0191, 0x1373: 0x0194, 0x1374: 0x0197, 0x1375: 0x019a, + 0x1376: 0x019d, 0x1377: 0x01a0, 0x1378: 0x01a3, 0x1379: 0x0188, 0x137a: 0x01a6, 0x137b: 0x01a9, + 0x137c: 0x01ac, 0x137d: 0x01af, 0x137e: 0x01b2, 0x137f: 0x01b5, + // Block 0x4e, offset 0x1380 + 0x1380: 0x01fd, 0x1381: 0x0200, 0x1382: 0x0203, 0x1383: 0x045b, 0x1384: 0x01c7, 0x1385: 0x01d0, + 0x1386: 0x01d6, 0x1387: 0x01fa, 0x1388: 0x01eb, 0x1389: 0x01e8, 0x138a: 0x0206, 0x138b: 0x0209, + 0x138e: 0x0021, 0x138f: 0x0023, 0x1390: 0x0025, 0x1391: 0x0027, + 0x1392: 0x0029, 0x1393: 0x002b, 0x1394: 0x002d, 0x1395: 0x002f, 0x1396: 0x0031, 0x1397: 0x0033, + 0x1398: 0x0021, 0x1399: 0x0023, 0x139a: 0x0025, 0x139b: 0x0027, 0x139c: 0x0029, 0x139d: 0x002b, + 0x139e: 0x002d, 0x139f: 0x002f, 0x13a0: 0x0031, 0x13a1: 0x0033, 0x13a2: 0x0021, 0x13a3: 0x0023, + 0x13a4: 0x0025, 0x13a5: 0x0027, 0x13a6: 0x0029, 0x13a7: 0x002b, 0x13a8: 0x002d, 0x13a9: 0x002f, + 0x13aa: 0x0031, 0x13ab: 0x0033, 0x13ac: 0x0021, 0x13ad: 0x0023, 0x13ae: 0x0025, 0x13af: 0x0027, + 0x13b0: 0x0029, 0x13b1: 0x002b, 0x13b2: 0x002d, 0x13b3: 0x002f, 0x13b4: 0x0031, 0x13b5: 0x0033, + 0x13b6: 0x0021, 0x13b7: 0x0023, 0x13b8: 0x0025, 0x13b9: 0x0027, 0x13ba: 0x0029, 0x13bb: 0x002b, + 0x13bc: 0x002d, 0x13bd: 0x002f, 0x13be: 0x0031, 0x13bf: 0x0033, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x0239, 0x13c1: 0x023c, 0x13c2: 0x0248, 0x13c3: 0x0251, 0x13c5: 0x028a, + 0x13c6: 0x025a, 0x13c7: 0x024b, 0x13c8: 0x0269, 0x13c9: 0x0290, 0x13ca: 0x027b, 0x13cb: 0x027e, + 0x13cc: 0x0281, 0x13cd: 0x0284, 0x13ce: 0x025d, 0x13cf: 0x026f, 0x13d0: 0x0275, 0x13d1: 0x0263, + 0x13d2: 0x0278, 0x13d3: 0x0257, 0x13d4: 0x0260, 0x13d5: 0x0242, 0x13d6: 0x0245, 0x13d7: 0x024e, + 0x13d8: 0x0254, 0x13d9: 0x0266, 0x13da: 0x026c, 0x13db: 0x0272, 0x13dc: 0x0293, 0x13dd: 0x02e4, + 0x13de: 0x02cc, 0x13df: 0x0296, 0x13e1: 0x023c, 0x13e2: 0x0248, + 0x13e4: 0x0287, 0x13e7: 0x024b, 0x13e9: 0x0290, + 0x13ea: 0x027b, 0x13eb: 0x027e, 0x13ec: 0x0281, 0x13ed: 0x0284, 0x13ee: 0x025d, 0x13ef: 0x026f, + 0x13f0: 0x0275, 0x13f1: 0x0263, 0x13f2: 0x0278, 0x13f4: 0x0260, 0x13f5: 0x0242, + 0x13f6: 0x0245, 0x13f7: 0x024e, 0x13f9: 0x0266, 0x13fb: 0x0272, + // Block 0x50, offset 0x1400 + 0x1402: 0x0248, + 0x1407: 0x024b, 0x1409: 0x0290, 0x140b: 0x027e, + 0x140d: 0x0284, 0x140e: 0x025d, 0x140f: 0x026f, 0x1411: 0x0263, + 0x1412: 0x0278, 0x1414: 0x0260, 0x1417: 0x024e, + 0x1419: 0x0266, 0x141b: 0x0272, 0x141d: 0x02e4, + 0x141f: 0x0296, 0x1421: 0x023c, 0x1422: 0x0248, + 0x1424: 0x0287, 0x1427: 0x024b, 0x1428: 0x0269, 0x1429: 0x0290, + 0x142a: 0x027b, 0x142c: 0x0281, 0x142d: 0x0284, 0x142e: 0x025d, 0x142f: 0x026f, + 0x1430: 0x0275, 0x1431: 0x0263, 0x1432: 0x0278, 0x1434: 0x0260, 0x1435: 0x0242, + 0x1436: 0x0245, 0x1437: 0x024e, 0x1439: 0x0266, 0x143a: 0x026c, 0x143b: 0x0272, + 0x143c: 0x0293, 0x143e: 0x02cc, + // Block 0x51, offset 0x1440 + 0x1440: 0x0239, 0x1441: 0x023c, 0x1442: 0x0248, 0x1443: 0x0251, 0x1444: 0x0287, 0x1445: 0x028a, + 0x1446: 0x025a, 0x1447: 0x024b, 0x1448: 0x0269, 0x1449: 0x0290, 0x144b: 0x027e, + 0x144c: 0x0281, 0x144d: 0x0284, 0x144e: 0x025d, 0x144f: 0x026f, 0x1450: 0x0275, 0x1451: 0x0263, + 0x1452: 0x0278, 0x1453: 0x0257, 0x1454: 0x0260, 0x1455: 0x0242, 0x1456: 0x0245, 0x1457: 0x024e, + 0x1458: 0x0254, 0x1459: 0x0266, 0x145a: 0x026c, 0x145b: 0x0272, + 0x1461: 0x023c, 0x1462: 0x0248, 0x1463: 0x0251, + 0x1465: 0x028a, 0x1466: 0x025a, 0x1467: 0x024b, 0x1468: 0x0269, 0x1469: 0x0290, + 0x146b: 0x027e, 0x146c: 0x0281, 0x146d: 0x0284, 0x146e: 0x025d, 0x146f: 0x026f, + 0x1470: 0x0275, 0x1471: 0x0263, 0x1472: 0x0278, 0x1473: 0x0257, 0x1474: 0x0260, 0x1475: 0x0242, + 0x1476: 0x0245, 0x1477: 0x024e, 0x1478: 0x0254, 0x1479: 0x0266, 0x147a: 0x026c, 0x147b: 0x0272, + // Block 0x52, offset 0x1480 + 0x1480: 0x1879, 0x1481: 0x1876, 0x1482: 0x187c, 0x1483: 0x18a0, 0x1484: 0x18c4, 0x1485: 0x18e8, + 0x1486: 0x190c, 0x1487: 0x1915, 0x1488: 0x191b, 0x1489: 0x1921, 0x148a: 0x1927, + 0x1490: 0x1a8c, 0x1491: 0x1a90, + 0x1492: 0x1a94, 0x1493: 0x1a98, 0x1494: 0x1a9c, 0x1495: 0x1aa0, 0x1496: 0x1aa4, 0x1497: 0x1aa8, + 0x1498: 0x1aac, 0x1499: 0x1ab0, 0x149a: 0x1ab4, 0x149b: 0x1ab8, 0x149c: 0x1abc, 0x149d: 0x1ac0, + 0x149e: 0x1ac4, 0x149f: 0x1ac8, 0x14a0: 0x1acc, 0x14a1: 0x1ad0, 0x14a2: 0x1ad4, 0x14a3: 0x1ad8, + 0x14a4: 0x1adc, 0x14a5: 0x1ae0, 0x14a6: 0x1ae4, 0x14a7: 0x1ae8, 0x14a8: 0x1aec, 0x14a9: 0x1af0, + 0x14aa: 0x271e, 0x14ab: 0x0047, 0x14ac: 0x0065, 0x14ad: 0x193c, 0x14ae: 0x19b1, + 0x14b0: 0x0043, 0x14b1: 0x0045, 0x14b2: 0x0047, 0x14b3: 0x0049, 0x14b4: 0x004b, 0x14b5: 0x004d, + 0x14b6: 0x004f, 0x14b7: 0x0051, 0x14b8: 0x0053, 0x14b9: 0x0055, 0x14ba: 0x0057, 0x14bb: 0x0059, + 0x14bc: 0x005b, 0x14bd: 0x005d, 0x14be: 0x005f, 0x14bf: 0x0061, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x26ad, 0x14c1: 0x26c2, 0x14c2: 0x0503, + 0x14d0: 0x0c0f, 0x14d1: 0x0a47, + 0x14d2: 0x08d3, 0x14d3: 0x45c4, 0x14d4: 0x071b, 0x14d5: 0x09ef, 0x14d6: 0x132f, 0x14d7: 0x09ff, + 0x14d8: 0x0727, 0x14d9: 0x0cd7, 0x14da: 0x0eaf, 0x14db: 0x0caf, 0x14dc: 0x0827, 0x14dd: 0x0b6b, + 0x14de: 0x07bf, 0x14df: 0x0cb7, 0x14e0: 0x0813, 0x14e1: 0x1117, 0x14e2: 0x0f83, 0x14e3: 0x138b, + 0x14e4: 0x09d3, 0x14e5: 0x090b, 0x14e6: 0x0e63, 0x14e7: 0x0c1b, 0x14e8: 0x0c47, 0x14e9: 0x06bf, + 0x14ea: 0x06cb, 0x14eb: 0x140b, 0x14ec: 0x0adb, 0x14ed: 0x06e7, 0x14ee: 0x08ef, 0x14ef: 0x0c3b, + 0x14f0: 0x13b3, 0x14f1: 0x0c13, 0x14f2: 0x106f, 0x14f3: 0x10ab, 0x14f4: 0x08f7, 0x14f5: 0x0e43, + 0x14f6: 0x0d0b, 0x14f7: 0x0d07, 0x14f8: 0x0f97, 0x14f9: 0x082b, 0x14fa: 0x0957, 0x14fb: 0x1443, + // Block 0x54, offset 0x1500 + 0x1500: 0x06fb, 0x1501: 0x06f3, 0x1502: 0x0703, 0x1503: 0x1647, 0x1504: 0x0747, 0x1505: 0x0757, + 0x1506: 0x075b, 0x1507: 0x0763, 0x1508: 0x076b, 0x1509: 0x076f, 0x150a: 0x077b, 0x150b: 0x0773, + 0x150c: 0x05b3, 0x150d: 0x165b, 0x150e: 0x078f, 0x150f: 0x0793, 0x1510: 0x0797, 0x1511: 0x07b3, + 0x1512: 0x164c, 0x1513: 0x05b7, 0x1514: 0x079f, 0x1515: 0x07bf, 0x1516: 0x1656, 0x1517: 0x07cf, + 0x1518: 0x07d7, 0x1519: 0x0737, 0x151a: 0x07df, 0x151b: 0x07e3, 0x151c: 0x1831, 0x151d: 0x07ff, + 0x151e: 0x0807, 0x151f: 0x05bf, 0x1520: 0x081f, 0x1521: 0x0823, 0x1522: 0x082b, 0x1523: 0x082f, + 0x1524: 0x05c3, 0x1525: 0x0847, 0x1526: 0x084b, 0x1527: 0x0857, 0x1528: 0x0863, 0x1529: 0x0867, + 0x152a: 0x086b, 0x152b: 0x0873, 0x152c: 0x0893, 0x152d: 0x0897, 0x152e: 0x089f, 0x152f: 0x08af, + 0x1530: 0x08b7, 0x1531: 0x08bb, 0x1532: 0x08bb, 0x1533: 0x08bb, 0x1534: 0x166a, 0x1535: 0x0e93, + 0x1536: 0x08cf, 0x1537: 0x08d7, 0x1538: 0x166f, 0x1539: 0x08e3, 0x153a: 0x08eb, 0x153b: 0x08f3, + 0x153c: 0x091b, 0x153d: 0x0907, 0x153e: 0x0913, 0x153f: 0x0917, + // Block 0x55, offset 0x1540 + 0x1540: 0x091f, 0x1541: 0x0927, 0x1542: 0x092b, 0x1543: 0x0933, 0x1544: 0x093b, 0x1545: 0x093f, + 0x1546: 0x093f, 0x1547: 0x0947, 0x1548: 0x094f, 0x1549: 0x0953, 0x154a: 0x095f, 0x154b: 0x0983, + 0x154c: 0x0967, 0x154d: 0x0987, 0x154e: 0x096b, 0x154f: 0x0973, 0x1550: 0x080b, 0x1551: 0x09cf, + 0x1552: 0x0997, 0x1553: 0x099b, 0x1554: 0x099f, 0x1555: 0x0993, 0x1556: 0x09a7, 0x1557: 0x09a3, + 0x1558: 0x09bb, 0x1559: 0x1674, 0x155a: 0x09d7, 0x155b: 0x09db, 0x155c: 0x09e3, 0x155d: 0x09ef, + 0x155e: 0x09f7, 0x155f: 0x0a13, 0x1560: 0x1679, 0x1561: 0x167e, 0x1562: 0x0a1f, 0x1563: 0x0a23, + 0x1564: 0x0a27, 0x1565: 0x0a1b, 0x1566: 0x0a2f, 0x1567: 0x05c7, 0x1568: 0x05cb, 0x1569: 0x0a37, + 0x156a: 0x0a3f, 0x156b: 0x0a3f, 0x156c: 0x1683, 0x156d: 0x0a5b, 0x156e: 0x0a5f, 0x156f: 0x0a63, + 0x1570: 0x0a6b, 0x1571: 0x1688, 0x1572: 0x0a73, 0x1573: 0x0a77, 0x1574: 0x0b4f, 0x1575: 0x0a7f, + 0x1576: 0x05cf, 0x1577: 0x0a8b, 0x1578: 0x0a9b, 0x1579: 0x0aa7, 0x157a: 0x0aa3, 0x157b: 0x1692, + 0x157c: 0x0aaf, 0x157d: 0x1697, 0x157e: 0x0abb, 0x157f: 0x0ab7, + // Block 0x56, offset 0x1580 + 0x1580: 0x0abf, 0x1581: 0x0acf, 0x1582: 0x0ad3, 0x1583: 0x05d3, 0x1584: 0x0ae3, 0x1585: 0x0aeb, + 0x1586: 0x0aef, 0x1587: 0x0af3, 0x1588: 0x05d7, 0x1589: 0x169c, 0x158a: 0x05db, 0x158b: 0x0b0f, + 0x158c: 0x0b13, 0x158d: 0x0b17, 0x158e: 0x0b1f, 0x158f: 0x1863, 0x1590: 0x0b37, 0x1591: 0x16a6, + 0x1592: 0x16a6, 0x1593: 0x11d7, 0x1594: 0x0b47, 0x1595: 0x0b47, 0x1596: 0x05df, 0x1597: 0x16c9, + 0x1598: 0x179b, 0x1599: 0x0b57, 0x159a: 0x0b5f, 0x159b: 0x05e3, 0x159c: 0x0b73, 0x159d: 0x0b83, + 0x159e: 0x0b87, 0x159f: 0x0b8f, 0x15a0: 0x0b9f, 0x15a1: 0x05eb, 0x15a2: 0x05e7, 0x15a3: 0x0ba3, + 0x15a4: 0x16ab, 0x15a5: 0x0ba7, 0x15a6: 0x0bbb, 0x15a7: 0x0bbf, 0x15a8: 0x0bc3, 0x15a9: 0x0bbf, + 0x15aa: 0x0bcf, 0x15ab: 0x0bd3, 0x15ac: 0x0be3, 0x15ad: 0x0bdb, 0x15ae: 0x0bdf, 0x15af: 0x0be7, + 0x15b0: 0x0beb, 0x15b1: 0x0bef, 0x15b2: 0x0bfb, 0x15b3: 0x0bff, 0x15b4: 0x0c17, 0x15b5: 0x0c1f, + 0x15b6: 0x0c2f, 0x15b7: 0x0c43, 0x15b8: 0x16ba, 0x15b9: 0x0c3f, 0x15ba: 0x0c33, 0x15bb: 0x0c4b, + 0x15bc: 0x0c53, 0x15bd: 0x0c67, 0x15be: 0x16bf, 0x15bf: 0x0c6f, + // Block 0x57, offset 0x15c0 + 0x15c0: 0x0c63, 0x15c1: 0x0c5b, 0x15c2: 0x05ef, 0x15c3: 0x0c77, 0x15c4: 0x0c7f, 0x15c5: 0x0c87, + 0x15c6: 0x0c7b, 0x15c7: 0x05f3, 0x15c8: 0x0c97, 0x15c9: 0x0c9f, 0x15ca: 0x16c4, 0x15cb: 0x0ccb, + 0x15cc: 0x0cff, 0x15cd: 0x0cdb, 0x15ce: 0x05ff, 0x15cf: 0x0ce7, 0x15d0: 0x05fb, 0x15d1: 0x05f7, + 0x15d2: 0x07c3, 0x15d3: 0x07c7, 0x15d4: 0x0d03, 0x15d5: 0x0ceb, 0x15d6: 0x11ab, 0x15d7: 0x0663, + 0x15d8: 0x0d0f, 0x15d9: 0x0d13, 0x15da: 0x0d17, 0x15db: 0x0d2b, 0x15dc: 0x0d23, 0x15dd: 0x16dd, + 0x15de: 0x0603, 0x15df: 0x0d3f, 0x15e0: 0x0d33, 0x15e1: 0x0d4f, 0x15e2: 0x0d57, 0x15e3: 0x16e7, + 0x15e4: 0x0d5b, 0x15e5: 0x0d47, 0x15e6: 0x0d63, 0x15e7: 0x0607, 0x15e8: 0x0d67, 0x15e9: 0x0d6b, + 0x15ea: 0x0d6f, 0x15eb: 0x0d7b, 0x15ec: 0x16ec, 0x15ed: 0x0d83, 0x15ee: 0x060b, 0x15ef: 0x0d8f, + 0x15f0: 0x16f1, 0x15f1: 0x0d93, 0x15f2: 0x060f, 0x15f3: 0x0d9f, 0x15f4: 0x0dab, 0x15f5: 0x0db7, + 0x15f6: 0x0dbb, 0x15f7: 0x16f6, 0x15f8: 0x168d, 0x15f9: 0x16fb, 0x15fa: 0x0ddb, 0x15fb: 0x1700, + 0x15fc: 0x0de7, 0x15fd: 0x0def, 0x15fe: 0x0ddf, 0x15ff: 0x0dfb, + // Block 0x58, offset 0x1600 + 0x1600: 0x0e0b, 0x1601: 0x0e1b, 0x1602: 0x0e0f, 0x1603: 0x0e13, 0x1604: 0x0e1f, 0x1605: 0x0e23, + 0x1606: 0x1705, 0x1607: 0x0e07, 0x1608: 0x0e3b, 0x1609: 0x0e3f, 0x160a: 0x0613, 0x160b: 0x0e53, + 0x160c: 0x0e4f, 0x160d: 0x170a, 0x160e: 0x0e33, 0x160f: 0x0e6f, 0x1610: 0x170f, 0x1611: 0x1714, + 0x1612: 0x0e73, 0x1613: 0x0e87, 0x1614: 0x0e83, 0x1615: 0x0e7f, 0x1616: 0x0617, 0x1617: 0x0e8b, + 0x1618: 0x0e9b, 0x1619: 0x0e97, 0x161a: 0x0ea3, 0x161b: 0x1651, 0x161c: 0x0eb3, 0x161d: 0x1719, + 0x161e: 0x0ebf, 0x161f: 0x1723, 0x1620: 0x0ed3, 0x1621: 0x0edf, 0x1622: 0x0ef3, 0x1623: 0x1728, + 0x1624: 0x0f07, 0x1625: 0x0f0b, 0x1626: 0x172d, 0x1627: 0x1732, 0x1628: 0x0f27, 0x1629: 0x0f37, + 0x162a: 0x061b, 0x162b: 0x0f3b, 0x162c: 0x061f, 0x162d: 0x061f, 0x162e: 0x0f53, 0x162f: 0x0f57, + 0x1630: 0x0f5f, 0x1631: 0x0f63, 0x1632: 0x0f6f, 0x1633: 0x0623, 0x1634: 0x0f87, 0x1635: 0x1737, + 0x1636: 0x0fa3, 0x1637: 0x173c, 0x1638: 0x0faf, 0x1639: 0x16a1, 0x163a: 0x0fbf, 0x163b: 0x1741, + 0x163c: 0x1746, 0x163d: 0x174b, 0x163e: 0x0627, 0x163f: 0x062b, + // Block 0x59, offset 0x1640 + 0x1640: 0x0ff7, 0x1641: 0x1755, 0x1642: 0x1750, 0x1643: 0x175a, 0x1644: 0x175f, 0x1645: 0x0fff, + 0x1646: 0x1003, 0x1647: 0x1003, 0x1648: 0x100b, 0x1649: 0x0633, 0x164a: 0x100f, 0x164b: 0x0637, + 0x164c: 0x063b, 0x164d: 0x1769, 0x164e: 0x1023, 0x164f: 0x102b, 0x1650: 0x1037, 0x1651: 0x063f, + 0x1652: 0x176e, 0x1653: 0x105b, 0x1654: 0x1773, 0x1655: 0x1778, 0x1656: 0x107b, 0x1657: 0x1093, + 0x1658: 0x0643, 0x1659: 0x109b, 0x165a: 0x109f, 0x165b: 0x10a3, 0x165c: 0x177d, 0x165d: 0x1782, + 0x165e: 0x1782, 0x165f: 0x10bb, 0x1660: 0x0647, 0x1661: 0x1787, 0x1662: 0x10cf, 0x1663: 0x10d3, + 0x1664: 0x064b, 0x1665: 0x178c, 0x1666: 0x10ef, 0x1667: 0x064f, 0x1668: 0x10ff, 0x1669: 0x10f7, + 0x166a: 0x1107, 0x166b: 0x1796, 0x166c: 0x111f, 0x166d: 0x0653, 0x166e: 0x112b, 0x166f: 0x1133, + 0x1670: 0x1143, 0x1671: 0x0657, 0x1672: 0x17a0, 0x1673: 0x17a5, 0x1674: 0x065b, 0x1675: 0x17aa, + 0x1676: 0x115b, 0x1677: 0x17af, 0x1678: 0x1167, 0x1679: 0x1173, 0x167a: 0x117b, 0x167b: 0x17b4, + 0x167c: 0x17b9, 0x167d: 0x118f, 0x167e: 0x17be, 0x167f: 0x1197, + // Block 0x5a, offset 0x1680 + 0x1680: 0x16ce, 0x1681: 0x065f, 0x1682: 0x11af, 0x1683: 0x11b3, 0x1684: 0x0667, 0x1685: 0x11b7, + 0x1686: 0x0a33, 0x1687: 0x17c3, 0x1688: 0x17c8, 0x1689: 0x16d3, 0x168a: 0x16d8, 0x168b: 0x11d7, + 0x168c: 0x11db, 0x168d: 0x13f3, 0x168e: 0x066b, 0x168f: 0x1207, 0x1690: 0x1203, 0x1691: 0x120b, + 0x1692: 0x083f, 0x1693: 0x120f, 0x1694: 0x1213, 0x1695: 0x1217, 0x1696: 0x121f, 0x1697: 0x17cd, + 0x1698: 0x121b, 0x1699: 0x1223, 0x169a: 0x1237, 0x169b: 0x123b, 0x169c: 0x1227, 0x169d: 0x123f, + 0x169e: 0x1253, 0x169f: 0x1267, 0x16a0: 0x1233, 0x16a1: 0x1247, 0x16a2: 0x124b, 0x16a3: 0x124f, + 0x16a4: 0x17d2, 0x16a5: 0x17dc, 0x16a6: 0x17d7, 0x16a7: 0x066f, 0x16a8: 0x126f, 0x16a9: 0x1273, + 0x16aa: 0x127b, 0x16ab: 0x17f0, 0x16ac: 0x127f, 0x16ad: 0x17e1, 0x16ae: 0x0673, 0x16af: 0x0677, + 0x16b0: 0x17e6, 0x16b1: 0x17eb, 0x16b2: 0x067b, 0x16b3: 0x129f, 0x16b4: 0x12a3, 0x16b5: 0x12a7, + 0x16b6: 0x12ab, 0x16b7: 0x12b7, 0x16b8: 0x12b3, 0x16b9: 0x12bf, 0x16ba: 0x12bb, 0x16bb: 0x12cb, + 0x16bc: 0x12c3, 0x16bd: 0x12c7, 0x16be: 0x12cf, 0x16bf: 0x067f, + // Block 0x5b, offset 0x16c0 + 0x16c0: 0x12d7, 0x16c1: 0x12db, 0x16c2: 0x0683, 0x16c3: 0x12eb, 0x16c4: 0x12ef, 0x16c5: 0x17f5, + 0x16c6: 0x12fb, 0x16c7: 0x12ff, 0x16c8: 0x0687, 0x16c9: 0x130b, 0x16ca: 0x05bb, 0x16cb: 0x17fa, + 0x16cc: 0x17ff, 0x16cd: 0x068b, 0x16ce: 0x068f, 0x16cf: 0x1337, 0x16d0: 0x134f, 0x16d1: 0x136b, + 0x16d2: 0x137b, 0x16d3: 0x1804, 0x16d4: 0x138f, 0x16d5: 0x1393, 0x16d6: 0x13ab, 0x16d7: 0x13b7, + 0x16d8: 0x180e, 0x16d9: 0x1660, 0x16da: 0x13c3, 0x16db: 0x13bf, 0x16dc: 0x13cb, 0x16dd: 0x1665, + 0x16de: 0x13d7, 0x16df: 0x13e3, 0x16e0: 0x1813, 0x16e1: 0x1818, 0x16e2: 0x1423, 0x16e3: 0x142f, + 0x16e4: 0x1437, 0x16e5: 0x181d, 0x16e6: 0x143b, 0x16e7: 0x1467, 0x16e8: 0x1473, 0x16e9: 0x1477, + 0x16ea: 0x146f, 0x16eb: 0x1483, 0x16ec: 0x1487, 0x16ed: 0x1822, 0x16ee: 0x1493, 0x16ef: 0x0693, + 0x16f0: 0x149b, 0x16f1: 0x1827, 0x16f2: 0x0697, 0x16f3: 0x14d3, 0x16f4: 0x0ac3, 0x16f5: 0x14eb, + 0x16f6: 0x182c, 0x16f7: 0x1836, 0x16f8: 0x069b, 0x16f9: 0x069f, 0x16fa: 0x1513, 0x16fb: 0x183b, + 0x16fc: 0x06a3, 0x16fd: 0x1840, 0x16fe: 0x152b, 0x16ff: 0x152b, + // Block 0x5c, offset 0x1700 + 0x1700: 0x1533, 0x1701: 0x1845, 0x1702: 0x154b, 0x1703: 0x06a7, 0x1704: 0x155b, 0x1705: 0x1567, + 0x1706: 0x156f, 0x1707: 0x1577, 0x1708: 0x06ab, 0x1709: 0x184a, 0x170a: 0x158b, 0x170b: 0x15a7, + 0x170c: 0x15b3, 0x170d: 0x06af, 0x170e: 0x06b3, 0x170f: 0x15b7, 0x1710: 0x184f, 0x1711: 0x06b7, + 0x1712: 0x1854, 0x1713: 0x1859, 0x1714: 0x185e, 0x1715: 0x15db, 0x1716: 0x06bb, 0x1717: 0x15ef, + 0x1718: 0x15f7, 0x1719: 0x15fb, 0x171a: 0x1603, 0x171b: 0x160b, 0x171c: 0x1613, 0x171d: 0x1868, +} + +// nfkcIndex: 22 blocks, 1408 entries, 1408 bytes +// Block 0 is the zero block. +var nfkcIndex = [1408]uint8{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x5b, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x5c, 0xc7: 0x04, + 0xc8: 0x05, 0xca: 0x5d, 0xcb: 0x5e, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x09, + 0xd0: 0x0a, 0xd1: 0x5f, 0xd2: 0x60, 0xd3: 0x0b, 0xd6: 0x0c, 0xd7: 0x61, + 0xd8: 0x62, 0xd9: 0x0d, 0xdb: 0x63, 0xdc: 0x64, 0xdd: 0x65, 0xdf: 0x66, + 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: 0x67, 0x121: 0x68, 0x123: 0x69, 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, 0x16c: 0x0e, 0x16d: 0x92, 0x16e: 0x93, 0x16f: 0x94, + 0x170: 0x95, 0x173: 0x96, 0x174: 0x97, 0x175: 0x0f, 0x176: 0x10, 0x177: 0x11, + 0x178: 0x12, 0x179: 0x13, 0x17a: 0x14, 0x17b: 0x15, 0x17c: 0x16, 0x17d: 0x17, 0x17e: 0x18, 0x17f: 0x19, + // Block 0x6, offset 0x180 + 0x180: 0x98, 0x181: 0x99, 0x182: 0x9a, 0x183: 0x9b, 0x184: 0x1a, 0x185: 0x1b, 0x186: 0x9c, 0x187: 0x9d, + 0x188: 0x9e, 0x189: 0x1c, 0x18a: 0x1d, 0x18b: 0x9f, 0x18c: 0xa0, + 0x191: 0x1e, 0x192: 0x1f, 0x193: 0xa1, + 0x1a8: 0xa2, 0x1a9: 0xa3, 0x1ab: 0xa4, + 0x1b1: 0xa5, 0x1b3: 0xa6, 0x1b5: 0xa7, 0x1b7: 0xa8, + 0x1ba: 0xa9, 0x1bb: 0xaa, 0x1bc: 0x20, 0x1bd: 0x21, 0x1be: 0x22, 0x1bf: 0xab, + // Block 0x7, offset 0x1c0 + 0x1c0: 0xac, 0x1c1: 0x23, 0x1c2: 0x24, 0x1c3: 0x25, 0x1c4: 0xad, 0x1c5: 0x26, 0x1c6: 0x27, + 0x1c8: 0x28, 0x1c9: 0x29, 0x1ca: 0x2a, 0x1cb: 0x2b, 0x1cc: 0x2c, 0x1cd: 0x2d, 0x1ce: 0x2e, 0x1cf: 0x2f, + // Block 0x8, offset 0x200 + 0x219: 0xae, 0x21a: 0xaf, 0x21b: 0xb0, 0x21d: 0xb1, 0x21f: 0xb2, + 0x220: 0xb3, 0x223: 0xb4, 0x224: 0xb5, 0x225: 0xb6, 0x226: 0xb7, 0x227: 0xb8, + 0x22a: 0xb9, 0x22b: 0xba, 0x22d: 0xbb, 0x22f: 0xbc, + 0x230: 0xbd, 0x231: 0xbe, 0x232: 0xbf, 0x233: 0xc0, 0x234: 0xc1, 0x235: 0xc2, 0x236: 0xc3, 0x237: 0xbd, + 0x238: 0xbe, 0x239: 0xbf, 0x23a: 0xc0, 0x23b: 0xc1, 0x23c: 0xc2, 0x23d: 0xc3, 0x23e: 0xbd, 0x23f: 0xbe, + // Block 0x9, offset 0x240 + 0x240: 0xbf, 0x241: 0xc0, 0x242: 0xc1, 0x243: 0xc2, 0x244: 0xc3, 0x245: 0xbd, 0x246: 0xbe, 0x247: 0xbf, + 0x248: 0xc0, 0x249: 0xc1, 0x24a: 0xc2, 0x24b: 0xc3, 0x24c: 0xbd, 0x24d: 0xbe, 0x24e: 0xbf, 0x24f: 0xc0, + 0x250: 0xc1, 0x251: 0xc2, 0x252: 0xc3, 0x253: 0xbd, 0x254: 0xbe, 0x255: 0xbf, 0x256: 0xc0, 0x257: 0xc1, + 0x258: 0xc2, 0x259: 0xc3, 0x25a: 0xbd, 0x25b: 0xbe, 0x25c: 0xbf, 0x25d: 0xc0, 0x25e: 0xc1, 0x25f: 0xc2, + 0x260: 0xc3, 0x261: 0xbd, 0x262: 0xbe, 0x263: 0xbf, 0x264: 0xc0, 0x265: 0xc1, 0x266: 0xc2, 0x267: 0xc3, + 0x268: 0xbd, 0x269: 0xbe, 0x26a: 0xbf, 0x26b: 0xc0, 0x26c: 0xc1, 0x26d: 0xc2, 0x26e: 0xc3, 0x26f: 0xbd, + 0x270: 0xbe, 0x271: 0xbf, 0x272: 0xc0, 0x273: 0xc1, 0x274: 0xc2, 0x275: 0xc3, 0x276: 0xbd, 0x277: 0xbe, + 0x278: 0xbf, 0x279: 0xc0, 0x27a: 0xc1, 0x27b: 0xc2, 0x27c: 0xc3, 0x27d: 0xbd, 0x27e: 0xbe, 0x27f: 0xbf, + // Block 0xa, offset 0x280 + 0x280: 0xc0, 0x281: 0xc1, 0x282: 0xc2, 0x283: 0xc3, 0x284: 0xbd, 0x285: 0xbe, 0x286: 0xbf, 0x287: 0xc0, + 0x288: 0xc1, 0x289: 0xc2, 0x28a: 0xc3, 0x28b: 0xbd, 0x28c: 0xbe, 0x28d: 0xbf, 0x28e: 0xc0, 0x28f: 0xc1, + 0x290: 0xc2, 0x291: 0xc3, 0x292: 0xbd, 0x293: 0xbe, 0x294: 0xbf, 0x295: 0xc0, 0x296: 0xc1, 0x297: 0xc2, + 0x298: 0xc3, 0x299: 0xbd, 0x29a: 0xbe, 0x29b: 0xbf, 0x29c: 0xc0, 0x29d: 0xc1, 0x29e: 0xc2, 0x29f: 0xc3, + 0x2a0: 0xbd, 0x2a1: 0xbe, 0x2a2: 0xbf, 0x2a3: 0xc0, 0x2a4: 0xc1, 0x2a5: 0xc2, 0x2a6: 0xc3, 0x2a7: 0xbd, + 0x2a8: 0xbe, 0x2a9: 0xbf, 0x2aa: 0xc0, 0x2ab: 0xc1, 0x2ac: 0xc2, 0x2ad: 0xc3, 0x2ae: 0xbd, 0x2af: 0xbe, + 0x2b0: 0xbf, 0x2b1: 0xc0, 0x2b2: 0xc1, 0x2b3: 0xc2, 0x2b4: 0xc3, 0x2b5: 0xbd, 0x2b6: 0xbe, 0x2b7: 0xbf, + 0x2b8: 0xc0, 0x2b9: 0xc1, 0x2ba: 0xc2, 0x2bb: 0xc3, 0x2bc: 0xbd, 0x2bd: 0xbe, 0x2be: 0xbf, 0x2bf: 0xc0, + // Block 0xb, offset 0x2c0 + 0x2c0: 0xc1, 0x2c1: 0xc2, 0x2c2: 0xc3, 0x2c3: 0xbd, 0x2c4: 0xbe, 0x2c5: 0xbf, 0x2c6: 0xc0, 0x2c7: 0xc1, + 0x2c8: 0xc2, 0x2c9: 0xc3, 0x2ca: 0xbd, 0x2cb: 0xbe, 0x2cc: 0xbf, 0x2cd: 0xc0, 0x2ce: 0xc1, 0x2cf: 0xc2, + 0x2d0: 0xc3, 0x2d1: 0xbd, 0x2d2: 0xbe, 0x2d3: 0xbf, 0x2d4: 0xc0, 0x2d5: 0xc1, 0x2d6: 0xc2, 0x2d7: 0xc3, + 0x2d8: 0xbd, 0x2d9: 0xbe, 0x2da: 0xbf, 0x2db: 0xc0, 0x2dc: 0xc1, 0x2dd: 0xc2, 0x2de: 0xc4, + // Block 0xc, offset 0x300 + 0x324: 0x30, 0x325: 0x31, 0x326: 0x32, 0x327: 0x33, + 0x328: 0x34, 0x329: 0x35, 0x32a: 0x36, 0x32b: 0x37, 0x32c: 0x38, 0x32d: 0x39, 0x32e: 0x3a, 0x32f: 0x3b, + 0x330: 0x3c, 0x331: 0x3d, 0x332: 0x3e, 0x333: 0x3f, 0x334: 0x40, 0x335: 0x41, 0x336: 0x42, 0x337: 0x43, + 0x338: 0x44, 0x339: 0x45, 0x33a: 0x46, 0x33b: 0x47, 0x33c: 0xc5, 0x33d: 0x48, 0x33e: 0x49, 0x33f: 0x4a, + // Block 0xd, offset 0x340 + 0x347: 0xc6, + 0x34b: 0xc7, 0x34d: 0xc8, + 0x368: 0xc9, 0x36b: 0xca, + // Block 0xe, offset 0x380 + 0x381: 0xcb, 0x382: 0xcc, 0x384: 0xcd, 0x385: 0xb7, 0x387: 0xce, + 0x388: 0xcf, 0x38b: 0xd0, 0x38c: 0x6c, 0x38d: 0xd1, + 0x391: 0xd2, 0x392: 0xd3, 0x393: 0xd4, 0x396: 0xd5, 0x397: 0xd6, + 0x398: 0xd7, 0x39a: 0xd8, 0x39c: 0xd9, + 0x3a8: 0xda, 0x3a9: 0xdb, 0x3aa: 0xdc, + 0x3b0: 0xd7, 0x3b5: 0xdd, + // Block 0xf, offset 0x3c0 + 0x3eb: 0xde, 0x3ec: 0xdf, + // Block 0x10, offset 0x400 + 0x432: 0xe0, + // Block 0x11, offset 0x440 + 0x445: 0xe1, 0x446: 0xe2, 0x447: 0xe3, + 0x449: 0xe4, + 0x450: 0xe5, 0x451: 0xe6, 0x452: 0xe7, 0x453: 0xe8, 0x454: 0xe9, 0x455: 0xea, 0x456: 0xeb, 0x457: 0xec, + 0x458: 0xed, 0x459: 0xee, 0x45a: 0x4b, 0x45b: 0xef, 0x45c: 0xf0, 0x45d: 0xf1, 0x45e: 0xf2, 0x45f: 0x4c, + // Block 0x12, offset 0x480 + 0x480: 0xf3, + 0x4a3: 0xf4, 0x4a5: 0xf5, + 0x4b8: 0x4d, 0x4b9: 0x4e, 0x4ba: 0x4f, + // Block 0x13, offset 0x4c0 + 0x4c4: 0x50, 0x4c5: 0xf6, 0x4c6: 0xf7, + 0x4c8: 0x51, 0x4c9: 0xf8, + // Block 0x14, offset 0x500 + 0x520: 0x52, 0x521: 0x53, 0x522: 0x54, 0x523: 0x55, 0x524: 0x56, 0x525: 0x57, 0x526: 0x58, 0x527: 0x59, + 0x528: 0x5a, + // Block 0x15, offset 0x540 + 0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d, + 0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11, + 0x56f: 0x12, +} + +// nfkcSparseOffset: 158 entries, 316 bytes +var nfkcSparseOffset = []uint16{0x0, 0xe, 0x12, 0x1b, 0x25, 0x35, 0x37, 0x3c, 0x47, 0x56, 0x63, 0x6b, 0x6f, 0x74, 0x76, 0x87, 0x8f, 0x96, 0x99, 0xa0, 0xa4, 0xa8, 0xaa, 0xac, 0xb5, 0xb9, 0xc0, 0xc5, 0xc8, 0xd2, 0xd5, 0xdc, 0xe4, 0xe8, 0xea, 0xed, 0xf1, 0xf7, 0x108, 0x114, 0x116, 0x11c, 0x11e, 0x120, 0x122, 0x124, 0x126, 0x128, 0x12a, 0x12d, 0x130, 0x132, 0x135, 0x138, 0x13c, 0x141, 0x14a, 0x14c, 0x14f, 0x151, 0x15c, 0x167, 0x175, 0x183, 0x193, 0x1a1, 0x1a8, 0x1ae, 0x1bd, 0x1c1, 0x1c3, 0x1c7, 0x1c9, 0x1cc, 0x1ce, 0x1d1, 0x1d3, 0x1d6, 0x1d8, 0x1da, 0x1dc, 0x1e8, 0x1f2, 0x1fc, 0x1ff, 0x203, 0x205, 0x207, 0x209, 0x20b, 0x20e, 0x210, 0x212, 0x214, 0x216, 0x21c, 0x21f, 0x223, 0x225, 0x22c, 0x232, 0x238, 0x240, 0x246, 0x24c, 0x252, 0x256, 0x258, 0x25a, 0x25c, 0x25e, 0x264, 0x267, 0x26a, 0x272, 0x279, 0x27c, 0x27f, 0x281, 0x289, 0x28c, 0x293, 0x296, 0x29c, 0x29e, 0x2a0, 0x2a3, 0x2a5, 0x2a7, 0x2a9, 0x2ab, 0x2ae, 0x2b0, 0x2b2, 0x2b4, 0x2c1, 0x2cb, 0x2cd, 0x2cf, 0x2d3, 0x2d8, 0x2e4, 0x2e9, 0x2f2, 0x2f8, 0x2fd, 0x301, 0x306, 0x30a, 0x31a, 0x328, 0x336, 0x344, 0x34a, 0x34c, 0x34f, 0x359, 0x35b} + +// nfkcSparseValues: 869 entries, 3476 bytes +var nfkcSparseValues = [869]valueRange{ + // Block 0x0, offset 0x0 + {value: 0x0002, lo: 0x0d}, + {value: 0x0001, lo: 0xa0, hi: 0xa0}, + {value: 0x4278, lo: 0xa8, hi: 0xa8}, + {value: 0x0083, lo: 0xaa, hi: 0xaa}, + {value: 0x4264, lo: 0xaf, hi: 0xaf}, + {value: 0x0025, lo: 0xb2, hi: 0xb3}, + {value: 0x425a, lo: 0xb4, hi: 0xb4}, + {value: 0x01dc, lo: 0xb5, hi: 0xb5}, + {value: 0x4291, lo: 0xb8, hi: 0xb8}, + {value: 0x0023, lo: 0xb9, hi: 0xb9}, + {value: 0x009f, lo: 0xba, hi: 0xba}, + {value: 0x221c, lo: 0xbc, hi: 0xbc}, + {value: 0x2210, lo: 0xbd, hi: 0xbd}, + {value: 0x22b2, lo: 0xbe, hi: 0xbe}, + // Block 0x1, offset 0xe + {value: 0x0091, lo: 0x03}, + {value: 0x46e2, lo: 0xa0, hi: 0xa1}, + {value: 0x4714, 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: 0x426e, lo: 0x98, hi: 0x98}, + {value: 0x4273, lo: 0x99, hi: 0x9a}, + {value: 0x4296, lo: 0x9b, hi: 0x9b}, + {value: 0x425f, lo: 0x9c, hi: 0x9c}, + {value: 0x4282, lo: 0x9d, hi: 0x9d}, + {value: 0x0113, lo: 0xa0, hi: 0xa0}, + {value: 0x0099, lo: 0xa1, hi: 0xa1}, + {value: 0x00a7, lo: 0xa2, hi: 0xa3}, + {value: 0x0167, 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: 0x37a5, lo: 0x90, hi: 0x90}, + {value: 0x37b1, lo: 0x91, hi: 0x91}, + {value: 0x379f, lo: 0x93, hi: 0x93}, + {value: 0xa000, lo: 0x96, hi: 0x96}, + {value: 0x3817, lo: 0x97, hi: 0x97}, + {value: 0x37e1, lo: 0x9c, hi: 0x9c}, + {value: 0x37c9, lo: 0x9d, hi: 0x9d}, + {value: 0x37f3, lo: 0x9e, hi: 0x9e}, + {value: 0xa000, lo: 0xb4, hi: 0xb5}, + {value: 0x381d, lo: 0xb6, hi: 0xb6}, + {value: 0x3823, lo: 0xb7, hi: 0xb7}, + // Block 0x5, offset 0x35 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0x83, hi: 0x87}, + // Block 0x6, offset 0x37 + {value: 0x0001, lo: 0x04}, + {value: 0x8113, lo: 0x81, hi: 0x82}, + {value: 0x8132, lo: 0x84, hi: 0x84}, + {value: 0x812d, lo: 0x85, hi: 0x85}, + {value: 0x810d, lo: 0x87, hi: 0x87}, + // Block 0x7, offset 0x3c + {value: 0x0000, lo: 0x0a}, + {value: 0x8132, lo: 0x90, hi: 0x97}, + {value: 0x8119, lo: 0x98, hi: 0x98}, + {value: 0x811a, lo: 0x99, hi: 0x99}, + {value: 0x811b, lo: 0x9a, hi: 0x9a}, + {value: 0x3841, lo: 0xa2, hi: 0xa2}, + {value: 0x3847, lo: 0xa3, hi: 0xa3}, + {value: 0x3853, lo: 0xa4, hi: 0xa4}, + {value: 0x384d, lo: 0xa5, hi: 0xa5}, + {value: 0x3859, lo: 0xa6, hi: 0xa6}, + {value: 0xa000, lo: 0xa7, hi: 0xa7}, + // Block 0x8, offset 0x47 + {value: 0x0000, lo: 0x0e}, + {value: 0x386b, lo: 0x80, hi: 0x80}, + {value: 0xa000, lo: 0x81, hi: 0x81}, + {value: 0x385f, lo: 0x82, hi: 0x82}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0x3865, lo: 0x93, hi: 0x93}, + {value: 0xa000, lo: 0x95, hi: 0x95}, + {value: 0x8132, lo: 0x96, hi: 0x9c}, + {value: 0x8132, lo: 0x9f, hi: 0xa2}, + {value: 0x812d, lo: 0xa3, hi: 0xa3}, + {value: 0x8132, lo: 0xa4, hi: 0xa4}, + {value: 0x8132, lo: 0xa7, hi: 0xa8}, + {value: 0x812d, lo: 0xaa, hi: 0xaa}, + {value: 0x8132, lo: 0xab, hi: 0xac}, + {value: 0x812d, lo: 0xad, hi: 0xad}, + // Block 0x9, offset 0x56 + {value: 0x0000, lo: 0x0c}, + {value: 0x811f, lo: 0x91, hi: 0x91}, + {value: 0x8132, lo: 0xb0, hi: 0xb0}, + {value: 0x812d, lo: 0xb1, hi: 0xb1}, + {value: 0x8132, lo: 0xb2, hi: 0xb3}, + {value: 0x812d, lo: 0xb4, hi: 0xb4}, + {value: 0x8132, lo: 0xb5, hi: 0xb6}, + {value: 0x812d, lo: 0xb7, hi: 0xb9}, + {value: 0x8132, lo: 0xba, hi: 0xba}, + {value: 0x812d, lo: 0xbb, hi: 0xbc}, + {value: 0x8132, lo: 0xbd, hi: 0xbd}, + {value: 0x812d, lo: 0xbe, hi: 0xbe}, + {value: 0x8132, lo: 0xbf, hi: 0xbf}, + // Block 0xa, offset 0x63 + {value: 0x0005, lo: 0x07}, + {value: 0x8132, lo: 0x80, hi: 0x80}, + {value: 0x8132, lo: 0x81, hi: 0x81}, + {value: 0x812d, lo: 0x82, hi: 0x83}, + {value: 0x812d, lo: 0x84, hi: 0x85}, + {value: 0x812d, lo: 0x86, hi: 0x87}, + {value: 0x812d, lo: 0x88, hi: 0x89}, + {value: 0x8132, lo: 0x8a, hi: 0x8a}, + // Block 0xb, offset 0x6b + {value: 0x0000, lo: 0x03}, + {value: 0x8132, lo: 0xab, hi: 0xb1}, + {value: 0x812d, lo: 0xb2, hi: 0xb2}, + {value: 0x8132, lo: 0xb3, hi: 0xb3}, + // Block 0xc, offset 0x6f + {value: 0x0000, lo: 0x04}, + {value: 0x8132, lo: 0x96, hi: 0x99}, + {value: 0x8132, lo: 0x9b, hi: 0xa3}, + {value: 0x8132, lo: 0xa5, hi: 0xa7}, + {value: 0x8132, lo: 0xa9, hi: 0xad}, + // Block 0xd, offset 0x74 + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0x99, hi: 0x9b}, + // Block 0xe, offset 0x76 + {value: 0x0000, lo: 0x10}, + {value: 0x8132, lo: 0x94, hi: 0xa1}, + {value: 0x812d, lo: 0xa3, hi: 0xa3}, + {value: 0x8132, lo: 0xa4, hi: 0xa5}, + {value: 0x812d, lo: 0xa6, hi: 0xa6}, + {value: 0x8132, lo: 0xa7, hi: 0xa8}, + {value: 0x812d, lo: 0xa9, hi: 0xa9}, + {value: 0x8132, lo: 0xaa, hi: 0xac}, + {value: 0x812d, lo: 0xad, hi: 0xaf}, + {value: 0x8116, lo: 0xb0, hi: 0xb0}, + {value: 0x8117, lo: 0xb1, hi: 0xb1}, + {value: 0x8118, lo: 0xb2, hi: 0xb2}, + {value: 0x8132, lo: 0xb3, hi: 0xb5}, + {value: 0x812d, lo: 0xb6, hi: 0xb6}, + {value: 0x8132, lo: 0xb7, hi: 0xb8}, + {value: 0x812d, lo: 0xb9, hi: 0xba}, + {value: 0x8132, lo: 0xbb, hi: 0xbf}, + // Block 0xf, offset 0x87 + {value: 0x0000, lo: 0x07}, + {value: 0xa000, lo: 0xa8, hi: 0xa8}, + {value: 0x3ed8, lo: 0xa9, hi: 0xa9}, + {value: 0xa000, lo: 0xb0, hi: 0xb0}, + {value: 0x3ee0, lo: 0xb1, hi: 0xb1}, + {value: 0xa000, lo: 0xb3, hi: 0xb3}, + {value: 0x3ee8, lo: 0xb4, hi: 0xb4}, + {value: 0x9902, lo: 0xbc, hi: 0xbc}, + // Block 0x10, offset 0x8f + {value: 0x0008, lo: 0x06}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x8132, lo: 0x91, hi: 0x91}, + {value: 0x812d, lo: 0x92, hi: 0x92}, + {value: 0x8132, lo: 0x93, hi: 0x93}, + {value: 0x8132, lo: 0x94, hi: 0x94}, + {value: 0x451c, lo: 0x98, hi: 0x9f}, + // Block 0x11, offset 0x96 + {value: 0x0000, lo: 0x02}, + {value: 0x8102, lo: 0xbc, hi: 0xbc}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x12, offset 0x99 + {value: 0x0008, lo: 0x06}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0x2c9e, lo: 0x8b, hi: 0x8c}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + {value: 0x455c, lo: 0x9c, hi: 0x9d}, + {value: 0x456c, lo: 0x9f, hi: 0x9f}, + // Block 0x13, offset 0xa0 + {value: 0x0000, lo: 0x03}, + {value: 0x4594, lo: 0xb3, hi: 0xb3}, + {value: 0x459c, lo: 0xb6, hi: 0xb6}, + {value: 0x8102, lo: 0xbc, hi: 0xbc}, + // Block 0x14, offset 0xa4 + {value: 0x0008, lo: 0x03}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x4574, lo: 0x99, hi: 0x9b}, + {value: 0x458c, lo: 0x9e, hi: 0x9e}, + // Block 0x15, offset 0xa8 + {value: 0x0000, lo: 0x01}, + {value: 0x8102, lo: 0xbc, hi: 0xbc}, + // Block 0x16, offset 0xaa + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + // Block 0x17, offset 0xac + {value: 0x0000, lo: 0x08}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0x2cb6, lo: 0x88, hi: 0x88}, + {value: 0x2cae, lo: 0x8b, hi: 0x8b}, + {value: 0x2cbe, lo: 0x8c, hi: 0x8c}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x96, hi: 0x97}, + {value: 0x45a4, lo: 0x9c, hi: 0x9c}, + {value: 0x45ac, lo: 0x9d, hi: 0x9d}, + // Block 0x18, offset 0xb5 + {value: 0x0000, lo: 0x03}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0x2cc6, lo: 0x94, hi: 0x94}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x19, offset 0xb9 + {value: 0x0000, lo: 0x06}, + {value: 0xa000, lo: 0x86, hi: 0x87}, + {value: 0x2cce, lo: 0x8a, hi: 0x8a}, + {value: 0x2cde, lo: 0x8b, hi: 0x8b}, + {value: 0x2cd6, lo: 0x8c, hi: 0x8c}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + // Block 0x1a, offset 0xc0 + {value: 0x1801, lo: 0x04}, + {value: 0xa000, lo: 0x86, hi: 0x86}, + {value: 0x3ef0, lo: 0x88, hi: 0x88}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x8120, lo: 0x95, hi: 0x96}, + // Block 0x1b, offset 0xc5 + {value: 0x0000, lo: 0x02}, + {value: 0x8102, lo: 0xbc, hi: 0xbc}, + {value: 0xa000, lo: 0xbf, hi: 0xbf}, + // Block 0x1c, offset 0xc8 + {value: 0x0000, lo: 0x09}, + {value: 0x2ce6, lo: 0x80, hi: 0x80}, + {value: 0x9900, lo: 0x82, hi: 0x82}, + {value: 0xa000, lo: 0x86, hi: 0x86}, + {value: 0x2cee, lo: 0x87, hi: 0x87}, + {value: 0x2cf6, lo: 0x88, hi: 0x88}, + {value: 0x2f50, lo: 0x8a, hi: 0x8a}, + {value: 0x2dd8, lo: 0x8b, hi: 0x8b}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x95, hi: 0x96}, + // Block 0x1d, offset 0xd2 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0xbb, hi: 0xbc}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x1e, offset 0xd5 + {value: 0x0000, lo: 0x06}, + {value: 0xa000, lo: 0x86, hi: 0x87}, + {value: 0x2cfe, lo: 0x8a, hi: 0x8a}, + {value: 0x2d0e, lo: 0x8b, hi: 0x8b}, + {value: 0x2d06, lo: 0x8c, hi: 0x8c}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + // Block 0x1f, offset 0xdc + {value: 0x6bea, lo: 0x07}, + {value: 0x9904, lo: 0x8a, hi: 0x8a}, + {value: 0x9900, lo: 0x8f, hi: 0x8f}, + {value: 0xa000, lo: 0x99, hi: 0x99}, + {value: 0x3ef8, lo: 0x9a, hi: 0x9a}, + {value: 0x2f58, lo: 0x9c, hi: 0x9c}, + {value: 0x2de3, lo: 0x9d, hi: 0x9d}, + {value: 0x2d16, lo: 0x9e, hi: 0x9f}, + // Block 0x20, offset 0xe4 + {value: 0x0000, lo: 0x03}, + {value: 0x2621, lo: 0xb3, hi: 0xb3}, + {value: 0x8122, lo: 0xb8, hi: 0xb9}, + {value: 0x8104, lo: 0xba, hi: 0xba}, + // Block 0x21, offset 0xe8 + {value: 0x0000, lo: 0x01}, + {value: 0x8123, lo: 0x88, hi: 0x8b}, + // Block 0x22, offset 0xea + {value: 0x0000, lo: 0x02}, + {value: 0x2636, lo: 0xb3, hi: 0xb3}, + {value: 0x8124, lo: 0xb8, hi: 0xb9}, + // Block 0x23, offset 0xed + {value: 0x0000, lo: 0x03}, + {value: 0x8125, lo: 0x88, hi: 0x8b}, + {value: 0x2628, lo: 0x9c, hi: 0x9c}, + {value: 0x262f, lo: 0x9d, hi: 0x9d}, + // Block 0x24, offset 0xf1 + {value: 0x0000, lo: 0x05}, + {value: 0x030b, lo: 0x8c, hi: 0x8c}, + {value: 0x812d, lo: 0x98, hi: 0x99}, + {value: 0x812d, lo: 0xb5, hi: 0xb5}, + {value: 0x812d, lo: 0xb7, hi: 0xb7}, + {value: 0x812b, lo: 0xb9, hi: 0xb9}, + // Block 0x25, offset 0xf7 + {value: 0x0000, lo: 0x10}, + {value: 0x2644, lo: 0x83, hi: 0x83}, + {value: 0x264b, lo: 0x8d, hi: 0x8d}, + {value: 0x2652, lo: 0x92, hi: 0x92}, + {value: 0x2659, lo: 0x97, hi: 0x97}, + {value: 0x2660, lo: 0x9c, hi: 0x9c}, + {value: 0x263d, lo: 0xa9, hi: 0xa9}, + {value: 0x8126, lo: 0xb1, hi: 0xb1}, + {value: 0x8127, lo: 0xb2, hi: 0xb2}, + {value: 0x4a84, lo: 0xb3, hi: 0xb3}, + {value: 0x8128, lo: 0xb4, hi: 0xb4}, + {value: 0x4a8d, lo: 0xb5, hi: 0xb5}, + {value: 0x45b4, lo: 0xb6, hi: 0xb6}, + {value: 0x45f4, lo: 0xb7, hi: 0xb7}, + {value: 0x45bc, lo: 0xb8, hi: 0xb8}, + {value: 0x45ff, lo: 0xb9, hi: 0xb9}, + {value: 0x8127, lo: 0xba, hi: 0xbd}, + // Block 0x26, offset 0x108 + {value: 0x0000, lo: 0x0b}, + {value: 0x8127, lo: 0x80, hi: 0x80}, + {value: 0x4a96, lo: 0x81, hi: 0x81}, + {value: 0x8132, lo: 0x82, hi: 0x83}, + {value: 0x8104, lo: 0x84, hi: 0x84}, + {value: 0x8132, lo: 0x86, hi: 0x87}, + {value: 0x266e, lo: 0x93, hi: 0x93}, + {value: 0x2675, lo: 0x9d, hi: 0x9d}, + {value: 0x267c, lo: 0xa2, hi: 0xa2}, + {value: 0x2683, lo: 0xa7, hi: 0xa7}, + {value: 0x268a, lo: 0xac, hi: 0xac}, + {value: 0x2667, lo: 0xb9, hi: 0xb9}, + // Block 0x27, offset 0x114 + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0x86, hi: 0x86}, + // Block 0x28, offset 0x116 + {value: 0x0000, lo: 0x05}, + {value: 0xa000, lo: 0xa5, hi: 0xa5}, + {value: 0x2d1e, lo: 0xa6, hi: 0xa6}, + {value: 0x9900, lo: 0xae, hi: 0xae}, + {value: 0x8102, lo: 0xb7, hi: 0xb7}, + {value: 0x8104, lo: 0xb9, hi: 0xba}, + // Block 0x29, offset 0x11c + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0x8d, hi: 0x8d}, + // Block 0x2a, offset 0x11e + {value: 0x0000, lo: 0x01}, + {value: 0x030f, lo: 0xbc, hi: 0xbc}, + // Block 0x2b, offset 0x120 + {value: 0x0000, lo: 0x01}, + {value: 0xa000, lo: 0x80, hi: 0x92}, + // Block 0x2c, offset 0x122 + {value: 0x0000, lo: 0x01}, + {value: 0xb900, lo: 0xa1, hi: 0xb5}, + // Block 0x2d, offset 0x124 + {value: 0x0000, lo: 0x01}, + {value: 0x9900, lo: 0xa8, hi: 0xbf}, + // Block 0x2e, offset 0x126 + {value: 0x0000, lo: 0x01}, + {value: 0x9900, lo: 0x80, hi: 0x82}, + // Block 0x2f, offset 0x128 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0x9d, hi: 0x9f}, + // Block 0x30, offset 0x12a + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x94, hi: 0x94}, + {value: 0x8104, lo: 0xb4, hi: 0xb4}, + // Block 0x31, offset 0x12d + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x92, hi: 0x92}, + {value: 0x8132, lo: 0x9d, hi: 0x9d}, + // Block 0x32, offset 0x130 + {value: 0x0000, lo: 0x01}, + {value: 0x8131, lo: 0xa9, hi: 0xa9}, + // Block 0x33, offset 0x132 + {value: 0x0004, lo: 0x02}, + {value: 0x812e, lo: 0xb9, hi: 0xba}, + {value: 0x812d, lo: 0xbb, hi: 0xbb}, + // Block 0x34, offset 0x135 + {value: 0x0000, lo: 0x02}, + {value: 0x8132, lo: 0x97, hi: 0x97}, + {value: 0x812d, lo: 0x98, hi: 0x98}, + // Block 0x35, offset 0x138 + {value: 0x0000, lo: 0x03}, + {value: 0x8104, lo: 0xa0, hi: 0xa0}, + {value: 0x8132, lo: 0xb5, hi: 0xbc}, + {value: 0x812d, lo: 0xbf, hi: 0xbf}, + // Block 0x36, offset 0x13c + {value: 0x0000, lo: 0x04}, + {value: 0x8132, lo: 0xb0, hi: 0xb4}, + {value: 0x812d, lo: 0xb5, hi: 0xba}, + {value: 0x8132, lo: 0xbb, hi: 0xbc}, + {value: 0x812d, lo: 0xbd, hi: 0xbd}, + // Block 0x37, offset 0x141 + {value: 0x0000, lo: 0x08}, + {value: 0x2d66, lo: 0x80, hi: 0x80}, + {value: 0x2d6e, lo: 0x81, hi: 0x81}, + {value: 0xa000, lo: 0x82, hi: 0x82}, + {value: 0x2d76, lo: 0x83, hi: 0x83}, + {value: 0x8104, lo: 0x84, hi: 0x84}, + {value: 0x8132, lo: 0xab, hi: 0xab}, + {value: 0x812d, lo: 0xac, hi: 0xac}, + {value: 0x8132, lo: 0xad, hi: 0xb3}, + // Block 0x38, offset 0x14a + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0xaa, hi: 0xab}, + // Block 0x39, offset 0x14c + {value: 0x0000, lo: 0x02}, + {value: 0x8102, lo: 0xa6, hi: 0xa6}, + {value: 0x8104, lo: 0xb2, hi: 0xb3}, + // Block 0x3a, offset 0x14f + {value: 0x0000, lo: 0x01}, + {value: 0x8102, lo: 0xb7, hi: 0xb7}, + // Block 0x3b, offset 0x151 + {value: 0x0000, lo: 0x0a}, + {value: 0x8132, lo: 0x90, hi: 0x92}, + {value: 0x8101, lo: 0x94, hi: 0x94}, + {value: 0x812d, lo: 0x95, hi: 0x99}, + {value: 0x8132, lo: 0x9a, hi: 0x9b}, + {value: 0x812d, lo: 0x9c, hi: 0x9f}, + {value: 0x8132, lo: 0xa0, hi: 0xa0}, + {value: 0x8101, lo: 0xa2, hi: 0xa8}, + {value: 0x812d, lo: 0xad, hi: 0xad}, + {value: 0x8132, lo: 0xb4, hi: 0xb4}, + {value: 0x8132, lo: 0xb8, hi: 0xb9}, + // Block 0x3c, offset 0x15c + {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 0x167 + {value: 0x0000, lo: 0x0d}, + {value: 0x0001, lo: 0x80, hi: 0x8a}, + {value: 0x043b, lo: 0x91, hi: 0x91}, + {value: 0x429b, lo: 0x97, hi: 0x97}, + {value: 0x001d, lo: 0xa4, hi: 0xa4}, + {value: 0x1873, lo: 0xa5, hi: 0xa5}, + {value: 0x1b5c, lo: 0xa6, hi: 0xa6}, + {value: 0x0001, lo: 0xaf, hi: 0xaf}, + {value: 0x2691, lo: 0xb3, hi: 0xb3}, + {value: 0x27fe, lo: 0xb4, hi: 0xb4}, + {value: 0x2698, lo: 0xb6, hi: 0xb6}, + {value: 0x2808, lo: 0xb7, hi: 0xb7}, + {value: 0x186d, lo: 0xbc, hi: 0xbc}, + {value: 0x4269, lo: 0xbe, hi: 0xbe}, + // Block 0x3e, offset 0x175 + {value: 0x0002, lo: 0x0d}, + {value: 0x1933, lo: 0x87, hi: 0x87}, + {value: 0x1930, lo: 0x88, hi: 0x88}, + {value: 0x1870, lo: 0x89, hi: 0x89}, + {value: 0x298e, 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: 0x0467, 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 0x183 + {value: 0x0002, lo: 0x0f}, + {value: 0x0021, lo: 0x80, hi: 0x89}, + {value: 0x0017, lo: 0x8a, hi: 0x8a}, + {value: 0x0467, 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: 0x1999, lo: 0xa8, hi: 0xa8}, + // Block 0x40, offset 0x193 + {value: 0x0000, lo: 0x0d}, + {value: 0x8132, lo: 0x90, hi: 0x91}, + {value: 0x8101, lo: 0x92, hi: 0x93}, + {value: 0x8132, lo: 0x94, hi: 0x97}, + {value: 0x8101, lo: 0x98, hi: 0x9a}, + {value: 0x8132, lo: 0x9b, hi: 0x9c}, + {value: 0x8132, lo: 0xa1, hi: 0xa1}, + {value: 0x8101, lo: 0xa5, hi: 0xa6}, + {value: 0x8132, lo: 0xa7, hi: 0xa7}, + {value: 0x812d, lo: 0xa8, hi: 0xa8}, + {value: 0x8132, lo: 0xa9, hi: 0xa9}, + {value: 0x8101, lo: 0xaa, hi: 0xab}, + {value: 0x812d, lo: 0xac, hi: 0xaf}, + {value: 0x8132, lo: 0xb0, hi: 0xb0}, + // Block 0x41, offset 0x1a1 + {value: 0x0007, lo: 0x06}, + {value: 0x2180, lo: 0x89, hi: 0x89}, + {value: 0xa000, lo: 0x90, hi: 0x90}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0xa000, lo: 0x94, hi: 0x94}, + {value: 0x3bb9, lo: 0x9a, hi: 0x9b}, + {value: 0x3bc7, lo: 0xae, hi: 0xae}, + // Block 0x42, offset 0x1a8 + {value: 0x000e, lo: 0x05}, + {value: 0x3bce, lo: 0x8d, hi: 0x8e}, + {value: 0x3bd5, 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 0x1ae + {value: 0x0173, lo: 0x0e}, + {value: 0xa000, lo: 0x83, hi: 0x83}, + {value: 0x3be3, lo: 0x84, hi: 0x84}, + {value: 0xa000, lo: 0x88, hi: 0x88}, + {value: 0x3bea, lo: 0x89, hi: 0x89}, + {value: 0xa000, lo: 0x8b, hi: 0x8b}, + {value: 0x3bf1, lo: 0x8c, hi: 0x8c}, + {value: 0xa000, lo: 0xa3, hi: 0xa3}, + {value: 0x3bf8, lo: 0xa4, hi: 0xa4}, + {value: 0xa000, lo: 0xa5, hi: 0xa5}, + {value: 0x3bff, lo: 0xa6, hi: 0xa6}, + {value: 0x269f, lo: 0xac, hi: 0xad}, + {value: 0x26a6, lo: 0xaf, hi: 0xaf}, + {value: 0x281c, lo: 0xb0, hi: 0xb0}, + {value: 0xa000, lo: 0xbc, hi: 0xbc}, + // Block 0x44, offset 0x1bd + {value: 0x0007, lo: 0x03}, + {value: 0x3c68, lo: 0xa0, hi: 0xa1}, + {value: 0x3c92, lo: 0xa2, hi: 0xa3}, + {value: 0x3cbc, lo: 0xaa, hi: 0xad}, + // Block 0x45, offset 0x1c1 + {value: 0x0004, lo: 0x01}, + {value: 0x048b, lo: 0xa9, hi: 0xaa}, + // Block 0x46, offset 0x1c3 + {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 0x1c7 + {value: 0x0000, lo: 0x01}, + {value: 0x299b, lo: 0x8c, hi: 0x8c}, + // Block 0x48, offset 0x1c9 + {value: 0x0263, lo: 0x02}, + {value: 0x1b8c, lo: 0xb4, hi: 0xb4}, + {value: 0x192d, lo: 0xb5, hi: 0xb6}, + // Block 0x49, offset 0x1cc + {value: 0x0000, lo: 0x01}, + {value: 0x44dd, lo: 0x9c, hi: 0x9c}, + // Block 0x4a, offset 0x1ce + {value: 0x0000, lo: 0x02}, + {value: 0x0095, lo: 0xbc, hi: 0xbc}, + {value: 0x006d, lo: 0xbd, hi: 0xbd}, + // Block 0x4b, offset 0x1d1 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xaf, hi: 0xb1}, + // Block 0x4c, offset 0x1d3 + {value: 0x0000, lo: 0x02}, + {value: 0x047f, lo: 0xaf, hi: 0xaf}, + {value: 0x8104, lo: 0xbf, hi: 0xbf}, + // Block 0x4d, offset 0x1d6 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xa0, hi: 0xbf}, + // Block 0x4e, offset 0x1d8 + {value: 0x0000, lo: 0x01}, + {value: 0x0dc3, lo: 0x9f, hi: 0x9f}, + // Block 0x4f, offset 0x1da + {value: 0x0000, lo: 0x01}, + {value: 0x162f, lo: 0xb3, hi: 0xb3}, + // Block 0x50, offset 0x1dc + {value: 0x0004, lo: 0x0b}, + {value: 0x1597, lo: 0x80, hi: 0x82}, + {value: 0x15af, lo: 0x83, hi: 0x83}, + {value: 0x15c7, lo: 0x84, hi: 0x85}, + {value: 0x15d7, lo: 0x86, hi: 0x89}, + {value: 0x15eb, lo: 0x8a, hi: 0x8c}, + {value: 0x15ff, lo: 0x8d, hi: 0x8d}, + {value: 0x1607, lo: 0x8e, hi: 0x8e}, + {value: 0x160f, lo: 0x8f, hi: 0x90}, + {value: 0x161b, lo: 0x91, hi: 0x93}, + {value: 0x162b, lo: 0x94, hi: 0x94}, + {value: 0x1633, lo: 0x95, hi: 0x95}, + // Block 0x51, offset 0x1e8 + {value: 0x0004, lo: 0x09}, + {value: 0x0001, lo: 0x80, hi: 0x80}, + {value: 0x812c, lo: 0xaa, hi: 0xaa}, + {value: 0x8131, lo: 0xab, hi: 0xab}, + {value: 0x8133, lo: 0xac, hi: 0xac}, + {value: 0x812e, lo: 0xad, hi: 0xad}, + {value: 0x812f, lo: 0xae, hi: 0xae}, + {value: 0x812f, lo: 0xaf, hi: 0xaf}, + {value: 0x04b3, lo: 0xb6, hi: 0xb6}, + {value: 0x0887, lo: 0xb8, hi: 0xba}, + // Block 0x52, offset 0x1f2 + {value: 0x0006, lo: 0x09}, + {value: 0x0313, lo: 0xb1, hi: 0xb1}, + {value: 0x0317, lo: 0xb2, hi: 0xb2}, + {value: 0x4a3b, lo: 0xb3, hi: 0xb3}, + {value: 0x031b, lo: 0xb4, hi: 0xb4}, + {value: 0x4a41, lo: 0xb5, hi: 0xb6}, + {value: 0x031f, lo: 0xb7, hi: 0xb7}, + {value: 0x0323, lo: 0xb8, hi: 0xb8}, + {value: 0x0327, lo: 0xb9, hi: 0xb9}, + {value: 0x4a4d, lo: 0xba, hi: 0xbf}, + // Block 0x53, offset 0x1fc + {value: 0x0000, lo: 0x02}, + {value: 0x8132, lo: 0xaf, hi: 0xaf}, + {value: 0x8132, lo: 0xb4, hi: 0xbd}, + // Block 0x54, offset 0x1ff + {value: 0x0000, lo: 0x03}, + {value: 0x020f, lo: 0x9c, hi: 0x9c}, + {value: 0x0212, lo: 0x9d, hi: 0x9d}, + {value: 0x8132, lo: 0x9e, hi: 0x9f}, + // Block 0x55, offset 0x203 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xb0, hi: 0xb1}, + // Block 0x56, offset 0x205 + {value: 0x0000, lo: 0x01}, + {value: 0x163b, lo: 0xb0, hi: 0xb0}, + // Block 0x57, offset 0x207 + {value: 0x000c, lo: 0x01}, + {value: 0x00d7, lo: 0xb8, hi: 0xb9}, + // Block 0x58, offset 0x209 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0x86, hi: 0x86}, + // Block 0x59, offset 0x20b + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x84, hi: 0x84}, + {value: 0x8132, lo: 0xa0, hi: 0xb1}, + // Block 0x5a, offset 0x20e + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0xab, hi: 0xad}, + // Block 0x5b, offset 0x210 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0x93, hi: 0x93}, + // Block 0x5c, offset 0x212 + {value: 0x0000, lo: 0x01}, + {value: 0x8102, lo: 0xb3, hi: 0xb3}, + // Block 0x5d, offset 0x214 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0x80, hi: 0x80}, + // Block 0x5e, offset 0x216 + {value: 0x0000, lo: 0x05}, + {value: 0x8132, lo: 0xb0, hi: 0xb0}, + {value: 0x8132, lo: 0xb2, hi: 0xb3}, + {value: 0x812d, lo: 0xb4, hi: 0xb4}, + {value: 0x8132, lo: 0xb7, hi: 0xb8}, + {value: 0x8132, lo: 0xbe, hi: 0xbf}, + // Block 0x5f, offset 0x21c + {value: 0x0000, lo: 0x02}, + {value: 0x8132, lo: 0x81, hi: 0x81}, + {value: 0x8104, lo: 0xb6, hi: 0xb6}, + // Block 0x60, offset 0x21f + {value: 0x0008, lo: 0x03}, + {value: 0x1637, lo: 0x9c, hi: 0x9d}, + {value: 0x0125, lo: 0x9e, hi: 0x9e}, + {value: 0x1643, lo: 0x9f, hi: 0x9f}, + // Block 0x61, offset 0x223 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0xad, hi: 0xad}, + // Block 0x62, offset 0x225 + {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 0x22c + {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 0x232 + {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 0x238 + {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 0x240 + {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 0x246 + {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 0x24c + {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 0x252 + {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 0x256 + {value: 0x0002, lo: 0x01}, + {value: 0x0003, lo: 0x81, hi: 0xbf}, + // Block 0x6b, offset 0x258 + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0xbd, hi: 0xbd}, + // Block 0x6c, offset 0x25a + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0xa0, hi: 0xa0}, + // Block 0x6d, offset 0x25c + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xb6, hi: 0xba}, + // Block 0x6e, offset 0x25e + {value: 0x002c, lo: 0x05}, + {value: 0x812d, lo: 0x8d, hi: 0x8d}, + {value: 0x8132, lo: 0x8f, hi: 0x8f}, + {value: 0x8132, lo: 0xb8, hi: 0xb8}, + {value: 0x8101, lo: 0xb9, hi: 0xba}, + {value: 0x8104, lo: 0xbf, hi: 0xbf}, + // Block 0x6f, offset 0x264 + {value: 0x0000, lo: 0x02}, + {value: 0x8132, lo: 0xa5, hi: 0xa5}, + {value: 0x812d, lo: 0xa6, hi: 0xa6}, + // Block 0x70, offset 0x267 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x86, hi: 0x86}, + {value: 0x8104, lo: 0xbf, hi: 0xbf}, + // Block 0x71, offset 0x26a + {value: 0x17fe, lo: 0x07}, + {value: 0xa000, lo: 0x99, hi: 0x99}, + {value: 0x4238, lo: 0x9a, hi: 0x9a}, + {value: 0xa000, lo: 0x9b, hi: 0x9b}, + {value: 0x4242, lo: 0x9c, hi: 0x9c}, + {value: 0xa000, lo: 0xa5, hi: 0xa5}, + {value: 0x424c, lo: 0xab, hi: 0xab}, + {value: 0x8104, lo: 0xb9, hi: 0xba}, + // Block 0x72, offset 0x272 + {value: 0x0000, lo: 0x06}, + {value: 0x8132, lo: 0x80, hi: 0x82}, + {value: 0x9900, lo: 0xa7, hi: 0xa7}, + {value: 0x2d7e, lo: 0xae, hi: 0xae}, + {value: 0x2d88, lo: 0xaf, hi: 0xaf}, + {value: 0xa000, lo: 0xb1, hi: 0xb2}, + {value: 0x8104, lo: 0xb3, hi: 0xb4}, + // Block 0x73, offset 0x279 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x80, hi: 0x80}, + {value: 0x8102, lo: 0x8a, hi: 0x8a}, + // Block 0x74, offset 0x27c + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0xb5, hi: 0xb5}, + {value: 0x8102, lo: 0xb6, hi: 0xb6}, + // Block 0x75, offset 0x27f + {value: 0x0002, lo: 0x01}, + {value: 0x8102, lo: 0xa9, hi: 0xaa}, + // Block 0x76, offset 0x281 + {value: 0x0000, lo: 0x07}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0x2d92, lo: 0x8b, hi: 0x8b}, + {value: 0x2d9c, lo: 0x8c, hi: 0x8c}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + {value: 0x8132, lo: 0xa6, hi: 0xac}, + {value: 0x8132, lo: 0xb0, hi: 0xb4}, + // Block 0x77, offset 0x289 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x82, hi: 0x82}, + {value: 0x8102, lo: 0x86, hi: 0x86}, + // Block 0x78, offset 0x28c + {value: 0x6b5a, lo: 0x06}, + {value: 0x9900, lo: 0xb0, hi: 0xb0}, + {value: 0xa000, lo: 0xb9, hi: 0xb9}, + {value: 0x9900, lo: 0xba, hi: 0xba}, + {value: 0x2db0, lo: 0xbb, hi: 0xbb}, + {value: 0x2da6, lo: 0xbc, hi: 0xbd}, + {value: 0x2dba, lo: 0xbe, hi: 0xbe}, + // Block 0x79, offset 0x293 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x82, hi: 0x82}, + {value: 0x8102, lo: 0x83, hi: 0x83}, + // Block 0x7a, offset 0x296 + {value: 0x0000, lo: 0x05}, + {value: 0x9900, lo: 0xaf, hi: 0xaf}, + {value: 0xa000, lo: 0xb8, hi: 0xb9}, + {value: 0x2dc4, lo: 0xba, hi: 0xba}, + {value: 0x2dce, lo: 0xbb, hi: 0xbb}, + {value: 0x8104, lo: 0xbf, hi: 0xbf}, + // Block 0x7b, offset 0x29c + {value: 0x0000, lo: 0x01}, + {value: 0x8102, lo: 0x80, hi: 0x80}, + // Block 0x7c, offset 0x29e + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0xbf, hi: 0xbf}, + // Block 0x7d, offset 0x2a0 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0xb6, hi: 0xb6}, + {value: 0x8102, lo: 0xb7, hi: 0xb7}, + // Block 0x7e, offset 0x2a3 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0xab, hi: 0xab}, + // Block 0x7f, offset 0x2a5 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0xb4, hi: 0xb4}, + // Block 0x80, offset 0x2a7 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0x87, hi: 0x87}, + // Block 0x81, offset 0x2a9 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0x99, hi: 0x99}, + // Block 0x82, offset 0x2ab + {value: 0x0000, lo: 0x02}, + {value: 0x8102, lo: 0x82, hi: 0x82}, + {value: 0x8104, lo: 0x84, hi: 0x85}, + // Block 0x83, offset 0x2ae + {value: 0x0000, lo: 0x01}, + {value: 0x8101, lo: 0xb0, hi: 0xb4}, + // Block 0x84, offset 0x2b0 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xb0, hi: 0xb6}, + // Block 0x85, offset 0x2b2 + {value: 0x0000, lo: 0x01}, + {value: 0x8101, lo: 0x9e, hi: 0x9e}, + // Block 0x86, offset 0x2b4 + {value: 0x0000, lo: 0x0c}, + {value: 0x45cc, lo: 0x9e, hi: 0x9e}, + {value: 0x45d6, lo: 0x9f, hi: 0x9f}, + {value: 0x460a, lo: 0xa0, hi: 0xa0}, + {value: 0x4618, lo: 0xa1, hi: 0xa1}, + {value: 0x4626, lo: 0xa2, hi: 0xa2}, + {value: 0x4634, lo: 0xa3, hi: 0xa3}, + {value: 0x4642, lo: 0xa4, hi: 0xa4}, + {value: 0x812b, lo: 0xa5, hi: 0xa6}, + {value: 0x8101, lo: 0xa7, hi: 0xa9}, + {value: 0x8130, lo: 0xad, hi: 0xad}, + {value: 0x812b, lo: 0xae, hi: 0xb2}, + {value: 0x812d, lo: 0xbb, hi: 0xbf}, + // Block 0x87, offset 0x2c1 + {value: 0x0000, lo: 0x09}, + {value: 0x812d, lo: 0x80, hi: 0x82}, + {value: 0x8132, lo: 0x85, hi: 0x89}, + {value: 0x812d, lo: 0x8a, hi: 0x8b}, + {value: 0x8132, lo: 0xaa, hi: 0xad}, + {value: 0x45e0, lo: 0xbb, hi: 0xbb}, + {value: 0x45ea, lo: 0xbc, hi: 0xbc}, + {value: 0x4650, lo: 0xbd, hi: 0xbd}, + {value: 0x466c, lo: 0xbe, hi: 0xbe}, + {value: 0x465e, lo: 0xbf, hi: 0xbf}, + // Block 0x88, offset 0x2cb + {value: 0x0000, lo: 0x01}, + {value: 0x467a, lo: 0x80, hi: 0x80}, + // Block 0x89, offset 0x2cd + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0x82, hi: 0x84}, + // Block 0x8a, offset 0x2cf + {value: 0x0002, lo: 0x03}, + {value: 0x0043, lo: 0x80, hi: 0x99}, + {value: 0x0083, lo: 0x9a, hi: 0xb3}, + {value: 0x0043, lo: 0xb4, hi: 0xbf}, + // Block 0x8b, offset 0x2d3 + {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 0x8c, offset 0x2d8 + {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 0x8d, offset 0x2e4 + {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 0x8e, offset 0x2e9 + {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 0x8f, offset 0x2f2 + {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 0x90, offset 0x2f8 + {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 0x91, offset 0x2fd + {value: 0x0002, lo: 0x03}, + {value: 0x008f, lo: 0x80, hi: 0x93}, + {value: 0x0043, lo: 0x94, hi: 0xad}, + {value: 0x0083, lo: 0xae, hi: 0xbf}, + // Block 0x92, offset 0x301 + {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 0x93, offset 0x306 + {value: 0x0002, lo: 0x03}, + {value: 0x004b, lo: 0x80, hi: 0x95}, + {value: 0x0083, lo: 0x96, hi: 0xaf}, + {value: 0x0043, lo: 0xb0, hi: 0xbf}, + // Block 0x94, offset 0x30a + {value: 0x0003, lo: 0x0f}, + {value: 0x01b8, lo: 0x80, hi: 0x80}, + {value: 0x045f, lo: 0x81, hi: 0x81}, + {value: 0x01bb, lo: 0x82, hi: 0x9a}, + {value: 0x045b, lo: 0x9b, hi: 0x9b}, + {value: 0x01c7, lo: 0x9c, hi: 0x9c}, + {value: 0x01d0, lo: 0x9d, hi: 0x9d}, + {value: 0x01d6, lo: 0x9e, hi: 0x9e}, + {value: 0x01fa, lo: 0x9f, hi: 0x9f}, + {value: 0x01eb, lo: 0xa0, hi: 0xa0}, + {value: 0x01e8, lo: 0xa1, hi: 0xa1}, + {value: 0x0173, lo: 0xa2, hi: 0xb2}, + {value: 0x0188, lo: 0xb3, hi: 0xb3}, + {value: 0x01a6, lo: 0xb4, hi: 0xba}, + {value: 0x045f, lo: 0xbb, hi: 0xbb}, + {value: 0x01bb, lo: 0xbc, hi: 0xbf}, + // Block 0x95, offset 0x31a + {value: 0x0003, lo: 0x0d}, + {value: 0x01c7, lo: 0x80, hi: 0x94}, + {value: 0x045b, lo: 0x95, hi: 0x95}, + {value: 0x01c7, lo: 0x96, hi: 0x96}, + {value: 0x01d0, lo: 0x97, hi: 0x97}, + {value: 0x01d6, lo: 0x98, hi: 0x98}, + {value: 0x01fa, lo: 0x99, hi: 0x99}, + {value: 0x01eb, lo: 0x9a, hi: 0x9a}, + {value: 0x01e8, lo: 0x9b, hi: 0x9b}, + {value: 0x0173, lo: 0x9c, hi: 0xac}, + {value: 0x0188, lo: 0xad, hi: 0xad}, + {value: 0x01a6, lo: 0xae, hi: 0xb4}, + {value: 0x045f, lo: 0xb5, hi: 0xb5}, + {value: 0x01bb, lo: 0xb6, hi: 0xbf}, + // Block 0x96, offset 0x328 + {value: 0x0003, lo: 0x0d}, + {value: 0x01d9, lo: 0x80, hi: 0x8e}, + {value: 0x045b, lo: 0x8f, hi: 0x8f}, + {value: 0x01c7, lo: 0x90, hi: 0x90}, + {value: 0x01d0, lo: 0x91, hi: 0x91}, + {value: 0x01d6, lo: 0x92, hi: 0x92}, + {value: 0x01fa, lo: 0x93, hi: 0x93}, + {value: 0x01eb, lo: 0x94, hi: 0x94}, + {value: 0x01e8, lo: 0x95, hi: 0x95}, + {value: 0x0173, lo: 0x96, hi: 0xa6}, + {value: 0x0188, lo: 0xa7, hi: 0xa7}, + {value: 0x01a6, lo: 0xa8, hi: 0xae}, + {value: 0x045f, lo: 0xaf, hi: 0xaf}, + {value: 0x01bb, lo: 0xb0, hi: 0xbf}, + // Block 0x97, offset 0x336 + {value: 0x0003, lo: 0x0d}, + {value: 0x01eb, lo: 0x80, hi: 0x88}, + {value: 0x045b, lo: 0x89, hi: 0x89}, + {value: 0x01c7, lo: 0x8a, hi: 0x8a}, + {value: 0x01d0, lo: 0x8b, hi: 0x8b}, + {value: 0x01d6, lo: 0x8c, hi: 0x8c}, + {value: 0x01fa, lo: 0x8d, hi: 0x8d}, + {value: 0x01eb, lo: 0x8e, hi: 0x8e}, + {value: 0x01e8, lo: 0x8f, hi: 0x8f}, + {value: 0x0173, lo: 0x90, hi: 0xa0}, + {value: 0x0188, lo: 0xa1, hi: 0xa1}, + {value: 0x01a6, lo: 0xa2, hi: 0xa8}, + {value: 0x045f, lo: 0xa9, hi: 0xa9}, + {value: 0x01bb, lo: 0xaa, hi: 0xbf}, + // Block 0x98, offset 0x344 + {value: 0x0000, lo: 0x05}, + {value: 0x8132, lo: 0x80, hi: 0x86}, + {value: 0x8132, lo: 0x88, hi: 0x98}, + {value: 0x8132, lo: 0x9b, hi: 0xa1}, + {value: 0x8132, lo: 0xa3, hi: 0xa4}, + {value: 0x8132, lo: 0xa6, hi: 0xaa}, + // Block 0x99, offset 0x34a + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0x90, hi: 0x96}, + // Block 0x9a, offset 0x34c + {value: 0x0000, lo: 0x02}, + {value: 0x8132, lo: 0x84, hi: 0x89}, + {value: 0x8102, lo: 0x8a, hi: 0x8a}, + // Block 0x9b, offset 0x34f + {value: 0x0002, lo: 0x09}, + {value: 0x0063, lo: 0x80, hi: 0x89}, + {value: 0x1951, lo: 0x8a, hi: 0x8a}, + {value: 0x1981, lo: 0x8b, hi: 0x8b}, + {value: 0x199c, lo: 0x8c, hi: 0x8c}, + {value: 0x19a2, lo: 0x8d, hi: 0x8d}, + {value: 0x1bc0, lo: 0x8e, hi: 0x8e}, + {value: 0x19ae, lo: 0x8f, hi: 0x8f}, + {value: 0x197b, lo: 0xaa, hi: 0xaa}, + {value: 0x197e, lo: 0xab, hi: 0xab}, + // Block 0x9c, offset 0x359 + {value: 0x0000, lo: 0x01}, + {value: 0x193f, lo: 0x90, hi: 0x90}, + // Block 0x9d, offset 0x35b + {value: 0x0028, lo: 0x09}, + {value: 0x2862, lo: 0x80, hi: 0x80}, + {value: 0x2826, lo: 0x81, hi: 0x81}, + {value: 0x2830, lo: 0x82, hi: 0x82}, + {value: 0x2844, lo: 0x83, hi: 0x84}, + {value: 0x284e, lo: 0x85, hi: 0x86}, + {value: 0x283a, lo: 0x87, hi: 0x87}, + {value: 0x2858, lo: 0x88, hi: 0x88}, + {value: 0x0b6f, lo: 0x90, hi: 0x90}, + {value: 0x08e7, lo: 0x91, hi: 0x91}, +} + +// recompMap: 7520 bytes (entries only) +var recompMap = map[uint32]rune{ + 0x00410300: 0x00C0, + 0x00410301: 0x00C1, + 0x00410302: 0x00C2, + 0x00410303: 0x00C3, + 0x00410308: 0x00C4, + 0x0041030A: 0x00C5, + 0x00430327: 0x00C7, + 0x00450300: 0x00C8, + 0x00450301: 0x00C9, + 0x00450302: 0x00CA, + 0x00450308: 0x00CB, + 0x00490300: 0x00CC, + 0x00490301: 0x00CD, + 0x00490302: 0x00CE, + 0x00490308: 0x00CF, + 0x004E0303: 0x00D1, + 0x004F0300: 0x00D2, + 0x004F0301: 0x00D3, + 0x004F0302: 0x00D4, + 0x004F0303: 0x00D5, + 0x004F0308: 0x00D6, + 0x00550300: 0x00D9, + 0x00550301: 0x00DA, + 0x00550302: 0x00DB, + 0x00550308: 0x00DC, + 0x00590301: 0x00DD, + 0x00610300: 0x00E0, + 0x00610301: 0x00E1, + 0x00610302: 0x00E2, + 0x00610303: 0x00E3, + 0x00610308: 0x00E4, + 0x0061030A: 0x00E5, + 0x00630327: 0x00E7, + 0x00650300: 0x00E8, + 0x00650301: 0x00E9, + 0x00650302: 0x00EA, + 0x00650308: 0x00EB, + 0x00690300: 0x00EC, + 0x00690301: 0x00ED, + 0x00690302: 0x00EE, + 0x00690308: 0x00EF, + 0x006E0303: 0x00F1, + 0x006F0300: 0x00F2, + 0x006F0301: 0x00F3, + 0x006F0302: 0x00F4, + 0x006F0303: 0x00F5, + 0x006F0308: 0x00F6, + 0x00750300: 0x00F9, + 0x00750301: 0x00FA, + 0x00750302: 0x00FB, + 0x00750308: 0x00FC, + 0x00790301: 0x00FD, + 0x00790308: 0x00FF, + 0x00410304: 0x0100, + 0x00610304: 0x0101, + 0x00410306: 0x0102, + 0x00610306: 0x0103, + 0x00410328: 0x0104, + 0x00610328: 0x0105, + 0x00430301: 0x0106, + 0x00630301: 0x0107, + 0x00430302: 0x0108, + 0x00630302: 0x0109, + 0x00430307: 0x010A, + 0x00630307: 0x010B, + 0x0043030C: 0x010C, + 0x0063030C: 0x010D, + 0x0044030C: 0x010E, + 0x0064030C: 0x010F, + 0x00450304: 0x0112, + 0x00650304: 0x0113, + 0x00450306: 0x0114, + 0x00650306: 0x0115, + 0x00450307: 0x0116, + 0x00650307: 0x0117, + 0x00450328: 0x0118, + 0x00650328: 0x0119, + 0x0045030C: 0x011A, + 0x0065030C: 0x011B, + 0x00470302: 0x011C, + 0x00670302: 0x011D, + 0x00470306: 0x011E, + 0x00670306: 0x011F, + 0x00470307: 0x0120, + 0x00670307: 0x0121, + 0x00470327: 0x0122, + 0x00670327: 0x0123, + 0x00480302: 0x0124, + 0x00680302: 0x0125, + 0x00490303: 0x0128, + 0x00690303: 0x0129, + 0x00490304: 0x012A, + 0x00690304: 0x012B, + 0x00490306: 0x012C, + 0x00690306: 0x012D, + 0x00490328: 0x012E, + 0x00690328: 0x012F, + 0x00490307: 0x0130, + 0x004A0302: 0x0134, + 0x006A0302: 0x0135, + 0x004B0327: 0x0136, + 0x006B0327: 0x0137, + 0x004C0301: 0x0139, + 0x006C0301: 0x013A, + 0x004C0327: 0x013B, + 0x006C0327: 0x013C, + 0x004C030C: 0x013D, + 0x006C030C: 0x013E, + 0x004E0301: 0x0143, + 0x006E0301: 0x0144, + 0x004E0327: 0x0145, + 0x006E0327: 0x0146, + 0x004E030C: 0x0147, + 0x006E030C: 0x0148, + 0x004F0304: 0x014C, + 0x006F0304: 0x014D, + 0x004F0306: 0x014E, + 0x006F0306: 0x014F, + 0x004F030B: 0x0150, + 0x006F030B: 0x0151, + 0x00520301: 0x0154, + 0x00720301: 0x0155, + 0x00520327: 0x0156, + 0x00720327: 0x0157, + 0x0052030C: 0x0158, + 0x0072030C: 0x0159, + 0x00530301: 0x015A, + 0x00730301: 0x015B, + 0x00530302: 0x015C, + 0x00730302: 0x015D, + 0x00530327: 0x015E, + 0x00730327: 0x015F, + 0x0053030C: 0x0160, + 0x0073030C: 0x0161, + 0x00540327: 0x0162, + 0x00740327: 0x0163, + 0x0054030C: 0x0164, + 0x0074030C: 0x0165, + 0x00550303: 0x0168, + 0x00750303: 0x0169, + 0x00550304: 0x016A, + 0x00750304: 0x016B, + 0x00550306: 0x016C, + 0x00750306: 0x016D, + 0x0055030A: 0x016E, + 0x0075030A: 0x016F, + 0x0055030B: 0x0170, + 0x0075030B: 0x0171, + 0x00550328: 0x0172, + 0x00750328: 0x0173, + 0x00570302: 0x0174, + 0x00770302: 0x0175, + 0x00590302: 0x0176, + 0x00790302: 0x0177, + 0x00590308: 0x0178, + 0x005A0301: 0x0179, + 0x007A0301: 0x017A, + 0x005A0307: 0x017B, + 0x007A0307: 0x017C, + 0x005A030C: 0x017D, + 0x007A030C: 0x017E, + 0x004F031B: 0x01A0, + 0x006F031B: 0x01A1, + 0x0055031B: 0x01AF, + 0x0075031B: 0x01B0, + 0x0041030C: 0x01CD, + 0x0061030C: 0x01CE, + 0x0049030C: 0x01CF, + 0x0069030C: 0x01D0, + 0x004F030C: 0x01D1, + 0x006F030C: 0x01D2, + 0x0055030C: 0x01D3, + 0x0075030C: 0x01D4, + 0x00DC0304: 0x01D5, + 0x00FC0304: 0x01D6, + 0x00DC0301: 0x01D7, + 0x00FC0301: 0x01D8, + 0x00DC030C: 0x01D9, + 0x00FC030C: 0x01DA, + 0x00DC0300: 0x01DB, + 0x00FC0300: 0x01DC, + 0x00C40304: 0x01DE, + 0x00E40304: 0x01DF, + 0x02260304: 0x01E0, + 0x02270304: 0x01E1, + 0x00C60304: 0x01E2, + 0x00E60304: 0x01E3, + 0x0047030C: 0x01E6, + 0x0067030C: 0x01E7, + 0x004B030C: 0x01E8, + 0x006B030C: 0x01E9, + 0x004F0328: 0x01EA, + 0x006F0328: 0x01EB, + 0x01EA0304: 0x01EC, + 0x01EB0304: 0x01ED, + 0x01B7030C: 0x01EE, + 0x0292030C: 0x01EF, + 0x006A030C: 0x01F0, + 0x00470301: 0x01F4, + 0x00670301: 0x01F5, + 0x004E0300: 0x01F8, + 0x006E0300: 0x01F9, + 0x00C50301: 0x01FA, + 0x00E50301: 0x01FB, + 0x00C60301: 0x01FC, + 0x00E60301: 0x01FD, + 0x00D80301: 0x01FE, + 0x00F80301: 0x01FF, + 0x0041030F: 0x0200, + 0x0061030F: 0x0201, + 0x00410311: 0x0202, + 0x00610311: 0x0203, + 0x0045030F: 0x0204, + 0x0065030F: 0x0205, + 0x00450311: 0x0206, + 0x00650311: 0x0207, + 0x0049030F: 0x0208, + 0x0069030F: 0x0209, + 0x00490311: 0x020A, + 0x00690311: 0x020B, + 0x004F030F: 0x020C, + 0x006F030F: 0x020D, + 0x004F0311: 0x020E, + 0x006F0311: 0x020F, + 0x0052030F: 0x0210, + 0x0072030F: 0x0211, + 0x00520311: 0x0212, + 0x00720311: 0x0213, + 0x0055030F: 0x0214, + 0x0075030F: 0x0215, + 0x00550311: 0x0216, + 0x00750311: 0x0217, + 0x00530326: 0x0218, + 0x00730326: 0x0219, + 0x00540326: 0x021A, + 0x00740326: 0x021B, + 0x0048030C: 0x021E, + 0x0068030C: 0x021F, + 0x00410307: 0x0226, + 0x00610307: 0x0227, + 0x00450327: 0x0228, + 0x00650327: 0x0229, + 0x00D60304: 0x022A, + 0x00F60304: 0x022B, + 0x00D50304: 0x022C, + 0x00F50304: 0x022D, + 0x004F0307: 0x022E, + 0x006F0307: 0x022F, + 0x022E0304: 0x0230, + 0x022F0304: 0x0231, + 0x00590304: 0x0232, + 0x00790304: 0x0233, + 0x00A80301: 0x0385, + 0x03910301: 0x0386, + 0x03950301: 0x0388, + 0x03970301: 0x0389, + 0x03990301: 0x038A, + 0x039F0301: 0x038C, + 0x03A50301: 0x038E, + 0x03A90301: 0x038F, + 0x03CA0301: 0x0390, + 0x03990308: 0x03AA, + 0x03A50308: 0x03AB, + 0x03B10301: 0x03AC, + 0x03B50301: 0x03AD, + 0x03B70301: 0x03AE, + 0x03B90301: 0x03AF, + 0x03CB0301: 0x03B0, + 0x03B90308: 0x03CA, + 0x03C50308: 0x03CB, + 0x03BF0301: 0x03CC, + 0x03C50301: 0x03CD, + 0x03C90301: 0x03CE, + 0x03D20301: 0x03D3, + 0x03D20308: 0x03D4, + 0x04150300: 0x0400, + 0x04150308: 0x0401, + 0x04130301: 0x0403, + 0x04060308: 0x0407, + 0x041A0301: 0x040C, + 0x04180300: 0x040D, + 0x04230306: 0x040E, + 0x04180306: 0x0419, + 0x04380306: 0x0439, + 0x04350300: 0x0450, + 0x04350308: 0x0451, + 0x04330301: 0x0453, + 0x04560308: 0x0457, + 0x043A0301: 0x045C, + 0x04380300: 0x045D, + 0x04430306: 0x045E, + 0x0474030F: 0x0476, + 0x0475030F: 0x0477, + 0x04160306: 0x04C1, + 0x04360306: 0x04C2, + 0x04100306: 0x04D0, + 0x04300306: 0x04D1, + 0x04100308: 0x04D2, + 0x04300308: 0x04D3, + 0x04150306: 0x04D6, + 0x04350306: 0x04D7, + 0x04D80308: 0x04DA, + 0x04D90308: 0x04DB, + 0x04160308: 0x04DC, + 0x04360308: 0x04DD, + 0x04170308: 0x04DE, + 0x04370308: 0x04DF, + 0x04180304: 0x04E2, + 0x04380304: 0x04E3, + 0x04180308: 0x04E4, + 0x04380308: 0x04E5, + 0x041E0308: 0x04E6, + 0x043E0308: 0x04E7, + 0x04E80308: 0x04EA, + 0x04E90308: 0x04EB, + 0x042D0308: 0x04EC, + 0x044D0308: 0x04ED, + 0x04230304: 0x04EE, + 0x04430304: 0x04EF, + 0x04230308: 0x04F0, + 0x04430308: 0x04F1, + 0x0423030B: 0x04F2, + 0x0443030B: 0x04F3, + 0x04270308: 0x04F4, + 0x04470308: 0x04F5, + 0x042B0308: 0x04F8, + 0x044B0308: 0x04F9, + 0x06270653: 0x0622, + 0x06270654: 0x0623, + 0x06480654: 0x0624, + 0x06270655: 0x0625, + 0x064A0654: 0x0626, + 0x06D50654: 0x06C0, + 0x06C10654: 0x06C2, + 0x06D20654: 0x06D3, + 0x0928093C: 0x0929, + 0x0930093C: 0x0931, + 0x0933093C: 0x0934, + 0x09C709BE: 0x09CB, + 0x09C709D7: 0x09CC, + 0x0B470B56: 0x0B48, + 0x0B470B3E: 0x0B4B, + 0x0B470B57: 0x0B4C, + 0x0B920BD7: 0x0B94, + 0x0BC60BBE: 0x0BCA, + 0x0BC70BBE: 0x0BCB, + 0x0BC60BD7: 0x0BCC, + 0x0C460C56: 0x0C48, + 0x0CBF0CD5: 0x0CC0, + 0x0CC60CD5: 0x0CC7, + 0x0CC60CD6: 0x0CC8, + 0x0CC60CC2: 0x0CCA, + 0x0CCA0CD5: 0x0CCB, + 0x0D460D3E: 0x0D4A, + 0x0D470D3E: 0x0D4B, + 0x0D460D57: 0x0D4C, + 0x0DD90DCA: 0x0DDA, + 0x0DD90DCF: 0x0DDC, + 0x0DDC0DCA: 0x0DDD, + 0x0DD90DDF: 0x0DDE, + 0x1025102E: 0x1026, + 0x1B051B35: 0x1B06, + 0x1B071B35: 0x1B08, + 0x1B091B35: 0x1B0A, + 0x1B0B1B35: 0x1B0C, + 0x1B0D1B35: 0x1B0E, + 0x1B111B35: 0x1B12, + 0x1B3A1B35: 0x1B3B, + 0x1B3C1B35: 0x1B3D, + 0x1B3E1B35: 0x1B40, + 0x1B3F1B35: 0x1B41, + 0x1B421B35: 0x1B43, + 0x00410325: 0x1E00, + 0x00610325: 0x1E01, + 0x00420307: 0x1E02, + 0x00620307: 0x1E03, + 0x00420323: 0x1E04, + 0x00620323: 0x1E05, + 0x00420331: 0x1E06, + 0x00620331: 0x1E07, + 0x00C70301: 0x1E08, + 0x00E70301: 0x1E09, + 0x00440307: 0x1E0A, + 0x00640307: 0x1E0B, + 0x00440323: 0x1E0C, + 0x00640323: 0x1E0D, + 0x00440331: 0x1E0E, + 0x00640331: 0x1E0F, + 0x00440327: 0x1E10, + 0x00640327: 0x1E11, + 0x0044032D: 0x1E12, + 0x0064032D: 0x1E13, + 0x01120300: 0x1E14, + 0x01130300: 0x1E15, + 0x01120301: 0x1E16, + 0x01130301: 0x1E17, + 0x0045032D: 0x1E18, + 0x0065032D: 0x1E19, + 0x00450330: 0x1E1A, + 0x00650330: 0x1E1B, + 0x02280306: 0x1E1C, + 0x02290306: 0x1E1D, + 0x00460307: 0x1E1E, + 0x00660307: 0x1E1F, + 0x00470304: 0x1E20, + 0x00670304: 0x1E21, + 0x00480307: 0x1E22, + 0x00680307: 0x1E23, + 0x00480323: 0x1E24, + 0x00680323: 0x1E25, + 0x00480308: 0x1E26, + 0x00680308: 0x1E27, + 0x00480327: 0x1E28, + 0x00680327: 0x1E29, + 0x0048032E: 0x1E2A, + 0x0068032E: 0x1E2B, + 0x00490330: 0x1E2C, + 0x00690330: 0x1E2D, + 0x00CF0301: 0x1E2E, + 0x00EF0301: 0x1E2F, + 0x004B0301: 0x1E30, + 0x006B0301: 0x1E31, + 0x004B0323: 0x1E32, + 0x006B0323: 0x1E33, + 0x004B0331: 0x1E34, + 0x006B0331: 0x1E35, + 0x004C0323: 0x1E36, + 0x006C0323: 0x1E37, + 0x1E360304: 0x1E38, + 0x1E370304: 0x1E39, + 0x004C0331: 0x1E3A, + 0x006C0331: 0x1E3B, + 0x004C032D: 0x1E3C, + 0x006C032D: 0x1E3D, + 0x004D0301: 0x1E3E, + 0x006D0301: 0x1E3F, + 0x004D0307: 0x1E40, + 0x006D0307: 0x1E41, + 0x004D0323: 0x1E42, + 0x006D0323: 0x1E43, + 0x004E0307: 0x1E44, + 0x006E0307: 0x1E45, + 0x004E0323: 0x1E46, + 0x006E0323: 0x1E47, + 0x004E0331: 0x1E48, + 0x006E0331: 0x1E49, + 0x004E032D: 0x1E4A, + 0x006E032D: 0x1E4B, + 0x00D50301: 0x1E4C, + 0x00F50301: 0x1E4D, + 0x00D50308: 0x1E4E, + 0x00F50308: 0x1E4F, + 0x014C0300: 0x1E50, + 0x014D0300: 0x1E51, + 0x014C0301: 0x1E52, + 0x014D0301: 0x1E53, + 0x00500301: 0x1E54, + 0x00700301: 0x1E55, + 0x00500307: 0x1E56, + 0x00700307: 0x1E57, + 0x00520307: 0x1E58, + 0x00720307: 0x1E59, + 0x00520323: 0x1E5A, + 0x00720323: 0x1E5B, + 0x1E5A0304: 0x1E5C, + 0x1E5B0304: 0x1E5D, + 0x00520331: 0x1E5E, + 0x00720331: 0x1E5F, + 0x00530307: 0x1E60, + 0x00730307: 0x1E61, + 0x00530323: 0x1E62, + 0x00730323: 0x1E63, + 0x015A0307: 0x1E64, + 0x015B0307: 0x1E65, + 0x01600307: 0x1E66, + 0x01610307: 0x1E67, + 0x1E620307: 0x1E68, + 0x1E630307: 0x1E69, + 0x00540307: 0x1E6A, + 0x00740307: 0x1E6B, + 0x00540323: 0x1E6C, + 0x00740323: 0x1E6D, + 0x00540331: 0x1E6E, + 0x00740331: 0x1E6F, + 0x0054032D: 0x1E70, + 0x0074032D: 0x1E71, + 0x00550324: 0x1E72, + 0x00750324: 0x1E73, + 0x00550330: 0x1E74, + 0x00750330: 0x1E75, + 0x0055032D: 0x1E76, + 0x0075032D: 0x1E77, + 0x01680301: 0x1E78, + 0x01690301: 0x1E79, + 0x016A0308: 0x1E7A, + 0x016B0308: 0x1E7B, + 0x00560303: 0x1E7C, + 0x00760303: 0x1E7D, + 0x00560323: 0x1E7E, + 0x00760323: 0x1E7F, + 0x00570300: 0x1E80, + 0x00770300: 0x1E81, + 0x00570301: 0x1E82, + 0x00770301: 0x1E83, + 0x00570308: 0x1E84, + 0x00770308: 0x1E85, + 0x00570307: 0x1E86, + 0x00770307: 0x1E87, + 0x00570323: 0x1E88, + 0x00770323: 0x1E89, + 0x00580307: 0x1E8A, + 0x00780307: 0x1E8B, + 0x00580308: 0x1E8C, + 0x00780308: 0x1E8D, + 0x00590307: 0x1E8E, + 0x00790307: 0x1E8F, + 0x005A0302: 0x1E90, + 0x007A0302: 0x1E91, + 0x005A0323: 0x1E92, + 0x007A0323: 0x1E93, + 0x005A0331: 0x1E94, + 0x007A0331: 0x1E95, + 0x00680331: 0x1E96, + 0x00740308: 0x1E97, + 0x0077030A: 0x1E98, + 0x0079030A: 0x1E99, + 0x017F0307: 0x1E9B, + 0x00410323: 0x1EA0, + 0x00610323: 0x1EA1, + 0x00410309: 0x1EA2, + 0x00610309: 0x1EA3, + 0x00C20301: 0x1EA4, + 0x00E20301: 0x1EA5, + 0x00C20300: 0x1EA6, + 0x00E20300: 0x1EA7, + 0x00C20309: 0x1EA8, + 0x00E20309: 0x1EA9, + 0x00C20303: 0x1EAA, + 0x00E20303: 0x1EAB, + 0x1EA00302: 0x1EAC, + 0x1EA10302: 0x1EAD, + 0x01020301: 0x1EAE, + 0x01030301: 0x1EAF, + 0x01020300: 0x1EB0, + 0x01030300: 0x1EB1, + 0x01020309: 0x1EB2, + 0x01030309: 0x1EB3, + 0x01020303: 0x1EB4, + 0x01030303: 0x1EB5, + 0x1EA00306: 0x1EB6, + 0x1EA10306: 0x1EB7, + 0x00450323: 0x1EB8, + 0x00650323: 0x1EB9, + 0x00450309: 0x1EBA, + 0x00650309: 0x1EBB, + 0x00450303: 0x1EBC, + 0x00650303: 0x1EBD, + 0x00CA0301: 0x1EBE, + 0x00EA0301: 0x1EBF, + 0x00CA0300: 0x1EC0, + 0x00EA0300: 0x1EC1, + 0x00CA0309: 0x1EC2, + 0x00EA0309: 0x1EC3, + 0x00CA0303: 0x1EC4, + 0x00EA0303: 0x1EC5, + 0x1EB80302: 0x1EC6, + 0x1EB90302: 0x1EC7, + 0x00490309: 0x1EC8, + 0x00690309: 0x1EC9, + 0x00490323: 0x1ECA, + 0x00690323: 0x1ECB, + 0x004F0323: 0x1ECC, + 0x006F0323: 0x1ECD, + 0x004F0309: 0x1ECE, + 0x006F0309: 0x1ECF, + 0x00D40301: 0x1ED0, + 0x00F40301: 0x1ED1, + 0x00D40300: 0x1ED2, + 0x00F40300: 0x1ED3, + 0x00D40309: 0x1ED4, + 0x00F40309: 0x1ED5, + 0x00D40303: 0x1ED6, + 0x00F40303: 0x1ED7, + 0x1ECC0302: 0x1ED8, + 0x1ECD0302: 0x1ED9, + 0x01A00301: 0x1EDA, + 0x01A10301: 0x1EDB, + 0x01A00300: 0x1EDC, + 0x01A10300: 0x1EDD, + 0x01A00309: 0x1EDE, + 0x01A10309: 0x1EDF, + 0x01A00303: 0x1EE0, + 0x01A10303: 0x1EE1, + 0x01A00323: 0x1EE2, + 0x01A10323: 0x1EE3, + 0x00550323: 0x1EE4, + 0x00750323: 0x1EE5, + 0x00550309: 0x1EE6, + 0x00750309: 0x1EE7, + 0x01AF0301: 0x1EE8, + 0x01B00301: 0x1EE9, + 0x01AF0300: 0x1EEA, + 0x01B00300: 0x1EEB, + 0x01AF0309: 0x1EEC, + 0x01B00309: 0x1EED, + 0x01AF0303: 0x1EEE, + 0x01B00303: 0x1EEF, + 0x01AF0323: 0x1EF0, + 0x01B00323: 0x1EF1, + 0x00590300: 0x1EF2, + 0x00790300: 0x1EF3, + 0x00590323: 0x1EF4, + 0x00790323: 0x1EF5, + 0x00590309: 0x1EF6, + 0x00790309: 0x1EF7, + 0x00590303: 0x1EF8, + 0x00790303: 0x1EF9, + 0x03B10313: 0x1F00, + 0x03B10314: 0x1F01, + 0x1F000300: 0x1F02, + 0x1F010300: 0x1F03, + 0x1F000301: 0x1F04, + 0x1F010301: 0x1F05, + 0x1F000342: 0x1F06, + 0x1F010342: 0x1F07, + 0x03910313: 0x1F08, + 0x03910314: 0x1F09, + 0x1F080300: 0x1F0A, + 0x1F090300: 0x1F0B, + 0x1F080301: 0x1F0C, + 0x1F090301: 0x1F0D, + 0x1F080342: 0x1F0E, + 0x1F090342: 0x1F0F, + 0x03B50313: 0x1F10, + 0x03B50314: 0x1F11, + 0x1F100300: 0x1F12, + 0x1F110300: 0x1F13, + 0x1F100301: 0x1F14, + 0x1F110301: 0x1F15, + 0x03950313: 0x1F18, + 0x03950314: 0x1F19, + 0x1F180300: 0x1F1A, + 0x1F190300: 0x1F1B, + 0x1F180301: 0x1F1C, + 0x1F190301: 0x1F1D, + 0x03B70313: 0x1F20, + 0x03B70314: 0x1F21, + 0x1F200300: 0x1F22, + 0x1F210300: 0x1F23, + 0x1F200301: 0x1F24, + 0x1F210301: 0x1F25, + 0x1F200342: 0x1F26, + 0x1F210342: 0x1F27, + 0x03970313: 0x1F28, + 0x03970314: 0x1F29, + 0x1F280300: 0x1F2A, + 0x1F290300: 0x1F2B, + 0x1F280301: 0x1F2C, + 0x1F290301: 0x1F2D, + 0x1F280342: 0x1F2E, + 0x1F290342: 0x1F2F, + 0x03B90313: 0x1F30, + 0x03B90314: 0x1F31, + 0x1F300300: 0x1F32, + 0x1F310300: 0x1F33, + 0x1F300301: 0x1F34, + 0x1F310301: 0x1F35, + 0x1F300342: 0x1F36, + 0x1F310342: 0x1F37, + 0x03990313: 0x1F38, + 0x03990314: 0x1F39, + 0x1F380300: 0x1F3A, + 0x1F390300: 0x1F3B, + 0x1F380301: 0x1F3C, + 0x1F390301: 0x1F3D, + 0x1F380342: 0x1F3E, + 0x1F390342: 0x1F3F, + 0x03BF0313: 0x1F40, + 0x03BF0314: 0x1F41, + 0x1F400300: 0x1F42, + 0x1F410300: 0x1F43, + 0x1F400301: 0x1F44, + 0x1F410301: 0x1F45, + 0x039F0313: 0x1F48, + 0x039F0314: 0x1F49, + 0x1F480300: 0x1F4A, + 0x1F490300: 0x1F4B, + 0x1F480301: 0x1F4C, + 0x1F490301: 0x1F4D, + 0x03C50313: 0x1F50, + 0x03C50314: 0x1F51, + 0x1F500300: 0x1F52, + 0x1F510300: 0x1F53, + 0x1F500301: 0x1F54, + 0x1F510301: 0x1F55, + 0x1F500342: 0x1F56, + 0x1F510342: 0x1F57, + 0x03A50314: 0x1F59, + 0x1F590300: 0x1F5B, + 0x1F590301: 0x1F5D, + 0x1F590342: 0x1F5F, + 0x03C90313: 0x1F60, + 0x03C90314: 0x1F61, + 0x1F600300: 0x1F62, + 0x1F610300: 0x1F63, + 0x1F600301: 0x1F64, + 0x1F610301: 0x1F65, + 0x1F600342: 0x1F66, + 0x1F610342: 0x1F67, + 0x03A90313: 0x1F68, + 0x03A90314: 0x1F69, + 0x1F680300: 0x1F6A, + 0x1F690300: 0x1F6B, + 0x1F680301: 0x1F6C, + 0x1F690301: 0x1F6D, + 0x1F680342: 0x1F6E, + 0x1F690342: 0x1F6F, + 0x03B10300: 0x1F70, + 0x03B50300: 0x1F72, + 0x03B70300: 0x1F74, + 0x03B90300: 0x1F76, + 0x03BF0300: 0x1F78, + 0x03C50300: 0x1F7A, + 0x03C90300: 0x1F7C, + 0x1F000345: 0x1F80, + 0x1F010345: 0x1F81, + 0x1F020345: 0x1F82, + 0x1F030345: 0x1F83, + 0x1F040345: 0x1F84, + 0x1F050345: 0x1F85, + 0x1F060345: 0x1F86, + 0x1F070345: 0x1F87, + 0x1F080345: 0x1F88, + 0x1F090345: 0x1F89, + 0x1F0A0345: 0x1F8A, + 0x1F0B0345: 0x1F8B, + 0x1F0C0345: 0x1F8C, + 0x1F0D0345: 0x1F8D, + 0x1F0E0345: 0x1F8E, + 0x1F0F0345: 0x1F8F, + 0x1F200345: 0x1F90, + 0x1F210345: 0x1F91, + 0x1F220345: 0x1F92, + 0x1F230345: 0x1F93, + 0x1F240345: 0x1F94, + 0x1F250345: 0x1F95, + 0x1F260345: 0x1F96, + 0x1F270345: 0x1F97, + 0x1F280345: 0x1F98, + 0x1F290345: 0x1F99, + 0x1F2A0345: 0x1F9A, + 0x1F2B0345: 0x1F9B, + 0x1F2C0345: 0x1F9C, + 0x1F2D0345: 0x1F9D, + 0x1F2E0345: 0x1F9E, + 0x1F2F0345: 0x1F9F, + 0x1F600345: 0x1FA0, + 0x1F610345: 0x1FA1, + 0x1F620345: 0x1FA2, + 0x1F630345: 0x1FA3, + 0x1F640345: 0x1FA4, + 0x1F650345: 0x1FA5, + 0x1F660345: 0x1FA6, + 0x1F670345: 0x1FA7, + 0x1F680345: 0x1FA8, + 0x1F690345: 0x1FA9, + 0x1F6A0345: 0x1FAA, + 0x1F6B0345: 0x1FAB, + 0x1F6C0345: 0x1FAC, + 0x1F6D0345: 0x1FAD, + 0x1F6E0345: 0x1FAE, + 0x1F6F0345: 0x1FAF, + 0x03B10306: 0x1FB0, + 0x03B10304: 0x1FB1, + 0x1F700345: 0x1FB2, + 0x03B10345: 0x1FB3, + 0x03AC0345: 0x1FB4, + 0x03B10342: 0x1FB6, + 0x1FB60345: 0x1FB7, + 0x03910306: 0x1FB8, + 0x03910304: 0x1FB9, + 0x03910300: 0x1FBA, + 0x03910345: 0x1FBC, + 0x00A80342: 0x1FC1, + 0x1F740345: 0x1FC2, + 0x03B70345: 0x1FC3, + 0x03AE0345: 0x1FC4, + 0x03B70342: 0x1FC6, + 0x1FC60345: 0x1FC7, + 0x03950300: 0x1FC8, + 0x03970300: 0x1FCA, + 0x03970345: 0x1FCC, + 0x1FBF0300: 0x1FCD, + 0x1FBF0301: 0x1FCE, + 0x1FBF0342: 0x1FCF, + 0x03B90306: 0x1FD0, + 0x03B90304: 0x1FD1, + 0x03CA0300: 0x1FD2, + 0x03B90342: 0x1FD6, + 0x03CA0342: 0x1FD7, + 0x03990306: 0x1FD8, + 0x03990304: 0x1FD9, + 0x03990300: 0x1FDA, + 0x1FFE0300: 0x1FDD, + 0x1FFE0301: 0x1FDE, + 0x1FFE0342: 0x1FDF, + 0x03C50306: 0x1FE0, + 0x03C50304: 0x1FE1, + 0x03CB0300: 0x1FE2, + 0x03C10313: 0x1FE4, + 0x03C10314: 0x1FE5, + 0x03C50342: 0x1FE6, + 0x03CB0342: 0x1FE7, + 0x03A50306: 0x1FE8, + 0x03A50304: 0x1FE9, + 0x03A50300: 0x1FEA, + 0x03A10314: 0x1FEC, + 0x00A80300: 0x1FED, + 0x1F7C0345: 0x1FF2, + 0x03C90345: 0x1FF3, + 0x03CE0345: 0x1FF4, + 0x03C90342: 0x1FF6, + 0x1FF60345: 0x1FF7, + 0x039F0300: 0x1FF8, + 0x03A90300: 0x1FFA, + 0x03A90345: 0x1FFC, + 0x21900338: 0x219A, + 0x21920338: 0x219B, + 0x21940338: 0x21AE, + 0x21D00338: 0x21CD, + 0x21D40338: 0x21CE, + 0x21D20338: 0x21CF, + 0x22030338: 0x2204, + 0x22080338: 0x2209, + 0x220B0338: 0x220C, + 0x22230338: 0x2224, + 0x22250338: 0x2226, + 0x223C0338: 0x2241, + 0x22430338: 0x2244, + 0x22450338: 0x2247, + 0x22480338: 0x2249, + 0x003D0338: 0x2260, + 0x22610338: 0x2262, + 0x224D0338: 0x226D, + 0x003C0338: 0x226E, + 0x003E0338: 0x226F, + 0x22640338: 0x2270, + 0x22650338: 0x2271, + 0x22720338: 0x2274, + 0x22730338: 0x2275, + 0x22760338: 0x2278, + 0x22770338: 0x2279, + 0x227A0338: 0x2280, + 0x227B0338: 0x2281, + 0x22820338: 0x2284, + 0x22830338: 0x2285, + 0x22860338: 0x2288, + 0x22870338: 0x2289, + 0x22A20338: 0x22AC, + 0x22A80338: 0x22AD, + 0x22A90338: 0x22AE, + 0x22AB0338: 0x22AF, + 0x227C0338: 0x22E0, + 0x227D0338: 0x22E1, + 0x22910338: 0x22E2, + 0x22920338: 0x22E3, + 0x22B20338: 0x22EA, + 0x22B30338: 0x22EB, + 0x22B40338: 0x22EC, + 0x22B50338: 0x22ED, + 0x304B3099: 0x304C, + 0x304D3099: 0x304E, + 0x304F3099: 0x3050, + 0x30513099: 0x3052, + 0x30533099: 0x3054, + 0x30553099: 0x3056, + 0x30573099: 0x3058, + 0x30593099: 0x305A, + 0x305B3099: 0x305C, + 0x305D3099: 0x305E, + 0x305F3099: 0x3060, + 0x30613099: 0x3062, + 0x30643099: 0x3065, + 0x30663099: 0x3067, + 0x30683099: 0x3069, + 0x306F3099: 0x3070, + 0x306F309A: 0x3071, + 0x30723099: 0x3073, + 0x3072309A: 0x3074, + 0x30753099: 0x3076, + 0x3075309A: 0x3077, + 0x30783099: 0x3079, + 0x3078309A: 0x307A, + 0x307B3099: 0x307C, + 0x307B309A: 0x307D, + 0x30463099: 0x3094, + 0x309D3099: 0x309E, + 0x30AB3099: 0x30AC, + 0x30AD3099: 0x30AE, + 0x30AF3099: 0x30B0, + 0x30B13099: 0x30B2, + 0x30B33099: 0x30B4, + 0x30B53099: 0x30B6, + 0x30B73099: 0x30B8, + 0x30B93099: 0x30BA, + 0x30BB3099: 0x30BC, + 0x30BD3099: 0x30BE, + 0x30BF3099: 0x30C0, + 0x30C13099: 0x30C2, + 0x30C43099: 0x30C5, + 0x30C63099: 0x30C7, + 0x30C83099: 0x30C9, + 0x30CF3099: 0x30D0, + 0x30CF309A: 0x30D1, + 0x30D23099: 0x30D3, + 0x30D2309A: 0x30D4, + 0x30D53099: 0x30D6, + 0x30D5309A: 0x30D7, + 0x30D83099: 0x30D9, + 0x30D8309A: 0x30DA, + 0x30DB3099: 0x30DC, + 0x30DB309A: 0x30DD, + 0x30A63099: 0x30F4, + 0x30EF3099: 0x30F7, + 0x30F03099: 0x30F8, + 0x30F13099: 0x30F9, + 0x30F23099: 0x30FA, + 0x30FD3099: 0x30FE, + 0x109910BA: 0x1109A, + 0x109B10BA: 0x1109C, + 0x10A510BA: 0x110AB, + 0x11311127: 0x1112E, + 0x11321127: 0x1112F, + 0x1347133E: 0x1134B, + 0x13471357: 0x1134C, + 0x14B914BA: 0x114BB, + 0x14B914B0: 0x114BC, + 0x14B914BD: 0x114BE, + 0x15B815AF: 0x115BA, + 0x15B915AF: 0x115BB, +} + +// Total size of tables: 53KB (54226 bytes) diff --git a/vendor/golang.org/x/text/unicode/norm/tables9.0.0.go b/vendor/golang.org/x/text/unicode/norm/tables9.0.0.go new file mode 100644 index 0000000..a01274a --- /dev/null +++ b/vendor/golang.org/x/text/unicode/norm/tables9.0.0.go @@ -0,0 +1,7633 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// +build !go1.10 + +package norm + +const ( + // Version is the Unicode edition from which the tables are derived. + Version = "9.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 = [55]uint8{ + 0, 1, 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 = 0x186D + firstCCC = 0x2C9E + endMulti = 0x2F60 + firstLeadingCCC = 0x49AE + firstCCCZeroExcept = 0x4A78 + firstStarterWithNLead = 0x4A9F + lastDecomp = 0x4AA1 + maxDecomp = 0x8000 +) + +// decomps: 19105 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, + 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, 0xCE, 0x94, 0x42, + // Bytes 180 - 1bf + 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, 0xB1, 0x42, 0xCE, + // Bytes 1c0 - 1ff + 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, 0x42, 0xCF, 0x87, + // Bytes 200 - 23f + 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, 0xD8, 0xA8, 0x42, + // Bytes 240 - 27f + 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, 0x83, 0x42, 0xD9, + // Bytes 280 - 2bf + 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, 0x42, 0xDA, 0x8C, + // Bytes 2c0 - 2ff + 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, 0xDB, 0x89, 0x42, + // Bytes 300 - 33f + 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, 0x84, 0x8A, 0x43, + // Bytes 340 - 37f + 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, 0x84, 0xA1, 0x43, + // Bytes 380 - 3bf + 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, 0x85, 0x98, 0x43, + // Bytes 3c0 - 3ff + 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, 0x87, 0x97, 0x43, + // Bytes 400 - 43f + 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, 0x80, 0x90, 0x43, + // Bytes 440 - 47f + 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, 0xA6, 0x86, 0x43, + // Bytes 480 - 4bf + 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, 0x80, 0x95, 0x43, + // Bytes 4c0 - 4ff + 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, 0x82, 0xB1, 0x43, + // Bytes 500 - 53f + 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, 0x83, 0x8D, 0x43, + // Bytes 540 - 57f + 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, 0x83, 0xA7, 0x43, + // Bytes 580 - 5bf + 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, 0x92, 0xBB, 0x43, + // Bytes 5c0 - 5ff + 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, 0xAC, 0x88, 0x43, + // Bytes 600 - 63f + 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, 0x82, 0x96, 0x43, + // Bytes 640 - 67f + 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, 0x95, 0xAB, 0x43, + // Bytes 680 - 6bf + 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, 0xB5, 0x96, 0x43, + // Bytes 6c0 - 6ff + 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, 0xB8, 0xBD, 0x43, + // Bytes 700 - 73f + 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, 0xBB, 0xA4, 0x43, + // Bytes 740 - 77f + 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, 0x83, 0xA7, 0x43, + // Bytes 780 - 7bf + 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, 0x86, 0x82, 0x43, + // Bytes 7c0 - 7ff + 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, 0x87, 0xA0, 0x43, + // Bytes 800 - 83f + 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, 0x8A, 0xA3, 0x43, + // Bytes 840 - 87f + 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, 0x8C, 0xB8, 0x43, + // Bytes 880 - 8bf + 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, 0x8D, 0xBF, 0x43, + // Bytes 8c0 - 8ff + 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, 0x90, 0x8D, 0x43, + // Bytes 900 - 93f + 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, 0x95, 0xA3, 0x43, + // Bytes 940 - 97f + 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, 0x9B, 0x9B, 0x43, + // Bytes 980 - 9bf + 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, 0xA2, 0xAC, 0x43, + // Bytes 9c0 - 9ff + 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, 0xA4, 0xA7, 0x43, + // Bytes a00 - a3f + 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, 0xAC, 0xA8, 0x43, + // Bytes a40 - a7f + 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, 0xB0, 0x8F, 0x43, + // Bytes a80 - abf + 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, 0xB5, 0xAE, 0x43, + // Bytes ac0 - aff + 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, 0xB9, 0xB4, 0x43, + // Bytes b00 - b3f + 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, 0xBC, 0x84, 0x43, + // Bytes b40 - b7f + 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, 0xBE, 0xAD, 0x43, + // Bytes b80 - bbf + 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, 0x85, 0x88, 0x43, + // Bytes bc0 - bff + 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, 0x88, 0x90, 0x43, + // Bytes c00 - c3f + 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, 0x8C, 0x87, 0x43, + // Bytes c40 - c7f + 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, 0x91, 0xB7, 0x43, + // Bytes c80 - cbf + 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, 0x96, 0xB9, 0x43, + // Bytes cc0 - cff + 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, 0x9B, 0xB4, 0x43, + // Bytes d00 - d3f + 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, 0x9F, 0xB3, 0x43, + // Bytes d40 - d7f + 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, 0xAA, 0xA8, 0x43, + // Bytes d80 - dbf + 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, 0xAE, 0xBB, 0x43, + // Bytes dc0 - dff + 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, 0xB4, 0x96, 0x43, + // Bytes e00 - e3f + 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, 0xB8, 0xAF, 0x43, + // Bytes e40 - e7f + 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, 0xBF, 0xBE, 0x43, + // Bytes e80 - ebf + 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, 0x85, 0xAE, 0x43, + // Bytes ec0 - eff + 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, 0x89, 0x9B, 0x43, + // Bytes f00 - f3f + 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, 0x8E, 0xA5, 0x43, + // Bytes f40 - f7f + 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, 0x94, 0x86, 0x43, + // Bytes f80 - fbf + 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, 0x97, 0xA2, 0x43, + // Bytes fc0 - fff + 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, 0x9C, 0x81, 0x43, + // Bytes 1000 - 103f + 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, 0xA3, 0xBB, 0x43, + // Bytes 1040 - 107f + 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, 0xA6, 0x8F, 0x43, + // Bytes 1080 - 10bf + 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, 0xAB, 0xAE, 0x43, + // Bytes 10c0 - 10ff + 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, 0xB3, 0xA7, 0x43, + // Bytes 1100 - 113f + 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, 0xB8, 0xB7, 0x43, + // Bytes 1140 - 117f + 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, 0x80, 0x85, 0x43, + // Bytes 1180 - 11bf + 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, 0x87, 0x98, 0x43, + // Bytes 11c0 - 11ff + 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, 0x89, 0xB8, 0x43, + // Bytes 1200 - 123f + 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, 0x8E, 0xAD, 0x43, + // Bytes 1240 - 127f + 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, 0x94, 0x96, 0x43, + // Bytes 1280 - 12bf + 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, 0x9B, 0xA2, 0x43, + // Bytes 12c0 - 12ff + 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, 0xA3, 0x97, 0x43, + // Bytes 1300 - 133f + 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, 0xAA, 0xAA, 0x43, + // Bytes 1340 - 137f + 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, 0xB1, 0x95, 0x43, + // Bytes 1380 - 13bf + 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, 0xB6, 0xB3, 0x43, + // Bytes 13c0 - 13ff + 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, 0xBE, 0xB5, 0x43, + // Bytes 1400 - 143f + 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, 0x84, 0x9B, 0x43, + // Bytes 1440 - 147f + 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, 0x8C, 0x84, 0x43, + // Bytes 1480 - 14bf + 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, 0x9A, 0x86, 0x43, + // Bytes 14c0 - 14ff + 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, 0x9D, 0x96, 0x43, + // Bytes 1500 - 153f + 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, 0xA1, 0x9E, 0x43, + // Bytes 1540 - 157f + 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, 0xA9, 0xAA, 0x43, + // Bytes 1580 - 15bf + 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, 0xB6, 0xB4, 0x43, + // Bytes 15c0 - 15ff + 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, 0xBC, 0x85, 0x43, + // Bytes 1600 - 163f + 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, 0x9D, 0xAF, 0x43, + // Bytes 1640 - 167f + 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, 0xA8, 0x44, 0xF0, + // Bytes 1680 - 16bf + 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, 0xAC, 0x8C, 0x44, + // Bytes 16c0 - 16ff + 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, 0xA3, 0xAB, 0xBA, + // Bytes 1700 - 173f + 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, 0xF0, 0xA4, 0xB2, + // Bytes 1740 - 177f + 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, 0x44, 0xF0, 0xA5, + // Bytes 1780 - 17bf + 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, 0xA3, 0x44, 0xF0, + // Bytes 17c0 - 17ff + 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, 0xA2, 0xAE, 0x44, + // Bytes 1800 - 183f + 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, 0xA9, 0x90, 0x8A, + // Bytes 1840 - 187f + 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, 0x31, 0x2C, 0x42, + // Bytes 1880 - 18bf + 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, 0x37, 0x42, 0x32, + // Bytes 18c0 - 18ff + 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, 0x42, 0x34, 0x35, + // Bytes 1900 - 193f + 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, 0x43, 0x44, 0x42, + // Bytes 1940 - 197f + 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, 0x43, 0x42, 0x4D, + // Bytes 1980 - 19bf + 0x44, 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, 0x42, 0x63, 0x63, 0x42, 0x63, 0x64, + // Bytes 19c0 - 19ff + 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, 0x6B, 0x57, 0x42, 0x6B, 0x67, 0x42, + // Bytes 1a00 - 1a3f + 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, 0x56, 0x42, 0x6E, 0x57, 0x42, 0x6E, + // Bytes 1a40 - 1a7f + 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, 0x35, 0x29, 0x43, 0x28, 0x36, 0x29, + // Bytes 1a80 - 1abf + 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, 0x4C, 0x29, 0x43, 0x28, 0x4D, 0x29, + // Bytes 1ac0 - 1aff + 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, 0x62, 0x29, 0x43, 0x28, 0x63, 0x29, + // Bytes 1b00 - 1b3f + 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, 0x72, 0x29, 0x43, 0x28, 0x73, 0x29, + // Bytes 1b40 - 1b7f + 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, 0x36, 0x2E, 0x43, 0x31, 0x37, 0x2E, + // Bytes 1b80 - 1bbf + 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, 0xCE, 0xA9, 0x43, 0x50, 0x50, 0x4D, + // Bytes 1bc0 - 1bff + 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, 0x6D, 0x33, 0x43, 0x64, 0x6D, 0x32, + // Bytes 1c00 - 1c3f + 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, 0x69, 0x6C, 0x43, 0x6D, 0x6D, 0x32, + // Bytes 1c40 - 1c7f + 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, 0xBC, 0x6D, 0x43, 0xCE, 0xBC, 0x73, + // Bytes 1c80 - 1cbf + 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, 0x82, 0xB9, 0x44, 0x31, 0xE2, 0x81, + // Bytes 1cc0 - 1cff + 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, 0xE7, 0x82, 0xB9, 0x44, 0x35, 0xE6, + // Bytes 1d00 - 1d3f + 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, 0x39, 0xE6, 0x97, 0xA5, 0x44, 0x39, + // Bytes 1d40 - 1d7f + 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, 0x44, 0xD5, 0xBE, 0xD5, 0xB6, 0x44, + // Bytes 1d80 - 1dbf + 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, 0x8A, 0x44, 0xD8, 0xAA, 0xD8, 0xAC, + // Bytes 1dc0 - 1dff + 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, 0xD8, 0xB2, 0x44, 0xD8, 0xAB, 0xD9, + // Bytes 1e00 - 1e3f + 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, 0xAD, 0xD9, 0x8A, 0x44, 0xD8, 0xAE, + // Bytes 1e40 - 1e7f + 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, 0xD8, 0xB3, 0xD9, 0x8A, 0x44, 0xD8, + // Bytes 1e80 - 1ebf + 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, 0x44, 0xD8, 0xB5, 0xD9, 0x89, 0x44, + // Bytes 1ec0 - 1eff + 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, 0x8A, 0x44, 0xD8, 0xB8, 0xD9, 0x85, + // Bytes 1f00 - 1f3f + 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, 0xD9, 0x85, 0x44, 0xD9, 0x81, 0xD9, + // Bytes 1f40 - 1f7f + 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, 0x83, 0xD9, 0x89, 0x44, 0xD9, 0x83, + // Bytes 1f80 - 1fbf + 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, 0xD9, 0x85, 0xD8, 0xAE, 0x44, 0xD9, + // Bytes 1fc0 - 1fff + 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, 0x44, 0xD9, 0x86, 0xD9, 0x8A, 0x44, + // Bytes 2000 - 203f + 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, 0x86, 0x44, 0xD9, 0x8A, 0xD9, 0x87, + // Bytes 2040 - 207f + 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, 0xE1, 0x84, 0x89, 0x29, 0x45, 0x28, + // Bytes 2080 - 20bf + 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, 0x45, 0x28, 0xE4, 0xB9, 0x9D, 0x29, + // Bytes 20c0 - 20ff + 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, 0x94, 0x29, 0x45, 0x28, 0xE5, 0x90, + // Bytes 2100 - 213f + 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, 0xE6, 0xB0, 0xB4, 0x29, 0x45, 0x28, + // Bytes 2140 - 217f + 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, 0x45, 0x28, 0xE9, 0x87, 0x91, 0x29, + // Bytes 2180 - 21bf + 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, 0x82, 0xB9, 0x45, 0x31, 0x33, 0xE6, + // Bytes 21c0 - 21ff + 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, 0x38, 0xE6, 0x97, 0xA5, 0x45, 0x31, + // Bytes 2200 - 223f + 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, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x39, + // Bytes 2240 - 227f + 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, 0x82, 0xB9, 0x45, 0x32, 0x35, 0xE6, + // Bytes 2280 - 22bf + 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, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33, + // Bytes 22c0 - 22ff + 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, 0x6B, 0x67, 0x46, 0x6D, 0xE2, 0x88, + // Bytes 2300 - 233f + 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, 0x85, 0x46, 0xD8, 0xAA, 0xD8, 0xAE, + // Bytes 2340 - 237f + 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, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD8, + // Bytes 2380 - 23bf + 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, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x89, + // Bytes 23c0 - 23ff + 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, 0xB4, 0xD9, 0x85, 0xD9, 0x85, 0x46, + // Bytes 2400 - 243f + 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, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, + // Bytes 2440 - 247f + 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, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x81, + // Bytes 2480 - 24bf + 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, 0xD8, 0xAC, 0x46, 0xD9, 0x84, 0xD8, + // Bytes 24c0 - 24ff + 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, 0xAD, 0x46, 0xD9, 0x85, 0xD8, 0xAC, + // Bytes 2500 - 253f + 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, 0x46, 0xD9, 0x85, 0xD9, 0x85, 0xD9, + // Bytes 2540 - 257f + 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, 0xD9, 0x86, 0xD9, 0x85, 0xD9, 0x8A, + // Bytes 2580 - 25bf + 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, 0x8A, 0xD9, 0x94, 0xD8, 0xAD, 0x46, + // Bytes 25c0 - 25ff + 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, 0xD9, 0x94, 0xD9, 0x8A, 0x46, 0xD9, + // Bytes 2600 - 263f + 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, 0xE0, 0xBA, 0xB2, 0x46, 0xE0, 0xBD, + // Bytes 2640 - 267f + 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, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA1, + // Bytes 2680 - 26bf + 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, 0x8A, 0x46, 0xE3, 0x82, 0xAD, 0xE3, + // Bytes 26c0 - 26ff + 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, 0x46, 0xE5, 0xA4, 0xA7, 0xE6, 0xAD, + // Bytes 2700 - 273f + 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, 0x82, 0xE1, 0x85, 0xA1, 0x29, + 0x48, 0x28, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, + // Bytes 2740 - 277f + 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, 0xE1, 0x85, 0xA1, 0x29, 0x48, + 0x28, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xAE, 0x29, + // Bytes 2780 - 27bf + 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, 0x95, 0x73, 0x32, 0x48, 0xD8, + 0xA7, 0xD9, 0x83, 0xD8, 0xA8, 0xD8, 0xB1, 0x48, + // Bytes 27c0 - 27ff + 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, 0xD8, 0xAF, 0x48, 0xD9, 0x88, + 0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x49, 0xE2, + // Bytes 2800 - 283f + 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, 0x94, 0xE4, 0xBA, 0x8C, 0xE3, + 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE5, 0x8B, + // Bytes 2840 - 287f + 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, 0xE3, 0x80, 0x95, 0x49, 0xE3, + 0x80, 0x94, 0xE7, 0x9B, 0x97, 0xE3, 0x80, 0x95, + // Bytes 2880 - 28bf + 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, 0xE3, 0x82, 0xAB, 0xE3, 0x82, + 0xA4, 0xE3, 0x83, 0xAA, 0x49, 0xE3, 0x82, 0xB1, + // Bytes 28c0 - 28ff + 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, 0x82, 0x99, 0xE3, 0x83, 0xAB, + 0x49, 0xE3, 0x83, 0x8E, 0xE3, 0x83, 0x83, 0xE3, + // Bytes 2900 - 293f + 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, 0xBD, 0x49, 0xE3, 0x83, 0x98, + 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x84, 0x49, 0xE3, + // Bytes 2940 - 297f + 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, 0xA4, 0xE3, 0x83, 0xBC, 0xE3, + 0x83, 0xAB, 0x49, 0xE3, 0x83, 0xA6, 0xE3, 0x82, + // Bytes 2980 - 29bf + 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, 0x82, 0xA1, 0x4C, 0xE3, 0x82, + 0xA8, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xAB, 0xE3, + // Bytes 29c0 - 29ff + 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, 0xE3, 0x83, 0xBC, 0x4C, 0xE3, + 0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0x8B, + // Bytes 2a00 - 2a3f + 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, 0xAF, 0xE3, 0x83, 0xAB, 0x4C, + 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83, + // Bytes 2a40 - 2a7f + 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, 0x83, 0xBC, 0xE3, 0x82, 0xBF, + 0x4C, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, + // Bytes 2a80 - 2abf + 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, 0xE3, 0x83, 0xAD, 0xE3, 0x83, + 0xB3, 0x4C, 0xE3, 0x83, 0xA1, 0xE3, 0x83, 0xBC, + // Bytes 2ac0 - 2aff + 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, 0x85, 0xA9, 0xE1, 0x84, 0x92, + 0xE1, 0x85, 0xAE, 0x29, 0x4F, 0xD8, 0xAC, 0xD9, + // Bytes 2b00 - 2b3f + 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, 0xE3, 0x83, 0xAF, 0xE3, 0x83, + 0x83, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xB5, + // Bytes 2b40 - 2b7f + 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, 0xE3, 0x82, 0xA4, 0xE3, 0x83, + 0xB3, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x83, 0x9E, + // Bytes 2b80 - 2bbf + 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, 0xA9, 0xE1, 0x84, 0x8C, 0xE1, + 0x85, 0xA5, 0xE1, 0x86, 0xAB, 0x29, 0x52, 0xE3, + // Bytes 2bc0 - 2bff + 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, 0x88, 0xE3, 0x83, 0xAB, 0x52, + 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83, + // Bytes 2c00 - 2c3f + 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, 0x92, 0xE3, 0x82, 0x9A, 0xE3, + 0x82, 0xA2, 0xE3, 0x82, 0xB9, 0xE3, 0x83, 0x88, + // Bytes 2c40 - 2c7f + 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, 0xE3, 0x82, 0xB1, 0xE3, 0x82, + 0x99, 0xE3, 0x83, 0xB3, 0x61, 0xD8, 0xB5, 0xD9, + // Bytes 2c80 - 2cbf + 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, 0xAC, 0xBE, 0x01, 0x06, 0xE0, + 0xAD, 0x87, 0xE0, 0xAD, 0x96, 0x01, 0x06, 0xE0, + // Bytes 2cc0 - 2cff + 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, 0xB3, 0x95, 0x01, 0x06, 0xE0, + 0xB3, 0x86, 0xE0, 0xB3, 0x96, 0x01, 0x06, 0xE0, + // Bytes 2d00 - 2d3f + 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, 0xAC, 0xB5, 0x01, 0x06, 0xE1, + 0xAC, 0x89, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, + // Bytes 2d40 - 2d7f + 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, 0xAC, 0xB5, 0x01, 0x06, 0xE1, + 0xAD, 0x82, 0xE1, 0xAC, 0xB5, 0x01, 0x08, 0xF0, + // Bytes 2d80 - 2dbf + 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, 0x92, 0xB9, 0xF0, 0x91, 0x92, + 0xBA, 0x01, 0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0, + // Bytes 2dc0 - 2dff + 0x91, 0x92, 0xBD, 0x01, 0x08, 0xF0, 0x91, 0x96, + 0xB8, 0xF0, 0x91, 0x96, 0xAF, 0x01, 0x08, 0xF0, + 0x91, 0x96, 0xB9, 0xF0, 0x91, 0x96, 0xAF, 0x01, + 0x09, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0xE0, + 0xB3, 0x95, 0x02, 0x09, 0xE0, 0xB7, 0x99, 0xE0, + 0xB7, 0x8F, 0xE0, 0xB7, 0x8A, 0x12, 0x44, 0x44, + 0x5A, 0xCC, 0x8C, 0xC9, 0x44, 0x44, 0x7A, 0xCC, + 0x8C, 0xC9, 0x44, 0x64, 0x7A, 0xCC, 0x8C, 0xC9, + // Bytes 2e00 - 2e3f + 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x93, 0xC9, + 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x94, 0xC9, + 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x95, 0xB5, + 0x46, 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x01, + 0x46, 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x01, + 0x46, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, 0x01, + 0x46, 0xE1, 0x84, 0x85, 0xE1, 0x85, 0xA1, 0x01, + 0x46, 0xE1, 0x84, 0x86, 0xE1, 0x85, 0xA1, 0x01, + // Bytes 2e40 - 2e7f + 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, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1, 0x01, + 0x46, 0xE1, 0x84, 0x8F, 0xE1, 0x85, 0xA1, 0x01, + 0x46, 0xE1, 0x84, 0x90, 0xE1, 0x85, 0xA1, 0x01, + // Bytes 2e80 - 2ebf + 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, 0x0D, 0x4C, 0xE1, 0x84, 0x8C, 0xE1, + 0x85, 0xAE, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xB4, + 0x01, 0x4C, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, + 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0D, 0x4C, + 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0xBC, 0xE3, 0x83, + // Bytes 2ec0 - 2eff + 0x9B, 0xE3, 0x82, 0x9A, 0x0D, 0x4C, 0xE3, 0x83, + 0xA4, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3, + 0x82, 0x99, 0x0D, 0x4F, 0xE1, 0x84, 0x8E, 0xE1, + 0x85, 0xA1, 0xE1, 0x86, 0xB7, 0xE1, 0x84, 0x80, + 0xE1, 0x85, 0xA9, 0x01, 0x4F, 0xE3, 0x82, 0xA4, + 0xE3, 0x83, 0x8B, 0xE3, 0x83, 0xB3, 0xE3, 0x82, + 0xAF, 0xE3, 0x82, 0x99, 0x0D, 0x4F, 0xE3, 0x82, + 0xB7, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, + // Bytes 2f00 - 2f3f + 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x0D, 0x4F, 0xE3, + 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, + 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x0D, 0x4F, + 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0xE3, 0x83, + 0xB3, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D, + 0x52, 0xE3, 0x82, 0xA8, 0xE3, 0x82, 0xB9, 0xE3, + 0x82, 0xAF, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, + 0xE3, 0x82, 0x99, 0x0D, 0x52, 0xE3, 0x83, 0x95, + // Bytes 2f40 - 2f7f + 0xE3, 0x82, 0xA1, 0xE3, 0x83, 0xA9, 0xE3, 0x83, + 0x83, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D, + 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, 0x05, 0x03, 0x3E, 0xCC, 0xB8, 0x05, 0x03, + 0x41, 0xCC, 0x80, 0xC9, 0x03, 0x41, 0xCC, 0x81, + 0xC9, 0x03, 0x41, 0xCC, 0x83, 0xC9, 0x03, 0x41, + // Bytes 2f80 - 2fbf + 0xCC, 0x84, 0xC9, 0x03, 0x41, 0xCC, 0x89, 0xC9, + 0x03, 0x41, 0xCC, 0x8C, 0xC9, 0x03, 0x41, 0xCC, + 0x8F, 0xC9, 0x03, 0x41, 0xCC, 0x91, 0xC9, 0x03, + 0x41, 0xCC, 0xA5, 0xB5, 0x03, 0x41, 0xCC, 0xA8, + 0xA5, 0x03, 0x42, 0xCC, 0x87, 0xC9, 0x03, 0x42, + 0xCC, 0xA3, 0xB5, 0x03, 0x42, 0xCC, 0xB1, 0xB5, + 0x03, 0x43, 0xCC, 0x81, 0xC9, 0x03, 0x43, 0xCC, + 0x82, 0xC9, 0x03, 0x43, 0xCC, 0x87, 0xC9, 0x03, + // Bytes 2fc0 - 2fff + 0x43, 0xCC, 0x8C, 0xC9, 0x03, 0x44, 0xCC, 0x87, + 0xC9, 0x03, 0x44, 0xCC, 0x8C, 0xC9, 0x03, 0x44, + 0xCC, 0xA3, 0xB5, 0x03, 0x44, 0xCC, 0xA7, 0xA5, + 0x03, 0x44, 0xCC, 0xAD, 0xB5, 0x03, 0x44, 0xCC, + 0xB1, 0xB5, 0x03, 0x45, 0xCC, 0x80, 0xC9, 0x03, + 0x45, 0xCC, 0x81, 0xC9, 0x03, 0x45, 0xCC, 0x83, + 0xC9, 0x03, 0x45, 0xCC, 0x86, 0xC9, 0x03, 0x45, + 0xCC, 0x87, 0xC9, 0x03, 0x45, 0xCC, 0x88, 0xC9, + // Bytes 3000 - 303f + 0x03, 0x45, 0xCC, 0x89, 0xC9, 0x03, 0x45, 0xCC, + 0x8C, 0xC9, 0x03, 0x45, 0xCC, 0x8F, 0xC9, 0x03, + 0x45, 0xCC, 0x91, 0xC9, 0x03, 0x45, 0xCC, 0xA8, + 0xA5, 0x03, 0x45, 0xCC, 0xAD, 0xB5, 0x03, 0x45, + 0xCC, 0xB0, 0xB5, 0x03, 0x46, 0xCC, 0x87, 0xC9, + 0x03, 0x47, 0xCC, 0x81, 0xC9, 0x03, 0x47, 0xCC, + 0x82, 0xC9, 0x03, 0x47, 0xCC, 0x84, 0xC9, 0x03, + 0x47, 0xCC, 0x86, 0xC9, 0x03, 0x47, 0xCC, 0x87, + // Bytes 3040 - 307f + 0xC9, 0x03, 0x47, 0xCC, 0x8C, 0xC9, 0x03, 0x47, + 0xCC, 0xA7, 0xA5, 0x03, 0x48, 0xCC, 0x82, 0xC9, + 0x03, 0x48, 0xCC, 0x87, 0xC9, 0x03, 0x48, 0xCC, + 0x88, 0xC9, 0x03, 0x48, 0xCC, 0x8C, 0xC9, 0x03, + 0x48, 0xCC, 0xA3, 0xB5, 0x03, 0x48, 0xCC, 0xA7, + 0xA5, 0x03, 0x48, 0xCC, 0xAE, 0xB5, 0x03, 0x49, + 0xCC, 0x80, 0xC9, 0x03, 0x49, 0xCC, 0x81, 0xC9, + 0x03, 0x49, 0xCC, 0x82, 0xC9, 0x03, 0x49, 0xCC, + // Bytes 3080 - 30bf + 0x83, 0xC9, 0x03, 0x49, 0xCC, 0x84, 0xC9, 0x03, + 0x49, 0xCC, 0x86, 0xC9, 0x03, 0x49, 0xCC, 0x87, + 0xC9, 0x03, 0x49, 0xCC, 0x89, 0xC9, 0x03, 0x49, + 0xCC, 0x8C, 0xC9, 0x03, 0x49, 0xCC, 0x8F, 0xC9, + 0x03, 0x49, 0xCC, 0x91, 0xC9, 0x03, 0x49, 0xCC, + 0xA3, 0xB5, 0x03, 0x49, 0xCC, 0xA8, 0xA5, 0x03, + 0x49, 0xCC, 0xB0, 0xB5, 0x03, 0x4A, 0xCC, 0x82, + 0xC9, 0x03, 0x4B, 0xCC, 0x81, 0xC9, 0x03, 0x4B, + // Bytes 30c0 - 30ff + 0xCC, 0x8C, 0xC9, 0x03, 0x4B, 0xCC, 0xA3, 0xB5, + 0x03, 0x4B, 0xCC, 0xA7, 0xA5, 0x03, 0x4B, 0xCC, + 0xB1, 0xB5, 0x03, 0x4C, 0xCC, 0x81, 0xC9, 0x03, + 0x4C, 0xCC, 0x8C, 0xC9, 0x03, 0x4C, 0xCC, 0xA7, + 0xA5, 0x03, 0x4C, 0xCC, 0xAD, 0xB5, 0x03, 0x4C, + 0xCC, 0xB1, 0xB5, 0x03, 0x4D, 0xCC, 0x81, 0xC9, + 0x03, 0x4D, 0xCC, 0x87, 0xC9, 0x03, 0x4D, 0xCC, + 0xA3, 0xB5, 0x03, 0x4E, 0xCC, 0x80, 0xC9, 0x03, + // Bytes 3100 - 313f + 0x4E, 0xCC, 0x81, 0xC9, 0x03, 0x4E, 0xCC, 0x83, + 0xC9, 0x03, 0x4E, 0xCC, 0x87, 0xC9, 0x03, 0x4E, + 0xCC, 0x8C, 0xC9, 0x03, 0x4E, 0xCC, 0xA3, 0xB5, + 0x03, 0x4E, 0xCC, 0xA7, 0xA5, 0x03, 0x4E, 0xCC, + 0xAD, 0xB5, 0x03, 0x4E, 0xCC, 0xB1, 0xB5, 0x03, + 0x4F, 0xCC, 0x80, 0xC9, 0x03, 0x4F, 0xCC, 0x81, + 0xC9, 0x03, 0x4F, 0xCC, 0x86, 0xC9, 0x03, 0x4F, + 0xCC, 0x89, 0xC9, 0x03, 0x4F, 0xCC, 0x8B, 0xC9, + // Bytes 3140 - 317f + 0x03, 0x4F, 0xCC, 0x8C, 0xC9, 0x03, 0x4F, 0xCC, + 0x8F, 0xC9, 0x03, 0x4F, 0xCC, 0x91, 0xC9, 0x03, + 0x50, 0xCC, 0x81, 0xC9, 0x03, 0x50, 0xCC, 0x87, + 0xC9, 0x03, 0x52, 0xCC, 0x81, 0xC9, 0x03, 0x52, + 0xCC, 0x87, 0xC9, 0x03, 0x52, 0xCC, 0x8C, 0xC9, + 0x03, 0x52, 0xCC, 0x8F, 0xC9, 0x03, 0x52, 0xCC, + 0x91, 0xC9, 0x03, 0x52, 0xCC, 0xA7, 0xA5, 0x03, + 0x52, 0xCC, 0xB1, 0xB5, 0x03, 0x53, 0xCC, 0x82, + // Bytes 3180 - 31bf + 0xC9, 0x03, 0x53, 0xCC, 0x87, 0xC9, 0x03, 0x53, + 0xCC, 0xA6, 0xB5, 0x03, 0x53, 0xCC, 0xA7, 0xA5, + 0x03, 0x54, 0xCC, 0x87, 0xC9, 0x03, 0x54, 0xCC, + 0x8C, 0xC9, 0x03, 0x54, 0xCC, 0xA3, 0xB5, 0x03, + 0x54, 0xCC, 0xA6, 0xB5, 0x03, 0x54, 0xCC, 0xA7, + 0xA5, 0x03, 0x54, 0xCC, 0xAD, 0xB5, 0x03, 0x54, + 0xCC, 0xB1, 0xB5, 0x03, 0x55, 0xCC, 0x80, 0xC9, + 0x03, 0x55, 0xCC, 0x81, 0xC9, 0x03, 0x55, 0xCC, + // Bytes 31c0 - 31ff + 0x82, 0xC9, 0x03, 0x55, 0xCC, 0x86, 0xC9, 0x03, + 0x55, 0xCC, 0x89, 0xC9, 0x03, 0x55, 0xCC, 0x8A, + 0xC9, 0x03, 0x55, 0xCC, 0x8B, 0xC9, 0x03, 0x55, + 0xCC, 0x8C, 0xC9, 0x03, 0x55, 0xCC, 0x8F, 0xC9, + 0x03, 0x55, 0xCC, 0x91, 0xC9, 0x03, 0x55, 0xCC, + 0xA3, 0xB5, 0x03, 0x55, 0xCC, 0xA4, 0xB5, 0x03, + 0x55, 0xCC, 0xA8, 0xA5, 0x03, 0x55, 0xCC, 0xAD, + 0xB5, 0x03, 0x55, 0xCC, 0xB0, 0xB5, 0x03, 0x56, + // Bytes 3200 - 323f + 0xCC, 0x83, 0xC9, 0x03, 0x56, 0xCC, 0xA3, 0xB5, + 0x03, 0x57, 0xCC, 0x80, 0xC9, 0x03, 0x57, 0xCC, + 0x81, 0xC9, 0x03, 0x57, 0xCC, 0x82, 0xC9, 0x03, + 0x57, 0xCC, 0x87, 0xC9, 0x03, 0x57, 0xCC, 0x88, + 0xC9, 0x03, 0x57, 0xCC, 0xA3, 0xB5, 0x03, 0x58, + 0xCC, 0x87, 0xC9, 0x03, 0x58, 0xCC, 0x88, 0xC9, + 0x03, 0x59, 0xCC, 0x80, 0xC9, 0x03, 0x59, 0xCC, + 0x81, 0xC9, 0x03, 0x59, 0xCC, 0x82, 0xC9, 0x03, + // Bytes 3240 - 327f + 0x59, 0xCC, 0x83, 0xC9, 0x03, 0x59, 0xCC, 0x84, + 0xC9, 0x03, 0x59, 0xCC, 0x87, 0xC9, 0x03, 0x59, + 0xCC, 0x88, 0xC9, 0x03, 0x59, 0xCC, 0x89, 0xC9, + 0x03, 0x59, 0xCC, 0xA3, 0xB5, 0x03, 0x5A, 0xCC, + 0x81, 0xC9, 0x03, 0x5A, 0xCC, 0x82, 0xC9, 0x03, + 0x5A, 0xCC, 0x87, 0xC9, 0x03, 0x5A, 0xCC, 0x8C, + 0xC9, 0x03, 0x5A, 0xCC, 0xA3, 0xB5, 0x03, 0x5A, + 0xCC, 0xB1, 0xB5, 0x03, 0x61, 0xCC, 0x80, 0xC9, + // Bytes 3280 - 32bf + 0x03, 0x61, 0xCC, 0x81, 0xC9, 0x03, 0x61, 0xCC, + 0x83, 0xC9, 0x03, 0x61, 0xCC, 0x84, 0xC9, 0x03, + 0x61, 0xCC, 0x89, 0xC9, 0x03, 0x61, 0xCC, 0x8C, + 0xC9, 0x03, 0x61, 0xCC, 0x8F, 0xC9, 0x03, 0x61, + 0xCC, 0x91, 0xC9, 0x03, 0x61, 0xCC, 0xA5, 0xB5, + 0x03, 0x61, 0xCC, 0xA8, 0xA5, 0x03, 0x62, 0xCC, + 0x87, 0xC9, 0x03, 0x62, 0xCC, 0xA3, 0xB5, 0x03, + 0x62, 0xCC, 0xB1, 0xB5, 0x03, 0x63, 0xCC, 0x81, + // Bytes 32c0 - 32ff + 0xC9, 0x03, 0x63, 0xCC, 0x82, 0xC9, 0x03, 0x63, + 0xCC, 0x87, 0xC9, 0x03, 0x63, 0xCC, 0x8C, 0xC9, + 0x03, 0x64, 0xCC, 0x87, 0xC9, 0x03, 0x64, 0xCC, + 0x8C, 0xC9, 0x03, 0x64, 0xCC, 0xA3, 0xB5, 0x03, + 0x64, 0xCC, 0xA7, 0xA5, 0x03, 0x64, 0xCC, 0xAD, + 0xB5, 0x03, 0x64, 0xCC, 0xB1, 0xB5, 0x03, 0x65, + 0xCC, 0x80, 0xC9, 0x03, 0x65, 0xCC, 0x81, 0xC9, + 0x03, 0x65, 0xCC, 0x83, 0xC9, 0x03, 0x65, 0xCC, + // Bytes 3300 - 333f + 0x86, 0xC9, 0x03, 0x65, 0xCC, 0x87, 0xC9, 0x03, + 0x65, 0xCC, 0x88, 0xC9, 0x03, 0x65, 0xCC, 0x89, + 0xC9, 0x03, 0x65, 0xCC, 0x8C, 0xC9, 0x03, 0x65, + 0xCC, 0x8F, 0xC9, 0x03, 0x65, 0xCC, 0x91, 0xC9, + 0x03, 0x65, 0xCC, 0xA8, 0xA5, 0x03, 0x65, 0xCC, + 0xAD, 0xB5, 0x03, 0x65, 0xCC, 0xB0, 0xB5, 0x03, + 0x66, 0xCC, 0x87, 0xC9, 0x03, 0x67, 0xCC, 0x81, + 0xC9, 0x03, 0x67, 0xCC, 0x82, 0xC9, 0x03, 0x67, + // Bytes 3340 - 337f + 0xCC, 0x84, 0xC9, 0x03, 0x67, 0xCC, 0x86, 0xC9, + 0x03, 0x67, 0xCC, 0x87, 0xC9, 0x03, 0x67, 0xCC, + 0x8C, 0xC9, 0x03, 0x67, 0xCC, 0xA7, 0xA5, 0x03, + 0x68, 0xCC, 0x82, 0xC9, 0x03, 0x68, 0xCC, 0x87, + 0xC9, 0x03, 0x68, 0xCC, 0x88, 0xC9, 0x03, 0x68, + 0xCC, 0x8C, 0xC9, 0x03, 0x68, 0xCC, 0xA3, 0xB5, + 0x03, 0x68, 0xCC, 0xA7, 0xA5, 0x03, 0x68, 0xCC, + 0xAE, 0xB5, 0x03, 0x68, 0xCC, 0xB1, 0xB5, 0x03, + // Bytes 3380 - 33bf + 0x69, 0xCC, 0x80, 0xC9, 0x03, 0x69, 0xCC, 0x81, + 0xC9, 0x03, 0x69, 0xCC, 0x82, 0xC9, 0x03, 0x69, + 0xCC, 0x83, 0xC9, 0x03, 0x69, 0xCC, 0x84, 0xC9, + 0x03, 0x69, 0xCC, 0x86, 0xC9, 0x03, 0x69, 0xCC, + 0x89, 0xC9, 0x03, 0x69, 0xCC, 0x8C, 0xC9, 0x03, + 0x69, 0xCC, 0x8F, 0xC9, 0x03, 0x69, 0xCC, 0x91, + 0xC9, 0x03, 0x69, 0xCC, 0xA3, 0xB5, 0x03, 0x69, + 0xCC, 0xA8, 0xA5, 0x03, 0x69, 0xCC, 0xB0, 0xB5, + // Bytes 33c0 - 33ff + 0x03, 0x6A, 0xCC, 0x82, 0xC9, 0x03, 0x6A, 0xCC, + 0x8C, 0xC9, 0x03, 0x6B, 0xCC, 0x81, 0xC9, 0x03, + 0x6B, 0xCC, 0x8C, 0xC9, 0x03, 0x6B, 0xCC, 0xA3, + 0xB5, 0x03, 0x6B, 0xCC, 0xA7, 0xA5, 0x03, 0x6B, + 0xCC, 0xB1, 0xB5, 0x03, 0x6C, 0xCC, 0x81, 0xC9, + 0x03, 0x6C, 0xCC, 0x8C, 0xC9, 0x03, 0x6C, 0xCC, + 0xA7, 0xA5, 0x03, 0x6C, 0xCC, 0xAD, 0xB5, 0x03, + 0x6C, 0xCC, 0xB1, 0xB5, 0x03, 0x6D, 0xCC, 0x81, + // Bytes 3400 - 343f + 0xC9, 0x03, 0x6D, 0xCC, 0x87, 0xC9, 0x03, 0x6D, + 0xCC, 0xA3, 0xB5, 0x03, 0x6E, 0xCC, 0x80, 0xC9, + 0x03, 0x6E, 0xCC, 0x81, 0xC9, 0x03, 0x6E, 0xCC, + 0x83, 0xC9, 0x03, 0x6E, 0xCC, 0x87, 0xC9, 0x03, + 0x6E, 0xCC, 0x8C, 0xC9, 0x03, 0x6E, 0xCC, 0xA3, + 0xB5, 0x03, 0x6E, 0xCC, 0xA7, 0xA5, 0x03, 0x6E, + 0xCC, 0xAD, 0xB5, 0x03, 0x6E, 0xCC, 0xB1, 0xB5, + 0x03, 0x6F, 0xCC, 0x80, 0xC9, 0x03, 0x6F, 0xCC, + // Bytes 3440 - 347f + 0x81, 0xC9, 0x03, 0x6F, 0xCC, 0x86, 0xC9, 0x03, + 0x6F, 0xCC, 0x89, 0xC9, 0x03, 0x6F, 0xCC, 0x8B, + 0xC9, 0x03, 0x6F, 0xCC, 0x8C, 0xC9, 0x03, 0x6F, + 0xCC, 0x8F, 0xC9, 0x03, 0x6F, 0xCC, 0x91, 0xC9, + 0x03, 0x70, 0xCC, 0x81, 0xC9, 0x03, 0x70, 0xCC, + 0x87, 0xC9, 0x03, 0x72, 0xCC, 0x81, 0xC9, 0x03, + 0x72, 0xCC, 0x87, 0xC9, 0x03, 0x72, 0xCC, 0x8C, + 0xC9, 0x03, 0x72, 0xCC, 0x8F, 0xC9, 0x03, 0x72, + // Bytes 3480 - 34bf + 0xCC, 0x91, 0xC9, 0x03, 0x72, 0xCC, 0xA7, 0xA5, + 0x03, 0x72, 0xCC, 0xB1, 0xB5, 0x03, 0x73, 0xCC, + 0x82, 0xC9, 0x03, 0x73, 0xCC, 0x87, 0xC9, 0x03, + 0x73, 0xCC, 0xA6, 0xB5, 0x03, 0x73, 0xCC, 0xA7, + 0xA5, 0x03, 0x74, 0xCC, 0x87, 0xC9, 0x03, 0x74, + 0xCC, 0x88, 0xC9, 0x03, 0x74, 0xCC, 0x8C, 0xC9, + 0x03, 0x74, 0xCC, 0xA3, 0xB5, 0x03, 0x74, 0xCC, + 0xA6, 0xB5, 0x03, 0x74, 0xCC, 0xA7, 0xA5, 0x03, + // Bytes 34c0 - 34ff + 0x74, 0xCC, 0xAD, 0xB5, 0x03, 0x74, 0xCC, 0xB1, + 0xB5, 0x03, 0x75, 0xCC, 0x80, 0xC9, 0x03, 0x75, + 0xCC, 0x81, 0xC9, 0x03, 0x75, 0xCC, 0x82, 0xC9, + 0x03, 0x75, 0xCC, 0x86, 0xC9, 0x03, 0x75, 0xCC, + 0x89, 0xC9, 0x03, 0x75, 0xCC, 0x8A, 0xC9, 0x03, + 0x75, 0xCC, 0x8B, 0xC9, 0x03, 0x75, 0xCC, 0x8C, + 0xC9, 0x03, 0x75, 0xCC, 0x8F, 0xC9, 0x03, 0x75, + 0xCC, 0x91, 0xC9, 0x03, 0x75, 0xCC, 0xA3, 0xB5, + // Bytes 3500 - 353f + 0x03, 0x75, 0xCC, 0xA4, 0xB5, 0x03, 0x75, 0xCC, + 0xA8, 0xA5, 0x03, 0x75, 0xCC, 0xAD, 0xB5, 0x03, + 0x75, 0xCC, 0xB0, 0xB5, 0x03, 0x76, 0xCC, 0x83, + 0xC9, 0x03, 0x76, 0xCC, 0xA3, 0xB5, 0x03, 0x77, + 0xCC, 0x80, 0xC9, 0x03, 0x77, 0xCC, 0x81, 0xC9, + 0x03, 0x77, 0xCC, 0x82, 0xC9, 0x03, 0x77, 0xCC, + 0x87, 0xC9, 0x03, 0x77, 0xCC, 0x88, 0xC9, 0x03, + 0x77, 0xCC, 0x8A, 0xC9, 0x03, 0x77, 0xCC, 0xA3, + // Bytes 3540 - 357f + 0xB5, 0x03, 0x78, 0xCC, 0x87, 0xC9, 0x03, 0x78, + 0xCC, 0x88, 0xC9, 0x03, 0x79, 0xCC, 0x80, 0xC9, + 0x03, 0x79, 0xCC, 0x81, 0xC9, 0x03, 0x79, 0xCC, + 0x82, 0xC9, 0x03, 0x79, 0xCC, 0x83, 0xC9, 0x03, + 0x79, 0xCC, 0x84, 0xC9, 0x03, 0x79, 0xCC, 0x87, + 0xC9, 0x03, 0x79, 0xCC, 0x88, 0xC9, 0x03, 0x79, + 0xCC, 0x89, 0xC9, 0x03, 0x79, 0xCC, 0x8A, 0xC9, + 0x03, 0x79, 0xCC, 0xA3, 0xB5, 0x03, 0x7A, 0xCC, + // Bytes 3580 - 35bf + 0x81, 0xC9, 0x03, 0x7A, 0xCC, 0x82, 0xC9, 0x03, + 0x7A, 0xCC, 0x87, 0xC9, 0x03, 0x7A, 0xCC, 0x8C, + 0xC9, 0x03, 0x7A, 0xCC, 0xA3, 0xB5, 0x03, 0x7A, + 0xCC, 0xB1, 0xB5, 0x04, 0xC2, 0xA8, 0xCC, 0x80, + 0xCA, 0x04, 0xC2, 0xA8, 0xCC, 0x81, 0xCA, 0x04, + 0xC2, 0xA8, 0xCD, 0x82, 0xCA, 0x04, 0xC3, 0x86, + 0xCC, 0x81, 0xC9, 0x04, 0xC3, 0x86, 0xCC, 0x84, + 0xC9, 0x04, 0xC3, 0x98, 0xCC, 0x81, 0xC9, 0x04, + // Bytes 35c0 - 35ff + 0xC3, 0xA6, 0xCC, 0x81, 0xC9, 0x04, 0xC3, 0xA6, + 0xCC, 0x84, 0xC9, 0x04, 0xC3, 0xB8, 0xCC, 0x81, + 0xC9, 0x04, 0xC5, 0xBF, 0xCC, 0x87, 0xC9, 0x04, + 0xC6, 0xB7, 0xCC, 0x8C, 0xC9, 0x04, 0xCA, 0x92, + 0xCC, 0x8C, 0xC9, 0x04, 0xCE, 0x91, 0xCC, 0x80, + 0xC9, 0x04, 0xCE, 0x91, 0xCC, 0x81, 0xC9, 0x04, + 0xCE, 0x91, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0x91, + 0xCC, 0x86, 0xC9, 0x04, 0xCE, 0x91, 0xCD, 0x85, + // Bytes 3600 - 363f + 0xD9, 0x04, 0xCE, 0x95, 0xCC, 0x80, 0xC9, 0x04, + 0xCE, 0x95, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0x97, + 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x97, 0xCC, 0x81, + 0xC9, 0x04, 0xCE, 0x97, 0xCD, 0x85, 0xD9, 0x04, + 0xCE, 0x99, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x99, + 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0x99, 0xCC, 0x84, + 0xC9, 0x04, 0xCE, 0x99, 0xCC, 0x86, 0xC9, 0x04, + 0xCE, 0x99, 0xCC, 0x88, 0xC9, 0x04, 0xCE, 0x9F, + // Bytes 3640 - 367f + 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x9F, 0xCC, 0x81, + 0xC9, 0x04, 0xCE, 0xA1, 0xCC, 0x94, 0xC9, 0x04, + 0xCE, 0xA5, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0xA5, + 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x84, + 0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x86, 0xC9, 0x04, + 0xCE, 0xA5, 0xCC, 0x88, 0xC9, 0x04, 0xCE, 0xA9, + 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0xA9, 0xCC, 0x81, + 0xC9, 0x04, 0xCE, 0xA9, 0xCD, 0x85, 0xD9, 0x04, + // Bytes 3680 - 36bf + 0xCE, 0xB1, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0xB1, + 0xCC, 0x86, 0xC9, 0x04, 0xCE, 0xB1, 0xCD, 0x85, + 0xD9, 0x04, 0xCE, 0xB5, 0xCC, 0x80, 0xC9, 0x04, + 0xCE, 0xB5, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xB7, + 0xCD, 0x85, 0xD9, 0x04, 0xCE, 0xB9, 0xCC, 0x80, + 0xC9, 0x04, 0xCE, 0xB9, 0xCC, 0x81, 0xC9, 0x04, + 0xCE, 0xB9, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0xB9, + 0xCC, 0x86, 0xC9, 0x04, 0xCE, 0xB9, 0xCD, 0x82, + // Bytes 36c0 - 36ff + 0xC9, 0x04, 0xCE, 0xBF, 0xCC, 0x80, 0xC9, 0x04, + 0xCE, 0xBF, 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x81, + 0xCC, 0x93, 0xC9, 0x04, 0xCF, 0x81, 0xCC, 0x94, + 0xC9, 0x04, 0xCF, 0x85, 0xCC, 0x80, 0xC9, 0x04, + 0xCF, 0x85, 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x85, + 0xCC, 0x84, 0xC9, 0x04, 0xCF, 0x85, 0xCC, 0x86, + 0xC9, 0x04, 0xCF, 0x85, 0xCD, 0x82, 0xC9, 0x04, + 0xCF, 0x89, 0xCD, 0x85, 0xD9, 0x04, 0xCF, 0x92, + // Bytes 3700 - 373f + 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x92, 0xCC, 0x88, + 0xC9, 0x04, 0xD0, 0x86, 0xCC, 0x88, 0xC9, 0x04, + 0xD0, 0x90, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0x90, + 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x93, 0xCC, 0x81, + 0xC9, 0x04, 0xD0, 0x95, 0xCC, 0x80, 0xC9, 0x04, + 0xD0, 0x95, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0x95, + 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x96, 0xCC, 0x86, + 0xC9, 0x04, 0xD0, 0x96, 0xCC, 0x88, 0xC9, 0x04, + // Bytes 3740 - 377f + 0xD0, 0x97, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x98, + 0xCC, 0x80, 0xC9, 0x04, 0xD0, 0x98, 0xCC, 0x84, + 0xC9, 0x04, 0xD0, 0x98, 0xCC, 0x86, 0xC9, 0x04, + 0xD0, 0x98, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x9A, + 0xCC, 0x81, 0xC9, 0x04, 0xD0, 0x9E, 0xCC, 0x88, + 0xC9, 0x04, 0xD0, 0xA3, 0xCC, 0x84, 0xC9, 0x04, + 0xD0, 0xA3, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xA3, + 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xA3, 0xCC, 0x8B, + // Bytes 3780 - 37bf + 0xC9, 0x04, 0xD0, 0xA7, 0xCC, 0x88, 0xC9, 0x04, + 0xD0, 0xAB, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xAD, + 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xB0, 0xCC, 0x86, + 0xC9, 0x04, 0xD0, 0xB0, 0xCC, 0x88, 0xC9, 0x04, + 0xD0, 0xB3, 0xCC, 0x81, 0xC9, 0x04, 0xD0, 0xB5, + 0xCC, 0x80, 0xC9, 0x04, 0xD0, 0xB5, 0xCC, 0x86, + 0xC9, 0x04, 0xD0, 0xB5, 0xCC, 0x88, 0xC9, 0x04, + 0xD0, 0xB6, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB6, + // Bytes 37c0 - 37ff + 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xB7, 0xCC, 0x88, + 0xC9, 0x04, 0xD0, 0xB8, 0xCC, 0x80, 0xC9, 0x04, + 0xD0, 0xB8, 0xCC, 0x84, 0xC9, 0x04, 0xD0, 0xB8, + 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB8, 0xCC, 0x88, + 0xC9, 0x04, 0xD0, 0xBA, 0xCC, 0x81, 0xC9, 0x04, + 0xD0, 0xBE, 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0x83, + 0xCC, 0x84, 0xC9, 0x04, 0xD1, 0x83, 0xCC, 0x86, + 0xC9, 0x04, 0xD1, 0x83, 0xCC, 0x88, 0xC9, 0x04, + // Bytes 3800 - 383f + 0xD1, 0x83, 0xCC, 0x8B, 0xC9, 0x04, 0xD1, 0x87, + 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0x8B, 0xCC, 0x88, + 0xC9, 0x04, 0xD1, 0x8D, 0xCC, 0x88, 0xC9, 0x04, + 0xD1, 0x96, 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0xB4, + 0xCC, 0x8F, 0xC9, 0x04, 0xD1, 0xB5, 0xCC, 0x8F, + 0xC9, 0x04, 0xD3, 0x98, 0xCC, 0x88, 0xC9, 0x04, + 0xD3, 0x99, 0xCC, 0x88, 0xC9, 0x04, 0xD3, 0xA8, + 0xCC, 0x88, 0xC9, 0x04, 0xD3, 0xA9, 0xCC, 0x88, + // Bytes 3840 - 387f + 0xC9, 0x04, 0xD8, 0xA7, 0xD9, 0x93, 0xC9, 0x04, + 0xD8, 0xA7, 0xD9, 0x94, 0xC9, 0x04, 0xD8, 0xA7, + 0xD9, 0x95, 0xB5, 0x04, 0xD9, 0x88, 0xD9, 0x94, + 0xC9, 0x04, 0xD9, 0x8A, 0xD9, 0x94, 0xC9, 0x04, + 0xDB, 0x81, 0xD9, 0x94, 0xC9, 0x04, 0xDB, 0x92, + 0xD9, 0x94, 0xC9, 0x04, 0xDB, 0x95, 0xD9, 0x94, + 0xC9, 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x80, 0xCA, + 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, + // Bytes 3880 - 38bf + 0x41, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x41, + 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x41, 0xCC, + 0x86, 0xCC, 0x80, 0xCA, 0x05, 0x41, 0xCC, 0x86, + 0xCC, 0x81, 0xCA, 0x05, 0x41, 0xCC, 0x86, 0xCC, + 0x83, 0xCA, 0x05, 0x41, 0xCC, 0x86, 0xCC, 0x89, + 0xCA, 0x05, 0x41, 0xCC, 0x87, 0xCC, 0x84, 0xCA, + 0x05, 0x41, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, + 0x41, 0xCC, 0x8A, 0xCC, 0x81, 0xCA, 0x05, 0x41, + // Bytes 38c0 - 38ff + 0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x41, 0xCC, + 0xA3, 0xCC, 0x86, 0xCA, 0x05, 0x43, 0xCC, 0xA7, + 0xCC, 0x81, 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, + 0x80, 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x81, + 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x83, 0xCA, + 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, + 0x45, 0xCC, 0x84, 0xCC, 0x80, 0xCA, 0x05, 0x45, + 0xCC, 0x84, 0xCC, 0x81, 0xCA, 0x05, 0x45, 0xCC, + // Bytes 3900 - 393f + 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x45, 0xCC, 0xA7, + 0xCC, 0x86, 0xCA, 0x05, 0x49, 0xCC, 0x88, 0xCC, + 0x81, 0xCA, 0x05, 0x4C, 0xCC, 0xA3, 0xCC, 0x84, + 0xCA, 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x80, 0xCA, + 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, + 0x4F, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x4F, + 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x4F, 0xCC, + 0x83, 0xCC, 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x83, + // Bytes 3940 - 397f + 0xCC, 0x84, 0xCA, 0x05, 0x4F, 0xCC, 0x83, 0xCC, + 0x88, 0xCA, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x80, + 0xCA, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x81, 0xCA, + 0x05, 0x4F, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05, + 0x4F, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x4F, + 0xCC, 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x4F, 0xCC, + 0x9B, 0xCC, 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, + 0xCC, 0x83, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, + // Bytes 3980 - 39bf + 0x89, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, 0xA3, + 0xB6, 0x05, 0x4F, 0xCC, 0xA3, 0xCC, 0x82, 0xCA, + 0x05, 0x4F, 0xCC, 0xA8, 0xCC, 0x84, 0xCA, 0x05, + 0x52, 0xCC, 0xA3, 0xCC, 0x84, 0xCA, 0x05, 0x53, + 0xCC, 0x81, 0xCC, 0x87, 0xCA, 0x05, 0x53, 0xCC, + 0x8C, 0xCC, 0x87, 0xCA, 0x05, 0x53, 0xCC, 0xA3, + 0xCC, 0x87, 0xCA, 0x05, 0x55, 0xCC, 0x83, 0xCC, + 0x81, 0xCA, 0x05, 0x55, 0xCC, 0x84, 0xCC, 0x88, + // Bytes 39c0 - 39ff + 0xCA, 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x80, 0xCA, + 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x05, + 0x55, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x55, + 0xCC, 0x88, 0xCC, 0x8C, 0xCA, 0x05, 0x55, 0xCC, + 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x55, 0xCC, 0x9B, + 0xCC, 0x81, 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, + 0x83, 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0x89, + 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6, + // Bytes 3a00 - 3a3f + 0x05, 0x61, 0xCC, 0x82, 0xCC, 0x80, 0xCA, 0x05, + 0x61, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, 0x61, + 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x61, 0xCC, + 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x61, 0xCC, 0x86, + 0xCC, 0x80, 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, + 0x81, 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x83, + 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x89, 0xCA, + 0x05, 0x61, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05, + // Bytes 3a40 - 3a7f + 0x61, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x61, + 0xCC, 0x8A, 0xCC, 0x81, 0xCA, 0x05, 0x61, 0xCC, + 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x61, 0xCC, 0xA3, + 0xCC, 0x86, 0xCA, 0x05, 0x63, 0xCC, 0xA7, 0xCC, + 0x81, 0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x80, + 0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x81, 0xCA, + 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, + 0x65, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x65, + // Bytes 3a80 - 3abf + 0xCC, 0x84, 0xCC, 0x80, 0xCA, 0x05, 0x65, 0xCC, + 0x84, 0xCC, 0x81, 0xCA, 0x05, 0x65, 0xCC, 0xA3, + 0xCC, 0x82, 0xCA, 0x05, 0x65, 0xCC, 0xA7, 0xCC, + 0x86, 0xCA, 0x05, 0x69, 0xCC, 0x88, 0xCC, 0x81, + 0xCA, 0x05, 0x6C, 0xCC, 0xA3, 0xCC, 0x84, 0xCA, + 0x05, 0x6F, 0xCC, 0x82, 0xCC, 0x80, 0xCA, 0x05, + 0x6F, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, 0x6F, + 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x6F, 0xCC, + // Bytes 3ac0 - 3aff + 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x6F, 0xCC, 0x83, + 0xCC, 0x81, 0xCA, 0x05, 0x6F, 0xCC, 0x83, 0xCC, + 0x84, 0xCA, 0x05, 0x6F, 0xCC, 0x83, 0xCC, 0x88, + 0xCA, 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x80, 0xCA, + 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x81, 0xCA, 0x05, + 0x6F, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05, 0x6F, + 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x6F, 0xCC, + 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, + // Bytes 3b00 - 3b3f + 0xCC, 0x81, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, + 0x83, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0x89, + 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6, + 0x05, 0x6F, 0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05, + 0x6F, 0xCC, 0xA8, 0xCC, 0x84, 0xCA, 0x05, 0x72, + 0xCC, 0xA3, 0xCC, 0x84, 0xCA, 0x05, 0x73, 0xCC, + 0x81, 0xCC, 0x87, 0xCA, 0x05, 0x73, 0xCC, 0x8C, + 0xCC, 0x87, 0xCA, 0x05, 0x73, 0xCC, 0xA3, 0xCC, + // Bytes 3b40 - 3b7f + 0x87, 0xCA, 0x05, 0x75, 0xCC, 0x83, 0xCC, 0x81, + 0xCA, 0x05, 0x75, 0xCC, 0x84, 0xCC, 0x88, 0xCA, + 0x05, 0x75, 0xCC, 0x88, 0xCC, 0x80, 0xCA, 0x05, + 0x75, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x05, 0x75, + 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x75, 0xCC, + 0x88, 0xCC, 0x8C, 0xCA, 0x05, 0x75, 0xCC, 0x9B, + 0xCC, 0x80, 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, + 0x81, 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x83, + // Bytes 3b80 - 3bbf + 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x89, 0xCA, + 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6, 0x05, + 0xE1, 0xBE, 0xBF, 0xCC, 0x80, 0xCA, 0x05, 0xE1, + 0xBE, 0xBF, 0xCC, 0x81, 0xCA, 0x05, 0xE1, 0xBE, + 0xBF, 0xCD, 0x82, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, + 0xCC, 0x80, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, 0xCC, + 0x81, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, 0xCD, 0x82, + 0xCA, 0x05, 0xE2, 0x86, 0x90, 0xCC, 0xB8, 0x05, + // Bytes 3bc0 - 3bff + 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, 0x05, 0x05, 0xE2, 0x88, 0x88, 0xCC, 0xB8, + 0x05, 0x05, 0xE2, 0x88, 0x8B, 0xCC, 0xB8, 0x05, + 0x05, 0xE2, 0x88, 0xA3, 0xCC, 0xB8, 0x05, 0x05, + // Bytes 3c00 - 3c3f + 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, 0x05, 0xE2, 0x89, 0xA1, 0xCC, 0xB8, 0x05, + 0x05, 0xE2, 0x89, 0xA4, 0xCC, 0xB8, 0x05, 0x05, + 0xE2, 0x89, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2, + // Bytes 3c40 - 3c7f + 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, 0xE2, 0x89, 0xBC, 0xCC, 0xB8, 0x05, 0x05, + 0xE2, 0x89, 0xBD, 0xCC, 0xB8, 0x05, 0x05, 0xE2, + 0x8A, 0x82, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, + // Bytes 3c80 - 3cbf + 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, 0x8A, 0xA8, 0xCC, 0xB8, 0x05, 0x05, 0xE2, + 0x8A, 0xA9, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, + 0xAB, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB2, + // Bytes 3cc0 - 3cff + 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, 0xDA, + 0x06, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x80, 0xCA, + // Bytes 3d00 - 3d3f + 0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCD, 0x82, 0xCA, + 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x81, 0xCA, + // Bytes 3d40 - 3d7f + 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCD, 0x82, 0xCA, + 0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCD, 0x82, 0xCA, + // Bytes 3d80 - 3dbf + 0x06, 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xB1, 0xCC, 0x80, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xB1, 0xCC, 0x81, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xB1, 0xCD, 0x82, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x80, 0xCA, + // Bytes 3dc0 - 3dff + 0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0xB7, 0xCC, 0x80, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xB7, 0xCC, 0x81, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x85, 0xDA, + 0x06, 0xCE, 0xB7, 0xCD, 0x82, 0xCD, 0x85, 0xDA, + // Bytes 3e00 - 3e3f + 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCD, 0x82, 0xCA, + 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCD, 0x82, 0xCA, + 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x81, 0xCA, + // Bytes 3e40 - 3e7f + 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCD, 0x82, 0xCA, + 0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x81, 0xCA, + 0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x80, 0xCA, + 0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x81, 0xCA, + 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x80, 0xCA, + 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, 0xCA, + 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCD, 0x82, 0xCA, + // Bytes 3e80 - 3ebf + 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x80, 0xCA, + 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x81, 0xCA, + 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCD, 0x82, 0xCA, + 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x80, 0xCA, + 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x81, 0xCA, + 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCD, 0x82, 0xCA, + 0x06, 0xCF, 0x89, 0xCC, 0x80, 0xCD, 0x85, 0xDA, + 0x06, 0xCF, 0x89, 0xCC, 0x81, 0xCD, 0x85, 0xDA, + // Bytes 3ec0 - 3eff + 0x06, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x85, 0xDA, + 0x06, 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x85, 0xDA, + 0x06, 0xCF, 0x89, 0xCD, 0x82, 0xCD, 0x85, 0xDA, + 0x06, 0xE0, 0xA4, 0xA8, 0xE0, 0xA4, 0xBC, 0x09, + 0x06, 0xE0, 0xA4, 0xB0, 0xE0, 0xA4, 0xBC, 0x09, + 0x06, 0xE0, 0xA4, 0xB3, 0xE0, 0xA4, 0xBC, 0x09, + 0x06, 0xE0, 0xB1, 0x86, 0xE0, 0xB1, 0x96, 0x85, + 0x06, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8A, 0x11, + // Bytes 3f00 - 3f3f + 0x06, 0xE3, 0x81, 0x86, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0x8B, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0x8D, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0x8F, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0x91, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0x93, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0x95, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0x97, 0xE3, 0x82, 0x99, 0x0D, + // Bytes 3f40 - 3f7f + 0x06, 0xE3, 0x81, 0x99, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0x9B, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0x9D, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0x9F, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0xA1, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0xA4, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0xA6, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0xA8, 0xE3, 0x82, 0x99, 0x0D, + // Bytes 3f80 - 3fbf + 0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x9A, 0x0D, + 0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x9A, 0x0D, + 0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x9A, 0x0D, + 0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x9A, 0x0D, + // Bytes 3fc0 - 3fff + 0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x9A, 0x0D, + 0x06, 0xE3, 0x82, 0x9D, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xA6, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xB1, 0xE3, 0x82, 0x99, 0x0D, + // Bytes 4000 - 403f + 0x06, 0xE3, 0x82, 0xB3, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xB5, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xB9, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xBD, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0x81, 0xE3, 0x82, 0x99, 0x0D, + // Bytes 4040 - 407f + 0x06, 0xE3, 0x83, 0x84, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0x0D, + 0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0x0D, + 0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, 0x0D, + // Bytes 4080 - 40bf + 0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x9A, 0x0D, + 0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0x0D, + 0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0x0D, + 0x06, 0xE3, 0x83, 0xAF, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0xB0, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0xB1, 0xE3, 0x82, 0x99, 0x0D, + // Bytes 40c0 - 40ff + 0x06, 0xE3, 0x83, 0xB2, 0xE3, 0x82, 0x99, 0x0D, + 0x06, 0xE3, 0x83, 0xBD, 0xE3, 0x82, 0x99, 0x0D, + 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCD, + 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC, + 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, + 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, + 0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB, + 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCD, + // Bytes 4100 - 413f + 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCD, + 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC, + 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, + 0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB, + 0x08, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCD, + 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC, 0x94, 0xCC, + 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC, + 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, + // Bytes 4140 - 417f + 0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB, + 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCD, + 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, + 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, + 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, + 0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB, + 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCD, + 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, + // Bytes 4180 - 41bf + 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC, + 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, + 0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB, + 0x08, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCD, + 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC, 0x94, 0xCC, + 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC, + 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, + 0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB, + // Bytes 41c0 - 41ff + 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCD, + 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, + 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, + 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, + 0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB, + 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCD, + 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, + 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC, + // Bytes 4200 - 423f + 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCF, + 0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB, + 0x08, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCD, + 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC, 0x94, 0xCC, + 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC, + 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCF, + 0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB, + 0x08, 0xF0, 0x91, 0x82, 0x99, 0xF0, 0x91, 0x82, + // Bytes 4240 - 427f + 0xBA, 0x09, 0x08, 0xF0, 0x91, 0x82, 0x9B, 0xF0, + 0x91, 0x82, 0xBA, 0x09, 0x08, 0xF0, 0x91, 0x82, + 0xA5, 0xF0, 0x91, 0x82, 0xBA, 0x09, 0x42, 0xC2, + 0xB4, 0x01, 0x43, 0x20, 0xCC, 0x81, 0xC9, 0x43, + 0x20, 0xCC, 0x83, 0xC9, 0x43, 0x20, 0xCC, 0x84, + 0xC9, 0x43, 0x20, 0xCC, 0x85, 0xC9, 0x43, 0x20, + 0xCC, 0x86, 0xC9, 0x43, 0x20, 0xCC, 0x87, 0xC9, + 0x43, 0x20, 0xCC, 0x88, 0xC9, 0x43, 0x20, 0xCC, + // Bytes 4280 - 42bf + 0x8A, 0xC9, 0x43, 0x20, 0xCC, 0x8B, 0xC9, 0x43, + 0x20, 0xCC, 0x93, 0xC9, 0x43, 0x20, 0xCC, 0x94, + 0xC9, 0x43, 0x20, 0xCC, 0xA7, 0xA5, 0x43, 0x20, + 0xCC, 0xA8, 0xA5, 0x43, 0x20, 0xCC, 0xB3, 0xB5, + 0x43, 0x20, 0xCD, 0x82, 0xC9, 0x43, 0x20, 0xCD, + 0x85, 0xD9, 0x43, 0x20, 0xD9, 0x8B, 0x59, 0x43, + 0x20, 0xD9, 0x8C, 0x5D, 0x43, 0x20, 0xD9, 0x8D, + 0x61, 0x43, 0x20, 0xD9, 0x8E, 0x65, 0x43, 0x20, + // Bytes 42c0 - 42ff + 0xD9, 0x8F, 0x69, 0x43, 0x20, 0xD9, 0x90, 0x6D, + 0x43, 0x20, 0xD9, 0x91, 0x71, 0x43, 0x20, 0xD9, + 0x92, 0x75, 0x43, 0x41, 0xCC, 0x8A, 0xC9, 0x43, + 0x73, 0xCC, 0x87, 0xC9, 0x44, 0x20, 0xE3, 0x82, + 0x99, 0x0D, 0x44, 0x20, 0xE3, 0x82, 0x9A, 0x0D, + 0x44, 0xC2, 0xA8, 0xCC, 0x81, 0xCA, 0x44, 0xCE, + 0x91, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0x95, 0xCC, + 0x81, 0xC9, 0x44, 0xCE, 0x97, 0xCC, 0x81, 0xC9, + // Bytes 4300 - 433f + 0x44, 0xCE, 0x99, 0xCC, 0x81, 0xC9, 0x44, 0xCE, + 0x9F, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC, + 0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC, 0x88, 0xC9, + 0x44, 0xCE, 0xA9, 0xCC, 0x81, 0xC9, 0x44, 0xCE, + 0xB1, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xB5, 0xCC, + 0x81, 0xC9, 0x44, 0xCE, 0xB7, 0xCC, 0x81, 0xC9, + 0x44, 0xCE, 0xB9, 0xCC, 0x81, 0xC9, 0x44, 0xCE, + 0xBF, 0xCC, 0x81, 0xC9, 0x44, 0xCF, 0x85, 0xCC, + // Bytes 4340 - 437f + 0x81, 0xC9, 0x44, 0xCF, 0x89, 0xCC, 0x81, 0xC9, + 0x44, 0xD7, 0x90, 0xD6, 0xB7, 0x31, 0x44, 0xD7, + 0x90, 0xD6, 0xB8, 0x35, 0x44, 0xD7, 0x90, 0xD6, + 0xBC, 0x41, 0x44, 0xD7, 0x91, 0xD6, 0xBC, 0x41, + 0x44, 0xD7, 0x91, 0xD6, 0xBF, 0x49, 0x44, 0xD7, + 0x92, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x93, 0xD6, + 0xBC, 0x41, 0x44, 0xD7, 0x94, 0xD6, 0xBC, 0x41, + 0x44, 0xD7, 0x95, 0xD6, 0xB9, 0x39, 0x44, 0xD7, + // Bytes 4380 - 43bf + 0x95, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x96, 0xD6, + 0xBC, 0x41, 0x44, 0xD7, 0x98, 0xD6, 0xBC, 0x41, + 0x44, 0xD7, 0x99, 0xD6, 0xB4, 0x25, 0x44, 0xD7, + 0x99, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9A, 0xD6, + 0xBC, 0x41, 0x44, 0xD7, 0x9B, 0xD6, 0xBC, 0x41, + 0x44, 0xD7, 0x9B, 0xD6, 0xBF, 0x49, 0x44, 0xD7, + 0x9C, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9E, 0xD6, + 0xBC, 0x41, 0x44, 0xD7, 0xA0, 0xD6, 0xBC, 0x41, + // Bytes 43c0 - 43ff + 0x44, 0xD7, 0xA1, 0xD6, 0xBC, 0x41, 0x44, 0xD7, + 0xA3, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6, + 0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6, 0xBF, 0x49, + 0x44, 0xD7, 0xA6, 0xD6, 0xBC, 0x41, 0x44, 0xD7, + 0xA7, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA8, 0xD6, + 0xBC, 0x41, 0x44, 0xD7, 0xA9, 0xD6, 0xBC, 0x41, + 0x44, 0xD7, 0xA9, 0xD7, 0x81, 0x4D, 0x44, 0xD7, + 0xA9, 0xD7, 0x82, 0x51, 0x44, 0xD7, 0xAA, 0xD6, + // Bytes 4400 - 443f + 0xBC, 0x41, 0x44, 0xD7, 0xB2, 0xD6, 0xB7, 0x31, + 0x44, 0xD8, 0xA7, 0xD9, 0x8B, 0x59, 0x44, 0xD8, + 0xA7, 0xD9, 0x93, 0xC9, 0x44, 0xD8, 0xA7, 0xD9, + 0x94, 0xC9, 0x44, 0xD8, 0xA7, 0xD9, 0x95, 0xB5, + 0x44, 0xD8, 0xB0, 0xD9, 0xB0, 0x79, 0x44, 0xD8, + 0xB1, 0xD9, 0xB0, 0x79, 0x44, 0xD9, 0x80, 0xD9, + 0x8B, 0x59, 0x44, 0xD9, 0x80, 0xD9, 0x8E, 0x65, + 0x44, 0xD9, 0x80, 0xD9, 0x8F, 0x69, 0x44, 0xD9, + // Bytes 4440 - 447f + 0x80, 0xD9, 0x90, 0x6D, 0x44, 0xD9, 0x80, 0xD9, + 0x91, 0x71, 0x44, 0xD9, 0x80, 0xD9, 0x92, 0x75, + 0x44, 0xD9, 0x87, 0xD9, 0xB0, 0x79, 0x44, 0xD9, + 0x88, 0xD9, 0x94, 0xC9, 0x44, 0xD9, 0x89, 0xD9, + 0xB0, 0x79, 0x44, 0xD9, 0x8A, 0xD9, 0x94, 0xC9, + 0x44, 0xDB, 0x92, 0xD9, 0x94, 0xC9, 0x44, 0xDB, + 0x95, 0xD9, 0x94, 0xC9, 0x45, 0x20, 0xCC, 0x88, + 0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCC, + // Bytes 4480 - 44bf + 0x81, 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCD, 0x82, + 0xCA, 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x80, 0xCA, + 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x45, + 0x20, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x45, 0x20, + 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC, + 0x94, 0xCC, 0x81, 0xCA, 0x45, 0x20, 0xCC, 0x94, + 0xCD, 0x82, 0xCA, 0x45, 0x20, 0xD9, 0x8C, 0xD9, + 0x91, 0x72, 0x45, 0x20, 0xD9, 0x8D, 0xD9, 0x91, + // Bytes 44c0 - 44ff + 0x72, 0x45, 0x20, 0xD9, 0x8E, 0xD9, 0x91, 0x72, + 0x45, 0x20, 0xD9, 0x8F, 0xD9, 0x91, 0x72, 0x45, + 0x20, 0xD9, 0x90, 0xD9, 0x91, 0x72, 0x45, 0x20, + 0xD9, 0x91, 0xD9, 0xB0, 0x7A, 0x45, 0xE2, 0xAB, + 0x9D, 0xCC, 0xB8, 0x05, 0x46, 0xCE, 0xB9, 0xCC, + 0x88, 0xCC, 0x81, 0xCA, 0x46, 0xCF, 0x85, 0xCC, + 0x88, 0xCC, 0x81, 0xCA, 0x46, 0xD7, 0xA9, 0xD6, + 0xBC, 0xD7, 0x81, 0x4E, 0x46, 0xD7, 0xA9, 0xD6, + // Bytes 4500 - 453f + 0xBC, 0xD7, 0x82, 0x52, 0x46, 0xD9, 0x80, 0xD9, + 0x8E, 0xD9, 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9, + 0x8F, 0xD9, 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9, + 0x90, 0xD9, 0x91, 0x72, 0x46, 0xE0, 0xA4, 0x95, + 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x96, + 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x97, + 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x9C, + 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA1, + // Bytes 4540 - 457f + 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA2, + 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAB, + 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAF, + 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA1, + 0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA2, + 0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xAF, + 0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x96, + 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x97, + // Bytes 4580 - 45bf + 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x9C, + 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xAB, + 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB2, + 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB8, + 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA1, + 0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA2, + 0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, 0xBE, 0xB2, + 0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE0, 0xBE, 0xB3, + // Bytes 45c0 - 45ff + 0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE3, 0x83, 0x86, + 0xE3, 0x82, 0x99, 0x0D, 0x48, 0xF0, 0x9D, 0x85, + 0x97, 0xF0, 0x9D, 0x85, 0xA5, 0xAD, 0x48, 0xF0, + 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xAD, + 0x48, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, + 0xA5, 0xAD, 0x48, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, + 0x9D, 0x85, 0xA5, 0xAD, 0x49, 0xE0, 0xBE, 0xB2, + 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x49, + // Bytes 4600 - 463f + 0xE0, 0xBE, 0xB3, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, + 0x80, 0x9E, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, + 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE, + 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, + 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0, + 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, + 0x9D, 0x85, 0xB0, 0xAE, 0x4C, 0xF0, 0x9D, 0x85, + 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, + // Bytes 4640 - 467f + 0xB1, 0xAE, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, + 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB2, 0xAE, + 0x4C, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, + 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE, 0x4C, 0xF0, + 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, + 0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0, 0x9D, 0x86, + 0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, + 0xAE, 0xAE, 0x4C, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, + // Bytes 4680 - 46bf + 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE, + 0x83, 0x41, 0xCC, 0x82, 0xC9, 0x83, 0x41, 0xCC, + 0x86, 0xC9, 0x83, 0x41, 0xCC, 0x87, 0xC9, 0x83, + 0x41, 0xCC, 0x88, 0xC9, 0x83, 0x41, 0xCC, 0x8A, + 0xC9, 0x83, 0x41, 0xCC, 0xA3, 0xB5, 0x83, 0x43, + 0xCC, 0xA7, 0xA5, 0x83, 0x45, 0xCC, 0x82, 0xC9, + 0x83, 0x45, 0xCC, 0x84, 0xC9, 0x83, 0x45, 0xCC, + 0xA3, 0xB5, 0x83, 0x45, 0xCC, 0xA7, 0xA5, 0x83, + // Bytes 46c0 - 46ff + 0x49, 0xCC, 0x88, 0xC9, 0x83, 0x4C, 0xCC, 0xA3, + 0xB5, 0x83, 0x4F, 0xCC, 0x82, 0xC9, 0x83, 0x4F, + 0xCC, 0x83, 0xC9, 0x83, 0x4F, 0xCC, 0x84, 0xC9, + 0x83, 0x4F, 0xCC, 0x87, 0xC9, 0x83, 0x4F, 0xCC, + 0x88, 0xC9, 0x83, 0x4F, 0xCC, 0x9B, 0xAD, 0x83, + 0x4F, 0xCC, 0xA3, 0xB5, 0x83, 0x4F, 0xCC, 0xA8, + 0xA5, 0x83, 0x52, 0xCC, 0xA3, 0xB5, 0x83, 0x53, + 0xCC, 0x81, 0xC9, 0x83, 0x53, 0xCC, 0x8C, 0xC9, + // Bytes 4700 - 473f + 0x83, 0x53, 0xCC, 0xA3, 0xB5, 0x83, 0x55, 0xCC, + 0x83, 0xC9, 0x83, 0x55, 0xCC, 0x84, 0xC9, 0x83, + 0x55, 0xCC, 0x88, 0xC9, 0x83, 0x55, 0xCC, 0x9B, + 0xAD, 0x83, 0x61, 0xCC, 0x82, 0xC9, 0x83, 0x61, + 0xCC, 0x86, 0xC9, 0x83, 0x61, 0xCC, 0x87, 0xC9, + 0x83, 0x61, 0xCC, 0x88, 0xC9, 0x83, 0x61, 0xCC, + 0x8A, 0xC9, 0x83, 0x61, 0xCC, 0xA3, 0xB5, 0x83, + 0x63, 0xCC, 0xA7, 0xA5, 0x83, 0x65, 0xCC, 0x82, + // Bytes 4740 - 477f + 0xC9, 0x83, 0x65, 0xCC, 0x84, 0xC9, 0x83, 0x65, + 0xCC, 0xA3, 0xB5, 0x83, 0x65, 0xCC, 0xA7, 0xA5, + 0x83, 0x69, 0xCC, 0x88, 0xC9, 0x83, 0x6C, 0xCC, + 0xA3, 0xB5, 0x83, 0x6F, 0xCC, 0x82, 0xC9, 0x83, + 0x6F, 0xCC, 0x83, 0xC9, 0x83, 0x6F, 0xCC, 0x84, + 0xC9, 0x83, 0x6F, 0xCC, 0x87, 0xC9, 0x83, 0x6F, + 0xCC, 0x88, 0xC9, 0x83, 0x6F, 0xCC, 0x9B, 0xAD, + 0x83, 0x6F, 0xCC, 0xA3, 0xB5, 0x83, 0x6F, 0xCC, + // Bytes 4780 - 47bf + 0xA8, 0xA5, 0x83, 0x72, 0xCC, 0xA3, 0xB5, 0x83, + 0x73, 0xCC, 0x81, 0xC9, 0x83, 0x73, 0xCC, 0x8C, + 0xC9, 0x83, 0x73, 0xCC, 0xA3, 0xB5, 0x83, 0x75, + 0xCC, 0x83, 0xC9, 0x83, 0x75, 0xCC, 0x84, 0xC9, + 0x83, 0x75, 0xCC, 0x88, 0xC9, 0x83, 0x75, 0xCC, + 0x9B, 0xAD, 0x84, 0xCE, 0x91, 0xCC, 0x93, 0xC9, + 0x84, 0xCE, 0x91, 0xCC, 0x94, 0xC9, 0x84, 0xCE, + 0x95, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x95, 0xCC, + // Bytes 47c0 - 47ff + 0x94, 0xC9, 0x84, 0xCE, 0x97, 0xCC, 0x93, 0xC9, + 0x84, 0xCE, 0x97, 0xCC, 0x94, 0xC9, 0x84, 0xCE, + 0x99, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x99, 0xCC, + 0x94, 0xC9, 0x84, 0xCE, 0x9F, 0xCC, 0x93, 0xC9, + 0x84, 0xCE, 0x9F, 0xCC, 0x94, 0xC9, 0x84, 0xCE, + 0xA5, 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0xA9, 0xCC, + 0x93, 0xC9, 0x84, 0xCE, 0xA9, 0xCC, 0x94, 0xC9, + 0x84, 0xCE, 0xB1, 0xCC, 0x80, 0xC9, 0x84, 0xCE, + // Bytes 4800 - 483f + 0xB1, 0xCC, 0x81, 0xC9, 0x84, 0xCE, 0xB1, 0xCC, + 0x93, 0xC9, 0x84, 0xCE, 0xB1, 0xCC, 0x94, 0xC9, + 0x84, 0xCE, 0xB1, 0xCD, 0x82, 0xC9, 0x84, 0xCE, + 0xB5, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB5, 0xCC, + 0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCC, 0x80, 0xC9, + 0x84, 0xCE, 0xB7, 0xCC, 0x81, 0xC9, 0x84, 0xCE, + 0xB7, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB7, 0xCC, + 0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCD, 0x82, 0xC9, + // Bytes 4840 - 487f + 0x84, 0xCE, 0xB9, 0xCC, 0x88, 0xC9, 0x84, 0xCE, + 0xB9, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB9, 0xCC, + 0x94, 0xC9, 0x84, 0xCE, 0xBF, 0xCC, 0x93, 0xC9, + 0x84, 0xCE, 0xBF, 0xCC, 0x94, 0xC9, 0x84, 0xCF, + 0x85, 0xCC, 0x88, 0xC9, 0x84, 0xCF, 0x85, 0xCC, + 0x93, 0xC9, 0x84, 0xCF, 0x85, 0xCC, 0x94, 0xC9, + 0x84, 0xCF, 0x89, 0xCC, 0x80, 0xC9, 0x84, 0xCF, + 0x89, 0xCC, 0x81, 0xC9, 0x84, 0xCF, 0x89, 0xCC, + // Bytes 4880 - 48bf + 0x93, 0xC9, 0x84, 0xCF, 0x89, 0xCC, 0x94, 0xC9, + 0x84, 0xCF, 0x89, 0xCD, 0x82, 0xC9, 0x86, 0xCE, + 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, + 0x91, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, + 0x91, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, + 0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, + 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, + 0x91, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE, + // Bytes 48c0 - 48ff + 0x97, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, + 0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, + 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, + 0x97, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, + 0x97, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, + 0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE, + 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, + 0xA9, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, + // Bytes 4900 - 493f + 0xA9, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, + 0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, + 0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, + 0xA9, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE, + 0xB1, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, + 0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, + 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, + 0xB1, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, + // Bytes 4940 - 497f + 0xB1, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, + 0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE, + 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, + 0xB7, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, + 0xB7, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, + 0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, + 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, + 0xB7, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCF, + // Bytes 4980 - 49bf + 0x89, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCF, + 0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCF, + 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCF, + 0x89, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCF, + 0x89, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCF, + 0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x42, 0xCC, + 0x80, 0xC9, 0x32, 0x42, 0xCC, 0x81, 0xC9, 0x32, + 0x42, 0xCC, 0x93, 0xC9, 0x32, 0x43, 0xE1, 0x85, + // Bytes 49c0 - 49ff + 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, 0x85, 0xA8, 0x01, 0x00, 0x43, 0xE1, 0x85, + 0xA9, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAA, 0x01, + 0x00, 0x43, 0xE1, 0x85, 0xAB, 0x01, 0x00, 0x43, + // Bytes 4a00 - 4a3f + 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, 0x43, 0xE1, 0x85, 0xB3, 0x01, 0x00, 0x43, + 0xE1, 0x85, 0xB4, 0x01, 0x00, 0x43, 0xE1, 0x85, + 0xB5, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xAA, 0x01, + // Bytes 4a40 - 4a7f + 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, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB5, 0x01, + 0x00, 0x44, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x32, + 0x43, 0xE3, 0x82, 0x99, 0x0D, 0x03, 0x43, 0xE3, + // Bytes 4a80 - 4abf + 0x82, 0x9A, 0x0D, 0x03, 0x46, 0xE0, 0xBD, 0xB1, + 0xE0, 0xBD, 0xB2, 0x9E, 0x26, 0x46, 0xE0, 0xBD, + 0xB1, 0xE0, 0xBD, 0xB4, 0xA2, 0x26, 0x46, 0xE0, + 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x26, 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: 10332 bytes (10.09 KiB). Checksum: 51cc525b297fc970. +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 < 44: + return uint16(nfcValues[n<<6+uint32(b)]) + default: + n -= 44 + return uint16(nfcSparse.lookup(n, b)) + } +} + +// nfcValues: 46 blocks, 2944 entries, 5888 bytes +// The third block is the zero block. +var nfcValues = [2944]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: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x4688, 0xc3: 0x2f79, 0xc4: 0x4697, 0xc5: 0x469c, + 0xc6: 0xa000, 0xc7: 0x46a6, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x46ab, 0xcb: 0x2ffb, + 0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x46bf, 0xd1: 0x3104, + 0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x46c9, 0xd5: 0x46ce, 0xd6: 0x46dd, + 0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x470f, 0xdd: 0x3235, + 0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x4719, 0xe3: 0x3285, + 0xe4: 0x4728, 0xe5: 0x472d, 0xe6: 0xa000, 0xe7: 0x4737, 0xe8: 0x32ee, 0xe9: 0x32f3, + 0xea: 0x473c, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x4750, + 0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x475a, 0xf5: 0x475f, + 0xf6: 0x476e, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3, + 0xfc: 0x47a0, 0xfd: 0x3550, 0xff: 0x3569, + // Block 0x4, offset 0x100 + 0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x468d, 0x103: 0x471e, 0x104: 0x2f9c, 0x105: 0x32a8, + 0x106: 0x2fb0, 0x107: 0x32bc, 0x108: 0x2fb5, 0x109: 0x32c1, 0x10a: 0x2fba, 0x10b: 0x32c6, + 0x10c: 0x2fbf, 0x10d: 0x32cb, 0x10e: 0x2fc9, 0x10f: 0x32d5, + 0x112: 0x46b0, 0x113: 0x4741, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302, + 0x118: 0x3014, 0x119: 0x3320, 0x11a: 0x3005, 0x11b: 0x3311, 0x11c: 0x302d, 0x11d: 0x3339, + 0x11e: 0x3037, 0x11f: 0x3343, 0x120: 0x303c, 0x121: 0x3348, 0x122: 0x3046, 0x123: 0x3352, + 0x124: 0x304b, 0x125: 0x3357, 0x128: 0x307d, 0x129: 0x338e, + 0x12a: 0x3082, 0x12b: 0x3393, 0x12c: 0x3087, 0x12d: 0x3398, 0x12e: 0x30aa, 0x12f: 0x33b6, + 0x130: 0x308c, 0x134: 0x30b4, 0x135: 0x33c0, + 0x136: 0x30c8, 0x137: 0x33d9, 0x139: 0x30d2, 0x13a: 0x33e3, 0x13b: 0x30dc, + 0x13c: 0x33ed, 0x13d: 0x30d7, 0x13e: 0x33e8, + // Block 0x5, offset 0x140 + 0x143: 0x30ff, 0x144: 0x3410, 0x145: 0x3118, + 0x146: 0x3429, 0x147: 0x310e, 0x148: 0x341f, + 0x14c: 0x46d3, 0x14d: 0x4764, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c, + 0x154: 0x3159, 0x155: 0x346a, 0x156: 0x3172, 0x157: 0x3483, + 0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x46f6, 0x15b: 0x4787, 0x15c: 0x317c, 0x15d: 0x348d, + 0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x46fb, 0x161: 0x478c, 0x162: 0x31a4, 0x163: 0x34ba, + 0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x4705, 0x169: 0x4796, + 0x16a: 0x470a, 0x16b: 0x479b, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2, + 0x170: 0x31d1, 0x171: 0x34e7, 0x172: 0x31ef, 0x173: 0x3505, 0x174: 0x3212, 0x175: 0x3528, + 0x176: 0x323a, 0x177: 0x3555, 0x178: 0x324e, 0x179: 0x325d, 0x17a: 0x357d, 0x17b: 0x3267, + 0x17c: 0x3587, 0x17d: 0x326c, 0x17e: 0x358c, 0x17f: 0xa000, + // Block 0x6, offset 0x180 + 0x184: 0x8100, 0x185: 0x8100, + 0x186: 0x8100, + 0x18d: 0x2f88, 0x18e: 0x3294, 0x18f: 0x3096, 0x190: 0x33a2, 0x191: 0x3140, + 0x192: 0x3451, 0x193: 0x31d6, 0x194: 0x34ec, 0x195: 0x39cf, 0x196: 0x3b5e, 0x197: 0x39c8, + 0x198: 0x3b57, 0x199: 0x39d6, 0x19a: 0x3b65, 0x19b: 0x39c1, 0x19c: 0x3b50, + 0x19e: 0x38b0, 0x19f: 0x3a3f, 0x1a0: 0x38a9, 0x1a1: 0x3a38, 0x1a2: 0x35b3, 0x1a3: 0x35c5, + 0x1a6: 0x3041, 0x1a7: 0x334d, 0x1a8: 0x30be, 0x1a9: 0x33cf, + 0x1aa: 0x46ec, 0x1ab: 0x477d, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd, + 0x1b0: 0x33c5, 0x1b4: 0x3028, 0x1b5: 0x3334, + 0x1b8: 0x30fa, 0x1b9: 0x340b, 0x1ba: 0x38b7, 0x1bb: 0x3a46, + 0x1bc: 0x35ad, 0x1bd: 0x35bf, 0x1be: 0x35b9, 0x1bf: 0x35cb, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x2f8d, 0x1c1: 0x3299, 0x1c2: 0x2f92, 0x1c3: 0x329e, 0x1c4: 0x300a, 0x1c5: 0x3316, + 0x1c6: 0x300f, 0x1c7: 0x331b, 0x1c8: 0x309b, 0x1c9: 0x33a7, 0x1ca: 0x30a0, 0x1cb: 0x33ac, + 0x1cc: 0x3145, 0x1cd: 0x3456, 0x1ce: 0x314a, 0x1cf: 0x345b, 0x1d0: 0x3168, 0x1d1: 0x3479, + 0x1d2: 0x316d, 0x1d3: 0x347e, 0x1d4: 0x31db, 0x1d5: 0x34f1, 0x1d6: 0x31e0, 0x1d7: 0x34f6, + 0x1d8: 0x3186, 0x1d9: 0x3497, 0x1da: 0x319f, 0x1db: 0x34b5, + 0x1de: 0x305a, 0x1df: 0x3366, + 0x1e6: 0x4692, 0x1e7: 0x4723, 0x1e8: 0x46ba, 0x1e9: 0x474b, + 0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x46d8, 0x1ef: 0x4769, + 0x1f0: 0x3958, 0x1f1: 0x3ae7, 0x1f2: 0x3244, 0x1f3: 0x355f, + // Block 0x8, offset 0x200 + 0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132, + 0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932, + 0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932, + 0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d, + 0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d, + 0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d, + 0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d, + 0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d, + 0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101, + 0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d, + 0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132, + // Block 0x9, offset 0x240 + 0x240: 0x49ae, 0x241: 0x49b3, 0x242: 0x9932, 0x243: 0x49b8, 0x244: 0x4a71, 0x245: 0x9936, + 0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132, + 0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132, + 0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132, + 0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135, + 0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132, + 0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132, + 0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132, + 0x274: 0x0170, + 0x27a: 0x8100, + 0x27e: 0x0037, + // Block 0xa, offset 0x280 + 0x284: 0x8100, 0x285: 0x35a1, + 0x286: 0x35e9, 0x287: 0x00ce, 0x288: 0x3607, 0x289: 0x3613, 0x28a: 0x3625, + 0x28c: 0x3643, 0x28e: 0x3655, 0x28f: 0x3673, 0x290: 0x3e08, 0x291: 0xa000, + 0x295: 0xa000, 0x297: 0xa000, + 0x299: 0xa000, + 0x29f: 0xa000, 0x2a1: 0xa000, + 0x2a5: 0xa000, 0x2a9: 0xa000, + 0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x47fe, 0x2ad: 0x3697, 0x2ae: 0x4828, 0x2af: 0x36a9, + 0x2b0: 0x3e70, 0x2b1: 0xa000, 0x2b5: 0xa000, + 0x2b7: 0xa000, 0x2b9: 0xa000, + 0x2bf: 0xa000, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x3721, 0x2c1: 0x372d, 0x2c3: 0x371b, + 0x2c6: 0xa000, 0x2c7: 0x3709, + 0x2cc: 0x375d, 0x2cd: 0x3745, 0x2ce: 0x376f, 0x2d0: 0xa000, + 0x2d3: 0xa000, 0x2d5: 0xa000, 0x2d6: 0xa000, 0x2d7: 0xa000, + 0x2d8: 0xa000, 0x2d9: 0x3751, 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: 0x37d5, 0x2fa: 0xa000, + 0x2fe: 0xa000, + // Block 0xc, offset 0x300 + 0x301: 0x3733, 0x302: 0x37b7, + 0x310: 0x370f, 0x311: 0x3793, + 0x312: 0x3715, 0x313: 0x3799, 0x316: 0x3727, 0x317: 0x37ab, + 0x318: 0xa000, 0x319: 0xa000, 0x31a: 0x3829, 0x31b: 0x382f, 0x31c: 0x3739, 0x31d: 0x37bd, + 0x31e: 0x373f, 0x31f: 0x37c3, 0x322: 0x374b, 0x323: 0x37cf, + 0x324: 0x3757, 0x325: 0x37db, 0x326: 0x3763, 0x327: 0x37e7, 0x328: 0xa000, 0x329: 0xa000, + 0x32a: 0x3835, 0x32b: 0x383b, 0x32c: 0x378d, 0x32d: 0x3811, 0x32e: 0x3769, 0x32f: 0x37ed, + 0x330: 0x3775, 0x331: 0x37f9, 0x332: 0x377b, 0x333: 0x37ff, 0x334: 0x3781, 0x335: 0x3805, + 0x338: 0x3787, 0x339: 0x380b, + // Block 0xd, offset 0x340 + 0x351: 0x812d, + 0x352: 0x8132, 0x353: 0x8132, 0x354: 0x8132, 0x355: 0x8132, 0x356: 0x812d, 0x357: 0x8132, + 0x358: 0x8132, 0x359: 0x8132, 0x35a: 0x812e, 0x35b: 0x812d, 0x35c: 0x8132, 0x35d: 0x8132, + 0x35e: 0x8132, 0x35f: 0x8132, 0x360: 0x8132, 0x361: 0x8132, 0x362: 0x812d, 0x363: 0x812d, + 0x364: 0x812d, 0x365: 0x812d, 0x366: 0x812d, 0x367: 0x812d, 0x368: 0x8132, 0x369: 0x8132, + 0x36a: 0x812d, 0x36b: 0x8132, 0x36c: 0x8132, 0x36d: 0x812e, 0x36e: 0x8131, 0x36f: 0x8132, + 0x370: 0x8105, 0x371: 0x8106, 0x372: 0x8107, 0x373: 0x8108, 0x374: 0x8109, 0x375: 0x810a, + 0x376: 0x810b, 0x377: 0x810c, 0x378: 0x810d, 0x379: 0x810e, 0x37a: 0x810e, 0x37b: 0x810f, + 0x37c: 0x8110, 0x37d: 0x8111, 0x37f: 0x8112, + // Block 0xe, offset 0x380 + 0x388: 0xa000, 0x38a: 0xa000, 0x38b: 0x8116, + 0x38c: 0x8117, 0x38d: 0x8118, 0x38e: 0x8119, 0x38f: 0x811a, 0x390: 0x811b, 0x391: 0x811c, + 0x392: 0x811d, 0x393: 0x9932, 0x394: 0x9932, 0x395: 0x992d, 0x396: 0x812d, 0x397: 0x8132, + 0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x8132, 0x39b: 0x8132, 0x39c: 0x812d, 0x39d: 0x8132, + 0x39e: 0x8132, 0x39f: 0x812d, + 0x3b0: 0x811e, + // Block 0xf, offset 0x3c0 + 0x3c5: 0xa000, + 0x3c6: 0x2d26, 0x3c7: 0xa000, 0x3c8: 0x2d2e, 0x3c9: 0xa000, 0x3ca: 0x2d36, 0x3cb: 0xa000, + 0x3cc: 0x2d3e, 0x3cd: 0xa000, 0x3ce: 0x2d46, 0x3d1: 0xa000, + 0x3d2: 0x2d4e, + 0x3f4: 0x8102, 0x3f5: 0x9900, + 0x3fa: 0xa000, 0x3fb: 0x2d56, + 0x3fc: 0xa000, 0x3fd: 0x2d5e, 0x3fe: 0xa000, 0x3ff: 0xa000, + // Block 0x10, offset 0x400 + 0x400: 0x2f97, 0x401: 0x32a3, 0x402: 0x2fa1, 0x403: 0x32ad, 0x404: 0x2fa6, 0x405: 0x32b2, + 0x406: 0x2fab, 0x407: 0x32b7, 0x408: 0x38cc, 0x409: 0x3a5b, 0x40a: 0x2fc4, 0x40b: 0x32d0, + 0x40c: 0x2fce, 0x40d: 0x32da, 0x40e: 0x2fdd, 0x40f: 0x32e9, 0x410: 0x2fd3, 0x411: 0x32df, + 0x412: 0x2fd8, 0x413: 0x32e4, 0x414: 0x38ef, 0x415: 0x3a7e, 0x416: 0x38f6, 0x417: 0x3a85, + 0x418: 0x3019, 0x419: 0x3325, 0x41a: 0x301e, 0x41b: 0x332a, 0x41c: 0x3904, 0x41d: 0x3a93, + 0x41e: 0x3023, 0x41f: 0x332f, 0x420: 0x3032, 0x421: 0x333e, 0x422: 0x3050, 0x423: 0x335c, + 0x424: 0x305f, 0x425: 0x336b, 0x426: 0x3055, 0x427: 0x3361, 0x428: 0x3064, 0x429: 0x3370, + 0x42a: 0x3069, 0x42b: 0x3375, 0x42c: 0x30af, 0x42d: 0x33bb, 0x42e: 0x390b, 0x42f: 0x3a9a, + 0x430: 0x30b9, 0x431: 0x33ca, 0x432: 0x30c3, 0x433: 0x33d4, 0x434: 0x30cd, 0x435: 0x33de, + 0x436: 0x46c4, 0x437: 0x4755, 0x438: 0x3912, 0x439: 0x3aa1, 0x43a: 0x30e6, 0x43b: 0x33f7, + 0x43c: 0x30e1, 0x43d: 0x33f2, 0x43e: 0x30eb, 0x43f: 0x33fc, + // Block 0x11, offset 0x440 + 0x440: 0x30f0, 0x441: 0x3401, 0x442: 0x30f5, 0x443: 0x3406, 0x444: 0x3109, 0x445: 0x341a, + 0x446: 0x3113, 0x447: 0x3424, 0x448: 0x3122, 0x449: 0x3433, 0x44a: 0x311d, 0x44b: 0x342e, + 0x44c: 0x3935, 0x44d: 0x3ac4, 0x44e: 0x3943, 0x44f: 0x3ad2, 0x450: 0x394a, 0x451: 0x3ad9, + 0x452: 0x3951, 0x453: 0x3ae0, 0x454: 0x314f, 0x455: 0x3460, 0x456: 0x3154, 0x457: 0x3465, + 0x458: 0x315e, 0x459: 0x346f, 0x45a: 0x46f1, 0x45b: 0x4782, 0x45c: 0x3997, 0x45d: 0x3b26, + 0x45e: 0x3177, 0x45f: 0x3488, 0x460: 0x3181, 0x461: 0x3492, 0x462: 0x4700, 0x463: 0x4791, + 0x464: 0x399e, 0x465: 0x3b2d, 0x466: 0x39a5, 0x467: 0x3b34, 0x468: 0x39ac, 0x469: 0x3b3b, + 0x46a: 0x3190, 0x46b: 0x34a1, 0x46c: 0x319a, 0x46d: 0x34b0, 0x46e: 0x31ae, 0x46f: 0x34c4, + 0x470: 0x31a9, 0x471: 0x34bf, 0x472: 0x31ea, 0x473: 0x3500, 0x474: 0x31f9, 0x475: 0x350f, + 0x476: 0x31f4, 0x477: 0x350a, 0x478: 0x39b3, 0x479: 0x3b42, 0x47a: 0x39ba, 0x47b: 0x3b49, + 0x47c: 0x31fe, 0x47d: 0x3514, 0x47e: 0x3203, 0x47f: 0x3519, + // Block 0x12, offset 0x480 + 0x480: 0x3208, 0x481: 0x351e, 0x482: 0x320d, 0x483: 0x3523, 0x484: 0x321c, 0x485: 0x3532, + 0x486: 0x3217, 0x487: 0x352d, 0x488: 0x3221, 0x489: 0x353c, 0x48a: 0x3226, 0x48b: 0x3541, + 0x48c: 0x322b, 0x48d: 0x3546, 0x48e: 0x3249, 0x48f: 0x3564, 0x490: 0x3262, 0x491: 0x3582, + 0x492: 0x3271, 0x493: 0x3591, 0x494: 0x3276, 0x495: 0x3596, 0x496: 0x337a, 0x497: 0x34a6, + 0x498: 0x3537, 0x499: 0x3573, 0x49b: 0x35d1, + 0x4a0: 0x46a1, 0x4a1: 0x4732, 0x4a2: 0x2f83, 0x4a3: 0x328f, + 0x4a4: 0x3878, 0x4a5: 0x3a07, 0x4a6: 0x3871, 0x4a7: 0x3a00, 0x4a8: 0x3886, 0x4a9: 0x3a15, + 0x4aa: 0x387f, 0x4ab: 0x3a0e, 0x4ac: 0x38be, 0x4ad: 0x3a4d, 0x4ae: 0x3894, 0x4af: 0x3a23, + 0x4b0: 0x388d, 0x4b1: 0x3a1c, 0x4b2: 0x38a2, 0x4b3: 0x3a31, 0x4b4: 0x389b, 0x4b5: 0x3a2a, + 0x4b6: 0x38c5, 0x4b7: 0x3a54, 0x4b8: 0x46b5, 0x4b9: 0x4746, 0x4ba: 0x3000, 0x4bb: 0x330c, + 0x4bc: 0x2fec, 0x4bd: 0x32f8, 0x4be: 0x38da, 0x4bf: 0x3a69, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x38d3, 0x4c1: 0x3a62, 0x4c2: 0x38e8, 0x4c3: 0x3a77, 0x4c4: 0x38e1, 0x4c5: 0x3a70, + 0x4c6: 0x38fd, 0x4c7: 0x3a8c, 0x4c8: 0x3091, 0x4c9: 0x339d, 0x4ca: 0x30a5, 0x4cb: 0x33b1, + 0x4cc: 0x46e7, 0x4cd: 0x4778, 0x4ce: 0x3136, 0x4cf: 0x3447, 0x4d0: 0x3920, 0x4d1: 0x3aaf, + 0x4d2: 0x3919, 0x4d3: 0x3aa8, 0x4d4: 0x392e, 0x4d5: 0x3abd, 0x4d6: 0x3927, 0x4d7: 0x3ab6, + 0x4d8: 0x3989, 0x4d9: 0x3b18, 0x4da: 0x396d, 0x4db: 0x3afc, 0x4dc: 0x3966, 0x4dd: 0x3af5, + 0x4de: 0x397b, 0x4df: 0x3b0a, 0x4e0: 0x3974, 0x4e1: 0x3b03, 0x4e2: 0x3982, 0x4e3: 0x3b11, + 0x4e4: 0x31e5, 0x4e5: 0x34fb, 0x4e6: 0x31c7, 0x4e7: 0x34dd, 0x4e8: 0x39e4, 0x4e9: 0x3b73, + 0x4ea: 0x39dd, 0x4eb: 0x3b6c, 0x4ec: 0x39f2, 0x4ed: 0x3b81, 0x4ee: 0x39eb, 0x4ef: 0x3b7a, + 0x4f0: 0x39f9, 0x4f1: 0x3b88, 0x4f2: 0x3230, 0x4f3: 0x354b, 0x4f4: 0x3258, 0x4f5: 0x3578, + 0x4f6: 0x3253, 0x4f7: 0x356e, 0x4f8: 0x323f, 0x4f9: 0x355a, + // Block 0x14, offset 0x500 + 0x500: 0x4804, 0x501: 0x480a, 0x502: 0x491e, 0x503: 0x4936, 0x504: 0x4926, 0x505: 0x493e, + 0x506: 0x492e, 0x507: 0x4946, 0x508: 0x47aa, 0x509: 0x47b0, 0x50a: 0x488e, 0x50b: 0x48a6, + 0x50c: 0x4896, 0x50d: 0x48ae, 0x50e: 0x489e, 0x50f: 0x48b6, 0x510: 0x4816, 0x511: 0x481c, + 0x512: 0x3db8, 0x513: 0x3dc8, 0x514: 0x3dc0, 0x515: 0x3dd0, + 0x518: 0x47b6, 0x519: 0x47bc, 0x51a: 0x3ce8, 0x51b: 0x3cf8, 0x51c: 0x3cf0, 0x51d: 0x3d00, + 0x520: 0x482e, 0x521: 0x4834, 0x522: 0x494e, 0x523: 0x4966, + 0x524: 0x4956, 0x525: 0x496e, 0x526: 0x495e, 0x527: 0x4976, 0x528: 0x47c2, 0x529: 0x47c8, + 0x52a: 0x48be, 0x52b: 0x48d6, 0x52c: 0x48c6, 0x52d: 0x48de, 0x52e: 0x48ce, 0x52f: 0x48e6, + 0x530: 0x4846, 0x531: 0x484c, 0x532: 0x3e18, 0x533: 0x3e30, 0x534: 0x3e20, 0x535: 0x3e38, + 0x536: 0x3e28, 0x537: 0x3e40, 0x538: 0x47ce, 0x539: 0x47d4, 0x53a: 0x3d18, 0x53b: 0x3d30, + 0x53c: 0x3d20, 0x53d: 0x3d38, 0x53e: 0x3d28, 0x53f: 0x3d40, + // Block 0x15, offset 0x540 + 0x540: 0x4852, 0x541: 0x4858, 0x542: 0x3e48, 0x543: 0x3e58, 0x544: 0x3e50, 0x545: 0x3e60, + 0x548: 0x47da, 0x549: 0x47e0, 0x54a: 0x3d48, 0x54b: 0x3d58, + 0x54c: 0x3d50, 0x54d: 0x3d60, 0x550: 0x4864, 0x551: 0x486a, + 0x552: 0x3e80, 0x553: 0x3e98, 0x554: 0x3e88, 0x555: 0x3ea0, 0x556: 0x3e90, 0x557: 0x3ea8, + 0x559: 0x47e6, 0x55b: 0x3d68, 0x55d: 0x3d70, + 0x55f: 0x3d78, 0x560: 0x487c, 0x561: 0x4882, 0x562: 0x497e, 0x563: 0x4996, + 0x564: 0x4986, 0x565: 0x499e, 0x566: 0x498e, 0x567: 0x49a6, 0x568: 0x47ec, 0x569: 0x47f2, + 0x56a: 0x48ee, 0x56b: 0x4906, 0x56c: 0x48f6, 0x56d: 0x490e, 0x56e: 0x48fe, 0x56f: 0x4916, + 0x570: 0x47f8, 0x571: 0x431e, 0x572: 0x3691, 0x573: 0x4324, 0x574: 0x4822, 0x575: 0x432a, + 0x576: 0x36a3, 0x577: 0x4330, 0x578: 0x36c1, 0x579: 0x4336, 0x57a: 0x36d9, 0x57b: 0x433c, + 0x57c: 0x4870, 0x57d: 0x4342, + // Block 0x16, offset 0x580 + 0x580: 0x3da0, 0x581: 0x3da8, 0x582: 0x4184, 0x583: 0x41a2, 0x584: 0x418e, 0x585: 0x41ac, + 0x586: 0x4198, 0x587: 0x41b6, 0x588: 0x3cd8, 0x589: 0x3ce0, 0x58a: 0x40d0, 0x58b: 0x40ee, + 0x58c: 0x40da, 0x58d: 0x40f8, 0x58e: 0x40e4, 0x58f: 0x4102, 0x590: 0x3de8, 0x591: 0x3df0, + 0x592: 0x41c0, 0x593: 0x41de, 0x594: 0x41ca, 0x595: 0x41e8, 0x596: 0x41d4, 0x597: 0x41f2, + 0x598: 0x3d08, 0x599: 0x3d10, 0x59a: 0x410c, 0x59b: 0x412a, 0x59c: 0x4116, 0x59d: 0x4134, + 0x59e: 0x4120, 0x59f: 0x413e, 0x5a0: 0x3ec0, 0x5a1: 0x3ec8, 0x5a2: 0x41fc, 0x5a3: 0x421a, + 0x5a4: 0x4206, 0x5a5: 0x4224, 0x5a6: 0x4210, 0x5a7: 0x422e, 0x5a8: 0x3d80, 0x5a9: 0x3d88, + 0x5aa: 0x4148, 0x5ab: 0x4166, 0x5ac: 0x4152, 0x5ad: 0x4170, 0x5ae: 0x415c, 0x5af: 0x417a, + 0x5b0: 0x3685, 0x5b1: 0x367f, 0x5b2: 0x3d90, 0x5b3: 0x368b, 0x5b4: 0x3d98, + 0x5b6: 0x4810, 0x5b7: 0x3db0, 0x5b8: 0x35f5, 0x5b9: 0x35ef, 0x5ba: 0x35e3, 0x5bb: 0x42ee, + 0x5bc: 0x35fb, 0x5bd: 0x8100, 0x5be: 0x01d3, 0x5bf: 0xa100, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x8100, 0x5c1: 0x35a7, 0x5c2: 0x3dd8, 0x5c3: 0x369d, 0x5c4: 0x3de0, + 0x5c6: 0x483a, 0x5c7: 0x3df8, 0x5c8: 0x3601, 0x5c9: 0x42f4, 0x5ca: 0x360d, 0x5cb: 0x42fa, + 0x5cc: 0x3619, 0x5cd: 0x3b8f, 0x5ce: 0x3b96, 0x5cf: 0x3b9d, 0x5d0: 0x36b5, 0x5d1: 0x36af, + 0x5d2: 0x3e00, 0x5d3: 0x44e4, 0x5d6: 0x36bb, 0x5d7: 0x3e10, + 0x5d8: 0x3631, 0x5d9: 0x362b, 0x5da: 0x361f, 0x5db: 0x4300, 0x5dd: 0x3ba4, + 0x5de: 0x3bab, 0x5df: 0x3bb2, 0x5e0: 0x36eb, 0x5e1: 0x36e5, 0x5e2: 0x3e68, 0x5e3: 0x44ec, + 0x5e4: 0x36cd, 0x5e5: 0x36d3, 0x5e6: 0x36f1, 0x5e7: 0x3e78, 0x5e8: 0x3661, 0x5e9: 0x365b, + 0x5ea: 0x364f, 0x5eb: 0x430c, 0x5ec: 0x3649, 0x5ed: 0x359b, 0x5ee: 0x42e8, 0x5ef: 0x0081, + 0x5f2: 0x3eb0, 0x5f3: 0x36f7, 0x5f4: 0x3eb8, + 0x5f6: 0x4888, 0x5f7: 0x3ed0, 0x5f8: 0x363d, 0x5f9: 0x4306, 0x5fa: 0x366d, 0x5fb: 0x4318, + 0x5fc: 0x3679, 0x5fd: 0x4256, 0x5fe: 0xa100, + // Block 0x18, offset 0x600 + 0x601: 0x3c06, 0x603: 0xa000, 0x604: 0x3c0d, 0x605: 0xa000, + 0x607: 0x3c14, 0x608: 0xa000, 0x609: 0x3c1b, + 0x60d: 0xa000, + 0x620: 0x2f65, 0x621: 0xa000, 0x622: 0x3c29, + 0x624: 0xa000, 0x625: 0xa000, + 0x62d: 0x3c22, 0x62e: 0x2f60, 0x62f: 0x2f6a, + 0x630: 0x3c30, 0x631: 0x3c37, 0x632: 0xa000, 0x633: 0xa000, 0x634: 0x3c3e, 0x635: 0x3c45, + 0x636: 0xa000, 0x637: 0xa000, 0x638: 0x3c4c, 0x639: 0x3c53, 0x63a: 0xa000, 0x63b: 0xa000, + 0x63c: 0xa000, 0x63d: 0xa000, + // Block 0x19, offset 0x640 + 0x640: 0x3c5a, 0x641: 0x3c61, 0x642: 0xa000, 0x643: 0xa000, 0x644: 0x3c76, 0x645: 0x3c7d, + 0x646: 0xa000, 0x647: 0xa000, 0x648: 0x3c84, 0x649: 0x3c8b, + 0x651: 0xa000, + 0x652: 0xa000, + 0x662: 0xa000, + 0x668: 0xa000, 0x669: 0xa000, + 0x66b: 0xa000, 0x66c: 0x3ca0, 0x66d: 0x3ca7, 0x66e: 0x3cae, 0x66f: 0x3cb5, + 0x672: 0xa000, 0x673: 0xa000, 0x674: 0xa000, 0x675: 0xa000, + // Block 0x1a, offset 0x680 + 0x686: 0xa000, 0x68b: 0xa000, + 0x68c: 0x3f08, 0x68d: 0xa000, 0x68e: 0x3f10, 0x68f: 0xa000, 0x690: 0x3f18, 0x691: 0xa000, + 0x692: 0x3f20, 0x693: 0xa000, 0x694: 0x3f28, 0x695: 0xa000, 0x696: 0x3f30, 0x697: 0xa000, + 0x698: 0x3f38, 0x699: 0xa000, 0x69a: 0x3f40, 0x69b: 0xa000, 0x69c: 0x3f48, 0x69d: 0xa000, + 0x69e: 0x3f50, 0x69f: 0xa000, 0x6a0: 0x3f58, 0x6a1: 0xa000, 0x6a2: 0x3f60, + 0x6a4: 0xa000, 0x6a5: 0x3f68, 0x6a6: 0xa000, 0x6a7: 0x3f70, 0x6a8: 0xa000, 0x6a9: 0x3f78, + 0x6af: 0xa000, + 0x6b0: 0x3f80, 0x6b1: 0x3f88, 0x6b2: 0xa000, 0x6b3: 0x3f90, 0x6b4: 0x3f98, 0x6b5: 0xa000, + 0x6b6: 0x3fa0, 0x6b7: 0x3fa8, 0x6b8: 0xa000, 0x6b9: 0x3fb0, 0x6ba: 0x3fb8, 0x6bb: 0xa000, + 0x6bc: 0x3fc0, 0x6bd: 0x3fc8, + // Block 0x1b, offset 0x6c0 + 0x6d4: 0x3f00, + 0x6d9: 0x9903, 0x6da: 0x9903, 0x6db: 0x8100, 0x6dc: 0x8100, 0x6dd: 0xa000, + 0x6de: 0x3fd0, + 0x6e6: 0xa000, + 0x6eb: 0xa000, 0x6ec: 0x3fe0, 0x6ed: 0xa000, 0x6ee: 0x3fe8, 0x6ef: 0xa000, + 0x6f0: 0x3ff0, 0x6f1: 0xa000, 0x6f2: 0x3ff8, 0x6f3: 0xa000, 0x6f4: 0x4000, 0x6f5: 0xa000, + 0x6f6: 0x4008, 0x6f7: 0xa000, 0x6f8: 0x4010, 0x6f9: 0xa000, 0x6fa: 0x4018, 0x6fb: 0xa000, + 0x6fc: 0x4020, 0x6fd: 0xa000, 0x6fe: 0x4028, 0x6ff: 0xa000, + // Block 0x1c, offset 0x700 + 0x700: 0x4030, 0x701: 0xa000, 0x702: 0x4038, 0x704: 0xa000, 0x705: 0x4040, + 0x706: 0xa000, 0x707: 0x4048, 0x708: 0xa000, 0x709: 0x4050, + 0x70f: 0xa000, 0x710: 0x4058, 0x711: 0x4060, + 0x712: 0xa000, 0x713: 0x4068, 0x714: 0x4070, 0x715: 0xa000, 0x716: 0x4078, 0x717: 0x4080, + 0x718: 0xa000, 0x719: 0x4088, 0x71a: 0x4090, 0x71b: 0xa000, 0x71c: 0x4098, 0x71d: 0x40a0, + 0x72f: 0xa000, + 0x730: 0xa000, 0x731: 0xa000, 0x732: 0xa000, 0x734: 0x3fd8, + 0x737: 0x40a8, 0x738: 0x40b0, 0x739: 0x40b8, 0x73a: 0x40c0, + 0x73d: 0xa000, 0x73e: 0x40c8, + // Block 0x1d, offset 0x740 + 0x740: 0x1377, 0x741: 0x0cfb, 0x742: 0x13d3, 0x743: 0x139f, 0x744: 0x0e57, 0x745: 0x06eb, + 0x746: 0x08df, 0x747: 0x162b, 0x748: 0x162b, 0x749: 0x0a0b, 0x74a: 0x145f, 0x74b: 0x0943, + 0x74c: 0x0a07, 0x74d: 0x0bef, 0x74e: 0x0fcf, 0x74f: 0x115f, 0x750: 0x1297, 0x751: 0x12d3, + 0x752: 0x1307, 0x753: 0x141b, 0x754: 0x0d73, 0x755: 0x0dff, 0x756: 0x0eab, 0x757: 0x0f43, + 0x758: 0x125f, 0x759: 0x1447, 0x75a: 0x1573, 0x75b: 0x070f, 0x75c: 0x08b3, 0x75d: 0x0d87, + 0x75e: 0x0ecf, 0x75f: 0x1293, 0x760: 0x15c3, 0x761: 0x0ab3, 0x762: 0x0e77, 0x763: 0x1283, + 0x764: 0x1317, 0x765: 0x0c23, 0x766: 0x11bb, 0x767: 0x12df, 0x768: 0x0b1f, 0x769: 0x0d0f, + 0x76a: 0x0e17, 0x76b: 0x0f1b, 0x76c: 0x1427, 0x76d: 0x074f, 0x76e: 0x07e7, 0x76f: 0x0853, + 0x770: 0x0c8b, 0x771: 0x0d7f, 0x772: 0x0ecb, 0x773: 0x0fef, 0x774: 0x1177, 0x775: 0x128b, + 0x776: 0x12a3, 0x777: 0x13c7, 0x778: 0x14ef, 0x779: 0x15a3, 0x77a: 0x15bf, 0x77b: 0x102b, + 0x77c: 0x106b, 0x77d: 0x1123, 0x77e: 0x1243, 0x77f: 0x147b, + // Block 0x1e, offset 0x780 + 0x780: 0x15cb, 0x781: 0x134b, 0x782: 0x09c7, 0x783: 0x0b3b, 0x784: 0x10db, 0x785: 0x119b, + 0x786: 0x0eff, 0x787: 0x1033, 0x788: 0x1397, 0x789: 0x14e7, 0x78a: 0x09c3, 0x78b: 0x0a8f, + 0x78c: 0x0d77, 0x78d: 0x0e2b, 0x78e: 0x0e5f, 0x78f: 0x1113, 0x790: 0x113b, 0x791: 0x14a7, + 0x792: 0x084f, 0x793: 0x11a7, 0x794: 0x07f3, 0x795: 0x07ef, 0x796: 0x1097, 0x797: 0x1127, + 0x798: 0x125b, 0x799: 0x14af, 0x79a: 0x1367, 0x79b: 0x0c27, 0x79c: 0x0d73, 0x79d: 0x1357, + 0x79e: 0x06f7, 0x79f: 0x0a63, 0x7a0: 0x0b93, 0x7a1: 0x0f2f, 0x7a2: 0x0faf, 0x7a3: 0x0873, + 0x7a4: 0x103b, 0x7a5: 0x075f, 0x7a6: 0x0b77, 0x7a7: 0x06d7, 0x7a8: 0x0deb, 0x7a9: 0x0ca3, + 0x7aa: 0x110f, 0x7ab: 0x08c7, 0x7ac: 0x09b3, 0x7ad: 0x0ffb, 0x7ae: 0x1263, 0x7af: 0x133b, + 0x7b0: 0x0db7, 0x7b1: 0x13f7, 0x7b2: 0x0de3, 0x7b3: 0x0c37, 0x7b4: 0x121b, 0x7b5: 0x0c57, + 0x7b6: 0x0fab, 0x7b7: 0x072b, 0x7b8: 0x07a7, 0x7b9: 0x07eb, 0x7ba: 0x0d53, 0x7bb: 0x10fb, + 0x7bc: 0x11f3, 0x7bd: 0x1347, 0x7be: 0x145b, 0x7bf: 0x085b, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x090f, 0x7c1: 0x0a17, 0x7c2: 0x0b2f, 0x7c3: 0x0cbf, 0x7c4: 0x0e7b, 0x7c5: 0x103f, + 0x7c6: 0x1497, 0x7c7: 0x157b, 0x7c8: 0x15cf, 0x7c9: 0x15e7, 0x7ca: 0x0837, 0x7cb: 0x0cf3, + 0x7cc: 0x0da3, 0x7cd: 0x13eb, 0x7ce: 0x0afb, 0x7cf: 0x0bd7, 0x7d0: 0x0bf3, 0x7d1: 0x0c83, + 0x7d2: 0x0e6b, 0x7d3: 0x0eb7, 0x7d4: 0x0f67, 0x7d5: 0x108b, 0x7d6: 0x112f, 0x7d7: 0x1193, + 0x7d8: 0x13db, 0x7d9: 0x126b, 0x7da: 0x1403, 0x7db: 0x147f, 0x7dc: 0x080f, 0x7dd: 0x083b, + 0x7de: 0x0923, 0x7df: 0x0ea7, 0x7e0: 0x12f3, 0x7e1: 0x133b, 0x7e2: 0x0b1b, 0x7e3: 0x0b8b, + 0x7e4: 0x0c4f, 0x7e5: 0x0daf, 0x7e6: 0x10d7, 0x7e7: 0x0f23, 0x7e8: 0x073b, 0x7e9: 0x097f, + 0x7ea: 0x0a63, 0x7eb: 0x0ac7, 0x7ec: 0x0b97, 0x7ed: 0x0f3f, 0x7ee: 0x0f5b, 0x7ef: 0x116b, + 0x7f0: 0x118b, 0x7f1: 0x1463, 0x7f2: 0x14e3, 0x7f3: 0x14f3, 0x7f4: 0x152f, 0x7f5: 0x0753, + 0x7f6: 0x107f, 0x7f7: 0x144f, 0x7f8: 0x14cb, 0x7f9: 0x0baf, 0x7fa: 0x0717, 0x7fb: 0x0777, + 0x7fc: 0x0a67, 0x7fd: 0x0a87, 0x7fe: 0x0caf, 0x7ff: 0x0d73, + // Block 0x20, offset 0x800 + 0x800: 0x0ec3, 0x801: 0x0fcb, 0x802: 0x1277, 0x803: 0x1417, 0x804: 0x1623, 0x805: 0x0ce3, + 0x806: 0x14a3, 0x807: 0x0833, 0x808: 0x0d2f, 0x809: 0x0d3b, 0x80a: 0x0e0f, 0x80b: 0x0e47, + 0x80c: 0x0f4b, 0x80d: 0x0fa7, 0x80e: 0x1027, 0x80f: 0x110b, 0x810: 0x153b, 0x811: 0x07af, + 0x812: 0x0c03, 0x813: 0x14b3, 0x814: 0x0767, 0x815: 0x0aab, 0x816: 0x0e2f, 0x817: 0x13df, + 0x818: 0x0b67, 0x819: 0x0bb7, 0x81a: 0x0d43, 0x81b: 0x0f2f, 0x81c: 0x14bb, 0x81d: 0x0817, + 0x81e: 0x08ff, 0x81f: 0x0a97, 0x820: 0x0cd3, 0x821: 0x0d1f, 0x822: 0x0d5f, 0x823: 0x0df3, + 0x824: 0x0f47, 0x825: 0x0fbb, 0x826: 0x1157, 0x827: 0x12f7, 0x828: 0x1303, 0x829: 0x1457, + 0x82a: 0x14d7, 0x82b: 0x0883, 0x82c: 0x0e4b, 0x82d: 0x0903, 0x82e: 0x0ec7, 0x82f: 0x0f6b, + 0x830: 0x1287, 0x831: 0x14bf, 0x832: 0x15ab, 0x833: 0x15d3, 0x834: 0x0d37, 0x835: 0x0e27, + 0x836: 0x11c3, 0x837: 0x10b7, 0x838: 0x10c3, 0x839: 0x10e7, 0x83a: 0x0f17, 0x83b: 0x0e9f, + 0x83c: 0x1363, 0x83d: 0x0733, 0x83e: 0x122b, 0x83f: 0x081b, + // Block 0x21, offset 0x840 + 0x840: 0x080b, 0x841: 0x0b0b, 0x842: 0x0c2b, 0x843: 0x10f3, 0x844: 0x0a53, 0x845: 0x0e03, + 0x846: 0x0cef, 0x847: 0x13e7, 0x848: 0x12e7, 0x849: 0x14ab, 0x84a: 0x1323, 0x84b: 0x0b27, + 0x84c: 0x0787, 0x84d: 0x095b, 0x850: 0x09af, + 0x852: 0x0cdf, 0x855: 0x07f7, 0x856: 0x0f1f, 0x857: 0x0fe3, + 0x858: 0x1047, 0x859: 0x1063, 0x85a: 0x1067, 0x85b: 0x107b, 0x85c: 0x14fb, 0x85d: 0x10eb, + 0x85e: 0x116f, 0x860: 0x128f, 0x862: 0x1353, + 0x865: 0x1407, 0x866: 0x1433, + 0x86a: 0x154f, 0x86b: 0x1553, 0x86c: 0x1557, 0x86d: 0x15bb, 0x86e: 0x142b, 0x86f: 0x14c7, + 0x870: 0x0757, 0x871: 0x077b, 0x872: 0x078f, 0x873: 0x084b, 0x874: 0x0857, 0x875: 0x0897, + 0x876: 0x094b, 0x877: 0x0967, 0x878: 0x096f, 0x879: 0x09ab, 0x87a: 0x09b7, 0x87b: 0x0a93, + 0x87c: 0x0a9b, 0x87d: 0x0ba3, 0x87e: 0x0bcb, 0x87f: 0x0bd3, + // Block 0x22, offset 0x880 + 0x880: 0x0beb, 0x881: 0x0c97, 0x882: 0x0cc7, 0x883: 0x0ce7, 0x884: 0x0d57, 0x885: 0x0e1b, + 0x886: 0x0e37, 0x887: 0x0e67, 0x888: 0x0ebb, 0x889: 0x0edb, 0x88a: 0x0f4f, 0x88b: 0x102f, + 0x88c: 0x104b, 0x88d: 0x1053, 0x88e: 0x104f, 0x88f: 0x1057, 0x890: 0x105b, 0x891: 0x105f, + 0x892: 0x1073, 0x893: 0x1077, 0x894: 0x109b, 0x895: 0x10af, 0x896: 0x10cb, 0x897: 0x112f, + 0x898: 0x1137, 0x899: 0x113f, 0x89a: 0x1153, 0x89b: 0x117b, 0x89c: 0x11cb, 0x89d: 0x11ff, + 0x89e: 0x11ff, 0x89f: 0x1267, 0x8a0: 0x130f, 0x8a1: 0x1327, 0x8a2: 0x135b, 0x8a3: 0x135f, + 0x8a4: 0x13a3, 0x8a5: 0x13a7, 0x8a6: 0x13ff, 0x8a7: 0x1407, 0x8a8: 0x14db, 0x8a9: 0x151f, + 0x8aa: 0x1537, 0x8ab: 0x0b9b, 0x8ac: 0x171e, 0x8ad: 0x11e3, + 0x8b0: 0x06df, 0x8b1: 0x07e3, 0x8b2: 0x07a3, 0x8b3: 0x074b, 0x8b4: 0x078b, 0x8b5: 0x07b7, + 0x8b6: 0x0847, 0x8b7: 0x0863, 0x8b8: 0x094b, 0x8b9: 0x0937, 0x8ba: 0x0947, 0x8bb: 0x0963, + 0x8bc: 0x09af, 0x8bd: 0x09bf, 0x8be: 0x0a03, 0x8bf: 0x0a0f, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x0a2b, 0x8c1: 0x0a3b, 0x8c2: 0x0b23, 0x8c3: 0x0b2b, 0x8c4: 0x0b5b, 0x8c5: 0x0b7b, + 0x8c6: 0x0bab, 0x8c7: 0x0bc3, 0x8c8: 0x0bb3, 0x8c9: 0x0bd3, 0x8ca: 0x0bc7, 0x8cb: 0x0beb, + 0x8cc: 0x0c07, 0x8cd: 0x0c5f, 0x8ce: 0x0c6b, 0x8cf: 0x0c73, 0x8d0: 0x0c9b, 0x8d1: 0x0cdf, + 0x8d2: 0x0d0f, 0x8d3: 0x0d13, 0x8d4: 0x0d27, 0x8d5: 0x0da7, 0x8d6: 0x0db7, 0x8d7: 0x0e0f, + 0x8d8: 0x0e5b, 0x8d9: 0x0e53, 0x8da: 0x0e67, 0x8db: 0x0e83, 0x8dc: 0x0ebb, 0x8dd: 0x1013, + 0x8de: 0x0edf, 0x8df: 0x0f13, 0x8e0: 0x0f1f, 0x8e1: 0x0f5f, 0x8e2: 0x0f7b, 0x8e3: 0x0f9f, + 0x8e4: 0x0fc3, 0x8e5: 0x0fc7, 0x8e6: 0x0fe3, 0x8e7: 0x0fe7, 0x8e8: 0x0ff7, 0x8e9: 0x100b, + 0x8ea: 0x1007, 0x8eb: 0x1037, 0x8ec: 0x10b3, 0x8ed: 0x10cb, 0x8ee: 0x10e3, 0x8ef: 0x111b, + 0x8f0: 0x112f, 0x8f1: 0x114b, 0x8f2: 0x117b, 0x8f3: 0x122f, 0x8f4: 0x1257, 0x8f5: 0x12cb, + 0x8f6: 0x1313, 0x8f7: 0x131f, 0x8f8: 0x1327, 0x8f9: 0x133f, 0x8fa: 0x1353, 0x8fb: 0x1343, + 0x8fc: 0x135b, 0x8fd: 0x1357, 0x8fe: 0x134f, 0x8ff: 0x135f, + // Block 0x24, offset 0x900 + 0x900: 0x136b, 0x901: 0x13a7, 0x902: 0x13e3, 0x903: 0x1413, 0x904: 0x144b, 0x905: 0x146b, + 0x906: 0x14b7, 0x907: 0x14db, 0x908: 0x14fb, 0x909: 0x150f, 0x90a: 0x151f, 0x90b: 0x152b, + 0x90c: 0x1537, 0x90d: 0x158b, 0x90e: 0x162b, 0x90f: 0x16b5, 0x910: 0x16b0, 0x911: 0x16e2, + 0x912: 0x0607, 0x913: 0x062f, 0x914: 0x0633, 0x915: 0x1764, 0x916: 0x1791, 0x917: 0x1809, + 0x918: 0x1617, 0x919: 0x1627, + // Block 0x25, offset 0x940 + 0x940: 0x06fb, 0x941: 0x06f3, 0x942: 0x0703, 0x943: 0x1647, 0x944: 0x0747, 0x945: 0x0757, + 0x946: 0x075b, 0x947: 0x0763, 0x948: 0x076b, 0x949: 0x076f, 0x94a: 0x077b, 0x94b: 0x0773, + 0x94c: 0x05b3, 0x94d: 0x165b, 0x94e: 0x078f, 0x94f: 0x0793, 0x950: 0x0797, 0x951: 0x07b3, + 0x952: 0x164c, 0x953: 0x05b7, 0x954: 0x079f, 0x955: 0x07bf, 0x956: 0x1656, 0x957: 0x07cf, + 0x958: 0x07d7, 0x959: 0x0737, 0x95a: 0x07df, 0x95b: 0x07e3, 0x95c: 0x1831, 0x95d: 0x07ff, + 0x95e: 0x0807, 0x95f: 0x05bf, 0x960: 0x081f, 0x961: 0x0823, 0x962: 0x082b, 0x963: 0x082f, + 0x964: 0x05c3, 0x965: 0x0847, 0x966: 0x084b, 0x967: 0x0857, 0x968: 0x0863, 0x969: 0x0867, + 0x96a: 0x086b, 0x96b: 0x0873, 0x96c: 0x0893, 0x96d: 0x0897, 0x96e: 0x089f, 0x96f: 0x08af, + 0x970: 0x08b7, 0x971: 0x08bb, 0x972: 0x08bb, 0x973: 0x08bb, 0x974: 0x166a, 0x975: 0x0e93, + 0x976: 0x08cf, 0x977: 0x08d7, 0x978: 0x166f, 0x979: 0x08e3, 0x97a: 0x08eb, 0x97b: 0x08f3, + 0x97c: 0x091b, 0x97d: 0x0907, 0x97e: 0x0913, 0x97f: 0x0917, + // Block 0x26, offset 0x980 + 0x980: 0x091f, 0x981: 0x0927, 0x982: 0x092b, 0x983: 0x0933, 0x984: 0x093b, 0x985: 0x093f, + 0x986: 0x093f, 0x987: 0x0947, 0x988: 0x094f, 0x989: 0x0953, 0x98a: 0x095f, 0x98b: 0x0983, + 0x98c: 0x0967, 0x98d: 0x0987, 0x98e: 0x096b, 0x98f: 0x0973, 0x990: 0x080b, 0x991: 0x09cf, + 0x992: 0x0997, 0x993: 0x099b, 0x994: 0x099f, 0x995: 0x0993, 0x996: 0x09a7, 0x997: 0x09a3, + 0x998: 0x09bb, 0x999: 0x1674, 0x99a: 0x09d7, 0x99b: 0x09db, 0x99c: 0x09e3, 0x99d: 0x09ef, + 0x99e: 0x09f7, 0x99f: 0x0a13, 0x9a0: 0x1679, 0x9a1: 0x167e, 0x9a2: 0x0a1f, 0x9a3: 0x0a23, + 0x9a4: 0x0a27, 0x9a5: 0x0a1b, 0x9a6: 0x0a2f, 0x9a7: 0x05c7, 0x9a8: 0x05cb, 0x9a9: 0x0a37, + 0x9aa: 0x0a3f, 0x9ab: 0x0a3f, 0x9ac: 0x1683, 0x9ad: 0x0a5b, 0x9ae: 0x0a5f, 0x9af: 0x0a63, + 0x9b0: 0x0a6b, 0x9b1: 0x1688, 0x9b2: 0x0a73, 0x9b3: 0x0a77, 0x9b4: 0x0b4f, 0x9b5: 0x0a7f, + 0x9b6: 0x05cf, 0x9b7: 0x0a8b, 0x9b8: 0x0a9b, 0x9b9: 0x0aa7, 0x9ba: 0x0aa3, 0x9bb: 0x1692, + 0x9bc: 0x0aaf, 0x9bd: 0x1697, 0x9be: 0x0abb, 0x9bf: 0x0ab7, + // Block 0x27, offset 0x9c0 + 0x9c0: 0x0abf, 0x9c1: 0x0acf, 0x9c2: 0x0ad3, 0x9c3: 0x05d3, 0x9c4: 0x0ae3, 0x9c5: 0x0aeb, + 0x9c6: 0x0aef, 0x9c7: 0x0af3, 0x9c8: 0x05d7, 0x9c9: 0x169c, 0x9ca: 0x05db, 0x9cb: 0x0b0f, + 0x9cc: 0x0b13, 0x9cd: 0x0b17, 0x9ce: 0x0b1f, 0x9cf: 0x1863, 0x9d0: 0x0b37, 0x9d1: 0x16a6, + 0x9d2: 0x16a6, 0x9d3: 0x11d7, 0x9d4: 0x0b47, 0x9d5: 0x0b47, 0x9d6: 0x05df, 0x9d7: 0x16c9, + 0x9d8: 0x179b, 0x9d9: 0x0b57, 0x9da: 0x0b5f, 0x9db: 0x05e3, 0x9dc: 0x0b73, 0x9dd: 0x0b83, + 0x9de: 0x0b87, 0x9df: 0x0b8f, 0x9e0: 0x0b9f, 0x9e1: 0x05eb, 0x9e2: 0x05e7, 0x9e3: 0x0ba3, + 0x9e4: 0x16ab, 0x9e5: 0x0ba7, 0x9e6: 0x0bbb, 0x9e7: 0x0bbf, 0x9e8: 0x0bc3, 0x9e9: 0x0bbf, + 0x9ea: 0x0bcf, 0x9eb: 0x0bd3, 0x9ec: 0x0be3, 0x9ed: 0x0bdb, 0x9ee: 0x0bdf, 0x9ef: 0x0be7, + 0x9f0: 0x0beb, 0x9f1: 0x0bef, 0x9f2: 0x0bfb, 0x9f3: 0x0bff, 0x9f4: 0x0c17, 0x9f5: 0x0c1f, + 0x9f6: 0x0c2f, 0x9f7: 0x0c43, 0x9f8: 0x16ba, 0x9f9: 0x0c3f, 0x9fa: 0x0c33, 0x9fb: 0x0c4b, + 0x9fc: 0x0c53, 0x9fd: 0x0c67, 0x9fe: 0x16bf, 0x9ff: 0x0c6f, + // Block 0x28, offset 0xa00 + 0xa00: 0x0c63, 0xa01: 0x0c5b, 0xa02: 0x05ef, 0xa03: 0x0c77, 0xa04: 0x0c7f, 0xa05: 0x0c87, + 0xa06: 0x0c7b, 0xa07: 0x05f3, 0xa08: 0x0c97, 0xa09: 0x0c9f, 0xa0a: 0x16c4, 0xa0b: 0x0ccb, + 0xa0c: 0x0cff, 0xa0d: 0x0cdb, 0xa0e: 0x05ff, 0xa0f: 0x0ce7, 0xa10: 0x05fb, 0xa11: 0x05f7, + 0xa12: 0x07c3, 0xa13: 0x07c7, 0xa14: 0x0d03, 0xa15: 0x0ceb, 0xa16: 0x11ab, 0xa17: 0x0663, + 0xa18: 0x0d0f, 0xa19: 0x0d13, 0xa1a: 0x0d17, 0xa1b: 0x0d2b, 0xa1c: 0x0d23, 0xa1d: 0x16dd, + 0xa1e: 0x0603, 0xa1f: 0x0d3f, 0xa20: 0x0d33, 0xa21: 0x0d4f, 0xa22: 0x0d57, 0xa23: 0x16e7, + 0xa24: 0x0d5b, 0xa25: 0x0d47, 0xa26: 0x0d63, 0xa27: 0x0607, 0xa28: 0x0d67, 0xa29: 0x0d6b, + 0xa2a: 0x0d6f, 0xa2b: 0x0d7b, 0xa2c: 0x16ec, 0xa2d: 0x0d83, 0xa2e: 0x060b, 0xa2f: 0x0d8f, + 0xa30: 0x16f1, 0xa31: 0x0d93, 0xa32: 0x060f, 0xa33: 0x0d9f, 0xa34: 0x0dab, 0xa35: 0x0db7, + 0xa36: 0x0dbb, 0xa37: 0x16f6, 0xa38: 0x168d, 0xa39: 0x16fb, 0xa3a: 0x0ddb, 0xa3b: 0x1700, + 0xa3c: 0x0de7, 0xa3d: 0x0def, 0xa3e: 0x0ddf, 0xa3f: 0x0dfb, + // Block 0x29, offset 0xa40 + 0xa40: 0x0e0b, 0xa41: 0x0e1b, 0xa42: 0x0e0f, 0xa43: 0x0e13, 0xa44: 0x0e1f, 0xa45: 0x0e23, + 0xa46: 0x1705, 0xa47: 0x0e07, 0xa48: 0x0e3b, 0xa49: 0x0e3f, 0xa4a: 0x0613, 0xa4b: 0x0e53, + 0xa4c: 0x0e4f, 0xa4d: 0x170a, 0xa4e: 0x0e33, 0xa4f: 0x0e6f, 0xa50: 0x170f, 0xa51: 0x1714, + 0xa52: 0x0e73, 0xa53: 0x0e87, 0xa54: 0x0e83, 0xa55: 0x0e7f, 0xa56: 0x0617, 0xa57: 0x0e8b, + 0xa58: 0x0e9b, 0xa59: 0x0e97, 0xa5a: 0x0ea3, 0xa5b: 0x1651, 0xa5c: 0x0eb3, 0xa5d: 0x1719, + 0xa5e: 0x0ebf, 0xa5f: 0x1723, 0xa60: 0x0ed3, 0xa61: 0x0edf, 0xa62: 0x0ef3, 0xa63: 0x1728, + 0xa64: 0x0f07, 0xa65: 0x0f0b, 0xa66: 0x172d, 0xa67: 0x1732, 0xa68: 0x0f27, 0xa69: 0x0f37, + 0xa6a: 0x061b, 0xa6b: 0x0f3b, 0xa6c: 0x061f, 0xa6d: 0x061f, 0xa6e: 0x0f53, 0xa6f: 0x0f57, + 0xa70: 0x0f5f, 0xa71: 0x0f63, 0xa72: 0x0f6f, 0xa73: 0x0623, 0xa74: 0x0f87, 0xa75: 0x1737, + 0xa76: 0x0fa3, 0xa77: 0x173c, 0xa78: 0x0faf, 0xa79: 0x16a1, 0xa7a: 0x0fbf, 0xa7b: 0x1741, + 0xa7c: 0x1746, 0xa7d: 0x174b, 0xa7e: 0x0627, 0xa7f: 0x062b, + // Block 0x2a, offset 0xa80 + 0xa80: 0x0ff7, 0xa81: 0x1755, 0xa82: 0x1750, 0xa83: 0x175a, 0xa84: 0x175f, 0xa85: 0x0fff, + 0xa86: 0x1003, 0xa87: 0x1003, 0xa88: 0x100b, 0xa89: 0x0633, 0xa8a: 0x100f, 0xa8b: 0x0637, + 0xa8c: 0x063b, 0xa8d: 0x1769, 0xa8e: 0x1023, 0xa8f: 0x102b, 0xa90: 0x1037, 0xa91: 0x063f, + 0xa92: 0x176e, 0xa93: 0x105b, 0xa94: 0x1773, 0xa95: 0x1778, 0xa96: 0x107b, 0xa97: 0x1093, + 0xa98: 0x0643, 0xa99: 0x109b, 0xa9a: 0x109f, 0xa9b: 0x10a3, 0xa9c: 0x177d, 0xa9d: 0x1782, + 0xa9e: 0x1782, 0xa9f: 0x10bb, 0xaa0: 0x0647, 0xaa1: 0x1787, 0xaa2: 0x10cf, 0xaa3: 0x10d3, + 0xaa4: 0x064b, 0xaa5: 0x178c, 0xaa6: 0x10ef, 0xaa7: 0x064f, 0xaa8: 0x10ff, 0xaa9: 0x10f7, + 0xaaa: 0x1107, 0xaab: 0x1796, 0xaac: 0x111f, 0xaad: 0x0653, 0xaae: 0x112b, 0xaaf: 0x1133, + 0xab0: 0x1143, 0xab1: 0x0657, 0xab2: 0x17a0, 0xab3: 0x17a5, 0xab4: 0x065b, 0xab5: 0x17aa, + 0xab6: 0x115b, 0xab7: 0x17af, 0xab8: 0x1167, 0xab9: 0x1173, 0xaba: 0x117b, 0xabb: 0x17b4, + 0xabc: 0x17b9, 0xabd: 0x118f, 0xabe: 0x17be, 0xabf: 0x1197, + // Block 0x2b, offset 0xac0 + 0xac0: 0x16ce, 0xac1: 0x065f, 0xac2: 0x11af, 0xac3: 0x11b3, 0xac4: 0x0667, 0xac5: 0x11b7, + 0xac6: 0x0a33, 0xac7: 0x17c3, 0xac8: 0x17c8, 0xac9: 0x16d3, 0xaca: 0x16d8, 0xacb: 0x11d7, + 0xacc: 0x11db, 0xacd: 0x13f3, 0xace: 0x066b, 0xacf: 0x1207, 0xad0: 0x1203, 0xad1: 0x120b, + 0xad2: 0x083f, 0xad3: 0x120f, 0xad4: 0x1213, 0xad5: 0x1217, 0xad6: 0x121f, 0xad7: 0x17cd, + 0xad8: 0x121b, 0xad9: 0x1223, 0xada: 0x1237, 0xadb: 0x123b, 0xadc: 0x1227, 0xadd: 0x123f, + 0xade: 0x1253, 0xadf: 0x1267, 0xae0: 0x1233, 0xae1: 0x1247, 0xae2: 0x124b, 0xae3: 0x124f, + 0xae4: 0x17d2, 0xae5: 0x17dc, 0xae6: 0x17d7, 0xae7: 0x066f, 0xae8: 0x126f, 0xae9: 0x1273, + 0xaea: 0x127b, 0xaeb: 0x17f0, 0xaec: 0x127f, 0xaed: 0x17e1, 0xaee: 0x0673, 0xaef: 0x0677, + 0xaf0: 0x17e6, 0xaf1: 0x17eb, 0xaf2: 0x067b, 0xaf3: 0x129f, 0xaf4: 0x12a3, 0xaf5: 0x12a7, + 0xaf6: 0x12ab, 0xaf7: 0x12b7, 0xaf8: 0x12b3, 0xaf9: 0x12bf, 0xafa: 0x12bb, 0xafb: 0x12cb, + 0xafc: 0x12c3, 0xafd: 0x12c7, 0xafe: 0x12cf, 0xaff: 0x067f, + // Block 0x2c, offset 0xb00 + 0xb00: 0x12d7, 0xb01: 0x12db, 0xb02: 0x0683, 0xb03: 0x12eb, 0xb04: 0x12ef, 0xb05: 0x17f5, + 0xb06: 0x12fb, 0xb07: 0x12ff, 0xb08: 0x0687, 0xb09: 0x130b, 0xb0a: 0x05bb, 0xb0b: 0x17fa, + 0xb0c: 0x17ff, 0xb0d: 0x068b, 0xb0e: 0x068f, 0xb0f: 0x1337, 0xb10: 0x134f, 0xb11: 0x136b, + 0xb12: 0x137b, 0xb13: 0x1804, 0xb14: 0x138f, 0xb15: 0x1393, 0xb16: 0x13ab, 0xb17: 0x13b7, + 0xb18: 0x180e, 0xb19: 0x1660, 0xb1a: 0x13c3, 0xb1b: 0x13bf, 0xb1c: 0x13cb, 0xb1d: 0x1665, + 0xb1e: 0x13d7, 0xb1f: 0x13e3, 0xb20: 0x1813, 0xb21: 0x1818, 0xb22: 0x1423, 0xb23: 0x142f, + 0xb24: 0x1437, 0xb25: 0x181d, 0xb26: 0x143b, 0xb27: 0x1467, 0xb28: 0x1473, 0xb29: 0x1477, + 0xb2a: 0x146f, 0xb2b: 0x1483, 0xb2c: 0x1487, 0xb2d: 0x1822, 0xb2e: 0x1493, 0xb2f: 0x0693, + 0xb30: 0x149b, 0xb31: 0x1827, 0xb32: 0x0697, 0xb33: 0x14d3, 0xb34: 0x0ac3, 0xb35: 0x14eb, + 0xb36: 0x182c, 0xb37: 0x1836, 0xb38: 0x069b, 0xb39: 0x069f, 0xb3a: 0x1513, 0xb3b: 0x183b, + 0xb3c: 0x06a3, 0xb3d: 0x1840, 0xb3e: 0x152b, 0xb3f: 0x152b, + // Block 0x2d, offset 0xb40 + 0xb40: 0x1533, 0xb41: 0x1845, 0xb42: 0x154b, 0xb43: 0x06a7, 0xb44: 0x155b, 0xb45: 0x1567, + 0xb46: 0x156f, 0xb47: 0x1577, 0xb48: 0x06ab, 0xb49: 0x184a, 0xb4a: 0x158b, 0xb4b: 0x15a7, + 0xb4c: 0x15b3, 0xb4d: 0x06af, 0xb4e: 0x06b3, 0xb4f: 0x15b7, 0xb50: 0x184f, 0xb51: 0x06b7, + 0xb52: 0x1854, 0xb53: 0x1859, 0xb54: 0x185e, 0xb55: 0x15db, 0xb56: 0x06bb, 0xb57: 0x15ef, + 0xb58: 0x15f7, 0xb59: 0x15fb, 0xb5a: 0x1603, 0xb5b: 0x160b, 0xb5c: 0x1613, 0xb5d: 0x1868, +} + +// 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: 0x2c, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x2d, 0xc7: 0x04, + 0xc8: 0x05, 0xca: 0x2e, 0xcb: 0x2f, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x30, + 0xd0: 0x09, 0xd1: 0x31, 0xd2: 0x32, 0xd3: 0x0a, 0xd6: 0x0b, 0xd7: 0x33, + 0xd8: 0x34, 0xd9: 0x0c, 0xdb: 0x35, 0xdc: 0x36, 0xdd: 0x37, 0xdf: 0x38, + 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: 0x39, 0x121: 0x3a, 0x123: 0x3b, 0x124: 0x3c, 0x125: 0x3d, 0x126: 0x3e, 0x127: 0x3f, + 0x128: 0x40, 0x129: 0x41, 0x12a: 0x42, 0x12b: 0x43, 0x12c: 0x3e, 0x12d: 0x44, 0x12e: 0x45, 0x12f: 0x46, + 0x131: 0x47, 0x132: 0x48, 0x133: 0x49, 0x134: 0x4a, 0x135: 0x4b, 0x137: 0x4c, + 0x138: 0x4d, 0x139: 0x4e, 0x13a: 0x4f, 0x13b: 0x50, 0x13c: 0x51, 0x13d: 0x52, 0x13e: 0x53, 0x13f: 0x54, + // Block 0x5, offset 0x140 + 0x140: 0x55, 0x142: 0x56, 0x144: 0x57, 0x145: 0x58, 0x146: 0x59, 0x147: 0x5a, + 0x14d: 0x5b, + 0x15c: 0x5c, 0x15f: 0x5d, + 0x162: 0x5e, 0x164: 0x5f, + 0x168: 0x60, 0x169: 0x61, 0x16a: 0x62, 0x16c: 0x0d, 0x16d: 0x63, 0x16e: 0x64, 0x16f: 0x65, + 0x170: 0x66, 0x173: 0x67, 0x177: 0x68, + 0x178: 0x0e, 0x179: 0x0f, 0x17a: 0x10, 0x17b: 0x11, 0x17c: 0x12, 0x17d: 0x13, 0x17e: 0x14, 0x17f: 0x15, + // Block 0x6, offset 0x180 + 0x180: 0x69, 0x183: 0x6a, 0x184: 0x6b, 0x186: 0x6c, 0x187: 0x6d, + 0x188: 0x6e, 0x189: 0x16, 0x18a: 0x17, 0x18b: 0x6f, 0x18c: 0x70, + 0x1ab: 0x71, + 0x1b3: 0x72, 0x1b5: 0x73, 0x1b7: 0x74, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x75, 0x1c1: 0x18, 0x1c2: 0x19, 0x1c3: 0x1a, 0x1c4: 0x76, 0x1c5: 0x77, + 0x1c9: 0x78, 0x1cc: 0x79, 0x1cd: 0x7a, + // Block 0x8, offset 0x200 + 0x219: 0x7b, 0x21a: 0x7c, 0x21b: 0x7d, + 0x220: 0x7e, 0x223: 0x7f, 0x224: 0x80, 0x225: 0x81, 0x226: 0x82, 0x227: 0x83, + 0x22a: 0x84, 0x22b: 0x85, 0x22f: 0x86, + 0x230: 0x87, 0x231: 0x88, 0x232: 0x89, 0x233: 0x8a, 0x234: 0x8b, 0x235: 0x8c, 0x236: 0x8d, 0x237: 0x87, + 0x238: 0x88, 0x239: 0x89, 0x23a: 0x8a, 0x23b: 0x8b, 0x23c: 0x8c, 0x23d: 0x8d, 0x23e: 0x87, 0x23f: 0x88, + // Block 0x9, offset 0x240 + 0x240: 0x89, 0x241: 0x8a, 0x242: 0x8b, 0x243: 0x8c, 0x244: 0x8d, 0x245: 0x87, 0x246: 0x88, 0x247: 0x89, + 0x248: 0x8a, 0x249: 0x8b, 0x24a: 0x8c, 0x24b: 0x8d, 0x24c: 0x87, 0x24d: 0x88, 0x24e: 0x89, 0x24f: 0x8a, + 0x250: 0x8b, 0x251: 0x8c, 0x252: 0x8d, 0x253: 0x87, 0x254: 0x88, 0x255: 0x89, 0x256: 0x8a, 0x257: 0x8b, + 0x258: 0x8c, 0x259: 0x8d, 0x25a: 0x87, 0x25b: 0x88, 0x25c: 0x89, 0x25d: 0x8a, 0x25e: 0x8b, 0x25f: 0x8c, + 0x260: 0x8d, 0x261: 0x87, 0x262: 0x88, 0x263: 0x89, 0x264: 0x8a, 0x265: 0x8b, 0x266: 0x8c, 0x267: 0x8d, + 0x268: 0x87, 0x269: 0x88, 0x26a: 0x89, 0x26b: 0x8a, 0x26c: 0x8b, 0x26d: 0x8c, 0x26e: 0x8d, 0x26f: 0x87, + 0x270: 0x88, 0x271: 0x89, 0x272: 0x8a, 0x273: 0x8b, 0x274: 0x8c, 0x275: 0x8d, 0x276: 0x87, 0x277: 0x88, + 0x278: 0x89, 0x279: 0x8a, 0x27a: 0x8b, 0x27b: 0x8c, 0x27c: 0x8d, 0x27d: 0x87, 0x27e: 0x88, 0x27f: 0x89, + // Block 0xa, offset 0x280 + 0x280: 0x8a, 0x281: 0x8b, 0x282: 0x8c, 0x283: 0x8d, 0x284: 0x87, 0x285: 0x88, 0x286: 0x89, 0x287: 0x8a, + 0x288: 0x8b, 0x289: 0x8c, 0x28a: 0x8d, 0x28b: 0x87, 0x28c: 0x88, 0x28d: 0x89, 0x28e: 0x8a, 0x28f: 0x8b, + 0x290: 0x8c, 0x291: 0x8d, 0x292: 0x87, 0x293: 0x88, 0x294: 0x89, 0x295: 0x8a, 0x296: 0x8b, 0x297: 0x8c, + 0x298: 0x8d, 0x299: 0x87, 0x29a: 0x88, 0x29b: 0x89, 0x29c: 0x8a, 0x29d: 0x8b, 0x29e: 0x8c, 0x29f: 0x8d, + 0x2a0: 0x87, 0x2a1: 0x88, 0x2a2: 0x89, 0x2a3: 0x8a, 0x2a4: 0x8b, 0x2a5: 0x8c, 0x2a6: 0x8d, 0x2a7: 0x87, + 0x2a8: 0x88, 0x2a9: 0x89, 0x2aa: 0x8a, 0x2ab: 0x8b, 0x2ac: 0x8c, 0x2ad: 0x8d, 0x2ae: 0x87, 0x2af: 0x88, + 0x2b0: 0x89, 0x2b1: 0x8a, 0x2b2: 0x8b, 0x2b3: 0x8c, 0x2b4: 0x8d, 0x2b5: 0x87, 0x2b6: 0x88, 0x2b7: 0x89, + 0x2b8: 0x8a, 0x2b9: 0x8b, 0x2ba: 0x8c, 0x2bb: 0x8d, 0x2bc: 0x87, 0x2bd: 0x88, 0x2be: 0x89, 0x2bf: 0x8a, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x8b, 0x2c1: 0x8c, 0x2c2: 0x8d, 0x2c3: 0x87, 0x2c4: 0x88, 0x2c5: 0x89, 0x2c6: 0x8a, 0x2c7: 0x8b, + 0x2c8: 0x8c, 0x2c9: 0x8d, 0x2ca: 0x87, 0x2cb: 0x88, 0x2cc: 0x89, 0x2cd: 0x8a, 0x2ce: 0x8b, 0x2cf: 0x8c, + 0x2d0: 0x8d, 0x2d1: 0x87, 0x2d2: 0x88, 0x2d3: 0x89, 0x2d4: 0x8a, 0x2d5: 0x8b, 0x2d6: 0x8c, 0x2d7: 0x8d, + 0x2d8: 0x87, 0x2d9: 0x88, 0x2da: 0x89, 0x2db: 0x8a, 0x2dc: 0x8b, 0x2dd: 0x8c, 0x2de: 0x8e, + // Block 0xc, offset 0x300 + 0x324: 0x1b, 0x325: 0x1c, 0x326: 0x1d, 0x327: 0x1e, + 0x328: 0x1f, 0x329: 0x20, 0x32a: 0x21, 0x32b: 0x22, 0x32c: 0x8f, 0x32d: 0x90, 0x32e: 0x91, + 0x331: 0x92, 0x332: 0x93, 0x333: 0x94, 0x334: 0x95, + 0x338: 0x96, 0x339: 0x97, 0x33a: 0x98, 0x33b: 0x99, 0x33e: 0x9a, 0x33f: 0x9b, + // Block 0xd, offset 0x340 + 0x347: 0x9c, + 0x34b: 0x9d, 0x34d: 0x9e, + 0x368: 0x9f, 0x36b: 0xa0, + // Block 0xe, offset 0x380 + 0x381: 0xa1, 0x382: 0xa2, 0x384: 0xa3, 0x385: 0x82, 0x387: 0xa4, + 0x388: 0xa5, 0x38b: 0xa6, 0x38c: 0x3e, 0x38d: 0xa7, + 0x391: 0xa8, 0x392: 0xa9, 0x393: 0xaa, 0x396: 0xab, 0x397: 0xac, + 0x398: 0x73, 0x39a: 0xad, 0x39c: 0xae, + 0x3b0: 0x73, + // Block 0xf, offset 0x3c0 + 0x3eb: 0xaf, 0x3ec: 0xb0, + // Block 0x10, offset 0x400 + 0x432: 0xb1, + // Block 0x11, offset 0x440 + 0x445: 0xb2, 0x446: 0xb3, 0x447: 0xb4, + 0x449: 0xb5, + // Block 0x12, offset 0x480 + 0x480: 0xb6, + 0x4a3: 0xb7, 0x4a5: 0xb8, + // Block 0x13, offset 0x4c0 + 0x4c8: 0xb9, + // Block 0x14, offset 0x500 + 0x520: 0x23, 0x521: 0x24, 0x522: 0x25, 0x523: 0x26, 0x524: 0x27, 0x525: 0x28, 0x526: 0x29, 0x527: 0x2a, + 0x528: 0x2b, + // Block 0x15, offset 0x540 + 0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d, + 0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11, + 0x56f: 0x12, +} + +// nfcSparseOffset: 142 entries, 284 bytes +var nfcSparseOffset = []uint16{0x0, 0x5, 0x9, 0xb, 0xd, 0x18, 0x28, 0x2a, 0x2f, 0x3a, 0x49, 0x56, 0x5e, 0x62, 0x67, 0x69, 0x7a, 0x82, 0x89, 0x8c, 0x93, 0x97, 0x9b, 0x9d, 0x9f, 0xa8, 0xac, 0xb3, 0xb8, 0xbb, 0xc5, 0xc7, 0xce, 0xd6, 0xd9, 0xdb, 0xdd, 0xdf, 0xe4, 0xf5, 0x101, 0x103, 0x109, 0x10b, 0x10d, 0x10f, 0x111, 0x113, 0x115, 0x118, 0x11b, 0x11d, 0x120, 0x123, 0x127, 0x12c, 0x135, 0x137, 0x13a, 0x13c, 0x147, 0x157, 0x15b, 0x169, 0x16c, 0x172, 0x178, 0x183, 0x187, 0x189, 0x18b, 0x18d, 0x18f, 0x191, 0x197, 0x19b, 0x19d, 0x19f, 0x1a7, 0x1ab, 0x1ae, 0x1b0, 0x1b2, 0x1b4, 0x1b7, 0x1b9, 0x1bb, 0x1bd, 0x1bf, 0x1c5, 0x1c8, 0x1ca, 0x1d1, 0x1d7, 0x1dd, 0x1e5, 0x1eb, 0x1f1, 0x1f7, 0x1fb, 0x209, 0x212, 0x215, 0x218, 0x21a, 0x21d, 0x21f, 0x223, 0x228, 0x22a, 0x22c, 0x231, 0x237, 0x239, 0x23b, 0x23d, 0x243, 0x246, 0x249, 0x251, 0x258, 0x25b, 0x25e, 0x260, 0x268, 0x26b, 0x272, 0x275, 0x27b, 0x27d, 0x280, 0x282, 0x284, 0x286, 0x288, 0x295, 0x29f, 0x2a1, 0x2a3, 0x2a9, 0x2ab, 0x2ae} + +// nfcSparseValues: 688 entries, 2752 bytes +var nfcSparseValues = [688]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: 0x46e2, lo: 0xa0, hi: 0xa1}, + {value: 0x4714, 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: 0x4840, lo: 0x8a, hi: 0x8a}, + {value: 0x485e, lo: 0x8b, hi: 0x8b}, + {value: 0x36c7, lo: 0x8c, hi: 0x8c}, + {value: 0x36df, lo: 0x8d, hi: 0x8d}, + {value: 0x4876, lo: 0x8e, hi: 0x8e}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0x36fd, 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: 0x37a5, lo: 0x90, hi: 0x90}, + {value: 0x37b1, lo: 0x91, hi: 0x91}, + {value: 0x379f, lo: 0x93, hi: 0x93}, + {value: 0xa000, lo: 0x96, hi: 0x96}, + {value: 0x3817, lo: 0x97, hi: 0x97}, + {value: 0x37e1, lo: 0x9c, hi: 0x9c}, + {value: 0x37c9, lo: 0x9d, hi: 0x9d}, + {value: 0x37f3, lo: 0x9e, hi: 0x9e}, + {value: 0xa000, lo: 0xb4, hi: 0xb5}, + {value: 0x381d, lo: 0xb6, hi: 0xb6}, + {value: 0x3823, lo: 0xb7, hi: 0xb7}, + // Block 0x6, offset 0x28 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0x83, hi: 0x87}, + // Block 0x7, offset 0x2a + {value: 0x0001, lo: 0x04}, + {value: 0x8113, lo: 0x81, hi: 0x82}, + {value: 0x8132, lo: 0x84, hi: 0x84}, + {value: 0x812d, lo: 0x85, hi: 0x85}, + {value: 0x810d, lo: 0x87, hi: 0x87}, + // Block 0x8, offset 0x2f + {value: 0x0000, lo: 0x0a}, + {value: 0x8132, lo: 0x90, hi: 0x97}, + {value: 0x8119, lo: 0x98, hi: 0x98}, + {value: 0x811a, lo: 0x99, hi: 0x99}, + {value: 0x811b, lo: 0x9a, hi: 0x9a}, + {value: 0x3841, lo: 0xa2, hi: 0xa2}, + {value: 0x3847, lo: 0xa3, hi: 0xa3}, + {value: 0x3853, lo: 0xa4, hi: 0xa4}, + {value: 0x384d, lo: 0xa5, hi: 0xa5}, + {value: 0x3859, lo: 0xa6, hi: 0xa6}, + {value: 0xa000, lo: 0xa7, hi: 0xa7}, + // Block 0x9, offset 0x3a + {value: 0x0000, lo: 0x0e}, + {value: 0x386b, lo: 0x80, hi: 0x80}, + {value: 0xa000, lo: 0x81, hi: 0x81}, + {value: 0x385f, lo: 0x82, hi: 0x82}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0x3865, lo: 0x93, hi: 0x93}, + {value: 0xa000, lo: 0x95, hi: 0x95}, + {value: 0x8132, lo: 0x96, hi: 0x9c}, + {value: 0x8132, lo: 0x9f, hi: 0xa2}, + {value: 0x812d, lo: 0xa3, hi: 0xa3}, + {value: 0x8132, lo: 0xa4, hi: 0xa4}, + {value: 0x8132, lo: 0xa7, hi: 0xa8}, + {value: 0x812d, lo: 0xaa, hi: 0xaa}, + {value: 0x8132, lo: 0xab, hi: 0xac}, + {value: 0x812d, lo: 0xad, hi: 0xad}, + // Block 0xa, offset 0x49 + {value: 0x0000, lo: 0x0c}, + {value: 0x811f, lo: 0x91, hi: 0x91}, + {value: 0x8132, lo: 0xb0, hi: 0xb0}, + {value: 0x812d, lo: 0xb1, hi: 0xb1}, + {value: 0x8132, lo: 0xb2, hi: 0xb3}, + {value: 0x812d, lo: 0xb4, hi: 0xb4}, + {value: 0x8132, lo: 0xb5, hi: 0xb6}, + {value: 0x812d, lo: 0xb7, hi: 0xb9}, + {value: 0x8132, lo: 0xba, hi: 0xba}, + {value: 0x812d, lo: 0xbb, hi: 0xbc}, + {value: 0x8132, lo: 0xbd, hi: 0xbd}, + {value: 0x812d, lo: 0xbe, hi: 0xbe}, + {value: 0x8132, lo: 0xbf, hi: 0xbf}, + // Block 0xb, offset 0x56 + {value: 0x0005, lo: 0x07}, + {value: 0x8132, lo: 0x80, hi: 0x80}, + {value: 0x8132, lo: 0x81, hi: 0x81}, + {value: 0x812d, lo: 0x82, hi: 0x83}, + {value: 0x812d, lo: 0x84, hi: 0x85}, + {value: 0x812d, lo: 0x86, hi: 0x87}, + {value: 0x812d, lo: 0x88, hi: 0x89}, + {value: 0x8132, lo: 0x8a, hi: 0x8a}, + // Block 0xc, offset 0x5e + {value: 0x0000, lo: 0x03}, + {value: 0x8132, lo: 0xab, hi: 0xb1}, + {value: 0x812d, lo: 0xb2, hi: 0xb2}, + {value: 0x8132, lo: 0xb3, hi: 0xb3}, + // Block 0xd, offset 0x62 + {value: 0x0000, lo: 0x04}, + {value: 0x8132, lo: 0x96, hi: 0x99}, + {value: 0x8132, lo: 0x9b, hi: 0xa3}, + {value: 0x8132, lo: 0xa5, hi: 0xa7}, + {value: 0x8132, lo: 0xa9, hi: 0xad}, + // Block 0xe, offset 0x67 + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0x99, hi: 0x9b}, + // Block 0xf, offset 0x69 + {value: 0x0000, lo: 0x10}, + {value: 0x8132, lo: 0x94, hi: 0xa1}, + {value: 0x812d, lo: 0xa3, hi: 0xa3}, + {value: 0x8132, lo: 0xa4, hi: 0xa5}, + {value: 0x812d, lo: 0xa6, hi: 0xa6}, + {value: 0x8132, lo: 0xa7, hi: 0xa8}, + {value: 0x812d, lo: 0xa9, hi: 0xa9}, + {value: 0x8132, lo: 0xaa, hi: 0xac}, + {value: 0x812d, lo: 0xad, hi: 0xaf}, + {value: 0x8116, lo: 0xb0, hi: 0xb0}, + {value: 0x8117, lo: 0xb1, hi: 0xb1}, + {value: 0x8118, lo: 0xb2, hi: 0xb2}, + {value: 0x8132, lo: 0xb3, hi: 0xb5}, + {value: 0x812d, lo: 0xb6, hi: 0xb6}, + {value: 0x8132, lo: 0xb7, hi: 0xb8}, + {value: 0x812d, lo: 0xb9, hi: 0xba}, + {value: 0x8132, lo: 0xbb, hi: 0xbf}, + // Block 0x10, offset 0x7a + {value: 0x0000, lo: 0x07}, + {value: 0xa000, lo: 0xa8, hi: 0xa8}, + {value: 0x3ed8, lo: 0xa9, hi: 0xa9}, + {value: 0xa000, lo: 0xb0, hi: 0xb0}, + {value: 0x3ee0, lo: 0xb1, hi: 0xb1}, + {value: 0xa000, lo: 0xb3, hi: 0xb3}, + {value: 0x3ee8, lo: 0xb4, hi: 0xb4}, + {value: 0x9902, lo: 0xbc, hi: 0xbc}, + // Block 0x11, offset 0x82 + {value: 0x0008, lo: 0x06}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x8132, lo: 0x91, hi: 0x91}, + {value: 0x812d, lo: 0x92, hi: 0x92}, + {value: 0x8132, lo: 0x93, hi: 0x93}, + {value: 0x8132, lo: 0x94, hi: 0x94}, + {value: 0x451c, lo: 0x98, hi: 0x9f}, + // Block 0x12, offset 0x89 + {value: 0x0000, lo: 0x02}, + {value: 0x8102, lo: 0xbc, hi: 0xbc}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x13, offset 0x8c + {value: 0x0008, lo: 0x06}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0x2c9e, lo: 0x8b, hi: 0x8c}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + {value: 0x455c, lo: 0x9c, hi: 0x9d}, + {value: 0x456c, lo: 0x9f, hi: 0x9f}, + // Block 0x14, offset 0x93 + {value: 0x0000, lo: 0x03}, + {value: 0x4594, lo: 0xb3, hi: 0xb3}, + {value: 0x459c, lo: 0xb6, hi: 0xb6}, + {value: 0x8102, lo: 0xbc, hi: 0xbc}, + // Block 0x15, offset 0x97 + {value: 0x0008, lo: 0x03}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x4574, lo: 0x99, hi: 0x9b}, + {value: 0x458c, lo: 0x9e, hi: 0x9e}, + // Block 0x16, offset 0x9b + {value: 0x0000, lo: 0x01}, + {value: 0x8102, lo: 0xbc, hi: 0xbc}, + // Block 0x17, offset 0x9d + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + // Block 0x18, offset 0x9f + {value: 0x0000, lo: 0x08}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0x2cb6, lo: 0x88, hi: 0x88}, + {value: 0x2cae, lo: 0x8b, hi: 0x8b}, + {value: 0x2cbe, lo: 0x8c, hi: 0x8c}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x96, hi: 0x97}, + {value: 0x45a4, lo: 0x9c, hi: 0x9c}, + {value: 0x45ac, lo: 0x9d, hi: 0x9d}, + // Block 0x19, offset 0xa8 + {value: 0x0000, lo: 0x03}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0x2cc6, lo: 0x94, hi: 0x94}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x1a, offset 0xac + {value: 0x0000, lo: 0x06}, + {value: 0xa000, lo: 0x86, hi: 0x87}, + {value: 0x2cce, lo: 0x8a, hi: 0x8a}, + {value: 0x2cde, lo: 0x8b, hi: 0x8b}, + {value: 0x2cd6, lo: 0x8c, hi: 0x8c}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + // Block 0x1b, offset 0xb3 + {value: 0x1801, lo: 0x04}, + {value: 0xa000, lo: 0x86, hi: 0x86}, + {value: 0x3ef0, lo: 0x88, hi: 0x88}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x8120, lo: 0x95, hi: 0x96}, + // Block 0x1c, offset 0xb8 + {value: 0x0000, lo: 0x02}, + {value: 0x8102, lo: 0xbc, hi: 0xbc}, + {value: 0xa000, lo: 0xbf, hi: 0xbf}, + // Block 0x1d, offset 0xbb + {value: 0x0000, lo: 0x09}, + {value: 0x2ce6, lo: 0x80, hi: 0x80}, + {value: 0x9900, lo: 0x82, hi: 0x82}, + {value: 0xa000, lo: 0x86, hi: 0x86}, + {value: 0x2cee, lo: 0x87, hi: 0x87}, + {value: 0x2cf6, lo: 0x88, hi: 0x88}, + {value: 0x2f50, lo: 0x8a, hi: 0x8a}, + {value: 0x2dd8, lo: 0x8b, hi: 0x8b}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x95, hi: 0x96}, + // Block 0x1e, offset 0xc5 + {value: 0x0000, lo: 0x01}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x1f, offset 0xc7 + {value: 0x0000, lo: 0x06}, + {value: 0xa000, lo: 0x86, hi: 0x87}, + {value: 0x2cfe, lo: 0x8a, hi: 0x8a}, + {value: 0x2d0e, lo: 0x8b, hi: 0x8b}, + {value: 0x2d06, lo: 0x8c, hi: 0x8c}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + // Block 0x20, offset 0xce + {value: 0x6bea, lo: 0x07}, + {value: 0x9904, lo: 0x8a, hi: 0x8a}, + {value: 0x9900, lo: 0x8f, hi: 0x8f}, + {value: 0xa000, lo: 0x99, hi: 0x99}, + {value: 0x3ef8, lo: 0x9a, hi: 0x9a}, + {value: 0x2f58, lo: 0x9c, hi: 0x9c}, + {value: 0x2de3, lo: 0x9d, hi: 0x9d}, + {value: 0x2d16, lo: 0x9e, hi: 0x9f}, + // Block 0x21, offset 0xd6 + {value: 0x0000, lo: 0x02}, + {value: 0x8122, lo: 0xb8, hi: 0xb9}, + {value: 0x8104, lo: 0xba, hi: 0xba}, + // Block 0x22, offset 0xd9 + {value: 0x0000, lo: 0x01}, + {value: 0x8123, lo: 0x88, hi: 0x8b}, + // Block 0x23, offset 0xdb + {value: 0x0000, lo: 0x01}, + {value: 0x8124, lo: 0xb8, hi: 0xb9}, + // Block 0x24, offset 0xdd + {value: 0x0000, lo: 0x01}, + {value: 0x8125, lo: 0x88, hi: 0x8b}, + // Block 0x25, offset 0xdf + {value: 0x0000, lo: 0x04}, + {value: 0x812d, lo: 0x98, hi: 0x99}, + {value: 0x812d, lo: 0xb5, hi: 0xb5}, + {value: 0x812d, lo: 0xb7, hi: 0xb7}, + {value: 0x812b, lo: 0xb9, hi: 0xb9}, + // Block 0x26, offset 0xe4 + {value: 0x0000, lo: 0x10}, + {value: 0x2644, lo: 0x83, hi: 0x83}, + {value: 0x264b, lo: 0x8d, hi: 0x8d}, + {value: 0x2652, lo: 0x92, hi: 0x92}, + {value: 0x2659, lo: 0x97, hi: 0x97}, + {value: 0x2660, lo: 0x9c, hi: 0x9c}, + {value: 0x263d, lo: 0xa9, hi: 0xa9}, + {value: 0x8126, lo: 0xb1, hi: 0xb1}, + {value: 0x8127, lo: 0xb2, hi: 0xb2}, + {value: 0x4a84, lo: 0xb3, hi: 0xb3}, + {value: 0x8128, lo: 0xb4, hi: 0xb4}, + {value: 0x4a8d, lo: 0xb5, hi: 0xb5}, + {value: 0x45b4, lo: 0xb6, hi: 0xb6}, + {value: 0x8200, lo: 0xb7, hi: 0xb7}, + {value: 0x45bc, lo: 0xb8, hi: 0xb8}, + {value: 0x8200, lo: 0xb9, hi: 0xb9}, + {value: 0x8127, lo: 0xba, hi: 0xbd}, + // Block 0x27, offset 0xf5 + {value: 0x0000, lo: 0x0b}, + {value: 0x8127, lo: 0x80, hi: 0x80}, + {value: 0x4a96, lo: 0x81, hi: 0x81}, + {value: 0x8132, lo: 0x82, hi: 0x83}, + {value: 0x8104, lo: 0x84, hi: 0x84}, + {value: 0x8132, lo: 0x86, hi: 0x87}, + {value: 0x266e, lo: 0x93, hi: 0x93}, + {value: 0x2675, lo: 0x9d, hi: 0x9d}, + {value: 0x267c, lo: 0xa2, hi: 0xa2}, + {value: 0x2683, lo: 0xa7, hi: 0xa7}, + {value: 0x268a, lo: 0xac, hi: 0xac}, + {value: 0x2667, lo: 0xb9, hi: 0xb9}, + // Block 0x28, offset 0x101 + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0x86, hi: 0x86}, + // Block 0x29, offset 0x103 + {value: 0x0000, lo: 0x05}, + {value: 0xa000, lo: 0xa5, hi: 0xa5}, + {value: 0x2d1e, lo: 0xa6, hi: 0xa6}, + {value: 0x9900, lo: 0xae, hi: 0xae}, + {value: 0x8102, lo: 0xb7, hi: 0xb7}, + {value: 0x8104, lo: 0xb9, hi: 0xba}, + // Block 0x2a, offset 0x109 + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0x8d, hi: 0x8d}, + // Block 0x2b, offset 0x10b + {value: 0x0000, lo: 0x01}, + {value: 0xa000, lo: 0x80, hi: 0x92}, + // Block 0x2c, offset 0x10d + {value: 0x0000, lo: 0x01}, + {value: 0xb900, lo: 0xa1, hi: 0xb5}, + // Block 0x2d, offset 0x10f + {value: 0x0000, lo: 0x01}, + {value: 0x9900, lo: 0xa8, hi: 0xbf}, + // Block 0x2e, offset 0x111 + {value: 0x0000, lo: 0x01}, + {value: 0x9900, lo: 0x80, hi: 0x82}, + // Block 0x2f, offset 0x113 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0x9d, hi: 0x9f}, + // Block 0x30, offset 0x115 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x94, hi: 0x94}, + {value: 0x8104, lo: 0xb4, hi: 0xb4}, + // Block 0x31, offset 0x118 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x92, hi: 0x92}, + {value: 0x8132, lo: 0x9d, hi: 0x9d}, + // Block 0x32, offset 0x11b + {value: 0x0000, lo: 0x01}, + {value: 0x8131, lo: 0xa9, hi: 0xa9}, + // Block 0x33, offset 0x11d + {value: 0x0004, lo: 0x02}, + {value: 0x812e, lo: 0xb9, hi: 0xba}, + {value: 0x812d, lo: 0xbb, hi: 0xbb}, + // Block 0x34, offset 0x120 + {value: 0x0000, lo: 0x02}, + {value: 0x8132, lo: 0x97, hi: 0x97}, + {value: 0x812d, lo: 0x98, hi: 0x98}, + // Block 0x35, offset 0x123 + {value: 0x0000, lo: 0x03}, + {value: 0x8104, lo: 0xa0, hi: 0xa0}, + {value: 0x8132, lo: 0xb5, hi: 0xbc}, + {value: 0x812d, lo: 0xbf, hi: 0xbf}, + // Block 0x36, offset 0x127 + {value: 0x0000, lo: 0x04}, + {value: 0x8132, lo: 0xb0, hi: 0xb4}, + {value: 0x812d, lo: 0xb5, hi: 0xba}, + {value: 0x8132, lo: 0xbb, hi: 0xbc}, + {value: 0x812d, lo: 0xbd, hi: 0xbd}, + // Block 0x37, offset 0x12c + {value: 0x0000, lo: 0x08}, + {value: 0x2d66, lo: 0x80, hi: 0x80}, + {value: 0x2d6e, lo: 0x81, hi: 0x81}, + {value: 0xa000, lo: 0x82, hi: 0x82}, + {value: 0x2d76, lo: 0x83, hi: 0x83}, + {value: 0x8104, lo: 0x84, hi: 0x84}, + {value: 0x8132, lo: 0xab, hi: 0xab}, + {value: 0x812d, lo: 0xac, hi: 0xac}, + {value: 0x8132, lo: 0xad, hi: 0xb3}, + // Block 0x38, offset 0x135 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0xaa, hi: 0xab}, + // Block 0x39, offset 0x137 + {value: 0x0000, lo: 0x02}, + {value: 0x8102, lo: 0xa6, hi: 0xa6}, + {value: 0x8104, lo: 0xb2, hi: 0xb3}, + // Block 0x3a, offset 0x13a + {value: 0x0000, lo: 0x01}, + {value: 0x8102, lo: 0xb7, hi: 0xb7}, + // Block 0x3b, offset 0x13c + {value: 0x0000, lo: 0x0a}, + {value: 0x8132, lo: 0x90, hi: 0x92}, + {value: 0x8101, lo: 0x94, hi: 0x94}, + {value: 0x812d, lo: 0x95, hi: 0x99}, + {value: 0x8132, lo: 0x9a, hi: 0x9b}, + {value: 0x812d, lo: 0x9c, hi: 0x9f}, + {value: 0x8132, lo: 0xa0, hi: 0xa0}, + {value: 0x8101, lo: 0xa2, hi: 0xa8}, + {value: 0x812d, lo: 0xad, hi: 0xad}, + {value: 0x8132, lo: 0xb4, hi: 0xb4}, + {value: 0x8132, lo: 0xb8, hi: 0xb9}, + // Block 0x3c, offset 0x147 + {value: 0x0000, lo: 0x0f}, + {value: 0x8132, lo: 0x80, hi: 0x81}, + {value: 0x812d, lo: 0x82, hi: 0x82}, + {value: 0x8132, lo: 0x83, hi: 0x89}, + {value: 0x812d, lo: 0x8a, hi: 0x8a}, + {value: 0x8132, lo: 0x8b, hi: 0x8c}, + {value: 0x8135, lo: 0x8d, hi: 0x8d}, + {value: 0x812a, lo: 0x8e, hi: 0x8e}, + {value: 0x812d, lo: 0x8f, hi: 0x8f}, + {value: 0x8129, lo: 0x90, hi: 0x90}, + {value: 0x8132, lo: 0x91, hi: 0xb5}, + {value: 0x8132, lo: 0xbb, hi: 0xbb}, + {value: 0x8134, lo: 0xbc, hi: 0xbc}, + {value: 0x812d, lo: 0xbd, hi: 0xbd}, + {value: 0x8132, lo: 0xbe, hi: 0xbe}, + {value: 0x812d, lo: 0xbf, hi: 0xbf}, + // Block 0x3d, offset 0x157 + {value: 0x0004, lo: 0x03}, + {value: 0x0433, lo: 0x80, hi: 0x81}, + {value: 0x8100, lo: 0x97, hi: 0x97}, + {value: 0x8100, lo: 0xbe, hi: 0xbe}, + // Block 0x3e, offset 0x15b + {value: 0x0000, lo: 0x0d}, + {value: 0x8132, lo: 0x90, hi: 0x91}, + {value: 0x8101, lo: 0x92, hi: 0x93}, + {value: 0x8132, lo: 0x94, hi: 0x97}, + {value: 0x8101, lo: 0x98, hi: 0x9a}, + {value: 0x8132, lo: 0x9b, hi: 0x9c}, + {value: 0x8132, lo: 0xa1, hi: 0xa1}, + {value: 0x8101, lo: 0xa5, hi: 0xa6}, + {value: 0x8132, lo: 0xa7, hi: 0xa7}, + {value: 0x812d, lo: 0xa8, hi: 0xa8}, + {value: 0x8132, lo: 0xa9, hi: 0xa9}, + {value: 0x8101, lo: 0xaa, hi: 0xab}, + {value: 0x812d, lo: 0xac, hi: 0xaf}, + {value: 0x8132, lo: 0xb0, hi: 0xb0}, + // Block 0x3f, offset 0x169 + {value: 0x427b, lo: 0x02}, + {value: 0x01b8, lo: 0xa6, hi: 0xa6}, + {value: 0x0057, lo: 0xaa, hi: 0xab}, + // Block 0x40, offset 0x16c + {value: 0x0007, lo: 0x05}, + {value: 0xa000, lo: 0x90, hi: 0x90}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0xa000, lo: 0x94, hi: 0x94}, + {value: 0x3bb9, lo: 0x9a, hi: 0x9b}, + {value: 0x3bc7, lo: 0xae, hi: 0xae}, + // Block 0x41, offset 0x172 + {value: 0x000e, lo: 0x05}, + {value: 0x3bce, lo: 0x8d, hi: 0x8e}, + {value: 0x3bd5, lo: 0x8f, hi: 0x8f}, + {value: 0xa000, lo: 0x90, hi: 0x90}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0xa000, lo: 0x94, hi: 0x94}, + // Block 0x42, offset 0x178 + {value: 0x6408, lo: 0x0a}, + {value: 0xa000, lo: 0x83, hi: 0x83}, + {value: 0x3be3, lo: 0x84, hi: 0x84}, + {value: 0xa000, lo: 0x88, hi: 0x88}, + {value: 0x3bea, lo: 0x89, hi: 0x89}, + {value: 0xa000, lo: 0x8b, hi: 0x8b}, + {value: 0x3bf1, lo: 0x8c, hi: 0x8c}, + {value: 0xa000, lo: 0xa3, hi: 0xa3}, + {value: 0x3bf8, lo: 0xa4, hi: 0xa5}, + {value: 0x3bff, lo: 0xa6, hi: 0xa6}, + {value: 0xa000, lo: 0xbc, hi: 0xbc}, + // Block 0x43, offset 0x183 + {value: 0x0007, lo: 0x03}, + {value: 0x3c68, lo: 0xa0, hi: 0xa1}, + {value: 0x3c92, lo: 0xa2, hi: 0xa3}, + {value: 0x3cbc, lo: 0xaa, hi: 0xad}, + // Block 0x44, offset 0x187 + {value: 0x0004, lo: 0x01}, + {value: 0x048b, lo: 0xa9, hi: 0xaa}, + // Block 0x45, offset 0x189 + {value: 0x0000, lo: 0x01}, + {value: 0x44dd, lo: 0x9c, hi: 0x9c}, + // Block 0x46, offset 0x18b + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xaf, hi: 0xb1}, + // Block 0x47, offset 0x18d + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0xbf, hi: 0xbf}, + // Block 0x48, offset 0x18f + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xa0, hi: 0xbf}, + // Block 0x49, offset 0x191 + {value: 0x0000, lo: 0x05}, + {value: 0x812c, lo: 0xaa, hi: 0xaa}, + {value: 0x8131, lo: 0xab, hi: 0xab}, + {value: 0x8133, lo: 0xac, hi: 0xac}, + {value: 0x812e, lo: 0xad, hi: 0xad}, + {value: 0x812f, lo: 0xae, hi: 0xaf}, + // Block 0x4a, offset 0x197 + {value: 0x0000, lo: 0x03}, + {value: 0x4a9f, lo: 0xb3, hi: 0xb3}, + {value: 0x4a9f, lo: 0xb5, hi: 0xb6}, + {value: 0x4a9f, lo: 0xba, hi: 0xbf}, + // Block 0x4b, offset 0x19b + {value: 0x0000, lo: 0x01}, + {value: 0x4a9f, lo: 0x8f, hi: 0xa3}, + // Block 0x4c, offset 0x19d + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0xae, hi: 0xbe}, + // Block 0x4d, offset 0x19f + {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 0x4e, offset 0x1a7 + {value: 0x0000, lo: 0x03}, + {value: 0x8100, lo: 0x80, hi: 0x80}, + {value: 0x8100, lo: 0x8b, hi: 0x8b}, + {value: 0x8100, lo: 0x8e, hi: 0x8e}, + // Block 0x4f, offset 0x1ab + {value: 0x0000, lo: 0x02}, + {value: 0x8132, lo: 0xaf, hi: 0xaf}, + {value: 0x8132, lo: 0xb4, hi: 0xbd}, + // Block 0x50, offset 0x1ae + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0x9e, hi: 0x9f}, + // Block 0x51, offset 0x1b0 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xb0, hi: 0xb1}, + // Block 0x52, offset 0x1b2 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0x86, hi: 0x86}, + // Block 0x53, offset 0x1b4 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x84, hi: 0x84}, + {value: 0x8132, lo: 0xa0, hi: 0xb1}, + // Block 0x54, offset 0x1b7 + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0xab, hi: 0xad}, + // Block 0x55, offset 0x1b9 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0x93, hi: 0x93}, + // Block 0x56, offset 0x1bb + {value: 0x0000, lo: 0x01}, + {value: 0x8102, lo: 0xb3, hi: 0xb3}, + // Block 0x57, offset 0x1bd + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0x80, hi: 0x80}, + // Block 0x58, offset 0x1bf + {value: 0x0000, lo: 0x05}, + {value: 0x8132, lo: 0xb0, hi: 0xb0}, + {value: 0x8132, lo: 0xb2, hi: 0xb3}, + {value: 0x812d, lo: 0xb4, hi: 0xb4}, + {value: 0x8132, lo: 0xb7, hi: 0xb8}, + {value: 0x8132, lo: 0xbe, hi: 0xbf}, + // Block 0x59, offset 0x1c5 + {value: 0x0000, lo: 0x02}, + {value: 0x8132, lo: 0x81, hi: 0x81}, + {value: 0x8104, lo: 0xb6, hi: 0xb6}, + // Block 0x5a, offset 0x1c8 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0xad, hi: 0xad}, + // Block 0x5b, offset 0x1ca + {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 0x5c, offset 0x1d1 + {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 0x5d, offset 0x1d7 + {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 0x5e, offset 0x1dd + {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 0x5f, offset 0x1e5 + {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 0x60, offset 0x1eb + {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 0x61, offset 0x1f1 + {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 0x62, offset 0x1f7 + {value: 0x0000, lo: 0x03}, + {value: 0xc600, lo: 0x80, hi: 0x87}, + {value: 0xe500, lo: 0x88, hi: 0x88}, + {value: 0xc600, lo: 0x89, hi: 0xa3}, + // Block 0x63, offset 0x1fb + {value: 0x0006, lo: 0x0d}, + {value: 0x4390, lo: 0x9d, hi: 0x9d}, + {value: 0x8115, lo: 0x9e, hi: 0x9e}, + {value: 0x4402, lo: 0x9f, hi: 0x9f}, + {value: 0x43f0, lo: 0xaa, hi: 0xab}, + {value: 0x44f4, lo: 0xac, hi: 0xac}, + {value: 0x44fc, lo: 0xad, hi: 0xad}, + {value: 0x4348, lo: 0xae, hi: 0xb1}, + {value: 0x4366, lo: 0xb2, hi: 0xb4}, + {value: 0x437e, lo: 0xb5, hi: 0xb6}, + {value: 0x438a, lo: 0xb8, hi: 0xb8}, + {value: 0x4396, lo: 0xb9, hi: 0xbb}, + {value: 0x43ae, lo: 0xbc, hi: 0xbc}, + {value: 0x43b4, lo: 0xbe, hi: 0xbe}, + // Block 0x64, offset 0x209 + {value: 0x0006, lo: 0x08}, + {value: 0x43ba, lo: 0x80, hi: 0x81}, + {value: 0x43c6, lo: 0x83, hi: 0x84}, + {value: 0x43d8, lo: 0x86, hi: 0x89}, + {value: 0x43fc, lo: 0x8a, hi: 0x8a}, + {value: 0x4378, lo: 0x8b, hi: 0x8b}, + {value: 0x4360, lo: 0x8c, hi: 0x8c}, + {value: 0x43a8, lo: 0x8d, hi: 0x8d}, + {value: 0x43d2, lo: 0x8e, hi: 0x8e}, + // Block 0x65, offset 0x212 + {value: 0x0000, lo: 0x02}, + {value: 0x8100, lo: 0xa4, hi: 0xa5}, + {value: 0x8100, lo: 0xb0, hi: 0xb1}, + // Block 0x66, offset 0x215 + {value: 0x0000, lo: 0x02}, + {value: 0x8100, lo: 0x9b, hi: 0x9d}, + {value: 0x8200, lo: 0x9e, hi: 0xa3}, + // Block 0x67, offset 0x218 + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0x90, hi: 0x90}, + // Block 0x68, offset 0x21a + {value: 0x0000, lo: 0x02}, + {value: 0x8100, lo: 0x99, hi: 0x99}, + {value: 0x8200, lo: 0xb2, hi: 0xb4}, + // Block 0x69, offset 0x21d + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0xbc, hi: 0xbd}, + // Block 0x6a, offset 0x21f + {value: 0x0000, lo: 0x03}, + {value: 0x8132, lo: 0xa0, hi: 0xa6}, + {value: 0x812d, lo: 0xa7, hi: 0xad}, + {value: 0x8132, lo: 0xae, hi: 0xaf}, + // Block 0x6b, offset 0x223 + {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 0x6c, offset 0x228 + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0x81, hi: 0x8c}, + // Block 0x6d, offset 0x22a + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0xb5, hi: 0xba}, + // Block 0x6e, offset 0x22c + {value: 0x0000, lo: 0x04}, + {value: 0x4a9f, lo: 0x9e, hi: 0x9f}, + {value: 0x4a9f, lo: 0xa3, hi: 0xa3}, + {value: 0x4a9f, lo: 0xa5, hi: 0xa6}, + {value: 0x4a9f, lo: 0xaa, hi: 0xaf}, + // Block 0x6f, offset 0x231 + {value: 0x0000, lo: 0x05}, + {value: 0x4a9f, lo: 0x82, hi: 0x87}, + {value: 0x4a9f, lo: 0x8a, hi: 0x8f}, + {value: 0x4a9f, lo: 0x92, hi: 0x97}, + {value: 0x4a9f, lo: 0x9a, hi: 0x9c}, + {value: 0x8100, lo: 0xa3, hi: 0xa3}, + // Block 0x70, offset 0x237 + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0xbd, hi: 0xbd}, + // Block 0x71, offset 0x239 + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0xa0, hi: 0xa0}, + // Block 0x72, offset 0x23b + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xb6, hi: 0xba}, + // Block 0x73, offset 0x23d + {value: 0x002c, lo: 0x05}, + {value: 0x812d, lo: 0x8d, hi: 0x8d}, + {value: 0x8132, lo: 0x8f, hi: 0x8f}, + {value: 0x8132, lo: 0xb8, hi: 0xb8}, + {value: 0x8101, lo: 0xb9, hi: 0xba}, + {value: 0x8104, lo: 0xbf, hi: 0xbf}, + // Block 0x74, offset 0x243 + {value: 0x0000, lo: 0x02}, + {value: 0x8132, lo: 0xa5, hi: 0xa5}, + {value: 0x812d, lo: 0xa6, hi: 0xa6}, + // Block 0x75, offset 0x246 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x86, hi: 0x86}, + {value: 0x8104, lo: 0xbf, hi: 0xbf}, + // Block 0x76, offset 0x249 + {value: 0x17fe, lo: 0x07}, + {value: 0xa000, lo: 0x99, hi: 0x99}, + {value: 0x4238, lo: 0x9a, hi: 0x9a}, + {value: 0xa000, lo: 0x9b, hi: 0x9b}, + {value: 0x4242, lo: 0x9c, hi: 0x9c}, + {value: 0xa000, lo: 0xa5, hi: 0xa5}, + {value: 0x424c, lo: 0xab, hi: 0xab}, + {value: 0x8104, lo: 0xb9, hi: 0xba}, + // Block 0x77, offset 0x251 + {value: 0x0000, lo: 0x06}, + {value: 0x8132, lo: 0x80, hi: 0x82}, + {value: 0x9900, lo: 0xa7, hi: 0xa7}, + {value: 0x2d7e, lo: 0xae, hi: 0xae}, + {value: 0x2d88, lo: 0xaf, hi: 0xaf}, + {value: 0xa000, lo: 0xb1, hi: 0xb2}, + {value: 0x8104, lo: 0xb3, hi: 0xb4}, + // Block 0x78, offset 0x258 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x80, hi: 0x80}, + {value: 0x8102, lo: 0x8a, hi: 0x8a}, + // Block 0x79, offset 0x25b + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0xb5, hi: 0xb5}, + {value: 0x8102, lo: 0xb6, hi: 0xb6}, + // Block 0x7a, offset 0x25e + {value: 0x0002, lo: 0x01}, + {value: 0x8102, lo: 0xa9, hi: 0xaa}, + // Block 0x7b, offset 0x260 + {value: 0x0000, lo: 0x07}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0x2d92, lo: 0x8b, hi: 0x8b}, + {value: 0x2d9c, lo: 0x8c, hi: 0x8c}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + {value: 0x8132, lo: 0xa6, hi: 0xac}, + {value: 0x8132, lo: 0xb0, hi: 0xb4}, + // Block 0x7c, offset 0x268 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x82, hi: 0x82}, + {value: 0x8102, lo: 0x86, hi: 0x86}, + // Block 0x7d, offset 0x26b + {value: 0x6b5a, lo: 0x06}, + {value: 0x9900, lo: 0xb0, hi: 0xb0}, + {value: 0xa000, lo: 0xb9, hi: 0xb9}, + {value: 0x9900, lo: 0xba, hi: 0xba}, + {value: 0x2db0, lo: 0xbb, hi: 0xbb}, + {value: 0x2da6, lo: 0xbc, hi: 0xbd}, + {value: 0x2dba, lo: 0xbe, hi: 0xbe}, + // Block 0x7e, offset 0x272 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x82, hi: 0x82}, + {value: 0x8102, lo: 0x83, hi: 0x83}, + // Block 0x7f, offset 0x275 + {value: 0x0000, lo: 0x05}, + {value: 0x9900, lo: 0xaf, hi: 0xaf}, + {value: 0xa000, lo: 0xb8, hi: 0xb9}, + {value: 0x2dc4, lo: 0xba, hi: 0xba}, + {value: 0x2dce, lo: 0xbb, hi: 0xbb}, + {value: 0x8104, lo: 0xbf, hi: 0xbf}, + // Block 0x80, offset 0x27b + {value: 0x0000, lo: 0x01}, + {value: 0x8102, lo: 0x80, hi: 0x80}, + // Block 0x81, offset 0x27d + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0xb6, hi: 0xb6}, + {value: 0x8102, lo: 0xb7, hi: 0xb7}, + // Block 0x82, offset 0x280 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0xab, hi: 0xab}, + // Block 0x83, offset 0x282 + {value: 0x0000, lo: 0x01}, + {value: 0x8101, lo: 0xb0, hi: 0xb4}, + // Block 0x84, offset 0x284 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xb0, hi: 0xb6}, + // Block 0x85, offset 0x286 + {value: 0x0000, lo: 0x01}, + {value: 0x8101, lo: 0x9e, hi: 0x9e}, + // Block 0x86, offset 0x288 + {value: 0x0000, lo: 0x0c}, + {value: 0x45cc, lo: 0x9e, hi: 0x9e}, + {value: 0x45d6, lo: 0x9f, hi: 0x9f}, + {value: 0x460a, lo: 0xa0, hi: 0xa0}, + {value: 0x4618, lo: 0xa1, hi: 0xa1}, + {value: 0x4626, lo: 0xa2, hi: 0xa2}, + {value: 0x4634, lo: 0xa3, hi: 0xa3}, + {value: 0x4642, lo: 0xa4, hi: 0xa4}, + {value: 0x812b, lo: 0xa5, hi: 0xa6}, + {value: 0x8101, lo: 0xa7, hi: 0xa9}, + {value: 0x8130, lo: 0xad, hi: 0xad}, + {value: 0x812b, lo: 0xae, hi: 0xb2}, + {value: 0x812d, lo: 0xbb, hi: 0xbf}, + // Block 0x87, offset 0x295 + {value: 0x0000, lo: 0x09}, + {value: 0x812d, lo: 0x80, hi: 0x82}, + {value: 0x8132, lo: 0x85, hi: 0x89}, + {value: 0x812d, lo: 0x8a, hi: 0x8b}, + {value: 0x8132, lo: 0xaa, hi: 0xad}, + {value: 0x45e0, lo: 0xbb, hi: 0xbb}, + {value: 0x45ea, lo: 0xbc, hi: 0xbc}, + {value: 0x4650, lo: 0xbd, hi: 0xbd}, + {value: 0x466c, lo: 0xbe, hi: 0xbe}, + {value: 0x465e, lo: 0xbf, hi: 0xbf}, + // Block 0x88, offset 0x29f + {value: 0x0000, lo: 0x01}, + {value: 0x467a, lo: 0x80, hi: 0x80}, + // Block 0x89, offset 0x2a1 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0x82, hi: 0x84}, + // Block 0x8a, offset 0x2a3 + {value: 0x0000, lo: 0x05}, + {value: 0x8132, lo: 0x80, hi: 0x86}, + {value: 0x8132, lo: 0x88, hi: 0x98}, + {value: 0x8132, lo: 0x9b, hi: 0xa1}, + {value: 0x8132, lo: 0xa3, hi: 0xa4}, + {value: 0x8132, lo: 0xa6, hi: 0xaa}, + // Block 0x8b, offset 0x2a9 + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0x90, hi: 0x96}, + // Block 0x8c, offset 0x2ab + {value: 0x0000, lo: 0x02}, + {value: 0x8132, lo: 0x84, hi: 0x89}, + {value: 0x8102, lo: 0x8a, hi: 0x8a}, + // Block 0x8d, offset 0x2ae + {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: 16994 bytes (16.60 KiB). Checksum: c3ed54ee046f3c46. +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 < 90: + return uint16(nfkcValues[n<<6+uint32(b)]) + default: + n -= 90 + return uint16(nfkcSparse.lookup(n, b)) + } +} + +// nfkcValues: 92 blocks, 5888 entries, 11776 bytes +// The third block is the zero block. +var nfkcValues = [5888]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: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x4688, 0xc3: 0x2f79, 0xc4: 0x4697, 0xc5: 0x469c, + 0xc6: 0xa000, 0xc7: 0x46a6, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x46ab, 0xcb: 0x2ffb, + 0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x46bf, 0xd1: 0x3104, + 0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x46c9, 0xd5: 0x46ce, 0xd6: 0x46dd, + 0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x470f, 0xdd: 0x3235, + 0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x4719, 0xe3: 0x3285, + 0xe4: 0x4728, 0xe5: 0x472d, 0xe6: 0xa000, 0xe7: 0x4737, 0xe8: 0x32ee, 0xe9: 0x32f3, + 0xea: 0x473c, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x4750, + 0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x475a, 0xf5: 0x475f, + 0xf6: 0x476e, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3, + 0xfc: 0x47a0, 0xfd: 0x3550, 0xff: 0x3569, + // Block 0x4, offset 0x100 + 0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x468d, 0x103: 0x471e, 0x104: 0x2f9c, 0x105: 0x32a8, + 0x106: 0x2fb0, 0x107: 0x32bc, 0x108: 0x2fb5, 0x109: 0x32c1, 0x10a: 0x2fba, 0x10b: 0x32c6, + 0x10c: 0x2fbf, 0x10d: 0x32cb, 0x10e: 0x2fc9, 0x10f: 0x32d5, + 0x112: 0x46b0, 0x113: 0x4741, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302, + 0x118: 0x3014, 0x119: 0x3320, 0x11a: 0x3005, 0x11b: 0x3311, 0x11c: 0x302d, 0x11d: 0x3339, + 0x11e: 0x3037, 0x11f: 0x3343, 0x120: 0x303c, 0x121: 0x3348, 0x122: 0x3046, 0x123: 0x3352, + 0x124: 0x304b, 0x125: 0x3357, 0x128: 0x307d, 0x129: 0x338e, + 0x12a: 0x3082, 0x12b: 0x3393, 0x12c: 0x3087, 0x12d: 0x3398, 0x12e: 0x30aa, 0x12f: 0x33b6, + 0x130: 0x308c, 0x132: 0x195d, 0x133: 0x19e7, 0x134: 0x30b4, 0x135: 0x33c0, + 0x136: 0x30c8, 0x137: 0x33d9, 0x139: 0x30d2, 0x13a: 0x33e3, 0x13b: 0x30dc, + 0x13c: 0x33ed, 0x13d: 0x30d7, 0x13e: 0x33e8, 0x13f: 0x1bac, + // Block 0x5, offset 0x140 + 0x140: 0x1c34, 0x143: 0x30ff, 0x144: 0x3410, 0x145: 0x3118, + 0x146: 0x3429, 0x147: 0x310e, 0x148: 0x341f, 0x149: 0x1c5c, + 0x14c: 0x46d3, 0x14d: 0x4764, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c, + 0x154: 0x3159, 0x155: 0x346a, 0x156: 0x3172, 0x157: 0x3483, + 0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x46f6, 0x15b: 0x4787, 0x15c: 0x317c, 0x15d: 0x348d, + 0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x46fb, 0x161: 0x478c, 0x162: 0x31a4, 0x163: 0x34ba, + 0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x4705, 0x169: 0x4796, + 0x16a: 0x470a, 0x16b: 0x479b, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2, + 0x170: 0x31d1, 0x171: 0x34e7, 0x172: 0x31ef, 0x173: 0x3505, 0x174: 0x3212, 0x175: 0x3528, + 0x176: 0x323a, 0x177: 0x3555, 0x178: 0x324e, 0x179: 0x325d, 0x17a: 0x357d, 0x17b: 0x3267, + 0x17c: 0x3587, 0x17d: 0x326c, 0x17e: 0x358c, 0x17f: 0x00a7, + // Block 0x6, offset 0x180 + 0x184: 0x2dee, 0x185: 0x2df4, + 0x186: 0x2dfa, 0x187: 0x1972, 0x188: 0x1975, 0x189: 0x1a08, 0x18a: 0x1987, 0x18b: 0x198a, + 0x18c: 0x1a3e, 0x18d: 0x2f88, 0x18e: 0x3294, 0x18f: 0x3096, 0x190: 0x33a2, 0x191: 0x3140, + 0x192: 0x3451, 0x193: 0x31d6, 0x194: 0x34ec, 0x195: 0x39cf, 0x196: 0x3b5e, 0x197: 0x39c8, + 0x198: 0x3b57, 0x199: 0x39d6, 0x19a: 0x3b65, 0x19b: 0x39c1, 0x19c: 0x3b50, + 0x19e: 0x38b0, 0x19f: 0x3a3f, 0x1a0: 0x38a9, 0x1a1: 0x3a38, 0x1a2: 0x35b3, 0x1a3: 0x35c5, + 0x1a6: 0x3041, 0x1a7: 0x334d, 0x1a8: 0x30be, 0x1a9: 0x33cf, + 0x1aa: 0x46ec, 0x1ab: 0x477d, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd, + 0x1b0: 0x33c5, 0x1b1: 0x1942, 0x1b2: 0x1945, 0x1b3: 0x19cf, 0x1b4: 0x3028, 0x1b5: 0x3334, + 0x1b8: 0x30fa, 0x1b9: 0x340b, 0x1ba: 0x38b7, 0x1bb: 0x3a46, + 0x1bc: 0x35ad, 0x1bd: 0x35bf, 0x1be: 0x35b9, 0x1bf: 0x35cb, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x2f8d, 0x1c1: 0x3299, 0x1c2: 0x2f92, 0x1c3: 0x329e, 0x1c4: 0x300a, 0x1c5: 0x3316, + 0x1c6: 0x300f, 0x1c7: 0x331b, 0x1c8: 0x309b, 0x1c9: 0x33a7, 0x1ca: 0x30a0, 0x1cb: 0x33ac, + 0x1cc: 0x3145, 0x1cd: 0x3456, 0x1ce: 0x314a, 0x1cf: 0x345b, 0x1d0: 0x3168, 0x1d1: 0x3479, + 0x1d2: 0x316d, 0x1d3: 0x347e, 0x1d4: 0x31db, 0x1d5: 0x34f1, 0x1d6: 0x31e0, 0x1d7: 0x34f6, + 0x1d8: 0x3186, 0x1d9: 0x3497, 0x1da: 0x319f, 0x1db: 0x34b5, + 0x1de: 0x305a, 0x1df: 0x3366, + 0x1e6: 0x4692, 0x1e7: 0x4723, 0x1e8: 0x46ba, 0x1e9: 0x474b, + 0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x46d8, 0x1ef: 0x4769, + 0x1f0: 0x3958, 0x1f1: 0x3ae7, 0x1f2: 0x3244, 0x1f3: 0x355f, + // Block 0x8, offset 0x200 + 0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132, + 0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932, + 0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932, + 0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d, + 0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d, + 0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d, + 0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d, + 0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d, + 0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101, + 0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d, + 0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132, + // Block 0x9, offset 0x240 + 0x240: 0x49ae, 0x241: 0x49b3, 0x242: 0x9932, 0x243: 0x49b8, 0x244: 0x4a71, 0x245: 0x9936, + 0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132, + 0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132, + 0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132, + 0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135, + 0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132, + 0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132, + 0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132, + 0x274: 0x0170, + 0x27a: 0x42a5, + 0x27e: 0x0037, + // Block 0xa, offset 0x280 + 0x284: 0x425a, 0x285: 0x447b, + 0x286: 0x35e9, 0x287: 0x00ce, 0x288: 0x3607, 0x289: 0x3613, 0x28a: 0x3625, + 0x28c: 0x3643, 0x28e: 0x3655, 0x28f: 0x3673, 0x290: 0x3e08, 0x291: 0xa000, + 0x295: 0xa000, 0x297: 0xa000, + 0x299: 0xa000, + 0x29f: 0xa000, 0x2a1: 0xa000, + 0x2a5: 0xa000, 0x2a9: 0xa000, + 0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x47fe, 0x2ad: 0x3697, 0x2ae: 0x4828, 0x2af: 0x36a9, + 0x2b0: 0x3e70, 0x2b1: 0xa000, 0x2b5: 0xa000, + 0x2b7: 0xa000, 0x2b9: 0xa000, + 0x2bf: 0xa000, + // Block 0xb, offset 0x2c0 + 0x2c1: 0xa000, 0x2c5: 0xa000, + 0x2c9: 0xa000, 0x2ca: 0x4840, 0x2cb: 0x485e, + 0x2cc: 0x36c7, 0x2cd: 0x36df, 0x2ce: 0x4876, 0x2d0: 0x01be, 0x2d1: 0x01d0, + 0x2d2: 0x01ac, 0x2d3: 0x430c, 0x2d4: 0x4312, 0x2d5: 0x01fa, 0x2d6: 0x01e8, + 0x2f0: 0x01d6, 0x2f1: 0x01eb, 0x2f2: 0x01ee, 0x2f4: 0x0188, 0x2f5: 0x01c7, + 0x2f9: 0x01a6, + // Block 0xc, offset 0x300 + 0x300: 0x3721, 0x301: 0x372d, 0x303: 0x371b, + 0x306: 0xa000, 0x307: 0x3709, + 0x30c: 0x375d, 0x30d: 0x3745, 0x30e: 0x376f, 0x310: 0xa000, + 0x313: 0xa000, 0x315: 0xa000, 0x316: 0xa000, 0x317: 0xa000, + 0x318: 0xa000, 0x319: 0x3751, 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: 0x37d5, 0x33a: 0xa000, + 0x33e: 0xa000, + // Block 0xd, offset 0x340 + 0x341: 0x3733, 0x342: 0x37b7, + 0x350: 0x370f, 0x351: 0x3793, + 0x352: 0x3715, 0x353: 0x3799, 0x356: 0x3727, 0x357: 0x37ab, + 0x358: 0xa000, 0x359: 0xa000, 0x35a: 0x3829, 0x35b: 0x382f, 0x35c: 0x3739, 0x35d: 0x37bd, + 0x35e: 0x373f, 0x35f: 0x37c3, 0x362: 0x374b, 0x363: 0x37cf, + 0x364: 0x3757, 0x365: 0x37db, 0x366: 0x3763, 0x367: 0x37e7, 0x368: 0xa000, 0x369: 0xa000, + 0x36a: 0x3835, 0x36b: 0x383b, 0x36c: 0x378d, 0x36d: 0x3811, 0x36e: 0x3769, 0x36f: 0x37ed, + 0x370: 0x3775, 0x371: 0x37f9, 0x372: 0x377b, 0x373: 0x37ff, 0x374: 0x3781, 0x375: 0x3805, + 0x378: 0x3787, 0x379: 0x380b, + // Block 0xe, offset 0x380 + 0x387: 0x1d61, + 0x391: 0x812d, + 0x392: 0x8132, 0x393: 0x8132, 0x394: 0x8132, 0x395: 0x8132, 0x396: 0x812d, 0x397: 0x8132, + 0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x812e, 0x39b: 0x812d, 0x39c: 0x8132, 0x39d: 0x8132, + 0x39e: 0x8132, 0x39f: 0x8132, 0x3a0: 0x8132, 0x3a1: 0x8132, 0x3a2: 0x812d, 0x3a3: 0x812d, + 0x3a4: 0x812d, 0x3a5: 0x812d, 0x3a6: 0x812d, 0x3a7: 0x812d, 0x3a8: 0x8132, 0x3a9: 0x8132, + 0x3aa: 0x812d, 0x3ab: 0x8132, 0x3ac: 0x8132, 0x3ad: 0x812e, 0x3ae: 0x8131, 0x3af: 0x8132, + 0x3b0: 0x8105, 0x3b1: 0x8106, 0x3b2: 0x8107, 0x3b3: 0x8108, 0x3b4: 0x8109, 0x3b5: 0x810a, + 0x3b6: 0x810b, 0x3b7: 0x810c, 0x3b8: 0x810d, 0x3b9: 0x810e, 0x3ba: 0x810e, 0x3bb: 0x810f, + 0x3bc: 0x8110, 0x3bd: 0x8111, 0x3bf: 0x8112, + // Block 0xf, offset 0x3c0 + 0x3c8: 0xa000, 0x3ca: 0xa000, 0x3cb: 0x8116, + 0x3cc: 0x8117, 0x3cd: 0x8118, 0x3ce: 0x8119, 0x3cf: 0x811a, 0x3d0: 0x811b, 0x3d1: 0x811c, + 0x3d2: 0x811d, 0x3d3: 0x9932, 0x3d4: 0x9932, 0x3d5: 0x992d, 0x3d6: 0x812d, 0x3d7: 0x8132, + 0x3d8: 0x8132, 0x3d9: 0x8132, 0x3da: 0x8132, 0x3db: 0x8132, 0x3dc: 0x812d, 0x3dd: 0x8132, + 0x3de: 0x8132, 0x3df: 0x812d, + 0x3f0: 0x811e, 0x3f5: 0x1d84, + 0x3f6: 0x2013, 0x3f7: 0x204f, 0x3f8: 0x204a, + // Block 0x10, offset 0x400 + 0x405: 0xa000, + 0x406: 0x2d26, 0x407: 0xa000, 0x408: 0x2d2e, 0x409: 0xa000, 0x40a: 0x2d36, 0x40b: 0xa000, + 0x40c: 0x2d3e, 0x40d: 0xa000, 0x40e: 0x2d46, 0x411: 0xa000, + 0x412: 0x2d4e, + 0x434: 0x8102, 0x435: 0x9900, + 0x43a: 0xa000, 0x43b: 0x2d56, + 0x43c: 0xa000, 0x43d: 0x2d5e, 0x43e: 0xa000, 0x43f: 0xa000, + // Block 0x11, offset 0x440 + 0x440: 0x0069, 0x441: 0x006b, 0x442: 0x006f, 0x443: 0x0083, 0x444: 0x00f5, 0x445: 0x00f8, + 0x446: 0x0413, 0x447: 0x0085, 0x448: 0x0089, 0x449: 0x008b, 0x44a: 0x0104, 0x44b: 0x0107, + 0x44c: 0x010a, 0x44d: 0x008f, 0x44f: 0x0097, 0x450: 0x009b, 0x451: 0x00e0, + 0x452: 0x009f, 0x453: 0x00fe, 0x454: 0x0417, 0x455: 0x041b, 0x456: 0x00a1, 0x457: 0x00a9, + 0x458: 0x00ab, 0x459: 0x0423, 0x45a: 0x012b, 0x45b: 0x00ad, 0x45c: 0x0427, 0x45d: 0x01be, + 0x45e: 0x01c1, 0x45f: 0x01c4, 0x460: 0x01fa, 0x461: 0x01fd, 0x462: 0x0093, 0x463: 0x00a5, + 0x464: 0x00ab, 0x465: 0x00ad, 0x466: 0x01be, 0x467: 0x01c1, 0x468: 0x01eb, 0x469: 0x01fa, + 0x46a: 0x01fd, + 0x478: 0x020c, + // Block 0x12, offset 0x480 + 0x49b: 0x00fb, 0x49c: 0x0087, 0x49d: 0x0101, + 0x49e: 0x00d4, 0x49f: 0x010a, 0x4a0: 0x008d, 0x4a1: 0x010d, 0x4a2: 0x0110, 0x4a3: 0x0116, + 0x4a4: 0x011c, 0x4a5: 0x011f, 0x4a6: 0x0122, 0x4a7: 0x042b, 0x4a8: 0x016a, 0x4a9: 0x0128, + 0x4aa: 0x042f, 0x4ab: 0x016d, 0x4ac: 0x0131, 0x4ad: 0x012e, 0x4ae: 0x0134, 0x4af: 0x0137, + 0x4b0: 0x013a, 0x4b1: 0x013d, 0x4b2: 0x0140, 0x4b3: 0x014c, 0x4b4: 0x014f, 0x4b5: 0x00ec, + 0x4b6: 0x0152, 0x4b7: 0x0155, 0x4b8: 0x041f, 0x4b9: 0x0158, 0x4ba: 0x015b, 0x4bb: 0x00b5, + 0x4bc: 0x015e, 0x4bd: 0x0161, 0x4be: 0x0164, 0x4bf: 0x01d0, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x2f97, 0x4c1: 0x32a3, 0x4c2: 0x2fa1, 0x4c3: 0x32ad, 0x4c4: 0x2fa6, 0x4c5: 0x32b2, + 0x4c6: 0x2fab, 0x4c7: 0x32b7, 0x4c8: 0x38cc, 0x4c9: 0x3a5b, 0x4ca: 0x2fc4, 0x4cb: 0x32d0, + 0x4cc: 0x2fce, 0x4cd: 0x32da, 0x4ce: 0x2fdd, 0x4cf: 0x32e9, 0x4d0: 0x2fd3, 0x4d1: 0x32df, + 0x4d2: 0x2fd8, 0x4d3: 0x32e4, 0x4d4: 0x38ef, 0x4d5: 0x3a7e, 0x4d6: 0x38f6, 0x4d7: 0x3a85, + 0x4d8: 0x3019, 0x4d9: 0x3325, 0x4da: 0x301e, 0x4db: 0x332a, 0x4dc: 0x3904, 0x4dd: 0x3a93, + 0x4de: 0x3023, 0x4df: 0x332f, 0x4e0: 0x3032, 0x4e1: 0x333e, 0x4e2: 0x3050, 0x4e3: 0x335c, + 0x4e4: 0x305f, 0x4e5: 0x336b, 0x4e6: 0x3055, 0x4e7: 0x3361, 0x4e8: 0x3064, 0x4e9: 0x3370, + 0x4ea: 0x3069, 0x4eb: 0x3375, 0x4ec: 0x30af, 0x4ed: 0x33bb, 0x4ee: 0x390b, 0x4ef: 0x3a9a, + 0x4f0: 0x30b9, 0x4f1: 0x33ca, 0x4f2: 0x30c3, 0x4f3: 0x33d4, 0x4f4: 0x30cd, 0x4f5: 0x33de, + 0x4f6: 0x46c4, 0x4f7: 0x4755, 0x4f8: 0x3912, 0x4f9: 0x3aa1, 0x4fa: 0x30e6, 0x4fb: 0x33f7, + 0x4fc: 0x30e1, 0x4fd: 0x33f2, 0x4fe: 0x30eb, 0x4ff: 0x33fc, + // Block 0x14, offset 0x500 + 0x500: 0x30f0, 0x501: 0x3401, 0x502: 0x30f5, 0x503: 0x3406, 0x504: 0x3109, 0x505: 0x341a, + 0x506: 0x3113, 0x507: 0x3424, 0x508: 0x3122, 0x509: 0x3433, 0x50a: 0x311d, 0x50b: 0x342e, + 0x50c: 0x3935, 0x50d: 0x3ac4, 0x50e: 0x3943, 0x50f: 0x3ad2, 0x510: 0x394a, 0x511: 0x3ad9, + 0x512: 0x3951, 0x513: 0x3ae0, 0x514: 0x314f, 0x515: 0x3460, 0x516: 0x3154, 0x517: 0x3465, + 0x518: 0x315e, 0x519: 0x346f, 0x51a: 0x46f1, 0x51b: 0x4782, 0x51c: 0x3997, 0x51d: 0x3b26, + 0x51e: 0x3177, 0x51f: 0x3488, 0x520: 0x3181, 0x521: 0x3492, 0x522: 0x4700, 0x523: 0x4791, + 0x524: 0x399e, 0x525: 0x3b2d, 0x526: 0x39a5, 0x527: 0x3b34, 0x528: 0x39ac, 0x529: 0x3b3b, + 0x52a: 0x3190, 0x52b: 0x34a1, 0x52c: 0x319a, 0x52d: 0x34b0, 0x52e: 0x31ae, 0x52f: 0x34c4, + 0x530: 0x31a9, 0x531: 0x34bf, 0x532: 0x31ea, 0x533: 0x3500, 0x534: 0x31f9, 0x535: 0x350f, + 0x536: 0x31f4, 0x537: 0x350a, 0x538: 0x39b3, 0x539: 0x3b42, 0x53a: 0x39ba, 0x53b: 0x3b49, + 0x53c: 0x31fe, 0x53d: 0x3514, 0x53e: 0x3203, 0x53f: 0x3519, + // Block 0x15, offset 0x540 + 0x540: 0x3208, 0x541: 0x351e, 0x542: 0x320d, 0x543: 0x3523, 0x544: 0x321c, 0x545: 0x3532, + 0x546: 0x3217, 0x547: 0x352d, 0x548: 0x3221, 0x549: 0x353c, 0x54a: 0x3226, 0x54b: 0x3541, + 0x54c: 0x322b, 0x54d: 0x3546, 0x54e: 0x3249, 0x54f: 0x3564, 0x550: 0x3262, 0x551: 0x3582, + 0x552: 0x3271, 0x553: 0x3591, 0x554: 0x3276, 0x555: 0x3596, 0x556: 0x337a, 0x557: 0x34a6, + 0x558: 0x3537, 0x559: 0x3573, 0x55a: 0x1be0, 0x55b: 0x42d7, + 0x560: 0x46a1, 0x561: 0x4732, 0x562: 0x2f83, 0x563: 0x328f, + 0x564: 0x3878, 0x565: 0x3a07, 0x566: 0x3871, 0x567: 0x3a00, 0x568: 0x3886, 0x569: 0x3a15, + 0x56a: 0x387f, 0x56b: 0x3a0e, 0x56c: 0x38be, 0x56d: 0x3a4d, 0x56e: 0x3894, 0x56f: 0x3a23, + 0x570: 0x388d, 0x571: 0x3a1c, 0x572: 0x38a2, 0x573: 0x3a31, 0x574: 0x389b, 0x575: 0x3a2a, + 0x576: 0x38c5, 0x577: 0x3a54, 0x578: 0x46b5, 0x579: 0x4746, 0x57a: 0x3000, 0x57b: 0x330c, + 0x57c: 0x2fec, 0x57d: 0x32f8, 0x57e: 0x38da, 0x57f: 0x3a69, + // Block 0x16, offset 0x580 + 0x580: 0x38d3, 0x581: 0x3a62, 0x582: 0x38e8, 0x583: 0x3a77, 0x584: 0x38e1, 0x585: 0x3a70, + 0x586: 0x38fd, 0x587: 0x3a8c, 0x588: 0x3091, 0x589: 0x339d, 0x58a: 0x30a5, 0x58b: 0x33b1, + 0x58c: 0x46e7, 0x58d: 0x4778, 0x58e: 0x3136, 0x58f: 0x3447, 0x590: 0x3920, 0x591: 0x3aaf, + 0x592: 0x3919, 0x593: 0x3aa8, 0x594: 0x392e, 0x595: 0x3abd, 0x596: 0x3927, 0x597: 0x3ab6, + 0x598: 0x3989, 0x599: 0x3b18, 0x59a: 0x396d, 0x59b: 0x3afc, 0x59c: 0x3966, 0x59d: 0x3af5, + 0x59e: 0x397b, 0x59f: 0x3b0a, 0x5a0: 0x3974, 0x5a1: 0x3b03, 0x5a2: 0x3982, 0x5a3: 0x3b11, + 0x5a4: 0x31e5, 0x5a5: 0x34fb, 0x5a6: 0x31c7, 0x5a7: 0x34dd, 0x5a8: 0x39e4, 0x5a9: 0x3b73, + 0x5aa: 0x39dd, 0x5ab: 0x3b6c, 0x5ac: 0x39f2, 0x5ad: 0x3b81, 0x5ae: 0x39eb, 0x5af: 0x3b7a, + 0x5b0: 0x39f9, 0x5b1: 0x3b88, 0x5b2: 0x3230, 0x5b3: 0x354b, 0x5b4: 0x3258, 0x5b5: 0x3578, + 0x5b6: 0x3253, 0x5b7: 0x356e, 0x5b8: 0x323f, 0x5b9: 0x355a, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x4804, 0x5c1: 0x480a, 0x5c2: 0x491e, 0x5c3: 0x4936, 0x5c4: 0x4926, 0x5c5: 0x493e, + 0x5c6: 0x492e, 0x5c7: 0x4946, 0x5c8: 0x47aa, 0x5c9: 0x47b0, 0x5ca: 0x488e, 0x5cb: 0x48a6, + 0x5cc: 0x4896, 0x5cd: 0x48ae, 0x5ce: 0x489e, 0x5cf: 0x48b6, 0x5d0: 0x4816, 0x5d1: 0x481c, + 0x5d2: 0x3db8, 0x5d3: 0x3dc8, 0x5d4: 0x3dc0, 0x5d5: 0x3dd0, + 0x5d8: 0x47b6, 0x5d9: 0x47bc, 0x5da: 0x3ce8, 0x5db: 0x3cf8, 0x5dc: 0x3cf0, 0x5dd: 0x3d00, + 0x5e0: 0x482e, 0x5e1: 0x4834, 0x5e2: 0x494e, 0x5e3: 0x4966, + 0x5e4: 0x4956, 0x5e5: 0x496e, 0x5e6: 0x495e, 0x5e7: 0x4976, 0x5e8: 0x47c2, 0x5e9: 0x47c8, + 0x5ea: 0x48be, 0x5eb: 0x48d6, 0x5ec: 0x48c6, 0x5ed: 0x48de, 0x5ee: 0x48ce, 0x5ef: 0x48e6, + 0x5f0: 0x4846, 0x5f1: 0x484c, 0x5f2: 0x3e18, 0x5f3: 0x3e30, 0x5f4: 0x3e20, 0x5f5: 0x3e38, + 0x5f6: 0x3e28, 0x5f7: 0x3e40, 0x5f8: 0x47ce, 0x5f9: 0x47d4, 0x5fa: 0x3d18, 0x5fb: 0x3d30, + 0x5fc: 0x3d20, 0x5fd: 0x3d38, 0x5fe: 0x3d28, 0x5ff: 0x3d40, + // Block 0x18, offset 0x600 + 0x600: 0x4852, 0x601: 0x4858, 0x602: 0x3e48, 0x603: 0x3e58, 0x604: 0x3e50, 0x605: 0x3e60, + 0x608: 0x47da, 0x609: 0x47e0, 0x60a: 0x3d48, 0x60b: 0x3d58, + 0x60c: 0x3d50, 0x60d: 0x3d60, 0x610: 0x4864, 0x611: 0x486a, + 0x612: 0x3e80, 0x613: 0x3e98, 0x614: 0x3e88, 0x615: 0x3ea0, 0x616: 0x3e90, 0x617: 0x3ea8, + 0x619: 0x47e6, 0x61b: 0x3d68, 0x61d: 0x3d70, + 0x61f: 0x3d78, 0x620: 0x487c, 0x621: 0x4882, 0x622: 0x497e, 0x623: 0x4996, + 0x624: 0x4986, 0x625: 0x499e, 0x626: 0x498e, 0x627: 0x49a6, 0x628: 0x47ec, 0x629: 0x47f2, + 0x62a: 0x48ee, 0x62b: 0x4906, 0x62c: 0x48f6, 0x62d: 0x490e, 0x62e: 0x48fe, 0x62f: 0x4916, + 0x630: 0x47f8, 0x631: 0x431e, 0x632: 0x3691, 0x633: 0x4324, 0x634: 0x4822, 0x635: 0x432a, + 0x636: 0x36a3, 0x637: 0x4330, 0x638: 0x36c1, 0x639: 0x4336, 0x63a: 0x36d9, 0x63b: 0x433c, + 0x63c: 0x4870, 0x63d: 0x4342, + // Block 0x19, offset 0x640 + 0x640: 0x3da0, 0x641: 0x3da8, 0x642: 0x4184, 0x643: 0x41a2, 0x644: 0x418e, 0x645: 0x41ac, + 0x646: 0x4198, 0x647: 0x41b6, 0x648: 0x3cd8, 0x649: 0x3ce0, 0x64a: 0x40d0, 0x64b: 0x40ee, + 0x64c: 0x40da, 0x64d: 0x40f8, 0x64e: 0x40e4, 0x64f: 0x4102, 0x650: 0x3de8, 0x651: 0x3df0, + 0x652: 0x41c0, 0x653: 0x41de, 0x654: 0x41ca, 0x655: 0x41e8, 0x656: 0x41d4, 0x657: 0x41f2, + 0x658: 0x3d08, 0x659: 0x3d10, 0x65a: 0x410c, 0x65b: 0x412a, 0x65c: 0x4116, 0x65d: 0x4134, + 0x65e: 0x4120, 0x65f: 0x413e, 0x660: 0x3ec0, 0x661: 0x3ec8, 0x662: 0x41fc, 0x663: 0x421a, + 0x664: 0x4206, 0x665: 0x4224, 0x666: 0x4210, 0x667: 0x422e, 0x668: 0x3d80, 0x669: 0x3d88, + 0x66a: 0x4148, 0x66b: 0x4166, 0x66c: 0x4152, 0x66d: 0x4170, 0x66e: 0x415c, 0x66f: 0x417a, + 0x670: 0x3685, 0x671: 0x367f, 0x672: 0x3d90, 0x673: 0x368b, 0x674: 0x3d98, + 0x676: 0x4810, 0x677: 0x3db0, 0x678: 0x35f5, 0x679: 0x35ef, 0x67a: 0x35e3, 0x67b: 0x42ee, + 0x67c: 0x35fb, 0x67d: 0x4287, 0x67e: 0x01d3, 0x67f: 0x4287, + // Block 0x1a, offset 0x680 + 0x680: 0x42a0, 0x681: 0x4482, 0x682: 0x3dd8, 0x683: 0x369d, 0x684: 0x3de0, + 0x686: 0x483a, 0x687: 0x3df8, 0x688: 0x3601, 0x689: 0x42f4, 0x68a: 0x360d, 0x68b: 0x42fa, + 0x68c: 0x3619, 0x68d: 0x4489, 0x68e: 0x4490, 0x68f: 0x4497, 0x690: 0x36b5, 0x691: 0x36af, + 0x692: 0x3e00, 0x693: 0x44e4, 0x696: 0x36bb, 0x697: 0x3e10, + 0x698: 0x3631, 0x699: 0x362b, 0x69a: 0x361f, 0x69b: 0x4300, 0x69d: 0x449e, + 0x69e: 0x44a5, 0x69f: 0x44ac, 0x6a0: 0x36eb, 0x6a1: 0x36e5, 0x6a2: 0x3e68, 0x6a3: 0x44ec, + 0x6a4: 0x36cd, 0x6a5: 0x36d3, 0x6a6: 0x36f1, 0x6a7: 0x3e78, 0x6a8: 0x3661, 0x6a9: 0x365b, + 0x6aa: 0x364f, 0x6ab: 0x430c, 0x6ac: 0x3649, 0x6ad: 0x4474, 0x6ae: 0x447b, 0x6af: 0x0081, + 0x6b2: 0x3eb0, 0x6b3: 0x36f7, 0x6b4: 0x3eb8, + 0x6b6: 0x4888, 0x6b7: 0x3ed0, 0x6b8: 0x363d, 0x6b9: 0x4306, 0x6ba: 0x366d, 0x6bb: 0x4318, + 0x6bc: 0x3679, 0x6bd: 0x425a, 0x6be: 0x428c, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x1bd8, 0x6c1: 0x1bdc, 0x6c2: 0x0047, 0x6c3: 0x1c54, 0x6c5: 0x1be8, + 0x6c6: 0x1bec, 0x6c7: 0x00e9, 0x6c9: 0x1c58, 0x6ca: 0x008f, 0x6cb: 0x0051, + 0x6cc: 0x0051, 0x6cd: 0x0051, 0x6ce: 0x0091, 0x6cf: 0x00da, 0x6d0: 0x0053, 0x6d1: 0x0053, + 0x6d2: 0x0059, 0x6d3: 0x0099, 0x6d5: 0x005d, 0x6d6: 0x198d, + 0x6d9: 0x0061, 0x6da: 0x0063, 0x6db: 0x0065, 0x6dc: 0x0065, 0x6dd: 0x0065, + 0x6e0: 0x199f, 0x6e1: 0x1bc8, 0x6e2: 0x19a8, + 0x6e4: 0x0075, 0x6e6: 0x01b8, 0x6e8: 0x0075, + 0x6ea: 0x0057, 0x6eb: 0x42d2, 0x6ec: 0x0045, 0x6ed: 0x0047, 0x6ef: 0x008b, + 0x6f0: 0x004b, 0x6f1: 0x004d, 0x6f3: 0x005b, 0x6f4: 0x009f, 0x6f5: 0x0215, + 0x6f6: 0x0218, 0x6f7: 0x021b, 0x6f8: 0x021e, 0x6f9: 0x0093, 0x6fb: 0x1b98, + 0x6fc: 0x01e8, 0x6fd: 0x01c1, 0x6fe: 0x0179, 0x6ff: 0x01a0, + // Block 0x1c, offset 0x700 + 0x700: 0x0463, 0x705: 0x0049, + 0x706: 0x0089, 0x707: 0x008b, 0x708: 0x0093, 0x709: 0x0095, + 0x710: 0x222e, 0x711: 0x223a, + 0x712: 0x22ee, 0x713: 0x2216, 0x714: 0x229a, 0x715: 0x2222, 0x716: 0x22a0, 0x717: 0x22b8, + 0x718: 0x22c4, 0x719: 0x2228, 0x71a: 0x22ca, 0x71b: 0x2234, 0x71c: 0x22be, 0x71d: 0x22d0, + 0x71e: 0x22d6, 0x71f: 0x1cbc, 0x720: 0x0053, 0x721: 0x195a, 0x722: 0x1ba4, 0x723: 0x1963, + 0x724: 0x006d, 0x725: 0x19ab, 0x726: 0x1bd0, 0x727: 0x1d48, 0x728: 0x1966, 0x729: 0x0071, + 0x72a: 0x19b7, 0x72b: 0x1bd4, 0x72c: 0x0059, 0x72d: 0x0047, 0x72e: 0x0049, 0x72f: 0x005b, + 0x730: 0x0093, 0x731: 0x19e4, 0x732: 0x1c18, 0x733: 0x19ed, 0x734: 0x00ad, 0x735: 0x1a62, + 0x736: 0x1c4c, 0x737: 0x1d5c, 0x738: 0x19f0, 0x739: 0x00b1, 0x73a: 0x1a65, 0x73b: 0x1c50, + 0x73c: 0x0099, 0x73d: 0x0087, 0x73e: 0x0089, 0x73f: 0x009b, + // Block 0x1d, offset 0x740 + 0x741: 0x3c06, 0x743: 0xa000, 0x744: 0x3c0d, 0x745: 0xa000, + 0x747: 0x3c14, 0x748: 0xa000, 0x749: 0x3c1b, + 0x74d: 0xa000, + 0x760: 0x2f65, 0x761: 0xa000, 0x762: 0x3c29, + 0x764: 0xa000, 0x765: 0xa000, + 0x76d: 0x3c22, 0x76e: 0x2f60, 0x76f: 0x2f6a, + 0x770: 0x3c30, 0x771: 0x3c37, 0x772: 0xa000, 0x773: 0xa000, 0x774: 0x3c3e, 0x775: 0x3c45, + 0x776: 0xa000, 0x777: 0xa000, 0x778: 0x3c4c, 0x779: 0x3c53, 0x77a: 0xa000, 0x77b: 0xa000, + 0x77c: 0xa000, 0x77d: 0xa000, + // Block 0x1e, offset 0x780 + 0x780: 0x3c5a, 0x781: 0x3c61, 0x782: 0xa000, 0x783: 0xa000, 0x784: 0x3c76, 0x785: 0x3c7d, + 0x786: 0xa000, 0x787: 0xa000, 0x788: 0x3c84, 0x789: 0x3c8b, + 0x791: 0xa000, + 0x792: 0xa000, + 0x7a2: 0xa000, + 0x7a8: 0xa000, 0x7a9: 0xa000, + 0x7ab: 0xa000, 0x7ac: 0x3ca0, 0x7ad: 0x3ca7, 0x7ae: 0x3cae, 0x7af: 0x3cb5, + 0x7b2: 0xa000, 0x7b3: 0xa000, 0x7b4: 0xa000, 0x7b5: 0xa000, + // Block 0x1f, offset 0x7c0 + 0x7e0: 0x0023, 0x7e1: 0x0025, 0x7e2: 0x0027, 0x7e3: 0x0029, + 0x7e4: 0x002b, 0x7e5: 0x002d, 0x7e6: 0x002f, 0x7e7: 0x0031, 0x7e8: 0x0033, 0x7e9: 0x1882, + 0x7ea: 0x1885, 0x7eb: 0x1888, 0x7ec: 0x188b, 0x7ed: 0x188e, 0x7ee: 0x1891, 0x7ef: 0x1894, + 0x7f0: 0x1897, 0x7f1: 0x189a, 0x7f2: 0x189d, 0x7f3: 0x18a6, 0x7f4: 0x1a68, 0x7f5: 0x1a6c, + 0x7f6: 0x1a70, 0x7f7: 0x1a74, 0x7f8: 0x1a78, 0x7f9: 0x1a7c, 0x7fa: 0x1a80, 0x7fb: 0x1a84, + 0x7fc: 0x1a88, 0x7fd: 0x1c80, 0x7fe: 0x1c85, 0x7ff: 0x1c8a, + // Block 0x20, offset 0x800 + 0x800: 0x1c8f, 0x801: 0x1c94, 0x802: 0x1c99, 0x803: 0x1c9e, 0x804: 0x1ca3, 0x805: 0x1ca8, + 0x806: 0x1cad, 0x807: 0x1cb2, 0x808: 0x187f, 0x809: 0x18a3, 0x80a: 0x18c7, 0x80b: 0x18eb, + 0x80c: 0x190f, 0x80d: 0x1918, 0x80e: 0x191e, 0x80f: 0x1924, 0x810: 0x192a, 0x811: 0x1b60, + 0x812: 0x1b64, 0x813: 0x1b68, 0x814: 0x1b6c, 0x815: 0x1b70, 0x816: 0x1b74, 0x817: 0x1b78, + 0x818: 0x1b7c, 0x819: 0x1b80, 0x81a: 0x1b84, 0x81b: 0x1b88, 0x81c: 0x1af4, 0x81d: 0x1af8, + 0x81e: 0x1afc, 0x81f: 0x1b00, 0x820: 0x1b04, 0x821: 0x1b08, 0x822: 0x1b0c, 0x823: 0x1b10, + 0x824: 0x1b14, 0x825: 0x1b18, 0x826: 0x1b1c, 0x827: 0x1b20, 0x828: 0x1b24, 0x829: 0x1b28, + 0x82a: 0x1b2c, 0x82b: 0x1b30, 0x82c: 0x1b34, 0x82d: 0x1b38, 0x82e: 0x1b3c, 0x82f: 0x1b40, + 0x830: 0x1b44, 0x831: 0x1b48, 0x832: 0x1b4c, 0x833: 0x1b50, 0x834: 0x1b54, 0x835: 0x1b58, + 0x836: 0x0043, 0x837: 0x0045, 0x838: 0x0047, 0x839: 0x0049, 0x83a: 0x004b, 0x83b: 0x004d, + 0x83c: 0x004f, 0x83d: 0x0051, 0x83e: 0x0053, 0x83f: 0x0055, + // Block 0x21, offset 0x840 + 0x840: 0x06bf, 0x841: 0x06e3, 0x842: 0x06ef, 0x843: 0x06ff, 0x844: 0x0707, 0x845: 0x0713, + 0x846: 0x071b, 0x847: 0x0723, 0x848: 0x072f, 0x849: 0x0783, 0x84a: 0x079b, 0x84b: 0x07ab, + 0x84c: 0x07bb, 0x84d: 0x07cb, 0x84e: 0x07db, 0x84f: 0x07fb, 0x850: 0x07ff, 0x851: 0x0803, + 0x852: 0x0837, 0x853: 0x085f, 0x854: 0x086f, 0x855: 0x0877, 0x856: 0x087b, 0x857: 0x0887, + 0x858: 0x08a3, 0x859: 0x08a7, 0x85a: 0x08bf, 0x85b: 0x08c3, 0x85c: 0x08cb, 0x85d: 0x08db, + 0x85e: 0x0977, 0x85f: 0x098b, 0x860: 0x09cb, 0x861: 0x09df, 0x862: 0x09e7, 0x863: 0x09eb, + 0x864: 0x09fb, 0x865: 0x0a17, 0x866: 0x0a43, 0x867: 0x0a4f, 0x868: 0x0a6f, 0x869: 0x0a7b, + 0x86a: 0x0a7f, 0x86b: 0x0a83, 0x86c: 0x0a9b, 0x86d: 0x0a9f, 0x86e: 0x0acb, 0x86f: 0x0ad7, + 0x870: 0x0adf, 0x871: 0x0ae7, 0x872: 0x0af7, 0x873: 0x0aff, 0x874: 0x0b07, 0x875: 0x0b33, + 0x876: 0x0b37, 0x877: 0x0b3f, 0x878: 0x0b43, 0x879: 0x0b4b, 0x87a: 0x0b53, 0x87b: 0x0b63, + 0x87c: 0x0b7f, 0x87d: 0x0bf7, 0x87e: 0x0c0b, 0x87f: 0x0c0f, + // Block 0x22, offset 0x880 + 0x880: 0x0c8f, 0x881: 0x0c93, 0x882: 0x0ca7, 0x883: 0x0cab, 0x884: 0x0cb3, 0x885: 0x0cbb, + 0x886: 0x0cc3, 0x887: 0x0ccf, 0x888: 0x0cf7, 0x889: 0x0d07, 0x88a: 0x0d1b, 0x88b: 0x0d8b, + 0x88c: 0x0d97, 0x88d: 0x0da7, 0x88e: 0x0db3, 0x88f: 0x0dbf, 0x890: 0x0dc7, 0x891: 0x0dcb, + 0x892: 0x0dcf, 0x893: 0x0dd3, 0x894: 0x0dd7, 0x895: 0x0e8f, 0x896: 0x0ed7, 0x897: 0x0ee3, + 0x898: 0x0ee7, 0x899: 0x0eeb, 0x89a: 0x0eef, 0x89b: 0x0ef7, 0x89c: 0x0efb, 0x89d: 0x0f0f, + 0x89e: 0x0f2b, 0x89f: 0x0f33, 0x8a0: 0x0f73, 0x8a1: 0x0f77, 0x8a2: 0x0f7f, 0x8a3: 0x0f83, + 0x8a4: 0x0f8b, 0x8a5: 0x0f8f, 0x8a6: 0x0fb3, 0x8a7: 0x0fb7, 0x8a8: 0x0fd3, 0x8a9: 0x0fd7, + 0x8aa: 0x0fdb, 0x8ab: 0x0fdf, 0x8ac: 0x0ff3, 0x8ad: 0x1017, 0x8ae: 0x101b, 0x8af: 0x101f, + 0x8b0: 0x1043, 0x8b1: 0x1083, 0x8b2: 0x1087, 0x8b3: 0x10a7, 0x8b4: 0x10b7, 0x8b5: 0x10bf, + 0x8b6: 0x10df, 0x8b7: 0x1103, 0x8b8: 0x1147, 0x8b9: 0x114f, 0x8ba: 0x1163, 0x8bb: 0x116f, + 0x8bc: 0x1177, 0x8bd: 0x117f, 0x8be: 0x1183, 0x8bf: 0x1187, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x119f, 0x8c1: 0x11a3, 0x8c2: 0x11bf, 0x8c3: 0x11c7, 0x8c4: 0x11cf, 0x8c5: 0x11d3, + 0x8c6: 0x11df, 0x8c7: 0x11e7, 0x8c8: 0x11eb, 0x8c9: 0x11ef, 0x8ca: 0x11f7, 0x8cb: 0x11fb, + 0x8cc: 0x129b, 0x8cd: 0x12af, 0x8ce: 0x12e3, 0x8cf: 0x12e7, 0x8d0: 0x12ef, 0x8d1: 0x131b, + 0x8d2: 0x1323, 0x8d3: 0x132b, 0x8d4: 0x1333, 0x8d5: 0x136f, 0x8d6: 0x1373, 0x8d7: 0x137b, + 0x8d8: 0x137f, 0x8d9: 0x1383, 0x8da: 0x13af, 0x8db: 0x13b3, 0x8dc: 0x13bb, 0x8dd: 0x13cf, + 0x8de: 0x13d3, 0x8df: 0x13ef, 0x8e0: 0x13f7, 0x8e1: 0x13fb, 0x8e2: 0x141f, 0x8e3: 0x143f, + 0x8e4: 0x1453, 0x8e5: 0x1457, 0x8e6: 0x145f, 0x8e7: 0x148b, 0x8e8: 0x148f, 0x8e9: 0x149f, + 0x8ea: 0x14c3, 0x8eb: 0x14cf, 0x8ec: 0x14df, 0x8ed: 0x14f7, 0x8ee: 0x14ff, 0x8ef: 0x1503, + 0x8f0: 0x1507, 0x8f1: 0x150b, 0x8f2: 0x1517, 0x8f3: 0x151b, 0x8f4: 0x1523, 0x8f5: 0x153f, + 0x8f6: 0x1543, 0x8f7: 0x1547, 0x8f8: 0x155f, 0x8f9: 0x1563, 0x8fa: 0x156b, 0x8fb: 0x157f, + 0x8fc: 0x1583, 0x8fd: 0x1587, 0x8fe: 0x158f, 0x8ff: 0x1593, + // Block 0x24, offset 0x900 + 0x906: 0xa000, 0x90b: 0xa000, + 0x90c: 0x3f08, 0x90d: 0xa000, 0x90e: 0x3f10, 0x90f: 0xa000, 0x910: 0x3f18, 0x911: 0xa000, + 0x912: 0x3f20, 0x913: 0xa000, 0x914: 0x3f28, 0x915: 0xa000, 0x916: 0x3f30, 0x917: 0xa000, + 0x918: 0x3f38, 0x919: 0xa000, 0x91a: 0x3f40, 0x91b: 0xa000, 0x91c: 0x3f48, 0x91d: 0xa000, + 0x91e: 0x3f50, 0x91f: 0xa000, 0x920: 0x3f58, 0x921: 0xa000, 0x922: 0x3f60, + 0x924: 0xa000, 0x925: 0x3f68, 0x926: 0xa000, 0x927: 0x3f70, 0x928: 0xa000, 0x929: 0x3f78, + 0x92f: 0xa000, + 0x930: 0x3f80, 0x931: 0x3f88, 0x932: 0xa000, 0x933: 0x3f90, 0x934: 0x3f98, 0x935: 0xa000, + 0x936: 0x3fa0, 0x937: 0x3fa8, 0x938: 0xa000, 0x939: 0x3fb0, 0x93a: 0x3fb8, 0x93b: 0xa000, + 0x93c: 0x3fc0, 0x93d: 0x3fc8, + // Block 0x25, offset 0x940 + 0x954: 0x3f00, + 0x959: 0x9903, 0x95a: 0x9903, 0x95b: 0x42dc, 0x95c: 0x42e2, 0x95d: 0xa000, + 0x95e: 0x3fd0, 0x95f: 0x26b4, + 0x966: 0xa000, + 0x96b: 0xa000, 0x96c: 0x3fe0, 0x96d: 0xa000, 0x96e: 0x3fe8, 0x96f: 0xa000, + 0x970: 0x3ff0, 0x971: 0xa000, 0x972: 0x3ff8, 0x973: 0xa000, 0x974: 0x4000, 0x975: 0xa000, + 0x976: 0x4008, 0x977: 0xa000, 0x978: 0x4010, 0x979: 0xa000, 0x97a: 0x4018, 0x97b: 0xa000, + 0x97c: 0x4020, 0x97d: 0xa000, 0x97e: 0x4028, 0x97f: 0xa000, + // Block 0x26, offset 0x980 + 0x980: 0x4030, 0x981: 0xa000, 0x982: 0x4038, 0x984: 0xa000, 0x985: 0x4040, + 0x986: 0xa000, 0x987: 0x4048, 0x988: 0xa000, 0x989: 0x4050, + 0x98f: 0xa000, 0x990: 0x4058, 0x991: 0x4060, + 0x992: 0xa000, 0x993: 0x4068, 0x994: 0x4070, 0x995: 0xa000, 0x996: 0x4078, 0x997: 0x4080, + 0x998: 0xa000, 0x999: 0x4088, 0x99a: 0x4090, 0x99b: 0xa000, 0x99c: 0x4098, 0x99d: 0x40a0, + 0x9af: 0xa000, + 0x9b0: 0xa000, 0x9b1: 0xa000, 0x9b2: 0xa000, 0x9b4: 0x3fd8, + 0x9b7: 0x40a8, 0x9b8: 0x40b0, 0x9b9: 0x40b8, 0x9ba: 0x40c0, + 0x9bd: 0xa000, 0x9be: 0x40c8, 0x9bf: 0x26c9, + // Block 0x27, offset 0x9c0 + 0x9c0: 0x0367, 0x9c1: 0x032b, 0x9c2: 0x032f, 0x9c3: 0x0333, 0x9c4: 0x037b, 0x9c5: 0x0337, + 0x9c6: 0x033b, 0x9c7: 0x033f, 0x9c8: 0x0343, 0x9c9: 0x0347, 0x9ca: 0x034b, 0x9cb: 0x034f, + 0x9cc: 0x0353, 0x9cd: 0x0357, 0x9ce: 0x035b, 0x9cf: 0x49bd, 0x9d0: 0x49c3, 0x9d1: 0x49c9, + 0x9d2: 0x49cf, 0x9d3: 0x49d5, 0x9d4: 0x49db, 0x9d5: 0x49e1, 0x9d6: 0x49e7, 0x9d7: 0x49ed, + 0x9d8: 0x49f3, 0x9d9: 0x49f9, 0x9da: 0x49ff, 0x9db: 0x4a05, 0x9dc: 0x4a0b, 0x9dd: 0x4a11, + 0x9de: 0x4a17, 0x9df: 0x4a1d, 0x9e0: 0x4a23, 0x9e1: 0x4a29, 0x9e2: 0x4a2f, 0x9e3: 0x4a35, + 0x9e4: 0x03c3, 0x9e5: 0x035f, 0x9e6: 0x0363, 0x9e7: 0x03e7, 0x9e8: 0x03eb, 0x9e9: 0x03ef, + 0x9ea: 0x03f3, 0x9eb: 0x03f7, 0x9ec: 0x03fb, 0x9ed: 0x03ff, 0x9ee: 0x036b, 0x9ef: 0x0403, + 0x9f0: 0x0407, 0x9f1: 0x036f, 0x9f2: 0x0373, 0x9f3: 0x0377, 0x9f4: 0x037f, 0x9f5: 0x0383, + 0x9f6: 0x0387, 0x9f7: 0x038b, 0x9f8: 0x038f, 0x9f9: 0x0393, 0x9fa: 0x0397, 0x9fb: 0x039b, + 0x9fc: 0x039f, 0x9fd: 0x03a3, 0x9fe: 0x03a7, 0x9ff: 0x03ab, + // Block 0x28, offset 0xa00 + 0xa00: 0x03af, 0xa01: 0x03b3, 0xa02: 0x040b, 0xa03: 0x040f, 0xa04: 0x03b7, 0xa05: 0x03bb, + 0xa06: 0x03bf, 0xa07: 0x03c7, 0xa08: 0x03cb, 0xa09: 0x03cf, 0xa0a: 0x03d3, 0xa0b: 0x03d7, + 0xa0c: 0x03db, 0xa0d: 0x03df, 0xa0e: 0x03e3, + 0xa12: 0x06bf, 0xa13: 0x071b, 0xa14: 0x06cb, 0xa15: 0x097b, 0xa16: 0x06cf, 0xa17: 0x06e7, + 0xa18: 0x06d3, 0xa19: 0x0f93, 0xa1a: 0x0707, 0xa1b: 0x06db, 0xa1c: 0x06c3, 0xa1d: 0x09ff, + 0xa1e: 0x098f, 0xa1f: 0x072f, + // Block 0x29, offset 0xa40 + 0xa40: 0x2054, 0xa41: 0x205a, 0xa42: 0x2060, 0xa43: 0x2066, 0xa44: 0x206c, 0xa45: 0x2072, + 0xa46: 0x2078, 0xa47: 0x207e, 0xa48: 0x2084, 0xa49: 0x208a, 0xa4a: 0x2090, 0xa4b: 0x2096, + 0xa4c: 0x209c, 0xa4d: 0x20a2, 0xa4e: 0x2726, 0xa4f: 0x272f, 0xa50: 0x2738, 0xa51: 0x2741, + 0xa52: 0x274a, 0xa53: 0x2753, 0xa54: 0x275c, 0xa55: 0x2765, 0xa56: 0x276e, 0xa57: 0x2780, + 0xa58: 0x2789, 0xa59: 0x2792, 0xa5a: 0x279b, 0xa5b: 0x27a4, 0xa5c: 0x2777, 0xa5d: 0x2bac, + 0xa5e: 0x2aed, 0xa60: 0x20a8, 0xa61: 0x20c0, 0xa62: 0x20b4, 0xa63: 0x2108, + 0xa64: 0x20c6, 0xa65: 0x20e4, 0xa66: 0x20ae, 0xa67: 0x20de, 0xa68: 0x20ba, 0xa69: 0x20f0, + 0xa6a: 0x2120, 0xa6b: 0x213e, 0xa6c: 0x2138, 0xa6d: 0x212c, 0xa6e: 0x217a, 0xa6f: 0x210e, + 0xa70: 0x211a, 0xa71: 0x2132, 0xa72: 0x2126, 0xa73: 0x2150, 0xa74: 0x20fc, 0xa75: 0x2144, + 0xa76: 0x216e, 0xa77: 0x2156, 0xa78: 0x20ea, 0xa79: 0x20cc, 0xa7a: 0x2102, 0xa7b: 0x2114, + 0xa7c: 0x214a, 0xa7d: 0x20d2, 0xa7e: 0x2174, 0xa7f: 0x20f6, + // Block 0x2a, offset 0xa80 + 0xa80: 0x215c, 0xa81: 0x20d8, 0xa82: 0x2162, 0xa83: 0x2168, 0xa84: 0x092f, 0xa85: 0x0b03, + 0xa86: 0x0ca7, 0xa87: 0x10c7, + 0xa90: 0x1bc4, 0xa91: 0x18a9, + 0xa92: 0x18ac, 0xa93: 0x18af, 0xa94: 0x18b2, 0xa95: 0x18b5, 0xa96: 0x18b8, 0xa97: 0x18bb, + 0xa98: 0x18be, 0xa99: 0x18c1, 0xa9a: 0x18ca, 0xa9b: 0x18cd, 0xa9c: 0x18d0, 0xa9d: 0x18d3, + 0xa9e: 0x18d6, 0xa9f: 0x18d9, 0xaa0: 0x0313, 0xaa1: 0x031b, 0xaa2: 0x031f, 0xaa3: 0x0327, + 0xaa4: 0x032b, 0xaa5: 0x032f, 0xaa6: 0x0337, 0xaa7: 0x033f, 0xaa8: 0x0343, 0xaa9: 0x034b, + 0xaaa: 0x034f, 0xaab: 0x0353, 0xaac: 0x0357, 0xaad: 0x035b, 0xaae: 0x2e18, 0xaaf: 0x2e20, + 0xab0: 0x2e28, 0xab1: 0x2e30, 0xab2: 0x2e38, 0xab3: 0x2e40, 0xab4: 0x2e48, 0xab5: 0x2e50, + 0xab6: 0x2e60, 0xab7: 0x2e68, 0xab8: 0x2e70, 0xab9: 0x2e78, 0xaba: 0x2e80, 0xabb: 0x2e88, + 0xabc: 0x2ed3, 0xabd: 0x2e9b, 0xabe: 0x2e58, + // Block 0x2b, offset 0xac0 + 0xac0: 0x06bf, 0xac1: 0x071b, 0xac2: 0x06cb, 0xac3: 0x097b, 0xac4: 0x071f, 0xac5: 0x07af, + 0xac6: 0x06c7, 0xac7: 0x07ab, 0xac8: 0x070b, 0xac9: 0x0887, 0xaca: 0x0d07, 0xacb: 0x0e8f, + 0xacc: 0x0dd7, 0xacd: 0x0d1b, 0xace: 0x145f, 0xacf: 0x098b, 0xad0: 0x0ccf, 0xad1: 0x0d4b, + 0xad2: 0x0d0b, 0xad3: 0x104b, 0xad4: 0x08fb, 0xad5: 0x0f03, 0xad6: 0x1387, 0xad7: 0x105f, + 0xad8: 0x0843, 0xad9: 0x108f, 0xada: 0x0f9b, 0xadb: 0x0a17, 0xadc: 0x140f, 0xadd: 0x077f, + 0xade: 0x08ab, 0xadf: 0x0df7, 0xae0: 0x1527, 0xae1: 0x0743, 0xae2: 0x07d3, 0xae3: 0x0d9b, + 0xae4: 0x06cf, 0xae5: 0x06e7, 0xae6: 0x06d3, 0xae7: 0x0adb, 0xae8: 0x08ef, 0xae9: 0x087f, + 0xaea: 0x0a57, 0xaeb: 0x0a4b, 0xaec: 0x0feb, 0xaed: 0x073f, 0xaee: 0x139b, 0xaef: 0x089b, + 0xaf0: 0x09f3, 0xaf1: 0x18dc, 0xaf2: 0x18df, 0xaf3: 0x18e2, 0xaf4: 0x18e5, 0xaf5: 0x18ee, + 0xaf6: 0x18f1, 0xaf7: 0x18f4, 0xaf8: 0x18f7, 0xaf9: 0x18fa, 0xafa: 0x18fd, 0xafb: 0x1900, + 0xafc: 0x1903, 0xafd: 0x1906, 0xafe: 0x1909, 0xaff: 0x1912, + // Block 0x2c, offset 0xb00 + 0xb00: 0x1cc6, 0xb01: 0x1cd5, 0xb02: 0x1ce4, 0xb03: 0x1cf3, 0xb04: 0x1d02, 0xb05: 0x1d11, + 0xb06: 0x1d20, 0xb07: 0x1d2f, 0xb08: 0x1d3e, 0xb09: 0x218c, 0xb0a: 0x219e, 0xb0b: 0x21b0, + 0xb0c: 0x1954, 0xb0d: 0x1c04, 0xb0e: 0x19d2, 0xb0f: 0x1ba8, 0xb10: 0x04cb, 0xb11: 0x04d3, + 0xb12: 0x04db, 0xb13: 0x04e3, 0xb14: 0x04eb, 0xb15: 0x04ef, 0xb16: 0x04f3, 0xb17: 0x04f7, + 0xb18: 0x04fb, 0xb19: 0x04ff, 0xb1a: 0x0503, 0xb1b: 0x0507, 0xb1c: 0x050b, 0xb1d: 0x050f, + 0xb1e: 0x0513, 0xb1f: 0x0517, 0xb20: 0x051b, 0xb21: 0x0523, 0xb22: 0x0527, 0xb23: 0x052b, + 0xb24: 0x052f, 0xb25: 0x0533, 0xb26: 0x0537, 0xb27: 0x053b, 0xb28: 0x053f, 0xb29: 0x0543, + 0xb2a: 0x0547, 0xb2b: 0x054b, 0xb2c: 0x054f, 0xb2d: 0x0553, 0xb2e: 0x0557, 0xb2f: 0x055b, + 0xb30: 0x055f, 0xb31: 0x0563, 0xb32: 0x0567, 0xb33: 0x056f, 0xb34: 0x0577, 0xb35: 0x057f, + 0xb36: 0x0583, 0xb37: 0x0587, 0xb38: 0x058b, 0xb39: 0x058f, 0xb3a: 0x0593, 0xb3b: 0x0597, + 0xb3c: 0x059b, 0xb3d: 0x059f, 0xb3e: 0x05a3, + // Block 0x2d, offset 0xb40 + 0xb40: 0x2b0c, 0xb41: 0x29a8, 0xb42: 0x2b1c, 0xb43: 0x2880, 0xb44: 0x2ee4, 0xb45: 0x288a, + 0xb46: 0x2894, 0xb47: 0x2f28, 0xb48: 0x29b5, 0xb49: 0x289e, 0xb4a: 0x28a8, 0xb4b: 0x28b2, + 0xb4c: 0x29dc, 0xb4d: 0x29e9, 0xb4e: 0x29c2, 0xb4f: 0x29cf, 0xb50: 0x2ea9, 0xb51: 0x29f6, + 0xb52: 0x2a03, 0xb53: 0x2bbe, 0xb54: 0x26bb, 0xb55: 0x2bd1, 0xb56: 0x2be4, 0xb57: 0x2b2c, + 0xb58: 0x2a10, 0xb59: 0x2bf7, 0xb5a: 0x2c0a, 0xb5b: 0x2a1d, 0xb5c: 0x28bc, 0xb5d: 0x28c6, + 0xb5e: 0x2eb7, 0xb5f: 0x2a2a, 0xb60: 0x2b3c, 0xb61: 0x2ef5, 0xb62: 0x28d0, 0xb63: 0x28da, + 0xb64: 0x2a37, 0xb65: 0x28e4, 0xb66: 0x28ee, 0xb67: 0x26d0, 0xb68: 0x26d7, 0xb69: 0x28f8, + 0xb6a: 0x2902, 0xb6b: 0x2c1d, 0xb6c: 0x2a44, 0xb6d: 0x2b4c, 0xb6e: 0x2c30, 0xb6f: 0x2a51, + 0xb70: 0x2916, 0xb71: 0x290c, 0xb72: 0x2f3c, 0xb73: 0x2a5e, 0xb74: 0x2c43, 0xb75: 0x2920, + 0xb76: 0x2b5c, 0xb77: 0x292a, 0xb78: 0x2a78, 0xb79: 0x2934, 0xb7a: 0x2a85, 0xb7b: 0x2f06, + 0xb7c: 0x2a6b, 0xb7d: 0x2b6c, 0xb7e: 0x2a92, 0xb7f: 0x26de, + // Block 0x2e, offset 0xb80 + 0xb80: 0x2f17, 0xb81: 0x293e, 0xb82: 0x2948, 0xb83: 0x2a9f, 0xb84: 0x2952, 0xb85: 0x295c, + 0xb86: 0x2966, 0xb87: 0x2b7c, 0xb88: 0x2aac, 0xb89: 0x26e5, 0xb8a: 0x2c56, 0xb8b: 0x2e90, + 0xb8c: 0x2b8c, 0xb8d: 0x2ab9, 0xb8e: 0x2ec5, 0xb8f: 0x2970, 0xb90: 0x297a, 0xb91: 0x2ac6, + 0xb92: 0x26ec, 0xb93: 0x2ad3, 0xb94: 0x2b9c, 0xb95: 0x26f3, 0xb96: 0x2c69, 0xb97: 0x2984, + 0xb98: 0x1cb7, 0xb99: 0x1ccb, 0xb9a: 0x1cda, 0xb9b: 0x1ce9, 0xb9c: 0x1cf8, 0xb9d: 0x1d07, + 0xb9e: 0x1d16, 0xb9f: 0x1d25, 0xba0: 0x1d34, 0xba1: 0x1d43, 0xba2: 0x2192, 0xba3: 0x21a4, + 0xba4: 0x21b6, 0xba5: 0x21c2, 0xba6: 0x21ce, 0xba7: 0x21da, 0xba8: 0x21e6, 0xba9: 0x21f2, + 0xbaa: 0x21fe, 0xbab: 0x220a, 0xbac: 0x2246, 0xbad: 0x2252, 0xbae: 0x225e, 0xbaf: 0x226a, + 0xbb0: 0x2276, 0xbb1: 0x1c14, 0xbb2: 0x19c6, 0xbb3: 0x1936, 0xbb4: 0x1be4, 0xbb5: 0x1a47, + 0xbb6: 0x1a56, 0xbb7: 0x19cc, 0xbb8: 0x1bfc, 0xbb9: 0x1c00, 0xbba: 0x1960, 0xbbb: 0x2701, + 0xbbc: 0x270f, 0xbbd: 0x26fa, 0xbbe: 0x2708, 0xbbf: 0x2ae0, + // Block 0x2f, offset 0xbc0 + 0xbc0: 0x1a4a, 0xbc1: 0x1a32, 0xbc2: 0x1c60, 0xbc3: 0x1a1a, 0xbc4: 0x19f3, 0xbc5: 0x1969, + 0xbc6: 0x1978, 0xbc7: 0x1948, 0xbc8: 0x1bf0, 0xbc9: 0x1d52, 0xbca: 0x1a4d, 0xbcb: 0x1a35, + 0xbcc: 0x1c64, 0xbcd: 0x1c70, 0xbce: 0x1a26, 0xbcf: 0x19fc, 0xbd0: 0x1957, 0xbd1: 0x1c1c, + 0xbd2: 0x1bb0, 0xbd3: 0x1b9c, 0xbd4: 0x1bcc, 0xbd5: 0x1c74, 0xbd6: 0x1a29, 0xbd7: 0x19c9, + 0xbd8: 0x19ff, 0xbd9: 0x19de, 0xbda: 0x1a41, 0xbdb: 0x1c78, 0xbdc: 0x1a2c, 0xbdd: 0x19c0, + 0xbde: 0x1a02, 0xbdf: 0x1c3c, 0xbe0: 0x1bf4, 0xbe1: 0x1a14, 0xbe2: 0x1c24, 0xbe3: 0x1c40, + 0xbe4: 0x1bf8, 0xbe5: 0x1a17, 0xbe6: 0x1c28, 0xbe7: 0x22e8, 0xbe8: 0x22fc, 0xbe9: 0x1996, + 0xbea: 0x1c20, 0xbeb: 0x1bb4, 0xbec: 0x1ba0, 0xbed: 0x1c48, 0xbee: 0x2716, 0xbef: 0x27ad, + 0xbf0: 0x1a59, 0xbf1: 0x1a44, 0xbf2: 0x1c7c, 0xbf3: 0x1a2f, 0xbf4: 0x1a50, 0xbf5: 0x1a38, + 0xbf6: 0x1c68, 0xbf7: 0x1a1d, 0xbf8: 0x19f6, 0xbf9: 0x1981, 0xbfa: 0x1a53, 0xbfb: 0x1a3b, + 0xbfc: 0x1c6c, 0xbfd: 0x1a20, 0xbfe: 0x19f9, 0xbff: 0x1984, + // Block 0x30, offset 0xc00 + 0xc00: 0x1c2c, 0xc01: 0x1bb8, 0xc02: 0x1d4d, 0xc03: 0x1939, 0xc04: 0x19ba, 0xc05: 0x19bd, + 0xc06: 0x22f5, 0xc07: 0x1b94, 0xc08: 0x19c3, 0xc09: 0x194b, 0xc0a: 0x19e1, 0xc0b: 0x194e, + 0xc0c: 0x19ea, 0xc0d: 0x196c, 0xc0e: 0x196f, 0xc0f: 0x1a05, 0xc10: 0x1a0b, 0xc11: 0x1a0e, + 0xc12: 0x1c30, 0xc13: 0x1a11, 0xc14: 0x1a23, 0xc15: 0x1c38, 0xc16: 0x1c44, 0xc17: 0x1990, + 0xc18: 0x1d57, 0xc19: 0x1bbc, 0xc1a: 0x1993, 0xc1b: 0x1a5c, 0xc1c: 0x19a5, 0xc1d: 0x19b4, + 0xc1e: 0x22e2, 0xc1f: 0x22dc, 0xc20: 0x1cc1, 0xc21: 0x1cd0, 0xc22: 0x1cdf, 0xc23: 0x1cee, + 0xc24: 0x1cfd, 0xc25: 0x1d0c, 0xc26: 0x1d1b, 0xc27: 0x1d2a, 0xc28: 0x1d39, 0xc29: 0x2186, + 0xc2a: 0x2198, 0xc2b: 0x21aa, 0xc2c: 0x21bc, 0xc2d: 0x21c8, 0xc2e: 0x21d4, 0xc2f: 0x21e0, + 0xc30: 0x21ec, 0xc31: 0x21f8, 0xc32: 0x2204, 0xc33: 0x2240, 0xc34: 0x224c, 0xc35: 0x2258, + 0xc36: 0x2264, 0xc37: 0x2270, 0xc38: 0x227c, 0xc39: 0x2282, 0xc3a: 0x2288, 0xc3b: 0x228e, + 0xc3c: 0x2294, 0xc3d: 0x22a6, 0xc3e: 0x22ac, 0xc3f: 0x1c10, + // Block 0x31, offset 0xc40 + 0xc40: 0x1377, 0xc41: 0x0cfb, 0xc42: 0x13d3, 0xc43: 0x139f, 0xc44: 0x0e57, 0xc45: 0x06eb, + 0xc46: 0x08df, 0xc47: 0x162b, 0xc48: 0x162b, 0xc49: 0x0a0b, 0xc4a: 0x145f, 0xc4b: 0x0943, + 0xc4c: 0x0a07, 0xc4d: 0x0bef, 0xc4e: 0x0fcf, 0xc4f: 0x115f, 0xc50: 0x1297, 0xc51: 0x12d3, + 0xc52: 0x1307, 0xc53: 0x141b, 0xc54: 0x0d73, 0xc55: 0x0dff, 0xc56: 0x0eab, 0xc57: 0x0f43, + 0xc58: 0x125f, 0xc59: 0x1447, 0xc5a: 0x1573, 0xc5b: 0x070f, 0xc5c: 0x08b3, 0xc5d: 0x0d87, + 0xc5e: 0x0ecf, 0xc5f: 0x1293, 0xc60: 0x15c3, 0xc61: 0x0ab3, 0xc62: 0x0e77, 0xc63: 0x1283, + 0xc64: 0x1317, 0xc65: 0x0c23, 0xc66: 0x11bb, 0xc67: 0x12df, 0xc68: 0x0b1f, 0xc69: 0x0d0f, + 0xc6a: 0x0e17, 0xc6b: 0x0f1b, 0xc6c: 0x1427, 0xc6d: 0x074f, 0xc6e: 0x07e7, 0xc6f: 0x0853, + 0xc70: 0x0c8b, 0xc71: 0x0d7f, 0xc72: 0x0ecb, 0xc73: 0x0fef, 0xc74: 0x1177, 0xc75: 0x128b, + 0xc76: 0x12a3, 0xc77: 0x13c7, 0xc78: 0x14ef, 0xc79: 0x15a3, 0xc7a: 0x15bf, 0xc7b: 0x102b, + 0xc7c: 0x106b, 0xc7d: 0x1123, 0xc7e: 0x1243, 0xc7f: 0x147b, + // Block 0x32, offset 0xc80 + 0xc80: 0x15cb, 0xc81: 0x134b, 0xc82: 0x09c7, 0xc83: 0x0b3b, 0xc84: 0x10db, 0xc85: 0x119b, + 0xc86: 0x0eff, 0xc87: 0x1033, 0xc88: 0x1397, 0xc89: 0x14e7, 0xc8a: 0x09c3, 0xc8b: 0x0a8f, + 0xc8c: 0x0d77, 0xc8d: 0x0e2b, 0xc8e: 0x0e5f, 0xc8f: 0x1113, 0xc90: 0x113b, 0xc91: 0x14a7, + 0xc92: 0x084f, 0xc93: 0x11a7, 0xc94: 0x07f3, 0xc95: 0x07ef, 0xc96: 0x1097, 0xc97: 0x1127, + 0xc98: 0x125b, 0xc99: 0x14af, 0xc9a: 0x1367, 0xc9b: 0x0c27, 0xc9c: 0x0d73, 0xc9d: 0x1357, + 0xc9e: 0x06f7, 0xc9f: 0x0a63, 0xca0: 0x0b93, 0xca1: 0x0f2f, 0xca2: 0x0faf, 0xca3: 0x0873, + 0xca4: 0x103b, 0xca5: 0x075f, 0xca6: 0x0b77, 0xca7: 0x06d7, 0xca8: 0x0deb, 0xca9: 0x0ca3, + 0xcaa: 0x110f, 0xcab: 0x08c7, 0xcac: 0x09b3, 0xcad: 0x0ffb, 0xcae: 0x1263, 0xcaf: 0x133b, + 0xcb0: 0x0db7, 0xcb1: 0x13f7, 0xcb2: 0x0de3, 0xcb3: 0x0c37, 0xcb4: 0x121b, 0xcb5: 0x0c57, + 0xcb6: 0x0fab, 0xcb7: 0x072b, 0xcb8: 0x07a7, 0xcb9: 0x07eb, 0xcba: 0x0d53, 0xcbb: 0x10fb, + 0xcbc: 0x11f3, 0xcbd: 0x1347, 0xcbe: 0x145b, 0xcbf: 0x085b, + // Block 0x33, offset 0xcc0 + 0xcc0: 0x090f, 0xcc1: 0x0a17, 0xcc2: 0x0b2f, 0xcc3: 0x0cbf, 0xcc4: 0x0e7b, 0xcc5: 0x103f, + 0xcc6: 0x1497, 0xcc7: 0x157b, 0xcc8: 0x15cf, 0xcc9: 0x15e7, 0xcca: 0x0837, 0xccb: 0x0cf3, + 0xccc: 0x0da3, 0xccd: 0x13eb, 0xcce: 0x0afb, 0xccf: 0x0bd7, 0xcd0: 0x0bf3, 0xcd1: 0x0c83, + 0xcd2: 0x0e6b, 0xcd3: 0x0eb7, 0xcd4: 0x0f67, 0xcd5: 0x108b, 0xcd6: 0x112f, 0xcd7: 0x1193, + 0xcd8: 0x13db, 0xcd9: 0x126b, 0xcda: 0x1403, 0xcdb: 0x147f, 0xcdc: 0x080f, 0xcdd: 0x083b, + 0xcde: 0x0923, 0xcdf: 0x0ea7, 0xce0: 0x12f3, 0xce1: 0x133b, 0xce2: 0x0b1b, 0xce3: 0x0b8b, + 0xce4: 0x0c4f, 0xce5: 0x0daf, 0xce6: 0x10d7, 0xce7: 0x0f23, 0xce8: 0x073b, 0xce9: 0x097f, + 0xcea: 0x0a63, 0xceb: 0x0ac7, 0xcec: 0x0b97, 0xced: 0x0f3f, 0xcee: 0x0f5b, 0xcef: 0x116b, + 0xcf0: 0x118b, 0xcf1: 0x1463, 0xcf2: 0x14e3, 0xcf3: 0x14f3, 0xcf4: 0x152f, 0xcf5: 0x0753, + 0xcf6: 0x107f, 0xcf7: 0x144f, 0xcf8: 0x14cb, 0xcf9: 0x0baf, 0xcfa: 0x0717, 0xcfb: 0x0777, + 0xcfc: 0x0a67, 0xcfd: 0x0a87, 0xcfe: 0x0caf, 0xcff: 0x0d73, + // Block 0x34, offset 0xd00 + 0xd00: 0x0ec3, 0xd01: 0x0fcb, 0xd02: 0x1277, 0xd03: 0x1417, 0xd04: 0x1623, 0xd05: 0x0ce3, + 0xd06: 0x14a3, 0xd07: 0x0833, 0xd08: 0x0d2f, 0xd09: 0x0d3b, 0xd0a: 0x0e0f, 0xd0b: 0x0e47, + 0xd0c: 0x0f4b, 0xd0d: 0x0fa7, 0xd0e: 0x1027, 0xd0f: 0x110b, 0xd10: 0x153b, 0xd11: 0x07af, + 0xd12: 0x0c03, 0xd13: 0x14b3, 0xd14: 0x0767, 0xd15: 0x0aab, 0xd16: 0x0e2f, 0xd17: 0x13df, + 0xd18: 0x0b67, 0xd19: 0x0bb7, 0xd1a: 0x0d43, 0xd1b: 0x0f2f, 0xd1c: 0x14bb, 0xd1d: 0x0817, + 0xd1e: 0x08ff, 0xd1f: 0x0a97, 0xd20: 0x0cd3, 0xd21: 0x0d1f, 0xd22: 0x0d5f, 0xd23: 0x0df3, + 0xd24: 0x0f47, 0xd25: 0x0fbb, 0xd26: 0x1157, 0xd27: 0x12f7, 0xd28: 0x1303, 0xd29: 0x1457, + 0xd2a: 0x14d7, 0xd2b: 0x0883, 0xd2c: 0x0e4b, 0xd2d: 0x0903, 0xd2e: 0x0ec7, 0xd2f: 0x0f6b, + 0xd30: 0x1287, 0xd31: 0x14bf, 0xd32: 0x15ab, 0xd33: 0x15d3, 0xd34: 0x0d37, 0xd35: 0x0e27, + 0xd36: 0x11c3, 0xd37: 0x10b7, 0xd38: 0x10c3, 0xd39: 0x10e7, 0xd3a: 0x0f17, 0xd3b: 0x0e9f, + 0xd3c: 0x1363, 0xd3d: 0x0733, 0xd3e: 0x122b, 0xd3f: 0x081b, + // Block 0x35, offset 0xd40 + 0xd40: 0x080b, 0xd41: 0x0b0b, 0xd42: 0x0c2b, 0xd43: 0x10f3, 0xd44: 0x0a53, 0xd45: 0x0e03, + 0xd46: 0x0cef, 0xd47: 0x13e7, 0xd48: 0x12e7, 0xd49: 0x14ab, 0xd4a: 0x1323, 0xd4b: 0x0b27, + 0xd4c: 0x0787, 0xd4d: 0x095b, 0xd50: 0x09af, + 0xd52: 0x0cdf, 0xd55: 0x07f7, 0xd56: 0x0f1f, 0xd57: 0x0fe3, + 0xd58: 0x1047, 0xd59: 0x1063, 0xd5a: 0x1067, 0xd5b: 0x107b, 0xd5c: 0x14fb, 0xd5d: 0x10eb, + 0xd5e: 0x116f, 0xd60: 0x128f, 0xd62: 0x1353, + 0xd65: 0x1407, 0xd66: 0x1433, + 0xd6a: 0x154f, 0xd6b: 0x1553, 0xd6c: 0x1557, 0xd6d: 0x15bb, 0xd6e: 0x142b, 0xd6f: 0x14c7, + 0xd70: 0x0757, 0xd71: 0x077b, 0xd72: 0x078f, 0xd73: 0x084b, 0xd74: 0x0857, 0xd75: 0x0897, + 0xd76: 0x094b, 0xd77: 0x0967, 0xd78: 0x096f, 0xd79: 0x09ab, 0xd7a: 0x09b7, 0xd7b: 0x0a93, + 0xd7c: 0x0a9b, 0xd7d: 0x0ba3, 0xd7e: 0x0bcb, 0xd7f: 0x0bd3, + // Block 0x36, offset 0xd80 + 0xd80: 0x0beb, 0xd81: 0x0c97, 0xd82: 0x0cc7, 0xd83: 0x0ce7, 0xd84: 0x0d57, 0xd85: 0x0e1b, + 0xd86: 0x0e37, 0xd87: 0x0e67, 0xd88: 0x0ebb, 0xd89: 0x0edb, 0xd8a: 0x0f4f, 0xd8b: 0x102f, + 0xd8c: 0x104b, 0xd8d: 0x1053, 0xd8e: 0x104f, 0xd8f: 0x1057, 0xd90: 0x105b, 0xd91: 0x105f, + 0xd92: 0x1073, 0xd93: 0x1077, 0xd94: 0x109b, 0xd95: 0x10af, 0xd96: 0x10cb, 0xd97: 0x112f, + 0xd98: 0x1137, 0xd99: 0x113f, 0xd9a: 0x1153, 0xd9b: 0x117b, 0xd9c: 0x11cb, 0xd9d: 0x11ff, + 0xd9e: 0x11ff, 0xd9f: 0x1267, 0xda0: 0x130f, 0xda1: 0x1327, 0xda2: 0x135b, 0xda3: 0x135f, + 0xda4: 0x13a3, 0xda5: 0x13a7, 0xda6: 0x13ff, 0xda7: 0x1407, 0xda8: 0x14db, 0xda9: 0x151f, + 0xdaa: 0x1537, 0xdab: 0x0b9b, 0xdac: 0x171e, 0xdad: 0x11e3, + 0xdb0: 0x06df, 0xdb1: 0x07e3, 0xdb2: 0x07a3, 0xdb3: 0x074b, 0xdb4: 0x078b, 0xdb5: 0x07b7, + 0xdb6: 0x0847, 0xdb7: 0x0863, 0xdb8: 0x094b, 0xdb9: 0x0937, 0xdba: 0x0947, 0xdbb: 0x0963, + 0xdbc: 0x09af, 0xdbd: 0x09bf, 0xdbe: 0x0a03, 0xdbf: 0x0a0f, + // Block 0x37, offset 0xdc0 + 0xdc0: 0x0a2b, 0xdc1: 0x0a3b, 0xdc2: 0x0b23, 0xdc3: 0x0b2b, 0xdc4: 0x0b5b, 0xdc5: 0x0b7b, + 0xdc6: 0x0bab, 0xdc7: 0x0bc3, 0xdc8: 0x0bb3, 0xdc9: 0x0bd3, 0xdca: 0x0bc7, 0xdcb: 0x0beb, + 0xdcc: 0x0c07, 0xdcd: 0x0c5f, 0xdce: 0x0c6b, 0xdcf: 0x0c73, 0xdd0: 0x0c9b, 0xdd1: 0x0cdf, + 0xdd2: 0x0d0f, 0xdd3: 0x0d13, 0xdd4: 0x0d27, 0xdd5: 0x0da7, 0xdd6: 0x0db7, 0xdd7: 0x0e0f, + 0xdd8: 0x0e5b, 0xdd9: 0x0e53, 0xdda: 0x0e67, 0xddb: 0x0e83, 0xddc: 0x0ebb, 0xddd: 0x1013, + 0xdde: 0x0edf, 0xddf: 0x0f13, 0xde0: 0x0f1f, 0xde1: 0x0f5f, 0xde2: 0x0f7b, 0xde3: 0x0f9f, + 0xde4: 0x0fc3, 0xde5: 0x0fc7, 0xde6: 0x0fe3, 0xde7: 0x0fe7, 0xde8: 0x0ff7, 0xde9: 0x100b, + 0xdea: 0x1007, 0xdeb: 0x1037, 0xdec: 0x10b3, 0xded: 0x10cb, 0xdee: 0x10e3, 0xdef: 0x111b, + 0xdf0: 0x112f, 0xdf1: 0x114b, 0xdf2: 0x117b, 0xdf3: 0x122f, 0xdf4: 0x1257, 0xdf5: 0x12cb, + 0xdf6: 0x1313, 0xdf7: 0x131f, 0xdf8: 0x1327, 0xdf9: 0x133f, 0xdfa: 0x1353, 0xdfb: 0x1343, + 0xdfc: 0x135b, 0xdfd: 0x1357, 0xdfe: 0x134f, 0xdff: 0x135f, + // Block 0x38, offset 0xe00 + 0xe00: 0x136b, 0xe01: 0x13a7, 0xe02: 0x13e3, 0xe03: 0x1413, 0xe04: 0x144b, 0xe05: 0x146b, + 0xe06: 0x14b7, 0xe07: 0x14db, 0xe08: 0x14fb, 0xe09: 0x150f, 0xe0a: 0x151f, 0xe0b: 0x152b, + 0xe0c: 0x1537, 0xe0d: 0x158b, 0xe0e: 0x162b, 0xe0f: 0x16b5, 0xe10: 0x16b0, 0xe11: 0x16e2, + 0xe12: 0x0607, 0xe13: 0x062f, 0xe14: 0x0633, 0xe15: 0x1764, 0xe16: 0x1791, 0xe17: 0x1809, + 0xe18: 0x1617, 0xe19: 0x1627, + // Block 0x39, offset 0xe40 + 0xe40: 0x19d5, 0xe41: 0x19d8, 0xe42: 0x19db, 0xe43: 0x1c08, 0xe44: 0x1c0c, 0xe45: 0x1a5f, + 0xe46: 0x1a5f, + 0xe53: 0x1d75, 0xe54: 0x1d66, 0xe55: 0x1d6b, 0xe56: 0x1d7a, 0xe57: 0x1d70, + 0xe5d: 0x4390, + 0xe5e: 0x8115, 0xe5f: 0x4402, 0xe60: 0x022d, 0xe61: 0x0215, 0xe62: 0x021e, 0xe63: 0x0221, + 0xe64: 0x0224, 0xe65: 0x0227, 0xe66: 0x022a, 0xe67: 0x0230, 0xe68: 0x0233, 0xe69: 0x0017, + 0xe6a: 0x43f0, 0xe6b: 0x43f6, 0xe6c: 0x44f4, 0xe6d: 0x44fc, 0xe6e: 0x4348, 0xe6f: 0x434e, + 0xe70: 0x4354, 0xe71: 0x435a, 0xe72: 0x4366, 0xe73: 0x436c, 0xe74: 0x4372, 0xe75: 0x437e, + 0xe76: 0x4384, 0xe78: 0x438a, 0xe79: 0x4396, 0xe7a: 0x439c, 0xe7b: 0x43a2, + 0xe7c: 0x43ae, 0xe7e: 0x43b4, + // Block 0x3a, offset 0xe80 + 0xe80: 0x43ba, 0xe81: 0x43c0, 0xe83: 0x43c6, 0xe84: 0x43cc, + 0xe86: 0x43d8, 0xe87: 0x43de, 0xe88: 0x43e4, 0xe89: 0x43ea, 0xe8a: 0x43fc, 0xe8b: 0x4378, + 0xe8c: 0x4360, 0xe8d: 0x43a8, 0xe8e: 0x43d2, 0xe8f: 0x1d7f, 0xe90: 0x0299, 0xe91: 0x0299, + 0xe92: 0x02a2, 0xe93: 0x02a2, 0xe94: 0x02a2, 0xe95: 0x02a2, 0xe96: 0x02a5, 0xe97: 0x02a5, + 0xe98: 0x02a5, 0xe99: 0x02a5, 0xe9a: 0x02ab, 0xe9b: 0x02ab, 0xe9c: 0x02ab, 0xe9d: 0x02ab, + 0xe9e: 0x029f, 0xe9f: 0x029f, 0xea0: 0x029f, 0xea1: 0x029f, 0xea2: 0x02a8, 0xea3: 0x02a8, + 0xea4: 0x02a8, 0xea5: 0x02a8, 0xea6: 0x029c, 0xea7: 0x029c, 0xea8: 0x029c, 0xea9: 0x029c, + 0xeaa: 0x02cf, 0xeab: 0x02cf, 0xeac: 0x02cf, 0xead: 0x02cf, 0xeae: 0x02d2, 0xeaf: 0x02d2, + 0xeb0: 0x02d2, 0xeb1: 0x02d2, 0xeb2: 0x02b1, 0xeb3: 0x02b1, 0xeb4: 0x02b1, 0xeb5: 0x02b1, + 0xeb6: 0x02ae, 0xeb7: 0x02ae, 0xeb8: 0x02ae, 0xeb9: 0x02ae, 0xeba: 0x02b4, 0xebb: 0x02b4, + 0xebc: 0x02b4, 0xebd: 0x02b4, 0xebe: 0x02b7, 0xebf: 0x02b7, + // Block 0x3b, offset 0xec0 + 0xec0: 0x02b7, 0xec1: 0x02b7, 0xec2: 0x02c0, 0xec3: 0x02c0, 0xec4: 0x02bd, 0xec5: 0x02bd, + 0xec6: 0x02c3, 0xec7: 0x02c3, 0xec8: 0x02ba, 0xec9: 0x02ba, 0xeca: 0x02c9, 0xecb: 0x02c9, + 0xecc: 0x02c6, 0xecd: 0x02c6, 0xece: 0x02d5, 0xecf: 0x02d5, 0xed0: 0x02d5, 0xed1: 0x02d5, + 0xed2: 0x02db, 0xed3: 0x02db, 0xed4: 0x02db, 0xed5: 0x02db, 0xed6: 0x02e1, 0xed7: 0x02e1, + 0xed8: 0x02e1, 0xed9: 0x02e1, 0xeda: 0x02de, 0xedb: 0x02de, 0xedc: 0x02de, 0xedd: 0x02de, + 0xede: 0x02e4, 0xedf: 0x02e4, 0xee0: 0x02e7, 0xee1: 0x02e7, 0xee2: 0x02e7, 0xee3: 0x02e7, + 0xee4: 0x446e, 0xee5: 0x446e, 0xee6: 0x02ed, 0xee7: 0x02ed, 0xee8: 0x02ed, 0xee9: 0x02ed, + 0xeea: 0x02ea, 0xeeb: 0x02ea, 0xeec: 0x02ea, 0xeed: 0x02ea, 0xeee: 0x0308, 0xeef: 0x0308, + 0xef0: 0x4468, 0xef1: 0x4468, + // Block 0x3c, offset 0xf00 + 0xf13: 0x02d8, 0xf14: 0x02d8, 0xf15: 0x02d8, 0xf16: 0x02d8, 0xf17: 0x02f6, + 0xf18: 0x02f6, 0xf19: 0x02f3, 0xf1a: 0x02f3, 0xf1b: 0x02f9, 0xf1c: 0x02f9, 0xf1d: 0x204f, + 0xf1e: 0x02ff, 0xf1f: 0x02ff, 0xf20: 0x02f0, 0xf21: 0x02f0, 0xf22: 0x02fc, 0xf23: 0x02fc, + 0xf24: 0x0305, 0xf25: 0x0305, 0xf26: 0x0305, 0xf27: 0x0305, 0xf28: 0x028d, 0xf29: 0x028d, + 0xf2a: 0x25aa, 0xf2b: 0x25aa, 0xf2c: 0x261a, 0xf2d: 0x261a, 0xf2e: 0x25e9, 0xf2f: 0x25e9, + 0xf30: 0x2605, 0xf31: 0x2605, 0xf32: 0x25fe, 0xf33: 0x25fe, 0xf34: 0x260c, 0xf35: 0x260c, + 0xf36: 0x2613, 0xf37: 0x2613, 0xf38: 0x2613, 0xf39: 0x25f0, 0xf3a: 0x25f0, 0xf3b: 0x25f0, + 0xf3c: 0x0302, 0xf3d: 0x0302, 0xf3e: 0x0302, 0xf3f: 0x0302, + // Block 0x3d, offset 0xf40 + 0xf40: 0x25b1, 0xf41: 0x25b8, 0xf42: 0x25d4, 0xf43: 0x25f0, 0xf44: 0x25f7, 0xf45: 0x1d89, + 0xf46: 0x1d8e, 0xf47: 0x1d93, 0xf48: 0x1da2, 0xf49: 0x1db1, 0xf4a: 0x1db6, 0xf4b: 0x1dbb, + 0xf4c: 0x1dc0, 0xf4d: 0x1dc5, 0xf4e: 0x1dd4, 0xf4f: 0x1de3, 0xf50: 0x1de8, 0xf51: 0x1ded, + 0xf52: 0x1dfc, 0xf53: 0x1e0b, 0xf54: 0x1e10, 0xf55: 0x1e15, 0xf56: 0x1e1a, 0xf57: 0x1e29, + 0xf58: 0x1e2e, 0xf59: 0x1e3d, 0xf5a: 0x1e42, 0xf5b: 0x1e47, 0xf5c: 0x1e56, 0xf5d: 0x1e5b, + 0xf5e: 0x1e60, 0xf5f: 0x1e6a, 0xf60: 0x1ea6, 0xf61: 0x1eb5, 0xf62: 0x1ec4, 0xf63: 0x1ec9, + 0xf64: 0x1ece, 0xf65: 0x1ed8, 0xf66: 0x1ee7, 0xf67: 0x1eec, 0xf68: 0x1efb, 0xf69: 0x1f00, + 0xf6a: 0x1f05, 0xf6b: 0x1f14, 0xf6c: 0x1f19, 0xf6d: 0x1f28, 0xf6e: 0x1f2d, 0xf6f: 0x1f32, + 0xf70: 0x1f37, 0xf71: 0x1f3c, 0xf72: 0x1f41, 0xf73: 0x1f46, 0xf74: 0x1f4b, 0xf75: 0x1f50, + 0xf76: 0x1f55, 0xf77: 0x1f5a, 0xf78: 0x1f5f, 0xf79: 0x1f64, 0xf7a: 0x1f69, 0xf7b: 0x1f6e, + 0xf7c: 0x1f73, 0xf7d: 0x1f78, 0xf7e: 0x1f7d, 0xf7f: 0x1f87, + // Block 0x3e, offset 0xf80 + 0xf80: 0x1f8c, 0xf81: 0x1f91, 0xf82: 0x1f96, 0xf83: 0x1fa0, 0xf84: 0x1fa5, 0xf85: 0x1faf, + 0xf86: 0x1fb4, 0xf87: 0x1fb9, 0xf88: 0x1fbe, 0xf89: 0x1fc3, 0xf8a: 0x1fc8, 0xf8b: 0x1fcd, + 0xf8c: 0x1fd2, 0xf8d: 0x1fd7, 0xf8e: 0x1fe6, 0xf8f: 0x1ff5, 0xf90: 0x1ffa, 0xf91: 0x1fff, + 0xf92: 0x2004, 0xf93: 0x2009, 0xf94: 0x200e, 0xf95: 0x2018, 0xf96: 0x201d, 0xf97: 0x2022, + 0xf98: 0x2031, 0xf99: 0x2040, 0xf9a: 0x2045, 0xf9b: 0x4420, 0xf9c: 0x4426, 0xf9d: 0x445c, + 0xf9e: 0x44b3, 0xf9f: 0x44ba, 0xfa0: 0x44c1, 0xfa1: 0x44c8, 0xfa2: 0x44cf, 0xfa3: 0x44d6, + 0xfa4: 0x25c6, 0xfa5: 0x25cd, 0xfa6: 0x25d4, 0xfa7: 0x25db, 0xfa8: 0x25f0, 0xfa9: 0x25f7, + 0xfaa: 0x1d98, 0xfab: 0x1d9d, 0xfac: 0x1da2, 0xfad: 0x1da7, 0xfae: 0x1db1, 0xfaf: 0x1db6, + 0xfb0: 0x1dca, 0xfb1: 0x1dcf, 0xfb2: 0x1dd4, 0xfb3: 0x1dd9, 0xfb4: 0x1de3, 0xfb5: 0x1de8, + 0xfb6: 0x1df2, 0xfb7: 0x1df7, 0xfb8: 0x1dfc, 0xfb9: 0x1e01, 0xfba: 0x1e0b, 0xfbb: 0x1e10, + 0xfbc: 0x1f3c, 0xfbd: 0x1f41, 0xfbe: 0x1f50, 0xfbf: 0x1f55, + // Block 0x3f, offset 0xfc0 + 0xfc0: 0x1f5a, 0xfc1: 0x1f6e, 0xfc2: 0x1f73, 0xfc3: 0x1f78, 0xfc4: 0x1f7d, 0xfc5: 0x1f96, + 0xfc6: 0x1fa0, 0xfc7: 0x1fa5, 0xfc8: 0x1faa, 0xfc9: 0x1fbe, 0xfca: 0x1fdc, 0xfcb: 0x1fe1, + 0xfcc: 0x1fe6, 0xfcd: 0x1feb, 0xfce: 0x1ff5, 0xfcf: 0x1ffa, 0xfd0: 0x445c, 0xfd1: 0x2027, + 0xfd2: 0x202c, 0xfd3: 0x2031, 0xfd4: 0x2036, 0xfd5: 0x2040, 0xfd6: 0x2045, 0xfd7: 0x25b1, + 0xfd8: 0x25b8, 0xfd9: 0x25bf, 0xfda: 0x25d4, 0xfdb: 0x25e2, 0xfdc: 0x1d89, 0xfdd: 0x1d8e, + 0xfde: 0x1d93, 0xfdf: 0x1da2, 0xfe0: 0x1dac, 0xfe1: 0x1dbb, 0xfe2: 0x1dc0, 0xfe3: 0x1dc5, + 0xfe4: 0x1dd4, 0xfe5: 0x1dde, 0xfe6: 0x1dfc, 0xfe7: 0x1e15, 0xfe8: 0x1e1a, 0xfe9: 0x1e29, + 0xfea: 0x1e2e, 0xfeb: 0x1e3d, 0xfec: 0x1e47, 0xfed: 0x1e56, 0xfee: 0x1e5b, 0xfef: 0x1e60, + 0xff0: 0x1e6a, 0xff1: 0x1ea6, 0xff2: 0x1eab, 0xff3: 0x1eb5, 0xff4: 0x1ec4, 0xff5: 0x1ec9, + 0xff6: 0x1ece, 0xff7: 0x1ed8, 0xff8: 0x1ee7, 0xff9: 0x1efb, 0xffa: 0x1f00, 0xffb: 0x1f05, + 0xffc: 0x1f14, 0xffd: 0x1f19, 0xffe: 0x1f28, 0xfff: 0x1f2d, + // Block 0x40, offset 0x1000 + 0x1000: 0x1f32, 0x1001: 0x1f37, 0x1002: 0x1f46, 0x1003: 0x1f4b, 0x1004: 0x1f5f, 0x1005: 0x1f64, + 0x1006: 0x1f69, 0x1007: 0x1f6e, 0x1008: 0x1f73, 0x1009: 0x1f87, 0x100a: 0x1f8c, 0x100b: 0x1f91, + 0x100c: 0x1f96, 0x100d: 0x1f9b, 0x100e: 0x1faf, 0x100f: 0x1fb4, 0x1010: 0x1fb9, 0x1011: 0x1fbe, + 0x1012: 0x1fcd, 0x1013: 0x1fd2, 0x1014: 0x1fd7, 0x1015: 0x1fe6, 0x1016: 0x1ff0, 0x1017: 0x1fff, + 0x1018: 0x2004, 0x1019: 0x4450, 0x101a: 0x2018, 0x101b: 0x201d, 0x101c: 0x2022, 0x101d: 0x2031, + 0x101e: 0x203b, 0x101f: 0x25d4, 0x1020: 0x25e2, 0x1021: 0x1da2, 0x1022: 0x1dac, 0x1023: 0x1dd4, + 0x1024: 0x1dde, 0x1025: 0x1dfc, 0x1026: 0x1e06, 0x1027: 0x1e6a, 0x1028: 0x1e6f, 0x1029: 0x1e92, + 0x102a: 0x1e97, 0x102b: 0x1f6e, 0x102c: 0x1f73, 0x102d: 0x1f96, 0x102e: 0x1fe6, 0x102f: 0x1ff0, + 0x1030: 0x2031, 0x1031: 0x203b, 0x1032: 0x4504, 0x1033: 0x450c, 0x1034: 0x4514, 0x1035: 0x1ef1, + 0x1036: 0x1ef6, 0x1037: 0x1f0a, 0x1038: 0x1f0f, 0x1039: 0x1f1e, 0x103a: 0x1f23, 0x103b: 0x1e74, + 0x103c: 0x1e79, 0x103d: 0x1e9c, 0x103e: 0x1ea1, 0x103f: 0x1e33, + // Block 0x41, offset 0x1040 + 0x1040: 0x1e38, 0x1041: 0x1e1f, 0x1042: 0x1e24, 0x1043: 0x1e4c, 0x1044: 0x1e51, 0x1045: 0x1eba, + 0x1046: 0x1ebf, 0x1047: 0x1edd, 0x1048: 0x1ee2, 0x1049: 0x1e7e, 0x104a: 0x1e83, 0x104b: 0x1e88, + 0x104c: 0x1e92, 0x104d: 0x1e8d, 0x104e: 0x1e65, 0x104f: 0x1eb0, 0x1050: 0x1ed3, 0x1051: 0x1ef1, + 0x1052: 0x1ef6, 0x1053: 0x1f0a, 0x1054: 0x1f0f, 0x1055: 0x1f1e, 0x1056: 0x1f23, 0x1057: 0x1e74, + 0x1058: 0x1e79, 0x1059: 0x1e9c, 0x105a: 0x1ea1, 0x105b: 0x1e33, 0x105c: 0x1e38, 0x105d: 0x1e1f, + 0x105e: 0x1e24, 0x105f: 0x1e4c, 0x1060: 0x1e51, 0x1061: 0x1eba, 0x1062: 0x1ebf, 0x1063: 0x1edd, + 0x1064: 0x1ee2, 0x1065: 0x1e7e, 0x1066: 0x1e83, 0x1067: 0x1e88, 0x1068: 0x1e92, 0x1069: 0x1e8d, + 0x106a: 0x1e65, 0x106b: 0x1eb0, 0x106c: 0x1ed3, 0x106d: 0x1e7e, 0x106e: 0x1e83, 0x106f: 0x1e88, + 0x1070: 0x1e92, 0x1071: 0x1e6f, 0x1072: 0x1e97, 0x1073: 0x1eec, 0x1074: 0x1e56, 0x1075: 0x1e5b, + 0x1076: 0x1e60, 0x1077: 0x1e7e, 0x1078: 0x1e83, 0x1079: 0x1e88, 0x107a: 0x1eec, 0x107b: 0x1efb, + 0x107c: 0x4408, 0x107d: 0x4408, + // Block 0x42, offset 0x1080 + 0x1090: 0x2311, 0x1091: 0x2326, + 0x1092: 0x2326, 0x1093: 0x232d, 0x1094: 0x2334, 0x1095: 0x2349, 0x1096: 0x2350, 0x1097: 0x2357, + 0x1098: 0x237a, 0x1099: 0x237a, 0x109a: 0x239d, 0x109b: 0x2396, 0x109c: 0x23b2, 0x109d: 0x23a4, + 0x109e: 0x23ab, 0x109f: 0x23ce, 0x10a0: 0x23ce, 0x10a1: 0x23c7, 0x10a2: 0x23d5, 0x10a3: 0x23d5, + 0x10a4: 0x23ff, 0x10a5: 0x23ff, 0x10a6: 0x241b, 0x10a7: 0x23e3, 0x10a8: 0x23e3, 0x10a9: 0x23dc, + 0x10aa: 0x23f1, 0x10ab: 0x23f1, 0x10ac: 0x23f8, 0x10ad: 0x23f8, 0x10ae: 0x2422, 0x10af: 0x2430, + 0x10b0: 0x2430, 0x10b1: 0x2437, 0x10b2: 0x2437, 0x10b3: 0x243e, 0x10b4: 0x2445, 0x10b5: 0x244c, + 0x10b6: 0x2453, 0x10b7: 0x2453, 0x10b8: 0x245a, 0x10b9: 0x2468, 0x10ba: 0x2476, 0x10bb: 0x246f, + 0x10bc: 0x247d, 0x10bd: 0x247d, 0x10be: 0x2492, 0x10bf: 0x2499, + // Block 0x43, offset 0x10c0 + 0x10c0: 0x24ca, 0x10c1: 0x24d8, 0x10c2: 0x24d1, 0x10c3: 0x24b5, 0x10c4: 0x24b5, 0x10c5: 0x24df, + 0x10c6: 0x24df, 0x10c7: 0x24e6, 0x10c8: 0x24e6, 0x10c9: 0x2510, 0x10ca: 0x2517, 0x10cb: 0x251e, + 0x10cc: 0x24f4, 0x10cd: 0x2502, 0x10ce: 0x2525, 0x10cf: 0x252c, + 0x10d2: 0x24fb, 0x10d3: 0x2580, 0x10d4: 0x2587, 0x10d5: 0x255d, 0x10d6: 0x2564, 0x10d7: 0x2548, + 0x10d8: 0x2548, 0x10d9: 0x254f, 0x10da: 0x2579, 0x10db: 0x2572, 0x10dc: 0x259c, 0x10dd: 0x259c, + 0x10de: 0x230a, 0x10df: 0x231f, 0x10e0: 0x2318, 0x10e1: 0x2342, 0x10e2: 0x233b, 0x10e3: 0x2365, + 0x10e4: 0x235e, 0x10e5: 0x2388, 0x10e6: 0x236c, 0x10e7: 0x2381, 0x10e8: 0x23b9, 0x10e9: 0x2406, + 0x10ea: 0x23ea, 0x10eb: 0x2429, 0x10ec: 0x24c3, 0x10ed: 0x24ed, 0x10ee: 0x2595, 0x10ef: 0x258e, + 0x10f0: 0x25a3, 0x10f1: 0x253a, 0x10f2: 0x24a0, 0x10f3: 0x256b, 0x10f4: 0x2492, 0x10f5: 0x24ca, + 0x10f6: 0x2461, 0x10f7: 0x24ae, 0x10f8: 0x2541, 0x10f9: 0x2533, 0x10fa: 0x24bc, 0x10fb: 0x24a7, + 0x10fc: 0x24bc, 0x10fd: 0x2541, 0x10fe: 0x2373, 0x10ff: 0x238f, + // Block 0x44, offset 0x1100 + 0x1100: 0x2509, 0x1101: 0x2484, 0x1102: 0x2303, 0x1103: 0x24a7, 0x1104: 0x244c, 0x1105: 0x241b, + 0x1106: 0x23c0, 0x1107: 0x2556, + 0x1130: 0x2414, 0x1131: 0x248b, 0x1132: 0x27bf, 0x1133: 0x27b6, 0x1134: 0x27ec, 0x1135: 0x27da, + 0x1136: 0x27c8, 0x1137: 0x27e3, 0x1138: 0x27f5, 0x1139: 0x240d, 0x113a: 0x2c7c, 0x113b: 0x2afc, + 0x113c: 0x27d1, + // Block 0x45, offset 0x1140 + 0x1150: 0x0019, 0x1151: 0x0483, + 0x1152: 0x0487, 0x1153: 0x0035, 0x1154: 0x0037, 0x1155: 0x0003, 0x1156: 0x003f, 0x1157: 0x04bf, + 0x1158: 0x04c3, 0x1159: 0x1b5c, + 0x1160: 0x8132, 0x1161: 0x8132, 0x1162: 0x8132, 0x1163: 0x8132, + 0x1164: 0x8132, 0x1165: 0x8132, 0x1166: 0x8132, 0x1167: 0x812d, 0x1168: 0x812d, 0x1169: 0x812d, + 0x116a: 0x812d, 0x116b: 0x812d, 0x116c: 0x812d, 0x116d: 0x812d, 0x116e: 0x8132, 0x116f: 0x8132, + 0x1170: 0x1873, 0x1171: 0x0443, 0x1172: 0x043f, 0x1173: 0x007f, 0x1174: 0x007f, 0x1175: 0x0011, + 0x1176: 0x0013, 0x1177: 0x00b7, 0x1178: 0x00bb, 0x1179: 0x04b7, 0x117a: 0x04bb, 0x117b: 0x04ab, + 0x117c: 0x04af, 0x117d: 0x0493, 0x117e: 0x0497, 0x117f: 0x048b, + // Block 0x46, offset 0x1180 + 0x1180: 0x048f, 0x1181: 0x049b, 0x1182: 0x049f, 0x1183: 0x04a3, 0x1184: 0x04a7, + 0x1187: 0x0077, 0x1188: 0x007b, 0x1189: 0x4269, 0x118a: 0x4269, 0x118b: 0x4269, + 0x118c: 0x4269, 0x118d: 0x007f, 0x118e: 0x007f, 0x118f: 0x007f, 0x1190: 0x0019, 0x1191: 0x0483, + 0x1192: 0x001d, 0x1194: 0x0037, 0x1195: 0x0035, 0x1196: 0x003f, 0x1197: 0x0003, + 0x1198: 0x0443, 0x1199: 0x0011, 0x119a: 0x0013, 0x119b: 0x00b7, 0x119c: 0x00bb, 0x119d: 0x04b7, + 0x119e: 0x04bb, 0x119f: 0x0007, 0x11a0: 0x000d, 0x11a1: 0x0015, 0x11a2: 0x0017, 0x11a3: 0x001b, + 0x11a4: 0x0039, 0x11a5: 0x003d, 0x11a6: 0x003b, 0x11a8: 0x0079, 0x11a9: 0x0009, + 0x11aa: 0x000b, 0x11ab: 0x0041, + 0x11b0: 0x42aa, 0x11b1: 0x442c, 0x11b2: 0x42af, 0x11b4: 0x42b4, + 0x11b6: 0x42b9, 0x11b7: 0x4432, 0x11b8: 0x42be, 0x11b9: 0x4438, 0x11ba: 0x42c3, 0x11bb: 0x443e, + 0x11bc: 0x42c8, 0x11bd: 0x4444, 0x11be: 0x42cd, 0x11bf: 0x444a, + // Block 0x47, offset 0x11c0 + 0x11c0: 0x0236, 0x11c1: 0x440e, 0x11c2: 0x440e, 0x11c3: 0x4414, 0x11c4: 0x4414, 0x11c5: 0x4456, + 0x11c6: 0x4456, 0x11c7: 0x441a, 0x11c8: 0x441a, 0x11c9: 0x4462, 0x11ca: 0x4462, 0x11cb: 0x4462, + 0x11cc: 0x4462, 0x11cd: 0x0239, 0x11ce: 0x0239, 0x11cf: 0x023c, 0x11d0: 0x023c, 0x11d1: 0x023c, + 0x11d2: 0x023c, 0x11d3: 0x023f, 0x11d4: 0x023f, 0x11d5: 0x0242, 0x11d6: 0x0242, 0x11d7: 0x0242, + 0x11d8: 0x0242, 0x11d9: 0x0245, 0x11da: 0x0245, 0x11db: 0x0245, 0x11dc: 0x0245, 0x11dd: 0x0248, + 0x11de: 0x0248, 0x11df: 0x0248, 0x11e0: 0x0248, 0x11e1: 0x024b, 0x11e2: 0x024b, 0x11e3: 0x024b, + 0x11e4: 0x024b, 0x11e5: 0x024e, 0x11e6: 0x024e, 0x11e7: 0x024e, 0x11e8: 0x024e, 0x11e9: 0x0251, + 0x11ea: 0x0251, 0x11eb: 0x0254, 0x11ec: 0x0254, 0x11ed: 0x0257, 0x11ee: 0x0257, 0x11ef: 0x025a, + 0x11f0: 0x025a, 0x11f1: 0x025d, 0x11f2: 0x025d, 0x11f3: 0x025d, 0x11f4: 0x025d, 0x11f5: 0x0260, + 0x11f6: 0x0260, 0x11f7: 0x0260, 0x11f8: 0x0260, 0x11f9: 0x0263, 0x11fa: 0x0263, 0x11fb: 0x0263, + 0x11fc: 0x0263, 0x11fd: 0x0266, 0x11fe: 0x0266, 0x11ff: 0x0266, + // Block 0x48, offset 0x1200 + 0x1200: 0x0266, 0x1201: 0x0269, 0x1202: 0x0269, 0x1203: 0x0269, 0x1204: 0x0269, 0x1205: 0x026c, + 0x1206: 0x026c, 0x1207: 0x026c, 0x1208: 0x026c, 0x1209: 0x026f, 0x120a: 0x026f, 0x120b: 0x026f, + 0x120c: 0x026f, 0x120d: 0x0272, 0x120e: 0x0272, 0x120f: 0x0272, 0x1210: 0x0272, 0x1211: 0x0275, + 0x1212: 0x0275, 0x1213: 0x0275, 0x1214: 0x0275, 0x1215: 0x0278, 0x1216: 0x0278, 0x1217: 0x0278, + 0x1218: 0x0278, 0x1219: 0x027b, 0x121a: 0x027b, 0x121b: 0x027b, 0x121c: 0x027b, 0x121d: 0x027e, + 0x121e: 0x027e, 0x121f: 0x027e, 0x1220: 0x027e, 0x1221: 0x0281, 0x1222: 0x0281, 0x1223: 0x0281, + 0x1224: 0x0281, 0x1225: 0x0284, 0x1226: 0x0284, 0x1227: 0x0284, 0x1228: 0x0284, 0x1229: 0x0287, + 0x122a: 0x0287, 0x122b: 0x0287, 0x122c: 0x0287, 0x122d: 0x028a, 0x122e: 0x028a, 0x122f: 0x028d, + 0x1230: 0x028d, 0x1231: 0x0290, 0x1232: 0x0290, 0x1233: 0x0290, 0x1234: 0x0290, 0x1235: 0x2e00, + 0x1236: 0x2e00, 0x1237: 0x2e08, 0x1238: 0x2e08, 0x1239: 0x2e10, 0x123a: 0x2e10, 0x123b: 0x1f82, + 0x123c: 0x1f82, + // Block 0x49, offset 0x1240 + 0x1240: 0x0081, 0x1241: 0x0083, 0x1242: 0x0085, 0x1243: 0x0087, 0x1244: 0x0089, 0x1245: 0x008b, + 0x1246: 0x008d, 0x1247: 0x008f, 0x1248: 0x0091, 0x1249: 0x0093, 0x124a: 0x0095, 0x124b: 0x0097, + 0x124c: 0x0099, 0x124d: 0x009b, 0x124e: 0x009d, 0x124f: 0x009f, 0x1250: 0x00a1, 0x1251: 0x00a3, + 0x1252: 0x00a5, 0x1253: 0x00a7, 0x1254: 0x00a9, 0x1255: 0x00ab, 0x1256: 0x00ad, 0x1257: 0x00af, + 0x1258: 0x00b1, 0x1259: 0x00b3, 0x125a: 0x00b5, 0x125b: 0x00b7, 0x125c: 0x00b9, 0x125d: 0x00bb, + 0x125e: 0x00bd, 0x125f: 0x0477, 0x1260: 0x047b, 0x1261: 0x0487, 0x1262: 0x049b, 0x1263: 0x049f, + 0x1264: 0x0483, 0x1265: 0x05ab, 0x1266: 0x05a3, 0x1267: 0x04c7, 0x1268: 0x04cf, 0x1269: 0x04d7, + 0x126a: 0x04df, 0x126b: 0x04e7, 0x126c: 0x056b, 0x126d: 0x0573, 0x126e: 0x057b, 0x126f: 0x051f, + 0x1270: 0x05af, 0x1271: 0x04cb, 0x1272: 0x04d3, 0x1273: 0x04db, 0x1274: 0x04e3, 0x1275: 0x04eb, + 0x1276: 0x04ef, 0x1277: 0x04f3, 0x1278: 0x04f7, 0x1279: 0x04fb, 0x127a: 0x04ff, 0x127b: 0x0503, + 0x127c: 0x0507, 0x127d: 0x050b, 0x127e: 0x050f, 0x127f: 0x0513, + // Block 0x4a, offset 0x1280 + 0x1280: 0x0517, 0x1281: 0x051b, 0x1282: 0x0523, 0x1283: 0x0527, 0x1284: 0x052b, 0x1285: 0x052f, + 0x1286: 0x0533, 0x1287: 0x0537, 0x1288: 0x053b, 0x1289: 0x053f, 0x128a: 0x0543, 0x128b: 0x0547, + 0x128c: 0x054b, 0x128d: 0x054f, 0x128e: 0x0553, 0x128f: 0x0557, 0x1290: 0x055b, 0x1291: 0x055f, + 0x1292: 0x0563, 0x1293: 0x0567, 0x1294: 0x056f, 0x1295: 0x0577, 0x1296: 0x057f, 0x1297: 0x0583, + 0x1298: 0x0587, 0x1299: 0x058b, 0x129a: 0x058f, 0x129b: 0x0593, 0x129c: 0x0597, 0x129d: 0x05a7, + 0x129e: 0x4a78, 0x129f: 0x4a7e, 0x12a0: 0x03c3, 0x12a1: 0x0313, 0x12a2: 0x0317, 0x12a3: 0x4a3b, + 0x12a4: 0x031b, 0x12a5: 0x4a41, 0x12a6: 0x4a47, 0x12a7: 0x031f, 0x12a8: 0x0323, 0x12a9: 0x0327, + 0x12aa: 0x4a4d, 0x12ab: 0x4a53, 0x12ac: 0x4a59, 0x12ad: 0x4a5f, 0x12ae: 0x4a65, 0x12af: 0x4a6b, + 0x12b0: 0x0367, 0x12b1: 0x032b, 0x12b2: 0x032f, 0x12b3: 0x0333, 0x12b4: 0x037b, 0x12b5: 0x0337, + 0x12b6: 0x033b, 0x12b7: 0x033f, 0x12b8: 0x0343, 0x12b9: 0x0347, 0x12ba: 0x034b, 0x12bb: 0x034f, + 0x12bc: 0x0353, 0x12bd: 0x0357, 0x12be: 0x035b, + // Block 0x4b, offset 0x12c0 + 0x12c2: 0x49bd, 0x12c3: 0x49c3, 0x12c4: 0x49c9, 0x12c5: 0x49cf, + 0x12c6: 0x49d5, 0x12c7: 0x49db, 0x12ca: 0x49e1, 0x12cb: 0x49e7, + 0x12cc: 0x49ed, 0x12cd: 0x49f3, 0x12ce: 0x49f9, 0x12cf: 0x49ff, + 0x12d2: 0x4a05, 0x12d3: 0x4a0b, 0x12d4: 0x4a11, 0x12d5: 0x4a17, 0x12d6: 0x4a1d, 0x12d7: 0x4a23, + 0x12da: 0x4a29, 0x12db: 0x4a2f, 0x12dc: 0x4a35, + 0x12e0: 0x00bf, 0x12e1: 0x00c2, 0x12e2: 0x00cb, 0x12e3: 0x4264, + 0x12e4: 0x00c8, 0x12e5: 0x00c5, 0x12e6: 0x0447, 0x12e8: 0x046b, 0x12e9: 0x044b, + 0x12ea: 0x044f, 0x12eb: 0x0453, 0x12ec: 0x0457, 0x12ed: 0x046f, 0x12ee: 0x0473, + // Block 0x4c, offset 0x1300 + 0x1300: 0x0063, 0x1301: 0x0065, 0x1302: 0x0067, 0x1303: 0x0069, 0x1304: 0x006b, 0x1305: 0x006d, + 0x1306: 0x006f, 0x1307: 0x0071, 0x1308: 0x0073, 0x1309: 0x0075, 0x130a: 0x0083, 0x130b: 0x0085, + 0x130c: 0x0087, 0x130d: 0x0089, 0x130e: 0x008b, 0x130f: 0x008d, 0x1310: 0x008f, 0x1311: 0x0091, + 0x1312: 0x0093, 0x1313: 0x0095, 0x1314: 0x0097, 0x1315: 0x0099, 0x1316: 0x009b, 0x1317: 0x009d, + 0x1318: 0x009f, 0x1319: 0x00a1, 0x131a: 0x00a3, 0x131b: 0x00a5, 0x131c: 0x00a7, 0x131d: 0x00a9, + 0x131e: 0x00ab, 0x131f: 0x00ad, 0x1320: 0x00af, 0x1321: 0x00b1, 0x1322: 0x00b3, 0x1323: 0x00b5, + 0x1324: 0x00dd, 0x1325: 0x00f2, 0x1328: 0x0173, 0x1329: 0x0176, + 0x132a: 0x0179, 0x132b: 0x017c, 0x132c: 0x017f, 0x132d: 0x0182, 0x132e: 0x0185, 0x132f: 0x0188, + 0x1330: 0x018b, 0x1331: 0x018e, 0x1332: 0x0191, 0x1333: 0x0194, 0x1334: 0x0197, 0x1335: 0x019a, + 0x1336: 0x019d, 0x1337: 0x01a0, 0x1338: 0x01a3, 0x1339: 0x0188, 0x133a: 0x01a6, 0x133b: 0x01a9, + 0x133c: 0x01ac, 0x133d: 0x01af, 0x133e: 0x01b2, 0x133f: 0x01b5, + // Block 0x4d, offset 0x1340 + 0x1340: 0x01fd, 0x1341: 0x0200, 0x1342: 0x0203, 0x1343: 0x045b, 0x1344: 0x01c7, 0x1345: 0x01d0, + 0x1346: 0x01d6, 0x1347: 0x01fa, 0x1348: 0x01eb, 0x1349: 0x01e8, 0x134a: 0x0206, 0x134b: 0x0209, + 0x134e: 0x0021, 0x134f: 0x0023, 0x1350: 0x0025, 0x1351: 0x0027, + 0x1352: 0x0029, 0x1353: 0x002b, 0x1354: 0x002d, 0x1355: 0x002f, 0x1356: 0x0031, 0x1357: 0x0033, + 0x1358: 0x0021, 0x1359: 0x0023, 0x135a: 0x0025, 0x135b: 0x0027, 0x135c: 0x0029, 0x135d: 0x002b, + 0x135e: 0x002d, 0x135f: 0x002f, 0x1360: 0x0031, 0x1361: 0x0033, 0x1362: 0x0021, 0x1363: 0x0023, + 0x1364: 0x0025, 0x1365: 0x0027, 0x1366: 0x0029, 0x1367: 0x002b, 0x1368: 0x002d, 0x1369: 0x002f, + 0x136a: 0x0031, 0x136b: 0x0033, 0x136c: 0x0021, 0x136d: 0x0023, 0x136e: 0x0025, 0x136f: 0x0027, + 0x1370: 0x0029, 0x1371: 0x002b, 0x1372: 0x002d, 0x1373: 0x002f, 0x1374: 0x0031, 0x1375: 0x0033, + 0x1376: 0x0021, 0x1377: 0x0023, 0x1378: 0x0025, 0x1379: 0x0027, 0x137a: 0x0029, 0x137b: 0x002b, + 0x137c: 0x002d, 0x137d: 0x002f, 0x137e: 0x0031, 0x137f: 0x0033, + // Block 0x4e, offset 0x1380 + 0x1380: 0x0239, 0x1381: 0x023c, 0x1382: 0x0248, 0x1383: 0x0251, 0x1385: 0x028a, + 0x1386: 0x025a, 0x1387: 0x024b, 0x1388: 0x0269, 0x1389: 0x0290, 0x138a: 0x027b, 0x138b: 0x027e, + 0x138c: 0x0281, 0x138d: 0x0284, 0x138e: 0x025d, 0x138f: 0x026f, 0x1390: 0x0275, 0x1391: 0x0263, + 0x1392: 0x0278, 0x1393: 0x0257, 0x1394: 0x0260, 0x1395: 0x0242, 0x1396: 0x0245, 0x1397: 0x024e, + 0x1398: 0x0254, 0x1399: 0x0266, 0x139a: 0x026c, 0x139b: 0x0272, 0x139c: 0x0293, 0x139d: 0x02e4, + 0x139e: 0x02cc, 0x139f: 0x0296, 0x13a1: 0x023c, 0x13a2: 0x0248, + 0x13a4: 0x0287, 0x13a7: 0x024b, 0x13a9: 0x0290, + 0x13aa: 0x027b, 0x13ab: 0x027e, 0x13ac: 0x0281, 0x13ad: 0x0284, 0x13ae: 0x025d, 0x13af: 0x026f, + 0x13b0: 0x0275, 0x13b1: 0x0263, 0x13b2: 0x0278, 0x13b4: 0x0260, 0x13b5: 0x0242, + 0x13b6: 0x0245, 0x13b7: 0x024e, 0x13b9: 0x0266, 0x13bb: 0x0272, + // Block 0x4f, offset 0x13c0 + 0x13c2: 0x0248, + 0x13c7: 0x024b, 0x13c9: 0x0290, 0x13cb: 0x027e, + 0x13cd: 0x0284, 0x13ce: 0x025d, 0x13cf: 0x026f, 0x13d1: 0x0263, + 0x13d2: 0x0278, 0x13d4: 0x0260, 0x13d7: 0x024e, + 0x13d9: 0x0266, 0x13db: 0x0272, 0x13dd: 0x02e4, + 0x13df: 0x0296, 0x13e1: 0x023c, 0x13e2: 0x0248, + 0x13e4: 0x0287, 0x13e7: 0x024b, 0x13e8: 0x0269, 0x13e9: 0x0290, + 0x13ea: 0x027b, 0x13ec: 0x0281, 0x13ed: 0x0284, 0x13ee: 0x025d, 0x13ef: 0x026f, + 0x13f0: 0x0275, 0x13f1: 0x0263, 0x13f2: 0x0278, 0x13f4: 0x0260, 0x13f5: 0x0242, + 0x13f6: 0x0245, 0x13f7: 0x024e, 0x13f9: 0x0266, 0x13fa: 0x026c, 0x13fb: 0x0272, + 0x13fc: 0x0293, 0x13fe: 0x02cc, + // Block 0x50, offset 0x1400 + 0x1400: 0x0239, 0x1401: 0x023c, 0x1402: 0x0248, 0x1403: 0x0251, 0x1404: 0x0287, 0x1405: 0x028a, + 0x1406: 0x025a, 0x1407: 0x024b, 0x1408: 0x0269, 0x1409: 0x0290, 0x140b: 0x027e, + 0x140c: 0x0281, 0x140d: 0x0284, 0x140e: 0x025d, 0x140f: 0x026f, 0x1410: 0x0275, 0x1411: 0x0263, + 0x1412: 0x0278, 0x1413: 0x0257, 0x1414: 0x0260, 0x1415: 0x0242, 0x1416: 0x0245, 0x1417: 0x024e, + 0x1418: 0x0254, 0x1419: 0x0266, 0x141a: 0x026c, 0x141b: 0x0272, + 0x1421: 0x023c, 0x1422: 0x0248, 0x1423: 0x0251, + 0x1425: 0x028a, 0x1426: 0x025a, 0x1427: 0x024b, 0x1428: 0x0269, 0x1429: 0x0290, + 0x142b: 0x027e, 0x142c: 0x0281, 0x142d: 0x0284, 0x142e: 0x025d, 0x142f: 0x026f, + 0x1430: 0x0275, 0x1431: 0x0263, 0x1432: 0x0278, 0x1433: 0x0257, 0x1434: 0x0260, 0x1435: 0x0242, + 0x1436: 0x0245, 0x1437: 0x024e, 0x1438: 0x0254, 0x1439: 0x0266, 0x143a: 0x026c, 0x143b: 0x0272, + // Block 0x51, offset 0x1440 + 0x1440: 0x1879, 0x1441: 0x1876, 0x1442: 0x187c, 0x1443: 0x18a0, 0x1444: 0x18c4, 0x1445: 0x18e8, + 0x1446: 0x190c, 0x1447: 0x1915, 0x1448: 0x191b, 0x1449: 0x1921, 0x144a: 0x1927, + 0x1450: 0x1a8c, 0x1451: 0x1a90, + 0x1452: 0x1a94, 0x1453: 0x1a98, 0x1454: 0x1a9c, 0x1455: 0x1aa0, 0x1456: 0x1aa4, 0x1457: 0x1aa8, + 0x1458: 0x1aac, 0x1459: 0x1ab0, 0x145a: 0x1ab4, 0x145b: 0x1ab8, 0x145c: 0x1abc, 0x145d: 0x1ac0, + 0x145e: 0x1ac4, 0x145f: 0x1ac8, 0x1460: 0x1acc, 0x1461: 0x1ad0, 0x1462: 0x1ad4, 0x1463: 0x1ad8, + 0x1464: 0x1adc, 0x1465: 0x1ae0, 0x1466: 0x1ae4, 0x1467: 0x1ae8, 0x1468: 0x1aec, 0x1469: 0x1af0, + 0x146a: 0x271e, 0x146b: 0x0047, 0x146c: 0x0065, 0x146d: 0x193c, 0x146e: 0x19b1, + 0x1470: 0x0043, 0x1471: 0x0045, 0x1472: 0x0047, 0x1473: 0x0049, 0x1474: 0x004b, 0x1475: 0x004d, + 0x1476: 0x004f, 0x1477: 0x0051, 0x1478: 0x0053, 0x1479: 0x0055, 0x147a: 0x0057, 0x147b: 0x0059, + 0x147c: 0x005b, 0x147d: 0x005d, 0x147e: 0x005f, 0x147f: 0x0061, + // Block 0x52, offset 0x1480 + 0x1480: 0x26ad, 0x1481: 0x26c2, 0x1482: 0x0503, + 0x1490: 0x0c0f, 0x1491: 0x0a47, + 0x1492: 0x08d3, 0x1493: 0x45c4, 0x1494: 0x071b, 0x1495: 0x09ef, 0x1496: 0x132f, 0x1497: 0x09ff, + 0x1498: 0x0727, 0x1499: 0x0cd7, 0x149a: 0x0eaf, 0x149b: 0x0caf, 0x149c: 0x0827, 0x149d: 0x0b6b, + 0x149e: 0x07bf, 0x149f: 0x0cb7, 0x14a0: 0x0813, 0x14a1: 0x1117, 0x14a2: 0x0f83, 0x14a3: 0x138b, + 0x14a4: 0x09d3, 0x14a5: 0x090b, 0x14a6: 0x0e63, 0x14a7: 0x0c1b, 0x14a8: 0x0c47, 0x14a9: 0x06bf, + 0x14aa: 0x06cb, 0x14ab: 0x140b, 0x14ac: 0x0adb, 0x14ad: 0x06e7, 0x14ae: 0x08ef, 0x14af: 0x0c3b, + 0x14b0: 0x13b3, 0x14b1: 0x0c13, 0x14b2: 0x106f, 0x14b3: 0x10ab, 0x14b4: 0x08f7, 0x14b5: 0x0e43, + 0x14b6: 0x0d0b, 0x14b7: 0x0d07, 0x14b8: 0x0f97, 0x14b9: 0x082b, 0x14ba: 0x0957, 0x14bb: 0x1443, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x06fb, 0x14c1: 0x06f3, 0x14c2: 0x0703, 0x14c3: 0x1647, 0x14c4: 0x0747, 0x14c5: 0x0757, + 0x14c6: 0x075b, 0x14c7: 0x0763, 0x14c8: 0x076b, 0x14c9: 0x076f, 0x14ca: 0x077b, 0x14cb: 0x0773, + 0x14cc: 0x05b3, 0x14cd: 0x165b, 0x14ce: 0x078f, 0x14cf: 0x0793, 0x14d0: 0x0797, 0x14d1: 0x07b3, + 0x14d2: 0x164c, 0x14d3: 0x05b7, 0x14d4: 0x079f, 0x14d5: 0x07bf, 0x14d6: 0x1656, 0x14d7: 0x07cf, + 0x14d8: 0x07d7, 0x14d9: 0x0737, 0x14da: 0x07df, 0x14db: 0x07e3, 0x14dc: 0x1831, 0x14dd: 0x07ff, + 0x14de: 0x0807, 0x14df: 0x05bf, 0x14e0: 0x081f, 0x14e1: 0x0823, 0x14e2: 0x082b, 0x14e3: 0x082f, + 0x14e4: 0x05c3, 0x14e5: 0x0847, 0x14e6: 0x084b, 0x14e7: 0x0857, 0x14e8: 0x0863, 0x14e9: 0x0867, + 0x14ea: 0x086b, 0x14eb: 0x0873, 0x14ec: 0x0893, 0x14ed: 0x0897, 0x14ee: 0x089f, 0x14ef: 0x08af, + 0x14f0: 0x08b7, 0x14f1: 0x08bb, 0x14f2: 0x08bb, 0x14f3: 0x08bb, 0x14f4: 0x166a, 0x14f5: 0x0e93, + 0x14f6: 0x08cf, 0x14f7: 0x08d7, 0x14f8: 0x166f, 0x14f9: 0x08e3, 0x14fa: 0x08eb, 0x14fb: 0x08f3, + 0x14fc: 0x091b, 0x14fd: 0x0907, 0x14fe: 0x0913, 0x14ff: 0x0917, + // Block 0x54, offset 0x1500 + 0x1500: 0x091f, 0x1501: 0x0927, 0x1502: 0x092b, 0x1503: 0x0933, 0x1504: 0x093b, 0x1505: 0x093f, + 0x1506: 0x093f, 0x1507: 0x0947, 0x1508: 0x094f, 0x1509: 0x0953, 0x150a: 0x095f, 0x150b: 0x0983, + 0x150c: 0x0967, 0x150d: 0x0987, 0x150e: 0x096b, 0x150f: 0x0973, 0x1510: 0x080b, 0x1511: 0x09cf, + 0x1512: 0x0997, 0x1513: 0x099b, 0x1514: 0x099f, 0x1515: 0x0993, 0x1516: 0x09a7, 0x1517: 0x09a3, + 0x1518: 0x09bb, 0x1519: 0x1674, 0x151a: 0x09d7, 0x151b: 0x09db, 0x151c: 0x09e3, 0x151d: 0x09ef, + 0x151e: 0x09f7, 0x151f: 0x0a13, 0x1520: 0x1679, 0x1521: 0x167e, 0x1522: 0x0a1f, 0x1523: 0x0a23, + 0x1524: 0x0a27, 0x1525: 0x0a1b, 0x1526: 0x0a2f, 0x1527: 0x05c7, 0x1528: 0x05cb, 0x1529: 0x0a37, + 0x152a: 0x0a3f, 0x152b: 0x0a3f, 0x152c: 0x1683, 0x152d: 0x0a5b, 0x152e: 0x0a5f, 0x152f: 0x0a63, + 0x1530: 0x0a6b, 0x1531: 0x1688, 0x1532: 0x0a73, 0x1533: 0x0a77, 0x1534: 0x0b4f, 0x1535: 0x0a7f, + 0x1536: 0x05cf, 0x1537: 0x0a8b, 0x1538: 0x0a9b, 0x1539: 0x0aa7, 0x153a: 0x0aa3, 0x153b: 0x1692, + 0x153c: 0x0aaf, 0x153d: 0x1697, 0x153e: 0x0abb, 0x153f: 0x0ab7, + // Block 0x55, offset 0x1540 + 0x1540: 0x0abf, 0x1541: 0x0acf, 0x1542: 0x0ad3, 0x1543: 0x05d3, 0x1544: 0x0ae3, 0x1545: 0x0aeb, + 0x1546: 0x0aef, 0x1547: 0x0af3, 0x1548: 0x05d7, 0x1549: 0x169c, 0x154a: 0x05db, 0x154b: 0x0b0f, + 0x154c: 0x0b13, 0x154d: 0x0b17, 0x154e: 0x0b1f, 0x154f: 0x1863, 0x1550: 0x0b37, 0x1551: 0x16a6, + 0x1552: 0x16a6, 0x1553: 0x11d7, 0x1554: 0x0b47, 0x1555: 0x0b47, 0x1556: 0x05df, 0x1557: 0x16c9, + 0x1558: 0x179b, 0x1559: 0x0b57, 0x155a: 0x0b5f, 0x155b: 0x05e3, 0x155c: 0x0b73, 0x155d: 0x0b83, + 0x155e: 0x0b87, 0x155f: 0x0b8f, 0x1560: 0x0b9f, 0x1561: 0x05eb, 0x1562: 0x05e7, 0x1563: 0x0ba3, + 0x1564: 0x16ab, 0x1565: 0x0ba7, 0x1566: 0x0bbb, 0x1567: 0x0bbf, 0x1568: 0x0bc3, 0x1569: 0x0bbf, + 0x156a: 0x0bcf, 0x156b: 0x0bd3, 0x156c: 0x0be3, 0x156d: 0x0bdb, 0x156e: 0x0bdf, 0x156f: 0x0be7, + 0x1570: 0x0beb, 0x1571: 0x0bef, 0x1572: 0x0bfb, 0x1573: 0x0bff, 0x1574: 0x0c17, 0x1575: 0x0c1f, + 0x1576: 0x0c2f, 0x1577: 0x0c43, 0x1578: 0x16ba, 0x1579: 0x0c3f, 0x157a: 0x0c33, 0x157b: 0x0c4b, + 0x157c: 0x0c53, 0x157d: 0x0c67, 0x157e: 0x16bf, 0x157f: 0x0c6f, + // Block 0x56, offset 0x1580 + 0x1580: 0x0c63, 0x1581: 0x0c5b, 0x1582: 0x05ef, 0x1583: 0x0c77, 0x1584: 0x0c7f, 0x1585: 0x0c87, + 0x1586: 0x0c7b, 0x1587: 0x05f3, 0x1588: 0x0c97, 0x1589: 0x0c9f, 0x158a: 0x16c4, 0x158b: 0x0ccb, + 0x158c: 0x0cff, 0x158d: 0x0cdb, 0x158e: 0x05ff, 0x158f: 0x0ce7, 0x1590: 0x05fb, 0x1591: 0x05f7, + 0x1592: 0x07c3, 0x1593: 0x07c7, 0x1594: 0x0d03, 0x1595: 0x0ceb, 0x1596: 0x11ab, 0x1597: 0x0663, + 0x1598: 0x0d0f, 0x1599: 0x0d13, 0x159a: 0x0d17, 0x159b: 0x0d2b, 0x159c: 0x0d23, 0x159d: 0x16dd, + 0x159e: 0x0603, 0x159f: 0x0d3f, 0x15a0: 0x0d33, 0x15a1: 0x0d4f, 0x15a2: 0x0d57, 0x15a3: 0x16e7, + 0x15a4: 0x0d5b, 0x15a5: 0x0d47, 0x15a6: 0x0d63, 0x15a7: 0x0607, 0x15a8: 0x0d67, 0x15a9: 0x0d6b, + 0x15aa: 0x0d6f, 0x15ab: 0x0d7b, 0x15ac: 0x16ec, 0x15ad: 0x0d83, 0x15ae: 0x060b, 0x15af: 0x0d8f, + 0x15b0: 0x16f1, 0x15b1: 0x0d93, 0x15b2: 0x060f, 0x15b3: 0x0d9f, 0x15b4: 0x0dab, 0x15b5: 0x0db7, + 0x15b6: 0x0dbb, 0x15b7: 0x16f6, 0x15b8: 0x168d, 0x15b9: 0x16fb, 0x15ba: 0x0ddb, 0x15bb: 0x1700, + 0x15bc: 0x0de7, 0x15bd: 0x0def, 0x15be: 0x0ddf, 0x15bf: 0x0dfb, + // Block 0x57, offset 0x15c0 + 0x15c0: 0x0e0b, 0x15c1: 0x0e1b, 0x15c2: 0x0e0f, 0x15c3: 0x0e13, 0x15c4: 0x0e1f, 0x15c5: 0x0e23, + 0x15c6: 0x1705, 0x15c7: 0x0e07, 0x15c8: 0x0e3b, 0x15c9: 0x0e3f, 0x15ca: 0x0613, 0x15cb: 0x0e53, + 0x15cc: 0x0e4f, 0x15cd: 0x170a, 0x15ce: 0x0e33, 0x15cf: 0x0e6f, 0x15d0: 0x170f, 0x15d1: 0x1714, + 0x15d2: 0x0e73, 0x15d3: 0x0e87, 0x15d4: 0x0e83, 0x15d5: 0x0e7f, 0x15d6: 0x0617, 0x15d7: 0x0e8b, + 0x15d8: 0x0e9b, 0x15d9: 0x0e97, 0x15da: 0x0ea3, 0x15db: 0x1651, 0x15dc: 0x0eb3, 0x15dd: 0x1719, + 0x15de: 0x0ebf, 0x15df: 0x1723, 0x15e0: 0x0ed3, 0x15e1: 0x0edf, 0x15e2: 0x0ef3, 0x15e3: 0x1728, + 0x15e4: 0x0f07, 0x15e5: 0x0f0b, 0x15e6: 0x172d, 0x15e7: 0x1732, 0x15e8: 0x0f27, 0x15e9: 0x0f37, + 0x15ea: 0x061b, 0x15eb: 0x0f3b, 0x15ec: 0x061f, 0x15ed: 0x061f, 0x15ee: 0x0f53, 0x15ef: 0x0f57, + 0x15f0: 0x0f5f, 0x15f1: 0x0f63, 0x15f2: 0x0f6f, 0x15f3: 0x0623, 0x15f4: 0x0f87, 0x15f5: 0x1737, + 0x15f6: 0x0fa3, 0x15f7: 0x173c, 0x15f8: 0x0faf, 0x15f9: 0x16a1, 0x15fa: 0x0fbf, 0x15fb: 0x1741, + 0x15fc: 0x1746, 0x15fd: 0x174b, 0x15fe: 0x0627, 0x15ff: 0x062b, + // Block 0x58, offset 0x1600 + 0x1600: 0x0ff7, 0x1601: 0x1755, 0x1602: 0x1750, 0x1603: 0x175a, 0x1604: 0x175f, 0x1605: 0x0fff, + 0x1606: 0x1003, 0x1607: 0x1003, 0x1608: 0x100b, 0x1609: 0x0633, 0x160a: 0x100f, 0x160b: 0x0637, + 0x160c: 0x063b, 0x160d: 0x1769, 0x160e: 0x1023, 0x160f: 0x102b, 0x1610: 0x1037, 0x1611: 0x063f, + 0x1612: 0x176e, 0x1613: 0x105b, 0x1614: 0x1773, 0x1615: 0x1778, 0x1616: 0x107b, 0x1617: 0x1093, + 0x1618: 0x0643, 0x1619: 0x109b, 0x161a: 0x109f, 0x161b: 0x10a3, 0x161c: 0x177d, 0x161d: 0x1782, + 0x161e: 0x1782, 0x161f: 0x10bb, 0x1620: 0x0647, 0x1621: 0x1787, 0x1622: 0x10cf, 0x1623: 0x10d3, + 0x1624: 0x064b, 0x1625: 0x178c, 0x1626: 0x10ef, 0x1627: 0x064f, 0x1628: 0x10ff, 0x1629: 0x10f7, + 0x162a: 0x1107, 0x162b: 0x1796, 0x162c: 0x111f, 0x162d: 0x0653, 0x162e: 0x112b, 0x162f: 0x1133, + 0x1630: 0x1143, 0x1631: 0x0657, 0x1632: 0x17a0, 0x1633: 0x17a5, 0x1634: 0x065b, 0x1635: 0x17aa, + 0x1636: 0x115b, 0x1637: 0x17af, 0x1638: 0x1167, 0x1639: 0x1173, 0x163a: 0x117b, 0x163b: 0x17b4, + 0x163c: 0x17b9, 0x163d: 0x118f, 0x163e: 0x17be, 0x163f: 0x1197, + // Block 0x59, offset 0x1640 + 0x1640: 0x16ce, 0x1641: 0x065f, 0x1642: 0x11af, 0x1643: 0x11b3, 0x1644: 0x0667, 0x1645: 0x11b7, + 0x1646: 0x0a33, 0x1647: 0x17c3, 0x1648: 0x17c8, 0x1649: 0x16d3, 0x164a: 0x16d8, 0x164b: 0x11d7, + 0x164c: 0x11db, 0x164d: 0x13f3, 0x164e: 0x066b, 0x164f: 0x1207, 0x1650: 0x1203, 0x1651: 0x120b, + 0x1652: 0x083f, 0x1653: 0x120f, 0x1654: 0x1213, 0x1655: 0x1217, 0x1656: 0x121f, 0x1657: 0x17cd, + 0x1658: 0x121b, 0x1659: 0x1223, 0x165a: 0x1237, 0x165b: 0x123b, 0x165c: 0x1227, 0x165d: 0x123f, + 0x165e: 0x1253, 0x165f: 0x1267, 0x1660: 0x1233, 0x1661: 0x1247, 0x1662: 0x124b, 0x1663: 0x124f, + 0x1664: 0x17d2, 0x1665: 0x17dc, 0x1666: 0x17d7, 0x1667: 0x066f, 0x1668: 0x126f, 0x1669: 0x1273, + 0x166a: 0x127b, 0x166b: 0x17f0, 0x166c: 0x127f, 0x166d: 0x17e1, 0x166e: 0x0673, 0x166f: 0x0677, + 0x1670: 0x17e6, 0x1671: 0x17eb, 0x1672: 0x067b, 0x1673: 0x129f, 0x1674: 0x12a3, 0x1675: 0x12a7, + 0x1676: 0x12ab, 0x1677: 0x12b7, 0x1678: 0x12b3, 0x1679: 0x12bf, 0x167a: 0x12bb, 0x167b: 0x12cb, + 0x167c: 0x12c3, 0x167d: 0x12c7, 0x167e: 0x12cf, 0x167f: 0x067f, + // Block 0x5a, offset 0x1680 + 0x1680: 0x12d7, 0x1681: 0x12db, 0x1682: 0x0683, 0x1683: 0x12eb, 0x1684: 0x12ef, 0x1685: 0x17f5, + 0x1686: 0x12fb, 0x1687: 0x12ff, 0x1688: 0x0687, 0x1689: 0x130b, 0x168a: 0x05bb, 0x168b: 0x17fa, + 0x168c: 0x17ff, 0x168d: 0x068b, 0x168e: 0x068f, 0x168f: 0x1337, 0x1690: 0x134f, 0x1691: 0x136b, + 0x1692: 0x137b, 0x1693: 0x1804, 0x1694: 0x138f, 0x1695: 0x1393, 0x1696: 0x13ab, 0x1697: 0x13b7, + 0x1698: 0x180e, 0x1699: 0x1660, 0x169a: 0x13c3, 0x169b: 0x13bf, 0x169c: 0x13cb, 0x169d: 0x1665, + 0x169e: 0x13d7, 0x169f: 0x13e3, 0x16a0: 0x1813, 0x16a1: 0x1818, 0x16a2: 0x1423, 0x16a3: 0x142f, + 0x16a4: 0x1437, 0x16a5: 0x181d, 0x16a6: 0x143b, 0x16a7: 0x1467, 0x16a8: 0x1473, 0x16a9: 0x1477, + 0x16aa: 0x146f, 0x16ab: 0x1483, 0x16ac: 0x1487, 0x16ad: 0x1822, 0x16ae: 0x1493, 0x16af: 0x0693, + 0x16b0: 0x149b, 0x16b1: 0x1827, 0x16b2: 0x0697, 0x16b3: 0x14d3, 0x16b4: 0x0ac3, 0x16b5: 0x14eb, + 0x16b6: 0x182c, 0x16b7: 0x1836, 0x16b8: 0x069b, 0x16b9: 0x069f, 0x16ba: 0x1513, 0x16bb: 0x183b, + 0x16bc: 0x06a3, 0x16bd: 0x1840, 0x16be: 0x152b, 0x16bf: 0x152b, + // Block 0x5b, offset 0x16c0 + 0x16c0: 0x1533, 0x16c1: 0x1845, 0x16c2: 0x154b, 0x16c3: 0x06a7, 0x16c4: 0x155b, 0x16c5: 0x1567, + 0x16c6: 0x156f, 0x16c7: 0x1577, 0x16c8: 0x06ab, 0x16c9: 0x184a, 0x16ca: 0x158b, 0x16cb: 0x15a7, + 0x16cc: 0x15b3, 0x16cd: 0x06af, 0x16ce: 0x06b3, 0x16cf: 0x15b7, 0x16d0: 0x184f, 0x16d1: 0x06b7, + 0x16d2: 0x1854, 0x16d3: 0x1859, 0x16d4: 0x185e, 0x16d5: 0x15db, 0x16d6: 0x06bb, 0x16d7: 0x15ef, + 0x16d8: 0x15f7, 0x16d9: 0x15fb, 0x16da: 0x1603, 0x16db: 0x160b, 0x16dc: 0x1613, 0x16dd: 0x1868, +} + +// nfkcIndex: 22 blocks, 1408 entries, 1408 bytes +// Block 0 is the zero block. +var nfkcIndex = [1408]uint8{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x5a, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x5b, 0xc7: 0x04, + 0xc8: 0x05, 0xca: 0x5c, 0xcb: 0x5d, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x09, + 0xd0: 0x0a, 0xd1: 0x5e, 0xd2: 0x5f, 0xd3: 0x0b, 0xd6: 0x0c, 0xd7: 0x60, + 0xd8: 0x61, 0xd9: 0x0d, 0xdb: 0x62, 0xdc: 0x63, 0xdd: 0x64, 0xdf: 0x65, + 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: 0x66, 0x121: 0x67, 0x123: 0x68, 0x124: 0x69, 0x125: 0x6a, 0x126: 0x6b, 0x127: 0x6c, + 0x128: 0x6d, 0x129: 0x6e, 0x12a: 0x6f, 0x12b: 0x70, 0x12c: 0x6b, 0x12d: 0x71, 0x12e: 0x72, 0x12f: 0x73, + 0x131: 0x74, 0x132: 0x75, 0x133: 0x76, 0x134: 0x77, 0x135: 0x78, 0x137: 0x79, + 0x138: 0x7a, 0x139: 0x7b, 0x13a: 0x7c, 0x13b: 0x7d, 0x13c: 0x7e, 0x13d: 0x7f, 0x13e: 0x80, 0x13f: 0x81, + // Block 0x5, offset 0x140 + 0x140: 0x82, 0x142: 0x83, 0x143: 0x84, 0x144: 0x85, 0x145: 0x86, 0x146: 0x87, 0x147: 0x88, + 0x14d: 0x89, + 0x15c: 0x8a, 0x15f: 0x8b, + 0x162: 0x8c, 0x164: 0x8d, + 0x168: 0x8e, 0x169: 0x8f, 0x16a: 0x90, 0x16c: 0x0e, 0x16d: 0x91, 0x16e: 0x92, 0x16f: 0x93, + 0x170: 0x94, 0x173: 0x95, 0x174: 0x96, 0x175: 0x0f, 0x176: 0x10, 0x177: 0x97, + 0x178: 0x11, 0x179: 0x12, 0x17a: 0x13, 0x17b: 0x14, 0x17c: 0x15, 0x17d: 0x16, 0x17e: 0x17, 0x17f: 0x18, + // Block 0x6, offset 0x180 + 0x180: 0x98, 0x181: 0x99, 0x182: 0x9a, 0x183: 0x9b, 0x184: 0x19, 0x185: 0x1a, 0x186: 0x9c, 0x187: 0x9d, + 0x188: 0x9e, 0x189: 0x1b, 0x18a: 0x1c, 0x18b: 0x9f, 0x18c: 0xa0, + 0x191: 0x1d, 0x192: 0x1e, 0x193: 0xa1, + 0x1a8: 0xa2, 0x1a9: 0xa3, 0x1ab: 0xa4, + 0x1b1: 0xa5, 0x1b3: 0xa6, 0x1b5: 0xa7, 0x1b7: 0xa8, + 0x1ba: 0xa9, 0x1bb: 0xaa, 0x1bc: 0x1f, 0x1bd: 0x20, 0x1be: 0x21, 0x1bf: 0xab, + // Block 0x7, offset 0x1c0 + 0x1c0: 0xac, 0x1c1: 0x22, 0x1c2: 0x23, 0x1c3: 0x24, 0x1c4: 0xad, 0x1c5: 0x25, 0x1c6: 0x26, + 0x1c8: 0x27, 0x1c9: 0x28, 0x1ca: 0x29, 0x1cb: 0x2a, 0x1cc: 0x2b, 0x1cd: 0x2c, 0x1ce: 0x2d, 0x1cf: 0x2e, + // Block 0x8, offset 0x200 + 0x219: 0xae, 0x21a: 0xaf, 0x21b: 0xb0, 0x21d: 0xb1, 0x21f: 0xb2, + 0x220: 0xb3, 0x223: 0xb4, 0x224: 0xb5, 0x225: 0xb6, 0x226: 0xb7, 0x227: 0xb8, + 0x22a: 0xb9, 0x22b: 0xba, 0x22d: 0xbb, 0x22f: 0xbc, + 0x230: 0xbd, 0x231: 0xbe, 0x232: 0xbf, 0x233: 0xc0, 0x234: 0xc1, 0x235: 0xc2, 0x236: 0xc3, 0x237: 0xbd, + 0x238: 0xbe, 0x239: 0xbf, 0x23a: 0xc0, 0x23b: 0xc1, 0x23c: 0xc2, 0x23d: 0xc3, 0x23e: 0xbd, 0x23f: 0xbe, + // Block 0x9, offset 0x240 + 0x240: 0xbf, 0x241: 0xc0, 0x242: 0xc1, 0x243: 0xc2, 0x244: 0xc3, 0x245: 0xbd, 0x246: 0xbe, 0x247: 0xbf, + 0x248: 0xc0, 0x249: 0xc1, 0x24a: 0xc2, 0x24b: 0xc3, 0x24c: 0xbd, 0x24d: 0xbe, 0x24e: 0xbf, 0x24f: 0xc0, + 0x250: 0xc1, 0x251: 0xc2, 0x252: 0xc3, 0x253: 0xbd, 0x254: 0xbe, 0x255: 0xbf, 0x256: 0xc0, 0x257: 0xc1, + 0x258: 0xc2, 0x259: 0xc3, 0x25a: 0xbd, 0x25b: 0xbe, 0x25c: 0xbf, 0x25d: 0xc0, 0x25e: 0xc1, 0x25f: 0xc2, + 0x260: 0xc3, 0x261: 0xbd, 0x262: 0xbe, 0x263: 0xbf, 0x264: 0xc0, 0x265: 0xc1, 0x266: 0xc2, 0x267: 0xc3, + 0x268: 0xbd, 0x269: 0xbe, 0x26a: 0xbf, 0x26b: 0xc0, 0x26c: 0xc1, 0x26d: 0xc2, 0x26e: 0xc3, 0x26f: 0xbd, + 0x270: 0xbe, 0x271: 0xbf, 0x272: 0xc0, 0x273: 0xc1, 0x274: 0xc2, 0x275: 0xc3, 0x276: 0xbd, 0x277: 0xbe, + 0x278: 0xbf, 0x279: 0xc0, 0x27a: 0xc1, 0x27b: 0xc2, 0x27c: 0xc3, 0x27d: 0xbd, 0x27e: 0xbe, 0x27f: 0xbf, + // Block 0xa, offset 0x280 + 0x280: 0xc0, 0x281: 0xc1, 0x282: 0xc2, 0x283: 0xc3, 0x284: 0xbd, 0x285: 0xbe, 0x286: 0xbf, 0x287: 0xc0, + 0x288: 0xc1, 0x289: 0xc2, 0x28a: 0xc3, 0x28b: 0xbd, 0x28c: 0xbe, 0x28d: 0xbf, 0x28e: 0xc0, 0x28f: 0xc1, + 0x290: 0xc2, 0x291: 0xc3, 0x292: 0xbd, 0x293: 0xbe, 0x294: 0xbf, 0x295: 0xc0, 0x296: 0xc1, 0x297: 0xc2, + 0x298: 0xc3, 0x299: 0xbd, 0x29a: 0xbe, 0x29b: 0xbf, 0x29c: 0xc0, 0x29d: 0xc1, 0x29e: 0xc2, 0x29f: 0xc3, + 0x2a0: 0xbd, 0x2a1: 0xbe, 0x2a2: 0xbf, 0x2a3: 0xc0, 0x2a4: 0xc1, 0x2a5: 0xc2, 0x2a6: 0xc3, 0x2a7: 0xbd, + 0x2a8: 0xbe, 0x2a9: 0xbf, 0x2aa: 0xc0, 0x2ab: 0xc1, 0x2ac: 0xc2, 0x2ad: 0xc3, 0x2ae: 0xbd, 0x2af: 0xbe, + 0x2b0: 0xbf, 0x2b1: 0xc0, 0x2b2: 0xc1, 0x2b3: 0xc2, 0x2b4: 0xc3, 0x2b5: 0xbd, 0x2b6: 0xbe, 0x2b7: 0xbf, + 0x2b8: 0xc0, 0x2b9: 0xc1, 0x2ba: 0xc2, 0x2bb: 0xc3, 0x2bc: 0xbd, 0x2bd: 0xbe, 0x2be: 0xbf, 0x2bf: 0xc0, + // Block 0xb, offset 0x2c0 + 0x2c0: 0xc1, 0x2c1: 0xc2, 0x2c2: 0xc3, 0x2c3: 0xbd, 0x2c4: 0xbe, 0x2c5: 0xbf, 0x2c6: 0xc0, 0x2c7: 0xc1, + 0x2c8: 0xc2, 0x2c9: 0xc3, 0x2ca: 0xbd, 0x2cb: 0xbe, 0x2cc: 0xbf, 0x2cd: 0xc0, 0x2ce: 0xc1, 0x2cf: 0xc2, + 0x2d0: 0xc3, 0x2d1: 0xbd, 0x2d2: 0xbe, 0x2d3: 0xbf, 0x2d4: 0xc0, 0x2d5: 0xc1, 0x2d6: 0xc2, 0x2d7: 0xc3, + 0x2d8: 0xbd, 0x2d9: 0xbe, 0x2da: 0xbf, 0x2db: 0xc0, 0x2dc: 0xc1, 0x2dd: 0xc2, 0x2de: 0xc4, + // Block 0xc, offset 0x300 + 0x324: 0x2f, 0x325: 0x30, 0x326: 0x31, 0x327: 0x32, + 0x328: 0x33, 0x329: 0x34, 0x32a: 0x35, 0x32b: 0x36, 0x32c: 0x37, 0x32d: 0x38, 0x32e: 0x39, 0x32f: 0x3a, + 0x330: 0x3b, 0x331: 0x3c, 0x332: 0x3d, 0x333: 0x3e, 0x334: 0x3f, 0x335: 0x40, 0x336: 0x41, 0x337: 0x42, + 0x338: 0x43, 0x339: 0x44, 0x33a: 0x45, 0x33b: 0x46, 0x33c: 0xc5, 0x33d: 0x47, 0x33e: 0x48, 0x33f: 0x49, + // Block 0xd, offset 0x340 + 0x347: 0xc6, + 0x34b: 0xc7, 0x34d: 0xc8, + 0x368: 0xc9, 0x36b: 0xca, + // Block 0xe, offset 0x380 + 0x381: 0xcb, 0x382: 0xcc, 0x384: 0xcd, 0x385: 0xb7, 0x387: 0xce, + 0x388: 0xcf, 0x38b: 0xd0, 0x38c: 0x6b, 0x38d: 0xd1, + 0x391: 0xd2, 0x392: 0xd3, 0x393: 0xd4, 0x396: 0xd5, 0x397: 0xd6, + 0x398: 0xd7, 0x39a: 0xd8, 0x39c: 0xd9, + 0x3b0: 0xd7, + // Block 0xf, offset 0x3c0 + 0x3eb: 0xda, 0x3ec: 0xdb, + // Block 0x10, offset 0x400 + 0x432: 0xdc, + // Block 0x11, offset 0x440 + 0x445: 0xdd, 0x446: 0xde, 0x447: 0xdf, + 0x449: 0xe0, + 0x450: 0xe1, 0x451: 0xe2, 0x452: 0xe3, 0x453: 0xe4, 0x454: 0xe5, 0x455: 0xe6, 0x456: 0xe7, 0x457: 0xe8, + 0x458: 0xe9, 0x459: 0xea, 0x45a: 0x4a, 0x45b: 0xeb, 0x45c: 0xec, 0x45d: 0xed, 0x45e: 0xee, 0x45f: 0x4b, + // Block 0x12, offset 0x480 + 0x480: 0xef, + 0x4a3: 0xf0, 0x4a5: 0xf1, + 0x4b8: 0x4c, 0x4b9: 0x4d, 0x4ba: 0x4e, + // Block 0x13, offset 0x4c0 + 0x4c4: 0x4f, 0x4c5: 0xf2, 0x4c6: 0xf3, + 0x4c8: 0x50, 0x4c9: 0xf4, + // Block 0x14, offset 0x500 + 0x520: 0x51, 0x521: 0x52, 0x522: 0x53, 0x523: 0x54, 0x524: 0x55, 0x525: 0x56, 0x526: 0x57, 0x527: 0x58, + 0x528: 0x59, + // Block 0x15, offset 0x540 + 0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d, + 0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11, + 0x56f: 0x12, +} + +// nfkcSparseOffset: 155 entries, 310 bytes +var nfkcSparseOffset = []uint16{0x0, 0xe, 0x12, 0x1b, 0x25, 0x35, 0x37, 0x3c, 0x47, 0x56, 0x63, 0x6b, 0x6f, 0x74, 0x76, 0x87, 0x8f, 0x96, 0x99, 0xa0, 0xa4, 0xa8, 0xaa, 0xac, 0xb5, 0xb9, 0xc0, 0xc5, 0xc8, 0xd2, 0xd4, 0xdb, 0xe3, 0xe7, 0xe9, 0xec, 0xf0, 0xf6, 0x107, 0x113, 0x115, 0x11b, 0x11d, 0x11f, 0x121, 0x123, 0x125, 0x127, 0x129, 0x12c, 0x12f, 0x131, 0x134, 0x137, 0x13b, 0x140, 0x149, 0x14b, 0x14e, 0x150, 0x15b, 0x166, 0x176, 0x184, 0x192, 0x1a2, 0x1b0, 0x1b7, 0x1bd, 0x1cc, 0x1d0, 0x1d2, 0x1d6, 0x1d8, 0x1db, 0x1dd, 0x1e0, 0x1e2, 0x1e5, 0x1e7, 0x1e9, 0x1eb, 0x1f7, 0x201, 0x20b, 0x20e, 0x212, 0x214, 0x216, 0x218, 0x21a, 0x21d, 0x21f, 0x221, 0x223, 0x225, 0x22b, 0x22e, 0x232, 0x234, 0x23b, 0x241, 0x247, 0x24f, 0x255, 0x25b, 0x261, 0x265, 0x267, 0x269, 0x26b, 0x26d, 0x273, 0x276, 0x279, 0x281, 0x288, 0x28b, 0x28e, 0x290, 0x298, 0x29b, 0x2a2, 0x2a5, 0x2ab, 0x2ad, 0x2af, 0x2b2, 0x2b4, 0x2b6, 0x2b8, 0x2ba, 0x2c7, 0x2d1, 0x2d3, 0x2d5, 0x2d9, 0x2de, 0x2ea, 0x2ef, 0x2f8, 0x2fe, 0x303, 0x307, 0x30c, 0x310, 0x320, 0x32e, 0x33c, 0x34a, 0x350, 0x352, 0x355, 0x35f, 0x361} + +// nfkcSparseValues: 875 entries, 3500 bytes +var nfkcSparseValues = [875]valueRange{ + // Block 0x0, offset 0x0 + {value: 0x0002, lo: 0x0d}, + {value: 0x0001, lo: 0xa0, hi: 0xa0}, + {value: 0x4278, lo: 0xa8, hi: 0xa8}, + {value: 0x0083, lo: 0xaa, hi: 0xaa}, + {value: 0x4264, lo: 0xaf, hi: 0xaf}, + {value: 0x0025, lo: 0xb2, hi: 0xb3}, + {value: 0x425a, lo: 0xb4, hi: 0xb4}, + {value: 0x01dc, lo: 0xb5, hi: 0xb5}, + {value: 0x4291, lo: 0xb8, hi: 0xb8}, + {value: 0x0023, lo: 0xb9, hi: 0xb9}, + {value: 0x009f, lo: 0xba, hi: 0xba}, + {value: 0x221c, lo: 0xbc, hi: 0xbc}, + {value: 0x2210, lo: 0xbd, hi: 0xbd}, + {value: 0x22b2, lo: 0xbe, hi: 0xbe}, + // Block 0x1, offset 0xe + {value: 0x0091, lo: 0x03}, + {value: 0x46e2, lo: 0xa0, hi: 0xa1}, + {value: 0x4714, 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: 0x426e, lo: 0x98, hi: 0x98}, + {value: 0x4273, lo: 0x99, hi: 0x9a}, + {value: 0x4296, lo: 0x9b, hi: 0x9b}, + {value: 0x425f, lo: 0x9c, hi: 0x9c}, + {value: 0x4282, lo: 0x9d, hi: 0x9d}, + {value: 0x0113, lo: 0xa0, hi: 0xa0}, + {value: 0x0099, lo: 0xa1, hi: 0xa1}, + {value: 0x00a7, lo: 0xa2, hi: 0xa3}, + {value: 0x0167, 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: 0x37a5, lo: 0x90, hi: 0x90}, + {value: 0x37b1, lo: 0x91, hi: 0x91}, + {value: 0x379f, lo: 0x93, hi: 0x93}, + {value: 0xa000, lo: 0x96, hi: 0x96}, + {value: 0x3817, lo: 0x97, hi: 0x97}, + {value: 0x37e1, lo: 0x9c, hi: 0x9c}, + {value: 0x37c9, lo: 0x9d, hi: 0x9d}, + {value: 0x37f3, lo: 0x9e, hi: 0x9e}, + {value: 0xa000, lo: 0xb4, hi: 0xb5}, + {value: 0x381d, lo: 0xb6, hi: 0xb6}, + {value: 0x3823, lo: 0xb7, hi: 0xb7}, + // Block 0x5, offset 0x35 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0x83, hi: 0x87}, + // Block 0x6, offset 0x37 + {value: 0x0001, lo: 0x04}, + {value: 0x8113, lo: 0x81, hi: 0x82}, + {value: 0x8132, lo: 0x84, hi: 0x84}, + {value: 0x812d, lo: 0x85, hi: 0x85}, + {value: 0x810d, lo: 0x87, hi: 0x87}, + // Block 0x7, offset 0x3c + {value: 0x0000, lo: 0x0a}, + {value: 0x8132, lo: 0x90, hi: 0x97}, + {value: 0x8119, lo: 0x98, hi: 0x98}, + {value: 0x811a, lo: 0x99, hi: 0x99}, + {value: 0x811b, lo: 0x9a, hi: 0x9a}, + {value: 0x3841, lo: 0xa2, hi: 0xa2}, + {value: 0x3847, lo: 0xa3, hi: 0xa3}, + {value: 0x3853, lo: 0xa4, hi: 0xa4}, + {value: 0x384d, lo: 0xa5, hi: 0xa5}, + {value: 0x3859, lo: 0xa6, hi: 0xa6}, + {value: 0xa000, lo: 0xa7, hi: 0xa7}, + // Block 0x8, offset 0x47 + {value: 0x0000, lo: 0x0e}, + {value: 0x386b, lo: 0x80, hi: 0x80}, + {value: 0xa000, lo: 0x81, hi: 0x81}, + {value: 0x385f, lo: 0x82, hi: 0x82}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0x3865, lo: 0x93, hi: 0x93}, + {value: 0xa000, lo: 0x95, hi: 0x95}, + {value: 0x8132, lo: 0x96, hi: 0x9c}, + {value: 0x8132, lo: 0x9f, hi: 0xa2}, + {value: 0x812d, lo: 0xa3, hi: 0xa3}, + {value: 0x8132, lo: 0xa4, hi: 0xa4}, + {value: 0x8132, lo: 0xa7, hi: 0xa8}, + {value: 0x812d, lo: 0xaa, hi: 0xaa}, + {value: 0x8132, lo: 0xab, hi: 0xac}, + {value: 0x812d, lo: 0xad, hi: 0xad}, + // Block 0x9, offset 0x56 + {value: 0x0000, lo: 0x0c}, + {value: 0x811f, lo: 0x91, hi: 0x91}, + {value: 0x8132, lo: 0xb0, hi: 0xb0}, + {value: 0x812d, lo: 0xb1, hi: 0xb1}, + {value: 0x8132, lo: 0xb2, hi: 0xb3}, + {value: 0x812d, lo: 0xb4, hi: 0xb4}, + {value: 0x8132, lo: 0xb5, hi: 0xb6}, + {value: 0x812d, lo: 0xb7, hi: 0xb9}, + {value: 0x8132, lo: 0xba, hi: 0xba}, + {value: 0x812d, lo: 0xbb, hi: 0xbc}, + {value: 0x8132, lo: 0xbd, hi: 0xbd}, + {value: 0x812d, lo: 0xbe, hi: 0xbe}, + {value: 0x8132, lo: 0xbf, hi: 0xbf}, + // Block 0xa, offset 0x63 + {value: 0x0005, lo: 0x07}, + {value: 0x8132, lo: 0x80, hi: 0x80}, + {value: 0x8132, lo: 0x81, hi: 0x81}, + {value: 0x812d, lo: 0x82, hi: 0x83}, + {value: 0x812d, lo: 0x84, hi: 0x85}, + {value: 0x812d, lo: 0x86, hi: 0x87}, + {value: 0x812d, lo: 0x88, hi: 0x89}, + {value: 0x8132, lo: 0x8a, hi: 0x8a}, + // Block 0xb, offset 0x6b + {value: 0x0000, lo: 0x03}, + {value: 0x8132, lo: 0xab, hi: 0xb1}, + {value: 0x812d, lo: 0xb2, hi: 0xb2}, + {value: 0x8132, lo: 0xb3, hi: 0xb3}, + // Block 0xc, offset 0x6f + {value: 0x0000, lo: 0x04}, + {value: 0x8132, lo: 0x96, hi: 0x99}, + {value: 0x8132, lo: 0x9b, hi: 0xa3}, + {value: 0x8132, lo: 0xa5, hi: 0xa7}, + {value: 0x8132, lo: 0xa9, hi: 0xad}, + // Block 0xd, offset 0x74 + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0x99, hi: 0x9b}, + // Block 0xe, offset 0x76 + {value: 0x0000, lo: 0x10}, + {value: 0x8132, lo: 0x94, hi: 0xa1}, + {value: 0x812d, lo: 0xa3, hi: 0xa3}, + {value: 0x8132, lo: 0xa4, hi: 0xa5}, + {value: 0x812d, lo: 0xa6, hi: 0xa6}, + {value: 0x8132, lo: 0xa7, hi: 0xa8}, + {value: 0x812d, lo: 0xa9, hi: 0xa9}, + {value: 0x8132, lo: 0xaa, hi: 0xac}, + {value: 0x812d, lo: 0xad, hi: 0xaf}, + {value: 0x8116, lo: 0xb0, hi: 0xb0}, + {value: 0x8117, lo: 0xb1, hi: 0xb1}, + {value: 0x8118, lo: 0xb2, hi: 0xb2}, + {value: 0x8132, lo: 0xb3, hi: 0xb5}, + {value: 0x812d, lo: 0xb6, hi: 0xb6}, + {value: 0x8132, lo: 0xb7, hi: 0xb8}, + {value: 0x812d, lo: 0xb9, hi: 0xba}, + {value: 0x8132, lo: 0xbb, hi: 0xbf}, + // Block 0xf, offset 0x87 + {value: 0x0000, lo: 0x07}, + {value: 0xa000, lo: 0xa8, hi: 0xa8}, + {value: 0x3ed8, lo: 0xa9, hi: 0xa9}, + {value: 0xa000, lo: 0xb0, hi: 0xb0}, + {value: 0x3ee0, lo: 0xb1, hi: 0xb1}, + {value: 0xa000, lo: 0xb3, hi: 0xb3}, + {value: 0x3ee8, lo: 0xb4, hi: 0xb4}, + {value: 0x9902, lo: 0xbc, hi: 0xbc}, + // Block 0x10, offset 0x8f + {value: 0x0008, lo: 0x06}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x8132, lo: 0x91, hi: 0x91}, + {value: 0x812d, lo: 0x92, hi: 0x92}, + {value: 0x8132, lo: 0x93, hi: 0x93}, + {value: 0x8132, lo: 0x94, hi: 0x94}, + {value: 0x451c, lo: 0x98, hi: 0x9f}, + // Block 0x11, offset 0x96 + {value: 0x0000, lo: 0x02}, + {value: 0x8102, lo: 0xbc, hi: 0xbc}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x12, offset 0x99 + {value: 0x0008, lo: 0x06}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0x2c9e, lo: 0x8b, hi: 0x8c}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + {value: 0x455c, lo: 0x9c, hi: 0x9d}, + {value: 0x456c, lo: 0x9f, hi: 0x9f}, + // Block 0x13, offset 0xa0 + {value: 0x0000, lo: 0x03}, + {value: 0x4594, lo: 0xb3, hi: 0xb3}, + {value: 0x459c, lo: 0xb6, hi: 0xb6}, + {value: 0x8102, lo: 0xbc, hi: 0xbc}, + // Block 0x14, offset 0xa4 + {value: 0x0008, lo: 0x03}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x4574, lo: 0x99, hi: 0x9b}, + {value: 0x458c, lo: 0x9e, hi: 0x9e}, + // Block 0x15, offset 0xa8 + {value: 0x0000, lo: 0x01}, + {value: 0x8102, lo: 0xbc, hi: 0xbc}, + // Block 0x16, offset 0xaa + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + // Block 0x17, offset 0xac + {value: 0x0000, lo: 0x08}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0x2cb6, lo: 0x88, hi: 0x88}, + {value: 0x2cae, lo: 0x8b, hi: 0x8b}, + {value: 0x2cbe, lo: 0x8c, hi: 0x8c}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x96, hi: 0x97}, + {value: 0x45a4, lo: 0x9c, hi: 0x9c}, + {value: 0x45ac, lo: 0x9d, hi: 0x9d}, + // Block 0x18, offset 0xb5 + {value: 0x0000, lo: 0x03}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0x2cc6, lo: 0x94, hi: 0x94}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x19, offset 0xb9 + {value: 0x0000, lo: 0x06}, + {value: 0xa000, lo: 0x86, hi: 0x87}, + {value: 0x2cce, lo: 0x8a, hi: 0x8a}, + {value: 0x2cde, lo: 0x8b, hi: 0x8b}, + {value: 0x2cd6, lo: 0x8c, hi: 0x8c}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + // Block 0x1a, offset 0xc0 + {value: 0x1801, lo: 0x04}, + {value: 0xa000, lo: 0x86, hi: 0x86}, + {value: 0x3ef0, lo: 0x88, hi: 0x88}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x8120, lo: 0x95, hi: 0x96}, + // Block 0x1b, offset 0xc5 + {value: 0x0000, lo: 0x02}, + {value: 0x8102, lo: 0xbc, hi: 0xbc}, + {value: 0xa000, lo: 0xbf, hi: 0xbf}, + // Block 0x1c, offset 0xc8 + {value: 0x0000, lo: 0x09}, + {value: 0x2ce6, lo: 0x80, hi: 0x80}, + {value: 0x9900, lo: 0x82, hi: 0x82}, + {value: 0xa000, lo: 0x86, hi: 0x86}, + {value: 0x2cee, lo: 0x87, hi: 0x87}, + {value: 0x2cf6, lo: 0x88, hi: 0x88}, + {value: 0x2f50, lo: 0x8a, hi: 0x8a}, + {value: 0x2dd8, lo: 0x8b, hi: 0x8b}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x95, hi: 0x96}, + // Block 0x1d, offset 0xd2 + {value: 0x0000, lo: 0x01}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x1e, offset 0xd4 + {value: 0x0000, lo: 0x06}, + {value: 0xa000, lo: 0x86, hi: 0x87}, + {value: 0x2cfe, lo: 0x8a, hi: 0x8a}, + {value: 0x2d0e, lo: 0x8b, hi: 0x8b}, + {value: 0x2d06, lo: 0x8c, hi: 0x8c}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + // Block 0x1f, offset 0xdb + {value: 0x6bea, lo: 0x07}, + {value: 0x9904, lo: 0x8a, hi: 0x8a}, + {value: 0x9900, lo: 0x8f, hi: 0x8f}, + {value: 0xa000, lo: 0x99, hi: 0x99}, + {value: 0x3ef8, lo: 0x9a, hi: 0x9a}, + {value: 0x2f58, lo: 0x9c, hi: 0x9c}, + {value: 0x2de3, lo: 0x9d, hi: 0x9d}, + {value: 0x2d16, lo: 0x9e, hi: 0x9f}, + // Block 0x20, offset 0xe3 + {value: 0x0000, lo: 0x03}, + {value: 0x2621, lo: 0xb3, hi: 0xb3}, + {value: 0x8122, lo: 0xb8, hi: 0xb9}, + {value: 0x8104, lo: 0xba, hi: 0xba}, + // Block 0x21, offset 0xe7 + {value: 0x0000, lo: 0x01}, + {value: 0x8123, lo: 0x88, hi: 0x8b}, + // Block 0x22, offset 0xe9 + {value: 0x0000, lo: 0x02}, + {value: 0x2636, lo: 0xb3, hi: 0xb3}, + {value: 0x8124, lo: 0xb8, hi: 0xb9}, + // Block 0x23, offset 0xec + {value: 0x0000, lo: 0x03}, + {value: 0x8125, lo: 0x88, hi: 0x8b}, + {value: 0x2628, lo: 0x9c, hi: 0x9c}, + {value: 0x262f, lo: 0x9d, hi: 0x9d}, + // Block 0x24, offset 0xf0 + {value: 0x0000, lo: 0x05}, + {value: 0x030b, lo: 0x8c, hi: 0x8c}, + {value: 0x812d, lo: 0x98, hi: 0x99}, + {value: 0x812d, lo: 0xb5, hi: 0xb5}, + {value: 0x812d, lo: 0xb7, hi: 0xb7}, + {value: 0x812b, lo: 0xb9, hi: 0xb9}, + // Block 0x25, offset 0xf6 + {value: 0x0000, lo: 0x10}, + {value: 0x2644, lo: 0x83, hi: 0x83}, + {value: 0x264b, lo: 0x8d, hi: 0x8d}, + {value: 0x2652, lo: 0x92, hi: 0x92}, + {value: 0x2659, lo: 0x97, hi: 0x97}, + {value: 0x2660, lo: 0x9c, hi: 0x9c}, + {value: 0x263d, lo: 0xa9, hi: 0xa9}, + {value: 0x8126, lo: 0xb1, hi: 0xb1}, + {value: 0x8127, lo: 0xb2, hi: 0xb2}, + {value: 0x4a84, lo: 0xb3, hi: 0xb3}, + {value: 0x8128, lo: 0xb4, hi: 0xb4}, + {value: 0x4a8d, lo: 0xb5, hi: 0xb5}, + {value: 0x45b4, lo: 0xb6, hi: 0xb6}, + {value: 0x45f4, lo: 0xb7, hi: 0xb7}, + {value: 0x45bc, lo: 0xb8, hi: 0xb8}, + {value: 0x45ff, lo: 0xb9, hi: 0xb9}, + {value: 0x8127, lo: 0xba, hi: 0xbd}, + // Block 0x26, offset 0x107 + {value: 0x0000, lo: 0x0b}, + {value: 0x8127, lo: 0x80, hi: 0x80}, + {value: 0x4a96, lo: 0x81, hi: 0x81}, + {value: 0x8132, lo: 0x82, hi: 0x83}, + {value: 0x8104, lo: 0x84, hi: 0x84}, + {value: 0x8132, lo: 0x86, hi: 0x87}, + {value: 0x266e, lo: 0x93, hi: 0x93}, + {value: 0x2675, lo: 0x9d, hi: 0x9d}, + {value: 0x267c, lo: 0xa2, hi: 0xa2}, + {value: 0x2683, lo: 0xa7, hi: 0xa7}, + {value: 0x268a, lo: 0xac, hi: 0xac}, + {value: 0x2667, lo: 0xb9, hi: 0xb9}, + // Block 0x27, offset 0x113 + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0x86, hi: 0x86}, + // Block 0x28, offset 0x115 + {value: 0x0000, lo: 0x05}, + {value: 0xa000, lo: 0xa5, hi: 0xa5}, + {value: 0x2d1e, lo: 0xa6, hi: 0xa6}, + {value: 0x9900, lo: 0xae, hi: 0xae}, + {value: 0x8102, lo: 0xb7, hi: 0xb7}, + {value: 0x8104, lo: 0xb9, hi: 0xba}, + // Block 0x29, offset 0x11b + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0x8d, hi: 0x8d}, + // Block 0x2a, offset 0x11d + {value: 0x0000, lo: 0x01}, + {value: 0x030f, lo: 0xbc, hi: 0xbc}, + // Block 0x2b, offset 0x11f + {value: 0x0000, lo: 0x01}, + {value: 0xa000, lo: 0x80, hi: 0x92}, + // Block 0x2c, offset 0x121 + {value: 0x0000, lo: 0x01}, + {value: 0xb900, lo: 0xa1, hi: 0xb5}, + // Block 0x2d, offset 0x123 + {value: 0x0000, lo: 0x01}, + {value: 0x9900, lo: 0xa8, hi: 0xbf}, + // Block 0x2e, offset 0x125 + {value: 0x0000, lo: 0x01}, + {value: 0x9900, lo: 0x80, hi: 0x82}, + // Block 0x2f, offset 0x127 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0x9d, hi: 0x9f}, + // Block 0x30, offset 0x129 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x94, hi: 0x94}, + {value: 0x8104, lo: 0xb4, hi: 0xb4}, + // Block 0x31, offset 0x12c + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x92, hi: 0x92}, + {value: 0x8132, lo: 0x9d, hi: 0x9d}, + // Block 0x32, offset 0x12f + {value: 0x0000, lo: 0x01}, + {value: 0x8131, lo: 0xa9, hi: 0xa9}, + // Block 0x33, offset 0x131 + {value: 0x0004, lo: 0x02}, + {value: 0x812e, lo: 0xb9, hi: 0xba}, + {value: 0x812d, lo: 0xbb, hi: 0xbb}, + // Block 0x34, offset 0x134 + {value: 0x0000, lo: 0x02}, + {value: 0x8132, lo: 0x97, hi: 0x97}, + {value: 0x812d, lo: 0x98, hi: 0x98}, + // Block 0x35, offset 0x137 + {value: 0x0000, lo: 0x03}, + {value: 0x8104, lo: 0xa0, hi: 0xa0}, + {value: 0x8132, lo: 0xb5, hi: 0xbc}, + {value: 0x812d, lo: 0xbf, hi: 0xbf}, + // Block 0x36, offset 0x13b + {value: 0x0000, lo: 0x04}, + {value: 0x8132, lo: 0xb0, hi: 0xb4}, + {value: 0x812d, lo: 0xb5, hi: 0xba}, + {value: 0x8132, lo: 0xbb, hi: 0xbc}, + {value: 0x812d, lo: 0xbd, hi: 0xbd}, + // Block 0x37, offset 0x140 + {value: 0x0000, lo: 0x08}, + {value: 0x2d66, lo: 0x80, hi: 0x80}, + {value: 0x2d6e, lo: 0x81, hi: 0x81}, + {value: 0xa000, lo: 0x82, hi: 0x82}, + {value: 0x2d76, lo: 0x83, hi: 0x83}, + {value: 0x8104, lo: 0x84, hi: 0x84}, + {value: 0x8132, lo: 0xab, hi: 0xab}, + {value: 0x812d, lo: 0xac, hi: 0xac}, + {value: 0x8132, lo: 0xad, hi: 0xb3}, + // Block 0x38, offset 0x149 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0xaa, hi: 0xab}, + // Block 0x39, offset 0x14b + {value: 0x0000, lo: 0x02}, + {value: 0x8102, lo: 0xa6, hi: 0xa6}, + {value: 0x8104, lo: 0xb2, hi: 0xb3}, + // Block 0x3a, offset 0x14e + {value: 0x0000, lo: 0x01}, + {value: 0x8102, lo: 0xb7, hi: 0xb7}, + // Block 0x3b, offset 0x150 + {value: 0x0000, lo: 0x0a}, + {value: 0x8132, lo: 0x90, hi: 0x92}, + {value: 0x8101, lo: 0x94, hi: 0x94}, + {value: 0x812d, lo: 0x95, hi: 0x99}, + {value: 0x8132, lo: 0x9a, hi: 0x9b}, + {value: 0x812d, lo: 0x9c, hi: 0x9f}, + {value: 0x8132, lo: 0xa0, hi: 0xa0}, + {value: 0x8101, lo: 0xa2, hi: 0xa8}, + {value: 0x812d, lo: 0xad, hi: 0xad}, + {value: 0x8132, lo: 0xb4, hi: 0xb4}, + {value: 0x8132, lo: 0xb8, hi: 0xb9}, + // Block 0x3c, offset 0x15b + {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 0x166 + {value: 0x0000, lo: 0x0f}, + {value: 0x8132, lo: 0x80, hi: 0x81}, + {value: 0x812d, lo: 0x82, hi: 0x82}, + {value: 0x8132, lo: 0x83, hi: 0x89}, + {value: 0x812d, lo: 0x8a, hi: 0x8a}, + {value: 0x8132, lo: 0x8b, hi: 0x8c}, + {value: 0x8135, lo: 0x8d, hi: 0x8d}, + {value: 0x812a, lo: 0x8e, hi: 0x8e}, + {value: 0x812d, lo: 0x8f, hi: 0x8f}, + {value: 0x8129, lo: 0x90, hi: 0x90}, + {value: 0x8132, lo: 0x91, hi: 0xb5}, + {value: 0x8132, lo: 0xbb, hi: 0xbb}, + {value: 0x8134, lo: 0xbc, hi: 0xbc}, + {value: 0x812d, lo: 0xbd, hi: 0xbd}, + {value: 0x8132, lo: 0xbe, hi: 0xbe}, + {value: 0x812d, lo: 0xbf, hi: 0xbf}, + // Block 0x3e, offset 0x176 + {value: 0x0000, lo: 0x0d}, + {value: 0x0001, lo: 0x80, hi: 0x8a}, + {value: 0x043b, lo: 0x91, hi: 0x91}, + {value: 0x429b, lo: 0x97, hi: 0x97}, + {value: 0x001d, lo: 0xa4, hi: 0xa4}, + {value: 0x1873, lo: 0xa5, hi: 0xa5}, + {value: 0x1b5c, lo: 0xa6, hi: 0xa6}, + {value: 0x0001, lo: 0xaf, hi: 0xaf}, + {value: 0x2691, lo: 0xb3, hi: 0xb3}, + {value: 0x27fe, lo: 0xb4, hi: 0xb4}, + {value: 0x2698, lo: 0xb6, hi: 0xb6}, + {value: 0x2808, lo: 0xb7, hi: 0xb7}, + {value: 0x186d, lo: 0xbc, hi: 0xbc}, + {value: 0x4269, lo: 0xbe, hi: 0xbe}, + // Block 0x3f, offset 0x184 + {value: 0x0002, lo: 0x0d}, + {value: 0x1933, lo: 0x87, hi: 0x87}, + {value: 0x1930, lo: 0x88, hi: 0x88}, + {value: 0x1870, lo: 0x89, hi: 0x89}, + {value: 0x298e, 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: 0x0467, lo: 0xbb, hi: 0xbb}, + {value: 0x003b, lo: 0xbc, hi: 0xbc}, + {value: 0x0011, lo: 0xbd, hi: 0xbe}, + {value: 0x009d, lo: 0xbf, hi: 0xbf}, + // Block 0x40, offset 0x192 + {value: 0x0002, lo: 0x0f}, + {value: 0x0021, lo: 0x80, hi: 0x89}, + {value: 0x0017, lo: 0x8a, hi: 0x8a}, + {value: 0x0467, 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: 0x1999, lo: 0xa8, hi: 0xa8}, + // Block 0x41, offset 0x1a2 + {value: 0x0000, lo: 0x0d}, + {value: 0x8132, lo: 0x90, hi: 0x91}, + {value: 0x8101, lo: 0x92, hi: 0x93}, + {value: 0x8132, lo: 0x94, hi: 0x97}, + {value: 0x8101, lo: 0x98, hi: 0x9a}, + {value: 0x8132, lo: 0x9b, hi: 0x9c}, + {value: 0x8132, lo: 0xa1, hi: 0xa1}, + {value: 0x8101, lo: 0xa5, hi: 0xa6}, + {value: 0x8132, lo: 0xa7, hi: 0xa7}, + {value: 0x812d, lo: 0xa8, hi: 0xa8}, + {value: 0x8132, lo: 0xa9, hi: 0xa9}, + {value: 0x8101, lo: 0xaa, hi: 0xab}, + {value: 0x812d, lo: 0xac, hi: 0xaf}, + {value: 0x8132, lo: 0xb0, hi: 0xb0}, + // Block 0x42, offset 0x1b0 + {value: 0x0007, lo: 0x06}, + {value: 0x2180, lo: 0x89, hi: 0x89}, + {value: 0xa000, lo: 0x90, hi: 0x90}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0xa000, lo: 0x94, hi: 0x94}, + {value: 0x3bb9, lo: 0x9a, hi: 0x9b}, + {value: 0x3bc7, lo: 0xae, hi: 0xae}, + // Block 0x43, offset 0x1b7 + {value: 0x000e, lo: 0x05}, + {value: 0x3bce, lo: 0x8d, hi: 0x8e}, + {value: 0x3bd5, lo: 0x8f, hi: 0x8f}, + {value: 0xa000, lo: 0x90, hi: 0x90}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0xa000, lo: 0x94, hi: 0x94}, + // Block 0x44, offset 0x1bd + {value: 0x0173, lo: 0x0e}, + {value: 0xa000, lo: 0x83, hi: 0x83}, + {value: 0x3be3, lo: 0x84, hi: 0x84}, + {value: 0xa000, lo: 0x88, hi: 0x88}, + {value: 0x3bea, lo: 0x89, hi: 0x89}, + {value: 0xa000, lo: 0x8b, hi: 0x8b}, + {value: 0x3bf1, lo: 0x8c, hi: 0x8c}, + {value: 0xa000, lo: 0xa3, hi: 0xa3}, + {value: 0x3bf8, lo: 0xa4, hi: 0xa4}, + {value: 0xa000, lo: 0xa5, hi: 0xa5}, + {value: 0x3bff, lo: 0xa6, hi: 0xa6}, + {value: 0x269f, lo: 0xac, hi: 0xad}, + {value: 0x26a6, lo: 0xaf, hi: 0xaf}, + {value: 0x281c, lo: 0xb0, hi: 0xb0}, + {value: 0xa000, lo: 0xbc, hi: 0xbc}, + // Block 0x45, offset 0x1cc + {value: 0x0007, lo: 0x03}, + {value: 0x3c68, lo: 0xa0, hi: 0xa1}, + {value: 0x3c92, lo: 0xa2, hi: 0xa3}, + {value: 0x3cbc, lo: 0xaa, hi: 0xad}, + // Block 0x46, offset 0x1d0 + {value: 0x0004, lo: 0x01}, + {value: 0x048b, lo: 0xa9, hi: 0xaa}, + // Block 0x47, offset 0x1d2 + {value: 0x0002, lo: 0x03}, + {value: 0x0057, lo: 0x80, hi: 0x8f}, + {value: 0x0083, lo: 0x90, hi: 0xa9}, + {value: 0x0021, lo: 0xaa, hi: 0xaa}, + // Block 0x48, offset 0x1d6 + {value: 0x0000, lo: 0x01}, + {value: 0x299b, lo: 0x8c, hi: 0x8c}, + // Block 0x49, offset 0x1d8 + {value: 0x0263, lo: 0x02}, + {value: 0x1b8c, lo: 0xb4, hi: 0xb4}, + {value: 0x192d, lo: 0xb5, hi: 0xb6}, + // Block 0x4a, offset 0x1db + {value: 0x0000, lo: 0x01}, + {value: 0x44dd, lo: 0x9c, hi: 0x9c}, + // Block 0x4b, offset 0x1dd + {value: 0x0000, lo: 0x02}, + {value: 0x0095, lo: 0xbc, hi: 0xbc}, + {value: 0x006d, lo: 0xbd, hi: 0xbd}, + // Block 0x4c, offset 0x1e0 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xaf, hi: 0xb1}, + // Block 0x4d, offset 0x1e2 + {value: 0x0000, lo: 0x02}, + {value: 0x047f, lo: 0xaf, hi: 0xaf}, + {value: 0x8104, lo: 0xbf, hi: 0xbf}, + // Block 0x4e, offset 0x1e5 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xa0, hi: 0xbf}, + // Block 0x4f, offset 0x1e7 + {value: 0x0000, lo: 0x01}, + {value: 0x0dc3, lo: 0x9f, hi: 0x9f}, + // Block 0x50, offset 0x1e9 + {value: 0x0000, lo: 0x01}, + {value: 0x162f, lo: 0xb3, hi: 0xb3}, + // Block 0x51, offset 0x1eb + {value: 0x0004, lo: 0x0b}, + {value: 0x1597, lo: 0x80, hi: 0x82}, + {value: 0x15af, lo: 0x83, hi: 0x83}, + {value: 0x15c7, lo: 0x84, hi: 0x85}, + {value: 0x15d7, lo: 0x86, hi: 0x89}, + {value: 0x15eb, lo: 0x8a, hi: 0x8c}, + {value: 0x15ff, lo: 0x8d, hi: 0x8d}, + {value: 0x1607, lo: 0x8e, hi: 0x8e}, + {value: 0x160f, lo: 0x8f, hi: 0x90}, + {value: 0x161b, lo: 0x91, hi: 0x93}, + {value: 0x162b, lo: 0x94, hi: 0x94}, + {value: 0x1633, lo: 0x95, hi: 0x95}, + // Block 0x52, offset 0x1f7 + {value: 0x0004, lo: 0x09}, + {value: 0x0001, lo: 0x80, hi: 0x80}, + {value: 0x812c, lo: 0xaa, hi: 0xaa}, + {value: 0x8131, lo: 0xab, hi: 0xab}, + {value: 0x8133, lo: 0xac, hi: 0xac}, + {value: 0x812e, lo: 0xad, hi: 0xad}, + {value: 0x812f, lo: 0xae, hi: 0xae}, + {value: 0x812f, lo: 0xaf, hi: 0xaf}, + {value: 0x04b3, lo: 0xb6, hi: 0xb6}, + {value: 0x0887, lo: 0xb8, hi: 0xba}, + // Block 0x53, offset 0x201 + {value: 0x0006, lo: 0x09}, + {value: 0x0313, lo: 0xb1, hi: 0xb1}, + {value: 0x0317, lo: 0xb2, hi: 0xb2}, + {value: 0x4a3b, lo: 0xb3, hi: 0xb3}, + {value: 0x031b, lo: 0xb4, hi: 0xb4}, + {value: 0x4a41, lo: 0xb5, hi: 0xb6}, + {value: 0x031f, lo: 0xb7, hi: 0xb7}, + {value: 0x0323, lo: 0xb8, hi: 0xb8}, + {value: 0x0327, lo: 0xb9, hi: 0xb9}, + {value: 0x4a4d, lo: 0xba, hi: 0xbf}, + // Block 0x54, offset 0x20b + {value: 0x0000, lo: 0x02}, + {value: 0x8132, lo: 0xaf, hi: 0xaf}, + {value: 0x8132, lo: 0xb4, hi: 0xbd}, + // Block 0x55, offset 0x20e + {value: 0x0000, lo: 0x03}, + {value: 0x020f, lo: 0x9c, hi: 0x9c}, + {value: 0x0212, lo: 0x9d, hi: 0x9d}, + {value: 0x8132, lo: 0x9e, hi: 0x9f}, + // Block 0x56, offset 0x212 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xb0, hi: 0xb1}, + // Block 0x57, offset 0x214 + {value: 0x0000, lo: 0x01}, + {value: 0x163b, lo: 0xb0, hi: 0xb0}, + // Block 0x58, offset 0x216 + {value: 0x000c, lo: 0x01}, + {value: 0x00d7, lo: 0xb8, hi: 0xb9}, + // Block 0x59, offset 0x218 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0x86, hi: 0x86}, + // Block 0x5a, offset 0x21a + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x84, hi: 0x84}, + {value: 0x8132, lo: 0xa0, hi: 0xb1}, + // Block 0x5b, offset 0x21d + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0xab, hi: 0xad}, + // Block 0x5c, offset 0x21f + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0x93, hi: 0x93}, + // Block 0x5d, offset 0x221 + {value: 0x0000, lo: 0x01}, + {value: 0x8102, lo: 0xb3, hi: 0xb3}, + // Block 0x5e, offset 0x223 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0x80, hi: 0x80}, + // Block 0x5f, offset 0x225 + {value: 0x0000, lo: 0x05}, + {value: 0x8132, lo: 0xb0, hi: 0xb0}, + {value: 0x8132, lo: 0xb2, hi: 0xb3}, + {value: 0x812d, lo: 0xb4, hi: 0xb4}, + {value: 0x8132, lo: 0xb7, hi: 0xb8}, + {value: 0x8132, lo: 0xbe, hi: 0xbf}, + // Block 0x60, offset 0x22b + {value: 0x0000, lo: 0x02}, + {value: 0x8132, lo: 0x81, hi: 0x81}, + {value: 0x8104, lo: 0xb6, hi: 0xb6}, + // Block 0x61, offset 0x22e + {value: 0x0008, lo: 0x03}, + {value: 0x1637, lo: 0x9c, hi: 0x9d}, + {value: 0x0125, lo: 0x9e, hi: 0x9e}, + {value: 0x1643, lo: 0x9f, hi: 0x9f}, + // Block 0x62, offset 0x232 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0xad, hi: 0xad}, + // Block 0x63, offset 0x234 + {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 0x64, offset 0x23b + {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 0x65, offset 0x241 + {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 0x66, offset 0x247 + {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 0x67, offset 0x24f + {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 0x68, offset 0x255 + {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 0x69, offset 0x25b + {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 0x6a, offset 0x261 + {value: 0x0000, lo: 0x03}, + {value: 0xc600, lo: 0x80, hi: 0x87}, + {value: 0xe500, lo: 0x88, hi: 0x88}, + {value: 0xc600, lo: 0x89, hi: 0xa3}, + // Block 0x6b, offset 0x265 + {value: 0x0002, lo: 0x01}, + {value: 0x0003, lo: 0x81, hi: 0xbf}, + // Block 0x6c, offset 0x267 + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0xbd, hi: 0xbd}, + // Block 0x6d, offset 0x269 + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0xa0, hi: 0xa0}, + // Block 0x6e, offset 0x26b + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xb6, hi: 0xba}, + // Block 0x6f, offset 0x26d + {value: 0x002c, lo: 0x05}, + {value: 0x812d, lo: 0x8d, hi: 0x8d}, + {value: 0x8132, lo: 0x8f, hi: 0x8f}, + {value: 0x8132, lo: 0xb8, hi: 0xb8}, + {value: 0x8101, lo: 0xb9, hi: 0xba}, + {value: 0x8104, lo: 0xbf, hi: 0xbf}, + // Block 0x70, offset 0x273 + {value: 0x0000, lo: 0x02}, + {value: 0x8132, lo: 0xa5, hi: 0xa5}, + {value: 0x812d, lo: 0xa6, hi: 0xa6}, + // Block 0x71, offset 0x276 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x86, hi: 0x86}, + {value: 0x8104, lo: 0xbf, hi: 0xbf}, + // Block 0x72, offset 0x279 + {value: 0x17fe, lo: 0x07}, + {value: 0xa000, lo: 0x99, hi: 0x99}, + {value: 0x4238, lo: 0x9a, hi: 0x9a}, + {value: 0xa000, lo: 0x9b, hi: 0x9b}, + {value: 0x4242, lo: 0x9c, hi: 0x9c}, + {value: 0xa000, lo: 0xa5, hi: 0xa5}, + {value: 0x424c, lo: 0xab, hi: 0xab}, + {value: 0x8104, lo: 0xb9, hi: 0xba}, + // Block 0x73, offset 0x281 + {value: 0x0000, lo: 0x06}, + {value: 0x8132, lo: 0x80, hi: 0x82}, + {value: 0x9900, lo: 0xa7, hi: 0xa7}, + {value: 0x2d7e, lo: 0xae, hi: 0xae}, + {value: 0x2d88, lo: 0xaf, hi: 0xaf}, + {value: 0xa000, lo: 0xb1, hi: 0xb2}, + {value: 0x8104, lo: 0xb3, hi: 0xb4}, + // Block 0x74, offset 0x288 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x80, hi: 0x80}, + {value: 0x8102, lo: 0x8a, hi: 0x8a}, + // Block 0x75, offset 0x28b + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0xb5, hi: 0xb5}, + {value: 0x8102, lo: 0xb6, hi: 0xb6}, + // Block 0x76, offset 0x28e + {value: 0x0002, lo: 0x01}, + {value: 0x8102, lo: 0xa9, hi: 0xaa}, + // Block 0x77, offset 0x290 + {value: 0x0000, lo: 0x07}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0x2d92, lo: 0x8b, hi: 0x8b}, + {value: 0x2d9c, lo: 0x8c, hi: 0x8c}, + {value: 0x8104, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + {value: 0x8132, lo: 0xa6, hi: 0xac}, + {value: 0x8132, lo: 0xb0, hi: 0xb4}, + // Block 0x78, offset 0x298 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x82, hi: 0x82}, + {value: 0x8102, lo: 0x86, hi: 0x86}, + // Block 0x79, offset 0x29b + {value: 0x6b5a, lo: 0x06}, + {value: 0x9900, lo: 0xb0, hi: 0xb0}, + {value: 0xa000, lo: 0xb9, hi: 0xb9}, + {value: 0x9900, lo: 0xba, hi: 0xba}, + {value: 0x2db0, lo: 0xbb, hi: 0xbb}, + {value: 0x2da6, lo: 0xbc, hi: 0xbd}, + {value: 0x2dba, lo: 0xbe, hi: 0xbe}, + // Block 0x7a, offset 0x2a2 + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0x82, hi: 0x82}, + {value: 0x8102, lo: 0x83, hi: 0x83}, + // Block 0x7b, offset 0x2a5 + {value: 0x0000, lo: 0x05}, + {value: 0x9900, lo: 0xaf, hi: 0xaf}, + {value: 0xa000, lo: 0xb8, hi: 0xb9}, + {value: 0x2dc4, lo: 0xba, hi: 0xba}, + {value: 0x2dce, lo: 0xbb, hi: 0xbb}, + {value: 0x8104, lo: 0xbf, hi: 0xbf}, + // Block 0x7c, offset 0x2ab + {value: 0x0000, lo: 0x01}, + {value: 0x8102, lo: 0x80, hi: 0x80}, + // Block 0x7d, offset 0x2ad + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0xbf, hi: 0xbf}, + // Block 0x7e, offset 0x2af + {value: 0x0000, lo: 0x02}, + {value: 0x8104, lo: 0xb6, hi: 0xb6}, + {value: 0x8102, lo: 0xb7, hi: 0xb7}, + // Block 0x7f, offset 0x2b2 + {value: 0x0000, lo: 0x01}, + {value: 0x8104, lo: 0xab, hi: 0xab}, + // Block 0x80, offset 0x2b4 + {value: 0x0000, lo: 0x01}, + {value: 0x8101, lo: 0xb0, hi: 0xb4}, + // Block 0x81, offset 0x2b6 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xb0, hi: 0xb6}, + // Block 0x82, offset 0x2b8 + {value: 0x0000, lo: 0x01}, + {value: 0x8101, lo: 0x9e, hi: 0x9e}, + // Block 0x83, offset 0x2ba + {value: 0x0000, lo: 0x0c}, + {value: 0x45cc, lo: 0x9e, hi: 0x9e}, + {value: 0x45d6, lo: 0x9f, hi: 0x9f}, + {value: 0x460a, lo: 0xa0, hi: 0xa0}, + {value: 0x4618, lo: 0xa1, hi: 0xa1}, + {value: 0x4626, lo: 0xa2, hi: 0xa2}, + {value: 0x4634, lo: 0xa3, hi: 0xa3}, + {value: 0x4642, lo: 0xa4, hi: 0xa4}, + {value: 0x812b, lo: 0xa5, hi: 0xa6}, + {value: 0x8101, lo: 0xa7, hi: 0xa9}, + {value: 0x8130, lo: 0xad, hi: 0xad}, + {value: 0x812b, lo: 0xae, hi: 0xb2}, + {value: 0x812d, lo: 0xbb, hi: 0xbf}, + // Block 0x84, offset 0x2c7 + {value: 0x0000, lo: 0x09}, + {value: 0x812d, lo: 0x80, hi: 0x82}, + {value: 0x8132, lo: 0x85, hi: 0x89}, + {value: 0x812d, lo: 0x8a, hi: 0x8b}, + {value: 0x8132, lo: 0xaa, hi: 0xad}, + {value: 0x45e0, lo: 0xbb, hi: 0xbb}, + {value: 0x45ea, lo: 0xbc, hi: 0xbc}, + {value: 0x4650, lo: 0xbd, hi: 0xbd}, + {value: 0x466c, lo: 0xbe, hi: 0xbe}, + {value: 0x465e, lo: 0xbf, hi: 0xbf}, + // Block 0x85, offset 0x2d1 + {value: 0x0000, lo: 0x01}, + {value: 0x467a, lo: 0x80, hi: 0x80}, + // Block 0x86, offset 0x2d3 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0x82, hi: 0x84}, + // Block 0x87, offset 0x2d5 + {value: 0x0002, lo: 0x03}, + {value: 0x0043, lo: 0x80, hi: 0x99}, + {value: 0x0083, lo: 0x9a, hi: 0xb3}, + {value: 0x0043, lo: 0xb4, hi: 0xbf}, + // Block 0x88, offset 0x2d9 + {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 0x89, offset 0x2de + {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 0x8a, offset 0x2ea + {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 0x8b, offset 0x2ef + {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 0x8c, offset 0x2f8 + {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 0x8d, offset 0x2fe + {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 0x8e, offset 0x303 + {value: 0x0002, lo: 0x03}, + {value: 0x008f, lo: 0x80, hi: 0x93}, + {value: 0x0043, lo: 0x94, hi: 0xad}, + {value: 0x0083, lo: 0xae, hi: 0xbf}, + // Block 0x8f, offset 0x307 + {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 0x90, offset 0x30c + {value: 0x0002, lo: 0x03}, + {value: 0x004b, lo: 0x80, hi: 0x95}, + {value: 0x0083, lo: 0x96, hi: 0xaf}, + {value: 0x0043, lo: 0xb0, hi: 0xbf}, + // Block 0x91, offset 0x310 + {value: 0x0003, lo: 0x0f}, + {value: 0x01b8, lo: 0x80, hi: 0x80}, + {value: 0x045f, lo: 0x81, hi: 0x81}, + {value: 0x01bb, lo: 0x82, hi: 0x9a}, + {value: 0x045b, lo: 0x9b, hi: 0x9b}, + {value: 0x01c7, lo: 0x9c, hi: 0x9c}, + {value: 0x01d0, lo: 0x9d, hi: 0x9d}, + {value: 0x01d6, lo: 0x9e, hi: 0x9e}, + {value: 0x01fa, lo: 0x9f, hi: 0x9f}, + {value: 0x01eb, lo: 0xa0, hi: 0xa0}, + {value: 0x01e8, lo: 0xa1, hi: 0xa1}, + {value: 0x0173, lo: 0xa2, hi: 0xb2}, + {value: 0x0188, lo: 0xb3, hi: 0xb3}, + {value: 0x01a6, lo: 0xb4, hi: 0xba}, + {value: 0x045f, lo: 0xbb, hi: 0xbb}, + {value: 0x01bb, lo: 0xbc, hi: 0xbf}, + // Block 0x92, offset 0x320 + {value: 0x0003, lo: 0x0d}, + {value: 0x01c7, lo: 0x80, hi: 0x94}, + {value: 0x045b, lo: 0x95, hi: 0x95}, + {value: 0x01c7, lo: 0x96, hi: 0x96}, + {value: 0x01d0, lo: 0x97, hi: 0x97}, + {value: 0x01d6, lo: 0x98, hi: 0x98}, + {value: 0x01fa, lo: 0x99, hi: 0x99}, + {value: 0x01eb, lo: 0x9a, hi: 0x9a}, + {value: 0x01e8, lo: 0x9b, hi: 0x9b}, + {value: 0x0173, lo: 0x9c, hi: 0xac}, + {value: 0x0188, lo: 0xad, hi: 0xad}, + {value: 0x01a6, lo: 0xae, hi: 0xb4}, + {value: 0x045f, lo: 0xb5, hi: 0xb5}, + {value: 0x01bb, lo: 0xb6, hi: 0xbf}, + // Block 0x93, offset 0x32e + {value: 0x0003, lo: 0x0d}, + {value: 0x01d9, lo: 0x80, hi: 0x8e}, + {value: 0x045b, lo: 0x8f, hi: 0x8f}, + {value: 0x01c7, lo: 0x90, hi: 0x90}, + {value: 0x01d0, lo: 0x91, hi: 0x91}, + {value: 0x01d6, lo: 0x92, hi: 0x92}, + {value: 0x01fa, lo: 0x93, hi: 0x93}, + {value: 0x01eb, lo: 0x94, hi: 0x94}, + {value: 0x01e8, lo: 0x95, hi: 0x95}, + {value: 0x0173, lo: 0x96, hi: 0xa6}, + {value: 0x0188, lo: 0xa7, hi: 0xa7}, + {value: 0x01a6, lo: 0xa8, hi: 0xae}, + {value: 0x045f, lo: 0xaf, hi: 0xaf}, + {value: 0x01bb, lo: 0xb0, hi: 0xbf}, + // Block 0x94, offset 0x33c + {value: 0x0003, lo: 0x0d}, + {value: 0x01eb, lo: 0x80, hi: 0x88}, + {value: 0x045b, lo: 0x89, hi: 0x89}, + {value: 0x01c7, lo: 0x8a, hi: 0x8a}, + {value: 0x01d0, lo: 0x8b, hi: 0x8b}, + {value: 0x01d6, lo: 0x8c, hi: 0x8c}, + {value: 0x01fa, lo: 0x8d, hi: 0x8d}, + {value: 0x01eb, lo: 0x8e, hi: 0x8e}, + {value: 0x01e8, lo: 0x8f, hi: 0x8f}, + {value: 0x0173, lo: 0x90, hi: 0xa0}, + {value: 0x0188, lo: 0xa1, hi: 0xa1}, + {value: 0x01a6, lo: 0xa2, hi: 0xa8}, + {value: 0x045f, lo: 0xa9, hi: 0xa9}, + {value: 0x01bb, lo: 0xaa, hi: 0xbf}, + // Block 0x95, offset 0x34a + {value: 0x0000, lo: 0x05}, + {value: 0x8132, lo: 0x80, hi: 0x86}, + {value: 0x8132, lo: 0x88, hi: 0x98}, + {value: 0x8132, lo: 0x9b, hi: 0xa1}, + {value: 0x8132, lo: 0xa3, hi: 0xa4}, + {value: 0x8132, lo: 0xa6, hi: 0xaa}, + // Block 0x96, offset 0x350 + {value: 0x0000, lo: 0x01}, + {value: 0x812d, lo: 0x90, hi: 0x96}, + // Block 0x97, offset 0x352 + {value: 0x0000, lo: 0x02}, + {value: 0x8132, lo: 0x84, hi: 0x89}, + {value: 0x8102, lo: 0x8a, hi: 0x8a}, + // Block 0x98, offset 0x355 + {value: 0x0002, lo: 0x09}, + {value: 0x0063, lo: 0x80, hi: 0x89}, + {value: 0x1951, lo: 0x8a, hi: 0x8a}, + {value: 0x1981, lo: 0x8b, hi: 0x8b}, + {value: 0x199c, lo: 0x8c, hi: 0x8c}, + {value: 0x19a2, lo: 0x8d, hi: 0x8d}, + {value: 0x1bc0, lo: 0x8e, hi: 0x8e}, + {value: 0x19ae, lo: 0x8f, hi: 0x8f}, + {value: 0x197b, lo: 0xaa, hi: 0xaa}, + {value: 0x197e, lo: 0xab, hi: 0xab}, + // Block 0x99, offset 0x35f + {value: 0x0000, lo: 0x01}, + {value: 0x193f, lo: 0x90, hi: 0x90}, + // Block 0x9a, offset 0x361 + {value: 0x0028, lo: 0x09}, + {value: 0x2862, lo: 0x80, hi: 0x80}, + {value: 0x2826, lo: 0x81, hi: 0x81}, + {value: 0x2830, lo: 0x82, hi: 0x82}, + {value: 0x2844, lo: 0x83, hi: 0x84}, + {value: 0x284e, lo: 0x85, hi: 0x86}, + {value: 0x283a, lo: 0x87, hi: 0x87}, + {value: 0x2858, lo: 0x88, hi: 0x88}, + {value: 0x0b6f, lo: 0x90, hi: 0x90}, + {value: 0x08e7, lo: 0x91, hi: 0x91}, +} + +// recompMap: 7520 bytes (entries only) +var recompMap = map[uint32]rune{ + 0x00410300: 0x00C0, + 0x00410301: 0x00C1, + 0x00410302: 0x00C2, + 0x00410303: 0x00C3, + 0x00410308: 0x00C4, + 0x0041030A: 0x00C5, + 0x00430327: 0x00C7, + 0x00450300: 0x00C8, + 0x00450301: 0x00C9, + 0x00450302: 0x00CA, + 0x00450308: 0x00CB, + 0x00490300: 0x00CC, + 0x00490301: 0x00CD, + 0x00490302: 0x00CE, + 0x00490308: 0x00CF, + 0x004E0303: 0x00D1, + 0x004F0300: 0x00D2, + 0x004F0301: 0x00D3, + 0x004F0302: 0x00D4, + 0x004F0303: 0x00D5, + 0x004F0308: 0x00D6, + 0x00550300: 0x00D9, + 0x00550301: 0x00DA, + 0x00550302: 0x00DB, + 0x00550308: 0x00DC, + 0x00590301: 0x00DD, + 0x00610300: 0x00E0, + 0x00610301: 0x00E1, + 0x00610302: 0x00E2, + 0x00610303: 0x00E3, + 0x00610308: 0x00E4, + 0x0061030A: 0x00E5, + 0x00630327: 0x00E7, + 0x00650300: 0x00E8, + 0x00650301: 0x00E9, + 0x00650302: 0x00EA, + 0x00650308: 0x00EB, + 0x00690300: 0x00EC, + 0x00690301: 0x00ED, + 0x00690302: 0x00EE, + 0x00690308: 0x00EF, + 0x006E0303: 0x00F1, + 0x006F0300: 0x00F2, + 0x006F0301: 0x00F3, + 0x006F0302: 0x00F4, + 0x006F0303: 0x00F5, + 0x006F0308: 0x00F6, + 0x00750300: 0x00F9, + 0x00750301: 0x00FA, + 0x00750302: 0x00FB, + 0x00750308: 0x00FC, + 0x00790301: 0x00FD, + 0x00790308: 0x00FF, + 0x00410304: 0x0100, + 0x00610304: 0x0101, + 0x00410306: 0x0102, + 0x00610306: 0x0103, + 0x00410328: 0x0104, + 0x00610328: 0x0105, + 0x00430301: 0x0106, + 0x00630301: 0x0107, + 0x00430302: 0x0108, + 0x00630302: 0x0109, + 0x00430307: 0x010A, + 0x00630307: 0x010B, + 0x0043030C: 0x010C, + 0x0063030C: 0x010D, + 0x0044030C: 0x010E, + 0x0064030C: 0x010F, + 0x00450304: 0x0112, + 0x00650304: 0x0113, + 0x00450306: 0x0114, + 0x00650306: 0x0115, + 0x00450307: 0x0116, + 0x00650307: 0x0117, + 0x00450328: 0x0118, + 0x00650328: 0x0119, + 0x0045030C: 0x011A, + 0x0065030C: 0x011B, + 0x00470302: 0x011C, + 0x00670302: 0x011D, + 0x00470306: 0x011E, + 0x00670306: 0x011F, + 0x00470307: 0x0120, + 0x00670307: 0x0121, + 0x00470327: 0x0122, + 0x00670327: 0x0123, + 0x00480302: 0x0124, + 0x00680302: 0x0125, + 0x00490303: 0x0128, + 0x00690303: 0x0129, + 0x00490304: 0x012A, + 0x00690304: 0x012B, + 0x00490306: 0x012C, + 0x00690306: 0x012D, + 0x00490328: 0x012E, + 0x00690328: 0x012F, + 0x00490307: 0x0130, + 0x004A0302: 0x0134, + 0x006A0302: 0x0135, + 0x004B0327: 0x0136, + 0x006B0327: 0x0137, + 0x004C0301: 0x0139, + 0x006C0301: 0x013A, + 0x004C0327: 0x013B, + 0x006C0327: 0x013C, + 0x004C030C: 0x013D, + 0x006C030C: 0x013E, + 0x004E0301: 0x0143, + 0x006E0301: 0x0144, + 0x004E0327: 0x0145, + 0x006E0327: 0x0146, + 0x004E030C: 0x0147, + 0x006E030C: 0x0148, + 0x004F0304: 0x014C, + 0x006F0304: 0x014D, + 0x004F0306: 0x014E, + 0x006F0306: 0x014F, + 0x004F030B: 0x0150, + 0x006F030B: 0x0151, + 0x00520301: 0x0154, + 0x00720301: 0x0155, + 0x00520327: 0x0156, + 0x00720327: 0x0157, + 0x0052030C: 0x0158, + 0x0072030C: 0x0159, + 0x00530301: 0x015A, + 0x00730301: 0x015B, + 0x00530302: 0x015C, + 0x00730302: 0x015D, + 0x00530327: 0x015E, + 0x00730327: 0x015F, + 0x0053030C: 0x0160, + 0x0073030C: 0x0161, + 0x00540327: 0x0162, + 0x00740327: 0x0163, + 0x0054030C: 0x0164, + 0x0074030C: 0x0165, + 0x00550303: 0x0168, + 0x00750303: 0x0169, + 0x00550304: 0x016A, + 0x00750304: 0x016B, + 0x00550306: 0x016C, + 0x00750306: 0x016D, + 0x0055030A: 0x016E, + 0x0075030A: 0x016F, + 0x0055030B: 0x0170, + 0x0075030B: 0x0171, + 0x00550328: 0x0172, + 0x00750328: 0x0173, + 0x00570302: 0x0174, + 0x00770302: 0x0175, + 0x00590302: 0x0176, + 0x00790302: 0x0177, + 0x00590308: 0x0178, + 0x005A0301: 0x0179, + 0x007A0301: 0x017A, + 0x005A0307: 0x017B, + 0x007A0307: 0x017C, + 0x005A030C: 0x017D, + 0x007A030C: 0x017E, + 0x004F031B: 0x01A0, + 0x006F031B: 0x01A1, + 0x0055031B: 0x01AF, + 0x0075031B: 0x01B0, + 0x0041030C: 0x01CD, + 0x0061030C: 0x01CE, + 0x0049030C: 0x01CF, + 0x0069030C: 0x01D0, + 0x004F030C: 0x01D1, + 0x006F030C: 0x01D2, + 0x0055030C: 0x01D3, + 0x0075030C: 0x01D4, + 0x00DC0304: 0x01D5, + 0x00FC0304: 0x01D6, + 0x00DC0301: 0x01D7, + 0x00FC0301: 0x01D8, + 0x00DC030C: 0x01D9, + 0x00FC030C: 0x01DA, + 0x00DC0300: 0x01DB, + 0x00FC0300: 0x01DC, + 0x00C40304: 0x01DE, + 0x00E40304: 0x01DF, + 0x02260304: 0x01E0, + 0x02270304: 0x01E1, + 0x00C60304: 0x01E2, + 0x00E60304: 0x01E3, + 0x0047030C: 0x01E6, + 0x0067030C: 0x01E7, + 0x004B030C: 0x01E8, + 0x006B030C: 0x01E9, + 0x004F0328: 0x01EA, + 0x006F0328: 0x01EB, + 0x01EA0304: 0x01EC, + 0x01EB0304: 0x01ED, + 0x01B7030C: 0x01EE, + 0x0292030C: 0x01EF, + 0x006A030C: 0x01F0, + 0x00470301: 0x01F4, + 0x00670301: 0x01F5, + 0x004E0300: 0x01F8, + 0x006E0300: 0x01F9, + 0x00C50301: 0x01FA, + 0x00E50301: 0x01FB, + 0x00C60301: 0x01FC, + 0x00E60301: 0x01FD, + 0x00D80301: 0x01FE, + 0x00F80301: 0x01FF, + 0x0041030F: 0x0200, + 0x0061030F: 0x0201, + 0x00410311: 0x0202, + 0x00610311: 0x0203, + 0x0045030F: 0x0204, + 0x0065030F: 0x0205, + 0x00450311: 0x0206, + 0x00650311: 0x0207, + 0x0049030F: 0x0208, + 0x0069030F: 0x0209, + 0x00490311: 0x020A, + 0x00690311: 0x020B, + 0x004F030F: 0x020C, + 0x006F030F: 0x020D, + 0x004F0311: 0x020E, + 0x006F0311: 0x020F, + 0x0052030F: 0x0210, + 0x0072030F: 0x0211, + 0x00520311: 0x0212, + 0x00720311: 0x0213, + 0x0055030F: 0x0214, + 0x0075030F: 0x0215, + 0x00550311: 0x0216, + 0x00750311: 0x0217, + 0x00530326: 0x0218, + 0x00730326: 0x0219, + 0x00540326: 0x021A, + 0x00740326: 0x021B, + 0x0048030C: 0x021E, + 0x0068030C: 0x021F, + 0x00410307: 0x0226, + 0x00610307: 0x0227, + 0x00450327: 0x0228, + 0x00650327: 0x0229, + 0x00D60304: 0x022A, + 0x00F60304: 0x022B, + 0x00D50304: 0x022C, + 0x00F50304: 0x022D, + 0x004F0307: 0x022E, + 0x006F0307: 0x022F, + 0x022E0304: 0x0230, + 0x022F0304: 0x0231, + 0x00590304: 0x0232, + 0x00790304: 0x0233, + 0x00A80301: 0x0385, + 0x03910301: 0x0386, + 0x03950301: 0x0388, + 0x03970301: 0x0389, + 0x03990301: 0x038A, + 0x039F0301: 0x038C, + 0x03A50301: 0x038E, + 0x03A90301: 0x038F, + 0x03CA0301: 0x0390, + 0x03990308: 0x03AA, + 0x03A50308: 0x03AB, + 0x03B10301: 0x03AC, + 0x03B50301: 0x03AD, + 0x03B70301: 0x03AE, + 0x03B90301: 0x03AF, + 0x03CB0301: 0x03B0, + 0x03B90308: 0x03CA, + 0x03C50308: 0x03CB, + 0x03BF0301: 0x03CC, + 0x03C50301: 0x03CD, + 0x03C90301: 0x03CE, + 0x03D20301: 0x03D3, + 0x03D20308: 0x03D4, + 0x04150300: 0x0400, + 0x04150308: 0x0401, + 0x04130301: 0x0403, + 0x04060308: 0x0407, + 0x041A0301: 0x040C, + 0x04180300: 0x040D, + 0x04230306: 0x040E, + 0x04180306: 0x0419, + 0x04380306: 0x0439, + 0x04350300: 0x0450, + 0x04350308: 0x0451, + 0x04330301: 0x0453, + 0x04560308: 0x0457, + 0x043A0301: 0x045C, + 0x04380300: 0x045D, + 0x04430306: 0x045E, + 0x0474030F: 0x0476, + 0x0475030F: 0x0477, + 0x04160306: 0x04C1, + 0x04360306: 0x04C2, + 0x04100306: 0x04D0, + 0x04300306: 0x04D1, + 0x04100308: 0x04D2, + 0x04300308: 0x04D3, + 0x04150306: 0x04D6, + 0x04350306: 0x04D7, + 0x04D80308: 0x04DA, + 0x04D90308: 0x04DB, + 0x04160308: 0x04DC, + 0x04360308: 0x04DD, + 0x04170308: 0x04DE, + 0x04370308: 0x04DF, + 0x04180304: 0x04E2, + 0x04380304: 0x04E3, + 0x04180308: 0x04E4, + 0x04380308: 0x04E5, + 0x041E0308: 0x04E6, + 0x043E0308: 0x04E7, + 0x04E80308: 0x04EA, + 0x04E90308: 0x04EB, + 0x042D0308: 0x04EC, + 0x044D0308: 0x04ED, + 0x04230304: 0x04EE, + 0x04430304: 0x04EF, + 0x04230308: 0x04F0, + 0x04430308: 0x04F1, + 0x0423030B: 0x04F2, + 0x0443030B: 0x04F3, + 0x04270308: 0x04F4, + 0x04470308: 0x04F5, + 0x042B0308: 0x04F8, + 0x044B0308: 0x04F9, + 0x06270653: 0x0622, + 0x06270654: 0x0623, + 0x06480654: 0x0624, + 0x06270655: 0x0625, + 0x064A0654: 0x0626, + 0x06D50654: 0x06C0, + 0x06C10654: 0x06C2, + 0x06D20654: 0x06D3, + 0x0928093C: 0x0929, + 0x0930093C: 0x0931, + 0x0933093C: 0x0934, + 0x09C709BE: 0x09CB, + 0x09C709D7: 0x09CC, + 0x0B470B56: 0x0B48, + 0x0B470B3E: 0x0B4B, + 0x0B470B57: 0x0B4C, + 0x0B920BD7: 0x0B94, + 0x0BC60BBE: 0x0BCA, + 0x0BC70BBE: 0x0BCB, + 0x0BC60BD7: 0x0BCC, + 0x0C460C56: 0x0C48, + 0x0CBF0CD5: 0x0CC0, + 0x0CC60CD5: 0x0CC7, + 0x0CC60CD6: 0x0CC8, + 0x0CC60CC2: 0x0CCA, + 0x0CCA0CD5: 0x0CCB, + 0x0D460D3E: 0x0D4A, + 0x0D470D3E: 0x0D4B, + 0x0D460D57: 0x0D4C, + 0x0DD90DCA: 0x0DDA, + 0x0DD90DCF: 0x0DDC, + 0x0DDC0DCA: 0x0DDD, + 0x0DD90DDF: 0x0DDE, + 0x1025102E: 0x1026, + 0x1B051B35: 0x1B06, + 0x1B071B35: 0x1B08, + 0x1B091B35: 0x1B0A, + 0x1B0B1B35: 0x1B0C, + 0x1B0D1B35: 0x1B0E, + 0x1B111B35: 0x1B12, + 0x1B3A1B35: 0x1B3B, + 0x1B3C1B35: 0x1B3D, + 0x1B3E1B35: 0x1B40, + 0x1B3F1B35: 0x1B41, + 0x1B421B35: 0x1B43, + 0x00410325: 0x1E00, + 0x00610325: 0x1E01, + 0x00420307: 0x1E02, + 0x00620307: 0x1E03, + 0x00420323: 0x1E04, + 0x00620323: 0x1E05, + 0x00420331: 0x1E06, + 0x00620331: 0x1E07, + 0x00C70301: 0x1E08, + 0x00E70301: 0x1E09, + 0x00440307: 0x1E0A, + 0x00640307: 0x1E0B, + 0x00440323: 0x1E0C, + 0x00640323: 0x1E0D, + 0x00440331: 0x1E0E, + 0x00640331: 0x1E0F, + 0x00440327: 0x1E10, + 0x00640327: 0x1E11, + 0x0044032D: 0x1E12, + 0x0064032D: 0x1E13, + 0x01120300: 0x1E14, + 0x01130300: 0x1E15, + 0x01120301: 0x1E16, + 0x01130301: 0x1E17, + 0x0045032D: 0x1E18, + 0x0065032D: 0x1E19, + 0x00450330: 0x1E1A, + 0x00650330: 0x1E1B, + 0x02280306: 0x1E1C, + 0x02290306: 0x1E1D, + 0x00460307: 0x1E1E, + 0x00660307: 0x1E1F, + 0x00470304: 0x1E20, + 0x00670304: 0x1E21, + 0x00480307: 0x1E22, + 0x00680307: 0x1E23, + 0x00480323: 0x1E24, + 0x00680323: 0x1E25, + 0x00480308: 0x1E26, + 0x00680308: 0x1E27, + 0x00480327: 0x1E28, + 0x00680327: 0x1E29, + 0x0048032E: 0x1E2A, + 0x0068032E: 0x1E2B, + 0x00490330: 0x1E2C, + 0x00690330: 0x1E2D, + 0x00CF0301: 0x1E2E, + 0x00EF0301: 0x1E2F, + 0x004B0301: 0x1E30, + 0x006B0301: 0x1E31, + 0x004B0323: 0x1E32, + 0x006B0323: 0x1E33, + 0x004B0331: 0x1E34, + 0x006B0331: 0x1E35, + 0x004C0323: 0x1E36, + 0x006C0323: 0x1E37, + 0x1E360304: 0x1E38, + 0x1E370304: 0x1E39, + 0x004C0331: 0x1E3A, + 0x006C0331: 0x1E3B, + 0x004C032D: 0x1E3C, + 0x006C032D: 0x1E3D, + 0x004D0301: 0x1E3E, + 0x006D0301: 0x1E3F, + 0x004D0307: 0x1E40, + 0x006D0307: 0x1E41, + 0x004D0323: 0x1E42, + 0x006D0323: 0x1E43, + 0x004E0307: 0x1E44, + 0x006E0307: 0x1E45, + 0x004E0323: 0x1E46, + 0x006E0323: 0x1E47, + 0x004E0331: 0x1E48, + 0x006E0331: 0x1E49, + 0x004E032D: 0x1E4A, + 0x006E032D: 0x1E4B, + 0x00D50301: 0x1E4C, + 0x00F50301: 0x1E4D, + 0x00D50308: 0x1E4E, + 0x00F50308: 0x1E4F, + 0x014C0300: 0x1E50, + 0x014D0300: 0x1E51, + 0x014C0301: 0x1E52, + 0x014D0301: 0x1E53, + 0x00500301: 0x1E54, + 0x00700301: 0x1E55, + 0x00500307: 0x1E56, + 0x00700307: 0x1E57, + 0x00520307: 0x1E58, + 0x00720307: 0x1E59, + 0x00520323: 0x1E5A, + 0x00720323: 0x1E5B, + 0x1E5A0304: 0x1E5C, + 0x1E5B0304: 0x1E5D, + 0x00520331: 0x1E5E, + 0x00720331: 0x1E5F, + 0x00530307: 0x1E60, + 0x00730307: 0x1E61, + 0x00530323: 0x1E62, + 0x00730323: 0x1E63, + 0x015A0307: 0x1E64, + 0x015B0307: 0x1E65, + 0x01600307: 0x1E66, + 0x01610307: 0x1E67, + 0x1E620307: 0x1E68, + 0x1E630307: 0x1E69, + 0x00540307: 0x1E6A, + 0x00740307: 0x1E6B, + 0x00540323: 0x1E6C, + 0x00740323: 0x1E6D, + 0x00540331: 0x1E6E, + 0x00740331: 0x1E6F, + 0x0054032D: 0x1E70, + 0x0074032D: 0x1E71, + 0x00550324: 0x1E72, + 0x00750324: 0x1E73, + 0x00550330: 0x1E74, + 0x00750330: 0x1E75, + 0x0055032D: 0x1E76, + 0x0075032D: 0x1E77, + 0x01680301: 0x1E78, + 0x01690301: 0x1E79, + 0x016A0308: 0x1E7A, + 0x016B0308: 0x1E7B, + 0x00560303: 0x1E7C, + 0x00760303: 0x1E7D, + 0x00560323: 0x1E7E, + 0x00760323: 0x1E7F, + 0x00570300: 0x1E80, + 0x00770300: 0x1E81, + 0x00570301: 0x1E82, + 0x00770301: 0x1E83, + 0x00570308: 0x1E84, + 0x00770308: 0x1E85, + 0x00570307: 0x1E86, + 0x00770307: 0x1E87, + 0x00570323: 0x1E88, + 0x00770323: 0x1E89, + 0x00580307: 0x1E8A, + 0x00780307: 0x1E8B, + 0x00580308: 0x1E8C, + 0x00780308: 0x1E8D, + 0x00590307: 0x1E8E, + 0x00790307: 0x1E8F, + 0x005A0302: 0x1E90, + 0x007A0302: 0x1E91, + 0x005A0323: 0x1E92, + 0x007A0323: 0x1E93, + 0x005A0331: 0x1E94, + 0x007A0331: 0x1E95, + 0x00680331: 0x1E96, + 0x00740308: 0x1E97, + 0x0077030A: 0x1E98, + 0x0079030A: 0x1E99, + 0x017F0307: 0x1E9B, + 0x00410323: 0x1EA0, + 0x00610323: 0x1EA1, + 0x00410309: 0x1EA2, + 0x00610309: 0x1EA3, + 0x00C20301: 0x1EA4, + 0x00E20301: 0x1EA5, + 0x00C20300: 0x1EA6, + 0x00E20300: 0x1EA7, + 0x00C20309: 0x1EA8, + 0x00E20309: 0x1EA9, + 0x00C20303: 0x1EAA, + 0x00E20303: 0x1EAB, + 0x1EA00302: 0x1EAC, + 0x1EA10302: 0x1EAD, + 0x01020301: 0x1EAE, + 0x01030301: 0x1EAF, + 0x01020300: 0x1EB0, + 0x01030300: 0x1EB1, + 0x01020309: 0x1EB2, + 0x01030309: 0x1EB3, + 0x01020303: 0x1EB4, + 0x01030303: 0x1EB5, + 0x1EA00306: 0x1EB6, + 0x1EA10306: 0x1EB7, + 0x00450323: 0x1EB8, + 0x00650323: 0x1EB9, + 0x00450309: 0x1EBA, + 0x00650309: 0x1EBB, + 0x00450303: 0x1EBC, + 0x00650303: 0x1EBD, + 0x00CA0301: 0x1EBE, + 0x00EA0301: 0x1EBF, + 0x00CA0300: 0x1EC0, + 0x00EA0300: 0x1EC1, + 0x00CA0309: 0x1EC2, + 0x00EA0309: 0x1EC3, + 0x00CA0303: 0x1EC4, + 0x00EA0303: 0x1EC5, + 0x1EB80302: 0x1EC6, + 0x1EB90302: 0x1EC7, + 0x00490309: 0x1EC8, + 0x00690309: 0x1EC9, + 0x00490323: 0x1ECA, + 0x00690323: 0x1ECB, + 0x004F0323: 0x1ECC, + 0x006F0323: 0x1ECD, + 0x004F0309: 0x1ECE, + 0x006F0309: 0x1ECF, + 0x00D40301: 0x1ED0, + 0x00F40301: 0x1ED1, + 0x00D40300: 0x1ED2, + 0x00F40300: 0x1ED3, + 0x00D40309: 0x1ED4, + 0x00F40309: 0x1ED5, + 0x00D40303: 0x1ED6, + 0x00F40303: 0x1ED7, + 0x1ECC0302: 0x1ED8, + 0x1ECD0302: 0x1ED9, + 0x01A00301: 0x1EDA, + 0x01A10301: 0x1EDB, + 0x01A00300: 0x1EDC, + 0x01A10300: 0x1EDD, + 0x01A00309: 0x1EDE, + 0x01A10309: 0x1EDF, + 0x01A00303: 0x1EE0, + 0x01A10303: 0x1EE1, + 0x01A00323: 0x1EE2, + 0x01A10323: 0x1EE3, + 0x00550323: 0x1EE4, + 0x00750323: 0x1EE5, + 0x00550309: 0x1EE6, + 0x00750309: 0x1EE7, + 0x01AF0301: 0x1EE8, + 0x01B00301: 0x1EE9, + 0x01AF0300: 0x1EEA, + 0x01B00300: 0x1EEB, + 0x01AF0309: 0x1EEC, + 0x01B00309: 0x1EED, + 0x01AF0303: 0x1EEE, + 0x01B00303: 0x1EEF, + 0x01AF0323: 0x1EF0, + 0x01B00323: 0x1EF1, + 0x00590300: 0x1EF2, + 0x00790300: 0x1EF3, + 0x00590323: 0x1EF4, + 0x00790323: 0x1EF5, + 0x00590309: 0x1EF6, + 0x00790309: 0x1EF7, + 0x00590303: 0x1EF8, + 0x00790303: 0x1EF9, + 0x03B10313: 0x1F00, + 0x03B10314: 0x1F01, + 0x1F000300: 0x1F02, + 0x1F010300: 0x1F03, + 0x1F000301: 0x1F04, + 0x1F010301: 0x1F05, + 0x1F000342: 0x1F06, + 0x1F010342: 0x1F07, + 0x03910313: 0x1F08, + 0x03910314: 0x1F09, + 0x1F080300: 0x1F0A, + 0x1F090300: 0x1F0B, + 0x1F080301: 0x1F0C, + 0x1F090301: 0x1F0D, + 0x1F080342: 0x1F0E, + 0x1F090342: 0x1F0F, + 0x03B50313: 0x1F10, + 0x03B50314: 0x1F11, + 0x1F100300: 0x1F12, + 0x1F110300: 0x1F13, + 0x1F100301: 0x1F14, + 0x1F110301: 0x1F15, + 0x03950313: 0x1F18, + 0x03950314: 0x1F19, + 0x1F180300: 0x1F1A, + 0x1F190300: 0x1F1B, + 0x1F180301: 0x1F1C, + 0x1F190301: 0x1F1D, + 0x03B70313: 0x1F20, + 0x03B70314: 0x1F21, + 0x1F200300: 0x1F22, + 0x1F210300: 0x1F23, + 0x1F200301: 0x1F24, + 0x1F210301: 0x1F25, + 0x1F200342: 0x1F26, + 0x1F210342: 0x1F27, + 0x03970313: 0x1F28, + 0x03970314: 0x1F29, + 0x1F280300: 0x1F2A, + 0x1F290300: 0x1F2B, + 0x1F280301: 0x1F2C, + 0x1F290301: 0x1F2D, + 0x1F280342: 0x1F2E, + 0x1F290342: 0x1F2F, + 0x03B90313: 0x1F30, + 0x03B90314: 0x1F31, + 0x1F300300: 0x1F32, + 0x1F310300: 0x1F33, + 0x1F300301: 0x1F34, + 0x1F310301: 0x1F35, + 0x1F300342: 0x1F36, + 0x1F310342: 0x1F37, + 0x03990313: 0x1F38, + 0x03990314: 0x1F39, + 0x1F380300: 0x1F3A, + 0x1F390300: 0x1F3B, + 0x1F380301: 0x1F3C, + 0x1F390301: 0x1F3D, + 0x1F380342: 0x1F3E, + 0x1F390342: 0x1F3F, + 0x03BF0313: 0x1F40, + 0x03BF0314: 0x1F41, + 0x1F400300: 0x1F42, + 0x1F410300: 0x1F43, + 0x1F400301: 0x1F44, + 0x1F410301: 0x1F45, + 0x039F0313: 0x1F48, + 0x039F0314: 0x1F49, + 0x1F480300: 0x1F4A, + 0x1F490300: 0x1F4B, + 0x1F480301: 0x1F4C, + 0x1F490301: 0x1F4D, + 0x03C50313: 0x1F50, + 0x03C50314: 0x1F51, + 0x1F500300: 0x1F52, + 0x1F510300: 0x1F53, + 0x1F500301: 0x1F54, + 0x1F510301: 0x1F55, + 0x1F500342: 0x1F56, + 0x1F510342: 0x1F57, + 0x03A50314: 0x1F59, + 0x1F590300: 0x1F5B, + 0x1F590301: 0x1F5D, + 0x1F590342: 0x1F5F, + 0x03C90313: 0x1F60, + 0x03C90314: 0x1F61, + 0x1F600300: 0x1F62, + 0x1F610300: 0x1F63, + 0x1F600301: 0x1F64, + 0x1F610301: 0x1F65, + 0x1F600342: 0x1F66, + 0x1F610342: 0x1F67, + 0x03A90313: 0x1F68, + 0x03A90314: 0x1F69, + 0x1F680300: 0x1F6A, + 0x1F690300: 0x1F6B, + 0x1F680301: 0x1F6C, + 0x1F690301: 0x1F6D, + 0x1F680342: 0x1F6E, + 0x1F690342: 0x1F6F, + 0x03B10300: 0x1F70, + 0x03B50300: 0x1F72, + 0x03B70300: 0x1F74, + 0x03B90300: 0x1F76, + 0x03BF0300: 0x1F78, + 0x03C50300: 0x1F7A, + 0x03C90300: 0x1F7C, + 0x1F000345: 0x1F80, + 0x1F010345: 0x1F81, + 0x1F020345: 0x1F82, + 0x1F030345: 0x1F83, + 0x1F040345: 0x1F84, + 0x1F050345: 0x1F85, + 0x1F060345: 0x1F86, + 0x1F070345: 0x1F87, + 0x1F080345: 0x1F88, + 0x1F090345: 0x1F89, + 0x1F0A0345: 0x1F8A, + 0x1F0B0345: 0x1F8B, + 0x1F0C0345: 0x1F8C, + 0x1F0D0345: 0x1F8D, + 0x1F0E0345: 0x1F8E, + 0x1F0F0345: 0x1F8F, + 0x1F200345: 0x1F90, + 0x1F210345: 0x1F91, + 0x1F220345: 0x1F92, + 0x1F230345: 0x1F93, + 0x1F240345: 0x1F94, + 0x1F250345: 0x1F95, + 0x1F260345: 0x1F96, + 0x1F270345: 0x1F97, + 0x1F280345: 0x1F98, + 0x1F290345: 0x1F99, + 0x1F2A0345: 0x1F9A, + 0x1F2B0345: 0x1F9B, + 0x1F2C0345: 0x1F9C, + 0x1F2D0345: 0x1F9D, + 0x1F2E0345: 0x1F9E, + 0x1F2F0345: 0x1F9F, + 0x1F600345: 0x1FA0, + 0x1F610345: 0x1FA1, + 0x1F620345: 0x1FA2, + 0x1F630345: 0x1FA3, + 0x1F640345: 0x1FA4, + 0x1F650345: 0x1FA5, + 0x1F660345: 0x1FA6, + 0x1F670345: 0x1FA7, + 0x1F680345: 0x1FA8, + 0x1F690345: 0x1FA9, + 0x1F6A0345: 0x1FAA, + 0x1F6B0345: 0x1FAB, + 0x1F6C0345: 0x1FAC, + 0x1F6D0345: 0x1FAD, + 0x1F6E0345: 0x1FAE, + 0x1F6F0345: 0x1FAF, + 0x03B10306: 0x1FB0, + 0x03B10304: 0x1FB1, + 0x1F700345: 0x1FB2, + 0x03B10345: 0x1FB3, + 0x03AC0345: 0x1FB4, + 0x03B10342: 0x1FB6, + 0x1FB60345: 0x1FB7, + 0x03910306: 0x1FB8, + 0x03910304: 0x1FB9, + 0x03910300: 0x1FBA, + 0x03910345: 0x1FBC, + 0x00A80342: 0x1FC1, + 0x1F740345: 0x1FC2, + 0x03B70345: 0x1FC3, + 0x03AE0345: 0x1FC4, + 0x03B70342: 0x1FC6, + 0x1FC60345: 0x1FC7, + 0x03950300: 0x1FC8, + 0x03970300: 0x1FCA, + 0x03970345: 0x1FCC, + 0x1FBF0300: 0x1FCD, + 0x1FBF0301: 0x1FCE, + 0x1FBF0342: 0x1FCF, + 0x03B90306: 0x1FD0, + 0x03B90304: 0x1FD1, + 0x03CA0300: 0x1FD2, + 0x03B90342: 0x1FD6, + 0x03CA0342: 0x1FD7, + 0x03990306: 0x1FD8, + 0x03990304: 0x1FD9, + 0x03990300: 0x1FDA, + 0x1FFE0300: 0x1FDD, + 0x1FFE0301: 0x1FDE, + 0x1FFE0342: 0x1FDF, + 0x03C50306: 0x1FE0, + 0x03C50304: 0x1FE1, + 0x03CB0300: 0x1FE2, + 0x03C10313: 0x1FE4, + 0x03C10314: 0x1FE5, + 0x03C50342: 0x1FE6, + 0x03CB0342: 0x1FE7, + 0x03A50306: 0x1FE8, + 0x03A50304: 0x1FE9, + 0x03A50300: 0x1FEA, + 0x03A10314: 0x1FEC, + 0x00A80300: 0x1FED, + 0x1F7C0345: 0x1FF2, + 0x03C90345: 0x1FF3, + 0x03CE0345: 0x1FF4, + 0x03C90342: 0x1FF6, + 0x1FF60345: 0x1FF7, + 0x039F0300: 0x1FF8, + 0x03A90300: 0x1FFA, + 0x03A90345: 0x1FFC, + 0x21900338: 0x219A, + 0x21920338: 0x219B, + 0x21940338: 0x21AE, + 0x21D00338: 0x21CD, + 0x21D40338: 0x21CE, + 0x21D20338: 0x21CF, + 0x22030338: 0x2204, + 0x22080338: 0x2209, + 0x220B0338: 0x220C, + 0x22230338: 0x2224, + 0x22250338: 0x2226, + 0x223C0338: 0x2241, + 0x22430338: 0x2244, + 0x22450338: 0x2247, + 0x22480338: 0x2249, + 0x003D0338: 0x2260, + 0x22610338: 0x2262, + 0x224D0338: 0x226D, + 0x003C0338: 0x226E, + 0x003E0338: 0x226F, + 0x22640338: 0x2270, + 0x22650338: 0x2271, + 0x22720338: 0x2274, + 0x22730338: 0x2275, + 0x22760338: 0x2278, + 0x22770338: 0x2279, + 0x227A0338: 0x2280, + 0x227B0338: 0x2281, + 0x22820338: 0x2284, + 0x22830338: 0x2285, + 0x22860338: 0x2288, + 0x22870338: 0x2289, + 0x22A20338: 0x22AC, + 0x22A80338: 0x22AD, + 0x22A90338: 0x22AE, + 0x22AB0338: 0x22AF, + 0x227C0338: 0x22E0, + 0x227D0338: 0x22E1, + 0x22910338: 0x22E2, + 0x22920338: 0x22E3, + 0x22B20338: 0x22EA, + 0x22B30338: 0x22EB, + 0x22B40338: 0x22EC, + 0x22B50338: 0x22ED, + 0x304B3099: 0x304C, + 0x304D3099: 0x304E, + 0x304F3099: 0x3050, + 0x30513099: 0x3052, + 0x30533099: 0x3054, + 0x30553099: 0x3056, + 0x30573099: 0x3058, + 0x30593099: 0x305A, + 0x305B3099: 0x305C, + 0x305D3099: 0x305E, + 0x305F3099: 0x3060, + 0x30613099: 0x3062, + 0x30643099: 0x3065, + 0x30663099: 0x3067, + 0x30683099: 0x3069, + 0x306F3099: 0x3070, + 0x306F309A: 0x3071, + 0x30723099: 0x3073, + 0x3072309A: 0x3074, + 0x30753099: 0x3076, + 0x3075309A: 0x3077, + 0x30783099: 0x3079, + 0x3078309A: 0x307A, + 0x307B3099: 0x307C, + 0x307B309A: 0x307D, + 0x30463099: 0x3094, + 0x309D3099: 0x309E, + 0x30AB3099: 0x30AC, + 0x30AD3099: 0x30AE, + 0x30AF3099: 0x30B0, + 0x30B13099: 0x30B2, + 0x30B33099: 0x30B4, + 0x30B53099: 0x30B6, + 0x30B73099: 0x30B8, + 0x30B93099: 0x30BA, + 0x30BB3099: 0x30BC, + 0x30BD3099: 0x30BE, + 0x30BF3099: 0x30C0, + 0x30C13099: 0x30C2, + 0x30C43099: 0x30C5, + 0x30C63099: 0x30C7, + 0x30C83099: 0x30C9, + 0x30CF3099: 0x30D0, + 0x30CF309A: 0x30D1, + 0x30D23099: 0x30D3, + 0x30D2309A: 0x30D4, + 0x30D53099: 0x30D6, + 0x30D5309A: 0x30D7, + 0x30D83099: 0x30D9, + 0x30D8309A: 0x30DA, + 0x30DB3099: 0x30DC, + 0x30DB309A: 0x30DD, + 0x30A63099: 0x30F4, + 0x30EF3099: 0x30F7, + 0x30F03099: 0x30F8, + 0x30F13099: 0x30F9, + 0x30F23099: 0x30FA, + 0x30FD3099: 0x30FE, + 0x109910BA: 0x1109A, + 0x109B10BA: 0x1109C, + 0x10A510BA: 0x110AB, + 0x11311127: 0x1112E, + 0x11321127: 0x1112F, + 0x1347133E: 0x1134B, + 0x13471357: 0x1134C, + 0x14B914BA: 0x114BB, + 0x14B914B0: 0x114BC, + 0x14B914BD: 0x114BE, + 0x15B815AF: 0x115BA, + 0x15B915AF: 0x115BB, +} + +// Total size of tables: 53KB (54006 bytes) diff --git a/vendor/golang.org/x/text/unicode/norm/transform.go b/vendor/golang.org/x/text/unicode/norm/transform.go index 8589067..9f47efb 100644 --- a/vendor/golang.org/x/text/unicode/norm/transform.go +++ b/vendor/golang.org/x/text/unicode/norm/transform.go @@ -40,7 +40,7 @@ func (f Form) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) } func flushTransform(rb *reorderBuffer) bool { - // Write out (must fully fit in dst, or else it is a ErrShortDst). + // Write out (must fully fit in dst, or else it is an ErrShortDst). if len(rb.out) < rb.nrune*utf8.UTFMax { return false } diff --git a/vendor/golang.org/x/text/unicode/norm/transform_test.go b/vendor/golang.org/x/text/unicode/norm/transform_test.go index 987d680..d596ff3 100644 --- a/vendor/golang.org/x/text/unicode/norm/transform_test.go +++ b/vendor/golang.org/x/text/unicode/norm/transform_test.go @@ -41,7 +41,7 @@ func TestTransform(t *testing.T) { {NFC, "qx", "", true, 1, transform.ErrShortDst}, {NFC, "a\u0300abc", "\u00e0a", true, 4, transform.ErrShortDst}, - // We cannot write a segment if succesive runes could still change the result. + // We cannot write a segment if successive runes could still change the result. {NFD, "ö", "", false, 3, transform.ErrShortSrc}, {NFC, "a\u0300", "", false, 4, transform.ErrShortSrc}, {NFD, "a\u0300", "", false, 4, transform.ErrShortSrc}, @@ -68,7 +68,7 @@ func TestTransform(t *testing.T) { t.Errorf("%d: was %+q (%v); want %+q (%v)", i, out, err, tt.out, tt.err) } if want := tt.f.String(tt.in)[:nDst]; want != out { - t.Errorf("%d: incorect normalization: was %+q; want %+q", i, out, want) + t.Errorf("%d: incorrect normalization: was %+q; want %+q", i, out, want) } } } diff --git a/vendor/golang.org/x/text/unicode/rangetable/gen.go b/vendor/golang.org/x/text/unicode/rangetable/gen.go index bea49dd..5b5f828 100644 --- a/vendor/golang.org/x/text/unicode/rangetable/gen.go +++ b/vendor/golang.org/x/text/unicode/rangetable/gen.go @@ -13,12 +13,13 @@ import ( "io" "log" "reflect" - "sort" "strings" "unicode" + "golang.org/x/text/collate" "golang.org/x/text/internal/gen" "golang.org/x/text/internal/ucd" + "golang.org/x/text/language" "golang.org/x/text/unicode/rangetable" ) @@ -37,8 +38,9 @@ func getVersions() []string { log.Fatal(bootstrapMessage) } + c := collate.New(language.Und, collate.Numeric) versions := strings.Split(*versionList, ",") - sort.Strings(versions) + c.SortStrings(versions) // Ensure that at least the current version is included. for _, v := range versions { @@ -48,7 +50,7 @@ func getVersions() []string { } versions = append(versions, gen.UnicodeVersion()) - sort.Strings(versions) + c.SortStrings(versions) return versions } @@ -93,7 +95,7 @@ func main() { fmt.Fprintf(w, "// Total size %d bytes (%d KiB)\n", size, size/1024) - gen.WriteGoFile("tables.go", "rangetable", w.Bytes()) + gen.WriteVersionedGoFile("tables.go", "rangetable", w.Bytes()) } func print(w io.Writer, rt *unicode.RangeTable) { diff --git a/vendor/golang.org/x/text/unicode/rangetable/tables.go b/vendor/golang.org/x/text/unicode/rangetable/tables.go deleted file mode 100644 index 61c989b..0000000 --- a/vendor/golang.org/x/text/unicode/rangetable/tables.go +++ /dev/null @@ -1,5735 +0,0 @@ -// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. - -package rangetable - -//go:generate go run gen.go --versions=4.1.0,5.0.0,5.1.0,5.2.0,6.0.0,6.1.0,6.2.0,6.3.0,7.0.0,8.0.0,9.0.0 - -import "unicode" - -var assigned = map[string]*unicode.RangeTable{ - "4.1.0": assigned4_1_0, - "5.0.0": assigned5_0_0, - "5.1.0": assigned5_1_0, - "5.2.0": assigned5_2_0, - "6.0.0": assigned6_0_0, - "6.1.0": assigned6_1_0, - "6.2.0": assigned6_2_0, - "6.3.0": assigned6_3_0, - "7.0.0": assigned7_0_0, - "8.0.0": assigned8_0_0, - "9.0.0": assigned9_0_0, -} - -// size 2924 bytes (2 KiB) -var assigned4_1_0 = &unicode.RangeTable{ - R16: []unicode.Range16{ - {0x0000, 0x0241, 1}, - {0x0250, 0x036f, 1}, - {0x0374, 0x0375, 1}, - {0x037a, 0x037e, 4}, - {0x0384, 0x038a, 1}, - {0x038c, 0x038e, 2}, - {0x038f, 0x03a1, 1}, - {0x03a3, 0x03ce, 1}, - {0x03d0, 0x0486, 1}, - {0x0488, 0x04ce, 1}, - {0x04d0, 0x04f9, 1}, - {0x0500, 0x050f, 1}, - {0x0531, 0x0556, 1}, - {0x0559, 0x055f, 1}, - {0x0561, 0x0587, 1}, - {0x0589, 0x058a, 1}, - {0x0591, 0x05b9, 1}, - {0x05bb, 0x05c7, 1}, - {0x05d0, 0x05ea, 1}, - {0x05f0, 0x05f4, 1}, - {0x0600, 0x0603, 1}, - {0x060b, 0x0615, 1}, - {0x061b, 0x061e, 3}, - {0x061f, 0x0621, 2}, - {0x0622, 0x063a, 1}, - {0x0640, 0x065e, 1}, - {0x0660, 0x070d, 1}, - {0x070f, 0x074a, 1}, - {0x074d, 0x076d, 1}, - {0x0780, 0x07b1, 1}, - {0x0901, 0x0939, 1}, - {0x093c, 0x094d, 1}, - {0x0950, 0x0954, 1}, - {0x0958, 0x0970, 1}, - {0x097d, 0x0981, 4}, - {0x0982, 0x0983, 1}, - {0x0985, 0x098c, 1}, - {0x098f, 0x0990, 1}, - {0x0993, 0x09a8, 1}, - {0x09aa, 0x09b0, 1}, - {0x09b2, 0x09b6, 4}, - {0x09b7, 0x09b9, 1}, - {0x09bc, 0x09c4, 1}, - {0x09c7, 0x09c8, 1}, - {0x09cb, 0x09ce, 1}, - {0x09d7, 0x09dc, 5}, - {0x09dd, 0x09df, 2}, - {0x09e0, 0x09e3, 1}, - {0x09e6, 0x09fa, 1}, - {0x0a01, 0x0a03, 1}, - {0x0a05, 0x0a0a, 1}, - {0x0a0f, 0x0a10, 1}, - {0x0a13, 0x0a28, 1}, - {0x0a2a, 0x0a30, 1}, - {0x0a32, 0x0a33, 1}, - {0x0a35, 0x0a36, 1}, - {0x0a38, 0x0a39, 1}, - {0x0a3c, 0x0a3e, 2}, - {0x0a3f, 0x0a42, 1}, - {0x0a47, 0x0a48, 1}, - {0x0a4b, 0x0a4d, 1}, - {0x0a59, 0x0a5c, 1}, - {0x0a5e, 0x0a66, 8}, - {0x0a67, 0x0a74, 1}, - {0x0a81, 0x0a83, 1}, - {0x0a85, 0x0a8d, 1}, - {0x0a8f, 0x0a91, 1}, - {0x0a93, 0x0aa8, 1}, - {0x0aaa, 0x0ab0, 1}, - {0x0ab2, 0x0ab3, 1}, - {0x0ab5, 0x0ab9, 1}, - {0x0abc, 0x0ac5, 1}, - {0x0ac7, 0x0ac9, 1}, - {0x0acb, 0x0acd, 1}, - {0x0ad0, 0x0ae0, 16}, - {0x0ae1, 0x0ae3, 1}, - {0x0ae6, 0x0aef, 1}, - {0x0af1, 0x0b01, 16}, - {0x0b02, 0x0b03, 1}, - {0x0b05, 0x0b0c, 1}, - {0x0b0f, 0x0b10, 1}, - {0x0b13, 0x0b28, 1}, - {0x0b2a, 0x0b30, 1}, - {0x0b32, 0x0b33, 1}, - {0x0b35, 0x0b39, 1}, - {0x0b3c, 0x0b43, 1}, - {0x0b47, 0x0b48, 1}, - {0x0b4b, 0x0b4d, 1}, - {0x0b56, 0x0b57, 1}, - {0x0b5c, 0x0b5d, 1}, - {0x0b5f, 0x0b61, 1}, - {0x0b66, 0x0b71, 1}, - {0x0b82, 0x0b83, 1}, - {0x0b85, 0x0b8a, 1}, - {0x0b8e, 0x0b90, 1}, - {0x0b92, 0x0b95, 1}, - {0x0b99, 0x0b9a, 1}, - {0x0b9c, 0x0b9e, 2}, - {0x0b9f, 0x0ba3, 4}, - {0x0ba4, 0x0ba8, 4}, - {0x0ba9, 0x0baa, 1}, - {0x0bae, 0x0bb9, 1}, - {0x0bbe, 0x0bc2, 1}, - {0x0bc6, 0x0bc8, 1}, - {0x0bca, 0x0bcd, 1}, - {0x0bd7, 0x0be6, 15}, - {0x0be7, 0x0bfa, 1}, - {0x0c01, 0x0c03, 1}, - {0x0c05, 0x0c0c, 1}, - {0x0c0e, 0x0c10, 1}, - {0x0c12, 0x0c28, 1}, - {0x0c2a, 0x0c33, 1}, - {0x0c35, 0x0c39, 1}, - {0x0c3e, 0x0c44, 1}, - {0x0c46, 0x0c48, 1}, - {0x0c4a, 0x0c4d, 1}, - {0x0c55, 0x0c56, 1}, - {0x0c60, 0x0c61, 1}, - {0x0c66, 0x0c6f, 1}, - {0x0c82, 0x0c83, 1}, - {0x0c85, 0x0c8c, 1}, - {0x0c8e, 0x0c90, 1}, - {0x0c92, 0x0ca8, 1}, - {0x0caa, 0x0cb3, 1}, - {0x0cb5, 0x0cb9, 1}, - {0x0cbc, 0x0cc4, 1}, - {0x0cc6, 0x0cc8, 1}, - {0x0cca, 0x0ccd, 1}, - {0x0cd5, 0x0cd6, 1}, - {0x0cde, 0x0ce0, 2}, - {0x0ce1, 0x0ce6, 5}, - {0x0ce7, 0x0cef, 1}, - {0x0d02, 0x0d03, 1}, - {0x0d05, 0x0d0c, 1}, - {0x0d0e, 0x0d10, 1}, - {0x0d12, 0x0d28, 1}, - {0x0d2a, 0x0d39, 1}, - {0x0d3e, 0x0d43, 1}, - {0x0d46, 0x0d48, 1}, - {0x0d4a, 0x0d4d, 1}, - {0x0d57, 0x0d60, 9}, - {0x0d61, 0x0d66, 5}, - {0x0d67, 0x0d6f, 1}, - {0x0d82, 0x0d83, 1}, - {0x0d85, 0x0d96, 1}, - {0x0d9a, 0x0db1, 1}, - {0x0db3, 0x0dbb, 1}, - {0x0dbd, 0x0dc0, 3}, - {0x0dc1, 0x0dc6, 1}, - {0x0dca, 0x0dcf, 5}, - {0x0dd0, 0x0dd4, 1}, - {0x0dd6, 0x0dd8, 2}, - {0x0dd9, 0x0ddf, 1}, - {0x0df2, 0x0df4, 1}, - {0x0e01, 0x0e3a, 1}, - {0x0e3f, 0x0e5b, 1}, - {0x0e81, 0x0e82, 1}, - {0x0e84, 0x0e87, 3}, - {0x0e88, 0x0e8a, 2}, - {0x0e8d, 0x0e94, 7}, - {0x0e95, 0x0e97, 1}, - {0x0e99, 0x0e9f, 1}, - {0x0ea1, 0x0ea3, 1}, - {0x0ea5, 0x0ea7, 2}, - {0x0eaa, 0x0eab, 1}, - {0x0ead, 0x0eb9, 1}, - {0x0ebb, 0x0ebd, 1}, - {0x0ec0, 0x0ec4, 1}, - {0x0ec6, 0x0ec8, 2}, - {0x0ec9, 0x0ecd, 1}, - {0x0ed0, 0x0ed9, 1}, - {0x0edc, 0x0edd, 1}, - {0x0f00, 0x0f47, 1}, - {0x0f49, 0x0f6a, 1}, - {0x0f71, 0x0f8b, 1}, - {0x0f90, 0x0f97, 1}, - {0x0f99, 0x0fbc, 1}, - {0x0fbe, 0x0fcc, 1}, - {0x0fcf, 0x0fd1, 1}, - {0x1000, 0x1021, 1}, - {0x1023, 0x1027, 1}, - {0x1029, 0x102a, 1}, - {0x102c, 0x1032, 1}, - {0x1036, 0x1039, 1}, - {0x1040, 0x1059, 1}, - {0x10a0, 0x10c5, 1}, - {0x10d0, 0x10fc, 1}, - {0x1100, 0x1159, 1}, - {0x115f, 0x11a2, 1}, - {0x11a8, 0x11f9, 1}, - {0x1200, 0x1248, 1}, - {0x124a, 0x124d, 1}, - {0x1250, 0x1256, 1}, - {0x1258, 0x125a, 2}, - {0x125b, 0x125d, 1}, - {0x1260, 0x1288, 1}, - {0x128a, 0x128d, 1}, - {0x1290, 0x12b0, 1}, - {0x12b2, 0x12b5, 1}, - {0x12b8, 0x12be, 1}, - {0x12c0, 0x12c2, 2}, - {0x12c3, 0x12c5, 1}, - {0x12c8, 0x12d6, 1}, - {0x12d8, 0x1310, 1}, - {0x1312, 0x1315, 1}, - {0x1318, 0x135a, 1}, - {0x135f, 0x137c, 1}, - {0x1380, 0x1399, 1}, - {0x13a0, 0x13f4, 1}, - {0x1401, 0x1676, 1}, - {0x1680, 0x169c, 1}, - {0x16a0, 0x16f0, 1}, - {0x1700, 0x170c, 1}, - {0x170e, 0x1714, 1}, - {0x1720, 0x1736, 1}, - {0x1740, 0x1753, 1}, - {0x1760, 0x176c, 1}, - {0x176e, 0x1770, 1}, - {0x1772, 0x1773, 1}, - {0x1780, 0x17dd, 1}, - {0x17e0, 0x17e9, 1}, - {0x17f0, 0x17f9, 1}, - {0x1800, 0x180e, 1}, - {0x1810, 0x1819, 1}, - {0x1820, 0x1877, 1}, - {0x1880, 0x18a9, 1}, - {0x1900, 0x191c, 1}, - {0x1920, 0x192b, 1}, - {0x1930, 0x193b, 1}, - {0x1940, 0x1944, 4}, - {0x1945, 0x196d, 1}, - {0x1970, 0x1974, 1}, - {0x1980, 0x19a9, 1}, - {0x19b0, 0x19c9, 1}, - {0x19d0, 0x19d9, 1}, - {0x19de, 0x1a1b, 1}, - {0x1a1e, 0x1a1f, 1}, - {0x1d00, 0x1dc3, 1}, - {0x1e00, 0x1e9b, 1}, - {0x1ea0, 0x1ef9, 1}, - {0x1f00, 0x1f15, 1}, - {0x1f18, 0x1f1d, 1}, - {0x1f20, 0x1f45, 1}, - {0x1f48, 0x1f4d, 1}, - {0x1f50, 0x1f57, 1}, - {0x1f59, 0x1f5f, 2}, - {0x1f60, 0x1f7d, 1}, - {0x1f80, 0x1fb4, 1}, - {0x1fb6, 0x1fc4, 1}, - {0x1fc6, 0x1fd3, 1}, - {0x1fd6, 0x1fdb, 1}, - {0x1fdd, 0x1fef, 1}, - {0x1ff2, 0x1ff4, 1}, - {0x1ff6, 0x1ffe, 1}, - {0x2000, 0x2063, 1}, - {0x206a, 0x2071, 1}, - {0x2074, 0x208e, 1}, - {0x2090, 0x2094, 1}, - {0x20a0, 0x20b5, 1}, - {0x20d0, 0x20eb, 1}, - {0x2100, 0x214c, 1}, - {0x2153, 0x2183, 1}, - {0x2190, 0x23db, 1}, - {0x2400, 0x2426, 1}, - {0x2440, 0x244a, 1}, - {0x2460, 0x269c, 1}, - {0x26a0, 0x26b1, 1}, - {0x2701, 0x2704, 1}, - {0x2706, 0x2709, 1}, - {0x270c, 0x2727, 1}, - {0x2729, 0x274b, 1}, - {0x274d, 0x274f, 2}, - {0x2750, 0x2752, 1}, - {0x2756, 0x2758, 2}, - {0x2759, 0x275e, 1}, - {0x2761, 0x2794, 1}, - {0x2798, 0x27af, 1}, - {0x27b1, 0x27be, 1}, - {0x27c0, 0x27c6, 1}, - {0x27d0, 0x27eb, 1}, - {0x27f0, 0x2b13, 1}, - {0x2c00, 0x2c2e, 1}, - {0x2c30, 0x2c5e, 1}, - {0x2c80, 0x2cea, 1}, - {0x2cf9, 0x2d25, 1}, - {0x2d30, 0x2d65, 1}, - {0x2d6f, 0x2d80, 17}, - {0x2d81, 0x2d96, 1}, - {0x2da0, 0x2da6, 1}, - {0x2da8, 0x2dae, 1}, - {0x2db0, 0x2db6, 1}, - {0x2db8, 0x2dbe, 1}, - {0x2dc0, 0x2dc6, 1}, - {0x2dc8, 0x2dce, 1}, - {0x2dd0, 0x2dd6, 1}, - {0x2dd8, 0x2dde, 1}, - {0x2e00, 0x2e17, 1}, - {0x2e1c, 0x2e1d, 1}, - {0x2e80, 0x2e99, 1}, - {0x2e9b, 0x2ef3, 1}, - {0x2f00, 0x2fd5, 1}, - {0x2ff0, 0x2ffb, 1}, - {0x3000, 0x303f, 1}, - {0x3041, 0x3096, 1}, - {0x3099, 0x30ff, 1}, - {0x3105, 0x312c, 1}, - {0x3131, 0x318e, 1}, - {0x3190, 0x31b7, 1}, - {0x31c0, 0x31cf, 1}, - {0x31f0, 0x321e, 1}, - {0x3220, 0x3243, 1}, - {0x3250, 0x32fe, 1}, - {0x3300, 0x4db5, 1}, - {0x4dc0, 0x9fbb, 1}, - {0xa000, 0xa48c, 1}, - {0xa490, 0xa4c6, 1}, - {0xa700, 0xa716, 1}, - {0xa800, 0xa82b, 1}, - {0xac00, 0xd7a3, 1}, - {0xd800, 0xfa2d, 1}, - {0xfa30, 0xfa6a, 1}, - {0xfa70, 0xfad9, 1}, - {0xfb00, 0xfb06, 1}, - {0xfb13, 0xfb17, 1}, - {0xfb1d, 0xfb36, 1}, - {0xfb38, 0xfb3c, 1}, - {0xfb3e, 0xfb40, 2}, - {0xfb41, 0xfb43, 2}, - {0xfb44, 0xfb46, 2}, - {0xfb47, 0xfbb1, 1}, - {0xfbd3, 0xfd3f, 1}, - {0xfd50, 0xfd8f, 1}, - {0xfd92, 0xfdc7, 1}, - {0xfdf0, 0xfdfd, 1}, - {0xfe00, 0xfe19, 1}, - {0xfe20, 0xfe23, 1}, - {0xfe30, 0xfe52, 1}, - {0xfe54, 0xfe66, 1}, - {0xfe68, 0xfe6b, 1}, - {0xfe70, 0xfe74, 1}, - {0xfe76, 0xfefc, 1}, - {0xfeff, 0xff01, 2}, - {0xff02, 0xffbe, 1}, - {0xffc2, 0xffc7, 1}, - {0xffca, 0xffcf, 1}, - {0xffd2, 0xffd7, 1}, - {0xffda, 0xffdc, 1}, - {0xffe0, 0xffe6, 1}, - {0xffe8, 0xffee, 1}, - {0xfff9, 0xfffd, 1}, - }, - R32: []unicode.Range32{ - {0x00010000, 0x0001000b, 1}, - {0x0001000d, 0x00010026, 1}, - {0x00010028, 0x0001003a, 1}, - {0x0001003c, 0x0001003d, 1}, - {0x0001003f, 0x0001004d, 1}, - {0x00010050, 0x0001005d, 1}, - {0x00010080, 0x000100fa, 1}, - {0x00010100, 0x00010102, 1}, - {0x00010107, 0x00010133, 1}, - {0x00010137, 0x0001018a, 1}, - {0x00010300, 0x0001031e, 1}, - {0x00010320, 0x00010323, 1}, - {0x00010330, 0x0001034a, 1}, - {0x00010380, 0x0001039d, 1}, - {0x0001039f, 0x000103c3, 1}, - {0x000103c8, 0x000103d5, 1}, - {0x00010400, 0x0001049d, 1}, - {0x000104a0, 0x000104a9, 1}, - {0x00010800, 0x00010805, 1}, - {0x00010808, 0x0001080a, 2}, - {0x0001080b, 0x00010835, 1}, - {0x00010837, 0x00010838, 1}, - {0x0001083c, 0x0001083f, 3}, - {0x00010a00, 0x00010a03, 1}, - {0x00010a05, 0x00010a06, 1}, - {0x00010a0c, 0x00010a13, 1}, - {0x00010a15, 0x00010a17, 1}, - {0x00010a19, 0x00010a33, 1}, - {0x00010a38, 0x00010a3a, 1}, - {0x00010a3f, 0x00010a47, 1}, - {0x00010a50, 0x00010a58, 1}, - {0x0001d000, 0x0001d0f5, 1}, - {0x0001d100, 0x0001d126, 1}, - {0x0001d12a, 0x0001d1dd, 1}, - {0x0001d200, 0x0001d245, 1}, - {0x0001d300, 0x0001d356, 1}, - {0x0001d400, 0x0001d454, 1}, - {0x0001d456, 0x0001d49c, 1}, - {0x0001d49e, 0x0001d49f, 1}, - {0x0001d4a2, 0x0001d4a5, 3}, - {0x0001d4a6, 0x0001d4a9, 3}, - {0x0001d4aa, 0x0001d4ac, 1}, - {0x0001d4ae, 0x0001d4b9, 1}, - {0x0001d4bb, 0x0001d4bd, 2}, - {0x0001d4be, 0x0001d4c3, 1}, - {0x0001d4c5, 0x0001d505, 1}, - {0x0001d507, 0x0001d50a, 1}, - {0x0001d50d, 0x0001d514, 1}, - {0x0001d516, 0x0001d51c, 1}, - {0x0001d51e, 0x0001d539, 1}, - {0x0001d53b, 0x0001d53e, 1}, - {0x0001d540, 0x0001d544, 1}, - {0x0001d546, 0x0001d54a, 4}, - {0x0001d54b, 0x0001d550, 1}, - {0x0001d552, 0x0001d6a5, 1}, - {0x0001d6a8, 0x0001d7c9, 1}, - {0x0001d7ce, 0x0001d7ff, 1}, - {0x00020000, 0x0002a6d6, 1}, - {0x0002f800, 0x0002fa1d, 1}, - {0x000e0001, 0x000e0020, 31}, - {0x000e0021, 0x000e007f, 1}, - {0x000e0100, 0x000e01ef, 1}, - {0x000f0000, 0x000ffffd, 1}, - {0x00100000, 0x0010fffd, 1}, - }, - LatinOffset: 0, -} - -// size 3026 bytes (2 KiB) -var assigned5_0_0 = &unicode.RangeTable{ - R16: []unicode.Range16{ - {0x0000, 0x036f, 1}, - {0x0374, 0x0375, 1}, - {0x037a, 0x037e, 1}, - {0x0384, 0x038a, 1}, - {0x038c, 0x038e, 2}, - {0x038f, 0x03a1, 1}, - {0x03a3, 0x03ce, 1}, - {0x03d0, 0x0486, 1}, - {0x0488, 0x0513, 1}, - {0x0531, 0x0556, 1}, - {0x0559, 0x055f, 1}, - {0x0561, 0x0587, 1}, - {0x0589, 0x058a, 1}, - {0x0591, 0x05c7, 1}, - {0x05d0, 0x05ea, 1}, - {0x05f0, 0x05f4, 1}, - {0x0600, 0x0603, 1}, - {0x060b, 0x0615, 1}, - {0x061b, 0x061e, 3}, - {0x061f, 0x0621, 2}, - {0x0622, 0x063a, 1}, - {0x0640, 0x065e, 1}, - {0x0660, 0x070d, 1}, - {0x070f, 0x074a, 1}, - {0x074d, 0x076d, 1}, - {0x0780, 0x07b1, 1}, - {0x07c0, 0x07fa, 1}, - {0x0901, 0x0939, 1}, - {0x093c, 0x094d, 1}, - {0x0950, 0x0954, 1}, - {0x0958, 0x0970, 1}, - {0x097b, 0x097f, 1}, - {0x0981, 0x0983, 1}, - {0x0985, 0x098c, 1}, - {0x098f, 0x0990, 1}, - {0x0993, 0x09a8, 1}, - {0x09aa, 0x09b0, 1}, - {0x09b2, 0x09b6, 4}, - {0x09b7, 0x09b9, 1}, - {0x09bc, 0x09c4, 1}, - {0x09c7, 0x09c8, 1}, - {0x09cb, 0x09ce, 1}, - {0x09d7, 0x09dc, 5}, - {0x09dd, 0x09df, 2}, - {0x09e0, 0x09e3, 1}, - {0x09e6, 0x09fa, 1}, - {0x0a01, 0x0a03, 1}, - {0x0a05, 0x0a0a, 1}, - {0x0a0f, 0x0a10, 1}, - {0x0a13, 0x0a28, 1}, - {0x0a2a, 0x0a30, 1}, - {0x0a32, 0x0a33, 1}, - {0x0a35, 0x0a36, 1}, - {0x0a38, 0x0a39, 1}, - {0x0a3c, 0x0a3e, 2}, - {0x0a3f, 0x0a42, 1}, - {0x0a47, 0x0a48, 1}, - {0x0a4b, 0x0a4d, 1}, - {0x0a59, 0x0a5c, 1}, - {0x0a5e, 0x0a66, 8}, - {0x0a67, 0x0a74, 1}, - {0x0a81, 0x0a83, 1}, - {0x0a85, 0x0a8d, 1}, - {0x0a8f, 0x0a91, 1}, - {0x0a93, 0x0aa8, 1}, - {0x0aaa, 0x0ab0, 1}, - {0x0ab2, 0x0ab3, 1}, - {0x0ab5, 0x0ab9, 1}, - {0x0abc, 0x0ac5, 1}, - {0x0ac7, 0x0ac9, 1}, - {0x0acb, 0x0acd, 1}, - {0x0ad0, 0x0ae0, 16}, - {0x0ae1, 0x0ae3, 1}, - {0x0ae6, 0x0aef, 1}, - {0x0af1, 0x0b01, 16}, - {0x0b02, 0x0b03, 1}, - {0x0b05, 0x0b0c, 1}, - {0x0b0f, 0x0b10, 1}, - {0x0b13, 0x0b28, 1}, - {0x0b2a, 0x0b30, 1}, - {0x0b32, 0x0b33, 1}, - {0x0b35, 0x0b39, 1}, - {0x0b3c, 0x0b43, 1}, - {0x0b47, 0x0b48, 1}, - {0x0b4b, 0x0b4d, 1}, - {0x0b56, 0x0b57, 1}, - {0x0b5c, 0x0b5d, 1}, - {0x0b5f, 0x0b61, 1}, - {0x0b66, 0x0b71, 1}, - {0x0b82, 0x0b83, 1}, - {0x0b85, 0x0b8a, 1}, - {0x0b8e, 0x0b90, 1}, - {0x0b92, 0x0b95, 1}, - {0x0b99, 0x0b9a, 1}, - {0x0b9c, 0x0b9e, 2}, - {0x0b9f, 0x0ba3, 4}, - {0x0ba4, 0x0ba8, 4}, - {0x0ba9, 0x0baa, 1}, - {0x0bae, 0x0bb9, 1}, - {0x0bbe, 0x0bc2, 1}, - {0x0bc6, 0x0bc8, 1}, - {0x0bca, 0x0bcd, 1}, - {0x0bd7, 0x0be6, 15}, - {0x0be7, 0x0bfa, 1}, - {0x0c01, 0x0c03, 1}, - {0x0c05, 0x0c0c, 1}, - {0x0c0e, 0x0c10, 1}, - {0x0c12, 0x0c28, 1}, - {0x0c2a, 0x0c33, 1}, - {0x0c35, 0x0c39, 1}, - {0x0c3e, 0x0c44, 1}, - {0x0c46, 0x0c48, 1}, - {0x0c4a, 0x0c4d, 1}, - {0x0c55, 0x0c56, 1}, - {0x0c60, 0x0c61, 1}, - {0x0c66, 0x0c6f, 1}, - {0x0c82, 0x0c83, 1}, - {0x0c85, 0x0c8c, 1}, - {0x0c8e, 0x0c90, 1}, - {0x0c92, 0x0ca8, 1}, - {0x0caa, 0x0cb3, 1}, - {0x0cb5, 0x0cb9, 1}, - {0x0cbc, 0x0cc4, 1}, - {0x0cc6, 0x0cc8, 1}, - {0x0cca, 0x0ccd, 1}, - {0x0cd5, 0x0cd6, 1}, - {0x0cde, 0x0ce0, 2}, - {0x0ce1, 0x0ce3, 1}, - {0x0ce6, 0x0cef, 1}, - {0x0cf1, 0x0cf2, 1}, - {0x0d02, 0x0d03, 1}, - {0x0d05, 0x0d0c, 1}, - {0x0d0e, 0x0d10, 1}, - {0x0d12, 0x0d28, 1}, - {0x0d2a, 0x0d39, 1}, - {0x0d3e, 0x0d43, 1}, - {0x0d46, 0x0d48, 1}, - {0x0d4a, 0x0d4d, 1}, - {0x0d57, 0x0d60, 9}, - {0x0d61, 0x0d66, 5}, - {0x0d67, 0x0d6f, 1}, - {0x0d82, 0x0d83, 1}, - {0x0d85, 0x0d96, 1}, - {0x0d9a, 0x0db1, 1}, - {0x0db3, 0x0dbb, 1}, - {0x0dbd, 0x0dc0, 3}, - {0x0dc1, 0x0dc6, 1}, - {0x0dca, 0x0dcf, 5}, - {0x0dd0, 0x0dd4, 1}, - {0x0dd6, 0x0dd8, 2}, - {0x0dd9, 0x0ddf, 1}, - {0x0df2, 0x0df4, 1}, - {0x0e01, 0x0e3a, 1}, - {0x0e3f, 0x0e5b, 1}, - {0x0e81, 0x0e82, 1}, - {0x0e84, 0x0e87, 3}, - {0x0e88, 0x0e8a, 2}, - {0x0e8d, 0x0e94, 7}, - {0x0e95, 0x0e97, 1}, - {0x0e99, 0x0e9f, 1}, - {0x0ea1, 0x0ea3, 1}, - {0x0ea5, 0x0ea7, 2}, - {0x0eaa, 0x0eab, 1}, - {0x0ead, 0x0eb9, 1}, - {0x0ebb, 0x0ebd, 1}, - {0x0ec0, 0x0ec4, 1}, - {0x0ec6, 0x0ec8, 2}, - {0x0ec9, 0x0ecd, 1}, - {0x0ed0, 0x0ed9, 1}, - {0x0edc, 0x0edd, 1}, - {0x0f00, 0x0f47, 1}, - {0x0f49, 0x0f6a, 1}, - {0x0f71, 0x0f8b, 1}, - {0x0f90, 0x0f97, 1}, - {0x0f99, 0x0fbc, 1}, - {0x0fbe, 0x0fcc, 1}, - {0x0fcf, 0x0fd1, 1}, - {0x1000, 0x1021, 1}, - {0x1023, 0x1027, 1}, - {0x1029, 0x102a, 1}, - {0x102c, 0x1032, 1}, - {0x1036, 0x1039, 1}, - {0x1040, 0x1059, 1}, - {0x10a0, 0x10c5, 1}, - {0x10d0, 0x10fc, 1}, - {0x1100, 0x1159, 1}, - {0x115f, 0x11a2, 1}, - {0x11a8, 0x11f9, 1}, - {0x1200, 0x1248, 1}, - {0x124a, 0x124d, 1}, - {0x1250, 0x1256, 1}, - {0x1258, 0x125a, 2}, - {0x125b, 0x125d, 1}, - {0x1260, 0x1288, 1}, - {0x128a, 0x128d, 1}, - {0x1290, 0x12b0, 1}, - {0x12b2, 0x12b5, 1}, - {0x12b8, 0x12be, 1}, - {0x12c0, 0x12c2, 2}, - {0x12c3, 0x12c5, 1}, - {0x12c8, 0x12d6, 1}, - {0x12d8, 0x1310, 1}, - {0x1312, 0x1315, 1}, - {0x1318, 0x135a, 1}, - {0x135f, 0x137c, 1}, - {0x1380, 0x1399, 1}, - {0x13a0, 0x13f4, 1}, - {0x1401, 0x1676, 1}, - {0x1680, 0x169c, 1}, - {0x16a0, 0x16f0, 1}, - {0x1700, 0x170c, 1}, - {0x170e, 0x1714, 1}, - {0x1720, 0x1736, 1}, - {0x1740, 0x1753, 1}, - {0x1760, 0x176c, 1}, - {0x176e, 0x1770, 1}, - {0x1772, 0x1773, 1}, - {0x1780, 0x17dd, 1}, - {0x17e0, 0x17e9, 1}, - {0x17f0, 0x17f9, 1}, - {0x1800, 0x180e, 1}, - {0x1810, 0x1819, 1}, - {0x1820, 0x1877, 1}, - {0x1880, 0x18a9, 1}, - {0x1900, 0x191c, 1}, - {0x1920, 0x192b, 1}, - {0x1930, 0x193b, 1}, - {0x1940, 0x1944, 4}, - {0x1945, 0x196d, 1}, - {0x1970, 0x1974, 1}, - {0x1980, 0x19a9, 1}, - {0x19b0, 0x19c9, 1}, - {0x19d0, 0x19d9, 1}, - {0x19de, 0x1a1b, 1}, - {0x1a1e, 0x1a1f, 1}, - {0x1b00, 0x1b4b, 1}, - {0x1b50, 0x1b7c, 1}, - {0x1d00, 0x1dca, 1}, - {0x1dfe, 0x1e9b, 1}, - {0x1ea0, 0x1ef9, 1}, - {0x1f00, 0x1f15, 1}, - {0x1f18, 0x1f1d, 1}, - {0x1f20, 0x1f45, 1}, - {0x1f48, 0x1f4d, 1}, - {0x1f50, 0x1f57, 1}, - {0x1f59, 0x1f5f, 2}, - {0x1f60, 0x1f7d, 1}, - {0x1f80, 0x1fb4, 1}, - {0x1fb6, 0x1fc4, 1}, - {0x1fc6, 0x1fd3, 1}, - {0x1fd6, 0x1fdb, 1}, - {0x1fdd, 0x1fef, 1}, - {0x1ff2, 0x1ff4, 1}, - {0x1ff6, 0x1ffe, 1}, - {0x2000, 0x2063, 1}, - {0x206a, 0x2071, 1}, - {0x2074, 0x208e, 1}, - {0x2090, 0x2094, 1}, - {0x20a0, 0x20b5, 1}, - {0x20d0, 0x20ef, 1}, - {0x2100, 0x214e, 1}, - {0x2153, 0x2184, 1}, - {0x2190, 0x23e7, 1}, - {0x2400, 0x2426, 1}, - {0x2440, 0x244a, 1}, - {0x2460, 0x269c, 1}, - {0x26a0, 0x26b2, 1}, - {0x2701, 0x2704, 1}, - {0x2706, 0x2709, 1}, - {0x270c, 0x2727, 1}, - {0x2729, 0x274b, 1}, - {0x274d, 0x274f, 2}, - {0x2750, 0x2752, 1}, - {0x2756, 0x2758, 2}, - {0x2759, 0x275e, 1}, - {0x2761, 0x2794, 1}, - {0x2798, 0x27af, 1}, - {0x27b1, 0x27be, 1}, - {0x27c0, 0x27ca, 1}, - {0x27d0, 0x27eb, 1}, - {0x27f0, 0x2b1a, 1}, - {0x2b20, 0x2b23, 1}, - {0x2c00, 0x2c2e, 1}, - {0x2c30, 0x2c5e, 1}, - {0x2c60, 0x2c6c, 1}, - {0x2c74, 0x2c77, 1}, - {0x2c80, 0x2cea, 1}, - {0x2cf9, 0x2d25, 1}, - {0x2d30, 0x2d65, 1}, - {0x2d6f, 0x2d80, 17}, - {0x2d81, 0x2d96, 1}, - {0x2da0, 0x2da6, 1}, - {0x2da8, 0x2dae, 1}, - {0x2db0, 0x2db6, 1}, - {0x2db8, 0x2dbe, 1}, - {0x2dc0, 0x2dc6, 1}, - {0x2dc8, 0x2dce, 1}, - {0x2dd0, 0x2dd6, 1}, - {0x2dd8, 0x2dde, 1}, - {0x2e00, 0x2e17, 1}, - {0x2e1c, 0x2e1d, 1}, - {0x2e80, 0x2e99, 1}, - {0x2e9b, 0x2ef3, 1}, - {0x2f00, 0x2fd5, 1}, - {0x2ff0, 0x2ffb, 1}, - {0x3000, 0x303f, 1}, - {0x3041, 0x3096, 1}, - {0x3099, 0x30ff, 1}, - {0x3105, 0x312c, 1}, - {0x3131, 0x318e, 1}, - {0x3190, 0x31b7, 1}, - {0x31c0, 0x31cf, 1}, - {0x31f0, 0x321e, 1}, - {0x3220, 0x3243, 1}, - {0x3250, 0x32fe, 1}, - {0x3300, 0x4db5, 1}, - {0x4dc0, 0x9fbb, 1}, - {0xa000, 0xa48c, 1}, - {0xa490, 0xa4c6, 1}, - {0xa700, 0xa71a, 1}, - {0xa720, 0xa721, 1}, - {0xa800, 0xa82b, 1}, - {0xa840, 0xa877, 1}, - {0xac00, 0xd7a3, 1}, - {0xd800, 0xfa2d, 1}, - {0xfa30, 0xfa6a, 1}, - {0xfa70, 0xfad9, 1}, - {0xfb00, 0xfb06, 1}, - {0xfb13, 0xfb17, 1}, - {0xfb1d, 0xfb36, 1}, - {0xfb38, 0xfb3c, 1}, - {0xfb3e, 0xfb40, 2}, - {0xfb41, 0xfb43, 2}, - {0xfb44, 0xfb46, 2}, - {0xfb47, 0xfbb1, 1}, - {0xfbd3, 0xfd3f, 1}, - {0xfd50, 0xfd8f, 1}, - {0xfd92, 0xfdc7, 1}, - {0xfdf0, 0xfdfd, 1}, - {0xfe00, 0xfe19, 1}, - {0xfe20, 0xfe23, 1}, - {0xfe30, 0xfe52, 1}, - {0xfe54, 0xfe66, 1}, - {0xfe68, 0xfe6b, 1}, - {0xfe70, 0xfe74, 1}, - {0xfe76, 0xfefc, 1}, - {0xfeff, 0xff01, 2}, - {0xff02, 0xffbe, 1}, - {0xffc2, 0xffc7, 1}, - {0xffca, 0xffcf, 1}, - {0xffd2, 0xffd7, 1}, - {0xffda, 0xffdc, 1}, - {0xffe0, 0xffe6, 1}, - {0xffe8, 0xffee, 1}, - {0xfff9, 0xfffd, 1}, - }, - R32: []unicode.Range32{ - {0x00010000, 0x0001000b, 1}, - {0x0001000d, 0x00010026, 1}, - {0x00010028, 0x0001003a, 1}, - {0x0001003c, 0x0001003d, 1}, - {0x0001003f, 0x0001004d, 1}, - {0x00010050, 0x0001005d, 1}, - {0x00010080, 0x000100fa, 1}, - {0x00010100, 0x00010102, 1}, - {0x00010107, 0x00010133, 1}, - {0x00010137, 0x0001018a, 1}, - {0x00010300, 0x0001031e, 1}, - {0x00010320, 0x00010323, 1}, - {0x00010330, 0x0001034a, 1}, - {0x00010380, 0x0001039d, 1}, - {0x0001039f, 0x000103c3, 1}, - {0x000103c8, 0x000103d5, 1}, - {0x00010400, 0x0001049d, 1}, - {0x000104a0, 0x000104a9, 1}, - {0x00010800, 0x00010805, 1}, - {0x00010808, 0x0001080a, 2}, - {0x0001080b, 0x00010835, 1}, - {0x00010837, 0x00010838, 1}, - {0x0001083c, 0x0001083f, 3}, - {0x00010900, 0x00010919, 1}, - {0x0001091f, 0x00010a00, 225}, - {0x00010a01, 0x00010a03, 1}, - {0x00010a05, 0x00010a06, 1}, - {0x00010a0c, 0x00010a13, 1}, - {0x00010a15, 0x00010a17, 1}, - {0x00010a19, 0x00010a33, 1}, - {0x00010a38, 0x00010a3a, 1}, - {0x00010a3f, 0x00010a47, 1}, - {0x00010a50, 0x00010a58, 1}, - {0x00012000, 0x0001236e, 1}, - {0x00012400, 0x00012462, 1}, - {0x00012470, 0x00012473, 1}, - {0x0001d000, 0x0001d0f5, 1}, - {0x0001d100, 0x0001d126, 1}, - {0x0001d12a, 0x0001d1dd, 1}, - {0x0001d200, 0x0001d245, 1}, - {0x0001d300, 0x0001d356, 1}, - {0x0001d360, 0x0001d371, 1}, - {0x0001d400, 0x0001d454, 1}, - {0x0001d456, 0x0001d49c, 1}, - {0x0001d49e, 0x0001d49f, 1}, - {0x0001d4a2, 0x0001d4a5, 3}, - {0x0001d4a6, 0x0001d4a9, 3}, - {0x0001d4aa, 0x0001d4ac, 1}, - {0x0001d4ae, 0x0001d4b9, 1}, - {0x0001d4bb, 0x0001d4bd, 2}, - {0x0001d4be, 0x0001d4c3, 1}, - {0x0001d4c5, 0x0001d505, 1}, - {0x0001d507, 0x0001d50a, 1}, - {0x0001d50d, 0x0001d514, 1}, - {0x0001d516, 0x0001d51c, 1}, - {0x0001d51e, 0x0001d539, 1}, - {0x0001d53b, 0x0001d53e, 1}, - {0x0001d540, 0x0001d544, 1}, - {0x0001d546, 0x0001d54a, 4}, - {0x0001d54b, 0x0001d550, 1}, - {0x0001d552, 0x0001d6a5, 1}, - {0x0001d6a8, 0x0001d7cb, 1}, - {0x0001d7ce, 0x0001d7ff, 1}, - {0x00020000, 0x0002a6d6, 1}, - {0x0002f800, 0x0002fa1d, 1}, - {0x000e0001, 0x000e0020, 31}, - {0x000e0021, 0x000e007f, 1}, - {0x000e0100, 0x000e01ef, 1}, - {0x000f0000, 0x000ffffd, 1}, - {0x00100000, 0x0010fffd, 1}, - }, - LatinOffset: 0, -} - -// size 3152 bytes (3 KiB) -var assigned5_1_0 = &unicode.RangeTable{ - R16: []unicode.Range16{ - {0x0000, 0x0377, 1}, - {0x037a, 0x037e, 1}, - {0x0384, 0x038a, 1}, - {0x038c, 0x038e, 2}, - {0x038f, 0x03a1, 1}, - {0x03a3, 0x0523, 1}, - {0x0531, 0x0556, 1}, - {0x0559, 0x055f, 1}, - {0x0561, 0x0587, 1}, - {0x0589, 0x058a, 1}, - {0x0591, 0x05c7, 1}, - {0x05d0, 0x05ea, 1}, - {0x05f0, 0x05f4, 1}, - {0x0600, 0x0603, 1}, - {0x0606, 0x061b, 1}, - {0x061e, 0x061f, 1}, - {0x0621, 0x065e, 1}, - {0x0660, 0x070d, 1}, - {0x070f, 0x074a, 1}, - {0x074d, 0x07b1, 1}, - {0x07c0, 0x07fa, 1}, - {0x0901, 0x0939, 1}, - {0x093c, 0x094d, 1}, - {0x0950, 0x0954, 1}, - {0x0958, 0x0972, 1}, - {0x097b, 0x097f, 1}, - {0x0981, 0x0983, 1}, - {0x0985, 0x098c, 1}, - {0x098f, 0x0990, 1}, - {0x0993, 0x09a8, 1}, - {0x09aa, 0x09b0, 1}, - {0x09b2, 0x09b6, 4}, - {0x09b7, 0x09b9, 1}, - {0x09bc, 0x09c4, 1}, - {0x09c7, 0x09c8, 1}, - {0x09cb, 0x09ce, 1}, - {0x09d7, 0x09dc, 5}, - {0x09dd, 0x09df, 2}, - {0x09e0, 0x09e3, 1}, - {0x09e6, 0x09fa, 1}, - {0x0a01, 0x0a03, 1}, - {0x0a05, 0x0a0a, 1}, - {0x0a0f, 0x0a10, 1}, - {0x0a13, 0x0a28, 1}, - {0x0a2a, 0x0a30, 1}, - {0x0a32, 0x0a33, 1}, - {0x0a35, 0x0a36, 1}, - {0x0a38, 0x0a39, 1}, - {0x0a3c, 0x0a3e, 2}, - {0x0a3f, 0x0a42, 1}, - {0x0a47, 0x0a48, 1}, - {0x0a4b, 0x0a4d, 1}, - {0x0a51, 0x0a59, 8}, - {0x0a5a, 0x0a5c, 1}, - {0x0a5e, 0x0a66, 8}, - {0x0a67, 0x0a75, 1}, - {0x0a81, 0x0a83, 1}, - {0x0a85, 0x0a8d, 1}, - {0x0a8f, 0x0a91, 1}, - {0x0a93, 0x0aa8, 1}, - {0x0aaa, 0x0ab0, 1}, - {0x0ab2, 0x0ab3, 1}, - {0x0ab5, 0x0ab9, 1}, - {0x0abc, 0x0ac5, 1}, - {0x0ac7, 0x0ac9, 1}, - {0x0acb, 0x0acd, 1}, - {0x0ad0, 0x0ae0, 16}, - {0x0ae1, 0x0ae3, 1}, - {0x0ae6, 0x0aef, 1}, - {0x0af1, 0x0b01, 16}, - {0x0b02, 0x0b03, 1}, - {0x0b05, 0x0b0c, 1}, - {0x0b0f, 0x0b10, 1}, - {0x0b13, 0x0b28, 1}, - {0x0b2a, 0x0b30, 1}, - {0x0b32, 0x0b33, 1}, - {0x0b35, 0x0b39, 1}, - {0x0b3c, 0x0b44, 1}, - {0x0b47, 0x0b48, 1}, - {0x0b4b, 0x0b4d, 1}, - {0x0b56, 0x0b57, 1}, - {0x0b5c, 0x0b5d, 1}, - {0x0b5f, 0x0b63, 1}, - {0x0b66, 0x0b71, 1}, - {0x0b82, 0x0b83, 1}, - {0x0b85, 0x0b8a, 1}, - {0x0b8e, 0x0b90, 1}, - {0x0b92, 0x0b95, 1}, - {0x0b99, 0x0b9a, 1}, - {0x0b9c, 0x0b9e, 2}, - {0x0b9f, 0x0ba3, 4}, - {0x0ba4, 0x0ba8, 4}, - {0x0ba9, 0x0baa, 1}, - {0x0bae, 0x0bb9, 1}, - {0x0bbe, 0x0bc2, 1}, - {0x0bc6, 0x0bc8, 1}, - {0x0bca, 0x0bcd, 1}, - {0x0bd0, 0x0bd7, 7}, - {0x0be6, 0x0bfa, 1}, - {0x0c01, 0x0c03, 1}, - {0x0c05, 0x0c0c, 1}, - {0x0c0e, 0x0c10, 1}, - {0x0c12, 0x0c28, 1}, - {0x0c2a, 0x0c33, 1}, - {0x0c35, 0x0c39, 1}, - {0x0c3d, 0x0c44, 1}, - {0x0c46, 0x0c48, 1}, - {0x0c4a, 0x0c4d, 1}, - {0x0c55, 0x0c56, 1}, - {0x0c58, 0x0c59, 1}, - {0x0c60, 0x0c63, 1}, - {0x0c66, 0x0c6f, 1}, - {0x0c78, 0x0c7f, 1}, - {0x0c82, 0x0c83, 1}, - {0x0c85, 0x0c8c, 1}, - {0x0c8e, 0x0c90, 1}, - {0x0c92, 0x0ca8, 1}, - {0x0caa, 0x0cb3, 1}, - {0x0cb5, 0x0cb9, 1}, - {0x0cbc, 0x0cc4, 1}, - {0x0cc6, 0x0cc8, 1}, - {0x0cca, 0x0ccd, 1}, - {0x0cd5, 0x0cd6, 1}, - {0x0cde, 0x0ce0, 2}, - {0x0ce1, 0x0ce3, 1}, - {0x0ce6, 0x0cef, 1}, - {0x0cf1, 0x0cf2, 1}, - {0x0d02, 0x0d03, 1}, - {0x0d05, 0x0d0c, 1}, - {0x0d0e, 0x0d10, 1}, - {0x0d12, 0x0d28, 1}, - {0x0d2a, 0x0d39, 1}, - {0x0d3d, 0x0d44, 1}, - {0x0d46, 0x0d48, 1}, - {0x0d4a, 0x0d4d, 1}, - {0x0d57, 0x0d60, 9}, - {0x0d61, 0x0d63, 1}, - {0x0d66, 0x0d75, 1}, - {0x0d79, 0x0d7f, 1}, - {0x0d82, 0x0d83, 1}, - {0x0d85, 0x0d96, 1}, - {0x0d9a, 0x0db1, 1}, - {0x0db3, 0x0dbb, 1}, - {0x0dbd, 0x0dc0, 3}, - {0x0dc1, 0x0dc6, 1}, - {0x0dca, 0x0dcf, 5}, - {0x0dd0, 0x0dd4, 1}, - {0x0dd6, 0x0dd8, 2}, - {0x0dd9, 0x0ddf, 1}, - {0x0df2, 0x0df4, 1}, - {0x0e01, 0x0e3a, 1}, - {0x0e3f, 0x0e5b, 1}, - {0x0e81, 0x0e82, 1}, - {0x0e84, 0x0e87, 3}, - {0x0e88, 0x0e8a, 2}, - {0x0e8d, 0x0e94, 7}, - {0x0e95, 0x0e97, 1}, - {0x0e99, 0x0e9f, 1}, - {0x0ea1, 0x0ea3, 1}, - {0x0ea5, 0x0ea7, 2}, - {0x0eaa, 0x0eab, 1}, - {0x0ead, 0x0eb9, 1}, - {0x0ebb, 0x0ebd, 1}, - {0x0ec0, 0x0ec4, 1}, - {0x0ec6, 0x0ec8, 2}, - {0x0ec9, 0x0ecd, 1}, - {0x0ed0, 0x0ed9, 1}, - {0x0edc, 0x0edd, 1}, - {0x0f00, 0x0f47, 1}, - {0x0f49, 0x0f6c, 1}, - {0x0f71, 0x0f8b, 1}, - {0x0f90, 0x0f97, 1}, - {0x0f99, 0x0fbc, 1}, - {0x0fbe, 0x0fcc, 1}, - {0x0fce, 0x0fd4, 1}, - {0x1000, 0x1099, 1}, - {0x109e, 0x10c5, 1}, - {0x10d0, 0x10fc, 1}, - {0x1100, 0x1159, 1}, - {0x115f, 0x11a2, 1}, - {0x11a8, 0x11f9, 1}, - {0x1200, 0x1248, 1}, - {0x124a, 0x124d, 1}, - {0x1250, 0x1256, 1}, - {0x1258, 0x125a, 2}, - {0x125b, 0x125d, 1}, - {0x1260, 0x1288, 1}, - {0x128a, 0x128d, 1}, - {0x1290, 0x12b0, 1}, - {0x12b2, 0x12b5, 1}, - {0x12b8, 0x12be, 1}, - {0x12c0, 0x12c2, 2}, - {0x12c3, 0x12c5, 1}, - {0x12c8, 0x12d6, 1}, - {0x12d8, 0x1310, 1}, - {0x1312, 0x1315, 1}, - {0x1318, 0x135a, 1}, - {0x135f, 0x137c, 1}, - {0x1380, 0x1399, 1}, - {0x13a0, 0x13f4, 1}, - {0x1401, 0x1676, 1}, - {0x1680, 0x169c, 1}, - {0x16a0, 0x16f0, 1}, - {0x1700, 0x170c, 1}, - {0x170e, 0x1714, 1}, - {0x1720, 0x1736, 1}, - {0x1740, 0x1753, 1}, - {0x1760, 0x176c, 1}, - {0x176e, 0x1770, 1}, - {0x1772, 0x1773, 1}, - {0x1780, 0x17dd, 1}, - {0x17e0, 0x17e9, 1}, - {0x17f0, 0x17f9, 1}, - {0x1800, 0x180e, 1}, - {0x1810, 0x1819, 1}, - {0x1820, 0x1877, 1}, - {0x1880, 0x18aa, 1}, - {0x1900, 0x191c, 1}, - {0x1920, 0x192b, 1}, - {0x1930, 0x193b, 1}, - {0x1940, 0x1944, 4}, - {0x1945, 0x196d, 1}, - {0x1970, 0x1974, 1}, - {0x1980, 0x19a9, 1}, - {0x19b0, 0x19c9, 1}, - {0x19d0, 0x19d9, 1}, - {0x19de, 0x1a1b, 1}, - {0x1a1e, 0x1a1f, 1}, - {0x1b00, 0x1b4b, 1}, - {0x1b50, 0x1b7c, 1}, - {0x1b80, 0x1baa, 1}, - {0x1bae, 0x1bb9, 1}, - {0x1c00, 0x1c37, 1}, - {0x1c3b, 0x1c49, 1}, - {0x1c4d, 0x1c7f, 1}, - {0x1d00, 0x1de6, 1}, - {0x1dfe, 0x1f15, 1}, - {0x1f18, 0x1f1d, 1}, - {0x1f20, 0x1f45, 1}, - {0x1f48, 0x1f4d, 1}, - {0x1f50, 0x1f57, 1}, - {0x1f59, 0x1f5f, 2}, - {0x1f60, 0x1f7d, 1}, - {0x1f80, 0x1fb4, 1}, - {0x1fb6, 0x1fc4, 1}, - {0x1fc6, 0x1fd3, 1}, - {0x1fd6, 0x1fdb, 1}, - {0x1fdd, 0x1fef, 1}, - {0x1ff2, 0x1ff4, 1}, - {0x1ff6, 0x1ffe, 1}, - {0x2000, 0x2064, 1}, - {0x206a, 0x2071, 1}, - {0x2074, 0x208e, 1}, - {0x2090, 0x2094, 1}, - {0x20a0, 0x20b5, 1}, - {0x20d0, 0x20f0, 1}, - {0x2100, 0x214f, 1}, - {0x2153, 0x2188, 1}, - {0x2190, 0x23e7, 1}, - {0x2400, 0x2426, 1}, - {0x2440, 0x244a, 1}, - {0x2460, 0x269d, 1}, - {0x26a0, 0x26bc, 1}, - {0x26c0, 0x26c3, 1}, - {0x2701, 0x2704, 1}, - {0x2706, 0x2709, 1}, - {0x270c, 0x2727, 1}, - {0x2729, 0x274b, 1}, - {0x274d, 0x274f, 2}, - {0x2750, 0x2752, 1}, - {0x2756, 0x2758, 2}, - {0x2759, 0x275e, 1}, - {0x2761, 0x2794, 1}, - {0x2798, 0x27af, 1}, - {0x27b1, 0x27be, 1}, - {0x27c0, 0x27ca, 1}, - {0x27cc, 0x27d0, 4}, - {0x27d1, 0x2b4c, 1}, - {0x2b50, 0x2b54, 1}, - {0x2c00, 0x2c2e, 1}, - {0x2c30, 0x2c5e, 1}, - {0x2c60, 0x2c6f, 1}, - {0x2c71, 0x2c7d, 1}, - {0x2c80, 0x2cea, 1}, - {0x2cf9, 0x2d25, 1}, - {0x2d30, 0x2d65, 1}, - {0x2d6f, 0x2d80, 17}, - {0x2d81, 0x2d96, 1}, - {0x2da0, 0x2da6, 1}, - {0x2da8, 0x2dae, 1}, - {0x2db0, 0x2db6, 1}, - {0x2db8, 0x2dbe, 1}, - {0x2dc0, 0x2dc6, 1}, - {0x2dc8, 0x2dce, 1}, - {0x2dd0, 0x2dd6, 1}, - {0x2dd8, 0x2dde, 1}, - {0x2de0, 0x2e30, 1}, - {0x2e80, 0x2e99, 1}, - {0x2e9b, 0x2ef3, 1}, - {0x2f00, 0x2fd5, 1}, - {0x2ff0, 0x2ffb, 1}, - {0x3000, 0x303f, 1}, - {0x3041, 0x3096, 1}, - {0x3099, 0x30ff, 1}, - {0x3105, 0x312d, 1}, - {0x3131, 0x318e, 1}, - {0x3190, 0x31b7, 1}, - {0x31c0, 0x31e3, 1}, - {0x31f0, 0x321e, 1}, - {0x3220, 0x3243, 1}, - {0x3250, 0x32fe, 1}, - {0x3300, 0x4db5, 1}, - {0x4dc0, 0x9fc3, 1}, - {0xa000, 0xa48c, 1}, - {0xa490, 0xa4c6, 1}, - {0xa500, 0xa62b, 1}, - {0xa640, 0xa65f, 1}, - {0xa662, 0xa673, 1}, - {0xa67c, 0xa697, 1}, - {0xa700, 0xa78c, 1}, - {0xa7fb, 0xa82b, 1}, - {0xa840, 0xa877, 1}, - {0xa880, 0xa8c4, 1}, - {0xa8ce, 0xa8d9, 1}, - {0xa900, 0xa953, 1}, - {0xa95f, 0xaa00, 161}, - {0xaa01, 0xaa36, 1}, - {0xaa40, 0xaa4d, 1}, - {0xaa50, 0xaa59, 1}, - {0xaa5c, 0xaa5f, 1}, - {0xac00, 0xd7a3, 1}, - {0xd800, 0xfa2d, 1}, - {0xfa30, 0xfa6a, 1}, - {0xfa70, 0xfad9, 1}, - {0xfb00, 0xfb06, 1}, - {0xfb13, 0xfb17, 1}, - {0xfb1d, 0xfb36, 1}, - {0xfb38, 0xfb3c, 1}, - {0xfb3e, 0xfb40, 2}, - {0xfb41, 0xfb43, 2}, - {0xfb44, 0xfb46, 2}, - {0xfb47, 0xfbb1, 1}, - {0xfbd3, 0xfd3f, 1}, - {0xfd50, 0xfd8f, 1}, - {0xfd92, 0xfdc7, 1}, - {0xfdf0, 0xfdfd, 1}, - {0xfe00, 0xfe19, 1}, - {0xfe20, 0xfe26, 1}, - {0xfe30, 0xfe52, 1}, - {0xfe54, 0xfe66, 1}, - {0xfe68, 0xfe6b, 1}, - {0xfe70, 0xfe74, 1}, - {0xfe76, 0xfefc, 1}, - {0xfeff, 0xff01, 2}, - {0xff02, 0xffbe, 1}, - {0xffc2, 0xffc7, 1}, - {0xffca, 0xffcf, 1}, - {0xffd2, 0xffd7, 1}, - {0xffda, 0xffdc, 1}, - {0xffe0, 0xffe6, 1}, - {0xffe8, 0xffee, 1}, - {0xfff9, 0xfffd, 1}, - }, - R32: []unicode.Range32{ - {0x00010000, 0x0001000b, 1}, - {0x0001000d, 0x00010026, 1}, - {0x00010028, 0x0001003a, 1}, - {0x0001003c, 0x0001003d, 1}, - {0x0001003f, 0x0001004d, 1}, - {0x00010050, 0x0001005d, 1}, - {0x00010080, 0x000100fa, 1}, - {0x00010100, 0x00010102, 1}, - {0x00010107, 0x00010133, 1}, - {0x00010137, 0x0001018a, 1}, - {0x00010190, 0x0001019b, 1}, - {0x000101d0, 0x000101fd, 1}, - {0x00010280, 0x0001029c, 1}, - {0x000102a0, 0x000102d0, 1}, - {0x00010300, 0x0001031e, 1}, - {0x00010320, 0x00010323, 1}, - {0x00010330, 0x0001034a, 1}, - {0x00010380, 0x0001039d, 1}, - {0x0001039f, 0x000103c3, 1}, - {0x000103c8, 0x000103d5, 1}, - {0x00010400, 0x0001049d, 1}, - {0x000104a0, 0x000104a9, 1}, - {0x00010800, 0x00010805, 1}, - {0x00010808, 0x0001080a, 2}, - {0x0001080b, 0x00010835, 1}, - {0x00010837, 0x00010838, 1}, - {0x0001083c, 0x0001083f, 3}, - {0x00010900, 0x00010919, 1}, - {0x0001091f, 0x00010939, 1}, - {0x0001093f, 0x00010a00, 193}, - {0x00010a01, 0x00010a03, 1}, - {0x00010a05, 0x00010a06, 1}, - {0x00010a0c, 0x00010a13, 1}, - {0x00010a15, 0x00010a17, 1}, - {0x00010a19, 0x00010a33, 1}, - {0x00010a38, 0x00010a3a, 1}, - {0x00010a3f, 0x00010a47, 1}, - {0x00010a50, 0x00010a58, 1}, - {0x00012000, 0x0001236e, 1}, - {0x00012400, 0x00012462, 1}, - {0x00012470, 0x00012473, 1}, - {0x0001d000, 0x0001d0f5, 1}, - {0x0001d100, 0x0001d126, 1}, - {0x0001d129, 0x0001d1dd, 1}, - {0x0001d200, 0x0001d245, 1}, - {0x0001d300, 0x0001d356, 1}, - {0x0001d360, 0x0001d371, 1}, - {0x0001d400, 0x0001d454, 1}, - {0x0001d456, 0x0001d49c, 1}, - {0x0001d49e, 0x0001d49f, 1}, - {0x0001d4a2, 0x0001d4a5, 3}, - {0x0001d4a6, 0x0001d4a9, 3}, - {0x0001d4aa, 0x0001d4ac, 1}, - {0x0001d4ae, 0x0001d4b9, 1}, - {0x0001d4bb, 0x0001d4bd, 2}, - {0x0001d4be, 0x0001d4c3, 1}, - {0x0001d4c5, 0x0001d505, 1}, - {0x0001d507, 0x0001d50a, 1}, - {0x0001d50d, 0x0001d514, 1}, - {0x0001d516, 0x0001d51c, 1}, - {0x0001d51e, 0x0001d539, 1}, - {0x0001d53b, 0x0001d53e, 1}, - {0x0001d540, 0x0001d544, 1}, - {0x0001d546, 0x0001d54a, 4}, - {0x0001d54b, 0x0001d550, 1}, - {0x0001d552, 0x0001d6a5, 1}, - {0x0001d6a8, 0x0001d7cb, 1}, - {0x0001d7ce, 0x0001d7ff, 1}, - {0x0001f000, 0x0001f02b, 1}, - {0x0001f030, 0x0001f093, 1}, - {0x00020000, 0x0002a6d6, 1}, - {0x0002f800, 0x0002fa1d, 1}, - {0x000e0001, 0x000e0020, 31}, - {0x000e0021, 0x000e007f, 1}, - {0x000e0100, 0x000e01ef, 1}, - {0x000f0000, 0x000ffffd, 1}, - {0x00100000, 0x0010fffd, 1}, - }, - LatinOffset: 0, -} - -// size 3518 bytes (3 KiB) -var assigned5_2_0 = &unicode.RangeTable{ - R16: []unicode.Range16{ - {0x0000, 0x0377, 1}, - {0x037a, 0x037e, 1}, - {0x0384, 0x038a, 1}, - {0x038c, 0x038e, 2}, - {0x038f, 0x03a1, 1}, - {0x03a3, 0x0525, 1}, - {0x0531, 0x0556, 1}, - {0x0559, 0x055f, 1}, - {0x0561, 0x0587, 1}, - {0x0589, 0x058a, 1}, - {0x0591, 0x05c7, 1}, - {0x05d0, 0x05ea, 1}, - {0x05f0, 0x05f4, 1}, - {0x0600, 0x0603, 1}, - {0x0606, 0x061b, 1}, - {0x061e, 0x061f, 1}, - {0x0621, 0x065e, 1}, - {0x0660, 0x070d, 1}, - {0x070f, 0x074a, 1}, - {0x074d, 0x07b1, 1}, - {0x07c0, 0x07fa, 1}, - {0x0800, 0x082d, 1}, - {0x0830, 0x083e, 1}, - {0x0900, 0x0939, 1}, - {0x093c, 0x094e, 1}, - {0x0950, 0x0955, 1}, - {0x0958, 0x0972, 1}, - {0x0979, 0x097f, 1}, - {0x0981, 0x0983, 1}, - {0x0985, 0x098c, 1}, - {0x098f, 0x0990, 1}, - {0x0993, 0x09a8, 1}, - {0x09aa, 0x09b0, 1}, - {0x09b2, 0x09b6, 4}, - {0x09b7, 0x09b9, 1}, - {0x09bc, 0x09c4, 1}, - {0x09c7, 0x09c8, 1}, - {0x09cb, 0x09ce, 1}, - {0x09d7, 0x09dc, 5}, - {0x09dd, 0x09df, 2}, - {0x09e0, 0x09e3, 1}, - {0x09e6, 0x09fb, 1}, - {0x0a01, 0x0a03, 1}, - {0x0a05, 0x0a0a, 1}, - {0x0a0f, 0x0a10, 1}, - {0x0a13, 0x0a28, 1}, - {0x0a2a, 0x0a30, 1}, - {0x0a32, 0x0a33, 1}, - {0x0a35, 0x0a36, 1}, - {0x0a38, 0x0a39, 1}, - {0x0a3c, 0x0a3e, 2}, - {0x0a3f, 0x0a42, 1}, - {0x0a47, 0x0a48, 1}, - {0x0a4b, 0x0a4d, 1}, - {0x0a51, 0x0a59, 8}, - {0x0a5a, 0x0a5c, 1}, - {0x0a5e, 0x0a66, 8}, - {0x0a67, 0x0a75, 1}, - {0x0a81, 0x0a83, 1}, - {0x0a85, 0x0a8d, 1}, - {0x0a8f, 0x0a91, 1}, - {0x0a93, 0x0aa8, 1}, - {0x0aaa, 0x0ab0, 1}, - {0x0ab2, 0x0ab3, 1}, - {0x0ab5, 0x0ab9, 1}, - {0x0abc, 0x0ac5, 1}, - {0x0ac7, 0x0ac9, 1}, - {0x0acb, 0x0acd, 1}, - {0x0ad0, 0x0ae0, 16}, - {0x0ae1, 0x0ae3, 1}, - {0x0ae6, 0x0aef, 1}, - {0x0af1, 0x0b01, 16}, - {0x0b02, 0x0b03, 1}, - {0x0b05, 0x0b0c, 1}, - {0x0b0f, 0x0b10, 1}, - {0x0b13, 0x0b28, 1}, - {0x0b2a, 0x0b30, 1}, - {0x0b32, 0x0b33, 1}, - {0x0b35, 0x0b39, 1}, - {0x0b3c, 0x0b44, 1}, - {0x0b47, 0x0b48, 1}, - {0x0b4b, 0x0b4d, 1}, - {0x0b56, 0x0b57, 1}, - {0x0b5c, 0x0b5d, 1}, - {0x0b5f, 0x0b63, 1}, - {0x0b66, 0x0b71, 1}, - {0x0b82, 0x0b83, 1}, - {0x0b85, 0x0b8a, 1}, - {0x0b8e, 0x0b90, 1}, - {0x0b92, 0x0b95, 1}, - {0x0b99, 0x0b9a, 1}, - {0x0b9c, 0x0b9e, 2}, - {0x0b9f, 0x0ba3, 4}, - {0x0ba4, 0x0ba8, 4}, - {0x0ba9, 0x0baa, 1}, - {0x0bae, 0x0bb9, 1}, - {0x0bbe, 0x0bc2, 1}, - {0x0bc6, 0x0bc8, 1}, - {0x0bca, 0x0bcd, 1}, - {0x0bd0, 0x0bd7, 7}, - {0x0be6, 0x0bfa, 1}, - {0x0c01, 0x0c03, 1}, - {0x0c05, 0x0c0c, 1}, - {0x0c0e, 0x0c10, 1}, - {0x0c12, 0x0c28, 1}, - {0x0c2a, 0x0c33, 1}, - {0x0c35, 0x0c39, 1}, - {0x0c3d, 0x0c44, 1}, - {0x0c46, 0x0c48, 1}, - {0x0c4a, 0x0c4d, 1}, - {0x0c55, 0x0c56, 1}, - {0x0c58, 0x0c59, 1}, - {0x0c60, 0x0c63, 1}, - {0x0c66, 0x0c6f, 1}, - {0x0c78, 0x0c7f, 1}, - {0x0c82, 0x0c83, 1}, - {0x0c85, 0x0c8c, 1}, - {0x0c8e, 0x0c90, 1}, - {0x0c92, 0x0ca8, 1}, - {0x0caa, 0x0cb3, 1}, - {0x0cb5, 0x0cb9, 1}, - {0x0cbc, 0x0cc4, 1}, - {0x0cc6, 0x0cc8, 1}, - {0x0cca, 0x0ccd, 1}, - {0x0cd5, 0x0cd6, 1}, - {0x0cde, 0x0ce0, 2}, - {0x0ce1, 0x0ce3, 1}, - {0x0ce6, 0x0cef, 1}, - {0x0cf1, 0x0cf2, 1}, - {0x0d02, 0x0d03, 1}, - {0x0d05, 0x0d0c, 1}, - {0x0d0e, 0x0d10, 1}, - {0x0d12, 0x0d28, 1}, - {0x0d2a, 0x0d39, 1}, - {0x0d3d, 0x0d44, 1}, - {0x0d46, 0x0d48, 1}, - {0x0d4a, 0x0d4d, 1}, - {0x0d57, 0x0d60, 9}, - {0x0d61, 0x0d63, 1}, - {0x0d66, 0x0d75, 1}, - {0x0d79, 0x0d7f, 1}, - {0x0d82, 0x0d83, 1}, - {0x0d85, 0x0d96, 1}, - {0x0d9a, 0x0db1, 1}, - {0x0db3, 0x0dbb, 1}, - {0x0dbd, 0x0dc0, 3}, - {0x0dc1, 0x0dc6, 1}, - {0x0dca, 0x0dcf, 5}, - {0x0dd0, 0x0dd4, 1}, - {0x0dd6, 0x0dd8, 2}, - {0x0dd9, 0x0ddf, 1}, - {0x0df2, 0x0df4, 1}, - {0x0e01, 0x0e3a, 1}, - {0x0e3f, 0x0e5b, 1}, - {0x0e81, 0x0e82, 1}, - {0x0e84, 0x0e87, 3}, - {0x0e88, 0x0e8a, 2}, - {0x0e8d, 0x0e94, 7}, - {0x0e95, 0x0e97, 1}, - {0x0e99, 0x0e9f, 1}, - {0x0ea1, 0x0ea3, 1}, - {0x0ea5, 0x0ea7, 2}, - {0x0eaa, 0x0eab, 1}, - {0x0ead, 0x0eb9, 1}, - {0x0ebb, 0x0ebd, 1}, - {0x0ec0, 0x0ec4, 1}, - {0x0ec6, 0x0ec8, 2}, - {0x0ec9, 0x0ecd, 1}, - {0x0ed0, 0x0ed9, 1}, - {0x0edc, 0x0edd, 1}, - {0x0f00, 0x0f47, 1}, - {0x0f49, 0x0f6c, 1}, - {0x0f71, 0x0f8b, 1}, - {0x0f90, 0x0f97, 1}, - {0x0f99, 0x0fbc, 1}, - {0x0fbe, 0x0fcc, 1}, - {0x0fce, 0x0fd8, 1}, - {0x1000, 0x10c5, 1}, - {0x10d0, 0x10fc, 1}, - {0x1100, 0x1248, 1}, - {0x124a, 0x124d, 1}, - {0x1250, 0x1256, 1}, - {0x1258, 0x125a, 2}, - {0x125b, 0x125d, 1}, - {0x1260, 0x1288, 1}, - {0x128a, 0x128d, 1}, - {0x1290, 0x12b0, 1}, - {0x12b2, 0x12b5, 1}, - {0x12b8, 0x12be, 1}, - {0x12c0, 0x12c2, 2}, - {0x12c3, 0x12c5, 1}, - {0x12c8, 0x12d6, 1}, - {0x12d8, 0x1310, 1}, - {0x1312, 0x1315, 1}, - {0x1318, 0x135a, 1}, - {0x135f, 0x137c, 1}, - {0x1380, 0x1399, 1}, - {0x13a0, 0x13f4, 1}, - {0x1400, 0x169c, 1}, - {0x16a0, 0x16f0, 1}, - {0x1700, 0x170c, 1}, - {0x170e, 0x1714, 1}, - {0x1720, 0x1736, 1}, - {0x1740, 0x1753, 1}, - {0x1760, 0x176c, 1}, - {0x176e, 0x1770, 1}, - {0x1772, 0x1773, 1}, - {0x1780, 0x17dd, 1}, - {0x17e0, 0x17e9, 1}, - {0x17f0, 0x17f9, 1}, - {0x1800, 0x180e, 1}, - {0x1810, 0x1819, 1}, - {0x1820, 0x1877, 1}, - {0x1880, 0x18aa, 1}, - {0x18b0, 0x18f5, 1}, - {0x1900, 0x191c, 1}, - {0x1920, 0x192b, 1}, - {0x1930, 0x193b, 1}, - {0x1940, 0x1944, 4}, - {0x1945, 0x196d, 1}, - {0x1970, 0x1974, 1}, - {0x1980, 0x19ab, 1}, - {0x19b0, 0x19c9, 1}, - {0x19d0, 0x19da, 1}, - {0x19de, 0x1a1b, 1}, - {0x1a1e, 0x1a5e, 1}, - {0x1a60, 0x1a7c, 1}, - {0x1a7f, 0x1a89, 1}, - {0x1a90, 0x1a99, 1}, - {0x1aa0, 0x1aad, 1}, - {0x1b00, 0x1b4b, 1}, - {0x1b50, 0x1b7c, 1}, - {0x1b80, 0x1baa, 1}, - {0x1bae, 0x1bb9, 1}, - {0x1c00, 0x1c37, 1}, - {0x1c3b, 0x1c49, 1}, - {0x1c4d, 0x1c7f, 1}, - {0x1cd0, 0x1cf2, 1}, - {0x1d00, 0x1de6, 1}, - {0x1dfd, 0x1f15, 1}, - {0x1f18, 0x1f1d, 1}, - {0x1f20, 0x1f45, 1}, - {0x1f48, 0x1f4d, 1}, - {0x1f50, 0x1f57, 1}, - {0x1f59, 0x1f5f, 2}, - {0x1f60, 0x1f7d, 1}, - {0x1f80, 0x1fb4, 1}, - {0x1fb6, 0x1fc4, 1}, - {0x1fc6, 0x1fd3, 1}, - {0x1fd6, 0x1fdb, 1}, - {0x1fdd, 0x1fef, 1}, - {0x1ff2, 0x1ff4, 1}, - {0x1ff6, 0x1ffe, 1}, - {0x2000, 0x2064, 1}, - {0x206a, 0x2071, 1}, - {0x2074, 0x208e, 1}, - {0x2090, 0x2094, 1}, - {0x20a0, 0x20b8, 1}, - {0x20d0, 0x20f0, 1}, - {0x2100, 0x2189, 1}, - {0x2190, 0x23e8, 1}, - {0x2400, 0x2426, 1}, - {0x2440, 0x244a, 1}, - {0x2460, 0x26cd, 1}, - {0x26cf, 0x26e1, 1}, - {0x26e3, 0x26e8, 5}, - {0x26e9, 0x26ff, 1}, - {0x2701, 0x2704, 1}, - {0x2706, 0x2709, 1}, - {0x270c, 0x2727, 1}, - {0x2729, 0x274b, 1}, - {0x274d, 0x274f, 2}, - {0x2750, 0x2752, 1}, - {0x2756, 0x275e, 1}, - {0x2761, 0x2794, 1}, - {0x2798, 0x27af, 1}, - {0x27b1, 0x27be, 1}, - {0x27c0, 0x27ca, 1}, - {0x27cc, 0x27d0, 4}, - {0x27d1, 0x2b4c, 1}, - {0x2b50, 0x2b59, 1}, - {0x2c00, 0x2c2e, 1}, - {0x2c30, 0x2c5e, 1}, - {0x2c60, 0x2cf1, 1}, - {0x2cf9, 0x2d25, 1}, - {0x2d30, 0x2d65, 1}, - {0x2d6f, 0x2d80, 17}, - {0x2d81, 0x2d96, 1}, - {0x2da0, 0x2da6, 1}, - {0x2da8, 0x2dae, 1}, - {0x2db0, 0x2db6, 1}, - {0x2db8, 0x2dbe, 1}, - {0x2dc0, 0x2dc6, 1}, - {0x2dc8, 0x2dce, 1}, - {0x2dd0, 0x2dd6, 1}, - {0x2dd8, 0x2dde, 1}, - {0x2de0, 0x2e31, 1}, - {0x2e80, 0x2e99, 1}, - {0x2e9b, 0x2ef3, 1}, - {0x2f00, 0x2fd5, 1}, - {0x2ff0, 0x2ffb, 1}, - {0x3000, 0x303f, 1}, - {0x3041, 0x3096, 1}, - {0x3099, 0x30ff, 1}, - {0x3105, 0x312d, 1}, - {0x3131, 0x318e, 1}, - {0x3190, 0x31b7, 1}, - {0x31c0, 0x31e3, 1}, - {0x31f0, 0x321e, 1}, - {0x3220, 0x32fe, 1}, - {0x3300, 0x4db5, 1}, - {0x4dc0, 0x9fcb, 1}, - {0xa000, 0xa48c, 1}, - {0xa490, 0xa4c6, 1}, - {0xa4d0, 0xa62b, 1}, - {0xa640, 0xa65f, 1}, - {0xa662, 0xa673, 1}, - {0xa67c, 0xa697, 1}, - {0xa6a0, 0xa6f7, 1}, - {0xa700, 0xa78c, 1}, - {0xa7fb, 0xa82b, 1}, - {0xa830, 0xa839, 1}, - {0xa840, 0xa877, 1}, - {0xa880, 0xa8c4, 1}, - {0xa8ce, 0xa8d9, 1}, - {0xa8e0, 0xa8fb, 1}, - {0xa900, 0xa953, 1}, - {0xa95f, 0xa97c, 1}, - {0xa980, 0xa9cd, 1}, - {0xa9cf, 0xa9d9, 1}, - {0xa9de, 0xa9df, 1}, - {0xaa00, 0xaa36, 1}, - {0xaa40, 0xaa4d, 1}, - {0xaa50, 0xaa59, 1}, - {0xaa5c, 0xaa7b, 1}, - {0xaa80, 0xaac2, 1}, - {0xaadb, 0xaadf, 1}, - {0xabc0, 0xabed, 1}, - {0xabf0, 0xabf9, 1}, - {0xac00, 0xd7a3, 1}, - {0xd7b0, 0xd7c6, 1}, - {0xd7cb, 0xd7fb, 1}, - {0xd800, 0xfa2d, 1}, - {0xfa30, 0xfa6d, 1}, - {0xfa70, 0xfad9, 1}, - {0xfb00, 0xfb06, 1}, - {0xfb13, 0xfb17, 1}, - {0xfb1d, 0xfb36, 1}, - {0xfb38, 0xfb3c, 1}, - {0xfb3e, 0xfb40, 2}, - {0xfb41, 0xfb43, 2}, - {0xfb44, 0xfb46, 2}, - {0xfb47, 0xfbb1, 1}, - {0xfbd3, 0xfd3f, 1}, - {0xfd50, 0xfd8f, 1}, - {0xfd92, 0xfdc7, 1}, - {0xfdf0, 0xfdfd, 1}, - {0xfe00, 0xfe19, 1}, - {0xfe20, 0xfe26, 1}, - {0xfe30, 0xfe52, 1}, - {0xfe54, 0xfe66, 1}, - {0xfe68, 0xfe6b, 1}, - {0xfe70, 0xfe74, 1}, - {0xfe76, 0xfefc, 1}, - {0xfeff, 0xff01, 2}, - {0xff02, 0xffbe, 1}, - {0xffc2, 0xffc7, 1}, - {0xffca, 0xffcf, 1}, - {0xffd2, 0xffd7, 1}, - {0xffda, 0xffdc, 1}, - {0xffe0, 0xffe6, 1}, - {0xffe8, 0xffee, 1}, - {0xfff9, 0xfffd, 1}, - }, - R32: []unicode.Range32{ - {0x00010000, 0x0001000b, 1}, - {0x0001000d, 0x00010026, 1}, - {0x00010028, 0x0001003a, 1}, - {0x0001003c, 0x0001003d, 1}, - {0x0001003f, 0x0001004d, 1}, - {0x00010050, 0x0001005d, 1}, - {0x00010080, 0x000100fa, 1}, - {0x00010100, 0x00010102, 1}, - {0x00010107, 0x00010133, 1}, - {0x00010137, 0x0001018a, 1}, - {0x00010190, 0x0001019b, 1}, - {0x000101d0, 0x000101fd, 1}, - {0x00010280, 0x0001029c, 1}, - {0x000102a0, 0x000102d0, 1}, - {0x00010300, 0x0001031e, 1}, - {0x00010320, 0x00010323, 1}, - {0x00010330, 0x0001034a, 1}, - {0x00010380, 0x0001039d, 1}, - {0x0001039f, 0x000103c3, 1}, - {0x000103c8, 0x000103d5, 1}, - {0x00010400, 0x0001049d, 1}, - {0x000104a0, 0x000104a9, 1}, - {0x00010800, 0x00010805, 1}, - {0x00010808, 0x0001080a, 2}, - {0x0001080b, 0x00010835, 1}, - {0x00010837, 0x00010838, 1}, - {0x0001083c, 0x0001083f, 3}, - {0x00010840, 0x00010855, 1}, - {0x00010857, 0x0001085f, 1}, - {0x00010900, 0x0001091b, 1}, - {0x0001091f, 0x00010939, 1}, - {0x0001093f, 0x00010a00, 193}, - {0x00010a01, 0x00010a03, 1}, - {0x00010a05, 0x00010a06, 1}, - {0x00010a0c, 0x00010a13, 1}, - {0x00010a15, 0x00010a17, 1}, - {0x00010a19, 0x00010a33, 1}, - {0x00010a38, 0x00010a3a, 1}, - {0x00010a3f, 0x00010a47, 1}, - {0x00010a50, 0x00010a58, 1}, - {0x00010a60, 0x00010a7f, 1}, - {0x00010b00, 0x00010b35, 1}, - {0x00010b39, 0x00010b55, 1}, - {0x00010b58, 0x00010b72, 1}, - {0x00010b78, 0x00010b7f, 1}, - {0x00010c00, 0x00010c48, 1}, - {0x00010e60, 0x00010e7e, 1}, - {0x00011080, 0x000110c1, 1}, - {0x00012000, 0x0001236e, 1}, - {0x00012400, 0x00012462, 1}, - {0x00012470, 0x00012473, 1}, - {0x00013000, 0x0001342e, 1}, - {0x0001d000, 0x0001d0f5, 1}, - {0x0001d100, 0x0001d126, 1}, - {0x0001d129, 0x0001d1dd, 1}, - {0x0001d200, 0x0001d245, 1}, - {0x0001d300, 0x0001d356, 1}, - {0x0001d360, 0x0001d371, 1}, - {0x0001d400, 0x0001d454, 1}, - {0x0001d456, 0x0001d49c, 1}, - {0x0001d49e, 0x0001d49f, 1}, - {0x0001d4a2, 0x0001d4a5, 3}, - {0x0001d4a6, 0x0001d4a9, 3}, - {0x0001d4aa, 0x0001d4ac, 1}, - {0x0001d4ae, 0x0001d4b9, 1}, - {0x0001d4bb, 0x0001d4bd, 2}, - {0x0001d4be, 0x0001d4c3, 1}, - {0x0001d4c5, 0x0001d505, 1}, - {0x0001d507, 0x0001d50a, 1}, - {0x0001d50d, 0x0001d514, 1}, - {0x0001d516, 0x0001d51c, 1}, - {0x0001d51e, 0x0001d539, 1}, - {0x0001d53b, 0x0001d53e, 1}, - {0x0001d540, 0x0001d544, 1}, - {0x0001d546, 0x0001d54a, 4}, - {0x0001d54b, 0x0001d550, 1}, - {0x0001d552, 0x0001d6a5, 1}, - {0x0001d6a8, 0x0001d7cb, 1}, - {0x0001d7ce, 0x0001d7ff, 1}, - {0x0001f000, 0x0001f02b, 1}, - {0x0001f030, 0x0001f093, 1}, - {0x0001f100, 0x0001f10a, 1}, - {0x0001f110, 0x0001f12e, 1}, - {0x0001f131, 0x0001f13d, 12}, - {0x0001f13f, 0x0001f142, 3}, - {0x0001f146, 0x0001f14a, 4}, - {0x0001f14b, 0x0001f14e, 1}, - {0x0001f157, 0x0001f15f, 8}, - {0x0001f179, 0x0001f17b, 2}, - {0x0001f17c, 0x0001f17f, 3}, - {0x0001f18a, 0x0001f18d, 1}, - {0x0001f190, 0x0001f200, 112}, - {0x0001f210, 0x0001f231, 1}, - {0x0001f240, 0x0001f248, 1}, - {0x00020000, 0x0002a6d6, 1}, - {0x0002a700, 0x0002b734, 1}, - {0x0002f800, 0x0002fa1d, 1}, - {0x000e0001, 0x000e0020, 31}, - {0x000e0021, 0x000e007f, 1}, - {0x000e0100, 0x000e01ef, 1}, - {0x000f0000, 0x000ffffd, 1}, - {0x00100000, 0x0010fffd, 1}, - }, - LatinOffset: 0, -} - -// size 3812 bytes (3 KiB) -var assigned6_0_0 = &unicode.RangeTable{ - R16: []unicode.Range16{ - {0x0000, 0x0377, 1}, - {0x037a, 0x037e, 1}, - {0x0384, 0x038a, 1}, - {0x038c, 0x038e, 2}, - {0x038f, 0x03a1, 1}, - {0x03a3, 0x0527, 1}, - {0x0531, 0x0556, 1}, - {0x0559, 0x055f, 1}, - {0x0561, 0x0587, 1}, - {0x0589, 0x058a, 1}, - {0x0591, 0x05c7, 1}, - {0x05d0, 0x05ea, 1}, - {0x05f0, 0x05f4, 1}, - {0x0600, 0x0603, 1}, - {0x0606, 0x061b, 1}, - {0x061e, 0x070d, 1}, - {0x070f, 0x074a, 1}, - {0x074d, 0x07b1, 1}, - {0x07c0, 0x07fa, 1}, - {0x0800, 0x082d, 1}, - {0x0830, 0x083e, 1}, - {0x0840, 0x085b, 1}, - {0x085e, 0x0900, 162}, - {0x0901, 0x0977, 1}, - {0x0979, 0x097f, 1}, - {0x0981, 0x0983, 1}, - {0x0985, 0x098c, 1}, - {0x098f, 0x0990, 1}, - {0x0993, 0x09a8, 1}, - {0x09aa, 0x09b0, 1}, - {0x09b2, 0x09b6, 4}, - {0x09b7, 0x09b9, 1}, - {0x09bc, 0x09c4, 1}, - {0x09c7, 0x09c8, 1}, - {0x09cb, 0x09ce, 1}, - {0x09d7, 0x09dc, 5}, - {0x09dd, 0x09df, 2}, - {0x09e0, 0x09e3, 1}, - {0x09e6, 0x09fb, 1}, - {0x0a01, 0x0a03, 1}, - {0x0a05, 0x0a0a, 1}, - {0x0a0f, 0x0a10, 1}, - {0x0a13, 0x0a28, 1}, - {0x0a2a, 0x0a30, 1}, - {0x0a32, 0x0a33, 1}, - {0x0a35, 0x0a36, 1}, - {0x0a38, 0x0a39, 1}, - {0x0a3c, 0x0a3e, 2}, - {0x0a3f, 0x0a42, 1}, - {0x0a47, 0x0a48, 1}, - {0x0a4b, 0x0a4d, 1}, - {0x0a51, 0x0a59, 8}, - {0x0a5a, 0x0a5c, 1}, - {0x0a5e, 0x0a66, 8}, - {0x0a67, 0x0a75, 1}, - {0x0a81, 0x0a83, 1}, - {0x0a85, 0x0a8d, 1}, - {0x0a8f, 0x0a91, 1}, - {0x0a93, 0x0aa8, 1}, - {0x0aaa, 0x0ab0, 1}, - {0x0ab2, 0x0ab3, 1}, - {0x0ab5, 0x0ab9, 1}, - {0x0abc, 0x0ac5, 1}, - {0x0ac7, 0x0ac9, 1}, - {0x0acb, 0x0acd, 1}, - {0x0ad0, 0x0ae0, 16}, - {0x0ae1, 0x0ae3, 1}, - {0x0ae6, 0x0aef, 1}, - {0x0af1, 0x0b01, 16}, - {0x0b02, 0x0b03, 1}, - {0x0b05, 0x0b0c, 1}, - {0x0b0f, 0x0b10, 1}, - {0x0b13, 0x0b28, 1}, - {0x0b2a, 0x0b30, 1}, - {0x0b32, 0x0b33, 1}, - {0x0b35, 0x0b39, 1}, - {0x0b3c, 0x0b44, 1}, - {0x0b47, 0x0b48, 1}, - {0x0b4b, 0x0b4d, 1}, - {0x0b56, 0x0b57, 1}, - {0x0b5c, 0x0b5d, 1}, - {0x0b5f, 0x0b63, 1}, - {0x0b66, 0x0b77, 1}, - {0x0b82, 0x0b83, 1}, - {0x0b85, 0x0b8a, 1}, - {0x0b8e, 0x0b90, 1}, - {0x0b92, 0x0b95, 1}, - {0x0b99, 0x0b9a, 1}, - {0x0b9c, 0x0b9e, 2}, - {0x0b9f, 0x0ba3, 4}, - {0x0ba4, 0x0ba8, 4}, - {0x0ba9, 0x0baa, 1}, - {0x0bae, 0x0bb9, 1}, - {0x0bbe, 0x0bc2, 1}, - {0x0bc6, 0x0bc8, 1}, - {0x0bca, 0x0bcd, 1}, - {0x0bd0, 0x0bd7, 7}, - {0x0be6, 0x0bfa, 1}, - {0x0c01, 0x0c03, 1}, - {0x0c05, 0x0c0c, 1}, - {0x0c0e, 0x0c10, 1}, - {0x0c12, 0x0c28, 1}, - {0x0c2a, 0x0c33, 1}, - {0x0c35, 0x0c39, 1}, - {0x0c3d, 0x0c44, 1}, - {0x0c46, 0x0c48, 1}, - {0x0c4a, 0x0c4d, 1}, - {0x0c55, 0x0c56, 1}, - {0x0c58, 0x0c59, 1}, - {0x0c60, 0x0c63, 1}, - {0x0c66, 0x0c6f, 1}, - {0x0c78, 0x0c7f, 1}, - {0x0c82, 0x0c83, 1}, - {0x0c85, 0x0c8c, 1}, - {0x0c8e, 0x0c90, 1}, - {0x0c92, 0x0ca8, 1}, - {0x0caa, 0x0cb3, 1}, - {0x0cb5, 0x0cb9, 1}, - {0x0cbc, 0x0cc4, 1}, - {0x0cc6, 0x0cc8, 1}, - {0x0cca, 0x0ccd, 1}, - {0x0cd5, 0x0cd6, 1}, - {0x0cde, 0x0ce0, 2}, - {0x0ce1, 0x0ce3, 1}, - {0x0ce6, 0x0cef, 1}, - {0x0cf1, 0x0cf2, 1}, - {0x0d02, 0x0d03, 1}, - {0x0d05, 0x0d0c, 1}, - {0x0d0e, 0x0d10, 1}, - {0x0d12, 0x0d3a, 1}, - {0x0d3d, 0x0d44, 1}, - {0x0d46, 0x0d48, 1}, - {0x0d4a, 0x0d4e, 1}, - {0x0d57, 0x0d60, 9}, - {0x0d61, 0x0d63, 1}, - {0x0d66, 0x0d75, 1}, - {0x0d79, 0x0d7f, 1}, - {0x0d82, 0x0d83, 1}, - {0x0d85, 0x0d96, 1}, - {0x0d9a, 0x0db1, 1}, - {0x0db3, 0x0dbb, 1}, - {0x0dbd, 0x0dc0, 3}, - {0x0dc1, 0x0dc6, 1}, - {0x0dca, 0x0dcf, 5}, - {0x0dd0, 0x0dd4, 1}, - {0x0dd6, 0x0dd8, 2}, - {0x0dd9, 0x0ddf, 1}, - {0x0df2, 0x0df4, 1}, - {0x0e01, 0x0e3a, 1}, - {0x0e3f, 0x0e5b, 1}, - {0x0e81, 0x0e82, 1}, - {0x0e84, 0x0e87, 3}, - {0x0e88, 0x0e8a, 2}, - {0x0e8d, 0x0e94, 7}, - {0x0e95, 0x0e97, 1}, - {0x0e99, 0x0e9f, 1}, - {0x0ea1, 0x0ea3, 1}, - {0x0ea5, 0x0ea7, 2}, - {0x0eaa, 0x0eab, 1}, - {0x0ead, 0x0eb9, 1}, - {0x0ebb, 0x0ebd, 1}, - {0x0ec0, 0x0ec4, 1}, - {0x0ec6, 0x0ec8, 2}, - {0x0ec9, 0x0ecd, 1}, - {0x0ed0, 0x0ed9, 1}, - {0x0edc, 0x0edd, 1}, - {0x0f00, 0x0f47, 1}, - {0x0f49, 0x0f6c, 1}, - {0x0f71, 0x0f97, 1}, - {0x0f99, 0x0fbc, 1}, - {0x0fbe, 0x0fcc, 1}, - {0x0fce, 0x0fda, 1}, - {0x1000, 0x10c5, 1}, - {0x10d0, 0x10fc, 1}, - {0x1100, 0x1248, 1}, - {0x124a, 0x124d, 1}, - {0x1250, 0x1256, 1}, - {0x1258, 0x125a, 2}, - {0x125b, 0x125d, 1}, - {0x1260, 0x1288, 1}, - {0x128a, 0x128d, 1}, - {0x1290, 0x12b0, 1}, - {0x12b2, 0x12b5, 1}, - {0x12b8, 0x12be, 1}, - {0x12c0, 0x12c2, 2}, - {0x12c3, 0x12c5, 1}, - {0x12c8, 0x12d6, 1}, - {0x12d8, 0x1310, 1}, - {0x1312, 0x1315, 1}, - {0x1318, 0x135a, 1}, - {0x135d, 0x137c, 1}, - {0x1380, 0x1399, 1}, - {0x13a0, 0x13f4, 1}, - {0x1400, 0x169c, 1}, - {0x16a0, 0x16f0, 1}, - {0x1700, 0x170c, 1}, - {0x170e, 0x1714, 1}, - {0x1720, 0x1736, 1}, - {0x1740, 0x1753, 1}, - {0x1760, 0x176c, 1}, - {0x176e, 0x1770, 1}, - {0x1772, 0x1773, 1}, - {0x1780, 0x17dd, 1}, - {0x17e0, 0x17e9, 1}, - {0x17f0, 0x17f9, 1}, - {0x1800, 0x180e, 1}, - {0x1810, 0x1819, 1}, - {0x1820, 0x1877, 1}, - {0x1880, 0x18aa, 1}, - {0x18b0, 0x18f5, 1}, - {0x1900, 0x191c, 1}, - {0x1920, 0x192b, 1}, - {0x1930, 0x193b, 1}, - {0x1940, 0x1944, 4}, - {0x1945, 0x196d, 1}, - {0x1970, 0x1974, 1}, - {0x1980, 0x19ab, 1}, - {0x19b0, 0x19c9, 1}, - {0x19d0, 0x19da, 1}, - {0x19de, 0x1a1b, 1}, - {0x1a1e, 0x1a5e, 1}, - {0x1a60, 0x1a7c, 1}, - {0x1a7f, 0x1a89, 1}, - {0x1a90, 0x1a99, 1}, - {0x1aa0, 0x1aad, 1}, - {0x1b00, 0x1b4b, 1}, - {0x1b50, 0x1b7c, 1}, - {0x1b80, 0x1baa, 1}, - {0x1bae, 0x1bb9, 1}, - {0x1bc0, 0x1bf3, 1}, - {0x1bfc, 0x1c37, 1}, - {0x1c3b, 0x1c49, 1}, - {0x1c4d, 0x1c7f, 1}, - {0x1cd0, 0x1cf2, 1}, - {0x1d00, 0x1de6, 1}, - {0x1dfc, 0x1f15, 1}, - {0x1f18, 0x1f1d, 1}, - {0x1f20, 0x1f45, 1}, - {0x1f48, 0x1f4d, 1}, - {0x1f50, 0x1f57, 1}, - {0x1f59, 0x1f5f, 2}, - {0x1f60, 0x1f7d, 1}, - {0x1f80, 0x1fb4, 1}, - {0x1fb6, 0x1fc4, 1}, - {0x1fc6, 0x1fd3, 1}, - {0x1fd6, 0x1fdb, 1}, - {0x1fdd, 0x1fef, 1}, - {0x1ff2, 0x1ff4, 1}, - {0x1ff6, 0x1ffe, 1}, - {0x2000, 0x2064, 1}, - {0x206a, 0x2071, 1}, - {0x2074, 0x208e, 1}, - {0x2090, 0x209c, 1}, - {0x20a0, 0x20b9, 1}, - {0x20d0, 0x20f0, 1}, - {0x2100, 0x2189, 1}, - {0x2190, 0x23f3, 1}, - {0x2400, 0x2426, 1}, - {0x2440, 0x244a, 1}, - {0x2460, 0x26ff, 1}, - {0x2701, 0x27ca, 1}, - {0x27cc, 0x27ce, 2}, - {0x27cf, 0x2b4c, 1}, - {0x2b50, 0x2b59, 1}, - {0x2c00, 0x2c2e, 1}, - {0x2c30, 0x2c5e, 1}, - {0x2c60, 0x2cf1, 1}, - {0x2cf9, 0x2d25, 1}, - {0x2d30, 0x2d65, 1}, - {0x2d6f, 0x2d70, 1}, - {0x2d7f, 0x2d96, 1}, - {0x2da0, 0x2da6, 1}, - {0x2da8, 0x2dae, 1}, - {0x2db0, 0x2db6, 1}, - {0x2db8, 0x2dbe, 1}, - {0x2dc0, 0x2dc6, 1}, - {0x2dc8, 0x2dce, 1}, - {0x2dd0, 0x2dd6, 1}, - {0x2dd8, 0x2dde, 1}, - {0x2de0, 0x2e31, 1}, - {0x2e80, 0x2e99, 1}, - {0x2e9b, 0x2ef3, 1}, - {0x2f00, 0x2fd5, 1}, - {0x2ff0, 0x2ffb, 1}, - {0x3000, 0x303f, 1}, - {0x3041, 0x3096, 1}, - {0x3099, 0x30ff, 1}, - {0x3105, 0x312d, 1}, - {0x3131, 0x318e, 1}, - {0x3190, 0x31ba, 1}, - {0x31c0, 0x31e3, 1}, - {0x31f0, 0x321e, 1}, - {0x3220, 0x32fe, 1}, - {0x3300, 0x4db5, 1}, - {0x4dc0, 0x9fcb, 1}, - {0xa000, 0xa48c, 1}, - {0xa490, 0xa4c6, 1}, - {0xa4d0, 0xa62b, 1}, - {0xa640, 0xa673, 1}, - {0xa67c, 0xa697, 1}, - {0xa6a0, 0xa6f7, 1}, - {0xa700, 0xa78e, 1}, - {0xa790, 0xa791, 1}, - {0xa7a0, 0xa7a9, 1}, - {0xa7fa, 0xa82b, 1}, - {0xa830, 0xa839, 1}, - {0xa840, 0xa877, 1}, - {0xa880, 0xa8c4, 1}, - {0xa8ce, 0xa8d9, 1}, - {0xa8e0, 0xa8fb, 1}, - {0xa900, 0xa953, 1}, - {0xa95f, 0xa97c, 1}, - {0xa980, 0xa9cd, 1}, - {0xa9cf, 0xa9d9, 1}, - {0xa9de, 0xa9df, 1}, - {0xaa00, 0xaa36, 1}, - {0xaa40, 0xaa4d, 1}, - {0xaa50, 0xaa59, 1}, - {0xaa5c, 0xaa7b, 1}, - {0xaa80, 0xaac2, 1}, - {0xaadb, 0xaadf, 1}, - {0xab01, 0xab06, 1}, - {0xab09, 0xab0e, 1}, - {0xab11, 0xab16, 1}, - {0xab20, 0xab26, 1}, - {0xab28, 0xab2e, 1}, - {0xabc0, 0xabed, 1}, - {0xabf0, 0xabf9, 1}, - {0xac00, 0xd7a3, 1}, - {0xd7b0, 0xd7c6, 1}, - {0xd7cb, 0xd7fb, 1}, - {0xd800, 0xfa2d, 1}, - {0xfa30, 0xfa6d, 1}, - {0xfa70, 0xfad9, 1}, - {0xfb00, 0xfb06, 1}, - {0xfb13, 0xfb17, 1}, - {0xfb1d, 0xfb36, 1}, - {0xfb38, 0xfb3c, 1}, - {0xfb3e, 0xfb40, 2}, - {0xfb41, 0xfb43, 2}, - {0xfb44, 0xfb46, 2}, - {0xfb47, 0xfbc1, 1}, - {0xfbd3, 0xfd3f, 1}, - {0xfd50, 0xfd8f, 1}, - {0xfd92, 0xfdc7, 1}, - {0xfdf0, 0xfdfd, 1}, - {0xfe00, 0xfe19, 1}, - {0xfe20, 0xfe26, 1}, - {0xfe30, 0xfe52, 1}, - {0xfe54, 0xfe66, 1}, - {0xfe68, 0xfe6b, 1}, - {0xfe70, 0xfe74, 1}, - {0xfe76, 0xfefc, 1}, - {0xfeff, 0xff01, 2}, - {0xff02, 0xffbe, 1}, - {0xffc2, 0xffc7, 1}, - {0xffca, 0xffcf, 1}, - {0xffd2, 0xffd7, 1}, - {0xffda, 0xffdc, 1}, - {0xffe0, 0xffe6, 1}, - {0xffe8, 0xffee, 1}, - {0xfff9, 0xfffd, 1}, - }, - R32: []unicode.Range32{ - {0x00010000, 0x0001000b, 1}, - {0x0001000d, 0x00010026, 1}, - {0x00010028, 0x0001003a, 1}, - {0x0001003c, 0x0001003d, 1}, - {0x0001003f, 0x0001004d, 1}, - {0x00010050, 0x0001005d, 1}, - {0x00010080, 0x000100fa, 1}, - {0x00010100, 0x00010102, 1}, - {0x00010107, 0x00010133, 1}, - {0x00010137, 0x0001018a, 1}, - {0x00010190, 0x0001019b, 1}, - {0x000101d0, 0x000101fd, 1}, - {0x00010280, 0x0001029c, 1}, - {0x000102a0, 0x000102d0, 1}, - {0x00010300, 0x0001031e, 1}, - {0x00010320, 0x00010323, 1}, - {0x00010330, 0x0001034a, 1}, - {0x00010380, 0x0001039d, 1}, - {0x0001039f, 0x000103c3, 1}, - {0x000103c8, 0x000103d5, 1}, - {0x00010400, 0x0001049d, 1}, - {0x000104a0, 0x000104a9, 1}, - {0x00010800, 0x00010805, 1}, - {0x00010808, 0x0001080a, 2}, - {0x0001080b, 0x00010835, 1}, - {0x00010837, 0x00010838, 1}, - {0x0001083c, 0x0001083f, 3}, - {0x00010840, 0x00010855, 1}, - {0x00010857, 0x0001085f, 1}, - {0x00010900, 0x0001091b, 1}, - {0x0001091f, 0x00010939, 1}, - {0x0001093f, 0x00010a00, 193}, - {0x00010a01, 0x00010a03, 1}, - {0x00010a05, 0x00010a06, 1}, - {0x00010a0c, 0x00010a13, 1}, - {0x00010a15, 0x00010a17, 1}, - {0x00010a19, 0x00010a33, 1}, - {0x00010a38, 0x00010a3a, 1}, - {0x00010a3f, 0x00010a47, 1}, - {0x00010a50, 0x00010a58, 1}, - {0x00010a60, 0x00010a7f, 1}, - {0x00010b00, 0x00010b35, 1}, - {0x00010b39, 0x00010b55, 1}, - {0x00010b58, 0x00010b72, 1}, - {0x00010b78, 0x00010b7f, 1}, - {0x00010c00, 0x00010c48, 1}, - {0x00010e60, 0x00010e7e, 1}, - {0x00011000, 0x0001104d, 1}, - {0x00011052, 0x0001106f, 1}, - {0x00011080, 0x000110c1, 1}, - {0x00012000, 0x0001236e, 1}, - {0x00012400, 0x00012462, 1}, - {0x00012470, 0x00012473, 1}, - {0x00013000, 0x0001342e, 1}, - {0x00016800, 0x00016a38, 1}, - {0x0001b000, 0x0001b001, 1}, - {0x0001d000, 0x0001d0f5, 1}, - {0x0001d100, 0x0001d126, 1}, - {0x0001d129, 0x0001d1dd, 1}, - {0x0001d200, 0x0001d245, 1}, - {0x0001d300, 0x0001d356, 1}, - {0x0001d360, 0x0001d371, 1}, - {0x0001d400, 0x0001d454, 1}, - {0x0001d456, 0x0001d49c, 1}, - {0x0001d49e, 0x0001d49f, 1}, - {0x0001d4a2, 0x0001d4a5, 3}, - {0x0001d4a6, 0x0001d4a9, 3}, - {0x0001d4aa, 0x0001d4ac, 1}, - {0x0001d4ae, 0x0001d4b9, 1}, - {0x0001d4bb, 0x0001d4bd, 2}, - {0x0001d4be, 0x0001d4c3, 1}, - {0x0001d4c5, 0x0001d505, 1}, - {0x0001d507, 0x0001d50a, 1}, - {0x0001d50d, 0x0001d514, 1}, - {0x0001d516, 0x0001d51c, 1}, - {0x0001d51e, 0x0001d539, 1}, - {0x0001d53b, 0x0001d53e, 1}, - {0x0001d540, 0x0001d544, 1}, - {0x0001d546, 0x0001d54a, 4}, - {0x0001d54b, 0x0001d550, 1}, - {0x0001d552, 0x0001d6a5, 1}, - {0x0001d6a8, 0x0001d7cb, 1}, - {0x0001d7ce, 0x0001d7ff, 1}, - {0x0001f000, 0x0001f02b, 1}, - {0x0001f030, 0x0001f093, 1}, - {0x0001f0a0, 0x0001f0ae, 1}, - {0x0001f0b1, 0x0001f0be, 1}, - {0x0001f0c1, 0x0001f0cf, 1}, - {0x0001f0d1, 0x0001f0df, 1}, - {0x0001f100, 0x0001f10a, 1}, - {0x0001f110, 0x0001f12e, 1}, - {0x0001f130, 0x0001f169, 1}, - {0x0001f170, 0x0001f19a, 1}, - {0x0001f1e6, 0x0001f202, 1}, - {0x0001f210, 0x0001f23a, 1}, - {0x0001f240, 0x0001f248, 1}, - {0x0001f250, 0x0001f251, 1}, - {0x0001f300, 0x0001f320, 1}, - {0x0001f330, 0x0001f335, 1}, - {0x0001f337, 0x0001f37c, 1}, - {0x0001f380, 0x0001f393, 1}, - {0x0001f3a0, 0x0001f3c4, 1}, - {0x0001f3c6, 0x0001f3ca, 1}, - {0x0001f3e0, 0x0001f3f0, 1}, - {0x0001f400, 0x0001f43e, 1}, - {0x0001f440, 0x0001f442, 2}, - {0x0001f443, 0x0001f4f7, 1}, - {0x0001f4f9, 0x0001f4fc, 1}, - {0x0001f500, 0x0001f53d, 1}, - {0x0001f550, 0x0001f567, 1}, - {0x0001f5fb, 0x0001f5ff, 1}, - {0x0001f601, 0x0001f610, 1}, - {0x0001f612, 0x0001f614, 1}, - {0x0001f616, 0x0001f61c, 2}, - {0x0001f61d, 0x0001f61e, 1}, - {0x0001f620, 0x0001f625, 1}, - {0x0001f628, 0x0001f62b, 1}, - {0x0001f62d, 0x0001f630, 3}, - {0x0001f631, 0x0001f633, 1}, - {0x0001f635, 0x0001f640, 1}, - {0x0001f645, 0x0001f64f, 1}, - {0x0001f680, 0x0001f6c5, 1}, - {0x0001f700, 0x0001f773, 1}, - {0x00020000, 0x0002a6d6, 1}, - {0x0002a700, 0x0002b734, 1}, - {0x0002b740, 0x0002b81d, 1}, - {0x0002f800, 0x0002fa1d, 1}, - {0x000e0001, 0x000e0020, 31}, - {0x000e0021, 0x000e007f, 1}, - {0x000e0100, 0x000e01ef, 1}, - {0x000f0000, 0x000ffffd, 1}, - {0x00100000, 0x0010fffd, 1}, - }, - LatinOffset: 0, -} - -// size 4160 bytes (4 KiB) -var assigned6_1_0 = &unicode.RangeTable{ - R16: []unicode.Range16{ - {0x0000, 0x0377, 1}, - {0x037a, 0x037e, 1}, - {0x0384, 0x038a, 1}, - {0x038c, 0x038e, 2}, - {0x038f, 0x03a1, 1}, - {0x03a3, 0x0527, 1}, - {0x0531, 0x0556, 1}, - {0x0559, 0x055f, 1}, - {0x0561, 0x0587, 1}, - {0x0589, 0x058a, 1}, - {0x058f, 0x0591, 2}, - {0x0592, 0x05c7, 1}, - {0x05d0, 0x05ea, 1}, - {0x05f0, 0x05f4, 1}, - {0x0600, 0x0604, 1}, - {0x0606, 0x061b, 1}, - {0x061e, 0x070d, 1}, - {0x070f, 0x074a, 1}, - {0x074d, 0x07b1, 1}, - {0x07c0, 0x07fa, 1}, - {0x0800, 0x082d, 1}, - {0x0830, 0x083e, 1}, - {0x0840, 0x085b, 1}, - {0x085e, 0x08a0, 66}, - {0x08a2, 0x08ac, 1}, - {0x08e4, 0x08fe, 1}, - {0x0900, 0x0977, 1}, - {0x0979, 0x097f, 1}, - {0x0981, 0x0983, 1}, - {0x0985, 0x098c, 1}, - {0x098f, 0x0990, 1}, - {0x0993, 0x09a8, 1}, - {0x09aa, 0x09b0, 1}, - {0x09b2, 0x09b6, 4}, - {0x09b7, 0x09b9, 1}, - {0x09bc, 0x09c4, 1}, - {0x09c7, 0x09c8, 1}, - {0x09cb, 0x09ce, 1}, - {0x09d7, 0x09dc, 5}, - {0x09dd, 0x09df, 2}, - {0x09e0, 0x09e3, 1}, - {0x09e6, 0x09fb, 1}, - {0x0a01, 0x0a03, 1}, - {0x0a05, 0x0a0a, 1}, - {0x0a0f, 0x0a10, 1}, - {0x0a13, 0x0a28, 1}, - {0x0a2a, 0x0a30, 1}, - {0x0a32, 0x0a33, 1}, - {0x0a35, 0x0a36, 1}, - {0x0a38, 0x0a39, 1}, - {0x0a3c, 0x0a3e, 2}, - {0x0a3f, 0x0a42, 1}, - {0x0a47, 0x0a48, 1}, - {0x0a4b, 0x0a4d, 1}, - {0x0a51, 0x0a59, 8}, - {0x0a5a, 0x0a5c, 1}, - {0x0a5e, 0x0a66, 8}, - {0x0a67, 0x0a75, 1}, - {0x0a81, 0x0a83, 1}, - {0x0a85, 0x0a8d, 1}, - {0x0a8f, 0x0a91, 1}, - {0x0a93, 0x0aa8, 1}, - {0x0aaa, 0x0ab0, 1}, - {0x0ab2, 0x0ab3, 1}, - {0x0ab5, 0x0ab9, 1}, - {0x0abc, 0x0ac5, 1}, - {0x0ac7, 0x0ac9, 1}, - {0x0acb, 0x0acd, 1}, - {0x0ad0, 0x0ae0, 16}, - {0x0ae1, 0x0ae3, 1}, - {0x0ae6, 0x0af1, 1}, - {0x0b01, 0x0b03, 1}, - {0x0b05, 0x0b0c, 1}, - {0x0b0f, 0x0b10, 1}, - {0x0b13, 0x0b28, 1}, - {0x0b2a, 0x0b30, 1}, - {0x0b32, 0x0b33, 1}, - {0x0b35, 0x0b39, 1}, - {0x0b3c, 0x0b44, 1}, - {0x0b47, 0x0b48, 1}, - {0x0b4b, 0x0b4d, 1}, - {0x0b56, 0x0b57, 1}, - {0x0b5c, 0x0b5d, 1}, - {0x0b5f, 0x0b63, 1}, - {0x0b66, 0x0b77, 1}, - {0x0b82, 0x0b83, 1}, - {0x0b85, 0x0b8a, 1}, - {0x0b8e, 0x0b90, 1}, - {0x0b92, 0x0b95, 1}, - {0x0b99, 0x0b9a, 1}, - {0x0b9c, 0x0b9e, 2}, - {0x0b9f, 0x0ba3, 4}, - {0x0ba4, 0x0ba8, 4}, - {0x0ba9, 0x0baa, 1}, - {0x0bae, 0x0bb9, 1}, - {0x0bbe, 0x0bc2, 1}, - {0x0bc6, 0x0bc8, 1}, - {0x0bca, 0x0bcd, 1}, - {0x0bd0, 0x0bd7, 7}, - {0x0be6, 0x0bfa, 1}, - {0x0c01, 0x0c03, 1}, - {0x0c05, 0x0c0c, 1}, - {0x0c0e, 0x0c10, 1}, - {0x0c12, 0x0c28, 1}, - {0x0c2a, 0x0c33, 1}, - {0x0c35, 0x0c39, 1}, - {0x0c3d, 0x0c44, 1}, - {0x0c46, 0x0c48, 1}, - {0x0c4a, 0x0c4d, 1}, - {0x0c55, 0x0c56, 1}, - {0x0c58, 0x0c59, 1}, - {0x0c60, 0x0c63, 1}, - {0x0c66, 0x0c6f, 1}, - {0x0c78, 0x0c7f, 1}, - {0x0c82, 0x0c83, 1}, - {0x0c85, 0x0c8c, 1}, - {0x0c8e, 0x0c90, 1}, - {0x0c92, 0x0ca8, 1}, - {0x0caa, 0x0cb3, 1}, - {0x0cb5, 0x0cb9, 1}, - {0x0cbc, 0x0cc4, 1}, - {0x0cc6, 0x0cc8, 1}, - {0x0cca, 0x0ccd, 1}, - {0x0cd5, 0x0cd6, 1}, - {0x0cde, 0x0ce0, 2}, - {0x0ce1, 0x0ce3, 1}, - {0x0ce6, 0x0cef, 1}, - {0x0cf1, 0x0cf2, 1}, - {0x0d02, 0x0d03, 1}, - {0x0d05, 0x0d0c, 1}, - {0x0d0e, 0x0d10, 1}, - {0x0d12, 0x0d3a, 1}, - {0x0d3d, 0x0d44, 1}, - {0x0d46, 0x0d48, 1}, - {0x0d4a, 0x0d4e, 1}, - {0x0d57, 0x0d60, 9}, - {0x0d61, 0x0d63, 1}, - {0x0d66, 0x0d75, 1}, - {0x0d79, 0x0d7f, 1}, - {0x0d82, 0x0d83, 1}, - {0x0d85, 0x0d96, 1}, - {0x0d9a, 0x0db1, 1}, - {0x0db3, 0x0dbb, 1}, - {0x0dbd, 0x0dc0, 3}, - {0x0dc1, 0x0dc6, 1}, - {0x0dca, 0x0dcf, 5}, - {0x0dd0, 0x0dd4, 1}, - {0x0dd6, 0x0dd8, 2}, - {0x0dd9, 0x0ddf, 1}, - {0x0df2, 0x0df4, 1}, - {0x0e01, 0x0e3a, 1}, - {0x0e3f, 0x0e5b, 1}, - {0x0e81, 0x0e82, 1}, - {0x0e84, 0x0e87, 3}, - {0x0e88, 0x0e8a, 2}, - {0x0e8d, 0x0e94, 7}, - {0x0e95, 0x0e97, 1}, - {0x0e99, 0x0e9f, 1}, - {0x0ea1, 0x0ea3, 1}, - {0x0ea5, 0x0ea7, 2}, - {0x0eaa, 0x0eab, 1}, - {0x0ead, 0x0eb9, 1}, - {0x0ebb, 0x0ebd, 1}, - {0x0ec0, 0x0ec4, 1}, - {0x0ec6, 0x0ec8, 2}, - {0x0ec9, 0x0ecd, 1}, - {0x0ed0, 0x0ed9, 1}, - {0x0edc, 0x0edf, 1}, - {0x0f00, 0x0f47, 1}, - {0x0f49, 0x0f6c, 1}, - {0x0f71, 0x0f97, 1}, - {0x0f99, 0x0fbc, 1}, - {0x0fbe, 0x0fcc, 1}, - {0x0fce, 0x0fda, 1}, - {0x1000, 0x10c5, 1}, - {0x10c7, 0x10cd, 6}, - {0x10d0, 0x1248, 1}, - {0x124a, 0x124d, 1}, - {0x1250, 0x1256, 1}, - {0x1258, 0x125a, 2}, - {0x125b, 0x125d, 1}, - {0x1260, 0x1288, 1}, - {0x128a, 0x128d, 1}, - {0x1290, 0x12b0, 1}, - {0x12b2, 0x12b5, 1}, - {0x12b8, 0x12be, 1}, - {0x12c0, 0x12c2, 2}, - {0x12c3, 0x12c5, 1}, - {0x12c8, 0x12d6, 1}, - {0x12d8, 0x1310, 1}, - {0x1312, 0x1315, 1}, - {0x1318, 0x135a, 1}, - {0x135d, 0x137c, 1}, - {0x1380, 0x1399, 1}, - {0x13a0, 0x13f4, 1}, - {0x1400, 0x169c, 1}, - {0x16a0, 0x16f0, 1}, - {0x1700, 0x170c, 1}, - {0x170e, 0x1714, 1}, - {0x1720, 0x1736, 1}, - {0x1740, 0x1753, 1}, - {0x1760, 0x176c, 1}, - {0x176e, 0x1770, 1}, - {0x1772, 0x1773, 1}, - {0x1780, 0x17dd, 1}, - {0x17e0, 0x17e9, 1}, - {0x17f0, 0x17f9, 1}, - {0x1800, 0x180e, 1}, - {0x1810, 0x1819, 1}, - {0x1820, 0x1877, 1}, - {0x1880, 0x18aa, 1}, - {0x18b0, 0x18f5, 1}, - {0x1900, 0x191c, 1}, - {0x1920, 0x192b, 1}, - {0x1930, 0x193b, 1}, - {0x1940, 0x1944, 4}, - {0x1945, 0x196d, 1}, - {0x1970, 0x1974, 1}, - {0x1980, 0x19ab, 1}, - {0x19b0, 0x19c9, 1}, - {0x19d0, 0x19da, 1}, - {0x19de, 0x1a1b, 1}, - {0x1a1e, 0x1a5e, 1}, - {0x1a60, 0x1a7c, 1}, - {0x1a7f, 0x1a89, 1}, - {0x1a90, 0x1a99, 1}, - {0x1aa0, 0x1aad, 1}, - {0x1b00, 0x1b4b, 1}, - {0x1b50, 0x1b7c, 1}, - {0x1b80, 0x1bf3, 1}, - {0x1bfc, 0x1c37, 1}, - {0x1c3b, 0x1c49, 1}, - {0x1c4d, 0x1c7f, 1}, - {0x1cc0, 0x1cc7, 1}, - {0x1cd0, 0x1cf6, 1}, - {0x1d00, 0x1de6, 1}, - {0x1dfc, 0x1f15, 1}, - {0x1f18, 0x1f1d, 1}, - {0x1f20, 0x1f45, 1}, - {0x1f48, 0x1f4d, 1}, - {0x1f50, 0x1f57, 1}, - {0x1f59, 0x1f5f, 2}, - {0x1f60, 0x1f7d, 1}, - {0x1f80, 0x1fb4, 1}, - {0x1fb6, 0x1fc4, 1}, - {0x1fc6, 0x1fd3, 1}, - {0x1fd6, 0x1fdb, 1}, - {0x1fdd, 0x1fef, 1}, - {0x1ff2, 0x1ff4, 1}, - {0x1ff6, 0x1ffe, 1}, - {0x2000, 0x2064, 1}, - {0x206a, 0x2071, 1}, - {0x2074, 0x208e, 1}, - {0x2090, 0x209c, 1}, - {0x20a0, 0x20b9, 1}, - {0x20d0, 0x20f0, 1}, - {0x2100, 0x2189, 1}, - {0x2190, 0x23f3, 1}, - {0x2400, 0x2426, 1}, - {0x2440, 0x244a, 1}, - {0x2460, 0x26ff, 1}, - {0x2701, 0x2b4c, 1}, - {0x2b50, 0x2b59, 1}, - {0x2c00, 0x2c2e, 1}, - {0x2c30, 0x2c5e, 1}, - {0x2c60, 0x2cf3, 1}, - {0x2cf9, 0x2d25, 1}, - {0x2d27, 0x2d2d, 6}, - {0x2d30, 0x2d67, 1}, - {0x2d6f, 0x2d70, 1}, - {0x2d7f, 0x2d96, 1}, - {0x2da0, 0x2da6, 1}, - {0x2da8, 0x2dae, 1}, - {0x2db0, 0x2db6, 1}, - {0x2db8, 0x2dbe, 1}, - {0x2dc0, 0x2dc6, 1}, - {0x2dc8, 0x2dce, 1}, - {0x2dd0, 0x2dd6, 1}, - {0x2dd8, 0x2dde, 1}, - {0x2de0, 0x2e3b, 1}, - {0x2e80, 0x2e99, 1}, - {0x2e9b, 0x2ef3, 1}, - {0x2f00, 0x2fd5, 1}, - {0x2ff0, 0x2ffb, 1}, - {0x3000, 0x303f, 1}, - {0x3041, 0x3096, 1}, - {0x3099, 0x30ff, 1}, - {0x3105, 0x312d, 1}, - {0x3131, 0x318e, 1}, - {0x3190, 0x31ba, 1}, - {0x31c0, 0x31e3, 1}, - {0x31f0, 0x321e, 1}, - {0x3220, 0x32fe, 1}, - {0x3300, 0x4db5, 1}, - {0x4dc0, 0x9fcc, 1}, - {0xa000, 0xa48c, 1}, - {0xa490, 0xa4c6, 1}, - {0xa4d0, 0xa62b, 1}, - {0xa640, 0xa697, 1}, - {0xa69f, 0xa6f7, 1}, - {0xa700, 0xa78e, 1}, - {0xa790, 0xa793, 1}, - {0xa7a0, 0xa7aa, 1}, - {0xa7f8, 0xa82b, 1}, - {0xa830, 0xa839, 1}, - {0xa840, 0xa877, 1}, - {0xa880, 0xa8c4, 1}, - {0xa8ce, 0xa8d9, 1}, - {0xa8e0, 0xa8fb, 1}, - {0xa900, 0xa953, 1}, - {0xa95f, 0xa97c, 1}, - {0xa980, 0xa9cd, 1}, - {0xa9cf, 0xa9d9, 1}, - {0xa9de, 0xa9df, 1}, - {0xaa00, 0xaa36, 1}, - {0xaa40, 0xaa4d, 1}, - {0xaa50, 0xaa59, 1}, - {0xaa5c, 0xaa7b, 1}, - {0xaa80, 0xaac2, 1}, - {0xaadb, 0xaaf6, 1}, - {0xab01, 0xab06, 1}, - {0xab09, 0xab0e, 1}, - {0xab11, 0xab16, 1}, - {0xab20, 0xab26, 1}, - {0xab28, 0xab2e, 1}, - {0xabc0, 0xabed, 1}, - {0xabf0, 0xabf9, 1}, - {0xac00, 0xd7a3, 1}, - {0xd7b0, 0xd7c6, 1}, - {0xd7cb, 0xd7fb, 1}, - {0xd800, 0xfa6d, 1}, - {0xfa70, 0xfad9, 1}, - {0xfb00, 0xfb06, 1}, - {0xfb13, 0xfb17, 1}, - {0xfb1d, 0xfb36, 1}, - {0xfb38, 0xfb3c, 1}, - {0xfb3e, 0xfb40, 2}, - {0xfb41, 0xfb43, 2}, - {0xfb44, 0xfb46, 2}, - {0xfb47, 0xfbc1, 1}, - {0xfbd3, 0xfd3f, 1}, - {0xfd50, 0xfd8f, 1}, - {0xfd92, 0xfdc7, 1}, - {0xfdf0, 0xfdfd, 1}, - {0xfe00, 0xfe19, 1}, - {0xfe20, 0xfe26, 1}, - {0xfe30, 0xfe52, 1}, - {0xfe54, 0xfe66, 1}, - {0xfe68, 0xfe6b, 1}, - {0xfe70, 0xfe74, 1}, - {0xfe76, 0xfefc, 1}, - {0xfeff, 0xff01, 2}, - {0xff02, 0xffbe, 1}, - {0xffc2, 0xffc7, 1}, - {0xffca, 0xffcf, 1}, - {0xffd2, 0xffd7, 1}, - {0xffda, 0xffdc, 1}, - {0xffe0, 0xffe6, 1}, - {0xffe8, 0xffee, 1}, - {0xfff9, 0xfffd, 1}, - }, - R32: []unicode.Range32{ - {0x00010000, 0x0001000b, 1}, - {0x0001000d, 0x00010026, 1}, - {0x00010028, 0x0001003a, 1}, - {0x0001003c, 0x0001003d, 1}, - {0x0001003f, 0x0001004d, 1}, - {0x00010050, 0x0001005d, 1}, - {0x00010080, 0x000100fa, 1}, - {0x00010100, 0x00010102, 1}, - {0x00010107, 0x00010133, 1}, - {0x00010137, 0x0001018a, 1}, - {0x00010190, 0x0001019b, 1}, - {0x000101d0, 0x000101fd, 1}, - {0x00010280, 0x0001029c, 1}, - {0x000102a0, 0x000102d0, 1}, - {0x00010300, 0x0001031e, 1}, - {0x00010320, 0x00010323, 1}, - {0x00010330, 0x0001034a, 1}, - {0x00010380, 0x0001039d, 1}, - {0x0001039f, 0x000103c3, 1}, - {0x000103c8, 0x000103d5, 1}, - {0x00010400, 0x0001049d, 1}, - {0x000104a0, 0x000104a9, 1}, - {0x00010800, 0x00010805, 1}, - {0x00010808, 0x0001080a, 2}, - {0x0001080b, 0x00010835, 1}, - {0x00010837, 0x00010838, 1}, - {0x0001083c, 0x0001083f, 3}, - {0x00010840, 0x00010855, 1}, - {0x00010857, 0x0001085f, 1}, - {0x00010900, 0x0001091b, 1}, - {0x0001091f, 0x00010939, 1}, - {0x0001093f, 0x00010980, 65}, - {0x00010981, 0x000109b7, 1}, - {0x000109be, 0x000109bf, 1}, - {0x00010a00, 0x00010a03, 1}, - {0x00010a05, 0x00010a06, 1}, - {0x00010a0c, 0x00010a13, 1}, - {0x00010a15, 0x00010a17, 1}, - {0x00010a19, 0x00010a33, 1}, - {0x00010a38, 0x00010a3a, 1}, - {0x00010a3f, 0x00010a47, 1}, - {0x00010a50, 0x00010a58, 1}, - {0x00010a60, 0x00010a7f, 1}, - {0x00010b00, 0x00010b35, 1}, - {0x00010b39, 0x00010b55, 1}, - {0x00010b58, 0x00010b72, 1}, - {0x00010b78, 0x00010b7f, 1}, - {0x00010c00, 0x00010c48, 1}, - {0x00010e60, 0x00010e7e, 1}, - {0x00011000, 0x0001104d, 1}, - {0x00011052, 0x0001106f, 1}, - {0x00011080, 0x000110c1, 1}, - {0x000110d0, 0x000110e8, 1}, - {0x000110f0, 0x000110f9, 1}, - {0x00011100, 0x00011134, 1}, - {0x00011136, 0x00011143, 1}, - {0x00011180, 0x000111c8, 1}, - {0x000111d0, 0x000111d9, 1}, - {0x00011680, 0x000116b7, 1}, - {0x000116c0, 0x000116c9, 1}, - {0x00012000, 0x0001236e, 1}, - {0x00012400, 0x00012462, 1}, - {0x00012470, 0x00012473, 1}, - {0x00013000, 0x0001342e, 1}, - {0x00016800, 0x00016a38, 1}, - {0x00016f00, 0x00016f44, 1}, - {0x00016f50, 0x00016f7e, 1}, - {0x00016f8f, 0x00016f9f, 1}, - {0x0001b000, 0x0001b001, 1}, - {0x0001d000, 0x0001d0f5, 1}, - {0x0001d100, 0x0001d126, 1}, - {0x0001d129, 0x0001d1dd, 1}, - {0x0001d200, 0x0001d245, 1}, - {0x0001d300, 0x0001d356, 1}, - {0x0001d360, 0x0001d371, 1}, - {0x0001d400, 0x0001d454, 1}, - {0x0001d456, 0x0001d49c, 1}, - {0x0001d49e, 0x0001d49f, 1}, - {0x0001d4a2, 0x0001d4a5, 3}, - {0x0001d4a6, 0x0001d4a9, 3}, - {0x0001d4aa, 0x0001d4ac, 1}, - {0x0001d4ae, 0x0001d4b9, 1}, - {0x0001d4bb, 0x0001d4bd, 2}, - {0x0001d4be, 0x0001d4c3, 1}, - {0x0001d4c5, 0x0001d505, 1}, - {0x0001d507, 0x0001d50a, 1}, - {0x0001d50d, 0x0001d514, 1}, - {0x0001d516, 0x0001d51c, 1}, - {0x0001d51e, 0x0001d539, 1}, - {0x0001d53b, 0x0001d53e, 1}, - {0x0001d540, 0x0001d544, 1}, - {0x0001d546, 0x0001d54a, 4}, - {0x0001d54b, 0x0001d550, 1}, - {0x0001d552, 0x0001d6a5, 1}, - {0x0001d6a8, 0x0001d7cb, 1}, - {0x0001d7ce, 0x0001d7ff, 1}, - {0x0001ee00, 0x0001ee03, 1}, - {0x0001ee05, 0x0001ee1f, 1}, - {0x0001ee21, 0x0001ee22, 1}, - {0x0001ee24, 0x0001ee27, 3}, - {0x0001ee29, 0x0001ee32, 1}, - {0x0001ee34, 0x0001ee37, 1}, - {0x0001ee39, 0x0001ee3b, 2}, - {0x0001ee42, 0x0001ee47, 5}, - {0x0001ee49, 0x0001ee4d, 2}, - {0x0001ee4e, 0x0001ee4f, 1}, - {0x0001ee51, 0x0001ee52, 1}, - {0x0001ee54, 0x0001ee57, 3}, - {0x0001ee59, 0x0001ee61, 2}, - {0x0001ee62, 0x0001ee64, 2}, - {0x0001ee67, 0x0001ee6a, 1}, - {0x0001ee6c, 0x0001ee72, 1}, - {0x0001ee74, 0x0001ee77, 1}, - {0x0001ee79, 0x0001ee7c, 1}, - {0x0001ee7e, 0x0001ee80, 2}, - {0x0001ee81, 0x0001ee89, 1}, - {0x0001ee8b, 0x0001ee9b, 1}, - {0x0001eea1, 0x0001eea3, 1}, - {0x0001eea5, 0x0001eea9, 1}, - {0x0001eeab, 0x0001eebb, 1}, - {0x0001eef0, 0x0001eef1, 1}, - {0x0001f000, 0x0001f02b, 1}, - {0x0001f030, 0x0001f093, 1}, - {0x0001f0a0, 0x0001f0ae, 1}, - {0x0001f0b1, 0x0001f0be, 1}, - {0x0001f0c1, 0x0001f0cf, 1}, - {0x0001f0d1, 0x0001f0df, 1}, - {0x0001f100, 0x0001f10a, 1}, - {0x0001f110, 0x0001f12e, 1}, - {0x0001f130, 0x0001f16b, 1}, - {0x0001f170, 0x0001f19a, 1}, - {0x0001f1e6, 0x0001f202, 1}, - {0x0001f210, 0x0001f23a, 1}, - {0x0001f240, 0x0001f248, 1}, - {0x0001f250, 0x0001f251, 1}, - {0x0001f300, 0x0001f320, 1}, - {0x0001f330, 0x0001f335, 1}, - {0x0001f337, 0x0001f37c, 1}, - {0x0001f380, 0x0001f393, 1}, - {0x0001f3a0, 0x0001f3c4, 1}, - {0x0001f3c6, 0x0001f3ca, 1}, - {0x0001f3e0, 0x0001f3f0, 1}, - {0x0001f400, 0x0001f43e, 1}, - {0x0001f440, 0x0001f442, 2}, - {0x0001f443, 0x0001f4f7, 1}, - {0x0001f4f9, 0x0001f4fc, 1}, - {0x0001f500, 0x0001f53d, 1}, - {0x0001f540, 0x0001f543, 1}, - {0x0001f550, 0x0001f567, 1}, - {0x0001f5fb, 0x0001f640, 1}, - {0x0001f645, 0x0001f64f, 1}, - {0x0001f680, 0x0001f6c5, 1}, - {0x0001f700, 0x0001f773, 1}, - {0x00020000, 0x0002a6d6, 1}, - {0x0002a700, 0x0002b734, 1}, - {0x0002b740, 0x0002b81d, 1}, - {0x0002f800, 0x0002fa1d, 1}, - {0x000e0001, 0x000e0020, 31}, - {0x000e0021, 0x000e007f, 1}, - {0x000e0100, 0x000e01ef, 1}, - {0x000f0000, 0x000ffffd, 1}, - {0x00100000, 0x0010fffd, 1}, - }, - LatinOffset: 0, -} - -// size 4160 bytes (4 KiB) -var assigned6_2_0 = &unicode.RangeTable{ - R16: []unicode.Range16{ - {0x0000, 0x0377, 1}, - {0x037a, 0x037e, 1}, - {0x0384, 0x038a, 1}, - {0x038c, 0x038e, 2}, - {0x038f, 0x03a1, 1}, - {0x03a3, 0x0527, 1}, - {0x0531, 0x0556, 1}, - {0x0559, 0x055f, 1}, - {0x0561, 0x0587, 1}, - {0x0589, 0x058a, 1}, - {0x058f, 0x0591, 2}, - {0x0592, 0x05c7, 1}, - {0x05d0, 0x05ea, 1}, - {0x05f0, 0x05f4, 1}, - {0x0600, 0x0604, 1}, - {0x0606, 0x061b, 1}, - {0x061e, 0x070d, 1}, - {0x070f, 0x074a, 1}, - {0x074d, 0x07b1, 1}, - {0x07c0, 0x07fa, 1}, - {0x0800, 0x082d, 1}, - {0x0830, 0x083e, 1}, - {0x0840, 0x085b, 1}, - {0x085e, 0x08a0, 66}, - {0x08a2, 0x08ac, 1}, - {0x08e4, 0x08fe, 1}, - {0x0900, 0x0977, 1}, - {0x0979, 0x097f, 1}, - {0x0981, 0x0983, 1}, - {0x0985, 0x098c, 1}, - {0x098f, 0x0990, 1}, - {0x0993, 0x09a8, 1}, - {0x09aa, 0x09b0, 1}, - {0x09b2, 0x09b6, 4}, - {0x09b7, 0x09b9, 1}, - {0x09bc, 0x09c4, 1}, - {0x09c7, 0x09c8, 1}, - {0x09cb, 0x09ce, 1}, - {0x09d7, 0x09dc, 5}, - {0x09dd, 0x09df, 2}, - {0x09e0, 0x09e3, 1}, - {0x09e6, 0x09fb, 1}, - {0x0a01, 0x0a03, 1}, - {0x0a05, 0x0a0a, 1}, - {0x0a0f, 0x0a10, 1}, - {0x0a13, 0x0a28, 1}, - {0x0a2a, 0x0a30, 1}, - {0x0a32, 0x0a33, 1}, - {0x0a35, 0x0a36, 1}, - {0x0a38, 0x0a39, 1}, - {0x0a3c, 0x0a3e, 2}, - {0x0a3f, 0x0a42, 1}, - {0x0a47, 0x0a48, 1}, - {0x0a4b, 0x0a4d, 1}, - {0x0a51, 0x0a59, 8}, - {0x0a5a, 0x0a5c, 1}, - {0x0a5e, 0x0a66, 8}, - {0x0a67, 0x0a75, 1}, - {0x0a81, 0x0a83, 1}, - {0x0a85, 0x0a8d, 1}, - {0x0a8f, 0x0a91, 1}, - {0x0a93, 0x0aa8, 1}, - {0x0aaa, 0x0ab0, 1}, - {0x0ab2, 0x0ab3, 1}, - {0x0ab5, 0x0ab9, 1}, - {0x0abc, 0x0ac5, 1}, - {0x0ac7, 0x0ac9, 1}, - {0x0acb, 0x0acd, 1}, - {0x0ad0, 0x0ae0, 16}, - {0x0ae1, 0x0ae3, 1}, - {0x0ae6, 0x0af1, 1}, - {0x0b01, 0x0b03, 1}, - {0x0b05, 0x0b0c, 1}, - {0x0b0f, 0x0b10, 1}, - {0x0b13, 0x0b28, 1}, - {0x0b2a, 0x0b30, 1}, - {0x0b32, 0x0b33, 1}, - {0x0b35, 0x0b39, 1}, - {0x0b3c, 0x0b44, 1}, - {0x0b47, 0x0b48, 1}, - {0x0b4b, 0x0b4d, 1}, - {0x0b56, 0x0b57, 1}, - {0x0b5c, 0x0b5d, 1}, - {0x0b5f, 0x0b63, 1}, - {0x0b66, 0x0b77, 1}, - {0x0b82, 0x0b83, 1}, - {0x0b85, 0x0b8a, 1}, - {0x0b8e, 0x0b90, 1}, - {0x0b92, 0x0b95, 1}, - {0x0b99, 0x0b9a, 1}, - {0x0b9c, 0x0b9e, 2}, - {0x0b9f, 0x0ba3, 4}, - {0x0ba4, 0x0ba8, 4}, - {0x0ba9, 0x0baa, 1}, - {0x0bae, 0x0bb9, 1}, - {0x0bbe, 0x0bc2, 1}, - {0x0bc6, 0x0bc8, 1}, - {0x0bca, 0x0bcd, 1}, - {0x0bd0, 0x0bd7, 7}, - {0x0be6, 0x0bfa, 1}, - {0x0c01, 0x0c03, 1}, - {0x0c05, 0x0c0c, 1}, - {0x0c0e, 0x0c10, 1}, - {0x0c12, 0x0c28, 1}, - {0x0c2a, 0x0c33, 1}, - {0x0c35, 0x0c39, 1}, - {0x0c3d, 0x0c44, 1}, - {0x0c46, 0x0c48, 1}, - {0x0c4a, 0x0c4d, 1}, - {0x0c55, 0x0c56, 1}, - {0x0c58, 0x0c59, 1}, - {0x0c60, 0x0c63, 1}, - {0x0c66, 0x0c6f, 1}, - {0x0c78, 0x0c7f, 1}, - {0x0c82, 0x0c83, 1}, - {0x0c85, 0x0c8c, 1}, - {0x0c8e, 0x0c90, 1}, - {0x0c92, 0x0ca8, 1}, - {0x0caa, 0x0cb3, 1}, - {0x0cb5, 0x0cb9, 1}, - {0x0cbc, 0x0cc4, 1}, - {0x0cc6, 0x0cc8, 1}, - {0x0cca, 0x0ccd, 1}, - {0x0cd5, 0x0cd6, 1}, - {0x0cde, 0x0ce0, 2}, - {0x0ce1, 0x0ce3, 1}, - {0x0ce6, 0x0cef, 1}, - {0x0cf1, 0x0cf2, 1}, - {0x0d02, 0x0d03, 1}, - {0x0d05, 0x0d0c, 1}, - {0x0d0e, 0x0d10, 1}, - {0x0d12, 0x0d3a, 1}, - {0x0d3d, 0x0d44, 1}, - {0x0d46, 0x0d48, 1}, - {0x0d4a, 0x0d4e, 1}, - {0x0d57, 0x0d60, 9}, - {0x0d61, 0x0d63, 1}, - {0x0d66, 0x0d75, 1}, - {0x0d79, 0x0d7f, 1}, - {0x0d82, 0x0d83, 1}, - {0x0d85, 0x0d96, 1}, - {0x0d9a, 0x0db1, 1}, - {0x0db3, 0x0dbb, 1}, - {0x0dbd, 0x0dc0, 3}, - {0x0dc1, 0x0dc6, 1}, - {0x0dca, 0x0dcf, 5}, - {0x0dd0, 0x0dd4, 1}, - {0x0dd6, 0x0dd8, 2}, - {0x0dd9, 0x0ddf, 1}, - {0x0df2, 0x0df4, 1}, - {0x0e01, 0x0e3a, 1}, - {0x0e3f, 0x0e5b, 1}, - {0x0e81, 0x0e82, 1}, - {0x0e84, 0x0e87, 3}, - {0x0e88, 0x0e8a, 2}, - {0x0e8d, 0x0e94, 7}, - {0x0e95, 0x0e97, 1}, - {0x0e99, 0x0e9f, 1}, - {0x0ea1, 0x0ea3, 1}, - {0x0ea5, 0x0ea7, 2}, - {0x0eaa, 0x0eab, 1}, - {0x0ead, 0x0eb9, 1}, - {0x0ebb, 0x0ebd, 1}, - {0x0ec0, 0x0ec4, 1}, - {0x0ec6, 0x0ec8, 2}, - {0x0ec9, 0x0ecd, 1}, - {0x0ed0, 0x0ed9, 1}, - {0x0edc, 0x0edf, 1}, - {0x0f00, 0x0f47, 1}, - {0x0f49, 0x0f6c, 1}, - {0x0f71, 0x0f97, 1}, - {0x0f99, 0x0fbc, 1}, - {0x0fbe, 0x0fcc, 1}, - {0x0fce, 0x0fda, 1}, - {0x1000, 0x10c5, 1}, - {0x10c7, 0x10cd, 6}, - {0x10d0, 0x1248, 1}, - {0x124a, 0x124d, 1}, - {0x1250, 0x1256, 1}, - {0x1258, 0x125a, 2}, - {0x125b, 0x125d, 1}, - {0x1260, 0x1288, 1}, - {0x128a, 0x128d, 1}, - {0x1290, 0x12b0, 1}, - {0x12b2, 0x12b5, 1}, - {0x12b8, 0x12be, 1}, - {0x12c0, 0x12c2, 2}, - {0x12c3, 0x12c5, 1}, - {0x12c8, 0x12d6, 1}, - {0x12d8, 0x1310, 1}, - {0x1312, 0x1315, 1}, - {0x1318, 0x135a, 1}, - {0x135d, 0x137c, 1}, - {0x1380, 0x1399, 1}, - {0x13a0, 0x13f4, 1}, - {0x1400, 0x169c, 1}, - {0x16a0, 0x16f0, 1}, - {0x1700, 0x170c, 1}, - {0x170e, 0x1714, 1}, - {0x1720, 0x1736, 1}, - {0x1740, 0x1753, 1}, - {0x1760, 0x176c, 1}, - {0x176e, 0x1770, 1}, - {0x1772, 0x1773, 1}, - {0x1780, 0x17dd, 1}, - {0x17e0, 0x17e9, 1}, - {0x17f0, 0x17f9, 1}, - {0x1800, 0x180e, 1}, - {0x1810, 0x1819, 1}, - {0x1820, 0x1877, 1}, - {0x1880, 0x18aa, 1}, - {0x18b0, 0x18f5, 1}, - {0x1900, 0x191c, 1}, - {0x1920, 0x192b, 1}, - {0x1930, 0x193b, 1}, - {0x1940, 0x1944, 4}, - {0x1945, 0x196d, 1}, - {0x1970, 0x1974, 1}, - {0x1980, 0x19ab, 1}, - {0x19b0, 0x19c9, 1}, - {0x19d0, 0x19da, 1}, - {0x19de, 0x1a1b, 1}, - {0x1a1e, 0x1a5e, 1}, - {0x1a60, 0x1a7c, 1}, - {0x1a7f, 0x1a89, 1}, - {0x1a90, 0x1a99, 1}, - {0x1aa0, 0x1aad, 1}, - {0x1b00, 0x1b4b, 1}, - {0x1b50, 0x1b7c, 1}, - {0x1b80, 0x1bf3, 1}, - {0x1bfc, 0x1c37, 1}, - {0x1c3b, 0x1c49, 1}, - {0x1c4d, 0x1c7f, 1}, - {0x1cc0, 0x1cc7, 1}, - {0x1cd0, 0x1cf6, 1}, - {0x1d00, 0x1de6, 1}, - {0x1dfc, 0x1f15, 1}, - {0x1f18, 0x1f1d, 1}, - {0x1f20, 0x1f45, 1}, - {0x1f48, 0x1f4d, 1}, - {0x1f50, 0x1f57, 1}, - {0x1f59, 0x1f5f, 2}, - {0x1f60, 0x1f7d, 1}, - {0x1f80, 0x1fb4, 1}, - {0x1fb6, 0x1fc4, 1}, - {0x1fc6, 0x1fd3, 1}, - {0x1fd6, 0x1fdb, 1}, - {0x1fdd, 0x1fef, 1}, - {0x1ff2, 0x1ff4, 1}, - {0x1ff6, 0x1ffe, 1}, - {0x2000, 0x2064, 1}, - {0x206a, 0x2071, 1}, - {0x2074, 0x208e, 1}, - {0x2090, 0x209c, 1}, - {0x20a0, 0x20ba, 1}, - {0x20d0, 0x20f0, 1}, - {0x2100, 0x2189, 1}, - {0x2190, 0x23f3, 1}, - {0x2400, 0x2426, 1}, - {0x2440, 0x244a, 1}, - {0x2460, 0x26ff, 1}, - {0x2701, 0x2b4c, 1}, - {0x2b50, 0x2b59, 1}, - {0x2c00, 0x2c2e, 1}, - {0x2c30, 0x2c5e, 1}, - {0x2c60, 0x2cf3, 1}, - {0x2cf9, 0x2d25, 1}, - {0x2d27, 0x2d2d, 6}, - {0x2d30, 0x2d67, 1}, - {0x2d6f, 0x2d70, 1}, - {0x2d7f, 0x2d96, 1}, - {0x2da0, 0x2da6, 1}, - {0x2da8, 0x2dae, 1}, - {0x2db0, 0x2db6, 1}, - {0x2db8, 0x2dbe, 1}, - {0x2dc0, 0x2dc6, 1}, - {0x2dc8, 0x2dce, 1}, - {0x2dd0, 0x2dd6, 1}, - {0x2dd8, 0x2dde, 1}, - {0x2de0, 0x2e3b, 1}, - {0x2e80, 0x2e99, 1}, - {0x2e9b, 0x2ef3, 1}, - {0x2f00, 0x2fd5, 1}, - {0x2ff0, 0x2ffb, 1}, - {0x3000, 0x303f, 1}, - {0x3041, 0x3096, 1}, - {0x3099, 0x30ff, 1}, - {0x3105, 0x312d, 1}, - {0x3131, 0x318e, 1}, - {0x3190, 0x31ba, 1}, - {0x31c0, 0x31e3, 1}, - {0x31f0, 0x321e, 1}, - {0x3220, 0x32fe, 1}, - {0x3300, 0x4db5, 1}, - {0x4dc0, 0x9fcc, 1}, - {0xa000, 0xa48c, 1}, - {0xa490, 0xa4c6, 1}, - {0xa4d0, 0xa62b, 1}, - {0xa640, 0xa697, 1}, - {0xa69f, 0xa6f7, 1}, - {0xa700, 0xa78e, 1}, - {0xa790, 0xa793, 1}, - {0xa7a0, 0xa7aa, 1}, - {0xa7f8, 0xa82b, 1}, - {0xa830, 0xa839, 1}, - {0xa840, 0xa877, 1}, - {0xa880, 0xa8c4, 1}, - {0xa8ce, 0xa8d9, 1}, - {0xa8e0, 0xa8fb, 1}, - {0xa900, 0xa953, 1}, - {0xa95f, 0xa97c, 1}, - {0xa980, 0xa9cd, 1}, - {0xa9cf, 0xa9d9, 1}, - {0xa9de, 0xa9df, 1}, - {0xaa00, 0xaa36, 1}, - {0xaa40, 0xaa4d, 1}, - {0xaa50, 0xaa59, 1}, - {0xaa5c, 0xaa7b, 1}, - {0xaa80, 0xaac2, 1}, - {0xaadb, 0xaaf6, 1}, - {0xab01, 0xab06, 1}, - {0xab09, 0xab0e, 1}, - {0xab11, 0xab16, 1}, - {0xab20, 0xab26, 1}, - {0xab28, 0xab2e, 1}, - {0xabc0, 0xabed, 1}, - {0xabf0, 0xabf9, 1}, - {0xac00, 0xd7a3, 1}, - {0xd7b0, 0xd7c6, 1}, - {0xd7cb, 0xd7fb, 1}, - {0xd800, 0xfa6d, 1}, - {0xfa70, 0xfad9, 1}, - {0xfb00, 0xfb06, 1}, - {0xfb13, 0xfb17, 1}, - {0xfb1d, 0xfb36, 1}, - {0xfb38, 0xfb3c, 1}, - {0xfb3e, 0xfb40, 2}, - {0xfb41, 0xfb43, 2}, - {0xfb44, 0xfb46, 2}, - {0xfb47, 0xfbc1, 1}, - {0xfbd3, 0xfd3f, 1}, - {0xfd50, 0xfd8f, 1}, - {0xfd92, 0xfdc7, 1}, - {0xfdf0, 0xfdfd, 1}, - {0xfe00, 0xfe19, 1}, - {0xfe20, 0xfe26, 1}, - {0xfe30, 0xfe52, 1}, - {0xfe54, 0xfe66, 1}, - {0xfe68, 0xfe6b, 1}, - {0xfe70, 0xfe74, 1}, - {0xfe76, 0xfefc, 1}, - {0xfeff, 0xff01, 2}, - {0xff02, 0xffbe, 1}, - {0xffc2, 0xffc7, 1}, - {0xffca, 0xffcf, 1}, - {0xffd2, 0xffd7, 1}, - {0xffda, 0xffdc, 1}, - {0xffe0, 0xffe6, 1}, - {0xffe8, 0xffee, 1}, - {0xfff9, 0xfffd, 1}, - }, - R32: []unicode.Range32{ - {0x00010000, 0x0001000b, 1}, - {0x0001000d, 0x00010026, 1}, - {0x00010028, 0x0001003a, 1}, - {0x0001003c, 0x0001003d, 1}, - {0x0001003f, 0x0001004d, 1}, - {0x00010050, 0x0001005d, 1}, - {0x00010080, 0x000100fa, 1}, - {0x00010100, 0x00010102, 1}, - {0x00010107, 0x00010133, 1}, - {0x00010137, 0x0001018a, 1}, - {0x00010190, 0x0001019b, 1}, - {0x000101d0, 0x000101fd, 1}, - {0x00010280, 0x0001029c, 1}, - {0x000102a0, 0x000102d0, 1}, - {0x00010300, 0x0001031e, 1}, - {0x00010320, 0x00010323, 1}, - {0x00010330, 0x0001034a, 1}, - {0x00010380, 0x0001039d, 1}, - {0x0001039f, 0x000103c3, 1}, - {0x000103c8, 0x000103d5, 1}, - {0x00010400, 0x0001049d, 1}, - {0x000104a0, 0x000104a9, 1}, - {0x00010800, 0x00010805, 1}, - {0x00010808, 0x0001080a, 2}, - {0x0001080b, 0x00010835, 1}, - {0x00010837, 0x00010838, 1}, - {0x0001083c, 0x0001083f, 3}, - {0x00010840, 0x00010855, 1}, - {0x00010857, 0x0001085f, 1}, - {0x00010900, 0x0001091b, 1}, - {0x0001091f, 0x00010939, 1}, - {0x0001093f, 0x00010980, 65}, - {0x00010981, 0x000109b7, 1}, - {0x000109be, 0x000109bf, 1}, - {0x00010a00, 0x00010a03, 1}, - {0x00010a05, 0x00010a06, 1}, - {0x00010a0c, 0x00010a13, 1}, - {0x00010a15, 0x00010a17, 1}, - {0x00010a19, 0x00010a33, 1}, - {0x00010a38, 0x00010a3a, 1}, - {0x00010a3f, 0x00010a47, 1}, - {0x00010a50, 0x00010a58, 1}, - {0x00010a60, 0x00010a7f, 1}, - {0x00010b00, 0x00010b35, 1}, - {0x00010b39, 0x00010b55, 1}, - {0x00010b58, 0x00010b72, 1}, - {0x00010b78, 0x00010b7f, 1}, - {0x00010c00, 0x00010c48, 1}, - {0x00010e60, 0x00010e7e, 1}, - {0x00011000, 0x0001104d, 1}, - {0x00011052, 0x0001106f, 1}, - {0x00011080, 0x000110c1, 1}, - {0x000110d0, 0x000110e8, 1}, - {0x000110f0, 0x000110f9, 1}, - {0x00011100, 0x00011134, 1}, - {0x00011136, 0x00011143, 1}, - {0x00011180, 0x000111c8, 1}, - {0x000111d0, 0x000111d9, 1}, - {0x00011680, 0x000116b7, 1}, - {0x000116c0, 0x000116c9, 1}, - {0x00012000, 0x0001236e, 1}, - {0x00012400, 0x00012462, 1}, - {0x00012470, 0x00012473, 1}, - {0x00013000, 0x0001342e, 1}, - {0x00016800, 0x00016a38, 1}, - {0x00016f00, 0x00016f44, 1}, - {0x00016f50, 0x00016f7e, 1}, - {0x00016f8f, 0x00016f9f, 1}, - {0x0001b000, 0x0001b001, 1}, - {0x0001d000, 0x0001d0f5, 1}, - {0x0001d100, 0x0001d126, 1}, - {0x0001d129, 0x0001d1dd, 1}, - {0x0001d200, 0x0001d245, 1}, - {0x0001d300, 0x0001d356, 1}, - {0x0001d360, 0x0001d371, 1}, - {0x0001d400, 0x0001d454, 1}, - {0x0001d456, 0x0001d49c, 1}, - {0x0001d49e, 0x0001d49f, 1}, - {0x0001d4a2, 0x0001d4a5, 3}, - {0x0001d4a6, 0x0001d4a9, 3}, - {0x0001d4aa, 0x0001d4ac, 1}, - {0x0001d4ae, 0x0001d4b9, 1}, - {0x0001d4bb, 0x0001d4bd, 2}, - {0x0001d4be, 0x0001d4c3, 1}, - {0x0001d4c5, 0x0001d505, 1}, - {0x0001d507, 0x0001d50a, 1}, - {0x0001d50d, 0x0001d514, 1}, - {0x0001d516, 0x0001d51c, 1}, - {0x0001d51e, 0x0001d539, 1}, - {0x0001d53b, 0x0001d53e, 1}, - {0x0001d540, 0x0001d544, 1}, - {0x0001d546, 0x0001d54a, 4}, - {0x0001d54b, 0x0001d550, 1}, - {0x0001d552, 0x0001d6a5, 1}, - {0x0001d6a8, 0x0001d7cb, 1}, - {0x0001d7ce, 0x0001d7ff, 1}, - {0x0001ee00, 0x0001ee03, 1}, - {0x0001ee05, 0x0001ee1f, 1}, - {0x0001ee21, 0x0001ee22, 1}, - {0x0001ee24, 0x0001ee27, 3}, - {0x0001ee29, 0x0001ee32, 1}, - {0x0001ee34, 0x0001ee37, 1}, - {0x0001ee39, 0x0001ee3b, 2}, - {0x0001ee42, 0x0001ee47, 5}, - {0x0001ee49, 0x0001ee4d, 2}, - {0x0001ee4e, 0x0001ee4f, 1}, - {0x0001ee51, 0x0001ee52, 1}, - {0x0001ee54, 0x0001ee57, 3}, - {0x0001ee59, 0x0001ee61, 2}, - {0x0001ee62, 0x0001ee64, 2}, - {0x0001ee67, 0x0001ee6a, 1}, - {0x0001ee6c, 0x0001ee72, 1}, - {0x0001ee74, 0x0001ee77, 1}, - {0x0001ee79, 0x0001ee7c, 1}, - {0x0001ee7e, 0x0001ee80, 2}, - {0x0001ee81, 0x0001ee89, 1}, - {0x0001ee8b, 0x0001ee9b, 1}, - {0x0001eea1, 0x0001eea3, 1}, - {0x0001eea5, 0x0001eea9, 1}, - {0x0001eeab, 0x0001eebb, 1}, - {0x0001eef0, 0x0001eef1, 1}, - {0x0001f000, 0x0001f02b, 1}, - {0x0001f030, 0x0001f093, 1}, - {0x0001f0a0, 0x0001f0ae, 1}, - {0x0001f0b1, 0x0001f0be, 1}, - {0x0001f0c1, 0x0001f0cf, 1}, - {0x0001f0d1, 0x0001f0df, 1}, - {0x0001f100, 0x0001f10a, 1}, - {0x0001f110, 0x0001f12e, 1}, - {0x0001f130, 0x0001f16b, 1}, - {0x0001f170, 0x0001f19a, 1}, - {0x0001f1e6, 0x0001f202, 1}, - {0x0001f210, 0x0001f23a, 1}, - {0x0001f240, 0x0001f248, 1}, - {0x0001f250, 0x0001f251, 1}, - {0x0001f300, 0x0001f320, 1}, - {0x0001f330, 0x0001f335, 1}, - {0x0001f337, 0x0001f37c, 1}, - {0x0001f380, 0x0001f393, 1}, - {0x0001f3a0, 0x0001f3c4, 1}, - {0x0001f3c6, 0x0001f3ca, 1}, - {0x0001f3e0, 0x0001f3f0, 1}, - {0x0001f400, 0x0001f43e, 1}, - {0x0001f440, 0x0001f442, 2}, - {0x0001f443, 0x0001f4f7, 1}, - {0x0001f4f9, 0x0001f4fc, 1}, - {0x0001f500, 0x0001f53d, 1}, - {0x0001f540, 0x0001f543, 1}, - {0x0001f550, 0x0001f567, 1}, - {0x0001f5fb, 0x0001f640, 1}, - {0x0001f645, 0x0001f64f, 1}, - {0x0001f680, 0x0001f6c5, 1}, - {0x0001f700, 0x0001f773, 1}, - {0x00020000, 0x0002a6d6, 1}, - {0x0002a700, 0x0002b734, 1}, - {0x0002b740, 0x0002b81d, 1}, - {0x0002f800, 0x0002fa1d, 1}, - {0x000e0001, 0x000e0020, 31}, - {0x000e0021, 0x000e007f, 1}, - {0x000e0100, 0x000e01ef, 1}, - {0x000f0000, 0x000ffffd, 1}, - {0x00100000, 0x0010fffd, 1}, - }, - LatinOffset: 0, -} - -// size 4160 bytes (4 KiB) -var assigned6_3_0 = &unicode.RangeTable{ - R16: []unicode.Range16{ - {0x0000, 0x0377, 1}, - {0x037a, 0x037e, 1}, - {0x0384, 0x038a, 1}, - {0x038c, 0x038e, 2}, - {0x038f, 0x03a1, 1}, - {0x03a3, 0x0527, 1}, - {0x0531, 0x0556, 1}, - {0x0559, 0x055f, 1}, - {0x0561, 0x0587, 1}, - {0x0589, 0x058a, 1}, - {0x058f, 0x0591, 2}, - {0x0592, 0x05c7, 1}, - {0x05d0, 0x05ea, 1}, - {0x05f0, 0x05f4, 1}, - {0x0600, 0x0604, 1}, - {0x0606, 0x061c, 1}, - {0x061e, 0x070d, 1}, - {0x070f, 0x074a, 1}, - {0x074d, 0x07b1, 1}, - {0x07c0, 0x07fa, 1}, - {0x0800, 0x082d, 1}, - {0x0830, 0x083e, 1}, - {0x0840, 0x085b, 1}, - {0x085e, 0x08a0, 66}, - {0x08a2, 0x08ac, 1}, - {0x08e4, 0x08fe, 1}, - {0x0900, 0x0977, 1}, - {0x0979, 0x097f, 1}, - {0x0981, 0x0983, 1}, - {0x0985, 0x098c, 1}, - {0x098f, 0x0990, 1}, - {0x0993, 0x09a8, 1}, - {0x09aa, 0x09b0, 1}, - {0x09b2, 0x09b6, 4}, - {0x09b7, 0x09b9, 1}, - {0x09bc, 0x09c4, 1}, - {0x09c7, 0x09c8, 1}, - {0x09cb, 0x09ce, 1}, - {0x09d7, 0x09dc, 5}, - {0x09dd, 0x09df, 2}, - {0x09e0, 0x09e3, 1}, - {0x09e6, 0x09fb, 1}, - {0x0a01, 0x0a03, 1}, - {0x0a05, 0x0a0a, 1}, - {0x0a0f, 0x0a10, 1}, - {0x0a13, 0x0a28, 1}, - {0x0a2a, 0x0a30, 1}, - {0x0a32, 0x0a33, 1}, - {0x0a35, 0x0a36, 1}, - {0x0a38, 0x0a39, 1}, - {0x0a3c, 0x0a3e, 2}, - {0x0a3f, 0x0a42, 1}, - {0x0a47, 0x0a48, 1}, - {0x0a4b, 0x0a4d, 1}, - {0x0a51, 0x0a59, 8}, - {0x0a5a, 0x0a5c, 1}, - {0x0a5e, 0x0a66, 8}, - {0x0a67, 0x0a75, 1}, - {0x0a81, 0x0a83, 1}, - {0x0a85, 0x0a8d, 1}, - {0x0a8f, 0x0a91, 1}, - {0x0a93, 0x0aa8, 1}, - {0x0aaa, 0x0ab0, 1}, - {0x0ab2, 0x0ab3, 1}, - {0x0ab5, 0x0ab9, 1}, - {0x0abc, 0x0ac5, 1}, - {0x0ac7, 0x0ac9, 1}, - {0x0acb, 0x0acd, 1}, - {0x0ad0, 0x0ae0, 16}, - {0x0ae1, 0x0ae3, 1}, - {0x0ae6, 0x0af1, 1}, - {0x0b01, 0x0b03, 1}, - {0x0b05, 0x0b0c, 1}, - {0x0b0f, 0x0b10, 1}, - {0x0b13, 0x0b28, 1}, - {0x0b2a, 0x0b30, 1}, - {0x0b32, 0x0b33, 1}, - {0x0b35, 0x0b39, 1}, - {0x0b3c, 0x0b44, 1}, - {0x0b47, 0x0b48, 1}, - {0x0b4b, 0x0b4d, 1}, - {0x0b56, 0x0b57, 1}, - {0x0b5c, 0x0b5d, 1}, - {0x0b5f, 0x0b63, 1}, - {0x0b66, 0x0b77, 1}, - {0x0b82, 0x0b83, 1}, - {0x0b85, 0x0b8a, 1}, - {0x0b8e, 0x0b90, 1}, - {0x0b92, 0x0b95, 1}, - {0x0b99, 0x0b9a, 1}, - {0x0b9c, 0x0b9e, 2}, - {0x0b9f, 0x0ba3, 4}, - {0x0ba4, 0x0ba8, 4}, - {0x0ba9, 0x0baa, 1}, - {0x0bae, 0x0bb9, 1}, - {0x0bbe, 0x0bc2, 1}, - {0x0bc6, 0x0bc8, 1}, - {0x0bca, 0x0bcd, 1}, - {0x0bd0, 0x0bd7, 7}, - {0x0be6, 0x0bfa, 1}, - {0x0c01, 0x0c03, 1}, - {0x0c05, 0x0c0c, 1}, - {0x0c0e, 0x0c10, 1}, - {0x0c12, 0x0c28, 1}, - {0x0c2a, 0x0c33, 1}, - {0x0c35, 0x0c39, 1}, - {0x0c3d, 0x0c44, 1}, - {0x0c46, 0x0c48, 1}, - {0x0c4a, 0x0c4d, 1}, - {0x0c55, 0x0c56, 1}, - {0x0c58, 0x0c59, 1}, - {0x0c60, 0x0c63, 1}, - {0x0c66, 0x0c6f, 1}, - {0x0c78, 0x0c7f, 1}, - {0x0c82, 0x0c83, 1}, - {0x0c85, 0x0c8c, 1}, - {0x0c8e, 0x0c90, 1}, - {0x0c92, 0x0ca8, 1}, - {0x0caa, 0x0cb3, 1}, - {0x0cb5, 0x0cb9, 1}, - {0x0cbc, 0x0cc4, 1}, - {0x0cc6, 0x0cc8, 1}, - {0x0cca, 0x0ccd, 1}, - {0x0cd5, 0x0cd6, 1}, - {0x0cde, 0x0ce0, 2}, - {0x0ce1, 0x0ce3, 1}, - {0x0ce6, 0x0cef, 1}, - {0x0cf1, 0x0cf2, 1}, - {0x0d02, 0x0d03, 1}, - {0x0d05, 0x0d0c, 1}, - {0x0d0e, 0x0d10, 1}, - {0x0d12, 0x0d3a, 1}, - {0x0d3d, 0x0d44, 1}, - {0x0d46, 0x0d48, 1}, - {0x0d4a, 0x0d4e, 1}, - {0x0d57, 0x0d60, 9}, - {0x0d61, 0x0d63, 1}, - {0x0d66, 0x0d75, 1}, - {0x0d79, 0x0d7f, 1}, - {0x0d82, 0x0d83, 1}, - {0x0d85, 0x0d96, 1}, - {0x0d9a, 0x0db1, 1}, - {0x0db3, 0x0dbb, 1}, - {0x0dbd, 0x0dc0, 3}, - {0x0dc1, 0x0dc6, 1}, - {0x0dca, 0x0dcf, 5}, - {0x0dd0, 0x0dd4, 1}, - {0x0dd6, 0x0dd8, 2}, - {0x0dd9, 0x0ddf, 1}, - {0x0df2, 0x0df4, 1}, - {0x0e01, 0x0e3a, 1}, - {0x0e3f, 0x0e5b, 1}, - {0x0e81, 0x0e82, 1}, - {0x0e84, 0x0e87, 3}, - {0x0e88, 0x0e8a, 2}, - {0x0e8d, 0x0e94, 7}, - {0x0e95, 0x0e97, 1}, - {0x0e99, 0x0e9f, 1}, - {0x0ea1, 0x0ea3, 1}, - {0x0ea5, 0x0ea7, 2}, - {0x0eaa, 0x0eab, 1}, - {0x0ead, 0x0eb9, 1}, - {0x0ebb, 0x0ebd, 1}, - {0x0ec0, 0x0ec4, 1}, - {0x0ec6, 0x0ec8, 2}, - {0x0ec9, 0x0ecd, 1}, - {0x0ed0, 0x0ed9, 1}, - {0x0edc, 0x0edf, 1}, - {0x0f00, 0x0f47, 1}, - {0x0f49, 0x0f6c, 1}, - {0x0f71, 0x0f97, 1}, - {0x0f99, 0x0fbc, 1}, - {0x0fbe, 0x0fcc, 1}, - {0x0fce, 0x0fda, 1}, - {0x1000, 0x10c5, 1}, - {0x10c7, 0x10cd, 6}, - {0x10d0, 0x1248, 1}, - {0x124a, 0x124d, 1}, - {0x1250, 0x1256, 1}, - {0x1258, 0x125a, 2}, - {0x125b, 0x125d, 1}, - {0x1260, 0x1288, 1}, - {0x128a, 0x128d, 1}, - {0x1290, 0x12b0, 1}, - {0x12b2, 0x12b5, 1}, - {0x12b8, 0x12be, 1}, - {0x12c0, 0x12c2, 2}, - {0x12c3, 0x12c5, 1}, - {0x12c8, 0x12d6, 1}, - {0x12d8, 0x1310, 1}, - {0x1312, 0x1315, 1}, - {0x1318, 0x135a, 1}, - {0x135d, 0x137c, 1}, - {0x1380, 0x1399, 1}, - {0x13a0, 0x13f4, 1}, - {0x1400, 0x169c, 1}, - {0x16a0, 0x16f0, 1}, - {0x1700, 0x170c, 1}, - {0x170e, 0x1714, 1}, - {0x1720, 0x1736, 1}, - {0x1740, 0x1753, 1}, - {0x1760, 0x176c, 1}, - {0x176e, 0x1770, 1}, - {0x1772, 0x1773, 1}, - {0x1780, 0x17dd, 1}, - {0x17e0, 0x17e9, 1}, - {0x17f0, 0x17f9, 1}, - {0x1800, 0x180e, 1}, - {0x1810, 0x1819, 1}, - {0x1820, 0x1877, 1}, - {0x1880, 0x18aa, 1}, - {0x18b0, 0x18f5, 1}, - {0x1900, 0x191c, 1}, - {0x1920, 0x192b, 1}, - {0x1930, 0x193b, 1}, - {0x1940, 0x1944, 4}, - {0x1945, 0x196d, 1}, - {0x1970, 0x1974, 1}, - {0x1980, 0x19ab, 1}, - {0x19b0, 0x19c9, 1}, - {0x19d0, 0x19da, 1}, - {0x19de, 0x1a1b, 1}, - {0x1a1e, 0x1a5e, 1}, - {0x1a60, 0x1a7c, 1}, - {0x1a7f, 0x1a89, 1}, - {0x1a90, 0x1a99, 1}, - {0x1aa0, 0x1aad, 1}, - {0x1b00, 0x1b4b, 1}, - {0x1b50, 0x1b7c, 1}, - {0x1b80, 0x1bf3, 1}, - {0x1bfc, 0x1c37, 1}, - {0x1c3b, 0x1c49, 1}, - {0x1c4d, 0x1c7f, 1}, - {0x1cc0, 0x1cc7, 1}, - {0x1cd0, 0x1cf6, 1}, - {0x1d00, 0x1de6, 1}, - {0x1dfc, 0x1f15, 1}, - {0x1f18, 0x1f1d, 1}, - {0x1f20, 0x1f45, 1}, - {0x1f48, 0x1f4d, 1}, - {0x1f50, 0x1f57, 1}, - {0x1f59, 0x1f5f, 2}, - {0x1f60, 0x1f7d, 1}, - {0x1f80, 0x1fb4, 1}, - {0x1fb6, 0x1fc4, 1}, - {0x1fc6, 0x1fd3, 1}, - {0x1fd6, 0x1fdb, 1}, - {0x1fdd, 0x1fef, 1}, - {0x1ff2, 0x1ff4, 1}, - {0x1ff6, 0x1ffe, 1}, - {0x2000, 0x2064, 1}, - {0x2066, 0x2071, 1}, - {0x2074, 0x208e, 1}, - {0x2090, 0x209c, 1}, - {0x20a0, 0x20ba, 1}, - {0x20d0, 0x20f0, 1}, - {0x2100, 0x2189, 1}, - {0x2190, 0x23f3, 1}, - {0x2400, 0x2426, 1}, - {0x2440, 0x244a, 1}, - {0x2460, 0x26ff, 1}, - {0x2701, 0x2b4c, 1}, - {0x2b50, 0x2b59, 1}, - {0x2c00, 0x2c2e, 1}, - {0x2c30, 0x2c5e, 1}, - {0x2c60, 0x2cf3, 1}, - {0x2cf9, 0x2d25, 1}, - {0x2d27, 0x2d2d, 6}, - {0x2d30, 0x2d67, 1}, - {0x2d6f, 0x2d70, 1}, - {0x2d7f, 0x2d96, 1}, - {0x2da0, 0x2da6, 1}, - {0x2da8, 0x2dae, 1}, - {0x2db0, 0x2db6, 1}, - {0x2db8, 0x2dbe, 1}, - {0x2dc0, 0x2dc6, 1}, - {0x2dc8, 0x2dce, 1}, - {0x2dd0, 0x2dd6, 1}, - {0x2dd8, 0x2dde, 1}, - {0x2de0, 0x2e3b, 1}, - {0x2e80, 0x2e99, 1}, - {0x2e9b, 0x2ef3, 1}, - {0x2f00, 0x2fd5, 1}, - {0x2ff0, 0x2ffb, 1}, - {0x3000, 0x303f, 1}, - {0x3041, 0x3096, 1}, - {0x3099, 0x30ff, 1}, - {0x3105, 0x312d, 1}, - {0x3131, 0x318e, 1}, - {0x3190, 0x31ba, 1}, - {0x31c0, 0x31e3, 1}, - {0x31f0, 0x321e, 1}, - {0x3220, 0x32fe, 1}, - {0x3300, 0x4db5, 1}, - {0x4dc0, 0x9fcc, 1}, - {0xa000, 0xa48c, 1}, - {0xa490, 0xa4c6, 1}, - {0xa4d0, 0xa62b, 1}, - {0xa640, 0xa697, 1}, - {0xa69f, 0xa6f7, 1}, - {0xa700, 0xa78e, 1}, - {0xa790, 0xa793, 1}, - {0xa7a0, 0xa7aa, 1}, - {0xa7f8, 0xa82b, 1}, - {0xa830, 0xa839, 1}, - {0xa840, 0xa877, 1}, - {0xa880, 0xa8c4, 1}, - {0xa8ce, 0xa8d9, 1}, - {0xa8e0, 0xa8fb, 1}, - {0xa900, 0xa953, 1}, - {0xa95f, 0xa97c, 1}, - {0xa980, 0xa9cd, 1}, - {0xa9cf, 0xa9d9, 1}, - {0xa9de, 0xa9df, 1}, - {0xaa00, 0xaa36, 1}, - {0xaa40, 0xaa4d, 1}, - {0xaa50, 0xaa59, 1}, - {0xaa5c, 0xaa7b, 1}, - {0xaa80, 0xaac2, 1}, - {0xaadb, 0xaaf6, 1}, - {0xab01, 0xab06, 1}, - {0xab09, 0xab0e, 1}, - {0xab11, 0xab16, 1}, - {0xab20, 0xab26, 1}, - {0xab28, 0xab2e, 1}, - {0xabc0, 0xabed, 1}, - {0xabf0, 0xabf9, 1}, - {0xac00, 0xd7a3, 1}, - {0xd7b0, 0xd7c6, 1}, - {0xd7cb, 0xd7fb, 1}, - {0xd800, 0xfa6d, 1}, - {0xfa70, 0xfad9, 1}, - {0xfb00, 0xfb06, 1}, - {0xfb13, 0xfb17, 1}, - {0xfb1d, 0xfb36, 1}, - {0xfb38, 0xfb3c, 1}, - {0xfb3e, 0xfb40, 2}, - {0xfb41, 0xfb43, 2}, - {0xfb44, 0xfb46, 2}, - {0xfb47, 0xfbc1, 1}, - {0xfbd3, 0xfd3f, 1}, - {0xfd50, 0xfd8f, 1}, - {0xfd92, 0xfdc7, 1}, - {0xfdf0, 0xfdfd, 1}, - {0xfe00, 0xfe19, 1}, - {0xfe20, 0xfe26, 1}, - {0xfe30, 0xfe52, 1}, - {0xfe54, 0xfe66, 1}, - {0xfe68, 0xfe6b, 1}, - {0xfe70, 0xfe74, 1}, - {0xfe76, 0xfefc, 1}, - {0xfeff, 0xff01, 2}, - {0xff02, 0xffbe, 1}, - {0xffc2, 0xffc7, 1}, - {0xffca, 0xffcf, 1}, - {0xffd2, 0xffd7, 1}, - {0xffda, 0xffdc, 1}, - {0xffe0, 0xffe6, 1}, - {0xffe8, 0xffee, 1}, - {0xfff9, 0xfffd, 1}, - }, - R32: []unicode.Range32{ - {0x00010000, 0x0001000b, 1}, - {0x0001000d, 0x00010026, 1}, - {0x00010028, 0x0001003a, 1}, - {0x0001003c, 0x0001003d, 1}, - {0x0001003f, 0x0001004d, 1}, - {0x00010050, 0x0001005d, 1}, - {0x00010080, 0x000100fa, 1}, - {0x00010100, 0x00010102, 1}, - {0x00010107, 0x00010133, 1}, - {0x00010137, 0x0001018a, 1}, - {0x00010190, 0x0001019b, 1}, - {0x000101d0, 0x000101fd, 1}, - {0x00010280, 0x0001029c, 1}, - {0x000102a0, 0x000102d0, 1}, - {0x00010300, 0x0001031e, 1}, - {0x00010320, 0x00010323, 1}, - {0x00010330, 0x0001034a, 1}, - {0x00010380, 0x0001039d, 1}, - {0x0001039f, 0x000103c3, 1}, - {0x000103c8, 0x000103d5, 1}, - {0x00010400, 0x0001049d, 1}, - {0x000104a0, 0x000104a9, 1}, - {0x00010800, 0x00010805, 1}, - {0x00010808, 0x0001080a, 2}, - {0x0001080b, 0x00010835, 1}, - {0x00010837, 0x00010838, 1}, - {0x0001083c, 0x0001083f, 3}, - {0x00010840, 0x00010855, 1}, - {0x00010857, 0x0001085f, 1}, - {0x00010900, 0x0001091b, 1}, - {0x0001091f, 0x00010939, 1}, - {0x0001093f, 0x00010980, 65}, - {0x00010981, 0x000109b7, 1}, - {0x000109be, 0x000109bf, 1}, - {0x00010a00, 0x00010a03, 1}, - {0x00010a05, 0x00010a06, 1}, - {0x00010a0c, 0x00010a13, 1}, - {0x00010a15, 0x00010a17, 1}, - {0x00010a19, 0x00010a33, 1}, - {0x00010a38, 0x00010a3a, 1}, - {0x00010a3f, 0x00010a47, 1}, - {0x00010a50, 0x00010a58, 1}, - {0x00010a60, 0x00010a7f, 1}, - {0x00010b00, 0x00010b35, 1}, - {0x00010b39, 0x00010b55, 1}, - {0x00010b58, 0x00010b72, 1}, - {0x00010b78, 0x00010b7f, 1}, - {0x00010c00, 0x00010c48, 1}, - {0x00010e60, 0x00010e7e, 1}, - {0x00011000, 0x0001104d, 1}, - {0x00011052, 0x0001106f, 1}, - {0x00011080, 0x000110c1, 1}, - {0x000110d0, 0x000110e8, 1}, - {0x000110f0, 0x000110f9, 1}, - {0x00011100, 0x00011134, 1}, - {0x00011136, 0x00011143, 1}, - {0x00011180, 0x000111c8, 1}, - {0x000111d0, 0x000111d9, 1}, - {0x00011680, 0x000116b7, 1}, - {0x000116c0, 0x000116c9, 1}, - {0x00012000, 0x0001236e, 1}, - {0x00012400, 0x00012462, 1}, - {0x00012470, 0x00012473, 1}, - {0x00013000, 0x0001342e, 1}, - {0x00016800, 0x00016a38, 1}, - {0x00016f00, 0x00016f44, 1}, - {0x00016f50, 0x00016f7e, 1}, - {0x00016f8f, 0x00016f9f, 1}, - {0x0001b000, 0x0001b001, 1}, - {0x0001d000, 0x0001d0f5, 1}, - {0x0001d100, 0x0001d126, 1}, - {0x0001d129, 0x0001d1dd, 1}, - {0x0001d200, 0x0001d245, 1}, - {0x0001d300, 0x0001d356, 1}, - {0x0001d360, 0x0001d371, 1}, - {0x0001d400, 0x0001d454, 1}, - {0x0001d456, 0x0001d49c, 1}, - {0x0001d49e, 0x0001d49f, 1}, - {0x0001d4a2, 0x0001d4a5, 3}, - {0x0001d4a6, 0x0001d4a9, 3}, - {0x0001d4aa, 0x0001d4ac, 1}, - {0x0001d4ae, 0x0001d4b9, 1}, - {0x0001d4bb, 0x0001d4bd, 2}, - {0x0001d4be, 0x0001d4c3, 1}, - {0x0001d4c5, 0x0001d505, 1}, - {0x0001d507, 0x0001d50a, 1}, - {0x0001d50d, 0x0001d514, 1}, - {0x0001d516, 0x0001d51c, 1}, - {0x0001d51e, 0x0001d539, 1}, - {0x0001d53b, 0x0001d53e, 1}, - {0x0001d540, 0x0001d544, 1}, - {0x0001d546, 0x0001d54a, 4}, - {0x0001d54b, 0x0001d550, 1}, - {0x0001d552, 0x0001d6a5, 1}, - {0x0001d6a8, 0x0001d7cb, 1}, - {0x0001d7ce, 0x0001d7ff, 1}, - {0x0001ee00, 0x0001ee03, 1}, - {0x0001ee05, 0x0001ee1f, 1}, - {0x0001ee21, 0x0001ee22, 1}, - {0x0001ee24, 0x0001ee27, 3}, - {0x0001ee29, 0x0001ee32, 1}, - {0x0001ee34, 0x0001ee37, 1}, - {0x0001ee39, 0x0001ee3b, 2}, - {0x0001ee42, 0x0001ee47, 5}, - {0x0001ee49, 0x0001ee4d, 2}, - {0x0001ee4e, 0x0001ee4f, 1}, - {0x0001ee51, 0x0001ee52, 1}, - {0x0001ee54, 0x0001ee57, 3}, - {0x0001ee59, 0x0001ee61, 2}, - {0x0001ee62, 0x0001ee64, 2}, - {0x0001ee67, 0x0001ee6a, 1}, - {0x0001ee6c, 0x0001ee72, 1}, - {0x0001ee74, 0x0001ee77, 1}, - {0x0001ee79, 0x0001ee7c, 1}, - {0x0001ee7e, 0x0001ee80, 2}, - {0x0001ee81, 0x0001ee89, 1}, - {0x0001ee8b, 0x0001ee9b, 1}, - {0x0001eea1, 0x0001eea3, 1}, - {0x0001eea5, 0x0001eea9, 1}, - {0x0001eeab, 0x0001eebb, 1}, - {0x0001eef0, 0x0001eef1, 1}, - {0x0001f000, 0x0001f02b, 1}, - {0x0001f030, 0x0001f093, 1}, - {0x0001f0a0, 0x0001f0ae, 1}, - {0x0001f0b1, 0x0001f0be, 1}, - {0x0001f0c1, 0x0001f0cf, 1}, - {0x0001f0d1, 0x0001f0df, 1}, - {0x0001f100, 0x0001f10a, 1}, - {0x0001f110, 0x0001f12e, 1}, - {0x0001f130, 0x0001f16b, 1}, - {0x0001f170, 0x0001f19a, 1}, - {0x0001f1e6, 0x0001f202, 1}, - {0x0001f210, 0x0001f23a, 1}, - {0x0001f240, 0x0001f248, 1}, - {0x0001f250, 0x0001f251, 1}, - {0x0001f300, 0x0001f320, 1}, - {0x0001f330, 0x0001f335, 1}, - {0x0001f337, 0x0001f37c, 1}, - {0x0001f380, 0x0001f393, 1}, - {0x0001f3a0, 0x0001f3c4, 1}, - {0x0001f3c6, 0x0001f3ca, 1}, - {0x0001f3e0, 0x0001f3f0, 1}, - {0x0001f400, 0x0001f43e, 1}, - {0x0001f440, 0x0001f442, 2}, - {0x0001f443, 0x0001f4f7, 1}, - {0x0001f4f9, 0x0001f4fc, 1}, - {0x0001f500, 0x0001f53d, 1}, - {0x0001f540, 0x0001f543, 1}, - {0x0001f550, 0x0001f567, 1}, - {0x0001f5fb, 0x0001f640, 1}, - {0x0001f645, 0x0001f64f, 1}, - {0x0001f680, 0x0001f6c5, 1}, - {0x0001f700, 0x0001f773, 1}, - {0x00020000, 0x0002a6d6, 1}, - {0x0002a700, 0x0002b734, 1}, - {0x0002b740, 0x0002b81d, 1}, - {0x0002f800, 0x0002fa1d, 1}, - {0x000e0001, 0x000e0020, 31}, - {0x000e0021, 0x000e007f, 1}, - {0x000e0100, 0x000e01ef, 1}, - {0x000f0000, 0x000ffffd, 1}, - {0x00100000, 0x0010fffd, 1}, - }, - LatinOffset: 0, -} - -// size 4898 bytes (4 KiB) -var assigned7_0_0 = &unicode.RangeTable{ - R16: []unicode.Range16{ - {0x0000, 0x0377, 1}, - {0x037a, 0x037f, 1}, - {0x0384, 0x038a, 1}, - {0x038c, 0x038e, 2}, - {0x038f, 0x03a1, 1}, - {0x03a3, 0x052f, 1}, - {0x0531, 0x0556, 1}, - {0x0559, 0x055f, 1}, - {0x0561, 0x0587, 1}, - {0x0589, 0x058a, 1}, - {0x058d, 0x058f, 1}, - {0x0591, 0x05c7, 1}, - {0x05d0, 0x05ea, 1}, - {0x05f0, 0x05f4, 1}, - {0x0600, 0x061c, 1}, - {0x061e, 0x070d, 1}, - {0x070f, 0x074a, 1}, - {0x074d, 0x07b1, 1}, - {0x07c0, 0x07fa, 1}, - {0x0800, 0x082d, 1}, - {0x0830, 0x083e, 1}, - {0x0840, 0x085b, 1}, - {0x085e, 0x08a0, 66}, - {0x08a1, 0x08b2, 1}, - {0x08e4, 0x0983, 1}, - {0x0985, 0x098c, 1}, - {0x098f, 0x0990, 1}, - {0x0993, 0x09a8, 1}, - {0x09aa, 0x09b0, 1}, - {0x09b2, 0x09b6, 4}, - {0x09b7, 0x09b9, 1}, - {0x09bc, 0x09c4, 1}, - {0x09c7, 0x09c8, 1}, - {0x09cb, 0x09ce, 1}, - {0x09d7, 0x09dc, 5}, - {0x09dd, 0x09df, 2}, - {0x09e0, 0x09e3, 1}, - {0x09e6, 0x09fb, 1}, - {0x0a01, 0x0a03, 1}, - {0x0a05, 0x0a0a, 1}, - {0x0a0f, 0x0a10, 1}, - {0x0a13, 0x0a28, 1}, - {0x0a2a, 0x0a30, 1}, - {0x0a32, 0x0a33, 1}, - {0x0a35, 0x0a36, 1}, - {0x0a38, 0x0a39, 1}, - {0x0a3c, 0x0a3e, 2}, - {0x0a3f, 0x0a42, 1}, - {0x0a47, 0x0a48, 1}, - {0x0a4b, 0x0a4d, 1}, - {0x0a51, 0x0a59, 8}, - {0x0a5a, 0x0a5c, 1}, - {0x0a5e, 0x0a66, 8}, - {0x0a67, 0x0a75, 1}, - {0x0a81, 0x0a83, 1}, - {0x0a85, 0x0a8d, 1}, - {0x0a8f, 0x0a91, 1}, - {0x0a93, 0x0aa8, 1}, - {0x0aaa, 0x0ab0, 1}, - {0x0ab2, 0x0ab3, 1}, - {0x0ab5, 0x0ab9, 1}, - {0x0abc, 0x0ac5, 1}, - {0x0ac7, 0x0ac9, 1}, - {0x0acb, 0x0acd, 1}, - {0x0ad0, 0x0ae0, 16}, - {0x0ae1, 0x0ae3, 1}, - {0x0ae6, 0x0af1, 1}, - {0x0b01, 0x0b03, 1}, - {0x0b05, 0x0b0c, 1}, - {0x0b0f, 0x0b10, 1}, - {0x0b13, 0x0b28, 1}, - {0x0b2a, 0x0b30, 1}, - {0x0b32, 0x0b33, 1}, - {0x0b35, 0x0b39, 1}, - {0x0b3c, 0x0b44, 1}, - {0x0b47, 0x0b48, 1}, - {0x0b4b, 0x0b4d, 1}, - {0x0b56, 0x0b57, 1}, - {0x0b5c, 0x0b5d, 1}, - {0x0b5f, 0x0b63, 1}, - {0x0b66, 0x0b77, 1}, - {0x0b82, 0x0b83, 1}, - {0x0b85, 0x0b8a, 1}, - {0x0b8e, 0x0b90, 1}, - {0x0b92, 0x0b95, 1}, - {0x0b99, 0x0b9a, 1}, - {0x0b9c, 0x0b9e, 2}, - {0x0b9f, 0x0ba3, 4}, - {0x0ba4, 0x0ba8, 4}, - {0x0ba9, 0x0baa, 1}, - {0x0bae, 0x0bb9, 1}, - {0x0bbe, 0x0bc2, 1}, - {0x0bc6, 0x0bc8, 1}, - {0x0bca, 0x0bcd, 1}, - {0x0bd0, 0x0bd7, 7}, - {0x0be6, 0x0bfa, 1}, - {0x0c00, 0x0c03, 1}, - {0x0c05, 0x0c0c, 1}, - {0x0c0e, 0x0c10, 1}, - {0x0c12, 0x0c28, 1}, - {0x0c2a, 0x0c39, 1}, - {0x0c3d, 0x0c44, 1}, - {0x0c46, 0x0c48, 1}, - {0x0c4a, 0x0c4d, 1}, - {0x0c55, 0x0c56, 1}, - {0x0c58, 0x0c59, 1}, - {0x0c60, 0x0c63, 1}, - {0x0c66, 0x0c6f, 1}, - {0x0c78, 0x0c7f, 1}, - {0x0c81, 0x0c83, 1}, - {0x0c85, 0x0c8c, 1}, - {0x0c8e, 0x0c90, 1}, - {0x0c92, 0x0ca8, 1}, - {0x0caa, 0x0cb3, 1}, - {0x0cb5, 0x0cb9, 1}, - {0x0cbc, 0x0cc4, 1}, - {0x0cc6, 0x0cc8, 1}, - {0x0cca, 0x0ccd, 1}, - {0x0cd5, 0x0cd6, 1}, - {0x0cde, 0x0ce0, 2}, - {0x0ce1, 0x0ce3, 1}, - {0x0ce6, 0x0cef, 1}, - {0x0cf1, 0x0cf2, 1}, - {0x0d01, 0x0d03, 1}, - {0x0d05, 0x0d0c, 1}, - {0x0d0e, 0x0d10, 1}, - {0x0d12, 0x0d3a, 1}, - {0x0d3d, 0x0d44, 1}, - {0x0d46, 0x0d48, 1}, - {0x0d4a, 0x0d4e, 1}, - {0x0d57, 0x0d60, 9}, - {0x0d61, 0x0d63, 1}, - {0x0d66, 0x0d75, 1}, - {0x0d79, 0x0d7f, 1}, - {0x0d82, 0x0d83, 1}, - {0x0d85, 0x0d96, 1}, - {0x0d9a, 0x0db1, 1}, - {0x0db3, 0x0dbb, 1}, - {0x0dbd, 0x0dc0, 3}, - {0x0dc1, 0x0dc6, 1}, - {0x0dca, 0x0dcf, 5}, - {0x0dd0, 0x0dd4, 1}, - {0x0dd6, 0x0dd8, 2}, - {0x0dd9, 0x0ddf, 1}, - {0x0de6, 0x0def, 1}, - {0x0df2, 0x0df4, 1}, - {0x0e01, 0x0e3a, 1}, - {0x0e3f, 0x0e5b, 1}, - {0x0e81, 0x0e82, 1}, - {0x0e84, 0x0e87, 3}, - {0x0e88, 0x0e8a, 2}, - {0x0e8d, 0x0e94, 7}, - {0x0e95, 0x0e97, 1}, - {0x0e99, 0x0e9f, 1}, - {0x0ea1, 0x0ea3, 1}, - {0x0ea5, 0x0ea7, 2}, - {0x0eaa, 0x0eab, 1}, - {0x0ead, 0x0eb9, 1}, - {0x0ebb, 0x0ebd, 1}, - {0x0ec0, 0x0ec4, 1}, - {0x0ec6, 0x0ec8, 2}, - {0x0ec9, 0x0ecd, 1}, - {0x0ed0, 0x0ed9, 1}, - {0x0edc, 0x0edf, 1}, - {0x0f00, 0x0f47, 1}, - {0x0f49, 0x0f6c, 1}, - {0x0f71, 0x0f97, 1}, - {0x0f99, 0x0fbc, 1}, - {0x0fbe, 0x0fcc, 1}, - {0x0fce, 0x0fda, 1}, - {0x1000, 0x10c5, 1}, - {0x10c7, 0x10cd, 6}, - {0x10d0, 0x1248, 1}, - {0x124a, 0x124d, 1}, - {0x1250, 0x1256, 1}, - {0x1258, 0x125a, 2}, - {0x125b, 0x125d, 1}, - {0x1260, 0x1288, 1}, - {0x128a, 0x128d, 1}, - {0x1290, 0x12b0, 1}, - {0x12b2, 0x12b5, 1}, - {0x12b8, 0x12be, 1}, - {0x12c0, 0x12c2, 2}, - {0x12c3, 0x12c5, 1}, - {0x12c8, 0x12d6, 1}, - {0x12d8, 0x1310, 1}, - {0x1312, 0x1315, 1}, - {0x1318, 0x135a, 1}, - {0x135d, 0x137c, 1}, - {0x1380, 0x1399, 1}, - {0x13a0, 0x13f4, 1}, - {0x1400, 0x169c, 1}, - {0x16a0, 0x16f8, 1}, - {0x1700, 0x170c, 1}, - {0x170e, 0x1714, 1}, - {0x1720, 0x1736, 1}, - {0x1740, 0x1753, 1}, - {0x1760, 0x176c, 1}, - {0x176e, 0x1770, 1}, - {0x1772, 0x1773, 1}, - {0x1780, 0x17dd, 1}, - {0x17e0, 0x17e9, 1}, - {0x17f0, 0x17f9, 1}, - {0x1800, 0x180e, 1}, - {0x1810, 0x1819, 1}, - {0x1820, 0x1877, 1}, - {0x1880, 0x18aa, 1}, - {0x18b0, 0x18f5, 1}, - {0x1900, 0x191e, 1}, - {0x1920, 0x192b, 1}, - {0x1930, 0x193b, 1}, - {0x1940, 0x1944, 4}, - {0x1945, 0x196d, 1}, - {0x1970, 0x1974, 1}, - {0x1980, 0x19ab, 1}, - {0x19b0, 0x19c9, 1}, - {0x19d0, 0x19da, 1}, - {0x19de, 0x1a1b, 1}, - {0x1a1e, 0x1a5e, 1}, - {0x1a60, 0x1a7c, 1}, - {0x1a7f, 0x1a89, 1}, - {0x1a90, 0x1a99, 1}, - {0x1aa0, 0x1aad, 1}, - {0x1ab0, 0x1abe, 1}, - {0x1b00, 0x1b4b, 1}, - {0x1b50, 0x1b7c, 1}, - {0x1b80, 0x1bf3, 1}, - {0x1bfc, 0x1c37, 1}, - {0x1c3b, 0x1c49, 1}, - {0x1c4d, 0x1c7f, 1}, - {0x1cc0, 0x1cc7, 1}, - {0x1cd0, 0x1cf6, 1}, - {0x1cf8, 0x1cf9, 1}, - {0x1d00, 0x1df5, 1}, - {0x1dfc, 0x1f15, 1}, - {0x1f18, 0x1f1d, 1}, - {0x1f20, 0x1f45, 1}, - {0x1f48, 0x1f4d, 1}, - {0x1f50, 0x1f57, 1}, - {0x1f59, 0x1f5f, 2}, - {0x1f60, 0x1f7d, 1}, - {0x1f80, 0x1fb4, 1}, - {0x1fb6, 0x1fc4, 1}, - {0x1fc6, 0x1fd3, 1}, - {0x1fd6, 0x1fdb, 1}, - {0x1fdd, 0x1fef, 1}, - {0x1ff2, 0x1ff4, 1}, - {0x1ff6, 0x1ffe, 1}, - {0x2000, 0x2064, 1}, - {0x2066, 0x2071, 1}, - {0x2074, 0x208e, 1}, - {0x2090, 0x209c, 1}, - {0x20a0, 0x20bd, 1}, - {0x20d0, 0x20f0, 1}, - {0x2100, 0x2189, 1}, - {0x2190, 0x23fa, 1}, - {0x2400, 0x2426, 1}, - {0x2440, 0x244a, 1}, - {0x2460, 0x2b73, 1}, - {0x2b76, 0x2b95, 1}, - {0x2b98, 0x2bb9, 1}, - {0x2bbd, 0x2bc8, 1}, - {0x2bca, 0x2bd1, 1}, - {0x2c00, 0x2c2e, 1}, - {0x2c30, 0x2c5e, 1}, - {0x2c60, 0x2cf3, 1}, - {0x2cf9, 0x2d25, 1}, - {0x2d27, 0x2d2d, 6}, - {0x2d30, 0x2d67, 1}, - {0x2d6f, 0x2d70, 1}, - {0x2d7f, 0x2d96, 1}, - {0x2da0, 0x2da6, 1}, - {0x2da8, 0x2dae, 1}, - {0x2db0, 0x2db6, 1}, - {0x2db8, 0x2dbe, 1}, - {0x2dc0, 0x2dc6, 1}, - {0x2dc8, 0x2dce, 1}, - {0x2dd0, 0x2dd6, 1}, - {0x2dd8, 0x2dde, 1}, - {0x2de0, 0x2e42, 1}, - {0x2e80, 0x2e99, 1}, - {0x2e9b, 0x2ef3, 1}, - {0x2f00, 0x2fd5, 1}, - {0x2ff0, 0x2ffb, 1}, - {0x3000, 0x303f, 1}, - {0x3041, 0x3096, 1}, - {0x3099, 0x30ff, 1}, - {0x3105, 0x312d, 1}, - {0x3131, 0x318e, 1}, - {0x3190, 0x31ba, 1}, - {0x31c0, 0x31e3, 1}, - {0x31f0, 0x321e, 1}, - {0x3220, 0x32fe, 1}, - {0x3300, 0x4db5, 1}, - {0x4dc0, 0x9fcc, 1}, - {0xa000, 0xa48c, 1}, - {0xa490, 0xa4c6, 1}, - {0xa4d0, 0xa62b, 1}, - {0xa640, 0xa69d, 1}, - {0xa69f, 0xa6f7, 1}, - {0xa700, 0xa78e, 1}, - {0xa790, 0xa7ad, 1}, - {0xa7b0, 0xa7b1, 1}, - {0xa7f7, 0xa82b, 1}, - {0xa830, 0xa839, 1}, - {0xa840, 0xa877, 1}, - {0xa880, 0xa8c4, 1}, - {0xa8ce, 0xa8d9, 1}, - {0xa8e0, 0xa8fb, 1}, - {0xa900, 0xa953, 1}, - {0xa95f, 0xa97c, 1}, - {0xa980, 0xa9cd, 1}, - {0xa9cf, 0xa9d9, 1}, - {0xa9de, 0xa9fe, 1}, - {0xaa00, 0xaa36, 1}, - {0xaa40, 0xaa4d, 1}, - {0xaa50, 0xaa59, 1}, - {0xaa5c, 0xaac2, 1}, - {0xaadb, 0xaaf6, 1}, - {0xab01, 0xab06, 1}, - {0xab09, 0xab0e, 1}, - {0xab11, 0xab16, 1}, - {0xab20, 0xab26, 1}, - {0xab28, 0xab2e, 1}, - {0xab30, 0xab5f, 1}, - {0xab64, 0xab65, 1}, - {0xabc0, 0xabed, 1}, - {0xabf0, 0xabf9, 1}, - {0xac00, 0xd7a3, 1}, - {0xd7b0, 0xd7c6, 1}, - {0xd7cb, 0xd7fb, 1}, - {0xd800, 0xfa6d, 1}, - {0xfa70, 0xfad9, 1}, - {0xfb00, 0xfb06, 1}, - {0xfb13, 0xfb17, 1}, - {0xfb1d, 0xfb36, 1}, - {0xfb38, 0xfb3c, 1}, - {0xfb3e, 0xfb40, 2}, - {0xfb41, 0xfb43, 2}, - {0xfb44, 0xfb46, 2}, - {0xfb47, 0xfbc1, 1}, - {0xfbd3, 0xfd3f, 1}, - {0xfd50, 0xfd8f, 1}, - {0xfd92, 0xfdc7, 1}, - {0xfdf0, 0xfdfd, 1}, - {0xfe00, 0xfe19, 1}, - {0xfe20, 0xfe2d, 1}, - {0xfe30, 0xfe52, 1}, - {0xfe54, 0xfe66, 1}, - {0xfe68, 0xfe6b, 1}, - {0xfe70, 0xfe74, 1}, - {0xfe76, 0xfefc, 1}, - {0xfeff, 0xff01, 2}, - {0xff02, 0xffbe, 1}, - {0xffc2, 0xffc7, 1}, - {0xffca, 0xffcf, 1}, - {0xffd2, 0xffd7, 1}, - {0xffda, 0xffdc, 1}, - {0xffe0, 0xffe6, 1}, - {0xffe8, 0xffee, 1}, - {0xfff9, 0xfffd, 1}, - }, - R32: []unicode.Range32{ - {0x00010000, 0x0001000b, 1}, - {0x0001000d, 0x00010026, 1}, - {0x00010028, 0x0001003a, 1}, - {0x0001003c, 0x0001003d, 1}, - {0x0001003f, 0x0001004d, 1}, - {0x00010050, 0x0001005d, 1}, - {0x00010080, 0x000100fa, 1}, - {0x00010100, 0x00010102, 1}, - {0x00010107, 0x00010133, 1}, - {0x00010137, 0x0001018c, 1}, - {0x00010190, 0x0001019b, 1}, - {0x000101a0, 0x000101d0, 48}, - {0x000101d1, 0x000101fd, 1}, - {0x00010280, 0x0001029c, 1}, - {0x000102a0, 0x000102d0, 1}, - {0x000102e0, 0x000102fb, 1}, - {0x00010300, 0x00010323, 1}, - {0x00010330, 0x0001034a, 1}, - {0x00010350, 0x0001037a, 1}, - {0x00010380, 0x0001039d, 1}, - {0x0001039f, 0x000103c3, 1}, - {0x000103c8, 0x000103d5, 1}, - {0x00010400, 0x0001049d, 1}, - {0x000104a0, 0x000104a9, 1}, - {0x00010500, 0x00010527, 1}, - {0x00010530, 0x00010563, 1}, - {0x0001056f, 0x00010600, 145}, - {0x00010601, 0x00010736, 1}, - {0x00010740, 0x00010755, 1}, - {0x00010760, 0x00010767, 1}, - {0x00010800, 0x00010805, 1}, - {0x00010808, 0x0001080a, 2}, - {0x0001080b, 0x00010835, 1}, - {0x00010837, 0x00010838, 1}, - {0x0001083c, 0x0001083f, 3}, - {0x00010840, 0x00010855, 1}, - {0x00010857, 0x0001089e, 1}, - {0x000108a7, 0x000108af, 1}, - {0x00010900, 0x0001091b, 1}, - {0x0001091f, 0x00010939, 1}, - {0x0001093f, 0x00010980, 65}, - {0x00010981, 0x000109b7, 1}, - {0x000109be, 0x000109bf, 1}, - {0x00010a00, 0x00010a03, 1}, - {0x00010a05, 0x00010a06, 1}, - {0x00010a0c, 0x00010a13, 1}, - {0x00010a15, 0x00010a17, 1}, - {0x00010a19, 0x00010a33, 1}, - {0x00010a38, 0x00010a3a, 1}, - {0x00010a3f, 0x00010a47, 1}, - {0x00010a50, 0x00010a58, 1}, - {0x00010a60, 0x00010a9f, 1}, - {0x00010ac0, 0x00010ae6, 1}, - {0x00010aeb, 0x00010af6, 1}, - {0x00010b00, 0x00010b35, 1}, - {0x00010b39, 0x00010b55, 1}, - {0x00010b58, 0x00010b72, 1}, - {0x00010b78, 0x00010b91, 1}, - {0x00010b99, 0x00010b9c, 1}, - {0x00010ba9, 0x00010baf, 1}, - {0x00010c00, 0x00010c48, 1}, - {0x00010e60, 0x00010e7e, 1}, - {0x00011000, 0x0001104d, 1}, - {0x00011052, 0x0001106f, 1}, - {0x0001107f, 0x000110c1, 1}, - {0x000110d0, 0x000110e8, 1}, - {0x000110f0, 0x000110f9, 1}, - {0x00011100, 0x00011134, 1}, - {0x00011136, 0x00011143, 1}, - {0x00011150, 0x00011176, 1}, - {0x00011180, 0x000111c8, 1}, - {0x000111cd, 0x000111d0, 3}, - {0x000111d1, 0x000111da, 1}, - {0x000111e1, 0x000111f4, 1}, - {0x00011200, 0x00011211, 1}, - {0x00011213, 0x0001123d, 1}, - {0x000112b0, 0x000112ea, 1}, - {0x000112f0, 0x000112f9, 1}, - {0x00011301, 0x00011303, 1}, - {0x00011305, 0x0001130c, 1}, - {0x0001130f, 0x00011310, 1}, - {0x00011313, 0x00011328, 1}, - {0x0001132a, 0x00011330, 1}, - {0x00011332, 0x00011333, 1}, - {0x00011335, 0x00011339, 1}, - {0x0001133c, 0x00011344, 1}, - {0x00011347, 0x00011348, 1}, - {0x0001134b, 0x0001134d, 1}, - {0x00011357, 0x0001135d, 6}, - {0x0001135e, 0x00011363, 1}, - {0x00011366, 0x0001136c, 1}, - {0x00011370, 0x00011374, 1}, - {0x00011480, 0x000114c7, 1}, - {0x000114d0, 0x000114d9, 1}, - {0x00011580, 0x000115b5, 1}, - {0x000115b8, 0x000115c9, 1}, - {0x00011600, 0x00011644, 1}, - {0x00011650, 0x00011659, 1}, - {0x00011680, 0x000116b7, 1}, - {0x000116c0, 0x000116c9, 1}, - {0x000118a0, 0x000118f2, 1}, - {0x000118ff, 0x00011ac0, 449}, - {0x00011ac1, 0x00011af8, 1}, - {0x00012000, 0x00012398, 1}, - {0x00012400, 0x0001246e, 1}, - {0x00012470, 0x00012474, 1}, - {0x00013000, 0x0001342e, 1}, - {0x00016800, 0x00016a38, 1}, - {0x00016a40, 0x00016a5e, 1}, - {0x00016a60, 0x00016a69, 1}, - {0x00016a6e, 0x00016a6f, 1}, - {0x00016ad0, 0x00016aed, 1}, - {0x00016af0, 0x00016af5, 1}, - {0x00016b00, 0x00016b45, 1}, - {0x00016b50, 0x00016b59, 1}, - {0x00016b5b, 0x00016b61, 1}, - {0x00016b63, 0x00016b77, 1}, - {0x00016b7d, 0x00016b8f, 1}, - {0x00016f00, 0x00016f44, 1}, - {0x00016f50, 0x00016f7e, 1}, - {0x00016f8f, 0x00016f9f, 1}, - {0x0001b000, 0x0001b001, 1}, - {0x0001bc00, 0x0001bc6a, 1}, - {0x0001bc70, 0x0001bc7c, 1}, - {0x0001bc80, 0x0001bc88, 1}, - {0x0001bc90, 0x0001bc99, 1}, - {0x0001bc9c, 0x0001bca3, 1}, - {0x0001d000, 0x0001d0f5, 1}, - {0x0001d100, 0x0001d126, 1}, - {0x0001d129, 0x0001d1dd, 1}, - {0x0001d200, 0x0001d245, 1}, - {0x0001d300, 0x0001d356, 1}, - {0x0001d360, 0x0001d371, 1}, - {0x0001d400, 0x0001d454, 1}, - {0x0001d456, 0x0001d49c, 1}, - {0x0001d49e, 0x0001d49f, 1}, - {0x0001d4a2, 0x0001d4a5, 3}, - {0x0001d4a6, 0x0001d4a9, 3}, - {0x0001d4aa, 0x0001d4ac, 1}, - {0x0001d4ae, 0x0001d4b9, 1}, - {0x0001d4bb, 0x0001d4bd, 2}, - {0x0001d4be, 0x0001d4c3, 1}, - {0x0001d4c5, 0x0001d505, 1}, - {0x0001d507, 0x0001d50a, 1}, - {0x0001d50d, 0x0001d514, 1}, - {0x0001d516, 0x0001d51c, 1}, - {0x0001d51e, 0x0001d539, 1}, - {0x0001d53b, 0x0001d53e, 1}, - {0x0001d540, 0x0001d544, 1}, - {0x0001d546, 0x0001d54a, 4}, - {0x0001d54b, 0x0001d550, 1}, - {0x0001d552, 0x0001d6a5, 1}, - {0x0001d6a8, 0x0001d7cb, 1}, - {0x0001d7ce, 0x0001d7ff, 1}, - {0x0001e800, 0x0001e8c4, 1}, - {0x0001e8c7, 0x0001e8d6, 1}, - {0x0001ee00, 0x0001ee03, 1}, - {0x0001ee05, 0x0001ee1f, 1}, - {0x0001ee21, 0x0001ee22, 1}, - {0x0001ee24, 0x0001ee27, 3}, - {0x0001ee29, 0x0001ee32, 1}, - {0x0001ee34, 0x0001ee37, 1}, - {0x0001ee39, 0x0001ee3b, 2}, - {0x0001ee42, 0x0001ee47, 5}, - {0x0001ee49, 0x0001ee4d, 2}, - {0x0001ee4e, 0x0001ee4f, 1}, - {0x0001ee51, 0x0001ee52, 1}, - {0x0001ee54, 0x0001ee57, 3}, - {0x0001ee59, 0x0001ee61, 2}, - {0x0001ee62, 0x0001ee64, 2}, - {0x0001ee67, 0x0001ee6a, 1}, - {0x0001ee6c, 0x0001ee72, 1}, - {0x0001ee74, 0x0001ee77, 1}, - {0x0001ee79, 0x0001ee7c, 1}, - {0x0001ee7e, 0x0001ee80, 2}, - {0x0001ee81, 0x0001ee89, 1}, - {0x0001ee8b, 0x0001ee9b, 1}, - {0x0001eea1, 0x0001eea3, 1}, - {0x0001eea5, 0x0001eea9, 1}, - {0x0001eeab, 0x0001eebb, 1}, - {0x0001eef0, 0x0001eef1, 1}, - {0x0001f000, 0x0001f02b, 1}, - {0x0001f030, 0x0001f093, 1}, - {0x0001f0a0, 0x0001f0ae, 1}, - {0x0001f0b1, 0x0001f0bf, 1}, - {0x0001f0c1, 0x0001f0cf, 1}, - {0x0001f0d1, 0x0001f0f5, 1}, - {0x0001f100, 0x0001f10c, 1}, - {0x0001f110, 0x0001f12e, 1}, - {0x0001f130, 0x0001f16b, 1}, - {0x0001f170, 0x0001f19a, 1}, - {0x0001f1e6, 0x0001f202, 1}, - {0x0001f210, 0x0001f23a, 1}, - {0x0001f240, 0x0001f248, 1}, - {0x0001f250, 0x0001f251, 1}, - {0x0001f300, 0x0001f32c, 1}, - {0x0001f330, 0x0001f37d, 1}, - {0x0001f380, 0x0001f3ce, 1}, - {0x0001f3d4, 0x0001f3f7, 1}, - {0x0001f400, 0x0001f4fe, 1}, - {0x0001f500, 0x0001f54a, 1}, - {0x0001f550, 0x0001f579, 1}, - {0x0001f57b, 0x0001f5a3, 1}, - {0x0001f5a5, 0x0001f642, 1}, - {0x0001f645, 0x0001f6cf, 1}, - {0x0001f6e0, 0x0001f6ec, 1}, - {0x0001f6f0, 0x0001f6f3, 1}, - {0x0001f700, 0x0001f773, 1}, - {0x0001f780, 0x0001f7d4, 1}, - {0x0001f800, 0x0001f80b, 1}, - {0x0001f810, 0x0001f847, 1}, - {0x0001f850, 0x0001f859, 1}, - {0x0001f860, 0x0001f887, 1}, - {0x0001f890, 0x0001f8ad, 1}, - {0x00020000, 0x0002a6d6, 1}, - {0x0002a700, 0x0002b734, 1}, - {0x0002b740, 0x0002b81d, 1}, - {0x0002f800, 0x0002fa1d, 1}, - {0x000e0001, 0x000e0020, 31}, - {0x000e0021, 0x000e007f, 1}, - {0x000e0100, 0x000e01ef, 1}, - {0x000f0000, 0x000ffffd, 1}, - {0x00100000, 0x0010fffd, 1}, - }, - LatinOffset: 0, -} - -// size 5048 bytes (4 KiB) -var assigned8_0_0 = &unicode.RangeTable{ - R16: []unicode.Range16{ - {0x0000, 0x0377, 1}, - {0x037a, 0x037f, 1}, - {0x0384, 0x038a, 1}, - {0x038c, 0x038e, 2}, - {0x038f, 0x03a1, 1}, - {0x03a3, 0x052f, 1}, - {0x0531, 0x0556, 1}, - {0x0559, 0x055f, 1}, - {0x0561, 0x0587, 1}, - {0x0589, 0x058a, 1}, - {0x058d, 0x058f, 1}, - {0x0591, 0x05c7, 1}, - {0x05d0, 0x05ea, 1}, - {0x05f0, 0x05f4, 1}, - {0x0600, 0x061c, 1}, - {0x061e, 0x070d, 1}, - {0x070f, 0x074a, 1}, - {0x074d, 0x07b1, 1}, - {0x07c0, 0x07fa, 1}, - {0x0800, 0x082d, 1}, - {0x0830, 0x083e, 1}, - {0x0840, 0x085b, 1}, - {0x085e, 0x08a0, 66}, - {0x08a1, 0x08b4, 1}, - {0x08e3, 0x0983, 1}, - {0x0985, 0x098c, 1}, - {0x098f, 0x0990, 1}, - {0x0993, 0x09a8, 1}, - {0x09aa, 0x09b0, 1}, - {0x09b2, 0x09b6, 4}, - {0x09b7, 0x09b9, 1}, - {0x09bc, 0x09c4, 1}, - {0x09c7, 0x09c8, 1}, - {0x09cb, 0x09ce, 1}, - {0x09d7, 0x09dc, 5}, - {0x09dd, 0x09df, 2}, - {0x09e0, 0x09e3, 1}, - {0x09e6, 0x09fb, 1}, - {0x0a01, 0x0a03, 1}, - {0x0a05, 0x0a0a, 1}, - {0x0a0f, 0x0a10, 1}, - {0x0a13, 0x0a28, 1}, - {0x0a2a, 0x0a30, 1}, - {0x0a32, 0x0a33, 1}, - {0x0a35, 0x0a36, 1}, - {0x0a38, 0x0a39, 1}, - {0x0a3c, 0x0a3e, 2}, - {0x0a3f, 0x0a42, 1}, - {0x0a47, 0x0a48, 1}, - {0x0a4b, 0x0a4d, 1}, - {0x0a51, 0x0a59, 8}, - {0x0a5a, 0x0a5c, 1}, - {0x0a5e, 0x0a66, 8}, - {0x0a67, 0x0a75, 1}, - {0x0a81, 0x0a83, 1}, - {0x0a85, 0x0a8d, 1}, - {0x0a8f, 0x0a91, 1}, - {0x0a93, 0x0aa8, 1}, - {0x0aaa, 0x0ab0, 1}, - {0x0ab2, 0x0ab3, 1}, - {0x0ab5, 0x0ab9, 1}, - {0x0abc, 0x0ac5, 1}, - {0x0ac7, 0x0ac9, 1}, - {0x0acb, 0x0acd, 1}, - {0x0ad0, 0x0ae0, 16}, - {0x0ae1, 0x0ae3, 1}, - {0x0ae6, 0x0af1, 1}, - {0x0af9, 0x0b01, 8}, - {0x0b02, 0x0b03, 1}, - {0x0b05, 0x0b0c, 1}, - {0x0b0f, 0x0b10, 1}, - {0x0b13, 0x0b28, 1}, - {0x0b2a, 0x0b30, 1}, - {0x0b32, 0x0b33, 1}, - {0x0b35, 0x0b39, 1}, - {0x0b3c, 0x0b44, 1}, - {0x0b47, 0x0b48, 1}, - {0x0b4b, 0x0b4d, 1}, - {0x0b56, 0x0b57, 1}, - {0x0b5c, 0x0b5d, 1}, - {0x0b5f, 0x0b63, 1}, - {0x0b66, 0x0b77, 1}, - {0x0b82, 0x0b83, 1}, - {0x0b85, 0x0b8a, 1}, - {0x0b8e, 0x0b90, 1}, - {0x0b92, 0x0b95, 1}, - {0x0b99, 0x0b9a, 1}, - {0x0b9c, 0x0b9e, 2}, - {0x0b9f, 0x0ba3, 4}, - {0x0ba4, 0x0ba8, 4}, - {0x0ba9, 0x0baa, 1}, - {0x0bae, 0x0bb9, 1}, - {0x0bbe, 0x0bc2, 1}, - {0x0bc6, 0x0bc8, 1}, - {0x0bca, 0x0bcd, 1}, - {0x0bd0, 0x0bd7, 7}, - {0x0be6, 0x0bfa, 1}, - {0x0c00, 0x0c03, 1}, - {0x0c05, 0x0c0c, 1}, - {0x0c0e, 0x0c10, 1}, - {0x0c12, 0x0c28, 1}, - {0x0c2a, 0x0c39, 1}, - {0x0c3d, 0x0c44, 1}, - {0x0c46, 0x0c48, 1}, - {0x0c4a, 0x0c4d, 1}, - {0x0c55, 0x0c56, 1}, - {0x0c58, 0x0c5a, 1}, - {0x0c60, 0x0c63, 1}, - {0x0c66, 0x0c6f, 1}, - {0x0c78, 0x0c7f, 1}, - {0x0c81, 0x0c83, 1}, - {0x0c85, 0x0c8c, 1}, - {0x0c8e, 0x0c90, 1}, - {0x0c92, 0x0ca8, 1}, - {0x0caa, 0x0cb3, 1}, - {0x0cb5, 0x0cb9, 1}, - {0x0cbc, 0x0cc4, 1}, - {0x0cc6, 0x0cc8, 1}, - {0x0cca, 0x0ccd, 1}, - {0x0cd5, 0x0cd6, 1}, - {0x0cde, 0x0ce0, 2}, - {0x0ce1, 0x0ce3, 1}, - {0x0ce6, 0x0cef, 1}, - {0x0cf1, 0x0cf2, 1}, - {0x0d01, 0x0d03, 1}, - {0x0d05, 0x0d0c, 1}, - {0x0d0e, 0x0d10, 1}, - {0x0d12, 0x0d3a, 1}, - {0x0d3d, 0x0d44, 1}, - {0x0d46, 0x0d48, 1}, - {0x0d4a, 0x0d4e, 1}, - {0x0d57, 0x0d5f, 8}, - {0x0d60, 0x0d63, 1}, - {0x0d66, 0x0d75, 1}, - {0x0d79, 0x0d7f, 1}, - {0x0d82, 0x0d83, 1}, - {0x0d85, 0x0d96, 1}, - {0x0d9a, 0x0db1, 1}, - {0x0db3, 0x0dbb, 1}, - {0x0dbd, 0x0dc0, 3}, - {0x0dc1, 0x0dc6, 1}, - {0x0dca, 0x0dcf, 5}, - {0x0dd0, 0x0dd4, 1}, - {0x0dd6, 0x0dd8, 2}, - {0x0dd9, 0x0ddf, 1}, - {0x0de6, 0x0def, 1}, - {0x0df2, 0x0df4, 1}, - {0x0e01, 0x0e3a, 1}, - {0x0e3f, 0x0e5b, 1}, - {0x0e81, 0x0e82, 1}, - {0x0e84, 0x0e87, 3}, - {0x0e88, 0x0e8a, 2}, - {0x0e8d, 0x0e94, 7}, - {0x0e95, 0x0e97, 1}, - {0x0e99, 0x0e9f, 1}, - {0x0ea1, 0x0ea3, 1}, - {0x0ea5, 0x0ea7, 2}, - {0x0eaa, 0x0eab, 1}, - {0x0ead, 0x0eb9, 1}, - {0x0ebb, 0x0ebd, 1}, - {0x0ec0, 0x0ec4, 1}, - {0x0ec6, 0x0ec8, 2}, - {0x0ec9, 0x0ecd, 1}, - {0x0ed0, 0x0ed9, 1}, - {0x0edc, 0x0edf, 1}, - {0x0f00, 0x0f47, 1}, - {0x0f49, 0x0f6c, 1}, - {0x0f71, 0x0f97, 1}, - {0x0f99, 0x0fbc, 1}, - {0x0fbe, 0x0fcc, 1}, - {0x0fce, 0x0fda, 1}, - {0x1000, 0x10c5, 1}, - {0x10c7, 0x10cd, 6}, - {0x10d0, 0x1248, 1}, - {0x124a, 0x124d, 1}, - {0x1250, 0x1256, 1}, - {0x1258, 0x125a, 2}, - {0x125b, 0x125d, 1}, - {0x1260, 0x1288, 1}, - {0x128a, 0x128d, 1}, - {0x1290, 0x12b0, 1}, - {0x12b2, 0x12b5, 1}, - {0x12b8, 0x12be, 1}, - {0x12c0, 0x12c2, 2}, - {0x12c3, 0x12c5, 1}, - {0x12c8, 0x12d6, 1}, - {0x12d8, 0x1310, 1}, - {0x1312, 0x1315, 1}, - {0x1318, 0x135a, 1}, - {0x135d, 0x137c, 1}, - {0x1380, 0x1399, 1}, - {0x13a0, 0x13f5, 1}, - {0x13f8, 0x13fd, 1}, - {0x1400, 0x169c, 1}, - {0x16a0, 0x16f8, 1}, - {0x1700, 0x170c, 1}, - {0x170e, 0x1714, 1}, - {0x1720, 0x1736, 1}, - {0x1740, 0x1753, 1}, - {0x1760, 0x176c, 1}, - {0x176e, 0x1770, 1}, - {0x1772, 0x1773, 1}, - {0x1780, 0x17dd, 1}, - {0x17e0, 0x17e9, 1}, - {0x17f0, 0x17f9, 1}, - {0x1800, 0x180e, 1}, - {0x1810, 0x1819, 1}, - {0x1820, 0x1877, 1}, - {0x1880, 0x18aa, 1}, - {0x18b0, 0x18f5, 1}, - {0x1900, 0x191e, 1}, - {0x1920, 0x192b, 1}, - {0x1930, 0x193b, 1}, - {0x1940, 0x1944, 4}, - {0x1945, 0x196d, 1}, - {0x1970, 0x1974, 1}, - {0x1980, 0x19ab, 1}, - {0x19b0, 0x19c9, 1}, - {0x19d0, 0x19da, 1}, - {0x19de, 0x1a1b, 1}, - {0x1a1e, 0x1a5e, 1}, - {0x1a60, 0x1a7c, 1}, - {0x1a7f, 0x1a89, 1}, - {0x1a90, 0x1a99, 1}, - {0x1aa0, 0x1aad, 1}, - {0x1ab0, 0x1abe, 1}, - {0x1b00, 0x1b4b, 1}, - {0x1b50, 0x1b7c, 1}, - {0x1b80, 0x1bf3, 1}, - {0x1bfc, 0x1c37, 1}, - {0x1c3b, 0x1c49, 1}, - {0x1c4d, 0x1c7f, 1}, - {0x1cc0, 0x1cc7, 1}, - {0x1cd0, 0x1cf6, 1}, - {0x1cf8, 0x1cf9, 1}, - {0x1d00, 0x1df5, 1}, - {0x1dfc, 0x1f15, 1}, - {0x1f18, 0x1f1d, 1}, - {0x1f20, 0x1f45, 1}, - {0x1f48, 0x1f4d, 1}, - {0x1f50, 0x1f57, 1}, - {0x1f59, 0x1f5f, 2}, - {0x1f60, 0x1f7d, 1}, - {0x1f80, 0x1fb4, 1}, - {0x1fb6, 0x1fc4, 1}, - {0x1fc6, 0x1fd3, 1}, - {0x1fd6, 0x1fdb, 1}, - {0x1fdd, 0x1fef, 1}, - {0x1ff2, 0x1ff4, 1}, - {0x1ff6, 0x1ffe, 1}, - {0x2000, 0x2064, 1}, - {0x2066, 0x2071, 1}, - {0x2074, 0x208e, 1}, - {0x2090, 0x209c, 1}, - {0x20a0, 0x20be, 1}, - {0x20d0, 0x20f0, 1}, - {0x2100, 0x218b, 1}, - {0x2190, 0x23fa, 1}, - {0x2400, 0x2426, 1}, - {0x2440, 0x244a, 1}, - {0x2460, 0x2b73, 1}, - {0x2b76, 0x2b95, 1}, - {0x2b98, 0x2bb9, 1}, - {0x2bbd, 0x2bc8, 1}, - {0x2bca, 0x2bd1, 1}, - {0x2bec, 0x2bef, 1}, - {0x2c00, 0x2c2e, 1}, - {0x2c30, 0x2c5e, 1}, - {0x2c60, 0x2cf3, 1}, - {0x2cf9, 0x2d25, 1}, - {0x2d27, 0x2d2d, 6}, - {0x2d30, 0x2d67, 1}, - {0x2d6f, 0x2d70, 1}, - {0x2d7f, 0x2d96, 1}, - {0x2da0, 0x2da6, 1}, - {0x2da8, 0x2dae, 1}, - {0x2db0, 0x2db6, 1}, - {0x2db8, 0x2dbe, 1}, - {0x2dc0, 0x2dc6, 1}, - {0x2dc8, 0x2dce, 1}, - {0x2dd0, 0x2dd6, 1}, - {0x2dd8, 0x2dde, 1}, - {0x2de0, 0x2e42, 1}, - {0x2e80, 0x2e99, 1}, - {0x2e9b, 0x2ef3, 1}, - {0x2f00, 0x2fd5, 1}, - {0x2ff0, 0x2ffb, 1}, - {0x3000, 0x303f, 1}, - {0x3041, 0x3096, 1}, - {0x3099, 0x30ff, 1}, - {0x3105, 0x312d, 1}, - {0x3131, 0x318e, 1}, - {0x3190, 0x31ba, 1}, - {0x31c0, 0x31e3, 1}, - {0x31f0, 0x321e, 1}, - {0x3220, 0x32fe, 1}, - {0x3300, 0x4db5, 1}, - {0x4dc0, 0x9fd5, 1}, - {0xa000, 0xa48c, 1}, - {0xa490, 0xa4c6, 1}, - {0xa4d0, 0xa62b, 1}, - {0xa640, 0xa6f7, 1}, - {0xa700, 0xa7ad, 1}, - {0xa7b0, 0xa7b7, 1}, - {0xa7f7, 0xa82b, 1}, - {0xa830, 0xa839, 1}, - {0xa840, 0xa877, 1}, - {0xa880, 0xa8c4, 1}, - {0xa8ce, 0xa8d9, 1}, - {0xa8e0, 0xa8fd, 1}, - {0xa900, 0xa953, 1}, - {0xa95f, 0xa97c, 1}, - {0xa980, 0xa9cd, 1}, - {0xa9cf, 0xa9d9, 1}, - {0xa9de, 0xa9fe, 1}, - {0xaa00, 0xaa36, 1}, - {0xaa40, 0xaa4d, 1}, - {0xaa50, 0xaa59, 1}, - {0xaa5c, 0xaac2, 1}, - {0xaadb, 0xaaf6, 1}, - {0xab01, 0xab06, 1}, - {0xab09, 0xab0e, 1}, - {0xab11, 0xab16, 1}, - {0xab20, 0xab26, 1}, - {0xab28, 0xab2e, 1}, - {0xab30, 0xab65, 1}, - {0xab70, 0xabed, 1}, - {0xabf0, 0xabf9, 1}, - {0xac00, 0xd7a3, 1}, - {0xd7b0, 0xd7c6, 1}, - {0xd7cb, 0xd7fb, 1}, - {0xd800, 0xfa6d, 1}, - {0xfa70, 0xfad9, 1}, - {0xfb00, 0xfb06, 1}, - {0xfb13, 0xfb17, 1}, - {0xfb1d, 0xfb36, 1}, - {0xfb38, 0xfb3c, 1}, - {0xfb3e, 0xfb40, 2}, - {0xfb41, 0xfb43, 2}, - {0xfb44, 0xfb46, 2}, - {0xfb47, 0xfbc1, 1}, - {0xfbd3, 0xfd3f, 1}, - {0xfd50, 0xfd8f, 1}, - {0xfd92, 0xfdc7, 1}, - {0xfdf0, 0xfdfd, 1}, - {0xfe00, 0xfe19, 1}, - {0xfe20, 0xfe52, 1}, - {0xfe54, 0xfe66, 1}, - {0xfe68, 0xfe6b, 1}, - {0xfe70, 0xfe74, 1}, - {0xfe76, 0xfefc, 1}, - {0xfeff, 0xff01, 2}, - {0xff02, 0xffbe, 1}, - {0xffc2, 0xffc7, 1}, - {0xffca, 0xffcf, 1}, - {0xffd2, 0xffd7, 1}, - {0xffda, 0xffdc, 1}, - {0xffe0, 0xffe6, 1}, - {0xffe8, 0xffee, 1}, - {0xfff9, 0xfffd, 1}, - }, - R32: []unicode.Range32{ - {0x00010000, 0x0001000b, 1}, - {0x0001000d, 0x00010026, 1}, - {0x00010028, 0x0001003a, 1}, - {0x0001003c, 0x0001003d, 1}, - {0x0001003f, 0x0001004d, 1}, - {0x00010050, 0x0001005d, 1}, - {0x00010080, 0x000100fa, 1}, - {0x00010100, 0x00010102, 1}, - {0x00010107, 0x00010133, 1}, - {0x00010137, 0x0001018c, 1}, - {0x00010190, 0x0001019b, 1}, - {0x000101a0, 0x000101d0, 48}, - {0x000101d1, 0x000101fd, 1}, - {0x00010280, 0x0001029c, 1}, - {0x000102a0, 0x000102d0, 1}, - {0x000102e0, 0x000102fb, 1}, - {0x00010300, 0x00010323, 1}, - {0x00010330, 0x0001034a, 1}, - {0x00010350, 0x0001037a, 1}, - {0x00010380, 0x0001039d, 1}, - {0x0001039f, 0x000103c3, 1}, - {0x000103c8, 0x000103d5, 1}, - {0x00010400, 0x0001049d, 1}, - {0x000104a0, 0x000104a9, 1}, - {0x00010500, 0x00010527, 1}, - {0x00010530, 0x00010563, 1}, - {0x0001056f, 0x00010600, 145}, - {0x00010601, 0x00010736, 1}, - {0x00010740, 0x00010755, 1}, - {0x00010760, 0x00010767, 1}, - {0x00010800, 0x00010805, 1}, - {0x00010808, 0x0001080a, 2}, - {0x0001080b, 0x00010835, 1}, - {0x00010837, 0x00010838, 1}, - {0x0001083c, 0x0001083f, 3}, - {0x00010840, 0x00010855, 1}, - {0x00010857, 0x0001089e, 1}, - {0x000108a7, 0x000108af, 1}, - {0x000108e0, 0x000108f2, 1}, - {0x000108f4, 0x000108f5, 1}, - {0x000108fb, 0x0001091b, 1}, - {0x0001091f, 0x00010939, 1}, - {0x0001093f, 0x00010980, 65}, - {0x00010981, 0x000109b7, 1}, - {0x000109bc, 0x000109cf, 1}, - {0x000109d2, 0x00010a03, 1}, - {0x00010a05, 0x00010a06, 1}, - {0x00010a0c, 0x00010a13, 1}, - {0x00010a15, 0x00010a17, 1}, - {0x00010a19, 0x00010a33, 1}, - {0x00010a38, 0x00010a3a, 1}, - {0x00010a3f, 0x00010a47, 1}, - {0x00010a50, 0x00010a58, 1}, - {0x00010a60, 0x00010a9f, 1}, - {0x00010ac0, 0x00010ae6, 1}, - {0x00010aeb, 0x00010af6, 1}, - {0x00010b00, 0x00010b35, 1}, - {0x00010b39, 0x00010b55, 1}, - {0x00010b58, 0x00010b72, 1}, - {0x00010b78, 0x00010b91, 1}, - {0x00010b99, 0x00010b9c, 1}, - {0x00010ba9, 0x00010baf, 1}, - {0x00010c00, 0x00010c48, 1}, - {0x00010c80, 0x00010cb2, 1}, - {0x00010cc0, 0x00010cf2, 1}, - {0x00010cfa, 0x00010cff, 1}, - {0x00010e60, 0x00010e7e, 1}, - {0x00011000, 0x0001104d, 1}, - {0x00011052, 0x0001106f, 1}, - {0x0001107f, 0x000110c1, 1}, - {0x000110d0, 0x000110e8, 1}, - {0x000110f0, 0x000110f9, 1}, - {0x00011100, 0x00011134, 1}, - {0x00011136, 0x00011143, 1}, - {0x00011150, 0x00011176, 1}, - {0x00011180, 0x000111cd, 1}, - {0x000111d0, 0x000111df, 1}, - {0x000111e1, 0x000111f4, 1}, - {0x00011200, 0x00011211, 1}, - {0x00011213, 0x0001123d, 1}, - {0x00011280, 0x00011286, 1}, - {0x00011288, 0x0001128a, 2}, - {0x0001128b, 0x0001128d, 1}, - {0x0001128f, 0x0001129d, 1}, - {0x0001129f, 0x000112a9, 1}, - {0x000112b0, 0x000112ea, 1}, - {0x000112f0, 0x000112f9, 1}, - {0x00011300, 0x00011303, 1}, - {0x00011305, 0x0001130c, 1}, - {0x0001130f, 0x00011310, 1}, - {0x00011313, 0x00011328, 1}, - {0x0001132a, 0x00011330, 1}, - {0x00011332, 0x00011333, 1}, - {0x00011335, 0x00011339, 1}, - {0x0001133c, 0x00011344, 1}, - {0x00011347, 0x00011348, 1}, - {0x0001134b, 0x0001134d, 1}, - {0x00011350, 0x00011357, 7}, - {0x0001135d, 0x00011363, 1}, - {0x00011366, 0x0001136c, 1}, - {0x00011370, 0x00011374, 1}, - {0x00011480, 0x000114c7, 1}, - {0x000114d0, 0x000114d9, 1}, - {0x00011580, 0x000115b5, 1}, - {0x000115b8, 0x000115dd, 1}, - {0x00011600, 0x00011644, 1}, - {0x00011650, 0x00011659, 1}, - {0x00011680, 0x000116b7, 1}, - {0x000116c0, 0x000116c9, 1}, - {0x00011700, 0x00011719, 1}, - {0x0001171d, 0x0001172b, 1}, - {0x00011730, 0x0001173f, 1}, - {0x000118a0, 0x000118f2, 1}, - {0x000118ff, 0x00011ac0, 449}, - {0x00011ac1, 0x00011af8, 1}, - {0x00012000, 0x00012399, 1}, - {0x00012400, 0x0001246e, 1}, - {0x00012470, 0x00012474, 1}, - {0x00012480, 0x00012543, 1}, - {0x00013000, 0x0001342e, 1}, - {0x00014400, 0x00014646, 1}, - {0x00016800, 0x00016a38, 1}, - {0x00016a40, 0x00016a5e, 1}, - {0x00016a60, 0x00016a69, 1}, - {0x00016a6e, 0x00016a6f, 1}, - {0x00016ad0, 0x00016aed, 1}, - {0x00016af0, 0x00016af5, 1}, - {0x00016b00, 0x00016b45, 1}, - {0x00016b50, 0x00016b59, 1}, - {0x00016b5b, 0x00016b61, 1}, - {0x00016b63, 0x00016b77, 1}, - {0x00016b7d, 0x00016b8f, 1}, - {0x00016f00, 0x00016f44, 1}, - {0x00016f50, 0x00016f7e, 1}, - {0x00016f8f, 0x00016f9f, 1}, - {0x0001b000, 0x0001b001, 1}, - {0x0001bc00, 0x0001bc6a, 1}, - {0x0001bc70, 0x0001bc7c, 1}, - {0x0001bc80, 0x0001bc88, 1}, - {0x0001bc90, 0x0001bc99, 1}, - {0x0001bc9c, 0x0001bca3, 1}, - {0x0001d000, 0x0001d0f5, 1}, - {0x0001d100, 0x0001d126, 1}, - {0x0001d129, 0x0001d1e8, 1}, - {0x0001d200, 0x0001d245, 1}, - {0x0001d300, 0x0001d356, 1}, - {0x0001d360, 0x0001d371, 1}, - {0x0001d400, 0x0001d454, 1}, - {0x0001d456, 0x0001d49c, 1}, - {0x0001d49e, 0x0001d49f, 1}, - {0x0001d4a2, 0x0001d4a5, 3}, - {0x0001d4a6, 0x0001d4a9, 3}, - {0x0001d4aa, 0x0001d4ac, 1}, - {0x0001d4ae, 0x0001d4b9, 1}, - {0x0001d4bb, 0x0001d4bd, 2}, - {0x0001d4be, 0x0001d4c3, 1}, - {0x0001d4c5, 0x0001d505, 1}, - {0x0001d507, 0x0001d50a, 1}, - {0x0001d50d, 0x0001d514, 1}, - {0x0001d516, 0x0001d51c, 1}, - {0x0001d51e, 0x0001d539, 1}, - {0x0001d53b, 0x0001d53e, 1}, - {0x0001d540, 0x0001d544, 1}, - {0x0001d546, 0x0001d54a, 4}, - {0x0001d54b, 0x0001d550, 1}, - {0x0001d552, 0x0001d6a5, 1}, - {0x0001d6a8, 0x0001d7cb, 1}, - {0x0001d7ce, 0x0001da8b, 1}, - {0x0001da9b, 0x0001da9f, 1}, - {0x0001daa1, 0x0001daaf, 1}, - {0x0001e800, 0x0001e8c4, 1}, - {0x0001e8c7, 0x0001e8d6, 1}, - {0x0001ee00, 0x0001ee03, 1}, - {0x0001ee05, 0x0001ee1f, 1}, - {0x0001ee21, 0x0001ee22, 1}, - {0x0001ee24, 0x0001ee27, 3}, - {0x0001ee29, 0x0001ee32, 1}, - {0x0001ee34, 0x0001ee37, 1}, - {0x0001ee39, 0x0001ee3b, 2}, - {0x0001ee42, 0x0001ee47, 5}, - {0x0001ee49, 0x0001ee4d, 2}, - {0x0001ee4e, 0x0001ee4f, 1}, - {0x0001ee51, 0x0001ee52, 1}, - {0x0001ee54, 0x0001ee57, 3}, - {0x0001ee59, 0x0001ee61, 2}, - {0x0001ee62, 0x0001ee64, 2}, - {0x0001ee67, 0x0001ee6a, 1}, - {0x0001ee6c, 0x0001ee72, 1}, - {0x0001ee74, 0x0001ee77, 1}, - {0x0001ee79, 0x0001ee7c, 1}, - {0x0001ee7e, 0x0001ee80, 2}, - {0x0001ee81, 0x0001ee89, 1}, - {0x0001ee8b, 0x0001ee9b, 1}, - {0x0001eea1, 0x0001eea3, 1}, - {0x0001eea5, 0x0001eea9, 1}, - {0x0001eeab, 0x0001eebb, 1}, - {0x0001eef0, 0x0001eef1, 1}, - {0x0001f000, 0x0001f02b, 1}, - {0x0001f030, 0x0001f093, 1}, - {0x0001f0a0, 0x0001f0ae, 1}, - {0x0001f0b1, 0x0001f0bf, 1}, - {0x0001f0c1, 0x0001f0cf, 1}, - {0x0001f0d1, 0x0001f0f5, 1}, - {0x0001f100, 0x0001f10c, 1}, - {0x0001f110, 0x0001f12e, 1}, - {0x0001f130, 0x0001f16b, 1}, - {0x0001f170, 0x0001f19a, 1}, - {0x0001f1e6, 0x0001f202, 1}, - {0x0001f210, 0x0001f23a, 1}, - {0x0001f240, 0x0001f248, 1}, - {0x0001f250, 0x0001f251, 1}, - {0x0001f300, 0x0001f579, 1}, - {0x0001f57b, 0x0001f5a3, 1}, - {0x0001f5a5, 0x0001f6d0, 1}, - {0x0001f6e0, 0x0001f6ec, 1}, - {0x0001f6f0, 0x0001f6f3, 1}, - {0x0001f700, 0x0001f773, 1}, - {0x0001f780, 0x0001f7d4, 1}, - {0x0001f800, 0x0001f80b, 1}, - {0x0001f810, 0x0001f847, 1}, - {0x0001f850, 0x0001f859, 1}, - {0x0001f860, 0x0001f887, 1}, - {0x0001f890, 0x0001f8ad, 1}, - {0x0001f910, 0x0001f918, 1}, - {0x0001f980, 0x0001f984, 1}, - {0x0001f9c0, 0x00020000, 1600}, - {0x00020001, 0x0002a6d6, 1}, - {0x0002a700, 0x0002b734, 1}, - {0x0002b740, 0x0002b81d, 1}, - {0x0002b820, 0x0002cea1, 1}, - {0x0002f800, 0x0002fa1d, 1}, - {0x000e0001, 0x000e0020, 31}, - {0x000e0021, 0x000e007f, 1}, - {0x000e0100, 0x000e01ef, 1}, - {0x000f0000, 0x000ffffd, 1}, - {0x00100000, 0x0010fffd, 1}, - }, - LatinOffset: 0, -} - -// size 5348 bytes (5 KiB) -var assigned9_0_0 = &unicode.RangeTable{ - R16: []unicode.Range16{ - {0x0000, 0x0377, 1}, - {0x037a, 0x037f, 1}, - {0x0384, 0x038a, 1}, - {0x038c, 0x038e, 2}, - {0x038f, 0x03a1, 1}, - {0x03a3, 0x052f, 1}, - {0x0531, 0x0556, 1}, - {0x0559, 0x055f, 1}, - {0x0561, 0x0587, 1}, - {0x0589, 0x058a, 1}, - {0x058d, 0x058f, 1}, - {0x0591, 0x05c7, 1}, - {0x05d0, 0x05ea, 1}, - {0x05f0, 0x05f4, 1}, - {0x0600, 0x061c, 1}, - {0x061e, 0x070d, 1}, - {0x070f, 0x074a, 1}, - {0x074d, 0x07b1, 1}, - {0x07c0, 0x07fa, 1}, - {0x0800, 0x082d, 1}, - {0x0830, 0x083e, 1}, - {0x0840, 0x085b, 1}, - {0x085e, 0x08a0, 66}, - {0x08a1, 0x08b4, 1}, - {0x08b6, 0x08bd, 1}, - {0x08d4, 0x0983, 1}, - {0x0985, 0x098c, 1}, - {0x098f, 0x0990, 1}, - {0x0993, 0x09a8, 1}, - {0x09aa, 0x09b0, 1}, - {0x09b2, 0x09b6, 4}, - {0x09b7, 0x09b9, 1}, - {0x09bc, 0x09c4, 1}, - {0x09c7, 0x09c8, 1}, - {0x09cb, 0x09ce, 1}, - {0x09d7, 0x09dc, 5}, - {0x09dd, 0x09df, 2}, - {0x09e0, 0x09e3, 1}, - {0x09e6, 0x09fb, 1}, - {0x0a01, 0x0a03, 1}, - {0x0a05, 0x0a0a, 1}, - {0x0a0f, 0x0a10, 1}, - {0x0a13, 0x0a28, 1}, - {0x0a2a, 0x0a30, 1}, - {0x0a32, 0x0a33, 1}, - {0x0a35, 0x0a36, 1}, - {0x0a38, 0x0a39, 1}, - {0x0a3c, 0x0a3e, 2}, - {0x0a3f, 0x0a42, 1}, - {0x0a47, 0x0a48, 1}, - {0x0a4b, 0x0a4d, 1}, - {0x0a51, 0x0a59, 8}, - {0x0a5a, 0x0a5c, 1}, - {0x0a5e, 0x0a66, 8}, - {0x0a67, 0x0a75, 1}, - {0x0a81, 0x0a83, 1}, - {0x0a85, 0x0a8d, 1}, - {0x0a8f, 0x0a91, 1}, - {0x0a93, 0x0aa8, 1}, - {0x0aaa, 0x0ab0, 1}, - {0x0ab2, 0x0ab3, 1}, - {0x0ab5, 0x0ab9, 1}, - {0x0abc, 0x0ac5, 1}, - {0x0ac7, 0x0ac9, 1}, - {0x0acb, 0x0acd, 1}, - {0x0ad0, 0x0ae0, 16}, - {0x0ae1, 0x0ae3, 1}, - {0x0ae6, 0x0af1, 1}, - {0x0af9, 0x0b01, 8}, - {0x0b02, 0x0b03, 1}, - {0x0b05, 0x0b0c, 1}, - {0x0b0f, 0x0b10, 1}, - {0x0b13, 0x0b28, 1}, - {0x0b2a, 0x0b30, 1}, - {0x0b32, 0x0b33, 1}, - {0x0b35, 0x0b39, 1}, - {0x0b3c, 0x0b44, 1}, - {0x0b47, 0x0b48, 1}, - {0x0b4b, 0x0b4d, 1}, - {0x0b56, 0x0b57, 1}, - {0x0b5c, 0x0b5d, 1}, - {0x0b5f, 0x0b63, 1}, - {0x0b66, 0x0b77, 1}, - {0x0b82, 0x0b83, 1}, - {0x0b85, 0x0b8a, 1}, - {0x0b8e, 0x0b90, 1}, - {0x0b92, 0x0b95, 1}, - {0x0b99, 0x0b9a, 1}, - {0x0b9c, 0x0b9e, 2}, - {0x0b9f, 0x0ba3, 4}, - {0x0ba4, 0x0ba8, 4}, - {0x0ba9, 0x0baa, 1}, - {0x0bae, 0x0bb9, 1}, - {0x0bbe, 0x0bc2, 1}, - {0x0bc6, 0x0bc8, 1}, - {0x0bca, 0x0bcd, 1}, - {0x0bd0, 0x0bd7, 7}, - {0x0be6, 0x0bfa, 1}, - {0x0c00, 0x0c03, 1}, - {0x0c05, 0x0c0c, 1}, - {0x0c0e, 0x0c10, 1}, - {0x0c12, 0x0c28, 1}, - {0x0c2a, 0x0c39, 1}, - {0x0c3d, 0x0c44, 1}, - {0x0c46, 0x0c48, 1}, - {0x0c4a, 0x0c4d, 1}, - {0x0c55, 0x0c56, 1}, - {0x0c58, 0x0c5a, 1}, - {0x0c60, 0x0c63, 1}, - {0x0c66, 0x0c6f, 1}, - {0x0c78, 0x0c83, 1}, - {0x0c85, 0x0c8c, 1}, - {0x0c8e, 0x0c90, 1}, - {0x0c92, 0x0ca8, 1}, - {0x0caa, 0x0cb3, 1}, - {0x0cb5, 0x0cb9, 1}, - {0x0cbc, 0x0cc4, 1}, - {0x0cc6, 0x0cc8, 1}, - {0x0cca, 0x0ccd, 1}, - {0x0cd5, 0x0cd6, 1}, - {0x0cde, 0x0ce0, 2}, - {0x0ce1, 0x0ce3, 1}, - {0x0ce6, 0x0cef, 1}, - {0x0cf1, 0x0cf2, 1}, - {0x0d01, 0x0d03, 1}, - {0x0d05, 0x0d0c, 1}, - {0x0d0e, 0x0d10, 1}, - {0x0d12, 0x0d3a, 1}, - {0x0d3d, 0x0d44, 1}, - {0x0d46, 0x0d48, 1}, - {0x0d4a, 0x0d4f, 1}, - {0x0d54, 0x0d63, 1}, - {0x0d66, 0x0d7f, 1}, - {0x0d82, 0x0d83, 1}, - {0x0d85, 0x0d96, 1}, - {0x0d9a, 0x0db1, 1}, - {0x0db3, 0x0dbb, 1}, - {0x0dbd, 0x0dc0, 3}, - {0x0dc1, 0x0dc6, 1}, - {0x0dca, 0x0dcf, 5}, - {0x0dd0, 0x0dd4, 1}, - {0x0dd6, 0x0dd8, 2}, - {0x0dd9, 0x0ddf, 1}, - {0x0de6, 0x0def, 1}, - {0x0df2, 0x0df4, 1}, - {0x0e01, 0x0e3a, 1}, - {0x0e3f, 0x0e5b, 1}, - {0x0e81, 0x0e82, 1}, - {0x0e84, 0x0e87, 3}, - {0x0e88, 0x0e8a, 2}, - {0x0e8d, 0x0e94, 7}, - {0x0e95, 0x0e97, 1}, - {0x0e99, 0x0e9f, 1}, - {0x0ea1, 0x0ea3, 1}, - {0x0ea5, 0x0ea7, 2}, - {0x0eaa, 0x0eab, 1}, - {0x0ead, 0x0eb9, 1}, - {0x0ebb, 0x0ebd, 1}, - {0x0ec0, 0x0ec4, 1}, - {0x0ec6, 0x0ec8, 2}, - {0x0ec9, 0x0ecd, 1}, - {0x0ed0, 0x0ed9, 1}, - {0x0edc, 0x0edf, 1}, - {0x0f00, 0x0f47, 1}, - {0x0f49, 0x0f6c, 1}, - {0x0f71, 0x0f97, 1}, - {0x0f99, 0x0fbc, 1}, - {0x0fbe, 0x0fcc, 1}, - {0x0fce, 0x0fda, 1}, - {0x1000, 0x10c5, 1}, - {0x10c7, 0x10cd, 6}, - {0x10d0, 0x1248, 1}, - {0x124a, 0x124d, 1}, - {0x1250, 0x1256, 1}, - {0x1258, 0x125a, 2}, - {0x125b, 0x125d, 1}, - {0x1260, 0x1288, 1}, - {0x128a, 0x128d, 1}, - {0x1290, 0x12b0, 1}, - {0x12b2, 0x12b5, 1}, - {0x12b8, 0x12be, 1}, - {0x12c0, 0x12c2, 2}, - {0x12c3, 0x12c5, 1}, - {0x12c8, 0x12d6, 1}, - {0x12d8, 0x1310, 1}, - {0x1312, 0x1315, 1}, - {0x1318, 0x135a, 1}, - {0x135d, 0x137c, 1}, - {0x1380, 0x1399, 1}, - {0x13a0, 0x13f5, 1}, - {0x13f8, 0x13fd, 1}, - {0x1400, 0x169c, 1}, - {0x16a0, 0x16f8, 1}, - {0x1700, 0x170c, 1}, - {0x170e, 0x1714, 1}, - {0x1720, 0x1736, 1}, - {0x1740, 0x1753, 1}, - {0x1760, 0x176c, 1}, - {0x176e, 0x1770, 1}, - {0x1772, 0x1773, 1}, - {0x1780, 0x17dd, 1}, - {0x17e0, 0x17e9, 1}, - {0x17f0, 0x17f9, 1}, - {0x1800, 0x180e, 1}, - {0x1810, 0x1819, 1}, - {0x1820, 0x1877, 1}, - {0x1880, 0x18aa, 1}, - {0x18b0, 0x18f5, 1}, - {0x1900, 0x191e, 1}, - {0x1920, 0x192b, 1}, - {0x1930, 0x193b, 1}, - {0x1940, 0x1944, 4}, - {0x1945, 0x196d, 1}, - {0x1970, 0x1974, 1}, - {0x1980, 0x19ab, 1}, - {0x19b0, 0x19c9, 1}, - {0x19d0, 0x19da, 1}, - {0x19de, 0x1a1b, 1}, - {0x1a1e, 0x1a5e, 1}, - {0x1a60, 0x1a7c, 1}, - {0x1a7f, 0x1a89, 1}, - {0x1a90, 0x1a99, 1}, - {0x1aa0, 0x1aad, 1}, - {0x1ab0, 0x1abe, 1}, - {0x1b00, 0x1b4b, 1}, - {0x1b50, 0x1b7c, 1}, - {0x1b80, 0x1bf3, 1}, - {0x1bfc, 0x1c37, 1}, - {0x1c3b, 0x1c49, 1}, - {0x1c4d, 0x1c88, 1}, - {0x1cc0, 0x1cc7, 1}, - {0x1cd0, 0x1cf6, 1}, - {0x1cf8, 0x1cf9, 1}, - {0x1d00, 0x1df5, 1}, - {0x1dfb, 0x1f15, 1}, - {0x1f18, 0x1f1d, 1}, - {0x1f20, 0x1f45, 1}, - {0x1f48, 0x1f4d, 1}, - {0x1f50, 0x1f57, 1}, - {0x1f59, 0x1f5f, 2}, - {0x1f60, 0x1f7d, 1}, - {0x1f80, 0x1fb4, 1}, - {0x1fb6, 0x1fc4, 1}, - {0x1fc6, 0x1fd3, 1}, - {0x1fd6, 0x1fdb, 1}, - {0x1fdd, 0x1fef, 1}, - {0x1ff2, 0x1ff4, 1}, - {0x1ff6, 0x1ffe, 1}, - {0x2000, 0x2064, 1}, - {0x2066, 0x2071, 1}, - {0x2074, 0x208e, 1}, - {0x2090, 0x209c, 1}, - {0x20a0, 0x20be, 1}, - {0x20d0, 0x20f0, 1}, - {0x2100, 0x218b, 1}, - {0x2190, 0x23fe, 1}, - {0x2400, 0x2426, 1}, - {0x2440, 0x244a, 1}, - {0x2460, 0x2b73, 1}, - {0x2b76, 0x2b95, 1}, - {0x2b98, 0x2bb9, 1}, - {0x2bbd, 0x2bc8, 1}, - {0x2bca, 0x2bd1, 1}, - {0x2bec, 0x2bef, 1}, - {0x2c00, 0x2c2e, 1}, - {0x2c30, 0x2c5e, 1}, - {0x2c60, 0x2cf3, 1}, - {0x2cf9, 0x2d25, 1}, - {0x2d27, 0x2d2d, 6}, - {0x2d30, 0x2d67, 1}, - {0x2d6f, 0x2d70, 1}, - {0x2d7f, 0x2d96, 1}, - {0x2da0, 0x2da6, 1}, - {0x2da8, 0x2dae, 1}, - {0x2db0, 0x2db6, 1}, - {0x2db8, 0x2dbe, 1}, - {0x2dc0, 0x2dc6, 1}, - {0x2dc8, 0x2dce, 1}, - {0x2dd0, 0x2dd6, 1}, - {0x2dd8, 0x2dde, 1}, - {0x2de0, 0x2e44, 1}, - {0x2e80, 0x2e99, 1}, - {0x2e9b, 0x2ef3, 1}, - {0x2f00, 0x2fd5, 1}, - {0x2ff0, 0x2ffb, 1}, - {0x3000, 0x303f, 1}, - {0x3041, 0x3096, 1}, - {0x3099, 0x30ff, 1}, - {0x3105, 0x312d, 1}, - {0x3131, 0x318e, 1}, - {0x3190, 0x31ba, 1}, - {0x31c0, 0x31e3, 1}, - {0x31f0, 0x321e, 1}, - {0x3220, 0x32fe, 1}, - {0x3300, 0x4db5, 1}, - {0x4dc0, 0x9fd5, 1}, - {0xa000, 0xa48c, 1}, - {0xa490, 0xa4c6, 1}, - {0xa4d0, 0xa62b, 1}, - {0xa640, 0xa6f7, 1}, - {0xa700, 0xa7ae, 1}, - {0xa7b0, 0xa7b7, 1}, - {0xa7f7, 0xa82b, 1}, - {0xa830, 0xa839, 1}, - {0xa840, 0xa877, 1}, - {0xa880, 0xa8c5, 1}, - {0xa8ce, 0xa8d9, 1}, - {0xa8e0, 0xa8fd, 1}, - {0xa900, 0xa953, 1}, - {0xa95f, 0xa97c, 1}, - {0xa980, 0xa9cd, 1}, - {0xa9cf, 0xa9d9, 1}, - {0xa9de, 0xa9fe, 1}, - {0xaa00, 0xaa36, 1}, - {0xaa40, 0xaa4d, 1}, - {0xaa50, 0xaa59, 1}, - {0xaa5c, 0xaac2, 1}, - {0xaadb, 0xaaf6, 1}, - {0xab01, 0xab06, 1}, - {0xab09, 0xab0e, 1}, - {0xab11, 0xab16, 1}, - {0xab20, 0xab26, 1}, - {0xab28, 0xab2e, 1}, - {0xab30, 0xab65, 1}, - {0xab70, 0xabed, 1}, - {0xabf0, 0xabf9, 1}, - {0xac00, 0xd7a3, 1}, - {0xd7b0, 0xd7c6, 1}, - {0xd7cb, 0xd7fb, 1}, - {0xd800, 0xfa6d, 1}, - {0xfa70, 0xfad9, 1}, - {0xfb00, 0xfb06, 1}, - {0xfb13, 0xfb17, 1}, - {0xfb1d, 0xfb36, 1}, - {0xfb38, 0xfb3c, 1}, - {0xfb3e, 0xfb40, 2}, - {0xfb41, 0xfb43, 2}, - {0xfb44, 0xfb46, 2}, - {0xfb47, 0xfbc1, 1}, - {0xfbd3, 0xfd3f, 1}, - {0xfd50, 0xfd8f, 1}, - {0xfd92, 0xfdc7, 1}, - {0xfdf0, 0xfdfd, 1}, - {0xfe00, 0xfe19, 1}, - {0xfe20, 0xfe52, 1}, - {0xfe54, 0xfe66, 1}, - {0xfe68, 0xfe6b, 1}, - {0xfe70, 0xfe74, 1}, - {0xfe76, 0xfefc, 1}, - {0xfeff, 0xff01, 2}, - {0xff02, 0xffbe, 1}, - {0xffc2, 0xffc7, 1}, - {0xffca, 0xffcf, 1}, - {0xffd2, 0xffd7, 1}, - {0xffda, 0xffdc, 1}, - {0xffe0, 0xffe6, 1}, - {0xffe8, 0xffee, 1}, - {0xfff9, 0xfffd, 1}, - }, - R32: []unicode.Range32{ - {0x00010000, 0x0001000b, 1}, - {0x0001000d, 0x00010026, 1}, - {0x00010028, 0x0001003a, 1}, - {0x0001003c, 0x0001003d, 1}, - {0x0001003f, 0x0001004d, 1}, - {0x00010050, 0x0001005d, 1}, - {0x00010080, 0x000100fa, 1}, - {0x00010100, 0x00010102, 1}, - {0x00010107, 0x00010133, 1}, - {0x00010137, 0x0001018e, 1}, - {0x00010190, 0x0001019b, 1}, - {0x000101a0, 0x000101d0, 48}, - {0x000101d1, 0x000101fd, 1}, - {0x00010280, 0x0001029c, 1}, - {0x000102a0, 0x000102d0, 1}, - {0x000102e0, 0x000102fb, 1}, - {0x00010300, 0x00010323, 1}, - {0x00010330, 0x0001034a, 1}, - {0x00010350, 0x0001037a, 1}, - {0x00010380, 0x0001039d, 1}, - {0x0001039f, 0x000103c3, 1}, - {0x000103c8, 0x000103d5, 1}, - {0x00010400, 0x0001049d, 1}, - {0x000104a0, 0x000104a9, 1}, - {0x000104b0, 0x000104d3, 1}, - {0x000104d8, 0x000104fb, 1}, - {0x00010500, 0x00010527, 1}, - {0x00010530, 0x00010563, 1}, - {0x0001056f, 0x00010600, 145}, - {0x00010601, 0x00010736, 1}, - {0x00010740, 0x00010755, 1}, - {0x00010760, 0x00010767, 1}, - {0x00010800, 0x00010805, 1}, - {0x00010808, 0x0001080a, 2}, - {0x0001080b, 0x00010835, 1}, - {0x00010837, 0x00010838, 1}, - {0x0001083c, 0x0001083f, 3}, - {0x00010840, 0x00010855, 1}, - {0x00010857, 0x0001089e, 1}, - {0x000108a7, 0x000108af, 1}, - {0x000108e0, 0x000108f2, 1}, - {0x000108f4, 0x000108f5, 1}, - {0x000108fb, 0x0001091b, 1}, - {0x0001091f, 0x00010939, 1}, - {0x0001093f, 0x00010980, 65}, - {0x00010981, 0x000109b7, 1}, - {0x000109bc, 0x000109cf, 1}, - {0x000109d2, 0x00010a03, 1}, - {0x00010a05, 0x00010a06, 1}, - {0x00010a0c, 0x00010a13, 1}, - {0x00010a15, 0x00010a17, 1}, - {0x00010a19, 0x00010a33, 1}, - {0x00010a38, 0x00010a3a, 1}, - {0x00010a3f, 0x00010a47, 1}, - {0x00010a50, 0x00010a58, 1}, - {0x00010a60, 0x00010a9f, 1}, - {0x00010ac0, 0x00010ae6, 1}, - {0x00010aeb, 0x00010af6, 1}, - {0x00010b00, 0x00010b35, 1}, - {0x00010b39, 0x00010b55, 1}, - {0x00010b58, 0x00010b72, 1}, - {0x00010b78, 0x00010b91, 1}, - {0x00010b99, 0x00010b9c, 1}, - {0x00010ba9, 0x00010baf, 1}, - {0x00010c00, 0x00010c48, 1}, - {0x00010c80, 0x00010cb2, 1}, - {0x00010cc0, 0x00010cf2, 1}, - {0x00010cfa, 0x00010cff, 1}, - {0x00010e60, 0x00010e7e, 1}, - {0x00011000, 0x0001104d, 1}, - {0x00011052, 0x0001106f, 1}, - {0x0001107f, 0x000110c1, 1}, - {0x000110d0, 0x000110e8, 1}, - {0x000110f0, 0x000110f9, 1}, - {0x00011100, 0x00011134, 1}, - {0x00011136, 0x00011143, 1}, - {0x00011150, 0x00011176, 1}, - {0x00011180, 0x000111cd, 1}, - {0x000111d0, 0x000111df, 1}, - {0x000111e1, 0x000111f4, 1}, - {0x00011200, 0x00011211, 1}, - {0x00011213, 0x0001123e, 1}, - {0x00011280, 0x00011286, 1}, - {0x00011288, 0x0001128a, 2}, - {0x0001128b, 0x0001128d, 1}, - {0x0001128f, 0x0001129d, 1}, - {0x0001129f, 0x000112a9, 1}, - {0x000112b0, 0x000112ea, 1}, - {0x000112f0, 0x000112f9, 1}, - {0x00011300, 0x00011303, 1}, - {0x00011305, 0x0001130c, 1}, - {0x0001130f, 0x00011310, 1}, - {0x00011313, 0x00011328, 1}, - {0x0001132a, 0x00011330, 1}, - {0x00011332, 0x00011333, 1}, - {0x00011335, 0x00011339, 1}, - {0x0001133c, 0x00011344, 1}, - {0x00011347, 0x00011348, 1}, - {0x0001134b, 0x0001134d, 1}, - {0x00011350, 0x00011357, 7}, - {0x0001135d, 0x00011363, 1}, - {0x00011366, 0x0001136c, 1}, - {0x00011370, 0x00011374, 1}, - {0x00011400, 0x00011459, 1}, - {0x0001145b, 0x0001145d, 2}, - {0x00011480, 0x000114c7, 1}, - {0x000114d0, 0x000114d9, 1}, - {0x00011580, 0x000115b5, 1}, - {0x000115b8, 0x000115dd, 1}, - {0x00011600, 0x00011644, 1}, - {0x00011650, 0x00011659, 1}, - {0x00011660, 0x0001166c, 1}, - {0x00011680, 0x000116b7, 1}, - {0x000116c0, 0x000116c9, 1}, - {0x00011700, 0x00011719, 1}, - {0x0001171d, 0x0001172b, 1}, - {0x00011730, 0x0001173f, 1}, - {0x000118a0, 0x000118f2, 1}, - {0x000118ff, 0x00011ac0, 449}, - {0x00011ac1, 0x00011af8, 1}, - {0x00011c00, 0x00011c08, 1}, - {0x00011c0a, 0x00011c36, 1}, - {0x00011c38, 0x00011c45, 1}, - {0x00011c50, 0x00011c6c, 1}, - {0x00011c70, 0x00011c8f, 1}, - {0x00011c92, 0x00011ca7, 1}, - {0x00011ca9, 0x00011cb6, 1}, - {0x00012000, 0x00012399, 1}, - {0x00012400, 0x0001246e, 1}, - {0x00012470, 0x00012474, 1}, - {0x00012480, 0x00012543, 1}, - {0x00013000, 0x0001342e, 1}, - {0x00014400, 0x00014646, 1}, - {0x00016800, 0x00016a38, 1}, - {0x00016a40, 0x00016a5e, 1}, - {0x00016a60, 0x00016a69, 1}, - {0x00016a6e, 0x00016a6f, 1}, - {0x00016ad0, 0x00016aed, 1}, - {0x00016af0, 0x00016af5, 1}, - {0x00016b00, 0x00016b45, 1}, - {0x00016b50, 0x00016b59, 1}, - {0x00016b5b, 0x00016b61, 1}, - {0x00016b63, 0x00016b77, 1}, - {0x00016b7d, 0x00016b8f, 1}, - {0x00016f00, 0x00016f44, 1}, - {0x00016f50, 0x00016f7e, 1}, - {0x00016f8f, 0x00016f9f, 1}, - {0x00016fe0, 0x00017000, 32}, - {0x00017001, 0x000187ec, 1}, - {0x00018800, 0x00018af2, 1}, - {0x0001b000, 0x0001b001, 1}, - {0x0001bc00, 0x0001bc6a, 1}, - {0x0001bc70, 0x0001bc7c, 1}, - {0x0001bc80, 0x0001bc88, 1}, - {0x0001bc90, 0x0001bc99, 1}, - {0x0001bc9c, 0x0001bca3, 1}, - {0x0001d000, 0x0001d0f5, 1}, - {0x0001d100, 0x0001d126, 1}, - {0x0001d129, 0x0001d1e8, 1}, - {0x0001d200, 0x0001d245, 1}, - {0x0001d300, 0x0001d356, 1}, - {0x0001d360, 0x0001d371, 1}, - {0x0001d400, 0x0001d454, 1}, - {0x0001d456, 0x0001d49c, 1}, - {0x0001d49e, 0x0001d49f, 1}, - {0x0001d4a2, 0x0001d4a5, 3}, - {0x0001d4a6, 0x0001d4a9, 3}, - {0x0001d4aa, 0x0001d4ac, 1}, - {0x0001d4ae, 0x0001d4b9, 1}, - {0x0001d4bb, 0x0001d4bd, 2}, - {0x0001d4be, 0x0001d4c3, 1}, - {0x0001d4c5, 0x0001d505, 1}, - {0x0001d507, 0x0001d50a, 1}, - {0x0001d50d, 0x0001d514, 1}, - {0x0001d516, 0x0001d51c, 1}, - {0x0001d51e, 0x0001d539, 1}, - {0x0001d53b, 0x0001d53e, 1}, - {0x0001d540, 0x0001d544, 1}, - {0x0001d546, 0x0001d54a, 4}, - {0x0001d54b, 0x0001d550, 1}, - {0x0001d552, 0x0001d6a5, 1}, - {0x0001d6a8, 0x0001d7cb, 1}, - {0x0001d7ce, 0x0001da8b, 1}, - {0x0001da9b, 0x0001da9f, 1}, - {0x0001daa1, 0x0001daaf, 1}, - {0x0001e000, 0x0001e006, 1}, - {0x0001e008, 0x0001e018, 1}, - {0x0001e01b, 0x0001e021, 1}, - {0x0001e023, 0x0001e024, 1}, - {0x0001e026, 0x0001e02a, 1}, - {0x0001e800, 0x0001e8c4, 1}, - {0x0001e8c7, 0x0001e8d6, 1}, - {0x0001e900, 0x0001e94a, 1}, - {0x0001e950, 0x0001e959, 1}, - {0x0001e95e, 0x0001e95f, 1}, - {0x0001ee00, 0x0001ee03, 1}, - {0x0001ee05, 0x0001ee1f, 1}, - {0x0001ee21, 0x0001ee22, 1}, - {0x0001ee24, 0x0001ee27, 3}, - {0x0001ee29, 0x0001ee32, 1}, - {0x0001ee34, 0x0001ee37, 1}, - {0x0001ee39, 0x0001ee3b, 2}, - {0x0001ee42, 0x0001ee47, 5}, - {0x0001ee49, 0x0001ee4d, 2}, - {0x0001ee4e, 0x0001ee4f, 1}, - {0x0001ee51, 0x0001ee52, 1}, - {0x0001ee54, 0x0001ee57, 3}, - {0x0001ee59, 0x0001ee61, 2}, - {0x0001ee62, 0x0001ee64, 2}, - {0x0001ee67, 0x0001ee6a, 1}, - {0x0001ee6c, 0x0001ee72, 1}, - {0x0001ee74, 0x0001ee77, 1}, - {0x0001ee79, 0x0001ee7c, 1}, - {0x0001ee7e, 0x0001ee80, 2}, - {0x0001ee81, 0x0001ee89, 1}, - {0x0001ee8b, 0x0001ee9b, 1}, - {0x0001eea1, 0x0001eea3, 1}, - {0x0001eea5, 0x0001eea9, 1}, - {0x0001eeab, 0x0001eebb, 1}, - {0x0001eef0, 0x0001eef1, 1}, - {0x0001f000, 0x0001f02b, 1}, - {0x0001f030, 0x0001f093, 1}, - {0x0001f0a0, 0x0001f0ae, 1}, - {0x0001f0b1, 0x0001f0bf, 1}, - {0x0001f0c1, 0x0001f0cf, 1}, - {0x0001f0d1, 0x0001f0f5, 1}, - {0x0001f100, 0x0001f10c, 1}, - {0x0001f110, 0x0001f12e, 1}, - {0x0001f130, 0x0001f16b, 1}, - {0x0001f170, 0x0001f1ac, 1}, - {0x0001f1e6, 0x0001f202, 1}, - {0x0001f210, 0x0001f23b, 1}, - {0x0001f240, 0x0001f248, 1}, - {0x0001f250, 0x0001f251, 1}, - {0x0001f300, 0x0001f6d2, 1}, - {0x0001f6e0, 0x0001f6ec, 1}, - {0x0001f6f0, 0x0001f6f6, 1}, - {0x0001f700, 0x0001f773, 1}, - {0x0001f780, 0x0001f7d4, 1}, - {0x0001f800, 0x0001f80b, 1}, - {0x0001f810, 0x0001f847, 1}, - {0x0001f850, 0x0001f859, 1}, - {0x0001f860, 0x0001f887, 1}, - {0x0001f890, 0x0001f8ad, 1}, - {0x0001f910, 0x0001f91e, 1}, - {0x0001f920, 0x0001f927, 1}, - {0x0001f930, 0x0001f933, 3}, - {0x0001f934, 0x0001f93e, 1}, - {0x0001f940, 0x0001f94b, 1}, - {0x0001f950, 0x0001f95e, 1}, - {0x0001f980, 0x0001f991, 1}, - {0x0001f9c0, 0x00020000, 1600}, - {0x00020001, 0x0002a6d6, 1}, - {0x0002a700, 0x0002b734, 1}, - {0x0002b740, 0x0002b81d, 1}, - {0x0002b820, 0x0002cea1, 1}, - {0x0002f800, 0x0002fa1d, 1}, - {0x000e0001, 0x000e0020, 31}, - {0x000e0021, 0x000e007f, 1}, - {0x000e0100, 0x000e01ef, 1}, - {0x000f0000, 0x000ffffd, 1}, - {0x00100000, 0x0010fffd, 1}, - }, - LatinOffset: 0, -} - -// Total size 44206 bytes (43 KiB) diff --git a/vendor/golang.org/x/text/unicode/rangetable/tables10.0.0.go b/vendor/golang.org/x/text/unicode/rangetable/tables10.0.0.go new file mode 100644 index 0000000..f15a873 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/rangetable/tables10.0.0.go @@ -0,0 +1,6378 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// +build go1.10 + +package rangetable + +//go:generate go run gen.go --versions=4.1.0,5.1.0,5.2.0,5.0.0,6.1.0,6.2.0,6.3.0,6.0.0,7.0.0,8.0.0,9.0.0,10.0.0 + +import "unicode" + +var assigned = map[string]*unicode.RangeTable{ + "4.1.0": assigned4_1_0, + "5.1.0": assigned5_1_0, + "5.2.0": assigned5_2_0, + "5.0.0": assigned5_0_0, + "6.1.0": assigned6_1_0, + "6.2.0": assigned6_2_0, + "6.3.0": assigned6_3_0, + "6.0.0": assigned6_0_0, + "7.0.0": assigned7_0_0, + "8.0.0": assigned8_0_0, + "9.0.0": assigned9_0_0, + "10.0.0": assigned10_0_0, +} + +// size 2924 bytes (2 KiB) +var assigned4_1_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x0241, 1}, + {0x0250, 0x036f, 1}, + {0x0374, 0x0375, 1}, + {0x037a, 0x037e, 4}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x03ce, 1}, + {0x03d0, 0x0486, 1}, + {0x0488, 0x04ce, 1}, + {0x04d0, 0x04f9, 1}, + {0x0500, 0x050f, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x0591, 0x05b9, 1}, + {0x05bb, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x0603, 1}, + {0x060b, 0x0615, 1}, + {0x061b, 0x061e, 3}, + {0x061f, 0x0621, 2}, + {0x0622, 0x063a, 1}, + {0x0640, 0x065e, 1}, + {0x0660, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x076d, 1}, + {0x0780, 0x07b1, 1}, + {0x0901, 0x0939, 1}, + {0x093c, 0x094d, 1}, + {0x0950, 0x0954, 1}, + {0x0958, 0x0970, 1}, + {0x097d, 0x0981, 4}, + {0x0982, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fa, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a59, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a74, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0aef, 1}, + {0x0af1, 0x0b01, 16}, + {0x0b02, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b43, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b61, 1}, + {0x0b66, 0x0b71, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd7, 0x0be6, 15}, + {0x0be7, 0x0bfa, 1}, + {0x0c01, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c33, 1}, + {0x0c35, 0x0c39, 1}, + {0x0c3e, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c60, 0x0c61, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c82, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce6, 5}, + {0x0ce7, 0x0cef, 1}, + {0x0d02, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d28, 1}, + {0x0d2a, 0x0d39, 1}, + {0x0d3e, 0x0d43, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4d, 1}, + {0x0d57, 0x0d60, 9}, + {0x0d61, 0x0d66, 5}, + {0x0d67, 0x0d6f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edd, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6a, 1}, + {0x0f71, 0x0f8b, 1}, + {0x0f90, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fcf, 0x0fd1, 1}, + {0x1000, 0x1021, 1}, + {0x1023, 0x1027, 1}, + {0x1029, 0x102a, 1}, + {0x102c, 0x1032, 1}, + {0x1036, 0x1039, 1}, + {0x1040, 0x1059, 1}, + {0x10a0, 0x10c5, 1}, + {0x10d0, 0x10fc, 1}, + {0x1100, 0x1159, 1}, + {0x115f, 0x11a2, 1}, + {0x11a8, 0x11f9, 1}, + {0x1200, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135f, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f4, 1}, + {0x1401, 0x1676, 1}, + {0x1680, 0x169c, 1}, + {0x16a0, 0x16f0, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18a9, 1}, + {0x1900, 0x191c, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19a9, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19d9, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a1f, 1}, + {0x1d00, 0x1dc3, 1}, + {0x1e00, 0x1e9b, 1}, + {0x1ea0, 0x1ef9, 1}, + {0x1f00, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2063, 1}, + {0x206a, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x2094, 1}, + {0x20a0, 0x20b5, 1}, + {0x20d0, 0x20eb, 1}, + {0x2100, 0x214c, 1}, + {0x2153, 0x2183, 1}, + {0x2190, 0x23db, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x269c, 1}, + {0x26a0, 0x26b1, 1}, + {0x2701, 0x2704, 1}, + {0x2706, 0x2709, 1}, + {0x270c, 0x2727, 1}, + {0x2729, 0x274b, 1}, + {0x274d, 0x274f, 2}, + {0x2750, 0x2752, 1}, + {0x2756, 0x2758, 2}, + {0x2759, 0x275e, 1}, + {0x2761, 0x2794, 1}, + {0x2798, 0x27af, 1}, + {0x27b1, 0x27be, 1}, + {0x27c0, 0x27c6, 1}, + {0x27d0, 0x27eb, 1}, + {0x27f0, 0x2b13, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c80, 0x2cea, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d30, 0x2d65, 1}, + {0x2d6f, 0x2d80, 17}, + {0x2d81, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2e00, 0x2e17, 1}, + {0x2e1c, 0x2e1d, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312c, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31b7, 1}, + {0x31c0, 0x31cf, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x3243, 1}, + {0x3250, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fbb, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa700, 0xa716, 1}, + {0xa800, 0xa82b, 1}, + {0xac00, 0xd7a3, 1}, + {0xd800, 0xfa2d, 1}, + {0xfa30, 0xfa6a, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbb1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe23, 1}, + {0xfe30, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018a, 1}, + {0x00010300, 0x0001031e, 1}, + {0x00010320, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010a00, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d12a, 0x0001d1dd, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7c9, 1}, + {0x0001d7ce, 0x0001d7ff, 1}, + {0x00020000, 0x0002a6d6, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// size 3152 bytes (3 KiB) +var assigned5_1_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x0377, 1}, + {0x037a, 0x037e, 1}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x0523, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x0591, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x0603, 1}, + {0x0606, 0x061b, 1}, + {0x061e, 0x061f, 1}, + {0x0621, 0x065e, 1}, + {0x0660, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x07b1, 1}, + {0x07c0, 0x07fa, 1}, + {0x0901, 0x0939, 1}, + {0x093c, 0x094d, 1}, + {0x0950, 0x0954, 1}, + {0x0958, 0x0972, 1}, + {0x097b, 0x097f, 1}, + {0x0981, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fa, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a51, 0x0a59, 8}, + {0x0a5a, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a75, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0aef, 1}, + {0x0af1, 0x0b01, 16}, + {0x0b02, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b44, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b63, 1}, + {0x0b66, 0x0b71, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd0, 0x0bd7, 7}, + {0x0be6, 0x0bfa, 1}, + {0x0c01, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c33, 1}, + {0x0c35, 0x0c39, 1}, + {0x0c3d, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c58, 0x0c59, 1}, + {0x0c60, 0x0c63, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c78, 0x0c7f, 1}, + {0x0c82, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce3, 1}, + {0x0ce6, 0x0cef, 1}, + {0x0cf1, 0x0cf2, 1}, + {0x0d02, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d28, 1}, + {0x0d2a, 0x0d39, 1}, + {0x0d3d, 0x0d44, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4d, 1}, + {0x0d57, 0x0d60, 9}, + {0x0d61, 0x0d63, 1}, + {0x0d66, 0x0d75, 1}, + {0x0d79, 0x0d7f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edd, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6c, 1}, + {0x0f71, 0x0f8b, 1}, + {0x0f90, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fce, 0x0fd4, 1}, + {0x1000, 0x1099, 1}, + {0x109e, 0x10c5, 1}, + {0x10d0, 0x10fc, 1}, + {0x1100, 0x1159, 1}, + {0x115f, 0x11a2, 1}, + {0x11a8, 0x11f9, 1}, + {0x1200, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135f, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f4, 1}, + {0x1401, 0x1676, 1}, + {0x1680, 0x169c, 1}, + {0x16a0, 0x16f0, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18aa, 1}, + {0x1900, 0x191c, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19a9, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19d9, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a1f, 1}, + {0x1b00, 0x1b4b, 1}, + {0x1b50, 0x1b7c, 1}, + {0x1b80, 0x1baa, 1}, + {0x1bae, 0x1bb9, 1}, + {0x1c00, 0x1c37, 1}, + {0x1c3b, 0x1c49, 1}, + {0x1c4d, 0x1c7f, 1}, + {0x1d00, 0x1de6, 1}, + {0x1dfe, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2064, 1}, + {0x206a, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x2094, 1}, + {0x20a0, 0x20b5, 1}, + {0x20d0, 0x20f0, 1}, + {0x2100, 0x214f, 1}, + {0x2153, 0x2188, 1}, + {0x2190, 0x23e7, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x269d, 1}, + {0x26a0, 0x26bc, 1}, + {0x26c0, 0x26c3, 1}, + {0x2701, 0x2704, 1}, + {0x2706, 0x2709, 1}, + {0x270c, 0x2727, 1}, + {0x2729, 0x274b, 1}, + {0x274d, 0x274f, 2}, + {0x2750, 0x2752, 1}, + {0x2756, 0x2758, 2}, + {0x2759, 0x275e, 1}, + {0x2761, 0x2794, 1}, + {0x2798, 0x27af, 1}, + {0x27b1, 0x27be, 1}, + {0x27c0, 0x27ca, 1}, + {0x27cc, 0x27d0, 4}, + {0x27d1, 0x2b4c, 1}, + {0x2b50, 0x2b54, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c60, 0x2c6f, 1}, + {0x2c71, 0x2c7d, 1}, + {0x2c80, 0x2cea, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d30, 0x2d65, 1}, + {0x2d6f, 0x2d80, 17}, + {0x2d81, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2de0, 0x2e30, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312d, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31b7, 1}, + {0x31c0, 0x31e3, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x3243, 1}, + {0x3250, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fc3, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa500, 0xa62b, 1}, + {0xa640, 0xa65f, 1}, + {0xa662, 0xa673, 1}, + {0xa67c, 0xa697, 1}, + {0xa700, 0xa78c, 1}, + {0xa7fb, 0xa82b, 1}, + {0xa840, 0xa877, 1}, + {0xa880, 0xa8c4, 1}, + {0xa8ce, 0xa8d9, 1}, + {0xa900, 0xa953, 1}, + {0xa95f, 0xaa00, 161}, + {0xaa01, 0xaa36, 1}, + {0xaa40, 0xaa4d, 1}, + {0xaa50, 0xaa59, 1}, + {0xaa5c, 0xaa5f, 1}, + {0xac00, 0xd7a3, 1}, + {0xd800, 0xfa2d, 1}, + {0xfa30, 0xfa6a, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbb1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe26, 1}, + {0xfe30, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018a, 1}, + {0x00010190, 0x0001019b, 1}, + {0x000101d0, 0x000101fd, 1}, + {0x00010280, 0x0001029c, 1}, + {0x000102a0, 0x000102d0, 1}, + {0x00010300, 0x0001031e, 1}, + {0x00010320, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010900, 0x00010919, 1}, + {0x0001091f, 0x00010939, 1}, + {0x0001093f, 0x00010a00, 193}, + {0x00010a01, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x00012000, 0x0001236e, 1}, + {0x00012400, 0x00012462, 1}, + {0x00012470, 0x00012473, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d129, 0x0001d1dd, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d360, 0x0001d371, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7cb, 1}, + {0x0001d7ce, 0x0001d7ff, 1}, + {0x0001f000, 0x0001f02b, 1}, + {0x0001f030, 0x0001f093, 1}, + {0x00020000, 0x0002a6d6, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// size 3518 bytes (3 KiB) +var assigned5_2_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x0377, 1}, + {0x037a, 0x037e, 1}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x0525, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x0591, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x0603, 1}, + {0x0606, 0x061b, 1}, + {0x061e, 0x061f, 1}, + {0x0621, 0x065e, 1}, + {0x0660, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x07b1, 1}, + {0x07c0, 0x07fa, 1}, + {0x0800, 0x082d, 1}, + {0x0830, 0x083e, 1}, + {0x0900, 0x0939, 1}, + {0x093c, 0x094e, 1}, + {0x0950, 0x0955, 1}, + {0x0958, 0x0972, 1}, + {0x0979, 0x097f, 1}, + {0x0981, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fb, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a51, 0x0a59, 8}, + {0x0a5a, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a75, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0aef, 1}, + {0x0af1, 0x0b01, 16}, + {0x0b02, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b44, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b63, 1}, + {0x0b66, 0x0b71, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd0, 0x0bd7, 7}, + {0x0be6, 0x0bfa, 1}, + {0x0c01, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c33, 1}, + {0x0c35, 0x0c39, 1}, + {0x0c3d, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c58, 0x0c59, 1}, + {0x0c60, 0x0c63, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c78, 0x0c7f, 1}, + {0x0c82, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce3, 1}, + {0x0ce6, 0x0cef, 1}, + {0x0cf1, 0x0cf2, 1}, + {0x0d02, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d28, 1}, + {0x0d2a, 0x0d39, 1}, + {0x0d3d, 0x0d44, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4d, 1}, + {0x0d57, 0x0d60, 9}, + {0x0d61, 0x0d63, 1}, + {0x0d66, 0x0d75, 1}, + {0x0d79, 0x0d7f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edd, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6c, 1}, + {0x0f71, 0x0f8b, 1}, + {0x0f90, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fce, 0x0fd8, 1}, + {0x1000, 0x10c5, 1}, + {0x10d0, 0x10fc, 1}, + {0x1100, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135f, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f4, 1}, + {0x1400, 0x169c, 1}, + {0x16a0, 0x16f0, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18aa, 1}, + {0x18b0, 0x18f5, 1}, + {0x1900, 0x191c, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19ab, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19da, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a5e, 1}, + {0x1a60, 0x1a7c, 1}, + {0x1a7f, 0x1a89, 1}, + {0x1a90, 0x1a99, 1}, + {0x1aa0, 0x1aad, 1}, + {0x1b00, 0x1b4b, 1}, + {0x1b50, 0x1b7c, 1}, + {0x1b80, 0x1baa, 1}, + {0x1bae, 0x1bb9, 1}, + {0x1c00, 0x1c37, 1}, + {0x1c3b, 0x1c49, 1}, + {0x1c4d, 0x1c7f, 1}, + {0x1cd0, 0x1cf2, 1}, + {0x1d00, 0x1de6, 1}, + {0x1dfd, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2064, 1}, + {0x206a, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x2094, 1}, + {0x20a0, 0x20b8, 1}, + {0x20d0, 0x20f0, 1}, + {0x2100, 0x2189, 1}, + {0x2190, 0x23e8, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x26cd, 1}, + {0x26cf, 0x26e1, 1}, + {0x26e3, 0x26e8, 5}, + {0x26e9, 0x26ff, 1}, + {0x2701, 0x2704, 1}, + {0x2706, 0x2709, 1}, + {0x270c, 0x2727, 1}, + {0x2729, 0x274b, 1}, + {0x274d, 0x274f, 2}, + {0x2750, 0x2752, 1}, + {0x2756, 0x275e, 1}, + {0x2761, 0x2794, 1}, + {0x2798, 0x27af, 1}, + {0x27b1, 0x27be, 1}, + {0x27c0, 0x27ca, 1}, + {0x27cc, 0x27d0, 4}, + {0x27d1, 0x2b4c, 1}, + {0x2b50, 0x2b59, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c60, 0x2cf1, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d30, 0x2d65, 1}, + {0x2d6f, 0x2d80, 17}, + {0x2d81, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2de0, 0x2e31, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312d, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31b7, 1}, + {0x31c0, 0x31e3, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fcb, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa4d0, 0xa62b, 1}, + {0xa640, 0xa65f, 1}, + {0xa662, 0xa673, 1}, + {0xa67c, 0xa697, 1}, + {0xa6a0, 0xa6f7, 1}, + {0xa700, 0xa78c, 1}, + {0xa7fb, 0xa82b, 1}, + {0xa830, 0xa839, 1}, + {0xa840, 0xa877, 1}, + {0xa880, 0xa8c4, 1}, + {0xa8ce, 0xa8d9, 1}, + {0xa8e0, 0xa8fb, 1}, + {0xa900, 0xa953, 1}, + {0xa95f, 0xa97c, 1}, + {0xa980, 0xa9cd, 1}, + {0xa9cf, 0xa9d9, 1}, + {0xa9de, 0xa9df, 1}, + {0xaa00, 0xaa36, 1}, + {0xaa40, 0xaa4d, 1}, + {0xaa50, 0xaa59, 1}, + {0xaa5c, 0xaa7b, 1}, + {0xaa80, 0xaac2, 1}, + {0xaadb, 0xaadf, 1}, + {0xabc0, 0xabed, 1}, + {0xabf0, 0xabf9, 1}, + {0xac00, 0xd7a3, 1}, + {0xd7b0, 0xd7c6, 1}, + {0xd7cb, 0xd7fb, 1}, + {0xd800, 0xfa2d, 1}, + {0xfa30, 0xfa6d, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbb1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe26, 1}, + {0xfe30, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018a, 1}, + {0x00010190, 0x0001019b, 1}, + {0x000101d0, 0x000101fd, 1}, + {0x00010280, 0x0001029c, 1}, + {0x000102a0, 0x000102d0, 1}, + {0x00010300, 0x0001031e, 1}, + {0x00010320, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010840, 0x00010855, 1}, + {0x00010857, 0x0001085f, 1}, + {0x00010900, 0x0001091b, 1}, + {0x0001091f, 0x00010939, 1}, + {0x0001093f, 0x00010a00, 193}, + {0x00010a01, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x00010a60, 0x00010a7f, 1}, + {0x00010b00, 0x00010b35, 1}, + {0x00010b39, 0x00010b55, 1}, + {0x00010b58, 0x00010b72, 1}, + {0x00010b78, 0x00010b7f, 1}, + {0x00010c00, 0x00010c48, 1}, + {0x00010e60, 0x00010e7e, 1}, + {0x00011080, 0x000110c1, 1}, + {0x00012000, 0x0001236e, 1}, + {0x00012400, 0x00012462, 1}, + {0x00012470, 0x00012473, 1}, + {0x00013000, 0x0001342e, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d129, 0x0001d1dd, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d360, 0x0001d371, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7cb, 1}, + {0x0001d7ce, 0x0001d7ff, 1}, + {0x0001f000, 0x0001f02b, 1}, + {0x0001f030, 0x0001f093, 1}, + {0x0001f100, 0x0001f10a, 1}, + {0x0001f110, 0x0001f12e, 1}, + {0x0001f131, 0x0001f13d, 12}, + {0x0001f13f, 0x0001f142, 3}, + {0x0001f146, 0x0001f14a, 4}, + {0x0001f14b, 0x0001f14e, 1}, + {0x0001f157, 0x0001f15f, 8}, + {0x0001f179, 0x0001f17b, 2}, + {0x0001f17c, 0x0001f17f, 3}, + {0x0001f18a, 0x0001f18d, 1}, + {0x0001f190, 0x0001f200, 112}, + {0x0001f210, 0x0001f231, 1}, + {0x0001f240, 0x0001f248, 1}, + {0x00020000, 0x0002a6d6, 1}, + {0x0002a700, 0x0002b734, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// size 3026 bytes (2 KiB) +var assigned5_0_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x036f, 1}, + {0x0374, 0x0375, 1}, + {0x037a, 0x037e, 1}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x03ce, 1}, + {0x03d0, 0x0486, 1}, + {0x0488, 0x0513, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x0591, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x0603, 1}, + {0x060b, 0x0615, 1}, + {0x061b, 0x061e, 3}, + {0x061f, 0x0621, 2}, + {0x0622, 0x063a, 1}, + {0x0640, 0x065e, 1}, + {0x0660, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x076d, 1}, + {0x0780, 0x07b1, 1}, + {0x07c0, 0x07fa, 1}, + {0x0901, 0x0939, 1}, + {0x093c, 0x094d, 1}, + {0x0950, 0x0954, 1}, + {0x0958, 0x0970, 1}, + {0x097b, 0x097f, 1}, + {0x0981, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fa, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a59, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a74, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0aef, 1}, + {0x0af1, 0x0b01, 16}, + {0x0b02, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b43, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b61, 1}, + {0x0b66, 0x0b71, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd7, 0x0be6, 15}, + {0x0be7, 0x0bfa, 1}, + {0x0c01, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c33, 1}, + {0x0c35, 0x0c39, 1}, + {0x0c3e, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c60, 0x0c61, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c82, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce3, 1}, + {0x0ce6, 0x0cef, 1}, + {0x0cf1, 0x0cf2, 1}, + {0x0d02, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d28, 1}, + {0x0d2a, 0x0d39, 1}, + {0x0d3e, 0x0d43, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4d, 1}, + {0x0d57, 0x0d60, 9}, + {0x0d61, 0x0d66, 5}, + {0x0d67, 0x0d6f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edd, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6a, 1}, + {0x0f71, 0x0f8b, 1}, + {0x0f90, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fcf, 0x0fd1, 1}, + {0x1000, 0x1021, 1}, + {0x1023, 0x1027, 1}, + {0x1029, 0x102a, 1}, + {0x102c, 0x1032, 1}, + {0x1036, 0x1039, 1}, + {0x1040, 0x1059, 1}, + {0x10a0, 0x10c5, 1}, + {0x10d0, 0x10fc, 1}, + {0x1100, 0x1159, 1}, + {0x115f, 0x11a2, 1}, + {0x11a8, 0x11f9, 1}, + {0x1200, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135f, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f4, 1}, + {0x1401, 0x1676, 1}, + {0x1680, 0x169c, 1}, + {0x16a0, 0x16f0, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18a9, 1}, + {0x1900, 0x191c, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19a9, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19d9, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a1f, 1}, + {0x1b00, 0x1b4b, 1}, + {0x1b50, 0x1b7c, 1}, + {0x1d00, 0x1dca, 1}, + {0x1dfe, 0x1e9b, 1}, + {0x1ea0, 0x1ef9, 1}, + {0x1f00, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2063, 1}, + {0x206a, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x2094, 1}, + {0x20a0, 0x20b5, 1}, + {0x20d0, 0x20ef, 1}, + {0x2100, 0x214e, 1}, + {0x2153, 0x2184, 1}, + {0x2190, 0x23e7, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x269c, 1}, + {0x26a0, 0x26b2, 1}, + {0x2701, 0x2704, 1}, + {0x2706, 0x2709, 1}, + {0x270c, 0x2727, 1}, + {0x2729, 0x274b, 1}, + {0x274d, 0x274f, 2}, + {0x2750, 0x2752, 1}, + {0x2756, 0x2758, 2}, + {0x2759, 0x275e, 1}, + {0x2761, 0x2794, 1}, + {0x2798, 0x27af, 1}, + {0x27b1, 0x27be, 1}, + {0x27c0, 0x27ca, 1}, + {0x27d0, 0x27eb, 1}, + {0x27f0, 0x2b1a, 1}, + {0x2b20, 0x2b23, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c60, 0x2c6c, 1}, + {0x2c74, 0x2c77, 1}, + {0x2c80, 0x2cea, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d30, 0x2d65, 1}, + {0x2d6f, 0x2d80, 17}, + {0x2d81, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2e00, 0x2e17, 1}, + {0x2e1c, 0x2e1d, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312c, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31b7, 1}, + {0x31c0, 0x31cf, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x3243, 1}, + {0x3250, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fbb, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa700, 0xa71a, 1}, + {0xa720, 0xa721, 1}, + {0xa800, 0xa82b, 1}, + {0xa840, 0xa877, 1}, + {0xac00, 0xd7a3, 1}, + {0xd800, 0xfa2d, 1}, + {0xfa30, 0xfa6a, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbb1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe23, 1}, + {0xfe30, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018a, 1}, + {0x00010300, 0x0001031e, 1}, + {0x00010320, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010900, 0x00010919, 1}, + {0x0001091f, 0x00010a00, 225}, + {0x00010a01, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x00012000, 0x0001236e, 1}, + {0x00012400, 0x00012462, 1}, + {0x00012470, 0x00012473, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d12a, 0x0001d1dd, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d360, 0x0001d371, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7cb, 1}, + {0x0001d7ce, 0x0001d7ff, 1}, + {0x00020000, 0x0002a6d6, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// size 4160 bytes (4 KiB) +var assigned6_1_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x0377, 1}, + {0x037a, 0x037e, 1}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x0527, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x058f, 0x0591, 2}, + {0x0592, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x0604, 1}, + {0x0606, 0x061b, 1}, + {0x061e, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x07b1, 1}, + {0x07c0, 0x07fa, 1}, + {0x0800, 0x082d, 1}, + {0x0830, 0x083e, 1}, + {0x0840, 0x085b, 1}, + {0x085e, 0x08a0, 66}, + {0x08a2, 0x08ac, 1}, + {0x08e4, 0x08fe, 1}, + {0x0900, 0x0977, 1}, + {0x0979, 0x097f, 1}, + {0x0981, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fb, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a51, 0x0a59, 8}, + {0x0a5a, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a75, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0af1, 1}, + {0x0b01, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b44, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b63, 1}, + {0x0b66, 0x0b77, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd0, 0x0bd7, 7}, + {0x0be6, 0x0bfa, 1}, + {0x0c01, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c33, 1}, + {0x0c35, 0x0c39, 1}, + {0x0c3d, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c58, 0x0c59, 1}, + {0x0c60, 0x0c63, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c78, 0x0c7f, 1}, + {0x0c82, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce3, 1}, + {0x0ce6, 0x0cef, 1}, + {0x0cf1, 0x0cf2, 1}, + {0x0d02, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d3a, 1}, + {0x0d3d, 0x0d44, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4e, 1}, + {0x0d57, 0x0d60, 9}, + {0x0d61, 0x0d63, 1}, + {0x0d66, 0x0d75, 1}, + {0x0d79, 0x0d7f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edf, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6c, 1}, + {0x0f71, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fce, 0x0fda, 1}, + {0x1000, 0x10c5, 1}, + {0x10c7, 0x10cd, 6}, + {0x10d0, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135d, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f4, 1}, + {0x1400, 0x169c, 1}, + {0x16a0, 0x16f0, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18aa, 1}, + {0x18b0, 0x18f5, 1}, + {0x1900, 0x191c, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19ab, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19da, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a5e, 1}, + {0x1a60, 0x1a7c, 1}, + {0x1a7f, 0x1a89, 1}, + {0x1a90, 0x1a99, 1}, + {0x1aa0, 0x1aad, 1}, + {0x1b00, 0x1b4b, 1}, + {0x1b50, 0x1b7c, 1}, + {0x1b80, 0x1bf3, 1}, + {0x1bfc, 0x1c37, 1}, + {0x1c3b, 0x1c49, 1}, + {0x1c4d, 0x1c7f, 1}, + {0x1cc0, 0x1cc7, 1}, + {0x1cd0, 0x1cf6, 1}, + {0x1d00, 0x1de6, 1}, + {0x1dfc, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2064, 1}, + {0x206a, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x209c, 1}, + {0x20a0, 0x20b9, 1}, + {0x20d0, 0x20f0, 1}, + {0x2100, 0x2189, 1}, + {0x2190, 0x23f3, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x26ff, 1}, + {0x2701, 0x2b4c, 1}, + {0x2b50, 0x2b59, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c60, 0x2cf3, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d27, 0x2d2d, 6}, + {0x2d30, 0x2d67, 1}, + {0x2d6f, 0x2d70, 1}, + {0x2d7f, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2de0, 0x2e3b, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312d, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31ba, 1}, + {0x31c0, 0x31e3, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fcc, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa4d0, 0xa62b, 1}, + {0xa640, 0xa697, 1}, + {0xa69f, 0xa6f7, 1}, + {0xa700, 0xa78e, 1}, + {0xa790, 0xa793, 1}, + {0xa7a0, 0xa7aa, 1}, + {0xa7f8, 0xa82b, 1}, + {0xa830, 0xa839, 1}, + {0xa840, 0xa877, 1}, + {0xa880, 0xa8c4, 1}, + {0xa8ce, 0xa8d9, 1}, + {0xa8e0, 0xa8fb, 1}, + {0xa900, 0xa953, 1}, + {0xa95f, 0xa97c, 1}, + {0xa980, 0xa9cd, 1}, + {0xa9cf, 0xa9d9, 1}, + {0xa9de, 0xa9df, 1}, + {0xaa00, 0xaa36, 1}, + {0xaa40, 0xaa4d, 1}, + {0xaa50, 0xaa59, 1}, + {0xaa5c, 0xaa7b, 1}, + {0xaa80, 0xaac2, 1}, + {0xaadb, 0xaaf6, 1}, + {0xab01, 0xab06, 1}, + {0xab09, 0xab0e, 1}, + {0xab11, 0xab16, 1}, + {0xab20, 0xab26, 1}, + {0xab28, 0xab2e, 1}, + {0xabc0, 0xabed, 1}, + {0xabf0, 0xabf9, 1}, + {0xac00, 0xd7a3, 1}, + {0xd7b0, 0xd7c6, 1}, + {0xd7cb, 0xd7fb, 1}, + {0xd800, 0xfa6d, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbc1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe26, 1}, + {0xfe30, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018a, 1}, + {0x00010190, 0x0001019b, 1}, + {0x000101d0, 0x000101fd, 1}, + {0x00010280, 0x0001029c, 1}, + {0x000102a0, 0x000102d0, 1}, + {0x00010300, 0x0001031e, 1}, + {0x00010320, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010840, 0x00010855, 1}, + {0x00010857, 0x0001085f, 1}, + {0x00010900, 0x0001091b, 1}, + {0x0001091f, 0x00010939, 1}, + {0x0001093f, 0x00010980, 65}, + {0x00010981, 0x000109b7, 1}, + {0x000109be, 0x000109bf, 1}, + {0x00010a00, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x00010a60, 0x00010a7f, 1}, + {0x00010b00, 0x00010b35, 1}, + {0x00010b39, 0x00010b55, 1}, + {0x00010b58, 0x00010b72, 1}, + {0x00010b78, 0x00010b7f, 1}, + {0x00010c00, 0x00010c48, 1}, + {0x00010e60, 0x00010e7e, 1}, + {0x00011000, 0x0001104d, 1}, + {0x00011052, 0x0001106f, 1}, + {0x00011080, 0x000110c1, 1}, + {0x000110d0, 0x000110e8, 1}, + {0x000110f0, 0x000110f9, 1}, + {0x00011100, 0x00011134, 1}, + {0x00011136, 0x00011143, 1}, + {0x00011180, 0x000111c8, 1}, + {0x000111d0, 0x000111d9, 1}, + {0x00011680, 0x000116b7, 1}, + {0x000116c0, 0x000116c9, 1}, + {0x00012000, 0x0001236e, 1}, + {0x00012400, 0x00012462, 1}, + {0x00012470, 0x00012473, 1}, + {0x00013000, 0x0001342e, 1}, + {0x00016800, 0x00016a38, 1}, + {0x00016f00, 0x00016f44, 1}, + {0x00016f50, 0x00016f7e, 1}, + {0x00016f8f, 0x00016f9f, 1}, + {0x0001b000, 0x0001b001, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d129, 0x0001d1dd, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d360, 0x0001d371, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7cb, 1}, + {0x0001d7ce, 0x0001d7ff, 1}, + {0x0001ee00, 0x0001ee03, 1}, + {0x0001ee05, 0x0001ee1f, 1}, + {0x0001ee21, 0x0001ee22, 1}, + {0x0001ee24, 0x0001ee27, 3}, + {0x0001ee29, 0x0001ee32, 1}, + {0x0001ee34, 0x0001ee37, 1}, + {0x0001ee39, 0x0001ee3b, 2}, + {0x0001ee42, 0x0001ee47, 5}, + {0x0001ee49, 0x0001ee4d, 2}, + {0x0001ee4e, 0x0001ee4f, 1}, + {0x0001ee51, 0x0001ee52, 1}, + {0x0001ee54, 0x0001ee57, 3}, + {0x0001ee59, 0x0001ee61, 2}, + {0x0001ee62, 0x0001ee64, 2}, + {0x0001ee67, 0x0001ee6a, 1}, + {0x0001ee6c, 0x0001ee72, 1}, + {0x0001ee74, 0x0001ee77, 1}, + {0x0001ee79, 0x0001ee7c, 1}, + {0x0001ee7e, 0x0001ee80, 2}, + {0x0001ee81, 0x0001ee89, 1}, + {0x0001ee8b, 0x0001ee9b, 1}, + {0x0001eea1, 0x0001eea3, 1}, + {0x0001eea5, 0x0001eea9, 1}, + {0x0001eeab, 0x0001eebb, 1}, + {0x0001eef0, 0x0001eef1, 1}, + {0x0001f000, 0x0001f02b, 1}, + {0x0001f030, 0x0001f093, 1}, + {0x0001f0a0, 0x0001f0ae, 1}, + {0x0001f0b1, 0x0001f0be, 1}, + {0x0001f0c1, 0x0001f0cf, 1}, + {0x0001f0d1, 0x0001f0df, 1}, + {0x0001f100, 0x0001f10a, 1}, + {0x0001f110, 0x0001f12e, 1}, + {0x0001f130, 0x0001f16b, 1}, + {0x0001f170, 0x0001f19a, 1}, + {0x0001f1e6, 0x0001f202, 1}, + {0x0001f210, 0x0001f23a, 1}, + {0x0001f240, 0x0001f248, 1}, + {0x0001f250, 0x0001f251, 1}, + {0x0001f300, 0x0001f320, 1}, + {0x0001f330, 0x0001f335, 1}, + {0x0001f337, 0x0001f37c, 1}, + {0x0001f380, 0x0001f393, 1}, + {0x0001f3a0, 0x0001f3c4, 1}, + {0x0001f3c6, 0x0001f3ca, 1}, + {0x0001f3e0, 0x0001f3f0, 1}, + {0x0001f400, 0x0001f43e, 1}, + {0x0001f440, 0x0001f442, 2}, + {0x0001f443, 0x0001f4f7, 1}, + {0x0001f4f9, 0x0001f4fc, 1}, + {0x0001f500, 0x0001f53d, 1}, + {0x0001f540, 0x0001f543, 1}, + {0x0001f550, 0x0001f567, 1}, + {0x0001f5fb, 0x0001f640, 1}, + {0x0001f645, 0x0001f64f, 1}, + {0x0001f680, 0x0001f6c5, 1}, + {0x0001f700, 0x0001f773, 1}, + {0x00020000, 0x0002a6d6, 1}, + {0x0002a700, 0x0002b734, 1}, + {0x0002b740, 0x0002b81d, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// size 4160 bytes (4 KiB) +var assigned6_2_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x0377, 1}, + {0x037a, 0x037e, 1}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x0527, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x058f, 0x0591, 2}, + {0x0592, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x0604, 1}, + {0x0606, 0x061b, 1}, + {0x061e, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x07b1, 1}, + {0x07c0, 0x07fa, 1}, + {0x0800, 0x082d, 1}, + {0x0830, 0x083e, 1}, + {0x0840, 0x085b, 1}, + {0x085e, 0x08a0, 66}, + {0x08a2, 0x08ac, 1}, + {0x08e4, 0x08fe, 1}, + {0x0900, 0x0977, 1}, + {0x0979, 0x097f, 1}, + {0x0981, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fb, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a51, 0x0a59, 8}, + {0x0a5a, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a75, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0af1, 1}, + {0x0b01, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b44, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b63, 1}, + {0x0b66, 0x0b77, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd0, 0x0bd7, 7}, + {0x0be6, 0x0bfa, 1}, + {0x0c01, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c33, 1}, + {0x0c35, 0x0c39, 1}, + {0x0c3d, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c58, 0x0c59, 1}, + {0x0c60, 0x0c63, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c78, 0x0c7f, 1}, + {0x0c82, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce3, 1}, + {0x0ce6, 0x0cef, 1}, + {0x0cf1, 0x0cf2, 1}, + {0x0d02, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d3a, 1}, + {0x0d3d, 0x0d44, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4e, 1}, + {0x0d57, 0x0d60, 9}, + {0x0d61, 0x0d63, 1}, + {0x0d66, 0x0d75, 1}, + {0x0d79, 0x0d7f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edf, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6c, 1}, + {0x0f71, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fce, 0x0fda, 1}, + {0x1000, 0x10c5, 1}, + {0x10c7, 0x10cd, 6}, + {0x10d0, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135d, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f4, 1}, + {0x1400, 0x169c, 1}, + {0x16a0, 0x16f0, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18aa, 1}, + {0x18b0, 0x18f5, 1}, + {0x1900, 0x191c, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19ab, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19da, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a5e, 1}, + {0x1a60, 0x1a7c, 1}, + {0x1a7f, 0x1a89, 1}, + {0x1a90, 0x1a99, 1}, + {0x1aa0, 0x1aad, 1}, + {0x1b00, 0x1b4b, 1}, + {0x1b50, 0x1b7c, 1}, + {0x1b80, 0x1bf3, 1}, + {0x1bfc, 0x1c37, 1}, + {0x1c3b, 0x1c49, 1}, + {0x1c4d, 0x1c7f, 1}, + {0x1cc0, 0x1cc7, 1}, + {0x1cd0, 0x1cf6, 1}, + {0x1d00, 0x1de6, 1}, + {0x1dfc, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2064, 1}, + {0x206a, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x209c, 1}, + {0x20a0, 0x20ba, 1}, + {0x20d0, 0x20f0, 1}, + {0x2100, 0x2189, 1}, + {0x2190, 0x23f3, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x26ff, 1}, + {0x2701, 0x2b4c, 1}, + {0x2b50, 0x2b59, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c60, 0x2cf3, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d27, 0x2d2d, 6}, + {0x2d30, 0x2d67, 1}, + {0x2d6f, 0x2d70, 1}, + {0x2d7f, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2de0, 0x2e3b, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312d, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31ba, 1}, + {0x31c0, 0x31e3, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fcc, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa4d0, 0xa62b, 1}, + {0xa640, 0xa697, 1}, + {0xa69f, 0xa6f7, 1}, + {0xa700, 0xa78e, 1}, + {0xa790, 0xa793, 1}, + {0xa7a0, 0xa7aa, 1}, + {0xa7f8, 0xa82b, 1}, + {0xa830, 0xa839, 1}, + {0xa840, 0xa877, 1}, + {0xa880, 0xa8c4, 1}, + {0xa8ce, 0xa8d9, 1}, + {0xa8e0, 0xa8fb, 1}, + {0xa900, 0xa953, 1}, + {0xa95f, 0xa97c, 1}, + {0xa980, 0xa9cd, 1}, + {0xa9cf, 0xa9d9, 1}, + {0xa9de, 0xa9df, 1}, + {0xaa00, 0xaa36, 1}, + {0xaa40, 0xaa4d, 1}, + {0xaa50, 0xaa59, 1}, + {0xaa5c, 0xaa7b, 1}, + {0xaa80, 0xaac2, 1}, + {0xaadb, 0xaaf6, 1}, + {0xab01, 0xab06, 1}, + {0xab09, 0xab0e, 1}, + {0xab11, 0xab16, 1}, + {0xab20, 0xab26, 1}, + {0xab28, 0xab2e, 1}, + {0xabc0, 0xabed, 1}, + {0xabf0, 0xabf9, 1}, + {0xac00, 0xd7a3, 1}, + {0xd7b0, 0xd7c6, 1}, + {0xd7cb, 0xd7fb, 1}, + {0xd800, 0xfa6d, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbc1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe26, 1}, + {0xfe30, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018a, 1}, + {0x00010190, 0x0001019b, 1}, + {0x000101d0, 0x000101fd, 1}, + {0x00010280, 0x0001029c, 1}, + {0x000102a0, 0x000102d0, 1}, + {0x00010300, 0x0001031e, 1}, + {0x00010320, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010840, 0x00010855, 1}, + {0x00010857, 0x0001085f, 1}, + {0x00010900, 0x0001091b, 1}, + {0x0001091f, 0x00010939, 1}, + {0x0001093f, 0x00010980, 65}, + {0x00010981, 0x000109b7, 1}, + {0x000109be, 0x000109bf, 1}, + {0x00010a00, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x00010a60, 0x00010a7f, 1}, + {0x00010b00, 0x00010b35, 1}, + {0x00010b39, 0x00010b55, 1}, + {0x00010b58, 0x00010b72, 1}, + {0x00010b78, 0x00010b7f, 1}, + {0x00010c00, 0x00010c48, 1}, + {0x00010e60, 0x00010e7e, 1}, + {0x00011000, 0x0001104d, 1}, + {0x00011052, 0x0001106f, 1}, + {0x00011080, 0x000110c1, 1}, + {0x000110d0, 0x000110e8, 1}, + {0x000110f0, 0x000110f9, 1}, + {0x00011100, 0x00011134, 1}, + {0x00011136, 0x00011143, 1}, + {0x00011180, 0x000111c8, 1}, + {0x000111d0, 0x000111d9, 1}, + {0x00011680, 0x000116b7, 1}, + {0x000116c0, 0x000116c9, 1}, + {0x00012000, 0x0001236e, 1}, + {0x00012400, 0x00012462, 1}, + {0x00012470, 0x00012473, 1}, + {0x00013000, 0x0001342e, 1}, + {0x00016800, 0x00016a38, 1}, + {0x00016f00, 0x00016f44, 1}, + {0x00016f50, 0x00016f7e, 1}, + {0x00016f8f, 0x00016f9f, 1}, + {0x0001b000, 0x0001b001, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d129, 0x0001d1dd, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d360, 0x0001d371, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7cb, 1}, + {0x0001d7ce, 0x0001d7ff, 1}, + {0x0001ee00, 0x0001ee03, 1}, + {0x0001ee05, 0x0001ee1f, 1}, + {0x0001ee21, 0x0001ee22, 1}, + {0x0001ee24, 0x0001ee27, 3}, + {0x0001ee29, 0x0001ee32, 1}, + {0x0001ee34, 0x0001ee37, 1}, + {0x0001ee39, 0x0001ee3b, 2}, + {0x0001ee42, 0x0001ee47, 5}, + {0x0001ee49, 0x0001ee4d, 2}, + {0x0001ee4e, 0x0001ee4f, 1}, + {0x0001ee51, 0x0001ee52, 1}, + {0x0001ee54, 0x0001ee57, 3}, + {0x0001ee59, 0x0001ee61, 2}, + {0x0001ee62, 0x0001ee64, 2}, + {0x0001ee67, 0x0001ee6a, 1}, + {0x0001ee6c, 0x0001ee72, 1}, + {0x0001ee74, 0x0001ee77, 1}, + {0x0001ee79, 0x0001ee7c, 1}, + {0x0001ee7e, 0x0001ee80, 2}, + {0x0001ee81, 0x0001ee89, 1}, + {0x0001ee8b, 0x0001ee9b, 1}, + {0x0001eea1, 0x0001eea3, 1}, + {0x0001eea5, 0x0001eea9, 1}, + {0x0001eeab, 0x0001eebb, 1}, + {0x0001eef0, 0x0001eef1, 1}, + {0x0001f000, 0x0001f02b, 1}, + {0x0001f030, 0x0001f093, 1}, + {0x0001f0a0, 0x0001f0ae, 1}, + {0x0001f0b1, 0x0001f0be, 1}, + {0x0001f0c1, 0x0001f0cf, 1}, + {0x0001f0d1, 0x0001f0df, 1}, + {0x0001f100, 0x0001f10a, 1}, + {0x0001f110, 0x0001f12e, 1}, + {0x0001f130, 0x0001f16b, 1}, + {0x0001f170, 0x0001f19a, 1}, + {0x0001f1e6, 0x0001f202, 1}, + {0x0001f210, 0x0001f23a, 1}, + {0x0001f240, 0x0001f248, 1}, + {0x0001f250, 0x0001f251, 1}, + {0x0001f300, 0x0001f320, 1}, + {0x0001f330, 0x0001f335, 1}, + {0x0001f337, 0x0001f37c, 1}, + {0x0001f380, 0x0001f393, 1}, + {0x0001f3a0, 0x0001f3c4, 1}, + {0x0001f3c6, 0x0001f3ca, 1}, + {0x0001f3e0, 0x0001f3f0, 1}, + {0x0001f400, 0x0001f43e, 1}, + {0x0001f440, 0x0001f442, 2}, + {0x0001f443, 0x0001f4f7, 1}, + {0x0001f4f9, 0x0001f4fc, 1}, + {0x0001f500, 0x0001f53d, 1}, + {0x0001f540, 0x0001f543, 1}, + {0x0001f550, 0x0001f567, 1}, + {0x0001f5fb, 0x0001f640, 1}, + {0x0001f645, 0x0001f64f, 1}, + {0x0001f680, 0x0001f6c5, 1}, + {0x0001f700, 0x0001f773, 1}, + {0x00020000, 0x0002a6d6, 1}, + {0x0002a700, 0x0002b734, 1}, + {0x0002b740, 0x0002b81d, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// size 4160 bytes (4 KiB) +var assigned6_3_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x0377, 1}, + {0x037a, 0x037e, 1}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x0527, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x058f, 0x0591, 2}, + {0x0592, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x0604, 1}, + {0x0606, 0x061c, 1}, + {0x061e, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x07b1, 1}, + {0x07c0, 0x07fa, 1}, + {0x0800, 0x082d, 1}, + {0x0830, 0x083e, 1}, + {0x0840, 0x085b, 1}, + {0x085e, 0x08a0, 66}, + {0x08a2, 0x08ac, 1}, + {0x08e4, 0x08fe, 1}, + {0x0900, 0x0977, 1}, + {0x0979, 0x097f, 1}, + {0x0981, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fb, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a51, 0x0a59, 8}, + {0x0a5a, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a75, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0af1, 1}, + {0x0b01, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b44, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b63, 1}, + {0x0b66, 0x0b77, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd0, 0x0bd7, 7}, + {0x0be6, 0x0bfa, 1}, + {0x0c01, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c33, 1}, + {0x0c35, 0x0c39, 1}, + {0x0c3d, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c58, 0x0c59, 1}, + {0x0c60, 0x0c63, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c78, 0x0c7f, 1}, + {0x0c82, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce3, 1}, + {0x0ce6, 0x0cef, 1}, + {0x0cf1, 0x0cf2, 1}, + {0x0d02, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d3a, 1}, + {0x0d3d, 0x0d44, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4e, 1}, + {0x0d57, 0x0d60, 9}, + {0x0d61, 0x0d63, 1}, + {0x0d66, 0x0d75, 1}, + {0x0d79, 0x0d7f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edf, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6c, 1}, + {0x0f71, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fce, 0x0fda, 1}, + {0x1000, 0x10c5, 1}, + {0x10c7, 0x10cd, 6}, + {0x10d0, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135d, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f4, 1}, + {0x1400, 0x169c, 1}, + {0x16a0, 0x16f0, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18aa, 1}, + {0x18b0, 0x18f5, 1}, + {0x1900, 0x191c, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19ab, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19da, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a5e, 1}, + {0x1a60, 0x1a7c, 1}, + {0x1a7f, 0x1a89, 1}, + {0x1a90, 0x1a99, 1}, + {0x1aa0, 0x1aad, 1}, + {0x1b00, 0x1b4b, 1}, + {0x1b50, 0x1b7c, 1}, + {0x1b80, 0x1bf3, 1}, + {0x1bfc, 0x1c37, 1}, + {0x1c3b, 0x1c49, 1}, + {0x1c4d, 0x1c7f, 1}, + {0x1cc0, 0x1cc7, 1}, + {0x1cd0, 0x1cf6, 1}, + {0x1d00, 0x1de6, 1}, + {0x1dfc, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2064, 1}, + {0x2066, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x209c, 1}, + {0x20a0, 0x20ba, 1}, + {0x20d0, 0x20f0, 1}, + {0x2100, 0x2189, 1}, + {0x2190, 0x23f3, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x26ff, 1}, + {0x2701, 0x2b4c, 1}, + {0x2b50, 0x2b59, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c60, 0x2cf3, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d27, 0x2d2d, 6}, + {0x2d30, 0x2d67, 1}, + {0x2d6f, 0x2d70, 1}, + {0x2d7f, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2de0, 0x2e3b, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312d, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31ba, 1}, + {0x31c0, 0x31e3, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fcc, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa4d0, 0xa62b, 1}, + {0xa640, 0xa697, 1}, + {0xa69f, 0xa6f7, 1}, + {0xa700, 0xa78e, 1}, + {0xa790, 0xa793, 1}, + {0xa7a0, 0xa7aa, 1}, + {0xa7f8, 0xa82b, 1}, + {0xa830, 0xa839, 1}, + {0xa840, 0xa877, 1}, + {0xa880, 0xa8c4, 1}, + {0xa8ce, 0xa8d9, 1}, + {0xa8e0, 0xa8fb, 1}, + {0xa900, 0xa953, 1}, + {0xa95f, 0xa97c, 1}, + {0xa980, 0xa9cd, 1}, + {0xa9cf, 0xa9d9, 1}, + {0xa9de, 0xa9df, 1}, + {0xaa00, 0xaa36, 1}, + {0xaa40, 0xaa4d, 1}, + {0xaa50, 0xaa59, 1}, + {0xaa5c, 0xaa7b, 1}, + {0xaa80, 0xaac2, 1}, + {0xaadb, 0xaaf6, 1}, + {0xab01, 0xab06, 1}, + {0xab09, 0xab0e, 1}, + {0xab11, 0xab16, 1}, + {0xab20, 0xab26, 1}, + {0xab28, 0xab2e, 1}, + {0xabc0, 0xabed, 1}, + {0xabf0, 0xabf9, 1}, + {0xac00, 0xd7a3, 1}, + {0xd7b0, 0xd7c6, 1}, + {0xd7cb, 0xd7fb, 1}, + {0xd800, 0xfa6d, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbc1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe26, 1}, + {0xfe30, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018a, 1}, + {0x00010190, 0x0001019b, 1}, + {0x000101d0, 0x000101fd, 1}, + {0x00010280, 0x0001029c, 1}, + {0x000102a0, 0x000102d0, 1}, + {0x00010300, 0x0001031e, 1}, + {0x00010320, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010840, 0x00010855, 1}, + {0x00010857, 0x0001085f, 1}, + {0x00010900, 0x0001091b, 1}, + {0x0001091f, 0x00010939, 1}, + {0x0001093f, 0x00010980, 65}, + {0x00010981, 0x000109b7, 1}, + {0x000109be, 0x000109bf, 1}, + {0x00010a00, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x00010a60, 0x00010a7f, 1}, + {0x00010b00, 0x00010b35, 1}, + {0x00010b39, 0x00010b55, 1}, + {0x00010b58, 0x00010b72, 1}, + {0x00010b78, 0x00010b7f, 1}, + {0x00010c00, 0x00010c48, 1}, + {0x00010e60, 0x00010e7e, 1}, + {0x00011000, 0x0001104d, 1}, + {0x00011052, 0x0001106f, 1}, + {0x00011080, 0x000110c1, 1}, + {0x000110d0, 0x000110e8, 1}, + {0x000110f0, 0x000110f9, 1}, + {0x00011100, 0x00011134, 1}, + {0x00011136, 0x00011143, 1}, + {0x00011180, 0x000111c8, 1}, + {0x000111d0, 0x000111d9, 1}, + {0x00011680, 0x000116b7, 1}, + {0x000116c0, 0x000116c9, 1}, + {0x00012000, 0x0001236e, 1}, + {0x00012400, 0x00012462, 1}, + {0x00012470, 0x00012473, 1}, + {0x00013000, 0x0001342e, 1}, + {0x00016800, 0x00016a38, 1}, + {0x00016f00, 0x00016f44, 1}, + {0x00016f50, 0x00016f7e, 1}, + {0x00016f8f, 0x00016f9f, 1}, + {0x0001b000, 0x0001b001, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d129, 0x0001d1dd, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d360, 0x0001d371, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7cb, 1}, + {0x0001d7ce, 0x0001d7ff, 1}, + {0x0001ee00, 0x0001ee03, 1}, + {0x0001ee05, 0x0001ee1f, 1}, + {0x0001ee21, 0x0001ee22, 1}, + {0x0001ee24, 0x0001ee27, 3}, + {0x0001ee29, 0x0001ee32, 1}, + {0x0001ee34, 0x0001ee37, 1}, + {0x0001ee39, 0x0001ee3b, 2}, + {0x0001ee42, 0x0001ee47, 5}, + {0x0001ee49, 0x0001ee4d, 2}, + {0x0001ee4e, 0x0001ee4f, 1}, + {0x0001ee51, 0x0001ee52, 1}, + {0x0001ee54, 0x0001ee57, 3}, + {0x0001ee59, 0x0001ee61, 2}, + {0x0001ee62, 0x0001ee64, 2}, + {0x0001ee67, 0x0001ee6a, 1}, + {0x0001ee6c, 0x0001ee72, 1}, + {0x0001ee74, 0x0001ee77, 1}, + {0x0001ee79, 0x0001ee7c, 1}, + {0x0001ee7e, 0x0001ee80, 2}, + {0x0001ee81, 0x0001ee89, 1}, + {0x0001ee8b, 0x0001ee9b, 1}, + {0x0001eea1, 0x0001eea3, 1}, + {0x0001eea5, 0x0001eea9, 1}, + {0x0001eeab, 0x0001eebb, 1}, + {0x0001eef0, 0x0001eef1, 1}, + {0x0001f000, 0x0001f02b, 1}, + {0x0001f030, 0x0001f093, 1}, + {0x0001f0a0, 0x0001f0ae, 1}, + {0x0001f0b1, 0x0001f0be, 1}, + {0x0001f0c1, 0x0001f0cf, 1}, + {0x0001f0d1, 0x0001f0df, 1}, + {0x0001f100, 0x0001f10a, 1}, + {0x0001f110, 0x0001f12e, 1}, + {0x0001f130, 0x0001f16b, 1}, + {0x0001f170, 0x0001f19a, 1}, + {0x0001f1e6, 0x0001f202, 1}, + {0x0001f210, 0x0001f23a, 1}, + {0x0001f240, 0x0001f248, 1}, + {0x0001f250, 0x0001f251, 1}, + {0x0001f300, 0x0001f320, 1}, + {0x0001f330, 0x0001f335, 1}, + {0x0001f337, 0x0001f37c, 1}, + {0x0001f380, 0x0001f393, 1}, + {0x0001f3a0, 0x0001f3c4, 1}, + {0x0001f3c6, 0x0001f3ca, 1}, + {0x0001f3e0, 0x0001f3f0, 1}, + {0x0001f400, 0x0001f43e, 1}, + {0x0001f440, 0x0001f442, 2}, + {0x0001f443, 0x0001f4f7, 1}, + {0x0001f4f9, 0x0001f4fc, 1}, + {0x0001f500, 0x0001f53d, 1}, + {0x0001f540, 0x0001f543, 1}, + {0x0001f550, 0x0001f567, 1}, + {0x0001f5fb, 0x0001f640, 1}, + {0x0001f645, 0x0001f64f, 1}, + {0x0001f680, 0x0001f6c5, 1}, + {0x0001f700, 0x0001f773, 1}, + {0x00020000, 0x0002a6d6, 1}, + {0x0002a700, 0x0002b734, 1}, + {0x0002b740, 0x0002b81d, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// size 3812 bytes (3 KiB) +var assigned6_0_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x0377, 1}, + {0x037a, 0x037e, 1}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x0527, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x0591, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x0603, 1}, + {0x0606, 0x061b, 1}, + {0x061e, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x07b1, 1}, + {0x07c0, 0x07fa, 1}, + {0x0800, 0x082d, 1}, + {0x0830, 0x083e, 1}, + {0x0840, 0x085b, 1}, + {0x085e, 0x0900, 162}, + {0x0901, 0x0977, 1}, + {0x0979, 0x097f, 1}, + {0x0981, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fb, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a51, 0x0a59, 8}, + {0x0a5a, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a75, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0aef, 1}, + {0x0af1, 0x0b01, 16}, + {0x0b02, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b44, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b63, 1}, + {0x0b66, 0x0b77, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd0, 0x0bd7, 7}, + {0x0be6, 0x0bfa, 1}, + {0x0c01, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c33, 1}, + {0x0c35, 0x0c39, 1}, + {0x0c3d, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c58, 0x0c59, 1}, + {0x0c60, 0x0c63, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c78, 0x0c7f, 1}, + {0x0c82, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce3, 1}, + {0x0ce6, 0x0cef, 1}, + {0x0cf1, 0x0cf2, 1}, + {0x0d02, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d3a, 1}, + {0x0d3d, 0x0d44, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4e, 1}, + {0x0d57, 0x0d60, 9}, + {0x0d61, 0x0d63, 1}, + {0x0d66, 0x0d75, 1}, + {0x0d79, 0x0d7f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edd, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6c, 1}, + {0x0f71, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fce, 0x0fda, 1}, + {0x1000, 0x10c5, 1}, + {0x10d0, 0x10fc, 1}, + {0x1100, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135d, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f4, 1}, + {0x1400, 0x169c, 1}, + {0x16a0, 0x16f0, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18aa, 1}, + {0x18b0, 0x18f5, 1}, + {0x1900, 0x191c, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19ab, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19da, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a5e, 1}, + {0x1a60, 0x1a7c, 1}, + {0x1a7f, 0x1a89, 1}, + {0x1a90, 0x1a99, 1}, + {0x1aa0, 0x1aad, 1}, + {0x1b00, 0x1b4b, 1}, + {0x1b50, 0x1b7c, 1}, + {0x1b80, 0x1baa, 1}, + {0x1bae, 0x1bb9, 1}, + {0x1bc0, 0x1bf3, 1}, + {0x1bfc, 0x1c37, 1}, + {0x1c3b, 0x1c49, 1}, + {0x1c4d, 0x1c7f, 1}, + {0x1cd0, 0x1cf2, 1}, + {0x1d00, 0x1de6, 1}, + {0x1dfc, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2064, 1}, + {0x206a, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x209c, 1}, + {0x20a0, 0x20b9, 1}, + {0x20d0, 0x20f0, 1}, + {0x2100, 0x2189, 1}, + {0x2190, 0x23f3, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x26ff, 1}, + {0x2701, 0x27ca, 1}, + {0x27cc, 0x27ce, 2}, + {0x27cf, 0x2b4c, 1}, + {0x2b50, 0x2b59, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c60, 0x2cf1, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d30, 0x2d65, 1}, + {0x2d6f, 0x2d70, 1}, + {0x2d7f, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2de0, 0x2e31, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312d, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31ba, 1}, + {0x31c0, 0x31e3, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fcb, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa4d0, 0xa62b, 1}, + {0xa640, 0xa673, 1}, + {0xa67c, 0xa697, 1}, + {0xa6a0, 0xa6f7, 1}, + {0xa700, 0xa78e, 1}, + {0xa790, 0xa791, 1}, + {0xa7a0, 0xa7a9, 1}, + {0xa7fa, 0xa82b, 1}, + {0xa830, 0xa839, 1}, + {0xa840, 0xa877, 1}, + {0xa880, 0xa8c4, 1}, + {0xa8ce, 0xa8d9, 1}, + {0xa8e0, 0xa8fb, 1}, + {0xa900, 0xa953, 1}, + {0xa95f, 0xa97c, 1}, + {0xa980, 0xa9cd, 1}, + {0xa9cf, 0xa9d9, 1}, + {0xa9de, 0xa9df, 1}, + {0xaa00, 0xaa36, 1}, + {0xaa40, 0xaa4d, 1}, + {0xaa50, 0xaa59, 1}, + {0xaa5c, 0xaa7b, 1}, + {0xaa80, 0xaac2, 1}, + {0xaadb, 0xaadf, 1}, + {0xab01, 0xab06, 1}, + {0xab09, 0xab0e, 1}, + {0xab11, 0xab16, 1}, + {0xab20, 0xab26, 1}, + {0xab28, 0xab2e, 1}, + {0xabc0, 0xabed, 1}, + {0xabf0, 0xabf9, 1}, + {0xac00, 0xd7a3, 1}, + {0xd7b0, 0xd7c6, 1}, + {0xd7cb, 0xd7fb, 1}, + {0xd800, 0xfa2d, 1}, + {0xfa30, 0xfa6d, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbc1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe26, 1}, + {0xfe30, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018a, 1}, + {0x00010190, 0x0001019b, 1}, + {0x000101d0, 0x000101fd, 1}, + {0x00010280, 0x0001029c, 1}, + {0x000102a0, 0x000102d0, 1}, + {0x00010300, 0x0001031e, 1}, + {0x00010320, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010840, 0x00010855, 1}, + {0x00010857, 0x0001085f, 1}, + {0x00010900, 0x0001091b, 1}, + {0x0001091f, 0x00010939, 1}, + {0x0001093f, 0x00010a00, 193}, + {0x00010a01, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x00010a60, 0x00010a7f, 1}, + {0x00010b00, 0x00010b35, 1}, + {0x00010b39, 0x00010b55, 1}, + {0x00010b58, 0x00010b72, 1}, + {0x00010b78, 0x00010b7f, 1}, + {0x00010c00, 0x00010c48, 1}, + {0x00010e60, 0x00010e7e, 1}, + {0x00011000, 0x0001104d, 1}, + {0x00011052, 0x0001106f, 1}, + {0x00011080, 0x000110c1, 1}, + {0x00012000, 0x0001236e, 1}, + {0x00012400, 0x00012462, 1}, + {0x00012470, 0x00012473, 1}, + {0x00013000, 0x0001342e, 1}, + {0x00016800, 0x00016a38, 1}, + {0x0001b000, 0x0001b001, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d129, 0x0001d1dd, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d360, 0x0001d371, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7cb, 1}, + {0x0001d7ce, 0x0001d7ff, 1}, + {0x0001f000, 0x0001f02b, 1}, + {0x0001f030, 0x0001f093, 1}, + {0x0001f0a0, 0x0001f0ae, 1}, + {0x0001f0b1, 0x0001f0be, 1}, + {0x0001f0c1, 0x0001f0cf, 1}, + {0x0001f0d1, 0x0001f0df, 1}, + {0x0001f100, 0x0001f10a, 1}, + {0x0001f110, 0x0001f12e, 1}, + {0x0001f130, 0x0001f169, 1}, + {0x0001f170, 0x0001f19a, 1}, + {0x0001f1e6, 0x0001f202, 1}, + {0x0001f210, 0x0001f23a, 1}, + {0x0001f240, 0x0001f248, 1}, + {0x0001f250, 0x0001f251, 1}, + {0x0001f300, 0x0001f320, 1}, + {0x0001f330, 0x0001f335, 1}, + {0x0001f337, 0x0001f37c, 1}, + {0x0001f380, 0x0001f393, 1}, + {0x0001f3a0, 0x0001f3c4, 1}, + {0x0001f3c6, 0x0001f3ca, 1}, + {0x0001f3e0, 0x0001f3f0, 1}, + {0x0001f400, 0x0001f43e, 1}, + {0x0001f440, 0x0001f442, 2}, + {0x0001f443, 0x0001f4f7, 1}, + {0x0001f4f9, 0x0001f4fc, 1}, + {0x0001f500, 0x0001f53d, 1}, + {0x0001f550, 0x0001f567, 1}, + {0x0001f5fb, 0x0001f5ff, 1}, + {0x0001f601, 0x0001f610, 1}, + {0x0001f612, 0x0001f614, 1}, + {0x0001f616, 0x0001f61c, 2}, + {0x0001f61d, 0x0001f61e, 1}, + {0x0001f620, 0x0001f625, 1}, + {0x0001f628, 0x0001f62b, 1}, + {0x0001f62d, 0x0001f630, 3}, + {0x0001f631, 0x0001f633, 1}, + {0x0001f635, 0x0001f640, 1}, + {0x0001f645, 0x0001f64f, 1}, + {0x0001f680, 0x0001f6c5, 1}, + {0x0001f700, 0x0001f773, 1}, + {0x00020000, 0x0002a6d6, 1}, + {0x0002a700, 0x0002b734, 1}, + {0x0002b740, 0x0002b81d, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// size 4898 bytes (4 KiB) +var assigned7_0_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x0377, 1}, + {0x037a, 0x037f, 1}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x052f, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x058d, 0x058f, 1}, + {0x0591, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x061c, 1}, + {0x061e, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x07b1, 1}, + {0x07c0, 0x07fa, 1}, + {0x0800, 0x082d, 1}, + {0x0830, 0x083e, 1}, + {0x0840, 0x085b, 1}, + {0x085e, 0x08a0, 66}, + {0x08a1, 0x08b2, 1}, + {0x08e4, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fb, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a51, 0x0a59, 8}, + {0x0a5a, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a75, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0af1, 1}, + {0x0b01, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b44, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b63, 1}, + {0x0b66, 0x0b77, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd0, 0x0bd7, 7}, + {0x0be6, 0x0bfa, 1}, + {0x0c00, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c39, 1}, + {0x0c3d, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c58, 0x0c59, 1}, + {0x0c60, 0x0c63, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c78, 0x0c7f, 1}, + {0x0c81, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce3, 1}, + {0x0ce6, 0x0cef, 1}, + {0x0cf1, 0x0cf2, 1}, + {0x0d01, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d3a, 1}, + {0x0d3d, 0x0d44, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4e, 1}, + {0x0d57, 0x0d60, 9}, + {0x0d61, 0x0d63, 1}, + {0x0d66, 0x0d75, 1}, + {0x0d79, 0x0d7f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0de6, 0x0def, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edf, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6c, 1}, + {0x0f71, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fce, 0x0fda, 1}, + {0x1000, 0x10c5, 1}, + {0x10c7, 0x10cd, 6}, + {0x10d0, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135d, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f4, 1}, + {0x1400, 0x169c, 1}, + {0x16a0, 0x16f8, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18aa, 1}, + {0x18b0, 0x18f5, 1}, + {0x1900, 0x191e, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19ab, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19da, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a5e, 1}, + {0x1a60, 0x1a7c, 1}, + {0x1a7f, 0x1a89, 1}, + {0x1a90, 0x1a99, 1}, + {0x1aa0, 0x1aad, 1}, + {0x1ab0, 0x1abe, 1}, + {0x1b00, 0x1b4b, 1}, + {0x1b50, 0x1b7c, 1}, + {0x1b80, 0x1bf3, 1}, + {0x1bfc, 0x1c37, 1}, + {0x1c3b, 0x1c49, 1}, + {0x1c4d, 0x1c7f, 1}, + {0x1cc0, 0x1cc7, 1}, + {0x1cd0, 0x1cf6, 1}, + {0x1cf8, 0x1cf9, 1}, + {0x1d00, 0x1df5, 1}, + {0x1dfc, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2064, 1}, + {0x2066, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x209c, 1}, + {0x20a0, 0x20bd, 1}, + {0x20d0, 0x20f0, 1}, + {0x2100, 0x2189, 1}, + {0x2190, 0x23fa, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x2b73, 1}, + {0x2b76, 0x2b95, 1}, + {0x2b98, 0x2bb9, 1}, + {0x2bbd, 0x2bc8, 1}, + {0x2bca, 0x2bd1, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c60, 0x2cf3, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d27, 0x2d2d, 6}, + {0x2d30, 0x2d67, 1}, + {0x2d6f, 0x2d70, 1}, + {0x2d7f, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2de0, 0x2e42, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312d, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31ba, 1}, + {0x31c0, 0x31e3, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fcc, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa4d0, 0xa62b, 1}, + {0xa640, 0xa69d, 1}, + {0xa69f, 0xa6f7, 1}, + {0xa700, 0xa78e, 1}, + {0xa790, 0xa7ad, 1}, + {0xa7b0, 0xa7b1, 1}, + {0xa7f7, 0xa82b, 1}, + {0xa830, 0xa839, 1}, + {0xa840, 0xa877, 1}, + {0xa880, 0xa8c4, 1}, + {0xa8ce, 0xa8d9, 1}, + {0xa8e0, 0xa8fb, 1}, + {0xa900, 0xa953, 1}, + {0xa95f, 0xa97c, 1}, + {0xa980, 0xa9cd, 1}, + {0xa9cf, 0xa9d9, 1}, + {0xa9de, 0xa9fe, 1}, + {0xaa00, 0xaa36, 1}, + {0xaa40, 0xaa4d, 1}, + {0xaa50, 0xaa59, 1}, + {0xaa5c, 0xaac2, 1}, + {0xaadb, 0xaaf6, 1}, + {0xab01, 0xab06, 1}, + {0xab09, 0xab0e, 1}, + {0xab11, 0xab16, 1}, + {0xab20, 0xab26, 1}, + {0xab28, 0xab2e, 1}, + {0xab30, 0xab5f, 1}, + {0xab64, 0xab65, 1}, + {0xabc0, 0xabed, 1}, + {0xabf0, 0xabf9, 1}, + {0xac00, 0xd7a3, 1}, + {0xd7b0, 0xd7c6, 1}, + {0xd7cb, 0xd7fb, 1}, + {0xd800, 0xfa6d, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbc1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe2d, 1}, + {0xfe30, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018c, 1}, + {0x00010190, 0x0001019b, 1}, + {0x000101a0, 0x000101d0, 48}, + {0x000101d1, 0x000101fd, 1}, + {0x00010280, 0x0001029c, 1}, + {0x000102a0, 0x000102d0, 1}, + {0x000102e0, 0x000102fb, 1}, + {0x00010300, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010350, 0x0001037a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x00010500, 0x00010527, 1}, + {0x00010530, 0x00010563, 1}, + {0x0001056f, 0x00010600, 145}, + {0x00010601, 0x00010736, 1}, + {0x00010740, 0x00010755, 1}, + {0x00010760, 0x00010767, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010840, 0x00010855, 1}, + {0x00010857, 0x0001089e, 1}, + {0x000108a7, 0x000108af, 1}, + {0x00010900, 0x0001091b, 1}, + {0x0001091f, 0x00010939, 1}, + {0x0001093f, 0x00010980, 65}, + {0x00010981, 0x000109b7, 1}, + {0x000109be, 0x000109bf, 1}, + {0x00010a00, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x00010a60, 0x00010a9f, 1}, + {0x00010ac0, 0x00010ae6, 1}, + {0x00010aeb, 0x00010af6, 1}, + {0x00010b00, 0x00010b35, 1}, + {0x00010b39, 0x00010b55, 1}, + {0x00010b58, 0x00010b72, 1}, + {0x00010b78, 0x00010b91, 1}, + {0x00010b99, 0x00010b9c, 1}, + {0x00010ba9, 0x00010baf, 1}, + {0x00010c00, 0x00010c48, 1}, + {0x00010e60, 0x00010e7e, 1}, + {0x00011000, 0x0001104d, 1}, + {0x00011052, 0x0001106f, 1}, + {0x0001107f, 0x000110c1, 1}, + {0x000110d0, 0x000110e8, 1}, + {0x000110f0, 0x000110f9, 1}, + {0x00011100, 0x00011134, 1}, + {0x00011136, 0x00011143, 1}, + {0x00011150, 0x00011176, 1}, + {0x00011180, 0x000111c8, 1}, + {0x000111cd, 0x000111d0, 3}, + {0x000111d1, 0x000111da, 1}, + {0x000111e1, 0x000111f4, 1}, + {0x00011200, 0x00011211, 1}, + {0x00011213, 0x0001123d, 1}, + {0x000112b0, 0x000112ea, 1}, + {0x000112f0, 0x000112f9, 1}, + {0x00011301, 0x00011303, 1}, + {0x00011305, 0x0001130c, 1}, + {0x0001130f, 0x00011310, 1}, + {0x00011313, 0x00011328, 1}, + {0x0001132a, 0x00011330, 1}, + {0x00011332, 0x00011333, 1}, + {0x00011335, 0x00011339, 1}, + {0x0001133c, 0x00011344, 1}, + {0x00011347, 0x00011348, 1}, + {0x0001134b, 0x0001134d, 1}, + {0x00011357, 0x0001135d, 6}, + {0x0001135e, 0x00011363, 1}, + {0x00011366, 0x0001136c, 1}, + {0x00011370, 0x00011374, 1}, + {0x00011480, 0x000114c7, 1}, + {0x000114d0, 0x000114d9, 1}, + {0x00011580, 0x000115b5, 1}, + {0x000115b8, 0x000115c9, 1}, + {0x00011600, 0x00011644, 1}, + {0x00011650, 0x00011659, 1}, + {0x00011680, 0x000116b7, 1}, + {0x000116c0, 0x000116c9, 1}, + {0x000118a0, 0x000118f2, 1}, + {0x000118ff, 0x00011ac0, 449}, + {0x00011ac1, 0x00011af8, 1}, + {0x00012000, 0x00012398, 1}, + {0x00012400, 0x0001246e, 1}, + {0x00012470, 0x00012474, 1}, + {0x00013000, 0x0001342e, 1}, + {0x00016800, 0x00016a38, 1}, + {0x00016a40, 0x00016a5e, 1}, + {0x00016a60, 0x00016a69, 1}, + {0x00016a6e, 0x00016a6f, 1}, + {0x00016ad0, 0x00016aed, 1}, + {0x00016af0, 0x00016af5, 1}, + {0x00016b00, 0x00016b45, 1}, + {0x00016b50, 0x00016b59, 1}, + {0x00016b5b, 0x00016b61, 1}, + {0x00016b63, 0x00016b77, 1}, + {0x00016b7d, 0x00016b8f, 1}, + {0x00016f00, 0x00016f44, 1}, + {0x00016f50, 0x00016f7e, 1}, + {0x00016f8f, 0x00016f9f, 1}, + {0x0001b000, 0x0001b001, 1}, + {0x0001bc00, 0x0001bc6a, 1}, + {0x0001bc70, 0x0001bc7c, 1}, + {0x0001bc80, 0x0001bc88, 1}, + {0x0001bc90, 0x0001bc99, 1}, + {0x0001bc9c, 0x0001bca3, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d129, 0x0001d1dd, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d360, 0x0001d371, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7cb, 1}, + {0x0001d7ce, 0x0001d7ff, 1}, + {0x0001e800, 0x0001e8c4, 1}, + {0x0001e8c7, 0x0001e8d6, 1}, + {0x0001ee00, 0x0001ee03, 1}, + {0x0001ee05, 0x0001ee1f, 1}, + {0x0001ee21, 0x0001ee22, 1}, + {0x0001ee24, 0x0001ee27, 3}, + {0x0001ee29, 0x0001ee32, 1}, + {0x0001ee34, 0x0001ee37, 1}, + {0x0001ee39, 0x0001ee3b, 2}, + {0x0001ee42, 0x0001ee47, 5}, + {0x0001ee49, 0x0001ee4d, 2}, + {0x0001ee4e, 0x0001ee4f, 1}, + {0x0001ee51, 0x0001ee52, 1}, + {0x0001ee54, 0x0001ee57, 3}, + {0x0001ee59, 0x0001ee61, 2}, + {0x0001ee62, 0x0001ee64, 2}, + {0x0001ee67, 0x0001ee6a, 1}, + {0x0001ee6c, 0x0001ee72, 1}, + {0x0001ee74, 0x0001ee77, 1}, + {0x0001ee79, 0x0001ee7c, 1}, + {0x0001ee7e, 0x0001ee80, 2}, + {0x0001ee81, 0x0001ee89, 1}, + {0x0001ee8b, 0x0001ee9b, 1}, + {0x0001eea1, 0x0001eea3, 1}, + {0x0001eea5, 0x0001eea9, 1}, + {0x0001eeab, 0x0001eebb, 1}, + {0x0001eef0, 0x0001eef1, 1}, + {0x0001f000, 0x0001f02b, 1}, + {0x0001f030, 0x0001f093, 1}, + {0x0001f0a0, 0x0001f0ae, 1}, + {0x0001f0b1, 0x0001f0bf, 1}, + {0x0001f0c1, 0x0001f0cf, 1}, + {0x0001f0d1, 0x0001f0f5, 1}, + {0x0001f100, 0x0001f10c, 1}, + {0x0001f110, 0x0001f12e, 1}, + {0x0001f130, 0x0001f16b, 1}, + {0x0001f170, 0x0001f19a, 1}, + {0x0001f1e6, 0x0001f202, 1}, + {0x0001f210, 0x0001f23a, 1}, + {0x0001f240, 0x0001f248, 1}, + {0x0001f250, 0x0001f251, 1}, + {0x0001f300, 0x0001f32c, 1}, + {0x0001f330, 0x0001f37d, 1}, + {0x0001f380, 0x0001f3ce, 1}, + {0x0001f3d4, 0x0001f3f7, 1}, + {0x0001f400, 0x0001f4fe, 1}, + {0x0001f500, 0x0001f54a, 1}, + {0x0001f550, 0x0001f579, 1}, + {0x0001f57b, 0x0001f5a3, 1}, + {0x0001f5a5, 0x0001f642, 1}, + {0x0001f645, 0x0001f6cf, 1}, + {0x0001f6e0, 0x0001f6ec, 1}, + {0x0001f6f0, 0x0001f6f3, 1}, + {0x0001f700, 0x0001f773, 1}, + {0x0001f780, 0x0001f7d4, 1}, + {0x0001f800, 0x0001f80b, 1}, + {0x0001f810, 0x0001f847, 1}, + {0x0001f850, 0x0001f859, 1}, + {0x0001f860, 0x0001f887, 1}, + {0x0001f890, 0x0001f8ad, 1}, + {0x00020000, 0x0002a6d6, 1}, + {0x0002a700, 0x0002b734, 1}, + {0x0002b740, 0x0002b81d, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// size 5048 bytes (4 KiB) +var assigned8_0_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x0377, 1}, + {0x037a, 0x037f, 1}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x052f, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x058d, 0x058f, 1}, + {0x0591, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x061c, 1}, + {0x061e, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x07b1, 1}, + {0x07c0, 0x07fa, 1}, + {0x0800, 0x082d, 1}, + {0x0830, 0x083e, 1}, + {0x0840, 0x085b, 1}, + {0x085e, 0x08a0, 66}, + {0x08a1, 0x08b4, 1}, + {0x08e3, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fb, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a51, 0x0a59, 8}, + {0x0a5a, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a75, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0af1, 1}, + {0x0af9, 0x0b01, 8}, + {0x0b02, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b44, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b63, 1}, + {0x0b66, 0x0b77, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd0, 0x0bd7, 7}, + {0x0be6, 0x0bfa, 1}, + {0x0c00, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c39, 1}, + {0x0c3d, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c58, 0x0c5a, 1}, + {0x0c60, 0x0c63, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c78, 0x0c7f, 1}, + {0x0c81, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce3, 1}, + {0x0ce6, 0x0cef, 1}, + {0x0cf1, 0x0cf2, 1}, + {0x0d01, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d3a, 1}, + {0x0d3d, 0x0d44, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4e, 1}, + {0x0d57, 0x0d5f, 8}, + {0x0d60, 0x0d63, 1}, + {0x0d66, 0x0d75, 1}, + {0x0d79, 0x0d7f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0de6, 0x0def, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edf, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6c, 1}, + {0x0f71, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fce, 0x0fda, 1}, + {0x1000, 0x10c5, 1}, + {0x10c7, 0x10cd, 6}, + {0x10d0, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135d, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f5, 1}, + {0x13f8, 0x13fd, 1}, + {0x1400, 0x169c, 1}, + {0x16a0, 0x16f8, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18aa, 1}, + {0x18b0, 0x18f5, 1}, + {0x1900, 0x191e, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19ab, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19da, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a5e, 1}, + {0x1a60, 0x1a7c, 1}, + {0x1a7f, 0x1a89, 1}, + {0x1a90, 0x1a99, 1}, + {0x1aa0, 0x1aad, 1}, + {0x1ab0, 0x1abe, 1}, + {0x1b00, 0x1b4b, 1}, + {0x1b50, 0x1b7c, 1}, + {0x1b80, 0x1bf3, 1}, + {0x1bfc, 0x1c37, 1}, + {0x1c3b, 0x1c49, 1}, + {0x1c4d, 0x1c7f, 1}, + {0x1cc0, 0x1cc7, 1}, + {0x1cd0, 0x1cf6, 1}, + {0x1cf8, 0x1cf9, 1}, + {0x1d00, 0x1df5, 1}, + {0x1dfc, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2064, 1}, + {0x2066, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x209c, 1}, + {0x20a0, 0x20be, 1}, + {0x20d0, 0x20f0, 1}, + {0x2100, 0x218b, 1}, + {0x2190, 0x23fa, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x2b73, 1}, + {0x2b76, 0x2b95, 1}, + {0x2b98, 0x2bb9, 1}, + {0x2bbd, 0x2bc8, 1}, + {0x2bca, 0x2bd1, 1}, + {0x2bec, 0x2bef, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c60, 0x2cf3, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d27, 0x2d2d, 6}, + {0x2d30, 0x2d67, 1}, + {0x2d6f, 0x2d70, 1}, + {0x2d7f, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2de0, 0x2e42, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312d, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31ba, 1}, + {0x31c0, 0x31e3, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fd5, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa4d0, 0xa62b, 1}, + {0xa640, 0xa6f7, 1}, + {0xa700, 0xa7ad, 1}, + {0xa7b0, 0xa7b7, 1}, + {0xa7f7, 0xa82b, 1}, + {0xa830, 0xa839, 1}, + {0xa840, 0xa877, 1}, + {0xa880, 0xa8c4, 1}, + {0xa8ce, 0xa8d9, 1}, + {0xa8e0, 0xa8fd, 1}, + {0xa900, 0xa953, 1}, + {0xa95f, 0xa97c, 1}, + {0xa980, 0xa9cd, 1}, + {0xa9cf, 0xa9d9, 1}, + {0xa9de, 0xa9fe, 1}, + {0xaa00, 0xaa36, 1}, + {0xaa40, 0xaa4d, 1}, + {0xaa50, 0xaa59, 1}, + {0xaa5c, 0xaac2, 1}, + {0xaadb, 0xaaf6, 1}, + {0xab01, 0xab06, 1}, + {0xab09, 0xab0e, 1}, + {0xab11, 0xab16, 1}, + {0xab20, 0xab26, 1}, + {0xab28, 0xab2e, 1}, + {0xab30, 0xab65, 1}, + {0xab70, 0xabed, 1}, + {0xabf0, 0xabf9, 1}, + {0xac00, 0xd7a3, 1}, + {0xd7b0, 0xd7c6, 1}, + {0xd7cb, 0xd7fb, 1}, + {0xd800, 0xfa6d, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbc1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018c, 1}, + {0x00010190, 0x0001019b, 1}, + {0x000101a0, 0x000101d0, 48}, + {0x000101d1, 0x000101fd, 1}, + {0x00010280, 0x0001029c, 1}, + {0x000102a0, 0x000102d0, 1}, + {0x000102e0, 0x000102fb, 1}, + {0x00010300, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010350, 0x0001037a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x00010500, 0x00010527, 1}, + {0x00010530, 0x00010563, 1}, + {0x0001056f, 0x00010600, 145}, + {0x00010601, 0x00010736, 1}, + {0x00010740, 0x00010755, 1}, + {0x00010760, 0x00010767, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010840, 0x00010855, 1}, + {0x00010857, 0x0001089e, 1}, + {0x000108a7, 0x000108af, 1}, + {0x000108e0, 0x000108f2, 1}, + {0x000108f4, 0x000108f5, 1}, + {0x000108fb, 0x0001091b, 1}, + {0x0001091f, 0x00010939, 1}, + {0x0001093f, 0x00010980, 65}, + {0x00010981, 0x000109b7, 1}, + {0x000109bc, 0x000109cf, 1}, + {0x000109d2, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x00010a60, 0x00010a9f, 1}, + {0x00010ac0, 0x00010ae6, 1}, + {0x00010aeb, 0x00010af6, 1}, + {0x00010b00, 0x00010b35, 1}, + {0x00010b39, 0x00010b55, 1}, + {0x00010b58, 0x00010b72, 1}, + {0x00010b78, 0x00010b91, 1}, + {0x00010b99, 0x00010b9c, 1}, + {0x00010ba9, 0x00010baf, 1}, + {0x00010c00, 0x00010c48, 1}, + {0x00010c80, 0x00010cb2, 1}, + {0x00010cc0, 0x00010cf2, 1}, + {0x00010cfa, 0x00010cff, 1}, + {0x00010e60, 0x00010e7e, 1}, + {0x00011000, 0x0001104d, 1}, + {0x00011052, 0x0001106f, 1}, + {0x0001107f, 0x000110c1, 1}, + {0x000110d0, 0x000110e8, 1}, + {0x000110f0, 0x000110f9, 1}, + {0x00011100, 0x00011134, 1}, + {0x00011136, 0x00011143, 1}, + {0x00011150, 0x00011176, 1}, + {0x00011180, 0x000111cd, 1}, + {0x000111d0, 0x000111df, 1}, + {0x000111e1, 0x000111f4, 1}, + {0x00011200, 0x00011211, 1}, + {0x00011213, 0x0001123d, 1}, + {0x00011280, 0x00011286, 1}, + {0x00011288, 0x0001128a, 2}, + {0x0001128b, 0x0001128d, 1}, + {0x0001128f, 0x0001129d, 1}, + {0x0001129f, 0x000112a9, 1}, + {0x000112b0, 0x000112ea, 1}, + {0x000112f0, 0x000112f9, 1}, + {0x00011300, 0x00011303, 1}, + {0x00011305, 0x0001130c, 1}, + {0x0001130f, 0x00011310, 1}, + {0x00011313, 0x00011328, 1}, + {0x0001132a, 0x00011330, 1}, + {0x00011332, 0x00011333, 1}, + {0x00011335, 0x00011339, 1}, + {0x0001133c, 0x00011344, 1}, + {0x00011347, 0x00011348, 1}, + {0x0001134b, 0x0001134d, 1}, + {0x00011350, 0x00011357, 7}, + {0x0001135d, 0x00011363, 1}, + {0x00011366, 0x0001136c, 1}, + {0x00011370, 0x00011374, 1}, + {0x00011480, 0x000114c7, 1}, + {0x000114d0, 0x000114d9, 1}, + {0x00011580, 0x000115b5, 1}, + {0x000115b8, 0x000115dd, 1}, + {0x00011600, 0x00011644, 1}, + {0x00011650, 0x00011659, 1}, + {0x00011680, 0x000116b7, 1}, + {0x000116c0, 0x000116c9, 1}, + {0x00011700, 0x00011719, 1}, + {0x0001171d, 0x0001172b, 1}, + {0x00011730, 0x0001173f, 1}, + {0x000118a0, 0x000118f2, 1}, + {0x000118ff, 0x00011ac0, 449}, + {0x00011ac1, 0x00011af8, 1}, + {0x00012000, 0x00012399, 1}, + {0x00012400, 0x0001246e, 1}, + {0x00012470, 0x00012474, 1}, + {0x00012480, 0x00012543, 1}, + {0x00013000, 0x0001342e, 1}, + {0x00014400, 0x00014646, 1}, + {0x00016800, 0x00016a38, 1}, + {0x00016a40, 0x00016a5e, 1}, + {0x00016a60, 0x00016a69, 1}, + {0x00016a6e, 0x00016a6f, 1}, + {0x00016ad0, 0x00016aed, 1}, + {0x00016af0, 0x00016af5, 1}, + {0x00016b00, 0x00016b45, 1}, + {0x00016b50, 0x00016b59, 1}, + {0x00016b5b, 0x00016b61, 1}, + {0x00016b63, 0x00016b77, 1}, + {0x00016b7d, 0x00016b8f, 1}, + {0x00016f00, 0x00016f44, 1}, + {0x00016f50, 0x00016f7e, 1}, + {0x00016f8f, 0x00016f9f, 1}, + {0x0001b000, 0x0001b001, 1}, + {0x0001bc00, 0x0001bc6a, 1}, + {0x0001bc70, 0x0001bc7c, 1}, + {0x0001bc80, 0x0001bc88, 1}, + {0x0001bc90, 0x0001bc99, 1}, + {0x0001bc9c, 0x0001bca3, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d129, 0x0001d1e8, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d360, 0x0001d371, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7cb, 1}, + {0x0001d7ce, 0x0001da8b, 1}, + {0x0001da9b, 0x0001da9f, 1}, + {0x0001daa1, 0x0001daaf, 1}, + {0x0001e800, 0x0001e8c4, 1}, + {0x0001e8c7, 0x0001e8d6, 1}, + {0x0001ee00, 0x0001ee03, 1}, + {0x0001ee05, 0x0001ee1f, 1}, + {0x0001ee21, 0x0001ee22, 1}, + {0x0001ee24, 0x0001ee27, 3}, + {0x0001ee29, 0x0001ee32, 1}, + {0x0001ee34, 0x0001ee37, 1}, + {0x0001ee39, 0x0001ee3b, 2}, + {0x0001ee42, 0x0001ee47, 5}, + {0x0001ee49, 0x0001ee4d, 2}, + {0x0001ee4e, 0x0001ee4f, 1}, + {0x0001ee51, 0x0001ee52, 1}, + {0x0001ee54, 0x0001ee57, 3}, + {0x0001ee59, 0x0001ee61, 2}, + {0x0001ee62, 0x0001ee64, 2}, + {0x0001ee67, 0x0001ee6a, 1}, + {0x0001ee6c, 0x0001ee72, 1}, + {0x0001ee74, 0x0001ee77, 1}, + {0x0001ee79, 0x0001ee7c, 1}, + {0x0001ee7e, 0x0001ee80, 2}, + {0x0001ee81, 0x0001ee89, 1}, + {0x0001ee8b, 0x0001ee9b, 1}, + {0x0001eea1, 0x0001eea3, 1}, + {0x0001eea5, 0x0001eea9, 1}, + {0x0001eeab, 0x0001eebb, 1}, + {0x0001eef0, 0x0001eef1, 1}, + {0x0001f000, 0x0001f02b, 1}, + {0x0001f030, 0x0001f093, 1}, + {0x0001f0a0, 0x0001f0ae, 1}, + {0x0001f0b1, 0x0001f0bf, 1}, + {0x0001f0c1, 0x0001f0cf, 1}, + {0x0001f0d1, 0x0001f0f5, 1}, + {0x0001f100, 0x0001f10c, 1}, + {0x0001f110, 0x0001f12e, 1}, + {0x0001f130, 0x0001f16b, 1}, + {0x0001f170, 0x0001f19a, 1}, + {0x0001f1e6, 0x0001f202, 1}, + {0x0001f210, 0x0001f23a, 1}, + {0x0001f240, 0x0001f248, 1}, + {0x0001f250, 0x0001f251, 1}, + {0x0001f300, 0x0001f579, 1}, + {0x0001f57b, 0x0001f5a3, 1}, + {0x0001f5a5, 0x0001f6d0, 1}, + {0x0001f6e0, 0x0001f6ec, 1}, + {0x0001f6f0, 0x0001f6f3, 1}, + {0x0001f700, 0x0001f773, 1}, + {0x0001f780, 0x0001f7d4, 1}, + {0x0001f800, 0x0001f80b, 1}, + {0x0001f810, 0x0001f847, 1}, + {0x0001f850, 0x0001f859, 1}, + {0x0001f860, 0x0001f887, 1}, + {0x0001f890, 0x0001f8ad, 1}, + {0x0001f910, 0x0001f918, 1}, + {0x0001f980, 0x0001f984, 1}, + {0x0001f9c0, 0x00020000, 1600}, + {0x00020001, 0x0002a6d6, 1}, + {0x0002a700, 0x0002b734, 1}, + {0x0002b740, 0x0002b81d, 1}, + {0x0002b820, 0x0002cea1, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// size 5348 bytes (5 KiB) +var assigned9_0_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x0377, 1}, + {0x037a, 0x037f, 1}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x052f, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x058d, 0x058f, 1}, + {0x0591, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x061c, 1}, + {0x061e, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x07b1, 1}, + {0x07c0, 0x07fa, 1}, + {0x0800, 0x082d, 1}, + {0x0830, 0x083e, 1}, + {0x0840, 0x085b, 1}, + {0x085e, 0x08a0, 66}, + {0x08a1, 0x08b4, 1}, + {0x08b6, 0x08bd, 1}, + {0x08d4, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fb, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a51, 0x0a59, 8}, + {0x0a5a, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a75, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0af1, 1}, + {0x0af9, 0x0b01, 8}, + {0x0b02, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b44, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b63, 1}, + {0x0b66, 0x0b77, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd0, 0x0bd7, 7}, + {0x0be6, 0x0bfa, 1}, + {0x0c00, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c39, 1}, + {0x0c3d, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c58, 0x0c5a, 1}, + {0x0c60, 0x0c63, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c78, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce3, 1}, + {0x0ce6, 0x0cef, 1}, + {0x0cf1, 0x0cf2, 1}, + {0x0d01, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d3a, 1}, + {0x0d3d, 0x0d44, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4f, 1}, + {0x0d54, 0x0d63, 1}, + {0x0d66, 0x0d7f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0de6, 0x0def, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edf, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6c, 1}, + {0x0f71, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fce, 0x0fda, 1}, + {0x1000, 0x10c5, 1}, + {0x10c7, 0x10cd, 6}, + {0x10d0, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135d, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f5, 1}, + {0x13f8, 0x13fd, 1}, + {0x1400, 0x169c, 1}, + {0x16a0, 0x16f8, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18aa, 1}, + {0x18b0, 0x18f5, 1}, + {0x1900, 0x191e, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19ab, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19da, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a5e, 1}, + {0x1a60, 0x1a7c, 1}, + {0x1a7f, 0x1a89, 1}, + {0x1a90, 0x1a99, 1}, + {0x1aa0, 0x1aad, 1}, + {0x1ab0, 0x1abe, 1}, + {0x1b00, 0x1b4b, 1}, + {0x1b50, 0x1b7c, 1}, + {0x1b80, 0x1bf3, 1}, + {0x1bfc, 0x1c37, 1}, + {0x1c3b, 0x1c49, 1}, + {0x1c4d, 0x1c88, 1}, + {0x1cc0, 0x1cc7, 1}, + {0x1cd0, 0x1cf6, 1}, + {0x1cf8, 0x1cf9, 1}, + {0x1d00, 0x1df5, 1}, + {0x1dfb, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2064, 1}, + {0x2066, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x209c, 1}, + {0x20a0, 0x20be, 1}, + {0x20d0, 0x20f0, 1}, + {0x2100, 0x218b, 1}, + {0x2190, 0x23fe, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x2b73, 1}, + {0x2b76, 0x2b95, 1}, + {0x2b98, 0x2bb9, 1}, + {0x2bbd, 0x2bc8, 1}, + {0x2bca, 0x2bd1, 1}, + {0x2bec, 0x2bef, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c60, 0x2cf3, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d27, 0x2d2d, 6}, + {0x2d30, 0x2d67, 1}, + {0x2d6f, 0x2d70, 1}, + {0x2d7f, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2de0, 0x2e44, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312d, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31ba, 1}, + {0x31c0, 0x31e3, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fd5, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa4d0, 0xa62b, 1}, + {0xa640, 0xa6f7, 1}, + {0xa700, 0xa7ae, 1}, + {0xa7b0, 0xa7b7, 1}, + {0xa7f7, 0xa82b, 1}, + {0xa830, 0xa839, 1}, + {0xa840, 0xa877, 1}, + {0xa880, 0xa8c5, 1}, + {0xa8ce, 0xa8d9, 1}, + {0xa8e0, 0xa8fd, 1}, + {0xa900, 0xa953, 1}, + {0xa95f, 0xa97c, 1}, + {0xa980, 0xa9cd, 1}, + {0xa9cf, 0xa9d9, 1}, + {0xa9de, 0xa9fe, 1}, + {0xaa00, 0xaa36, 1}, + {0xaa40, 0xaa4d, 1}, + {0xaa50, 0xaa59, 1}, + {0xaa5c, 0xaac2, 1}, + {0xaadb, 0xaaf6, 1}, + {0xab01, 0xab06, 1}, + {0xab09, 0xab0e, 1}, + {0xab11, 0xab16, 1}, + {0xab20, 0xab26, 1}, + {0xab28, 0xab2e, 1}, + {0xab30, 0xab65, 1}, + {0xab70, 0xabed, 1}, + {0xabf0, 0xabf9, 1}, + {0xac00, 0xd7a3, 1}, + {0xd7b0, 0xd7c6, 1}, + {0xd7cb, 0xd7fb, 1}, + {0xd800, 0xfa6d, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbc1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018e, 1}, + {0x00010190, 0x0001019b, 1}, + {0x000101a0, 0x000101d0, 48}, + {0x000101d1, 0x000101fd, 1}, + {0x00010280, 0x0001029c, 1}, + {0x000102a0, 0x000102d0, 1}, + {0x000102e0, 0x000102fb, 1}, + {0x00010300, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010350, 0x0001037a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x000104b0, 0x000104d3, 1}, + {0x000104d8, 0x000104fb, 1}, + {0x00010500, 0x00010527, 1}, + {0x00010530, 0x00010563, 1}, + {0x0001056f, 0x00010600, 145}, + {0x00010601, 0x00010736, 1}, + {0x00010740, 0x00010755, 1}, + {0x00010760, 0x00010767, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010840, 0x00010855, 1}, + {0x00010857, 0x0001089e, 1}, + {0x000108a7, 0x000108af, 1}, + {0x000108e0, 0x000108f2, 1}, + {0x000108f4, 0x000108f5, 1}, + {0x000108fb, 0x0001091b, 1}, + {0x0001091f, 0x00010939, 1}, + {0x0001093f, 0x00010980, 65}, + {0x00010981, 0x000109b7, 1}, + {0x000109bc, 0x000109cf, 1}, + {0x000109d2, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x00010a60, 0x00010a9f, 1}, + {0x00010ac0, 0x00010ae6, 1}, + {0x00010aeb, 0x00010af6, 1}, + {0x00010b00, 0x00010b35, 1}, + {0x00010b39, 0x00010b55, 1}, + {0x00010b58, 0x00010b72, 1}, + {0x00010b78, 0x00010b91, 1}, + {0x00010b99, 0x00010b9c, 1}, + {0x00010ba9, 0x00010baf, 1}, + {0x00010c00, 0x00010c48, 1}, + {0x00010c80, 0x00010cb2, 1}, + {0x00010cc0, 0x00010cf2, 1}, + {0x00010cfa, 0x00010cff, 1}, + {0x00010e60, 0x00010e7e, 1}, + {0x00011000, 0x0001104d, 1}, + {0x00011052, 0x0001106f, 1}, + {0x0001107f, 0x000110c1, 1}, + {0x000110d0, 0x000110e8, 1}, + {0x000110f0, 0x000110f9, 1}, + {0x00011100, 0x00011134, 1}, + {0x00011136, 0x00011143, 1}, + {0x00011150, 0x00011176, 1}, + {0x00011180, 0x000111cd, 1}, + {0x000111d0, 0x000111df, 1}, + {0x000111e1, 0x000111f4, 1}, + {0x00011200, 0x00011211, 1}, + {0x00011213, 0x0001123e, 1}, + {0x00011280, 0x00011286, 1}, + {0x00011288, 0x0001128a, 2}, + {0x0001128b, 0x0001128d, 1}, + {0x0001128f, 0x0001129d, 1}, + {0x0001129f, 0x000112a9, 1}, + {0x000112b0, 0x000112ea, 1}, + {0x000112f0, 0x000112f9, 1}, + {0x00011300, 0x00011303, 1}, + {0x00011305, 0x0001130c, 1}, + {0x0001130f, 0x00011310, 1}, + {0x00011313, 0x00011328, 1}, + {0x0001132a, 0x00011330, 1}, + {0x00011332, 0x00011333, 1}, + {0x00011335, 0x00011339, 1}, + {0x0001133c, 0x00011344, 1}, + {0x00011347, 0x00011348, 1}, + {0x0001134b, 0x0001134d, 1}, + {0x00011350, 0x00011357, 7}, + {0x0001135d, 0x00011363, 1}, + {0x00011366, 0x0001136c, 1}, + {0x00011370, 0x00011374, 1}, + {0x00011400, 0x00011459, 1}, + {0x0001145b, 0x0001145d, 2}, + {0x00011480, 0x000114c7, 1}, + {0x000114d0, 0x000114d9, 1}, + {0x00011580, 0x000115b5, 1}, + {0x000115b8, 0x000115dd, 1}, + {0x00011600, 0x00011644, 1}, + {0x00011650, 0x00011659, 1}, + {0x00011660, 0x0001166c, 1}, + {0x00011680, 0x000116b7, 1}, + {0x000116c0, 0x000116c9, 1}, + {0x00011700, 0x00011719, 1}, + {0x0001171d, 0x0001172b, 1}, + {0x00011730, 0x0001173f, 1}, + {0x000118a0, 0x000118f2, 1}, + {0x000118ff, 0x00011ac0, 449}, + {0x00011ac1, 0x00011af8, 1}, + {0x00011c00, 0x00011c08, 1}, + {0x00011c0a, 0x00011c36, 1}, + {0x00011c38, 0x00011c45, 1}, + {0x00011c50, 0x00011c6c, 1}, + {0x00011c70, 0x00011c8f, 1}, + {0x00011c92, 0x00011ca7, 1}, + {0x00011ca9, 0x00011cb6, 1}, + {0x00012000, 0x00012399, 1}, + {0x00012400, 0x0001246e, 1}, + {0x00012470, 0x00012474, 1}, + {0x00012480, 0x00012543, 1}, + {0x00013000, 0x0001342e, 1}, + {0x00014400, 0x00014646, 1}, + {0x00016800, 0x00016a38, 1}, + {0x00016a40, 0x00016a5e, 1}, + {0x00016a60, 0x00016a69, 1}, + {0x00016a6e, 0x00016a6f, 1}, + {0x00016ad0, 0x00016aed, 1}, + {0x00016af0, 0x00016af5, 1}, + {0x00016b00, 0x00016b45, 1}, + {0x00016b50, 0x00016b59, 1}, + {0x00016b5b, 0x00016b61, 1}, + {0x00016b63, 0x00016b77, 1}, + {0x00016b7d, 0x00016b8f, 1}, + {0x00016f00, 0x00016f44, 1}, + {0x00016f50, 0x00016f7e, 1}, + {0x00016f8f, 0x00016f9f, 1}, + {0x00016fe0, 0x00017000, 32}, + {0x00017001, 0x000187ec, 1}, + {0x00018800, 0x00018af2, 1}, + {0x0001b000, 0x0001b001, 1}, + {0x0001bc00, 0x0001bc6a, 1}, + {0x0001bc70, 0x0001bc7c, 1}, + {0x0001bc80, 0x0001bc88, 1}, + {0x0001bc90, 0x0001bc99, 1}, + {0x0001bc9c, 0x0001bca3, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d129, 0x0001d1e8, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d360, 0x0001d371, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7cb, 1}, + {0x0001d7ce, 0x0001da8b, 1}, + {0x0001da9b, 0x0001da9f, 1}, + {0x0001daa1, 0x0001daaf, 1}, + {0x0001e000, 0x0001e006, 1}, + {0x0001e008, 0x0001e018, 1}, + {0x0001e01b, 0x0001e021, 1}, + {0x0001e023, 0x0001e024, 1}, + {0x0001e026, 0x0001e02a, 1}, + {0x0001e800, 0x0001e8c4, 1}, + {0x0001e8c7, 0x0001e8d6, 1}, + {0x0001e900, 0x0001e94a, 1}, + {0x0001e950, 0x0001e959, 1}, + {0x0001e95e, 0x0001e95f, 1}, + {0x0001ee00, 0x0001ee03, 1}, + {0x0001ee05, 0x0001ee1f, 1}, + {0x0001ee21, 0x0001ee22, 1}, + {0x0001ee24, 0x0001ee27, 3}, + {0x0001ee29, 0x0001ee32, 1}, + {0x0001ee34, 0x0001ee37, 1}, + {0x0001ee39, 0x0001ee3b, 2}, + {0x0001ee42, 0x0001ee47, 5}, + {0x0001ee49, 0x0001ee4d, 2}, + {0x0001ee4e, 0x0001ee4f, 1}, + {0x0001ee51, 0x0001ee52, 1}, + {0x0001ee54, 0x0001ee57, 3}, + {0x0001ee59, 0x0001ee61, 2}, + {0x0001ee62, 0x0001ee64, 2}, + {0x0001ee67, 0x0001ee6a, 1}, + {0x0001ee6c, 0x0001ee72, 1}, + {0x0001ee74, 0x0001ee77, 1}, + {0x0001ee79, 0x0001ee7c, 1}, + {0x0001ee7e, 0x0001ee80, 2}, + {0x0001ee81, 0x0001ee89, 1}, + {0x0001ee8b, 0x0001ee9b, 1}, + {0x0001eea1, 0x0001eea3, 1}, + {0x0001eea5, 0x0001eea9, 1}, + {0x0001eeab, 0x0001eebb, 1}, + {0x0001eef0, 0x0001eef1, 1}, + {0x0001f000, 0x0001f02b, 1}, + {0x0001f030, 0x0001f093, 1}, + {0x0001f0a0, 0x0001f0ae, 1}, + {0x0001f0b1, 0x0001f0bf, 1}, + {0x0001f0c1, 0x0001f0cf, 1}, + {0x0001f0d1, 0x0001f0f5, 1}, + {0x0001f100, 0x0001f10c, 1}, + {0x0001f110, 0x0001f12e, 1}, + {0x0001f130, 0x0001f16b, 1}, + {0x0001f170, 0x0001f1ac, 1}, + {0x0001f1e6, 0x0001f202, 1}, + {0x0001f210, 0x0001f23b, 1}, + {0x0001f240, 0x0001f248, 1}, + {0x0001f250, 0x0001f251, 1}, + {0x0001f300, 0x0001f6d2, 1}, + {0x0001f6e0, 0x0001f6ec, 1}, + {0x0001f6f0, 0x0001f6f6, 1}, + {0x0001f700, 0x0001f773, 1}, + {0x0001f780, 0x0001f7d4, 1}, + {0x0001f800, 0x0001f80b, 1}, + {0x0001f810, 0x0001f847, 1}, + {0x0001f850, 0x0001f859, 1}, + {0x0001f860, 0x0001f887, 1}, + {0x0001f890, 0x0001f8ad, 1}, + {0x0001f910, 0x0001f91e, 1}, + {0x0001f920, 0x0001f927, 1}, + {0x0001f930, 0x0001f933, 3}, + {0x0001f934, 0x0001f93e, 1}, + {0x0001f940, 0x0001f94b, 1}, + {0x0001f950, 0x0001f95e, 1}, + {0x0001f980, 0x0001f991, 1}, + {0x0001f9c0, 0x00020000, 1600}, + {0x00020001, 0x0002a6d6, 1}, + {0x0002a700, 0x0002b734, 1}, + {0x0002b740, 0x0002b81d, 1}, + {0x0002b820, 0x0002cea1, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// size 5492 bytes (5 KiB) +var assigned10_0_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x0377, 1}, + {0x037a, 0x037f, 1}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x052f, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x058d, 0x058f, 1}, + {0x0591, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x061c, 1}, + {0x061e, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x07b1, 1}, + {0x07c0, 0x07fa, 1}, + {0x0800, 0x082d, 1}, + {0x0830, 0x083e, 1}, + {0x0840, 0x085b, 1}, + {0x085e, 0x0860, 2}, + {0x0861, 0x086a, 1}, + {0x08a0, 0x08b4, 1}, + {0x08b6, 0x08bd, 1}, + {0x08d4, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fd, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a51, 0x0a59, 8}, + {0x0a5a, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a75, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0af1, 1}, + {0x0af9, 0x0aff, 1}, + {0x0b01, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b44, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b63, 1}, + {0x0b66, 0x0b77, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd0, 0x0bd7, 7}, + {0x0be6, 0x0bfa, 1}, + {0x0c00, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c39, 1}, + {0x0c3d, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c58, 0x0c5a, 1}, + {0x0c60, 0x0c63, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c78, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce3, 1}, + {0x0ce6, 0x0cef, 1}, + {0x0cf1, 0x0cf2, 1}, + {0x0d00, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d44, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4f, 1}, + {0x0d54, 0x0d63, 1}, + {0x0d66, 0x0d7f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0de6, 0x0def, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edf, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6c, 1}, + {0x0f71, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fce, 0x0fda, 1}, + {0x1000, 0x10c5, 1}, + {0x10c7, 0x10cd, 6}, + {0x10d0, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135d, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f5, 1}, + {0x13f8, 0x13fd, 1}, + {0x1400, 0x169c, 1}, + {0x16a0, 0x16f8, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18aa, 1}, + {0x18b0, 0x18f5, 1}, + {0x1900, 0x191e, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19ab, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19da, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a5e, 1}, + {0x1a60, 0x1a7c, 1}, + {0x1a7f, 0x1a89, 1}, + {0x1a90, 0x1a99, 1}, + {0x1aa0, 0x1aad, 1}, + {0x1ab0, 0x1abe, 1}, + {0x1b00, 0x1b4b, 1}, + {0x1b50, 0x1b7c, 1}, + {0x1b80, 0x1bf3, 1}, + {0x1bfc, 0x1c37, 1}, + {0x1c3b, 0x1c49, 1}, + {0x1c4d, 0x1c88, 1}, + {0x1cc0, 0x1cc7, 1}, + {0x1cd0, 0x1cf9, 1}, + {0x1d00, 0x1df9, 1}, + {0x1dfb, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2064, 1}, + {0x2066, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x209c, 1}, + {0x20a0, 0x20bf, 1}, + {0x20d0, 0x20f0, 1}, + {0x2100, 0x218b, 1}, + {0x2190, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x2b73, 1}, + {0x2b76, 0x2b95, 1}, + {0x2b98, 0x2bb9, 1}, + {0x2bbd, 0x2bc8, 1}, + {0x2bca, 0x2bd2, 1}, + {0x2bec, 0x2bef, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c60, 0x2cf3, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d27, 0x2d2d, 6}, + {0x2d30, 0x2d67, 1}, + {0x2d6f, 0x2d70, 1}, + {0x2d7f, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2de0, 0x2e49, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312e, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31ba, 1}, + {0x31c0, 0x31e3, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fea, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa4d0, 0xa62b, 1}, + {0xa640, 0xa6f7, 1}, + {0xa700, 0xa7ae, 1}, + {0xa7b0, 0xa7b7, 1}, + {0xa7f7, 0xa82b, 1}, + {0xa830, 0xa839, 1}, + {0xa840, 0xa877, 1}, + {0xa880, 0xa8c5, 1}, + {0xa8ce, 0xa8d9, 1}, + {0xa8e0, 0xa8fd, 1}, + {0xa900, 0xa953, 1}, + {0xa95f, 0xa97c, 1}, + {0xa980, 0xa9cd, 1}, + {0xa9cf, 0xa9d9, 1}, + {0xa9de, 0xa9fe, 1}, + {0xaa00, 0xaa36, 1}, + {0xaa40, 0xaa4d, 1}, + {0xaa50, 0xaa59, 1}, + {0xaa5c, 0xaac2, 1}, + {0xaadb, 0xaaf6, 1}, + {0xab01, 0xab06, 1}, + {0xab09, 0xab0e, 1}, + {0xab11, 0xab16, 1}, + {0xab20, 0xab26, 1}, + {0xab28, 0xab2e, 1}, + {0xab30, 0xab65, 1}, + {0xab70, 0xabed, 1}, + {0xabf0, 0xabf9, 1}, + {0xac00, 0xd7a3, 1}, + {0xd7b0, 0xd7c6, 1}, + {0xd7cb, 0xd7fb, 1}, + {0xd800, 0xfa6d, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbc1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018e, 1}, + {0x00010190, 0x0001019b, 1}, + {0x000101a0, 0x000101d0, 48}, + {0x000101d1, 0x000101fd, 1}, + {0x00010280, 0x0001029c, 1}, + {0x000102a0, 0x000102d0, 1}, + {0x000102e0, 0x000102fb, 1}, + {0x00010300, 0x00010323, 1}, + {0x0001032d, 0x0001034a, 1}, + {0x00010350, 0x0001037a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x000104b0, 0x000104d3, 1}, + {0x000104d8, 0x000104fb, 1}, + {0x00010500, 0x00010527, 1}, + {0x00010530, 0x00010563, 1}, + {0x0001056f, 0x00010600, 145}, + {0x00010601, 0x00010736, 1}, + {0x00010740, 0x00010755, 1}, + {0x00010760, 0x00010767, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010840, 0x00010855, 1}, + {0x00010857, 0x0001089e, 1}, + {0x000108a7, 0x000108af, 1}, + {0x000108e0, 0x000108f2, 1}, + {0x000108f4, 0x000108f5, 1}, + {0x000108fb, 0x0001091b, 1}, + {0x0001091f, 0x00010939, 1}, + {0x0001093f, 0x00010980, 65}, + {0x00010981, 0x000109b7, 1}, + {0x000109bc, 0x000109cf, 1}, + {0x000109d2, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x00010a60, 0x00010a9f, 1}, + {0x00010ac0, 0x00010ae6, 1}, + {0x00010aeb, 0x00010af6, 1}, + {0x00010b00, 0x00010b35, 1}, + {0x00010b39, 0x00010b55, 1}, + {0x00010b58, 0x00010b72, 1}, + {0x00010b78, 0x00010b91, 1}, + {0x00010b99, 0x00010b9c, 1}, + {0x00010ba9, 0x00010baf, 1}, + {0x00010c00, 0x00010c48, 1}, + {0x00010c80, 0x00010cb2, 1}, + {0x00010cc0, 0x00010cf2, 1}, + {0x00010cfa, 0x00010cff, 1}, + {0x00010e60, 0x00010e7e, 1}, + {0x00011000, 0x0001104d, 1}, + {0x00011052, 0x0001106f, 1}, + {0x0001107f, 0x000110c1, 1}, + {0x000110d0, 0x000110e8, 1}, + {0x000110f0, 0x000110f9, 1}, + {0x00011100, 0x00011134, 1}, + {0x00011136, 0x00011143, 1}, + {0x00011150, 0x00011176, 1}, + {0x00011180, 0x000111cd, 1}, + {0x000111d0, 0x000111df, 1}, + {0x000111e1, 0x000111f4, 1}, + {0x00011200, 0x00011211, 1}, + {0x00011213, 0x0001123e, 1}, + {0x00011280, 0x00011286, 1}, + {0x00011288, 0x0001128a, 2}, + {0x0001128b, 0x0001128d, 1}, + {0x0001128f, 0x0001129d, 1}, + {0x0001129f, 0x000112a9, 1}, + {0x000112b0, 0x000112ea, 1}, + {0x000112f0, 0x000112f9, 1}, + {0x00011300, 0x00011303, 1}, + {0x00011305, 0x0001130c, 1}, + {0x0001130f, 0x00011310, 1}, + {0x00011313, 0x00011328, 1}, + {0x0001132a, 0x00011330, 1}, + {0x00011332, 0x00011333, 1}, + {0x00011335, 0x00011339, 1}, + {0x0001133c, 0x00011344, 1}, + {0x00011347, 0x00011348, 1}, + {0x0001134b, 0x0001134d, 1}, + {0x00011350, 0x00011357, 7}, + {0x0001135d, 0x00011363, 1}, + {0x00011366, 0x0001136c, 1}, + {0x00011370, 0x00011374, 1}, + {0x00011400, 0x00011459, 1}, + {0x0001145b, 0x0001145d, 2}, + {0x00011480, 0x000114c7, 1}, + {0x000114d0, 0x000114d9, 1}, + {0x00011580, 0x000115b5, 1}, + {0x000115b8, 0x000115dd, 1}, + {0x00011600, 0x00011644, 1}, + {0x00011650, 0x00011659, 1}, + {0x00011660, 0x0001166c, 1}, + {0x00011680, 0x000116b7, 1}, + {0x000116c0, 0x000116c9, 1}, + {0x00011700, 0x00011719, 1}, + {0x0001171d, 0x0001172b, 1}, + {0x00011730, 0x0001173f, 1}, + {0x000118a0, 0x000118f2, 1}, + {0x000118ff, 0x00011a00, 257}, + {0x00011a01, 0x00011a47, 1}, + {0x00011a50, 0x00011a83, 1}, + {0x00011a86, 0x00011a9c, 1}, + {0x00011a9e, 0x00011aa2, 1}, + {0x00011ac0, 0x00011af8, 1}, + {0x00011c00, 0x00011c08, 1}, + {0x00011c0a, 0x00011c36, 1}, + {0x00011c38, 0x00011c45, 1}, + {0x00011c50, 0x00011c6c, 1}, + {0x00011c70, 0x00011c8f, 1}, + {0x00011c92, 0x00011ca7, 1}, + {0x00011ca9, 0x00011cb6, 1}, + {0x00011d00, 0x00011d06, 1}, + {0x00011d08, 0x00011d09, 1}, + {0x00011d0b, 0x00011d36, 1}, + {0x00011d3a, 0x00011d3c, 2}, + {0x00011d3d, 0x00011d3f, 2}, + {0x00011d40, 0x00011d47, 1}, + {0x00011d50, 0x00011d59, 1}, + {0x00012000, 0x00012399, 1}, + {0x00012400, 0x0001246e, 1}, + {0x00012470, 0x00012474, 1}, + {0x00012480, 0x00012543, 1}, + {0x00013000, 0x0001342e, 1}, + {0x00014400, 0x00014646, 1}, + {0x00016800, 0x00016a38, 1}, + {0x00016a40, 0x00016a5e, 1}, + {0x00016a60, 0x00016a69, 1}, + {0x00016a6e, 0x00016a6f, 1}, + {0x00016ad0, 0x00016aed, 1}, + {0x00016af0, 0x00016af5, 1}, + {0x00016b00, 0x00016b45, 1}, + {0x00016b50, 0x00016b59, 1}, + {0x00016b5b, 0x00016b61, 1}, + {0x00016b63, 0x00016b77, 1}, + {0x00016b7d, 0x00016b8f, 1}, + {0x00016f00, 0x00016f44, 1}, + {0x00016f50, 0x00016f7e, 1}, + {0x00016f8f, 0x00016f9f, 1}, + {0x00016fe0, 0x00016fe1, 1}, + {0x00017000, 0x000187ec, 1}, + {0x00018800, 0x00018af2, 1}, + {0x0001b000, 0x0001b11e, 1}, + {0x0001b170, 0x0001b2fb, 1}, + {0x0001bc00, 0x0001bc6a, 1}, + {0x0001bc70, 0x0001bc7c, 1}, + {0x0001bc80, 0x0001bc88, 1}, + {0x0001bc90, 0x0001bc99, 1}, + {0x0001bc9c, 0x0001bca3, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d129, 0x0001d1e8, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d360, 0x0001d371, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7cb, 1}, + {0x0001d7ce, 0x0001da8b, 1}, + {0x0001da9b, 0x0001da9f, 1}, + {0x0001daa1, 0x0001daaf, 1}, + {0x0001e000, 0x0001e006, 1}, + {0x0001e008, 0x0001e018, 1}, + {0x0001e01b, 0x0001e021, 1}, + {0x0001e023, 0x0001e024, 1}, + {0x0001e026, 0x0001e02a, 1}, + {0x0001e800, 0x0001e8c4, 1}, + {0x0001e8c7, 0x0001e8d6, 1}, + {0x0001e900, 0x0001e94a, 1}, + {0x0001e950, 0x0001e959, 1}, + {0x0001e95e, 0x0001e95f, 1}, + {0x0001ee00, 0x0001ee03, 1}, + {0x0001ee05, 0x0001ee1f, 1}, + {0x0001ee21, 0x0001ee22, 1}, + {0x0001ee24, 0x0001ee27, 3}, + {0x0001ee29, 0x0001ee32, 1}, + {0x0001ee34, 0x0001ee37, 1}, + {0x0001ee39, 0x0001ee3b, 2}, + {0x0001ee42, 0x0001ee47, 5}, + {0x0001ee49, 0x0001ee4d, 2}, + {0x0001ee4e, 0x0001ee4f, 1}, + {0x0001ee51, 0x0001ee52, 1}, + {0x0001ee54, 0x0001ee57, 3}, + {0x0001ee59, 0x0001ee61, 2}, + {0x0001ee62, 0x0001ee64, 2}, + {0x0001ee67, 0x0001ee6a, 1}, + {0x0001ee6c, 0x0001ee72, 1}, + {0x0001ee74, 0x0001ee77, 1}, + {0x0001ee79, 0x0001ee7c, 1}, + {0x0001ee7e, 0x0001ee80, 2}, + {0x0001ee81, 0x0001ee89, 1}, + {0x0001ee8b, 0x0001ee9b, 1}, + {0x0001eea1, 0x0001eea3, 1}, + {0x0001eea5, 0x0001eea9, 1}, + {0x0001eeab, 0x0001eebb, 1}, + {0x0001eef0, 0x0001eef1, 1}, + {0x0001f000, 0x0001f02b, 1}, + {0x0001f030, 0x0001f093, 1}, + {0x0001f0a0, 0x0001f0ae, 1}, + {0x0001f0b1, 0x0001f0bf, 1}, + {0x0001f0c1, 0x0001f0cf, 1}, + {0x0001f0d1, 0x0001f0f5, 1}, + {0x0001f100, 0x0001f10c, 1}, + {0x0001f110, 0x0001f12e, 1}, + {0x0001f130, 0x0001f16b, 1}, + {0x0001f170, 0x0001f1ac, 1}, + {0x0001f1e6, 0x0001f202, 1}, + {0x0001f210, 0x0001f23b, 1}, + {0x0001f240, 0x0001f248, 1}, + {0x0001f250, 0x0001f251, 1}, + {0x0001f260, 0x0001f265, 1}, + {0x0001f300, 0x0001f6d4, 1}, + {0x0001f6e0, 0x0001f6ec, 1}, + {0x0001f6f0, 0x0001f6f8, 1}, + {0x0001f700, 0x0001f773, 1}, + {0x0001f780, 0x0001f7d4, 1}, + {0x0001f800, 0x0001f80b, 1}, + {0x0001f810, 0x0001f847, 1}, + {0x0001f850, 0x0001f859, 1}, + {0x0001f860, 0x0001f887, 1}, + {0x0001f890, 0x0001f8ad, 1}, + {0x0001f900, 0x0001f90b, 1}, + {0x0001f910, 0x0001f93e, 1}, + {0x0001f940, 0x0001f94c, 1}, + {0x0001f950, 0x0001f96b, 1}, + {0x0001f980, 0x0001f997, 1}, + {0x0001f9c0, 0x0001f9d0, 16}, + {0x0001f9d1, 0x0001f9e6, 1}, + {0x00020000, 0x0002a6d6, 1}, + {0x0002a700, 0x0002b734, 1}, + {0x0002b740, 0x0002b81d, 1}, + {0x0002b820, 0x0002cea1, 1}, + {0x0002ceb0, 0x0002ebe0, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// Total size 49698 bytes (48 KiB) diff --git a/vendor/golang.org/x/text/unicode/rangetable/tables9.0.0.go b/vendor/golang.org/x/text/unicode/rangetable/tables9.0.0.go new file mode 100644 index 0000000..aef876d --- /dev/null +++ b/vendor/golang.org/x/text/unicode/rangetable/tables9.0.0.go @@ -0,0 +1,5737 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// +build !go1.10 + +package rangetable + +//go:generate go run gen.go --versions=4.1.0,5.1.0,5.2.0,5.0.0,6.1.0,6.2.0,6.3.0,6.0.0,7.0.0,8.0.0,9.0.0 + +import "unicode" + +var assigned = map[string]*unicode.RangeTable{ + "4.1.0": assigned4_1_0, + "5.1.0": assigned5_1_0, + "5.2.0": assigned5_2_0, + "5.0.0": assigned5_0_0, + "6.1.0": assigned6_1_0, + "6.2.0": assigned6_2_0, + "6.3.0": assigned6_3_0, + "6.0.0": assigned6_0_0, + "7.0.0": assigned7_0_0, + "8.0.0": assigned8_0_0, + "9.0.0": assigned9_0_0, +} + +// size 2924 bytes (2 KiB) +var assigned4_1_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x0241, 1}, + {0x0250, 0x036f, 1}, + {0x0374, 0x0375, 1}, + {0x037a, 0x037e, 4}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x03ce, 1}, + {0x03d0, 0x0486, 1}, + {0x0488, 0x04ce, 1}, + {0x04d0, 0x04f9, 1}, + {0x0500, 0x050f, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x0591, 0x05b9, 1}, + {0x05bb, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x0603, 1}, + {0x060b, 0x0615, 1}, + {0x061b, 0x061e, 3}, + {0x061f, 0x0621, 2}, + {0x0622, 0x063a, 1}, + {0x0640, 0x065e, 1}, + {0x0660, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x076d, 1}, + {0x0780, 0x07b1, 1}, + {0x0901, 0x0939, 1}, + {0x093c, 0x094d, 1}, + {0x0950, 0x0954, 1}, + {0x0958, 0x0970, 1}, + {0x097d, 0x0981, 4}, + {0x0982, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fa, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a59, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a74, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0aef, 1}, + {0x0af1, 0x0b01, 16}, + {0x0b02, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b43, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b61, 1}, + {0x0b66, 0x0b71, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd7, 0x0be6, 15}, + {0x0be7, 0x0bfa, 1}, + {0x0c01, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c33, 1}, + {0x0c35, 0x0c39, 1}, + {0x0c3e, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c60, 0x0c61, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c82, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce6, 5}, + {0x0ce7, 0x0cef, 1}, + {0x0d02, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d28, 1}, + {0x0d2a, 0x0d39, 1}, + {0x0d3e, 0x0d43, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4d, 1}, + {0x0d57, 0x0d60, 9}, + {0x0d61, 0x0d66, 5}, + {0x0d67, 0x0d6f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edd, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6a, 1}, + {0x0f71, 0x0f8b, 1}, + {0x0f90, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fcf, 0x0fd1, 1}, + {0x1000, 0x1021, 1}, + {0x1023, 0x1027, 1}, + {0x1029, 0x102a, 1}, + {0x102c, 0x1032, 1}, + {0x1036, 0x1039, 1}, + {0x1040, 0x1059, 1}, + {0x10a0, 0x10c5, 1}, + {0x10d0, 0x10fc, 1}, + {0x1100, 0x1159, 1}, + {0x115f, 0x11a2, 1}, + {0x11a8, 0x11f9, 1}, + {0x1200, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135f, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f4, 1}, + {0x1401, 0x1676, 1}, + {0x1680, 0x169c, 1}, + {0x16a0, 0x16f0, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18a9, 1}, + {0x1900, 0x191c, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19a9, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19d9, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a1f, 1}, + {0x1d00, 0x1dc3, 1}, + {0x1e00, 0x1e9b, 1}, + {0x1ea0, 0x1ef9, 1}, + {0x1f00, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2063, 1}, + {0x206a, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x2094, 1}, + {0x20a0, 0x20b5, 1}, + {0x20d0, 0x20eb, 1}, + {0x2100, 0x214c, 1}, + {0x2153, 0x2183, 1}, + {0x2190, 0x23db, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x269c, 1}, + {0x26a0, 0x26b1, 1}, + {0x2701, 0x2704, 1}, + {0x2706, 0x2709, 1}, + {0x270c, 0x2727, 1}, + {0x2729, 0x274b, 1}, + {0x274d, 0x274f, 2}, + {0x2750, 0x2752, 1}, + {0x2756, 0x2758, 2}, + {0x2759, 0x275e, 1}, + {0x2761, 0x2794, 1}, + {0x2798, 0x27af, 1}, + {0x27b1, 0x27be, 1}, + {0x27c0, 0x27c6, 1}, + {0x27d0, 0x27eb, 1}, + {0x27f0, 0x2b13, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c80, 0x2cea, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d30, 0x2d65, 1}, + {0x2d6f, 0x2d80, 17}, + {0x2d81, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2e00, 0x2e17, 1}, + {0x2e1c, 0x2e1d, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312c, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31b7, 1}, + {0x31c0, 0x31cf, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x3243, 1}, + {0x3250, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fbb, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa700, 0xa716, 1}, + {0xa800, 0xa82b, 1}, + {0xac00, 0xd7a3, 1}, + {0xd800, 0xfa2d, 1}, + {0xfa30, 0xfa6a, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbb1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe23, 1}, + {0xfe30, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018a, 1}, + {0x00010300, 0x0001031e, 1}, + {0x00010320, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010a00, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d12a, 0x0001d1dd, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7c9, 1}, + {0x0001d7ce, 0x0001d7ff, 1}, + {0x00020000, 0x0002a6d6, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// size 3152 bytes (3 KiB) +var assigned5_1_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x0377, 1}, + {0x037a, 0x037e, 1}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x0523, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x0591, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x0603, 1}, + {0x0606, 0x061b, 1}, + {0x061e, 0x061f, 1}, + {0x0621, 0x065e, 1}, + {0x0660, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x07b1, 1}, + {0x07c0, 0x07fa, 1}, + {0x0901, 0x0939, 1}, + {0x093c, 0x094d, 1}, + {0x0950, 0x0954, 1}, + {0x0958, 0x0972, 1}, + {0x097b, 0x097f, 1}, + {0x0981, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fa, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a51, 0x0a59, 8}, + {0x0a5a, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a75, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0aef, 1}, + {0x0af1, 0x0b01, 16}, + {0x0b02, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b44, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b63, 1}, + {0x0b66, 0x0b71, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd0, 0x0bd7, 7}, + {0x0be6, 0x0bfa, 1}, + {0x0c01, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c33, 1}, + {0x0c35, 0x0c39, 1}, + {0x0c3d, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c58, 0x0c59, 1}, + {0x0c60, 0x0c63, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c78, 0x0c7f, 1}, + {0x0c82, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce3, 1}, + {0x0ce6, 0x0cef, 1}, + {0x0cf1, 0x0cf2, 1}, + {0x0d02, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d28, 1}, + {0x0d2a, 0x0d39, 1}, + {0x0d3d, 0x0d44, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4d, 1}, + {0x0d57, 0x0d60, 9}, + {0x0d61, 0x0d63, 1}, + {0x0d66, 0x0d75, 1}, + {0x0d79, 0x0d7f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edd, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6c, 1}, + {0x0f71, 0x0f8b, 1}, + {0x0f90, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fce, 0x0fd4, 1}, + {0x1000, 0x1099, 1}, + {0x109e, 0x10c5, 1}, + {0x10d0, 0x10fc, 1}, + {0x1100, 0x1159, 1}, + {0x115f, 0x11a2, 1}, + {0x11a8, 0x11f9, 1}, + {0x1200, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135f, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f4, 1}, + {0x1401, 0x1676, 1}, + {0x1680, 0x169c, 1}, + {0x16a0, 0x16f0, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18aa, 1}, + {0x1900, 0x191c, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19a9, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19d9, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a1f, 1}, + {0x1b00, 0x1b4b, 1}, + {0x1b50, 0x1b7c, 1}, + {0x1b80, 0x1baa, 1}, + {0x1bae, 0x1bb9, 1}, + {0x1c00, 0x1c37, 1}, + {0x1c3b, 0x1c49, 1}, + {0x1c4d, 0x1c7f, 1}, + {0x1d00, 0x1de6, 1}, + {0x1dfe, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2064, 1}, + {0x206a, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x2094, 1}, + {0x20a0, 0x20b5, 1}, + {0x20d0, 0x20f0, 1}, + {0x2100, 0x214f, 1}, + {0x2153, 0x2188, 1}, + {0x2190, 0x23e7, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x269d, 1}, + {0x26a0, 0x26bc, 1}, + {0x26c0, 0x26c3, 1}, + {0x2701, 0x2704, 1}, + {0x2706, 0x2709, 1}, + {0x270c, 0x2727, 1}, + {0x2729, 0x274b, 1}, + {0x274d, 0x274f, 2}, + {0x2750, 0x2752, 1}, + {0x2756, 0x2758, 2}, + {0x2759, 0x275e, 1}, + {0x2761, 0x2794, 1}, + {0x2798, 0x27af, 1}, + {0x27b1, 0x27be, 1}, + {0x27c0, 0x27ca, 1}, + {0x27cc, 0x27d0, 4}, + {0x27d1, 0x2b4c, 1}, + {0x2b50, 0x2b54, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c60, 0x2c6f, 1}, + {0x2c71, 0x2c7d, 1}, + {0x2c80, 0x2cea, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d30, 0x2d65, 1}, + {0x2d6f, 0x2d80, 17}, + {0x2d81, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2de0, 0x2e30, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312d, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31b7, 1}, + {0x31c0, 0x31e3, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x3243, 1}, + {0x3250, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fc3, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa500, 0xa62b, 1}, + {0xa640, 0xa65f, 1}, + {0xa662, 0xa673, 1}, + {0xa67c, 0xa697, 1}, + {0xa700, 0xa78c, 1}, + {0xa7fb, 0xa82b, 1}, + {0xa840, 0xa877, 1}, + {0xa880, 0xa8c4, 1}, + {0xa8ce, 0xa8d9, 1}, + {0xa900, 0xa953, 1}, + {0xa95f, 0xaa00, 161}, + {0xaa01, 0xaa36, 1}, + {0xaa40, 0xaa4d, 1}, + {0xaa50, 0xaa59, 1}, + {0xaa5c, 0xaa5f, 1}, + {0xac00, 0xd7a3, 1}, + {0xd800, 0xfa2d, 1}, + {0xfa30, 0xfa6a, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbb1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe26, 1}, + {0xfe30, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018a, 1}, + {0x00010190, 0x0001019b, 1}, + {0x000101d0, 0x000101fd, 1}, + {0x00010280, 0x0001029c, 1}, + {0x000102a0, 0x000102d0, 1}, + {0x00010300, 0x0001031e, 1}, + {0x00010320, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010900, 0x00010919, 1}, + {0x0001091f, 0x00010939, 1}, + {0x0001093f, 0x00010a00, 193}, + {0x00010a01, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x00012000, 0x0001236e, 1}, + {0x00012400, 0x00012462, 1}, + {0x00012470, 0x00012473, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d129, 0x0001d1dd, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d360, 0x0001d371, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7cb, 1}, + {0x0001d7ce, 0x0001d7ff, 1}, + {0x0001f000, 0x0001f02b, 1}, + {0x0001f030, 0x0001f093, 1}, + {0x00020000, 0x0002a6d6, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// size 3518 bytes (3 KiB) +var assigned5_2_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x0377, 1}, + {0x037a, 0x037e, 1}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x0525, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x0591, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x0603, 1}, + {0x0606, 0x061b, 1}, + {0x061e, 0x061f, 1}, + {0x0621, 0x065e, 1}, + {0x0660, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x07b1, 1}, + {0x07c0, 0x07fa, 1}, + {0x0800, 0x082d, 1}, + {0x0830, 0x083e, 1}, + {0x0900, 0x0939, 1}, + {0x093c, 0x094e, 1}, + {0x0950, 0x0955, 1}, + {0x0958, 0x0972, 1}, + {0x0979, 0x097f, 1}, + {0x0981, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fb, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a51, 0x0a59, 8}, + {0x0a5a, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a75, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0aef, 1}, + {0x0af1, 0x0b01, 16}, + {0x0b02, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b44, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b63, 1}, + {0x0b66, 0x0b71, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd0, 0x0bd7, 7}, + {0x0be6, 0x0bfa, 1}, + {0x0c01, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c33, 1}, + {0x0c35, 0x0c39, 1}, + {0x0c3d, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c58, 0x0c59, 1}, + {0x0c60, 0x0c63, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c78, 0x0c7f, 1}, + {0x0c82, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce3, 1}, + {0x0ce6, 0x0cef, 1}, + {0x0cf1, 0x0cf2, 1}, + {0x0d02, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d28, 1}, + {0x0d2a, 0x0d39, 1}, + {0x0d3d, 0x0d44, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4d, 1}, + {0x0d57, 0x0d60, 9}, + {0x0d61, 0x0d63, 1}, + {0x0d66, 0x0d75, 1}, + {0x0d79, 0x0d7f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edd, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6c, 1}, + {0x0f71, 0x0f8b, 1}, + {0x0f90, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fce, 0x0fd8, 1}, + {0x1000, 0x10c5, 1}, + {0x10d0, 0x10fc, 1}, + {0x1100, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135f, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f4, 1}, + {0x1400, 0x169c, 1}, + {0x16a0, 0x16f0, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18aa, 1}, + {0x18b0, 0x18f5, 1}, + {0x1900, 0x191c, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19ab, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19da, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a5e, 1}, + {0x1a60, 0x1a7c, 1}, + {0x1a7f, 0x1a89, 1}, + {0x1a90, 0x1a99, 1}, + {0x1aa0, 0x1aad, 1}, + {0x1b00, 0x1b4b, 1}, + {0x1b50, 0x1b7c, 1}, + {0x1b80, 0x1baa, 1}, + {0x1bae, 0x1bb9, 1}, + {0x1c00, 0x1c37, 1}, + {0x1c3b, 0x1c49, 1}, + {0x1c4d, 0x1c7f, 1}, + {0x1cd0, 0x1cf2, 1}, + {0x1d00, 0x1de6, 1}, + {0x1dfd, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2064, 1}, + {0x206a, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x2094, 1}, + {0x20a0, 0x20b8, 1}, + {0x20d0, 0x20f0, 1}, + {0x2100, 0x2189, 1}, + {0x2190, 0x23e8, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x26cd, 1}, + {0x26cf, 0x26e1, 1}, + {0x26e3, 0x26e8, 5}, + {0x26e9, 0x26ff, 1}, + {0x2701, 0x2704, 1}, + {0x2706, 0x2709, 1}, + {0x270c, 0x2727, 1}, + {0x2729, 0x274b, 1}, + {0x274d, 0x274f, 2}, + {0x2750, 0x2752, 1}, + {0x2756, 0x275e, 1}, + {0x2761, 0x2794, 1}, + {0x2798, 0x27af, 1}, + {0x27b1, 0x27be, 1}, + {0x27c0, 0x27ca, 1}, + {0x27cc, 0x27d0, 4}, + {0x27d1, 0x2b4c, 1}, + {0x2b50, 0x2b59, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c60, 0x2cf1, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d30, 0x2d65, 1}, + {0x2d6f, 0x2d80, 17}, + {0x2d81, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2de0, 0x2e31, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312d, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31b7, 1}, + {0x31c0, 0x31e3, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fcb, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa4d0, 0xa62b, 1}, + {0xa640, 0xa65f, 1}, + {0xa662, 0xa673, 1}, + {0xa67c, 0xa697, 1}, + {0xa6a0, 0xa6f7, 1}, + {0xa700, 0xa78c, 1}, + {0xa7fb, 0xa82b, 1}, + {0xa830, 0xa839, 1}, + {0xa840, 0xa877, 1}, + {0xa880, 0xa8c4, 1}, + {0xa8ce, 0xa8d9, 1}, + {0xa8e0, 0xa8fb, 1}, + {0xa900, 0xa953, 1}, + {0xa95f, 0xa97c, 1}, + {0xa980, 0xa9cd, 1}, + {0xa9cf, 0xa9d9, 1}, + {0xa9de, 0xa9df, 1}, + {0xaa00, 0xaa36, 1}, + {0xaa40, 0xaa4d, 1}, + {0xaa50, 0xaa59, 1}, + {0xaa5c, 0xaa7b, 1}, + {0xaa80, 0xaac2, 1}, + {0xaadb, 0xaadf, 1}, + {0xabc0, 0xabed, 1}, + {0xabf0, 0xabf9, 1}, + {0xac00, 0xd7a3, 1}, + {0xd7b0, 0xd7c6, 1}, + {0xd7cb, 0xd7fb, 1}, + {0xd800, 0xfa2d, 1}, + {0xfa30, 0xfa6d, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbb1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe26, 1}, + {0xfe30, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018a, 1}, + {0x00010190, 0x0001019b, 1}, + {0x000101d0, 0x000101fd, 1}, + {0x00010280, 0x0001029c, 1}, + {0x000102a0, 0x000102d0, 1}, + {0x00010300, 0x0001031e, 1}, + {0x00010320, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010840, 0x00010855, 1}, + {0x00010857, 0x0001085f, 1}, + {0x00010900, 0x0001091b, 1}, + {0x0001091f, 0x00010939, 1}, + {0x0001093f, 0x00010a00, 193}, + {0x00010a01, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x00010a60, 0x00010a7f, 1}, + {0x00010b00, 0x00010b35, 1}, + {0x00010b39, 0x00010b55, 1}, + {0x00010b58, 0x00010b72, 1}, + {0x00010b78, 0x00010b7f, 1}, + {0x00010c00, 0x00010c48, 1}, + {0x00010e60, 0x00010e7e, 1}, + {0x00011080, 0x000110c1, 1}, + {0x00012000, 0x0001236e, 1}, + {0x00012400, 0x00012462, 1}, + {0x00012470, 0x00012473, 1}, + {0x00013000, 0x0001342e, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d129, 0x0001d1dd, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d360, 0x0001d371, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7cb, 1}, + {0x0001d7ce, 0x0001d7ff, 1}, + {0x0001f000, 0x0001f02b, 1}, + {0x0001f030, 0x0001f093, 1}, + {0x0001f100, 0x0001f10a, 1}, + {0x0001f110, 0x0001f12e, 1}, + {0x0001f131, 0x0001f13d, 12}, + {0x0001f13f, 0x0001f142, 3}, + {0x0001f146, 0x0001f14a, 4}, + {0x0001f14b, 0x0001f14e, 1}, + {0x0001f157, 0x0001f15f, 8}, + {0x0001f179, 0x0001f17b, 2}, + {0x0001f17c, 0x0001f17f, 3}, + {0x0001f18a, 0x0001f18d, 1}, + {0x0001f190, 0x0001f200, 112}, + {0x0001f210, 0x0001f231, 1}, + {0x0001f240, 0x0001f248, 1}, + {0x00020000, 0x0002a6d6, 1}, + {0x0002a700, 0x0002b734, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// size 3026 bytes (2 KiB) +var assigned5_0_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x036f, 1}, + {0x0374, 0x0375, 1}, + {0x037a, 0x037e, 1}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x03ce, 1}, + {0x03d0, 0x0486, 1}, + {0x0488, 0x0513, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x0591, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x0603, 1}, + {0x060b, 0x0615, 1}, + {0x061b, 0x061e, 3}, + {0x061f, 0x0621, 2}, + {0x0622, 0x063a, 1}, + {0x0640, 0x065e, 1}, + {0x0660, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x076d, 1}, + {0x0780, 0x07b1, 1}, + {0x07c0, 0x07fa, 1}, + {0x0901, 0x0939, 1}, + {0x093c, 0x094d, 1}, + {0x0950, 0x0954, 1}, + {0x0958, 0x0970, 1}, + {0x097b, 0x097f, 1}, + {0x0981, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fa, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a59, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a74, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0aef, 1}, + {0x0af1, 0x0b01, 16}, + {0x0b02, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b43, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b61, 1}, + {0x0b66, 0x0b71, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd7, 0x0be6, 15}, + {0x0be7, 0x0bfa, 1}, + {0x0c01, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c33, 1}, + {0x0c35, 0x0c39, 1}, + {0x0c3e, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c60, 0x0c61, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c82, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce3, 1}, + {0x0ce6, 0x0cef, 1}, + {0x0cf1, 0x0cf2, 1}, + {0x0d02, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d28, 1}, + {0x0d2a, 0x0d39, 1}, + {0x0d3e, 0x0d43, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4d, 1}, + {0x0d57, 0x0d60, 9}, + {0x0d61, 0x0d66, 5}, + {0x0d67, 0x0d6f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edd, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6a, 1}, + {0x0f71, 0x0f8b, 1}, + {0x0f90, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fcf, 0x0fd1, 1}, + {0x1000, 0x1021, 1}, + {0x1023, 0x1027, 1}, + {0x1029, 0x102a, 1}, + {0x102c, 0x1032, 1}, + {0x1036, 0x1039, 1}, + {0x1040, 0x1059, 1}, + {0x10a0, 0x10c5, 1}, + {0x10d0, 0x10fc, 1}, + {0x1100, 0x1159, 1}, + {0x115f, 0x11a2, 1}, + {0x11a8, 0x11f9, 1}, + {0x1200, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135f, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f4, 1}, + {0x1401, 0x1676, 1}, + {0x1680, 0x169c, 1}, + {0x16a0, 0x16f0, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18a9, 1}, + {0x1900, 0x191c, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19a9, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19d9, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a1f, 1}, + {0x1b00, 0x1b4b, 1}, + {0x1b50, 0x1b7c, 1}, + {0x1d00, 0x1dca, 1}, + {0x1dfe, 0x1e9b, 1}, + {0x1ea0, 0x1ef9, 1}, + {0x1f00, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2063, 1}, + {0x206a, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x2094, 1}, + {0x20a0, 0x20b5, 1}, + {0x20d0, 0x20ef, 1}, + {0x2100, 0x214e, 1}, + {0x2153, 0x2184, 1}, + {0x2190, 0x23e7, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x269c, 1}, + {0x26a0, 0x26b2, 1}, + {0x2701, 0x2704, 1}, + {0x2706, 0x2709, 1}, + {0x270c, 0x2727, 1}, + {0x2729, 0x274b, 1}, + {0x274d, 0x274f, 2}, + {0x2750, 0x2752, 1}, + {0x2756, 0x2758, 2}, + {0x2759, 0x275e, 1}, + {0x2761, 0x2794, 1}, + {0x2798, 0x27af, 1}, + {0x27b1, 0x27be, 1}, + {0x27c0, 0x27ca, 1}, + {0x27d0, 0x27eb, 1}, + {0x27f0, 0x2b1a, 1}, + {0x2b20, 0x2b23, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c60, 0x2c6c, 1}, + {0x2c74, 0x2c77, 1}, + {0x2c80, 0x2cea, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d30, 0x2d65, 1}, + {0x2d6f, 0x2d80, 17}, + {0x2d81, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2e00, 0x2e17, 1}, + {0x2e1c, 0x2e1d, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312c, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31b7, 1}, + {0x31c0, 0x31cf, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x3243, 1}, + {0x3250, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fbb, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa700, 0xa71a, 1}, + {0xa720, 0xa721, 1}, + {0xa800, 0xa82b, 1}, + {0xa840, 0xa877, 1}, + {0xac00, 0xd7a3, 1}, + {0xd800, 0xfa2d, 1}, + {0xfa30, 0xfa6a, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbb1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe23, 1}, + {0xfe30, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018a, 1}, + {0x00010300, 0x0001031e, 1}, + {0x00010320, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010900, 0x00010919, 1}, + {0x0001091f, 0x00010a00, 225}, + {0x00010a01, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x00012000, 0x0001236e, 1}, + {0x00012400, 0x00012462, 1}, + {0x00012470, 0x00012473, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d12a, 0x0001d1dd, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d360, 0x0001d371, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7cb, 1}, + {0x0001d7ce, 0x0001d7ff, 1}, + {0x00020000, 0x0002a6d6, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// size 4160 bytes (4 KiB) +var assigned6_1_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x0377, 1}, + {0x037a, 0x037e, 1}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x0527, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x058f, 0x0591, 2}, + {0x0592, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x0604, 1}, + {0x0606, 0x061b, 1}, + {0x061e, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x07b1, 1}, + {0x07c0, 0x07fa, 1}, + {0x0800, 0x082d, 1}, + {0x0830, 0x083e, 1}, + {0x0840, 0x085b, 1}, + {0x085e, 0x08a0, 66}, + {0x08a2, 0x08ac, 1}, + {0x08e4, 0x08fe, 1}, + {0x0900, 0x0977, 1}, + {0x0979, 0x097f, 1}, + {0x0981, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fb, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a51, 0x0a59, 8}, + {0x0a5a, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a75, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0af1, 1}, + {0x0b01, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b44, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b63, 1}, + {0x0b66, 0x0b77, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd0, 0x0bd7, 7}, + {0x0be6, 0x0bfa, 1}, + {0x0c01, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c33, 1}, + {0x0c35, 0x0c39, 1}, + {0x0c3d, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c58, 0x0c59, 1}, + {0x0c60, 0x0c63, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c78, 0x0c7f, 1}, + {0x0c82, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce3, 1}, + {0x0ce6, 0x0cef, 1}, + {0x0cf1, 0x0cf2, 1}, + {0x0d02, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d3a, 1}, + {0x0d3d, 0x0d44, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4e, 1}, + {0x0d57, 0x0d60, 9}, + {0x0d61, 0x0d63, 1}, + {0x0d66, 0x0d75, 1}, + {0x0d79, 0x0d7f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edf, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6c, 1}, + {0x0f71, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fce, 0x0fda, 1}, + {0x1000, 0x10c5, 1}, + {0x10c7, 0x10cd, 6}, + {0x10d0, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135d, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f4, 1}, + {0x1400, 0x169c, 1}, + {0x16a0, 0x16f0, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18aa, 1}, + {0x18b0, 0x18f5, 1}, + {0x1900, 0x191c, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19ab, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19da, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a5e, 1}, + {0x1a60, 0x1a7c, 1}, + {0x1a7f, 0x1a89, 1}, + {0x1a90, 0x1a99, 1}, + {0x1aa0, 0x1aad, 1}, + {0x1b00, 0x1b4b, 1}, + {0x1b50, 0x1b7c, 1}, + {0x1b80, 0x1bf3, 1}, + {0x1bfc, 0x1c37, 1}, + {0x1c3b, 0x1c49, 1}, + {0x1c4d, 0x1c7f, 1}, + {0x1cc0, 0x1cc7, 1}, + {0x1cd0, 0x1cf6, 1}, + {0x1d00, 0x1de6, 1}, + {0x1dfc, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2064, 1}, + {0x206a, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x209c, 1}, + {0x20a0, 0x20b9, 1}, + {0x20d0, 0x20f0, 1}, + {0x2100, 0x2189, 1}, + {0x2190, 0x23f3, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x26ff, 1}, + {0x2701, 0x2b4c, 1}, + {0x2b50, 0x2b59, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c60, 0x2cf3, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d27, 0x2d2d, 6}, + {0x2d30, 0x2d67, 1}, + {0x2d6f, 0x2d70, 1}, + {0x2d7f, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2de0, 0x2e3b, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312d, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31ba, 1}, + {0x31c0, 0x31e3, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fcc, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa4d0, 0xa62b, 1}, + {0xa640, 0xa697, 1}, + {0xa69f, 0xa6f7, 1}, + {0xa700, 0xa78e, 1}, + {0xa790, 0xa793, 1}, + {0xa7a0, 0xa7aa, 1}, + {0xa7f8, 0xa82b, 1}, + {0xa830, 0xa839, 1}, + {0xa840, 0xa877, 1}, + {0xa880, 0xa8c4, 1}, + {0xa8ce, 0xa8d9, 1}, + {0xa8e0, 0xa8fb, 1}, + {0xa900, 0xa953, 1}, + {0xa95f, 0xa97c, 1}, + {0xa980, 0xa9cd, 1}, + {0xa9cf, 0xa9d9, 1}, + {0xa9de, 0xa9df, 1}, + {0xaa00, 0xaa36, 1}, + {0xaa40, 0xaa4d, 1}, + {0xaa50, 0xaa59, 1}, + {0xaa5c, 0xaa7b, 1}, + {0xaa80, 0xaac2, 1}, + {0xaadb, 0xaaf6, 1}, + {0xab01, 0xab06, 1}, + {0xab09, 0xab0e, 1}, + {0xab11, 0xab16, 1}, + {0xab20, 0xab26, 1}, + {0xab28, 0xab2e, 1}, + {0xabc0, 0xabed, 1}, + {0xabf0, 0xabf9, 1}, + {0xac00, 0xd7a3, 1}, + {0xd7b0, 0xd7c6, 1}, + {0xd7cb, 0xd7fb, 1}, + {0xd800, 0xfa6d, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbc1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe26, 1}, + {0xfe30, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018a, 1}, + {0x00010190, 0x0001019b, 1}, + {0x000101d0, 0x000101fd, 1}, + {0x00010280, 0x0001029c, 1}, + {0x000102a0, 0x000102d0, 1}, + {0x00010300, 0x0001031e, 1}, + {0x00010320, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010840, 0x00010855, 1}, + {0x00010857, 0x0001085f, 1}, + {0x00010900, 0x0001091b, 1}, + {0x0001091f, 0x00010939, 1}, + {0x0001093f, 0x00010980, 65}, + {0x00010981, 0x000109b7, 1}, + {0x000109be, 0x000109bf, 1}, + {0x00010a00, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x00010a60, 0x00010a7f, 1}, + {0x00010b00, 0x00010b35, 1}, + {0x00010b39, 0x00010b55, 1}, + {0x00010b58, 0x00010b72, 1}, + {0x00010b78, 0x00010b7f, 1}, + {0x00010c00, 0x00010c48, 1}, + {0x00010e60, 0x00010e7e, 1}, + {0x00011000, 0x0001104d, 1}, + {0x00011052, 0x0001106f, 1}, + {0x00011080, 0x000110c1, 1}, + {0x000110d0, 0x000110e8, 1}, + {0x000110f0, 0x000110f9, 1}, + {0x00011100, 0x00011134, 1}, + {0x00011136, 0x00011143, 1}, + {0x00011180, 0x000111c8, 1}, + {0x000111d0, 0x000111d9, 1}, + {0x00011680, 0x000116b7, 1}, + {0x000116c0, 0x000116c9, 1}, + {0x00012000, 0x0001236e, 1}, + {0x00012400, 0x00012462, 1}, + {0x00012470, 0x00012473, 1}, + {0x00013000, 0x0001342e, 1}, + {0x00016800, 0x00016a38, 1}, + {0x00016f00, 0x00016f44, 1}, + {0x00016f50, 0x00016f7e, 1}, + {0x00016f8f, 0x00016f9f, 1}, + {0x0001b000, 0x0001b001, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d129, 0x0001d1dd, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d360, 0x0001d371, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7cb, 1}, + {0x0001d7ce, 0x0001d7ff, 1}, + {0x0001ee00, 0x0001ee03, 1}, + {0x0001ee05, 0x0001ee1f, 1}, + {0x0001ee21, 0x0001ee22, 1}, + {0x0001ee24, 0x0001ee27, 3}, + {0x0001ee29, 0x0001ee32, 1}, + {0x0001ee34, 0x0001ee37, 1}, + {0x0001ee39, 0x0001ee3b, 2}, + {0x0001ee42, 0x0001ee47, 5}, + {0x0001ee49, 0x0001ee4d, 2}, + {0x0001ee4e, 0x0001ee4f, 1}, + {0x0001ee51, 0x0001ee52, 1}, + {0x0001ee54, 0x0001ee57, 3}, + {0x0001ee59, 0x0001ee61, 2}, + {0x0001ee62, 0x0001ee64, 2}, + {0x0001ee67, 0x0001ee6a, 1}, + {0x0001ee6c, 0x0001ee72, 1}, + {0x0001ee74, 0x0001ee77, 1}, + {0x0001ee79, 0x0001ee7c, 1}, + {0x0001ee7e, 0x0001ee80, 2}, + {0x0001ee81, 0x0001ee89, 1}, + {0x0001ee8b, 0x0001ee9b, 1}, + {0x0001eea1, 0x0001eea3, 1}, + {0x0001eea5, 0x0001eea9, 1}, + {0x0001eeab, 0x0001eebb, 1}, + {0x0001eef0, 0x0001eef1, 1}, + {0x0001f000, 0x0001f02b, 1}, + {0x0001f030, 0x0001f093, 1}, + {0x0001f0a0, 0x0001f0ae, 1}, + {0x0001f0b1, 0x0001f0be, 1}, + {0x0001f0c1, 0x0001f0cf, 1}, + {0x0001f0d1, 0x0001f0df, 1}, + {0x0001f100, 0x0001f10a, 1}, + {0x0001f110, 0x0001f12e, 1}, + {0x0001f130, 0x0001f16b, 1}, + {0x0001f170, 0x0001f19a, 1}, + {0x0001f1e6, 0x0001f202, 1}, + {0x0001f210, 0x0001f23a, 1}, + {0x0001f240, 0x0001f248, 1}, + {0x0001f250, 0x0001f251, 1}, + {0x0001f300, 0x0001f320, 1}, + {0x0001f330, 0x0001f335, 1}, + {0x0001f337, 0x0001f37c, 1}, + {0x0001f380, 0x0001f393, 1}, + {0x0001f3a0, 0x0001f3c4, 1}, + {0x0001f3c6, 0x0001f3ca, 1}, + {0x0001f3e0, 0x0001f3f0, 1}, + {0x0001f400, 0x0001f43e, 1}, + {0x0001f440, 0x0001f442, 2}, + {0x0001f443, 0x0001f4f7, 1}, + {0x0001f4f9, 0x0001f4fc, 1}, + {0x0001f500, 0x0001f53d, 1}, + {0x0001f540, 0x0001f543, 1}, + {0x0001f550, 0x0001f567, 1}, + {0x0001f5fb, 0x0001f640, 1}, + {0x0001f645, 0x0001f64f, 1}, + {0x0001f680, 0x0001f6c5, 1}, + {0x0001f700, 0x0001f773, 1}, + {0x00020000, 0x0002a6d6, 1}, + {0x0002a700, 0x0002b734, 1}, + {0x0002b740, 0x0002b81d, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// size 4160 bytes (4 KiB) +var assigned6_2_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x0377, 1}, + {0x037a, 0x037e, 1}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x0527, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x058f, 0x0591, 2}, + {0x0592, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x0604, 1}, + {0x0606, 0x061b, 1}, + {0x061e, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x07b1, 1}, + {0x07c0, 0x07fa, 1}, + {0x0800, 0x082d, 1}, + {0x0830, 0x083e, 1}, + {0x0840, 0x085b, 1}, + {0x085e, 0x08a0, 66}, + {0x08a2, 0x08ac, 1}, + {0x08e4, 0x08fe, 1}, + {0x0900, 0x0977, 1}, + {0x0979, 0x097f, 1}, + {0x0981, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fb, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a51, 0x0a59, 8}, + {0x0a5a, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a75, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0af1, 1}, + {0x0b01, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b44, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b63, 1}, + {0x0b66, 0x0b77, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd0, 0x0bd7, 7}, + {0x0be6, 0x0bfa, 1}, + {0x0c01, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c33, 1}, + {0x0c35, 0x0c39, 1}, + {0x0c3d, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c58, 0x0c59, 1}, + {0x0c60, 0x0c63, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c78, 0x0c7f, 1}, + {0x0c82, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce3, 1}, + {0x0ce6, 0x0cef, 1}, + {0x0cf1, 0x0cf2, 1}, + {0x0d02, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d3a, 1}, + {0x0d3d, 0x0d44, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4e, 1}, + {0x0d57, 0x0d60, 9}, + {0x0d61, 0x0d63, 1}, + {0x0d66, 0x0d75, 1}, + {0x0d79, 0x0d7f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edf, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6c, 1}, + {0x0f71, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fce, 0x0fda, 1}, + {0x1000, 0x10c5, 1}, + {0x10c7, 0x10cd, 6}, + {0x10d0, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135d, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f4, 1}, + {0x1400, 0x169c, 1}, + {0x16a0, 0x16f0, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18aa, 1}, + {0x18b0, 0x18f5, 1}, + {0x1900, 0x191c, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19ab, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19da, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a5e, 1}, + {0x1a60, 0x1a7c, 1}, + {0x1a7f, 0x1a89, 1}, + {0x1a90, 0x1a99, 1}, + {0x1aa0, 0x1aad, 1}, + {0x1b00, 0x1b4b, 1}, + {0x1b50, 0x1b7c, 1}, + {0x1b80, 0x1bf3, 1}, + {0x1bfc, 0x1c37, 1}, + {0x1c3b, 0x1c49, 1}, + {0x1c4d, 0x1c7f, 1}, + {0x1cc0, 0x1cc7, 1}, + {0x1cd0, 0x1cf6, 1}, + {0x1d00, 0x1de6, 1}, + {0x1dfc, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2064, 1}, + {0x206a, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x209c, 1}, + {0x20a0, 0x20ba, 1}, + {0x20d0, 0x20f0, 1}, + {0x2100, 0x2189, 1}, + {0x2190, 0x23f3, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x26ff, 1}, + {0x2701, 0x2b4c, 1}, + {0x2b50, 0x2b59, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c60, 0x2cf3, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d27, 0x2d2d, 6}, + {0x2d30, 0x2d67, 1}, + {0x2d6f, 0x2d70, 1}, + {0x2d7f, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2de0, 0x2e3b, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312d, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31ba, 1}, + {0x31c0, 0x31e3, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fcc, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa4d0, 0xa62b, 1}, + {0xa640, 0xa697, 1}, + {0xa69f, 0xa6f7, 1}, + {0xa700, 0xa78e, 1}, + {0xa790, 0xa793, 1}, + {0xa7a0, 0xa7aa, 1}, + {0xa7f8, 0xa82b, 1}, + {0xa830, 0xa839, 1}, + {0xa840, 0xa877, 1}, + {0xa880, 0xa8c4, 1}, + {0xa8ce, 0xa8d9, 1}, + {0xa8e0, 0xa8fb, 1}, + {0xa900, 0xa953, 1}, + {0xa95f, 0xa97c, 1}, + {0xa980, 0xa9cd, 1}, + {0xa9cf, 0xa9d9, 1}, + {0xa9de, 0xa9df, 1}, + {0xaa00, 0xaa36, 1}, + {0xaa40, 0xaa4d, 1}, + {0xaa50, 0xaa59, 1}, + {0xaa5c, 0xaa7b, 1}, + {0xaa80, 0xaac2, 1}, + {0xaadb, 0xaaf6, 1}, + {0xab01, 0xab06, 1}, + {0xab09, 0xab0e, 1}, + {0xab11, 0xab16, 1}, + {0xab20, 0xab26, 1}, + {0xab28, 0xab2e, 1}, + {0xabc0, 0xabed, 1}, + {0xabf0, 0xabf9, 1}, + {0xac00, 0xd7a3, 1}, + {0xd7b0, 0xd7c6, 1}, + {0xd7cb, 0xd7fb, 1}, + {0xd800, 0xfa6d, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbc1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe26, 1}, + {0xfe30, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018a, 1}, + {0x00010190, 0x0001019b, 1}, + {0x000101d0, 0x000101fd, 1}, + {0x00010280, 0x0001029c, 1}, + {0x000102a0, 0x000102d0, 1}, + {0x00010300, 0x0001031e, 1}, + {0x00010320, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010840, 0x00010855, 1}, + {0x00010857, 0x0001085f, 1}, + {0x00010900, 0x0001091b, 1}, + {0x0001091f, 0x00010939, 1}, + {0x0001093f, 0x00010980, 65}, + {0x00010981, 0x000109b7, 1}, + {0x000109be, 0x000109bf, 1}, + {0x00010a00, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x00010a60, 0x00010a7f, 1}, + {0x00010b00, 0x00010b35, 1}, + {0x00010b39, 0x00010b55, 1}, + {0x00010b58, 0x00010b72, 1}, + {0x00010b78, 0x00010b7f, 1}, + {0x00010c00, 0x00010c48, 1}, + {0x00010e60, 0x00010e7e, 1}, + {0x00011000, 0x0001104d, 1}, + {0x00011052, 0x0001106f, 1}, + {0x00011080, 0x000110c1, 1}, + {0x000110d0, 0x000110e8, 1}, + {0x000110f0, 0x000110f9, 1}, + {0x00011100, 0x00011134, 1}, + {0x00011136, 0x00011143, 1}, + {0x00011180, 0x000111c8, 1}, + {0x000111d0, 0x000111d9, 1}, + {0x00011680, 0x000116b7, 1}, + {0x000116c0, 0x000116c9, 1}, + {0x00012000, 0x0001236e, 1}, + {0x00012400, 0x00012462, 1}, + {0x00012470, 0x00012473, 1}, + {0x00013000, 0x0001342e, 1}, + {0x00016800, 0x00016a38, 1}, + {0x00016f00, 0x00016f44, 1}, + {0x00016f50, 0x00016f7e, 1}, + {0x00016f8f, 0x00016f9f, 1}, + {0x0001b000, 0x0001b001, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d129, 0x0001d1dd, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d360, 0x0001d371, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7cb, 1}, + {0x0001d7ce, 0x0001d7ff, 1}, + {0x0001ee00, 0x0001ee03, 1}, + {0x0001ee05, 0x0001ee1f, 1}, + {0x0001ee21, 0x0001ee22, 1}, + {0x0001ee24, 0x0001ee27, 3}, + {0x0001ee29, 0x0001ee32, 1}, + {0x0001ee34, 0x0001ee37, 1}, + {0x0001ee39, 0x0001ee3b, 2}, + {0x0001ee42, 0x0001ee47, 5}, + {0x0001ee49, 0x0001ee4d, 2}, + {0x0001ee4e, 0x0001ee4f, 1}, + {0x0001ee51, 0x0001ee52, 1}, + {0x0001ee54, 0x0001ee57, 3}, + {0x0001ee59, 0x0001ee61, 2}, + {0x0001ee62, 0x0001ee64, 2}, + {0x0001ee67, 0x0001ee6a, 1}, + {0x0001ee6c, 0x0001ee72, 1}, + {0x0001ee74, 0x0001ee77, 1}, + {0x0001ee79, 0x0001ee7c, 1}, + {0x0001ee7e, 0x0001ee80, 2}, + {0x0001ee81, 0x0001ee89, 1}, + {0x0001ee8b, 0x0001ee9b, 1}, + {0x0001eea1, 0x0001eea3, 1}, + {0x0001eea5, 0x0001eea9, 1}, + {0x0001eeab, 0x0001eebb, 1}, + {0x0001eef0, 0x0001eef1, 1}, + {0x0001f000, 0x0001f02b, 1}, + {0x0001f030, 0x0001f093, 1}, + {0x0001f0a0, 0x0001f0ae, 1}, + {0x0001f0b1, 0x0001f0be, 1}, + {0x0001f0c1, 0x0001f0cf, 1}, + {0x0001f0d1, 0x0001f0df, 1}, + {0x0001f100, 0x0001f10a, 1}, + {0x0001f110, 0x0001f12e, 1}, + {0x0001f130, 0x0001f16b, 1}, + {0x0001f170, 0x0001f19a, 1}, + {0x0001f1e6, 0x0001f202, 1}, + {0x0001f210, 0x0001f23a, 1}, + {0x0001f240, 0x0001f248, 1}, + {0x0001f250, 0x0001f251, 1}, + {0x0001f300, 0x0001f320, 1}, + {0x0001f330, 0x0001f335, 1}, + {0x0001f337, 0x0001f37c, 1}, + {0x0001f380, 0x0001f393, 1}, + {0x0001f3a0, 0x0001f3c4, 1}, + {0x0001f3c6, 0x0001f3ca, 1}, + {0x0001f3e0, 0x0001f3f0, 1}, + {0x0001f400, 0x0001f43e, 1}, + {0x0001f440, 0x0001f442, 2}, + {0x0001f443, 0x0001f4f7, 1}, + {0x0001f4f9, 0x0001f4fc, 1}, + {0x0001f500, 0x0001f53d, 1}, + {0x0001f540, 0x0001f543, 1}, + {0x0001f550, 0x0001f567, 1}, + {0x0001f5fb, 0x0001f640, 1}, + {0x0001f645, 0x0001f64f, 1}, + {0x0001f680, 0x0001f6c5, 1}, + {0x0001f700, 0x0001f773, 1}, + {0x00020000, 0x0002a6d6, 1}, + {0x0002a700, 0x0002b734, 1}, + {0x0002b740, 0x0002b81d, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// size 4160 bytes (4 KiB) +var assigned6_3_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x0377, 1}, + {0x037a, 0x037e, 1}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x0527, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x058f, 0x0591, 2}, + {0x0592, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x0604, 1}, + {0x0606, 0x061c, 1}, + {0x061e, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x07b1, 1}, + {0x07c0, 0x07fa, 1}, + {0x0800, 0x082d, 1}, + {0x0830, 0x083e, 1}, + {0x0840, 0x085b, 1}, + {0x085e, 0x08a0, 66}, + {0x08a2, 0x08ac, 1}, + {0x08e4, 0x08fe, 1}, + {0x0900, 0x0977, 1}, + {0x0979, 0x097f, 1}, + {0x0981, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fb, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a51, 0x0a59, 8}, + {0x0a5a, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a75, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0af1, 1}, + {0x0b01, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b44, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b63, 1}, + {0x0b66, 0x0b77, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd0, 0x0bd7, 7}, + {0x0be6, 0x0bfa, 1}, + {0x0c01, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c33, 1}, + {0x0c35, 0x0c39, 1}, + {0x0c3d, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c58, 0x0c59, 1}, + {0x0c60, 0x0c63, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c78, 0x0c7f, 1}, + {0x0c82, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce3, 1}, + {0x0ce6, 0x0cef, 1}, + {0x0cf1, 0x0cf2, 1}, + {0x0d02, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d3a, 1}, + {0x0d3d, 0x0d44, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4e, 1}, + {0x0d57, 0x0d60, 9}, + {0x0d61, 0x0d63, 1}, + {0x0d66, 0x0d75, 1}, + {0x0d79, 0x0d7f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edf, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6c, 1}, + {0x0f71, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fce, 0x0fda, 1}, + {0x1000, 0x10c5, 1}, + {0x10c7, 0x10cd, 6}, + {0x10d0, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135d, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f4, 1}, + {0x1400, 0x169c, 1}, + {0x16a0, 0x16f0, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18aa, 1}, + {0x18b0, 0x18f5, 1}, + {0x1900, 0x191c, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19ab, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19da, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a5e, 1}, + {0x1a60, 0x1a7c, 1}, + {0x1a7f, 0x1a89, 1}, + {0x1a90, 0x1a99, 1}, + {0x1aa0, 0x1aad, 1}, + {0x1b00, 0x1b4b, 1}, + {0x1b50, 0x1b7c, 1}, + {0x1b80, 0x1bf3, 1}, + {0x1bfc, 0x1c37, 1}, + {0x1c3b, 0x1c49, 1}, + {0x1c4d, 0x1c7f, 1}, + {0x1cc0, 0x1cc7, 1}, + {0x1cd0, 0x1cf6, 1}, + {0x1d00, 0x1de6, 1}, + {0x1dfc, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2064, 1}, + {0x2066, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x209c, 1}, + {0x20a0, 0x20ba, 1}, + {0x20d0, 0x20f0, 1}, + {0x2100, 0x2189, 1}, + {0x2190, 0x23f3, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x26ff, 1}, + {0x2701, 0x2b4c, 1}, + {0x2b50, 0x2b59, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c60, 0x2cf3, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d27, 0x2d2d, 6}, + {0x2d30, 0x2d67, 1}, + {0x2d6f, 0x2d70, 1}, + {0x2d7f, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2de0, 0x2e3b, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312d, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31ba, 1}, + {0x31c0, 0x31e3, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fcc, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa4d0, 0xa62b, 1}, + {0xa640, 0xa697, 1}, + {0xa69f, 0xa6f7, 1}, + {0xa700, 0xa78e, 1}, + {0xa790, 0xa793, 1}, + {0xa7a0, 0xa7aa, 1}, + {0xa7f8, 0xa82b, 1}, + {0xa830, 0xa839, 1}, + {0xa840, 0xa877, 1}, + {0xa880, 0xa8c4, 1}, + {0xa8ce, 0xa8d9, 1}, + {0xa8e0, 0xa8fb, 1}, + {0xa900, 0xa953, 1}, + {0xa95f, 0xa97c, 1}, + {0xa980, 0xa9cd, 1}, + {0xa9cf, 0xa9d9, 1}, + {0xa9de, 0xa9df, 1}, + {0xaa00, 0xaa36, 1}, + {0xaa40, 0xaa4d, 1}, + {0xaa50, 0xaa59, 1}, + {0xaa5c, 0xaa7b, 1}, + {0xaa80, 0xaac2, 1}, + {0xaadb, 0xaaf6, 1}, + {0xab01, 0xab06, 1}, + {0xab09, 0xab0e, 1}, + {0xab11, 0xab16, 1}, + {0xab20, 0xab26, 1}, + {0xab28, 0xab2e, 1}, + {0xabc0, 0xabed, 1}, + {0xabf0, 0xabf9, 1}, + {0xac00, 0xd7a3, 1}, + {0xd7b0, 0xd7c6, 1}, + {0xd7cb, 0xd7fb, 1}, + {0xd800, 0xfa6d, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbc1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe26, 1}, + {0xfe30, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018a, 1}, + {0x00010190, 0x0001019b, 1}, + {0x000101d0, 0x000101fd, 1}, + {0x00010280, 0x0001029c, 1}, + {0x000102a0, 0x000102d0, 1}, + {0x00010300, 0x0001031e, 1}, + {0x00010320, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010840, 0x00010855, 1}, + {0x00010857, 0x0001085f, 1}, + {0x00010900, 0x0001091b, 1}, + {0x0001091f, 0x00010939, 1}, + {0x0001093f, 0x00010980, 65}, + {0x00010981, 0x000109b7, 1}, + {0x000109be, 0x000109bf, 1}, + {0x00010a00, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x00010a60, 0x00010a7f, 1}, + {0x00010b00, 0x00010b35, 1}, + {0x00010b39, 0x00010b55, 1}, + {0x00010b58, 0x00010b72, 1}, + {0x00010b78, 0x00010b7f, 1}, + {0x00010c00, 0x00010c48, 1}, + {0x00010e60, 0x00010e7e, 1}, + {0x00011000, 0x0001104d, 1}, + {0x00011052, 0x0001106f, 1}, + {0x00011080, 0x000110c1, 1}, + {0x000110d0, 0x000110e8, 1}, + {0x000110f0, 0x000110f9, 1}, + {0x00011100, 0x00011134, 1}, + {0x00011136, 0x00011143, 1}, + {0x00011180, 0x000111c8, 1}, + {0x000111d0, 0x000111d9, 1}, + {0x00011680, 0x000116b7, 1}, + {0x000116c0, 0x000116c9, 1}, + {0x00012000, 0x0001236e, 1}, + {0x00012400, 0x00012462, 1}, + {0x00012470, 0x00012473, 1}, + {0x00013000, 0x0001342e, 1}, + {0x00016800, 0x00016a38, 1}, + {0x00016f00, 0x00016f44, 1}, + {0x00016f50, 0x00016f7e, 1}, + {0x00016f8f, 0x00016f9f, 1}, + {0x0001b000, 0x0001b001, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d129, 0x0001d1dd, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d360, 0x0001d371, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7cb, 1}, + {0x0001d7ce, 0x0001d7ff, 1}, + {0x0001ee00, 0x0001ee03, 1}, + {0x0001ee05, 0x0001ee1f, 1}, + {0x0001ee21, 0x0001ee22, 1}, + {0x0001ee24, 0x0001ee27, 3}, + {0x0001ee29, 0x0001ee32, 1}, + {0x0001ee34, 0x0001ee37, 1}, + {0x0001ee39, 0x0001ee3b, 2}, + {0x0001ee42, 0x0001ee47, 5}, + {0x0001ee49, 0x0001ee4d, 2}, + {0x0001ee4e, 0x0001ee4f, 1}, + {0x0001ee51, 0x0001ee52, 1}, + {0x0001ee54, 0x0001ee57, 3}, + {0x0001ee59, 0x0001ee61, 2}, + {0x0001ee62, 0x0001ee64, 2}, + {0x0001ee67, 0x0001ee6a, 1}, + {0x0001ee6c, 0x0001ee72, 1}, + {0x0001ee74, 0x0001ee77, 1}, + {0x0001ee79, 0x0001ee7c, 1}, + {0x0001ee7e, 0x0001ee80, 2}, + {0x0001ee81, 0x0001ee89, 1}, + {0x0001ee8b, 0x0001ee9b, 1}, + {0x0001eea1, 0x0001eea3, 1}, + {0x0001eea5, 0x0001eea9, 1}, + {0x0001eeab, 0x0001eebb, 1}, + {0x0001eef0, 0x0001eef1, 1}, + {0x0001f000, 0x0001f02b, 1}, + {0x0001f030, 0x0001f093, 1}, + {0x0001f0a0, 0x0001f0ae, 1}, + {0x0001f0b1, 0x0001f0be, 1}, + {0x0001f0c1, 0x0001f0cf, 1}, + {0x0001f0d1, 0x0001f0df, 1}, + {0x0001f100, 0x0001f10a, 1}, + {0x0001f110, 0x0001f12e, 1}, + {0x0001f130, 0x0001f16b, 1}, + {0x0001f170, 0x0001f19a, 1}, + {0x0001f1e6, 0x0001f202, 1}, + {0x0001f210, 0x0001f23a, 1}, + {0x0001f240, 0x0001f248, 1}, + {0x0001f250, 0x0001f251, 1}, + {0x0001f300, 0x0001f320, 1}, + {0x0001f330, 0x0001f335, 1}, + {0x0001f337, 0x0001f37c, 1}, + {0x0001f380, 0x0001f393, 1}, + {0x0001f3a0, 0x0001f3c4, 1}, + {0x0001f3c6, 0x0001f3ca, 1}, + {0x0001f3e0, 0x0001f3f0, 1}, + {0x0001f400, 0x0001f43e, 1}, + {0x0001f440, 0x0001f442, 2}, + {0x0001f443, 0x0001f4f7, 1}, + {0x0001f4f9, 0x0001f4fc, 1}, + {0x0001f500, 0x0001f53d, 1}, + {0x0001f540, 0x0001f543, 1}, + {0x0001f550, 0x0001f567, 1}, + {0x0001f5fb, 0x0001f640, 1}, + {0x0001f645, 0x0001f64f, 1}, + {0x0001f680, 0x0001f6c5, 1}, + {0x0001f700, 0x0001f773, 1}, + {0x00020000, 0x0002a6d6, 1}, + {0x0002a700, 0x0002b734, 1}, + {0x0002b740, 0x0002b81d, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// size 3812 bytes (3 KiB) +var assigned6_0_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x0377, 1}, + {0x037a, 0x037e, 1}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x0527, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x0591, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x0603, 1}, + {0x0606, 0x061b, 1}, + {0x061e, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x07b1, 1}, + {0x07c0, 0x07fa, 1}, + {0x0800, 0x082d, 1}, + {0x0830, 0x083e, 1}, + {0x0840, 0x085b, 1}, + {0x085e, 0x0900, 162}, + {0x0901, 0x0977, 1}, + {0x0979, 0x097f, 1}, + {0x0981, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fb, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a51, 0x0a59, 8}, + {0x0a5a, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a75, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0aef, 1}, + {0x0af1, 0x0b01, 16}, + {0x0b02, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b44, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b63, 1}, + {0x0b66, 0x0b77, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd0, 0x0bd7, 7}, + {0x0be6, 0x0bfa, 1}, + {0x0c01, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c33, 1}, + {0x0c35, 0x0c39, 1}, + {0x0c3d, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c58, 0x0c59, 1}, + {0x0c60, 0x0c63, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c78, 0x0c7f, 1}, + {0x0c82, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce3, 1}, + {0x0ce6, 0x0cef, 1}, + {0x0cf1, 0x0cf2, 1}, + {0x0d02, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d3a, 1}, + {0x0d3d, 0x0d44, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4e, 1}, + {0x0d57, 0x0d60, 9}, + {0x0d61, 0x0d63, 1}, + {0x0d66, 0x0d75, 1}, + {0x0d79, 0x0d7f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edd, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6c, 1}, + {0x0f71, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fce, 0x0fda, 1}, + {0x1000, 0x10c5, 1}, + {0x10d0, 0x10fc, 1}, + {0x1100, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135d, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f4, 1}, + {0x1400, 0x169c, 1}, + {0x16a0, 0x16f0, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18aa, 1}, + {0x18b0, 0x18f5, 1}, + {0x1900, 0x191c, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19ab, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19da, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a5e, 1}, + {0x1a60, 0x1a7c, 1}, + {0x1a7f, 0x1a89, 1}, + {0x1a90, 0x1a99, 1}, + {0x1aa0, 0x1aad, 1}, + {0x1b00, 0x1b4b, 1}, + {0x1b50, 0x1b7c, 1}, + {0x1b80, 0x1baa, 1}, + {0x1bae, 0x1bb9, 1}, + {0x1bc0, 0x1bf3, 1}, + {0x1bfc, 0x1c37, 1}, + {0x1c3b, 0x1c49, 1}, + {0x1c4d, 0x1c7f, 1}, + {0x1cd0, 0x1cf2, 1}, + {0x1d00, 0x1de6, 1}, + {0x1dfc, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2064, 1}, + {0x206a, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x209c, 1}, + {0x20a0, 0x20b9, 1}, + {0x20d0, 0x20f0, 1}, + {0x2100, 0x2189, 1}, + {0x2190, 0x23f3, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x26ff, 1}, + {0x2701, 0x27ca, 1}, + {0x27cc, 0x27ce, 2}, + {0x27cf, 0x2b4c, 1}, + {0x2b50, 0x2b59, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c60, 0x2cf1, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d30, 0x2d65, 1}, + {0x2d6f, 0x2d70, 1}, + {0x2d7f, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2de0, 0x2e31, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312d, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31ba, 1}, + {0x31c0, 0x31e3, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fcb, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa4d0, 0xa62b, 1}, + {0xa640, 0xa673, 1}, + {0xa67c, 0xa697, 1}, + {0xa6a0, 0xa6f7, 1}, + {0xa700, 0xa78e, 1}, + {0xa790, 0xa791, 1}, + {0xa7a0, 0xa7a9, 1}, + {0xa7fa, 0xa82b, 1}, + {0xa830, 0xa839, 1}, + {0xa840, 0xa877, 1}, + {0xa880, 0xa8c4, 1}, + {0xa8ce, 0xa8d9, 1}, + {0xa8e0, 0xa8fb, 1}, + {0xa900, 0xa953, 1}, + {0xa95f, 0xa97c, 1}, + {0xa980, 0xa9cd, 1}, + {0xa9cf, 0xa9d9, 1}, + {0xa9de, 0xa9df, 1}, + {0xaa00, 0xaa36, 1}, + {0xaa40, 0xaa4d, 1}, + {0xaa50, 0xaa59, 1}, + {0xaa5c, 0xaa7b, 1}, + {0xaa80, 0xaac2, 1}, + {0xaadb, 0xaadf, 1}, + {0xab01, 0xab06, 1}, + {0xab09, 0xab0e, 1}, + {0xab11, 0xab16, 1}, + {0xab20, 0xab26, 1}, + {0xab28, 0xab2e, 1}, + {0xabc0, 0xabed, 1}, + {0xabf0, 0xabf9, 1}, + {0xac00, 0xd7a3, 1}, + {0xd7b0, 0xd7c6, 1}, + {0xd7cb, 0xd7fb, 1}, + {0xd800, 0xfa2d, 1}, + {0xfa30, 0xfa6d, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbc1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe26, 1}, + {0xfe30, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018a, 1}, + {0x00010190, 0x0001019b, 1}, + {0x000101d0, 0x000101fd, 1}, + {0x00010280, 0x0001029c, 1}, + {0x000102a0, 0x000102d0, 1}, + {0x00010300, 0x0001031e, 1}, + {0x00010320, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010840, 0x00010855, 1}, + {0x00010857, 0x0001085f, 1}, + {0x00010900, 0x0001091b, 1}, + {0x0001091f, 0x00010939, 1}, + {0x0001093f, 0x00010a00, 193}, + {0x00010a01, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x00010a60, 0x00010a7f, 1}, + {0x00010b00, 0x00010b35, 1}, + {0x00010b39, 0x00010b55, 1}, + {0x00010b58, 0x00010b72, 1}, + {0x00010b78, 0x00010b7f, 1}, + {0x00010c00, 0x00010c48, 1}, + {0x00010e60, 0x00010e7e, 1}, + {0x00011000, 0x0001104d, 1}, + {0x00011052, 0x0001106f, 1}, + {0x00011080, 0x000110c1, 1}, + {0x00012000, 0x0001236e, 1}, + {0x00012400, 0x00012462, 1}, + {0x00012470, 0x00012473, 1}, + {0x00013000, 0x0001342e, 1}, + {0x00016800, 0x00016a38, 1}, + {0x0001b000, 0x0001b001, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d129, 0x0001d1dd, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d360, 0x0001d371, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7cb, 1}, + {0x0001d7ce, 0x0001d7ff, 1}, + {0x0001f000, 0x0001f02b, 1}, + {0x0001f030, 0x0001f093, 1}, + {0x0001f0a0, 0x0001f0ae, 1}, + {0x0001f0b1, 0x0001f0be, 1}, + {0x0001f0c1, 0x0001f0cf, 1}, + {0x0001f0d1, 0x0001f0df, 1}, + {0x0001f100, 0x0001f10a, 1}, + {0x0001f110, 0x0001f12e, 1}, + {0x0001f130, 0x0001f169, 1}, + {0x0001f170, 0x0001f19a, 1}, + {0x0001f1e6, 0x0001f202, 1}, + {0x0001f210, 0x0001f23a, 1}, + {0x0001f240, 0x0001f248, 1}, + {0x0001f250, 0x0001f251, 1}, + {0x0001f300, 0x0001f320, 1}, + {0x0001f330, 0x0001f335, 1}, + {0x0001f337, 0x0001f37c, 1}, + {0x0001f380, 0x0001f393, 1}, + {0x0001f3a0, 0x0001f3c4, 1}, + {0x0001f3c6, 0x0001f3ca, 1}, + {0x0001f3e0, 0x0001f3f0, 1}, + {0x0001f400, 0x0001f43e, 1}, + {0x0001f440, 0x0001f442, 2}, + {0x0001f443, 0x0001f4f7, 1}, + {0x0001f4f9, 0x0001f4fc, 1}, + {0x0001f500, 0x0001f53d, 1}, + {0x0001f550, 0x0001f567, 1}, + {0x0001f5fb, 0x0001f5ff, 1}, + {0x0001f601, 0x0001f610, 1}, + {0x0001f612, 0x0001f614, 1}, + {0x0001f616, 0x0001f61c, 2}, + {0x0001f61d, 0x0001f61e, 1}, + {0x0001f620, 0x0001f625, 1}, + {0x0001f628, 0x0001f62b, 1}, + {0x0001f62d, 0x0001f630, 3}, + {0x0001f631, 0x0001f633, 1}, + {0x0001f635, 0x0001f640, 1}, + {0x0001f645, 0x0001f64f, 1}, + {0x0001f680, 0x0001f6c5, 1}, + {0x0001f700, 0x0001f773, 1}, + {0x00020000, 0x0002a6d6, 1}, + {0x0002a700, 0x0002b734, 1}, + {0x0002b740, 0x0002b81d, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// size 4898 bytes (4 KiB) +var assigned7_0_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x0377, 1}, + {0x037a, 0x037f, 1}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x052f, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x058d, 0x058f, 1}, + {0x0591, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x061c, 1}, + {0x061e, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x07b1, 1}, + {0x07c0, 0x07fa, 1}, + {0x0800, 0x082d, 1}, + {0x0830, 0x083e, 1}, + {0x0840, 0x085b, 1}, + {0x085e, 0x08a0, 66}, + {0x08a1, 0x08b2, 1}, + {0x08e4, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fb, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a51, 0x0a59, 8}, + {0x0a5a, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a75, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0af1, 1}, + {0x0b01, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b44, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b63, 1}, + {0x0b66, 0x0b77, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd0, 0x0bd7, 7}, + {0x0be6, 0x0bfa, 1}, + {0x0c00, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c39, 1}, + {0x0c3d, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c58, 0x0c59, 1}, + {0x0c60, 0x0c63, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c78, 0x0c7f, 1}, + {0x0c81, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce3, 1}, + {0x0ce6, 0x0cef, 1}, + {0x0cf1, 0x0cf2, 1}, + {0x0d01, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d3a, 1}, + {0x0d3d, 0x0d44, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4e, 1}, + {0x0d57, 0x0d60, 9}, + {0x0d61, 0x0d63, 1}, + {0x0d66, 0x0d75, 1}, + {0x0d79, 0x0d7f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0de6, 0x0def, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edf, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6c, 1}, + {0x0f71, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fce, 0x0fda, 1}, + {0x1000, 0x10c5, 1}, + {0x10c7, 0x10cd, 6}, + {0x10d0, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135d, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f4, 1}, + {0x1400, 0x169c, 1}, + {0x16a0, 0x16f8, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18aa, 1}, + {0x18b0, 0x18f5, 1}, + {0x1900, 0x191e, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19ab, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19da, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a5e, 1}, + {0x1a60, 0x1a7c, 1}, + {0x1a7f, 0x1a89, 1}, + {0x1a90, 0x1a99, 1}, + {0x1aa0, 0x1aad, 1}, + {0x1ab0, 0x1abe, 1}, + {0x1b00, 0x1b4b, 1}, + {0x1b50, 0x1b7c, 1}, + {0x1b80, 0x1bf3, 1}, + {0x1bfc, 0x1c37, 1}, + {0x1c3b, 0x1c49, 1}, + {0x1c4d, 0x1c7f, 1}, + {0x1cc0, 0x1cc7, 1}, + {0x1cd0, 0x1cf6, 1}, + {0x1cf8, 0x1cf9, 1}, + {0x1d00, 0x1df5, 1}, + {0x1dfc, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2064, 1}, + {0x2066, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x209c, 1}, + {0x20a0, 0x20bd, 1}, + {0x20d0, 0x20f0, 1}, + {0x2100, 0x2189, 1}, + {0x2190, 0x23fa, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x2b73, 1}, + {0x2b76, 0x2b95, 1}, + {0x2b98, 0x2bb9, 1}, + {0x2bbd, 0x2bc8, 1}, + {0x2bca, 0x2bd1, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c60, 0x2cf3, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d27, 0x2d2d, 6}, + {0x2d30, 0x2d67, 1}, + {0x2d6f, 0x2d70, 1}, + {0x2d7f, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2de0, 0x2e42, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312d, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31ba, 1}, + {0x31c0, 0x31e3, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fcc, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa4d0, 0xa62b, 1}, + {0xa640, 0xa69d, 1}, + {0xa69f, 0xa6f7, 1}, + {0xa700, 0xa78e, 1}, + {0xa790, 0xa7ad, 1}, + {0xa7b0, 0xa7b1, 1}, + {0xa7f7, 0xa82b, 1}, + {0xa830, 0xa839, 1}, + {0xa840, 0xa877, 1}, + {0xa880, 0xa8c4, 1}, + {0xa8ce, 0xa8d9, 1}, + {0xa8e0, 0xa8fb, 1}, + {0xa900, 0xa953, 1}, + {0xa95f, 0xa97c, 1}, + {0xa980, 0xa9cd, 1}, + {0xa9cf, 0xa9d9, 1}, + {0xa9de, 0xa9fe, 1}, + {0xaa00, 0xaa36, 1}, + {0xaa40, 0xaa4d, 1}, + {0xaa50, 0xaa59, 1}, + {0xaa5c, 0xaac2, 1}, + {0xaadb, 0xaaf6, 1}, + {0xab01, 0xab06, 1}, + {0xab09, 0xab0e, 1}, + {0xab11, 0xab16, 1}, + {0xab20, 0xab26, 1}, + {0xab28, 0xab2e, 1}, + {0xab30, 0xab5f, 1}, + {0xab64, 0xab65, 1}, + {0xabc0, 0xabed, 1}, + {0xabf0, 0xabf9, 1}, + {0xac00, 0xd7a3, 1}, + {0xd7b0, 0xd7c6, 1}, + {0xd7cb, 0xd7fb, 1}, + {0xd800, 0xfa6d, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbc1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe2d, 1}, + {0xfe30, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018c, 1}, + {0x00010190, 0x0001019b, 1}, + {0x000101a0, 0x000101d0, 48}, + {0x000101d1, 0x000101fd, 1}, + {0x00010280, 0x0001029c, 1}, + {0x000102a0, 0x000102d0, 1}, + {0x000102e0, 0x000102fb, 1}, + {0x00010300, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010350, 0x0001037a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x00010500, 0x00010527, 1}, + {0x00010530, 0x00010563, 1}, + {0x0001056f, 0x00010600, 145}, + {0x00010601, 0x00010736, 1}, + {0x00010740, 0x00010755, 1}, + {0x00010760, 0x00010767, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010840, 0x00010855, 1}, + {0x00010857, 0x0001089e, 1}, + {0x000108a7, 0x000108af, 1}, + {0x00010900, 0x0001091b, 1}, + {0x0001091f, 0x00010939, 1}, + {0x0001093f, 0x00010980, 65}, + {0x00010981, 0x000109b7, 1}, + {0x000109be, 0x000109bf, 1}, + {0x00010a00, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x00010a60, 0x00010a9f, 1}, + {0x00010ac0, 0x00010ae6, 1}, + {0x00010aeb, 0x00010af6, 1}, + {0x00010b00, 0x00010b35, 1}, + {0x00010b39, 0x00010b55, 1}, + {0x00010b58, 0x00010b72, 1}, + {0x00010b78, 0x00010b91, 1}, + {0x00010b99, 0x00010b9c, 1}, + {0x00010ba9, 0x00010baf, 1}, + {0x00010c00, 0x00010c48, 1}, + {0x00010e60, 0x00010e7e, 1}, + {0x00011000, 0x0001104d, 1}, + {0x00011052, 0x0001106f, 1}, + {0x0001107f, 0x000110c1, 1}, + {0x000110d0, 0x000110e8, 1}, + {0x000110f0, 0x000110f9, 1}, + {0x00011100, 0x00011134, 1}, + {0x00011136, 0x00011143, 1}, + {0x00011150, 0x00011176, 1}, + {0x00011180, 0x000111c8, 1}, + {0x000111cd, 0x000111d0, 3}, + {0x000111d1, 0x000111da, 1}, + {0x000111e1, 0x000111f4, 1}, + {0x00011200, 0x00011211, 1}, + {0x00011213, 0x0001123d, 1}, + {0x000112b0, 0x000112ea, 1}, + {0x000112f0, 0x000112f9, 1}, + {0x00011301, 0x00011303, 1}, + {0x00011305, 0x0001130c, 1}, + {0x0001130f, 0x00011310, 1}, + {0x00011313, 0x00011328, 1}, + {0x0001132a, 0x00011330, 1}, + {0x00011332, 0x00011333, 1}, + {0x00011335, 0x00011339, 1}, + {0x0001133c, 0x00011344, 1}, + {0x00011347, 0x00011348, 1}, + {0x0001134b, 0x0001134d, 1}, + {0x00011357, 0x0001135d, 6}, + {0x0001135e, 0x00011363, 1}, + {0x00011366, 0x0001136c, 1}, + {0x00011370, 0x00011374, 1}, + {0x00011480, 0x000114c7, 1}, + {0x000114d0, 0x000114d9, 1}, + {0x00011580, 0x000115b5, 1}, + {0x000115b8, 0x000115c9, 1}, + {0x00011600, 0x00011644, 1}, + {0x00011650, 0x00011659, 1}, + {0x00011680, 0x000116b7, 1}, + {0x000116c0, 0x000116c9, 1}, + {0x000118a0, 0x000118f2, 1}, + {0x000118ff, 0x00011ac0, 449}, + {0x00011ac1, 0x00011af8, 1}, + {0x00012000, 0x00012398, 1}, + {0x00012400, 0x0001246e, 1}, + {0x00012470, 0x00012474, 1}, + {0x00013000, 0x0001342e, 1}, + {0x00016800, 0x00016a38, 1}, + {0x00016a40, 0x00016a5e, 1}, + {0x00016a60, 0x00016a69, 1}, + {0x00016a6e, 0x00016a6f, 1}, + {0x00016ad0, 0x00016aed, 1}, + {0x00016af0, 0x00016af5, 1}, + {0x00016b00, 0x00016b45, 1}, + {0x00016b50, 0x00016b59, 1}, + {0x00016b5b, 0x00016b61, 1}, + {0x00016b63, 0x00016b77, 1}, + {0x00016b7d, 0x00016b8f, 1}, + {0x00016f00, 0x00016f44, 1}, + {0x00016f50, 0x00016f7e, 1}, + {0x00016f8f, 0x00016f9f, 1}, + {0x0001b000, 0x0001b001, 1}, + {0x0001bc00, 0x0001bc6a, 1}, + {0x0001bc70, 0x0001bc7c, 1}, + {0x0001bc80, 0x0001bc88, 1}, + {0x0001bc90, 0x0001bc99, 1}, + {0x0001bc9c, 0x0001bca3, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d129, 0x0001d1dd, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d360, 0x0001d371, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7cb, 1}, + {0x0001d7ce, 0x0001d7ff, 1}, + {0x0001e800, 0x0001e8c4, 1}, + {0x0001e8c7, 0x0001e8d6, 1}, + {0x0001ee00, 0x0001ee03, 1}, + {0x0001ee05, 0x0001ee1f, 1}, + {0x0001ee21, 0x0001ee22, 1}, + {0x0001ee24, 0x0001ee27, 3}, + {0x0001ee29, 0x0001ee32, 1}, + {0x0001ee34, 0x0001ee37, 1}, + {0x0001ee39, 0x0001ee3b, 2}, + {0x0001ee42, 0x0001ee47, 5}, + {0x0001ee49, 0x0001ee4d, 2}, + {0x0001ee4e, 0x0001ee4f, 1}, + {0x0001ee51, 0x0001ee52, 1}, + {0x0001ee54, 0x0001ee57, 3}, + {0x0001ee59, 0x0001ee61, 2}, + {0x0001ee62, 0x0001ee64, 2}, + {0x0001ee67, 0x0001ee6a, 1}, + {0x0001ee6c, 0x0001ee72, 1}, + {0x0001ee74, 0x0001ee77, 1}, + {0x0001ee79, 0x0001ee7c, 1}, + {0x0001ee7e, 0x0001ee80, 2}, + {0x0001ee81, 0x0001ee89, 1}, + {0x0001ee8b, 0x0001ee9b, 1}, + {0x0001eea1, 0x0001eea3, 1}, + {0x0001eea5, 0x0001eea9, 1}, + {0x0001eeab, 0x0001eebb, 1}, + {0x0001eef0, 0x0001eef1, 1}, + {0x0001f000, 0x0001f02b, 1}, + {0x0001f030, 0x0001f093, 1}, + {0x0001f0a0, 0x0001f0ae, 1}, + {0x0001f0b1, 0x0001f0bf, 1}, + {0x0001f0c1, 0x0001f0cf, 1}, + {0x0001f0d1, 0x0001f0f5, 1}, + {0x0001f100, 0x0001f10c, 1}, + {0x0001f110, 0x0001f12e, 1}, + {0x0001f130, 0x0001f16b, 1}, + {0x0001f170, 0x0001f19a, 1}, + {0x0001f1e6, 0x0001f202, 1}, + {0x0001f210, 0x0001f23a, 1}, + {0x0001f240, 0x0001f248, 1}, + {0x0001f250, 0x0001f251, 1}, + {0x0001f300, 0x0001f32c, 1}, + {0x0001f330, 0x0001f37d, 1}, + {0x0001f380, 0x0001f3ce, 1}, + {0x0001f3d4, 0x0001f3f7, 1}, + {0x0001f400, 0x0001f4fe, 1}, + {0x0001f500, 0x0001f54a, 1}, + {0x0001f550, 0x0001f579, 1}, + {0x0001f57b, 0x0001f5a3, 1}, + {0x0001f5a5, 0x0001f642, 1}, + {0x0001f645, 0x0001f6cf, 1}, + {0x0001f6e0, 0x0001f6ec, 1}, + {0x0001f6f0, 0x0001f6f3, 1}, + {0x0001f700, 0x0001f773, 1}, + {0x0001f780, 0x0001f7d4, 1}, + {0x0001f800, 0x0001f80b, 1}, + {0x0001f810, 0x0001f847, 1}, + {0x0001f850, 0x0001f859, 1}, + {0x0001f860, 0x0001f887, 1}, + {0x0001f890, 0x0001f8ad, 1}, + {0x00020000, 0x0002a6d6, 1}, + {0x0002a700, 0x0002b734, 1}, + {0x0002b740, 0x0002b81d, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// size 5048 bytes (4 KiB) +var assigned8_0_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x0377, 1}, + {0x037a, 0x037f, 1}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x052f, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x058d, 0x058f, 1}, + {0x0591, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x061c, 1}, + {0x061e, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x07b1, 1}, + {0x07c0, 0x07fa, 1}, + {0x0800, 0x082d, 1}, + {0x0830, 0x083e, 1}, + {0x0840, 0x085b, 1}, + {0x085e, 0x08a0, 66}, + {0x08a1, 0x08b4, 1}, + {0x08e3, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fb, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a51, 0x0a59, 8}, + {0x0a5a, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a75, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0af1, 1}, + {0x0af9, 0x0b01, 8}, + {0x0b02, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b44, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b63, 1}, + {0x0b66, 0x0b77, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd0, 0x0bd7, 7}, + {0x0be6, 0x0bfa, 1}, + {0x0c00, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c39, 1}, + {0x0c3d, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c58, 0x0c5a, 1}, + {0x0c60, 0x0c63, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c78, 0x0c7f, 1}, + {0x0c81, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce3, 1}, + {0x0ce6, 0x0cef, 1}, + {0x0cf1, 0x0cf2, 1}, + {0x0d01, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d3a, 1}, + {0x0d3d, 0x0d44, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4e, 1}, + {0x0d57, 0x0d5f, 8}, + {0x0d60, 0x0d63, 1}, + {0x0d66, 0x0d75, 1}, + {0x0d79, 0x0d7f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0de6, 0x0def, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edf, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6c, 1}, + {0x0f71, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fce, 0x0fda, 1}, + {0x1000, 0x10c5, 1}, + {0x10c7, 0x10cd, 6}, + {0x10d0, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135d, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f5, 1}, + {0x13f8, 0x13fd, 1}, + {0x1400, 0x169c, 1}, + {0x16a0, 0x16f8, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18aa, 1}, + {0x18b0, 0x18f5, 1}, + {0x1900, 0x191e, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19ab, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19da, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a5e, 1}, + {0x1a60, 0x1a7c, 1}, + {0x1a7f, 0x1a89, 1}, + {0x1a90, 0x1a99, 1}, + {0x1aa0, 0x1aad, 1}, + {0x1ab0, 0x1abe, 1}, + {0x1b00, 0x1b4b, 1}, + {0x1b50, 0x1b7c, 1}, + {0x1b80, 0x1bf3, 1}, + {0x1bfc, 0x1c37, 1}, + {0x1c3b, 0x1c49, 1}, + {0x1c4d, 0x1c7f, 1}, + {0x1cc0, 0x1cc7, 1}, + {0x1cd0, 0x1cf6, 1}, + {0x1cf8, 0x1cf9, 1}, + {0x1d00, 0x1df5, 1}, + {0x1dfc, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2064, 1}, + {0x2066, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x209c, 1}, + {0x20a0, 0x20be, 1}, + {0x20d0, 0x20f0, 1}, + {0x2100, 0x218b, 1}, + {0x2190, 0x23fa, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x2b73, 1}, + {0x2b76, 0x2b95, 1}, + {0x2b98, 0x2bb9, 1}, + {0x2bbd, 0x2bc8, 1}, + {0x2bca, 0x2bd1, 1}, + {0x2bec, 0x2bef, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c60, 0x2cf3, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d27, 0x2d2d, 6}, + {0x2d30, 0x2d67, 1}, + {0x2d6f, 0x2d70, 1}, + {0x2d7f, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2de0, 0x2e42, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312d, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31ba, 1}, + {0x31c0, 0x31e3, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fd5, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa4d0, 0xa62b, 1}, + {0xa640, 0xa6f7, 1}, + {0xa700, 0xa7ad, 1}, + {0xa7b0, 0xa7b7, 1}, + {0xa7f7, 0xa82b, 1}, + {0xa830, 0xa839, 1}, + {0xa840, 0xa877, 1}, + {0xa880, 0xa8c4, 1}, + {0xa8ce, 0xa8d9, 1}, + {0xa8e0, 0xa8fd, 1}, + {0xa900, 0xa953, 1}, + {0xa95f, 0xa97c, 1}, + {0xa980, 0xa9cd, 1}, + {0xa9cf, 0xa9d9, 1}, + {0xa9de, 0xa9fe, 1}, + {0xaa00, 0xaa36, 1}, + {0xaa40, 0xaa4d, 1}, + {0xaa50, 0xaa59, 1}, + {0xaa5c, 0xaac2, 1}, + {0xaadb, 0xaaf6, 1}, + {0xab01, 0xab06, 1}, + {0xab09, 0xab0e, 1}, + {0xab11, 0xab16, 1}, + {0xab20, 0xab26, 1}, + {0xab28, 0xab2e, 1}, + {0xab30, 0xab65, 1}, + {0xab70, 0xabed, 1}, + {0xabf0, 0xabf9, 1}, + {0xac00, 0xd7a3, 1}, + {0xd7b0, 0xd7c6, 1}, + {0xd7cb, 0xd7fb, 1}, + {0xd800, 0xfa6d, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbc1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018c, 1}, + {0x00010190, 0x0001019b, 1}, + {0x000101a0, 0x000101d0, 48}, + {0x000101d1, 0x000101fd, 1}, + {0x00010280, 0x0001029c, 1}, + {0x000102a0, 0x000102d0, 1}, + {0x000102e0, 0x000102fb, 1}, + {0x00010300, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010350, 0x0001037a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x00010500, 0x00010527, 1}, + {0x00010530, 0x00010563, 1}, + {0x0001056f, 0x00010600, 145}, + {0x00010601, 0x00010736, 1}, + {0x00010740, 0x00010755, 1}, + {0x00010760, 0x00010767, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010840, 0x00010855, 1}, + {0x00010857, 0x0001089e, 1}, + {0x000108a7, 0x000108af, 1}, + {0x000108e0, 0x000108f2, 1}, + {0x000108f4, 0x000108f5, 1}, + {0x000108fb, 0x0001091b, 1}, + {0x0001091f, 0x00010939, 1}, + {0x0001093f, 0x00010980, 65}, + {0x00010981, 0x000109b7, 1}, + {0x000109bc, 0x000109cf, 1}, + {0x000109d2, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x00010a60, 0x00010a9f, 1}, + {0x00010ac0, 0x00010ae6, 1}, + {0x00010aeb, 0x00010af6, 1}, + {0x00010b00, 0x00010b35, 1}, + {0x00010b39, 0x00010b55, 1}, + {0x00010b58, 0x00010b72, 1}, + {0x00010b78, 0x00010b91, 1}, + {0x00010b99, 0x00010b9c, 1}, + {0x00010ba9, 0x00010baf, 1}, + {0x00010c00, 0x00010c48, 1}, + {0x00010c80, 0x00010cb2, 1}, + {0x00010cc0, 0x00010cf2, 1}, + {0x00010cfa, 0x00010cff, 1}, + {0x00010e60, 0x00010e7e, 1}, + {0x00011000, 0x0001104d, 1}, + {0x00011052, 0x0001106f, 1}, + {0x0001107f, 0x000110c1, 1}, + {0x000110d0, 0x000110e8, 1}, + {0x000110f0, 0x000110f9, 1}, + {0x00011100, 0x00011134, 1}, + {0x00011136, 0x00011143, 1}, + {0x00011150, 0x00011176, 1}, + {0x00011180, 0x000111cd, 1}, + {0x000111d0, 0x000111df, 1}, + {0x000111e1, 0x000111f4, 1}, + {0x00011200, 0x00011211, 1}, + {0x00011213, 0x0001123d, 1}, + {0x00011280, 0x00011286, 1}, + {0x00011288, 0x0001128a, 2}, + {0x0001128b, 0x0001128d, 1}, + {0x0001128f, 0x0001129d, 1}, + {0x0001129f, 0x000112a9, 1}, + {0x000112b0, 0x000112ea, 1}, + {0x000112f0, 0x000112f9, 1}, + {0x00011300, 0x00011303, 1}, + {0x00011305, 0x0001130c, 1}, + {0x0001130f, 0x00011310, 1}, + {0x00011313, 0x00011328, 1}, + {0x0001132a, 0x00011330, 1}, + {0x00011332, 0x00011333, 1}, + {0x00011335, 0x00011339, 1}, + {0x0001133c, 0x00011344, 1}, + {0x00011347, 0x00011348, 1}, + {0x0001134b, 0x0001134d, 1}, + {0x00011350, 0x00011357, 7}, + {0x0001135d, 0x00011363, 1}, + {0x00011366, 0x0001136c, 1}, + {0x00011370, 0x00011374, 1}, + {0x00011480, 0x000114c7, 1}, + {0x000114d0, 0x000114d9, 1}, + {0x00011580, 0x000115b5, 1}, + {0x000115b8, 0x000115dd, 1}, + {0x00011600, 0x00011644, 1}, + {0x00011650, 0x00011659, 1}, + {0x00011680, 0x000116b7, 1}, + {0x000116c0, 0x000116c9, 1}, + {0x00011700, 0x00011719, 1}, + {0x0001171d, 0x0001172b, 1}, + {0x00011730, 0x0001173f, 1}, + {0x000118a0, 0x000118f2, 1}, + {0x000118ff, 0x00011ac0, 449}, + {0x00011ac1, 0x00011af8, 1}, + {0x00012000, 0x00012399, 1}, + {0x00012400, 0x0001246e, 1}, + {0x00012470, 0x00012474, 1}, + {0x00012480, 0x00012543, 1}, + {0x00013000, 0x0001342e, 1}, + {0x00014400, 0x00014646, 1}, + {0x00016800, 0x00016a38, 1}, + {0x00016a40, 0x00016a5e, 1}, + {0x00016a60, 0x00016a69, 1}, + {0x00016a6e, 0x00016a6f, 1}, + {0x00016ad0, 0x00016aed, 1}, + {0x00016af0, 0x00016af5, 1}, + {0x00016b00, 0x00016b45, 1}, + {0x00016b50, 0x00016b59, 1}, + {0x00016b5b, 0x00016b61, 1}, + {0x00016b63, 0x00016b77, 1}, + {0x00016b7d, 0x00016b8f, 1}, + {0x00016f00, 0x00016f44, 1}, + {0x00016f50, 0x00016f7e, 1}, + {0x00016f8f, 0x00016f9f, 1}, + {0x0001b000, 0x0001b001, 1}, + {0x0001bc00, 0x0001bc6a, 1}, + {0x0001bc70, 0x0001bc7c, 1}, + {0x0001bc80, 0x0001bc88, 1}, + {0x0001bc90, 0x0001bc99, 1}, + {0x0001bc9c, 0x0001bca3, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d129, 0x0001d1e8, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d360, 0x0001d371, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7cb, 1}, + {0x0001d7ce, 0x0001da8b, 1}, + {0x0001da9b, 0x0001da9f, 1}, + {0x0001daa1, 0x0001daaf, 1}, + {0x0001e800, 0x0001e8c4, 1}, + {0x0001e8c7, 0x0001e8d6, 1}, + {0x0001ee00, 0x0001ee03, 1}, + {0x0001ee05, 0x0001ee1f, 1}, + {0x0001ee21, 0x0001ee22, 1}, + {0x0001ee24, 0x0001ee27, 3}, + {0x0001ee29, 0x0001ee32, 1}, + {0x0001ee34, 0x0001ee37, 1}, + {0x0001ee39, 0x0001ee3b, 2}, + {0x0001ee42, 0x0001ee47, 5}, + {0x0001ee49, 0x0001ee4d, 2}, + {0x0001ee4e, 0x0001ee4f, 1}, + {0x0001ee51, 0x0001ee52, 1}, + {0x0001ee54, 0x0001ee57, 3}, + {0x0001ee59, 0x0001ee61, 2}, + {0x0001ee62, 0x0001ee64, 2}, + {0x0001ee67, 0x0001ee6a, 1}, + {0x0001ee6c, 0x0001ee72, 1}, + {0x0001ee74, 0x0001ee77, 1}, + {0x0001ee79, 0x0001ee7c, 1}, + {0x0001ee7e, 0x0001ee80, 2}, + {0x0001ee81, 0x0001ee89, 1}, + {0x0001ee8b, 0x0001ee9b, 1}, + {0x0001eea1, 0x0001eea3, 1}, + {0x0001eea5, 0x0001eea9, 1}, + {0x0001eeab, 0x0001eebb, 1}, + {0x0001eef0, 0x0001eef1, 1}, + {0x0001f000, 0x0001f02b, 1}, + {0x0001f030, 0x0001f093, 1}, + {0x0001f0a0, 0x0001f0ae, 1}, + {0x0001f0b1, 0x0001f0bf, 1}, + {0x0001f0c1, 0x0001f0cf, 1}, + {0x0001f0d1, 0x0001f0f5, 1}, + {0x0001f100, 0x0001f10c, 1}, + {0x0001f110, 0x0001f12e, 1}, + {0x0001f130, 0x0001f16b, 1}, + {0x0001f170, 0x0001f19a, 1}, + {0x0001f1e6, 0x0001f202, 1}, + {0x0001f210, 0x0001f23a, 1}, + {0x0001f240, 0x0001f248, 1}, + {0x0001f250, 0x0001f251, 1}, + {0x0001f300, 0x0001f579, 1}, + {0x0001f57b, 0x0001f5a3, 1}, + {0x0001f5a5, 0x0001f6d0, 1}, + {0x0001f6e0, 0x0001f6ec, 1}, + {0x0001f6f0, 0x0001f6f3, 1}, + {0x0001f700, 0x0001f773, 1}, + {0x0001f780, 0x0001f7d4, 1}, + {0x0001f800, 0x0001f80b, 1}, + {0x0001f810, 0x0001f847, 1}, + {0x0001f850, 0x0001f859, 1}, + {0x0001f860, 0x0001f887, 1}, + {0x0001f890, 0x0001f8ad, 1}, + {0x0001f910, 0x0001f918, 1}, + {0x0001f980, 0x0001f984, 1}, + {0x0001f9c0, 0x00020000, 1600}, + {0x00020001, 0x0002a6d6, 1}, + {0x0002a700, 0x0002b734, 1}, + {0x0002b740, 0x0002b81d, 1}, + {0x0002b820, 0x0002cea1, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// size 5348 bytes (5 KiB) +var assigned9_0_0 = &unicode.RangeTable{ + R16: []unicode.Range16{ + {0x0000, 0x0377, 1}, + {0x037a, 0x037f, 1}, + {0x0384, 0x038a, 1}, + {0x038c, 0x038e, 2}, + {0x038f, 0x03a1, 1}, + {0x03a3, 0x052f, 1}, + {0x0531, 0x0556, 1}, + {0x0559, 0x055f, 1}, + {0x0561, 0x0587, 1}, + {0x0589, 0x058a, 1}, + {0x058d, 0x058f, 1}, + {0x0591, 0x05c7, 1}, + {0x05d0, 0x05ea, 1}, + {0x05f0, 0x05f4, 1}, + {0x0600, 0x061c, 1}, + {0x061e, 0x070d, 1}, + {0x070f, 0x074a, 1}, + {0x074d, 0x07b1, 1}, + {0x07c0, 0x07fa, 1}, + {0x0800, 0x082d, 1}, + {0x0830, 0x083e, 1}, + {0x0840, 0x085b, 1}, + {0x085e, 0x08a0, 66}, + {0x08a1, 0x08b4, 1}, + {0x08b6, 0x08bd, 1}, + {0x08d4, 0x0983, 1}, + {0x0985, 0x098c, 1}, + {0x098f, 0x0990, 1}, + {0x0993, 0x09a8, 1}, + {0x09aa, 0x09b0, 1}, + {0x09b2, 0x09b6, 4}, + {0x09b7, 0x09b9, 1}, + {0x09bc, 0x09c4, 1}, + {0x09c7, 0x09c8, 1}, + {0x09cb, 0x09ce, 1}, + {0x09d7, 0x09dc, 5}, + {0x09dd, 0x09df, 2}, + {0x09e0, 0x09e3, 1}, + {0x09e6, 0x09fb, 1}, + {0x0a01, 0x0a03, 1}, + {0x0a05, 0x0a0a, 1}, + {0x0a0f, 0x0a10, 1}, + {0x0a13, 0x0a28, 1}, + {0x0a2a, 0x0a30, 1}, + {0x0a32, 0x0a33, 1}, + {0x0a35, 0x0a36, 1}, + {0x0a38, 0x0a39, 1}, + {0x0a3c, 0x0a3e, 2}, + {0x0a3f, 0x0a42, 1}, + {0x0a47, 0x0a48, 1}, + {0x0a4b, 0x0a4d, 1}, + {0x0a51, 0x0a59, 8}, + {0x0a5a, 0x0a5c, 1}, + {0x0a5e, 0x0a66, 8}, + {0x0a67, 0x0a75, 1}, + {0x0a81, 0x0a83, 1}, + {0x0a85, 0x0a8d, 1}, + {0x0a8f, 0x0a91, 1}, + {0x0a93, 0x0aa8, 1}, + {0x0aaa, 0x0ab0, 1}, + {0x0ab2, 0x0ab3, 1}, + {0x0ab5, 0x0ab9, 1}, + {0x0abc, 0x0ac5, 1}, + {0x0ac7, 0x0ac9, 1}, + {0x0acb, 0x0acd, 1}, + {0x0ad0, 0x0ae0, 16}, + {0x0ae1, 0x0ae3, 1}, + {0x0ae6, 0x0af1, 1}, + {0x0af9, 0x0b01, 8}, + {0x0b02, 0x0b03, 1}, + {0x0b05, 0x0b0c, 1}, + {0x0b0f, 0x0b10, 1}, + {0x0b13, 0x0b28, 1}, + {0x0b2a, 0x0b30, 1}, + {0x0b32, 0x0b33, 1}, + {0x0b35, 0x0b39, 1}, + {0x0b3c, 0x0b44, 1}, + {0x0b47, 0x0b48, 1}, + {0x0b4b, 0x0b4d, 1}, + {0x0b56, 0x0b57, 1}, + {0x0b5c, 0x0b5d, 1}, + {0x0b5f, 0x0b63, 1}, + {0x0b66, 0x0b77, 1}, + {0x0b82, 0x0b83, 1}, + {0x0b85, 0x0b8a, 1}, + {0x0b8e, 0x0b90, 1}, + {0x0b92, 0x0b95, 1}, + {0x0b99, 0x0b9a, 1}, + {0x0b9c, 0x0b9e, 2}, + {0x0b9f, 0x0ba3, 4}, + {0x0ba4, 0x0ba8, 4}, + {0x0ba9, 0x0baa, 1}, + {0x0bae, 0x0bb9, 1}, + {0x0bbe, 0x0bc2, 1}, + {0x0bc6, 0x0bc8, 1}, + {0x0bca, 0x0bcd, 1}, + {0x0bd0, 0x0bd7, 7}, + {0x0be6, 0x0bfa, 1}, + {0x0c00, 0x0c03, 1}, + {0x0c05, 0x0c0c, 1}, + {0x0c0e, 0x0c10, 1}, + {0x0c12, 0x0c28, 1}, + {0x0c2a, 0x0c39, 1}, + {0x0c3d, 0x0c44, 1}, + {0x0c46, 0x0c48, 1}, + {0x0c4a, 0x0c4d, 1}, + {0x0c55, 0x0c56, 1}, + {0x0c58, 0x0c5a, 1}, + {0x0c60, 0x0c63, 1}, + {0x0c66, 0x0c6f, 1}, + {0x0c78, 0x0c83, 1}, + {0x0c85, 0x0c8c, 1}, + {0x0c8e, 0x0c90, 1}, + {0x0c92, 0x0ca8, 1}, + {0x0caa, 0x0cb3, 1}, + {0x0cb5, 0x0cb9, 1}, + {0x0cbc, 0x0cc4, 1}, + {0x0cc6, 0x0cc8, 1}, + {0x0cca, 0x0ccd, 1}, + {0x0cd5, 0x0cd6, 1}, + {0x0cde, 0x0ce0, 2}, + {0x0ce1, 0x0ce3, 1}, + {0x0ce6, 0x0cef, 1}, + {0x0cf1, 0x0cf2, 1}, + {0x0d01, 0x0d03, 1}, + {0x0d05, 0x0d0c, 1}, + {0x0d0e, 0x0d10, 1}, + {0x0d12, 0x0d3a, 1}, + {0x0d3d, 0x0d44, 1}, + {0x0d46, 0x0d48, 1}, + {0x0d4a, 0x0d4f, 1}, + {0x0d54, 0x0d63, 1}, + {0x0d66, 0x0d7f, 1}, + {0x0d82, 0x0d83, 1}, + {0x0d85, 0x0d96, 1}, + {0x0d9a, 0x0db1, 1}, + {0x0db3, 0x0dbb, 1}, + {0x0dbd, 0x0dc0, 3}, + {0x0dc1, 0x0dc6, 1}, + {0x0dca, 0x0dcf, 5}, + {0x0dd0, 0x0dd4, 1}, + {0x0dd6, 0x0dd8, 2}, + {0x0dd9, 0x0ddf, 1}, + {0x0de6, 0x0def, 1}, + {0x0df2, 0x0df4, 1}, + {0x0e01, 0x0e3a, 1}, + {0x0e3f, 0x0e5b, 1}, + {0x0e81, 0x0e82, 1}, + {0x0e84, 0x0e87, 3}, + {0x0e88, 0x0e8a, 2}, + {0x0e8d, 0x0e94, 7}, + {0x0e95, 0x0e97, 1}, + {0x0e99, 0x0e9f, 1}, + {0x0ea1, 0x0ea3, 1}, + {0x0ea5, 0x0ea7, 2}, + {0x0eaa, 0x0eab, 1}, + {0x0ead, 0x0eb9, 1}, + {0x0ebb, 0x0ebd, 1}, + {0x0ec0, 0x0ec4, 1}, + {0x0ec6, 0x0ec8, 2}, + {0x0ec9, 0x0ecd, 1}, + {0x0ed0, 0x0ed9, 1}, + {0x0edc, 0x0edf, 1}, + {0x0f00, 0x0f47, 1}, + {0x0f49, 0x0f6c, 1}, + {0x0f71, 0x0f97, 1}, + {0x0f99, 0x0fbc, 1}, + {0x0fbe, 0x0fcc, 1}, + {0x0fce, 0x0fda, 1}, + {0x1000, 0x10c5, 1}, + {0x10c7, 0x10cd, 6}, + {0x10d0, 0x1248, 1}, + {0x124a, 0x124d, 1}, + {0x1250, 0x1256, 1}, + {0x1258, 0x125a, 2}, + {0x125b, 0x125d, 1}, + {0x1260, 0x1288, 1}, + {0x128a, 0x128d, 1}, + {0x1290, 0x12b0, 1}, + {0x12b2, 0x12b5, 1}, + {0x12b8, 0x12be, 1}, + {0x12c0, 0x12c2, 2}, + {0x12c3, 0x12c5, 1}, + {0x12c8, 0x12d6, 1}, + {0x12d8, 0x1310, 1}, + {0x1312, 0x1315, 1}, + {0x1318, 0x135a, 1}, + {0x135d, 0x137c, 1}, + {0x1380, 0x1399, 1}, + {0x13a0, 0x13f5, 1}, + {0x13f8, 0x13fd, 1}, + {0x1400, 0x169c, 1}, + {0x16a0, 0x16f8, 1}, + {0x1700, 0x170c, 1}, + {0x170e, 0x1714, 1}, + {0x1720, 0x1736, 1}, + {0x1740, 0x1753, 1}, + {0x1760, 0x176c, 1}, + {0x176e, 0x1770, 1}, + {0x1772, 0x1773, 1}, + {0x1780, 0x17dd, 1}, + {0x17e0, 0x17e9, 1}, + {0x17f0, 0x17f9, 1}, + {0x1800, 0x180e, 1}, + {0x1810, 0x1819, 1}, + {0x1820, 0x1877, 1}, + {0x1880, 0x18aa, 1}, + {0x18b0, 0x18f5, 1}, + {0x1900, 0x191e, 1}, + {0x1920, 0x192b, 1}, + {0x1930, 0x193b, 1}, + {0x1940, 0x1944, 4}, + {0x1945, 0x196d, 1}, + {0x1970, 0x1974, 1}, + {0x1980, 0x19ab, 1}, + {0x19b0, 0x19c9, 1}, + {0x19d0, 0x19da, 1}, + {0x19de, 0x1a1b, 1}, + {0x1a1e, 0x1a5e, 1}, + {0x1a60, 0x1a7c, 1}, + {0x1a7f, 0x1a89, 1}, + {0x1a90, 0x1a99, 1}, + {0x1aa0, 0x1aad, 1}, + {0x1ab0, 0x1abe, 1}, + {0x1b00, 0x1b4b, 1}, + {0x1b50, 0x1b7c, 1}, + {0x1b80, 0x1bf3, 1}, + {0x1bfc, 0x1c37, 1}, + {0x1c3b, 0x1c49, 1}, + {0x1c4d, 0x1c88, 1}, + {0x1cc0, 0x1cc7, 1}, + {0x1cd0, 0x1cf6, 1}, + {0x1cf8, 0x1cf9, 1}, + {0x1d00, 0x1df5, 1}, + {0x1dfb, 0x1f15, 1}, + {0x1f18, 0x1f1d, 1}, + {0x1f20, 0x1f45, 1}, + {0x1f48, 0x1f4d, 1}, + {0x1f50, 0x1f57, 1}, + {0x1f59, 0x1f5f, 2}, + {0x1f60, 0x1f7d, 1}, + {0x1f80, 0x1fb4, 1}, + {0x1fb6, 0x1fc4, 1}, + {0x1fc6, 0x1fd3, 1}, + {0x1fd6, 0x1fdb, 1}, + {0x1fdd, 0x1fef, 1}, + {0x1ff2, 0x1ff4, 1}, + {0x1ff6, 0x1ffe, 1}, + {0x2000, 0x2064, 1}, + {0x2066, 0x2071, 1}, + {0x2074, 0x208e, 1}, + {0x2090, 0x209c, 1}, + {0x20a0, 0x20be, 1}, + {0x20d0, 0x20f0, 1}, + {0x2100, 0x218b, 1}, + {0x2190, 0x23fe, 1}, + {0x2400, 0x2426, 1}, + {0x2440, 0x244a, 1}, + {0x2460, 0x2b73, 1}, + {0x2b76, 0x2b95, 1}, + {0x2b98, 0x2bb9, 1}, + {0x2bbd, 0x2bc8, 1}, + {0x2bca, 0x2bd1, 1}, + {0x2bec, 0x2bef, 1}, + {0x2c00, 0x2c2e, 1}, + {0x2c30, 0x2c5e, 1}, + {0x2c60, 0x2cf3, 1}, + {0x2cf9, 0x2d25, 1}, + {0x2d27, 0x2d2d, 6}, + {0x2d30, 0x2d67, 1}, + {0x2d6f, 0x2d70, 1}, + {0x2d7f, 0x2d96, 1}, + {0x2da0, 0x2da6, 1}, + {0x2da8, 0x2dae, 1}, + {0x2db0, 0x2db6, 1}, + {0x2db8, 0x2dbe, 1}, + {0x2dc0, 0x2dc6, 1}, + {0x2dc8, 0x2dce, 1}, + {0x2dd0, 0x2dd6, 1}, + {0x2dd8, 0x2dde, 1}, + {0x2de0, 0x2e44, 1}, + {0x2e80, 0x2e99, 1}, + {0x2e9b, 0x2ef3, 1}, + {0x2f00, 0x2fd5, 1}, + {0x2ff0, 0x2ffb, 1}, + {0x3000, 0x303f, 1}, + {0x3041, 0x3096, 1}, + {0x3099, 0x30ff, 1}, + {0x3105, 0x312d, 1}, + {0x3131, 0x318e, 1}, + {0x3190, 0x31ba, 1}, + {0x31c0, 0x31e3, 1}, + {0x31f0, 0x321e, 1}, + {0x3220, 0x32fe, 1}, + {0x3300, 0x4db5, 1}, + {0x4dc0, 0x9fd5, 1}, + {0xa000, 0xa48c, 1}, + {0xa490, 0xa4c6, 1}, + {0xa4d0, 0xa62b, 1}, + {0xa640, 0xa6f7, 1}, + {0xa700, 0xa7ae, 1}, + {0xa7b0, 0xa7b7, 1}, + {0xa7f7, 0xa82b, 1}, + {0xa830, 0xa839, 1}, + {0xa840, 0xa877, 1}, + {0xa880, 0xa8c5, 1}, + {0xa8ce, 0xa8d9, 1}, + {0xa8e0, 0xa8fd, 1}, + {0xa900, 0xa953, 1}, + {0xa95f, 0xa97c, 1}, + {0xa980, 0xa9cd, 1}, + {0xa9cf, 0xa9d9, 1}, + {0xa9de, 0xa9fe, 1}, + {0xaa00, 0xaa36, 1}, + {0xaa40, 0xaa4d, 1}, + {0xaa50, 0xaa59, 1}, + {0xaa5c, 0xaac2, 1}, + {0xaadb, 0xaaf6, 1}, + {0xab01, 0xab06, 1}, + {0xab09, 0xab0e, 1}, + {0xab11, 0xab16, 1}, + {0xab20, 0xab26, 1}, + {0xab28, 0xab2e, 1}, + {0xab30, 0xab65, 1}, + {0xab70, 0xabed, 1}, + {0xabf0, 0xabf9, 1}, + {0xac00, 0xd7a3, 1}, + {0xd7b0, 0xd7c6, 1}, + {0xd7cb, 0xd7fb, 1}, + {0xd800, 0xfa6d, 1}, + {0xfa70, 0xfad9, 1}, + {0xfb00, 0xfb06, 1}, + {0xfb13, 0xfb17, 1}, + {0xfb1d, 0xfb36, 1}, + {0xfb38, 0xfb3c, 1}, + {0xfb3e, 0xfb40, 2}, + {0xfb41, 0xfb43, 2}, + {0xfb44, 0xfb46, 2}, + {0xfb47, 0xfbc1, 1}, + {0xfbd3, 0xfd3f, 1}, + {0xfd50, 0xfd8f, 1}, + {0xfd92, 0xfdc7, 1}, + {0xfdf0, 0xfdfd, 1}, + {0xfe00, 0xfe19, 1}, + {0xfe20, 0xfe52, 1}, + {0xfe54, 0xfe66, 1}, + {0xfe68, 0xfe6b, 1}, + {0xfe70, 0xfe74, 1}, + {0xfe76, 0xfefc, 1}, + {0xfeff, 0xff01, 2}, + {0xff02, 0xffbe, 1}, + {0xffc2, 0xffc7, 1}, + {0xffca, 0xffcf, 1}, + {0xffd2, 0xffd7, 1}, + {0xffda, 0xffdc, 1}, + {0xffe0, 0xffe6, 1}, + {0xffe8, 0xffee, 1}, + {0xfff9, 0xfffd, 1}, + }, + R32: []unicode.Range32{ + {0x00010000, 0x0001000b, 1}, + {0x0001000d, 0x00010026, 1}, + {0x00010028, 0x0001003a, 1}, + {0x0001003c, 0x0001003d, 1}, + {0x0001003f, 0x0001004d, 1}, + {0x00010050, 0x0001005d, 1}, + {0x00010080, 0x000100fa, 1}, + {0x00010100, 0x00010102, 1}, + {0x00010107, 0x00010133, 1}, + {0x00010137, 0x0001018e, 1}, + {0x00010190, 0x0001019b, 1}, + {0x000101a0, 0x000101d0, 48}, + {0x000101d1, 0x000101fd, 1}, + {0x00010280, 0x0001029c, 1}, + {0x000102a0, 0x000102d0, 1}, + {0x000102e0, 0x000102fb, 1}, + {0x00010300, 0x00010323, 1}, + {0x00010330, 0x0001034a, 1}, + {0x00010350, 0x0001037a, 1}, + {0x00010380, 0x0001039d, 1}, + {0x0001039f, 0x000103c3, 1}, + {0x000103c8, 0x000103d5, 1}, + {0x00010400, 0x0001049d, 1}, + {0x000104a0, 0x000104a9, 1}, + {0x000104b0, 0x000104d3, 1}, + {0x000104d8, 0x000104fb, 1}, + {0x00010500, 0x00010527, 1}, + {0x00010530, 0x00010563, 1}, + {0x0001056f, 0x00010600, 145}, + {0x00010601, 0x00010736, 1}, + {0x00010740, 0x00010755, 1}, + {0x00010760, 0x00010767, 1}, + {0x00010800, 0x00010805, 1}, + {0x00010808, 0x0001080a, 2}, + {0x0001080b, 0x00010835, 1}, + {0x00010837, 0x00010838, 1}, + {0x0001083c, 0x0001083f, 3}, + {0x00010840, 0x00010855, 1}, + {0x00010857, 0x0001089e, 1}, + {0x000108a7, 0x000108af, 1}, + {0x000108e0, 0x000108f2, 1}, + {0x000108f4, 0x000108f5, 1}, + {0x000108fb, 0x0001091b, 1}, + {0x0001091f, 0x00010939, 1}, + {0x0001093f, 0x00010980, 65}, + {0x00010981, 0x000109b7, 1}, + {0x000109bc, 0x000109cf, 1}, + {0x000109d2, 0x00010a03, 1}, + {0x00010a05, 0x00010a06, 1}, + {0x00010a0c, 0x00010a13, 1}, + {0x00010a15, 0x00010a17, 1}, + {0x00010a19, 0x00010a33, 1}, + {0x00010a38, 0x00010a3a, 1}, + {0x00010a3f, 0x00010a47, 1}, + {0x00010a50, 0x00010a58, 1}, + {0x00010a60, 0x00010a9f, 1}, + {0x00010ac0, 0x00010ae6, 1}, + {0x00010aeb, 0x00010af6, 1}, + {0x00010b00, 0x00010b35, 1}, + {0x00010b39, 0x00010b55, 1}, + {0x00010b58, 0x00010b72, 1}, + {0x00010b78, 0x00010b91, 1}, + {0x00010b99, 0x00010b9c, 1}, + {0x00010ba9, 0x00010baf, 1}, + {0x00010c00, 0x00010c48, 1}, + {0x00010c80, 0x00010cb2, 1}, + {0x00010cc0, 0x00010cf2, 1}, + {0x00010cfa, 0x00010cff, 1}, + {0x00010e60, 0x00010e7e, 1}, + {0x00011000, 0x0001104d, 1}, + {0x00011052, 0x0001106f, 1}, + {0x0001107f, 0x000110c1, 1}, + {0x000110d0, 0x000110e8, 1}, + {0x000110f0, 0x000110f9, 1}, + {0x00011100, 0x00011134, 1}, + {0x00011136, 0x00011143, 1}, + {0x00011150, 0x00011176, 1}, + {0x00011180, 0x000111cd, 1}, + {0x000111d0, 0x000111df, 1}, + {0x000111e1, 0x000111f4, 1}, + {0x00011200, 0x00011211, 1}, + {0x00011213, 0x0001123e, 1}, + {0x00011280, 0x00011286, 1}, + {0x00011288, 0x0001128a, 2}, + {0x0001128b, 0x0001128d, 1}, + {0x0001128f, 0x0001129d, 1}, + {0x0001129f, 0x000112a9, 1}, + {0x000112b0, 0x000112ea, 1}, + {0x000112f0, 0x000112f9, 1}, + {0x00011300, 0x00011303, 1}, + {0x00011305, 0x0001130c, 1}, + {0x0001130f, 0x00011310, 1}, + {0x00011313, 0x00011328, 1}, + {0x0001132a, 0x00011330, 1}, + {0x00011332, 0x00011333, 1}, + {0x00011335, 0x00011339, 1}, + {0x0001133c, 0x00011344, 1}, + {0x00011347, 0x00011348, 1}, + {0x0001134b, 0x0001134d, 1}, + {0x00011350, 0x00011357, 7}, + {0x0001135d, 0x00011363, 1}, + {0x00011366, 0x0001136c, 1}, + {0x00011370, 0x00011374, 1}, + {0x00011400, 0x00011459, 1}, + {0x0001145b, 0x0001145d, 2}, + {0x00011480, 0x000114c7, 1}, + {0x000114d0, 0x000114d9, 1}, + {0x00011580, 0x000115b5, 1}, + {0x000115b8, 0x000115dd, 1}, + {0x00011600, 0x00011644, 1}, + {0x00011650, 0x00011659, 1}, + {0x00011660, 0x0001166c, 1}, + {0x00011680, 0x000116b7, 1}, + {0x000116c0, 0x000116c9, 1}, + {0x00011700, 0x00011719, 1}, + {0x0001171d, 0x0001172b, 1}, + {0x00011730, 0x0001173f, 1}, + {0x000118a0, 0x000118f2, 1}, + {0x000118ff, 0x00011ac0, 449}, + {0x00011ac1, 0x00011af8, 1}, + {0x00011c00, 0x00011c08, 1}, + {0x00011c0a, 0x00011c36, 1}, + {0x00011c38, 0x00011c45, 1}, + {0x00011c50, 0x00011c6c, 1}, + {0x00011c70, 0x00011c8f, 1}, + {0x00011c92, 0x00011ca7, 1}, + {0x00011ca9, 0x00011cb6, 1}, + {0x00012000, 0x00012399, 1}, + {0x00012400, 0x0001246e, 1}, + {0x00012470, 0x00012474, 1}, + {0x00012480, 0x00012543, 1}, + {0x00013000, 0x0001342e, 1}, + {0x00014400, 0x00014646, 1}, + {0x00016800, 0x00016a38, 1}, + {0x00016a40, 0x00016a5e, 1}, + {0x00016a60, 0x00016a69, 1}, + {0x00016a6e, 0x00016a6f, 1}, + {0x00016ad0, 0x00016aed, 1}, + {0x00016af0, 0x00016af5, 1}, + {0x00016b00, 0x00016b45, 1}, + {0x00016b50, 0x00016b59, 1}, + {0x00016b5b, 0x00016b61, 1}, + {0x00016b63, 0x00016b77, 1}, + {0x00016b7d, 0x00016b8f, 1}, + {0x00016f00, 0x00016f44, 1}, + {0x00016f50, 0x00016f7e, 1}, + {0x00016f8f, 0x00016f9f, 1}, + {0x00016fe0, 0x00017000, 32}, + {0x00017001, 0x000187ec, 1}, + {0x00018800, 0x00018af2, 1}, + {0x0001b000, 0x0001b001, 1}, + {0x0001bc00, 0x0001bc6a, 1}, + {0x0001bc70, 0x0001bc7c, 1}, + {0x0001bc80, 0x0001bc88, 1}, + {0x0001bc90, 0x0001bc99, 1}, + {0x0001bc9c, 0x0001bca3, 1}, + {0x0001d000, 0x0001d0f5, 1}, + {0x0001d100, 0x0001d126, 1}, + {0x0001d129, 0x0001d1e8, 1}, + {0x0001d200, 0x0001d245, 1}, + {0x0001d300, 0x0001d356, 1}, + {0x0001d360, 0x0001d371, 1}, + {0x0001d400, 0x0001d454, 1}, + {0x0001d456, 0x0001d49c, 1}, + {0x0001d49e, 0x0001d49f, 1}, + {0x0001d4a2, 0x0001d4a5, 3}, + {0x0001d4a6, 0x0001d4a9, 3}, + {0x0001d4aa, 0x0001d4ac, 1}, + {0x0001d4ae, 0x0001d4b9, 1}, + {0x0001d4bb, 0x0001d4bd, 2}, + {0x0001d4be, 0x0001d4c3, 1}, + {0x0001d4c5, 0x0001d505, 1}, + {0x0001d507, 0x0001d50a, 1}, + {0x0001d50d, 0x0001d514, 1}, + {0x0001d516, 0x0001d51c, 1}, + {0x0001d51e, 0x0001d539, 1}, + {0x0001d53b, 0x0001d53e, 1}, + {0x0001d540, 0x0001d544, 1}, + {0x0001d546, 0x0001d54a, 4}, + {0x0001d54b, 0x0001d550, 1}, + {0x0001d552, 0x0001d6a5, 1}, + {0x0001d6a8, 0x0001d7cb, 1}, + {0x0001d7ce, 0x0001da8b, 1}, + {0x0001da9b, 0x0001da9f, 1}, + {0x0001daa1, 0x0001daaf, 1}, + {0x0001e000, 0x0001e006, 1}, + {0x0001e008, 0x0001e018, 1}, + {0x0001e01b, 0x0001e021, 1}, + {0x0001e023, 0x0001e024, 1}, + {0x0001e026, 0x0001e02a, 1}, + {0x0001e800, 0x0001e8c4, 1}, + {0x0001e8c7, 0x0001e8d6, 1}, + {0x0001e900, 0x0001e94a, 1}, + {0x0001e950, 0x0001e959, 1}, + {0x0001e95e, 0x0001e95f, 1}, + {0x0001ee00, 0x0001ee03, 1}, + {0x0001ee05, 0x0001ee1f, 1}, + {0x0001ee21, 0x0001ee22, 1}, + {0x0001ee24, 0x0001ee27, 3}, + {0x0001ee29, 0x0001ee32, 1}, + {0x0001ee34, 0x0001ee37, 1}, + {0x0001ee39, 0x0001ee3b, 2}, + {0x0001ee42, 0x0001ee47, 5}, + {0x0001ee49, 0x0001ee4d, 2}, + {0x0001ee4e, 0x0001ee4f, 1}, + {0x0001ee51, 0x0001ee52, 1}, + {0x0001ee54, 0x0001ee57, 3}, + {0x0001ee59, 0x0001ee61, 2}, + {0x0001ee62, 0x0001ee64, 2}, + {0x0001ee67, 0x0001ee6a, 1}, + {0x0001ee6c, 0x0001ee72, 1}, + {0x0001ee74, 0x0001ee77, 1}, + {0x0001ee79, 0x0001ee7c, 1}, + {0x0001ee7e, 0x0001ee80, 2}, + {0x0001ee81, 0x0001ee89, 1}, + {0x0001ee8b, 0x0001ee9b, 1}, + {0x0001eea1, 0x0001eea3, 1}, + {0x0001eea5, 0x0001eea9, 1}, + {0x0001eeab, 0x0001eebb, 1}, + {0x0001eef0, 0x0001eef1, 1}, + {0x0001f000, 0x0001f02b, 1}, + {0x0001f030, 0x0001f093, 1}, + {0x0001f0a0, 0x0001f0ae, 1}, + {0x0001f0b1, 0x0001f0bf, 1}, + {0x0001f0c1, 0x0001f0cf, 1}, + {0x0001f0d1, 0x0001f0f5, 1}, + {0x0001f100, 0x0001f10c, 1}, + {0x0001f110, 0x0001f12e, 1}, + {0x0001f130, 0x0001f16b, 1}, + {0x0001f170, 0x0001f1ac, 1}, + {0x0001f1e6, 0x0001f202, 1}, + {0x0001f210, 0x0001f23b, 1}, + {0x0001f240, 0x0001f248, 1}, + {0x0001f250, 0x0001f251, 1}, + {0x0001f300, 0x0001f6d2, 1}, + {0x0001f6e0, 0x0001f6ec, 1}, + {0x0001f6f0, 0x0001f6f6, 1}, + {0x0001f700, 0x0001f773, 1}, + {0x0001f780, 0x0001f7d4, 1}, + {0x0001f800, 0x0001f80b, 1}, + {0x0001f810, 0x0001f847, 1}, + {0x0001f850, 0x0001f859, 1}, + {0x0001f860, 0x0001f887, 1}, + {0x0001f890, 0x0001f8ad, 1}, + {0x0001f910, 0x0001f91e, 1}, + {0x0001f920, 0x0001f927, 1}, + {0x0001f930, 0x0001f933, 3}, + {0x0001f934, 0x0001f93e, 1}, + {0x0001f940, 0x0001f94b, 1}, + {0x0001f950, 0x0001f95e, 1}, + {0x0001f980, 0x0001f991, 1}, + {0x0001f9c0, 0x00020000, 1600}, + {0x00020001, 0x0002a6d6, 1}, + {0x0002a700, 0x0002b734, 1}, + {0x0002b740, 0x0002b81d, 1}, + {0x0002b820, 0x0002cea1, 1}, + {0x0002f800, 0x0002fa1d, 1}, + {0x000e0001, 0x000e0020, 31}, + {0x000e0021, 0x000e007f, 1}, + {0x000e0100, 0x000e01ef, 1}, + {0x000f0000, 0x000ffffd, 1}, + {0x00100000, 0x0010fffd, 1}, + }, + LatinOffset: 0, +} + +// Total size 44206 bytes (43 KiB) diff --git a/vendor/golang.org/x/text/unicode/runenames/bits.go b/vendor/golang.org/x/text/unicode/runenames/bits.go deleted file mode 100644 index 48cc2c0..0000000 --- a/vendor/golang.org/x/text/unicode/runenames/bits.go +++ /dev/null @@ -1,59 +0,0 @@ -// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. - -package runenames - -// This file contains code common to gen.go and the package code. - -// The mapping from rune to string (i.e. offset and length in the data string) -// is encoded as a two level table. The first level maps from contiguous rune -// ranges [runeOffset, runeOffset+runeLength) to entries. Entries are either -// direct (for repeated names such as "") or indirect (for runs -// of unique names such as "SPACE", "EXCLAMATION MARK", "QUOTATION MARK", ...). -// -// Each first level table element is 64 bits. The runeOffset (21 bits) and -// runeLength (16 bits) take the 37 high bits. The entry takes the 27 low bits, -// with directness encoded in the least significant bit. -// -// A direct entry encodes a dataOffset (18 bits) and dataLength (8 bits) in the -// data string. 18 bits is too short to encode the entire data string's length, -// but the data string's contents are arranged so that all of the few direct -// entries' offsets come before all of the many indirect entries' offsets. -// -// An indirect entry encodes a dataBase (10 bits) and a table1Offset (16 bits). -// The table1Offset is the start of a range in the second level table. The -// length of that range is the same as the runeLength. -// -// Each second level table element is 16 bits, an index into data, relative to -// a bias equal to (dataBase << dataBaseUnit). That (bias + index) is the -// (dataOffset + dataLength) in the data string. The dataOffset is implied by -// the previous table element (with the same implicit bias). - -const ( - bitsRuneOffset = 21 - bitsRuneLength = 16 - bitsDataOffset = 18 - bitsDataLength = 8 - bitsDirect = 1 - - bitsDataBase = 10 - bitsTable1Offset = 16 - - shiftRuneOffset = 0 + bitsDirect + bitsDataLength + bitsDataOffset + bitsRuneLength - shiftRuneLength = 0 + bitsDirect + bitsDataLength + bitsDataOffset - shiftDataOffset = 0 + bitsDirect + bitsDataLength - shiftDataLength = 0 + bitsDirect - shiftDirect = 0 - - shiftDataBase = 0 + bitsDirect + bitsTable1Offset - shiftTable1Offset = 0 + bitsDirect - - maskRuneLength = 1<" // 00004dc0 "HEXAGRAM FOR THE CREATIVE HEAVEN" // 00009fd5 "" - // 00009fd6 "" // 00009fff "" // 0000a000 "YI SYLLABLE IT" // 0000dc00 "" diff --git a/vendor/golang.org/x/text/unicode/runenames/gen.go b/vendor/golang.org/x/text/unicode/runenames/gen.go index 7e373a5..5633ba6 100644 --- a/vendor/golang.org/x/text/unicode/runenames/gen.go +++ b/vendor/golang.org/x/text/unicode/runenames/gen.go @@ -7,189 +7,156 @@ package main import ( + "bytes" "log" + "sort" "strings" - "unicode" "golang.org/x/text/internal/gen" + "golang.org/x/text/internal/gen/bitfield" "golang.org/x/text/internal/ucd" ) -// snippet is a slice of data; data is the concatenation of all of the names. -type snippet struct { - offset int - length int - s string -} - -func makeTable0EntryDirect(rOffset, rLength, dOffset, dLength int) uint64 { - if rOffset >= 1<= 1<= 1<= 1<= 1<= 1<= 1<= 1<= 0 { - s = s[:i] + ">" - } + type entry uint64 // trick the generation code to use the entry type + packed := []entry{} + for _, e := range entries { + e.numRunes = int(e.end - e.start + 1) + v, err := bitfield.Pack(e, nil) + if err != nil { + log.Fatal(err) } - names[r] = s - counts[s]++ - }) - return names, counts + packed = append(packed, entry(v)) + } + + index = append(index, uint16(singleData.Len())) + + w.WriteVar("entries", packed) + w.WriteVar("index", index) + w.WriteConst("directData", directData.String()) + w.WriteConst("singleData", singleData.String()) } -func appendRepeatNames(names []string, counts map[string]int) { - alreadySeen := map[string]snippet{} - for r, s := range names { - if s == "" || counts[s] == 1 { - continue - } - if s[0] != '<' { - log.Fatalf("Repeated name %q does not start with a '<'", s) - } +func computeDirectOffsets() { + counts := map[string]int{} - if z, ok := alreadySeen[s]; ok { - snippets[r] = z - continue - } + p := ucd.New(gen.OpenUCDFile("UnicodeData.txt"), ucd.KeepRanges) + for p.Next() { + start, end := p.Range(0) + counts[getName(p)] += int(end-start) + 1 + } - z := snippet{ - offset: len(data), - length: len(s), - s: s, + direct := []string{} + for k, v := range counts { + if v > 1 { + direct = append(direct, k) } - data = append(data, s...) - snippets[r] = z - alreadySeen[s] = z + } + sort.Strings(direct) + + for _, s := range direct { + directOffsets[s] = directData.Len() + directData.WriteString(s) } } -func appendUniqueNames(names []string, counts map[string]int) { - for r, s := range names { - if s == "" || counts[s] != 1 { - continue - } - if s[0] == '<' { - log.Fatalf("Unique name %q starts with a '<'", s) - } +func computeEntries() { + p := ucd.New(gen.OpenUCDFile("UnicodeData.txt"), ucd.KeepRanges) + for p.Next() { + start, end := p.Range(0) - z := snippet{ - offset: len(data), - length: len(s), - s: s, + last := entry{} + if len(entries) > 0 { + last = entries[len(entries)-1] } - data = append(data, s...) - snippets[r] = z - } -} -func makeTables() (table0 []uint64, table1 []uint16) { - for i := 0; i < len(snippets); { - zi := snippets[i] - if zi == (snippet{}) { - i++ + name := getName(p) + if index, ok := directOffsets[name]; ok { + if last.name == name && last.end+1 == start { + entries[len(entries)-1].end = end + continue + } + entries = append(entries, entry{ + start: start, + end: end, + index: index, + base: len(name), + direct: true, + name: name, + }) continue } - // Look for repeat names. If we have one, we only need a table0 entry. - j := i + 1 - for ; j < len(snippets) && zi == snippets[j]; j++ { + if start != end { + log.Fatalf("Expected start == end, found %x != %x", start, end) } - if j > i+1 { - table0 = append(table0, makeTable0EntryDirect(i, j-i, zi.offset, zi.length)) - i = j + + offset := singleData.Len() + base := offset >> 16 + index = append(index, uint16(offset)) + singleData.WriteString(name) + + if last.base == base && last.end+1 == start { + entries[len(entries)-1].end = start continue } - // Otherwise, we have a run of unique names. We need one table0 entry - // and two or more table1 entries. - base := zi.offset &^ (1<= 0 { + s = s[:i] + ">" } - table0 = append(table0, makeTable0EntryIndirect(i, j-i, base>>dataBaseUnit, t1Offset)) - i = j + } - return table0, table1 + return s } diff --git a/vendor/golang.org/x/text/unicode/runenames/gen_bits.go b/vendor/golang.org/x/text/unicode/runenames/gen_bits.go deleted file mode 100644 index e80fada..0000000 --- a/vendor/golang.org/x/text/unicode/runenames/gen_bits.go +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2016 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 ignore - -package main - -// This file contains code common to gen.go and the package code. - -// The mapping from rune to string (i.e. offset and length in the data string) -// is encoded as a two level table. The first level maps from contiguous rune -// ranges [runeOffset, runeOffset+runeLength) to entries. Entries are either -// direct (for repeated names such as "") or indirect (for runs -// of unique names such as "SPACE", "EXCLAMATION MARK", "QUOTATION MARK", ...). -// -// Each first level table element is 64 bits. The runeOffset (21 bits) and -// runeLength (16 bits) take the 37 high bits. The entry takes the 27 low bits, -// with directness encoded in the least significant bit. -// -// A direct entry encodes a dataOffset (18 bits) and dataLength (8 bits) in the -// data string. 18 bits is too short to encode the entire data string's length, -// but the data string's contents are arranged so that all of the few direct -// entries' offsets come before all of the many indirect entries' offsets. -// -// An indirect entry encodes a dataBase (10 bits) and a table1Offset (16 bits). -// The table1Offset is the start of a range in the second level table. The -// length of that range is the same as the runeLength. -// -// Each second level table element is 16 bits, an index into data, relative to -// a bias equal to (dataBase << dataBaseUnit). That (bias + index) is the -// (dataOffset + dataLength) in the data string. The dataOffset is implied by -// the previous table element (with the same implicit bias). - -const ( - bitsRuneOffset = 21 - bitsRuneLength = 16 - bitsDataOffset = 18 - bitsDataLength = 8 - bitsDirect = 1 - - bitsDataBase = 10 - bitsTable1Offset = 16 - - shiftRuneOffset = 0 + bitsDirect + bitsDataLength + bitsDataOffset + bitsRuneLength - shiftRuneLength = 0 + bitsDirect + bitsDataLength + bitsDataOffset - shiftDataOffset = 0 + bitsDirect + bitsDataLength - shiftDataLength = 0 + bitsDirect - shiftDirect = 0 - - shiftDataBase = 0 + bitsDirect + bitsTable1Offset - shiftTable1Offset = 0 + bitsDirect - - maskRuneLength = 1<> shiftRuneOffset) - return r < rOffset + i := sort.Search(len(entries), func(j int) bool { + return entries[j].startRune() > r }) if i == 0 { return "" } + e := entries[i-1] - e := table0[i-1] - rOffset := rune(e >> shiftRuneOffset) - rLength := rune(e>>shiftRuneLength) & maskRuneLength - if r >= rOffset+rLength { + offset := int(r - e.startRune()) + if offset >= e.numRunes() { return "" } - if (e>>shiftDirect)&maskDirect != 0 { - o := int(e>>shiftDataOffset) & maskDataOffset - n := int(e>>shiftDataLength) & maskDataLength - return data[o : o+n] + if e.direct() { + o := e.index() + n := e.len() + return directData[o : o+n] } - base := uint32(e>>shiftDataBase) & maskDataBase - base <<= dataBaseUnit - j := rune(e>>shiftTable1Offset) & maskTable1Offset - j += r - rOffset - d0 := base + uint32(table1[j-1]) // dataOffset - d1 := base + uint32(table1[j-0]) // dataOffset + dataLength - return data[d0:d1] + start := int(index[e.index()+offset]) + end := int(index[e.index()+offset+1]) + base1 := e.base() << 16 + base2 := base1 + if start > end { + base2 += 1 << 16 + } + return singleData[start+base1 : end+base2] } + +func (e entry) len() int { return e.base() } diff --git a/vendor/golang.org/x/text/unicode/runenames/runenames_test.go b/vendor/golang.org/x/text/unicode/runenames/runenames_test.go index 6a2d2b6..655323d 100644 --- a/vendor/golang.org/x/text/unicode/runenames/runenames_test.go +++ b/vendor/golang.org/x/text/unicode/runenames/runenames_test.go @@ -19,17 +19,7 @@ func TestName(t *testing.T) { wants := make([]string, 1+unicode.MaxRune) ucd.Parse(gen.OpenUCDFile("UnicodeData.txt"), func(p *ucd.Parser) { - r, s := p.Rune(0), p.String(ucd.Name) - if s == "" { - return - } - if s[0] == '<' { - const first = ", First>" - if i := strings.Index(s, first); i >= 0 { - s = s[:i] + ">" - } - } - wants[r] = s + wants[p.Rune(0)] = getName(p) }) nErrors := 0 @@ -44,3 +34,19 @@ func TestName(t *testing.T) { } } } + +// Copied from gen.go. +func getName(p *ucd.Parser) string { + s := p.String(ucd.Name) + if s == "" { + return "" + } + if s[0] == '<' { + const first = ", First>" + if i := strings.Index(s, first); i >= 0 { + s = s[:i] + ">" + } + + } + return s +} diff --git a/vendor/golang.org/x/text/unicode/runenames/tables.go b/vendor/golang.org/x/text/unicode/runenames/tables.go deleted file mode 100644 index 99c4926..0000000 --- a/vendor/golang.org/x/text/unicode/runenames/tables.go +++ /dev/null @@ -1,15514 +0,0 @@ -// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. - -package runenames - -var table0 = []uint64{ // 647 elements - // Entry 0 - 1F - 0x0000000100000013, 0x00010002f8000002, 0x0003f80108000013, 0x00050016c00200c2, - 0x001bd000302e0674, 0x001c2000382e0682, 0x001c600008300692, 0x001c7000a0300696, - 0x001d180c683006c0, 0x00298801304809dc, 0x002ac800384a0a2a, 0x002b0801384a0a3a, - 0x002c4800104c0a8a, 0x002c6800184c0a90, 0x002c8801b84e0a98, 0x002e8000d8500b08, - 0x002f800028500b40, 0x00300000e8500b4c, 0x0030f00780520b88, 0x00387801e05e0d6a, - 0x003a680328600de4, 0x003e0001d8680eb0, 0x00400001706a0f28, 0x00418000786c0f86, - 0x00420000e06c0fa6, 0x0042f000086e0fe0, 0x00450000a86e0fe4, 0x0045b000406e1010, - 0x0046a00580701022, 0x004c280040781184, 0x004c780010781196, 0x004c9800b078119c, - // Entry 20 - 3F - 0x004d5000387811ca, 0x004d9000087811da, 0x004db000207a11de, 0x004de000487a11e8, - 0x004e3800107a11fc, 0x004e5800207a1202, 0x004eb800087a120c, 0x004ee000107a1210, - 0x004ef800287a1216, 0x004f3000b07a1222, 0x00500800187c1250, 0x00502800307c1258, - 0x00507800107c1266, 0x00509800b07c126c, 0x00515000387c129a, 0x00519000107c12aa, - 0x0051a800107c12b0, 0x0051c000107c12b6, 0x0051e000087c12bc, 0x0051f000287c12c0, - 0x00523800107e12cc, 0x00525800187e12d2, 0x00528800087e12da, 0x0052c800207e12de, - 0x0052f000087e12e8, 0x00533000807e12ec, 0x00540800187e130e, 0x00542800487e1316, - 0x00547800187e132a, 0x00549800b07e1332, 0x0055500038801360, 0x0055900010801370, - // Entry 40 - 5F - 0x0055a80028801376, 0x0055e00050801382, 0x0056380018801398, 0x00565800188013a0, - 0x00568000088013a8, 0x00570000208013ac, 0x00573000608013b6, 0x0057c800088213d0, - 0x00580800188213d4, 0x00582800408213dc, 0x00587800108213ee, 0x00589800b08213f4, - 0x0059500038821422, 0x0059900010821432, 0x0059a80028821438, 0x0059e00048821444, - 0x005a380010841458, 0x005a58001884145e, 0x005ab00010841466, 0x005ae0001084146c, - 0x005af80028841472, 0x005b30009084147e, 0x005c1000108414a4, 0x005c2800308414aa, - 0x005c7000188414b8, 0x005c9000208414c0, 0x005cc800108414ca, 0x005ce000088614d0, - 0x005cf000108614d4, 0x005d1800108614da, 0x005d4000188614e0, 0x005d7000608614e8, - // Entry 60 - 7F - 0x005df00028861502, 0x005e30001886150e, 0x005e500020861516, 0x005e800008861520, - 0x005eb80008861524, 0x005f3000a8861528, 0x0060000020861554, 0x006028004088155e, - 0x0060700018881570, 0x00609000b8881578, 0x00615000808815a8, 0x0061e800408815ca, - 0x00623000188815dc, 0x00625000208a15e4, 0x0062a800108a15ee, 0x0062c000188a15f4, - 0x00630000208a15fc, 0x00633000508a1606, 0x0063c000608a161c, 0x00642800408a1636, - 0x00647000188c1648, 0x00649000b88c1650, 0x00655000508c1680, 0x0065a800288c1696, - 0x0065e000488c16a2, 0x00663000188c16b6, 0x00665000208e16be, 0x0066a800108e16c8, - 0x0066f000088e16ce, 0x00670000208e16d2, 0x00673000508e16dc, 0x00678800108e16f2, - // Entry 80 - 9F - 0x00680800188e16f8, 0x00682800408e1700, 0x00687000188e1712, 0x00689001488e171a, - 0x0069e8004090176e, 0x006a300018901780, 0x006a500030901788, 0x006aa00080901796, - 0x006b3000d09217b8, 0x006c1000109417ee, 0x006c2800909417f4, 0x006cd000c094181a, - 0x006d98004896184c, 0x006de80008961860, 0x006e000038961864, 0x006e500008961874, - 0x006e780030961878, 0x006eb00008961886, 0x006ec0004096188a, 0x006f30005098189c, - 0x006f9000189818b2, 0x00700801d09818ba, 0x0071f800e89a1930, 0x00740800109c196c, - 0x00742000089c1972, 0x00743800109c1976, 0x00745000089c197c, 0x00746800089c1980, - 0x0074a000209c1984, 0x0074c800389c198e, 0x00750800189c199e, 0x00752800089c19a6, - // Entry A0 - BF - 0x00753800089c19aa, 0x00755000109c19ae, 0x00756800689c19b4, 0x0075d800189e19d0, - 0x00760000289e19d8, 0x00763000089e19e4, 0x00764000309e19e8, 0x00768000509e19f6, - 0x0076e000209e1a0c, 0x00780002409e1a16, 0x007a480120a21aa8, 0x007b880138a21af2, - 0x007cc80120a41b42, 0x007df00078a61b8c, 0x007e700068a81bac, 0x0080000630a81bc8, - 0x0086380008b21d56, 0x0086680008b21d5a, 0x0086800bc8b21d5e, 0x0092500020c42052, - 0x0092800038c4205c, 0x0092c00008c4206c, 0x0092d00020c42070, 0x0093000148c4207a, - 0x0094500020c620ce, 0x0094800108c620d8, 0x0095900020c8211c, 0x0095c00038c82126, - 0x0096000008c82136, 0x0096100020c8213a, 0x0096400078c82144, 0x0096c001c8ca2164, - // Entry C0 - DF - 0x0098900020cc21d8, 0x0098c00218cc21e2, 0x009ae80100ce226a, 0x009c0000d0d022ac, - 0x009d0002b0d022e2, 0x009fc00030d42390, 0x00a00014e8d4239e, 0x00b50002c8f828da, - 0x00b8000068fc298e, 0x00b8700038fc29aa, 0x00b90000b8fc29ba, 0x00ba0000a0fc29ea, - 0x00bb000068fe2a14, 0x00bb700018fe2a30, 0x00bb900010fe2a38, 0x00bc0002f0fe2a3e, - 0x00bf000051022afc, 0x00bf800051022b12, 0x00c0000079022b28, 0x00c0800051042b48, - 0x00c10002c1042b5e, 0x00c4000159082c10, 0x00c58002310a2c68, 0x00c80000f90e2cf6, - 0x00c90000610e2d36, 0x00c9800061102d50, 0x00ca000009102d6a, 0x00ca200151102d6e, - 0x00cb800029102dc4, 0x00cc000161122dd0, 0x00cd8000d1142e2a, 0x00ce800059142e60, - // Entry E0 - FF - 0x00cef001f1162e78, 0x00d0f00209182ef6, 0x00d30000e91a2f7a, 0x00d3f800591c2fb6, - 0x00d48000511c2fce, 0x00d50000711c2fe4, 0x00d58000791e3002, 0x00d80002611e3022, - 0x00da8001692230bc, 0x00dc0003a1243118, 0x00dfe001e12a3202, 0x00e1d800792c327c, - 0x00e26801e12c329c, 0x00e60000412e3316, 0x00e6800139303328, 0x00e7c00011323378, - 0x00e80007b132337e, 0x00efd808d940356c, 0x00f8c000315637a4, 0x00f90001315837b2, - 0x00fa4000315a3800, 0x00fa8000415c380e, 0x00fac800095c3820, 0x00fad800095c3824, - 0x00fae800095c3828, 0x00faf800f95c382c, 0x00fc0001a95e386c, 0x00fdb000796638d8, - 0x00fe3000716638f8, 0x00feb00031683916, 0x00fee80099683924, 0x00ff90001968394c, - // Entry 100 - 11F - 0x00ffb000496a3954, 0x01000003296a3968, 0x01033000616e3a34, 0x0103a000d96e3a4e, - 0x01048000696e3a86, 0x01050000f9703aa2, 0x0106800109703ae2, 0x0108000461723b26, - 0x010c801379783c40, 0x0120000139944120, 0x0122000059964170, 0x01230038a1964188, - 0x015bb00101fa4fb2, 0x015cc00111fc4ff4, 0x015de80061fe503a, 0x015e500042005054, - 0x015f600022005066, 0x016000017a005070, 0x016180017a0250d0, 0x01630004a2065130, - 0x0167c8016a0e525a, 0x016938000a1052b6, 0x016968000a1052ba, 0x01698001c21052be, - 0x016b780012145330, 0x016bf800c2145336, 0x016d00003a145368, 0x016d40003a145378, - 0x016d80003a145388, 0x016dc0003a165398, 0x016e00003a1653a8, 0x016e40003a1653b8, - // Entry 120 - 13F - 0x016e80003a1653c8, 0x016ec0003a1653d8, 0x016f00032a1653e8, 0x01740000d21c54b4, - 0x0174d802ca1c54ea, 0x01780006b220559e, 0x017f80006228574c, 0x01800002022a5766, - 0x01820802b22e57e8, 0x0184c8033a305896, 0x018828014a345966, 0x01898802f23659ba, - 0x018c80015a3a5a78, 0x018e0001223c5ad0, 0x018f80017a3c5b1a, 0x01910006fa405b7a, - 0x01980008024a5d3a, 0x01a000cdb0001237, 0x026e000202545f3c, 0x0270028eb000481f, - 0x050000246a565fbe, 0x05248001ba7a68da, 0x0526800ae27c694a, 0x05320005c2866c04, - 0x053800057a8e6d76, 0x053d8000429a6ed6, 0x053fb801aa9a6ee8, 0x05418000529e6f54, - 0x05420001c29e6f6a, 0x0544000232a06fdc, 0x0546700062a4706a, 0x05470000f2a47084, - // Entry 140 - 15F - 0x05480002a2a670c2, 0x054af800f2a8716c, 0x054c000272aa71aa, 0x054e78005aae7248, - 0x054ef0010aae7260, 0x05500001bab072a4, 0x0552000072b27314, 0x0552800052b27332, - 0x0552e0033ab27348, 0x0556d800e2b67418, 0x0558080032b87452, 0x0558480032b87460, - 0x0558880032b8746e, 0x055900003ab8747c, 0x055940003aba748c, 0x05598001b2ba749c, - 0x055b8003f2be750a, 0x055f800052c47608, 0x0560015d20006623, 0x06bd8000bac4761e, - 0x06be58018ac4764e, 0x06c0001c00008841, 0x06dc00040000c839, 0x06e000200001001f, - 0x070000c800011e1b, 0x07c8000b72c876b2, 0x07d3800352de7990, 0x07d800003ae67a66, - 0x07d898002ae67a76, 0x07d8e800d2e67a82, 0x07d9c0002ae87ab8, 0x07d9f0000ae87ac4, - // Entry 160 - 17F - 0x07da000012e87ac8, 0x07da180012e87ace, 0x07da3003e2e87ad4, 0x07de980b6af07bce, - 0x07ea800203107eaa, 0x07ec9001b3167f2c, 0x07ef8000731c7f9a, 0x07f00000d31c7fb8, - 0x07f100019b1e7fee, 0x07f2a0009b228056, 0x07f340002322807e, 0x07f380002b228088, - 0x07f3b0043b228094, 0x07f7f8000b2c81a4, 0x07f80805f32c81a8, 0x07fe100033368326, - 0x07fe500033368334, 0x07fe900033368342, 0x07fed0001b368350, 0x07ff00003b388358, - 0x07ff40003b388368, 0x07ffc8002b388378, 0x0800000063388384, 0x08006800d338839e, - 0x080140009b3a83d4, 0x0801e000133a83fc, 0x0801f8007b3a8402, 0x08028000733c8422, - 0x08040003db3c8440, 0x080800001b428538, 0x080838016b428540, 0x0809b802c344859c, - // Entry 180 - 19F - 0x080c8000634a864e, 0x080d00000b4a8668, 0x080e8001734a866c, 0x08140000eb4c86ca, - 0x081500018b4e8706, 0x08170000e350876a, 0x08180001235087a4, 0x08198000db5287ee, - 0x081a80015b528826, 0x081c0000f354887e, 0x081cf8012b5688bc, 0x081e400073588908, - 0x08200004f3588926, 0x08250000535e8a64, 0x0825800123608a7a, 0x0826c00123608ac4, - 0x0828000143628b0e, 0x08298001a3648b60, 0x082b78000b668bca, 0x08300009bb668bce, - 0x083a0000b3728e3e, 0x083b000043728e6c, 0x0840000033748e7e, 0x084040000b748e8c, - 0x0840500163748e90, 0x0841b80013768eea, 0x0841e0000b768ef0, 0x0841f800bb768ef4, - 0x0842b80243768f24, 0x084538004b7a8fb6, 0x084700009b7a8fca, 0x0847a000137a8ff2, - // Entry 1A0 - 1BF - 0x0847d8010b7a8ff8, 0x0848f800db7c903c, 0x0849f8000b7e9074, 0x084c0001c37e9078, - 0x084de000a38090ea, 0x084e900193829114, 0x085028001386917a, 0x0850600043869180, - 0x0850a8001b869192, 0x0850c800db86919a, 0x0851c0001b8691d2, 0x0851f8004b8891da, - 0x085280004b8891ee, 0x0853000203889202, 0x085600013b8c9284, 0x08575800638e92d4, - 0x08580001b38e92ee, 0x0859c800eb90935c, 0x085ac000db929398, 0x085bc000d39493d0, - 0x085cc80023969406, 0x085d48003b969410, 0x086000024b969420, 0x086400019b9a94b4, - 0x086600019b9e951c, 0x0867d00033a09584, 0x08730000fba09592, 0x0880000273a295d2, - 0x08829000f3a49670, 0x0883f8021ba696ae, 0x08868000cba89736, 0x0887800053a8976a, - // Entry 1C0 - 1DF - 0x08880001abaa9780, 0x0889b00073ac97ec, 0x088a80013bac980a, 0x088c000273ae985a, - 0x088e800083b098f8, 0x088f0800a3b0991a, 0x0890000093b29944, 0x0890980163b2996a, - 0x089400003bb499c4, 0x089440000bb499d4, 0x0894500023b499d8, 0x089478007bb499e2, - 0x0894f8005bb49a02, 0x08958001dbb69a1a, 0x0897800053b89a92, 0x0898000023b89aa8, - 0x0898280043b89ab2, 0x0898780013b89ac4, 0x08989800b3b89aca, 0x089950003bba9af8, - 0x0899900013ba9b08, 0x0899a8002bba9b0e, 0x0899e0004bba9b1a, 0x089a380013ba9b2e, - 0x089a58001bba9b34, 0x089a80000bba9b3c, 0x089ab8000bba9b40, 0x089ae8003bba9b44, - 0x089b30003bba9b54, 0x089b80002bbc9b64, 0x08a00002d3bc9b70, 0x08a2d8000bbe9c26, - // Entry 1E0 - 1FF - 0x08a2e8000bbe9c2a, 0x08a4000243be9c2e, 0x08a6800053c09cc0, 0x08ac0001b3c29cd6, - 0x08adc00133c49d44, 0x08b000022bc69d92, 0x08b2800053c89e1e, 0x08b300006bc89e34, - 0x08b40001c3c89e50, 0x08b6000053ca9ec2, 0x08b80000d3cc9ed8, 0x08b8e8007bcc9f0e, - 0x08b9800083cc9f2e, 0x08c500029bcc9f50, 0x08c7f8000bd29ff8, 0x08d60001cbd29ffc, - 0x08e000004bd4a070, 0x08e050016bd4a084, 0x08e1c00073d6a0e0, 0x08e28000ebd6a0fe, - 0x08e3800103d8a13a, 0x08e49000b3daa17c, 0x08e5480073daa1aa, 0x0900001cd3dca1c8, - 0x092000037c0ca8fe, 0x092380002c14a9de, 0x092400062414a9ea, 0x098000217c20ab74, - 0x0a2000123c52b3d4, 0x0b400011cc70b864, 0x0b520000fc8cbcd8, 0x0b530000548ebd18, - // Entry 200 - 21F - 0x0b537000148ebd2e, 0x0b568000f48ebd34, 0x0b578000348ebd72, 0x0b580002348ebd80, - 0x0b5a80005492be0e, 0x0b5ad8003c92be24, 0x0b5b1800ac94be34, 0x0b5be8009c94be60, - 0x0b7800022c96be88, 0x0b7a80017c98bf14, 0x0b7c78008c9abf74, 0x0b7f00000c9abf98, - 0x0b8000bf68013825, 0x0c4000179c9abf9c, 0x0d80000014b8c584, 0x0de000035cb8c58a, - 0x0de380006cbcc662, 0x0de400004cbcc67e, 0x0de4800054bec692, 0x0de4e00044bec6a8, - 0x0e800007b4bec6ba, 0x0e8800013cd2c8a8, 0x0e89480604d4c8f8, 0x0e90000234e0ca7a, - 0x0e980002bce4cb08, 0x0e9b000094e8cbb8, 0x0ea00002ace8cbde, 0x0ea2b0023ceecc8a, - 0x0ea4f00014f2cd1a, 0x0ea510000cf2cd20, 0x0ea5280014f2cd24, 0x0ea5480024f2cd2a, - // Entry 220 - 23F - 0x0ea5700064f2cd34, 0x0ea5d8000cf2cd4e, 0x0ea5e8003cf2cd52, 0x0ea628020cf4cd62, - 0x0ea8380024f8cde6, 0x0ea8680044f8cdf0, 0x0ea8b0003cf8ce02, 0x0ea8f000e4f8ce12, - 0x0ea9d80024face4c, 0x0eaa00002cface56, 0x0eaa30000cface62, 0x0eaa50003cface66, - 0x0eaa900aa4face76, 0x0eb540092512d120, 0x0ebe7015f528d36a, 0x0ed4d8002d60d8e8, - 0x0ed508007d60d8f4, 0x0f0000003d62d914, 0x0f0040008d62d924, 0x0f00d8003d64d948, - 0x0f0118001564d958, 0x0f0130002d64d95e, 0x0f4000062d64d96a, 0x0f4638008570daf6, - 0x0f4800025d70db18, 0x0f4a80005574dbb0, 0x0f4af0001574dbc6, 0x0f7000002574dbcc, - 0x0f702800dd74dbd6, 0x0f7108001576dc0e, 0x0f7120000d76dc14, 0x0f7138000d76dc18, - // Entry 240 - 25F - 0x0f7148005576dc1c, 0x0f71a0002576dc32, 0x0f71c8000d78dc3c, 0x0f71d8000d78dc40, - 0x0f7210000d78dc44, 0x0f7238000d78dc48, 0x0f7248000d78dc4c, 0x0f7258000d78dc50, - 0x0f7268001d78dc54, 0x0f7288001578dc5c, 0x0f72a0000d78dc62, 0x0f72b8000d78dc66, - 0x0f72c8000d78dc6a, 0x0f72d8000d78dc6e, 0x0f72e8000d78dc72, 0x0f72f8000d78dc76, - 0x0f7308001578dc7a, 0x0f7320000d78dc80, 0x0f7338002578dc84, 0x0f7360003d78dc8e, - 0x0f73a000257adc9e, 0x0f73c800257adca8, 0x0f73f0000d7adcb2, 0x0f740000557adcb6, - 0x0f7458008d7adccc, 0x0f7508001d7cdcf0, 0x0f7528002d7cdcf8, 0x0f7558008d7cdd04, - 0x0f778000157edd28, 0x0f800001657edd2e, 0x0f8180032580dd88, 0x0f8500007d84de52, - // Entry 260 - 27F - 0x0f8588007d86de72, 0x0f8608007d86de92, 0x0f8688012d88deb2, 0x0f8800006d88defe, - 0x0f888000fd8adf1a, 0x0f898001e58cdf5a, 0x0f8b8001ed90dfd4, 0x0f8f3000ed92e050, - 0x0f9080016594e08c, 0x0f9200004d98e0e6, 0x0f9280001598e0fa, 0x0f98001e9d98e100, - 0x0fb700006db8e8a8, 0x0fb780003db8e8c4, 0x0fb80003a5b8e8d4, 0x0fbc0002adbee9be, - 0x0fc0000065c4ea6a, 0x0fc08001c5c4ea84, 0x0fc2800055c8eaf6, 0x0fc3000145caeb0c, - 0x0fc48000f5cceb5e, 0x0fc880007dceeb9c, 0x0fc9000045ceebbc, 0x0fc980000dd0ebce, - 0x0fc9980065d0ebd2, 0x0fca000065d0ebec, 0x0fca80007dd0ec06, 0x0fcc000095d0ec26, - 0x0fce00000dd0ec4c, 0x10000536b8015c37, 0x15380081a8019237, 0x15ba0006f001c837, - // Entry 280 - 29F - 0x15c100b41001fe37, 0x17c00010f5d0ec50, 0x700008000df4f08e, 0x7001000305f4f092, - 0x7008000785f8f154, 0x780007fff002342d, 0x800007fff002602d, -} // Size: 5200 bytes - -var table1 = []uint16{ // 31130 elements - // Entry 0 - 3F - 0x0146, 0x014b, 0x015b, 0x0169, 0x0174, 0x017f, 0x018b, 0x0194, - 0x019e, 0x01ae, 0x01bf, 0x01c7, 0x01d0, 0x01d5, 0x01e1, 0x01ea, - 0x01f1, 0x01fb, 0x0204, 0x020d, 0x0218, 0x0222, 0x022c, 0x0235, - 0x0240, 0x024b, 0x0255, 0x025a, 0x0263, 0x0271, 0x027c, 0x028d, - 0x029a, 0x02a7, 0x02bd, 0x02d3, 0x02e9, 0x02ff, 0x0315, 0x032b, - 0x0341, 0x0357, 0x036d, 0x0383, 0x0399, 0x03af, 0x03c5, 0x03db, - 0x03f1, 0x0407, 0x041d, 0x0433, 0x0449, 0x045f, 0x0475, 0x048b, - 0x04a1, 0x04b7, 0x04cd, 0x04e3, 0x04f6, 0x0505, 0x0519, 0x052a, - // Entry 40 - 7F - 0x0532, 0x053e, 0x0552, 0x0566, 0x057a, 0x058e, 0x05a2, 0x05b6, - 0x05ca, 0x05de, 0x05f2, 0x0606, 0x061a, 0x062e, 0x0642, 0x0656, - 0x066a, 0x067e, 0x0692, 0x06a6, 0x06ba, 0x06ce, 0x06e2, 0x06f6, - 0x070a, 0x071e, 0x0732, 0x0746, 0x0758, 0x0765, 0x0778, 0x077d, - 0x037d, 0x038b, 0x03a4, 0x03ad, 0x03b7, 0x03c4, 0x03cc, 0x03d6, - 0x03e2, 0x03eb, 0x03f9, 0x0413, 0x043c, 0x0444, 0x044f, 0x045e, - 0x0464, 0x046f, 0x047e, 0x048d, 0x049e, 0x04aa, 0x04b4, 0x04c0, - 0x04ca, 0x04d1, 0x04e0, 0x04fb, 0x0525, 0x0540, 0x0558, 0x0576, - // Entry 80 - BF - 0x058c, 0x05ad, 0x05ce, 0x05f4, 0x0615, 0x063a, 0x0660, 0x0677, - 0x069a, 0x06bb, 0x06dc, 0x0702, 0x0727, 0x0748, 0x0769, 0x078f, - 0x07b4, 0x07cc, 0x07ed, 0x080e, 0x082f, 0x0855, 0x0876, 0x089b, - 0x08ae, 0x08d0, 0x08f1, 0x0912, 0x0938, 0x095d, 0x097e, 0x0998, - 0x09b2, 0x09d1, 0x09f0, 0x0a14, 0x0a33, 0x0a56, 0x0a7a, 0x0a8f, - 0x0ab0, 0x0acf, 0x0aee, 0x0b12, 0x0b35, 0x0b54, 0x0b73, 0x0b97, - 0x0bba, 0x0bd0, 0x0bef, 0x0c0e, 0x0c2d, 0x0c51, 0x0c70, 0x0c93, - 0x0ca0, 0x0cc0, 0x0cdf, 0x0cfe, 0x0d22, 0x0d45, 0x0d64, 0x0d7c, - // Entry C0 - FF - 0x0d9f, 0x0dc1, 0x0de1, 0x0e02, 0x0e21, 0x0e43, 0x0e63, 0x0e84, - 0x0ea3, 0x0ec9, 0x0eed, 0x0f12, 0x0f35, 0x0f56, 0x0f75, 0x0f96, - 0x0fb5, 0x0fd7, 0x0ff7, 0x1019, 0x1039, 0x105a, 0x1079, 0x109e, - 0x10c1, 0x10e3, 0x1103, 0x1124, 0x1143, 0x1169, 0x118d, 0x11ae, - 0x11cd, 0x11f2, 0x1215, 0x1238, 0x1259, 0x127f, 0x12a3, 0x12c5, - 0x12e5, 0x1306, 0x1325, 0x1347, 0x1367, 0x1388, 0x13a7, 0x13c9, - 0x13e9, 0x140e, 0x142a, 0x1443, 0x145a, 0x1480, 0x14a4, 0x14c7, - 0x14e8, 0x14fe, 0x151f, 0x153e, 0x1561, 0x1582, 0x15a3, 0x15c2, - // Entry 100 - 13F - 0x15e8, 0x160c, 0x162e, 0x164e, 0x166f, 0x168e, 0x16b1, 0x16d2, - 0x16f3, 0x1712, 0x173d, 0x1755, 0x176b, 0x178d, 0x17ad, 0x17ce, - 0x17ed, 0x1815, 0x183b, 0x1854, 0x186b, 0x188c, 0x18ab, 0x18ce, - 0x18ef, 0x1910, 0x192f, 0x1950, 0x196f, 0x1995, 0x19b9, 0x19dc, - 0x19fd, 0x1a1e, 0x1a3d, 0x1a60, 0x1a81, 0x1aa2, 0x1ac1, 0x1ae3, - 0x1b03, 0x1b24, 0x1b43, 0x1b65, 0x1b85, 0x1ba6, 0x1bc5, 0x1beb, - 0x1c0f, 0x1c37, 0x1c5d, 0x1c7f, 0x1c9f, 0x1cc5, 0x1ce9, 0x1d0f, - 0x1d33, 0x1d58, 0x1d79, 0x1d98, 0x1dbd, 0x1de0, 0x1e01, 0x1e20, - // Entry 140 - 17F - 0x1e39, 0x1e59, 0x1e79, 0x1e9b, 0x1ebb, 0x1ed8, 0x1ef3, 0x1f0e, - 0x1f2e, 0x1f4c, 0x1f6a, 0x1f8a, 0x1fac, 0x1fcc, 0x1feb, 0x200a, - 0x2024, 0x203f, 0x205f, 0x207d, 0x209d, 0x20b7, 0x20cc, 0x20e5, - 0x2107, 0x2127, 0x2145, 0x2162, 0x2187, 0x21a4, 0x21c9, 0x21f1, - 0x2219, 0x2239, 0x2257, 0x226e, 0x2283, 0x22a3, 0x22c1, 0x22d0, - 0x22ed, 0x2308, 0x2320, 0x233e, 0x2364, 0x2384, 0x23a2, 0x23cc, - 0x23ec, 0x240a, 0x2426, 0x2446, 0x2466, 0x2484, 0x24a6, 0x24c6, - 0x24de, 0x24ff, 0x251e, 0x253e, 0x255a, 0x2578, 0x2594, 0x25c2, - // Entry 180 - 1BF - 0x25d3, 0x25ec, 0x2606, 0x2621, 0x263d, 0x265f, 0x2694, 0x26b4, - 0x26cb, 0x26f5, 0x270a, 0x2721, 0x274b, 0x2760, 0x2781, 0x27a0, - 0x27c1, 0x27e0, 0x2801, 0x2820, 0x2841, 0x2860, 0x2890, 0x28be, - 0x28ed, 0x291a, 0x2949, 0x2976, 0x29a5, 0x29d2, 0x29ed, 0x2a1d, - 0x2a4b, 0x2a7b, 0x2aa9, 0x2acc, 0x2aed, 0x2b0f, 0x2b2f, 0x2b50, - 0x2b6f, 0x2b90, 0x2baf, 0x2bd1, 0x2bf1, 0x2c1e, 0x2c49, 0x2c6c, - 0x2c8d, 0x2cac, 0x2cc3, 0x2ced, 0x2d02, 0x2d23, 0x2d42, 0x2d5c, - 0x2d75, 0x2d96, 0x2db5, 0x2de5, 0x2e13, 0x2e35, 0x2e55, 0x2e81, - // Entry 1C0 - 1FF - 0x2eab, 0x2ed3, 0x2ef9, 0x2f23, 0x2f4b, 0x2f73, 0x2f99, 0x2fc3, - 0x2feb, 0x3013, 0x3039, 0x3063, 0x308b, 0x30b3, 0x30d9, 0x3103, - 0x312b, 0x3153, 0x3179, 0x31a3, 0x31cb, 0x31f3, 0x3219, 0x3243, - 0x326b, 0x3292, 0x32b7, 0x32de, 0x3303, 0x331c, 0x3333, 0x3354, - 0x3373, 0x339d, 0x33bb, 0x33d2, 0x33e7, 0x3407, 0x3425, 0x344a, - 0x346d, 0x3490, 0x34b1, 0x34e1, 0x350f, 0x353b, 0x3565, 0x358a, - 0x35ad, 0x35dd, 0x360b, 0x362d, 0x364d, 0x366b, 0x3689, 0x36a7, - 0x36c3, 0x36e0, 0x36fd, 0x371f, 0x3741, 0x3761, 0x3780, 0x37ab, - // Entry 200 - 23F - 0x37cf, 0x37f3, 0x3814, 0x3833, 0x3855, 0x386f, 0x388c, 0x38ae, - 0x38ce, 0x38f0, 0x3910, 0x393b, 0x395e, 0x3980, 0x39a0, 0x39c2, - 0x39e2, 0x39fd, 0x3a15, 0x3a34, 0x3a52, 0x3a6b, 0x3a89, 0x3aa7, - 0x3ac5, 0x3ae2, 0x3afa, 0x3b1c, 0x3b35, 0x3b57, 0x3b83, 0x3bac, - 0x3bd4, 0x3bf2, 0x3c0d, 0x3c29, 0x3c41, 0x3c5d, 0x3c78, 0x3c96, - 0x3cb7, 0x3cd7, 0x3cee, 0x3d0a, 0x3d30, 0x3d4e, 0x3d76, 0x3d8d, - 0x3da8, 0x3dd1, 0x3def, 0x3e12, 0x3e3a, 0x3e56, 0x3e71, 0x3e8e, - 0x3ead, 0x3ec3, 0x3ede, 0x3f07, 0x3f2c, 0x3f4e, 0x3f6c, 0x3f8e, - // Entry 240 - 27F - 0x3fb9, 0x3fd5, 0x3ffa, 0x4018, 0x402e, 0x405f, 0x4084, 0x40a4, - 0x40bf, 0x40e7, 0x40ff, 0x4119, 0x4137, 0x4152, 0x416d, 0x4188, - 0x41a4, 0x41cc, 0x41ea, 0x4200, 0x4220, 0x4239, 0x4261, 0x4283, - 0x429b, 0x42b6, 0x42d2, 0x42f2, 0x4318, 0x4334, 0x435a, 0x4375, - 0x4391, 0x43af, 0x43d4, 0x4402, 0x441f, 0x443e, 0x4465, 0x4482, - 0x44a1, 0x44c8, 0x44e7, 0x4504, 0x4521, 0x4541, 0x4561, 0x458a, - 0x45bc, 0x45d3, 0x45f4, 0x460b, 0x4622, 0x4640, 0x4668, 0x4690, - 0x46a7, 0x46be, 0x46d3, 0x46ef, 0x470b, 0x4725, 0x4743, 0x4762, - // Entry 280 - 2BF - 0x4780, 0x479c, 0x47c1, 0x47df, 0x47fe, 0x481a, 0x4838, 0x4859, - 0x485e, 0x487b, 0x4891, 0x48ad, 0x48c9, 0x48ea, 0x4904, 0x4924, - 0x4944, 0x4964, 0x4989, 0x49b0, 0x49d6, 0x49ed, 0x4a06, 0x4a1f, - 0x4a39, 0x4a3e, 0x4a47, 0x4a51, 0x4a57, 0x4a62, 0x4a75, 0x4a90, - 0x4aac, 0x4ac7, 0x4ade, 0x4af5, 0x4b0c, 0x4b37, 0x4b5a, 0x4b77, - 0x4b93, 0x4baf, 0x4bd1, 0x4bf8, 0x4c20, 0x4c37, 0x4c52, 0x4c73, - 0x4c95, 0x4cb5, 0x4cd7, 0x4cfa, 0x4d12, 0x4d35, 0x4d5f, 0x4d89, - 0x4da2, 0x4dbe, 0x4ddd, 0x4dfa, 0x4e18, 0x4e34, 0x4e49, 0x4e63, - // Entry 2C0 - 2FF - 0x4e81, 0x4e97, 0x4ead, 0x4ec8, 0x4ed7, 0x4ee7, 0x4ef9, 0x4f08, - 0x4f1b, 0x4f2e, 0x4f42, 0x4f56, 0x4f73, 0x4f82, 0x4f9f, 0x4fc3, - 0x4fe0, 0x4ff5, 0x500d, 0x5029, 0x503e, 0x505c, 0x5077, 0x5093, - 0x50af, 0x50c8, 0x50e2, 0x50fc, 0x510a, 0x5128, 0x513f, 0x5158, - 0x5171, 0x518b, 0x51ab, 0x51c9, 0x51dc, 0x51f5, 0x5209, 0x521e, - 0x522f, 0x523f, 0x525c, 0x5272, 0x5296, 0x52ab, 0x52cc, 0x52e1, - 0x52ff, 0x5314, 0x532a, 0x533c, 0x5355, 0x536c, 0x538a, 0x53a7, - 0x53c6, 0x53e4, 0x5403, 0x5422, 0x5438, 0x544f, 0x5460, 0x5478, - // Entry 300 - 33F - 0x5491, 0x54aa, 0x54c3, 0x54de, 0x54f5, 0x5514, 0x5531, 0x5547, - 0x5562, 0x5586, 0x55a0, 0x55b9, 0x55d3, 0x55f2, 0x5612, 0x562f, - 0x5648, 0x5667, 0x5685, 0x5696, 0x56a7, 0x56c5, 0x56e4, 0x5714, - 0x5733, 0x574c, 0x5764, 0x577f, 0x5795, 0x57b1, 0x57c7, 0x57de, - 0x57fb, 0x5811, 0x5830, 0x5857, 0x5875, 0x5893, 0x58b1, 0x58cf, - 0x58ed, 0x590b, 0x5929, 0x5947, 0x5965, 0x5983, 0x59a1, 0x59bf, - 0x59dd, 0x59f6, 0x5a0d, 0x5a2f, 0x5a4f, 0x5a61, 0x5a79, 0x5aa0, - 0x5ac5, 0x02c5, 0x02d8, 0x0300, 0x0326, 0x0355, 0x0368, 0x0380, - // Entry 340 - 37F - 0x0380, 0x038b, 0x03a0, 0x03c5, 0x03d5, 0x03fc, 0x041f, 0x0443, - 0x0043, 0x006a, 0x006a, 0x0091, 0x00b6, 0x00e6, 0x0100, 0x0119, - 0x0133, 0x014d, 0x0169, 0x0182, 0x019a, 0x01b4, 0x01cd, 0x01e7, - 0x0201, 0x0218, 0x022f, 0x0246, 0x0262, 0x0279, 0x0291, 0x0291, - 0x02ab, 0x02c3, 0x02df, 0x02f7, 0x030f, 0x0327, 0x0341, 0x0369, - 0x0394, 0x03b7, 0x03dc, 0x03fd, 0x041f, 0x0452, 0x046a, 0x0481, - 0x0499, 0x04b1, 0x04cb, 0x04e2, 0x04f8, 0x0510, 0x0527, 0x053f, - 0x0557, 0x056c, 0x0581, 0x0596, 0x05b0, 0x05c5, 0x05db, 0x05f9, - // Entry 380 - 3BF - 0x0611, 0x0627, 0x0641, 0x0657, 0x066d, 0x0683, 0x069b, 0x06c1, - 0x06ea, 0x070f, 0x0734, 0x0757, 0x076f, 0x0780, 0x0792, 0x07b0, - 0x07d8, 0x0804, 0x0814, 0x0823, 0x0833, 0x084d, 0x086d, 0x0880, - 0x0899, 0x08ad, 0x08c7, 0x08d9, 0x08f1, 0x0903, 0x091b, 0x0935, - 0x094d, 0x0966, 0x097d, 0x0997, 0x09af, 0x09c9, 0x09e1, 0x09fd, - 0x0a17, 0x0a32, 0x0a4b, 0x0a64, 0x0a7b, 0x0a8d, 0x0a9d, 0x0ab6, - 0x0ac6, 0x0ae0, 0x0afb, 0x0b1f, 0x0b37, 0x0b4d, 0x0b6e, 0x0b86, - 0x0b9c, 0x0bb8, 0x0be2, 0x0c0a, 0x0c3b, 0x0c60, 0x0c7a, 0x0c95, - // Entry 3C0 - 3FF - 0x0cb0, 0x0cd4, 0x0cef, 0x0d1f, 0x0d39, 0x0d53, 0x0d6e, 0x0d89, - 0x0da5, 0x0dc0, 0x0de4, 0x0e03, 0x0e1f, 0x0e38, 0x0e52, 0x0e6c, - 0x0e87, 0x0ea1, 0x0ebb, 0x0ed6, 0x0ef0, 0x0f09, 0x0f28, 0x0f42, - 0x0f5c, 0x0f76, 0x0f90, 0x0fa9, 0x0fc3, 0x0fdd, 0x0ff7, 0x1011, - 0x102a, 0x1044, 0x105e, 0x1079, 0x1094, 0x10af, 0x10cc, 0x10ed, - 0x1109, 0x112a, 0x1143, 0x115d, 0x1177, 0x118e, 0x11a6, 0x11be, - 0x11d7, 0x11ef, 0x1207, 0x1220, 0x1238, 0x124f, 0x126c, 0x1284, - 0x129c, 0x12b4, 0x12cc, 0x12e3, 0x12fb, 0x1313, 0x132b, 0x1343, - // Entry 400 - 43F - 0x135a, 0x1372, 0x138a, 0x13a3, 0x13bc, 0x13d5, 0x13f0, 0x140f, - 0x1429, 0x1448, 0x145f, 0x1477, 0x148f, 0x14b2, 0x14ca, 0x14e3, - 0x14fc, 0x151e, 0x1537, 0x1565, 0x157d, 0x1595, 0x15ae, 0x15c7, - 0x15e1, 0x15fa, 0x161c, 0x1639, 0x1653, 0x1670, 0x168b, 0x16a6, - 0x16bf, 0x16e1, 0x1701, 0x1723, 0x1743, 0x176e, 0x1797, 0x17b6, - 0x17d3, 0x17fb, 0x1821, 0x183c, 0x1855, 0x1870, 0x1889, 0x18a5, - 0x18bf, 0x18de, 0x18fb, 0x1933, 0x1969, 0x1983, 0x199b, 0x19be, - 0x19df, 0x1a07, 0x1a2d, 0x1a47, 0x1a5f, 0x1a7c, 0x1a97, 0x1aae, - // Entry 440 - 47F - 0x1ac6, 0x1ae7, 0x1b08, 0x1b29, 0x1b44, 0x1b6d, 0x1b8d, 0x1bb6, - 0x1bdd, 0x1c02, 0x1c25, 0x1c49, 0x1c6b, 0x1c92, 0x1cb7, 0x1cde, - 0x1d03, 0x1d2f, 0x1d59, 0x1d83, 0x1dab, 0x1dd4, 0x1dfb, 0x1e24, - 0x1e4b, 0x1e7a, 0x1ea7, 0x1ecd, 0x1ef1, 0x1f13, 0x1f33, 0x1f5c, - 0x1f83, 0x1fa3, 0x1fc1, 0x1fec, 0x2015, 0x2039, 0x205b, 0x2084, - 0x20ab, 0x20d4, 0x20fb, 0x211d, 0x213d, 0x216b, 0x2197, 0x21c0, - 0x21e7, 0x2207, 0x2225, 0x224f, 0x2277, 0x22a7, 0x22d5, 0x22f1, - 0x230b, 0x2330, 0x2353, 0x2387, 0x23b9, 0x23d1, 0x23f7, 0x241b, - // Entry 480 - 4BF - 0x243f, 0x2461, 0x2485, 0x24a7, 0x24cb, 0x24ed, 0x2511, 0x2533, - 0x2559, 0x257d, 0x25a1, 0x25c3, 0x25e1, 0x2605, 0x2627, 0x264f, - 0x2675, 0x2693, 0x26af, 0x26d4, 0x26f7, 0x2714, 0x272f, 0x275b, - 0x2785, 0x27af, 0x27d7, 0x2800, 0x2827, 0x284c, 0x286f, 0x2894, - 0x28b7, 0x28df, 0x2905, 0x292d, 0x2953, 0x2973, 0x2991, 0x29c0, - 0x29ed, 0x2a15, 0x2a3b, 0x2a60, 0x2a83, 0x2aab, 0x2ad1, 0x2afc, - 0x2b25, 0x2b4f, 0x2b77, 0x2ba1, 0x2bc9, 0x2bf4, 0x2c1d, 0x2c4d, - 0x2c7b, 0x2c9f, 0x2cc1, 0x2ce7, 0x2d0b, 0x2d2a, 0x2d47, 0x2d67, - // Entry 4C0 - 4FF - 0x2d85, 0x2da5, 0x2dc3, 0x2de4, 0x2e03, 0x2e23, 0x2e41, 0x2e61, - 0x2e7f, 0x2e9f, 0x2ebd, 0x2edd, 0x2efb, 0x2f1e, 0x2f3f, 0x2f63, - 0x2f85, 0x2fa0, 0x2fb9, 0x2fd4, 0x2fed, 0x3008, 0x3021, 0x303b, - 0x3053, 0x306d, 0x3085, 0x30a5, 0x30c3, 0x30ee, 0x3117, 0x3142, - 0x316b, 0x3194, 0x31bb, 0x31e6, 0x320f, 0x3238, 0x325f, 0x327c, - 0x3297, 0x32b3, 0x32cd, 0x32f6, 0x331d, 0x031d, 0x0338, 0x0353, - 0x036e, 0x0388, 0x03a3, 0x03bd, 0x03d7, 0x03f1, 0x040b, 0x0426, - 0x0441, 0x045d, 0x0478, 0x0492, 0x04ad, 0x04c7, 0x04e1, 0x04fd, - // Entry 500 - 53F - 0x0519, 0x0534, 0x054e, 0x0569, 0x0584, 0x059e, 0x05b9, 0x05d4, - 0x05f0, 0x060a, 0x0625, 0x0640, 0x065c, 0x0677, 0x0691, 0x06ad, - 0x06c9, 0x06e4, 0x06fe, 0x0719, 0x0319, 0x0340, 0x0353, 0x0369, - 0x0382, 0x0390, 0x03a6, 0x03c0, 0x03c0, 0x03d9, 0x03f2, 0x040b, - 0x0423, 0x043c, 0x0454, 0x046c, 0x0484, 0x049c, 0x04b5, 0x04ce, - 0x04e8, 0x0501, 0x0519, 0x0532, 0x054a, 0x0562, 0x057c, 0x0596, - 0x05af, 0x05c7, 0x05e0, 0x05f9, 0x0611, 0x062a, 0x0643, 0x065d, - 0x0675, 0x068e, 0x06a7, 0x06c1, 0x06da, 0x06f2, 0x070c, 0x0726, - // Entry 540 - 57F - 0x073f, 0x0757, 0x0770, 0x0790, 0x0390, 0x03a2, 0x03b1, 0x03b1, - 0x03d4, 0x03f6, 0x0408, 0x0008, 0x001d, 0x0030, 0x0048, 0x0061, - 0x007a, 0x008e, 0x00a1, 0x00b4, 0x00c8, 0x00db, 0x00ee, 0x0102, - 0x011d, 0x0134, 0x014d, 0x0169, 0x017c, 0x0196, 0x01a9, 0x01bf, - 0x01d3, 0x01ee, 0x0201, 0x0214, 0x0230, 0x024c, 0x025d, 0x026f, - 0x0281, 0x0294, 0x02ad, 0x02bf, 0x02d7, 0x02ef, 0x0308, 0x031a, - 0x032c, 0x033e, 0x0350, 0x0363, 0x0375, 0x0395, 0x03a8, 0x03c4, - 0x03d6, 0x03ee, 0x03ff, 0x0417, 0x042c, 0x0440, 0x045c, 0x0471, - // Entry 580 - 5BF - 0x0486, 0x04a4, 0x04bd, 0x00bd, 0x00cf, 0x00e0, 0x00f3, 0x0106, - 0x0116, 0x0127, 0x013a, 0x014b, 0x015c, 0x016d, 0x0184, 0x0195, - 0x01a8, 0x01bf, 0x01d0, 0x01e7, 0x01f8, 0x020c, 0x021e, 0x0234, - 0x0244, 0x025d, 0x0270, 0x0281, 0x0293, 0x02a5, 0x02b6, 0x02b6, - 0x02d8, 0x02f7, 0x0319, 0x0332, 0x034e, 0x034e, 0x0360, 0x0371, - 0x0387, 0x0398, 0x03aa, 0x03c2, 0x03d8, 0x03f0, 0x03fa, 0x0415, - 0x0437, 0x0443, 0x044f, 0x0464, 0x047c, 0x048d, 0x04b5, 0x04d0, - 0x04ee, 0x050b, 0x0520, 0x0535, 0x0566, 0x057c, 0x058e, 0x05a0, - // Entry 5C0 - 5FF - 0x05b2, 0x05c2, 0x05d4, 0x01d4, 0x01f6, 0x020a, 0x0224, 0x0237, - 0x025a, 0x027d, 0x029f, 0x02c2, 0x02e4, 0x02f6, 0x0307, 0x0320, - 0x0331, 0x0343, 0x0355, 0x0366, 0x0378, 0x0389, 0x039b, 0x03ac, - 0x03be, 0x03d0, 0x03e3, 0x03f4, 0x0405, 0x0416, 0x0427, 0x0438, - 0x044b, 0x0472, 0x049b, 0x04c2, 0x04ed, 0x051a, 0x0528, 0x0539, - 0x054a, 0x055b, 0x056c, 0x057e, 0x0590, 0x05a1, 0x05b2, 0x05cc, - 0x05dd, 0x05ec, 0x05fb, 0x060a, 0x0616, 0x0622, 0x062e, 0x063b, - 0x0647, 0x065a, 0x066c, 0x067e, 0x0693, 0x06a8, 0x06bf, 0x06ce, - // Entry 600 - 63F - 0x06ed, 0x0715, 0x0730, 0x0745, 0x075f, 0x0776, 0x078d, 0x07a3, - 0x07b9, 0x07d1, 0x07e8, 0x07ff, 0x0815, 0x082d, 0x0845, 0x085c, - 0x086f, 0x0887, 0x08a1, 0x08b9, 0x08d2, 0x08eb, 0x0909, 0x0921, - 0x0949, 0x0971, 0x0989, 0x09a6, 0x09c2, 0x09e2, 0x09fe, 0x0a10, - 0x0a24, 0x0a36, 0x0a51, 0x0a82, 0x0a93, 0x0aa6, 0x0ab9, 0x0adb, - 0x0b09, 0x0b1b, 0x0b2d, 0x0b54, 0x0b67, 0x0b7c, 0x0b8e, 0x0ba9, - 0x0bc9, 0x0bf7, 0x0c0a, 0x0c1e, 0x0c2f, 0x0c60, 0x0c86, 0x0c98, - 0x0cb6, 0x0cd1, 0x0cf1, 0x0d15, 0x0d43, 0x0d68, 0x0d79, 0x0d9f, - // Entry 640 - 67F - 0x0dce, 0x0df6, 0x0e33, 0x0e58, 0x0e7f, 0x0ea6, 0x0ecd, 0x0ee6, - 0x0f0c, 0x0f2c, 0x0f3d, 0x0f64, 0x0f77, 0x0f97, 0x0fbe, 0x0fd1, - 0x0fe8, 0x1003, 0x1023, 0x1033, 0x105a, 0x106b, 0x1086, 0x1099, - 0x10be, 0x10d0, 0x10f7, 0x1115, 0x1135, 0x115c, 0x1183, 0x11a4, - 0x11bd, 0x11d0, 0x11ec, 0x1214, 0x1231, 0x1253, 0x1273, 0x1289, - 0x12b0, 0x12ce, 0x12e9, 0x1301, 0x1311, 0x1320, 0x1330, 0x1348, - 0x136d, 0x137d, 0x1394, 0x13af, 0x13cd, 0x13ed, 0x13fc, 0x1423, - 0x143b, 0x1464, 0x1474, 0x1484, 0x14bd, 0x14f6, 0x1519, 0x1533, - // Entry 680 - 6BF - 0x1549, 0x1565, 0x157b, 0x158d, 0x15a8, 0x15c6, 0x15f0, 0x1616, - 0x163a, 0x164f, 0x1666, 0x1676, 0x1686, 0x169b, 0x16b1, 0x16c7, - 0x16e3, 0x1700, 0x172b, 0x1740, 0x1761, 0x1782, 0x17a2, 0x17c1, - 0x17e0, 0x1801, 0x1821, 0x1841, 0x1860, 0x1881, 0x18a2, 0x18c2, - 0x18e4, 0x1904, 0x1926, 0x1942, 0x1965, 0x1986, 0x199d, 0x19b9, - 0x19d3, 0x19eb, 0x1a01, 0x1a18, 0x1a30, 0x1a49, 0x1a6d, 0x1a90, - 0x1aa2, 0x1ab8, 0x1ad1, 0x1aeb, 0x02eb, 0x0303, 0x0316, 0x0335, - 0x0347, 0x035a, 0x0376, 0x038a, 0x03ab, 0x03bb, 0x03cc, 0x03de, - // Entry 6C0 - 6FF - 0x03f0, 0x0402, 0x041d, 0x042f, 0x0444, 0x0456, 0x046a, 0x047b, - 0x048c, 0x04a1, 0x04bc, 0x04cb, 0x04db, 0x04f4, 0x0507, 0x0519, - 0x052b, 0x053d, 0x054e, 0x0569, 0x0585, 0x05a2, 0x05b5, 0x05c8, - 0x05dc, 0x05ef, 0x0602, 0x0616, 0x0628, 0x063a, 0x0658, 0x0673, - 0x0685, 0x0697, 0x06b0, 0x06c2, 0x06d4, 0x06e0, 0x06f3, 0x0703, - 0x0712, 0x0730, 0x074e, 0x0765, 0x077c, 0x0795, 0x07ae, 0x07ba, - 0x07c8, 0x03c8, 0x03e3, 0x03fe, 0x0416, 0x044a, 0x047f, 0x04b7, - 0x0502, 0x0535, 0x0562, 0x0580, 0x05a5, 0x05dd, 0x061b, 0x0648, - // Entry 700 - 73F - 0x0665, 0x068c, 0x06b1, 0x06eb, 0x071b, 0x0740, 0x0778, 0x079a, - 0x07c3, 0x07fd, 0x081e, 0x083f, 0x0865, 0x0886, 0x08a5, 0x08bf, - 0x08ef, 0x0911, 0x0942, 0x0976, 0x09b1, 0x09ed, 0x0a28, 0x0a5c, - 0x0a99, 0x0ad8, 0x0b1a, 0x0b5e, 0x0ba1, 0x0bdd, 0x0c1b, 0x0c5e, - 0x0ca3, 0x0ce0, 0x0d1e, 0x0d40, 0x0d65, 0x0d76, 0x0d8d, 0x0da0, - 0x0db1, 0x0dc2, 0x0dd9, 0x0dec, 0x0dff, 0x0e12, 0x0e25, 0x0e38, - 0x0e4c, 0x0e5e, 0x0e71, 0x0e84, 0x0e9b, 0x0eae, 0x0ec4, 0x0eda, - 0x0ef0, 0x0f01, 0x0f17, 0x0f2d, 0x0f44, 0x0f56, 0x0f68, 0x0f7a, - // Entry 740 - 77F - 0x0f8e, 0x0f9f, 0x0fb3, 0x0fc7, 0x0fdb, 0x0feb, 0x0ffb, 0x100d, - 0x1021, 0x1034, 0x1047, 0x1055, 0x1065, 0x1073, 0x1083, 0x1091, - 0x10a1, 0x10af, 0x10bf, 0x10cd, 0x10dd, 0x10e9, 0x10fa, 0x00fa, - 0x0108, 0x0115, 0x0122, 0x0131, 0x013f, 0x014d, 0x015a, 0x0169, - 0x0178, 0x0186, 0x0192, 0x019f, 0x01ab, 0x01b7, 0x01c3, 0x01d0, - 0x01dc, 0x01f1, 0x01fd, 0x020a, 0x0217, 0x0224, 0x0231, 0x023f, - 0x024c, 0x0259, 0x0267, 0x0274, 0x0282, 0x028f, 0x029c, 0x02a9, - 0x02bd, 0x02ca, 0x02d8, 0x02e5, 0x02f2, 0x02ff, 0x030c, 0x0321, - // Entry 780 - 7BF - 0x0333, 0x0346, 0x0358, 0x0375, 0x0391, 0x03b0, 0x03d2, 0x03ee, - 0x0409, 0x0427, 0x0446, 0x0464, 0x047c, 0x0493, 0x04a7, 0x04bc, - 0x04c5, 0x04d9, 0x04e7, 0x00e7, 0x00fc, 0x0110, 0x0126, 0x013c, - 0x014f, 0x0163, 0x0177, 0x018a, 0x019e, 0x01b2, 0x01c7, 0x01dd, - 0x01f1, 0x0205, 0x021d, 0x0230, 0x0243, 0x025b, 0x026f, 0x0284, - 0x0299, 0x02ae, 0x02bf, 0x02d5, 0x02ed, 0x0302, 0x032a, 0x0347, - 0x0362, 0x0378, 0x0398, 0x03b4, 0x03cb, 0x03ea, 0x0405, 0x041b, - 0x043c, 0x0458, 0x0473, 0x0489, 0x04a4, 0x04bf, 0x04d5, 0x04eb, - // Entry 7C0 - 7FF - 0x0505, 0x051b, 0x011b, 0x0138, 0x0154, 0x016f, 0x0188, 0x01a4, - 0x01c4, 0x01df, 0x0202, 0x021d, 0x0238, 0x0252, 0x026c, 0x0289, - 0x02ab, 0x02c7, 0x02c7, 0x02db, 0x02ec, 0x02fd, 0x030e, 0x031f, - 0x0335, 0x0346, 0x0357, 0x0369, 0x037c, 0x038d, 0x039e, 0x03af, - 0x03c0, 0x03d1, 0x03e2, 0x03f3, 0x0405, 0x0416, 0x0427, 0x0439, - 0x044a, 0x0461, 0x0473, 0x0485, 0x049d, 0x04b6, 0x04cd, 0x00cd, - 0x00e0, 0x00e0, 0x0104, 0x0126, 0x014c, 0x0171, 0x01a6, 0x01c6, - 0x01e7, 0x020f, 0x0244, 0x0277, 0x0292, 0x02b3, 0x02cd, 0x02e3, - // Entry 800 - 83F - 0x030a, 0x0331, 0x0357, 0x0371, 0x0399, 0x03c0, 0x03e0, 0x03e0, - 0x0407, 0x042e, 0x0454, 0x047b, 0x04b5, 0x04ce, 0x04e7, 0x0501, - 0x0101, 0x011e, 0x0133, 0x0148, 0x015d, 0x017e, 0x019e, 0x01c1, - 0x01e0, 0x01fe, 0x021a, 0x0234, 0x0250, 0x0271, 0x028d, 0x02a8, - 0x02c1, 0x02d3, 0x02e5, 0x02f7, 0x030c, 0x0321, 0x0336, 0x034f, - 0x0369, 0x037f, 0x0398, 0x03b2, 0x03c8, 0x03dc, 0x03f0, 0x0404, - 0x0419, 0x042f, 0x044a, 0x0465, 0x0480, 0x049c, 0x04b7, 0x04d3, - 0x04f6, 0x0522, 0x0547, 0x055c, 0x057c, 0x05a0, 0x05bb, 0x05d3, - // Entry 840 - 87F - 0x05ea, 0x0603, 0x0616, 0x062a, 0x063d, 0x0651, 0x0664, 0x0678, - 0x0693, 0x06ae, 0x06c8, 0x06e1, 0x06f4, 0x0708, 0x0722, 0x073b, - 0x074e, 0x0762, 0x0776, 0x078b, 0x079f, 0x07b4, 0x07c9, 0x07dd, - 0x07f2, 0x0806, 0x081b, 0x0830, 0x0845, 0x085b, 0x0870, 0x0886, - 0x089b, 0x08af, 0x08c4, 0x08d8, 0x08ed, 0x0901, 0x0917, 0x092b, - 0x0940, 0x0954, 0x0969, 0x097d, 0x0991, 0x09a5, 0x09ba, 0x09ce, - 0x09e3, 0x09f9, 0x0a0d, 0x0a22, 0x0a37, 0x0a4b, 0x0a5f, 0x0a77, - 0x0a90, 0x0aa5, 0x0abd, 0x0ad5, 0x0aec, 0x0b04, 0x0b1b, 0x0b33, - // Entry 880 - 8BF - 0x0b52, 0x0b72, 0x0b90, 0x0bad, 0x0bc4, 0x0bdc, 0x0bfa, 0x0c17, - 0x0c2e, 0x0c46, 0x0c5c, 0x0c81, 0x0c99, 0x0ca6, 0x0cc3, 0x0ce2, - 0x0cf9, 0x0d10, 0x0d33, 0x0d4b, 0x0d64, 0x0d78, 0x0d8e, 0x0da4, - 0x0db8, 0x0dcf, 0x0de4, 0x0df8, 0x0e0d, 0x0e29, 0x0e45, 0x0e64, - 0x0e84, 0x0e94, 0x0eab, 0x0ec0, 0x0ed4, 0x0ee8, 0x0efe, 0x0f13, - 0x0f28, 0x0f3c, 0x0f52, 0x0f68, 0x0f7d, 0x0f99, 0x0fb9, 0x0fd3, - 0x0fe7, 0x0ffc, 0x1010, 0x1024, 0x1039, 0x1056, 0x106b, 0x1085, - 0x109a, 0x10af, 0x10cd, 0x10e3, 0x10f8, 0x1104, 0x111c, 0x1131, - // Entry 8C0 - 8FF - 0x1145, 0x0145, 0x0155, 0x0166, 0x0176, 0x0187, 0x0197, 0x01a8, - 0x01c0, 0x01d8, 0x01d8, 0x01e8, 0x01f9, 0x01f9, 0x0209, 0x021a, - 0x022b, 0x023d, 0x024e, 0x0260, 0x0272, 0x0283, 0x0295, 0x02a6, - 0x02b8, 0x02ca, 0x02dc, 0x02ef, 0x0301, 0x0314, 0x0326, 0x0337, - 0x0349, 0x035a, 0x036c, 0x037d, 0x037d, 0x038e, 0x03a0, 0x03b1, - 0x03c3, 0x03d4, 0x03e5, 0x03f6, 0x03f6, 0x0407, 0x0007, 0x0019, - 0x002b, 0x003c, 0x004d, 0x004d, 0x005f, 0x0074, 0x0089, 0x009d, - 0x00b2, 0x00c6, 0x00db, 0x00f7, 0x0114, 0x0114, 0x0128, 0x013d, - // Entry 900 - 93F - 0x013d, 0x0151, 0x0166, 0x0179, 0x0191, 0x0191, 0x01a7, 0x01a7, - 0x01b9, 0x01cb, 0x01cb, 0x01dd, 0x01f6, 0x020f, 0x022b, 0x0248, - 0x0248, 0x025a, 0x026b, 0x027c, 0x028f, 0x02a1, 0x02b3, 0x02c4, - 0x02d7, 0x02ea, 0x02fc, 0x0322, 0x0347, 0x0359, 0x036b, 0x0389, - 0x03a7, 0x03c7, 0x03e6, 0x041e, 0x0442, 0x0450, 0x0462, 0x0062, - 0x007a, 0x008d, 0x00a2, 0x00a2, 0x00b3, 0x00c5, 0x00d6, 0x00e8, - 0x00f9, 0x010b, 0x010b, 0x011d, 0x012f, 0x012f, 0x0141, 0x0153, - 0x0165, 0x0178, 0x018a, 0x019d, 0x01b0, 0x01c2, 0x01d5, 0x01e7, - // Entry 940 - 97F - 0x01fa, 0x020d, 0x0220, 0x0234, 0x0247, 0x025b, 0x026e, 0x0280, - 0x0293, 0x02a5, 0x02b8, 0x02ca, 0x02ca, 0x02dc, 0x02ef, 0x0301, - 0x0314, 0x0326, 0x0338, 0x034a, 0x034a, 0x035c, 0x036f, 0x036f, - 0x0381, 0x0394, 0x0394, 0x03a6, 0x03b8, 0x03b8, 0x03cb, 0x03cb, - 0x03e1, 0x03f6, 0x040c, 0x0421, 0x0437, 0x0037, 0x004d, 0x0063, - 0x0063, 0x0079, 0x008f, 0x00a3, 0x00a3, 0x00b6, 0x00b6, 0x00ca, - 0x00de, 0x00f0, 0x0103, 0x0103, 0x0115, 0x0115, 0x0128, 0x013a, - 0x014c, 0x0160, 0x0173, 0x0186, 0x0198, 0x01ac, 0x01c0, 0x01d3, - // Entry 980 - 9BF - 0x01e1, 0x01ef, 0x01fb, 0x0207, 0x0218, 0x022c, 0x022c, 0x0245, - 0x025b, 0x0270, 0x0270, 0x0281, 0x0293, 0x02a4, 0x02b6, 0x02c7, - 0x02d9, 0x02f2, 0x030b, 0x0322, 0x0322, 0x0333, 0x0345, 0x035c, - 0x035c, 0x036d, 0x037f, 0x0391, 0x03a4, 0x03b6, 0x03c9, 0x03dc, - 0x03ee, 0x0401, 0x0413, 0x0426, 0x0439, 0x044c, 0x0460, 0x0473, - 0x0487, 0x049a, 0x04ac, 0x04bf, 0x04d1, 0x04e4, 0x04f6, 0x00f6, - 0x0108, 0x011b, 0x012d, 0x0140, 0x0152, 0x0164, 0x0176, 0x0176, - 0x0188, 0x019b, 0x019b, 0x01ad, 0x01c0, 0x01d3, 0x01e5, 0x01f7, - // Entry 9C0 - 9FF - 0x01f7, 0x020a, 0x0220, 0x0236, 0x024b, 0x0261, 0x0276, 0x028c, - 0x02a9, 0x02c7, 0x02e3, 0x02e3, 0x02f8, 0x030e, 0x032a, 0x032a, - 0x033f, 0x0355, 0x0369, 0x0369, 0x0374, 0x0374, 0x038e, 0x03a8, - 0x03c5, 0x03e3, 0x03e3, 0x03f6, 0x0408, 0x041a, 0x042e, 0x0441, - 0x0454, 0x0466, 0x047a, 0x048e, 0x04a1, 0x04bb, 0x04ce, 0x00ce, - 0x00e1, 0x00e1, 0x00f7, 0x010a, 0x011c, 0x011c, 0x012a, 0x0139, - 0x0147, 0x0156, 0x0164, 0x0173, 0x0189, 0x019f, 0x019f, 0x01ad, - 0x01bc, 0x01bc, 0x01ca, 0x01d9, 0x01e8, 0x01f8, 0x0207, 0x0217, - // Entry A00 - A3F - 0x0227, 0x0236, 0x0246, 0x0255, 0x0265, 0x0275, 0x0285, 0x0296, - 0x02a6, 0x02b7, 0x02c7, 0x02d6, 0x02e6, 0x02f5, 0x0305, 0x0314, - 0x0314, 0x0323, 0x0333, 0x0342, 0x0352, 0x0361, 0x0370, 0x037f, - 0x037f, 0x038e, 0x039e, 0x039e, 0x03ad, 0x03bd, 0x03cd, 0x03dc, - 0x03eb, 0x03eb, 0x03fb, 0x040e, 0x0421, 0x0433, 0x0446, 0x0458, - 0x046b, 0x0485, 0x04a0, 0x00a0, 0x00b2, 0x00c5, 0x00c5, 0x00d7, - 0x00ea, 0x00fb, 0x00fb, 0x010f, 0x0123, 0x0123, 0x0133, 0x0143, - 0x0143, 0x0153, 0x016a, 0x0181, 0x019b, 0x01b6, 0x01b6, 0x01c6, - // Entry A40 - A7F - 0x01d5, 0x01e4, 0x01f5, 0x0205, 0x0215, 0x0224, 0x0235, 0x0246, - 0x0256, 0x0262, 0x0271, 0x028b, 0x02a2, 0x02bf, 0x02db, 0x02f4, - 0x0313, 0x0313, 0x0326, 0x0338, 0x0338, 0x0346, 0x0355, 0x0363, - 0x0372, 0x0380, 0x038f, 0x038f, 0x039d, 0x03ac, 0x03bb, 0x03bb, - 0x03c9, 0x03d8, 0x03e7, 0x03f6, 0x03f6, 0x0406, 0x0415, 0x0015, - 0x0024, 0x0024, 0x0034, 0x0044, 0x0044, 0x0054, 0x0063, 0x0063, - 0x0072, 0x0083, 0x0092, 0x0092, 0x00a1, 0x00b0, 0x00bf, 0x00cf, - 0x00de, 0x00ee, 0x00ff, 0x010e, 0x011e, 0x012e, 0x013d, 0x014c, - // Entry A80 - ABF - 0x014c, 0x015f, 0x0171, 0x0184, 0x0196, 0x01a9, 0x01a9, 0x01bb, - 0x01ce, 0x01e1, 0x01e1, 0x01f3, 0x0206, 0x0219, 0x022a, 0x022a, - 0x0232, 0x0232, 0x0246, 0x0246, 0x0256, 0x0265, 0x0274, 0x0285, - 0x0295, 0x02a5, 0x02b4, 0x02c5, 0x02d6, 0x02e6, 0x02f6, 0x030e, - 0x0327, 0x0335, 0x0345, 0x0354, 0x0364, 0x0375, 0x0388, 0x0398, - 0x03a9, 0x03a9, 0x03d0, 0x03e7, 0x03fb, 0x040e, 0x000e, 0x001d, - 0x002d, 0x003c, 0x004c, 0x005b, 0x006b, 0x0082, 0x0099, 0x0099, - 0x00a8, 0x00b8, 0x00c8, 0x00c8, 0x00d7, 0x00e7, 0x00f7, 0x0107, - // Entry AC0 - AFF - 0x0118, 0x0128, 0x0139, 0x014a, 0x015a, 0x016b, 0x017b, 0x018c, - 0x019d, 0x01ae, 0x01c0, 0x01d1, 0x01e3, 0x01f4, 0x0204, 0x0215, - 0x0225, 0x0236, 0x0246, 0x0246, 0x0256, 0x0267, 0x0277, 0x0288, - 0x0298, 0x02a8, 0x02b8, 0x02c9, 0x02d9, 0x02ea, 0x02fc, 0x030c, - 0x031d, 0x032e, 0x033e, 0x034e, 0x034e, 0x0362, 0x0376, 0x0389, - 0x039d, 0x03b0, 0x03c4, 0x03df, 0x03fb, 0x03fb, 0x040e, 0x0422, - 0x0436, 0x0036, 0x0049, 0x005d, 0x0071, 0x0083, 0x0083, 0x0095, - 0x00aa, 0x00aa, 0x00bb, 0x00cc, 0x00de, 0x00de, 0x00f6, 0x010e, - // Entry B00 - B3F - 0x0129, 0x0145, 0x0145, 0x0156, 0x0166, 0x0176, 0x0188, 0x0199, - 0x01aa, 0x01ba, 0x01cc, 0x01de, 0x01ef, 0x01ef, 0x0220, 0x0250, - 0x0280, 0x02b2, 0x02e3, 0x0314, 0x0347, 0x0358, 0x0378, 0x0390, - 0x03a5, 0x03b9, 0x03b9, 0x03c9, 0x03da, 0x03ea, 0x03fb, 0x040b, - 0x041c, 0x0434, 0x044c, 0x004c, 0x005c, 0x006d, 0x007e, 0x007e, - 0x008e, 0x009f, 0x00b0, 0x00c1, 0x00d3, 0x00e4, 0x00f6, 0x0108, - 0x0119, 0x012b, 0x013c, 0x014e, 0x0160, 0x0172, 0x0185, 0x0197, - 0x01aa, 0x01bc, 0x01cd, 0x01df, 0x01f0, 0x0202, 0x0213, 0x0213, - // Entry B40 - B7F - 0x0224, 0x0236, 0x0247, 0x0259, 0x026a, 0x027b, 0x028c, 0x029e, - 0x02af, 0x02c1, 0x02c1, 0x02d2, 0x02e4, 0x02f6, 0x0307, 0x0318, - 0x0318, 0x032a, 0x033f, 0x0354, 0x0368, 0x037d, 0x0391, 0x03a6, - 0x03c2, 0x03df, 0x03df, 0x03f3, 0x0408, 0x041d, 0x001d, 0x0031, - 0x0046, 0x005b, 0x006e, 0x006e, 0x0081, 0x0097, 0x0097, 0x00a8, - 0x00a8, 0x00c1, 0x00da, 0x00f6, 0x0113, 0x0113, 0x0125, 0x0136, - 0x0147, 0x015a, 0x016c, 0x017e, 0x018f, 0x01a2, 0x01b5, 0x01c7, - 0x01c7, 0x01df, 0x01f7, 0x01f7, 0x0211, 0x0228, 0x023e, 0x023e, - // Entry B80 - BBF - 0x0250, 0x0263, 0x0275, 0x0288, 0x029a, 0x02ad, 0x02c7, 0x02e1, - 0x02e1, 0x02f3, 0x0306, 0x0319, 0x0319, 0x032b, 0x033e, 0x0351, - 0x0364, 0x0378, 0x038b, 0x039f, 0x03b3, 0x03c6, 0x03da, 0x03ed, - 0x0401, 0x0415, 0x0429, 0x043e, 0x0452, 0x0467, 0x047b, 0x048e, - 0x04a2, 0x04b5, 0x04c9, 0x04dc, 0x04f1, 0x0504, 0x0518, 0x052b, - 0x053f, 0x0552, 0x0565, 0x0578, 0x058c, 0x059f, 0x05b3, 0x05c8, - 0x05db, 0x05ef, 0x0603, 0x0616, 0x0629, 0x063e, 0x023e, 0x0255, - 0x026c, 0x0282, 0x0299, 0x02af, 0x02c6, 0x02e4, 0x0303, 0x0303, - // Entry BC0 - BFF - 0x0319, 0x0330, 0x0347, 0x0347, 0x035d, 0x0374, 0x038b, 0x03a0, - 0x03b9, 0x03cc, 0x03cc, 0x03e5, 0x03fe, 0x0419, 0x0431, 0x0460, - 0x047f, 0x04a2, 0x04c2, 0x04de, 0x0501, 0x051d, 0x0538, 0x0553, - 0x056e, 0x058c, 0x05ab, 0x01ab, 0x01bf, 0x01d2, 0x01e5, 0x01fa, - 0x020e, 0x0222, 0x0235, 0x024a, 0x025f, 0x0273, 0x0287, 0x02a3, - 0x02c0, 0x02de, 0x02f9, 0x031a, 0x033a, 0x0357, 0x037a, 0x038d, - 0x03a7, 0x03c0, 0x03da, 0x03f3, 0x040d, 0x0426, 0x0026, 0x003d, - 0x0053, 0x0053, 0x0068, 0x007e, 0x0094, 0x00ab, 0x00c0, 0x00d6, - // Entry C00 - C3F - 0x00eb, 0x0101, 0x0118, 0x0130, 0x0147, 0x015f, 0x0174, 0x018a, - 0x01a0, 0x01b5, 0x01cb, 0x01e1, 0x01e1, 0x0202, 0x0224, 0x0245, - 0x0267, 0x0288, 0x02a6, 0x02c7, 0x02e9, 0x030a, 0x032c, 0x034d, - 0x0378, 0x0396, 0x03b8, 0x03db, 0x03fd, 0x0420, 0x0440, 0x045f, - 0x0480, 0x04a2, 0x04c3, 0x04e5, 0x0503, 0x0103, 0x0121, 0x0142, - 0x0164, 0x0185, 0x01a7, 0x01bd, 0x01d8, 0x01ee, 0x0204, 0x0204, - 0x0222, 0x0222, 0x0238, 0x0256, 0x0276, 0x0294, 0x02aa, 0x02ca, - 0x02e0, 0x02e0, 0x02f6, 0x02f6, 0x0313, 0x0336, 0x0358, 0x0379, - // Entry C40 - C7F - 0x0399, 0x03bb, 0x03bb, 0x03dc, 0x03dc, 0x03fb, 0x0415, 0x0434, - 0x0451, 0x047a, 0x04a8, 0x04d2, 0x04f0, 0x00f0, 0x0107, 0x011d, - 0x0133, 0x014b, 0x0162, 0x0179, 0x018f, 0x01a7, 0x01bf, 0x01d6, - 0x01d6, 0x01fa, 0x021d, 0x023b, 0x023b, 0x0250, 0x0267, 0x027f, - 0x0297, 0x02ae, 0x02c8, 0x02de, 0x02f5, 0x030d, 0x0325, 0x0339, - 0x0350, 0x0366, 0x037d, 0x0394, 0x03ab, 0x03c8, 0x03e2, 0x03f7, - 0x040c, 0x0421, 0x0439, 0x0452, 0x046a, 0x047e, 0x0496, 0x04ab, - 0x04c3, 0x04d7, 0x04ee, 0x0503, 0x051d, 0x0531, 0x0546, 0x055b, - // Entry C80 - CBF - 0x056c, 0x0582, 0x0593, 0x05a9, 0x05bf, 0x05d5, 0x05ea, 0x05ff, - 0x0616, 0x062a, 0x0642, 0x065a, 0x066f, 0x068a, 0x06a0, 0x06b6, - 0x06cb, 0x06e1, 0x06f7, 0x070e, 0x0723, 0x0739, 0x074f, 0x034f, - 0x0368, 0x037d, 0x0393, 0x03a8, 0x03c6, 0x03e5, 0x03ff, 0x0416, - 0x042e, 0x0443, 0x0459, 0x046f, 0x048a, 0x04a4, 0x04bb, 0x04d2, - 0x04e8, 0x04f7, 0x0505, 0x0513, 0x0523, 0x0532, 0x0541, 0x054f, - 0x055f, 0x056f, 0x057e, 0x0597, 0x05ac, 0x01ac, 0x01b9, 0x01cc, - 0x01cc, 0x01de, 0x01de, 0x01ec, 0x01f9, 0x01f9, 0x020a, 0x020a, - // Entry CC0 - CFF - 0x0218, 0x0218, 0x0225, 0x0232, 0x0245, 0x0257, 0x0257, 0x0264, - 0x0271, 0x027e, 0x0291, 0x02a2, 0x02b4, 0x02c6, 0x02c6, 0x02d3, - 0x02e0, 0x02f2, 0x02f2, 0x0304, 0x0304, 0x0311, 0x0311, 0x0323, - 0x0335, 0x0335, 0x0341, 0x0352, 0x035e, 0x036e, 0x0384, 0x0395, - 0x03a6, 0x03b6, 0x03c7, 0x03d7, 0x03e8, 0x03f8, 0x0409, 0x0009, - 0x001f, 0x0034, 0x004a, 0x004a, 0x005a, 0x006b, 0x007b, 0x008c, - 0x009d, 0x009d, 0x00a6, 0x00a6, 0x00b5, 0x00c5, 0x00d4, 0x00e7, - 0x00fc, 0x0109, 0x0109, 0x0117, 0x0124, 0x0131, 0x0140, 0x014e, - // Entry D00 - D3F - 0x015c, 0x0169, 0x0178, 0x0187, 0x0195, 0x0195, 0x019e, 0x01a7, - 0x01b9, 0x01cc, 0x01cc, 0x01df, 0x0204, 0x022e, 0x0259, 0x027d, - 0x02a1, 0x02c8, 0x02ea, 0x0301, 0x031b, 0x0339, 0x0359, 0x037b, - 0x038c, 0x03a2, 0x03b9, 0x03d5, 0x03f6, 0x0411, 0x043b, 0x0452, - 0x0472, 0x0492, 0x04c1, 0x04e4, 0x050a, 0x0525, 0x0541, 0x055c, - 0x0576, 0x0591, 0x05b0, 0x05c2, 0x05d3, 0x05e4, 0x05f7, 0x0609, - 0x061b, 0x062c, 0x063f, 0x0652, 0x0664, 0x067a, 0x0690, 0x06a8, - 0x06bf, 0x06d6, 0x06ec, 0x0704, 0x071c, 0x0733, 0x074a, 0x0762, - // Entry D40 - D7F - 0x0781, 0x07ac, 0x07ce, 0x07e2, 0x07f8, 0x0813, 0x082e, 0x0849, - 0x0864, 0x087a, 0x0890, 0x08a1, 0x08b3, 0x08c4, 0x08d6, 0x08e8, - 0x08f9, 0x090b, 0x091c, 0x011c, 0x012e, 0x0140, 0x0153, 0x0165, - 0x0178, 0x018a, 0x019b, 0x01ad, 0x01be, 0x01d0, 0x01e1, 0x01f2, - 0x0204, 0x0215, 0x0227, 0x0238, 0x024a, 0x025d, 0x026f, 0x0282, - 0x0293, 0x02a5, 0x02b6, 0x02c7, 0x02d8, 0x02e9, 0x02fa, 0x030c, - 0x031e, 0x032f, 0x0340, 0x0350, 0x0363, 0x037f, 0x0391, 0x03a3, - 0x03a3, 0x03b8, 0x03cc, 0x03e1, 0x03f5, 0x040a, 0x0426, 0x0443, - // Entry D80 - DBF - 0x045f, 0x047c, 0x0490, 0x04a5, 0x04b9, 0x04ce, 0x04e9, 0x04ff, - 0x051c, 0x053a, 0x0555, 0x056a, 0x057e, 0x0591, 0x05a7, 0x05be, - 0x05d6, 0x05eb, 0x0607, 0x0623, 0x0641, 0x0663, 0x0682, 0x06aa, - 0x06c5, 0x06e1, 0x06fc, 0x0718, 0x0734, 0x074f, 0x076b, 0x0786, - 0x0386, 0x03a2, 0x03be, 0x03db, 0x03f7, 0x0414, 0x0430, 0x044b, - 0x0467, 0x0482, 0x049e, 0x04b9, 0x04d4, 0x04f0, 0x050b, 0x0527, - 0x0542, 0x055e, 0x057b, 0x0597, 0x05b4, 0x05cf, 0x05eb, 0x0606, - 0x0621, 0x063c, 0x0657, 0x0672, 0x068e, 0x06aa, 0x06c5, 0x06e0, - // Entry DC0 - DFF - 0x06fa, 0x0717, 0x073d, 0x0763, 0x0789, 0x0389, 0x039a, 0x03b8, - 0x03dc, 0x0400, 0x0423, 0x0447, 0x045d, 0x0473, 0x048c, 0x04ac, - 0x04c2, 0x04d7, 0x04f8, 0x0519, 0x053a, 0x013a, 0x0159, 0x0173, - 0x0197, 0x01ba, 0x01d1, 0x0201, 0x0231, 0x0249, 0x0260, 0x0282, - 0x02a3, 0x02c3, 0x02e4, 0x02e4, 0x02f5, 0x0307, 0x0318, 0x032a, - 0x033c, 0x034d, 0x035f, 0x0370, 0x0382, 0x0394, 0x03a7, 0x03b9, - 0x03cc, 0x03de, 0x03f1, 0x0403, 0x0414, 0x0426, 0x0437, 0x0449, - 0x045a, 0x046b, 0x047d, 0x048e, 0x04a0, 0x04b1, 0x04c2, 0x04d3, - // Entry E00 - E3F - 0x04e4, 0x04f5, 0x0506, 0x0517, 0x0529, 0x0539, 0x054e, 0x055e, - 0x056f, 0x057f, 0x0590, 0x05a0, 0x05b4, 0x05c4, 0x05d5, 0x05ef, - 0x0604, 0x0618, 0x062d, 0x0641, 0x0656, 0x066a, 0x067f, 0x0698, - 0x06b0, 0x06ca, 0x06df, 0x06f5, 0x0709, 0x071c, 0x072d, 0x074d, - 0x076d, 0x078d, 0x07ad, 0x07c4, 0x07d6, 0x07e7, 0x07f8, 0x080b, - 0x081d, 0x082f, 0x0840, 0x0853, 0x0866, 0x0878, 0x0893, 0x08a7, - 0x08be, 0x08d6, 0x08f3, 0x090a, 0x091c, 0x092e, 0x0946, 0x095f, - 0x0977, 0x0990, 0x09ac, 0x09c9, 0x09e5, 0x0a02, 0x0a18, 0x0a2e, - // Entry E40 - E7F - 0x0a44, 0x0a5a, 0x0a7e, 0x0aa2, 0x0ac6, 0x0ae3, 0x0b03, 0x0b25, - 0x0b48, 0x0b6c, 0x0b90, 0x0bb7, 0x0bde, 0x0c03, 0x0c28, 0x0c4d, - 0x0c72, 0x0c97, 0x0cbb, 0x0cdf, 0x0d04, 0x0d23, 0x0d3e, 0x0d58, - 0x0d73, 0x0d89, 0x0da0, 0x0db6, 0x0dcc, 0x0de2, 0x0df9, 0x0e0f, - 0x0e25, 0x0e3c, 0x0e52, 0x0e68, 0x0e7f, 0x0e95, 0x0eba, 0x0ed4, - 0x0eed, 0x0f0c, 0x0f2b, 0x0f43, 0x0f5b, 0x0f73, 0x0f8b, 0x0fab, - 0x0fcb, 0x0ff2, 0x1011, 0x1032, 0x1049, 0x105f, 0x1075, 0x108d, - 0x10a4, 0x10bb, 0x10d1, 0x10e9, 0x1101, 0x1118, 0x1132, 0x114c, - // Entry E80 - EBF - 0x1166, 0x1181, 0x1198, 0x11b7, 0x11d1, 0x11ec, 0x1207, 0x1222, - 0x123c, 0x1257, 0x1272, 0x128d, 0x12a7, 0x12c2, 0x12dd, 0x12f8, - 0x1313, 0x132d, 0x1348, 0x1364, 0x137f, 0x139a, 0x13b5, 0x13cf, - 0x13eb, 0x1407, 0x1423, 0x143e, 0x145a, 0x1476, 0x1491, 0x14ac, - 0x14c7, 0x14e3, 0x14fe, 0x151a, 0x1535, 0x154f, 0x156a, 0x1584, - 0x159f, 0x15ba, 0x01ba, 0x01d4, 0x01d4, 0x01ef, 0x01ef, 0x0201, - 0x0214, 0x0227, 0x023a, 0x024c, 0x025f, 0x0272, 0x0285, 0x0297, - 0x02aa, 0x02bd, 0x02d0, 0x02e3, 0x02f5, 0x0308, 0x031c, 0x032f, - // Entry EC0 - EFF - 0x0342, 0x0355, 0x0367, 0x037b, 0x038f, 0x03a3, 0x03b6, 0x03ca, - 0x03de, 0x03f1, 0x0404, 0x0417, 0x042b, 0x043e, 0x0452, 0x0465, - 0x0477, 0x048a, 0x049c, 0x04af, 0x04c2, 0x04d4, 0x04e6, 0x04fb, - 0x0515, 0x0528, 0x0544, 0x0560, 0x0573, 0x058c, 0x05a7, 0x05bd, - 0x05d8, 0x05ed, 0x0603, 0x061e, 0x0633, 0x0648, 0x065d, 0x0677, - 0x068b, 0x06a4, 0x06b9, 0x06ce, 0x06e8, 0x06ff, 0x0716, 0x072d, - 0x0744, 0x0759, 0x0775, 0x078f, 0x07ab, 0x07c6, 0x07e3, 0x07fe, - 0x0818, 0x0833, 0x0850, 0x086b, 0x0888, 0x08a4, 0x08bf, 0x08db, - // Entry F00 - F3F - 0x08f5, 0x0916, 0x0937, 0x0957, 0x0976, 0x0996, 0x09b1, 0x09ce, - 0x09eb, 0x0a08, 0x0a25, 0x0a47, 0x0a62, 0x0a7c, 0x0a97, 0x0ab1, - 0x0acb, 0x0ae5, 0x0b06, 0x0b24, 0x0b3e, 0x0b58, 0x0b74, 0x0b90, - 0x0bac, 0x0bc8, 0x0be2, 0x0bfe, 0x0c1f, 0x0c3e, 0x0c62, 0x0c79, - 0x0c95, 0x0cb1, 0x0ccc, 0x0ce7, 0x0d01, 0x0d1e, 0x0d38, 0x0d53, - 0x0d70, 0x0d8d, 0x0daa, 0x0dc2, 0x0ddd, 0x0dfa, 0x0e1c, 0x0e3c, - 0x0e61, 0x0e80, 0x0e9d, 0x0ebc, 0x0ede, 0x0efb, 0x0f1a, 0x0f34, - 0x0f4f, 0x0f6c, 0x0f86, 0x0fa1, 0x0fbc, 0x0fd8, 0x0fee, 0x1005, - // Entry F40 - F7F - 0x1017, 0x102a, 0x103d, 0x1051, 0x1064, 0x1076, 0x108a, 0x109d, - 0x10af, 0x10c2, 0x10d6, 0x10e9, 0x10fc, 0x110e, 0x1122, 0x1135, - 0x1148, 0x115b, 0x116e, 0x1181, 0x1193, 0x11a7, 0x11bb, 0x11d0, - 0x11e6, 0x11fb, 0x1210, 0x1226, 0x123c, 0x1252, 0x1267, 0x127b, - 0x1290, 0x12a4, 0x12b8, 0x12ce, 0x12e5, 0x12fc, 0x1311, 0x1326, - 0x133a, 0x134f, 0x1367, 0x137c, 0x1390, 0x13a5, 0x13bb, 0x13d0, - 0x13e7, 0x13fd, 0x1412, 0x1427, 0x143c, 0x1452, 0x1467, 0x147b, - 0x1490, 0x14a4, 0x14b8, 0x14cd, 0x14e5, 0x14fb, 0x1514, 0x152c, - // Entry F80 - FBF - 0x1544, 0x155f, 0x1574, 0x1589, 0x15a0, 0x15b5, 0x15cb, 0x15e2, - 0x15fe, 0x161a, 0x1630, 0x164c, 0x1668, 0x167f, 0x1695, 0x16b2, - 0x16ce, 0x16ea, 0x1705, 0x1723, 0x1741, 0x175d, 0x1773, 0x1789, - 0x17a4, 0x17b9, 0x17d3, 0x17e9, 0x17ff, 0x1817, 0x182f, 0x1847, - 0x185f, 0x1875, 0x1892, 0x18b5, 0x18d2, 0x18ef, 0x190a, 0x1928, - 0x1946, 0x1964, 0x1981, 0x19a3, 0x19bf, 0x19dc, 0x19ff, 0x1a1a, - 0x1a3d, 0x1a5e, 0x1a7f, 0x1aa1, 0x1ac5, 0x1ae5, 0x1b03, 0x1b21, - 0x1b43, 0x1b60, 0x1b7c, 0x1b98, 0x1bb3, 0x1bd3, 0x1bf1, 0x1c0f, - // Entry FC0 - FFF - 0x1c2b, 0x1c49, 0x1c65, 0x1c83, 0x1c9f, 0x1cbd, 0x1cd9, 0x1cf5, - 0x1d10, 0x1d2b, 0x1d43, 0x1d60, 0x1d82, 0x1d9d, 0x1dbb, 0x1dd4, - 0x1df2, 0x1e13, 0x1e31, 0x1e51, 0x1e6d, 0x1e89, 0x1ea5, 0x1ec1, - 0x1edd, 0x1efa, 0x1f17, 0x1f36, 0x1f55, 0x1f72, 0x1f8d, 0x1fa1, - 0x1fb5, 0x1fc9, 0x1fde, 0x1ff3, 0x2007, 0x201b, 0x2030, 0x2044, - 0x2058, 0x206c, 0x2081, 0x2096, 0x20aa, 0x20be, 0x20d3, 0x20e8, - 0x20fd, 0x2112, 0x2128, 0x213e, 0x2153, 0x2168, 0x217e, 0x2192, - 0x21a6, 0x21ba, 0x21cf, 0x21e4, 0x21f8, 0x220c, 0x2221, 0x2236, - // Entry 1000 - 103F - 0x224b, 0x2260, 0x2276, 0x228c, 0x22a1, 0x22b6, 0x22cc, 0x22e0, - 0x22f4, 0x2308, 0x231d, 0x2332, 0x2346, 0x235a, 0x236f, 0x2383, - 0x2397, 0x23ab, 0x23c0, 0x23d5, 0x23e9, 0x23fd, 0x2412, 0x2427, - 0x243c, 0x2451, 0x2467, 0x247d, 0x2492, 0x24a7, 0x24bd, 0x24d1, - 0x24e5, 0x24f9, 0x250e, 0x2523, 0x2537, 0x254b, 0x2560, 0x2575, - 0x0175, 0x018a, 0x01a0, 0x01b6, 0x01cb, 0x01cb, 0x01e0, 0x01f5, - 0x020a, 0x0220, 0x0236, 0x024b, 0x0260, 0x0260, 0x0276, 0x0276, - 0x028c, 0x02a3, 0x02ba, 0x02d0, 0x02d0, 0x02e4, 0x02f8, 0x030c, - // Entry 1040 - 107F - 0x0321, 0x0336, 0x034a, 0x035e, 0x0373, 0x0387, 0x039b, 0x03af, - 0x03c4, 0x03d9, 0x03ed, 0x0401, 0x0416, 0x042a, 0x043e, 0x0452, - 0x0467, 0x047c, 0x0490, 0x04a4, 0x04b9, 0x04cd, 0x04e1, 0x04f5, - 0x050a, 0x051f, 0x0533, 0x0547, 0x055c, 0x0570, 0x0584, 0x0598, - 0x05ad, 0x05c2, 0x05d6, 0x05ea, 0x05ff, 0x0614, 0x0214, 0x0229, - 0x023f, 0x0255, 0x026a, 0x026a, 0x027e, 0x0292, 0x02a6, 0x02bb, - 0x02d0, 0x02e4, 0x02f8, 0x030d, 0x0322, 0x0337, 0x034c, 0x0362, - 0x0378, 0x038d, 0x03a2, 0x03b8, 0x03d3, 0x03ee, 0x0409, 0x0425, - // Entry 1080 - 10BF - 0x0441, 0x045c, 0x0477, 0x0493, 0x04a7, 0x04bb, 0x04cf, 0x04e4, - 0x04f9, 0x050d, 0x0521, 0x0536, 0x054b, 0x014b, 0x0160, 0x0176, - 0x018c, 0x01a1, 0x01a1, 0x01b6, 0x01cb, 0x01e0, 0x01f6, 0x020c, - 0x0221, 0x0236, 0x0236, 0x024c, 0x024c, 0x0262, 0x0279, 0x0290, - 0x02a6, 0x02a6, 0x02ba, 0x02ce, 0x02e2, 0x02f7, 0x030c, 0x0320, - 0x0334, 0x0349, 0x0367, 0x0385, 0x03a3, 0x03c2, 0x03e1, 0x03ff, - 0x041d, 0x001d, 0x0031, 0x0045, 0x0059, 0x006e, 0x0083, 0x0097, - 0x00ab, 0x00c0, 0x00d5, 0x00ea, 0x00ff, 0x0115, 0x012b, 0x0140, - // Entry 10C0 - 10FF - 0x0155, 0x016b, 0x017f, 0x0193, 0x01a7, 0x01bc, 0x01d1, 0x01e5, - 0x01f9, 0x020e, 0x0222, 0x0236, 0x024a, 0x025f, 0x0274, 0x0288, - 0x029c, 0x02b1, 0x02c6, 0x02db, 0x02f0, 0x0306, 0x031c, 0x0331, - 0x0346, 0x035c, 0x0370, 0x0384, 0x0398, 0x03ad, 0x03c2, 0x03d6, - 0x03ea, 0x03ff, 0x0413, 0x0427, 0x043b, 0x0450, 0x0465, 0x0479, - 0x048d, 0x04a2, 0x04b7, 0x00b7, 0x00cc, 0x00e2, 0x00f8, 0x010d, - 0x010d, 0x0122, 0x0137, 0x014c, 0x0162, 0x0178, 0x018d, 0x01a2, - 0x01b9, 0x01ce, 0x01e3, 0x01f8, 0x020e, 0x0224, 0x0239, 0x024e, - // Entry 1100 - 113F - 0x0264, 0x0279, 0x028e, 0x02a3, 0x02b9, 0x02cf, 0x02e4, 0x02f9, - 0x030f, 0x0324, 0x0339, 0x034e, 0x0364, 0x037a, 0x038f, 0x03a4, - 0x03ba, 0x03cf, 0x03e4, 0x03f9, 0x040f, 0x0425, 0x043a, 0x044f, - 0x0465, 0x047a, 0x048f, 0x04a4, 0x04ba, 0x04d0, 0x04e5, 0x04fa, - 0x0510, 0x0524, 0x0538, 0x054c, 0x0561, 0x0576, 0x058a, 0x059e, - 0x05b3, 0x05c7, 0x05db, 0x05ef, 0x0604, 0x0619, 0x062d, 0x0641, - 0x0656, 0x066b, 0x0680, 0x0695, 0x0295, 0x02c8, 0x02ec, 0x030e, - 0x0323, 0x0335, 0x0347, 0x0355, 0x0367, 0x0375, 0x038b, 0x03a1, - // Entry 1140 - 117F - 0x03bd, 0x03cf, 0x03e1, 0x03f5, 0x0408, 0x041b, 0x042d, 0x0441, - 0x0455, 0x0468, 0x047b, 0x0491, 0x04a7, 0x04bc, 0x04d1, 0x04e6, - 0x04fd, 0x0513, 0x0529, 0x0540, 0x055c, 0x015c, 0x017b, 0x0190, - 0x01a6, 0x01bb, 0x01da, 0x01ef, 0x0205, 0x021a, 0x0239, 0x024e, - 0x0264, 0x0279, 0x0298, 0x02ad, 0x02c3, 0x02d8, 0x02f1, 0x030a, - 0x0324, 0x0344, 0x035d, 0x0376, 0x0390, 0x03a9, 0x03c8, 0x03e0, - 0x03e0, 0x03f1, 0x0402, 0x0413, 0x0424, 0x0435, 0x0446, 0x0458, - 0x046a, 0x047c, 0x048e, 0x04a0, 0x04b2, 0x04c4, 0x04d6, 0x04e8, - // Entry 1180 - 11BF - 0x04fa, 0x050c, 0x051e, 0x0530, 0x0542, 0x0554, 0x0566, 0x0578, - 0x058a, 0x059c, 0x05ae, 0x05c0, 0x05d2, 0x05e4, 0x05f6, 0x0608, - 0x061b, 0x062e, 0x0640, 0x0652, 0x0664, 0x0676, 0x0688, 0x069b, - 0x06ae, 0x06c1, 0x06d4, 0x06e7, 0x06fa, 0x070c, 0x071d, 0x072f, - 0x0741, 0x0753, 0x0765, 0x0777, 0x0789, 0x079b, 0x07ad, 0x07bf, - 0x07d1, 0x07e3, 0x07f5, 0x0807, 0x0819, 0x082c, 0x083f, 0x0852, - 0x0865, 0x0878, 0x088b, 0x089e, 0x08b1, 0x08c4, 0x08d7, 0x08ea, - 0x08fd, 0x0910, 0x0922, 0x0934, 0x0946, 0x0958, 0x096a, 0x097c, - // Entry 11C0 - 11FF - 0x098e, 0x09a0, 0x09b2, 0x09c4, 0x09d6, 0x09e8, 0x09fa, 0x01fa, - 0x0212, 0x022a, 0x0242, 0x025a, 0x0272, 0x028a, 0x028a, 0x02a3, - 0x02b7, 0x02cd, 0x02e1, 0x02f6, 0x030a, 0x031f, 0x033b, 0x0358, - 0x0374, 0x0388, 0x039d, 0x03b2, 0x03d1, 0x03e6, 0x0405, 0x041b, - 0x043b, 0x0450, 0x046f, 0x0485, 0x04a5, 0x04c3, 0x04d8, 0x04f7, - 0x050d, 0x052d, 0x054b, 0x0560, 0x057b, 0x059a, 0x05b8, 0x05d6, - 0x05ff, 0x0625, 0x064d, 0x066a, 0x068f, 0x06c5, 0x06e8, 0x0718, - 0x0735, 0x0757, 0x076c, 0x0781, 0x0796, 0x07ab, 0x07c0, 0x07d7, - // Entry 1200 - 123F - 0x07ec, 0x0802, 0x0817, 0x082d, 0x084a, 0x0868, 0x0885, 0x089a, - 0x08b0, 0x08c6, 0x08e6, 0x08fc, 0x091c, 0x0933, 0x0954, 0x096a, - 0x098a, 0x09a1, 0x09c2, 0x09d8, 0x09f8, 0x0a0f, 0x0a30, 0x0a4e, - 0x0a62, 0x0a80, 0x0a9c, 0x0ab1, 0x0ac8, 0x0add, 0x0af3, 0x0b08, - 0x0b1e, 0x0b3b, 0x0b59, 0x0b76, 0x0b8b, 0x0ba1, 0x0bb7, 0x0bd7, - 0x0bed, 0x0c0d, 0x0c24, 0x0c45, 0x0c5b, 0x0c7b, 0x0c92, 0x0cb3, - 0x0cc9, 0x0ce9, 0x0d00, 0x0d21, 0x0d40, 0x0d54, 0x0d6a, 0x0d80, - 0x0d96, 0x0dac, 0x0dc1, 0x0dd8, 0x0ded, 0x0e03, 0x0e18, 0x0e2e, - // Entry 1240 - 127F - 0x0e4b, 0x0e60, 0x0e76, 0x0e8c, 0x0eac, 0x0ec2, 0x0ee2, 0x0ef9, - 0x0f1a, 0x0f30, 0x0f50, 0x0f67, 0x0f88, 0x0f9e, 0x0fbe, 0x0fd5, - 0x0ff6, 0x1015, 0x1029, 0x103e, 0x1061, 0x1084, 0x10a7, 0x10ca, - 0x10df, 0x10f6, 0x110b, 0x1121, 0x1136, 0x114c, 0x1169, 0x117e, - 0x1194, 0x11aa, 0x11ca, 0x11e0, 0x1200, 0x1217, 0x1238, 0x124e, - 0x126e, 0x1285, 0x12a6, 0x12bc, 0x12dc, 0x12f3, 0x1314, 0x1333, - 0x1347, 0x1363, 0x1378, 0x138f, 0x13a4, 0x13ba, 0x13cf, 0x13e5, - 0x1402, 0x1417, 0x142d, 0x1443, 0x1463, 0x1479, 0x1499, 0x14b0, - // Entry 1280 - 12BF - 0x14d1, 0x14e7, 0x1507, 0x151e, 0x153f, 0x1555, 0x1575, 0x158c, - 0x15ad, 0x15cc, 0x15e0, 0x15fe, 0x1613, 0x1632, 0x164d, 0x1662, - 0x1679, 0x168e, 0x16a4, 0x16b9, 0x16cf, 0x16ec, 0x1701, 0x1717, - 0x172d, 0x174d, 0x1763, 0x1783, 0x179a, 0x17bb, 0x17da, 0x17ee, - 0x180b, 0x1820, 0x1835, 0x184c, 0x1861, 0x1877, 0x188c, 0x18a2, - 0x18bf, 0x18d4, 0x18ea, 0x1900, 0x1920, 0x1936, 0x1956, 0x196d, - 0x198e, 0x19a4, 0x19c4, 0x19db, 0x19fc, 0x1a12, 0x1a32, 0x1a49, - 0x1a6a, 0x1a7e, 0x1a9c, 0x1ab7, 0x1acc, 0x1ae3, 0x1af8, 0x1b0e, - // Entry 12C0 - 12FF - 0x1b23, 0x1b39, 0x1b56, 0x1b6b, 0x1b81, 0x1b97, 0x1bb7, 0x1bcd, - 0x1bed, 0x1c04, 0x1c25, 0x1c3b, 0x1c5b, 0x1c72, 0x1c93, 0x1ca9, - 0x1cc9, 0x1ce0, 0x1d01, 0x1d20, 0x1d34, 0x1d53, 0x1d68, 0x1d86, - 0x1da6, 0x1dc4, 0x1de2, 0x1e01, 0x1e20, 0x1e3f, 0x1e5e, 0x1e74, - 0x1e8a, 0x1ea1, 0x1eb7, 0x1ece, 0x1ee4, 0x1efb, 0x1f12, 0x1f33, - 0x1f4a, 0x1f6b, 0x1f83, 0x1fa5, 0x1fbc, 0x1fdd, 0x1ff5, 0x2017, - 0x202e, 0x204f, 0x2067, 0x2089, 0x209e, 0x20b3, 0x20ca, 0x20df, - 0x20f5, 0x210a, 0x2120, 0x213d, 0x2152, 0x2168, 0x217e, 0x219e, - // Entry 1300 - 133F - 0x21b4, 0x21d4, 0x21eb, 0x220c, 0x2222, 0x2242, 0x2259, 0x227a, - 0x2290, 0x22b0, 0x22c7, 0x22e8, 0x2307, 0x231b, 0x233a, 0x2358, - 0x2374, 0x2389, 0x23a5, 0x23c4, 0x23db, 0x23f0, 0x2406, 0x241b, - 0x2431, 0x2450, 0x2465, 0x247b, 0x249a, 0x24b1, 0x24d2, 0x24e6, - 0x2504, 0x251f, 0x2534, 0x254b, 0x2560, 0x2576, 0x258b, 0x25a1, - 0x25b6, 0x25cc, 0x25e3, 0x2604, 0x2618, 0x262e, 0x264b, 0x2661, - 0x267e, 0x2695, 0x26b3, 0x26c9, 0x26e0, 0x26f6, 0x270d, 0x2725, - 0x2747, 0x275c, 0x2773, 0x278a, 0x27a1, 0x27b8, 0x27ce, 0x27e4, - // Entry 1340 - 137F - 0x27fa, 0x2810, 0x2826, 0x2843, 0x2860, 0x287e, 0x289b, 0x28b9, - 0x28d6, 0x28f4, 0x2910, 0x292c, 0x2941, 0x2958, 0x296d, 0x2983, - 0x2998, 0x29ae, 0x29c3, 0x29d9, 0x29ed, 0x2a04, 0x2a1b, 0x2a32, - 0x2a49, 0x2a68, 0x2a87, 0x2aa6, 0x2ac5, 0x2add, 0x2af3, 0x2b0a, - 0x2b20, 0x2b37, 0x2b4d, 0x2b64, 0x2b79, 0x2b8f, 0x2bac, 0x2bc9, - 0x2be6, 0x2c03, 0x2c24, 0x2c45, 0x2c66, 0x2c87, 0x2ca7, 0x2cbd, - 0x2cd4, 0x2cea, 0x2d01, 0x2d17, 0x2d2e, 0x2d43, 0x2d61, 0x2d7f, - 0x2d9e, 0x2dbc, 0x2ddb, 0x2df9, 0x2e18, 0x2e35, 0x2e51, 0x2e6f, - // Entry 1380 - 13BF - 0x2e8d, 0x2eab, 0x2ec9, 0x2ee8, 0x2f07, 0x2f26, 0x2f45, 0x2f64, - 0x2f83, 0x2fa2, 0x2fc1, 0x2fe0, 0x2fff, 0x301e, 0x303d, 0x3059, - 0x3075, 0x3091, 0x30ad, 0x30cb, 0x30e9, 0x3107, 0x3126, 0x3144, - 0x3162, 0x317f, 0x319c, 0x31b9, 0x31d7, 0x31f4, 0x3211, 0x322e, - 0x324b, 0x3268, 0x3286, 0x32a3, 0x32c0, 0x32de, 0x32fc, 0x331a, - 0x3339, 0x3357, 0x3375, 0x3393, 0x33b1, 0x33cf, 0x33ee, 0x340c, - 0x342a, 0x3448, 0x3466, 0x3484, 0x34a3, 0x34c1, 0x34df, 0x34fc, - 0x3519, 0x3536, 0x3554, 0x3571, 0x358e, 0x35aa, 0x35c7, 0x35e4, - // Entry 13C0 - 13FF - 0x3601, 0x361f, 0x363c, 0x3659, 0x3677, 0x3695, 0x36b3, 0x36d2, - 0x36f0, 0x370e, 0x372c, 0x374a, 0x3768, 0x3787, 0x37a5, 0x37c3, - 0x37e0, 0x37fd, 0x381a, 0x3837, 0x3855, 0x3872, 0x388f, 0x38ac, - 0x38c9, 0x38e6, 0x3904, 0x3921, 0x393e, 0x395b, 0x3978, 0x3995, - 0x39b3, 0x39d0, 0x39ed, 0x3a0a, 0x3a26, 0x3a43, 0x3a60, 0x3a7e, - 0x3a9b, 0x3ab7, 0x3ad4, 0x3af2, 0x3b10, 0x3b2e, 0x3b4d, 0x3b6b, - 0x3b89, 0x3ba6, 0x3bc3, 0x3be0, 0x3bfe, 0x3c1b, 0x3c38, 0x3c56, - 0x3c74, 0x3c92, 0x3cb1, 0x3ccf, 0x3ced, 0x3d0b, 0x3d29, 0x3d47, - // Entry 1400 - 143F - 0x3d66, 0x3d84, 0x3da2, 0x3dc1, 0x3de0, 0x3dff, 0x3e1f, 0x3e3e, - 0x3e5d, 0x3e7b, 0x3e99, 0x3eb7, 0x3ed6, 0x3ef4, 0x3f12, 0x3f2f, - 0x3f4c, 0x3f69, 0x3f87, 0x3fa4, 0x3fc1, 0x3fdd, 0x4001, 0x401f, - 0x403d, 0x405b, 0x407a, 0x4098, 0x40b6, 0x40d3, 0x40f0, 0x410d, - 0x412b, 0x4148, 0x4165, 0x4183, 0x41a1, 0x41bf, 0x41de, 0x41fc, - 0x421a, 0x4237, 0x4255, 0x4273, 0x4291, 0x42b0, 0x42ce, 0x42ec, - 0x430a, 0x4328, 0x4346, 0x4365, 0x4383, 0x43a1, 0x43c0, 0x43df, - 0x43fe, 0x441e, 0x443d, 0x445c, 0x4477, 0x4493, 0x44a9, 0x44c0, - // Entry 1440 - 147F - 0x44d7, 0x44ef, 0x4506, 0x451e, 0x4535, 0x454d, 0x4570, 0x4592, - 0x45b5, 0x45d7, 0x45fa, 0x461c, 0x463f, 0x4665, 0x4683, 0x4693, - 0x46a5, 0x46b6, 0x46c8, 0x46d9, 0x46ea, 0x46fb, 0x470c, 0x471e, - 0x472f, 0x4741, 0x4752, 0x4763, 0x4777, 0x478a, 0x479b, 0x47ac, - 0x47bc, 0x47cb, 0x47df, 0x47f3, 0x4807, 0x4816, 0x482b, 0x483c, - 0x4854, 0x4866, 0x4878, 0x4893, 0x0093, 0x00ae, 0x00bc, 0x00d2, - 0x00e1, 0x00ef, 0x00fd, 0x011e, 0x012e, 0x0142, 0x0153, 0x0164, - 0x0175, 0x0193, 0x01b0, 0x01be, 0x01cd, 0x01dc, 0x01f9, 0x020b, - // Entry 1480 - 14BF - 0x021b, 0x022e, 0x023c, 0x024c, 0x0264, 0x0274, 0x028d, 0x02a2, - 0x02b6, 0x02d7, 0x02f7, 0x0315, 0x0333, 0x0348, 0x0362, 0x0370, - 0x0384, 0x0394, 0x03b2, 0x03ce, 0x03e3, 0x03ff, 0x0417, 0x042c, - 0x0450, 0x046d, 0x047b, 0x0489, 0x04a5, 0x04c2, 0x04d0, 0x04f5, - 0x0516, 0x052b, 0x053e, 0x0555, 0x056e, 0x058d, 0x05ab, 0x05ca, - 0x05df, 0x05f2, 0x0602, 0x061b, 0x0637, 0x0647, 0x0657, 0x066b, - 0x067c, 0x068e, 0x069f, 0x06ba, 0x06d4, 0x06ed, 0x06fb, 0x0709, - 0x0721, 0x073b, 0x0752, 0x0765, 0x077a, 0x078f, 0x079d, 0x07ac, - // Entry 14C0 - 14FF - 0x07bb, 0x07d8, 0x07f5, 0x0812, 0x082f, 0x084e, 0x004e, 0x005e, - 0x006e, 0x007e, 0x008f, 0x00a0, 0x00b2, 0x00c3, 0x00d4, 0x00e5, - 0x00f6, 0x0107, 0x0118, 0x0129, 0x0129, 0x013a, 0x014b, 0x015c, - 0x016d, 0x0181, 0x0195, 0x01a8, 0x01a8, 0x01b8, 0x01c8, 0x01d8, - 0x01e9, 0x01fa, 0x020c, 0x021d, 0x022e, 0x023f, 0x0250, 0x0261, - 0x0272, 0x0283, 0x0294, 0x02a5, 0x02b6, 0x02c7, 0x02d8, 0x02ec, - 0x0300, 0x0315, 0x0332, 0x034f, 0x034f, 0x035d, 0x036b, 0x0379, - 0x0388, 0x0397, 0x03a7, 0x03b6, 0x03c5, 0x03d4, 0x03e3, 0x03f2, - // Entry 1500 - 153F - 0x0401, 0x0410, 0x041f, 0x042e, 0x043d, 0x044c, 0x045b, 0x046d, - 0x047f, 0x007f, 0x0090, 0x00a1, 0x00b2, 0x00c4, 0x00d6, 0x00e9, - 0x00fb, 0x010d, 0x011f, 0x0131, 0x0143, 0x0155, 0x0167, 0x0167, - 0x0179, 0x018b, 0x019d, 0x019d, 0x01b2, 0x01c7, 0x01c7, 0x01d6, - 0x01e6, 0x01f5, 0x0205, 0x0215, 0x0224, 0x0234, 0x0243, 0x0253, - 0x0263, 0x0272, 0x0283, 0x0292, 0x02a3, 0x02b3, 0x02c2, 0x02d2, - 0x02e1, 0x02f1, 0x0300, 0x030f, 0x031f, 0x032e, 0x033e, 0x034d, - 0x035c, 0x036b, 0x037a, 0x0389, 0x0399, 0x03a9, 0x03b8, 0x03c7, - // Entry 1540 - 157F - 0x03d6, 0x03e5, 0x0400, 0x041b, 0x0435, 0x0450, 0x046a, 0x0485, - 0x04a0, 0x04bc, 0x04d6, 0x04f1, 0x050b, 0x0526, 0x0540, 0x055b, - 0x057f, 0x05a3, 0x05be, 0x05d5, 0x05ec, 0x05ff, 0x0611, 0x0624, - 0x0636, 0x0649, 0x065b, 0x066e, 0x0681, 0x0694, 0x06a7, 0x06ba, - 0x06cc, 0x06df, 0x06f2, 0x0705, 0x0718, 0x072a, 0x073c, 0x0754, - 0x076a, 0x077c, 0x078d, 0x079d, 0x07b3, 0x07c5, 0x07d5, 0x07ed, - 0x07fe, 0x080e, 0x0823, 0x0832, 0x0847, 0x0861, 0x0873, 0x0884, - 0x089a, 0x08ac, 0x08c6, 0x08de, 0x08f1, 0x00f1, 0x0101, 0x0110, - // Entry 1580 - 15BF - 0x011f, 0x0130, 0x0140, 0x0150, 0x015f, 0x0170, 0x0181, 0x0191, - 0x0191, 0x01ab, 0x01c6, 0x01e0, 0x01fa, 0x0215, 0x0230, 0x0250, - 0x026f, 0x028e, 0x02ae, 0x02ae, 0x02bd, 0x02cf, 0x02de, 0x02f1, - 0x0300, 0x0313, 0x032d, 0x0354, 0x036a, 0x0384, 0x0394, 0x03b9, - 0x03de, 0x0405, 0x041e, 0x001e, 0x0032, 0x0045, 0x0058, 0x006d, - 0x0081, 0x0095, 0x00a8, 0x00bd, 0x00d2, 0x00e6, 0x00e6, 0x00f8, - 0x010a, 0x011c, 0x012e, 0x0140, 0x0153, 0x0166, 0x0179, 0x018c, - 0x01a0, 0x01b3, 0x01c6, 0x01d9, 0x01ec, 0x01ff, 0x0212, 0x0225, - // Entry 15C0 - 15FF - 0x0239, 0x024c, 0x025f, 0x0273, 0x0286, 0x0299, 0x02ac, 0x02bf, - 0x02d2, 0x02e5, 0x02f9, 0x030d, 0x0320, 0x0334, 0x0348, 0x035c, - 0x0370, 0x0384, 0x03a9, 0x03c0, 0x03d7, 0x03ee, 0x0405, 0x041d, - 0x0435, 0x044e, 0x0466, 0x047e, 0x0496, 0x04ae, 0x04c6, 0x04de, - 0x04f6, 0x050f, 0x0527, 0x0540, 0x0558, 0x0570, 0x0588, 0x05a1, - 0x05ba, 0x05d3, 0x05ec, 0x0605, 0x061c, 0x0633, 0x064b, 0x0663, - 0x067a, 0x0693, 0x06ab, 0x06c3, 0x06db, 0x06f3, 0x070c, 0x0724, - 0x073c, 0x0754, 0x076c, 0x0785, 0x079e, 0x07b7, 0x07cf, 0x07e8, - // Entry 1600 - 163F - 0x0801, 0x081a, 0x0833, 0x084d, 0x0867, 0x0881, 0x089c, 0x009c, - 0x00c2, 0x00e7, 0x0107, 0x0128, 0x0152, 0x0172, 0x0198, 0x01b3, - 0x01ce, 0x01ea, 0x0207, 0x0223, 0x0240, 0x025e, 0x027b, 0x0298, - 0x02b4, 0x02d0, 0x02ec, 0x0309, 0x0326, 0x0343, 0x035f, 0x037b, - 0x039c, 0x03be, 0x03e2, 0x0406, 0x0429, 0x044d, 0x0471, 0x0496, - 0x04b9, 0x04dd, 0x0501, 0x0525, 0x0549, 0x056c, 0x058c, 0x05ad, - 0x05d1, 0x05f2, 0x0616, 0x0216, 0x022b, 0x0240, 0x0256, 0x026c, - 0x0282, 0x0298, 0x02af, 0x02c5, 0x02db, 0x02f2, 0x0308, 0x031e, - // Entry 1640 - 167F - 0x0334, 0x034a, 0x0360, 0x0376, 0x038d, 0x03a4, 0x03bc, 0x03d2, - 0x03e8, 0x03fe, 0x0414, 0x0432, 0x0449, 0x0468, 0x047e, 0x049c, - 0x04b3, 0x04d2, 0x04e9, 0x04ff, 0x0516, 0x052c, 0x0543, 0x0559, - 0x0575, 0x0591, 0x05ad, 0x05c9, 0x05e5, 0x0601, 0x061d, 0x063a, - 0x0656, 0x0672, 0x0695, 0x06b8, 0x06d5, 0x06f5, 0x0715, 0x072c, - 0x0743, 0x075b, 0x0773, 0x078b, 0x07a3, 0x07bb, 0x07d9, 0x07f7, - 0x0814, 0x0832, 0x0855, 0x0873, 0x0891, 0x08ae, 0x08cc, 0x08ec, - 0x090c, 0x092f, 0x012f, 0x0149, 0x0158, 0x0168, 0x0177, 0x0187, - // Entry 1680 - 16BF - 0x0197, 0x01a6, 0x01b6, 0x01c5, 0x01d5, 0x01e5, 0x01f4, 0x0204, - 0x0213, 0x0223, 0x0232, 0x0241, 0x0251, 0x0260, 0x0270, 0x027f, - 0x028e, 0x029d, 0x02ac, 0x02bb, 0x02cb, 0x02db, 0x02ea, 0x02f9, - 0x030a, 0x031a, 0x031a, 0x032c, 0x033e, 0x0350, 0x0363, 0x0376, - 0x0389, 0x039c, 0x03ae, 0x03c0, 0x03d9, 0x03f2, 0x040b, 0x000b, - 0x0020, 0x0036, 0x0051, 0x0066, 0x007b, 0x0090, 0x00a5, 0x00ba, - 0x00cf, 0x00e3, 0x00f7, 0x0106, 0x0106, 0x0114, 0x0114, 0x012a, - 0x013d, 0x014d, 0x015c, 0x016b, 0x017c, 0x018c, 0x019c, 0x01ab, - // Entry 16C0 - 16FF - 0x01bc, 0x01cd, 0x01dd, 0x01ed, 0x01fd, 0x020e, 0x021f, 0x022f, - 0x023f, 0x024f, 0x0260, 0x0270, 0x0280, 0x0291, 0x02a1, 0x02b1, - 0x02c1, 0x02d1, 0x02e1, 0x02f2, 0x0304, 0x0314, 0x0323, 0x0332, - 0x0342, 0x0352, 0x0361, 0x0371, 0x0380, 0x0390, 0x039f, 0x03b0, - 0x03c0, 0x03c0, 0x03d4, 0x03e8, 0x03fc, 0x0410, 0x0424, 0x0024, - 0x003e, 0x0057, 0x0071, 0x008b, 0x00a6, 0x00bf, 0x00d8, 0x00f2, - 0x010d, 0x0127, 0x0141, 0x015b, 0x0174, 0x018d, 0x01a7, 0x01c2, - 0x01dc, 0x01f5, 0x020f, 0x0228, 0x0242, 0x025d, 0x0277, 0x0290, - // Entry 1700 - 173F - 0x02aa, 0x02c3, 0x02dd, 0x02f7, 0x0311, 0x032a, 0x0343, 0x035c, - 0x0376, 0x0390, 0x03aa, 0x03c3, 0x03dc, 0x03f5, 0x0410, 0x042b, - 0x0445, 0x045f, 0x047a, 0x0494, 0x0094, 0x00ba, 0x00d3, 0x00ec, - 0x0104, 0x011d, 0x0135, 0x014e, 0x0166, 0x017f, 0x0198, 0x01b1, - 0x01cb, 0x01e4, 0x01fd, 0x0217, 0x0231, 0x024a, 0x0264, 0x027f, - 0x0299, 0x02b3, 0x02cd, 0x02e7, 0x0301, 0x0318, 0x032f, 0x032f, - 0x0345, 0x035a, 0x036f, 0x0386, 0x039c, 0x03b2, 0x03c7, 0x03de, - 0x03f5, 0x040b, 0x0425, 0x0025, 0x0039, 0x004e, 0x0065, 0x007b, - // Entry 1740 - 177F - 0x0090, 0x00a5, 0x00bb, 0x00d1, 0x00ec, 0x0106, 0x0120, 0x013b, - 0x0150, 0x016a, 0x0183, 0x019c, 0x01b6, 0x01d0, 0x01e6, 0x01fb, - 0x020f, 0x0223, 0x0238, 0x024d, 0x0267, 0x0280, 0x0299, 0x02b3, - 0x02c7, 0x02e0, 0x02f8, 0x0310, 0x0329, 0x0342, 0x0354, 0x0366, - 0x0379, 0x038d, 0x039f, 0x03b1, 0x03c3, 0x03d6, 0x03e8, 0x03fa, - 0x040c, 0x041f, 0x0431, 0x0443, 0x0456, 0x046a, 0x047c, 0x048e, - 0x04a0, 0x04b2, 0x04c4, 0x04d5, 0x04e7, 0x04fc, 0x0511, 0x0526, - 0x053b, 0x0551, 0x0151, 0x0161, 0x0178, 0x018f, 0x01a7, 0x01bf, - // Entry 1780 - 17BF - 0x01d5, 0x01ec, 0x0203, 0x0216, 0x022d, 0x0245, 0x025b, 0x0271, - 0x0288, 0x029b, 0x02af, 0x02c9, 0x02db, 0x02f4, 0x0308, 0x031f, - 0x0337, 0x034d, 0x0364, 0x0376, 0x0388, 0x039f, 0x03b7, 0x03ce, - 0x03e4, 0x03fa, 0x0411, 0x0423, 0x0439, 0x0450, 0x0462, 0x0475, - 0x0487, 0x049a, 0x04ac, 0x04c4, 0x04dc, 0x04f3, 0x050a, 0x051d, - 0x052e, 0x0544, 0x0555, 0x0567, 0x0578, 0x058a, 0x059c, 0x05ae, - 0x05c1, 0x05d9, 0x05fa, 0x061b, 0x063e, 0x0658, 0x0679, 0x0697, - 0x06c3, 0x06dd, 0x06f7, 0x0711, 0x0311, 0x0324, 0x0339, 0x0354, - // Entry 17C0 - 17FF - 0x036a, 0x0385, 0x039a, 0x03b0, 0x03c6, 0x03dd, 0x03f2, 0x0408, - 0x041d, 0x0439, 0x044f, 0x0464, 0x047a, 0x0490, 0x04a6, 0x04c1, - 0x04dd, 0x04f3, 0x0507, 0x051b, 0x0535, 0x054f, 0x0569, 0x057e, - 0x0593, 0x05b0, 0x01b0, 0x01d4, 0x01ec, 0x0203, 0x021a, 0x0233, - 0x024b, 0x0263, 0x027a, 0x0293, 0x02ac, 0x02c4, 0x02c4, 0x02dc, - 0x02f3, 0x030a, 0x0323, 0x033b, 0x0353, 0x036a, 0x0383, 0x039c, - 0x03b4, 0x03b4, 0x03c7, 0x03de, 0x03f1, 0x0403, 0x0414, 0x0428, - 0x044b, 0x0462, 0x0474, 0x0489, 0x049e, 0x04b6, 0x04c8, 0x04db, - // Entry 1800 - 183F - 0x00db, 0x00fe, 0x0116, 0x0128, 0x0141, 0x0155, 0x0168, 0x0183, - 0x019c, 0x01bc, 0x01e7, 0x0213, 0x022e, 0x0250, 0x026b, 0x0288, - 0x0288, 0x029f, 0x02b7, 0x02ca, 0x02de, 0x02f1, 0x0306, 0x0322, - 0x0337, 0x0353, 0x0368, 0x0384, 0x039b, 0x03b9, 0x03d1, 0x03f0, - 0x0405, 0x041b, 0x0430, 0x044c, 0x045e, 0x047a, 0x048c, 0x04a3, - 0x04b6, 0x04c8, 0x04df, 0x04f1, 0x0508, 0x051b, 0x0533, 0x0555, - 0x0577, 0x0599, 0x05b2, 0x05c4, 0x05db, 0x05ed, 0x0604, 0x0616, - 0x0628, 0x0640, 0x0652, 0x066c, 0x067e, 0x0690, 0x06a2, 0x06b4, - // Entry 1840 - 187F - 0x06c6, 0x06dd, 0x06f4, 0x0706, 0x0718, 0x072d, 0x0747, 0x075e, - 0x077a, 0x0792, 0x07af, 0x07ca, 0x07ec, 0x0808, 0x082b, 0x0845, - 0x0864, 0x0885, 0x08ab, 0x08c4, 0x08e4, 0x08f6, 0x090f, 0x0929, - 0x0943, 0x095b, 0x0973, 0x098c, 0x09a8, 0x01a8, 0x01bb, 0x01cd, - 0x01df, 0x01f3, 0x0206, 0x0219, 0x022b, 0x023f, 0x0253, 0x0266, - 0x0274, 0x0283, 0x0291, 0x02a9, 0x02bc, 0x02d2, 0x02e3, 0x02ff, - 0x031b, 0x0337, 0x0353, 0x0376, 0x0392, 0x03af, 0x03cc, 0x03e9, - 0x040a, 0x0431, 0x0458, 0x0480, 0x04a8, 0x04d1, 0x0506, 0x053b, - // Entry 1880 - 18BF - 0x0562, 0x0588, 0x05b3, 0x05de, 0x060b, 0x0638, 0x0663, 0x068e, - 0x06bb, 0x06e8, 0x0713, 0x0313, 0x032a, 0x0342, 0x035a, 0x036c, - 0x037e, 0x0390, 0x03a3, 0x03b5, 0x03c7, 0x03da, 0x03ed, 0x0400, - 0x0413, 0x0427, 0x043a, 0x044d, 0x0460, 0x0474, 0x0487, 0x049a, - 0x04ad, 0x04c0, 0x04d3, 0x04e6, 0x04f9, 0x050c, 0x051f, 0x0532, - 0x0545, 0x0558, 0x056b, 0x057e, 0x0591, 0x05b3, 0x05d4, 0x05f4, - 0x0611, 0x062d, 0x064c, 0x0669, 0x0685, 0x06a4, 0x06ba, 0x06cf, - 0x06f3, 0x0717, 0x072b, 0x073f, 0x0753, 0x0766, 0x0779, 0x078e, - // Entry 18C0 - 18FF - 0x07a2, 0x07b6, 0x07c9, 0x07de, 0x07f3, 0x0807, 0x0819, 0x082d, - 0x0841, 0x0855, 0x086d, 0x0885, 0x0893, 0x08ac, 0x08bb, 0x08d5, - 0x08ef, 0x08fe, 0x0912, 0x0921, 0x093b, 0x094a, 0x0964, 0x0973, - 0x098d, 0x09a3, 0x09b2, 0x09cc, 0x09db, 0x09ea, 0x09f9, 0x0a13, - 0x0a22, 0x0a3c, 0x0a54, 0x0a6c, 0x0a7b, 0x0a95, 0x0aaf, 0x0abe, - 0x0ad8, 0x0ae8, 0x0af7, 0x0b11, 0x0b21, 0x0b30, 0x0b40, 0x0b50, - 0x0b5e, 0x0b6c, 0x0b7c, 0x0b8e, 0x0ba7, 0x0bba, 0x0bcc, 0x0be3, - 0x0bf5, 0x0c0c, 0x0c1e, 0x0c42, 0x0c59, 0x0c6f, 0x0c7d, 0x0c8d, - // Entry 1900 - 193F - 0x008d, 0x00a8, 0x00c5, 0x00dd, 0x00f8, 0x0108, 0x0119, 0x012a, - 0x013a, 0x014b, 0x015c, 0x016c, 0x017d, 0x018d, 0x019e, 0x01ae, - 0x01bf, 0x01cf, 0x01df, 0x01ef, 0x0200, 0x0211, 0x0221, 0x0232, - 0x0242, 0x0253, 0x0263, 0x0274, 0x0285, 0x0297, 0x02a8, 0x02b8, - 0x02c8, 0x02d8, 0x02e8, 0x02f9, 0x0309, 0x0319, 0x032a, 0x033a, - 0x0349, 0x0363, 0x037d, 0x0391, 0x03a4, 0x03b7, 0x03cb, 0x03de, - 0x03f2, 0x0405, 0x041c, 0x0433, 0x044a, 0x0461, 0x0478, 0x048f, - 0x04a6, 0x04c3, 0x04dd, 0x04ec, 0x04fd, 0x00fd, 0x0116, 0x013b, - // Entry 1940 - 197F - 0x0154, 0x0174, 0x018d, 0x019e, 0x01ae, 0x01be, 0x01d0, 0x01e1, - 0x01f2, 0x0202, 0x0214, 0x0226, 0x0237, 0x0237, 0x0248, 0x025a, - 0x026b, 0x027e, 0x0290, 0x02a2, 0x02b6, 0x02c9, 0x02dc, 0x02ee, - 0x0302, 0x0316, 0x0329, 0x033b, 0x034d, 0x035f, 0x0372, 0x0384, - 0x0397, 0x03aa, 0x03bd, 0x03d0, 0x03e3, 0x03f5, 0x0407, 0x0419, - 0x042c, 0x043e, 0x0450, 0x0462, 0x0474, 0x0487, 0x0499, 0x04ab, - 0x04bd, 0x04d0, 0x04e2, 0x04f5, 0x0507, 0x051a, 0x052c, 0x053e, - 0x0550, 0x0563, 0x057c, 0x0598, 0x05a6, 0x05b7, 0x05c4, 0x05df, - // Entry 1980 - 19BF - 0x0601, 0x0621, 0x0645, 0x0663, 0x0680, 0x069d, 0x06c2, 0x06e6, - 0x0704, 0x0726, 0x0326, 0x0347, 0x036b, 0x038e, 0x03af, 0x03d6, - 0x03fc, 0x0422, 0x0448, 0x0048, 0x005b, 0x006b, 0x007d, 0x0091, - 0x00b6, 0x00ea, 0x0113, 0x0144, 0x015b, 0x0196, 0x01af, 0x01c8, - 0x01e3, 0x01f7, 0x0210, 0x022b, 0x025b, 0x0286, 0x02a0, 0x02b9, - 0x02db, 0x02f6, 0x031a, 0x033d, 0x0362, 0x0382, 0x03a2, 0x03c1, - 0x03ea, 0x03fb, 0x041c, 0x0434, 0x0453, 0x0475, 0x048c, 0x04ab, - 0x04c2, 0x04d8, 0x04ee, 0x00ee, 0x0103, 0x011f, 0x011f, 0x013b, - // Entry 19C0 - 19FF - 0x0158, 0x0174, 0x0197, 0x01b3, 0x01cf, 0x01ed, 0x0209, 0x0229, - 0x0244, 0x0260, 0x027c, 0x02a4, 0x02c0, 0x02e5, 0x0301, 0x0322, - 0x033f, 0x0361, 0x038a, 0x03a6, 0x03c3, 0x03e0, 0x0400, 0x041c, - 0x0441, 0x0464, 0x0480, 0x049c, 0x04b9, 0x04e2, 0x0506, 0x0522, - 0x053e, 0x055a, 0x0578, 0x059d, 0x05ad, 0x05cd, 0x05ed, 0x060a, - 0x0628, 0x0646, 0x0666, 0x067f, 0x0699, 0x06b2, 0x06d2, 0x06eb, - 0x0704, 0x0726, 0x073f, 0x0758, 0x0771, 0x078a, 0x07a3, 0x07bc, - 0x07d5, 0x07ee, 0x0810, 0x0829, 0x0843, 0x085c, 0x0875, 0x088e, - // Entry 1A00 - 1A3F - 0x08a7, 0x08c0, 0x08d7, 0x08f5, 0x0910, 0x092f, 0x0946, 0x095d, - 0x0974, 0x098f, 0x09ab, 0x09ce, 0x09e5, 0x0a03, 0x0a1a, 0x0a31, - 0x0a4a, 0x0a61, 0x0a7d, 0x0a9d, 0x0ac0, 0x0ad7, 0x0aee, 0x0b05, - 0x0b25, 0x0b43, 0x0b5a, 0x0b73, 0x0b8d, 0x0bae, 0x0bc9, 0x0be8, - 0x0c01, 0x0c1f, 0x0c3d, 0x0c5b, 0x0c79, 0x0c9a, 0x0cbc, 0x0cdc, - 0x0cfc, 0x0d1c, 0x0d31, 0x0d57, 0x0d7d, 0x0da3, 0x0dc9, 0x0def, - 0x0e15, 0x0e3b, 0x0e6e, 0x0e94, 0x0eba, 0x0ee0, 0x0efb, 0x0f16, - 0x0f32, 0x0f5a, 0x0f82, 0x0fa5, 0x0fc5, 0x0fed, 0x1013, 0x1039, - // Entry 1A40 - 1A7F - 0x105f, 0x1085, 0x10ab, 0x10d1, 0x10f7, 0x111d, 0x1143, 0x1169, - 0x118f, 0x11b5, 0x11dd, 0x1203, 0x1229, 0x124f, 0x1277, 0x12a3, - 0x12ca, 0x12f2, 0x131f, 0x1355, 0x1381, 0x13a9, 0x13d6, 0x1400, - 0x1428, 0x1452, 0x1474, 0x148b, 0x14ac, 0x14c5, 0x14ea, 0x1501, - 0x152c, 0x154a, 0x1568, 0x158b, 0x15a5, 0x15c4, 0x15ef, 0x1618, - 0x1643, 0x166c, 0x168b, 0x16ac, 0x16d8, 0x16fe, 0x1729, 0x1748, - 0x1766, 0x177f, 0x17a0, 0x17b9, 0x17e2, 0x17fd, 0x181a, 0x1839, - 0x185a, 0x1878, 0x188f, 0x18ba, 0x18db, 0x18f4, 0x190f, 0x192c, - // Entry 1A80 - 1ABF - 0x1949, 0x195e, 0x1977, 0x198d, 0x19a3, 0x19b9, 0x19cf, 0x19ea, - 0x1a05, 0x1a29, 0x1a3f, 0x1a55, 0x1a76, 0x1a8c, 0x1aa2, 0x1ab4, - 0x1ac6, 0x1ad8, 0x1b0b, 0x1b2a, 0x1b49, 0x1b68, 0x1b8e, 0x1bb4, - 0x1bd4, 0x1bf2, 0x1c18, 0x1c36, 0x1c54, 0x1c7a, 0x1ca0, 0x1cbe, - 0x1ce4, 0x1d0a, 0x1d30, 0x1d4e, 0x1d71, 0x1d8f, 0x1db1, 0x1dcf, - 0x1df0, 0x1e12, 0x1e30, 0x1e67, 0x1ea6, 0x1ec4, 0x1ee4, 0x1f23, - 0x1f41, 0x1f6e, 0x1f9b, 0x1fc8, 0x1fdf, 0x03df, 0x03f6, 0x041b, - 0x043a, 0x0458, 0x048a, 0x04b0, 0x04d4, 0x04f9, 0x051c, 0x0541, - // Entry 1AC0 - 1AFF - 0x0564, 0x058a, 0x05ae, 0x05db, 0x0606, 0x062b, 0x064e, 0x0673, - 0x0696, 0x06bc, 0x06e0, 0x0703, 0x0724, 0x0750, 0x077a, 0x07a6, - 0x07d0, 0x07fc, 0x0826, 0x0852, 0x087c, 0x08a3, 0x08c8, 0x08f5, - 0x0920, 0x0945, 0x0968, 0x098a, 0x09aa, 0x09cf, 0x09f2, 0x0a17, - 0x0a3a, 0x0a5f, 0x0a82, 0x0aa5, 0x0ac6, 0x0aed, 0x0b12, 0x0b39, - 0x0b5e, 0x0b8d, 0x0bba, 0x0bdb, 0x0bfa, 0x0c1f, 0x0c42, 0x0c68, - 0x0c8c, 0x0cb1, 0x0cd4, 0x0d04, 0x0d32, 0x0d58, 0x0d7c, 0x0da8, - 0x0dd2, 0x0df3, 0x0e12, 0x0e37, 0x0e5a, 0x0e7f, 0x0ea2, 0x0ec7, - // Entry 1B00 - 1B3F - 0x0eea, 0x0f0f, 0x0f32, 0x0f58, 0x0f7c, 0x0fa8, 0x0fd2, 0x0ffd, - 0x1026, 0x1055, 0x1082, 0x10ae, 0x10d8, 0x1104, 0x112e, 0x114f, - 0x116e, 0x1193, 0x11b6, 0x11db, 0x11fe, 0x1223, 0x1246, 0x1276, - 0x12a4, 0x12ca, 0x12ee, 0x1313, 0x1336, 0x135b, 0x137e, 0x13ad, - 0x13da, 0x1409, 0x1436, 0x1469, 0x149a, 0x14bf, 0x14e2, 0x1507, - 0x152a, 0x1550, 0x1574, 0x15a0, 0x15ca, 0x15f5, 0x161e, 0x1645, - 0x166a, 0x1696, 0x16c0, 0x16eb, 0x1714, 0x1744, 0x1772, 0x1793, - 0x17b2, 0x17d7, 0x17fa, 0x181b, 0x183a, 0x185b, 0x187a, 0x189f, - // Entry 1B40 - 1B7F - 0x18c2, 0x18e7, 0x190a, 0x192f, 0x1952, 0x1977, 0x199a, 0x19bf, - 0x19e2, 0x1a07, 0x1a2a, 0x1a50, 0x1a74, 0x1a99, 0x1abc, 0x1ae2, - 0x1b06, 0x1b2a, 0x1b4d, 0x1b71, 0x1b95, 0x1bbe, 0x1be6, 0x1c14, - 0x1c3e, 0x1c5a, 0x1c72, 0x1c97, 0x1cba, 0x1ce0, 0x1d04, 0x1d34, - 0x1d62, 0x1d92, 0x1dc0, 0x1df5, 0x1e28, 0x1e58, 0x1e86, 0x1eba, - 0x1eec, 0x1f17, 0x1f40, 0x1f6b, 0x1f94, 0x1fc4, 0x1ff2, 0x201d, - 0x2046, 0x2075, 0x20a2, 0x20c7, 0x20ea, 0x2110, 0x2134, 0x2155, - 0x2174, 0x21a4, 0x21d2, 0x2202, 0x2230, 0x2265, 0x2298, 0x22c8, - // Entry 1B80 - 1BBF - 0x22f6, 0x232a, 0x235c, 0x2382, 0x23a6, 0x23cb, 0x23ee, 0x2413, - 0x2436, 0x245c, 0x2480, 0x24b0, 0x24de, 0x250e, 0x253c, 0x2571, - 0x25a4, 0x25d4, 0x2602, 0x2636, 0x2668, 0x2692, 0x26ba, 0x26e4, - 0x270c, 0x273b, 0x2768, 0x2792, 0x27ba, 0x27e8, 0x2814, 0x2839, - 0x285c, 0x2882, 0x28a6, 0x28d0, 0x28f8, 0x2922, 0x294a, 0x2979, - 0x29a6, 0x29d0, 0x29f8, 0x2a26, 0x2a52, 0x2a73, 0x2a92, 0x2ab7, - 0x2ada, 0x2b00, 0x2b24, 0x2b45, 0x2b64, 0x2b88, 0x2baa, 0x2bcd, - 0x2bee, 0x2c0e, 0x2c2c, 0x2c4f, 0x2c72, 0x2c9f, 0x2ccc, 0x2cf8, - // Entry 1BC0 - 1BFF - 0x2d24, 0x2d57, 0x2d8a, 0x2daf, 0x2dd4, 0x2e03, 0x2e32, 0x2e60, - 0x2e8e, 0x2ec3, 0x2ef8, 0x2f1d, 0x2f42, 0x2f71, 0x2fa0, 0x2fce, - 0x2ffc, 0x03fc, 0x0423, 0x044a, 0x047b, 0x04ac, 0x04dc, 0x050c, - 0x010c, 0x012d, 0x014e, 0x0179, 0x01a4, 0x01ce, 0x01f8, 0x0229, - 0x025a, 0x027d, 0x02a0, 0x02cd, 0x02fa, 0x0326, 0x0352, 0x0385, - 0x03b8, 0x03da, 0x03fc, 0x0428, 0x0454, 0x047f, 0x04aa, 0x04dc, - 0x050e, 0x0532, 0x0556, 0x0584, 0x05b2, 0x05df, 0x060c, 0x0640, - 0x0674, 0x0699, 0x06be, 0x06ed, 0x071c, 0x074a, 0x0778, 0x0378, - // Entry 1C00 - 1C3F - 0x039f, 0x03c6, 0x03f7, 0x0428, 0x0458, 0x0488, 0x0088, 0x00ad, - 0x00d2, 0x0101, 0x0130, 0x015e, 0x018c, 0x01c1, 0x01f6, 0x01f6, - 0x021d, 0x021d, 0x024e, 0x024e, 0x027e, 0x027e, 0x02b5, 0x02d8, - 0x02fb, 0x0328, 0x0355, 0x0381, 0x03ad, 0x03e0, 0x0413, 0x0438, - 0x045d, 0x048c, 0x04bb, 0x04e9, 0x0517, 0x054c, 0x0581, 0x05a4, - 0x05c6, 0x05eb, 0x060f, 0x0630, 0x0650, 0x0672, 0x0693, 0x06b8, - 0x06dc, 0x0701, 0x0725, 0x0748, 0x076a, 0x036a, 0x039f, 0x03d4, - 0x0413, 0x0452, 0x0490, 0x04ce, 0x0513, 0x0558, 0x0590, 0x05c8, - // Entry 1C40 - 1C7F - 0x060a, 0x064c, 0x068d, 0x06ce, 0x0716, 0x075e, 0x0791, 0x07c4, - 0x0801, 0x083e, 0x087a, 0x08b6, 0x08f9, 0x093c, 0x0972, 0x09a8, - 0x09e8, 0x0a28, 0x0a67, 0x0aa6, 0x0aec, 0x0b32, 0x0b67, 0x0b9c, - 0x0bdb, 0x0c1a, 0x0c58, 0x0c96, 0x0cdb, 0x0d20, 0x0d58, 0x0d90, - 0x0dd2, 0x0e14, 0x0e55, 0x0e96, 0x0ede, 0x0f26, 0x0f4a, 0x0f6e, - 0x0fa3, 0x0fce, 0x1002, 0x0002, 0x002b, 0x0066, 0x008c, 0x00b2, - 0x00d7, 0x00fb, 0x0129, 0x0136, 0x014a, 0x0155, 0x0166, 0x0185, - 0x01b8, 0x01e1, 0x0213, 0x0213, 0x023a, 0x0273, 0x029a, 0x02c0, - // Entry 1C80 - 1CBF - 0x02e3, 0x0305, 0x0331, 0x0346, 0x035a, 0x0375, 0x0398, 0x03bb, - 0x03eb, 0x041a, 0x001a, 0x0042, 0x0078, 0x009d, 0x00c2, 0x00e6, - 0x0109, 0x0109, 0x011e, 0x0132, 0x014d, 0x0173, 0x0199, 0x01cc, - 0x01fe, 0x021f, 0x0240, 0x026b, 0x02a4, 0x02cc, 0x02f4, 0x031b, - 0x0341, 0x0364, 0x037d, 0x0395, 0x03a0, 0x03a0, 0x03d5, 0x0400, - 0x0434, 0x0034, 0x005d, 0x0098, 0x00bf, 0x00e5, 0x010a, 0x012e, - 0x015c, 0x0166, 0x0171, 0x0171, 0x0178, 0x017f, 0x0187, 0x018f, - 0x01a1, 0x01b2, 0x01c2, 0x01ce, 0x01df, 0x01e9, 0x01f3, 0x0203, - // Entry 1CC0 - 1CFF - 0x0218, 0x0229, 0x023b, 0x024d, 0x0253, 0x0266, 0x0271, 0x0278, - 0x027f, 0x028d, 0x02a1, 0x02b0, 0x02ca, 0x02e5, 0x0300, 0x0325, - 0x033f, 0x035a, 0x0375, 0x039a, 0x03a0, 0x03ad, 0x03b3, 0x03c4, - 0x03d2, 0x03e0, 0x03f3, 0x0404, 0x0412, 0x0425, 0x043c, 0x0453, - 0x046d, 0x0483, 0x0499, 0x04ae, 0x04bc, 0x04d1, 0x04d6, 0x04e2, - 0x04ee, 0x04fc, 0x0511, 0x0526, 0x052b, 0x0554, 0x057e, 0x058c, - 0x05a3, 0x05ae, 0x05b6, 0x05be, 0x05cb, 0x05e0, 0x05e8, 0x05f5, - 0x0603, 0x0621, 0x0640, 0x0654, 0x066d, 0x0686, 0x0696, 0x06ab, - // Entry 1D00 - 1D3F - 0x06c1, 0x06d8, 0x06e4, 0x06f6, 0x06fe, 0x071e, 0x0733, 0x073d, - 0x074e, 0x0765, 0x077a, 0x0789, 0x079d, 0x07b1, 0x07c4, 0x07d1, - 0x07dd, 0x07e5, 0x07f7, 0x0810, 0x081b, 0x082f, 0x083e, 0x0851, - 0x085f, 0x005f, 0x0074, 0x0089, 0x009d, 0x00b4, 0x00ce, 0x00e9, - 0x0104, 0x0120, 0x0135, 0x0149, 0x0159, 0x0179, 0x0179, 0x0189, - 0x0199, 0x01a8, 0x01b9, 0x01ca, 0x01da, 0x01ef, 0x0200, 0x0217, - 0x0233, 0x0250, 0x0270, 0x027e, 0x028b, 0x0298, 0x02a7, 0x02b5, - 0x02c3, 0x02d0, 0x02df, 0x02ee, 0x02fc, 0x030f, 0x031e, 0x0333, - // Entry 1D40 - 1D7F - 0x034d, 0x0368, 0x0368, 0x0386, 0x03a4, 0x03c2, 0x03e0, 0x0402, - 0x0420, 0x043e, 0x045c, 0x047a, 0x0498, 0x04b6, 0x04d4, 0x04f2, - 0x00f2, 0x0104, 0x010e, 0x011b, 0x012c, 0x0135, 0x013e, 0x0148, - 0x0153, 0x015d, 0x0165, 0x0174, 0x017d, 0x0186, 0x018e, 0x0199, - 0x01a5, 0x01b6, 0x01bf, 0x01cb, 0x01d7, 0x01e3, 0x01ec, 0x01ff, - 0x020c, 0x0216, 0x0227, 0x0238, 0x0248, 0x0252, 0x025c, 0x0265, - 0x0265, 0x0281, 0x029e, 0x02c2, 0x02e7, 0x030a, 0x0329, 0x0343, - 0x035e, 0x0374, 0x0394, 0x03b8, 0x03d2, 0x03eb, 0x0405, 0x041f, - // Entry 1D80 - 1DBF - 0x043a, 0x045e, 0x047e, 0x0498, 0x04b2, 0x04de, 0x04ff, 0x0527, - 0x053f, 0x0558, 0x0573, 0x0594, 0x05b9, 0x05e9, 0x0618, 0x0632, - 0x064d, 0x0665, 0x0265, 0x026f, 0x0287, 0x029e, 0x02ac, 0x02be, - 0x02c5, 0x02cd, 0x02db, 0x02e2, 0x02f3, 0x0301, 0x0311, 0x0327, - 0x033e, 0x034d, 0x0368, 0x0378, 0x038e, 0x039e, 0x03ac, 0x03ba, - 0x03d1, 0x03dc, 0x03f5, 0x0405, 0x041c, 0x0433, 0x0443, 0x0459, - 0x0470, 0x0481, 0x0489, 0x0495, 0x04a3, 0x04b2, 0x04ba, 0x04d1, - 0x04db, 0x04e3, 0x04f4, 0x050a, 0x0528, 0x0533, 0x0540, 0x0550, - // Entry 1DC0 - 1DFF - 0x0566, 0x0576, 0x0584, 0x0594, 0x05a4, 0x05b4, 0x05c4, 0x05d2, - 0x05dd, 0x05e7, 0x05f3, 0x05ff, 0x0611, 0x0622, 0x0630, 0x0646, - 0x065f, 0x067a, 0x0692, 0x06af, 0x06ca, 0x06e5, 0x0702, 0x071d, - 0x073b, 0x0757, 0x0773, 0x078f, 0x07ab, 0x07b8, 0x07c8, 0x07d0, - 0x07dc, 0x07ea, 0x0805, 0x0820, 0x0839, 0x0852, 0x086b, 0x0885, - 0x089e, 0x08b8, 0x08d4, 0x08ef, 0x0908, 0x0923, 0x093d, 0x095a, - 0x0976, 0x0993, 0x09a9, 0x09ba, 0x09cb, 0x09de, 0x09f0, 0x0a02, - 0x0a13, 0x0a26, 0x0a39, 0x0a4b, 0x0a5c, 0x0a70, 0x0a84, 0x0a97, - // Entry 1E00 - 1E3F - 0x0ab0, 0x0aca, 0x0ae4, 0x0afb, 0x0b12, 0x0b2b, 0x0b43, 0x0b5b, - 0x0b72, 0x0b8b, 0x0ba4, 0x0bbc, 0x0bd3, 0x0bed, 0x0c07, 0x0c20, - 0x0c3f, 0x0c5f, 0x0c7f, 0x0c9d, 0x0cb8, 0x0cd2, 0x0cf4, 0x0d11, - 0x0d2c, 0x0d4a, 0x0d66, 0x0d88, 0x0da3, 0x0db3, 0x0dc5, 0x01c5, - 0x01d4, 0x01e1, 0x01f1, 0x0200, 0x0210, 0x021d, 0x022d, 0x023d, - 0x024d, 0x025d, 0x0278, 0x0294, 0x02a8, 0x02bd, 0x02d7, 0x02ef, - 0x030a, 0x0324, 0x033d, 0x0357, 0x036f, 0x0385, 0x039e, 0x03b6, - 0x03cd, 0x03e6, 0x0400, 0x0419, 0x0433, 0x0448, 0x0464, 0x047a, - // Entry 1E40 - 1E7F - 0x049a, 0x04bb, 0x04dd, 0x0500, 0x0526, 0x054b, 0x056d, 0x058b, - 0x05a7, 0x05da, 0x05f9, 0x0614, 0x0637, 0x065c, 0x0680, 0x06a3, - 0x06c7, 0x06ed, 0x0713, 0x0738, 0x075d, 0x0787, 0x07ac, 0x07c3, - 0x07d8, 0x07f0, 0x0807, 0x0830, 0x0859, 0x087b, 0x089e, 0x08c1, - 0x08d7, 0x08eb, 0x0902, 0x0918, 0x092f, 0x0943, 0x095a, 0x0971, - 0x0988, 0x099f, 0x09b5, 0x09cc, 0x09e4, 0x09fd, 0x0a1d, 0x0a3f, - 0x0a55, 0x0a69, 0x0a80, 0x0a96, 0x0aac, 0x0ac3, 0x0ad8, 0x0aeb, - 0x0b01, 0x0b16, 0x0b32, 0x0b51, 0x0b84, 0x0bb5, 0x0bcf, 0x0bf5, - // Entry 1E80 - 1EBF - 0x0c15, 0x0c2f, 0x0c49, 0x0c5c, 0x0c79, 0x0ca3, 0x0cba, 0x0cde, - 0x0d03, 0x0d28, 0x0d53, 0x0d7f, 0x0dab, 0x0dc6, 0x0de2, 0x0dfe, - 0x0e05, 0x0e0f, 0x0e23, 0x0e2f, 0x0e43, 0x0e4c, 0x0e55, 0x0e5a, - 0x0e64, 0x0e75, 0x0e85, 0x0e97, 0x0eb1, 0x0ec9, 0x0ed5, 0x0ee2, - 0x0ef1, 0x0f00, 0x0f0a, 0x0f1c, 0x0f24, 0x0f32, 0x0f3b, 0x0f4c, - 0x0f59, 0x0f68, 0x0f73, 0x0f7c, 0x0f87, 0x0f96, 0x0f9e, 0x0fa9, - 0x0fae, 0x0fbc, 0x0fcb, 0x0fd2, 0x0fe1, 0x0fec, 0x0ffb, 0x1006, - 0x1010, 0x101c, 0x1021, 0x1029, 0x1038, 0x1047, 0x1057, 0x1067, - // Entry 1EC0 - 1EFF - 0x1076, 0x1088, 0x10a2, 0x10c0, 0x10c9, 0x10d0, 0x10d5, 0x10df, - 0x10e8, 0x10ee, 0x1102, 0x110c, 0x111a, 0x1128, 0x1137, 0x1140, - 0x114e, 0x1157, 0x1162, 0x1179, 0x1194, 0x11aa, 0x11d1, 0x11fc, - 0x120b, 0x121e, 0x1236, 0x1242, 0x124e, 0x125b, 0x1276, 0x1288, - 0x129c, 0x12b2, 0x12d8, 0x12fa, 0x1306, 0x1312, 0x1322, 0x132f, - 0x133d, 0x1346, 0x1354, 0x135f, 0x136d, 0x1383, 0x138e, 0x13a1, - 0x13ad, 0x13b9, 0x13c9, 0x13df, 0x13f4, 0x140c, 0x1423, 0x143d, - 0x1457, 0x1474, 0x1482, 0x1493, 0x149a, 0x14ab, 0x14b8, 0x14c8, - // Entry 1F00 - 1F3F - 0x14e6, 0x1507, 0x1521, 0x153e, 0x1561, 0x1587, 0x15a0, 0x15b9, - 0x15db, 0x15fd, 0x1605, 0x160d, 0x1621, 0x1635, 0x164e, 0x1667, - 0x1677, 0x1687, 0x1690, 0x169b, 0x16aa, 0x16bb, 0x16d0, 0x16e7, - 0x1707, 0x1729, 0x1744, 0x1761, 0x1769, 0x1780, 0x178e, 0x179d, - 0x17af, 0x17ca, 0x17e8, 0x17f2, 0x17fc, 0x1808, 0x1815, 0x1822, - 0x1838, 0x184c, 0x1861, 0x187a, 0x1888, 0x1894, 0x18a0, 0x18ad, - 0x18ba, 0x18ce, 0x18d8, 0x18e1, 0x18ea, 0x18f1, 0x18fa, 0x1900, - 0x1904, 0x190a, 0x192d, 0x1957, 0x1965, 0x196d, 0x197b, 0x19ad, - // Entry 1F40 - 1F7F - 0x19c4, 0x19db, 0x19ed, 0x1a08, 0x1a26, 0x1a4d, 0x1a58, 0x1a60, - 0x1a68, 0x1a82, 0x1a8d, 0x1a90, 0x1a94, 0x1a97, 0x1aab, 0x1ab9, - 0x1aca, 0x1ada, 0x1aec, 0x1af7, 0x1b07, 0x1b13, 0x1b20, 0x1b2e, - 0x1b34, 0x1b59, 0x1b7f, 0x1b96, 0x1bae, 0x1bc3, 0x1bd3, 0x1be4, - 0x1bf1, 0x1c00, 0x1c13, 0x1c1f, 0x1c28, 0x1c3d, 0x1c4f, 0x1c64, - 0x1c77, 0x1c8d, 0x1caf, 0x1cd1, 0x1ce6, 0x1cfe, 0x1d12, 0x1d26, - 0x1d3f, 0x1d58, 0x1d77, 0x1d99, 0x1db8, 0x1dda, 0x1df9, 0x1e1b, - 0x1e39, 0x1e57, 0x1e6d, 0x1e90, 0x1eb2, 0x1ede, 0x1eef, 0x1f0a, - // Entry 1F80 - 1FBF - 0x1f24, 0x1f40, 0x1f66, 0x1f9e, 0x1fdc, 0x1ff5, 0x200c, 0x2029, - 0x2041, 0x2067, 0x208b, 0x20c1, 0x20fd, 0x2112, 0x212d, 0x2146, - 0x2153, 0x2161, 0x2166, 0x2172, 0x2180, 0x218a, 0x2195, 0x219e, - 0x21aa, 0x21b7, 0x21c1, 0x21cc, 0x21dd, 0x21ed, 0x21fb, 0x2208, - 0x2219, 0x2227, 0x222a, 0x2231, 0x2237, 0x2249, 0x225b, 0x226a, - 0x2280, 0x228f, 0x2294, 0x229d, 0x22ac, 0x22bc, 0x22ce, 0x22e1, - 0x22f2, 0x2306, 0x230b, 0x2310, 0x2338, 0x2342, 0x2354, 0x2368, - 0x2370, 0x238b, 0x23a7, 0x23b8, 0x23c4, 0x23d0, 0x23e2, 0x23ea, - // Entry 1FC0 - 1FFF - 0x23f6, 0x2406, 0x2413, 0x2418, 0x2423, 0x242e, 0x244a, 0x246b, - 0x248b, 0x24ac, 0x24ce, 0x24ec, 0x250d, 0x252f, 0x254f, 0x256e, - 0x2591, 0x25b1, 0x25d5, 0x25f9, 0x2620, 0x2644, 0x2669, 0x2693, - 0x26be, 0x26e4, 0x270c, 0x272d, 0x2752, 0x2772, 0x2795, 0x27b7, - 0x27df, 0x2804, 0x2823, 0x2846, 0x2864, 0x2885, 0x28a9, 0x28d3, - 0x28f7, 0x291b, 0x2941, 0x2963, 0x2988, 0x29a9, 0x29c9, 0x29ea, - 0x2a0a, 0x2a31, 0x2a54, 0x2a78, 0x2a9b, 0x2ac1, 0x2ae6, 0x2b0b, - 0x2b30, 0x2b5c, 0x2b7b, 0x2b9a, 0x2bb5, 0x2bd6, 0x2bfe, 0x2c22, - // Entry 2000 - 203F - 0x2c45, 0x2c6b, 0x2c8f, 0x2ca9, 0x2cc2, 0x2cdd, 0x2d01, 0x2d27, - 0x2d4a, 0x2d6e, 0x2d89, 0x2d97, 0x2dbe, 0x2dd1, 0x2ddc, 0x2df9, - 0x2e09, 0x2e24, 0x2e42, 0x2e51, 0x2e63, 0x2e89, 0x2e95, 0x2eab, - 0x2eb6, 0x2ed7, 0x2eec, 0x2f0e, 0x2f19, 0x2f2a, 0x2f3b, 0x2f5c, - 0x2f7d, 0x2f9c, 0x2fb9, 0x2fd7, 0x2fef, 0x3009, 0x3025, 0x3032, - 0x303b, 0x304e, 0x3061, 0x307c, 0x3096, 0x30b1, 0x30cd, 0x30e8, - 0x3104, 0x3124, 0x3141, 0x3161, 0x3182, 0x31a0, 0x31c1, 0x31de, - 0x31fd, 0x321a, 0x3231, 0x324f, 0x326f, 0x328d, 0x329f, 0x32b8, - // Entry 2040 - 207F - 0x32e7, 0x3316, 0x3323, 0x3333, 0x3345, 0x335a, 0x3387, 0x339c, - 0x33b2, 0x33c9, 0x33df, 0x33f5, 0x340b, 0x3421, 0x344e, 0x347e, - 0x34a9, 0x34df, 0x3513, 0x3540, 0x3578, 0x35ae, 0x35d6, 0x360a, - 0x363c, 0x3666, 0x368e, 0x36ba, 0x36e9, 0x36f4, 0x3701, 0x370d, - 0x3724, 0x3732, 0x374a, 0x3762, 0x377f, 0x379c, 0x37b6, 0x37c6, - 0x37d8, 0x37ea, 0x37f6, 0x37fa, 0x3809, 0x381b, 0x382c, 0x3840, - 0x385a, 0x3877, 0x3886, 0x389e, 0x38aa, 0x38b2, 0x38bc, 0x38d3, - 0x38ea, 0x390e, 0x3931, 0x3952, 0x3975, 0x39ab, 0x39e0, 0x3a16, - // Entry 2080 - 20BF - 0x3a21, 0x3a2a, 0x3a35, 0x3a50, 0x3a73, 0x3a97, 0x3ab8, 0x3adb, - 0x3aee, 0x3b03, 0x3b1a, 0x3b26, 0x3b39, 0x3b48, 0x3b5a, 0x035a, - 0x0369, 0x0384, 0x039c, 0x03b2, 0x03d0, 0x03e2, 0x03f8, 0x0407, - 0x041b, 0x043b, 0x044f, 0x046d, 0x0481, 0x049b, 0x04af, 0x04c2, - 0x04dd, 0x04fa, 0x0517, 0x0536, 0x0554, 0x0573, 0x058e, 0x05b2, - 0x05c3, 0x05db, 0x05f0, 0x0601, 0x061a, 0x0634, 0x064f, 0x0668, - 0x0678, 0x0689, 0x0695, 0x069d, 0x06af, 0x06c9, 0x06e7, 0x02e7, - 0x02ef, 0x02f8, 0x0300, 0x0311, 0x0320, 0x032b, 0x0349, 0x035c, - // Entry 20C0 - 20FF - 0x0364, 0x037f, 0x0393, 0x0393, 0x03a4, 0x03b5, 0x03c8, 0x03da, - 0x03ec, 0x03fd, 0x0410, 0x0423, 0x0435, 0x0447, 0x045c, 0x0471, - 0x0488, 0x049f, 0x04b5, 0x04cb, 0x04e3, 0x04fa, 0x0511, 0x0526, - 0x053d, 0x0554, 0x056d, 0x0585, 0x059d, 0x05b4, 0x05cd, 0x05e6, - 0x05fe, 0x0616, 0x0631, 0x064c, 0x0669, 0x0686, 0x06a2, 0x06be, - 0x06dc, 0x06f9, 0x0716, 0x0731, 0x0744, 0x0757, 0x076c, 0x0780, - 0x0794, 0x07a7, 0x07bc, 0x07d1, 0x07e5, 0x07f9, 0x0810, 0x0827, - 0x0840, 0x0859, 0x0871, 0x0889, 0x08a3, 0x08bc, 0x08d5, 0x08ec, - // Entry 2100 - 213F - 0x090e, 0x0930, 0x0952, 0x0974, 0x0996, 0x09b8, 0x09da, 0x09fc, - 0x0a1e, 0x0a40, 0x0a62, 0x0a84, 0x0aa6, 0x0ac8, 0x0aea, 0x0b0c, - 0x0b2e, 0x0b50, 0x0b72, 0x0b94, 0x0bb6, 0x0bd8, 0x0bfa, 0x0c1c, - 0x0c3e, 0x0c60, 0x0c7e, 0x0c9c, 0x0cba, 0x0cd8, 0x0cf6, 0x0d14, - 0x0d32, 0x0d50, 0x0d6e, 0x0d8c, 0x0daa, 0x0dc8, 0x0de6, 0x0e04, - 0x0e22, 0x0e40, 0x0e5e, 0x0e7c, 0x0e9a, 0x0eb8, 0x0ed6, 0x0ef4, - 0x0f12, 0x0f30, 0x0f4e, 0x0f6c, 0x0f88, 0x0fa4, 0x0fc0, 0x0fdc, - 0x0ff8, 0x1014, 0x1030, 0x104c, 0x1068, 0x1084, 0x10a0, 0x10bc, - // Entry 2140 - 217F - 0x10d8, 0x10f4, 0x1110, 0x112c, 0x1148, 0x1164, 0x1180, 0x119c, - 0x11b8, 0x11d4, 0x11f0, 0x120c, 0x1228, 0x1244, 0x1256, 0x1274, - 0x1292, 0x12b2, 0x12d2, 0x12f1, 0x1310, 0x1331, 0x1351, 0x1371, - 0x138f, 0x13a7, 0x13bf, 0x13d9, 0x13f2, 0x140b, 0x1423, 0x143d, - 0x1457, 0x1470, 0x1489, 0x14a4, 0x14c1, 0x14de, 0x14f9, 0x1514, - 0x153d, 0x1566, 0x158d, 0x15b4, 0x15e0, 0x160c, 0x1636, 0x1660, - 0x1681, 0x16a8, 0x16cf, 0x16f0, 0x1710, 0x1736, 0x175c, 0x177c, - 0x179b, 0x17c0, 0x17e5, 0x1804, 0x1822, 0x1846, 0x186a, 0x1888, - // Entry 2180 - 21BF - 0x18ad, 0x18d8, 0x1902, 0x192c, 0x1957, 0x1981, 0x19ab, 0x19d0, - 0x19f4, 0x1a1e, 0x1a47, 0x1a70, 0x1a9a, 0x1ac3, 0x1aec, 0x1b10, - 0x1b36, 0x1b62, 0x1b8e, 0x1bba, 0x1be6, 0x1c12, 0x1c3e, 0x1c64, - 0x1c88, 0x1cb2, 0x1cdc, 0x1d06, 0x1d30, 0x1d5a, 0x1d84, 0x1da8, - 0x1dd2, 0x1e02, 0x1e32, 0x1e62, 0x1e91, 0x1ec0, 0x1ef0, 0x1f1f, - 0x1f4e, 0x1f7d, 0x1fac, 0x1fdb, 0x200a, 0x203a, 0x206a, 0x2094, - 0x20bd, 0x20e6, 0x210d, 0x2134, 0x2152, 0x216e, 0x2197, 0x21c0, - 0x21e2, 0x220a, 0x2232, 0x2253, 0x227a, 0x22a1, 0x22c1, 0x22e7, - // Entry 21C0 - 21FF - 0x230d, 0x232c, 0x2359, 0x2386, 0x23ac, 0x23d8, 0x2404, 0x2429, - 0x2457, 0x2485, 0x24ac, 0x24d8, 0x2504, 0x2529, 0x255b, 0x258d, - 0x25b8, 0x25dd, 0x2601, 0x2623, 0x2646, 0x267b, 0x26b0, 0x26d1, - 0x26e8, 0x26fd, 0x2715, 0x272c, 0x2743, 0x2758, 0x2770, 0x2787, - 0x27ae, 0x27d2, 0x27f9, 0x281d, 0x282d, 0x2843, 0x285a, 0x2873, - 0x2883, 0x289b, 0x28b5, 0x28ce, 0x28d8, 0x28f0, 0x2909, 0x2920, - 0x292f, 0x2947, 0x295d, 0x2972, 0x2982, 0x298d, 0x2999, 0x29a3, - 0x29b9, 0x29cf, 0x29e2, 0x29f6, 0x2a09, 0x2a3b, 0x2a5e, 0x2a90, - // Entry 2200 - 223F - 0x2ac3, 0x2ad7, 0x2afa, 0x2b2d, 0x2b39, 0x2b45, 0x2b66, 0x2b90, - 0x2bab, 0x2bc4, 0x2bea, 0x2c14, 0x2c3e, 0x2c62, 0x2c74, 0x2c86, - 0x2c95, 0x2ca4, 0x2cbc, 0x2cd4, 0x2ce7, 0x2cfa, 0x2d14, 0x2d2e, - 0x2d4e, 0x2d6e, 0x2d8b, 0x2da8, 0x2dcb, 0x2dee, 0x2e0a, 0x2e26, - 0x2e42, 0x2e5e, 0x2e80, 0x2ea2, 0x2ebe, 0x2eda, 0x2efc, 0x2f1e, - 0x2f39, 0x2f54, 0x2f61, 0x2f6e, 0x2f9a, 0x2fa1, 0x2fa8, 0x2fb4, - 0x2fc1, 0x2fda, 0x2fe2, 0x2fee, 0x3009, 0x3025, 0x3041, 0x305d, - 0x3083, 0x30b0, 0x30c6, 0x30dd, 0x30eb, 0x30ff, 0x311e, 0x313d, - // Entry 2240 - 227F - 0x315d, 0x317e, 0x319f, 0x31bf, 0x31d0, 0x31e1, 0x31fb, 0x3214, - 0x322d, 0x3247, 0x3253, 0x326e, 0x328a, 0x32b4, 0x32df, 0x3308, - 0x332b, 0x3354, 0x337e, 0x338a, 0x33af, 0x33d4, 0x33fa, 0x3420, - 0x3445, 0x346a, 0x3490, 0x34b6, 0x34c9, 0x34dd, 0x34f0, 0x3503, - 0x3516, 0x352f, 0x3548, 0x355c, 0x356f, 0x3574, 0x357c, 0x3583, - 0x3588, 0x3592, 0x359c, 0x35a5, 0x35b1, 0x35b4, 0x35c2, 0x35d1, - 0x35dc, 0x35e6, 0x35f5, 0x3604, 0x360e, 0x3623, 0x3634, 0x363b, - 0x3653, 0x365f, 0x3670, 0x3681, 0x3689, 0x36ad, 0x36c6, 0x36e0, - // Entry 2280 - 22BF - 0x36f9, 0x3710, 0x372a, 0x3743, 0x3757, 0x3763, 0x3773, 0x3781, - 0x3789, 0x378d, 0x379b, 0x37a2, 0x37b3, 0x37c5, 0x37d6, 0x37e2, - 0x37ec, 0x37fd, 0x3809, 0x3811, 0x3823, 0x3833, 0x3843, 0x3856, - 0x3866, 0x3877, 0x388b, 0x389c, 0x38ab, 0x38be, 0x38d0, 0x38e2, - 0x38f5, 0x3907, 0x3918, 0x391f, 0x392a, 0x392f, 0x3938, 0x393f, - 0x3945, 0x394b, 0x3952, 0x3957, 0x395c, 0x3962, 0x3968, 0x396e, - 0x3971, 0x3976, 0x397b, 0x3983, 0x398e, 0x3997, 0x399f, 0x39a5, - 0x39b5, 0x39c6, 0x39d6, 0x39e8, 0x39fa, 0x3a0a, 0x3a1a, 0x3a2b, - // Entry 22C0 - 22FF - 0x3a3b, 0x3a4d, 0x3a5f, 0x3a6f, 0x3a7f, 0x3a8f, 0x3aa1, 0x3ab0, - 0x3ac0, 0x3ad0, 0x3ae2, 0x3af1, 0x3afc, 0x3b08, 0x3b13, 0x3b26, - 0x3b3c, 0x3b4b, 0x3b5d, 0x3b6d, 0x3b7e, 0x3b8f, 0x3ba9, 0x3bcd, - 0x3bf1, 0x3c15, 0x3c39, 0x3c5d, 0x3c81, 0x3ca5, 0x3ccb, 0x3ceb, - 0x3d00, 0x3d1f, 0x3d33, 0x3d44, 0x3d4e, 0x3d58, 0x3d62, 0x3d6c, - 0x3d76, 0x3d80, 0x3d9b, 0x3db5, 0x3dd6, 0x3df6, 0x3e07, 0x3e17, - 0x3e2e, 0x3e43, 0x3e59, 0x3e6f, 0x3e79, 0x3e83, 0x3e92, 0x3e98, - 0x3ea6, 0x3eba, 0x3ec0, 0x3ec7, 0x3ecd, 0x3ed1, 0x3ee0, 0x3eeb, - // Entry 2300 - 233F - 0x3ef7, 0x3f0a, 0x3f26, 0x3f41, 0x3f4d, 0x3f5e, 0x3f71, 0x3f82, - 0x3fa2, 0x3fb6, 0x3fcb, 0x3ff4, 0x4012, 0x4032, 0x4045, 0x4058, - 0x4071, 0x4080, 0x408e, 0x40aa, 0x40b0, 0x40bb, 0x40c1, 0x40c6, - 0x40cc, 0x40d0, 0x40d5, 0x40db, 0x40ec, 0x40f3, 0x40fe, 0x4106, - 0x4114, 0x411f, 0x4127, 0x4132, 0x4144, 0x4157, 0x4169, 0x417c, - 0x4190, 0x41a0, 0x41a4, 0x41b1, 0x41c7, 0x41df, 0x41f7, 0x420e, - 0x421c, 0x4228, 0x4231, 0x4235, 0x4240, 0x4257, 0x426d, 0x4273, - 0x427b, 0x429d, 0x42bb, 0x42d9, 0x42ee, 0x4303, 0x4312, 0x4334, - // Entry 2340 - 237F - 0x4345, 0x4354, 0x4384, 0x438f, 0x43a6, 0x43bd, 0x43db, 0x4406, - 0x440f, 0x4430, 0x4450, 0x4462, 0x4477, 0x4484, 0x448a, 0x4490, - 0x449d, 0x44ad, 0x44be, 0x44d7, 0x44df, 0x44f1, 0x44f9, 0x4505, - 0x450a, 0x4512, 0x4525, 0x452a, 0x4533, 0x4543, 0x4547, 0x455b, - 0x4575, 0x457e, 0x4591, 0x45bf, 0x45d4, 0x45e8, 0x45f6, 0x460a, - 0x4618, 0x462e, 0x4645, 0x464f, 0x4657, 0x465f, 0x466a, 0x4675, - 0x4681, 0x468d, 0x469f, 0x46a5, 0x46b7, 0x46c0, 0x46c9, 0x46d3, - 0x46e3, 0x46f3, 0x4709, 0x4711, 0x471f, 0x4733, 0x4744, 0x4755, - // Entry 2380 - 23BF - 0x476c, 0x4777, 0x4791, 0x47a5, 0x47b2, 0x47bf, 0x47dc, 0x47f8, - 0x481a, 0x4833, 0x484a, 0x4861, 0x4869, 0x4883, 0x4895, 0x48ab, - 0x48c2, 0x48d5, 0x48ee, 0x48fb, 0x490e, 0x491c, 0x4930, 0x4945, - 0x495d, 0x4978, 0x498e, 0x49b2, 0x49dc, 0x49f5, 0x4a0d, 0x4a25, - 0x4a49, 0x4a67, 0x4a8c, 0x4a9a, 0x4aa8, 0x4ace, 0x4af4, 0x4b1b, - 0x4b24, 0x4b3e, 0x4b55, 0x4b5c, 0x4b69, 0x4b80, 0x4ba8, 0x4bd6, - 0x4be0, 0x4bf5, 0x4c10, 0x4c36, 0x4c5c, 0x4c7d, 0x4c9e, 0x4cba, - 0x4cd6, 0x4cf5, 0x4d10, 0x4d2d, 0x4d3f, 0x4d52, 0x4d64, 0x4d95, - // Entry 23C0 - 23FF - 0x4dbf, 0x4df0, 0x4e1a, 0x4e48, 0x4e76, 0x4e99, 0x4eb8, 0x4edd, - 0x4eee, 0x4f0e, 0x4f1a, 0x4f35, 0x4f55, 0x4f76, 0x4fa0, 0x4fcb, - 0x4ff6, 0x5022, 0x5053, 0x5085, 0x50af, 0x50da, 0x5104, 0x512f, - 0x5151, 0x5174, 0x5196, 0x51b8, 0x51dc, 0x51ff, 0x5222, 0x5244, - 0x5268, 0x528c, 0x52af, 0x52d2, 0x52f6, 0x531a, 0x5340, 0x5365, - 0x538a, 0x53ae, 0x53d4, 0x53fa, 0x541f, 0x5444, 0x5471, 0x549e, - 0x54cd, 0x54fb, 0x5529, 0x5556, 0x5585, 0x55b4, 0x55e2, 0x5610, - 0x5632, 0x5641, 0x5651, 0x5664, 0x567a, 0x5690, 0x56a6, 0x56c5, - // Entry 2400 - 243F - 0x56e8, 0x5708, 0x572e, 0x5755, 0x5782, 0x5798, 0x57c0, 0x57eb, - 0x5805, 0x5836, 0x5865, 0x5881, 0x58ad, 0x58d0, 0x58f2, 0x591d, - 0x5949, 0x597a, 0x59ab, 0x59de, 0x59e8, 0x5a1b, 0x5a3f, 0x5a5f, - 0x5a7f, 0x5a9f, 0x5abf, 0x5ae5, 0x5b0b, 0x5b31, 0x5b51, 0x5b78, - 0x5b95, 0x5bb8, 0x5bd6, 0x5be7, 0x5bfe, 0x5c2c, 0x5c39, 0x5c44, - 0x5c51, 0x5c6c, 0x5c88, 0x5c9a, 0x5cba, 0x5cd4, 0x5cf7, 0x5d13, - 0x5d20, 0x5d3d, 0x5d50, 0x5d62, 0x5d80, 0x5d8c, 0x5da6, 0x5dc1, - 0x5ddb, 0x5dea, 0x5dfa, 0x5e09, 0x5e16, 0x5e25, 0x5e44, 0x5e57, - // Entry 2440 - 247F - 0x5e64, 0x5e73, 0x5e81, 0x5e9a, 0x5ebc, 0x5ed7, 0x5f06, 0x5f36, - 0x5f56, 0x5f77, 0x5f9d, 0x5fc4, 0x5fe3, 0x6003, 0x6029, 0x6050, - 0x607e, 0x60ad, 0x60d4, 0x60fc, 0x6113, 0x612c, 0x614d, 0x616a, - 0x6187, 0x619b, 0x61b0, 0x61c5, 0x61e0, 0x61fc, 0x6218, 0x6235, - 0x6253, 0x6277, 0x629c, 0x62ba, 0x62cf, 0x62e5, 0x62fb, 0x6312, - 0x6328, 0x633f, 0x6356, 0x636e, 0x6384, 0x639b, 0x63b2, 0x63ca, - 0x63e1, 0x63f9, 0x6411, 0x642a, 0x6440, 0x6457, 0x646e, 0x6486, - 0x649d, 0x64b5, 0x64cd, 0x64e6, 0x64fd, 0x6515, 0x652d, 0x6546, - // Entry 2480 - 24BF - 0x655e, 0x6577, 0x6590, 0x65aa, 0x65c0, 0x65d7, 0x65ee, 0x6606, - 0x661d, 0x6635, 0x664d, 0x6666, 0x667d, 0x6695, 0x66ad, 0x66c6, - 0x66de, 0x66f7, 0x6710, 0x672a, 0x6741, 0x6759, 0x6771, 0x678a, - 0x67a2, 0x67bb, 0x67d4, 0x67ee, 0x6806, 0x681f, 0x6838, 0x6852, - 0x686b, 0x6885, 0x689f, 0x68ba, 0x68d0, 0x68e7, 0x68fe, 0x6916, - 0x692d, 0x6945, 0x695d, 0x6976, 0x698d, 0x69a5, 0x69bd, 0x69d6, - 0x69ee, 0x6a07, 0x6a20, 0x6a3a, 0x6a51, 0x6a69, 0x6a81, 0x6a9a, - 0x6ab2, 0x6acb, 0x6ae4, 0x6afe, 0x6b16, 0x6b2f, 0x6b48, 0x6b62, - // Entry 24C0 - 24FF - 0x6b7b, 0x6b95, 0x6baf, 0x6bca, 0x6be1, 0x6bf9, 0x6c11, 0x6c2a, - 0x6c42, 0x6c5b, 0x6c74, 0x6c8e, 0x6ca6, 0x6cbf, 0x6cd8, 0x6cf2, - 0x6d0b, 0x6d25, 0x6d3f, 0x6d5a, 0x6d72, 0x6d8b, 0x6da4, 0x6dbe, - 0x6dd7, 0x6df1, 0x6e0b, 0x6e26, 0x6e3f, 0x6e59, 0x6e73, 0x6e8e, - 0x6ea8, 0x6ec3, 0x6ede, 0x6efa, 0x6f10, 0x6f27, 0x6f3e, 0x6f56, - 0x6f6d, 0x6f85, 0x6f9d, 0x6fb6, 0x6fcd, 0x6fe5, 0x6ffd, 0x7016, - 0x702e, 0x7047, 0x7060, 0x707a, 0x7091, 0x70a9, 0x70c1, 0x70da, - 0x70f2, 0x710b, 0x7124, 0x713e, 0x7156, 0x716f, 0x7188, 0x71a2, - // Entry 2500 - 253F - 0x71bb, 0x71d5, 0x71ef, 0x720a, 0x7221, 0x7239, 0x7251, 0x726a, - 0x7282, 0x729b, 0x72b4, 0x72ce, 0x72e6, 0x72ff, 0x7318, 0x7332, - 0x734b, 0x7365, 0x737f, 0x739a, 0x73b2, 0x73cb, 0x73e4, 0x73fe, - 0x7417, 0x7431, 0x744b, 0x7466, 0x747f, 0x7499, 0x74b3, 0x74ce, - 0x74e8, 0x7503, 0x751e, 0x753a, 0x7551, 0x7569, 0x7581, 0x759a, - 0x75b2, 0x75cb, 0x75e4, 0x75fe, 0x7616, 0x762f, 0x7648, 0x7662, - 0x767b, 0x7695, 0x76af, 0x76ca, 0x76e2, 0x76fb, 0x7714, 0x772e, - 0x7747, 0x7761, 0x777b, 0x7796, 0x77af, 0x77c9, 0x77e3, 0x77fe, - // Entry 2540 - 257F - 0x7818, 0x7833, 0x784e, 0x786a, 0x7882, 0x789b, 0x78b4, 0x78ce, - 0x78e7, 0x7901, 0x791b, 0x7936, 0x794f, 0x7969, 0x7983, 0x799e, - 0x79b8, 0x79d3, 0x79ee, 0x7a0a, 0x7a23, 0x7a3d, 0x7a57, 0x7a72, - 0x7a8c, 0x7aa7, 0x7ac2, 0x7ade, 0x7af8, 0x7b13, 0x7b2e, 0x7b4a, - 0x7b65, 0x7b81, 0x7b9d, 0x7bba, 0x7bea, 0x7c21, 0x7c4c, 0x7c78, - 0x7ca4, 0x7cc8, 0x7ce7, 0x7d07, 0x7d2d, 0x7d51, 0x7d65, 0x7d7b, - 0x7d96, 0x7db2, 0x7dcd, 0x7de9, 0x7e10, 0x7e31, 0x7e45, 0x7e5b, - 0x7e8a, 0x7ec0, 0x7ee5, 0x7f1f, 0x7f60, 0x7f74, 0x7f89, 0x7fa4, - // Entry 2580 - 25BF - 0x7fc0, 0x7fe0, 0x8001, 0x802a, 0x8054, 0x8073, 0x8092, 0x80ac, - 0x80c6, 0x80e0, 0x80fa, 0x811f, 0x8144, 0x8169, 0x818e, 0x81b7, - 0x81e0, 0x820a, 0x8234, 0x825e, 0x8287, 0x82b1, 0x82db, 0x82fd, - 0x832b, 0x835b, 0x838a, 0x83ba, 0x83d8, 0x83f9, 0x8414, 0x8432, - 0x8454, 0x8479, 0x84a1, 0x84cc, 0x84ed, 0x850a, 0x8536, 0x8562, - 0x858e, 0x85ae, 0x85cd, 0x85e7, 0x860c, 0x8636, 0x865a, 0x867e, - 0x86a2, 0x86c6, 0x86e8, 0x870d, 0x8733, 0x8756, 0x877b, 0x87a1, - 0x87c7, 0x87ef, 0x8816, 0x883e, 0x8863, 0x888a, 0x88b1, 0x88d9, - // Entry 25C0 - 25FF - 0x8901, 0x892b, 0x8954, 0x897e, 0x89a5, 0x89ce, 0x8a13, 0x8a58, - 0x8a9f, 0x8ae8, 0x8b2c, 0x8b74, 0x8bb8, 0x8c00, 0x8c2e, 0x8c5e, - 0x8c8d, 0x8cbe, 0x8d05, 0x8d4c, 0x8d70, 0x8d92, 0x8db7, 0x8ddb, - 0x8e00, 0x8e26, 0x8e45, 0x8e66, 0x8e89, 0x8ea6, 0x8ec4, 0x8ee2, - 0x8ef0, 0x8eff, 0x8f0b, 0x8f19, 0x8f36, 0x8f45, 0x8f5a, 0x8f72, - 0x8f8b, 0x8fa1, 0x8fb8, 0x8fd5, 0x8ff3, 0x9012, 0x9032, 0x9053, - 0x9075, 0x90a0, 0x90cf, 0x90fd, 0x9129, 0x9144, 0x9160, 0x917a, - 0x9198, 0x91bc, 0x91de, 0x91ff, 0x9221, 0x922d, 0x9241, 0x925c, - // Entry 2600 - 263F - 0x927b, 0x9298, 0x92ab, 0x92b6, 0x92d2, 0x92ec, 0x92f8, 0x9306, - 0x9319, 0x9335, 0x934d, 0x9367, 0x93a9, 0x93ea, 0x942e, 0x9471, - 0x94b3, 0x94f4, 0x9538, 0x957b, 0x958d, 0x95a3, 0x95c4, 0x95e4, - 0x9603, 0x961d, 0x9631, 0x9641, 0x9658, 0x966d, 0x96b2, 0x96cc, - 0x96f7, 0x970e, 0x9722, 0x9730, 0x9741, 0x9755, 0x977a, 0x97a9, - 0x97c6, 0x97e4, 0x97f4, 0x9808, 0x9816, 0x9828, 0x983f, 0x9855, - 0x9862, 0x9880, 0x98a2, 0x98c3, 0x98e5, 0x9900, 0x991c, 0x9928, - 0x9942, 0x995d, 0x996c, 0x997b, 0x998c, 0x999e, 0x99b6, 0x99cf, - // Entry 2640 - 267F - 0x99e2, 0x99f3, 0x9a15, 0x9a2a, 0x9a47, 0x9a53, 0x9a62, 0x9a82, - 0x9ab3, 0x9ad4, 0x9ae0, 0x9aed, 0x9b18, 0x9b44, 0x9b61, 0x9b6e, - 0x9b8a, 0x9ba6, 0x9bbf, 0x9bd8, 0x9bf2, 0x9c0c, 0x9c25, 0x9c3e, - 0x9c4a, 0x9c62, 0x9c76, 0x9c9c, 0x9ca7, 0x9cba, 0x9cc5, 0x9cd0, - 0x9cf2, 0x9d15, 0x9d19, 0x9d1d, 0x9d37, 0x9d52, 0x9d6e, 0x9d8b, - 0x9da9, 0x9dcb, 0x9de6, 0x9dfe, 0x9e15, 0x9e29, 0x9e37, 0x9e4e, - 0x9e69, 0x9e7d, 0x9e98, 0x9eb3, 0x9ec7, 0x9ee0, 0x9f12, 0x9f45, - 0x9f6c, 0x9f8c, 0x9fa8, 0x9fcf, 0x9fe7, 0xa001, 0xa014, 0xa029, - // Entry 2680 - 26BF - 0xa03f, 0xa043, 0xa05f, 0xa07c, 0xa094, 0xa0b0, 0xa0d1, 0xa0f7, - 0xa111, 0xa129, 0xa143, 0xa15f, 0xa17c, 0xa197, 0xa1b0, 0xa1cc, - 0xa1e7, 0xa204, 0xa222, 0xa239, 0xa25b, 0xa27c, 0xa2a1, 0xa2ae, - 0xa2d5, 0xa2fd, 0xa32f, 0xa353, 0xa368, 0xa37d, 0xa393, 0xa3b2, - 0xa3c2, 0xa3dc, 0xa3fd, 0xa416, 0xa42b, 0xa440, 0xa452, 0xa46b, - 0xa488, 0xa49d, 0xa4b5, 0xa4cd, 0xa4ef, 0xa511, 0xa533, 0xa563, - 0xa57b, 0xa59a, 0xa5b4, 0xa5c7, 0xa5f1, 0xa60b, 0xa624, 0xa636, - 0xa647, 0xa663, 0xa67e, 0xa68e, 0xa69f, 0xa6c1, 0xa6dd, 0xa6f8, - // Entry 26C0 - 26FF - 0xa718, 0xa737, 0xa756, 0xa76f, 0xa78f, 0xa7a6, 0xa7c4, 0xa7e3, - 0xa804, 0xa824, 0xa83e, 0xa856, 0xa887, 0xa8b8, 0xa8d5, 0xa8f4, - 0xa909, 0xa921, 0xa935, 0xa95b, 0xa97a, 0xa995, 0xa9b0, 0xa9d0, - 0xa9e2, 0xa9fe, 0xaa1c, 0xaa4e, 0xaa6d, 0xaa89, 0xaaa8, 0xaaca, - 0xaaef, 0xab0c, 0xab2c, 0xab59, 0xab89, 0xabb5, 0xabe4, 0xac16, - 0xac4a, 0xac62, 0xac7d, 0xaca3, 0xaccc, 0xace9, 0xad09, 0xad3d, - 0xad71, 0xad91, 0xadb4, 0xadde, 0xae08, 0xae3c, 0xae70, 0xaeb4, - 0xaef8, 0xaf15, 0xaf35, 0xaf62, 0xaf92, 0xafb3, 0xafd7, 0xb000, - // Entry 2700 - 273F - 0xb02c, 0xb040, 0xb057, 0xb080, 0xb0ac, 0xb0c3, 0xb0dd, 0xb102, - 0xb124, 0xb141, 0xb15a, 0xb176, 0xb1a3, 0xb1d3, 0xb1df, 0xb1ea, - 0xb202, 0xb219, 0xb235, 0xb25b, 0xb281, 0xb2a8, 0xb2cf, 0xb2e9, - 0xb303, 0xb31e, 0xb339, 0xb357, 0xb375, 0xb397, 0xb3b9, 0xb3c8, - 0xb3d7, 0xb3e6, 0xb3f7, 0xb412, 0xb42f, 0xb454, 0xb47b, 0xb49f, - 0xb4c5, 0xb4e0, 0xb4fd, 0xb51b, 0xb53b, 0xb55a, 0xb57b, 0xb597, - 0xb5b5, 0xb5d2, 0xb5f0, 0xb5fd, 0xb60c, 0xb625, 0xb640, 0xb655, - 0xb66a, 0xb67d, 0xb694, 0xb6aa, 0xb6d8, 0xb6f4, 0xb70a, 0xb722, - // Entry 2740 - 277F - 0xb729, 0xb733, 0xb742, 0xb751, 0xb75e, 0xb772, 0xb795, 0xb7b7, - 0xb7d9, 0xb802, 0xb82f, 0xb84b, 0xb866, 0xb889, 0xb899, 0xb8a7, - 0xb8bd, 0xb8dc, 0xb908, 0xb927, 0xb946, 0xb961, 0xb980, 0xb99c, - 0xb9bf, 0xb9e9, 0xb9fe, 0xba15, 0xba2f, 0xba58, 0xba84, 0xbaa2, - 0xbac4, 0xbadb, 0xbaed, 0xbb05, 0xbb1b, 0xbb31, 0xbb47, 0xbb5d, - 0xbb73, 0xbb88, 0xbb9b, 0xbbb0, 0xbbc6, 0xbbdc, 0xbbf2, 0xbc08, - 0xbc1e, 0xbc31, 0xbc54, 0xbc75, 0xbc97, 0xbcb7, 0xbcd1, 0xbcee, - 0xbd19, 0xbd43, 0xbd5f, 0xbd7c, 0xbd97, 0xbdb5, 0xbdc2, 0xbdd4, - // Entry 2780 - 27BF - 0xbde6, 0xbdfd, 0xbe14, 0xbe22, 0xbe30, 0xbe3d, 0xbe4a, 0xbe62, - 0xbe74, 0xbe88, 0xbe9c, 0xbeb0, 0xbec4, 0xbed7, 0xbeea, 0xbefd, - 0xbf15, 0xbf2d, 0xbf43, 0xbf59, 0xbf75, 0xbf8b, 0xbfa7, 0xbfc4, - 0xbff3, 0xc029, 0xc04c, 0xc072, 0xc092, 0xc0c0, 0xc0f5, 0xc119, - 0xc152, 0xc192, 0xc1ab, 0xc1cc, 0xc1ed, 0xc219, 0xc246, 0xc26b, - 0xc28c, 0xc2a5, 0xc2bf, 0xc2ec, 0xc31a, 0xc33e, 0xc363, 0xc38f, - 0xc3bc, 0xc3e2, 0xc3fb, 0xc418, 0xc429, 0xc439, 0xc449, 0xc466, - 0xc483, 0xc495, 0xc4b0, 0xc4cf, 0xc4db, 0xc4f0, 0xc514, 0xc53c, - // Entry 27C0 - 27FF - 0xc564, 0xc590, 0xc5bd, 0xc5f0, 0xc60f, 0xc62c, 0xc64c, 0xc66b, - 0xc68b, 0xc6a8, 0xc6c8, 0xc6e8, 0xc708, 0xc728, 0xc74e, 0xc772, - 0xc799, 0xc7bf, 0xc7ea, 0xc819, 0xc83f, 0xc863, 0xc88a, 0xc8b0, - 0x00b0, 0x00d7, 0x00fe, 0x0125, 0x014c, 0x0189, 0x01c4, 0x0202, - 0x023f, 0x0251, 0x0261, 0x02a6, 0x02f0, 0x0335, 0x037f, 0x03a6, - 0x03cb, 0x03f3, 0x041a, 0x043d, 0x045e, 0x0482, 0x04a5, 0x04d7, - 0x050a, 0x053b, 0x056b, 0x0576, 0x0582, 0x058e, 0x059b, 0x05c4, - 0x05da, 0x01da, 0x020d, 0x0240, 0x0274, 0x02a8, 0x02cd, 0x02f0, - // Entry 2800 - 283F - 0x0316, 0x033b, 0x0372, 0x03aa, 0x03df, 0x0415, 0x044a, 0x0480, - 0x04b7, 0x04ef, 0x0519, 0x0544, 0x056c, 0x0595, 0x05bd, 0x05e6, - 0x0610, 0x063b, 0x0651, 0x0668, 0x067c, 0x0691, 0x06a5, 0x06ba, - 0x06d0, 0x06e7, 0x0717, 0x0736, 0x0336, 0x034d, 0x0356, 0x0364, - 0x0378, 0x038d, 0x03a2, 0x03ba, 0x03c7, 0x03f0, 0x041b, 0x0446, - 0x0472, 0x0072, 0x0087, 0x009f, 0x00bc, 0x00e1, 0x00f8, 0x0117, - 0x0130, 0x0140, 0x0140, 0x0173, 0x01a4, 0x01d8, 0x020b, 0x020b, - 0x0228, 0x0246, 0x0264, 0x0285, 0x02a4, 0x02c3, 0x02e4, 0x0303, - // Entry 2840 - 287F - 0x0323, 0x0341, 0x0367, 0x0382, 0x03a2, 0x03c0, 0x03e1, 0x0402, - 0x0421, 0x043e, 0x045e, 0x047d, 0x049c, 0x04bc, 0x04d9, 0x04f8, - 0x0516, 0x0533, 0x054f, 0x056d, 0x058a, 0x05aa, 0x05c7, 0x05e5, - 0x0603, 0x0621, 0x0645, 0x0661, 0x0684, 0x06b1, 0x06cd, 0x06f8, - 0x0719, 0x0742, 0x0760, 0x0781, 0x07a2, 0x07c8, 0x07f2, 0x03f2, - 0x040d, 0x0429, 0x0445, 0x0464, 0x0481, 0x049e, 0x04bd, 0x04da, - 0x04f8, 0x0514, 0x0538, 0x0551, 0x056f, 0x058b, 0x05aa, 0x05c9, - 0x05e6, 0x0601, 0x061f, 0x063c, 0x0659, 0x0677, 0x0692, 0x06af, - // Entry 2880 - 28BF - 0x06cb, 0x06e6, 0x0700, 0x071c, 0x0737, 0x0755, 0x0770, 0x078c, - 0x07a8, 0x07c4, 0x07e6, 0x0800, 0x0821, 0x084c, 0x0866, 0x088f, - 0x08ae, 0x08d5, 0x08f1, 0x0910, 0x092f, 0x0953, 0x097b, 0x017b, - 0x01a1, 0x01c5, 0x01ed, 0x020f, 0x022f, 0x024f, 0x0278, 0x029d, - 0x02c0, 0x02e5, 0x0308, 0x032d, 0x0350, 0x036a, 0x038a, 0x03a7, - 0x03c8, 0x03ec, 0x040c, 0x042a, 0x0448, 0x0463, 0x047c, 0x049b, - 0x04ba, 0x04df, 0x0508, 0x052b, 0x0549, 0x0562, 0x0588, 0x05ae, - 0x05c8, 0x05e0, 0x05fa, 0x0612, 0x062d, 0x0646, 0x0661, 0x067a, - // Entry 28C0 - 28FF - 0x0693, 0x06aa, 0x06c3, 0x06da, 0x06f4, 0x070c, 0x0726, 0x073e, - 0x075a, 0x0774, 0x078f, 0x07a8, 0x07c2, 0x07da, 0x07f5, 0x080e, - 0x0826, 0x083c, 0x0854, 0x086a, 0x0883, 0x089a, 0x08b1, 0x08c6, - 0x08de, 0x08f4, 0x090c, 0x0922, 0x093c, 0x0954, 0x096d, 0x0984, - 0x099c, 0x09b2, 0x09ca, 0x09e0, 0x09f9, 0x0a10, 0x0a29, 0x0a40, - 0x0a59, 0x0a70, 0x0a94, 0x0ab6, 0x0ada, 0x0afc, 0x0b23, 0x0b48, - 0x0b6c, 0x0b8e, 0x0bb0, 0x0bd0, 0x0bf6, 0x0c1a, 0x0c3e, 0x0c60, - 0x0c7b, 0x0c94, 0x0cb6, 0x0cd6, 0x0cfb, 0x0d1e, 0x0d42, 0x0d64, - // Entry 2900 - 293F - 0x0d87, 0x0da8, 0x0dcc, 0x0dee, 0x0e13, 0x0e36, 0x0e59, 0x0e7a, - 0x0e9b, 0x0eba, 0x0ede, 0x0f00, 0x0f24, 0x0f46, 0x0f6d, 0x0f92, - 0x0fb6, 0x0fd8, 0x0ffe, 0x1022, 0x1048, 0x106c, 0x1090, 0x10b2, - 0x10d6, 0x10f8, 0x111c, 0x113e, 0x114f, 0x1162, 0x1175, 0x118a, - 0x119e, 0x11b2, 0x11ca, 0x11f2, 0x1218, 0x1242, 0x126a, 0x1283, - 0x12a2, 0x12c1, 0x12e4, 0x1305, 0x0305, 0x0320, 0x0346, 0x036e, - 0x038d, 0x03a5, 0x03b5, 0x03d1, 0x03e9, 0x0402, 0x041b, 0x0434, - 0x044c, 0x0465, 0x047e, 0x0497, 0x04af, 0x04c8, 0x04e1, 0x04fa, - // Entry 2940 - 297F - 0x0513, 0x052b, 0x0544, 0x055e, 0x0577, 0x0590, 0x05a9, 0x05c1, - 0x05db, 0x05f5, 0x060f, 0x0628, 0x0642, 0x065c, 0x0675, 0x068e, - 0x06a7, 0x06c1, 0x06da, 0x06f4, 0x070d, 0x0725, 0x073e, 0x0756, - 0x076f, 0x0788, 0x0388, 0x03a0, 0x03a0, 0x03b9, 0x03b9, 0x03cb, - 0x03de, 0x03f2, 0x0405, 0x041a, 0x043c, 0x044f, 0x0462, 0x0476, - 0x048a, 0x049f, 0x04b2, 0x04c5, 0x04d8, 0x04f2, 0x0507, 0x051a, - 0x053c, 0x0556, 0x056a, 0x057d, 0x0591, 0x05ac, 0x05bf, 0x05d9, - 0x05eb, 0x05ff, 0x061b, 0x0636, 0x0649, 0x065c, 0x066f, 0x068a, - // Entry 2980 - 29BF - 0x06a5, 0x06b8, 0x06ca, 0x06dd, 0x06f1, 0x0705, 0x0720, 0x0739, - 0x074c, 0x0760, 0x0774, 0x0787, 0x079b, 0x07af, 0x07c3, 0x07d6, - 0x07e9, 0x07fc, 0x080f, 0x082d, 0x0841, 0x0853, 0x0865, 0x0065, - 0x0090, 0x00a7, 0x00a7, 0x00c0, 0x00d5, 0x00ea, 0x00ff, 0x0114, - 0x012a, 0x013f, 0x0154, 0x0169, 0x017e, 0x0194, 0x01b0, 0x01c5, - 0x01da, 0x01f0, 0x0205, 0x021b, 0x0231, 0x0247, 0x025c, 0x0272, - 0x0288, 0x029f, 0x02b5, 0x02b5, 0x02ca, 0x02df, 0x02f4, 0x030a, - 0x0320, 0x0335, 0x034a, 0x034a, 0x035f, 0x0374, 0x0389, 0x039f, - // Entry 29C0 - 29FF - 0x03b5, 0x03ca, 0x03df, 0x03df, 0x03f4, 0x0409, 0x041e, 0x0434, - 0x044a, 0x045f, 0x0474, 0x0074, 0x008a, 0x00a0, 0x00b6, 0x00cd, - 0x00e4, 0x00fa, 0x0110, 0x0110, 0x0125, 0x013a, 0x014f, 0x0165, - 0x017b, 0x0190, 0x01a5, 0x01a5, 0x01ba, 0x01cf, 0x01e4, 0x01fa, - 0x0210, 0x0225, 0x023a, 0x023a, 0x024f, 0x0264, 0x0279, 0x028f, - 0x02a5, 0x02ba, 0x02cf, 0x02cf, 0x02e4, 0x02f9, 0x030e, 0x0324, - 0x033a, 0x034f, 0x0364, 0x0364, 0x0380, 0x039c, 0x03b9, 0x03d5, - 0x03f2, 0x040e, 0x042a, 0x0446, 0x0462, 0x047e, 0x0499, 0x04b5, - // Entry 2A00 - 2A3F - 0x04d1, 0x04ed, 0x0509, 0x0525, 0x0542, 0x055f, 0x057c, 0x059b, - 0x05b9, 0x05d8, 0x05f3, 0x060f, 0x062e, 0x0654, 0x0671, 0x068d, - 0x06b1, 0x06d5, 0x06f6, 0x0720, 0x073f, 0x0765, 0x077e, 0x0798, - 0x07b8, 0x07d9, 0x07f4, 0x0816, 0x0831, 0x084b, 0x0866, 0x0873, - 0x088f, 0x08ac, 0x08bd, 0x08c8, 0x08da, 0x08f5, 0x0901, 0x090e, - 0x091e, 0x092c, 0x0947, 0x095c, 0x0970, 0x097b, 0x0990, 0x09a5, - 0x09c0, 0x09dc, 0x09f0, 0x0a04, 0x0a20, 0x0a3d, 0x0a52, 0x0a68, - 0x0a80, 0x0a99, 0x0ab0, 0x0ac8, 0x0adf, 0x0af7, 0x0b18, 0x0b39, - // Entry 2A40 - 2A7F - 0x0b55, 0x0b62, 0x0b78, 0x0b86, 0x0b90, 0x0ba9, 0x0bb5, 0x0bbf, - 0x0bcb, 0x0bdb, 0x0bf1, 0x0c08, 0x0c15, 0x0c2a, 0x0c35, 0x0c42, - 0x0c58, 0x0c69, 0x0c7d, 0x0c86, 0x0c93, 0x0ca1, 0x0cc5, 0x0cda, - 0x0cf0, 0x00f0, 0x0102, 0x0113, 0x0129, 0x013f, 0x0157, 0x0169, - 0x0178, 0x0189, 0x019e, 0x01b3, 0x01c9, 0x01d9, 0x01ee, 0x0203, - 0x0217, 0x022b, 0x0241, 0x0256, 0x0267, 0x0279, 0x028e, 0x02a3, - 0x02b8, 0x02cd, 0x02dd, 0x02ec, 0x02ec, 0x02fd, 0x030c, 0x031c, - 0x032d, 0x033f, 0x0353, 0x0368, 0x037d, 0x038d, 0x03a0, 0x03b3, - // Entry 2A80 - 2ABF - 0x03d9, 0x03e8, 0x03f7, 0x0407, 0x0420, 0x042f, 0x0445, 0x045b, - 0x046d, 0x047d, 0x049a, 0x04ad, 0x04c0, 0x04d5, 0x04e9, 0x04f9, - 0x050a, 0x0519, 0x0528, 0x0537, 0x054c, 0x0561, 0x0571, 0x0583, - 0x0598, 0x05ad, 0x05c4, 0x05d5, 0x05e8, 0x05fc, 0x0610, 0x062c, - 0x0647, 0x0657, 0x0676, 0x0694, 0x06a4, 0x06c1, 0x06dc, 0x06f0, - 0x0704, 0x0714, 0x0731, 0x0745, 0x0759, 0x0776, 0x0793, 0x07a8, - 0x07bd, 0x07cd, 0x07dd, 0x0804, 0x0821, 0x083e, 0x085a, 0x086d, - 0x0880, 0x0895, 0x08b1, 0x08c1, 0x08df, 0x08ef, 0x0900, 0x091d, - // Entry 2AC0 - 2AFF - 0x093a, 0x0957, 0x0973, 0x0990, 0x09ad, 0x09ca, 0x09e7, 0x0a05, - 0x0a23, 0x0a42, 0x0a61, 0x0a73, 0x0a92, 0x0ab1, 0x02b1, 0x02c3, - 0x02d6, 0x02e8, 0x02fc, 0x0311, 0x0324, 0x0336, 0x0348, 0x035a, - 0x036d, 0x0381, 0x0395, 0x03ac, 0x03c0, 0x03d2, 0x03e6, 0x03fd, - 0x0411, 0x0425, 0x0438, 0x044c, 0x0469, 0x0488, 0x049a, 0x04b3, - 0x04c6, 0x04da, 0x04f0, 0x0504, 0x0518, 0x0530, 0x0544, 0x055a, - 0x056b, 0x0583, 0x0599, 0x05ab, 0x05bf, 0x05d3, 0x05e6, 0x05f9, - 0x060d, 0x0620, 0x0635, 0x064a, 0x0661, 0x0675, 0x0688, 0x069e, - // Entry 2B00 - 2B3F - 0x06b3, 0x06c5, 0x06e0, 0x06fb, 0x0715, 0x072d, 0x0741, 0x0753, - 0x0767, 0x077d, 0x0790, 0x07a4, 0x07ba, 0x07cd, 0x07e0, 0x07f5, - 0x0807, 0x081c, 0x0831, 0x0843, 0x0858, 0x086a, 0x087c, 0x088e, - 0x08a1, 0x08b4, 0x08c7, 0x08da, 0x08ee, 0x0903, 0x0918, 0x092e, - 0x0940, 0x0953, 0x0967, 0x097b, 0x098e, 0x09a1, 0x09b6, 0x09cd, - 0x09eb, 0x09ff, 0x0a12, 0x0a24, 0x0a36, 0x0a4d, 0x0a60, 0x0a74, - 0x0a87, 0x0a9b, 0x0aae, 0x0ac0, 0x0ad4, 0x0af0, 0x0b07, 0x0b21, - 0x0b35, 0x0b48, 0x0b5b, 0x0b6d, 0x0b81, 0x0b95, 0x0ba9, 0x0bbe, - // Entry 2B40 - 2B7F - 0x0bd2, 0x0be6, 0x0bf9, 0x0c0d, 0x0c22, 0x0c35, 0x0c48, 0x0c5a, - 0x0c6c, 0x0c80, 0x0c96, 0x0ca8, 0x0cba, 0x0ccd, 0x0cdf, 0x0cf3, - 0x0d06, 0x0d1d, 0x0d30, 0x0d45, 0x0d5a, 0x0d6f, 0x0d84, 0x0d97, - 0x0dae, 0x0dc2, 0x0dd6, 0x0dea, 0x0dff, 0x0e13, 0x0e30, 0x0e46, - 0x0e59, 0x0e6b, 0x0e7e, 0x0e93, 0x0ea8, 0x0ebb, 0x0ecd, 0x0ee2, - 0x0ef6, 0x0f08, 0x0f1a, 0x0f2d, 0x0f40, 0x0f53, 0x0f68, 0x0f7e, - 0x0f91, 0x0fa4, 0x0fb7, 0x0fd1, 0x0fe7, 0x0ffa, 0x100d, 0x1020, - 0x1034, 0x1048, 0x1068, 0x107b, 0x108e, 0x10a2, 0x10b5, 0x10cb, - // Entry 2B80 - 2BBF - 0x10e8, 0x10fb, 0x110f, 0x1122, 0x1135, 0x1147, 0x1159, 0x116c, - 0x1183, 0x1197, 0x11aa, 0x11bd, 0x11d0, 0x11e4, 0x1203, 0x121a, - 0x122e, 0x1241, 0x1254, 0x1267, 0x127a, 0x128e, 0x12a1, 0x12b6, - 0x12cb, 0x12df, 0x12f8, 0x130b, 0x1320, 0x1333, 0x1345, 0x1358, - 0x136b, 0x137f, 0x1394, 0x13a9, 0x13bd, 0x03bd, 0x03ec, 0x041c, - 0x0456, 0x0491, 0x04c0, 0x04f5, 0x052a, 0x055e, 0x0598, 0x05d3, - 0x060d, 0x0637, 0x0237, 0x0248, 0x0259, 0x026e, 0x0278, 0x029b, - 0x02b5, 0x02cd, 0x02e4, 0x02f6, 0x0309, 0x0322, 0x033c, 0x034f, - // Entry 2BC0 - 2BFF - 0x0363, 0x037c, 0x0396, 0x03b3, 0x03d1, 0x03dc, 0x03e5, 0x0400, - 0x041c, 0x0439, 0x0457, 0x0478, 0x049a, 0x04b3, 0x04cd, 0x04d6, - 0x04fa, 0x0515, 0x0534, 0x0544, 0x0558, 0x056c, 0x0582, 0x0597, - 0x05ac, 0x05c0, 0x05d6, 0x05ec, 0x0601, 0x061c, 0x0638, 0x0657, - 0x0675, 0x0690, 0x06ab, 0x06b4, 0x06cd, 0x06f8, 0x071c, 0x0752, - 0x0776, 0x0789, 0x07b9, 0x07cd, 0x07e4, 0x07fb, 0x081e, 0x0827, - 0x083c, 0x085b, 0x0876, 0x0076, 0x008d, 0x009e, 0x00b5, 0x00c6, - 0x00dd, 0x00ee, 0x0105, 0x0116, 0x012d, 0x013e, 0x0150, 0x0162, - // Entry 2C00 - 2C3F - 0x0174, 0x0186, 0x0198, 0x01aa, 0x01bc, 0x01ce, 0x01e0, 0x01f2, - 0x0204, 0x0216, 0x0228, 0x023a, 0x024c, 0x025e, 0x0270, 0x0282, - 0x0294, 0x02a6, 0x02b8, 0x02ca, 0x02dc, 0x02ee, 0x0306, 0x0318, - 0x032a, 0x033c, 0x034e, 0x0360, 0x0372, 0x0384, 0x0396, 0x03a8, - 0x03ba, 0x03cc, 0x03de, 0x03f0, 0x0402, 0x0414, 0x0426, 0x0438, - 0x044a, 0x045c, 0x046e, 0x0480, 0x0492, 0x04a4, 0x04b6, 0x04c8, - 0x04da, 0x04ec, 0x04fe, 0x0510, 0x0522, 0x0534, 0x054c, 0x055e, - 0x0576, 0x0588, 0x05a0, 0x05b2, 0x05c4, 0x05d6, 0x05e8, 0x05fa, - // Entry 2C40 - 2C7F - 0x060c, 0x0624, 0x0636, 0x0648, 0x065a, 0x066c, 0x067d, 0x068f, - 0x06a7, 0x06bf, 0x02bf, 0x02ec, 0x031e, 0x0341, 0x0369, 0x0380, - 0x039e, 0x03b3, 0x03d2, 0x03e9, 0x03fa, 0x0411, 0x0422, 0x0439, - 0x044a, 0x0461, 0x0472, 0x0489, 0x049a, 0x04ac, 0x04be, 0x04d0, - 0x04e2, 0x04f4, 0x0506, 0x0518, 0x052a, 0x053c, 0x054e, 0x0560, - 0x0572, 0x0584, 0x0596, 0x05a8, 0x05ba, 0x05cc, 0x05de, 0x05f0, - 0x0602, 0x0614, 0x0626, 0x0638, 0x064a, 0x0662, 0x0674, 0x0686, - 0x0698, 0x06aa, 0x06bc, 0x06ce, 0x06e0, 0x06f2, 0x0704, 0x0716, - // Entry 2C80 - 2CBF - 0x0728, 0x073a, 0x074c, 0x075e, 0x0770, 0x0782, 0x0794, 0x07a6, - 0x07b8, 0x07ca, 0x07dc, 0x07ee, 0x0800, 0x0812, 0x0824, 0x0836, - 0x0848, 0x085a, 0x086c, 0x087e, 0x0890, 0x08a8, 0x08ba, 0x08d2, - 0x08e4, 0x08fc, 0x090e, 0x0920, 0x0932, 0x0944, 0x0956, 0x0968, - 0x0980, 0x0992, 0x09a4, 0x09b6, 0x09c8, 0x09d9, 0x09eb, 0x0a03, - 0x0a1b, 0x0a2d, 0x0a3f, 0x0a51, 0x0a63, 0x0a76, 0x0a9c, 0x0ab3, - 0x0ad1, 0x0ae6, 0x02e6, 0x02f7, 0x0308, 0x0319, 0x032a, 0x033b, - 0x034c, 0x035d, 0x036e, 0x037f, 0x0390, 0x03a1, 0x03b2, 0x03c3, - // Entry 2CC0 - 2CFF - 0x03d4, 0x03e6, 0x03f8, 0x040a, 0x041b, 0x042c, 0x043d, 0x044e, - 0x045f, 0x0470, 0x0481, 0x0493, 0x04a5, 0x04b7, 0x04c9, 0x04db, - 0x04ed, 0x04ff, 0x0512, 0x0525, 0x0537, 0x0548, 0x0559, 0x056b, - 0x057c, 0x058e, 0x05a0, 0x05b2, 0x01b2, 0x01c6, 0x01df, 0x01f8, - 0x020b, 0x0224, 0x023d, 0x0251, 0x026a, 0x027d, 0x0297, 0x02b0, - 0x02c9, 0x02e1, 0x02fc, 0x0317, 0x0330, 0x0343, 0x0356, 0x036e, - 0x0386, 0x0398, 0x03af, 0x03c2, 0x03d5, 0x03ed, 0x0402, 0x0417, - 0x042c, 0x0441, 0x0454, 0x0463, 0x0473, 0x0483, 0x0494, 0x04a4, - // Entry 2D00 - 2D3F - 0x04b3, 0x04c4, 0x04d4, 0x04e3, 0x04f3, 0x0504, 0x0514, 0x0524, - 0x0533, 0x0544, 0x0554, 0x0564, 0x0574, 0x0584, 0x0594, 0x05a3, - 0x05b0, 0x05c8, 0x05e2, 0x05fa, 0x0615, 0x0634, 0x064e, 0x066c, - 0x0687, 0x06a6, 0x06bf, 0x06d7, 0x06f2, 0x070d, 0x0727, 0x0741, - 0x0760, 0x077f, 0x0798, 0x07b3, 0x07ce, 0x07ee, 0x0807, 0x081f, - 0x0838, 0x0850, 0x0868, 0x087d, 0x0895, 0x08ab, 0x08c6, 0x08e4, - 0x0901, 0x0919, 0x0932, 0x0945, 0x0959, 0x096b, 0x097f, 0x0992, - 0x09a4, 0x09b7, 0x09cb, 0x01cb, 0x01ee, 0x0211, 0x0230, 0x024f, - // Entry 2D40 - 2D7F - 0x0270, 0x0290, 0x02af, 0x02d1, 0x02f3, 0x0314, 0x0336, 0x0357, - 0x0379, 0x039b, 0x03bc, 0x03db, 0x03ed, 0x03ff, 0x0411, 0x0423, - 0x0435, 0x0448, 0x045a, 0x046d, 0x047f, 0x0492, 0x04a5, 0x04b8, - 0x04ca, 0x04dd, 0x04f1, 0x0505, 0x0517, 0x0529, 0x053c, 0x0550, - 0x0567, 0x057e, 0x0595, 0x05ac, 0x05be, 0x05d0, 0x05e2, 0x01e2, - 0x01ee, 0x01fb, 0x0208, 0x0216, 0x0223, 0x0231, 0x023f, 0x024c, - 0x025b, 0x026a, 0x0278, 0x0287, 0x0296, 0x02a4, 0x02b3, 0x02bf, - 0x02cb, 0x02d7, 0x02e3, 0x02f0, 0x02fc, 0x0309, 0x0316, 0x0323, - // Entry 2D80 - 2DBF - 0x0331, 0x033e, 0x034b, 0x0358, 0x0365, 0x0372, 0x0380, 0x038e, - 0x039d, 0x03ad, 0x03ba, 0x03c6, 0x03c6, 0x03de, 0x03f6, 0x040e, - 0x0426, 0x043e, 0x0456, 0x046e, 0x0486, 0x049e, 0x04b6, 0x04ce, - 0x04e6, 0x04fe, 0x0516, 0x052e, 0x0546, 0x0561, 0x057b, 0x0596, - 0x05b0, 0x05ca, 0x05e4, 0x05fd, 0x0617, 0x0631, 0x064d, 0x0669, - 0x0685, 0x06a1, 0x06bb, 0x06d8, 0x06f4, 0x0711, 0x072d, 0x0749, - 0x0765, 0x0780, 0x079c, 0x07b8, 0x07d6, 0x07f4, 0x0812, 0x0830, - 0x084c, 0x0868, 0x088c, 0x08af, 0x00af, 0x00ca, 0x00e5, 0x0102, - // Entry 2DC0 - 2DFF - 0x011e, 0x013a, 0x0155, 0x0172, 0x018f, 0x01ab, 0x01c6, 0x01e2, - 0x01fe, 0x021b, 0x0237, 0x0254, 0x0271, 0x028c, 0x02a9, 0x02c5, - 0x02e4, 0x0300, 0x031f, 0x0340, 0x0366, 0x0383, 0x03a4, 0x03c0, - 0x03dd, 0x03fe, 0x0420, 0x0440, 0x0460, 0x0480, 0x049c, 0x04b8, - 0x04d5, 0x04ef, 0x050d, 0x0525, 0x053b, 0x055d, 0x0582, 0x05a7, - 0x05cb, 0x05ef, 0x0613, 0x0639, 0x065e, 0x066e, 0x0687, 0x06a0, - 0x06bb, 0x06d5, 0x06ef, 0x0708, 0x0723, 0x073e, 0x0758, 0x076d, - 0x0786, 0x079f, 0x07ba, 0x07d4, 0x07ee, 0x0803, 0x0817, 0x082c, - // Entry 2E00 - 2E3F - 0x0840, 0x0854, 0x0868, 0x087b, 0x088f, 0x08a3, 0x08b9, 0x08cf, - 0x08e5, 0x08fb, 0x090f, 0x0926, 0x093c, 0x0953, 0x0969, 0x097f, - 0x0995, 0x09aa, 0x09c0, 0x09d6, 0x09ee, 0x0a06, 0x0a1e, 0x0a36, - 0x0a4c, 0x0a6b, 0x0a89, 0x0a9f, 0x0ab5, 0x0aca, 0x0adf, 0x0af6, - 0x0b0c, 0x0b22, 0x0b37, 0x0b4e, 0x0b65, 0x0b7b, 0x0b90, 0x0ba6, - 0x0bbc, 0x0bd3, 0x0be9, 0x0c00, 0x0c17, 0x0c2c, 0x0c43, 0x0c59, - 0x0c72, 0x0c88, 0x0ca1, 0x0cbc, 0x0cdc, 0x0cf3, 0x0d0b, 0x0d21, - 0x0d39, 0x0d53, 0x0d6e, 0x0d85, 0x0da0, 0x0db6, 0x0dcc, 0x0de2, - // Entry 2E40 - 2E7F - 0x0dfb, 0x0e11, 0x0e29, 0x0e3e, 0x0e54, 0x0e6b, 0x0e85, 0x0e9f, - 0x0eb6, 0x0ed1, 0x0eed, 0x0f07, 0x0f21, 0x0f38, 0x0f51, 0x0f6c, - 0x0f87, 0x0fa1, 0x0fb5, 0x0fcd, 0x0fe5, 0x0fff, 0x1018, 0x1031, - 0x1049, 0x1063, 0x107d, 0x1096, 0x10aa, 0x10d2, 0x10fb, 0x1121, - 0x1147, 0x116b, 0x1190, 0x11b5, 0x11dc, 0x1206, 0x122e, 0x1257, - 0x1280, 0x1289, 0x1293, 0x129c, 0x12b2, 0x12c4, 0x12d6, 0x12e8, - 0x12fa, 0x130c, 0x131f, 0x1332, 0x1345, 0x1358, 0x136b, 0x137e, - 0x1391, 0x13a4, 0x13b7, 0x13ca, 0x13dd, 0x13f0, 0x1403, 0x1416, - // Entry 2E80 - 2EBF - 0x1429, 0x143c, 0x144f, 0x1462, 0x1475, 0x1488, 0x149b, 0x14ae, - 0x14c1, 0x14d4, 0x14e7, 0x14fa, 0x150d, 0x1520, 0x1533, 0x1546, - 0x1559, 0x156c, 0x157f, 0x1592, 0x15a5, 0x15b8, 0x15cb, 0x15de, - 0x15f1, 0x1604, 0x1617, 0x162a, 0x022a, 0x0237, 0x0244, 0x0250, - 0x025b, 0x0268, 0x0273, 0x027d, 0x028c, 0x0298, 0x02a3, 0x02ae, - 0x02ba, 0x02c8, 0x02d6, 0x02e2, 0x02ee, 0x02f9, 0x0305, 0x0312, - 0x0320, 0x032b, 0x033c, 0x034e, 0x035e, 0x036b, 0x037b, 0x038b, - 0x0399, 0x03a5, 0x03b2, 0x03be, 0x03cc, 0x03db, 0x03e9, 0x03f5, - // Entry 2EC0 - 2EFF - 0x0401, 0x040d, 0x0418, 0x0423, 0x042d, 0x0438, 0x0444, 0x0450, - 0x045f, 0x046b, 0x0479, 0x0489, 0x0496, 0x04a1, 0x04ac, 0x04bb, - 0x04c8, 0x04d7, 0x04e3, 0x04f3, 0x04fe, 0x050b, 0x0518, 0x0524, - 0x0530, 0x053c, 0x0549, 0x0556, 0x0560, 0x056c, 0x0578, 0x0583, - 0x0591, 0x059d, 0x05a9, 0x05b6, 0x05c4, 0x05d2, 0x05dd, 0x05ed, - 0x05f8, 0x0606, 0x0614, 0x0620, 0x062c, 0x0637, 0x0645, 0x0650, - 0x065c, 0x066a, 0x0675, 0x0684, 0x0690, 0x06ba, 0x06e3, 0x070c, - 0x0737, 0x0761, 0x078b, 0x07b4, 0x07df, 0x080a, 0x0834, 0x085d, - // Entry 2F00 - 2F3F - 0x0889, 0x08b5, 0x08e3, 0x0911, 0x093e, 0x096b, 0x099a, 0x09c8, - 0x09f6, 0x0a22, 0x0a52, 0x0a82, 0x0ab4, 0x0ae5, 0x0aef, 0x0af8, - 0x0b01, 0x0b0b, 0x0b14, 0x0b1d, 0x0b26, 0x0b37, 0x0b46, 0x0b4f, - 0x0b65, 0x0b7b, 0x0b92, 0x0ba7, 0x0bb9, 0x0bc7, 0x0bd0, 0x0bdb, - 0x0be4, 0x0bed, 0x0bf6, 0x0bff, 0x0c08, 0x0c12, 0x0c1d, 0x0c26, - 0x0c2f, 0x0c3a, 0x0c45, 0x0c4e, 0x0c57, 0x0c60, 0x0c6a, 0x0c74, - 0x0c7e, 0x0c88, 0x0c93, 0x0c9c, 0x0ca5, 0x0cae, 0x0cb7, 0x0cc0, - 0x0ccb, 0x0cd4, 0x0cdd, 0x0ce6, 0x0cf7, 0x0d08, 0x0d18, 0x0d29, - // Entry 2F40 - 2F7F - 0x0d38, 0x0d47, 0x0d55, 0x0d64, 0x0d73, 0x0d8a, 0x0d93, 0x0d9d, - 0x0da7, 0x0db1, 0x0dbb, 0x0dcc, 0x0de5, 0x0dee, 0x0df7, 0x0e02, - 0x0e0b, 0x0e14, 0x0e1d, 0x0e28, 0x0e31, 0x0e3a, 0x0e48, 0x0e51, - 0x0e5a, 0x0e65, 0x0e6e, 0x0e77, 0x0e85, 0x0e91, 0x0e9d, 0x0ea6, - 0x0eaf, 0x0eb8, 0x0ec1, 0x0ed1, 0x0eda, 0x0ee3, 0x0eec, 0x0ef5, - 0x0efe, 0x0f07, 0x0f10, 0x0f21, 0x0f2a, 0x0f33, 0x0f3c, 0x0f46, - 0x0f4f, 0x0f5e, 0x0f68, 0x0f72, 0x0f7b, 0x0f84, 0x0f8e, 0x0f97, - 0x0fa0, 0x0fa9, 0x0fb2, 0x0fc1, 0x0fd0, 0x0ff8, 0x1020, 0x104a, - // Entry 2F80 - 2FBF - 0x1073, 0x109c, 0x10c4, 0x10ee, 0x1118, 0x1141, 0x1169, 0x1194, - 0x11bf, 0x11ec, 0x1219, 0x1245, 0x1271, 0x129f, 0x12cc, 0x12f9, - 0x1324, 0x1353, 0x1382, 0x13b3, 0x13e3, 0x1413, 0x1442, 0x1473, - 0x14a4, 0x14d4, 0x14ff, 0x152e, 0x1538, 0x0138, 0x0158, 0x0178, - 0x01a0, 0x01bb, 0x01cf, 0x01e4, 0x01f9, 0x0216, 0x022f, 0x0244, - 0x0256, 0x026d, 0x0284, 0x02a1, 0x02b5, 0x02cc, 0x02e2, 0x0302, - 0x0317, 0x0331, 0x034c, 0x035e, 0x037a, 0x038d, 0x03a3, 0x03bc, - 0x03d6, 0x03f6, 0x0414, 0x0432, 0x0448, 0x045d, 0x0471, 0x0489, - // Entry 2FC0 - 2FFF - 0x049e, 0x04c1, 0x04d8, 0x04ef, 0x0507, 0x051f, 0x0534, 0x0549, - 0x0562, 0x057d, 0x059c, 0x05b7, 0x05ce, 0x05e3, 0x05fa, 0x0613, - 0x0634, 0x065b, 0x0673, 0x0693, 0x06a9, 0x06c2, 0x06de, 0x06fa, - 0x0711, 0x0728, 0x0740, 0x0760, 0x077d, 0x079b, 0x039b, 0x03a9, - 0x03b7, 0x03c4, 0x03d2, 0x03e1, 0x03f0, 0x03fe, 0x040d, 0x041b, - 0x0429, 0x0436, 0x0444, 0x0453, 0x0461, 0x0470, 0x047e, 0x048c, - 0x0499, 0x04a7, 0x04b5, 0x04c2, 0x04d0, 0x04df, 0x04ee, 0x04fc, - 0x050b, 0x051b, 0x052b, 0x053a, 0x054a, 0x0559, 0x0568, 0x0576, - // Entry 3000 - 303F - 0x0585, 0x0595, 0x05a4, 0x05b4, 0x05c3, 0x05d2, 0x05e0, 0x05ef, - 0x05fe, 0x060c, 0x061b, 0x062a, 0x0639, 0x0647, 0x0656, 0x0666, - 0x0675, 0x0684, 0x0693, 0x06a1, 0x06b0, 0x06c0, 0x06cf, 0x06de, - 0x06ed, 0x06fb, 0x070a, 0x071a, 0x0729, 0x0739, 0x0748, 0x0757, - 0x0765, 0x0774, 0x0784, 0x0793, 0x07a3, 0x07b2, 0x07c1, 0x07cf, - 0x07de, 0x07ed, 0x07fc, 0x080a, 0x0819, 0x0829, 0x0838, 0x0847, - 0x0856, 0x0864, 0x0873, 0x0883, 0x0892, 0x08a2, 0x08b2, 0x08c1, - 0x08d1, 0x08e2, 0x08f3, 0x0903, 0x0914, 0x0924, 0x0934, 0x0943, - // Entry 3040 - 307F - 0x0953, 0x0964, 0x0974, 0x0985, 0x0995, 0x09a5, 0x09b4, 0x09c4, - 0x09d4, 0x09e3, 0x09f3, 0x0a03, 0x0a13, 0x0a22, 0x0a32, 0x0a43, - 0x0a53, 0x0a63, 0x0a73, 0x0a82, 0x0a92, 0x0aa2, 0x0ab2, 0x0ac1, - 0x0ad1, 0x0ae2, 0x0af2, 0x0b03, 0x0b13, 0x0b23, 0x0b32, 0x0b42, - 0x0b52, 0x0b62, 0x0b71, 0x0b81, 0x0b91, 0x0ba1, 0x0bb0, 0x0bc0, - 0x0bd1, 0x0be1, 0x0bf1, 0x0c01, 0x0c10, 0x0c20, 0x0c31, 0x0c41, - 0x0c51, 0x0c61, 0x0c70, 0x0c80, 0x0c91, 0x0ca1, 0x0cb2, 0x0cc2, - 0x0cd2, 0x0ce1, 0x0cf1, 0x0d02, 0x0d12, 0x0d23, 0x0d33, 0x0d43, - // Entry 3080 - 30BF - 0x0d52, 0x0d62, 0x0d72, 0x0d82, 0x0d91, 0x0da1, 0x0db2, 0x0dc2, - 0x0dd2, 0x0de1, 0x0df1, 0x0e02, 0x0e12, 0x0e21, 0x0e30, 0x0e3e, - 0x0e4d, 0x0e5d, 0x0e6c, 0x0e7c, 0x0e8b, 0x0e9a, 0x0ea8, 0x0eb7, - 0x0ec7, 0x0ed7, 0x0ee6, 0x0ef6, 0x0f05, 0x0f14, 0x0f22, 0x0f31, - 0x0f40, 0x0f4e, 0x0f5d, 0x0f6c, 0x0f7a, 0x0f89, 0x0f99, 0x0fa8, - 0x0fb7, 0x0fc6, 0x0fd4, 0x0fe3, 0x0ff2, 0x1001, 0x100f, 0x101e, - 0x102d, 0x103c, 0x104a, 0x1059, 0x1068, 0x1076, 0x1085, 0x1094, - 0x10a3, 0x10b1, 0x10c0, 0x10d0, 0x10df, 0x10ee, 0x10fd, 0x110b, - // Entry 30C0 - 30FF - 0x111a, 0x1129, 0x1138, 0x1146, 0x1155, 0x1165, 0x1175, 0x1184, - 0x1194, 0x11a3, 0x11b2, 0x11c0, 0x11cf, 0x11de, 0x11ed, 0x11fb, - 0x120a, 0x1219, 0x1228, 0x1237, 0x1246, 0x1254, 0x1263, 0x1273, - 0x1282, 0x1291, 0x12a0, 0x12ae, 0x12bd, 0x12cd, 0x12dc, 0x12eb, - 0x12fa, 0x1308, 0x1317, 0x1327, 0x1336, 0x1346, 0x1355, 0x1364, - 0x1372, 0x1381, 0x1391, 0x13a0, 0x13af, 0x13be, 0x13cc, 0x13db, - 0x13ea, 0x13f8, 0x1407, 0x1416, 0x1425, 0x1433, 0x1442, 0x1452, - 0x1461, 0x1470, 0x147f, 0x148d, 0x149c, 0x14ac, 0x14bb, 0x14cb, - // Entry 3100 - 313F - 0x14da, 0x14e9, 0x14f7, 0x1506, 0x1516, 0x1526, 0x1535, 0x1545, - 0x1554, 0x1563, 0x1571, 0x1580, 0x158f, 0x159d, 0x15ac, 0x15bb, - 0x15ca, 0x15d8, 0x15e7, 0x15f7, 0x1606, 0x1616, 0x1626, 0x1635, - 0x1645, 0x1656, 0x1666, 0x1677, 0x1687, 0x1697, 0x16a6, 0x16b6, - 0x16c7, 0x16d7, 0x16e8, 0x16f8, 0x1708, 0x1717, 0x1727, 0x1737, - 0x1746, 0x1756, 0x1766, 0x1776, 0x1785, 0x1795, 0x17a6, 0x17b6, - 0x17c6, 0x17d6, 0x17e5, 0x17f5, 0x1806, 0x1816, 0x1826, 0x1836, - 0x1845, 0x1855, 0x1865, 0x1875, 0x1884, 0x1894, 0x18a4, 0x18b3, - // Entry 3140 - 317F - 0x18c3, 0x18d3, 0x18e3, 0x18f2, 0x1902, 0x1913, 0x1923, 0x1933, - 0x1943, 0x1952, 0x1962, 0x1973, 0x1984, 0x1994, 0x19a5, 0x19b5, - 0x19c5, 0x19d4, 0x19e4, 0x19f5, 0x1a05, 0x1a15, 0x1a25, 0x1a35, - 0x1a45, 0x1a54, 0x1a64, 0x1a74, 0x1a83, 0x1a92, 0x1aa0, 0x1aaf, - 0x1abf, 0x1ace, 0x1ade, 0x1aed, 0x1afb, 0x1b0a, 0x1b1a, 0x1b29, - 0x1b39, 0x1b48, 0x1b57, 0x1b65, 0x1b74, 0x1b83, 0x1b91, 0x1ba0, - 0x1baf, 0x1bbe, 0x1bcc, 0x1bdb, 0x1beb, 0x1bfa, 0x1c0a, 0x1c1a, - 0x1c29, 0x1c39, 0x1c4a, 0x1c5a, 0x1c6b, 0x1c7b, 0x1c8b, 0x1c9a, - // Entry 3180 - 31BF - 0x1caa, 0x1cbb, 0x1ccb, 0x1cdc, 0x1cec, 0x1cfb, 0x1d0b, 0x1d1b, - 0x1d2a, 0x1d3a, 0x1d4a, 0x1d5a, 0x1d69, 0x1d79, 0x1d8a, 0x1d9a, - 0x1daa, 0x1dba, 0x1dc9, 0x1dd9, 0x1dea, 0x1dfa, 0x1e09, 0x1e18, - 0x1e26, 0x1e35, 0x1e45, 0x1e55, 0x1e64, 0x1e74, 0x1e83, 0x1e92, - 0x1ea0, 0x1eaf, 0x1ebf, 0x1ecf, 0x1ede, 0x1eee, 0x1efd, 0x1f0c, - 0x1f1a, 0x1f29, 0x1f38, 0x1f46, 0x1f55, 0x1f64, 0x1f73, 0x1f81, - 0x1f90, 0x1fa0, 0x1faf, 0x1fbe, 0x1fcd, 0x1fdb, 0x1fea, 0x1ffa, - 0x2009, 0x2018, 0x2027, 0x2035, 0x2044, 0x2054, 0x2064, 0x2073, - // Entry 31C0 - 31FF - 0x2083, 0x2092, 0x20a1, 0x20af, 0x20be, 0x20ce, 0x20de, 0x20ed, - 0x20fd, 0x210c, 0x211b, 0x2129, 0x2138, 0x2147, 0x2156, 0x2164, - 0x2173, 0x2182, 0x2191, 0x219f, 0x21ae, 0x21be, 0x21cd, 0x21dc, - 0x21eb, 0x21f9, 0x2208, 0x2218, 0x2227, 0x2237, 0x2246, 0x2255, - 0x2263, 0x2272, 0x2282, 0x2291, 0x22a1, 0x22b0, 0x22bf, 0x22cd, - 0x22dc, 0x22eb, 0x22fa, 0x2308, 0x2317, 0x2326, 0x2335, 0x2343, - 0x2352, 0x2362, 0x2371, 0x2381, 0x2391, 0x23a0, 0x23b1, 0x23c1, - 0x23d2, 0x23e2, 0x23f2, 0x2401, 0x2411, 0x2422, 0x2433, 0x2443, - // Entry 3200 - 323F - 0x2454, 0x2464, 0x2474, 0x2483, 0x2493, 0x24a3, 0x24b3, 0x24c2, - 0x24d2, 0x24e2, 0x24f2, 0x2501, 0x2511, 0x2522, 0x2532, 0x2543, - 0x2553, 0x2563, 0x2573, 0x2582, 0x2592, 0x25a3, 0x25b3, 0x25c4, - 0x25d4, 0x25e4, 0x25f3, 0x2603, 0x2613, 0x2622, 0x2632, 0x2642, - 0x2652, 0x2661, 0x2671, 0x2682, 0x2692, 0x26a2, 0x26b2, 0x26c1, - 0x26d1, 0x26e2, 0x26f3, 0x2703, 0x2714, 0x2724, 0x2734, 0x2743, - 0x2753, 0x2764, 0x2775, 0x2785, 0x2796, 0x27a6, 0x27b6, 0x27c5, - 0x27d5, 0x27e5, 0x27f4, 0x2804, 0x2815, 0x2825, 0x2836, 0x2846, - // Entry 3240 - 327F - 0x2856, 0x2865, 0x2875, 0x2886, 0x2897, 0x28a7, 0x28b7, 0x28c7, - 0x28d6, 0x28e6, 0x28f6, 0x2905, 0x2915, 0x2924, 0x2934, 0x2943, - 0x2952, 0x2961, 0x296f, 0x297e, 0x298e, 0x299e, 0x29ad, 0x29bd, - 0x29cc, 0x29db, 0x29e9, 0x29f8, 0x2a07, 0x2a15, 0x2a24, 0x2a33, - 0x2a42, 0x2a50, 0x2a5f, 0x2a6f, 0x2a7e, 0x2a8e, 0x2a9d, 0x2aab, - 0x2aba, 0x2ac9, 0x2ad7, 0x2ae6, 0x2af5, 0x2b04, 0x2b12, 0x2b21, - 0x2b31, 0x2b40, 0x2b50, 0x2b5f, 0x2b6e, 0x2b7c, 0x2b8b, 0x2b9b, - 0x2baa, 0x2bba, 0x2bc9, 0x2bd8, 0x2be6, 0x2bf5, 0x2c04, 0x2c12, - // Entry 3280 - 32BF - 0x2c21, 0x2c30, 0x2c3f, 0x2c4d, 0x2c5c, 0x2c6c, 0x2c7b, 0x2c8a, - 0x2c99, 0x2ca7, 0x2cb6, 0x2cc6, 0x2cd5, 0x2ce4, 0x2cf3, 0x2d01, - 0x2d10, 0x2d20, 0x2d30, 0x2d3f, 0x2d4f, 0x2d5e, 0x2d6d, 0x2d7b, - 0x2d8a, 0x2d9a, 0x2da9, 0x2db9, 0x2dc8, 0x2dd7, 0x2de5, 0x2df4, - 0x2e03, 0x2e11, 0x2e20, 0x2e2f, 0x2e3e, 0x2e4c, 0x2e5b, 0x2e6b, - 0x2e7a, 0x2e89, 0x2e98, 0x2ea6, 0x2eb5, 0x2ec5, 0x2ed4, 0x2ee4, - 0x2ef4, 0x2f03, 0x2f13, 0x2f24, 0x2f35, 0x2f45, 0x2f56, 0x2f66, - 0x2f76, 0x2f85, 0x2f95, 0x2fa5, 0x2fb4, 0x2fc4, 0x2fd4, 0x2fe3, - // Entry 32C0 - 32FF - 0x2ff3, 0x3003, 0x3012, 0x3022, 0x3033, 0x3043, 0x3053, 0x3063, - 0x3072, 0x3082, 0x3093, 0x30a3, 0x30b3, 0x30c3, 0x30d2, 0x30e2, - 0x30f3, 0x3103, 0x3114, 0x3124, 0x3134, 0x3143, 0x3153, 0x3164, - 0x3174, 0x3184, 0x3194, 0x31a4, 0x31b3, 0x31c3, 0x31d2, 0x31e2, - 0x31f3, 0x3203, 0x3213, 0x3223, 0x3232, 0x3242, 0x3253, 0x3263, - 0x3272, 0x3281, 0x328f, 0x329e, 0x32ae, 0x32bd, 0x32cd, 0x32dc, - 0x32eb, 0x32f9, 0x3308, 0x3318, 0x3327, 0x3337, 0x3346, 0x3355, - 0x3363, 0x3372, 0x3381, 0x338f, 0x339e, 0x33ad, 0x33bc, 0x33ca, - // Entry 3300 - 333F - 0x33d9, 0x33e9, 0x33f8, 0x3407, 0x3416, 0x3424, 0x3433, 0x3443, - 0x3452, 0x3462, 0x3472, 0x3481, 0x3491, 0x34a2, 0x34b2, 0x34c3, - 0x34d3, 0x34e3, 0x34f2, 0x3502, 0x3512, 0x3522, 0x3531, 0x3541, - 0x3551, 0x3560, 0x3570, 0x3580, 0x3590, 0x359f, 0x35af, 0x35bf, - 0x35cf, 0x35de, 0x35ee, 0x35ff, 0x360f, 0x361f, 0x362f, 0x363e, - 0x364e, 0x365f, 0x366f, 0x3680, 0x3690, 0x36a0, 0x36af, 0x36bf, - 0x36cf, 0x36df, 0x36ee, 0x36fe, 0x370e, 0x371e, 0x372d, 0x373d, - 0x374e, 0x375e, 0x376e, 0x377e, 0x378d, 0x379d, 0x37ae, 0x37be, - // Entry 3340 - 337F - 0x37ce, 0x37de, 0x37ed, 0x37fd, 0x380e, 0x381f, 0x382f, 0x3840, - 0x3850, 0x3860, 0x386f, 0x387f, 0x388f, 0x389f, 0x38ae, 0x38be, - 0x38ce, 0x38dd, 0x38ed, 0x38fe, 0x390e, 0x391e, 0x392e, 0x393d, - 0x394d, 0x395e, 0x396e, 0x397e, 0x398d, 0x399e, 0x39ae, 0x39be, - 0x39ce, 0x39dd, 0x39ed, 0x39fd, 0x3a0d, 0x3a1c, 0x3a2c, 0x3a3c, - 0x3a4c, 0x3a5b, 0x3a6b, 0x3a7c, 0x3a8c, 0x3a9c, 0x3aac, 0x3abb, - 0x3acb, 0x3adc, 0x3aec, 0x3afc, 0x3b0c, 0x3b1b, 0x3b2b, 0x3b3b, - 0x3b4a, 0x3b5a, 0x3b6a, 0x3b7a, 0x3b89, 0x3b99, 0x3ba9, 0x3bb9, - // Entry 3380 - 33BF - 0x3bc8, 0x3bd8, 0x3be9, 0x3bf9, 0x3c09, 0x3c19, 0x3c28, 0x3c38, - 0x3c49, 0x3c59, 0x3c69, 0x3c79, 0x3c88, 0x3c98, 0x3ca9, 0x3cb9, - 0x3cca, 0x3cda, 0x3cea, 0x3cf9, 0x3d09, 0x3d19, 0x3d29, 0x3d38, - 0x3d48, 0x3d58, 0x3d68, 0x3d77, 0x3d87, 0x3d98, 0x3da8, 0x3db8, - 0x3dc8, 0x3dd7, 0x3de7, 0x3df8, 0x3e08, 0x3e17, 0x3e26, 0x3e34, - 0x3e43, 0x3e53, 0x3e62, 0x3e72, 0x3e81, 0x3e90, 0x3e9e, 0x3ead, - 0x3ebc, 0x3eca, 0x3ed9, 0x3ee8, 0x3ef7, 0x3f05, 0x3f14, 0x3f24, - 0x3f33, 0x3f42, 0x3f51, 0x3f5f, 0x3f6e, 0x3f7e, 0x3f8d, 0x3f9c, - // Entry 33C0 - 33FF - 0x3fab, 0x3fb9, 0x3fc8, 0x3fd8, 0x3fe8, 0x3ff7, 0x4007, 0x4017, - 0x4027, 0x4036, 0x4046, 0x4055, 0x4064, 0x4072, 0x4081, 0x4090, - 0x409f, 0x40ad, 0x40bc, 0x40cc, 0x40db, 0x40ea, 0x40f9, 0x4107, - 0x4116, 0x4126, 0x4135, 0x4144, 0x4153, 0x4161, 0x4170, 0x4180, - 0x4190, 0x419f, 0x41af, 0x41bf, 0x41cf, 0x41de, 0x41ee, 0x41fd, - 0x420c, 0x421a, 0x4229, 0x4238, 0x4247, 0x4255, 0x4264, 0x4274, - 0x4283, 0x4292, 0x42a1, 0x42af, 0x42be, 0x42ce, 0x42dd, 0x42ed, - 0x42fd, 0x430c, 0x431c, 0x432d, 0x433e, 0x434e, 0x435f, 0x4370, - // Entry 3400 - 343F - 0x4380, 0x4391, 0x43a1, 0x43b1, 0x43c0, 0x43d0, 0x43e0, 0x43f0, - 0x43ff, 0x440f, 0x4420, 0x4430, 0x4440, 0x4450, 0x445f, 0x446f, - 0x447f, 0x448f, 0x449e, 0x44ae, 0x44bf, 0x44d0, 0x44e0, 0x44f1, - 0x4502, 0x4512, 0x4522, 0x4532, 0x4541, 0x4551, 0x4561, 0x4570, - 0x4580, 0x4591, 0x45a1, 0x45b1, 0x45c1, 0x45d0, 0x45e0, 0x45f1, - 0x4601, 0x4611, 0x4621, 0x4630, 0x4640, 0x4651, 0x4662, 0x4672, - 0x4683, 0x4694, 0x46a4, 0x46b5, 0x46c5, 0x46d5, 0x46e4, 0x46f4, - 0x4704, 0x4714, 0x4723, 0x4733, 0x4742, 0x4751, 0x475f, 0x476e, - // Entry 3440 - 347F - 0x477e, 0x478e, 0x479d, 0x47ad, 0x47bd, 0x47cc, 0x47db, 0x47ea, - 0x47f8, 0x4807, 0x4816, 0x4825, 0x4833, 0x4842, 0x4852, 0x4861, - 0x4870, 0x487f, 0x488d, 0x489c, 0x48ac, 0x48bc, 0x48cb, 0x48db, - 0x48eb, 0x48fb, 0x490a, 0x491a, 0x4929, 0x4938, 0x4946, 0x4955, - 0x4964, 0x4973, 0x4981, 0x4990, 0x49a0, 0x49af, 0x49be, 0x49cd, - 0x49db, 0x49ea, 0x49fa, 0x4a09, 0x0209, 0x0217, 0x0224, 0x0232, - 0x0241, 0x024f, 0x025d, 0x026c, 0x027a, 0x0287, 0x0296, 0x02a4, - 0x02b3, 0x02c1, 0x02ce, 0x02dc, 0x02eb, 0x02f9, 0x0306, 0x0314, - // Entry 3480 - 34BF - 0x0322, 0x0331, 0x033f, 0x034e, 0x035d, 0x036a, 0x0377, 0x0386, - 0x0394, 0x03a2, 0x03b0, 0x03be, 0x03cc, 0x03da, 0x03e8, 0x03f5, - 0x0402, 0x0411, 0x041f, 0x042d, 0x043c, 0x0449, 0x0456, 0x0465, - 0x0473, 0x0480, 0x048f, 0x049d, 0x04ac, 0x04bb, 0x04c9, 0x04d8, - 0x04e6, 0x04f6, 0x0505, 0x0512, 0x0112, 0x0120, 0x012e, 0x013d, - 0x014b, 0x0159, 0x0168, 0x0176, 0x0184, 0x0193, 0x01a1, 0x01af, - 0x01be, 0x01cd, 0x01dc, 0x01ec, 0x01fa, 0x0208, 0x0216, 0x0224, - 0x0233, 0x0241, 0x0250, 0x025e, 0x026c, 0x027b, 0x0289, 0x0297, - // Entry 34C0 - 34FF - 0x02a6, 0x02b4, 0x02c3, 0x02d0, 0x02de, 0x02eb, 0x02f9, 0x0306, - 0x0313, 0x0320, 0x032e, 0x033c, 0x034a, 0x0361, 0x0377, 0x038f, - 0x03a6, 0x03bd, 0x03d5, 0x03eb, 0x0405, 0x0414, 0x0424, 0x0434, - 0x0444, 0x0455, 0x0465, 0x0476, 0x0486, 0x0497, 0x04a8, 0x04ba, - 0x04cb, 0x04db, 0x04eb, 0x04fb, 0x050c, 0x051d, 0x052f, 0x053f, - 0x054f, 0x055f, 0x0570, 0x0580, 0x0591, 0x05a1, 0x05b2, 0x05c2, - 0x05d2, 0x05e3, 0x05f3, 0x0603, 0x0615, 0x0625, 0x0635, 0x0645, - 0x0656, 0x0664, 0x0673, 0x0682, 0x0692, 0x06a1, 0x06b1, 0x06c0, - // Entry 3500 - 353F - 0x06d0, 0x06df, 0x06ef, 0x06ff, 0x0710, 0x0720, 0x072f, 0x073e, - 0x074d, 0x075d, 0x076d, 0x077e, 0x078d, 0x079c, 0x07ab, 0x07bb, - 0x07ca, 0x07da, 0x07e9, 0x07f9, 0x0808, 0x0817, 0x0827, 0x0836, - 0x0845, 0x0856, 0x0865, 0x0874, 0x0883, 0x0893, 0x08a1, 0x08b0, - 0x08c1, 0x08d0, 0x08e0, 0x08ef, 0x08ff, 0x090e, 0x091e, 0x092d, - 0x093d, 0x094d, 0x095e, 0x096f, 0x097f, 0x098e, 0x099d, 0x09ac, - 0x09bc, 0x09cc, 0x09dd, 0x09ec, 0x09fb, 0x0a0a, 0x0a1a, 0x0a29, - 0x0a39, 0x0a48, 0x0a58, 0x0a67, 0x0a76, 0x0a86, 0x0a95, 0x0aa4, - // Entry 3540 - 357F - 0x0ab4, 0x0ac5, 0x0ad4, 0x0ae3, 0x0af2, 0x0b02, 0x0b11, 0x0b21, - 0x0b31, 0x0b41, 0x0b52, 0x0b62, 0x0b73, 0x0b83, 0x0b94, 0x0ba5, - 0x0bb7, 0x0bc8, 0x0bd8, 0x0be8, 0x0bf8, 0x0c09, 0x0c1a, 0x0c2c, - 0x0c3c, 0x0c4c, 0x0c5c, 0x0c6d, 0x0c7d, 0x0c8e, 0x0c9e, 0x0caf, - 0x0cbf, 0x0ccf, 0x0ce0, 0x0cf0, 0x0d00, 0x0d12, 0x0d22, 0x0d32, - 0x0d42, 0x0d53, 0x0d61, 0x0d70, 0x0d7f, 0x0d8f, 0x0d9e, 0x0dae, - 0x0dbd, 0x0dcd, 0x0ddc, 0x0dec, 0x0dfc, 0x0e0d, 0x0e1d, 0x0e2c, - 0x0e3b, 0x0e4a, 0x0e5a, 0x0e6a, 0x0e7b, 0x0e8a, 0x0e99, 0x0ea8, - // Entry 3580 - 35BF - 0x0eb8, 0x0ec7, 0x0ed7, 0x0ee6, 0x0ef6, 0x0f05, 0x0f14, 0x0f24, - 0x0f33, 0x0f42, 0x0f53, 0x0f62, 0x0f71, 0x0f80, 0x0f90, 0x0f9e, - 0x0fad, 0x0fbe, 0x0fcd, 0x0fdd, 0x0fec, 0x0ffc, 0x100b, 0x101b, - 0x102a, 0x103a, 0x104a, 0x105b, 0x106b, 0x107c, 0x108b, 0x109a, - 0x10a9, 0x10b9, 0x10c9, 0x10da, 0x10e9, 0x10f8, 0x1107, 0x1117, - 0x1126, 0x1136, 0x1145, 0x1155, 0x1164, 0x1173, 0x1183, 0x1192, - 0x11a1, 0x11b2, 0x11c1, 0x11d0, 0x11df, 0x11ef, 0x11fd, 0x120c, - 0x121d, 0x122c, 0x123c, 0x124b, 0x125b, 0x126a, 0x127a, 0x1289, - // Entry 35C0 - 35FF - 0x1299, 0x12a9, 0x12ba, 0x12cb, 0x12db, 0x12ec, 0x12fb, 0x130a, - 0x1319, 0x1329, 0x1339, 0x134a, 0x1359, 0x1368, 0x1377, 0x1387, - 0x1396, 0x13a6, 0x13b5, 0x13c5, 0x13d4, 0x13e3, 0x13f3, 0x1402, - 0x1411, 0x1422, 0x1434, 0x1443, 0x1453, 0x1462, 0x1471, 0x1481, - 0x1490, 0x14a7, 0x14b0, 0x14bd, 0x14ce, 0x14e3, 0x14f8, 0x150e, - 0x151e, 0x152e, 0x153d, 0x154b, 0x155a, 0x1568, 0x1576, 0x1585, - 0x1595, 0x15a4, 0x15b3, 0x15c2, 0x15d1, 0x15df, 0x15ec, 0x15f9, - 0x1608, 0x1616, 0x1624, 0x1631, 0x1640, 0x164f, 0x165d, 0x1672, - // Entry 3600 - 363F - 0x1687, 0x0287, 0x02a5, 0x02c1, 0x02de, 0x02f9, 0x031d, 0x033f, - 0x035b, 0x0375, 0x0392, 0x03ad, 0x03d1, 0x03f3, 0x0416, 0x0437, - 0x045a, 0x047b, 0x04a5, 0x04cd, 0x04f1, 0x0513, 0x0536, 0x0557, - 0x0579, 0x0599, 0x05c2, 0x05e9, 0x060c, 0x062d, 0x065f, 0x068f, - 0x06a9, 0x06c1, 0x06e5, 0x0707, 0x0726, 0x0743, 0x0762, 0x077f, - 0x079e, 0x07bb, 0x07de, 0x07ff, 0x0822, 0x0843, 0x086d, 0x0895, - 0x08b2, 0x08ca, 0x08ee, 0x0916, 0x093f, 0x0950, 0x0976, 0x0991, - 0x09ad, 0x09c8, 0x09eb, 0x0a09, 0x0a2c, 0x0a4b, 0x0a64, 0x0a7e, - // Entry 3640 - 367F - 0x0a8d, 0x0a9d, 0x0ab8, 0x0ad1, 0x0aed, 0x0b07, 0x0b23, 0x0b3d, - 0x0b59, 0x0b73, 0x0b8f, 0x0ba9, 0x0bd4, 0x0bfd, 0x0c18, 0x0c31, - 0x0c4d, 0x0c67, 0x0c83, 0x0c9d, 0x0cb9, 0x0cd3, 0x0cee, 0x0d07, - 0x0d23, 0x0d3d, 0x0d5d, 0x0d7b, 0x0d9c, 0x0dbb, 0x0ddd, 0x0dff, - 0x0e1b, 0x0e3f, 0x0e4d, 0x0e5c, 0x0e6a, 0x0e79, 0x0e88, 0x0e98, - 0x0ea8, 0x0eb6, 0x0ec6, 0x0ed4, 0x0ee3, 0x0ef2, 0x0f02, 0x0f13, - 0x0f25, 0x0f37, 0x0f47, 0x0f58, 0x0f6a, 0x0f78, 0x0f88, 0x0f97, - 0x0fa8, 0x0fb7, 0x0fc9, 0x0fda, 0x0feb, 0x0ffb, 0x100c, 0x101b, - // Entry 3680 - 36BF - 0x102d, 0x103d, 0x104d, 0x105d, 0x106c, 0x107d, 0x108e, 0x109f, - 0x10b0, 0x10c1, 0x10d1, 0x10e1, 0x10f1, 0x1101, 0x1110, 0x111f, - 0x112e, 0x113d, 0x114e, 0x115e, 0x116e, 0x1182, 0x1193, 0x11a3, - 0x11b3, 0x11c4, 0x11d3, 0x11e3, 0x11f2, 0x1201, 0x1210, 0x121f, - 0x122f, 0x123e, 0x124f, 0x125f, 0x126f, 0x127e, 0x128d, 0x129c, - 0x12ab, 0x12bc, 0x12cc, 0x12dc, 0x12ec, 0x12fd, 0x130f, 0x1322, - 0x1334, 0x1347, 0x1363, 0x1381, 0x138e, 0x139d, 0x13a8, 0x13b3, - 0x13c2, 0x13d5, 0x03d5, 0x03fa, 0x0420, 0x0446, 0x046d, 0x0490, - // Entry 36C0 - 36FF - 0x04b4, 0x04d7, 0x04fb, 0x0525, 0x0549, 0x056c, 0x058f, 0x05b8, - 0x05ec, 0x061a, 0x0647, 0x0674, 0x06a7, 0x06d4, 0x06fb, 0x0721, - 0x0747, 0x0773, 0x0793, 0x07ac, 0x07ce, 0x07f6, 0x0815, 0x0836, - 0x085d, 0x088d, 0x08ba, 0x08de, 0x0901, 0x0928, 0x094d, 0x0973, - 0x0997, 0x09b0, 0x09c7, 0x09de, 0x09f3, 0x0a10, 0x0a2b, 0x0a49, - 0x0a65, 0x0a8e, 0x0ab5, 0x0ad1, 0x0aed, 0x0b04, 0x0b19, 0x0b30, - 0x0b45, 0x0b5c, 0x0b71, 0x0b88, 0x0b9d, 0x0bc8, 0x0bf1, 0x0c08, - 0x0c1d, 0x0c45, 0x0c6b, 0x0c8d, 0x0cad, 0x0cd8, 0x0d01, 0x0d37, - // Entry 3700 - 373F - 0x0d6b, 0x0d88, 0x0da3, 0x0dca, 0x0def, 0x0e1e, 0x0e4b, 0x0e6b, - 0x0e89, 0x0ea0, 0x0eb5, 0x0ee9, 0x0f1b, 0x0f3f, 0x0f61, 0x0f8a, - 0x0fb1, 0x0fe5, 0x1017, 0x1042, 0x106b, 0x1089, 0x10a5, 0x10c5, - 0x10e3, 0x110e, 0x1137, 0x114e, 0x1163, 0x1184, 0x11a3, 0x11c9, - 0x11ed, 0x1225, 0x125b, 0x1274, 0x128b, 0x12a2, 0x12b7, 0x12ce, - 0x12e3, 0x12fb, 0x1311, 0x1323, 0x1339, 0x134f, 0x1365, 0x137b, - 0x1391, 0x13af, 0x13c5, 0x13da, 0x13f8, 0x1414, 0x1432, 0x144e, - 0x146c, 0x1491, 0x14b4, 0x14d1, 0x14ec, 0x150a, 0x1526, 0x1544, - // Entry 3740 - 377F - 0x1560, 0x157e, 0x159a, 0x15bf, 0x15d4, 0x15f5, 0x1612, 0x162d, - 0x164a, 0x167b, 0x1697, 0x16bc, 0x16df, 0x16fe, 0x171b, 0x1741, - 0x1767, 0x178b, 0x17ad, 0x17cf, 0x17ef, 0x180e, 0x182b, 0x184a, - 0x1867, 0x1886, 0x18a3, 0x18cd, 0x18f5, 0x191f, 0x1947, 0x1971, - 0x1999, 0x19c3, 0x19eb, 0x1a15, 0x1a3d, 0x1a5d, 0x1a81, 0x1a9e, - 0x1abe, 0x1ae2, 0x02e2, 0x02ff, 0x031c, 0x0344, 0x035c, 0x0375, - 0x038c, 0x03a6, 0x03be, 0x03be, 0x03e0, 0x0405, 0x0426, 0x0449, - 0x046b, 0x048d, 0x04af, 0x04ce, 0x04ef, 0x0504, 0x0519, 0x0533, - // Entry 3780 - 37BF - 0x0548, 0x055d, 0x0572, 0x058b, 0x05a1, 0x05b8, 0x05ce, 0x05e5, - 0x05ff, 0x0615, 0x062c, 0x0642, 0x0659, 0x0670, 0x0688, 0x069f, - 0x06b7, 0x06cd, 0x06e4, 0x06fa, 0x0711, 0x0727, 0x073d, 0x0754, - 0x076a, 0x0781, 0x0797, 0x07ad, 0x07c3, 0x07da, 0x07f0, 0x0806, - 0x081f, 0x0838, 0x0851, 0x086a, 0x0884, 0x089e, 0x08b8, 0x08d2, - 0x08ec, 0x00ec, 0x010c, 0x0129, 0x014c, 0x016e, 0x018d, 0x01b2, - 0x01ca, 0x01e6, 0x01fc, 0x0215, 0x0215, 0x0227, 0x023a, 0x024c, - 0x025f, 0x0271, 0x0284, 0x0296, 0x02a9, 0x02bb, 0x02ce, 0x02e0, - // Entry 37C0 - 37FF - 0x02f2, 0x0304, 0x0317, 0x0329, 0x033b, 0x034e, 0x0362, 0x0375, - 0x0387, 0x039a, 0x03ac, 0x03c3, 0x03d5, 0x03e7, 0x03f9, 0x040c, - 0x041e, 0x0430, 0x0441, 0x0452, 0x0463, 0x0474, 0x0485, 0x0497, - 0x04a9, 0x04bb, 0x04ce, 0x04e0, 0x04fc, 0x0518, 0x052b, 0x053f, - 0x0552, 0x0565, 0x0581, 0x059e, 0x05b7, 0x05d3, 0x05ef, 0x060c, - 0x0627, 0x0640, 0x0659, 0x066b, 0x0684, 0x0284, 0x029c, 0x02b3, - 0x02c6, 0x02da, 0x02ed, 0x0301, 0x0314, 0x0328, 0x0343, 0x035f, - 0x037a, 0x0396, 0x03a9, 0x03bd, 0x03d1, 0x03e4, 0x03f8, 0x040c, - // Entry 3800 - 383F - 0x0420, 0x0435, 0x0449, 0x045e, 0x0473, 0x0487, 0x049c, 0x04b0, - 0x04c5, 0x04da, 0x04ef, 0x0505, 0x051a, 0x0530, 0x0545, 0x0559, - 0x056e, 0x0582, 0x0597, 0x05ab, 0x05bf, 0x05d4, 0x05e8, 0x05fd, - 0x0611, 0x0625, 0x0639, 0x064d, 0x0661, 0x0676, 0x068b, 0x069f, - 0x06b3, 0x06c8, 0x06e7, 0x06ff, 0x0716, 0x072e, 0x0745, 0x075d, - 0x077c, 0x079c, 0x07bb, 0x07db, 0x07f2, 0x080a, 0x0822, 0x0839, - 0x0851, 0x0869, 0x087f, 0x089a, 0x009a, 0x00aa, 0x00c1, 0x00d6, - 0x00ea, 0x00fe, 0x0114, 0x0129, 0x013e, 0x0152, 0x0168, 0x017e, - // Entry 3840 - 387F - 0x0193, 0x0193, 0x01b2, 0x01d0, 0x01ee, 0x020e, 0x022d, 0x024c, - 0x026a, 0x028a, 0x02aa, 0x02c9, 0x02e6, 0x0303, 0x0321, 0x033f, - 0x035d, 0x037b, 0x0399, 0x03bb, 0x03de, 0x0400, 0x0429, 0x0448, - 0x0469, 0x048d, 0x04a5, 0x04ba, 0x04ca, 0x04df, 0x04f6, 0x0508, - 0x0108, 0x011b, 0x012d, 0x013f, 0x0153, 0x0166, 0x0179, 0x018b, - 0x019f, 0x01b3, 0x01c6, 0x01d8, 0x01eb, 0x01fd, 0x0210, 0x0222, - 0x0235, 0x0247, 0x025a, 0x026c, 0x027f, 0x0291, 0x02a3, 0x02b6, - 0x02c8, 0x02da, 0x02ec, 0x02fe, 0x0310, 0x0322, 0x0334, 0x0347, - // Entry 3880 - 38BF - 0x0359, 0x036b, 0x037d, 0x038e, 0x03a0, 0x03b1, 0x03c3, 0x03d4, - 0x03e4, 0x03f4, 0x0405, 0x0415, 0x0429, 0x043c, 0x0456, 0x0467, - 0x0479, 0x0489, 0x0499, 0x04aa, 0x04ba, 0x04ca, 0x04da, 0x04ea, - 0x04fa, 0x050a, 0x051a, 0x052a, 0x053b, 0x054b, 0x055b, 0x056b, - 0x057b, 0x058b, 0x059b, 0x05ac, 0x05be, 0x05cf, 0x05e1, 0x05f0, - 0x0603, 0x0616, 0x0629, 0x063d, 0x0650, 0x0664, 0x0678, 0x068c, - 0x06a4, 0x06bb, 0x06d2, 0x06e9, 0x06f6, 0x02f6, 0x0309, 0x0325, - 0x0341, 0x035c, 0x0378, 0x0394, 0x03b5, 0x03d1, 0x03f2, 0x040d, - // Entry 38C0 - 38FF - 0x0428, 0x0448, 0x046b, 0x0485, 0x04a0, 0x04bd, 0x04d9, 0x04f5, - 0x050f, 0x0531, 0x054e, 0x0569, 0x0588, 0x05a3, 0x05be, 0x05de, - 0x05fa, 0x0617, 0x0631, 0x0651, 0x0251, 0x0268, 0x027b, 0x028e, - 0x02a3, 0x02b4, 0x02ca, 0x02db, 0x02ed, 0x02fe, 0x0316, 0x032f, - 0x0350, 0x0361, 0x0373, 0x0384, 0x0396, 0x03ae, 0x03c6, 0x03d8, - 0x03f0, 0x0403, 0x0415, 0x042d, 0x043f, 0x0458, 0x0474, 0x0487, - 0x049a, 0x04b7, 0x04ca, 0x04e7, 0x04ff, 0x0511, 0x0529, 0x053b, - 0x0557, 0x0569, 0x057b, 0x0593, 0x05a5, 0x05bd, 0x05cf, 0x05e1, - // Entry 3900 - 393F - 0x05f3, 0x060b, 0x061d, 0x062f, 0x0647, 0x0663, 0x0675, 0x0687, - 0x069f, 0x06b9, 0x06d3, 0x06eb, 0x0709, 0x0721, 0x0740, 0x075a, - 0x0778, 0x0791, 0x07ae, 0x07cd, 0x07ea, 0x07fa, 0x0811, 0x0829, - 0x083c, 0x084f, 0x0862, 0x0875, 0x088a, 0x089e, 0x08b2, 0x08c4, - 0x08db, 0x08f0, 0x090c, 0x010c, 0x0120, 0x0133, 0x0145, 0x0157, - 0x016b, 0x017e, 0x0191, 0x01a3, 0x01b7, 0x01cb, 0x01de, 0x01de, - 0x01f9, 0x0210, 0x0227, 0x023e, 0x0255, 0x026c, 0x0283, 0x0298, - 0x02c2, 0x02de, 0x02f9, 0x0314, 0x0330, 0x034b, 0x0367, 0x0383, - // Entry 3940 - 397F - 0x03a0, 0x03bc, 0x03d8, 0x03f3, 0x040e, 0x042b, 0x0447, 0x0463, - 0x047e, 0x049b, 0x04b8, 0x04d4, 0x04f0, 0x050b, 0x0527, 0x0542, - 0x055e, 0x015e, 0x016b, 0x0178, 0x0185, 0x0192, 0x01a0, 0x01ad, - 0x01bb, 0x01ca, 0x01d8, 0x01e7, 0x01f7, 0x0206, 0x0215, 0x0225, - 0x0233, 0x0242, 0x0252, 0x0261, 0x0271, 0x027f, 0x028e, 0x029c, - 0x02ab, 0x02ba, 0x02c8, 0x02d7, 0x02e5, 0x02f4, 0x0303, 0x0311, - 0x0320, 0x032f, 0x033d, 0x034c, 0x035a, 0x0368, 0x0376, 0x0384, - 0x0393, 0x03a1, 0x03af, 0x03c1, 0x03d2, 0x03e4, 0x03f6, 0x0407, - // Entry 3980 - 39BF - 0x0419, 0x042a, 0x043c, 0x044e, 0x0460, 0x0476, 0x048c, 0x04a2, - 0x04b8, 0x00b8, 0x00cb, 0x00de, 0x00f2, 0x010e, 0x0122, 0x0135, - 0x0148, 0x015b, 0x016e, 0x0181, 0x0194, 0x01a8, 0x01c3, 0x01de, - 0x01de, 0x01ed, 0x01fb, 0x0209, 0x0219, 0x0228, 0x0237, 0x0245, - 0x0255, 0x0265, 0x0274, 0x0274, 0x028b, 0x02a1, 0x02be, 0x02db, - 0x02f3, 0x030b, 0x0324, 0x033c, 0x0355, 0x036e, 0x0387, 0x03a1, - 0x03ba, 0x03d4, 0x03ed, 0x0405, 0x041d, 0x0435, 0x044e, 0x0466, - 0x0492, 0x04aa, 0x04c2, 0x04da, 0x04f5, 0x050f, 0x0529, 0x0549, - // Entry 39C0 - 39FF - 0x0561, 0x0579, 0x0590, 0x05ab, 0x05c8, 0x05e5, 0x0604, 0x0623, - 0x0639, 0x0650, 0x0667, 0x067f, 0x0697, 0x06b0, 0x06c6, 0x06dd, - 0x06f4, 0x070c, 0x0722, 0x0739, 0x0750, 0x0768, 0x077e, 0x0795, - 0x07ac, 0x07c4, 0x07da, 0x07f1, 0x0807, 0x081e, 0x0835, 0x084d, - 0x0863, 0x087a, 0x0890, 0x08a7, 0x08bd, 0x08d4, 0x08eb, 0x0903, - 0x0919, 0x0930, 0x0946, 0x095d, 0x0973, 0x098a, 0x09a0, 0x09b7, - 0x09cd, 0x09e4, 0x09fa, 0x0a11, 0x0a27, 0x0a3e, 0x0a53, 0x0a69, - 0x0a7a, 0x0a8b, 0x0a9b, 0x0aac, 0x0abc, 0x0acc, 0x0adc, 0x0aed, - // Entry 3A00 - 3A3F - 0x0afe, 0x0b10, 0x0b21, 0x0b33, 0x0b44, 0x0b55, 0x0b66, 0x0b7a, - 0x0b91, 0x0ba6, 0x0bbc, 0x03bc, 0x03cf, 0x03e4, 0x03f7, 0x040d, - 0x0424, 0x0439, 0x044e, 0x0465, 0x047c, 0x0493, 0x04ab, 0x04c2, - 0x04da, 0x04f1, 0x0508, 0x051f, 0x0539, 0x0553, 0x056e, 0x0588, - 0x05a3, 0x05b8, 0x05d1, 0x05e2, 0x0607, 0x0628, 0x0647, 0x065a, - 0x025a, 0x0270, 0x0286, 0x029d, 0x02b4, 0x02ca, 0x02e0, 0x02e0, - 0x02f6, 0x030c, 0x0323, 0x033a, 0x0350, 0x0366, 0x0366, 0x037b, - 0x0390, 0x03a6, 0x03bc, 0x03d1, 0x03e6, 0x03e6, 0x03fd, 0x0414, - // Entry 3A40 - 3A7F - 0x042b, 0x0443, 0x045b, 0x0472, 0x0489, 0x0089, 0x009e, 0x00b3, - 0x00c8, 0x00de, 0x00f4, 0x0109, 0x011e, 0x011e, 0x013d, 0x0160, - 0x0180, 0x019b, 0x01bd, 0x01d7, 0x0204, 0x022d, 0x025a, 0x027f, - 0x02a5, 0x02cb, 0x02f3, 0x0313, 0x033f, 0x0364, 0x0382, 0x03aa, - 0x03dd, 0x03ff, 0x042d, 0x0449, 0x0474, 0x0497, 0x04b2, 0x04d8, - 0x0505, 0x0520, 0x0545, 0x0564, 0x058d, 0x05ba, 0x05cf, 0x05eb, - 0x060e, 0x0624, 0x064e, 0x0678, 0x06a0, 0x06c7, 0x0701, 0x0733, - 0x075c, 0x077e, 0x0798, 0x07c4, 0x07ed, 0x0813, 0x082f, 0x084c, - // Entry 3A80 - 3ABF - 0x0866, 0x087b, 0x089c, 0x08bc, 0x00bc, 0x00d3, 0x00ea, 0x0101, - 0x0118, 0x012f, 0x0146, 0x015e, 0x0176, 0x018e, 0x01a6, 0x01be, - 0x01d6, 0x01ee, 0x0206, 0x021e, 0x0236, 0x024e, 0x0266, 0x027e, - 0x0296, 0x02ae, 0x02c6, 0x02de, 0x02f6, 0x030e, 0x0326, 0x033e, - 0x0356, 0x036e, 0x0386, 0x039e, 0x03b7, 0x03d0, 0x03e8, 0x0400, - 0x0418, 0x0430, 0x0448, 0x0461, 0x047a, 0x0493, 0x04ac, 0x04c5, - 0x04de, 0x04f6, 0x050d, 0x0525, 0x053d, 0x0555, 0x056d, 0x0585, - 0x059d, 0x05b5, 0x05cd, 0x05e5, 0x05fd, 0x0615, 0x062d, 0x0645, - // Entry 3AC0 - 3AFF - 0x065d, 0x0676, 0x068f, 0x06a8, 0x06c1, 0x06da, 0x06f3, 0x070c, - 0x0725, 0x073e, 0x0757, 0x0770, 0x0789, 0x07a2, 0x07ba, 0x07d2, - 0x07ea, 0x0802, 0x081a, 0x0832, 0x084a, 0x0861, 0x0878, 0x088f, - 0x08a6, 0x08bc, 0x08d2, 0x08ea, 0x0901, 0x0919, 0x0931, 0x0949, - 0x0960, 0x0978, 0x098f, 0x09a5, 0x09ba, 0x09d2, 0x09eb, 0x0a02, - 0x0a1a, 0x0a31, 0x0a47, 0x0a5e, 0x0a75, 0x0a8d, 0x0aa5, 0x0abd, - 0x0adb, 0x0af9, 0x0b17, 0x0b34, 0x0b51, 0x0b6f, 0x0b8e, 0x0baa, - 0x0bc6, 0x0be2, 0x0bfe, 0x0c1b, 0x0c39, 0x0c55, 0x0c74, 0x0c90, - // Entry 3B00 - 3B3F - 0x0ca5, 0x0cba, 0x0cd0, 0x00d0, 0x00e7, 0x00fd, 0x0113, 0x012b, - 0x0142, 0x0159, 0x016f, 0x0187, 0x019f, 0x01b6, 0x01b6, 0x01cc, - 0x01e2, 0x01f7, 0x020d, 0x0223, 0x0239, 0x024f, 0x0265, 0x027a, - 0x028f, 0x02a5, 0x02ba, 0x02cf, 0x02e6, 0x02fc, 0x0312, 0x0327, - 0x033d, 0x0352, 0x0367, 0x037b, 0x0393, 0x03ab, 0x03ab, 0x03c7, - 0x03e5, 0x0401, 0x0423, 0x0440, 0x045c, 0x047f, 0x049c, 0x04bb, - 0x04da, 0x04fc, 0x051f, 0x0542, 0x0564, 0x0587, 0x05ab, 0x05ca, - 0x05f2, 0x0610, 0x062c, 0x064d, 0x0668, 0x0689, 0x06a5, 0x06c2, - // Entry 3B40 - 3B7F - 0x06e6, 0x0702, 0x071d, 0x073f, 0x075b, 0x0779, 0x0794, 0x07b7, - 0x07d8, 0x07f9, 0x0816, 0x0831, 0x084e, 0x086b, 0x0886, 0x08a4, - 0x08ca, 0x08e9, 0x0908, 0x0924, 0x0945, 0x0960, 0x097d, 0x099d, - 0x019d, 0x01bd, 0x01dd, 0x01fd, 0x021d, 0x023d, 0x025d, 0x027d, - 0x029d, 0x02bd, 0x02dd, 0x02fd, 0x031d, 0x033d, 0x035d, 0x037d, - 0x039d, 0x03bd, 0x03dd, 0x03fd, 0x041d, 0x043d, 0x045d, 0x047d, - 0x049d, 0x04bd, 0x04dd, 0x04fd, 0x051d, 0x053d, 0x055d, 0x057d, - 0x059d, 0x05bd, 0x05dd, 0x05fd, 0x061d, 0x063d, 0x065d, 0x067d, - // Entry 3B80 - 3BBF - 0x069d, 0x06bd, 0x06dd, 0x06fd, 0x071d, 0x073d, 0x075d, 0x077d, - 0x079d, 0x07bd, 0x07dd, 0x07fd, 0x081d, 0x083d, 0x085d, 0x087d, - 0x089d, 0x08bd, 0x08dd, 0x08fd, 0x091d, 0x093d, 0x095d, 0x097d, - 0x099d, 0x09bd, 0x09dd, 0x09fd, 0x0a1d, 0x0a3d, 0x0a5d, 0x0a7d, - 0x0a9d, 0x0abd, 0x0add, 0x0afd, 0x0b1d, 0x0b3d, 0x0b5d, 0x0b7d, - 0x0b9d, 0x0bbd, 0x0bdd, 0x0bfd, 0x0c1d, 0x0c3d, 0x0c5d, 0x0c7d, - 0x0c9d, 0x0cbd, 0x0cdd, 0x0cfd, 0x0d1d, 0x0d3d, 0x0d5d, 0x0d7d, - 0x0d9d, 0x0dbd, 0x0ddd, 0x0dfd, 0x0e1d, 0x0e3d, 0x0e5d, 0x0e7d, - // Entry 3BC0 - 3BFF - 0x0e9d, 0x0ebd, 0x0edd, 0x0efd, 0x0f1d, 0x0f3d, 0x0f5d, 0x0f7d, - 0x0f9d, 0x0fbd, 0x0fdd, 0x0ffd, 0x101d, 0x103d, 0x105d, 0x107d, - 0x109d, 0x10bd, 0x10dd, 0x10fd, 0x111d, 0x113d, 0x115d, 0x117d, - 0x119d, 0x11bd, 0x11dd, 0x11fd, 0x121d, 0x123d, 0x125d, 0x127d, - 0x129d, 0x12bd, 0x12dd, 0x12fd, 0x131d, 0x133d, 0x135d, 0x137d, - 0x139d, 0x13bd, 0x13dd, 0x13fd, 0x141d, 0x143d, 0x145d, 0x147d, - 0x149d, 0x14bd, 0x14dd, 0x14fd, 0x151d, 0x153d, 0x155d, 0x157d, - 0x159d, 0x15bd, 0x15dd, 0x15fd, 0x161d, 0x163d, 0x165d, 0x167d, - // Entry 3C00 - 3C3F - 0x169d, 0x16bd, 0x16dd, 0x16fd, 0x171d, 0x173d, 0x175d, 0x177d, - 0x179d, 0x17bd, 0x17dd, 0x17fd, 0x181d, 0x183d, 0x185d, 0x187d, - 0x189d, 0x18bd, 0x18dd, 0x18fd, 0x191d, 0x193d, 0x195d, 0x197d, - 0x199d, 0x19bd, 0x19dd, 0x19fd, 0x1a1d, 0x1a3d, 0x1a5d, 0x1a7d, - 0x1a9d, 0x1abd, 0x1add, 0x1afd, 0x1b1d, 0x1b3d, 0x1b5d, 0x1b7d, - 0x1b9d, 0x1bbd, 0x1bdd, 0x1bfd, 0x1c1d, 0x1c3d, 0x1c5d, 0x1c7d, - 0x1c9d, 0x1cbd, 0x1cdd, 0x1cfd, 0x1d1d, 0x1d3d, 0x1d5d, 0x1d7d, - 0x1d9d, 0x1dbd, 0x1ddd, 0x1dfd, 0x1e1d, 0x1e3d, 0x1e5d, 0x1e7d, - // Entry 3C40 - 3C7F - 0x1e9d, 0x1ebd, 0x1edd, 0x1efd, 0x1f1d, 0x1f3d, 0x1f5d, 0x1f7d, - 0x1f9d, 0x1fbd, 0x1fdd, 0x1ffd, 0x201d, 0x203d, 0x205d, 0x207d, - 0x209d, 0x20bd, 0x20dd, 0x20fd, 0x211d, 0x213d, 0x215d, 0x217d, - 0x219d, 0x21bd, 0x21dd, 0x21fd, 0x221d, 0x223d, 0x225d, 0x227d, - 0x229d, 0x22bd, 0x22dd, 0x22fd, 0x231d, 0x233d, 0x235d, 0x237d, - 0x239d, 0x23bd, 0x23dd, 0x23fd, 0x241d, 0x243d, 0x245d, 0x247d, - 0x249d, 0x24bd, 0x24dd, 0x24fd, 0x251d, 0x253d, 0x255d, 0x257d, - 0x259d, 0x25bd, 0x25dd, 0x25fd, 0x261d, 0x263d, 0x265d, 0x267d, - // Entry 3C80 - 3CBF - 0x269d, 0x26bd, 0x26dd, 0x26fd, 0x271d, 0x273d, 0x275d, 0x277d, - 0x279d, 0x27bd, 0x27dd, 0x27fd, 0x281d, 0x283d, 0x285d, 0x287d, - 0x289d, 0x28bd, 0x28dd, 0x28fd, 0x291d, 0x293d, 0x295d, 0x297d, - 0x299d, 0x29bd, 0x29dd, 0x29fd, 0x2a1d, 0x2a3d, 0x2a5d, 0x2a7d, - 0x2a9d, 0x2abd, 0x2add, 0x2afd, 0x2b1d, 0x2b3d, 0x2b5d, 0x2b7d, - 0x2b9d, 0x2bbd, 0x2bdd, 0x2bfd, 0x2c1d, 0x2c3d, 0x2c5d, 0x2c7d, - 0x2c9d, 0x2cbd, 0x2cdd, 0x2cfd, 0x2d1d, 0x2d3d, 0x2d5d, 0x2d7d, - 0x2d9d, 0x2dbd, 0x2ddd, 0x2dfd, 0x2e1d, 0x2e3d, 0x2e5d, 0x2e7d, - // Entry 3CC0 - 3CFF - 0x2e9d, 0x2ebd, 0x2edd, 0x2efd, 0x2f1d, 0x2f3d, 0x2f5d, 0x035d, - 0x037d, 0x039d, 0x03bd, 0x03dd, 0x03fd, 0x041d, 0x043d, 0x045d, - 0x047d, 0x049d, 0x04bd, 0x04dd, 0x04fd, 0x051d, 0x053d, 0x055d, - 0x057d, 0x059d, 0x05bd, 0x05dd, 0x05fd, 0x061d, 0x063d, 0x065d, - 0x067d, 0x069d, 0x06bd, 0x06dd, 0x06fd, 0x071d, 0x073d, 0x075d, - 0x077d, 0x079d, 0x07bd, 0x07dd, 0x07fd, 0x081d, 0x083d, 0x085d, - 0x087d, 0x089d, 0x08bd, 0x08dd, 0x08fd, 0x091d, 0x093d, 0x095d, - 0x097d, 0x099d, 0x09bd, 0x09dd, 0x09fd, 0x0a1d, 0x0a3d, 0x0a5d, - // Entry 3D00 - 3D3F - 0x0a7d, 0x0a9d, 0x0abd, 0x0add, 0x0afd, 0x0b1d, 0x0b3d, 0x0b5d, - 0x0b7d, 0x0b9d, 0x0bbd, 0x0bdd, 0x0bfd, 0x0c1d, 0x0c3d, 0x0c5d, - 0x0c7d, 0x0c9d, 0x0cbd, 0x0cdd, 0x0cfd, 0x0d1d, 0x0d3d, 0x0d5d, - 0x0d7d, 0x0d9d, 0x0dbd, 0x0ddd, 0x0dfd, 0x0e1d, 0x0e3d, 0x0e5d, - 0x0e7d, 0x0e9d, 0x0ebd, 0x0edd, 0x0efd, 0x0f1d, 0x0f3d, 0x0f5d, - 0x0f7d, 0x0f9d, 0x0fbd, 0x0fdd, 0x0ffd, 0x101d, 0x103d, 0x105d, - 0x107d, 0x109d, 0x009d, 0x00b4, 0x00cb, 0x00e2, 0x00fa, 0x0112, - 0x012f, 0x0146, 0x0146, 0x0165, 0x0184, 0x01a3, 0x01c2, 0x01e1, - // Entry 3D40 - 3D7F - 0x01e1, 0x01fd, 0x021e, 0x0243, 0x0261, 0x0278, 0x0290, 0x02a5, - 0x02bb, 0x02d3, 0x02ef, 0x0306, 0x031c, 0x033f, 0x035f, 0x037e, - 0x03a9, 0x03d3, 0x03f0, 0x040e, 0x042b, 0x0448, 0x0467, 0x0486, - 0x04a1, 0x04be, 0x04dd, 0x00dd, 0x00fa, 0x0117, 0x013a, 0x0157, - 0x0176, 0x0176, 0x0193, 0x0193, 0x01b0, 0x01d0, 0x01d0, 0x01f2, - 0x020e, 0x020e, 0x022d, 0x024a, 0x0268, 0x0286, 0x02a3, 0x02bf, - 0x02da, 0x02f5, 0x030f, 0x0329, 0x034f, 0x0372, 0x0392, 0x03af, - 0x03ce, 0x03ec, 0x040b, 0x0427, 0x0445, 0x0462, 0x0483, 0x04a1, - // Entry 3D80 - 3DBF - 0x04c1, 0x04e0, 0x0502, 0x0521, 0x0542, 0x0562, 0x0583, 0x05a1, - 0x05c1, 0x05e0, 0x0600, 0x061d, 0x063c, 0x065a, 0x0679, 0x0695, - 0x06b3, 0x06d0, 0x06f1, 0x070f, 0x072f, 0x074e, 0x076e, 0x078b, - 0x07aa, 0x07c8, 0x07e8, 0x0805, 0x0824, 0x0842, 0x0863, 0x0881, - 0x08a1, 0x08c0, 0x08e3, 0x0903, 0x0925, 0x0946, 0x0968, 0x0987, - 0x09a8, 0x09c6, 0x09e5, 0x0a01, 0x0a21, 0x0a3e, 0x0a5d, 0x0a79, - 0x0a99, 0x0ab6, 0x0ad7, 0x0af5, 0x0b15, 0x0b34, 0x0b53, 0x0b6f, - 0x0b8d, 0x0baa, 0x0bca, 0x0be7, 0x0c06, 0x0c24, 0x0c45, 0x0c63, - // Entry 3DC0 - 3DFF - 0x0c83, 0x0ca2, 0x0cc9, 0x0ced, 0x0d0e, 0x0d2c, 0x0d4c, 0x0d6b, - 0x0d99, 0x0dc4, 0x0de8, 0x0e09, 0x0e2c, 0x0e4e, 0x0e79, 0x0ea1, - 0x0ecb, 0x0ef4, 0x0f1a, 0x0f3d, 0x0f74, 0x0fa8, 0x0fbf, 0x0fd6, - 0x0ff2, 0x100e, 0x102c, 0x104a, 0x107b, 0x10ac, 0x10c9, 0x10e6, - 0x110d, 0x1134, 0x115b, 0x116d, 0x118a, 0x11a7, 0x01a7, 0x01c5, - 0x01e0, 0x01fd, 0x0219, 0x0236, 0x0250, 0x026e, 0x0289, 0x02a7, - 0x02c2, 0x02f0, 0x030e, 0x0329, 0x034f, 0x0372, 0x0398, 0x03bb, - 0x03d8, 0x03f2, 0x040e, 0x0429, 0x0466, 0x04a2, 0x04de, 0x0517, - // Entry 3E00 - 3E3F - 0x0551, 0x0588, 0x05c3, 0x05fb, 0x0634, 0x066a, 0x06a4, 0x06db, - 0x0715, 0x074c, 0x0785, 0x07bb, 0x07f3, 0x0846, 0x0896, 0x08e8, - 0x090d, 0x092f, 0x0953, 0x0976, 0x09b2, 0x09ed, 0x0a29, 0x0a6d, - 0x0aa8, 0x0ad3, 0x0afd, 0x0b28, 0x0b53, 0x0b86, 0x0bb0, 0x0bdb, - 0x0c05, 0x0c30, 0x0c5b, 0x0c8e, 0x0cb8, 0x0ce4, 0x0d10, 0x0d44, - 0x0d6f, 0x0d9a, 0x0dc6, 0x0df1, 0x0e1c, 0x0e48, 0x0e73, 0x0e9f, - 0x0ecb, 0x0ef6, 0x0f22, 0x0f4e, 0x0f78, 0x0fa3, 0x0fce, 0x0ff8, - 0x1023, 0x104e, 0x1078, 0x10a3, 0x10ce, 0x10f9, 0x1124, 0x1151, - // Entry 3E40 - 3E7F - 0x117e, 0x11a9, 0x11d3, 0x11fe, 0x1229, 0x125c, 0x1286, 0x12b0, - 0x12db, 0x130e, 0x1338, 0x1363, 0x138e, 0x13b8, 0x13e3, 0x140d, - 0x1438, 0x146b, 0x1495, 0x14c0, 0x14ea, 0x1515, 0x1540, 0x1573, - 0x159d, 0x15c9, 0x15f4, 0x1620, 0x164c, 0x1680, 0x16ab, 0x16d7, - 0x1702, 0x172e, 0x175a, 0x178e, 0x17b9, 0x17e4, 0x180f, 0x1842, - 0x186c, 0x1897, 0x18c1, 0x18ec, 0x1917, 0x194a, 0x1974, 0x19ac, - 0x19e3, 0x1a23, 0x1a55, 0x1a87, 0x1ab6, 0x1ae5, 0x1b14, 0x1b4e, - 0x1b86, 0x1bbf, 0x1bf8, 0x1c31, 0x1c72, 0x1caa, 0x1cd1, 0x1cf9, - // Entry 3E80 - 3EBF - 0x1d21, 0x1d49, 0x1d79, 0x1da0, 0x1dc7, 0x1def, 0x1e17, 0x1e3f, - 0x1e6f, 0x1e96, 0x1ebe, 0x1ee7, 0x1f10, 0x1f39, 0x1f6a, 0x1f92, - 0x1fc2, 0x1fe9, 0x2019, 0x2040, 0x2068, 0x208f, 0x20b7, 0x20e7, - 0x210e, 0x2136, 0x2166, 0x218d, 0x21b6, 0x21df, 0x2207, 0x2230, - 0x2259, 0x2282, 0x22b3, 0x22db, 0x2318, 0x233f, 0x2367, 0x238f, - 0x23b7, 0x23e7, 0x240e, 0x2449, 0x2483, 0x24be, 0x24f9, 0x2533, - 0x255d, 0x2586, 0x25b0, 0x25da, 0x2603, 0x262d, 0x2656, 0x2680, - 0x26aa, 0x26d3, 0x26fe, 0x2728, 0x2753, 0x277d, 0x27a7, 0x27d2, - // Entry 3EC0 - 3EFF - 0x27fd, 0x2828, 0x2852, 0x287d, 0x28a8, 0x28d1, 0x28fb, 0x2925, - 0x294f, 0x2978, 0x29a2, 0x29cc, 0x29f5, 0x2a1f, 0x2a49, 0x2a73, - 0x2a9f, 0x2acb, 0x2af5, 0x2b1e, 0x2b48, 0x2b72, 0x2b9b, 0x2bc5, - 0x2bef, 0x2c18, 0x2c42, 0x2c6b, 0x2c95, 0x2cbf, 0x2ce8, 0x2d12, - 0x2d3c, 0x2d65, 0x2d90, 0x2dba, 0x2de5, 0x2e10, 0x2e3b, 0x2e65, - 0x2e90, 0x2ebb, 0x2ee5, 0x2f0f, 0x2f39, 0x2f6f, 0x2f99, 0x2fc2, - 0x2fec, 0x3016, 0x303f, 0x3079, 0x30b2, 0x30db, 0x3103, 0x312c, - 0x3154, 0x317e, 0x31a7, 0x31d1, 0x31fa, 0x3225, 0x324f, 0x3277, - // Entry 3F00 - 3F3F - 0x32a0, 0x32c9, 0x32f3, 0x331c, 0x3345, 0x336d, 0x339a, 0x33c7, - 0x33f4, 0x3427, 0x3451, 0x3484, 0x34ae, 0x34e3, 0x350f, 0x3543, - 0x356e, 0x35a3, 0x35cf, 0x3602, 0x362c, 0x3660, 0x368b, 0x36bf, - 0x36ea, 0x371d, 0x3747, 0x377a, 0x37a4, 0x37d1, 0x37fd, 0x382a, - 0x3857, 0x3883, 0x38ae, 0x38d8, 0x3902, 0x3932, 0x3959, 0x3989, - 0x39b0, 0x39e2, 0x3a0b, 0x3a3c, 0x3a64, 0x3a96, 0x3abf, 0x3aef, - 0x3b16, 0x3b47, 0x3b6f, 0x3ba0, 0x3bc8, 0x3bf8, 0x3c1f, 0x3c4f, - 0x3c76, 0x3ca0, 0x3cc9, 0x3cf3, 0x3d1d, 0x3d46, 0x3d6e, 0x3d95, - // Entry 3F40 - 3F7F - 0x3dbc, 0x3de8, 0x3e13, 0x3e3f, 0x3e6b, 0x3e95, 0x3ec0, 0x3eea, - 0x3f14, 0x3f3d, 0x3f67, 0x3f92, 0x3fbc, 0x3fe7, 0x4010, 0x4039, - 0x4066, 0x4096, 0x40ad, 0x40c5, 0x00c5, 0x00f9, 0x012a, 0x015d, - 0x0190, 0x01c4, 0x01f8, 0x022b, 0x025f, 0x0291, 0x02c5, 0x02f6, - 0x0330, 0x0364, 0x0398, 0x03d3, 0x0405, 0x0439, 0x046e, 0x04a1, - 0x04d6, 0x0506, 0x0538, 0x056a, 0x059d, 0x05d2, 0x0605, 0x0639, - 0x066f, 0x06a3, 0x06d9, 0x0712, 0x0744, 0x0778, 0x07a9, 0x07dc, - 0x0810, 0x0841, 0x0873, 0x08a5, 0x08d9, 0x0913, 0x0947, 0x097a, - // Entry 3F80 - 3FBF - 0x09b6, 0x09e8, 0x0a1c, 0x0a4d, 0x0a7f, 0x0ab0, 0x0ae0, 0x0b19, - 0x0b4d, 0x0b7f, 0x0bb1, 0x0be5, 0x0c16, 0x0c49, 0x0c7d, 0x0cb1, - 0x0ce2, 0x0d16, 0x0d4b, 0x0d80, 0x0db5, 0x01b5, 0x01ea, 0x021e, - 0x0252, 0x0286, 0x02c0, 0x02f3, 0x0328, 0x0363, 0x0395, 0x03d0, - 0x0402, 0x0436, 0x0467, 0x0498, 0x04d2, 0x0503, 0x053d, 0x056e, - 0x05a8, 0x05da, 0x0614, 0x064f, 0x068a, 0x06ba, 0x06ec, 0x071c, - 0x074d, 0x077e, 0x07ae, 0x07df, 0x0810, 0x0842, 0x0873, 0x08a4, - 0x08d7, 0x090a, 0x093b, 0x096c, 0x09a0, 0x09d2, 0x0a06, 0x0a38, - // Entry 3FC0 - 3FFF - 0x0a6a, 0x0a9c, 0x0acd, 0x0afe, 0x0b30, 0x0b61, 0x0b91, 0x0bc5, - 0x0bf9, 0x0c2d, 0x0c5f, 0x0c91, 0x0091, 0x00ce, 0x010a, 0x012d, - 0x0150, 0x0176, 0x0199, 0x01bd, 0x01e1, 0x0207, 0x022a, 0x0255, - 0x0274, 0x027d, 0x02aa, 0x02aa, 0x02be, 0x02d2, 0x02e6, 0x02fa, - 0x030e, 0x0322, 0x0336, 0x034a, 0x035e, 0x0373, 0x0388, 0x039d, - 0x03b2, 0x03c7, 0x03dc, 0x03f1, 0x0415, 0x0445, 0x0479, 0x049d, - 0x04c5, 0x04f4, 0x0520, 0x055c, 0x0599, 0x05cb, 0x01cb, 0x01e7, - 0x0204, 0x0224, 0x0245, 0x025f, 0x027a, 0x0295, 0x02b7, 0x02da, - // Entry 4000 - 403F - 0x02f9, 0x0319, 0x0339, 0x035a, 0x037b, 0x039d, 0x03c0, 0x03ed, - 0x0413, 0x0439, 0x0460, 0x048c, 0x04bb, 0x04eb, 0x051c, 0x054e, - 0x0588, 0x05c3, 0x05ff, 0x063c, 0x0674, 0x06ad, 0x06de, 0x0710, - 0x0742, 0x0775, 0x07ad, 0x07e6, 0x07f0, 0x0800, 0x0832, 0x0865, - 0x0874, 0x0887, 0x0894, 0x08a8, 0x08b7, 0x08ca, 0x08d7, 0x08e2, - 0x08f9, 0x0908, 0x0108, 0x0117, 0x0122, 0x0135, 0x014b, 0x0158, - 0x016e, 0x0185, 0x019d, 0x01b6, 0x01d7, 0x01f9, 0x020a, 0x0219, - 0x0227, 0x0236, 0x0248, 0x025c, 0x0273, 0x0284, 0x0284, 0x0299, - // Entry 4040 - 407F - 0x02aa, 0x02bc, 0x02cf, 0x02cf, 0x02ec, 0x030e, 0x032b, 0x033f, - 0x035c, 0x035c, 0x0376, 0x038e, 0x03a8, 0x03c0, 0x03da, 0x03f2, - 0x040d, 0x0426, 0x0440, 0x0458, 0x0479, 0x04aa, 0x04d8, 0x0509, - 0x0537, 0x0567, 0x0594, 0x05c5, 0x05f3, 0x0623, 0x0650, 0x067f, - 0x06ad, 0x06cd, 0x06ea, 0x0709, 0x0725, 0x0743, 0x0760, 0x0787, - 0x07ab, 0x07ca, 0x07e6, 0x0804, 0x0821, 0x0841, 0x085e, 0x087d, - 0x089b, 0x08bb, 0x08d8, 0x08f7, 0x0915, 0x0934, 0x0950, 0x096e, - 0x098b, 0x09ab, 0x09c8, 0x09e7, 0x0a05, 0x0a24, 0x0a40, 0x0a60, - // Entry 4080 - 40BF - 0x0a7d, 0x0a9c, 0x0ab8, 0x0ad8, 0x0af5, 0x0b15, 0x0b32, 0x0b51, - 0x0b6f, 0x0b90, 0x0bae, 0x0bce, 0x0bed, 0x0c0c, 0x0c28, 0x0c46, - 0x0c63, 0x0c82, 0x0c9e, 0x0cbc, 0x0cd9, 0x0cf8, 0x0d14, 0x0d32, - 0x0d4f, 0x0d6e, 0x0d8a, 0x0da8, 0x0dc5, 0x0de4, 0x0e00, 0x0e1e, - 0x0e3b, 0x0e5c, 0x0e7a, 0x0e9a, 0x0eb9, 0x0ed8, 0x0ef4, 0x0f12, - 0x0f2f, 0x0f4e, 0x0f6a, 0x0f88, 0x0fa5, 0x0fc4, 0x0fe0, 0x0ffe, - 0x101b, 0x103a, 0x1056, 0x1074, 0x1091, 0x10b1, 0x10ce, 0x10ed, - 0x110b, 0x112b, 0x1148, 0x1167, 0x1185, 0x11a4, 0x11c0, 0x11de, - // Entry 40C0 - 40FF - 0x11fb, 0x121a, 0x1236, 0x125e, 0x1283, 0x12a2, 0x12be, 0x12dc, - 0x12f9, 0x1335, 0x136e, 0x13aa, 0x13e3, 0x141f, 0x1458, 0x1483, - 0x14ab, 0x00ab, 0x00c4, 0x00c4, 0x00de, 0x00f6, 0x010b, 0x0120, - 0x0136, 0x0149, 0x015d, 0x0177, 0x0192, 0x01a4, 0x01b7, 0x01c6, - 0x01dc, 0x01ef, 0x0200, 0x0214, 0x0227, 0x023a, 0x024f, 0x0263, - 0x0277, 0x028a, 0x029f, 0x02b4, 0x02c8, 0x02d7, 0x02ea, 0x0302, - 0x0317, 0x0332, 0x0349, 0x0360, 0x0380, 0x03a0, 0x03c0, 0x03e0, - 0x0400, 0x0420, 0x0440, 0x0460, 0x0480, 0x04a0, 0x04c0, 0x04e0, - // Entry 4100 - 413F - 0x0500, 0x0520, 0x0540, 0x0560, 0x0580, 0x05a0, 0x05c0, 0x05e0, - 0x0600, 0x0620, 0x0640, 0x0660, 0x0680, 0x06a0, 0x06bd, 0x06d6, - 0x06f4, 0x070f, 0x0721, 0x0737, 0x0755, 0x0773, 0x0791, 0x07af, - 0x07cd, 0x07eb, 0x0809, 0x0827, 0x0845, 0x0863, 0x0881, 0x089f, - 0x08bd, 0x08db, 0x08f9, 0x0917, 0x0935, 0x0953, 0x0971, 0x098f, - 0x09ad, 0x09cb, 0x09e9, 0x0a07, 0x0a25, 0x0a43, 0x0a5f, 0x0a76, - 0x0a93, 0x0aa2, 0x0ac2, 0x0ae3, 0x0b02, 0x0b1f, 0x0b3d, 0x0b58, - 0x0b75, 0x0b91, 0x0bb2, 0x0bd3, 0x0bf4, 0x0c15, 0x0c36, 0x0c58, - // Entry 4140 - 417F - 0x0c7a, 0x0c9c, 0x0cbe, 0x0cee, 0x0d09, 0x0d24, 0x0d3f, 0x0d5a, - 0x0d75, 0x0d91, 0x0dad, 0x0dc9, 0x0de5, 0x0e01, 0x0e1d, 0x0e39, - 0x0e55, 0x0e71, 0x0e8d, 0x0ea9, 0x0ec5, 0x0ee1, 0x0efd, 0x0f19, - 0x0f35, 0x0f51, 0x0f6d, 0x0f89, 0x0fa5, 0x0fc1, 0x0fdd, 0x0ff9, - 0x1015, 0x1031, 0x104d, 0x1069, 0x1085, 0x10a1, 0x10bd, 0x10d9, - 0x10f5, 0x1111, 0x112d, 0x1149, 0x1165, 0x1181, 0x119d, 0x11b9, - 0x11d4, 0x11f8, 0x1221, 0x1238, 0x1256, 0x1279, 0x129c, 0x12b9, - 0x12dc, 0x12ff, 0x131d, 0x1340, 0x135d, 0x1381, 0x13a4, 0x13c7, - // Entry 4180 - 41BF - 0x13e9, 0x140e, 0x1433, 0x1456, 0x1473, 0x1490, 0x14b2, 0x14d4, - 0x14f0, 0x1511, 0x152e, 0x154b, 0x156d, 0x158c, 0x15ab, 0x15ca, - 0x15e9, 0x1606, 0x0206, 0x021f, 0x0239, 0x0253, 0x026e, 0x0288, - 0x02a1, 0x02a1, 0x02bc, 0x02d6, 0x02ef, 0x0309, 0x0324, 0x033e, - 0x033e, 0x0358, 0x0371, 0x038c, 0x03a6, 0x03c0, 0x03da, 0x03da, - 0x03f4, 0x040e, 0x0427, 0x0027, 0x003a, 0x004e, 0x0060, 0x0070, - 0x0084, 0x0096, 0x00a8, 0x00a8, 0x00c6, 0x00df, 0x00f6, 0x0110, - 0x0129, 0x013f, 0x0155, 0x0155, 0x0172, 0x0192, 0x01b3, 0x01cf, - // Entry 41C0 - 41FF - 0x01e4, 0x01e4, 0x01fc, 0x0214, 0x022c, 0x0244, 0x025c, 0x0275, - 0x028e, 0x02a7, 0x02c0, 0x02d9, 0x02f2, 0x030b, 0x030b, 0x0324, - 0x033d, 0x0356, 0x036f, 0x0388, 0x03a1, 0x03ba, 0x03d3, 0x03ec, - 0x0405, 0x041e, 0x0437, 0x0450, 0x0469, 0x0482, 0x049b, 0x04b4, - 0x04cd, 0x04e6, 0x04ff, 0x0518, 0x0531, 0x054a, 0x0563, 0x057c, - 0x0595, 0x0195, 0x01ae, 0x01c7, 0x01e0, 0x01f9, 0x0212, 0x022b, - 0x0244, 0x025d, 0x0276, 0x028f, 0x02a8, 0x02c1, 0x02da, 0x02f3, - 0x030c, 0x0325, 0x033e, 0x0357, 0x0370, 0x0370, 0x0389, 0x03a2, - // Entry 4200 - 423F - 0x03a2, 0x03bb, 0x03d4, 0x03ed, 0x0406, 0x0420, 0x043a, 0x0454, - 0x046e, 0x0488, 0x04a2, 0x04bc, 0x04d6, 0x04f0, 0x050a, 0x0524, - 0x0124, 0x0138, 0x014c, 0x0160, 0x0174, 0x0188, 0x019c, 0x01b0, - 0x01c4, 0x01d8, 0x01ec, 0x0200, 0x0214, 0x0228, 0x023c, 0x023c, - 0x0256, 0x0272, 0x028d, 0x02a9, 0x02c5, 0x02e5, 0x0300, 0x031b, - 0x033b, 0x035a, 0x0375, 0x0391, 0x03ac, 0x03c8, 0x03e4, 0x0401, - 0x041d, 0x0439, 0x0457, 0x0472, 0x048f, 0x04a9, 0x04c4, 0x04da, - 0x04f6, 0x0511, 0x052e, 0x0549, 0x055f, 0x057a, 0x0590, 0x05a6, - // Entry 4240 - 427F - 0x05c1, 0x05d7, 0x05ed, 0x0603, 0x061f, 0x0635, 0x064b, 0x0667, - 0x067d, 0x0693, 0x06b1, 0x06ce, 0x06e4, 0x06fa, 0x0710, 0x0726, - 0x073c, 0x0752, 0x0768, 0x077e, 0x0794, 0x07b0, 0x07c6, 0x07e1, - 0x07f7, 0x080d, 0x0823, 0x0839, 0x084f, 0x0865, 0x087b, 0x0891, - 0x08a7, 0x08bd, 0x08d3, 0x08f0, 0x0910, 0x092e, 0x094a, 0x0966, - 0x097c, 0x0998, 0x09ae, 0x09c4, 0x09ea, 0x0a08, 0x0a2c, 0x0a48, - 0x0a5e, 0x0a74, 0x0a90, 0x0aa6, 0x0abc, 0x0ad2, 0x0ae8, 0x0afe, - 0x0b19, 0x0b2f, 0x0b45, 0x0b5b, 0x0b71, 0x0b87, 0x0ba4, 0x0bc1, - // Entry 4280 - 42BF - 0x0bde, 0x0bfb, 0x0c18, 0x0c35, 0x0c52, 0x0c6f, 0x0c8c, 0x0ca9, - 0x0cc6, 0x0ce3, 0x0d00, 0x0d1d, 0x0d3a, 0x0d57, 0x0d74, 0x0d91, - 0x0dae, 0x0dcb, 0x0de8, 0x0e05, 0x0e22, 0x0e3f, 0x0e5c, 0x0e79, - 0x0e96, 0x0eb3, 0x0ed0, 0x02d0, 0x02ea, 0x0303, 0x0314, 0x0314, - 0x0325, 0x0336, 0x0349, 0x035b, 0x036d, 0x037e, 0x0391, 0x03a4, - 0x03b6, 0x03c7, 0x03db, 0x03ef, 0x0402, 0x0415, 0x0428, 0x043d, - 0x0451, 0x0465, 0x047e, 0x0497, 0x04b2, 0x04cc, 0x04e6, 0x04ff, - 0x051a, 0x0535, 0x054f, 0x0569, 0x0583, 0x059f, 0x05ba, 0x05d5, - // Entry 42C0 - 42FF - 0x05ef, 0x060b, 0x0627, 0x0642, 0x065c, 0x0679, 0x0696, 0x06b2, - 0x06ce, 0x06ea, 0x0708, 0x0725, 0x0742, 0x0342, 0x0359, 0x0374, - 0x0390, 0x03ab, 0x03c7, 0x03e7, 0x040a, 0x0427, 0x0443, 0x0465, - 0x0484, 0x04a6, 0x04c1, 0x04dd, 0x0500, 0x0524, 0x0549, 0x056c, - 0x058e, 0x05b2, 0x05dc, 0x0607, 0x0632, 0x065e, 0x0681, 0x06a3, - 0x06c7, 0x06f1, 0x071c, 0x0747, 0x0772, 0x079f, 0x07be, 0x07e3, - 0x0800, 0x081f, 0x083e, 0x085b, 0x0881, 0x08a9, 0x08c9, 0x08e8, - 0x0916, 0x0935, 0x0953, 0x0970, 0x0990, 0x09b1, 0x09e1, 0x0a02, - // Entry 4300 - 433F - 0x0a21, 0x0a46, 0x0a6d, 0x0a95, 0x0abd, 0x0ae3, 0x0b0a, 0x0b2e, - 0x0b54, 0x0b7b, 0x0b9d, 0x0bc1, 0x0bd4, 0x0bf6, 0x0c0b, 0x0c24, - 0x0c33, 0x0c44, 0x0c56, 0x0c65, 0x0c79, 0x0c8f, 0x0ca4, 0x0cb9, - 0x0ccc, 0x0ce3, 0x0cf3, 0x0d04, 0x0d15, 0x0d26, 0x0d37, 0x0d48, - 0x0d60, 0x0d6f, 0x0d85, 0x0d98, 0x0dac, 0x0db8, 0x01b8, 0x01ca, - 0x01da, 0x01ed, 0x01ff, 0x0219, 0x022b, 0x023e, 0x0252, 0x0267, - 0x027b, 0x0288, 0x029c, 0x029c, 0x02b0, 0x02b0, 0x02cd, 0x02eb, - 0x030b, 0x0325, 0x033d, 0x0355, 0x036e, 0x0389, 0x03a1, 0x03b9, - // Entry 4340 - 437F - 0x03cf, 0x03e8, 0x03ff, 0x041a, 0x0434, 0x044a, 0x0460, 0x047c, - 0x049e, 0x04b7, 0x04ce, 0x04e6, 0x04ff, 0x0519, 0x0530, 0x0547, - 0x055e, 0x057a, 0x0590, 0x05a6, 0x05be, 0x05d5, 0x05ed, 0x0603, - 0x0620, 0x0637, 0x0651, 0x066b, 0x0682, 0x069c, 0x06b4, 0x06cd, - 0x06e8, 0x0704, 0x0720, 0x074b, 0x034b, 0x035a, 0x0369, 0x0378, - 0x0388, 0x0397, 0x03a6, 0x03b5, 0x03c4, 0x03d3, 0x03e3, 0x03f2, - 0x0401, 0x0410, 0x041f, 0x042e, 0x043d, 0x044d, 0x045d, 0x046c, - 0x047b, 0x048b, 0x049a, 0x04a9, 0x04b8, 0x04c8, 0x04d8, 0x04e8, - // Entry 4380 - 43BF - 0x04f7, 0x0506, 0x0106, 0x0115, 0x0125, 0x0134, 0x0143, 0x0154, - 0x0163, 0x0173, 0x0183, 0x0192, 0x01a1, 0x01b0, 0x01bf, 0x01cf, - 0x01de, 0x01ee, 0x01ff, 0x020e, 0x0220, 0x022f, 0x023f, 0x024e, - 0x025d, 0x026e, 0x027d, 0x028d, 0x029c, 0x02ab, 0x02bd, 0x02cc, - 0x02dc, 0x02ec, 0x02fc, 0x030b, 0x031b, 0x032b, 0x033c, 0x034c, - 0x035c, 0x036e, 0x037e, 0x0390, 0x03a0, 0x03b0, 0x03c1, 0x03d2, - 0x03e3, 0x03f4, 0x0404, 0x0416, 0x0016, 0x0031, 0x0047, 0x005d, - 0x0075, 0x008c, 0x00a3, 0x00b9, 0x00d1, 0x00e9, 0x0100, 0x0117, - // Entry 43C0 - 43FF - 0x0131, 0x014b, 0x0164, 0x017d, 0x0196, 0x01b1, 0x01cb, 0x01e5, - 0x0204, 0x0223, 0x0244, 0x0264, 0x0284, 0x02a3, 0x02c4, 0x02e5, - 0x0305, 0x0305, 0x0318, 0x032c, 0x0340, 0x0354, 0x0367, 0x037b, - 0x038f, 0x03a3, 0x03b8, 0x03cb, 0x03df, 0x03f3, 0x0407, 0x041b, - 0x0430, 0x0443, 0x0457, 0x046c, 0x0480, 0x0494, 0x04a8, 0x04bc, - 0x04cf, 0x04e4, 0x04f9, 0x050e, 0x0522, 0x0537, 0x054c, 0x0560, - 0x0574, 0x0589, 0x059f, 0x05b6, 0x05cc, 0x05e4, 0x01e4, 0x01f6, - 0x020b, 0x021d, 0x022f, 0x0243, 0x0259, 0x026b, 0x027d, 0x0291, - // Entry 4400 - 443F - 0x02a2, 0x02b5, 0x02c8, 0x02db, 0x02ef, 0x0300, 0x0312, 0x0328, - 0x033c, 0x034f, 0x0362, 0x0375, 0x0388, 0x039b, 0x03ae, 0x03c1, - 0x03d4, 0x03ee, 0x03ee, 0x0402, 0x0417, 0x042c, 0x0441, 0x0454, - 0x046a, 0x0481, 0x0497, 0x04ae, 0x04c1, 0x04d7, 0x04ec, 0x0503, - 0x051a, 0x0530, 0x0546, 0x055b, 0x0570, 0x0585, 0x0598, 0x05af, - 0x05c6, 0x05df, 0x05f4, 0x060a, 0x061d, 0x0631, 0x0645, 0x0659, - 0x066f, 0x0684, 0x0699, 0x06af, 0x06c4, 0x06d8, 0x06ec, 0x0700, - 0x0714, 0x0732, 0x0751, 0x0771, 0x0792, 0x07b1, 0x03b1, 0x03c5, - // Entry 4440 - 447F - 0x03d9, 0x03ee, 0x0401, 0x0416, 0x0428, 0x043a, 0x044e, 0x0462, - 0x0475, 0x0488, 0x049b, 0x04af, 0x04c4, 0x04d7, 0x04eb, 0x04fe, - 0x0510, 0x0525, 0x0538, 0x054a, 0x055e, 0x0572, 0x0587, 0x059d, - 0x05b2, 0x05c4, 0x05d5, 0x05e6, 0x05f9, 0x01f9, 0x020e, 0x0220, - 0x0232, 0x0244, 0x0257, 0x026a, 0x027d, 0x0290, 0x02a3, 0x02b6, - 0x02c9, 0x02dc, 0x02ef, 0x0302, 0x0315, 0x0328, 0x033b, 0x034f, - 0x0362, 0x0375, 0x0388, 0x039b, 0x03ae, 0x03c1, 0x03d4, 0x03e7, - 0x03fa, 0x040d, 0x0420, 0x0433, 0x0446, 0x0459, 0x046c, 0x047f, - // Entry 4480 - 44BF - 0x0493, 0x04a7, 0x04ba, 0x00ba, 0x00d5, 0x00f2, 0x010f, 0x012c, - 0x0146, 0x0162, 0x0177, 0x018f, 0x01a7, 0x01bd, 0x01d3, 0x01e9, - 0x0202, 0x021c, 0x021c, 0x0239, 0x0256, 0x0273, 0x0291, 0x02ae, - 0x02cc, 0x02ea, 0x0308, 0x0326, 0x0345, 0x0363, 0x0382, 0x039b, - 0x03b4, 0x03cd, 0x03e7, 0x03ff, 0x0419, 0x0433, 0x044d, 0x0467, - 0x0482, 0x049c, 0x04b6, 0x04d0, 0x04e9, 0x0503, 0x051d, 0x0538, - 0x0551, 0x056b, 0x0585, 0x05a0, 0x05b9, 0x05d2, 0x05eb, 0x0604, - 0x061e, 0x0637, 0x0650, 0x066b, 0x0686, 0x06a1, 0x06bd, 0x06d8, - // Entry 44C0 - 44FF - 0x06f4, 0x0710, 0x072c, 0x0748, 0x0765, 0x0781, 0x079e, 0x07b5, - 0x07cc, 0x07e3, 0x07fb, 0x0811, 0x0829, 0x0841, 0x0859, 0x0871, - 0x088a, 0x08a2, 0x08ba, 0x08d2, 0x08e9, 0x0901, 0x0919, 0x0932, - 0x0949, 0x0961, 0x0979, 0x0992, 0x09a9, 0x09c0, 0x09d7, 0x09ee, - 0x0a06, 0x0a1d, 0x0a34, 0x0a47, 0x0a59, 0x0a6c, 0x0a7e, 0x0a92, - 0x0aa3, 0x0ab6, 0x0acb, 0x0add, 0x0af0, 0x0b02, 0x0b15, 0x0b27, - 0x0b39, 0x0b4c, 0x0b5e, 0x0b74, 0x0b88, 0x0b9a, 0x0bae, 0x0bc1, - 0x0bd4, 0x0be5, 0x0bf7, 0x0c09, 0x0c1b, 0x0c2c, 0x0c3f, 0x0c51, - // Entry 4500 - 453F - 0x0c62, 0x0c75, 0x0c87, 0x0c99, 0x0cab, 0x0cbd, 0x0cce, 0x0ce0, - 0x0cf3, 0x0d05, 0x0d17, 0x0d29, 0x0d3a, 0x0d4c, 0x0d5e, 0x0d72, - 0x0d84, 0x0d96, 0x0da8, 0x0dbb, 0x0dcc, 0x0ddd, 0x0dee, 0x0dff, - 0x0e11, 0x0e24, 0x0e35, 0x0e46, 0x0e5a, 0x0e6c, 0x0e7f, 0x0e90, - 0x0ea1, 0x0eb4, 0x0ec7, 0x0eda, 0x0eed, 0x0f00, 0x0f12, 0x0f23, - 0x0f34, 0x0f44, 0x0f54, 0x0f64, 0x0f74, 0x0f84, 0x0f95, 0x0fa6, - 0x0fb7, 0x03b7, 0x03c9, 0x03da, 0x03eb, 0x03fe, 0x0410, 0x0422, - 0x0433, 0x0446, 0x0459, 0x046b, 0x006b, 0x0081, 0x0098, 0x00b0, - // Entry 4540 - 457F - 0x00c7, 0x00df, 0x00f7, 0x0111, 0x0127, 0x013f, 0x0156, 0x016e, - 0x0184, 0x019b, 0x01b4, 0x01cc, 0x01e3, 0x01fa, 0x0211, 0x0227, - 0x023f, 0x0256, 0x026f, 0x0286, 0x029e, 0x02b5, 0x02ce, 0x02e6, - 0x0300, 0x0319, 0x0331, 0x0347, 0x035e, 0x0376, 0x038e, 0x03a5, - 0x03bd, 0x03bd, 0x03d1, 0x03e6, 0x03fc, 0x0411, 0x0427, 0x043d, - 0x0455, 0x0469, 0x047f, 0x0494, 0x04aa, 0x04be, 0x04d3, 0x04ea, - 0x0500, 0x0515, 0x052a, 0x053f, 0x0553, 0x0569, 0x057e, 0x0595, - 0x05aa, 0x05c0, 0x05d5, 0x05ec, 0x0602, 0x061a, 0x0631, 0x0647, - // Entry 4580 - 45BF - 0x065b, 0x0670, 0x0686, 0x069c, 0x06b1, 0x06c7, 0x02c7, 0x02d7, - 0x02e8, 0x02f9, 0x030b, 0x031c, 0x032e, 0x0340, 0x0351, 0x0361, - 0x0372, 0x0383, 0x0395, 0x03a6, 0x03b6, 0x03c7, 0x03d8, 0x03e9, - 0x03fb, 0x040c, 0x041d, 0x042e, 0x0440, 0x0450, 0x0461, 0x0472, - 0x0483, 0x0495, 0x04a6, 0x04b8, 0x04c9, 0x04db, 0x04eb, 0x04fc, - 0x050d, 0x051d, 0x052e, 0x0540, 0x0552, 0x0567, 0x0579, 0x0179, - 0x0196, 0x01b3, 0x01d0, 0x01ed, 0x0209, 0x0227, 0x0244, 0x0262, - 0x027f, 0x029c, 0x02ba, 0x02d7, 0x02f4, 0x0311, 0x032e, 0x034c, - // Entry 45C0 - 45FF - 0x036a, 0x0388, 0x03a5, 0x03c3, 0x03e0, 0x03fe, 0x041c, 0x0439, - 0x0456, 0x0474, 0x0491, 0x04af, 0x04cc, 0x04e9, 0x0507, 0x0526, - 0x0544, 0x0562, 0x057e, 0x059c, 0x05b9, 0x05d7, 0x05f5, 0x0612, - 0x0631, 0x064e, 0x066c, 0x068a, 0x06a8, 0x06c6, 0x06e3, 0x0701, - 0x071f, 0x073d, 0x075b, 0x0778, 0x0378, 0x0398, 0x0398, 0x03ab, - 0x03be, 0x03d1, 0x03e4, 0x03f7, 0x040a, 0x041d, 0x0430, 0x0443, - 0x0456, 0x0469, 0x047c, 0x048f, 0x04a2, 0x04b5, 0x04c8, 0x04dc, - 0x04f0, 0x0503, 0x0517, 0x052b, 0x053e, 0x0552, 0x0565, 0x0578, - // Entry 4600 - 463F - 0x058b, 0x059e, 0x05b1, 0x05c4, 0x05d7, 0x05ea, 0x05fd, 0x0610, - 0x0623, 0x0636, 0x0649, 0x065c, 0x066f, 0x0682, 0x0695, 0x06a8, - 0x06bb, 0x06ce, 0x06e1, 0x06f4, 0x0707, 0x071a, 0x072d, 0x0740, - 0x0753, 0x0766, 0x0779, 0x078c, 0x079f, 0x07b2, 0x07c5, 0x07d8, - 0x07eb, 0x07fe, 0x0811, 0x0824, 0x0837, 0x084a, 0x085d, 0x0870, - 0x0883, 0x0896, 0x08a9, 0x08bc, 0x08cf, 0x08e2, 0x08f8, 0x090b, - 0x091e, 0x0931, 0x0944, 0x0957, 0x096b, 0x097f, 0x0992, 0x09a5, - 0x09b8, 0x09cb, 0x09de, 0x09f1, 0x0a03, 0x0a15, 0x0a27, 0x0a39, - // Entry 4640 - 467F - 0x0a4b, 0x0a5d, 0x0a6f, 0x0a81, 0x0a94, 0x0aa7, 0x0aba, 0x0acc, - 0x0ade, 0x0af0, 0x0b03, 0x0b16, 0x0b29, 0x0b3b, 0x0b4d, 0x0b5f, - 0x0b71, 0x0b83, 0x0b95, 0x0ba7, 0x0bb9, 0x0bcb, 0x0bdd, 0x0bef, - 0x0c01, 0x0c13, 0x0c25, 0x0c37, 0x0c49, 0x0c5b, 0x0c6d, 0x0c7f, - 0x0c91, 0x0ca3, 0x0cb5, 0x0cc7, 0x0cd9, 0x0ceb, 0x0cfd, 0x0d0f, - 0x0d21, 0x0d33, 0x0d45, 0x0d57, 0x0d69, 0x0d7b, 0x0d8d, 0x0d9f, - 0x0db1, 0x0dc3, 0x0dd5, 0x0de7, 0x0df9, 0x0e0b, 0x0e1d, 0x0e2f, - 0x0e41, 0x0e53, 0x0e65, 0x0e77, 0x0e89, 0x0e9b, 0x0ead, 0x0ebf, - // Entry 4680 - 46BF - 0x0ed1, 0x0ee3, 0x0ef5, 0x0f07, 0x0f19, 0x0f2b, 0x0f3d, 0x0f53, - 0x0f69, 0x0f7f, 0x0f95, 0x0fab, 0x0fc1, 0x0fd7, 0x0fed, 0x1003, - 0x1019, 0x102f, 0x1045, 0x105b, 0x1071, 0x1087, 0x109d, 0x10b3, - 0x10c9, 0x10df, 0x10f1, 0x1103, 0x1115, 0x1127, 0x1139, 0x114b, - 0x115d, 0x116f, 0x1181, 0x1193, 0x11a5, 0x11b7, 0x11c9, 0x11db, - 0x11ed, 0x11ff, 0x1211, 0x1223, 0x1235, 0x1247, 0x1259, 0x126b, - 0x127d, 0x128f, 0x12a1, 0x12b3, 0x12c5, 0x12d7, 0x12e9, 0x12fb, - 0x130d, 0x131f, 0x1331, 0x1343, 0x1355, 0x1367, 0x1379, 0x138b, - // Entry 46C0 - 46FF - 0x139d, 0x13af, 0x13c1, 0x13d3, 0x13e5, 0x13f7, 0x1409, 0x141b, - 0x142d, 0x143f, 0x1451, 0x1463, 0x1475, 0x1487, 0x1499, 0x14ab, - 0x14bd, 0x14cf, 0x14e1, 0x14f3, 0x1505, 0x1517, 0x1529, 0x153b, - 0x154d, 0x155f, 0x1571, 0x1583, 0x1595, 0x15a7, 0x15b9, 0x15cb, - 0x15dd, 0x15ef, 0x1601, 0x1613, 0x1625, 0x1637, 0x1649, 0x165b, - 0x166d, 0x167f, 0x1691, 0x16a3, 0x16b5, 0x16c7, 0x16d9, 0x16eb, - 0x16fd, 0x170f, 0x1721, 0x1733, 0x1745, 0x1757, 0x1769, 0x177b, - 0x178d, 0x179f, 0x17b1, 0x17c3, 0x17d5, 0x17e7, 0x17f9, 0x180b, - // Entry 4700 - 473F - 0x181d, 0x182f, 0x1841, 0x1853, 0x1865, 0x1877, 0x1889, 0x189b, - 0x18ad, 0x18bf, 0x18d1, 0x18e3, 0x18f5, 0x1907, 0x1919, 0x192b, - 0x193d, 0x194f, 0x1961, 0x1973, 0x1985, 0x1997, 0x19a9, 0x19bb, - 0x19cd, 0x19df, 0x19f1, 0x1a03, 0x1a15, 0x1a27, 0x0227, 0x023b, - 0x024f, 0x0263, 0x0277, 0x028b, 0x029f, 0x02b3, 0x02c7, 0x02db, - 0x02f2, 0x0309, 0x0320, 0x0337, 0x034b, 0x035f, 0x0373, 0x038b, - 0x03a1, 0x03b6, 0x03cb, 0x03e2, 0x03f7, 0x03f7, 0x0409, 0x041b, - 0x042d, 0x043f, 0x0451, 0x0463, 0x0475, 0x0487, 0x0087, 0x0099, - // Entry 4740 - 477F - 0x00ab, 0x00bd, 0x00cf, 0x00e1, 0x00f4, 0x00f4, 0x0107, 0x0107, - 0x011a, 0x012d, 0x0140, 0x0153, 0x0166, 0x0179, 0x018c, 0x019f, - 0x01b2, 0x01c5, 0x01d8, 0x01eb, 0x01fe, 0x0211, 0x0224, 0x0237, - 0x024a, 0x025d, 0x0270, 0x0283, 0x0296, 0x02a9, 0x02bc, 0x02cf, - 0x02e2, 0x02f5, 0x0308, 0x031b, 0x032e, 0x0341, 0x0354, 0x0367, - 0x037a, 0x038d, 0x03a0, 0x03b3, 0x03c6, 0x03d9, 0x03ec, 0x03ff, - 0x0412, 0x0425, 0x0438, 0x044b, 0x004b, 0x005e, 0x0071, 0x0071, - 0x0084, 0x0084, 0x0097, 0x00b4, 0x00d0, 0x00ed, 0x010b, 0x0125, - // Entry 4780 - 47BF - 0x0140, 0x015d, 0x0179, 0x0195, 0x01b1, 0x01cd, 0x01eb, 0x0206, - 0x0221, 0x023f, 0x025b, 0x0275, 0x0292, 0x02ae, 0x02ca, 0x02e6, - 0x0301, 0x0301, 0x031e, 0x0339, 0x0354, 0x0371, 0x038c, 0x03aa, - 0x03cd, 0x03f1, 0x0415, 0x042b, 0x0440, 0x0456, 0x046d, 0x0480, - 0x0494, 0x04aa, 0x04bf, 0x04d4, 0x04e9, 0x04fe, 0x0515, 0x0529, - 0x0543, 0x0557, 0x056e, 0x0583, 0x0596, 0x05ac, 0x05c1, 0x05d6, - 0x05eb, 0x05ff, 0x061e, 0x063e, 0x0652, 0x0666, 0x067c, 0x0691, - 0x06a6, 0x06ba, 0x06d1, 0x06ed, 0x0703, 0x071e, 0x0733, 0x0749, - // Entry 47C0 - 47FF - 0x0760, 0x0779, 0x078c, 0x07a0, 0x07b6, 0x07cb, 0x07e0, 0x07fb, - 0x0810, 0x082b, 0x0840, 0x085d, 0x0874, 0x088e, 0x08a2, 0x08bc, - 0x08d0, 0x08e7, 0x08fc, 0x090f, 0x0925, 0x093a, 0x094f, 0x096a, - 0x097f, 0x0993, 0x0193, 0x01a7, 0x01bb, 0x01d1, 0x01e6, 0x0205, - 0x021a, 0x022e, 0x0245, 0x0261, 0x0261, 0x0274, 0x0286, 0x0299, - 0x02b2, 0x02c2, 0x02d3, 0x02e5, 0x02f7, 0x0309, 0x031b, 0x032d, - 0x0341, 0x0352, 0x0363, 0x0377, 0x0388, 0x0398, 0x03ab, 0x03bd, - 0x03bd, 0x03cf, 0x03e0, 0x03e0, 0x03f1, 0x0403, 0x0414, 0x0428, - // Entry 4800 - 483F - 0x0441, 0x0456, 0x046b, 0x0481, 0x0497, 0x04ab, 0x04c0, 0x04d5, - 0x04ea, 0x04ff, 0x0514, 0x0529, 0x053f, 0x0554, 0x0569, 0x057f, - 0x0594, 0x05a8, 0x05be, 0x05d3, 0x05e9, 0x05ff, 0x0614, 0x0629, - 0x063e, 0x0656, 0x0673, 0x0688, 0x069f, 0x029f, 0x02b8, 0x02c7, - 0x02d6, 0x02e5, 0x02f4, 0x0303, 0x0312, 0x0321, 0x0330, 0x033f, - 0x034e, 0x035d, 0x036c, 0x037b, 0x038a, 0x039a, 0x03a9, 0x03b8, - 0x03c7, 0x03d6, 0x03e5, 0x03f5, 0x0405, 0x0415, 0x0425, 0x0435, - 0x0444, 0x0044, 0x005a, 0x005a, 0x0078, 0x0096, 0x00b4, 0x00d2, - // Entry 4840 - 487F - 0x00f1, 0x0110, 0x012f, 0x0150, 0x016f, 0x018e, 0x01ad, 0x01ce, - 0x01ed, 0x020e, 0x022d, 0x024e, 0x026d, 0x028d, 0x02ad, 0x02cc, - 0x02ed, 0x030c, 0x032b, 0x034a, 0x0369, 0x038a, 0x03a9, 0x03ca, - 0x03e9, 0x0408, 0x0429, 0x044c, 0x0465, 0x047e, 0x0497, 0x04b0, - 0x04ca, 0x04e4, 0x04fe, 0x0518, 0x0532, 0x054c, 0x0566, 0x0580, - 0x059a, 0x05b5, 0x05d0, 0x05ea, 0x060c, 0x0626, 0x0640, 0x065a, - 0x0674, 0x068e, 0x06a8, 0x06c2, 0x02c2, 0x02eb, 0x030d, 0x032a, - 0x0347, 0x0362, 0x037d, 0x039a, 0x03b6, 0x03d2, 0x03ed, 0x040a, - // Entry 4880 - 48BF - 0x0427, 0x0443, 0x045e, 0x047c, 0x049a, 0x04b7, 0x04d4, 0x04f1, - 0x0510, 0x0110, 0x0133, 0x0156, 0x017b, 0x019f, 0x01c3, 0x01e6, - 0x020b, 0x0230, 0x0254, 0x0278, 0x029c, 0x02c2, 0x02e7, 0x030c, - 0x0330, 0x0356, 0x037c, 0x03a1, 0x03c5, 0x03ec, 0x0413, 0x0439, - 0x045f, 0x0485, 0x04ad, 0x04d4, 0x04fb, 0x0527, 0x0553, 0x0581, - 0x05ae, 0x05db, 0x0607, 0x0635, 0x0663, 0x0690, 0x06b5, 0x06db, - 0x0703, 0x072a, 0x0751, 0x0777, 0x079f, 0x07c7, 0x07ee, 0x0814, - 0x0827, 0x083e, 0x0855, 0x0874, 0x0074, 0x008b, 0x00a2, 0x00a2, - // Entry 48C0 - 48FF - 0x00be, 0x00df, 0x00f7, 0x010e, 0x0122, 0x0137, 0x014b, 0x0160, - 0x0160, 0x0174, 0x0189, 0x019d, 0x019d, 0x01b2, 0x01c7, 0x01dd, - 0x01f2, 0x0208, 0x021d, 0x0231, 0x0246, 0x025a, 0x026f, 0x0283, - 0x0297, 0x02ac, 0x02c0, 0x02d5, 0x02e9, 0x02fd, 0x0311, 0x0325, - 0x0339, 0x034e, 0x0363, 0x0377, 0x038b, 0x039f, 0x03b4, 0x03cb, - 0x03cb, 0x03e4, 0x03f9, 0x0412, 0x0012, 0x0023, 0x0037, 0x004b, - 0x0061, 0x0076, 0x008b, 0x00a3, 0x00c0, 0x00de, 0x00de, 0x00f8, - 0x011b, 0x0138, 0x015b, 0x017a, 0x0196, 0x01b2, 0x01d5, 0x01f1, - // Entry 4900 - 493F - 0x01f1, 0x020c, 0x022b, 0x0248, 0x0264, 0x0281, 0x029d, 0x02ba, - 0x02d7, 0x02f4, 0x0310, 0x032c, 0x0349, 0x0365, 0x0383, 0x03a1, - 0x03c0, 0x03db, 0x03f8, 0x0414, 0x0433, 0x0451, 0x0470, 0x048e, - 0x04ab, 0x04c8, 0x04e8, 0x0505, 0x0522, 0x0540, 0x055c, 0x057a, - 0x059d, 0x05b9, 0x05d5, 0x05f1, 0x060e, 0x062a, 0x0646, 0x0663, - 0x067f, 0x069b, 0x06b7, 0x06d4, 0x06f0, 0x070d, 0x072a, 0x0746, - 0x0763, 0x077f, 0x079c, 0x07b8, 0x07d4, 0x07f1, 0x080d, 0x082b, - 0x0847, 0x0864, 0x0881, 0x089d, 0x08ba, 0x08d6, 0x08f2, 0x090e, - // Entry 4940 - 497F - 0x092d, 0x012d, 0x0144, 0x015a, 0x0171, 0x0188, 0x01a0, 0x01b8, - 0x01cc, 0x01e1, 0x01f3, 0x020a, 0x0222, 0x0239, 0x0251, 0x0267, - 0x027d, 0x0293, 0x02a9, 0x02bf, 0x02d6, 0x02ee, 0x0307, 0x0320, - 0x0335, 0x034a, 0x0362, 0x0378, 0x038f, 0x03a3, 0x03b7, 0x03ce, - 0x03e4, 0x03fa, 0x0411, 0x0427, 0x043d, 0x0454, 0x0469, 0x048b, - 0x04ad, 0x00ad, 0x00c2, 0x00d8, 0x00ed, 0x0105, 0x0122, 0x013d, - 0x015b, 0x0187, 0x01ac, 0x01c6, 0x01e5, 0x0207, 0x0207, 0x0217, - 0x0228, 0x0239, 0x024b, 0x025c, 0x026e, 0x027f, 0x0291, 0x02a1, - // Entry 4980 - 49BF - 0x02b2, 0x02c2, 0x02d3, 0x02e3, 0x02f4, 0x0304, 0x0315, 0x0326, - 0x0337, 0x0349, 0x035b, 0x036c, 0x037e, 0x0390, 0x03a1, 0x03b2, - 0x03c3, 0x03d5, 0x03e6, 0x03f8, 0x040a, 0x041b, 0x042c, 0x043d, - 0x044f, 0x0461, 0x0474, 0x0487, 0x0498, 0x04aa, 0x04bc, 0x04cd, - 0x04df, 0x04f1, 0x0502, 0x0513, 0x0524, 0x0535, 0x0546, 0x0557, - 0x0569, 0x057b, 0x058e, 0x05a1, 0x05b2, 0x01b2, 0x01cb, 0x01f1, - 0x0218, 0x023f, 0x0266, 0x028f, 0x02b8, 0x02db, 0x02fd, 0x0320, - 0x0344, 0x0364, 0x0385, 0x03a8, 0x03ca, 0x03ec, 0x040e, 0x0430, - // Entry 49C0 - 49FF - 0x0454, 0x0475, 0x0496, 0x04ba, 0x04dc, 0x04fc, 0x051f, 0x0541, - 0x0563, 0x0585, 0x05a6, 0x01a6, 0x01c7, 0x01e8, 0x020b, 0x022d, - 0x024e, 0x0272, 0x029b, 0x02c5, 0x02e7, 0x0308, 0x032a, 0x034d, - 0x036c, 0x0396, 0x03b8, 0x03d9, 0x03fa, 0x041b, 0x043c, 0x045f, - 0x0484, 0x04a4, 0x04c7, 0x04e6, 0x0508, 0x0529, 0x0549, 0x0149, - 0x0169, 0x0189, 0x01ab, 0x01cc, 0x01ec, 0x020f, 0x0237, 0x0260, - 0x027c, 0x0297, 0x02b3, 0x02d0, 0x02e9, 0x030d, 0x0329, 0x0344, - 0x035f, 0x037a, 0x0397, 0x03b6, 0x03d0, 0x03ed, 0x0406, 0x0422, - // Entry 4A00 - 4A3F - 0x043d, 0x0457, 0x0057, 0x0073, 0x0096, 0x00ba, 0x00dc, 0x00dc, - 0x00f6, 0x0110, 0x012c, 0x0147, 0x0161, 0x017e, 0x01a0, 0x01a0, - 0x01ba, 0x01d5, 0x01f1, 0x020b, 0x0226, 0x0241, 0x025b, 0x0276, - 0x0292, 0x02ad, 0x02c9, 0x02e5, 0x0302, 0x031d, 0x0339, 0x0355, - 0x0372, 0x038d, 0x03a9, 0x03c5, 0x03e0, 0x03fc, 0x0417, 0x0433, - 0x044f, 0x046c, 0x0488, 0x04a5, 0x04c1, 0x04de, 0x04f9, 0x0515, - 0x0531, 0x054d, 0x0568, 0x0583, 0x059f, 0x05bc, 0x05d8, 0x05f5, - 0x0611, 0x062e, 0x064a, 0x0667, 0x0684, 0x06a0, 0x06be, 0x06d9, - // Entry 4A40 - 4A7F - 0x06f4, 0x070f, 0x072a, 0x0746, 0x0761, 0x077d, 0x0798, 0x07b4, - 0x07cf, 0x07eb, 0x0806, 0x0822, 0x083e, 0x0859, 0x0875, 0x0891, - 0x08ae, 0x08ca, 0x08e7, 0x0902, 0x091e, 0x093a, 0x0957, 0x0972, - 0x098f, 0x018f, 0x01ad, 0x01cc, 0x01eb, 0x020b, 0x022a, 0x024a, - 0x026a, 0x0289, 0x02a9, 0x02c7, 0x02eb, 0x030a, 0x0329, 0x0348, - 0x0368, 0x0387, 0x03a5, 0x03c4, 0x03e3, 0x0402, 0x0421, 0x0441, - 0x0460, 0x0480, 0x049f, 0x04be, 0x04de, 0x04fc, 0x051b, 0x0545, - 0x056e, 0x058e, 0x05ad, 0x05cd, 0x05ec, 0x0611, 0x0630, 0x0650, - // Entry 4A80 - 4ABF - 0x066f, 0x068f, 0x06af, 0x06cf, 0x06ed, 0x070c, 0x0736, 0x075f, - 0x077e, 0x079d, 0x07bd, 0x07e9, 0x0808, 0x0008, 0x0024, 0x0041, - 0x005e, 0x007c, 0x0099, 0x00b7, 0x00d5, 0x00f2, 0x0110, 0x012c, - 0x014e, 0x016b, 0x0188, 0x01a5, 0x01c3, 0x01e0, 0x01fc, 0x0219, - 0x0236, 0x0253, 0x0270, 0x028e, 0x02ab, 0x02c9, 0x02e6, 0x0303, - 0x0321, 0x033d, 0x035a, 0x0382, 0x03a9, 0x03c7, 0x03e4, 0x0402, - 0x041f, 0x0442, 0x045f, 0x047d, 0x049a, 0x04b8, 0x04d6, 0x04f4, - 0x0510, 0x052d, 0x0555, 0x057c, 0x0599, 0x05b6, 0x05d4, 0x05fe, - // Entry 4AC0 - 4AFF - 0x061b, 0x021b, 0x0233, 0x024c, 0x0264, 0x027e, 0x029e, 0x02bf, - 0x02bf, 0x02cd, 0x02db, 0x02eb, 0x02fa, 0x0309, 0x0317, 0x0327, - 0x0337, 0x0346, 0x0355, 0x0367, 0x0379, 0x038a, 0x039b, 0x03ac, - 0x03bf, 0x03d1, 0x03e3, 0x03fa, 0x0411, 0x042a, 0x0442, 0x045a, - 0x0471, 0x048a, 0x04a3, 0x04bb, 0x04d1, 0x04ea, 0x0501, 0x0519, - 0x0119, 0x0130, 0x0144, 0x0157, 0x016e, 0x0185, 0x0194, 0x01a4, - 0x01b3, 0x01c3, 0x01d2, 0x01e2, 0x01f9, 0x0211, 0x0228, 0x0240, - 0x024f, 0x025f, 0x026e, 0x027e, 0x028e, 0x029f, 0x02af, 0x02c0, - // Entry 4B00 - 4B3F - 0x02d1, 0x02e1, 0x02f2, 0x0302, 0x0313, 0x0324, 0x0335, 0x0347, - 0x0358, 0x036a, 0x037b, 0x038b, 0x039c, 0x03ac, 0x03bd, 0x03cd, - 0x03dd, 0x03ee, 0x03fe, 0x040f, 0x041f, 0x042f, 0x043f, 0x044f, - 0x045f, 0x0470, 0x0481, 0x0491, 0x04a1, 0x04b2, 0x04ce, 0x04e9, - 0x0505, 0x0519, 0x0539, 0x054c, 0x0560, 0x0573, 0x0587, 0x05a2, - 0x05be, 0x05d9, 0x05f5, 0x0608, 0x061c, 0x062f, 0x0643, 0x0650, - 0x065c, 0x066f, 0x0685, 0x06a2, 0x06b9, 0x06d8, 0x06f0, 0x02f0, - 0x0301, 0x0312, 0x0325, 0x0337, 0x0349, 0x035a, 0x036d, 0x0380, - // Entry 4B40 - 4B7F - 0x0392, 0x03a3, 0x03b7, 0x03cb, 0x03de, 0x03f1, 0x0404, 0x0419, - 0x042d, 0x0441, 0x045a, 0x0474, 0x0485, 0x0495, 0x04a5, 0x04b7, - 0x04c8, 0x04d9, 0x04e9, 0x04fb, 0x050d, 0x051e, 0x011e, 0x0132, - 0x0149, 0x015d, 0x0170, 0x017f, 0x018f, 0x019e, 0x01ae, 0x01bd, - 0x01cd, 0x01dc, 0x01ec, 0x01fb, 0x020b, 0x021b, 0x022c, 0x023c, - 0x024d, 0x025e, 0x026e, 0x027f, 0x028f, 0x02a0, 0x02b1, 0x02c2, - 0x02d4, 0x02e5, 0x02f8, 0x030a, 0x031b, 0x032c, 0x033c, 0x034d, - 0x035d, 0x036e, 0x037e, 0x038e, 0x039f, 0x03af, 0x03c0, 0x03d0, - // Entry 4B80 - 4BBF - 0x03e0, 0x03f0, 0x0400, 0x0410, 0x0421, 0x0432, 0x0442, 0x0452, - 0x0466, 0x0479, 0x048d, 0x04a0, 0x04b4, 0x04c7, 0x04db, 0x04ee, - 0x0502, 0x0514, 0x0525, 0x053d, 0x0554, 0x0566, 0x0579, 0x0593, - 0x059f, 0x05b2, 0x01b2, 0x01c9, 0x01e0, 0x01f7, 0x020e, 0x0225, - 0x023c, 0x0253, 0x026b, 0x0282, 0x0299, 0x02b0, 0x02c7, 0x02de, - 0x02f5, 0x030c, 0x0323, 0x033a, 0x0352, 0x0368, 0x037f, 0x0395, - 0x03ab, 0x03c1, 0x03d7, 0x03ee, 0x03ee, 0x0405, 0x041b, 0x0431, - 0x0449, 0x0460, 0x0477, 0x048d, 0x04a5, 0x04bd, 0x04d4, 0x00d4, - // Entry 4BC0 - 4BFF - 0x00eb, 0x00ff, 0x0112, 0x0122, 0x0131, 0x0140, 0x014f, 0x0160, - 0x0172, 0x0183, 0x0195, 0x01a7, 0x01b8, 0x01ca, 0x01db, 0x01ed, - 0x01ff, 0x0211, 0x0224, 0x0236, 0x0249, 0x025b, 0x026c, 0x027e, - 0x028f, 0x02a1, 0x02b2, 0x02c3, 0x02d5, 0x02e6, 0x02f8, 0x0309, - 0x031b, 0x032c, 0x033d, 0x034e, 0x035f, 0x0370, 0x0381, 0x0394, - 0x03a7, 0x03bb, 0x03ce, 0x03e2, 0x03f5, 0x0409, 0x041c, 0x0430, - 0x0444, 0x0451, 0x045f, 0x046c, 0x047a, 0x007a, 0x008b, 0x009b, - 0x00ab, 0x00bd, 0x00ce, 0x00df, 0x00ef, 0x0101, 0x0113, 0x0124, - // Entry 4C00 - 4C3F - 0x0137, 0x0143, 0x0156, 0x016a, 0x016a, 0x017b, 0x018c, 0x019d, - 0x01ae, 0x01bf, 0x01d1, 0x01e4, 0x01f6, 0x0209, 0x021b, 0x022e, - 0x0240, 0x0253, 0x0266, 0x0279, 0x028d, 0x02a0, 0x02b4, 0x02c7, - 0x02d9, 0x02ec, 0x02fe, 0x0311, 0x0323, 0x0335, 0x0348, 0x035a, - 0x036d, 0x037f, 0x0391, 0x03a3, 0x03b5, 0x03c7, 0x03d9, 0x03ec, - 0x03ff, 0x0419, 0x042e, 0x0444, 0x0044, 0x005c, 0x0071, 0x0085, - 0x0095, 0x00a6, 0x00b6, 0x00c7, 0x00d7, 0x00e8, 0x0100, 0x0119, - 0x0131, 0x014a, 0x015a, 0x016b, 0x017b, 0x018c, 0x019d, 0x01af, - // Entry 4C40 - 4C7F - 0x01c0, 0x01d2, 0x01e4, 0x01f5, 0x0207, 0x0218, 0x022a, 0x023c, - 0x024e, 0x0261, 0x0273, 0x0286, 0x0298, 0x02a9, 0x02bb, 0x02cc, - 0x02de, 0x02ef, 0x0300, 0x0312, 0x0323, 0x0335, 0x0346, 0x0357, - 0x0368, 0x0379, 0x038b, 0x039c, 0x03ae, 0x03c0, 0x03d1, 0x03e2, - 0x03f7, 0x040b, 0x0420, 0x0434, 0x0449, 0x0465, 0x0482, 0x049e, - 0x04bb, 0x04cf, 0x04e4, 0x04f8, 0x050d, 0x0520, 0x0535, 0x054d, - 0x0565, 0x056f, 0x057c, 0x0590, 0x05a9, 0x05ba, 0x05cd, 0x05df, - 0x05fa, 0x0618, 0x062a, 0x022a, 0x023c, 0x024d, 0x025e, 0x0271, - // Entry 4C80 - 4CBF - 0x0283, 0x0295, 0x02a6, 0x02b9, 0x02cc, 0x02de, 0x02ea, 0x02fe, - 0x0310, 0x0329, 0x033f, 0x0355, 0x0355, 0x036e, 0x0387, 0x03a2, - 0x03bc, 0x03d6, 0x03ef, 0x040a, 0x0425, 0x043f, 0x0459, 0x0476, - 0x0493, 0x04af, 0x04cb, 0x04e7, 0x0505, 0x0522, 0x053f, 0x0561, - 0x0584, 0x0184, 0x0193, 0x01a3, 0x01b2, 0x01c1, 0x01d0, 0x01e0, - 0x01ef, 0x01ff, 0x020f, 0x0220, 0x0230, 0x0241, 0x0252, 0x0263, - 0x0273, 0x0284, 0x0294, 0x02a5, 0x02a5, 0x02b6, 0x02c7, 0x02d9, - 0x02ea, 0x02fc, 0x030d, 0x031d, 0x032e, 0x033e, 0x0350, 0x0361, - // Entry 4CC0 - 4CFF - 0x0371, 0x0381, 0x0392, 0x03a2, 0x03b3, 0x03c4, 0x03d4, 0x03e4, - 0x03f4, 0x0404, 0x0414, 0x0424, 0x0434, 0x0445, 0x0459, 0x046c, - 0x0480, 0x0493, 0x04a6, 0x04ba, 0x04cd, 0x04e1, 0x04f5, 0x0507, - 0x0518, 0x052a, 0x0536, 0x0549, 0x055e, 0x0571, 0x058b, 0x05a3, - 0x05b4, 0x01b4, 0x01c4, 0x01d4, 0x01e4, 0x01f4, 0x0205, 0x0217, - 0x0228, 0x0228, 0x023a, 0x023a, 0x024b, 0x025d, 0x026e, 0x0280, - 0x0280, 0x0292, 0x02a4, 0x02b7, 0x02c9, 0x02dc, 0x02ef, 0x0301, - 0x0312, 0x0324, 0x0335, 0x0347, 0x0358, 0x0369, 0x037b, 0x038c, - // Entry 4D00 - 4D3F - 0x038c, 0x039e, 0x03af, 0x03c0, 0x03d1, 0x03e2, 0x03f3, 0x0404, - 0x0415, 0x0427, 0x0439, 0x044d, 0x004d, 0x005f, 0x0072, 0x0084, - 0x0097, 0x00a9, 0x00bc, 0x00ce, 0x00e1, 0x00f3, 0x0106, 0x0119, - 0x012d, 0x0140, 0x0154, 0x0168, 0x017c, 0x018f, 0x01a3, 0x01b6, - 0x01ca, 0x01de, 0x01f2, 0x0206, 0x021b, 0x022f, 0x0244, 0x0258, - 0x026d, 0x0281, 0x0294, 0x02a8, 0x02bb, 0x02cf, 0x02e2, 0x02f5, - 0x0309, 0x031c, 0x0330, 0x0344, 0x0357, 0x036a, 0x037d, 0x0390, - 0x03a3, 0x03b7, 0x03ca, 0x03dd, 0x03f4, 0x040b, 0x0421, 0x0438, - // Entry 4D40 - 4D7F - 0x044e, 0x0465, 0x047b, 0x0492, 0x04a8, 0x04bf, 0x04d3, 0x04e8, - 0x00e8, 0x00fc, 0x010f, 0x0122, 0x0137, 0x014b, 0x015f, 0x0172, - 0x0187, 0x019c, 0x01b0, 0x01b0, 0x01d5, 0x01ed, 0x0202, 0x0216, - 0x0216, 0x0226, 0x0237, 0x0247, 0x0258, 0x0268, 0x0279, 0x0291, - 0x02a9, 0x02a9, 0x02ba, 0x02cb, 0x02cb, 0x02dc, 0x02ed, 0x02fe, - 0x0310, 0x0321, 0x0333, 0x0345, 0x0356, 0x0368, 0x0379, 0x038b, - 0x039d, 0x03af, 0x03c2, 0x03d4, 0x03e7, 0x03f9, 0x040a, 0x041c, - 0x042d, 0x043f, 0x0450, 0x0050, 0x0061, 0x0073, 0x0084, 0x0096, - // Entry 4D80 - 4DBF - 0x00a7, 0x00b8, 0x00c9, 0x00c9, 0x00da, 0x00ec, 0x00ec, 0x00fd, - 0x010f, 0x0121, 0x0132, 0x0143, 0x0143, 0x0155, 0x016a, 0x017f, - 0x0193, 0x01a8, 0x01bc, 0x01d1, 0x01ed, 0x020a, 0x020a, 0x021f, - 0x0234, 0x0234, 0x0249, 0x025e, 0x0271, 0x0271, 0x027b, 0x027b, - 0x0291, 0x0291, 0x02a3, 0x02c0, 0x02e4, 0x02fd, 0x0316, 0x0332, - 0x034f, 0x034f, 0x036b, 0x0386, 0x03a1, 0x03be, 0x03da, 0x03f6, - 0x0411, 0x0011, 0x002b, 0x0046, 0x0061, 0x007c, 0x0097, 0x0097, - 0x00a4, 0x00b2, 0x00bf, 0x00cd, 0x00da, 0x00e8, 0x00fd, 0x0113, - // Entry 4DC0 - 4DFF - 0x0128, 0x013e, 0x014b, 0x0159, 0x0166, 0x0174, 0x0182, 0x0191, - 0x019f, 0x01ae, 0x01bd, 0x01cd, 0x01db, 0x01ea, 0x01f8, 0x0207, - 0x0216, 0x0226, 0x0235, 0x0245, 0x0254, 0x0264, 0x0273, 0x0281, - 0x0290, 0x029e, 0x02ad, 0x02bb, 0x02ca, 0x02d8, 0x02e7, 0x02f5, - 0x0304, 0x0312, 0x0321, 0x032f, 0x033d, 0x034c, 0x035a, 0x0369, - 0x0377, 0x0386, 0x0395, 0x03a3, 0x03b1, 0x03c3, 0x03d4, 0x03e6, - 0x03f7, 0x0409, 0x0422, 0x043c, 0x0455, 0x046f, 0x0480, 0x0492, - 0x04a3, 0x04b5, 0x04c5, 0x04da, 0x04ec, 0x04fd, 0x050c, 0x051e, - // Entry 4E00 - 4E3F - 0x0536, 0x053d, 0x0548, 0x0552, 0x0563, 0x056d, 0x057c, 0x0592, - 0x05a1, 0x05af, 0x05bd, 0x05cd, 0x05dc, 0x05eb, 0x05f9, 0x0609, - 0x0619, 0x0628, 0x0228, 0x023d, 0x023d, 0x0250, 0x0250, 0x025c, - 0x026c, 0x027d, 0x028d, 0x029e, 0x02ae, 0x02bf, 0x02d7, 0x02f0, - 0x0308, 0x0321, 0x0331, 0x0342, 0x0352, 0x0363, 0x0374, 0x0386, - 0x0397, 0x03a9, 0x03bb, 0x03cc, 0x03de, 0x03ef, 0x0401, 0x0413, - 0x0425, 0x0438, 0x044a, 0x045d, 0x046f, 0x0480, 0x0492, 0x04a3, - 0x04b5, 0x04c6, 0x04d7, 0x04e9, 0x04fa, 0x050c, 0x051d, 0x052e, - // Entry 4E40 - 4E7F - 0x053f, 0x0550, 0x0561, 0x0573, 0x0585, 0x0596, 0x05a7, 0x05bc, - 0x05d0, 0x05e5, 0x05f9, 0x060e, 0x062a, 0x0647, 0x0663, 0x0680, - 0x0694, 0x06ae, 0x06c3, 0x06d7, 0x06f1, 0x0706, 0x071e, 0x0733, - 0x0747, 0x075a, 0x076c, 0x0781, 0x078e, 0x07a7, 0x07b1, 0x03b1, - 0x03c3, 0x03d4, 0x03e5, 0x03f8, 0x040a, 0x041c, 0x042d, 0x0440, - 0x0453, 0x0465, 0x0065, 0x0075, 0x0086, 0x0096, 0x00a7, 0x00b7, - 0x00c8, 0x00e0, 0x00f9, 0x0111, 0x012a, 0x013a, 0x014b, 0x015b, - 0x016c, 0x017d, 0x018f, 0x01a0, 0x01b2, 0x01c4, 0x01d5, 0x01e7, - // Entry 4E80 - 4EBF - 0x01f8, 0x020a, 0x021c, 0x022e, 0x0241, 0x0253, 0x0266, 0x0278, - 0x0289, 0x029b, 0x02ac, 0x02be, 0x02cf, 0x02e0, 0x02f2, 0x0303, - 0x0315, 0x0326, 0x0337, 0x0348, 0x0359, 0x036a, 0x037c, 0x038e, - 0x039f, 0x03b0, 0x03c5, 0x03d9, 0x03ee, 0x0402, 0x0417, 0x0433, - 0x0450, 0x0050, 0x0064, 0x0079, 0x008d, 0x00a2, 0x00ba, 0x00cf, - 0x00e3, 0x00f6, 0x0108, 0x011c, 0x0129, 0x013d, 0x0152, 0x0167, - 0x0180, 0x0199, 0x01b2, 0x01ca, 0x0202, 0x0238, 0x026b, 0x02a5, - 0x02df, 0x02ff, 0x0329, 0x0353, 0x037d, 0x03aa, 0x03d6, 0x0400, - // Entry 4EC0 - 4EFF - 0x0434, 0x0469, 0x0490, 0x04b5, 0x04db, 0x04f5, 0x0513, 0x0532, - 0x0132, 0x013f, 0x014d, 0x015a, 0x0168, 0x0175, 0x0183, 0x0198, - 0x01ae, 0x01c3, 0x01d9, 0x01e6, 0x01f4, 0x0201, 0x020f, 0x021d, - 0x022c, 0x023a, 0x0249, 0x0258, 0x0266, 0x0275, 0x0283, 0x0292, - 0x02a1, 0x02b0, 0x02c0, 0x02cf, 0x02df, 0x02ee, 0x02fc, 0x030b, - 0x0319, 0x0328, 0x0336, 0x0344, 0x0353, 0x0361, 0x0370, 0x037e, - 0x038c, 0x039a, 0x03a8, 0x03b6, 0x03c5, 0x03d4, 0x03e2, 0x03f0, - 0x03ff, 0x0411, 0x0422, 0x0434, 0x0445, 0x0457, 0x0470, 0x048a, - // Entry 4F00 - 4F3F - 0x04a3, 0x04bd, 0x04ce, 0x04e0, 0x04f1, 0x0503, 0x0515, 0x0526, - 0x0536, 0x054b, 0x0555, 0x0566, 0x057c, 0x058a, 0x018a, 0x0199, - 0x01a7, 0x01b5, 0x01c5, 0x01d4, 0x01e3, 0x01f1, 0x0201, 0x0211, - 0x0220, 0x0220, 0x023d, 0x0254, 0x0278, 0x029c, 0x02c0, 0x02e5, - 0x0311, 0x0329, 0x0356, 0x036b, 0x038e, 0x03b8, 0x03e9, 0x03e9, - 0x03f7, 0x0406, 0x0414, 0x0423, 0x0431, 0x0440, 0x044e, 0x045d, - 0x046b, 0x047a, 0x0489, 0x0499, 0x04a8, 0x04b8, 0x04c8, 0x04d7, - 0x04e7, 0x04f6, 0x0506, 0x0516, 0x0526, 0x0537, 0x0547, 0x0558, - // Entry 4F40 - 4F7F - 0x0568, 0x0577, 0x0587, 0x0596, 0x05a6, 0x05b5, 0x05c4, 0x05d4, - 0x05e3, 0x05f3, 0x0602, 0x0611, 0x0620, 0x062f, 0x063e, 0x064e, - 0x065d, 0x066c, 0x067c, 0x068f, 0x06a1, 0x06b4, 0x06c6, 0x06d9, - 0x06eb, 0x06fe, 0x0710, 0x0723, 0x0735, 0x0748, 0x0759, 0x0769, - 0x0369, 0x0379, 0x0388, 0x0397, 0x03a8, 0x03b8, 0x03c8, 0x03d7, - 0x03e8, 0x03f9, 0x0409, 0x0009, 0x0017, 0x0026, 0x0035, 0x0043, - 0x0051, 0x0069, 0x0077, 0x0086, 0x0094, 0x00a2, 0x00b0, 0x00bf, - 0x00ce, 0x00dc, 0x00ea, 0x00f8, 0x0107, 0x0115, 0x0122, 0x0130, - // Entry 4F80 - 4FBF - 0x013f, 0x014d, 0x0165, 0x0174, 0x0183, 0x0192, 0x0192, 0x01af, - 0x01cc, 0x01f2, 0x0203, 0x0215, 0x0226, 0x0238, 0x0249, 0x025b, - 0x026c, 0x027e, 0x028f, 0x02a1, 0x02b3, 0x02c3, 0x02c3, 0x02d2, - 0x02e0, 0x02ee, 0x02fe, 0x030d, 0x031c, 0x032a, 0x033a, 0x034a, - 0x0359, 0x0368, 0x037a, 0x0391, 0x03a2, 0x03b1, 0x03bf, 0x03bf, - 0x03de, 0x03fa, 0x0417, 0x0434, 0x0451, 0x046e, 0x048b, 0x04a8, - 0x04c4, 0x04e0, 0x04fe, 0x051b, 0x0538, 0x0556, 0x0574, 0x0591, - 0x05af, 0x05cd, 0x05eb, 0x060a, 0x0627, 0x0644, 0x0661, 0x067e, - // Entry 4FC0 - 4FFF - 0x069b, 0x06ba, 0x06d9, 0x06f8, 0x0716, 0x0735, 0x0753, 0x0772, - 0x078f, 0x07a9, 0x07c4, 0x07df, 0x07fa, 0x0815, 0x0830, 0x084b, - 0x0865, 0x087f, 0x089b, 0x08b6, 0x08d1, 0x08ed, 0x0909, 0x0924, - 0x0940, 0x095c, 0x0978, 0x0995, 0x09b0, 0x09cb, 0x09e6, 0x0a01, - 0x0a1c, 0x0a39, 0x0a56, 0x0a73, 0x0a8f, 0x0aac, 0x0ac8, 0x0ae5, - 0x0afb, 0x0b10, 0x0b25, 0x0b3c, 0x0b52, 0x0b68, 0x0b7d, 0x0b94, - 0x0bab, 0x0bc1, 0x0bd7, 0x0bf0, 0x0c09, 0x0c21, 0x0c39, 0x0c51, - 0x0c6b, 0x0c84, 0x0c9d, 0x009d, 0x00ab, 0x00ab, 0x00c0, 0x00d5, - // Entry 5000 - 503F - 0x00ea, 0x00ff, 0x0114, 0x0129, 0x013e, 0x0154, 0x0169, 0x017e, - 0x0194, 0x01a9, 0x01be, 0x01d3, 0x01e8, 0x01fe, 0x0213, 0x0229, - 0x023e, 0x0253, 0x0269, 0x027d, 0x0291, 0x02a5, 0x02b9, 0x02cd, - 0x02e2, 0x02f7, 0x0311, 0x032b, 0x0345, 0x035f, 0x0379, 0x0393, - 0x03ad, 0x03c8, 0x03e2, 0x03fe, 0x0415, 0x0434, 0x0456, 0x0473, - 0x0498, 0x04b4, 0x04cb, 0x04ed, 0x050a, 0x0524, 0x0544, 0x0569, - 0x0589, 0x05aa, 0x05c6, 0x05de, 0x0605, 0x0627, 0x0645, 0x0245, - 0x0257, 0x026a, 0x027c, 0x028f, 0x02a1, 0x02b4, 0x02ce, 0x02e9, - // Entry 5040 - 507F - 0x0303, 0x0303, 0x0315, 0x0328, 0x033a, 0x034d, 0x0360, 0x0374, - 0x0387, 0x039b, 0x03af, 0x03c2, 0x03d6, 0x03e9, 0x03fd, 0x0411, - 0x0425, 0x043a, 0x044e, 0x0463, 0x0477, 0x048a, 0x049e, 0x04b1, - 0x04c5, 0x04d8, 0x04eb, 0x04ff, 0x0512, 0x0526, 0x0539, 0x054c, - 0x055f, 0x0572, 0x0585, 0x0599, 0x05ad, 0x05c0, 0x05d3, 0x05ea, - 0x0600, 0x0617, 0x062d, 0x0644, 0x0662, 0x0681, 0x069f, 0x029f, - 0x02b5, 0x02cc, 0x02e2, 0x02f9, 0x0313, 0x032a, 0x0340, 0x0355, - 0x036c, 0x037b, 0x0391, 0x03a9, 0x03bf, 0x03d5, 0x03d5, 0x03e9, - // Entry 5080 - 50BF - 0x03fc, 0x040f, 0x0424, 0x0438, 0x044c, 0x045f, 0x0474, 0x0489, - 0x049d, 0x04b1, 0x04c5, 0x04db, 0x04f0, 0x0505, 0x0519, 0x052f, - 0x0545, 0x055a, 0x056e, 0x0585, 0x059c, 0x05b2, 0x05c8, 0x05de, - 0x05f6, 0x060d, 0x0624, 0x0640, 0x0240, 0x0251, 0x0262, 0x0273, - 0x0285, 0x0296, 0x02a8, 0x02b9, 0x02cb, 0x02dc, 0x02ee, 0x02ff, - 0x0311, 0x0322, 0x0333, 0x0344, 0x0356, 0x0367, 0x0378, 0x038a, - 0x039d, 0x03af, 0x03c0, 0x03d2, 0x03e3, 0x03f4, 0x0405, 0x0416, - 0x0427, 0x0439, 0x044a, 0x045b, 0x046b, 0x006b, 0x0086, 0x00a2, - // Entry 50C0 - 50FF - 0x00bd, 0x00d9, 0x00f4, 0x0110, 0x012b, 0x0147, 0x0162, 0x017e, - 0x0199, 0x01b4, 0x01cf, 0x01eb, 0x0206, 0x0221, 0x023d, 0x025a, - 0x0276, 0x0291, 0x02ad, 0x02c8, 0x02c8, 0x02e3, 0x02fe, 0x0319, - 0x0335, 0x0350, 0x036b, 0x0385, 0x039a, 0x03ae, 0x03c2, 0x03d6, - 0x03ea, 0x03ff, 0x0417, 0x0017, 0x0027, 0x003f, 0x0059, 0x0079, - 0x0092, 0x00ac, 0x00cd, 0x00e8, 0x0102, 0x0113, 0x0124, 0x0140, - 0x0161, 0x017c, 0x019d, 0x01b7, 0x01d7, 0x01f3, 0x0210, 0x022d, - 0x0254, 0x026a, 0x027c, 0x029a, 0x02bc, 0x02df, 0x02fc, 0x0319, - // Entry 5100 - 513F - 0x032a, 0x033b, 0x0358, 0x037f, 0x0390, 0x03aa, 0x03c6, 0x03e2, - 0x03fc, 0x0418, 0x0432, 0x044d, 0x0468, 0x047b, 0x048f, 0x04a2, - 0x04bf, 0x04d0, 0x04e9, 0x0506, 0x0537, 0x055a, 0x056e, 0x0581, - 0x0594, 0x05b1, 0x05c5, 0x05d9, 0x05eb, 0x0607, 0x0623, 0x0660, - 0x0684, 0x06c7, 0x06da, 0x06ef, 0x0700, 0x0712, 0x0725, 0x073a, - 0x074c, 0x0767, 0x077b, 0x078d, 0x07a1, 0x07b2, 0x07cb, 0x07e6, - 0x0806, 0x0817, 0x0833, 0x084f, 0x086c, 0x0880, 0x089f, 0x08b1, - 0x08c4, 0x08d5, 0x08e7, 0x0912, 0x0936, 0x095b, 0x097d, 0x099f, - // Entry 5140 - 517F - 0x09cb, 0x09ed, 0x0a11, 0x0a34, 0x0a56, 0x0a78, 0x0aa2, 0x0ac5, - 0x0ae7, 0x0b09, 0x0b36, 0x0b59, 0x0b7b, 0x0ba7, 0x0bc9, 0x0bed, - 0x0c19, 0x0c3c, 0x0c4e, 0x0c60, 0x0c74, 0x0c88, 0x0c99, 0x0cab, - 0x0cbd, 0x0cd9, 0x0cec, 0x0cfe, 0x0d23, 0x0d36, 0x0d47, 0x0d60, - 0x0d76, 0x0d8f, 0x0da1, 0x0dbe, 0x0dd1, 0x0de3, 0x0df7, 0x0e09, - 0x0e1b, 0x0e2e, 0x0e46, 0x0e63, 0x0e76, 0x0e89, 0x0e99, 0x0eb3, - 0x0ed7, 0x0ee8, 0x0f11, 0x0f2c, 0x0f46, 0x0f61, 0x0f7c, 0x0f95, - 0x0fa8, 0x0fbb, 0x0fcc, 0x0fdd, 0x0ff9, 0x101a, 0x1034, 0x1051, - // Entry 5180 - 51BF - 0x106e, 0x1087, 0x109a, 0x10ae, 0x10c1, 0x10d4, 0x10ef, 0x1113, - 0x1141, 0x115d, 0x117a, 0x119d, 0x11c5, 0x11e1, 0x1202, 0x1224, - 0x1244, 0x126c, 0x1289, 0x12a5, 0x12cc, 0x12e8, 0x1304, 0x1320, - 0x133c, 0x134d, 0x1363, 0x1375, 0x139f, 0x13c1, 0x13e4, 0x140e, - 0x1429, 0x1445, 0x146b, 0x1487, 0x14ab, 0x14c7, 0x14eb, 0x1506, - 0x1521, 0x1547, 0x1563, 0x157e, 0x15a1, 0x15bc, 0x15e7, 0x1609, - 0x1625, 0x1640, 0x165c, 0x167f, 0x16a4, 0x16d1, 0x16ed, 0x1711, - 0x1734, 0x1751, 0x1772, 0x179f, 0x17bb, 0x17da, 0x17f6, 0x181b, - // Entry 51C0 - 51FF - 0x183f, 0x185a, 0x187d, 0x1898, 0x18b4, 0x18d9, 0x18f4, 0x1910, - 0x192c, 0x1948, 0x196d, 0x198a, 0x19a6, 0x19c3, 0x19dd, 0x19f8, - 0x1a1b, 0x1a36, 0x1a49, 0x1a6a, 0x1a7c, 0x1aa4, 0x1ab6, 0x1ae2, - 0x1af6, 0x1b08, 0x1b1a, 0x1b2d, 0x1b45, 0x1b62, 0x1b83, 0x1b95, - 0x1ba8, 0x1bbd, 0x1bd3, 0x1bf3, 0x1c04, 0x1c1d, 0x1c36, 0x1c53, - 0x1c65, 0x1c80, 0x1c9f, 0x1cb3, 0x1cc6, 0x1cde, 0x1cf1, 0x1d15, - 0x1d38, 0x1d55, 0x1d7a, 0x1d96, 0x1daa, 0x1dbd, 0x1dde, 0x1dfb, - 0x1e19, 0x1e31, 0x1e42, 0x1e5f, 0x1e71, 0x1e8d, 0x1eb8, 0x1ed4, - // Entry 5200 - 523F - 0x1efa, 0x1f11, 0x1f23, 0x1f46, 0x1f62, 0x1f83, 0x1f95, 0x1fa7, - 0x1fc3, 0x1fd5, 0x1fe8, 0x1ffc, 0x2011, 0x2022, 0x2038, 0x204e, - 0x2060, 0x2071, 0x208c, 0x20a8, 0x20c3, 0x20df, 0x20fa, 0x2115, - 0x2130, 0x214b, 0x2164, 0x2175, 0x2188, 0x21a4, 0x21c1, 0x21e1, - 0x21ff, 0x221b, 0x222e, 0x223e, 0x2250, 0x2261, 0x2274, 0x2295, - 0x22ba, 0x22cb, 0x22dd, 0x22f3, 0x2308, 0x233d, 0x2354, 0x2365, - 0x2386, 0x2398, 0x23a9, 0x23c5, 0x23e2, 0x23ff, 0x2418, 0x242b, - 0x243c, 0x244d, 0x245f, 0x2470, 0x2489, 0x24a3, 0x24c6, 0x24e2, - // Entry 5240 - 527F - 0x24fd, 0x251a, 0x2535, 0x254f, 0x256c, 0x2588, 0x25a2, 0x25bd, - 0x25de, 0x25f9, 0x2625, 0x263f, 0x265b, 0x2680, 0x26aa, 0x26c4, - 0x26e0, 0x26fb, 0x2715, 0x2730, 0x274a, 0x2765, 0x277f, 0x2799, - 0x27b3, 0x27d5, 0x27f7, 0x2819, 0x2833, 0x2858, 0x2872, 0x288d, - 0x28a7, 0x28c1, 0x28db, 0x28f6, 0x2911, 0x292c, 0x2948, 0x2963, - 0x297e, 0x299b, 0x29b6, 0x29cf, 0x29e9, 0x2a03, 0x2a28, 0x2a43, - 0x2a5d, 0x2a6f, 0x2a8e, 0x2aa0, 0x2ab3, 0x2ac6, 0x2ad9, 0x2aec, - 0x2b09, 0x2b1b, 0x2b3c, 0x2b4e, 0x2b6a, 0x2b89, 0x2b9c, 0x2baf, - // Entry 5280 - 52BF - 0x2bc4, 0x2bfa, 0x2c3c, 0x2c50, 0x2c61, 0x2c7c, 0x2c95, 0x2caf, - 0x2cc1, 0x2cd3, 0x2ce7, 0x2cfa, 0x2d0f, 0x2d30, 0x2d41, 0x2d7b, - 0x2d8d, 0x2d9f, 0x2dbe, 0x2dd0, 0x2de2, 0x2df9, 0x2e0b, 0x2e1d, - 0x2e3c, 0x2e51, 0x2e66, 0x2e77, 0x2e8b, 0x2ea7, 0x2ed3, 0x2ef8, - 0x2f1d, 0x2f3a, 0x2f57, 0x2f7f, 0x2f9d, 0x2fba, 0x2fd8, 0x2ff5, - 0x3012, 0x3030, 0x304e, 0x3075, 0x3092, 0x30b0, 0x30d7, 0x30fa, - 0x3117, 0x313c, 0x3161, 0x317e, 0x319c, 0x31ba, 0x31d8, 0x3205, - 0x3225, 0x3244, 0x3261, 0x327f, 0x329c, 0x32c1, 0x32e0, 0x32fd, - // Entry 52C0 - 52FF - 0x3324, 0x3359, 0x3388, 0x33a7, 0x33d0, 0x33ee, 0x340c, 0x342b, - 0x345f, 0x347b, 0x349e, 0x34c8, 0x34ee, 0x350b, 0x3529, 0x3545, - 0x3559, 0x3577, 0x359e, 0x35b7, 0x35e4, 0x35f9, 0x360b, 0x3627, - 0x3639, 0x3655, 0x3679, 0x368a, 0x369c, 0x36b1, 0x36c4, 0x36d5, - 0x36f0, 0x3702, 0x371d, 0x3739, 0x3756, 0x3778, 0x379a, 0x37bf, - 0x37da, 0x37f7, 0x3814, 0x383a, 0x3855, 0x3879, 0x3897, 0x38ba, - 0x38d5, 0x38f0, 0x3914, 0x3939, 0x3956, 0x396d, 0x398c, 0x39ab, - 0x39c5, 0x39df, 0x39f1, 0x3a05, 0x3a24, 0x3a47, 0x3a63, 0x3a75, - // Entry 5300 - 533F - 0x3a87, 0x3a99, 0x3ab4, 0x3adc, 0x3aed, 0x3b09, 0x3b1f, 0x3b31, - 0x3b43, 0x3b55, 0x3b68, 0x3b7c, 0x3b8d, 0x3b9f, 0x3bb0, 0x3bc2, - 0x3bd3, 0x3bec, 0x3bfe, 0x3c15, 0x3c2a, 0x3c3f, 0x3c52, 0x3c6d, - 0x3c8a, 0x3ca6, 0x3cc3, 0x3cf0, 0x3d11, 0x3d25, 0x3d41, 0x3d65, - 0x3d82, 0x3d9b, 0x3dac, 0x3dbe, 0x3dd1, 0x3ded, 0x3e0f, 0x3e30, - 0x3e44, 0x3e5e, 0x3e70, 0x3e83, 0x3e94, 0x3ead, 0x3ec7, 0x3ee0, - 0x3ef1, 0x3f0a, 0x3f1c, 0x3f2e, 0x3f50, 0x3f7b, 0x3f90, 0x3fae, - 0x3fcd, 0x3ff5, 0x4014, 0x4041, 0x405f, 0x407e, 0x409d, 0x40c6, - // Entry 5340 - 537F - 0x40ee, 0x411f, 0x4146, 0x4165, 0x4179, 0x418a, 0x419d, 0x41af, - 0x41d1, 0x41f4, 0x4216, 0x4251, 0x4273, 0x428a, 0x42a5, 0x42c4, - 0x42f4, 0x4308, 0x432d, 0x434e, 0x4370, 0x4392, 0x43b9, 0x43dc, - 0x43fd, 0x441e, 0x4442, 0x4463, 0x4487, 0x44ad, 0x44be, 0x44d0, - 0x44e2, 0x44f4, 0x4508, 0x4519, 0x4532, 0x454c, 0x4566, 0x4580, - 0x4599, 0x45b2, 0x45cc, 0x45e5, 0x45ff, 0x461c, 0x4630, 0x464e, - 0x466b, 0x4688, 0x46ab, 0x46bc, 0x46ce, 0x46df, 0x46f0, 0x4701, - 0x471b, 0x472d, 0x4747, 0x4762, 0x477e, 0x4799, 0x47b5, 0x47d1, - // Entry 5380 - 53BF - 0x47ed, 0x4808, 0x4824, 0x4840, 0x485d, 0x4879, 0x4894, 0x48af, - 0x48ca, 0x48e5, 0x4901, 0x491c, 0x4933, 0x4945, 0x4968, 0x497d, - 0x498f, 0x49a1, 0x49b4, 0x49cf, 0x49ec, 0x4a0a, 0x4a26, 0x4a44, - 0x4a61, 0x4a7c, 0x4a9e, 0x4ab1, 0x4ac5, 0x4ad9, 0x4aeb, 0x4b00, - 0x4b35, 0x4b6a, 0x4b7e, 0x4b91, 0x4ba5, 0x4bba, 0x4bd1, 0x4be4, - 0x4bff, 0x4c1b, 0x4c2e, 0x4c49, 0x4c66, 0x4c85, 0x4ca2, 0x4cbf, - 0x4cdc, 0x4cfe, 0x4d1e, 0x4d3b, 0x4d58, 0x4d75, 0x4d8a, 0x4d9d, - 0x4db5, 0x4ddf, 0x4df3, 0x4e05, 0x4e29, 0x4e3c, 0x4e51, 0x4e62, - // Entry 53C0 - 53FF - 0x4e78, 0x4e8a, 0x4e9d, 0x4ebf, 0x4ed2, 0x4ee6, 0x4ef7, 0x4f10, - 0x4f22, 0x4f35, 0x4f49, 0x4f5b, 0x4f70, 0x4f82, 0x4f95, 0x4fa6, - 0x4fc0, 0x4fda, 0x4ff4, 0x500a, 0x501c, 0x5051, 0x506b, 0x507d, - 0x5098, 0x50b4, 0x50d0, 0x50ec, 0x5109, 0x5124, 0x5137, 0x5149, - 0x515a, 0x5170, 0x5181, 0x5197, 0x51a9, 0x51bb, 0x51d8, 0x51f3, - 0x5228, 0x5239, 0x524c, 0x525e, 0x5270, 0x5282, 0x52a8, 0x52b8, - 0x52cc, 0x52e0, 0x530f, 0x5333, 0x5365, 0x5376, 0x5387, 0x5398, - 0x53b0, 0x53cb, 0x53e5, 0x540c, 0x5438, 0x544e, 0x5467, 0x548a, - // Entry 5400 - 543F - 0x549d, 0x54ae, 0x54cb, 0x54ed, 0x5509, 0x5522, 0x5536, 0x5549, - 0x5569, 0x5585, 0x5596, 0x55ac, 0x55bd, 0x55da, 0x55f3, 0x5605, - 0x5627, 0x5649, 0x5664, 0x567f, 0x569b, 0x56b6, 0x56da, 0x56fd, - 0x570f, 0x5721, 0x5734, 0x5746, 0x5760, 0x577f, 0x579b, 0x57b7, - 0x57d2, 0x57ee, 0x5810, 0x582c, 0x5847, 0x5862, 0x587e, 0x5899, - 0x58b5, 0x58d0, 0x58ec, 0x5908, 0x5923, 0x593f, 0x595c, 0x5977, - 0x599a, 0x59b5, 0x59d3, 0x59e7, 0x5a03, 0x5a15, 0x5a2f, 0x5a4a, - 0x5a66, 0x5a83, 0x5a96, 0x5aa9, 0x5abe, 0x5ad2, 0x5ae4, 0x5b03, - // Entry 5440 - 547F - 0x5b15, 0x5b26, 0x5b3c, 0x5b5f, 0x5b71, 0x5b84, 0x5b96, 0x5ba7, - 0x5bc0, 0x5bd2, 0x5be4, 0x5c00, 0x5c12, 0x5c25, 0x5c36, 0x5c48, - 0x5c62, 0x5c76, 0x5c88, 0x5ca2, 0x5cbd, 0x5cd7, 0x5cf4, 0x5d20, - 0x5d33, 0x5d4f, 0x5d6b, 0x5d88, 0x5da5, 0x5dd0, 0x5ded, 0x5e00, - 0x5e12, 0x5e25, 0x5e42, 0x5e5e, 0x5e7a, 0x5e95, 0x5eba, 0x5ed5, - 0x5eef, 0x5f0b, 0x5f25, 0x5f40, 0x5f5d, 0x5f81, 0x5fa7, 0x5fc3, - 0x5fd6, 0x5ff3, 0x6005, 0x6017, 0x602a, 0x6049, 0x6067, 0x6091, - 0x60ae, 0x60c1, 0x60e2, 0x60f4, 0x610e, 0x6120, 0x0120, 0x013e, - // Entry 5480 - 54BF - 0x015e, 0x017d, 0x019c, 0x01ba, 0x01da, 0x01fa, 0x0219, 0x023a, - 0x025a, 0x027a, 0x0299, 0x02ba, 0x02db, 0x02fb, 0x0318, 0x0335, - 0x0351, 0x036f, 0x038d, 0x03aa, 0x03ca, 0x03ea, 0x040c, 0x042d, - 0x044e, 0x046e, 0x0490, 0x04b2, 0x04d3, 0x04f3, 0x0513, 0x0535, - 0x0556, 0x0577, 0x0597, 0x05b9, 0x05e8, 0x0609, 0x062a, 0x064a, - 0x066c, 0x068e, 0x06af, 0x06cf, 0x06ef, 0x0711, 0x0740, 0x0761, - 0x0782, 0x07b2, 0x07e1, 0x0800, 0x081f, 0x0840, 0x086e, 0x088e, - 0x08ae, 0x08dd, 0x090c, 0x093a, 0x0969, 0x0999, 0x09c9, 0x09f5, - // Entry 54C0 - 54FF - 0x0a24, 0x0a54, 0x0a84, 0x0ab2, 0x0ae1, 0x0b10, 0x0b40, 0x0b70, - 0x0ba1, 0x0bc4, 0x0be9, 0x0c0d, 0x0c31, 0x0c54, 0x0c73, 0x0c92, - 0x0cb3, 0x0cd3, 0x0d00, 0x0d20, 0x0d4d, 0x0d6d, 0x0d8d, 0x0dad, - 0x0dcd, 0x0df2, 0x0e18, 0x0e3f, 0x0e6e, 0x0e9e, 0x0ec3, 0x0ee9, - 0x0f16, 0x0f45, 0x0f6b, 0x0f8e, 0x0fb6, 0x0fdf, 0x1003, 0x1027, - 0x1051, 0x107b, 0x10a4, 0x10cf, 0x10fa, 0x1124, 0x0124, 0x0158, - 0x0181, 0x01aa, 0x01d6, 0x0203, 0x0203, 0x0223, 0x023f, 0x025b, - 0x027d, 0x029c, 0x02ba, 0x02d8, 0x02fb, 0x0317, 0x0333, 0x034f, - // Entry 5500 - 553F - 0x036d, 0x0389, 0x03a7, 0x03c3, 0x03e7, 0x0403, 0x041f, 0x043d, - 0x0458, 0x0473, 0x0495, 0x04b2, 0x04cd, 0x04e8, 0x0509, 0x0528, - 0x0544, 0x0563, 0x058e, 0x05ae, 0x05ca, 0x05f0, 0x0616, 0x0633, - 0x064f, 0x066a, 0x0685, 0x06a0, 0x06bc, 0x06dc, 0x06f7, 0x0712, - 0x0728, 0x0749, 0x076e, 0x0792, 0x07bc, 0x07e0, 0x0805, 0x0829, - 0x084e, 0x0872, 0x088e, 0x08ad, 0x08ce, 0x08f9, 0x0922, 0x093f, - 0x095a, 0x097e, 0x09a2, 0x09c4, 0x09ef, 0x0a0b, 0x0a31, 0x0a4d, - 0x0a6a, 0x0a85, 0x0aa8, 0x0acb, 0x0ae8, 0x0b05, 0x0b2f, 0x0b4d, - // Entry 5540 - 557F - 0x0b79, 0x0b9a, 0x0bc1, 0x0bdc, 0x0c09, 0x0c23, 0x0c3d, 0x0c5a, - 0x0c74, 0x0c99, 0x0caf, 0x0cc5, 0x0cdb, 0x0cf1, 0x0d07, 0x0d1d, - 0x0d33, 0x0d5b, 0x0d71, 0x0d94, 0x0daa, 0x0dc0, 0x0dd6, 0x0dec, - 0x0e02, 0x0e18, 0x0e2e, 0x0e44, 0x0e5a, 0x0e70, 0x0e86, 0x0e9c, - 0x0eb2, 0x0ec8, 0x0ede, 0x0ef4, 0x0f0a, 0x0f20, 0x0f36, 0x0f55, - 0x0f75, 0x0f9e, 0x0fd0, 0x0ff7, 0x100d, 0x1023, 0x1039, 0x104f, - 0x1065, 0x107b, 0x1091, 0x10a7, 0x10bd, 0x10d3, 0x10e9, 0x1109, - 0x1129, 0x1154, 0x1174, 0x1193, 0x11b3, 0x11d2, 0x11f1, 0x1210, - // Entry 5580 - 55BF - 0x1232, 0x1248, 0x125e, 0x127e, 0x129d, 0x12bd, 0x12e2, 0x1301, - 0x1333, 0x135d, 0x137c, 0x139e, 0x13b4, 0x13ca, 0x13eb, 0x1408, - 0x1424, 0x1440, 0x146e, 0x148b, 0x14a5, 0x14cb, 0x14f2, 0x1516, - 0x1536, 0x1555, 0x1573, 0x1594, 0x15b7, 0x15d7, 0x15ff, 0x161c, - 0x1640, 0x1661, 0x1681, 0x169c, 0x16c0, 0x16dd, 0x16f5, 0x1710, - 0x172c, 0x1748, 0x1763, 0x1788, 0x17ac, 0x17c8, 0x17e4, 0x1806, - 0x1829, 0x1844, 0x185f, 0x187d, 0x189d, 0x18b9, 0x18cb, 0x18ed, - 0x1915, 0x0115, 0x012d, 0x0145, 0x015d, 0x0175, 0x018d, 0x01a6, - // Entry 55C0 - 55FF - 0x01be, 0x01d7, 0x01f0, 0x0208, 0x0220, 0x0238, 0x0250, 0x0268, - 0x0280, 0x0298, 0x02b0, 0x02c9, 0x02e1, 0x02f9, 0x0311, 0x032a, - 0x0342, 0x035a, 0x0372, 0x038a, 0x03a2, 0x03ba, 0x03d2, 0x03ea, - 0x0402, 0x041a, 0x0432, 0x044a, 0x0462, 0x047a, 0x0492, 0x04ab, - 0x04c3, 0x04db, 0x04f3, 0x050b, 0x0523, 0x053b, 0x0553, 0x056b, - 0x0584, 0x059c, 0x05b4, 0x05cd, 0x05e5, 0x05fe, 0x0616, 0x062e, - 0x0647, 0x065f, 0x0677, 0x068f, 0x06a7, 0x06bf, 0x06d7, 0x06ef, - 0x0707, 0x071f, 0x0737, 0x074f, 0x0767, 0x077f, 0x0797, 0x07af, - // Entry 5600 - 563F - 0x07c7, 0x07df, 0x07f7, 0x080f, 0x0827, 0x083f, 0x0857, 0x086f, - 0x0887, 0x089f, 0x08b7, 0x08cf, 0x08e7, 0x08ff, 0x0917, 0x0930, - 0x0948, 0x0960, 0x0978, 0x0990, 0x09a8, 0x09c0, 0x09d9, 0x09f2, - 0x0a0b, 0x0a23, 0x0a3b, 0x0a53, 0x0a6b, 0x0a83, 0x0a9b, 0x0ab3, - 0x0acb, 0x0ae4, 0x0afc, 0x0b14, 0x0b2c, 0x0b44, 0x0b5c, 0x0b74, - 0x0b8c, 0x0ba4, 0x0bbc, 0x0bd4, 0x0bec, 0x0c04, 0x0c1c, 0x0c34, - 0x0c4c, 0x0c64, 0x0c7c, 0x0c94, 0x0cac, 0x0cc4, 0x0cdc, 0x0cf4, - 0x0d0d, 0x0d25, 0x0d3d, 0x0d55, 0x0d6d, 0x0d85, 0x0d9d, 0x0db5, - // Entry 5640 - 567F - 0x0dcd, 0x0de5, 0x0dfd, 0x0e15, 0x0e2d, 0x0e45, 0x0e5d, 0x0e75, - 0x0e8d, 0x0ea5, 0x0ebd, 0x0ed5, 0x0eee, 0x0f06, 0x0f1e, 0x0f36, - 0x0f4e, 0x0f67, 0x0f7f, 0x0f97, 0x0faf, 0x0fc8, 0x0fe0, 0x0ff8, - 0x1010, 0x1028, 0x1040, 0x1058, 0x1070, 0x1088, 0x10a0, 0x10b8, - 0x10d0, 0x10e8, 0x1101, 0x1119, 0x1131, 0x114a, 0x1162, 0x117a, - 0x1193, 0x11ac, 0x11c5, 0x11de, 0x11f7, 0x1210, 0x1229, 0x1242, - 0x125b, 0x1273, 0x128b, 0x12a4, 0x12bc, 0x12d4, 0x12ed, 0x1305, - 0x131d, 0x1335, 0x134d, 0x1365, 0x137d, 0x1395, 0x13ad, 0x13c5, - // Entry 5680 - 56BF - 0x13dd, 0x13f5, 0x140d, 0x1425, 0x143e, 0x1457, 0x1470, 0x1489, - 0x14a2, 0x14bb, 0x14d4, 0x14ed, 0x1505, 0x151d, 0x1535, 0x154d, - 0x1565, 0x157d, 0x1595, 0x15ad, 0x15c6, 0x15de, 0x15f7, 0x160f, - 0x1627, 0x163f, 0x1657, 0x166f, 0x1687, 0x169f, 0x16b8, 0x16d0, - 0x16e9, 0x1701, 0x1719, 0x1731, 0x174a, 0x1762, 0x177a, 0x1792, - 0x17aa, 0x17c2, 0x17da, 0x17f2, 0x180a, 0x1823, 0x183b, 0x1853, - 0x186b, 0x1883, 0x189b, 0x18b3, 0x18cc, 0x18e4, 0x18fc, 0x1914, - 0x192c, 0x1945, 0x195d, 0x1975, 0x198d, 0x19a5, 0x19bd, 0x19d5, - // Entry 56C0 - 56FF - 0x19ed, 0x1a05, 0x1a1d, 0x1a35, 0x1a4d, 0x1a65, 0x1a7e, 0x1a96, - 0x1aae, 0x1ac6, 0x1ade, 0x1af6, 0x1b0e, 0x1b26, 0x1b3e, 0x1b57, - 0x1b6f, 0x1b87, 0x1b9f, 0x1bb7, 0x1bcf, 0x1be7, 0x1bff, 0x1c17, - 0x1c2f, 0x1c47, 0x1c60, 0x1c78, 0x1c90, 0x1ca8, 0x1cc0, 0x1cd8, - 0x1cf0, 0x1d09, 0x1d21, 0x1d3a, 0x1d52, 0x1d6a, 0x1d82, 0x1d9a, - 0x1db2, 0x1dca, 0x1de2, 0x1dfb, 0x1e13, 0x1e2c, 0x1e44, 0x1e5d, - 0x1e75, 0x1e8d, 0x1ea5, 0x1ebd, 0x1ed6, 0x1eef, 0x1f08, 0x1f20, - 0x1f38, 0x1f50, 0x1f68, 0x1f80, 0x1f98, 0x1fb0, 0x1fc8, 0x1fe1, - // Entry 5700 - 573F - 0x1ff9, 0x2012, 0x202b, 0x2043, 0x205b, 0x2073, 0x208b, 0x20a4, - 0x20bc, 0x20d4, 0x20ec, 0x2104, 0x211c, 0x2134, 0x214c, 0x2164, - 0x217c, 0x2195, 0x21ad, 0x21c5, 0x21dd, 0x21f5, 0x220d, 0x2225, - 0x223e, 0x2256, 0x226e, 0x2286, 0x229e, 0x22b6, 0x22ce, 0x22e6, - 0x22fe, 0x2316, 0x232e, 0x2347, 0x235f, 0x2378, 0x2390, 0x23a8, - 0x23c0, 0x23d8, 0x23f0, 0x2408, 0x2421, 0x2439, 0x2451, 0x246a, - 0x2482, 0x249a, 0x24b2, 0x24ca, 0x24e2, 0x24fa, 0x2512, 0x252a, - 0x2542, 0x255a, 0x2572, 0x258a, 0x25a2, 0x25ba, 0x25d2, 0x25eb, - // Entry 5740 - 577F - 0x2603, 0x261b, 0x2633, 0x264b, 0x2663, 0x267b, 0x2693, 0x26ac, - 0x26c4, 0x26dc, 0x26f4, 0x270c, 0x2725, 0x273d, 0x2756, 0x276e, - 0x2787, 0x279f, 0x27b7, 0x27cf, 0x27e7, 0x27ff, 0x2817, 0x282f, - 0x2847, 0x285f, 0x2877, 0x288f, 0x28a7, 0x28bf, 0x28d7, 0x28f0, - 0x2908, 0x2920, 0x2938, 0x2950, 0x2969, 0x2981, 0x2999, 0x29b1, - 0x29ca, 0x29e3, 0x29fb, 0x2a13, 0x2a2c, 0x2a44, 0x2a5c, 0x2a74, - 0x2a8c, 0x2aa4, 0x2abc, 0x2ad4, 0x2aed, 0x2b05, 0x2b1d, 0x2b36, - 0x2b4f, 0x2b68, 0x2b81, 0x2b9a, 0x2bb3, 0x2bcc, 0x2be5, 0x2bfd, - // Entry 5780 - 57BF - 0x2c15, 0x2c2d, 0x2c46, 0x2c5e, 0x2c77, 0x2c8f, 0x2ca8, 0x2cc0, - 0x2cd8, 0x2cf0, 0x2d08, 0x2d20, 0x2d39, 0x2d51, 0x2d69, 0x2d82, - 0x2d9a, 0x2db2, 0x2dca, 0x2de2, 0x2dfb, 0x2e13, 0x2e2b, 0x2e43, - 0x2e5c, 0x2e74, 0x2e8c, 0x2ea5, 0x2ebe, 0x2ed6, 0x2eee, 0x2f06, - 0x2f1e, 0x2f36, 0x2f4e, 0x2f66, 0x2f7f, 0x2f97, 0x2faf, 0x2fc7, - 0x2fdf, 0x2ff7, 0x300f, 0x3027, 0x303f, 0x3057, 0x306f, 0x3087, - 0x309f, 0x30b7, 0x30cf, 0x30e7, 0x30ff, 0x3117, 0x312f, 0x3147, - 0x315f, 0x3177, 0x318f, 0x31a8, 0x31c1, 0x31d9, 0x31f1, 0x3209, - // Entry 57C0 - 57FF - 0x3221, 0x3239, 0x3251, 0x3269, 0x3282, 0x329a, 0x32b2, 0x32ca, - 0x32e2, 0x32fa, 0x3312, 0x332a, 0x3342, 0x335b, 0x3373, 0x338c, - 0x33a4, 0x33bd, 0x33d5, 0x33ed, 0x3406, 0x341e, 0x3436, 0x344e, - 0x3466, 0x347e, 0x3497, 0x34b0, 0x34c9, 0x34e2, 0x34fb, 0x3515, - 0x352e, 0x3547, 0x3560, 0x3579, 0x3592, 0x35ab, 0x35c4, 0x35dd, - 0x35f6, 0x360f, 0x3628, 0x3641, 0x365b, 0x3674, 0x368d, 0x36a6, - 0x36bf, 0x36d8, 0x36f1, 0x370a, 0x3723, 0x373c, 0x3755, 0x376e, - 0x3787, 0x37a0, 0x37ba, 0x37d3, 0x37ed, 0x3806, 0x381f, 0x3838, - // Entry 5800 - 583F - 0x3851, 0x386a, 0x3883, 0x389c, 0x38b6, 0x38cf, 0x38e8, 0x3901, - 0x391a, 0x3934, 0x394c, 0x3965, 0x397d, 0x3995, 0x39ad, 0x39c5, - 0x39de, 0x39f6, 0x3a0f, 0x3a28, 0x3a41, 0x3a5a, 0x3a73, 0x3a8c, - 0x3aa4, 0x3abc, 0x3ad4, 0x3aec, 0x3b05, 0x3b1e, 0x3b37, 0x3b4f, - 0x3b67, 0x3b7f, 0x3b97, 0x3baf, 0x3bc7, 0x3bdf, 0x3bf7, 0x3c0f, - 0x3c28, 0x3c40, 0x3c59, 0x3c71, 0x3c89, 0x3ca1, 0x3cb9, 0x3cd2, - 0x3cea, 0x3d03, 0x3d1b, 0x3d33, 0x3d4b, 0x3d63, 0x3d7c, 0x3d94, - 0x3dad, 0x3dc5, 0x3ddd, 0x3df5, 0x3e0e, 0x3e26, 0x3e3e, 0x3e56, - // Entry 5840 - 587F - 0x3e6f, 0x3e88, 0x3ea1, 0x3eba, 0x3ed2, 0x3eea, 0x3f02, 0x3f1a, - 0x3f32, 0x3f4a, 0x3f62, 0x3f7a, 0x3f92, 0x3faa, 0x3fc2, 0x3fda, - 0x3ff2, 0x400a, 0x4023, 0x403c, 0x4054, 0x406c, 0x4085, 0x409d, - 0x40b5, 0x40ce, 0x40e6, 0x40fe, 0x4116, 0x412e, 0x4146, 0x415e, - 0x4176, 0x418e, 0x41a6, 0x41be, 0x41d6, 0x41ee, 0x4206, 0x421e, - 0x4236, 0x424e, 0x4266, 0x427f, 0x4297, 0x42b0, 0x42c9, 0x42e1, - 0x42f9, 0x4311, 0x4329, 0x4341, 0x4359, 0x4371, 0x438a, 0x43a2, - 0x43ba, 0x43d2, 0x43ea, 0x4402, 0x441a, 0x4433, 0x444b, 0x4463, - // Entry 5880 - 58BF - 0x447b, 0x4493, 0x44ab, 0x44c3, 0x44db, 0x44f3, 0x450b, 0x4523, - 0x453b, 0x4553, 0x456b, 0x4583, 0x459b, 0x45b4, 0x45cc, 0x45e4, - 0x45fc, 0x4614, 0x462d, 0x4645, 0x465d, 0x4675, 0x468d, 0x46a5, - 0x46bd, 0x46d5, 0x46ed, 0x4706, 0x471f, 0x4737, 0x474f, 0x4767, - 0x4780, 0x4798, 0x47b0, 0x47c8, 0x47e0, 0x47f8, 0x4810, 0x4828, - 0x4840, 0x4858, 0x4871, 0x488a, 0x48a2, 0x48ba, 0x48d2, 0x48ea, - 0x4902, 0x491a, 0x4932, 0x494a, 0x4962, 0x497b, 0x4993, 0x49ab, - 0x49c3, 0x49db, 0x49f3, 0x4a0b, 0x4a23, 0x4a3b, 0x4a53, 0x4a6b, - // Entry 58C0 - 58FF - 0x4a83, 0x4a9b, 0x4ab3, 0x4acb, 0x4ae4, 0x4afc, 0x4b14, 0x4b2c, - 0x4b44, 0x4b5d, 0x4b75, 0x4b8e, 0x4ba6, 0x4bbf, 0x4bd7, 0x4bef, - 0x4c08, 0x4c20, 0x4c38, 0x4c50, 0x4c68, 0x4c80, 0x4c99, 0x4cb1, - 0x4cc9, 0x4ce1, 0x4cf9, 0x4d11, 0x4d29, 0x4d41, 0x4d59, 0x4d71, - 0x4d89, 0x4da1, 0x4db9, 0x4dd1, 0x4de9, 0x4e01, 0x4e19, 0x4e32, - 0x4e4a, 0x4e63, 0x4e7b, 0x4e93, 0x4eab, 0x4ec3, 0x4edb, 0x4ef3, - 0x4f0b, 0x4f23, 0x4f3b, 0x4f54, 0x4f6d, 0x4f85, 0x4f9d, 0x4fb5, - 0x4fcd, 0x4fe5, 0x4ffd, 0x5015, 0x502d, 0x5045, 0x505d, 0x5075, - // Entry 5900 - 593F - 0x508d, 0x50a5, 0x50bd, 0x50d5, 0x50ed, 0x5105, 0x511e, 0x5136, - 0x514e, 0x5166, 0x517e, 0x5196, 0x51ae, 0x51c7, 0x51df, 0x51f7, - 0x520f, 0x5228, 0x5240, 0x5258, 0x5270, 0x5288, 0x52a0, 0x52b8, - 0x52d0, 0x52e8, 0x5300, 0x5318, 0x5330, 0x5349, 0x5362, 0x537b, - 0x5394, 0x53ad, 0x53c6, 0x53df, 0x53f8, 0x5411, 0x5429, 0x5442, - 0x545a, 0x5472, 0x548a, 0x54a2, 0x54ba, 0x54d3, 0x54ec, 0x5504, - 0x551c, 0x5534, 0x554c, 0x5565, 0x557e, 0x5597, 0x55af, 0x55c8, - 0x55e1, 0x55f9, 0x5611, 0x5629, 0x5641, 0x5659, 0x5671, 0x5689, - // Entry 5940 - 597F - 0x56a1, 0x56ba, 0x56d3, 0x56ec, 0x5705, 0x571e, 0x5737, 0x5750, - 0x5769, 0x5782, 0x579b, 0x57b4, 0x57cd, 0x57e5, 0x57fd, 0x5815, - 0x582e, 0x5846, 0x585e, 0x5876, 0x588e, 0x58a6, 0x58bf, 0x58d7, - 0x58f0, 0x5908, 0x5921, 0x5939, 0x5952, 0x596a, 0x5982, 0x599b, - 0x59b3, 0x59cb, 0x59e3, 0x59fb, 0x5a14, 0x5a2c, 0x5a44, 0x5a5c, - 0x5a75, 0x5a8d, 0x5aa5, 0x5abd, 0x5ad6, 0x5aee, 0x5b06, 0x5b1e, - 0x5b36, 0x5b4e, 0x5b66, 0x5b7f, 0x5b97, 0x5bb0, 0x5bc8, 0x5be0, - 0x5bf8, 0x5c10, 0x5c29, 0x5c41, 0x5c59, 0x5c71, 0x5c8a, 0x5ca2, - // Entry 5980 - 59BF - 0x5cbb, 0x5cd3, 0x5ceb, 0x5d03, 0x5d1b, 0x5d33, 0x5d4b, 0x5d64, - 0x5d7c, 0x5d94, 0x5dac, 0x5dc4, 0x5ddc, 0x5df5, 0x5e0e, 0x5e26, - 0x5e3e, 0x5e57, 0x5e6f, 0x5e87, 0x5ea0, 0x5eb8, 0x5ed1, 0x5ee9, - 0x5f01, 0x5f19, 0x5f31, 0x5f49, 0x5f61, 0x5f79, 0x5f91, 0x5fa9, - 0x5fc2, 0x5fdb, 0x5ff4, 0x600d, 0x6025, 0x603e, 0x6057, 0x606f, - 0x6088, 0x60a0, 0x60b9, 0x60d1, 0x60e9, 0x6101, 0x6119, 0x6131, - 0x6149, 0x6161, 0x6179, 0x6191, 0x61a9, 0x61c2, 0x61db, 0x61f4, - 0x620d, 0x6226, 0x623f, 0x6258, 0x6271, 0x628a, 0x62a2, 0x62bb, - // Entry 59C0 - 59FF - 0x62d4, 0x62ed, 0x6306, 0x631f, 0x6338, 0x6351, 0x636a, 0x6383, - 0x639c, 0x63b5, 0x63ce, 0x63e7, 0x6400, 0x6419, 0x6433, 0x644d, - 0x6466, 0x647f, 0x6498, 0x64b1, 0x64ca, 0x64e3, 0x64fc, 0x6515, - 0x652e, 0x6547, 0x6560, 0x6579, 0x6592, 0x65ab, 0x65c4, 0x65dd, - 0x65f6, 0x660f, 0x6628, 0x6641, 0x665a, 0x6673, 0x668c, 0x66a5, - 0x66be, 0x02be, 0x02d7, 0x02f0, 0x0309, 0x0322, 0x033b, 0x0354, - 0x036d, 0x0386, 0x039f, 0x03b8, 0x03d2, 0x03eb, 0x0404, 0x041d, - 0x0436, 0x044f, 0x0468, 0x0481, 0x049a, 0x04b3, 0x04cc, 0x04e5, - // Entry 5A00 - 5A3F - 0x04fe, 0x0517, 0x0530, 0x0549, 0x0562, 0x057c, 0x0595, 0x05ae, - 0x05c7, 0x05e0, 0x05f9, 0x0612, 0x062b, 0x0644, 0x065d, 0x0676, - 0x068f, 0x06a8, 0x06c1, 0x06db, 0x06f4, 0x070d, 0x0727, 0x0740, - 0x0759, 0x0772, 0x078b, 0x07a5, 0x07be, 0x07d8, 0x07f2, 0x080b, - 0x0824, 0x083d, 0x0856, 0x086f, 0x0888, 0x08a1, 0x08ba, 0x08d3, - 0x08ec, 0x0905, 0x091e, 0x0937, 0x0950, 0x0969, 0x0982, 0x099b, - 0x09b4, 0x09cd, 0x09e6, 0x0a00, 0x0a1a, 0x0a34, 0x0a4d, 0x0a66, - 0x0a7f, 0x0a98, 0x0ab1, 0x0aca, 0x0ae3, 0x0afc, 0x0b15, 0x0b2e, - // Entry 5A40 - 5A7F - 0x0b47, 0x0b60, 0x0b79, 0x0b92, 0x0bab, 0x0bc4, 0x0bdd, 0x0bf6, - 0x0c0f, 0x0c28, 0x0c41, 0x0c5a, 0x0c73, 0x0c8c, 0x0ca5, 0x0cbe, - 0x0cd7, 0x0cf0, 0x0d09, 0x0d22, 0x0d3b, 0x0d55, 0x0d6e, 0x0d88, - 0x0da1, 0x0dba, 0x0dd4, 0x0ded, 0x0e07, 0x0e20, 0x0e3a, 0x0e53, - 0x0e6c, 0x0e86, 0x0ea0, 0x0eba, 0x0ed3, 0x0eed, 0x0f07, 0x0f20, - 0x0f39, 0x0f53, 0x0f6d, 0x0f87, 0x0fa0, 0x0fb9, 0x0fd2, 0x0fec, - 0x1006, 0x101f, 0x1038, 0x1051, 0x106a, 0x1083, 0x109d, 0x10b6, - 0x10cf, 0x10e8, 0x1101, 0x111a, 0x1133, 0x114c, 0x1165, 0x117e, - // Entry 5A80 - 5ABF - 0x1197, 0x11b1, 0x11ca, 0x11e3, 0x11fc, 0x1215, 0x122e, 0x1247, - 0x1260, 0x1279, 0x1292, 0x12ab, 0x12c5, 0x12de, 0x12f7, 0x1310, - 0x1329, 0x1342, 0x135b, 0x1374, 0x138d, 0x13a6, 0x13bf, 0x13d8, - 0x13f1, 0x140a, 0x1423, 0x143c, 0x1455, 0x146e, 0x1487, 0x14a0, - 0x14b9, 0x14d2, 0x14eb, 0x1504, 0x151d, 0x1536, 0x154f, 0x1568, - 0x1581, 0x159a, 0x15b3, 0x15cc, 0x15e5, 0x15fe, 0x1617, 0x1630, - 0x1649, 0x1662, 0x167b, 0x1694, 0x16ad, 0x16c6, 0x16df, 0x16f8, - 0x1711, 0x172a, 0x1743, 0x175c, 0x1775, 0x178e, 0x17a7, 0x17c0, - // Entry 5AC0 - 5AFF - 0x17d9, 0x17f2, 0x180b, 0x1824, 0x183d, 0x1856, 0x186f, 0x1888, - 0x18a1, 0x18ba, 0x18d3, 0x18ec, 0x1905, 0x191e, 0x1937, 0x1950, - 0x196a, 0x1984, 0x199d, 0x19b6, 0x19cf, 0x19e8, 0x1a01, 0x1a1b, - 0x1a34, 0x1a4d, 0x1a67, 0x1a80, 0x1a99, 0x1ab2, 0x1acb, 0x1ae4, - 0x1afd, 0x1b17, 0x1b30, 0x1b4a, 0x1b63, 0x1b7c, 0x1b95, 0x1bae, - 0x1bc7, 0x1be0, 0x1bf9, 0x1c12, 0x1c2b, 0x1c44, 0x1c5d, 0x1c77, - 0x1c90, 0x1ca9, 0x1cc2, 0x1cdb, 0x1cf4, 0x1d0d, 0x1d26, 0x1d3f, - 0x1d58, 0x1d71, 0x1d8a, 0x1da3, 0x1dbc, 0x1dd5, 0x1dee, 0x1e07, - // Entry 5B00 - 5B3F - 0x1e20, 0x1e39, 0x1e52, 0x1e6b, 0x1e84, 0x1e9d, 0x1eb6, 0x1ecf, - 0x1ee8, 0x1f01, 0x1f1a, 0x1f33, 0x1f4c, 0x1f65, 0x1f7e, 0x1f97, - 0x1fb0, 0x1fc9, 0x1fe2, 0x1ffb, 0x2014, 0x202d, 0x2046, 0x205f, - 0x2079, 0x2092, 0x20ab, 0x20c4, 0x20dd, 0x20f6, 0x210f, 0x2128, - 0x2141, 0x215a, 0x2173, 0x218c, 0x21a5, 0x21be, 0x21d7, 0x21f0, - 0x2209, 0x2222, 0x223b, 0x2254, 0x226d, 0x2286, 0x229f, 0x22b9, - 0x22d2, 0x22eb, 0x2304, 0x231d, 0x2336, 0x2350, 0x2369, 0x2382, - 0x239b, 0x23b4, 0x23cd, 0x23e7, 0x2400, 0x2419, 0x2432, 0x244b, - // Entry 5B40 - 5B7F - 0x2464, 0x247d, 0x2496, 0x24af, 0x24c8, 0x24e1, 0x24fb, 0x2514, - 0x252d, 0x2546, 0x255f, 0x2578, 0x2591, 0x25aa, 0x25c3, 0x25dc, - 0x25f5, 0x260e, 0x2627, 0x2640, 0x2659, 0x2672, 0x268b, 0x26a4, - 0x26bd, 0x26d6, 0x26ef, 0x2709, 0x2722, 0x273b, 0x2755, 0x276f, - 0x2789, 0x27a2, 0x27bb, 0x27d4, 0x27ed, 0x2807, 0x2821, 0x283b, - 0x2854, 0x286d, 0x2886, 0x289f, 0x28b8, 0x28d1, 0x28ea, 0x2903, - 0x291c, 0x2935, 0x294e, 0x2967, 0x2980, 0x2999, 0x29b2, 0x29cb, - 0x29e4, 0x29fd, 0x2a16, 0x2a2f, 0x2a48, 0x2a61, 0x2a7a, 0x2a94, - // Entry 5B80 - 5BBF - 0x2aad, 0x2ac6, 0x2adf, 0x2af8, 0x2b11, 0x2b2b, 0x2b44, 0x2b5d, - 0x2b76, 0x2b8f, 0x2ba9, 0x2bc2, 0x2bdb, 0x2bf4, 0x2c0e, 0x2c27, - 0x2c40, 0x2c59, 0x2c72, 0x2c8b, 0x2ca4, 0x2cbd, 0x2cd6, 0x2cef, - 0x2d08, 0x2d22, 0x2d3b, 0x2d5d, 0x2d77, 0x2d90, 0x2da9, 0x2dc2, - 0x2ddc, 0x2df5, 0x2e0e, 0x2e27, 0x2e40, 0x2e59, 0x2e72, 0x2e91, - 0x2eaa, 0x2ec3, 0x2edc, 0x2ef5, 0x2f0e, 0x2f27, 0x2f40, 0x2f59, - 0x2f72, 0x2f8b, 0x2fa4, 0x2fbd, 0x2fd6, 0x2fef, 0x3008, 0x3021, - 0x304e, 0x307a, 0x3093, 0x30ac, 0x30c5, 0x30de, 0x30f7, 0x3110, - // Entry 5BC0 - 5BFF - 0x3129, 0x3142, 0x315b, 0x3174, 0x318d, 0x31a6, 0x31bf, 0x31d8, - 0x31f1, 0x320a, 0x3223, 0x323c, 0x3255, 0x326e, 0x3287, 0x32a0, - 0x32b9, 0x32d2, 0x32eb, 0x3304, 0x331d, 0x3336, 0x334f, 0x3368, - 0x3381, 0x339a, 0x33b3, 0x33cc, 0x33e5, 0x33fe, 0x3417, 0x3430, - 0x3449, 0x3462, 0x347c, 0x3495, 0x34ae, 0x34c7, 0x34e0, 0x34f9, - 0x3512, 0x352b, 0x3545, 0x355e, 0x3577, 0x3590, 0x35a9, 0x35c2, - 0x35db, 0x35f4, 0x360d, 0x3626, 0x363f, 0x3658, 0x3671, 0x368a, - 0x36a3, 0x36bc, 0x36d5, 0x36ee, 0x3707, 0x3720, 0x3739, 0x3752, - // Entry 5C00 - 5C3F - 0x376b, 0x3784, 0x379d, 0x37b6, 0x37cf, 0x37e8, 0x3801, 0x381a, - 0x3833, 0x384c, 0x3865, 0x387e, 0x3897, 0x38b0, 0x38c9, 0x38e2, - 0x38fb, 0x3914, 0x392d, 0x3946, 0x395f, 0x3978, 0x3991, 0x39aa, - 0x39c3, 0x39dc, 0x39f5, 0x3a0e, 0x3a27, 0x3a40, 0x3a59, 0x3a72, - 0x3a8b, 0x3aa4, 0x3abd, 0x3ad6, 0x3aef, 0x3b08, 0x3b21, 0x3b3a, - 0x3b53, 0x3b6c, 0x3b85, 0x3b9e, 0x3bb7, 0x3bd0, 0x3be9, 0x3c02, - 0x3c1b, 0x001b, 0x003a, 0x0058, 0x0081, 0x00a7, 0x00c4, 0x00e3, - 0x0101, 0x011e, 0x0140, 0x016b, 0x0193, 0x01b2, 0x01d0, 0x01eb, - // Entry 5C40 - 5C7F - 0x0208, 0x0224, 0x0243, 0x025f, 0x027b, 0x029a, 0x02b5, 0x02cd, - 0x02ec, 0x0306, 0x0322, 0x0340, 0x035c, 0x0377, 0x0395, 0x03b1, - 0x03d2, 0x03f0, 0x040e, 0x042f, 0x044d, 0x0466, 0x0481, 0x04a2, - 0x04be, 0x04d7, 0x04f7, 0x0518, 0x0530, 0x054d, 0x0566, 0x057e, - 0x0598, 0x05b2, 0x05cd, 0x05eb, 0x0606, 0x061e, 0x063f, 0x0658, - 0x0674, 0x068d, 0x06a8, 0x06c1, 0x06d9, 0x06f2, 0x070a, 0x0728, - 0x0743, 0x075c, 0x077f, 0x07a3, 0x07be, 0x07da, 0x07f6, 0x0810, - 0x082a, 0x0843, 0x085e, 0x0877, 0x0892, 0x08aa, 0x08c3, 0x08de, - // Entry 5C80 - 5CBF - 0x08f7, 0x090f, 0x0927, 0x0940, 0x0958, 0x096f, 0x0987, 0x099f, - 0x09b8, 0x09d3, 0x09f4, 0x0a0d, 0x0a28, 0x0a46, 0x0a65, 0x0a7f, - 0x0a9a, 0x0ab6, 0x0ace, 0x0ae9, 0x0b0b, 0x0b2e, 0x0b4f, 0x0b6c, - 0x0b8c, 0x0ba4, 0x0bc1, 0x0bdf, 0x0bfd, 0x0c1d, 0x0c3e, 0x0c5c, - 0x0c77, 0x0c94, 0x0cb0, 0x0ccb, 0x0ce5, 0x0cfe, 0x0d1f, 0x0d3d, - 0x0d57, 0x0d73, 0x0d8c, 0x0da5, 0x0dc0, 0x0de1, 0x0dfc, 0x0e14, - 0x0e2f, 0x0e4c, 0x0e68, 0x0e84, 0x0ea4, 0x0ebd, 0x0ed7, 0x0eef, - 0x0f0a, 0x0f2a, 0x0f47, 0x0f5f, 0x0f7a, 0x0f93, 0x0faa, 0x0fc2, - // Entry 5CC0 - 5CFF - 0x0fdb, 0x0ffc, 0x1014, 0x102c, 0x1049, 0x1063, 0x1081, 0x109b, - 0x10b6, 0x10d3, 0x10ed, 0x1113, 0x1130, 0x114a, 0x1166, 0x1181, - 0x11a7, 0x11c6, 0x11df, 0x11fa, 0x1218, 0x1232, 0x124b, 0x1267, - 0x1280, 0x1299, 0x12b4, 0x12cc, 0x12e5, 0x12ff, 0x131b, 0x1335, - 0x1352, 0x136c, 0x138d, 0x13a6, 0x13c3, 0x13e2, 0x13fb, 0x1416, - 0x142e, 0x144b, 0x1467, 0x1484, 0x14a0, 0x14ba, 0x14d2, 0x14ec, - 0x1504, 0x151e, 0x1537, 0x1554, 0x156f, 0x1586, 0x15a0, 0x15b8, - 0x15d4, 0x15f3, 0x160e, 0x1626, 0x163f, 0x1659, 0x1674, 0x168b, - // Entry 5D00 - 5D3F - 0x16a3, 0x16bc, 0x16d5, 0x16ed, 0x1709, 0x1722, 0x173b, 0x175c, - 0x1775, 0x178e, 0x17ab, 0x17c3, 0x17dc, 0x17f6, 0x1811, 0x1829, - 0x1844, 0x185f, 0x187b, 0x1895, 0x18ae, 0x18ce, 0x18e8, 0x1902, - 0x191b, 0x1934, 0x194d, 0x1969, 0x1989, 0x19a2, 0x19ba, 0x19d2, - 0x19ea, 0x1a02, 0x1a1a, 0x1a33, 0x1a4b, 0x1a63, 0x1a7c, 0x1a96, - 0x1aaf, 0x1ac9, 0x1ae3, 0x1b00, 0x1b19, 0x1b33, 0x1b4d, 0x1b66, - 0x1b80, 0x1b9f, 0x1bb8, 0x1bd3, 0x1bec, 0x1c04, 0x1c1c, 0x1c38, - 0x1c51, 0x1c69, 0x1c83, 0x1c9d, 0x1cb9, 0x1cd2, 0x1ced, 0x1d05, - // Entry 5D40 - 5D7F - 0x1d21, 0x1d41, 0x1d5d, 0x1d74, 0x1d8d, 0x1da8, 0x1dc6, 0x1ddf, - 0x1dfb, 0x1e16, 0x1e2f, 0x1e48, 0x1e63, 0x1e7c, 0x1e97, 0x1eaf, - 0x1ec7, 0x1ee2, 0x1efb, 0x1f15, 0x1f2e, 0x1f49, 0x1f61, 0x1f7b, - 0x1f94, 0x1fad, 0x1fc7, 0x1fe4, 0x1fff, 0x201a, 0x2033, 0x204b, - 0x2066, 0x207f, 0x2097, 0x20b2, 0x20cc, 0x20e8, 0x2101, 0x2119, - 0x2132, 0x214b, 0x2165, 0x217e, 0x2196, 0x21b1, 0x21cc, 0x21e5, - 0x21fe, 0x2216, 0x222f, 0x2248, 0x2264, 0x227e, 0x2297, 0x22b2, - 0x22cc, 0x22e6, 0x2301, 0x2318, 0x2334, 0x234c, 0x2364, 0x237c, - // Entry 5D80 - 5DBF - 0x2394, 0x23ae, 0x23c8, 0x23de, 0x23f6, 0x240d, 0x2426, 0x2440, - 0x2459, 0x2470, 0x2488, 0x24a1, 0x24b9, 0x24d0, 0x24e9, 0x2501, - 0x251a, 0x2532, 0x254f, 0x2566, 0x257f, 0x259e, 0x25b6, 0x25ce, - 0x25e7, 0x2600, 0x261a, 0x2632, 0x264a, 0x2663, 0x267b, 0x2693, - 0x26ab, 0x26c6, 0x26df, 0x26f8, 0x2710, 0x2729, 0x2743, 0x275b, - 0x2773, 0x2790, 0x27a9, 0x27c1, 0x27da, 0x27f2, 0x280d, 0x2826, - 0x283f, 0x285a, 0x2873, 0x288d, 0x28a8, 0x28c2, 0x28db, 0x28f3, - 0x290f, 0x2928, 0x2942, 0x295f, 0x297b, 0x2993, 0x29ac, 0x29c8, - // Entry 5DC0 - 5DFF - 0x29e1, 0x2a00, 0x2a18, 0x2a30, 0x2a52, 0x2a76, 0x2a8f, 0x2aa9, - 0x2ac2, 0x2adc, 0x2af3, 0x2b0d, 0x2b27, 0x2b41, 0x2b5c, 0x2b76, - 0x2b8f, 0x2ba8, 0x2bbf, 0x2bd8, 0x2bf4, 0x2c11, 0x2c2d, 0x2c47, - 0x2c60, 0x2c79, 0x2c92, 0x2cab, 0x2cc3, 0x2cdc, 0x2cf4, 0x2d14, - 0x2d2c, 0x2d46, 0x2d60, 0x2d7a, 0x2d93, 0x2dae, 0x2dc6, 0x2de0, - 0x2dfa, 0x2e12, 0x2e2a, 0x2e46, 0x2e5f, 0x2e76, 0x2e8f, 0x2ea8, - 0x2ec1, 0x2edd, 0x2efd, 0x2f16, 0x2f2f, 0x2f48, 0x2f61, 0x2f79, - 0x2f92, 0x2fad, 0x2fc6, 0x2fde, 0x2ff7, 0x3011, 0x3029, 0x3042, - // Entry 5E00 - 5E3F - 0x305b, 0x3076, 0x3090, 0x30ae, 0x30ca, 0x30e2, 0x30fb, 0x3111, - 0x3129, 0x313f, 0x3155, 0x316d, 0x318b, 0x31a3, 0x31bb, 0x31dd, - 0x31f6, 0x320f, 0x3229, 0x3243, 0x3264, 0x3282, 0x329a, 0x32b2, - 0x32cb, 0x32e4, 0x3303, 0x331b, 0x3333, 0x334b, 0x3363, 0x337a, - 0x3391, 0x33aa, 0x33c2, 0x33dd, 0x33f5, 0x340d, 0x3426, 0x3444, - 0x345b, 0x3472, 0x348a, 0x34a1, 0x34b9, 0x34d0, 0x34e8, 0x3500, - 0x3517, 0x352f, 0x3547, 0x355f, 0x3578, 0x358f, 0x35a5, 0x35bc, - 0x35d3, 0x35eb, 0x3603, 0x361b, 0x3632, 0x364a, 0x3663, 0x367d, - // Entry 5E40 - 5E7F - 0x3695, 0x36ae, 0x36c8, 0x36de, 0x36f6, 0x370f, 0x3726, 0x373f, - 0x3758, 0x3770, 0x3789, 0x37a0, 0x37ba, 0x37d2, 0x37ea, 0x3801, - 0x381a, 0x3833, 0x384c, 0x3864, 0x387c, 0x3893, 0x38aa, 0x38c3, - 0x38db, 0x38f7, 0x3910, 0x3928, 0x3941, 0x3959, 0x3970, 0x3987, - 0x399f, 0x39b6, 0x39cf, 0x39e7, 0x39fe, 0x3a15, 0x3a2e, 0x3a46, - 0x3a5e, 0x3a78, 0x3a91, 0x0291, 0x029e, 0x02ac, 0x02b9, 0x02c7, - 0x02d4, 0x02e1, 0x02ed, 0x02fb, 0x030a, 0x0318, 0x0326, 0x0334, - 0x0344, 0x0351, 0x0360, 0x036e, 0x037b, 0x0388, 0x0394, 0x03a1, - // Entry 5E80 - 5EBF - 0x03af, 0x03be, 0x03cb, 0x03d8, 0x03e4, 0x03f1, 0x03ff, 0x040c, - 0x041a, 0x0427, 0x0435, 0x0035, 0x0043, 0x0050, 0x005d, 0x006c, - 0x007a, 0x0088, 0x0095, 0x00a4, 0x00b3, 0x00c1, 0x00c1, 0x00ca, - 0x00da, 0x00da, 0x00ef, 0x0102, 0x0115, 0x0128, 0x013c, 0x0150, - 0x0164, 0x0179, 0x018e, 0x01a1, 0x01b6, 0x01c9, 0x01dc, 0x01f0, - 0x0203, 0x0216, 0x022a, 0x023d, 0x0250, 0x0263, 0x0278, 0x028b, - 0x02a1, 0x02b3, 0x02c5, 0x02d8, 0x02ea, 0x02fd, 0x030f, 0x0321, - 0x0321, 0x033e, 0x035a, 0x0376, 0x0396, 0x03b7, 0x03ca, 0x03ca, - // Entry 5EC0 - 5EFF - 0x03e1, 0x03f8, 0x040e, 0x0424, 0x043b, 0x0452, 0x0468, 0x047e, - 0x0494, 0x04aa, 0x04c1, 0x04d8, 0x04ef, 0x0506, 0x051d, 0x0534, - 0x054b, 0x0562, 0x0578, 0x058e, 0x05a5, 0x05bc, 0x05d2, 0x05e8, - 0x05fe, 0x0614, 0x062b, 0x0642, 0x065c, 0x0678, 0x0692, 0x06ac, - 0x06c7, 0x06e1, 0x06fc, 0x0717, 0x0731, 0x074c, 0x0766, 0x0781, - 0x079d, 0x07b8, 0x07d4, 0x07f0, 0x080a, 0x0823, 0x083d, 0x0857, - 0x0870, 0x0888, 0x08a1, 0x08bb, 0x08d5, 0x08ee, 0x0908, 0x0922, - 0x0942, 0x095d, 0x0978, 0x0992, 0x09af, 0x09ca, 0x09e5, 0x0a01, - // Entry 5F00 - 5F3F - 0x0a1b, 0x0a36, 0x0a50, 0x0a68, 0x0a7e, 0x0a9c, 0x029c, 0x02b3, - 0x02c9, 0x02df, 0x02f7, 0x030e, 0x0325, 0x033b, 0x0353, 0x036b, - 0x0382, 0x0382, 0x039a, 0x03b6, 0x03d7, 0x03f3, 0x0417, 0x0437, - 0x0454, 0x0054, 0x006d, 0x0083, 0x0098, 0x00b9, 0x00d3, 0x00e9, - 0x00ff, 0x0115, 0x012b, 0x013f, 0x015c, 0x0178, 0x018d, 0x01a2, - 0x01b7, 0x01df, 0x0200, 0x021a, 0x0239, 0x0257, 0x0275, 0x0275, - 0x0292, 0x02ad, 0x02c7, 0x02e2, 0x02fe, 0x0318, 0x0333, 0x034e, - 0x0369, 0x0384, 0x039f, 0x03ba, 0x03d4, 0x03ee, 0x0408, 0x0422, - // Entry 5F40 - 5F7F - 0x043d, 0x0457, 0x0471, 0x0071, 0x007f, 0x008d, 0x009e, 0x00ad, - 0x00bb, 0x00ca, 0x00e0, 0x00ee, 0x00fc, 0x010b, 0x0119, 0x0127, - 0x0139, 0x014a, 0x0159, 0x0168, 0x0176, 0x0185, 0x0197, 0x01ad, - 0x01bc, 0x01cc, 0x01da, 0x01e9, 0x01f8, 0x0208, 0x0218, 0x0228, - 0x0239, 0x024a, 0x0258, 0x0266, 0x0277, 0x0285, 0x0294, 0x02a3, - 0x02b3, 0x02ca, 0x02d8, 0x02e6, 0x02f5, 0x0305, 0x0315, 0x0325, - 0x0334, 0x0344, 0x0354, 0x0364, 0x0377, 0x038a, 0x03a3, 0x03b2, - 0x03c1, 0x03d0, 0x03e0, 0x03ef, 0x03fe, 0x0410, 0x041e, 0x042c, - // Entry 5F80 - 5FBF - 0x043b, 0x044a, 0x045a, 0x0471, 0x0481, 0x0492, 0x04a0, 0x04ae, - 0x04bd, 0x00bd, 0x00d5, 0x00e9, 0x0103, 0x0120, 0x0131, 0x0143, - 0x0156, 0x0168, 0x017b, 0x018c, 0x019e, 0x01b0, 0x01c1, 0x01d2, - 0x01e4, 0x01f7, 0x020a, 0x021b, 0x022d, 0x0240, 0x0254, 0x0266, - 0x0278, 0x028a, 0x029c, 0x02af, 0x02c0, 0x02d2, 0x02e5, 0x02f9, - 0x030b, 0x031e, 0x0331, 0x0342, 0x0354, 0x0366, 0x0379, 0x038c, - 0x03a7, 0x03b9, 0x03d3, 0x03e5, 0x03f7, 0x0409, 0x041b, 0x042c, - 0x043e, 0x003e, 0x004d, 0x0060, 0x006f, 0x007e, 0x0090, 0x00a2, - // Entry 5FC0 - 5FFF - 0x00b4, 0x00c6, 0x00d8, 0x00ea, 0x00fc, 0x0117, 0x0132, 0x014d, - 0x0168, 0x0183, 0x019e, 0x019e, 0x01b3, 0x01b3, 0x01c7, 0x01db, - 0x01ef, 0x0203, 0x0217, 0x022b, 0x023f, 0x0253, 0x0267, 0x027b, - 0x028f, 0x02a3, 0x02b7, 0x02cb, 0x02df, 0x02f3, 0x0307, 0x031b, - 0x032f, 0x0343, 0x0357, 0x036b, 0x037f, 0x0393, 0x03a7, 0x03bb, - 0x03cf, 0x03e3, 0x03f7, 0x040b, 0x041f, 0x0433, 0x0447, 0x045b, - 0x046f, 0x0483, 0x0497, 0x04ab, 0x04bf, 0x04d3, 0x04e7, 0x04fb, - 0x050f, 0x0523, 0x0537, 0x054b, 0x055f, 0x0573, 0x0587, 0x059b, - // Entry 6000 - 603F - 0x05af, 0x05c3, 0x05d7, 0x05eb, 0x05ff, 0x0613, 0x0627, 0x063b, - 0x064f, 0x0663, 0x0677, 0x068b, 0x069f, 0x06b3, 0x06c7, 0x06db, - 0x06ef, 0x0703, 0x0717, 0x072b, 0x073f, 0x0753, 0x0767, 0x077b, - 0x078f, 0x07a3, 0x07b7, 0x07cb, 0x07df, 0x07f3, 0x0807, 0x081b, - 0x082f, 0x0843, 0x0857, 0x086b, 0x087f, 0x0893, 0x08a7, 0x08bb, - 0x08cf, 0x08e3, 0x08f7, 0x090b, 0x091f, 0x0933, 0x0947, 0x095b, - 0x096f, 0x0983, 0x0997, 0x09ab, 0x09bf, 0x09d3, 0x09e7, 0x09fb, - 0x0a0f, 0x0a23, 0x0a37, 0x0a4b, 0x0a5f, 0x0a73, 0x0a87, 0x0a9b, - // Entry 6040 - 607F - 0x0aaf, 0x0ac3, 0x0ad7, 0x0aeb, 0x0aff, 0x0b13, 0x0b27, 0x0b3b, - 0x0b4f, 0x0b63, 0x0b77, 0x0b8b, 0x0b9f, 0x0bb3, 0x0bc7, 0x0bdb, - 0x0bef, 0x0c03, 0x0c17, 0x0c2b, 0x0c3f, 0x0c53, 0x0c67, 0x0c7b, - 0x0c8f, 0x0ca3, 0x0cb7, 0x0ccb, 0x0cdf, 0x0cf3, 0x0d07, 0x0d1b, - 0x0d2f, 0x0d43, 0x0d57, 0x0d6b, 0x0d7f, 0x0d93, 0x0da7, 0x0dbb, - 0x0dcf, 0x0de3, 0x0df7, 0x0e0b, 0x0e1f, 0x0e33, 0x0e47, 0x0e5b, - 0x0e6f, 0x0e83, 0x0e97, 0x0eab, 0x0ebf, 0x0ed3, 0x0ee7, 0x0efb, - 0x0f0f, 0x0f23, 0x0f37, 0x0f4b, 0x0f5f, 0x0f73, 0x0f87, 0x0f9b, - // Entry 6080 - 60BF - 0x0faf, 0x0fc3, 0x0fd7, 0x0feb, 0x0fff, 0x1013, 0x1027, 0x103b, - 0x104f, 0x1063, 0x1077, 0x108b, 0x109f, 0x10b3, 0x10c7, 0x10db, - 0x10ef, 0x1103, 0x1117, 0x112b, 0x113f, 0x1153, 0x1167, 0x117b, - 0x118f, 0x11a3, 0x11b7, 0x11cb, 0x11df, 0x11f3, 0x1207, 0x121b, - 0x122f, 0x1243, 0x1257, 0x126b, 0x127f, 0x1293, 0x12a7, 0x12bb, - 0x12cf, 0x12e3, 0x12f7, 0x130b, 0x131f, 0x1333, 0x1347, 0x135b, - 0x136f, 0x1383, 0x1397, 0x13ab, 0x13bf, 0x13d3, 0x13e7, 0x13fb, - 0x140f, 0x1423, 0x1437, 0x144b, 0x145f, 0x1473, 0x1487, 0x149b, - // Entry 60C0 - 60FF - 0x14af, 0x14c3, 0x14d7, 0x14eb, 0x14ff, 0x1513, 0x1527, 0x153b, - 0x154f, 0x1563, 0x1577, 0x158b, 0x159f, 0x15b3, 0x15c7, 0x15db, - 0x15ef, 0x1603, 0x1617, 0x162b, 0x163f, 0x1653, 0x1667, 0x167b, - 0x168f, 0x16a3, 0x16b7, 0x16cb, 0x16df, 0x16f3, 0x1707, 0x171b, - 0x172f, 0x1743, 0x1757, 0x176b, 0x177f, 0x1793, 0x17a7, 0x17bb, - 0x17cf, 0x17e3, 0x17f7, 0x180b, 0x181f, 0x1833, 0x1847, 0x185b, - 0x186f, 0x1883, 0x1897, 0x18ab, 0x18bf, 0x18d3, 0x18e7, 0x18fb, - 0x190f, 0x1923, 0x1937, 0x194b, 0x195f, 0x1973, 0x1987, 0x199b, - // Entry 6100 - 613F - 0x19af, 0x19c3, 0x19d7, 0x19eb, 0x19ff, 0x1a13, 0x1a27, 0x1a3b, - 0x1a4f, 0x1a63, 0x1a77, 0x1a8b, 0x1a9f, 0x1ab3, 0x1ac7, 0x1adb, - 0x1aef, 0x1b03, 0x1b17, 0x1b2b, 0x1b3f, 0x1b53, 0x1b67, 0x1b7b, - 0x1b8f, 0x1ba3, 0x1bb7, 0x1bcb, 0x1bdf, 0x1bf3, 0x1c07, 0x1c1b, - 0x1c2f, 0x1c43, 0x1c57, 0x1c6b, 0x1c7f, 0x1c93, 0x1ca7, 0x1cbb, - 0x1ccf, 0x1ce3, 0x1cf7, 0x1d0b, 0x1d1f, 0x1d33, 0x1d47, 0x1d5b, - 0x1d6f, 0x1d83, 0x1d97, 0x1dab, 0x1dbf, 0x1dd3, 0x1de7, 0x1dfb, - 0x1e0f, 0x1e23, 0x1e37, 0x1e4b, 0x1e5f, 0x1e73, 0x1e87, 0x1e9b, - // Entry 6140 - 617F - 0x1eaf, 0x1ec3, 0x1ed7, 0x1eeb, 0x1eff, 0x1f13, 0x1f27, 0x1f3b, - 0x1f4f, 0x1f63, 0x1f77, 0x1f8b, 0x1f9f, 0x1fb3, 0x1fc7, 0x1fdb, - 0x1fef, 0x2003, 0x2017, 0x202b, 0x203f, 0x2053, 0x2067, 0x207b, - 0x208f, 0x20a3, 0x20b7, 0x20cb, 0x20df, 0x20f3, 0x2107, 0x211b, - 0x212f, 0x2143, 0x2157, 0x216b, 0x217f, 0x2193, 0x21a7, 0x21bb, - 0x21cf, 0x21e3, 0x21f7, 0x220b, 0x221f, 0x2233, 0x2247, 0x225b, - 0x226f, 0x2283, 0x2297, 0x22ab, 0x22bf, 0x22d3, 0x22e7, 0x22fb, - 0x230f, 0x2323, 0x2337, 0x234b, 0x235f, 0x2373, 0x2387, 0x239b, - // Entry 6180 - 61BF - 0x23af, 0x23c3, 0x23d7, 0x23eb, 0x23ff, 0x2413, 0x2427, 0x243b, - 0x244f, 0x2463, 0x2477, 0x248b, 0x249f, 0x24b3, 0x24c7, 0x24db, - 0x24ef, 0x2503, 0x2517, 0x252b, 0x253f, 0x2553, 0x2567, 0x257b, - 0x258f, 0x25a3, 0x25b7, 0x25cb, 0x25df, 0x25f3, 0x2607, 0x261b, - 0x262f, 0x2643, 0x2657, 0x266b, 0x267f, 0x2693, 0x26a7, 0x26bb, - 0x26cf, 0x26e3, 0x26f7, 0x270b, 0x271f, 0x2733, 0x2747, 0x275b, - 0x276f, 0x2783, 0x2797, 0x27ab, 0x27bf, 0x27d3, 0x27e7, 0x27fb, - 0x280f, 0x2823, 0x2837, 0x284b, 0x285f, 0x2873, 0x2887, 0x289b, - // Entry 61C0 - 61FF - 0x28af, 0x28c3, 0x28d7, 0x28eb, 0x28ff, 0x2913, 0x2927, 0x293b, - 0x294f, 0x2963, 0x2977, 0x298b, 0x299f, 0x29b3, 0x29c7, 0x29db, - 0x29ef, 0x2a03, 0x2a17, 0x2a2b, 0x2a3f, 0x2a53, 0x2a67, 0x2a7b, - 0x2a8f, 0x2aa3, 0x2ab7, 0x2acb, 0x2adf, 0x2af3, 0x2b07, 0x2b1b, - 0x2b2f, 0x2b43, 0x2b57, 0x2b6b, 0x2b7f, 0x2b93, 0x2ba7, 0x2bbb, - 0x2bcf, 0x2be3, 0x2bf7, 0x2c0b, 0x2c1f, 0x2c33, 0x2c47, 0x2c5b, - 0x2c6f, 0x2c83, 0x2c97, 0x2cab, 0x2cbf, 0x2cd3, 0x2ce7, 0x2cfb, - 0x2d0f, 0x2d23, 0x2d37, 0x2d4b, 0x2d5f, 0x2d73, 0x2d87, 0x2d9b, - // Entry 6200 - 623F - 0x2daf, 0x2dc3, 0x2dd7, 0x2deb, 0x2dff, 0x2e13, 0x2e27, 0x2e3b, - 0x2e4f, 0x2e63, 0x2e77, 0x2e8b, 0x2e9f, 0x2eb3, 0x2ec7, 0x2edb, - 0x2eef, 0x2f03, 0x2f17, 0x2f2b, 0x2f3f, 0x2f53, 0x2f67, 0x2f7b, - 0x2f8f, 0x2fa3, 0x2fb7, 0x2fcb, 0x2fdf, 0x2ff3, 0x3007, 0x301b, - 0x302f, 0x3043, 0x3057, 0x306b, 0x307f, 0x3093, 0x30a7, 0x30bb, - 0x30cf, 0x30e3, 0x30f7, 0x310b, 0x311f, 0x3133, 0x3147, 0x315b, - 0x316f, 0x3183, 0x3197, 0x31ab, 0x31bf, 0x31d3, 0x31e7, 0x31fb, - 0x320f, 0x3223, 0x3237, 0x324b, 0x325f, 0x3273, 0x3287, 0x329b, - // Entry 6240 - 627F - 0x32af, 0x32c3, 0x32d7, 0x32eb, 0x32ff, 0x3313, 0x3327, 0x333b, - 0x334f, 0x3363, 0x3377, 0x338b, 0x339f, 0x33b3, 0x33c7, 0x33db, - 0x33ef, 0x3403, 0x3417, 0x342b, 0x343f, 0x3453, 0x3467, 0x347b, - 0x348f, 0x34a3, 0x34b7, 0x34cb, 0x34df, 0x34f3, 0x3507, 0x351b, - 0x352f, 0x3543, 0x3557, 0x356b, 0x357f, 0x3593, 0x35a7, 0x35bb, - 0x35cf, 0x35e3, 0x35f7, 0x360b, 0x361f, 0x3633, 0x3647, 0x365b, - 0x366f, 0x3683, 0x3697, 0x36ab, 0x36bf, 0x36d3, 0x36e7, 0x36fb, - 0x370f, 0x3723, 0x3737, 0x374b, 0x375f, 0x3773, 0x3787, 0x379b, - // Entry 6280 - 62BF - 0x37af, 0x37c3, 0x37d7, 0x37eb, 0x37ff, 0x3813, 0x3827, 0x383b, - 0x384f, 0x3863, 0x3877, 0x388b, 0x389f, 0x38b3, 0x38c7, 0x38db, - 0x38ef, 0x3903, 0x3917, 0x392b, 0x393f, 0x3953, 0x3967, 0x397b, - 0x398f, 0x39a3, 0x39b7, 0x39cb, 0x39df, 0x39f3, 0x3a07, 0x3a1b, - 0x3a2f, 0x3a43, 0x3a57, 0x3a6b, 0x3a7f, 0x3a93, 0x3aa7, 0x3abb, - 0x3acf, 0x3ae3, 0x3af7, 0x3b0b, 0x3b1f, 0x3b33, 0x3b47, 0x3b5b, - 0x3b6f, 0x3b83, 0x3b97, 0x3bab, 0x3bbf, 0x3bd3, 0x3be7, 0x3bfb, - 0x3c0f, 0x3c23, 0x3c37, 0x3c4b, 0x3c5f, 0x3c73, 0x3c87, 0x3c9b, - // Entry 62C0 - 62FF - 0x3caf, 0x00af, 0x00c8, 0x00e2, 0x00e2, 0x00f3, 0x0104, 0x0115, - 0x0126, 0x0137, 0x0148, 0x0159, 0x016a, 0x017b, 0x018c, 0x019d, - 0x01ae, 0x01c1, 0x01d4, 0x01e7, 0x01fa, 0x020d, 0x021f, 0x0237, - 0x0249, 0x025b, 0x0272, 0x0284, 0x0296, 0x02a8, 0x02b9, 0x02ca, - 0x02db, 0x02ec, 0x02ff, 0x0312, 0x0325, 0x0338, 0x0352, 0x036c, - 0x0386, 0x03b2, 0x03cc, 0x03ec, 0x03ff, 0x0412, 0x0425, 0x0438, - 0x044d, 0x0462, 0x0477, 0x048c, 0x04a8, 0x04bb, 0x04d0, 0x04e3, - 0x04f8, 0x050b, 0x0520, 0x0533, 0x0548, 0x0559, 0x056b, 0x057e, - // Entry 6300 - 633F - 0x0591, 0x05a4, 0x05b9, 0x05ce, 0x05e1, 0x05f6, 0x0607, 0x061f, - 0x0631, 0x0642, 0x0655, 0x0666, 0x0677, 0x0689, 0x06a0, 0x06b2, - 0x06c4, 0x06dc, 0x06f6, 0x070e, 0x0724, 0x0736, 0x0747, 0x0759, - 0x076b, 0x077e, 0x0794, 0x07ae, 0x07c0, 0x07d7, 0x07ea, 0x07fc, - 0x080e, 0x0820, 0x0832, 0x0844, 0x0857, 0x086a, 0x0881, 0x0898, - 0x08af, 0x08c6, 0x08df, 0x08f8, 0x0910, 0x0928, 0x0940, 0x0959, - 0x0159, 0x017e, 0x01a2, 0x01c8, 0x01ea, 0x020c, 0x022f, 0x024d, - 0x0279, 0x0298, 0x02b4, 0x02d2, 0x02f0, 0x0314, 0x0314, 0x032d, - // Entry 6340 - 637F - 0x034c, 0x0365, 0x0383, 0x039a, 0x03b4, 0x03cc, 0x03e4, 0x0400, - 0x0000, 0x0018, 0x0036, 0x004e, 0x006b, 0x0081, 0x009a, 0x00b1, - 0x00c8, 0x00e3, 0x00fb, 0x00fb, 0x0115, 0x0133, 0x0147, 0x016d, - 0x018c, 0x01af, 0x01c9, 0x01e1, 0x01e1, 0x01ff, 0x021e, 0x0242, - 0x026c, 0x0290, 0x02bb, 0x02e0, 0x0301, 0x0323, 0x0347, 0x0369, - 0x0391, 0x03b2, 0x03dc, 0x0404, 0x0423, 0x0445, 0x0468, 0x0491, - 0x04b1, 0x04cf, 0x04f7, 0x051f, 0x053e, 0x055f, 0x057d, 0x05a3, - 0x05cc, 0x05f7, 0x0618, 0x0639, 0x0662, 0x068a, 0x06b3, 0x06dd, - // Entry 6380 - 63BF - 0x06fe, 0x071d, 0x073b, 0x0763, 0x0783, 0x07a8, 0x07c7, 0x07f0, - 0x081d, 0x0848, 0x0866, 0x0884, 0x08a0, 0x08bd, 0x08dd, 0x08ff, - 0x0925, 0x094d, 0x096f, 0x0999, 0x09c1, 0x09e2, 0x0a04, 0x0a25, - 0x0a4f, 0x0a6f, 0x0a9c, 0x0ac9, 0x0ae9, 0x0b06, 0x0b26, 0x0b4c, - 0x0b72, 0x0b97, 0x0bbc, 0x0bdd, 0x0c00, 0x0c22, 0x0c42, 0x0c63, - 0x0c8b, 0x0cb3, 0x0cd8, 0x0d02, 0x0d2a, 0x0d49, 0x0d70, 0x0da1, - 0x0dc1, 0x0de9, 0x0e09, 0x0e29, 0x0e4d, 0x0e70, 0x0e93, 0x0eb9, - 0x0ed8, 0x0efb, 0x0f1b, 0x0f43, 0x0f6b, 0x0f96, 0x0fb6, 0x0fde, - // Entry 63C0 - 63FF - 0x1003, 0x1026, 0x104a, 0x1068, 0x108d, 0x10ae, 0x10d1, 0x10f6, - 0x111f, 0x1147, 0x116e, 0x1199, 0x11c5, 0x11ec, 0x1214, 0x123b, - 0x1261, 0x128e, 0x12b4, 0x12dc, 0x1304, 0x1329, 0x1352, 0x1374, - 0x1396, 0x13b8, 0x13d9, 0x13f9, 0x141c, 0x1443, 0x146c, 0x1491, - 0x14b5, 0x14da, 0x14f7, 0x1515, 0x1534, 0x1555, 0x1575, 0x15a1, - 0x15cc, 0x15f9, 0x1629, 0x1658, 0x167f, 0x16b5, 0x16e8, 0x1709, - 0x1746, 0x1782, 0x17b7, 0x17d9, 0x17f7, 0x181a, 0x183a, 0x1862, - 0x1889, 0x18ac, 0x18d1, 0x18f4, 0x1918, 0x1940, 0x1969, 0x1997, - // Entry 6400 - 643F - 0x19ca, 0x19fa, 0x1a2f, 0x1a5d, 0x1a88, 0x1ab8, 0x1af0, 0x1b1f, - 0x1b4e, 0x1b7e, 0x1bb2, 0x1be0, 0x1c0d, 0x1c38, 0x1c65, 0x1c97, - 0x1ccf, 0x1cfb, 0x1d28, 0x1d57, 0x1d78, 0x1d9b, 0x1dd2, 0x1dfe, - 0x1e2c, 0x1e56, 0x1e82, 0x1eb5, 0x1ee1, 0x1f0d, 0x1f3e, 0x1f6e, - 0x1fa5, 0x1fde, 0x2012, 0x2047, 0x206d, 0x2091, 0x20b6, 0x20db, - 0x2111, 0x2145, 0x2170, 0x219b, 0x21c8, 0x21f9, 0x2235, 0x226a, - 0x22a2, 0x22d3, 0x230f, 0x2344, 0x237c, 0x23a2, 0x23c8, 0x23f4, - 0x2421, 0x2448, 0x2471, 0x249a, 0x24cb, 0x24fd, 0x2531, 0x2559, - // Entry 6440 - 647F - 0x2589, 0x25ba, 0x25ed, 0x2611, 0x2636, 0x2655, 0x2678, 0x269c, - 0x26bf, 0x26e2, 0x2705, 0x2728, 0x274b, 0x2776, 0x279f, 0x27ca, - 0x27f3, 0x2817, 0x283f, 0x003f, 0x005c, 0x0079, 0x0095, 0x00b9, - 0x00d6, 0x00f2, 0x0111, 0x0131, 0x014b, 0x0163, 0x0179, 0x018d, - 0x01a0, 0x01c0, 0x01e0, 0x0200, 0x0216, 0x0232, 0x024c, 0x0262, - 0x0276, 0x028c, 0x02a9, 0x02c6, 0x02e5, 0x0303, 0x0321, 0x033e, - 0x0361, 0x0385, 0x039a, 0x03bb, 0x03dd, 0x03f2, 0x0407, 0x0428, - 0x044a, 0x0464, 0x047e, 0x007e, 0x00a2, 0x00bd, 0x00d7, 0x00ed, - // Entry 6480 - 64BF - 0x0105, 0x011e, 0x0139, 0x0150, 0x0169, 0x018a, 0x01aa, 0x01c4, - 0x01db, 0x01f5, 0x0210, 0x0230, 0x0251, 0x026a, 0x0283, 0x029b, - 0x02b6, 0x02d0, 0x02ed, 0x030e, 0x032e, 0x035b, 0x0374, 0x0390, - 0x03b0, 0x03d4, 0x03f8, 0x0421, 0x044a, 0x0475, 0x04a0, 0x04cc, - 0x04f8, 0x0523, 0x054e, 0x057d, 0x05ac, 0x05ce, 0x05f0, 0x0621, - 0x0652, 0x0675, 0x0691, 0x06ae, 0x06ca, 0x06ef, 0x0714, 0x0728, - 0x0741, 0x0759, 0x0774, 0x078e, 0x07ab, 0x07cc, 0x07ec, 0x0819, - 0x0836, 0x0860, 0x0882, 0x08a4, 0x08c6, 0x08e7, 0x0908, 0x0929, - // Entry 64C0 - 64FF - 0x0952, 0x0971, 0x0990, 0x09af, 0x09ce, 0x09ed, 0x0a06, 0x0a1d, - 0x0a35, 0x0a4b, 0x0a64, 0x0a7b, 0x0a96, 0x0aaf, 0x0ace, 0x0aef, - 0x0b0e, 0x0b34, 0x0b54, 0x0b7d, 0x0ba5, 0x0bc3, 0x0bdf, 0x0bfd, - 0x0c1a, 0x0c36, 0x0c53, 0x0c71, 0x0c8e, 0x0cb4, 0x0cda, 0x0cf4, - 0x0d09, 0x0d19, 0x0d2d, 0x0d41, 0x0d55, 0x0d6d, 0x0d87, 0x0da6, - 0x0dc8, 0x0dd9, 0x0dec, 0x0e08, 0x0e21, 0x0e37, 0x0e57, 0x0e77, - 0x0e97, 0x0eb7, 0x0ed7, 0x0ef7, 0x0f17, 0x0f37, 0x0f57, 0x0f78, - 0x0f99, 0x0fb3, 0x0fcd, 0x0fe9, 0x1004, 0x1025, 0x1044, 0x1065, - // Entry 6500 - 653F - 0x108c, 0x10a5, 0x10c1, 0x10df, 0x10fa, 0x1117, 0x1136, 0x1149, - 0x1160, 0x1175, 0x1189, 0x119e, 0x11bd, 0x11dc, 0x11f1, 0x120c, - 0x122b, 0x124a, 0x1263, 0x127c, 0x129e, 0x12c2, 0x12dc, 0x12fa, - 0x1314, 0x1332, 0x1369, 0x13a2, 0x13e6, 0x141f, 0x145a, 0x14a2, - 0x14ea, 0x1532, 0x1546, 0x1565, 0x1584, 0x159b, 0x15af, 0x15c5, - 0x15da, 0x15f2, 0x1609, 0x1620, 0x1638, 0x1657, 0x1676, 0x1697, - 0x16b4, 0x16d0, 0x16f2, 0x1712, 0x1737, 0x1757, 0x1776, 0x17a2, - 0x17cc, 0x17f7, 0x1820, 0x183f, 0x003f, 0x005c, 0x0079, 0x0096, - // Entry 6540 - 657F - 0x00b3, 0x00d0, 0x00ed, 0x010a, 0x0127, 0x0144, 0x0162, 0x0180, - 0x019e, 0x01bc, 0x01da, 0x01f8, 0x0216, 0x0234, 0x0252, 0x0270, - 0x028e, 0x02ac, 0x02ca, 0x02e8, 0x0306, 0x0324, 0x0342, 0x0360, - 0x037e, 0x039c, 0x03c0, 0x03e4, 0x0408, 0x042c, 0x0450, 0x0474, - 0x0499, 0x04be, 0x04e3, 0x0508, 0x052d, 0x0552, 0x0577, 0x059c, - 0x05c1, 0x05e6, 0x060b, 0x0630, 0x0655, 0x067a, 0x069f, 0x06c4, - 0x06e9, 0x070e, 0x0733, 0x0758, 0x077d, 0x07a2, 0x07c7, 0x07ec, - 0x0811, 0x0836, 0x085b, 0x0880, 0x08a5, 0x08ca, 0x08ef, 0x090e, - // Entry 6580 - 65BF - 0x092f, 0x0950, 0x0964, 0x0164, 0x0176, 0x018f, 0x01a5, 0x01be, - 0x01d6, 0x01e6, 0x01fa, 0x0213, 0x0226, 0x023b, 0x0256, 0x026f, - 0x0283, 0x029b, 0x02b6, 0x02df, 0x02f7, 0x0311, 0x0327, 0x0340, - 0x0353, 0x0368, 0x0382, 0x0397, 0x03ae, 0x03c3, 0x03d8, 0x03f0, - 0x0402, 0x0413, 0x042b, 0x0442, 0x0456, 0x046a, 0x0484, 0x04a1, - 0x04b6, 0x04ca, 0x04e1, 0x04f6, 0x050d, 0x0523, 0x0537, 0x054d, - 0x0564, 0x057e, 0x0594, 0x05af, 0x05c7, 0x05da, 0x05f1, 0x060a, - 0x061f, 0x0633, 0x0647, 0x0668, 0x067f, 0x0694, 0x06aa, 0x06bd, - // Entry 65C0 - 65FF - 0x06d7, 0x06f1, 0x070a, 0x0724, 0x0739, 0x0753, 0x076e, 0x0781, - 0x0794, 0x07a9, 0x07bc, 0x07d3, 0x07ea, 0x07ff, 0x0817, 0x082e, - 0x0844, 0x085a, 0x0872, 0x0887, 0x089c, 0x08b5, 0x08cd, 0x08e7, - 0x0901, 0x0918, 0x092f, 0x012f, 0x014a, 0x0165, 0x0182, 0x019e, - 0x01ba, 0x01d5, 0x01f2, 0x020f, 0x022b, 0x0246, 0x0261, 0x027e, - 0x029a, 0x02b6, 0x02d1, 0x02ee, 0x030b, 0x0327, 0x0327, 0x0342, - 0x035d, 0x0378, 0x0393, 0x03ae, 0x03c9, 0x03e4, 0x03ff, 0x041a, - 0x0435, 0x0450, 0x046b, 0x0486, 0x04a1, 0x04bc, 0x04d7, 0x04f2, - // Entry 6600 - 663F - 0x050d, 0x0528, 0x0543, 0x055e, 0x0579, 0x0594, 0x05af, 0x05ca, - 0x05e5, 0x05fe, 0x0617, 0x0630, 0x0649, 0x0662, 0x067b, 0x0694, - 0x06ad, 0x06c6, 0x06df, 0x06f8, 0x0711, 0x072a, 0x0743, 0x075c, - 0x0775, 0x078e, 0x07a7, 0x07c0, 0x07d9, 0x07f2, 0x080b, 0x0824, - 0x083d, 0x0856, 0x086f, 0x088c, 0x08a9, 0x08c6, 0x08e3, 0x0900, - 0x091d, 0x093a, 0x0957, 0x0974, 0x0991, 0x09ae, 0x09cb, 0x09e8, - 0x0a05, 0x0a22, 0x0a3f, 0x0a5c, 0x0a79, 0x0a96, 0x0ab3, 0x0ad0, - 0x0aed, 0x0b0a, 0x0b27, 0x0b44, 0x0b61, 0x0b7c, 0x0b97, 0x0bb2, - // Entry 6640 - 667F - 0x0bcd, 0x0be8, 0x0c03, 0x0c1e, 0x001e, 0x0039, 0x0054, 0x006f, - 0x008a, 0x00a5, 0x00c0, 0x00db, 0x00f6, 0x0111, 0x012c, 0x0147, - 0x0162, 0x017d, 0x0198, 0x01b3, 0x01ce, 0x01e9, 0x0204, 0x0226, - 0x0248, 0x026a, 0x028c, 0x02ae, 0x02d0, 0x02f2, 0x0314, 0x0336, - 0x0358, 0x037a, 0x039c, 0x03be, 0x03e0, 0x0402, 0x0424, 0x0446, - 0x0468, 0x048a, 0x04ac, 0x04ce, 0x04f0, 0x0512, 0x0534, 0x0556, - 0x0578, 0x0598, 0x05b8, 0x05d8, 0x05f8, 0x0618, 0x0638, 0x0658, - 0x0678, 0x0698, 0x06b8, 0x06d8, 0x06f8, 0x0718, 0x0738, 0x0758, - // Entry 6680 - 66BF - 0x0778, 0x0798, 0x07b8, 0x07d8, 0x07f8, 0x0818, 0x0838, 0x0858, - 0x0878, 0x0898, 0x08b8, 0x08d5, 0x00d5, 0x00f2, 0x010f, 0x010f, - 0x012c, 0x012c, 0x0149, 0x0166, 0x0166, 0x0183, 0x01a0, 0x01bd, - 0x01da, 0x01da, 0x01f7, 0x0214, 0x0231, 0x024e, 0x026b, 0x0288, - 0x02a5, 0x02c2, 0x02dd, 0x02f8, 0x0313, 0x032e, 0x032e, 0x0349, - 0x0349, 0x0364, 0x037f, 0x039a, 0x03b5, 0x03d0, 0x03eb, 0x0406, - 0x0006, 0x0021, 0x003c, 0x0057, 0x0072, 0x008d, 0x00a8, 0x00c3, - 0x00de, 0x00f9, 0x0114, 0x012f, 0x0151, 0x0173, 0x0195, 0x01b7, - // Entry 66C0 - 66FF - 0x01d9, 0x01fb, 0x021d, 0x023f, 0x0261, 0x0283, 0x02a5, 0x02c7, - 0x02e9, 0x030b, 0x032d, 0x034f, 0x0371, 0x0393, 0x03b5, 0x03d7, - 0x03f9, 0x041b, 0x043d, 0x045f, 0x0481, 0x04a3, 0x04c3, 0x04e3, - 0x0503, 0x0523, 0x0543, 0x0563, 0x0583, 0x05a3, 0x05c3, 0x05e3, - 0x0603, 0x0623, 0x0643, 0x0663, 0x0683, 0x06a3, 0x06c3, 0x06e3, - 0x0703, 0x0723, 0x0743, 0x0763, 0x0783, 0x07a3, 0x07c3, 0x07e3, - 0x0801, 0x081f, 0x001f, 0x003d, 0x005b, 0x0079, 0x0097, 0x0097, - 0x00b5, 0x00d3, 0x00f1, 0x010f, 0x012d, 0x014b, 0x0169, 0x0187, - // Entry 6700 - 673F - 0x0187, 0x01a5, 0x01c3, 0x01e1, 0x01ff, 0x021d, 0x023b, 0x0259, - 0x0259, 0x0275, 0x0291, 0x02ad, 0x02c9, 0x02e5, 0x0301, 0x031d, - 0x0339, 0x0355, 0x0371, 0x038d, 0x03a9, 0x03c5, 0x03e1, 0x03fd, - 0x0419, 0x0435, 0x0451, 0x046d, 0x0489, 0x04a5, 0x04c1, 0x04dd, - 0x04f9, 0x0515, 0x0531, 0x0555, 0x0579, 0x0179, 0x019d, 0x01c1, - 0x01e5, 0x0209, 0x0209, 0x022d, 0x0251, 0x0275, 0x0299, 0x02bd, - 0x02bd, 0x02e1, 0x02e1, 0x0305, 0x0329, 0x034d, 0x0371, 0x0395, - 0x03b9, 0x03dd, 0x03dd, 0x03ff, 0x0421, 0x0443, 0x0465, 0x0487, - // Entry 6740 - 677F - 0x04a9, 0x04cb, 0x04ed, 0x050f, 0x0531, 0x0553, 0x0575, 0x0597, - 0x05b9, 0x05db, 0x05fd, 0x061f, 0x0641, 0x0663, 0x0685, 0x06a7, - 0x06c9, 0x06eb, 0x070d, 0x072f, 0x0751, 0x0774, 0x0797, 0x07ba, - 0x07dd, 0x0800, 0x0823, 0x0846, 0x0869, 0x088c, 0x08af, 0x08d2, - 0x08f5, 0x0918, 0x093b, 0x095e, 0x0981, 0x09a4, 0x09c7, 0x09ea, - 0x0a0d, 0x0a30, 0x0a53, 0x0a76, 0x0a99, 0x0abc, 0x0adf, 0x0b00, - 0x0b21, 0x0b42, 0x0b63, 0x0b84, 0x0ba5, 0x0bc6, 0x0be7, 0x0c08, - 0x0c29, 0x0c4a, 0x0c6b, 0x0c8c, 0x0cad, 0x0cce, 0x0cef, 0x0d10, - // Entry 6780 - 67BF - 0x0d31, 0x0d52, 0x0d73, 0x0d94, 0x0db5, 0x0dd6, 0x0df7, 0x0e18, - 0x0e39, 0x0e5a, 0x0e7b, 0x0e9c, 0x0ebd, 0x0ede, 0x0eff, 0x0f20, - 0x0f41, 0x0f62, 0x0f83, 0x0fa4, 0x0fc5, 0x0fe6, 0x1007, 0x1028, - 0x1049, 0x106a, 0x108b, 0x10ac, 0x10cd, 0x10ee, 0x110f, 0x1130, - 0x1151, 0x1172, 0x1193, 0x11b2, 0x11d1, 0x11f0, 0x120f, 0x122e, - 0x124d, 0x126c, 0x128b, 0x12aa, 0x12c9, 0x12e8, 0x1307, 0x1326, - 0x1345, 0x1364, 0x1383, 0x13a2, 0x13c1, 0x13e0, 0x13ff, 0x141e, - 0x143d, 0x145c, 0x147b, 0x149a, 0x14b9, 0x14df, 0x1505, 0x152b, - // Entry 67C0 - 67FF - 0x1551, 0x1577, 0x159d, 0x15c3, 0x15e9, 0x160f, 0x1635, 0x165b, - 0x1681, 0x16a7, 0x16cd, 0x16f3, 0x1719, 0x173f, 0x1765, 0x178b, - 0x17b1, 0x17d7, 0x17fd, 0x1823, 0x1849, 0x186f, 0x1895, 0x18b9, - 0x18dd, 0x1901, 0x1925, 0x1949, 0x196d, 0x1991, 0x19b5, 0x19d9, - 0x19fd, 0x1a21, 0x1a45, 0x1a69, 0x1a8d, 0x1ab1, 0x1ad5, 0x1af9, - 0x1b1d, 0x1b41, 0x1b65, 0x1b89, 0x1bad, 0x1bd1, 0x1bf5, 0x1c19, - 0x1c3d, 0x1c65, 0x1c8d, 0x1cb5, 0x1cdd, 0x1d05, 0x1d2d, 0x1d55, - 0x1d7d, 0x1da5, 0x1dcd, 0x1df5, 0x1e1d, 0x1e45, 0x1e6d, 0x1e95, - // Entry 6800 - 683F - 0x1ebd, 0x1ee5, 0x1f0d, 0x1f35, 0x1f5d, 0x1f85, 0x1fad, 0x1fd5, - 0x1ffd, 0x2025, 0x204d, 0x2073, 0x2099, 0x20bf, 0x20e5, 0x210b, - 0x2131, 0x2157, 0x217d, 0x21a3, 0x21c9, 0x21ef, 0x2215, 0x223b, - 0x2261, 0x2287, 0x22ad, 0x22d3, 0x22f9, 0x231f, 0x2345, 0x236b, - 0x2391, 0x23b7, 0x23dd, 0x2403, 0x2429, 0x2456, 0x2483, 0x24b0, - 0x24dd, 0x250a, 0x2537, 0x2564, 0x2591, 0x25be, 0x25eb, 0x2618, - 0x2645, 0x2672, 0x269f, 0x26cc, 0x26f9, 0x2726, 0x2753, 0x2780, - 0x27ad, 0x27da, 0x2807, 0x2834, 0x2861, 0x288e, 0x28bb, 0x28e6, - // Entry 6840 - 687F - 0x2911, 0x293c, 0x2967, 0x2992, 0x29bd, 0x29e8, 0x2a13, 0x2a3e, - 0x2a69, 0x2a94, 0x2abf, 0x2aea, 0x2b15, 0x2b40, 0x2b6b, 0x2b96, - 0x2bc1, 0x2bec, 0x2c17, 0x2c42, 0x2c6d, 0x2c98, 0x2cc3, 0x2cee, - 0x2d19, 0x2d39, 0x2d59, 0x2d79, 0x2d99, 0x2db9, 0x2dd9, 0x2df9, - 0x2e19, 0x2e39, 0x2e59, 0x2e79, 0x2e99, 0x2eb9, 0x2ed9, 0x2ef9, - 0x2f19, 0x2f39, 0x2f59, 0x2f79, 0x2f99, 0x2fb9, 0x2fd9, 0x2ff9, - 0x3019, 0x3039, 0x3059, 0x3077, 0x3095, 0x30b3, 0x30d1, 0x30ef, - 0x310d, 0x312b, 0x3149, 0x3167, 0x3185, 0x31a3, 0x31c1, 0x31df, - // Entry 6880 - 68BF - 0x31fd, 0x321b, 0x3239, 0x3257, 0x3275, 0x3293, 0x32b1, 0x32cf, - 0x32ed, 0x330b, 0x3329, 0x3347, 0x3365, 0x3388, 0x33ab, 0x03ab, - 0x03ca, 0x03e8, 0x0407, 0x0426, 0x0447, 0x0465, 0x0482, 0x04a1, - 0x04bf, 0x04de, 0x04fd, 0x0519, 0x0535, 0x0551, 0x0572, 0x058e, - 0x05ab, 0x05d1, 0x05f0, 0x060d, 0x062e, 0x064b, 0x0668, 0x0685, - 0x06a4, 0x06bb, 0x06d8, 0x06f4, 0x0711, 0x072e, 0x074d, 0x0769, - 0x0784, 0x07a1, 0x07bd, 0x07da, 0x07f7, 0x0811, 0x082b, 0x0845, - 0x0864, 0x087e, 0x0899, 0x08bc, 0x08d9, 0x08f4, 0x0913, 0x092e, - // Entry 68C0 - 68FF - 0x0949, 0x0964, 0x0981, 0x09a7, 0x09c7, 0x09e5, 0x0a03, 0x0a1f, - 0x0a3b, 0x0a56, 0x0a77, 0x0a97, 0x0ab8, 0x0ad9, 0x0afc, 0x0b1c, - 0x0b3b, 0x0b5c, 0x0b7c, 0x0b9d, 0x0bbe, 0x0bdc, 0x0bfa, 0x0c18, - 0x0c3b, 0x0c59, 0x0c78, 0x0ca0, 0x0cc1, 0x0ce0, 0x0d03, 0x0d22, - 0x0d41, 0x0d60, 0x0d81, 0x0d9a, 0x0db9, 0x0dd7, 0x0df6, 0x0e15, - 0x0e36, 0x0e54, 0x0e71, 0x0e90, 0x0eae, 0x0ecd, 0x0eec, 0x0f08, - 0x0f24, 0x0f40, 0x0f61, 0x0f7d, 0x0f9a, 0x0fbf, 0x0fde, 0x0ffb, - 0x101c, 0x1039, 0x1056, 0x1073, 0x1092, 0x10ba, 0x10dc, 0x10fc, - // Entry 6900 - 693F - 0x111c, 0x113a, 0x1158, 0x1175, 0x119b, 0x11c0, 0x11e6, 0x120c, - 0x1234, 0x1259, 0x127d, 0x12a3, 0x12c8, 0x12ee, 0x1314, 0x1337, - 0x135a, 0x137d, 0x13a5, 0x13c8, 0x13ec, 0x1419, 0x143f, 0x1463, - 0x148b, 0x14af, 0x14d3, 0x14f7, 0x151d, 0x153b, 0x155f, 0x1582, - 0x15a6, 0x15ca, 0x15f0, 0x1613, 0x1635, 0x1659, 0x167c, 0x16a0, - 0x16c4, 0x16e5, 0x1706, 0x1727, 0x174d, 0x176e, 0x1790, 0x17ba, - 0x17de, 0x1800, 0x1826, 0x1848, 0x186a, 0x188c, 0x18b0, 0x18dd, - 0x1904, 0x1929, 0x194e, 0x1971, 0x1994, 0x19b6, 0x19e0, 0x1a09, - // Entry 6940 - 697F - 0x1a33, 0x1a5d, 0x1a89, 0x1ab2, 0x1ada, 0x1b04, 0x1b2d, 0x1b57, - 0x1b81, 0x1ba8, 0x1bcf, 0x1bf6, 0x1c22, 0x1c49, 0x1c71, 0x1ca2, - 0x1ccc, 0x1cf4, 0x1d20, 0x1d48, 0x1d70, 0x1d98, 0x1dc2, 0x1de4, - 0x1e0c, 0x1e33, 0x1e5b, 0x1e83, 0x1ead, 0x1ed4, 0x1efa, 0x1f22, - 0x1f49, 0x1f71, 0x1f99, 0x1fbe, 0x1fe3, 0x2008, 0x2032, 0x2057, - 0x207d, 0x20ab, 0x20d3, 0x20f9, 0x2123, 0x2149, 0x216f, 0x2195, - 0x21bd, 0x21ee, 0x2219, 0x2242, 0x226b, 0x2292, 0x22b9, 0x22df, - 0x2310, 0x2340, 0x2371, 0x23a2, 0x23d5, 0x2405, 0x2434, 0x2465, - // Entry 6980 - 69BF - 0x2495, 0x24c6, 0x24f7, 0x2525, 0x2553, 0x2581, 0x25b4, 0x25e2, - 0x2611, 0x2649, 0x267a, 0x26a9, 0x26dc, 0x270b, 0x273a, 0x2769, - 0x279a, 0x27c3, 0x27f2, 0x2820, 0x284f, 0x287e, 0x28af, 0x28dd, - 0x290a, 0x2939, 0x2967, 0x2996, 0x29c5, 0x29f1, 0x2a1d, 0x2a49, - 0x2a7a, 0x2aa6, 0x2ad3, 0x2b08, 0x2b37, 0x2b64, 0x2b95, 0x2bc2, - 0x2bef, 0x2c1c, 0x2c4b, 0x2c83, 0x2cb5, 0x2ce5, 0x2d15, 0x2d43, - 0x2d71, 0x2d9e, 0x2dbf, 0x2dde, 0x01de, 0x01fa, 0x0215, 0x0230, - 0x024d, 0x0269, 0x0285, 0x02a0, 0x02bd, 0x02da, 0x02f6, 0x031b, - // Entry 69C0 - 69FF - 0x033f, 0x0363, 0x0389, 0x03ae, 0x03d3, 0x03f7, 0x041d, 0x0443, - 0x0468, 0x048a, 0x04ab, 0x04cc, 0x04ef, 0x0511, 0x0533, 0x0554, - 0x0577, 0x059a, 0x05bc, 0x05e3, 0x0609, 0x062f, 0x0657, 0x067e, - 0x06a5, 0x06cb, 0x06f3, 0x071b, 0x0742, 0x0763, 0x0783, 0x07a3, - 0x07c5, 0x07e6, 0x0807, 0x0827, 0x0849, 0x086b, 0x088c, 0x08a7, - 0x08c4, 0x08de, 0x08f9, 0x0915, 0x0931, 0x0951, 0x0973, 0x099f, - 0x09c9, 0x09eb, 0x0a0d, 0x0a33, 0x0a56, 0x0a78, 0x0a9c, 0x0ac3, - 0x0af5, 0x0b1e, 0x0b4a, 0x0b76, 0x0ba2, 0x0bd9, 0x0c11, 0x0c44, - // Entry 6A00 - 6A3F - 0x0c77, 0x0ca1, 0x0ccd, 0x0cf9, 0x0d25, 0x0d4d, 0x0d77, 0x0dad, - 0x0de3, 0x0e10, 0x0e4b, 0x0e82, 0x0ebe, 0x0ef5, 0x0f2f, 0x0f5e, - 0x0f8e, 0x0fbd, 0x0fec, 0x1025, 0x105c, 0x109d, 0x10d9, 0x110b, - 0x113d, 0x117b, 0x11b0, 0x11ea, 0x122b, 0x125d, 0x128f, 0x12c2, - 0x12f9, 0x132f, 0x1364, 0x1397, 0x13d0, 0x1403, 0x1432, 0x1468, - 0x14a3, 0x14d5, 0x150b, 0x152d, 0x1554, 0x157d, 0x15a9, 0x15db, - 0x1607, 0x1638, 0x1665, 0x168e, 0x16bc, 0x16ef, 0x1727, 0x1755, - 0x1788, 0x17bf, 0x17e7, 0x1814, 0x1843, 0x186c, 0x189c, 0x18d7, - // Entry 6A40 - 6A7F - 0x1910, 0x1925, 0x194f, 0x1969, 0x1989, 0x19ae, 0x19ce, 0x19f1, - 0x1a1d, 0x1a3f, 0x1a6c, 0x1a9e, 0x1ac0, 0x1ad5, 0x1af5, 0x1b13, - 0x1b36, 0x1b54, 0x1b69, 0x1b82, 0x1b96, 0x1bba, 0x1bd9, 0x1bfb, - 0x1c18, 0x1c3f, 0x1c61, 0x1c7f, 0x1c98, 0x1caf, 0x1cc4, 0x1ce4, - 0x1d02, 0x1d25, 0x1d40, 0x1d69, 0x1d7f, 0x1d9b, 0x1dc1, 0x1de2, - 0x1e06, 0x1e25, 0x1e55, 0x1e85, 0x1e9b, 0x1ec2, 0x1eeb, 0x1f13, - 0x1f3b, 0x1f58, 0x1f84, 0x1fb5, 0x1fe7, 0x2008, 0x2039, 0x2068, - 0x2098, 0x20b7, 0x20e2, 0x2103, 0x2122, 0x2142, 0x216d, 0x218e, - // Entry 6A80 - 6ABF - 0x21b8, 0x21da, 0x21fd, 0x2225, 0x224e, 0x2287, 0x22bc, 0x22de, - 0x2302, 0x2325, 0x2348, 0x2371, 0x239c, 0x23c6, 0x23e1, 0x240b, - 0x243a, 0x246b, 0x248a, 0x24c2, 0x24fb, 0x2518, 0x2541, 0x2562, - 0x2585, 0x25a6, 0x25c8, 0x25e9, 0x2614, 0x2645, 0x2665, 0x2685, - 0x26a5, 0x26cc, 0x26f5, 0x2723, 0x274e, 0x2778, 0x27a5, 0x27cb, - 0x27f3, 0x281f, 0x2847, 0x2868, 0x2885, 0x28a4, 0x28c5, 0x28f0, - 0x291a, 0x293c, 0x2965, 0x2988, 0x29b0, 0x29da, 0x2a09, 0x2a30, - 0x2a59, 0x2a86, 0x2ab2, 0x2adb, 0x2b0a, 0x2b3c, 0x2b73, 0x2ba9, - // Entry 6AC0 - 6AFF - 0x2bde, 0x2c10, 0x2c33, 0x2c59, 0x2c80, 0x2cb5, 0x2ceb, 0x2d1c, - 0x2d4d, 0x2d7d, 0x2daf, 0x2de7, 0x2e1b, 0x2e41, 0x2e6b, 0x2e9f, - 0x2ed3, 0x2f06, 0x2f2e, 0x2f4e, 0x2f73, 0x2f9a, 0x2fc2, 0x2fe4, - 0x300c, 0x3032, 0x3057, 0x3079, 0x3094, 0x30b4, 0x30dd, 0x3107, - 0x312c, 0x314f, 0x317f, 0x31ae, 0x31dd, 0x320a, 0x3236, 0x3265, - 0x3293, 0x32c8, 0x32dd, 0x32f7, 0x330f, 0x3329, 0x3342, 0x335a, - 0x3374, 0x338d, 0x33a6, 0x33c1, 0x33db, 0x33f3, 0x340d, 0x3426, - 0x343c, 0x3454, 0x346b, 0x3486, 0x34a1, 0x34c1, 0x34e1, 0x3503, - // Entry 6B00 - 6B3F - 0x3525, 0x3543, 0x3561, 0x357f, 0x359f, 0x35bf, 0x35db, 0x3600, - 0x3628, 0x3650, 0x3678, 0x36a2, 0x36d6, 0x370a, 0x373a, 0x3767, - 0x3795, 0x37c9, 0x37fe, 0x3832, 0x3868, 0x3898, 0x38c6, 0x38f6, - 0x3927, 0x3963, 0x3987, 0x39be, 0x39ee, 0x3a1f, 0x3a5b, 0x3a84, - 0x3aae, 0x3ad7, 0x3b02, 0x3b2e, 0x3b59, 0x3b87, 0x3bb1, 0x3bdc, - 0x3c06, 0x3c2e, 0x3c57, 0x3c7f, 0x3caa, 0x3cd6, 0x3d01, 0x3d2b, - 0x3d56, 0x3d80, 0x3db6, 0x3dec, 0x3e27, 0x3e5e, 0x3e95, 0x3ed1, - 0x3ef5, 0x3f23, 0x3f51, 0x3f7f, 0x3fa7, 0x3fd0, 0x3ff8, 0x4022, - // Entry 6B40 - 6B7F - 0x404d, 0x4079, 0x40a4, 0x40d1, 0x4101, 0x4132, 0x4162, 0x4194, - 0x41c7, 0x41fb, 0x422e, 0x4263, 0x4298, 0x42ce, 0x4303, 0x433a, - 0x436b, 0x439a, 0x43cb, 0x43fd, 0x443a, 0x445f, 0x4497, 0x44c8, - 0x4503, 0x4540, 0x4564, 0x4590, 0x45bd, 0x45e9, 0x460e, 0x4637, - 0x4661, 0x468a, 0x46b6, 0x46e3, 0x470f, 0x473a, 0x4766, 0x4791, - 0x47c9, 0x4801, 0x483e, 0x4875, 0x48ac, 0x48e8, 0x490d, 0x493f, - 0x4972, 0x49a4, 0x49d8, 0x4a0e, 0x4a45, 0x4a7b, 0x4ab3, 0x4af2, - 0x4b32, 0x4b5b, 0x4b85, 0x4bae, 0x4bd7, 0x4c01, 0x4c2a, 0x4c5a, - // Entry 6B80 - 6BBF - 0x4c90, 0x4cc7, 0x4cfd, 0x4d33, 0x4d6a, 0x4da0, 0x4dd2, 0x4e03, - 0x4e35, 0x4e5a, 0x4e7f, 0x4ea7, 0x4ecd, 0x4f04, 0x4f3a, 0x4f70, - 0x4fa6, 0x4fde, 0x5016, 0x5053, 0x5085, 0x50b6, 0x50e7, 0x5118, - 0x514b, 0x517e, 0x51b6, 0x51ed, 0x5225, 0x525c, 0x5297, 0x52d2, - 0x5313, 0x5354, 0x5395, 0x53d6, 0x5417, 0x5458, 0x5499, 0x54da, - 0x5514, 0x554e, 0x5584, 0x55ba, 0x55f5, 0x562e, 0x5667, 0x56a6, - 0x56e5, 0x572b, 0x5771, 0x57b0, 0x57ef, 0x582e, 0x586d, 0x58a5, - 0x58dd, 0x5911, 0x5945, 0x597e, 0x59a9, 0x59d5, 0x5a00, 0x5a2d, - // Entry 6BC0 - 6BFF - 0x5a5b, 0x5a85, 0x5aaf, 0x5ad9, 0x5b03, 0x5b2d, 0x5b53, 0x5b79, - 0x5ba4, 0x5bd4, 0x5c0a, 0x5c41, 0x5c77, 0x5cae, 0x5cf2, 0x5d37, - 0x5d7b, 0x5dbf, 0x5e04, 0x5e48, 0x5e80, 0x5eb8, 0x5ef8, 0x5f38, - 0x5f6c, 0x5fa0, 0x5fe2, 0x6024, 0x6047, 0x606a, 0x6082, 0x609a, - 0x60b3, 0x60ce, 0x60ee, 0x611a, 0x613e, 0x6159, 0x6169, 0x617d, - 0x61a9, 0x61d1, 0x61fe, 0x6227, 0x6251, 0x6271, 0x62a9, 0x62dc, - 0x6317, 0x6337, 0x635c, 0x637e, 0x63a6, 0x63ce, 0x63f4, 0x641a, - 0x6436, 0x6452, 0x646f, 0x6484, 0x649d, 0x64b4, 0x64d0, 0x64ee, - // Entry 6C00 - 6C3F - 0x6508, 0x6522, 0x653e, 0x6560, 0x6574, 0x658c, 0x65a6, 0x65c6, - 0x65ec, 0x6619, 0x664b, 0x6672, 0x66a0, 0x66d3, 0x66f7, 0x671c, - 0x6742, 0x675b, 0x6775, 0x678e, 0x67ab, 0x67ca, 0x67e6, 0x67f6, - 0x680e, 0x6826, 0x683f, 0x6857, 0x6872, 0x688c, 0x68b0, 0x68d4, - 0x68ed, 0x6906, 0x6926, 0x6946, 0x6966, 0x697d, 0x699d, 0x69b9, - 0x69d0, 0x69f0, 0x6a0c, 0x6a29, 0x6a47, 0x6a66, 0x6a81, 0x6aa5, - 0x6ac5, 0x6ae5, 0x6b0e, 0x6b33, 0x6b49, 0x6b67, 0x6b86, 0x6b9d, - 0x6bbc, 0x6bda, 0x6bfb, 0x6c1b, 0x6c3b, 0x6c54, 0x6c75, 0x6c96, - // Entry 6C40 - 6C7F - 0x6cb9, 0x6cd8, 0x6cfb, 0x6d27, 0x6d4e, 0x6d74, 0x6d9a, 0x6dc0, - 0x6dd1, 0x6deb, 0x6e06, 0x6e2a, 0x6e43, 0x6e65, 0x6e80, 0x6ea2, - 0x6ec5, 0x6ed5, 0x6ee5, 0x6efb, 0x6f19, 0x6f3b, 0x6f62, 0x6f8a, - 0x6fb1, 0x6fdd, 0x7004, 0x7029, 0x7057, 0x7073, 0x708c, 0x70a5, - 0x70be, 0x70d7, 0x70f0, 0x7109, 0x7122, 0x7134, 0x7158, 0x717d, - 0x7198, 0x71b2, 0x71cc, 0x71ea, 0x7204, 0x7225, 0x7236, 0x724b, - 0x7260, 0x7271, 0x7288, 0x0288, 0x02a3, 0x02be, 0x02d9, 0x02f4, - 0x030f, 0x030f, 0x032e, 0x034d, 0x036c, 0x038b, 0x03aa, 0x03c9, - // Entry 6C80 - 6CBF - 0x03e8, 0x0407, 0x0427, 0x0447, 0x0467, 0x0487, 0x04a7, 0x04c7, - 0x04e7, 0x00e7, 0x0106, 0x0126, 0x0146, 0x0169, 0x018a, 0x01ab, - 0x01ce, 0x01ce, 0x01f0, 0x0210, 0x0238, 0x0255, 0x0277, 0x0297, - 0x02ba, 0x02dd, 0x02fe, 0x031d, 0x033f, 0x0360, 0x0381, 0x03a3, - 0x03c2, 0x03e3, 0x0403, 0x0003, 0x0023, 0x0042, 0x0064, 0x0083, - 0x00a3, 0x00c3, 0x00e3, 0x00e3, 0x0101, 0x0126, 0x0126, 0x0144, - 0x0171, 0x0194, 0x01bf, 0x01df, 0x01df, 0x01fd, 0x021b, 0x0239, - 0x0258, 0x0276, 0x0295, 0x02b3, 0x02d2, 0x02f0, 0x030e, 0x032c, - // Entry 6CC0 - 6CFF - 0x034b, 0x0369, 0x0388, 0x03a6, 0x03c5, 0x03e4, 0x0403, 0x0422, - 0x0441, 0x0460, 0x047f, 0x049e, 0x04bd, 0x04dc, 0x04fc, 0x051c, - 0x053a, 0x0558, 0x0576, 0x0595, 0x05b3, 0x05d2, 0x05f0, 0x060d, - 0x062a, 0x0647, 0x0665, 0x0682, 0x06a0, 0x06bd, 0x06db, 0x06f9, - 0x0717, 0x0735, 0x0753, 0x0771, 0x078f, 0x07ad, 0x07cc, 0x07ea, - 0x0809, 0x0827, 0x0846, 0x0864, 0x0882, 0x08a0, 0x08bf, 0x08dd, - 0x08fc, 0x091a, 0x093d, 0x095b, 0x0979, 0x0997, 0x09b6, 0x09d5, - 0x09f3, 0x0a11, 0x0a2f, 0x0a4d, 0x0a6c, 0x0a8a, 0x0aa9, 0x0ac7, - // Entry 6D00 - 6D3F - 0x0ae5, 0x0b03, 0x0b21, 0x0b40, 0x0b5e, 0x0b7d, 0x0b9b, 0x0bbe, - 0x0bdc, 0x0bfa, 0x0c18, 0x0c37, 0x0c55, 0x0c74, 0x0c92, 0x0cb0, - 0x0cce, 0x0cec, 0x0d0b, 0x0d29, 0x0d48, 0x0d66, 0x0d85, 0x0da4, - 0x0dc3, 0x0de2, 0x0e01, 0x0e20, 0x0e3f, 0x0e5d, 0x0e7b, 0x0e99, - 0x0eb8, 0x0ed6, 0x0ef5, 0x0f13, 0x0f33, 0x0f53, 0x0f72, 0x0f91, - 0x0fb0, 0x0fcf, 0x0fee, 0x100e, 0x102e, 0x104e, 0x106e, 0x108f, - 0x10af, 0x10d0, 0x10f0, 0x1111, 0x1132, 0x1157, 0x117d, 0x11a2, - 0x11c0, 0x11de, 0x11fc, 0x121b, 0x123b, 0x125b, 0x127b, 0x129b, - // Entry 6D40 - 6D7F - 0x12bc, 0x12da, 0x12f8, 0x1316, 0x1335, 0x1353, 0x1372, 0x1390, - 0x13af, 0x13ce, 0x13ed, 0x140d, 0x142d, 0x144c, 0x146c, 0x148b, - 0x14ab, 0x14cf, 0x14f4, 0x1518, 0x1537, 0x1556, 0x1575, 0x1595, - 0x15b4, 0x15d4, 0x15f3, 0x1612, 0x1631, 0x1650, 0x1670, 0x168f, - 0x16af, 0x16ce, 0x16ec, 0x170b, 0x172a, 0x1749, 0x1769, 0x1788, - 0x17a8, 0x17c7, 0x17e6, 0x1805, 0x1825, 0x1845, 0x1863, 0x1881, - 0x189f, 0x18be, 0x18dc, 0x18fb, 0x1919, 0x1939, 0x1959, 0x1979, - 0x1999, 0x19b9, 0x01b9, 0x01d0, 0x01e7, 0x0200, 0x0218, 0x0230, - // Entry 6D80 - 6DBF - 0x0247, 0x0260, 0x0279, 0x0291, 0x02b5, 0x02d8, 0x02ff, 0x0327, - 0x0353, 0x0383, 0x03aa, 0x03aa, 0x03c3, 0x03dd, 0x03f6, 0x040f, - 0x0426, 0x0445, 0x045c, 0x0474, 0x048b, 0x04a1, 0x04b8, 0x04ce, - 0x04e4, 0x04fc, 0x0514, 0x052c, 0x0544, 0x055c, 0x0573, 0x0589, - 0x05a2, 0x05ba, 0x05d1, 0x05ea, 0x0601, 0x0619, 0x0630, 0x0648, - 0x065f, 0x0677, 0x068f, 0x06a7, 0x06bf, 0x06d7, 0x06ee, 0x0706, - 0x071d, 0x0734, 0x0749, 0x0766, 0x077b, 0x0791, 0x07a6, 0x07ba, - 0x07cf, 0x07e3, 0x07f7, 0x080d, 0x0823, 0x0839, 0x084f, 0x0865, - // Entry 6DC0 - 6DFF - 0x087a, 0x088e, 0x08a5, 0x08bb, 0x08d0, 0x08e7, 0x08fc, 0x0912, - 0x0927, 0x093d, 0x0952, 0x0968, 0x097e, 0x0994, 0x09aa, 0x09c0, - 0x09d5, 0x09eb, 0x0a00, 0x0a0b, 0x0a23, 0x0a44, 0x0a4f, 0x024f, - 0x025f, 0x026e, 0x027d, 0x028e, 0x029e, 0x02ae, 0x02bd, 0x02ce, - 0x02df, 0x02ef, 0x02ef, 0x030d, 0x0328, 0x0328, 0x0340, 0x0357, - 0x036f, 0x0386, 0x0386, 0x039d, 0x03b5, 0x03cc, 0x03e3, 0x03fa, - 0x0411, 0x0428, 0x0440, 0x0458, 0x0470, 0x0487, 0x049e, 0x04b5, - 0x04cc, 0x04e3, 0x04fc, 0x0513, 0x052b, 0x0543, 0x055b, 0x0572, - // Entry 6E00 - 6E3F - 0x0589, 0x05a2, 0x05c1, 0x05e1, 0x0600, 0x061f, 0x021f, 0x023e, - 0x025e, 0x025e, 0x027d, 0x027d, 0x029c, 0x029c, 0x02bb, 0x02da, - 0x02f9, 0x0319, 0x0339, 0x0359, 0x0378, 0x0397, 0x03b6, 0x03d5, - 0x03d5, 0x03f6, 0x0415, 0x0435, 0x0455, 0x0055, 0x0074, 0x0074, - 0x0095, 0x0095, 0x00b4, 0x00b4, 0x00d2, 0x00d2, 0x00f0, 0x00f0, - 0x010e, 0x010e, 0x012d, 0x014c, 0x016a, 0x016a, 0x0188, 0x01a6, - 0x01a6, 0x01c6, 0x01c6, 0x01e5, 0x01e5, 0x0203, 0x0203, 0x0223, - 0x0223, 0x024a, 0x024a, 0x0270, 0x0270, 0x0291, 0x02b3, 0x02b3, - // Entry 6E40 - 6E7F - 0x02d4, 0x02d4, 0x02f5, 0x0316, 0x0337, 0x0358, 0x0358, 0x037a, - 0x039c, 0x03be, 0x03df, 0x0400, 0x0421, 0x0442, 0x0042, 0x0065, - 0x0086, 0x00a8, 0x00ca, 0x00ca, 0x00eb, 0x010c, 0x012f, 0x0158, - 0x0158, 0x0181, 0x0181, 0x01a0, 0x01be, 0x01dd, 0x01fb, 0x0219, - 0x0237, 0x0256, 0x0274, 0x0292, 0x02b0, 0x02b0, 0x02ce, 0x02ed, - 0x030c, 0x032b, 0x0349, 0x0367, 0x0385, 0x03a3, 0x03c1, 0x03e1, - 0x03ff, 0x041e, 0x043d, 0x045c, 0x047a, 0x0498, 0x04b8, 0x00b8, - 0x00dd, 0x0103, 0x0128, 0x0128, 0x014d, 0x0173, 0x0198, 0x01bd, - // Entry 6E80 - 6EBF - 0x01e2, 0x01e2, 0x0207, 0x022d, 0x0253, 0x0279, 0x029e, 0x02c3, - 0x02e8, 0x030d, 0x0332, 0x0359, 0x037e, 0x03a4, 0x03ca, 0x03f0, - 0x0415, 0x043a, 0x0461, 0x0061, 0x0098, 0x00c1, 0x00c1, 0x00d7, - 0x00ee, 0x0104, 0x011b, 0x0132, 0x014b, 0x0164, 0x0182, 0x01a0, - 0x01c0, 0x01df, 0x01fe, 0x021c, 0x023c, 0x025c, 0x027b, 0x0296, - 0x02b1, 0x02ce, 0x02ea, 0x0306, 0x0321, 0x033e, 0x035b, 0x0377, - 0x0392, 0x03ad, 0x03ca, 0x03e6, 0x0402, 0x041d, 0x043a, 0x0457, - 0x0473, 0x0484, 0x0497, 0x04aa, 0x04c4, 0x04d7, 0x04ea, 0x04fd, - // Entry 6EC0 - 6EFF - 0x0510, 0x0522, 0x0533, 0x0133, 0x014e, 0x016a, 0x0186, 0x01a2, - 0x01be, 0x01da, 0x01f6, 0x0212, 0x022e, 0x024a, 0x0266, 0x0282, - 0x029e, 0x02ba, 0x02d6, 0x02f2, 0x030e, 0x032a, 0x0346, 0x0362, - 0x037e, 0x039a, 0x03b6, 0x03d2, 0x03ee, 0x040a, 0x0426, 0x0442, - 0x045e, 0x047a, 0x0496, 0x04b2, 0x04ce, 0x04ea, 0x0506, 0x0522, - 0x053e, 0x055a, 0x0576, 0x0592, 0x05ae, 0x05ca, 0x05e6, 0x0602, - 0x061e, 0x063a, 0x0656, 0x0672, 0x068e, 0x06aa, 0x06c3, 0x06dd, - 0x06f7, 0x0711, 0x072b, 0x0745, 0x075f, 0x0779, 0x0793, 0x07ad, - // Entry 6F00 - 6F3F - 0x07c7, 0x07e1, 0x07fb, 0x0815, 0x082f, 0x0849, 0x0863, 0x087d, - 0x0897, 0x08b1, 0x08cb, 0x08e5, 0x08ff, 0x0919, 0x0933, 0x094d, - 0x0967, 0x0981, 0x099b, 0x09b5, 0x09cf, 0x09e9, 0x0a03, 0x0a1d, - 0x0a37, 0x0a51, 0x0a6b, 0x0a85, 0x0a9f, 0x0ab9, 0x0ad3, 0x0aed, - 0x0b07, 0x0b21, 0x0b3b, 0x0b55, 0x0b6f, 0x0b89, 0x0ba3, 0x0bbd, - 0x03bd, 0x03ce, 0x03e8, 0x0402, 0x041e, 0x0439, 0x0454, 0x046e, - 0x048a, 0x04a6, 0x04c1, 0x04db, 0x04f6, 0x0513, 0x052f, 0x054a, - 0x014a, 0x0164, 0x017e, 0x019a, 0x01b5, 0x01d0, 0x01ea, 0x0206, - // Entry 6F40 - 6F7F - 0x0222, 0x023d, 0x0257, 0x0272, 0x028f, 0x02ab, 0x02c6, 0x02dc, - 0x02dc, 0x02f8, 0x0314, 0x0332, 0x034f, 0x036c, 0x0388, 0x03a6, - 0x03c4, 0x03e1, 0x03fd, 0x041a, 0x0439, 0x0457, 0x0474, 0x048c, - 0x008c, 0x00a5, 0x00be, 0x00d9, 0x00f3, 0x010d, 0x0126, 0x0141, - 0x015c, 0x0176, 0x018f, 0x01a9, 0x01c5, 0x01e0, 0x01fa, 0x0212, - 0x0223, 0x0237, 0x024b, 0x025f, 0x0273, 0x0287, 0x029b, 0x02af, - 0x02c3, 0x02d7, 0x02ec, 0x0301, 0x0316, 0x032b, 0x0340, 0x0355, - 0x036a, 0x037f, 0x0394, 0x03a9, 0x03be, 0x03d3, 0x03d3, 0x03e7, - // Entry 6F80 - 6FBF - 0x03f7, 0x0406, 0x0415, 0x0426, 0x0436, 0x0446, 0x0455, 0x0466, - 0x0477, 0x0487, 0x04ac, 0x04da, 0x00da, 0x00fe, 0x0122, 0x0146, - 0x016a, 0x018e, 0x01b2, 0x01d6, 0x01fa, 0x021e, 0x0242, 0x0266, - 0x028a, 0x02ae, 0x02d2, 0x02f6, 0x031a, 0x033e, 0x0362, 0x0386, - 0x03aa, 0x03ce, 0x03f2, 0x0416, 0x043a, 0x045e, 0x0482, 0x04b1, - 0x04d6, 0x04fb, 0x0505, 0x050f, 0x010f, 0x012d, 0x014b, 0x0169, - 0x0187, 0x01a5, 0x01c3, 0x01e1, 0x01ff, 0x021d, 0x023b, 0x0259, - 0x0277, 0x0295, 0x02b3, 0x02d1, 0x02ef, 0x030d, 0x032b, 0x0349, - // Entry 6FC0 - 6FFF - 0x0367, 0x0385, 0x03a3, 0x03c1, 0x03df, 0x03fd, 0x041b, 0x0425, - 0x042f, 0x0439, 0x0443, 0x044e, 0x0458, 0x047f, 0x04a6, 0x04cd, - 0x04f4, 0x051b, 0x0542, 0x0569, 0x0590, 0x05b7, 0x05de, 0x0605, - 0x062c, 0x0653, 0x067a, 0x06a1, 0x06c8, 0x06ef, 0x0716, 0x073d, - 0x0764, 0x078b, 0x07b2, 0x07d9, 0x0800, 0x0827, 0x084e, 0x085c, - 0x086a, 0x006a, 0x0091, 0x00b8, 0x00df, 0x0106, 0x012d, 0x0154, - 0x017b, 0x01a2, 0x01c9, 0x01f0, 0x0217, 0x023e, 0x0265, 0x028c, - 0x02b3, 0x02da, 0x0301, 0x0328, 0x034f, 0x0376, 0x039d, 0x03c4, - // Entry 7000 - 703F - 0x03eb, 0x0412, 0x0439, 0x0460, 0x048f, 0x04a2, 0x04b5, 0x04c8, - 0x04db, 0x04ee, 0x04f7, 0x0501, 0x050d, 0x0519, 0x0523, 0x052e, - 0x0538, 0x0542, 0x054d, 0x056d, 0x0577, 0x0586, 0x059b, 0x05a8, - 0x05b6, 0x05c5, 0x05db, 0x05f2, 0x060e, 0x061d, 0x0639, 0x0655, - 0x065f, 0x066a, 0x0678, 0x0688, 0x0693, 0x069e, 0x06a9, 0x02a9, - 0x02cb, 0x02ed, 0x030f, 0x0331, 0x0353, 0x0375, 0x0397, 0x03b9, - 0x03db, 0x03fd, 0x041f, 0x0441, 0x0463, 0x0485, 0x04a7, 0x04c9, - 0x04eb, 0x050d, 0x052f, 0x0551, 0x0573, 0x0595, 0x05b7, 0x05d9, - // Entry 7040 - 707F - 0x05fb, 0x061d, 0x0631, 0x0646, 0x0659, 0x0259, 0x027b, 0x029d, - 0x02bf, 0x02d2, 0x02f4, 0x0316, 0x0338, 0x035a, 0x037c, 0x039e, - 0x03c0, 0x03e2, 0x0404, 0x0426, 0x0448, 0x046a, 0x048c, 0x04ae, - 0x04d0, 0x04f2, 0x0514, 0x0536, 0x0558, 0x057a, 0x059c, 0x05be, - 0x05e0, 0x0602, 0x0624, 0x0646, 0x0668, 0x068a, 0x06ac, 0x06ce, - 0x06f0, 0x0712, 0x0734, 0x0756, 0x0778, 0x079a, 0x07bc, 0x07de, - 0x0800, 0x0822, 0x0022, 0x0055, 0x0088, 0x00bb, 0x00ee, 0x0121, - 0x0154, 0x0187, 0x01ba, 0x01ed, 0x01ed, 0x0208, 0x0220, 0x0220, - // Entry 7080 - 70BF - 0x0227, 0x022c, 0x023b, 0x024b, 0x0261, 0x0268, 0x0279, 0x028e, - 0x0295, 0x02a4, 0x02ae, 0x02b5, 0x02be, 0x02d7, 0x02eb, 0x0305, - 0x0319, 0x0328, 0x0343, 0x035c, 0x0376, 0x0386, 0x03a0, 0x03b8, - 0x03d3, 0x03e0, 0x03f2, 0x040e, 0x0429, 0x043c, 0x0449, 0x0455, - 0x0462, 0x046d, 0x047a, 0x0483, 0x049d, 0x04b3, 0x04d3, 0x04e2, - 0x04f1, 0x0505, 0x0517, 0x051a, 0x052b, 0x0532, 0x0536, 0x053d, - 0x0545, 0x054d, 0x055b, 0x0569, 0x0572, 0x0578, 0x0582, 0x0587, - 0x0595, 0x0599, 0x05a1, 0x05aa, 0x05b1, 0x05bd, 0x05c8, 0x05cc, - // Entry 70C0 - 70FF - 0x05dc, 0x05e6, 0x05f1, 0x0608, 0x0610, 0x0616, 0x061f, 0x0625, - 0x062a, 0x0634, 0x063d, 0x0642, 0x0648, 0x0651, 0x065a, 0x0665, - 0x0669, 0x066e, 0x0676, 0x0680, 0x0689, 0x0697, 0x06a3, 0x06ae, - 0x06ba, 0x06c3, 0x06ce, 0x06dc, 0x06e9, 0x06f2, 0x06f7, 0x0703, - 0x0717, 0x071c, 0x0720, 0x0725, 0x0731, 0x074c, 0x075a, 0x0764, - 0x076d, 0x0775, 0x077b, 0x0788, 0x078d, 0x0795, 0x079c, 0x07a5, - 0x07ae, 0x07b7, 0x07c2, 0x07c9, 0x07d7, 0x07ec, 0x07ff, 0x0809, - 0x0817, 0x0825, 0x082d, 0x083f, 0x084a, 0x0863, 0x087b, 0x0882, - // Entry 7100 - 713F - 0x0888, 0x0897, 0x08a4, 0x08b2, 0x08c0, 0x08d0, 0x08d9, 0x08ea, - 0x08f1, 0x08fd, 0x090a, 0x0917, 0x0924, 0x0933, 0x0941, 0x094e, - 0x0958, 0x096d, 0x097b, 0x0989, 0x09a3, 0x09b5, 0x09c3, 0x09d2, - 0x09ed, 0x09fe, 0x0a0a, 0x0a17, 0x0a35, 0x0a54, 0x0a5f, 0x0a70, - 0x0a7e, 0x0a8a, 0x0a98, 0x0aad, 0x0ab7, 0x0ac3, 0x0ac9, 0x0ad2, - 0x0ae0, 0x0ae7, 0x0af2, 0x0af8, 0x0b05, 0x0b14, 0x0b1e, 0x0b28, - 0x0b34, 0x0b3d, 0x0b45, 0x0b4c, 0x0b60, 0x0b6c, 0x0b82, 0x0b8b, - 0x0b91, 0x0ba1, 0x0ba8, 0x0bae, 0x0bbb, 0x0bd2, 0x0be9, 0x0bf9, - // Entry 7140 - 717F - 0x0c0c, 0x0c1a, 0x0c25, 0x0c2b, 0x0c31, 0x0c3d, 0x0c43, 0x0c4f, - 0x0c60, 0x0c6e, 0x0c75, 0x0c82, 0x0c88, 0x0c99, 0x0ca3, 0x0cb7, - 0x0cc1, 0x0cdc, 0x0cf5, 0x0d11, 0x0d25, 0x0d2c, 0x0d3f, 0x0d54, - 0x0d63, 0x0d6c, 0x0d83, 0x0d95, 0x0d9b, 0x0da8, 0x0db5, 0x0dbc, - 0x0dca, 0x0ddb, 0x0dea, 0x0dfe, 0x0e12, 0x0e1a, 0x0e1e, 0x0e36, - 0x0e3b, 0x0e45, 0x0e56, 0x0e5c, 0x0e6c, 0x0e73, 0x0e82, 0x0e91, - 0x0ea0, 0x0ead, 0x0eba, 0x0ecb, 0x0edc, 0x0ee3, 0x0ef0, 0x0ef5, - 0x0f16, 0x0f23, 0x0f2a, 0x0f4d, 0x0f6e, 0x0f8f, 0x0fb0, 0x0fd1, - // Entry 7180 - 71BF - 0x0fd4, 0x0fd9, 0x0fdb, 0x0fe8, 0x0feb, 0x0ff0, 0x0ff7, 0x0ffd, - 0x1000, 0x1006, 0x100f, 0x1014, 0x1019, 0x101e, 0x1023, 0x1026, - 0x102a, 0x102f, 0x1035, 0x103c, 0x1043, 0x1046, 0x1049, 0x104d, - 0x1055, 0x105c, 0x1068, 0x106b, 0x106e, 0x1076, 0x1081, 0x1085, - 0x1092, 0x109a, 0x10a0, 0x10ae, 0x10b8, 0x10cf, 0x10d3, 0x10da, - 0x10df, 0x10e5, 0x10f4, 0x1102, 0x1109, 0x1113, 0x111b, 0x1125, - 0x1130, 0x1138, 0x1143, 0x1151, 0x115b, 0x1166, 0x116e, 0x1176, - 0x117f, 0x118b, 0x1194, 0x119d, 0x11a7, 0x11af, 0x11b9, 0x11c1, - // Entry 71C0 - 71FF - 0x11c5, 0x11c8, 0x11cb, 0x11cf, 0x11d4, 0x11da, 0x11fa, 0x121c, - 0x123e, 0x1261, 0x1271, 0x1281, 0x128d, 0x129b, 0x12ab, 0x12be, - 0x12cd, 0x12d2, 0x12dc, 0x12e6, 0x12ed, 0x12f4, 0x12f9, 0x12fe, - 0x1304, 0x130a, 0x1318, 0x131d, 0x1324, 0x1329, 0x1332, 0x133f, - 0x134f, 0x135c, 0x1368, 0x1372, 0x1384, 0x1397, 0x139a, 0x139e, - 0x13a1, 0x13a6, 0x13ac, 0x13c7, 0x13dc, 0x13f3, 0x1401, 0x1416, - 0x1425, 0x143b, 0x144e, 0x145d, 0x1466, 0x1471, 0x1475, 0x1488, - 0x1490, 0x149d, 0x14ac, 0x14b1, 0x14bb, 0x14d1, 0x14de, 0x14e1, - // Entry 7200 - 723F - 0x14e6, 0x14fd, 0x1506, 0x150c, 0x1514, 0x151f, 0x152b, 0x1532, - 0x153d, 0x1544, 0x1548, 0x1551, 0x155c, 0x1560, 0x1569, 0x156d, - 0x1574, 0x1585, 0x158c, 0x1599, 0x15a5, 0x15af, 0x15be, 0x15cb, - 0x15db, 0x15e5, 0x15f0, 0x15fc, 0x1608, 0x1619, 0x1629, 0x1639, - 0x1658, 0x166b, 0x1677, 0x167b, 0x168a, 0x169a, 0x16b0, 0x16b7, - 0x16c2, 0x16cd, 0x16da, 0x16e6, 0x16f4, 0x1703, 0x170f, 0x1724, - 0x172d, 0x173e, 0x174f, 0x175a, 0x1770, 0x1789, 0x17a0, 0x17b8, - 0x17c8, 0x17ed, 0x17f1, 0x1802, 0x180b, 0x1813, 0x181e, 0x182a, - // Entry 7240 - 727F - 0x182d, 0x1838, 0x1848, 0x1856, 0x1864, 0x186c, 0x187d, 0x1887, - 0x189f, 0x18b9, 0x18c2, 0x18cb, 0x18d2, 0x18df, 0x18e8, 0x18f6, - 0x1906, 0x1913, 0x1919, 0x1921, 0x193f, 0x194a, 0x1953, 0x195d, - 0x1966, 0x1971, 0x1976, 0x1980, 0x1986, 0x198a, 0x199c, 0x19a1, - 0x19ac, 0x19bd, 0x19d7, 0x19e9, 0x19f4, 0x19fe, 0x1a05, 0x1a12, - 0x1a23, 0x1a46, 0x1a66, 0x1a85, 0x1aa2, 0x1ac0, 0x1ac7, 0x1ad2, - 0x1adb, 0x1ae7, 0x1b11, 0x1b1f, 0x1b2f, 0x1b3f, 0x1b50, 0x1b56, - 0x1b67, 0x1b73, 0x1b7d, 0x1b82, 0x1b8f, 0x1b9d, 0x1bac, 0x1bb8, - // Entry 7280 - 72BF - 0x1bd1, 0x1c06, 0x1c54, 0x1c86, 0x1cbc, 0x1cd1, 0x1ce7, 0x1d07, - 0x1d0e, 0x1d29, 0x1d47, 0x1d4e, 0x1d5b, 0x1d79, 0x1d98, 0x1da9, - 0x1dbd, 0x1dc0, 0x1dc4, 0x1dcd, 0x1dd1, 0x1dee, 0x1df6, 0x1e01, - 0x1e0d, 0x1e2c, 0x1e4a, 0x1e7e, 0x1e9e, 0x1eba, 0x1ed6, 0x1ee0, - 0x1f06, 0x1f2a, 0x1f42, 0x1f5a, 0x1f78, 0x1f7c, 0x1f8a, 0x1f90, - 0x1f96, 0x1fa2, 0x1fa7, 0x1fad, 0x1fb7, 0x1fc0, 0x1fcc, 0x1fec, - 0x2008, 0x2016, 0x2029, 0x203c, 0x204c, 0x205d, 0x2071, 0x2083, - 0x2097, 0x20a9, 0x20c1, 0x20db, 0x20f9, 0x2119, 0x213a, 0x215b, - // Entry 72C0 - 72FF - 0x216f, 0x2192, 0x219e, 0x21c5, 0x21ed, 0x2205, 0x2216, 0x2227, - 0x2233, 0x223c, 0x2249, 0x224e, 0x2254, 0x225d, 0x2277, 0x2286, - 0x229b, 0x22b0, 0x22c7, 0x22dd, 0x22f3, 0x2308, 0x231f, 0x2336, - 0x234c, 0x2361, 0x2379, 0x2391, 0x23a6, 0x23bb, 0x23d2, 0x23e8, - 0x23fe, 0x2413, 0x242a, 0x2441, 0x2457, 0x246c, 0x2484, 0x249c, - 0x24a9, 0x24ca, 0x24ee, 0x24f6, 0x250f, 0x251b, 0x251f, 0x2525, - 0x2536, 0x2550, 0x2559, 0x255d, 0x257c, 0x2589, 0x2598, 0x259e, - 0x25a8, 0x25b0, 0x25bb, 0x25d7, 0x25f3, 0x2610, 0x2629, 0x2642, - // Entry 7300 - 733F - 0x265b, 0x2671, 0x2681, 0x2691, 0x26a8, 0x26b7, 0x26d0, 0x26e1, - 0x26ee, 0x26ff, 0x2717, 0x272e, 0x2743, 0x2754, 0x2765, 0x2778, - 0x2798, 0x27c1, 0x27d8, 0x27f1, 0x2806, 0x282f, 0x2864, 0x2887, - 0x28a9, 0x28cc, 0x28ee, 0x2911, 0x2933, 0x2956, 0x2976, 0x2998, - 0x29b8, 0x29da, 0x29fa, 0x2a1c, 0x2a27, 0x2a37, 0x2a49, 0x2a62, - 0x2a69, 0x2a7a, 0x2a96, 0x2ab2, 0x2ac8, 0x2ad6, 0x2ae4, 0x2af4, - 0x2b04, 0x2b16, 0x2b1f, 0x2b34, 0x2b3d, 0x2b43, 0x2b4f, 0x2b57, - 0x2b68, 0x2b7a, 0x2b98, 0x2bad, 0x2bbf, 0x2bcf, 0x2bde, 0x2bea, - // Entry 7340 - 737F - 0x2bf0, 0x2bfb, 0x2c0e, 0x2c1b, 0x2c27, 0x2c31, 0x2c40, 0x2c4e, - 0x2c52, 0x2c5b, 0x2c63, 0x2c71, 0x2c7b, 0x2c86, 0x2c8e, 0x2c92, - 0x2c97, 0x2ca2, 0x2cb1, 0x2cc4, 0x2cd2, 0x2cda, 0x2ce2, 0x2ce9, - 0x2d13, 0x2d21, 0x2d3a, 0x2d53, 0x2d5e, 0x2d65, 0x2d78, 0x2d8e, - 0x2d99, 0x2da5, 0x2da9, 0x2dc4, 0x2dd4, 0x2de4, 0x2df3, 0x2e03, - 0x2e15, 0x2e28, 0x2e3a, 0x2e4e, 0x2e61, 0x2e75, 0x2e86, 0x2e98, - 0x2ea3, 0x2eb8, 0x2ec6, 0x2edc, 0x2eeb, 0x2f03, 0x2f17, 0x2f34, - 0x2f44, 0x2f5e, 0x2f67, 0x2f71, 0x2f7c, 0x2f8d, 0x2fa0, 0x2fa5, - // Entry 7380 - 73BF - 0x2fb2, 0x2fd1, 0x2fe7, 0x3003, 0x3030, 0x305b, 0x308f, 0x30a5, - 0x30bc, 0x30c8, 0x30e6, 0x3103, 0x3110, 0x3133, 0x314f, 0x315c, - 0x3168, 0x317b, 0x3188, 0x319c, 0x31a8, 0x31b5, 0x31c4, 0x31d0, - 0x31e4, 0x3202, 0x321f, 0x3239, 0x3263, 0x3295, 0x32a6, 0x32b2, - 0x32bc, 0x32c8, 0x32d3, 0x32e3, 0x32fc, 0x331a, 0x3337, 0x3345, - 0x3351, 0x335b, 0x3366, 0x3370, 0x337e, 0x3390, 0x33a4, 0x33af, - 0x33d2, 0x33e8, 0x33f7, 0x3403, 0x3410, 0x341a, 0x342c, 0x3442, - 0x3465, 0x347f, 0x349f, 0x34c6, 0x34dd, 0x34fe, 0x350e, 0x351d, - // Entry 73C0 - 73FF - 0x352b, 0x3541, 0x3556, 0x3566, 0x357c, 0x3595, 0x35a9, 0x35bd, - 0x35cf, 0x35e2, 0x35f6, 0x3613, 0x363b, 0x364a, 0x3662, 0x367a, - 0x3692, 0x36aa, 0x36c2, 0x36da, 0x36f9, 0x3718, 0x3737, 0x3756, - 0x3773, 0x3790, 0x37ad, 0x37ca, 0x37ed, 0x3810, 0x3833, 0x3856, - 0x386d, 0x3884, 0x389b, 0x38b2, 0x38cf, 0x38ec, 0x3909, 0x3926, - 0x3942, 0x396e, 0x3989, 0x39b4, 0x39c4, 0x39d2, 0x39e3, 0x39f3, - 0x3a0e, 0x3a2f, 0x3a48, 0x3a67, 0x3a7f, 0x3a97, 0x3ad3, 0x3b08, - 0x3b41, 0x3b5b, 0x3b7a, 0x3b9f, 0x3bb1, 0x3bcb, 0x3bd8, 0x3bed, - // Entry 7400 - 743F - 0x3bf3, 0x3bfd, 0x3c0d, 0x3c18, 0x3c28, 0x3c49, 0x3c4e, 0x3c53, - 0x3c5d, 0x3c64, 0x3c68, 0x3c70, 0x3c73, 0x3c7f, 0x3c89, 0x3c91, - 0x3c98, 0x3ca1, 0x3cac, 0x3cb6, 0x3cc9, 0x3ccd, 0x3cda, 0x3ce4, - 0x3cf7, 0x3d0b, 0x3d19, 0x3d2a, 0x3d31, 0x3d39, 0x3d49, 0x3d5b, - 0x3d6c, 0x3d7a, 0x3d7e, 0x3d85, 0x3d8e, 0x3da6, 0x3dbc, 0x3dcd, - 0x3de8, 0x3dff, 0x3e03, 0x3e10, 0x3e1e, 0x3e2f, 0x3e4d, 0x3e61, - 0x3e75, 0x3e8d, 0x3e94, 0x3e9f, 0x3ea8, 0x3eba, 0x3ec4, 0x3ed2, - 0x3ee3, 0x3eee, 0x3efb, 0x3f03, 0x3f0e, 0x3f14, 0x3f20, 0x3f26, - // Entry 7440 - 747F - 0x3f2a, 0x3f31, 0x3f41, 0x3f48, 0x3f55, 0x3f61, 0x3f7e, 0x3f8d, - 0x3fa7, 0x3fb2, 0x3fbe, 0x3fcc, 0x3fe2, 0x3fef, 0x3ffb, 0x3ffe, - 0x400e, 0x401c, 0x402c, 0x002c, 0x003d, 0x0043, 0x004b, 0x0053, - 0x0060, 0x006a, 0x0087, 0x009b, 0x00b5, 0x00c3, 0x00de, 0x00f0, - 0x0101, 0x0101, 0x010a, 0x011e, 0x012f, 0x013d, 0x0144, 0x0151, - 0x0156, 0x0156, 0x0178, 0x0191, 0x01ab, 0x01c6, 0x01e1, 0x0201, - 0x0221, 0x0243, 0x0263, 0x0285, 0x02a2, 0x02c1, 0x02e0, 0x02fc, - 0x0325, 0x0347, 0x036e, 0x0397, 0x03c0, 0x03de, 0x03f8, 0x0413, - // Entry 7480 - 74BF - 0x0430, 0x044f, 0x046e, 0x048f, 0x04a9, 0x04c5, 0x04e3, 0x0503, - 0x0527, 0x054c, 0x056c, 0x0591, 0x05ba, 0x05e0, 0x0608, 0x0630, - 0x0660, 0x0691, 0x06b0, 0x06cd, 0x06eb, 0x070d, 0x0738, 0x075e, - 0x0791, 0x07ba, 0x07e3, 0x080e, 0x082b, 0x084a, 0x0869, 0x0888, - 0x08a4, 0x08c2, 0x08e1, 0x0903, 0x0920, 0x093d, 0x095c, 0x097d, - 0x099e, 0x09ba, 0x09d8, 0x09f8, 0x0a13, 0x0a30, 0x0a4d, 0x0a67, - 0x0a80, 0x0a9c, 0x0aba, 0x0ad3, 0x0aec, 0x0b08, 0x0b22, 0x0b3d, - 0x0b60, 0x0b85, 0x0ba3, 0x0bc0, 0x0be5, 0x0c04, 0x0c1e, 0x0c39, - // Entry 74C0 - 74FF - 0x0c59, 0x0c74, 0x0c93, 0x0cae, 0x0cd2, 0x0cef, 0x0d1a, 0x0d47, - 0x0d68, 0x0d89, 0x0da6, 0x0dc4, 0x0de4, 0x0e00, 0x0e22, 0x0e40, - 0x0e60, 0x0e80, 0x0ea0, 0x0ec0, 0x0edd, 0x0eff, 0x0f24, 0x0f40, - 0x0f5a, 0x0f75, 0x0f94, 0x0faf, 0x0fce, 0x0fee, 0x03ee, 0x041a, - 0x0444, 0x0471, 0x049d, 0x04b8, 0x04d0, 0x04e1, 0x04f3, 0x050a, - 0x0526, 0x0550, 0x055c, 0x056d, 0x0588, 0x059a, 0x05ad, 0x05be, - 0x05d0, 0x05e7, 0x0603, 0x0632, 0x065d, 0x066a, 0x067c, 0x0694, - 0x06ae, 0x06df, 0x070c, 0x071a, 0x072c, 0x0744, 0x075e, 0x078a, - // Entry 7500 - 753F - 0x079a, 0x07ab, 0x07bd, 0x07cd, 0x07e2, 0x07f8, 0x0813, 0x081f, - 0x082c, 0x083a, 0x0846, 0x0853, 0x0865, 0x087c, 0x0896, 0x08b1, - 0x08ca, 0x08e4, 0x0903, 0x0927, 0x0940, 0x095a, 0x0972, 0x098b, - 0x09a9, 0x09cc, 0x09e7, 0x0a03, 0x0a1d, 0x0a38, 0x0a58, 0x0a76, - 0x0a95, 0x0aad, 0x0acf, 0x0aec, 0x0b0a, 0x0b21, 0x0b42, 0x0b6a, - 0x0b87, 0x0ba4, 0x0bc1, 0x0bdd, 0x0bf6, 0x0c15, 0x0c33, 0x0c56, - 0x0c77, 0x0c96, 0x0cb5, 0x0cd7, 0x00d7, 0x0104, 0x012f, 0x015d, - 0x018a, 0x01b8, 0x01e4, 0x0213, 0x0241, 0x026e, 0x0299, 0x02c7, - // Entry 7540 - 757F - 0x02f4, 0x02f4, 0x0324, 0x0352, 0x0383, 0x03b3, 0x03dd, 0x0405, - 0x0430, 0x045a, 0x048a, 0x04b8, 0x04e9, 0x0519, 0x054f, 0x0583, - 0x05ba, 0x05f0, 0x0621, 0x0650, 0x0682, 0x06b3, 0x06e4, 0x0713, - 0x0745, 0x0776, 0x07a5, 0x07d2, 0x0802, 0x0831, 0x0861, 0x088f, - 0x08c0, 0x08f0, 0x0925, 0x0958, 0x098e, 0x09c3, 0x09de, 0x09f7, - 0x0a13, 0x0a2e, 0x0a45, 0x0a5a, 0x0a72, 0x0a89, 0x0aa3, 0x0abb, - 0x0ad6, 0x0af0, 0x0b10, 0x0b2e, 0x0b4f, 0x0b6f, 0x0b84, 0x0b97, - 0x0bad, 0x0bc2, 0x03c2, 0x03dc, 0x03f4, 0x040f, 0x0429, 0x0444, - // Entry 7580 - 75BF - 0x045f, 0x047a, 0x0495, 0x04b0, 0x04c8, 0x00c8, 0x00ee, 0x0112, - 0x0139, 0x015f, 0x0186, 0x01ad, 0x01d4, 0x01fb, 0x021b, 0x0239, - 0x025a, 0x027a, 0x029b, 0x02bc, 0x02dd, 0x02fe, 0x0325, 0x034a, - 0x0372, 0x0399, 0x03c1, 0x03e9, 0x0411, 0x0439, 0x045f, 0x0483, - 0x04aa, 0x04d0, 0x04f7, 0x051e, 0x0545, 0x056c, 0x0597, 0x05c0, - 0x05ec, 0x0617, 0x0643, 0x066f, 0x069b, 0x06c7, 0x02c7, 0x02e3, - 0x02fd, 0x031a, 0x0336, 0x0365, 0x0392, 0x03c2, 0x03f1, 0x0412, - 0x0431, 0x0453, 0x0474, 0x048f, 0x04b1, 0x04d1, 0x04f2, 0x0515, - // Entry 75C0 - 75FF - 0x0539, 0x0559, 0x057a, 0x059b, 0x05be, 0x05e0, 0x0602, 0x062c, - 0x0657, 0x0682, 0x06ae, 0x06c9, 0x06eb, 0x02eb, 0x02fc, 0x030c, - 0x0321, 0x032a, 0x0337, 0x034d, 0x0357, 0x0363, 0x0374, 0x0380, - 0x0393, 0x03a3, 0x03b4, 0x03bd, 0x03e7, 0x03e7, 0x03fb, 0x0405, - 0x0413, 0x0430, 0x043d, 0x0447, 0x0450, 0x045d, 0x005d, 0x006b, - 0x006b, 0x0071, 0x0077, 0x0084, 0x0094, 0x0099, 0x00af, 0x00b7, - 0x00bd, 0x00ce, 0x00d7, 0x00e1, 0x00e9, 0x00e9, 0x00f6, 0x010a, - 0x011a, 0x0127, 0x012c, 0x0134, 0x0139, 0x014a, 0x015c, 0x016d, - // Entry 7600 - 763F - 0x0179, 0x018d, 0x018d, 0x0196, 0x019d, 0x01a5, 0x01aa, 0x01b0, - 0x01b6, 0x01c4, 0x01cf, 0x01e2, 0x01f3, 0x01f6, 0x0203, 0x020a, - 0x0213, 0x021b, 0x021b, 0x021f, 0x0228, 0x0230, 0x0236, 0x0242, - 0x0247, 0x024b, 0x024e, 0x0253, 0x0256, 0x025e, 0x0267, 0x026b, - 0x0272, 0x0278, 0x0282, 0x0288, 0x028d, 0x028d, 0x0299, 0x0299, - 0x02ba, 0x02db, 0x02fc, 0x031d, 0x033e, 0x035f, 0x0380, 0x03a1, - 0x03c2, 0x03e3, 0x0404, 0x0425, 0x0446, 0x0467, 0x0488, 0x04a9, - 0x04ca, 0x04eb, 0x050c, 0x052d, 0x054e, 0x056f, 0x0590, 0x05b1, - // Entry 7640 - 767F - 0x05d2, 0x05f3, 0x0614, 0x0635, 0x0656, 0x0677, 0x0698, 0x06b9, - 0x06da, 0x06fb, 0x071c, 0x073d, 0x075e, 0x077f, 0x07a0, 0x07c1, - 0x07e2, 0x0803, 0x0824, 0x0845, 0x0866, 0x0887, 0x08a8, 0x08c9, - 0x08ea, 0x090b, 0x092c, 0x094d, 0x096e, 0x098f, 0x09b0, 0x09d1, - 0x09f2, 0x0a13, 0x0a34, 0x0a55, 0x0a76, 0x0a97, 0x0ab8, 0x0ad9, - 0x0afa, 0x0b1b, 0x0b3c, 0x0b5d, 0x0b7e, 0x0b9f, 0x0bc0, 0x0be1, - 0x0c02, 0x0c23, 0x0c44, 0x0c65, 0x0c86, 0x0ca7, 0x0cc8, 0x0ce9, - 0x0d0a, 0x0d2b, 0x0d4c, 0x0d6d, 0x0d8e, 0x0daf, 0x0dd0, 0x0df1, - // Entry 7680 - 76BF - 0x0e12, 0x0e33, 0x0e54, 0x0e75, 0x0e96, 0x0eb7, 0x0ed8, 0x0ef9, - 0x0f1a, 0x0f3b, 0x0f5c, 0x0f7d, 0x0f9e, 0x0fbf, 0x0fe0, 0x1001, - 0x1022, 0x1043, 0x1064, 0x1085, 0x10a6, 0x10c7, 0x10e8, 0x1109, - 0x112a, 0x114b, 0x116c, 0x118d, 0x11ae, 0x11cf, 0x11f0, 0x1211, - 0x1232, 0x1253, 0x1274, 0x1295, 0x12b6, 0x12d7, 0x12f8, 0x1319, - 0x133a, 0x135b, 0x137c, 0x139d, 0x13be, 0x13df, 0x1400, 0x1421, - 0x1442, 0x1463, 0x1484, 0x14a5, 0x14c6, 0x14e7, 0x1508, 0x1529, - 0x154a, 0x156b, 0x158c, 0x15ad, 0x15ce, 0x15ef, 0x1610, 0x1631, - // Entry 76C0 - 76FF - 0x1652, 0x1673, 0x1694, 0x16b5, 0x16d6, 0x16f7, 0x1718, 0x1739, - 0x175a, 0x177b, 0x179c, 0x17bd, 0x17de, 0x17ff, 0x1820, 0x1841, - 0x1862, 0x1883, 0x18a4, 0x18c5, 0x18e6, 0x1907, 0x1928, 0x1949, - 0x196a, 0x198b, 0x19ac, 0x19cd, 0x19ee, 0x1a0f, 0x1a30, 0x1a51, - 0x1a72, 0x1a93, 0x1ab4, 0x1ad5, 0x1af6, 0x1b17, 0x1b38, 0x1b59, - 0x1b7a, 0x1b9b, 0x1bbc, 0x1bdd, 0x1bfe, 0x1c1f, 0x1c40, 0x1c61, - 0x1c82, 0x1ca3, 0x1cc4, 0x1ce5, 0x1d06, 0x1d27, 0x1d48, 0x1d69, - 0x1d8a, 0x1dab, 0x1dcc, 0x1ded, 0x1e0e, 0x1e2f, 0x1e50, 0x1e71, - // Entry 7700 - 773F - 0x1e92, 0x1eb3, 0x1ed4, 0x1ef5, 0x1f16, 0x1f37, 0x1f58, 0x1f79, - 0x1f9a, 0x1fbb, 0x1fdc, 0x1ffd, 0x201e, 0x203f, 0x2060, 0x2081, - 0x20a2, 0x20c3, 0x20e4, 0x2105, 0x2126, 0x2147, 0x2168, 0x2189, - 0x21aa, 0x21cb, 0x21ec, 0x220d, 0x222e, 0x224f, 0x2270, 0x2291, - 0x22b2, 0x22d3, 0x22f4, 0x2315, 0x2336, 0x2357, 0x2378, 0x2399, - 0x23ba, 0x23db, 0x23fc, 0x241d, 0x243e, 0x245f, 0x2480, 0x24a1, - 0x24c2, 0x24e3, 0x2504, 0x2525, 0x2546, 0x2567, 0x2588, 0x25a9, - 0x25ca, 0x25eb, 0x260c, 0x262d, 0x264e, 0x266f, 0x2690, 0x26b1, - // Entry 7740 - 777F - 0x26d2, 0x26f3, 0x2714, 0x2735, 0x2756, 0x2777, 0x2798, 0x27b9, - 0x27da, 0x27fb, 0x281c, 0x283d, 0x285e, 0x287f, 0x28a0, 0x28c1, - 0x28e2, 0x2903, 0x2924, 0x2945, 0x2966, 0x2987, 0x29a8, 0x29c9, - 0x29ea, 0x2a0b, 0x2a2c, 0x2a4d, 0x2a6e, 0x2a8f, 0x2ab0, 0x2ad1, - 0x2af2, 0x2b13, 0x2b34, 0x2b55, 0x2b76, 0x2b97, 0x2bb8, 0x2bd9, - 0x2bfa, 0x2c1b, 0x2c3c, 0x2c5d, 0x2c7e, 0x2c9f, 0x2cc0, 0x2ce1, - 0x2d02, 0x2d23, 0x2d44, 0x2d65, 0x2d86, 0x2da7, 0x2dc8, 0x2de9, - 0x2e0a, 0x2e2b, 0x2e4c, 0x2e6d, 0x2e8e, 0x2eaf, 0x2ed0, 0x2ef1, - // Entry 7780 - 77BF - 0x2f12, 0x2f33, 0x2f54, 0x2f75, 0x2f96, 0x2fb7, 0x2fd8, 0x2ff9, - 0x301a, 0x303b, 0x305c, 0x307d, 0x309e, 0x30bf, 0x30e0, 0x3101, - 0x3122, 0x3143, 0x3164, 0x3185, 0x31a6, 0x31c7, 0x31e8, 0x3209, - 0x322a, 0x324b, 0x326c, 0x328d, 0x32ae, 0x32cf, 0x32f0, 0x3311, - 0x3332, 0x3353, 0x3374, 0x3395, 0x33b6, 0x33d7, 0x33f8, 0x3419, - 0x343a, 0x345b, 0x347c, 0x349d, 0x34be, 0x34df, 0x3500, 0x3521, - 0x3542, 0x3563, 0x3584, 0x35a5, 0x35c6, 0x35e7, 0x3608, 0x3629, - 0x364a, 0x366b, 0x368c, 0x36ad, 0x36ce, 0x36ef, 0x3710, 0x3731, - // Entry 77C0 - 77FF - 0x3752, 0x3773, 0x3794, 0x37b5, 0x37d6, 0x37f7, 0x3818, 0x3839, - 0x385a, 0x387b, 0x389c, 0x38bd, 0x38de, 0x38ff, 0x3920, 0x3941, - 0x3962, 0x3983, 0x39a4, 0x39c5, 0x39e6, 0x3a07, 0x3a28, 0x3a49, - 0x3a6a, 0x3a8b, 0x3aac, 0x3acd, 0x3aee, 0x3b0f, 0x3b30, 0x3b51, - 0x3b72, 0x3b93, 0x3bb4, 0x3bd5, 0x3bf6, 0x3c17, 0x3c38, 0x3c59, - 0x3c7a, 0x3c9b, 0x3cbc, 0x3cdd, 0x3cfe, 0x3d1f, 0x3d40, 0x3d61, - 0x3d82, 0x3da3, 0x3dc4, 0x3de5, 0x3e06, 0x3e27, 0x3e48, 0x3e69, - 0x3e8a, 0x3eab, 0x3ecc, 0x3eed, 0x3f0e, 0x3f2f, 0x3f50, 0x3f71, - // Entry 7800 - 783F - 0x3f92, 0x3fb3, 0x3fd4, 0x3ff5, 0x4016, 0x4037, 0x4058, 0x4079, - 0x409a, 0x40bb, 0x40dc, 0x40fd, 0x411e, 0x413f, 0x4160, 0x4181, - 0x41a2, 0x41c3, 0x41e4, 0x4205, 0x4226, 0x4247, 0x4268, 0x4289, - 0x42aa, 0x42cb, 0x42ec, 0x430d, 0x432e, 0x434f, 0x4370, 0x4391, - 0x43b2, 0x43d3, 0x43f4, 0x4415, 0x4436, 0x4457, 0x4478, 0x4499, - 0x44ba, 0x44db, 0x44fc, 0x451d, 0x453e, 0x455f, 0x4580, 0x45a1, - 0x45c2, 0x45e3, 0x4604, 0x4625, 0x4646, 0x4667, 0x4688, 0x46a9, - 0x46ca, 0x46eb, 0x470c, 0x472d, 0x474e, 0x476f, 0x4790, 0x47b1, - // Entry 7840 - 787F - 0x47d2, 0x47f3, 0x4814, 0x4835, 0x4856, 0x4877, 0x0077, 0x0083, - 0x0083, 0x008c, 0x00a0, 0x00b2, 0x00c1, 0x00d0, 0x00e0, 0x00ed, - 0x00fb, 0x010f, 0x0124, 0x0130, 0x013d, 0x0146, 0x0156, 0x0163, - 0x016e, 0x017c, 0x0189, 0x0196, 0x01a5, 0x01b3, 0x01c1, 0x01ce, - 0x01dd, 0x01ec, 0x01fa, 0x0203, 0x0210, 0x0222, 0x0231, 0x0246, - 0x0257, 0x0268, 0x0282, 0x029c, 0x02b6, 0x02d0, 0x02ea, 0x0304, - 0x031e, 0x0338, 0x0352, 0x036c, 0x0386, 0x03a0, 0x03ba, 0x03d4, - 0x03ee, 0x0408, 0x0422, 0x043c, 0x0456, 0x0470, 0x048a, 0x04a4, - // Entry 7880 - 78BF - 0x04be, 0x04d8, 0x04f2, 0x050c, 0x0523, 0x0536, 0x054e, 0x0563, - 0x056f, 0x057f, 0x0597, 0x05af, 0x05c7, 0x05df, 0x05f7, 0x060f, - 0x0627, 0x063f, 0x0657, 0x066f, 0x0687, 0x069f, 0x06b7, 0x06cf, - 0x06e7, 0x06ff, 0x0717, 0x072f, 0x0747, 0x075f, 0x0777, 0x078f, - 0x07a7, 0x07bf, 0x07d7, 0x07ef, 0x0805, 0x0816, 0x082d, 0x0836, - 0x0840, 0x0040, 0x0055, 0x006a, 0x007f, 0x0094, 0x00a9, 0x00be, - 0x00d3, 0x00e8, 0x00fd, 0x0112, 0x0127, 0x013c, 0x0151, 0x0166, - 0x017b, 0x0190, 0x01a5, 0x01ba, 0x01cf, 0x01e4, 0x01f9, 0x020e, - // Entry 78C0 - 78FF - 0x0223, 0x0238, 0x024d, 0x0262, 0x0277, 0x028c, 0x02a1, 0x02b6, - 0x02cb, 0x02e0, 0x02f5, 0x030a, 0x031f, 0x0334, 0x0349, 0x035e, - 0x0373, 0x0388, 0x039d, 0x03b2, 0x03c7, 0x03dc, 0x03f1, 0x0406, - 0x041b, 0x0430, 0x0445, 0x045a, 0x046f, 0x0484, 0x0499, 0x04ae, - 0x04c3, 0x04d8, 0x04ed, 0x0502, 0x0517, 0x052c, 0x0541, 0x0556, - 0x056b, 0x0580, 0x0595, 0x05aa, 0x05bf, 0x05d4, 0x05e9, 0x05fe, - 0x0613, 0x0628, 0x063d, 0x0652, 0x0667, 0x067c, 0x0691, 0x06a6, - 0x06bb, 0x06d0, 0x06e5, 0x06fa, 0x070f, 0x0725, 0x073b, 0x0751, - // Entry 7900 - 793F - 0x0767, 0x077d, 0x0793, 0x07a9, 0x07bf, 0x07d5, 0x07eb, 0x0801, - 0x0817, 0x082d, 0x0843, 0x0859, 0x086f, 0x0885, 0x089b, 0x08b1, - 0x08c7, 0x08dd, 0x08f3, 0x0909, 0x091f, 0x0935, 0x094b, 0x0961, - 0x0977, 0x098d, 0x09a3, 0x09b9, 0x09cf, 0x09e5, 0x09fb, 0x0a11, - 0x0a27, 0x0a3d, 0x0a53, 0x0a69, 0x0a7f, 0x0a95, 0x0aab, 0x0ac1, - 0x0ad7, 0x0aed, 0x0b03, 0x0b19, 0x0b2f, 0x0b45, 0x0b5b, 0x0b71, - 0x0b87, 0x0b9d, 0x0bb3, 0x0bc9, 0x0bdf, 0x0bf5, 0x0c0b, 0x0c21, - 0x0c37, 0x0c4d, 0x0c63, 0x0c79, 0x0c8f, 0x0ca5, 0x0cbb, 0x0cd1, - // Entry 7940 - 797F - 0x0ce7, 0x0cfd, 0x0d13, 0x0d29, 0x0d3f, 0x0d55, 0x0d6b, 0x0d81, - 0x0d97, 0x0dad, 0x0dc3, 0x0dd9, 0x0def, 0x0e05, 0x0e1b, 0x0e31, - 0x0e47, 0x0e5d, 0x0e73, 0x0e89, 0x0e9f, 0x0eb5, 0x0ecb, 0x0ee1, - 0x0ef7, 0x0f0d, 0x0f23, 0x0f39, 0x0f4f, 0x0f65, 0x0f7b, 0x0f91, - 0x0fa7, 0x0fbd, 0x0fd3, 0x0fe9, 0x0fff, 0x1015, 0x102b, 0x1041, - 0x1057, 0x106d, 0x1083, 0x1099, 0x10af, 0x10c5, 0x10db, 0x10f1, - 0x1107, 0x111d, 0x1133, 0x1149, 0x115f, 0x1175, 0x118b, 0x11a1, - 0x11b7, 0x11cd, 0x11e3, 0x11f9, 0x120f, 0x1225, 0x123b, 0x1251, - // Entry 7980 - 79BF - 0x1267, 0x127d, 0x1293, 0x12a9, 0x12bf, 0x12d5, 0x12eb, 0x1301, - 0x1317, 0x132d, 0x1343, 0x1359, 0x136f, 0x1385, 0x139b, 0x13b1, - 0x13c7, 0x13dd, 0x13f3, 0x1409, 0x141f, 0x1435, 0x144b, 0x1461, - 0x1477, 0x148d, -} // Size: 62284 bytes - -const data string = ("" + // Size: 787597 bytes; the redundant, explicit parens are for https://golang.org/issue/18078 - "<" + - "Private Use>SPACEEXCLAMATION MARKQUOTATION MAR" + - "KNUMBER SIGNDOLLAR SIGNPERCENT SIGNAMPERSANDAPOSTROPHELEFT PARENTHESISRI" + - "GHT PARENTHESISASTERISKPLUS SIGNCOMMAHYPHEN-MINUSFULL STOPSOLIDUSDIGIT Z" + - "ERODIGIT ONEDIGIT TWODIGIT THREEDIGIT FOURDIGIT FIVEDIGIT SIXDIGIT SEVEN" + - "DIGIT EIGHTDIGIT NINECOLONSEMICOLONLESS-THAN SIGNEQUALS SIGNGREATER-THAN" + - " SIGNQUESTION MARKCOMMERCIAL ATLATIN CAPITAL LETTER ALATIN CAPITAL LETTE" + - "R BLATIN CAPITAL LETTER CLATIN CAPITAL LETTER DLATIN CAPITAL LETTER ELAT" + - "IN CAPITAL LETTER FLATIN CAPITAL LETTER GLATIN CAPITAL LETTER HLATIN CAP" + - "ITAL LETTER ILATIN CAPITAL LETTER JLATIN CAPITAL LETTER KLATIN CAPITAL L" + - "ETTER LLATIN CAPITAL LETTER MLATIN CAPITAL LETTER NLATIN CAPITAL LETTER " + - "OLATIN CAPITAL LETTER PLATIN CAPITAL LETTER QLATIN CAPITAL LETTER RLATIN" + - " CAPITAL LETTER SLATIN CAPITAL LETTER TLATIN CAPITAL LETTER ULATIN CAPIT" + - "AL LETTER VLATIN CAPITAL LETTER WLATIN CAPITAL LETTER XLATIN CAPITAL LET" + - "TER YLATIN CAPITAL LETTER ZLEFT SQUARE BRACKETREVERSE SOLIDUSRIGHT SQUAR" + - "E BRACKETCIRCUMFLEX ACCENTLOW LINEGRAVE ACCENTLATIN SMALL LETTER ALATIN " + - "SMALL LETTER BLATIN SMALL LETTER CLATIN SMALL LETTER DLATIN SMALL LETTER" + - " ELATIN SMALL LETTER FLATIN SMALL LETTER GLATIN SMALL LETTER HLATIN SMAL" + - "L LETTER ILATIN SMALL LETTER JLATIN SMALL LETTER KLATIN SMALL LETTER LLA" + - "TIN SMALL LETTER MLATIN SMALL LETTER NLATIN SMALL LETTER OLATIN SMALL LE" + - "TTER PLATIN SMALL LETTER QLATIN SMALL LETTER RLATIN SMALL LETTER SLATIN " + - "SMALL LETTER TLATIN SMALL LETTER ULATIN SMALL LETTER VLATIN SMALL LETTER" + - " WLATIN SMALL LETTER XLATIN SMALL LETTER YLATIN SMALL LETTER ZLEFT CURLY" + - " BRACKETVERTICAL LINERIGHT CURLY BRACKETTILDENO-BREAK SPACEINVERTED EXCL" + - "AMATION MARKCENT SIGNPOUND SIGNCURRENCY SIGNYEN SIGNBROKEN BARSECTION SI" + - "GNDIAERESISCOPYRIGHT SIGNFEMININE ORDINAL INDICATORLEFT-POINTING DOUBLE " + - "ANGLE QUOTATION MARKNOT SIGNSOFT HYPHENREGISTERED SIGNMACRONDEGREE SIGNP" + - "LUS-MINUS SIGNSUPERSCRIPT TWOSUPERSCRIPT THREEACUTE ACCENTMICRO SIGNPILC" + - "ROW SIGNMIDDLE DOTCEDILLASUPERSCRIPT ONEMASCULINE ORDINAL INDICATORRIGHT" + - "-POINTING DOUBLE ANGLE QUOTATION MARKVULGAR FRACTION ONE QUARTERVULGAR F" + - "RACTION ONE HALFVULGAR FRACTION THREE QUARTERSINVERTED QUESTION MARKLATI" + - "N CAPITAL LETTER A WITH GRAVELATIN CAPITAL LETTER A WITH ACUTELATIN CAPI" + - "TAL LETTER A WITH CIRCUMFLEXLATIN CAPITAL LETTER A WITH TILDELATIN CAPIT" + - "AL LETTER A WITH DIAERESISLATIN CAPITAL LETTER A WITH RING ABOVELATIN CA" + - "PITAL LETTER AELATIN CAPITAL LETTER C WITH CEDILLALATIN CAPITAL LETTER E" + - " WITH GRAVELATIN CAPITAL LETTER E WITH ACUTELATIN CAPITAL LETTER E WITH " + - "CIRCUMFLEXLATIN CAPITAL LETTER E WITH DIAERESISLATIN CAPITAL LETTER I WI" + - "TH GRAVELATIN CAPITAL LETTER I WITH ACUTELATIN CAPITAL LETTER I WITH CIR" + - "CUMFLEXLATIN CAPITAL LETTER I WITH DIAERESISLATIN CAPITAL LETTER ETHLATI" + - "N CAPITAL LETTER N WITH TILDELATIN CAPITAL LETTER O WITH GRAVELATIN CAPI" + - "TAL LETTER O WITH ACUTELATIN CAPITAL LETTER O WITH CIRCUMFLEXLATIN CAPIT" + - "AL LETTER O WITH TILDELATIN CAPITAL LETTER O WITH DIAERESISMULTIPLICATIO" + - "N SIGNLATIN CAPITAL LETTER O WITH STROKELATIN CAPITAL LETTER U WITH GRAV" + - "ELATIN CAPITAL LETTER U WITH ACUTELATIN CAPITAL LETTER U WITH CIRCUMFLEX" + - "LATIN CAPITAL LETTER U WITH DIAERESISLATIN CAPITAL LETTER Y WITH ACUTELA" + - "TIN CAPITAL LETTER THORNLATIN SMALL LETTER SHARP SLATIN SMALL LETTER A W" + - "ITH GRAVELATIN SMALL LETTER A WITH ACUTELATIN SMALL LETTER A WITH CIRCUM" + - "FLEXLATIN SMALL LETTER A WITH TILDELATIN SMALL LETTER A WITH DIAERESISLA" + - "TIN SMALL LETTER A WITH RING ABOVELATIN SMALL LETTER AELATIN SMALL LETTE" + - "R C WITH CEDILLALATIN SMALL LETTER E WITH GRAVELATIN SMALL LETTER E WITH" + - " ACUTELATIN SMALL LETTER E WITH CIRCUMFLEXLATIN SMALL LETTER E WITH DIAE" + - "RESISLATIN SMALL LETTER I WITH GRAVELATIN SMALL LETTER I WITH ACUTELATIN" + - " SMALL LETTER I WITH CIRCUMFLEXLATIN SMALL LETTER I WITH DIAERESISLATIN " + - "SMALL LETTER ETHLATIN SMALL LETTER N WITH TILDELATIN SMALL LETTER O WITH" + - " GRAVELATIN SMALL LETTER O WITH ACUTELATIN SMALL LETTER O WITH CIRCUMFLE" + - "XLATIN SMALL LETTER O WITH TILDELATIN SMALL LETTER O WITH DIAERESISDIVIS" + - "ION SIGNLATIN SMALL LETTER O WITH STROKELATIN SMALL LETTER U WITH GRAVEL" + - "ATIN SMALL LETTER U WITH ACUTELATIN SMALL LETTER U WITH CIRCUMFLEXLATIN " + - "SMALL LETTER U WITH DIAERESISLATIN SMALL LETTER Y WITH ACUTELATIN SMALL " + - "LETTER THORNLATIN SMALL LETTER Y WITH DIAERESISLATIN CAPITAL LETTER A WI") + ("" + - "TH MACRONLATIN SMALL LETTER A WITH MACRONLATIN CAPITAL LETTER A WITH BRE" + - "VELATIN SMALL LETTER A WITH BREVELATIN CAPITAL LETTER A WITH OGONEKLATIN" + - " SMALL LETTER A WITH OGONEKLATIN CAPITAL LETTER C WITH ACUTELATIN SMALL " + - "LETTER C WITH ACUTELATIN CAPITAL LETTER C WITH CIRCUMFLEXLATIN SMALL LET" + - "TER C WITH CIRCUMFLEXLATIN CAPITAL LETTER C WITH DOT ABOVELATIN SMALL LE" + - "TTER C WITH DOT ABOVELATIN CAPITAL LETTER C WITH CARONLATIN SMALL LETTER" + - " C WITH CARONLATIN CAPITAL LETTER D WITH CARONLATIN SMALL LETTER D WITH " + - "CARONLATIN CAPITAL LETTER D WITH STROKELATIN SMALL LETTER D WITH STROKEL" + - "ATIN CAPITAL LETTER E WITH MACRONLATIN SMALL LETTER E WITH MACRONLATIN C" + - "APITAL LETTER E WITH BREVELATIN SMALL LETTER E WITH BREVELATIN CAPITAL L" + - "ETTER E WITH DOT ABOVELATIN SMALL LETTER E WITH DOT ABOVELATIN CAPITAL L" + - "ETTER E WITH OGONEKLATIN SMALL LETTER E WITH OGONEKLATIN CAPITAL LETTER " + - "E WITH CARONLATIN SMALL LETTER E WITH CARONLATIN CAPITAL LETTER G WITH C" + - "IRCUMFLEXLATIN SMALL LETTER G WITH CIRCUMFLEXLATIN CAPITAL LETTER G WITH" + - " BREVELATIN SMALL LETTER G WITH BREVELATIN CAPITAL LETTER G WITH DOT ABO" + - "VELATIN SMALL LETTER G WITH DOT ABOVELATIN CAPITAL LETTER G WITH CEDILLA" + - "LATIN SMALL LETTER G WITH CEDILLALATIN CAPITAL LETTER H WITH CIRCUMFLEXL" + - "ATIN SMALL LETTER H WITH CIRCUMFLEXLATIN CAPITAL LETTER H WITH STROKELAT" + - "IN SMALL LETTER H WITH STROKELATIN CAPITAL LETTER I WITH TILDELATIN SMAL" + - "L LETTER I WITH TILDELATIN CAPITAL LETTER I WITH MACRONLATIN SMALL LETTE" + - "R I WITH MACRONLATIN CAPITAL LETTER I WITH BREVELATIN SMALL LETTER I WIT" + - "H BREVELATIN CAPITAL LETTER I WITH OGONEKLATIN SMALL LETTER I WITH OGONE" + - "KLATIN CAPITAL LETTER I WITH DOT ABOVELATIN SMALL LETTER DOTLESS ILATIN " + - "CAPITAL LIGATURE IJLATIN SMALL LIGATURE IJLATIN CAPITAL LETTER J WITH CI" + - "RCUMFLEXLATIN SMALL LETTER J WITH CIRCUMFLEXLATIN CAPITAL LETTER K WITH " + - "CEDILLALATIN SMALL LETTER K WITH CEDILLALATIN SMALL LETTER KRALATIN CAPI" + - "TAL LETTER L WITH ACUTELATIN SMALL LETTER L WITH ACUTELATIN CAPITAL LETT" + - "ER L WITH CEDILLALATIN SMALL LETTER L WITH CEDILLALATIN CAPITAL LETTER L" + - " WITH CARONLATIN SMALL LETTER L WITH CARONLATIN CAPITAL LETTER L WITH MI" + - "DDLE DOTLATIN SMALL LETTER L WITH MIDDLE DOTLATIN CAPITAL LETTER L WITH " + - "STROKELATIN SMALL LETTER L WITH STROKELATIN CAPITAL LETTER N WITH ACUTEL" + - "ATIN SMALL LETTER N WITH ACUTELATIN CAPITAL LETTER N WITH CEDILLALATIN S" + - "MALL LETTER N WITH CEDILLALATIN CAPITAL LETTER N WITH CARONLATIN SMALL L" + - "ETTER N WITH CARONLATIN SMALL LETTER N PRECEDED BY APOSTROPHELATIN CAPIT" + - "AL LETTER ENGLATIN SMALL LETTER ENGLATIN CAPITAL LETTER O WITH MACRONLAT" + - "IN SMALL LETTER O WITH MACRONLATIN CAPITAL LETTER O WITH BREVELATIN SMAL" + - "L LETTER O WITH BREVELATIN CAPITAL LETTER O WITH DOUBLE ACUTELATIN SMALL" + - " LETTER O WITH DOUBLE ACUTELATIN CAPITAL LIGATURE OELATIN SMALL LIGATURE" + - " OELATIN CAPITAL LETTER R WITH ACUTELATIN SMALL LETTER R WITH ACUTELATIN" + - " CAPITAL LETTER R WITH CEDILLALATIN SMALL LETTER R WITH CEDILLALATIN CAP" + - "ITAL LETTER R WITH CARONLATIN SMALL LETTER R WITH CARONLATIN CAPITAL LET" + - "TER S WITH ACUTELATIN SMALL LETTER S WITH ACUTELATIN CAPITAL LETTER S WI" + - "TH CIRCUMFLEXLATIN SMALL LETTER S WITH CIRCUMFLEXLATIN CAPITAL LETTER S " + - "WITH CEDILLALATIN SMALL LETTER S WITH CEDILLALATIN CAPITAL LETTER S WITH" + - " CARONLATIN SMALL LETTER S WITH CARONLATIN CAPITAL LETTER T WITH CEDILLA" + - "LATIN SMALL LETTER T WITH CEDILLALATIN CAPITAL LETTER T WITH CARONLATIN " + - "SMALL LETTER T WITH CARONLATIN CAPITAL LETTER T WITH STROKELATIN SMALL L" + - "ETTER T WITH STROKELATIN CAPITAL LETTER U WITH TILDELATIN SMALL LETTER U" + - " WITH TILDELATIN CAPITAL LETTER U WITH MACRONLATIN SMALL LETTER U WITH M" + - "ACRONLATIN CAPITAL LETTER U WITH BREVELATIN SMALL LETTER U WITH BREVELAT" + - "IN CAPITAL LETTER U WITH RING ABOVELATIN SMALL LETTER U WITH RING ABOVEL" + - "ATIN CAPITAL LETTER U WITH DOUBLE ACUTELATIN SMALL LETTER U WITH DOUBLE " + - "ACUTELATIN CAPITAL LETTER U WITH OGONEKLATIN SMALL LETTER U WITH OGONEKL" + - "ATIN CAPITAL LETTER W WITH CIRCUMFLEXLATIN SMALL LETTER W WITH CIRCUMFLE" + - "XLATIN CAPITAL LETTER Y WITH CIRCUMFLEXLATIN SMALL LETTER Y WITH CIRCUMF" + - "LEXLATIN CAPITAL LETTER Y WITH DIAERESISLATIN CAPITAL LETTER Z WITH ACUT" + - "ELATIN SMALL LETTER Z WITH ACUTELATIN CAPITAL LETTER Z WITH DOT ABOVELAT" + - "IN SMALL LETTER Z WITH DOT ABOVELATIN CAPITAL LETTER Z WITH CARONLATIN S" + - "MALL LETTER Z WITH CARONLATIN SMALL LETTER LONG SLATIN SMALL LETTER B WI" + - "TH STROKELATIN CAPITAL LETTER B WITH HOOKLATIN CAPITAL LETTER B WITH TOP" + - "BARLATIN SMALL LETTER B WITH TOPBARLATIN CAPITAL LETTER TONE SIXLATIN SM" + - "ALL LETTER TONE SIXLATIN CAPITAL LETTER OPEN OLATIN CAPITAL LETTER C WIT" + - "H HOOKLATIN SMALL LETTER C WITH HOOKLATIN CAPITAL LETTER AFRICAN DLATIN " + - "CAPITAL LETTER D WITH HOOKLATIN CAPITAL LETTER D WITH TOPBARLATIN SMALL ") + ("" + - "LETTER D WITH TOPBARLATIN SMALL LETTER TURNED DELTALATIN CAPITAL LETTER " + - "REVERSED ELATIN CAPITAL LETTER SCHWALATIN CAPITAL LETTER OPEN ELATIN CAP" + - "ITAL LETTER F WITH HOOKLATIN SMALL LETTER F WITH HOOKLATIN CAPITAL LETTE" + - "R G WITH HOOKLATIN CAPITAL LETTER GAMMALATIN SMALL LETTER HVLATIN CAPITA" + - "L LETTER IOTALATIN CAPITAL LETTER I WITH STROKELATIN CAPITAL LETTER K WI" + - "TH HOOKLATIN SMALL LETTER K WITH HOOKLATIN SMALL LETTER L WITH BARLATIN " + - "SMALL LETTER LAMBDA WITH STROKELATIN CAPITAL LETTER TURNED MLATIN CAPITA" + - "L LETTER N WITH LEFT HOOKLATIN SMALL LETTER N WITH LONG RIGHT LEGLATIN C" + - "APITAL LETTER O WITH MIDDLE TILDELATIN CAPITAL LETTER O WITH HORNLATIN S" + - "MALL LETTER O WITH HORNLATIN CAPITAL LETTER OILATIN SMALL LETTER OILATIN" + - " CAPITAL LETTER P WITH HOOKLATIN SMALL LETTER P WITH HOOKLATIN LETTER YR" + - "LATIN CAPITAL LETTER TONE TWOLATIN SMALL LETTER TONE TWOLATIN CAPITAL LE" + - "TTER ESHLATIN LETTER REVERSED ESH LOOPLATIN SMALL LETTER T WITH PALATAL " + - "HOOKLATIN CAPITAL LETTER T WITH HOOKLATIN SMALL LETTER T WITH HOOKLATIN " + - "CAPITAL LETTER T WITH RETROFLEX HOOKLATIN CAPITAL LETTER U WITH HORNLATI" + - "N SMALL LETTER U WITH HORNLATIN CAPITAL LETTER UPSILONLATIN CAPITAL LETT" + - "ER V WITH HOOKLATIN CAPITAL LETTER Y WITH HOOKLATIN SMALL LETTER Y WITH " + - "HOOKLATIN CAPITAL LETTER Z WITH STROKELATIN SMALL LETTER Z WITH STROKELA" + - "TIN CAPITAL LETTER EZHLATIN CAPITAL LETTER EZH REVERSEDLATIN SMALL LETTE" + - "R EZH REVERSEDLATIN SMALL LETTER EZH WITH TAILLATIN LETTER TWO WITH STRO" + - "KELATIN CAPITAL LETTER TONE FIVELATIN SMALL LETTER TONE FIVELATIN LETTER" + - " INVERTED GLOTTAL STOP WITH STROKELATIN LETTER WYNNLATIN LETTER DENTAL C" + - "LICKLATIN LETTER LATERAL CLICKLATIN LETTER ALVEOLAR CLICKLATIN LETTER RE" + - "TROFLEX CLICKLATIN CAPITAL LETTER DZ WITH CARONLATIN CAPITAL LETTER D WI" + - "TH SMALL LETTER Z WITH CARONLATIN SMALL LETTER DZ WITH CARONLATIN CAPITA" + - "L LETTER LJLATIN CAPITAL LETTER L WITH SMALL LETTER JLATIN SMALL LETTER " + - "LJLATIN CAPITAL LETTER NJLATIN CAPITAL LETTER N WITH SMALL LETTER JLATIN" + - " SMALL LETTER NJLATIN CAPITAL LETTER A WITH CARONLATIN SMALL LETTER A WI" + - "TH CARONLATIN CAPITAL LETTER I WITH CARONLATIN SMALL LETTER I WITH CARON" + - "LATIN CAPITAL LETTER O WITH CARONLATIN SMALL LETTER O WITH CARONLATIN CA" + - "PITAL LETTER U WITH CARONLATIN SMALL LETTER U WITH CARONLATIN CAPITAL LE" + - "TTER U WITH DIAERESIS AND MACRONLATIN SMALL LETTER U WITH DIAERESIS AND " + - "MACRONLATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTELATIN SMALL LETTER " + - "U WITH DIAERESIS AND ACUTELATIN CAPITAL LETTER U WITH DIAERESIS AND CARO" + - "NLATIN SMALL LETTER U WITH DIAERESIS AND CARONLATIN CAPITAL LETTER U WIT" + - "H DIAERESIS AND GRAVELATIN SMALL LETTER U WITH DIAERESIS AND GRAVELATIN " + - "SMALL LETTER TURNED ELATIN CAPITAL LETTER A WITH DIAERESIS AND MACRONLAT" + - "IN SMALL LETTER A WITH DIAERESIS AND MACRONLATIN CAPITAL LETTER A WITH D" + - "OT ABOVE AND MACRONLATIN SMALL LETTER A WITH DOT ABOVE AND MACRONLATIN C" + - "APITAL LETTER AE WITH MACRONLATIN SMALL LETTER AE WITH MACRONLATIN CAPIT" + - "AL LETTER G WITH STROKELATIN SMALL LETTER G WITH STROKELATIN CAPITAL LET" + - "TER G WITH CARONLATIN SMALL LETTER G WITH CARONLATIN CAPITAL LETTER K WI" + - "TH CARONLATIN SMALL LETTER K WITH CARONLATIN CAPITAL LETTER O WITH OGONE" + - "KLATIN SMALL LETTER O WITH OGONEKLATIN CAPITAL LETTER O WITH OGONEK AND " + - "MACRONLATIN SMALL LETTER O WITH OGONEK AND MACRONLATIN CAPITAL LETTER EZ" + - "H WITH CARONLATIN SMALL LETTER EZH WITH CARONLATIN SMALL LETTER J WITH C" + - "ARONLATIN CAPITAL LETTER DZLATIN CAPITAL LETTER D WITH SMALL LETTER ZLAT" + - "IN SMALL LETTER DZLATIN CAPITAL LETTER G WITH ACUTELATIN SMALL LETTER G " + - "WITH ACUTELATIN CAPITAL LETTER HWAIRLATIN CAPITAL LETTER WYNNLATIN CAPIT" + - "AL LETTER N WITH GRAVELATIN SMALL LETTER N WITH GRAVELATIN CAPITAL LETTE" + - "R A WITH RING ABOVE AND ACUTELATIN SMALL LETTER A WITH RING ABOVE AND AC" + - "UTELATIN CAPITAL LETTER AE WITH ACUTELATIN SMALL LETTER AE WITH ACUTELAT" + - "IN CAPITAL LETTER O WITH STROKE AND ACUTELATIN SMALL LETTER O WITH STROK" + - "E AND ACUTELATIN CAPITAL LETTER A WITH DOUBLE GRAVELATIN SMALL LETTER A " + - "WITH DOUBLE GRAVELATIN CAPITAL LETTER A WITH INVERTED BREVELATIN SMALL L" + - "ETTER A WITH INVERTED BREVELATIN CAPITAL LETTER E WITH DOUBLE GRAVELATIN" + - " SMALL LETTER E WITH DOUBLE GRAVELATIN CAPITAL LETTER E WITH INVERTED BR" + - "EVELATIN SMALL LETTER E WITH INVERTED BREVELATIN CAPITAL LETTER I WITH D" + - "OUBLE GRAVELATIN SMALL LETTER I WITH DOUBLE GRAVELATIN CAPITAL LETTER I " + - "WITH INVERTED BREVELATIN SMALL LETTER I WITH INVERTED BREVELATIN CAPITAL" + - " LETTER O WITH DOUBLE GRAVELATIN SMALL LETTER O WITH DOUBLE GRAVELATIN C" + - "APITAL LETTER O WITH INVERTED BREVELATIN SMALL LETTER O WITH INVERTED BR" + - "EVELATIN CAPITAL LETTER R WITH DOUBLE GRAVELATIN SMALL LETTER R WITH DOU" + - "BLE GRAVELATIN CAPITAL LETTER R WITH INVERTED BREVELATIN SMALL LETTER R ") + ("" + - "WITH INVERTED BREVELATIN CAPITAL LETTER U WITH DOUBLE GRAVELATIN SMALL L" + - "ETTER U WITH DOUBLE GRAVELATIN CAPITAL LETTER U WITH INVERTED BREVELATIN" + - " SMALL LETTER U WITH INVERTED BREVELATIN CAPITAL LETTER S WITH COMMA BEL" + - "OWLATIN SMALL LETTER S WITH COMMA BELOWLATIN CAPITAL LETTER T WITH COMMA" + - " BELOWLATIN SMALL LETTER T WITH COMMA BELOWLATIN CAPITAL LETTER YOGHLATI" + - "N SMALL LETTER YOGHLATIN CAPITAL LETTER H WITH CARONLATIN SMALL LETTER H" + - " WITH CARONLATIN CAPITAL LETTER N WITH LONG RIGHT LEGLATIN SMALL LETTER " + - "D WITH CURLLATIN CAPITAL LETTER OULATIN SMALL LETTER OULATIN CAPITAL LET" + - "TER Z WITH HOOKLATIN SMALL LETTER Z WITH HOOKLATIN CAPITAL LETTER A WITH" + - " DOT ABOVELATIN SMALL LETTER A WITH DOT ABOVELATIN CAPITAL LETTER E WITH" + - " CEDILLALATIN SMALL LETTER E WITH CEDILLALATIN CAPITAL LETTER O WITH DIA" + - "ERESIS AND MACRONLATIN SMALL LETTER O WITH DIAERESIS AND MACRONLATIN CAP" + - "ITAL LETTER O WITH TILDE AND MACRONLATIN SMALL LETTER O WITH TILDE AND M" + - "ACRONLATIN CAPITAL LETTER O WITH DOT ABOVELATIN SMALL LETTER O WITH DOT " + - "ABOVELATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRONLATIN SMALL LETTER " + - "O WITH DOT ABOVE AND MACRONLATIN CAPITAL LETTER Y WITH MACRONLATIN SMALL" + - " LETTER Y WITH MACRONLATIN SMALL LETTER L WITH CURLLATIN SMALL LETTER N " + - "WITH CURLLATIN SMALL LETTER T WITH CURLLATIN SMALL LETTER DOTLESS JLATIN" + - " SMALL LETTER DB DIGRAPHLATIN SMALL LETTER QP DIGRAPHLATIN CAPITAL LETTE" + - "R A WITH STROKELATIN CAPITAL LETTER C WITH STROKELATIN SMALL LETTER C WI" + - "TH STROKELATIN CAPITAL LETTER L WITH BARLATIN CAPITAL LETTER T WITH DIAG" + - "ONAL STROKELATIN SMALL LETTER S WITH SWASH TAILLATIN SMALL LETTER Z WITH" + - " SWASH TAILLATIN CAPITAL LETTER GLOTTAL STOPLATIN SMALL LETTER GLOTTAL S" + - "TOPLATIN CAPITAL LETTER B WITH STROKELATIN CAPITAL LETTER U BARLATIN CAP" + - "ITAL LETTER TURNED VLATIN CAPITAL LETTER E WITH STROKELATIN SMALL LETTER" + - " E WITH STROKELATIN CAPITAL LETTER J WITH STROKELATIN SMALL LETTER J WIT" + - "H STROKELATIN CAPITAL LETTER SMALL Q WITH HOOK TAILLATIN SMALL LETTER Q " + - "WITH HOOK TAILLATIN CAPITAL LETTER R WITH STROKELATIN SMALL LETTER R WIT" + - "H STROKELATIN CAPITAL LETTER Y WITH STROKELATIN SMALL LETTER Y WITH STRO" + - "KELATIN SMALL LETTER TURNED ALATIN SMALL LETTER ALPHALATIN SMALL LETTER " + - "TURNED ALPHALATIN SMALL LETTER B WITH HOOKLATIN SMALL LETTER OPEN OLATIN" + - " SMALL LETTER C WITH CURLLATIN SMALL LETTER D WITH TAILLATIN SMALL LETTE" + - "R D WITH HOOKLATIN SMALL LETTER REVERSED ELATIN SMALL LETTER SCHWALATIN " + - "SMALL LETTER SCHWA WITH HOOKLATIN SMALL LETTER OPEN ELATIN SMALL LETTER " + - "REVERSED OPEN ELATIN SMALL LETTER REVERSED OPEN E WITH HOOKLATIN SMALL L" + - "ETTER CLOSED REVERSED OPEN ELATIN SMALL LETTER DOTLESS J WITH STROKELATI" + - "N SMALL LETTER G WITH HOOKLATIN SMALL LETTER SCRIPT GLATIN LETTER SMALL " + - "CAPITAL GLATIN SMALL LETTER GAMMALATIN SMALL LETTER RAMS HORNLATIN SMALL" + - " LETTER TURNED HLATIN SMALL LETTER H WITH HOOKLATIN SMALL LETTER HENG WI" + - "TH HOOKLATIN SMALL LETTER I WITH STROKELATIN SMALL LETTER IOTALATIN LETT" + - "ER SMALL CAPITAL ILATIN SMALL LETTER L WITH MIDDLE TILDELATIN SMALL LETT" + - "ER L WITH BELTLATIN SMALL LETTER L WITH RETROFLEX HOOKLATIN SMALL LETTER" + - " LEZHLATIN SMALL LETTER TURNED MLATIN SMALL LETTER TURNED M WITH LONG LE" + - "GLATIN SMALL LETTER M WITH HOOKLATIN SMALL LETTER N WITH LEFT HOOKLATIN " + - "SMALL LETTER N WITH RETROFLEX HOOKLATIN LETTER SMALL CAPITAL NLATIN SMAL" + - "L LETTER BARRED OLATIN LETTER SMALL CAPITAL OELATIN SMALL LETTER CLOSED " + - "OMEGALATIN SMALL LETTER PHILATIN SMALL LETTER TURNED RLATIN SMALL LETTER" + - " TURNED R WITH LONG LEGLATIN SMALL LETTER TURNED R WITH HOOKLATIN SMALL " + - "LETTER R WITH LONG LEGLATIN SMALL LETTER R WITH TAILLATIN SMALL LETTER R" + - " WITH FISHHOOKLATIN SMALL LETTER REVERSED R WITH FISHHOOKLATIN LETTER SM" + - "ALL CAPITAL RLATIN LETTER SMALL CAPITAL INVERTED RLATIN SMALL LETTER S W" + - "ITH HOOKLATIN SMALL LETTER ESHLATIN SMALL LETTER DOTLESS J WITH STROKE A" + - "ND HOOKLATIN SMALL LETTER SQUAT REVERSED ESHLATIN SMALL LETTER ESH WITH " + - "CURLLATIN SMALL LETTER TURNED TLATIN SMALL LETTER T WITH RETROFLEX HOOKL" + - "ATIN SMALL LETTER U BARLATIN SMALL LETTER UPSILONLATIN SMALL LETTER V WI" + - "TH HOOKLATIN SMALL LETTER TURNED VLATIN SMALL LETTER TURNED WLATIN SMALL" + - " LETTER TURNED YLATIN LETTER SMALL CAPITAL YLATIN SMALL LETTER Z WITH RE" + - "TROFLEX HOOKLATIN SMALL LETTER Z WITH CURLLATIN SMALL LETTER EZHLATIN SM" + - "ALL LETTER EZH WITH CURLLATIN LETTER GLOTTAL STOPLATIN LETTER PHARYNGEAL" + - " VOICED FRICATIVELATIN LETTER INVERTED GLOTTAL STOPLATIN LETTER STRETCHE" + - "D CLATIN LETTER BILABIAL CLICKLATIN LETTER SMALL CAPITAL BLATIN SMALL LE" + - "TTER CLOSED OPEN ELATIN LETTER SMALL CAPITAL G WITH HOOKLATIN LETTER SMA" + - "LL CAPITAL HLATIN SMALL LETTER J WITH CROSSED-TAILLATIN SMALL LETTER TUR" + - "NED KLATIN LETTER SMALL CAPITAL LLATIN SMALL LETTER Q WITH HOOKLATIN LET") + ("" + - "TER GLOTTAL STOP WITH STROKELATIN LETTER REVERSED GLOTTAL STOP WITH STRO" + - "KELATIN SMALL LETTER DZ DIGRAPHLATIN SMALL LETTER DEZH DIGRAPHLATIN SMAL" + - "L LETTER DZ DIGRAPH WITH CURLLATIN SMALL LETTER TS DIGRAPHLATIN SMALL LE" + - "TTER TESH DIGRAPHLATIN SMALL LETTER TC DIGRAPH WITH CURLLATIN SMALL LETT" + - "ER FENG DIGRAPHLATIN SMALL LETTER LS DIGRAPHLATIN SMALL LETTER LZ DIGRAP" + - "HLATIN LETTER BILABIAL PERCUSSIVELATIN LETTER BIDENTAL PERCUSSIVELATIN S" + - "MALL LETTER TURNED H WITH FISHHOOKLATIN SMALL LETTER TURNED H WITH FISHH" + - "OOK AND TAILMODIFIER LETTER SMALL HMODIFIER LETTER SMALL H WITH HOOKMODI" + - "FIER LETTER SMALL JMODIFIER LETTER SMALL RMODIFIER LETTER SMALL TURNED R" + - "MODIFIER LETTER SMALL TURNED R WITH HOOKMODIFIER LETTER SMALL CAPITAL IN" + - "VERTED RMODIFIER LETTER SMALL WMODIFIER LETTER SMALL YMODIFIER LETTER PR" + - "IMEMODIFIER LETTER DOUBLE PRIMEMODIFIER LETTER TURNED COMMAMODIFIER LETT" + - "ER APOSTROPHEMODIFIER LETTER REVERSED COMMAMODIFIER LETTER RIGHT HALF RI" + - "NGMODIFIER LETTER LEFT HALF RINGMODIFIER LETTER GLOTTAL STOPMODIFIER LET" + - "TER REVERSED GLOTTAL STOPMODIFIER LETTER LEFT ARROWHEADMODIFIER LETTER R" + - "IGHT ARROWHEADMODIFIER LETTER UP ARROWHEADMODIFIER LETTER DOWN ARROWHEAD" + - "MODIFIER LETTER CIRCUMFLEX ACCENTCARONMODIFIER LETTER VERTICAL LINEMODIF" + - "IER LETTER MACRONMODIFIER LETTER ACUTE ACCENTMODIFIER LETTER GRAVE ACCEN" + - "TMODIFIER LETTER LOW VERTICAL LINEMODIFIER LETTER LOW MACRONMODIFIER LET" + - "TER LOW GRAVE ACCENTMODIFIER LETTER LOW ACUTE ACCENTMODIFIER LETTER TRIA" + - "NGULAR COLONMODIFIER LETTER HALF TRIANGULAR COLONMODIFIER LETTER CENTRED" + - " RIGHT HALF RINGMODIFIER LETTER CENTRED LEFT HALF RINGMODIFIER LETTER UP" + - " TACKMODIFIER LETTER DOWN TACKMODIFIER LETTER PLUS SIGNMODIFIER LETTER M" + - "INUS SIGNBREVEDOT ABOVERING ABOVEOGONEKSMALL TILDEDOUBLE ACUTE ACCENTMOD" + - "IFIER LETTER RHOTIC HOOKMODIFIER LETTER CROSS ACCENTMODIFIER LETTER SMAL" + - "L GAMMAMODIFIER LETTER SMALL LMODIFIER LETTER SMALL SMODIFIER LETTER SMA" + - "LL XMODIFIER LETTER SMALL REVERSED GLOTTAL STOPMODIFIER LETTER EXTRA-HIG" + - "H TONE BARMODIFIER LETTER HIGH TONE BARMODIFIER LETTER MID TONE BARMODIF" + - "IER LETTER LOW TONE BARMODIFIER LETTER EXTRA-LOW TONE BARMODIFIER LETTER" + - " YIN DEPARTING TONE MARKMODIFIER LETTER YANG DEPARTING TONE MARKMODIFIER" + - " LETTER VOICINGMODIFIER LETTER UNASPIRATEDMODIFIER LETTER DOUBLE APOSTRO" + - "PHEMODIFIER LETTER LOW DOWN ARROWHEADMODIFIER LETTER LOW UP ARROWHEADMOD" + - "IFIER LETTER LOW LEFT ARROWHEADMODIFIER LETTER LOW RIGHT ARROWHEADMODIFI" + - "ER LETTER LOW RINGMODIFIER LETTER MIDDLE GRAVE ACCENTMODIFIER LETTER MID" + - "DLE DOUBLE GRAVE ACCENTMODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENTMODIFIE" + - "R LETTER LOW TILDEMODIFIER LETTER RAISED COLONMODIFIER LETTER BEGIN HIGH" + - " TONEMODIFIER LETTER END HIGH TONEMODIFIER LETTER BEGIN LOW TONEMODIFIER" + - " LETTER END LOW TONEMODIFIER LETTER SHELFMODIFIER LETTER OPEN SHELFMODIF" + - "IER LETTER LOW LEFT ARROWCOMBINING GRAVE ACCENTCOMBINING ACUTE ACCENTCOM" + - "BINING CIRCUMFLEX ACCENTCOMBINING TILDECOMBINING MACRONCOMBINING OVERLIN" + - "ECOMBINING BREVECOMBINING DOT ABOVECOMBINING DIAERESISCOMBINING HOOK ABO" + - "VECOMBINING RING ABOVECOMBINING DOUBLE ACUTE ACCENTCOMBINING CARONCOMBIN" + - "ING VERTICAL LINE ABOVECOMBINING DOUBLE VERTICAL LINE ABOVECOMBINING DOU" + - "BLE GRAVE ACCENTCOMBINING CANDRABINDUCOMBINING INVERTED BREVECOMBINING T" + - "URNED COMMA ABOVECOMBINING COMMA ABOVECOMBINING REVERSED COMMA ABOVECOMB" + - "INING COMMA ABOVE RIGHTCOMBINING GRAVE ACCENT BELOWCOMBINING ACUTE ACCEN" + - "T BELOWCOMBINING LEFT TACK BELOWCOMBINING RIGHT TACK BELOWCOMBINING LEFT" + - " ANGLE ABOVECOMBINING HORNCOMBINING LEFT HALF RING BELOWCOMBINING UP TAC" + - "K BELOWCOMBINING DOWN TACK BELOWCOMBINING PLUS SIGN BELOWCOMBINING MINUS" + - " SIGN BELOWCOMBINING PALATALIZED HOOK BELOWCOMBINING RETROFLEX HOOK BELO" + - "WCOMBINING DOT BELOWCOMBINING DIAERESIS BELOWCOMBINING RING BELOWCOMBINI" + - "NG COMMA BELOWCOMBINING CEDILLACOMBINING OGONEKCOMBINING VERTICAL LINE B" + - "ELOWCOMBINING BRIDGE BELOWCOMBINING INVERTED DOUBLE ARCH BELOWCOMBINING " + - "CARON BELOWCOMBINING CIRCUMFLEX ACCENT BELOWCOMBINING BREVE BELOWCOMBINI" + - "NG INVERTED BREVE BELOWCOMBINING TILDE BELOWCOMBINING MACRON BELOWCOMBIN" + - "ING LOW LINECOMBINING DOUBLE LOW LINECOMBINING TILDE OVERLAYCOMBINING SH" + - "ORT STROKE OVERLAYCOMBINING LONG STROKE OVERLAYCOMBINING SHORT SOLIDUS O" + - "VERLAYCOMBINING LONG SOLIDUS OVERLAYCOMBINING RIGHT HALF RING BELOWCOMBI" + - "NING INVERTED BRIDGE BELOWCOMBINING SQUARE BELOWCOMBINING SEAGULL BELOWC" + - "OMBINING X ABOVECOMBINING VERTICAL TILDECOMBINING DOUBLE OVERLINECOMBINI" + - "NG GRAVE TONE MARKCOMBINING ACUTE TONE MARKCOMBINING GREEK PERISPOMENICO" + - "MBINING GREEK KORONISCOMBINING GREEK DIALYTIKA TONOSCOMBINING GREEK YPOG" + - "EGRAMMENICOMBINING BRIDGE ABOVECOMBINING EQUALS SIGN BELOWCOMBINING DOUB" + - "LE VERTICAL LINE BELOWCOMBINING LEFT ANGLE BELOWCOMBINING NOT TILDE ABOV") + ("" + - "ECOMBINING HOMOTHETIC ABOVECOMBINING ALMOST EQUAL TO ABOVECOMBINING LEFT" + - " RIGHT ARROW BELOWCOMBINING UPWARDS ARROW BELOWCOMBINING GRAPHEME JOINER" + - "COMBINING RIGHT ARROWHEAD ABOVECOMBINING LEFT HALF RING ABOVECOMBINING F" + - "ERMATACOMBINING X BELOWCOMBINING LEFT ARROWHEAD BELOWCOMBINING RIGHT ARR" + - "OWHEAD BELOWCOMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOWCOMBINING RI" + - "GHT HALF RING ABOVECOMBINING DOT ABOVE RIGHTCOMBINING ASTERISK BELOWCOMB" + - "INING DOUBLE RING BELOWCOMBINING ZIGZAG ABOVECOMBINING DOUBLE BREVE BELO" + - "WCOMBINING DOUBLE BREVECOMBINING DOUBLE MACRONCOMBINING DOUBLE MACRON BE" + - "LOWCOMBINING DOUBLE TILDECOMBINING DOUBLE INVERTED BREVECOMBINING DOUBLE" + - " RIGHTWARDS ARROW BELOWCOMBINING LATIN SMALL LETTER ACOMBINING LATIN SMA" + - "LL LETTER ECOMBINING LATIN SMALL LETTER ICOMBINING LATIN SMALL LETTER OC" + - "OMBINING LATIN SMALL LETTER UCOMBINING LATIN SMALL LETTER CCOMBINING LAT" + - "IN SMALL LETTER DCOMBINING LATIN SMALL LETTER HCOMBINING LATIN SMALL LET" + - "TER MCOMBINING LATIN SMALL LETTER RCOMBINING LATIN SMALL LETTER TCOMBINI" + - "NG LATIN SMALL LETTER VCOMBINING LATIN SMALL LETTER XGREEK CAPITAL LETTE" + - "R HETAGREEK SMALL LETTER HETAGREEK CAPITAL LETTER ARCHAIC SAMPIGREEK SMA" + - "LL LETTER ARCHAIC SAMPIGREEK NUMERAL SIGNGREEK LOWER NUMERAL SIGNGREEK C" + - "APITAL LETTER PAMPHYLIAN DIGAMMAGREEK SMALL LETTER PAMPHYLIAN DIGAMMAGRE" + - "EK YPOGEGRAMMENIGREEK SMALL REVERSED LUNATE SIGMA SYMBOLGREEK SMALL DOTT" + - "ED LUNATE SIGMA SYMBOLGREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOLGRE" + - "EK QUESTION MARKGREEK CAPITAL LETTER YOTGREEK TONOSGREEK DIALYTIKA TONOS" + - "GREEK CAPITAL LETTER ALPHA WITH TONOSGREEK ANO TELEIAGREEK CAPITAL LETTE" + - "R EPSILON WITH TONOSGREEK CAPITAL LETTER ETA WITH TONOSGREEK CAPITAL LET" + - "TER IOTA WITH TONOSGREEK CAPITAL LETTER OMICRON WITH TONOSGREEK CAPITAL " + - "LETTER UPSILON WITH TONOSGREEK CAPITAL LETTER OMEGA WITH TONOSGREEK SMAL" + - "L LETTER IOTA WITH DIALYTIKA AND TONOSGREEK CAPITAL LETTER ALPHAGREEK CA" + - "PITAL LETTER BETAGREEK CAPITAL LETTER GAMMAGREEK CAPITAL LETTER DELTAGRE" + - "EK CAPITAL LETTER EPSILONGREEK CAPITAL LETTER ZETAGREEK CAPITAL LETTER E" + - "TAGREEK CAPITAL LETTER THETAGREEK CAPITAL LETTER IOTAGREEK CAPITAL LETTE" + - "R KAPPAGREEK CAPITAL LETTER LAMDAGREEK CAPITAL LETTER MUGREEK CAPITAL LE" + - "TTER NUGREEK CAPITAL LETTER XIGREEK CAPITAL LETTER OMICRONGREEK CAPITAL " + - "LETTER PIGREEK CAPITAL LETTER RHOGREEK CAPITAL LETTER SIGMAGREEK CAPITAL" + - " LETTER TAUGREEK CAPITAL LETTER UPSILONGREEK CAPITAL LETTER PHIGREEK CAP" + - "ITAL LETTER CHIGREEK CAPITAL LETTER PSIGREEK CAPITAL LETTER OMEGAGREEK C" + - "APITAL LETTER IOTA WITH DIALYTIKAGREEK CAPITAL LETTER UPSILON WITH DIALY" + - "TIKAGREEK SMALL LETTER ALPHA WITH TONOSGREEK SMALL LETTER EPSILON WITH T" + - "ONOSGREEK SMALL LETTER ETA WITH TONOSGREEK SMALL LETTER IOTA WITH TONOSG" + - "REEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOSGREEK SMALL LETTER ALP" + - "HAGREEK SMALL LETTER BETAGREEK SMALL LETTER GAMMAGREEK SMALL LETTER DELT" + - "AGREEK SMALL LETTER EPSILONGREEK SMALL LETTER ZETAGREEK SMALL LETTER ETA" + - "GREEK SMALL LETTER THETAGREEK SMALL LETTER IOTAGREEK SMALL LETTER KAPPAG" + - "REEK SMALL LETTER LAMDAGREEK SMALL LETTER MUGREEK SMALL LETTER NUGREEK S" + - "MALL LETTER XIGREEK SMALL LETTER OMICRONGREEK SMALL LETTER PIGREEK SMALL" + - " LETTER RHOGREEK SMALL LETTER FINAL SIGMAGREEK SMALL LETTER SIGMAGREEK S" + - "MALL LETTER TAUGREEK SMALL LETTER UPSILONGREEK SMALL LETTER PHIGREEK SMA" + - "LL LETTER CHIGREEK SMALL LETTER PSIGREEK SMALL LETTER OMEGAGREEK SMALL L" + - "ETTER IOTA WITH DIALYTIKAGREEK SMALL LETTER UPSILON WITH DIALYTIKAGREEK " + - "SMALL LETTER OMICRON WITH TONOSGREEK SMALL LETTER UPSILON WITH TONOSGREE" + - "K SMALL LETTER OMEGA WITH TONOSGREEK CAPITAL KAI SYMBOLGREEK BETA SYMBOL" + - "GREEK THETA SYMBOLGREEK UPSILON WITH HOOK SYMBOLGREEK UPSILON WITH ACUTE" + - " AND HOOK SYMBOLGREEK UPSILON WITH DIAERESIS AND HOOK SYMBOLGREEK PHI SY" + - "MBOLGREEK PI SYMBOLGREEK KAI SYMBOLGREEK LETTER ARCHAIC KOPPAGREEK SMALL" + - " LETTER ARCHAIC KOPPAGREEK LETTER STIGMAGREEK SMALL LETTER STIGMAGREEK L" + - "ETTER DIGAMMAGREEK SMALL LETTER DIGAMMAGREEK LETTER KOPPAGREEK SMALL LET" + - "TER KOPPAGREEK LETTER SAMPIGREEK SMALL LETTER SAMPICOPTIC CAPITAL LETTER" + - " SHEICOPTIC SMALL LETTER SHEICOPTIC CAPITAL LETTER FEICOPTIC SMALL LETTE" + - "R FEICOPTIC CAPITAL LETTER KHEICOPTIC SMALL LETTER KHEICOPTIC CAPITAL LE" + - "TTER HORICOPTIC SMALL LETTER HORICOPTIC CAPITAL LETTER GANGIACOPTIC SMAL" + - "L LETTER GANGIACOPTIC CAPITAL LETTER SHIMACOPTIC SMALL LETTER SHIMACOPTI" + - "C CAPITAL LETTER DEICOPTIC SMALL LETTER DEIGREEK KAPPA SYMBOLGREEK RHO S" + - "YMBOLGREEK LUNATE SIGMA SYMBOLGREEK LETTER YOTGREEK CAPITAL THETA SYMBOL" + - "GREEK LUNATE EPSILON SYMBOLGREEK REVERSED LUNATE EPSILON SYMBOLGREEK CAP" + - "ITAL LETTER SHOGREEK SMALL LETTER SHOGREEK CAPITAL LUNATE SIGMA SYMBOLGR" + - "EEK CAPITAL LETTER SANGREEK SMALL LETTER SANGREEK RHO WITH STROKE SYMBOL") + ("" + - "GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOLGREEK CAPITAL DOTTED LUNATE SI" + - "GMA SYMBOLGREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOLCYRILLIC CAPI" + - "TAL LETTER IE WITH GRAVECYRILLIC CAPITAL LETTER IOCYRILLIC CAPITAL LETTE" + - "R DJECYRILLIC CAPITAL LETTER GJECYRILLIC CAPITAL LETTER UKRAINIAN IECYRI" + - "LLIC CAPITAL LETTER DZECYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN IC" + - "YRILLIC CAPITAL LETTER YICYRILLIC CAPITAL LETTER JECYRILLIC CAPITAL LETT" + - "ER LJECYRILLIC CAPITAL LETTER NJECYRILLIC CAPITAL LETTER TSHECYRILLIC CA" + - "PITAL LETTER KJECYRILLIC CAPITAL LETTER I WITH GRAVECYRILLIC CAPITAL LET" + - "TER SHORT UCYRILLIC CAPITAL LETTER DZHECYRILLIC CAPITAL LETTER ACYRILLIC" + - " CAPITAL LETTER BECYRILLIC CAPITAL LETTER VECYRILLIC CAPITAL LETTER GHEC" + - "YRILLIC CAPITAL LETTER DECYRILLIC CAPITAL LETTER IECYRILLIC CAPITAL LETT" + - "ER ZHECYRILLIC CAPITAL LETTER ZECYRILLIC CAPITAL LETTER ICYRILLIC CAPITA" + - "L LETTER SHORT ICYRILLIC CAPITAL LETTER KACYRILLIC CAPITAL LETTER ELCYRI" + - "LLIC CAPITAL LETTER EMCYRILLIC CAPITAL LETTER ENCYRILLIC CAPITAL LETTER " + - "OCYRILLIC CAPITAL LETTER PECYRILLIC CAPITAL LETTER ERCYRILLIC CAPITAL LE" + - "TTER ESCYRILLIC CAPITAL LETTER TECYRILLIC CAPITAL LETTER UCYRILLIC CAPIT" + - "AL LETTER EFCYRILLIC CAPITAL LETTER HACYRILLIC CAPITAL LETTER TSECYRILLI" + - "C CAPITAL LETTER CHECYRILLIC CAPITAL LETTER SHACYRILLIC CAPITAL LETTER S" + - "HCHACYRILLIC CAPITAL LETTER HARD SIGNCYRILLIC CAPITAL LETTER YERUCYRILLI" + - "C CAPITAL LETTER SOFT SIGNCYRILLIC CAPITAL LETTER ECYRILLIC CAPITAL LETT" + - "ER YUCYRILLIC CAPITAL LETTER YACYRILLIC SMALL LETTER ACYRILLIC SMALL LET" + - "TER BECYRILLIC SMALL LETTER VECYRILLIC SMALL LETTER GHECYRILLIC SMALL LE" + - "TTER DECYRILLIC SMALL LETTER IECYRILLIC SMALL LETTER ZHECYRILLIC SMALL L" + - "ETTER ZECYRILLIC SMALL LETTER ICYRILLIC SMALL LETTER SHORT ICYRILLIC SMA" + - "LL LETTER KACYRILLIC SMALL LETTER ELCYRILLIC SMALL LETTER EMCYRILLIC SMA" + - "LL LETTER ENCYRILLIC SMALL LETTER OCYRILLIC SMALL LETTER PECYRILLIC SMAL" + - "L LETTER ERCYRILLIC SMALL LETTER ESCYRILLIC SMALL LETTER TECYRILLIC SMAL" + - "L LETTER UCYRILLIC SMALL LETTER EFCYRILLIC SMALL LETTER HACYRILLIC SMALL" + - " LETTER TSECYRILLIC SMALL LETTER CHECYRILLIC SMALL LETTER SHACYRILLIC SM" + - "ALL LETTER SHCHACYRILLIC SMALL LETTER HARD SIGNCYRILLIC SMALL LETTER YER" + - "UCYRILLIC SMALL LETTER SOFT SIGNCYRILLIC SMALL LETTER ECYRILLIC SMALL LE" + - "TTER YUCYRILLIC SMALL LETTER YACYRILLIC SMALL LETTER IE WITH GRAVECYRILL" + - "IC SMALL LETTER IOCYRILLIC SMALL LETTER DJECYRILLIC SMALL LETTER GJECYRI" + - "LLIC SMALL LETTER UKRAINIAN IECYRILLIC SMALL LETTER DZECYRILLIC SMALL LE" + - "TTER BYELORUSSIAN-UKRAINIAN ICYRILLIC SMALL LETTER YICYRILLIC SMALL LETT" + - "ER JECYRILLIC SMALL LETTER LJECYRILLIC SMALL LETTER NJECYRILLIC SMALL LE" + - "TTER TSHECYRILLIC SMALL LETTER KJECYRILLIC SMALL LETTER I WITH GRAVECYRI" + - "LLIC SMALL LETTER SHORT UCYRILLIC SMALL LETTER DZHECYRILLIC CAPITAL LETT" + - "ER OMEGACYRILLIC SMALL LETTER OMEGACYRILLIC CAPITAL LETTER YATCYRILLIC S" + - "MALL LETTER YATCYRILLIC CAPITAL LETTER IOTIFIED ECYRILLIC SMALL LETTER I" + - "OTIFIED ECYRILLIC CAPITAL LETTER LITTLE YUSCYRILLIC SMALL LETTER LITTLE " + - "YUSCYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUSCYRILLIC SMALL LETTER IOTI" + - "FIED LITTLE YUSCYRILLIC CAPITAL LETTER BIG YUSCYRILLIC SMALL LETTER BIG " + - "YUSCYRILLIC CAPITAL LETTER IOTIFIED BIG YUSCYRILLIC SMALL LETTER IOTIFIE" + - "D BIG YUSCYRILLIC CAPITAL LETTER KSICYRILLIC SMALL LETTER KSICYRILLIC CA" + - "PITAL LETTER PSICYRILLIC SMALL LETTER PSICYRILLIC CAPITAL LETTER FITACYR" + - "ILLIC SMALL LETTER FITACYRILLIC CAPITAL LETTER IZHITSACYRILLIC SMALL LET" + - "TER IZHITSACYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENTCYRIL" + - "LIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENTCYRILLIC CAPITAL LETTER" + - " UKCYRILLIC SMALL LETTER UKCYRILLIC CAPITAL LETTER ROUND OMEGACYRILLIC S" + - "MALL LETTER ROUND OMEGACYRILLIC CAPITAL LETTER OMEGA WITH TITLOCYRILLIC " + - "SMALL LETTER OMEGA WITH TITLOCYRILLIC CAPITAL LETTER OTCYRILLIC SMALL LE" + - "TTER OTCYRILLIC CAPITAL LETTER KOPPACYRILLIC SMALL LETTER KOPPACYRILLIC " + - "THOUSANDS SIGNCOMBINING CYRILLIC TITLOCOMBINING CYRILLIC PALATALIZATIONC" + - "OMBINING CYRILLIC DASIA PNEUMATACOMBINING CYRILLIC PSILI PNEUMATACOMBINI" + - "NG CYRILLIC POKRYTIECOMBINING CYRILLIC HUNDRED THOUSANDS SIGNCOMBINING C" + - "YRILLIC MILLIONS SIGNCYRILLIC CAPITAL LETTER SHORT I WITH TAILCYRILLIC S" + - "MALL LETTER SHORT I WITH TAILCYRILLIC CAPITAL LETTER SEMISOFT SIGNCYRILL" + - "IC SMALL LETTER SEMISOFT SIGNCYRILLIC CAPITAL LETTER ER WITH TICKCYRILLI" + - "C SMALL LETTER ER WITH TICKCYRILLIC CAPITAL LETTER GHE WITH UPTURNCYRILL" + - "IC SMALL LETTER GHE WITH UPTURNCYRILLIC CAPITAL LETTER GHE WITH STROKECY" + - "RILLIC SMALL LETTER GHE WITH STROKECYRILLIC CAPITAL LETTER GHE WITH MIDD" + - "LE HOOKCYRILLIC SMALL LETTER GHE WITH MIDDLE HOOKCYRILLIC CAPITAL LETTER" + - " ZHE WITH DESCENDERCYRILLIC SMALL LETTER ZHE WITH DESCENDERCYRILLIC CAPI") + ("" + - "TAL LETTER ZE WITH DESCENDERCYRILLIC SMALL LETTER ZE WITH DESCENDERCYRIL" + - "LIC CAPITAL LETTER KA WITH DESCENDERCYRILLIC SMALL LETTER KA WITH DESCEN" + - "DERCYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKECYRILLIC SMALL LETTER " + - "KA WITH VERTICAL STROKECYRILLIC CAPITAL LETTER KA WITH STROKECYRILLIC SM" + - "ALL LETTER KA WITH STROKECYRILLIC CAPITAL LETTER BASHKIR KACYRILLIC SMAL" + - "L LETTER BASHKIR KACYRILLIC CAPITAL LETTER EN WITH DESCENDERCYRILLIC SMA" + - "LL LETTER EN WITH DESCENDERCYRILLIC CAPITAL LIGATURE EN GHECYRILLIC SMAL" + - "L LIGATURE EN GHECYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOKCYRILLIC SMA" + - "LL LETTER PE WITH MIDDLE HOOKCYRILLIC CAPITAL LETTER ABKHASIAN HACYRILLI" + - "C SMALL LETTER ABKHASIAN HACYRILLIC CAPITAL LETTER ES WITH DESCENDERCYRI" + - "LLIC SMALL LETTER ES WITH DESCENDERCYRILLIC CAPITAL LETTER TE WITH DESCE" + - "NDERCYRILLIC SMALL LETTER TE WITH DESCENDERCYRILLIC CAPITAL LETTER STRAI" + - "GHT UCYRILLIC SMALL LETTER STRAIGHT UCYRILLIC CAPITAL LETTER STRAIGHT U " + - "WITH STROKECYRILLIC SMALL LETTER STRAIGHT U WITH STROKECYRILLIC CAPITAL " + - "LETTER HA WITH DESCENDERCYRILLIC SMALL LETTER HA WITH DESCENDERCYRILLIC " + - "CAPITAL LIGATURE TE TSECYRILLIC SMALL LIGATURE TE TSECYRILLIC CAPITAL LE" + - "TTER CHE WITH DESCENDERCYRILLIC SMALL LETTER CHE WITH DESCENDERCYRILLIC " + - "CAPITAL LETTER CHE WITH VERTICAL STROKECYRILLIC SMALL LETTER CHE WITH VE" + - "RTICAL STROKECYRILLIC CAPITAL LETTER SHHACYRILLIC SMALL LETTER SHHACYRIL" + - "LIC CAPITAL LETTER ABKHASIAN CHECYRILLIC SMALL LETTER ABKHASIAN CHECYRIL" + - "LIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDERCYRILLIC SMALL LETTER ABK" + - "HASIAN CHE WITH DESCENDERCYRILLIC LETTER PALOCHKACYRILLIC CAPITAL LETTER" + - " ZHE WITH BREVECYRILLIC SMALL LETTER ZHE WITH BREVECYRILLIC CAPITAL LETT" + - "ER KA WITH HOOKCYRILLIC SMALL LETTER KA WITH HOOKCYRILLIC CAPITAL LETTER" + - " EL WITH TAILCYRILLIC SMALL LETTER EL WITH TAILCYRILLIC CAPITAL LETTER E" + - "N WITH HOOKCYRILLIC SMALL LETTER EN WITH HOOKCYRILLIC CAPITAL LETTER EN " + - "WITH TAILCYRILLIC SMALL LETTER EN WITH TAILCYRILLIC CAPITAL LETTER KHAKA" + - "SSIAN CHECYRILLIC SMALL LETTER KHAKASSIAN CHECYRILLIC CAPITAL LETTER EM " + - "WITH TAILCYRILLIC SMALL LETTER EM WITH TAILCYRILLIC SMALL LETTER PALOCHK" + - "ACYRILLIC CAPITAL LETTER A WITH BREVECYRILLIC SMALL LETTER A WITH BREVEC" + - "YRILLIC CAPITAL LETTER A WITH DIAERESISCYRILLIC SMALL LETTER A WITH DIAE" + - "RESISCYRILLIC CAPITAL LIGATURE A IECYRILLIC SMALL LIGATURE A IECYRILLIC " + - "CAPITAL LETTER IE WITH BREVECYRILLIC SMALL LETTER IE WITH BREVECYRILLIC " + - "CAPITAL LETTER SCHWACYRILLIC SMALL LETTER SCHWACYRILLIC CAPITAL LETTER S" + - "CHWA WITH DIAERESISCYRILLIC SMALL LETTER SCHWA WITH DIAERESISCYRILLIC CA" + - "PITAL LETTER ZHE WITH DIAERESISCYRILLIC SMALL LETTER ZHE WITH DIAERESISC" + - "YRILLIC CAPITAL LETTER ZE WITH DIAERESISCYRILLIC SMALL LETTER ZE WITH DI" + - "AERESISCYRILLIC CAPITAL LETTER ABKHASIAN DZECYRILLIC SMALL LETTER ABKHAS" + - "IAN DZECYRILLIC CAPITAL LETTER I WITH MACRONCYRILLIC SMALL LETTER I WITH" + - " MACRONCYRILLIC CAPITAL LETTER I WITH DIAERESISCYRILLIC SMALL LETTER I W" + - "ITH DIAERESISCYRILLIC CAPITAL LETTER O WITH DIAERESISCYRILLIC SMALL LETT" + - "ER O WITH DIAERESISCYRILLIC CAPITAL LETTER BARRED OCYRILLIC SMALL LETTER" + - " BARRED OCYRILLIC CAPITAL LETTER BARRED O WITH DIAERESISCYRILLIC SMALL L" + - "ETTER BARRED O WITH DIAERESISCYRILLIC CAPITAL LETTER E WITH DIAERESISCYR" + - "ILLIC SMALL LETTER E WITH DIAERESISCYRILLIC CAPITAL LETTER U WITH MACRON" + - "CYRILLIC SMALL LETTER U WITH MACRONCYRILLIC CAPITAL LETTER U WITH DIAERE" + - "SISCYRILLIC SMALL LETTER U WITH DIAERESISCYRILLIC CAPITAL LETTER U WITH " + - "DOUBLE ACUTECYRILLIC SMALL LETTER U WITH DOUBLE ACUTECYRILLIC CAPITAL LE" + - "TTER CHE WITH DIAERESISCYRILLIC SMALL LETTER CHE WITH DIAERESISCYRILLIC " + - "CAPITAL LETTER GHE WITH DESCENDERCYRILLIC SMALL LETTER GHE WITH DESCENDE" + - "RCYRILLIC CAPITAL LETTER YERU WITH DIAERESISCYRILLIC SMALL LETTER YERU W" + - "ITH DIAERESISCYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOKCYRILLIC SM" + - "ALL LETTER GHE WITH STROKE AND HOOKCYRILLIC CAPITAL LETTER HA WITH HOOKC" + - "YRILLIC SMALL LETTER HA WITH HOOKCYRILLIC CAPITAL LETTER HA WITH STROKEC" + - "YRILLIC SMALL LETTER HA WITH STROKECYRILLIC CAPITAL LETTER KOMI DECYRILL" + - "IC SMALL LETTER KOMI DECYRILLIC CAPITAL LETTER KOMI DJECYRILLIC SMALL LE" + - "TTER KOMI DJECYRILLIC CAPITAL LETTER KOMI ZJECYRILLIC SMALL LETTER KOMI " + - "ZJECYRILLIC CAPITAL LETTER KOMI DZJECYRILLIC SMALL LETTER KOMI DZJECYRIL" + - "LIC CAPITAL LETTER KOMI LJECYRILLIC SMALL LETTER KOMI LJECYRILLIC CAPITA" + - "L LETTER KOMI NJECYRILLIC SMALL LETTER KOMI NJECYRILLIC CAPITAL LETTER K" + - "OMI SJECYRILLIC SMALL LETTER KOMI SJECYRILLIC CAPITAL LETTER KOMI TJECYR" + - "ILLIC SMALL LETTER KOMI TJECYRILLIC CAPITAL LETTER REVERSED ZECYRILLIC S" + - "MALL LETTER REVERSED ZECYRILLIC CAPITAL LETTER EL WITH HOOKCYRILLIC SMAL" + - "L LETTER EL WITH HOOKCYRILLIC CAPITAL LETTER LHACYRILLIC SMALL LETTER LH") + ("" + - "ACYRILLIC CAPITAL LETTER RHACYRILLIC SMALL LETTER RHACYRILLIC CAPITAL LE" + - "TTER YAECYRILLIC SMALL LETTER YAECYRILLIC CAPITAL LETTER QACYRILLIC SMAL" + - "L LETTER QACYRILLIC CAPITAL LETTER WECYRILLIC SMALL LETTER WECYRILLIC CA" + - "PITAL LETTER ALEUT KACYRILLIC SMALL LETTER ALEUT KACYRILLIC CAPITAL LETT" + - "ER EL WITH MIDDLE HOOKCYRILLIC SMALL LETTER EL WITH MIDDLE HOOKCYRILLIC " + - "CAPITAL LETTER EN WITH MIDDLE HOOKCYRILLIC SMALL LETTER EN WITH MIDDLE H" + - "OOKCYRILLIC CAPITAL LETTER PE WITH DESCENDERCYRILLIC SMALL LETTER PE WIT" + - "H DESCENDERCYRILLIC CAPITAL LETTER SHHA WITH DESCENDERCYRILLIC SMALL LET" + - "TER SHHA WITH DESCENDERCYRILLIC CAPITAL LETTER EN WITH LEFT HOOKCYRILLIC" + - " SMALL LETTER EN WITH LEFT HOOKCYRILLIC CAPITAL LETTER DZZHECYRILLIC SMA" + - "LL LETTER DZZHECYRILLIC CAPITAL LETTER DCHECYRILLIC SMALL LETTER DCHECYR" + - "ILLIC CAPITAL LETTER EL WITH DESCENDERCYRILLIC SMALL LETTER EL WITH DESC" + - "ENDERARMENIAN CAPITAL LETTER AYBARMENIAN CAPITAL LETTER BENARMENIAN CAPI" + - "TAL LETTER GIMARMENIAN CAPITAL LETTER DAARMENIAN CAPITAL LETTER ECHARMEN" + - "IAN CAPITAL LETTER ZAARMENIAN CAPITAL LETTER EHARMENIAN CAPITAL LETTER E" + - "TARMENIAN CAPITAL LETTER TOARMENIAN CAPITAL LETTER ZHEARMENIAN CAPITAL L" + - "ETTER INIARMENIAN CAPITAL LETTER LIWNARMENIAN CAPITAL LETTER XEHARMENIAN" + - " CAPITAL LETTER CAARMENIAN CAPITAL LETTER KENARMENIAN CAPITAL LETTER HOA" + - "RMENIAN CAPITAL LETTER JAARMENIAN CAPITAL LETTER GHADARMENIAN CAPITAL LE" + - "TTER CHEHARMENIAN CAPITAL LETTER MENARMENIAN CAPITAL LETTER YIARMENIAN C" + - "APITAL LETTER NOWARMENIAN CAPITAL LETTER SHAARMENIAN CAPITAL LETTER VOAR" + - "MENIAN CAPITAL LETTER CHAARMENIAN CAPITAL LETTER PEHARMENIAN CAPITAL LET" + - "TER JHEHARMENIAN CAPITAL LETTER RAARMENIAN CAPITAL LETTER SEHARMENIAN CA" + - "PITAL LETTER VEWARMENIAN CAPITAL LETTER TIWNARMENIAN CAPITAL LETTER REHA" + - "RMENIAN CAPITAL LETTER COARMENIAN CAPITAL LETTER YIWNARMENIAN CAPITAL LE" + - "TTER PIWRARMENIAN CAPITAL LETTER KEHARMENIAN CAPITAL LETTER OHARMENIAN C" + - "APITAL LETTER FEHARMENIAN MODIFIER LETTER LEFT HALF RINGARMENIAN APOSTRO" + - "PHEARMENIAN EMPHASIS MARKARMENIAN EXCLAMATION MARKARMENIAN COMMAARMENIAN" + - " QUESTION MARKARMENIAN ABBREVIATION MARKARMENIAN SMALL LETTER AYBARMENIA" + - "N SMALL LETTER BENARMENIAN SMALL LETTER GIMARMENIAN SMALL LETTER DAARMEN" + - "IAN SMALL LETTER ECHARMENIAN SMALL LETTER ZAARMENIAN SMALL LETTER EHARME" + - "NIAN SMALL LETTER ETARMENIAN SMALL LETTER TOARMENIAN SMALL LETTER ZHEARM" + - "ENIAN SMALL LETTER INIARMENIAN SMALL LETTER LIWNARMENIAN SMALL LETTER XE" + - "HARMENIAN SMALL LETTER CAARMENIAN SMALL LETTER KENARMENIAN SMALL LETTER " + - "HOARMENIAN SMALL LETTER JAARMENIAN SMALL LETTER GHADARMENIAN SMALL LETTE" + - "R CHEHARMENIAN SMALL LETTER MENARMENIAN SMALL LETTER YIARMENIAN SMALL LE" + - "TTER NOWARMENIAN SMALL LETTER SHAARMENIAN SMALL LETTER VOARMENIAN SMALL " + - "LETTER CHAARMENIAN SMALL LETTER PEHARMENIAN SMALL LETTER JHEHARMENIAN SM" + - "ALL LETTER RAARMENIAN SMALL LETTER SEHARMENIAN SMALL LETTER VEWARMENIAN " + - "SMALL LETTER TIWNARMENIAN SMALL LETTER REHARMENIAN SMALL LETTER COARMENI" + - "AN SMALL LETTER YIWNARMENIAN SMALL LETTER PIWRARMENIAN SMALL LETTER KEHA" + - "RMENIAN SMALL LETTER OHARMENIAN SMALL LETTER FEHARMENIAN SMALL LIGATURE " + - "ECH YIWNARMENIAN FULL STOPARMENIAN HYPHENRIGHT-FACING ARMENIAN ETERNITY " + - "SIGNLEFT-FACING ARMENIAN ETERNITY SIGNARMENIAN DRAM SIGNHEBREW ACCENT ET" + - "NAHTAHEBREW ACCENT SEGOLHEBREW ACCENT SHALSHELETHEBREW ACCENT ZAQEF QATA" + - "NHEBREW ACCENT ZAQEF GADOLHEBREW ACCENT TIPEHAHEBREW ACCENT REVIAHEBREW " + - "ACCENT ZARQAHEBREW ACCENT PASHTAHEBREW ACCENT YETIVHEBREW ACCENT TEVIRHE" + - "BREW ACCENT GERESHHEBREW ACCENT GERESH MUQDAMHEBREW ACCENT GERSHAYIMHEBR" + - "EW ACCENT QARNEY PARAHEBREW ACCENT TELISHA GEDOLAHEBREW ACCENT PAZERHEBR" + - "EW ACCENT ATNAH HAFUKHHEBREW ACCENT MUNAHHEBREW ACCENT MAHAPAKHHEBREW AC" + - "CENT MERKHAHEBREW ACCENT MERKHA KEFULAHEBREW ACCENT DARGAHEBREW ACCENT Q" + - "ADMAHEBREW ACCENT TELISHA QETANAHEBREW ACCENT YERAH BEN YOMOHEBREW ACCEN" + - "T OLEHEBREW ACCENT ILUYHEBREW ACCENT DEHIHEBREW ACCENT ZINORHEBREW MARK " + - "MASORA CIRCLEHEBREW POINT SHEVAHEBREW POINT HATAF SEGOLHEBREW POINT HATA" + - "F PATAHHEBREW POINT HATAF QAMATSHEBREW POINT HIRIQHEBREW POINT TSEREHEBR" + - "EW POINT SEGOLHEBREW POINT PATAHHEBREW POINT QAMATSHEBREW POINT HOLAMHEB" + - "REW POINT HOLAM HASER FOR VAVHEBREW POINT QUBUTSHEBREW POINT DAGESH OR M" + - "APIQHEBREW POINT METEGHEBREW PUNCTUATION MAQAFHEBREW POINT RAFEHEBREW PU" + - "NCTUATION PASEQHEBREW POINT SHIN DOTHEBREW POINT SIN DOTHEBREW PUNCTUATI" + - "ON SOF PASUQHEBREW MARK UPPER DOTHEBREW MARK LOWER DOTHEBREW PUNCTUATION" + - " NUN HAFUKHAHEBREW POINT QAMATS QATANHEBREW LETTER ALEFHEBREW LETTER BET" + - "HEBREW LETTER GIMELHEBREW LETTER DALETHEBREW LETTER HEHEBREW LETTER VAVH" + - "EBREW LETTER ZAYINHEBREW LETTER HETHEBREW LETTER TETHEBREW LETTER YODHEB" + - "REW LETTER FINAL KAFHEBREW LETTER KAFHEBREW LETTER LAMEDHEBREW LETTER FI") + ("" + - "NAL MEMHEBREW LETTER MEMHEBREW LETTER FINAL NUNHEBREW LETTER NUNHEBREW L" + - "ETTER SAMEKHHEBREW LETTER AYINHEBREW LETTER FINAL PEHEBREW LETTER PEHEBR" + - "EW LETTER FINAL TSADIHEBREW LETTER TSADIHEBREW LETTER QOFHEBREW LETTER R" + - "ESHHEBREW LETTER SHINHEBREW LETTER TAVHEBREW LIGATURE YIDDISH DOUBLE VAV" + - "HEBREW LIGATURE YIDDISH VAV YODHEBREW LIGATURE YIDDISH DOUBLE YODHEBREW " + - "PUNCTUATION GERESHHEBREW PUNCTUATION GERSHAYIMARABIC NUMBER SIGNARABIC S" + - "IGN SANAHARABIC FOOTNOTE MARKERARABIC SIGN SAFHAARABIC SIGN SAMVATARABIC" + - " NUMBER MARK ABOVEARABIC-INDIC CUBE ROOTARABIC-INDIC FOURTH ROOTARABIC R" + - "AYARABIC-INDIC PER MILLE SIGNARABIC-INDIC PER TEN THOUSAND SIGNAFGHANI S" + - "IGNARABIC COMMAARABIC DATE SEPARATORARABIC POETIC VERSE SIGNARABIC SIGN " + - "MISRAARABIC SIGN SALLALLAHOU ALAYHE WASSALLAMARABIC SIGN ALAYHE ASSALLAM" + - "ARABIC SIGN RAHMATULLAH ALAYHEARABIC SIGN RADI ALLAHOU ANHUARABIC SIGN T" + - "AKHALLUSARABIC SMALL HIGH TAHARABIC SMALL HIGH LIGATURE ALEF WITH LAM WI" + - "TH YEHARABIC SMALL HIGH ZAINARABIC SMALL FATHAARABIC SMALL DAMMAARABIC S" + - "MALL KASRAARABIC SEMICOLONARABIC LETTER MARKARABIC TRIPLE DOT PUNCTUATIO" + - "N MARKARABIC QUESTION MARKARABIC LETTER KASHMIRI YEHARABIC LETTER HAMZAA" + - "RABIC LETTER ALEF WITH MADDA ABOVEARABIC LETTER ALEF WITH HAMZA ABOVEARA" + - "BIC LETTER WAW WITH HAMZA ABOVEARABIC LETTER ALEF WITH HAMZA BELOWARABIC" + - " LETTER YEH WITH HAMZA ABOVEARABIC LETTER ALEFARABIC LETTER BEHARABIC LE" + - "TTER TEH MARBUTAARABIC LETTER TEHARABIC LETTER THEHARABIC LETTER JEEMARA" + - "BIC LETTER HAHARABIC LETTER KHAHARABIC LETTER DALARABIC LETTER THALARABI" + - "C LETTER REHARABIC LETTER ZAINARABIC LETTER SEENARABIC LETTER SHEENARABI" + - "C LETTER SADARABIC LETTER DADARABIC LETTER TAHARABIC LETTER ZAHARABIC LE" + - "TTER AINARABIC LETTER GHAINARABIC LETTER KEHEH WITH TWO DOTS ABOVEARABIC" + - " LETTER KEHEH WITH THREE DOTS BELOWARABIC LETTER FARSI YEH WITH INVERTED" + - " VARABIC LETTER FARSI YEH WITH TWO DOTS ABOVEARABIC LETTER FARSI YEH WIT" + - "H THREE DOTS ABOVEARABIC TATWEELARABIC LETTER FEHARABIC LETTER QAFARABIC" + - " LETTER KAFARABIC LETTER LAMARABIC LETTER MEEMARABIC LETTER NOONARABIC L" + - "ETTER HEHARABIC LETTER WAWARABIC LETTER ALEF MAKSURAARABIC LETTER YEHARA" + - "BIC FATHATANARABIC DAMMATANARABIC KASRATANARABIC FATHAARABIC DAMMAARABIC" + - " KASRAARABIC SHADDAARABIC SUKUNARABIC MADDAH ABOVEARABIC HAMZA ABOVEARAB" + - "IC HAMZA BELOWARABIC SUBSCRIPT ALEFARABIC INVERTED DAMMAARABIC MARK NOON" + - " GHUNNAARABIC ZWARAKAYARABIC VOWEL SIGN SMALL V ABOVEARABIC VOWEL SIGN I" + - "NVERTED SMALL V ABOVEARABIC VOWEL SIGN DOT BELOWARABIC REVERSED DAMMAARA" + - "BIC FATHA WITH TWO DOTSARABIC WAVY HAMZA BELOWARABIC-INDIC DIGIT ZEROARA" + - "BIC-INDIC DIGIT ONEARABIC-INDIC DIGIT TWOARABIC-INDIC DIGIT THREEARABIC-" + - "INDIC DIGIT FOURARABIC-INDIC DIGIT FIVEARABIC-INDIC DIGIT SIXARABIC-INDI" + - "C DIGIT SEVENARABIC-INDIC DIGIT EIGHTARABIC-INDIC DIGIT NINEARABIC PERCE" + - "NT SIGNARABIC DECIMAL SEPARATORARABIC THOUSANDS SEPARATORARABIC FIVE POI" + - "NTED STARARABIC LETTER DOTLESS BEHARABIC LETTER DOTLESS QAFARABIC LETTER" + - " SUPERSCRIPT ALEFARABIC LETTER ALEF WASLAARABIC LETTER ALEF WITH WAVY HA" + - "MZA ABOVEARABIC LETTER ALEF WITH WAVY HAMZA BELOWARABIC LETTER HIGH HAMZ" + - "AARABIC LETTER HIGH HAMZA ALEFARABIC LETTER HIGH HAMZA WAWARABIC LETTER " + - "U WITH HAMZA ABOVEARABIC LETTER HIGH HAMZA YEHARABIC LETTER TTEHARABIC L" + - "ETTER TTEHEHARABIC LETTER BEEHARABIC LETTER TEH WITH RINGARABIC LETTER T" + - "EH WITH THREE DOTS ABOVE DOWNWARDSARABIC LETTER PEHARABIC LETTER TEHEHAR" + - "ABIC LETTER BEHEHARABIC LETTER HAH WITH HAMZA ABOVEARABIC LETTER HAH WIT" + - "H TWO DOTS VERTICAL ABOVEARABIC LETTER NYEHARABIC LETTER DYEHARABIC LETT" + - "ER HAH WITH THREE DOTS ABOVEARABIC LETTER TCHEHARABIC LETTER TCHEHEHARAB" + - "IC LETTER DDALARABIC LETTER DAL WITH RINGARABIC LETTER DAL WITH DOT BELO" + - "WARABIC LETTER DAL WITH DOT BELOW AND SMALL TAHARABIC LETTER DAHALARABIC" + - " LETTER DDAHALARABIC LETTER DULARABIC LETTER DAL WITH THREE DOTS ABOVE D" + - "OWNWARDSARABIC LETTER DAL WITH FOUR DOTS ABOVEARABIC LETTER RREHARABIC L" + - "ETTER REH WITH SMALL VARABIC LETTER REH WITH RINGARABIC LETTER REH WITH " + - "DOT BELOWARABIC LETTER REH WITH SMALL V BELOWARABIC LETTER REH WITH DOT " + - "BELOW AND DOT ABOVEARABIC LETTER REH WITH TWO DOTS ABOVEARABIC LETTER JE" + - "HARABIC LETTER REH WITH FOUR DOTS ABOVEARABIC LETTER SEEN WITH DOT BELOW" + - " AND DOT ABOVEARABIC LETTER SEEN WITH THREE DOTS BELOWARABIC LETTER SEEN" + - " WITH THREE DOTS BELOW AND THREE DOTS ABOVEARABIC LETTER SAD WITH TWO DO" + - "TS BELOWARABIC LETTER SAD WITH THREE DOTS ABOVEARABIC LETTER TAH WITH TH" + - "REE DOTS ABOVEARABIC LETTER AIN WITH THREE DOTS ABOVEARABIC LETTER DOTLE" + - "SS FEHARABIC LETTER FEH WITH DOT MOVED BELOWARABIC LETTER FEH WITH DOT B" + - "ELOWARABIC LETTER VEHARABIC LETTER FEH WITH THREE DOTS BELOWARABIC LETTE" + - "R PEHEHARABIC LETTER QAF WITH DOT ABOVEARABIC LETTER QAF WITH THREE DOTS") + ("" + - " ABOVEARABIC LETTER KEHEHARABIC LETTER SWASH KAFARABIC LETTER KAF WITH R" + - "INGARABIC LETTER KAF WITH DOT ABOVEARABIC LETTER NGARABIC LETTER KAF WIT" + - "H THREE DOTS BELOWARABIC LETTER GAFARABIC LETTER GAF WITH RINGARABIC LET" + - "TER NGOEHARABIC LETTER GAF WITH TWO DOTS BELOWARABIC LETTER GUEHARABIC L" + - "ETTER GAF WITH THREE DOTS ABOVEARABIC LETTER LAM WITH SMALL VARABIC LETT" + - "ER LAM WITH DOT ABOVEARABIC LETTER LAM WITH THREE DOTS ABOVEARABIC LETTE" + - "R LAM WITH THREE DOTS BELOWARABIC LETTER NOON WITH DOT BELOWARABIC LETTE" + - "R NOON GHUNNAARABIC LETTER RNOONARABIC LETTER NOON WITH RINGARABIC LETTE" + - "R NOON WITH THREE DOTS ABOVEARABIC LETTER HEH DOACHASHMEEARABIC LETTER T" + - "CHEH WITH DOT ABOVEARABIC LETTER HEH WITH YEH ABOVEARABIC LETTER HEH GOA" + - "LARABIC LETTER HEH GOAL WITH HAMZA ABOVEARABIC LETTER TEH MARBUTA GOALAR" + - "ABIC LETTER WAW WITH RINGARABIC LETTER KIRGHIZ OEARABIC LETTER OEARABIC " + - "LETTER UARABIC LETTER YUARABIC LETTER KIRGHIZ YUARABIC LETTER WAW WITH T" + - "WO DOTS ABOVEARABIC LETTER VEARABIC LETTER FARSI YEHARABIC LETTER YEH WI" + - "TH TAILARABIC LETTER YEH WITH SMALL VARABIC LETTER WAW WITH DOT ABOVEARA" + - "BIC LETTER EARABIC LETTER YEH WITH THREE DOTS BELOWARABIC LETTER YEH BAR" + - "REEARABIC LETTER YEH BARREE WITH HAMZA ABOVEARABIC FULL STOPARABIC LETTE" + - "R AEARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURAARABIC SMAL" + - "L HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURAARABIC SMALL HIGH MEEM INI" + - "TIAL FORMARABIC SMALL HIGH LAM ALEFARABIC SMALL HIGH JEEMARABIC SMALL HI" + - "GH THREE DOTSARABIC SMALL HIGH SEENARABIC END OF AYAHARABIC START OF RUB" + - " EL HIZBARABIC SMALL HIGH ROUNDED ZEROARABIC SMALL HIGH UPRIGHT RECTANGU" + - "LAR ZEROARABIC SMALL HIGH DOTLESS HEAD OF KHAHARABIC SMALL HIGH MEEM ISO" + - "LATED FORMARABIC SMALL LOW SEENARABIC SMALL HIGH MADDAARABIC SMALL WAWAR" + - "ABIC SMALL YEHARABIC SMALL HIGH YEHARABIC SMALL HIGH NOONARABIC PLACE OF" + - " SAJDAHARABIC EMPTY CENTRE LOW STOPARABIC EMPTY CENTRE HIGH STOPARABIC R" + - "OUNDED HIGH STOP WITH FILLED CENTREARABIC SMALL LOW MEEMARABIC LETTER DA" + - "L WITH INVERTED VARABIC LETTER REH WITH INVERTED VEXTENDED ARABIC-INDIC " + - "DIGIT ZEROEXTENDED ARABIC-INDIC DIGIT ONEEXTENDED ARABIC-INDIC DIGIT TWO" + - "EXTENDED ARABIC-INDIC DIGIT THREEEXTENDED ARABIC-INDIC DIGIT FOUREXTENDE" + - "D ARABIC-INDIC DIGIT FIVEEXTENDED ARABIC-INDIC DIGIT SIXEXTENDED ARABIC-" + - "INDIC DIGIT SEVENEXTENDED ARABIC-INDIC DIGIT EIGHTEXTENDED ARABIC-INDIC " + - "DIGIT NINEARABIC LETTER SHEEN WITH DOT BELOWARABIC LETTER DAD WITH DOT B" + - "ELOWARABIC LETTER GHAIN WITH DOT BELOWARABIC SIGN SINDHI AMPERSANDARABIC" + - " SIGN SINDHI POSTPOSITION MENARABIC LETTER HEH WITH INVERTED VSYRIAC END" + - " OF PARAGRAPHSYRIAC SUPRALINEAR FULL STOPSYRIAC SUBLINEAR FULL STOPSYRIA" + - "C SUPRALINEAR COLONSYRIAC SUBLINEAR COLONSYRIAC HORIZONTAL COLONSYRIAC C" + - "OLON SKEWED LEFTSYRIAC COLON SKEWED RIGHTSYRIAC SUPRALINEAR COLON SKEWED" + - " LEFTSYRIAC SUBLINEAR COLON SKEWED RIGHTSYRIAC CONTRACTIONSYRIAC HARKLEA" + - "N OBELUSSYRIAC HARKLEAN METOBELUSSYRIAC HARKLEAN ASTERISCUSSYRIAC ABBREV" + - "IATION MARKSYRIAC LETTER ALAPHSYRIAC LETTER SUPERSCRIPT ALAPHSYRIAC LETT" + - "ER BETHSYRIAC LETTER GAMALSYRIAC LETTER GAMAL GARSHUNISYRIAC LETTER DALA" + - "THSYRIAC LETTER DOTLESS DALATH RISHSYRIAC LETTER HESYRIAC LETTER WAWSYRI" + - "AC LETTER ZAINSYRIAC LETTER HETHSYRIAC LETTER TETHSYRIAC LETTER TETH GAR" + - "SHUNISYRIAC LETTER YUDHSYRIAC LETTER YUDH HESYRIAC LETTER KAPHSYRIAC LET" + - "TER LAMADHSYRIAC LETTER MIMSYRIAC LETTER NUNSYRIAC LETTER SEMKATHSYRIAC " + - "LETTER FINAL SEMKATHSYRIAC LETTER ESYRIAC LETTER PESYRIAC LETTER REVERSE" + - "D PESYRIAC LETTER SADHESYRIAC LETTER QAPHSYRIAC LETTER RISHSYRIAC LETTER" + - " SHINSYRIAC LETTER TAWSYRIAC LETTER PERSIAN BHETHSYRIAC LETTER PERSIAN G" + - "HAMALSYRIAC LETTER PERSIAN DHALATHSYRIAC PTHAHA ABOVESYRIAC PTHAHA BELOW" + - "SYRIAC PTHAHA DOTTEDSYRIAC ZQAPHA ABOVESYRIAC ZQAPHA BELOWSYRIAC ZQAPHA " + - "DOTTEDSYRIAC RBASA ABOVESYRIAC RBASA BELOWSYRIAC DOTTED ZLAMA HORIZONTAL" + - "SYRIAC DOTTED ZLAMA ANGULARSYRIAC HBASA ABOVESYRIAC HBASA BELOWSYRIAC HB" + - "ASA-ESASA DOTTEDSYRIAC ESASA ABOVESYRIAC ESASA BELOWSYRIAC RWAHASYRIAC F" + - "EMININE DOTSYRIAC QUSHSHAYASYRIAC RUKKAKHASYRIAC TWO VERTICAL DOTS ABOVE" + - "SYRIAC TWO VERTICAL DOTS BELOWSYRIAC THREE DOTS ABOVESYRIAC THREE DOTS B" + - "ELOWSYRIAC OBLIQUE LINE ABOVESYRIAC OBLIQUE LINE BELOWSYRIAC MUSICSYRIAC" + - " BARREKHSYRIAC LETTER SOGDIAN ZHAINSYRIAC LETTER SOGDIAN KHAPHSYRIAC LET" + - "TER SOGDIAN FEARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOWARABIC" + - " LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVEARABIC LETTER BEH WITH TH" + - "REE DOTS POINTING UPWARDS BELOWARABIC LETTER BEH WITH THREE DOTS POINTIN" + - "G UPWARDS BELOW AND TWO DOTS ABOVEARABIC LETTER BEH WITH TWO DOTS BELOW " + - "AND DOT ABOVEARABIC LETTER BEH WITH INVERTED SMALL V BELOWARABIC LETTER " + - "BEH WITH SMALL VARABIC LETTER HAH WITH TWO DOTS ABOVEARABIC LETTER HAH W") + ("" + - "ITH THREE DOTS POINTING UPWARDS BELOWARABIC LETTER DAL WITH TWO DOTS VER" + - "TICALLY BELOW AND SMALL TAHARABIC LETTER DAL WITH INVERTED SMALL V BELOW" + - "ARABIC LETTER REH WITH STROKEARABIC LETTER SEEN WITH FOUR DOTS ABOVEARAB" + - "IC LETTER AIN WITH TWO DOTS ABOVEARABIC LETTER AIN WITH THREE DOTS POINT" + - "ING DOWNWARDS ABOVEARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVEARABI" + - "C LETTER FEH WITH TWO DOTS BELOWARABIC LETTER FEH WITH THREE DOTS POINTI" + - "NG UPWARDS BELOWARABIC LETTER KEHEH WITH DOT ABOVEARABIC LETTER KEHEH WI" + - "TH THREE DOTS ABOVEARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS " + - "BELOWARABIC LETTER MEEM WITH DOT ABOVEARABIC LETTER MEEM WITH DOT BELOWA" + - "RABIC LETTER NOON WITH TWO DOTS BELOWARABIC LETTER NOON WITH SMALL TAHAR" + - "ABIC LETTER NOON WITH SMALL VARABIC LETTER LAM WITH BARARABIC LETTER REH" + - " WITH TWO DOTS VERTICALLY ABOVEARABIC LETTER REH WITH HAMZA ABOVEARABIC " + - "LETTER SEEN WITH TWO DOTS VERTICALLY ABOVEARABIC LETTER HAH WITH SMALL A" + - "RABIC LETTER TAH BELOWARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH AND" + - " TWO DOTSARABIC LETTER SEEN WITH SMALL ARABIC LETTER TAH AND TWO DOTSARA" + - "BIC LETTER REH WITH SMALL ARABIC LETTER TAH AND TWO DOTSARABIC LETTER HA" + - "H WITH SMALL ARABIC LETTER TAH ABOVEARABIC LETTER ALEF WITH EXTENDED ARA" + - "BIC-INDIC DIGIT TWO ABOVEARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC D" + - "IGIT THREE ABOVEARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT" + - " TWO ABOVEARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT THREE" + - " ABOVEARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELO" + - "WARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVEARABIC LETT" + - "ER WAW WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVEARABIC LETTER YEH BAR" + - "REE WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVEARABIC LETTER YEH BARREE W" + - "ITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVEARABIC LETTER HAH WITH EXTEND" + - "ED ARABIC-INDIC DIGIT FOUR BELOWARABIC LETTER SEEN WITH EXTENDED ARABIC-" + - "INDIC DIGIT FOUR ABOVEARABIC LETTER SEEN WITH INVERTED VARABIC LETTER KA" + - "F WITH TWO DOTS ABOVETHAANA LETTER HAATHAANA LETTER SHAVIYANITHAANA LETT" + - "ER NOONUTHAANA LETTER RAATHAANA LETTER BAATHAANA LETTER LHAVIYANITHAANA " + - "LETTER KAAFUTHAANA LETTER ALIFUTHAANA LETTER VAAVUTHAANA LETTER MEEMUTHA" + - "ANA LETTER FAAFUTHAANA LETTER DHAALUTHAANA LETTER THAATHAANA LETTER LAAM" + - "UTHAANA LETTER GAAFUTHAANA LETTER GNAVIYANITHAANA LETTER SEENUTHAANA LET" + - "TER DAVIYANITHAANA LETTER ZAVIYANITHAANA LETTER TAVIYANITHAANA LETTER YA" + - "ATHAANA LETTER PAVIYANITHAANA LETTER JAVIYANITHAANA LETTER CHAVIYANITHAA" + - "NA LETTER TTAATHAANA LETTER HHAATHAANA LETTER KHAATHAANA LETTER THAALUTH" + - "AANA LETTER ZAATHAANA LETTER SHEENUTHAANA LETTER SAADHUTHAANA LETTER DAA" + - "DHUTHAANA LETTER TOTHAANA LETTER ZOTHAANA LETTER AINUTHAANA LETTER GHAIN" + - "UTHAANA LETTER QAAFUTHAANA LETTER WAAVUTHAANA ABAFILITHAANA AABAAFILITHA" + - "ANA IBIFILITHAANA EEBEEFILITHAANA UBUFILITHAANA OOBOOFILITHAANA EBEFILIT" + - "HAANA EYBEYFILITHAANA OBOFILITHAANA OABOAFILITHAANA SUKUNTHAANA LETTER N" + - "AANKO DIGIT ZERONKO DIGIT ONENKO DIGIT TWONKO DIGIT THREENKO DIGIT FOURN" + - "KO DIGIT FIVENKO DIGIT SIXNKO DIGIT SEVENNKO DIGIT EIGHTNKO DIGIT NINENK" + - "O LETTER ANKO LETTER EENKO LETTER INKO LETTER ENKO LETTER UNKO LETTER OO" + - "NKO LETTER ONKO LETTER DAGBASINNANKO LETTER NNKO LETTER BANKO LETTER PAN" + - "KO LETTER TANKO LETTER JANKO LETTER CHANKO LETTER DANKO LETTER RANKO LET" + - "TER RRANKO LETTER SANKO LETTER GBANKO LETTER FANKO LETTER KANKO LETTER L" + - "ANKO LETTER NA WOLOSONKO LETTER MANKO LETTER NYANKO LETTER NANKO LETTER " + - "HANKO LETTER WANKO LETTER YANKO LETTER NYA WOLOSONKO LETTER JONA JANKO L" + - "ETTER JONA CHANKO LETTER JONA RANKO COMBINING SHORT HIGH TONENKO COMBINI" + - "NG SHORT LOW TONENKO COMBINING SHORT RISING TONENKO COMBINING LONG DESCE" + - "NDING TONENKO COMBINING LONG HIGH TONENKO COMBINING LONG LOW TONENKO COM" + - "BINING LONG RISING TONENKO COMBINING NASALIZATION MARKNKO COMBINING DOUB" + - "LE DOT ABOVENKO HIGH TONE APOSTROPHENKO LOW TONE APOSTROPHENKO SYMBOL OO" + - " DENNENNKO SYMBOL GBAKURUNENNKO COMMANKO EXCLAMATION MARKNKO LAJANYALANS" + - "AMARITAN LETTER ALAFSAMARITAN LETTER BITSAMARITAN LETTER GAMANSAMARITAN " + - "LETTER DALATSAMARITAN LETTER IYSAMARITAN LETTER BAASAMARITAN LETTER ZENS" + - "AMARITAN LETTER ITSAMARITAN LETTER TITSAMARITAN LETTER YUTSAMARITAN LETT" + - "ER KAAFSAMARITAN LETTER LABATSAMARITAN LETTER MIMSAMARITAN LETTER NUNSAM" + - "ARITAN LETTER SINGAATSAMARITAN LETTER INSAMARITAN LETTER FISAMARITAN LET" + - "TER TSAADIYSAMARITAN LETTER QUFSAMARITAN LETTER RISHSAMARITAN LETTER SHA" + - "NSAMARITAN LETTER TAAFSAMARITAN MARK INSAMARITAN MARK IN-ALAFSAMARITAN M" + - "ARK OCCLUSIONSAMARITAN MARK DAGESHSAMARITAN MODIFIER LETTER EPENTHETIC Y" + - "UTSAMARITAN MARK EPENTHETIC YUTSAMARITAN VOWEL SIGN LONG ESAMARITAN VOWE" + - "L SIGN ESAMARITAN VOWEL SIGN OVERLONG AASAMARITAN VOWEL SIGN LONG AASAMA") + ("" + - "RITAN VOWEL SIGN AASAMARITAN VOWEL SIGN OVERLONG ASAMARITAN VOWEL SIGN L" + - "ONG ASAMARITAN VOWEL SIGN ASAMARITAN MODIFIER LETTER SHORT ASAMARITAN VO" + - "WEL SIGN SHORT ASAMARITAN VOWEL SIGN LONG USAMARITAN VOWEL SIGN USAMARIT" + - "AN MODIFIER LETTER ISAMARITAN VOWEL SIGN LONG ISAMARITAN VOWEL SIGN ISAM" + - "ARITAN VOWEL SIGN OSAMARITAN VOWEL SIGN SUKUNSAMARITAN MARK NEQUDAASAMAR" + - "ITAN PUNCTUATION NEQUDAASAMARITAN PUNCTUATION AFSAAQSAMARITAN PUNCTUATIO" + - "N ANGEDSAMARITAN PUNCTUATION BAUSAMARITAN PUNCTUATION ATMAAUSAMARITAN PU" + - "NCTUATION SHIYYAALAASAMARITAN ABBREVIATION MARKSAMARITAN PUNCTUATION MEL" + - "ODIC QITSASAMARITAN PUNCTUATION ZIQAASAMARITAN PUNCTUATION QITSASAMARITA" + - "N PUNCTUATION ZAEFSAMARITAN PUNCTUATION TURUSAMARITAN PUNCTUATION ARKAAN" + - "USAMARITAN PUNCTUATION SOF MASHFAATSAMARITAN PUNCTUATION ANNAAUMANDAIC L" + - "ETTER HALQAMANDAIC LETTER ABMANDAIC LETTER AGMANDAIC LETTER ADMANDAIC LE" + - "TTER AHMANDAIC LETTER USHENNAMANDAIC LETTER AZMANDAIC LETTER ITMANDAIC L" + - "ETTER ATTMANDAIC LETTER AKSAMANDAIC LETTER AKMANDAIC LETTER ALMANDAIC LE" + - "TTER AMMANDAIC LETTER ANMANDAIC LETTER ASMANDAIC LETTER INMANDAIC LETTER" + - " APMANDAIC LETTER ASZMANDAIC LETTER AQMANDAIC LETTER ARMANDAIC LETTER AS" + - "HMANDAIC LETTER ATMANDAIC LETTER DUSHENNAMANDAIC LETTER KADMANDAIC LETTE" + - "R AINMANDAIC AFFRICATION MARKMANDAIC VOCALIZATION MARKMANDAIC GEMINATION" + - " MARKMANDAIC PUNCTUATIONARABIC LETTER BEH WITH SMALL V BELOWARABIC LETTE" + - "R BEH WITH HAMZA ABOVEARABIC LETTER JEEM WITH TWO DOTS ABOVEARABIC LETTE" + - "R TAH WITH TWO DOTS ABOVEARABIC LETTER FEH WITH DOT BELOW AND THREE DOTS" + - " ABOVEARABIC LETTER QAF WITH DOT BELOWARABIC LETTER LAM WITH DOUBLE BARA" + - "RABIC LETTER MEEM WITH THREE DOTS ABOVEARABIC LETTER YEH WITH TWO DOTS B" + - "ELOW AND HAMZA ABOVEARABIC LETTER YEH WITH TWO DOTS BELOW AND DOT ABOVEA" + - "RABIC LETTER REH WITH LOOPARABIC LETTER WAW WITH DOT WITHINARABIC LETTER" + - " ROHINGYA YEHARABIC LETTER LOW ALEFARABIC LETTER DAL WITH THREE DOTS BEL" + - "OWARABIC LETTER SAD WITH THREE DOTS BELOWARABIC LETTER GAF WITH INVERTED" + - " STROKEARABIC LETTER STRAIGHT WAWARABIC LETTER ZAIN WITH INVERTED V ABOV" + - "EARABIC LETTER AIN WITH THREE DOTS BELOWARABIC LETTER KAF WITH DOT BELOW" + - "ARABIC LETTER BEH WITH SMALL MEEM ABOVEARABIC LETTER PEH WITH SMALL MEEM" + - " ABOVEARABIC LETTER TEH WITH SMALL TEH ABOVEARABIC LETTER REH WITH SMALL" + - " NOON ABOVEARABIC LETTER YEH WITH TWO DOTS BELOW AND SMALL NOON ABOVEARA" + - "BIC LETTER AFRICAN FEHARABIC LETTER AFRICAN QAFARABIC LETTER AFRICAN NOO" + - "NARABIC SMALL HIGH WORD AR-RUBARABIC SMALL HIGH SADARABIC SMALL HIGH AIN" + - "ARABIC SMALL HIGH QAFARABIC SMALL HIGH NOON WITH KASRAARABIC SMALL LOW N" + - "OON WITH KASRAARABIC SMALL HIGH WORD ATH-THALATHAARABIC SMALL HIGH WORD " + - "AS-SAJDAARABIC SMALL HIGH WORD AN-NISFARABIC SMALL HIGH WORD SAKTAARABIC" + - " SMALL HIGH WORD QIFARABIC SMALL HIGH WORD WAQFAARABIC SMALL HIGH FOOTNO" + - "TE MARKERARABIC SMALL HIGH SIGN SAFHAARABIC DISPUTED END OF AYAHARABIC T" + - "URNED DAMMA BELOWARABIC CURLY FATHAARABIC CURLY DAMMAARABIC CURLY KASRAA" + - "RABIC CURLY FATHATANARABIC CURLY DAMMATANARABIC CURLY KASRATANARABIC TON" + - "E ONE DOT ABOVEARABIC TONE TWO DOTS ABOVEARABIC TONE LOOP ABOVEARABIC TO" + - "NE ONE DOT BELOWARABIC TONE TWO DOTS BELOWARABIC TONE LOOP BELOWARABIC O" + - "PEN FATHATANARABIC OPEN DAMMATANARABIC OPEN KASRATANARABIC SMALL HIGH WA" + - "WARABIC FATHA WITH RINGARABIC FATHA WITH DOT ABOVEARABIC KASRA WITH DOT " + - "BELOWARABIC LEFT ARROWHEAD ABOVEARABIC RIGHT ARROWHEAD ABOVEARABIC LEFT " + - "ARROWHEAD BELOWARABIC RIGHT ARROWHEAD BELOWARABIC DOUBLE RIGHT ARROWHEAD" + - " ABOVEARABIC DOUBLE RIGHT ARROWHEAD ABOVE WITH DOTARABIC RIGHT ARROWHEAD" + - " ABOVE WITH DOTARABIC DAMMA WITH DOTARABIC MARK SIDEWAYS NOON GHUNNADEVA" + - "NAGARI SIGN INVERTED CANDRABINDUDEVANAGARI SIGN CANDRABINDUDEVANAGARI SI" + - "GN ANUSVARADEVANAGARI SIGN VISARGADEVANAGARI LETTER SHORT ADEVANAGARI LE" + - "TTER ADEVANAGARI LETTER AADEVANAGARI LETTER IDEVANAGARI LETTER IIDEVANAG" + - "ARI LETTER UDEVANAGARI LETTER UUDEVANAGARI LETTER VOCALIC RDEVANAGARI LE" + - "TTER VOCALIC LDEVANAGARI LETTER CANDRA EDEVANAGARI LETTER SHORT EDEVANAG" + - "ARI LETTER EDEVANAGARI LETTER AIDEVANAGARI LETTER CANDRA ODEVANAGARI LET" + - "TER SHORT ODEVANAGARI LETTER ODEVANAGARI LETTER AUDEVANAGARI LETTER KADE" + - "VANAGARI LETTER KHADEVANAGARI LETTER GADEVANAGARI LETTER GHADEVANAGARI L" + - "ETTER NGADEVANAGARI LETTER CADEVANAGARI LETTER CHADEVANAGARI LETTER JADE" + - "VANAGARI LETTER JHADEVANAGARI LETTER NYADEVANAGARI LETTER TTADEVANAGARI " + - "LETTER TTHADEVANAGARI LETTER DDADEVANAGARI LETTER DDHADEVANAGARI LETTER " + - "NNADEVANAGARI LETTER TADEVANAGARI LETTER THADEVANAGARI LETTER DADEVANAGA" + - "RI LETTER DHADEVANAGARI LETTER NADEVANAGARI LETTER NNNADEVANAGARI LETTER" + - " PADEVANAGARI LETTER PHADEVANAGARI LETTER BADEVANAGARI LETTER BHADEVANAG" + - "ARI LETTER MADEVANAGARI LETTER YADEVANAGARI LETTER RADEVANAGARI LETTER R") + ("" + - "RADEVANAGARI LETTER LADEVANAGARI LETTER LLADEVANAGARI LETTER LLLADEVANAG" + - "ARI LETTER VADEVANAGARI LETTER SHADEVANAGARI LETTER SSADEVANAGARI LETTER" + - " SADEVANAGARI LETTER HADEVANAGARI VOWEL SIGN OEDEVANAGARI VOWEL SIGN OOE" + - "DEVANAGARI SIGN NUKTADEVANAGARI SIGN AVAGRAHADEVANAGARI VOWEL SIGN AADEV" + - "ANAGARI VOWEL SIGN IDEVANAGARI VOWEL SIGN IIDEVANAGARI VOWEL SIGN UDEVAN" + - "AGARI VOWEL SIGN UUDEVANAGARI VOWEL SIGN VOCALIC RDEVANAGARI VOWEL SIGN " + - "VOCALIC RRDEVANAGARI VOWEL SIGN CANDRA EDEVANAGARI VOWEL SIGN SHORT EDEV" + - "ANAGARI VOWEL SIGN EDEVANAGARI VOWEL SIGN AIDEVANAGARI VOWEL SIGN CANDRA" + - " ODEVANAGARI VOWEL SIGN SHORT ODEVANAGARI VOWEL SIGN ODEVANAGARI VOWEL S" + - "IGN AUDEVANAGARI SIGN VIRAMADEVANAGARI VOWEL SIGN PRISHTHAMATRA EDEVANAG" + - "ARI VOWEL SIGN AWDEVANAGARI OMDEVANAGARI STRESS SIGN UDATTADEVANAGARI ST" + - "RESS SIGN ANUDATTADEVANAGARI GRAVE ACCENTDEVANAGARI ACUTE ACCENTDEVANAGA" + - "RI VOWEL SIGN CANDRA LONG EDEVANAGARI VOWEL SIGN UEDEVANAGARI VOWEL SIGN" + - " UUEDEVANAGARI LETTER QADEVANAGARI LETTER KHHADEVANAGARI LETTER GHHADEVA" + - "NAGARI LETTER ZADEVANAGARI LETTER DDDHADEVANAGARI LETTER RHADEVANAGARI L" + - "ETTER FADEVANAGARI LETTER YYADEVANAGARI LETTER VOCALIC RRDEVANAGARI LETT" + - "ER VOCALIC LLDEVANAGARI VOWEL SIGN VOCALIC LDEVANAGARI VOWEL SIGN VOCALI" + - "C LLDEVANAGARI DANDADEVANAGARI DOUBLE DANDADEVANAGARI DIGIT ZERODEVANAGA" + - "RI DIGIT ONEDEVANAGARI DIGIT TWODEVANAGARI DIGIT THREEDEVANAGARI DIGIT F" + - "OURDEVANAGARI DIGIT FIVEDEVANAGARI DIGIT SIXDEVANAGARI DIGIT SEVENDEVANA" + - "GARI DIGIT EIGHTDEVANAGARI DIGIT NINEDEVANAGARI ABBREVIATION SIGNDEVANAG" + - "ARI SIGN HIGH SPACING DOTDEVANAGARI LETTER CANDRA ADEVANAGARI LETTER OED" + - "EVANAGARI LETTER OOEDEVANAGARI LETTER AWDEVANAGARI LETTER UEDEVANAGARI L" + - "ETTER UUEDEVANAGARI LETTER MARWARI DDADEVANAGARI LETTER ZHADEVANAGARI LE" + - "TTER HEAVY YADEVANAGARI LETTER GGADEVANAGARI LETTER JJADEVANAGARI LETTER" + - " GLOTTAL STOPDEVANAGARI LETTER DDDADEVANAGARI LETTER BBABENGALI ANJIBENG" + - "ALI SIGN CANDRABINDUBENGALI SIGN ANUSVARABENGALI SIGN VISARGABENGALI LET" + - "TER ABENGALI LETTER AABENGALI LETTER IBENGALI LETTER IIBENGALI LETTER UB" + - "ENGALI LETTER UUBENGALI LETTER VOCALIC RBENGALI LETTER VOCALIC LBENGALI " + - "LETTER EBENGALI LETTER AIBENGALI LETTER OBENGALI LETTER AUBENGALI LETTER" + - " KABENGALI LETTER KHABENGALI LETTER GABENGALI LETTER GHABENGALI LETTER N" + - "GABENGALI LETTER CABENGALI LETTER CHABENGALI LETTER JABENGALI LETTER JHA" + - "BENGALI LETTER NYABENGALI LETTER TTABENGALI LETTER TTHABENGALI LETTER DD" + - "ABENGALI LETTER DDHABENGALI LETTER NNABENGALI LETTER TABENGALI LETTER TH" + - "ABENGALI LETTER DABENGALI LETTER DHABENGALI LETTER NABENGALI LETTER PABE" + - "NGALI LETTER PHABENGALI LETTER BABENGALI LETTER BHABENGALI LETTER MABENG" + - "ALI LETTER YABENGALI LETTER RABENGALI LETTER LABENGALI LETTER SHABENGALI" + - " LETTER SSABENGALI LETTER SABENGALI LETTER HABENGALI SIGN NUKTABENGALI S" + - "IGN AVAGRAHABENGALI VOWEL SIGN AABENGALI VOWEL SIGN IBENGALI VOWEL SIGN " + - "IIBENGALI VOWEL SIGN UBENGALI VOWEL SIGN UUBENGALI VOWEL SIGN VOCALIC RB" + - "ENGALI VOWEL SIGN VOCALIC RRBENGALI VOWEL SIGN EBENGALI VOWEL SIGN AIBEN" + - "GALI VOWEL SIGN OBENGALI VOWEL SIGN AUBENGALI SIGN VIRAMABENGALI LETTER " + - "KHANDA TABENGALI AU LENGTH MARKBENGALI LETTER RRABENGALI LETTER RHABENGA" + - "LI LETTER YYABENGALI LETTER VOCALIC RRBENGALI LETTER VOCALIC LLBENGALI V" + - "OWEL SIGN VOCALIC LBENGALI VOWEL SIGN VOCALIC LLBENGALI DIGIT ZEROBENGAL" + - "I DIGIT ONEBENGALI DIGIT TWOBENGALI DIGIT THREEBENGALI DIGIT FOURBENGALI" + - " DIGIT FIVEBENGALI DIGIT SIXBENGALI DIGIT SEVENBENGALI DIGIT EIGHTBENGAL" + - "I DIGIT NINEBENGALI LETTER RA WITH MIDDLE DIAGONALBENGALI LETTER RA WITH" + - " LOWER DIAGONALBENGALI RUPEE MARKBENGALI RUPEE SIGNBENGALI CURRENCY NUME" + - "RATOR ONEBENGALI CURRENCY NUMERATOR TWOBENGALI CURRENCY NUMERATOR THREEB" + - "ENGALI CURRENCY NUMERATOR FOURBENGALI CURRENCY NUMERATOR ONE LESS THAN T" + - "HE DENOMINATORBENGALI CURRENCY DENOMINATOR SIXTEENBENGALI ISSHARBENGALI " + - "GANDA MARKGURMUKHI SIGN ADAK BINDIGURMUKHI SIGN BINDIGURMUKHI SIGN VISAR" + - "GAGURMUKHI LETTER AGURMUKHI LETTER AAGURMUKHI LETTER IGURMUKHI LETTER II" + - "GURMUKHI LETTER UGURMUKHI LETTER UUGURMUKHI LETTER EEGURMUKHI LETTER AIG" + - "URMUKHI LETTER OOGURMUKHI LETTER AUGURMUKHI LETTER KAGURMUKHI LETTER KHA" + - "GURMUKHI LETTER GAGURMUKHI LETTER GHAGURMUKHI LETTER NGAGURMUKHI LETTER " + - "CAGURMUKHI LETTER CHAGURMUKHI LETTER JAGURMUKHI LETTER JHAGURMUKHI LETTE" + - "R NYAGURMUKHI LETTER TTAGURMUKHI LETTER TTHAGURMUKHI LETTER DDAGURMUKHI " + - "LETTER DDHAGURMUKHI LETTER NNAGURMUKHI LETTER TAGURMUKHI LETTER THAGURMU" + - "KHI LETTER DAGURMUKHI LETTER DHAGURMUKHI LETTER NAGURMUKHI LETTER PAGURM" + - "UKHI LETTER PHAGURMUKHI LETTER BAGURMUKHI LETTER BHAGURMUKHI LETTER MAGU" + - "RMUKHI LETTER YAGURMUKHI LETTER RAGURMUKHI LETTER LAGURMUKHI LETTER LLAG" + - "URMUKHI LETTER VAGURMUKHI LETTER SHAGURMUKHI LETTER SAGURMUKHI LETTER HA") + ("" + - "GURMUKHI SIGN NUKTAGURMUKHI VOWEL SIGN AAGURMUKHI VOWEL SIGN IGURMUKHI V" + - "OWEL SIGN IIGURMUKHI VOWEL SIGN UGURMUKHI VOWEL SIGN UUGURMUKHI VOWEL SI" + - "GN EEGURMUKHI VOWEL SIGN AIGURMUKHI VOWEL SIGN OOGURMUKHI VOWEL SIGN AUG" + - "URMUKHI SIGN VIRAMAGURMUKHI SIGN UDAATGURMUKHI LETTER KHHAGURMUKHI LETTE" + - "R GHHAGURMUKHI LETTER ZAGURMUKHI LETTER RRAGURMUKHI LETTER FAGURMUKHI DI" + - "GIT ZEROGURMUKHI DIGIT ONEGURMUKHI DIGIT TWOGURMUKHI DIGIT THREEGURMUKHI" + - " DIGIT FOURGURMUKHI DIGIT FIVEGURMUKHI DIGIT SIXGURMUKHI DIGIT SEVENGURM" + - "UKHI DIGIT EIGHTGURMUKHI DIGIT NINEGURMUKHI TIPPIGURMUKHI ADDAKGURMUKHI " + - "IRIGURMUKHI URAGURMUKHI EK ONKARGURMUKHI SIGN YAKASHGUJARATI SIGN CANDRA" + - "BINDUGUJARATI SIGN ANUSVARAGUJARATI SIGN VISARGAGUJARATI LETTER AGUJARAT" + - "I LETTER AAGUJARATI LETTER IGUJARATI LETTER IIGUJARATI LETTER UGUJARATI " + - "LETTER UUGUJARATI LETTER VOCALIC RGUJARATI LETTER VOCALIC LGUJARATI VOWE" + - "L CANDRA EGUJARATI LETTER EGUJARATI LETTER AIGUJARATI VOWEL CANDRA OGUJA" + - "RATI LETTER OGUJARATI LETTER AUGUJARATI LETTER KAGUJARATI LETTER KHAGUJA" + - "RATI LETTER GAGUJARATI LETTER GHAGUJARATI LETTER NGAGUJARATI LETTER CAGU" + - "JARATI LETTER CHAGUJARATI LETTER JAGUJARATI LETTER JHAGUJARATI LETTER NY" + - "AGUJARATI LETTER TTAGUJARATI LETTER TTHAGUJARATI LETTER DDAGUJARATI LETT" + - "ER DDHAGUJARATI LETTER NNAGUJARATI LETTER TAGUJARATI LETTER THAGUJARATI " + - "LETTER DAGUJARATI LETTER DHAGUJARATI LETTER NAGUJARATI LETTER PAGUJARATI" + - " LETTER PHAGUJARATI LETTER BAGUJARATI LETTER BHAGUJARATI LETTER MAGUJARA" + - "TI LETTER YAGUJARATI LETTER RAGUJARATI LETTER LAGUJARATI LETTER LLAGUJAR" + - "ATI LETTER VAGUJARATI LETTER SHAGUJARATI LETTER SSAGUJARATI LETTER SAGUJ" + - "ARATI LETTER HAGUJARATI SIGN NUKTAGUJARATI SIGN AVAGRAHAGUJARATI VOWEL S" + - "IGN AAGUJARATI VOWEL SIGN IGUJARATI VOWEL SIGN IIGUJARATI VOWEL SIGN UGU" + - "JARATI VOWEL SIGN UUGUJARATI VOWEL SIGN VOCALIC RGUJARATI VOWEL SIGN VOC" + - "ALIC RRGUJARATI VOWEL SIGN CANDRA EGUJARATI VOWEL SIGN EGUJARATI VOWEL S" + - "IGN AIGUJARATI VOWEL SIGN CANDRA OGUJARATI VOWEL SIGN OGUJARATI VOWEL SI" + - "GN AUGUJARATI SIGN VIRAMAGUJARATI OMGUJARATI LETTER VOCALIC RRGUJARATI L" + - "ETTER VOCALIC LLGUJARATI VOWEL SIGN VOCALIC LGUJARATI VOWEL SIGN VOCALIC" + - " LLGUJARATI DIGIT ZEROGUJARATI DIGIT ONEGUJARATI DIGIT TWOGUJARATI DIGIT" + - " THREEGUJARATI DIGIT FOURGUJARATI DIGIT FIVEGUJARATI DIGIT SIXGUJARATI D" + - "IGIT SEVENGUJARATI DIGIT EIGHTGUJARATI DIGIT NINEGUJARATI ABBREVIATION S" + - "IGNGUJARATI RUPEE SIGNGUJARATI LETTER ZHAORIYA SIGN CANDRABINDUORIYA SIG" + - "N ANUSVARAORIYA SIGN VISARGAORIYA LETTER AORIYA LETTER AAORIYA LETTER IO" + - "RIYA LETTER IIORIYA LETTER UORIYA LETTER UUORIYA LETTER VOCALIC RORIYA L" + - "ETTER VOCALIC LORIYA LETTER EORIYA LETTER AIORIYA LETTER OORIYA LETTER A" + - "UORIYA LETTER KAORIYA LETTER KHAORIYA LETTER GAORIYA LETTER GHAORIYA LET" + - "TER NGAORIYA LETTER CAORIYA LETTER CHAORIYA LETTER JAORIYA LETTER JHAORI" + - "YA LETTER NYAORIYA LETTER TTAORIYA LETTER TTHAORIYA LETTER DDAORIYA LETT" + - "ER DDHAORIYA LETTER NNAORIYA LETTER TAORIYA LETTER THAORIYA LETTER DAORI" + - "YA LETTER DHAORIYA LETTER NAORIYA LETTER PAORIYA LETTER PHAORIYA LETTER " + - "BAORIYA LETTER BHAORIYA LETTER MAORIYA LETTER YAORIYA LETTER RAORIYA LET" + - "TER LAORIYA LETTER LLAORIYA LETTER VAORIYA LETTER SHAORIYA LETTER SSAORI" + - "YA LETTER SAORIYA LETTER HAORIYA SIGN NUKTAORIYA SIGN AVAGRAHAORIYA VOWE" + - "L SIGN AAORIYA VOWEL SIGN IORIYA VOWEL SIGN IIORIYA VOWEL SIGN UORIYA VO" + - "WEL SIGN UUORIYA VOWEL SIGN VOCALIC RORIYA VOWEL SIGN VOCALIC RRORIYA VO" + - "WEL SIGN EORIYA VOWEL SIGN AIORIYA VOWEL SIGN OORIYA VOWEL SIGN AUORIYA " + - "SIGN VIRAMAORIYA AI LENGTH MARKORIYA AU LENGTH MARKORIYA LETTER RRAORIYA" + - " LETTER RHAORIYA LETTER YYAORIYA LETTER VOCALIC RRORIYA LETTER VOCALIC L" + - "LORIYA VOWEL SIGN VOCALIC LORIYA VOWEL SIGN VOCALIC LLORIYA DIGIT ZEROOR" + - "IYA DIGIT ONEORIYA DIGIT TWOORIYA DIGIT THREEORIYA DIGIT FOURORIYA DIGIT" + - " FIVEORIYA DIGIT SIXORIYA DIGIT SEVENORIYA DIGIT EIGHTORIYA DIGIT NINEOR" + - "IYA ISSHARORIYA LETTER WAORIYA FRACTION ONE QUARTERORIYA FRACTION ONE HA" + - "LFORIYA FRACTION THREE QUARTERSORIYA FRACTION ONE SIXTEENTHORIYA FRACTIO" + - "N ONE EIGHTHORIYA FRACTION THREE SIXTEENTHSTAMIL SIGN ANUSVARATAMIL SIGN" + - " VISARGATAMIL LETTER ATAMIL LETTER AATAMIL LETTER ITAMIL LETTER IITAMIL " + - "LETTER UTAMIL LETTER UUTAMIL LETTER ETAMIL LETTER EETAMIL LETTER AITAMIL" + - " LETTER OTAMIL LETTER OOTAMIL LETTER AUTAMIL LETTER KATAMIL LETTER NGATA" + - "MIL LETTER CATAMIL LETTER JATAMIL LETTER NYATAMIL LETTER TTATAMIL LETTER" + - " NNATAMIL LETTER TATAMIL LETTER NATAMIL LETTER NNNATAMIL LETTER PATAMIL " + - "LETTER MATAMIL LETTER YATAMIL LETTER RATAMIL LETTER RRATAMIL LETTER LATA" + - "MIL LETTER LLATAMIL LETTER LLLATAMIL LETTER VATAMIL LETTER SHATAMIL LETT" + - "ER SSATAMIL LETTER SATAMIL LETTER HATAMIL VOWEL SIGN AATAMIL VOWEL SIGN " + - "ITAMIL VOWEL SIGN IITAMIL VOWEL SIGN UTAMIL VOWEL SIGN UUTAMIL VOWEL SIG") + ("" + - "N ETAMIL VOWEL SIGN EETAMIL VOWEL SIGN AITAMIL VOWEL SIGN OTAMIL VOWEL S" + - "IGN OOTAMIL VOWEL SIGN AUTAMIL SIGN VIRAMATAMIL OMTAMIL AU LENGTH MARKTA" + - "MIL DIGIT ZEROTAMIL DIGIT ONETAMIL DIGIT TWOTAMIL DIGIT THREETAMIL DIGIT" + - " FOURTAMIL DIGIT FIVETAMIL DIGIT SIXTAMIL DIGIT SEVENTAMIL DIGIT EIGHTTA" + - "MIL DIGIT NINETAMIL NUMBER TENTAMIL NUMBER ONE HUNDREDTAMIL NUMBER ONE T" + - "HOUSANDTAMIL DAY SIGNTAMIL MONTH SIGNTAMIL YEAR SIGNTAMIL DEBIT SIGNTAMI" + - "L CREDIT SIGNTAMIL AS ABOVE SIGNTAMIL RUPEE SIGNTAMIL NUMBER SIGNTELUGU " + - "SIGN COMBINING CANDRABINDU ABOVETELUGU SIGN CANDRABINDUTELUGU SIGN ANUSV" + - "ARATELUGU SIGN VISARGATELUGU LETTER ATELUGU LETTER AATELUGU LETTER ITELU" + - "GU LETTER IITELUGU LETTER UTELUGU LETTER UUTELUGU LETTER VOCALIC RTELUGU" + - " LETTER VOCALIC LTELUGU LETTER ETELUGU LETTER EETELUGU LETTER AITELUGU L" + - "ETTER OTELUGU LETTER OOTELUGU LETTER AUTELUGU LETTER KATELUGU LETTER KHA" + - "TELUGU LETTER GATELUGU LETTER GHATELUGU LETTER NGATELUGU LETTER CATELUGU" + - " LETTER CHATELUGU LETTER JATELUGU LETTER JHATELUGU LETTER NYATELUGU LETT" + - "ER TTATELUGU LETTER TTHATELUGU LETTER DDATELUGU LETTER DDHATELUGU LETTER" + - " NNATELUGU LETTER TATELUGU LETTER THATELUGU LETTER DATELUGU LETTER DHATE" + - "LUGU LETTER NATELUGU LETTER PATELUGU LETTER PHATELUGU LETTER BATELUGU LE" + - "TTER BHATELUGU LETTER MATELUGU LETTER YATELUGU LETTER RATELUGU LETTER RR" + - "ATELUGU LETTER LATELUGU LETTER LLATELUGU LETTER LLLATELUGU LETTER VATELU" + - "GU LETTER SHATELUGU LETTER SSATELUGU LETTER SATELUGU LETTER HATELUGU SIG" + - "N AVAGRAHATELUGU VOWEL SIGN AATELUGU VOWEL SIGN ITELUGU VOWEL SIGN IITEL" + - "UGU VOWEL SIGN UTELUGU VOWEL SIGN UUTELUGU VOWEL SIGN VOCALIC RTELUGU VO" + - "WEL SIGN VOCALIC RRTELUGU VOWEL SIGN ETELUGU VOWEL SIGN EETELUGU VOWEL S" + - "IGN AITELUGU VOWEL SIGN OTELUGU VOWEL SIGN OOTELUGU VOWEL SIGN AUTELUGU " + - "SIGN VIRAMATELUGU LENGTH MARKTELUGU AI LENGTH MARKTELUGU LETTER TSATELUG" + - "U LETTER DZATELUGU LETTER RRRATELUGU LETTER VOCALIC RRTELUGU LETTER VOCA" + - "LIC LLTELUGU VOWEL SIGN VOCALIC LTELUGU VOWEL SIGN VOCALIC LLTELUGU DIGI" + - "T ZEROTELUGU DIGIT ONETELUGU DIGIT TWOTELUGU DIGIT THREETELUGU DIGIT FOU" + - "RTELUGU DIGIT FIVETELUGU DIGIT SIXTELUGU DIGIT SEVENTELUGU DIGIT EIGHTTE" + - "LUGU DIGIT NINETELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOURTELUGU F" + - "RACTION DIGIT ONE FOR ODD POWERS OF FOURTELUGU FRACTION DIGIT TWO FOR OD" + - "D POWERS OF FOURTELUGU FRACTION DIGIT THREE FOR ODD POWERS OF FOURTELUGU" + - " FRACTION DIGIT ONE FOR EVEN POWERS OF FOURTELUGU FRACTION DIGIT TWO FOR" + - " EVEN POWERS OF FOURTELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOURT" + - "ELUGU SIGN TUUMUKANNADA SIGN SPACING CANDRABINDUKANNADA SIGN CANDRABINDU" + - "KANNADA SIGN ANUSVARAKANNADA SIGN VISARGAKANNADA LETTER AKANNADA LETTER " + - "AAKANNADA LETTER IKANNADA LETTER IIKANNADA LETTER UKANNADA LETTER UUKANN" + - "ADA LETTER VOCALIC RKANNADA LETTER VOCALIC LKANNADA LETTER EKANNADA LETT" + - "ER EEKANNADA LETTER AIKANNADA LETTER OKANNADA LETTER OOKANNADA LETTER AU" + - "KANNADA LETTER KAKANNADA LETTER KHAKANNADA LETTER GAKANNADA LETTER GHAKA" + - "NNADA LETTER NGAKANNADA LETTER CAKANNADA LETTER CHAKANNADA LETTER JAKANN" + - "ADA LETTER JHAKANNADA LETTER NYAKANNADA LETTER TTAKANNADA LETTER TTHAKAN" + - "NADA LETTER DDAKANNADA LETTER DDHAKANNADA LETTER NNAKANNADA LETTER TAKAN" + - "NADA LETTER THAKANNADA LETTER DAKANNADA LETTER DHAKANNADA LETTER NAKANNA" + - "DA LETTER PAKANNADA LETTER PHAKANNADA LETTER BAKANNADA LETTER BHAKANNADA" + - " LETTER MAKANNADA LETTER YAKANNADA LETTER RAKANNADA LETTER RRAKANNADA LE" + - "TTER LAKANNADA LETTER LLAKANNADA LETTER VAKANNADA LETTER SHAKANNADA LETT" + - "ER SSAKANNADA LETTER SAKANNADA LETTER HAKANNADA SIGN NUKTAKANNADA SIGN A" + - "VAGRAHAKANNADA VOWEL SIGN AAKANNADA VOWEL SIGN IKANNADA VOWEL SIGN IIKAN" + - "NADA VOWEL SIGN UKANNADA VOWEL SIGN UUKANNADA VOWEL SIGN VOCALIC RKANNAD" + - "A VOWEL SIGN VOCALIC RRKANNADA VOWEL SIGN EKANNADA VOWEL SIGN EEKANNADA " + - "VOWEL SIGN AIKANNADA VOWEL SIGN OKANNADA VOWEL SIGN OOKANNADA VOWEL SIGN" + - " AUKANNADA SIGN VIRAMAKANNADA LENGTH MARKKANNADA AI LENGTH MARKKANNADA L" + - "ETTER FAKANNADA LETTER VOCALIC RRKANNADA LETTER VOCALIC LLKANNADA VOWEL " + - "SIGN VOCALIC LKANNADA VOWEL SIGN VOCALIC LLKANNADA DIGIT ZEROKANNADA DIG" + - "IT ONEKANNADA DIGIT TWOKANNADA DIGIT THREEKANNADA DIGIT FOURKANNADA DIGI" + - "T FIVEKANNADA DIGIT SIXKANNADA DIGIT SEVENKANNADA DIGIT EIGHTKANNADA DIG" + - "IT NINEKANNADA SIGN JIHVAMULIYAKANNADA SIGN UPADHMANIYAMALAYALAM SIGN CA" + - "NDRABINDUMALAYALAM SIGN ANUSVARAMALAYALAM SIGN VISARGAMALAYALAM LETTER A" + - "MALAYALAM LETTER AAMALAYALAM LETTER IMALAYALAM LETTER IIMALAYALAM LETTER" + - " UMALAYALAM LETTER UUMALAYALAM LETTER VOCALIC RMALAYALAM LETTER VOCALIC " + - "LMALAYALAM LETTER EMALAYALAM LETTER EEMALAYALAM LETTER AIMALAYALAM LETTE" + - "R OMALAYALAM LETTER OOMALAYALAM LETTER AUMALAYALAM LETTER KAMALAYALAM LE" + - "TTER KHAMALAYALAM LETTER GAMALAYALAM LETTER GHAMALAYALAM LETTER NGAMALAY") + ("" + - "ALAM LETTER CAMALAYALAM LETTER CHAMALAYALAM LETTER JAMALAYALAM LETTER JH" + - "AMALAYALAM LETTER NYAMALAYALAM LETTER TTAMALAYALAM LETTER TTHAMALAYALAM " + - "LETTER DDAMALAYALAM LETTER DDHAMALAYALAM LETTER NNAMALAYALAM LETTER TAMA" + - "LAYALAM LETTER THAMALAYALAM LETTER DAMALAYALAM LETTER DHAMALAYALAM LETTE" + - "R NAMALAYALAM LETTER NNNAMALAYALAM LETTER PAMALAYALAM LETTER PHAMALAYALA" + - "M LETTER BAMALAYALAM LETTER BHAMALAYALAM LETTER MAMALAYALAM LETTER YAMAL" + - "AYALAM LETTER RAMALAYALAM LETTER RRAMALAYALAM LETTER LAMALAYALAM LETTER " + - "LLAMALAYALAM LETTER LLLAMALAYALAM LETTER VAMALAYALAM LETTER SHAMALAYALAM" + - " LETTER SSAMALAYALAM LETTER SAMALAYALAM LETTER HAMALAYALAM LETTER TTTAMA" + - "LAYALAM SIGN AVAGRAHAMALAYALAM VOWEL SIGN AAMALAYALAM VOWEL SIGN IMALAYA" + - "LAM VOWEL SIGN IIMALAYALAM VOWEL SIGN UMALAYALAM VOWEL SIGN UUMALAYALAM " + - "VOWEL SIGN VOCALIC RMALAYALAM VOWEL SIGN VOCALIC RRMALAYALAM VOWEL SIGN " + - "EMALAYALAM VOWEL SIGN EEMALAYALAM VOWEL SIGN AIMALAYALAM VOWEL SIGN OMAL" + - "AYALAM VOWEL SIGN OOMALAYALAM VOWEL SIGN AUMALAYALAM SIGN VIRAMAMALAYALA" + - "M LETTER DOT REPHMALAYALAM SIGN PARAMALAYALAM LETTER CHILLU MMALAYALAM L" + - "ETTER CHILLU YMALAYALAM LETTER CHILLU LLLMALAYALAM AU LENGTH MARKMALAYAL" + - "AM FRACTION ONE ONE-HUNDRED-AND-SIXTIETHMALAYALAM FRACTION ONE FORTIETHM" + - "ALAYALAM FRACTION THREE EIGHTIETHSMALAYALAM FRACTION ONE TWENTIETHMALAYA" + - "LAM FRACTION ONE TENTHMALAYALAM FRACTION THREE TWENTIETHSMALAYALAM FRACT" + - "ION ONE FIFTHMALAYALAM LETTER ARCHAIC IIMALAYALAM LETTER VOCALIC RRMALAY" + - "ALAM LETTER VOCALIC LLMALAYALAM VOWEL SIGN VOCALIC LMALAYALAM VOWEL SIGN" + - " VOCALIC LLMALAYALAM DIGIT ZEROMALAYALAM DIGIT ONEMALAYALAM DIGIT TWOMAL" + - "AYALAM DIGIT THREEMALAYALAM DIGIT FOURMALAYALAM DIGIT FIVEMALAYALAM DIGI" + - "T SIXMALAYALAM DIGIT SEVENMALAYALAM DIGIT EIGHTMALAYALAM DIGIT NINEMALAY" + - "ALAM NUMBER TENMALAYALAM NUMBER ONE HUNDREDMALAYALAM NUMBER ONE THOUSAND" + - "MALAYALAM FRACTION ONE QUARTERMALAYALAM FRACTION ONE HALFMALAYALAM FRACT" + - "ION THREE QUARTERSMALAYALAM FRACTION ONE SIXTEENTHMALAYALAM FRACTION ONE" + - " EIGHTHMALAYALAM FRACTION THREE SIXTEENTHSMALAYALAM DATE MARKMALAYALAM L" + - "ETTER CHILLU NNMALAYALAM LETTER CHILLU NMALAYALAM LETTER CHILLU RRMALAYA" + - "LAM LETTER CHILLU LMALAYALAM LETTER CHILLU LLMALAYALAM LETTER CHILLU KSI" + - "NHALA SIGN ANUSVARAYASINHALA SIGN VISARGAYASINHALA LETTER AYANNASINHALA " + - "LETTER AAYANNASINHALA LETTER AEYANNASINHALA LETTER AEEYANNASINHALA LETTE" + - "R IYANNASINHALA LETTER IIYANNASINHALA LETTER UYANNASINHALA LETTER UUYANN" + - "ASINHALA LETTER IRUYANNASINHALA LETTER IRUUYANNASINHALA LETTER ILUYANNAS" + - "INHALA LETTER ILUUYANNASINHALA LETTER EYANNASINHALA LETTER EEYANNASINHAL" + - "A LETTER AIYANNASINHALA LETTER OYANNASINHALA LETTER OOYANNASINHALA LETTE" + - "R AUYANNASINHALA LETTER ALPAPRAANA KAYANNASINHALA LETTER MAHAAPRAANA KAY" + - "ANNASINHALA LETTER ALPAPRAANA GAYANNASINHALA LETTER MAHAAPRAANA GAYANNAS" + - "INHALA LETTER KANTAJA NAASIKYAYASINHALA LETTER SANYAKA GAYANNASINHALA LE" + - "TTER ALPAPRAANA CAYANNASINHALA LETTER MAHAAPRAANA CAYANNASINHALA LETTER " + - "ALPAPRAANA JAYANNASINHALA LETTER MAHAAPRAANA JAYANNASINHALA LETTER TAALU" + - "JA NAASIKYAYASINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYASINHALA LETTER S" + - "ANYAKA JAYANNASINHALA LETTER ALPAPRAANA TTAYANNASINHALA LETTER MAHAAPRAA" + - "NA TTAYANNASINHALA LETTER ALPAPRAANA DDAYANNASINHALA LETTER MAHAAPRAANA " + - "DDAYANNASINHALA LETTER MUURDHAJA NAYANNASINHALA LETTER SANYAKA DDAYANNAS" + - "INHALA LETTER ALPAPRAANA TAYANNASINHALA LETTER MAHAAPRAANA TAYANNASINHAL" + - "A LETTER ALPAPRAANA DAYANNASINHALA LETTER MAHAAPRAANA DAYANNASINHALA LET" + - "TER DANTAJA NAYANNASINHALA LETTER SANYAKA DAYANNASINHALA LETTER ALPAPRAA" + - "NA PAYANNASINHALA LETTER MAHAAPRAANA PAYANNASINHALA LETTER ALPAPRAANA BA" + - "YANNASINHALA LETTER MAHAAPRAANA BAYANNASINHALA LETTER MAYANNASINHALA LET" + - "TER AMBA BAYANNASINHALA LETTER YAYANNASINHALA LETTER RAYANNASINHALA LETT" + - "ER DANTAJA LAYANNASINHALA LETTER VAYANNASINHALA LETTER TAALUJA SAYANNASI" + - "NHALA LETTER MUURDHAJA SAYANNASINHALA LETTER DANTAJA SAYANNASINHALA LETT" + - "ER HAYANNASINHALA LETTER MUURDHAJA LAYANNASINHALA LETTER FAYANNASINHALA " + - "SIGN AL-LAKUNASINHALA VOWEL SIGN AELA-PILLASINHALA VOWEL SIGN KETTI AEDA" + - "-PILLASINHALA VOWEL SIGN DIGA AEDA-PILLASINHALA VOWEL SIGN KETTI IS-PILL" + - "ASINHALA VOWEL SIGN DIGA IS-PILLASINHALA VOWEL SIGN KETTI PAA-PILLASINHA" + - "LA VOWEL SIGN DIGA PAA-PILLASINHALA VOWEL SIGN GAETTA-PILLASINHALA VOWEL" + - " SIGN KOMBUVASINHALA VOWEL SIGN DIGA KOMBUVASINHALA VOWEL SIGN KOMBU DEK" + - "ASINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLASINHALA VOWEL SIGN KOMBUVA HAA" + - " DIGA AELA-PILLASINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTASINHALA VOWEL " + - "SIGN GAYANUKITTASINHALA LITH DIGIT ZEROSINHALA LITH DIGIT ONESINHALA LIT" + - "H DIGIT TWOSINHALA LITH DIGIT THREESINHALA LITH DIGIT FOURSINHALA LITH D" + - "IGIT FIVESINHALA LITH DIGIT SIXSINHALA LITH DIGIT SEVENSINHALA LITH DIGI") + ("" + - "T EIGHTSINHALA LITH DIGIT NINESINHALA VOWEL SIGN DIGA GAETTA-PILLASINHAL" + - "A VOWEL SIGN DIGA GAYANUKITTASINHALA PUNCTUATION KUNDDALIYATHAI CHARACTE" + - "R KO KAITHAI CHARACTER KHO KHAITHAI CHARACTER KHO KHUATTHAI CHARACTER KH" + - "O KHWAITHAI CHARACTER KHO KHONTHAI CHARACTER KHO RAKHANGTHAI CHARACTER N" + - "GO NGUTHAI CHARACTER CHO CHANTHAI CHARACTER CHO CHINGTHAI CHARACTER CHO " + - "CHANGTHAI CHARACTER SO SOTHAI CHARACTER CHO CHOETHAI CHARACTER YO YINGTH" + - "AI CHARACTER DO CHADATHAI CHARACTER TO PATAKTHAI CHARACTER THO THANTHAI " + - "CHARACTER THO NANGMONTHOTHAI CHARACTER THO PHUTHAOTHAI CHARACTER NO NENT" + - "HAI CHARACTER DO DEKTHAI CHARACTER TO TAOTHAI CHARACTER THO THUNGTHAI CH" + - "ARACTER THO THAHANTHAI CHARACTER THO THONGTHAI CHARACTER NO NUTHAI CHARA" + - "CTER BO BAIMAITHAI CHARACTER PO PLATHAI CHARACTER PHO PHUNGTHAI CHARACTE" + - "R FO FATHAI CHARACTER PHO PHANTHAI CHARACTER FO FANTHAI CHARACTER PHO SA" + - "MPHAOTHAI CHARACTER MO MATHAI CHARACTER YO YAKTHAI CHARACTER RO RUATHAI " + - "CHARACTER RUTHAI CHARACTER LO LINGTHAI CHARACTER LUTHAI CHARACTER WO WAE" + - "NTHAI CHARACTER SO SALATHAI CHARACTER SO RUSITHAI CHARACTER SO SUATHAI C" + - "HARACTER HO HIPTHAI CHARACTER LO CHULATHAI CHARACTER O ANGTHAI CHARACTER" + - " HO NOKHUKTHAI CHARACTER PAIYANNOITHAI CHARACTER SARA ATHAI CHARACTER MA" + - "I HAN-AKATTHAI CHARACTER SARA AATHAI CHARACTER SARA AMTHAI CHARACTER SAR" + - "A ITHAI CHARACTER SARA IITHAI CHARACTER SARA UETHAI CHARACTER SARA UEETH" + - "AI CHARACTER SARA UTHAI CHARACTER SARA UUTHAI CHARACTER PHINTHUTHAI CURR" + - "ENCY SYMBOL BAHTTHAI CHARACTER SARA ETHAI CHARACTER SARA AETHAI CHARACTE" + - "R SARA OTHAI CHARACTER SARA AI MAIMUANTHAI CHARACTER SARA AI MAIMALAITHA" + - "I CHARACTER LAKKHANGYAOTHAI CHARACTER MAIYAMOKTHAI CHARACTER MAITAIKHUTH" + - "AI CHARACTER MAI EKTHAI CHARACTER MAI THOTHAI CHARACTER MAI TRITHAI CHAR" + - "ACTER MAI CHATTAWATHAI CHARACTER THANTHAKHATTHAI CHARACTER NIKHAHITTHAI " + - "CHARACTER YAMAKKANTHAI CHARACTER FONGMANTHAI DIGIT ZEROTHAI DIGIT ONETHA" + - "I DIGIT TWOTHAI DIGIT THREETHAI DIGIT FOURTHAI DIGIT FIVETHAI DIGIT SIXT" + - "HAI DIGIT SEVENTHAI DIGIT EIGHTTHAI DIGIT NINETHAI CHARACTER ANGKHANKHUT" + - "HAI CHARACTER KHOMUTLAO LETTER KOLAO LETTER KHO SUNGLAO LETTER KHO TAMLA" + - "O LETTER NGOLAO LETTER COLAO LETTER SO TAMLAO LETTER NYOLAO LETTER DOLAO" + - " LETTER TOLAO LETTER THO SUNGLAO LETTER THO TAMLAO LETTER NOLAO LETTER B" + - "OLAO LETTER POLAO LETTER PHO SUNGLAO LETTER FO TAMLAO LETTER PHO TAMLAO " + - "LETTER FO SUNGLAO LETTER MOLAO LETTER YOLAO LETTER LO LINGLAO LETTER LO " + - "LOOTLAO LETTER WOLAO LETTER SO SUNGLAO LETTER HO SUNGLAO LETTER OLAO LET" + - "TER HO TAMLAO ELLIPSISLAO VOWEL SIGN ALAO VOWEL SIGN MAI KANLAO VOWEL SI" + - "GN AALAO VOWEL SIGN AMLAO VOWEL SIGN ILAO VOWEL SIGN IILAO VOWEL SIGN YL" + - "AO VOWEL SIGN YYLAO VOWEL SIGN ULAO VOWEL SIGN UULAO VOWEL SIGN MAI KONL" + - "AO SEMIVOWEL SIGN LOLAO SEMIVOWEL SIGN NYOLAO VOWEL SIGN ELAO VOWEL SIGN" + - " EILAO VOWEL SIGN OLAO VOWEL SIGN AYLAO VOWEL SIGN AILAO KO LALAO TONE M" + - "AI EKLAO TONE MAI THOLAO TONE MAI TILAO TONE MAI CATAWALAO CANCELLATION " + - "MARKLAO NIGGAHITALAO DIGIT ZEROLAO DIGIT ONELAO DIGIT TWOLAO DIGIT THREE" + - "LAO DIGIT FOURLAO DIGIT FIVELAO DIGIT SIXLAO DIGIT SEVENLAO DIGIT EIGHTL" + - "AO DIGIT NINELAO HO NOLAO HO MOLAO LETTER KHMU GOLAO LETTER KHMU NYOTIBE" + - "TAN SYLLABLE OMTIBETAN MARK GTER YIG MGO TRUNCATED ATIBETAN MARK GTER YI" + - "G MGO -UM RNAM BCAD MATIBETAN MARK GTER YIG MGO -UM GTER TSHEG MATIBETAN" + - " MARK INITIAL YIG MGO MDUN MATIBETAN MARK CLOSING YIG MGO SGAB MATIBETAN" + - " MARK CARET YIG MGO PHUR SHAD MATIBETAN MARK YIG MGO TSHEG SHAD MATIBETA" + - "N MARK SBRUL SHADTIBETAN MARK BSKUR YIG MGOTIBETAN MARK BKA- SHOG YIG MG" + - "OTIBETAN MARK INTERSYLLABIC TSHEGTIBETAN MARK DELIMITER TSHEG BSTARTIBET" + - "AN MARK SHADTIBETAN MARK NYIS SHADTIBETAN MARK TSHEG SHADTIBETAN MARK NY" + - "IS TSHEG SHADTIBETAN MARK RIN CHEN SPUNGS SHADTIBETAN MARK RGYA GRAM SHA" + - "DTIBETAN MARK CARET -DZUD RTAGS ME LONG CANTIBETAN MARK GTER TSHEGTIBETA" + - "N LOGOTYPE SIGN CHAD RTAGSTIBETAN LOGOTYPE SIGN LHAG RTAGSTIBETAN ASTROL" + - "OGICAL SIGN SGRA GCAN -CHAR RTAGSTIBETAN ASTROLOGICAL SIGN -KHYUD PATIBE" + - "TAN ASTROLOGICAL SIGN SDONG TSHUGSTIBETAN SIGN RDEL DKAR GCIGTIBETAN SIG" + - "N RDEL DKAR GNYISTIBETAN SIGN RDEL DKAR GSUMTIBETAN SIGN RDEL NAG GCIGTI" + - "BETAN SIGN RDEL NAG GNYISTIBETAN SIGN RDEL DKAR RDEL NAGTIBETAN DIGIT ZE" + - "ROTIBETAN DIGIT ONETIBETAN DIGIT TWOTIBETAN DIGIT THREETIBETAN DIGIT FOU" + - "RTIBETAN DIGIT FIVETIBETAN DIGIT SIXTIBETAN DIGIT SEVENTIBETAN DIGIT EIG" + - "HTTIBETAN DIGIT NINETIBETAN DIGIT HALF ONETIBETAN DIGIT HALF TWOTIBETAN " + - "DIGIT HALF THREETIBETAN DIGIT HALF FOURTIBETAN DIGIT HALF FIVETIBETAN DI" + - "GIT HALF SIXTIBETAN DIGIT HALF SEVENTIBETAN DIGIT HALF EIGHTTIBETAN DIGI" + - "T HALF NINETIBETAN DIGIT HALF ZEROTIBETAN MARK BSDUS RTAGSTIBETAN MARK N" + - "GAS BZUNG NYI ZLATIBETAN MARK CARET -DZUD RTAGS BZHI MIG CANTIBETAN MARK") + ("" + - " NGAS BZUNG SGOR RTAGSTIBETAN MARK CHE MGOTIBETAN MARK TSA -PHRUTIBETAN " + - "MARK GUG RTAGS GYONTIBETAN MARK GUG RTAGS GYASTIBETAN MARK ANG KHANG GYO" + - "NTIBETAN MARK ANG KHANG GYASTIBETAN SIGN YAR TSHESTIBETAN SIGN MAR TSHES" + - "TIBETAN LETTER KATIBETAN LETTER KHATIBETAN LETTER GATIBETAN LETTER GHATI" + - "BETAN LETTER NGATIBETAN LETTER CATIBETAN LETTER CHATIBETAN LETTER JATIBE" + - "TAN LETTER NYATIBETAN LETTER TTATIBETAN LETTER TTHATIBETAN LETTER DDATIB" + - "ETAN LETTER DDHATIBETAN LETTER NNATIBETAN LETTER TATIBETAN LETTER THATIB" + - "ETAN LETTER DATIBETAN LETTER DHATIBETAN LETTER NATIBETAN LETTER PATIBETA" + - "N LETTER PHATIBETAN LETTER BATIBETAN LETTER BHATIBETAN LETTER MATIBETAN " + - "LETTER TSATIBETAN LETTER TSHATIBETAN LETTER DZATIBETAN LETTER DZHATIBETA" + - "N LETTER WATIBETAN LETTER ZHATIBETAN LETTER ZATIBETAN LETTER -ATIBETAN L" + - "ETTER YATIBETAN LETTER RATIBETAN LETTER LATIBETAN LETTER SHATIBETAN LETT" + - "ER SSATIBETAN LETTER SATIBETAN LETTER HATIBETAN LETTER ATIBETAN LETTER K" + - "SSATIBETAN LETTER FIXED-FORM RATIBETAN LETTER KKATIBETAN LETTER RRATIBET" + - "AN VOWEL SIGN AATIBETAN VOWEL SIGN ITIBETAN VOWEL SIGN IITIBETAN VOWEL S" + - "IGN UTIBETAN VOWEL SIGN UUTIBETAN VOWEL SIGN VOCALIC RTIBETAN VOWEL SIGN" + - " VOCALIC RRTIBETAN VOWEL SIGN VOCALIC LTIBETAN VOWEL SIGN VOCALIC LLTIBE" + - "TAN VOWEL SIGN ETIBETAN VOWEL SIGN EETIBETAN VOWEL SIGN OTIBETAN VOWEL S" + - "IGN OOTIBETAN SIGN RJES SU NGA ROTIBETAN SIGN RNAM BCADTIBETAN VOWEL SIG" + - "N REVERSED ITIBETAN VOWEL SIGN REVERSED IITIBETAN SIGN NYI ZLA NAA DATIB" + - "ETAN SIGN SNA LDANTIBETAN MARK HALANTATIBETAN MARK PALUTATIBETAN SIGN LC" + - "I RTAGSTIBETAN SIGN YANG RTAGSTIBETAN SIGN LCE TSA CANTIBETAN SIGN MCHU " + - "CANTIBETAN SIGN GRU CAN RGYINGSTIBETAN SIGN GRU MED RGYINGSTIBETAN SIGN " + - "INVERTED MCHU CANTIBETAN SUBJOINED SIGN LCE TSA CANTIBETAN SUBJOINED SIG" + - "N MCHU CANTIBETAN SUBJOINED SIGN INVERTED MCHU CANTIBETAN SUBJOINED LETT" + - "ER KATIBETAN SUBJOINED LETTER KHATIBETAN SUBJOINED LETTER GATIBETAN SUBJ" + - "OINED LETTER GHATIBETAN SUBJOINED LETTER NGATIBETAN SUBJOINED LETTER CAT" + - "IBETAN SUBJOINED LETTER CHATIBETAN SUBJOINED LETTER JATIBETAN SUBJOINED " + - "LETTER NYATIBETAN SUBJOINED LETTER TTATIBETAN SUBJOINED LETTER TTHATIBET" + - "AN SUBJOINED LETTER DDATIBETAN SUBJOINED LETTER DDHATIBETAN SUBJOINED LE" + - "TTER NNATIBETAN SUBJOINED LETTER TATIBETAN SUBJOINED LETTER THATIBETAN S" + - "UBJOINED LETTER DATIBETAN SUBJOINED LETTER DHATIBETAN SUBJOINED LETTER N" + - "ATIBETAN SUBJOINED LETTER PATIBETAN SUBJOINED LETTER PHATIBETAN SUBJOINE" + - "D LETTER BATIBETAN SUBJOINED LETTER BHATIBETAN SUBJOINED LETTER MATIBETA" + - "N SUBJOINED LETTER TSATIBETAN SUBJOINED LETTER TSHATIBETAN SUBJOINED LET" + - "TER DZATIBETAN SUBJOINED LETTER DZHATIBETAN SUBJOINED LETTER WATIBETAN S" + - "UBJOINED LETTER ZHATIBETAN SUBJOINED LETTER ZATIBETAN SUBJOINED LETTER -" + - "ATIBETAN SUBJOINED LETTER YATIBETAN SUBJOINED LETTER RATIBETAN SUBJOINED" + - " LETTER LATIBETAN SUBJOINED LETTER SHATIBETAN SUBJOINED LETTER SSATIBETA" + - "N SUBJOINED LETTER SATIBETAN SUBJOINED LETTER HATIBETAN SUBJOINED LETTER" + - " ATIBETAN SUBJOINED LETTER KSSATIBETAN SUBJOINED LETTER FIXED-FORM WATIB" + - "ETAN SUBJOINED LETTER FIXED-FORM YATIBETAN SUBJOINED LETTER FIXED-FORM R" + - "ATIBETAN KU RU KHATIBETAN KU RU KHA BZHI MIG CANTIBETAN CANTILLATION SIG" + - "N HEAVY BEATTIBETAN CANTILLATION SIGN LIGHT BEATTIBETAN CANTILLATION SIG" + - "N CANG TE-UTIBETAN CANTILLATION SIGN SBUB -CHALTIBETAN SYMBOL DRIL BUTIB" + - "ETAN SYMBOL RDO RJETIBETAN SYMBOL PADMA GDANTIBETAN SYMBOL RDO RJE RGYA " + - "GRAMTIBETAN SYMBOL PHUR PATIBETAN SYMBOL NOR BUTIBETAN SYMBOL NOR BU NYI" + - "S -KHYILTIBETAN SYMBOL NOR BU GSUM -KHYILTIBETAN SYMBOL NOR BU BZHI -KHY" + - "ILTIBETAN SIGN RDEL NAG RDEL DKARTIBETAN SIGN RDEL NAG GSUMTIBETAN MARK " + - "BSKA- SHOG GI MGO RGYANTIBETAN MARK MNYAM YIG GI MGO RGYANTIBETAN MARK N" + - "YIS TSHEGTIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MATIBETAN MARK CL" + - "OSING BRDA RNYING YIG MGO SGAB MARIGHT-FACING SVASTI SIGNLEFT-FACING SVA" + - "STI SIGNRIGHT-FACING SVASTI SIGN WITH DOTSLEFT-FACING SVASTI SIGN WITH D" + - "OTSTIBETAN MARK LEADING MCHAN RTAGSTIBETAN MARK TRAILING MCHAN RTAGSMYAN" + - "MAR LETTER KAMYANMAR LETTER KHAMYANMAR LETTER GAMYANMAR LETTER GHAMYANMA" + - "R LETTER NGAMYANMAR LETTER CAMYANMAR LETTER CHAMYANMAR LETTER JAMYANMAR " + - "LETTER JHAMYANMAR LETTER NYAMYANMAR LETTER NNYAMYANMAR LETTER TTAMYANMAR" + - " LETTER TTHAMYANMAR LETTER DDAMYANMAR LETTER DDHAMYANMAR LETTER NNAMYANM" + - "AR LETTER TAMYANMAR LETTER THAMYANMAR LETTER DAMYANMAR LETTER DHAMYANMAR" + - " LETTER NAMYANMAR LETTER PAMYANMAR LETTER PHAMYANMAR LETTER BAMYANMAR LE" + - "TTER BHAMYANMAR LETTER MAMYANMAR LETTER YAMYANMAR LETTER RAMYANMAR LETTE" + - "R LAMYANMAR LETTER WAMYANMAR LETTER SAMYANMAR LETTER HAMYANMAR LETTER LL" + - "AMYANMAR LETTER AMYANMAR LETTER SHAN AMYANMAR LETTER IMYANMAR LETTER IIM" + - "YANMAR LETTER UMYANMAR LETTER UUMYANMAR LETTER EMYANMAR LETTER MON EMYAN") + ("" + - "MAR LETTER OMYANMAR LETTER AUMYANMAR VOWEL SIGN TALL AAMYANMAR VOWEL SIG" + - "N AAMYANMAR VOWEL SIGN IMYANMAR VOWEL SIGN IIMYANMAR VOWEL SIGN UMYANMAR" + - " VOWEL SIGN UUMYANMAR VOWEL SIGN EMYANMAR VOWEL SIGN AIMYANMAR VOWEL SIG" + - "N MON IIMYANMAR VOWEL SIGN MON OMYANMAR VOWEL SIGN E ABOVEMYANMAR SIGN A" + - "NUSVARAMYANMAR SIGN DOT BELOWMYANMAR SIGN VISARGAMYANMAR SIGN VIRAMAMYAN" + - "MAR SIGN ASATMYANMAR CONSONANT SIGN MEDIAL YAMYANMAR CONSONANT SIGN MEDI" + - "AL RAMYANMAR CONSONANT SIGN MEDIAL WAMYANMAR CONSONANT SIGN MEDIAL HAMYA" + - "NMAR LETTER GREAT SAMYANMAR DIGIT ZEROMYANMAR DIGIT ONEMYANMAR DIGIT TWO" + - "MYANMAR DIGIT THREEMYANMAR DIGIT FOURMYANMAR DIGIT FIVEMYANMAR DIGIT SIX" + - "MYANMAR DIGIT SEVENMYANMAR DIGIT EIGHTMYANMAR DIGIT NINEMYANMAR SIGN LIT" + - "TLE SECTIONMYANMAR SIGN SECTIONMYANMAR SYMBOL LOCATIVEMYANMAR SYMBOL COM" + - "PLETEDMYANMAR SYMBOL AFOREMENTIONEDMYANMAR SYMBOL GENITIVEMYANMAR LETTER" + - " SHAMYANMAR LETTER SSAMYANMAR LETTER VOCALIC RMYANMAR LETTER VOCALIC RRM" + - "YANMAR LETTER VOCALIC LMYANMAR LETTER VOCALIC LLMYANMAR VOWEL SIGN VOCAL" + - "IC RMYANMAR VOWEL SIGN VOCALIC RRMYANMAR VOWEL SIGN VOCALIC LMYANMAR VOW" + - "EL SIGN VOCALIC LLMYANMAR LETTER MON NGAMYANMAR LETTER MON JHAMYANMAR LE" + - "TTER MON BBAMYANMAR LETTER MON BBEMYANMAR CONSONANT SIGN MON MEDIAL NAMY" + - "ANMAR CONSONANT SIGN MON MEDIAL MAMYANMAR CONSONANT SIGN MON MEDIAL LAMY" + - "ANMAR LETTER SGAW KAREN SHAMYANMAR VOWEL SIGN SGAW KAREN EUMYANMAR TONE " + - "MARK SGAW KAREN HATHIMYANMAR TONE MARK SGAW KAREN KE PHOMYANMAR LETTER W" + - "ESTERN PWO KAREN THAMYANMAR LETTER WESTERN PWO KAREN PWAMYANMAR VOWEL SI" + - "GN WESTERN PWO KAREN EUMYANMAR VOWEL SIGN WESTERN PWO KAREN UEMYANMAR SI" + - "GN WESTERN PWO KAREN TONE-1MYANMAR SIGN WESTERN PWO KAREN TONE-2MYANMAR " + - "SIGN WESTERN PWO KAREN TONE-3MYANMAR SIGN WESTERN PWO KAREN TONE-4MYANMA" + - "R SIGN WESTERN PWO KAREN TONE-5MYANMAR LETTER EASTERN PWO KAREN NNAMYANM" + - "AR LETTER EASTERN PWO KAREN YWAMYANMAR LETTER EASTERN PWO KAREN GHWAMYAN" + - "MAR VOWEL SIGN GEBA KAREN IMYANMAR VOWEL SIGN KAYAH OEMYANMAR VOWEL SIGN" + - " KAYAH UMYANMAR VOWEL SIGN KAYAH EEMYANMAR LETTER SHAN KAMYANMAR LETTER " + - "SHAN KHAMYANMAR LETTER SHAN GAMYANMAR LETTER SHAN CAMYANMAR LETTER SHAN " + - "ZAMYANMAR LETTER SHAN NYAMYANMAR LETTER SHAN DAMYANMAR LETTER SHAN NAMYA" + - "NMAR LETTER SHAN PHAMYANMAR LETTER SHAN FAMYANMAR LETTER SHAN BAMYANMAR " + - "LETTER SHAN THAMYANMAR LETTER SHAN HAMYANMAR CONSONANT SIGN SHAN MEDIAL " + - "WAMYANMAR VOWEL SIGN SHAN AAMYANMAR VOWEL SIGN SHAN EMYANMAR VOWEL SIGN " + - "SHAN E ABOVEMYANMAR VOWEL SIGN SHAN FINAL YMYANMAR SIGN SHAN TONE-2MYANM" + - "AR SIGN SHAN TONE-3MYANMAR SIGN SHAN TONE-5MYANMAR SIGN SHAN TONE-6MYANM" + - "AR SIGN SHAN COUNCIL TONE-2MYANMAR SIGN SHAN COUNCIL TONE-3MYANMAR SIGN " + - "SHAN COUNCIL EMPHATIC TONEMYANMAR LETTER RUMAI PALAUNG FAMYANMAR SIGN RU" + - "MAI PALAUNG TONE-5MYANMAR SHAN DIGIT ZEROMYANMAR SHAN DIGIT ONEMYANMAR S" + - "HAN DIGIT TWOMYANMAR SHAN DIGIT THREEMYANMAR SHAN DIGIT FOURMYANMAR SHAN" + - " DIGIT FIVEMYANMAR SHAN DIGIT SIXMYANMAR SHAN DIGIT SEVENMYANMAR SHAN DI" + - "GIT EIGHTMYANMAR SHAN DIGIT NINEMYANMAR SIGN KHAMTI TONE-1MYANMAR SIGN K" + - "HAMTI TONE-3MYANMAR VOWEL SIGN AITON AMYANMAR VOWEL SIGN AITON AIMYANMAR" + - " SYMBOL SHAN ONEMYANMAR SYMBOL SHAN EXCLAMATIONGEORGIAN CAPITAL LETTER A" + - "NGEORGIAN CAPITAL LETTER BANGEORGIAN CAPITAL LETTER GANGEORGIAN CAPITAL " + - "LETTER DONGEORGIAN CAPITAL LETTER ENGEORGIAN CAPITAL LETTER VINGEORGIAN " + - "CAPITAL LETTER ZENGEORGIAN CAPITAL LETTER TANGEORGIAN CAPITAL LETTER ING" + - "EORGIAN CAPITAL LETTER KANGEORGIAN CAPITAL LETTER LASGEORGIAN CAPITAL LE" + - "TTER MANGEORGIAN CAPITAL LETTER NARGEORGIAN CAPITAL LETTER ONGEORGIAN CA" + - "PITAL LETTER PARGEORGIAN CAPITAL LETTER ZHARGEORGIAN CAPITAL LETTER RAEG" + - "EORGIAN CAPITAL LETTER SANGEORGIAN CAPITAL LETTER TARGEORGIAN CAPITAL LE" + - "TTER UNGEORGIAN CAPITAL LETTER PHARGEORGIAN CAPITAL LETTER KHARGEORGIAN " + - "CAPITAL LETTER GHANGEORGIAN CAPITAL LETTER QARGEORGIAN CAPITAL LETTER SH" + - "INGEORGIAN CAPITAL LETTER CHINGEORGIAN CAPITAL LETTER CANGEORGIAN CAPITA" + - "L LETTER JILGEORGIAN CAPITAL LETTER CILGEORGIAN CAPITAL LETTER CHARGEORG" + - "IAN CAPITAL LETTER XANGEORGIAN CAPITAL LETTER JHANGEORGIAN CAPITAL LETTE" + - "R HAEGEORGIAN CAPITAL LETTER HEGEORGIAN CAPITAL LETTER HIEGEORGIAN CAPIT" + - "AL LETTER WEGEORGIAN CAPITAL LETTER HARGEORGIAN CAPITAL LETTER HOEGEORGI" + - "AN CAPITAL LETTER YNGEORGIAN CAPITAL LETTER AENGEORGIAN LETTER ANGEORGIA" + - "N LETTER BANGEORGIAN LETTER GANGEORGIAN LETTER DONGEORGIAN LETTER ENGEOR" + - "GIAN LETTER VINGEORGIAN LETTER ZENGEORGIAN LETTER TANGEORGIAN LETTER ING" + - "EORGIAN LETTER KANGEORGIAN LETTER LASGEORGIAN LETTER MANGEORGIAN LETTER " + - "NARGEORGIAN LETTER ONGEORGIAN LETTER PARGEORGIAN LETTER ZHARGEORGIAN LET" + - "TER RAEGEORGIAN LETTER SANGEORGIAN LETTER TARGEORGIAN LETTER UNGEORGIAN " + - "LETTER PHARGEORGIAN LETTER KHARGEORGIAN LETTER GHANGEORGIAN LETTER QARGE") + ("" + - "ORGIAN LETTER SHINGEORGIAN LETTER CHINGEORGIAN LETTER CANGEORGIAN LETTER" + - " JILGEORGIAN LETTER CILGEORGIAN LETTER CHARGEORGIAN LETTER XANGEORGIAN L" + - "ETTER JHANGEORGIAN LETTER HAEGEORGIAN LETTER HEGEORGIAN LETTER HIEGEORGI" + - "AN LETTER WEGEORGIAN LETTER HARGEORGIAN LETTER HOEGEORGIAN LETTER FIGEOR" + - "GIAN LETTER YNGEORGIAN LETTER ELIFIGEORGIAN LETTER TURNED GANGEORGIAN LE" + - "TTER AINGEORGIAN PARAGRAPH SEPARATORMODIFIER LETTER GEORGIAN NARGEORGIAN" + - " LETTER AENGEORGIAN LETTER HARD SIGNGEORGIAN LETTER LABIAL SIGNHANGUL CH" + - "OSEONG KIYEOKHANGUL CHOSEONG SSANGKIYEOKHANGUL CHOSEONG NIEUNHANGUL CHOS" + - "EONG TIKEUTHANGUL CHOSEONG SSANGTIKEUTHANGUL CHOSEONG RIEULHANGUL CHOSEO" + - "NG MIEUMHANGUL CHOSEONG PIEUPHANGUL CHOSEONG SSANGPIEUPHANGUL CHOSEONG S" + - "IOSHANGUL CHOSEONG SSANGSIOSHANGUL CHOSEONG IEUNGHANGUL CHOSEONG CIEUCHA" + - "NGUL CHOSEONG SSANGCIEUCHANGUL CHOSEONG CHIEUCHHANGUL CHOSEONG KHIEUKHHA" + - "NGUL CHOSEONG THIEUTHHANGUL CHOSEONG PHIEUPHHANGUL CHOSEONG HIEUHHANGUL " + - "CHOSEONG NIEUN-KIYEOKHANGUL CHOSEONG SSANGNIEUNHANGUL CHOSEONG NIEUN-TIK" + - "EUTHANGUL CHOSEONG NIEUN-PIEUPHANGUL CHOSEONG TIKEUT-KIYEOKHANGUL CHOSEO" + - "NG RIEUL-NIEUNHANGUL CHOSEONG SSANGRIEULHANGUL CHOSEONG RIEUL-HIEUHHANGU" + - "L CHOSEONG KAPYEOUNRIEULHANGUL CHOSEONG MIEUM-PIEUPHANGUL CHOSEONG KAPYE" + - "OUNMIEUMHANGUL CHOSEONG PIEUP-KIYEOKHANGUL CHOSEONG PIEUP-NIEUNHANGUL CH" + - "OSEONG PIEUP-TIKEUTHANGUL CHOSEONG PIEUP-SIOSHANGUL CHOSEONG PIEUP-SIOS-" + - "KIYEOKHANGUL CHOSEONG PIEUP-SIOS-TIKEUTHANGUL CHOSEONG PIEUP-SIOS-PIEUPH" + - "ANGUL CHOSEONG PIEUP-SSANGSIOSHANGUL CHOSEONG PIEUP-SIOS-CIEUCHANGUL CHO" + - "SEONG PIEUP-CIEUCHANGUL CHOSEONG PIEUP-CHIEUCHHANGUL CHOSEONG PIEUP-THIE" + - "UTHHANGUL CHOSEONG PIEUP-PHIEUPHHANGUL CHOSEONG KAPYEOUNPIEUPHANGUL CHOS" + - "EONG KAPYEOUNSSANGPIEUPHANGUL CHOSEONG SIOS-KIYEOKHANGUL CHOSEONG SIOS-N" + - "IEUNHANGUL CHOSEONG SIOS-TIKEUTHANGUL CHOSEONG SIOS-RIEULHANGUL CHOSEONG" + - " SIOS-MIEUMHANGUL CHOSEONG SIOS-PIEUPHANGUL CHOSEONG SIOS-PIEUP-KIYEOKHA" + - "NGUL CHOSEONG SIOS-SSANGSIOSHANGUL CHOSEONG SIOS-IEUNGHANGUL CHOSEONG SI" + - "OS-CIEUCHANGUL CHOSEONG SIOS-CHIEUCHHANGUL CHOSEONG SIOS-KHIEUKHHANGUL C" + - "HOSEONG SIOS-THIEUTHHANGUL CHOSEONG SIOS-PHIEUPHHANGUL CHOSEONG SIOS-HIE" + - "UHHANGUL CHOSEONG CHITUEUMSIOSHANGUL CHOSEONG CHITUEUMSSANGSIOSHANGUL CH" + - "OSEONG CEONGCHIEUMSIOSHANGUL CHOSEONG CEONGCHIEUMSSANGSIOSHANGUL CHOSEON" + - "G PANSIOSHANGUL CHOSEONG IEUNG-KIYEOKHANGUL CHOSEONG IEUNG-TIKEUTHANGUL " + - "CHOSEONG IEUNG-MIEUMHANGUL CHOSEONG IEUNG-PIEUPHANGUL CHOSEONG IEUNG-SIO" + - "SHANGUL CHOSEONG IEUNG-PANSIOSHANGUL CHOSEONG SSANGIEUNGHANGUL CHOSEONG " + - "IEUNG-CIEUCHANGUL CHOSEONG IEUNG-CHIEUCHHANGUL CHOSEONG IEUNG-THIEUTHHAN" + - "GUL CHOSEONG IEUNG-PHIEUPHHANGUL CHOSEONG YESIEUNGHANGUL CHOSEONG CIEUC-" + - "IEUNGHANGUL CHOSEONG CHITUEUMCIEUCHANGUL CHOSEONG CHITUEUMSSANGCIEUCHANG" + - "UL CHOSEONG CEONGCHIEUMCIEUCHANGUL CHOSEONG CEONGCHIEUMSSANGCIEUCHANGUL " + - "CHOSEONG CHIEUCH-KHIEUKHHANGUL CHOSEONG CHIEUCH-HIEUHHANGUL CHOSEONG CHI" + - "TUEUMCHIEUCHHANGUL CHOSEONG CEONGCHIEUMCHIEUCHHANGUL CHOSEONG PHIEUPH-PI" + - "EUPHANGUL CHOSEONG KAPYEOUNPHIEUPHHANGUL CHOSEONG SSANGHIEUHHANGUL CHOSE" + - "ONG YEORINHIEUHHANGUL CHOSEONG KIYEOK-TIKEUTHANGUL CHOSEONG NIEUN-SIOSHA" + - "NGUL CHOSEONG NIEUN-CIEUCHANGUL CHOSEONG NIEUN-HIEUHHANGUL CHOSEONG TIKE" + - "UT-RIEULHANGUL CHOSEONG FILLERHANGUL JUNGSEONG FILLERHANGUL JUNGSEONG AH" + - "ANGUL JUNGSEONG AEHANGUL JUNGSEONG YAHANGUL JUNGSEONG YAEHANGUL JUNGSEON" + - "G EOHANGUL JUNGSEONG EHANGUL JUNGSEONG YEOHANGUL JUNGSEONG YEHANGUL JUNG" + - "SEONG OHANGUL JUNGSEONG WAHANGUL JUNGSEONG WAEHANGUL JUNGSEONG OEHANGUL " + - "JUNGSEONG YOHANGUL JUNGSEONG UHANGUL JUNGSEONG WEOHANGUL JUNGSEONG WEHAN" + - "GUL JUNGSEONG WIHANGUL JUNGSEONG YUHANGUL JUNGSEONG EUHANGUL JUNGSEONG Y" + - "IHANGUL JUNGSEONG IHANGUL JUNGSEONG A-OHANGUL JUNGSEONG A-UHANGUL JUNGSE" + - "ONG YA-OHANGUL JUNGSEONG YA-YOHANGUL JUNGSEONG EO-OHANGUL JUNGSEONG EO-U" + - "HANGUL JUNGSEONG EO-EUHANGUL JUNGSEONG YEO-OHANGUL JUNGSEONG YEO-UHANGUL" + - " JUNGSEONG O-EOHANGUL JUNGSEONG O-EHANGUL JUNGSEONG O-YEHANGUL JUNGSEONG" + - " O-OHANGUL JUNGSEONG O-UHANGUL JUNGSEONG YO-YAHANGUL JUNGSEONG YO-YAEHAN" + - "GUL JUNGSEONG YO-YEOHANGUL JUNGSEONG YO-OHANGUL JUNGSEONG YO-IHANGUL JUN" + - "GSEONG U-AHANGUL JUNGSEONG U-AEHANGUL JUNGSEONG U-EO-EUHANGUL JUNGSEONG " + - "U-YEHANGUL JUNGSEONG U-UHANGUL JUNGSEONG YU-AHANGUL JUNGSEONG YU-EOHANGU" + - "L JUNGSEONG YU-EHANGUL JUNGSEONG YU-YEOHANGUL JUNGSEONG YU-YEHANGUL JUNG" + - "SEONG YU-UHANGUL JUNGSEONG YU-IHANGUL JUNGSEONG EU-UHANGUL JUNGSEONG EU-" + - "EUHANGUL JUNGSEONG YI-UHANGUL JUNGSEONG I-AHANGUL JUNGSEONG I-YAHANGUL J" + - "UNGSEONG I-OHANGUL JUNGSEONG I-UHANGUL JUNGSEONG I-EUHANGUL JUNGSEONG I-" + - "ARAEAHANGUL JUNGSEONG ARAEAHANGUL JUNGSEONG ARAEA-EOHANGUL JUNGSEONG ARA" + - "EA-UHANGUL JUNGSEONG ARAEA-IHANGUL JUNGSEONG SSANGARAEAHANGUL JUNGSEONG " + - "A-EUHANGUL JUNGSEONG YA-UHANGUL JUNGSEONG YEO-YAHANGUL JUNGSEONG O-YAHAN") + ("" + - "GUL JUNGSEONG O-YAEHANGUL JONGSEONG KIYEOKHANGUL JONGSEONG SSANGKIYEOKHA" + - "NGUL JONGSEONG KIYEOK-SIOSHANGUL JONGSEONG NIEUNHANGUL JONGSEONG NIEUN-C" + - "IEUCHANGUL JONGSEONG NIEUN-HIEUHHANGUL JONGSEONG TIKEUTHANGUL JONGSEONG " + - "RIEULHANGUL JONGSEONG RIEUL-KIYEOKHANGUL JONGSEONG RIEUL-MIEUMHANGUL JON" + - "GSEONG RIEUL-PIEUPHANGUL JONGSEONG RIEUL-SIOSHANGUL JONGSEONG RIEUL-THIE" + - "UTHHANGUL JONGSEONG RIEUL-PHIEUPHHANGUL JONGSEONG RIEUL-HIEUHHANGUL JONG" + - "SEONG MIEUMHANGUL JONGSEONG PIEUPHANGUL JONGSEONG PIEUP-SIOSHANGUL JONGS" + - "EONG SIOSHANGUL JONGSEONG SSANGSIOSHANGUL JONGSEONG IEUNGHANGUL JONGSEON" + - "G CIEUCHANGUL JONGSEONG CHIEUCHHANGUL JONGSEONG KHIEUKHHANGUL JONGSEONG " + - "THIEUTHHANGUL JONGSEONG PHIEUPHHANGUL JONGSEONG HIEUHHANGUL JONGSEONG KI" + - "YEOK-RIEULHANGUL JONGSEONG KIYEOK-SIOS-KIYEOKHANGUL JONGSEONG NIEUN-KIYE" + - "OKHANGUL JONGSEONG NIEUN-TIKEUTHANGUL JONGSEONG NIEUN-SIOSHANGUL JONGSEO" + - "NG NIEUN-PANSIOSHANGUL JONGSEONG NIEUN-THIEUTHHANGUL JONGSEONG TIKEUT-KI" + - "YEOKHANGUL JONGSEONG TIKEUT-RIEULHANGUL JONGSEONG RIEUL-KIYEOK-SIOSHANGU" + - "L JONGSEONG RIEUL-NIEUNHANGUL JONGSEONG RIEUL-TIKEUTHANGUL JONGSEONG RIE" + - "UL-TIKEUT-HIEUHHANGUL JONGSEONG SSANGRIEULHANGUL JONGSEONG RIEUL-MIEUM-K" + - "IYEOKHANGUL JONGSEONG RIEUL-MIEUM-SIOSHANGUL JONGSEONG RIEUL-PIEUP-SIOSH" + - "ANGUL JONGSEONG RIEUL-PIEUP-HIEUHHANGUL JONGSEONG RIEUL-KAPYEOUNPIEUPHAN" + - "GUL JONGSEONG RIEUL-SSANGSIOSHANGUL JONGSEONG RIEUL-PANSIOSHANGUL JONGSE" + - "ONG RIEUL-KHIEUKHHANGUL JONGSEONG RIEUL-YEORINHIEUHHANGUL JONGSEONG MIEU" + - "M-KIYEOKHANGUL JONGSEONG MIEUM-RIEULHANGUL JONGSEONG MIEUM-PIEUPHANGUL J" + - "ONGSEONG MIEUM-SIOSHANGUL JONGSEONG MIEUM-SSANGSIOSHANGUL JONGSEONG MIEU" + - "M-PANSIOSHANGUL JONGSEONG MIEUM-CHIEUCHHANGUL JONGSEONG MIEUM-HIEUHHANGU" + - "L JONGSEONG KAPYEOUNMIEUMHANGUL JONGSEONG PIEUP-RIEULHANGUL JONGSEONG PI" + - "EUP-PHIEUPHHANGUL JONGSEONG PIEUP-HIEUHHANGUL JONGSEONG KAPYEOUNPIEUPHAN" + - "GUL JONGSEONG SIOS-KIYEOKHANGUL JONGSEONG SIOS-TIKEUTHANGUL JONGSEONG SI" + - "OS-RIEULHANGUL JONGSEONG SIOS-PIEUPHANGUL JONGSEONG PANSIOSHANGUL JONGSE" + - "ONG IEUNG-KIYEOKHANGUL JONGSEONG IEUNG-SSANGKIYEOKHANGUL JONGSEONG SSANG" + - "IEUNGHANGUL JONGSEONG IEUNG-KHIEUKHHANGUL JONGSEONG YESIEUNGHANGUL JONGS" + - "EONG YESIEUNG-SIOSHANGUL JONGSEONG YESIEUNG-PANSIOSHANGUL JONGSEONG PHIE" + - "UPH-PIEUPHANGUL JONGSEONG KAPYEOUNPHIEUPHHANGUL JONGSEONG HIEUH-NIEUNHAN" + - "GUL JONGSEONG HIEUH-RIEULHANGUL JONGSEONG HIEUH-MIEUMHANGUL JONGSEONG HI" + - "EUH-PIEUPHANGUL JONGSEONG YEORINHIEUHHANGUL JONGSEONG KIYEOK-NIEUNHANGUL" + - " JONGSEONG KIYEOK-PIEUPHANGUL JONGSEONG KIYEOK-CHIEUCHHANGUL JONGSEONG K" + - "IYEOK-KHIEUKHHANGUL JONGSEONG KIYEOK-HIEUHHANGUL JONGSEONG SSANGNIEUNETH" + - "IOPIC SYLLABLE HAETHIOPIC SYLLABLE HUETHIOPIC SYLLABLE HIETHIOPIC SYLLAB" + - "LE HAAETHIOPIC SYLLABLE HEEETHIOPIC SYLLABLE HEETHIOPIC SYLLABLE HOETHIO" + - "PIC SYLLABLE HOAETHIOPIC SYLLABLE LAETHIOPIC SYLLABLE LUETHIOPIC SYLLABL" + - "E LIETHIOPIC SYLLABLE LAAETHIOPIC SYLLABLE LEEETHIOPIC SYLLABLE LEETHIOP" + - "IC SYLLABLE LOETHIOPIC SYLLABLE LWAETHIOPIC SYLLABLE HHAETHIOPIC SYLLABL" + - "E HHUETHIOPIC SYLLABLE HHIETHIOPIC SYLLABLE HHAAETHIOPIC SYLLABLE HHEEET" + - "HIOPIC SYLLABLE HHEETHIOPIC SYLLABLE HHOETHIOPIC SYLLABLE HHWAETHIOPIC S" + - "YLLABLE MAETHIOPIC SYLLABLE MUETHIOPIC SYLLABLE MIETHIOPIC SYLLABLE MAAE" + - "THIOPIC SYLLABLE MEEETHIOPIC SYLLABLE MEETHIOPIC SYLLABLE MOETHIOPIC SYL" + - "LABLE MWAETHIOPIC SYLLABLE SZAETHIOPIC SYLLABLE SZUETHIOPIC SYLLABLE SZI" + - "ETHIOPIC SYLLABLE SZAAETHIOPIC SYLLABLE SZEEETHIOPIC SYLLABLE SZEETHIOPI" + - "C SYLLABLE SZOETHIOPIC SYLLABLE SZWAETHIOPIC SYLLABLE RAETHIOPIC SYLLABL" + - "E RUETHIOPIC SYLLABLE RIETHIOPIC SYLLABLE RAAETHIOPIC SYLLABLE REEETHIOP" + - "IC SYLLABLE REETHIOPIC SYLLABLE ROETHIOPIC SYLLABLE RWAETHIOPIC SYLLABLE" + - " SAETHIOPIC SYLLABLE SUETHIOPIC SYLLABLE SIETHIOPIC SYLLABLE SAAETHIOPIC" + - " SYLLABLE SEEETHIOPIC SYLLABLE SEETHIOPIC SYLLABLE SOETHIOPIC SYLLABLE S" + - "WAETHIOPIC SYLLABLE SHAETHIOPIC SYLLABLE SHUETHIOPIC SYLLABLE SHIETHIOPI" + - "C SYLLABLE SHAAETHIOPIC SYLLABLE SHEEETHIOPIC SYLLABLE SHEETHIOPIC SYLLA" + - "BLE SHOETHIOPIC SYLLABLE SHWAETHIOPIC SYLLABLE QAETHIOPIC SYLLABLE QUETH" + - "IOPIC SYLLABLE QIETHIOPIC SYLLABLE QAAETHIOPIC SYLLABLE QEEETHIOPIC SYLL" + - "ABLE QEETHIOPIC SYLLABLE QOETHIOPIC SYLLABLE QOAETHIOPIC SYLLABLE QWAETH" + - "IOPIC SYLLABLE QWIETHIOPIC SYLLABLE QWAAETHIOPIC SYLLABLE QWEEETHIOPIC S" + - "YLLABLE QWEETHIOPIC SYLLABLE QHAETHIOPIC SYLLABLE QHUETHIOPIC SYLLABLE Q" + - "HIETHIOPIC SYLLABLE QHAAETHIOPIC SYLLABLE QHEEETHIOPIC SYLLABLE QHEETHIO" + - "PIC SYLLABLE QHOETHIOPIC SYLLABLE QHWAETHIOPIC SYLLABLE QHWIETHIOPIC SYL" + - "LABLE QHWAAETHIOPIC SYLLABLE QHWEEETHIOPIC SYLLABLE QHWEETHIOPIC SYLLABL" + - "E BAETHIOPIC SYLLABLE BUETHIOPIC SYLLABLE BIETHIOPIC SYLLABLE BAAETHIOPI" + - "C SYLLABLE BEEETHIOPIC SYLLABLE BEETHIOPIC SYLLABLE BOETHIOPIC SYLLABLE " + - "BWAETHIOPIC SYLLABLE VAETHIOPIC SYLLABLE VUETHIOPIC SYLLABLE VIETHIOPIC ") + ("" + - "SYLLABLE VAAETHIOPIC SYLLABLE VEEETHIOPIC SYLLABLE VEETHIOPIC SYLLABLE V" + - "OETHIOPIC SYLLABLE VWAETHIOPIC SYLLABLE TAETHIOPIC SYLLABLE TUETHIOPIC S" + - "YLLABLE TIETHIOPIC SYLLABLE TAAETHIOPIC SYLLABLE TEEETHIOPIC SYLLABLE TE" + - "ETHIOPIC SYLLABLE TOETHIOPIC SYLLABLE TWAETHIOPIC SYLLABLE CAETHIOPIC SY" + - "LLABLE CUETHIOPIC SYLLABLE CIETHIOPIC SYLLABLE CAAETHIOPIC SYLLABLE CEEE" + - "THIOPIC SYLLABLE CEETHIOPIC SYLLABLE COETHIOPIC SYLLABLE CWAETHIOPIC SYL" + - "LABLE XAETHIOPIC SYLLABLE XUETHIOPIC SYLLABLE XIETHIOPIC SYLLABLE XAAETH" + - "IOPIC SYLLABLE XEEETHIOPIC SYLLABLE XEETHIOPIC SYLLABLE XOETHIOPIC SYLLA" + - "BLE XOAETHIOPIC SYLLABLE XWAETHIOPIC SYLLABLE XWIETHIOPIC SYLLABLE XWAAE" + - "THIOPIC SYLLABLE XWEEETHIOPIC SYLLABLE XWEETHIOPIC SYLLABLE NAETHIOPIC S" + - "YLLABLE NUETHIOPIC SYLLABLE NIETHIOPIC SYLLABLE NAAETHIOPIC SYLLABLE NEE" + - "ETHIOPIC SYLLABLE NEETHIOPIC SYLLABLE NOETHIOPIC SYLLABLE NWAETHIOPIC SY" + - "LLABLE NYAETHIOPIC SYLLABLE NYUETHIOPIC SYLLABLE NYIETHIOPIC SYLLABLE NY" + - "AAETHIOPIC SYLLABLE NYEEETHIOPIC SYLLABLE NYEETHIOPIC SYLLABLE NYOETHIOP" + - "IC SYLLABLE NYWAETHIOPIC SYLLABLE GLOTTAL AETHIOPIC SYLLABLE GLOTTAL UET" + - "HIOPIC SYLLABLE GLOTTAL IETHIOPIC SYLLABLE GLOTTAL AAETHIOPIC SYLLABLE G" + - "LOTTAL EEETHIOPIC SYLLABLE GLOTTAL EETHIOPIC SYLLABLE GLOTTAL OETHIOPIC " + - "SYLLABLE GLOTTAL WAETHIOPIC SYLLABLE KAETHIOPIC SYLLABLE KUETHIOPIC SYLL" + - "ABLE KIETHIOPIC SYLLABLE KAAETHIOPIC SYLLABLE KEEETHIOPIC SYLLABLE KEETH" + - "IOPIC SYLLABLE KOETHIOPIC SYLLABLE KOAETHIOPIC SYLLABLE KWAETHIOPIC SYLL" + - "ABLE KWIETHIOPIC SYLLABLE KWAAETHIOPIC SYLLABLE KWEEETHIOPIC SYLLABLE KW" + - "EETHIOPIC SYLLABLE KXAETHIOPIC SYLLABLE KXUETHIOPIC SYLLABLE KXIETHIOPIC" + - " SYLLABLE KXAAETHIOPIC SYLLABLE KXEEETHIOPIC SYLLABLE KXEETHIOPIC SYLLAB" + - "LE KXOETHIOPIC SYLLABLE KXWAETHIOPIC SYLLABLE KXWIETHIOPIC SYLLABLE KXWA" + - "AETHIOPIC SYLLABLE KXWEEETHIOPIC SYLLABLE KXWEETHIOPIC SYLLABLE WAETHIOP" + - "IC SYLLABLE WUETHIOPIC SYLLABLE WIETHIOPIC SYLLABLE WAAETHIOPIC SYLLABLE" + - " WEEETHIOPIC SYLLABLE WEETHIOPIC SYLLABLE WOETHIOPIC SYLLABLE WOAETHIOPI" + - "C SYLLABLE PHARYNGEAL AETHIOPIC SYLLABLE PHARYNGEAL UETHIOPIC SYLLABLE P" + - "HARYNGEAL IETHIOPIC SYLLABLE PHARYNGEAL AAETHIOPIC SYLLABLE PHARYNGEAL E" + - "EETHIOPIC SYLLABLE PHARYNGEAL EETHIOPIC SYLLABLE PHARYNGEAL OETHIOPIC SY" + - "LLABLE ZAETHIOPIC SYLLABLE ZUETHIOPIC SYLLABLE ZIETHIOPIC SYLLABLE ZAAET" + - "HIOPIC SYLLABLE ZEEETHIOPIC SYLLABLE ZEETHIOPIC SYLLABLE ZOETHIOPIC SYLL" + - "ABLE ZWAETHIOPIC SYLLABLE ZHAETHIOPIC SYLLABLE ZHUETHIOPIC SYLLABLE ZHIE" + - "THIOPIC SYLLABLE ZHAAETHIOPIC SYLLABLE ZHEEETHIOPIC SYLLABLE ZHEETHIOPIC" + - " SYLLABLE ZHOETHIOPIC SYLLABLE ZHWAETHIOPIC SYLLABLE YAETHIOPIC SYLLABLE" + - " YUETHIOPIC SYLLABLE YIETHIOPIC SYLLABLE YAAETHIOPIC SYLLABLE YEEETHIOPI" + - "C SYLLABLE YEETHIOPIC SYLLABLE YOETHIOPIC SYLLABLE YOAETHIOPIC SYLLABLE " + - "DAETHIOPIC SYLLABLE DUETHIOPIC SYLLABLE DIETHIOPIC SYLLABLE DAAETHIOPIC " + - "SYLLABLE DEEETHIOPIC SYLLABLE DEETHIOPIC SYLLABLE DOETHIOPIC SYLLABLE DW" + - "AETHIOPIC SYLLABLE DDAETHIOPIC SYLLABLE DDUETHIOPIC SYLLABLE DDIETHIOPIC" + - " SYLLABLE DDAAETHIOPIC SYLLABLE DDEEETHIOPIC SYLLABLE DDEETHIOPIC SYLLAB" + - "LE DDOETHIOPIC SYLLABLE DDWAETHIOPIC SYLLABLE JAETHIOPIC SYLLABLE JUETHI" + - "OPIC SYLLABLE JIETHIOPIC SYLLABLE JAAETHIOPIC SYLLABLE JEEETHIOPIC SYLLA" + - "BLE JEETHIOPIC SYLLABLE JOETHIOPIC SYLLABLE JWAETHIOPIC SYLLABLE GAETHIO" + - "PIC SYLLABLE GUETHIOPIC SYLLABLE GIETHIOPIC SYLLABLE GAAETHIOPIC SYLLABL" + - "E GEEETHIOPIC SYLLABLE GEETHIOPIC SYLLABLE GOETHIOPIC SYLLABLE GOAETHIOP" + - "IC SYLLABLE GWAETHIOPIC SYLLABLE GWIETHIOPIC SYLLABLE GWAAETHIOPIC SYLLA" + - "BLE GWEEETHIOPIC SYLLABLE GWEETHIOPIC SYLLABLE GGAETHIOPIC SYLLABLE GGUE" + - "THIOPIC SYLLABLE GGIETHIOPIC SYLLABLE GGAAETHIOPIC SYLLABLE GGEEETHIOPIC" + - " SYLLABLE GGEETHIOPIC SYLLABLE GGOETHIOPIC SYLLABLE GGWAAETHIOPIC SYLLAB" + - "LE THAETHIOPIC SYLLABLE THUETHIOPIC SYLLABLE THIETHIOPIC SYLLABLE THAAET" + - "HIOPIC SYLLABLE THEEETHIOPIC SYLLABLE THEETHIOPIC SYLLABLE THOETHIOPIC S" + - "YLLABLE THWAETHIOPIC SYLLABLE CHAETHIOPIC SYLLABLE CHUETHIOPIC SYLLABLE " + - "CHIETHIOPIC SYLLABLE CHAAETHIOPIC SYLLABLE CHEEETHIOPIC SYLLABLE CHEETHI" + - "OPIC SYLLABLE CHOETHIOPIC SYLLABLE CHWAETHIOPIC SYLLABLE PHAETHIOPIC SYL" + - "LABLE PHUETHIOPIC SYLLABLE PHIETHIOPIC SYLLABLE PHAAETHIOPIC SYLLABLE PH" + - "EEETHIOPIC SYLLABLE PHEETHIOPIC SYLLABLE PHOETHIOPIC SYLLABLE PHWAETHIOP" + - "IC SYLLABLE TSAETHIOPIC SYLLABLE TSUETHIOPIC SYLLABLE TSIETHIOPIC SYLLAB" + - "LE TSAAETHIOPIC SYLLABLE TSEEETHIOPIC SYLLABLE TSEETHIOPIC SYLLABLE TSOE" + - "THIOPIC SYLLABLE TSWAETHIOPIC SYLLABLE TZAETHIOPIC SYLLABLE TZUETHIOPIC " + - "SYLLABLE TZIETHIOPIC SYLLABLE TZAAETHIOPIC SYLLABLE TZEEETHIOPIC SYLLABL" + - "E TZEETHIOPIC SYLLABLE TZOETHIOPIC SYLLABLE TZOAETHIOPIC SYLLABLE FAETHI" + - "OPIC SYLLABLE FUETHIOPIC SYLLABLE FIETHIOPIC SYLLABLE FAAETHIOPIC SYLLAB" + - "LE FEEETHIOPIC SYLLABLE FEETHIOPIC SYLLABLE FOETHIOPIC SYLLABLE FWAETHIO") + ("" + - "PIC SYLLABLE PAETHIOPIC SYLLABLE PUETHIOPIC SYLLABLE PIETHIOPIC SYLLABLE" + - " PAAETHIOPIC SYLLABLE PEEETHIOPIC SYLLABLE PEETHIOPIC SYLLABLE POETHIOPI" + - "C SYLLABLE PWAETHIOPIC SYLLABLE RYAETHIOPIC SYLLABLE MYAETHIOPIC SYLLABL" + - "E FYAETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARKETHIOPIC COMBINI" + - "NG VOWEL LENGTH MARKETHIOPIC COMBINING GEMINATION MARKETHIOPIC SECTION M" + - "ARKETHIOPIC WORDSPACEETHIOPIC FULL STOPETHIOPIC COMMAETHIOPIC SEMICOLONE" + - "THIOPIC COLONETHIOPIC PREFACE COLONETHIOPIC QUESTION MARKETHIOPIC PARAGR" + - "APH SEPARATORETHIOPIC DIGIT ONEETHIOPIC DIGIT TWOETHIOPIC DIGIT THREEETH" + - "IOPIC DIGIT FOURETHIOPIC DIGIT FIVEETHIOPIC DIGIT SIXETHIOPIC DIGIT SEVE" + - "NETHIOPIC DIGIT EIGHTETHIOPIC DIGIT NINEETHIOPIC NUMBER TENETHIOPIC NUMB" + - "ER TWENTYETHIOPIC NUMBER THIRTYETHIOPIC NUMBER FORTYETHIOPIC NUMBER FIFT" + - "YETHIOPIC NUMBER SIXTYETHIOPIC NUMBER SEVENTYETHIOPIC NUMBER EIGHTYETHIO" + - "PIC NUMBER NINETYETHIOPIC NUMBER HUNDREDETHIOPIC NUMBER TEN THOUSANDETHI" + - "OPIC SYLLABLE SEBATBEIT MWAETHIOPIC SYLLABLE MWIETHIOPIC SYLLABLE MWEEET" + - "HIOPIC SYLLABLE MWEETHIOPIC SYLLABLE SEBATBEIT BWAETHIOPIC SYLLABLE BWIE" + - "THIOPIC SYLLABLE BWEEETHIOPIC SYLLABLE BWEETHIOPIC SYLLABLE SEBATBEIT FW" + - "AETHIOPIC SYLLABLE FWIETHIOPIC SYLLABLE FWEEETHIOPIC SYLLABLE FWEETHIOPI" + - "C SYLLABLE SEBATBEIT PWAETHIOPIC SYLLABLE PWIETHIOPIC SYLLABLE PWEEETHIO" + - "PIC SYLLABLE PWEETHIOPIC TONAL MARK YIZETETHIOPIC TONAL MARK DERETETHIOP" + - "IC TONAL MARK RIKRIKETHIOPIC TONAL MARK SHORT RIKRIKETHIOPIC TONAL MARK " + - "DIFATETHIOPIC TONAL MARK KENATETHIOPIC TONAL MARK CHIRETETHIOPIC TONAL M" + - "ARK HIDETETHIOPIC TONAL MARK DERET-HIDETETHIOPIC TONAL MARK KURTCHEROKEE" + - " LETTER ACHEROKEE LETTER ECHEROKEE LETTER ICHEROKEE LETTER OCHEROKEE LET" + - "TER UCHEROKEE LETTER VCHEROKEE LETTER GACHEROKEE LETTER KACHEROKEE LETTE" + - "R GECHEROKEE LETTER GICHEROKEE LETTER GOCHEROKEE LETTER GUCHEROKEE LETTE" + - "R GVCHEROKEE LETTER HACHEROKEE LETTER HECHEROKEE LETTER HICHEROKEE LETTE" + - "R HOCHEROKEE LETTER HUCHEROKEE LETTER HVCHEROKEE LETTER LACHEROKEE LETTE" + - "R LECHEROKEE LETTER LICHEROKEE LETTER LOCHEROKEE LETTER LUCHEROKEE LETTE" + - "R LVCHEROKEE LETTER MACHEROKEE LETTER MECHEROKEE LETTER MICHEROKEE LETTE" + - "R MOCHEROKEE LETTER MUCHEROKEE LETTER NACHEROKEE LETTER HNACHEROKEE LETT" + - "ER NAHCHEROKEE LETTER NECHEROKEE LETTER NICHEROKEE LETTER NOCHEROKEE LET" + - "TER NUCHEROKEE LETTER NVCHEROKEE LETTER QUACHEROKEE LETTER QUECHEROKEE L" + - "ETTER QUICHEROKEE LETTER QUOCHEROKEE LETTER QUUCHEROKEE LETTER QUVCHEROK" + - "EE LETTER SACHEROKEE LETTER SCHEROKEE LETTER SECHEROKEE LETTER SICHEROKE" + - "E LETTER SOCHEROKEE LETTER SUCHEROKEE LETTER SVCHEROKEE LETTER DACHEROKE" + - "E LETTER TACHEROKEE LETTER DECHEROKEE LETTER TECHEROKEE LETTER DICHEROKE" + - "E LETTER TICHEROKEE LETTER DOCHEROKEE LETTER DUCHEROKEE LETTER DVCHEROKE" + - "E LETTER DLACHEROKEE LETTER TLACHEROKEE LETTER TLECHEROKEE LETTER TLICHE" + - "ROKEE LETTER TLOCHEROKEE LETTER TLUCHEROKEE LETTER TLVCHEROKEE LETTER TS" + - "ACHEROKEE LETTER TSECHEROKEE LETTER TSICHEROKEE LETTER TSOCHEROKEE LETTE" + - "R TSUCHEROKEE LETTER TSVCHEROKEE LETTER WACHEROKEE LETTER WECHEROKEE LET" + - "TER WICHEROKEE LETTER WOCHEROKEE LETTER WUCHEROKEE LETTER WVCHEROKEE LET" + - "TER YACHEROKEE LETTER YECHEROKEE LETTER YICHEROKEE LETTER YOCHEROKEE LET" + - "TER YUCHEROKEE LETTER YVCHEROKEE LETTER MVCHEROKEE SMALL LETTER YECHEROK" + - "EE SMALL LETTER YICHEROKEE SMALL LETTER YOCHEROKEE SMALL LETTER YUCHEROK" + - "EE SMALL LETTER YVCHEROKEE SMALL LETTER MVCANADIAN SYLLABICS HYPHENCANAD" + - "IAN SYLLABICS ECANADIAN SYLLABICS AAICANADIAN SYLLABICS ICANADIAN SYLLAB" + - "ICS IICANADIAN SYLLABICS OCANADIAN SYLLABICS OOCANADIAN SYLLABICS Y-CREE" + - " OOCANADIAN SYLLABICS CARRIER EECANADIAN SYLLABICS CARRIER ICANADIAN SYL" + - "LABICS ACANADIAN SYLLABICS AACANADIAN SYLLABICS WECANADIAN SYLLABICS WES" + - "T-CREE WECANADIAN SYLLABICS WICANADIAN SYLLABICS WEST-CREE WICANADIAN SY" + - "LLABICS WIICANADIAN SYLLABICS WEST-CREE WIICANADIAN SYLLABICS WOCANADIAN" + - " SYLLABICS WEST-CREE WOCANADIAN SYLLABICS WOOCANADIAN SYLLABICS WEST-CRE" + - "E WOOCANADIAN SYLLABICS NASKAPI WOOCANADIAN SYLLABICS WACANADIAN SYLLABI" + - "CS WEST-CREE WACANADIAN SYLLABICS WAACANADIAN SYLLABICS WEST-CREE WAACAN" + - "ADIAN SYLLABICS NASKAPI WAACANADIAN SYLLABICS AICANADIAN SYLLABICS Y-CRE" + - "E WCANADIAN SYLLABICS GLOTTAL STOPCANADIAN SYLLABICS FINAL ACUTECANADIAN" + - " SYLLABICS FINAL GRAVECANADIAN SYLLABICS FINAL BOTTOM HALF RINGCANADIAN " + - "SYLLABICS FINAL TOP HALF RINGCANADIAN SYLLABICS FINAL RIGHT HALF RINGCAN" + - "ADIAN SYLLABICS FINAL RINGCANADIAN SYLLABICS FINAL DOUBLE ACUTECANADIAN " + - "SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKESCANADIAN SYLLABICS FINAL MI" + - "DDLE DOTCANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKECANADIAN SYLLABI" + - "CS FINAL PLUSCANADIAN SYLLABICS FINAL DOWN TACKCANADIAN SYLLABICS ENCANA" + - "DIAN SYLLABICS INCANADIAN SYLLABICS ONCANADIAN SYLLABICS ANCANADIAN SYLL") + ("" + - "ABICS PECANADIAN SYLLABICS PAAICANADIAN SYLLABICS PICANADIAN SYLLABICS P" + - "IICANADIAN SYLLABICS POCANADIAN SYLLABICS POOCANADIAN SYLLABICS Y-CREE P" + - "OOCANADIAN SYLLABICS CARRIER HEECANADIAN SYLLABICS CARRIER HICANADIAN SY" + - "LLABICS PACANADIAN SYLLABICS PAACANADIAN SYLLABICS PWECANADIAN SYLLABICS" + - " WEST-CREE PWECANADIAN SYLLABICS PWICANADIAN SYLLABICS WEST-CREE PWICANA" + - "DIAN SYLLABICS PWIICANADIAN SYLLABICS WEST-CREE PWIICANADIAN SYLLABICS P" + - "WOCANADIAN SYLLABICS WEST-CREE PWOCANADIAN SYLLABICS PWOOCANADIAN SYLLAB" + - "ICS WEST-CREE PWOOCANADIAN SYLLABICS PWACANADIAN SYLLABICS WEST-CREE PWA" + - "CANADIAN SYLLABICS PWAACANADIAN SYLLABICS WEST-CREE PWAACANADIAN SYLLABI" + - "CS Y-CREE PWAACANADIAN SYLLABICS PCANADIAN SYLLABICS WEST-CREE PCANADIAN" + - " SYLLABICS CARRIER HCANADIAN SYLLABICS TECANADIAN SYLLABICS TAAICANADIAN" + - " SYLLABICS TICANADIAN SYLLABICS TIICANADIAN SYLLABICS TOCANADIAN SYLLABI" + - "CS TOOCANADIAN SYLLABICS Y-CREE TOOCANADIAN SYLLABICS CARRIER DEECANADIA" + - "N SYLLABICS CARRIER DICANADIAN SYLLABICS TACANADIAN SYLLABICS TAACANADIA" + - "N SYLLABICS TWECANADIAN SYLLABICS WEST-CREE TWECANADIAN SYLLABICS TWICAN" + - "ADIAN SYLLABICS WEST-CREE TWICANADIAN SYLLABICS TWIICANADIAN SYLLABICS W" + - "EST-CREE TWIICANADIAN SYLLABICS TWOCANADIAN SYLLABICS WEST-CREE TWOCANAD" + - "IAN SYLLABICS TWOOCANADIAN SYLLABICS WEST-CREE TWOOCANADIAN SYLLABICS TW" + - "ACANADIAN SYLLABICS WEST-CREE TWACANADIAN SYLLABICS TWAACANADIAN SYLLABI" + - "CS WEST-CREE TWAACANADIAN SYLLABICS NASKAPI TWAACANADIAN SYLLABICS TCANA" + - "DIAN SYLLABICS TTECANADIAN SYLLABICS TTICANADIAN SYLLABICS TTOCANADIAN S" + - "YLLABICS TTACANADIAN SYLLABICS KECANADIAN SYLLABICS KAAICANADIAN SYLLABI" + - "CS KICANADIAN SYLLABICS KIICANADIAN SYLLABICS KOCANADIAN SYLLABICS KOOCA" + - "NADIAN SYLLABICS Y-CREE KOOCANADIAN SYLLABICS KACANADIAN SYLLABICS KAACA" + - "NADIAN SYLLABICS KWECANADIAN SYLLABICS WEST-CREE KWECANADIAN SYLLABICS K" + - "WICANADIAN SYLLABICS WEST-CREE KWICANADIAN SYLLABICS KWIICANADIAN SYLLAB" + - "ICS WEST-CREE KWIICANADIAN SYLLABICS KWOCANADIAN SYLLABICS WEST-CREE KWO" + - "CANADIAN SYLLABICS KWOOCANADIAN SYLLABICS WEST-CREE KWOOCANADIAN SYLLABI" + - "CS KWACANADIAN SYLLABICS WEST-CREE KWACANADIAN SYLLABICS KWAACANADIAN SY" + - "LLABICS WEST-CREE KWAACANADIAN SYLLABICS NASKAPI KWAACANADIAN SYLLABICS " + - "KCANADIAN SYLLABICS KWCANADIAN SYLLABICS SOUTH-SLAVEY KEHCANADIAN SYLLAB" + - "ICS SOUTH-SLAVEY KIHCANADIAN SYLLABICS SOUTH-SLAVEY KOHCANADIAN SYLLABIC" + - "S SOUTH-SLAVEY KAHCANADIAN SYLLABICS CECANADIAN SYLLABICS CAAICANADIAN S" + - "YLLABICS CICANADIAN SYLLABICS CIICANADIAN SYLLABICS COCANADIAN SYLLABICS" + - " COOCANADIAN SYLLABICS Y-CREE COOCANADIAN SYLLABICS CACANADIAN SYLLABICS" + - " CAACANADIAN SYLLABICS CWECANADIAN SYLLABICS WEST-CREE CWECANADIAN SYLLA" + - "BICS CWICANADIAN SYLLABICS WEST-CREE CWICANADIAN SYLLABICS CWIICANADIAN " + - "SYLLABICS WEST-CREE CWIICANADIAN SYLLABICS CWOCANADIAN SYLLABICS WEST-CR" + - "EE CWOCANADIAN SYLLABICS CWOOCANADIAN SYLLABICS WEST-CREE CWOOCANADIAN S" + - "YLLABICS CWACANADIAN SYLLABICS WEST-CREE CWACANADIAN SYLLABICS CWAACANAD" + - "IAN SYLLABICS WEST-CREE CWAACANADIAN SYLLABICS NASKAPI CWAACANADIAN SYLL" + - "ABICS CCANADIAN SYLLABICS SAYISI THCANADIAN SYLLABICS MECANADIAN SYLLABI" + - "CS MAAICANADIAN SYLLABICS MICANADIAN SYLLABICS MIICANADIAN SYLLABICS MOC" + - "ANADIAN SYLLABICS MOOCANADIAN SYLLABICS Y-CREE MOOCANADIAN SYLLABICS MAC" + - "ANADIAN SYLLABICS MAACANADIAN SYLLABICS MWECANADIAN SYLLABICS WEST-CREE " + - "MWECANADIAN SYLLABICS MWICANADIAN SYLLABICS WEST-CREE MWICANADIAN SYLLAB" + - "ICS MWIICANADIAN SYLLABICS WEST-CREE MWIICANADIAN SYLLABICS MWOCANADIAN " + - "SYLLABICS WEST-CREE MWOCANADIAN SYLLABICS MWOOCANADIAN SYLLABICS WEST-CR" + - "EE MWOOCANADIAN SYLLABICS MWACANADIAN SYLLABICS WEST-CREE MWACANADIAN SY" + - "LLABICS MWAACANADIAN SYLLABICS WEST-CREE MWAACANADIAN SYLLABICS NASKAPI " + - "MWAACANADIAN SYLLABICS MCANADIAN SYLLABICS WEST-CREE MCANADIAN SYLLABICS" + - " MHCANADIAN SYLLABICS ATHAPASCAN MCANADIAN SYLLABICS SAYISI MCANADIAN SY" + - "LLABICS NECANADIAN SYLLABICS NAAICANADIAN SYLLABICS NICANADIAN SYLLABICS" + - " NIICANADIAN SYLLABICS NOCANADIAN SYLLABICS NOOCANADIAN SYLLABICS Y-CREE" + - " NOOCANADIAN SYLLABICS NACANADIAN SYLLABICS NAACANADIAN SYLLABICS NWECAN" + - "ADIAN SYLLABICS WEST-CREE NWECANADIAN SYLLABICS NWACANADIAN SYLLABICS WE" + - "ST-CREE NWACANADIAN SYLLABICS NWAACANADIAN SYLLABICS WEST-CREE NWAACANAD" + - "IAN SYLLABICS NASKAPI NWAACANADIAN SYLLABICS NCANADIAN SYLLABICS CARRIER" + - " NGCANADIAN SYLLABICS NHCANADIAN SYLLABICS LECANADIAN SYLLABICS LAAICANA" + - "DIAN SYLLABICS LICANADIAN SYLLABICS LIICANADIAN SYLLABICS LOCANADIAN SYL" + - "LABICS LOOCANADIAN SYLLABICS Y-CREE LOOCANADIAN SYLLABICS LACANADIAN SYL" + - "LABICS LAACANADIAN SYLLABICS LWECANADIAN SYLLABICS WEST-CREE LWECANADIAN" + - " SYLLABICS LWICANADIAN SYLLABICS WEST-CREE LWICANADIAN SYLLABICS LWIICAN" + - "ADIAN SYLLABICS WEST-CREE LWIICANADIAN SYLLABICS LWOCANADIAN SYLLABICS W") + ("" + - "EST-CREE LWOCANADIAN SYLLABICS LWOOCANADIAN SYLLABICS WEST-CREE LWOOCANA" + - "DIAN SYLLABICS LWACANADIAN SYLLABICS WEST-CREE LWACANADIAN SYLLABICS LWA" + - "ACANADIAN SYLLABICS WEST-CREE LWAACANADIAN SYLLABICS LCANADIAN SYLLABICS" + - " WEST-CREE LCANADIAN SYLLABICS MEDIAL LCANADIAN SYLLABICS SECANADIAN SYL" + - "LABICS SAAICANADIAN SYLLABICS SICANADIAN SYLLABICS SIICANADIAN SYLLABICS" + - " SOCANADIAN SYLLABICS SOOCANADIAN SYLLABICS Y-CREE SOOCANADIAN SYLLABICS" + - " SACANADIAN SYLLABICS SAACANADIAN SYLLABICS SWECANADIAN SYLLABICS WEST-C" + - "REE SWECANADIAN SYLLABICS SWICANADIAN SYLLABICS WEST-CREE SWICANADIAN SY" + - "LLABICS SWIICANADIAN SYLLABICS WEST-CREE SWIICANADIAN SYLLABICS SWOCANAD" + - "IAN SYLLABICS WEST-CREE SWOCANADIAN SYLLABICS SWOOCANADIAN SYLLABICS WES" + - "T-CREE SWOOCANADIAN SYLLABICS SWACANADIAN SYLLABICS WEST-CREE SWACANADIA" + - "N SYLLABICS SWAACANADIAN SYLLABICS WEST-CREE SWAACANADIAN SYLLABICS NASK" + - "API SWAACANADIAN SYLLABICS SCANADIAN SYLLABICS ATHAPASCAN SCANADIAN SYLL" + - "ABICS SWCANADIAN SYLLABICS BLACKFOOT SCANADIAN SYLLABICS MOOSE-CREE SKCA" + - "NADIAN SYLLABICS NASKAPI SKWCANADIAN SYLLABICS NASKAPI S-WCANADIAN SYLLA" + - "BICS NASKAPI SPWACANADIAN SYLLABICS NASKAPI STWACANADIAN SYLLABICS NASKA" + - "PI SKWACANADIAN SYLLABICS NASKAPI SCWACANADIAN SYLLABICS SHECANADIAN SYL" + - "LABICS SHICANADIAN SYLLABICS SHIICANADIAN SYLLABICS SHOCANADIAN SYLLABIC" + - "S SHOOCANADIAN SYLLABICS SHACANADIAN SYLLABICS SHAACANADIAN SYLLABICS SH" + - "WECANADIAN SYLLABICS WEST-CREE SHWECANADIAN SYLLABICS SHWICANADIAN SYLLA" + - "BICS WEST-CREE SHWICANADIAN SYLLABICS SHWIICANADIAN SYLLABICS WEST-CREE " + - "SHWIICANADIAN SYLLABICS SHWOCANADIAN SYLLABICS WEST-CREE SHWOCANADIAN SY" + - "LLABICS SHWOOCANADIAN SYLLABICS WEST-CREE SHWOOCANADIAN SYLLABICS SHWACA" + - "NADIAN SYLLABICS WEST-CREE SHWACANADIAN SYLLABICS SHWAACANADIAN SYLLABIC" + - "S WEST-CREE SHWAACANADIAN SYLLABICS SHCANADIAN SYLLABICS YECANADIAN SYLL" + - "ABICS YAAICANADIAN SYLLABICS YICANADIAN SYLLABICS YIICANADIAN SYLLABICS " + - "YOCANADIAN SYLLABICS YOOCANADIAN SYLLABICS Y-CREE YOOCANADIAN SYLLABICS " + - "YACANADIAN SYLLABICS YAACANADIAN SYLLABICS YWECANADIAN SYLLABICS WEST-CR" + - "EE YWECANADIAN SYLLABICS YWICANADIAN SYLLABICS WEST-CREE YWICANADIAN SYL" + - "LABICS YWIICANADIAN SYLLABICS WEST-CREE YWIICANADIAN SYLLABICS YWOCANADI" + - "AN SYLLABICS WEST-CREE YWOCANADIAN SYLLABICS YWOOCANADIAN SYLLABICS WEST" + - "-CREE YWOOCANADIAN SYLLABICS YWACANADIAN SYLLABICS WEST-CREE YWACANADIAN" + - " SYLLABICS YWAACANADIAN SYLLABICS WEST-CREE YWAACANADIAN SYLLABICS NASKA" + - "PI YWAACANADIAN SYLLABICS YCANADIAN SYLLABICS BIBLE-CREE YCANADIAN SYLLA" + - "BICS WEST-CREE YCANADIAN SYLLABICS SAYISI YICANADIAN SYLLABICS RECANADIA" + - "N SYLLABICS R-CREE RECANADIAN SYLLABICS WEST-CREE LECANADIAN SYLLABICS R" + - "AAICANADIAN SYLLABICS RICANADIAN SYLLABICS RIICANADIAN SYLLABICS ROCANAD" + - "IAN SYLLABICS ROOCANADIAN SYLLABICS WEST-CREE LOCANADIAN SYLLABICS RACAN" + - "ADIAN SYLLABICS RAACANADIAN SYLLABICS WEST-CREE LACANADIAN SYLLABICS RWA" + - "ACANADIAN SYLLABICS WEST-CREE RWAACANADIAN SYLLABICS RCANADIAN SYLLABICS" + - " WEST-CREE RCANADIAN SYLLABICS MEDIAL RCANADIAN SYLLABICS FECANADIAN SYL" + - "LABICS FAAICANADIAN SYLLABICS FICANADIAN SYLLABICS FIICANADIAN SYLLABICS" + - " FOCANADIAN SYLLABICS FOOCANADIAN SYLLABICS FACANADIAN SYLLABICS FAACANA" + - "DIAN SYLLABICS FWAACANADIAN SYLLABICS WEST-CREE FWAACANADIAN SYLLABICS F" + - "CANADIAN SYLLABICS THECANADIAN SYLLABICS N-CREE THECANADIAN SYLLABICS TH" + - "ICANADIAN SYLLABICS N-CREE THICANADIAN SYLLABICS THIICANADIAN SYLLABICS " + - "N-CREE THIICANADIAN SYLLABICS THOCANADIAN SYLLABICS THOOCANADIAN SYLLABI" + - "CS THACANADIAN SYLLABICS THAACANADIAN SYLLABICS THWAACANADIAN SYLLABICS " + - "WEST-CREE THWAACANADIAN SYLLABICS THCANADIAN SYLLABICS TTHECANADIAN SYLL" + - "ABICS TTHICANADIAN SYLLABICS TTHOCANADIAN SYLLABICS TTHACANADIAN SYLLABI" + - "CS TTHCANADIAN SYLLABICS TYECANADIAN SYLLABICS TYICANADIAN SYLLABICS TYO" + - "CANADIAN SYLLABICS TYACANADIAN SYLLABICS NUNAVIK HECANADIAN SYLLABICS NU" + - "NAVIK HICANADIAN SYLLABICS NUNAVIK HIICANADIAN SYLLABICS NUNAVIK HOCANAD" + - "IAN SYLLABICS NUNAVIK HOOCANADIAN SYLLABICS NUNAVIK HACANADIAN SYLLABICS" + - " NUNAVIK HAACANADIAN SYLLABICS NUNAVIK HCANADIAN SYLLABICS NUNAVUT HCANA" + - "DIAN SYLLABICS HKCANADIAN SYLLABICS QAAICANADIAN SYLLABICS QICANADIAN SY" + - "LLABICS QIICANADIAN SYLLABICS QOCANADIAN SYLLABICS QOOCANADIAN SYLLABICS" + - " QACANADIAN SYLLABICS QAACANADIAN SYLLABICS QCANADIAN SYLLABICS TLHECANA" + - "DIAN SYLLABICS TLHICANADIAN SYLLABICS TLHOCANADIAN SYLLABICS TLHACANADIA" + - "N SYLLABICS WEST-CREE RECANADIAN SYLLABICS WEST-CREE RICANADIAN SYLLABIC" + - "S WEST-CREE ROCANADIAN SYLLABICS WEST-CREE RACANADIAN SYLLABICS NGAAICAN" + - "ADIAN SYLLABICS NGICANADIAN SYLLABICS NGIICANADIAN SYLLABICS NGOCANADIAN" + - " SYLLABICS NGOOCANADIAN SYLLABICS NGACANADIAN SYLLABICS NGAACANADIAN SYL" + - "LABICS NGCANADIAN SYLLABICS NNGCANADIAN SYLLABICS SAYISI SHECANADIAN SYL") + ("" + - "LABICS SAYISI SHICANADIAN SYLLABICS SAYISI SHOCANADIAN SYLLABICS SAYISI " + - "SHACANADIAN SYLLABICS WOODS-CREE THECANADIAN SYLLABICS WOODS-CREE THICAN" + - "ADIAN SYLLABICS WOODS-CREE THOCANADIAN SYLLABICS WOODS-CREE THACANADIAN " + - "SYLLABICS WOODS-CREE THCANADIAN SYLLABICS LHICANADIAN SYLLABICS LHIICANA" + - "DIAN SYLLABICS LHOCANADIAN SYLLABICS LHOOCANADIAN SYLLABICS LHACANADIAN " + - "SYLLABICS LHAACANADIAN SYLLABICS LHCANADIAN SYLLABICS TH-CREE THECANADIA" + - "N SYLLABICS TH-CREE THICANADIAN SYLLABICS TH-CREE THIICANADIAN SYLLABICS" + - " TH-CREE THOCANADIAN SYLLABICS TH-CREE THOOCANADIAN SYLLABICS TH-CREE TH" + - "ACANADIAN SYLLABICS TH-CREE THAACANADIAN SYLLABICS TH-CREE THCANADIAN SY" + - "LLABICS AIVILIK BCANADIAN SYLLABICS BLACKFOOT ECANADIAN SYLLABICS BLACKF" + - "OOT ICANADIAN SYLLABICS BLACKFOOT OCANADIAN SYLLABICS BLACKFOOT ACANADIA" + - "N SYLLABICS BLACKFOOT WECANADIAN SYLLABICS BLACKFOOT WICANADIAN SYLLABIC" + - "S BLACKFOOT WOCANADIAN SYLLABICS BLACKFOOT WACANADIAN SYLLABICS BLACKFOO" + - "T NECANADIAN SYLLABICS BLACKFOOT NICANADIAN SYLLABICS BLACKFOOT NOCANADI" + - "AN SYLLABICS BLACKFOOT NACANADIAN SYLLABICS BLACKFOOT KECANADIAN SYLLABI" + - "CS BLACKFOOT KICANADIAN SYLLABICS BLACKFOOT KOCANADIAN SYLLABICS BLACKFO" + - "OT KACANADIAN SYLLABICS SAYISI HECANADIAN SYLLABICS SAYISI HICANADIAN SY" + - "LLABICS SAYISI HOCANADIAN SYLLABICS SAYISI HACANADIAN SYLLABICS CARRIER " + - "GHUCANADIAN SYLLABICS CARRIER GHOCANADIAN SYLLABICS CARRIER GHECANADIAN " + - "SYLLABICS CARRIER GHEECANADIAN SYLLABICS CARRIER GHICANADIAN SYLLABICS C" + - "ARRIER GHACANADIAN SYLLABICS CARRIER RUCANADIAN SYLLABICS CARRIER ROCANA" + - "DIAN SYLLABICS CARRIER RECANADIAN SYLLABICS CARRIER REECANADIAN SYLLABIC" + - "S CARRIER RICANADIAN SYLLABICS CARRIER RACANADIAN SYLLABICS CARRIER WUCA" + - "NADIAN SYLLABICS CARRIER WOCANADIAN SYLLABICS CARRIER WECANADIAN SYLLABI" + - "CS CARRIER WEECANADIAN SYLLABICS CARRIER WICANADIAN SYLLABICS CARRIER WA" + - "CANADIAN SYLLABICS CARRIER HWUCANADIAN SYLLABICS CARRIER HWOCANADIAN SYL" + - "LABICS CARRIER HWECANADIAN SYLLABICS CARRIER HWEECANADIAN SYLLABICS CARR" + - "IER HWICANADIAN SYLLABICS CARRIER HWACANADIAN SYLLABICS CARRIER THUCANAD" + - "IAN SYLLABICS CARRIER THOCANADIAN SYLLABICS CARRIER THECANADIAN SYLLABIC" + - "S CARRIER THEECANADIAN SYLLABICS CARRIER THICANADIAN SYLLABICS CARRIER T" + - "HACANADIAN SYLLABICS CARRIER TTUCANADIAN SYLLABICS CARRIER TTOCANADIAN S" + - "YLLABICS CARRIER TTECANADIAN SYLLABICS CARRIER TTEECANADIAN SYLLABICS CA" + - "RRIER TTICANADIAN SYLLABICS CARRIER TTACANADIAN SYLLABICS CARRIER PUCANA" + - "DIAN SYLLABICS CARRIER POCANADIAN SYLLABICS CARRIER PECANADIAN SYLLABICS" + - " CARRIER PEECANADIAN SYLLABICS CARRIER PICANADIAN SYLLABICS CARRIER PACA" + - "NADIAN SYLLABICS CARRIER PCANADIAN SYLLABICS CARRIER GUCANADIAN SYLLABIC" + - "S CARRIER GOCANADIAN SYLLABICS CARRIER GECANADIAN SYLLABICS CARRIER GEEC" + - "ANADIAN SYLLABICS CARRIER GICANADIAN SYLLABICS CARRIER GACANADIAN SYLLAB" + - "ICS CARRIER KHUCANADIAN SYLLABICS CARRIER KHOCANADIAN SYLLABICS CARRIER " + - "KHECANADIAN SYLLABICS CARRIER KHEECANADIAN SYLLABICS CARRIER KHICANADIAN" + - " SYLLABICS CARRIER KHACANADIAN SYLLABICS CARRIER KKUCANADIAN SYLLABICS C" + - "ARRIER KKOCANADIAN SYLLABICS CARRIER KKECANADIAN SYLLABICS CARRIER KKEEC" + - "ANADIAN SYLLABICS CARRIER KKICANADIAN SYLLABICS CARRIER KKACANADIAN SYLL" + - "ABICS CARRIER KKCANADIAN SYLLABICS CARRIER NUCANADIAN SYLLABICS CARRIER " + - "NOCANADIAN SYLLABICS CARRIER NECANADIAN SYLLABICS CARRIER NEECANADIAN SY" + - "LLABICS CARRIER NICANADIAN SYLLABICS CARRIER NACANADIAN SYLLABICS CARRIE" + - "R MUCANADIAN SYLLABICS CARRIER MOCANADIAN SYLLABICS CARRIER MECANADIAN S" + - "YLLABICS CARRIER MEECANADIAN SYLLABICS CARRIER MICANADIAN SYLLABICS CARR" + - "IER MACANADIAN SYLLABICS CARRIER YUCANADIAN SYLLABICS CARRIER YOCANADIAN" + - " SYLLABICS CARRIER YECANADIAN SYLLABICS CARRIER YEECANADIAN SYLLABICS CA" + - "RRIER YICANADIAN SYLLABICS CARRIER YACANADIAN SYLLABICS CARRIER JUCANADI" + - "AN SYLLABICS SAYISI JUCANADIAN SYLLABICS CARRIER JOCANADIAN SYLLABICS CA" + - "RRIER JECANADIAN SYLLABICS CARRIER JEECANADIAN SYLLABICS CARRIER JICANAD" + - "IAN SYLLABICS SAYISI JICANADIAN SYLLABICS CARRIER JACANADIAN SYLLABICS C" + - "ARRIER JJUCANADIAN SYLLABICS CARRIER JJOCANADIAN SYLLABICS CARRIER JJECA" + - "NADIAN SYLLABICS CARRIER JJEECANADIAN SYLLABICS CARRIER JJICANADIAN SYLL" + - "ABICS CARRIER JJACANADIAN SYLLABICS CARRIER LUCANADIAN SYLLABICS CARRIER" + - " LOCANADIAN SYLLABICS CARRIER LECANADIAN SYLLABICS CARRIER LEECANADIAN S" + - "YLLABICS CARRIER LICANADIAN SYLLABICS CARRIER LACANADIAN SYLLABICS CARRI" + - "ER DLUCANADIAN SYLLABICS CARRIER DLOCANADIAN SYLLABICS CARRIER DLECANADI" + - "AN SYLLABICS CARRIER DLEECANADIAN SYLLABICS CARRIER DLICANADIAN SYLLABIC" + - "S CARRIER DLACANADIAN SYLLABICS CARRIER LHUCANADIAN SYLLABICS CARRIER LH" + - "OCANADIAN SYLLABICS CARRIER LHECANADIAN SYLLABICS CARRIER LHEECANADIAN S" + - "YLLABICS CARRIER LHICANADIAN SYLLABICS CARRIER LHACANADIAN SYLLABICS CAR") + ("" + - "RIER TLHUCANADIAN SYLLABICS CARRIER TLHOCANADIAN SYLLABICS CARRIER TLHEC" + - "ANADIAN SYLLABICS CARRIER TLHEECANADIAN SYLLABICS CARRIER TLHICANADIAN S" + - "YLLABICS CARRIER TLHACANADIAN SYLLABICS CARRIER TLUCANADIAN SYLLABICS CA" + - "RRIER TLOCANADIAN SYLLABICS CARRIER TLECANADIAN SYLLABICS CARRIER TLEECA" + - "NADIAN SYLLABICS CARRIER TLICANADIAN SYLLABICS CARRIER TLACANADIAN SYLLA" + - "BICS CARRIER ZUCANADIAN SYLLABICS CARRIER ZOCANADIAN SYLLABICS CARRIER Z" + - "ECANADIAN SYLLABICS CARRIER ZEECANADIAN SYLLABICS CARRIER ZICANADIAN SYL" + - "LABICS CARRIER ZACANADIAN SYLLABICS CARRIER ZCANADIAN SYLLABICS CARRIER " + - "INITIAL ZCANADIAN SYLLABICS CARRIER DZUCANADIAN SYLLABICS CARRIER DZOCAN" + - "ADIAN SYLLABICS CARRIER DZECANADIAN SYLLABICS CARRIER DZEECANADIAN SYLLA" + - "BICS CARRIER DZICANADIAN SYLLABICS CARRIER DZACANADIAN SYLLABICS CARRIER" + - " SUCANADIAN SYLLABICS CARRIER SOCANADIAN SYLLABICS CARRIER SECANADIAN SY" + - "LLABICS CARRIER SEECANADIAN SYLLABICS CARRIER SICANADIAN SYLLABICS CARRI" + - "ER SACANADIAN SYLLABICS CARRIER SHUCANADIAN SYLLABICS CARRIER SHOCANADIA" + - "N SYLLABICS CARRIER SHECANADIAN SYLLABICS CARRIER SHEECANADIAN SYLLABICS" + - " CARRIER SHICANADIAN SYLLABICS CARRIER SHACANADIAN SYLLABICS CARRIER SHC" + - "ANADIAN SYLLABICS CARRIER TSUCANADIAN SYLLABICS CARRIER TSOCANADIAN SYLL" + - "ABICS CARRIER TSECANADIAN SYLLABICS CARRIER TSEECANADIAN SYLLABICS CARRI" + - "ER TSICANADIAN SYLLABICS CARRIER TSACANADIAN SYLLABICS CARRIER CHUCANADI" + - "AN SYLLABICS CARRIER CHOCANADIAN SYLLABICS CARRIER CHECANADIAN SYLLABICS" + - " CARRIER CHEECANADIAN SYLLABICS CARRIER CHICANADIAN SYLLABICS CARRIER CH" + - "ACANADIAN SYLLABICS CARRIER TTSUCANADIAN SYLLABICS CARRIER TTSOCANADIAN " + - "SYLLABICS CARRIER TTSECANADIAN SYLLABICS CARRIER TTSEECANADIAN SYLLABICS" + - " CARRIER TTSICANADIAN SYLLABICS CARRIER TTSACANADIAN SYLLABICS CHI SIGNC" + - "ANADIAN SYLLABICS FULL STOPCANADIAN SYLLABICS QAICANADIAN SYLLABICS NGAI" + - "CANADIAN SYLLABICS NNGICANADIAN SYLLABICS NNGIICANADIAN SYLLABICS NNGOCA" + - "NADIAN SYLLABICS NNGOOCANADIAN SYLLABICS NNGACANADIAN SYLLABICS NNGAACAN" + - "ADIAN SYLLABICS WOODS-CREE THWEECANADIAN SYLLABICS WOODS-CREE THWICANADI" + - "AN SYLLABICS WOODS-CREE THWIICANADIAN SYLLABICS WOODS-CREE THWOCANADIAN " + - "SYLLABICS WOODS-CREE THWOOCANADIAN SYLLABICS WOODS-CREE THWACANADIAN SYL" + - "LABICS WOODS-CREE THWAACANADIAN SYLLABICS WOODS-CREE FINAL THCANADIAN SY" + - "LLABICS BLACKFOOT WOGHAM SPACE MARKOGHAM LETTER BEITHOGHAM LETTER LUISOG" + - "HAM LETTER FEARNOGHAM LETTER SAILOGHAM LETTER NIONOGHAM LETTER UATHOGHAM" + - " LETTER DAIROGHAM LETTER TINNEOGHAM LETTER COLLOGHAM LETTER CEIRTOGHAM L" + - "ETTER MUINOGHAM LETTER GORTOGHAM LETTER NGEADALOGHAM LETTER STRAIFOGHAM " + - "LETTER RUISOGHAM LETTER AILMOGHAM LETTER ONNOGHAM LETTER UROGHAM LETTER " + - "EADHADHOGHAM LETTER IODHADHOGHAM LETTER EABHADHOGHAM LETTER OROGHAM LETT" + - "ER UILLEANNOGHAM LETTER IFINOGHAM LETTER EAMHANCHOLLOGHAM LETTER PEITHOG" + - "HAM FEATHER MARKOGHAM REVERSED FEATHER MARKRUNIC LETTER FEHU FEOH FE FRU" + - "NIC LETTER VRUNIC LETTER URUZ UR URUNIC LETTER YRRUNIC LETTER YRUNIC LET" + - "TER WRUNIC LETTER THURISAZ THURS THORNRUNIC LETTER ETHRUNIC LETTER ANSUZ" + - " ARUNIC LETTER OS ORUNIC LETTER AC ARUNIC LETTER AESCRUNIC LETTER LONG-B" + - "RANCH-OSS ORUNIC LETTER SHORT-TWIG-OSS ORUNIC LETTER ORUNIC LETTER OERUN" + - "IC LETTER ONRUNIC LETTER RAIDO RAD REID RRUNIC LETTER KAUNARUNIC LETTER " + - "CENRUNIC LETTER KAUN KRUNIC LETTER GRUNIC LETTER ENGRUNIC LETTER GEBO GY" + - "FU GRUNIC LETTER GARRUNIC LETTER WUNJO WYNN WRUNIC LETTER HAGLAZ HRUNIC " + - "LETTER HAEGL HRUNIC LETTER LONG-BRANCH-HAGALL HRUNIC LETTER SHORT-TWIG-H" + - "AGALL HRUNIC LETTER NAUDIZ NYD NAUD NRUNIC LETTER SHORT-TWIG-NAUD NRUNIC" + - " LETTER DOTTED-NRUNIC LETTER ISAZ IS ISS IRUNIC LETTER ERUNIC LETTER JER" + - "AN JRUNIC LETTER GERRUNIC LETTER LONG-BRANCH-AR AERUNIC LETTER SHORT-TWI" + - "G-AR ARUNIC LETTER IWAZ EOHRUNIC LETTER PERTHO PEORTH PRUNIC LETTER ALGI" + - "Z EOLHXRUNIC LETTER SOWILO SRUNIC LETTER SIGEL LONG-BRANCH-SOL SRUNIC LE" + - "TTER SHORT-TWIG-SOL SRUNIC LETTER CRUNIC LETTER ZRUNIC LETTER TIWAZ TIR " + - "TYR TRUNIC LETTER SHORT-TWIG-TYR TRUNIC LETTER DRUNIC LETTER BERKANAN BE" + - "ORC BJARKAN BRUNIC LETTER SHORT-TWIG-BJARKAN BRUNIC LETTER DOTTED-PRUNIC" + - " LETTER OPEN-PRUNIC LETTER EHWAZ EH ERUNIC LETTER MANNAZ MAN MRUNIC LETT" + - "ER LONG-BRANCH-MADR MRUNIC LETTER SHORT-TWIG-MADR MRUNIC LETTER LAUKAZ L" + - "AGU LOGR LRUNIC LETTER DOTTED-LRUNIC LETTER INGWAZRUNIC LETTER INGRUNIC " + - "LETTER DAGAZ DAEG DRUNIC LETTER OTHALAN ETHEL ORUNIC LETTER EARRUNIC LET" + - "TER IORRUNIC LETTER CWEORTHRUNIC LETTER CALCRUNIC LETTER CEALCRUNIC LETT" + - "ER STANRUNIC LETTER LONG-BRANCH-YRRUNIC LETTER SHORT-TWIG-YRRUNIC LETTER" + - " ICELANDIC-YRRUNIC LETTER QRUNIC LETTER XRUNIC SINGLE PUNCTUATIONRUNIC M" + - "ULTIPLE PUNCTUATIONRUNIC CROSS PUNCTUATIONRUNIC ARLAUG SYMBOLRUNIC TVIMA" + - "DUR SYMBOLRUNIC BELGTHOR SYMBOLRUNIC LETTER KRUNIC LETTER SHRUNIC LETTER") + ("" + - " OORUNIC LETTER FRANKS CASKET OSRUNIC LETTER FRANKS CASKET ISRUNIC LETTE" + - "R FRANKS CASKET EHRUNIC LETTER FRANKS CASKET ACRUNIC LETTER FRANKS CASKE" + - "T AESCTAGALOG LETTER ATAGALOG LETTER ITAGALOG LETTER UTAGALOG LETTER KAT" + - "AGALOG LETTER GATAGALOG LETTER NGATAGALOG LETTER TATAGALOG LETTER DATAGA" + - "LOG LETTER NATAGALOG LETTER PATAGALOG LETTER BATAGALOG LETTER MATAGALOG " + - "LETTER YATAGALOG LETTER LATAGALOG LETTER WATAGALOG LETTER SATAGALOG LETT" + - "ER HATAGALOG VOWEL SIGN ITAGALOG VOWEL SIGN UTAGALOG SIGN VIRAMAHANUNOO " + - "LETTER AHANUNOO LETTER IHANUNOO LETTER UHANUNOO LETTER KAHANUNOO LETTER " + - "GAHANUNOO LETTER NGAHANUNOO LETTER TAHANUNOO LETTER DAHANUNOO LETTER NAH" + - "ANUNOO LETTER PAHANUNOO LETTER BAHANUNOO LETTER MAHANUNOO LETTER YAHANUN" + - "OO LETTER RAHANUNOO LETTER LAHANUNOO LETTER WAHANUNOO LETTER SAHANUNOO L" + - "ETTER HAHANUNOO VOWEL SIGN IHANUNOO VOWEL SIGN UHANUNOO SIGN PAMUDPODPHI" + - "LIPPINE SINGLE PUNCTUATIONPHILIPPINE DOUBLE PUNCTUATIONBUHID LETTER ABUH" + - "ID LETTER IBUHID LETTER UBUHID LETTER KABUHID LETTER GABUHID LETTER NGAB" + - "UHID LETTER TABUHID LETTER DABUHID LETTER NABUHID LETTER PABUHID LETTER " + - "BABUHID LETTER MABUHID LETTER YABUHID LETTER RABUHID LETTER LABUHID LETT" + - "ER WABUHID LETTER SABUHID LETTER HABUHID VOWEL SIGN IBUHID VOWEL SIGN UT" + - "AGBANWA LETTER ATAGBANWA LETTER ITAGBANWA LETTER UTAGBANWA LETTER KATAGB" + - "ANWA LETTER GATAGBANWA LETTER NGATAGBANWA LETTER TATAGBANWA LETTER DATAG" + - "BANWA LETTER NATAGBANWA LETTER PATAGBANWA LETTER BATAGBANWA LETTER MATAG" + - "BANWA LETTER YATAGBANWA LETTER LATAGBANWA LETTER WATAGBANWA LETTER SATAG" + - "BANWA VOWEL SIGN ITAGBANWA VOWEL SIGN UKHMER LETTER KAKHMER LETTER KHAKH" + - "MER LETTER KOKHMER LETTER KHOKHMER LETTER NGOKHMER LETTER CAKHMER LETTER" + - " CHAKHMER LETTER COKHMER LETTER CHOKHMER LETTER NYOKHMER LETTER DAKHMER " + - "LETTER TTHAKHMER LETTER DOKHMER LETTER TTHOKHMER LETTER NNOKHMER LETTER " + - "TAKHMER LETTER THAKHMER LETTER TOKHMER LETTER THOKHMER LETTER NOKHMER LE" + - "TTER BAKHMER LETTER PHAKHMER LETTER POKHMER LETTER PHOKHMER LETTER MOKHM" + - "ER LETTER YOKHMER LETTER ROKHMER LETTER LOKHMER LETTER VOKHMER LETTER SH" + - "AKHMER LETTER SSOKHMER LETTER SAKHMER LETTER HAKHMER LETTER LAKHMER LETT" + - "ER QAKHMER INDEPENDENT VOWEL QAQKHMER INDEPENDENT VOWEL QAAKHMER INDEPEN" + - "DENT VOWEL QIKHMER INDEPENDENT VOWEL QIIKHMER INDEPENDENT VOWEL QUKHMER " + - "INDEPENDENT VOWEL QUKKHMER INDEPENDENT VOWEL QUUKHMER INDEPENDENT VOWEL " + - "QUUVKHMER INDEPENDENT VOWEL RYKHMER INDEPENDENT VOWEL RYYKHMER INDEPENDE" + - "NT VOWEL LYKHMER INDEPENDENT VOWEL LYYKHMER INDEPENDENT VOWEL QEKHMER IN" + - "DEPENDENT VOWEL QAIKHMER INDEPENDENT VOWEL QOO TYPE ONEKHMER INDEPENDENT" + - " VOWEL QOO TYPE TWOKHMER INDEPENDENT VOWEL QAUKHMER VOWEL INHERENT AQKHM" + - "ER VOWEL INHERENT AAKHMER VOWEL SIGN AAKHMER VOWEL SIGN IKHMER VOWEL SIG" + - "N IIKHMER VOWEL SIGN YKHMER VOWEL SIGN YYKHMER VOWEL SIGN UKHMER VOWEL S" + - "IGN UUKHMER VOWEL SIGN UAKHMER VOWEL SIGN OEKHMER VOWEL SIGN YAKHMER VOW" + - "EL SIGN IEKHMER VOWEL SIGN EKHMER VOWEL SIGN AEKHMER VOWEL SIGN AIKHMER " + - "VOWEL SIGN OOKHMER VOWEL SIGN AUKHMER SIGN NIKAHITKHMER SIGN REAHMUKKHME" + - "R SIGN YUUKALEAPINTUKHMER SIGN MUUSIKATOANKHMER SIGN TRIISAPKHMER SIGN B" + - "ANTOCKHMER SIGN ROBATKHMER SIGN TOANDAKHIATKHMER SIGN KAKABATKHMER SIGN " + - "AHSDAKHMER SIGN SAMYOK SANNYAKHMER SIGN VIRIAMKHMER SIGN COENGKHMER SIGN" + - " BATHAMASATKHMER SIGN KHANKHMER SIGN BARIYOOSANKHMER SIGN CAMNUC PII KUU" + - "HKHMER SIGN LEK TOOKHMER SIGN BEYYALKHMER SIGN PHNAEK MUANKHMER SIGN KOO" + - "MUUTKHMER CURRENCY SYMBOL RIELKHMER SIGN AVAKRAHASANYAKHMER SIGN ATTHACA" + - "NKHMER DIGIT ZEROKHMER DIGIT ONEKHMER DIGIT TWOKHMER DIGIT THREEKHMER DI" + - "GIT FOURKHMER DIGIT FIVEKHMER DIGIT SIXKHMER DIGIT SEVENKHMER DIGIT EIGH" + - "TKHMER DIGIT NINEKHMER SYMBOL LEK ATTAK SONKHMER SYMBOL LEK ATTAK MUOYKH" + - "MER SYMBOL LEK ATTAK PIIKHMER SYMBOL LEK ATTAK BEIKHMER SYMBOL LEK ATTAK" + - " BUONKHMER SYMBOL LEK ATTAK PRAMKHMER SYMBOL LEK ATTAK PRAM-MUOYKHMER SY" + - "MBOL LEK ATTAK PRAM-PIIKHMER SYMBOL LEK ATTAK PRAM-BEIKHMER SYMBOL LEK A" + - "TTAK PRAM-BUONMONGOLIAN BIRGAMONGOLIAN ELLIPSISMONGOLIAN COMMAMONGOLIAN " + - "FULL STOPMONGOLIAN COLONMONGOLIAN FOUR DOTSMONGOLIAN TODO SOFT HYPHENMON" + - "GOLIAN SIBE SYLLABLE BOUNDARY MARKERMONGOLIAN MANCHU COMMAMONGOLIAN MANC" + - "HU FULL STOPMONGOLIAN NIRUGUMONGOLIAN FREE VARIATION SELECTOR ONEMONGOLI" + - "AN FREE VARIATION SELECTOR TWOMONGOLIAN FREE VARIATION SELECTOR THREEMON" + - "GOLIAN VOWEL SEPARATORMONGOLIAN DIGIT ZEROMONGOLIAN DIGIT ONEMONGOLIAN D" + - "IGIT TWOMONGOLIAN DIGIT THREEMONGOLIAN DIGIT FOURMONGOLIAN DIGIT FIVEMON" + - "GOLIAN DIGIT SIXMONGOLIAN DIGIT SEVENMONGOLIAN DIGIT EIGHTMONGOLIAN DIGI" + - "T NINEMONGOLIAN LETTER AMONGOLIAN LETTER EMONGOLIAN LETTER IMONGOLIAN LE" + - "TTER OMONGOLIAN LETTER UMONGOLIAN LETTER OEMONGOLIAN LETTER UEMONGOLIAN " + - "LETTER EEMONGOLIAN LETTER NAMONGOLIAN LETTER ANGMONGOLIAN LETTER BAMONGO") + ("" + - "LIAN LETTER PAMONGOLIAN LETTER QAMONGOLIAN LETTER GAMONGOLIAN LETTER MAM" + - "ONGOLIAN LETTER LAMONGOLIAN LETTER SAMONGOLIAN LETTER SHAMONGOLIAN LETTE" + - "R TAMONGOLIAN LETTER DAMONGOLIAN LETTER CHAMONGOLIAN LETTER JAMONGOLIAN " + - "LETTER YAMONGOLIAN LETTER RAMONGOLIAN LETTER WAMONGOLIAN LETTER FAMONGOL" + - "IAN LETTER KAMONGOLIAN LETTER KHAMONGOLIAN LETTER TSAMONGOLIAN LETTER ZA" + - "MONGOLIAN LETTER HAAMONGOLIAN LETTER ZRAMONGOLIAN LETTER LHAMONGOLIAN LE" + - "TTER ZHIMONGOLIAN LETTER CHIMONGOLIAN LETTER TODO LONG VOWEL SIGNMONGOLI" + - "AN LETTER TODO EMONGOLIAN LETTER TODO IMONGOLIAN LETTER TODO OMONGOLIAN " + - "LETTER TODO UMONGOLIAN LETTER TODO OEMONGOLIAN LETTER TODO UEMONGOLIAN L" + - "ETTER TODO ANGMONGOLIAN LETTER TODO BAMONGOLIAN LETTER TODO PAMONGOLIAN " + - "LETTER TODO QAMONGOLIAN LETTER TODO GAMONGOLIAN LETTER TODO MAMONGOLIAN " + - "LETTER TODO TAMONGOLIAN LETTER TODO DAMONGOLIAN LETTER TODO CHAMONGOLIAN" + - " LETTER TODO JAMONGOLIAN LETTER TODO TSAMONGOLIAN LETTER TODO YAMONGOLIA" + - "N LETTER TODO WAMONGOLIAN LETTER TODO KAMONGOLIAN LETTER TODO GAAMONGOLI" + - "AN LETTER TODO HAAMONGOLIAN LETTER TODO JIAMONGOLIAN LETTER TODO NIAMONG" + - "OLIAN LETTER TODO DZAMONGOLIAN LETTER SIBE EMONGOLIAN LETTER SIBE IMONGO" + - "LIAN LETTER SIBE IYMONGOLIAN LETTER SIBE UEMONGOLIAN LETTER SIBE UMONGOL" + - "IAN LETTER SIBE ANGMONGOLIAN LETTER SIBE KAMONGOLIAN LETTER SIBE GAMONGO" + - "LIAN LETTER SIBE HAMONGOLIAN LETTER SIBE PAMONGOLIAN LETTER SIBE SHAMONG" + - "OLIAN LETTER SIBE TAMONGOLIAN LETTER SIBE DAMONGOLIAN LETTER SIBE JAMONG" + - "OLIAN LETTER SIBE FAMONGOLIAN LETTER SIBE GAAMONGOLIAN LETTER SIBE HAAMO" + - "NGOLIAN LETTER SIBE TSAMONGOLIAN LETTER SIBE ZAMONGOLIAN LETTER SIBE RAA" + - "MONGOLIAN LETTER SIBE CHAMONGOLIAN LETTER SIBE ZHAMONGOLIAN LETTER MANCH" + - "U IMONGOLIAN LETTER MANCHU KAMONGOLIAN LETTER MANCHU RAMONGOLIAN LETTER " + - "MANCHU FAMONGOLIAN LETTER MANCHU ZHAMONGOLIAN LETTER ALI GALI ANUSVARA O" + - "NEMONGOLIAN LETTER ALI GALI VISARGA ONEMONGOLIAN LETTER ALI GALI DAMARUM" + - "ONGOLIAN LETTER ALI GALI UBADAMAMONGOLIAN LETTER ALI GALI INVERTED UBADA" + - "MAMONGOLIAN LETTER ALI GALI BALUDAMONGOLIAN LETTER ALI GALI THREE BALUDA" + - "MONGOLIAN LETTER ALI GALI AMONGOLIAN LETTER ALI GALI IMONGOLIAN LETTER A" + - "LI GALI KAMONGOLIAN LETTER ALI GALI NGAMONGOLIAN LETTER ALI GALI CAMONGO" + - "LIAN LETTER ALI GALI TTAMONGOLIAN LETTER ALI GALI TTHAMONGOLIAN LETTER A" + - "LI GALI DDAMONGOLIAN LETTER ALI GALI NNAMONGOLIAN LETTER ALI GALI TAMONG" + - "OLIAN LETTER ALI GALI DAMONGOLIAN LETTER ALI GALI PAMONGOLIAN LETTER ALI" + - " GALI PHAMONGOLIAN LETTER ALI GALI SSAMONGOLIAN LETTER ALI GALI ZHAMONGO" + - "LIAN LETTER ALI GALI ZAMONGOLIAN LETTER ALI GALI AHMONGOLIAN LETTER TODO" + - " ALI GALI TAMONGOLIAN LETTER TODO ALI GALI ZHAMONGOLIAN LETTER MANCHU AL" + - "I GALI GHAMONGOLIAN LETTER MANCHU ALI GALI NGAMONGOLIAN LETTER MANCHU AL" + - "I GALI CAMONGOLIAN LETTER MANCHU ALI GALI JHAMONGOLIAN LETTER MANCHU ALI" + - " GALI TTAMONGOLIAN LETTER MANCHU ALI GALI DDHAMONGOLIAN LETTER MANCHU AL" + - "I GALI TAMONGOLIAN LETTER MANCHU ALI GALI DHAMONGOLIAN LETTER MANCHU ALI" + - " GALI SSAMONGOLIAN LETTER MANCHU ALI GALI CYAMONGOLIAN LETTER MANCHU ALI" + - " GALI ZHAMONGOLIAN LETTER MANCHU ALI GALI ZAMONGOLIAN LETTER ALI GALI HA" + - "LF UMONGOLIAN LETTER ALI GALI HALF YAMONGOLIAN LETTER MANCHU ALI GALI BH" + - "AMONGOLIAN LETTER ALI GALI DAGALGAMONGOLIAN LETTER MANCHU ALI GALI LHACA" + - "NADIAN SYLLABICS OYCANADIAN SYLLABICS AYCANADIAN SYLLABICS AAYCANADIAN S" + - "YLLABICS WAYCANADIAN SYLLABICS POYCANADIAN SYLLABICS PAYCANADIAN SYLLABI" + - "CS PWOYCANADIAN SYLLABICS TAYCANADIAN SYLLABICS KAYCANADIAN SYLLABICS KW" + - "AYCANADIAN SYLLABICS MAYCANADIAN SYLLABICS NOYCANADIAN SYLLABICS NAYCANA" + - "DIAN SYLLABICS LAYCANADIAN SYLLABICS SOYCANADIAN SYLLABICS SAYCANADIAN S" + - "YLLABICS SHOYCANADIAN SYLLABICS SHAYCANADIAN SYLLABICS SHWOYCANADIAN SYL" + - "LABICS YOYCANADIAN SYLLABICS YAYCANADIAN SYLLABICS RAYCANADIAN SYLLABICS" + - " NWICANADIAN SYLLABICS OJIBWAY NWICANADIAN SYLLABICS NWIICANADIAN SYLLAB" + - "ICS OJIBWAY NWIICANADIAN SYLLABICS NWOCANADIAN SYLLABICS OJIBWAY NWOCANA" + - "DIAN SYLLABICS NWOOCANADIAN SYLLABICS OJIBWAY NWOOCANADIAN SYLLABICS RWE" + - "ECANADIAN SYLLABICS RWICANADIAN SYLLABICS RWIICANADIAN SYLLABICS RWOCANA" + - "DIAN SYLLABICS RWOOCANADIAN SYLLABICS RWACANADIAN SYLLABICS OJIBWAY PCAN" + - "ADIAN SYLLABICS OJIBWAY TCANADIAN SYLLABICS OJIBWAY KCANADIAN SYLLABICS " + - "OJIBWAY CCANADIAN SYLLABICS OJIBWAY MCANADIAN SYLLABICS OJIBWAY NCANADIA" + - "N SYLLABICS OJIBWAY SCANADIAN SYLLABICS OJIBWAY SHCANADIAN SYLLABICS EAS" + - "TERN WCANADIAN SYLLABICS WESTERN WCANADIAN SYLLABICS FINAL SMALL RINGCAN" + - "ADIAN SYLLABICS FINAL RAISED DOTCANADIAN SYLLABICS R-CREE RWECANADIAN SY" + - "LLABICS WEST-CREE LOOCANADIAN SYLLABICS WEST-CREE LAACANADIAN SYLLABICS " + - "THWECANADIAN SYLLABICS THWACANADIAN SYLLABICS TTHWECANADIAN SYLLABICS TT" + - "HOOCANADIAN SYLLABICS TTHAACANADIAN SYLLABICS TLHWECANADIAN SYLLABICS TL") + ("" + - "HOOCANADIAN SYLLABICS SAYISI SHWECANADIAN SYLLABICS SAYISI SHOOCANADIAN " + - "SYLLABICS SAYISI HOOCANADIAN SYLLABICS CARRIER GWUCANADIAN SYLLABICS CAR" + - "RIER DENE GEECANADIAN SYLLABICS CARRIER GAACANADIAN SYLLABICS CARRIER GW" + - "ACANADIAN SYLLABICS SAYISI JUUCANADIAN SYLLABICS CARRIER JWACANADIAN SYL" + - "LABICS BEAVER DENE LCANADIAN SYLLABICS BEAVER DENE RCANADIAN SYLLABICS C" + - "ARRIER DENTAL SLIMBU VOWEL-CARRIER LETTERLIMBU LETTER KALIMBU LETTER KHA" + - "LIMBU LETTER GALIMBU LETTER GHALIMBU LETTER NGALIMBU LETTER CALIMBU LETT" + - "ER CHALIMBU LETTER JALIMBU LETTER JHALIMBU LETTER YANLIMBU LETTER TALIMB" + - "U LETTER THALIMBU LETTER DALIMBU LETTER DHALIMBU LETTER NALIMBU LETTER P" + - "ALIMBU LETTER PHALIMBU LETTER BALIMBU LETTER BHALIMBU LETTER MALIMBU LET" + - "TER YALIMBU LETTER RALIMBU LETTER LALIMBU LETTER WALIMBU LETTER SHALIMBU" + - " LETTER SSALIMBU LETTER SALIMBU LETTER HALIMBU LETTER GYANLIMBU LETTER T" + - "RALIMBU VOWEL SIGN ALIMBU VOWEL SIGN ILIMBU VOWEL SIGN ULIMBU VOWEL SIGN" + - " EELIMBU VOWEL SIGN AILIMBU VOWEL SIGN OOLIMBU VOWEL SIGN AULIMBU VOWEL " + - "SIGN ELIMBU VOWEL SIGN OLIMBU SUBJOINED LETTER YALIMBU SUBJOINED LETTER " + - "RALIMBU SUBJOINED LETTER WALIMBU SMALL LETTER KALIMBU SMALL LETTER NGALI" + - "MBU SMALL LETTER ANUSVARALIMBU SMALL LETTER TALIMBU SMALL LETTER NALIMBU" + - " SMALL LETTER PALIMBU SMALL LETTER MALIMBU SMALL LETTER RALIMBU SMALL LE" + - "TTER LALIMBU SIGN MUKPHRENGLIMBU SIGN KEMPHRENGLIMBU SIGN SA-ILIMBU SIGN" + - " LOOLIMBU EXCLAMATION MARKLIMBU QUESTION MARKLIMBU DIGIT ZEROLIMBU DIGIT" + - " ONELIMBU DIGIT TWOLIMBU DIGIT THREELIMBU DIGIT FOURLIMBU DIGIT FIVELIMB" + - "U DIGIT SIXLIMBU DIGIT SEVENLIMBU DIGIT EIGHTLIMBU DIGIT NINETAI LE LETT" + - "ER KATAI LE LETTER XATAI LE LETTER NGATAI LE LETTER TSATAI LE LETTER SAT" + - "AI LE LETTER YATAI LE LETTER TATAI LE LETTER THATAI LE LETTER LATAI LE L" + - "ETTER PATAI LE LETTER PHATAI LE LETTER MATAI LE LETTER FATAI LE LETTER V" + - "ATAI LE LETTER HATAI LE LETTER QATAI LE LETTER KHATAI LE LETTER TSHATAI " + - "LE LETTER NATAI LE LETTER ATAI LE LETTER ITAI LE LETTER EETAI LE LETTER " + - "EHTAI LE LETTER UTAI LE LETTER OOTAI LE LETTER OTAI LE LETTER UETAI LE L" + - "ETTER ETAI LE LETTER AUETAI LE LETTER AITAI LE LETTER TONE-2TAI LE LETTE" + - "R TONE-3TAI LE LETTER TONE-4TAI LE LETTER TONE-5TAI LE LETTER TONE-6NEW " + - "TAI LUE LETTER HIGH QANEW TAI LUE LETTER LOW QANEW TAI LUE LETTER HIGH K" + - "ANEW TAI LUE LETTER HIGH XANEW TAI LUE LETTER HIGH NGANEW TAI LUE LETTER" + - " LOW KANEW TAI LUE LETTER LOW XANEW TAI LUE LETTER LOW NGANEW TAI LUE LE" + - "TTER HIGH TSANEW TAI LUE LETTER HIGH SANEW TAI LUE LETTER HIGH YANEW TAI" + - " LUE LETTER LOW TSANEW TAI LUE LETTER LOW SANEW TAI LUE LETTER LOW YANEW" + - " TAI LUE LETTER HIGH TANEW TAI LUE LETTER HIGH THANEW TAI LUE LETTER HIG" + - "H NANEW TAI LUE LETTER LOW TANEW TAI LUE LETTER LOW THANEW TAI LUE LETTE" + - "R LOW NANEW TAI LUE LETTER HIGH PANEW TAI LUE LETTER HIGH PHANEW TAI LUE" + - " LETTER HIGH MANEW TAI LUE LETTER LOW PANEW TAI LUE LETTER LOW PHANEW TA" + - "I LUE LETTER LOW MANEW TAI LUE LETTER HIGH FANEW TAI LUE LETTER HIGH VAN" + - "EW TAI LUE LETTER HIGH LANEW TAI LUE LETTER LOW FANEW TAI LUE LETTER LOW" + - " VANEW TAI LUE LETTER LOW LANEW TAI LUE LETTER HIGH HANEW TAI LUE LETTER" + - " HIGH DANEW TAI LUE LETTER HIGH BANEW TAI LUE LETTER LOW HANEW TAI LUE L" + - "ETTER LOW DANEW TAI LUE LETTER LOW BANEW TAI LUE LETTER HIGH KVANEW TAI " + - "LUE LETTER HIGH XVANEW TAI LUE LETTER LOW KVANEW TAI LUE LETTER LOW XVAN" + - "EW TAI LUE LETTER HIGH SUANEW TAI LUE LETTER LOW SUANEW TAI LUE VOWEL SI" + - "GN VOWEL SHORTENERNEW TAI LUE VOWEL SIGN AANEW TAI LUE VOWEL SIGN IINEW " + - "TAI LUE VOWEL SIGN UNEW TAI LUE VOWEL SIGN UUNEW TAI LUE VOWEL SIGN ENEW" + - " TAI LUE VOWEL SIGN AENEW TAI LUE VOWEL SIGN ONEW TAI LUE VOWEL SIGN OAN" + - "EW TAI LUE VOWEL SIGN UENEW TAI LUE VOWEL SIGN AYNEW TAI LUE VOWEL SIGN " + - "AAYNEW TAI LUE VOWEL SIGN UYNEW TAI LUE VOWEL SIGN OYNEW TAI LUE VOWEL S" + - "IGN OAYNEW TAI LUE VOWEL SIGN UEYNEW TAI LUE VOWEL SIGN IYNEW TAI LUE LE" + - "TTER FINAL VNEW TAI LUE LETTER FINAL NGNEW TAI LUE LETTER FINAL NNEW TAI" + - " LUE LETTER FINAL MNEW TAI LUE LETTER FINAL KNEW TAI LUE LETTER FINAL DN" + - "EW TAI LUE LETTER FINAL BNEW TAI LUE TONE MARK-1NEW TAI LUE TONE MARK-2N" + - "EW TAI LUE DIGIT ZERONEW TAI LUE DIGIT ONENEW TAI LUE DIGIT TWONEW TAI L" + - "UE DIGIT THREENEW TAI LUE DIGIT FOURNEW TAI LUE DIGIT FIVENEW TAI LUE DI" + - "GIT SIXNEW TAI LUE DIGIT SEVENNEW TAI LUE DIGIT EIGHTNEW TAI LUE DIGIT N" + - "INENEW TAI LUE THAM DIGIT ONENEW TAI LUE SIGN LAENEW TAI LUE SIGN LAEVKH" + - "MER SYMBOL PATHAMASATKHMER SYMBOL MUOY KOETKHMER SYMBOL PII KOETKHMER SY" + - "MBOL BEI KOETKHMER SYMBOL BUON KOETKHMER SYMBOL PRAM KOETKHMER SYMBOL PR" + - "AM-MUOY KOETKHMER SYMBOL PRAM-PII KOETKHMER SYMBOL PRAM-BEI KOETKHMER SY" + - "MBOL PRAM-BUON KOETKHMER SYMBOL DAP KOETKHMER SYMBOL DAP-MUOY KOETKHMER " + - "SYMBOL DAP-PII KOETKHMER SYMBOL DAP-BEI KOETKHMER SYMBOL DAP-BUON KOETKH") + ("" + - "MER SYMBOL DAP-PRAM KOETKHMER SYMBOL TUTEYASATKHMER SYMBOL MUOY ROCKHMER" + - " SYMBOL PII ROCKHMER SYMBOL BEI ROCKHMER SYMBOL BUON ROCKHMER SYMBOL PRA" + - "M ROCKHMER SYMBOL PRAM-MUOY ROCKHMER SYMBOL PRAM-PII ROCKHMER SYMBOL PRA" + - "M-BEI ROCKHMER SYMBOL PRAM-BUON ROCKHMER SYMBOL DAP ROCKHMER SYMBOL DAP-" + - "MUOY ROCKHMER SYMBOL DAP-PII ROCKHMER SYMBOL DAP-BEI ROCKHMER SYMBOL DAP" + - "-BUON ROCKHMER SYMBOL DAP-PRAM ROCBUGINESE LETTER KABUGINESE LETTER GABU" + - "GINESE LETTER NGABUGINESE LETTER NGKABUGINESE LETTER PABUGINESE LETTER B" + - "ABUGINESE LETTER MABUGINESE LETTER MPABUGINESE LETTER TABUGINESE LETTER " + - "DABUGINESE LETTER NABUGINESE LETTER NRABUGINESE LETTER CABUGINESE LETTER" + - " JABUGINESE LETTER NYABUGINESE LETTER NYCABUGINESE LETTER YABUGINESE LET" + - "TER RABUGINESE LETTER LABUGINESE LETTER VABUGINESE LETTER SABUGINESE LET" + - "TER ABUGINESE LETTER HABUGINESE VOWEL SIGN IBUGINESE VOWEL SIGN UBUGINES" + - "E VOWEL SIGN EBUGINESE VOWEL SIGN OBUGINESE VOWEL SIGN AEBUGINESE PALLAW" + - "ABUGINESE END OF SECTIONTAI THAM LETTER HIGH KATAI THAM LETTER HIGH KHAT" + - "AI THAM LETTER HIGH KXATAI THAM LETTER LOW KATAI THAM LETTER LOW KXATAI " + - "THAM LETTER LOW KHATAI THAM LETTER NGATAI THAM LETTER HIGH CATAI THAM LE" + - "TTER HIGH CHATAI THAM LETTER LOW CATAI THAM LETTER LOW SATAI THAM LETTER" + - " LOW CHATAI THAM LETTER NYATAI THAM LETTER RATATAI THAM LETTER HIGH RATH" + - "ATAI THAM LETTER DATAI THAM LETTER LOW RATHATAI THAM LETTER RANATAI THAM" + - " LETTER HIGH TATAI THAM LETTER HIGH THATAI THAM LETTER LOW TATAI THAM LE" + - "TTER LOW THATAI THAM LETTER NATAI THAM LETTER BATAI THAM LETTER HIGH PAT" + - "AI THAM LETTER HIGH PHATAI THAM LETTER HIGH FATAI THAM LETTER LOW PATAI " + - "THAM LETTER LOW FATAI THAM LETTER LOW PHATAI THAM LETTER MATAI THAM LETT" + - "ER LOW YATAI THAM LETTER HIGH YATAI THAM LETTER RATAI THAM LETTER RUETAI" + - " THAM LETTER LATAI THAM LETTER LUETAI THAM LETTER WATAI THAM LETTER HIGH" + - " SHATAI THAM LETTER HIGH SSATAI THAM LETTER HIGH SATAI THAM LETTER HIGH " + - "HATAI THAM LETTER LLATAI THAM LETTER ATAI THAM LETTER LOW HATAI THAM LET" + - "TER ITAI THAM LETTER IITAI THAM LETTER UTAI THAM LETTER UUTAI THAM LETTE" + - "R EETAI THAM LETTER OOTAI THAM LETTER LAETAI THAM LETTER GREAT SATAI THA" + - "M CONSONANT SIGN MEDIAL RATAI THAM CONSONANT SIGN MEDIAL LATAI THAM CONS" + - "ONANT SIGN LA TANG LAITAI THAM SIGN MAI KANG LAITAI THAM CONSONANT SIGN " + - "FINAL NGATAI THAM CONSONANT SIGN LOW PATAI THAM CONSONANT SIGN HIGH RATH" + - "A OR LOW PATAI THAM CONSONANT SIGN MATAI THAM CONSONANT SIGN BATAI THAM " + - "CONSONANT SIGN SATAI THAM SIGN SAKOTTAI THAM VOWEL SIGN ATAI THAM VOWEL " + - "SIGN MAI SATTAI THAM VOWEL SIGN AATAI THAM VOWEL SIGN TALL AATAI THAM VO" + - "WEL SIGN ITAI THAM VOWEL SIGN IITAI THAM VOWEL SIGN UETAI THAM VOWEL SIG" + - "N UUETAI THAM VOWEL SIGN UTAI THAM VOWEL SIGN UUTAI THAM VOWEL SIGN OTAI" + - " THAM VOWEL SIGN OA BELOWTAI THAM VOWEL SIGN OYTAI THAM VOWEL SIGN ETAI " + - "THAM VOWEL SIGN AETAI THAM VOWEL SIGN OOTAI THAM VOWEL SIGN AITAI THAM V" + - "OWEL SIGN THAM AITAI THAM VOWEL SIGN OA ABOVETAI THAM SIGN MAI KANGTAI T" + - "HAM SIGN TONE-1TAI THAM SIGN TONE-2TAI THAM SIGN KHUEN TONE-3TAI THAM SI" + - "GN KHUEN TONE-4TAI THAM SIGN KHUEN TONE-5TAI THAM SIGN RA HAAMTAI THAM S" + - "IGN MAI SAMTAI THAM SIGN KHUEN-LUE KARANTAI THAM COMBINING CRYPTOGRAMMIC" + - " DOTTAI THAM HORA DIGIT ZEROTAI THAM HORA DIGIT ONETAI THAM HORA DIGIT T" + - "WOTAI THAM HORA DIGIT THREETAI THAM HORA DIGIT FOURTAI THAM HORA DIGIT F" + - "IVETAI THAM HORA DIGIT SIXTAI THAM HORA DIGIT SEVENTAI THAM HORA DIGIT E" + - "IGHTTAI THAM HORA DIGIT NINETAI THAM THAM DIGIT ZEROTAI THAM THAM DIGIT " + - "ONETAI THAM THAM DIGIT TWOTAI THAM THAM DIGIT THREETAI THAM THAM DIGIT F" + - "OURTAI THAM THAM DIGIT FIVETAI THAM THAM DIGIT SIXTAI THAM THAM DIGIT SE" + - "VENTAI THAM THAM DIGIT EIGHTTAI THAM THAM DIGIT NINETAI THAM SIGN WIANGT" + - "AI THAM SIGN WIANGWAAKTAI THAM SIGN SAWANTAI THAM SIGN KEOWTAI THAM SIGN" + - " HOYTAI THAM SIGN DOKMAITAI THAM SIGN REVERSED ROTATED RANATAI THAM SIGN" + - " MAI YAMOKTAI THAM SIGN KAANTAI THAM SIGN KAANKUUTAI THAM SIGN SATKAANTA" + - "I THAM SIGN SATKAANKUUTAI THAM SIGN HANGTAI THAM SIGN CAANGCOMBINING DOU" + - "BLED CIRCUMFLEX ACCENTCOMBINING DIAERESIS-RINGCOMBINING INFINITYCOMBININ" + - "G DOWNWARDS ARROWCOMBINING TRIPLE DOTCOMBINING X-X BELOWCOMBINING WIGGLY" + - " LINE BELOWCOMBINING OPEN MARK BELOWCOMBINING DOUBLE OPEN MARK BELOWCOMB" + - "INING LIGHT CENTRALIZATION STROKE BELOWCOMBINING STRONG CENTRALIZATION S" + - "TROKE BELOWCOMBINING PARENTHESES ABOVECOMBINING DOUBLE PARENTHESES ABOVE" + - "COMBINING PARENTHESES BELOWCOMBINING PARENTHESES OVERLAYBALINESE SIGN UL" + - "U RICEMBALINESE SIGN ULU CANDRABALINESE SIGN CECEKBALINESE SIGN SURANGBA" + - "LINESE SIGN BISAHBALINESE LETTER AKARABALINESE LETTER AKARA TEDUNGBALINE" + - "SE LETTER IKARABALINESE LETTER IKARA TEDUNGBALINESE LETTER UKARABALINESE" + - " LETTER UKARA TEDUNGBALINESE LETTER RA REPABALINESE LETTER RA REPA TEDUN") + ("" + - "GBALINESE LETTER LA LENGABALINESE LETTER LA LENGA TEDUNGBALINESE LETTER " + - "EKARABALINESE LETTER AIKARABALINESE LETTER OKARABALINESE LETTER OKARA TE" + - "DUNGBALINESE LETTER KABALINESE LETTER KA MAHAPRANABALINESE LETTER GABALI" + - "NESE LETTER GA GORABALINESE LETTER NGABALINESE LETTER CABALINESE LETTER " + - "CA LACABALINESE LETTER JABALINESE LETTER JA JERABALINESE LETTER NYABALIN" + - "ESE LETTER TA LATIKBALINESE LETTER TA MURDA MAHAPRANABALINESE LETTER DA " + - "MURDA ALPAPRANABALINESE LETTER DA MURDA MAHAPRANABALINESE LETTER NA RAMB" + - "ATBALINESE LETTER TABALINESE LETTER TA TAWABALINESE LETTER DABALINESE LE" + - "TTER DA MADUBALINESE LETTER NABALINESE LETTER PABALINESE LETTER PA KAPAL" + - "BALINESE LETTER BABALINESE LETTER BA KEMBANGBALINESE LETTER MABALINESE L" + - "ETTER YABALINESE LETTER RABALINESE LETTER LABALINESE LETTER WABALINESE L" + - "ETTER SA SAGABALINESE LETTER SA SAPABALINESE LETTER SABALINESE LETTER HA" + - "BALINESE SIGN REREKANBALINESE VOWEL SIGN TEDUNGBALINESE VOWEL SIGN ULUBA" + - "LINESE VOWEL SIGN ULU SARIBALINESE VOWEL SIGN SUKUBALINESE VOWEL SIGN SU" + - "KU ILUTBALINESE VOWEL SIGN RA REPABALINESE VOWEL SIGN RA REPA TEDUNGBALI" + - "NESE VOWEL SIGN LA LENGABALINESE VOWEL SIGN LA LENGA TEDUNGBALINESE VOWE" + - "L SIGN TALINGBALINESE VOWEL SIGN TALING REPABALINESE VOWEL SIGN TALING T" + - "EDUNGBALINESE VOWEL SIGN TALING REPA TEDUNGBALINESE VOWEL SIGN PEPETBALI" + - "NESE VOWEL SIGN PEPET TEDUNGBALINESE ADEG ADEGBALINESE LETTER KAF SASAKB" + - "ALINESE LETTER KHOT SASAKBALINESE LETTER TZIR SASAKBALINESE LETTER EF SA" + - "SAKBALINESE LETTER VE SASAKBALINESE LETTER ZAL SASAKBALINESE LETTER ASYU" + - "RA SASAKBALINESE DIGIT ZEROBALINESE DIGIT ONEBALINESE DIGIT TWOBALINESE " + - "DIGIT THREEBALINESE DIGIT FOURBALINESE DIGIT FIVEBALINESE DIGIT SIXBALIN" + - "ESE DIGIT SEVENBALINESE DIGIT EIGHTBALINESE DIGIT NINEBALINESE PANTIBALI" + - "NESE PAMADABALINESE WINDUBALINESE CARIK PAMUNGKAHBALINESE CARIK SIKIBALI" + - "NESE CARIK PARERENBALINESE PAMENENGBALINESE MUSICAL SYMBOL DONGBALINESE " + - "MUSICAL SYMBOL DENGBALINESE MUSICAL SYMBOL DUNGBALINESE MUSICAL SYMBOL D" + - "ANGBALINESE MUSICAL SYMBOL DANG SURANGBALINESE MUSICAL SYMBOL DINGBALINE" + - "SE MUSICAL SYMBOL DAENGBALINESE MUSICAL SYMBOL DEUNGBALINESE MUSICAL SYM" + - "BOL DAINGBALINESE MUSICAL SYMBOL DANG GEDEBALINESE MUSICAL SYMBOL COMBIN" + - "ING TEGEHBALINESE MUSICAL SYMBOL COMBINING ENDEPBALINESE MUSICAL SYMBOL " + - "COMBINING KEMPULBALINESE MUSICAL SYMBOL COMBINING KEMPLIBALINESE MUSICAL" + - " SYMBOL COMBINING JEGOGANBALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH J" + - "EGOGANBALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGANBALINESE MUSI" + - "CAL SYMBOL COMBINING BENDEBALINESE MUSICAL SYMBOL COMBINING GONGBALINESE" + - " MUSICAL SYMBOL RIGHT-HAND OPEN DUGBALINESE MUSICAL SYMBOL RIGHT-HAND OP" + - "EN DAGBALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUKBALINESE MUSICAL SYMB" + - "OL RIGHT-HAND CLOSED TAKBALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANGBALIN" + - "ESE MUSICAL SYMBOL LEFT-HAND OPEN PUNGBALINESE MUSICAL SYMBOL LEFT-HAND " + - "CLOSED PLAKBALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUKBALINESE MUSICAL" + - " SYMBOL LEFT-HAND OPEN PINGSUNDANESE SIGN PANYECEKSUNDANESE SIGN PANGLAY" + - "ARSUNDANESE SIGN PANGWISADSUNDANESE LETTER ASUNDANESE LETTER ISUNDANESE " + - "LETTER USUNDANESE LETTER AESUNDANESE LETTER OSUNDANESE LETTER ESUNDANESE" + - " LETTER EUSUNDANESE LETTER KASUNDANESE LETTER QASUNDANESE LETTER GASUNDA" + - "NESE LETTER NGASUNDANESE LETTER CASUNDANESE LETTER JASUNDANESE LETTER ZA" + - "SUNDANESE LETTER NYASUNDANESE LETTER TASUNDANESE LETTER DASUNDANESE LETT" + - "ER NASUNDANESE LETTER PASUNDANESE LETTER FASUNDANESE LETTER VASUNDANESE " + - "LETTER BASUNDANESE LETTER MASUNDANESE LETTER YASUNDANESE LETTER RASUNDAN" + - "ESE LETTER LASUNDANESE LETTER WASUNDANESE LETTER SASUNDANESE LETTER XASU" + - "NDANESE LETTER HASUNDANESE CONSONANT SIGN PAMINGKALSUNDANESE CONSONANT S" + - "IGN PANYAKRASUNDANESE CONSONANT SIGN PANYIKUSUNDANESE VOWEL SIGN PANGHUL" + - "USUNDANESE VOWEL SIGN PANYUKUSUNDANESE VOWEL SIGN PANAELAENGSUNDANESE VO" + - "WEL SIGN PANOLONGSUNDANESE VOWEL SIGN PAMEPETSUNDANESE VOWEL SIGN PANEUL" + - "EUNGSUNDANESE SIGN PAMAAEHSUNDANESE SIGN VIRAMASUNDANESE CONSONANT SIGN " + - "PASANGAN MASUNDANESE CONSONANT SIGN PASANGAN WASUNDANESE LETTER KHASUNDA" + - "NESE LETTER SYASUNDANESE DIGIT ZEROSUNDANESE DIGIT ONESUNDANESE DIGIT TW" + - "OSUNDANESE DIGIT THREESUNDANESE DIGIT FOURSUNDANESE DIGIT FIVESUNDANESE " + - "DIGIT SIXSUNDANESE DIGIT SEVENSUNDANESE DIGIT EIGHTSUNDANESE DIGIT NINES" + - "UNDANESE AVAGRAHASUNDANESE LETTER REUSUNDANESE LETTER LEUSUNDANESE LETTE" + - "R BHASUNDANESE LETTER FINAL KSUNDANESE LETTER FINAL MBATAK LETTER ABATAK" + - " LETTER SIMALUNGUN ABATAK LETTER HABATAK LETTER SIMALUNGUN HABATAK LETTE" + - "R MANDAILING HABATAK LETTER BABATAK LETTER KARO BABATAK LETTER PABATAK L" + - "ETTER SIMALUNGUN PABATAK LETTER NABATAK LETTER MANDAILING NABATAK LETTER" + - " WABATAK LETTER SIMALUNGUN WABATAK LETTER PAKPAK WABATAK LETTER GABATAK ") + ("" + - "LETTER SIMALUNGUN GABATAK LETTER JABATAK LETTER DABATAK LETTER RABATAK L" + - "ETTER SIMALUNGUN RABATAK LETTER MABATAK LETTER SIMALUNGUN MABATAK LETTER" + - " SOUTHERN TABATAK LETTER NORTHERN TABATAK LETTER SABATAK LETTER SIMALUNG" + - "UN SABATAK LETTER MANDAILING SABATAK LETTER YABATAK LETTER SIMALUNGUN YA" + - "BATAK LETTER NGABATAK LETTER LABATAK LETTER SIMALUNGUN LABATAK LETTER NY" + - "ABATAK LETTER CABATAK LETTER NDABATAK LETTER MBABATAK LETTER IBATAK LETT" + - "ER UBATAK SIGN TOMPIBATAK VOWEL SIGN EBATAK VOWEL SIGN PAKPAK EBATAK VOW" + - "EL SIGN EEBATAK VOWEL SIGN IBATAK VOWEL SIGN KARO IBATAK VOWEL SIGN OBAT" + - "AK VOWEL SIGN KARO OBATAK VOWEL SIGN UBATAK VOWEL SIGN U FOR SIMALUNGUN " + - "SABATAK CONSONANT SIGN NGBATAK CONSONANT SIGN HBATAK PANGOLATBATAK PANON" + - "GONANBATAK SYMBOL BINDU NA METEKBATAK SYMBOL BINDU PINARBORASBATAK SYMBO" + - "L BINDU JUDULBATAK SYMBOL BINDU PANGOLATLEPCHA LETTER KALEPCHA LETTER KL" + - "ALEPCHA LETTER KHALEPCHA LETTER GALEPCHA LETTER GLALEPCHA LETTER NGALEPC" + - "HA LETTER CALEPCHA LETTER CHALEPCHA LETTER JALEPCHA LETTER NYALEPCHA LET" + - "TER TALEPCHA LETTER THALEPCHA LETTER DALEPCHA LETTER NALEPCHA LETTER PAL" + - "EPCHA LETTER PLALEPCHA LETTER PHALEPCHA LETTER FALEPCHA LETTER FLALEPCHA" + - " LETTER BALEPCHA LETTER BLALEPCHA LETTER MALEPCHA LETTER MLALEPCHA LETTE" + - "R TSALEPCHA LETTER TSHALEPCHA LETTER DZALEPCHA LETTER YALEPCHA LETTER RA" + - "LEPCHA LETTER LALEPCHA LETTER HALEPCHA LETTER HLALEPCHA LETTER VALEPCHA " + - "LETTER SALEPCHA LETTER SHALEPCHA LETTER WALEPCHA LETTER ALEPCHA SUBJOINE" + - "D LETTER YALEPCHA SUBJOINED LETTER RALEPCHA VOWEL SIGN AALEPCHA VOWEL SI" + - "GN ILEPCHA VOWEL SIGN OLEPCHA VOWEL SIGN OOLEPCHA VOWEL SIGN ULEPCHA VOW" + - "EL SIGN UULEPCHA VOWEL SIGN ELEPCHA CONSONANT SIGN KLEPCHA CONSONANT SIG" + - "N MLEPCHA CONSONANT SIGN LLEPCHA CONSONANT SIGN NLEPCHA CONSONANT SIGN P" + - "LEPCHA CONSONANT SIGN RLEPCHA CONSONANT SIGN TLEPCHA CONSONANT SIGN NYIN" + - "-DOLEPCHA CONSONANT SIGN KANGLEPCHA SIGN RANLEPCHA SIGN NUKTALEPCHA PUNC" + - "TUATION TA-ROLLEPCHA PUNCTUATION NYET THYOOM TA-ROLLEPCHA PUNCTUATION CE" + - "R-WALEPCHA PUNCTUATION TSHOOK CER-WALEPCHA PUNCTUATION TSHOOKLEPCHA DIGI" + - "T ZEROLEPCHA DIGIT ONELEPCHA DIGIT TWOLEPCHA DIGIT THREELEPCHA DIGIT FOU" + - "RLEPCHA DIGIT FIVELEPCHA DIGIT SIXLEPCHA DIGIT SEVENLEPCHA DIGIT EIGHTLE" + - "PCHA DIGIT NINELEPCHA LETTER TTALEPCHA LETTER TTHALEPCHA LETTER DDAOL CH" + - "IKI DIGIT ZEROOL CHIKI DIGIT ONEOL CHIKI DIGIT TWOOL CHIKI DIGIT THREEOL" + - " CHIKI DIGIT FOUROL CHIKI DIGIT FIVEOL CHIKI DIGIT SIXOL CHIKI DIGIT SEV" + - "ENOL CHIKI DIGIT EIGHTOL CHIKI DIGIT NINEOL CHIKI LETTER LAOL CHIKI LETT" + - "ER ATOL CHIKI LETTER AGOL CHIKI LETTER ANGOL CHIKI LETTER ALOL CHIKI LET" + - "TER LAAOL CHIKI LETTER AAKOL CHIKI LETTER AAJOL CHIKI LETTER AAMOL CHIKI" + - " LETTER AAWOL CHIKI LETTER LIOL CHIKI LETTER ISOL CHIKI LETTER IHOL CHIK" + - "I LETTER INYOL CHIKI LETTER IROL CHIKI LETTER LUOL CHIKI LETTER UCOL CHI" + - "KI LETTER UDOL CHIKI LETTER UNNOL CHIKI LETTER UYOL CHIKI LETTER LEOL CH" + - "IKI LETTER EPOL CHIKI LETTER EDDOL CHIKI LETTER ENOL CHIKI LETTER ERROL " + - "CHIKI LETTER LOOL CHIKI LETTER OTTOL CHIKI LETTER OBOL CHIKI LETTER OVOL" + - " CHIKI LETTER OHOL CHIKI MU TTUDDAGOL CHIKI GAAHLAA TTUDDAAGOL CHIKI MU-" + - "GAAHLAA TTUDDAAGOL CHIKI RELAAOL CHIKI PHAARKAAOL CHIKI AHADOL CHIKI PUN" + - "CTUATION MUCAADOL CHIKI PUNCTUATION DOUBLE MUCAADCYRILLIC SMALL LETTER R" + - "OUNDED VECYRILLIC SMALL LETTER LONG-LEGGED DECYRILLIC SMALL LETTER NARRO" + - "W OCYRILLIC SMALL LETTER WIDE ESCYRILLIC SMALL LETTER TALL TECYRILLIC SM" + - "ALL LETTER THREE-LEGGED TECYRILLIC SMALL LETTER TALL HARD SIGNCYRILLIC S" + - "MALL LETTER TALL YATCYRILLIC SMALL LETTER UNBLENDED UKSUNDANESE PUNCTUAT" + - "ION BINDU SURYASUNDANESE PUNCTUATION BINDU PANGLONGSUNDANESE PUNCTUATION" + - " BINDU PURNAMASUNDANESE PUNCTUATION BINDU CAKRASUNDANESE PUNCTUATION BIN" + - "DU LEU SATANGASUNDANESE PUNCTUATION BINDU KA SATANGASUNDANESE PUNCTUATIO" + - "N BINDU DA SATANGASUNDANESE PUNCTUATION BINDU BA SATANGAVEDIC TONE KARSH" + - "ANAVEDIC TONE SHARAVEDIC TONE PRENKHAVEDIC SIGN NIHSHVASAVEDIC SIGN YAJU" + - "RVEDIC MIDLINE SVARITAVEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARI" + - "TAVEDIC TONE YAJURVEDIC INDEPENDENT SVARITAVEDIC TONE YAJURVEDIC KATHAKA" + - " INDEPENDENT SVARITAVEDIC TONE CANDRA BELOWVEDIC TONE YAJURVEDIC KATHAKA" + - " INDEPENDENT SVARITA SCHROEDERVEDIC TONE DOUBLE SVARITAVEDIC TONE TRIPLE" + - " SVARITAVEDIC TONE KATHAKA ANUDATTAVEDIC TONE DOT BELOWVEDIC TONE TWO DO" + - "TS BELOWVEDIC TONE THREE DOTS BELOWVEDIC TONE RIGVEDIC KASHMIRI INDEPEND" + - "ENT SVARITAVEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITAVEDIC SIGN VISARGA" + - " SVARITAVEDIC SIGN VISARGA UDATTAVEDIC SIGN REVERSED VISARGA UDATTAVEDIC" + - " SIGN VISARGA ANUDATTAVEDIC SIGN REVERSED VISARGA ANUDATTAVEDIC SIGN VIS" + - "ARGA UDATTA WITH TAILVEDIC SIGN VISARGA ANUDATTA WITH TAILVEDIC SIGN ANU" + - "SVARA ANTARGOMUKHAVEDIC SIGN ANUSVARA BAHIRGOMUKHAVEDIC SIGN ANUSVARA VA") + ("" + - "MAGOMUKHAVEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAILVEDIC SIGN TIRYAKVEDIC" + - " SIGN HEXIFORM LONG ANUSVARAVEDIC SIGN LONG ANUSVARAVEDIC SIGN RTHANG LO" + - "NG ANUSVARAVEDIC SIGN ANUSVARA UBHAYATO MUKHAVEDIC SIGN ARDHAVISARGAVEDI" + - "C SIGN ROTATED ARDHAVISARGAVEDIC TONE CANDRA ABOVEVEDIC SIGN JIHVAMULIYA" + - "VEDIC SIGN UPADHMANIYAVEDIC TONE RING ABOVEVEDIC TONE DOUBLE RING ABOVEL" + - "ATIN LETTER SMALL CAPITAL ALATIN LETTER SMALL CAPITAL AELATIN SMALL LETT" + - "ER TURNED AELATIN LETTER SMALL CAPITAL BARRED BLATIN LETTER SMALL CAPITA" + - "L CLATIN LETTER SMALL CAPITAL DLATIN LETTER SMALL CAPITAL ETHLATIN LETTE" + - "R SMALL CAPITAL ELATIN SMALL LETTER TURNED OPEN ELATIN SMALL LETTER TURN" + - "ED ILATIN LETTER SMALL CAPITAL JLATIN LETTER SMALL CAPITAL KLATIN LETTER" + - " SMALL CAPITAL L WITH STROKELATIN LETTER SMALL CAPITAL MLATIN LETTER SMA" + - "LL CAPITAL REVERSED NLATIN LETTER SMALL CAPITAL OLATIN LETTER SMALL CAPI" + - "TAL OPEN OLATIN SMALL LETTER SIDEWAYS OLATIN SMALL LETTER SIDEWAYS OPEN " + - "OLATIN SMALL LETTER SIDEWAYS O WITH STROKELATIN SMALL LETTER TURNED OELA" + - "TIN LETTER SMALL CAPITAL OULATIN SMALL LETTER TOP HALF OLATIN SMALL LETT" + - "ER BOTTOM HALF OLATIN LETTER SMALL CAPITAL PLATIN LETTER SMALL CAPITAL R" + - "EVERSED RLATIN LETTER SMALL CAPITAL TURNED RLATIN LETTER SMALL CAPITAL T" + - "LATIN LETTER SMALL CAPITAL ULATIN SMALL LETTER SIDEWAYS ULATIN SMALL LET" + - "TER SIDEWAYS DIAERESIZED ULATIN SMALL LETTER SIDEWAYS TURNED MLATIN LETT" + - "ER SMALL CAPITAL VLATIN LETTER SMALL CAPITAL WLATIN LETTER SMALL CAPITAL" + - " ZLATIN LETTER SMALL CAPITAL EZHLATIN LETTER VOICED LARYNGEAL SPIRANTLAT" + - "IN LETTER AINGREEK LETTER SMALL CAPITAL GAMMAGREEK LETTER SMALL CAPITAL " + - "LAMDAGREEK LETTER SMALL CAPITAL PIGREEK LETTER SMALL CAPITAL RHOGREEK LE" + - "TTER SMALL CAPITAL PSICYRILLIC LETTER SMALL CAPITAL ELMODIFIER LETTER CA" + - "PITAL AMODIFIER LETTER CAPITAL AEMODIFIER LETTER CAPITAL BMODIFIER LETTE" + - "R CAPITAL BARRED BMODIFIER LETTER CAPITAL DMODIFIER LETTER CAPITAL EMODI" + - "FIER LETTER CAPITAL REVERSED EMODIFIER LETTER CAPITAL GMODIFIER LETTER C" + - "APITAL HMODIFIER LETTER CAPITAL IMODIFIER LETTER CAPITAL JMODIFIER LETTE" + - "R CAPITAL KMODIFIER LETTER CAPITAL LMODIFIER LETTER CAPITAL MMODIFIER LE" + - "TTER CAPITAL NMODIFIER LETTER CAPITAL REVERSED NMODIFIER LETTER CAPITAL " + - "OMODIFIER LETTER CAPITAL OUMODIFIER LETTER CAPITAL PMODIFIER LETTER CAPI" + - "TAL RMODIFIER LETTER CAPITAL TMODIFIER LETTER CAPITAL UMODIFIER LETTER C" + - "APITAL WMODIFIER LETTER SMALL AMODIFIER LETTER SMALL TURNED AMODIFIER LE" + - "TTER SMALL ALPHAMODIFIER LETTER SMALL TURNED AEMODIFIER LETTER SMALL BMO" + - "DIFIER LETTER SMALL DMODIFIER LETTER SMALL EMODIFIER LETTER SMALL SCHWAM" + - "ODIFIER LETTER SMALL OPEN EMODIFIER LETTER SMALL TURNED OPEN EMODIFIER L" + - "ETTER SMALL GMODIFIER LETTER SMALL TURNED IMODIFIER LETTER SMALL KMODIFI" + - "ER LETTER SMALL MMODIFIER LETTER SMALL ENGMODIFIER LETTER SMALL OMODIFIE" + - "R LETTER SMALL OPEN OMODIFIER LETTER SMALL TOP HALF OMODIFIER LETTER SMA" + - "LL BOTTOM HALF OMODIFIER LETTER SMALL PMODIFIER LETTER SMALL TMODIFIER L" + - "ETTER SMALL UMODIFIER LETTER SMALL SIDEWAYS UMODIFIER LETTER SMALL TURNE" + - "D MMODIFIER LETTER SMALL VMODIFIER LETTER SMALL AINMODIFIER LETTER SMALL" + - " BETAMODIFIER LETTER SMALL GREEK GAMMAMODIFIER LETTER SMALL DELTAMODIFIE" + - "R LETTER SMALL GREEK PHIMODIFIER LETTER SMALL CHILATIN SUBSCRIPT SMALL L" + - "ETTER ILATIN SUBSCRIPT SMALL LETTER RLATIN SUBSCRIPT SMALL LETTER ULATIN" + - " SUBSCRIPT SMALL LETTER VGREEK SUBSCRIPT SMALL LETTER BETAGREEK SUBSCRIP" + - "T SMALL LETTER GAMMAGREEK SUBSCRIPT SMALL LETTER RHOGREEK SUBSCRIPT SMAL" + - "L LETTER PHIGREEK SUBSCRIPT SMALL LETTER CHILATIN SMALL LETTER UELATIN S" + - "MALL LETTER B WITH MIDDLE TILDELATIN SMALL LETTER D WITH MIDDLE TILDELAT" + - "IN SMALL LETTER F WITH MIDDLE TILDELATIN SMALL LETTER M WITH MIDDLE TILD" + - "ELATIN SMALL LETTER N WITH MIDDLE TILDELATIN SMALL LETTER P WITH MIDDLE " + - "TILDELATIN SMALL LETTER R WITH MIDDLE TILDELATIN SMALL LETTER R WITH FIS" + - "HHOOK AND MIDDLE TILDELATIN SMALL LETTER S WITH MIDDLE TILDELATIN SMALL " + - "LETTER T WITH MIDDLE TILDELATIN SMALL LETTER Z WITH MIDDLE TILDELATIN SM" + - "ALL LETTER TURNED GMODIFIER LETTER CYRILLIC ENLATIN SMALL LETTER INSULAR" + - " GLATIN SMALL LETTER TH WITH STRIKETHROUGHLATIN SMALL CAPITAL LETTER I W" + - "ITH STROKELATIN SMALL LETTER IOTA WITH STROKELATIN SMALL LETTER P WITH S" + - "TROKELATIN SMALL CAPITAL LETTER U WITH STROKELATIN SMALL LETTER UPSILON " + - "WITH STROKELATIN SMALL LETTER B WITH PALATAL HOOKLATIN SMALL LETTER D WI" + - "TH PALATAL HOOKLATIN SMALL LETTER F WITH PALATAL HOOKLATIN SMALL LETTER " + - "G WITH PALATAL HOOKLATIN SMALL LETTER K WITH PALATAL HOOKLATIN SMALL LET" + - "TER L WITH PALATAL HOOKLATIN SMALL LETTER M WITH PALATAL HOOKLATIN SMALL" + - " LETTER N WITH PALATAL HOOKLATIN SMALL LETTER P WITH PALATAL HOOKLATIN S" + - "MALL LETTER R WITH PALATAL HOOKLATIN SMALL LETTER S WITH PALATAL HOOKLAT") + ("" + - "IN SMALL LETTER ESH WITH PALATAL HOOKLATIN SMALL LETTER V WITH PALATAL H" + - "OOKLATIN SMALL LETTER X WITH PALATAL HOOKLATIN SMALL LETTER Z WITH PALAT" + - "AL HOOKLATIN SMALL LETTER A WITH RETROFLEX HOOKLATIN SMALL LETTER ALPHA " + - "WITH RETROFLEX HOOKLATIN SMALL LETTER D WITH HOOK AND TAILLATIN SMALL LE" + - "TTER E WITH RETROFLEX HOOKLATIN SMALL LETTER OPEN E WITH RETROFLEX HOOKL" + - "ATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOKLATIN SMALL LETTER " + - "SCHWA WITH RETROFLEX HOOKLATIN SMALL LETTER I WITH RETROFLEX HOOKLATIN S" + - "MALL LETTER OPEN O WITH RETROFLEX HOOKLATIN SMALL LETTER ESH WITH RETROF" + - "LEX HOOKLATIN SMALL LETTER U WITH RETROFLEX HOOKLATIN SMALL LETTER EZH W" + - "ITH RETROFLEX HOOKMODIFIER LETTER SMALL TURNED ALPHAMODIFIER LETTER SMAL" + - "L CMODIFIER LETTER SMALL C WITH CURLMODIFIER LETTER SMALL ETHMODIFIER LE" + - "TTER SMALL REVERSED OPEN EMODIFIER LETTER SMALL FMODIFIER LETTER SMALL D" + - "OTLESS J WITH STROKEMODIFIER LETTER SMALL SCRIPT GMODIFIER LETTER SMALL " + - "TURNED HMODIFIER LETTER SMALL I WITH STROKEMODIFIER LETTER SMALL IOTAMOD" + - "IFIER LETTER SMALL CAPITAL IMODIFIER LETTER SMALL CAPITAL I WITH STROKEM" + - "ODIFIER LETTER SMALL J WITH CROSSED-TAILMODIFIER LETTER SMALL L WITH RET" + - "ROFLEX HOOKMODIFIER LETTER SMALL L WITH PALATAL HOOKMODIFIER LETTER SMAL" + - "L CAPITAL LMODIFIER LETTER SMALL M WITH HOOKMODIFIER LETTER SMALL TURNED" + - " M WITH LONG LEGMODIFIER LETTER SMALL N WITH LEFT HOOKMODIFIER LETTER SM" + - "ALL N WITH RETROFLEX HOOKMODIFIER LETTER SMALL CAPITAL NMODIFIER LETTER " + - "SMALL BARRED OMODIFIER LETTER SMALL PHIMODIFIER LETTER SMALL S WITH HOOK" + - "MODIFIER LETTER SMALL ESHMODIFIER LETTER SMALL T WITH PALATAL HOOKMODIFI" + - "ER LETTER SMALL U BARMODIFIER LETTER SMALL UPSILONMODIFIER LETTER SMALL " + - "CAPITAL UMODIFIER LETTER SMALL V WITH HOOKMODIFIER LETTER SMALL TURNED V" + - "MODIFIER LETTER SMALL ZMODIFIER LETTER SMALL Z WITH RETROFLEX HOOKMODIFI" + - "ER LETTER SMALL Z WITH CURLMODIFIER LETTER SMALL EZHMODIFIER LETTER SMAL" + - "L THETACOMBINING DOTTED GRAVE ACCENTCOMBINING DOTTED ACUTE ACCENTCOMBINI" + - "NG SNAKE BELOWCOMBINING SUSPENSION MARKCOMBINING MACRON-ACUTECOMBINING G" + - "RAVE-MACRONCOMBINING MACRON-GRAVECOMBINING ACUTE-MACRONCOMBINING GRAVE-A" + - "CUTE-GRAVECOMBINING ACUTE-GRAVE-ACUTECOMBINING LATIN SMALL LETTER R BELO" + - "WCOMBINING BREVE-MACRONCOMBINING MACRON-BREVECOMBINING DOUBLE CIRCUMFLEX" + - " ABOVECOMBINING OGONEK ABOVECOMBINING ZIGZAG BELOWCOMBINING IS BELOWCOMB" + - "INING UR ABOVECOMBINING US ABOVECOMBINING LATIN SMALL LETTER FLATTENED O" + - "PEN A ABOVECOMBINING LATIN SMALL LETTER AECOMBINING LATIN SMALL LETTER A" + - "OCOMBINING LATIN SMALL LETTER AVCOMBINING LATIN SMALL LETTER C CEDILLACO" + - "MBINING LATIN SMALL LETTER INSULAR DCOMBINING LATIN SMALL LETTER ETHCOMB" + - "INING LATIN SMALL LETTER GCOMBINING LATIN LETTER SMALL CAPITAL GCOMBININ" + - "G LATIN SMALL LETTER KCOMBINING LATIN SMALL LETTER LCOMBINING LATIN LETT" + - "ER SMALL CAPITAL LCOMBINING LATIN LETTER SMALL CAPITAL MCOMBINING LATIN " + - "SMALL LETTER NCOMBINING LATIN LETTER SMALL CAPITAL NCOMBINING LATIN LETT" + - "ER SMALL CAPITAL RCOMBINING LATIN SMALL LETTER R ROTUNDACOMBINING LATIN " + - "SMALL LETTER SCOMBINING LATIN SMALL LETTER LONG SCOMBINING LATIN SMALL L" + - "ETTER ZCOMBINING LATIN SMALL LETTER ALPHACOMBINING LATIN SMALL LETTER BC" + - "OMBINING LATIN SMALL LETTER BETACOMBINING LATIN SMALL LETTER SCHWACOMBIN" + - "ING LATIN SMALL LETTER FCOMBINING LATIN SMALL LETTER L WITH DOUBLE MIDDL" + - "E TILDECOMBINING LATIN SMALL LETTER O WITH LIGHT CENTRALIZATION STROKECO" + - "MBINING LATIN SMALL LETTER PCOMBINING LATIN SMALL LETTER ESHCOMBINING LA" + - "TIN SMALL LETTER U WITH LIGHT CENTRALIZATION STROKECOMBINING LATIN SMALL" + - " LETTER WCOMBINING LATIN SMALL LETTER A WITH DIAERESISCOMBINING LATIN SM" + - "ALL LETTER O WITH DIAERESISCOMBINING LATIN SMALL LETTER U WITH DIAERESIS" + - "COMBINING UP TACK ABOVECOMBINING DELETION MARKCOMBINING DOUBLE INVERTED " + - "BREVE BELOWCOMBINING ALMOST EQUAL TO BELOWCOMBINING LEFT ARROWHEAD ABOVE" + - "COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOWLATIN CAPITAL LETTER A" + - " WITH RING BELOWLATIN SMALL LETTER A WITH RING BELOWLATIN CAPITAL LETTER" + - " B WITH DOT ABOVELATIN SMALL LETTER B WITH DOT ABOVELATIN CAPITAL LETTER" + - " B WITH DOT BELOWLATIN SMALL LETTER B WITH DOT BELOWLATIN CAPITAL LETTER" + - " B WITH LINE BELOWLATIN SMALL LETTER B WITH LINE BELOWLATIN CAPITAL LETT" + - "ER C WITH CEDILLA AND ACUTELATIN SMALL LETTER C WITH CEDILLA AND ACUTELA" + - "TIN CAPITAL LETTER D WITH DOT ABOVELATIN SMALL LETTER D WITH DOT ABOVELA" + - "TIN CAPITAL LETTER D WITH DOT BELOWLATIN SMALL LETTER D WITH DOT BELOWLA" + - "TIN CAPITAL LETTER D WITH LINE BELOWLATIN SMALL LETTER D WITH LINE BELOW" + - "LATIN CAPITAL LETTER D WITH CEDILLALATIN SMALL LETTER D WITH CEDILLALATI" + - "N CAPITAL LETTER D WITH CIRCUMFLEX BELOWLATIN SMALL LETTER D WITH CIRCUM" + - "FLEX BELOWLATIN CAPITAL LETTER E WITH MACRON AND GRAVELATIN SMALL LETTER") + ("" + - " E WITH MACRON AND GRAVELATIN CAPITAL LETTER E WITH MACRON AND ACUTELATI" + - "N SMALL LETTER E WITH MACRON AND ACUTELATIN CAPITAL LETTER E WITH CIRCUM" + - "FLEX BELOWLATIN SMALL LETTER E WITH CIRCUMFLEX BELOWLATIN CAPITAL LETTER" + - " E WITH TILDE BELOWLATIN SMALL LETTER E WITH TILDE BELOWLATIN CAPITAL LE" + - "TTER E WITH CEDILLA AND BREVELATIN SMALL LETTER E WITH CEDILLA AND BREVE" + - "LATIN CAPITAL LETTER F WITH DOT ABOVELATIN SMALL LETTER F WITH DOT ABOVE" + - "LATIN CAPITAL LETTER G WITH MACRONLATIN SMALL LETTER G WITH MACRONLATIN " + - "CAPITAL LETTER H WITH DOT ABOVELATIN SMALL LETTER H WITH DOT ABOVELATIN " + - "CAPITAL LETTER H WITH DOT BELOWLATIN SMALL LETTER H WITH DOT BELOWLATIN " + - "CAPITAL LETTER H WITH DIAERESISLATIN SMALL LETTER H WITH DIAERESISLATIN " + - "CAPITAL LETTER H WITH CEDILLALATIN SMALL LETTER H WITH CEDILLALATIN CAPI" + - "TAL LETTER H WITH BREVE BELOWLATIN SMALL LETTER H WITH BREVE BELOWLATIN " + - "CAPITAL LETTER I WITH TILDE BELOWLATIN SMALL LETTER I WITH TILDE BELOWLA" + - "TIN CAPITAL LETTER I WITH DIAERESIS AND ACUTELATIN SMALL LETTER I WITH D" + - "IAERESIS AND ACUTELATIN CAPITAL LETTER K WITH ACUTELATIN SMALL LETTER K " + - "WITH ACUTELATIN CAPITAL LETTER K WITH DOT BELOWLATIN SMALL LETTER K WITH" + - " DOT BELOWLATIN CAPITAL LETTER K WITH LINE BELOWLATIN SMALL LETTER K WIT" + - "H LINE BELOWLATIN CAPITAL LETTER L WITH DOT BELOWLATIN SMALL LETTER L WI" + - "TH DOT BELOWLATIN CAPITAL LETTER L WITH DOT BELOW AND MACRONLATIN SMALL " + - "LETTER L WITH DOT BELOW AND MACRONLATIN CAPITAL LETTER L WITH LINE BELOW" + - "LATIN SMALL LETTER L WITH LINE BELOWLATIN CAPITAL LETTER L WITH CIRCUMFL" + - "EX BELOWLATIN SMALL LETTER L WITH CIRCUMFLEX BELOWLATIN CAPITAL LETTER M" + - " WITH ACUTELATIN SMALL LETTER M WITH ACUTELATIN CAPITAL LETTER M WITH DO" + - "T ABOVELATIN SMALL LETTER M WITH DOT ABOVELATIN CAPITAL LETTER M WITH DO" + - "T BELOWLATIN SMALL LETTER M WITH DOT BELOWLATIN CAPITAL LETTER N WITH DO" + - "T ABOVELATIN SMALL LETTER N WITH DOT ABOVELATIN CAPITAL LETTER N WITH DO" + - "T BELOWLATIN SMALL LETTER N WITH DOT BELOWLATIN CAPITAL LETTER N WITH LI" + - "NE BELOWLATIN SMALL LETTER N WITH LINE BELOWLATIN CAPITAL LETTER N WITH " + - "CIRCUMFLEX BELOWLATIN SMALL LETTER N WITH CIRCUMFLEX BELOWLATIN CAPITAL " + - "LETTER O WITH TILDE AND ACUTELATIN SMALL LETTER O WITH TILDE AND ACUTELA" + - "TIN CAPITAL LETTER O WITH TILDE AND DIAERESISLATIN SMALL LETTER O WITH T" + - "ILDE AND DIAERESISLATIN CAPITAL LETTER O WITH MACRON AND GRAVELATIN SMAL" + - "L LETTER O WITH MACRON AND GRAVELATIN CAPITAL LETTER O WITH MACRON AND A" + - "CUTELATIN SMALL LETTER O WITH MACRON AND ACUTELATIN CAPITAL LETTER P WIT" + - "H ACUTELATIN SMALL LETTER P WITH ACUTELATIN CAPITAL LETTER P WITH DOT AB" + - "OVELATIN SMALL LETTER P WITH DOT ABOVELATIN CAPITAL LETTER R WITH DOT AB" + - "OVELATIN SMALL LETTER R WITH DOT ABOVELATIN CAPITAL LETTER R WITH DOT BE" + - "LOWLATIN SMALL LETTER R WITH DOT BELOWLATIN CAPITAL LETTER R WITH DOT BE" + - "LOW AND MACRONLATIN SMALL LETTER R WITH DOT BELOW AND MACRONLATIN CAPITA" + - "L LETTER R WITH LINE BELOWLATIN SMALL LETTER R WITH LINE BELOWLATIN CAPI" + - "TAL LETTER S WITH DOT ABOVELATIN SMALL LETTER S WITH DOT ABOVELATIN CAPI" + - "TAL LETTER S WITH DOT BELOWLATIN SMALL LETTER S WITH DOT BELOWLATIN CAPI" + - "TAL LETTER S WITH ACUTE AND DOT ABOVELATIN SMALL LETTER S WITH ACUTE AND" + - " DOT ABOVELATIN CAPITAL LETTER S WITH CARON AND DOT ABOVELATIN SMALL LET" + - "TER S WITH CARON AND DOT ABOVELATIN CAPITAL LETTER S WITH DOT BELOW AND " + - "DOT ABOVELATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVELATIN CAPITAL " + - "LETTER T WITH DOT ABOVELATIN SMALL LETTER T WITH DOT ABOVELATIN CAPITAL " + - "LETTER T WITH DOT BELOWLATIN SMALL LETTER T WITH DOT BELOWLATIN CAPITAL " + - "LETTER T WITH LINE BELOWLATIN SMALL LETTER T WITH LINE BELOWLATIN CAPITA" + - "L LETTER T WITH CIRCUMFLEX BELOWLATIN SMALL LETTER T WITH CIRCUMFLEX BEL" + - "OWLATIN CAPITAL LETTER U WITH DIAERESIS BELOWLATIN SMALL LETTER U WITH D" + - "IAERESIS BELOWLATIN CAPITAL LETTER U WITH TILDE BELOWLATIN SMALL LETTER " + - "U WITH TILDE BELOWLATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOWLATIN SMAL" + - "L LETTER U WITH CIRCUMFLEX BELOWLATIN CAPITAL LETTER U WITH TILDE AND AC" + - "UTELATIN SMALL LETTER U WITH TILDE AND ACUTELATIN CAPITAL LETTER U WITH " + - "MACRON AND DIAERESISLATIN SMALL LETTER U WITH MACRON AND DIAERESISLATIN " + - "CAPITAL LETTER V WITH TILDELATIN SMALL LETTER V WITH TILDELATIN CAPITAL " + - "LETTER V WITH DOT BELOWLATIN SMALL LETTER V WITH DOT BELOWLATIN CAPITAL " + - "LETTER W WITH GRAVELATIN SMALL LETTER W WITH GRAVELATIN CAPITAL LETTER W" + - " WITH ACUTELATIN SMALL LETTER W WITH ACUTELATIN CAPITAL LETTER W WITH DI" + - "AERESISLATIN SMALL LETTER W WITH DIAERESISLATIN CAPITAL LETTER W WITH DO" + - "T ABOVELATIN SMALL LETTER W WITH DOT ABOVELATIN CAPITAL LETTER W WITH DO" + - "T BELOWLATIN SMALL LETTER W WITH DOT BELOWLATIN CAPITAL LETTER X WITH DO" + - "T ABOVELATIN SMALL LETTER X WITH DOT ABOVELATIN CAPITAL LETTER X WITH DI") + ("" + - "AERESISLATIN SMALL LETTER X WITH DIAERESISLATIN CAPITAL LETTER Y WITH DO" + - "T ABOVELATIN SMALL LETTER Y WITH DOT ABOVELATIN CAPITAL LETTER Z WITH CI" + - "RCUMFLEXLATIN SMALL LETTER Z WITH CIRCUMFLEXLATIN CAPITAL LETTER Z WITH " + - "DOT BELOWLATIN SMALL LETTER Z WITH DOT BELOWLATIN CAPITAL LETTER Z WITH " + - "LINE BELOWLATIN SMALL LETTER Z WITH LINE BELOWLATIN SMALL LETTER H WITH " + - "LINE BELOWLATIN SMALL LETTER T WITH DIAERESISLATIN SMALL LETTER W WITH R" + - "ING ABOVELATIN SMALL LETTER Y WITH RING ABOVELATIN SMALL LETTER A WITH R" + - "IGHT HALF RINGLATIN SMALL LETTER LONG S WITH DOT ABOVELATIN SMALL LETTER" + - " LONG S WITH DIAGONAL STROKELATIN SMALL LETTER LONG S WITH HIGH STROKELA" + - "TIN CAPITAL LETTER SHARP SLATIN SMALL LETTER DELTALATIN CAPITAL LETTER A" + - " WITH DOT BELOWLATIN SMALL LETTER A WITH DOT BELOWLATIN CAPITAL LETTER A" + - " WITH HOOK ABOVELATIN SMALL LETTER A WITH HOOK ABOVELATIN CAPITAL LETTER" + - " A WITH CIRCUMFLEX AND ACUTELATIN SMALL LETTER A WITH CIRCUMFLEX AND ACU" + - "TELATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVELATIN SMALL LETTER A W" + - "ITH CIRCUMFLEX AND GRAVELATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK " + - "ABOVELATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVELATIN CAPITAL LE" + - "TTER A WITH CIRCUMFLEX AND TILDELATIN SMALL LETTER A WITH CIRCUMFLEX AND" + - " TILDELATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOWLATIN SMALL LE" + - "TTER A WITH CIRCUMFLEX AND DOT BELOWLATIN CAPITAL LETTER A WITH BREVE AN" + - "D ACUTELATIN SMALL LETTER A WITH BREVE AND ACUTELATIN CAPITAL LETTER A W" + - "ITH BREVE AND GRAVELATIN SMALL LETTER A WITH BREVE AND GRAVELATIN CAPITA" + - "L LETTER A WITH BREVE AND HOOK ABOVELATIN SMALL LETTER A WITH BREVE AND " + - "HOOK ABOVELATIN CAPITAL LETTER A WITH BREVE AND TILDELATIN SMALL LETTER " + - "A WITH BREVE AND TILDELATIN CAPITAL LETTER A WITH BREVE AND DOT BELOWLAT" + - "IN SMALL LETTER A WITH BREVE AND DOT BELOWLATIN CAPITAL LETTER E WITH DO" + - "T BELOWLATIN SMALL LETTER E WITH DOT BELOWLATIN CAPITAL LETTER E WITH HO" + - "OK ABOVELATIN SMALL LETTER E WITH HOOK ABOVELATIN CAPITAL LETTER E WITH " + - "TILDELATIN SMALL LETTER E WITH TILDELATIN CAPITAL LETTER E WITH CIRCUMFL" + - "EX AND ACUTELATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTELATIN CAPITAL " + - "LETTER E WITH CIRCUMFLEX AND GRAVELATIN SMALL LETTER E WITH CIRCUMFLEX A" + - "ND GRAVELATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVELATIN SMALL" + - " LETTER E WITH CIRCUMFLEX AND HOOK ABOVELATIN CAPITAL LETTER E WITH CIRC" + - "UMFLEX AND TILDELATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDELATIN CAPI" + - "TAL LETTER E WITH CIRCUMFLEX AND DOT BELOWLATIN SMALL LETTER E WITH CIRC" + - "UMFLEX AND DOT BELOWLATIN CAPITAL LETTER I WITH HOOK ABOVELATIN SMALL LE" + - "TTER I WITH HOOK ABOVELATIN CAPITAL LETTER I WITH DOT BELOWLATIN SMALL L" + - "ETTER I WITH DOT BELOWLATIN CAPITAL LETTER O WITH DOT BELOWLATIN SMALL L" + - "ETTER O WITH DOT BELOWLATIN CAPITAL LETTER O WITH HOOK ABOVELATIN SMALL " + - "LETTER O WITH HOOK ABOVELATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE" + - "LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTELATIN CAPITAL LETTER O WIT" + - "H CIRCUMFLEX AND GRAVELATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVELATI" + - "N CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVELATIN SMALL LETTER O WI" + - "TH CIRCUMFLEX AND HOOK ABOVELATIN CAPITAL LETTER O WITH CIRCUMFLEX AND T" + - "ILDELATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDELATIN CAPITAL LETTER O" + - " WITH CIRCUMFLEX AND DOT BELOWLATIN SMALL LETTER O WITH CIRCUMFLEX AND D" + - "OT BELOWLATIN CAPITAL LETTER O WITH HORN AND ACUTELATIN SMALL LETTER O W" + - "ITH HORN AND ACUTELATIN CAPITAL LETTER O WITH HORN AND GRAVELATIN SMALL " + - "LETTER O WITH HORN AND GRAVELATIN CAPITAL LETTER O WITH HORN AND HOOK AB" + - "OVELATIN SMALL LETTER O WITH HORN AND HOOK ABOVELATIN CAPITAL LETTER O W" + - "ITH HORN AND TILDELATIN SMALL LETTER O WITH HORN AND TILDELATIN CAPITAL " + - "LETTER O WITH HORN AND DOT BELOWLATIN SMALL LETTER O WITH HORN AND DOT B" + - "ELOWLATIN CAPITAL LETTER U WITH DOT BELOWLATIN SMALL LETTER U WITH DOT B" + - "ELOWLATIN CAPITAL LETTER U WITH HOOK ABOVELATIN SMALL LETTER U WITH HOOK" + - " ABOVELATIN CAPITAL LETTER U WITH HORN AND ACUTELATIN SMALL LETTER U WIT" + - "H HORN AND ACUTELATIN CAPITAL LETTER U WITH HORN AND GRAVELATIN SMALL LE" + - "TTER U WITH HORN AND GRAVELATIN CAPITAL LETTER U WITH HORN AND HOOK ABOV" + - "ELATIN SMALL LETTER U WITH HORN AND HOOK ABOVELATIN CAPITAL LETTER U WIT" + - "H HORN AND TILDELATIN SMALL LETTER U WITH HORN AND TILDELATIN CAPITAL LE" + - "TTER U WITH HORN AND DOT BELOWLATIN SMALL LETTER U WITH HORN AND DOT BEL" + - "OWLATIN CAPITAL LETTER Y WITH GRAVELATIN SMALL LETTER Y WITH GRAVELATIN " + - "CAPITAL LETTER Y WITH DOT BELOWLATIN SMALL LETTER Y WITH DOT BELOWLATIN " + - "CAPITAL LETTER Y WITH HOOK ABOVELATIN SMALL LETTER Y WITH HOOK ABOVELATI" + - "N CAPITAL LETTER Y WITH TILDELATIN SMALL LETTER Y WITH TILDELATIN CAPITA" + - "L LETTER MIDDLE-WELSH LLLATIN SMALL LETTER MIDDLE-WELSH LLLATIN CAPITAL ") + ("" + - "LETTER MIDDLE-WELSH VLATIN SMALL LETTER MIDDLE-WELSH VLATIN CAPITAL LETT" + - "ER Y WITH LOOPLATIN SMALL LETTER Y WITH LOOPGREEK SMALL LETTER ALPHA WIT" + - "H PSILIGREEK SMALL LETTER ALPHA WITH DASIAGREEK SMALL LETTER ALPHA WITH " + - "PSILI AND VARIAGREEK SMALL LETTER ALPHA WITH DASIA AND VARIAGREEK SMALL " + - "LETTER ALPHA WITH PSILI AND OXIAGREEK SMALL LETTER ALPHA WITH DASIA AND " + - "OXIAGREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENIGREEK SMALL LETTE" + - "R ALPHA WITH DASIA AND PERISPOMENIGREEK CAPITAL LETTER ALPHA WITH PSILIG" + - "REEK CAPITAL LETTER ALPHA WITH DASIAGREEK CAPITAL LETTER ALPHA WITH PSIL" + - "I AND VARIAGREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIAGREEK CAPITAL " + - "LETTER ALPHA WITH PSILI AND OXIAGREEK CAPITAL LETTER ALPHA WITH DASIA AN" + - "D OXIAGREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENIGREEK CAPITAL" + - " LETTER ALPHA WITH DASIA AND PERISPOMENIGREEK SMALL LETTER EPSILON WITH " + - "PSILIGREEK SMALL LETTER EPSILON WITH DASIAGREEK SMALL LETTER EPSILON WIT" + - "H PSILI AND VARIAGREEK SMALL LETTER EPSILON WITH DASIA AND VARIAGREEK SM" + - "ALL LETTER EPSILON WITH PSILI AND OXIAGREEK SMALL LETTER EPSILON WITH DA" + - "SIA AND OXIAGREEK CAPITAL LETTER EPSILON WITH PSILIGREEK CAPITAL LETTER " + - "EPSILON WITH DASIAGREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIAGREEK" + - " CAPITAL LETTER EPSILON WITH DASIA AND VARIAGREEK CAPITAL LETTER EPSILON" + - " WITH PSILI AND OXIAGREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIAGREE" + - "K SMALL LETTER ETA WITH PSILIGREEK SMALL LETTER ETA WITH DASIAGREEK SMAL" + - "L LETTER ETA WITH PSILI AND VARIAGREEK SMALL LETTER ETA WITH DASIA AND V" + - "ARIAGREEK SMALL LETTER ETA WITH PSILI AND OXIAGREEK SMALL LETTER ETA WIT" + - "H DASIA AND OXIAGREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENIGREEK S" + - "MALL LETTER ETA WITH DASIA AND PERISPOMENIGREEK CAPITAL LETTER ETA WITH " + - "PSILIGREEK CAPITAL LETTER ETA WITH DASIAGREEK CAPITAL LETTER ETA WITH PS" + - "ILI AND VARIAGREEK CAPITAL LETTER ETA WITH DASIA AND VARIAGREEK CAPITAL " + - "LETTER ETA WITH PSILI AND OXIAGREEK CAPITAL LETTER ETA WITH DASIA AND OX" + - "IAGREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENIGREEK CAPITAL LETTE" + - "R ETA WITH DASIA AND PERISPOMENIGREEK SMALL LETTER IOTA WITH PSILIGREEK " + - "SMALL LETTER IOTA WITH DASIAGREEK SMALL LETTER IOTA WITH PSILI AND VARIA" + - "GREEK SMALL LETTER IOTA WITH DASIA AND VARIAGREEK SMALL LETTER IOTA WITH" + - " PSILI AND OXIAGREEK SMALL LETTER IOTA WITH DASIA AND OXIAGREEK SMALL LE" + - "TTER IOTA WITH PSILI AND PERISPOMENIGREEK SMALL LETTER IOTA WITH DASIA A" + - "ND PERISPOMENIGREEK CAPITAL LETTER IOTA WITH PSILIGREEK CAPITAL LETTER I" + - "OTA WITH DASIAGREEK CAPITAL LETTER IOTA WITH PSILI AND VARIAGREEK CAPITA" + - "L LETTER IOTA WITH DASIA AND VARIAGREEK CAPITAL LETTER IOTA WITH PSILI A" + - "ND OXIAGREEK CAPITAL LETTER IOTA WITH DASIA AND OXIAGREEK CAPITAL LETTER" + - " IOTA WITH PSILI AND PERISPOMENIGREEK CAPITAL LETTER IOTA WITH DASIA AND" + - " PERISPOMENIGREEK SMALL LETTER OMICRON WITH PSILIGREEK SMALL LETTER OMIC" + - "RON WITH DASIAGREEK SMALL LETTER OMICRON WITH PSILI AND VARIAGREEK SMALL" + - " LETTER OMICRON WITH DASIA AND VARIAGREEK SMALL LETTER OMICRON WITH PSIL" + - "I AND OXIAGREEK SMALL LETTER OMICRON WITH DASIA AND OXIAGREEK CAPITAL LE" + - "TTER OMICRON WITH PSILIGREEK CAPITAL LETTER OMICRON WITH DASIAGREEK CAPI" + - "TAL LETTER OMICRON WITH PSILI AND VARIAGREEK CAPITAL LETTER OMICRON WITH" + - " DASIA AND VARIAGREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIAGREEK CA" + - "PITAL LETTER OMICRON WITH DASIA AND OXIAGREEK SMALL LETTER UPSILON WITH " + - "PSILIGREEK SMALL LETTER UPSILON WITH DASIAGREEK SMALL LETTER UPSILON WIT" + - "H PSILI AND VARIAGREEK SMALL LETTER UPSILON WITH DASIA AND VARIAGREEK SM" + - "ALL LETTER UPSILON WITH PSILI AND OXIAGREEK SMALL LETTER UPSILON WITH DA" + - "SIA AND OXIAGREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENIGREEK S" + - "MALL LETTER UPSILON WITH DASIA AND PERISPOMENIGREEK CAPITAL LETTER UPSIL" + - "ON WITH DASIAGREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIAGREEK CAPI" + - "TAL LETTER UPSILON WITH DASIA AND OXIAGREEK CAPITAL LETTER UPSILON WITH " + - "DASIA AND PERISPOMENIGREEK SMALL LETTER OMEGA WITH PSILIGREEK SMALL LETT" + - "ER OMEGA WITH DASIAGREEK SMALL LETTER OMEGA WITH PSILI AND VARIAGREEK SM" + - "ALL LETTER OMEGA WITH DASIA AND VARIAGREEK SMALL LETTER OMEGA WITH PSILI" + - " AND OXIAGREEK SMALL LETTER OMEGA WITH DASIA AND OXIAGREEK SMALL LETTER " + - "OMEGA WITH PSILI AND PERISPOMENIGREEK SMALL LETTER OMEGA WITH DASIA AND " + - "PERISPOMENIGREEK CAPITAL LETTER OMEGA WITH PSILIGREEK CAPITAL LETTER OME" + - "GA WITH DASIAGREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIAGREEK CAPITA" + - "L LETTER OMEGA WITH DASIA AND VARIAGREEK CAPITAL LETTER OMEGA WITH PSILI" + - " AND OXIAGREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIAGREEK CAPITAL LET" + - "TER OMEGA WITH PSILI AND PERISPOMENIGREEK CAPITAL LETTER OMEGA WITH DASI" + - "A AND PERISPOMENIGREEK SMALL LETTER ALPHA WITH VARIAGREEK SMALL LETTER A") + ("" + - "LPHA WITH OXIAGREEK SMALL LETTER EPSILON WITH VARIAGREEK SMALL LETTER EP" + - "SILON WITH OXIAGREEK SMALL LETTER ETA WITH VARIAGREEK SMALL LETTER ETA W" + - "ITH OXIAGREEK SMALL LETTER IOTA WITH VARIAGREEK SMALL LETTER IOTA WITH O" + - "XIAGREEK SMALL LETTER OMICRON WITH VARIAGREEK SMALL LETTER OMICRON WITH " + - "OXIAGREEK SMALL LETTER UPSILON WITH VARIAGREEK SMALL LETTER UPSILON WITH" + - " OXIAGREEK SMALL LETTER OMEGA WITH VARIAGREEK SMALL LETTER OMEGA WITH OX" + - "IAGREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENIGREEK SMALL LETTE" + - "R ALPHA WITH DASIA AND YPOGEGRAMMENIGREEK SMALL LETTER ALPHA WITH PSILI " + - "AND VARIA AND YPOGEGRAMMENIGREEK SMALL LETTER ALPHA WITH DASIA AND VARIA" + - " AND YPOGEGRAMMENIGREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGE" + - "GRAMMENIGREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENIGR" + - "EEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENIGREEK" + - " SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENIGREEK CA" + - "PITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENIGREEK CAPITAL LETTER ALP" + - "HA WITH DASIA AND PROSGEGRAMMENIGREEK CAPITAL LETTER ALPHA WITH PSILI AN" + - "D VARIA AND PROSGEGRAMMENIGREEK CAPITAL LETTER ALPHA WITH DASIA AND VARI" + - "A AND PROSGEGRAMMENIGREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND P" + - "ROSGEGRAMMENIGREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGR" + - "AMMENIGREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGR" + - "AMMENIGREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGR" + - "AMMENIGREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENIGREEK SMALL LET" + - "TER ETA WITH DASIA AND YPOGEGRAMMENIGREEK SMALL LETTER ETA WITH PSILI AN" + - "D VARIA AND YPOGEGRAMMENIGREEK SMALL LETTER ETA WITH DASIA AND VARIA AND" + - " YPOGEGRAMMENIGREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMME" + - "NIGREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENIGREEK SMAL" + - "L LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENIGREEK SMALL LET" + - "TER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENIGREEK CAPITAL LETTER" + - " ETA WITH PSILI AND PROSGEGRAMMENIGREEK CAPITAL LETTER ETA WITH DASIA AN" + - "D PROSGEGRAMMENIGREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGE" + - "GRAMMENIGREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI" + - "GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENIGREEK CAP" + - "ITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENIGREEK CAPITAL LETT" + - "ER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENIGREEK CAPITAL LETTER" + - " ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENIGREEK SMALL LETTER OME" + - "GA WITH PSILI AND YPOGEGRAMMENIGREEK SMALL LETTER OMEGA WITH DASIA AND Y" + - "POGEGRAMMENIGREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMM" + - "ENIGREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENIGREEK " + - "SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENIGREEK SMALL LETT" + - "ER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENIGREEK SMALL LETTER OMEGA W" + - "ITH PSILI AND PERISPOMENI AND YPOGEGRAMMENIGREEK SMALL LETTER OMEGA WITH" + - " DASIA AND PERISPOMENI AND YPOGEGRAMMENIGREEK CAPITAL LETTER OMEGA WITH " + - "PSILI AND PROSGEGRAMMENIGREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGE" + - "GRAMMENIGREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMME" + - "NIGREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENIGREE" + - "K CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENIGREEK CAPIT" + - "AL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENIGREEK CAPITAL LETT" + - "ER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENIGREEK CAPITAL LETT" + - "ER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENIGREEK SMALL LETTER" + - " ALPHA WITH VRACHYGREEK SMALL LETTER ALPHA WITH MACRONGREEK SMALL LETTER" + - " ALPHA WITH VARIA AND YPOGEGRAMMENIGREEK SMALL LETTER ALPHA WITH YPOGEGR" + - "AMMENIGREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENIGREEK SMALL LE" + - "TTER ALPHA WITH PERISPOMENIGREEK SMALL LETTER ALPHA WITH PERISPOMENI AND" + - " YPOGEGRAMMENIGREEK CAPITAL LETTER ALPHA WITH VRACHYGREEK CAPITAL LETTER" + - " ALPHA WITH MACRONGREEK CAPITAL LETTER ALPHA WITH VARIAGREEK CAPITAL LET" + - "TER ALPHA WITH OXIAGREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENIGREEK K" + - "ORONISGREEK PROSGEGRAMMENIGREEK PSILIGREEK PERISPOMENIGREEK DIALYTIKA AN" + - "D PERISPOMENIGREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENIGREEK SM" + - "ALL LETTER ETA WITH YPOGEGRAMMENIGREEK SMALL LETTER ETA WITH OXIA AND YP" + - "OGEGRAMMENIGREEK SMALL LETTER ETA WITH PERISPOMENIGREEK SMALL LETTER ETA" + - " WITH PERISPOMENI AND YPOGEGRAMMENIGREEK CAPITAL LETTER EPSILON WITH VAR" + - "IAGREEK CAPITAL LETTER EPSILON WITH OXIAGREEK CAPITAL LETTER ETA WITH VA" + - "RIAGREEK CAPITAL LETTER ETA WITH OXIAGREEK CAPITAL LETTER ETA WITH PROSG" + - "EGRAMMENIGREEK PSILI AND VARIAGREEK PSILI AND OXIAGREEK PSILI AND PERISP" + - "OMENIGREEK SMALL LETTER IOTA WITH VRACHYGREEK SMALL LETTER IOTA WITH MAC") + ("" + - "RONGREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIAGREEK SMALL LETTER IO" + - "TA WITH DIALYTIKA AND OXIAGREEK SMALL LETTER IOTA WITH PERISPOMENIGREEK " + - "SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENIGREEK CAPITAL LETTER IOT" + - "A WITH VRACHYGREEK CAPITAL LETTER IOTA WITH MACRONGREEK CAPITAL LETTER I" + - "OTA WITH VARIAGREEK CAPITAL LETTER IOTA WITH OXIAGREEK DASIA AND VARIAGR" + - "EEK DASIA AND OXIAGREEK DASIA AND PERISPOMENIGREEK SMALL LETTER UPSILON " + - "WITH VRACHYGREEK SMALL LETTER UPSILON WITH MACRONGREEK SMALL LETTER UPSI" + - "LON WITH DIALYTIKA AND VARIAGREEK SMALL LETTER UPSILON WITH DIALYTIKA AN" + - "D OXIAGREEK SMALL LETTER RHO WITH PSILIGREEK SMALL LETTER RHO WITH DASIA" + - "GREEK SMALL LETTER UPSILON WITH PERISPOMENIGREEK SMALL LETTER UPSILON WI" + - "TH DIALYTIKA AND PERISPOMENIGREEK CAPITAL LETTER UPSILON WITH VRACHYGREE" + - "K CAPITAL LETTER UPSILON WITH MACRONGREEK CAPITAL LETTER UPSILON WITH VA" + - "RIAGREEK CAPITAL LETTER UPSILON WITH OXIAGREEK CAPITAL LETTER RHO WITH D" + - "ASIAGREEK DIALYTIKA AND VARIAGREEK DIALYTIKA AND OXIAGREEK VARIAGREEK SM" + - "ALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENIGREEK SMALL LETTER OMEGA WI" + - "TH YPOGEGRAMMENIGREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENIGREE" + - "K SMALL LETTER OMEGA WITH PERISPOMENIGREEK SMALL LETTER OMEGA WITH PERIS" + - "POMENI AND YPOGEGRAMMENIGREEK CAPITAL LETTER OMICRON WITH VARIAGREEK CAP" + - "ITAL LETTER OMICRON WITH OXIAGREEK CAPITAL LETTER OMEGA WITH VARIAGREEK " + - "CAPITAL LETTER OMEGA WITH OXIAGREEK CAPITAL LETTER OMEGA WITH PROSGEGRAM" + - "MENIGREEK OXIAGREEK DASIAEN QUADEM QUADEN SPACEEM SPACETHREE-PER-EM SPAC" + - "EFOUR-PER-EM SPACESIX-PER-EM SPACEFIGURE SPACEPUNCTUATION SPACETHIN SPAC" + - "EHAIR SPACEZERO WIDTH SPACEZERO WIDTH NON-JOINERZERO WIDTH JOINERLEFT-TO" + - "-RIGHT MARKRIGHT-TO-LEFT MARKHYPHENNON-BREAKING HYPHENFIGURE DASHEN DASH" + - "EM DASHHORIZONTAL BARDOUBLE VERTICAL LINEDOUBLE LOW LINELEFT SINGLE QUOT" + - "ATION MARKRIGHT SINGLE QUOTATION MARKSINGLE LOW-9 QUOTATION MARKSINGLE H" + - "IGH-REVERSED-9 QUOTATION MARKLEFT DOUBLE QUOTATION MARKRIGHT DOUBLE QUOT" + - "ATION MARKDOUBLE LOW-9 QUOTATION MARKDOUBLE HIGH-REVERSED-9 QUOTATION MA" + - "RKDAGGERDOUBLE DAGGERBULLETTRIANGULAR BULLETONE DOT LEADERTWO DOT LEADER" + - "HORIZONTAL ELLIPSISHYPHENATION POINTLINE SEPARATORPARAGRAPH SEPARATORLEF" + - "T-TO-RIGHT EMBEDDINGRIGHT-TO-LEFT EMBEDDINGPOP DIRECTIONAL FORMATTINGLEF" + - "T-TO-RIGHT OVERRIDERIGHT-TO-LEFT OVERRIDENARROW NO-BREAK SPACEPER MILLE " + - "SIGNPER TEN THOUSAND SIGNPRIMEDOUBLE PRIMETRIPLE PRIMEREVERSED PRIMEREVE" + - "RSED DOUBLE PRIMEREVERSED TRIPLE PRIMECARETSINGLE LEFT-POINTING ANGLE QU" + - "OTATION MARKSINGLE RIGHT-POINTING ANGLE QUOTATION MARKREFERENCE MARKDOUB" + - "LE EXCLAMATION MARKINTERROBANGOVERLINEUNDERTIECHARACTER TIECARET INSERTI" + - "ON POINTASTERISMHYPHEN BULLETFRACTION SLASHLEFT SQUARE BRACKET WITH QUIL" + - "LRIGHT SQUARE BRACKET WITH QUILLDOUBLE QUESTION MARKQUESTION EXCLAMATION" + - " MARKEXCLAMATION QUESTION MARKTIRONIAN SIGN ETREVERSED PILCROW SIGNBLACK" + - " LEFTWARDS BULLETBLACK RIGHTWARDS BULLETLOW ASTERISKREVERSED SEMICOLONCL" + - "OSE UPTWO ASTERISKS ALIGNED VERTICALLYCOMMERCIAL MINUS SIGNSWUNG DASHINV" + - "ERTED UNDERTIEFLOWER PUNCTUATION MARKTHREE DOT PUNCTUATIONQUADRUPLE PRIM" + - "EFOUR DOT PUNCTUATIONFIVE DOT PUNCTUATIONTWO DOT PUNCTUATIONFOUR DOT MAR" + - "KDOTTED CROSSTRICOLONVERTICAL FOUR DOTSMEDIUM MATHEMATICAL SPACEWORD JOI" + - "NERFUNCTION APPLICATIONINVISIBLE TIMESINVISIBLE SEPARATORINVISIBLE PLUSL" + - "EFT-TO-RIGHT ISOLATERIGHT-TO-LEFT ISOLATEFIRST STRONG ISOLATEPOP DIRECTI" + - "ONAL ISOLATEINHIBIT SYMMETRIC SWAPPINGACTIVATE SYMMETRIC SWAPPINGINHIBIT" + - " ARABIC FORM SHAPINGACTIVATE ARABIC FORM SHAPINGNATIONAL DIGIT SHAPESNOM" + - "INAL DIGIT SHAPESSUPERSCRIPT ZEROSUPERSCRIPT LATIN SMALL LETTER ISUPERSC" + - "RIPT FOURSUPERSCRIPT FIVESUPERSCRIPT SIXSUPERSCRIPT SEVENSUPERSCRIPT EIG" + - "HTSUPERSCRIPT NINESUPERSCRIPT PLUS SIGNSUPERSCRIPT MINUSSUPERSCRIPT EQUA" + - "LS SIGNSUPERSCRIPT LEFT PARENTHESISSUPERSCRIPT RIGHT PARENTHESISSUPERSCR" + - "IPT LATIN SMALL LETTER NSUBSCRIPT ZEROSUBSCRIPT ONESUBSCRIPT TWOSUBSCRIP" + - "T THREESUBSCRIPT FOURSUBSCRIPT FIVESUBSCRIPT SIXSUBSCRIPT SEVENSUBSCRIPT" + - " EIGHTSUBSCRIPT NINESUBSCRIPT PLUS SIGNSUBSCRIPT MINUSSUBSCRIPT EQUALS S" + - "IGNSUBSCRIPT LEFT PARENTHESISSUBSCRIPT RIGHT PARENTHESISLATIN SUBSCRIPT " + - "SMALL LETTER ALATIN SUBSCRIPT SMALL LETTER ELATIN SUBSCRIPT SMALL LETTER" + - " OLATIN SUBSCRIPT SMALL LETTER XLATIN SUBSCRIPT SMALL LETTER SCHWALATIN " + - "SUBSCRIPT SMALL LETTER HLATIN SUBSCRIPT SMALL LETTER KLATIN SUBSCRIPT SM" + - "ALL LETTER LLATIN SUBSCRIPT SMALL LETTER MLATIN SUBSCRIPT SMALL LETTER N" + - "LATIN SUBSCRIPT SMALL LETTER PLATIN SUBSCRIPT SMALL LETTER SLATIN SUBSCR" + - "IPT SMALL LETTER TEURO-CURRENCY SIGNCOLON SIGNCRUZEIRO SIGNFRENCH FRANC " + - "SIGNLIRA SIGNMILL SIGNNAIRA SIGNPESETA SIGNRUPEE SIGNWON SIGNNEW SHEQEL " + - "SIGNDONG SIGNEURO SIGNKIP SIGNTUGRIK SIGNDRACHMA SIGNGERMAN PENNY SIGNPE") + ("" + - "SO SIGNGUARANI SIGNAUSTRAL SIGNHRYVNIA SIGNCEDI SIGNLIVRE TOURNOIS SIGNS" + - "PESMILO SIGNTENGE SIGNINDIAN RUPEE SIGNTURKISH LIRA SIGNNORDIC MARK SIGN" + - "MANAT SIGNRUBLE SIGNLARI SIGNCOMBINING LEFT HARPOON ABOVECOMBINING RIGHT" + - " HARPOON ABOVECOMBINING LONG VERTICAL LINE OVERLAYCOMBINING SHORT VERTIC" + - "AL LINE OVERLAYCOMBINING ANTICLOCKWISE ARROW ABOVECOMBINING CLOCKWISE AR" + - "ROW ABOVECOMBINING LEFT ARROW ABOVECOMBINING RIGHT ARROW ABOVECOMBINING " + - "RING OVERLAYCOMBINING CLOCKWISE RING OVERLAYCOMBINING ANTICLOCKWISE RING" + - " OVERLAYCOMBINING THREE DOTS ABOVECOMBINING FOUR DOTS ABOVECOMBINING ENC" + - "LOSING CIRCLECOMBINING ENCLOSING SQUARECOMBINING ENCLOSING DIAMONDCOMBIN" + - "ING ENCLOSING CIRCLE BACKSLASHCOMBINING LEFT RIGHT ARROW ABOVECOMBINING " + - "ENCLOSING SCREENCOMBINING ENCLOSING KEYCAPCOMBINING ENCLOSING UPWARD POI" + - "NTING TRIANGLECOMBINING REVERSE SOLIDUS OVERLAYCOMBINING DOUBLE VERTICAL" + - " STROKE OVERLAYCOMBINING ANNUITY SYMBOLCOMBINING TRIPLE UNDERDOTCOMBININ" + - "G WIDE BRIDGE ABOVECOMBINING LEFTWARDS ARROW OVERLAYCOMBINING LONG DOUBL" + - "E SOLIDUS OVERLAYCOMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDSCOMBINI" + - "NG LEFTWARDS HARPOON WITH BARB DOWNWARDSCOMBINING LEFT ARROW BELOWCOMBIN" + - "ING RIGHT ARROW BELOWCOMBINING ASTERISK ABOVEACCOUNT OFADDRESSED TO THE " + - "SUBJECTDOUBLE-STRUCK CAPITAL CDEGREE CELSIUSCENTRE LINE SYMBOLCARE OFCAD" + - "A UNAEULER CONSTANTSCRUPLEDEGREE FAHRENHEITSCRIPT SMALL GSCRIPT CAPITAL " + - "HBLACK-LETTER CAPITAL HDOUBLE-STRUCK CAPITAL HPLANCK CONSTANTPLANCK CONS" + - "TANT OVER TWO PISCRIPT CAPITAL IBLACK-LETTER CAPITAL ISCRIPT CAPITAL LSC" + - "RIPT SMALL LL B BAR SYMBOLDOUBLE-STRUCK CAPITAL NNUMERO SIGNSOUND RECORD" + - "ING COPYRIGHTSCRIPT CAPITAL PDOUBLE-STRUCK CAPITAL PDOUBLE-STRUCK CAPITA" + - "L QSCRIPT CAPITAL RBLACK-LETTER CAPITAL RDOUBLE-STRUCK CAPITAL RPRESCRIP" + - "TION TAKERESPONSESERVICE MARKTELEPHONE SIGNTRADE MARK SIGNVERSICLEDOUBLE" + - "-STRUCK CAPITAL ZOUNCE SIGNOHM SIGNINVERTED OHM SIGNBLACK-LETTER CAPITAL" + - " ZTURNED GREEK SMALL LETTER IOTAKELVIN SIGNANGSTROM SIGNSCRIPT CAPITAL B" + - "BLACK-LETTER CAPITAL CESTIMATED SYMBOLSCRIPT SMALL ESCRIPT CAPITAL ESCRI" + - "PT CAPITAL FTURNED CAPITAL FSCRIPT CAPITAL MSCRIPT SMALL OALEF SYMBOLBET" + - " SYMBOLGIMEL SYMBOLDALET SYMBOLINFORMATION SOURCEROTATED CAPITAL QFACSIM" + - "ILE SIGNDOUBLE-STRUCK SMALL PIDOUBLE-STRUCK SMALL GAMMADOUBLE-STRUCK CAP" + - "ITAL GAMMADOUBLE-STRUCK CAPITAL PIDOUBLE-STRUCK N-ARY SUMMATIONTURNED SA" + - "NS-SERIF CAPITAL GTURNED SANS-SERIF CAPITAL LREVERSED SANS-SERIF CAPITAL" + - " LTURNED SANS-SERIF CAPITAL YDOUBLE-STRUCK ITALIC CAPITAL DDOUBLE-STRUCK" + - " ITALIC SMALL DDOUBLE-STRUCK ITALIC SMALL EDOUBLE-STRUCK ITALIC SMALL ID" + - "OUBLE-STRUCK ITALIC SMALL JPROPERTY LINETURNED AMPERSANDPER SIGNAKTIESEL" + - "SKABTURNED SMALL FSYMBOL FOR SAMARITAN SOURCEVULGAR FRACTION ONE SEVENTH" + - "VULGAR FRACTION ONE NINTHVULGAR FRACTION ONE TENTHVULGAR FRACTION ONE TH" + - "IRDVULGAR FRACTION TWO THIRDSVULGAR FRACTION ONE FIFTHVULGAR FRACTION TW" + - "O FIFTHSVULGAR FRACTION THREE FIFTHSVULGAR FRACTION FOUR FIFTHSVULGAR FR" + - "ACTION ONE SIXTHVULGAR FRACTION FIVE SIXTHSVULGAR FRACTION ONE EIGHTHVUL" + - "GAR FRACTION THREE EIGHTHSVULGAR FRACTION FIVE EIGHTHSVULGAR FRACTION SE" + - "VEN EIGHTHSFRACTION NUMERATOR ONEROMAN NUMERAL ONEROMAN NUMERAL TWOROMAN" + - " NUMERAL THREEROMAN NUMERAL FOURROMAN NUMERAL FIVEROMAN NUMERAL SIXROMAN" + - " NUMERAL SEVENROMAN NUMERAL EIGHTROMAN NUMERAL NINEROMAN NUMERAL TENROMA" + - "N NUMERAL ELEVENROMAN NUMERAL TWELVEROMAN NUMERAL FIFTYROMAN NUMERAL ONE" + - " HUNDREDROMAN NUMERAL FIVE HUNDREDROMAN NUMERAL ONE THOUSANDSMALL ROMAN " + - "NUMERAL ONESMALL ROMAN NUMERAL TWOSMALL ROMAN NUMERAL THREESMALL ROMAN N" + - "UMERAL FOURSMALL ROMAN NUMERAL FIVESMALL ROMAN NUMERAL SIXSMALL ROMAN NU" + - "MERAL SEVENSMALL ROMAN NUMERAL EIGHTSMALL ROMAN NUMERAL NINESMALL ROMAN " + - "NUMERAL TENSMALL ROMAN NUMERAL ELEVENSMALL ROMAN NUMERAL TWELVESMALL ROM" + - "AN NUMERAL FIFTYSMALL ROMAN NUMERAL ONE HUNDREDSMALL ROMAN NUMERAL FIVE " + - "HUNDREDSMALL ROMAN NUMERAL ONE THOUSANDROMAN NUMERAL ONE THOUSAND C DROM" + - "AN NUMERAL FIVE THOUSANDROMAN NUMERAL TEN THOUSANDROMAN NUMERAL REVERSED" + - " ONE HUNDREDLATIN SMALL LETTER REVERSED CROMAN NUMERAL SIX LATE FORMROMA" + - "N NUMERAL FIFTY EARLY FORMROMAN NUMERAL FIFTY THOUSANDROMAN NUMERAL ONE " + - "HUNDRED THOUSANDVULGAR FRACTION ZERO THIRDSTURNED DIGIT TWOTURNED DIGIT " + - "THREELEFTWARDS ARROWUPWARDS ARROWRIGHTWARDS ARROWDOWNWARDS ARROWLEFT RIG" + - "HT ARROWUP DOWN ARROWNORTH WEST ARROWNORTH EAST ARROWSOUTH EAST ARROWSOU" + - "TH WEST ARROWLEFTWARDS ARROW WITH STROKERIGHTWARDS ARROW WITH STROKELEFT" + - "WARDS WAVE ARROWRIGHTWARDS WAVE ARROWLEFTWARDS TWO HEADED ARROWUPWARDS T" + - "WO HEADED ARROWRIGHTWARDS TWO HEADED ARROWDOWNWARDS TWO HEADED ARROWLEFT" + - "WARDS ARROW WITH TAILRIGHTWARDS ARROW WITH TAILLEFTWARDS ARROW FROM BARU" + - "PWARDS ARROW FROM BARRIGHTWARDS ARROW FROM BARDOWNWARDS ARROW FROM BARUP") + ("" + - " DOWN ARROW WITH BASELEFTWARDS ARROW WITH HOOKRIGHTWARDS ARROW WITH HOOK" + - "LEFTWARDS ARROW WITH LOOPRIGHTWARDS ARROW WITH LOOPLEFT RIGHT WAVE ARROW" + - "LEFT RIGHT ARROW WITH STROKEDOWNWARDS ZIGZAG ARROWUPWARDS ARROW WITH TIP" + - " LEFTWARDSUPWARDS ARROW WITH TIP RIGHTWARDSDOWNWARDS ARROW WITH TIP LEFT" + - "WARDSDOWNWARDS ARROW WITH TIP RIGHTWARDSRIGHTWARDS ARROW WITH CORNER DOW" + - "NWARDSDOWNWARDS ARROW WITH CORNER LEFTWARDSANTICLOCKWISE TOP SEMICIRCLE " + - "ARROWCLOCKWISE TOP SEMICIRCLE ARROWNORTH WEST ARROW TO LONG BARLEFTWARDS" + - " ARROW TO BAR OVER RIGHTWARDS ARROW TO BARANTICLOCKWISE OPEN CIRCLE ARRO" + - "WCLOCKWISE OPEN CIRCLE ARROWLEFTWARDS HARPOON WITH BARB UPWARDSLEFTWARDS" + - " HARPOON WITH BARB DOWNWARDSUPWARDS HARPOON WITH BARB RIGHTWARDSUPWARDS " + - "HARPOON WITH BARB LEFTWARDSRIGHTWARDS HARPOON WITH BARB UPWARDSRIGHTWARD" + - "S HARPOON WITH BARB DOWNWARDSDOWNWARDS HARPOON WITH BARB RIGHTWARDSDOWNW" + - "ARDS HARPOON WITH BARB LEFTWARDSRIGHTWARDS ARROW OVER LEFTWARDS ARROWUPW" + - "ARDS ARROW LEFTWARDS OF DOWNWARDS ARROWLEFTWARDS ARROW OVER RIGHTWARDS A" + - "RROWLEFTWARDS PAIRED ARROWSUPWARDS PAIRED ARROWSRIGHTWARDS PAIRED ARROWS" + - "DOWNWARDS PAIRED ARROWSLEFTWARDS HARPOON OVER RIGHTWARDS HARPOONRIGHTWAR" + - "DS HARPOON OVER LEFTWARDS HARPOONLEFTWARDS DOUBLE ARROW WITH STROKELEFT " + - "RIGHT DOUBLE ARROW WITH STROKERIGHTWARDS DOUBLE ARROW WITH STROKELEFTWAR" + - "DS DOUBLE ARROWUPWARDS DOUBLE ARROWRIGHTWARDS DOUBLE ARROWDOWNWARDS DOUB" + - "LE ARROWLEFT RIGHT DOUBLE ARROWUP DOWN DOUBLE ARROWNORTH WEST DOUBLE ARR" + - "OWNORTH EAST DOUBLE ARROWSOUTH EAST DOUBLE ARROWSOUTH WEST DOUBLE ARROWL" + - "EFTWARDS TRIPLE ARROWRIGHTWARDS TRIPLE ARROWLEFTWARDS SQUIGGLE ARROWRIGH" + - "TWARDS SQUIGGLE ARROWUPWARDS ARROW WITH DOUBLE STROKEDOWNWARDS ARROW WIT" + - "H DOUBLE STROKELEFTWARDS DASHED ARROWUPWARDS DASHED ARROWRIGHTWARDS DASH" + - "ED ARROWDOWNWARDS DASHED ARROWLEFTWARDS ARROW TO BARRIGHTWARDS ARROW TO " + - "BARLEFTWARDS WHITE ARROWUPWARDS WHITE ARROWRIGHTWARDS WHITE ARROWDOWNWAR" + - "DS WHITE ARROWUPWARDS WHITE ARROW FROM BARUPWARDS WHITE ARROW ON PEDESTA" + - "LUPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BARUPWARDS WHITE ARROW " + - "ON PEDESTAL WITH VERTICAL BARUPWARDS WHITE DOUBLE ARROWUPWARDS WHITE DOU" + - "BLE ARROW ON PEDESTALRIGHTWARDS WHITE ARROW FROM WALLNORTH WEST ARROW TO" + - " CORNERSOUTH EAST ARROW TO CORNERUP DOWN WHITE ARROWRIGHT ARROW WITH SMA" + - "LL CIRCLEDOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROWTHREE RIGHTWARDS ARRO" + - "WSLEFTWARDS ARROW WITH VERTICAL STROKERIGHTWARDS ARROW WITH VERTICAL STR" + - "OKELEFT RIGHT ARROW WITH VERTICAL STROKELEFTWARDS ARROW WITH DOUBLE VERT" + - "ICAL STROKERIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKELEFT RIGHT ARROW " + - "WITH DOUBLE VERTICAL STROKELEFTWARDS OPEN-HEADED ARROWRIGHTWARDS OPEN-HE" + - "ADED ARROWLEFT RIGHT OPEN-HEADED ARROWFOR ALLCOMPLEMENTPARTIAL DIFFERENT" + - "IALTHERE EXISTSTHERE DOES NOT EXISTEMPTY SETINCREMENTNABLAELEMENT OFNOT " + - "AN ELEMENT OFSMALL ELEMENT OFCONTAINS AS MEMBERDOES NOT CONTAIN AS MEMBE" + - "RSMALL CONTAINS AS MEMBEREND OF PROOFN-ARY PRODUCTN-ARY COPRODUCTN-ARY S" + - "UMMATIONMINUS SIGNMINUS-OR-PLUS SIGNDOT PLUSDIVISION SLASHSET MINUSASTER" + - "ISK OPERATORRING OPERATORBULLET OPERATORSQUARE ROOTCUBE ROOTFOURTH ROOTP" + - "ROPORTIONAL TOINFINITYRIGHT ANGLEANGLEMEASURED ANGLESPHERICAL ANGLEDIVID" + - "ESDOES NOT DIVIDEPARALLEL TONOT PARALLEL TOLOGICAL ANDLOGICAL ORINTERSEC" + - "TIONUNIONINTEGRALDOUBLE INTEGRALTRIPLE INTEGRALCONTOUR INTEGRALSURFACE I" + - "NTEGRALVOLUME INTEGRALCLOCKWISE INTEGRALCLOCKWISE CONTOUR INTEGRALANTICL" + - "OCKWISE CONTOUR INTEGRALTHEREFOREBECAUSERATIOPROPORTIONDOT MINUSEXCESSGE" + - "OMETRIC PROPORTIONHOMOTHETICTILDE OPERATORREVERSED TILDEINVERTED LAZY SS" + - "INE WAVEWREATH PRODUCTNOT TILDEMINUS TILDEASYMPTOTICALLY EQUAL TONOT ASY" + - "MPTOTICALLY EQUAL TOAPPROXIMATELY EQUAL TOAPPROXIMATELY BUT NOT ACTUALLY" + - " EQUAL TONEITHER APPROXIMATELY NOR ACTUALLY EQUAL TOALMOST EQUAL TONOT A" + - "LMOST EQUAL TOALMOST EQUAL OR EQUAL TOTRIPLE TILDEALL EQUAL TOEQUIVALENT" + - " TOGEOMETRICALLY EQUIVALENT TODIFFERENCE BETWEENAPPROACHES THE LIMITGEOM" + - "ETRICALLY EQUAL TOAPPROXIMATELY EQUAL TO OR THE IMAGE OFIMAGE OF OR APPR" + - "OXIMATELY EQUAL TOCOLON EQUALSEQUALS COLONRING IN EQUAL TORING EQUAL TOC" + - "ORRESPONDS TOESTIMATESEQUIANGULAR TOSTAR EQUALSDELTA EQUAL TOEQUAL TO BY" + - " DEFINITIONMEASURED BYQUESTIONED EQUAL TONOT EQUAL TOIDENTICAL TONOT IDE" + - "NTICAL TOSTRICTLY EQUIVALENT TOLESS-THAN OR EQUAL TOGREATER-THAN OR EQUA" + - "L TOLESS-THAN OVER EQUAL TOGREATER-THAN OVER EQUAL TOLESS-THAN BUT NOT E" + - "QUAL TOGREATER-THAN BUT NOT EQUAL TOMUCH LESS-THANMUCH GREATER-THANBETWE" + - "ENNOT EQUIVALENT TONOT LESS-THANNOT GREATER-THANNEITHER LESS-THAN NOR EQ" + - "UAL TONEITHER GREATER-THAN NOR EQUAL TOLESS-THAN OR EQUIVALENT TOGREATER" + - "-THAN OR EQUIVALENT TONEITHER LESS-THAN NOR EQUIVALENT TONEITHER GREATER" + - "-THAN NOR EQUIVALENT TOLESS-THAN OR GREATER-THANGREATER-THAN OR LESS-THA") + ("" + - "NNEITHER LESS-THAN NOR GREATER-THANNEITHER GREATER-THAN NOR LESS-THANPRE" + - "CEDESSUCCEEDSPRECEDES OR EQUAL TOSUCCEEDS OR EQUAL TOPRECEDES OR EQUIVAL" + - "ENT TOSUCCEEDS OR EQUIVALENT TODOES NOT PRECEDEDOES NOT SUCCEEDSUBSET OF" + - "SUPERSET OFNOT A SUBSET OFNOT A SUPERSET OFSUBSET OF OR EQUAL TOSUPERSET" + - " OF OR EQUAL TONEITHER A SUBSET OF NOR EQUAL TONEITHER A SUPERSET OF NOR" + - " EQUAL TOSUBSET OF WITH NOT EQUAL TOSUPERSET OF WITH NOT EQUAL TOMULTISE" + - "TMULTISET MULTIPLICATIONMULTISET UNIONSQUARE IMAGE OFSQUARE ORIGINAL OFS" + - "QUARE IMAGE OF OR EQUAL TOSQUARE ORIGINAL OF OR EQUAL TOSQUARE CAPSQUARE" + - " CUPCIRCLED PLUSCIRCLED MINUSCIRCLED TIMESCIRCLED DIVISION SLASHCIRCLED " + - "DOT OPERATORCIRCLED RING OPERATORCIRCLED ASTERISK OPERATORCIRCLED EQUALS" + - "CIRCLED DASHSQUARED PLUSSQUARED MINUSSQUARED TIMESSQUARED DOT OPERATORRI" + - "GHT TACKLEFT TACKDOWN TACKUP TACKASSERTIONMODELSTRUEFORCESTRIPLE VERTICA" + - "L BAR RIGHT TURNSTILEDOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILEDOES NOT " + - "PROVENOT TRUEDOES NOT FORCENEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURN" + - "STILEPRECEDES UNDER RELATIONSUCCEEDS UNDER RELATIONNORMAL SUBGROUP OFCON" + - "TAINS AS NORMAL SUBGROUPNORMAL SUBGROUP OF OR EQUAL TOCONTAINS AS NORMAL" + - " SUBGROUP OR EQUAL TOORIGINAL OFIMAGE OFMULTIMAPHERMITIAN CONJUGATE MATR" + - "IXINTERCALATEXORNANDNORRIGHT ANGLE WITH ARCRIGHT TRIANGLEN-ARY LOGICAL A" + - "NDN-ARY LOGICAL ORN-ARY INTERSECTIONN-ARY UNIONDIAMOND OPERATORDOT OPERA" + - "TORSTAR OPERATORDIVISION TIMESBOWTIELEFT NORMAL FACTOR SEMIDIRECT PRODUC" + - "TRIGHT NORMAL FACTOR SEMIDIRECT PRODUCTLEFT SEMIDIRECT PRODUCTRIGHT SEMI" + - "DIRECT PRODUCTREVERSED TILDE EQUALSCURLY LOGICAL ORCURLY LOGICAL ANDDOUB" + - "LE SUBSETDOUBLE SUPERSETDOUBLE INTERSECTIONDOUBLE UNIONPITCHFORKEQUAL AN" + - "D PARALLEL TOLESS-THAN WITH DOTGREATER-THAN WITH DOTVERY MUCH LESS-THANV" + - "ERY MUCH GREATER-THANLESS-THAN EQUAL TO OR GREATER-THANGREATER-THAN EQUA" + - "L TO OR LESS-THANEQUAL TO OR LESS-THANEQUAL TO OR GREATER-THANEQUAL TO O" + - "R PRECEDESEQUAL TO OR SUCCEEDSDOES NOT PRECEDE OR EQUALDOES NOT SUCCEED " + - "OR EQUALNOT SQUARE IMAGE OF OR EQUAL TONOT SQUARE ORIGINAL OF OR EQUAL T" + - "OSQUARE IMAGE OF OR NOT EQUAL TOSQUARE ORIGINAL OF OR NOT EQUAL TOLESS-T" + - "HAN BUT NOT EQUIVALENT TOGREATER-THAN BUT NOT EQUIVALENT TOPRECEDES BUT " + - "NOT EQUIVALENT TOSUCCEEDS BUT NOT EQUIVALENT TONOT NORMAL SUBGROUP OFDOE" + - "S NOT CONTAIN AS NORMAL SUBGROUPNOT NORMAL SUBGROUP OF OR EQUAL TODOES N" + - "OT CONTAIN AS NORMAL SUBGROUP OR EQUALVERTICAL ELLIPSISMIDLINE HORIZONTA" + - "L ELLIPSISUP RIGHT DIAGONAL ELLIPSISDOWN RIGHT DIAGONAL ELLIPSISELEMENT " + - "OF WITH LONG HORIZONTAL STROKEELEMENT OF WITH VERTICAL BAR AT END OF HOR" + - "IZONTAL STROKESMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL ST" + - "ROKEELEMENT OF WITH DOT ABOVEELEMENT OF WITH OVERBARSMALL ELEMENT OF WIT" + - "H OVERBARELEMENT OF WITH UNDERBARELEMENT OF WITH TWO HORIZONTAL STROKESC" + - "ONTAINS WITH LONG HORIZONTAL STROKECONTAINS WITH VERTICAL BAR AT END OF " + - "HORIZONTAL STROKESMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL S" + - "TROKECONTAINS WITH OVERBARSMALL CONTAINS WITH OVERBARZ NOTATION BAG MEMB" + - "ERSHIPDIAMETER SIGNELECTRIC ARROWHOUSEUP ARROWHEADDOWN ARROWHEADPROJECTI" + - "VEPERSPECTIVEWAVY LINELEFT CEILINGRIGHT CEILINGLEFT FLOORRIGHT FLOORBOTT" + - "OM RIGHT CROPBOTTOM LEFT CROPTOP RIGHT CROPTOP LEFT CROPREVERSED NOT SIG" + - "NSQUARE LOZENGEARCSEGMENTSECTORTELEPHONE RECORDERPOSITION INDICATORVIEWD" + - "ATA SQUAREPLACE OF INTEREST SIGNTURNED NOT SIGNWATCHHOURGLASSTOP LEFT CO" + - "RNERTOP RIGHT CORNERBOTTOM LEFT CORNERBOTTOM RIGHT CORNERTOP HALF INTEGR" + - "ALBOTTOM HALF INTEGRALFROWNSMILEUP ARROWHEAD BETWEEN TWO HORIZONTAL BARS" + - "OPTION KEYERASE TO THE RIGHTX IN A RECTANGLE BOXKEYBOARDLEFT-POINTING AN" + - "GLE BRACKETRIGHT-POINTING ANGLE BRACKETERASE TO THE LEFTBENZENE RINGCYLI" + - "NDRICITYALL AROUND-PROFILESYMMETRYTOTAL RUNOUTDIMENSION ORIGINCONICAL TA" + - "PERSLOPECOUNTERBORECOUNTERSINKAPL FUNCTIONAL SYMBOL I-BEAMAPL FUNCTIONAL" + - " SYMBOL SQUISH QUADAPL FUNCTIONAL SYMBOL QUAD EQUALAPL FUNCTIONAL SYMBOL" + - " QUAD DIVIDEAPL FUNCTIONAL SYMBOL QUAD DIAMONDAPL FUNCTIONAL SYMBOL QUAD" + - " JOTAPL FUNCTIONAL SYMBOL QUAD CIRCLEAPL FUNCTIONAL SYMBOL CIRCLE STILEA" + - "PL FUNCTIONAL SYMBOL CIRCLE JOTAPL FUNCTIONAL SYMBOL SLASH BARAPL FUNCTI" + - "ONAL SYMBOL BACKSLASH BARAPL FUNCTIONAL SYMBOL QUAD SLASHAPL FUNCTIONAL " + - "SYMBOL QUAD BACKSLASHAPL FUNCTIONAL SYMBOL QUAD LESS-THANAPL FUNCTIONAL " + - "SYMBOL QUAD GREATER-THANAPL FUNCTIONAL SYMBOL LEFTWARDS VANEAPL FUNCTION" + - "AL SYMBOL RIGHTWARDS VANEAPL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROWAPL F" + - "UNCTIONAL SYMBOL QUAD RIGHTWARDS ARROWAPL FUNCTIONAL SYMBOL CIRCLE BACKS" + - "LASHAPL FUNCTIONAL SYMBOL DOWN TACK UNDERBARAPL FUNCTIONAL SYMBOL DELTA " + - "STILEAPL FUNCTIONAL SYMBOL QUAD DOWN CARETAPL FUNCTIONAL SYMBOL QUAD DEL" + - "TAAPL FUNCTIONAL SYMBOL DOWN TACK JOTAPL FUNCTIONAL SYMBOL UPWARDS VANEA") + ("" + - "PL FUNCTIONAL SYMBOL QUAD UPWARDS ARROWAPL FUNCTIONAL SYMBOL UP TACK OVE" + - "RBARAPL FUNCTIONAL SYMBOL DEL STILEAPL FUNCTIONAL SYMBOL QUAD UP CARETAP" + - "L FUNCTIONAL SYMBOL QUAD DELAPL FUNCTIONAL SYMBOL UP TACK JOTAPL FUNCTIO" + - "NAL SYMBOL DOWNWARDS VANEAPL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROWAPL F" + - "UNCTIONAL SYMBOL QUOTE UNDERBARAPL FUNCTIONAL SYMBOL DELTA UNDERBARAPL F" + - "UNCTIONAL SYMBOL DIAMOND UNDERBARAPL FUNCTIONAL SYMBOL JOT UNDERBARAPL F" + - "UNCTIONAL SYMBOL CIRCLE UNDERBARAPL FUNCTIONAL SYMBOL UP SHOE JOTAPL FUN" + - "CTIONAL SYMBOL QUOTE QUADAPL FUNCTIONAL SYMBOL CIRCLE STARAPL FUNCTIONAL" + - " SYMBOL QUAD COLONAPL FUNCTIONAL SYMBOL UP TACK DIAERESISAPL FUNCTIONAL " + - "SYMBOL DEL DIAERESISAPL FUNCTIONAL SYMBOL STAR DIAERESISAPL FUNCTIONAL S" + - "YMBOL JOT DIAERESISAPL FUNCTIONAL SYMBOL CIRCLE DIAERESISAPL FUNCTIONAL " + - "SYMBOL DOWN SHOE STILEAPL FUNCTIONAL SYMBOL LEFT SHOE STILEAPL FUNCTIONA" + - "L SYMBOL TILDE DIAERESISAPL FUNCTIONAL SYMBOL GREATER-THAN DIAERESISAPL " + - "FUNCTIONAL SYMBOL COMMA BARAPL FUNCTIONAL SYMBOL DEL TILDEAPL FUNCTIONAL" + - " SYMBOL ZILDEAPL FUNCTIONAL SYMBOL STILE TILDEAPL FUNCTIONAL SYMBOL SEMI" + - "COLON UNDERBARAPL FUNCTIONAL SYMBOL QUAD NOT EQUALAPL FUNCTIONAL SYMBOL " + - "QUAD QUESTIONAPL FUNCTIONAL SYMBOL DOWN CARET TILDEAPL FUNCTIONAL SYMBOL" + - " UP CARET TILDEAPL FUNCTIONAL SYMBOL IOTAAPL FUNCTIONAL SYMBOL RHOAPL FU" + - "NCTIONAL SYMBOL OMEGAAPL FUNCTIONAL SYMBOL ALPHA UNDERBARAPL FUNCTIONAL " + - "SYMBOL EPSILON UNDERBARAPL FUNCTIONAL SYMBOL IOTA UNDERBARAPL FUNCTIONAL" + - " SYMBOL OMEGA UNDERBARAPL FUNCTIONAL SYMBOL ALPHANOT CHECK MARKRIGHT ANG" + - "LE WITH DOWNWARDS ZIGZAG ARROWSHOULDERED OPEN BOXBELL SYMBOLVERTICAL LIN" + - "E WITH MIDDLE DOTINSERTION SYMBOLCONTINUOUS UNDERLINE SYMBOLDISCONTINUOU" + - "S UNDERLINE SYMBOLEMPHASIS SYMBOLCOMPOSITION SYMBOLWHITE SQUARE WITH CEN" + - "TRE VERTICAL LINEENTER SYMBOLALTERNATIVE KEY SYMBOLHELM SYMBOLCIRCLED HO" + - "RIZONTAL BAR WITH NOTCHCIRCLED TRIANGLE DOWNBROKEN CIRCLE WITH NORTHWEST" + - " ARROWUNDO SYMBOLMONOSTABLE SYMBOLHYSTERESIS SYMBOLOPEN-CIRCUIT-OUTPUT H" + - "-TYPE SYMBOLOPEN-CIRCUIT-OUTPUT L-TYPE SYMBOLPASSIVE-PULL-DOWN-OUTPUT SY" + - "MBOLPASSIVE-PULL-UP-OUTPUT SYMBOLDIRECT CURRENT SYMBOL FORM TWOSOFTWARE-" + - "FUNCTION SYMBOLAPL FUNCTIONAL SYMBOL QUADDECIMAL SEPARATOR KEY SYMBOLPRE" + - "VIOUS PAGENEXT PAGEPRINT SCREEN SYMBOLCLEAR SCREEN SYMBOLLEFT PARENTHESI" + - "S UPPER HOOKLEFT PARENTHESIS EXTENSIONLEFT PARENTHESIS LOWER HOOKRIGHT P" + - "ARENTHESIS UPPER HOOKRIGHT PARENTHESIS EXTENSIONRIGHT PARENTHESIS LOWER " + - "HOOKLEFT SQUARE BRACKET UPPER CORNERLEFT SQUARE BRACKET EXTENSIONLEFT SQ" + - "UARE BRACKET LOWER CORNERRIGHT SQUARE BRACKET UPPER CORNERRIGHT SQUARE B" + - "RACKET EXTENSIONRIGHT SQUARE BRACKET LOWER CORNERLEFT CURLY BRACKET UPPE" + - "R HOOKLEFT CURLY BRACKET MIDDLE PIECELEFT CURLY BRACKET LOWER HOOKCURLY " + - "BRACKET EXTENSIONRIGHT CURLY BRACKET UPPER HOOKRIGHT CURLY BRACKET MIDDL" + - "E PIECERIGHT CURLY BRACKET LOWER HOOKINTEGRAL EXTENSIONHORIZONTAL LINE E" + - "XTENSIONUPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTIONUPPER RIGHT OR LO" + - "WER LEFT CURLY BRACKET SECTIONSUMMATION TOPSUMMATION BOTTOMTOP SQUARE BR" + - "ACKETBOTTOM SQUARE BRACKETBOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKETR" + - "ADICAL SYMBOL BOTTOMLEFT VERTICAL BOX LINERIGHT VERTICAL BOX LINEHORIZON" + - "TAL SCAN LINE-1HORIZONTAL SCAN LINE-3HORIZONTAL SCAN LINE-7HORIZONTAL SC" + - "AN LINE-9DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHTDENTISTRY SYMBOL L" + - "IGHT VERTICAL AND BOTTOM RIGHTDENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCL" + - "EDENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLEDENTISTRY SYMBOL " + - "LIGHT UP AND HORIZONTAL WITH CIRCLEDENTISTRY SYMBOL LIGHT VERTICAL WITH " + - "TRIANGLEDENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLEDENTISTR" + - "Y SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLEDENTISTRY SYMBOL LIGHT VER" + - "TICAL AND WAVEDENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVEDENTIS" + - "TRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVEDENTISTRY SYMBOL LIGHT DOWN " + - "AND HORIZONTALDENTISTRY SYMBOL LIGHT UP AND HORIZONTALDENTISTRY SYMBOL L" + - "IGHT VERTICAL AND TOP LEFTDENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEF" + - "TSQUARE FOOTRETURN SYMBOLEJECT SYMBOLVERTICAL LINE EXTENSIONMETRICAL BRE" + - "VEMETRICAL LONG OVER SHORTMETRICAL SHORT OVER LONGMETRICAL LONG OVER TWO" + - " SHORTSMETRICAL TWO SHORTS OVER LONGMETRICAL TWO SHORTS JOINEDMETRICAL T" + - "RISEMEMETRICAL TETRASEMEMETRICAL PENTASEMEEARTH GROUNDFUSETOP PARENTHESI" + - "SBOTTOM PARENTHESISTOP CURLY BRACKETBOTTOM CURLY BRACKETTOP TORTOISE SHE" + - "LL BRACKETBOTTOM TORTOISE SHELL BRACKETWHITE TRAPEZIUMBENZENE RING WITH " + - "CIRCLESTRAIGHTNESSFLATNESSAC CURRENTELECTRICAL INTERSECTIONDECIMAL EXPON" + - "ENT SYMBOLBLACK RIGHT-POINTING DOUBLE TRIANGLEBLACK LEFT-POINTING DOUBLE" + - " TRIANGLEBLACK UP-POINTING DOUBLE TRIANGLEBLACK DOWN-POINTING DOUBLE TRI" + - "ANGLEBLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BARBLACK LEFT-PO") + ("" + - "INTING DOUBLE TRIANGLE WITH VERTICAL BARBLACK RIGHT-POINTING TRIANGLE WI" + - "TH DOUBLE VERTICAL BARALARM CLOCKSTOPWATCHTIMER CLOCKHOURGLASS WITH FLOW" + - "ING SANDBLACK MEDIUM LEFT-POINTING TRIANGLEBLACK MEDIUM RIGHT-POINTING T" + - "RIANGLEBLACK MEDIUM UP-POINTING TRIANGLEBLACK MEDIUM DOWN-POINTING TRIAN" + - "GLEDOUBLE VERTICAL BARBLACK SQUARE FOR STOPBLACK CIRCLE FOR RECORDPOWER " + - "SYMBOLPOWER ON-OFF SYMBOLPOWER ON SYMBOLPOWER SLEEP SYMBOLSYMBOL FOR NUL" + - "LSYMBOL FOR START OF HEADINGSYMBOL FOR START OF TEXTSYMBOL FOR END OF TE" + - "XTSYMBOL FOR END OF TRANSMISSIONSYMBOL FOR ENQUIRYSYMBOL FOR ACKNOWLEDGE" + - "SYMBOL FOR BELLSYMBOL FOR BACKSPACESYMBOL FOR HORIZONTAL TABULATIONSYMBO" + - "L FOR LINE FEEDSYMBOL FOR VERTICAL TABULATIONSYMBOL FOR FORM FEEDSYMBOL " + - "FOR CARRIAGE RETURNSYMBOL FOR SHIFT OUTSYMBOL FOR SHIFT INSYMBOL FOR DAT" + - "A LINK ESCAPESYMBOL FOR DEVICE CONTROL ONESYMBOL FOR DEVICE CONTROL TWOS" + - "YMBOL FOR DEVICE CONTROL THREESYMBOL FOR DEVICE CONTROL FOURSYMBOL FOR N" + - "EGATIVE ACKNOWLEDGESYMBOL FOR SYNCHRONOUS IDLESYMBOL FOR END OF TRANSMIS" + - "SION BLOCKSYMBOL FOR CANCELSYMBOL FOR END OF MEDIUMSYMBOL FOR SUBSTITUTE" + - "SYMBOL FOR ESCAPESYMBOL FOR FILE SEPARATORSYMBOL FOR GROUP SEPARATORSYMB" + - "OL FOR RECORD SEPARATORSYMBOL FOR UNIT SEPARATORSYMBOL FOR SPACESYMBOL F" + - "OR DELETEBLANK SYMBOLOPEN BOXSYMBOL FOR NEWLINESYMBOL FOR DELETE FORM TW" + - "OSYMBOL FOR SUBSTITUTE FORM TWOOCR HOOKOCR CHAIROCR FORKOCR INVERTED FOR" + - "KOCR BELT BUCKLEOCR BOW TIEOCR BRANCH BANK IDENTIFICATIONOCR AMOUNT OF C" + - "HECKOCR DASHOCR CUSTOMER ACCOUNT NUMBEROCR DOUBLE BACKSLASHCIRCLED DIGIT" + - " ONECIRCLED DIGIT TWOCIRCLED DIGIT THREECIRCLED DIGIT FOURCIRCLED DIGIT " + - "FIVECIRCLED DIGIT SIXCIRCLED DIGIT SEVENCIRCLED DIGIT EIGHTCIRCLED DIGIT" + - " NINECIRCLED NUMBER TENCIRCLED NUMBER ELEVENCIRCLED NUMBER TWELVECIRCLED" + - " NUMBER THIRTEENCIRCLED NUMBER FOURTEENCIRCLED NUMBER FIFTEENCIRCLED NUM" + - "BER SIXTEENCIRCLED NUMBER SEVENTEENCIRCLED NUMBER EIGHTEENCIRCLED NUMBER" + - " NINETEENCIRCLED NUMBER TWENTYPARENTHESIZED DIGIT ONEPARENTHESIZED DIGIT" + - " TWOPARENTHESIZED DIGIT THREEPARENTHESIZED DIGIT FOURPARENTHESIZED DIGIT" + - " FIVEPARENTHESIZED DIGIT SIXPARENTHESIZED DIGIT SEVENPARENTHESIZED DIGIT" + - " EIGHTPARENTHESIZED DIGIT NINEPARENTHESIZED NUMBER TENPARENTHESIZED NUMB" + - "ER ELEVENPARENTHESIZED NUMBER TWELVEPARENTHESIZED NUMBER THIRTEENPARENTH" + - "ESIZED NUMBER FOURTEENPARENTHESIZED NUMBER FIFTEENPARENTHESIZED NUMBER S" + - "IXTEENPARENTHESIZED NUMBER SEVENTEENPARENTHESIZED NUMBER EIGHTEENPARENTH" + - "ESIZED NUMBER NINETEENPARENTHESIZED NUMBER TWENTYDIGIT ONE FULL STOPDIGI" + - "T TWO FULL STOPDIGIT THREE FULL STOPDIGIT FOUR FULL STOPDIGIT FIVE FULL " + - "STOPDIGIT SIX FULL STOPDIGIT SEVEN FULL STOPDIGIT EIGHT FULL STOPDIGIT N" + - "INE FULL STOPNUMBER TEN FULL STOPNUMBER ELEVEN FULL STOPNUMBER TWELVE FU" + - "LL STOPNUMBER THIRTEEN FULL STOPNUMBER FOURTEEN FULL STOPNUMBER FIFTEEN " + - "FULL STOPNUMBER SIXTEEN FULL STOPNUMBER SEVENTEEN FULL STOPNUMBER EIGHTE" + - "EN FULL STOPNUMBER NINETEEN FULL STOPNUMBER TWENTY FULL STOPPARENTHESIZE" + - "D LATIN SMALL LETTER APARENTHESIZED LATIN SMALL LETTER BPARENTHESIZED LA" + - "TIN SMALL LETTER CPARENTHESIZED LATIN SMALL LETTER DPARENTHESIZED LATIN " + - "SMALL LETTER EPARENTHESIZED LATIN SMALL LETTER FPARENTHESIZED LATIN SMAL" + - "L LETTER GPARENTHESIZED LATIN SMALL LETTER HPARENTHESIZED LATIN SMALL LE" + - "TTER IPARENTHESIZED LATIN SMALL LETTER JPARENTHESIZED LATIN SMALL LETTER" + - " KPARENTHESIZED LATIN SMALL LETTER LPARENTHESIZED LATIN SMALL LETTER MPA" + - "RENTHESIZED LATIN SMALL LETTER NPARENTHESIZED LATIN SMALL LETTER OPARENT" + - "HESIZED LATIN SMALL LETTER PPARENTHESIZED LATIN SMALL LETTER QPARENTHESI" + - "ZED LATIN SMALL LETTER RPARENTHESIZED LATIN SMALL LETTER SPARENTHESIZED " + - "LATIN SMALL LETTER TPARENTHESIZED LATIN SMALL LETTER UPARENTHESIZED LATI" + - "N SMALL LETTER VPARENTHESIZED LATIN SMALL LETTER WPARENTHESIZED LATIN SM" + - "ALL LETTER XPARENTHESIZED LATIN SMALL LETTER YPARENTHESIZED LATIN SMALL " + - "LETTER ZCIRCLED LATIN CAPITAL LETTER ACIRCLED LATIN CAPITAL LETTER BCIRC" + - "LED LATIN CAPITAL LETTER CCIRCLED LATIN CAPITAL LETTER DCIRCLED LATIN CA" + - "PITAL LETTER ECIRCLED LATIN CAPITAL LETTER FCIRCLED LATIN CAPITAL LETTER" + - " GCIRCLED LATIN CAPITAL LETTER HCIRCLED LATIN CAPITAL LETTER ICIRCLED LA" + - "TIN CAPITAL LETTER JCIRCLED LATIN CAPITAL LETTER KCIRCLED LATIN CAPITAL " + - "LETTER LCIRCLED LATIN CAPITAL LETTER MCIRCLED LATIN CAPITAL LETTER NCIRC" + - "LED LATIN CAPITAL LETTER OCIRCLED LATIN CAPITAL LETTER PCIRCLED LATIN CA" + - "PITAL LETTER QCIRCLED LATIN CAPITAL LETTER RCIRCLED LATIN CAPITAL LETTER" + - " SCIRCLED LATIN CAPITAL LETTER TCIRCLED LATIN CAPITAL LETTER UCIRCLED LA" + - "TIN CAPITAL LETTER VCIRCLED LATIN CAPITAL LETTER WCIRCLED LATIN CAPITAL " + - "LETTER XCIRCLED LATIN CAPITAL LETTER YCIRCLED LATIN CAPITAL LETTER ZCIRC" + - "LED LATIN SMALL LETTER ACIRCLED LATIN SMALL LETTER BCIRCLED LATIN SMALL ") + ("" + - "LETTER CCIRCLED LATIN SMALL LETTER DCIRCLED LATIN SMALL LETTER ECIRCLED " + - "LATIN SMALL LETTER FCIRCLED LATIN SMALL LETTER GCIRCLED LATIN SMALL LETT" + - "ER HCIRCLED LATIN SMALL LETTER ICIRCLED LATIN SMALL LETTER JCIRCLED LATI" + - "N SMALL LETTER KCIRCLED LATIN SMALL LETTER LCIRCLED LATIN SMALL LETTER M" + - "CIRCLED LATIN SMALL LETTER NCIRCLED LATIN SMALL LETTER OCIRCLED LATIN SM" + - "ALL LETTER PCIRCLED LATIN SMALL LETTER QCIRCLED LATIN SMALL LETTER RCIRC" + - "LED LATIN SMALL LETTER SCIRCLED LATIN SMALL LETTER TCIRCLED LATIN SMALL " + - "LETTER UCIRCLED LATIN SMALL LETTER VCIRCLED LATIN SMALL LETTER WCIRCLED " + - "LATIN SMALL LETTER XCIRCLED LATIN SMALL LETTER YCIRCLED LATIN SMALL LETT" + - "ER ZCIRCLED DIGIT ZERONEGATIVE CIRCLED NUMBER ELEVENNEGATIVE CIRCLED NUM" + - "BER TWELVENEGATIVE CIRCLED NUMBER THIRTEENNEGATIVE CIRCLED NUMBER FOURTE" + - "ENNEGATIVE CIRCLED NUMBER FIFTEENNEGATIVE CIRCLED NUMBER SIXTEENNEGATIVE" + - " CIRCLED NUMBER SEVENTEENNEGATIVE CIRCLED NUMBER EIGHTEENNEGATIVE CIRCLE" + - "D NUMBER NINETEENNEGATIVE CIRCLED NUMBER TWENTYDOUBLE CIRCLED DIGIT ONED" + - "OUBLE CIRCLED DIGIT TWODOUBLE CIRCLED DIGIT THREEDOUBLE CIRCLED DIGIT FO" + - "URDOUBLE CIRCLED DIGIT FIVEDOUBLE CIRCLED DIGIT SIXDOUBLE CIRCLED DIGIT " + - "SEVENDOUBLE CIRCLED DIGIT EIGHTDOUBLE CIRCLED DIGIT NINEDOUBLE CIRCLED N" + - "UMBER TENNEGATIVE CIRCLED DIGIT ZEROBOX DRAWINGS LIGHT HORIZONTALBOX DRA" + - "WINGS HEAVY HORIZONTALBOX DRAWINGS LIGHT VERTICALBOX DRAWINGS HEAVY VERT" + - "ICALBOX DRAWINGS LIGHT TRIPLE DASH HORIZONTALBOX DRAWINGS HEAVY TRIPLE D" + - "ASH HORIZONTALBOX DRAWINGS LIGHT TRIPLE DASH VERTICALBOX DRAWINGS HEAVY " + - "TRIPLE DASH VERTICALBOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTALBOX DRAW" + - "INGS HEAVY QUADRUPLE DASH HORIZONTALBOX DRAWINGS LIGHT QUADRUPLE DASH VE" + - "RTICALBOX DRAWINGS HEAVY QUADRUPLE DASH VERTICALBOX DRAWINGS LIGHT DOWN " + - "AND RIGHTBOX DRAWINGS DOWN LIGHT AND RIGHT HEAVYBOX DRAWINGS DOWN HEAVY " + - "AND RIGHT LIGHTBOX DRAWINGS HEAVY DOWN AND RIGHTBOX DRAWINGS LIGHT DOWN " + - "AND LEFTBOX DRAWINGS DOWN LIGHT AND LEFT HEAVYBOX DRAWINGS DOWN HEAVY AN" + - "D LEFT LIGHTBOX DRAWINGS HEAVY DOWN AND LEFTBOX DRAWINGS LIGHT UP AND RI" + - "GHTBOX DRAWINGS UP LIGHT AND RIGHT HEAVYBOX DRAWINGS UP HEAVY AND RIGHT " + - "LIGHTBOX DRAWINGS HEAVY UP AND RIGHTBOX DRAWINGS LIGHT UP AND LEFTBOX DR" + - "AWINGS UP LIGHT AND LEFT HEAVYBOX DRAWINGS UP HEAVY AND LEFT LIGHTBOX DR" + - "AWINGS HEAVY UP AND LEFTBOX DRAWINGS LIGHT VERTICAL AND RIGHTBOX DRAWING" + - "S VERTICAL LIGHT AND RIGHT HEAVYBOX DRAWINGS UP HEAVY AND RIGHT DOWN LIG" + - "HTBOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHTBOX DRAWINGS VERTICAL HEAVY " + - "AND RIGHT LIGHTBOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVYBOX DRAWINGS UP" + - " LIGHT AND RIGHT DOWN HEAVYBOX DRAWINGS HEAVY VERTICAL AND RIGHTBOX DRAW" + - "INGS LIGHT VERTICAL AND LEFTBOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVYBO" + - "X DRAWINGS UP HEAVY AND LEFT DOWN LIGHTBOX DRAWINGS DOWN HEAVY AND LEFT " + - "UP LIGHTBOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHTBOX DRAWINGS DOWN LIGH" + - "T AND LEFT UP HEAVYBOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVYBOX DRAWINGS" + - " HEAVY VERTICAL AND LEFTBOX DRAWINGS LIGHT DOWN AND HORIZONTALBOX DRAWIN" + - "GS LEFT HEAVY AND RIGHT DOWN LIGHTBOX DRAWINGS RIGHT HEAVY AND LEFT DOWN" + - " LIGHTBOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVYBOX DRAWINGS DOWN HEAV" + - "Y AND HORIZONTAL LIGHTBOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVYBOX DR" + - "AWINGS LEFT LIGHT AND RIGHT DOWN HEAVYBOX DRAWINGS HEAVY DOWN AND HORIZO" + - "NTALBOX DRAWINGS LIGHT UP AND HORIZONTALBOX DRAWINGS LEFT HEAVY AND RIGH" + - "T UP LIGHTBOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHTBOX DRAWINGS UP LIGH" + - "T AND HORIZONTAL HEAVYBOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHTBOX DRAW" + - "INGS RIGHT LIGHT AND LEFT UP HEAVYBOX DRAWINGS LEFT LIGHT AND RIGHT UP H" + - "EAVYBOX DRAWINGS HEAVY UP AND HORIZONTALBOX DRAWINGS LIGHT VERTICAL AND " + - "HORIZONTALBOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHTBOX DRAWINGS R" + - "IGHT HEAVY AND LEFT VERTICAL LIGHTBOX DRAWINGS VERTICAL LIGHT AND HORIZO" + - "NTAL HEAVYBOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHTBOX DRAWINGS DO" + - "WN HEAVY AND UP HORIZONTAL LIGHTBOX DRAWINGS VERTICAL HEAVY AND HORIZONT" + - "AL LIGHTBOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHTBOX DRAWINGS RIGH" + - "T UP HEAVY AND LEFT DOWN LIGHTBOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP " + - "LIGHTBOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHTBOX DRAWINGS DOWN LI" + - "GHT AND UP HORIZONTAL HEAVYBOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEA" + - "VYBOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVYBOX DRAWINGS LEFT LIGH" + - "T AND RIGHT VERTICAL HEAVYBOX DRAWINGS HEAVY VERTICAL AND HORIZONTALBOX " + - "DRAWINGS LIGHT DOUBLE DASH HORIZONTALBOX DRAWINGS HEAVY DOUBLE DASH HORI" + - "ZONTALBOX DRAWINGS LIGHT DOUBLE DASH VERTICALBOX DRAWINGS HEAVY DOUBLE D" + - "ASH VERTICALBOX DRAWINGS DOUBLE HORIZONTALBOX DRAWINGS DOUBLE VERTICALBO" + - "X DRAWINGS DOWN SINGLE AND RIGHT DOUBLEBOX DRAWINGS DOWN DOUBLE AND RIGH") + ("" + - "T SINGLEBOX DRAWINGS DOUBLE DOWN AND RIGHTBOX DRAWINGS DOWN SINGLE AND L" + - "EFT DOUBLEBOX DRAWINGS DOWN DOUBLE AND LEFT SINGLEBOX DRAWINGS DOUBLE DO" + - "WN AND LEFTBOX DRAWINGS UP SINGLE AND RIGHT DOUBLEBOX DRAWINGS UP DOUBLE" + - " AND RIGHT SINGLEBOX DRAWINGS DOUBLE UP AND RIGHTBOX DRAWINGS UP SINGLE " + - "AND LEFT DOUBLEBOX DRAWINGS UP DOUBLE AND LEFT SINGLEBOX DRAWINGS DOUBLE" + - " UP AND LEFTBOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLEBOX DRAWINGS VE" + - "RTICAL DOUBLE AND RIGHT SINGLEBOX DRAWINGS DOUBLE VERTICAL AND RIGHTBOX " + - "DRAWINGS VERTICAL SINGLE AND LEFT DOUBLEBOX DRAWINGS VERTICAL DOUBLE AND" + - " LEFT SINGLEBOX DRAWINGS DOUBLE VERTICAL AND LEFTBOX DRAWINGS DOWN SINGL" + - "E AND HORIZONTAL DOUBLEBOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLEBOX" + - " DRAWINGS DOUBLE DOWN AND HORIZONTALBOX DRAWINGS UP SINGLE AND HORIZONTA" + - "L DOUBLEBOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLEBOX DRAWINGS DOUBLE " + - "UP AND HORIZONTALBOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLEBOX D" + - "RAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLEBOX DRAWINGS DOUBLE VERTICA" + - "L AND HORIZONTALBOX DRAWINGS LIGHT ARC DOWN AND RIGHTBOX DRAWINGS LIGHT " + - "ARC DOWN AND LEFTBOX DRAWINGS LIGHT ARC UP AND LEFTBOX DRAWINGS LIGHT AR" + - "C UP AND RIGHTBOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFTBOX D" + - "RAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHTBOX DRAWINGS LIGHT DIAGO" + - "NAL CROSSBOX DRAWINGS LIGHT LEFTBOX DRAWINGS LIGHT UPBOX DRAWINGS LIGHT " + - "RIGHTBOX DRAWINGS LIGHT DOWNBOX DRAWINGS HEAVY LEFTBOX DRAWINGS HEAVY UP" + - "BOX DRAWINGS HEAVY RIGHTBOX DRAWINGS HEAVY DOWNBOX DRAWINGS LIGHT LEFT A" + - "ND HEAVY RIGHTBOX DRAWINGS LIGHT UP AND HEAVY DOWNBOX DRAWINGS HEAVY LEF" + - "T AND LIGHT RIGHTBOX DRAWINGS HEAVY UP AND LIGHT DOWNUPPER HALF BLOCKLOW" + - "ER ONE EIGHTH BLOCKLOWER ONE QUARTER BLOCKLOWER THREE EIGHTHS BLOCKLOWER" + - " HALF BLOCKLOWER FIVE EIGHTHS BLOCKLOWER THREE QUARTERS BLOCKLOWER SEVEN" + - " EIGHTHS BLOCKFULL BLOCKLEFT SEVEN EIGHTHS BLOCKLEFT THREE QUARTERS BLOC" + - "KLEFT FIVE EIGHTHS BLOCKLEFT HALF BLOCKLEFT THREE EIGHTHS BLOCKLEFT ONE " + - "QUARTER BLOCKLEFT ONE EIGHTH BLOCKRIGHT HALF BLOCKLIGHT SHADEMEDIUM SHAD" + - "EDARK SHADEUPPER ONE EIGHTH BLOCKRIGHT ONE EIGHTH BLOCKQUADRANT LOWER LE" + - "FTQUADRANT LOWER RIGHTQUADRANT UPPER LEFTQUADRANT UPPER LEFT AND LOWER L" + - "EFT AND LOWER RIGHTQUADRANT UPPER LEFT AND LOWER RIGHTQUADRANT UPPER LEF" + - "T AND UPPER RIGHT AND LOWER LEFTQUADRANT UPPER LEFT AND UPPER RIGHT AND " + - "LOWER RIGHTQUADRANT UPPER RIGHTQUADRANT UPPER RIGHT AND LOWER LEFTQUADRA" + - "NT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHTBLACK SQUAREWHITE SQUAREWHI" + - "TE SQUARE WITH ROUNDED CORNERSWHITE SQUARE CONTAINING BLACK SMALL SQUARE" + - "SQUARE WITH HORIZONTAL FILLSQUARE WITH VERTICAL FILLSQUARE WITH ORTHOGON" + - "AL CROSSHATCH FILLSQUARE WITH UPPER LEFT TO LOWER RIGHT FILLSQUARE WITH " + - "UPPER RIGHT TO LOWER LEFT FILLSQUARE WITH DIAGONAL CROSSHATCH FILLBLACK " + - "SMALL SQUAREWHITE SMALL SQUAREBLACK RECTANGLEWHITE RECTANGLEBLACK VERTIC" + - "AL RECTANGLEWHITE VERTICAL RECTANGLEBLACK PARALLELOGRAMWHITE PARALLELOGR" + - "AMBLACK UP-POINTING TRIANGLEWHITE UP-POINTING TRIANGLEBLACK UP-POINTING " + - "SMALL TRIANGLEWHITE UP-POINTING SMALL TRIANGLEBLACK RIGHT-POINTING TRIAN" + - "GLEWHITE RIGHT-POINTING TRIANGLEBLACK RIGHT-POINTING SMALL TRIANGLEWHITE" + - " RIGHT-POINTING SMALL TRIANGLEBLACK RIGHT-POINTING POINTERWHITE RIGHT-PO" + - "INTING POINTERBLACK DOWN-POINTING TRIANGLEWHITE DOWN-POINTING TRIANGLEBL" + - "ACK DOWN-POINTING SMALL TRIANGLEWHITE DOWN-POINTING SMALL TRIANGLEBLACK " + - "LEFT-POINTING TRIANGLEWHITE LEFT-POINTING TRIANGLEBLACK LEFT-POINTING SM" + - "ALL TRIANGLEWHITE LEFT-POINTING SMALL TRIANGLEBLACK LEFT-POINTING POINTE" + - "RWHITE LEFT-POINTING POINTERBLACK DIAMONDWHITE DIAMONDWHITE DIAMOND CONT" + - "AINING BLACK SMALL DIAMONDFISHEYELOZENGEWHITE CIRCLEDOTTED CIRCLECIRCLE " + - "WITH VERTICAL FILLBULLSEYEBLACK CIRCLECIRCLE WITH LEFT HALF BLACKCIRCLE " + - "WITH RIGHT HALF BLACKCIRCLE WITH LOWER HALF BLACKCIRCLE WITH UPPER HALF " + - "BLACKCIRCLE WITH UPPER RIGHT QUADRANT BLACKCIRCLE WITH ALL BUT UPPER LEF" + - "T QUADRANT BLACKLEFT HALF BLACK CIRCLERIGHT HALF BLACK CIRCLEINVERSE BUL" + - "LETINVERSE WHITE CIRCLEUPPER HALF INVERSE WHITE CIRCLELOWER HALF INVERSE" + - " WHITE CIRCLEUPPER LEFT QUADRANT CIRCULAR ARCUPPER RIGHT QUADRANT CIRCUL" + - "AR ARCLOWER RIGHT QUADRANT CIRCULAR ARCLOWER LEFT QUADRANT CIRCULAR ARCU" + - "PPER HALF CIRCLELOWER HALF CIRCLEBLACK LOWER RIGHT TRIANGLEBLACK LOWER L" + - "EFT TRIANGLEBLACK UPPER LEFT TRIANGLEBLACK UPPER RIGHT TRIANGLEWHITE BUL" + - "LETSQUARE WITH LEFT HALF BLACKSQUARE WITH RIGHT HALF BLACKSQUARE WITH UP" + - "PER LEFT DIAGONAL HALF BLACKSQUARE WITH LOWER RIGHT DIAGONAL HALF BLACKW" + - "HITE SQUARE WITH VERTICAL BISECTING LINEWHITE UP-POINTING TRIANGLE WITH " + - "DOTUP-POINTING TRIANGLE WITH LEFT HALF BLACKUP-POINTING TRIANGLE WITH RI" + - "GHT HALF BLACKLARGE CIRCLEWHITE SQUARE WITH UPPER LEFT QUADRANTWHITE SQU") + ("" + - "ARE WITH LOWER LEFT QUADRANTWHITE SQUARE WITH LOWER RIGHT QUADRANTWHITE " + - "SQUARE WITH UPPER RIGHT QUADRANTWHITE CIRCLE WITH UPPER LEFT QUADRANTWHI" + - "TE CIRCLE WITH LOWER LEFT QUADRANTWHITE CIRCLE WITH LOWER RIGHT QUADRANT" + - "WHITE CIRCLE WITH UPPER RIGHT QUADRANTUPPER LEFT TRIANGLEUPPER RIGHT TRI" + - "ANGLELOWER LEFT TRIANGLEWHITE MEDIUM SQUAREBLACK MEDIUM SQUAREWHITE MEDI" + - "UM SMALL SQUAREBLACK MEDIUM SMALL SQUARELOWER RIGHT TRIANGLEBLACK SUN WI" + - "TH RAYSCLOUDUMBRELLASNOWMANCOMETBLACK STARWHITE STARLIGHTNINGTHUNDERSTOR" + - "MSUNASCENDING NODEDESCENDING NODECONJUNCTIONOPPOSITIONBLACK TELEPHONEWHI" + - "TE TELEPHONEBALLOT BOXBALLOT BOX WITH CHECKBALLOT BOX WITH XSALTIREUMBRE" + - "LLA WITH RAIN DROPSHOT BEVERAGEWHITE SHOGI PIECEBLACK SHOGI PIECESHAMROC" + - "KREVERSED ROTATED FLORAL HEART BULLETBLACK LEFT POINTING INDEXBLACK RIGH" + - "T POINTING INDEXWHITE LEFT POINTING INDEXWHITE UP POINTING INDEXWHITE RI" + - "GHT POINTING INDEXWHITE DOWN POINTING INDEXSKULL AND CROSSBONESCAUTION S" + - "IGNRADIOACTIVE SIGNBIOHAZARD SIGNCADUCEUSANKHORTHODOX CROSSCHI RHOCROSS " + - "OF LORRAINECROSS OF JERUSALEMSTAR AND CRESCENTFARSI SYMBOLADI SHAKTIHAMM" + - "ER AND SICKLEPEACE SYMBOLYIN YANGTRIGRAM FOR HEAVENTRIGRAM FOR LAKETRIGR" + - "AM FOR FIRETRIGRAM FOR THUNDERTRIGRAM FOR WINDTRIGRAM FOR WATERTRIGRAM F" + - "OR MOUNTAINTRIGRAM FOR EARTHWHEEL OF DHARMAWHITE FROWNING FACEWHITE SMIL" + - "ING FACEBLACK SMILING FACEWHITE SUN WITH RAYSFIRST QUARTER MOONLAST QUAR" + - "TER MOONMERCURYFEMALE SIGNEARTHMALE SIGNJUPITERSATURNURANUSNEPTUNEPLUTOA" + - "RIESTAURUSGEMINICANCERLEOVIRGOLIBRASCORPIUSSAGITTARIUSCAPRICORNAQUARIUSP" + - "ISCESWHITE CHESS KINGWHITE CHESS QUEENWHITE CHESS ROOKWHITE CHESS BISHOP" + - "WHITE CHESS KNIGHTWHITE CHESS PAWNBLACK CHESS KINGBLACK CHESS QUEENBLACK" + - " CHESS ROOKBLACK CHESS BISHOPBLACK CHESS KNIGHTBLACK CHESS PAWNBLACK SPA" + - "DE SUITWHITE HEART SUITWHITE DIAMOND SUITBLACK CLUB SUITWHITE SPADE SUIT" + - "BLACK HEART SUITBLACK DIAMOND SUITWHITE CLUB SUITHOT SPRINGSQUARTER NOTE" + - "EIGHTH NOTEBEAMED EIGHTH NOTESBEAMED SIXTEENTH NOTESMUSIC FLAT SIGNMUSIC" + - " NATURAL SIGNMUSIC SHARP SIGNWEST SYRIAC CROSSEAST SYRIAC CROSSUNIVERSAL" + - " RECYCLING SYMBOLRECYCLING SYMBOL FOR TYPE-1 PLASTICSRECYCLING SYMBOL FO" + - "R TYPE-2 PLASTICSRECYCLING SYMBOL FOR TYPE-3 PLASTICSRECYCLING SYMBOL FO" + - "R TYPE-4 PLASTICSRECYCLING SYMBOL FOR TYPE-5 PLASTICSRECYCLING SYMBOL FO" + - "R TYPE-6 PLASTICSRECYCLING SYMBOL FOR TYPE-7 PLASTICSRECYCLING SYMBOL FO" + - "R GENERIC MATERIALSBLACK UNIVERSAL RECYCLING SYMBOLRECYCLED PAPER SYMBOL" + - "PARTIALLY-RECYCLED PAPER SYMBOLPERMANENT PAPER SIGNWHEELCHAIR SYMBOLDIE " + - "FACE-1DIE FACE-2DIE FACE-3DIE FACE-4DIE FACE-5DIE FACE-6WHITE CIRCLE WIT" + - "H DOT RIGHTWHITE CIRCLE WITH TWO DOTSBLACK CIRCLE WITH WHITE DOT RIGHTBL" + - "ACK CIRCLE WITH TWO WHITE DOTSMONOGRAM FOR YANGMONOGRAM FOR YINDIGRAM FO" + - "R GREATER YANGDIGRAM FOR LESSER YINDIGRAM FOR LESSER YANGDIGRAM FOR GREA" + - "TER YINWHITE FLAGBLACK FLAGHAMMER AND PICKANCHORCROSSED SWORDSSTAFF OF A" + - "ESCULAPIUSSCALESALEMBICFLOWERGEARSTAFF OF HERMESATOM SYMBOLFLEUR-DE-LISO" + - "UTLINED WHITE STARTHREE LINES CONVERGING RIGHTTHREE LINES CONVERGING LEF" + - "TWARNING SIGNHIGH VOLTAGE SIGNDOUBLED FEMALE SIGNDOUBLED MALE SIGNINTERL" + - "OCKED FEMALE AND MALE SIGNMALE AND FEMALE SIGNMALE WITH STROKE SIGNMALE " + - "WITH STROKE AND MALE AND FEMALE SIGNVERTICAL MALE WITH STROKE SIGNHORIZO" + - "NTAL MALE WITH STROKE SIGNMEDIUM WHITE CIRCLEMEDIUM BLACK CIRCLEMEDIUM S" + - "MALL WHITE CIRCLEMARRIAGE SYMBOLDIVORCE SYMBOLUNMARRIED PARTNERSHIP SYMB" + - "OLCOFFINFUNERAL URNNEUTERCERESPALLASJUNOVESTACHIRONBLACK MOON LILITHSEXT" + - "ILESEMISEXTILEQUINCUNXSESQUIQUADRATESOCCER BALLBASEBALLSQUARED KEYWHITE " + - "DRAUGHTS MANWHITE DRAUGHTS KINGBLACK DRAUGHTS MANBLACK DRAUGHTS KINGSNOW" + - "MAN WITHOUT SNOWSUN BEHIND CLOUDRAINBLACK SNOWMANTHUNDER CLOUD AND RAINT" + - "URNED WHITE SHOGI PIECETURNED BLACK SHOGI PIECEWHITE DIAMOND IN SQUARECR" + - "OSSING LANESDISABLED CAROPHIUCHUSPICKCAR SLIDINGHELMET WITH WHITE CROSSC" + - "IRCLED CROSSING LANESCHAINSNO ENTRYALTERNATE ONE-WAY LEFT WAY TRAFFICBLA" + - "CK TWO-WAY LEFT WAY TRAFFICWHITE TWO-WAY LEFT WAY TRAFFICBLACK LEFT LANE" + - " MERGEWHITE LEFT LANE MERGEDRIVE SLOW SIGNHEAVY WHITE DOWN-POINTING TRIA" + - "NGLELEFT CLOSED ENTRYSQUARED SALTIREFALLING DIAGONAL IN WHITE CIRCLE IN " + - "BLACK SQUAREBLACK TRUCKRESTRICTED LEFT ENTRY-1RESTRICTED LEFT ENTRY-2AST" + - "RONOMICAL SYMBOL FOR URANUSHEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVEPE" + - "NTAGRAMRIGHT-HANDED INTERLACED PENTAGRAMLEFT-HANDED INTERLACED PENTAGRAM" + - "INVERTED PENTAGRAMBLACK CROSS ON SHIELDSHINTO SHRINECHURCHCASTLEHISTORIC" + - " SITEGEAR WITHOUT HUBGEAR WITH HANDLESMAP SYMBOL FOR LIGHTHOUSEMOUNTAINU" + - "MBRELLA ON GROUNDFOUNTAINFLAG IN HOLEFERRYSAILBOATSQUARE FOUR CORNERSSKI" + - "ERICE SKATEPERSON WITH BALLTENTJAPANESE BANK SYMBOLHEADSTONE GRAVEYARD S" + - "YMBOLFUEL PUMPCUP ON BLACK SQUAREWHITE FLAG WITH HORIZONTAL MIDDLE BLACK") + ("" + - " STRIPEBLACK SAFETY SCISSORSUPPER BLADE SCISSORSBLACK SCISSORSLOWER BLAD" + - "E SCISSORSWHITE SCISSORSWHITE HEAVY CHECK MARKTELEPHONE LOCATION SIGNTAP" + - "E DRIVEAIRPLANEENVELOPERAISED FISTRAISED HANDVICTORY HANDWRITING HANDLOW" + - "ER RIGHT PENCILPENCILUPPER RIGHT PENCILWHITE NIBBLACK NIBCHECK MARKHEAVY" + - " CHECK MARKMULTIPLICATION XHEAVY MULTIPLICATION XBALLOT XHEAVY BALLOT XO" + - "UTLINED GREEK CROSSHEAVY GREEK CROSSOPEN CENTRE CROSSHEAVY OPEN CENTRE C" + - "ROSSLATIN CROSSSHADOWED WHITE LATIN CROSSOUTLINED LATIN CROSSMALTESE CRO" + - "SSSTAR OF DAVIDFOUR TEARDROP-SPOKED ASTERISKFOUR BALLOON-SPOKED ASTERISK" + - "HEAVY FOUR BALLOON-SPOKED ASTERISKFOUR CLUB-SPOKED ASTERISKBLACK FOUR PO" + - "INTED STARWHITE FOUR POINTED STARSPARKLESSTRESS OUTLINED WHITE STARCIRCL" + - "ED WHITE STAROPEN CENTRE BLACK STARBLACK CENTRE WHITE STAROUTLINED BLACK" + - " STARHEAVY OUTLINED BLACK STARPINWHEEL STARSHADOWED WHITE STARHEAVY ASTE" + - "RISKOPEN CENTRE ASTERISKEIGHT SPOKED ASTERISKEIGHT POINTED BLACK STAREIG" + - "HT POINTED PINWHEEL STARSIX POINTED BLACK STAREIGHT POINTED RECTILINEAR " + - "BLACK STARHEAVY EIGHT POINTED RECTILINEAR BLACK STARTWELVE POINTED BLACK" + - " STARSIXTEEN POINTED ASTERISKTEARDROP-SPOKED ASTERISKOPEN CENTRE TEARDRO" + - "P-SPOKED ASTERISKHEAVY TEARDROP-SPOKED ASTERISKSIX PETALLED BLACK AND WH" + - "ITE FLORETTEBLACK FLORETTEWHITE FLORETTEEIGHT PETALLED OUTLINED BLACK FL" + - "ORETTECIRCLED OPEN CENTRE EIGHT POINTED STARHEAVY TEARDROP-SPOKED PINWHE" + - "EL ASTERISKSNOWFLAKETIGHT TRIFOLIATE SNOWFLAKEHEAVY CHEVRON SNOWFLAKESPA" + - "RKLEHEAVY SPARKLEBALLOON-SPOKED ASTERISKEIGHT TEARDROP-SPOKED PROPELLER " + - "ASTERISKHEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISKCROSS MARKSHADOWED" + - " WHITE CIRCLENEGATIVE SQUARED CROSS MARKLOWER RIGHT DROP-SHADOWED WHITE " + - "SQUAREUPPER RIGHT DROP-SHADOWED WHITE SQUARELOWER RIGHT SHADOWED WHITE S" + - "QUAREUPPER RIGHT SHADOWED WHITE SQUAREBLACK QUESTION MARK ORNAMENTWHITE " + - "QUESTION MARK ORNAMENTWHITE EXCLAMATION MARK ORNAMENTBLACK DIAMOND MINUS" + - " WHITE XHEAVY EXCLAMATION MARK SYMBOLLIGHT VERTICAL BARMEDIUM VERTICAL B" + - "ARHEAVY VERTICAL BARHEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENTHEA" + - "VY SINGLE COMMA QUOTATION MARK ORNAMENTHEAVY DOUBLE TURNED COMMA QUOTATI" + - "ON MARK ORNAMENTHEAVY DOUBLE COMMA QUOTATION MARK ORNAMENTHEAVY LOW SING" + - "LE COMMA QUOTATION MARK ORNAMENTHEAVY LOW DOUBLE COMMA QUOTATION MARK OR" + - "NAMENTCURVED STEM PARAGRAPH SIGN ORNAMENTHEAVY EXCLAMATION MARK ORNAMENT" + - "HEAVY HEART EXCLAMATION MARK ORNAMENTHEAVY BLACK HEARTROTATED HEAVY BLAC" + - "K HEART BULLETFLORAL HEARTROTATED FLORAL HEART BULLETMEDIUM LEFT PARENTH" + - "ESIS ORNAMENTMEDIUM RIGHT PARENTHESIS ORNAMENTMEDIUM FLATTENED LEFT PARE" + - "NTHESIS ORNAMENTMEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENTMEDIUM LEFT-P" + - "OINTING ANGLE BRACKET ORNAMENTMEDIUM RIGHT-POINTING ANGLE BRACKET ORNAME" + - "NTHEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENTHEAVY RIGHT-POINTING " + - "ANGLE QUOTATION MARK ORNAMENTHEAVY LEFT-POINTING ANGLE BRACKET ORNAMENTH" + - "EAVY RIGHT-POINTING ANGLE BRACKET ORNAMENTLIGHT LEFT TORTOISE SHELL BRAC" + - "KET ORNAMENTLIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENTMEDIUM LEFT CURLY" + - " BRACKET ORNAMENTMEDIUM RIGHT CURLY BRACKET ORNAMENTDINGBAT NEGATIVE CIR" + - "CLED DIGIT ONEDINGBAT NEGATIVE CIRCLED DIGIT TWODINGBAT NEGATIVE CIRCLED" + - " DIGIT THREEDINGBAT NEGATIVE CIRCLED DIGIT FOURDINGBAT NEGATIVE CIRCLED " + - "DIGIT FIVEDINGBAT NEGATIVE CIRCLED DIGIT SIXDINGBAT NEGATIVE CIRCLED DIG" + - "IT SEVENDINGBAT NEGATIVE CIRCLED DIGIT EIGHTDINGBAT NEGATIVE CIRCLED DIG" + - "IT NINEDINGBAT NEGATIVE CIRCLED NUMBER TENDINGBAT CIRCLED SANS-SERIF DIG" + - "IT ONEDINGBAT CIRCLED SANS-SERIF DIGIT TWODINGBAT CIRCLED SANS-SERIF DIG" + - "IT THREEDINGBAT CIRCLED SANS-SERIF DIGIT FOURDINGBAT CIRCLED SANS-SERIF " + - "DIGIT FIVEDINGBAT CIRCLED SANS-SERIF DIGIT SIXDINGBAT CIRCLED SANS-SERIF" + - " DIGIT SEVENDINGBAT CIRCLED SANS-SERIF DIGIT EIGHTDINGBAT CIRCLED SANS-S" + - "ERIF DIGIT NINEDINGBAT CIRCLED SANS-SERIF NUMBER TENDINGBAT NEGATIVE CIR" + - "CLED SANS-SERIF DIGIT ONEDINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWODI" + - "NGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREEDINGBAT NEGATIVE CIRCLED SA" + - "NS-SERIF DIGIT FOURDINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVEDINGBAT" + - " NEGATIVE CIRCLED SANS-SERIF DIGIT SIXDINGBAT NEGATIVE CIRCLED SANS-SERI" + - "F DIGIT SEVENDINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHTDINGBAT NEGA" + - "TIVE CIRCLED SANS-SERIF DIGIT NINEDINGBAT NEGATIVE CIRCLED SANS-SERIF NU" + - "MBER TENHEAVY WIDE-HEADED RIGHTWARDS ARROWHEAVY PLUS SIGNHEAVY MINUS SIG" + - "NHEAVY DIVISION SIGNHEAVY SOUTH EAST ARROWHEAVY RIGHTWARDS ARROWHEAVY NO" + - "RTH EAST ARROWDRAFTING POINT RIGHTWARDS ARROWHEAVY ROUND-TIPPED RIGHTWAR" + - "DS ARROWTRIANGLE-HEADED RIGHTWARDS ARROWHEAVY TRIANGLE-HEADED RIGHTWARDS" + - " ARROWDASHED TRIANGLE-HEADED RIGHTWARDS ARROWHEAVY DASHED TRIANGLE-HEADE" + - "D RIGHTWARDS ARROWBLACK RIGHTWARDS ARROWTHREE-D TOP-LIGHTED RIGHTWARDS A") + ("" + - "RROWHEADTHREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEADBLACK RIGHTWARDS ARRO" + - "WHEADHEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROWHEAVY BLACK CURVED" + - " UPWARDS AND RIGHTWARDS ARROWSQUAT BLACK RIGHTWARDS ARROWHEAVY CONCAVE-P" + - "OINTED BLACK RIGHTWARDS ARROWRIGHT-SHADED WHITE RIGHTWARDS ARROWLEFT-SHA" + - "DED WHITE RIGHTWARDS ARROWBACK-TILTED SHADOWED WHITE RIGHTWARDS ARROWFRO" + - "NT-TILTED SHADOWED WHITE RIGHTWARDS ARROWHEAVY LOWER RIGHT-SHADOWED WHIT" + - "E RIGHTWARDS ARROWHEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROWNOTCH" + - "ED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROWCURLY LOOPNOTCHED UPPER RI" + - "GHT-SHADOWED WHITE RIGHTWARDS ARROWCIRCLED HEAVY WHITE RIGHTWARDS ARROWW" + - "HITE-FEATHERED RIGHTWARDS ARROWBLACK-FEATHERED SOUTH EAST ARROWBLACK-FEA" + - "THERED RIGHTWARDS ARROWBLACK-FEATHERED NORTH EAST ARROWHEAVY BLACK-FEATH" + - "ERED SOUTH EAST ARROWHEAVY BLACK-FEATHERED RIGHTWARDS ARROWHEAVY BLACK-F" + - "EATHERED NORTH EAST ARROWTEARDROP-BARBED RIGHTWARDS ARROWHEAVY TEARDROP-" + - "SHANKED RIGHTWARDS ARROWWEDGE-TAILED RIGHTWARDS ARROWHEAVY WEDGE-TAILED " + - "RIGHTWARDS ARROWOPEN-OUTLINED RIGHTWARDS ARROWDOUBLE CURLY LOOPTHREE DIM" + - "ENSIONAL ANGLEWHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLEPERPENDICULA" + - "ROPEN SUBSETOPEN SUPERSETLEFT S-SHAPED BAG DELIMITERRIGHT S-SHAPED BAG D" + - "ELIMITEROR WITH DOT INSIDEREVERSE SOLIDUS PRECEDING SUBSETSUPERSET PRECE" + - "DING SOLIDUSVERTICAL BAR WITH HORIZONTAL STROKEMATHEMATICAL RISING DIAGO" + - "NALLONG DIVISIONMATHEMATICAL FALLING DIAGONALSQUARED LOGICAL ANDSQUARED " + - "LOGICAL ORWHITE DIAMOND WITH CENTRED DOTAND WITH DOTELEMENT OF OPENING U" + - "PWARDSLOWER RIGHT CORNER WITH DOTUPPER LEFT CORNER WITH DOTLEFT OUTER JO" + - "INRIGHT OUTER JOINFULL OUTER JOINLARGE UP TACKLARGE DOWN TACKLEFT AND RI" + - "GHT DOUBLE TURNSTILELEFT AND RIGHT TACKLEFT MULTIMAPLONG RIGHT TACKLONG " + - "LEFT TACKUP TACK WITH CIRCLE ABOVELOZENGE DIVIDED BY HORIZONTAL RULEWHIT" + - "E CONCAVE-SIDED DIAMONDWHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICKWH" + - "ITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICKWHITE SQUARE WITH LEFTWARD" + - "S TICKWHITE SQUARE WITH RIGHTWARDS TICKMATHEMATICAL LEFT WHITE SQUARE BR" + - "ACKETMATHEMATICAL RIGHT WHITE SQUARE BRACKETMATHEMATICAL LEFT ANGLE BRAC" + - "KETMATHEMATICAL RIGHT ANGLE BRACKETMATHEMATICAL LEFT DOUBLE ANGLE BRACKE" + - "TMATHEMATICAL RIGHT DOUBLE ANGLE BRACKETMATHEMATICAL LEFT WHITE TORTOISE" + - " SHELL BRACKETMATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKETMATHEMATICA" + - "L LEFT FLATTENED PARENTHESISMATHEMATICAL RIGHT FLATTENED PARENTHESISUPWA" + - "RDS QUADRUPLE ARROWDOWNWARDS QUADRUPLE ARROWANTICLOCKWISE GAPPED CIRCLE " + - "ARROWCLOCKWISE GAPPED CIRCLE ARROWRIGHT ARROW WITH CIRCLED PLUSLONG LEFT" + - "WARDS ARROWLONG RIGHTWARDS ARROWLONG LEFT RIGHT ARROWLONG LEFTWARDS DOUB" + - "LE ARROWLONG RIGHTWARDS DOUBLE ARROWLONG LEFT RIGHT DOUBLE ARROWLONG LEF" + - "TWARDS ARROW FROM BARLONG RIGHTWARDS ARROW FROM BARLONG LEFTWARDS DOUBLE" + - " ARROW FROM BARLONG RIGHTWARDS DOUBLE ARROW FROM BARLONG RIGHTWARDS SQUI" + - "GGLE ARROWBRAILLE PATTERN BLANKBRAILLE PATTERN DOTS-1BRAILLE PATTERN DOT" + - "S-2BRAILLE PATTERN DOTS-12BRAILLE PATTERN DOTS-3BRAILLE PATTERN DOTS-13B" + - "RAILLE PATTERN DOTS-23BRAILLE PATTERN DOTS-123BRAILLE PATTERN DOTS-4BRAI" + - "LLE PATTERN DOTS-14BRAILLE PATTERN DOTS-24BRAILLE PATTERN DOTS-124BRAILL" + - "E PATTERN DOTS-34BRAILLE PATTERN DOTS-134BRAILLE PATTERN DOTS-234BRAILLE" + - " PATTERN DOTS-1234BRAILLE PATTERN DOTS-5BRAILLE PATTERN DOTS-15BRAILLE P" + - "ATTERN DOTS-25BRAILLE PATTERN DOTS-125BRAILLE PATTERN DOTS-35BRAILLE PAT" + - "TERN DOTS-135BRAILLE PATTERN DOTS-235BRAILLE PATTERN DOTS-1235BRAILLE PA" + - "TTERN DOTS-45BRAILLE PATTERN DOTS-145BRAILLE PATTERN DOTS-245BRAILLE PAT" + - "TERN DOTS-1245BRAILLE PATTERN DOTS-345BRAILLE PATTERN DOTS-1345BRAILLE P" + - "ATTERN DOTS-2345BRAILLE PATTERN DOTS-12345BRAILLE PATTERN DOTS-6BRAILLE " + - "PATTERN DOTS-16BRAILLE PATTERN DOTS-26BRAILLE PATTERN DOTS-126BRAILLE PA" + - "TTERN DOTS-36BRAILLE PATTERN DOTS-136BRAILLE PATTERN DOTS-236BRAILLE PAT" + - "TERN DOTS-1236BRAILLE PATTERN DOTS-46BRAILLE PATTERN DOTS-146BRAILLE PAT" + - "TERN DOTS-246BRAILLE PATTERN DOTS-1246BRAILLE PATTERN DOTS-346BRAILLE PA" + - "TTERN DOTS-1346BRAILLE PATTERN DOTS-2346BRAILLE PATTERN DOTS-12346BRAILL" + - "E PATTERN DOTS-56BRAILLE PATTERN DOTS-156BRAILLE PATTERN DOTS-256BRAILLE" + - " PATTERN DOTS-1256BRAILLE PATTERN DOTS-356BRAILLE PATTERN DOTS-1356BRAIL" + - "LE PATTERN DOTS-2356BRAILLE PATTERN DOTS-12356BRAILLE PATTERN DOTS-456BR" + - "AILLE PATTERN DOTS-1456BRAILLE PATTERN DOTS-2456BRAILLE PATTERN DOTS-124" + - "56BRAILLE PATTERN DOTS-3456BRAILLE PATTERN DOTS-13456BRAILLE PATTERN DOT" + - "S-23456BRAILLE PATTERN DOTS-123456BRAILLE PATTERN DOTS-7BRAILLE PATTERN " + - "DOTS-17BRAILLE PATTERN DOTS-27BRAILLE PATTERN DOTS-127BRAILLE PATTERN DO" + - "TS-37BRAILLE PATTERN DOTS-137BRAILLE PATTERN DOTS-237BRAILLE PATTERN DOT" + - "S-1237BRAILLE PATTERN DOTS-47BRAILLE PATTERN DOTS-147BRAILLE PATTERN DOT") + ("" + - "S-247BRAILLE PATTERN DOTS-1247BRAILLE PATTERN DOTS-347BRAILLE PATTERN DO" + - "TS-1347BRAILLE PATTERN DOTS-2347BRAILLE PATTERN DOTS-12347BRAILLE PATTER" + - "N DOTS-57BRAILLE PATTERN DOTS-157BRAILLE PATTERN DOTS-257BRAILLE PATTERN" + - " DOTS-1257BRAILLE PATTERN DOTS-357BRAILLE PATTERN DOTS-1357BRAILLE PATTE" + - "RN DOTS-2357BRAILLE PATTERN DOTS-12357BRAILLE PATTERN DOTS-457BRAILLE PA" + - "TTERN DOTS-1457BRAILLE PATTERN DOTS-2457BRAILLE PATTERN DOTS-12457BRAILL" + - "E PATTERN DOTS-3457BRAILLE PATTERN DOTS-13457BRAILLE PATTERN DOTS-23457B" + - "RAILLE PATTERN DOTS-123457BRAILLE PATTERN DOTS-67BRAILLE PATTERN DOTS-16" + - "7BRAILLE PATTERN DOTS-267BRAILLE PATTERN DOTS-1267BRAILLE PATTERN DOTS-3" + - "67BRAILLE PATTERN DOTS-1367BRAILLE PATTERN DOTS-2367BRAILLE PATTERN DOTS" + - "-12367BRAILLE PATTERN DOTS-467BRAILLE PATTERN DOTS-1467BRAILLE PATTERN D" + - "OTS-2467BRAILLE PATTERN DOTS-12467BRAILLE PATTERN DOTS-3467BRAILLE PATTE" + - "RN DOTS-13467BRAILLE PATTERN DOTS-23467BRAILLE PATTERN DOTS-123467BRAILL" + - "E PATTERN DOTS-567BRAILLE PATTERN DOTS-1567BRAILLE PATTERN DOTS-2567BRAI" + - "LLE PATTERN DOTS-12567BRAILLE PATTERN DOTS-3567BRAILLE PATTERN DOTS-1356" + - "7BRAILLE PATTERN DOTS-23567BRAILLE PATTERN DOTS-123567BRAILLE PATTERN DO" + - "TS-4567BRAILLE PATTERN DOTS-14567BRAILLE PATTERN DOTS-24567BRAILLE PATTE" + - "RN DOTS-124567BRAILLE PATTERN DOTS-34567BRAILLE PATTERN DOTS-134567BRAIL" + - "LE PATTERN DOTS-234567BRAILLE PATTERN DOTS-1234567BRAILLE PATTERN DOTS-8" + - "BRAILLE PATTERN DOTS-18BRAILLE PATTERN DOTS-28BRAILLE PATTERN DOTS-128BR" + - "AILLE PATTERN DOTS-38BRAILLE PATTERN DOTS-138BRAILLE PATTERN DOTS-238BRA" + - "ILLE PATTERN DOTS-1238BRAILLE PATTERN DOTS-48BRAILLE PATTERN DOTS-148BRA" + - "ILLE PATTERN DOTS-248BRAILLE PATTERN DOTS-1248BRAILLE PATTERN DOTS-348BR" + - "AILLE PATTERN DOTS-1348BRAILLE PATTERN DOTS-2348BRAILLE PATTERN DOTS-123" + - "48BRAILLE PATTERN DOTS-58BRAILLE PATTERN DOTS-158BRAILLE PATTERN DOTS-25" + - "8BRAILLE PATTERN DOTS-1258BRAILLE PATTERN DOTS-358BRAILLE PATTERN DOTS-1" + - "358BRAILLE PATTERN DOTS-2358BRAILLE PATTERN DOTS-12358BRAILLE PATTERN DO" + - "TS-458BRAILLE PATTERN DOTS-1458BRAILLE PATTERN DOTS-2458BRAILLE PATTERN " + - "DOTS-12458BRAILLE PATTERN DOTS-3458BRAILLE PATTERN DOTS-13458BRAILLE PAT" + - "TERN DOTS-23458BRAILLE PATTERN DOTS-123458BRAILLE PATTERN DOTS-68BRAILLE" + - " PATTERN DOTS-168BRAILLE PATTERN DOTS-268BRAILLE PATTERN DOTS-1268BRAILL" + - "E PATTERN DOTS-368BRAILLE PATTERN DOTS-1368BRAILLE PATTERN DOTS-2368BRAI" + - "LLE PATTERN DOTS-12368BRAILLE PATTERN DOTS-468BRAILLE PATTERN DOTS-1468B" + - "RAILLE PATTERN DOTS-2468BRAILLE PATTERN DOTS-12468BRAILLE PATTERN DOTS-3" + - "468BRAILLE PATTERN DOTS-13468BRAILLE PATTERN DOTS-23468BRAILLE PATTERN D" + - "OTS-123468BRAILLE PATTERN DOTS-568BRAILLE PATTERN DOTS-1568BRAILLE PATTE" + - "RN DOTS-2568BRAILLE PATTERN DOTS-12568BRAILLE PATTERN DOTS-3568BRAILLE P" + - "ATTERN DOTS-13568BRAILLE PATTERN DOTS-23568BRAILLE PATTERN DOTS-123568BR" + - "AILLE PATTERN DOTS-4568BRAILLE PATTERN DOTS-14568BRAILLE PATTERN DOTS-24" + - "568BRAILLE PATTERN DOTS-124568BRAILLE PATTERN DOTS-34568BRAILLE PATTERN " + - "DOTS-134568BRAILLE PATTERN DOTS-234568BRAILLE PATTERN DOTS-1234568BRAILL" + - "E PATTERN DOTS-78BRAILLE PATTERN DOTS-178BRAILLE PATTERN DOTS-278BRAILLE" + - " PATTERN DOTS-1278BRAILLE PATTERN DOTS-378BRAILLE PATTERN DOTS-1378BRAIL" + - "LE PATTERN DOTS-2378BRAILLE PATTERN DOTS-12378BRAILLE PATTERN DOTS-478BR" + - "AILLE PATTERN DOTS-1478BRAILLE PATTERN DOTS-2478BRAILLE PATTERN DOTS-124" + - "78BRAILLE PATTERN DOTS-3478BRAILLE PATTERN DOTS-13478BRAILLE PATTERN DOT" + - "S-23478BRAILLE PATTERN DOTS-123478BRAILLE PATTERN DOTS-578BRAILLE PATTER" + - "N DOTS-1578BRAILLE PATTERN DOTS-2578BRAILLE PATTERN DOTS-12578BRAILLE PA" + - "TTERN DOTS-3578BRAILLE PATTERN DOTS-13578BRAILLE PATTERN DOTS-23578BRAIL" + - "LE PATTERN DOTS-123578BRAILLE PATTERN DOTS-4578BRAILLE PATTERN DOTS-1457" + - "8BRAILLE PATTERN DOTS-24578BRAILLE PATTERN DOTS-124578BRAILLE PATTERN DO" + - "TS-34578BRAILLE PATTERN DOTS-134578BRAILLE PATTERN DOTS-234578BRAILLE PA" + - "TTERN DOTS-1234578BRAILLE PATTERN DOTS-678BRAILLE PATTERN DOTS-1678BRAIL" + - "LE PATTERN DOTS-2678BRAILLE PATTERN DOTS-12678BRAILLE PATTERN DOTS-3678B" + - "RAILLE PATTERN DOTS-13678BRAILLE PATTERN DOTS-23678BRAILLE PATTERN DOTS-" + - "123678BRAILLE PATTERN DOTS-4678BRAILLE PATTERN DOTS-14678BRAILLE PATTERN" + - " DOTS-24678BRAILLE PATTERN DOTS-124678BRAILLE PATTERN DOTS-34678BRAILLE " + - "PATTERN DOTS-134678BRAILLE PATTERN DOTS-234678BRAILLE PATTERN DOTS-12346" + - "78BRAILLE PATTERN DOTS-5678BRAILLE PATTERN DOTS-15678BRAILLE PATTERN DOT" + - "S-25678BRAILLE PATTERN DOTS-125678BRAILLE PATTERN DOTS-35678BRAILLE PATT" + - "ERN DOTS-135678BRAILLE PATTERN DOTS-235678BRAILLE PATTERN DOTS-1235678BR" + - "AILLE PATTERN DOTS-45678BRAILLE PATTERN DOTS-145678BRAILLE PATTERN DOTS-" + - "245678BRAILLE PATTERN DOTS-1245678BRAILLE PATTERN DOTS-345678BRAILLE PAT" + - "TERN DOTS-1345678BRAILLE PATTERN DOTS-2345678BRAILLE PATTERN DOTS-123456") + ("" + - "78RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKERIGHTWARDS TWO-HEADED " + - "ARROW WITH DOUBLE VERTICAL STROKELEFTWARDS DOUBLE ARROW WITH VERTICAL ST" + - "ROKERIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKELEFT RIGHT DOUBLE ARROW " + - "WITH VERTICAL STROKERIGHTWARDS TWO-HEADED ARROW FROM BARLEFTWARDS DOUBLE" + - " ARROW FROM BARRIGHTWARDS DOUBLE ARROW FROM BARDOWNWARDS ARROW WITH HORI" + - "ZONTAL STROKEUPWARDS ARROW WITH HORIZONTAL STROKEUPWARDS TRIPLE ARROWDOW" + - "NWARDS TRIPLE ARROWLEFTWARDS DOUBLE DASH ARROWRIGHTWARDS DOUBLE DASH ARR" + - "OWLEFTWARDS TRIPLE DASH ARROWRIGHTWARDS TRIPLE DASH ARROWRIGHTWARDS TWO-" + - "HEADED TRIPLE DASH ARROWRIGHTWARDS ARROW WITH DOTTED STEMUPWARDS ARROW T" + - "O BARDOWNWARDS ARROW TO BARRIGHTWARDS ARROW WITH TAIL WITH VERTICAL STRO" + - "KERIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKERIGHTWARDS TWO-H" + - "EADED ARROW WITH TAILRIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL" + - " STROKERIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE" + - "LEFTWARDS ARROW-TAILRIGHTWARDS ARROW-TAILLEFTWARDS DOUBLE ARROW-TAILRIGH" + - "TWARDS DOUBLE ARROW-TAILLEFTWARDS ARROW TO BLACK DIAMONDRIGHTWARDS ARROW" + - " TO BLACK DIAMONDLEFTWARDS ARROW FROM BAR TO BLACK DIAMONDRIGHTWARDS ARR" + - "OW FROM BAR TO BLACK DIAMONDNORTH WEST AND SOUTH EAST ARROWNORTH EAST AN" + - "D SOUTH WEST ARROWNORTH WEST ARROW WITH HOOKNORTH EAST ARROW WITH HOOKSO" + - "UTH EAST ARROW WITH HOOKSOUTH WEST ARROW WITH HOOKNORTH WEST ARROW AND N" + - "ORTH EAST ARROWNORTH EAST ARROW AND SOUTH EAST ARROWSOUTH EAST ARROW AND" + - " SOUTH WEST ARROWSOUTH WEST ARROW AND NORTH WEST ARROWRISING DIAGONAL CR" + - "OSSING FALLING DIAGONALFALLING DIAGONAL CROSSING RISING DIAGONALSOUTH EA" + - "ST ARROW CROSSING NORTH EAST ARROWNORTH EAST ARROW CROSSING SOUTH EAST A" + - "RROWFALLING DIAGONAL CROSSING NORTH EAST ARROWRISING DIAGONAL CROSSING S" + - "OUTH EAST ARROWNORTH EAST ARROW CROSSING NORTH WEST ARROWNORTH WEST ARRO" + - "W CROSSING NORTH EAST ARROWWAVE ARROW POINTING DIRECTLY RIGHTARROW POINT" + - "ING RIGHTWARDS THEN CURVING UPWARDSARROW POINTING RIGHTWARDS THEN CURVIN" + - "G DOWNWARDSARROW POINTING DOWNWARDS THEN CURVING LEFTWARDSARROW POINTING" + - " DOWNWARDS THEN CURVING RIGHTWARDSRIGHT-SIDE ARC CLOCKWISE ARROWLEFT-SID" + - "E ARC ANTICLOCKWISE ARROWTOP ARC ANTICLOCKWISE ARROWBOTTOM ARC ANTICLOCK" + - "WISE ARROWTOP ARC CLOCKWISE ARROW WITH MINUSTOP ARC ANTICLOCKWISE ARROW " + - "WITH PLUSLOWER RIGHT SEMICIRCULAR CLOCKWISE ARROWLOWER LEFT SEMICIRCULAR" + - " ANTICLOCKWISE ARROWANTICLOCKWISE CLOSED CIRCLE ARROWCLOCKWISE CLOSED CI" + - "RCLE ARROWRIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROWLEFTWARDS ARROW AB" + - "OVE SHORT RIGHTWARDS ARROWSHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROWRI" + - "GHTWARDS ARROW WITH PLUS BELOWLEFTWARDS ARROW WITH PLUS BELOWRIGHTWARDS " + - "ARROW THROUGH XLEFT RIGHT ARROW THROUGH SMALL CIRCLEUPWARDS TWO-HEADED A" + - "RROW FROM SMALL CIRCLELEFT BARB UP RIGHT BARB DOWN HARPOONLEFT BARB DOWN" + - " RIGHT BARB UP HARPOONUP BARB RIGHT DOWN BARB LEFT HARPOONUP BARB LEFT D" + - "OWN BARB RIGHT HARPOONLEFT BARB UP RIGHT BARB UP HARPOONUP BARB RIGHT DO" + - "WN BARB RIGHT HARPOONLEFT BARB DOWN RIGHT BARB DOWN HARPOONUP BARB LEFT " + - "DOWN BARB LEFT HARPOONLEFTWARDS HARPOON WITH BARB UP TO BARRIGHTWARDS HA" + - "RPOON WITH BARB UP TO BARUPWARDS HARPOON WITH BARB RIGHT TO BARDOWNWARDS" + - " HARPOON WITH BARB RIGHT TO BARLEFTWARDS HARPOON WITH BARB DOWN TO BARRI" + - "GHTWARDS HARPOON WITH BARB DOWN TO BARUPWARDS HARPOON WITH BARB LEFT TO " + - "BARDOWNWARDS HARPOON WITH BARB LEFT TO BARLEFTWARDS HARPOON WITH BARB UP" + - " FROM BARRIGHTWARDS HARPOON WITH BARB UP FROM BARUPWARDS HARPOON WITH BA" + - "RB RIGHT FROM BARDOWNWARDS HARPOON WITH BARB RIGHT FROM BARLEFTWARDS HAR" + - "POON WITH BARB DOWN FROM BARRIGHTWARDS HARPOON WITH BARB DOWN FROM BARUP" + - "WARDS HARPOON WITH BARB LEFT FROM BARDOWNWARDS HARPOON WITH BARB LEFT FR" + - "OM BARLEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB D" + - "OWNUPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT" + - "RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWND" + - "OWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT" + - "LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UPLEFT" + - "WARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWNRIGH" + - "TWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UPRIGHTWAR" + - "DS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWNLEFTWARD" + - "S HARPOON WITH BARB UP ABOVE LONG DASHLEFTWARDS HARPOON WITH BARB DOWN B" + - "ELOW LONG DASHRIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASHRIGHTWARDS " + - "HARPOON WITH BARB DOWN BELOW LONG DASHUPWARDS HARPOON WITH BARB LEFT BES" + - "IDE DOWNWARDS HARPOON WITH BARB RIGHTDOWNWARDS HARPOON WITH BARB LEFT BE" + - "SIDE UPWARDS HARPOON WITH BARB RIGHTRIGHT DOUBLE ARROW WITH ROUNDED HEAD" + - "EQUALS SIGN ABOVE RIGHTWARDS ARROWTILDE OPERATOR ABOVE RIGHTWARDS ARROWL") + ("" + - "EFTWARDS ARROW ABOVE TILDE OPERATORRIGHTWARDS ARROW ABOVE TILDE OPERATOR" + - "RIGHTWARDS ARROW ABOVE ALMOST EQUAL TOLESS-THAN ABOVE LEFTWARDS ARROWLEF" + - "TWARDS ARROW THROUGH LESS-THANGREATER-THAN ABOVE RIGHTWARDS ARROWSUBSET " + - "ABOVE RIGHTWARDS ARROWLEFTWARDS ARROW THROUGH SUBSETSUPERSET ABOVE LEFTW" + - "ARDS ARROWLEFT FISH TAILRIGHT FISH TAILUP FISH TAILDOWN FISH TAILTRIPLE " + - "VERTICAL BAR DELIMITERZ NOTATION SPOTZ NOTATION TYPE COLONLEFT WHITE CUR" + - "LY BRACKETRIGHT WHITE CURLY BRACKETLEFT WHITE PARENTHESISRIGHT WHITE PAR" + - "ENTHESISZ NOTATION LEFT IMAGE BRACKETZ NOTATION RIGHT IMAGE BRACKETZ NOT" + - "ATION LEFT BINDING BRACKETZ NOTATION RIGHT BINDING BRACKETLEFT SQUARE BR" + - "ACKET WITH UNDERBARRIGHT SQUARE BRACKET WITH UNDERBARLEFT SQUARE BRACKET" + - " WITH TICK IN TOP CORNERRIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNERL" + - "EFT SQUARE BRACKET WITH TICK IN BOTTOM CORNERRIGHT SQUARE BRACKET WITH T" + - "ICK IN TOP CORNERLEFT ANGLE BRACKET WITH DOTRIGHT ANGLE BRACKET WITH DOT" + - "LEFT ARC LESS-THAN BRACKETRIGHT ARC GREATER-THAN BRACKETDOUBLE LEFT ARC " + - "GREATER-THAN BRACKETDOUBLE RIGHT ARC LESS-THAN BRACKETLEFT BLACK TORTOIS" + - "E SHELL BRACKETRIGHT BLACK TORTOISE SHELL BRACKETDOTTED FENCEVERTICAL ZI" + - "GZAG LINEMEASURED ANGLE OPENING LEFTRIGHT ANGLE VARIANT WITH SQUAREMEASU" + - "RED RIGHT ANGLE WITH DOTANGLE WITH S INSIDEACUTE ANGLESPHERICAL ANGLE OP" + - "ENING LEFTSPHERICAL ANGLE OPENING UPTURNED ANGLEREVERSED ANGLEANGLE WITH" + - " UNDERBARREVERSED ANGLE WITH UNDERBAROBLIQUE ANGLE OPENING UPOBLIQUE ANG" + - "LE OPENING DOWNMEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP " + - "AND RIGHTMEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LE" + - "FTMEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHTME" + - "ASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFTMEASURE" + - "D ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UPMEASURED ANGL" + - "E WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UPMEASURED ANGLE WITH " + - "OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWNMEASURED ANGLE WITH OPEN" + - " ARM ENDING IN ARROW POINTING LEFT AND DOWNREVERSED EMPTY SETEMPTY SET W" + - "ITH OVERBAREMPTY SET WITH SMALL CIRCLE ABOVEEMPTY SET WITH RIGHT ARROW A" + - "BOVEEMPTY SET WITH LEFT ARROW ABOVECIRCLE WITH HORIZONTAL BARCIRCLED VER" + - "TICAL BARCIRCLED PARALLELCIRCLED REVERSE SOLIDUSCIRCLED PERPENDICULARCIR" + - "CLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BARCIRCLE" + - " WITH SUPERIMPOSED XCIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGNUP ARROW " + - "THROUGH CIRCLECIRCLED WHITE BULLETCIRCLED BULLETCIRCLED LESS-THANCIRCLED" + - " GREATER-THANCIRCLE WITH SMALL CIRCLE TO THE RIGHTCIRCLE WITH TWO HORIZO" + - "NTAL STROKES TO THE RIGHTSQUARED RISING DIAGONAL SLASHSQUARED FALLING DI" + - "AGONAL SLASHSQUARED ASTERISKSQUARED SMALL CIRCLESQUARED SQUARETWO JOINED" + - " SQUARESTRIANGLE WITH DOT ABOVETRIANGLE WITH UNDERBARS IN TRIANGLETRIANG" + - "LE WITH SERIFS AT BOTTOMRIGHT TRIANGLE ABOVE LEFT TRIANGLELEFT TRIANGLE " + - "BESIDE VERTICAL BARVERTICAL BAR BESIDE RIGHT TRIANGLEBOWTIE WITH LEFT HA" + - "LF BLACKBOWTIE WITH RIGHT HALF BLACKBLACK BOWTIETIMES WITH LEFT HALF BLA" + - "CKTIMES WITH RIGHT HALF BLACKWHITE HOURGLASSBLACK HOURGLASSLEFT WIGGLY F" + - "ENCERIGHT WIGGLY FENCELEFT DOUBLE WIGGLY FENCERIGHT DOUBLE WIGGLY FENCEI" + - "NCOMPLETE INFINITYTIE OVER INFINITYINFINITY NEGATED WITH VERTICAL BARDOU" + - "BLE-ENDED MULTIMAPSQUARE WITH CONTOURED OUTLINEINCREASES ASSHUFFLE PRODU" + - "CTEQUALS SIGN AND SLANTED PARALLELEQUALS SIGN AND SLANTED PARALLEL WITH " + - "TILDE ABOVEIDENTICAL TO AND SLANTED PARALLELGLEICH STARKTHERMODYNAMICDOW" + - "N-POINTING TRIANGLE WITH LEFT HALF BLACKDOWN-POINTING TRIANGLE WITH RIGH" + - "T HALF BLACKBLACK DIAMOND WITH DOWN ARROWBLACK LOZENGEWHITE CIRCLE WITH " + - "DOWN ARROWBLACK CIRCLE WITH DOWN ARROWERROR-BARRED WHITE SQUAREERROR-BAR" + - "RED BLACK SQUAREERROR-BARRED WHITE DIAMONDERROR-BARRED BLACK DIAMONDERRO" + - "R-BARRED WHITE CIRCLEERROR-BARRED BLACK CIRCLERULE-DELAYEDREVERSE SOLIDU" + - "S OPERATORSOLIDUS WITH OVERBARREVERSE SOLIDUS WITH HORIZONTAL STROKEBIG " + - "SOLIDUSBIG REVERSE SOLIDUSDOUBLE PLUSTRIPLE PLUSLEFT-POINTING CURVED ANG" + - "LE BRACKETRIGHT-POINTING CURVED ANGLE BRACKETTINYMINYN-ARY CIRCLED DOT O" + - "PERATORN-ARY CIRCLED PLUS OPERATORN-ARY CIRCLED TIMES OPERATORN-ARY UNIO" + - "N OPERATOR WITH DOTN-ARY UNION OPERATOR WITH PLUSN-ARY SQUARE INTERSECTI" + - "ON OPERATORN-ARY SQUARE UNION OPERATORTWO LOGICAL AND OPERATORTWO LOGICA" + - "L OR OPERATORN-ARY TIMES OPERATORMODULO TWO SUMSUMMATION WITH INTEGRALQU" + - "ADRUPLE INTEGRAL OPERATORFINITE PART INTEGRALINTEGRAL WITH DOUBLE STROKE" + - "INTEGRAL AVERAGE WITH SLASHCIRCULATION FUNCTIONANTICLOCKWISE INTEGRATION" + - "LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLELINE INTEGRATION WITH " + - "SEMICIRCULAR PATH AROUND POLELINE INTEGRATION NOT INCLUDING THE POLEINTE" + - "GRAL AROUND A POINT OPERATORQUATERNION INTEGRAL OPERATORINTEGRAL WITH LE") + ("" + - "FTWARDS ARROW WITH HOOKINTEGRAL WITH TIMES SIGNINTEGRAL WITH INTERSECTIO" + - "NINTEGRAL WITH UNIONINTEGRAL WITH OVERBARINTEGRAL WITH UNDERBARJOINLARGE" + - " LEFT TRIANGLE OPERATORZ NOTATION SCHEMA COMPOSITIONZ NOTATION SCHEMA PI" + - "PINGZ NOTATION SCHEMA PROJECTIONPLUS SIGN WITH SMALL CIRCLE ABOVEPLUS SI" + - "GN WITH CIRCUMFLEX ACCENT ABOVEPLUS SIGN WITH TILDE ABOVEPLUS SIGN WITH " + - "DOT BELOWPLUS SIGN WITH TILDE BELOWPLUS SIGN WITH SUBSCRIPT TWOPLUS SIGN" + - " WITH BLACK TRIANGLEMINUS SIGN WITH COMMA ABOVEMINUS SIGN WITH DOT BELOW" + - "MINUS SIGN WITH FALLING DOTSMINUS SIGN WITH RISING DOTSPLUS SIGN IN LEFT" + - " HALF CIRCLEPLUS SIGN IN RIGHT HALF CIRCLEVECTOR OR CROSS PRODUCTMULTIPL" + - "ICATION SIGN WITH DOT ABOVEMULTIPLICATION SIGN WITH UNDERBARSEMIDIRECT P" + - "RODUCT WITH BOTTOM CLOSEDSMASH PRODUCTMULTIPLICATION SIGN IN LEFT HALF C" + - "IRCLEMULTIPLICATION SIGN IN RIGHT HALF CIRCLECIRCLED MULTIPLICATION SIGN" + - " WITH CIRCUMFLEX ACCENTMULTIPLICATION SIGN IN DOUBLE CIRCLECIRCLED DIVIS" + - "ION SIGNPLUS SIGN IN TRIANGLEMINUS SIGN IN TRIANGLEMULTIPLICATION SIGN I" + - "N TRIANGLEINTERIOR PRODUCTRIGHTHAND INTERIOR PRODUCTZ NOTATION RELATIONA" + - "L COMPOSITIONAMALGAMATION OR COPRODUCTINTERSECTION WITH DOTUNION WITH MI" + - "NUS SIGNUNION WITH OVERBARINTERSECTION WITH OVERBARINTERSECTION WITH LOG" + - "ICAL ANDUNION WITH LOGICAL ORUNION ABOVE INTERSECTIONINTERSECTION ABOVE " + - "UNIONUNION ABOVE BAR ABOVE INTERSECTIONINTERSECTION ABOVE BAR ABOVE UNIO" + - "NUNION BESIDE AND JOINED WITH UNIONINTERSECTION BESIDE AND JOINED WITH I" + - "NTERSECTIONCLOSED UNION WITH SERIFSCLOSED INTERSECTION WITH SERIFSDOUBLE" + - " SQUARE INTERSECTIONDOUBLE SQUARE UNIONCLOSED UNION WITH SERIFS AND SMAS" + - "H PRODUCTLOGICAL AND WITH DOT ABOVELOGICAL OR WITH DOT ABOVEDOUBLE LOGIC" + - "AL ANDDOUBLE LOGICAL ORTWO INTERSECTING LOGICAL ANDTWO INTERSECTING LOGI" + - "CAL ORSLOPING LARGE ORSLOPING LARGE ANDLOGICAL OR OVERLAPPING LOGICAL AN" + - "DLOGICAL AND WITH MIDDLE STEMLOGICAL OR WITH MIDDLE STEMLOGICAL AND WITH" + - " HORIZONTAL DASHLOGICAL OR WITH HORIZONTAL DASHLOGICAL AND WITH DOUBLE O" + - "VERBARLOGICAL AND WITH UNDERBARLOGICAL AND WITH DOUBLE UNDERBARSMALL VEE" + - " WITH UNDERBARLOGICAL OR WITH DOUBLE OVERBARLOGICAL OR WITH DOUBLE UNDER" + - "BARZ NOTATION DOMAIN ANTIRESTRICTIONZ NOTATION RANGE ANTIRESTRICTIONEQUA" + - "LS SIGN WITH DOT BELOWIDENTICAL WITH DOT ABOVETRIPLE HORIZONTAL BAR WITH" + - " DOUBLE VERTICAL STROKETRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE" + - "TILDE OPERATOR WITH DOT ABOVETILDE OPERATOR WITH RISING DOTSSIMILAR MINU" + - "S SIMILARCONGRUENT WITH DOT ABOVEEQUALS WITH ASTERISKALMOST EQUAL TO WIT" + - "H CIRCUMFLEX ACCENTAPPROXIMATELY EQUAL OR EQUAL TOEQUALS SIGN ABOVE PLUS" + - " SIGNPLUS SIGN ABOVE EQUALS SIGNEQUALS SIGN ABOVE TILDE OPERATORDOUBLE C" + - "OLON EQUALTWO CONSECUTIVE EQUALS SIGNSTHREE CONSECUTIVE EQUALS SIGNSEQUA" + - "LS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOWEQUIVALENT WITH FOUR DOTS " + - "ABOVELESS-THAN WITH CIRCLE INSIDEGREATER-THAN WITH CIRCLE INSIDELESS-THA" + - "N WITH QUESTION MARK ABOVEGREATER-THAN WITH QUESTION MARK ABOVELESS-THAN" + - " OR SLANTED EQUAL TOGREATER-THAN OR SLANTED EQUAL TOLESS-THAN OR SLANTED" + - " EQUAL TO WITH DOT INSIDEGREATER-THAN OR SLANTED EQUAL TO WITH DOT INSID" + - "ELESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVEGREATER-THAN OR SLANTED EQU" + - "AL TO WITH DOT ABOVELESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHTGR" + - "EATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFTLESS-THAN OR APPROXIMA" + - "TEGREATER-THAN OR APPROXIMATELESS-THAN AND SINGLE-LINE NOT EQUAL TOGREAT" + - "ER-THAN AND SINGLE-LINE NOT EQUAL TOLESS-THAN AND NOT APPROXIMATEGREATER" + - "-THAN AND NOT APPROXIMATELESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER" + - "-THANGREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THANLESS-THAN ABOVE" + - " SIMILAR OR EQUALGREATER-THAN ABOVE SIMILAR OR EQUALLESS-THAN ABOVE SIMI" + - "LAR ABOVE GREATER-THANGREATER-THAN ABOVE SIMILAR ABOVE LESS-THANLESS-THA" + - "N ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUALGREATER-THAN ABOVE LESS-THAN" + - " ABOVE DOUBLE-LINE EQUALLESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN" + - " ABOVE SLANTED EQUALGREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABO" + - "VE SLANTED EQUALSLANTED EQUAL TO OR LESS-THANSLANTED EQUAL TO OR GREATER" + - "-THANSLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDESLANTED EQUAL TO OR GR" + - "EATER-THAN WITH DOT INSIDEDOUBLE-LINE EQUAL TO OR LESS-THANDOUBLE-LINE E" + - "QUAL TO OR GREATER-THANDOUBLE-LINE SLANTED EQUAL TO OR LESS-THANDOUBLE-L" + - "INE SLANTED EQUAL TO OR GREATER-THANSIMILAR OR LESS-THANSIMILAR OR GREAT" + - "ER-THANSIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGNSIMILAR ABOVE GREATER-TH" + - "AN ABOVE EQUALS SIGNDOUBLE NESTED LESS-THANDOUBLE NESTED GREATER-THANDOU" + - "BLE NESTED LESS-THAN WITH UNDERBARGREATER-THAN OVERLAPPING LESS-THANGREA" + - "TER-THAN BESIDE LESS-THANLESS-THAN CLOSED BY CURVEGREATER-THAN CLOSED BY" + - " CURVELESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUALGREATER-THAN CLOSED B") + ("" + - "Y CURVE ABOVE SLANTED EQUALSMALLER THANLARGER THANSMALLER THAN OR EQUAL " + - "TOLARGER THAN OR EQUAL TOEQUALS SIGN WITH BUMPY ABOVEPRECEDES ABOVE SING" + - "LE-LINE EQUALS SIGNSUCCEEDS ABOVE SINGLE-LINE EQUALS SIGNPRECEDES ABOVE " + - "SINGLE-LINE NOT EQUAL TOSUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TOPRECEDES " + - "ABOVE EQUALS SIGNSUCCEEDS ABOVE EQUALS SIGNPRECEDES ABOVE NOT EQUAL TOSU" + - "CCEEDS ABOVE NOT EQUAL TOPRECEDES ABOVE ALMOST EQUAL TOSUCCEEDS ABOVE AL" + - "MOST EQUAL TOPRECEDES ABOVE NOT ALMOST EQUAL TOSUCCEEDS ABOVE NOT ALMOST" + - " EQUAL TODOUBLE PRECEDESDOUBLE SUCCEEDSSUBSET WITH DOTSUPERSET WITH DOTS" + - "UBSET WITH PLUS SIGN BELOWSUPERSET WITH PLUS SIGN BELOWSUBSET WITH MULTI" + - "PLICATION SIGN BELOWSUPERSET WITH MULTIPLICATION SIGN BELOWSUBSET OF OR " + - "EQUAL TO WITH DOT ABOVESUPERSET OF OR EQUAL TO WITH DOT ABOVESUBSET OF A" + - "BOVE EQUALS SIGNSUPERSET OF ABOVE EQUALS SIGNSUBSET OF ABOVE TILDE OPERA" + - "TORSUPERSET OF ABOVE TILDE OPERATORSUBSET OF ABOVE ALMOST EQUAL TOSUPERS" + - "ET OF ABOVE ALMOST EQUAL TOSUBSET OF ABOVE NOT EQUAL TOSUPERSET OF ABOVE" + - " NOT EQUAL TOSQUARE LEFT OPEN BOX OPERATORSQUARE RIGHT OPEN BOX OPERATOR" + - "CLOSED SUBSETCLOSED SUPERSETCLOSED SUBSET OR EQUAL TOCLOSED SUPERSET OR " + - "EQUAL TOSUBSET ABOVE SUPERSETSUPERSET ABOVE SUBSETSUBSET ABOVE SUBSETSUP" + - "ERSET ABOVE SUPERSETSUPERSET BESIDE SUBSETSUPERSET BESIDE AND JOINED BY " + - "DASH WITH SUBSETELEMENT OF OPENING DOWNWARDSPITCHFORK WITH TEE TOPTRANSV" + - "ERSAL INTERSECTIONFORKINGNONFORKINGSHORT LEFT TACKSHORT DOWN TACKSHORT U" + - "P TACKPERPENDICULAR WITH SVERTICAL BAR TRIPLE RIGHT TURNSTILEDOUBLE VERT" + - "ICAL BAR LEFT TURNSTILEVERTICAL BAR DOUBLE LEFT TURNSTILEDOUBLE VERTICAL" + - " BAR DOUBLE LEFT TURNSTILELONG DASH FROM LEFT MEMBER OF DOUBLE VERTICALS" + - "HORT DOWN TACK WITH OVERBARSHORT UP TACK WITH UNDERBARSHORT UP TACK ABOV" + - "E SHORT DOWN TACKDOUBLE DOWN TACKDOUBLE UP TACKDOUBLE STROKE NOT SIGNREV" + - "ERSED DOUBLE STROKE NOT SIGNDOES NOT DIVIDE WITH REVERSED NEGATION SLASH" + - "VERTICAL LINE WITH CIRCLE ABOVEVERTICAL LINE WITH CIRCLE BELOWDOWN TACK " + - "WITH CIRCLE BELOWPARALLEL WITH HORIZONTAL STROKEPARALLEL WITH TILDE OPER" + - "ATORTRIPLE VERTICAL BAR BINARY RELATIONTRIPLE VERTICAL BAR WITH HORIZONT" + - "AL STROKETRIPLE COLON OPERATORTRIPLE NESTED LESS-THANTRIPLE NESTED GREAT" + - "ER-THANDOUBLE-LINE SLANTED LESS-THAN OR EQUAL TODOUBLE-LINE SLANTED GREA" + - "TER-THAN OR EQUAL TOTRIPLE SOLIDUS BINARY RELATIONLARGE TRIPLE VERTICAL " + - "BAR OPERATORDOUBLE SOLIDUS OPERATORWHITE VERTICAL BARN-ARY WHITE VERTICA" + - "L BARNORTH EAST WHITE ARROWNORTH WEST WHITE ARROWSOUTH EAST WHITE ARROWS" + - "OUTH WEST WHITE ARROWLEFT RIGHT WHITE ARROWLEFTWARDS BLACK ARROWUPWARDS " + - "BLACK ARROWDOWNWARDS BLACK ARROWNORTH EAST BLACK ARROWNORTH WEST BLACK A" + - "RROWSOUTH EAST BLACK ARROWSOUTH WEST BLACK ARROWLEFT RIGHT BLACK ARROWUP" + - " DOWN BLACK ARROWRIGHTWARDS ARROW WITH TIP DOWNWARDSRIGHTWARDS ARROW WIT" + - "H TIP UPWARDSLEFTWARDS ARROW WITH TIP DOWNWARDSLEFTWARDS ARROW WITH TIP " + - "UPWARDSSQUARE WITH TOP HALF BLACKSQUARE WITH BOTTOM HALF BLACKSQUARE WIT" + - "H UPPER RIGHT DIAGONAL HALF BLACKSQUARE WITH LOWER LEFT DIAGONAL HALF BL" + - "ACKDIAMOND WITH LEFT HALF BLACKDIAMOND WITH RIGHT HALF BLACKDIAMOND WITH" + - " TOP HALF BLACKDIAMOND WITH BOTTOM HALF BLACKDOTTED SQUAREBLACK LARGE SQ" + - "UAREWHITE LARGE SQUAREBLACK VERY SMALL SQUAREWHITE VERY SMALL SQUAREBLAC" + - "K PENTAGONWHITE PENTAGONWHITE HEXAGONBLACK HEXAGONHORIZONTAL BLACK HEXAG" + - "ONBLACK LARGE CIRCLEBLACK MEDIUM DIAMONDWHITE MEDIUM DIAMONDBLACK MEDIUM" + - " LOZENGEWHITE MEDIUM LOZENGEBLACK SMALL DIAMONDBLACK SMALL LOZENGEWHITE " + - "SMALL LOZENGEBLACK HORIZONTAL ELLIPSEWHITE HORIZONTAL ELLIPSEBLACK VERTI" + - "CAL ELLIPSEWHITE VERTICAL ELLIPSELEFT ARROW WITH SMALL CIRCLETHREE LEFTW" + - "ARDS ARROWSLEFT ARROW WITH CIRCLED PLUSLONG LEFTWARDS SQUIGGLE ARROWLEFT" + - "WARDS TWO-HEADED ARROW WITH VERTICAL STROKELEFTWARDS TWO-HEADED ARROW WI" + - "TH DOUBLE VERTICAL STROKELEFTWARDS TWO-HEADED ARROW FROM BARLEFTWARDS TW" + - "O-HEADED TRIPLE DASH ARROWLEFTWARDS ARROW WITH DOTTED STEMLEFTWARDS ARRO" + - "W WITH TAIL WITH VERTICAL STROKELEFTWARDS ARROW WITH TAIL WITH DOUBLE VE" + - "RTICAL STROKELEFTWARDS TWO-HEADED ARROW WITH TAILLEFTWARDS TWO-HEADED AR" + - "ROW WITH TAIL WITH VERTICAL STROKELEFTWARDS TWO-HEADED ARROW WITH TAIL W" + - "ITH DOUBLE VERTICAL STROKELEFTWARDS ARROW THROUGH XWAVE ARROW POINTING D" + - "IRECTLY LEFTEQUALS SIGN ABOVE LEFTWARDS ARROWREVERSE TILDE OPERATOR ABOV" + - "E LEFTWARDS ARROWLEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TORIGHTWARDS" + - " ARROW THROUGH GREATER-THANRIGHTWARDS ARROW THROUGH SUPERSETLEFTWARDS QU" + - "ADRUPLE ARROWRIGHTWARDS QUADRUPLE ARROWREVERSE TILDE OPERATOR ABOVE RIGH" + - "TWARDS ARROWRIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TOTILDE OPERATOR" + - " ABOVE LEFTWARDS ARROWLEFTWARDS ARROW ABOVE ALMOST EQUAL TOLEFTWARDS ARR" + - "OW ABOVE REVERSE TILDE OPERATORRIGHTWARDS ARROW ABOVE REVERSE TILDE OPER") + ("" + - "ATORDOWNWARDS TRIANGLE-HEADED ZIGZAG ARROWSHORT SLANTED NORTH ARROWSHORT" + - " BACKSLANTED SOUTH ARROWWHITE MEDIUM STARBLACK SMALL STARWHITE SMALL STA" + - "RBLACK RIGHT-POINTING PENTAGONWHITE RIGHT-POINTING PENTAGONHEAVY LARGE C" + - "IRCLEHEAVY OVAL WITH OVAL INSIDEHEAVY CIRCLE WITH CIRCLE INSIDEHEAVY CIR" + - "CLEHEAVY CIRCLED SALTIRESLANTED NORTH ARROW WITH HOOKED HEADBACKSLANTED " + - "SOUTH ARROW WITH HOOKED TAILSLANTED NORTH ARROW WITH HORIZONTAL TAILBACK" + - "SLANTED SOUTH ARROW WITH HORIZONTAL TAILBENT ARROW POINTING DOWNWARDS TH" + - "EN NORTH EASTSHORT BENT ARROW POINTING DOWNWARDS THEN NORTH EASTLEFTWARD" + - "S TRIANGLE-HEADED ARROWUPWARDS TRIANGLE-HEADED ARROWRIGHTWARDS TRIANGLE-" + - "HEADED ARROWDOWNWARDS TRIANGLE-HEADED ARROWLEFT RIGHT TRIANGLE-HEADED AR" + - "ROWUP DOWN TRIANGLE-HEADED ARROWNORTH WEST TRIANGLE-HEADED ARROWNORTH EA" + - "ST TRIANGLE-HEADED ARROWSOUTH EAST TRIANGLE-HEADED ARROWSOUTH WEST TRIAN" + - "GLE-HEADED ARROWLEFTWARDS TRIANGLE-HEADED DASHED ARROWUPWARDS TRIANGLE-H" + - "EADED DASHED ARROWRIGHTWARDS TRIANGLE-HEADED DASHED ARROWDOWNWARDS TRIAN" + - "GLE-HEADED DASHED ARROWCLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROWANTICL" + - "OCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROWLEFTWARDS TRIANGLE-HEADED ARROW" + - " TO BARUPWARDS TRIANGLE-HEADED ARROW TO BARRIGHTWARDS TRIANGLE-HEADED AR" + - "ROW TO BARDOWNWARDS TRIANGLE-HEADED ARROW TO BARNORTH WEST TRIANGLE-HEAD" + - "ED ARROW TO BARNORTH EAST TRIANGLE-HEADED ARROW TO BARSOUTH EAST TRIANGL" + - "E-HEADED ARROW TO BARSOUTH WEST TRIANGLE-HEADED ARROW TO BARLEFTWARDS TR" + - "IANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKEUPWARDS TRIANGLE-HEADED" + - " ARROW WITH DOUBLE HORIZONTAL STROKERIGHTWARDS TRIANGLE-HEADED ARROW WIT" + - "H DOUBLE HORIZONTAL STROKEDOWNWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HO" + - "RIZONTAL STROKEHORIZONTAL TAB KEYVERTICAL TAB KEYLEFTWARDS TRIANGLE-HEAD" + - "ED ARROW OVER RIGHTWARDS TRIANGLE-HEADED ARROWUPWARDS TRIANGLE-HEADED AR" + - "ROW LEFTWARDS OF DOWNWARDS TRIANGLE-HEADED ARROWRIGHTWARDS TRIANGLE-HEAD" + - "ED ARROW OVER LEFTWARDS TRIANGLE-HEADED ARROWDOWNWARDS TRIANGLE-HEADED A" + - "RROW LEFTWARDS OF UPWARDS TRIANGLE-HEADED ARROWLEFTWARDS TRIANGLE-HEADED" + - " PAIRED ARROWSUPWARDS TRIANGLE-HEADED PAIRED ARROWSRIGHTWARDS TRIANGLE-H" + - "EADED PAIRED ARROWSDOWNWARDS TRIANGLE-HEADED PAIRED ARROWSLEFTWARDS BLAC" + - "K CIRCLED WHITE ARROWUPWARDS BLACK CIRCLED WHITE ARROWRIGHTWARDS BLACK C" + - "IRCLED WHITE ARROWDOWNWARDS BLACK CIRCLED WHITE ARROWANTICLOCKWISE TRIAN" + - "GLE-HEADED RIGHT U-SHAPED ARROWANTICLOCKWISE TRIANGLE-HEADED BOTTOM U-SH" + - "APED ARROWANTICLOCKWISE TRIANGLE-HEADED LEFT U-SHAPED ARROWANTICLOCKWISE" + - " TRIANGLE-HEADED TOP U-SHAPED ARROWRETURN LEFTRETURN RIGHTNEWLINE LEFTNE" + - "WLINE RIGHTFOUR CORNER ARROWS CIRCLING ANTICLOCKWISERIGHTWARDS BLACK ARR" + - "OWTHREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEADTHREE-D RIGHT-LIGHT" + - "ED UPWARDS EQUILATERAL ARROWHEADTHREE-D TOP-LIGHTED RIGHTWARDS EQUILATER" + - "AL ARROWHEADTHREE-D LEFT-LIGHTED DOWNWARDS EQUILATERAL ARROWHEADBLACK LE" + - "FTWARDS EQUILATERAL ARROWHEADBLACK UPWARDS EQUILATERAL ARROWHEADBLACK RI" + - "GHTWARDS EQUILATERAL ARROWHEADBLACK DOWNWARDS EQUILATERAL ARROWHEADDOWNW" + - "ARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDSDOWNWARDS TRIANGLE-HEA" + - "DED ARROW WITH LONG TIP RIGHTWARDSUPWARDS TRIANGLE-HEADED ARROW WITH LON" + - "G TIP LEFTWARDSUPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDSLEF" + - "TWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDSRIGHTWARDS TRIANGLE-HE" + - "ADED ARROW WITH LONG TIP UPWARDSLEFTWARDS TRIANGLE-HEADED ARROW WITH LON" + - "G TIP DOWNWARDSRIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDSB" + - "LACK CURVED DOWNWARDS AND LEFTWARDS ARROWBLACK CURVED DOWNWARDS AND RIGH" + - "TWARDS ARROWBLACK CURVED UPWARDS AND LEFTWARDS ARROWBLACK CURVED UPWARDS" + - " AND RIGHTWARDS ARROWBLACK CURVED LEFTWARDS AND UPWARDS ARROWBLACK CURVE" + - "D RIGHTWARDS AND UPWARDS ARROWBLACK CURVED LEFTWARDS AND DOWNWARDS ARROW" + - "BLACK CURVED RIGHTWARDS AND DOWNWARDS ARROWRIBBON ARROW DOWN LEFTRIBBON " + - "ARROW DOWN RIGHTRIBBON ARROW UP LEFTRIBBON ARROW UP RIGHTRIBBON ARROW LE" + - "FT UPRIBBON ARROW RIGHT UPRIBBON ARROW LEFT DOWNRIBBON ARROW RIGHT DOWNU" + - "PWARDS WHITE ARROW FROM BAR WITH HORIZONTAL BARUP ARROWHEAD IN A RECTANG" + - "LE BOXBALLOT BOX WITH LIGHT XCIRCLED XCIRCLED BOLD XBLACK SQUARE CENTRED" + - "BLACK DIAMOND CENTREDTURNED BLACK PENTAGONHORIZONTAL BLACK OCTAGONBLACK " + - "OCTAGONBLACK MEDIUM UP-POINTING TRIANGLE CENTREDBLACK MEDIUM DOWN-POINTI" + - "NG TRIANGLE CENTREDBLACK MEDIUM LEFT-POINTING TRIANGLE CENTREDBLACK MEDI" + - "UM RIGHT-POINTING TRIANGLE CENTREDTOP HALF BLACK CIRCLEBOTTOM HALF BLACK" + - " CIRCLELIGHT FOUR POINTED BLACK CUSPROTATED LIGHT FOUR POINTED BLACK CUS" + - "PWHITE FOUR POINTED CUSPROTATED WHITE FOUR POINTED CUSPSQUARE POSITION I" + - "NDICATORUNCERTAINTY SIGNLEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHE" + - "ADSUPWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADSRIGHTWARDS TWO-HEADE") + ("" + - "D ARROW WITH TRIANGLE ARROWHEADSDOWNWARDS TWO-HEADED ARROW WITH TRIANGLE" + - " ARROWHEADSGLAGOLITIC CAPITAL LETTER AZUGLAGOLITIC CAPITAL LETTER BUKYGL" + - "AGOLITIC CAPITAL LETTER VEDEGLAGOLITIC CAPITAL LETTER GLAGOLIGLAGOLITIC " + - "CAPITAL LETTER DOBROGLAGOLITIC CAPITAL LETTER YESTUGLAGOLITIC CAPITAL LE" + - "TTER ZHIVETEGLAGOLITIC CAPITAL LETTER DZELOGLAGOLITIC CAPITAL LETTER ZEM" + - "LJAGLAGOLITIC CAPITAL LETTER IZHEGLAGOLITIC CAPITAL LETTER INITIAL IZHEG" + - "LAGOLITIC CAPITAL LETTER IGLAGOLITIC CAPITAL LETTER DJERVIGLAGOLITIC CAP" + - "ITAL LETTER KAKOGLAGOLITIC CAPITAL LETTER LJUDIJEGLAGOLITIC CAPITAL LETT" + - "ER MYSLITEGLAGOLITIC CAPITAL LETTER NASHIGLAGOLITIC CAPITAL LETTER ONUGL" + - "AGOLITIC CAPITAL LETTER POKOJIGLAGOLITIC CAPITAL LETTER RITSIGLAGOLITIC " + - "CAPITAL LETTER SLOVOGLAGOLITIC CAPITAL LETTER TVRIDOGLAGOLITIC CAPITAL L" + - "ETTER UKUGLAGOLITIC CAPITAL LETTER FRITUGLAGOLITIC CAPITAL LETTER HERUGL" + - "AGOLITIC CAPITAL LETTER OTUGLAGOLITIC CAPITAL LETTER PEGLAGOLITIC CAPITA" + - "L LETTER SHTAGLAGOLITIC CAPITAL LETTER TSIGLAGOLITIC CAPITAL LETTER CHRI" + - "VIGLAGOLITIC CAPITAL LETTER SHAGLAGOLITIC CAPITAL LETTER YERUGLAGOLITIC " + - "CAPITAL LETTER YERIGLAGOLITIC CAPITAL LETTER YATIGLAGOLITIC CAPITAL LETT" + - "ER SPIDERY HAGLAGOLITIC CAPITAL LETTER YUGLAGOLITIC CAPITAL LETTER SMALL" + - " YUSGLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAILGLAGOLITIC CAPITAL LETT" + - "ER YOGLAGOLITIC CAPITAL LETTER IOTATED SMALL YUSGLAGOLITIC CAPITAL LETTE" + - "R BIG YUSGLAGOLITIC CAPITAL LETTER IOTATED BIG YUSGLAGOLITIC CAPITAL LET" + - "TER FITAGLAGOLITIC CAPITAL LETTER IZHITSAGLAGOLITIC CAPITAL LETTER SHTAP" + - "ICGLAGOLITIC CAPITAL LETTER TROKUTASTI AGLAGOLITIC CAPITAL LETTER LATINA" + - "TE MYSLITEGLAGOLITIC SMALL LETTER AZUGLAGOLITIC SMALL LETTER BUKYGLAGOLI" + - "TIC SMALL LETTER VEDEGLAGOLITIC SMALL LETTER GLAGOLIGLAGOLITIC SMALL LET" + - "TER DOBROGLAGOLITIC SMALL LETTER YESTUGLAGOLITIC SMALL LETTER ZHIVETEGLA" + - "GOLITIC SMALL LETTER DZELOGLAGOLITIC SMALL LETTER ZEMLJAGLAGOLITIC SMALL" + - " LETTER IZHEGLAGOLITIC SMALL LETTER INITIAL IZHEGLAGOLITIC SMALL LETTER " + - "IGLAGOLITIC SMALL LETTER DJERVIGLAGOLITIC SMALL LETTER KAKOGLAGOLITIC SM" + - "ALL LETTER LJUDIJEGLAGOLITIC SMALL LETTER MYSLITEGLAGOLITIC SMALL LETTER" + - " NASHIGLAGOLITIC SMALL LETTER ONUGLAGOLITIC SMALL LETTER POKOJIGLAGOLITI" + - "C SMALL LETTER RITSIGLAGOLITIC SMALL LETTER SLOVOGLAGOLITIC SMALL LETTER" + - " TVRIDOGLAGOLITIC SMALL LETTER UKUGLAGOLITIC SMALL LETTER FRITUGLAGOLITI" + - "C SMALL LETTER HERUGLAGOLITIC SMALL LETTER OTUGLAGOLITIC SMALL LETTER PE" + - "GLAGOLITIC SMALL LETTER SHTAGLAGOLITIC SMALL LETTER TSIGLAGOLITIC SMALL " + - "LETTER CHRIVIGLAGOLITIC SMALL LETTER SHAGLAGOLITIC SMALL LETTER YERUGLAG" + - "OLITIC SMALL LETTER YERIGLAGOLITIC SMALL LETTER YATIGLAGOLITIC SMALL LET" + - "TER SPIDERY HAGLAGOLITIC SMALL LETTER YUGLAGOLITIC SMALL LETTER SMALL YU" + - "SGLAGOLITIC SMALL LETTER SMALL YUS WITH TAILGLAGOLITIC SMALL LETTER YOGL" + - "AGOLITIC SMALL LETTER IOTATED SMALL YUSGLAGOLITIC SMALL LETTER BIG YUSGL" + - "AGOLITIC SMALL LETTER IOTATED BIG YUSGLAGOLITIC SMALL LETTER FITAGLAGOLI" + - "TIC SMALL LETTER IZHITSAGLAGOLITIC SMALL LETTER SHTAPICGLAGOLITIC SMALL " + - "LETTER TROKUTASTI AGLAGOLITIC SMALL LETTER LATINATE MYSLITELATIN CAPITAL" + - " LETTER L WITH DOUBLE BARLATIN SMALL LETTER L WITH DOUBLE BARLATIN CAPIT" + - "AL LETTER L WITH MIDDLE TILDELATIN CAPITAL LETTER P WITH STROKELATIN CAP" + - "ITAL LETTER R WITH TAILLATIN SMALL LETTER A WITH STROKELATIN SMALL LETTE" + - "R T WITH DIAGONAL STROKELATIN CAPITAL LETTER H WITH DESCENDERLATIN SMALL" + - " LETTER H WITH DESCENDERLATIN CAPITAL LETTER K WITH DESCENDERLATIN SMALL" + - " LETTER K WITH DESCENDERLATIN CAPITAL LETTER Z WITH DESCENDERLATIN SMALL" + - " LETTER Z WITH DESCENDERLATIN CAPITAL LETTER ALPHALATIN CAPITAL LETTER M" + - " WITH HOOKLATIN CAPITAL LETTER TURNED ALATIN CAPITAL LETTER TURNED ALPHA" + - "LATIN SMALL LETTER V WITH RIGHT HOOKLATIN CAPITAL LETTER W WITH HOOKLATI" + - "N SMALL LETTER W WITH HOOKLATIN SMALL LETTER V WITH CURLLATIN CAPITAL LE" + - "TTER HALF HLATIN SMALL LETTER HALF HLATIN SMALL LETTER TAILLESS PHILATIN" + - " SMALL LETTER E WITH NOTCHLATIN SMALL LETTER TURNED R WITH TAILLATIN SMA" + - "LL LETTER O WITH LOW RING INSIDELATIN LETTER SMALL CAPITAL TURNED ELATIN" + - " SUBSCRIPT SMALL LETTER JMODIFIER LETTER CAPITAL VLATIN CAPITAL LETTER S" + - " WITH SWASH TAILLATIN CAPITAL LETTER Z WITH SWASH TAILCOPTIC CAPITAL LET" + - "TER ALFACOPTIC SMALL LETTER ALFACOPTIC CAPITAL LETTER VIDACOPTIC SMALL L" + - "ETTER VIDACOPTIC CAPITAL LETTER GAMMACOPTIC SMALL LETTER GAMMACOPTIC CAP" + - "ITAL LETTER DALDACOPTIC SMALL LETTER DALDACOPTIC CAPITAL LETTER EIECOPTI" + - "C SMALL LETTER EIECOPTIC CAPITAL LETTER SOUCOPTIC SMALL LETTER SOUCOPTIC" + - " CAPITAL LETTER ZATACOPTIC SMALL LETTER ZATACOPTIC CAPITAL LETTER HATECO" + - "PTIC SMALL LETTER HATECOPTIC CAPITAL LETTER THETHECOPTIC SMALL LETTER TH" + - "ETHECOPTIC CAPITAL LETTER IAUDACOPTIC SMALL LETTER IAUDACOPTIC CAPITAL L") + ("" + - "ETTER KAPACOPTIC SMALL LETTER KAPACOPTIC CAPITAL LETTER LAULACOPTIC SMAL" + - "L LETTER LAULACOPTIC CAPITAL LETTER MICOPTIC SMALL LETTER MICOPTIC CAPIT" + - "AL LETTER NICOPTIC SMALL LETTER NICOPTIC CAPITAL LETTER KSICOPTIC SMALL " + - "LETTER KSICOPTIC CAPITAL LETTER OCOPTIC SMALL LETTER OCOPTIC CAPITAL LET" + - "TER PICOPTIC SMALL LETTER PICOPTIC CAPITAL LETTER ROCOPTIC SMALL LETTER " + - "ROCOPTIC CAPITAL LETTER SIMACOPTIC SMALL LETTER SIMACOPTIC CAPITAL LETTE" + - "R TAUCOPTIC SMALL LETTER TAUCOPTIC CAPITAL LETTER UACOPTIC SMALL LETTER " + - "UACOPTIC CAPITAL LETTER FICOPTIC SMALL LETTER FICOPTIC CAPITAL LETTER KH" + - "ICOPTIC SMALL LETTER KHICOPTIC CAPITAL LETTER PSICOPTIC SMALL LETTER PSI" + - "COPTIC CAPITAL LETTER OOUCOPTIC SMALL LETTER OOUCOPTIC CAPITAL LETTER DI" + - "ALECT-P ALEFCOPTIC SMALL LETTER DIALECT-P ALEFCOPTIC CAPITAL LETTER OLD " + - "COPTIC AINCOPTIC SMALL LETTER OLD COPTIC AINCOPTIC CAPITAL LETTER CRYPTO" + - "GRAMMIC EIECOPTIC SMALL LETTER CRYPTOGRAMMIC EIECOPTIC CAPITAL LETTER DI" + - "ALECT-P KAPACOPTIC SMALL LETTER DIALECT-P KAPACOPTIC CAPITAL LETTER DIAL" + - "ECT-P NICOPTIC SMALL LETTER DIALECT-P NICOPTIC CAPITAL LETTER CRYPTOGRAM" + - "MIC NICOPTIC SMALL LETTER CRYPTOGRAMMIC NICOPTIC CAPITAL LETTER OLD COPT" + - "IC OOUCOPTIC SMALL LETTER OLD COPTIC OOUCOPTIC CAPITAL LETTER SAMPICOPTI" + - "C SMALL LETTER SAMPICOPTIC CAPITAL LETTER CROSSED SHEICOPTIC SMALL LETTE" + - "R CROSSED SHEICOPTIC CAPITAL LETTER OLD COPTIC SHEICOPTIC SMALL LETTER O" + - "LD COPTIC SHEICOPTIC CAPITAL LETTER OLD COPTIC ESHCOPTIC SMALL LETTER OL" + - "D COPTIC ESHCOPTIC CAPITAL LETTER AKHMIMIC KHEICOPTIC SMALL LETTER AKHMI" + - "MIC KHEICOPTIC CAPITAL LETTER DIALECT-P HORICOPTIC SMALL LETTER DIALECT-" + - "P HORICOPTIC CAPITAL LETTER OLD COPTIC HORICOPTIC SMALL LETTER OLD COPTI" + - "C HORICOPTIC CAPITAL LETTER OLD COPTIC HACOPTIC SMALL LETTER OLD COPTIC " + - "HACOPTIC CAPITAL LETTER L-SHAPED HACOPTIC SMALL LETTER L-SHAPED HACOPTIC" + - " CAPITAL LETTER OLD COPTIC HEICOPTIC SMALL LETTER OLD COPTIC HEICOPTIC C" + - "APITAL LETTER OLD COPTIC HATCOPTIC SMALL LETTER OLD COPTIC HATCOPTIC CAP" + - "ITAL LETTER OLD COPTIC GANGIACOPTIC SMALL LETTER OLD COPTIC GANGIACOPTIC" + - " CAPITAL LETTER OLD COPTIC DJACOPTIC SMALL LETTER OLD COPTIC DJACOPTIC C" + - "APITAL LETTER OLD COPTIC SHIMACOPTIC SMALL LETTER OLD COPTIC SHIMACOPTIC" + - " CAPITAL LETTER OLD NUBIAN SHIMACOPTIC SMALL LETTER OLD NUBIAN SHIMACOPT" + - "IC CAPITAL LETTER OLD NUBIAN NGICOPTIC SMALL LETTER OLD NUBIAN NGICOPTIC" + - " CAPITAL LETTER OLD NUBIAN NYICOPTIC SMALL LETTER OLD NUBIAN NYICOPTIC C" + - "APITAL LETTER OLD NUBIAN WAUCOPTIC SMALL LETTER OLD NUBIAN WAUCOPTIC SYM" + - "BOL KAICOPTIC SYMBOL MI ROCOPTIC SYMBOL PI ROCOPTIC SYMBOL STAUROSCOPTIC" + - " SYMBOL TAU ROCOPTIC SYMBOL KHI ROCOPTIC SYMBOL SHIMA SIMACOPTIC CAPITAL" + - " LETTER CRYPTOGRAMMIC SHEICOPTIC SMALL LETTER CRYPTOGRAMMIC SHEICOPTIC C" + - "APITAL LETTER CRYPTOGRAMMIC GANGIACOPTIC SMALL LETTER CRYPTOGRAMMIC GANG" + - "IACOPTIC COMBINING NI ABOVECOPTIC COMBINING SPIRITUS ASPERCOPTIC COMBINI" + - "NG SPIRITUS LENISCOPTIC CAPITAL LETTER BOHAIRIC KHEICOPTIC SMALL LETTER " + - "BOHAIRIC KHEICOPTIC OLD NUBIAN FULL STOPCOPTIC OLD NUBIAN DIRECT QUESTIO" + - "N MARKCOPTIC OLD NUBIAN INDIRECT QUESTION MARKCOPTIC OLD NUBIAN VERSE DI" + - "VIDERCOPTIC FRACTION ONE HALFCOPTIC FULL STOPCOPTIC MORPHOLOGICAL DIVIDE" + - "RGEORGIAN SMALL LETTER ANGEORGIAN SMALL LETTER BANGEORGIAN SMALL LETTER " + - "GANGEORGIAN SMALL LETTER DONGEORGIAN SMALL LETTER ENGEORGIAN SMALL LETTE" + - "R VINGEORGIAN SMALL LETTER ZENGEORGIAN SMALL LETTER TANGEORGIAN SMALL LE" + - "TTER INGEORGIAN SMALL LETTER KANGEORGIAN SMALL LETTER LASGEORGIAN SMALL " + - "LETTER MANGEORGIAN SMALL LETTER NARGEORGIAN SMALL LETTER ONGEORGIAN SMAL" + - "L LETTER PARGEORGIAN SMALL LETTER ZHARGEORGIAN SMALL LETTER RAEGEORGIAN " + - "SMALL LETTER SANGEORGIAN SMALL LETTER TARGEORGIAN SMALL LETTER UNGEORGIA" + - "N SMALL LETTER PHARGEORGIAN SMALL LETTER KHARGEORGIAN SMALL LETTER GHANG" + - "EORGIAN SMALL LETTER QARGEORGIAN SMALL LETTER SHINGEORGIAN SMALL LETTER " + - "CHINGEORGIAN SMALL LETTER CANGEORGIAN SMALL LETTER JILGEORGIAN SMALL LET" + - "TER CILGEORGIAN SMALL LETTER CHARGEORGIAN SMALL LETTER XANGEORGIAN SMALL" + - " LETTER JHANGEORGIAN SMALL LETTER HAEGEORGIAN SMALL LETTER HEGEORGIAN SM" + - "ALL LETTER HIEGEORGIAN SMALL LETTER WEGEORGIAN SMALL LETTER HARGEORGIAN " + - "SMALL LETTER HOEGEORGIAN SMALL LETTER YNGEORGIAN SMALL LETTER AENTIFINAG" + - "H LETTER YATIFINAGH LETTER YABTIFINAGH LETTER YABHTIFINAGH LETTER YAGTIF" + - "INAGH LETTER YAGHHTIFINAGH LETTER BERBER ACADEMY YAJTIFINAGH LETTER YAJT" + - "IFINAGH LETTER YADTIFINAGH LETTER YADHTIFINAGH LETTER YADDTIFINAGH LETTE" + - "R YADDHTIFINAGH LETTER YEYTIFINAGH LETTER YAFTIFINAGH LETTER YAKTIFINAGH" + - " LETTER TUAREG YAKTIFINAGH LETTER YAKHHTIFINAGH LETTER YAHTIFINAGH LETTE" + - "R BERBER ACADEMY YAHTIFINAGH LETTER TUAREG YAHTIFINAGH LETTER YAHHTIFINA" + - "GH LETTER YAATIFINAGH LETTER YAKHTIFINAGH LETTER TUAREG YAKHTIFINAGH LET") + ("" + - "TER YAQTIFINAGH LETTER TUAREG YAQTIFINAGH LETTER YITIFINAGH LETTER YAZHT" + - "IFINAGH LETTER AHAGGAR YAZHTIFINAGH LETTER TUAREG YAZHTIFINAGH LETTER YA" + - "LTIFINAGH LETTER YAMTIFINAGH LETTER YANTIFINAGH LETTER TUAREG YAGNTIFINA" + - "GH LETTER TUAREG YANGTIFINAGH LETTER YAPTIFINAGH LETTER YUTIFINAGH LETTE" + - "R YARTIFINAGH LETTER YARRTIFINAGH LETTER YAGHTIFINAGH LETTER TUAREG YAGH" + - "TIFINAGH LETTER AYER YAGHTIFINAGH LETTER YASTIFINAGH LETTER YASSTIFINAGH" + - " LETTER YASHTIFINAGH LETTER YATTIFINAGH LETTER YATHTIFINAGH LETTER YACHT" + - "IFINAGH LETTER YATTTIFINAGH LETTER YAVTIFINAGH LETTER YAWTIFINAGH LETTER" + - " YAYTIFINAGH LETTER YAZTIFINAGH LETTER TAWELLEMET YAZTIFINAGH LETTER YAZ" + - "ZTIFINAGH LETTER YETIFINAGH LETTER YOTIFINAGH MODIFIER LETTER LABIALIZAT" + - "ION MARKTIFINAGH SEPARATOR MARKTIFINAGH CONSONANT JOINERETHIOPIC SYLLABL" + - "E LOAETHIOPIC SYLLABLE MOAETHIOPIC SYLLABLE ROAETHIOPIC SYLLABLE SOAETHI" + - "OPIC SYLLABLE SHOAETHIOPIC SYLLABLE BOAETHIOPIC SYLLABLE TOAETHIOPIC SYL" + - "LABLE COAETHIOPIC SYLLABLE NOAETHIOPIC SYLLABLE NYOAETHIOPIC SYLLABLE GL" + - "OTTAL OAETHIOPIC SYLLABLE ZOAETHIOPIC SYLLABLE DOAETHIOPIC SYLLABLE DDOA" + - "ETHIOPIC SYLLABLE JOAETHIOPIC SYLLABLE THOAETHIOPIC SYLLABLE CHOAETHIOPI" + - "C SYLLABLE PHOAETHIOPIC SYLLABLE POAETHIOPIC SYLLABLE GGWAETHIOPIC SYLLA" + - "BLE GGWIETHIOPIC SYLLABLE GGWEEETHIOPIC SYLLABLE GGWEETHIOPIC SYLLABLE S" + - "SAETHIOPIC SYLLABLE SSUETHIOPIC SYLLABLE SSIETHIOPIC SYLLABLE SSAAETHIOP" + - "IC SYLLABLE SSEEETHIOPIC SYLLABLE SSEETHIOPIC SYLLABLE SSOETHIOPIC SYLLA" + - "BLE CCAETHIOPIC SYLLABLE CCUETHIOPIC SYLLABLE CCIETHIOPIC SYLLABLE CCAAE" + - "THIOPIC SYLLABLE CCEEETHIOPIC SYLLABLE CCEETHIOPIC SYLLABLE CCOETHIOPIC " + - "SYLLABLE ZZAETHIOPIC SYLLABLE ZZUETHIOPIC SYLLABLE ZZIETHIOPIC SYLLABLE " + - "ZZAAETHIOPIC SYLLABLE ZZEEETHIOPIC SYLLABLE ZZEETHIOPIC SYLLABLE ZZOETHI" + - "OPIC SYLLABLE CCHAETHIOPIC SYLLABLE CCHUETHIOPIC SYLLABLE CCHIETHIOPIC S" + - "YLLABLE CCHAAETHIOPIC SYLLABLE CCHEEETHIOPIC SYLLABLE CCHEETHIOPIC SYLLA" + - "BLE CCHOETHIOPIC SYLLABLE QYAETHIOPIC SYLLABLE QYUETHIOPIC SYLLABLE QYIE" + - "THIOPIC SYLLABLE QYAAETHIOPIC SYLLABLE QYEEETHIOPIC SYLLABLE QYEETHIOPIC" + - " SYLLABLE QYOETHIOPIC SYLLABLE KYAETHIOPIC SYLLABLE KYUETHIOPIC SYLLABLE" + - " KYIETHIOPIC SYLLABLE KYAAETHIOPIC SYLLABLE KYEEETHIOPIC SYLLABLE KYEETH" + - "IOPIC SYLLABLE KYOETHIOPIC SYLLABLE XYAETHIOPIC SYLLABLE XYUETHIOPIC SYL" + - "LABLE XYIETHIOPIC SYLLABLE XYAAETHIOPIC SYLLABLE XYEEETHIOPIC SYLLABLE X" + - "YEETHIOPIC SYLLABLE XYOETHIOPIC SYLLABLE GYAETHIOPIC SYLLABLE GYUETHIOPI" + - "C SYLLABLE GYIETHIOPIC SYLLABLE GYAAETHIOPIC SYLLABLE GYEEETHIOPIC SYLLA" + - "BLE GYEETHIOPIC SYLLABLE GYOCOMBINING CYRILLIC LETTER BECOMBINING CYRILL" + - "IC LETTER VECOMBINING CYRILLIC LETTER GHECOMBINING CYRILLIC LETTER DECOM" + - "BINING CYRILLIC LETTER ZHECOMBINING CYRILLIC LETTER ZECOMBINING CYRILLIC" + - " LETTER KACOMBINING CYRILLIC LETTER ELCOMBINING CYRILLIC LETTER EMCOMBIN" + - "ING CYRILLIC LETTER ENCOMBINING CYRILLIC LETTER OCOMBINING CYRILLIC LETT" + - "ER PECOMBINING CYRILLIC LETTER ERCOMBINING CYRILLIC LETTER ESCOMBINING C" + - "YRILLIC LETTER TECOMBINING CYRILLIC LETTER HACOMBINING CYRILLIC LETTER T" + - "SECOMBINING CYRILLIC LETTER CHECOMBINING CYRILLIC LETTER SHACOMBINING CY" + - "RILLIC LETTER SHCHACOMBINING CYRILLIC LETTER FITACOMBINING CYRILLIC LETT" + - "ER ES-TECOMBINING CYRILLIC LETTER ACOMBINING CYRILLIC LETTER IECOMBINING" + - " CYRILLIC LETTER DJERVCOMBINING CYRILLIC LETTER MONOGRAPH UKCOMBINING CY" + - "RILLIC LETTER YATCOMBINING CYRILLIC LETTER YUCOMBINING CYRILLIC LETTER I" + - "OTIFIED ACOMBINING CYRILLIC LETTER LITTLE YUSCOMBINING CYRILLIC LETTER B" + - "IG YUSCOMBINING CYRILLIC LETTER IOTIFIED BIG YUSRIGHT ANGLE SUBSTITUTION" + - " MARKERRIGHT ANGLE DOTTED SUBSTITUTION MARKERLEFT SUBSTITUTION BRACKETRI" + - "GHT SUBSTITUTION BRACKETLEFT DOTTED SUBSTITUTION BRACKETRIGHT DOTTED SUB" + - "STITUTION BRACKETRAISED INTERPOLATION MARKERRAISED DOTTED INTERPOLATION " + - "MARKERDOTTED TRANSPOSITION MARKERLEFT TRANSPOSITION BRACKETRIGHT TRANSPO" + - "SITION BRACKETRAISED SQUARELEFT RAISED OMISSION BRACKETRIGHT RAISED OMIS" + - "SION BRACKETEDITORIAL CORONISPARAGRAPHOSFORKED PARAGRAPHOSREVERSED FORKE" + - "D PARAGRAPHOSHYPODIASTOLEDOTTED OBELOSDOWNWARDS ANCORAUPWARDS ANCORADOTT" + - "ED RIGHT-POINTING ANGLEDOUBLE OBLIQUE HYPHENINVERTED INTERROBANGPALM BRA" + - "NCHHYPHEN WITH DIAERESISTILDE WITH RING ABOVELEFT LOW PARAPHRASE BRACKET" + - "RIGHT LOW PARAPHRASE BRACKETTILDE WITH DOT ABOVETILDE WITH DOT BELOWLEFT" + - " VERTICAL BAR WITH QUILLRIGHT VERTICAL BAR WITH QUILLTOP LEFT HALF BRACK" + - "ETTOP RIGHT HALF BRACKETBOTTOM LEFT HALF BRACKETBOTTOM RIGHT HALF BRACKE" + - "TLEFT SIDEWAYS U BRACKETRIGHT SIDEWAYS U BRACKETLEFT DOUBLE PARENTHESISR" + - "IGHT DOUBLE PARENTHESISTWO DOTS OVER ONE DOT PUNCTUATIONONE DOT OVER TWO" + - " DOTS PUNCTUATIONSQUARED FOUR DOT PUNCTUATIONFIVE DOT MARKREVERSED QUEST" + - "ION MARKVERTICAL TILDERING POINTWORD SEPARATOR MIDDLE DOTTURNED COMMARAI") + ("" + - "SED DOTRAISED COMMATURNED SEMICOLONDAGGER WITH LEFT GUARDDAGGER WITH RIG" + - "HT GUARDTURNED DAGGERTOP HALF SECTION SIGNTWO-EM DASHTHREE-EM DASHSTENOG" + - "RAPHIC FULL STOPVERTICAL SIX DOTSWIGGLY VERTICAL LINECAPITULUMDOUBLE HYP" + - "HENREVERSED COMMADOUBLE LOW-REVERSED-9 QUOTATION MARKDASH WITH LEFT UPTU" + - "RNDOUBLE SUSPENSION MARKCJK RADICAL REPEATCJK RADICAL CLIFFCJK RADICAL S" + - "ECOND ONECJK RADICAL SECOND TWOCJK RADICAL SECOND THREECJK RADICAL PERSO" + - "NCJK RADICAL BOXCJK RADICAL TABLECJK RADICAL KNIFE ONECJK RADICAL KNIFE " + - "TWOCJK RADICAL DIVINATIONCJK RADICAL SEALCJK RADICAL SMALL ONECJK RADICA" + - "L SMALL TWOCJK RADICAL LAME ONECJK RADICAL LAME TWOCJK RADICAL LAME THRE" + - "ECJK RADICAL LAME FOURCJK RADICAL SNAKECJK RADICAL THREADCJK RADICAL SNO" + - "UT ONECJK RADICAL SNOUT TWOCJK RADICAL HEART ONECJK RADICAL HEART TWOCJK" + - " RADICAL HANDCJK RADICAL RAPCJK RADICAL CHOKECJK RADICAL SUNCJK RADICAL " + - "MOONCJK RADICAL DEATHCJK RADICAL MOTHERCJK RADICAL CIVILIANCJK RADICAL W" + - "ATER ONECJK RADICAL WATER TWOCJK RADICAL FIRECJK RADICAL PAW ONECJK RADI" + - "CAL PAW TWOCJK RADICAL SIMPLIFIED HALF TREE TRUNKCJK RADICAL COWCJK RADI" + - "CAL DOGCJK RADICAL JADECJK RADICAL BOLT OF CLOTHCJK RADICAL EYECJK RADIC" + - "AL SPIRIT ONECJK RADICAL SPIRIT TWOCJK RADICAL BAMBOOCJK RADICAL SILKCJK" + - " RADICAL C-SIMPLIFIED SILKCJK RADICAL NET ONECJK RADICAL NET TWOCJK RADI" + - "CAL NET THREECJK RADICAL NET FOURCJK RADICAL MESHCJK RADICAL SHEEPCJK RA" + - "DICAL RAMCJK RADICAL EWECJK RADICAL OLDCJK RADICAL BRUSH ONECJK RADICAL " + - "BRUSH TWOCJK RADICAL MEATCJK RADICAL MORTARCJK RADICAL GRASS ONECJK RADI" + - "CAL GRASS TWOCJK RADICAL GRASS THREECJK RADICAL TIGERCJK RADICAL CLOTHES" + - "CJK RADICAL WEST ONECJK RADICAL WEST TWOCJK RADICAL C-SIMPLIFIED SEECJK " + - "RADICAL SIMPLIFIED HORNCJK RADICAL HORNCJK RADICAL C-SIMPLIFIED SPEECHCJ" + - "K RADICAL C-SIMPLIFIED SHELLCJK RADICAL FOOTCJK RADICAL C-SIMPLIFIED CAR" + - "TCJK RADICAL SIMPLIFIED WALKCJK RADICAL WALK ONECJK RADICAL WALK TWOCJK " + - "RADICAL CITYCJK RADICAL C-SIMPLIFIED GOLDCJK RADICAL LONG ONECJK RADICAL" + - " LONG TWOCJK RADICAL C-SIMPLIFIED LONGCJK RADICAL C-SIMPLIFIED GATECJK R" + - "ADICAL MOUND ONECJK RADICAL MOUND TWOCJK RADICAL RAINCJK RADICAL BLUECJK" + - " RADICAL C-SIMPLIFIED TANNED LEATHERCJK RADICAL C-SIMPLIFIED LEAFCJK RAD" + - "ICAL C-SIMPLIFIED WINDCJK RADICAL C-SIMPLIFIED FLYCJK RADICAL EAT ONECJK" + - " RADICAL EAT TWOCJK RADICAL EAT THREECJK RADICAL C-SIMPLIFIED EATCJK RAD" + - "ICAL HEADCJK RADICAL C-SIMPLIFIED HORSECJK RADICAL BONECJK RADICAL GHOST" + - "CJK RADICAL C-SIMPLIFIED FISHCJK RADICAL C-SIMPLIFIED BIRDCJK RADICAL C-" + - "SIMPLIFIED SALTCJK RADICAL SIMPLIFIED WHEATCJK RADICAL SIMPLIFIED YELLOW" + - "CJK RADICAL C-SIMPLIFIED FROGCJK RADICAL J-SIMPLIFIED EVENCJK RADICAL C-" + - "SIMPLIFIED EVENCJK RADICAL J-SIMPLIFIED TOOTHCJK RADICAL C-SIMPLIFIED TO" + - "OTHCJK RADICAL J-SIMPLIFIED DRAGONCJK RADICAL C-SIMPLIFIED DRAGONCJK RAD" + - "ICAL TURTLECJK RADICAL J-SIMPLIFIED TURTLECJK RADICAL C-SIMPLIFIED TURTL" + - "EKANGXI RADICAL ONEKANGXI RADICAL LINEKANGXI RADICAL DOTKANGXI RADICAL S" + - "LASHKANGXI RADICAL SECONDKANGXI RADICAL HOOKKANGXI RADICAL TWOKANGXI RAD" + - "ICAL LIDKANGXI RADICAL MANKANGXI RADICAL LEGSKANGXI RADICAL ENTERKANGXI " + - "RADICAL EIGHTKANGXI RADICAL DOWN BOXKANGXI RADICAL COVERKANGXI RADICAL I" + - "CEKANGXI RADICAL TABLEKANGXI RADICAL OPEN BOXKANGXI RADICAL KNIFEKANGXI " + - "RADICAL POWERKANGXI RADICAL WRAPKANGXI RADICAL SPOONKANGXI RADICAL RIGHT" + - " OPEN BOXKANGXI RADICAL HIDING ENCLOSUREKANGXI RADICAL TENKANGXI RADICAL" + - " DIVINATIONKANGXI RADICAL SEALKANGXI RADICAL CLIFFKANGXI RADICAL PRIVATE" + - "KANGXI RADICAL AGAINKANGXI RADICAL MOUTHKANGXI RADICAL ENCLOSUREKANGXI R" + - "ADICAL EARTHKANGXI RADICAL SCHOLARKANGXI RADICAL GOKANGXI RADICAL GO SLO" + - "WLYKANGXI RADICAL EVENINGKANGXI RADICAL BIGKANGXI RADICAL WOMANKANGXI RA" + - "DICAL CHILDKANGXI RADICAL ROOFKANGXI RADICAL INCHKANGXI RADICAL SMALLKAN" + - "GXI RADICAL LAMEKANGXI RADICAL CORPSEKANGXI RADICAL SPROUTKANGXI RADICAL" + - " MOUNTAINKANGXI RADICAL RIVERKANGXI RADICAL WORKKANGXI RADICAL ONESELFKA" + - "NGXI RADICAL TURBANKANGXI RADICAL DRYKANGXI RADICAL SHORT THREADKANGXI R" + - "ADICAL DOTTED CLIFFKANGXI RADICAL LONG STRIDEKANGXI RADICAL TWO HANDSKAN" + - "GXI RADICAL SHOOTKANGXI RADICAL BOWKANGXI RADICAL SNOUTKANGXI RADICAL BR" + - "ISTLEKANGXI RADICAL STEPKANGXI RADICAL HEARTKANGXI RADICAL HALBERDKANGXI" + - " RADICAL DOORKANGXI RADICAL HANDKANGXI RADICAL BRANCHKANGXI RADICAL RAPK" + - "ANGXI RADICAL SCRIPTKANGXI RADICAL DIPPERKANGXI RADICAL AXEKANGXI RADICA" + - "L SQUAREKANGXI RADICAL NOTKANGXI RADICAL SUNKANGXI RADICAL SAYKANGXI RAD" + - "ICAL MOONKANGXI RADICAL TREEKANGXI RADICAL LACKKANGXI RADICAL STOPKANGXI" + - " RADICAL DEATHKANGXI RADICAL WEAPONKANGXI RADICAL DO NOTKANGXI RADICAL C" + - "OMPAREKANGXI RADICAL FURKANGXI RADICAL CLANKANGXI RADICAL STEAMKANGXI RA" + - "DICAL WATERKANGXI RADICAL FIREKANGXI RADICAL CLAWKANGXI RADICAL FATHERKA") + ("" + - "NGXI RADICAL DOUBLE XKANGXI RADICAL HALF TREE TRUNKKANGXI RADICAL SLICEK" + - "ANGXI RADICAL FANGKANGXI RADICAL COWKANGXI RADICAL DOGKANGXI RADICAL PRO" + - "FOUNDKANGXI RADICAL JADEKANGXI RADICAL MELONKANGXI RADICAL TILEKANGXI RA" + - "DICAL SWEETKANGXI RADICAL LIFEKANGXI RADICAL USEKANGXI RADICAL FIELDKANG" + - "XI RADICAL BOLT OF CLOTHKANGXI RADICAL SICKNESSKANGXI RADICAL DOTTED TEN" + - "TKANGXI RADICAL WHITEKANGXI RADICAL SKINKANGXI RADICAL DISHKANGXI RADICA" + - "L EYEKANGXI RADICAL SPEARKANGXI RADICAL ARROWKANGXI RADICAL STONEKANGXI " + - "RADICAL SPIRITKANGXI RADICAL TRACKKANGXI RADICAL GRAINKANGXI RADICAL CAV" + - "EKANGXI RADICAL STANDKANGXI RADICAL BAMBOOKANGXI RADICAL RICEKANGXI RADI" + - "CAL SILKKANGXI RADICAL JARKANGXI RADICAL NETKANGXI RADICAL SHEEPKANGXI R" + - "ADICAL FEATHERKANGXI RADICAL OLDKANGXI RADICAL ANDKANGXI RADICAL PLOWKAN" + - "GXI RADICAL EARKANGXI RADICAL BRUSHKANGXI RADICAL MEATKANGXI RADICAL MIN" + - "ISTERKANGXI RADICAL SELFKANGXI RADICAL ARRIVEKANGXI RADICAL MORTARKANGXI" + - " RADICAL TONGUEKANGXI RADICAL OPPOSEKANGXI RADICAL BOATKANGXI RADICAL ST" + - "OPPINGKANGXI RADICAL COLORKANGXI RADICAL GRASSKANGXI RADICAL TIGERKANGXI" + - " RADICAL INSECTKANGXI RADICAL BLOODKANGXI RADICAL WALK ENCLOSUREKANGXI R" + - "ADICAL CLOTHESKANGXI RADICAL WESTKANGXI RADICAL SEEKANGXI RADICAL HORNKA" + - "NGXI RADICAL SPEECHKANGXI RADICAL VALLEYKANGXI RADICAL BEANKANGXI RADICA" + - "L PIGKANGXI RADICAL BADGERKANGXI RADICAL SHELLKANGXI RADICAL REDKANGXI R" + - "ADICAL RUNKANGXI RADICAL FOOTKANGXI RADICAL BODYKANGXI RADICAL CARTKANGX" + - "I RADICAL BITTERKANGXI RADICAL MORNINGKANGXI RADICAL WALKKANGXI RADICAL " + - "CITYKANGXI RADICAL WINEKANGXI RADICAL DISTINGUISHKANGXI RADICAL VILLAGEK" + - "ANGXI RADICAL GOLDKANGXI RADICAL LONGKANGXI RADICAL GATEKANGXI RADICAL M" + - "OUNDKANGXI RADICAL SLAVEKANGXI RADICAL SHORT TAILED BIRDKANGXI RADICAL R" + - "AINKANGXI RADICAL BLUEKANGXI RADICAL WRONGKANGXI RADICAL FACEKANGXI RADI" + - "CAL LEATHERKANGXI RADICAL TANNED LEATHERKANGXI RADICAL LEEKKANGXI RADICA" + - "L SOUNDKANGXI RADICAL LEAFKANGXI RADICAL WINDKANGXI RADICAL FLYKANGXI RA" + - "DICAL EATKANGXI RADICAL HEADKANGXI RADICAL FRAGRANTKANGXI RADICAL HORSEK" + - "ANGXI RADICAL BONEKANGXI RADICAL TALLKANGXI RADICAL HAIRKANGXI RADICAL F" + - "IGHTKANGXI RADICAL SACRIFICIAL WINEKANGXI RADICAL CAULDRONKANGXI RADICAL" + - " GHOSTKANGXI RADICAL FISHKANGXI RADICAL BIRDKANGXI RADICAL SALTKANGXI RA" + - "DICAL DEERKANGXI RADICAL WHEATKANGXI RADICAL HEMPKANGXI RADICAL YELLOWKA" + - "NGXI RADICAL MILLETKANGXI RADICAL BLACKKANGXI RADICAL EMBROIDERYKANGXI R" + - "ADICAL FROGKANGXI RADICAL TRIPODKANGXI RADICAL DRUMKANGXI RADICAL RATKAN" + - "GXI RADICAL NOSEKANGXI RADICAL EVENKANGXI RADICAL TOOTHKANGXI RADICAL DR" + - "AGONKANGXI RADICAL TURTLEKANGXI RADICAL FLUTEIDEOGRAPHIC DESCRIPTION CHA" + - "RACTER LEFT TO RIGHTIDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOWIDEO" + - "GRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHTIDEOGRAPHIC DESCRI" + - "PTION CHARACTER ABOVE TO MIDDLE AND BELOWIDEOGRAPHIC DESCRIPTION CHARACT" + - "ER FULL SURROUNDIDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVEIDE" + - "OGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOWIDEOGRAPHIC DESCRIPTIO" + - "N CHARACTER SURROUND FROM LEFTIDEOGRAPHIC DESCRIPTION CHARACTER SURROUND" + - " FROM UPPER LEFTIDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RI" + - "GHTIDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFTIDEOGRAPHIC" + - " DESCRIPTION CHARACTER OVERLAIDIDEOGRAPHIC SPACEIDEOGRAPHIC COMMAIDEOGRA" + - "PHIC FULL STOPDITTO MARKJAPANESE INDUSTRIAL STANDARD SYMBOLIDEOGRAPHIC I" + - "TERATION MARKIDEOGRAPHIC CLOSING MARKIDEOGRAPHIC NUMBER ZEROLEFT ANGLE B" + - "RACKETRIGHT ANGLE BRACKETLEFT DOUBLE ANGLE BRACKETRIGHT DOUBLE ANGLE BRA" + - "CKETLEFT CORNER BRACKETRIGHT CORNER BRACKETLEFT WHITE CORNER BRACKETRIGH" + - "T WHITE CORNER BRACKETLEFT BLACK LENTICULAR BRACKETRIGHT BLACK LENTICULA" + - "R BRACKETPOSTAL MARKGETA MARKLEFT TORTOISE SHELL BRACKETRIGHT TORTOISE S" + - "HELL BRACKETLEFT WHITE LENTICULAR BRACKETRIGHT WHITE LENTICULAR BRACKETL" + - "EFT WHITE TORTOISE SHELL BRACKETRIGHT WHITE TORTOISE SHELL BRACKETLEFT W" + - "HITE SQUARE BRACKETRIGHT WHITE SQUARE BRACKETWAVE DASHREVERSED DOUBLE PR" + - "IME QUOTATION MARKDOUBLE PRIME QUOTATION MARKLOW DOUBLE PRIME QUOTATION " + - "MARKPOSTAL MARK FACEHANGZHOU NUMERAL ONEHANGZHOU NUMERAL TWOHANGZHOU NUM" + - "ERAL THREEHANGZHOU NUMERAL FOURHANGZHOU NUMERAL FIVEHANGZHOU NUMERAL SIX" + - "HANGZHOU NUMERAL SEVENHANGZHOU NUMERAL EIGHTHANGZHOU NUMERAL NINEIDEOGRA" + - "PHIC LEVEL TONE MARKIDEOGRAPHIC RISING TONE MARKIDEOGRAPHIC DEPARTING TO" + - "NE MARKIDEOGRAPHIC ENTERING TONE MARKHANGUL SINGLE DOT TONE MARKHANGUL D" + - "OUBLE DOT TONE MARKWAVY DASHVERTICAL KANA REPEAT MARKVERTICAL KANA REPEA" + - "T WITH VOICED SOUND MARKVERTICAL KANA REPEAT MARK UPPER HALFVERTICAL KAN" + - "A REPEAT WITH VOICED SOUND MARK UPPER HALFVERTICAL KANA REPEAT MARK LOWE" + - "R HALFCIRCLED POSTAL MARKIDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBO") + ("" + - "LHANGZHOU NUMERAL TENHANGZHOU NUMERAL TWENTYHANGZHOU NUMERAL THIRTYVERTI" + - "CAL IDEOGRAPHIC ITERATION MARKMASU MARKPART ALTERNATION MARKIDEOGRAPHIC " + - "VARIATION INDICATORIDEOGRAPHIC HALF FILL SPACEHIRAGANA LETTER SMALL AHIR" + - "AGANA LETTER AHIRAGANA LETTER SMALL IHIRAGANA LETTER IHIRAGANA LETTER SM" + - "ALL UHIRAGANA LETTER UHIRAGANA LETTER SMALL EHIRAGANA LETTER EHIRAGANA L" + - "ETTER SMALL OHIRAGANA LETTER OHIRAGANA LETTER KAHIRAGANA LETTER GAHIRAGA" + - "NA LETTER KIHIRAGANA LETTER GIHIRAGANA LETTER KUHIRAGANA LETTER GUHIRAGA" + - "NA LETTER KEHIRAGANA LETTER GEHIRAGANA LETTER KOHIRAGANA LETTER GOHIRAGA" + - "NA LETTER SAHIRAGANA LETTER ZAHIRAGANA LETTER SIHIRAGANA LETTER ZIHIRAGA" + - "NA LETTER SUHIRAGANA LETTER ZUHIRAGANA LETTER SEHIRAGANA LETTER ZEHIRAGA" + - "NA LETTER SOHIRAGANA LETTER ZOHIRAGANA LETTER TAHIRAGANA LETTER DAHIRAGA" + - "NA LETTER TIHIRAGANA LETTER DIHIRAGANA LETTER SMALL TUHIRAGANA LETTER TU" + - "HIRAGANA LETTER DUHIRAGANA LETTER TEHIRAGANA LETTER DEHIRAGANA LETTER TO" + - "HIRAGANA LETTER DOHIRAGANA LETTER NAHIRAGANA LETTER NIHIRAGANA LETTER NU" + - "HIRAGANA LETTER NEHIRAGANA LETTER NOHIRAGANA LETTER HAHIRAGANA LETTER BA" + - "HIRAGANA LETTER PAHIRAGANA LETTER HIHIRAGANA LETTER BIHIRAGANA LETTER PI" + - "HIRAGANA LETTER HUHIRAGANA LETTER BUHIRAGANA LETTER PUHIRAGANA LETTER HE" + - "HIRAGANA LETTER BEHIRAGANA LETTER PEHIRAGANA LETTER HOHIRAGANA LETTER BO" + - "HIRAGANA LETTER POHIRAGANA LETTER MAHIRAGANA LETTER MIHIRAGANA LETTER MU" + - "HIRAGANA LETTER MEHIRAGANA LETTER MOHIRAGANA LETTER SMALL YAHIRAGANA LET" + - "TER YAHIRAGANA LETTER SMALL YUHIRAGANA LETTER YUHIRAGANA LETTER SMALL YO" + - "HIRAGANA LETTER YOHIRAGANA LETTER RAHIRAGANA LETTER RIHIRAGANA LETTER RU" + - "HIRAGANA LETTER REHIRAGANA LETTER ROHIRAGANA LETTER SMALL WAHIRAGANA LET" + - "TER WAHIRAGANA LETTER WIHIRAGANA LETTER WEHIRAGANA LETTER WOHIRAGANA LET" + - "TER NHIRAGANA LETTER VUHIRAGANA LETTER SMALL KAHIRAGANA LETTER SMALL KEC" + - "OMBINING KATAKANA-HIRAGANA VOICED SOUND MARKCOMBINING KATAKANA-HIRAGANA " + - "SEMI-VOICED SOUND MARKKATAKANA-HIRAGANA VOICED SOUND MARKKATAKANA-HIRAGA" + - "NA SEMI-VOICED SOUND MARKHIRAGANA ITERATION MARKHIRAGANA VOICED ITERATIO" + - "N MARKHIRAGANA DIGRAPH YORIKATAKANA-HIRAGANA DOUBLE HYPHENKATAKANA LETTE" + - "R SMALL AKATAKANA LETTER AKATAKANA LETTER SMALL IKATAKANA LETTER IKATAKA" + - "NA LETTER SMALL UKATAKANA LETTER UKATAKANA LETTER SMALL EKATAKANA LETTER" + - " EKATAKANA LETTER SMALL OKATAKANA LETTER OKATAKANA LETTER KAKATAKANA LET" + - "TER GAKATAKANA LETTER KIKATAKANA LETTER GIKATAKANA LETTER KUKATAKANA LET" + - "TER GUKATAKANA LETTER KEKATAKANA LETTER GEKATAKANA LETTER KOKATAKANA LET" + - "TER GOKATAKANA LETTER SAKATAKANA LETTER ZAKATAKANA LETTER SIKATAKANA LET" + - "TER ZIKATAKANA LETTER SUKATAKANA LETTER ZUKATAKANA LETTER SEKATAKANA LET" + - "TER ZEKATAKANA LETTER SOKATAKANA LETTER ZOKATAKANA LETTER TAKATAKANA LET" + - "TER DAKATAKANA LETTER TIKATAKANA LETTER DIKATAKANA LETTER SMALL TUKATAKA" + - "NA LETTER TUKATAKANA LETTER DUKATAKANA LETTER TEKATAKANA LETTER DEKATAKA" + - "NA LETTER TOKATAKANA LETTER DOKATAKANA LETTER NAKATAKANA LETTER NIKATAKA" + - "NA LETTER NUKATAKANA LETTER NEKATAKANA LETTER NOKATAKANA LETTER HAKATAKA" + - "NA LETTER BAKATAKANA LETTER PAKATAKANA LETTER HIKATAKANA LETTER BIKATAKA" + - "NA LETTER PIKATAKANA LETTER HUKATAKANA LETTER BUKATAKANA LETTER PUKATAKA" + - "NA LETTER HEKATAKANA LETTER BEKATAKANA LETTER PEKATAKANA LETTER HOKATAKA" + - "NA LETTER BOKATAKANA LETTER POKATAKANA LETTER MAKATAKANA LETTER MIKATAKA" + - "NA LETTER MUKATAKANA LETTER MEKATAKANA LETTER MOKATAKANA LETTER SMALL YA" + - "KATAKANA LETTER YAKATAKANA LETTER SMALL YUKATAKANA LETTER YUKATAKANA LET" + - "TER SMALL YOKATAKANA LETTER YOKATAKANA LETTER RAKATAKANA LETTER RIKATAKA" + - "NA LETTER RUKATAKANA LETTER REKATAKANA LETTER ROKATAKANA LETTER SMALL WA" + - "KATAKANA LETTER WAKATAKANA LETTER WIKATAKANA LETTER WEKATAKANA LETTER WO" + - "KATAKANA LETTER NKATAKANA LETTER VUKATAKANA LETTER SMALL KAKATAKANA LETT" + - "ER SMALL KEKATAKANA LETTER VAKATAKANA LETTER VIKATAKANA LETTER VEKATAKAN" + - "A LETTER VOKATAKANA MIDDLE DOTKATAKANA-HIRAGANA PROLONGED SOUND MARKKATA" + - "KANA ITERATION MARKKATAKANA VOICED ITERATION MARKKATAKANA DIGRAPH KOTOBO" + - "POMOFO LETTER BBOPOMOFO LETTER PBOPOMOFO LETTER MBOPOMOFO LETTER FBOPOMO" + - "FO LETTER DBOPOMOFO LETTER TBOPOMOFO LETTER NBOPOMOFO LETTER LBOPOMOFO L" + - "ETTER GBOPOMOFO LETTER KBOPOMOFO LETTER HBOPOMOFO LETTER JBOPOMOFO LETTE" + - "R QBOPOMOFO LETTER XBOPOMOFO LETTER ZHBOPOMOFO LETTER CHBOPOMOFO LETTER " + - "SHBOPOMOFO LETTER RBOPOMOFO LETTER ZBOPOMOFO LETTER CBOPOMOFO LETTER SBO" + - "POMOFO LETTER ABOPOMOFO LETTER OBOPOMOFO LETTER EBOPOMOFO LETTER EHBOPOM" + - "OFO LETTER AIBOPOMOFO LETTER EIBOPOMOFO LETTER AUBOPOMOFO LETTER OUBOPOM" + - "OFO LETTER ANBOPOMOFO LETTER ENBOPOMOFO LETTER ANGBOPOMOFO LETTER ENGBOP" + - "OMOFO LETTER ERBOPOMOFO LETTER IBOPOMOFO LETTER UBOPOMOFO LETTER IUBOPOM" + - "OFO LETTER VBOPOMOFO LETTER NGBOPOMOFO LETTER GNBOPOMOFO LETTER IHHANGUL") + ("" + - " LETTER KIYEOKHANGUL LETTER SSANGKIYEOKHANGUL LETTER KIYEOK-SIOSHANGUL L" + - "ETTER NIEUNHANGUL LETTER NIEUN-CIEUCHANGUL LETTER NIEUN-HIEUHHANGUL LETT" + - "ER TIKEUTHANGUL LETTER SSANGTIKEUTHANGUL LETTER RIEULHANGUL LETTER RIEUL" + - "-KIYEOKHANGUL LETTER RIEUL-MIEUMHANGUL LETTER RIEUL-PIEUPHANGUL LETTER R" + - "IEUL-SIOSHANGUL LETTER RIEUL-THIEUTHHANGUL LETTER RIEUL-PHIEUPHHANGUL LE" + - "TTER RIEUL-HIEUHHANGUL LETTER MIEUMHANGUL LETTER PIEUPHANGUL LETTER SSAN" + - "GPIEUPHANGUL LETTER PIEUP-SIOSHANGUL LETTER SIOSHANGUL LETTER SSANGSIOSH" + - "ANGUL LETTER IEUNGHANGUL LETTER CIEUCHANGUL LETTER SSANGCIEUCHANGUL LETT" + - "ER CHIEUCHHANGUL LETTER KHIEUKHHANGUL LETTER THIEUTHHANGUL LETTER PHIEUP" + - "HHANGUL LETTER HIEUHHANGUL LETTER AHANGUL LETTER AEHANGUL LETTER YAHANGU" + - "L LETTER YAEHANGUL LETTER EOHANGUL LETTER EHANGUL LETTER YEOHANGUL LETTE" + - "R YEHANGUL LETTER OHANGUL LETTER WAHANGUL LETTER WAEHANGUL LETTER OEHANG" + - "UL LETTER YOHANGUL LETTER UHANGUL LETTER WEOHANGUL LETTER WEHANGUL LETTE" + - "R WIHANGUL LETTER YUHANGUL LETTER EUHANGUL LETTER YIHANGUL LETTER IHANGU" + - "L FILLERHANGUL LETTER SSANGNIEUNHANGUL LETTER NIEUN-TIKEUTHANGUL LETTER " + - "NIEUN-SIOSHANGUL LETTER NIEUN-PANSIOSHANGUL LETTER RIEUL-KIYEOK-SIOSHANG" + - "UL LETTER RIEUL-TIKEUTHANGUL LETTER RIEUL-PIEUP-SIOSHANGUL LETTER RIEUL-" + - "PANSIOSHANGUL LETTER RIEUL-YEORINHIEUHHANGUL LETTER MIEUM-PIEUPHANGUL LE" + - "TTER MIEUM-SIOSHANGUL LETTER MIEUM-PANSIOSHANGUL LETTER KAPYEOUNMIEUMHAN" + - "GUL LETTER PIEUP-KIYEOKHANGUL LETTER PIEUP-TIKEUTHANGUL LETTER PIEUP-SIO" + - "S-KIYEOKHANGUL LETTER PIEUP-SIOS-TIKEUTHANGUL LETTER PIEUP-CIEUCHANGUL L" + - "ETTER PIEUP-THIEUTHHANGUL LETTER KAPYEOUNPIEUPHANGUL LETTER KAPYEOUNSSAN" + - "GPIEUPHANGUL LETTER SIOS-KIYEOKHANGUL LETTER SIOS-NIEUNHANGUL LETTER SIO" + - "S-TIKEUTHANGUL LETTER SIOS-PIEUPHANGUL LETTER SIOS-CIEUCHANGUL LETTER PA" + - "NSIOSHANGUL LETTER SSANGIEUNGHANGUL LETTER YESIEUNGHANGUL LETTER YESIEUN" + - "G-SIOSHANGUL LETTER YESIEUNG-PANSIOSHANGUL LETTER KAPYEOUNPHIEUPHHANGUL " + - "LETTER SSANGHIEUHHANGUL LETTER YEORINHIEUHHANGUL LETTER YO-YAHANGUL LETT" + - "ER YO-YAEHANGUL LETTER YO-IHANGUL LETTER YU-YEOHANGUL LETTER YU-YEHANGUL" + - " LETTER YU-IHANGUL LETTER ARAEAHANGUL LETTER ARAEAEIDEOGRAPHIC ANNOTATIO" + - "N LINKING MARKIDEOGRAPHIC ANNOTATION REVERSE MARKIDEOGRAPHIC ANNOTATION " + - "ONE MARKIDEOGRAPHIC ANNOTATION TWO MARKIDEOGRAPHIC ANNOTATION THREE MARK" + - "IDEOGRAPHIC ANNOTATION FOUR MARKIDEOGRAPHIC ANNOTATION TOP MARKIDEOGRAPH" + - "IC ANNOTATION MIDDLE MARKIDEOGRAPHIC ANNOTATION BOTTOM MARKIDEOGRAPHIC A" + - "NNOTATION FIRST MARKIDEOGRAPHIC ANNOTATION SECOND MARKIDEOGRAPHIC ANNOTA" + - "TION THIRD MARKIDEOGRAPHIC ANNOTATION FOURTH MARKIDEOGRAPHIC ANNOTATION " + - "HEAVEN MARKIDEOGRAPHIC ANNOTATION EARTH MARKIDEOGRAPHIC ANNOTATION MAN M" + - "ARKBOPOMOFO LETTER BUBOPOMOFO LETTER ZIBOPOMOFO LETTER JIBOPOMOFO LETTER" + - " GUBOPOMOFO LETTER EEBOPOMOFO LETTER ENNBOPOMOFO LETTER OOBOPOMOFO LETTE" + - "R ONNBOPOMOFO LETTER IRBOPOMOFO LETTER ANNBOPOMOFO LETTER INNBOPOMOFO LE" + - "TTER UNNBOPOMOFO LETTER IMBOPOMOFO LETTER NGGBOPOMOFO LETTER AINNBOPOMOF" + - "O LETTER AUNNBOPOMOFO LETTER AMBOPOMOFO LETTER OMBOPOMOFO LETTER ONGBOPO" + - "MOFO LETTER INNNBOPOMOFO FINAL LETTER PBOPOMOFO FINAL LETTER TBOPOMOFO F" + - "INAL LETTER KBOPOMOFO FINAL LETTER HBOPOMOFO LETTER GHBOPOMOFO LETTER LH" + - "BOPOMOFO LETTER ZYCJK STROKE TCJK STROKE WGCJK STROKE XGCJK STROKE BXGCJ" + - "K STROKE SWCJK STROKE HZZCJK STROKE HZGCJK STROKE HPCJK STROKE HZWGCJK S" + - "TROKE SZWGCJK STROKE HZTCJK STROKE HZZPCJK STROKE HPWGCJK STROKE HZWCJK " + - "STROKE HZZZCJK STROKE NCJK STROKE HCJK STROKE SCJK STROKE PCJK STROKE SP" + - "CJK STROKE DCJK STROKE HZCJK STROKE HGCJK STROKE SZCJK STROKE SWZCJK STR" + - "OKE STCJK STROKE SGCJK STROKE PDCJK STROKE PZCJK STROKE TNCJK STROKE SZZ" + - "CJK STROKE SWGCJK STROKE HXWGCJK STROKE HZZZGCJK STROKE PGCJK STROKE QKA" + - "TAKANA LETTER SMALL KUKATAKANA LETTER SMALL SIKATAKANA LETTER SMALL SUKA" + - "TAKANA LETTER SMALL TOKATAKANA LETTER SMALL NUKATAKANA LETTER SMALL HAKA" + - "TAKANA LETTER SMALL HIKATAKANA LETTER SMALL HUKATAKANA LETTER SMALL HEKA" + - "TAKANA LETTER SMALL HOKATAKANA LETTER SMALL MUKATAKANA LETTER SMALL RAKA" + - "TAKANA LETTER SMALL RIKATAKANA LETTER SMALL RUKATAKANA LETTER SMALL REKA" + - "TAKANA LETTER SMALL ROPARENTHESIZED HANGUL KIYEOKPARENTHESIZED HANGUL NI" + - "EUNPARENTHESIZED HANGUL TIKEUTPARENTHESIZED HANGUL RIEULPARENTHESIZED HA" + - "NGUL MIEUMPARENTHESIZED HANGUL PIEUPPARENTHESIZED HANGUL SIOSPARENTHESIZ" + - "ED HANGUL IEUNGPARENTHESIZED HANGUL CIEUCPARENTHESIZED HANGUL CHIEUCHPAR" + - "ENTHESIZED HANGUL KHIEUKHPARENTHESIZED HANGUL THIEUTHPARENTHESIZED HANGU" + - "L PHIEUPHPARENTHESIZED HANGUL HIEUHPARENTHESIZED HANGUL KIYEOK APARENTHE" + - "SIZED HANGUL NIEUN APARENTHESIZED HANGUL TIKEUT APARENTHESIZED HANGUL RI" + - "EUL APARENTHESIZED HANGUL MIEUM APARENTHESIZED HANGUL PIEUP APARENTHESIZ" + - "ED HANGUL SIOS APARENTHESIZED HANGUL IEUNG APARENTHESIZED HANGUL CIEUC A") + ("" + - "PARENTHESIZED HANGUL CHIEUCH APARENTHESIZED HANGUL KHIEUKH APARENTHESIZE" + - "D HANGUL THIEUTH APARENTHESIZED HANGUL PHIEUPH APARENTHESIZED HANGUL HIE" + - "UH APARENTHESIZED HANGUL CIEUC UPARENTHESIZED KOREAN CHARACTER OJEONPARE" + - "NTHESIZED KOREAN CHARACTER O HUPARENTHESIZED IDEOGRAPH ONEPARENTHESIZED " + - "IDEOGRAPH TWOPARENTHESIZED IDEOGRAPH THREEPARENTHESIZED IDEOGRAPH FOURPA" + - "RENTHESIZED IDEOGRAPH FIVEPARENTHESIZED IDEOGRAPH SIXPARENTHESIZED IDEOG" + - "RAPH SEVENPARENTHESIZED IDEOGRAPH EIGHTPARENTHESIZED IDEOGRAPH NINEPAREN" + - "THESIZED IDEOGRAPH TENPARENTHESIZED IDEOGRAPH MOONPARENTHESIZED IDEOGRAP" + - "H FIREPARENTHESIZED IDEOGRAPH WATERPARENTHESIZED IDEOGRAPH WOODPARENTHES" + - "IZED IDEOGRAPH METALPARENTHESIZED IDEOGRAPH EARTHPARENTHESIZED IDEOGRAPH" + - " SUNPARENTHESIZED IDEOGRAPH STOCKPARENTHESIZED IDEOGRAPH HAVEPARENTHESIZ" + - "ED IDEOGRAPH SOCIETYPARENTHESIZED IDEOGRAPH NAMEPARENTHESIZED IDEOGRAPH " + - "SPECIALPARENTHESIZED IDEOGRAPH FINANCIALPARENTHESIZED IDEOGRAPH CONGRATU" + - "LATIONPARENTHESIZED IDEOGRAPH LABORPARENTHESIZED IDEOGRAPH REPRESENTPARE" + - "NTHESIZED IDEOGRAPH CALLPARENTHESIZED IDEOGRAPH STUDYPARENTHESIZED IDEOG" + - "RAPH SUPERVISEPARENTHESIZED IDEOGRAPH ENTERPRISEPARENTHESIZED IDEOGRAPH " + - "RESOURCEPARENTHESIZED IDEOGRAPH ALLIANCEPARENTHESIZED IDEOGRAPH FESTIVAL" + - "PARENTHESIZED IDEOGRAPH RESTPARENTHESIZED IDEOGRAPH SELFPARENTHESIZED ID" + - "EOGRAPH REACHCIRCLED IDEOGRAPH QUESTIONCIRCLED IDEOGRAPH KINDERGARTENCIR" + - "CLED IDEOGRAPH SCHOOLCIRCLED IDEOGRAPH KOTOCIRCLED NUMBER TEN ON BLACK S" + - "QUARECIRCLED NUMBER TWENTY ON BLACK SQUARECIRCLED NUMBER THIRTY ON BLACK" + - " SQUARECIRCLED NUMBER FORTY ON BLACK SQUARECIRCLED NUMBER FIFTY ON BLACK" + - " SQUARECIRCLED NUMBER SIXTY ON BLACK SQUARECIRCLED NUMBER SEVENTY ON BLA" + - "CK SQUARECIRCLED NUMBER EIGHTY ON BLACK SQUAREPARTNERSHIP SIGNCIRCLED NU" + - "MBER TWENTY ONECIRCLED NUMBER TWENTY TWOCIRCLED NUMBER TWENTY THREECIRCL" + - "ED NUMBER TWENTY FOURCIRCLED NUMBER TWENTY FIVECIRCLED NUMBER TWENTY SIX" + - "CIRCLED NUMBER TWENTY SEVENCIRCLED NUMBER TWENTY EIGHTCIRCLED NUMBER TWE" + - "NTY NINECIRCLED NUMBER THIRTYCIRCLED NUMBER THIRTY ONECIRCLED NUMBER THI" + - "RTY TWOCIRCLED NUMBER THIRTY THREECIRCLED NUMBER THIRTY FOURCIRCLED NUMB" + - "ER THIRTY FIVECIRCLED HANGUL KIYEOKCIRCLED HANGUL NIEUNCIRCLED HANGUL TI" + - "KEUTCIRCLED HANGUL RIEULCIRCLED HANGUL MIEUMCIRCLED HANGUL PIEUPCIRCLED " + - "HANGUL SIOSCIRCLED HANGUL IEUNGCIRCLED HANGUL CIEUCCIRCLED HANGUL CHIEUC" + - "HCIRCLED HANGUL KHIEUKHCIRCLED HANGUL THIEUTHCIRCLED HANGUL PHIEUPHCIRCL" + - "ED HANGUL HIEUHCIRCLED HANGUL KIYEOK ACIRCLED HANGUL NIEUN ACIRCLED HANG" + - "UL TIKEUT ACIRCLED HANGUL RIEUL ACIRCLED HANGUL MIEUM ACIRCLED HANGUL PI" + - "EUP ACIRCLED HANGUL SIOS ACIRCLED HANGUL IEUNG ACIRCLED HANGUL CIEUC ACI" + - "RCLED HANGUL CHIEUCH ACIRCLED HANGUL KHIEUKH ACIRCLED HANGUL THIEUTH ACI" + - "RCLED HANGUL PHIEUPH ACIRCLED HANGUL HIEUH ACIRCLED KOREAN CHARACTER CHA" + - "MKOCIRCLED KOREAN CHARACTER JUEUICIRCLED HANGUL IEUNG UKOREAN STANDARD S" + - "YMBOLCIRCLED IDEOGRAPH ONECIRCLED IDEOGRAPH TWOCIRCLED IDEOGRAPH THREECI" + - "RCLED IDEOGRAPH FOURCIRCLED IDEOGRAPH FIVECIRCLED IDEOGRAPH SIXCIRCLED I" + - "DEOGRAPH SEVENCIRCLED IDEOGRAPH EIGHTCIRCLED IDEOGRAPH NINECIRCLED IDEOG" + - "RAPH TENCIRCLED IDEOGRAPH MOONCIRCLED IDEOGRAPH FIRECIRCLED IDEOGRAPH WA" + - "TERCIRCLED IDEOGRAPH WOODCIRCLED IDEOGRAPH METALCIRCLED IDEOGRAPH EARTHC" + - "IRCLED IDEOGRAPH SUNCIRCLED IDEOGRAPH STOCKCIRCLED IDEOGRAPH HAVECIRCLED" + - " IDEOGRAPH SOCIETYCIRCLED IDEOGRAPH NAMECIRCLED IDEOGRAPH SPECIALCIRCLED" + - " IDEOGRAPH FINANCIALCIRCLED IDEOGRAPH CONGRATULATIONCIRCLED IDEOGRAPH LA" + - "BORCIRCLED IDEOGRAPH SECRETCIRCLED IDEOGRAPH MALECIRCLED IDEOGRAPH FEMAL" + - "ECIRCLED IDEOGRAPH SUITABLECIRCLED IDEOGRAPH EXCELLENTCIRCLED IDEOGRAPH " + - "PRINTCIRCLED IDEOGRAPH ATTENTIONCIRCLED IDEOGRAPH ITEMCIRCLED IDEOGRAPH " + - "RESTCIRCLED IDEOGRAPH COPYCIRCLED IDEOGRAPH CORRECTCIRCLED IDEOGRAPH HIG" + - "HCIRCLED IDEOGRAPH CENTRECIRCLED IDEOGRAPH LOWCIRCLED IDEOGRAPH LEFTCIRC" + - "LED IDEOGRAPH RIGHTCIRCLED IDEOGRAPH MEDICINECIRCLED IDEOGRAPH RELIGIONC" + - "IRCLED IDEOGRAPH STUDYCIRCLED IDEOGRAPH SUPERVISECIRCLED IDEOGRAPH ENTER" + - "PRISECIRCLED IDEOGRAPH RESOURCECIRCLED IDEOGRAPH ALLIANCECIRCLED IDEOGRA" + - "PH NIGHTCIRCLED NUMBER THIRTY SIXCIRCLED NUMBER THIRTY SEVENCIRCLED NUMB" + - "ER THIRTY EIGHTCIRCLED NUMBER THIRTY NINECIRCLED NUMBER FORTYCIRCLED NUM" + - "BER FORTY ONECIRCLED NUMBER FORTY TWOCIRCLED NUMBER FORTY THREECIRCLED N" + - "UMBER FORTY FOURCIRCLED NUMBER FORTY FIVECIRCLED NUMBER FORTY SIXCIRCLED" + - " NUMBER FORTY SEVENCIRCLED NUMBER FORTY EIGHTCIRCLED NUMBER FORTY NINECI" + - "RCLED NUMBER FIFTYIDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARYIDEOGRAPHIC TE" + - "LEGRAPH SYMBOL FOR FEBRUARYIDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCHIDEOGRA" + - "PHIC TELEGRAPH SYMBOL FOR APRILIDEOGRAPHIC TELEGRAPH SYMBOL FOR MAYIDEOG" + - "RAPHIC TELEGRAPH SYMBOL FOR JUNEIDEOGRAPHIC TELEGRAPH SYMBOL FOR JULYIDE") + ("" + - "OGRAPHIC TELEGRAPH SYMBOL FOR AUGUSTIDEOGRAPHIC TELEGRAPH SYMBOL FOR SEP" + - "TEMBERIDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBERIDEOGRAPHIC TELEGRAPH SYMB" + - "OL FOR NOVEMBERIDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBERSQUARE HGSQUARE " + - "ERGSQUARE EVLIMITED LIABILITY SIGNCIRCLED KATAKANA ACIRCLED KATAKANA ICI" + - "RCLED KATAKANA UCIRCLED KATAKANA ECIRCLED KATAKANA OCIRCLED KATAKANA KAC" + - "IRCLED KATAKANA KICIRCLED KATAKANA KUCIRCLED KATAKANA KECIRCLED KATAKANA" + - " KOCIRCLED KATAKANA SACIRCLED KATAKANA SICIRCLED KATAKANA SUCIRCLED KATA" + - "KANA SECIRCLED KATAKANA SOCIRCLED KATAKANA TACIRCLED KATAKANA TICIRCLED " + - "KATAKANA TUCIRCLED KATAKANA TECIRCLED KATAKANA TOCIRCLED KATAKANA NACIRC" + - "LED KATAKANA NICIRCLED KATAKANA NUCIRCLED KATAKANA NECIRCLED KATAKANA NO" + - "CIRCLED KATAKANA HACIRCLED KATAKANA HICIRCLED KATAKANA HUCIRCLED KATAKAN" + - "A HECIRCLED KATAKANA HOCIRCLED KATAKANA MACIRCLED KATAKANA MICIRCLED KAT" + - "AKANA MUCIRCLED KATAKANA MECIRCLED KATAKANA MOCIRCLED KATAKANA YACIRCLED" + - " KATAKANA YUCIRCLED KATAKANA YOCIRCLED KATAKANA RACIRCLED KATAKANA RICIR" + - "CLED KATAKANA RUCIRCLED KATAKANA RECIRCLED KATAKANA ROCIRCLED KATAKANA W" + - "ACIRCLED KATAKANA WICIRCLED KATAKANA WECIRCLED KATAKANA WOSQUARE APAATOS" + - "QUARE ARUHUASQUARE ANPEASQUARE AARUSQUARE ININGUSQUARE INTISQUARE UONSQU" + - "ARE ESUKUUDOSQUARE EEKAASQUARE ONSUSQUARE OOMUSQUARE KAIRISQUARE KARATTO" + - "SQUARE KARORIISQUARE GARONSQUARE GANMASQUARE GIGASQUARE GINIISQUARE KYUR" + - "IISQUARE GIRUDAASQUARE KIROSQUARE KIROGURAMUSQUARE KIROMEETORUSQUARE KIR" + - "OWATTOSQUARE GURAMUSQUARE GURAMUTONSQUARE KURUZEIROSQUARE KUROONESQUARE " + - "KEESUSQUARE KORUNASQUARE KOOPOSQUARE SAIKURUSQUARE SANTIIMUSQUARE SIRING" + - "USQUARE SENTISQUARE SENTOSQUARE DAASUSQUARE DESISQUARE DORUSQUARE TONSQU" + - "ARE NANOSQUARE NOTTOSQUARE HAITUSQUARE PAASENTOSQUARE PAATUSQUARE BAARER" + - "USQUARE PIASUTORUSQUARE PIKURUSQUARE PIKOSQUARE BIRUSQUARE HUARADDOSQUAR" + - "E HUIITOSQUARE BUSSYERUSQUARE HURANSQUARE HEKUTAARUSQUARE PESOSQUARE PEN" + - "IHISQUARE HERUTUSQUARE PENSUSQUARE PEEZISQUARE BEETASQUARE POINTOSQUARE " + - "BORUTOSQUARE HONSQUARE PONDOSQUARE HOORUSQUARE HOONSQUARE MAIKUROSQUARE " + - "MAIRUSQUARE MAHHASQUARE MARUKUSQUARE MANSYONSQUARE MIKURONSQUARE MIRISQU" + - "ARE MIRIBAARUSQUARE MEGASQUARE MEGATONSQUARE MEETORUSQUARE YAADOSQUARE Y" + - "AARUSQUARE YUANSQUARE RITTORUSQUARE RIRASQUARE RUPIISQUARE RUUBURUSQUARE" + - " REMUSQUARE RENTOGENSQUARE WATTOIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZE" + - "ROIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONEIDEOGRAPHIC TELEGRAPH SYMBOL " + - "FOR HOUR TWOIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREEIDEOGRAPHIC TELEG" + - "RAPH SYMBOL FOR HOUR FOURIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVEIDEOG" + - "RAPHIC TELEGRAPH SYMBOL FOR HOUR SIXIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOU" + - "R SEVENIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTIDEOGRAPHIC TELEGRAPH " + - "SYMBOL FOR HOUR NINEIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TENIDEOGRAPHIC" + - " TELEGRAPH SYMBOL FOR HOUR ELEVENIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR T" + - "WELVEIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEENIDEOGRAPHIC TELEGRAPH" + - " SYMBOL FOR HOUR FOURTEENIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEENID" + - "EOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEENIDEOGRAPHIC TELEGRAPH SYMBOL " + - "FOR HOUR SEVENTEENIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEENIDEOGRAP" + - "HIC TELEGRAPH SYMBOL FOR HOUR NINETEENIDEOGRAPHIC TELEGRAPH SYMBOL FOR H" + - "OUR TWENTYIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONEIDEOGRAPHIC TE" + - "LEGRAPH SYMBOL FOR HOUR TWENTY-TWOIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR " + - "TWENTY-THREEIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOURSQUARE HPAS" + - "QUARE DASQUARE AUSQUARE BARSQUARE OVSQUARE PCSQUARE DMSQUARE DM SQUAREDS" + - "QUARE DM CUBEDSQUARE IUSQUARE ERA NAME HEISEISQUARE ERA NAME SYOUWASQUAR" + - "E ERA NAME TAISYOUSQUARE ERA NAME MEIZISQUARE CORPORATIONSQUARE PA AMPSS" + - "QUARE NASQUARE MU ASQUARE MASQUARE KASQUARE KBSQUARE MBSQUARE GBSQUARE C" + - "ALSQUARE KCALSQUARE PFSQUARE NFSQUARE MU FSQUARE MU GSQUARE MGSQUARE KGS" + - "QUARE HZSQUARE KHZSQUARE MHZSQUARE GHZSQUARE THZSQUARE MU LSQUARE MLSQUA" + - "RE DLSQUARE KLSQUARE FMSQUARE NMSQUARE MU MSQUARE MMSQUARE CMSQUARE KMSQ" + - "UARE MM SQUAREDSQUARE CM SQUAREDSQUARE M SQUAREDSQUARE KM SQUAREDSQUARE " + - "MM CUBEDSQUARE CM CUBEDSQUARE M CUBEDSQUARE KM CUBEDSQUARE M OVER SSQUAR" + - "E M OVER S SQUAREDSQUARE PASQUARE KPASQUARE MPASQUARE GPASQUARE RADSQUAR" + - "E RAD OVER SSQUARE RAD OVER S SQUAREDSQUARE PSSQUARE NSSQUARE MU SSQUARE" + - " MSSQUARE PVSQUARE NVSQUARE MU VSQUARE MVSQUARE KVSQUARE MV MEGASQUARE P" + - "WSQUARE NWSQUARE MU WSQUARE MWSQUARE KWSQUARE MW MEGASQUARE K OHMSQUARE " + - "M OHMSQUARE AMSQUARE BQSQUARE CCSQUARE CDSQUARE C OVER KGSQUARE COSQUARE" + - " DBSQUARE GYSQUARE HASQUARE HPSQUARE INSQUARE KKSQUARE KM CAPITALSQUARE " + - "KTSQUARE LMSQUARE LNSQUARE LOGSQUARE LXSQUARE MB SMALLSQUARE MILSQUARE M" + - "OLSQUARE PHSQUARE PMSQUARE PPMSQUARE PRSQUARE SRSQUARE SVSQUARE WBSQUARE") + ("" + - " V OVER MSQUARE A OVER MIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONEIDEOGRAP" + - "HIC TELEGRAPH SYMBOL FOR DAY TWOIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THR" + - "EEIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURIDEOGRAPHIC TELEGRAPH SYMBOL " + - "FOR DAY FIVEIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXIDEOGRAPHIC TELEGRAP" + - "H SYMBOL FOR DAY SEVENIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTIDEOGRAP" + - "HIC TELEGRAPH SYMBOL FOR DAY NINEIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TE" + - "NIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVENIDEOGRAPHIC TELEGRAPH SYMBOL" + - " FOR DAY TWELVEIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEENIDEOGRAPHIC " + - "TELEGRAPH SYMBOL FOR DAY FOURTEENIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FI" + - "FTEENIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEENIDEOGRAPHIC TELEGRAPH S" + - "YMBOL FOR DAY SEVENTEENIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEENIDEO" + - "GRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEENIDEOGRAPHIC TELEGRAPH SYMBOL FO" + - "R DAY TWENTYIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONEIDEOGRAPHIC T" + - "ELEGRAPH SYMBOL FOR DAY TWENTY-TWOIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY T" + - "WENTY-THREEIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOURIDEOGRAPHIC T" + - "ELEGRAPH SYMBOL FOR DAY TWENTY-FIVEIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY " + - "TWENTY-SIXIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVENIDEOGRAPHIC T" + - "ELEGRAPH SYMBOL FOR DAY TWENTY-EIGHTIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY" + - " TWENTY-NINEIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTYIDEOGRAPHIC TELEG" + - "RAPH SYMBOL FOR DAY THIRTY-ONESQUARE GALHEXAGRAM FOR THE CREATIVE HEAVEN" + - "HEXAGRAM FOR THE RECEPTIVE EARTHHEXAGRAM FOR DIFFICULTY AT THE BEGINNING" + - "HEXAGRAM FOR YOUTHFUL FOLLYHEXAGRAM FOR WAITINGHEXAGRAM FOR CONFLICTHEXA" + - "GRAM FOR THE ARMYHEXAGRAM FOR HOLDING TOGETHERHEXAGRAM FOR SMALL TAMINGH" + - "EXAGRAM FOR TREADINGHEXAGRAM FOR PEACEHEXAGRAM FOR STANDSTILLHEXAGRAM FO" + - "R FELLOWSHIPHEXAGRAM FOR GREAT POSSESSIONHEXAGRAM FOR MODESTYHEXAGRAM FO" + - "R ENTHUSIASMHEXAGRAM FOR FOLLOWINGHEXAGRAM FOR WORK ON THE DECAYEDHEXAGR" + - "AM FOR APPROACHHEXAGRAM FOR CONTEMPLATIONHEXAGRAM FOR BITING THROUGHHEXA" + - "GRAM FOR GRACEHEXAGRAM FOR SPLITTING APARTHEXAGRAM FOR RETURNHEXAGRAM FO" + - "R INNOCENCEHEXAGRAM FOR GREAT TAMINGHEXAGRAM FOR MOUTH CORNERSHEXAGRAM F" + - "OR GREAT PREPONDERANCEHEXAGRAM FOR THE ABYSMAL WATERHEXAGRAM FOR THE CLI" + - "NGING FIREHEXAGRAM FOR INFLUENCEHEXAGRAM FOR DURATIONHEXAGRAM FOR RETREA" + - "THEXAGRAM FOR GREAT POWERHEXAGRAM FOR PROGRESSHEXAGRAM FOR DARKENING OF " + - "THE LIGHTHEXAGRAM FOR THE FAMILYHEXAGRAM FOR OPPOSITIONHEXAGRAM FOR OBST" + - "RUCTIONHEXAGRAM FOR DELIVERANCEHEXAGRAM FOR DECREASEHEXAGRAM FOR INCREAS" + - "EHEXAGRAM FOR BREAKTHROUGHHEXAGRAM FOR COMING TO MEETHEXAGRAM FOR GATHER" + - "ING TOGETHERHEXAGRAM FOR PUSHING UPWARDHEXAGRAM FOR OPPRESSIONHEXAGRAM F" + - "OR THE WELLHEXAGRAM FOR REVOLUTIONHEXAGRAM FOR THE CAULDRONHEXAGRAM FOR " + - "THE AROUSING THUNDERHEXAGRAM FOR THE KEEPING STILL MOUNTAINHEXAGRAM FOR " + - "DEVELOPMENTHEXAGRAM FOR THE MARRYING MAIDENHEXAGRAM FOR ABUNDANCEHEXAGRA" + - "M FOR THE WANDERERHEXAGRAM FOR THE GENTLE WINDHEXAGRAM FOR THE JOYOUS LA" + - "KEHEXAGRAM FOR DISPERSIONHEXAGRAM FOR LIMITATIONHEXAGRAM FOR INNER TRUTH" + - "HEXAGRAM FOR SMALL PREPONDERANCEHEXAGRAM FOR AFTER COMPLETIONHEXAGRAM FO" + - "R BEFORE COMPLETIONYI SYLLABLE ITYI SYLLABLE IXYI SYLLABLE IYI SYLLABLE " + - "IPYI SYLLABLE IETYI SYLLABLE IEXYI SYLLABLE IEYI SYLLABLE IEPYI SYLLABLE" + - " ATYI SYLLABLE AXYI SYLLABLE AYI SYLLABLE APYI SYLLABLE UOXYI SYLLABLE U" + - "OYI SYLLABLE UOPYI SYLLABLE OTYI SYLLABLE OXYI SYLLABLE OYI SYLLABLE OPY" + - "I SYLLABLE EXYI SYLLABLE EYI SYLLABLE WUYI SYLLABLE BITYI SYLLABLE BIXYI" + - " SYLLABLE BIYI SYLLABLE BIPYI SYLLABLE BIETYI SYLLABLE BIEXYI SYLLABLE B" + - "IEYI SYLLABLE BIEPYI SYLLABLE BATYI SYLLABLE BAXYI SYLLABLE BAYI SYLLABL" + - "E BAPYI SYLLABLE BUOXYI SYLLABLE BUOYI SYLLABLE BUOPYI SYLLABLE BOTYI SY" + - "LLABLE BOXYI SYLLABLE BOYI SYLLABLE BOPYI SYLLABLE BEXYI SYLLABLE BEYI S" + - "YLLABLE BEPYI SYLLABLE BUTYI SYLLABLE BUXYI SYLLABLE BUYI SYLLABLE BUPYI" + - " SYLLABLE BURXYI SYLLABLE BURYI SYLLABLE BYTYI SYLLABLE BYXYI SYLLABLE B" + - "YYI SYLLABLE BYPYI SYLLABLE BYRXYI SYLLABLE BYRYI SYLLABLE PITYI SYLLABL" + - "E PIXYI SYLLABLE PIYI SYLLABLE PIPYI SYLLABLE PIEXYI SYLLABLE PIEYI SYLL" + - "ABLE PIEPYI SYLLABLE PATYI SYLLABLE PAXYI SYLLABLE PAYI SYLLABLE PAPYI S" + - "YLLABLE PUOXYI SYLLABLE PUOYI SYLLABLE PUOPYI SYLLABLE POTYI SYLLABLE PO" + - "XYI SYLLABLE POYI SYLLABLE POPYI SYLLABLE PUTYI SYLLABLE PUXYI SYLLABLE " + - "PUYI SYLLABLE PUPYI SYLLABLE PURXYI SYLLABLE PURYI SYLLABLE PYTYI SYLLAB" + - "LE PYXYI SYLLABLE PYYI SYLLABLE PYPYI SYLLABLE PYRXYI SYLLABLE PYRYI SYL" + - "LABLE BBITYI SYLLABLE BBIXYI SYLLABLE BBIYI SYLLABLE BBIPYI SYLLABLE BBI" + - "ETYI SYLLABLE BBIEXYI SYLLABLE BBIEYI SYLLABLE BBIEPYI SYLLABLE BBATYI S" + - "YLLABLE BBAXYI SYLLABLE BBAYI SYLLABLE BBAPYI SYLLABLE BBUOXYI SYLLABLE " + - "BBUOYI SYLLABLE BBUOPYI SYLLABLE BBOTYI SYLLABLE BBOXYI SYLLABLE BBOYI S") + ("" + - "YLLABLE BBOPYI SYLLABLE BBEXYI SYLLABLE BBEYI SYLLABLE BBEPYI SYLLABLE B" + - "BUTYI SYLLABLE BBUXYI SYLLABLE BBUYI SYLLABLE BBUPYI SYLLABLE BBURXYI SY" + - "LLABLE BBURYI SYLLABLE BBYTYI SYLLABLE BBYXYI SYLLABLE BBYYI SYLLABLE BB" + - "YPYI SYLLABLE NBITYI SYLLABLE NBIXYI SYLLABLE NBIYI SYLLABLE NBIPYI SYLL" + - "ABLE NBIEXYI SYLLABLE NBIEYI SYLLABLE NBIEPYI SYLLABLE NBATYI SYLLABLE N" + - "BAXYI SYLLABLE NBAYI SYLLABLE NBAPYI SYLLABLE NBOTYI SYLLABLE NBOXYI SYL" + - "LABLE NBOYI SYLLABLE NBOPYI SYLLABLE NBUTYI SYLLABLE NBUXYI SYLLABLE NBU" + - "YI SYLLABLE NBUPYI SYLLABLE NBURXYI SYLLABLE NBURYI SYLLABLE NBYTYI SYLL" + - "ABLE NBYXYI SYLLABLE NBYYI SYLLABLE NBYPYI SYLLABLE NBYRXYI SYLLABLE NBY" + - "RYI SYLLABLE HMITYI SYLLABLE HMIXYI SYLLABLE HMIYI SYLLABLE HMIPYI SYLLA" + - "BLE HMIEXYI SYLLABLE HMIEYI SYLLABLE HMIEPYI SYLLABLE HMATYI SYLLABLE HM" + - "AXYI SYLLABLE HMAYI SYLLABLE HMAPYI SYLLABLE HMUOXYI SYLLABLE HMUOYI SYL" + - "LABLE HMUOPYI SYLLABLE HMOTYI SYLLABLE HMOXYI SYLLABLE HMOYI SYLLABLE HM" + - "OPYI SYLLABLE HMUTYI SYLLABLE HMUXYI SYLLABLE HMUYI SYLLABLE HMUPYI SYLL" + - "ABLE HMURXYI SYLLABLE HMURYI SYLLABLE HMYXYI SYLLABLE HMYYI SYLLABLE HMY" + - "PYI SYLLABLE HMYRXYI SYLLABLE HMYRYI SYLLABLE MITYI SYLLABLE MIXYI SYLLA" + - "BLE MIYI SYLLABLE MIPYI SYLLABLE MIEXYI SYLLABLE MIEYI SYLLABLE MIEPYI S" + - "YLLABLE MATYI SYLLABLE MAXYI SYLLABLE MAYI SYLLABLE MAPYI SYLLABLE MUOTY" + - "I SYLLABLE MUOXYI SYLLABLE MUOYI SYLLABLE MUOPYI SYLLABLE MOTYI SYLLABLE" + - " MOXYI SYLLABLE MOYI SYLLABLE MOPYI SYLLABLE MEXYI SYLLABLE MEYI SYLLABL" + - "E MUTYI SYLLABLE MUXYI SYLLABLE MUYI SYLLABLE MUPYI SYLLABLE MURXYI SYLL" + - "ABLE MURYI SYLLABLE MYTYI SYLLABLE MYXYI SYLLABLE MYYI SYLLABLE MYPYI SY" + - "LLABLE FITYI SYLLABLE FIXYI SYLLABLE FIYI SYLLABLE FIPYI SYLLABLE FATYI " + - "SYLLABLE FAXYI SYLLABLE FAYI SYLLABLE FAPYI SYLLABLE FOXYI SYLLABLE FOYI" + - " SYLLABLE FOPYI SYLLABLE FUTYI SYLLABLE FUXYI SYLLABLE FUYI SYLLABLE FUP" + - "YI SYLLABLE FURXYI SYLLABLE FURYI SYLLABLE FYTYI SYLLABLE FYXYI SYLLABLE" + - " FYYI SYLLABLE FYPYI SYLLABLE VITYI SYLLABLE VIXYI SYLLABLE VIYI SYLLABL" + - "E VIPYI SYLLABLE VIETYI SYLLABLE VIEXYI SYLLABLE VIEYI SYLLABLE VIEPYI S" + - "YLLABLE VATYI SYLLABLE VAXYI SYLLABLE VAYI SYLLABLE VAPYI SYLLABLE VOTYI" + - " SYLLABLE VOXYI SYLLABLE VOYI SYLLABLE VOPYI SYLLABLE VEXYI SYLLABLE VEP" + - "YI SYLLABLE VUTYI SYLLABLE VUXYI SYLLABLE VUYI SYLLABLE VUPYI SYLLABLE V" + - "URXYI SYLLABLE VURYI SYLLABLE VYTYI SYLLABLE VYXYI SYLLABLE VYYI SYLLABL" + - "E VYPYI SYLLABLE VYRXYI SYLLABLE VYRYI SYLLABLE DITYI SYLLABLE DIXYI SYL" + - "LABLE DIYI SYLLABLE DIPYI SYLLABLE DIEXYI SYLLABLE DIEYI SYLLABLE DIEPYI" + - " SYLLABLE DATYI SYLLABLE DAXYI SYLLABLE DAYI SYLLABLE DAPYI SYLLABLE DUO" + - "XYI SYLLABLE DUOYI SYLLABLE DOTYI SYLLABLE DOXYI SYLLABLE DOYI SYLLABLE " + - "DOPYI SYLLABLE DEXYI SYLLABLE DEYI SYLLABLE DEPYI SYLLABLE DUTYI SYLLABL" + - "E DUXYI SYLLABLE DUYI SYLLABLE DUPYI SYLLABLE DURXYI SYLLABLE DURYI SYLL" + - "ABLE TITYI SYLLABLE TIXYI SYLLABLE TIYI SYLLABLE TIPYI SYLLABLE TIEXYI S" + - "YLLABLE TIEYI SYLLABLE TIEPYI SYLLABLE TATYI SYLLABLE TAXYI SYLLABLE TAY" + - "I SYLLABLE TAPYI SYLLABLE TUOTYI SYLLABLE TUOXYI SYLLABLE TUOYI SYLLABLE" + - " TUOPYI SYLLABLE TOTYI SYLLABLE TOXYI SYLLABLE TOYI SYLLABLE TOPYI SYLLA" + - "BLE TEXYI SYLLABLE TEYI SYLLABLE TEPYI SYLLABLE TUTYI SYLLABLE TUXYI SYL" + - "LABLE TUYI SYLLABLE TUPYI SYLLABLE TURXYI SYLLABLE TURYI SYLLABLE DDITYI" + - " SYLLABLE DDIXYI SYLLABLE DDIYI SYLLABLE DDIPYI SYLLABLE DDIEXYI SYLLABL" + - "E DDIEYI SYLLABLE DDIEPYI SYLLABLE DDATYI SYLLABLE DDAXYI SYLLABLE DDAYI" + - " SYLLABLE DDAPYI SYLLABLE DDUOXYI SYLLABLE DDUOYI SYLLABLE DDUOPYI SYLLA" + - "BLE DDOTYI SYLLABLE DDOXYI SYLLABLE DDOYI SYLLABLE DDOPYI SYLLABLE DDEXY" + - "I SYLLABLE DDEYI SYLLABLE DDEPYI SYLLABLE DDUTYI SYLLABLE DDUXYI SYLLABL" + - "E DDUYI SYLLABLE DDUPYI SYLLABLE DDURXYI SYLLABLE DDURYI SYLLABLE NDITYI" + - " SYLLABLE NDIXYI SYLLABLE NDIYI SYLLABLE NDIPYI SYLLABLE NDIEXYI SYLLABL" + - "E NDIEYI SYLLABLE NDATYI SYLLABLE NDAXYI SYLLABLE NDAYI SYLLABLE NDAPYI " + - "SYLLABLE NDOTYI SYLLABLE NDOXYI SYLLABLE NDOYI SYLLABLE NDOPYI SYLLABLE " + - "NDEXYI SYLLABLE NDEYI SYLLABLE NDEPYI SYLLABLE NDUTYI SYLLABLE NDUXYI SY" + - "LLABLE NDUYI SYLLABLE NDUPYI SYLLABLE NDURXYI SYLLABLE NDURYI SYLLABLE H" + - "NITYI SYLLABLE HNIXYI SYLLABLE HNIYI SYLLABLE HNIPYI SYLLABLE HNIETYI SY" + - "LLABLE HNIEXYI SYLLABLE HNIEYI SYLLABLE HNIEPYI SYLLABLE HNATYI SYLLABLE" + - " HNAXYI SYLLABLE HNAYI SYLLABLE HNAPYI SYLLABLE HNUOXYI SYLLABLE HNUOYI " + - "SYLLABLE HNOTYI SYLLABLE HNOXYI SYLLABLE HNOPYI SYLLABLE HNEXYI SYLLABLE" + - " HNEYI SYLLABLE HNEPYI SYLLABLE HNUTYI SYLLABLE NITYI SYLLABLE NIXYI SYL" + - "LABLE NIYI SYLLABLE NIPYI SYLLABLE NIEXYI SYLLABLE NIEYI SYLLABLE NIEPYI" + - " SYLLABLE NAXYI SYLLABLE NAYI SYLLABLE NAPYI SYLLABLE NUOXYI SYLLABLE NU" + - "OYI SYLLABLE NUOPYI SYLLABLE NOTYI SYLLABLE NOXYI SYLLABLE NOYI SYLLABLE" + - " NOPYI SYLLABLE NEXYI SYLLABLE NEYI SYLLABLE NEPYI SYLLABLE NUTYI SYLLAB") + ("" + - "LE NUXYI SYLLABLE NUYI SYLLABLE NUPYI SYLLABLE NURXYI SYLLABLE NURYI SYL" + - "LABLE HLITYI SYLLABLE HLIXYI SYLLABLE HLIYI SYLLABLE HLIPYI SYLLABLE HLI" + - "EXYI SYLLABLE HLIEYI SYLLABLE HLIEPYI SYLLABLE HLATYI SYLLABLE HLAXYI SY" + - "LLABLE HLAYI SYLLABLE HLAPYI SYLLABLE HLUOXYI SYLLABLE HLUOYI SYLLABLE H" + - "LUOPYI SYLLABLE HLOXYI SYLLABLE HLOYI SYLLABLE HLOPYI SYLLABLE HLEXYI SY" + - "LLABLE HLEYI SYLLABLE HLEPYI SYLLABLE HLUTYI SYLLABLE HLUXYI SYLLABLE HL" + - "UYI SYLLABLE HLUPYI SYLLABLE HLURXYI SYLLABLE HLURYI SYLLABLE HLYTYI SYL" + - "LABLE HLYXYI SYLLABLE HLYYI SYLLABLE HLYPYI SYLLABLE HLYRXYI SYLLABLE HL" + - "YRYI SYLLABLE LITYI SYLLABLE LIXYI SYLLABLE LIYI SYLLABLE LIPYI SYLLABLE" + - " LIETYI SYLLABLE LIEXYI SYLLABLE LIEYI SYLLABLE LIEPYI SYLLABLE LATYI SY" + - "LLABLE LAXYI SYLLABLE LAYI SYLLABLE LAPYI SYLLABLE LUOTYI SYLLABLE LUOXY" + - "I SYLLABLE LUOYI SYLLABLE LUOPYI SYLLABLE LOTYI SYLLABLE LOXYI SYLLABLE " + - "LOYI SYLLABLE LOPYI SYLLABLE LEXYI SYLLABLE LEYI SYLLABLE LEPYI SYLLABLE" + - " LUTYI SYLLABLE LUXYI SYLLABLE LUYI SYLLABLE LUPYI SYLLABLE LURXYI SYLLA" + - "BLE LURYI SYLLABLE LYTYI SYLLABLE LYXYI SYLLABLE LYYI SYLLABLE LYPYI SYL" + - "LABLE LYRXYI SYLLABLE LYRYI SYLLABLE GITYI SYLLABLE GIXYI SYLLABLE GIYI " + - "SYLLABLE GIPYI SYLLABLE GIETYI SYLLABLE GIEXYI SYLLABLE GIEYI SYLLABLE G" + - "IEPYI SYLLABLE GATYI SYLLABLE GAXYI SYLLABLE GAYI SYLLABLE GAPYI SYLLABL" + - "E GUOTYI SYLLABLE GUOXYI SYLLABLE GUOYI SYLLABLE GUOPYI SYLLABLE GOTYI S" + - "YLLABLE GOXYI SYLLABLE GOYI SYLLABLE GOPYI SYLLABLE GETYI SYLLABLE GEXYI" + - " SYLLABLE GEYI SYLLABLE GEPYI SYLLABLE GUTYI SYLLABLE GUXYI SYLLABLE GUY" + - "I SYLLABLE GUPYI SYLLABLE GURXYI SYLLABLE GURYI SYLLABLE KITYI SYLLABLE " + - "KIXYI SYLLABLE KIYI SYLLABLE KIPYI SYLLABLE KIEXYI SYLLABLE KIEYI SYLLAB" + - "LE KIEPYI SYLLABLE KATYI SYLLABLE KAXYI SYLLABLE KAYI SYLLABLE KAPYI SYL" + - "LABLE KUOXYI SYLLABLE KUOYI SYLLABLE KUOPYI SYLLABLE KOTYI SYLLABLE KOXY" + - "I SYLLABLE KOYI SYLLABLE KOPYI SYLLABLE KETYI SYLLABLE KEXYI SYLLABLE KE" + - "YI SYLLABLE KEPYI SYLLABLE KUTYI SYLLABLE KUXYI SYLLABLE KUYI SYLLABLE K" + - "UPYI SYLLABLE KURXYI SYLLABLE KURYI SYLLABLE GGITYI SYLLABLE GGIXYI SYLL" + - "ABLE GGIYI SYLLABLE GGIEXYI SYLLABLE GGIEYI SYLLABLE GGIEPYI SYLLABLE GG" + - "ATYI SYLLABLE GGAXYI SYLLABLE GGAYI SYLLABLE GGAPYI SYLLABLE GGUOTYI SYL" + - "LABLE GGUOXYI SYLLABLE GGUOYI SYLLABLE GGUOPYI SYLLABLE GGOTYI SYLLABLE " + - "GGOXYI SYLLABLE GGOYI SYLLABLE GGOPYI SYLLABLE GGETYI SYLLABLE GGEXYI SY" + - "LLABLE GGEYI SYLLABLE GGEPYI SYLLABLE GGUTYI SYLLABLE GGUXYI SYLLABLE GG" + - "UYI SYLLABLE GGUPYI SYLLABLE GGURXYI SYLLABLE GGURYI SYLLABLE MGIEXYI SY" + - "LLABLE MGIEYI SYLLABLE MGATYI SYLLABLE MGAXYI SYLLABLE MGAYI SYLLABLE MG" + - "APYI SYLLABLE MGUOXYI SYLLABLE MGUOYI SYLLABLE MGUOPYI SYLLABLE MGOTYI S" + - "YLLABLE MGOXYI SYLLABLE MGOYI SYLLABLE MGOPYI SYLLABLE MGEXYI SYLLABLE M" + - "GEYI SYLLABLE MGEPYI SYLLABLE MGUTYI SYLLABLE MGUXYI SYLLABLE MGUYI SYLL" + - "ABLE MGUPYI SYLLABLE MGURXYI SYLLABLE MGURYI SYLLABLE HXITYI SYLLABLE HX" + - "IXYI SYLLABLE HXIYI SYLLABLE HXIPYI SYLLABLE HXIETYI SYLLABLE HXIEXYI SY" + - "LLABLE HXIEYI SYLLABLE HXIEPYI SYLLABLE HXATYI SYLLABLE HXAXYI SYLLABLE " + - "HXAYI SYLLABLE HXAPYI SYLLABLE HXUOTYI SYLLABLE HXUOXYI SYLLABLE HXUOYI " + - "SYLLABLE HXUOPYI SYLLABLE HXOTYI SYLLABLE HXOXYI SYLLABLE HXOYI SYLLABLE" + - " HXOPYI SYLLABLE HXEXYI SYLLABLE HXEYI SYLLABLE HXEPYI SYLLABLE NGIEXYI " + - "SYLLABLE NGIEYI SYLLABLE NGIEPYI SYLLABLE NGATYI SYLLABLE NGAXYI SYLLABL" + - "E NGAYI SYLLABLE NGAPYI SYLLABLE NGUOTYI SYLLABLE NGUOXYI SYLLABLE NGUOY" + - "I SYLLABLE NGOTYI SYLLABLE NGOXYI SYLLABLE NGOYI SYLLABLE NGOPYI SYLLABL" + - "E NGEXYI SYLLABLE NGEYI SYLLABLE NGEPYI SYLLABLE HITYI SYLLABLE HIEXYI S" + - "YLLABLE HIEYI SYLLABLE HATYI SYLLABLE HAXYI SYLLABLE HAYI SYLLABLE HAPYI" + - " SYLLABLE HUOTYI SYLLABLE HUOXYI SYLLABLE HUOYI SYLLABLE HUOPYI SYLLABLE" + - " HOTYI SYLLABLE HOXYI SYLLABLE HOYI SYLLABLE HOPYI SYLLABLE HEXYI SYLLAB" + - "LE HEYI SYLLABLE HEPYI SYLLABLE WATYI SYLLABLE WAXYI SYLLABLE WAYI SYLLA" + - "BLE WAPYI SYLLABLE WUOXYI SYLLABLE WUOYI SYLLABLE WUOPYI SYLLABLE WOXYI " + - "SYLLABLE WOYI SYLLABLE WOPYI SYLLABLE WEXYI SYLLABLE WEYI SYLLABLE WEPYI" + - " SYLLABLE ZITYI SYLLABLE ZIXYI SYLLABLE ZIYI SYLLABLE ZIPYI SYLLABLE ZIE" + - "XYI SYLLABLE ZIEYI SYLLABLE ZIEPYI SYLLABLE ZATYI SYLLABLE ZAXYI SYLLABL" + - "E ZAYI SYLLABLE ZAPYI SYLLABLE ZUOXYI SYLLABLE ZUOYI SYLLABLE ZUOPYI SYL" + - "LABLE ZOTYI SYLLABLE ZOXYI SYLLABLE ZOYI SYLLABLE ZOPYI SYLLABLE ZEXYI S" + - "YLLABLE ZEYI SYLLABLE ZEPYI SYLLABLE ZUTYI SYLLABLE ZUXYI SYLLABLE ZUYI " + - "SYLLABLE ZUPYI SYLLABLE ZURXYI SYLLABLE ZURYI SYLLABLE ZYTYI SYLLABLE ZY" + - "XYI SYLLABLE ZYYI SYLLABLE ZYPYI SYLLABLE ZYRXYI SYLLABLE ZYRYI SYLLABLE" + - " CITYI SYLLABLE CIXYI SYLLABLE CIYI SYLLABLE CIPYI SYLLABLE CIETYI SYLLA" + - "BLE CIEXYI SYLLABLE CIEYI SYLLABLE CIEPYI SYLLABLE CATYI SYLLABLE CAXYI " + - "SYLLABLE CAYI SYLLABLE CAPYI SYLLABLE CUOXYI SYLLABLE CUOYI SYLLABLE CUO") + ("" + - "PYI SYLLABLE COTYI SYLLABLE COXYI SYLLABLE COYI SYLLABLE COPYI SYLLABLE " + - "CEXYI SYLLABLE CEYI SYLLABLE CEPYI SYLLABLE CUTYI SYLLABLE CUXYI SYLLABL" + - "E CUYI SYLLABLE CUPYI SYLLABLE CURXYI SYLLABLE CURYI SYLLABLE CYTYI SYLL" + - "ABLE CYXYI SYLLABLE CYYI SYLLABLE CYPYI SYLLABLE CYRXYI SYLLABLE CYRYI S" + - "YLLABLE ZZITYI SYLLABLE ZZIXYI SYLLABLE ZZIYI SYLLABLE ZZIPYI SYLLABLE Z" + - "ZIETYI SYLLABLE ZZIEXYI SYLLABLE ZZIEYI SYLLABLE ZZIEPYI SYLLABLE ZZATYI" + - " SYLLABLE ZZAXYI SYLLABLE ZZAYI SYLLABLE ZZAPYI SYLLABLE ZZOXYI SYLLABLE" + - " ZZOYI SYLLABLE ZZOPYI SYLLABLE ZZEXYI SYLLABLE ZZEYI SYLLABLE ZZEPYI SY" + - "LLABLE ZZUXYI SYLLABLE ZZUYI SYLLABLE ZZUPYI SYLLABLE ZZURXYI SYLLABLE Z" + - "ZURYI SYLLABLE ZZYTYI SYLLABLE ZZYXYI SYLLABLE ZZYYI SYLLABLE ZZYPYI SYL" + - "LABLE ZZYRXYI SYLLABLE ZZYRYI SYLLABLE NZITYI SYLLABLE NZIXYI SYLLABLE N" + - "ZIYI SYLLABLE NZIPYI SYLLABLE NZIEXYI SYLLABLE NZIEYI SYLLABLE NZIEPYI S" + - "YLLABLE NZATYI SYLLABLE NZAXYI SYLLABLE NZAYI SYLLABLE NZAPYI SYLLABLE N" + - "ZUOXYI SYLLABLE NZUOYI SYLLABLE NZOXYI SYLLABLE NZOPYI SYLLABLE NZEXYI S" + - "YLLABLE NZEYI SYLLABLE NZUXYI SYLLABLE NZUYI SYLLABLE NZUPYI SYLLABLE NZ" + - "URXYI SYLLABLE NZURYI SYLLABLE NZYTYI SYLLABLE NZYXYI SYLLABLE NZYYI SYL" + - "LABLE NZYPYI SYLLABLE NZYRXYI SYLLABLE NZYRYI SYLLABLE SITYI SYLLABLE SI" + - "XYI SYLLABLE SIYI SYLLABLE SIPYI SYLLABLE SIEXYI SYLLABLE SIEYI SYLLABLE" + - " SIEPYI SYLLABLE SATYI SYLLABLE SAXYI SYLLABLE SAYI SYLLABLE SAPYI SYLLA" + - "BLE SUOXYI SYLLABLE SUOYI SYLLABLE SUOPYI SYLLABLE SOTYI SYLLABLE SOXYI " + - "SYLLABLE SOYI SYLLABLE SOPYI SYLLABLE SEXYI SYLLABLE SEYI SYLLABLE SEPYI" + - " SYLLABLE SUTYI SYLLABLE SUXYI SYLLABLE SUYI SYLLABLE SUPYI SYLLABLE SUR" + - "XYI SYLLABLE SURYI SYLLABLE SYTYI SYLLABLE SYXYI SYLLABLE SYYI SYLLABLE " + - "SYPYI SYLLABLE SYRXYI SYLLABLE SYRYI SYLLABLE SSITYI SYLLABLE SSIXYI SYL" + - "LABLE SSIYI SYLLABLE SSIPYI SYLLABLE SSIEXYI SYLLABLE SSIEYI SYLLABLE SS" + - "IEPYI SYLLABLE SSATYI SYLLABLE SSAXYI SYLLABLE SSAYI SYLLABLE SSAPYI SYL" + - "LABLE SSOTYI SYLLABLE SSOXYI SYLLABLE SSOYI SYLLABLE SSOPYI SYLLABLE SSE" + - "XYI SYLLABLE SSEYI SYLLABLE SSEPYI SYLLABLE SSUTYI SYLLABLE SSUXYI SYLLA" + - "BLE SSUYI SYLLABLE SSUPYI SYLLABLE SSYTYI SYLLABLE SSYXYI SYLLABLE SSYYI" + - " SYLLABLE SSYPYI SYLLABLE SSYRXYI SYLLABLE SSYRYI SYLLABLE ZHATYI SYLLAB" + - "LE ZHAXYI SYLLABLE ZHAYI SYLLABLE ZHAPYI SYLLABLE ZHUOXYI SYLLABLE ZHUOY" + - "I SYLLABLE ZHUOPYI SYLLABLE ZHOTYI SYLLABLE ZHOXYI SYLLABLE ZHOYI SYLLAB" + - "LE ZHOPYI SYLLABLE ZHETYI SYLLABLE ZHEXYI SYLLABLE ZHEYI SYLLABLE ZHEPYI" + - " SYLLABLE ZHUTYI SYLLABLE ZHUXYI SYLLABLE ZHUYI SYLLABLE ZHUPYI SYLLABLE" + - " ZHURXYI SYLLABLE ZHURYI SYLLABLE ZHYTYI SYLLABLE ZHYXYI SYLLABLE ZHYYI " + - "SYLLABLE ZHYPYI SYLLABLE ZHYRXYI SYLLABLE ZHYRYI SYLLABLE CHATYI SYLLABL" + - "E CHAXYI SYLLABLE CHAYI SYLLABLE CHAPYI SYLLABLE CHUOTYI SYLLABLE CHUOXY" + - "I SYLLABLE CHUOYI SYLLABLE CHUOPYI SYLLABLE CHOTYI SYLLABLE CHOXYI SYLLA" + - "BLE CHOYI SYLLABLE CHOPYI SYLLABLE CHETYI SYLLABLE CHEXYI SYLLABLE CHEYI" + - " SYLLABLE CHEPYI SYLLABLE CHUXYI SYLLABLE CHUYI SYLLABLE CHUPYI SYLLABLE" + - " CHURXYI SYLLABLE CHURYI SYLLABLE CHYTYI SYLLABLE CHYXYI SYLLABLE CHYYI " + - "SYLLABLE CHYPYI SYLLABLE CHYRXYI SYLLABLE CHYRYI SYLLABLE RRAXYI SYLLABL" + - "E RRAYI SYLLABLE RRUOXYI SYLLABLE RRUOYI SYLLABLE RROTYI SYLLABLE RROXYI" + - " SYLLABLE RROYI SYLLABLE RROPYI SYLLABLE RRETYI SYLLABLE RREXYI SYLLABLE" + - " RREYI SYLLABLE RREPYI SYLLABLE RRUTYI SYLLABLE RRUXYI SYLLABLE RRUYI SY" + - "LLABLE RRUPYI SYLLABLE RRURXYI SYLLABLE RRURYI SYLLABLE RRYTYI SYLLABLE " + - "RRYXYI SYLLABLE RRYYI SYLLABLE RRYPYI SYLLABLE RRYRXYI SYLLABLE RRYRYI S" + - "YLLABLE NRATYI SYLLABLE NRAXYI SYLLABLE NRAYI SYLLABLE NRAPYI SYLLABLE N" + - "ROXYI SYLLABLE NROYI SYLLABLE NROPYI SYLLABLE NRETYI SYLLABLE NREXYI SYL" + - "LABLE NREYI SYLLABLE NREPYI SYLLABLE NRUTYI SYLLABLE NRUXYI SYLLABLE NRU" + - "YI SYLLABLE NRUPYI SYLLABLE NRURXYI SYLLABLE NRURYI SYLLABLE NRYTYI SYLL" + - "ABLE NRYXYI SYLLABLE NRYYI SYLLABLE NRYPYI SYLLABLE NRYRXYI SYLLABLE NRY" + - "RYI SYLLABLE SHATYI SYLLABLE SHAXYI SYLLABLE SHAYI SYLLABLE SHAPYI SYLLA" + - "BLE SHUOXYI SYLLABLE SHUOYI SYLLABLE SHUOPYI SYLLABLE SHOTYI SYLLABLE SH" + - "OXYI SYLLABLE SHOYI SYLLABLE SHOPYI SYLLABLE SHETYI SYLLABLE SHEXYI SYLL" + - "ABLE SHEYI SYLLABLE SHEPYI SYLLABLE SHUTYI SYLLABLE SHUXYI SYLLABLE SHUY" + - "I SYLLABLE SHUPYI SYLLABLE SHURXYI SYLLABLE SHURYI SYLLABLE SHYTYI SYLLA" + - "BLE SHYXYI SYLLABLE SHYYI SYLLABLE SHYPYI SYLLABLE SHYRXYI SYLLABLE SHYR" + - "YI SYLLABLE RATYI SYLLABLE RAXYI SYLLABLE RAYI SYLLABLE RAPYI SYLLABLE R" + - "UOXYI SYLLABLE RUOYI SYLLABLE RUOPYI SYLLABLE ROTYI SYLLABLE ROXYI SYLLA" + - "BLE ROYI SYLLABLE ROPYI SYLLABLE REXYI SYLLABLE REYI SYLLABLE REPYI SYLL" + - "ABLE RUTYI SYLLABLE RUXYI SYLLABLE RUYI SYLLABLE RUPYI SYLLABLE RURXYI S" + - "YLLABLE RURYI SYLLABLE RYTYI SYLLABLE RYXYI SYLLABLE RYYI SYLLABLE RYPYI" + - " SYLLABLE RYRXYI SYLLABLE RYRYI SYLLABLE JITYI SYLLABLE JIXYI SYLLABLE J") + ("" + - "IYI SYLLABLE JIPYI SYLLABLE JIETYI SYLLABLE JIEXYI SYLLABLE JIEYI SYLLAB" + - "LE JIEPYI SYLLABLE JUOTYI SYLLABLE JUOXYI SYLLABLE JUOYI SYLLABLE JUOPYI" + - " SYLLABLE JOTYI SYLLABLE JOXYI SYLLABLE JOYI SYLLABLE JOPYI SYLLABLE JUT" + - "YI SYLLABLE JUXYI SYLLABLE JUYI SYLLABLE JUPYI SYLLABLE JURXYI SYLLABLE " + - "JURYI SYLLABLE JYTYI SYLLABLE JYXYI SYLLABLE JYYI SYLLABLE JYPYI SYLLABL" + - "E JYRXYI SYLLABLE JYRYI SYLLABLE QITYI SYLLABLE QIXYI SYLLABLE QIYI SYLL" + - "ABLE QIPYI SYLLABLE QIETYI SYLLABLE QIEXYI SYLLABLE QIEYI SYLLABLE QIEPY" + - "I SYLLABLE QUOTYI SYLLABLE QUOXYI SYLLABLE QUOYI SYLLABLE QUOPYI SYLLABL" + - "E QOTYI SYLLABLE QOXYI SYLLABLE QOYI SYLLABLE QOPYI SYLLABLE QUTYI SYLLA" + - "BLE QUXYI SYLLABLE QUYI SYLLABLE QUPYI SYLLABLE QURXYI SYLLABLE QURYI SY" + - "LLABLE QYTYI SYLLABLE QYXYI SYLLABLE QYYI SYLLABLE QYPYI SYLLABLE QYRXYI" + - " SYLLABLE QYRYI SYLLABLE JJITYI SYLLABLE JJIXYI SYLLABLE JJIYI SYLLABLE " + - "JJIPYI SYLLABLE JJIETYI SYLLABLE JJIEXYI SYLLABLE JJIEYI SYLLABLE JJIEPY" + - "I SYLLABLE JJUOXYI SYLLABLE JJUOYI SYLLABLE JJUOPYI SYLLABLE JJOTYI SYLL" + - "ABLE JJOXYI SYLLABLE JJOYI SYLLABLE JJOPYI SYLLABLE JJUTYI SYLLABLE JJUX" + - "YI SYLLABLE JJUYI SYLLABLE JJUPYI SYLLABLE JJURXYI SYLLABLE JJURYI SYLLA" + - "BLE JJYTYI SYLLABLE JJYXYI SYLLABLE JJYYI SYLLABLE JJYPYI SYLLABLE NJITY" + - "I SYLLABLE NJIXYI SYLLABLE NJIYI SYLLABLE NJIPYI SYLLABLE NJIETYI SYLLAB" + - "LE NJIEXYI SYLLABLE NJIEYI SYLLABLE NJIEPYI SYLLABLE NJUOXYI SYLLABLE NJ" + - "UOYI SYLLABLE NJOTYI SYLLABLE NJOXYI SYLLABLE NJOYI SYLLABLE NJOPYI SYLL" + - "ABLE NJUXYI SYLLABLE NJUYI SYLLABLE NJUPYI SYLLABLE NJURXYI SYLLABLE NJU" + - "RYI SYLLABLE NJYTYI SYLLABLE NJYXYI SYLLABLE NJYYI SYLLABLE NJYPYI SYLLA" + - "BLE NJYRXYI SYLLABLE NJYRYI SYLLABLE NYITYI SYLLABLE NYIXYI SYLLABLE NYI" + - "YI SYLLABLE NYIPYI SYLLABLE NYIETYI SYLLABLE NYIEXYI SYLLABLE NYIEYI SYL" + - "LABLE NYIEPYI SYLLABLE NYUOXYI SYLLABLE NYUOYI SYLLABLE NYUOPYI SYLLABLE" + - " NYOTYI SYLLABLE NYOXYI SYLLABLE NYOYI SYLLABLE NYOPYI SYLLABLE NYUTYI S" + - "YLLABLE NYUXYI SYLLABLE NYUYI SYLLABLE NYUPYI SYLLABLE XITYI SYLLABLE XI" + - "XYI SYLLABLE XIYI SYLLABLE XIPYI SYLLABLE XIETYI SYLLABLE XIEXYI SYLLABL" + - "E XIEYI SYLLABLE XIEPYI SYLLABLE XUOXYI SYLLABLE XUOYI SYLLABLE XOTYI SY" + - "LLABLE XOXYI SYLLABLE XOYI SYLLABLE XOPYI SYLLABLE XYTYI SYLLABLE XYXYI " + - "SYLLABLE XYYI SYLLABLE XYPYI SYLLABLE XYRXYI SYLLABLE XYRYI SYLLABLE YIT" + - "YI SYLLABLE YIXYI SYLLABLE YIYI SYLLABLE YIPYI SYLLABLE YIETYI SYLLABLE " + - "YIEXYI SYLLABLE YIEYI SYLLABLE YIEPYI SYLLABLE YUOTYI SYLLABLE YUOXYI SY" + - "LLABLE YUOYI SYLLABLE YUOPYI SYLLABLE YOTYI SYLLABLE YOXYI SYLLABLE YOYI" + - " SYLLABLE YOPYI SYLLABLE YUTYI SYLLABLE YUXYI SYLLABLE YUYI SYLLABLE YUP" + - "YI SYLLABLE YURXYI SYLLABLE YURYI SYLLABLE YYTYI SYLLABLE YYXYI SYLLABLE" + - " YYYI SYLLABLE YYPYI SYLLABLE YYRXYI SYLLABLE YYRYI RADICAL QOTYI RADICA" + - "L LIYI RADICAL KITYI RADICAL NYIPYI RADICAL CYPYI RADICAL SSIYI RADICAL " + - "GGOPYI RADICAL GEPYI RADICAL MIYI RADICAL HXITYI RADICAL LYRYI RADICAL B" + - "BUTYI RADICAL MOPYI RADICAL YOYI RADICAL PUTYI RADICAL HXUOYI RADICAL TA" + - "TYI RADICAL GAYI RADICAL ZUPYI RADICAL CYTYI RADICAL DDURYI RADICAL BURY" + - "I RADICAL GGUOYI RADICAL NYOPYI RADICAL TUYI RADICAL OPYI RADICAL JJUTYI" + - " RADICAL ZOTYI RADICAL PYTYI RADICAL HMOYI RADICAL YITYI RADICAL VURYI R" + - "ADICAL SHYYI RADICAL VEPYI RADICAL ZAYI RADICAL JOYI RADICAL NZUPYI RADI" + - "CAL JJYYI RADICAL GOTYI RADICAL JJIEYI RADICAL WOYI RADICAL DUYI RADICAL" + - " SHURYI RADICAL LIEYI RADICAL CYYI RADICAL CUOPYI RADICAL CIPYI RADICAL " + - "HXOPYI RADICAL SHATYI RADICAL ZURYI RADICAL SHOPYI RADICAL CHEYI RADICAL" + - " ZZIETYI RADICAL NBIEYI RADICAL KELISU LETTER BALISU LETTER PALISU LETTE" + - "R PHALISU LETTER DALISU LETTER TALISU LETTER THALISU LETTER GALISU LETTE" + - "R KALISU LETTER KHALISU LETTER JALISU LETTER CALISU LETTER CHALISU LETTE" + - "R DZALISU LETTER TSALISU LETTER TSHALISU LETTER MALISU LETTER NALISU LET" + - "TER LALISU LETTER SALISU LETTER ZHALISU LETTER ZALISU LETTER NGALISU LET" + - "TER HALISU LETTER XALISU LETTER HHALISU LETTER FALISU LETTER WALISU LETT" + - "ER SHALISU LETTER YALISU LETTER GHALISU LETTER ALISU LETTER AELISU LETTE" + - "R ELISU LETTER EULISU LETTER ILISU LETTER OLISU LETTER ULISU LETTER UELI" + - "SU LETTER UHLISU LETTER OELISU LETTER TONE MYA TILISU LETTER TONE NA POL" + - "ISU LETTER TONE MYA CYALISU LETTER TONE MYA BOLISU LETTER TONE MYA NALIS" + - "U LETTER TONE MYA JEULISU PUNCTUATION COMMALISU PUNCTUATION FULL STOPVAI" + - " SYLLABLE EEVAI SYLLABLE EENVAI SYLLABLE HEEVAI SYLLABLE WEEVAI SYLLABLE" + - " WEENVAI SYLLABLE PEEVAI SYLLABLE BHEEVAI SYLLABLE BEEVAI SYLLABLE MBEEV" + - "AI SYLLABLE KPEEVAI SYLLABLE MGBEEVAI SYLLABLE GBEEVAI SYLLABLE FEEVAI S" + - "YLLABLE VEEVAI SYLLABLE TEEVAI SYLLABLE THEEVAI SYLLABLE DHEEVAI SYLLABL" + - "E DHHEEVAI SYLLABLE LEEVAI SYLLABLE REEVAI SYLLABLE DEEVAI SYLLABLE NDEE" + - "VAI SYLLABLE SEEVAI SYLLABLE SHEEVAI SYLLABLE ZEEVAI SYLLABLE ZHEEVAI SY") + ("" + - "LLABLE CEEVAI SYLLABLE JEEVAI SYLLABLE NJEEVAI SYLLABLE YEEVAI SYLLABLE " + - "KEEVAI SYLLABLE NGGEEVAI SYLLABLE GEEVAI SYLLABLE MEEVAI SYLLABLE NEEVAI" + - " SYLLABLE NYEEVAI SYLLABLE IVAI SYLLABLE INVAI SYLLABLE HIVAI SYLLABLE H" + - "INVAI SYLLABLE WIVAI SYLLABLE WINVAI SYLLABLE PIVAI SYLLABLE BHIVAI SYLL" + - "ABLE BIVAI SYLLABLE MBIVAI SYLLABLE KPIVAI SYLLABLE MGBIVAI SYLLABLE GBI" + - "VAI SYLLABLE FIVAI SYLLABLE VIVAI SYLLABLE TIVAI SYLLABLE THIVAI SYLLABL" + - "E DHIVAI SYLLABLE DHHIVAI SYLLABLE LIVAI SYLLABLE RIVAI SYLLABLE DIVAI S" + - "YLLABLE NDIVAI SYLLABLE SIVAI SYLLABLE SHIVAI SYLLABLE ZIVAI SYLLABLE ZH" + - "IVAI SYLLABLE CIVAI SYLLABLE JIVAI SYLLABLE NJIVAI SYLLABLE YIVAI SYLLAB" + - "LE KIVAI SYLLABLE NGGIVAI SYLLABLE GIVAI SYLLABLE MIVAI SYLLABLE NIVAI S" + - "YLLABLE NYIVAI SYLLABLE AVAI SYLLABLE ANVAI SYLLABLE NGANVAI SYLLABLE HA" + - "VAI SYLLABLE HANVAI SYLLABLE WAVAI SYLLABLE WANVAI SYLLABLE PAVAI SYLLAB" + - "LE BHAVAI SYLLABLE BAVAI SYLLABLE MBAVAI SYLLABLE KPAVAI SYLLABLE KPANVA" + - "I SYLLABLE MGBAVAI SYLLABLE GBAVAI SYLLABLE FAVAI SYLLABLE VAVAI SYLLABL" + - "E TAVAI SYLLABLE THAVAI SYLLABLE DHAVAI SYLLABLE DHHAVAI SYLLABLE LAVAI " + - "SYLLABLE RAVAI SYLLABLE DAVAI SYLLABLE NDAVAI SYLLABLE SAVAI SYLLABLE SH" + - "AVAI SYLLABLE ZAVAI SYLLABLE ZHAVAI SYLLABLE CAVAI SYLLABLE JAVAI SYLLAB" + - "LE NJAVAI SYLLABLE YAVAI SYLLABLE KAVAI SYLLABLE KANVAI SYLLABLE NGGAVAI" + - " SYLLABLE GAVAI SYLLABLE MAVAI SYLLABLE NAVAI SYLLABLE NYAVAI SYLLABLE O" + - "OVAI SYLLABLE OONVAI SYLLABLE HOOVAI SYLLABLE WOOVAI SYLLABLE WOONVAI SY" + - "LLABLE POOVAI SYLLABLE BHOOVAI SYLLABLE BOOVAI SYLLABLE MBOOVAI SYLLABLE" + - " KPOOVAI SYLLABLE MGBOOVAI SYLLABLE GBOOVAI SYLLABLE FOOVAI SYLLABLE VOO" + - "VAI SYLLABLE TOOVAI SYLLABLE THOOVAI SYLLABLE DHOOVAI SYLLABLE DHHOOVAI " + - "SYLLABLE LOOVAI SYLLABLE ROOVAI SYLLABLE DOOVAI SYLLABLE NDOOVAI SYLLABL" + - "E SOOVAI SYLLABLE SHOOVAI SYLLABLE ZOOVAI SYLLABLE ZHOOVAI SYLLABLE COOV" + - "AI SYLLABLE JOOVAI SYLLABLE NJOOVAI SYLLABLE YOOVAI SYLLABLE KOOVAI SYLL" + - "ABLE NGGOOVAI SYLLABLE GOOVAI SYLLABLE MOOVAI SYLLABLE NOOVAI SYLLABLE N" + - "YOOVAI SYLLABLE UVAI SYLLABLE UNVAI SYLLABLE HUVAI SYLLABLE HUNVAI SYLLA" + - "BLE WUVAI SYLLABLE WUNVAI SYLLABLE PUVAI SYLLABLE BHUVAI SYLLABLE BUVAI " + - "SYLLABLE MBUVAI SYLLABLE KPUVAI SYLLABLE MGBUVAI SYLLABLE GBUVAI SYLLABL" + - "E FUVAI SYLLABLE VUVAI SYLLABLE TUVAI SYLLABLE THUVAI SYLLABLE DHUVAI SY" + - "LLABLE DHHUVAI SYLLABLE LUVAI SYLLABLE RUVAI SYLLABLE DUVAI SYLLABLE NDU" + - "VAI SYLLABLE SUVAI SYLLABLE SHUVAI SYLLABLE ZUVAI SYLLABLE ZHUVAI SYLLAB" + - "LE CUVAI SYLLABLE JUVAI SYLLABLE NJUVAI SYLLABLE YUVAI SYLLABLE KUVAI SY" + - "LLABLE NGGUVAI SYLLABLE GUVAI SYLLABLE MUVAI SYLLABLE NUVAI SYLLABLE NYU" + - "VAI SYLLABLE OVAI SYLLABLE ONVAI SYLLABLE NGONVAI SYLLABLE HOVAI SYLLABL" + - "E HONVAI SYLLABLE WOVAI SYLLABLE WONVAI SYLLABLE POVAI SYLLABLE BHOVAI S" + - "YLLABLE BOVAI SYLLABLE MBOVAI SYLLABLE KPOVAI SYLLABLE MGBOVAI SYLLABLE " + - "GBOVAI SYLLABLE GBONVAI SYLLABLE FOVAI SYLLABLE VOVAI SYLLABLE TOVAI SYL" + - "LABLE THOVAI SYLLABLE DHOVAI SYLLABLE DHHOVAI SYLLABLE LOVAI SYLLABLE RO" + - "VAI SYLLABLE DOVAI SYLLABLE NDOVAI SYLLABLE SOVAI SYLLABLE SHOVAI SYLLAB" + - "LE ZOVAI SYLLABLE ZHOVAI SYLLABLE COVAI SYLLABLE JOVAI SYLLABLE NJOVAI S" + - "YLLABLE YOVAI SYLLABLE KOVAI SYLLABLE NGGOVAI SYLLABLE GOVAI SYLLABLE MO" + - "VAI SYLLABLE NOVAI SYLLABLE NYOVAI SYLLABLE EVAI SYLLABLE ENVAI SYLLABLE" + - " NGENVAI SYLLABLE HEVAI SYLLABLE HENVAI SYLLABLE WEVAI SYLLABLE WENVAI S" + - "YLLABLE PEVAI SYLLABLE BHEVAI SYLLABLE BEVAI SYLLABLE MBEVAI SYLLABLE KP" + - "EVAI SYLLABLE KPENVAI SYLLABLE MGBEVAI SYLLABLE GBEVAI SYLLABLE GBENVAI " + - "SYLLABLE FEVAI SYLLABLE VEVAI SYLLABLE TEVAI SYLLABLE THEVAI SYLLABLE DH" + - "EVAI SYLLABLE DHHEVAI SYLLABLE LEVAI SYLLABLE REVAI SYLLABLE DEVAI SYLLA" + - "BLE NDEVAI SYLLABLE SEVAI SYLLABLE SHEVAI SYLLABLE ZEVAI SYLLABLE ZHEVAI" + - " SYLLABLE CEVAI SYLLABLE JEVAI SYLLABLE NJEVAI SYLLABLE YEVAI SYLLABLE K" + - "EVAI SYLLABLE NGGEVAI SYLLABLE NGGENVAI SYLLABLE GEVAI SYLLABLE GENVAI S" + - "YLLABLE MEVAI SYLLABLE NEVAI SYLLABLE NYEVAI SYLLABLE NGVAI SYLLABLE LEN" + - "GTHENERVAI COMMAVAI FULL STOPVAI QUESTION MARKVAI SYLLABLE NDOLE FAVAI S" + - "YLLABLE NDOLE KAVAI SYLLABLE NDOLE SOOVAI SYMBOL FEENGVAI SYMBOL KEENGVA" + - "I SYMBOL TINGVAI SYMBOL NIIVAI SYMBOL BANGVAI SYMBOL FAAVAI SYMBOL TAAVA" + - "I SYMBOL DANGVAI SYMBOL DOONGVAI SYMBOL KUNGVAI SYMBOL TONGVAI SYMBOL DO" + - "-OVAI SYMBOL JONGVAI DIGIT ZEROVAI DIGIT ONEVAI DIGIT TWOVAI DIGIT THREE" + - "VAI DIGIT FOURVAI DIGIT FIVEVAI DIGIT SIXVAI DIGIT SEVENVAI DIGIT EIGHTV" + - "AI DIGIT NINEVAI SYLLABLE NDOLE MAVAI SYLLABLE NDOLE DOCYRILLIC CAPITAL " + - "LETTER ZEMLYACYRILLIC SMALL LETTER ZEMLYACYRILLIC CAPITAL LETTER DZELOCY" + - "RILLIC SMALL LETTER DZELOCYRILLIC CAPITAL LETTER REVERSED DZECYRILLIC SM" + - "ALL LETTER REVERSED DZECYRILLIC CAPITAL LETTER IOTACYRILLIC SMALL LETTER" + - " IOTACYRILLIC CAPITAL LETTER DJERVCYRILLIC SMALL LETTER DJERVCYRILLIC CA") + ("" + - "PITAL LETTER MONOGRAPH UKCYRILLIC SMALL LETTER MONOGRAPH UKCYRILLIC CAPI" + - "TAL LETTER BROAD OMEGACYRILLIC SMALL LETTER BROAD OMEGACYRILLIC CAPITAL " + - "LETTER NEUTRAL YERCYRILLIC SMALL LETTER NEUTRAL YERCYRILLIC CAPITAL LETT" + - "ER YERU WITH BACK YERCYRILLIC SMALL LETTER YERU WITH BACK YERCYRILLIC CA" + - "PITAL LETTER IOTIFIED YATCYRILLIC SMALL LETTER IOTIFIED YATCYRILLIC CAPI" + - "TAL LETTER REVERSED YUCYRILLIC SMALL LETTER REVERSED YUCYRILLIC CAPITAL " + - "LETTER IOTIFIED ACYRILLIC SMALL LETTER IOTIFIED ACYRILLIC CAPITAL LETTER" + - " CLOSED LITTLE YUSCYRILLIC SMALL LETTER CLOSED LITTLE YUSCYRILLIC CAPITA" + - "L LETTER BLENDED YUSCYRILLIC SMALL LETTER BLENDED YUSCYRILLIC CAPITAL LE" + - "TTER IOTIFIED CLOSED LITTLE YUSCYRILLIC SMALL LETTER IOTIFIED CLOSED LIT" + - "TLE YUSCYRILLIC CAPITAL LETTER YNCYRILLIC SMALL LETTER YNCYRILLIC CAPITA" + - "L LETTER REVERSED TSECYRILLIC SMALL LETTER REVERSED TSECYRILLIC CAPITAL " + - "LETTER SOFT DECYRILLIC SMALL LETTER SOFT DECYRILLIC CAPITAL LETTER SOFT " + - "ELCYRILLIC SMALL LETTER SOFT ELCYRILLIC CAPITAL LETTER SOFT EMCYRILLIC S" + - "MALL LETTER SOFT EMCYRILLIC CAPITAL LETTER MONOCULAR OCYRILLIC SMALL LET" + - "TER MONOCULAR OCYRILLIC CAPITAL LETTER BINOCULAR OCYRILLIC SMALL LETTER " + - "BINOCULAR OCYRILLIC CAPITAL LETTER DOUBLE MONOCULAR OCYRILLIC SMALL LETT" + - "ER DOUBLE MONOCULAR OCYRILLIC LETTER MULTIOCULAR OCOMBINING CYRILLIC VZM" + - "ETCOMBINING CYRILLIC TEN MILLIONS SIGNCOMBINING CYRILLIC HUNDRED MILLION" + - "S SIGNCOMBINING CYRILLIC THOUSAND MILLIONS SIGNSLAVONIC ASTERISKCOMBININ" + - "G CYRILLIC LETTER UKRAINIAN IECOMBINING CYRILLIC LETTER ICOMBINING CYRIL" + - "LIC LETTER YICOMBINING CYRILLIC LETTER UCOMBINING CYRILLIC LETTER HARD S" + - "IGNCOMBINING CYRILLIC LETTER YERUCOMBINING CYRILLIC LETTER SOFT SIGNCOMB" + - "INING CYRILLIC LETTER OMEGACOMBINING CYRILLIC KAVYKACOMBINING CYRILLIC P" + - "AYEROKCYRILLIC KAVYKACYRILLIC PAYEROKCYRILLIC CAPITAL LETTER DWECYRILLIC" + - " SMALL LETTER DWECYRILLIC CAPITAL LETTER DZWECYRILLIC SMALL LETTER DZWEC" + - "YRILLIC CAPITAL LETTER ZHWECYRILLIC SMALL LETTER ZHWECYRILLIC CAPITAL LE" + - "TTER CCHECYRILLIC SMALL LETTER CCHECYRILLIC CAPITAL LETTER DZZECYRILLIC " + - "SMALL LETTER DZZECYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOKCYRILLIC SMA" + - "LL LETTER TE WITH MIDDLE HOOKCYRILLIC CAPITAL LETTER TWECYRILLIC SMALL L" + - "ETTER TWECYRILLIC CAPITAL LETTER TSWECYRILLIC SMALL LETTER TSWECYRILLIC " + - "CAPITAL LETTER TSSECYRILLIC SMALL LETTER TSSECYRILLIC CAPITAL LETTER TCH" + - "ECYRILLIC SMALL LETTER TCHECYRILLIC CAPITAL LETTER HWECYRILLIC SMALL LET" + - "TER HWECYRILLIC CAPITAL LETTER SHWECYRILLIC SMALL LETTER SHWECYRILLIC CA" + - "PITAL LETTER DOUBLE OCYRILLIC SMALL LETTER DOUBLE OCYRILLIC CAPITAL LETT" + - "ER CROSSED OCYRILLIC SMALL LETTER CROSSED OMODIFIER LETTER CYRILLIC HARD" + - " SIGNMODIFIER LETTER CYRILLIC SOFT SIGNCOMBINING CYRILLIC LETTER EFCOMBI" + - "NING CYRILLIC LETTER IOTIFIED EBAMUM LETTER ABAMUM LETTER KABAMUM LETTER" + - " UBAMUM LETTER KUBAMUM LETTER EEBAMUM LETTER REEBAMUM LETTER TAEBAMUM LE" + - "TTER OBAMUM LETTER NYIBAMUM LETTER IBAMUM LETTER LABAMUM LETTER PABAMUM " + - "LETTER RIIBAMUM LETTER RIEEBAMUM LETTER LEEEEBAMUM LETTER MEEEEBAMUM LET" + - "TER TAABAMUM LETTER NDAABAMUM LETTER NJAEMBAMUM LETTER MBAMUM LETTER SUU" + - "BAMUM LETTER MUBAMUM LETTER SHIIBAMUM LETTER SIBAMUM LETTER SHEUXBAMUM L" + - "ETTER SEUXBAMUM LETTER KYEEBAMUM LETTER KETBAMUM LETTER NUAEBAMUM LETTER" + - " NUBAMUM LETTER NJUAEBAMUM LETTER YOQBAMUM LETTER SHUBAMUM LETTER YUQBAM" + - "UM LETTER YABAMUM LETTER NSHABAMUM LETTER KEUXBAMUM LETTER PEUXBAMUM LET" + - "TER NJEEBAMUM LETTER NTEEBAMUM LETTER PUEBAMUM LETTER WUEBAMUM LETTER PE" + - "EBAMUM LETTER FEEBAMUM LETTER RUBAMUM LETTER LUBAMUM LETTER MIBAMUM LETT" + - "ER NIBAMUM LETTER REUXBAMUM LETTER RAEBAMUM LETTER KENBAMUM LETTER NGKWA" + - "ENBAMUM LETTER NGGABAMUM LETTER NGABAMUM LETTER SHOBAMUM LETTER PUAEBAMU" + - "M LETTER FUBAMUM LETTER FOMBAMUM LETTER WABAMUM LETTER NABAMUM LETTER LI" + - "BAMUM LETTER PIBAMUM LETTER LOQBAMUM LETTER KOBAMUM LETTER MBENBAMUM LET" + - "TER RENBAMUM LETTER MENBAMUM LETTER MABAMUM LETTER TIBAMUM LETTER KIBAMU" + - "M LETTER MOBAMUM LETTER MBAABAMUM LETTER TETBAMUM LETTER KPABAMUM LETTER" + - " TENBAMUM LETTER NTUUBAMUM LETTER SAMBABAMUM LETTER FAAMAEBAMUM LETTER K" + - "OVUUBAMUM LETTER KOGHOMBAMUM COMBINING MARK KOQNDONBAMUM COMBINING MARK " + - "TUKWENTISBAMUM NJAEMLIBAMUM FULL STOPBAMUM COLONBAMUM COMMABAMUM SEMICOL" + - "ONBAMUM QUESTION MARKMODIFIER LETTER CHINESE TONE YIN PINGMODIFIER LETTE" + - "R CHINESE TONE YANG PINGMODIFIER LETTER CHINESE TONE YIN SHANGMODIFIER L" + - "ETTER CHINESE TONE YANG SHANGMODIFIER LETTER CHINESE TONE YIN QUMODIFIER" + - " LETTER CHINESE TONE YANG QUMODIFIER LETTER CHINESE TONE YIN RUMODIFIER " + - "LETTER CHINESE TONE YANG RUMODIFIER LETTER EXTRA-HIGH DOTTED TONE BARMOD" + - "IFIER LETTER HIGH DOTTED TONE BARMODIFIER LETTER MID DOTTED TONE BARMODI" + - "FIER LETTER LOW DOTTED TONE BARMODIFIER LETTER EXTRA-LOW DOTTED TONE BAR") + ("" + - "MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BARMODIFIER LETTER HIGH" + - " DOTTED LEFT-STEM TONE BARMODIFIER LETTER MID DOTTED LEFT-STEM TONE BARM" + - "ODIFIER LETTER LOW DOTTED LEFT-STEM TONE BARMODIFIER LETTER EXTRA-LOW DO" + - "TTED LEFT-STEM TONE BARMODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BARMODI" + - "FIER LETTER HIGH LEFT-STEM TONE BARMODIFIER LETTER MID LEFT-STEM TONE BA" + - "RMODIFIER LETTER LOW LEFT-STEM TONE BARMODIFIER LETTER EXTRA-LOW LEFT-ST" + - "EM TONE BARMODIFIER LETTER DOT VERTICAL BARMODIFIER LETTER DOT SLASHMODI" + - "FIER LETTER DOT HORIZONTAL BARMODIFIER LETTER LOWER RIGHT CORNER ANGLEMO" + - "DIFIER LETTER RAISED UP ARROWMODIFIER LETTER RAISED DOWN ARROWMODIFIER L" + - "ETTER RAISED EXCLAMATION MARKMODIFIER LETTER RAISED INVERTED EXCLAMATION" + - " MARKMODIFIER LETTER LOW INVERTED EXCLAMATION MARKMODIFIER LETTER STRESS" + - " AND HIGH TONEMODIFIER LETTER STRESS AND LOW TONELATIN CAPITAL LETTER EG" + - "YPTOLOGICAL ALEFLATIN SMALL LETTER EGYPTOLOGICAL ALEFLATIN CAPITAL LETTE" + - "R EGYPTOLOGICAL AINLATIN SMALL LETTER EGYPTOLOGICAL AINLATIN CAPITAL LET" + - "TER HENGLATIN SMALL LETTER HENGLATIN CAPITAL LETTER TZLATIN SMALL LETTER" + - " TZLATIN CAPITAL LETTER TRESILLOLATIN SMALL LETTER TRESILLOLATIN CAPITAL" + - " LETTER CUATRILLOLATIN SMALL LETTER CUATRILLOLATIN CAPITAL LETTER CUATRI" + - "LLO WITH COMMALATIN SMALL LETTER CUATRILLO WITH COMMALATIN LETTER SMALL " + - "CAPITAL FLATIN LETTER SMALL CAPITAL SLATIN CAPITAL LETTER AALATIN SMALL " + - "LETTER AALATIN CAPITAL LETTER AOLATIN SMALL LETTER AOLATIN CAPITAL LETTE" + - "R AULATIN SMALL LETTER AULATIN CAPITAL LETTER AVLATIN SMALL LETTER AVLAT" + - "IN CAPITAL LETTER AV WITH HORIZONTAL BARLATIN SMALL LETTER AV WITH HORIZ" + - "ONTAL BARLATIN CAPITAL LETTER AYLATIN SMALL LETTER AYLATIN CAPITAL LETTE" + - "R REVERSED C WITH DOTLATIN SMALL LETTER REVERSED C WITH DOTLATIN CAPITAL" + - " LETTER K WITH STROKELATIN SMALL LETTER K WITH STROKELATIN CAPITAL LETTE" + - "R K WITH DIAGONAL STROKELATIN SMALL LETTER K WITH DIAGONAL STROKELATIN C" + - "APITAL LETTER K WITH STROKE AND DIAGONAL STROKELATIN SMALL LETTER K WITH" + - " STROKE AND DIAGONAL STROKELATIN CAPITAL LETTER BROKEN LLATIN SMALL LETT" + - "ER BROKEN LLATIN CAPITAL LETTER L WITH HIGH STROKELATIN SMALL LETTER L W" + - "ITH HIGH STROKELATIN CAPITAL LETTER O WITH LONG STROKE OVERLAYLATIN SMAL" + - "L LETTER O WITH LONG STROKE OVERLAYLATIN CAPITAL LETTER O WITH LOOPLATIN" + - " SMALL LETTER O WITH LOOPLATIN CAPITAL LETTER OOLATIN SMALL LETTER OOLAT" + - "IN CAPITAL LETTER P WITH STROKE THROUGH DESCENDERLATIN SMALL LETTER P WI" + - "TH STROKE THROUGH DESCENDERLATIN CAPITAL LETTER P WITH FLOURISHLATIN SMA" + - "LL LETTER P WITH FLOURISHLATIN CAPITAL LETTER P WITH SQUIRREL TAILLATIN " + - "SMALL LETTER P WITH SQUIRREL TAILLATIN CAPITAL LETTER Q WITH STROKE THRO" + - "UGH DESCENDERLATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDERLATIN CAP" + - "ITAL LETTER Q WITH DIAGONAL STROKELATIN SMALL LETTER Q WITH DIAGONAL STR" + - "OKELATIN CAPITAL LETTER R ROTUNDALATIN SMALL LETTER R ROTUNDALATIN CAPIT" + - "AL LETTER RUM ROTUNDALATIN SMALL LETTER RUM ROTUNDALATIN CAPITAL LETTER " + - "V WITH DIAGONAL STROKELATIN SMALL LETTER V WITH DIAGONAL STROKELATIN CAP" + - "ITAL LETTER VYLATIN SMALL LETTER VYLATIN CAPITAL LETTER VISIGOTHIC ZLATI" + - "N SMALL LETTER VISIGOTHIC ZLATIN CAPITAL LETTER THORN WITH STROKELATIN S" + - "MALL LETTER THORN WITH STROKELATIN CAPITAL LETTER THORN WITH STROKE THRO" + - "UGH DESCENDERLATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDERLATIN" + - " CAPITAL LETTER VENDLATIN SMALL LETTER VENDLATIN CAPITAL LETTER ETLATIN " + - "SMALL LETTER ETLATIN CAPITAL LETTER ISLATIN SMALL LETTER ISLATIN CAPITAL" + - " LETTER CONLATIN SMALL LETTER CONMODIFIER LETTER USLATIN SMALL LETTER DU" + - "MLATIN SMALL LETTER LUMLATIN SMALL LETTER MUMLATIN SMALL LETTER NUMLATIN" + - " SMALL LETTER RUMLATIN LETTER SMALL CAPITAL RUMLATIN SMALL LETTER TUMLAT" + - "IN SMALL LETTER UMLATIN CAPITAL LETTER INSULAR DLATIN SMALL LETTER INSUL" + - "AR DLATIN CAPITAL LETTER INSULAR FLATIN SMALL LETTER INSULAR FLATIN CAPI" + - "TAL LETTER INSULAR GLATIN CAPITAL LETTER TURNED INSULAR GLATIN SMALL LET" + - "TER TURNED INSULAR GLATIN CAPITAL LETTER TURNED LLATIN SMALL LETTER TURN" + - "ED LLATIN CAPITAL LETTER INSULAR RLATIN SMALL LETTER INSULAR RLATIN CAPI" + - "TAL LETTER INSULAR SLATIN SMALL LETTER INSULAR SLATIN CAPITAL LETTER INS" + - "ULAR TLATIN SMALL LETTER INSULAR TMODIFIER LETTER LOW CIRCUMFLEX ACCENTM" + - "ODIFIER LETTER COLONMODIFIER LETTER SHORT EQUALS SIGNLATIN CAPITAL LETTE" + - "R SALTILLOLATIN SMALL LETTER SALTILLOLATIN CAPITAL LETTER TURNED HLATIN " + - "SMALL LETTER L WITH RETROFLEX HOOK AND BELTLATIN LETTER SINOLOGICAL DOTL" + - "ATIN CAPITAL LETTER N WITH DESCENDERLATIN SMALL LETTER N WITH DESCENDERL" + - "ATIN CAPITAL LETTER C WITH BARLATIN SMALL LETTER C WITH BARLATIN SMALL L" + - "ETTER C WITH PALATAL HOOKLATIN SMALL LETTER H WITH PALATAL HOOKLATIN CAP" + - "ITAL LETTER B WITH FLOURISHLATIN SMALL LETTER B WITH FLOURISHLATIN CAPIT") + ("" + - "AL LETTER F WITH STROKELATIN SMALL LETTER F WITH STROKELATIN CAPITAL LET" + - "TER VOLAPUK AELATIN SMALL LETTER VOLAPUK AELATIN CAPITAL LETTER VOLAPUK " + - "OELATIN SMALL LETTER VOLAPUK OELATIN CAPITAL LETTER VOLAPUK UELATIN SMAL" + - "L LETTER VOLAPUK UELATIN CAPITAL LETTER G WITH OBLIQUE STROKELATIN SMALL" + - " LETTER G WITH OBLIQUE STROKELATIN CAPITAL LETTER K WITH OBLIQUE STROKEL" + - "ATIN SMALL LETTER K WITH OBLIQUE STROKELATIN CAPITAL LETTER N WITH OBLIQ" + - "UE STROKELATIN SMALL LETTER N WITH OBLIQUE STROKELATIN CAPITAL LETTER R " + - "WITH OBLIQUE STROKELATIN SMALL LETTER R WITH OBLIQUE STROKELATIN CAPITAL" + - " LETTER S WITH OBLIQUE STROKELATIN SMALL LETTER S WITH OBLIQUE STROKELAT" + - "IN CAPITAL LETTER H WITH HOOKLATIN CAPITAL LETTER REVERSED OPEN ELATIN C" + - "APITAL LETTER SCRIPT GLATIN CAPITAL LETTER L WITH BELTLATIN CAPITAL LETT" + - "ER SMALL CAPITAL ILATIN CAPITAL LETTER TURNED KLATIN CAPITAL LETTER TURN" + - "ED TLATIN CAPITAL LETTER J WITH CROSSED-TAILLATIN CAPITAL LETTER CHILATI" + - "N CAPITAL LETTER BETALATIN SMALL LETTER BETALATIN CAPITAL LETTER OMEGALA" + - "TIN SMALL LETTER OMEGALATIN EPIGRAPHIC LETTER SIDEWAYS IMODIFIER LETTER " + - "CAPITAL H WITH STROKEMODIFIER LETTER SMALL LIGATURE OELATIN LETTER SMALL" + - " CAPITAL TURNED MLATIN EPIGRAPHIC LETTER REVERSED FLATIN EPIGRAPHIC LETT" + - "ER REVERSED PLATIN EPIGRAPHIC LETTER INVERTED MLATIN EPIGRAPHIC LETTER I" + - " LONGALATIN EPIGRAPHIC LETTER ARCHAIC MSYLOTI NAGRI LETTER ASYLOTI NAGRI" + - " LETTER ISYLOTI NAGRI SIGN DVISVARASYLOTI NAGRI LETTER USYLOTI NAGRI LET" + - "TER ESYLOTI NAGRI LETTER OSYLOTI NAGRI SIGN HASANTASYLOTI NAGRI LETTER K" + - "OSYLOTI NAGRI LETTER KHOSYLOTI NAGRI LETTER GOSYLOTI NAGRI LETTER GHOSYL" + - "OTI NAGRI SIGN ANUSVARASYLOTI NAGRI LETTER COSYLOTI NAGRI LETTER CHOSYLO" + - "TI NAGRI LETTER JOSYLOTI NAGRI LETTER JHOSYLOTI NAGRI LETTER TTOSYLOTI N" + - "AGRI LETTER TTHOSYLOTI NAGRI LETTER DDOSYLOTI NAGRI LETTER DDHOSYLOTI NA" + - "GRI LETTER TOSYLOTI NAGRI LETTER THOSYLOTI NAGRI LETTER DOSYLOTI NAGRI L" + - "ETTER DHOSYLOTI NAGRI LETTER NOSYLOTI NAGRI LETTER POSYLOTI NAGRI LETTER" + - " PHOSYLOTI NAGRI LETTER BOSYLOTI NAGRI LETTER BHOSYLOTI NAGRI LETTER MOS" + - "YLOTI NAGRI LETTER ROSYLOTI NAGRI LETTER LOSYLOTI NAGRI LETTER RROSYLOTI" + - " NAGRI LETTER SOSYLOTI NAGRI LETTER HOSYLOTI NAGRI VOWEL SIGN ASYLOTI NA" + - "GRI VOWEL SIGN ISYLOTI NAGRI VOWEL SIGN USYLOTI NAGRI VOWEL SIGN ESYLOTI" + - " NAGRI VOWEL SIGN OOSYLOTI NAGRI POETRY MARK-1SYLOTI NAGRI POETRY MARK-2" + - "SYLOTI NAGRI POETRY MARK-3SYLOTI NAGRI POETRY MARK-4NORTH INDIC FRACTION" + - " ONE QUARTERNORTH INDIC FRACTION ONE HALFNORTH INDIC FRACTION THREE QUAR" + - "TERSNORTH INDIC FRACTION ONE SIXTEENTHNORTH INDIC FRACTION ONE EIGHTHNOR" + - "TH INDIC FRACTION THREE SIXTEENTHSNORTH INDIC QUARTER MARKNORTH INDIC PL" + - "ACEHOLDER MARKNORTH INDIC RUPEE MARKNORTH INDIC QUANTITY MARKPHAGS-PA LE" + - "TTER KAPHAGS-PA LETTER KHAPHAGS-PA LETTER GAPHAGS-PA LETTER NGAPHAGS-PA " + - "LETTER CAPHAGS-PA LETTER CHAPHAGS-PA LETTER JAPHAGS-PA LETTER NYAPHAGS-P" + - "A LETTER TAPHAGS-PA LETTER THAPHAGS-PA LETTER DAPHAGS-PA LETTER NAPHAGS-" + - "PA LETTER PAPHAGS-PA LETTER PHAPHAGS-PA LETTER BAPHAGS-PA LETTER MAPHAGS" + - "-PA LETTER TSAPHAGS-PA LETTER TSHAPHAGS-PA LETTER DZAPHAGS-PA LETTER WAP" + - "HAGS-PA LETTER ZHAPHAGS-PA LETTER ZAPHAGS-PA LETTER SMALL APHAGS-PA LETT" + - "ER YAPHAGS-PA LETTER RAPHAGS-PA LETTER LAPHAGS-PA LETTER SHAPHAGS-PA LET" + - "TER SAPHAGS-PA LETTER HAPHAGS-PA LETTER APHAGS-PA LETTER IPHAGS-PA LETTE" + - "R UPHAGS-PA LETTER EPHAGS-PA LETTER OPHAGS-PA LETTER QAPHAGS-PA LETTER X" + - "APHAGS-PA LETTER FAPHAGS-PA LETTER GGAPHAGS-PA LETTER EEPHAGS-PA SUBJOIN" + - "ED LETTER WAPHAGS-PA SUBJOINED LETTER YAPHAGS-PA LETTER TTAPHAGS-PA LETT" + - "ER TTHAPHAGS-PA LETTER DDAPHAGS-PA LETTER NNAPHAGS-PA LETTER ALTERNATE Y" + - "APHAGS-PA LETTER VOICELESS SHAPHAGS-PA LETTER VOICED HAPHAGS-PA LETTER A" + - "SPIRATED FAPHAGS-PA SUBJOINED LETTER RAPHAGS-PA SUPERFIXED LETTER RAPHAG" + - "S-PA LETTER CANDRABINDUPHAGS-PA SINGLE HEAD MARKPHAGS-PA DOUBLE HEAD MAR" + - "KPHAGS-PA MARK SHADPHAGS-PA MARK DOUBLE SHADSAURASHTRA SIGN ANUSVARASAUR" + - "ASHTRA SIGN VISARGASAURASHTRA LETTER ASAURASHTRA LETTER AASAURASHTRA LET" + - "TER ISAURASHTRA LETTER IISAURASHTRA LETTER USAURASHTRA LETTER UUSAURASHT" + - "RA LETTER VOCALIC RSAURASHTRA LETTER VOCALIC RRSAURASHTRA LETTER VOCALIC" + - " LSAURASHTRA LETTER VOCALIC LLSAURASHTRA LETTER ESAURASHTRA LETTER EESAU" + - "RASHTRA LETTER AISAURASHTRA LETTER OSAURASHTRA LETTER OOSAURASHTRA LETTE" + - "R AUSAURASHTRA LETTER KASAURASHTRA LETTER KHASAURASHTRA LETTER GASAURASH" + - "TRA LETTER GHASAURASHTRA LETTER NGASAURASHTRA LETTER CASAURASHTRA LETTER" + - " CHASAURASHTRA LETTER JASAURASHTRA LETTER JHASAURASHTRA LETTER NYASAURAS" + - "HTRA LETTER TTASAURASHTRA LETTER TTHASAURASHTRA LETTER DDASAURASHTRA LET" + - "TER DDHASAURASHTRA LETTER NNASAURASHTRA LETTER TASAURASHTRA LETTER THASA" + - "URASHTRA LETTER DASAURASHTRA LETTER DHASAURASHTRA LETTER NASAURASHTRA LE") + ("" + - "TTER PASAURASHTRA LETTER PHASAURASHTRA LETTER BASAURASHTRA LETTER BHASAU" + - "RASHTRA LETTER MASAURASHTRA LETTER YASAURASHTRA LETTER RASAURASHTRA LETT" + - "ER LASAURASHTRA LETTER VASAURASHTRA LETTER SHASAURASHTRA LETTER SSASAURA" + - "SHTRA LETTER SASAURASHTRA LETTER HASAURASHTRA LETTER LLASAURASHTRA CONSO" + - "NANT SIGN HAARUSAURASHTRA VOWEL SIGN AASAURASHTRA VOWEL SIGN ISAURASHTRA" + - " VOWEL SIGN IISAURASHTRA VOWEL SIGN USAURASHTRA VOWEL SIGN UUSAURASHTRA " + - "VOWEL SIGN VOCALIC RSAURASHTRA VOWEL SIGN VOCALIC RRSAURASHTRA VOWEL SIG" + - "N VOCALIC LSAURASHTRA VOWEL SIGN VOCALIC LLSAURASHTRA VOWEL SIGN ESAURAS" + - "HTRA VOWEL SIGN EESAURASHTRA VOWEL SIGN AISAURASHTRA VOWEL SIGN OSAURASH" + - "TRA VOWEL SIGN OOSAURASHTRA VOWEL SIGN AUSAURASHTRA SIGN VIRAMASAURASHTR" + - "A SIGN CANDRABINDUSAURASHTRA DANDASAURASHTRA DOUBLE DANDASAURASHTRA DIGI" + - "T ZEROSAURASHTRA DIGIT ONESAURASHTRA DIGIT TWOSAURASHTRA DIGIT THREESAUR" + - "ASHTRA DIGIT FOURSAURASHTRA DIGIT FIVESAURASHTRA DIGIT SIXSAURASHTRA DIG" + - "IT SEVENSAURASHTRA DIGIT EIGHTSAURASHTRA DIGIT NINECOMBINING DEVANAGARI " + - "DIGIT ZEROCOMBINING DEVANAGARI DIGIT ONECOMBINING DEVANAGARI DIGIT TWOCO" + - "MBINING DEVANAGARI DIGIT THREECOMBINING DEVANAGARI DIGIT FOURCOMBINING D" + - "EVANAGARI DIGIT FIVECOMBINING DEVANAGARI DIGIT SIXCOMBINING DEVANAGARI D" + - "IGIT SEVENCOMBINING DEVANAGARI DIGIT EIGHTCOMBINING DEVANAGARI DIGIT NIN" + - "ECOMBINING DEVANAGARI LETTER ACOMBINING DEVANAGARI LETTER UCOMBINING DEV" + - "ANAGARI LETTER KACOMBINING DEVANAGARI LETTER NACOMBINING DEVANAGARI LETT" + - "ER PACOMBINING DEVANAGARI LETTER RACOMBINING DEVANAGARI LETTER VICOMBINI" + - "NG DEVANAGARI SIGN AVAGRAHADEVANAGARI SIGN SPACING CANDRABINDUDEVANAGARI" + - " SIGN CANDRABINDU VIRAMADEVANAGARI SIGN DOUBLE CANDRABINDU VIRAMADEVANAG" + - "ARI SIGN CANDRABINDU TWODEVANAGARI SIGN CANDRABINDU THREEDEVANAGARI SIGN" + - " CANDRABINDU AVAGRAHADEVANAGARI SIGN PUSHPIKADEVANAGARI GAP FILLERDEVANA" + - "GARI CARETDEVANAGARI HEADSTROKEDEVANAGARI SIGN SIDDHAMDEVANAGARI JAIN OM" + - "KAYAH LI DIGIT ZEROKAYAH LI DIGIT ONEKAYAH LI DIGIT TWOKAYAH LI DIGIT TH" + - "REEKAYAH LI DIGIT FOURKAYAH LI DIGIT FIVEKAYAH LI DIGIT SIXKAYAH LI DIGI" + - "T SEVENKAYAH LI DIGIT EIGHTKAYAH LI DIGIT NINEKAYAH LI LETTER KAKAYAH LI" + - " LETTER KHAKAYAH LI LETTER GAKAYAH LI LETTER NGAKAYAH LI LETTER SAKAYAH " + - "LI LETTER SHAKAYAH LI LETTER ZAKAYAH LI LETTER NYAKAYAH LI LETTER TAKAYA" + - "H LI LETTER HTAKAYAH LI LETTER NAKAYAH LI LETTER PAKAYAH LI LETTER PHAKA" + - "YAH LI LETTER MAKAYAH LI LETTER DAKAYAH LI LETTER BAKAYAH LI LETTER RAKA" + - "YAH LI LETTER YAKAYAH LI LETTER LAKAYAH LI LETTER WAKAYAH LI LETTER THAK" + - "AYAH LI LETTER HAKAYAH LI LETTER VAKAYAH LI LETTER CAKAYAH LI LETTER AKA" + - "YAH LI LETTER OEKAYAH LI LETTER IKAYAH LI LETTER OOKAYAH LI VOWEL UEKAYA" + - "H LI VOWEL EKAYAH LI VOWEL UKAYAH LI VOWEL EEKAYAH LI VOWEL OKAYAH LI TO" + - "NE PLOPHUKAYAH LI TONE CALYAKAYAH LI TONE CALYA PLOPHUKAYAH LI SIGN CWIK" + - "AYAH LI SIGN SHYAREJANG LETTER KAREJANG LETTER GAREJANG LETTER NGAREJANG" + - " LETTER TAREJANG LETTER DAREJANG LETTER NAREJANG LETTER PAREJANG LETTER " + - "BAREJANG LETTER MAREJANG LETTER CAREJANG LETTER JAREJANG LETTER NYAREJAN" + - "G LETTER SAREJANG LETTER RAREJANG LETTER LAREJANG LETTER YAREJANG LETTER" + - " WAREJANG LETTER HAREJANG LETTER MBAREJANG LETTER NGGAREJANG LETTER NDAR" + - "EJANG LETTER NYJAREJANG LETTER AREJANG VOWEL SIGN IREJANG VOWEL SIGN URE" + - "JANG VOWEL SIGN EREJANG VOWEL SIGN AIREJANG VOWEL SIGN OREJANG VOWEL SIG" + - "N AUREJANG VOWEL SIGN EUREJANG VOWEL SIGN EAREJANG CONSONANT SIGN NGREJA" + - "NG CONSONANT SIGN NREJANG CONSONANT SIGN RREJANG CONSONANT SIGN HREJANG " + - "VIRAMAREJANG SECTION MARKHANGUL CHOSEONG TIKEUT-MIEUMHANGUL CHOSEONG TIK" + - "EUT-PIEUPHANGUL CHOSEONG TIKEUT-SIOSHANGUL CHOSEONG TIKEUT-CIEUCHANGUL C" + - "HOSEONG RIEUL-KIYEOKHANGUL CHOSEONG RIEUL-SSANGKIYEOKHANGUL CHOSEONG RIE" + - "UL-TIKEUTHANGUL CHOSEONG RIEUL-SSANGTIKEUTHANGUL CHOSEONG RIEUL-MIEUMHAN" + - "GUL CHOSEONG RIEUL-PIEUPHANGUL CHOSEONG RIEUL-SSANGPIEUPHANGUL CHOSEONG " + - "RIEUL-KAPYEOUNPIEUPHANGUL CHOSEONG RIEUL-SIOSHANGUL CHOSEONG RIEUL-CIEUC" + - "HANGUL CHOSEONG RIEUL-KHIEUKHHANGUL CHOSEONG MIEUM-KIYEOKHANGUL CHOSEONG" + - " MIEUM-TIKEUTHANGUL CHOSEONG MIEUM-SIOSHANGUL CHOSEONG PIEUP-SIOS-THIEUT" + - "HHANGUL CHOSEONG PIEUP-KHIEUKHHANGUL CHOSEONG PIEUP-HIEUHHANGUL CHOSEONG" + - " SSANGSIOS-PIEUPHANGUL CHOSEONG IEUNG-RIEULHANGUL CHOSEONG IEUNG-HIEUHHA" + - "NGUL CHOSEONG SSANGCIEUC-HIEUHHANGUL CHOSEONG SSANGTHIEUTHHANGUL CHOSEON" + - "G PHIEUPH-HIEUHHANGUL CHOSEONG HIEUH-SIOSHANGUL CHOSEONG SSANGYEORINHIEU" + - "HJAVANESE SIGN PANYANGGAJAVANESE SIGN CECAKJAVANESE SIGN LAYARJAVANESE S" + - "IGN WIGNYANJAVANESE LETTER AJAVANESE LETTER I KAWIJAVANESE LETTER IJAVAN" + - "ESE LETTER IIJAVANESE LETTER UJAVANESE LETTER PA CEREKJAVANESE LETTER NG" + - "A LELETJAVANESE LETTER NGA LELET RASWADIJAVANESE LETTER EJAVANESE LETTER" + - " AIJAVANESE LETTER OJAVANESE LETTER KAJAVANESE LETTER KA SASAKJAVANESE L") + ("" + - "ETTER KA MURDAJAVANESE LETTER GAJAVANESE LETTER GA MURDAJAVANESE LETTER " + - "NGAJAVANESE LETTER CAJAVANESE LETTER CA MURDAJAVANESE LETTER JAJAVANESE " + - "LETTER NYA MURDAJAVANESE LETTER JA MAHAPRANAJAVANESE LETTER NYAJAVANESE " + - "LETTER TTAJAVANESE LETTER TTA MAHAPRANAJAVANESE LETTER DDAJAVANESE LETTE" + - "R DDA MAHAPRANAJAVANESE LETTER NA MURDAJAVANESE LETTER TAJAVANESE LETTER" + - " TA MURDAJAVANESE LETTER DAJAVANESE LETTER DA MAHAPRANAJAVANESE LETTER N" + - "AJAVANESE LETTER PAJAVANESE LETTER PA MURDAJAVANESE LETTER BAJAVANESE LE" + - "TTER BA MURDAJAVANESE LETTER MAJAVANESE LETTER YAJAVANESE LETTER RAJAVAN" + - "ESE LETTER RA AGUNGJAVANESE LETTER LAJAVANESE LETTER WAJAVANESE LETTER S" + - "A MURDAJAVANESE LETTER SA MAHAPRANAJAVANESE LETTER SAJAVANESE LETTER HAJ" + - "AVANESE SIGN CECAK TELUJAVANESE VOWEL SIGN TARUNGJAVANESE VOWEL SIGN TOL" + - "ONGJAVANESE VOWEL SIGN WULUJAVANESE VOWEL SIGN WULU MELIKJAVANESE VOWEL " + - "SIGN SUKUJAVANESE VOWEL SIGN SUKU MENDUTJAVANESE VOWEL SIGN TALINGJAVANE" + - "SE VOWEL SIGN DIRGA MUREJAVANESE VOWEL SIGN PEPETJAVANESE CONSONANT SIGN" + - " KERETJAVANESE CONSONANT SIGN PENGKALJAVANESE CONSONANT SIGN CAKRAJAVANE" + - "SE PANGKONJAVANESE LEFT RERENGGANJAVANESE RIGHT RERENGGANJAVANESE PADA A" + - "NDAPJAVANESE PADA MADYAJAVANESE PADA LUHURJAVANESE PADA WINDUJAVANESE PA" + - "DA PANGKATJAVANESE PADA LINGSAJAVANESE PADA LUNGSIJAVANESE PADA ADEGJAVA" + - "NESE PADA ADEG ADEGJAVANESE PADA PISELEHJAVANESE TURNED PADA PISELEHJAVA" + - "NESE PANGRANGKEPJAVANESE DIGIT ZEROJAVANESE DIGIT ONEJAVANESE DIGIT TWOJ" + - "AVANESE DIGIT THREEJAVANESE DIGIT FOURJAVANESE DIGIT FIVEJAVANESE DIGIT " + - "SIXJAVANESE DIGIT SEVENJAVANESE DIGIT EIGHTJAVANESE DIGIT NINEJAVANESE P" + - "ADA TIRTA TUMETESJAVANESE PADA ISEN-ISENMYANMAR LETTER SHAN GHAMYANMAR L" + - "ETTER SHAN CHAMYANMAR LETTER SHAN JHAMYANMAR LETTER SHAN NNAMYANMAR LETT" + - "ER SHAN BHAMYANMAR SIGN SHAN SAWMYANMAR MODIFIER LETTER SHAN REDUPLICATI" + - "ONMYANMAR LETTER TAI LAING NYAMYANMAR LETTER TAI LAING FAMYANMAR LETTER " + - "TAI LAING GAMYANMAR LETTER TAI LAING GHAMYANMAR LETTER TAI LAING JAMYANM" + - "AR LETTER TAI LAING JHAMYANMAR LETTER TAI LAING DDAMYANMAR LETTER TAI LA" + - "ING DDHAMYANMAR LETTER TAI LAING NNAMYANMAR TAI LAING DIGIT ZEROMYANMAR " + - "TAI LAING DIGIT ONEMYANMAR TAI LAING DIGIT TWOMYANMAR TAI LAING DIGIT TH" + - "REEMYANMAR TAI LAING DIGIT FOURMYANMAR TAI LAING DIGIT FIVEMYANMAR TAI L" + - "AING DIGIT SIXMYANMAR TAI LAING DIGIT SEVENMYANMAR TAI LAING DIGIT EIGHT" + - "MYANMAR TAI LAING DIGIT NINEMYANMAR LETTER TAI LAING LLAMYANMAR LETTER T" + - "AI LAING DAMYANMAR LETTER TAI LAING DHAMYANMAR LETTER TAI LAING BAMYANMA" + - "R LETTER TAI LAING BHACHAM LETTER ACHAM LETTER ICHAM LETTER UCHAM LETTER" + - " ECHAM LETTER AICHAM LETTER OCHAM LETTER KACHAM LETTER KHACHAM LETTER GA" + - "CHAM LETTER GHACHAM LETTER NGUECHAM LETTER NGACHAM LETTER CHACHAM LETTER" + - " CHHACHAM LETTER JACHAM LETTER JHACHAM LETTER NHUECHAM LETTER NHACHAM LE" + - "TTER NHJACHAM LETTER TACHAM LETTER THACHAM LETTER DACHAM LETTER DHACHAM " + - "LETTER NUECHAM LETTER NACHAM LETTER DDACHAM LETTER PACHAM LETTER PPACHAM" + - " LETTER PHACHAM LETTER BACHAM LETTER BHACHAM LETTER MUECHAM LETTER MACHA" + - "M LETTER BBACHAM LETTER YACHAM LETTER RACHAM LETTER LACHAM LETTER VACHAM" + - " LETTER SSACHAM LETTER SACHAM LETTER HACHAM VOWEL SIGN AACHAM VOWEL SIGN" + - " ICHAM VOWEL SIGN IICHAM VOWEL SIGN EICHAM VOWEL SIGN UCHAM VOWEL SIGN O" + - "ECHAM VOWEL SIGN OCHAM VOWEL SIGN AICHAM VOWEL SIGN AUCHAM VOWEL SIGN UE" + - "CHAM CONSONANT SIGN YACHAM CONSONANT SIGN RACHAM CONSONANT SIGN LACHAM C" + - "ONSONANT SIGN WACHAM LETTER FINAL KCHAM LETTER FINAL GCHAM LETTER FINAL " + - "NGCHAM CONSONANT SIGN FINAL NGCHAM LETTER FINAL CHCHAM LETTER FINAL TCHA" + - "M LETTER FINAL NCHAM LETTER FINAL PCHAM LETTER FINAL YCHAM LETTER FINAL " + - "RCHAM LETTER FINAL LCHAM LETTER FINAL SSCHAM CONSONANT SIGN FINAL MCHAM " + - "CONSONANT SIGN FINAL HCHAM DIGIT ZEROCHAM DIGIT ONECHAM DIGIT TWOCHAM DI" + - "GIT THREECHAM DIGIT FOURCHAM DIGIT FIVECHAM DIGIT SIXCHAM DIGIT SEVENCHA" + - "M DIGIT EIGHTCHAM DIGIT NINECHAM PUNCTUATION SPIRALCHAM PUNCTUATION DAND" + - "ACHAM PUNCTUATION DOUBLE DANDACHAM PUNCTUATION TRIPLE DANDAMYANMAR LETTE" + - "R KHAMTI GAMYANMAR LETTER KHAMTI CAMYANMAR LETTER KHAMTI CHAMYANMAR LETT" + - "ER KHAMTI JAMYANMAR LETTER KHAMTI JHAMYANMAR LETTER KHAMTI NYAMYANMAR LE" + - "TTER KHAMTI TTAMYANMAR LETTER KHAMTI TTHAMYANMAR LETTER KHAMTI DDAMYANMA" + - "R LETTER KHAMTI DDHAMYANMAR LETTER KHAMTI DHAMYANMAR LETTER KHAMTI NAMYA" + - "NMAR LETTER KHAMTI SAMYANMAR LETTER KHAMTI HAMYANMAR LETTER KHAMTI HHAMY" + - "ANMAR LETTER KHAMTI FAMYANMAR MODIFIER LETTER KHAMTI REDUPLICATIONMYANMA" + - "R LETTER KHAMTI XAMYANMAR LETTER KHAMTI ZAMYANMAR LETTER KHAMTI RAMYANMA" + - "R LOGOGRAM KHAMTI OAYMYANMAR LOGOGRAM KHAMTI QNMYANMAR LOGOGRAM KHAMTI H" + - "MMYANMAR SYMBOL AITON EXCLAMATIONMYANMAR SYMBOL AITON ONEMYANMAR SYMBOL " + - "AITON TWOMYANMAR LETTER AITON RAMYANMAR SIGN PAO KAREN TONEMYANMAR SIGN ") + ("" + - "TAI LAING TONE-2MYANMAR SIGN TAI LAING TONE-5MYANMAR LETTER SHWE PALAUNG" + - " CHAMYANMAR LETTER SHWE PALAUNG SHATAI VIET LETTER LOW KOTAI VIET LETTER" + - " HIGH KOTAI VIET LETTER LOW KHOTAI VIET LETTER HIGH KHOTAI VIET LETTER L" + - "OW KHHOTAI VIET LETTER HIGH KHHOTAI VIET LETTER LOW GOTAI VIET LETTER HI" + - "GH GOTAI VIET LETTER LOW NGOTAI VIET LETTER HIGH NGOTAI VIET LETTER LOW " + - "COTAI VIET LETTER HIGH COTAI VIET LETTER LOW CHOTAI VIET LETTER HIGH CHO" + - "TAI VIET LETTER LOW SOTAI VIET LETTER HIGH SOTAI VIET LETTER LOW NYOTAI " + - "VIET LETTER HIGH NYOTAI VIET LETTER LOW DOTAI VIET LETTER HIGH DOTAI VIE" + - "T LETTER LOW TOTAI VIET LETTER HIGH TOTAI VIET LETTER LOW THOTAI VIET LE" + - "TTER HIGH THOTAI VIET LETTER LOW NOTAI VIET LETTER HIGH NOTAI VIET LETTE" + - "R LOW BOTAI VIET LETTER HIGH BOTAI VIET LETTER LOW POTAI VIET LETTER HIG" + - "H POTAI VIET LETTER LOW PHOTAI VIET LETTER HIGH PHOTAI VIET LETTER LOW F" + - "OTAI VIET LETTER HIGH FOTAI VIET LETTER LOW MOTAI VIET LETTER HIGH MOTAI" + - " VIET LETTER LOW YOTAI VIET LETTER HIGH YOTAI VIET LETTER LOW ROTAI VIET" + - " LETTER HIGH ROTAI VIET LETTER LOW LOTAI VIET LETTER HIGH LOTAI VIET LET" + - "TER LOW VOTAI VIET LETTER HIGH VOTAI VIET LETTER LOW HOTAI VIET LETTER H" + - "IGH HOTAI VIET LETTER LOW OTAI VIET LETTER HIGH OTAI VIET MAI KANGTAI VI" + - "ET VOWEL AATAI VIET VOWEL ITAI VIET VOWEL UETAI VIET VOWEL UTAI VIET VOW" + - "EL ETAI VIET VOWEL OTAI VIET MAI KHITTAI VIET VOWEL IATAI VIET VOWEL UEA" + - "TAI VIET VOWEL UATAI VIET VOWEL AUETAI VIET VOWEL AYTAI VIET VOWEL ANTAI" + - " VIET VOWEL AMTAI VIET TONE MAI EKTAI VIET TONE MAI NUENGTAI VIET TONE M" + - "AI THOTAI VIET TONE MAI SONGTAI VIET SYMBOL KONTAI VIET SYMBOL NUENGTAI " + - "VIET SYMBOL SAMTAI VIET SYMBOL HO HOITAI VIET SYMBOL KOI KOIMEETEI MAYEK" + - " LETTER EMEETEI MAYEK LETTER OMEETEI MAYEK LETTER CHAMEETEI MAYEK LETTER" + - " NYAMEETEI MAYEK LETTER TTAMEETEI MAYEK LETTER TTHAMEETEI MAYEK LETTER D" + - "DAMEETEI MAYEK LETTER DDHAMEETEI MAYEK LETTER NNAMEETEI MAYEK LETTER SHA" + - "MEETEI MAYEK LETTER SSAMEETEI MAYEK VOWEL SIGN IIMEETEI MAYEK VOWEL SIGN" + - " UUMEETEI MAYEK VOWEL SIGN AAIMEETEI MAYEK VOWEL SIGN AUMEETEI MAYEK VOW" + - "EL SIGN AAUMEETEI MAYEK CHEIKHANMEETEI MAYEK AHANG KHUDAMMEETEI MAYEK AN" + - "JIMEETEI MAYEK SYLLABLE REPETITION MARKMEETEI MAYEK WORD REPETITION MARK" + - "MEETEI MAYEK VOWEL SIGN VISARGAMEETEI MAYEK VIRAMAETHIOPIC SYLLABLE TTHU" + - "ETHIOPIC SYLLABLE TTHIETHIOPIC SYLLABLE TTHAAETHIOPIC SYLLABLE TTHEEETHI" + - "OPIC SYLLABLE TTHEETHIOPIC SYLLABLE TTHOETHIOPIC SYLLABLE DDHUETHIOPIC S" + - "YLLABLE DDHIETHIOPIC SYLLABLE DDHAAETHIOPIC SYLLABLE DDHEEETHIOPIC SYLLA" + - "BLE DDHEETHIOPIC SYLLABLE DDHOETHIOPIC SYLLABLE DZUETHIOPIC SYLLABLE DZI" + - "ETHIOPIC SYLLABLE DZAAETHIOPIC SYLLABLE DZEEETHIOPIC SYLLABLE DZEETHIOPI" + - "C SYLLABLE DZOETHIOPIC SYLLABLE CCHHAETHIOPIC SYLLABLE CCHHUETHIOPIC SYL" + - "LABLE CCHHIETHIOPIC SYLLABLE CCHHAAETHIOPIC SYLLABLE CCHHEEETHIOPIC SYLL" + - "ABLE CCHHEETHIOPIC SYLLABLE CCHHOETHIOPIC SYLLABLE BBAETHIOPIC SYLLABLE " + - "BBUETHIOPIC SYLLABLE BBIETHIOPIC SYLLABLE BBAAETHIOPIC SYLLABLE BBEEETHI" + - "OPIC SYLLABLE BBEETHIOPIC SYLLABLE BBOLATIN SMALL LETTER BARRED ALPHALAT" + - "IN SMALL LETTER A REVERSED-SCHWALATIN SMALL LETTER BLACKLETTER ELATIN SM" + - "ALL LETTER BARRED ELATIN SMALL LETTER E WITH FLOURISHLATIN SMALL LETTER " + - "LENIS FLATIN SMALL LETTER SCRIPT G WITH CROSSED-TAILLATIN SMALL LETTER L" + - " WITH INVERTED LAZY SLATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDELATIN " + - "SMALL LETTER L WITH MIDDLE RINGLATIN SMALL LETTER M WITH CROSSED-TAILLAT" + - "IN SMALL LETTER N WITH CROSSED-TAILLATIN SMALL LETTER ENG WITH CROSSED-T" + - "AILLATIN SMALL LETTER BLACKLETTER OLATIN SMALL LETTER BLACKLETTER O WITH" + - " STROKELATIN SMALL LETTER OPEN O WITH STROKELATIN SMALL LETTER INVERTED " + - "OELATIN SMALL LETTER TURNED OE WITH STROKELATIN SMALL LETTER TURNED OE W" + - "ITH HORIZONTAL STROKELATIN SMALL LETTER TURNED O OPEN-OLATIN SMALL LETTE" + - "R TURNED O OPEN-O WITH STROKELATIN SMALL LETTER STIRRUP RLATIN LETTER SM" + - "ALL CAPITAL R WITH RIGHT LEGLATIN SMALL LETTER R WITHOUT HANDLELATIN SMA" + - "LL LETTER DOUBLE RLATIN SMALL LETTER R WITH CROSSED-TAILLATIN SMALL LETT" + - "ER DOUBLE R WITH CROSSED-TAILLATIN SMALL LETTER SCRIPT RLATIN SMALL LETT" + - "ER SCRIPT R WITH RINGLATIN SMALL LETTER BASELINE ESHLATIN SMALL LETTER U" + - " WITH SHORT RIGHT LEGLATIN SMALL LETTER U BAR WITH SHORT RIGHT LEGLATIN " + - "SMALL LETTER UILATIN SMALL LETTER TURNED UILATIN SMALL LETTER U WITH LEF" + - "T HOOKLATIN SMALL LETTER CHILATIN SMALL LETTER CHI WITH LOW RIGHT RINGLA" + - "TIN SMALL LETTER CHI WITH LOW LEFT SERIFLATIN SMALL LETTER X WITH LOW RI" + - "GHT RINGLATIN SMALL LETTER X WITH LONG LEFT LEGLATIN SMALL LETTER X WITH" + - " LONG LEFT LEG AND LOW RIGHT RINGLATIN SMALL LETTER X WITH LONG LEFT LEG" + - " WITH SERIFLATIN SMALL LETTER Y WITH SHORT RIGHT LEGMODIFIER BREVE WITH " + - "INVERTED BREVEMODIFIER LETTER SMALL HENGMODIFIER LETTER SMALL L WITH INV") + ("" + - "ERTED LAZY SMODIFIER LETTER SMALL L WITH MIDDLE TILDEMODIFIER LETTER SMA" + - "LL U WITH LEFT HOOKLATIN SMALL LETTER SAKHA YATLATIN SMALL LETTER IOTIFI" + - "ED ELATIN SMALL LETTER OPEN OELATIN SMALL LETTER UOLATIN SMALL LETTER IN" + - "VERTED ALPHAGREEK LETTER SMALL CAPITAL OMEGACHEROKEE SMALL LETTER ACHERO" + - "KEE SMALL LETTER ECHEROKEE SMALL LETTER ICHEROKEE SMALL LETTER OCHEROKEE" + - " SMALL LETTER UCHEROKEE SMALL LETTER VCHEROKEE SMALL LETTER GACHEROKEE S" + - "MALL LETTER KACHEROKEE SMALL LETTER GECHEROKEE SMALL LETTER GICHEROKEE S" + - "MALL LETTER GOCHEROKEE SMALL LETTER GUCHEROKEE SMALL LETTER GVCHEROKEE S" + - "MALL LETTER HACHEROKEE SMALL LETTER HECHEROKEE SMALL LETTER HICHEROKEE S" + - "MALL LETTER HOCHEROKEE SMALL LETTER HUCHEROKEE SMALL LETTER HVCHEROKEE S" + - "MALL LETTER LACHEROKEE SMALL LETTER LECHEROKEE SMALL LETTER LICHEROKEE S" + - "MALL LETTER LOCHEROKEE SMALL LETTER LUCHEROKEE SMALL LETTER LVCHEROKEE S" + - "MALL LETTER MACHEROKEE SMALL LETTER MECHEROKEE SMALL LETTER MICHEROKEE S" + - "MALL LETTER MOCHEROKEE SMALL LETTER MUCHEROKEE SMALL LETTER NACHEROKEE S" + - "MALL LETTER HNACHEROKEE SMALL LETTER NAHCHEROKEE SMALL LETTER NECHEROKEE" + - " SMALL LETTER NICHEROKEE SMALL LETTER NOCHEROKEE SMALL LETTER NUCHEROKEE" + - " SMALL LETTER NVCHEROKEE SMALL LETTER QUACHEROKEE SMALL LETTER QUECHEROK" + - "EE SMALL LETTER QUICHEROKEE SMALL LETTER QUOCHEROKEE SMALL LETTER QUUCHE" + - "ROKEE SMALL LETTER QUVCHEROKEE SMALL LETTER SACHEROKEE SMALL LETTER SCHE" + - "ROKEE SMALL LETTER SECHEROKEE SMALL LETTER SICHEROKEE SMALL LETTER SOCHE" + - "ROKEE SMALL LETTER SUCHEROKEE SMALL LETTER SVCHEROKEE SMALL LETTER DACHE" + - "ROKEE SMALL LETTER TACHEROKEE SMALL LETTER DECHEROKEE SMALL LETTER TECHE" + - "ROKEE SMALL LETTER DICHEROKEE SMALL LETTER TICHEROKEE SMALL LETTER DOCHE" + - "ROKEE SMALL LETTER DUCHEROKEE SMALL LETTER DVCHEROKEE SMALL LETTER DLACH" + - "EROKEE SMALL LETTER TLACHEROKEE SMALL LETTER TLECHEROKEE SMALL LETTER TL" + - "ICHEROKEE SMALL LETTER TLOCHEROKEE SMALL LETTER TLUCHEROKEE SMALL LETTER" + - " TLVCHEROKEE SMALL LETTER TSACHEROKEE SMALL LETTER TSECHEROKEE SMALL LET" + - "TER TSICHEROKEE SMALL LETTER TSOCHEROKEE SMALL LETTER TSUCHEROKEE SMALL " + - "LETTER TSVCHEROKEE SMALL LETTER WACHEROKEE SMALL LETTER WECHEROKEE SMALL" + - " LETTER WICHEROKEE SMALL LETTER WOCHEROKEE SMALL LETTER WUCHEROKEE SMALL" + - " LETTER WVCHEROKEE SMALL LETTER YAMEETEI MAYEK LETTER KOKMEETEI MAYEK LE" + - "TTER SAMMEETEI MAYEK LETTER LAIMEETEI MAYEK LETTER MITMEETEI MAYEK LETTE" + - "R PAMEETEI MAYEK LETTER NAMEETEI MAYEK LETTER CHILMEETEI MAYEK LETTER TI" + - "LMEETEI MAYEK LETTER KHOUMEETEI MAYEK LETTER NGOUMEETEI MAYEK LETTER THO" + - "UMEETEI MAYEK LETTER WAIMEETEI MAYEK LETTER YANGMEETEI MAYEK LETTER HUKM" + - "EETEI MAYEK LETTER UNMEETEI MAYEK LETTER IMEETEI MAYEK LETTER PHAMMEETEI" + - " MAYEK LETTER ATIYAMEETEI MAYEK LETTER GOKMEETEI MAYEK LETTER JHAMMEETEI" + - " MAYEK LETTER RAIMEETEI MAYEK LETTER BAMEETEI MAYEK LETTER JILMEETEI MAY" + - "EK LETTER DILMEETEI MAYEK LETTER GHOUMEETEI MAYEK LETTER DHOUMEETEI MAYE" + - "K LETTER BHAMMEETEI MAYEK LETTER KOK LONSUMMEETEI MAYEK LETTER LAI LONSU" + - "MMEETEI MAYEK LETTER MIT LONSUMMEETEI MAYEK LETTER PA LONSUMMEETEI MAYEK" + - " LETTER NA LONSUMMEETEI MAYEK LETTER TIL LONSUMMEETEI MAYEK LETTER NGOU " + - "LONSUMMEETEI MAYEK LETTER I LONSUMMEETEI MAYEK VOWEL SIGN ONAPMEETEI MAY" + - "EK VOWEL SIGN INAPMEETEI MAYEK VOWEL SIGN ANAPMEETEI MAYEK VOWEL SIGN YE" + - "NAPMEETEI MAYEK VOWEL SIGN SOUNAPMEETEI MAYEK VOWEL SIGN UNAPMEETEI MAYE" + - "K VOWEL SIGN CHEINAPMEETEI MAYEK VOWEL SIGN NUNGMEETEI MAYEK CHEIKHEIMEE" + - "TEI MAYEK LUM IYEKMEETEI MAYEK APUN IYEKMEETEI MAYEK DIGIT ZEROMEETEI MA" + - "YEK DIGIT ONEMEETEI MAYEK DIGIT TWOMEETEI MAYEK DIGIT THREEMEETEI MAYEK " + - "DIGIT FOURMEETEI MAYEK DIGIT FIVEMEETEI MAYEK DIGIT SIXMEETEI MAYEK DIGI" + - "T SEVENMEETEI MAYEK DIGIT EIGHTMEETEI MAYEK DIGIT NINEHANGUL JUNGSEONG O" + - "-YEOHANGUL JUNGSEONG O-O-IHANGUL JUNGSEONG YO-AHANGUL JUNGSEONG YO-AEHAN" + - "GUL JUNGSEONG YO-EOHANGUL JUNGSEONG U-YEOHANGUL JUNGSEONG U-I-IHANGUL JU" + - "NGSEONG YU-AEHANGUL JUNGSEONG YU-OHANGUL JUNGSEONG EU-AHANGUL JUNGSEONG " + - "EU-EOHANGUL JUNGSEONG EU-EHANGUL JUNGSEONG EU-OHANGUL JUNGSEONG I-YA-OHA" + - "NGUL JUNGSEONG I-YAEHANGUL JUNGSEONG I-YEOHANGUL JUNGSEONG I-YEHANGUL JU" + - "NGSEONG I-O-IHANGUL JUNGSEONG I-YOHANGUL JUNGSEONG I-YUHANGUL JUNGSEONG " + - "I-IHANGUL JUNGSEONG ARAEA-AHANGUL JUNGSEONG ARAEA-EHANGUL JONGSEONG NIEU" + - "N-RIEULHANGUL JONGSEONG NIEUN-CHIEUCHHANGUL JONGSEONG SSANGTIKEUTHANGUL " + - "JONGSEONG SSANGTIKEUT-PIEUPHANGUL JONGSEONG TIKEUT-PIEUPHANGUL JONGSEONG" + - " TIKEUT-SIOSHANGUL JONGSEONG TIKEUT-SIOS-KIYEOKHANGUL JONGSEONG TIKEUT-C" + - "IEUCHANGUL JONGSEONG TIKEUT-CHIEUCHHANGUL JONGSEONG TIKEUT-THIEUTHHANGUL" + - " JONGSEONG RIEUL-SSANGKIYEOKHANGUL JONGSEONG RIEUL-KIYEOK-HIEUHHANGUL JO" + - "NGSEONG SSANGRIEUL-KHIEUKHHANGUL JONGSEONG RIEUL-MIEUM-HIEUHHANGUL JONGS" + - "EONG RIEUL-PIEUP-TIKEUTHANGUL JONGSEONG RIEUL-PIEUP-PHIEUPHHANGUL JONGSE") + ("" + - "ONG RIEUL-YESIEUNGHANGUL JONGSEONG RIEUL-YEORINHIEUH-HIEUHHANGUL JONGSEO" + - "NG KAPYEOUNRIEULHANGUL JONGSEONG MIEUM-NIEUNHANGUL JONGSEONG MIEUM-SSANG" + - "NIEUNHANGUL JONGSEONG SSANGMIEUMHANGUL JONGSEONG MIEUM-PIEUP-SIOSHANGUL " + - "JONGSEONG MIEUM-CIEUCHANGUL JONGSEONG PIEUP-TIKEUTHANGUL JONGSEONG PIEUP" + - "-RIEUL-PHIEUPHHANGUL JONGSEONG PIEUP-MIEUMHANGUL JONGSEONG SSANGPIEUPHAN" + - "GUL JONGSEONG PIEUP-SIOS-TIKEUTHANGUL JONGSEONG PIEUP-CIEUCHANGUL JONGSE" + - "ONG PIEUP-CHIEUCHHANGUL JONGSEONG SIOS-MIEUMHANGUL JONGSEONG SIOS-KAPYEO" + - "UNPIEUPHANGUL JONGSEONG SSANGSIOS-KIYEOKHANGUL JONGSEONG SSANGSIOS-TIKEU" + - "THANGUL JONGSEONG SIOS-PANSIOSHANGUL JONGSEONG SIOS-CIEUCHANGUL JONGSEON" + - "G SIOS-CHIEUCHHANGUL JONGSEONG SIOS-THIEUTHHANGUL JONGSEONG SIOS-HIEUHHA" + - "NGUL JONGSEONG PANSIOS-PIEUPHANGUL JONGSEONG PANSIOS-KAPYEOUNPIEUPHANGUL" + - " JONGSEONG YESIEUNG-MIEUMHANGUL JONGSEONG YESIEUNG-HIEUHHANGUL JONGSEONG" + - " CIEUC-PIEUPHANGUL JONGSEONG CIEUC-SSANGPIEUPHANGUL JONGSEONG SSANGCIEUC" + - "HANGUL JONGSEONG PHIEUPH-SIOSHANGUL JONGSEONG PHIEUPH-THIEUTHCJK COMPATI" + - "BILITY IDEOGRAPH-F900CJK COMPATIBILITY IDEOGRAPH-F901CJK COMPATIBILITY I" + - "DEOGRAPH-F902CJK COMPATIBILITY IDEOGRAPH-F903CJK COMPATIBILITY IDEOGRAPH" + - "-F904CJK COMPATIBILITY IDEOGRAPH-F905CJK COMPATIBILITY IDEOGRAPH-F906CJK" + - " COMPATIBILITY IDEOGRAPH-F907CJK COMPATIBILITY IDEOGRAPH-F908CJK COMPATI" + - "BILITY IDEOGRAPH-F909CJK COMPATIBILITY IDEOGRAPH-F90ACJK COMPATIBILITY I" + - "DEOGRAPH-F90BCJK COMPATIBILITY IDEOGRAPH-F90CCJK COMPATIBILITY IDEOGRAPH" + - "-F90DCJK COMPATIBILITY IDEOGRAPH-F90ECJK COMPATIBILITY IDEOGRAPH-F90FCJK" + - " COMPATIBILITY IDEOGRAPH-F910CJK COMPATIBILITY IDEOGRAPH-F911CJK COMPATI" + - "BILITY IDEOGRAPH-F912CJK COMPATIBILITY IDEOGRAPH-F913CJK COMPATIBILITY I" + - "DEOGRAPH-F914CJK COMPATIBILITY IDEOGRAPH-F915CJK COMPATIBILITY IDEOGRAPH" + - "-F916CJK COMPATIBILITY IDEOGRAPH-F917CJK COMPATIBILITY IDEOGRAPH-F918CJK" + - " COMPATIBILITY IDEOGRAPH-F919CJK COMPATIBILITY IDEOGRAPH-F91ACJK COMPATI" + - "BILITY IDEOGRAPH-F91BCJK COMPATIBILITY IDEOGRAPH-F91CCJK COMPATIBILITY I" + - "DEOGRAPH-F91DCJK COMPATIBILITY IDEOGRAPH-F91ECJK COMPATIBILITY IDEOGRAPH" + - "-F91FCJK COMPATIBILITY IDEOGRAPH-F920CJK COMPATIBILITY IDEOGRAPH-F921CJK" + - " COMPATIBILITY IDEOGRAPH-F922CJK COMPATIBILITY IDEOGRAPH-F923CJK COMPATI" + - "BILITY IDEOGRAPH-F924CJK COMPATIBILITY IDEOGRAPH-F925CJK COMPATIBILITY I" + - "DEOGRAPH-F926CJK COMPATIBILITY IDEOGRAPH-F927CJK COMPATIBILITY IDEOGRAPH" + - "-F928CJK COMPATIBILITY IDEOGRAPH-F929CJK COMPATIBILITY IDEOGRAPH-F92ACJK" + - " COMPATIBILITY IDEOGRAPH-F92BCJK COMPATIBILITY IDEOGRAPH-F92CCJK COMPATI" + - "BILITY IDEOGRAPH-F92DCJK COMPATIBILITY IDEOGRAPH-F92ECJK COMPATIBILITY I" + - "DEOGRAPH-F92FCJK COMPATIBILITY IDEOGRAPH-F930CJK COMPATIBILITY IDEOGRAPH" + - "-F931CJK COMPATIBILITY IDEOGRAPH-F932CJK COMPATIBILITY IDEOGRAPH-F933CJK" + - " COMPATIBILITY IDEOGRAPH-F934CJK COMPATIBILITY IDEOGRAPH-F935CJK COMPATI" + - "BILITY IDEOGRAPH-F936CJK COMPATIBILITY IDEOGRAPH-F937CJK COMPATIBILITY I" + - "DEOGRAPH-F938CJK COMPATIBILITY IDEOGRAPH-F939CJK COMPATIBILITY IDEOGRAPH" + - "-F93ACJK COMPATIBILITY IDEOGRAPH-F93BCJK COMPATIBILITY IDEOGRAPH-F93CCJK" + - " COMPATIBILITY IDEOGRAPH-F93DCJK COMPATIBILITY IDEOGRAPH-F93ECJK COMPATI" + - "BILITY IDEOGRAPH-F93FCJK COMPATIBILITY IDEOGRAPH-F940CJK COMPATIBILITY I" + - "DEOGRAPH-F941CJK COMPATIBILITY IDEOGRAPH-F942CJK COMPATIBILITY IDEOGRAPH" + - "-F943CJK COMPATIBILITY IDEOGRAPH-F944CJK COMPATIBILITY IDEOGRAPH-F945CJK" + - " COMPATIBILITY IDEOGRAPH-F946CJK COMPATIBILITY IDEOGRAPH-F947CJK COMPATI" + - "BILITY IDEOGRAPH-F948CJK COMPATIBILITY IDEOGRAPH-F949CJK COMPATIBILITY I" + - "DEOGRAPH-F94ACJK COMPATIBILITY IDEOGRAPH-F94BCJK COMPATIBILITY IDEOGRAPH" + - "-F94CCJK COMPATIBILITY IDEOGRAPH-F94DCJK COMPATIBILITY IDEOGRAPH-F94ECJK" + - " COMPATIBILITY IDEOGRAPH-F94FCJK COMPATIBILITY IDEOGRAPH-F950CJK COMPATI" + - "BILITY IDEOGRAPH-F951CJK COMPATIBILITY IDEOGRAPH-F952CJK COMPATIBILITY I" + - "DEOGRAPH-F953CJK COMPATIBILITY IDEOGRAPH-F954CJK COMPATIBILITY IDEOGRAPH" + - "-F955CJK COMPATIBILITY IDEOGRAPH-F956CJK COMPATIBILITY IDEOGRAPH-F957CJK" + - " COMPATIBILITY IDEOGRAPH-F958CJK COMPATIBILITY IDEOGRAPH-F959CJK COMPATI" + - "BILITY IDEOGRAPH-F95ACJK COMPATIBILITY IDEOGRAPH-F95BCJK COMPATIBILITY I" + - "DEOGRAPH-F95CCJK COMPATIBILITY IDEOGRAPH-F95DCJK COMPATIBILITY IDEOGRAPH" + - "-F95ECJK COMPATIBILITY IDEOGRAPH-F95FCJK COMPATIBILITY IDEOGRAPH-F960CJK" + - " COMPATIBILITY IDEOGRAPH-F961CJK COMPATIBILITY IDEOGRAPH-F962CJK COMPATI" + - "BILITY IDEOGRAPH-F963CJK COMPATIBILITY IDEOGRAPH-F964CJK COMPATIBILITY I" + - "DEOGRAPH-F965CJK COMPATIBILITY IDEOGRAPH-F966CJK COMPATIBILITY IDEOGRAPH" + - "-F967CJK COMPATIBILITY IDEOGRAPH-F968CJK COMPATIBILITY IDEOGRAPH-F969CJK" + - " COMPATIBILITY IDEOGRAPH-F96ACJK COMPATIBILITY IDEOGRAPH-F96BCJK COMPATI" + - "BILITY IDEOGRAPH-F96CCJK COMPATIBILITY IDEOGRAPH-F96DCJK COMPATIBILITY I" + - "DEOGRAPH-F96ECJK COMPATIBILITY IDEOGRAPH-F96FCJK COMPATIBILITY IDEOGRAPH") + ("" + - "-F970CJK COMPATIBILITY IDEOGRAPH-F971CJK COMPATIBILITY IDEOGRAPH-F972CJK" + - " COMPATIBILITY IDEOGRAPH-F973CJK COMPATIBILITY IDEOGRAPH-F974CJK COMPATI" + - "BILITY IDEOGRAPH-F975CJK COMPATIBILITY IDEOGRAPH-F976CJK COMPATIBILITY I" + - "DEOGRAPH-F977CJK COMPATIBILITY IDEOGRAPH-F978CJK COMPATIBILITY IDEOGRAPH" + - "-F979CJK COMPATIBILITY IDEOGRAPH-F97ACJK COMPATIBILITY IDEOGRAPH-F97BCJK" + - " COMPATIBILITY IDEOGRAPH-F97CCJK COMPATIBILITY IDEOGRAPH-F97DCJK COMPATI" + - "BILITY IDEOGRAPH-F97ECJK COMPATIBILITY IDEOGRAPH-F97FCJK COMPATIBILITY I" + - "DEOGRAPH-F980CJK COMPATIBILITY IDEOGRAPH-F981CJK COMPATIBILITY IDEOGRAPH" + - "-F982CJK COMPATIBILITY IDEOGRAPH-F983CJK COMPATIBILITY IDEOGRAPH-F984CJK" + - " COMPATIBILITY IDEOGRAPH-F985CJK COMPATIBILITY IDEOGRAPH-F986CJK COMPATI" + - "BILITY IDEOGRAPH-F987CJK COMPATIBILITY IDEOGRAPH-F988CJK COMPATIBILITY I" + - "DEOGRAPH-F989CJK COMPATIBILITY IDEOGRAPH-F98ACJK COMPATIBILITY IDEOGRAPH" + - "-F98BCJK COMPATIBILITY IDEOGRAPH-F98CCJK COMPATIBILITY IDEOGRAPH-F98DCJK" + - " COMPATIBILITY IDEOGRAPH-F98ECJK COMPATIBILITY IDEOGRAPH-F98FCJK COMPATI" + - "BILITY IDEOGRAPH-F990CJK COMPATIBILITY IDEOGRAPH-F991CJK COMPATIBILITY I" + - "DEOGRAPH-F992CJK COMPATIBILITY IDEOGRAPH-F993CJK COMPATIBILITY IDEOGRAPH" + - "-F994CJK COMPATIBILITY IDEOGRAPH-F995CJK COMPATIBILITY IDEOGRAPH-F996CJK" + - " COMPATIBILITY IDEOGRAPH-F997CJK COMPATIBILITY IDEOGRAPH-F998CJK COMPATI" + - "BILITY IDEOGRAPH-F999CJK COMPATIBILITY IDEOGRAPH-F99ACJK COMPATIBILITY I" + - "DEOGRAPH-F99BCJK COMPATIBILITY IDEOGRAPH-F99CCJK COMPATIBILITY IDEOGRAPH" + - "-F99DCJK COMPATIBILITY IDEOGRAPH-F99ECJK COMPATIBILITY IDEOGRAPH-F99FCJK" + - " COMPATIBILITY IDEOGRAPH-F9A0CJK COMPATIBILITY IDEOGRAPH-F9A1CJK COMPATI" + - "BILITY IDEOGRAPH-F9A2CJK COMPATIBILITY IDEOGRAPH-F9A3CJK COMPATIBILITY I" + - "DEOGRAPH-F9A4CJK COMPATIBILITY IDEOGRAPH-F9A5CJK COMPATIBILITY IDEOGRAPH" + - "-F9A6CJK COMPATIBILITY IDEOGRAPH-F9A7CJK COMPATIBILITY IDEOGRAPH-F9A8CJK" + - " COMPATIBILITY IDEOGRAPH-F9A9CJK COMPATIBILITY IDEOGRAPH-F9AACJK COMPATI" + - "BILITY IDEOGRAPH-F9ABCJK COMPATIBILITY IDEOGRAPH-F9ACCJK COMPATIBILITY I" + - "DEOGRAPH-F9ADCJK COMPATIBILITY IDEOGRAPH-F9AECJK COMPATIBILITY IDEOGRAPH" + - "-F9AFCJK COMPATIBILITY IDEOGRAPH-F9B0CJK COMPATIBILITY IDEOGRAPH-F9B1CJK" + - " COMPATIBILITY IDEOGRAPH-F9B2CJK COMPATIBILITY IDEOGRAPH-F9B3CJK COMPATI" + - "BILITY IDEOGRAPH-F9B4CJK COMPATIBILITY IDEOGRAPH-F9B5CJK COMPATIBILITY I" + - "DEOGRAPH-F9B6CJK COMPATIBILITY IDEOGRAPH-F9B7CJK COMPATIBILITY IDEOGRAPH" + - "-F9B8CJK COMPATIBILITY IDEOGRAPH-F9B9CJK COMPATIBILITY IDEOGRAPH-F9BACJK" + - " COMPATIBILITY IDEOGRAPH-F9BBCJK COMPATIBILITY IDEOGRAPH-F9BCCJK COMPATI" + - "BILITY IDEOGRAPH-F9BDCJK COMPATIBILITY IDEOGRAPH-F9BECJK COMPATIBILITY I" + - "DEOGRAPH-F9BFCJK COMPATIBILITY IDEOGRAPH-F9C0CJK COMPATIBILITY IDEOGRAPH" + - "-F9C1CJK COMPATIBILITY IDEOGRAPH-F9C2CJK COMPATIBILITY IDEOGRAPH-F9C3CJK" + - " COMPATIBILITY IDEOGRAPH-F9C4CJK COMPATIBILITY IDEOGRAPH-F9C5CJK COMPATI" + - "BILITY IDEOGRAPH-F9C6CJK COMPATIBILITY IDEOGRAPH-F9C7CJK COMPATIBILITY I" + - "DEOGRAPH-F9C8CJK COMPATIBILITY IDEOGRAPH-F9C9CJK COMPATIBILITY IDEOGRAPH" + - "-F9CACJK COMPATIBILITY IDEOGRAPH-F9CBCJK COMPATIBILITY IDEOGRAPH-F9CCCJK" + - " COMPATIBILITY IDEOGRAPH-F9CDCJK COMPATIBILITY IDEOGRAPH-F9CECJK COMPATI" + - "BILITY IDEOGRAPH-F9CFCJK COMPATIBILITY IDEOGRAPH-F9D0CJK COMPATIBILITY I" + - "DEOGRAPH-F9D1CJK COMPATIBILITY IDEOGRAPH-F9D2CJK COMPATIBILITY IDEOGRAPH" + - "-F9D3CJK COMPATIBILITY IDEOGRAPH-F9D4CJK COMPATIBILITY IDEOGRAPH-F9D5CJK" + - " COMPATIBILITY IDEOGRAPH-F9D6CJK COMPATIBILITY IDEOGRAPH-F9D7CJK COMPATI" + - "BILITY IDEOGRAPH-F9D8CJK COMPATIBILITY IDEOGRAPH-F9D9CJK COMPATIBILITY I" + - "DEOGRAPH-F9DACJK COMPATIBILITY IDEOGRAPH-F9DBCJK COMPATIBILITY IDEOGRAPH" + - "-F9DCCJK COMPATIBILITY IDEOGRAPH-F9DDCJK COMPATIBILITY IDEOGRAPH-F9DECJK" + - " COMPATIBILITY IDEOGRAPH-F9DFCJK COMPATIBILITY IDEOGRAPH-F9E0CJK COMPATI" + - "BILITY IDEOGRAPH-F9E1CJK COMPATIBILITY IDEOGRAPH-F9E2CJK COMPATIBILITY I" + - "DEOGRAPH-F9E3CJK COMPATIBILITY IDEOGRAPH-F9E4CJK COMPATIBILITY IDEOGRAPH" + - "-F9E5CJK COMPATIBILITY IDEOGRAPH-F9E6CJK COMPATIBILITY IDEOGRAPH-F9E7CJK" + - " COMPATIBILITY IDEOGRAPH-F9E8CJK COMPATIBILITY IDEOGRAPH-F9E9CJK COMPATI" + - "BILITY IDEOGRAPH-F9EACJK COMPATIBILITY IDEOGRAPH-F9EBCJK COMPATIBILITY I" + - "DEOGRAPH-F9ECCJK COMPATIBILITY IDEOGRAPH-F9EDCJK COMPATIBILITY IDEOGRAPH" + - "-F9EECJK COMPATIBILITY IDEOGRAPH-F9EFCJK COMPATIBILITY IDEOGRAPH-F9F0CJK" + - " COMPATIBILITY IDEOGRAPH-F9F1CJK COMPATIBILITY IDEOGRAPH-F9F2CJK COMPATI" + - "BILITY IDEOGRAPH-F9F3CJK COMPATIBILITY IDEOGRAPH-F9F4CJK COMPATIBILITY I" + - "DEOGRAPH-F9F5CJK COMPATIBILITY IDEOGRAPH-F9F6CJK COMPATIBILITY IDEOGRAPH" + - "-F9F7CJK COMPATIBILITY IDEOGRAPH-F9F8CJK COMPATIBILITY IDEOGRAPH-F9F9CJK" + - " COMPATIBILITY IDEOGRAPH-F9FACJK COMPATIBILITY IDEOGRAPH-F9FBCJK COMPATI" + - "BILITY IDEOGRAPH-F9FCCJK COMPATIBILITY IDEOGRAPH-F9FDCJK COMPATIBILITY I" + - "DEOGRAPH-F9FECJK COMPATIBILITY IDEOGRAPH-F9FFCJK COMPATIBILITY IDEOGRAPH") + ("" + - "-FA00CJK COMPATIBILITY IDEOGRAPH-FA01CJK COMPATIBILITY IDEOGRAPH-FA02CJK" + - " COMPATIBILITY IDEOGRAPH-FA03CJK COMPATIBILITY IDEOGRAPH-FA04CJK COMPATI" + - "BILITY IDEOGRAPH-FA05CJK COMPATIBILITY IDEOGRAPH-FA06CJK COMPATIBILITY I" + - "DEOGRAPH-FA07CJK COMPATIBILITY IDEOGRAPH-FA08CJK COMPATIBILITY IDEOGRAPH" + - "-FA09CJK COMPATIBILITY IDEOGRAPH-FA0ACJK COMPATIBILITY IDEOGRAPH-FA0BCJK" + - " COMPATIBILITY IDEOGRAPH-FA0CCJK COMPATIBILITY IDEOGRAPH-FA0DCJK COMPATI" + - "BILITY IDEOGRAPH-FA0ECJK COMPATIBILITY IDEOGRAPH-FA0FCJK COMPATIBILITY I" + - "DEOGRAPH-FA10CJK COMPATIBILITY IDEOGRAPH-FA11CJK COMPATIBILITY IDEOGRAPH" + - "-FA12CJK COMPATIBILITY IDEOGRAPH-FA13CJK COMPATIBILITY IDEOGRAPH-FA14CJK" + - " COMPATIBILITY IDEOGRAPH-FA15CJK COMPATIBILITY IDEOGRAPH-FA16CJK COMPATI" + - "BILITY IDEOGRAPH-FA17CJK COMPATIBILITY IDEOGRAPH-FA18CJK COMPATIBILITY I" + - "DEOGRAPH-FA19CJK COMPATIBILITY IDEOGRAPH-FA1ACJK COMPATIBILITY IDEOGRAPH" + - "-FA1BCJK COMPATIBILITY IDEOGRAPH-FA1CCJK COMPATIBILITY IDEOGRAPH-FA1DCJK" + - " COMPATIBILITY IDEOGRAPH-FA1ECJK COMPATIBILITY IDEOGRAPH-FA1FCJK COMPATI" + - "BILITY IDEOGRAPH-FA20CJK COMPATIBILITY IDEOGRAPH-FA21CJK COMPATIBILITY I" + - "DEOGRAPH-FA22CJK COMPATIBILITY IDEOGRAPH-FA23CJK COMPATIBILITY IDEOGRAPH" + - "-FA24CJK COMPATIBILITY IDEOGRAPH-FA25CJK COMPATIBILITY IDEOGRAPH-FA26CJK" + - " COMPATIBILITY IDEOGRAPH-FA27CJK COMPATIBILITY IDEOGRAPH-FA28CJK COMPATI" + - "BILITY IDEOGRAPH-FA29CJK COMPATIBILITY IDEOGRAPH-FA2ACJK COMPATIBILITY I" + - "DEOGRAPH-FA2BCJK COMPATIBILITY IDEOGRAPH-FA2CCJK COMPATIBILITY IDEOGRAPH" + - "-FA2DCJK COMPATIBILITY IDEOGRAPH-FA2ECJK COMPATIBILITY IDEOGRAPH-FA2FCJK" + - " COMPATIBILITY IDEOGRAPH-FA30CJK COMPATIBILITY IDEOGRAPH-FA31CJK COMPATI" + - "BILITY IDEOGRAPH-FA32CJK COMPATIBILITY IDEOGRAPH-FA33CJK COMPATIBILITY I" + - "DEOGRAPH-FA34CJK COMPATIBILITY IDEOGRAPH-FA35CJK COMPATIBILITY IDEOGRAPH" + - "-FA36CJK COMPATIBILITY IDEOGRAPH-FA37CJK COMPATIBILITY IDEOGRAPH-FA38CJK" + - " COMPATIBILITY IDEOGRAPH-FA39CJK COMPATIBILITY IDEOGRAPH-FA3ACJK COMPATI" + - "BILITY IDEOGRAPH-FA3BCJK COMPATIBILITY IDEOGRAPH-FA3CCJK COMPATIBILITY I" + - "DEOGRAPH-FA3DCJK COMPATIBILITY IDEOGRAPH-FA3ECJK COMPATIBILITY IDEOGRAPH" + - "-FA3FCJK COMPATIBILITY IDEOGRAPH-FA40CJK COMPATIBILITY IDEOGRAPH-FA41CJK" + - " COMPATIBILITY IDEOGRAPH-FA42CJK COMPATIBILITY IDEOGRAPH-FA43CJK COMPATI" + - "BILITY IDEOGRAPH-FA44CJK COMPATIBILITY IDEOGRAPH-FA45CJK COMPATIBILITY I" + - "DEOGRAPH-FA46CJK COMPATIBILITY IDEOGRAPH-FA47CJK COMPATIBILITY IDEOGRAPH" + - "-FA48CJK COMPATIBILITY IDEOGRAPH-FA49CJK COMPATIBILITY IDEOGRAPH-FA4ACJK" + - " COMPATIBILITY IDEOGRAPH-FA4BCJK COMPATIBILITY IDEOGRAPH-FA4CCJK COMPATI" + - "BILITY IDEOGRAPH-FA4DCJK COMPATIBILITY IDEOGRAPH-FA4ECJK COMPATIBILITY I" + - "DEOGRAPH-FA4FCJK COMPATIBILITY IDEOGRAPH-FA50CJK COMPATIBILITY IDEOGRAPH" + - "-FA51CJK COMPATIBILITY IDEOGRAPH-FA52CJK COMPATIBILITY IDEOGRAPH-FA53CJK" + - " COMPATIBILITY IDEOGRAPH-FA54CJK COMPATIBILITY IDEOGRAPH-FA55CJK COMPATI" + - "BILITY IDEOGRAPH-FA56CJK COMPATIBILITY IDEOGRAPH-FA57CJK COMPATIBILITY I" + - "DEOGRAPH-FA58CJK COMPATIBILITY IDEOGRAPH-FA59CJK COMPATIBILITY IDEOGRAPH" + - "-FA5ACJK COMPATIBILITY IDEOGRAPH-FA5BCJK COMPATIBILITY IDEOGRAPH-FA5CCJK" + - " COMPATIBILITY IDEOGRAPH-FA5DCJK COMPATIBILITY IDEOGRAPH-FA5ECJK COMPATI" + - "BILITY IDEOGRAPH-FA5FCJK COMPATIBILITY IDEOGRAPH-FA60CJK COMPATIBILITY I" + - "DEOGRAPH-FA61CJK COMPATIBILITY IDEOGRAPH-FA62CJK COMPATIBILITY IDEOGRAPH" + - "-FA63CJK COMPATIBILITY IDEOGRAPH-FA64CJK COMPATIBILITY IDEOGRAPH-FA65CJK" + - " COMPATIBILITY IDEOGRAPH-FA66CJK COMPATIBILITY IDEOGRAPH-FA67CJK COMPATI" + - "BILITY IDEOGRAPH-FA68CJK COMPATIBILITY IDEOGRAPH-FA69CJK COMPATIBILITY I" + - "DEOGRAPH-FA6ACJK COMPATIBILITY IDEOGRAPH-FA6BCJK COMPATIBILITY IDEOGRAPH" + - "-FA6CCJK COMPATIBILITY IDEOGRAPH-FA6DCJK COMPATIBILITY IDEOGRAPH-FA70CJK" + - " COMPATIBILITY IDEOGRAPH-FA71CJK COMPATIBILITY IDEOGRAPH-FA72CJK COMPATI" + - "BILITY IDEOGRAPH-FA73CJK COMPATIBILITY IDEOGRAPH-FA74CJK COMPATIBILITY I" + - "DEOGRAPH-FA75CJK COMPATIBILITY IDEOGRAPH-FA76CJK COMPATIBILITY IDEOGRAPH" + - "-FA77CJK COMPATIBILITY IDEOGRAPH-FA78CJK COMPATIBILITY IDEOGRAPH-FA79CJK" + - " COMPATIBILITY IDEOGRAPH-FA7ACJK COMPATIBILITY IDEOGRAPH-FA7BCJK COMPATI" + - "BILITY IDEOGRAPH-FA7CCJK COMPATIBILITY IDEOGRAPH-FA7DCJK COMPATIBILITY I" + - "DEOGRAPH-FA7ECJK COMPATIBILITY IDEOGRAPH-FA7FCJK COMPATIBILITY IDEOGRAPH" + - "-FA80CJK COMPATIBILITY IDEOGRAPH-FA81CJK COMPATIBILITY IDEOGRAPH-FA82CJK" + - " COMPATIBILITY IDEOGRAPH-FA83CJK COMPATIBILITY IDEOGRAPH-FA84CJK COMPATI" + - "BILITY IDEOGRAPH-FA85CJK COMPATIBILITY IDEOGRAPH-FA86CJK COMPATIBILITY I" + - "DEOGRAPH-FA87CJK COMPATIBILITY IDEOGRAPH-FA88CJK COMPATIBILITY IDEOGRAPH" + - "-FA89CJK COMPATIBILITY IDEOGRAPH-FA8ACJK COMPATIBILITY IDEOGRAPH-FA8BCJK" + - " COMPATIBILITY IDEOGRAPH-FA8CCJK COMPATIBILITY IDEOGRAPH-FA8DCJK COMPATI" + - "BILITY IDEOGRAPH-FA8ECJK COMPATIBILITY IDEOGRAPH-FA8FCJK COMPATIBILITY I" + - "DEOGRAPH-FA90CJK COMPATIBILITY IDEOGRAPH-FA91CJK COMPATIBILITY IDEOGRAPH") + ("" + - "-FA92CJK COMPATIBILITY IDEOGRAPH-FA93CJK COMPATIBILITY IDEOGRAPH-FA94CJK" + - " COMPATIBILITY IDEOGRAPH-FA95CJK COMPATIBILITY IDEOGRAPH-FA96CJK COMPATI" + - "BILITY IDEOGRAPH-FA97CJK COMPATIBILITY IDEOGRAPH-FA98CJK COMPATIBILITY I" + - "DEOGRAPH-FA99CJK COMPATIBILITY IDEOGRAPH-FA9ACJK COMPATIBILITY IDEOGRAPH" + - "-FA9BCJK COMPATIBILITY IDEOGRAPH-FA9CCJK COMPATIBILITY IDEOGRAPH-FA9DCJK" + - " COMPATIBILITY IDEOGRAPH-FA9ECJK COMPATIBILITY IDEOGRAPH-FA9FCJK COMPATI" + - "BILITY IDEOGRAPH-FAA0CJK COMPATIBILITY IDEOGRAPH-FAA1CJK COMPATIBILITY I" + - "DEOGRAPH-FAA2CJK COMPATIBILITY IDEOGRAPH-FAA3CJK COMPATIBILITY IDEOGRAPH" + - "-FAA4CJK COMPATIBILITY IDEOGRAPH-FAA5CJK COMPATIBILITY IDEOGRAPH-FAA6CJK" + - " COMPATIBILITY IDEOGRAPH-FAA7CJK COMPATIBILITY IDEOGRAPH-FAA8CJK COMPATI" + - "BILITY IDEOGRAPH-FAA9CJK COMPATIBILITY IDEOGRAPH-FAAACJK COMPATIBILITY I" + - "DEOGRAPH-FAABCJK COMPATIBILITY IDEOGRAPH-FAACCJK COMPATIBILITY IDEOGRAPH" + - "-FAADCJK COMPATIBILITY IDEOGRAPH-FAAECJK COMPATIBILITY IDEOGRAPH-FAAFCJK" + - " COMPATIBILITY IDEOGRAPH-FAB0CJK COMPATIBILITY IDEOGRAPH-FAB1CJK COMPATI" + - "BILITY IDEOGRAPH-FAB2CJK COMPATIBILITY IDEOGRAPH-FAB3CJK COMPATIBILITY I" + - "DEOGRAPH-FAB4CJK COMPATIBILITY IDEOGRAPH-FAB5CJK COMPATIBILITY IDEOGRAPH" + - "-FAB6CJK COMPATIBILITY IDEOGRAPH-FAB7CJK COMPATIBILITY IDEOGRAPH-FAB8CJK" + - " COMPATIBILITY IDEOGRAPH-FAB9CJK COMPATIBILITY IDEOGRAPH-FABACJK COMPATI" + - "BILITY IDEOGRAPH-FABBCJK COMPATIBILITY IDEOGRAPH-FABCCJK COMPATIBILITY I" + - "DEOGRAPH-FABDCJK COMPATIBILITY IDEOGRAPH-FABECJK COMPATIBILITY IDEOGRAPH" + - "-FABFCJK COMPATIBILITY IDEOGRAPH-FAC0CJK COMPATIBILITY IDEOGRAPH-FAC1CJK" + - " COMPATIBILITY IDEOGRAPH-FAC2CJK COMPATIBILITY IDEOGRAPH-FAC3CJK COMPATI" + - "BILITY IDEOGRAPH-FAC4CJK COMPATIBILITY IDEOGRAPH-FAC5CJK COMPATIBILITY I" + - "DEOGRAPH-FAC6CJK COMPATIBILITY IDEOGRAPH-FAC7CJK COMPATIBILITY IDEOGRAPH" + - "-FAC8CJK COMPATIBILITY IDEOGRAPH-FAC9CJK COMPATIBILITY IDEOGRAPH-FACACJK" + - " COMPATIBILITY IDEOGRAPH-FACBCJK COMPATIBILITY IDEOGRAPH-FACCCJK COMPATI" + - "BILITY IDEOGRAPH-FACDCJK COMPATIBILITY IDEOGRAPH-FACECJK COMPATIBILITY I" + - "DEOGRAPH-FACFCJK COMPATIBILITY IDEOGRAPH-FAD0CJK COMPATIBILITY IDEOGRAPH" + - "-FAD1CJK COMPATIBILITY IDEOGRAPH-FAD2CJK COMPATIBILITY IDEOGRAPH-FAD3CJK" + - " COMPATIBILITY IDEOGRAPH-FAD4CJK COMPATIBILITY IDEOGRAPH-FAD5CJK COMPATI" + - "BILITY IDEOGRAPH-FAD6CJK COMPATIBILITY IDEOGRAPH-FAD7CJK COMPATIBILITY I" + - "DEOGRAPH-FAD8CJK COMPATIBILITY IDEOGRAPH-FAD9LATIN SMALL LIGATURE FFLATI" + - "N SMALL LIGATURE FILATIN SMALL LIGATURE FLLATIN SMALL LIGATURE FFILATIN " + - "SMALL LIGATURE FFLLATIN SMALL LIGATURE LONG S TLATIN SMALL LIGATURE STAR" + - "MENIAN SMALL LIGATURE MEN NOWARMENIAN SMALL LIGATURE MEN ECHARMENIAN SMA" + - "LL LIGATURE MEN INIARMENIAN SMALL LIGATURE VEW NOWARMENIAN SMALL LIGATUR" + - "E MEN XEHHEBREW LETTER YOD WITH HIRIQHEBREW POINT JUDEO-SPANISH VARIKAHE" + - "BREW LIGATURE YIDDISH YOD YOD PATAHHEBREW LETTER ALTERNATIVE AYINHEBREW " + - "LETTER WIDE ALEFHEBREW LETTER WIDE DALETHEBREW LETTER WIDE HEHEBREW LETT" + - "ER WIDE KAFHEBREW LETTER WIDE LAMEDHEBREW LETTER WIDE FINAL MEMHEBREW LE" + - "TTER WIDE RESHHEBREW LETTER WIDE TAVHEBREW LETTER ALTERNATIVE PLUS SIGNH" + - "EBREW LETTER SHIN WITH SHIN DOTHEBREW LETTER SHIN WITH SIN DOTHEBREW LET" + - "TER SHIN WITH DAGESH AND SHIN DOTHEBREW LETTER SHIN WITH DAGESH AND SIN " + - "DOTHEBREW LETTER ALEF WITH PATAHHEBREW LETTER ALEF WITH QAMATSHEBREW LET" + - "TER ALEF WITH MAPIQHEBREW LETTER BET WITH DAGESHHEBREW LETTER GIMEL WITH" + - " DAGESHHEBREW LETTER DALET WITH DAGESHHEBREW LETTER HE WITH MAPIQHEBREW " + - "LETTER VAV WITH DAGESHHEBREW LETTER ZAYIN WITH DAGESHHEBREW LETTER TET W" + - "ITH DAGESHHEBREW LETTER YOD WITH DAGESHHEBREW LETTER FINAL KAF WITH DAGE" + - "SHHEBREW LETTER KAF WITH DAGESHHEBREW LETTER LAMED WITH DAGESHHEBREW LET" + - "TER MEM WITH DAGESHHEBREW LETTER NUN WITH DAGESHHEBREW LETTER SAMEKH WIT" + - "H DAGESHHEBREW LETTER FINAL PE WITH DAGESHHEBREW LETTER PE WITH DAGESHHE" + - "BREW LETTER TSADI WITH DAGESHHEBREW LETTER QOF WITH DAGESHHEBREW LETTER " + - "RESH WITH DAGESHHEBREW LETTER SHIN WITH DAGESHHEBREW LETTER TAV WITH DAG" + - "ESHHEBREW LETTER VAV WITH HOLAMHEBREW LETTER BET WITH RAFEHEBREW LETTER " + - "KAF WITH RAFEHEBREW LETTER PE WITH RAFEHEBREW LIGATURE ALEF LAMEDARABIC " + - "LETTER ALEF WASLA ISOLATED FORMARABIC LETTER ALEF WASLA FINAL FORMARABIC" + - " LETTER BEEH ISOLATED FORMARABIC LETTER BEEH FINAL FORMARABIC LETTER BEE" + - "H INITIAL FORMARABIC LETTER BEEH MEDIAL FORMARABIC LETTER PEH ISOLATED F" + - "ORMARABIC LETTER PEH FINAL FORMARABIC LETTER PEH INITIAL FORMARABIC LETT" + - "ER PEH MEDIAL FORMARABIC LETTER BEHEH ISOLATED FORMARABIC LETTER BEHEH F" + - "INAL FORMARABIC LETTER BEHEH INITIAL FORMARABIC LETTER BEHEH MEDIAL FORM" + - "ARABIC LETTER TTEHEH ISOLATED FORMARABIC LETTER TTEHEH FINAL FORMARABIC " + - "LETTER TTEHEH INITIAL FORMARABIC LETTER TTEHEH MEDIAL FORMARABIC LETTER " + - "TEHEH ISOLATED FORMARABIC LETTER TEHEH FINAL FORMARABIC LETTER TEHEH INI") + ("" + - "TIAL FORMARABIC LETTER TEHEH MEDIAL FORMARABIC LETTER TTEH ISOLATED FORM" + - "ARABIC LETTER TTEH FINAL FORMARABIC LETTER TTEH INITIAL FORMARABIC LETTE" + - "R TTEH MEDIAL FORMARABIC LETTER VEH ISOLATED FORMARABIC LETTER VEH FINAL" + - " FORMARABIC LETTER VEH INITIAL FORMARABIC LETTER VEH MEDIAL FORMARABIC L" + - "ETTER PEHEH ISOLATED FORMARABIC LETTER PEHEH FINAL FORMARABIC LETTER PEH" + - "EH INITIAL FORMARABIC LETTER PEHEH MEDIAL FORMARABIC LETTER DYEH ISOLATE" + - "D FORMARABIC LETTER DYEH FINAL FORMARABIC LETTER DYEH INITIAL FORMARABIC" + - " LETTER DYEH MEDIAL FORMARABIC LETTER NYEH ISOLATED FORMARABIC LETTER NY" + - "EH FINAL FORMARABIC LETTER NYEH INITIAL FORMARABIC LETTER NYEH MEDIAL FO" + - "RMARABIC LETTER TCHEH ISOLATED FORMARABIC LETTER TCHEH FINAL FORMARABIC " + - "LETTER TCHEH INITIAL FORMARABIC LETTER TCHEH MEDIAL FORMARABIC LETTER TC" + - "HEHEH ISOLATED FORMARABIC LETTER TCHEHEH FINAL FORMARABIC LETTER TCHEHEH" + - " INITIAL FORMARABIC LETTER TCHEHEH MEDIAL FORMARABIC LETTER DDAHAL ISOLA" + - "TED FORMARABIC LETTER DDAHAL FINAL FORMARABIC LETTER DAHAL ISOLATED FORM" + - "ARABIC LETTER DAHAL FINAL FORMARABIC LETTER DUL ISOLATED FORMARABIC LETT" + - "ER DUL FINAL FORMARABIC LETTER DDAL ISOLATED FORMARABIC LETTER DDAL FINA" + - "L FORMARABIC LETTER JEH ISOLATED FORMARABIC LETTER JEH FINAL FORMARABIC " + - "LETTER RREH ISOLATED FORMARABIC LETTER RREH FINAL FORMARABIC LETTER KEHE" + - "H ISOLATED FORMARABIC LETTER KEHEH FINAL FORMARABIC LETTER KEHEH INITIAL" + - " FORMARABIC LETTER KEHEH MEDIAL FORMARABIC LETTER GAF ISOLATED FORMARABI" + - "C LETTER GAF FINAL FORMARABIC LETTER GAF INITIAL FORMARABIC LETTER GAF M" + - "EDIAL FORMARABIC LETTER GUEH ISOLATED FORMARABIC LETTER GUEH FINAL FORMA" + - "RABIC LETTER GUEH INITIAL FORMARABIC LETTER GUEH MEDIAL FORMARABIC LETTE" + - "R NGOEH ISOLATED FORMARABIC LETTER NGOEH FINAL FORMARABIC LETTER NGOEH I" + - "NITIAL FORMARABIC LETTER NGOEH MEDIAL FORMARABIC LETTER NOON GHUNNA ISOL" + - "ATED FORMARABIC LETTER NOON GHUNNA FINAL FORMARABIC LETTER RNOON ISOLATE" + - "D FORMARABIC LETTER RNOON FINAL FORMARABIC LETTER RNOON INITIAL FORMARAB" + - "IC LETTER RNOON MEDIAL FORMARABIC LETTER HEH WITH YEH ABOVE ISOLATED FOR" + - "MARABIC LETTER HEH WITH YEH ABOVE FINAL FORMARABIC LETTER HEH GOAL ISOLA" + - "TED FORMARABIC LETTER HEH GOAL FINAL FORMARABIC LETTER HEH GOAL INITIAL " + - "FORMARABIC LETTER HEH GOAL MEDIAL FORMARABIC LETTER HEH DOACHASHMEE ISOL" + - "ATED FORMARABIC LETTER HEH DOACHASHMEE FINAL FORMARABIC LETTER HEH DOACH" + - "ASHMEE INITIAL FORMARABIC LETTER HEH DOACHASHMEE MEDIAL FORMARABIC LETTE" + - "R YEH BARREE ISOLATED FORMARABIC LETTER YEH BARREE FINAL FORMARABIC LETT" + - "ER YEH BARREE WITH HAMZA ABOVE ISOLATED FORMARABIC LETTER YEH BARREE WIT" + - "H HAMZA ABOVE FINAL FORMARABIC SYMBOL DOT ABOVEARABIC SYMBOL DOT BELOWAR" + - "ABIC SYMBOL TWO DOTS ABOVEARABIC SYMBOL TWO DOTS BELOWARABIC SYMBOL THRE" + - "E DOTS ABOVEARABIC SYMBOL THREE DOTS BELOWARABIC SYMBOL THREE DOTS POINT" + - "ING DOWNWARDS ABOVEARABIC SYMBOL THREE DOTS POINTING DOWNWARDS BELOWARAB" + - "IC SYMBOL FOUR DOTS ABOVEARABIC SYMBOL FOUR DOTS BELOWARABIC SYMBOL DOUB" + - "LE VERTICAL BAR BELOWARABIC SYMBOL TWO DOTS VERTICALLY ABOVEARABIC SYMBO" + - "L TWO DOTS VERTICALLY BELOWARABIC SYMBOL RINGARABIC SYMBOL SMALL TAH ABO" + - "VEARABIC SYMBOL SMALL TAH BELOWARABIC LETTER NG ISOLATED FORMARABIC LETT" + - "ER NG FINAL FORMARABIC LETTER NG INITIAL FORMARABIC LETTER NG MEDIAL FOR" + - "MARABIC LETTER U ISOLATED FORMARABIC LETTER U FINAL FORMARABIC LETTER OE" + - " ISOLATED FORMARABIC LETTER OE FINAL FORMARABIC LETTER YU ISOLATED FORMA" + - "RABIC LETTER YU FINAL FORMARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM" + - "ARABIC LETTER VE ISOLATED FORMARABIC LETTER VE FINAL FORMARABIC LETTER K" + - "IRGHIZ OE ISOLATED FORMARABIC LETTER KIRGHIZ OE FINAL FORMARABIC LETTER " + - "KIRGHIZ YU ISOLATED FORMARABIC LETTER KIRGHIZ YU FINAL FORMARABIC LETTER" + - " E ISOLATED FORMARABIC LETTER E FINAL FORMARABIC LETTER E INITIAL FORMAR" + - "ABIC LETTER E MEDIAL FORMARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSUR" + - "A INITIAL FORMARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FO" + - "RMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORMARABIC LIG" + - "ATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORMARABIC LIGATURE YEH WITH " + - "HAMZA ABOVE WITH AE ISOLATED FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WI" + - "TH AE FINAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED F" + - "ORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORMARABIC LIGATU" + - "RE YEH WITH HAMZA ABOVE WITH U ISOLATED FORMARABIC LIGATURE YEH WITH HAM" + - "ZA ABOVE WITH U FINAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE I" + - "SOLATED FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORMARABI" + - "C LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORMARABIC LIGATURE YEH" + - " WITH HAMZA ABOVE WITH YU FINAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE" + - " WITH E ISOLATED FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL F") + ("" + - "ORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORMARABIC LIGATU" + - "RE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORMAR" + - "ABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINA" + - "L FORMARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKS" + - "URA INITIAL FORMARABIC LETTER FARSI YEH ISOLATED FORMARABIC LETTER FARSI" + - " YEH FINAL FORMARABIC LETTER FARSI YEH INITIAL FORMARABIC LETTER FARSI Y" + - "EH MEDIAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FO" + - "RMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORMARABIC LIGA" + - "TURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORMARABIC LIGATURE YEH WIT" + - "H HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE YEH WITH HA" + - "MZA ABOVE WITH YEH ISOLATED FORMARABIC LIGATURE BEH WITH JEEM ISOLATED F" + - "ORMARABIC LIGATURE BEH WITH HAH ISOLATED FORMARABIC LIGATURE BEH WITH KH" + - "AH ISOLATED FORMARABIC LIGATURE BEH WITH MEEM ISOLATED FORMARABIC LIGATU" + - "RE BEH WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE BEH WITH YEH ISOLA" + - "TED FORMARABIC LIGATURE TEH WITH JEEM ISOLATED FORMARABIC LIGATURE TEH W" + - "ITH HAH ISOLATED FORMARABIC LIGATURE TEH WITH KHAH ISOLATED FORMARABIC L" + - "IGATURE TEH WITH MEEM ISOLATED FORMARABIC LIGATURE TEH WITH ALEF MAKSURA" + - " ISOLATED FORMARABIC LIGATURE TEH WITH YEH ISOLATED FORMARABIC LIGATURE " + - "THEH WITH JEEM ISOLATED FORMARABIC LIGATURE THEH WITH MEEM ISOLATED FORM" + - "ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE THEH" + - " WITH YEH ISOLATED FORMARABIC LIGATURE JEEM WITH HAH ISOLATED FORMARABIC" + - " LIGATURE JEEM WITH MEEM ISOLATED FORMARABIC LIGATURE HAH WITH JEEM ISOL" + - "ATED FORMARABIC LIGATURE HAH WITH MEEM ISOLATED FORMARABIC LIGATURE KHAH" + - " WITH JEEM ISOLATED FORMARABIC LIGATURE KHAH WITH HAH ISOLATED FORMARABI" + - "C LIGATURE KHAH WITH MEEM ISOLATED FORMARABIC LIGATURE SEEN WITH JEEM IS" + - "OLATED FORMARABIC LIGATURE SEEN WITH HAH ISOLATED FORMARABIC LIGATURE SE" + - "EN WITH KHAH ISOLATED FORMARABIC LIGATURE SEEN WITH MEEM ISOLATED FORMAR" + - "ABIC LIGATURE SAD WITH HAH ISOLATED FORMARABIC LIGATURE SAD WITH MEEM IS" + - "OLATED FORMARABIC LIGATURE DAD WITH JEEM ISOLATED FORMARABIC LIGATURE DA" + - "D WITH HAH ISOLATED FORMARABIC LIGATURE DAD WITH KHAH ISOLATED FORMARABI" + - "C LIGATURE DAD WITH MEEM ISOLATED FORMARABIC LIGATURE TAH WITH HAH ISOLA" + - "TED FORMARABIC LIGATURE TAH WITH MEEM ISOLATED FORMARABIC LIGATURE ZAH W" + - "ITH MEEM ISOLATED FORMARABIC LIGATURE AIN WITH JEEM ISOLATED FORMARABIC " + - "LIGATURE AIN WITH MEEM ISOLATED FORMARABIC LIGATURE GHAIN WITH JEEM ISOL" + - "ATED FORMARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORMARABIC LIGATURE FE" + - "H WITH JEEM ISOLATED FORMARABIC LIGATURE FEH WITH HAH ISOLATED FORMARABI" + - "C LIGATURE FEH WITH KHAH ISOLATED FORMARABIC LIGATURE FEH WITH MEEM ISOL" + - "ATED FORMARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORMARABIC LIGAT" + - "URE FEH WITH YEH ISOLATED FORMARABIC LIGATURE QAF WITH HAH ISOLATED FORM" + - "ARABIC LIGATURE QAF WITH MEEM ISOLATED FORMARABIC LIGATURE QAF WITH ALEF" + - " MAKSURA ISOLATED FORMARABIC LIGATURE QAF WITH YEH ISOLATED FORMARABIC L" + - "IGATURE KAF WITH ALEF ISOLATED FORMARABIC LIGATURE KAF WITH JEEM ISOLATE" + - "D FORMARABIC LIGATURE KAF WITH HAH ISOLATED FORMARABIC LIGATURE KAF WITH" + - " KHAH ISOLATED FORMARABIC LIGATURE KAF WITH LAM ISOLATED FORMARABIC LIGA" + - "TURE KAF WITH MEEM ISOLATED FORMARABIC LIGATURE KAF WITH ALEF MAKSURA IS" + - "OLATED FORMARABIC LIGATURE KAF WITH YEH ISOLATED FORMARABIC LIGATURE LAM" + - " WITH JEEM ISOLATED FORMARABIC LIGATURE LAM WITH HAH ISOLATED FORMARABIC" + - " LIGATURE LAM WITH KHAH ISOLATED FORMARABIC LIGATURE LAM WITH MEEM ISOLA" + - "TED FORMARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATU" + - "RE LAM WITH YEH ISOLATED FORMARABIC LIGATURE MEEM WITH JEEM ISOLATED FOR" + - "MARABIC LIGATURE MEEM WITH HAH ISOLATED FORMARABIC LIGATURE MEEM WITH KH" + - "AH ISOLATED FORMARABIC LIGATURE MEEM WITH MEEM ISOLATED FORMARABIC LIGAT" + - "URE MEEM WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE MEEM WITH YEH IS" + - "OLATED FORMARABIC LIGATURE NOON WITH JEEM ISOLATED FORMARABIC LIGATURE N" + - "OON WITH HAH ISOLATED FORMARABIC LIGATURE NOON WITH KHAH ISOLATED FORMAR" + - "ABIC LIGATURE NOON WITH MEEM ISOLATED FORMARABIC LIGATURE NOON WITH ALEF" + - " MAKSURA ISOLATED FORMARABIC LIGATURE NOON WITH YEH ISOLATED FORMARABIC " + - "LIGATURE HEH WITH JEEM ISOLATED FORMARABIC LIGATURE HEH WITH MEEM ISOLAT" + - "ED FORMARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATUR" + - "E HEH WITH YEH ISOLATED FORMARABIC LIGATURE YEH WITH JEEM ISOLATED FORMA" + - "RABIC LIGATURE YEH WITH HAH ISOLATED FORMARABIC LIGATURE YEH WITH KHAH I" + - "SOLATED FORMARABIC LIGATURE YEH WITH MEEM ISOLATED FORMARABIC LIGATURE Y" + - "EH WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE YEH WITH YEH ISOLATED " + - "FORMARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORMARABIC LIGAT") + ("" + - "URE REH WITH SUPERSCRIPT ALEF ISOLATED FORMARABIC LIGATURE ALEF MAKSURA " + - "WITH SUPERSCRIPT ALEF ISOLATED FORMARABIC LIGATURE SHADDA WITH DAMMATAN " + - "ISOLATED FORMARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORMARABIC LI" + - "GATURE SHADDA WITH FATHA ISOLATED FORMARABIC LIGATURE SHADDA WITH DAMMA " + - "ISOLATED FORMARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORMARABIC LIGAT" + - "URE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORMARABIC LIGATURE YEH WITH H" + - "AMZA ABOVE WITH REH FINAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH " + - "ZAIN FINAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM" + - "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORMARABIC LIGATURE" + - " YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE YEH WI" + - "TH HAMZA ABOVE WITH YEH FINAL FORMARABIC LIGATURE BEH WITH REH FINAL FOR" + - "MARABIC LIGATURE BEH WITH ZAIN FINAL FORMARABIC LIGATURE BEH WITH MEEM F" + - "INAL FORMARABIC LIGATURE BEH WITH NOON FINAL FORMARABIC LIGATURE BEH WIT" + - "H ALEF MAKSURA FINAL FORMARABIC LIGATURE BEH WITH YEH FINAL FORMARABIC L" + - "IGATURE TEH WITH REH FINAL FORMARABIC LIGATURE TEH WITH ZAIN FINAL FORMA" + - "RABIC LIGATURE TEH WITH MEEM FINAL FORMARABIC LIGATURE TEH WITH NOON FIN" + - "AL FORMARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE T" + - "EH WITH YEH FINAL FORMARABIC LIGATURE THEH WITH REH FINAL FORMARABIC LIG" + - "ATURE THEH WITH ZAIN FINAL FORMARABIC LIGATURE THEH WITH MEEM FINAL FORM" + - "ARABIC LIGATURE THEH WITH NOON FINAL FORMARABIC LIGATURE THEH WITH ALEF " + - "MAKSURA FINAL FORMARABIC LIGATURE THEH WITH YEH FINAL FORMARABIC LIGATUR" + - "E FEH WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE FEH WITH YEH FINAL FOR" + - "MARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE QAF WIT" + - "H YEH FINAL FORMARABIC LIGATURE KAF WITH ALEF FINAL FORMARABIC LIGATURE " + - "KAF WITH LAM FINAL FORMARABIC LIGATURE KAF WITH MEEM FINAL FORMARABIC LI" + - "GATURE KAF WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE KAF WITH YEH FINA" + - "L FORMARABIC LIGATURE LAM WITH MEEM FINAL FORMARABIC LIGATURE LAM WITH A" + - "LEF MAKSURA FINAL FORMARABIC LIGATURE LAM WITH YEH FINAL FORMARABIC LIGA" + - "TURE MEEM WITH ALEF FINAL FORMARABIC LIGATURE MEEM WITH MEEM FINAL FORMA" + - "RABIC LIGATURE NOON WITH REH FINAL FORMARABIC LIGATURE NOON WITH ZAIN FI" + - "NAL FORMARABIC LIGATURE NOON WITH MEEM FINAL FORMARABIC LIGATURE NOON WI" + - "TH NOON FINAL FORMARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORMARABI" + - "C LIGATURE NOON WITH YEH FINAL FORMARABIC LIGATURE ALEF MAKSURA WITH SUP" + - "ERSCRIPT ALEF FINAL FORMARABIC LIGATURE YEH WITH REH FINAL FORMARABIC LI" + - "GATURE YEH WITH ZAIN FINAL FORMARABIC LIGATURE YEH WITH MEEM FINAL FORMA" + - "RABIC LIGATURE YEH WITH NOON FINAL FORMARABIC LIGATURE YEH WITH ALEF MAK" + - "SURA FINAL FORMARABIC LIGATURE YEH WITH YEH FINAL FORMARABIC LIGATURE YE" + - "H WITH HAMZA ABOVE WITH JEEM INITIAL FORMARABIC LIGATURE YEH WITH HAMZA " + - "ABOVE WITH HAH INITIAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHA" + - "H INITIAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FOR" + - "MARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORMARABIC LIGATU" + - "RE BEH WITH JEEM INITIAL FORMARABIC LIGATURE BEH WITH HAH INITIAL FORMAR" + - "ABIC LIGATURE BEH WITH KHAH INITIAL FORMARABIC LIGATURE BEH WITH MEEM IN" + - "ITIAL FORMARABIC LIGATURE BEH WITH HEH INITIAL FORMARABIC LIGATURE TEH W" + - "ITH JEEM INITIAL FORMARABIC LIGATURE TEH WITH HAH INITIAL FORMARABIC LIG" + - "ATURE TEH WITH KHAH INITIAL FORMARABIC LIGATURE TEH WITH MEEM INITIAL FO" + - "RMARABIC LIGATURE TEH WITH HEH INITIAL FORMARABIC LIGATURE THEH WITH MEE" + - "M INITIAL FORMARABIC LIGATURE JEEM WITH HAH INITIAL FORMARABIC LIGATURE " + - "JEEM WITH MEEM INITIAL FORMARABIC LIGATURE HAH WITH JEEM INITIAL FORMARA" + - "BIC LIGATURE HAH WITH MEEM INITIAL FORMARABIC LIGATURE KHAH WITH JEEM IN" + - "ITIAL FORMARABIC LIGATURE KHAH WITH MEEM INITIAL FORMARABIC LIGATURE SEE" + - "N WITH JEEM INITIAL FORMARABIC LIGATURE SEEN WITH HAH INITIAL FORMARABIC" + - " LIGATURE SEEN WITH KHAH INITIAL FORMARABIC LIGATURE SEEN WITH MEEM INIT" + - "IAL FORMARABIC LIGATURE SAD WITH HAH INITIAL FORMARABIC LIGATURE SAD WIT" + - "H KHAH INITIAL FORMARABIC LIGATURE SAD WITH MEEM INITIAL FORMARABIC LIGA" + - "TURE DAD WITH JEEM INITIAL FORMARABIC LIGATURE DAD WITH HAH INITIAL FORM" + - "ARABIC LIGATURE DAD WITH KHAH INITIAL FORMARABIC LIGATURE DAD WITH MEEM " + - "INITIAL FORMARABIC LIGATURE TAH WITH HAH INITIAL FORMARABIC LIGATURE ZAH" + - " WITH MEEM INITIAL FORMARABIC LIGATURE AIN WITH JEEM INITIAL FORMARABIC " + - "LIGATURE AIN WITH MEEM INITIAL FORMARABIC LIGATURE GHAIN WITH JEEM INITI" + - "AL FORMARABIC LIGATURE GHAIN WITH MEEM INITIAL FORMARABIC LIGATURE FEH W" + - "ITH JEEM INITIAL FORMARABIC LIGATURE FEH WITH HAH INITIAL FORMARABIC LIG" + - "ATURE FEH WITH KHAH INITIAL FORMARABIC LIGATURE FEH WITH MEEM INITIAL FO" + - "RMARABIC LIGATURE QAF WITH HAH INITIAL FORMARABIC LIGATURE QAF WITH MEEM") + ("" + - " INITIAL FORMARABIC LIGATURE KAF WITH JEEM INITIAL FORMARABIC LIGATURE K" + - "AF WITH HAH INITIAL FORMARABIC LIGATURE KAF WITH KHAH INITIAL FORMARABIC" + - " LIGATURE KAF WITH LAM INITIAL FORMARABIC LIGATURE KAF WITH MEEM INITIAL" + - " FORMARABIC LIGATURE LAM WITH JEEM INITIAL FORMARABIC LIGATURE LAM WITH " + - "HAH INITIAL FORMARABIC LIGATURE LAM WITH KHAH INITIAL FORMARABIC LIGATUR" + - "E LAM WITH MEEM INITIAL FORMARABIC LIGATURE LAM WITH HEH INITIAL FORMARA" + - "BIC LIGATURE MEEM WITH JEEM INITIAL FORMARABIC LIGATURE MEEM WITH HAH IN" + - "ITIAL FORMARABIC LIGATURE MEEM WITH KHAH INITIAL FORMARABIC LIGATURE MEE" + - "M WITH MEEM INITIAL FORMARABIC LIGATURE NOON WITH JEEM INITIAL FORMARABI" + - "C LIGATURE NOON WITH HAH INITIAL FORMARABIC LIGATURE NOON WITH KHAH INIT" + - "IAL FORMARABIC LIGATURE NOON WITH MEEM INITIAL FORMARABIC LIGATURE NOON " + - "WITH HEH INITIAL FORMARABIC LIGATURE HEH WITH JEEM INITIAL FORMARABIC LI" + - "GATURE HEH WITH MEEM INITIAL FORMARABIC LIGATURE HEH WITH SUPERSCRIPT AL" + - "EF INITIAL FORMARABIC LIGATURE YEH WITH JEEM INITIAL FORMARABIC LIGATURE" + - " YEH WITH HAH INITIAL FORMARABIC LIGATURE YEH WITH KHAH INITIAL FORMARAB" + - "IC LIGATURE YEH WITH MEEM INITIAL FORMARABIC LIGATURE YEH WITH HEH INITI" + - "AL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORMARABIC " + - "LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORMARABIC LIGATURE BEH WI" + - "TH MEEM MEDIAL FORMARABIC LIGATURE BEH WITH HEH MEDIAL FORMARABIC LIGATU" + - "RE TEH WITH MEEM MEDIAL FORMARABIC LIGATURE TEH WITH HEH MEDIAL FORMARAB" + - "IC LIGATURE THEH WITH MEEM MEDIAL FORMARABIC LIGATURE THEH WITH HEH MEDI" + - "AL FORMARABIC LIGATURE SEEN WITH MEEM MEDIAL FORMARABIC LIGATURE SEEN WI" + - "TH HEH MEDIAL FORMARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORMARABIC LIGA" + - "TURE SHEEN WITH HEH MEDIAL FORMARABIC LIGATURE KAF WITH LAM MEDIAL FORMA" + - "RABIC LIGATURE KAF WITH MEEM MEDIAL FORMARABIC LIGATURE LAM WITH MEEM ME" + - "DIAL FORMARABIC LIGATURE NOON WITH MEEM MEDIAL FORMARABIC LIGATURE NOON " + - "WITH HEH MEDIAL FORMARABIC LIGATURE YEH WITH MEEM MEDIAL FORMARABIC LIGA" + - "TURE YEH WITH HEH MEDIAL FORMARABIC LIGATURE SHADDA WITH FATHA MEDIAL FO" + - "RMARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORMARABIC LIGATURE SHADDA WI" + - "TH KASRA MEDIAL FORMARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORMA" + - "RABIC LIGATURE TAH WITH YEH ISOLATED FORMARABIC LIGATURE AIN WITH ALEF M" + - "AKSURA ISOLATED FORMARABIC LIGATURE AIN WITH YEH ISOLATED FORMARABIC LIG" + - "ATURE GHAIN WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE GHAIN WITH YE" + - "H ISOLATED FORMARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORMARABI" + - "C LIGATURE SEEN WITH YEH ISOLATED FORMARABIC LIGATURE SHEEN WITH ALEF MA" + - "KSURA ISOLATED FORMARABIC LIGATURE SHEEN WITH YEH ISOLATED FORMARABIC LI" + - "GATURE HAH WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE HAH WITH YEH I" + - "SOLATED FORMARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORMARABIC L" + - "IGATURE JEEM WITH YEH ISOLATED FORMARABIC LIGATURE KHAH WITH ALEF MAKSUR" + - "A ISOLATED FORMARABIC LIGATURE KHAH WITH YEH ISOLATED FORMARABIC LIGATUR" + - "E SAD WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE SAD WITH YEH ISOLAT" + - "ED FORMARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATUR" + - "E DAD WITH YEH ISOLATED FORMARABIC LIGATURE SHEEN WITH JEEM ISOLATED FOR" + - "MARABIC LIGATURE SHEEN WITH HAH ISOLATED FORMARABIC LIGATURE SHEEN WITH " + - "KHAH ISOLATED FORMARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORMARABIC LI" + - "GATURE SHEEN WITH REH ISOLATED FORMARABIC LIGATURE SEEN WITH REH ISOLATE" + - "D FORMARABIC LIGATURE SAD WITH REH ISOLATED FORMARABIC LIGATURE DAD WITH" + - " REH ISOLATED FORMARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORMARABIC" + - " LIGATURE TAH WITH YEH FINAL FORMARABIC LIGATURE AIN WITH ALEF MAKSURA F" + - "INAL FORMARABIC LIGATURE AIN WITH YEH FINAL FORMARABIC LIGATURE GHAIN WI" + - "TH ALEF MAKSURA FINAL FORMARABIC LIGATURE GHAIN WITH YEH FINAL FORMARABI" + - "C LIGATURE SEEN WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE SEEN WITH YE" + - "H FINAL FORMARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORMARABIC LIG" + - "ATURE SHEEN WITH YEH FINAL FORMARABIC LIGATURE HAH WITH ALEF MAKSURA FIN" + - "AL FORMARABIC LIGATURE HAH WITH YEH FINAL FORMARABIC LIGATURE JEEM WITH " + - "ALEF MAKSURA FINAL FORMARABIC LIGATURE JEEM WITH YEH FINAL FORMARABIC LI" + - "GATURE KHAH WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE KHAH WITH YEH FI" + - "NAL FORMARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE " + - "SAD WITH YEH FINAL FORMARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORMA" + - "RABIC LIGATURE DAD WITH YEH FINAL FORMARABIC LIGATURE SHEEN WITH JEEM FI" + - "NAL FORMARABIC LIGATURE SHEEN WITH HAH FINAL FORMARABIC LIGATURE SHEEN W" + - "ITH KHAH FINAL FORMARABIC LIGATURE SHEEN WITH MEEM FINAL FORMARABIC LIGA" + - "TURE SHEEN WITH REH FINAL FORMARABIC LIGATURE SEEN WITH REH FINAL FORMAR" + - "ABIC LIGATURE SAD WITH REH FINAL FORMARABIC LIGATURE DAD WITH REH FINAL ") + ("" + - "FORMARABIC LIGATURE SHEEN WITH JEEM INITIAL FORMARABIC LIGATURE SHEEN WI" + - "TH HAH INITIAL FORMARABIC LIGATURE SHEEN WITH KHAH INITIAL FORMARABIC LI" + - "GATURE SHEEN WITH MEEM INITIAL FORMARABIC LIGATURE SEEN WITH HEH INITIAL" + - " FORMARABIC LIGATURE SHEEN WITH HEH INITIAL FORMARABIC LIGATURE TAH WITH" + - " MEEM INITIAL FORMARABIC LIGATURE SEEN WITH JEEM MEDIAL FORMARABIC LIGAT" + - "URE SEEN WITH HAH MEDIAL FORMARABIC LIGATURE SEEN WITH KHAH MEDIAL FORMA" + - "RABIC LIGATURE SHEEN WITH JEEM MEDIAL FORMARABIC LIGATURE SHEEN WITH HAH" + - " MEDIAL FORMARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORMARABIC LIGATURE T" + - "AH WITH MEEM MEDIAL FORMARABIC LIGATURE ZAH WITH MEEM MEDIAL FORMARABIC " + - "LIGATURE ALEF WITH FATHATAN FINAL FORMARABIC LIGATURE ALEF WITH FATHATAN" + - " ISOLATED FORMORNATE LEFT PARENTHESISORNATE RIGHT PARENTHESISARABIC LIGA" + - "TURE TEH WITH JEEM WITH MEEM INITIAL FORMARABIC LIGATURE TEH WITH HAH WI" + - "TH JEEM FINAL FORMARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORMARA" + - "BIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORMARABIC LIGATURE TEH WITH" + - " KHAH WITH MEEM INITIAL FORMARABIC LIGATURE TEH WITH MEEM WITH JEEM INIT" + - "IAL FORMARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORMARABIC LIGATU" + - "RE TEH WITH MEEM WITH KHAH INITIAL FORMARABIC LIGATURE JEEM WITH MEEM WI" + - "TH HAH FINAL FORMARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORMARA" + - "BIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORMARABIC LIGATURE HAH WITH M" + - "EEM WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE SEEN WITH HAH WITH JEEM " + - "INITIAL FORMARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORMARABIC L" + - "IGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE SEEN " + - "WITH MEEM WITH HAH FINAL FORMARABIC LIGATURE SEEN WITH MEEM WITH HAH INI" + - "TIAL FORMARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORMARABIC LIG" + - "ATURE SEEN WITH MEEM WITH MEEM FINAL FORMARABIC LIGATURE SEEN WITH MEEM " + - "WITH MEEM INITIAL FORMARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORMAR" + - "ABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORMARABIC LIGATURE SAD WITH" + - " MEEM WITH MEEM FINAL FORMARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL" + - " FORMARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORMARABIC LIGATUR" + - "E SHEEN WITH JEEM WITH YEH FINAL FORMARABIC LIGATURE SHEEN WITH MEEM WIT" + - "H KHAH FINAL FORMARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORMA" + - "RABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORMARABIC LIGATURE SHEEN" + - " WITH MEEM WITH MEEM INITIAL FORMARABIC LIGATURE DAD WITH HAH WITH ALEF " + - "MAKSURA FINAL FORMARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORMARAB" + - "IC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORMARABIC LIGATURE TAH WITH" + - " MEEM WITH HAH FINAL FORMARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL " + - "FORMARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORMARABIC LIGATURE " + - "TAH WITH MEEM WITH YEH FINAL FORMARABIC LIGATURE AIN WITH JEEM WITH MEEM" + - " FINAL FORMARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORMARABIC LIGA" + - "TURE AIN WITH MEEM WITH MEEM INITIAL FORMARABIC LIGATURE AIN WITH MEEM W" + - "ITH ALEF MAKSURA FINAL FORMARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FIN" + - "AL FORMARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORMARABIC LIGATUR" + - "E GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE FEH WITH K" + - "HAH WITH MEEM FINAL FORMARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL " + - "FORMARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORMARABIC LIGATURE QAF" + - " WITH MEEM WITH MEEM FINAL FORMARABIC LIGATURE LAM WITH HAH WITH MEEM FI" + - "NAL FORMARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORMARABIC LIGATURE " + - "LAM WITH HAH WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE LAM WITH JEEM W" + - "ITH JEEM INITIAL FORMARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORMA" + - "RABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORMARABIC LIGATURE LAM WIT" + - "H KHAH WITH MEEM INITIAL FORMARABIC LIGATURE LAM WITH MEEM WITH HAH FINA" + - "L FORMARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORMARABIC LIGATURE" + - " MEEM WITH HAH WITH JEEM INITIAL FORMARABIC LIGATURE MEEM WITH HAH WITH " + - "MEEM INITIAL FORMARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORMARABIC" + - " LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORMARABIC LIGATURE MEEM WITH " + - "JEEM WITH MEEM INITIAL FORMARABIC LIGATURE MEEM WITH KHAH WITH JEEM INIT" + - "IAL FORMARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORMARABIC LIGA" + - "TURE MEEM WITH JEEM WITH KHAH INITIAL FORMARABIC LIGATURE HEH WITH MEEM " + - "WITH JEEM INITIAL FORMARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FO" + - "RMARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORMARABIC LIGATURE NO" + - "ON WITH HAH WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE NOON WITH JEEM W" + - "ITH MEEM FINAL FORMARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM" + - "ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORMARABIC LIGATU" + - "RE NOON WITH MEEM WITH YEH FINAL FORMARABIC LIGATURE NOON WITH MEEM WITH") + ("" + - " ALEF MAKSURA FINAL FORMARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FO" + - "RMARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORMARABIC LIGATURE BE" + - "H WITH KHAH WITH YEH FINAL FORMARABIC LIGATURE TEH WITH JEEM WITH YEH FI" + - "NAL FORMARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORMARABIC" + - " LIGATURE TEH WITH KHAH WITH YEH FINAL FORMARABIC LIGATURE TEH WITH KHAH" + - " WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE TEH WITH MEEM WITH YEH FINA" + - "L FORMARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORMARABIC L" + - "IGATURE JEEM WITH MEEM WITH YEH FINAL FORMARABIC LIGATURE JEEM WITH HAH " + - "WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAK" + - "SURA FINAL FORMARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FO" + - "RMARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORMARABIC LIGATURE SHEEN " + - "WITH HAH WITH YEH FINAL FORMARABIC LIGATURE DAD WITH HAH WITH YEH FINAL " + - "FORMARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORMARABIC LIGATURE LAM" + - " WITH MEEM WITH YEH FINAL FORMARABIC LIGATURE YEH WITH HAH WITH YEH FINA" + - "L FORMARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORMARABIC LIGATURE Y" + - "EH WITH MEEM WITH YEH FINAL FORMARABIC LIGATURE MEEM WITH MEEM WITH YEH " + - "FINAL FORMARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORMARABIC LIGATU" + - "RE NOON WITH HAH WITH YEH FINAL FORMARABIC LIGATURE QAF WITH MEEM WITH H" + - "AH INITIAL FORMARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORMARABIC" + - " LIGATURE AIN WITH MEEM WITH YEH FINAL FORMARABIC LIGATURE KAF WITH MEEM" + - " WITH YEH FINAL FORMARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM" + - "ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORMARABIC LIGATURE LAM WI" + - "TH JEEM WITH MEEM INITIAL FORMARABIC LIGATURE KAF WITH MEEM WITH MEEM FI" + - "NAL FORMARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORMARABIC LIGATUR" + - "E NOON WITH JEEM WITH HAH FINAL FORMARABIC LIGATURE JEEM WITH HAH WITH Y" + - "EH FINAL FORMARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORMARABIC LIG" + - "ATURE MEEM WITH JEEM WITH YEH FINAL FORMARABIC LIGATURE FEH WITH MEEM WI" + - "TH YEH FINAL FORMARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORMARABIC " + - "LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORMARABIC LIGATURE AIN WITH JE" + - "EM WITH MEEM INITIAL FORMARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL" + - " FORMARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORMARABIC LIGATURE N" + - "OON WITH JEEM WITH YEH FINAL FORMARABIC LIGATURE SALLA USED AS KORANIC S" + - "TOP SIGN ISOLATED FORMARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISO" + - "LATED FORMARABIC LIGATURE ALLAH ISOLATED FORMARABIC LIGATURE AKBAR ISOLA" + - "TED FORMARABIC LIGATURE MOHAMMAD ISOLATED FORMARABIC LIGATURE SALAM ISOL" + - "ATED FORMARABIC LIGATURE RASOUL ISOLATED FORMARABIC LIGATURE ALAYHE ISOL" + - "ATED FORMARABIC LIGATURE WASALLAM ISOLATED FORMARABIC LIGATURE SALLA ISO" + - "LATED FORMARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAMARABIC LIGATURE JAL" + - "LAJALALOUHOURIAL SIGNARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEMVARIAT" + - "ION SELECTOR-1VARIATION SELECTOR-2VARIATION SELECTOR-3VARIATION SELECTOR" + - "-4VARIATION SELECTOR-5VARIATION SELECTOR-6VARIATION SELECTOR-7VARIATION " + - "SELECTOR-8VARIATION SELECTOR-9VARIATION SELECTOR-10VARIATION SELECTOR-11" + - "VARIATION SELECTOR-12VARIATION SELECTOR-13VARIATION SELECTOR-14VARIATION" + - " SELECTOR-15VARIATION SELECTOR-16PRESENTATION FORM FOR VERTICAL COMMAPRE" + - "SENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMAPRESENTATION FORM FOR VERTI" + - "CAL IDEOGRAPHIC FULL STOPPRESENTATION FORM FOR VERTICAL COLONPRESENTATIO" + - "N FORM FOR VERTICAL SEMICOLONPRESENTATION FORM FOR VERTICAL EXCLAMATION " + - "MARKPRESENTATION FORM FOR VERTICAL QUESTION MARKPRESENTATION FORM FOR VE" + - "RTICAL LEFT WHITE LENTICULAR BRACKETPRESENTATION FORM FOR VERTICAL RIGHT" + - " WHITE LENTICULAR BRAKCETPRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIP" + - "SISCOMBINING LIGATURE LEFT HALFCOMBINING LIGATURE RIGHT HALFCOMBINING DO" + - "UBLE TILDE LEFT HALFCOMBINING DOUBLE TILDE RIGHT HALFCOMBINING MACRON LE" + - "FT HALFCOMBINING MACRON RIGHT HALFCOMBINING CONJOINING MACRONCOMBINING L" + - "IGATURE LEFT HALF BELOWCOMBINING LIGATURE RIGHT HALF BELOWCOMBINING TILD" + - "E LEFT HALF BELOWCOMBINING TILDE RIGHT HALF BELOWCOMBINING MACRON LEFT H" + - "ALF BELOWCOMBINING MACRON RIGHT HALF BELOWCOMBINING CONJOINING MACRON BE" + - "LOWCOMBINING CYRILLIC TITLO LEFT HALFCOMBINING CYRILLIC TITLO RIGHT HALF" + - "PRESENTATION FORM FOR VERTICAL TWO DOT LEADERPRESENTATION FORM FOR VERTI" + - "CAL EM DASHPRESENTATION FORM FOR VERTICAL EN DASHPRESENTATION FORM FOR V" + - "ERTICAL LOW LINEPRESENTATION FORM FOR VERTICAL WAVY LOW LINEPRESENTATION" + - " FORM FOR VERTICAL LEFT PARENTHESISPRESENTATION FORM FOR VERTICAL RIGHT " + - "PARENTHESISPRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKETPRESENTATION" + - " FORM FOR VERTICAL RIGHT CURLY BRACKETPRESENTATION FORM FOR VERTICAL LEF" + - "T TORTOISE SHELL BRACKETPRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SH") + ("" + - "ELL BRACKETPRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKETP" + - "RESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKETPRESENTATION" + - " FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKETPRESENTATION FORM FOR VERTIC" + - "AL RIGHT DOUBLE ANGLE BRACKETPRESENTATION FORM FOR VERTICAL LEFT ANGLE B" + - "RACKETPRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKETPRESENTATION FOR" + - "M FOR VERTICAL LEFT CORNER BRACKETPRESENTATION FORM FOR VERTICAL RIGHT C" + - "ORNER BRACKETPRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKETPRE" + - "SENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKETSESAME DOTWHITE SE" + - "SAME DOTPRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKETPRESENTATION F" + - "ORM FOR VERTICAL RIGHT SQUARE BRACKETDASHED OVERLINECENTRELINE OVERLINEW" + - "AVY OVERLINEDOUBLE WAVY OVERLINEDASHED LOW LINECENTRELINE LOW LINEWAVY L" + - "OW LINESMALL COMMASMALL IDEOGRAPHIC COMMASMALL FULL STOPSMALL SEMICOLONS" + - "MALL COLONSMALL QUESTION MARKSMALL EXCLAMATION MARKSMALL EM DASHSMALL LE" + - "FT PARENTHESISSMALL RIGHT PARENTHESISSMALL LEFT CURLY BRACKETSMALL RIGHT" + - " CURLY BRACKETSMALL LEFT TORTOISE SHELL BRACKETSMALL RIGHT TORTOISE SHEL" + - "L BRACKETSMALL NUMBER SIGNSMALL AMPERSANDSMALL ASTERISKSMALL PLUS SIGNSM" + - "ALL HYPHEN-MINUSSMALL LESS-THAN SIGNSMALL GREATER-THAN SIGNSMALL EQUALS " + - "SIGNSMALL REVERSE SOLIDUSSMALL DOLLAR SIGNSMALL PERCENT SIGNSMALL COMMER" + - "CIAL ATARABIC FATHATAN ISOLATED FORMARABIC TATWEEL WITH FATHATAN ABOVEAR" + - "ABIC DAMMATAN ISOLATED FORMARABIC TAIL FRAGMENTARABIC KASRATAN ISOLATED " + - "FORMARABIC FATHA ISOLATED FORMARABIC FATHA MEDIAL FORMARABIC DAMMA ISOLA" + - "TED FORMARABIC DAMMA MEDIAL FORMARABIC KASRA ISOLATED FORMARABIC KASRA M" + - "EDIAL FORMARABIC SHADDA ISOLATED FORMARABIC SHADDA MEDIAL FORMARABIC SUK" + - "UN ISOLATED FORMARABIC SUKUN MEDIAL FORMARABIC LETTER HAMZA ISOLATED FOR" + - "MARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORMARABIC LETTER ALEF WIT" + - "H MADDA ABOVE FINAL FORMARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FOR" + - "MARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORMARABIC LETTER WAW WITH HA" + - "MZA ABOVE ISOLATED FORMARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORMARAB" + - "IC LETTER ALEF WITH HAMZA BELOW ISOLATED FORMARABIC LETTER ALEF WITH HAM" + - "ZA BELOW FINAL FORMARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORMARABI" + - "C LETTER YEH WITH HAMZA ABOVE FINAL FORMARABIC LETTER YEH WITH HAMZA ABO" + - "VE INITIAL FORMARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORMARABIC LETT" + - "ER ALEF ISOLATED FORMARABIC LETTER ALEF FINAL FORMARABIC LETTER BEH ISOL" + - "ATED FORMARABIC LETTER BEH FINAL FORMARABIC LETTER BEH INITIAL FORMARABI" + - "C LETTER BEH MEDIAL FORMARABIC LETTER TEH MARBUTA ISOLATED FORMARABIC LE" + - "TTER TEH MARBUTA FINAL FORMARABIC LETTER TEH ISOLATED FORMARABIC LETTER " + - "TEH FINAL FORMARABIC LETTER TEH INITIAL FORMARABIC LETTER TEH MEDIAL FOR" + - "MARABIC LETTER THEH ISOLATED FORMARABIC LETTER THEH FINAL FORMARABIC LET" + - "TER THEH INITIAL FORMARABIC LETTER THEH MEDIAL FORMARABIC LETTER JEEM IS" + - "OLATED FORMARABIC LETTER JEEM FINAL FORMARABIC LETTER JEEM INITIAL FORMA" + - "RABIC LETTER JEEM MEDIAL FORMARABIC LETTER HAH ISOLATED FORMARABIC LETTE" + - "R HAH FINAL FORMARABIC LETTER HAH INITIAL FORMARABIC LETTER HAH MEDIAL F" + - "ORMARABIC LETTER KHAH ISOLATED FORMARABIC LETTER KHAH FINAL FORMARABIC L" + - "ETTER KHAH INITIAL FORMARABIC LETTER KHAH MEDIAL FORMARABIC LETTER DAL I" + - "SOLATED FORMARABIC LETTER DAL FINAL FORMARABIC LETTER THAL ISOLATED FORM" + - "ARABIC LETTER THAL FINAL FORMARABIC LETTER REH ISOLATED FORMARABIC LETTE" + - "R REH FINAL FORMARABIC LETTER ZAIN ISOLATED FORMARABIC LETTER ZAIN FINAL" + - " FORMARABIC LETTER SEEN ISOLATED FORMARABIC LETTER SEEN FINAL FORMARABIC" + - " LETTER SEEN INITIAL FORMARABIC LETTER SEEN MEDIAL FORMARABIC LETTER SHE" + - "EN ISOLATED FORMARABIC LETTER SHEEN FINAL FORMARABIC LETTER SHEEN INITIA" + - "L FORMARABIC LETTER SHEEN MEDIAL FORMARABIC LETTER SAD ISOLATED FORMARAB" + - "IC LETTER SAD FINAL FORMARABIC LETTER SAD INITIAL FORMARABIC LETTER SAD " + - "MEDIAL FORMARABIC LETTER DAD ISOLATED FORMARABIC LETTER DAD FINAL FORMAR" + - "ABIC LETTER DAD INITIAL FORMARABIC LETTER DAD MEDIAL FORMARABIC LETTER T" + - "AH ISOLATED FORMARABIC LETTER TAH FINAL FORMARABIC LETTER TAH INITIAL FO" + - "RMARABIC LETTER TAH MEDIAL FORMARABIC LETTER ZAH ISOLATED FORMARABIC LET" + - "TER ZAH FINAL FORMARABIC LETTER ZAH INITIAL FORMARABIC LETTER ZAH MEDIAL" + - " FORMARABIC LETTER AIN ISOLATED FORMARABIC LETTER AIN FINAL FORMARABIC L" + - "ETTER AIN INITIAL FORMARABIC LETTER AIN MEDIAL FORMARABIC LETTER GHAIN I" + - "SOLATED FORMARABIC LETTER GHAIN FINAL FORMARABIC LETTER GHAIN INITIAL FO" + - "RMARABIC LETTER GHAIN MEDIAL FORMARABIC LETTER FEH ISOLATED FORMARABIC L" + - "ETTER FEH FINAL FORMARABIC LETTER FEH INITIAL FORMARABIC LETTER FEH MEDI" + - "AL FORMARABIC LETTER QAF ISOLATED FORMARABIC LETTER QAF FINAL FORMARABIC" + - " LETTER QAF INITIAL FORMARABIC LETTER QAF MEDIAL FORMARABIC LETTER KAF I") + ("" + - "SOLATED FORMARABIC LETTER KAF FINAL FORMARABIC LETTER KAF INITIAL FORMAR" + - "ABIC LETTER KAF MEDIAL FORMARABIC LETTER LAM ISOLATED FORMARABIC LETTER " + - "LAM FINAL FORMARABIC LETTER LAM INITIAL FORMARABIC LETTER LAM MEDIAL FOR" + - "MARABIC LETTER MEEM ISOLATED FORMARABIC LETTER MEEM FINAL FORMARABIC LET" + - "TER MEEM INITIAL FORMARABIC LETTER MEEM MEDIAL FORMARABIC LETTER NOON IS" + - "OLATED FORMARABIC LETTER NOON FINAL FORMARABIC LETTER NOON INITIAL FORMA" + - "RABIC LETTER NOON MEDIAL FORMARABIC LETTER HEH ISOLATED FORMARABIC LETTE" + - "R HEH FINAL FORMARABIC LETTER HEH INITIAL FORMARABIC LETTER HEH MEDIAL F" + - "ORMARABIC LETTER WAW ISOLATED FORMARABIC LETTER WAW FINAL FORMARABIC LET" + - "TER ALEF MAKSURA ISOLATED FORMARABIC LETTER ALEF MAKSURA FINAL FORMARABI" + - "C LETTER YEH ISOLATED FORMARABIC LETTER YEH FINAL FORMARABIC LETTER YEH " + - "INITIAL FORMARABIC LETTER YEH MEDIAL FORMARABIC LIGATURE LAM WITH ALEF W" + - "ITH MADDA ABOVE ISOLATED FORMARABIC LIGATURE LAM WITH ALEF WITH MADDA AB" + - "OVE FINAL FORMARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FO" + - "RMARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORMARABIC LIGATU" + - "RE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORMARABIC LIGATURE LAM WITH " + - "ALEF WITH HAMZA BELOW FINAL FORMARABIC LIGATURE LAM WITH ALEF ISOLATED F" + - "ORMARABIC LIGATURE LAM WITH ALEF FINAL FORMZERO WIDTH NO-BREAK SPACEFULL" + - "WIDTH EXCLAMATION MARKFULLWIDTH QUOTATION MARKFULLWIDTH NUMBER SIGNFULLW" + - "IDTH DOLLAR SIGNFULLWIDTH PERCENT SIGNFULLWIDTH AMPERSANDFULLWIDTH APOST" + - "ROPHEFULLWIDTH LEFT PARENTHESISFULLWIDTH RIGHT PARENTHESISFULLWIDTH ASTE" + - "RISKFULLWIDTH PLUS SIGNFULLWIDTH COMMAFULLWIDTH HYPHEN-MINUSFULLWIDTH FU" + - "LL STOPFULLWIDTH SOLIDUSFULLWIDTH DIGIT ZEROFULLWIDTH DIGIT ONEFULLWIDTH" + - " DIGIT TWOFULLWIDTH DIGIT THREEFULLWIDTH DIGIT FOURFULLWIDTH DIGIT FIVEF" + - "ULLWIDTH DIGIT SIXFULLWIDTH DIGIT SEVENFULLWIDTH DIGIT EIGHTFULLWIDTH DI" + - "GIT NINEFULLWIDTH COLONFULLWIDTH SEMICOLONFULLWIDTH LESS-THAN SIGNFULLWI" + - "DTH EQUALS SIGNFULLWIDTH GREATER-THAN SIGNFULLWIDTH QUESTION MARKFULLWID" + - "TH COMMERCIAL ATFULLWIDTH LATIN CAPITAL LETTER AFULLWIDTH LATIN CAPITAL " + - "LETTER BFULLWIDTH LATIN CAPITAL LETTER CFULLWIDTH LATIN CAPITAL LETTER D" + - "FULLWIDTH LATIN CAPITAL LETTER EFULLWIDTH LATIN CAPITAL LETTER FFULLWIDT" + - "H LATIN CAPITAL LETTER GFULLWIDTH LATIN CAPITAL LETTER HFULLWIDTH LATIN " + - "CAPITAL LETTER IFULLWIDTH LATIN CAPITAL LETTER JFULLWIDTH LATIN CAPITAL " + - "LETTER KFULLWIDTH LATIN CAPITAL LETTER LFULLWIDTH LATIN CAPITAL LETTER M" + - "FULLWIDTH LATIN CAPITAL LETTER NFULLWIDTH LATIN CAPITAL LETTER OFULLWIDT" + - "H LATIN CAPITAL LETTER PFULLWIDTH LATIN CAPITAL LETTER QFULLWIDTH LATIN " + - "CAPITAL LETTER RFULLWIDTH LATIN CAPITAL LETTER SFULLWIDTH LATIN CAPITAL " + - "LETTER TFULLWIDTH LATIN CAPITAL LETTER UFULLWIDTH LATIN CAPITAL LETTER V" + - "FULLWIDTH LATIN CAPITAL LETTER WFULLWIDTH LATIN CAPITAL LETTER XFULLWIDT" + - "H LATIN CAPITAL LETTER YFULLWIDTH LATIN CAPITAL LETTER ZFULLWIDTH LEFT S" + - "QUARE BRACKETFULLWIDTH REVERSE SOLIDUSFULLWIDTH RIGHT SQUARE BRACKETFULL" + - "WIDTH CIRCUMFLEX ACCENTFULLWIDTH LOW LINEFULLWIDTH GRAVE ACCENTFULLWIDTH" + - " LATIN SMALL LETTER AFULLWIDTH LATIN SMALL LETTER BFULLWIDTH LATIN SMALL" + - " LETTER CFULLWIDTH LATIN SMALL LETTER DFULLWIDTH LATIN SMALL LETTER EFUL" + - "LWIDTH LATIN SMALL LETTER FFULLWIDTH LATIN SMALL LETTER GFULLWIDTH LATIN" + - " SMALL LETTER HFULLWIDTH LATIN SMALL LETTER IFULLWIDTH LATIN SMALL LETTE" + - "R JFULLWIDTH LATIN SMALL LETTER KFULLWIDTH LATIN SMALL LETTER LFULLWIDTH" + - " LATIN SMALL LETTER MFULLWIDTH LATIN SMALL LETTER NFULLWIDTH LATIN SMALL" + - " LETTER OFULLWIDTH LATIN SMALL LETTER PFULLWIDTH LATIN SMALL LETTER QFUL" + - "LWIDTH LATIN SMALL LETTER RFULLWIDTH LATIN SMALL LETTER SFULLWIDTH LATIN" + - " SMALL LETTER TFULLWIDTH LATIN SMALL LETTER UFULLWIDTH LATIN SMALL LETTE" + - "R VFULLWIDTH LATIN SMALL LETTER WFULLWIDTH LATIN SMALL LETTER XFULLWIDTH" + - " LATIN SMALL LETTER YFULLWIDTH LATIN SMALL LETTER ZFULLWIDTH LEFT CURLY " + - "BRACKETFULLWIDTH VERTICAL LINEFULLWIDTH RIGHT CURLY BRACKETFULLWIDTH TIL" + - "DEFULLWIDTH LEFT WHITE PARENTHESISFULLWIDTH RIGHT WHITE PARENTHESISHALFW" + - "IDTH IDEOGRAPHIC FULL STOPHALFWIDTH LEFT CORNER BRACKETHALFWIDTH RIGHT C" + - "ORNER BRACKETHALFWIDTH IDEOGRAPHIC COMMAHALFWIDTH KATAKANA MIDDLE DOTHAL" + - "FWIDTH KATAKANA LETTER WOHALFWIDTH KATAKANA LETTER SMALL AHALFWIDTH KATA" + - "KANA LETTER SMALL IHALFWIDTH KATAKANA LETTER SMALL UHALFWIDTH KATAKANA L" + - "ETTER SMALL EHALFWIDTH KATAKANA LETTER SMALL OHALFWIDTH KATAKANA LETTER " + - "SMALL YAHALFWIDTH KATAKANA LETTER SMALL YUHALFWIDTH KATAKANA LETTER SMAL" + - "L YOHALFWIDTH KATAKANA LETTER SMALL TUHALFWIDTH KATAKANA-HIRAGANA PROLON" + - "GED SOUND MARKHALFWIDTH KATAKANA LETTER AHALFWIDTH KATAKANA LETTER IHALF" + - "WIDTH KATAKANA LETTER UHALFWIDTH KATAKANA LETTER EHALFWIDTH KATAKANA LET" + - "TER OHALFWIDTH KATAKANA LETTER KAHALFWIDTH KATAKANA LETTER KIHALFWIDTH K") + ("" + - "ATAKANA LETTER KUHALFWIDTH KATAKANA LETTER KEHALFWIDTH KATAKANA LETTER K" + - "OHALFWIDTH KATAKANA LETTER SAHALFWIDTH KATAKANA LETTER SIHALFWIDTH KATAK" + - "ANA LETTER SUHALFWIDTH KATAKANA LETTER SEHALFWIDTH KATAKANA LETTER SOHAL" + - "FWIDTH KATAKANA LETTER TAHALFWIDTH KATAKANA LETTER TIHALFWIDTH KATAKANA " + - "LETTER TUHALFWIDTH KATAKANA LETTER TEHALFWIDTH KATAKANA LETTER TOHALFWID" + - "TH KATAKANA LETTER NAHALFWIDTH KATAKANA LETTER NIHALFWIDTH KATAKANA LETT" + - "ER NUHALFWIDTH KATAKANA LETTER NEHALFWIDTH KATAKANA LETTER NOHALFWIDTH K" + - "ATAKANA LETTER HAHALFWIDTH KATAKANA LETTER HIHALFWIDTH KATAKANA LETTER H" + - "UHALFWIDTH KATAKANA LETTER HEHALFWIDTH KATAKANA LETTER HOHALFWIDTH KATAK" + - "ANA LETTER MAHALFWIDTH KATAKANA LETTER MIHALFWIDTH KATAKANA LETTER MUHAL" + - "FWIDTH KATAKANA LETTER MEHALFWIDTH KATAKANA LETTER MOHALFWIDTH KATAKANA " + - "LETTER YAHALFWIDTH KATAKANA LETTER YUHALFWIDTH KATAKANA LETTER YOHALFWID" + - "TH KATAKANA LETTER RAHALFWIDTH KATAKANA LETTER RIHALFWIDTH KATAKANA LETT" + - "ER RUHALFWIDTH KATAKANA LETTER REHALFWIDTH KATAKANA LETTER ROHALFWIDTH K" + - "ATAKANA LETTER WAHALFWIDTH KATAKANA LETTER NHALFWIDTH KATAKANA VOICED SO" + - "UND MARKHALFWIDTH KATAKANA SEMI-VOICED SOUND MARKHALFWIDTH HANGUL FILLER" + - "HALFWIDTH HANGUL LETTER KIYEOKHALFWIDTH HANGUL LETTER SSANGKIYEOKHALFWID" + - "TH HANGUL LETTER KIYEOK-SIOSHALFWIDTH HANGUL LETTER NIEUNHALFWIDTH HANGU" + - "L LETTER NIEUN-CIEUCHALFWIDTH HANGUL LETTER NIEUN-HIEUHHALFWIDTH HANGUL " + - "LETTER TIKEUTHALFWIDTH HANGUL LETTER SSANGTIKEUTHALFWIDTH HANGUL LETTER " + - "RIEULHALFWIDTH HANGUL LETTER RIEUL-KIYEOKHALFWIDTH HANGUL LETTER RIEUL-M" + - "IEUMHALFWIDTH HANGUL LETTER RIEUL-PIEUPHALFWIDTH HANGUL LETTER RIEUL-SIO" + - "SHALFWIDTH HANGUL LETTER RIEUL-THIEUTHHALFWIDTH HANGUL LETTER RIEUL-PHIE" + - "UPHHALFWIDTH HANGUL LETTER RIEUL-HIEUHHALFWIDTH HANGUL LETTER MIEUMHALFW" + - "IDTH HANGUL LETTER PIEUPHALFWIDTH HANGUL LETTER SSANGPIEUPHALFWIDTH HANG" + - "UL LETTER PIEUP-SIOSHALFWIDTH HANGUL LETTER SIOSHALFWIDTH HANGUL LETTER " + - "SSANGSIOSHALFWIDTH HANGUL LETTER IEUNGHALFWIDTH HANGUL LETTER CIEUCHALFW" + - "IDTH HANGUL LETTER SSANGCIEUCHALFWIDTH HANGUL LETTER CHIEUCHHALFWIDTH HA" + - "NGUL LETTER KHIEUKHHALFWIDTH HANGUL LETTER THIEUTHHALFWIDTH HANGUL LETTE" + - "R PHIEUPHHALFWIDTH HANGUL LETTER HIEUHHALFWIDTH HANGUL LETTER AHALFWIDTH" + - " HANGUL LETTER AEHALFWIDTH HANGUL LETTER YAHALFWIDTH HANGUL LETTER YAEHA" + - "LFWIDTH HANGUL LETTER EOHALFWIDTH HANGUL LETTER EHALFWIDTH HANGUL LETTER" + - " YEOHALFWIDTH HANGUL LETTER YEHALFWIDTH HANGUL LETTER OHALFWIDTH HANGUL " + - "LETTER WAHALFWIDTH HANGUL LETTER WAEHALFWIDTH HANGUL LETTER OEHALFWIDTH " + - "HANGUL LETTER YOHALFWIDTH HANGUL LETTER UHALFWIDTH HANGUL LETTER WEOHALF" + - "WIDTH HANGUL LETTER WEHALFWIDTH HANGUL LETTER WIHALFWIDTH HANGUL LETTER " + - "YUHALFWIDTH HANGUL LETTER EUHALFWIDTH HANGUL LETTER YIHALFWIDTH HANGUL L" + - "ETTER IFULLWIDTH CENT SIGNFULLWIDTH POUND SIGNFULLWIDTH NOT SIGNFULLWIDT" + - "H MACRONFULLWIDTH BROKEN BARFULLWIDTH YEN SIGNFULLWIDTH WON SIGNHALFWIDT" + - "H FORMS LIGHT VERTICALHALFWIDTH LEFTWARDS ARROWHALFWIDTH UPWARDS ARROWHA" + - "LFWIDTH RIGHTWARDS ARROWHALFWIDTH DOWNWARDS ARROWHALFWIDTH BLACK SQUAREH" + - "ALFWIDTH WHITE CIRCLEINTERLINEAR ANNOTATION ANCHORINTERLINEAR ANNOTATION" + - " SEPARATORINTERLINEAR ANNOTATION TERMINATOROBJECT REPLACEMENT CHARACTERR" + - "EPLACEMENT CHARACTERLINEAR B SYLLABLE B008 ALINEAR B SYLLABLE B038 ELINE" + - "AR B SYLLABLE B028 ILINEAR B SYLLABLE B061 OLINEAR B SYLLABLE B010 ULINE" + - "AR B SYLLABLE B001 DALINEAR B SYLLABLE B045 DELINEAR B SYLLABLE B007 DIL" + - "INEAR B SYLLABLE B014 DOLINEAR B SYLLABLE B051 DULINEAR B SYLLABLE B057 " + - "JALINEAR B SYLLABLE B046 JELINEAR B SYLLABLE B036 JOLINEAR B SYLLABLE B0" + - "65 JULINEAR B SYLLABLE B077 KALINEAR B SYLLABLE B044 KELINEAR B SYLLABLE" + - " B067 KILINEAR B SYLLABLE B070 KOLINEAR B SYLLABLE B081 KULINEAR B SYLLA" + - "BLE B080 MALINEAR B SYLLABLE B013 MELINEAR B SYLLABLE B073 MILINEAR B SY" + - "LLABLE B015 MOLINEAR B SYLLABLE B023 MULINEAR B SYLLABLE B006 NALINEAR B" + - " SYLLABLE B024 NELINEAR B SYLLABLE B030 NILINEAR B SYLLABLE B052 NOLINEA" + - "R B SYLLABLE B055 NULINEAR B SYLLABLE B003 PALINEAR B SYLLABLE B072 PELI" + - "NEAR B SYLLABLE B039 PILINEAR B SYLLABLE B011 POLINEAR B SYLLABLE B050 P" + - "ULINEAR B SYLLABLE B016 QALINEAR B SYLLABLE B078 QELINEAR B SYLLABLE B02" + - "1 QILINEAR B SYLLABLE B032 QOLINEAR B SYLLABLE B060 RALINEAR B SYLLABLE " + - "B027 RELINEAR B SYLLABLE B053 RILINEAR B SYLLABLE B002 ROLINEAR B SYLLAB" + - "LE B026 RULINEAR B SYLLABLE B031 SALINEAR B SYLLABLE B009 SELINEAR B SYL" + - "LABLE B041 SILINEAR B SYLLABLE B012 SOLINEAR B SYLLABLE B058 SULINEAR B " + - "SYLLABLE B059 TALINEAR B SYLLABLE B004 TELINEAR B SYLLABLE B037 TILINEAR" + - " B SYLLABLE B005 TOLINEAR B SYLLABLE B069 TULINEAR B SYLLABLE B054 WALIN" + - "EAR B SYLLABLE B075 WELINEAR B SYLLABLE B040 WILINEAR B SYLLABLE B042 WO" + - "LINEAR B SYLLABLE B017 ZALINEAR B SYLLABLE B074 ZELINEAR B SYLLABLE B020") + ("" + - " ZOLINEAR B SYLLABLE B025 A2LINEAR B SYLLABLE B043 A3LINEAR B SYLLABLE B" + - "085 AULINEAR B SYLLABLE B071 DWELINEAR B SYLLABLE B090 DWOLINEAR B SYLLA" + - "BLE B048 NWALINEAR B SYLLABLE B029 PU2LINEAR B SYLLABLE B062 PTELINEAR B" + - " SYLLABLE B076 RA2LINEAR B SYLLABLE B033 RA3LINEAR B SYLLABLE B068 RO2LI" + - "NEAR B SYLLABLE B066 TA2LINEAR B SYLLABLE B087 TWELINEAR B SYLLABLE B091" + - " TWOLINEAR B SYMBOL B018LINEAR B SYMBOL B019LINEAR B SYMBOL B022LINEAR B" + - " SYMBOL B034LINEAR B SYMBOL B047LINEAR B SYMBOL B049LINEAR B SYMBOL B056" + - "LINEAR B SYMBOL B063LINEAR B SYMBOL B064LINEAR B SYMBOL B079LINEAR B SYM" + - "BOL B082LINEAR B SYMBOL B083LINEAR B SYMBOL B086LINEAR B SYMBOL B089LINE" + - "AR B IDEOGRAM B100 MANLINEAR B IDEOGRAM B102 WOMANLINEAR B IDEOGRAM B104" + - " DEERLINEAR B IDEOGRAM B105 EQUIDLINEAR B IDEOGRAM B105F MARELINEAR B ID" + - "EOGRAM B105M STALLIONLINEAR B IDEOGRAM B106F EWELINEAR B IDEOGRAM B106M " + - "RAMLINEAR B IDEOGRAM B107F SHE-GOATLINEAR B IDEOGRAM B107M HE-GOATLINEAR" + - " B IDEOGRAM B108F SOWLINEAR B IDEOGRAM B108M BOARLINEAR B IDEOGRAM B109F" + - " COWLINEAR B IDEOGRAM B109M BULLLINEAR B IDEOGRAM B120 WHEATLINEAR B IDE" + - "OGRAM B121 BARLEYLINEAR B IDEOGRAM B122 OLIVELINEAR B IDEOGRAM B123 SPIC" + - "ELINEAR B IDEOGRAM B125 CYPERUSLINEAR B MONOGRAM B127 KAPOLINEAR B MONOG" + - "RAM B128 KANAKOLINEAR B IDEOGRAM B130 OILLINEAR B IDEOGRAM B131 WINELINE" + - "AR B IDEOGRAM B132LINEAR B MONOGRAM B133 AREPALINEAR B MONOGRAM B135 MER" + - "ILINEAR B IDEOGRAM B140 BRONZELINEAR B IDEOGRAM B141 GOLDLINEAR B IDEOGR" + - "AM B142LINEAR B IDEOGRAM B145 WOOLLINEAR B IDEOGRAM B146LINEAR B IDEOGRA" + - "M B150LINEAR B IDEOGRAM B151 HORNLINEAR B IDEOGRAM B152LINEAR B IDEOGRAM" + - " B153LINEAR B IDEOGRAM B154LINEAR B MONOGRAM B156 TURO2LINEAR B IDEOGRAM" + - " B157LINEAR B IDEOGRAM B158LINEAR B IDEOGRAM B159 CLOTHLINEAR B IDEOGRAM" + - " B160LINEAR B IDEOGRAM B161LINEAR B IDEOGRAM B162 GARMENTLINEAR B IDEOGR" + - "AM B163 ARMOURLINEAR B IDEOGRAM B164LINEAR B IDEOGRAM B165LINEAR B IDEOG" + - "RAM B166LINEAR B IDEOGRAM B167LINEAR B IDEOGRAM B168LINEAR B IDEOGRAM B1" + - "69LINEAR B IDEOGRAM B170LINEAR B IDEOGRAM B171LINEAR B IDEOGRAM B172LINE" + - "AR B IDEOGRAM B173 MONTHLINEAR B IDEOGRAM B174LINEAR B IDEOGRAM B176 TRE" + - "ELINEAR B IDEOGRAM B177LINEAR B IDEOGRAM B178LINEAR B IDEOGRAM B179LINEA" + - "R B IDEOGRAM B180LINEAR B IDEOGRAM B181LINEAR B IDEOGRAM B182LINEAR B ID" + - "EOGRAM B183LINEAR B IDEOGRAM B184LINEAR B IDEOGRAM B185LINEAR B IDEOGRAM" + - " B189LINEAR B IDEOGRAM B190LINEAR B IDEOGRAM B191 HELMETLINEAR B IDEOGRA" + - "M B220 FOOTSTOOLLINEAR B IDEOGRAM B225 BATHTUBLINEAR B IDEOGRAM B230 SPE" + - "ARLINEAR B IDEOGRAM B231 ARROWLINEAR B IDEOGRAM B232LINEAR B IDEOGRAM B2" + - "33 SWORDLINEAR B IDEOGRAM B234LINEAR B IDEOGRAM B236LINEAR B IDEOGRAM B2" + - "40 WHEELED CHARIOTLINEAR B IDEOGRAM B241 CHARIOTLINEAR B IDEOGRAM B242 C" + - "HARIOT FRAMELINEAR B IDEOGRAM B243 WHEELLINEAR B IDEOGRAM B245LINEAR B I" + - "DEOGRAM B246LINEAR B MONOGRAM B247 DIPTELINEAR B IDEOGRAM B248LINEAR B I" + - "DEOGRAM B249LINEAR B IDEOGRAM B251LINEAR B IDEOGRAM B252LINEAR B IDEOGRA" + - "M B253LINEAR B IDEOGRAM B254 DARTLINEAR B IDEOGRAM B255LINEAR B IDEOGRAM" + - " B256LINEAR B IDEOGRAM B257LINEAR B IDEOGRAM B258LINEAR B IDEOGRAM B259L" + - "INEAR B IDEOGRAM VESSEL B155LINEAR B IDEOGRAM VESSEL B200LINEAR B IDEOGR" + - "AM VESSEL B201LINEAR B IDEOGRAM VESSEL B202LINEAR B IDEOGRAM VESSEL B203" + - "LINEAR B IDEOGRAM VESSEL B204LINEAR B IDEOGRAM VESSEL B205LINEAR B IDEOG" + - "RAM VESSEL B206LINEAR B IDEOGRAM VESSEL B207LINEAR B IDEOGRAM VESSEL B20" + - "8LINEAR B IDEOGRAM VESSEL B209LINEAR B IDEOGRAM VESSEL B210LINEAR B IDEO" + - "GRAM VESSEL B211LINEAR B IDEOGRAM VESSEL B212LINEAR B IDEOGRAM VESSEL B2" + - "13LINEAR B IDEOGRAM VESSEL B214LINEAR B IDEOGRAM VESSEL B215LINEAR B IDE" + - "OGRAM VESSEL B216LINEAR B IDEOGRAM VESSEL B217LINEAR B IDEOGRAM VESSEL B" + - "218LINEAR B IDEOGRAM VESSEL B219LINEAR B IDEOGRAM VESSEL B221LINEAR B ID" + - "EOGRAM VESSEL B222LINEAR B IDEOGRAM VESSEL B226LINEAR B IDEOGRAM VESSEL " + - "B227LINEAR B IDEOGRAM VESSEL B228LINEAR B IDEOGRAM VESSEL B229LINEAR B I" + - "DEOGRAM VESSEL B250LINEAR B IDEOGRAM VESSEL B305AEGEAN WORD SEPARATOR LI" + - "NEAEGEAN WORD SEPARATOR DOTAEGEAN CHECK MARKAEGEAN NUMBER ONEAEGEAN NUMB" + - "ER TWOAEGEAN NUMBER THREEAEGEAN NUMBER FOURAEGEAN NUMBER FIVEAEGEAN NUMB" + - "ER SIXAEGEAN NUMBER SEVENAEGEAN NUMBER EIGHTAEGEAN NUMBER NINEAEGEAN NUM" + - "BER TENAEGEAN NUMBER TWENTYAEGEAN NUMBER THIRTYAEGEAN NUMBER FORTYAEGEAN" + - " NUMBER FIFTYAEGEAN NUMBER SIXTYAEGEAN NUMBER SEVENTYAEGEAN NUMBER EIGHT" + - "YAEGEAN NUMBER NINETYAEGEAN NUMBER ONE HUNDREDAEGEAN NUMBER TWO HUNDREDA" + - "EGEAN NUMBER THREE HUNDREDAEGEAN NUMBER FOUR HUNDREDAEGEAN NUMBER FIVE H" + - "UNDREDAEGEAN NUMBER SIX HUNDREDAEGEAN NUMBER SEVEN HUNDREDAEGEAN NUMBER " + - "EIGHT HUNDREDAEGEAN NUMBER NINE HUNDREDAEGEAN NUMBER ONE THOUSANDAEGEAN " + - "NUMBER TWO THOUSANDAEGEAN NUMBER THREE THOUSANDAEGEAN NUMBER FOUR THOUSA") + ("" + - "NDAEGEAN NUMBER FIVE THOUSANDAEGEAN NUMBER SIX THOUSANDAEGEAN NUMBER SEV" + - "EN THOUSANDAEGEAN NUMBER EIGHT THOUSANDAEGEAN NUMBER NINE THOUSANDAEGEAN" + - " NUMBER TEN THOUSANDAEGEAN NUMBER TWENTY THOUSANDAEGEAN NUMBER THIRTY TH" + - "OUSANDAEGEAN NUMBER FORTY THOUSANDAEGEAN NUMBER FIFTY THOUSANDAEGEAN NUM" + - "BER SIXTY THOUSANDAEGEAN NUMBER SEVENTY THOUSANDAEGEAN NUMBER EIGHTY THO" + - "USANDAEGEAN NUMBER NINETY THOUSANDAEGEAN WEIGHT BASE UNITAEGEAN WEIGHT F" + - "IRST SUBUNITAEGEAN WEIGHT SECOND SUBUNITAEGEAN WEIGHT THIRD SUBUNITAEGEA" + - "N WEIGHT FOURTH SUBUNITAEGEAN DRY MEASURE FIRST SUBUNITAEGEAN LIQUID MEA" + - "SURE FIRST SUBUNITAEGEAN MEASURE SECOND SUBUNITAEGEAN MEASURE THIRD SUBU" + - "NITGREEK ACROPHONIC ATTIC ONE QUARTERGREEK ACROPHONIC ATTIC ONE HALFGREE" + - "K ACROPHONIC ATTIC ONE DRACHMAGREEK ACROPHONIC ATTIC FIVEGREEK ACROPHONI" + - "C ATTIC FIFTYGREEK ACROPHONIC ATTIC FIVE HUNDREDGREEK ACROPHONIC ATTIC F" + - "IVE THOUSANDGREEK ACROPHONIC ATTIC FIFTY THOUSANDGREEK ACROPHONIC ATTIC " + - "FIVE TALENTSGREEK ACROPHONIC ATTIC TEN TALENTSGREEK ACROPHONIC ATTIC FIF" + - "TY TALENTSGREEK ACROPHONIC ATTIC ONE HUNDRED TALENTSGREEK ACROPHONIC ATT" + - "IC FIVE HUNDRED TALENTSGREEK ACROPHONIC ATTIC ONE THOUSAND TALENTSGREEK " + - "ACROPHONIC ATTIC FIVE THOUSAND TALENTSGREEK ACROPHONIC ATTIC FIVE STATER" + - "SGREEK ACROPHONIC ATTIC TEN STATERSGREEK ACROPHONIC ATTIC FIFTY STATERSG" + - "REEK ACROPHONIC ATTIC ONE HUNDRED STATERSGREEK ACROPHONIC ATTIC FIVE HUN" + - "DRED STATERSGREEK ACROPHONIC ATTIC ONE THOUSAND STATERSGREEK ACROPHONIC " + - "ATTIC TEN THOUSAND STATERSGREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERSG" + - "REEK ACROPHONIC ATTIC TEN MNASGREEK ACROPHONIC HERAEUM ONE PLETHRONGREEK" + - " ACROPHONIC THESPIAN ONEGREEK ACROPHONIC HERMIONIAN ONEGREEK ACROPHONIC " + - "EPIDAUREAN TWOGREEK ACROPHONIC THESPIAN TWOGREEK ACROPHONIC CYRENAIC TWO" + - " DRACHMASGREEK ACROPHONIC EPIDAUREAN TWO DRACHMASGREEK ACROPHONIC TROEZE" + - "NIAN FIVEGREEK ACROPHONIC TROEZENIAN TENGREEK ACROPHONIC TROEZENIAN TEN " + - "ALTERNATE FORMGREEK ACROPHONIC HERMIONIAN TENGREEK ACROPHONIC MESSENIAN " + - "TENGREEK ACROPHONIC THESPIAN TENGREEK ACROPHONIC THESPIAN THIRTYGREEK AC" + - "ROPHONIC TROEZENIAN FIFTYGREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FOR" + - "MGREEK ACROPHONIC HERMIONIAN FIFTYGREEK ACROPHONIC THESPIAN FIFTYGREEK A" + - "CROPHONIC THESPIAN ONE HUNDREDGREEK ACROPHONIC THESPIAN THREE HUNDREDGRE" + - "EK ACROPHONIC EPIDAUREAN FIVE HUNDREDGREEK ACROPHONIC TROEZENIAN FIVE HU" + - "NDREDGREEK ACROPHONIC THESPIAN FIVE HUNDREDGREEK ACROPHONIC CARYSTIAN FI" + - "VE HUNDREDGREEK ACROPHONIC NAXIAN FIVE HUNDREDGREEK ACROPHONIC THESPIAN " + - "ONE THOUSANDGREEK ACROPHONIC THESPIAN FIVE THOUSANDGREEK ACROPHONIC DELP" + - "HIC FIVE MNASGREEK ACROPHONIC STRATIAN FIFTY MNASGREEK ONE HALF SIGNGREE" + - "K ONE HALF SIGN ALTERNATE FORMGREEK TWO THIRDS SIGNGREEK THREE QUARTERS " + - "SIGNGREEK YEAR SIGNGREEK TALENT SIGNGREEK DRACHMA SIGNGREEK OBOL SIGNGRE" + - "EK TWO OBOLS SIGNGREEK THREE OBOLS SIGNGREEK FOUR OBOLS SIGNGREEK FIVE O" + - "BOLS SIGNGREEK METRETES SIGNGREEK KYATHOS BASE SIGNGREEK LITRA SIGNGREEK" + - " OUNKIA SIGNGREEK XESTES SIGNGREEK ARTABE SIGNGREEK AROURA SIGNGREEK GRA" + - "MMA SIGNGREEK TRYBLION BASE SIGNGREEK ZERO SIGNGREEK ONE QUARTER SIGNGRE" + - "EK SINUSOID SIGNGREEK INDICTION SIGNNOMISMA SIGNROMAN SEXTANS SIGNROMAN " + - "UNCIA SIGNROMAN SEMUNCIA SIGNROMAN SEXTULA SIGNROMAN DIMIDIA SEXTULA SIG" + - "NROMAN SILIQUA SIGNROMAN DENARIUS SIGNROMAN QUINARIUS SIGNROMAN SESTERTI" + - "US SIGNROMAN DUPONDIUS SIGNROMAN AS SIGNROMAN CENTURIAL SIGNGREEK SYMBOL" + - " TAU RHOPHAISTOS DISC SIGN PEDESTRIANPHAISTOS DISC SIGN PLUMED HEADPHAIS" + - "TOS DISC SIGN TATTOOED HEADPHAISTOS DISC SIGN CAPTIVEPHAISTOS DISC SIGN " + - "CHILDPHAISTOS DISC SIGN WOMANPHAISTOS DISC SIGN HELMETPHAISTOS DISC SIGN" + - " GAUNTLETPHAISTOS DISC SIGN TIARAPHAISTOS DISC SIGN ARROWPHAISTOS DISC S" + - "IGN BOWPHAISTOS DISC SIGN SHIELDPHAISTOS DISC SIGN CLUBPHAISTOS DISC SIG" + - "N MANACLESPHAISTOS DISC SIGN MATTOCKPHAISTOS DISC SIGN SAWPHAISTOS DISC " + - "SIGN LIDPHAISTOS DISC SIGN BOOMERANGPHAISTOS DISC SIGN CARPENTRY PLANEPH" + - "AISTOS DISC SIGN DOLIUMPHAISTOS DISC SIGN COMBPHAISTOS DISC SIGN SLINGPH" + - "AISTOS DISC SIGN COLUMNPHAISTOS DISC SIGN BEEHIVEPHAISTOS DISC SIGN SHIP" + - "PHAISTOS DISC SIGN HORNPHAISTOS DISC SIGN HIDEPHAISTOS DISC SIGN BULLS L" + - "EGPHAISTOS DISC SIGN CATPHAISTOS DISC SIGN RAMPHAISTOS DISC SIGN EAGLEPH" + - "AISTOS DISC SIGN DOVEPHAISTOS DISC SIGN TUNNYPHAISTOS DISC SIGN BEEPHAIS" + - "TOS DISC SIGN PLANE TREEPHAISTOS DISC SIGN VINEPHAISTOS DISC SIGN PAPYRU" + - "SPHAISTOS DISC SIGN ROSETTEPHAISTOS DISC SIGN LILYPHAISTOS DISC SIGN OX " + - "BACKPHAISTOS DISC SIGN FLUTEPHAISTOS DISC SIGN GRATERPHAISTOS DISC SIGN " + - "STRAINERPHAISTOS DISC SIGN SMALL AXEPHAISTOS DISC SIGN WAVY BANDPHAISTOS" + - " DISC SIGN COMBINING OBLIQUE STROKELYCIAN LETTER ALYCIAN LETTER ELYCIAN " + - "LETTER BLYCIAN LETTER BHLYCIAN LETTER GLYCIAN LETTER DLYCIAN LETTER ILYC") + ("" + - "IAN LETTER WLYCIAN LETTER ZLYCIAN LETTER THLYCIAN LETTER JLYCIAN LETTER " + - "KLYCIAN LETTER QLYCIAN LETTER LLYCIAN LETTER MLYCIAN LETTER NLYCIAN LETT" + - "ER MMLYCIAN LETTER NNLYCIAN LETTER ULYCIAN LETTER PLYCIAN LETTER KKLYCIA" + - "N LETTER RLYCIAN LETTER SLYCIAN LETTER TLYCIAN LETTER TTLYCIAN LETTER AN" + - "LYCIAN LETTER ENLYCIAN LETTER HLYCIAN LETTER XCARIAN LETTER ACARIAN LETT" + - "ER P2CARIAN LETTER DCARIAN LETTER LCARIAN LETTER UUUCARIAN LETTER RCARIA" + - "N LETTER LDCARIAN LETTER A2CARIAN LETTER QCARIAN LETTER BCARIAN LETTER M" + - "CARIAN LETTER OCARIAN LETTER D2CARIAN LETTER TCARIAN LETTER SHCARIAN LET" + - "TER SH2CARIAN LETTER SCARIAN LETTER C-18CARIAN LETTER UCARIAN LETTER NNC" + - "ARIAN LETTER XCARIAN LETTER NCARIAN LETTER TT2CARIAN LETTER PCARIAN LETT" + - "ER SSCARIAN LETTER ICARIAN LETTER ECARIAN LETTER UUUUCARIAN LETTER KCARI" + - "AN LETTER K2CARIAN LETTER NDCARIAN LETTER UUCARIAN LETTER GCARIAN LETTER" + - " G2CARIAN LETTER STCARIAN LETTER ST2CARIAN LETTER NGCARIAN LETTER IICARI" + - "AN LETTER C-39CARIAN LETTER TTCARIAN LETTER UUU2CARIAN LETTER RRCARIAN L" + - "ETTER MBCARIAN LETTER MB2CARIAN LETTER MB3CARIAN LETTER MB4CARIAN LETTER" + - " LD2CARIAN LETTER E2CARIAN LETTER UUU3COPTIC EPACT THOUSANDS MARKCOPTIC " + - "EPACT DIGIT ONECOPTIC EPACT DIGIT TWOCOPTIC EPACT DIGIT THREECOPTIC EPAC" + - "T DIGIT FOURCOPTIC EPACT DIGIT FIVECOPTIC EPACT DIGIT SIXCOPTIC EPACT DI" + - "GIT SEVENCOPTIC EPACT DIGIT EIGHTCOPTIC EPACT DIGIT NINECOPTIC EPACT NUM" + - "BER TENCOPTIC EPACT NUMBER TWENTYCOPTIC EPACT NUMBER THIRTYCOPTIC EPACT " + - "NUMBER FORTYCOPTIC EPACT NUMBER FIFTYCOPTIC EPACT NUMBER SIXTYCOPTIC EPA" + - "CT NUMBER SEVENTYCOPTIC EPACT NUMBER EIGHTYCOPTIC EPACT NUMBER NINETYCOP" + - "TIC EPACT NUMBER ONE HUNDREDCOPTIC EPACT NUMBER TWO HUNDREDCOPTIC EPACT " + - "NUMBER THREE HUNDREDCOPTIC EPACT NUMBER FOUR HUNDREDCOPTIC EPACT NUMBER " + - "FIVE HUNDREDCOPTIC EPACT NUMBER SIX HUNDREDCOPTIC EPACT NUMBER SEVEN HUN" + - "DREDCOPTIC EPACT NUMBER EIGHT HUNDREDCOPTIC EPACT NUMBER NINE HUNDREDOLD" + - " ITALIC LETTER AOLD ITALIC LETTER BEOLD ITALIC LETTER KEOLD ITALIC LETTE" + - "R DEOLD ITALIC LETTER EOLD ITALIC LETTER VEOLD ITALIC LETTER ZEOLD ITALI" + - "C LETTER HEOLD ITALIC LETTER THEOLD ITALIC LETTER IOLD ITALIC LETTER KAO" + - "LD ITALIC LETTER ELOLD ITALIC LETTER EMOLD ITALIC LETTER ENOLD ITALIC LE" + - "TTER ESHOLD ITALIC LETTER OOLD ITALIC LETTER PEOLD ITALIC LETTER SHEOLD " + - "ITALIC LETTER KUOLD ITALIC LETTER EROLD ITALIC LETTER ESOLD ITALIC LETTE" + - "R TEOLD ITALIC LETTER UOLD ITALIC LETTER EKSOLD ITALIC LETTER PHEOLD ITA" + - "LIC LETTER KHEOLD ITALIC LETTER EFOLD ITALIC LETTER ERSOLD ITALIC LETTER" + - " CHEOLD ITALIC LETTER IIOLD ITALIC LETTER UUOLD ITALIC LETTER ESSOLD ITA" + - "LIC NUMERAL ONEOLD ITALIC NUMERAL FIVEOLD ITALIC NUMERAL TENOLD ITALIC N" + - "UMERAL FIFTYGOTHIC LETTER AHSAGOTHIC LETTER BAIRKANGOTHIC LETTER GIBAGOT" + - "HIC LETTER DAGSGOTHIC LETTER AIHVUSGOTHIC LETTER QAIRTHRAGOTHIC LETTER I" + - "UJAGOTHIC LETTER HAGLGOTHIC LETTER THIUTHGOTHIC LETTER EISGOTHIC LETTER " + - "KUSMAGOTHIC LETTER LAGUSGOTHIC LETTER MANNAGOTHIC LETTER NAUTHSGOTHIC LE" + - "TTER JERGOTHIC LETTER URUSGOTHIC LETTER PAIRTHRAGOTHIC LETTER NINETYGOTH" + - "IC LETTER RAIDAGOTHIC LETTER SAUILGOTHIC LETTER TEIWSGOTHIC LETTER WINJA" + - "GOTHIC LETTER FAIHUGOTHIC LETTER IGGWSGOTHIC LETTER HWAIRGOTHIC LETTER O" + - "THALGOTHIC LETTER NINE HUNDREDOLD PERMIC LETTER ANOLD PERMIC LETTER BURO" + - "LD PERMIC LETTER GAIOLD PERMIC LETTER DOIOLD PERMIC LETTER EOLD PERMIC L" + - "ETTER ZHOIOLD PERMIC LETTER DZHOIOLD PERMIC LETTER ZATAOLD PERMIC LETTER" + - " DZITAOLD PERMIC LETTER IOLD PERMIC LETTER KOKEOLD PERMIC LETTER LEIOLD " + - "PERMIC LETTER MENOEOLD PERMIC LETTER NENOEOLD PERMIC LETTER VOOIOLD PERM" + - "IC LETTER PEEIOLD PERMIC LETTER REIOLD PERMIC LETTER SIIOLD PERMIC LETTE" + - "R TAIOLD PERMIC LETTER UOLD PERMIC LETTER CHERYOLD PERMIC LETTER SHOOIOL" + - "D PERMIC LETTER SHCHOOIOLD PERMIC LETTER YRYOLD PERMIC LETTER YERUOLD PE" + - "RMIC LETTER OOLD PERMIC LETTER OOOLD PERMIC LETTER EFOLD PERMIC LETTER H" + - "AOLD PERMIC LETTER TSIUOLD PERMIC LETTER VEROLD PERMIC LETTER YEROLD PER" + - "MIC LETTER YERIOLD PERMIC LETTER YATOLD PERMIC LETTER IEOLD PERMIC LETTE" + - "R YUOLD PERMIC LETTER YAOLD PERMIC LETTER IACOMBINING OLD PERMIC LETTER " + - "ANCOMBINING OLD PERMIC LETTER DOICOMBINING OLD PERMIC LETTER ZATACOMBINI" + - "NG OLD PERMIC LETTER NENOECOMBINING OLD PERMIC LETTER SIIUGARITIC LETTER" + - " ALPAUGARITIC LETTER BETAUGARITIC LETTER GAMLAUGARITIC LETTER KHAUGARITI" + - "C LETTER DELTAUGARITIC LETTER HOUGARITIC LETTER WOUGARITIC LETTER ZETAUG" + - "ARITIC LETTER HOTAUGARITIC LETTER TETUGARITIC LETTER YODUGARITIC LETTER " + - "KAFUGARITIC LETTER SHINUGARITIC LETTER LAMDAUGARITIC LETTER MEMUGARITIC " + - "LETTER DHALUGARITIC LETTER NUNUGARITIC LETTER ZUUGARITIC LETTER SAMKAUGA" + - "RITIC LETTER AINUGARITIC LETTER PUUGARITIC LETTER SADEUGARITIC LETTER QO" + - "PAUGARITIC LETTER RASHAUGARITIC LETTER THANNAUGARITIC LETTER GHAINUGARIT") + ("" + - "IC LETTER TOUGARITIC LETTER IUGARITIC LETTER UUGARITIC LETTER SSUUGARITI" + - "C WORD DIVIDEROLD PERSIAN SIGN AOLD PERSIAN SIGN IOLD PERSIAN SIGN UOLD " + - "PERSIAN SIGN KAOLD PERSIAN SIGN KUOLD PERSIAN SIGN GAOLD PERSIAN SIGN GU" + - "OLD PERSIAN SIGN XAOLD PERSIAN SIGN CAOLD PERSIAN SIGN JAOLD PERSIAN SIG" + - "N JIOLD PERSIAN SIGN TAOLD PERSIAN SIGN TUOLD PERSIAN SIGN DAOLD PERSIAN" + - " SIGN DIOLD PERSIAN SIGN DUOLD PERSIAN SIGN THAOLD PERSIAN SIGN PAOLD PE" + - "RSIAN SIGN BAOLD PERSIAN SIGN FAOLD PERSIAN SIGN NAOLD PERSIAN SIGN NUOL" + - "D PERSIAN SIGN MAOLD PERSIAN SIGN MIOLD PERSIAN SIGN MUOLD PERSIAN SIGN " + - "YAOLD PERSIAN SIGN VAOLD PERSIAN SIGN VIOLD PERSIAN SIGN RAOLD PERSIAN S" + - "IGN RUOLD PERSIAN SIGN LAOLD PERSIAN SIGN SAOLD PERSIAN SIGN ZAOLD PERSI" + - "AN SIGN SHAOLD PERSIAN SIGN SSAOLD PERSIAN SIGN HAOLD PERSIAN SIGN AURAM" + - "AZDAAOLD PERSIAN SIGN AURAMAZDAA-2OLD PERSIAN SIGN AURAMAZDAAHAOLD PERSI" + - "AN SIGN XSHAAYATHIYAOLD PERSIAN SIGN DAHYAAUSHOLD PERSIAN SIGN DAHYAAUSH" + - "-2OLD PERSIAN SIGN BAGAOLD PERSIAN SIGN BUUMISHOLD PERSIAN WORD DIVIDERO" + - "LD PERSIAN NUMBER ONEOLD PERSIAN NUMBER TWOOLD PERSIAN NUMBER TENOLD PER" + - "SIAN NUMBER TWENTYOLD PERSIAN NUMBER HUNDREDDESERET CAPITAL LETTER LONG " + - "IDESERET CAPITAL LETTER LONG EDESERET CAPITAL LETTER LONG ADESERET CAPIT" + - "AL LETTER LONG AHDESERET CAPITAL LETTER LONG ODESERET CAPITAL LETTER LON" + - "G OODESERET CAPITAL LETTER SHORT IDESERET CAPITAL LETTER SHORT EDESERET " + - "CAPITAL LETTER SHORT ADESERET CAPITAL LETTER SHORT AHDESERET CAPITAL LET" + - "TER SHORT ODESERET CAPITAL LETTER SHORT OODESERET CAPITAL LETTER AYDESER" + - "ET CAPITAL LETTER OWDESERET CAPITAL LETTER WUDESERET CAPITAL LETTER YEED" + - "ESERET CAPITAL LETTER HDESERET CAPITAL LETTER PEEDESERET CAPITAL LETTER " + - "BEEDESERET CAPITAL LETTER TEEDESERET CAPITAL LETTER DEEDESERET CAPITAL L" + - "ETTER CHEEDESERET CAPITAL LETTER JEEDESERET CAPITAL LETTER KAYDESERET CA" + - "PITAL LETTER GAYDESERET CAPITAL LETTER EFDESERET CAPITAL LETTER VEEDESER" + - "ET CAPITAL LETTER ETHDESERET CAPITAL LETTER THEEDESERET CAPITAL LETTER E" + - "SDESERET CAPITAL LETTER ZEEDESERET CAPITAL LETTER ESHDESERET CAPITAL LET" + - "TER ZHEEDESERET CAPITAL LETTER ERDESERET CAPITAL LETTER ELDESERET CAPITA" + - "L LETTER EMDESERET CAPITAL LETTER ENDESERET CAPITAL LETTER ENGDESERET CA" + - "PITAL LETTER OIDESERET CAPITAL LETTER EWDESERET SMALL LETTER LONG IDESER" + - "ET SMALL LETTER LONG EDESERET SMALL LETTER LONG ADESERET SMALL LETTER LO" + - "NG AHDESERET SMALL LETTER LONG ODESERET SMALL LETTER LONG OODESERET SMAL" + - "L LETTER SHORT IDESERET SMALL LETTER SHORT EDESERET SMALL LETTER SHORT A" + - "DESERET SMALL LETTER SHORT AHDESERET SMALL LETTER SHORT ODESERET SMALL L" + - "ETTER SHORT OODESERET SMALL LETTER AYDESERET SMALL LETTER OWDESERET SMAL" + - "L LETTER WUDESERET SMALL LETTER YEEDESERET SMALL LETTER HDESERET SMALL L" + - "ETTER PEEDESERET SMALL LETTER BEEDESERET SMALL LETTER TEEDESERET SMALL L" + - "ETTER DEEDESERET SMALL LETTER CHEEDESERET SMALL LETTER JEEDESERET SMALL " + - "LETTER KAYDESERET SMALL LETTER GAYDESERET SMALL LETTER EFDESERET SMALL L" + - "ETTER VEEDESERET SMALL LETTER ETHDESERET SMALL LETTER THEEDESERET SMALL " + - "LETTER ESDESERET SMALL LETTER ZEEDESERET SMALL LETTER ESHDESERET SMALL L" + - "ETTER ZHEEDESERET SMALL LETTER ERDESERET SMALL LETTER ELDESERET SMALL LE" + - "TTER EMDESERET SMALL LETTER ENDESERET SMALL LETTER ENGDESERET SMALL LETT" + - "ER OIDESERET SMALL LETTER EWSHAVIAN LETTER PEEPSHAVIAN LETTER TOTSHAVIAN" + - " LETTER KICKSHAVIAN LETTER FEESHAVIAN LETTER THIGHSHAVIAN LETTER SOSHAVI" + - "AN LETTER SURESHAVIAN LETTER CHURCHSHAVIAN LETTER YEASHAVIAN LETTER HUNG" + - "SHAVIAN LETTER BIBSHAVIAN LETTER DEADSHAVIAN LETTER GAGSHAVIAN LETTER VO" + - "WSHAVIAN LETTER THEYSHAVIAN LETTER ZOOSHAVIAN LETTER MEASURESHAVIAN LETT" + - "ER JUDGESHAVIAN LETTER WOESHAVIAN LETTER HA-HASHAVIAN LETTER LOLLSHAVIAN" + - " LETTER MIMESHAVIAN LETTER IFSHAVIAN LETTER EGGSHAVIAN LETTER ASHSHAVIAN" + - " LETTER ADOSHAVIAN LETTER ONSHAVIAN LETTER WOOLSHAVIAN LETTER OUTSHAVIAN" + - " LETTER AHSHAVIAN LETTER ROARSHAVIAN LETTER NUNSHAVIAN LETTER EATSHAVIAN" + - " LETTER AGESHAVIAN LETTER ICESHAVIAN LETTER UPSHAVIAN LETTER OAKSHAVIAN " + - "LETTER OOZESHAVIAN LETTER OILSHAVIAN LETTER AWESHAVIAN LETTER ARESHAVIAN" + - " LETTER ORSHAVIAN LETTER AIRSHAVIAN LETTER ERRSHAVIAN LETTER ARRAYSHAVIA" + - "N LETTER EARSHAVIAN LETTER IANSHAVIAN LETTER YEWOSMANYA LETTER ALEFOSMAN" + - "YA LETTER BAOSMANYA LETTER TAOSMANYA LETTER JAOSMANYA LETTER XAOSMANYA L" + - "ETTER KHAOSMANYA LETTER DEELOSMANYA LETTER RAOSMANYA LETTER SAOSMANYA LE" + - "TTER SHIINOSMANYA LETTER DHAOSMANYA LETTER CAYNOSMANYA LETTER GAOSMANYA " + - "LETTER FAOSMANYA LETTER QAAFOSMANYA LETTER KAAFOSMANYA LETTER LAANOSMANY" + - "A LETTER MIINOSMANYA LETTER NUUNOSMANYA LETTER WAWOSMANYA LETTER HAOSMAN" + - "YA LETTER YAOSMANYA LETTER AOSMANYA LETTER EOSMANYA LETTER IOSMANYA LETT" + - "ER OOSMANYA LETTER UOSMANYA LETTER AAOSMANYA LETTER EEOSMANYA LETTER OOO") + ("" + - "SMANYA DIGIT ZEROOSMANYA DIGIT ONEOSMANYA DIGIT TWOOSMANYA DIGIT THREEOS" + - "MANYA DIGIT FOUROSMANYA DIGIT FIVEOSMANYA DIGIT SIXOSMANYA DIGIT SEVENOS" + - "MANYA DIGIT EIGHTOSMANYA DIGIT NINEOSAGE CAPITAL LETTER AOSAGE CAPITAL L" + - "ETTER AIOSAGE CAPITAL LETTER AINOSAGE CAPITAL LETTER AHOSAGE CAPITAL LET" + - "TER BRAOSAGE CAPITAL LETTER CHAOSAGE CAPITAL LETTER EHCHAOSAGE CAPITAL L" + - "ETTER EOSAGE CAPITAL LETTER EINOSAGE CAPITAL LETTER HAOSAGE CAPITAL LETT" + - "ER HYAOSAGE CAPITAL LETTER IOSAGE CAPITAL LETTER KAOSAGE CAPITAL LETTER " + - "EHKAOSAGE CAPITAL LETTER KYAOSAGE CAPITAL LETTER LAOSAGE CAPITAL LETTER " + - "MAOSAGE CAPITAL LETTER NAOSAGE CAPITAL LETTER OOSAGE CAPITAL LETTER OINO" + - "SAGE CAPITAL LETTER PAOSAGE CAPITAL LETTER EHPAOSAGE CAPITAL LETTER SAOS" + - "AGE CAPITAL LETTER SHAOSAGE CAPITAL LETTER TAOSAGE CAPITAL LETTER EHTAOS" + - "AGE CAPITAL LETTER TSAOSAGE CAPITAL LETTER EHTSAOSAGE CAPITAL LETTER TSH" + - "AOSAGE CAPITAL LETTER DHAOSAGE CAPITAL LETTER UOSAGE CAPITAL LETTER WAOS" + - "AGE CAPITAL LETTER KHAOSAGE CAPITAL LETTER GHAOSAGE CAPITAL LETTER ZAOSA" + - "GE CAPITAL LETTER ZHAOSAGE SMALL LETTER AOSAGE SMALL LETTER AIOSAGE SMAL" + - "L LETTER AINOSAGE SMALL LETTER AHOSAGE SMALL LETTER BRAOSAGE SMALL LETTE" + - "R CHAOSAGE SMALL LETTER EHCHAOSAGE SMALL LETTER EOSAGE SMALL LETTER EINO" + - "SAGE SMALL LETTER HAOSAGE SMALL LETTER HYAOSAGE SMALL LETTER IOSAGE SMAL" + - "L LETTER KAOSAGE SMALL LETTER EHKAOSAGE SMALL LETTER KYAOSAGE SMALL LETT" + - "ER LAOSAGE SMALL LETTER MAOSAGE SMALL LETTER NAOSAGE SMALL LETTER OOSAGE" + - " SMALL LETTER OINOSAGE SMALL LETTER PAOSAGE SMALL LETTER EHPAOSAGE SMALL" + - " LETTER SAOSAGE SMALL LETTER SHAOSAGE SMALL LETTER TAOSAGE SMALL LETTER " + - "EHTAOSAGE SMALL LETTER TSAOSAGE SMALL LETTER EHTSAOSAGE SMALL LETTER TSH" + - "AOSAGE SMALL LETTER DHAOSAGE SMALL LETTER UOSAGE SMALL LETTER WAOSAGE SM" + - "ALL LETTER KHAOSAGE SMALL LETTER GHAOSAGE SMALL LETTER ZAOSAGE SMALL LET" + - "TER ZHAELBASAN LETTER AELBASAN LETTER BEELBASAN LETTER CEELBASAN LETTER " + - "CHEELBASAN LETTER DEELBASAN LETTER NDEELBASAN LETTER DHEELBASAN LETTER E" + - "IELBASAN LETTER EELBASAN LETTER FEELBASAN LETTER GEELBASAN LETTER GJEELB" + - "ASAN LETTER HEELBASAN LETTER IELBASAN LETTER JEELBASAN LETTER KEELBASAN " + - "LETTER LEELBASAN LETTER LLEELBASAN LETTER MEELBASAN LETTER NEELBASAN LET" + - "TER NAELBASAN LETTER NJEELBASAN LETTER OELBASAN LETTER PEELBASAN LETTER " + - "QEELBASAN LETTER REELBASAN LETTER RREELBASAN LETTER SEELBASAN LETTER SHE" + - "ELBASAN LETTER TEELBASAN LETTER THEELBASAN LETTER UELBASAN LETTER VEELBA" + - "SAN LETTER XEELBASAN LETTER YELBASAN LETTER ZEELBASAN LETTER ZHEELBASAN " + - "LETTER GHEELBASAN LETTER GHAMMAELBASAN LETTER KHECAUCASIAN ALBANIAN LETT" + - "ER ALTCAUCASIAN ALBANIAN LETTER BETCAUCASIAN ALBANIAN LETTER GIMCAUCASIA" + - "N ALBANIAN LETTER DATCAUCASIAN ALBANIAN LETTER EBCAUCASIAN ALBANIAN LETT" + - "ER ZARLCAUCASIAN ALBANIAN LETTER EYNCAUCASIAN ALBANIAN LETTER ZHILCAUCAS" + - "IAN ALBANIAN LETTER TASCAUCASIAN ALBANIAN LETTER CHACAUCASIAN ALBANIAN L" + - "ETTER YOWDCAUCASIAN ALBANIAN LETTER ZHACAUCASIAN ALBANIAN LETTER IRBCAUC" + - "ASIAN ALBANIAN LETTER SHACAUCASIAN ALBANIAN LETTER LANCAUCASIAN ALBANIAN" + - " LETTER INYACAUCASIAN ALBANIAN LETTER XEYNCAUCASIAN ALBANIAN LETTER DYAN" + - "CAUCASIAN ALBANIAN LETTER CARCAUCASIAN ALBANIAN LETTER JHOXCAUCASIAN ALB" + - "ANIAN LETTER KARCAUCASIAN ALBANIAN LETTER LYITCAUCASIAN ALBANIAN LETTER " + - "HEYTCAUCASIAN ALBANIAN LETTER QAYCAUCASIAN ALBANIAN LETTER AORCAUCASIAN " + - "ALBANIAN LETTER CHOYCAUCASIAN ALBANIAN LETTER CHICAUCASIAN ALBANIAN LETT" + - "ER CYAYCAUCASIAN ALBANIAN LETTER MAQCAUCASIAN ALBANIAN LETTER QARCAUCASI" + - "AN ALBANIAN LETTER NOWCCAUCASIAN ALBANIAN LETTER DZYAYCAUCASIAN ALBANIAN" + - " LETTER SHAKCAUCASIAN ALBANIAN LETTER JAYNCAUCASIAN ALBANIAN LETTER ONCA" + - "UCASIAN ALBANIAN LETTER TYAYCAUCASIAN ALBANIAN LETTER FAMCAUCASIAN ALBAN" + - "IAN LETTER DZAYCAUCASIAN ALBANIAN LETTER CHATCAUCASIAN ALBANIAN LETTER P" + - "ENCAUCASIAN ALBANIAN LETTER GHEYSCAUCASIAN ALBANIAN LETTER RATCAUCASIAN " + - "ALBANIAN LETTER SEYKCAUCASIAN ALBANIAN LETTER VEYZCAUCASIAN ALBANIAN LET" + - "TER TIWRCAUCASIAN ALBANIAN LETTER SHOYCAUCASIAN ALBANIAN LETTER IWNCAUCA" + - "SIAN ALBANIAN LETTER CYAWCAUCASIAN ALBANIAN LETTER CAYNCAUCASIAN ALBANIA" + - "N LETTER YAYDCAUCASIAN ALBANIAN LETTER PIWRCAUCASIAN ALBANIAN LETTER KIW" + - "CAUCASIAN ALBANIAN CITATION MARKLINEAR A SIGN AB001LINEAR A SIGN AB002LI" + - "NEAR A SIGN AB003LINEAR A SIGN AB004LINEAR A SIGN AB005LINEAR A SIGN AB0" + - "06LINEAR A SIGN AB007LINEAR A SIGN AB008LINEAR A SIGN AB009LINEAR A SIGN" + - " AB010LINEAR A SIGN AB011LINEAR A SIGN AB013LINEAR A SIGN AB016LINEAR A " + - "SIGN AB017LINEAR A SIGN AB020LINEAR A SIGN AB021LINEAR A SIGN AB021FLINE" + - "AR A SIGN AB021MLINEAR A SIGN AB022LINEAR A SIGN AB022FLINEAR A SIGN AB0" + - "22MLINEAR A SIGN AB023LINEAR A SIGN AB023MLINEAR A SIGN AB024LINEAR A SI" + - "GN AB026LINEAR A SIGN AB027LINEAR A SIGN AB028LINEAR A SIGN A028BLINEAR ") + ("" + - "A SIGN AB029LINEAR A SIGN AB030LINEAR A SIGN AB031LINEAR A SIGN AB034LIN" + - "EAR A SIGN AB037LINEAR A SIGN AB038LINEAR A SIGN AB039LINEAR A SIGN AB04" + - "0LINEAR A SIGN AB041LINEAR A SIGN AB044LINEAR A SIGN AB045LINEAR A SIGN " + - "AB046LINEAR A SIGN AB047LINEAR A SIGN AB048LINEAR A SIGN AB049LINEAR A S" + - "IGN AB050LINEAR A SIGN AB051LINEAR A SIGN AB053LINEAR A SIGN AB054LINEAR" + - " A SIGN AB055LINEAR A SIGN AB056LINEAR A SIGN AB057LINEAR A SIGN AB058LI" + - "NEAR A SIGN AB059LINEAR A SIGN AB060LINEAR A SIGN AB061LINEAR A SIGN AB0" + - "65LINEAR A SIGN AB066LINEAR A SIGN AB067LINEAR A SIGN AB069LINEAR A SIGN" + - " AB070LINEAR A SIGN AB073LINEAR A SIGN AB074LINEAR A SIGN AB076LINEAR A " + - "SIGN AB077LINEAR A SIGN AB078LINEAR A SIGN AB079LINEAR A SIGN AB080LINEA" + - "R A SIGN AB081LINEAR A SIGN AB082LINEAR A SIGN AB085LINEAR A SIGN AB086L" + - "INEAR A SIGN AB087LINEAR A SIGN A100-102LINEAR A SIGN AB118LINEAR A SIGN" + - " AB120LINEAR A SIGN A120BLINEAR A SIGN AB122LINEAR A SIGN AB123LINEAR A " + - "SIGN AB131ALINEAR A SIGN AB131BLINEAR A SIGN A131CLINEAR A SIGN AB164LIN" + - "EAR A SIGN AB171LINEAR A SIGN AB180LINEAR A SIGN AB188LINEAR A SIGN AB19" + - "1LINEAR A SIGN A301LINEAR A SIGN A302LINEAR A SIGN A303LINEAR A SIGN A30" + - "4LINEAR A SIGN A305LINEAR A SIGN A306LINEAR A SIGN A307LINEAR A SIGN A30" + - "8LINEAR A SIGN A309ALINEAR A SIGN A309BLINEAR A SIGN A309CLINEAR A SIGN " + - "A310LINEAR A SIGN A311LINEAR A SIGN A312LINEAR A SIGN A313ALINEAR A SIGN" + - " A313BLINEAR A SIGN A313CLINEAR A SIGN A314LINEAR A SIGN A315LINEAR A SI" + - "GN A316LINEAR A SIGN A317LINEAR A SIGN A318LINEAR A SIGN A319LINEAR A SI" + - "GN A320LINEAR A SIGN A321LINEAR A SIGN A322LINEAR A SIGN A323LINEAR A SI" + - "GN A324LINEAR A SIGN A325LINEAR A SIGN A326LINEAR A SIGN A327LINEAR A SI" + - "GN A328LINEAR A SIGN A329LINEAR A SIGN A330LINEAR A SIGN A331LINEAR A SI" + - "GN A332LINEAR A SIGN A333LINEAR A SIGN A334LINEAR A SIGN A335LINEAR A SI" + - "GN A336LINEAR A SIGN A337LINEAR A SIGN A338LINEAR A SIGN A339LINEAR A SI" + - "GN A340LINEAR A SIGN A341LINEAR A SIGN A342LINEAR A SIGN A343LINEAR A SI" + - "GN A344LINEAR A SIGN A345LINEAR A SIGN A346LINEAR A SIGN A347LINEAR A SI" + - "GN A348LINEAR A SIGN A349LINEAR A SIGN A350LINEAR A SIGN A351LINEAR A SI" + - "GN A352LINEAR A SIGN A353LINEAR A SIGN A354LINEAR A SIGN A355LINEAR A SI" + - "GN A356LINEAR A SIGN A357LINEAR A SIGN A358LINEAR A SIGN A359LINEAR A SI" + - "GN A360LINEAR A SIGN A361LINEAR A SIGN A362LINEAR A SIGN A363LINEAR A SI" + - "GN A364LINEAR A SIGN A365LINEAR A SIGN A366LINEAR A SIGN A367LINEAR A SI" + - "GN A368LINEAR A SIGN A369LINEAR A SIGN A370LINEAR A SIGN A371LINEAR A SI" + - "GN A400-VASLINEAR A SIGN A401-VASLINEAR A SIGN A402-VASLINEAR A SIGN A40" + - "3-VASLINEAR A SIGN A404-VASLINEAR A SIGN A405-VASLINEAR A SIGN A406-VASL" + - "INEAR A SIGN A407-VASLINEAR A SIGN A408-VASLINEAR A SIGN A409-VASLINEAR " + - "A SIGN A410-VASLINEAR A SIGN A411-VASLINEAR A SIGN A412-VASLINEAR A SIGN" + - " A413-VASLINEAR A SIGN A414-VASLINEAR A SIGN A415-VASLINEAR A SIGN A416-" + - "VASLINEAR A SIGN A417-VASLINEAR A SIGN A418-VASLINEAR A SIGN A501LINEAR " + - "A SIGN A502LINEAR A SIGN A503LINEAR A SIGN A504LINEAR A SIGN A505LINEAR " + - "A SIGN A506LINEAR A SIGN A508LINEAR A SIGN A509LINEAR A SIGN A510LINEAR " + - "A SIGN A511LINEAR A SIGN A512LINEAR A SIGN A513LINEAR A SIGN A515LINEAR " + - "A SIGN A516LINEAR A SIGN A520LINEAR A SIGN A521LINEAR A SIGN A523LINEAR " + - "A SIGN A524LINEAR A SIGN A525LINEAR A SIGN A526LINEAR A SIGN A527LINEAR " + - "A SIGN A528LINEAR A SIGN A529LINEAR A SIGN A530LINEAR A SIGN A531LINEAR " + - "A SIGN A532LINEAR A SIGN A534LINEAR A SIGN A535LINEAR A SIGN A536LINEAR " + - "A SIGN A537LINEAR A SIGN A538LINEAR A SIGN A539LINEAR A SIGN A540LINEAR " + - "A SIGN A541LINEAR A SIGN A542LINEAR A SIGN A545LINEAR A SIGN A547LINEAR " + - "A SIGN A548LINEAR A SIGN A549LINEAR A SIGN A550LINEAR A SIGN A551LINEAR " + - "A SIGN A552LINEAR A SIGN A553LINEAR A SIGN A554LINEAR A SIGN A555LINEAR " + - "A SIGN A556LINEAR A SIGN A557LINEAR A SIGN A559LINEAR A SIGN A563LINEAR " + - "A SIGN A564LINEAR A SIGN A565LINEAR A SIGN A566LINEAR A SIGN A568LINEAR " + - "A SIGN A569LINEAR A SIGN A570LINEAR A SIGN A571LINEAR A SIGN A572LINEAR " + - "A SIGN A573LINEAR A SIGN A574LINEAR A SIGN A575LINEAR A SIGN A576LINEAR " + - "A SIGN A577LINEAR A SIGN A578LINEAR A SIGN A579LINEAR A SIGN A580LINEAR " + - "A SIGN A581LINEAR A SIGN A582LINEAR A SIGN A583LINEAR A SIGN A584LINEAR " + - "A SIGN A585LINEAR A SIGN A586LINEAR A SIGN A587LINEAR A SIGN A588LINEAR " + - "A SIGN A589LINEAR A SIGN A591LINEAR A SIGN A592LINEAR A SIGN A594LINEAR " + - "A SIGN A595LINEAR A SIGN A596LINEAR A SIGN A598LINEAR A SIGN A600LINEAR " + - "A SIGN A601LINEAR A SIGN A602LINEAR A SIGN A603LINEAR A SIGN A604LINEAR " + - "A SIGN A606LINEAR A SIGN A608LINEAR A SIGN A609LINEAR A SIGN A610LINEAR " + - "A SIGN A611LINEAR A SIGN A612LINEAR A SIGN A613LINEAR A SIGN A614LINEAR " + - "A SIGN A615LINEAR A SIGN A616LINEAR A SIGN A617LINEAR A SIGN A618LINEAR ") + ("" + - "A SIGN A619LINEAR A SIGN A620LINEAR A SIGN A621LINEAR A SIGN A622LINEAR " + - "A SIGN A623LINEAR A SIGN A624LINEAR A SIGN A626LINEAR A SIGN A627LINEAR " + - "A SIGN A628LINEAR A SIGN A629LINEAR A SIGN A634LINEAR A SIGN A637LINEAR " + - "A SIGN A638LINEAR A SIGN A640LINEAR A SIGN A642LINEAR A SIGN A643LINEAR " + - "A SIGN A644LINEAR A SIGN A645LINEAR A SIGN A646LINEAR A SIGN A648LINEAR " + - "A SIGN A649LINEAR A SIGN A651LINEAR A SIGN A652LINEAR A SIGN A653LINEAR " + - "A SIGN A654LINEAR A SIGN A655LINEAR A SIGN A656LINEAR A SIGN A657LINEAR " + - "A SIGN A658LINEAR A SIGN A659LINEAR A SIGN A660LINEAR A SIGN A661LINEAR " + - "A SIGN A662LINEAR A SIGN A663LINEAR A SIGN A664LINEAR A SIGN A701 ALINEA" + - "R A SIGN A702 BLINEAR A SIGN A703 DLINEAR A SIGN A704 ELINEAR A SIGN A70" + - "5 FLINEAR A SIGN A706 HLINEAR A SIGN A707 JLINEAR A SIGN A708 KLINEAR A " + - "SIGN A709 LLINEAR A SIGN A709-2 L2LINEAR A SIGN A709-3 L3LINEAR A SIGN A" + - "709-4 L4LINEAR A SIGN A709-6 L6LINEAR A SIGN A710 WLINEAR A SIGN A711 XL" + - "INEAR A SIGN A712 YLINEAR A SIGN A713 OMEGALINEAR A SIGN A714 ABBLINEAR " + - "A SIGN A715 BBLINEAR A SIGN A717 DDLINEAR A SIGN A726 EYYYLINEAR A SIGN " + - "A732 JELINEAR A SIGN A800LINEAR A SIGN A801LINEAR A SIGN A802LINEAR A SI" + - "GN A803LINEAR A SIGN A804LINEAR A SIGN A805LINEAR A SIGN A806LINEAR A SI" + - "GN A807CYPRIOT SYLLABLE ACYPRIOT SYLLABLE ECYPRIOT SYLLABLE ICYPRIOT SYL" + - "LABLE OCYPRIOT SYLLABLE UCYPRIOT SYLLABLE JACYPRIOT SYLLABLE JOCYPRIOT S" + - "YLLABLE KACYPRIOT SYLLABLE KECYPRIOT SYLLABLE KICYPRIOT SYLLABLE KOCYPRI" + - "OT SYLLABLE KUCYPRIOT SYLLABLE LACYPRIOT SYLLABLE LECYPRIOT SYLLABLE LIC" + - "YPRIOT SYLLABLE LOCYPRIOT SYLLABLE LUCYPRIOT SYLLABLE MACYPRIOT SYLLABLE" + - " MECYPRIOT SYLLABLE MICYPRIOT SYLLABLE MOCYPRIOT SYLLABLE MUCYPRIOT SYLL" + - "ABLE NACYPRIOT SYLLABLE NECYPRIOT SYLLABLE NICYPRIOT SYLLABLE NOCYPRIOT " + - "SYLLABLE NUCYPRIOT SYLLABLE PACYPRIOT SYLLABLE PECYPRIOT SYLLABLE PICYPR" + - "IOT SYLLABLE POCYPRIOT SYLLABLE PUCYPRIOT SYLLABLE RACYPRIOT SYLLABLE RE" + - "CYPRIOT SYLLABLE RICYPRIOT SYLLABLE ROCYPRIOT SYLLABLE RUCYPRIOT SYLLABL" + - "E SACYPRIOT SYLLABLE SECYPRIOT SYLLABLE SICYPRIOT SYLLABLE SOCYPRIOT SYL" + - "LABLE SUCYPRIOT SYLLABLE TACYPRIOT SYLLABLE TECYPRIOT SYLLABLE TICYPRIOT" + - " SYLLABLE TOCYPRIOT SYLLABLE TUCYPRIOT SYLLABLE WACYPRIOT SYLLABLE WECYP" + - "RIOT SYLLABLE WICYPRIOT SYLLABLE WOCYPRIOT SYLLABLE XACYPRIOT SYLLABLE X" + - "ECYPRIOT SYLLABLE ZACYPRIOT SYLLABLE ZOIMPERIAL ARAMAIC LETTER ALEPHIMPE" + - "RIAL ARAMAIC LETTER BETHIMPERIAL ARAMAIC LETTER GIMELIMPERIAL ARAMAIC LE" + - "TTER DALETHIMPERIAL ARAMAIC LETTER HEIMPERIAL ARAMAIC LETTER WAWIMPERIAL" + - " ARAMAIC LETTER ZAYINIMPERIAL ARAMAIC LETTER HETHIMPERIAL ARAMAIC LETTER" + - " TETHIMPERIAL ARAMAIC LETTER YODHIMPERIAL ARAMAIC LETTER KAPHIMPERIAL AR" + - "AMAIC LETTER LAMEDHIMPERIAL ARAMAIC LETTER MEMIMPERIAL ARAMAIC LETTER NU" + - "NIMPERIAL ARAMAIC LETTER SAMEKHIMPERIAL ARAMAIC LETTER AYINIMPERIAL ARAM" + - "AIC LETTER PEIMPERIAL ARAMAIC LETTER SADHEIMPERIAL ARAMAIC LETTER QOPHIM" + - "PERIAL ARAMAIC LETTER RESHIMPERIAL ARAMAIC LETTER SHINIMPERIAL ARAMAIC L" + - "ETTER TAWIMPERIAL ARAMAIC SECTION SIGNIMPERIAL ARAMAIC NUMBER ONEIMPERIA" + - "L ARAMAIC NUMBER TWOIMPERIAL ARAMAIC NUMBER THREEIMPERIAL ARAMAIC NUMBER" + - " TENIMPERIAL ARAMAIC NUMBER TWENTYIMPERIAL ARAMAIC NUMBER ONE HUNDREDIMP" + - "ERIAL ARAMAIC NUMBER ONE THOUSANDIMPERIAL ARAMAIC NUMBER TEN THOUSANDPAL" + - "MYRENE LETTER ALEPHPALMYRENE LETTER BETHPALMYRENE LETTER GIMELPALMYRENE " + - "LETTER DALETHPALMYRENE LETTER HEPALMYRENE LETTER WAWPALMYRENE LETTER ZAY" + - "INPALMYRENE LETTER HETHPALMYRENE LETTER TETHPALMYRENE LETTER YODHPALMYRE" + - "NE LETTER KAPHPALMYRENE LETTER LAMEDHPALMYRENE LETTER MEMPALMYRENE LETTE" + - "R FINAL NUNPALMYRENE LETTER NUNPALMYRENE LETTER SAMEKHPALMYRENE LETTER A" + - "YINPALMYRENE LETTER PEPALMYRENE LETTER SADHEPALMYRENE LETTER QOPHPALMYRE" + - "NE LETTER RESHPALMYRENE LETTER SHINPALMYRENE LETTER TAWPALMYRENE LEFT-PO" + - "INTING FLEURONPALMYRENE RIGHT-POINTING FLEURONPALMYRENE NUMBER ONEPALMYR" + - "ENE NUMBER TWOPALMYRENE NUMBER THREEPALMYRENE NUMBER FOURPALMYRENE NUMBE" + - "R FIVEPALMYRENE NUMBER TENPALMYRENE NUMBER TWENTYNABATAEAN LETTER FINAL " + - "ALEPHNABATAEAN LETTER ALEPHNABATAEAN LETTER FINAL BETHNABATAEAN LETTER B" + - "ETHNABATAEAN LETTER GIMELNABATAEAN LETTER DALETHNABATAEAN LETTER FINAL H" + - "ENABATAEAN LETTER HENABATAEAN LETTER WAWNABATAEAN LETTER ZAYINNABATAEAN " + - "LETTER HETHNABATAEAN LETTER TETHNABATAEAN LETTER FINAL YODHNABATAEAN LET" + - "TER YODHNABATAEAN LETTER FINAL KAPHNABATAEAN LETTER KAPHNABATAEAN LETTER" + - " FINAL LAMEDHNABATAEAN LETTER LAMEDHNABATAEAN LETTER FINAL MEMNABATAEAN " + - "LETTER MEMNABATAEAN LETTER FINAL NUNNABATAEAN LETTER NUNNABATAEAN LETTER" + - " SAMEKHNABATAEAN LETTER AYINNABATAEAN LETTER PENABATAEAN LETTER SADHENAB" + - "ATAEAN LETTER QOPHNABATAEAN LETTER RESHNABATAEAN LETTER FINAL SHINNABATA" + - "EAN LETTER SHINNABATAEAN LETTER TAWNABATAEAN NUMBER ONENABATAEAN NUMBER ") + ("" + - "TWONABATAEAN NUMBER THREENABATAEAN NUMBER FOURNABATAEAN CRUCIFORM NUMBER" + - " FOURNABATAEAN NUMBER FIVENABATAEAN NUMBER TENNABATAEAN NUMBER TWENTYNAB" + - "ATAEAN NUMBER ONE HUNDREDHATRAN LETTER ALEPHHATRAN LETTER BETHHATRAN LET" + - "TER GIMELHATRAN LETTER DALETH-RESHHATRAN LETTER HEHATRAN LETTER WAWHATRA" + - "N LETTER ZAYNHATRAN LETTER HETHHATRAN LETTER TETHHATRAN LETTER YODHHATRA" + - "N LETTER KAPHHATRAN LETTER LAMEDHHATRAN LETTER MEMHATRAN LETTER NUNHATRA" + - "N LETTER SAMEKHHATRAN LETTER AYNHATRAN LETTER PEHATRAN LETTER SADHEHATRA" + - "N LETTER QOPHHATRAN LETTER SHINHATRAN LETTER TAWHATRAN NUMBER ONEHATRAN " + - "NUMBER FIVEHATRAN NUMBER TENHATRAN NUMBER TWENTYHATRAN NUMBER ONE HUNDRE" + - "DPHOENICIAN LETTER ALFPHOENICIAN LETTER BETPHOENICIAN LETTER GAMLPHOENIC" + - "IAN LETTER DELTPHOENICIAN LETTER HEPHOENICIAN LETTER WAUPHOENICIAN LETTE" + - "R ZAIPHOENICIAN LETTER HETPHOENICIAN LETTER TETPHOENICIAN LETTER YODPHOE" + - "NICIAN LETTER KAFPHOENICIAN LETTER LAMDPHOENICIAN LETTER MEMPHOENICIAN L" + - "ETTER NUNPHOENICIAN LETTER SEMKPHOENICIAN LETTER AINPHOENICIAN LETTER PE" + - "PHOENICIAN LETTER SADEPHOENICIAN LETTER QOFPHOENICIAN LETTER ROSHPHOENIC" + - "IAN LETTER SHINPHOENICIAN LETTER TAUPHOENICIAN NUMBER ONEPHOENICIAN NUMB" + - "ER TENPHOENICIAN NUMBER TWENTYPHOENICIAN NUMBER ONE HUNDREDPHOENICIAN NU" + - "MBER TWOPHOENICIAN NUMBER THREEPHOENICIAN WORD SEPARATORLYDIAN LETTER AL" + - "YDIAN LETTER BLYDIAN LETTER GLYDIAN LETTER DLYDIAN LETTER ELYDIAN LETTER" + - " VLYDIAN LETTER ILYDIAN LETTER YLYDIAN LETTER KLYDIAN LETTER LLYDIAN LET" + - "TER MLYDIAN LETTER NLYDIAN LETTER OLYDIAN LETTER RLYDIAN LETTER SSLYDIAN" + - " LETTER TLYDIAN LETTER ULYDIAN LETTER FLYDIAN LETTER QLYDIAN LETTER SLYD" + - "IAN LETTER TTLYDIAN LETTER ANLYDIAN LETTER ENLYDIAN LETTER LYLYDIAN LETT" + - "ER NNLYDIAN LETTER CLYDIAN TRIANGULAR MARKMEROITIC HIEROGLYPHIC LETTER A" + - "MEROITIC HIEROGLYPHIC LETTER EMEROITIC HIEROGLYPHIC LETTER IMEROITIC HIE" + - "ROGLYPHIC LETTER OMEROITIC HIEROGLYPHIC LETTER YAMEROITIC HIEROGLYPHIC L" + - "ETTER WAMEROITIC HIEROGLYPHIC LETTER BAMEROITIC HIEROGLYPHIC LETTER BA-2" + - "MEROITIC HIEROGLYPHIC LETTER PAMEROITIC HIEROGLYPHIC LETTER MAMEROITIC H" + - "IEROGLYPHIC LETTER NAMEROITIC HIEROGLYPHIC LETTER NA-2MEROITIC HIEROGLYP" + - "HIC LETTER NEMEROITIC HIEROGLYPHIC LETTER NE-2MEROITIC HIEROGLYPHIC LETT" + - "ER RAMEROITIC HIEROGLYPHIC LETTER RA-2MEROITIC HIEROGLYPHIC LETTER LAMER" + - "OITIC HIEROGLYPHIC LETTER KHAMEROITIC HIEROGLYPHIC LETTER HHAMEROITIC HI" + - "EROGLYPHIC LETTER SAMEROITIC HIEROGLYPHIC LETTER SA-2MEROITIC HIEROGLYPH" + - "IC LETTER SEMEROITIC HIEROGLYPHIC LETTER KAMEROITIC HIEROGLYPHIC LETTER " + - "QAMEROITIC HIEROGLYPHIC LETTER TAMEROITIC HIEROGLYPHIC LETTER TA-2MEROIT" + - "IC HIEROGLYPHIC LETTER TEMEROITIC HIEROGLYPHIC LETTER TE-2MEROITIC HIERO" + - "GLYPHIC LETTER TOMEROITIC HIEROGLYPHIC LETTER DAMEROITIC HIEROGLYPHIC SY" + - "MBOL VIDJMEROITIC HIEROGLYPHIC SYMBOL VIDJ-2MEROITIC CURSIVE LETTER AMER" + - "OITIC CURSIVE LETTER EMEROITIC CURSIVE LETTER IMEROITIC CURSIVE LETTER O" + - "MEROITIC CURSIVE LETTER YAMEROITIC CURSIVE LETTER WAMEROITIC CURSIVE LET" + - "TER BAMEROITIC CURSIVE LETTER PAMEROITIC CURSIVE LETTER MAMEROITIC CURSI" + - "VE LETTER NAMEROITIC CURSIVE LETTER NEMEROITIC CURSIVE LETTER RAMEROITIC" + - " CURSIVE LETTER LAMEROITIC CURSIVE LETTER KHAMEROITIC CURSIVE LETTER HHA" + - "MEROITIC CURSIVE LETTER SAMEROITIC CURSIVE LETTER ARCHAIC SAMEROITIC CUR" + - "SIVE LETTER SEMEROITIC CURSIVE LETTER KAMEROITIC CURSIVE LETTER QAMEROIT" + - "IC CURSIVE LETTER TAMEROITIC CURSIVE LETTER TEMEROITIC CURSIVE LETTER TO" + - "MEROITIC CURSIVE LETTER DAMEROITIC CURSIVE FRACTION ELEVEN TWELFTHSMEROI" + - "TIC CURSIVE FRACTION ONE HALFMEROITIC CURSIVE LOGOGRAM RMTMEROITIC CURSI" + - "VE LOGOGRAM IMNMEROITIC CURSIVE NUMBER ONEMEROITIC CURSIVE NUMBER TWOMER" + - "OITIC CURSIVE NUMBER THREEMEROITIC CURSIVE NUMBER FOURMEROITIC CURSIVE N" + - "UMBER FIVEMEROITIC CURSIVE NUMBER SIXMEROITIC CURSIVE NUMBER SEVENMEROIT" + - "IC CURSIVE NUMBER EIGHTMEROITIC CURSIVE NUMBER NINEMEROITIC CURSIVE NUMB" + - "ER TENMEROITIC CURSIVE NUMBER TWENTYMEROITIC CURSIVE NUMBER THIRTYMEROIT" + - "IC CURSIVE NUMBER FORTYMEROITIC CURSIVE NUMBER FIFTYMEROITIC CURSIVE NUM" + - "BER SIXTYMEROITIC CURSIVE NUMBER SEVENTYMEROITIC CURSIVE NUMBER ONE HUND" + - "REDMEROITIC CURSIVE NUMBER TWO HUNDREDMEROITIC CURSIVE NUMBER THREE HUND" + - "REDMEROITIC CURSIVE NUMBER FOUR HUNDREDMEROITIC CURSIVE NUMBER FIVE HUND" + - "REDMEROITIC CURSIVE NUMBER SIX HUNDREDMEROITIC CURSIVE NUMBER SEVEN HUND" + - "REDMEROITIC CURSIVE NUMBER EIGHT HUNDREDMEROITIC CURSIVE NUMBER NINE HUN" + - "DREDMEROITIC CURSIVE NUMBER ONE THOUSANDMEROITIC CURSIVE NUMBER TWO THOU" + - "SANDMEROITIC CURSIVE NUMBER THREE THOUSANDMEROITIC CURSIVE NUMBER FOUR T" + - "HOUSANDMEROITIC CURSIVE NUMBER FIVE THOUSANDMEROITIC CURSIVE NUMBER SIX " + - "THOUSANDMEROITIC CURSIVE NUMBER SEVEN THOUSANDMEROITIC CURSIVE NUMBER EI" + - "GHT THOUSANDMEROITIC CURSIVE NUMBER NINE THOUSANDMEROITIC CURSIVE NUMBER") + ("" + - " TEN THOUSANDMEROITIC CURSIVE NUMBER TWENTY THOUSANDMEROITIC CURSIVE NUM" + - "BER THIRTY THOUSANDMEROITIC CURSIVE NUMBER FORTY THOUSANDMEROITIC CURSIV" + - "E NUMBER FIFTY THOUSANDMEROITIC CURSIVE NUMBER SIXTY THOUSANDMEROITIC CU" + - "RSIVE NUMBER SEVENTY THOUSANDMEROITIC CURSIVE NUMBER EIGHTY THOUSANDMERO" + - "ITIC CURSIVE NUMBER NINETY THOUSANDMEROITIC CURSIVE NUMBER ONE HUNDRED T" + - "HOUSANDMEROITIC CURSIVE NUMBER TWO HUNDRED THOUSANDMEROITIC CURSIVE NUMB" + - "ER THREE HUNDRED THOUSANDMEROITIC CURSIVE NUMBER FOUR HUNDRED THOUSANDME" + - "ROITIC CURSIVE NUMBER FIVE HUNDRED THOUSANDMEROITIC CURSIVE NUMBER SIX H" + - "UNDRED THOUSANDMEROITIC CURSIVE NUMBER SEVEN HUNDRED THOUSANDMEROITIC CU" + - "RSIVE NUMBER EIGHT HUNDRED THOUSANDMEROITIC CURSIVE NUMBER NINE HUNDRED " + - "THOUSANDMEROITIC CURSIVE FRACTION ONE TWELFTHMEROITIC CURSIVE FRACTION T" + - "WO TWELFTHSMEROITIC CURSIVE FRACTION THREE TWELFTHSMEROITIC CURSIVE FRAC" + - "TION FOUR TWELFTHSMEROITIC CURSIVE FRACTION FIVE TWELFTHSMEROITIC CURSIV" + - "E FRACTION SIX TWELFTHSMEROITIC CURSIVE FRACTION SEVEN TWELFTHSMEROITIC " + - "CURSIVE FRACTION EIGHT TWELFTHSMEROITIC CURSIVE FRACTION NINE TWELFTHSME" + - "ROITIC CURSIVE FRACTION TEN TWELFTHSKHAROSHTHI LETTER AKHAROSHTHI VOWEL " + - "SIGN IKHAROSHTHI VOWEL SIGN UKHAROSHTHI VOWEL SIGN VOCALIC RKHAROSHTHI V" + - "OWEL SIGN EKHAROSHTHI VOWEL SIGN OKHAROSHTHI VOWEL LENGTH MARKKHAROSHTHI" + - " SIGN DOUBLE RING BELOWKHAROSHTHI SIGN ANUSVARAKHAROSHTHI SIGN VISARGAKH" + - "AROSHTHI LETTER KAKHAROSHTHI LETTER KHAKHAROSHTHI LETTER GAKHAROSHTHI LE" + - "TTER GHAKHAROSHTHI LETTER CAKHAROSHTHI LETTER CHAKHAROSHTHI LETTER JAKHA" + - "ROSHTHI LETTER NYAKHAROSHTHI LETTER TTAKHAROSHTHI LETTER TTHAKHAROSHTHI " + - "LETTER DDAKHAROSHTHI LETTER DDHAKHAROSHTHI LETTER NNAKHAROSHTHI LETTER T" + - "AKHAROSHTHI LETTER THAKHAROSHTHI LETTER DAKHAROSHTHI LETTER DHAKHAROSHTH" + - "I LETTER NAKHAROSHTHI LETTER PAKHAROSHTHI LETTER PHAKHAROSHTHI LETTER BA" + - "KHAROSHTHI LETTER BHAKHAROSHTHI LETTER MAKHAROSHTHI LETTER YAKHAROSHTHI " + - "LETTER RAKHAROSHTHI LETTER LAKHAROSHTHI LETTER VAKHAROSHTHI LETTER SHAKH" + - "AROSHTHI LETTER SSAKHAROSHTHI LETTER SAKHAROSHTHI LETTER ZAKHAROSHTHI LE" + - "TTER HAKHAROSHTHI LETTER KKAKHAROSHTHI LETTER TTTHAKHAROSHTHI SIGN BAR A" + - "BOVEKHAROSHTHI SIGN CAUDAKHAROSHTHI SIGN DOT BELOWKHAROSHTHI VIRAMAKHARO" + - "SHTHI DIGIT ONEKHAROSHTHI DIGIT TWOKHAROSHTHI DIGIT THREEKHAROSHTHI DIGI" + - "T FOURKHAROSHTHI NUMBER TENKHAROSHTHI NUMBER TWENTYKHAROSHTHI NUMBER ONE" + - " HUNDREDKHAROSHTHI NUMBER ONE THOUSANDKHAROSHTHI PUNCTUATION DOTKHAROSHT" + - "HI PUNCTUATION SMALL CIRCLEKHAROSHTHI PUNCTUATION CIRCLEKHAROSHTHI PUNCT" + - "UATION CRESCENT BARKHAROSHTHI PUNCTUATION MANGALAMKHAROSHTHI PUNCTUATION" + - " LOTUSKHAROSHTHI PUNCTUATION DANDAKHAROSHTHI PUNCTUATION DOUBLE DANDAKHA" + - "ROSHTHI PUNCTUATION LINESOLD SOUTH ARABIAN LETTER HEOLD SOUTH ARABIAN LE" + - "TTER LAMEDHOLD SOUTH ARABIAN LETTER HETHOLD SOUTH ARABIAN LETTER MEMOLD " + - "SOUTH ARABIAN LETTER QOPHOLD SOUTH ARABIAN LETTER WAWOLD SOUTH ARABIAN L" + - "ETTER SHINOLD SOUTH ARABIAN LETTER RESHOLD SOUTH ARABIAN LETTER BETHOLD " + - "SOUTH ARABIAN LETTER TAWOLD SOUTH ARABIAN LETTER SATOLD SOUTH ARABIAN LE" + - "TTER KAPHOLD SOUTH ARABIAN LETTER NUNOLD SOUTH ARABIAN LETTER KHETHOLD S" + - "OUTH ARABIAN LETTER SADHEOLD SOUTH ARABIAN LETTER SAMEKHOLD SOUTH ARABIA" + - "N LETTER FEOLD SOUTH ARABIAN LETTER ALEFOLD SOUTH ARABIAN LETTER AYNOLD " + - "SOUTH ARABIAN LETTER DHADHEOLD SOUTH ARABIAN LETTER GIMELOLD SOUTH ARABI" + - "AN LETTER DALETHOLD SOUTH ARABIAN LETTER GHAYNOLD SOUTH ARABIAN LETTER T" + - "ETHOLD SOUTH ARABIAN LETTER ZAYNOLD SOUTH ARABIAN LETTER DHALETHOLD SOUT" + - "H ARABIAN LETTER YODHOLD SOUTH ARABIAN LETTER THAWOLD SOUTH ARABIAN LETT" + - "ER THETHOLD SOUTH ARABIAN NUMBER ONEOLD SOUTH ARABIAN NUMBER FIFTYOLD SO" + - "UTH ARABIAN NUMERIC INDICATOROLD NORTH ARABIAN LETTER HEHOLD NORTH ARABI" + - "AN LETTER LAMOLD NORTH ARABIAN LETTER HAHOLD NORTH ARABIAN LETTER MEEMOL" + - "D NORTH ARABIAN LETTER QAFOLD NORTH ARABIAN LETTER WAWOLD NORTH ARABIAN " + - "LETTER ES-2OLD NORTH ARABIAN LETTER REHOLD NORTH ARABIAN LETTER BEHOLD N" + - "ORTH ARABIAN LETTER TEHOLD NORTH ARABIAN LETTER ES-1OLD NORTH ARABIAN LE" + - "TTER KAFOLD NORTH ARABIAN LETTER NOONOLD NORTH ARABIAN LETTER KHAHOLD NO" + - "RTH ARABIAN LETTER SADOLD NORTH ARABIAN LETTER ES-3OLD NORTH ARABIAN LET" + - "TER FEHOLD NORTH ARABIAN LETTER ALEFOLD NORTH ARABIAN LETTER AINOLD NORT" + - "H ARABIAN LETTER DADOLD NORTH ARABIAN LETTER GEEMOLD NORTH ARABIAN LETTE" + - "R DALOLD NORTH ARABIAN LETTER GHAINOLD NORTH ARABIAN LETTER TAHOLD NORTH" + - " ARABIAN LETTER ZAINOLD NORTH ARABIAN LETTER THALOLD NORTH ARABIAN LETTE" + - "R YEHOLD NORTH ARABIAN LETTER THEHOLD NORTH ARABIAN LETTER ZAHOLD NORTH " + - "ARABIAN NUMBER ONEOLD NORTH ARABIAN NUMBER TENOLD NORTH ARABIAN NUMBER T" + - "WENTYMANICHAEAN LETTER ALEPHMANICHAEAN LETTER BETHMANICHAEAN LETTER BHET" + - "HMANICHAEAN LETTER GIMELMANICHAEAN LETTER GHIMELMANICHAEAN LETTER DALETH") + ("" + - "MANICHAEAN LETTER HEMANICHAEAN LETTER WAWMANICHAEAN SIGN UDMANICHAEAN LE" + - "TTER ZAYINMANICHAEAN LETTER ZHAYINMANICHAEAN LETTER JAYINMANICHAEAN LETT" + - "ER JHAYINMANICHAEAN LETTER HETHMANICHAEAN LETTER TETHMANICHAEAN LETTER Y" + - "ODHMANICHAEAN LETTER KAPHMANICHAEAN LETTER XAPHMANICHAEAN LETTER KHAPHMA" + - "NICHAEAN LETTER LAMEDHMANICHAEAN LETTER DHAMEDHMANICHAEAN LETTER THAMEDH" + - "MANICHAEAN LETTER MEMMANICHAEAN LETTER NUNMANICHAEAN LETTER SAMEKHMANICH" + - "AEAN LETTER AYINMANICHAEAN LETTER AAYINMANICHAEAN LETTER PEMANICHAEAN LE" + - "TTER FEMANICHAEAN LETTER SADHEMANICHAEAN LETTER QOPHMANICHAEAN LETTER XO" + - "PHMANICHAEAN LETTER QHOPHMANICHAEAN LETTER RESHMANICHAEAN LETTER SHINMAN" + - "ICHAEAN LETTER SSHINMANICHAEAN LETTER TAWMANICHAEAN ABBREVIATION MARK AB" + - "OVEMANICHAEAN ABBREVIATION MARK BELOWMANICHAEAN NUMBER ONEMANICHAEAN NUM" + - "BER FIVEMANICHAEAN NUMBER TENMANICHAEAN NUMBER TWENTYMANICHAEAN NUMBER O" + - "NE HUNDREDMANICHAEAN PUNCTUATION STARMANICHAEAN PUNCTUATION FLEURONMANIC" + - "HAEAN PUNCTUATION DOUBLE DOT WITHIN DOTMANICHAEAN PUNCTUATION DOT WITHIN" + - " DOTMANICHAEAN PUNCTUATION DOTMANICHAEAN PUNCTUATION TWO DOTSMANICHAEAN " + - "PUNCTUATION LINE FILLERAVESTAN LETTER AAVESTAN LETTER AAAVESTAN LETTER A" + - "OAVESTAN LETTER AAOAVESTAN LETTER ANAVESTAN LETTER AANAVESTAN LETTER AEA" + - "VESTAN LETTER AEEAVESTAN LETTER EAVESTAN LETTER EEAVESTAN LETTER OAVESTA" + - "N LETTER OOAVESTAN LETTER IAVESTAN LETTER IIAVESTAN LETTER UAVESTAN LETT" + - "ER UUAVESTAN LETTER KEAVESTAN LETTER XEAVESTAN LETTER XYEAVESTAN LETTER " + - "XVEAVESTAN LETTER GEAVESTAN LETTER GGEAVESTAN LETTER GHEAVESTAN LETTER C" + - "EAVESTAN LETTER JEAVESTAN LETTER TEAVESTAN LETTER THEAVESTAN LETTER DEAV" + - "ESTAN LETTER DHEAVESTAN LETTER TTEAVESTAN LETTER PEAVESTAN LETTER FEAVES" + - "TAN LETTER BEAVESTAN LETTER BHEAVESTAN LETTER NGEAVESTAN LETTER NGYEAVES" + - "TAN LETTER NGVEAVESTAN LETTER NEAVESTAN LETTER NYEAVESTAN LETTER NNEAVES" + - "TAN LETTER MEAVESTAN LETTER HMEAVESTAN LETTER YYEAVESTAN LETTER YEAVESTA" + - "N LETTER VEAVESTAN LETTER REAVESTAN LETTER LEAVESTAN LETTER SEAVESTAN LE" + - "TTER ZEAVESTAN LETTER SHEAVESTAN LETTER ZHEAVESTAN LETTER SHYEAVESTAN LE" + - "TTER SSHEAVESTAN LETTER HEAVESTAN ABBREVIATION MARKTINY TWO DOTS OVER ON" + - "E DOT PUNCTUATIONSMALL TWO DOTS OVER ONE DOT PUNCTUATIONLARGE TWO DOTS O" + - "VER ONE DOT PUNCTUATIONLARGE ONE DOT OVER TWO DOTS PUNCTUATIONLARGE TWO " + - "RINGS OVER ONE RING PUNCTUATIONLARGE ONE RING OVER TWO RINGS PUNCTUATION" + - "INSCRIPTIONAL PARTHIAN LETTER ALEPHINSCRIPTIONAL PARTHIAN LETTER BETHINS" + - "CRIPTIONAL PARTHIAN LETTER GIMELINSCRIPTIONAL PARTHIAN LETTER DALETHINSC" + - "RIPTIONAL PARTHIAN LETTER HEINSCRIPTIONAL PARTHIAN LETTER WAWINSCRIPTION" + - "AL PARTHIAN LETTER ZAYININSCRIPTIONAL PARTHIAN LETTER HETHINSCRIPTIONAL " + - "PARTHIAN LETTER TETHINSCRIPTIONAL PARTHIAN LETTER YODHINSCRIPTIONAL PART" + - "HIAN LETTER KAPHINSCRIPTIONAL PARTHIAN LETTER LAMEDHINSCRIPTIONAL PARTHI" + - "AN LETTER MEMINSCRIPTIONAL PARTHIAN LETTER NUNINSCRIPTIONAL PARTHIAN LET" + - "TER SAMEKHINSCRIPTIONAL PARTHIAN LETTER AYININSCRIPTIONAL PARTHIAN LETTE" + - "R PEINSCRIPTIONAL PARTHIAN LETTER SADHEINSCRIPTIONAL PARTHIAN LETTER QOP" + - "HINSCRIPTIONAL PARTHIAN LETTER RESHINSCRIPTIONAL PARTHIAN LETTER SHININS" + - "CRIPTIONAL PARTHIAN LETTER TAWINSCRIPTIONAL PARTHIAN NUMBER ONEINSCRIPTI" + - "ONAL PARTHIAN NUMBER TWOINSCRIPTIONAL PARTHIAN NUMBER THREEINSCRIPTIONAL" + - " PARTHIAN NUMBER FOURINSCRIPTIONAL PARTHIAN NUMBER TENINSCRIPTIONAL PART" + - "HIAN NUMBER TWENTYINSCRIPTIONAL PARTHIAN NUMBER ONE HUNDREDINSCRIPTIONAL" + - " PARTHIAN NUMBER ONE THOUSANDINSCRIPTIONAL PAHLAVI LETTER ALEPHINSCRIPTI" + - "ONAL PAHLAVI LETTER BETHINSCRIPTIONAL PAHLAVI LETTER GIMELINSCRIPTIONAL " + - "PAHLAVI LETTER DALETHINSCRIPTIONAL PAHLAVI LETTER HEINSCRIPTIONAL PAHLAV" + - "I LETTER WAW-AYIN-RESHINSCRIPTIONAL PAHLAVI LETTER ZAYININSCRIPTIONAL PA" + - "HLAVI LETTER HETHINSCRIPTIONAL PAHLAVI LETTER TETHINSCRIPTIONAL PAHLAVI " + - "LETTER YODHINSCRIPTIONAL PAHLAVI LETTER KAPHINSCRIPTIONAL PAHLAVI LETTER" + - " LAMEDHINSCRIPTIONAL PAHLAVI LETTER MEM-QOPHINSCRIPTIONAL PAHLAVI LETTER" + - " NUNINSCRIPTIONAL PAHLAVI LETTER SAMEKHINSCRIPTIONAL PAHLAVI LETTER PEIN" + - "SCRIPTIONAL PAHLAVI LETTER SADHEINSCRIPTIONAL PAHLAVI LETTER SHININSCRIP" + - "TIONAL PAHLAVI LETTER TAWINSCRIPTIONAL PAHLAVI NUMBER ONEINSCRIPTIONAL P" + - "AHLAVI NUMBER TWOINSCRIPTIONAL PAHLAVI NUMBER THREEINSCRIPTIONAL PAHLAVI" + - " NUMBER FOURINSCRIPTIONAL PAHLAVI NUMBER TENINSCRIPTIONAL PAHLAVI NUMBER" + - " TWENTYINSCRIPTIONAL PAHLAVI NUMBER ONE HUNDREDINSCRIPTIONAL PAHLAVI NUM" + - "BER ONE THOUSANDPSALTER PAHLAVI LETTER ALEPHPSALTER PAHLAVI LETTER BETHP" + - "SALTER PAHLAVI LETTER GIMELPSALTER PAHLAVI LETTER DALETHPSALTER PAHLAVI " + - "LETTER HEPSALTER PAHLAVI LETTER WAW-AYIN-RESHPSALTER PAHLAVI LETTER ZAYI" + - "NPSALTER PAHLAVI LETTER HETHPSALTER PAHLAVI LETTER YODHPSALTER PAHLAVI L" + - "ETTER KAPHPSALTER PAHLAVI LETTER LAMEDHPSALTER PAHLAVI LETTER MEM-QOPHPS") + ("" + - "ALTER PAHLAVI LETTER NUNPSALTER PAHLAVI LETTER SAMEKHPSALTER PAHLAVI LET" + - "TER PEPSALTER PAHLAVI LETTER SADHEPSALTER PAHLAVI LETTER SHINPSALTER PAH" + - "LAVI LETTER TAWPSALTER PAHLAVI SECTION MARKPSALTER PAHLAVI TURNED SECTIO" + - "N MARKPSALTER PAHLAVI FOUR DOTS WITH CROSSPSALTER PAHLAVI FOUR DOTS WITH" + - " DOTPSALTER PAHLAVI NUMBER ONEPSALTER PAHLAVI NUMBER TWOPSALTER PAHLAVI " + - "NUMBER THREEPSALTER PAHLAVI NUMBER FOURPSALTER PAHLAVI NUMBER TENPSALTER" + - " PAHLAVI NUMBER TWENTYPSALTER PAHLAVI NUMBER ONE HUNDREDOLD TURKIC LETTE" + - "R ORKHON AOLD TURKIC LETTER YENISEI AOLD TURKIC LETTER YENISEI AEOLD TUR" + - "KIC LETTER ORKHON IOLD TURKIC LETTER YENISEI IOLD TURKIC LETTER YENISEI " + - "EOLD TURKIC LETTER ORKHON OOLD TURKIC LETTER ORKHON OEOLD TURKIC LETTER " + - "YENISEI OEOLD TURKIC LETTER ORKHON ABOLD TURKIC LETTER YENISEI ABOLD TUR" + - "KIC LETTER ORKHON AEBOLD TURKIC LETTER YENISEI AEBOLD TURKIC LETTER ORKH" + - "ON AGOLD TURKIC LETTER YENISEI AGOLD TURKIC LETTER ORKHON AEGOLD TURKIC " + - "LETTER YENISEI AEGOLD TURKIC LETTER ORKHON ADOLD TURKIC LETTER YENISEI A" + - "DOLD TURKIC LETTER ORKHON AEDOLD TURKIC LETTER ORKHON EZOLD TURKIC LETTE" + - "R YENISEI EZOLD TURKIC LETTER ORKHON AYOLD TURKIC LETTER YENISEI AYOLD T" + - "URKIC LETTER ORKHON AEYOLD TURKIC LETTER YENISEI AEYOLD TURKIC LETTER OR" + - "KHON AEKOLD TURKIC LETTER YENISEI AEKOLD TURKIC LETTER ORKHON OEKOLD TUR" + - "KIC LETTER YENISEI OEKOLD TURKIC LETTER ORKHON ALOLD TURKIC LETTER YENIS" + - "EI ALOLD TURKIC LETTER ORKHON AELOLD TURKIC LETTER ORKHON ELTOLD TURKIC " + - "LETTER ORKHON EMOLD TURKIC LETTER ORKHON ANOLD TURKIC LETTER ORKHON AENO" + - "LD TURKIC LETTER YENISEI AENOLD TURKIC LETTER ORKHON ENTOLD TURKIC LETTE" + - "R YENISEI ENTOLD TURKIC LETTER ORKHON ENCOLD TURKIC LETTER YENISEI ENCOL" + - "D TURKIC LETTER ORKHON ENYOLD TURKIC LETTER YENISEI ENYOLD TURKIC LETTER" + - " YENISEI ANGOLD TURKIC LETTER ORKHON ENGOLD TURKIC LETTER YENISEI AENGOL" + - "D TURKIC LETTER ORKHON EPOLD TURKIC LETTER ORKHON OPOLD TURKIC LETTER OR" + - "KHON ICOLD TURKIC LETTER ORKHON ECOLD TURKIC LETTER YENISEI ECOLD TURKIC" + - " LETTER ORKHON AQOLD TURKIC LETTER YENISEI AQOLD TURKIC LETTER ORKHON IQ" + - "OLD TURKIC LETTER YENISEI IQOLD TURKIC LETTER ORKHON OQOLD TURKIC LETTER" + - " YENISEI OQOLD TURKIC LETTER ORKHON AROLD TURKIC LETTER YENISEI AROLD TU" + - "RKIC LETTER ORKHON AEROLD TURKIC LETTER ORKHON ASOLD TURKIC LETTER ORKHO" + - "N AESOLD TURKIC LETTER ORKHON ASHOLD TURKIC LETTER YENISEI ASHOLD TURKIC" + - " LETTER ORKHON ESHOLD TURKIC LETTER YENISEI ESHOLD TURKIC LETTER ORKHON " + - "ATOLD TURKIC LETTER YENISEI ATOLD TURKIC LETTER ORKHON AETOLD TURKIC LET" + - "TER YENISEI AETOLD TURKIC LETTER ORKHON OTOLD TURKIC LETTER ORKHON BASHO" + - "LD HUNGARIAN CAPITAL LETTER AOLD HUNGARIAN CAPITAL LETTER AAOLD HUNGARIA" + - "N CAPITAL LETTER EBOLD HUNGARIAN CAPITAL LETTER AMBOLD HUNGARIAN CAPITAL" + - " LETTER ECOLD HUNGARIAN CAPITAL LETTER ENCOLD HUNGARIAN CAPITAL LETTER E" + - "CSOLD HUNGARIAN CAPITAL LETTER EDOLD HUNGARIAN CAPITAL LETTER ANDOLD HUN" + - "GARIAN CAPITAL LETTER EOLD HUNGARIAN CAPITAL LETTER CLOSE EOLD HUNGARIAN" + - " CAPITAL LETTER EEOLD HUNGARIAN CAPITAL LETTER EFOLD HUNGARIAN CAPITAL L" + - "ETTER EGOLD HUNGARIAN CAPITAL LETTER EGYOLD HUNGARIAN CAPITAL LETTER EHO" + - "LD HUNGARIAN CAPITAL LETTER IOLD HUNGARIAN CAPITAL LETTER IIOLD HUNGARIA" + - "N CAPITAL LETTER EJOLD HUNGARIAN CAPITAL LETTER EKOLD HUNGARIAN CAPITAL " + - "LETTER AKOLD HUNGARIAN CAPITAL LETTER UNKOLD HUNGARIAN CAPITAL LETTER EL" + - "OLD HUNGARIAN CAPITAL LETTER ELYOLD HUNGARIAN CAPITAL LETTER EMOLD HUNGA" + - "RIAN CAPITAL LETTER ENOLD HUNGARIAN CAPITAL LETTER ENYOLD HUNGARIAN CAPI" + - "TAL LETTER OOLD HUNGARIAN CAPITAL LETTER OOOLD HUNGARIAN CAPITAL LETTER " + - "NIKOLSBURG OEOLD HUNGARIAN CAPITAL LETTER RUDIMENTA OEOLD HUNGARIAN CAPI" + - "TAL LETTER OEEOLD HUNGARIAN CAPITAL LETTER EPOLD HUNGARIAN CAPITAL LETTE" + - "R EMPOLD HUNGARIAN CAPITAL LETTER EROLD HUNGARIAN CAPITAL LETTER SHORT E" + - "ROLD HUNGARIAN CAPITAL LETTER ESOLD HUNGARIAN CAPITAL LETTER ESZOLD HUNG" + - "ARIAN CAPITAL LETTER ETOLD HUNGARIAN CAPITAL LETTER ENTOLD HUNGARIAN CAP" + - "ITAL LETTER ETYOLD HUNGARIAN CAPITAL LETTER ECHOLD HUNGARIAN CAPITAL LET" + - "TER UOLD HUNGARIAN CAPITAL LETTER UUOLD HUNGARIAN CAPITAL LETTER NIKOLSB" + - "URG UEOLD HUNGARIAN CAPITAL LETTER RUDIMENTA UEOLD HUNGARIAN CAPITAL LET" + - "TER EVOLD HUNGARIAN CAPITAL LETTER EZOLD HUNGARIAN CAPITAL LETTER EZSOLD" + - " HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGNOLD HUNGARIAN CAPITAL LETTER US" + - "OLD HUNGARIAN SMALL LETTER AOLD HUNGARIAN SMALL LETTER AAOLD HUNGARIAN S" + - "MALL LETTER EBOLD HUNGARIAN SMALL LETTER AMBOLD HUNGARIAN SMALL LETTER E" + - "COLD HUNGARIAN SMALL LETTER ENCOLD HUNGARIAN SMALL LETTER ECSOLD HUNGARI" + - "AN SMALL LETTER EDOLD HUNGARIAN SMALL LETTER ANDOLD HUNGARIAN SMALL LETT" + - "ER EOLD HUNGARIAN SMALL LETTER CLOSE EOLD HUNGARIAN SMALL LETTER EEOLD H" + - "UNGARIAN SMALL LETTER EFOLD HUNGARIAN SMALL LETTER EGOLD HUNGARIAN SMALL") + ("" + - " LETTER EGYOLD HUNGARIAN SMALL LETTER EHOLD HUNGARIAN SMALL LETTER IOLD " + - "HUNGARIAN SMALL LETTER IIOLD HUNGARIAN SMALL LETTER EJOLD HUNGARIAN SMAL" + - "L LETTER EKOLD HUNGARIAN SMALL LETTER AKOLD HUNGARIAN SMALL LETTER UNKOL" + - "D HUNGARIAN SMALL LETTER ELOLD HUNGARIAN SMALL LETTER ELYOLD HUNGARIAN S" + - "MALL LETTER EMOLD HUNGARIAN SMALL LETTER ENOLD HUNGARIAN SMALL LETTER EN" + - "YOLD HUNGARIAN SMALL LETTER OOLD HUNGARIAN SMALL LETTER OOOLD HUNGARIAN " + - "SMALL LETTER NIKOLSBURG OEOLD HUNGARIAN SMALL LETTER RUDIMENTA OEOLD HUN" + - "GARIAN SMALL LETTER OEEOLD HUNGARIAN SMALL LETTER EPOLD HUNGARIAN SMALL " + - "LETTER EMPOLD HUNGARIAN SMALL LETTER EROLD HUNGARIAN SMALL LETTER SHORT " + - "EROLD HUNGARIAN SMALL LETTER ESOLD HUNGARIAN SMALL LETTER ESZOLD HUNGARI" + - "AN SMALL LETTER ETOLD HUNGARIAN SMALL LETTER ENTOLD HUNGARIAN SMALL LETT" + - "ER ETYOLD HUNGARIAN SMALL LETTER ECHOLD HUNGARIAN SMALL LETTER UOLD HUNG" + - "ARIAN SMALL LETTER UUOLD HUNGARIAN SMALL LETTER NIKOLSBURG UEOLD HUNGARI" + - "AN SMALL LETTER RUDIMENTA UEOLD HUNGARIAN SMALL LETTER EVOLD HUNGARIAN S" + - "MALL LETTER EZOLD HUNGARIAN SMALL LETTER EZSOLD HUNGARIAN SMALL LETTER E" + - "NT-SHAPED SIGNOLD HUNGARIAN SMALL LETTER USOLD HUNGARIAN NUMBER ONEOLD H" + - "UNGARIAN NUMBER FIVEOLD HUNGARIAN NUMBER TENOLD HUNGARIAN NUMBER FIFTYOL" + - "D HUNGARIAN NUMBER ONE HUNDREDOLD HUNGARIAN NUMBER ONE THOUSANDRUMI DIGI" + - "T ONERUMI DIGIT TWORUMI DIGIT THREERUMI DIGIT FOURRUMI DIGIT FIVERUMI DI" + - "GIT SIXRUMI DIGIT SEVENRUMI DIGIT EIGHTRUMI DIGIT NINERUMI NUMBER TENRUM" + - "I NUMBER TWENTYRUMI NUMBER THIRTYRUMI NUMBER FORTYRUMI NUMBER FIFTYRUMI " + - "NUMBER SIXTYRUMI NUMBER SEVENTYRUMI NUMBER EIGHTYRUMI NUMBER NINETYRUMI " + - "NUMBER ONE HUNDREDRUMI NUMBER TWO HUNDREDRUMI NUMBER THREE HUNDREDRUMI N" + - "UMBER FOUR HUNDREDRUMI NUMBER FIVE HUNDREDRUMI NUMBER SIX HUNDREDRUMI NU" + - "MBER SEVEN HUNDREDRUMI NUMBER EIGHT HUNDREDRUMI NUMBER NINE HUNDREDRUMI " + - "FRACTION ONE HALFRUMI FRACTION ONE QUARTERRUMI FRACTION ONE THIRDRUMI FR" + - "ACTION TWO THIRDSBRAHMI SIGN CANDRABINDUBRAHMI SIGN ANUSVARABRAHMI SIGN " + - "VISARGABRAHMI SIGN JIHVAMULIYABRAHMI SIGN UPADHMANIYABRAHMI LETTER ABRAH" + - "MI LETTER AABRAHMI LETTER IBRAHMI LETTER IIBRAHMI LETTER UBRAHMI LETTER " + - "UUBRAHMI LETTER VOCALIC RBRAHMI LETTER VOCALIC RRBRAHMI LETTER VOCALIC L" + - "BRAHMI LETTER VOCALIC LLBRAHMI LETTER EBRAHMI LETTER AIBRAHMI LETTER OBR" + - "AHMI LETTER AUBRAHMI LETTER KABRAHMI LETTER KHABRAHMI LETTER GABRAHMI LE" + - "TTER GHABRAHMI LETTER NGABRAHMI LETTER CABRAHMI LETTER CHABRAHMI LETTER " + - "JABRAHMI LETTER JHABRAHMI LETTER NYABRAHMI LETTER TTABRAHMI LETTER TTHAB" + - "RAHMI LETTER DDABRAHMI LETTER DDHABRAHMI LETTER NNABRAHMI LETTER TABRAHM" + - "I LETTER THABRAHMI LETTER DABRAHMI LETTER DHABRAHMI LETTER NABRAHMI LETT" + - "ER PABRAHMI LETTER PHABRAHMI LETTER BABRAHMI LETTER BHABRAHMI LETTER MAB" + - "RAHMI LETTER YABRAHMI LETTER RABRAHMI LETTER LABRAHMI LETTER VABRAHMI LE" + - "TTER SHABRAHMI LETTER SSABRAHMI LETTER SABRAHMI LETTER HABRAHMI LETTER L" + - "LABRAHMI LETTER OLD TAMIL LLLABRAHMI LETTER OLD TAMIL RRABRAHMI LETTER O" + - "LD TAMIL NNNABRAHMI VOWEL SIGN AABRAHMI VOWEL SIGN BHATTIPROLU AABRAHMI " + - "VOWEL SIGN IBRAHMI VOWEL SIGN IIBRAHMI VOWEL SIGN UBRAHMI VOWEL SIGN UUB" + - "RAHMI VOWEL SIGN VOCALIC RBRAHMI VOWEL SIGN VOCALIC RRBRAHMI VOWEL SIGN " + - "VOCALIC LBRAHMI VOWEL SIGN VOCALIC LLBRAHMI VOWEL SIGN EBRAHMI VOWEL SIG" + - "N AIBRAHMI VOWEL SIGN OBRAHMI VOWEL SIGN AUBRAHMI VIRAMABRAHMI DANDABRAH" + - "MI DOUBLE DANDABRAHMI PUNCTUATION DOTBRAHMI PUNCTUATION DOUBLE DOTBRAHMI" + - " PUNCTUATION LINEBRAHMI PUNCTUATION CRESCENT BARBRAHMI PUNCTUATION LOTUS" + - "BRAHMI NUMBER ONEBRAHMI NUMBER TWOBRAHMI NUMBER THREEBRAHMI NUMBER FOURB" + - "RAHMI NUMBER FIVEBRAHMI NUMBER SIXBRAHMI NUMBER SEVENBRAHMI NUMBER EIGHT" + - "BRAHMI NUMBER NINEBRAHMI NUMBER TENBRAHMI NUMBER TWENTYBRAHMI NUMBER THI" + - "RTYBRAHMI NUMBER FORTYBRAHMI NUMBER FIFTYBRAHMI NUMBER SIXTYBRAHMI NUMBE" + - "R SEVENTYBRAHMI NUMBER EIGHTYBRAHMI NUMBER NINETYBRAHMI NUMBER ONE HUNDR" + - "EDBRAHMI NUMBER ONE THOUSANDBRAHMI DIGIT ZEROBRAHMI DIGIT ONEBRAHMI DIGI" + - "T TWOBRAHMI DIGIT THREEBRAHMI DIGIT FOURBRAHMI DIGIT FIVEBRAHMI DIGIT SI" + - "XBRAHMI DIGIT SEVENBRAHMI DIGIT EIGHTBRAHMI DIGIT NINEBRAHMI NUMBER JOIN" + - "ERKAITHI SIGN CANDRABINDUKAITHI SIGN ANUSVARAKAITHI SIGN VISARGAKAITHI L" + - "ETTER AKAITHI LETTER AAKAITHI LETTER IKAITHI LETTER IIKAITHI LETTER UKAI" + - "THI LETTER UUKAITHI LETTER EKAITHI LETTER AIKAITHI LETTER OKAITHI LETTER" + - " AUKAITHI LETTER KAKAITHI LETTER KHAKAITHI LETTER GAKAITHI LETTER GHAKAI" + - "THI LETTER NGAKAITHI LETTER CAKAITHI LETTER CHAKAITHI LETTER JAKAITHI LE" + - "TTER JHAKAITHI LETTER NYAKAITHI LETTER TTAKAITHI LETTER TTHAKAITHI LETTE" + - "R DDAKAITHI LETTER DDDHAKAITHI LETTER DDHAKAITHI LETTER RHAKAITHI LETTER" + - " NNAKAITHI LETTER TAKAITHI LETTER THAKAITHI LETTER DAKAITHI LETTER DHAKA" + - "ITHI LETTER NAKAITHI LETTER PAKAITHI LETTER PHAKAITHI LETTER BAKAITHI LE") + ("" + - "TTER BHAKAITHI LETTER MAKAITHI LETTER YAKAITHI LETTER RAKAITHI LETTER LA" + - "KAITHI LETTER VAKAITHI LETTER SHAKAITHI LETTER SSAKAITHI LETTER SAKAITHI" + - " LETTER HAKAITHI VOWEL SIGN AAKAITHI VOWEL SIGN IKAITHI VOWEL SIGN IIKAI" + - "THI VOWEL SIGN UKAITHI VOWEL SIGN UUKAITHI VOWEL SIGN EKAITHI VOWEL SIGN" + - " AIKAITHI VOWEL SIGN OKAITHI VOWEL SIGN AUKAITHI SIGN VIRAMAKAITHI SIGN " + - "NUKTAKAITHI ABBREVIATION SIGNKAITHI ENUMERATION SIGNKAITHI NUMBER SIGNKA" + - "ITHI SECTION MARKKAITHI DOUBLE SECTION MARKKAITHI DANDAKAITHI DOUBLE DAN" + - "DASORA SOMPENG LETTER SAHSORA SOMPENG LETTER TAHSORA SOMPENG LETTER BAHS" + - "ORA SOMPENG LETTER CAHSORA SOMPENG LETTER DAHSORA SOMPENG LETTER GAHSORA" + - " SOMPENG LETTER MAHSORA SOMPENG LETTER NGAHSORA SOMPENG LETTER LAHSORA S" + - "OMPENG LETTER NAHSORA SOMPENG LETTER VAHSORA SOMPENG LETTER PAHSORA SOMP" + - "ENG LETTER YAHSORA SOMPENG LETTER RAHSORA SOMPENG LETTER HAHSORA SOMPENG" + - " LETTER KAHSORA SOMPENG LETTER JAHSORA SOMPENG LETTER NYAHSORA SOMPENG L" + - "ETTER AHSORA SOMPENG LETTER EEHSORA SOMPENG LETTER IHSORA SOMPENG LETTER" + - " UHSORA SOMPENG LETTER OHSORA SOMPENG LETTER EHSORA SOMPENG LETTER MAESO" + - "RA SOMPENG DIGIT ZEROSORA SOMPENG DIGIT ONESORA SOMPENG DIGIT TWOSORA SO" + - "MPENG DIGIT THREESORA SOMPENG DIGIT FOURSORA SOMPENG DIGIT FIVESORA SOMP" + - "ENG DIGIT SIXSORA SOMPENG DIGIT SEVENSORA SOMPENG DIGIT EIGHTSORA SOMPEN" + - "G DIGIT NINECHAKMA SIGN CANDRABINDUCHAKMA SIGN ANUSVARACHAKMA SIGN VISAR" + - "GACHAKMA LETTER AACHAKMA LETTER ICHAKMA LETTER UCHAKMA LETTER ECHAKMA LE" + - "TTER KAACHAKMA LETTER KHAACHAKMA LETTER GAACHAKMA LETTER GHAACHAKMA LETT" + - "ER NGAACHAKMA LETTER CAACHAKMA LETTER CHAACHAKMA LETTER JAACHAKMA LETTER" + - " JHAACHAKMA LETTER NYAACHAKMA LETTER TTAACHAKMA LETTER TTHAACHAKMA LETTE" + - "R DDAACHAKMA LETTER DDHAACHAKMA LETTER NNAACHAKMA LETTER TAACHAKMA LETTE" + - "R THAACHAKMA LETTER DAACHAKMA LETTER DHAACHAKMA LETTER NAACHAKMA LETTER " + - "PAACHAKMA LETTER PHAACHAKMA LETTER BAACHAKMA LETTER BHAACHAKMA LETTER MA" + - "ACHAKMA LETTER YYAACHAKMA LETTER YAACHAKMA LETTER RAACHAKMA LETTER LAACH" + - "AKMA LETTER WAACHAKMA LETTER SAACHAKMA LETTER HAACHAKMA VOWEL SIGN ACHAK" + - "MA VOWEL SIGN ICHAKMA VOWEL SIGN IICHAKMA VOWEL SIGN UCHAKMA VOWEL SIGN " + - "UUCHAKMA VOWEL SIGN ECHAKMA VOWEL SIGN AICHAKMA VOWEL SIGN OCHAKMA VOWEL" + - " SIGN AUCHAKMA VOWEL SIGN OICHAKMA O MARKCHAKMA AU MARKCHAKMA VIRAMACHAK" + - "MA MAAYYAACHAKMA DIGIT ZEROCHAKMA DIGIT ONECHAKMA DIGIT TWOCHAKMA DIGIT " + - "THREECHAKMA DIGIT FOURCHAKMA DIGIT FIVECHAKMA DIGIT SIXCHAKMA DIGIT SEVE" + - "NCHAKMA DIGIT EIGHTCHAKMA DIGIT NINECHAKMA SECTION MARKCHAKMA DANDACHAKM" + - "A DOUBLE DANDACHAKMA QUESTION MARKMAHAJANI LETTER AMAHAJANI LETTER IMAHA" + - "JANI LETTER UMAHAJANI LETTER EMAHAJANI LETTER OMAHAJANI LETTER KAMAHAJAN" + - "I LETTER KHAMAHAJANI LETTER GAMAHAJANI LETTER GHAMAHAJANI LETTER CAMAHAJ" + - "ANI LETTER CHAMAHAJANI LETTER JAMAHAJANI LETTER JHAMAHAJANI LETTER NYAMA" + - "HAJANI LETTER TTAMAHAJANI LETTER TTHAMAHAJANI LETTER DDAMAHAJANI LETTER " + - "DDHAMAHAJANI LETTER NNAMAHAJANI LETTER TAMAHAJANI LETTER THAMAHAJANI LET" + - "TER DAMAHAJANI LETTER DHAMAHAJANI LETTER NAMAHAJANI LETTER PAMAHAJANI LE" + - "TTER PHAMAHAJANI LETTER BAMAHAJANI LETTER BHAMAHAJANI LETTER MAMAHAJANI " + - "LETTER RAMAHAJANI LETTER LAMAHAJANI LETTER VAMAHAJANI LETTER SAMAHAJANI " + - "LETTER HAMAHAJANI LETTER RRAMAHAJANI SIGN NUKTAMAHAJANI ABBREVIATION SIG" + - "NMAHAJANI SECTION MARKMAHAJANI LIGATURE SHRISHARADA SIGN CANDRABINDUSHAR" + - "ADA SIGN ANUSVARASHARADA SIGN VISARGASHARADA LETTER ASHARADA LETTER AASH" + - "ARADA LETTER ISHARADA LETTER IISHARADA LETTER USHARADA LETTER UUSHARADA " + - "LETTER VOCALIC RSHARADA LETTER VOCALIC RRSHARADA LETTER VOCALIC LSHARADA" + - " LETTER VOCALIC LLSHARADA LETTER ESHARADA LETTER AISHARADA LETTER OSHARA" + - "DA LETTER AUSHARADA LETTER KASHARADA LETTER KHASHARADA LETTER GASHARADA " + - "LETTER GHASHARADA LETTER NGASHARADA LETTER CASHARADA LETTER CHASHARADA L" + - "ETTER JASHARADA LETTER JHASHARADA LETTER NYASHARADA LETTER TTASHARADA LE" + - "TTER TTHASHARADA LETTER DDASHARADA LETTER DDHASHARADA LETTER NNASHARADA " + - "LETTER TASHARADA LETTER THASHARADA LETTER DASHARADA LETTER DHASHARADA LE" + - "TTER NASHARADA LETTER PASHARADA LETTER PHASHARADA LETTER BASHARADA LETTE" + - "R BHASHARADA LETTER MASHARADA LETTER YASHARADA LETTER RASHARADA LETTER L" + - "ASHARADA LETTER LLASHARADA LETTER VASHARADA LETTER SHASHARADA LETTER SSA" + - "SHARADA LETTER SASHARADA LETTER HASHARADA VOWEL SIGN AASHARADA VOWEL SIG" + - "N ISHARADA VOWEL SIGN IISHARADA VOWEL SIGN USHARADA VOWEL SIGN UUSHARADA" + - " VOWEL SIGN VOCALIC RSHARADA VOWEL SIGN VOCALIC RRSHARADA VOWEL SIGN VOC" + - "ALIC LSHARADA VOWEL SIGN VOCALIC LLSHARADA VOWEL SIGN ESHARADA VOWEL SIG" + - "N AISHARADA VOWEL SIGN OSHARADA VOWEL SIGN AUSHARADA SIGN VIRAMASHARADA " + - "SIGN AVAGRAHASHARADA SIGN JIHVAMULIYASHARADA SIGN UPADHMANIYASHARADA OMS" + - "HARADA DANDASHARADA DOUBLE DANDASHARADA ABBREVIATION SIGNSHARADA SEPARAT") + ("" + - "ORSHARADA SANDHI MARKSHARADA SIGN NUKTASHARADA VOWEL MODIFIER MARKSHARAD" + - "A EXTRA SHORT VOWEL MARKSHARADA SUTRA MARKSHARADA DIGIT ZEROSHARADA DIGI" + - "T ONESHARADA DIGIT TWOSHARADA DIGIT THREESHARADA DIGIT FOURSHARADA DIGIT" + - " FIVESHARADA DIGIT SIXSHARADA DIGIT SEVENSHARADA DIGIT EIGHTSHARADA DIGI" + - "T NINESHARADA EKAMSHARADA SIGN SIDDHAMSHARADA HEADSTROKESHARADA CONTINUA" + - "TION SIGNSHARADA SECTION MARK-1SHARADA SECTION MARK-2SINHALA ARCHAIC DIG" + - "IT ONESINHALA ARCHAIC DIGIT TWOSINHALA ARCHAIC DIGIT THREESINHALA ARCHAI" + - "C DIGIT FOURSINHALA ARCHAIC DIGIT FIVESINHALA ARCHAIC DIGIT SIXSINHALA A" + - "RCHAIC DIGIT SEVENSINHALA ARCHAIC DIGIT EIGHTSINHALA ARCHAIC DIGIT NINES" + - "INHALA ARCHAIC NUMBER TENSINHALA ARCHAIC NUMBER TWENTYSINHALA ARCHAIC NU" + - "MBER THIRTYSINHALA ARCHAIC NUMBER FORTYSINHALA ARCHAIC NUMBER FIFTYSINHA" + - "LA ARCHAIC NUMBER SIXTYSINHALA ARCHAIC NUMBER SEVENTYSINHALA ARCHAIC NUM" + - "BER EIGHTYSINHALA ARCHAIC NUMBER NINETYSINHALA ARCHAIC NUMBER ONE HUNDRE" + - "DSINHALA ARCHAIC NUMBER ONE THOUSANDKHOJKI LETTER AKHOJKI LETTER AAKHOJK" + - "I LETTER IKHOJKI LETTER UKHOJKI LETTER EKHOJKI LETTER AIKHOJKI LETTER OK" + - "HOJKI LETTER AUKHOJKI LETTER KAKHOJKI LETTER KHAKHOJKI LETTER GAKHOJKI L" + - "ETTER GGAKHOJKI LETTER GHAKHOJKI LETTER NGAKHOJKI LETTER CAKHOJKI LETTER" + - " CHAKHOJKI LETTER JAKHOJKI LETTER JJAKHOJKI LETTER NYAKHOJKI LETTER TTAK" + - "HOJKI LETTER TTHAKHOJKI LETTER DDAKHOJKI LETTER DDHAKHOJKI LETTER NNAKHO" + - "JKI LETTER TAKHOJKI LETTER THAKHOJKI LETTER DAKHOJKI LETTER DDDAKHOJKI L" + - "ETTER DHAKHOJKI LETTER NAKHOJKI LETTER PAKHOJKI LETTER PHAKHOJKI LETTER " + - "BAKHOJKI LETTER BBAKHOJKI LETTER BHAKHOJKI LETTER MAKHOJKI LETTER YAKHOJ" + - "KI LETTER RAKHOJKI LETTER LAKHOJKI LETTER VAKHOJKI LETTER SAKHOJKI LETTE" + - "R HAKHOJKI LETTER LLAKHOJKI VOWEL SIGN AAKHOJKI VOWEL SIGN IKHOJKI VOWEL" + - " SIGN IIKHOJKI VOWEL SIGN UKHOJKI VOWEL SIGN EKHOJKI VOWEL SIGN AIKHOJKI" + - " VOWEL SIGN OKHOJKI VOWEL SIGN AUKHOJKI SIGN ANUSVARAKHOJKI SIGN VIRAMAK" + - "HOJKI SIGN NUKTAKHOJKI SIGN SHADDAKHOJKI DANDAKHOJKI DOUBLE DANDAKHOJKI " + - "WORD SEPARATORKHOJKI SECTION MARKKHOJKI DOUBLE SECTION MARKKHOJKI ABBREV" + - "IATION SIGNKHOJKI SIGN SUKUNMULTANI LETTER AMULTANI LETTER IMULTANI LETT" + - "ER UMULTANI LETTER EMULTANI LETTER KAMULTANI LETTER KHAMULTANI LETTER GA" + - "MULTANI LETTER GHAMULTANI LETTER CAMULTANI LETTER CHAMULTANI LETTER JAMU" + - "LTANI LETTER JJAMULTANI LETTER NYAMULTANI LETTER TTAMULTANI LETTER TTHAM" + - "ULTANI LETTER DDAMULTANI LETTER DDDAMULTANI LETTER DDHAMULTANI LETTER NN" + - "AMULTANI LETTER TAMULTANI LETTER THAMULTANI LETTER DAMULTANI LETTER DHAM" + - "ULTANI LETTER NAMULTANI LETTER PAMULTANI LETTER PHAMULTANI LETTER BAMULT" + - "ANI LETTER BHAMULTANI LETTER MAMULTANI LETTER YAMULTANI LETTER RAMULTANI" + - " LETTER LAMULTANI LETTER VAMULTANI LETTER SAMULTANI LETTER HAMULTANI LET" + - "TER RRAMULTANI LETTER RHAMULTANI SECTION MARKKHUDAWADI LETTER AKHUDAWADI" + - " LETTER AAKHUDAWADI LETTER IKHUDAWADI LETTER IIKHUDAWADI LETTER UKHUDAWA" + - "DI LETTER UUKHUDAWADI LETTER EKHUDAWADI LETTER AIKHUDAWADI LETTER OKHUDA" + - "WADI LETTER AUKHUDAWADI LETTER KAKHUDAWADI LETTER KHAKHUDAWADI LETTER GA" + - "KHUDAWADI LETTER GGAKHUDAWADI LETTER GHAKHUDAWADI LETTER NGAKHUDAWADI LE" + - "TTER CAKHUDAWADI LETTER CHAKHUDAWADI LETTER JAKHUDAWADI LETTER JJAKHUDAW" + - "ADI LETTER JHAKHUDAWADI LETTER NYAKHUDAWADI LETTER TTAKHUDAWADI LETTER T" + - "THAKHUDAWADI LETTER DDAKHUDAWADI LETTER DDDAKHUDAWADI LETTER RRAKHUDAWAD" + - "I LETTER DDHAKHUDAWADI LETTER NNAKHUDAWADI LETTER TAKHUDAWADI LETTER THA" + - "KHUDAWADI LETTER DAKHUDAWADI LETTER DHAKHUDAWADI LETTER NAKHUDAWADI LETT" + - "ER PAKHUDAWADI LETTER PHAKHUDAWADI LETTER BAKHUDAWADI LETTER BBAKHUDAWAD" + - "I LETTER BHAKHUDAWADI LETTER MAKHUDAWADI LETTER YAKHUDAWADI LETTER RAKHU" + - "DAWADI LETTER LAKHUDAWADI LETTER VAKHUDAWADI LETTER SHAKHUDAWADI LETTER " + - "SAKHUDAWADI LETTER HAKHUDAWADI SIGN ANUSVARAKHUDAWADI VOWEL SIGN AAKHUDA" + - "WADI VOWEL SIGN IKHUDAWADI VOWEL SIGN IIKHUDAWADI VOWEL SIGN UKHUDAWADI " + - "VOWEL SIGN UUKHUDAWADI VOWEL SIGN EKHUDAWADI VOWEL SIGN AIKHUDAWADI VOWE" + - "L SIGN OKHUDAWADI VOWEL SIGN AUKHUDAWADI SIGN NUKTAKHUDAWADI SIGN VIRAMA" + - "KHUDAWADI DIGIT ZEROKHUDAWADI DIGIT ONEKHUDAWADI DIGIT TWOKHUDAWADI DIGI" + - "T THREEKHUDAWADI DIGIT FOURKHUDAWADI DIGIT FIVEKHUDAWADI DIGIT SIXKHUDAW" + - "ADI DIGIT SEVENKHUDAWADI DIGIT EIGHTKHUDAWADI DIGIT NINEGRANTHA SIGN COM" + - "BINING ANUSVARA ABOVEGRANTHA SIGN CANDRABINDUGRANTHA SIGN ANUSVARAGRANTH" + - "A SIGN VISARGAGRANTHA LETTER AGRANTHA LETTER AAGRANTHA LETTER IGRANTHA L" + - "ETTER IIGRANTHA LETTER UGRANTHA LETTER UUGRANTHA LETTER VOCALIC RGRANTHA" + - " LETTER VOCALIC LGRANTHA LETTER EEGRANTHA LETTER AIGRANTHA LETTER OOGRAN" + - "THA LETTER AUGRANTHA LETTER KAGRANTHA LETTER KHAGRANTHA LETTER GAGRANTHA" + - " LETTER GHAGRANTHA LETTER NGAGRANTHA LETTER CAGRANTHA LETTER CHAGRANTHA " + - "LETTER JAGRANTHA LETTER JHAGRANTHA LETTER NYAGRANTHA LETTER TTAGRANTHA L") + ("" + - "ETTER TTHAGRANTHA LETTER DDAGRANTHA LETTER DDHAGRANTHA LETTER NNAGRANTHA" + - " LETTER TAGRANTHA LETTER THAGRANTHA LETTER DAGRANTHA LETTER DHAGRANTHA L" + - "ETTER NAGRANTHA LETTER PAGRANTHA LETTER PHAGRANTHA LETTER BAGRANTHA LETT" + - "ER BHAGRANTHA LETTER MAGRANTHA LETTER YAGRANTHA LETTER RAGRANTHA LETTER " + - "LAGRANTHA LETTER LLAGRANTHA LETTER VAGRANTHA LETTER SHAGRANTHA LETTER SS" + - "AGRANTHA LETTER SAGRANTHA LETTER HAGRANTHA SIGN NUKTAGRANTHA SIGN AVAGRA" + - "HAGRANTHA VOWEL SIGN AAGRANTHA VOWEL SIGN IGRANTHA VOWEL SIGN IIGRANTHA " + - "VOWEL SIGN UGRANTHA VOWEL SIGN UUGRANTHA VOWEL SIGN VOCALIC RGRANTHA VOW" + - "EL SIGN VOCALIC RRGRANTHA VOWEL SIGN EEGRANTHA VOWEL SIGN AIGRANTHA VOWE" + - "L SIGN OOGRANTHA VOWEL SIGN AUGRANTHA SIGN VIRAMAGRANTHA OMGRANTHA AU LE" + - "NGTH MARKGRANTHA SIGN PLUTAGRANTHA LETTER VEDIC ANUSVARAGRANTHA LETTER V" + - "EDIC DOUBLE ANUSVARAGRANTHA LETTER VOCALIC RRGRANTHA LETTER VOCALIC LLGR" + - "ANTHA VOWEL SIGN VOCALIC LGRANTHA VOWEL SIGN VOCALIC LLCOMBINING GRANTHA" + - " DIGIT ZEROCOMBINING GRANTHA DIGIT ONECOMBINING GRANTHA DIGIT TWOCOMBINI" + - "NG GRANTHA DIGIT THREECOMBINING GRANTHA DIGIT FOURCOMBINING GRANTHA DIGI" + - "T FIVECOMBINING GRANTHA DIGIT SIXCOMBINING GRANTHA LETTER ACOMBINING GRA" + - "NTHA LETTER KACOMBINING GRANTHA LETTER NACOMBINING GRANTHA LETTER VICOMB" + - "INING GRANTHA LETTER PANEWA LETTER ANEWA LETTER AANEWA LETTER INEWA LETT" + - "ER IINEWA LETTER UNEWA LETTER UUNEWA LETTER VOCALIC RNEWA LETTER VOCALIC" + - " RRNEWA LETTER VOCALIC LNEWA LETTER VOCALIC LLNEWA LETTER ENEWA LETTER A" + - "INEWA LETTER ONEWA LETTER AUNEWA LETTER KANEWA LETTER KHANEWA LETTER GAN" + - "EWA LETTER GHANEWA LETTER NGANEWA LETTER NGHANEWA LETTER CANEWA LETTER C" + - "HANEWA LETTER JANEWA LETTER JHANEWA LETTER NYANEWA LETTER NYHANEWA LETTE" + - "R TTANEWA LETTER TTHANEWA LETTER DDANEWA LETTER DDHANEWA LETTER NNANEWA " + - "LETTER TANEWA LETTER THANEWA LETTER DANEWA LETTER DHANEWA LETTER NANEWA " + - "LETTER NHANEWA LETTER PANEWA LETTER PHANEWA LETTER BANEWA LETTER BHANEWA" + - " LETTER MANEWA LETTER MHANEWA LETTER YANEWA LETTER RANEWA LETTER RHANEWA" + - " LETTER LANEWA LETTER LHANEWA LETTER WANEWA LETTER SHANEWA LETTER SSANEW" + - "A LETTER SANEWA LETTER HANEWA VOWEL SIGN AANEWA VOWEL SIGN INEWA VOWEL S" + - "IGN IINEWA VOWEL SIGN UNEWA VOWEL SIGN UUNEWA VOWEL SIGN VOCALIC RNEWA V" + - "OWEL SIGN VOCALIC RRNEWA VOWEL SIGN VOCALIC LNEWA VOWEL SIGN VOCALIC LLN" + - "EWA VOWEL SIGN ENEWA VOWEL SIGN AINEWA VOWEL SIGN ONEWA VOWEL SIGN AUNEW" + - "A SIGN VIRAMANEWA SIGN CANDRABINDUNEWA SIGN ANUSVARANEWA SIGN VISARGANEW" + - "A SIGN NUKTANEWA SIGN AVAGRAHANEWA SIGN FINAL ANUSVARANEWA OMNEWA SIDDHI" + - "NEWA DANDANEWA DOUBLE DANDANEWA COMMANEWA GAP FILLERNEWA ABBREVIATION SI" + - "GNNEWA DIGIT ZERONEWA DIGIT ONENEWA DIGIT TWONEWA DIGIT THREENEWA DIGIT " + - "FOURNEWA DIGIT FIVENEWA DIGIT SIXNEWA DIGIT SEVENNEWA DIGIT EIGHTNEWA DI" + - "GIT NINENEWA PLACEHOLDER MARKNEWA INSERTION SIGNTIRHUTA ANJITIRHUTA LETT" + - "ER ATIRHUTA LETTER AATIRHUTA LETTER ITIRHUTA LETTER IITIRHUTA LETTER UTI" + - "RHUTA LETTER UUTIRHUTA LETTER VOCALIC RTIRHUTA LETTER VOCALIC RRTIRHUTA " + - "LETTER VOCALIC LTIRHUTA LETTER VOCALIC LLTIRHUTA LETTER ETIRHUTA LETTER " + - "AITIRHUTA LETTER OTIRHUTA LETTER AUTIRHUTA LETTER KATIRHUTA LETTER KHATI" + - "RHUTA LETTER GATIRHUTA LETTER GHATIRHUTA LETTER NGATIRHUTA LETTER CATIRH" + - "UTA LETTER CHATIRHUTA LETTER JATIRHUTA LETTER JHATIRHUTA LETTER NYATIRHU" + - "TA LETTER TTATIRHUTA LETTER TTHATIRHUTA LETTER DDATIRHUTA LETTER DDHATIR" + - "HUTA LETTER NNATIRHUTA LETTER TATIRHUTA LETTER THATIRHUTA LETTER DATIRHU" + - "TA LETTER DHATIRHUTA LETTER NATIRHUTA LETTER PATIRHUTA LETTER PHATIRHUTA" + - " LETTER BATIRHUTA LETTER BHATIRHUTA LETTER MATIRHUTA LETTER YATIRHUTA LE" + - "TTER RATIRHUTA LETTER LATIRHUTA LETTER VATIRHUTA LETTER SHATIRHUTA LETTE" + - "R SSATIRHUTA LETTER SATIRHUTA LETTER HATIRHUTA VOWEL SIGN AATIRHUTA VOWE" + - "L SIGN ITIRHUTA VOWEL SIGN IITIRHUTA VOWEL SIGN UTIRHUTA VOWEL SIGN UUTI" + - "RHUTA VOWEL SIGN VOCALIC RTIRHUTA VOWEL SIGN VOCALIC RRTIRHUTA VOWEL SIG" + - "N VOCALIC LTIRHUTA VOWEL SIGN VOCALIC LLTIRHUTA VOWEL SIGN ETIRHUTA VOWE" + - "L SIGN SHORT ETIRHUTA VOWEL SIGN AITIRHUTA VOWEL SIGN OTIRHUTA VOWEL SIG" + - "N SHORT OTIRHUTA VOWEL SIGN AUTIRHUTA SIGN CANDRABINDUTIRHUTA SIGN ANUSV" + - "ARATIRHUTA SIGN VISARGATIRHUTA SIGN VIRAMATIRHUTA SIGN NUKTATIRHUTA SIGN" + - " AVAGRAHATIRHUTA GVANGTIRHUTA ABBREVIATION SIGNTIRHUTA OMTIRHUTA DIGIT Z" + - "EROTIRHUTA DIGIT ONETIRHUTA DIGIT TWOTIRHUTA DIGIT THREETIRHUTA DIGIT FO" + - "URTIRHUTA DIGIT FIVETIRHUTA DIGIT SIXTIRHUTA DIGIT SEVENTIRHUTA DIGIT EI" + - "GHTTIRHUTA DIGIT NINESIDDHAM LETTER ASIDDHAM LETTER AASIDDHAM LETTER ISI" + - "DDHAM LETTER IISIDDHAM LETTER USIDDHAM LETTER UUSIDDHAM LETTER VOCALIC R" + - "SIDDHAM LETTER VOCALIC RRSIDDHAM LETTER VOCALIC LSIDDHAM LETTER VOCALIC " + - "LLSIDDHAM LETTER ESIDDHAM LETTER AISIDDHAM LETTER OSIDDHAM LETTER AUSIDD" + - "HAM LETTER KASIDDHAM LETTER KHASIDDHAM LETTER GASIDDHAM LETTER GHASIDDHA") + ("" + - "M LETTER NGASIDDHAM LETTER CASIDDHAM LETTER CHASIDDHAM LETTER JASIDDHAM " + - "LETTER JHASIDDHAM LETTER NYASIDDHAM LETTER TTASIDDHAM LETTER TTHASIDDHAM" + - " LETTER DDASIDDHAM LETTER DDHASIDDHAM LETTER NNASIDDHAM LETTER TASIDDHAM" + - " LETTER THASIDDHAM LETTER DASIDDHAM LETTER DHASIDDHAM LETTER NASIDDHAM L" + - "ETTER PASIDDHAM LETTER PHASIDDHAM LETTER BASIDDHAM LETTER BHASIDDHAM LET" + - "TER MASIDDHAM LETTER YASIDDHAM LETTER RASIDDHAM LETTER LASIDDHAM LETTER " + - "VASIDDHAM LETTER SHASIDDHAM LETTER SSASIDDHAM LETTER SASIDDHAM LETTER HA" + - "SIDDHAM VOWEL SIGN AASIDDHAM VOWEL SIGN ISIDDHAM VOWEL SIGN IISIDDHAM VO" + - "WEL SIGN USIDDHAM VOWEL SIGN UUSIDDHAM VOWEL SIGN VOCALIC RSIDDHAM VOWEL" + - " SIGN VOCALIC RRSIDDHAM VOWEL SIGN ESIDDHAM VOWEL SIGN AISIDDHAM VOWEL S" + - "IGN OSIDDHAM VOWEL SIGN AUSIDDHAM SIGN CANDRABINDUSIDDHAM SIGN ANUSVARAS" + - "IDDHAM SIGN VISARGASIDDHAM SIGN VIRAMASIDDHAM SIGN NUKTASIDDHAM SIGN SID" + - "DHAMSIDDHAM DANDASIDDHAM DOUBLE DANDASIDDHAM SEPARATOR DOTSIDDHAM SEPARA" + - "TOR BARSIDDHAM REPETITION MARK-1SIDDHAM REPETITION MARK-2SIDDHAM REPETIT" + - "ION MARK-3SIDDHAM END OF TEXT MARKSIDDHAM SECTION MARK WITH TRIDENT AND " + - "U-SHAPED ORNAMENTSSIDDHAM SECTION MARK WITH TRIDENT AND DOTTED CRESCENTS" + - "SIDDHAM SECTION MARK WITH RAYS AND DOTTED CRESCENTSSIDDHAM SECTION MARK " + - "WITH RAYS AND DOTTED DOUBLE CRESCENTSSIDDHAM SECTION MARK WITH RAYS AND " + - "DOTTED TRIPLE CRESCENTSSIDDHAM SECTION MARK DOUBLE RINGSIDDHAM SECTION M" + - "ARK DOUBLE RING WITH RAYSSIDDHAM SECTION MARK WITH DOUBLE CRESCENTSSIDDH" + - "AM SECTION MARK WITH TRIPLE CRESCENTSSIDDHAM SECTION MARK WITH QUADRUPLE" + - " CRESCENTSSIDDHAM SECTION MARK WITH SEPTUPLE CRESCENTSSIDDHAM SECTION MA" + - "RK WITH CIRCLES AND RAYSSIDDHAM SECTION MARK WITH CIRCLES AND TWO ENCLOS" + - "URESSIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURESSIDDHAM LETTER " + - "THREE-CIRCLE ALTERNATE ISIDDHAM LETTER TWO-CIRCLE ALTERNATE ISIDDHAM LET" + - "TER TWO-CIRCLE ALTERNATE IISIDDHAM LETTER ALTERNATE USIDDHAM VOWEL SIGN " + - "ALTERNATE USIDDHAM VOWEL SIGN ALTERNATE UUMODI LETTER AMODI LETTER AAMOD" + - "I LETTER IMODI LETTER IIMODI LETTER UMODI LETTER UUMODI LETTER VOCALIC R" + - "MODI LETTER VOCALIC RRMODI LETTER VOCALIC LMODI LETTER VOCALIC LLMODI LE" + - "TTER EMODI LETTER AIMODI LETTER OMODI LETTER AUMODI LETTER KAMODI LETTER" + - " KHAMODI LETTER GAMODI LETTER GHAMODI LETTER NGAMODI LETTER CAMODI LETTE" + - "R CHAMODI LETTER JAMODI LETTER JHAMODI LETTER NYAMODI LETTER TTAMODI LET" + - "TER TTHAMODI LETTER DDAMODI LETTER DDHAMODI LETTER NNAMODI LETTER TAMODI" + - " LETTER THAMODI LETTER DAMODI LETTER DHAMODI LETTER NAMODI LETTER PAMODI" + - " LETTER PHAMODI LETTER BAMODI LETTER BHAMODI LETTER MAMODI LETTER YAMODI" + - " LETTER RAMODI LETTER LAMODI LETTER VAMODI LETTER SHAMODI LETTER SSAMODI" + - " LETTER SAMODI LETTER HAMODI LETTER LLAMODI VOWEL SIGN AAMODI VOWEL SIGN" + - " IMODI VOWEL SIGN IIMODI VOWEL SIGN UMODI VOWEL SIGN UUMODI VOWEL SIGN V" + - "OCALIC RMODI VOWEL SIGN VOCALIC RRMODI VOWEL SIGN VOCALIC LMODI VOWEL SI" + - "GN VOCALIC LLMODI VOWEL SIGN EMODI VOWEL SIGN AIMODI VOWEL SIGN OMODI VO" + - "WEL SIGN AUMODI SIGN ANUSVARAMODI SIGN VISARGAMODI SIGN VIRAMAMODI SIGN " + - "ARDHACANDRAMODI DANDAMODI DOUBLE DANDAMODI ABBREVIATION SIGNMODI SIGN HU" + - "VAMODI DIGIT ZEROMODI DIGIT ONEMODI DIGIT TWOMODI DIGIT THREEMODI DIGIT " + - "FOURMODI DIGIT FIVEMODI DIGIT SIXMODI DIGIT SEVENMODI DIGIT EIGHTMODI DI" + - "GIT NINEMONGOLIAN BIRGA WITH ORNAMENTMONGOLIAN ROTATED BIRGAMONGOLIAN DO" + - "UBLE BIRGA WITH ORNAMENTMONGOLIAN TRIPLE BIRGA WITH ORNAMENTMONGOLIAN BI" + - "RGA WITH DOUBLE ORNAMENTMONGOLIAN ROTATED BIRGA WITH ORNAMENTMONGOLIAN R" + - "OTATED BIRGA WITH DOUBLE ORNAMENTMONGOLIAN INVERTED BIRGAMONGOLIAN INVER" + - "TED BIRGA WITH DOUBLE ORNAMENTMONGOLIAN SWIRL BIRGAMONGOLIAN SWIRL BIRGA" + - " WITH ORNAMENTMONGOLIAN SWIRL BIRGA WITH DOUBLE ORNAMENTMONGOLIAN TURNED" + - " SWIRL BIRGA WITH DOUBLE ORNAMENTTAKRI LETTER ATAKRI LETTER AATAKRI LETT" + - "ER ITAKRI LETTER IITAKRI LETTER UTAKRI LETTER UUTAKRI LETTER ETAKRI LETT" + - "ER AITAKRI LETTER OTAKRI LETTER AUTAKRI LETTER KATAKRI LETTER KHATAKRI L" + - "ETTER GATAKRI LETTER GHATAKRI LETTER NGATAKRI LETTER CATAKRI LETTER CHAT" + - "AKRI LETTER JATAKRI LETTER JHATAKRI LETTER NYATAKRI LETTER TTATAKRI LETT" + - "ER TTHATAKRI LETTER DDATAKRI LETTER DDHATAKRI LETTER NNATAKRI LETTER TAT" + - "AKRI LETTER THATAKRI LETTER DATAKRI LETTER DHATAKRI LETTER NATAKRI LETTE" + - "R PATAKRI LETTER PHATAKRI LETTER BATAKRI LETTER BHATAKRI LETTER MATAKRI " + - "LETTER YATAKRI LETTER RATAKRI LETTER LATAKRI LETTER VATAKRI LETTER SHATA" + - "KRI LETTER SATAKRI LETTER HATAKRI LETTER RRATAKRI SIGN ANUSVARATAKRI SIG" + - "N VISARGATAKRI VOWEL SIGN AATAKRI VOWEL SIGN ITAKRI VOWEL SIGN IITAKRI V" + - "OWEL SIGN UTAKRI VOWEL SIGN UUTAKRI VOWEL SIGN ETAKRI VOWEL SIGN AITAKRI" + - " VOWEL SIGN OTAKRI VOWEL SIGN AUTAKRI SIGN VIRAMATAKRI SIGN NUKTATAKRI D" + - "IGIT ZEROTAKRI DIGIT ONETAKRI DIGIT TWOTAKRI DIGIT THREETAKRI DIGIT FOUR") + ("" + - "TAKRI DIGIT FIVETAKRI DIGIT SIXTAKRI DIGIT SEVENTAKRI DIGIT EIGHTTAKRI D" + - "IGIT NINEAHOM LETTER KAAHOM LETTER KHAAHOM LETTER NGAAHOM LETTER NAAHOM " + - "LETTER TAAHOM LETTER ALTERNATE TAAHOM LETTER PAAHOM LETTER PHAAHOM LETTE" + - "R BAAHOM LETTER MAAHOM LETTER JAAHOM LETTER CHAAHOM LETTER THAAHOM LETTE" + - "R RAAHOM LETTER LAAHOM LETTER SAAHOM LETTER NYAAHOM LETTER HAAHOM LETTER" + - " AAHOM LETTER DAAHOM LETTER DHAAHOM LETTER GAAHOM LETTER ALTERNATE GAAHO" + - "M LETTER GHAAHOM LETTER BHAAHOM LETTER JHAAHOM CONSONANT SIGN MEDIAL LAA" + - "HOM CONSONANT SIGN MEDIAL RAAHOM CONSONANT SIGN MEDIAL LIGATING RAAHOM V" + - "OWEL SIGN AAHOM VOWEL SIGN AAAHOM VOWEL SIGN IAHOM VOWEL SIGN IIAHOM VOW" + - "EL SIGN UAHOM VOWEL SIGN UUAHOM VOWEL SIGN EAHOM VOWEL SIGN AWAHOM VOWEL" + - " SIGN OAHOM VOWEL SIGN AIAHOM VOWEL SIGN AMAHOM SIGN KILLERAHOM DIGIT ZE" + - "ROAHOM DIGIT ONEAHOM DIGIT TWOAHOM DIGIT THREEAHOM DIGIT FOURAHOM DIGIT " + - "FIVEAHOM DIGIT SIXAHOM DIGIT SEVENAHOM DIGIT EIGHTAHOM DIGIT NINEAHOM NU" + - "MBER TENAHOM NUMBER TWENTYAHOM SIGN SMALL SECTIONAHOM SIGN SECTIONAHOM S" + - "IGN RULAIAHOM SYMBOL VIWARANG CITI CAPITAL LETTER NGAAWARANG CITI CAPITA" + - "L LETTER AWARANG CITI CAPITAL LETTER WIWARANG CITI CAPITAL LETTER YUWARA" + - "NG CITI CAPITAL LETTER YAWARANG CITI CAPITAL LETTER YOWARANG CITI CAPITA" + - "L LETTER IIWARANG CITI CAPITAL LETTER UUWARANG CITI CAPITAL LETTER EWARA" + - "NG CITI CAPITAL LETTER OWARANG CITI CAPITAL LETTER ANGWARANG CITI CAPITA" + - "L LETTER GAWARANG CITI CAPITAL LETTER KOWARANG CITI CAPITAL LETTER ENYWA" + - "RANG CITI CAPITAL LETTER YUJWARANG CITI CAPITAL LETTER UCWARANG CITI CAP" + - "ITAL LETTER ENNWARANG CITI CAPITAL LETTER ODDWARANG CITI CAPITAL LETTER " + - "TTEWARANG CITI CAPITAL LETTER NUNGWARANG CITI CAPITAL LETTER DAWARANG CI" + - "TI CAPITAL LETTER ATWARANG CITI CAPITAL LETTER AMWARANG CITI CAPITAL LET" + - "TER BUWARANG CITI CAPITAL LETTER PUWARANG CITI CAPITAL LETTER HIYOWARANG" + - " CITI CAPITAL LETTER HOLOWARANG CITI CAPITAL LETTER HORRWARANG CITI CAPI" + - "TAL LETTER HARWARANG CITI CAPITAL LETTER SSUUWARANG CITI CAPITAL LETTER " + - "SIIWARANG CITI CAPITAL LETTER VIYOWARANG CITI SMALL LETTER NGAAWARANG CI" + - "TI SMALL LETTER AWARANG CITI SMALL LETTER WIWARANG CITI SMALL LETTER YUW" + - "ARANG CITI SMALL LETTER YAWARANG CITI SMALL LETTER YOWARANG CITI SMALL L" + - "ETTER IIWARANG CITI SMALL LETTER UUWARANG CITI SMALL LETTER EWARANG CITI" + - " SMALL LETTER OWARANG CITI SMALL LETTER ANGWARANG CITI SMALL LETTER GAWA" + - "RANG CITI SMALL LETTER KOWARANG CITI SMALL LETTER ENYWARANG CITI SMALL L" + - "ETTER YUJWARANG CITI SMALL LETTER UCWARANG CITI SMALL LETTER ENNWARANG C" + - "ITI SMALL LETTER ODDWARANG CITI SMALL LETTER TTEWARANG CITI SMALL LETTER" + - " NUNGWARANG CITI SMALL LETTER DAWARANG CITI SMALL LETTER ATWARANG CITI S" + - "MALL LETTER AMWARANG CITI SMALL LETTER BUWARANG CITI SMALL LETTER PUWARA" + - "NG CITI SMALL LETTER HIYOWARANG CITI SMALL LETTER HOLOWARANG CITI SMALL " + - "LETTER HORRWARANG CITI SMALL LETTER HARWARANG CITI SMALL LETTER SSUUWARA" + - "NG CITI SMALL LETTER SIIWARANG CITI SMALL LETTER VIYOWARANG CITI DIGIT Z" + - "EROWARANG CITI DIGIT ONEWARANG CITI DIGIT TWOWARANG CITI DIGIT THREEWARA" + - "NG CITI DIGIT FOURWARANG CITI DIGIT FIVEWARANG CITI DIGIT SIXWARANG CITI" + - " DIGIT SEVENWARANG CITI DIGIT EIGHTWARANG CITI DIGIT NINEWARANG CITI NUM" + - "BER TENWARANG CITI NUMBER TWENTYWARANG CITI NUMBER THIRTYWARANG CITI NUM" + - "BER FORTYWARANG CITI NUMBER FIFTYWARANG CITI NUMBER SIXTYWARANG CITI NUM" + - "BER SEVENTYWARANG CITI NUMBER EIGHTYWARANG CITI NUMBER NINETYWARANG CITI" + - " OMPAU CIN HAU LETTER PAPAU CIN HAU LETTER KAPAU CIN HAU LETTER LAPAU CI" + - "N HAU LETTER MAPAU CIN HAU LETTER DAPAU CIN HAU LETTER ZAPAU CIN HAU LET" + - "TER VAPAU CIN HAU LETTER NGAPAU CIN HAU LETTER HAPAU CIN HAU LETTER GAPA" + - "U CIN HAU LETTER KHAPAU CIN HAU LETTER SAPAU CIN HAU LETTER BAPAU CIN HA" + - "U LETTER CAPAU CIN HAU LETTER TAPAU CIN HAU LETTER THAPAU CIN HAU LETTER" + - " NAPAU CIN HAU LETTER PHAPAU CIN HAU LETTER RAPAU CIN HAU LETTER FAPAU C" + - "IN HAU LETTER CHAPAU CIN HAU LETTER APAU CIN HAU LETTER EPAU CIN HAU LET" + - "TER IPAU CIN HAU LETTER OPAU CIN HAU LETTER UPAU CIN HAU LETTER UAPAU CI" + - "N HAU LETTER IAPAU CIN HAU LETTER FINAL PPAU CIN HAU LETTER FINAL KPAU C" + - "IN HAU LETTER FINAL TPAU CIN HAU LETTER FINAL MPAU CIN HAU LETTER FINAL " + - "NPAU CIN HAU LETTER FINAL LPAU CIN HAU LETTER FINAL WPAU CIN HAU LETTER " + - "FINAL NGPAU CIN HAU LETTER FINAL YPAU CIN HAU RISING TONE LONGPAU CIN HA" + - "U RISING TONEPAU CIN HAU SANDHI GLOTTAL STOPPAU CIN HAU RISING TONE LONG" + - " FINALPAU CIN HAU RISING TONE FINALPAU CIN HAU SANDHI GLOTTAL STOP FINAL" + - "PAU CIN HAU SANDHI TONE LONGPAU CIN HAU SANDHI TONEPAU CIN HAU SANDHI TO" + - "NE LONG FINALPAU CIN HAU SANDHI TONE FINALPAU CIN HAU MID-LEVEL TONEPAU " + - "CIN HAU GLOTTAL STOP VARIANTPAU CIN HAU MID-LEVEL TONE LONG FINALPAU CIN" + - " HAU MID-LEVEL TONE FINALPAU CIN HAU LOW-FALLING TONE LONGPAU CIN HAU LO") + ("" + - "W-FALLING TONEPAU CIN HAU GLOTTAL STOPPAU CIN HAU LOW-FALLING TONE LONG " + - "FINALPAU CIN HAU LOW-FALLING TONE FINALPAU CIN HAU GLOTTAL STOP FINALBHA" + - "IKSUKI LETTER ABHAIKSUKI LETTER AABHAIKSUKI LETTER IBHAIKSUKI LETTER IIB" + - "HAIKSUKI LETTER UBHAIKSUKI LETTER UUBHAIKSUKI LETTER VOCALIC RBHAIKSUKI " + - "LETTER VOCALIC RRBHAIKSUKI LETTER VOCALIC LBHAIKSUKI LETTER EBHAIKSUKI L" + - "ETTER AIBHAIKSUKI LETTER OBHAIKSUKI LETTER AUBHAIKSUKI LETTER KABHAIKSUK" + - "I LETTER KHABHAIKSUKI LETTER GABHAIKSUKI LETTER GHABHAIKSUKI LETTER NGAB" + - "HAIKSUKI LETTER CABHAIKSUKI LETTER CHABHAIKSUKI LETTER JABHAIKSUKI LETTE" + - "R JHABHAIKSUKI LETTER NYABHAIKSUKI LETTER TTABHAIKSUKI LETTER TTHABHAIKS" + - "UKI LETTER DDABHAIKSUKI LETTER DDHABHAIKSUKI LETTER NNABHAIKSUKI LETTER " + - "TABHAIKSUKI LETTER THABHAIKSUKI LETTER DABHAIKSUKI LETTER DHABHAIKSUKI L" + - "ETTER NABHAIKSUKI LETTER PABHAIKSUKI LETTER PHABHAIKSUKI LETTER BABHAIKS" + - "UKI LETTER BHABHAIKSUKI LETTER MABHAIKSUKI LETTER YABHAIKSUKI LETTER RAB" + - "HAIKSUKI LETTER LABHAIKSUKI LETTER VABHAIKSUKI LETTER SHABHAIKSUKI LETTE" + - "R SSABHAIKSUKI LETTER SABHAIKSUKI LETTER HABHAIKSUKI VOWEL SIGN AABHAIKS" + - "UKI VOWEL SIGN IBHAIKSUKI VOWEL SIGN IIBHAIKSUKI VOWEL SIGN UBHAIKSUKI V" + - "OWEL SIGN UUBHAIKSUKI VOWEL SIGN VOCALIC RBHAIKSUKI VOWEL SIGN VOCALIC R" + - "RBHAIKSUKI VOWEL SIGN VOCALIC LBHAIKSUKI VOWEL SIGN EBHAIKSUKI VOWEL SIG" + - "N AIBHAIKSUKI VOWEL SIGN OBHAIKSUKI VOWEL SIGN AUBHAIKSUKI SIGN CANDRABI" + - "NDUBHAIKSUKI SIGN ANUSVARABHAIKSUKI SIGN VISARGABHAIKSUKI SIGN VIRAMABHA" + - "IKSUKI SIGN AVAGRAHABHAIKSUKI DANDABHAIKSUKI DOUBLE DANDABHAIKSUKI WORD " + - "SEPARATORBHAIKSUKI GAP FILLER-1BHAIKSUKI GAP FILLER-2BHAIKSUKI DIGIT ZER" + - "OBHAIKSUKI DIGIT ONEBHAIKSUKI DIGIT TWOBHAIKSUKI DIGIT THREEBHAIKSUKI DI" + - "GIT FOURBHAIKSUKI DIGIT FIVEBHAIKSUKI DIGIT SIXBHAIKSUKI DIGIT SEVENBHAI" + - "KSUKI DIGIT EIGHTBHAIKSUKI DIGIT NINEBHAIKSUKI NUMBER ONEBHAIKSUKI NUMBE" + - "R TWOBHAIKSUKI NUMBER THREEBHAIKSUKI NUMBER FOURBHAIKSUKI NUMBER FIVEBHA" + - "IKSUKI NUMBER SIXBHAIKSUKI NUMBER SEVENBHAIKSUKI NUMBER EIGHTBHAIKSUKI N" + - "UMBER NINEBHAIKSUKI NUMBER TENBHAIKSUKI NUMBER TWENTYBHAIKSUKI NUMBER TH" + - "IRTYBHAIKSUKI NUMBER FORTYBHAIKSUKI NUMBER FIFTYBHAIKSUKI NUMBER SIXTYBH" + - "AIKSUKI NUMBER SEVENTYBHAIKSUKI NUMBER EIGHTYBHAIKSUKI NUMBER NINETYBHAI" + - "KSUKI HUNDREDS UNIT MARKMARCHEN HEAD MARKMARCHEN MARK SHADMARCHEN LETTER" + - " KAMARCHEN LETTER KHAMARCHEN LETTER GAMARCHEN LETTER NGAMARCHEN LETTER C" + - "AMARCHEN LETTER CHAMARCHEN LETTER JAMARCHEN LETTER NYAMARCHEN LETTER TAM" + - "ARCHEN LETTER THAMARCHEN LETTER DAMARCHEN LETTER NAMARCHEN LETTER PAMARC" + - "HEN LETTER PHAMARCHEN LETTER BAMARCHEN LETTER MAMARCHEN LETTER TSAMARCHE" + - "N LETTER TSHAMARCHEN LETTER DZAMARCHEN LETTER WAMARCHEN LETTER ZHAMARCHE" + - "N LETTER ZAMARCHEN LETTER -AMARCHEN LETTER YAMARCHEN LETTER RAMARCHEN LE" + - "TTER LAMARCHEN LETTER SHAMARCHEN LETTER SAMARCHEN LETTER HAMARCHEN LETTE" + - "R AMARCHEN SUBJOINED LETTER KAMARCHEN SUBJOINED LETTER KHAMARCHEN SUBJOI" + - "NED LETTER GAMARCHEN SUBJOINED LETTER NGAMARCHEN SUBJOINED LETTER CAMARC" + - "HEN SUBJOINED LETTER CHAMARCHEN SUBJOINED LETTER JAMARCHEN SUBJOINED LET" + - "TER NYAMARCHEN SUBJOINED LETTER TAMARCHEN SUBJOINED LETTER THAMARCHEN SU" + - "BJOINED LETTER DAMARCHEN SUBJOINED LETTER NAMARCHEN SUBJOINED LETTER PAM" + - "ARCHEN SUBJOINED LETTER PHAMARCHEN SUBJOINED LETTER BAMARCHEN SUBJOINED " + - "LETTER MAMARCHEN SUBJOINED LETTER TSAMARCHEN SUBJOINED LETTER TSHAMARCHE" + - "N SUBJOINED LETTER DZAMARCHEN SUBJOINED LETTER WAMARCHEN SUBJOINED LETTE" + - "R ZHAMARCHEN SUBJOINED LETTER ZAMARCHEN SUBJOINED LETTER YAMARCHEN SUBJO" + - "INED LETTER RAMARCHEN SUBJOINED LETTER LAMARCHEN SUBJOINED LETTER SHAMAR" + - "CHEN SUBJOINED LETTER SAMARCHEN SUBJOINED LETTER HAMARCHEN SUBJOINED LET" + - "TER AMARCHEN VOWEL SIGN AAMARCHEN VOWEL SIGN IMARCHEN VOWEL SIGN UMARCHE" + - "N VOWEL SIGN EMARCHEN VOWEL SIGN OMARCHEN SIGN ANUSVARAMARCHEN SIGN CAND" + - "RABINDUCUNEIFORM SIGN ACUNEIFORM SIGN A TIMES ACUNEIFORM SIGN A TIMES BA" + - "DCUNEIFORM SIGN A TIMES GAN2 TENUCUNEIFORM SIGN A TIMES HACUNEIFORM SIGN" + - " A TIMES IGICUNEIFORM SIGN A TIMES LAGAR GUNUCUNEIFORM SIGN A TIMES MUSH" + - "CUNEIFORM SIGN A TIMES SAGCUNEIFORM SIGN A2CUNEIFORM SIGN ABCUNEIFORM SI" + - "GN AB TIMES ASH2CUNEIFORM SIGN AB TIMES DUN3 GUNUCUNEIFORM SIGN AB TIMES" + - " GALCUNEIFORM SIGN AB TIMES GAN2 TENUCUNEIFORM SIGN AB TIMES HACUNEIFORM" + - " SIGN AB TIMES IGI GUNUCUNEIFORM SIGN AB TIMES IMINCUNEIFORM SIGN AB TIM" + - "ES LAGABCUNEIFORM SIGN AB TIMES SHESHCUNEIFORM SIGN AB TIMES U PLUS U PL" + - "US UCUNEIFORM SIGN AB GUNUCUNEIFORM SIGN AB2CUNEIFORM SIGN AB2 TIMES BAL" + - "AGCUNEIFORM SIGN AB2 TIMES GAN2 TENUCUNEIFORM SIGN AB2 TIMES ME PLUS ENC" + - "UNEIFORM SIGN AB2 TIMES SHA3CUNEIFORM SIGN AB2 TIMES TAK4CUNEIFORM SIGN " + - "ADCUNEIFORM SIGN AKCUNEIFORM SIGN AK TIMES ERIN2CUNEIFORM SIGN AK TIMES " + - "SHITA PLUS GISHCUNEIFORM SIGN ALCUNEIFORM SIGN AL TIMES ALCUNEIFORM SIGN") + ("" + - " AL TIMES DIM2CUNEIFORM SIGN AL TIMES GISHCUNEIFORM SIGN AL TIMES HACUNE" + - "IFORM SIGN AL TIMES KAD3CUNEIFORM SIGN AL TIMES KICUNEIFORM SIGN AL TIME" + - "S SHECUNEIFORM SIGN AL TIMES USHCUNEIFORM SIGN ALANCUNEIFORM SIGN ALEPHC" + - "UNEIFORM SIGN AMARCUNEIFORM SIGN AMAR TIMES SHECUNEIFORM SIGN ANCUNEIFOR" + - "M SIGN AN OVER ANCUNEIFORM SIGN AN THREE TIMESCUNEIFORM SIGN AN PLUS NAG" + - "A OPPOSING AN PLUS NAGACUNEIFORM SIGN AN PLUS NAGA SQUAREDCUNEIFORM SIGN" + - " ANSHECUNEIFORM SIGN APINCUNEIFORM SIGN ARADCUNEIFORM SIGN ARAD TIMES KU" + - "RCUNEIFORM SIGN ARKABCUNEIFORM SIGN ASAL2CUNEIFORM SIGN ASHCUNEIFORM SIG" + - "N ASH ZIDA TENUCUNEIFORM SIGN ASH KABA TENUCUNEIFORM SIGN ASH OVER ASH T" + - "UG2 OVER TUG2 TUG2 OVER TUG2 PAPCUNEIFORM SIGN ASH OVER ASH OVER ASHCUNE" + - "IFORM SIGN ASH OVER ASH OVER ASH CROSSING ASH OVER ASH OVER ASHCUNEIFORM" + - " SIGN ASH2CUNEIFORM SIGN ASHGABCUNEIFORM SIGN BACUNEIFORM SIGN BADCUNEIF" + - "ORM SIGN BAG3CUNEIFORM SIGN BAHAR2CUNEIFORM SIGN BALCUNEIFORM SIGN BAL O" + - "VER BALCUNEIFORM SIGN BALAGCUNEIFORM SIGN BARCUNEIFORM SIGN BARA2CUNEIFO" + - "RM SIGN BICUNEIFORM SIGN BI TIMES ACUNEIFORM SIGN BI TIMES GARCUNEIFORM " + - "SIGN BI TIMES IGI GUNUCUNEIFORM SIGN BUCUNEIFORM SIGN BU OVER BU ABCUNEI" + - "FORM SIGN BU OVER BU UNCUNEIFORM SIGN BU CROSSING BUCUNEIFORM SIGN BULUG" + - "CUNEIFORM SIGN BULUG OVER BULUGCUNEIFORM SIGN BURCUNEIFORM SIGN BUR2CUNE" + - "IFORM SIGN DACUNEIFORM SIGN DAGCUNEIFORM SIGN DAG KISIM5 TIMES A PLUS MA" + - "SHCUNEIFORM SIGN DAG KISIM5 TIMES AMARCUNEIFORM SIGN DAG KISIM5 TIMES BA" + - "LAGCUNEIFORM SIGN DAG KISIM5 TIMES BICUNEIFORM SIGN DAG KISIM5 TIMES GAC" + - "UNEIFORM SIGN DAG KISIM5 TIMES GA PLUS MASHCUNEIFORM SIGN DAG KISIM5 TIM" + - "ES GICUNEIFORM SIGN DAG KISIM5 TIMES GIR2CUNEIFORM SIGN DAG KISIM5 TIMES" + - " GUDCUNEIFORM SIGN DAG KISIM5 TIMES HACUNEIFORM SIGN DAG KISIM5 TIMES IR" + - "CUNEIFORM SIGN DAG KISIM5 TIMES IR PLUS LUCUNEIFORM SIGN DAG KISIM5 TIME" + - "S KAKCUNEIFORM SIGN DAG KISIM5 TIMES LACUNEIFORM SIGN DAG KISIM5 TIMES L" + - "UCUNEIFORM SIGN DAG KISIM5 TIMES LU PLUS MASH2CUNEIFORM SIGN DAG KISIM5 " + - "TIMES LUMCUNEIFORM SIGN DAG KISIM5 TIMES NECUNEIFORM SIGN DAG KISIM5 TIM" + - "ES PAP PLUS PAPCUNEIFORM SIGN DAG KISIM5 TIMES SICUNEIFORM SIGN DAG KISI" + - "M5 TIMES TAK4CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS GIR2CUNEIFORM SIGN " + - "DAG KISIM5 TIMES USHCUNEIFORM SIGN DAMCUNEIFORM SIGN DARCUNEIFORM SIGN D" + - "ARA3CUNEIFORM SIGN DARA4CUNEIFORM SIGN DICUNEIFORM SIGN DIBCUNEIFORM SIG" + - "N DIMCUNEIFORM SIGN DIM TIMES SHECUNEIFORM SIGN DIM2CUNEIFORM SIGN DINCU" + - "NEIFORM SIGN DIN KASKAL U GUNU DISHCUNEIFORM SIGN DISHCUNEIFORM SIGN DUC" + - "UNEIFORM SIGN DU OVER DUCUNEIFORM SIGN DU GUNUCUNEIFORM SIGN DU SHESHIGC" + - "UNEIFORM SIGN DUBCUNEIFORM SIGN DUB TIMES ESH2CUNEIFORM SIGN DUB2CUNEIFO" + - "RM SIGN DUGCUNEIFORM SIGN DUGUDCUNEIFORM SIGN DUHCUNEIFORM SIGN DUNCUNEI" + - "FORM SIGN DUN3CUNEIFORM SIGN DUN3 GUNUCUNEIFORM SIGN DUN3 GUNU GUNUCUNEI" + - "FORM SIGN DUN4CUNEIFORM SIGN DUR2CUNEIFORM SIGN ECUNEIFORM SIGN E TIMES " + - "PAPCUNEIFORM SIGN E OVER E NUN OVER NUNCUNEIFORM SIGN E2CUNEIFORM SIGN E" + - "2 TIMES A PLUS HA PLUS DACUNEIFORM SIGN E2 TIMES GARCUNEIFORM SIGN E2 TI" + - "MES MICUNEIFORM SIGN E2 TIMES SALCUNEIFORM SIGN E2 TIMES SHECUNEIFORM SI" + - "GN E2 TIMES UCUNEIFORM SIGN EDINCUNEIFORM SIGN EGIRCUNEIFORM SIGN ELCUNE" + - "IFORM SIGN ENCUNEIFORM SIGN EN TIMES GAN2CUNEIFORM SIGN EN TIMES GAN2 TE" + - "NUCUNEIFORM SIGN EN TIMES MECUNEIFORM SIGN EN CROSSING ENCUNEIFORM SIGN " + - "EN OPPOSING ENCUNEIFORM SIGN EN SQUAREDCUNEIFORM SIGN ERENCUNEIFORM SIGN" + - " ERIN2CUNEIFORM SIGN ESH2CUNEIFORM SIGN EZENCUNEIFORM SIGN EZEN TIMES AC" + - "UNEIFORM SIGN EZEN TIMES A PLUS LALCUNEIFORM SIGN EZEN TIMES A PLUS LAL " + - "TIMES LALCUNEIFORM SIGN EZEN TIMES ANCUNEIFORM SIGN EZEN TIMES BADCUNEIF" + - "ORM SIGN EZEN TIMES DUN3 GUNUCUNEIFORM SIGN EZEN TIMES DUN3 GUNU GUNUCUN" + - "EIFORM SIGN EZEN TIMES HACUNEIFORM SIGN EZEN TIMES HA GUNUCUNEIFORM SIGN" + - " EZEN TIMES IGI GUNUCUNEIFORM SIGN EZEN TIMES KASKALCUNEIFORM SIGN EZEN " + - "TIMES KASKAL SQUAREDCUNEIFORM SIGN EZEN TIMES KU3CUNEIFORM SIGN EZEN TIM" + - "ES LACUNEIFORM SIGN EZEN TIMES LAL TIMES LALCUNEIFORM SIGN EZEN TIMES LI" + - "CUNEIFORM SIGN EZEN TIMES LUCUNEIFORM SIGN EZEN TIMES U2CUNEIFORM SIGN E" + - "ZEN TIMES UDCUNEIFORM SIGN GACUNEIFORM SIGN GA GUNUCUNEIFORM SIGN GA2CUN" + - "EIFORM SIGN GA2 TIMES A PLUS DA PLUS HACUNEIFORM SIGN GA2 TIMES A PLUS H" + - "ACUNEIFORM SIGN GA2 TIMES A PLUS IGICUNEIFORM SIGN GA2 TIMES AB2 TENU PL" + - "US TABCUNEIFORM SIGN GA2 TIMES ANCUNEIFORM SIGN GA2 TIMES ASHCUNEIFORM S" + - "IGN GA2 TIMES ASH2 PLUS GALCUNEIFORM SIGN GA2 TIMES BADCUNEIFORM SIGN GA" + - "2 TIMES BAR PLUS RACUNEIFORM SIGN GA2 TIMES BURCUNEIFORM SIGN GA2 TIMES " + - "BUR PLUS RACUNEIFORM SIGN GA2 TIMES DACUNEIFORM SIGN GA2 TIMES DICUNEIFO" + - "RM SIGN GA2 TIMES DIM TIMES SHECUNEIFORM SIGN GA2 TIMES DUBCUNEIFORM SIG" + - "N GA2 TIMES ELCUNEIFORM SIGN GA2 TIMES EL PLUS LACUNEIFORM SIGN GA2 TIME") + ("" + - "S ENCUNEIFORM SIGN GA2 TIMES EN TIMES GAN2 TENUCUNEIFORM SIGN GA2 TIMES " + - "GAN2 TENUCUNEIFORM SIGN GA2 TIMES GARCUNEIFORM SIGN GA2 TIMES GICUNEIFOR" + - "M SIGN GA2 TIMES GI4CUNEIFORM SIGN GA2 TIMES GI4 PLUS ACUNEIFORM SIGN GA" + - "2 TIMES GIR2 PLUS SUCUNEIFORM SIGN GA2 TIMES HA PLUS LU PLUS ESH2CUNEIFO" + - "RM SIGN GA2 TIMES HALCUNEIFORM SIGN GA2 TIMES HAL PLUS LACUNEIFORM SIGN " + - "GA2 TIMES HI PLUS LICUNEIFORM SIGN GA2 TIMES HUB2CUNEIFORM SIGN GA2 TIME" + - "S IGI GUNUCUNEIFORM SIGN GA2 TIMES ISH PLUS HU PLUS ASHCUNEIFORM SIGN GA" + - "2 TIMES KAKCUNEIFORM SIGN GA2 TIMES KASKALCUNEIFORM SIGN GA2 TIMES KIDCU" + - "NEIFORM SIGN GA2 TIMES KID PLUS LALCUNEIFORM SIGN GA2 TIMES KU3 PLUS ANC" + - "UNEIFORM SIGN GA2 TIMES LACUNEIFORM SIGN GA2 TIMES ME PLUS ENCUNEIFORM S" + - "IGN GA2 TIMES MICUNEIFORM SIGN GA2 TIMES NUNCUNEIFORM SIGN GA2 TIMES NUN" + - " OVER NUNCUNEIFORM SIGN GA2 TIMES PACUNEIFORM SIGN GA2 TIMES SALCUNEIFOR" + - "M SIGN GA2 TIMES SARCUNEIFORM SIGN GA2 TIMES SHECUNEIFORM SIGN GA2 TIMES" + - " SHE PLUS TURCUNEIFORM SIGN GA2 TIMES SHIDCUNEIFORM SIGN GA2 TIMES SUMCU" + - "NEIFORM SIGN GA2 TIMES TAK4CUNEIFORM SIGN GA2 TIMES UCUNEIFORM SIGN GA2 " + - "TIMES UDCUNEIFORM SIGN GA2 TIMES UD PLUS DUCUNEIFORM SIGN GA2 OVER GA2CU" + - "NEIFORM SIGN GABACUNEIFORM SIGN GABA CROSSING GABACUNEIFORM SIGN GADCUNE" + - "IFORM SIGN GAD OVER GAD GAR OVER GARCUNEIFORM SIGN GALCUNEIFORM SIGN GAL" + - " GAD OVER GAD GAR OVER GARCUNEIFORM SIGN GALAMCUNEIFORM SIGN GAMCUNEIFOR" + - "M SIGN GANCUNEIFORM SIGN GAN2CUNEIFORM SIGN GAN2 TENUCUNEIFORM SIGN GAN2" + - " OVER GAN2CUNEIFORM SIGN GAN2 CROSSING GAN2CUNEIFORM SIGN GARCUNEIFORM S" + - "IGN GAR3CUNEIFORM SIGN GASHANCUNEIFORM SIGN GESHTINCUNEIFORM SIGN GESHTI" + - "N TIMES KURCUNEIFORM SIGN GICUNEIFORM SIGN GI TIMES ECUNEIFORM SIGN GI T" + - "IMES UCUNEIFORM SIGN GI CROSSING GICUNEIFORM SIGN GI4CUNEIFORM SIGN GI4 " + - "OVER GI4CUNEIFORM SIGN GI4 CROSSING GI4CUNEIFORM SIGN GIDIMCUNEIFORM SIG" + - "N GIR2CUNEIFORM SIGN GIR2 GUNUCUNEIFORM SIGN GIR3CUNEIFORM SIGN GIR3 TIM" + - "ES A PLUS IGICUNEIFORM SIGN GIR3 TIMES GAN2 TENUCUNEIFORM SIGN GIR3 TIME" + - "S IGICUNEIFORM SIGN GIR3 TIMES LU PLUS IGICUNEIFORM SIGN GIR3 TIMES PACU" + - "NEIFORM SIGN GISALCUNEIFORM SIGN GISHCUNEIFORM SIGN GISH CROSSING GISHCU" + - "NEIFORM SIGN GISH TIMES BADCUNEIFORM SIGN GISH TIMES TAK4CUNEIFORM SIGN " + - "GISH TENUCUNEIFORM SIGN GUCUNEIFORM SIGN GU CROSSING GUCUNEIFORM SIGN GU" + - "2CUNEIFORM SIGN GU2 TIMES KAKCUNEIFORM SIGN GU2 TIMES KAK TIMES IGI GUNU" + - "CUNEIFORM SIGN GU2 TIMES NUNCUNEIFORM SIGN GU2 TIMES SAL PLUS TUG2CUNEIF" + - "ORM SIGN GU2 GUNUCUNEIFORM SIGN GUDCUNEIFORM SIGN GUD TIMES A PLUS KURCU" + - "NEIFORM SIGN GUD TIMES KURCUNEIFORM SIGN GUD OVER GUD LUGALCUNEIFORM SIG" + - "N GULCUNEIFORM SIGN GUMCUNEIFORM SIGN GUM TIMES SHECUNEIFORM SIGN GURCUN" + - "EIFORM SIGN GUR7CUNEIFORM SIGN GURUNCUNEIFORM SIGN GURUSHCUNEIFORM SIGN " + - "HACUNEIFORM SIGN HA TENUCUNEIFORM SIGN HA GUNUCUNEIFORM SIGN HALCUNEIFOR" + - "M SIGN HICUNEIFORM SIGN HI TIMES ASHCUNEIFORM SIGN HI TIMES ASH2CUNEIFOR" + - "M SIGN HI TIMES BADCUNEIFORM SIGN HI TIMES DISHCUNEIFORM SIGN HI TIMES G" + - "ADCUNEIFORM SIGN HI TIMES KINCUNEIFORM SIGN HI TIMES NUNCUNEIFORM SIGN H" + - "I TIMES SHECUNEIFORM SIGN HI TIMES UCUNEIFORM SIGN HUCUNEIFORM SIGN HUB2" + - "CUNEIFORM SIGN HUB2 TIMES ANCUNEIFORM SIGN HUB2 TIMES HALCUNEIFORM SIGN " + - "HUB2 TIMES KASKALCUNEIFORM SIGN HUB2 TIMES LISHCUNEIFORM SIGN HUB2 TIMES" + - " UDCUNEIFORM SIGN HUL2CUNEIFORM SIGN ICUNEIFORM SIGN I ACUNEIFORM SIGN I" + - "BCUNEIFORM SIGN IDIMCUNEIFORM SIGN IDIM OVER IDIM BURCUNEIFORM SIGN IDIM" + - " OVER IDIM SQUAREDCUNEIFORM SIGN IGCUNEIFORM SIGN IGICUNEIFORM SIGN IGI " + - "DIBCUNEIFORM SIGN IGI RICUNEIFORM SIGN IGI OVER IGI SHIR OVER SHIR UD OV" + - "ER UDCUNEIFORM SIGN IGI GUNUCUNEIFORM SIGN ILCUNEIFORM SIGN IL TIMES GAN" + - "2 TENUCUNEIFORM SIGN IL2CUNEIFORM SIGN IMCUNEIFORM SIGN IM TIMES TAK4CUN" + - "EIFORM SIGN IM CROSSING IMCUNEIFORM SIGN IM OPPOSING IMCUNEIFORM SIGN IM" + - " SQUAREDCUNEIFORM SIGN IMINCUNEIFORM SIGN INCUNEIFORM SIGN IRCUNEIFORM S" + - "IGN ISHCUNEIFORM SIGN KACUNEIFORM SIGN KA TIMES ACUNEIFORM SIGN KA TIMES" + - " ADCUNEIFORM SIGN KA TIMES AD PLUS KU3CUNEIFORM SIGN KA TIMES ASH2CUNEIF" + - "ORM SIGN KA TIMES BADCUNEIFORM SIGN KA TIMES BALAGCUNEIFORM SIGN KA TIME" + - "S BARCUNEIFORM SIGN KA TIMES BICUNEIFORM SIGN KA TIMES ERIN2CUNEIFORM SI" + - "GN KA TIMES ESH2CUNEIFORM SIGN KA TIMES GACUNEIFORM SIGN KA TIMES GALCUN" + - "EIFORM SIGN KA TIMES GAN2 TENUCUNEIFORM SIGN KA TIMES GARCUNEIFORM SIGN " + - "KA TIMES GAR PLUS SHA3 PLUS ACUNEIFORM SIGN KA TIMES GICUNEIFORM SIGN KA" + - " TIMES GIR2CUNEIFORM SIGN KA TIMES GISH PLUS SARCUNEIFORM SIGN KA TIMES " + - "GISH CROSSING GISHCUNEIFORM SIGN KA TIMES GUCUNEIFORM SIGN KA TIMES GUR7" + - "CUNEIFORM SIGN KA TIMES IGICUNEIFORM SIGN KA TIMES IMCUNEIFORM SIGN KA T" + - "IMES KAKCUNEIFORM SIGN KA TIMES KICUNEIFORM SIGN KA TIMES KIDCUNEIFORM S" + - "IGN KA TIMES LICUNEIFORM SIGN KA TIMES LUCUNEIFORM SIGN KA TIMES MECUNEI") + ("" + - "FORM SIGN KA TIMES ME PLUS DUCUNEIFORM SIGN KA TIMES ME PLUS GICUNEIFORM" + - " SIGN KA TIMES ME PLUS TECUNEIFORM SIGN KA TIMES MICUNEIFORM SIGN KA TIM" + - "ES MI PLUS NUNUZCUNEIFORM SIGN KA TIMES NECUNEIFORM SIGN KA TIMES NUNCUN" + - "EIFORM SIGN KA TIMES PICUNEIFORM SIGN KA TIMES RUCUNEIFORM SIGN KA TIMES" + - " SACUNEIFORM SIGN KA TIMES SARCUNEIFORM SIGN KA TIMES SHACUNEIFORM SIGN " + - "KA TIMES SHECUNEIFORM SIGN KA TIMES SHIDCUNEIFORM SIGN KA TIMES SHUCUNEI" + - "FORM SIGN KA TIMES SIGCUNEIFORM SIGN KA TIMES SUHURCUNEIFORM SIGN KA TIM" + - "ES TARCUNEIFORM SIGN KA TIMES UCUNEIFORM SIGN KA TIMES U2CUNEIFORM SIGN " + - "KA TIMES UDCUNEIFORM SIGN KA TIMES UMUM TIMES PACUNEIFORM SIGN KA TIMES " + - "USHCUNEIFORM SIGN KA TIMES ZICUNEIFORM SIGN KA2CUNEIFORM SIGN KA2 CROSSI" + - "NG KA2CUNEIFORM SIGN KABCUNEIFORM SIGN KAD2CUNEIFORM SIGN KAD3CUNEIFORM " + - "SIGN KAD4CUNEIFORM SIGN KAD5CUNEIFORM SIGN KAD5 OVER KAD5CUNEIFORM SIGN " + - "KAKCUNEIFORM SIGN KAK TIMES IGI GUNUCUNEIFORM SIGN KALCUNEIFORM SIGN KAL" + - " TIMES BADCUNEIFORM SIGN KAL CROSSING KALCUNEIFORM SIGN KAM2CUNEIFORM SI" + - "GN KAM4CUNEIFORM SIGN KASKALCUNEIFORM SIGN KASKAL LAGAB TIMES U OVER LAG" + - "AB TIMES UCUNEIFORM SIGN KASKAL OVER KASKAL LAGAB TIMES U OVER LAGAB TIM" + - "ES UCUNEIFORM SIGN KESH2CUNEIFORM SIGN KICUNEIFORM SIGN KI TIMES BADCUNE" + - "IFORM SIGN KI TIMES UCUNEIFORM SIGN KI TIMES UDCUNEIFORM SIGN KIDCUNEIFO" + - "RM SIGN KINCUNEIFORM SIGN KISALCUNEIFORM SIGN KISHCUNEIFORM SIGN KISIM5C" + - "UNEIFORM SIGN KISIM5 OVER KISIM5CUNEIFORM SIGN KUCUNEIFORM SIGN KU OVER " + - "HI TIMES ASH2 KU OVER HI TIMES ASH2CUNEIFORM SIGN KU3CUNEIFORM SIGN KU4C" + - "UNEIFORM SIGN KU4 VARIANT FORMCUNEIFORM SIGN KU7CUNEIFORM SIGN KULCUNEIF" + - "ORM SIGN KUL GUNUCUNEIFORM SIGN KUNCUNEIFORM SIGN KURCUNEIFORM SIGN KUR " + - "OPPOSING KURCUNEIFORM SIGN KUSHU2CUNEIFORM SIGN KWU318CUNEIFORM SIGN LAC" + - "UNEIFORM SIGN LAGABCUNEIFORM SIGN LAGAB TIMES ACUNEIFORM SIGN LAGAB TIME" + - "S A PLUS DA PLUS HACUNEIFORM SIGN LAGAB TIMES A PLUS GARCUNEIFORM SIGN L" + - "AGAB TIMES A PLUS LALCUNEIFORM SIGN LAGAB TIMES ALCUNEIFORM SIGN LAGAB T" + - "IMES ANCUNEIFORM SIGN LAGAB TIMES ASH ZIDA TENUCUNEIFORM SIGN LAGAB TIME" + - "S BADCUNEIFORM SIGN LAGAB TIMES BICUNEIFORM SIGN LAGAB TIMES DARCUNEIFOR" + - "M SIGN LAGAB TIMES ENCUNEIFORM SIGN LAGAB TIMES GACUNEIFORM SIGN LAGAB T" + - "IMES GARCUNEIFORM SIGN LAGAB TIMES GUDCUNEIFORM SIGN LAGAB TIMES GUD PLU" + - "S GUDCUNEIFORM SIGN LAGAB TIMES HACUNEIFORM SIGN LAGAB TIMES HALCUNEIFOR" + - "M SIGN LAGAB TIMES HI TIMES NUNCUNEIFORM SIGN LAGAB TIMES IGI GUNUCUNEIF" + - "ORM SIGN LAGAB TIMES IMCUNEIFORM SIGN LAGAB TIMES IM PLUS HACUNEIFORM SI" + - "GN LAGAB TIMES IM PLUS LUCUNEIFORM SIGN LAGAB TIMES KICUNEIFORM SIGN LAG" + - "AB TIMES KINCUNEIFORM SIGN LAGAB TIMES KU3CUNEIFORM SIGN LAGAB TIMES KUL" + - "CUNEIFORM SIGN LAGAB TIMES KUL PLUS HI PLUS ACUNEIFORM SIGN LAGAB TIMES " + - "LAGABCUNEIFORM SIGN LAGAB TIMES LISHCUNEIFORM SIGN LAGAB TIMES LUCUNEIFO" + - "RM SIGN LAGAB TIMES LULCUNEIFORM SIGN LAGAB TIMES MECUNEIFORM SIGN LAGAB" + - " TIMES ME PLUS ENCUNEIFORM SIGN LAGAB TIMES MUSHCUNEIFORM SIGN LAGAB TIM" + - "ES NECUNEIFORM SIGN LAGAB TIMES SHE PLUS SUMCUNEIFORM SIGN LAGAB TIMES S" + - "HITA PLUS GISH PLUS ERIN2CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH TENU" + - "CUNEIFORM SIGN LAGAB TIMES SHU2CUNEIFORM SIGN LAGAB TIMES SHU2 PLUS SHU2" + - "CUNEIFORM SIGN LAGAB TIMES SUMCUNEIFORM SIGN LAGAB TIMES TAGCUNEIFORM SI" + - "GN LAGAB TIMES TAK4CUNEIFORM SIGN LAGAB TIMES TE PLUS A PLUS SU PLUS NAC" + - "UNEIFORM SIGN LAGAB TIMES UCUNEIFORM SIGN LAGAB TIMES U PLUS ACUNEIFORM " + - "SIGN LAGAB TIMES U PLUS U PLUS UCUNEIFORM SIGN LAGAB TIMES U2 PLUS ASHCU" + - "NEIFORM SIGN LAGAB TIMES UDCUNEIFORM SIGN LAGAB TIMES USHCUNEIFORM SIGN " + - "LAGAB SQUAREDCUNEIFORM SIGN LAGARCUNEIFORM SIGN LAGAR TIMES SHECUNEIFORM" + - " SIGN LAGAR TIMES SHE PLUS SUMCUNEIFORM SIGN LAGAR GUNUCUNEIFORM SIGN LA" + - "GAR GUNU OVER LAGAR GUNU SHECUNEIFORM SIGN LAHSHUCUNEIFORM SIGN LALCUNEI" + - "FORM SIGN LAL TIMES LALCUNEIFORM SIGN LAMCUNEIFORM SIGN LAM TIMES KURCUN" + - "EIFORM SIGN LAM TIMES KUR PLUS RUCUNEIFORM SIGN LICUNEIFORM SIGN LILCUNE" + - "IFORM SIGN LIMMU2CUNEIFORM SIGN LISHCUNEIFORM SIGN LUCUNEIFORM SIGN LU T" + - "IMES BADCUNEIFORM SIGN LU2CUNEIFORM SIGN LU2 TIMES ALCUNEIFORM SIGN LU2 " + - "TIMES BADCUNEIFORM SIGN LU2 TIMES ESH2CUNEIFORM SIGN LU2 TIMES ESH2 TENU" + - "CUNEIFORM SIGN LU2 TIMES GAN2 TENUCUNEIFORM SIGN LU2 TIMES HI TIMES BADC" + - "UNEIFORM SIGN LU2 TIMES IMCUNEIFORM SIGN LU2 TIMES KAD2CUNEIFORM SIGN LU" + - "2 TIMES KAD3CUNEIFORM SIGN LU2 TIMES KAD3 PLUS ASHCUNEIFORM SIGN LU2 TIM" + - "ES KICUNEIFORM SIGN LU2 TIMES LA PLUS ASHCUNEIFORM SIGN LU2 TIMES LAGABC" + - "UNEIFORM SIGN LU2 TIMES ME PLUS ENCUNEIFORM SIGN LU2 TIMES NECUNEIFORM S" + - "IGN LU2 TIMES NUCUNEIFORM SIGN LU2 TIMES SI PLUS ASHCUNEIFORM SIGN LU2 T" + - "IMES SIK2 PLUS BUCUNEIFORM SIGN LU2 TIMES TUG2CUNEIFORM SIGN LU2 TENUCUN" + - "EIFORM SIGN LU2 CROSSING LU2CUNEIFORM SIGN LU2 OPPOSING LU2CUNEIFORM SIG") + ("" + - "N LU2 SQUAREDCUNEIFORM SIGN LU2 SHESHIGCUNEIFORM SIGN LU3CUNEIFORM SIGN " + - "LUGALCUNEIFORM SIGN LUGAL OVER LUGALCUNEIFORM SIGN LUGAL OPPOSING LUGALC" + - "UNEIFORM SIGN LUGAL SHESHIGCUNEIFORM SIGN LUHCUNEIFORM SIGN LULCUNEIFORM" + - " SIGN LUMCUNEIFORM SIGN LUM OVER LUMCUNEIFORM SIGN LUM OVER LUM GAR OVER" + - " GARCUNEIFORM SIGN MACUNEIFORM SIGN MA TIMES TAK4CUNEIFORM SIGN MA GUNUC" + - "UNEIFORM SIGN MA2CUNEIFORM SIGN MAHCUNEIFORM SIGN MARCUNEIFORM SIGN MASH" + - "CUNEIFORM SIGN MASH2CUNEIFORM SIGN MECUNEIFORM SIGN MESCUNEIFORM SIGN MI" + - "CUNEIFORM SIGN MINCUNEIFORM SIGN MUCUNEIFORM SIGN MU OVER MUCUNEIFORM SI" + - "GN MUGCUNEIFORM SIGN MUG GUNUCUNEIFORM SIGN MUNSUBCUNEIFORM SIGN MURGU2C" + - "UNEIFORM SIGN MUSHCUNEIFORM SIGN MUSH TIMES ACUNEIFORM SIGN MUSH TIMES K" + - "URCUNEIFORM SIGN MUSH TIMES ZACUNEIFORM SIGN MUSH OVER MUSHCUNEIFORM SIG" + - "N MUSH OVER MUSH TIMES A PLUS NACUNEIFORM SIGN MUSH CROSSING MUSHCUNEIFO" + - "RM SIGN MUSH3CUNEIFORM SIGN MUSH3 TIMES ACUNEIFORM SIGN MUSH3 TIMES A PL" + - "US DICUNEIFORM SIGN MUSH3 TIMES DICUNEIFORM SIGN MUSH3 GUNUCUNEIFORM SIG" + - "N NACUNEIFORM SIGN NA2CUNEIFORM SIGN NAGACUNEIFORM SIGN NAGA INVERTEDCUN" + - "EIFORM SIGN NAGA TIMES SHU TENUCUNEIFORM SIGN NAGA OPPOSING NAGACUNEIFOR" + - "M SIGN NAGARCUNEIFORM SIGN NAM NUTILLUCUNEIFORM SIGN NAMCUNEIFORM SIGN N" + - "AM2CUNEIFORM SIGN NECUNEIFORM SIGN NE TIMES ACUNEIFORM SIGN NE TIMES UDC" + - "UNEIFORM SIGN NE SHESHIGCUNEIFORM SIGN NICUNEIFORM SIGN NI TIMES ECUNEIF" + - "ORM SIGN NI2CUNEIFORM SIGN NIMCUNEIFORM SIGN NIM TIMES GAN2 TENUCUNEIFOR" + - "M SIGN NIM TIMES GAR PLUS GAN2 TENUCUNEIFORM SIGN NINDA2CUNEIFORM SIGN N" + - "INDA2 TIMES ANCUNEIFORM SIGN NINDA2 TIMES ASHCUNEIFORM SIGN NINDA2 TIMES" + - " ASH PLUS ASHCUNEIFORM SIGN NINDA2 TIMES GUDCUNEIFORM SIGN NINDA2 TIMES " + - "ME PLUS GAN2 TENUCUNEIFORM SIGN NINDA2 TIMES NECUNEIFORM SIGN NINDA2 TIM" + - "ES NUNCUNEIFORM SIGN NINDA2 TIMES SHECUNEIFORM SIGN NINDA2 TIMES SHE PLU" + - "S A ANCUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASHCUNEIFORM SIGN NINDA2 TIME" + - "S SHE PLUS ASH PLUS ASHCUNEIFORM SIGN NINDA2 TIMES U2 PLUS ASHCUNEIFORM " + - "SIGN NINDA2 TIMES USHCUNEIFORM SIGN NISAGCUNEIFORM SIGN NUCUNEIFORM SIGN" + - " NU11CUNEIFORM SIGN NUNCUNEIFORM SIGN NUN LAGAR TIMES GARCUNEIFORM SIGN " + - "NUN LAGAR TIMES MASHCUNEIFORM SIGN NUN LAGAR TIMES SALCUNEIFORM SIGN NUN" + - " LAGAR TIMES SAL OVER NUN LAGAR TIMES SALCUNEIFORM SIGN NUN LAGAR TIMES " + - "USHCUNEIFORM SIGN NUN TENUCUNEIFORM SIGN NUN OVER NUNCUNEIFORM SIGN NUN " + - "CROSSING NUNCUNEIFORM SIGN NUN CROSSING NUN LAGAR OVER LAGARCUNEIFORM SI" + - "GN NUNUZCUNEIFORM SIGN NUNUZ AB2 TIMES ASHGABCUNEIFORM SIGN NUNUZ AB2 TI" + - "MES BICUNEIFORM SIGN NUNUZ AB2 TIMES DUGCUNEIFORM SIGN NUNUZ AB2 TIMES G" + - "UDCUNEIFORM SIGN NUNUZ AB2 TIMES IGI GUNUCUNEIFORM SIGN NUNUZ AB2 TIMES " + - "KAD3CUNEIFORM SIGN NUNUZ AB2 TIMES LACUNEIFORM SIGN NUNUZ AB2 TIMES NECU" + - "NEIFORM SIGN NUNUZ AB2 TIMES SILA3CUNEIFORM SIGN NUNUZ AB2 TIMES U2CUNEI" + - "FORM SIGN NUNUZ KISIM5 TIMES BICUNEIFORM SIGN NUNUZ KISIM5 TIMES BI UCUN" + - "EIFORM SIGN PACUNEIFORM SIGN PADCUNEIFORM SIGN PANCUNEIFORM SIGN PAPCUNE" + - "IFORM SIGN PESH2CUNEIFORM SIGN PICUNEIFORM SIGN PI TIMES ACUNEIFORM SIGN" + - " PI TIMES ABCUNEIFORM SIGN PI TIMES BICUNEIFORM SIGN PI TIMES BUCUNEIFOR" + - "M SIGN PI TIMES ECUNEIFORM SIGN PI TIMES ICUNEIFORM SIGN PI TIMES IBCUNE" + - "IFORM SIGN PI TIMES UCUNEIFORM SIGN PI TIMES U2CUNEIFORM SIGN PI CROSSIN" + - "G PICUNEIFORM SIGN PIRIGCUNEIFORM SIGN PIRIG TIMES KALCUNEIFORM SIGN PIR" + - "IG TIMES UDCUNEIFORM SIGN PIRIG TIMES ZACUNEIFORM SIGN PIRIG OPPOSING PI" + - "RIGCUNEIFORM SIGN RACUNEIFORM SIGN RABCUNEIFORM SIGN RICUNEIFORM SIGN RU" + - "CUNEIFORM SIGN SACUNEIFORM SIGN SAG NUTILLUCUNEIFORM SIGN SAGCUNEIFORM S" + - "IGN SAG TIMES ACUNEIFORM SIGN SAG TIMES DUCUNEIFORM SIGN SAG TIMES DUBCU" + - "NEIFORM SIGN SAG TIMES HACUNEIFORM SIGN SAG TIMES KAKCUNEIFORM SIGN SAG " + - "TIMES KURCUNEIFORM SIGN SAG TIMES LUMCUNEIFORM SIGN SAG TIMES MICUNEIFOR" + - "M SIGN SAG TIMES NUNCUNEIFORM SIGN SAG TIMES SALCUNEIFORM SIGN SAG TIMES" + - " SHIDCUNEIFORM SIGN SAG TIMES TABCUNEIFORM SIGN SAG TIMES U2CUNEIFORM SI" + - "GN SAG TIMES UBCUNEIFORM SIGN SAG TIMES UMCUNEIFORM SIGN SAG TIMES URCUN" + - "EIFORM SIGN SAG TIMES USHCUNEIFORM SIGN SAG OVER SAGCUNEIFORM SIGN SAG G" + - "UNUCUNEIFORM SIGN SALCUNEIFORM SIGN SAL LAGAB TIMES ASH2CUNEIFORM SIGN S" + - "ANGA2CUNEIFORM SIGN SARCUNEIFORM SIGN SHACUNEIFORM SIGN SHA3CUNEIFORM SI" + - "GN SHA3 TIMES ACUNEIFORM SIGN SHA3 TIMES BADCUNEIFORM SIGN SHA3 TIMES GI" + - "SHCUNEIFORM SIGN SHA3 TIMES NECUNEIFORM SIGN SHA3 TIMES SHU2CUNEIFORM SI" + - "GN SHA3 TIMES TURCUNEIFORM SIGN SHA3 TIMES UCUNEIFORM SIGN SHA3 TIMES U " + - "PLUS ACUNEIFORM SIGN SHA6CUNEIFORM SIGN SHAB6CUNEIFORM SIGN SHAR2CUNEIFO" + - "RM SIGN SHECUNEIFORM SIGN SHE HUCUNEIFORM SIGN SHE OVER SHE GAD OVER GAD" + - " GAR OVER GARCUNEIFORM SIGN SHE OVER SHE TAB OVER TAB GAR OVER GARCUNEIF" + - "ORM SIGN SHEG9CUNEIFORM SIGN SHENCUNEIFORM SIGN SHESHCUNEIFORM SIGN SHES") + ("" + - "H2CUNEIFORM SIGN SHESHLAMCUNEIFORM SIGN SHIDCUNEIFORM SIGN SHID TIMES AC" + - "UNEIFORM SIGN SHID TIMES IMCUNEIFORM SIGN SHIMCUNEIFORM SIGN SHIM TIMES " + - "ACUNEIFORM SIGN SHIM TIMES BALCUNEIFORM SIGN SHIM TIMES BULUGCUNEIFORM S" + - "IGN SHIM TIMES DINCUNEIFORM SIGN SHIM TIMES GARCUNEIFORM SIGN SHIM TIMES" + - " IGICUNEIFORM SIGN SHIM TIMES IGI GUNUCUNEIFORM SIGN SHIM TIMES KUSHU2CU" + - "NEIFORM SIGN SHIM TIMES LULCUNEIFORM SIGN SHIM TIMES MUGCUNEIFORM SIGN S" + - "HIM TIMES SALCUNEIFORM SIGN SHINIGCUNEIFORM SIGN SHIRCUNEIFORM SIGN SHIR" + - " TENUCUNEIFORM SIGN SHIR OVER SHIR BUR OVER BURCUNEIFORM SIGN SHITACUNEI" + - "FORM SIGN SHUCUNEIFORM SIGN SHU OVER INVERTED SHUCUNEIFORM SIGN SHU2CUNE" + - "IFORM SIGN SHUBURCUNEIFORM SIGN SICUNEIFORM SIGN SI GUNUCUNEIFORM SIGN S" + - "IGCUNEIFORM SIGN SIG4CUNEIFORM SIGN SIG4 OVER SIG4 SHU2CUNEIFORM SIGN SI" + - "K2CUNEIFORM SIGN SILA3CUNEIFORM SIGN SUCUNEIFORM SIGN SU OVER SUCUNEIFOR" + - "M SIGN SUDCUNEIFORM SIGN SUD2CUNEIFORM SIGN SUHURCUNEIFORM SIGN SUMCUNEI" + - "FORM SIGN SUMASHCUNEIFORM SIGN SURCUNEIFORM SIGN SUR9CUNEIFORM SIGN TACU" + - "NEIFORM SIGN TA ASTERISKCUNEIFORM SIGN TA TIMES HICUNEIFORM SIGN TA TIME" + - "S MICUNEIFORM SIGN TA GUNUCUNEIFORM SIGN TABCUNEIFORM SIGN TAB OVER TAB " + - "NI OVER NI DISH OVER DISHCUNEIFORM SIGN TAB SQUAREDCUNEIFORM SIGN TAGCUN" + - "EIFORM SIGN TAG TIMES BICUNEIFORM SIGN TAG TIMES GUDCUNEIFORM SIGN TAG T" + - "IMES SHECUNEIFORM SIGN TAG TIMES SHUCUNEIFORM SIGN TAG TIMES TUG2CUNEIFO" + - "RM SIGN TAG TIMES UDCUNEIFORM SIGN TAK4CUNEIFORM SIGN TARCUNEIFORM SIGN " + - "TECUNEIFORM SIGN TE GUNUCUNEIFORM SIGN TICUNEIFORM SIGN TI TENUCUNEIFORM" + - " SIGN TILCUNEIFORM SIGN TIRCUNEIFORM SIGN TIR TIMES TAK4CUNEIFORM SIGN T" + - "IR OVER TIRCUNEIFORM SIGN TIR OVER TIR GAD OVER GAD GAR OVER GARCUNEIFOR" + - "M SIGN TUCUNEIFORM SIGN TUG2CUNEIFORM SIGN TUKCUNEIFORM SIGN TUMCUNEIFOR" + - "M SIGN TURCUNEIFORM SIGN TUR OVER TUR ZA OVER ZACUNEIFORM SIGN UCUNEIFOR" + - "M SIGN U GUDCUNEIFORM SIGN U U UCUNEIFORM SIGN U OVER U PA OVER PA GAR O" + - "VER GARCUNEIFORM SIGN U OVER U SUR OVER SURCUNEIFORM SIGN U OVER U U REV" + - "ERSED OVER U REVERSEDCUNEIFORM SIGN U2CUNEIFORM SIGN UBCUNEIFORM SIGN UD" + - "CUNEIFORM SIGN UD KUSHU2CUNEIFORM SIGN UD TIMES BADCUNEIFORM SIGN UD TIM" + - "ES MICUNEIFORM SIGN UD TIMES U PLUS U PLUS UCUNEIFORM SIGN UD TIMES U PL" + - "US U PLUS U GUNUCUNEIFORM SIGN UD GUNUCUNEIFORM SIGN UD SHESHIGCUNEIFORM" + - " SIGN UD SHESHIG TIMES BADCUNEIFORM SIGN UDUGCUNEIFORM SIGN UMCUNEIFORM " + - "SIGN UM TIMES LAGABCUNEIFORM SIGN UM TIMES ME PLUS DACUNEIFORM SIGN UM T" + - "IMES SHA3CUNEIFORM SIGN UM TIMES UCUNEIFORM SIGN UMBINCUNEIFORM SIGN UMU" + - "MCUNEIFORM SIGN UMUM TIMES KASKALCUNEIFORM SIGN UMUM TIMES PACUNEIFORM S" + - "IGN UNCUNEIFORM SIGN UN GUNUCUNEIFORM SIGN URCUNEIFORM SIGN UR CROSSING " + - "URCUNEIFORM SIGN UR SHESHIGCUNEIFORM SIGN UR2CUNEIFORM SIGN UR2 TIMES A " + - "PLUS HACUNEIFORM SIGN UR2 TIMES A PLUS NACUNEIFORM SIGN UR2 TIMES ALCUNE" + - "IFORM SIGN UR2 TIMES HACUNEIFORM SIGN UR2 TIMES NUNCUNEIFORM SIGN UR2 TI" + - "MES U2CUNEIFORM SIGN UR2 TIMES U2 PLUS ASHCUNEIFORM SIGN UR2 TIMES U2 PL" + - "US BICUNEIFORM SIGN UR4CUNEIFORM SIGN URICUNEIFORM SIGN URI3CUNEIFORM SI" + - "GN URUCUNEIFORM SIGN URU TIMES ACUNEIFORM SIGN URU TIMES ASHGABCUNEIFORM" + - " SIGN URU TIMES BARCUNEIFORM SIGN URU TIMES DUNCUNEIFORM SIGN URU TIMES " + - "GACUNEIFORM SIGN URU TIMES GALCUNEIFORM SIGN URU TIMES GAN2 TENUCUNEIFOR" + - "M SIGN URU TIMES GARCUNEIFORM SIGN URU TIMES GUCUNEIFORM SIGN URU TIMES " + - "HACUNEIFORM SIGN URU TIMES IGICUNEIFORM SIGN URU TIMES IMCUNEIFORM SIGN " + - "URU TIMES ISHCUNEIFORM SIGN URU TIMES KICUNEIFORM SIGN URU TIMES LUMCUNE" + - "IFORM SIGN URU TIMES MINCUNEIFORM SIGN URU TIMES PACUNEIFORM SIGN URU TI" + - "MES SHECUNEIFORM SIGN URU TIMES SIG4CUNEIFORM SIGN URU TIMES TUCUNEIFORM" + - " SIGN URU TIMES U PLUS GUDCUNEIFORM SIGN URU TIMES UDCUNEIFORM SIGN URU " + - "TIMES URUDACUNEIFORM SIGN URUDACUNEIFORM SIGN URUDA TIMES UCUNEIFORM SIG" + - "N USHCUNEIFORM SIGN USH TIMES ACUNEIFORM SIGN USH TIMES KUCUNEIFORM SIGN" + - " USH TIMES KURCUNEIFORM SIGN USH TIMES TAK4CUNEIFORM SIGN USHXCUNEIFORM " + - "SIGN USH2CUNEIFORM SIGN USHUMXCUNEIFORM SIGN UTUKICUNEIFORM SIGN UZ3CUNE" + - "IFORM SIGN UZ3 TIMES KASKALCUNEIFORM SIGN UZUCUNEIFORM SIGN ZACUNEIFORM " + - "SIGN ZA TENUCUNEIFORM SIGN ZA SQUARED TIMES KURCUNEIFORM SIGN ZAGCUNEIFO" + - "RM SIGN ZAMXCUNEIFORM SIGN ZE2CUNEIFORM SIGN ZICUNEIFORM SIGN ZI OVER ZI" + - "CUNEIFORM SIGN ZI3CUNEIFORM SIGN ZIBCUNEIFORM SIGN ZIB KABA TENUCUNEIFOR" + - "M SIGN ZIGCUNEIFORM SIGN ZIZ2CUNEIFORM SIGN ZUCUNEIFORM SIGN ZU5CUNEIFOR" + - "M SIGN ZU5 TIMES ACUNEIFORM SIGN ZUBURCUNEIFORM SIGN ZUMCUNEIFORM SIGN K" + - "AP ELAMITECUNEIFORM SIGN AB TIMES NUNCUNEIFORM SIGN AB2 TIMES ACUNEIFORM" + - " SIGN AMAR TIMES KUGCUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS MASHCUNEIFOR" + - "M SIGN DAG3CUNEIFORM SIGN DISH PLUS SHUCUNEIFORM SIGN DUB TIMES SHECUNEI" + - "FORM SIGN EZEN TIMES GUDCUNEIFORM SIGN EZEN TIMES SHECUNEIFORM SIGN GA2 ") + ("" + - "TIMES AN PLUS KAK PLUS ACUNEIFORM SIGN GA2 TIMES ASH2CUNEIFORM SIGN GE22" + - "CUNEIFORM SIGN GIGCUNEIFORM SIGN HUSHCUNEIFORM SIGN KA TIMES ANSHECUNEIF" + - "ORM SIGN KA TIMES ASH3CUNEIFORM SIGN KA TIMES GISHCUNEIFORM SIGN KA TIME" + - "S GUDCUNEIFORM SIGN KA TIMES HI TIMES ASH2CUNEIFORM SIGN KA TIMES LUMCUN" + - "EIFORM SIGN KA TIMES PACUNEIFORM SIGN KA TIMES SHULCUNEIFORM SIGN KA TIM" + - "ES TUCUNEIFORM SIGN KA TIMES UR2CUNEIFORM SIGN LAGAB TIMES GICUNEIFORM S" + - "IGN LU2 SHESHIG TIMES BADCUNEIFORM SIGN LU2 TIMES ESH2 PLUS LALCUNEIFORM" + - " SIGN LU2 TIMES SHUCUNEIFORM SIGN MESHCUNEIFORM SIGN MUSH3 TIMES ZACUNEI" + - "FORM SIGN NA4CUNEIFORM SIGN NINCUNEIFORM SIGN NIN9CUNEIFORM SIGN NINDA2 " + - "TIMES BALCUNEIFORM SIGN NINDA2 TIMES GICUNEIFORM SIGN NU11 ROTATED NINET" + - "Y DEGREESCUNEIFORM SIGN PESH2 ASTERISKCUNEIFORM SIGN PIR2CUNEIFORM SIGN " + - "SAG TIMES IGI GUNUCUNEIFORM SIGN TI2CUNEIFORM SIGN UM TIMES MECUNEIFORM " + - "SIGN U UCUNEIFORM NUMERIC SIGN TWO ASHCUNEIFORM NUMERIC SIGN THREE ASHCU" + - "NEIFORM NUMERIC SIGN FOUR ASHCUNEIFORM NUMERIC SIGN FIVE ASHCUNEIFORM NU" + - "MERIC SIGN SIX ASHCUNEIFORM NUMERIC SIGN SEVEN ASHCUNEIFORM NUMERIC SIGN" + - " EIGHT ASHCUNEIFORM NUMERIC SIGN NINE ASHCUNEIFORM NUMERIC SIGN THREE DI" + - "SHCUNEIFORM NUMERIC SIGN FOUR DISHCUNEIFORM NUMERIC SIGN FIVE DISHCUNEIF" + - "ORM NUMERIC SIGN SIX DISHCUNEIFORM NUMERIC SIGN SEVEN DISHCUNEIFORM NUME" + - "RIC SIGN EIGHT DISHCUNEIFORM NUMERIC SIGN NINE DISHCUNEIFORM NUMERIC SIG" + - "N FOUR UCUNEIFORM NUMERIC SIGN FIVE UCUNEIFORM NUMERIC SIGN SIX UCUNEIFO" + - "RM NUMERIC SIGN SEVEN UCUNEIFORM NUMERIC SIGN EIGHT UCUNEIFORM NUMERIC S" + - "IGN NINE UCUNEIFORM NUMERIC SIGN ONE GESH2CUNEIFORM NUMERIC SIGN TWO GES" + - "H2CUNEIFORM NUMERIC SIGN THREE GESH2CUNEIFORM NUMERIC SIGN FOUR GESH2CUN" + - "EIFORM NUMERIC SIGN FIVE GESH2CUNEIFORM NUMERIC SIGN SIX GESH2CUNEIFORM " + - "NUMERIC SIGN SEVEN GESH2CUNEIFORM NUMERIC SIGN EIGHT GESH2CUNEIFORM NUME" + - "RIC SIGN NINE GESH2CUNEIFORM NUMERIC SIGN ONE GESHUCUNEIFORM NUMERIC SIG" + - "N TWO GESHUCUNEIFORM NUMERIC SIGN THREE GESHUCUNEIFORM NUMERIC SIGN FOUR" + - " GESHUCUNEIFORM NUMERIC SIGN FIVE GESHUCUNEIFORM NUMERIC SIGN TWO SHAR2C" + - "UNEIFORM NUMERIC SIGN THREE SHAR2CUNEIFORM NUMERIC SIGN THREE SHAR2 VARI" + - "ANT FORMCUNEIFORM NUMERIC SIGN FOUR SHAR2CUNEIFORM NUMERIC SIGN FIVE SHA" + - "R2CUNEIFORM NUMERIC SIGN SIX SHAR2CUNEIFORM NUMERIC SIGN SEVEN SHAR2CUNE" + - "IFORM NUMERIC SIGN EIGHT SHAR2CUNEIFORM NUMERIC SIGN NINE SHAR2CUNEIFORM" + - " NUMERIC SIGN ONE SHARUCUNEIFORM NUMERIC SIGN TWO SHARUCUNEIFORM NUMERIC" + - " SIGN THREE SHARUCUNEIFORM NUMERIC SIGN THREE SHARU VARIANT FORMCUNEIFOR" + - "M NUMERIC SIGN FOUR SHARUCUNEIFORM NUMERIC SIGN FIVE SHARUCUNEIFORM NUME" + - "RIC SIGN SHAR2 TIMES GAL PLUS DISHCUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL" + - " PLUS MINCUNEIFORM NUMERIC SIGN ONE BURUCUNEIFORM NUMERIC SIGN TWO BURUC" + - "UNEIFORM NUMERIC SIGN THREE BURUCUNEIFORM NUMERIC SIGN THREE BURU VARIAN" + - "T FORMCUNEIFORM NUMERIC SIGN FOUR BURUCUNEIFORM NUMERIC SIGN FIVE BURUCU" + - "NEIFORM NUMERIC SIGN THREE VARIANT FORM ESH16CUNEIFORM NUMERIC SIGN THRE" + - "E VARIANT FORM ESH21CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMUCUNEIF" + - "ORM NUMERIC SIGN FOUR VARIANT FORM LIMMU4CUNEIFORM NUMERIC SIGN FOUR VAR" + - "IANT FORM LIMMU ACUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU BCUNEIFO" + - "RM NUMERIC SIGN SIX VARIANT FORM ASH9CUNEIFORM NUMERIC SIGN SEVEN VARIAN" + - "T FORM IMIN3CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN ACUNEIFORM NU" + - "MERIC SIGN SEVEN VARIANT FORM IMIN BCUNEIFORM NUMERIC SIGN EIGHT VARIANT" + - " FORM USSUCUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU3CUNEIFORM NUMER" + - "IC SIGN NINE VARIANT FORM ILIMMUCUNEIFORM NUMERIC SIGN NINE VARIANT FORM" + - " ILIMMU3CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU4CUNEIFORM NUMERI" + - "C SIGN NINE VARIANT FORM ILIMMU ACUNEIFORM NUMERIC SIGN TWO ASH TENUCUNE" + - "IFORM NUMERIC SIGN THREE ASH TENUCUNEIFORM NUMERIC SIGN FOUR ASH TENUCUN" + - "EIFORM NUMERIC SIGN FIVE ASH TENUCUNEIFORM NUMERIC SIGN SIX ASH TENUCUNE" + - "IFORM NUMERIC SIGN ONE BAN2CUNEIFORM NUMERIC SIGN TWO BAN2CUNEIFORM NUME" + - "RIC SIGN THREE BAN2CUNEIFORM NUMERIC SIGN FOUR BAN2CUNEIFORM NUMERIC SIG" + - "N FOUR BAN2 VARIANT FORMCUNEIFORM NUMERIC SIGN FIVE BAN2CUNEIFORM NUMERI" + - "C SIGN FIVE BAN2 VARIANT FORMCUNEIFORM NUMERIC SIGN NIGIDAMINCUNEIFORM N" + - "UMERIC SIGN NIGIDAESHCUNEIFORM NUMERIC SIGN ONE ESHE3CUNEIFORM NUMERIC S" + - "IGN TWO ESHE3CUNEIFORM NUMERIC SIGN ONE THIRD DISHCUNEIFORM NUMERIC SIGN" + - " TWO THIRDS DISHCUNEIFORM NUMERIC SIGN FIVE SIXTHS DISHCUNEIFORM NUMERIC" + - " SIGN ONE THIRD VARIANT FORM ACUNEIFORM NUMERIC SIGN TWO THIRDS VARIANT " + - "FORM ACUNEIFORM NUMERIC SIGN ONE EIGHTH ASHCUNEIFORM NUMERIC SIGN ONE QU" + - "ARTER ASHCUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE SIXTHCUNEIFORM NUMERIC " + - "SIGN OLD ASSYRIAN ONE QUARTERCUNEIFORM NUMERIC SIGN ONE QUARTER GURCUNEI" + - "FORM NUMERIC SIGN ONE HALF GURCUNEIFORM NUMERIC SIGN ELAMITE ONE THIRDCU") + ("" + - "NEIFORM NUMERIC SIGN ELAMITE TWO THIRDSCUNEIFORM NUMERIC SIGN ELAMITE FO" + - "RTYCUNEIFORM NUMERIC SIGN ELAMITE FIFTYCUNEIFORM NUMERIC SIGN FOUR U VAR" + - "IANT FORMCUNEIFORM NUMERIC SIGN FIVE U VARIANT FORMCUNEIFORM NUMERIC SIG" + - "N SIX U VARIANT FORMCUNEIFORM NUMERIC SIGN SEVEN U VARIANT FORMCUNEIFORM" + - " NUMERIC SIGN EIGHT U VARIANT FORMCUNEIFORM NUMERIC SIGN NINE U VARIANT " + - "FORMCUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDERCUNEIFORM PUNCTU" + - "ATION SIGN VERTICAL COLONCUNEIFORM PUNCTUATION SIGN DIAGONAL COLONCUNEIF" + - "ORM PUNCTUATION SIGN DIAGONAL TRICOLONCUNEIFORM PUNCTUATION SIGN DIAGONA" + - "L QUADCOLONCUNEIFORM SIGN AB TIMES NUN TENUCUNEIFORM SIGN AB TIMES SHU2C" + - "UNEIFORM SIGN AD TIMES ESH2CUNEIFORM SIGN BAD TIMES DISH TENUCUNEIFORM S" + - "IGN BAHAR2 TIMES AB2CUNEIFORM SIGN BAHAR2 TIMES NICUNEIFORM SIGN BAHAR2 " + - "TIMES ZACUNEIFORM SIGN BU OVER BU TIMES NA2CUNEIFORM SIGN DA TIMES TAK4C" + - "UNEIFORM SIGN DAG TIMES KURCUNEIFORM SIGN DIM TIMES IGICUNEIFORM SIGN DI" + - "M TIMES U U UCUNEIFORM SIGN DIM2 TIMES UDCUNEIFORM SIGN DUG TIMES ANSHEC" + - "UNEIFORM SIGN DUG TIMES ASHCUNEIFORM SIGN DUG TIMES ASH AT LEFTCUNEIFORM" + - " SIGN DUG TIMES DINCUNEIFORM SIGN DUG TIMES DUNCUNEIFORM SIGN DUG TIMES " + - "ERIN2CUNEIFORM SIGN DUG TIMES GACUNEIFORM SIGN DUG TIMES GICUNEIFORM SIG" + - "N DUG TIMES GIR2 GUNUCUNEIFORM SIGN DUG TIMES GISHCUNEIFORM SIGN DUG TIM" + - "ES HACUNEIFORM SIGN DUG TIMES HICUNEIFORM SIGN DUG TIMES IGI GUNUCUNEIFO" + - "RM SIGN DUG TIMES KASKALCUNEIFORM SIGN DUG TIMES KURCUNEIFORM SIGN DUG T" + - "IMES KUSHU2CUNEIFORM SIGN DUG TIMES KUSHU2 PLUS KASKALCUNEIFORM SIGN DUG" + - " TIMES LAK-020CUNEIFORM SIGN DUG TIMES LAMCUNEIFORM SIGN DUG TIMES LAM T" + - "IMES KURCUNEIFORM SIGN DUG TIMES LUH PLUS GISHCUNEIFORM SIGN DUG TIMES M" + - "ASHCUNEIFORM SIGN DUG TIMES MESCUNEIFORM SIGN DUG TIMES MICUNEIFORM SIGN" + - " DUG TIMES NICUNEIFORM SIGN DUG TIMES PICUNEIFORM SIGN DUG TIMES SHECUNE" + - "IFORM SIGN DUG TIMES SI GUNUCUNEIFORM SIGN E2 TIMES KURCUNEIFORM SIGN E2" + - " TIMES PAPCUNEIFORM SIGN ERIN2 XCUNEIFORM SIGN ESH2 CROSSING ESH2CUNEIFO" + - "RM SIGN EZEN SHESHIG TIMES ASHCUNEIFORM SIGN EZEN SHESHIG TIMES HICUNEIF" + - "ORM SIGN EZEN SHESHIG TIMES IGI GUNUCUNEIFORM SIGN EZEN SHESHIG TIMES LA" + - "CUNEIFORM SIGN EZEN SHESHIG TIMES LALCUNEIFORM SIGN EZEN SHESHIG TIMES M" + - "ECUNEIFORM SIGN EZEN SHESHIG TIMES MESCUNEIFORM SIGN EZEN SHESHIG TIMES " + - "SUCUNEIFORM SIGN EZEN TIMES SUCUNEIFORM SIGN GA2 TIMES BAHAR2CUNEIFORM S" + - "IGN GA2 TIMES DIM GUNUCUNEIFORM SIGN GA2 TIMES DUG TIMES IGI GUNUCUNEIFO" + - "RM SIGN GA2 TIMES DUG TIMES KASKALCUNEIFORM SIGN GA2 TIMES ERENCUNEIFORM" + - " SIGN GA2 TIMES GACUNEIFORM SIGN GA2 TIMES GAR PLUS DICUNEIFORM SIGN GA2" + - " TIMES GAR PLUS NECUNEIFORM SIGN GA2 TIMES HA PLUS ACUNEIFORM SIGN GA2 T" + - "IMES KUSHU2 PLUS KASKALCUNEIFORM SIGN GA2 TIMES LAMCUNEIFORM SIGN GA2 TI" + - "MES LAM TIMES KURCUNEIFORM SIGN GA2 TIMES LUHCUNEIFORM SIGN GA2 TIMES MU" + - "SHCUNEIFORM SIGN GA2 TIMES NECUNEIFORM SIGN GA2 TIMES NE PLUS E2CUNEIFOR" + - "M SIGN GA2 TIMES NE PLUS GICUNEIFORM SIGN GA2 TIMES SHIMCUNEIFORM SIGN G" + - "A2 TIMES ZIZ2CUNEIFORM SIGN GABA ROTATED NINETY DEGREESCUNEIFORM SIGN GE" + - "SHTIN TIMES UCUNEIFORM SIGN GISH TIMES GISH CROSSING GISHCUNEIFORM SIGN " + - "GU2 TIMES IGI GUNUCUNEIFORM SIGN GUD PLUS GISH TIMES TAK4CUNEIFORM SIGN " + - "HA TENU GUNUCUNEIFORM SIGN HI TIMES ASH OVER HI TIMES ASHCUNEIFORM SIGN " + - "KA TIMES BUCUNEIFORM SIGN KA TIMES KACUNEIFORM SIGN KA TIMES U U UCUNEIF" + - "ORM SIGN KA TIMES URCUNEIFORM SIGN LAGAB TIMES ZU OVER ZUCUNEIFORM SIGN " + - "LAK-003CUNEIFORM SIGN LAK-021CUNEIFORM SIGN LAK-025CUNEIFORM SIGN LAK-03" + - "0CUNEIFORM SIGN LAK-050CUNEIFORM SIGN LAK-051CUNEIFORM SIGN LAK-062CUNEI" + - "FORM SIGN LAK-079 OVER LAK-079 GUNUCUNEIFORM SIGN LAK-080CUNEIFORM SIGN " + - "LAK-081 OVER LAK-081CUNEIFORM SIGN LAK-092CUNEIFORM SIGN LAK-130CUNEIFOR" + - "M SIGN LAK-142CUNEIFORM SIGN LAK-210CUNEIFORM SIGN LAK-219CUNEIFORM SIGN" + - " LAK-220CUNEIFORM SIGN LAK-225CUNEIFORM SIGN LAK-228CUNEIFORM SIGN LAK-2" + - "38CUNEIFORM SIGN LAK-265CUNEIFORM SIGN LAK-266CUNEIFORM SIGN LAK-343CUNE" + - "IFORM SIGN LAK-347CUNEIFORM SIGN LAK-348CUNEIFORM SIGN LAK-383CUNEIFORM " + - "SIGN LAK-384CUNEIFORM SIGN LAK-390CUNEIFORM SIGN LAK-441CUNEIFORM SIGN L" + - "AK-449CUNEIFORM SIGN LAK-449 TIMES GUCUNEIFORM SIGN LAK-449 TIMES IGICUN" + - "EIFORM SIGN LAK-449 TIMES PAP PLUS LU3CUNEIFORM SIGN LAK-449 TIMES PAP P" + - "LUS PAP PLUS LU3CUNEIFORM SIGN LAK-449 TIMES U2 PLUS BACUNEIFORM SIGN LA" + - "K-450CUNEIFORM SIGN LAK-457CUNEIFORM SIGN LAK-470CUNEIFORM SIGN LAK-483C" + - "UNEIFORM SIGN LAK-490CUNEIFORM SIGN LAK-492CUNEIFORM SIGN LAK-493CUNEIFO" + - "RM SIGN LAK-495CUNEIFORM SIGN LAK-550CUNEIFORM SIGN LAK-608CUNEIFORM SIG" + - "N LAK-617CUNEIFORM SIGN LAK-617 TIMES ASHCUNEIFORM SIGN LAK-617 TIMES BA" + - "DCUNEIFORM SIGN LAK-617 TIMES DUN3 GUNU GUNUCUNEIFORM SIGN LAK-617 TIMES" + - " KU3CUNEIFORM SIGN LAK-617 TIMES LACUNEIFORM SIGN LAK-617 TIMES TARCUNEI") + ("" + - "FORM SIGN LAK-617 TIMES TECUNEIFORM SIGN LAK-617 TIMES U2CUNEIFORM SIGN " + - "LAK-617 TIMES UDCUNEIFORM SIGN LAK-617 TIMES URUDACUNEIFORM SIGN LAK-636" + - "CUNEIFORM SIGN LAK-648CUNEIFORM SIGN LAK-648 TIMES DUBCUNEIFORM SIGN LAK" + - "-648 TIMES GACUNEIFORM SIGN LAK-648 TIMES IGICUNEIFORM SIGN LAK-648 TIME" + - "S IGI GUNUCUNEIFORM SIGN LAK-648 TIMES NICUNEIFORM SIGN LAK-648 TIMES PA" + - "P PLUS PAP PLUS LU3CUNEIFORM SIGN LAK-648 TIMES SHESH PLUS KICUNEIFORM S" + - "IGN LAK-648 TIMES UDCUNEIFORM SIGN LAK-648 TIMES URUDACUNEIFORM SIGN LAK" + - "-724CUNEIFORM SIGN LAK-749CUNEIFORM SIGN LU2 GUNU TIMES ASHCUNEIFORM SIG" + - "N LU2 TIMES DISHCUNEIFORM SIGN LU2 TIMES HALCUNEIFORM SIGN LU2 TIMES PAP" + - "CUNEIFORM SIGN LU2 TIMES PAP PLUS PAP PLUS LU3CUNEIFORM SIGN LU2 TIMES T" + - "AK4CUNEIFORM SIGN MI PLUS ZA7CUNEIFORM SIGN MUSH OVER MUSH TIMES GACUNEI" + - "FORM SIGN MUSH OVER MUSH TIMES KAKCUNEIFORM SIGN NINDA2 TIMES DIM GUNUCU" + - "NEIFORM SIGN NINDA2 TIMES GISHCUNEIFORM SIGN NINDA2 TIMES GULCUNEIFORM S" + - "IGN NINDA2 TIMES HICUNEIFORM SIGN NINDA2 TIMES KESH2CUNEIFORM SIGN NINDA" + - "2 TIMES LAK-050CUNEIFORM SIGN NINDA2 TIMES MASHCUNEIFORM SIGN NINDA2 TIM" + - "ES PAP PLUS PAPCUNEIFORM SIGN NINDA2 TIMES UCUNEIFORM SIGN NINDA2 TIMES " + - "U PLUS UCUNEIFORM SIGN NINDA2 TIMES URUDACUNEIFORM SIGN SAG GUNU TIMES H" + - "ACUNEIFORM SIGN SAG TIMES ENCUNEIFORM SIGN SAG TIMES SHE AT LEFTCUNEIFOR" + - "M SIGN SAG TIMES TAK4CUNEIFORM SIGN SHA6 TENUCUNEIFORM SIGN SHE OVER SHE" + - "CUNEIFORM SIGN SHE PLUS HUB2CUNEIFORM SIGN SHE PLUS NAM2CUNEIFORM SIGN S" + - "HE PLUS SARCUNEIFORM SIGN SHU2 PLUS DUG TIMES NICUNEIFORM SIGN SHU2 PLUS" + - " E2 TIMES ANCUNEIFORM SIGN SI TIMES TAK4CUNEIFORM SIGN TAK4 PLUS SAGCUNE" + - "IFORM SIGN TUM TIMES GAN2 TENUCUNEIFORM SIGN TUM TIMES THREE DISHCUNEIFO" + - "RM SIGN UR2 INVERTEDCUNEIFORM SIGN UR2 TIMES UDCUNEIFORM SIGN URU TIMES " + - "DARA3CUNEIFORM SIGN URU TIMES LAK-668CUNEIFORM SIGN URU TIMES LU3CUNEIFO" + - "RM SIGN ZA7CUNEIFORM SIGN ZU OVER ZU PLUS SARCUNEIFORM SIGN ZU5 TIMES TH" + - "REE DISH TENUEGYPTIAN HIEROGLYPH A001EGYPTIAN HIEROGLYPH A002EGYPTIAN HI" + - "EROGLYPH A003EGYPTIAN HIEROGLYPH A004EGYPTIAN HIEROGLYPH A005EGYPTIAN HI" + - "EROGLYPH A005AEGYPTIAN HIEROGLYPH A006EGYPTIAN HIEROGLYPH A006AEGYPTIAN " + - "HIEROGLYPH A006BEGYPTIAN HIEROGLYPH A007EGYPTIAN HIEROGLYPH A008EGYPTIAN" + - " HIEROGLYPH A009EGYPTIAN HIEROGLYPH A010EGYPTIAN HIEROGLYPH A011EGYPTIAN" + - " HIEROGLYPH A012EGYPTIAN HIEROGLYPH A013EGYPTIAN HIEROGLYPH A014EGYPTIAN" + - " HIEROGLYPH A014AEGYPTIAN HIEROGLYPH A015EGYPTIAN HIEROGLYPH A016EGYPTIA" + - "N HIEROGLYPH A017EGYPTIAN HIEROGLYPH A017AEGYPTIAN HIEROGLYPH A018EGYPTI" + - "AN HIEROGLYPH A019EGYPTIAN HIEROGLYPH A020EGYPTIAN HIEROGLYPH A021EGYPTI" + - "AN HIEROGLYPH A022EGYPTIAN HIEROGLYPH A023EGYPTIAN HIEROGLYPH A024EGYPTI" + - "AN HIEROGLYPH A025EGYPTIAN HIEROGLYPH A026EGYPTIAN HIEROGLYPH A027EGYPTI" + - "AN HIEROGLYPH A028EGYPTIAN HIEROGLYPH A029EGYPTIAN HIEROGLYPH A030EGYPTI" + - "AN HIEROGLYPH A031EGYPTIAN HIEROGLYPH A032EGYPTIAN HIEROGLYPH A032AEGYPT" + - "IAN HIEROGLYPH A033EGYPTIAN HIEROGLYPH A034EGYPTIAN HIEROGLYPH A035EGYPT" + - "IAN HIEROGLYPH A036EGYPTIAN HIEROGLYPH A037EGYPTIAN HIEROGLYPH A038EGYPT" + - "IAN HIEROGLYPH A039EGYPTIAN HIEROGLYPH A040EGYPTIAN HIEROGLYPH A040AEGYP" + - "TIAN HIEROGLYPH A041EGYPTIAN HIEROGLYPH A042EGYPTIAN HIEROGLYPH A042AEGY" + - "PTIAN HIEROGLYPH A043EGYPTIAN HIEROGLYPH A043AEGYPTIAN HIEROGLYPH A044EG" + - "YPTIAN HIEROGLYPH A045EGYPTIAN HIEROGLYPH A045AEGYPTIAN HIEROGLYPH A046E" + - "GYPTIAN HIEROGLYPH A047EGYPTIAN HIEROGLYPH A048EGYPTIAN HIEROGLYPH A049E" + - "GYPTIAN HIEROGLYPH A050EGYPTIAN HIEROGLYPH A051EGYPTIAN HIEROGLYPH A052E" + - "GYPTIAN HIEROGLYPH A053EGYPTIAN HIEROGLYPH A054EGYPTIAN HIEROGLYPH A055E" + - "GYPTIAN HIEROGLYPH A056EGYPTIAN HIEROGLYPH A057EGYPTIAN HIEROGLYPH A058E" + - "GYPTIAN HIEROGLYPH A059EGYPTIAN HIEROGLYPH A060EGYPTIAN HIEROGLYPH A061E" + - "GYPTIAN HIEROGLYPH A062EGYPTIAN HIEROGLYPH A063EGYPTIAN HIEROGLYPH A064E" + - "GYPTIAN HIEROGLYPH A065EGYPTIAN HIEROGLYPH A066EGYPTIAN HIEROGLYPH A067E" + - "GYPTIAN HIEROGLYPH A068EGYPTIAN HIEROGLYPH A069EGYPTIAN HIEROGLYPH A070E" + - "GYPTIAN HIEROGLYPH B001EGYPTIAN HIEROGLYPH B002EGYPTIAN HIEROGLYPH B003E" + - "GYPTIAN HIEROGLYPH B004EGYPTIAN HIEROGLYPH B005EGYPTIAN HIEROGLYPH B005A" + - "EGYPTIAN HIEROGLYPH B006EGYPTIAN HIEROGLYPH B007EGYPTIAN HIEROGLYPH B008" + - "EGYPTIAN HIEROGLYPH B009EGYPTIAN HIEROGLYPH C001EGYPTIAN HIEROGLYPH C002" + - "EGYPTIAN HIEROGLYPH C002AEGYPTIAN HIEROGLYPH C002BEGYPTIAN HIEROGLYPH C0" + - "02CEGYPTIAN HIEROGLYPH C003EGYPTIAN HIEROGLYPH C004EGYPTIAN HIEROGLYPH C" + - "005EGYPTIAN HIEROGLYPH C006EGYPTIAN HIEROGLYPH C007EGYPTIAN HIEROGLYPH C" + - "008EGYPTIAN HIEROGLYPH C009EGYPTIAN HIEROGLYPH C010EGYPTIAN HIEROGLYPH C" + - "010AEGYPTIAN HIEROGLYPH C011EGYPTIAN HIEROGLYPH C012EGYPTIAN HIEROGLYPH " + - "C013EGYPTIAN HIEROGLYPH C014EGYPTIAN HIEROGLYPH C015EGYPTIAN HIEROGLYPH " + - "C016EGYPTIAN HIEROGLYPH C017EGYPTIAN HIEROGLYPH C018EGYPTIAN HIEROGLYPH ") + ("" + - "C019EGYPTIAN HIEROGLYPH C020EGYPTIAN HIEROGLYPH C021EGYPTIAN HIEROGLYPH " + - "C022EGYPTIAN HIEROGLYPH C023EGYPTIAN HIEROGLYPH C024EGYPTIAN HIEROGLYPH " + - "D001EGYPTIAN HIEROGLYPH D002EGYPTIAN HIEROGLYPH D003EGYPTIAN HIEROGLYPH " + - "D004EGYPTIAN HIEROGLYPH D005EGYPTIAN HIEROGLYPH D006EGYPTIAN HIEROGLYPH " + - "D007EGYPTIAN HIEROGLYPH D008EGYPTIAN HIEROGLYPH D008AEGYPTIAN HIEROGLYPH" + - " D009EGYPTIAN HIEROGLYPH D010EGYPTIAN HIEROGLYPH D011EGYPTIAN HIEROGLYPH" + - " D012EGYPTIAN HIEROGLYPH D013EGYPTIAN HIEROGLYPH D014EGYPTIAN HIEROGLYPH" + - " D015EGYPTIAN HIEROGLYPH D016EGYPTIAN HIEROGLYPH D017EGYPTIAN HIEROGLYPH" + - " D018EGYPTIAN HIEROGLYPH D019EGYPTIAN HIEROGLYPH D020EGYPTIAN HIEROGLYPH" + - " D021EGYPTIAN HIEROGLYPH D022EGYPTIAN HIEROGLYPH D023EGYPTIAN HIEROGLYPH" + - " D024EGYPTIAN HIEROGLYPH D025EGYPTIAN HIEROGLYPH D026EGYPTIAN HIEROGLYPH" + - " D027EGYPTIAN HIEROGLYPH D027AEGYPTIAN HIEROGLYPH D028EGYPTIAN HIEROGLYP" + - "H D029EGYPTIAN HIEROGLYPH D030EGYPTIAN HIEROGLYPH D031EGYPTIAN HIEROGLYP" + - "H D031AEGYPTIAN HIEROGLYPH D032EGYPTIAN HIEROGLYPH D033EGYPTIAN HIEROGLY" + - "PH D034EGYPTIAN HIEROGLYPH D034AEGYPTIAN HIEROGLYPH D035EGYPTIAN HIEROGL" + - "YPH D036EGYPTIAN HIEROGLYPH D037EGYPTIAN HIEROGLYPH D038EGYPTIAN HIEROGL" + - "YPH D039EGYPTIAN HIEROGLYPH D040EGYPTIAN HIEROGLYPH D041EGYPTIAN HIEROGL" + - "YPH D042EGYPTIAN HIEROGLYPH D043EGYPTIAN HIEROGLYPH D044EGYPTIAN HIEROGL" + - "YPH D045EGYPTIAN HIEROGLYPH D046EGYPTIAN HIEROGLYPH D046AEGYPTIAN HIEROG" + - "LYPH D047EGYPTIAN HIEROGLYPH D048EGYPTIAN HIEROGLYPH D048AEGYPTIAN HIERO" + - "GLYPH D049EGYPTIAN HIEROGLYPH D050EGYPTIAN HIEROGLYPH D050AEGYPTIAN HIER" + - "OGLYPH D050BEGYPTIAN HIEROGLYPH D050CEGYPTIAN HIEROGLYPH D050DEGYPTIAN H" + - "IEROGLYPH D050EEGYPTIAN HIEROGLYPH D050FEGYPTIAN HIEROGLYPH D050GEGYPTIA" + - "N HIEROGLYPH D050HEGYPTIAN HIEROGLYPH D050IEGYPTIAN HIEROGLYPH D051EGYPT" + - "IAN HIEROGLYPH D052EGYPTIAN HIEROGLYPH D052AEGYPTIAN HIEROGLYPH D053EGYP" + - "TIAN HIEROGLYPH D054EGYPTIAN HIEROGLYPH D054AEGYPTIAN HIEROGLYPH D055EGY" + - "PTIAN HIEROGLYPH D056EGYPTIAN HIEROGLYPH D057EGYPTIAN HIEROGLYPH D058EGY" + - "PTIAN HIEROGLYPH D059EGYPTIAN HIEROGLYPH D060EGYPTIAN HIEROGLYPH D061EGY" + - "PTIAN HIEROGLYPH D062EGYPTIAN HIEROGLYPH D063EGYPTIAN HIEROGLYPH D064EGY" + - "PTIAN HIEROGLYPH D065EGYPTIAN HIEROGLYPH D066EGYPTIAN HIEROGLYPH D067EGY" + - "PTIAN HIEROGLYPH D067AEGYPTIAN HIEROGLYPH D067BEGYPTIAN HIEROGLYPH D067C" + - "EGYPTIAN HIEROGLYPH D067DEGYPTIAN HIEROGLYPH D067EEGYPTIAN HIEROGLYPH D0" + - "67FEGYPTIAN HIEROGLYPH D067GEGYPTIAN HIEROGLYPH D067HEGYPTIAN HIEROGLYPH" + - " E001EGYPTIAN HIEROGLYPH E002EGYPTIAN HIEROGLYPH E003EGYPTIAN HIEROGLYPH" + - " E004EGYPTIAN HIEROGLYPH E005EGYPTIAN HIEROGLYPH E006EGYPTIAN HIEROGLYPH" + - " E007EGYPTIAN HIEROGLYPH E008EGYPTIAN HIEROGLYPH E008AEGYPTIAN HIEROGLYP" + - "H E009EGYPTIAN HIEROGLYPH E009AEGYPTIAN HIEROGLYPH E010EGYPTIAN HIEROGLY" + - "PH E011EGYPTIAN HIEROGLYPH E012EGYPTIAN HIEROGLYPH E013EGYPTIAN HIEROGLY" + - "PH E014EGYPTIAN HIEROGLYPH E015EGYPTIAN HIEROGLYPH E016EGYPTIAN HIEROGLY" + - "PH E016AEGYPTIAN HIEROGLYPH E017EGYPTIAN HIEROGLYPH E017AEGYPTIAN HIEROG" + - "LYPH E018EGYPTIAN HIEROGLYPH E019EGYPTIAN HIEROGLYPH E020EGYPTIAN HIEROG" + - "LYPH E020AEGYPTIAN HIEROGLYPH E021EGYPTIAN HIEROGLYPH E022EGYPTIAN HIERO" + - "GLYPH E023EGYPTIAN HIEROGLYPH E024EGYPTIAN HIEROGLYPH E025EGYPTIAN HIERO" + - "GLYPH E026EGYPTIAN HIEROGLYPH E027EGYPTIAN HIEROGLYPH E028EGYPTIAN HIERO" + - "GLYPH E028AEGYPTIAN HIEROGLYPH E029EGYPTIAN HIEROGLYPH E030EGYPTIAN HIER" + - "OGLYPH E031EGYPTIAN HIEROGLYPH E032EGYPTIAN HIEROGLYPH E033EGYPTIAN HIER" + - "OGLYPH E034EGYPTIAN HIEROGLYPH E034AEGYPTIAN HIEROGLYPH E036EGYPTIAN HIE" + - "ROGLYPH E037EGYPTIAN HIEROGLYPH E038EGYPTIAN HIEROGLYPH F001EGYPTIAN HIE" + - "ROGLYPH F001AEGYPTIAN HIEROGLYPH F002EGYPTIAN HIEROGLYPH F003EGYPTIAN HI" + - "EROGLYPH F004EGYPTIAN HIEROGLYPH F005EGYPTIAN HIEROGLYPH F006EGYPTIAN HI" + - "EROGLYPH F007EGYPTIAN HIEROGLYPH F008EGYPTIAN HIEROGLYPH F009EGYPTIAN HI" + - "EROGLYPH F010EGYPTIAN HIEROGLYPH F011EGYPTIAN HIEROGLYPH F012EGYPTIAN HI" + - "EROGLYPH F013EGYPTIAN HIEROGLYPH F013AEGYPTIAN HIEROGLYPH F014EGYPTIAN H" + - "IEROGLYPH F015EGYPTIAN HIEROGLYPH F016EGYPTIAN HIEROGLYPH F017EGYPTIAN H" + - "IEROGLYPH F018EGYPTIAN HIEROGLYPH F019EGYPTIAN HIEROGLYPH F020EGYPTIAN H" + - "IEROGLYPH F021EGYPTIAN HIEROGLYPH F021AEGYPTIAN HIEROGLYPH F022EGYPTIAN " + - "HIEROGLYPH F023EGYPTIAN HIEROGLYPH F024EGYPTIAN HIEROGLYPH F025EGYPTIAN " + - "HIEROGLYPH F026EGYPTIAN HIEROGLYPH F027EGYPTIAN HIEROGLYPH F028EGYPTIAN " + - "HIEROGLYPH F029EGYPTIAN HIEROGLYPH F030EGYPTIAN HIEROGLYPH F031EGYPTIAN " + - "HIEROGLYPH F031AEGYPTIAN HIEROGLYPH F032EGYPTIAN HIEROGLYPH F033EGYPTIAN" + - " HIEROGLYPH F034EGYPTIAN HIEROGLYPH F035EGYPTIAN HIEROGLYPH F036EGYPTIAN" + - " HIEROGLYPH F037EGYPTIAN HIEROGLYPH F037AEGYPTIAN HIEROGLYPH F038EGYPTIA" + - "N HIEROGLYPH F038AEGYPTIAN HIEROGLYPH F039EGYPTIAN HIEROGLYPH F040EGYPTI" + - "AN HIEROGLYPH F041EGYPTIAN HIEROGLYPH F042EGYPTIAN HIEROGLYPH F043EGYPTI") + ("" + - "AN HIEROGLYPH F044EGYPTIAN HIEROGLYPH F045EGYPTIAN HIEROGLYPH F045AEGYPT" + - "IAN HIEROGLYPH F046EGYPTIAN HIEROGLYPH F046AEGYPTIAN HIEROGLYPH F047EGYP" + - "TIAN HIEROGLYPH F047AEGYPTIAN HIEROGLYPH F048EGYPTIAN HIEROGLYPH F049EGY" + - "PTIAN HIEROGLYPH F050EGYPTIAN HIEROGLYPH F051EGYPTIAN HIEROGLYPH F051AEG" + - "YPTIAN HIEROGLYPH F051BEGYPTIAN HIEROGLYPH F051CEGYPTIAN HIEROGLYPH F052" + - "EGYPTIAN HIEROGLYPH F053EGYPTIAN HIEROGLYPH G001EGYPTIAN HIEROGLYPH G002" + - "EGYPTIAN HIEROGLYPH G003EGYPTIAN HIEROGLYPH G004EGYPTIAN HIEROGLYPH G005" + - "EGYPTIAN HIEROGLYPH G006EGYPTIAN HIEROGLYPH G006AEGYPTIAN HIEROGLYPH G00" + - "7EGYPTIAN HIEROGLYPH G007AEGYPTIAN HIEROGLYPH G007BEGYPTIAN HIEROGLYPH G" + - "008EGYPTIAN HIEROGLYPH G009EGYPTIAN HIEROGLYPH G010EGYPTIAN HIEROGLYPH G" + - "011EGYPTIAN HIEROGLYPH G011AEGYPTIAN HIEROGLYPH G012EGYPTIAN HIEROGLYPH " + - "G013EGYPTIAN HIEROGLYPH G014EGYPTIAN HIEROGLYPH G015EGYPTIAN HIEROGLYPH " + - "G016EGYPTIAN HIEROGLYPH G017EGYPTIAN HIEROGLYPH G018EGYPTIAN HIEROGLYPH " + - "G019EGYPTIAN HIEROGLYPH G020EGYPTIAN HIEROGLYPH G020AEGYPTIAN HIEROGLYPH" + - " G021EGYPTIAN HIEROGLYPH G022EGYPTIAN HIEROGLYPH G023EGYPTIAN HIEROGLYPH" + - " G024EGYPTIAN HIEROGLYPH G025EGYPTIAN HIEROGLYPH G026EGYPTIAN HIEROGLYPH" + - " G026AEGYPTIAN HIEROGLYPH G027EGYPTIAN HIEROGLYPH G028EGYPTIAN HIEROGLYP" + - "H G029EGYPTIAN HIEROGLYPH G030EGYPTIAN HIEROGLYPH G031EGYPTIAN HIEROGLYP" + - "H G032EGYPTIAN HIEROGLYPH G033EGYPTIAN HIEROGLYPH G034EGYPTIAN HIEROGLYP" + - "H G035EGYPTIAN HIEROGLYPH G036EGYPTIAN HIEROGLYPH G036AEGYPTIAN HIEROGLY" + - "PH G037EGYPTIAN HIEROGLYPH G037AEGYPTIAN HIEROGLYPH G038EGYPTIAN HIEROGL" + - "YPH G039EGYPTIAN HIEROGLYPH G040EGYPTIAN HIEROGLYPH G041EGYPTIAN HIEROGL" + - "YPH G042EGYPTIAN HIEROGLYPH G043EGYPTIAN HIEROGLYPH G043AEGYPTIAN HIEROG" + - "LYPH G044EGYPTIAN HIEROGLYPH G045EGYPTIAN HIEROGLYPH G045AEGYPTIAN HIERO" + - "GLYPH G046EGYPTIAN HIEROGLYPH G047EGYPTIAN HIEROGLYPH G048EGYPTIAN HIERO" + - "GLYPH G049EGYPTIAN HIEROGLYPH G050EGYPTIAN HIEROGLYPH G051EGYPTIAN HIERO" + - "GLYPH G052EGYPTIAN HIEROGLYPH G053EGYPTIAN HIEROGLYPH G054EGYPTIAN HIERO" + - "GLYPH H001EGYPTIAN HIEROGLYPH H002EGYPTIAN HIEROGLYPH H003EGYPTIAN HIERO" + - "GLYPH H004EGYPTIAN HIEROGLYPH H005EGYPTIAN HIEROGLYPH H006EGYPTIAN HIERO" + - "GLYPH H006AEGYPTIAN HIEROGLYPH H007EGYPTIAN HIEROGLYPH H008EGYPTIAN HIER" + - "OGLYPH I001EGYPTIAN HIEROGLYPH I002EGYPTIAN HIEROGLYPH I003EGYPTIAN HIER" + - "OGLYPH I004EGYPTIAN HIEROGLYPH I005EGYPTIAN HIEROGLYPH I005AEGYPTIAN HIE" + - "ROGLYPH I006EGYPTIAN HIEROGLYPH I007EGYPTIAN HIEROGLYPH I008EGYPTIAN HIE" + - "ROGLYPH I009EGYPTIAN HIEROGLYPH I009AEGYPTIAN HIEROGLYPH I010EGYPTIAN HI" + - "EROGLYPH I010AEGYPTIAN HIEROGLYPH I011EGYPTIAN HIEROGLYPH I011AEGYPTIAN " + - "HIEROGLYPH I012EGYPTIAN HIEROGLYPH I013EGYPTIAN HIEROGLYPH I014EGYPTIAN " + - "HIEROGLYPH I015EGYPTIAN HIEROGLYPH K001EGYPTIAN HIEROGLYPH K002EGYPTIAN " + - "HIEROGLYPH K003EGYPTIAN HIEROGLYPH K004EGYPTIAN HIEROGLYPH K005EGYPTIAN " + - "HIEROGLYPH K006EGYPTIAN HIEROGLYPH K007EGYPTIAN HIEROGLYPH K008EGYPTIAN " + - "HIEROGLYPH L001EGYPTIAN HIEROGLYPH L002EGYPTIAN HIEROGLYPH L002AEGYPTIAN" + - " HIEROGLYPH L003EGYPTIAN HIEROGLYPH L004EGYPTIAN HIEROGLYPH L005EGYPTIAN" + - " HIEROGLYPH L006EGYPTIAN HIEROGLYPH L006AEGYPTIAN HIEROGLYPH L007EGYPTIA" + - "N HIEROGLYPH L008EGYPTIAN HIEROGLYPH M001EGYPTIAN HIEROGLYPH M001AEGYPTI" + - "AN HIEROGLYPH M001BEGYPTIAN HIEROGLYPH M002EGYPTIAN HIEROGLYPH M003EGYPT" + - "IAN HIEROGLYPH M003AEGYPTIAN HIEROGLYPH M004EGYPTIAN HIEROGLYPH M005EGYP" + - "TIAN HIEROGLYPH M006EGYPTIAN HIEROGLYPH M007EGYPTIAN HIEROGLYPH M008EGYP" + - "TIAN HIEROGLYPH M009EGYPTIAN HIEROGLYPH M010EGYPTIAN HIEROGLYPH M010AEGY" + - "PTIAN HIEROGLYPH M011EGYPTIAN HIEROGLYPH M012EGYPTIAN HIEROGLYPH M012AEG" + - "YPTIAN HIEROGLYPH M012BEGYPTIAN HIEROGLYPH M012CEGYPTIAN HIEROGLYPH M012" + - "DEGYPTIAN HIEROGLYPH M012EEGYPTIAN HIEROGLYPH M012FEGYPTIAN HIEROGLYPH M" + - "012GEGYPTIAN HIEROGLYPH M012HEGYPTIAN HIEROGLYPH M013EGYPTIAN HIEROGLYPH" + - " M014EGYPTIAN HIEROGLYPH M015EGYPTIAN HIEROGLYPH M015AEGYPTIAN HIEROGLYP" + - "H M016EGYPTIAN HIEROGLYPH M016AEGYPTIAN HIEROGLYPH M017EGYPTIAN HIEROGLY" + - "PH M017AEGYPTIAN HIEROGLYPH M018EGYPTIAN HIEROGLYPH M019EGYPTIAN HIEROGL" + - "YPH M020EGYPTIAN HIEROGLYPH M021EGYPTIAN HIEROGLYPH M022EGYPTIAN HIEROGL" + - "YPH M022AEGYPTIAN HIEROGLYPH M023EGYPTIAN HIEROGLYPH M024EGYPTIAN HIEROG" + - "LYPH M024AEGYPTIAN HIEROGLYPH M025EGYPTIAN HIEROGLYPH M026EGYPTIAN HIERO" + - "GLYPH M027EGYPTIAN HIEROGLYPH M028EGYPTIAN HIEROGLYPH M028AEGYPTIAN HIER" + - "OGLYPH M029EGYPTIAN HIEROGLYPH M030EGYPTIAN HIEROGLYPH M031EGYPTIAN HIER" + - "OGLYPH M031AEGYPTIAN HIEROGLYPH M032EGYPTIAN HIEROGLYPH M033EGYPTIAN HIE" + - "ROGLYPH M033AEGYPTIAN HIEROGLYPH M033BEGYPTIAN HIEROGLYPH M034EGYPTIAN H" + - "IEROGLYPH M035EGYPTIAN HIEROGLYPH M036EGYPTIAN HIEROGLYPH M037EGYPTIAN H" + - "IEROGLYPH M038EGYPTIAN HIEROGLYPH M039EGYPTIAN HIEROGLYPH M040EGYPTIAN H" + - "IEROGLYPH M040AEGYPTIAN HIEROGLYPH M041EGYPTIAN HIEROGLYPH M042EGYPTIAN ") + ("" + - "HIEROGLYPH M043EGYPTIAN HIEROGLYPH M044EGYPTIAN HIEROGLYPH N001EGYPTIAN " + - "HIEROGLYPH N002EGYPTIAN HIEROGLYPH N003EGYPTIAN HIEROGLYPH N004EGYPTIAN " + - "HIEROGLYPH N005EGYPTIAN HIEROGLYPH N006EGYPTIAN HIEROGLYPH N007EGYPTIAN " + - "HIEROGLYPH N008EGYPTIAN HIEROGLYPH N009EGYPTIAN HIEROGLYPH N010EGYPTIAN " + - "HIEROGLYPH N011EGYPTIAN HIEROGLYPH N012EGYPTIAN HIEROGLYPH N013EGYPTIAN " + - "HIEROGLYPH N014EGYPTIAN HIEROGLYPH N015EGYPTIAN HIEROGLYPH N016EGYPTIAN " + - "HIEROGLYPH N017EGYPTIAN HIEROGLYPH N018EGYPTIAN HIEROGLYPH N018AEGYPTIAN" + - " HIEROGLYPH N018BEGYPTIAN HIEROGLYPH N019EGYPTIAN HIEROGLYPH N020EGYPTIA" + - "N HIEROGLYPH N021EGYPTIAN HIEROGLYPH N022EGYPTIAN HIEROGLYPH N023EGYPTIA" + - "N HIEROGLYPH N024EGYPTIAN HIEROGLYPH N025EGYPTIAN HIEROGLYPH N025AEGYPTI" + - "AN HIEROGLYPH N026EGYPTIAN HIEROGLYPH N027EGYPTIAN HIEROGLYPH N028EGYPTI" + - "AN HIEROGLYPH N029EGYPTIAN HIEROGLYPH N030EGYPTIAN HIEROGLYPH N031EGYPTI" + - "AN HIEROGLYPH N032EGYPTIAN HIEROGLYPH N033EGYPTIAN HIEROGLYPH N033AEGYPT" + - "IAN HIEROGLYPH N034EGYPTIAN HIEROGLYPH N034AEGYPTIAN HIEROGLYPH N035EGYP" + - "TIAN HIEROGLYPH N035AEGYPTIAN HIEROGLYPH N036EGYPTIAN HIEROGLYPH N037EGY" + - "PTIAN HIEROGLYPH N037AEGYPTIAN HIEROGLYPH N038EGYPTIAN HIEROGLYPH N039EG" + - "YPTIAN HIEROGLYPH N040EGYPTIAN HIEROGLYPH N041EGYPTIAN HIEROGLYPH N042EG" + - "YPTIAN HIEROGLYPH NL001EGYPTIAN HIEROGLYPH NL002EGYPTIAN HIEROGLYPH NL00" + - "3EGYPTIAN HIEROGLYPH NL004EGYPTIAN HIEROGLYPH NL005EGYPTIAN HIEROGLYPH N" + - "L005AEGYPTIAN HIEROGLYPH NL006EGYPTIAN HIEROGLYPH NL007EGYPTIAN HIEROGLY" + - "PH NL008EGYPTIAN HIEROGLYPH NL009EGYPTIAN HIEROGLYPH NL010EGYPTIAN HIERO" + - "GLYPH NL011EGYPTIAN HIEROGLYPH NL012EGYPTIAN HIEROGLYPH NL013EGYPTIAN HI" + - "EROGLYPH NL014EGYPTIAN HIEROGLYPH NL015EGYPTIAN HIEROGLYPH NL016EGYPTIAN" + - " HIEROGLYPH NL017EGYPTIAN HIEROGLYPH NL017AEGYPTIAN HIEROGLYPH NL018EGYP" + - "TIAN HIEROGLYPH NL019EGYPTIAN HIEROGLYPH NL020EGYPTIAN HIEROGLYPH NU001E" + - "GYPTIAN HIEROGLYPH NU002EGYPTIAN HIEROGLYPH NU003EGYPTIAN HIEROGLYPH NU0" + - "04EGYPTIAN HIEROGLYPH NU005EGYPTIAN HIEROGLYPH NU006EGYPTIAN HIEROGLYPH " + - "NU007EGYPTIAN HIEROGLYPH NU008EGYPTIAN HIEROGLYPH NU009EGYPTIAN HIEROGLY" + - "PH NU010EGYPTIAN HIEROGLYPH NU010AEGYPTIAN HIEROGLYPH NU011EGYPTIAN HIER" + - "OGLYPH NU011AEGYPTIAN HIEROGLYPH NU012EGYPTIAN HIEROGLYPH NU013EGYPTIAN " + - "HIEROGLYPH NU014EGYPTIAN HIEROGLYPH NU015EGYPTIAN HIEROGLYPH NU016EGYPTI" + - "AN HIEROGLYPH NU017EGYPTIAN HIEROGLYPH NU018EGYPTIAN HIEROGLYPH NU018AEG" + - "YPTIAN HIEROGLYPH NU019EGYPTIAN HIEROGLYPH NU020EGYPTIAN HIEROGLYPH NU02" + - "1EGYPTIAN HIEROGLYPH NU022EGYPTIAN HIEROGLYPH NU022AEGYPTIAN HIEROGLYPH " + - "O001EGYPTIAN HIEROGLYPH O001AEGYPTIAN HIEROGLYPH O002EGYPTIAN HIEROGLYPH" + - " O003EGYPTIAN HIEROGLYPH O004EGYPTIAN HIEROGLYPH O005EGYPTIAN HIEROGLYPH" + - " O005AEGYPTIAN HIEROGLYPH O006EGYPTIAN HIEROGLYPH O006AEGYPTIAN HIEROGLY" + - "PH O006BEGYPTIAN HIEROGLYPH O006CEGYPTIAN HIEROGLYPH O006DEGYPTIAN HIERO" + - "GLYPH O006EEGYPTIAN HIEROGLYPH O006FEGYPTIAN HIEROGLYPH O007EGYPTIAN HIE" + - "ROGLYPH O008EGYPTIAN HIEROGLYPH O009EGYPTIAN HIEROGLYPH O010EGYPTIAN HIE" + - "ROGLYPH O010AEGYPTIAN HIEROGLYPH O010BEGYPTIAN HIEROGLYPH O010CEGYPTIAN " + - "HIEROGLYPH O011EGYPTIAN HIEROGLYPH O012EGYPTIAN HIEROGLYPH O013EGYPTIAN " + - "HIEROGLYPH O014EGYPTIAN HIEROGLYPH O015EGYPTIAN HIEROGLYPH O016EGYPTIAN " + - "HIEROGLYPH O017EGYPTIAN HIEROGLYPH O018EGYPTIAN HIEROGLYPH O019EGYPTIAN " + - "HIEROGLYPH O019AEGYPTIAN HIEROGLYPH O020EGYPTIAN HIEROGLYPH O020AEGYPTIA" + - "N HIEROGLYPH O021EGYPTIAN HIEROGLYPH O022EGYPTIAN HIEROGLYPH O023EGYPTIA" + - "N HIEROGLYPH O024EGYPTIAN HIEROGLYPH O024AEGYPTIAN HIEROGLYPH O025EGYPTI" + - "AN HIEROGLYPH O025AEGYPTIAN HIEROGLYPH O026EGYPTIAN HIEROGLYPH O027EGYPT" + - "IAN HIEROGLYPH O028EGYPTIAN HIEROGLYPH O029EGYPTIAN HIEROGLYPH O029AEGYP" + - "TIAN HIEROGLYPH O030EGYPTIAN HIEROGLYPH O030AEGYPTIAN HIEROGLYPH O031EGY" + - "PTIAN HIEROGLYPH O032EGYPTIAN HIEROGLYPH O033EGYPTIAN HIEROGLYPH O033AEG" + - "YPTIAN HIEROGLYPH O034EGYPTIAN HIEROGLYPH O035EGYPTIAN HIEROGLYPH O036EG" + - "YPTIAN HIEROGLYPH O036AEGYPTIAN HIEROGLYPH O036BEGYPTIAN HIEROGLYPH O036" + - "CEGYPTIAN HIEROGLYPH O036DEGYPTIAN HIEROGLYPH O037EGYPTIAN HIEROGLYPH O0" + - "38EGYPTIAN HIEROGLYPH O039EGYPTIAN HIEROGLYPH O040EGYPTIAN HIEROGLYPH O0" + - "41EGYPTIAN HIEROGLYPH O042EGYPTIAN HIEROGLYPH O043EGYPTIAN HIEROGLYPH O0" + - "44EGYPTIAN HIEROGLYPH O045EGYPTIAN HIEROGLYPH O046EGYPTIAN HIEROGLYPH O0" + - "47EGYPTIAN HIEROGLYPH O048EGYPTIAN HIEROGLYPH O049EGYPTIAN HIEROGLYPH O0" + - "50EGYPTIAN HIEROGLYPH O050AEGYPTIAN HIEROGLYPH O050BEGYPTIAN HIEROGLYPH " + - "O051EGYPTIAN HIEROGLYPH P001EGYPTIAN HIEROGLYPH P001AEGYPTIAN HIEROGLYPH" + - " P002EGYPTIAN HIEROGLYPH P003EGYPTIAN HIEROGLYPH P003AEGYPTIAN HIEROGLYP" + - "H P004EGYPTIAN HIEROGLYPH P005EGYPTIAN HIEROGLYPH P006EGYPTIAN HIEROGLYP" + - "H P007EGYPTIAN HIEROGLYPH P008EGYPTIAN HIEROGLYPH P009EGYPTIAN HIEROGLYP" + - "H P010EGYPTIAN HIEROGLYPH P011EGYPTIAN HIEROGLYPH Q001EGYPTIAN HIEROGLYP") + ("" + - "H Q002EGYPTIAN HIEROGLYPH Q003EGYPTIAN HIEROGLYPH Q004EGYPTIAN HIEROGLYP" + - "H Q005EGYPTIAN HIEROGLYPH Q006EGYPTIAN HIEROGLYPH Q007EGYPTIAN HIEROGLYP" + - "H R001EGYPTIAN HIEROGLYPH R002EGYPTIAN HIEROGLYPH R002AEGYPTIAN HIEROGLY" + - "PH R003EGYPTIAN HIEROGLYPH R003AEGYPTIAN HIEROGLYPH R003BEGYPTIAN HIEROG" + - "LYPH R004EGYPTIAN HIEROGLYPH R005EGYPTIAN HIEROGLYPH R006EGYPTIAN HIEROG" + - "LYPH R007EGYPTIAN HIEROGLYPH R008EGYPTIAN HIEROGLYPH R009EGYPTIAN HIEROG" + - "LYPH R010EGYPTIAN HIEROGLYPH R010AEGYPTIAN HIEROGLYPH R011EGYPTIAN HIERO" + - "GLYPH R012EGYPTIAN HIEROGLYPH R013EGYPTIAN HIEROGLYPH R014EGYPTIAN HIERO" + - "GLYPH R015EGYPTIAN HIEROGLYPH R016EGYPTIAN HIEROGLYPH R016AEGYPTIAN HIER" + - "OGLYPH R017EGYPTIAN HIEROGLYPH R018EGYPTIAN HIEROGLYPH R019EGYPTIAN HIER" + - "OGLYPH R020EGYPTIAN HIEROGLYPH R021EGYPTIAN HIEROGLYPH R022EGYPTIAN HIER" + - "OGLYPH R023EGYPTIAN HIEROGLYPH R024EGYPTIAN HIEROGLYPH R025EGYPTIAN HIER" + - "OGLYPH R026EGYPTIAN HIEROGLYPH R027EGYPTIAN HIEROGLYPH R028EGYPTIAN HIER" + - "OGLYPH R029EGYPTIAN HIEROGLYPH S001EGYPTIAN HIEROGLYPH S002EGYPTIAN HIER" + - "OGLYPH S002AEGYPTIAN HIEROGLYPH S003EGYPTIAN HIEROGLYPH S004EGYPTIAN HIE" + - "ROGLYPH S005EGYPTIAN HIEROGLYPH S006EGYPTIAN HIEROGLYPH S006AEGYPTIAN HI" + - "EROGLYPH S007EGYPTIAN HIEROGLYPH S008EGYPTIAN HIEROGLYPH S009EGYPTIAN HI" + - "EROGLYPH S010EGYPTIAN HIEROGLYPH S011EGYPTIAN HIEROGLYPH S012EGYPTIAN HI" + - "EROGLYPH S013EGYPTIAN HIEROGLYPH S014EGYPTIAN HIEROGLYPH S014AEGYPTIAN H" + - "IEROGLYPH S014BEGYPTIAN HIEROGLYPH S015EGYPTIAN HIEROGLYPH S016EGYPTIAN " + - "HIEROGLYPH S017EGYPTIAN HIEROGLYPH S017AEGYPTIAN HIEROGLYPH S018EGYPTIAN" + - " HIEROGLYPH S019EGYPTIAN HIEROGLYPH S020EGYPTIAN HIEROGLYPH S021EGYPTIAN" + - " HIEROGLYPH S022EGYPTIAN HIEROGLYPH S023EGYPTIAN HIEROGLYPH S024EGYPTIAN" + - " HIEROGLYPH S025EGYPTIAN HIEROGLYPH S026EGYPTIAN HIEROGLYPH S026AEGYPTIA" + - "N HIEROGLYPH S026BEGYPTIAN HIEROGLYPH S027EGYPTIAN HIEROGLYPH S028EGYPTI" + - "AN HIEROGLYPH S029EGYPTIAN HIEROGLYPH S030EGYPTIAN HIEROGLYPH S031EGYPTI" + - "AN HIEROGLYPH S032EGYPTIAN HIEROGLYPH S033EGYPTIAN HIEROGLYPH S034EGYPTI" + - "AN HIEROGLYPH S035EGYPTIAN HIEROGLYPH S035AEGYPTIAN HIEROGLYPH S036EGYPT" + - "IAN HIEROGLYPH S037EGYPTIAN HIEROGLYPH S038EGYPTIAN HIEROGLYPH S039EGYPT" + - "IAN HIEROGLYPH S040EGYPTIAN HIEROGLYPH S041EGYPTIAN HIEROGLYPH S042EGYPT" + - "IAN HIEROGLYPH S043EGYPTIAN HIEROGLYPH S044EGYPTIAN HIEROGLYPH S045EGYPT" + - "IAN HIEROGLYPH S046EGYPTIAN HIEROGLYPH T001EGYPTIAN HIEROGLYPH T002EGYPT" + - "IAN HIEROGLYPH T003EGYPTIAN HIEROGLYPH T003AEGYPTIAN HIEROGLYPH T004EGYP" + - "TIAN HIEROGLYPH T005EGYPTIAN HIEROGLYPH T006EGYPTIAN HIEROGLYPH T007EGYP" + - "TIAN HIEROGLYPH T007AEGYPTIAN HIEROGLYPH T008EGYPTIAN HIEROGLYPH T008AEG" + - "YPTIAN HIEROGLYPH T009EGYPTIAN HIEROGLYPH T009AEGYPTIAN HIEROGLYPH T010E" + - "GYPTIAN HIEROGLYPH T011EGYPTIAN HIEROGLYPH T011AEGYPTIAN HIEROGLYPH T012" + - "EGYPTIAN HIEROGLYPH T013EGYPTIAN HIEROGLYPH T014EGYPTIAN HIEROGLYPH T015" + - "EGYPTIAN HIEROGLYPH T016EGYPTIAN HIEROGLYPH T016AEGYPTIAN HIEROGLYPH T01" + - "7EGYPTIAN HIEROGLYPH T018EGYPTIAN HIEROGLYPH T019EGYPTIAN HIEROGLYPH T02" + - "0EGYPTIAN HIEROGLYPH T021EGYPTIAN HIEROGLYPH T022EGYPTIAN HIEROGLYPH T02" + - "3EGYPTIAN HIEROGLYPH T024EGYPTIAN HIEROGLYPH T025EGYPTIAN HIEROGLYPH T02" + - "6EGYPTIAN HIEROGLYPH T027EGYPTIAN HIEROGLYPH T028EGYPTIAN HIEROGLYPH T02" + - "9EGYPTIAN HIEROGLYPH T030EGYPTIAN HIEROGLYPH T031EGYPTIAN HIEROGLYPH T03" + - "2EGYPTIAN HIEROGLYPH T032AEGYPTIAN HIEROGLYPH T033EGYPTIAN HIEROGLYPH T0" + - "33AEGYPTIAN HIEROGLYPH T034EGYPTIAN HIEROGLYPH T035EGYPTIAN HIEROGLYPH T" + - "036EGYPTIAN HIEROGLYPH U001EGYPTIAN HIEROGLYPH U002EGYPTIAN HIEROGLYPH U" + - "003EGYPTIAN HIEROGLYPH U004EGYPTIAN HIEROGLYPH U005EGYPTIAN HIEROGLYPH U" + - "006EGYPTIAN HIEROGLYPH U006AEGYPTIAN HIEROGLYPH U006BEGYPTIAN HIEROGLYPH" + - " U007EGYPTIAN HIEROGLYPH U008EGYPTIAN HIEROGLYPH U009EGYPTIAN HIEROGLYPH" + - " U010EGYPTIAN HIEROGLYPH U011EGYPTIAN HIEROGLYPH U012EGYPTIAN HIEROGLYPH" + - " U013EGYPTIAN HIEROGLYPH U014EGYPTIAN HIEROGLYPH U015EGYPTIAN HIEROGLYPH" + - " U016EGYPTIAN HIEROGLYPH U017EGYPTIAN HIEROGLYPH U018EGYPTIAN HIEROGLYPH" + - " U019EGYPTIAN HIEROGLYPH U020EGYPTIAN HIEROGLYPH U021EGYPTIAN HIEROGLYPH" + - " U022EGYPTIAN HIEROGLYPH U023EGYPTIAN HIEROGLYPH U023AEGYPTIAN HIEROGLYP" + - "H U024EGYPTIAN HIEROGLYPH U025EGYPTIAN HIEROGLYPH U026EGYPTIAN HIEROGLYP" + - "H U027EGYPTIAN HIEROGLYPH U028EGYPTIAN HIEROGLYPH U029EGYPTIAN HIEROGLYP" + - "H U029AEGYPTIAN HIEROGLYPH U030EGYPTIAN HIEROGLYPH U031EGYPTIAN HIEROGLY" + - "PH U032EGYPTIAN HIEROGLYPH U032AEGYPTIAN HIEROGLYPH U033EGYPTIAN HIEROGL" + - "YPH U034EGYPTIAN HIEROGLYPH U035EGYPTIAN HIEROGLYPH U036EGYPTIAN HIEROGL" + - "YPH U037EGYPTIAN HIEROGLYPH U038EGYPTIAN HIEROGLYPH U039EGYPTIAN HIEROGL" + - "YPH U040EGYPTIAN HIEROGLYPH U041EGYPTIAN HIEROGLYPH U042EGYPTIAN HIEROGL" + - "YPH V001EGYPTIAN HIEROGLYPH V001AEGYPTIAN HIEROGLYPH V001BEGYPTIAN HIERO" + - "GLYPH V001CEGYPTIAN HIEROGLYPH V001DEGYPTIAN HIEROGLYPH V001EEGYPTIAN HI") + ("" + - "EROGLYPH V001FEGYPTIAN HIEROGLYPH V001GEGYPTIAN HIEROGLYPH V001HEGYPTIAN" + - " HIEROGLYPH V001IEGYPTIAN HIEROGLYPH V002EGYPTIAN HIEROGLYPH V002AEGYPTI" + - "AN HIEROGLYPH V003EGYPTIAN HIEROGLYPH V004EGYPTIAN HIEROGLYPH V005EGYPTI" + - "AN HIEROGLYPH V006EGYPTIAN HIEROGLYPH V007EGYPTIAN HIEROGLYPH V007AEGYPT" + - "IAN HIEROGLYPH V007BEGYPTIAN HIEROGLYPH V008EGYPTIAN HIEROGLYPH V009EGYP" + - "TIAN HIEROGLYPH V010EGYPTIAN HIEROGLYPH V011EGYPTIAN HIEROGLYPH V011AEGY" + - "PTIAN HIEROGLYPH V011BEGYPTIAN HIEROGLYPH V011CEGYPTIAN HIEROGLYPH V012E" + - "GYPTIAN HIEROGLYPH V012AEGYPTIAN HIEROGLYPH V012BEGYPTIAN HIEROGLYPH V01" + - "3EGYPTIAN HIEROGLYPH V014EGYPTIAN HIEROGLYPH V015EGYPTIAN HIEROGLYPH V01" + - "6EGYPTIAN HIEROGLYPH V017EGYPTIAN HIEROGLYPH V018EGYPTIAN HIEROGLYPH V01" + - "9EGYPTIAN HIEROGLYPH V020EGYPTIAN HIEROGLYPH V020AEGYPTIAN HIEROGLYPH V0" + - "20BEGYPTIAN HIEROGLYPH V020CEGYPTIAN HIEROGLYPH V020DEGYPTIAN HIEROGLYPH" + - " V020EEGYPTIAN HIEROGLYPH V020FEGYPTIAN HIEROGLYPH V020GEGYPTIAN HIEROGL" + - "YPH V020HEGYPTIAN HIEROGLYPH V020IEGYPTIAN HIEROGLYPH V020JEGYPTIAN HIER" + - "OGLYPH V020KEGYPTIAN HIEROGLYPH V020LEGYPTIAN HIEROGLYPH V021EGYPTIAN HI" + - "EROGLYPH V022EGYPTIAN HIEROGLYPH V023EGYPTIAN HIEROGLYPH V023AEGYPTIAN H" + - "IEROGLYPH V024EGYPTIAN HIEROGLYPH V025EGYPTIAN HIEROGLYPH V026EGYPTIAN H" + - "IEROGLYPH V027EGYPTIAN HIEROGLYPH V028EGYPTIAN HIEROGLYPH V028AEGYPTIAN " + - "HIEROGLYPH V029EGYPTIAN HIEROGLYPH V029AEGYPTIAN HIEROGLYPH V030EGYPTIAN" + - " HIEROGLYPH V030AEGYPTIAN HIEROGLYPH V031EGYPTIAN HIEROGLYPH V031AEGYPTI" + - "AN HIEROGLYPH V032EGYPTIAN HIEROGLYPH V033EGYPTIAN HIEROGLYPH V033AEGYPT" + - "IAN HIEROGLYPH V034EGYPTIAN HIEROGLYPH V035EGYPTIAN HIEROGLYPH V036EGYPT" + - "IAN HIEROGLYPH V037EGYPTIAN HIEROGLYPH V037AEGYPTIAN HIEROGLYPH V038EGYP" + - "TIAN HIEROGLYPH V039EGYPTIAN HIEROGLYPH V040EGYPTIAN HIEROGLYPH V040AEGY" + - "PTIAN HIEROGLYPH W001EGYPTIAN HIEROGLYPH W002EGYPTIAN HIEROGLYPH W003EGY" + - "PTIAN HIEROGLYPH W003AEGYPTIAN HIEROGLYPH W004EGYPTIAN HIEROGLYPH W005EG" + - "YPTIAN HIEROGLYPH W006EGYPTIAN HIEROGLYPH W007EGYPTIAN HIEROGLYPH W008EG" + - "YPTIAN HIEROGLYPH W009EGYPTIAN HIEROGLYPH W009AEGYPTIAN HIEROGLYPH W010E" + - "GYPTIAN HIEROGLYPH W010AEGYPTIAN HIEROGLYPH W011EGYPTIAN HIEROGLYPH W012" + - "EGYPTIAN HIEROGLYPH W013EGYPTIAN HIEROGLYPH W014EGYPTIAN HIEROGLYPH W014" + - "AEGYPTIAN HIEROGLYPH W015EGYPTIAN HIEROGLYPH W016EGYPTIAN HIEROGLYPH W01" + - "7EGYPTIAN HIEROGLYPH W017AEGYPTIAN HIEROGLYPH W018EGYPTIAN HIEROGLYPH W0" + - "18AEGYPTIAN HIEROGLYPH W019EGYPTIAN HIEROGLYPH W020EGYPTIAN HIEROGLYPH W" + - "021EGYPTIAN HIEROGLYPH W022EGYPTIAN HIEROGLYPH W023EGYPTIAN HIEROGLYPH W" + - "024EGYPTIAN HIEROGLYPH W024AEGYPTIAN HIEROGLYPH W025EGYPTIAN HIEROGLYPH " + - "X001EGYPTIAN HIEROGLYPH X002EGYPTIAN HIEROGLYPH X003EGYPTIAN HIEROGLYPH " + - "X004EGYPTIAN HIEROGLYPH X004AEGYPTIAN HIEROGLYPH X004BEGYPTIAN HIEROGLYP" + - "H X005EGYPTIAN HIEROGLYPH X006EGYPTIAN HIEROGLYPH X006AEGYPTIAN HIEROGLY" + - "PH X007EGYPTIAN HIEROGLYPH X008EGYPTIAN HIEROGLYPH X008AEGYPTIAN HIEROGL" + - "YPH Y001EGYPTIAN HIEROGLYPH Y001AEGYPTIAN HIEROGLYPH Y002EGYPTIAN HIEROG" + - "LYPH Y003EGYPTIAN HIEROGLYPH Y004EGYPTIAN HIEROGLYPH Y005EGYPTIAN HIEROG" + - "LYPH Y006EGYPTIAN HIEROGLYPH Y007EGYPTIAN HIEROGLYPH Y008EGYPTIAN HIEROG" + - "LYPH Z001EGYPTIAN HIEROGLYPH Z002EGYPTIAN HIEROGLYPH Z002AEGYPTIAN HIERO" + - "GLYPH Z002BEGYPTIAN HIEROGLYPH Z002CEGYPTIAN HIEROGLYPH Z002DEGYPTIAN HI" + - "EROGLYPH Z003EGYPTIAN HIEROGLYPH Z003AEGYPTIAN HIEROGLYPH Z003BEGYPTIAN " + - "HIEROGLYPH Z004EGYPTIAN HIEROGLYPH Z004AEGYPTIAN HIEROGLYPH Z005EGYPTIAN" + - " HIEROGLYPH Z005AEGYPTIAN HIEROGLYPH Z006EGYPTIAN HIEROGLYPH Z007EGYPTIA" + - "N HIEROGLYPH Z008EGYPTIAN HIEROGLYPH Z009EGYPTIAN HIEROGLYPH Z010EGYPTIA" + - "N HIEROGLYPH Z011EGYPTIAN HIEROGLYPH Z012EGYPTIAN HIEROGLYPH Z013EGYPTIA" + - "N HIEROGLYPH Z014EGYPTIAN HIEROGLYPH Z015EGYPTIAN HIEROGLYPH Z015AEGYPTI" + - "AN HIEROGLYPH Z015BEGYPTIAN HIEROGLYPH Z015CEGYPTIAN HIEROGLYPH Z015DEGY" + - "PTIAN HIEROGLYPH Z015EEGYPTIAN HIEROGLYPH Z015FEGYPTIAN HIEROGLYPH Z015G" + - "EGYPTIAN HIEROGLYPH Z015HEGYPTIAN HIEROGLYPH Z015IEGYPTIAN HIEROGLYPH Z0" + - "16EGYPTIAN HIEROGLYPH Z016AEGYPTIAN HIEROGLYPH Z016BEGYPTIAN HIEROGLYPH " + - "Z016CEGYPTIAN HIEROGLYPH Z016DEGYPTIAN HIEROGLYPH Z016EEGYPTIAN HIEROGLY" + - "PH Z016FEGYPTIAN HIEROGLYPH Z016GEGYPTIAN HIEROGLYPH Z016HEGYPTIAN HIERO" + - "GLYPH AA001EGYPTIAN HIEROGLYPH AA002EGYPTIAN HIEROGLYPH AA003EGYPTIAN HI" + - "EROGLYPH AA004EGYPTIAN HIEROGLYPH AA005EGYPTIAN HIEROGLYPH AA006EGYPTIAN" + - " HIEROGLYPH AA007EGYPTIAN HIEROGLYPH AA007AEGYPTIAN HIEROGLYPH AA007BEGY" + - "PTIAN HIEROGLYPH AA008EGYPTIAN HIEROGLYPH AA009EGYPTIAN HIEROGLYPH AA010" + - "EGYPTIAN HIEROGLYPH AA011EGYPTIAN HIEROGLYPH AA012EGYPTIAN HIEROGLYPH AA" + - "013EGYPTIAN HIEROGLYPH AA014EGYPTIAN HIEROGLYPH AA015EGYPTIAN HIEROGLYPH" + - " AA016EGYPTIAN HIEROGLYPH AA017EGYPTIAN HIEROGLYPH AA018EGYPTIAN HIEROGL" + - "YPH AA019EGYPTIAN HIEROGLYPH AA020EGYPTIAN HIEROGLYPH AA021EGYPTIAN HIER") + ("" + - "OGLYPH AA022EGYPTIAN HIEROGLYPH AA023EGYPTIAN HIEROGLYPH AA024EGYPTIAN H" + - "IEROGLYPH AA025EGYPTIAN HIEROGLYPH AA026EGYPTIAN HIEROGLYPH AA027EGYPTIA" + - "N HIEROGLYPH AA028EGYPTIAN HIEROGLYPH AA029EGYPTIAN HIEROGLYPH AA030EGYP" + - "TIAN HIEROGLYPH AA031EGYPTIAN HIEROGLYPH AA032ANATOLIAN HIEROGLYPH A001A" + - "NATOLIAN HIEROGLYPH A002ANATOLIAN HIEROGLYPH A003ANATOLIAN HIEROGLYPH A0" + - "04ANATOLIAN HIEROGLYPH A005ANATOLIAN HIEROGLYPH A006ANATOLIAN HIEROGLYPH" + - " A007ANATOLIAN HIEROGLYPH A008ANATOLIAN HIEROGLYPH A009ANATOLIAN HIEROGL" + - "YPH A010ANATOLIAN HIEROGLYPH A010AANATOLIAN HIEROGLYPH A011ANATOLIAN HIE" + - "ROGLYPH A012ANATOLIAN HIEROGLYPH A013ANATOLIAN HIEROGLYPH A014ANATOLIAN " + - "HIEROGLYPH A015ANATOLIAN HIEROGLYPH A016ANATOLIAN HIEROGLYPH A017ANATOLI" + - "AN HIEROGLYPH A018ANATOLIAN HIEROGLYPH A019ANATOLIAN HIEROGLYPH A020ANAT" + - "OLIAN HIEROGLYPH A021ANATOLIAN HIEROGLYPH A022ANATOLIAN HIEROGLYPH A023A" + - "NATOLIAN HIEROGLYPH A024ANATOLIAN HIEROGLYPH A025ANATOLIAN HIEROGLYPH A0" + - "26ANATOLIAN HIEROGLYPH A026AANATOLIAN HIEROGLYPH A027ANATOLIAN HIEROGLYP" + - "H A028ANATOLIAN HIEROGLYPH A029ANATOLIAN HIEROGLYPH A030ANATOLIAN HIEROG" + - "LYPH A031ANATOLIAN HIEROGLYPH A032ANATOLIAN HIEROGLYPH A033ANATOLIAN HIE" + - "ROGLYPH A034ANATOLIAN HIEROGLYPH A035ANATOLIAN HIEROGLYPH A036ANATOLIAN " + - "HIEROGLYPH A037ANATOLIAN HIEROGLYPH A038ANATOLIAN HIEROGLYPH A039ANATOLI" + - "AN HIEROGLYPH A039AANATOLIAN HIEROGLYPH A040ANATOLIAN HIEROGLYPH A041ANA" + - "TOLIAN HIEROGLYPH A041AANATOLIAN HIEROGLYPH A042ANATOLIAN HIEROGLYPH A04" + - "3ANATOLIAN HIEROGLYPH A044ANATOLIAN HIEROGLYPH A045ANATOLIAN HIEROGLYPH " + - "A045AANATOLIAN HIEROGLYPH A046ANATOLIAN HIEROGLYPH A046AANATOLIAN HIEROG" + - "LYPH A046BANATOLIAN HIEROGLYPH A047ANATOLIAN HIEROGLYPH A048ANATOLIAN HI" + - "EROGLYPH A049ANATOLIAN HIEROGLYPH A050ANATOLIAN HIEROGLYPH A051ANATOLIAN" + - " HIEROGLYPH A052ANATOLIAN HIEROGLYPH A053ANATOLIAN HIEROGLYPH A054ANATOL" + - "IAN HIEROGLYPH A055ANATOLIAN HIEROGLYPH A056ANATOLIAN HIEROGLYPH A057ANA" + - "TOLIAN HIEROGLYPH A058ANATOLIAN HIEROGLYPH A059ANATOLIAN HIEROGLYPH A060" + - "ANATOLIAN HIEROGLYPH A061ANATOLIAN HIEROGLYPH A062ANATOLIAN HIEROGLYPH A" + - "063ANATOLIAN HIEROGLYPH A064ANATOLIAN HIEROGLYPH A065ANATOLIAN HIEROGLYP" + - "H A066ANATOLIAN HIEROGLYPH A066AANATOLIAN HIEROGLYPH A066BANATOLIAN HIER" + - "OGLYPH A066CANATOLIAN HIEROGLYPH A067ANATOLIAN HIEROGLYPH A068ANATOLIAN " + - "HIEROGLYPH A069ANATOLIAN HIEROGLYPH A070ANATOLIAN HIEROGLYPH A071ANATOLI" + - "AN HIEROGLYPH A072ANATOLIAN HIEROGLYPH A073ANATOLIAN HIEROGLYPH A074ANAT" + - "OLIAN HIEROGLYPH A075ANATOLIAN HIEROGLYPH A076ANATOLIAN HIEROGLYPH A077A" + - "NATOLIAN HIEROGLYPH A078ANATOLIAN HIEROGLYPH A079ANATOLIAN HIEROGLYPH A0" + - "80ANATOLIAN HIEROGLYPH A081ANATOLIAN HIEROGLYPH A082ANATOLIAN HIEROGLYPH" + - " A083ANATOLIAN HIEROGLYPH A084ANATOLIAN HIEROGLYPH A085ANATOLIAN HIEROGL" + - "YPH A086ANATOLIAN HIEROGLYPH A087ANATOLIAN HIEROGLYPH A088ANATOLIAN HIER" + - "OGLYPH A089ANATOLIAN HIEROGLYPH A090ANATOLIAN HIEROGLYPH A091ANATOLIAN H" + - "IEROGLYPH A092ANATOLIAN HIEROGLYPH A093ANATOLIAN HIEROGLYPH A094ANATOLIA" + - "N HIEROGLYPH A095ANATOLIAN HIEROGLYPH A096ANATOLIAN HIEROGLYPH A097ANATO" + - "LIAN HIEROGLYPH A097AANATOLIAN HIEROGLYPH A098ANATOLIAN HIEROGLYPH A098A" + - "ANATOLIAN HIEROGLYPH A099ANATOLIAN HIEROGLYPH A100ANATOLIAN HIEROGLYPH A" + - "100AANATOLIAN HIEROGLYPH A101ANATOLIAN HIEROGLYPH A101AANATOLIAN HIEROGL" + - "YPH A102ANATOLIAN HIEROGLYPH A102AANATOLIAN HIEROGLYPH A103ANATOLIAN HIE" + - "ROGLYPH A104ANATOLIAN HIEROGLYPH A104AANATOLIAN HIEROGLYPH A104BANATOLIA" + - "N HIEROGLYPH A104CANATOLIAN HIEROGLYPH A105ANATOLIAN HIEROGLYPH A105AANA" + - "TOLIAN HIEROGLYPH A105BANATOLIAN HIEROGLYPH A106ANATOLIAN HIEROGLYPH A10" + - "7ANATOLIAN HIEROGLYPH A107AANATOLIAN HIEROGLYPH A107BANATOLIAN HIEROGLYP" + - "H A107CANATOLIAN HIEROGLYPH A108ANATOLIAN HIEROGLYPH A109ANATOLIAN HIERO" + - "GLYPH A110ANATOLIAN HIEROGLYPH A110AANATOLIAN HIEROGLYPH A110BANATOLIAN " + - "HIEROGLYPH A111ANATOLIAN HIEROGLYPH A112ANATOLIAN HIEROGLYPH A113ANATOLI" + - "AN HIEROGLYPH A114ANATOLIAN HIEROGLYPH A115ANATOLIAN HIEROGLYPH A115AANA" + - "TOLIAN HIEROGLYPH A116ANATOLIAN HIEROGLYPH A117ANATOLIAN HIEROGLYPH A118" + - "ANATOLIAN HIEROGLYPH A119ANATOLIAN HIEROGLYPH A120ANATOLIAN HIEROGLYPH A" + - "121ANATOLIAN HIEROGLYPH A122ANATOLIAN HIEROGLYPH A123ANATOLIAN HIEROGLYP" + - "H A124ANATOLIAN HIEROGLYPH A125ANATOLIAN HIEROGLYPH A125AANATOLIAN HIERO" + - "GLYPH A126ANATOLIAN HIEROGLYPH A127ANATOLIAN HIEROGLYPH A128ANATOLIAN HI" + - "EROGLYPH A129ANATOLIAN HIEROGLYPH A130ANATOLIAN HIEROGLYPH A131ANATOLIAN" + - " HIEROGLYPH A132ANATOLIAN HIEROGLYPH A133ANATOLIAN HIEROGLYPH A134ANATOL" + - "IAN HIEROGLYPH A135ANATOLIAN HIEROGLYPH A135AANATOLIAN HIEROGLYPH A136AN" + - "ATOLIAN HIEROGLYPH A137ANATOLIAN HIEROGLYPH A138ANATOLIAN HIEROGLYPH A13" + - "9ANATOLIAN HIEROGLYPH A140ANATOLIAN HIEROGLYPH A141ANATOLIAN HIEROGLYPH " + - "A142ANATOLIAN HIEROGLYPH A143ANATOLIAN HIEROGLYPH A144ANATOLIAN HIEROGLY") + ("" + - "PH A145ANATOLIAN HIEROGLYPH A146ANATOLIAN HIEROGLYPH A147ANATOLIAN HIERO" + - "GLYPH A148ANATOLIAN HIEROGLYPH A149ANATOLIAN HIEROGLYPH A150ANATOLIAN HI" + - "EROGLYPH A151ANATOLIAN HIEROGLYPH A152ANATOLIAN HIEROGLYPH A153ANATOLIAN" + - " HIEROGLYPH A154ANATOLIAN HIEROGLYPH A155ANATOLIAN HIEROGLYPH A156ANATOL" + - "IAN HIEROGLYPH A157ANATOLIAN HIEROGLYPH A158ANATOLIAN HIEROGLYPH A159ANA" + - "TOLIAN HIEROGLYPH A160ANATOLIAN HIEROGLYPH A161ANATOLIAN HIEROGLYPH A162" + - "ANATOLIAN HIEROGLYPH A163ANATOLIAN HIEROGLYPH A164ANATOLIAN HIEROGLYPH A" + - "165ANATOLIAN HIEROGLYPH A166ANATOLIAN HIEROGLYPH A167ANATOLIAN HIEROGLYP" + - "H A168ANATOLIAN HIEROGLYPH A169ANATOLIAN HIEROGLYPH A170ANATOLIAN HIEROG" + - "LYPH A171ANATOLIAN HIEROGLYPH A172ANATOLIAN HIEROGLYPH A173ANATOLIAN HIE" + - "ROGLYPH A174ANATOLIAN HIEROGLYPH A175ANATOLIAN HIEROGLYPH A176ANATOLIAN " + - "HIEROGLYPH A177ANATOLIAN HIEROGLYPH A178ANATOLIAN HIEROGLYPH A179ANATOLI" + - "AN HIEROGLYPH A180ANATOLIAN HIEROGLYPH A181ANATOLIAN HIEROGLYPH A182ANAT" + - "OLIAN HIEROGLYPH A183ANATOLIAN HIEROGLYPH A184ANATOLIAN HIEROGLYPH A185A" + - "NATOLIAN HIEROGLYPH A186ANATOLIAN HIEROGLYPH A187ANATOLIAN HIEROGLYPH A1" + - "88ANATOLIAN HIEROGLYPH A189ANATOLIAN HIEROGLYPH A190ANATOLIAN HIEROGLYPH" + - " A191ANATOLIAN HIEROGLYPH A192ANATOLIAN HIEROGLYPH A193ANATOLIAN HIEROGL" + - "YPH A194ANATOLIAN HIEROGLYPH A195ANATOLIAN HIEROGLYPH A196ANATOLIAN HIER" + - "OGLYPH A197ANATOLIAN HIEROGLYPH A198ANATOLIAN HIEROGLYPH A199ANATOLIAN H" + - "IEROGLYPH A200ANATOLIAN HIEROGLYPH A201ANATOLIAN HIEROGLYPH A202ANATOLIA" + - "N HIEROGLYPH A202AANATOLIAN HIEROGLYPH A202BANATOLIAN HIEROGLYPH A203ANA" + - "TOLIAN HIEROGLYPH A204ANATOLIAN HIEROGLYPH A205ANATOLIAN HIEROGLYPH A206" + - "ANATOLIAN HIEROGLYPH A207ANATOLIAN HIEROGLYPH A207AANATOLIAN HIEROGLYPH " + - "A208ANATOLIAN HIEROGLYPH A209ANATOLIAN HIEROGLYPH A209AANATOLIAN HIEROGL" + - "YPH A210ANATOLIAN HIEROGLYPH A211ANATOLIAN HIEROGLYPH A212ANATOLIAN HIER" + - "OGLYPH A213ANATOLIAN HIEROGLYPH A214ANATOLIAN HIEROGLYPH A215ANATOLIAN H" + - "IEROGLYPH A215AANATOLIAN HIEROGLYPH A216ANATOLIAN HIEROGLYPH A216AANATOL" + - "IAN HIEROGLYPH A217ANATOLIAN HIEROGLYPH A218ANATOLIAN HIEROGLYPH A219ANA" + - "TOLIAN HIEROGLYPH A220ANATOLIAN HIEROGLYPH A221ANATOLIAN HIEROGLYPH A222" + - "ANATOLIAN HIEROGLYPH A223ANATOLIAN HIEROGLYPH A224ANATOLIAN HIEROGLYPH A" + - "225ANATOLIAN HIEROGLYPH A226ANATOLIAN HIEROGLYPH A227ANATOLIAN HIEROGLYP" + - "H A227AANATOLIAN HIEROGLYPH A228ANATOLIAN HIEROGLYPH A229ANATOLIAN HIERO" + - "GLYPH A230ANATOLIAN HIEROGLYPH A231ANATOLIAN HIEROGLYPH A232ANATOLIAN HI" + - "EROGLYPH A233ANATOLIAN HIEROGLYPH A234ANATOLIAN HIEROGLYPH A235ANATOLIAN" + - " HIEROGLYPH A236ANATOLIAN HIEROGLYPH A237ANATOLIAN HIEROGLYPH A238ANATOL" + - "IAN HIEROGLYPH A239ANATOLIAN HIEROGLYPH A240ANATOLIAN HIEROGLYPH A241ANA" + - "TOLIAN HIEROGLYPH A242ANATOLIAN HIEROGLYPH A243ANATOLIAN HIEROGLYPH A244" + - "ANATOLIAN HIEROGLYPH A245ANATOLIAN HIEROGLYPH A246ANATOLIAN HIEROGLYPH A" + - "247ANATOLIAN HIEROGLYPH A248ANATOLIAN HIEROGLYPH A249ANATOLIAN HIEROGLYP" + - "H A250ANATOLIAN HIEROGLYPH A251ANATOLIAN HIEROGLYPH A252ANATOLIAN HIEROG" + - "LYPH A253ANATOLIAN HIEROGLYPH A254ANATOLIAN HIEROGLYPH A255ANATOLIAN HIE" + - "ROGLYPH A256ANATOLIAN HIEROGLYPH A257ANATOLIAN HIEROGLYPH A258ANATOLIAN " + - "HIEROGLYPH A259ANATOLIAN HIEROGLYPH A260ANATOLIAN HIEROGLYPH A261ANATOLI" + - "AN HIEROGLYPH A262ANATOLIAN HIEROGLYPH A263ANATOLIAN HIEROGLYPH A264ANAT" + - "OLIAN HIEROGLYPH A265ANATOLIAN HIEROGLYPH A266ANATOLIAN HIEROGLYPH A267A" + - "NATOLIAN HIEROGLYPH A267AANATOLIAN HIEROGLYPH A268ANATOLIAN HIEROGLYPH A" + - "269ANATOLIAN HIEROGLYPH A270ANATOLIAN HIEROGLYPH A271ANATOLIAN HIEROGLYP" + - "H A272ANATOLIAN HIEROGLYPH A273ANATOLIAN HIEROGLYPH A274ANATOLIAN HIEROG" + - "LYPH A275ANATOLIAN HIEROGLYPH A276ANATOLIAN HIEROGLYPH A277ANATOLIAN HIE" + - "ROGLYPH A278ANATOLIAN HIEROGLYPH A279ANATOLIAN HIEROGLYPH A280ANATOLIAN " + - "HIEROGLYPH A281ANATOLIAN HIEROGLYPH A282ANATOLIAN HIEROGLYPH A283ANATOLI" + - "AN HIEROGLYPH A284ANATOLIAN HIEROGLYPH A285ANATOLIAN HIEROGLYPH A286ANAT" + - "OLIAN HIEROGLYPH A287ANATOLIAN HIEROGLYPH A288ANATOLIAN HIEROGLYPH A289A" + - "NATOLIAN HIEROGLYPH A289AANATOLIAN HIEROGLYPH A290ANATOLIAN HIEROGLYPH A" + - "291ANATOLIAN HIEROGLYPH A292ANATOLIAN HIEROGLYPH A293ANATOLIAN HIEROGLYP" + - "H A294ANATOLIAN HIEROGLYPH A294AANATOLIAN HIEROGLYPH A295ANATOLIAN HIERO" + - "GLYPH A296ANATOLIAN HIEROGLYPH A297ANATOLIAN HIEROGLYPH A298ANATOLIAN HI" + - "EROGLYPH A299ANATOLIAN HIEROGLYPH A299AANATOLIAN HIEROGLYPH A300ANATOLIA" + - "N HIEROGLYPH A301ANATOLIAN HIEROGLYPH A302ANATOLIAN HIEROGLYPH A303ANATO" + - "LIAN HIEROGLYPH A304ANATOLIAN HIEROGLYPH A305ANATOLIAN HIEROGLYPH A306AN" + - "ATOLIAN HIEROGLYPH A307ANATOLIAN HIEROGLYPH A308ANATOLIAN HIEROGLYPH A30" + - "9ANATOLIAN HIEROGLYPH A309AANATOLIAN HIEROGLYPH A310ANATOLIAN HIEROGLYPH" + - " A311ANATOLIAN HIEROGLYPH A312ANATOLIAN HIEROGLYPH A313ANATOLIAN HIEROGL" + - "YPH A314ANATOLIAN HIEROGLYPH A315ANATOLIAN HIEROGLYPH A316ANATOLIAN HIER") + ("" + - "OGLYPH A317ANATOLIAN HIEROGLYPH A318ANATOLIAN HIEROGLYPH A319ANATOLIAN H" + - "IEROGLYPH A320ANATOLIAN HIEROGLYPH A321ANATOLIAN HIEROGLYPH A322ANATOLIA" + - "N HIEROGLYPH A323ANATOLIAN HIEROGLYPH A324ANATOLIAN HIEROGLYPH A325ANATO" + - "LIAN HIEROGLYPH A326ANATOLIAN HIEROGLYPH A327ANATOLIAN HIEROGLYPH A328AN" + - "ATOLIAN HIEROGLYPH A329ANATOLIAN HIEROGLYPH A329AANATOLIAN HIEROGLYPH A3" + - "30ANATOLIAN HIEROGLYPH A331ANATOLIAN HIEROGLYPH A332AANATOLIAN HIEROGLYP" + - "H A332BANATOLIAN HIEROGLYPH A332CANATOLIAN HIEROGLYPH A333ANATOLIAN HIER" + - "OGLYPH A334ANATOLIAN HIEROGLYPH A335ANATOLIAN HIEROGLYPH A336ANATOLIAN H" + - "IEROGLYPH A336AANATOLIAN HIEROGLYPH A336BANATOLIAN HIEROGLYPH A336CANATO" + - "LIAN HIEROGLYPH A337ANATOLIAN HIEROGLYPH A338ANATOLIAN HIEROGLYPH A339AN" + - "ATOLIAN HIEROGLYPH A340ANATOLIAN HIEROGLYPH A341ANATOLIAN HIEROGLYPH A34" + - "2ANATOLIAN HIEROGLYPH A343ANATOLIAN HIEROGLYPH A344ANATOLIAN HIEROGLYPH " + - "A345ANATOLIAN HIEROGLYPH A346ANATOLIAN HIEROGLYPH A347ANATOLIAN HIEROGLY" + - "PH A348ANATOLIAN HIEROGLYPH A349ANATOLIAN HIEROGLYPH A350ANATOLIAN HIERO" + - "GLYPH A351ANATOLIAN HIEROGLYPH A352ANATOLIAN HIEROGLYPH A353ANATOLIAN HI" + - "EROGLYPH A354ANATOLIAN HIEROGLYPH A355ANATOLIAN HIEROGLYPH A356ANATOLIAN" + - " HIEROGLYPH A357ANATOLIAN HIEROGLYPH A358ANATOLIAN HIEROGLYPH A359ANATOL" + - "IAN HIEROGLYPH A359AANATOLIAN HIEROGLYPH A360ANATOLIAN HIEROGLYPH A361AN" + - "ATOLIAN HIEROGLYPH A362ANATOLIAN HIEROGLYPH A363ANATOLIAN HIEROGLYPH A36" + - "4ANATOLIAN HIEROGLYPH A364AANATOLIAN HIEROGLYPH A365ANATOLIAN HIEROGLYPH" + - " A366ANATOLIAN HIEROGLYPH A367ANATOLIAN HIEROGLYPH A368ANATOLIAN HIEROGL" + - "YPH A368AANATOLIAN HIEROGLYPH A369ANATOLIAN HIEROGLYPH A370ANATOLIAN HIE" + - "ROGLYPH A371ANATOLIAN HIEROGLYPH A371AANATOLIAN HIEROGLYPH A372ANATOLIAN" + - " HIEROGLYPH A373ANATOLIAN HIEROGLYPH A374ANATOLIAN HIEROGLYPH A375ANATOL" + - "IAN HIEROGLYPH A376ANATOLIAN HIEROGLYPH A377ANATOLIAN HIEROGLYPH A378ANA" + - "TOLIAN HIEROGLYPH A379ANATOLIAN HIEROGLYPH A380ANATOLIAN HIEROGLYPH A381" + - "ANATOLIAN HIEROGLYPH A381AANATOLIAN HIEROGLYPH A382ANATOLIAN HIEROGLYPH " + - "A383 RA OR RIANATOLIAN HIEROGLYPH A383AANATOLIAN HIEROGLYPH A384ANATOLIA" + - "N HIEROGLYPH A385ANATOLIAN HIEROGLYPH A386ANATOLIAN HIEROGLYPH A386AANAT" + - "OLIAN HIEROGLYPH A387ANATOLIAN HIEROGLYPH A388ANATOLIAN HIEROGLYPH A389A" + - "NATOLIAN HIEROGLYPH A390ANATOLIAN HIEROGLYPH A391ANATOLIAN HIEROGLYPH A3" + - "92ANATOLIAN HIEROGLYPH A393 EIGHTANATOLIAN HIEROGLYPH A394ANATOLIAN HIER" + - "OGLYPH A395ANATOLIAN HIEROGLYPH A396ANATOLIAN HIEROGLYPH A397ANATOLIAN H" + - "IEROGLYPH A398ANATOLIAN HIEROGLYPH A399ANATOLIAN HIEROGLYPH A400ANATOLIA" + - "N HIEROGLYPH A401ANATOLIAN HIEROGLYPH A402ANATOLIAN HIEROGLYPH A403ANATO" + - "LIAN HIEROGLYPH A404ANATOLIAN HIEROGLYPH A405ANATOLIAN HIEROGLYPH A406AN" + - "ATOLIAN HIEROGLYPH A407ANATOLIAN HIEROGLYPH A408ANATOLIAN HIEROGLYPH A40" + - "9ANATOLIAN HIEROGLYPH A410 BEGIN LOGOGRAM MARKANATOLIAN HIEROGLYPH A410A" + - " END LOGOGRAM MARKANATOLIAN HIEROGLYPH A411ANATOLIAN HIEROGLYPH A412ANAT" + - "OLIAN HIEROGLYPH A413ANATOLIAN HIEROGLYPH A414ANATOLIAN HIEROGLYPH A415A" + - "NATOLIAN HIEROGLYPH A416ANATOLIAN HIEROGLYPH A417ANATOLIAN HIEROGLYPH A4" + - "18ANATOLIAN HIEROGLYPH A419ANATOLIAN HIEROGLYPH A420ANATOLIAN HIEROGLYPH" + - " A421ANATOLIAN HIEROGLYPH A422ANATOLIAN HIEROGLYPH A423ANATOLIAN HIEROGL" + - "YPH A424ANATOLIAN HIEROGLYPH A425ANATOLIAN HIEROGLYPH A426ANATOLIAN HIER" + - "OGLYPH A427ANATOLIAN HIEROGLYPH A428ANATOLIAN HIEROGLYPH A429ANATOLIAN H" + - "IEROGLYPH A430ANATOLIAN HIEROGLYPH A431ANATOLIAN HIEROGLYPH A432ANATOLIA" + - "N HIEROGLYPH A433ANATOLIAN HIEROGLYPH A434ANATOLIAN HIEROGLYPH A435ANATO" + - "LIAN HIEROGLYPH A436ANATOLIAN HIEROGLYPH A437ANATOLIAN HIEROGLYPH A438AN" + - "ATOLIAN HIEROGLYPH A439ANATOLIAN HIEROGLYPH A440ANATOLIAN HIEROGLYPH A44" + - "1ANATOLIAN HIEROGLYPH A442ANATOLIAN HIEROGLYPH A443ANATOLIAN HIEROGLYPH " + - "A444ANATOLIAN HIEROGLYPH A445ANATOLIAN HIEROGLYPH A446ANATOLIAN HIEROGLY" + - "PH A447ANATOLIAN HIEROGLYPH A448ANATOLIAN HIEROGLYPH A449ANATOLIAN HIERO" + - "GLYPH A450ANATOLIAN HIEROGLYPH A450AANATOLIAN HIEROGLYPH A451ANATOLIAN H" + - "IEROGLYPH A452ANATOLIAN HIEROGLYPH A453ANATOLIAN HIEROGLYPH A454ANATOLIA" + - "N HIEROGLYPH A455ANATOLIAN HIEROGLYPH A456ANATOLIAN HIEROGLYPH A457ANATO" + - "LIAN HIEROGLYPH A457AANATOLIAN HIEROGLYPH A458ANATOLIAN HIEROGLYPH A459A" + - "NATOLIAN HIEROGLYPH A460ANATOLIAN HIEROGLYPH A461ANATOLIAN HIEROGLYPH A4" + - "62ANATOLIAN HIEROGLYPH A463ANATOLIAN HIEROGLYPH A464ANATOLIAN HIEROGLYPH" + - " A465ANATOLIAN HIEROGLYPH A466ANATOLIAN HIEROGLYPH A467ANATOLIAN HIEROGL" + - "YPH A468ANATOLIAN HIEROGLYPH A469ANATOLIAN HIEROGLYPH A470ANATOLIAN HIER" + - "OGLYPH A471ANATOLIAN HIEROGLYPH A472ANATOLIAN HIEROGLYPH A473ANATOLIAN H" + - "IEROGLYPH A474ANATOLIAN HIEROGLYPH A475ANATOLIAN HIEROGLYPH A476ANATOLIA" + - "N HIEROGLYPH A477ANATOLIAN HIEROGLYPH A478ANATOLIAN HIEROGLYPH A479ANATO" + - "LIAN HIEROGLYPH A480ANATOLIAN HIEROGLYPH A481ANATOLIAN HIEROGLYPH A482AN") + ("" + - "ATOLIAN HIEROGLYPH A483ANATOLIAN HIEROGLYPH A484ANATOLIAN HIEROGLYPH A48" + - "5ANATOLIAN HIEROGLYPH A486ANATOLIAN HIEROGLYPH A487ANATOLIAN HIEROGLYPH " + - "A488ANATOLIAN HIEROGLYPH A489ANATOLIAN HIEROGLYPH A490ANATOLIAN HIEROGLY" + - "PH A491ANATOLIAN HIEROGLYPH A492ANATOLIAN HIEROGLYPH A493ANATOLIAN HIERO" + - "GLYPH A494ANATOLIAN HIEROGLYPH A495ANATOLIAN HIEROGLYPH A496ANATOLIAN HI" + - "EROGLYPH A497ANATOLIAN HIEROGLYPH A501ANATOLIAN HIEROGLYPH A502ANATOLIAN" + - " HIEROGLYPH A503ANATOLIAN HIEROGLYPH A504ANATOLIAN HIEROGLYPH A505ANATOL" + - "IAN HIEROGLYPH A506ANATOLIAN HIEROGLYPH A507ANATOLIAN HIEROGLYPH A508ANA" + - "TOLIAN HIEROGLYPH A509ANATOLIAN HIEROGLYPH A510ANATOLIAN HIEROGLYPH A511" + - "ANATOLIAN HIEROGLYPH A512ANATOLIAN HIEROGLYPH A513ANATOLIAN HIEROGLYPH A" + - "514ANATOLIAN HIEROGLYPH A515ANATOLIAN HIEROGLYPH A516ANATOLIAN HIEROGLYP" + - "H A517ANATOLIAN HIEROGLYPH A518ANATOLIAN HIEROGLYPH A519ANATOLIAN HIEROG" + - "LYPH A520ANATOLIAN HIEROGLYPH A521ANATOLIAN HIEROGLYPH A522ANATOLIAN HIE" + - "ROGLYPH A523ANATOLIAN HIEROGLYPH A524ANATOLIAN HIEROGLYPH A525ANATOLIAN " + - "HIEROGLYPH A526ANATOLIAN HIEROGLYPH A527ANATOLIAN HIEROGLYPH A528ANATOLI" + - "AN HIEROGLYPH A529ANATOLIAN HIEROGLYPH A530BAMUM LETTER PHASE-A NGKUE MF" + - "ONBAMUM LETTER PHASE-A GBIEE FONBAMUM LETTER PHASE-A PON MFON PIPAEMGBIE" + - "EBAMUM LETTER PHASE-A PON MFON PIPAEMBABAMUM LETTER PHASE-A NAA MFONBAMU" + - "M LETTER PHASE-A SHUENSHUETBAMUM LETTER PHASE-A TITA MFONBAMUM LETTER PH" + - "ASE-A NZA MFONBAMUM LETTER PHASE-A SHINDA PA NJIBAMUM LETTER PHASE-A PON" + - " PA NJI PIPAEMGBIEEBAMUM LETTER PHASE-A PON PA NJI PIPAEMBABAMUM LETTER " + - "PHASE-A MAEMBGBIEEBAMUM LETTER PHASE-A TU MAEMBABAMUM LETTER PHASE-A NGA" + - "NGUBAMUM LETTER PHASE-A MAEMVEUXBAMUM LETTER PHASE-A MANSUAEBAMUM LETTER" + - " PHASE-A MVEUAENGAMBAMUM LETTER PHASE-A SEUNYAMBAMUM LETTER PHASE-A NTOQ" + - "PENBAMUM LETTER PHASE-A KEUKEUTNDABAMUM LETTER PHASE-A NKINDIBAMUM LETTE" + - "R PHASE-A SUUBAMUM LETTER PHASE-A NGKUENZEUMBAMUM LETTER PHASE-A LAPAQBA" + - "MUM LETTER PHASE-A LET KUTBAMUM LETTER PHASE-A NTAP MFAABAMUM LETTER PHA" + - "SE-A MAEKEUPBAMUM LETTER PHASE-A PASHAEBAMUM LETTER PHASE-A GHEUAERAEBAM" + - "UM LETTER PHASE-A PAMSHAEBAMUM LETTER PHASE-A MON NGGEUAETBAMUM LETTER P" + - "HASE-A NZUN MEUTBAMUM LETTER PHASE-A U YUQ NAEBAMUM LETTER PHASE-A GHEUA" + - "EGHEUAEBAMUM LETTER PHASE-A NTAP NTAABAMUM LETTER PHASE-A SISABAMUM LETT" + - "ER PHASE-A MGBASABAMUM LETTER PHASE-A MEUNJOMNDEUQBAMUM LETTER PHASE-A M" + - "OOMPUQBAMUM LETTER PHASE-A KAFABAMUM LETTER PHASE-A PA LEERAEWABAMUM LET" + - "TER PHASE-A NDA LEERAEWABAMUM LETTER PHASE-A PETBAMUM LETTER PHASE-A MAE" + - "MKPENBAMUM LETTER PHASE-A NIKABAMUM LETTER PHASE-A PUPBAMUM LETTER PHASE" + - "-A TUAEPBAMUM LETTER PHASE-A LUAEPBAMUM LETTER PHASE-A SONJAMBAMUM LETTE" + - "R PHASE-A TEUTEUWENBAMUM LETTER PHASE-A MAENYIBAMUM LETTER PHASE-A KETBA" + - "MUM LETTER PHASE-A NDAANGGEUAETBAMUM LETTER PHASE-A KUOQBAMUM LETTER PHA" + - "SE-A MOOMEUTBAMUM LETTER PHASE-A SHUMBAMUM LETTER PHASE-A LOMMAEBAMUM LE" + - "TTER PHASE-A FIRIBAMUM LETTER PHASE-A ROMBAMUM LETTER PHASE-A KPOQBAMUM " + - "LETTER PHASE-A SOQBAMUM LETTER PHASE-A MAP PIEETBAMUM LETTER PHASE-A SHI" + - "RAEBAMUM LETTER PHASE-A NTAPBAMUM LETTER PHASE-A SHOQ NSHUT YUMBAMUM LET" + - "TER PHASE-A NYIT MONGKEUAEQBAMUM LETTER PHASE-A PAARAEBAMUM LETTER PHASE" + - "-A NKAARAEBAMUM LETTER PHASE-A UNKNOWNBAMUM LETTER PHASE-A NGGENBAMUM LE" + - "TTER PHASE-A MAESIBAMUM LETTER PHASE-A NJAMBAMUM LETTER PHASE-A MBANYIBA" + - "MUM LETTER PHASE-A NYETBAMUM LETTER PHASE-A TEUAENBAMUM LETTER PHASE-A S" + - "OTBAMUM LETTER PHASE-A PAAMBAMUM LETTER PHASE-A NSHIEEBAMUM LETTER PHASE" + - "-A MAEMBAMUM LETTER PHASE-A NYIBAMUM LETTER PHASE-A KAQBAMUM LETTER PHAS" + - "E-A NSHABAMUM LETTER PHASE-A VEEBAMUM LETTER PHASE-A LUBAMUM LETTER PHAS" + - "E-A NENBAMUM LETTER PHASE-A NAQBAMUM LETTER PHASE-A MBAQBAMUM LETTER PHA" + - "SE-B NSHUETBAMUM LETTER PHASE-B TU MAEMGBIEEBAMUM LETTER PHASE-B SIEEBAM" + - "UM LETTER PHASE-B SET TUBAMUM LETTER PHASE-B LOM NTEUMBAMUM LETTER PHASE" + - "-B MBA MAELEEBAMUM LETTER PHASE-B KIEEMBAMUM LETTER PHASE-B YEURAEBAMUM " + - "LETTER PHASE-B MBAARAEBAMUM LETTER PHASE-B KAMBAMUM LETTER PHASE-B PEESH" + - "IBAMUM LETTER PHASE-B YAFU LEERAEWABAMUM LETTER PHASE-B LAM NSHUT NYAMBA" + - "MUM LETTER PHASE-B NTIEE SHEUOQBAMUM LETTER PHASE-B NDU NJAABAMUM LETTER" + - " PHASE-B GHEUGHEUAEMBAMUM LETTER PHASE-B PITBAMUM LETTER PHASE-B TU NSIE" + - "EBAMUM LETTER PHASE-B SHET NJAQBAMUM LETTER PHASE-B SHEUAEQTUBAMUM LETTE" + - "R PHASE-B MFON TEUAEQBAMUM LETTER PHASE-B MBIT MBAAKETBAMUM LETTER PHASE" + - "-B NYI NTEUMBAMUM LETTER PHASE-B KEUPUQBAMUM LETTER PHASE-B GHEUGHENBAMU" + - "M LETTER PHASE-B KEUYEUXBAMUM LETTER PHASE-B LAANAEBAMUM LETTER PHASE-B " + - "PARUMBAMUM LETTER PHASE-B VEUMBAMUM LETTER PHASE-B NGKINDI MVOPBAMUM LET" + - "TER PHASE-B NGGEU MBUBAMUM LETTER PHASE-B WUAETBAMUM LETTER PHASE-B SAKE" + - "UAEBAMUM LETTER PHASE-B TAAMBAMUM LETTER PHASE-B MEUQBAMUM LETTER PHASE-") + ("" + - "B NGGUOQBAMUM LETTER PHASE-B NGGUOQ LARGEBAMUM LETTER PHASE-B MFIYAQBAMU" + - "M LETTER PHASE-B SUEBAMUM LETTER PHASE-B MBEURIBAMUM LETTER PHASE-B MONT" + - "IEENBAMUM LETTER PHASE-B NYAEMAEBAMUM LETTER PHASE-B PUNGAAMBAMUM LETTER" + - " PHASE-B MEUT NGGEETBAMUM LETTER PHASE-B FEUXBAMUM LETTER PHASE-B MBUOQB" + - "AMUM LETTER PHASE-B FEEBAMUM LETTER PHASE-B KEUAEMBAMUM LETTER PHASE-B M" + - "A NJEUAENABAMUM LETTER PHASE-B MA NJUQABAMUM LETTER PHASE-B LETBAMUM LET" + - "TER PHASE-B NGGAAMBAMUM LETTER PHASE-B NSENBAMUM LETTER PHASE-B MABAMUM " + - "LETTER PHASE-B KIQBAMUM LETTER PHASE-B NGOMBAMUM LETTER PHASE-C NGKUE MA" + - "EMBABAMUM LETTER PHASE-C NZABAMUM LETTER PHASE-C YUMBAMUM LETTER PHASE-C" + - " WANGKUOQBAMUM LETTER PHASE-C NGGENBAMUM LETTER PHASE-C NDEUAEREEBAMUM L" + - "ETTER PHASE-C NGKAQBAMUM LETTER PHASE-C GHARAEBAMUM LETTER PHASE-C MBEEK" + - "EETBAMUM LETTER PHASE-C GBAYIBAMUM LETTER PHASE-C NYIR MKPARAQ MEUNBAMUM" + - " LETTER PHASE-C NTU MBITBAMUM LETTER PHASE-C MBEUMBAMUM LETTER PHASE-C P" + - "IRIEENBAMUM LETTER PHASE-C NDOMBUBAMUM LETTER PHASE-C MBAA CABBAGE-TREEB" + - "AMUM LETTER PHASE-C KEUSHEUAEPBAMUM LETTER PHASE-C GHAPBAMUM LETTER PHAS" + - "E-C KEUKAQBAMUM LETTER PHASE-C YU MUOMAEBAMUM LETTER PHASE-C NZEUMBAMUM " + - "LETTER PHASE-C MBUEBAMUM LETTER PHASE-C NSEUAENBAMUM LETTER PHASE-C MBIT" + - "BAMUM LETTER PHASE-C YEUQBAMUM LETTER PHASE-C KPARAQBAMUM LETTER PHASE-C" + - " KAABAMUM LETTER PHASE-C SEUXBAMUM LETTER PHASE-C NDIDABAMUM LETTER PHAS" + - "E-C TAASHAEBAMUM LETTER PHASE-C NJUEQBAMUM LETTER PHASE-C TITA YUEBAMUM " + - "LETTER PHASE-C SUAETBAMUM LETTER PHASE-C NGGUAEN NYAMBAMUM LETTER PHASE-" + - "C VEUXBAMUM LETTER PHASE-C NANSANAQBAMUM LETTER PHASE-C MA KEUAERIBAMUM " + - "LETTER PHASE-C NTAABAMUM LETTER PHASE-C NGGUONBAMUM LETTER PHASE-C LAPBA" + - "MUM LETTER PHASE-C MBIRIEENBAMUM LETTER PHASE-C MGBASAQBAMUM LETTER PHAS" + - "E-C NTEUNGBABAMUM LETTER PHASE-C TEUTEUXBAMUM LETTER PHASE-C NGGUMBAMUM " + - "LETTER PHASE-C FUEBAMUM LETTER PHASE-C NDEUTBAMUM LETTER PHASE-C NSABAMU" + - "M LETTER PHASE-C NSHAQBAMUM LETTER PHASE-C BUNGBAMUM LETTER PHASE-C VEUA" + - "EPENBAMUM LETTER PHASE-C MBERAEBAMUM LETTER PHASE-C RUBAMUM LETTER PHASE" + - "-C NJAEMBAMUM LETTER PHASE-C LAMBAMUM LETTER PHASE-C TITUAEPBAMUM LETTER" + - " PHASE-C NSUOT NGOMBAMUM LETTER PHASE-C NJEEEEBAMUM LETTER PHASE-C KETBA" + - "MUM LETTER PHASE-C NGGUBAMUM LETTER PHASE-C MAESIBAMUM LETTER PHASE-C MB" + - "UAEMBAMUM LETTER PHASE-C LUBAMUM LETTER PHASE-C KUTBAMUM LETTER PHASE-C " + - "NJAMBAMUM LETTER PHASE-C NGOMBAMUM LETTER PHASE-C WUPBAMUM LETTER PHASE-" + - "C NGGUEETBAMUM LETTER PHASE-C NSOMBAMUM LETTER PHASE-C NTENBAMUM LETTER " + - "PHASE-C KUOP NKAARAEBAMUM LETTER PHASE-C NSUNBAMUM LETTER PHASE-C NDAMBA" + - "MUM LETTER PHASE-C MA NSIEEBAMUM LETTER PHASE-C YAABAMUM LETTER PHASE-C " + - "NDAPBAMUM LETTER PHASE-C SHUEQBAMUM LETTER PHASE-C SETFONBAMUM LETTER PH" + - "ASE-C MBIBAMUM LETTER PHASE-C MAEMBABAMUM LETTER PHASE-C MBANYIBAMUM LET" + - "TER PHASE-C KEUSEUXBAMUM LETTER PHASE-C MBEUXBAMUM LETTER PHASE-C KEUMBA" + - "MUM LETTER PHASE-C MBAA PICKETBAMUM LETTER PHASE-C YUWOQBAMUM LETTER PHA" + - "SE-C NJEUXBAMUM LETTER PHASE-C MIEEBAMUM LETTER PHASE-C MUAEBAMUM LETTER" + - " PHASE-C SHIQBAMUM LETTER PHASE-C KEN LAWBAMUM LETTER PHASE-C KEN FATIGU" + - "EBAMUM LETTER PHASE-C NGAQBAMUM LETTER PHASE-C NAQBAMUM LETTER PHASE-C L" + - "IQBAMUM LETTER PHASE-C PINBAMUM LETTER PHASE-C PENBAMUM LETTER PHASE-C T" + - "ETBAMUM LETTER PHASE-D MBUOBAMUM LETTER PHASE-D WAPBAMUM LETTER PHASE-D " + - "NJIBAMUM LETTER PHASE-D MFONBAMUM LETTER PHASE-D NJIEEBAMUM LETTER PHASE" + - "-D LIEEBAMUM LETTER PHASE-D NJEUTBAMUM LETTER PHASE-D NSHEEBAMUM LETTER " + - "PHASE-D NGGAAMAEBAMUM LETTER PHASE-D NYAMBAMUM LETTER PHASE-D WUAENBAMUM" + - " LETTER PHASE-D NGKUNBAMUM LETTER PHASE-D SHEEBAMUM LETTER PHASE-D NGKAP" + - "BAMUM LETTER PHASE-D KEUAETMEUNBAMUM LETTER PHASE-D TEUTBAMUM LETTER PHA" + - "SE-D SHEUAEBAMUM LETTER PHASE-D NJAPBAMUM LETTER PHASE-D SUEBAMUM LETTER" + - " PHASE-D KETBAMUM LETTER PHASE-D YAEMMAEBAMUM LETTER PHASE-D KUOMBAMUM L" + - "ETTER PHASE-D SAPBAMUM LETTER PHASE-D MFEUTBAMUM LETTER PHASE-D NDEUXBAM" + - "UM LETTER PHASE-D MALEERIBAMUM LETTER PHASE-D MEUTBAMUM LETTER PHASE-D S" + - "EUAEQBAMUM LETTER PHASE-D YENBAMUM LETTER PHASE-D NJEUAEMBAMUM LETTER PH" + - "ASE-D KEUOT MBUAEBAMUM LETTER PHASE-D NGKEURIBAMUM LETTER PHASE-D TUBAMU" + - "M LETTER PHASE-D GHAABAMUM LETTER PHASE-D NGKYEEBAMUM LETTER PHASE-D FEU" + - "FEUAETBAMUM LETTER PHASE-D NDEEBAMUM LETTER PHASE-D MGBOFUMBAMUM LETTER " + - "PHASE-D LEUAEPBAMUM LETTER PHASE-D NDONBAMUM LETTER PHASE-D MONIBAMUM LE" + - "TTER PHASE-D MGBEUNBAMUM LETTER PHASE-D PUUTBAMUM LETTER PHASE-D MGBIEEB" + - "AMUM LETTER PHASE-D MFOBAMUM LETTER PHASE-D LUMBAMUM LETTER PHASE-D NSIE" + - "EPBAMUM LETTER PHASE-D MBAABAMUM LETTER PHASE-D KWAETBAMUM LETTER PHASE-" + - "D NYETBAMUM LETTER PHASE-D TEUAENBAMUM LETTER PHASE-D SOTBAMUM LETTER PH" + - "ASE-D YUWOQBAMUM LETTER PHASE-D KEUMBAMUM LETTER PHASE-D RAEMBAMUM LETTE") + ("" + - "R PHASE-D TEEEEBAMUM LETTER PHASE-D NGKEUAEQBAMUM LETTER PHASE-D MFEUAEB" + - "AMUM LETTER PHASE-D NSIEETBAMUM LETTER PHASE-D KEUPBAMUM LETTER PHASE-D " + - "PIPBAMUM LETTER PHASE-D PEUTAEBAMUM LETTER PHASE-D NYUEBAMUM LETTER PHAS" + - "E-D LETBAMUM LETTER PHASE-D NGGAAMBAMUM LETTER PHASE-D MFIEEBAMUM LETTER" + - " PHASE-D NGGWAENBAMUM LETTER PHASE-D YUOMBAMUM LETTER PHASE-D PAPBAMUM L" + - "ETTER PHASE-D YUOPBAMUM LETTER PHASE-D NDAMBAMUM LETTER PHASE-D NTEUMBAM" + - "UM LETTER PHASE-D SUAEBAMUM LETTER PHASE-D KUNBAMUM LETTER PHASE-D NGGEU" + - "XBAMUM LETTER PHASE-D NGKIEEBAMUM LETTER PHASE-D TUOTBAMUM LETTER PHASE-" + - "D MEUNBAMUM LETTER PHASE-D KUQBAMUM LETTER PHASE-D NSUMBAMUM LETTER PHAS" + - "E-D TEUNBAMUM LETTER PHASE-D MAENJETBAMUM LETTER PHASE-D NGGAPBAMUM LETT" + - "ER PHASE-D LEUMBAMUM LETTER PHASE-D NGGUOMBAMUM LETTER PHASE-D NSHUTBAMU" + - "M LETTER PHASE-D NJUEQBAMUM LETTER PHASE-D GHEUAEBAMUM LETTER PHASE-D KU" + - "BAMUM LETTER PHASE-D REN OLDBAMUM LETTER PHASE-D TAEBAMUM LETTER PHASE-D" + - " TOQBAMUM LETTER PHASE-D NYIBAMUM LETTER PHASE-D RIIBAMUM LETTER PHASE-D" + - " LEEEEBAMUM LETTER PHASE-D MEEEEBAMUM LETTER PHASE-D MBAMUM LETTER PHASE" + - "-D SUUBAMUM LETTER PHASE-D MUBAMUM LETTER PHASE-D SHIIBAMUM LETTER PHASE" + - "-D SHEUXBAMUM LETTER PHASE-D KYEEBAMUM LETTER PHASE-D NUBAMUM LETTER PHA" + - "SE-D SHUBAMUM LETTER PHASE-D NTEEBAMUM LETTER PHASE-D PEEBAMUM LETTER PH" + - "ASE-D NIBAMUM LETTER PHASE-D SHOQBAMUM LETTER PHASE-D PUQBAMUM LETTER PH" + - "ASE-D MVOPBAMUM LETTER PHASE-D LOQBAMUM LETTER PHASE-D REN MUCHBAMUM LET" + - "TER PHASE-D TIBAMUM LETTER PHASE-D NTUUBAMUM LETTER PHASE-D MBAA SEVENBA" + - "MUM LETTER PHASE-D SAQBAMUM LETTER PHASE-D FAABAMUM LETTER PHASE-E NDAPB" + - "AMUM LETTER PHASE-E TOONBAMUM LETTER PHASE-E MBEUMBAMUM LETTER PHASE-E L" + - "APBAMUM LETTER PHASE-E VOMBAMUM LETTER PHASE-E LOONBAMUM LETTER PHASE-E " + - "PAABAMUM LETTER PHASE-E SOMBAMUM LETTER PHASE-E RAQBAMUM LETTER PHASE-E " + - "NSHUOPBAMUM LETTER PHASE-E NDUNBAMUM LETTER PHASE-E PUAEBAMUM LETTER PHA" + - "SE-E TAMBAMUM LETTER PHASE-E NGKABAMUM LETTER PHASE-E KPEUXBAMUM LETTER " + - "PHASE-E WUOBAMUM LETTER PHASE-E SEEBAMUM LETTER PHASE-E NGGEUAETBAMUM LE" + - "TTER PHASE-E PAAMBAMUM LETTER PHASE-E TOOBAMUM LETTER PHASE-E KUOPBAMUM " + - "LETTER PHASE-E LOMBAMUM LETTER PHASE-E NSHIEEBAMUM LETTER PHASE-E NGOPBA" + - "MUM LETTER PHASE-E MAEMBAMUM LETTER PHASE-E NGKEUXBAMUM LETTER PHASE-E N" + - "GOQBAMUM LETTER PHASE-E NSHUEBAMUM LETTER PHASE-E RIMGBABAMUM LETTER PHA" + - "SE-E NJEUXBAMUM LETTER PHASE-E PEEMBAMUM LETTER PHASE-E SAABAMUM LETTER " + - "PHASE-E NGGURAEBAMUM LETTER PHASE-E MGBABAMUM LETTER PHASE-E GHEUXBAMUM " + - "LETTER PHASE-E NGKEUAEMBAMUM LETTER PHASE-E NJAEMLIBAMUM LETTER PHASE-E " + - "MAPBAMUM LETTER PHASE-E LOOTBAMUM LETTER PHASE-E NGGEEEEBAMUM LETTER PHA" + - "SE-E NDIQBAMUM LETTER PHASE-E TAEN NTEUMBAMUM LETTER PHASE-E SETBAMUM LE" + - "TTER PHASE-E PUMBAMUM LETTER PHASE-E NDAA SOFTNESSBAMUM LETTER PHASE-E N" + - "GGUAESHAE NYAMBAMUM LETTER PHASE-E YIEEBAMUM LETTER PHASE-E GHEUNBAMUM L" + - "ETTER PHASE-E TUAEBAMUM LETTER PHASE-E YEUAEBAMUM LETTER PHASE-E POBAMUM" + - " LETTER PHASE-E TUMAEBAMUM LETTER PHASE-E KEUAEBAMUM LETTER PHASE-E SUAE" + - "NBAMUM LETTER PHASE-E TEUAEQBAMUM LETTER PHASE-E VEUAEBAMUM LETTER PHASE" + - "-E WEUXBAMUM LETTER PHASE-E LAAMBAMUM LETTER PHASE-E PUBAMUM LETTER PHAS" + - "E-E TAAQBAMUM LETTER PHASE-E GHAAMAEBAMUM LETTER PHASE-E NGEUREUTBAMUM L" + - "ETTER PHASE-E SHEUAEQBAMUM LETTER PHASE-E MGBENBAMUM LETTER PHASE-E MBEE" + - "BAMUM LETTER PHASE-E NZAQBAMUM LETTER PHASE-E NKOMBAMUM LETTER PHASE-E G" + - "BETBAMUM LETTER PHASE-E TUMBAMUM LETTER PHASE-E KUETBAMUM LETTER PHASE-E" + - " YAPBAMUM LETTER PHASE-E NYI CLEAVERBAMUM LETTER PHASE-E YITBAMUM LETTER" + - " PHASE-E MFEUQBAMUM LETTER PHASE-E NDIAQBAMUM LETTER PHASE-E PIEEQBAMUM " + - "LETTER PHASE-E YUEQBAMUM LETTER PHASE-E LEUAEMBAMUM LETTER PHASE-E FUEBA" + - "MUM LETTER PHASE-E GBEUXBAMUM LETTER PHASE-E NGKUPBAMUM LETTER PHASE-E K" + - "ETBAMUM LETTER PHASE-E MAEBAMUM LETTER PHASE-E NGKAAMIBAMUM LETTER PHASE" + - "-E GHETBAMUM LETTER PHASE-E FABAMUM LETTER PHASE-E NTUMBAMUM LETTER PHAS" + - "E-E PEUTBAMUM LETTER PHASE-E YEUMBAMUM LETTER PHASE-E NGGEUAEBAMUM LETTE" + - "R PHASE-E NYI BETWEENBAMUM LETTER PHASE-E NZUQBAMUM LETTER PHASE-E POONB" + - "AMUM LETTER PHASE-E MIEEBAMUM LETTER PHASE-E FUETBAMUM LETTER PHASE-E NA" + - "EBAMUM LETTER PHASE-E MUAEBAMUM LETTER PHASE-E GHEUAEBAMUM LETTER PHASE-" + - "E FU IBAMUM LETTER PHASE-E MVIBAMUM LETTER PHASE-E PUAQBAMUM LETTER PHAS" + - "E-E NGKUMBAMUM LETTER PHASE-E KUTBAMUM LETTER PHASE-E PIETBAMUM LETTER P" + - "HASE-E NTAPBAMUM LETTER PHASE-E YEUAETBAMUM LETTER PHASE-E NGGUPBAMUM LE" + - "TTER PHASE-E PA PEOPLEBAMUM LETTER PHASE-E FU CALLBAMUM LETTER PHASE-E F" + - "OMBAMUM LETTER PHASE-E NJEEBAMUM LETTER PHASE-E ABAMUM LETTER PHASE-E TO" + - "QBAMUM LETTER PHASE-E OBAMUM LETTER PHASE-E IBAMUM LETTER PHASE-E LAQBAM" + - "UM LETTER PHASE-E PA PLURALBAMUM LETTER PHASE-E TAABAMUM LETTER PHASE-E ") + ("" + - "TAQBAMUM LETTER PHASE-E NDAA MY HOUSEBAMUM LETTER PHASE-E SHIQBAMUM LETT" + - "ER PHASE-E YEUXBAMUM LETTER PHASE-E NGUAEBAMUM LETTER PHASE-E YUAENBAMUM" + - " LETTER PHASE-E YOQ SWIMMINGBAMUM LETTER PHASE-E YOQ COVERBAMUM LETTER P" + - "HASE-E YUQBAMUM LETTER PHASE-E YUNBAMUM LETTER PHASE-E KEUXBAMUM LETTER " + - "PHASE-E PEUXBAMUM LETTER PHASE-E NJEE EPOCHBAMUM LETTER PHASE-E PUEBAMUM" + - " LETTER PHASE-E WUEBAMUM LETTER PHASE-E FEEBAMUM LETTER PHASE-E VEEBAMUM" + - " LETTER PHASE-E LUBAMUM LETTER PHASE-E MIBAMUM LETTER PHASE-E REUXBAMUM " + - "LETTER PHASE-E RAEBAMUM LETTER PHASE-E NGUAETBAMUM LETTER PHASE-E NGABAM" + - "UM LETTER PHASE-E SHOBAMUM LETTER PHASE-E SHOQBAMUM LETTER PHASE-E FU RE" + - "MEDYBAMUM LETTER PHASE-E NABAMUM LETTER PHASE-E PIBAMUM LETTER PHASE-E L" + - "OQBAMUM LETTER PHASE-E KOBAMUM LETTER PHASE-E MENBAMUM LETTER PHASE-E MA" + - "BAMUM LETTER PHASE-E MAQBAMUM LETTER PHASE-E TEUBAMUM LETTER PHASE-E KIB" + - "AMUM LETTER PHASE-E MONBAMUM LETTER PHASE-E TENBAMUM LETTER PHASE-E FAQB" + - "AMUM LETTER PHASE-E GHOMBAMUM LETTER PHASE-F KABAMUM LETTER PHASE-F UBAM" + - "UM LETTER PHASE-F KUBAMUM LETTER PHASE-F EEBAMUM LETTER PHASE-F REEBAMUM" + - " LETTER PHASE-F TAEBAMUM LETTER PHASE-F NYIBAMUM LETTER PHASE-F LABAMUM " + - "LETTER PHASE-F RIIBAMUM LETTER PHASE-F RIEEBAMUM LETTER PHASE-F MEEEEBAM" + - "UM LETTER PHASE-F TAABAMUM LETTER PHASE-F NDAABAMUM LETTER PHASE-F NJAEM" + - "BAMUM LETTER PHASE-F MBAMUM LETTER PHASE-F SUUBAMUM LETTER PHASE-F SHIIB" + - "AMUM LETTER PHASE-F SIBAMUM LETTER PHASE-F SEUXBAMUM LETTER PHASE-F KYEE" + - "BAMUM LETTER PHASE-F KETBAMUM LETTER PHASE-F NUAEBAMUM LETTER PHASE-F NU" + - "BAMUM LETTER PHASE-F NJUAEBAMUM LETTER PHASE-F YOQBAMUM LETTER PHASE-F S" + - "HUBAMUM LETTER PHASE-F YABAMUM LETTER PHASE-F NSHABAMUM LETTER PHASE-F P" + - "EUXBAMUM LETTER PHASE-F NTEEBAMUM LETTER PHASE-F WUEBAMUM LETTER PHASE-F" + - " PEEBAMUM LETTER PHASE-F RUBAMUM LETTER PHASE-F NIBAMUM LETTER PHASE-F R" + - "EUXBAMUM LETTER PHASE-F KENBAMUM LETTER PHASE-F NGKWAENBAMUM LETTER PHAS" + - "E-F NGGABAMUM LETTER PHASE-F SHOBAMUM LETTER PHASE-F PUAEBAMUM LETTER PH" + - "ASE-F FOMBAMUM LETTER PHASE-F WABAMUM LETTER PHASE-F LIBAMUM LETTER PHAS" + - "E-F LOQBAMUM LETTER PHASE-F KOBAMUM LETTER PHASE-F MBENBAMUM LETTER PHAS" + - "E-F RENBAMUM LETTER PHASE-F MABAMUM LETTER PHASE-F MOBAMUM LETTER PHASE-" + - "F MBAABAMUM LETTER PHASE-F TETBAMUM LETTER PHASE-F KPABAMUM LETTER PHASE" + - "-F SAMBABAMUM LETTER PHASE-F VUEQMRO LETTER TAMRO LETTER NGIMRO LETTER Y" + - "OMRO LETTER MIMMRO LETTER BAMRO LETTER DAMRO LETTER AMRO LETTER PHIMRO L" + - "ETTER KHAIMRO LETTER HAOMRO LETTER DAIMRO LETTER CHUMRO LETTER KEAAEMRO " + - "LETTER OLMRO LETTER MAEMMRO LETTER NINMRO LETTER PAMRO LETTER OOMRO LETT" + - "ER OMRO LETTER ROMRO LETTER SHIMRO LETTER THEAMRO LETTER EAMRO LETTER WA" + - "MRO LETTER EMRO LETTER KOMRO LETTER LANMRO LETTER LAMRO LETTER HAIMRO LE" + - "TTER RIMRO LETTER TEKMRO DIGIT ZEROMRO DIGIT ONEMRO DIGIT TWOMRO DIGIT T" + - "HREEMRO DIGIT FOURMRO DIGIT FIVEMRO DIGIT SIXMRO DIGIT SEVENMRO DIGIT EI" + - "GHTMRO DIGIT NINEMRO DANDAMRO DOUBLE DANDABASSA VAH LETTER ENNIBASSA VAH" + - " LETTER KABASSA VAH LETTER SEBASSA VAH LETTER FABASSA VAH LETTER MBEBASS" + - "A VAH LETTER YIEBASSA VAH LETTER GAHBASSA VAH LETTER DHIIBASSA VAH LETTE" + - "R KPAHBASSA VAH LETTER JOBASSA VAH LETTER HWAHBASSA VAH LETTER WABASSA V" + - "AH LETTER ZOBASSA VAH LETTER GBUBASSA VAH LETTER DOBASSA VAH LETTER CEBA" + - "SSA VAH LETTER UWUBASSA VAH LETTER TOBASSA VAH LETTER BABASSA VAH LETTER" + - " VUBASSA VAH LETTER YEINBASSA VAH LETTER PABASSA VAH LETTER WADDABASSA V" + - "AH LETTER ABASSA VAH LETTER OBASSA VAH LETTER OOBASSA VAH LETTER UBASSA " + - "VAH LETTER EEBASSA VAH LETTER EBASSA VAH LETTER IBASSA VAH COMBINING HIG" + - "H TONEBASSA VAH COMBINING LOW TONEBASSA VAH COMBINING MID TONEBASSA VAH " + - "COMBINING LOW-MID TONEBASSA VAH COMBINING HIGH-LOW TONEBASSA VAH FULL ST" + - "OPPAHAWH HMONG VOWEL KEEBPAHAWH HMONG VOWEL KEEVPAHAWH HMONG VOWEL KIBPA" + - "HAWH HMONG VOWEL KIVPAHAWH HMONG VOWEL KAUBPAHAWH HMONG VOWEL KAUVPAHAWH" + - " HMONG VOWEL KUBPAHAWH HMONG VOWEL KUVPAHAWH HMONG VOWEL KEBPAHAWH HMONG" + - " VOWEL KEVPAHAWH HMONG VOWEL KAIBPAHAWH HMONG VOWEL KAIVPAHAWH HMONG VOW" + - "EL KOOBPAHAWH HMONG VOWEL KOOVPAHAWH HMONG VOWEL KAWBPAHAWH HMONG VOWEL " + - "KAWVPAHAWH HMONG VOWEL KUABPAHAWH HMONG VOWEL KUAVPAHAWH HMONG VOWEL KOB" + - "PAHAWH HMONG VOWEL KOVPAHAWH HMONG VOWEL KIABPAHAWH HMONG VOWEL KIAVPAHA" + - "WH HMONG VOWEL KABPAHAWH HMONG VOWEL KAVPAHAWH HMONG VOWEL KWBPAHAWH HMO" + - "NG VOWEL KWVPAHAWH HMONG VOWEL KAABPAHAWH HMONG VOWEL KAAVPAHAWH HMONG C" + - "ONSONANT VAUPAHAWH HMONG CONSONANT NTSAUPAHAWH HMONG CONSONANT LAUPAHAWH" + - " HMONG CONSONANT HAUPAHAWH HMONG CONSONANT NLAUPAHAWH HMONG CONSONANT RA" + - "UPAHAWH HMONG CONSONANT NKAUPAHAWH HMONG CONSONANT QHAUPAHAWH HMONG CONS" + - "ONANT YAUPAHAWH HMONG CONSONANT HLAUPAHAWH HMONG CONSONANT MAUPAHAWH HMO" + - "NG CONSONANT CHAUPAHAWH HMONG CONSONANT NCHAUPAHAWH HMONG CONSONANT HNAU") + ("" + - "PAHAWH HMONG CONSONANT PLHAUPAHAWH HMONG CONSONANT NTHAUPAHAWH HMONG CON" + - "SONANT NAUPAHAWH HMONG CONSONANT AUPAHAWH HMONG CONSONANT XAUPAHAWH HMON" + - "G CONSONANT CAUPAHAWH HMONG MARK CIM TUBPAHAWH HMONG MARK CIM SOPAHAWH H" + - "MONG MARK CIM KESPAHAWH HMONG MARK CIM KHAVPAHAWH HMONG MARK CIM SUAMPAH" + - "AWH HMONG MARK CIM HOMPAHAWH HMONG MARK CIM TAUMPAHAWH HMONG SIGN VOS TH" + - "OMPAHAWH HMONG SIGN VOS TSHAB CEEBPAHAWH HMONG SIGN CIM CHEEMPAHAWH HMON" + - "G SIGN VOS THIABPAHAWH HMONG SIGN VOS FEEMPAHAWH HMONG SIGN XYEEM NTXIVP" + - "AHAWH HMONG SIGN XYEEM RHOPAHAWH HMONG SIGN XYEEM TOVPAHAWH HMONG SIGN X" + - "YEEM FAIBPAHAWH HMONG SIGN VOS SEEVPAHAWH HMONG SIGN MEEJ SUABPAHAWH HMO" + - "NG SIGN VOS NRUAPAHAWH HMONG SIGN IB YAMPAHAWH HMONG SIGN XAUSPAHAWH HMO" + - "NG SIGN CIM TSOV ROGPAHAWH HMONG DIGIT ZEROPAHAWH HMONG DIGIT ONEPAHAWH " + - "HMONG DIGIT TWOPAHAWH HMONG DIGIT THREEPAHAWH HMONG DIGIT FOURPAHAWH HMO" + - "NG DIGIT FIVEPAHAWH HMONG DIGIT SIXPAHAWH HMONG DIGIT SEVENPAHAWH HMONG " + - "DIGIT EIGHTPAHAWH HMONG DIGIT NINEPAHAWH HMONG NUMBER TENSPAHAWH HMONG N" + - "UMBER HUNDREDSPAHAWH HMONG NUMBER TEN THOUSANDSPAHAWH HMONG NUMBER MILLI" + - "ONSPAHAWH HMONG NUMBER HUNDRED MILLIONSPAHAWH HMONG NUMBER TEN BILLIONSP" + - "AHAWH HMONG NUMBER TRILLIONSPAHAWH HMONG SIGN VOS LUBPAHAWH HMONG SIGN X" + - "YOOPAHAWH HMONG SIGN HLIPAHAWH HMONG SIGN THIRD-STAGE HLIPAHAWH HMONG SI" + - "GN ZWJ THAJPAHAWH HMONG SIGN HNUBPAHAWH HMONG SIGN NQIGPAHAWH HMONG SIGN" + - " XIABPAHAWH HMONG SIGN NTUJPAHAWH HMONG SIGN AVPAHAWH HMONG SIGN TXHEEJ " + - "CEEVPAHAWH HMONG SIGN MEEJ TSEEBPAHAWH HMONG SIGN TAUPAHAWH HMONG SIGN L" + - "OSPAHAWH HMONG SIGN MUSPAHAWH HMONG SIGN CIM HAIS LUS NTOG NTOGPAHAWH HM" + - "ONG SIGN CIM CUAM TSHOOJPAHAWH HMONG SIGN CIM TXWVPAHAWH HMONG SIGN CIM " + - "TXWV CHWVPAHAWH HMONG SIGN CIM PUB DAWBPAHAWH HMONG SIGN CIM NRES TOSPAH" + - "AWH HMONG CLAN SIGN TSHEEJPAHAWH HMONG CLAN SIGN YEEGPAHAWH HMONG CLAN S" + - "IGN LISPAHAWH HMONG CLAN SIGN LAUJPAHAWH HMONG CLAN SIGN XYOOJPAHAWH HMO" + - "NG CLAN SIGN KOOPAHAWH HMONG CLAN SIGN HAWJPAHAWH HMONG CLAN SIGN MUASPA" + - "HAWH HMONG CLAN SIGN THOJPAHAWH HMONG CLAN SIGN TSABPAHAWH HMONG CLAN SI" + - "GN PHABPAHAWH HMONG CLAN SIGN KHABPAHAWH HMONG CLAN SIGN HAMPAHAWH HMONG" + - " CLAN SIGN VAJPAHAWH HMONG CLAN SIGN FAJPAHAWH HMONG CLAN SIGN YAJPAHAWH" + - " HMONG CLAN SIGN TSWBPAHAWH HMONG CLAN SIGN KWMPAHAWH HMONG CLAN SIGN VW" + - "JMIAO LETTER PAMIAO LETTER BAMIAO LETTER YI PAMIAO LETTER PLAMIAO LETTER" + - " MAMIAO LETTER MHAMIAO LETTER ARCHAIC MAMIAO LETTER FAMIAO LETTER VAMIAO" + - " LETTER VFAMIAO LETTER TAMIAO LETTER DAMIAO LETTER YI TTAMIAO LETTER YI " + - "TAMIAO LETTER TTAMIAO LETTER DDAMIAO LETTER NAMIAO LETTER NHAMIAO LETTER" + - " YI NNAMIAO LETTER ARCHAIC NAMIAO LETTER NNAMIAO LETTER NNHAMIAO LETTER " + - "LAMIAO LETTER LYAMIAO LETTER LHAMIAO LETTER LHYAMIAO LETTER TLHAMIAO LET" + - "TER DLHAMIAO LETTER TLHYAMIAO LETTER DLHYAMIAO LETTER KAMIAO LETTER GAMI" + - "AO LETTER YI KAMIAO LETTER QAMIAO LETTER QGAMIAO LETTER NGAMIAO LETTER N" + - "GHAMIAO LETTER ARCHAIC NGAMIAO LETTER HAMIAO LETTER XAMIAO LETTER GHAMIA" + - "O LETTER GHHAMIAO LETTER TSSAMIAO LETTER DZZAMIAO LETTER NYAMIAO LETTER " + - "NYHAMIAO LETTER TSHAMIAO LETTER DZHAMIAO LETTER YI TSHAMIAO LETTER YI DZ" + - "HAMIAO LETTER REFORMED TSHAMIAO LETTER SHAMIAO LETTER SSAMIAO LETTER ZHA" + - "MIAO LETTER ZSHAMIAO LETTER TSAMIAO LETTER DZAMIAO LETTER YI TSAMIAO LET" + - "TER SAMIAO LETTER ZAMIAO LETTER ZSAMIAO LETTER ZZAMIAO LETTER ZZSAMIAO L" + - "ETTER ARCHAIC ZZAMIAO LETTER ZZYAMIAO LETTER ZZSYAMIAO LETTER WAMIAO LET" + - "TER AHMIAO LETTER HHAMIAO LETTER NASALIZATIONMIAO SIGN ASPIRATIONMIAO SI" + - "GN REFORMED VOICINGMIAO SIGN REFORMED ASPIRATIONMIAO VOWEL SIGN AMIAO VO" + - "WEL SIGN AAMIAO VOWEL SIGN AHHMIAO VOWEL SIGN ANMIAO VOWEL SIGN ANGMIAO " + - "VOWEL SIGN OMIAO VOWEL SIGN OOMIAO VOWEL SIGN WOMIAO VOWEL SIGN WMIAO VO" + - "WEL SIGN EMIAO VOWEL SIGN ENMIAO VOWEL SIGN ENGMIAO VOWEL SIGN OEYMIAO V" + - "OWEL SIGN IMIAO VOWEL SIGN IAMIAO VOWEL SIGN IANMIAO VOWEL SIGN IANGMIAO" + - " VOWEL SIGN IOMIAO VOWEL SIGN IEMIAO VOWEL SIGN IIMIAO VOWEL SIGN IUMIAO" + - " VOWEL SIGN INGMIAO VOWEL SIGN UMIAO VOWEL SIGN UAMIAO VOWEL SIGN UANMIA" + - "O VOWEL SIGN UANGMIAO VOWEL SIGN UUMIAO VOWEL SIGN UEIMIAO VOWEL SIGN UN" + - "GMIAO VOWEL SIGN YMIAO VOWEL SIGN YIMIAO VOWEL SIGN AEMIAO VOWEL SIGN AE" + - "EMIAO VOWEL SIGN ERRMIAO VOWEL SIGN ROUNDED ERRMIAO VOWEL SIGN ERMIAO VO" + - "WEL SIGN ROUNDED ERMIAO VOWEL SIGN AIMIAO VOWEL SIGN EIMIAO VOWEL SIGN A" + - "UMIAO VOWEL SIGN OUMIAO VOWEL SIGN NMIAO VOWEL SIGN NGMIAO TONE RIGHTMIA" + - "O TONE TOP RIGHTMIAO TONE ABOVEMIAO TONE BELOWMIAO LETTER TONE-2MIAO LET" + - "TER TONE-3MIAO LETTER TONE-4MIAO LETTER TONE-5MIAO LETTER TONE-6MIAO LET" + - "TER TONE-7MIAO LETTER TONE-8MIAO LETTER REFORMED TONE-1MIAO LETTER REFOR" + - "MED TONE-2MIAO LETTER REFORMED TONE-4MIAO LETTER REFORMED TONE-5MIAO LET" + - "TER REFORMED TONE-6MIAO LETTER REFORMED TONE-8TANGUT ITERATION MARKTANGU") + ("" + - "T COMPONENT-001TANGUT COMPONENT-002TANGUT COMPONENT-003TANGUT COMPONENT-" + - "004TANGUT COMPONENT-005TANGUT COMPONENT-006TANGUT COMPONENT-007TANGUT CO" + - "MPONENT-008TANGUT COMPONENT-009TANGUT COMPONENT-010TANGUT COMPONENT-011T" + - "ANGUT COMPONENT-012TANGUT COMPONENT-013TANGUT COMPONENT-014TANGUT COMPON" + - "ENT-015TANGUT COMPONENT-016TANGUT COMPONENT-017TANGUT COMPONENT-018TANGU" + - "T COMPONENT-019TANGUT COMPONENT-020TANGUT COMPONENT-021TANGUT COMPONENT-" + - "022TANGUT COMPONENT-023TANGUT COMPONENT-024TANGUT COMPONENT-025TANGUT CO" + - "MPONENT-026TANGUT COMPONENT-027TANGUT COMPONENT-028TANGUT COMPONENT-029T" + - "ANGUT COMPONENT-030TANGUT COMPONENT-031TANGUT COMPONENT-032TANGUT COMPON" + - "ENT-033TANGUT COMPONENT-034TANGUT COMPONENT-035TANGUT COMPONENT-036TANGU" + - "T COMPONENT-037TANGUT COMPONENT-038TANGUT COMPONENT-039TANGUT COMPONENT-" + - "040TANGUT COMPONENT-041TANGUT COMPONENT-042TANGUT COMPONENT-043TANGUT CO" + - "MPONENT-044TANGUT COMPONENT-045TANGUT COMPONENT-046TANGUT COMPONENT-047T" + - "ANGUT COMPONENT-048TANGUT COMPONENT-049TANGUT COMPONENT-050TANGUT COMPON" + - "ENT-051TANGUT COMPONENT-052TANGUT COMPONENT-053TANGUT COMPONENT-054TANGU" + - "T COMPONENT-055TANGUT COMPONENT-056TANGUT COMPONENT-057TANGUT COMPONENT-" + - "058TANGUT COMPONENT-059TANGUT COMPONENT-060TANGUT COMPONENT-061TANGUT CO" + - "MPONENT-062TANGUT COMPONENT-063TANGUT COMPONENT-064TANGUT COMPONENT-065T" + - "ANGUT COMPONENT-066TANGUT COMPONENT-067TANGUT COMPONENT-068TANGUT COMPON" + - "ENT-069TANGUT COMPONENT-070TANGUT COMPONENT-071TANGUT COMPONENT-072TANGU" + - "T COMPONENT-073TANGUT COMPONENT-074TANGUT COMPONENT-075TANGUT COMPONENT-" + - "076TANGUT COMPONENT-077TANGUT COMPONENT-078TANGUT COMPONENT-079TANGUT CO" + - "MPONENT-080TANGUT COMPONENT-081TANGUT COMPONENT-082TANGUT COMPONENT-083T" + - "ANGUT COMPONENT-084TANGUT COMPONENT-085TANGUT COMPONENT-086TANGUT COMPON" + - "ENT-087TANGUT COMPONENT-088TANGUT COMPONENT-089TANGUT COMPONENT-090TANGU" + - "T COMPONENT-091TANGUT COMPONENT-092TANGUT COMPONENT-093TANGUT COMPONENT-" + - "094TANGUT COMPONENT-095TANGUT COMPONENT-096TANGUT COMPONENT-097TANGUT CO" + - "MPONENT-098TANGUT COMPONENT-099TANGUT COMPONENT-100TANGUT COMPONENT-101T" + - "ANGUT COMPONENT-102TANGUT COMPONENT-103TANGUT COMPONENT-104TANGUT COMPON" + - "ENT-105TANGUT COMPONENT-106TANGUT COMPONENT-107TANGUT COMPONENT-108TANGU" + - "T COMPONENT-109TANGUT COMPONENT-110TANGUT COMPONENT-111TANGUT COMPONENT-" + - "112TANGUT COMPONENT-113TANGUT COMPONENT-114TANGUT COMPONENT-115TANGUT CO" + - "MPONENT-116TANGUT COMPONENT-117TANGUT COMPONENT-118TANGUT COMPONENT-119T" + - "ANGUT COMPONENT-120TANGUT COMPONENT-121TANGUT COMPONENT-122TANGUT COMPON" + - "ENT-123TANGUT COMPONENT-124TANGUT COMPONENT-125TANGUT COMPONENT-126TANGU" + - "T COMPONENT-127TANGUT COMPONENT-128TANGUT COMPONENT-129TANGUT COMPONENT-" + - "130TANGUT COMPONENT-131TANGUT COMPONENT-132TANGUT COMPONENT-133TANGUT CO" + - "MPONENT-134TANGUT COMPONENT-135TANGUT COMPONENT-136TANGUT COMPONENT-137T" + - "ANGUT COMPONENT-138TANGUT COMPONENT-139TANGUT COMPONENT-140TANGUT COMPON" + - "ENT-141TANGUT COMPONENT-142TANGUT COMPONENT-143TANGUT COMPONENT-144TANGU" + - "T COMPONENT-145TANGUT COMPONENT-146TANGUT COMPONENT-147TANGUT COMPONENT-" + - "148TANGUT COMPONENT-149TANGUT COMPONENT-150TANGUT COMPONENT-151TANGUT CO" + - "MPONENT-152TANGUT COMPONENT-153TANGUT COMPONENT-154TANGUT COMPONENT-155T" + - "ANGUT COMPONENT-156TANGUT COMPONENT-157TANGUT COMPONENT-158TANGUT COMPON" + - "ENT-159TANGUT COMPONENT-160TANGUT COMPONENT-161TANGUT COMPONENT-162TANGU" + - "T COMPONENT-163TANGUT COMPONENT-164TANGUT COMPONENT-165TANGUT COMPONENT-" + - "166TANGUT COMPONENT-167TANGUT COMPONENT-168TANGUT COMPONENT-169TANGUT CO" + - "MPONENT-170TANGUT COMPONENT-171TANGUT COMPONENT-172TANGUT COMPONENT-173T" + - "ANGUT COMPONENT-174TANGUT COMPONENT-175TANGUT COMPONENT-176TANGUT COMPON" + - "ENT-177TANGUT COMPONENT-178TANGUT COMPONENT-179TANGUT COMPONENT-180TANGU" + - "T COMPONENT-181TANGUT COMPONENT-182TANGUT COMPONENT-183TANGUT COMPONENT-" + - "184TANGUT COMPONENT-185TANGUT COMPONENT-186TANGUT COMPONENT-187TANGUT CO" + - "MPONENT-188TANGUT COMPONENT-189TANGUT COMPONENT-190TANGUT COMPONENT-191T" + - "ANGUT COMPONENT-192TANGUT COMPONENT-193TANGUT COMPONENT-194TANGUT COMPON" + - "ENT-195TANGUT COMPONENT-196TANGUT COMPONENT-197TANGUT COMPONENT-198TANGU" + - "T COMPONENT-199TANGUT COMPONENT-200TANGUT COMPONENT-201TANGUT COMPONENT-" + - "202TANGUT COMPONENT-203TANGUT COMPONENT-204TANGUT COMPONENT-205TANGUT CO" + - "MPONENT-206TANGUT COMPONENT-207TANGUT COMPONENT-208TANGUT COMPONENT-209T" + - "ANGUT COMPONENT-210TANGUT COMPONENT-211TANGUT COMPONENT-212TANGUT COMPON" + - "ENT-213TANGUT COMPONENT-214TANGUT COMPONENT-215TANGUT COMPONENT-216TANGU" + - "T COMPONENT-217TANGUT COMPONENT-218TANGUT COMPONENT-219TANGUT COMPONENT-" + - "220TANGUT COMPONENT-221TANGUT COMPONENT-222TANGUT COMPONENT-223TANGUT CO" + - "MPONENT-224TANGUT COMPONENT-225TANGUT COMPONENT-226TANGUT COMPONENT-227T" + - "ANGUT COMPONENT-228TANGUT COMPONENT-229TANGUT COMPONENT-230TANGUT COMPON") + ("" + - "ENT-231TANGUT COMPONENT-232TANGUT COMPONENT-233TANGUT COMPONENT-234TANGU" + - "T COMPONENT-235TANGUT COMPONENT-236TANGUT COMPONENT-237TANGUT COMPONENT-" + - "238TANGUT COMPONENT-239TANGUT COMPONENT-240TANGUT COMPONENT-241TANGUT CO" + - "MPONENT-242TANGUT COMPONENT-243TANGUT COMPONENT-244TANGUT COMPONENT-245T" + - "ANGUT COMPONENT-246TANGUT COMPONENT-247TANGUT COMPONENT-248TANGUT COMPON" + - "ENT-249TANGUT COMPONENT-250TANGUT COMPONENT-251TANGUT COMPONENT-252TANGU" + - "T COMPONENT-253TANGUT COMPONENT-254TANGUT COMPONENT-255TANGUT COMPONENT-" + - "256TANGUT COMPONENT-257TANGUT COMPONENT-258TANGUT COMPONENT-259TANGUT CO" + - "MPONENT-260TANGUT COMPONENT-261TANGUT COMPONENT-262TANGUT COMPONENT-263T" + - "ANGUT COMPONENT-264TANGUT COMPONENT-265TANGUT COMPONENT-266TANGUT COMPON" + - "ENT-267TANGUT COMPONENT-268TANGUT COMPONENT-269TANGUT COMPONENT-270TANGU" + - "T COMPONENT-271TANGUT COMPONENT-272TANGUT COMPONENT-273TANGUT COMPONENT-" + - "274TANGUT COMPONENT-275TANGUT COMPONENT-276TANGUT COMPONENT-277TANGUT CO" + - "MPONENT-278TANGUT COMPONENT-279TANGUT COMPONENT-280TANGUT COMPONENT-281T" + - "ANGUT COMPONENT-282TANGUT COMPONENT-283TANGUT COMPONENT-284TANGUT COMPON" + - "ENT-285TANGUT COMPONENT-286TANGUT COMPONENT-287TANGUT COMPONENT-288TANGU" + - "T COMPONENT-289TANGUT COMPONENT-290TANGUT COMPONENT-291TANGUT COMPONENT-" + - "292TANGUT COMPONENT-293TANGUT COMPONENT-294TANGUT COMPONENT-295TANGUT CO" + - "MPONENT-296TANGUT COMPONENT-297TANGUT COMPONENT-298TANGUT COMPONENT-299T" + - "ANGUT COMPONENT-300TANGUT COMPONENT-301TANGUT COMPONENT-302TANGUT COMPON" + - "ENT-303TANGUT COMPONENT-304TANGUT COMPONENT-305TANGUT COMPONENT-306TANGU" + - "T COMPONENT-307TANGUT COMPONENT-308TANGUT COMPONENT-309TANGUT COMPONENT-" + - "310TANGUT COMPONENT-311TANGUT COMPONENT-312TANGUT COMPONENT-313TANGUT CO" + - "MPONENT-314TANGUT COMPONENT-315TANGUT COMPONENT-316TANGUT COMPONENT-317T" + - "ANGUT COMPONENT-318TANGUT COMPONENT-319TANGUT COMPONENT-320TANGUT COMPON" + - "ENT-321TANGUT COMPONENT-322TANGUT COMPONENT-323TANGUT COMPONENT-324TANGU" + - "T COMPONENT-325TANGUT COMPONENT-326TANGUT COMPONENT-327TANGUT COMPONENT-" + - "328TANGUT COMPONENT-329TANGUT COMPONENT-330TANGUT COMPONENT-331TANGUT CO" + - "MPONENT-332TANGUT COMPONENT-333TANGUT COMPONENT-334TANGUT COMPONENT-335T" + - "ANGUT COMPONENT-336TANGUT COMPONENT-337TANGUT COMPONENT-338TANGUT COMPON" + - "ENT-339TANGUT COMPONENT-340TANGUT COMPONENT-341TANGUT COMPONENT-342TANGU" + - "T COMPONENT-343TANGUT COMPONENT-344TANGUT COMPONENT-345TANGUT COMPONENT-" + - "346TANGUT COMPONENT-347TANGUT COMPONENT-348TANGUT COMPONENT-349TANGUT CO" + - "MPONENT-350TANGUT COMPONENT-351TANGUT COMPONENT-352TANGUT COMPONENT-353T" + - "ANGUT COMPONENT-354TANGUT COMPONENT-355TANGUT COMPONENT-356TANGUT COMPON" + - "ENT-357TANGUT COMPONENT-358TANGUT COMPONENT-359TANGUT COMPONENT-360TANGU" + - "T COMPONENT-361TANGUT COMPONENT-362TANGUT COMPONENT-363TANGUT COMPONENT-" + - "364TANGUT COMPONENT-365TANGUT COMPONENT-366TANGUT COMPONENT-367TANGUT CO" + - "MPONENT-368TANGUT COMPONENT-369TANGUT COMPONENT-370TANGUT COMPONENT-371T" + - "ANGUT COMPONENT-372TANGUT COMPONENT-373TANGUT COMPONENT-374TANGUT COMPON" + - "ENT-375TANGUT COMPONENT-376TANGUT COMPONENT-377TANGUT COMPONENT-378TANGU" + - "T COMPONENT-379TANGUT COMPONENT-380TANGUT COMPONENT-381TANGUT COMPONENT-" + - "382TANGUT COMPONENT-383TANGUT COMPONENT-384TANGUT COMPONENT-385TANGUT CO" + - "MPONENT-386TANGUT COMPONENT-387TANGUT COMPONENT-388TANGUT COMPONENT-389T" + - "ANGUT COMPONENT-390TANGUT COMPONENT-391TANGUT COMPONENT-392TANGUT COMPON" + - "ENT-393TANGUT COMPONENT-394TANGUT COMPONENT-395TANGUT COMPONENT-396TANGU" + - "T COMPONENT-397TANGUT COMPONENT-398TANGUT COMPONENT-399TANGUT COMPONENT-" + - "400TANGUT COMPONENT-401TANGUT COMPONENT-402TANGUT COMPONENT-403TANGUT CO" + - "MPONENT-404TANGUT COMPONENT-405TANGUT COMPONENT-406TANGUT COMPONENT-407T" + - "ANGUT COMPONENT-408TANGUT COMPONENT-409TANGUT COMPONENT-410TANGUT COMPON" + - "ENT-411TANGUT COMPONENT-412TANGUT COMPONENT-413TANGUT COMPONENT-414TANGU" + - "T COMPONENT-415TANGUT COMPONENT-416TANGUT COMPONENT-417TANGUT COMPONENT-" + - "418TANGUT COMPONENT-419TANGUT COMPONENT-420TANGUT COMPONENT-421TANGUT CO" + - "MPONENT-422TANGUT COMPONENT-423TANGUT COMPONENT-424TANGUT COMPONENT-425T" + - "ANGUT COMPONENT-426TANGUT COMPONENT-427TANGUT COMPONENT-428TANGUT COMPON" + - "ENT-429TANGUT COMPONENT-430TANGUT COMPONENT-431TANGUT COMPONENT-432TANGU" + - "T COMPONENT-433TANGUT COMPONENT-434TANGUT COMPONENT-435TANGUT COMPONENT-" + - "436TANGUT COMPONENT-437TANGUT COMPONENT-438TANGUT COMPONENT-439TANGUT CO" + - "MPONENT-440TANGUT COMPONENT-441TANGUT COMPONENT-442TANGUT COMPONENT-443T" + - "ANGUT COMPONENT-444TANGUT COMPONENT-445TANGUT COMPONENT-446TANGUT COMPON" + - "ENT-447TANGUT COMPONENT-448TANGUT COMPONENT-449TANGUT COMPONENT-450TANGU" + - "T COMPONENT-451TANGUT COMPONENT-452TANGUT COMPONENT-453TANGUT COMPONENT-" + - "454TANGUT COMPONENT-455TANGUT COMPONENT-456TANGUT COMPONENT-457TANGUT CO" + - "MPONENT-458TANGUT COMPONENT-459TANGUT COMPONENT-460TANGUT COMPONENT-461T") + ("" + - "ANGUT COMPONENT-462TANGUT COMPONENT-463TANGUT COMPONENT-464TANGUT COMPON" + - "ENT-465TANGUT COMPONENT-466TANGUT COMPONENT-467TANGUT COMPONENT-468TANGU" + - "T COMPONENT-469TANGUT COMPONENT-470TANGUT COMPONENT-471TANGUT COMPONENT-" + - "472TANGUT COMPONENT-473TANGUT COMPONENT-474TANGUT COMPONENT-475TANGUT CO" + - "MPONENT-476TANGUT COMPONENT-477TANGUT COMPONENT-478TANGUT COMPONENT-479T" + - "ANGUT COMPONENT-480TANGUT COMPONENT-481TANGUT COMPONENT-482TANGUT COMPON" + - "ENT-483TANGUT COMPONENT-484TANGUT COMPONENT-485TANGUT COMPONENT-486TANGU" + - "T COMPONENT-487TANGUT COMPONENT-488TANGUT COMPONENT-489TANGUT COMPONENT-" + - "490TANGUT COMPONENT-491TANGUT COMPONENT-492TANGUT COMPONENT-493TANGUT CO" + - "MPONENT-494TANGUT COMPONENT-495TANGUT COMPONENT-496TANGUT COMPONENT-497T" + - "ANGUT COMPONENT-498TANGUT COMPONENT-499TANGUT COMPONENT-500TANGUT COMPON" + - "ENT-501TANGUT COMPONENT-502TANGUT COMPONENT-503TANGUT COMPONENT-504TANGU" + - "T COMPONENT-505TANGUT COMPONENT-506TANGUT COMPONENT-507TANGUT COMPONENT-" + - "508TANGUT COMPONENT-509TANGUT COMPONENT-510TANGUT COMPONENT-511TANGUT CO" + - "MPONENT-512TANGUT COMPONENT-513TANGUT COMPONENT-514TANGUT COMPONENT-515T" + - "ANGUT COMPONENT-516TANGUT COMPONENT-517TANGUT COMPONENT-518TANGUT COMPON" + - "ENT-519TANGUT COMPONENT-520TANGUT COMPONENT-521TANGUT COMPONENT-522TANGU" + - "T COMPONENT-523TANGUT COMPONENT-524TANGUT COMPONENT-525TANGUT COMPONENT-" + - "526TANGUT COMPONENT-527TANGUT COMPONENT-528TANGUT COMPONENT-529TANGUT CO" + - "MPONENT-530TANGUT COMPONENT-531TANGUT COMPONENT-532TANGUT COMPONENT-533T" + - "ANGUT COMPONENT-534TANGUT COMPONENT-535TANGUT COMPONENT-536TANGUT COMPON" + - "ENT-537TANGUT COMPONENT-538TANGUT COMPONENT-539TANGUT COMPONENT-540TANGU" + - "T COMPONENT-541TANGUT COMPONENT-542TANGUT COMPONENT-543TANGUT COMPONENT-" + - "544TANGUT COMPONENT-545TANGUT COMPONENT-546TANGUT COMPONENT-547TANGUT CO" + - "MPONENT-548TANGUT COMPONENT-549TANGUT COMPONENT-550TANGUT COMPONENT-551T" + - "ANGUT COMPONENT-552TANGUT COMPONENT-553TANGUT COMPONENT-554TANGUT COMPON" + - "ENT-555TANGUT COMPONENT-556TANGUT COMPONENT-557TANGUT COMPONENT-558TANGU" + - "T COMPONENT-559TANGUT COMPONENT-560TANGUT COMPONENT-561TANGUT COMPONENT-" + - "562TANGUT COMPONENT-563TANGUT COMPONENT-564TANGUT COMPONENT-565TANGUT CO" + - "MPONENT-566TANGUT COMPONENT-567TANGUT COMPONENT-568TANGUT COMPONENT-569T" + - "ANGUT COMPONENT-570TANGUT COMPONENT-571TANGUT COMPONENT-572TANGUT COMPON" + - "ENT-573TANGUT COMPONENT-574TANGUT COMPONENT-575TANGUT COMPONENT-576TANGU" + - "T COMPONENT-577TANGUT COMPONENT-578TANGUT COMPONENT-579TANGUT COMPONENT-" + - "580TANGUT COMPONENT-581TANGUT COMPONENT-582TANGUT COMPONENT-583TANGUT CO" + - "MPONENT-584TANGUT COMPONENT-585TANGUT COMPONENT-586TANGUT COMPONENT-587T" + - "ANGUT COMPONENT-588TANGUT COMPONENT-589TANGUT COMPONENT-590TANGUT COMPON" + - "ENT-591TANGUT COMPONENT-592TANGUT COMPONENT-593TANGUT COMPONENT-594TANGU" + - "T COMPONENT-595TANGUT COMPONENT-596TANGUT COMPONENT-597TANGUT COMPONENT-" + - "598TANGUT COMPONENT-599TANGUT COMPONENT-600TANGUT COMPONENT-601TANGUT CO" + - "MPONENT-602TANGUT COMPONENT-603TANGUT COMPONENT-604TANGUT COMPONENT-605T" + - "ANGUT COMPONENT-606TANGUT COMPONENT-607TANGUT COMPONENT-608TANGUT COMPON" + - "ENT-609TANGUT COMPONENT-610TANGUT COMPONENT-611TANGUT COMPONENT-612TANGU" + - "T COMPONENT-613TANGUT COMPONENT-614TANGUT COMPONENT-615TANGUT COMPONENT-" + - "616TANGUT COMPONENT-617TANGUT COMPONENT-618TANGUT COMPONENT-619TANGUT CO" + - "MPONENT-620TANGUT COMPONENT-621TANGUT COMPONENT-622TANGUT COMPONENT-623T" + - "ANGUT COMPONENT-624TANGUT COMPONENT-625TANGUT COMPONENT-626TANGUT COMPON" + - "ENT-627TANGUT COMPONENT-628TANGUT COMPONENT-629TANGUT COMPONENT-630TANGU" + - "T COMPONENT-631TANGUT COMPONENT-632TANGUT COMPONENT-633TANGUT COMPONENT-" + - "634TANGUT COMPONENT-635TANGUT COMPONENT-636TANGUT COMPONENT-637TANGUT CO" + - "MPONENT-638TANGUT COMPONENT-639TANGUT COMPONENT-640TANGUT COMPONENT-641T" + - "ANGUT COMPONENT-642TANGUT COMPONENT-643TANGUT COMPONENT-644TANGUT COMPON" + - "ENT-645TANGUT COMPONENT-646TANGUT COMPONENT-647TANGUT COMPONENT-648TANGU" + - "T COMPONENT-649TANGUT COMPONENT-650TANGUT COMPONENT-651TANGUT COMPONENT-" + - "652TANGUT COMPONENT-653TANGUT COMPONENT-654TANGUT COMPONENT-655TANGUT CO" + - "MPONENT-656TANGUT COMPONENT-657TANGUT COMPONENT-658TANGUT COMPONENT-659T" + - "ANGUT COMPONENT-660TANGUT COMPONENT-661TANGUT COMPONENT-662TANGUT COMPON" + - "ENT-663TANGUT COMPONENT-664TANGUT COMPONENT-665TANGUT COMPONENT-666TANGU" + - "T COMPONENT-667TANGUT COMPONENT-668TANGUT COMPONENT-669TANGUT COMPONENT-" + - "670TANGUT COMPONENT-671TANGUT COMPONENT-672TANGUT COMPONENT-673TANGUT CO" + - "MPONENT-674TANGUT COMPONENT-675TANGUT COMPONENT-676TANGUT COMPONENT-677T" + - "ANGUT COMPONENT-678TANGUT COMPONENT-679TANGUT COMPONENT-680TANGUT COMPON" + - "ENT-681TANGUT COMPONENT-682TANGUT COMPONENT-683TANGUT COMPONENT-684TANGU" + - "T COMPONENT-685TANGUT COMPONENT-686TANGUT COMPONENT-687TANGUT COMPONENT-" + - "688TANGUT COMPONENT-689TANGUT COMPONENT-690TANGUT COMPONENT-691TANGUT CO") + ("" + - "MPONENT-692TANGUT COMPONENT-693TANGUT COMPONENT-694TANGUT COMPONENT-695T" + - "ANGUT COMPONENT-696TANGUT COMPONENT-697TANGUT COMPONENT-698TANGUT COMPON" + - "ENT-699TANGUT COMPONENT-700TANGUT COMPONENT-701TANGUT COMPONENT-702TANGU" + - "T COMPONENT-703TANGUT COMPONENT-704TANGUT COMPONENT-705TANGUT COMPONENT-" + - "706TANGUT COMPONENT-707TANGUT COMPONENT-708TANGUT COMPONENT-709TANGUT CO" + - "MPONENT-710TANGUT COMPONENT-711TANGUT COMPONENT-712TANGUT COMPONENT-713T" + - "ANGUT COMPONENT-714TANGUT COMPONENT-715TANGUT COMPONENT-716TANGUT COMPON" + - "ENT-717TANGUT COMPONENT-718TANGUT COMPONENT-719TANGUT COMPONENT-720TANGU" + - "T COMPONENT-721TANGUT COMPONENT-722TANGUT COMPONENT-723TANGUT COMPONENT-" + - "724TANGUT COMPONENT-725TANGUT COMPONENT-726TANGUT COMPONENT-727TANGUT CO" + - "MPONENT-728TANGUT COMPONENT-729TANGUT COMPONENT-730TANGUT COMPONENT-731T" + - "ANGUT COMPONENT-732TANGUT COMPONENT-733TANGUT COMPONENT-734TANGUT COMPON" + - "ENT-735TANGUT COMPONENT-736TANGUT COMPONENT-737TANGUT COMPONENT-738TANGU" + - "T COMPONENT-739TANGUT COMPONENT-740TANGUT COMPONENT-741TANGUT COMPONENT-" + - "742TANGUT COMPONENT-743TANGUT COMPONENT-744TANGUT COMPONENT-745TANGUT CO" + - "MPONENT-746TANGUT COMPONENT-747TANGUT COMPONENT-748TANGUT COMPONENT-749T" + - "ANGUT COMPONENT-750TANGUT COMPONENT-751TANGUT COMPONENT-752TANGUT COMPON" + - "ENT-753TANGUT COMPONENT-754TANGUT COMPONENT-755KATAKANA LETTER ARCHAIC E" + - "HIRAGANA LETTER ARCHAIC YEDUPLOYAN LETTER HDUPLOYAN LETTER XDUPLOYAN LET" + - "TER PDUPLOYAN LETTER TDUPLOYAN LETTER FDUPLOYAN LETTER KDUPLOYAN LETTER " + - "LDUPLOYAN LETTER BDUPLOYAN LETTER DDUPLOYAN LETTER VDUPLOYAN LETTER GDUP" + - "LOYAN LETTER RDUPLOYAN LETTER P NDUPLOYAN LETTER D SDUPLOYAN LETTER F ND" + - "UPLOYAN LETTER K MDUPLOYAN LETTER R SDUPLOYAN LETTER THDUPLOYAN LETTER S" + - "LOAN DHDUPLOYAN LETTER DHDUPLOYAN LETTER KKDUPLOYAN LETTER SLOAN JDUPLOY" + - "AN LETTER HLDUPLOYAN LETTER LHDUPLOYAN LETTER RHDUPLOYAN LETTER MDUPLOYA" + - "N LETTER NDUPLOYAN LETTER JDUPLOYAN LETTER SDUPLOYAN LETTER M NDUPLOYAN " + - "LETTER N MDUPLOYAN LETTER J MDUPLOYAN LETTER S JDUPLOYAN LETTER M WITH D" + - "OTDUPLOYAN LETTER N WITH DOTDUPLOYAN LETTER J WITH DOTDUPLOYAN LETTER J " + - "WITH DOTS INSIDE AND ABOVEDUPLOYAN LETTER S WITH DOTDUPLOYAN LETTER S WI" + - "TH DOT BELOWDUPLOYAN LETTER M SDUPLOYAN LETTER N SDUPLOYAN LETTER J SDUP" + - "LOYAN LETTER S SDUPLOYAN LETTER M N SDUPLOYAN LETTER N M SDUPLOYAN LETTE" + - "R J M SDUPLOYAN LETTER S J SDUPLOYAN LETTER J S WITH DOTDUPLOYAN LETTER " + - "J NDUPLOYAN LETTER J N SDUPLOYAN LETTER S TDUPLOYAN LETTER S T RDUPLOYAN" + - " LETTER S PDUPLOYAN LETTER S P RDUPLOYAN LETTER T SDUPLOYAN LETTER T R S" + - "DUPLOYAN LETTER WDUPLOYAN LETTER WHDUPLOYAN LETTER W RDUPLOYAN LETTER S " + - "NDUPLOYAN LETTER S MDUPLOYAN LETTER K R SDUPLOYAN LETTER G R SDUPLOYAN L" + - "ETTER S KDUPLOYAN LETTER S K RDUPLOYAN LETTER ADUPLOYAN LETTER SLOAN OWD" + - "UPLOYAN LETTER OADUPLOYAN LETTER ODUPLOYAN LETTER AOUDUPLOYAN LETTER IDU" + - "PLOYAN LETTER EDUPLOYAN LETTER IEDUPLOYAN LETTER SHORT IDUPLOYAN LETTER " + - "UIDUPLOYAN LETTER EEDUPLOYAN LETTER SLOAN EHDUPLOYAN LETTER ROMANIAN IDU" + - "PLOYAN LETTER SLOAN EEDUPLOYAN LETTER LONG IDUPLOYAN LETTER YEDUPLOYAN L" + - "ETTER UDUPLOYAN LETTER EUDUPLOYAN LETTER XWDUPLOYAN LETTER U NDUPLOYAN L" + - "ETTER LONG UDUPLOYAN LETTER ROMANIAN UDUPLOYAN LETTER UHDUPLOYAN LETTER " + - "SLOAN UDUPLOYAN LETTER OOHDUPLOYAN LETTER OWDUPLOYAN LETTER OUDUPLOYAN L" + - "ETTER WADUPLOYAN LETTER WODUPLOYAN LETTER WIDUPLOYAN LETTER WEIDUPLOYAN " + - "LETTER WOWDUPLOYAN LETTER NASAL UDUPLOYAN LETTER NASAL ODUPLOYAN LETTER " + - "NASAL IDUPLOYAN LETTER NASAL ADUPLOYAN LETTER PERNIN ANDUPLOYAN LETTER P" + - "ERNIN AMDUPLOYAN LETTER SLOAN ENDUPLOYAN LETTER SLOAN ANDUPLOYAN LETTER " + - "SLOAN ONDUPLOYAN LETTER VOCALIC MDUPLOYAN AFFIX LEFT HORIZONTAL SECANTDU" + - "PLOYAN AFFIX MID HORIZONTAL SECANTDUPLOYAN AFFIX RIGHT HORIZONTAL SECANT" + - "DUPLOYAN AFFIX LOW VERTICAL SECANTDUPLOYAN AFFIX MID VERTICAL SECANTDUPL" + - "OYAN AFFIX HIGH VERTICAL SECANTDUPLOYAN AFFIX ATTACHED SECANTDUPLOYAN AF" + - "FIX ATTACHED LEFT-TO-RIGHT SECANTDUPLOYAN AFFIX ATTACHED TANGENTDUPLOYAN" + - " AFFIX ATTACHED TAILDUPLOYAN AFFIX ATTACHED E HOOKDUPLOYAN AFFIX ATTACHE" + - "D I HOOKDUPLOYAN AFFIX ATTACHED TANGENT HOOKDUPLOYAN AFFIX HIGH ACUTEDUP" + - "LOYAN AFFIX HIGH TIGHT ACUTEDUPLOYAN AFFIX HIGH GRAVEDUPLOYAN AFFIX HIGH" + - " LONG GRAVEDUPLOYAN AFFIX HIGH DOTDUPLOYAN AFFIX HIGH CIRCLEDUPLOYAN AFF" + - "IX HIGH LINEDUPLOYAN AFFIX HIGH WAVEDUPLOYAN AFFIX HIGH VERTICALDUPLOYAN" + - " AFFIX LOW ACUTEDUPLOYAN AFFIX LOW TIGHT ACUTEDUPLOYAN AFFIX LOW GRAVEDU" + - "PLOYAN AFFIX LOW LONG GRAVEDUPLOYAN AFFIX LOW DOTDUPLOYAN AFFIX LOW CIRC" + - "LEDUPLOYAN AFFIX LOW LINEDUPLOYAN AFFIX LOW WAVEDUPLOYAN AFFIX LOW VERTI" + - "CALDUPLOYAN AFFIX LOW ARROWDUPLOYAN SIGN O WITH CROSSDUPLOYAN THICK LETT" + - "ER SELECTORDUPLOYAN DOUBLE MARKDUPLOYAN PUNCTUATION CHINOOK FULL STOPSHO" + - "RTHAND FORMAT LETTER OVERLAPSHORTHAND FORMAT CONTINUING OVERLAPSHORTHAND") + ("" + - " FORMAT DOWN STEPSHORTHAND FORMAT UP STEPBYZANTINE MUSICAL SYMBOL PSILIB" + - "YZANTINE MUSICAL SYMBOL DASEIABYZANTINE MUSICAL SYMBOL PERISPOMENIBYZANT" + - "INE MUSICAL SYMBOL OXEIA EKFONITIKONBYZANTINE MUSICAL SYMBOL OXEIA DIPLI" + - "BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKONBYZANTINE MUSICAL SYMBOL VARE" + - "IA DIPLIBYZANTINE MUSICAL SYMBOL KATHISTIBYZANTINE MUSICAL SYMBOL SYRMAT" + - "IKIBYZANTINE MUSICAL SYMBOL PARAKLITIKIBYZANTINE MUSICAL SYMBOL YPOKRISI" + - "SBYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLIBYZANTINE MUSICAL SYMBOL KREMAS" + - "TIBYZANTINE MUSICAL SYMBOL APESO EKFONITIKONBYZANTINE MUSICAL SYMBOL EXO" + - " EKFONITIKONBYZANTINE MUSICAL SYMBOL TELEIABYZANTINE MUSICAL SYMBOL KENT" + - "IMATABYZANTINE MUSICAL SYMBOL APOSTROFOSBYZANTINE MUSICAL SYMBOL APOSTRO" + - "FOS DIPLIBYZANTINE MUSICAL SYMBOL SYNEVMABYZANTINE MUSICAL SYMBOL THITAB" + - "YZANTINE MUSICAL SYMBOL OLIGON ARCHAIONBYZANTINE MUSICAL SYMBOL GORGON A" + - "RCHAIONBYZANTINE MUSICAL SYMBOL PSILONBYZANTINE MUSICAL SYMBOL CHAMILONB" + - "YZANTINE MUSICAL SYMBOL VATHYBYZANTINE MUSICAL SYMBOL ISON ARCHAIONBYZAN" + - "TINE MUSICAL SYMBOL KENTIMA ARCHAIONBYZANTINE MUSICAL SYMBOL KENTIMATA A" + - "RCHAIONBYZANTINE MUSICAL SYMBOL SAXIMATABYZANTINE MUSICAL SYMBOL PARICHO" + - "NBYZANTINE MUSICAL SYMBOL STAVROS APODEXIABYZANTINE MUSICAL SYMBOL OXEIA" + - "I ARCHAIONBYZANTINE MUSICAL SYMBOL VAREIAI ARCHAIONBYZANTINE MUSICAL SYM" + - "BOL APODERMA ARCHAIONBYZANTINE MUSICAL SYMBOL APOTHEMABYZANTINE MUSICAL " + - "SYMBOL KLASMABYZANTINE MUSICAL SYMBOL REVMABYZANTINE MUSICAL SYMBOL PIAS" + - "MA ARCHAIONBYZANTINE MUSICAL SYMBOL TINAGMABYZANTINE MUSICAL SYMBOL ANAT" + - "RICHISMABYZANTINE MUSICAL SYMBOL SEISMABYZANTINE MUSICAL SYMBOL SYNAGMA " + - "ARCHAIONBYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROUBYZANTINE MUSICAL S" + - "YMBOL OYRANISMA ARCHAIONBYZANTINE MUSICAL SYMBOL THEMABYZANTINE MUSICAL " + - "SYMBOL LEMOIBYZANTINE MUSICAL SYMBOL DYOBYZANTINE MUSICAL SYMBOL TRIABYZ" + - "ANTINE MUSICAL SYMBOL TESSERABYZANTINE MUSICAL SYMBOL KRATIMATABYZANTINE" + - " MUSICAL SYMBOL APESO EXO NEOBYZANTINE MUSICAL SYMBOL FTHORA ARCHAIONBYZ" + - "ANTINE MUSICAL SYMBOL IMIFTHORABYZANTINE MUSICAL SYMBOL TROMIKON ARCHAIO" + - "NBYZANTINE MUSICAL SYMBOL KATAVA TROMIKONBYZANTINE MUSICAL SYMBOL PELAST" + - "ONBYZANTINE MUSICAL SYMBOL PSIFISTONBYZANTINE MUSICAL SYMBOL KONTEVMABYZ" + - "ANTINE MUSICAL SYMBOL CHOREVMA ARCHAIONBYZANTINE MUSICAL SYMBOL RAPISMAB" + - "YZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAIONBYZANTINE MUSICAL SYMBOL PAR" + - "AKLITIKI ARCHAIONBYZANTINE MUSICAL SYMBOL ICHADINBYZANTINE MUSICAL SYMBO" + - "L NANABYZANTINE MUSICAL SYMBOL PETASMABYZANTINE MUSICAL SYMBOL KONTEVMA " + - "ALLOBYZANTINE MUSICAL SYMBOL TROMIKON ALLOBYZANTINE MUSICAL SYMBOL STRAG" + - "GISMATABYZANTINE MUSICAL SYMBOL GRONTHISMATABYZANTINE MUSICAL SYMBOL ISO" + - "N NEOBYZANTINE MUSICAL SYMBOL OLIGON NEOBYZANTINE MUSICAL SYMBOL OXEIA N" + - "EOBYZANTINE MUSICAL SYMBOL PETASTIBYZANTINE MUSICAL SYMBOL KOUFISMABYZAN" + - "TINE MUSICAL SYMBOL PETASTOKOUFISMABYZANTINE MUSICAL SYMBOL KRATIMOKOUFI" + - "SMABYZANTINE MUSICAL SYMBOL PELASTON NEOBYZANTINE MUSICAL SYMBOL KENTIMA" + - "TA NEO ANOBYZANTINE MUSICAL SYMBOL KENTIMA NEO ANOBYZANTINE MUSICAL SYMB" + - "OL YPSILIBYZANTINE MUSICAL SYMBOL APOSTROFOS NEOBYZANTINE MUSICAL SYMBOL" + - " APOSTROFOI SYNDESMOS NEOBYZANTINE MUSICAL SYMBOL YPORROIBYZANTINE MUSIC" + - "AL SYMBOL KRATIMOYPORROONBYZANTINE MUSICAL SYMBOL ELAFRONBYZANTINE MUSIC" + - "AL SYMBOL CHAMILIBYZANTINE MUSICAL SYMBOL MIKRON ISONBYZANTINE MUSICAL S" + - "YMBOL VAREIA NEOBYZANTINE MUSICAL SYMBOL PIASMA NEOBYZANTINE MUSICAL SYM" + - "BOL PSIFISTON NEOBYZANTINE MUSICAL SYMBOL OMALONBYZANTINE MUSICAL SYMBOL" + - " ANTIKENOMABYZANTINE MUSICAL SYMBOL LYGISMABYZANTINE MUSICAL SYMBOL PARA" + - "KLITIKI NEOBYZANTINE MUSICAL SYMBOL PARAKALESMA NEOBYZANTINE MUSICAL SYM" + - "BOL ETERON PARAKALESMABYZANTINE MUSICAL SYMBOL KYLISMABYZANTINE MUSICAL " + - "SYMBOL ANTIKENOKYLISMABYZANTINE MUSICAL SYMBOL TROMIKON NEOBYZANTINE MUS" + - "ICAL SYMBOL EKSTREPTONBYZANTINE MUSICAL SYMBOL SYNAGMA NEOBYZANTINE MUSI" + - "CAL SYMBOL SYRMABYZANTINE MUSICAL SYMBOL CHOREVMA NEOBYZANTINE MUSICAL S" + - "YMBOL EPEGERMABYZANTINE MUSICAL SYMBOL SEISMA NEOBYZANTINE MUSICAL SYMBO" + - "L XIRON KLASMABYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTONBYZANTINE MUSICAL" + - " SYMBOL PSIFISTOLYGISMABYZANTINE MUSICAL SYMBOL TROMIKOLYGISMABYZANTINE " + - "MUSICAL SYMBOL TROMIKOPARAKALESMABYZANTINE MUSICAL SYMBOL PSIFISTOPARAKA" + - "LESMABYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMABYZANTINE MUSICAL SYMBOL PSI" + - "FISTOSYNAGMABYZANTINE MUSICAL SYMBOL GORGOSYNTHETONBYZANTINE MUSICAL SYM" + - "BOL ARGOSYNTHETONBYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETONBYZANTINE " + - "MUSICAL SYMBOL OYRANISMA NEOBYZANTINE MUSICAL SYMBOL THEMATISMOS ESOBYZA" + - "NTINE MUSICAL SYMBOL THEMATISMOS EXOBYZANTINE MUSICAL SYMBOL THEMA APLOU" + - "NBYZANTINE MUSICAL SYMBOL THES KAI APOTHESBYZANTINE MUSICAL SYMBOL KATAV" + - "ASMABYZANTINE MUSICAL SYMBOL ENDOFONONBYZANTINE MUSICAL SYMBOL YFEN KATO") + ("" + - "BYZANTINE MUSICAL SYMBOL YFEN ANOBYZANTINE MUSICAL SYMBOL STAVROSBYZANTI" + - "NE MUSICAL SYMBOL KLASMA ANOBYZANTINE MUSICAL SYMBOL DIPLI ARCHAIONBYZAN" + - "TINE MUSICAL SYMBOL KRATIMA ARCHAIONBYZANTINE MUSICAL SYMBOL KRATIMA ALL" + - "OBYZANTINE MUSICAL SYMBOL KRATIMA NEOBYZANTINE MUSICAL SYMBOL APODERMA N" + - "EOBYZANTINE MUSICAL SYMBOL APLIBYZANTINE MUSICAL SYMBOL DIPLIBYZANTINE M" + - "USICAL SYMBOL TRIPLIBYZANTINE MUSICAL SYMBOL TETRAPLIBYZANTINE MUSICAL S" + - "YMBOL KORONISBYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOUBYZANTINE MUSIC" + - "AL SYMBOL LEIMMA DYO CHRONONBYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONO" + - "NBYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONONBYZANTINE MUSICAL SYMBO" + - "L LEIMMA IMISEOS CHRONOUBYZANTINE MUSICAL SYMBOL GORGON NEO ANOBYZANTINE" + - " MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERABYZANTINE MUSICAL SYMBOL GO" + - "RGON PARESTIGMENON DEXIABYZANTINE MUSICAL SYMBOL DIGORGONBYZANTINE MUSIC" + - "AL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATOBYZANTINE MUSICAL SYMBOL D" + - "IGORGON PARESTIGMENON ARISTERA ANOBYZANTINE MUSICAL SYMBOL DIGORGON PARE" + - "STIGMENON DEXIABYZANTINE MUSICAL SYMBOL TRIGORGONBYZANTINE MUSICAL SYMBO" + - "L ARGONBYZANTINE MUSICAL SYMBOL IMIDIARGONBYZANTINE MUSICAL SYMBOL DIARG" + - "ONBYZANTINE MUSICAL SYMBOL AGOGI POLI ARGIBYZANTINE MUSICAL SYMBOL AGOGI" + - " ARGOTERIBYZANTINE MUSICAL SYMBOL AGOGI ARGIBYZANTINE MUSICAL SYMBOL AGO" + - "GI METRIABYZANTINE MUSICAL SYMBOL AGOGI MESIBYZANTINE MUSICAL SYMBOL AGO" + - "GI GORGIBYZANTINE MUSICAL SYMBOL AGOGI GORGOTERIBYZANTINE MUSICAL SYMBOL" + - " AGOGI POLI GORGIBYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOSBYZANTINE" + - " MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOSBYZANTINE MUSICAL SYMBOL MARTY" + - "RIA DEYTEROS ICHOSBYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOSB" + - "YZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOSBYZANTINE MUSICAL SYMBOL MA" + - "RTYRIA TRIFONIASBYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOSBYZANTIN" + - "E MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOSBYZANTINE MUSICAL SYMBOL" + - " MARTYRIA LEGETOS ICHOSBYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOSBY" + - "ZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOSBYZANTINE MUSICAL SYMBOL A" + - "POSTROFOI TELOUS ICHIMATOSBYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS" + - "BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIASBYZANTINE MUSICAL SYMBOL FA" + - "NEROSIS DIFONIASBYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOSBYZANTINE M" + - "USICAL SYMBOL MARTYRIA PROTOVARYS ICHOSBYZANTINE MUSICAL SYMBOL MARTYRIA" + - " PLAGIOS TETARTOS ICHOSBYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUNBYZAN" + - "TINE MUSICAL SYMBOL GORTHMIKON N DIPLOUNBYZANTINE MUSICAL SYMBOL ENARXIS" + - " KAI FTHORA VOUBYZANTINE MUSICAL SYMBOL IMIFONONBYZANTINE MUSICAL SYMBOL" + - " IMIFTHORONBYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOUBYZANT" + - "INE MUSICAL SYMBOL FTHORA DIATONIKI PABYZANTINE MUSICAL SYMBOL FTHORA DI" + - "ATONIKI NANABYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOSBYZANTINE MUSICAL " + - "SYMBOL FTHORA DIATONIKI DIBYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATON" + - "ON DIBYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KEBYZANTINE MUSICAL SYMBO" + - "L FTHORA DIATONIKI ZOBYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATOBY" + - "ZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANOBYZANTINE MUSICAL SYMBOL F" + - "THORA MALAKON CHROMA DIFONIASBYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHR" + - "OMA MONOFONIASBYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASISBYZANT" + - "INE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFIBYZANTINE MUSICAL SYMBOL " + - "FTHORA NENANOBYZANTINE MUSICAL SYMBOL CHROA ZYGOSBYZANTINE MUSICAL SYMBO" + - "L CHROA KLITONBYZANTINE MUSICAL SYMBOL CHROA SPATHIBYZANTINE MUSICAL SYM" + - "BOL FTHORA I YFESIS TETARTIMORIONBYZANTINE MUSICAL SYMBOL FTHORA ENARMON" + - "IOS ANTIFONIABYZANTINE MUSICAL SYMBOL YFESIS TRITIMORIONBYZANTINE MUSICA" + - "L SYMBOL DIESIS TRITIMORIONBYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION" + - "BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATABYZANTINE MUSICAL SYMBO" + - "L DIESIS MONOGRAMMOS TESSERA DODEKATABYZANTINE MUSICAL SYMBOL DIESIS DIG" + - "RAMMOS EX DODEKATABYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKA" + - "TABYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATABYZANTINE MUSICAL SYM" + - "BOL YFESIS MONOGRAMMOS TESSERA DODEKATABYZANTINE MUSICAL SYMBOL YFESIS D" + - "IGRAMMOS EX DODEKATABYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODE" + - "KATABYZANTINE MUSICAL SYMBOL GENIKI DIESISBYZANTINE MUSICAL SYMBOL GENIK" + - "I YFESISBYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRIBYZANTINE MUSICAL SY" + - "MBOL DIASTOLI APLI MEGALIBYZANTINE MUSICAL SYMBOL DIASTOLI DIPLIBYZANTIN" + - "E MUSICAL SYMBOL DIASTOLI THESEOSBYZANTINE MUSICAL SYMBOL SIMANSIS THESE" + - "OSBYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOUBYZANTINE MUSICAL SYM" + - "BOL SIMANSIS THESEOS TRISIMOUBYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS T" + - "ETRASIMOUBYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOSBYZANTINE MUSICAL SYMBO" + - "L SIMANSIS ARSEOS DISIMOUBYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIM") + ("" + - "OUBYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOUBYZANTINE MUSICAL S" + - "YMBOL DIGRAMMA GGBYZANTINE MUSICAL SYMBOL DIFTOGGOS OUBYZANTINE MUSICAL " + - "SYMBOL STIGMABYZANTINE MUSICAL SYMBOL ARKTIKO PABYZANTINE MUSICAL SYMBOL" + - " ARKTIKO VOUBYZANTINE MUSICAL SYMBOL ARKTIKO GABYZANTINE MUSICAL SYMBOL " + - "ARKTIKO DIBYZANTINE MUSICAL SYMBOL ARKTIKO KEBYZANTINE MUSICAL SYMBOL AR" + - "KTIKO ZOBYZANTINE MUSICAL SYMBOL ARKTIKO NIBYZANTINE MUSICAL SYMBOL KENT" + - "IMATA NEO MESOBYZANTINE MUSICAL SYMBOL KENTIMA NEO MESOBYZANTINE MUSICAL" + - " SYMBOL KENTIMATA NEO KATOBYZANTINE MUSICAL SYMBOL KENTIMA NEO KATOBYZAN" + - "TINE MUSICAL SYMBOL KLASMA KATOBYZANTINE MUSICAL SYMBOL GORGON NEO KATOM" + - "USICAL SYMBOL SINGLE BARLINEMUSICAL SYMBOL DOUBLE BARLINEMUSICAL SYMBOL " + - "FINAL BARLINEMUSICAL SYMBOL REVERSE FINAL BARLINEMUSICAL SYMBOL DASHED B" + - "ARLINEMUSICAL SYMBOL SHORT BARLINEMUSICAL SYMBOL LEFT REPEAT SIGNMUSICAL" + - " SYMBOL RIGHT REPEAT SIGNMUSICAL SYMBOL REPEAT DOTSMUSICAL SYMBOL DAL SE" + - "GNOMUSICAL SYMBOL DA CAPOMUSICAL SYMBOL SEGNOMUSICAL SYMBOL CODAMUSICAL " + - "SYMBOL REPEATED FIGURE-1MUSICAL SYMBOL REPEATED FIGURE-2MUSICAL SYMBOL R" + - "EPEATED FIGURE-3MUSICAL SYMBOL FERMATAMUSICAL SYMBOL FERMATA BELOWMUSICA" + - "L SYMBOL BREATH MARKMUSICAL SYMBOL CAESURAMUSICAL SYMBOL BRACEMUSICAL SY" + - "MBOL BRACKETMUSICAL SYMBOL ONE-LINE STAFFMUSICAL SYMBOL TWO-LINE STAFFMU" + - "SICAL SYMBOL THREE-LINE STAFFMUSICAL SYMBOL FOUR-LINE STAFFMUSICAL SYMBO" + - "L FIVE-LINE STAFFMUSICAL SYMBOL SIX-LINE STAFFMUSICAL SYMBOL SIX-STRING " + - "FRETBOARDMUSICAL SYMBOL FOUR-STRING FRETBOARDMUSICAL SYMBOL G CLEFMUSICA" + - "L SYMBOL G CLEF OTTAVA ALTAMUSICAL SYMBOL G CLEF OTTAVA BASSAMUSICAL SYM" + - "BOL C CLEFMUSICAL SYMBOL F CLEFMUSICAL SYMBOL F CLEF OTTAVA ALTAMUSICAL " + - "SYMBOL F CLEF OTTAVA BASSAMUSICAL SYMBOL DRUM CLEF-1MUSICAL SYMBOL DRUM " + - "CLEF-2MUSICAL SYMBOL MULTIPLE MEASURE RESTMUSICAL SYMBOL DOUBLE SHARPMUS" + - "ICAL SYMBOL DOUBLE FLATMUSICAL SYMBOL FLAT UPMUSICAL SYMBOL FLAT DOWNMUS" + - "ICAL SYMBOL NATURAL UPMUSICAL SYMBOL NATURAL DOWNMUSICAL SYMBOL SHARP UP" + - "MUSICAL SYMBOL SHARP DOWNMUSICAL SYMBOL QUARTER TONE SHARPMUSICAL SYMBOL" + - " QUARTER TONE FLATMUSICAL SYMBOL COMMON TIMEMUSICAL SYMBOL CUT TIMEMUSIC" + - "AL SYMBOL OTTAVA ALTAMUSICAL SYMBOL OTTAVA BASSAMUSICAL SYMBOL QUINDICES" + - "IMA ALTAMUSICAL SYMBOL QUINDICESIMA BASSAMUSICAL SYMBOL MULTI RESTMUSICA" + - "L SYMBOL WHOLE RESTMUSICAL SYMBOL HALF RESTMUSICAL SYMBOL QUARTER RESTMU" + - "SICAL SYMBOL EIGHTH RESTMUSICAL SYMBOL SIXTEENTH RESTMUSICAL SYMBOL THIR" + - "TY-SECOND RESTMUSICAL SYMBOL SIXTY-FOURTH RESTMUSICAL SYMBOL ONE HUNDRED" + - " TWENTY-EIGHTH RESTMUSICAL SYMBOL X NOTEHEADMUSICAL SYMBOL PLUS NOTEHEAD" + - "MUSICAL SYMBOL CIRCLE X NOTEHEADMUSICAL SYMBOL SQUARE NOTEHEAD WHITEMUSI" + - "CAL SYMBOL SQUARE NOTEHEAD BLACKMUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHIT" + - "EMUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACKMUSICAL SYMBOL TRIANGLE NOTEHE" + - "AD LEFT WHITEMUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACKMUSICAL SYMBOL T" + - "RIANGLE NOTEHEAD RIGHT WHITEMUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK" + - "MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITEMUSICAL SYMBOL TRIANGLE NOTEH" + - "EAD DOWN BLACKMUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITEMUSICAL SYM" + - "BOL TRIANGLE NOTEHEAD UP RIGHT BLACKMUSICAL SYMBOL MOON NOTEHEAD WHITEMU" + - "SICAL SYMBOL MOON NOTEHEAD BLACKMUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD D" + - "OWN WHITEMUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACKMUSICAL SYMBOL" + - " PARENTHESIS NOTEHEADMUSICAL SYMBOL VOID NOTEHEADMUSICAL SYMBOL NOTEHEAD" + - " BLACKMUSICAL SYMBOL NULL NOTEHEADMUSICAL SYMBOL CLUSTER NOTEHEAD WHITEM" + - "USICAL SYMBOL CLUSTER NOTEHEAD BLACKMUSICAL SYMBOL BREVEMUSICAL SYMBOL W" + - "HOLE NOTEMUSICAL SYMBOL HALF NOTEMUSICAL SYMBOL QUARTER NOTEMUSICAL SYMB" + - "OL EIGHTH NOTEMUSICAL SYMBOL SIXTEENTH NOTEMUSICAL SYMBOL THIRTY-SECOND " + - "NOTEMUSICAL SYMBOL SIXTY-FOURTH NOTEMUSICAL SYMBOL ONE HUNDRED TWENTY-EI" + - "GHTH NOTEMUSICAL SYMBOL COMBINING STEMMUSICAL SYMBOL COMBINING SPRECHGES" + - "ANG STEMMUSICAL SYMBOL COMBINING TREMOLO-1MUSICAL SYMBOL COMBINING TREMO" + - "LO-2MUSICAL SYMBOL COMBINING TREMOLO-3MUSICAL SYMBOL FINGERED TREMOLO-1M" + - "USICAL SYMBOL FINGERED TREMOLO-2MUSICAL SYMBOL FINGERED TREMOLO-3MUSICAL" + - " SYMBOL COMBINING AUGMENTATION DOTMUSICAL SYMBOL COMBINING FLAG-1MUSICAL" + - " SYMBOL COMBINING FLAG-2MUSICAL SYMBOL COMBINING FLAG-3MUSICAL SYMBOL CO" + - "MBINING FLAG-4MUSICAL SYMBOL COMBINING FLAG-5MUSICAL SYMBOL BEGIN BEAMMU" + - "SICAL SYMBOL END BEAMMUSICAL SYMBOL BEGIN TIEMUSICAL SYMBOL END TIEMUSIC" + - "AL SYMBOL BEGIN SLURMUSICAL SYMBOL END SLURMUSICAL SYMBOL BEGIN PHRASEMU" + - "SICAL SYMBOL END PHRASEMUSICAL SYMBOL COMBINING ACCENTMUSICAL SYMBOL COM" + - "BINING STACCATOMUSICAL SYMBOL COMBINING TENUTOMUSICAL SYMBOL COMBINING S" + - "TACCATISSIMOMUSICAL SYMBOL COMBINING MARCATOMUSICAL SYMBOL COMBINING MAR" + - "CATO-STACCATOMUSICAL SYMBOL COMBINING ACCENT-STACCATOMUSICAL SYMBOL COMB") + ("" + - "INING LOUREMUSICAL SYMBOL ARPEGGIATO UPMUSICAL SYMBOL ARPEGGIATO DOWNMUS" + - "ICAL SYMBOL COMBINING DOITMUSICAL SYMBOL COMBINING RIPMUSICAL SYMBOL COM" + - "BINING FLIPMUSICAL SYMBOL COMBINING SMEARMUSICAL SYMBOL COMBINING BENDMU" + - "SICAL SYMBOL COMBINING DOUBLE TONGUEMUSICAL SYMBOL COMBINING TRIPLE TONG" + - "UEMUSICAL SYMBOL RINFORZANDOMUSICAL SYMBOL SUBITOMUSICAL SYMBOL ZMUSICAL" + - " SYMBOL PIANOMUSICAL SYMBOL MEZZOMUSICAL SYMBOL FORTEMUSICAL SYMBOL CRES" + - "CENDOMUSICAL SYMBOL DECRESCENDOMUSICAL SYMBOL GRACE NOTE SLASHMUSICAL SY" + - "MBOL GRACE NOTE NO SLASHMUSICAL SYMBOL TRMUSICAL SYMBOL TURNMUSICAL SYMB" + - "OL INVERTED TURNMUSICAL SYMBOL TURN SLASHMUSICAL SYMBOL TURN UPMUSICAL S" + - "YMBOL ORNAMENT STROKE-1MUSICAL SYMBOL ORNAMENT STROKE-2MUSICAL SYMBOL OR" + - "NAMENT STROKE-3MUSICAL SYMBOL ORNAMENT STROKE-4MUSICAL SYMBOL ORNAMENT S" + - "TROKE-5MUSICAL SYMBOL ORNAMENT STROKE-6MUSICAL SYMBOL ORNAMENT STROKE-7M" + - "USICAL SYMBOL ORNAMENT STROKE-8MUSICAL SYMBOL ORNAMENT STROKE-9MUSICAL S" + - "YMBOL ORNAMENT STROKE-10MUSICAL SYMBOL ORNAMENT STROKE-11MUSICAL SYMBOL " + - "HAUPTSTIMMEMUSICAL SYMBOL NEBENSTIMMEMUSICAL SYMBOL END OF STIMMEMUSICAL" + - " SYMBOL DEGREE SLASHMUSICAL SYMBOL COMBINING DOWN BOWMUSICAL SYMBOL COMB" + - "INING UP BOWMUSICAL SYMBOL COMBINING HARMONICMUSICAL SYMBOL COMBINING SN" + - "AP PIZZICATOMUSICAL SYMBOL PEDAL MARKMUSICAL SYMBOL PEDAL UP MARKMUSICAL" + - " SYMBOL HALF PEDAL MARKMUSICAL SYMBOL GLISSANDO UPMUSICAL SYMBOL GLISSAN" + - "DO DOWNMUSICAL SYMBOL WITH FINGERNAILSMUSICAL SYMBOL DAMPMUSICAL SYMBOL " + - "DAMP ALLMUSICAL SYMBOL MAXIMAMUSICAL SYMBOL LONGAMUSICAL SYMBOL BREVISMU" + - "SICAL SYMBOL SEMIBREVIS WHITEMUSICAL SYMBOL SEMIBREVIS BLACKMUSICAL SYMB" + - "OL MINIMAMUSICAL SYMBOL MINIMA BLACKMUSICAL SYMBOL SEMIMINIMA WHITEMUSIC" + - "AL SYMBOL SEMIMINIMA BLACKMUSICAL SYMBOL FUSA WHITEMUSICAL SYMBOL FUSA B" + - "LACKMUSICAL SYMBOL LONGA PERFECTA RESTMUSICAL SYMBOL LONGA IMPERFECTA RE" + - "STMUSICAL SYMBOL BREVIS RESTMUSICAL SYMBOL SEMIBREVIS RESTMUSICAL SYMBOL" + - " MINIMA RESTMUSICAL SYMBOL SEMIMINIMA RESTMUSICAL SYMBOL TEMPUS PERFECTU" + - "M CUM PROLATIONE PERFECTAMUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE " + - "IMPERFECTAMUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINU" + - "TION-1MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTAMUSICAL S" + - "YMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTAMUSICAL SYMBOL TEMPUS " + - "IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1MUSICAL SYMBOL TEMPUS " + - "IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2MUSICAL SYMBOL TEMPUS " + - "IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3MUSICAL SYMBOL CROIXMU" + - "SICAL SYMBOL GREGORIAN C CLEFMUSICAL SYMBOL GREGORIAN F CLEFMUSICAL SYMB" + - "OL SQUARE BMUSICAL SYMBOL VIRGAMUSICAL SYMBOL PODATUSMUSICAL SYMBOL CLIV" + - "ISMUSICAL SYMBOL SCANDICUSMUSICAL SYMBOL CLIMACUSMUSICAL SYMBOL TORCULUS" + - "MUSICAL SYMBOL PORRECTUSMUSICAL SYMBOL PORRECTUS FLEXUSMUSICAL SYMBOL SC" + - "ANDICUS FLEXUSMUSICAL SYMBOL TORCULUS RESUPINUSMUSICAL SYMBOL PES SUBPUN" + - "CTISMUSICAL SYMBOL KIEVAN C CLEFMUSICAL SYMBOL KIEVAN END OF PIECEMUSICA" + - "L SYMBOL KIEVAN FINAL NOTEMUSICAL SYMBOL KIEVAN RECITATIVE MARKMUSICAL S" + - "YMBOL KIEVAN WHOLE NOTEMUSICAL SYMBOL KIEVAN HALF NOTEMUSICAL SYMBOL KIE" + - "VAN QUARTER NOTE STEM DOWNMUSICAL SYMBOL KIEVAN QUARTER NOTE STEM UPMUSI" + - "CAL SYMBOL KIEVAN EIGHTH NOTE STEM DOWNMUSICAL SYMBOL KIEVAN EIGHTH NOTE" + - " STEM UPMUSICAL SYMBOL KIEVAN FLAT SIGNGREEK VOCAL NOTATION SYMBOL-1GREE" + - "K VOCAL NOTATION SYMBOL-2GREEK VOCAL NOTATION SYMBOL-3GREEK VOCAL NOTATI" + - "ON SYMBOL-4GREEK VOCAL NOTATION SYMBOL-5GREEK VOCAL NOTATION SYMBOL-6GRE" + - "EK VOCAL NOTATION SYMBOL-7GREEK VOCAL NOTATION SYMBOL-8GREEK VOCAL NOTAT" + - "ION SYMBOL-9GREEK VOCAL NOTATION SYMBOL-10GREEK VOCAL NOTATION SYMBOL-11" + - "GREEK VOCAL NOTATION SYMBOL-12GREEK VOCAL NOTATION SYMBOL-13GREEK VOCAL " + - "NOTATION SYMBOL-14GREEK VOCAL NOTATION SYMBOL-15GREEK VOCAL NOTATION SYM" + - "BOL-16GREEK VOCAL NOTATION SYMBOL-17GREEK VOCAL NOTATION SYMBOL-18GREEK " + - "VOCAL NOTATION SYMBOL-19GREEK VOCAL NOTATION SYMBOL-20GREEK VOCAL NOTATI" + - "ON SYMBOL-21GREEK VOCAL NOTATION SYMBOL-22GREEK VOCAL NOTATION SYMBOL-23" + - "GREEK VOCAL NOTATION SYMBOL-24GREEK VOCAL NOTATION SYMBOL-50GREEK VOCAL " + - "NOTATION SYMBOL-51GREEK VOCAL NOTATION SYMBOL-52GREEK VOCAL NOTATION SYM" + - "BOL-53GREEK VOCAL NOTATION SYMBOL-54GREEK INSTRUMENTAL NOTATION SYMBOL-1" + - "GREEK INSTRUMENTAL NOTATION SYMBOL-2GREEK INSTRUMENTAL NOTATION SYMBOL-4" + - "GREEK INSTRUMENTAL NOTATION SYMBOL-5GREEK INSTRUMENTAL NOTATION SYMBOL-7" + - "GREEK INSTRUMENTAL NOTATION SYMBOL-8GREEK INSTRUMENTAL NOTATION SYMBOL-1" + - "1GREEK INSTRUMENTAL NOTATION SYMBOL-12GREEK INSTRUMENTAL NOTATION SYMBOL" + - "-13GREEK INSTRUMENTAL NOTATION SYMBOL-14GREEK INSTRUMENTAL NOTATION SYMB" + - "OL-17GREEK INSTRUMENTAL NOTATION SYMBOL-18GREEK INSTRUMENTAL NOTATION SY" + - "MBOL-19GREEK INSTRUMENTAL NOTATION SYMBOL-23GREEK INSTRUMENTAL NOTATION ") + ("" + - "SYMBOL-24GREEK INSTRUMENTAL NOTATION SYMBOL-25GREEK INSTRUMENTAL NOTATIO" + - "N SYMBOL-26GREEK INSTRUMENTAL NOTATION SYMBOL-27GREEK INSTRUMENTAL NOTAT" + - "ION SYMBOL-29GREEK INSTRUMENTAL NOTATION SYMBOL-30GREEK INSTRUMENTAL NOT" + - "ATION SYMBOL-32GREEK INSTRUMENTAL NOTATION SYMBOL-36GREEK INSTRUMENTAL N" + - "OTATION SYMBOL-37GREEK INSTRUMENTAL NOTATION SYMBOL-38GREEK INSTRUMENTAL" + - " NOTATION SYMBOL-39GREEK INSTRUMENTAL NOTATION SYMBOL-40GREEK INSTRUMENT" + - "AL NOTATION SYMBOL-42GREEK INSTRUMENTAL NOTATION SYMBOL-43GREEK INSTRUME" + - "NTAL NOTATION SYMBOL-45GREEK INSTRUMENTAL NOTATION SYMBOL-47GREEK INSTRU" + - "MENTAL NOTATION SYMBOL-48GREEK INSTRUMENTAL NOTATION SYMBOL-49GREEK INST" + - "RUMENTAL NOTATION SYMBOL-50GREEK INSTRUMENTAL NOTATION SYMBOL-51GREEK IN" + - "STRUMENTAL NOTATION SYMBOL-52GREEK INSTRUMENTAL NOTATION SYMBOL-53GREEK " + - "INSTRUMENTAL NOTATION SYMBOL-54COMBINING GREEK MUSICAL TRISEMECOMBINING " + - "GREEK MUSICAL TETRASEMECOMBINING GREEK MUSICAL PENTASEMEGREEK MUSICAL LE" + - "IMMAMONOGRAM FOR EARTHDIGRAM FOR HEAVENLY EARTHDIGRAM FOR HUMAN EARTHDIG" + - "RAM FOR EARTHLY HEAVENDIGRAM FOR EARTHLY HUMANDIGRAM FOR EARTHTETRAGRAM " + - "FOR CENTRETETRAGRAM FOR FULL CIRCLETETRAGRAM FOR MIREDTETRAGRAM FOR BARR" + - "IERTETRAGRAM FOR KEEPING SMALLTETRAGRAM FOR CONTRARIETYTETRAGRAM FOR ASC" + - "ENTTETRAGRAM FOR OPPOSITIONTETRAGRAM FOR BRANCHING OUTTETRAGRAM FOR DEFE" + - "CTIVENESS OR DISTORTIONTETRAGRAM FOR DIVERGENCETETRAGRAM FOR YOUTHFULNES" + - "STETRAGRAM FOR INCREASETETRAGRAM FOR PENETRATIONTETRAGRAM FOR REACHTETRA" + - "GRAM FOR CONTACTTETRAGRAM FOR HOLDING BACKTETRAGRAM FOR WAITINGTETRAGRAM" + - " FOR FOLLOWINGTETRAGRAM FOR ADVANCETETRAGRAM FOR RELEASETETRAGRAM FOR RE" + - "SISTANCETETRAGRAM FOR EASETETRAGRAM FOR JOYTETRAGRAM FOR CONTENTIONTETRA" + - "GRAM FOR ENDEAVOURTETRAGRAM FOR DUTIESTETRAGRAM FOR CHANGETETRAGRAM FOR " + - "DECISIVENESSTETRAGRAM FOR BOLD RESOLUTIONTETRAGRAM FOR PACKINGTETRAGRAM " + - "FOR LEGIONTETRAGRAM FOR CLOSENESSTETRAGRAM FOR KINSHIPTETRAGRAM FOR GATH" + - "ERINGTETRAGRAM FOR STRENGTHTETRAGRAM FOR PURITYTETRAGRAM FOR FULLNESSTET" + - "RAGRAM FOR RESIDENCETETRAGRAM FOR LAW OR MODELTETRAGRAM FOR RESPONSETETR" + - "AGRAM FOR GOING TO MEETTETRAGRAM FOR ENCOUNTERSTETRAGRAM FOR STOVETETRAG" + - "RAM FOR GREATNESSTETRAGRAM FOR ENLARGEMENTTETRAGRAM FOR PATTERNTETRAGRAM" + - " FOR RITUALTETRAGRAM FOR FLIGHTTETRAGRAM FOR VASTNESS OR WASTINGTETRAGRA" + - "M FOR CONSTANCYTETRAGRAM FOR MEASURETETRAGRAM FOR ETERNITYTETRAGRAM FOR " + - "UNITYTETRAGRAM FOR DIMINISHMENTTETRAGRAM FOR CLOSED MOUTHTETRAGRAM FOR G" + - "UARDEDNESSTETRAGRAM FOR GATHERING INTETRAGRAM FOR MASSINGTETRAGRAM FOR A" + - "CCUMULATIONTETRAGRAM FOR EMBELLISHMENTTETRAGRAM FOR DOUBTTETRAGRAM FOR W" + - "ATCHTETRAGRAM FOR SINKINGTETRAGRAM FOR INNERTETRAGRAM FOR DEPARTURETETRA" + - "GRAM FOR DARKENINGTETRAGRAM FOR DIMMINGTETRAGRAM FOR EXHAUSTIONTETRAGRAM" + - " FOR SEVERANCETETRAGRAM FOR STOPPAGETETRAGRAM FOR HARDNESSTETRAGRAM FOR " + - "COMPLETIONTETRAGRAM FOR CLOSURETETRAGRAM FOR FAILURETETRAGRAM FOR AGGRAV" + - "ATIONTETRAGRAM FOR COMPLIANCETETRAGRAM FOR ON THE VERGETETRAGRAM FOR DIF" + - "FICULTIESTETRAGRAM FOR LABOURINGTETRAGRAM FOR FOSTERINGCOUNTING ROD UNIT" + - " DIGIT ONECOUNTING ROD UNIT DIGIT TWOCOUNTING ROD UNIT DIGIT THREECOUNTI" + - "NG ROD UNIT DIGIT FOURCOUNTING ROD UNIT DIGIT FIVECOUNTING ROD UNIT DIGI" + - "T SIXCOUNTING ROD UNIT DIGIT SEVENCOUNTING ROD UNIT DIGIT EIGHTCOUNTING " + - "ROD UNIT DIGIT NINECOUNTING ROD TENS DIGIT ONECOUNTING ROD TENS DIGIT TW" + - "OCOUNTING ROD TENS DIGIT THREECOUNTING ROD TENS DIGIT FOURCOUNTING ROD T" + - "ENS DIGIT FIVECOUNTING ROD TENS DIGIT SIXCOUNTING ROD TENS DIGIT SEVENCO" + - "UNTING ROD TENS DIGIT EIGHTCOUNTING ROD TENS DIGIT NINEMATHEMATICAL BOLD" + - " CAPITAL AMATHEMATICAL BOLD CAPITAL BMATHEMATICAL BOLD CAPITAL CMATHEMAT" + - "ICAL BOLD CAPITAL DMATHEMATICAL BOLD CAPITAL EMATHEMATICAL BOLD CAPITAL " + - "FMATHEMATICAL BOLD CAPITAL GMATHEMATICAL BOLD CAPITAL HMATHEMATICAL BOLD" + - " CAPITAL IMATHEMATICAL BOLD CAPITAL JMATHEMATICAL BOLD CAPITAL KMATHEMAT" + - "ICAL BOLD CAPITAL LMATHEMATICAL BOLD CAPITAL MMATHEMATICAL BOLD CAPITAL " + - "NMATHEMATICAL BOLD CAPITAL OMATHEMATICAL BOLD CAPITAL PMATHEMATICAL BOLD" + - " CAPITAL QMATHEMATICAL BOLD CAPITAL RMATHEMATICAL BOLD CAPITAL SMATHEMAT" + - "ICAL BOLD CAPITAL TMATHEMATICAL BOLD CAPITAL UMATHEMATICAL BOLD CAPITAL " + - "VMATHEMATICAL BOLD CAPITAL WMATHEMATICAL BOLD CAPITAL XMATHEMATICAL BOLD" + - " CAPITAL YMATHEMATICAL BOLD CAPITAL ZMATHEMATICAL BOLD SMALL AMATHEMATIC" + - "AL BOLD SMALL BMATHEMATICAL BOLD SMALL CMATHEMATICAL BOLD SMALL DMATHEMA" + - "TICAL BOLD SMALL EMATHEMATICAL BOLD SMALL FMATHEMATICAL BOLD SMALL GMATH" + - "EMATICAL BOLD SMALL HMATHEMATICAL BOLD SMALL IMATHEMATICAL BOLD SMALL JM" + - "ATHEMATICAL BOLD SMALL KMATHEMATICAL BOLD SMALL LMATHEMATICAL BOLD SMALL" + - " MMATHEMATICAL BOLD SMALL NMATHEMATICAL BOLD SMALL OMATHEMATICAL BOLD SM" + - "ALL PMATHEMATICAL BOLD SMALL QMATHEMATICAL BOLD SMALL RMATHEMATICAL BOLD") + ("" + - " SMALL SMATHEMATICAL BOLD SMALL TMATHEMATICAL BOLD SMALL UMATHEMATICAL B" + - "OLD SMALL VMATHEMATICAL BOLD SMALL WMATHEMATICAL BOLD SMALL XMATHEMATICA" + - "L BOLD SMALL YMATHEMATICAL BOLD SMALL ZMATHEMATICAL ITALIC CAPITAL AMATH" + - "EMATICAL ITALIC CAPITAL BMATHEMATICAL ITALIC CAPITAL CMATHEMATICAL ITALI" + - "C CAPITAL DMATHEMATICAL ITALIC CAPITAL EMATHEMATICAL ITALIC CAPITAL FMAT" + - "HEMATICAL ITALIC CAPITAL GMATHEMATICAL ITALIC CAPITAL HMATHEMATICAL ITAL" + - "IC CAPITAL IMATHEMATICAL ITALIC CAPITAL JMATHEMATICAL ITALIC CAPITAL KMA" + - "THEMATICAL ITALIC CAPITAL LMATHEMATICAL ITALIC CAPITAL MMATHEMATICAL ITA" + - "LIC CAPITAL NMATHEMATICAL ITALIC CAPITAL OMATHEMATICAL ITALIC CAPITAL PM" + - "ATHEMATICAL ITALIC CAPITAL QMATHEMATICAL ITALIC CAPITAL RMATHEMATICAL IT" + - "ALIC CAPITAL SMATHEMATICAL ITALIC CAPITAL TMATHEMATICAL ITALIC CAPITAL U" + - "MATHEMATICAL ITALIC CAPITAL VMATHEMATICAL ITALIC CAPITAL WMATHEMATICAL I" + - "TALIC CAPITAL XMATHEMATICAL ITALIC CAPITAL YMATHEMATICAL ITALIC CAPITAL " + - "ZMATHEMATICAL ITALIC SMALL AMATHEMATICAL ITALIC SMALL BMATHEMATICAL ITAL" + - "IC SMALL CMATHEMATICAL ITALIC SMALL DMATHEMATICAL ITALIC SMALL EMATHEMAT" + - "ICAL ITALIC SMALL FMATHEMATICAL ITALIC SMALL GMATHEMATICAL ITALIC SMALL " + - "IMATHEMATICAL ITALIC SMALL JMATHEMATICAL ITALIC SMALL KMATHEMATICAL ITAL" + - "IC SMALL LMATHEMATICAL ITALIC SMALL MMATHEMATICAL ITALIC SMALL NMATHEMAT" + - "ICAL ITALIC SMALL OMATHEMATICAL ITALIC SMALL PMATHEMATICAL ITALIC SMALL " + - "QMATHEMATICAL ITALIC SMALL RMATHEMATICAL ITALIC SMALL SMATHEMATICAL ITAL" + - "IC SMALL TMATHEMATICAL ITALIC SMALL UMATHEMATICAL ITALIC SMALL VMATHEMAT" + - "ICAL ITALIC SMALL WMATHEMATICAL ITALIC SMALL XMATHEMATICAL ITALIC SMALL " + - "YMATHEMATICAL ITALIC SMALL ZMATHEMATICAL BOLD ITALIC CAPITAL AMATHEMATIC" + - "AL BOLD ITALIC CAPITAL BMATHEMATICAL BOLD ITALIC CAPITAL CMATHEMATICAL B" + - "OLD ITALIC CAPITAL DMATHEMATICAL BOLD ITALIC CAPITAL EMATHEMATICAL BOLD " + - "ITALIC CAPITAL FMATHEMATICAL BOLD ITALIC CAPITAL GMATHEMATICAL BOLD ITAL" + - "IC CAPITAL HMATHEMATICAL BOLD ITALIC CAPITAL IMATHEMATICAL BOLD ITALIC C" + - "APITAL JMATHEMATICAL BOLD ITALIC CAPITAL KMATHEMATICAL BOLD ITALIC CAPIT" + - "AL LMATHEMATICAL BOLD ITALIC CAPITAL MMATHEMATICAL BOLD ITALIC CAPITAL N" + - "MATHEMATICAL BOLD ITALIC CAPITAL OMATHEMATICAL BOLD ITALIC CAPITAL PMATH" + - "EMATICAL BOLD ITALIC CAPITAL QMATHEMATICAL BOLD ITALIC CAPITAL RMATHEMAT" + - "ICAL BOLD ITALIC CAPITAL SMATHEMATICAL BOLD ITALIC CAPITAL TMATHEMATICAL" + - " BOLD ITALIC CAPITAL UMATHEMATICAL BOLD ITALIC CAPITAL VMATHEMATICAL BOL" + - "D ITALIC CAPITAL WMATHEMATICAL BOLD ITALIC CAPITAL XMATHEMATICAL BOLD IT" + - "ALIC CAPITAL YMATHEMATICAL BOLD ITALIC CAPITAL ZMATHEMATICAL BOLD ITALIC" + - " SMALL AMATHEMATICAL BOLD ITALIC SMALL BMATHEMATICAL BOLD ITALIC SMALL C" + - "MATHEMATICAL BOLD ITALIC SMALL DMATHEMATICAL BOLD ITALIC SMALL EMATHEMAT" + - "ICAL BOLD ITALIC SMALL FMATHEMATICAL BOLD ITALIC SMALL GMATHEMATICAL BOL" + - "D ITALIC SMALL HMATHEMATICAL BOLD ITALIC SMALL IMATHEMATICAL BOLD ITALIC" + - " SMALL JMATHEMATICAL BOLD ITALIC SMALL KMATHEMATICAL BOLD ITALIC SMALL L" + - "MATHEMATICAL BOLD ITALIC SMALL MMATHEMATICAL BOLD ITALIC SMALL NMATHEMAT" + - "ICAL BOLD ITALIC SMALL OMATHEMATICAL BOLD ITALIC SMALL PMATHEMATICAL BOL" + - "D ITALIC SMALL QMATHEMATICAL BOLD ITALIC SMALL RMATHEMATICAL BOLD ITALIC" + - " SMALL SMATHEMATICAL BOLD ITALIC SMALL TMATHEMATICAL BOLD ITALIC SMALL U" + - "MATHEMATICAL BOLD ITALIC SMALL VMATHEMATICAL BOLD ITALIC SMALL WMATHEMAT" + - "ICAL BOLD ITALIC SMALL XMATHEMATICAL BOLD ITALIC SMALL YMATHEMATICAL BOL" + - "D ITALIC SMALL ZMATHEMATICAL SCRIPT CAPITAL AMATHEMATICAL SCRIPT CAPITAL" + - " CMATHEMATICAL SCRIPT CAPITAL DMATHEMATICAL SCRIPT CAPITAL GMATHEMATICAL" + - " SCRIPT CAPITAL JMATHEMATICAL SCRIPT CAPITAL KMATHEMATICAL SCRIPT CAPITA" + - "L NMATHEMATICAL SCRIPT CAPITAL OMATHEMATICAL SCRIPT CAPITAL PMATHEMATICA" + - "L SCRIPT CAPITAL QMATHEMATICAL SCRIPT CAPITAL SMATHEMATICAL SCRIPT CAPIT" + - "AL TMATHEMATICAL SCRIPT CAPITAL UMATHEMATICAL SCRIPT CAPITAL VMATHEMATIC" + - "AL SCRIPT CAPITAL WMATHEMATICAL SCRIPT CAPITAL XMATHEMATICAL SCRIPT CAPI" + - "TAL YMATHEMATICAL SCRIPT CAPITAL ZMATHEMATICAL SCRIPT SMALL AMATHEMATICA" + - "L SCRIPT SMALL BMATHEMATICAL SCRIPT SMALL CMATHEMATICAL SCRIPT SMALL DMA" + - "THEMATICAL SCRIPT SMALL FMATHEMATICAL SCRIPT SMALL HMATHEMATICAL SCRIPT " + - "SMALL IMATHEMATICAL SCRIPT SMALL JMATHEMATICAL SCRIPT SMALL KMATHEMATICA" + - "L SCRIPT SMALL LMATHEMATICAL SCRIPT SMALL MMATHEMATICAL SCRIPT SMALL NMA" + - "THEMATICAL SCRIPT SMALL PMATHEMATICAL SCRIPT SMALL QMATHEMATICAL SCRIPT " + - "SMALL RMATHEMATICAL SCRIPT SMALL SMATHEMATICAL SCRIPT SMALL TMATHEMATICA" + - "L SCRIPT SMALL UMATHEMATICAL SCRIPT SMALL VMATHEMATICAL SCRIPT SMALL WMA" + - "THEMATICAL SCRIPT SMALL XMATHEMATICAL SCRIPT SMALL YMATHEMATICAL SCRIPT " + - "SMALL ZMATHEMATICAL BOLD SCRIPT CAPITAL AMATHEMATICAL BOLD SCRIPT CAPITA" + - "L BMATHEMATICAL BOLD SCRIPT CAPITAL CMATHEMATICAL BOLD SCRIPT CAPITAL DM") + ("" + - "ATHEMATICAL BOLD SCRIPT CAPITAL EMATHEMATICAL BOLD SCRIPT CAPITAL FMATHE" + - "MATICAL BOLD SCRIPT CAPITAL GMATHEMATICAL BOLD SCRIPT CAPITAL HMATHEMATI" + - "CAL BOLD SCRIPT CAPITAL IMATHEMATICAL BOLD SCRIPT CAPITAL JMATHEMATICAL " + - "BOLD SCRIPT CAPITAL KMATHEMATICAL BOLD SCRIPT CAPITAL LMATHEMATICAL BOLD" + - " SCRIPT CAPITAL MMATHEMATICAL BOLD SCRIPT CAPITAL NMATHEMATICAL BOLD SCR" + - "IPT CAPITAL OMATHEMATICAL BOLD SCRIPT CAPITAL PMATHEMATICAL BOLD SCRIPT " + - "CAPITAL QMATHEMATICAL BOLD SCRIPT CAPITAL RMATHEMATICAL BOLD SCRIPT CAPI" + - "TAL SMATHEMATICAL BOLD SCRIPT CAPITAL TMATHEMATICAL BOLD SCRIPT CAPITAL " + - "UMATHEMATICAL BOLD SCRIPT CAPITAL VMATHEMATICAL BOLD SCRIPT CAPITAL WMAT" + - "HEMATICAL BOLD SCRIPT CAPITAL XMATHEMATICAL BOLD SCRIPT CAPITAL YMATHEMA" + - "TICAL BOLD SCRIPT CAPITAL ZMATHEMATICAL BOLD SCRIPT SMALL AMATHEMATICAL " + - "BOLD SCRIPT SMALL BMATHEMATICAL BOLD SCRIPT SMALL CMATHEMATICAL BOLD SCR" + - "IPT SMALL DMATHEMATICAL BOLD SCRIPT SMALL EMATHEMATICAL BOLD SCRIPT SMAL" + - "L FMATHEMATICAL BOLD SCRIPT SMALL GMATHEMATICAL BOLD SCRIPT SMALL HMATHE" + - "MATICAL BOLD SCRIPT SMALL IMATHEMATICAL BOLD SCRIPT SMALL JMATHEMATICAL " + - "BOLD SCRIPT SMALL KMATHEMATICAL BOLD SCRIPT SMALL LMATHEMATICAL BOLD SCR" + - "IPT SMALL MMATHEMATICAL BOLD SCRIPT SMALL NMATHEMATICAL BOLD SCRIPT SMAL" + - "L OMATHEMATICAL BOLD SCRIPT SMALL PMATHEMATICAL BOLD SCRIPT SMALL QMATHE" + - "MATICAL BOLD SCRIPT SMALL RMATHEMATICAL BOLD SCRIPT SMALL SMATHEMATICAL " + - "BOLD SCRIPT SMALL TMATHEMATICAL BOLD SCRIPT SMALL UMATHEMATICAL BOLD SCR" + - "IPT SMALL VMATHEMATICAL BOLD SCRIPT SMALL WMATHEMATICAL BOLD SCRIPT SMAL" + - "L XMATHEMATICAL BOLD SCRIPT SMALL YMATHEMATICAL BOLD SCRIPT SMALL ZMATHE" + - "MATICAL FRAKTUR CAPITAL AMATHEMATICAL FRAKTUR CAPITAL BMATHEMATICAL FRAK" + - "TUR CAPITAL DMATHEMATICAL FRAKTUR CAPITAL EMATHEMATICAL FRAKTUR CAPITAL " + - "FMATHEMATICAL FRAKTUR CAPITAL GMATHEMATICAL FRAKTUR CAPITAL JMATHEMATICA" + - "L FRAKTUR CAPITAL KMATHEMATICAL FRAKTUR CAPITAL LMATHEMATICAL FRAKTUR CA" + - "PITAL MMATHEMATICAL FRAKTUR CAPITAL NMATHEMATICAL FRAKTUR CAPITAL OMATHE" + - "MATICAL FRAKTUR CAPITAL PMATHEMATICAL FRAKTUR CAPITAL QMATHEMATICAL FRAK" + - "TUR CAPITAL SMATHEMATICAL FRAKTUR CAPITAL TMATHEMATICAL FRAKTUR CAPITAL " + - "UMATHEMATICAL FRAKTUR CAPITAL VMATHEMATICAL FRAKTUR CAPITAL WMATHEMATICA" + - "L FRAKTUR CAPITAL XMATHEMATICAL FRAKTUR CAPITAL YMATHEMATICAL FRAKTUR SM" + - "ALL AMATHEMATICAL FRAKTUR SMALL BMATHEMATICAL FRAKTUR SMALL CMATHEMATICA" + - "L FRAKTUR SMALL DMATHEMATICAL FRAKTUR SMALL EMATHEMATICAL FRAKTUR SMALL " + - "FMATHEMATICAL FRAKTUR SMALL GMATHEMATICAL FRAKTUR SMALL HMATHEMATICAL FR" + - "AKTUR SMALL IMATHEMATICAL FRAKTUR SMALL JMATHEMATICAL FRAKTUR SMALL KMAT" + - "HEMATICAL FRAKTUR SMALL LMATHEMATICAL FRAKTUR SMALL MMATHEMATICAL FRAKTU" + - "R SMALL NMATHEMATICAL FRAKTUR SMALL OMATHEMATICAL FRAKTUR SMALL PMATHEMA" + - "TICAL FRAKTUR SMALL QMATHEMATICAL FRAKTUR SMALL RMATHEMATICAL FRAKTUR SM" + - "ALL SMATHEMATICAL FRAKTUR SMALL TMATHEMATICAL FRAKTUR SMALL UMATHEMATICA" + - "L FRAKTUR SMALL VMATHEMATICAL FRAKTUR SMALL WMATHEMATICAL FRAKTUR SMALL " + - "XMATHEMATICAL FRAKTUR SMALL YMATHEMATICAL FRAKTUR SMALL ZMATHEMATICAL DO" + - "UBLE-STRUCK CAPITAL AMATHEMATICAL DOUBLE-STRUCK CAPITAL BMATHEMATICAL DO" + - "UBLE-STRUCK CAPITAL DMATHEMATICAL DOUBLE-STRUCK CAPITAL EMATHEMATICAL DO" + - "UBLE-STRUCK CAPITAL FMATHEMATICAL DOUBLE-STRUCK CAPITAL GMATHEMATICAL DO" + - "UBLE-STRUCK CAPITAL IMATHEMATICAL DOUBLE-STRUCK CAPITAL JMATHEMATICAL DO" + - "UBLE-STRUCK CAPITAL KMATHEMATICAL DOUBLE-STRUCK CAPITAL LMATHEMATICAL DO" + - "UBLE-STRUCK CAPITAL MMATHEMATICAL DOUBLE-STRUCK CAPITAL OMATHEMATICAL DO" + - "UBLE-STRUCK CAPITAL SMATHEMATICAL DOUBLE-STRUCK CAPITAL TMATHEMATICAL DO" + - "UBLE-STRUCK CAPITAL UMATHEMATICAL DOUBLE-STRUCK CAPITAL VMATHEMATICAL DO" + - "UBLE-STRUCK CAPITAL WMATHEMATICAL DOUBLE-STRUCK CAPITAL XMATHEMATICAL DO" + - "UBLE-STRUCK CAPITAL YMATHEMATICAL DOUBLE-STRUCK SMALL AMATHEMATICAL DOUB" + - "LE-STRUCK SMALL BMATHEMATICAL DOUBLE-STRUCK SMALL CMATHEMATICAL DOUBLE-S" + - "TRUCK SMALL DMATHEMATICAL DOUBLE-STRUCK SMALL EMATHEMATICAL DOUBLE-STRUC" + - "K SMALL FMATHEMATICAL DOUBLE-STRUCK SMALL GMATHEMATICAL DOUBLE-STRUCK SM" + - "ALL HMATHEMATICAL DOUBLE-STRUCK SMALL IMATHEMATICAL DOUBLE-STRUCK SMALL " + - "JMATHEMATICAL DOUBLE-STRUCK SMALL KMATHEMATICAL DOUBLE-STRUCK SMALL LMAT" + - "HEMATICAL DOUBLE-STRUCK SMALL MMATHEMATICAL DOUBLE-STRUCK SMALL NMATHEMA" + - "TICAL DOUBLE-STRUCK SMALL OMATHEMATICAL DOUBLE-STRUCK SMALL PMATHEMATICA" + - "L DOUBLE-STRUCK SMALL QMATHEMATICAL DOUBLE-STRUCK SMALL RMATHEMATICAL DO" + - "UBLE-STRUCK SMALL SMATHEMATICAL DOUBLE-STRUCK SMALL TMATHEMATICAL DOUBLE" + - "-STRUCK SMALL UMATHEMATICAL DOUBLE-STRUCK SMALL VMATHEMATICAL DOUBLE-STR" + - "UCK SMALL WMATHEMATICAL DOUBLE-STRUCK SMALL XMATHEMATICAL DOUBLE-STRUCK " + - "SMALL YMATHEMATICAL DOUBLE-STRUCK SMALL ZMATHEMATICAL BOLD FRAKTUR CAPIT" + - "AL AMATHEMATICAL BOLD FRAKTUR CAPITAL BMATHEMATICAL BOLD FRAKTUR CAPITAL") + ("" + - " CMATHEMATICAL BOLD FRAKTUR CAPITAL DMATHEMATICAL BOLD FRAKTUR CAPITAL E" + - "MATHEMATICAL BOLD FRAKTUR CAPITAL FMATHEMATICAL BOLD FRAKTUR CAPITAL GMA" + - "THEMATICAL BOLD FRAKTUR CAPITAL HMATHEMATICAL BOLD FRAKTUR CAPITAL IMATH" + - "EMATICAL BOLD FRAKTUR CAPITAL JMATHEMATICAL BOLD FRAKTUR CAPITAL KMATHEM" + - "ATICAL BOLD FRAKTUR CAPITAL LMATHEMATICAL BOLD FRAKTUR CAPITAL MMATHEMAT" + - "ICAL BOLD FRAKTUR CAPITAL NMATHEMATICAL BOLD FRAKTUR CAPITAL OMATHEMATIC" + - "AL BOLD FRAKTUR CAPITAL PMATHEMATICAL BOLD FRAKTUR CAPITAL QMATHEMATICAL" + - " BOLD FRAKTUR CAPITAL RMATHEMATICAL BOLD FRAKTUR CAPITAL SMATHEMATICAL B" + - "OLD FRAKTUR CAPITAL TMATHEMATICAL BOLD FRAKTUR CAPITAL UMATHEMATICAL BOL" + - "D FRAKTUR CAPITAL VMATHEMATICAL BOLD FRAKTUR CAPITAL WMATHEMATICAL BOLD " + - "FRAKTUR CAPITAL XMATHEMATICAL BOLD FRAKTUR CAPITAL YMATHEMATICAL BOLD FR" + - "AKTUR CAPITAL ZMATHEMATICAL BOLD FRAKTUR SMALL AMATHEMATICAL BOLD FRAKTU" + - "R SMALL BMATHEMATICAL BOLD FRAKTUR SMALL CMATHEMATICAL BOLD FRAKTUR SMAL" + - "L DMATHEMATICAL BOLD FRAKTUR SMALL EMATHEMATICAL BOLD FRAKTUR SMALL FMAT" + - "HEMATICAL BOLD FRAKTUR SMALL GMATHEMATICAL BOLD FRAKTUR SMALL HMATHEMATI" + - "CAL BOLD FRAKTUR SMALL IMATHEMATICAL BOLD FRAKTUR SMALL JMATHEMATICAL BO" + - "LD FRAKTUR SMALL KMATHEMATICAL BOLD FRAKTUR SMALL LMATHEMATICAL BOLD FRA" + - "KTUR SMALL MMATHEMATICAL BOLD FRAKTUR SMALL NMATHEMATICAL BOLD FRAKTUR S" + - "MALL OMATHEMATICAL BOLD FRAKTUR SMALL PMATHEMATICAL BOLD FRAKTUR SMALL Q" + - "MATHEMATICAL BOLD FRAKTUR SMALL RMATHEMATICAL BOLD FRAKTUR SMALL SMATHEM" + - "ATICAL BOLD FRAKTUR SMALL TMATHEMATICAL BOLD FRAKTUR SMALL UMATHEMATICAL" + - " BOLD FRAKTUR SMALL VMATHEMATICAL BOLD FRAKTUR SMALL WMATHEMATICAL BOLD " + - "FRAKTUR SMALL XMATHEMATICAL BOLD FRAKTUR SMALL YMATHEMATICAL BOLD FRAKTU" + - "R SMALL ZMATHEMATICAL SANS-SERIF CAPITAL AMATHEMATICAL SANS-SERIF CAPITA" + - "L BMATHEMATICAL SANS-SERIF CAPITAL CMATHEMATICAL SANS-SERIF CAPITAL DMAT" + - "HEMATICAL SANS-SERIF CAPITAL EMATHEMATICAL SANS-SERIF CAPITAL FMATHEMATI" + - "CAL SANS-SERIF CAPITAL GMATHEMATICAL SANS-SERIF CAPITAL HMATHEMATICAL SA" + - "NS-SERIF CAPITAL IMATHEMATICAL SANS-SERIF CAPITAL JMATHEMATICAL SANS-SER" + - "IF CAPITAL KMATHEMATICAL SANS-SERIF CAPITAL LMATHEMATICAL SANS-SERIF CAP" + - "ITAL MMATHEMATICAL SANS-SERIF CAPITAL NMATHEMATICAL SANS-SERIF CAPITAL O" + - "MATHEMATICAL SANS-SERIF CAPITAL PMATHEMATICAL SANS-SERIF CAPITAL QMATHEM" + - "ATICAL SANS-SERIF CAPITAL RMATHEMATICAL SANS-SERIF CAPITAL SMATHEMATICAL" + - " SANS-SERIF CAPITAL TMATHEMATICAL SANS-SERIF CAPITAL UMATHEMATICAL SANS-" + - "SERIF CAPITAL VMATHEMATICAL SANS-SERIF CAPITAL WMATHEMATICAL SANS-SERIF " + - "CAPITAL XMATHEMATICAL SANS-SERIF CAPITAL YMATHEMATICAL SANS-SERIF CAPITA" + - "L ZMATHEMATICAL SANS-SERIF SMALL AMATHEMATICAL SANS-SERIF SMALL BMATHEMA" + - "TICAL SANS-SERIF SMALL CMATHEMATICAL SANS-SERIF SMALL DMATHEMATICAL SANS" + - "-SERIF SMALL EMATHEMATICAL SANS-SERIF SMALL FMATHEMATICAL SANS-SERIF SMA" + - "LL GMATHEMATICAL SANS-SERIF SMALL HMATHEMATICAL SANS-SERIF SMALL IMATHEM" + - "ATICAL SANS-SERIF SMALL JMATHEMATICAL SANS-SERIF SMALL KMATHEMATICAL SAN" + - "S-SERIF SMALL LMATHEMATICAL SANS-SERIF SMALL MMATHEMATICAL SANS-SERIF SM" + - "ALL NMATHEMATICAL SANS-SERIF SMALL OMATHEMATICAL SANS-SERIF SMALL PMATHE" + - "MATICAL SANS-SERIF SMALL QMATHEMATICAL SANS-SERIF SMALL RMATHEMATICAL SA" + - "NS-SERIF SMALL SMATHEMATICAL SANS-SERIF SMALL TMATHEMATICAL SANS-SERIF S" + - "MALL UMATHEMATICAL SANS-SERIF SMALL VMATHEMATICAL SANS-SERIF SMALL WMATH" + - "EMATICAL SANS-SERIF SMALL XMATHEMATICAL SANS-SERIF SMALL YMATHEMATICAL S" + - "ANS-SERIF SMALL ZMATHEMATICAL SANS-SERIF BOLD CAPITAL AMATHEMATICAL SANS" + - "-SERIF BOLD CAPITAL BMATHEMATICAL SANS-SERIF BOLD CAPITAL CMATHEMATICAL " + - "SANS-SERIF BOLD CAPITAL DMATHEMATICAL SANS-SERIF BOLD CAPITAL EMATHEMATI" + - "CAL SANS-SERIF BOLD CAPITAL FMATHEMATICAL SANS-SERIF BOLD CAPITAL GMATHE" + - "MATICAL SANS-SERIF BOLD CAPITAL HMATHEMATICAL SANS-SERIF BOLD CAPITAL IM" + - "ATHEMATICAL SANS-SERIF BOLD CAPITAL JMATHEMATICAL SANS-SERIF BOLD CAPITA" + - "L KMATHEMATICAL SANS-SERIF BOLD CAPITAL LMATHEMATICAL SANS-SERIF BOLD CA" + - "PITAL MMATHEMATICAL SANS-SERIF BOLD CAPITAL NMATHEMATICAL SANS-SERIF BOL" + - "D CAPITAL OMATHEMATICAL SANS-SERIF BOLD CAPITAL PMATHEMATICAL SANS-SERIF" + - " BOLD CAPITAL QMATHEMATICAL SANS-SERIF BOLD CAPITAL RMATHEMATICAL SANS-S" + - "ERIF BOLD CAPITAL SMATHEMATICAL SANS-SERIF BOLD CAPITAL TMATHEMATICAL SA" + - "NS-SERIF BOLD CAPITAL UMATHEMATICAL SANS-SERIF BOLD CAPITAL VMATHEMATICA" + - "L SANS-SERIF BOLD CAPITAL WMATHEMATICAL SANS-SERIF BOLD CAPITAL XMATHEMA" + - "TICAL SANS-SERIF BOLD CAPITAL YMATHEMATICAL SANS-SERIF BOLD CAPITAL ZMAT" + - "HEMATICAL SANS-SERIF BOLD SMALL AMATHEMATICAL SANS-SERIF BOLD SMALL BMAT" + - "HEMATICAL SANS-SERIF BOLD SMALL CMATHEMATICAL SANS-SERIF BOLD SMALL DMAT" + - "HEMATICAL SANS-SERIF BOLD SMALL EMATHEMATICAL SANS-SERIF BOLD SMALL FMAT" + - "HEMATICAL SANS-SERIF BOLD SMALL GMATHEMATICAL SANS-SERIF BOLD SMALL HMAT") + ("" + - "HEMATICAL SANS-SERIF BOLD SMALL IMATHEMATICAL SANS-SERIF BOLD SMALL JMAT" + - "HEMATICAL SANS-SERIF BOLD SMALL KMATHEMATICAL SANS-SERIF BOLD SMALL LMAT" + - "HEMATICAL SANS-SERIF BOLD SMALL MMATHEMATICAL SANS-SERIF BOLD SMALL NMAT" + - "HEMATICAL SANS-SERIF BOLD SMALL OMATHEMATICAL SANS-SERIF BOLD SMALL PMAT" + - "HEMATICAL SANS-SERIF BOLD SMALL QMATHEMATICAL SANS-SERIF BOLD SMALL RMAT" + - "HEMATICAL SANS-SERIF BOLD SMALL SMATHEMATICAL SANS-SERIF BOLD SMALL TMAT" + - "HEMATICAL SANS-SERIF BOLD SMALL UMATHEMATICAL SANS-SERIF BOLD SMALL VMAT" + - "HEMATICAL SANS-SERIF BOLD SMALL WMATHEMATICAL SANS-SERIF BOLD SMALL XMAT" + - "HEMATICAL SANS-SERIF BOLD SMALL YMATHEMATICAL SANS-SERIF BOLD SMALL ZMAT" + - "HEMATICAL SANS-SERIF ITALIC CAPITAL AMATHEMATICAL SANS-SERIF ITALIC CAPI" + - "TAL BMATHEMATICAL SANS-SERIF ITALIC CAPITAL CMATHEMATICAL SANS-SERIF ITA" + - "LIC CAPITAL DMATHEMATICAL SANS-SERIF ITALIC CAPITAL EMATHEMATICAL SANS-S" + - "ERIF ITALIC CAPITAL FMATHEMATICAL SANS-SERIF ITALIC CAPITAL GMATHEMATICA" + - "L SANS-SERIF ITALIC CAPITAL HMATHEMATICAL SANS-SERIF ITALIC CAPITAL IMAT" + - "HEMATICAL SANS-SERIF ITALIC CAPITAL JMATHEMATICAL SANS-SERIF ITALIC CAPI" + - "TAL KMATHEMATICAL SANS-SERIF ITALIC CAPITAL LMATHEMATICAL SANS-SERIF ITA" + - "LIC CAPITAL MMATHEMATICAL SANS-SERIF ITALIC CAPITAL NMATHEMATICAL SANS-S" + - "ERIF ITALIC CAPITAL OMATHEMATICAL SANS-SERIF ITALIC CAPITAL PMATHEMATICA" + - "L SANS-SERIF ITALIC CAPITAL QMATHEMATICAL SANS-SERIF ITALIC CAPITAL RMAT" + - "HEMATICAL SANS-SERIF ITALIC CAPITAL SMATHEMATICAL SANS-SERIF ITALIC CAPI" + - "TAL TMATHEMATICAL SANS-SERIF ITALIC CAPITAL UMATHEMATICAL SANS-SERIF ITA" + - "LIC CAPITAL VMATHEMATICAL SANS-SERIF ITALIC CAPITAL WMATHEMATICAL SANS-S" + - "ERIF ITALIC CAPITAL XMATHEMATICAL SANS-SERIF ITALIC CAPITAL YMATHEMATICA" + - "L SANS-SERIF ITALIC CAPITAL ZMATHEMATICAL SANS-SERIF ITALIC SMALL AMATHE" + - "MATICAL SANS-SERIF ITALIC SMALL BMATHEMATICAL SANS-SERIF ITALIC SMALL CM" + - "ATHEMATICAL SANS-SERIF ITALIC SMALL DMATHEMATICAL SANS-SERIF ITALIC SMAL" + - "L EMATHEMATICAL SANS-SERIF ITALIC SMALL FMATHEMATICAL SANS-SERIF ITALIC " + - "SMALL GMATHEMATICAL SANS-SERIF ITALIC SMALL HMATHEMATICAL SANS-SERIF ITA" + - "LIC SMALL IMATHEMATICAL SANS-SERIF ITALIC SMALL JMATHEMATICAL SANS-SERIF" + - " ITALIC SMALL KMATHEMATICAL SANS-SERIF ITALIC SMALL LMATHEMATICAL SANS-S" + - "ERIF ITALIC SMALL MMATHEMATICAL SANS-SERIF ITALIC SMALL NMATHEMATICAL SA" + - "NS-SERIF ITALIC SMALL OMATHEMATICAL SANS-SERIF ITALIC SMALL PMATHEMATICA" + - "L SANS-SERIF ITALIC SMALL QMATHEMATICAL SANS-SERIF ITALIC SMALL RMATHEMA" + - "TICAL SANS-SERIF ITALIC SMALL SMATHEMATICAL SANS-SERIF ITALIC SMALL TMAT" + - "HEMATICAL SANS-SERIF ITALIC SMALL UMATHEMATICAL SANS-SERIF ITALIC SMALL " + - "VMATHEMATICAL SANS-SERIF ITALIC SMALL WMATHEMATICAL SANS-SERIF ITALIC SM" + - "ALL XMATHEMATICAL SANS-SERIF ITALIC SMALL YMATHEMATICAL SANS-SERIF ITALI" + - "C SMALL ZMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL AMATHEMATICAL SANS-" + - "SERIF BOLD ITALIC CAPITAL BMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C" + - "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DMATHEMATICAL SANS-SERIF BOL" + - "D ITALIC CAPITAL EMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL FMATHEMATI" + - "CAL SANS-SERIF BOLD ITALIC CAPITAL GMATHEMATICAL SANS-SERIF BOLD ITALIC " + - "CAPITAL HMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IMATHEMATICAL SANS-" + - "SERIF BOLD ITALIC CAPITAL JMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K" + - "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LMATHEMATICAL SANS-SERIF BOL" + - "D ITALIC CAPITAL MMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NMATHEMATI" + - "CAL SANS-SERIF BOLD ITALIC CAPITAL OMATHEMATICAL SANS-SERIF BOLD ITALIC " + - "CAPITAL PMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL QMATHEMATICAL SANS-" + - "SERIF BOLD ITALIC CAPITAL RMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S" + - "MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TMATHEMATICAL SANS-SERIF BOL" + - "D ITALIC CAPITAL UMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL VMATHEMATI" + - "CAL SANS-SERIF BOLD ITALIC CAPITAL WMATHEMATICAL SANS-SERIF BOLD ITALIC " + - "CAPITAL XMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL YMATHEMATICAL SANS-" + - "SERIF BOLD ITALIC CAPITAL ZMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL AMA" + - "THEMATICAL SANS-SERIF BOLD ITALIC SMALL BMATHEMATICAL SANS-SERIF BOLD IT" + - "ALIC SMALL CMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DMATHEMATICAL SANS" + - "-SERIF BOLD ITALIC SMALL EMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FMAT" + - "HEMATICAL SANS-SERIF BOLD ITALIC SMALL GMATHEMATICAL SANS-SERIF BOLD ITA" + - "LIC SMALL HMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IMATHEMATICAL SANS-" + - "SERIF BOLD ITALIC SMALL JMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KMATH" + - "EMATICAL SANS-SERIF BOLD ITALIC SMALL LMATHEMATICAL SANS-SERIF BOLD ITAL" + - "IC SMALL MMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NMATHEMATICAL SANS-S" + - "ERIF BOLD ITALIC SMALL OMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PMATHE" + - "MATICAL SANS-SERIF BOLD ITALIC SMALL QMATHEMATICAL SANS-SERIF BOLD ITALI") + ("" + - "C SMALL RMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SMATHEMATICAL SANS-SE" + - "RIF BOLD ITALIC SMALL TMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UMATHEM" + - "ATICAL SANS-SERIF BOLD ITALIC SMALL VMATHEMATICAL SANS-SERIF BOLD ITALIC" + - " SMALL WMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XMATHEMATICAL SANS-SER" + - "IF BOLD ITALIC SMALL YMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZMATHEMA" + - "TICAL MONOSPACE CAPITAL AMATHEMATICAL MONOSPACE CAPITAL BMATHEMATICAL MO" + - "NOSPACE CAPITAL CMATHEMATICAL MONOSPACE CAPITAL DMATHEMATICAL MONOSPACE " + - "CAPITAL EMATHEMATICAL MONOSPACE CAPITAL FMATHEMATICAL MONOSPACE CAPITAL " + - "GMATHEMATICAL MONOSPACE CAPITAL HMATHEMATICAL MONOSPACE CAPITAL IMATHEMA" + - "TICAL MONOSPACE CAPITAL JMATHEMATICAL MONOSPACE CAPITAL KMATHEMATICAL MO" + - "NOSPACE CAPITAL LMATHEMATICAL MONOSPACE CAPITAL MMATHEMATICAL MONOSPACE " + - "CAPITAL NMATHEMATICAL MONOSPACE CAPITAL OMATHEMATICAL MONOSPACE CAPITAL " + - "PMATHEMATICAL MONOSPACE CAPITAL QMATHEMATICAL MONOSPACE CAPITAL RMATHEMA" + - "TICAL MONOSPACE CAPITAL SMATHEMATICAL MONOSPACE CAPITAL TMATHEMATICAL MO" + - "NOSPACE CAPITAL UMATHEMATICAL MONOSPACE CAPITAL VMATHEMATICAL MONOSPACE " + - "CAPITAL WMATHEMATICAL MONOSPACE CAPITAL XMATHEMATICAL MONOSPACE CAPITAL " + - "YMATHEMATICAL MONOSPACE CAPITAL ZMATHEMATICAL MONOSPACE SMALL AMATHEMATI" + - "CAL MONOSPACE SMALL BMATHEMATICAL MONOSPACE SMALL CMATHEMATICAL MONOSPAC" + - "E SMALL DMATHEMATICAL MONOSPACE SMALL EMATHEMATICAL MONOSPACE SMALL FMAT" + - "HEMATICAL MONOSPACE SMALL GMATHEMATICAL MONOSPACE SMALL HMATHEMATICAL MO" + - "NOSPACE SMALL IMATHEMATICAL MONOSPACE SMALL JMATHEMATICAL MONOSPACE SMAL" + - "L KMATHEMATICAL MONOSPACE SMALL LMATHEMATICAL MONOSPACE SMALL MMATHEMATI" + - "CAL MONOSPACE SMALL NMATHEMATICAL MONOSPACE SMALL OMATHEMATICAL MONOSPAC" + - "E SMALL PMATHEMATICAL MONOSPACE SMALL QMATHEMATICAL MONOSPACE SMALL RMAT" + - "HEMATICAL MONOSPACE SMALL SMATHEMATICAL MONOSPACE SMALL TMATHEMATICAL MO" + - "NOSPACE SMALL UMATHEMATICAL MONOSPACE SMALL VMATHEMATICAL MONOSPACE SMAL" + - "L WMATHEMATICAL MONOSPACE SMALL XMATHEMATICAL MONOSPACE SMALL YMATHEMATI" + - "CAL MONOSPACE SMALL ZMATHEMATICAL ITALIC SMALL DOTLESS IMATHEMATICAL ITA" + - "LIC SMALL DOTLESS JMATHEMATICAL BOLD CAPITAL ALPHAMATHEMATICAL BOLD CAPI" + - "TAL BETAMATHEMATICAL BOLD CAPITAL GAMMAMATHEMATICAL BOLD CAPITAL DELTAMA" + - "THEMATICAL BOLD CAPITAL EPSILONMATHEMATICAL BOLD CAPITAL ZETAMATHEMATICA" + - "L BOLD CAPITAL ETAMATHEMATICAL BOLD CAPITAL THETAMATHEMATICAL BOLD CAPIT" + - "AL IOTAMATHEMATICAL BOLD CAPITAL KAPPAMATHEMATICAL BOLD CAPITAL LAMDAMAT" + - "HEMATICAL BOLD CAPITAL MUMATHEMATICAL BOLD CAPITAL NUMATHEMATICAL BOLD C" + - "APITAL XIMATHEMATICAL BOLD CAPITAL OMICRONMATHEMATICAL BOLD CAPITAL PIMA" + - "THEMATICAL BOLD CAPITAL RHOMATHEMATICAL BOLD CAPITAL THETA SYMBOLMATHEMA" + - "TICAL BOLD CAPITAL SIGMAMATHEMATICAL BOLD CAPITAL TAUMATHEMATICAL BOLD C" + - "APITAL UPSILONMATHEMATICAL BOLD CAPITAL PHIMATHEMATICAL BOLD CAPITAL CHI" + - "MATHEMATICAL BOLD CAPITAL PSIMATHEMATICAL BOLD CAPITAL OMEGAMATHEMATICAL" + - " BOLD NABLAMATHEMATICAL BOLD SMALL ALPHAMATHEMATICAL BOLD SMALL BETAMATH" + - "EMATICAL BOLD SMALL GAMMAMATHEMATICAL BOLD SMALL DELTAMATHEMATICAL BOLD " + - "SMALL EPSILONMATHEMATICAL BOLD SMALL ZETAMATHEMATICAL BOLD SMALL ETAMATH" + - "EMATICAL BOLD SMALL THETAMATHEMATICAL BOLD SMALL IOTAMATHEMATICAL BOLD S" + - "MALL KAPPAMATHEMATICAL BOLD SMALL LAMDAMATHEMATICAL BOLD SMALL MUMATHEMA" + - "TICAL BOLD SMALL NUMATHEMATICAL BOLD SMALL XIMATHEMATICAL BOLD SMALL OMI" + - "CRONMATHEMATICAL BOLD SMALL PIMATHEMATICAL BOLD SMALL RHOMATHEMATICAL BO" + - "LD SMALL FINAL SIGMAMATHEMATICAL BOLD SMALL SIGMAMATHEMATICAL BOLD SMALL" + - " TAUMATHEMATICAL BOLD SMALL UPSILONMATHEMATICAL BOLD SMALL PHIMATHEMATIC" + - "AL BOLD SMALL CHIMATHEMATICAL BOLD SMALL PSIMATHEMATICAL BOLD SMALL OMEG" + - "AMATHEMATICAL BOLD PARTIAL DIFFERENTIALMATHEMATICAL BOLD EPSILON SYMBOLM" + - "ATHEMATICAL BOLD THETA SYMBOLMATHEMATICAL BOLD KAPPA SYMBOLMATHEMATICAL " + - "BOLD PHI SYMBOLMATHEMATICAL BOLD RHO SYMBOLMATHEMATICAL BOLD PI SYMBOLMA" + - "THEMATICAL ITALIC CAPITAL ALPHAMATHEMATICAL ITALIC CAPITAL BETAMATHEMATI" + - "CAL ITALIC CAPITAL GAMMAMATHEMATICAL ITALIC CAPITAL DELTAMATHEMATICAL IT" + - "ALIC CAPITAL EPSILONMATHEMATICAL ITALIC CAPITAL ZETAMATHEMATICAL ITALIC " + - "CAPITAL ETAMATHEMATICAL ITALIC CAPITAL THETAMATHEMATICAL ITALIC CAPITAL " + - "IOTAMATHEMATICAL ITALIC CAPITAL KAPPAMATHEMATICAL ITALIC CAPITAL LAMDAMA" + - "THEMATICAL ITALIC CAPITAL MUMATHEMATICAL ITALIC CAPITAL NUMATHEMATICAL I" + - "TALIC CAPITAL XIMATHEMATICAL ITALIC CAPITAL OMICRONMATHEMATICAL ITALIC C" + - "APITAL PIMATHEMATICAL ITALIC CAPITAL RHOMATHEMATICAL ITALIC CAPITAL THET" + - "A SYMBOLMATHEMATICAL ITALIC CAPITAL SIGMAMATHEMATICAL ITALIC CAPITAL TAU" + - "MATHEMATICAL ITALIC CAPITAL UPSILONMATHEMATICAL ITALIC CAPITAL PHIMATHEM" + - "ATICAL ITALIC CAPITAL CHIMATHEMATICAL ITALIC CAPITAL PSIMATHEMATICAL ITA" + - "LIC CAPITAL OMEGAMATHEMATICAL ITALIC NABLAMATHEMATICAL ITALIC SMALL ALPH") + ("" + - "AMATHEMATICAL ITALIC SMALL BETAMATHEMATICAL ITALIC SMALL GAMMAMATHEMATIC" + - "AL ITALIC SMALL DELTAMATHEMATICAL ITALIC SMALL EPSILONMATHEMATICAL ITALI" + - "C SMALL ZETAMATHEMATICAL ITALIC SMALL ETAMATHEMATICAL ITALIC SMALL THETA" + - "MATHEMATICAL ITALIC SMALL IOTAMATHEMATICAL ITALIC SMALL KAPPAMATHEMATICA" + - "L ITALIC SMALL LAMDAMATHEMATICAL ITALIC SMALL MUMATHEMATICAL ITALIC SMAL" + - "L NUMATHEMATICAL ITALIC SMALL XIMATHEMATICAL ITALIC SMALL OMICRONMATHEMA" + - "TICAL ITALIC SMALL PIMATHEMATICAL ITALIC SMALL RHOMATHEMATICAL ITALIC SM" + - "ALL FINAL SIGMAMATHEMATICAL ITALIC SMALL SIGMAMATHEMATICAL ITALIC SMALL " + - "TAUMATHEMATICAL ITALIC SMALL UPSILONMATHEMATICAL ITALIC SMALL PHIMATHEMA" + - "TICAL ITALIC SMALL CHIMATHEMATICAL ITALIC SMALL PSIMATHEMATICAL ITALIC S" + - "MALL OMEGAMATHEMATICAL ITALIC PARTIAL DIFFERENTIALMATHEMATICAL ITALIC EP" + - "SILON SYMBOLMATHEMATICAL ITALIC THETA SYMBOLMATHEMATICAL ITALIC KAPPA SY" + - "MBOLMATHEMATICAL ITALIC PHI SYMBOLMATHEMATICAL ITALIC RHO SYMBOLMATHEMAT" + - "ICAL ITALIC PI SYMBOLMATHEMATICAL BOLD ITALIC CAPITAL ALPHAMATHEMATICAL " + - "BOLD ITALIC CAPITAL BETAMATHEMATICAL BOLD ITALIC CAPITAL GAMMAMATHEMATIC" + - "AL BOLD ITALIC CAPITAL DELTAMATHEMATICAL BOLD ITALIC CAPITAL EPSILONMATH" + - "EMATICAL BOLD ITALIC CAPITAL ZETAMATHEMATICAL BOLD ITALIC CAPITAL ETAMAT" + - "HEMATICAL BOLD ITALIC CAPITAL THETAMATHEMATICAL BOLD ITALIC CAPITAL IOTA" + - "MATHEMATICAL BOLD ITALIC CAPITAL KAPPAMATHEMATICAL BOLD ITALIC CAPITAL L" + - "AMDAMATHEMATICAL BOLD ITALIC CAPITAL MUMATHEMATICAL BOLD ITALIC CAPITAL " + - "NUMATHEMATICAL BOLD ITALIC CAPITAL XIMATHEMATICAL BOLD ITALIC CAPITAL OM" + - "ICRONMATHEMATICAL BOLD ITALIC CAPITAL PIMATHEMATICAL BOLD ITALIC CAPITAL" + - " RHOMATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOLMATHEMATICAL BOLD ITALI" + - "C CAPITAL SIGMAMATHEMATICAL BOLD ITALIC CAPITAL TAUMATHEMATICAL BOLD ITA" + - "LIC CAPITAL UPSILONMATHEMATICAL BOLD ITALIC CAPITAL PHIMATHEMATICAL BOLD" + - " ITALIC CAPITAL CHIMATHEMATICAL BOLD ITALIC CAPITAL PSIMATHEMATICAL BOLD" + - " ITALIC CAPITAL OMEGAMATHEMATICAL BOLD ITALIC NABLAMATHEMATICAL BOLD ITA" + - "LIC SMALL ALPHAMATHEMATICAL BOLD ITALIC SMALL BETAMATHEMATICAL BOLD ITAL" + - "IC SMALL GAMMAMATHEMATICAL BOLD ITALIC SMALL DELTAMATHEMATICAL BOLD ITAL" + - "IC SMALL EPSILONMATHEMATICAL BOLD ITALIC SMALL ZETAMATHEMATICAL BOLD ITA" + - "LIC SMALL ETAMATHEMATICAL BOLD ITALIC SMALL THETAMATHEMATICAL BOLD ITALI" + - "C SMALL IOTAMATHEMATICAL BOLD ITALIC SMALL KAPPAMATHEMATICAL BOLD ITALIC" + - " SMALL LAMDAMATHEMATICAL BOLD ITALIC SMALL MUMATHEMATICAL BOLD ITALIC SM" + - "ALL NUMATHEMATICAL BOLD ITALIC SMALL XIMATHEMATICAL BOLD ITALIC SMALL OM" + - "ICRONMATHEMATICAL BOLD ITALIC SMALL PIMATHEMATICAL BOLD ITALIC SMALL RHO" + - "MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMAMATHEMATICAL BOLD ITALIC SMALL" + - " SIGMAMATHEMATICAL BOLD ITALIC SMALL TAUMATHEMATICAL BOLD ITALIC SMALL U" + - "PSILONMATHEMATICAL BOLD ITALIC SMALL PHIMATHEMATICAL BOLD ITALIC SMALL C" + - "HIMATHEMATICAL BOLD ITALIC SMALL PSIMATHEMATICAL BOLD ITALIC SMALL OMEGA" + - "MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIALMATHEMATICAL BOLD ITALIC EP" + - "SILON SYMBOLMATHEMATICAL BOLD ITALIC THETA SYMBOLMATHEMATICAL BOLD ITALI" + - "C KAPPA SYMBOLMATHEMATICAL BOLD ITALIC PHI SYMBOLMATHEMATICAL BOLD ITALI" + - "C RHO SYMBOLMATHEMATICAL BOLD ITALIC PI SYMBOLMATHEMATICAL SANS-SERIF BO" + - "LD CAPITAL ALPHAMATHEMATICAL SANS-SERIF BOLD CAPITAL BETAMATHEMATICAL SA" + - "NS-SERIF BOLD CAPITAL GAMMAMATHEMATICAL SANS-SERIF BOLD CAPITAL DELTAMAT" + - "HEMATICAL SANS-SERIF BOLD CAPITAL EPSILONMATHEMATICAL SANS-SERIF BOLD CA" + - "PITAL ZETAMATHEMATICAL SANS-SERIF BOLD CAPITAL ETAMATHEMATICAL SANS-SERI" + - "F BOLD CAPITAL THETAMATHEMATICAL SANS-SERIF BOLD CAPITAL IOTAMATHEMATICA" + - "L SANS-SERIF BOLD CAPITAL KAPPAMATHEMATICAL SANS-SERIF BOLD CAPITAL LAMD" + - "AMATHEMATICAL SANS-SERIF BOLD CAPITAL MUMATHEMATICAL SANS-SERIF BOLD CAP" + - "ITAL NUMATHEMATICAL SANS-SERIF BOLD CAPITAL XIMATHEMATICAL SANS-SERIF BO" + - "LD CAPITAL OMICRONMATHEMATICAL SANS-SERIF BOLD CAPITAL PIMATHEMATICAL SA" + - "NS-SERIF BOLD CAPITAL RHOMATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMB" + - "OLMATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMAMATHEMATICAL SANS-SERIF BOLD" + - " CAPITAL TAUMATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILONMATHEMATICAL SAN" + - "S-SERIF BOLD CAPITAL PHIMATHEMATICAL SANS-SERIF BOLD CAPITAL CHIMATHEMAT" + - "ICAL SANS-SERIF BOLD CAPITAL PSIMATHEMATICAL SANS-SERIF BOLD CAPITAL OME" + - "GAMATHEMATICAL SANS-SERIF BOLD NABLAMATHEMATICAL SANS-SERIF BOLD SMALL A" + - "LPHAMATHEMATICAL SANS-SERIF BOLD SMALL BETAMATHEMATICAL SANS-SERIF BOLD " + - "SMALL GAMMAMATHEMATICAL SANS-SERIF BOLD SMALL DELTAMATHEMATICAL SANS-SER" + - "IF BOLD SMALL EPSILONMATHEMATICAL SANS-SERIF BOLD SMALL ZETAMATHEMATICAL" + - " SANS-SERIF BOLD SMALL ETAMATHEMATICAL SANS-SERIF BOLD SMALL THETAMATHEM" + - "ATICAL SANS-SERIF BOLD SMALL IOTAMATHEMATICAL SANS-SERIF BOLD SMALL KAPP" + - "AMATHEMATICAL SANS-SERIF BOLD SMALL LAMDAMATHEMATICAL SANS-SERIF BOLD SM") + ("" + - "ALL MUMATHEMATICAL SANS-SERIF BOLD SMALL NUMATHEMATICAL SANS-SERIF BOLD " + - "SMALL XIMATHEMATICAL SANS-SERIF BOLD SMALL OMICRONMATHEMATICAL SANS-SERI" + - "F BOLD SMALL PIMATHEMATICAL SANS-SERIF BOLD SMALL RHOMATHEMATICAL SANS-S" + - "ERIF BOLD SMALL FINAL SIGMAMATHEMATICAL SANS-SERIF BOLD SMALL SIGMAMATHE" + - "MATICAL SANS-SERIF BOLD SMALL TAUMATHEMATICAL SANS-SERIF BOLD SMALL UPSI" + - "LONMATHEMATICAL SANS-SERIF BOLD SMALL PHIMATHEMATICAL SANS-SERIF BOLD SM" + - "ALL CHIMATHEMATICAL SANS-SERIF BOLD SMALL PSIMATHEMATICAL SANS-SERIF BOL" + - "D SMALL OMEGAMATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIALMATHEMATIC" + - "AL SANS-SERIF BOLD EPSILON SYMBOLMATHEMATICAL SANS-SERIF BOLD THETA SYMB" + - "OLMATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOLMATHEMATICAL SANS-SERIF BOLD " + - "PHI SYMBOLMATHEMATICAL SANS-SERIF BOLD RHO SYMBOLMATHEMATICAL SANS-SERIF" + - " BOLD PI SYMBOLMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHAMATHEMAT" + - "ICAL SANS-SERIF BOLD ITALIC CAPITAL BETAMATHEMATICAL SANS-SERIF BOLD ITA" + - "LIC CAPITAL GAMMAMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTAMATHEM" + - "ATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILONMATHEMATICAL SANS-SERIF BOL" + - "D ITALIC CAPITAL ZETAMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETAMATH" + - "EMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETAMATHEMATICAL SANS-SERIF BOL" + - "D ITALIC CAPITAL IOTAMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPAMA" + - "THEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDAMATHEMATICAL SANS-SERIF B" + - "OLD ITALIC CAPITAL MUMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NUMATHE" + - "MATICAL SANS-SERIF BOLD ITALIC CAPITAL XIMATHEMATICAL SANS-SERIF BOLD IT" + - "ALIC CAPITAL OMICRONMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PIMATHEM" + - "ATICAL SANS-SERIF BOLD ITALIC CAPITAL RHOMATHEMATICAL SANS-SERIF BOLD IT" + - "ALIC CAPITAL THETA SYMBOLMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIG" + - "MAMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAUMATHEMATICAL SANS-SERIF" + - " BOLD ITALIC CAPITAL UPSILONMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL " + - "PHIMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHIMATHEMATICAL SANS-SERI" + - "F BOLD ITALIC CAPITAL PSIMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OME" + - "GAMATHEMATICAL SANS-SERIF BOLD ITALIC NABLAMATHEMATICAL SANS-SERIF BOLD " + - "ITALIC SMALL ALPHAMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETAMATHEMAT" + - "ICAL SANS-SERIF BOLD ITALIC SMALL GAMMAMATHEMATICAL SANS-SERIF BOLD ITAL" + - "IC SMALL DELTAMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILONMATHEMATI" + - "CAL SANS-SERIF BOLD ITALIC SMALL ZETAMATHEMATICAL SANS-SERIF BOLD ITALIC" + - " SMALL ETAMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETAMATHEMATICAL SA" + - "NS-SERIF BOLD ITALIC SMALL IOTAMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL" + - " KAPPAMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDAMATHEMATICAL SANS-S" + - "ERIF BOLD ITALIC SMALL MUMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NUMAT" + - "HEMATICAL SANS-SERIF BOLD ITALIC SMALL XIMATHEMATICAL SANS-SERIF BOLD IT" + - "ALIC SMALL OMICRONMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PIMATHEMATIC" + - "AL SANS-SERIF BOLD ITALIC SMALL RHOMATHEMATICAL SANS-SERIF BOLD ITALIC S" + - "MALL FINAL SIGMAMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMAMATHEMATI" + - "CAL SANS-SERIF BOLD ITALIC SMALL TAUMATHEMATICAL SANS-SERIF BOLD ITALIC " + - "SMALL UPSILONMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHIMATHEMATICAL S" + - "ANS-SERIF BOLD ITALIC SMALL CHIMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL" + - " PSIMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGAMATHEMATICAL SANS-SER" + - "IF BOLD ITALIC PARTIAL DIFFERENTIALMATHEMATICAL SANS-SERIF BOLD ITALIC E" + - "PSILON SYMBOLMATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOLMATHEMATICA" + - "L SANS-SERIF BOLD ITALIC KAPPA SYMBOLMATHEMATICAL SANS-SERIF BOLD ITALIC" + - " PHI SYMBOLMATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOLMATHEMATICAL SA" + - "NS-SERIF BOLD ITALIC PI SYMBOLMATHEMATICAL BOLD CAPITAL DIGAMMAMATHEMATI" + - "CAL BOLD SMALL DIGAMMAMATHEMATICAL BOLD DIGIT ZEROMATHEMATICAL BOLD DIGI" + - "T ONEMATHEMATICAL BOLD DIGIT TWOMATHEMATICAL BOLD DIGIT THREEMATHEMATICA" + - "L BOLD DIGIT FOURMATHEMATICAL BOLD DIGIT FIVEMATHEMATICAL BOLD DIGIT SIX" + - "MATHEMATICAL BOLD DIGIT SEVENMATHEMATICAL BOLD DIGIT EIGHTMATHEMATICAL B" + - "OLD DIGIT NINEMATHEMATICAL DOUBLE-STRUCK DIGIT ZEROMATHEMATICAL DOUBLE-S" + - "TRUCK DIGIT ONEMATHEMATICAL DOUBLE-STRUCK DIGIT TWOMATHEMATICAL DOUBLE-S" + - "TRUCK DIGIT THREEMATHEMATICAL DOUBLE-STRUCK DIGIT FOURMATHEMATICAL DOUBL" + - "E-STRUCK DIGIT FIVEMATHEMATICAL DOUBLE-STRUCK DIGIT SIXMATHEMATICAL DOUB" + - "LE-STRUCK DIGIT SEVENMATHEMATICAL DOUBLE-STRUCK DIGIT EIGHTMATHEMATICAL " + - "DOUBLE-STRUCK DIGIT NINEMATHEMATICAL SANS-SERIF DIGIT ZEROMATHEMATICAL S" + - "ANS-SERIF DIGIT ONEMATHEMATICAL SANS-SERIF DIGIT TWOMATHEMATICAL SANS-SE" + - "RIF DIGIT THREEMATHEMATICAL SANS-SERIF DIGIT FOURMATHEMATICAL SANS-SERIF" + - " DIGIT FIVEMATHEMATICAL SANS-SERIF DIGIT SIXMATHEMATICAL SANS-SERIF DIGI" + - "T SEVENMATHEMATICAL SANS-SERIF DIGIT EIGHTMATHEMATICAL SANS-SERIF DIGIT ") + ("" + - "NINEMATHEMATICAL SANS-SERIF BOLD DIGIT ZEROMATHEMATICAL SANS-SERIF BOLD " + - "DIGIT ONEMATHEMATICAL SANS-SERIF BOLD DIGIT TWOMATHEMATICAL SANS-SERIF B" + - "OLD DIGIT THREEMATHEMATICAL SANS-SERIF BOLD DIGIT FOURMATHEMATICAL SANS-" + - "SERIF BOLD DIGIT FIVEMATHEMATICAL SANS-SERIF BOLD DIGIT SIXMATHEMATICAL " + - "SANS-SERIF BOLD DIGIT SEVENMATHEMATICAL SANS-SERIF BOLD DIGIT EIGHTMATHE" + - "MATICAL SANS-SERIF BOLD DIGIT NINEMATHEMATICAL MONOSPACE DIGIT ZEROMATHE" + - "MATICAL MONOSPACE DIGIT ONEMATHEMATICAL MONOSPACE DIGIT TWOMATHEMATICAL " + - "MONOSPACE DIGIT THREEMATHEMATICAL MONOSPACE DIGIT FOURMATHEMATICAL MONOS" + - "PACE DIGIT FIVEMATHEMATICAL MONOSPACE DIGIT SIXMATHEMATICAL MONOSPACE DI" + - "GIT SEVENMATHEMATICAL MONOSPACE DIGIT EIGHTMATHEMATICAL MONOSPACE DIGIT " + - "NINESIGNWRITING HAND-FIST INDEXSIGNWRITING HAND-CIRCLE INDEXSIGNWRITING " + - "HAND-CUP INDEXSIGNWRITING HAND-OVAL INDEXSIGNWRITING HAND-HINGE INDEXSIG" + - "NWRITING HAND-ANGLE INDEXSIGNWRITING HAND-FIST INDEX BENTSIGNWRITING HAN" + - "D-CIRCLE INDEX BENTSIGNWRITING HAND-FIST THUMB UNDER INDEX BENTSIGNWRITI" + - "NG HAND-FIST INDEX RAISED KNUCKLESIGNWRITING HAND-FIST INDEX CUPPEDSIGNW" + - "RITING HAND-FIST INDEX HINGEDSIGNWRITING HAND-FIST INDEX HINGED LOWSIGNW" + - "RITING HAND-CIRCLE INDEX HINGESIGNWRITING HAND-FIST INDEX MIDDLESIGNWRIT" + - "ING HAND-CIRCLE INDEX MIDDLESIGNWRITING HAND-FIST INDEX MIDDLE BENTSIGNW" + - "RITING HAND-FIST INDEX MIDDLE RAISED KNUCKLESSIGNWRITING HAND-FIST INDEX" + - " MIDDLE HINGEDSIGNWRITING HAND-FIST INDEX UP MIDDLE HINGEDSIGNWRITING HA" + - "ND-FIST INDEX HINGED MIDDLE UPSIGNWRITING HAND-FIST INDEX MIDDLE CONJOIN" + - "EDSIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED INDEX BENTSIGNWRITING HAN" + - "D-FIST INDEX MIDDLE CONJOINED MIDDLE BENTSIGNWRITING HAND-FIST INDEX MID" + - "DLE CONJOINED CUPPEDSIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGEDS" + - "IGNWRITING HAND-FIST INDEX MIDDLE CROSSEDSIGNWRITING HAND-CIRCLE INDEX M" + - "IDDLE CROSSEDSIGNWRITING HAND-FIST MIDDLE BENT OVER INDEXSIGNWRITING HAN" + - "D-FIST INDEX BENT OVER MIDDLESIGNWRITING HAND-FIST INDEX MIDDLE THUMBSIG" + - "NWRITING HAND-CIRCLE INDEX MIDDLE THUMBSIGNWRITING HAND-FIST INDEX MIDDL" + - "E STRAIGHT THUMB BENTSIGNWRITING HAND-FIST INDEX MIDDLE BENT THUMB STRAI" + - "GHTSIGNWRITING HAND-FIST INDEX MIDDLE THUMB BENTSIGNWRITING HAND-FIST IN" + - "DEX MIDDLE HINGED SPREAD THUMB SIDESIGNWRITING HAND-FIST INDEX UP MIDDLE" + - " HINGED THUMB SIDESIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB CON" + - "JOINEDSIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP THUMB SIDESIGNWRITING" + - " HAND-FIST INDEX MIDDLE UP SPREAD THUMB FORWARDSIGNWRITING HAND-FIST IND" + - "EX MIDDLE THUMB CUPPEDSIGNWRITING HAND-FIST INDEX MIDDLE THUMB CIRCLEDSI" + - "GNWRITING HAND-FIST INDEX MIDDLE THUMB HOOKEDSIGNWRITING HAND-FIST INDEX" + - " MIDDLE THUMB HINGEDSIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE STR" + - "AIGHTSIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDESIGNWRITING " + - "HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE CONJOINEDSIGNWRITING HAND-FI" + - "ST INDEX MIDDLE CONJOINED THUMB SIDE BENTSIGNWRITING HAND-FIST MIDDLE TH" + - "UMB HOOKED INDEX UPSIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE UPSIG" + - "NWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED THUMB SIDESIGNWRITING H" + - "AND-FIST INDEX MIDDLE CROSSED THUMB SIDESIGNWRITING HAND-FIST INDEX MIDD" + - "LE CONJOINED THUMB FORWARDSIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED C" + - "UPPED THUMB FORWARDSIGNWRITING HAND-FIST MIDDLE THUMB CUPPED INDEX UPSIG" + - "NWRITING HAND-FIST INDEX THUMB CUPPED MIDDLE UPSIGNWRITING HAND-FIST MID" + - "DLE THUMB CIRCLED INDEX UPSIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED IND" + - "EX HINGEDSIGNWRITING HAND-FIST INDEX THUMB ANGLED OUT MIDDLE UPSIGNWRITI" + - "NG HAND-FIST INDEX THUMB ANGLED IN MIDDLE UPSIGNWRITING HAND-FIST INDEX " + - "THUMB CIRCLED MIDDLE UPSIGNWRITING HAND-FIST INDEX MIDDLE THUMB CONJOINE" + - "D HINGEDSIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED OUTSIGNWRITING H" + - "AND-FIST INDEX MIDDLE THUMB ANGLEDSIGNWRITING HAND-FIST MIDDLE THUMB ANG" + - "LED OUT INDEX UPSIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX CROS" + - "SEDSIGNWRITING HAND-FIST MIDDLE THUMB ANGLED INDEX UPSIGNWRITING HAND-FI" + - "ST INDEX THUMB HOOKED MIDDLE HINGEDSIGNWRITING HAND-FLAT FOUR FINGERSSIG" + - "NWRITING HAND-FLAT FOUR FINGERS BENTSIGNWRITING HAND-FLAT FOUR FINGERS H" + - "INGEDSIGNWRITING HAND-FLAT FOUR FINGERS CONJOINEDSIGNWRITING HAND-FLAT F" + - "OUR FINGERS CONJOINED SPLITSIGNWRITING HAND-CLAW FOUR FINGERS CONJOINEDS" + - "IGNWRITING HAND-FIST FOUR FINGERS CONJOINED BENTSIGNWRITING HAND-HINGE F" + - "OUR FINGERS CONJOINEDSIGNWRITING HAND-FLAT FIVE FINGERS SPREADSIGNWRITIN" + - "G HAND-FLAT HEEL FIVE FINGERS SPREADSIGNWRITING HAND-FLAT FIVE FINGERS S" + - "PREAD FOUR BENTSIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD FOUR BENTS" + - "IGNWRITING HAND-FLAT FIVE FINGERS SPREAD BENTSIGNWRITING HAND-FLAT HEEL " + - "FIVE FINGERS SPREAD BENTSIGNWRITING HAND-FLAT FIVE FINGERS SPREAD THUMB ") + ("" + - "FORWARDSIGNWRITING HAND-CUP FIVE FINGERS SPREADSIGNWRITING HAND-CUP FIVE" + - " FINGERS SPREAD OPENSIGNWRITING HAND-HINGE FIVE FINGERS SPREAD OPENSIGNW" + - "RITING HAND-OVAL FIVE FINGERS SPREADSIGNWRITING HAND-FLAT FIVE FINGERS S" + - "PREAD HINGEDSIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED THUMB SIDES" + - "IGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED NO THUMBSIGNWRITING HAND" + - "-FLATSIGNWRITING HAND-FLAT BETWEEN PALM FACINGSSIGNWRITING HAND-FLAT HEE" + - "LSIGNWRITING HAND-FLAT THUMB SIDESIGNWRITING HAND-FLAT HEEL THUMB SIDESI" + - "GNWRITING HAND-FLAT THUMB BENTSIGNWRITING HAND-FLAT THUMB FORWARDSIGNWRI" + - "TING HAND-FLAT SPLIT INDEX THUMB SIDESIGNWRITING HAND-FLAT SPLIT CENTRES" + - "IGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDESIGNWRITING HAND-FLAT SPLIT " + - "CENTRE THUMB SIDE BENTSIGNWRITING HAND-FLAT SPLIT LITTLESIGNWRITING HAND" + - "-CLAWSIGNWRITING HAND-CLAW THUMB SIDESIGNWRITING HAND-CLAW NO THUMBSIGNW" + - "RITING HAND-CLAW THUMB FORWARDSIGNWRITING HAND-HOOK CURLICUESIGNWRITING " + - "HAND-HOOKSIGNWRITING HAND-CUP OPENSIGNWRITING HAND-CUPSIGNWRITING HAND-C" + - "UP OPEN THUMB SIDESIGNWRITING HAND-CUP THUMB SIDESIGNWRITING HAND-CUP OP" + - "EN NO THUMBSIGNWRITING HAND-CUP NO THUMBSIGNWRITING HAND-CUP OPEN THUMB " + - "FORWARDSIGNWRITING HAND-CUP THUMB FORWARDSIGNWRITING HAND-CURLICUE OPENS" + - "IGNWRITING HAND-CURLICUESIGNWRITING HAND-CIRCLESIGNWRITING HAND-OVALSIGN" + - "WRITING HAND-OVAL THUMB SIDESIGNWRITING HAND-OVAL NO THUMBSIGNWRITING HA" + - "ND-OVAL THUMB FORWARDSIGNWRITING HAND-HINGE OPENSIGNWRITING HAND-HINGE O" + - "PEN THUMB FORWARDSIGNWRITING HAND-HINGESIGNWRITING HAND-HINGE SMALLSIGNW" + - "RITING HAND-HINGE OPEN THUMB SIDESIGNWRITING HAND-HINGE THUMB SIDESIGNWR" + - "ITING HAND-HINGE OPEN NO THUMBSIGNWRITING HAND-HINGE NO THUMBSIGNWRITING" + - " HAND-HINGE THUMB SIDE TOUCHING INDEXSIGNWRITING HAND-HINGE THUMB BETWEE" + - "N MIDDLE RINGSIGNWRITING HAND-ANGLESIGNWRITING HAND-FIST INDEX MIDDLE RI" + - "NGSIGNWRITING HAND-CIRCLE INDEX MIDDLE RINGSIGNWRITING HAND-HINGE INDEX " + - "MIDDLE RINGSIGNWRITING HAND-ANGLE INDEX MIDDLE RINGSIGNWRITING HAND-HING" + - "E LITTLESIGNWRITING HAND-FIST INDEX MIDDLE RING BENTSIGNWRITING HAND-FIS" + - "T INDEX MIDDLE RING CONJOINEDSIGNWRITING HAND-HINGE INDEX MIDDLE RING CO" + - "NJOINEDSIGNWRITING HAND-FIST LITTLE DOWNSIGNWRITING HAND-FIST LITTLE DOW" + - "N RIPPLE STRAIGHTSIGNWRITING HAND-FIST LITTLE DOWN RIPPLE CURVEDSIGNWRIT" + - "ING HAND-FIST LITTLE DOWN OTHERS CIRCLEDSIGNWRITING HAND-FIST LITTLE UPS" + - "IGNWRITING HAND-FIST THUMB UNDER LITTLE UPSIGNWRITING HAND-CIRCLE LITTLE" + - " UPSIGNWRITING HAND-OVAL LITTLE UPSIGNWRITING HAND-ANGLE LITTLE UPSIGNWR" + - "ITING HAND-FIST LITTLE RAISED KNUCKLESIGNWRITING HAND-FIST LITTLE BENTSI" + - "GNWRITING HAND-FIST LITTLE TOUCHES THUMBSIGNWRITING HAND-FIST LITTLE THU" + - "MBSIGNWRITING HAND-HINGE LITTLE THUMBSIGNWRITING HAND-FIST LITTLE INDEX " + - "THUMBSIGNWRITING HAND-HINGE LITTLE INDEX THUMBSIGNWRITING HAND-ANGLE LIT" + - "TLE INDEX THUMB INDEX THUMB OUTSIGNWRITING HAND-ANGLE LITTLE INDEX THUMB" + - " INDEX THUMBSIGNWRITING HAND-FIST LITTLE INDEXSIGNWRITING HAND-CIRCLE LI" + - "TTLE INDEXSIGNWRITING HAND-HINGE LITTLE INDEXSIGNWRITING HAND-ANGLE LITT" + - "LE INDEXSIGNWRITING HAND-FIST INDEX MIDDLE LITTLESIGNWRITING HAND-CIRCLE" + - " INDEX MIDDLE LITTLESIGNWRITING HAND-HINGE INDEX MIDDLE LITTLESIGNWRITIN" + - "G HAND-HINGE RINGSIGNWRITING HAND-ANGLE INDEX MIDDLE LITTLESIGNWRITING H" + - "AND-FIST INDEX MIDDLE CROSS LITTLESIGNWRITING HAND-CIRCLE INDEX MIDDLE C" + - "ROSS LITTLESIGNWRITING HAND-FIST RING DOWNSIGNWRITING HAND-HINGE RING DO" + - "WN INDEX THUMB HOOK MIDDLESIGNWRITING HAND-ANGLE RING DOWN MIDDLE THUMB " + - "INDEX CROSSSIGNWRITING HAND-FIST RING UPSIGNWRITING HAND-FIST RING RAISE" + - "D KNUCKLESIGNWRITING HAND-FIST RING LITTLESIGNWRITING HAND-CIRCLE RING L" + - "ITTLESIGNWRITING HAND-OVAL RING LITTLESIGNWRITING HAND-ANGLE RING LITTLE" + - "SIGNWRITING HAND-FIST RING MIDDLESIGNWRITING HAND-FIST RING MIDDLE CONJO" + - "INEDSIGNWRITING HAND-FIST RING MIDDLE RAISED KNUCKLESSIGNWRITING HAND-FI" + - "ST RING INDEXSIGNWRITING HAND-FIST RING THUMBSIGNWRITING HAND-HOOK RING " + - "THUMBSIGNWRITING HAND-FIST INDEX RING LITTLESIGNWRITING HAND-CIRCLE INDE" + - "X RING LITTLESIGNWRITING HAND-CURLICUE INDEX RING LITTLE ONSIGNWRITING H" + - "AND-HOOK INDEX RING LITTLE OUTSIGNWRITING HAND-HOOK INDEX RING LITTLE IN" + - "SIGNWRITING HAND-HOOK INDEX RING LITTLE UNDERSIGNWRITING HAND-CUP INDEX " + - "RING LITTLESIGNWRITING HAND-HINGE INDEX RING LITTLESIGNWRITING HAND-ANGL" + - "E INDEX RING LITTLE OUTSIGNWRITING HAND-ANGLE INDEX RING LITTLESIGNWRITI" + - "NG HAND-FIST MIDDLE DOWNSIGNWRITING HAND-HINGE MIDDLESIGNWRITING HAND-FI" + - "ST MIDDLE UPSIGNWRITING HAND-CIRCLE MIDDLE UPSIGNWRITING HAND-FIST MIDDL" + - "E RAISED KNUCKLESIGNWRITING HAND-FIST MIDDLE UP THUMB SIDESIGNWRITING HA" + - "ND-HOOK MIDDLE THUMBSIGNWRITING HAND-FIST MIDDLE THUMB LITTLESIGNWRITING" + - " HAND-FIST MIDDLE LITTLESIGNWRITING HAND-FIST MIDDLE RING LITTLESIGNWRIT") + ("" + - "ING HAND-CIRCLE MIDDLE RING LITTLESIGNWRITING HAND-CURLICUE MIDDLE RING " + - "LITTLE ONSIGNWRITING HAND-CUP MIDDLE RING LITTLESIGNWRITING HAND-HINGE M" + - "IDDLE RING LITTLESIGNWRITING HAND-ANGLE MIDDLE RING LITTLE OUTSIGNWRITIN" + - "G HAND-ANGLE MIDDLE RING LITTLE INSIGNWRITING HAND-ANGLE MIDDLE RING LIT" + - "TLESIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE BENTSIGNWRITING HAND-CLAW " + - "MIDDLE RING LITTLE CONJOINEDSIGNWRITING HAND-CLAW MIDDLE RING LITTLE CON" + - "JOINED SIDESIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED OUTSIGNWRI" + - "TING HAND-HOOK MIDDLE RING LITTLE CONJOINED INSIGNWRITING HAND-HOOK MIDD" + - "LE RING LITTLE CONJOINEDSIGNWRITING HAND-HINGE INDEX HINGEDSIGNWRITING H" + - "AND-FIST INDEX THUMB SIDESIGNWRITING HAND-HINGE INDEX THUMB SIDESIGNWRIT" + - "ING HAND-FIST INDEX THUMB SIDE THUMB DIAGONALSIGNWRITING HAND-FIST INDEX" + - " THUMB SIDE THUMB CONJOINEDSIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB " + - "BENTSIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX BENTSIGNWRITING HAND-FI" + - "ST INDEX THUMB SIDE BOTH BENTSIGNWRITING HAND-FIST INDEX THUMB SIDE INDE" + - "X HINGESIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX STRAIGHTSIGNWRITI" + - "NG HAND-FIST INDEX THUMB FORWARD INDEX BENTSIGNWRITING HAND-FIST INDEX T" + - "HUMB HOOKSIGNWRITING HAND-FIST INDEX THUMB CURLICUESIGNWRITING HAND-FIST" + - " INDEX THUMB CURVE THUMB INSIDESIGNWRITING HAND-CLAW INDEX THUMB CURVE T" + - "HUMB INSIDESIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB UNDERSIGNWRITIN" + - "G HAND-FIST INDEX THUMB CIRCLESIGNWRITING HAND-CUP INDEX THUMBSIGNWRITIN" + - "G HAND-CUP INDEX THUMB OPENSIGNWRITING HAND-HINGE INDEX THUMB OPENSIGNWR" + - "ITING HAND-HINGE INDEX THUMB LARGESIGNWRITING HAND-HINGE INDEX THUMBSIGN" + - "WRITING HAND-HINGE INDEX THUMB SMALLSIGNWRITING HAND-ANGLE INDEX THUMB O" + - "UTSIGNWRITING HAND-ANGLE INDEX THUMB INSIGNWRITING HAND-ANGLE INDEX THUM" + - "BSIGNWRITING HAND-FIST THUMBSIGNWRITING HAND-FIST THUMB HEELSIGNWRITING " + - "HAND-FIST THUMB SIDE DIAGONALSIGNWRITING HAND-FIST THUMB SIDE CONJOINEDS" + - "IGNWRITING HAND-FIST THUMB SIDE BENTSIGNWRITING HAND-FIST THUMB FORWARDS" + - "IGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLESIGNWRITING HAND-FIST THU" + - "MB BETWEEN MIDDLE RINGSIGNWRITING HAND-FIST THUMB BETWEEN RING LITTLESIG" + - "NWRITING HAND-FIST THUMB UNDER TWO FINGERSSIGNWRITING HAND-FIST THUMB OV" + - "ER TWO FINGERSSIGNWRITING HAND-FIST THUMB UNDER THREE FINGERSSIGNWRITING" + - " HAND-FIST THUMB UNDER FOUR FINGERSSIGNWRITING HAND-FIST THUMB OVER FOUR" + - " RAISED KNUCKLESSIGNWRITING HAND-FISTSIGNWRITING HAND-FIST HEELSIGNWRITI" + - "NG TOUCH SINGLESIGNWRITING TOUCH MULTIPLESIGNWRITING TOUCH BETWEENSIGNWR" + - "ITING GRASP SINGLESIGNWRITING GRASP MULTIPLESIGNWRITING GRASP BETWEENSIG" + - "NWRITING STRIKE SINGLESIGNWRITING STRIKE MULTIPLESIGNWRITING STRIKE BETW" + - "EENSIGNWRITING BRUSH SINGLESIGNWRITING BRUSH MULTIPLESIGNWRITING BRUSH B" + - "ETWEENSIGNWRITING RUB SINGLESIGNWRITING RUB MULTIPLESIGNWRITING RUB BETW" + - "EENSIGNWRITING SURFACE SYMBOLSSIGNWRITING SURFACE BETWEENSIGNWRITING SQU" + - "EEZE LARGE SINGLESIGNWRITING SQUEEZE SMALL SINGLESIGNWRITING SQUEEZE LAR" + - "GE MULTIPLESIGNWRITING SQUEEZE SMALL MULTIPLESIGNWRITING SQUEEZE SEQUENT" + - "IALSIGNWRITING FLICK LARGE SINGLESIGNWRITING FLICK SMALL SINGLESIGNWRITI" + - "NG FLICK LARGE MULTIPLESIGNWRITING FLICK SMALL MULTIPLESIGNWRITING FLICK" + - " SEQUENTIALSIGNWRITING SQUEEZE FLICK ALTERNATINGSIGNWRITING MOVEMENT-HIN" + - "GE UP DOWN LARGESIGNWRITING MOVEMENT-HINGE UP DOWN SMALLSIGNWRITING MOVE" + - "MENT-HINGE UP SEQUENTIALSIGNWRITING MOVEMENT-HINGE DOWN SEQUENTIALSIGNWR" + - "ITING MOVEMENT-HINGE UP DOWN ALTERNATING LARGESIGNWRITING MOVEMENT-HINGE" + - " UP DOWN ALTERNATING SMALLSIGNWRITING MOVEMENT-HINGE SIDE TO SIDE SCISSO" + - "RSSIGNWRITING MOVEMENT-WALLPLANE FINGER CONTACTSIGNWRITING MOVEMENT-FLOO" + - "RPLANE FINGER CONTACTSIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT SMAL" + - "LSIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT MEDIUMSIGNWRITING MOVEME" + - "NT-WALLPLANE SINGLE STRAIGHT LARGESIGNWRITING MOVEMENT-WALLPLANE SINGLE " + - "STRAIGHT LARGESTSIGNWRITING MOVEMENT-WALLPLANE SINGLE WRIST FLEXSIGNWRIT" + - "ING MOVEMENT-WALLPLANE DOUBLE STRAIGHTSIGNWRITING MOVEMENT-WALLPLANE DOU" + - "BLE WRIST FLEXSIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATINGSIGNWRITI" + - "NG MOVEMENT-WALLPLANE DOUBLE ALTERNATING WRIST FLEXSIGNWRITING MOVEMENT-" + - "WALLPLANE CROSSSIGNWRITING MOVEMENT-WALLPLANE TRIPLE STRAIGHT MOVEMENTSI" + - "GNWRITING MOVEMENT-WALLPLANE TRIPLE WRIST FLEXSIGNWRITING MOVEMENT-WALLP" + - "LANE TRIPLE ALTERNATINGSIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATING" + - " WRIST FLEXSIGNWRITING MOVEMENT-WALLPLANE BEND SMALLSIGNWRITING MOVEMENT" + - "-WALLPLANE BEND MEDIUMSIGNWRITING MOVEMENT-WALLPLANE BEND LARGESIGNWRITI" + - "NG MOVEMENT-WALLPLANE CORNER SMALLSIGNWRITING MOVEMENT-WALLPLANE CORNER " + - "MEDIUMSIGNWRITING MOVEMENT-WALLPLANE CORNER LARGESIGNWRITING MOVEMENT-WA" + - "LLPLANE CORNER ROTATIONSIGNWRITING MOVEMENT-WALLPLANE CHECK SMALLSIGNWRI") + ("" + - "TING MOVEMENT-WALLPLANE CHECK MEDIUMSIGNWRITING MOVEMENT-WALLPLANE CHECK" + - " LARGESIGNWRITING MOVEMENT-WALLPLANE BOX SMALLSIGNWRITING MOVEMENT-WALLP" + - "LANE BOX MEDIUMSIGNWRITING MOVEMENT-WALLPLANE BOX LARGESIGNWRITING MOVEM" + - "ENT-WALLPLANE ZIGZAG SMALLSIGNWRITING MOVEMENT-WALLPLANE ZIGZAG MEDIUMSI" + - "GNWRITING MOVEMENT-WALLPLANE ZIGZAG LARGESIGNWRITING MOVEMENT-WALLPLANE " + - "PEAKS SMALLSIGNWRITING MOVEMENT-WALLPLANE PEAKS MEDIUMSIGNWRITING MOVEME" + - "NT-WALLPLANE PEAKS LARGESIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE " + - "SINGLESIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE DOUBLESIGNWRITING " + - "TRAVEL-WALLPLANE ROTATION-WALLPLANE ALTERNATINGSIGNWRITING TRAVEL-WALLPL" + - "ANE ROTATION-FLOORPLANE SINGLESIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOO" + - "RPLANE DOUBLESIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE ALTERNATIN" + - "GSIGNWRITING TRAVEL-WALLPLANE SHAKINGSIGNWRITING TRAVEL-WALLPLANE ARM SP" + - "IRAL SINGLESIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL DOUBLESIGNWRITING TRA" + - "VEL-WALLPLANE ARM SPIRAL TRIPLESIGNWRITING MOVEMENT-DIAGONAL AWAY SMALLS" + - "IGNWRITING MOVEMENT-DIAGONAL AWAY MEDIUMSIGNWRITING MOVEMENT-DIAGONAL AW" + - "AY LARGESIGNWRITING MOVEMENT-DIAGONAL AWAY LARGESTSIGNWRITING MOVEMENT-D" + - "IAGONAL TOWARDS SMALLSIGNWRITING MOVEMENT-DIAGONAL TOWARDS MEDIUMSIGNWRI" + - "TING MOVEMENT-DIAGONAL TOWARDS LARGESIGNWRITING MOVEMENT-DIAGONAL TOWARD" + - "S LARGESTSIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY SMALLSIGNWRITING MOV" + - "EMENT-DIAGONAL BETWEEN AWAY MEDIUMSIGNWRITING MOVEMENT-DIAGONAL BETWEEN " + - "AWAY LARGESIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGESTSIGNWRITING " + - "MOVEMENT-DIAGONAL BETWEEN TOWARDS SMALLSIGNWRITING MOVEMENT-DIAGONAL BET" + - "WEEN TOWARDS MEDIUMSIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGESI" + - "GNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGESTSIGNWRITING MOVEMENT-" + - "FLOORPLANE SINGLE STRAIGHT SMALLSIGNWRITING MOVEMENT-FLOORPLANE SINGLE S" + - "TRAIGHT MEDIUMSIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGESIGNW" + - "RITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGESTSIGNWRITING MOVEMENT-F" + - "LOORPLANE SINGLE WRIST FLEXSIGNWRITING MOVEMENT-FLOORPLANE DOUBLE STRAIG" + - "HTSIGNWRITING MOVEMENT-FLOORPLANE DOUBLE WRIST FLEXSIGNWRITING MOVEMENT-" + - "FLOORPLANE DOUBLE ALTERNATINGSIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTE" + - "RNATING WRIST FLEXSIGNWRITING MOVEMENT-FLOORPLANE CROSSSIGNWRITING MOVEM" + - "ENT-FLOORPLANE TRIPLE STRAIGHT MOVEMENTSIGNWRITING MOVEMENT-FLOORPLANE T" + - "RIPLE WRIST FLEXSIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING MOVEM" + - "ENTSIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING WRIST FLEXSIGNWRIT" + - "ING MOVEMENT-FLOORPLANE BENDSIGNWRITING MOVEMENT-FLOORPLANE CORNER SMALL" + - "SIGNWRITING MOVEMENT-FLOORPLANE CORNER MEDIUMSIGNWRITING MOVEMENT-FLOORP" + - "LANE CORNER LARGESIGNWRITING MOVEMENT-FLOORPLANE CHECKSIGNWRITING MOVEME" + - "NT-FLOORPLANE BOX SMALLSIGNWRITING MOVEMENT-FLOORPLANE BOX MEDIUMSIGNWRI" + - "TING MOVEMENT-FLOORPLANE BOX LARGESIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG" + - " SMALLSIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG MEDIUMSIGNWRITING MOVEMENT-" + - "FLOORPLANE ZIGZAG LARGESIGNWRITING MOVEMENT-FLOORPLANE PEAKS SMALLSIGNWR" + - "ITING MOVEMENT-FLOORPLANE PEAKS MEDIUMSIGNWRITING MOVEMENT-FLOORPLANE PE" + - "AKS LARGESIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE SINGLESIGNWRI" + - "TING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE DOUBLESIGNWRITING TRAVEL-FLOO" + - "RPLANE ROTATION-FLOORPLANE ALTERNATINGSIGNWRITING TRAVEL-FLOORPLANE ROTA" + - "TION-WALLPLANE SINGLESIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE DO" + - "UBLESIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE ALTERNATINGSIGNWRIT" + - "ING TRAVEL-FLOORPLANE SHAKINGSIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTE" + - "R SMALLSIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER MEDIUMSIGNWRITING MO" + - "VEMENT-WALLPLANE CURVE QUARTER LARGESIGNWRITING MOVEMENT-WALLPLANE CURVE" + - " QUARTER LARGESTSIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE SMALLSI" + - "GNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE MEDIUMSIGNWRITING MOVEMEN" + - "T-WALLPLANE CURVE HALF-CIRCLE LARGESIGNWRITING MOVEMENT-WALLPLANE CURVE " + - "HALF-CIRCLE LARGESTSIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CI" + - "RCLE SMALLSIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE MEDI" + - "UMSIGNWRITING MOVEMENT-WALLPLANE HUMP SMALLSIGNWRITING MOVEMENT-WALLPLAN" + - "E HUMP MEDIUMSIGNWRITING MOVEMENT-WALLPLANE HUMP LARGESIGNWRITING MOVEME" + - "NT-WALLPLANE LOOP SMALLSIGNWRITING MOVEMENT-WALLPLANE LOOP MEDIUMSIGNWRI" + - "TING MOVEMENT-WALLPLANE LOOP LARGESIGNWRITING MOVEMENT-WALLPLANE LOOP SM" + - "ALL DOUBLESIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE SMALLSIGNWRIT" + - "ING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE MEDIUMSIGNWRITING MOVEMENT-WALL" + - "PLANE WAVE CURVE DOUBLE LARGESIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE T" + - "RIPLE SMALLSIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE MEDIUMSIGNWR" + - "ITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE LARGESIGNWRITING MOVEMENT-WAL") + ("" + - "LPLANE CURVE THEN STRAIGHTSIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS SM" + - "ALLSIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS MEDIUMSIGNWRITING ROTATIO" + - "N-WALLPLANE SINGLESIGNWRITING ROTATION-WALLPLANE DOUBLESIGNWRITING ROTAT" + - "ION-WALLPLANE ALTERNATESIGNWRITING MOVEMENT-WALLPLANE SHAKINGSIGNWRITING" + - " MOVEMENT-WALLPLANE CURVE HITTING FRONT WALLSIGNWRITING MOVEMENT-WALLPLA" + - "NE HUMP HITTING FRONT WALLSIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING FR" + - "ONT WALLSIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING FRONT WALLSIGNWRITIN" + - "G ROTATION-WALLPLANE SINGLE HITTING FRONT WALLSIGNWRITING ROTATION-WALLP" + - "LANE DOUBLE HITTING FRONT WALLSIGNWRITING ROTATION-WALLPLANE ALTERNATING" + - " HITTING FRONT WALLSIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING CHESTSIG" + - "NWRITING MOVEMENT-WALLPLANE HUMP HITTING CHESTSIGNWRITING MOVEMENT-WALLP" + - "LANE LOOP HITTING CHESTSIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING CHEST" + - "SIGNWRITING ROTATION-WALLPLANE SINGLE HITTING CHESTSIGNWRITING ROTATION-" + - "WALLPLANE DOUBLE HITTING CHESTSIGNWRITING ROTATION-WALLPLANE ALTERNATING" + - " HITTING CHESTSIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH SMALLSIG" + - "NWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH MEDIUMSIGNWRITING MOVEMEN" + - "T-WALLPLANE WAVE DIAGONAL PATH LARGESIGNWRITING MOVEMENT-FLOORPLANE CURV" + - "E HITTING CEILING SMALLSIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEI" + - "LING LARGESIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL DOU" + - "BLESIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE DOUBLESIGN" + - "WRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL TRIPLESIGNWRITING" + - " MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE TRIPLESIGNWRITING MOVEME" + - "NT-FLOORPLANE LOOP HITTING CEILING SMALL SINGLESIGNWRITING MOVEMENT-FLOO" + - "RPLANE LOOP HITTING CEILING LARGE SINGLESIGNWRITING MOVEMENT-FLOORPLANE " + - "LOOP HITTING CEILING SMALL DOUBLESIGNWRITING MOVEMENT-FLOORPLANE LOOP HI" + - "TTING CEILING LARGE DOUBLESIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING C" + - "EILING SMALLSIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING LARGESI" + - "GNWRITING ROTATION-FLOORPLANE SINGLE HITTING CEILINGSIGNWRITING ROTATION" + - "-FLOORPLANE DOUBLE HITTING CEILINGSIGNWRITING ROTATION-FLOORPLANE ALTERN" + - "ATING HITTING CEILINGSIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR" + - " SMALLSIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR LARGESIGNWRITI" + - "NG MOVEMENT-FLOORPLANE HUMP HITTING FLOOR SMALL DOUBLESIGNWRITING MOVEME" + - "NT-FLOORPLANE HUMP HITTING FLOOR LARGE DOUBLESIGNWRITING MOVEMENT-FLOORP" + - "LANE HUMP HITTING FLOOR TRIPLE SMALL TRIPLESIGNWRITING MOVEMENT-FLOORPLA" + - "NE HUMP HITTING FLOOR TRIPLE LARGE TRIPLESIGNWRITING MOVEMENT-FLOORPLANE" + - " LOOP HITTING FLOOR SMALL SINGLESIGNWRITING MOVEMENT-FLOORPLANE LOOP HIT" + - "TING FLOOR LARGE SINGLESIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOO" + - "R SMALL DOUBLESIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE D" + - "OUBLESIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR SMALLSIGNWRITING" + - " MOVEMENT-FLOORPLANE WAVE HITTING FLOOR LARGESIGNWRITING ROTATION-FLOORP" + - "LANE SINGLE HITTING FLOORSIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING " + - "FLOORSIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING FLOORSIGNWRITIN" + - "G MOVEMENT-FLOORPLANE CURVE SMALLSIGNWRITING MOVEMENT-FLOORPLANE CURVE M" + - "EDIUMSIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGESIGNWRITING MOVEMENT-FLO" + - "ORPLANE CURVE LARGESTSIGNWRITING MOVEMENT-FLOORPLANE CURVE COMBINEDSIGNW" + - "RITING MOVEMENT-FLOORPLANE HUMP SMALLSIGNWRITING MOVEMENT-FLOORPLANE LOO" + - "P SMALLSIGNWRITING MOVEMENT-FLOORPLANE WAVE SNAKESIGNWRITING MOVEMENT-FL" + - "OORPLANE WAVE SMALLSIGNWRITING MOVEMENT-FLOORPLANE WAVE LARGESIGNWRITING" + - " ROTATION-FLOORPLANE SINGLESIGNWRITING ROTATION-FLOORPLANE DOUBLESIGNWRI" + - "TING ROTATION-FLOORPLANE ALTERNATINGSIGNWRITING MOVEMENT-FLOORPLANE SHAK" + - "ING PARALLELSIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL SINGLESIGNWR" + - "ITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM SINGLESIGNWRITING MOVEMENT-WA" + - "LLPLANE ARM CIRCLE SMALL DOUBLESIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE" + - " MEDIUM DOUBLESIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SM" + - "ALL SINGLESIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM" + - " SINGLESIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE SIN" + - "GLESIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL DOUBLES" + - "IGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM DOUBLESIGN" + - "WRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE DOUBLESIGNWRIT" + - "ING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT SINGLESIGNWRITING MOVEMENT-WAL" + - "LPLANE WRIST CIRCLE FRONT DOUBLESIGNWRITING MOVEMENT-FLOORPLANE WRIST CI" + - "RCLE HITTING WALL SINGLESIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE HIT" + - "TING WALL DOUBLESIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES SINGLESIGN" + - "WRITING MOVEMENT-WALLPLANE FINGER CIRCLES DOUBLESIGNWRITING MOVEMENT-FLO") + ("" + - "ORPLANE FINGER CIRCLES HITTING WALL SINGLESIGNWRITING MOVEMENT-FLOORPLAN" + - "E FINGER CIRCLES HITTING WALL DOUBLESIGNWRITING DYNAMIC ARROWHEAD SMALLS" + - "IGNWRITING DYNAMIC ARROWHEAD LARGESIGNWRITING DYNAMIC FASTSIGNWRITING DY" + - "NAMIC SLOWSIGNWRITING DYNAMIC TENSESIGNWRITING DYNAMIC RELAXEDSIGNWRITIN" + - "G DYNAMIC SIMULTANEOUSSIGNWRITING DYNAMIC SIMULTANEOUS ALTERNATINGSIGNWR" + - "ITING DYNAMIC EVERY OTHER TIMESIGNWRITING DYNAMIC GRADUALSIGNWRITING HEA" + - "DSIGNWRITING HEAD RIMSIGNWRITING HEAD MOVEMENT-WALLPLANE STRAIGHTSIGNWRI" + - "TING HEAD MOVEMENT-WALLPLANE TILTSIGNWRITING HEAD MOVEMENT-FLOORPLANE ST" + - "RAIGHTSIGNWRITING HEAD MOVEMENT-WALLPLANE CURVESIGNWRITING HEAD MOVEMENT" + - "-FLOORPLANE CURVESIGNWRITING HEAD MOVEMENT CIRCLESIGNWRITING FACE DIRECT" + - "ION POSITION NOSE FORWARD TILTINGSIGNWRITING FACE DIRECTION POSITION NOS" + - "E UP OR DOWNSIGNWRITING FACE DIRECTION POSITION NOSE UP OR DOWN TILTINGS" + - "IGNWRITING EYEBROWS STRAIGHT UPSIGNWRITING EYEBROWS STRAIGHT NEUTRALSIGN" + - "WRITING EYEBROWS STRAIGHT DOWNSIGNWRITING DREAMY EYEBROWS NEUTRAL DOWNSI" + - "GNWRITING DREAMY EYEBROWS DOWN NEUTRALSIGNWRITING DREAMY EYEBROWS UP NEU" + - "TRALSIGNWRITING DREAMY EYEBROWS NEUTRAL UPSIGNWRITING FOREHEAD NEUTRALSI" + - "GNWRITING FOREHEAD CONTACTSIGNWRITING FOREHEAD WRINKLEDSIGNWRITING EYES " + - "OPENSIGNWRITING EYES SQUEEZEDSIGNWRITING EYES CLOSEDSIGNWRITING EYE BLIN" + - "K SINGLESIGNWRITING EYE BLINK MULTIPLESIGNWRITING EYES HALF OPENSIGNWRIT" + - "ING EYES WIDE OPENSIGNWRITING EYES HALF CLOSEDSIGNWRITING EYES WIDENING " + - "MOVEMENTSIGNWRITING EYE WINKSIGNWRITING EYELASHES UPSIGNWRITING EYELASHE" + - "S DOWNSIGNWRITING EYELASHES FLUTTERINGSIGNWRITING EYEGAZE-WALLPLANE STRA" + - "IGHTSIGNWRITING EYEGAZE-WALLPLANE STRAIGHT DOUBLESIGNWRITING EYEGAZE-WAL" + - "LPLANE STRAIGHT ALTERNATINGSIGNWRITING EYEGAZE-FLOORPLANE STRAIGHTSIGNWR" + - "ITING EYEGAZE-FLOORPLANE STRAIGHT DOUBLESIGNWRITING EYEGAZE-FLOORPLANE S" + - "TRAIGHT ALTERNATINGSIGNWRITING EYEGAZE-WALLPLANE CURVEDSIGNWRITING EYEGA" + - "ZE-FLOORPLANE CURVEDSIGNWRITING EYEGAZE-WALLPLANE CIRCLINGSIGNWRITING CH" + - "EEKS PUFFEDSIGNWRITING CHEEKS NEUTRALSIGNWRITING CHEEKS SUCKEDSIGNWRITIN" + - "G TENSE CHEEKS HIGHSIGNWRITING TENSE CHEEKS MIDDLESIGNWRITING TENSE CHEE" + - "KS LOWSIGNWRITING EARSSIGNWRITING NOSE NEUTRALSIGNWRITING NOSE CONTACTSI" + - "GNWRITING NOSE WRINKLESSIGNWRITING NOSE WIGGLESSIGNWRITING AIR BLOWING O" + - "UTSIGNWRITING AIR SUCKING INSIGNWRITING AIR BLOW SMALL ROTATIONSSIGNWRIT" + - "ING AIR SUCK SMALL ROTATIONSSIGNWRITING BREATH INHALESIGNWRITING BREATH " + - "EXHALESIGNWRITING MOUTH CLOSED NEUTRALSIGNWRITING MOUTH CLOSED FORWARDSI" + - "GNWRITING MOUTH CLOSED CONTACTSIGNWRITING MOUTH SMILESIGNWRITING MOUTH S" + - "MILE WRINKLEDSIGNWRITING MOUTH SMILE OPENSIGNWRITING MOUTH FROWNSIGNWRIT" + - "ING MOUTH FROWN WRINKLEDSIGNWRITING MOUTH FROWN OPENSIGNWRITING MOUTH OP" + - "EN CIRCLESIGNWRITING MOUTH OPEN FORWARDSIGNWRITING MOUTH OPEN WRINKLEDSI" + - "GNWRITING MOUTH OPEN OVALSIGNWRITING MOUTH OPEN OVAL WRINKLEDSIGNWRITING" + - " MOUTH OPEN OVAL YAWNSIGNWRITING MOUTH OPEN RECTANGLESIGNWRITING MOUTH O" + - "PEN RECTANGLE WRINKLEDSIGNWRITING MOUTH OPEN RECTANGLE YAWNSIGNWRITING M" + - "OUTH KISSSIGNWRITING MOUTH KISS FORWARDSIGNWRITING MOUTH KISS WRINKLEDSI" + - "GNWRITING MOUTH TENSESIGNWRITING MOUTH TENSE FORWARDSIGNWRITING MOUTH TE" + - "NSE SUCKEDSIGNWRITING LIPS PRESSED TOGETHERSIGNWRITING LIP LOWER OVER UP" + - "PERSIGNWRITING LIP UPPER OVER LOWERSIGNWRITING MOUTH CORNERSSIGNWRITING " + - "MOUTH WRINKLES SINGLESIGNWRITING MOUTH WRINKLES DOUBLESIGNWRITING TONGUE" + - " STICKING OUT FARSIGNWRITING TONGUE LICKING LIPSSIGNWRITING TONGUE TIP B" + - "ETWEEN LIPSSIGNWRITING TONGUE TIP TOUCHING INSIDE MOUTHSIGNWRITING TONGU" + - "E INSIDE MOUTH RELAXEDSIGNWRITING TONGUE MOVES AGAINST CHEEKSIGNWRITING " + - "TONGUE CENTRE STICKING OUTSIGNWRITING TONGUE CENTRE INSIDE MOUTHSIGNWRIT" + - "ING TEETHSIGNWRITING TEETH MOVEMENTSIGNWRITING TEETH ON TONGUESIGNWRITIN" + - "G TEETH ON TONGUE MOVEMENTSIGNWRITING TEETH ON LIPSSIGNWRITING TEETH ON " + - "LIPS MOVEMENTSIGNWRITING TEETH BITE LIPSSIGNWRITING MOVEMENT-WALLPLANE J" + - "AWSIGNWRITING MOVEMENT-FLOORPLANE JAWSIGNWRITING NECKSIGNWRITING HAIRSIG" + - "NWRITING EXCITEMENTSIGNWRITING SHOULDER HIP SPINESIGNWRITING SHOULDER HI" + - "P POSITIONSSIGNWRITING WALLPLANE SHOULDER HIP MOVESIGNWRITING FLOORPLANE" + - " SHOULDER HIP MOVESIGNWRITING SHOULDER TILTING FROM WAISTSIGNWRITING TOR" + - "SO-WALLPLANE STRAIGHT STRETCHSIGNWRITING TORSO-WALLPLANE CURVED BENDSIGN" + - "WRITING TORSO-FLOORPLANE TWISTINGSIGNWRITING UPPER BODY TILTING FROM HIP" + - " JOINTSSIGNWRITING LIMB COMBINATIONSIGNWRITING LIMB LENGTH-1SIGNWRITING " + - "LIMB LENGTH-2SIGNWRITING LIMB LENGTH-3SIGNWRITING LIMB LENGTH-4SIGNWRITI" + - "NG LIMB LENGTH-5SIGNWRITING LIMB LENGTH-6SIGNWRITING LIMB LENGTH-7SIGNWR" + - "ITING FINGERSIGNWRITING LOCATION-WALLPLANE SPACESIGNWRITING LOCATION-FLO" + - "ORPLANE SPACESIGNWRITING LOCATION HEIGHTSIGNWRITING LOCATION WIDTHSIGNWR") + ("" + - "ITING LOCATION DEPTHSIGNWRITING LOCATION HEAD NECKSIGNWRITING LOCATION T" + - "ORSOSIGNWRITING LOCATION LIMBS DIGITSSIGNWRITING COMMASIGNWRITING FULL S" + - "TOPSIGNWRITING SEMICOLONSIGNWRITING COLONSIGNWRITING PARENTHESISSIGNWRIT" + - "ING FILL MODIFIER-2SIGNWRITING FILL MODIFIER-3SIGNWRITING FILL MODIFIER-" + - "4SIGNWRITING FILL MODIFIER-5SIGNWRITING FILL MODIFIER-6SIGNWRITING ROTAT" + - "ION MODIFIER-2SIGNWRITING ROTATION MODIFIER-3SIGNWRITING ROTATION MODIFI" + - "ER-4SIGNWRITING ROTATION MODIFIER-5SIGNWRITING ROTATION MODIFIER-6SIGNWR" + - "ITING ROTATION MODIFIER-7SIGNWRITING ROTATION MODIFIER-8SIGNWRITING ROTA" + - "TION MODIFIER-9SIGNWRITING ROTATION MODIFIER-10SIGNWRITING ROTATION MODI" + - "FIER-11SIGNWRITING ROTATION MODIFIER-12SIGNWRITING ROTATION MODIFIER-13S" + - "IGNWRITING ROTATION MODIFIER-14SIGNWRITING ROTATION MODIFIER-15SIGNWRITI" + - "NG ROTATION MODIFIER-16COMBINING GLAGOLITIC LETTER AZUCOMBINING GLAGOLIT" + - "IC LETTER BUKYCOMBINING GLAGOLITIC LETTER VEDECOMBINING GLAGOLITIC LETTE" + - "R GLAGOLICOMBINING GLAGOLITIC LETTER DOBROCOMBINING GLAGOLITIC LETTER YE" + - "STUCOMBINING GLAGOLITIC LETTER ZHIVETECOMBINING GLAGOLITIC LETTER ZEMLJA" + - "COMBINING GLAGOLITIC LETTER IZHECOMBINING GLAGOLITIC LETTER INITIAL IZHE" + - "COMBINING GLAGOLITIC LETTER ICOMBINING GLAGOLITIC LETTER DJERVICOMBINING" + - " GLAGOLITIC LETTER KAKOCOMBINING GLAGOLITIC LETTER LJUDIJECOMBINING GLAG" + - "OLITIC LETTER MYSLITECOMBINING GLAGOLITIC LETTER NASHICOMBINING GLAGOLIT" + - "IC LETTER ONUCOMBINING GLAGOLITIC LETTER POKOJICOMBINING GLAGOLITIC LETT" + - "ER RITSICOMBINING GLAGOLITIC LETTER SLOVOCOMBINING GLAGOLITIC LETTER TVR" + - "IDOCOMBINING GLAGOLITIC LETTER UKUCOMBINING GLAGOLITIC LETTER FRITUCOMBI" + - "NING GLAGOLITIC LETTER HERUCOMBINING GLAGOLITIC LETTER SHTACOMBINING GLA" + - "GOLITIC LETTER TSICOMBINING GLAGOLITIC LETTER CHRIVICOMBINING GLAGOLITIC" + - " LETTER SHACOMBINING GLAGOLITIC LETTER YERUCOMBINING GLAGOLITIC LETTER Y" + - "ERICOMBINING GLAGOLITIC LETTER YATICOMBINING GLAGOLITIC LETTER YUCOMBINI" + - "NG GLAGOLITIC LETTER SMALL YUSCOMBINING GLAGOLITIC LETTER YOCOMBINING GL" + - "AGOLITIC LETTER IOTATED SMALL YUSCOMBINING GLAGOLITIC LETTER BIG YUSCOMB" + - "INING GLAGOLITIC LETTER IOTATED BIG YUSCOMBINING GLAGOLITIC LETTER FITAM" + - "ENDE KIKAKUI SYLLABLE M001 KIMENDE KIKAKUI SYLLABLE M002 KAMENDE KIKAKUI" + - " SYLLABLE M003 KUMENDE KIKAKUI SYLLABLE M065 KEEMENDE KIKAKUI SYLLABLE M" + - "095 KEMENDE KIKAKUI SYLLABLE M076 KOOMENDE KIKAKUI SYLLABLE M048 KOMENDE" + - " KIKAKUI SYLLABLE M179 KUAMENDE KIKAKUI SYLLABLE M004 WIMENDE KIKAKUI SY" + - "LLABLE M005 WAMENDE KIKAKUI SYLLABLE M006 WUMENDE KIKAKUI SYLLABLE M126 " + - "WEEMENDE KIKAKUI SYLLABLE M118 WEMENDE KIKAKUI SYLLABLE M114 WOOMENDE KI" + - "KAKUI SYLLABLE M045 WOMENDE KIKAKUI SYLLABLE M194 WUIMENDE KIKAKUI SYLLA" + - "BLE M143 WEIMENDE KIKAKUI SYLLABLE M061 WVIMENDE KIKAKUI SYLLABLE M049 W" + - "VAMENDE KIKAKUI SYLLABLE M139 WVEMENDE KIKAKUI SYLLABLE M007 MINMENDE KI" + - "KAKUI SYLLABLE M008 MANMENDE KIKAKUI SYLLABLE M009 MUNMENDE KIKAKUI SYLL" + - "ABLE M059 MENMENDE KIKAKUI SYLLABLE M094 MONMENDE KIKAKUI SYLLABLE M154 " + - "MUANMENDE KIKAKUI SYLLABLE M189 MUENMENDE KIKAKUI SYLLABLE M010 BIMENDE " + - "KIKAKUI SYLLABLE M011 BAMENDE KIKAKUI SYLLABLE M012 BUMENDE KIKAKUI SYLL" + - "ABLE M150 BEEMENDE KIKAKUI SYLLABLE M097 BEMENDE KIKAKUI SYLLABLE M103 B" + - "OOMENDE KIKAKUI SYLLABLE M138 BOMENDE KIKAKUI SYLLABLE M013 IMENDE KIKAK" + - "UI SYLLABLE M014 AMENDE KIKAKUI SYLLABLE M015 UMENDE KIKAKUI SYLLABLE M1" + - "63 EEMENDE KIKAKUI SYLLABLE M100 EMENDE KIKAKUI SYLLABLE M165 OOMENDE KI" + - "KAKUI SYLLABLE M147 OMENDE KIKAKUI SYLLABLE M137 EIMENDE KIKAKUI SYLLABL" + - "E M131 INMENDE KIKAKUI SYLLABLE M135 INMENDE KIKAKUI SYLLABLE M195 ANMEN" + - "DE KIKAKUI SYLLABLE M178 ENMENDE KIKAKUI SYLLABLE M019 SIMENDE KIKAKUI S" + - "YLLABLE M020 SAMENDE KIKAKUI SYLLABLE M021 SUMENDE KIKAKUI SYLLABLE M162" + - " SEEMENDE KIKAKUI SYLLABLE M116 SEMENDE KIKAKUI SYLLABLE M136 SOOMENDE K" + - "IKAKUI SYLLABLE M079 SOMENDE KIKAKUI SYLLABLE M196 SIAMENDE KIKAKUI SYLL" + - "ABLE M025 LIMENDE KIKAKUI SYLLABLE M026 LAMENDE KIKAKUI SYLLABLE M027 LU" + - "MENDE KIKAKUI SYLLABLE M084 LEEMENDE KIKAKUI SYLLABLE M073 LEMENDE KIKAK" + - "UI SYLLABLE M054 LOOMENDE KIKAKUI SYLLABLE M153 LOMENDE KIKAKUI SYLLABLE" + - " M110 LONG LEMENDE KIKAKUI SYLLABLE M016 DIMENDE KIKAKUI SYLLABLE M017 D" + - "AMENDE KIKAKUI SYLLABLE M018 DUMENDE KIKAKUI SYLLABLE M089 DEEMENDE KIKA" + - "KUI SYLLABLE M180 DOOMENDE KIKAKUI SYLLABLE M181 DOMENDE KIKAKUI SYLLABL" + - "E M022 TIMENDE KIKAKUI SYLLABLE M023 TAMENDE KIKAKUI SYLLABLE M024 TUMEN" + - "DE KIKAKUI SYLLABLE M091 TEEMENDE KIKAKUI SYLLABLE M055 TEMENDE KIKAKUI " + - "SYLLABLE M104 TOOMENDE KIKAKUI SYLLABLE M069 TOMENDE KIKAKUI SYLLABLE M0" + - "28 JIMENDE KIKAKUI SYLLABLE M029 JAMENDE KIKAKUI SYLLABLE M030 JUMENDE K" + - "IKAKUI SYLLABLE M157 JEEMENDE KIKAKUI SYLLABLE M113 JEMENDE KIKAKUI SYLL" + - "ABLE M160 JOOMENDE KIKAKUI SYLLABLE M063 JOMENDE KIKAKUI SYLLABLE M175 L") + ("" + - "ONG JOMENDE KIKAKUI SYLLABLE M031 YIMENDE KIKAKUI SYLLABLE M032 YAMENDE " + - "KIKAKUI SYLLABLE M033 YUMENDE KIKAKUI SYLLABLE M109 YEEMENDE KIKAKUI SYL" + - "LABLE M080 YEMENDE KIKAKUI SYLLABLE M141 YOOMENDE KIKAKUI SYLLABLE M121 " + - "YOMENDE KIKAKUI SYLLABLE M034 FIMENDE KIKAKUI SYLLABLE M035 FAMENDE KIKA" + - "KUI SYLLABLE M036 FUMENDE KIKAKUI SYLLABLE M078 FEEMENDE KIKAKUI SYLLABL" + - "E M075 FEMENDE KIKAKUI SYLLABLE M133 FOOMENDE KIKAKUI SYLLABLE M088 FOME" + - "NDE KIKAKUI SYLLABLE M197 FUAMENDE KIKAKUI SYLLABLE M101 FANMENDE KIKAKU" + - "I SYLLABLE M037 NINMENDE KIKAKUI SYLLABLE M038 NANMENDE KIKAKUI SYLLABLE" + - " M039 NUNMENDE KIKAKUI SYLLABLE M117 NENMENDE KIKAKUI SYLLABLE M169 NONM" + - "ENDE KIKAKUI SYLLABLE M176 HIMENDE KIKAKUI SYLLABLE M041 HAMENDE KIKAKUI" + - " SYLLABLE M186 HUMENDE KIKAKUI SYLLABLE M040 HEEMENDE KIKAKUI SYLLABLE M" + - "096 HEMENDE KIKAKUI SYLLABLE M042 HOOMENDE KIKAKUI SYLLABLE M140 HOMENDE" + - " KIKAKUI SYLLABLE M083 HEEIMENDE KIKAKUI SYLLABLE M128 HOOUMENDE KIKAKUI" + - " SYLLABLE M053 HINMENDE KIKAKUI SYLLABLE M130 HANMENDE KIKAKUI SYLLABLE " + - "M087 HUNMENDE KIKAKUI SYLLABLE M052 HENMENDE KIKAKUI SYLLABLE M193 HONME" + - "NDE KIKAKUI SYLLABLE M046 HUANMENDE KIKAKUI SYLLABLE M090 NGGIMENDE KIKA" + - "KUI SYLLABLE M043 NGGAMENDE KIKAKUI SYLLABLE M082 NGGUMENDE KIKAKUI SYLL" + - "ABLE M115 NGGEEMENDE KIKAKUI SYLLABLE M146 NGGEMENDE KIKAKUI SYLLABLE M1" + - "56 NGGOOMENDE KIKAKUI SYLLABLE M120 NGGOMENDE KIKAKUI SYLLABLE M159 NGGA" + - "AMENDE KIKAKUI SYLLABLE M127 NGGUAMENDE KIKAKUI SYLLABLE M086 LONG NGGEM" + - "ENDE KIKAKUI SYLLABLE M106 LONG NGGOOMENDE KIKAKUI SYLLABLE M183 LONG NG" + - "GOMENDE KIKAKUI SYLLABLE M155 GIMENDE KIKAKUI SYLLABLE M111 GAMENDE KIKA" + - "KUI SYLLABLE M168 GUMENDE KIKAKUI SYLLABLE M190 GEEMENDE KIKAKUI SYLLABL" + - "E M166 GUEIMENDE KIKAKUI SYLLABLE M167 GUANMENDE KIKAKUI SYLLABLE M184 N" + - "GENMENDE KIKAKUI SYLLABLE M057 NGONMENDE KIKAKUI SYLLABLE M177 NGUANMEND" + - "E KIKAKUI SYLLABLE M068 PIMENDE KIKAKUI SYLLABLE M099 PAMENDE KIKAKUI SY" + - "LLABLE M050 PUMENDE KIKAKUI SYLLABLE M081 PEEMENDE KIKAKUI SYLLABLE M051" + - " PEMENDE KIKAKUI SYLLABLE M102 POOMENDE KIKAKUI SYLLABLE M066 POMENDE KI" + - "KAKUI SYLLABLE M145 MBIMENDE KIKAKUI SYLLABLE M062 MBAMENDE KIKAKUI SYLL" + - "ABLE M122 MBUMENDE KIKAKUI SYLLABLE M047 MBEEMENDE KIKAKUI SYLLABLE M188" + - " MBEEMENDE KIKAKUI SYLLABLE M072 MBEMENDE KIKAKUI SYLLABLE M172 MBOOMEND" + - "E KIKAKUI SYLLABLE M174 MBOMENDE KIKAKUI SYLLABLE M187 MBUUMENDE KIKAKUI" + - " SYLLABLE M161 LONG MBEMENDE KIKAKUI SYLLABLE M105 LONG MBOOMENDE KIKAKU" + - "I SYLLABLE M142 LONG MBOMENDE KIKAKUI SYLLABLE M132 KPIMENDE KIKAKUI SYL" + - "LABLE M092 KPAMENDE KIKAKUI SYLLABLE M074 KPUMENDE KIKAKUI SYLLABLE M044" + - " KPEEMENDE KIKAKUI SYLLABLE M108 KPEMENDE KIKAKUI SYLLABLE M112 KPOOMEND" + - "E KIKAKUI SYLLABLE M158 KPOMENDE KIKAKUI SYLLABLE M124 GBIMENDE KIKAKUI " + - "SYLLABLE M056 GBAMENDE KIKAKUI SYLLABLE M148 GBUMENDE KIKAKUI SYLLABLE M" + - "093 GBEEMENDE KIKAKUI SYLLABLE M107 GBEMENDE KIKAKUI SYLLABLE M071 GBOOM" + - "ENDE KIKAKUI SYLLABLE M070 GBOMENDE KIKAKUI SYLLABLE M171 RAMENDE KIKAKU" + - "I SYLLABLE M123 NDIMENDE KIKAKUI SYLLABLE M129 NDAMENDE KIKAKUI SYLLABLE" + - " M125 NDUMENDE KIKAKUI SYLLABLE M191 NDEEMENDE KIKAKUI SYLLABLE M119 NDE" + - "MENDE KIKAKUI SYLLABLE M067 NDOOMENDE KIKAKUI SYLLABLE M064 NDOMENDE KIK" + - "AKUI SYLLABLE M152 NJAMENDE KIKAKUI SYLLABLE M192 NJUMENDE KIKAKUI SYLLA" + - "BLE M149 NJEEMENDE KIKAKUI SYLLABLE M134 NJOOMENDE KIKAKUI SYLLABLE M182" + - " VIMENDE KIKAKUI SYLLABLE M185 VAMENDE KIKAKUI SYLLABLE M151 VUMENDE KIK" + - "AKUI SYLLABLE M173 VEEMENDE KIKAKUI SYLLABLE M085 VEMENDE KIKAKUI SYLLAB" + - "LE M144 VOOMENDE KIKAKUI SYLLABLE M077 VOMENDE KIKAKUI SYLLABLE M164 NYI" + - "NMENDE KIKAKUI SYLLABLE M058 NYANMENDE KIKAKUI SYLLABLE M170 NYUNMENDE K" + - "IKAKUI SYLLABLE M098 NYENMENDE KIKAKUI SYLLABLE M060 NYONMENDE KIKAKUI D" + - "IGIT ONEMENDE KIKAKUI DIGIT TWOMENDE KIKAKUI DIGIT THREEMENDE KIKAKUI DI" + - "GIT FOURMENDE KIKAKUI DIGIT FIVEMENDE KIKAKUI DIGIT SIXMENDE KIKAKUI DIG" + - "IT SEVENMENDE KIKAKUI DIGIT EIGHTMENDE KIKAKUI DIGIT NINEMENDE KIKAKUI C" + - "OMBINING NUMBER TEENSMENDE KIKAKUI COMBINING NUMBER TENSMENDE KIKAKUI CO" + - "MBINING NUMBER HUNDREDSMENDE KIKAKUI COMBINING NUMBER THOUSANDSMENDE KIK" + - "AKUI COMBINING NUMBER TEN THOUSANDSMENDE KIKAKUI COMBINING NUMBER HUNDRE" + - "D THOUSANDSMENDE KIKAKUI COMBINING NUMBER MILLIONSADLAM CAPITAL LETTER A" + - "LIFADLAM CAPITAL LETTER DAALIADLAM CAPITAL LETTER LAAMADLAM CAPITAL LETT" + - "ER MIIMADLAM CAPITAL LETTER BAADLAM CAPITAL LETTER SINNYIIYHEADLAM CAPIT" + - "AL LETTER PEADLAM CAPITAL LETTER BHEADLAM CAPITAL LETTER RAADLAM CAPITAL" + - " LETTER EADLAM CAPITAL LETTER FAADLAM CAPITAL LETTER IADLAM CAPITAL LETT" + - "ER OADLAM CAPITAL LETTER DHAADLAM CAPITAL LETTER YHEADLAM CAPITAL LETTER" + - " WAWADLAM CAPITAL LETTER NUNADLAM CAPITAL LETTER KAFADLAM CAPITAL LETTER" + - " YAADLAM CAPITAL LETTER UADLAM CAPITAL LETTER JIIMADLAM CAPITAL LETTER C") + ("" + - "HIADLAM CAPITAL LETTER HAADLAM CAPITAL LETTER QAAFADLAM CAPITAL LETTER G" + - "AADLAM CAPITAL LETTER NYAADLAM CAPITAL LETTER TUADLAM CAPITAL LETTER NHA" + - "ADLAM CAPITAL LETTER VAADLAM CAPITAL LETTER KHAADLAM CAPITAL LETTER GBEA" + - "DLAM CAPITAL LETTER ZALADLAM CAPITAL LETTER KPOADLAM CAPITAL LETTER SHAA" + - "DLAM SMALL LETTER ALIFADLAM SMALL LETTER DAALIADLAM SMALL LETTER LAAMADL" + - "AM SMALL LETTER MIIMADLAM SMALL LETTER BAADLAM SMALL LETTER SINNYIIYHEAD" + - "LAM SMALL LETTER PEADLAM SMALL LETTER BHEADLAM SMALL LETTER RAADLAM SMAL" + - "L LETTER EADLAM SMALL LETTER FAADLAM SMALL LETTER IADLAM SMALL LETTER OA" + - "DLAM SMALL LETTER DHAADLAM SMALL LETTER YHEADLAM SMALL LETTER WAWADLAM S" + - "MALL LETTER NUNADLAM SMALL LETTER KAFADLAM SMALL LETTER YAADLAM SMALL LE" + - "TTER UADLAM SMALL LETTER JIIMADLAM SMALL LETTER CHIADLAM SMALL LETTER HA" + - "ADLAM SMALL LETTER QAAFADLAM SMALL LETTER GAADLAM SMALL LETTER NYAADLAM " + - "SMALL LETTER TUADLAM SMALL LETTER NHAADLAM SMALL LETTER VAADLAM SMALL LE" + - "TTER KHAADLAM SMALL LETTER GBEADLAM SMALL LETTER ZALADLAM SMALL LETTER K" + - "POADLAM SMALL LETTER SHAADLAM ALIF LENGTHENERADLAM VOWEL LENGTHENERADLAM" + - " GEMINATION MARKADLAM HAMZAADLAM CONSONANT MODIFIERADLAM GEMINATE CONSON" + - "ANT MODIFIERADLAM NUKTAADLAM DIGIT ZEROADLAM DIGIT ONEADLAM DIGIT TWOADL" + - "AM DIGIT THREEADLAM DIGIT FOURADLAM DIGIT FIVEADLAM DIGIT SIXADLAM DIGIT" + - " SEVENADLAM DIGIT EIGHTADLAM DIGIT NINEADLAM INITIAL EXCLAMATION MARKADL" + - "AM INITIAL QUESTION MARKARABIC MATHEMATICAL ALEFARABIC MATHEMATICAL BEHA" + - "RABIC MATHEMATICAL JEEMARABIC MATHEMATICAL DALARABIC MATHEMATICAL WAWARA" + - "BIC MATHEMATICAL ZAINARABIC MATHEMATICAL HAHARABIC MATHEMATICAL TAHARABI" + - "C MATHEMATICAL YEHARABIC MATHEMATICAL KAFARABIC MATHEMATICAL LAMARABIC M" + - "ATHEMATICAL MEEMARABIC MATHEMATICAL NOONARABIC MATHEMATICAL SEENARABIC M" + - "ATHEMATICAL AINARABIC MATHEMATICAL FEHARABIC MATHEMATICAL SADARABIC MATH" + - "EMATICAL QAFARABIC MATHEMATICAL REHARABIC MATHEMATICAL SHEENARABIC MATHE" + - "MATICAL TEHARABIC MATHEMATICAL THEHARABIC MATHEMATICAL KHAHARABIC MATHEM" + - "ATICAL THALARABIC MATHEMATICAL DADARABIC MATHEMATICAL ZAHARABIC MATHEMAT" + - "ICAL GHAINARABIC MATHEMATICAL DOTLESS BEHARABIC MATHEMATICAL DOTLESS NOO" + - "NARABIC MATHEMATICAL DOTLESS FEHARABIC MATHEMATICAL DOTLESS QAFARABIC MA" + - "THEMATICAL INITIAL BEHARABIC MATHEMATICAL INITIAL JEEMARABIC MATHEMATICA" + - "L INITIAL HEHARABIC MATHEMATICAL INITIAL HAHARABIC MATHEMATICAL INITIAL " + - "YEHARABIC MATHEMATICAL INITIAL KAFARABIC MATHEMATICAL INITIAL LAMARABIC " + - "MATHEMATICAL INITIAL MEEMARABIC MATHEMATICAL INITIAL NOONARABIC MATHEMAT" + - "ICAL INITIAL SEENARABIC MATHEMATICAL INITIAL AINARABIC MATHEMATICAL INIT" + - "IAL FEHARABIC MATHEMATICAL INITIAL SADARABIC MATHEMATICAL INITIAL QAFARA" + - "BIC MATHEMATICAL INITIAL SHEENARABIC MATHEMATICAL INITIAL TEHARABIC MATH" + - "EMATICAL INITIAL THEHARABIC MATHEMATICAL INITIAL KHAHARABIC MATHEMATICAL" + - " INITIAL DADARABIC MATHEMATICAL INITIAL GHAINARABIC MATHEMATICAL TAILED " + - "JEEMARABIC MATHEMATICAL TAILED HAHARABIC MATHEMATICAL TAILED YEHARABIC M" + - "ATHEMATICAL TAILED LAMARABIC MATHEMATICAL TAILED NOONARABIC MATHEMATICAL" + - " TAILED SEENARABIC MATHEMATICAL TAILED AINARABIC MATHEMATICAL TAILED SAD" + - "ARABIC MATHEMATICAL TAILED QAFARABIC MATHEMATICAL TAILED SHEENARABIC MAT" + - "HEMATICAL TAILED KHAHARABIC MATHEMATICAL TAILED DADARABIC MATHEMATICAL T" + - "AILED GHAINARABIC MATHEMATICAL TAILED DOTLESS NOONARABIC MATHEMATICAL TA" + - "ILED DOTLESS QAFARABIC MATHEMATICAL STRETCHED BEHARABIC MATHEMATICAL STR" + - "ETCHED JEEMARABIC MATHEMATICAL STRETCHED HEHARABIC MATHEMATICAL STRETCHE" + - "D HAHARABIC MATHEMATICAL STRETCHED TAHARABIC MATHEMATICAL STRETCHED YEHA" + - "RABIC MATHEMATICAL STRETCHED KAFARABIC MATHEMATICAL STRETCHED MEEMARABIC" + - " MATHEMATICAL STRETCHED NOONARABIC MATHEMATICAL STRETCHED SEENARABIC MAT" + - "HEMATICAL STRETCHED AINARABIC MATHEMATICAL STRETCHED FEHARABIC MATHEMATI" + - "CAL STRETCHED SADARABIC MATHEMATICAL STRETCHED QAFARABIC MATHEMATICAL ST" + - "RETCHED SHEENARABIC MATHEMATICAL STRETCHED TEHARABIC MATHEMATICAL STRETC" + - "HED THEHARABIC MATHEMATICAL STRETCHED KHAHARABIC MATHEMATICAL STRETCHED " + - "DADARABIC MATHEMATICAL STRETCHED ZAHARABIC MATHEMATICAL STRETCHED GHAINA" + - "RABIC MATHEMATICAL STRETCHED DOTLESS BEHARABIC MATHEMATICAL STRETCHED DO" + - "TLESS FEHARABIC MATHEMATICAL LOOPED ALEFARABIC MATHEMATICAL LOOPED BEHAR" + - "ABIC MATHEMATICAL LOOPED JEEMARABIC MATHEMATICAL LOOPED DALARABIC MATHEM" + - "ATICAL LOOPED HEHARABIC MATHEMATICAL LOOPED WAWARABIC MATHEMATICAL LOOPE" + - "D ZAINARABIC MATHEMATICAL LOOPED HAHARABIC MATHEMATICAL LOOPED TAHARABIC" + - " MATHEMATICAL LOOPED YEHARABIC MATHEMATICAL LOOPED LAMARABIC MATHEMATICA" + - "L LOOPED MEEMARABIC MATHEMATICAL LOOPED NOONARABIC MATHEMATICAL LOOPED S" + - "EENARABIC MATHEMATICAL LOOPED AINARABIC MATHEMATICAL LOOPED FEHARABIC MA" + - "THEMATICAL LOOPED SADARABIC MATHEMATICAL LOOPED QAFARABIC MATHEMATICAL L") + ("" + - "OOPED REHARABIC MATHEMATICAL LOOPED SHEENARABIC MATHEMATICAL LOOPED TEHA" + - "RABIC MATHEMATICAL LOOPED THEHARABIC MATHEMATICAL LOOPED KHAHARABIC MATH" + - "EMATICAL LOOPED THALARABIC MATHEMATICAL LOOPED DADARABIC MATHEMATICAL LO" + - "OPED ZAHARABIC MATHEMATICAL LOOPED GHAINARABIC MATHEMATICAL DOUBLE-STRUC" + - "K BEHARABIC MATHEMATICAL DOUBLE-STRUCK JEEMARABIC MATHEMATICAL DOUBLE-ST" + - "RUCK DALARABIC MATHEMATICAL DOUBLE-STRUCK WAWARABIC MATHEMATICAL DOUBLE-" + - "STRUCK ZAINARABIC MATHEMATICAL DOUBLE-STRUCK HAHARABIC MATHEMATICAL DOUB" + - "LE-STRUCK TAHARABIC MATHEMATICAL DOUBLE-STRUCK YEHARABIC MATHEMATICAL DO" + - "UBLE-STRUCK LAMARABIC MATHEMATICAL DOUBLE-STRUCK MEEMARABIC MATHEMATICAL" + - " DOUBLE-STRUCK NOONARABIC MATHEMATICAL DOUBLE-STRUCK SEENARABIC MATHEMAT" + - "ICAL DOUBLE-STRUCK AINARABIC MATHEMATICAL DOUBLE-STRUCK FEHARABIC MATHEM" + - "ATICAL DOUBLE-STRUCK SADARABIC MATHEMATICAL DOUBLE-STRUCK QAFARABIC MATH" + - "EMATICAL DOUBLE-STRUCK REHARABIC MATHEMATICAL DOUBLE-STRUCK SHEENARABIC " + - "MATHEMATICAL DOUBLE-STRUCK TEHARABIC MATHEMATICAL DOUBLE-STRUCK THEHARAB" + - "IC MATHEMATICAL DOUBLE-STRUCK KHAHARABIC MATHEMATICAL DOUBLE-STRUCK THAL" + - "ARABIC MATHEMATICAL DOUBLE-STRUCK DADARABIC MATHEMATICAL DOUBLE-STRUCK Z" + - "AHARABIC MATHEMATICAL DOUBLE-STRUCK GHAINARABIC MATHEMATICAL OPERATOR ME" + - "EM WITH HAH WITH TATWEELARABIC MATHEMATICAL OPERATOR HAH WITH DALMAHJONG" + - " TILE EAST WINDMAHJONG TILE SOUTH WINDMAHJONG TILE WEST WINDMAHJONG TILE" + - " NORTH WINDMAHJONG TILE RED DRAGONMAHJONG TILE GREEN DRAGONMAHJONG TILE " + - "WHITE DRAGONMAHJONG TILE ONE OF CHARACTERSMAHJONG TILE TWO OF CHARACTERS" + - "MAHJONG TILE THREE OF CHARACTERSMAHJONG TILE FOUR OF CHARACTERSMAHJONG T" + - "ILE FIVE OF CHARACTERSMAHJONG TILE SIX OF CHARACTERSMAHJONG TILE SEVEN O" + - "F CHARACTERSMAHJONG TILE EIGHT OF CHARACTERSMAHJONG TILE NINE OF CHARACT" + - "ERSMAHJONG TILE ONE OF BAMBOOSMAHJONG TILE TWO OF BAMBOOSMAHJONG TILE TH" + - "REE OF BAMBOOSMAHJONG TILE FOUR OF BAMBOOSMAHJONG TILE FIVE OF BAMBOOSMA" + - "HJONG TILE SIX OF BAMBOOSMAHJONG TILE SEVEN OF BAMBOOSMAHJONG TILE EIGHT" + - " OF BAMBOOSMAHJONG TILE NINE OF BAMBOOSMAHJONG TILE ONE OF CIRCLESMAHJON" + - "G TILE TWO OF CIRCLESMAHJONG TILE THREE OF CIRCLESMAHJONG TILE FOUR OF C" + - "IRCLESMAHJONG TILE FIVE OF CIRCLESMAHJONG TILE SIX OF CIRCLESMAHJONG TIL" + - "E SEVEN OF CIRCLESMAHJONG TILE EIGHT OF CIRCLESMAHJONG TILE NINE OF CIRC" + - "LESMAHJONG TILE PLUMMAHJONG TILE ORCHIDMAHJONG TILE BAMBOOMAHJONG TILE C" + - "HRYSANTHEMUMMAHJONG TILE SPRINGMAHJONG TILE SUMMERMAHJONG TILE AUTUMNMAH" + - "JONG TILE WINTERMAHJONG TILE JOKERMAHJONG TILE BACKDOMINO TILE HORIZONTA" + - "L BACKDOMINO TILE HORIZONTAL-00-00DOMINO TILE HORIZONTAL-00-01DOMINO TIL" + - "E HORIZONTAL-00-02DOMINO TILE HORIZONTAL-00-03DOMINO TILE HORIZONTAL-00-" + - "04DOMINO TILE HORIZONTAL-00-05DOMINO TILE HORIZONTAL-00-06DOMINO TILE HO" + - "RIZONTAL-01-00DOMINO TILE HORIZONTAL-01-01DOMINO TILE HORIZONTAL-01-02DO" + - "MINO TILE HORIZONTAL-01-03DOMINO TILE HORIZONTAL-01-04DOMINO TILE HORIZO" + - "NTAL-01-05DOMINO TILE HORIZONTAL-01-06DOMINO TILE HORIZONTAL-02-00DOMINO" + - " TILE HORIZONTAL-02-01DOMINO TILE HORIZONTAL-02-02DOMINO TILE HORIZONTAL" + - "-02-03DOMINO TILE HORIZONTAL-02-04DOMINO TILE HORIZONTAL-02-05DOMINO TIL" + - "E HORIZONTAL-02-06DOMINO TILE HORIZONTAL-03-00DOMINO TILE HORIZONTAL-03-" + - "01DOMINO TILE HORIZONTAL-03-02DOMINO TILE HORIZONTAL-03-03DOMINO TILE HO" + - "RIZONTAL-03-04DOMINO TILE HORIZONTAL-03-05DOMINO TILE HORIZONTAL-03-06DO" + - "MINO TILE HORIZONTAL-04-00DOMINO TILE HORIZONTAL-04-01DOMINO TILE HORIZO" + - "NTAL-04-02DOMINO TILE HORIZONTAL-04-03DOMINO TILE HORIZONTAL-04-04DOMINO" + - " TILE HORIZONTAL-04-05DOMINO TILE HORIZONTAL-04-06DOMINO TILE HORIZONTAL" + - "-05-00DOMINO TILE HORIZONTAL-05-01DOMINO TILE HORIZONTAL-05-02DOMINO TIL" + - "E HORIZONTAL-05-03DOMINO TILE HORIZONTAL-05-04DOMINO TILE HORIZONTAL-05-" + - "05DOMINO TILE HORIZONTAL-05-06DOMINO TILE HORIZONTAL-06-00DOMINO TILE HO" + - "RIZONTAL-06-01DOMINO TILE HORIZONTAL-06-02DOMINO TILE HORIZONTAL-06-03DO" + - "MINO TILE HORIZONTAL-06-04DOMINO TILE HORIZONTAL-06-05DOMINO TILE HORIZO" + - "NTAL-06-06DOMINO TILE VERTICAL BACKDOMINO TILE VERTICAL-00-00DOMINO TILE" + - " VERTICAL-00-01DOMINO TILE VERTICAL-00-02DOMINO TILE VERTICAL-00-03DOMIN" + - "O TILE VERTICAL-00-04DOMINO TILE VERTICAL-00-05DOMINO TILE VERTICAL-00-0" + - "6DOMINO TILE VERTICAL-01-00DOMINO TILE VERTICAL-01-01DOMINO TILE VERTICA" + - "L-01-02DOMINO TILE VERTICAL-01-03DOMINO TILE VERTICAL-01-04DOMINO TILE V" + - "ERTICAL-01-05DOMINO TILE VERTICAL-01-06DOMINO TILE VERTICAL-02-00DOMINO " + - "TILE VERTICAL-02-01DOMINO TILE VERTICAL-02-02DOMINO TILE VERTICAL-02-03D" + - "OMINO TILE VERTICAL-02-04DOMINO TILE VERTICAL-02-05DOMINO TILE VERTICAL-" + - "02-06DOMINO TILE VERTICAL-03-00DOMINO TILE VERTICAL-03-01DOMINO TILE VER" + - "TICAL-03-02DOMINO TILE VERTICAL-03-03DOMINO TILE VERTICAL-03-04DOMINO TI" + - "LE VERTICAL-03-05DOMINO TILE VERTICAL-03-06DOMINO TILE VERTICAL-04-00DOM") + ("" + - "INO TILE VERTICAL-04-01DOMINO TILE VERTICAL-04-02DOMINO TILE VERTICAL-04" + - "-03DOMINO TILE VERTICAL-04-04DOMINO TILE VERTICAL-04-05DOMINO TILE VERTI" + - "CAL-04-06DOMINO TILE VERTICAL-05-00DOMINO TILE VERTICAL-05-01DOMINO TILE" + - " VERTICAL-05-02DOMINO TILE VERTICAL-05-03DOMINO TILE VERTICAL-05-04DOMIN" + - "O TILE VERTICAL-05-05DOMINO TILE VERTICAL-05-06DOMINO TILE VERTICAL-06-0" + - "0DOMINO TILE VERTICAL-06-01DOMINO TILE VERTICAL-06-02DOMINO TILE VERTICA" + - "L-06-03DOMINO TILE VERTICAL-06-04DOMINO TILE VERTICAL-06-05DOMINO TILE V" + - "ERTICAL-06-06PLAYING CARD BACKPLAYING CARD ACE OF SPADESPLAYING CARD TWO" + - " OF SPADESPLAYING CARD THREE OF SPADESPLAYING CARD FOUR OF SPADESPLAYING" + - " CARD FIVE OF SPADESPLAYING CARD SIX OF SPADESPLAYING CARD SEVEN OF SPAD" + - "ESPLAYING CARD EIGHT OF SPADESPLAYING CARD NINE OF SPADESPLAYING CARD TE" + - "N OF SPADESPLAYING CARD JACK OF SPADESPLAYING CARD KNIGHT OF SPADESPLAYI" + - "NG CARD QUEEN OF SPADESPLAYING CARD KING OF SPADESPLAYING CARD ACE OF HE" + - "ARTSPLAYING CARD TWO OF HEARTSPLAYING CARD THREE OF HEARTSPLAYING CARD F" + - "OUR OF HEARTSPLAYING CARD FIVE OF HEARTSPLAYING CARD SIX OF HEARTSPLAYIN" + - "G CARD SEVEN OF HEARTSPLAYING CARD EIGHT OF HEARTSPLAYING CARD NINE OF H" + - "EARTSPLAYING CARD TEN OF HEARTSPLAYING CARD JACK OF HEARTSPLAYING CARD K" + - "NIGHT OF HEARTSPLAYING CARD QUEEN OF HEARTSPLAYING CARD KING OF HEARTSPL" + - "AYING CARD RED JOKERPLAYING CARD ACE OF DIAMONDSPLAYING CARD TWO OF DIAM" + - "ONDSPLAYING CARD THREE OF DIAMONDSPLAYING CARD FOUR OF DIAMONDSPLAYING C" + - "ARD FIVE OF DIAMONDSPLAYING CARD SIX OF DIAMONDSPLAYING CARD SEVEN OF DI" + - "AMONDSPLAYING CARD EIGHT OF DIAMONDSPLAYING CARD NINE OF DIAMONDSPLAYING" + - " CARD TEN OF DIAMONDSPLAYING CARD JACK OF DIAMONDSPLAYING CARD KNIGHT OF" + - " DIAMONDSPLAYING CARD QUEEN OF DIAMONDSPLAYING CARD KING OF DIAMONDSPLAY" + - "ING CARD BLACK JOKERPLAYING CARD ACE OF CLUBSPLAYING CARD TWO OF CLUBSPL" + - "AYING CARD THREE OF CLUBSPLAYING CARD FOUR OF CLUBSPLAYING CARD FIVE OF " + - "CLUBSPLAYING CARD SIX OF CLUBSPLAYING CARD SEVEN OF CLUBSPLAYING CARD EI" + - "GHT OF CLUBSPLAYING CARD NINE OF CLUBSPLAYING CARD TEN OF CLUBSPLAYING C" + - "ARD JACK OF CLUBSPLAYING CARD KNIGHT OF CLUBSPLAYING CARD QUEEN OF CLUBS" + - "PLAYING CARD KING OF CLUBSPLAYING CARD WHITE JOKERPLAYING CARD FOOLPLAYI" + - "NG CARD TRUMP-1PLAYING CARD TRUMP-2PLAYING CARD TRUMP-3PLAYING CARD TRUM" + - "P-4PLAYING CARD TRUMP-5PLAYING CARD TRUMP-6PLAYING CARD TRUMP-7PLAYING C" + - "ARD TRUMP-8PLAYING CARD TRUMP-9PLAYING CARD TRUMP-10PLAYING CARD TRUMP-1" + - "1PLAYING CARD TRUMP-12PLAYING CARD TRUMP-13PLAYING CARD TRUMP-14PLAYING " + - "CARD TRUMP-15PLAYING CARD TRUMP-16PLAYING CARD TRUMP-17PLAYING CARD TRUM" + - "P-18PLAYING CARD TRUMP-19PLAYING CARD TRUMP-20PLAYING CARD TRUMP-21DIGIT" + - " ZERO FULL STOPDIGIT ZERO COMMADIGIT ONE COMMADIGIT TWO COMMADIGIT THREE" + - " COMMADIGIT FOUR COMMADIGIT FIVE COMMADIGIT SIX COMMADIGIT SEVEN COMMADI" + - "GIT EIGHT COMMADIGIT NINE COMMADINGBAT CIRCLED SANS-SERIF DIGIT ZERODING" + - "BAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZEROPARENTHESIZED LATIN CAPITAL LE" + - "TTER APARENTHESIZED LATIN CAPITAL LETTER BPARENTHESIZED LATIN CAPITAL LE" + - "TTER CPARENTHESIZED LATIN CAPITAL LETTER DPARENTHESIZED LATIN CAPITAL LE" + - "TTER EPARENTHESIZED LATIN CAPITAL LETTER FPARENTHESIZED LATIN CAPITAL LE" + - "TTER GPARENTHESIZED LATIN CAPITAL LETTER HPARENTHESIZED LATIN CAPITAL LE" + - "TTER IPARENTHESIZED LATIN CAPITAL LETTER JPARENTHESIZED LATIN CAPITAL LE" + - "TTER KPARENTHESIZED LATIN CAPITAL LETTER LPARENTHESIZED LATIN CAPITAL LE" + - "TTER MPARENTHESIZED LATIN CAPITAL LETTER NPARENTHESIZED LATIN CAPITAL LE" + - "TTER OPARENTHESIZED LATIN CAPITAL LETTER PPARENTHESIZED LATIN CAPITAL LE" + - "TTER QPARENTHESIZED LATIN CAPITAL LETTER RPARENTHESIZED LATIN CAPITAL LE" + - "TTER SPARENTHESIZED LATIN CAPITAL LETTER TPARENTHESIZED LATIN CAPITAL LE" + - "TTER UPARENTHESIZED LATIN CAPITAL LETTER VPARENTHESIZED LATIN CAPITAL LE" + - "TTER WPARENTHESIZED LATIN CAPITAL LETTER XPARENTHESIZED LATIN CAPITAL LE" + - "TTER YPARENTHESIZED LATIN CAPITAL LETTER ZTORTOISE SHELL BRACKETED LATIN" + - " CAPITAL LETTER SCIRCLED ITALIC LATIN CAPITAL LETTER CCIRCLED ITALIC LAT" + - "IN CAPITAL LETTER RCIRCLED CDCIRCLED WZSQUARED LATIN CAPITAL LETTER ASQU" + - "ARED LATIN CAPITAL LETTER BSQUARED LATIN CAPITAL LETTER CSQUARED LATIN C" + - "APITAL LETTER DSQUARED LATIN CAPITAL LETTER ESQUARED LATIN CAPITAL LETTE" + - "R FSQUARED LATIN CAPITAL LETTER GSQUARED LATIN CAPITAL LETTER HSQUARED L" + - "ATIN CAPITAL LETTER ISQUARED LATIN CAPITAL LETTER JSQUARED LATIN CAPITAL" + - " LETTER KSQUARED LATIN CAPITAL LETTER LSQUARED LATIN CAPITAL LETTER MSQU" + - "ARED LATIN CAPITAL LETTER NSQUARED LATIN CAPITAL LETTER OSQUARED LATIN C" + - "APITAL LETTER PSQUARED LATIN CAPITAL LETTER QSQUARED LATIN CAPITAL LETTE" + - "R RSQUARED LATIN CAPITAL LETTER SSQUARED LATIN CAPITAL LETTER TSQUARED L" + - "ATIN CAPITAL LETTER USQUARED LATIN CAPITAL LETTER VSQUARED LATIN CAPITAL") + ("" + - " LETTER WSQUARED LATIN CAPITAL LETTER XSQUARED LATIN CAPITAL LETTER YSQU" + - "ARED LATIN CAPITAL LETTER ZSQUARED HVSQUARED MVSQUARED SDSQUARED SSSQUAR" + - "ED PPVSQUARED WCNEGATIVE CIRCLED LATIN CAPITAL LETTER ANEGATIVE CIRCLED " + - "LATIN CAPITAL LETTER BNEGATIVE CIRCLED LATIN CAPITAL LETTER CNEGATIVE CI" + - "RCLED LATIN CAPITAL LETTER DNEGATIVE CIRCLED LATIN CAPITAL LETTER ENEGAT" + - "IVE CIRCLED LATIN CAPITAL LETTER FNEGATIVE CIRCLED LATIN CAPITAL LETTER " + - "GNEGATIVE CIRCLED LATIN CAPITAL LETTER HNEGATIVE CIRCLED LATIN CAPITAL L" + - "ETTER INEGATIVE CIRCLED LATIN CAPITAL LETTER JNEGATIVE CIRCLED LATIN CAP" + - "ITAL LETTER KNEGATIVE CIRCLED LATIN CAPITAL LETTER LNEGATIVE CIRCLED LAT" + - "IN CAPITAL LETTER MNEGATIVE CIRCLED LATIN CAPITAL LETTER NNEGATIVE CIRCL" + - "ED LATIN CAPITAL LETTER ONEGATIVE CIRCLED LATIN CAPITAL LETTER PNEGATIVE" + - " CIRCLED LATIN CAPITAL LETTER QNEGATIVE CIRCLED LATIN CAPITAL LETTER RNE" + - "GATIVE CIRCLED LATIN CAPITAL LETTER SNEGATIVE CIRCLED LATIN CAPITAL LETT" + - "ER TNEGATIVE CIRCLED LATIN CAPITAL LETTER UNEGATIVE CIRCLED LATIN CAPITA" + - "L LETTER VNEGATIVE CIRCLED LATIN CAPITAL LETTER WNEGATIVE CIRCLED LATIN " + - "CAPITAL LETTER XNEGATIVE CIRCLED LATIN CAPITAL LETTER YNEGATIVE CIRCLED " + - "LATIN CAPITAL LETTER ZRAISED MC SIGNRAISED MD SIGNNEGATIVE SQUARED LATIN" + - " CAPITAL LETTER ANEGATIVE SQUARED LATIN CAPITAL LETTER BNEGATIVE SQUARED" + - " LATIN CAPITAL LETTER CNEGATIVE SQUARED LATIN CAPITAL LETTER DNEGATIVE S" + - "QUARED LATIN CAPITAL LETTER ENEGATIVE SQUARED LATIN CAPITAL LETTER FNEGA" + - "TIVE SQUARED LATIN CAPITAL LETTER GNEGATIVE SQUARED LATIN CAPITAL LETTER" + - " HNEGATIVE SQUARED LATIN CAPITAL LETTER INEGATIVE SQUARED LATIN CAPITAL " + - "LETTER JNEGATIVE SQUARED LATIN CAPITAL LETTER KNEGATIVE SQUARED LATIN CA" + - "PITAL LETTER LNEGATIVE SQUARED LATIN CAPITAL LETTER MNEGATIVE SQUARED LA" + - "TIN CAPITAL LETTER NNEGATIVE SQUARED LATIN CAPITAL LETTER ONEGATIVE SQUA" + - "RED LATIN CAPITAL LETTER PNEGATIVE SQUARED LATIN CAPITAL LETTER QNEGATIV" + - "E SQUARED LATIN CAPITAL LETTER RNEGATIVE SQUARED LATIN CAPITAL LETTER SN" + - "EGATIVE SQUARED LATIN CAPITAL LETTER TNEGATIVE SQUARED LATIN CAPITAL LET" + - "TER UNEGATIVE SQUARED LATIN CAPITAL LETTER VNEGATIVE SQUARED LATIN CAPIT" + - "AL LETTER WNEGATIVE SQUARED LATIN CAPITAL LETTER XNEGATIVE SQUARED LATIN" + - " CAPITAL LETTER YNEGATIVE SQUARED LATIN CAPITAL LETTER ZCROSSED NEGATIVE" + - " SQUARED LATIN CAPITAL LETTER PNEGATIVE SQUARED ICNEGATIVE SQUARED PANEG" + - "ATIVE SQUARED SANEGATIVE SQUARED ABNEGATIVE SQUARED WCSQUARE DJSQUARED C" + - "LSQUARED COOLSQUARED FREESQUARED IDSQUARED NEWSQUARED NGSQUARED OKSQUARE" + - "D SOSSQUARED UP WITH EXCLAMATION MARKSQUARED VSSQUARED THREE DSQUARED SE" + - "COND SCREENSQUARED TWO KSQUARED FOUR KSQUARED EIGHT KSQUARED FIVE POINT " + - "ONESQUARED SEVEN POINT ONESQUARED TWENTY-TWO POINT TWOSQUARED SIXTY PSQU" + - "ARED ONE HUNDRED TWENTY PSQUARED LATIN SMALL LETTER DSQUARED HCSQUARED H" + - "DRSQUARED HI-RESSQUARED LOSSLESSSQUARED SHVSQUARED UHDSQUARED VODREGIONA" + - "L INDICATOR SYMBOL LETTER AREGIONAL INDICATOR SYMBOL LETTER BREGIONAL IN" + - "DICATOR SYMBOL LETTER CREGIONAL INDICATOR SYMBOL LETTER DREGIONAL INDICA" + - "TOR SYMBOL LETTER EREGIONAL INDICATOR SYMBOL LETTER FREGIONAL INDICATOR " + - "SYMBOL LETTER GREGIONAL INDICATOR SYMBOL LETTER HREGIONAL INDICATOR SYMB" + - "OL LETTER IREGIONAL INDICATOR SYMBOL LETTER JREGIONAL INDICATOR SYMBOL L" + - "ETTER KREGIONAL INDICATOR SYMBOL LETTER LREGIONAL INDICATOR SYMBOL LETTE" + - "R MREGIONAL INDICATOR SYMBOL LETTER NREGIONAL INDICATOR SYMBOL LETTER OR" + - "EGIONAL INDICATOR SYMBOL LETTER PREGIONAL INDICATOR SYMBOL LETTER QREGIO" + - "NAL INDICATOR SYMBOL LETTER RREGIONAL INDICATOR SYMBOL LETTER SREGIONAL " + - "INDICATOR SYMBOL LETTER TREGIONAL INDICATOR SYMBOL LETTER UREGIONAL INDI" + - "CATOR SYMBOL LETTER VREGIONAL INDICATOR SYMBOL LETTER WREGIONAL INDICATO" + - "R SYMBOL LETTER XREGIONAL INDICATOR SYMBOL LETTER YREGIONAL INDICATOR SY" + - "MBOL LETTER ZSQUARE HIRAGANA HOKASQUARED KATAKANA KOKOSQUARED KATAKANA S" + - "ASQUARED CJK UNIFIED IDEOGRAPH-624BSQUARED CJK UNIFIED IDEOGRAPH-5B57SQU" + - "ARED CJK UNIFIED IDEOGRAPH-53CCSQUARED KATAKANA DESQUARED CJK UNIFIED ID" + - "EOGRAPH-4E8CSQUARED CJK UNIFIED IDEOGRAPH-591ASQUARED CJK UNIFIED IDEOGR" + - "APH-89E3SQUARED CJK UNIFIED IDEOGRAPH-5929SQUARED CJK UNIFIED IDEOGRAPH-" + - "4EA4SQUARED CJK UNIFIED IDEOGRAPH-6620SQUARED CJK UNIFIED IDEOGRAPH-7121" + - "SQUARED CJK UNIFIED IDEOGRAPH-6599SQUARED CJK UNIFIED IDEOGRAPH-524DSQUA" + - "RED CJK UNIFIED IDEOGRAPH-5F8CSQUARED CJK UNIFIED IDEOGRAPH-518DSQUARED " + - "CJK UNIFIED IDEOGRAPH-65B0SQUARED CJK UNIFIED IDEOGRAPH-521DSQUARED CJK " + - "UNIFIED IDEOGRAPH-7D42SQUARED CJK UNIFIED IDEOGRAPH-751FSQUARED CJK UNIF" + - "IED IDEOGRAPH-8CA9SQUARED CJK UNIFIED IDEOGRAPH-58F0SQUARED CJK UNIFIED " + - "IDEOGRAPH-5439SQUARED CJK UNIFIED IDEOGRAPH-6F14SQUARED CJK UNIFIED IDEO" + - "GRAPH-6295SQUARED CJK UNIFIED IDEOGRAPH-6355SQUARED CJK UNIFIED IDEOGRAP") + ("" + - "H-4E00SQUARED CJK UNIFIED IDEOGRAPH-4E09SQUARED CJK UNIFIED IDEOGRAPH-90" + - "4ASQUARED CJK UNIFIED IDEOGRAPH-5DE6SQUARED CJK UNIFIED IDEOGRAPH-4E2DSQ" + - "UARED CJK UNIFIED IDEOGRAPH-53F3SQUARED CJK UNIFIED IDEOGRAPH-6307SQUARE" + - "D CJK UNIFIED IDEOGRAPH-8D70SQUARED CJK UNIFIED IDEOGRAPH-6253SQUARED CJ" + - "K UNIFIED IDEOGRAPH-7981SQUARED CJK UNIFIED IDEOGRAPH-7A7ASQUARED CJK UN" + - "IFIED IDEOGRAPH-5408SQUARED CJK UNIFIED IDEOGRAPH-6E80SQUARED CJK UNIFIE" + - "D IDEOGRAPH-6709SQUARED CJK UNIFIED IDEOGRAPH-6708SQUARED CJK UNIFIED ID" + - "EOGRAPH-7533SQUARED CJK UNIFIED IDEOGRAPH-5272SQUARED CJK UNIFIED IDEOGR" + - "APH-55B6SQUARED CJK UNIFIED IDEOGRAPH-914DTORTOISE SHELL BRACKETED CJK U" + - "NIFIED IDEOGRAPH-672CTORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09" + - "TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8CTORTOISE SHELL BRACKE" + - "TED CJK UNIFIED IDEOGRAPH-5B89TORTOISE SHELL BRACKETED CJK UNIFIED IDEOG" + - "RAPH-70B9TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253TORTOISE SHE" + - "LL BRACKETED CJK UNIFIED IDEOGRAPH-76D7TORTOISE SHELL BRACKETED CJK UNIF" + - "IED IDEOGRAPH-52DDTORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557CIR" + - "CLED IDEOGRAPH ADVANTAGECIRCLED IDEOGRAPH ACCEPTCYCLONEFOGGYCLOSED UMBRE" + - "LLANIGHT WITH STARSSUNRISE OVER MOUNTAINSSUNRISECITYSCAPE AT DUSKSUNSET " + - "OVER BUILDINGSRAINBOWBRIDGE AT NIGHTWATER WAVEVOLCANOMILKY WAYEARTH GLOB" + - "E EUROPE-AFRICAEARTH GLOBE AMERICASEARTH GLOBE ASIA-AUSTRALIAGLOBE WITH " + - "MERIDIANSNEW MOON SYMBOLWAXING CRESCENT MOON SYMBOLFIRST QUARTER MOON SY" + - "MBOLWAXING GIBBOUS MOON SYMBOLFULL MOON SYMBOLWANING GIBBOUS MOON SYMBOL" + - "LAST QUARTER MOON SYMBOLWANING CRESCENT MOON SYMBOLCRESCENT MOONNEW MOON" + - " WITH FACEFIRST QUARTER MOON WITH FACELAST QUARTER MOON WITH FACEFULL MO" + - "ON WITH FACESUN WITH FACEGLOWING STARSHOOTING STARTHERMOMETERBLACK DROPL" + - "ETWHITE SUNWHITE SUN WITH SMALL CLOUDWHITE SUN BEHIND CLOUDWHITE SUN BEH" + - "IND CLOUD WITH RAINCLOUD WITH RAINCLOUD WITH SNOWCLOUD WITH LIGHTNINGCLO" + - "UD WITH TORNADOFOGWIND BLOWING FACEHOT DOGTACOBURRITOCHESTNUTSEEDLINGEVE" + - "RGREEN TREEDECIDUOUS TREEPALM TREECACTUSHOT PEPPERTULIPCHERRY BLOSSOMROS" + - "EHIBISCUSSUNFLOWERBLOSSOMEAR OF MAIZEEAR OF RICEHERBFOUR LEAF CLOVERMAPL" + - "E LEAFFALLEN LEAFLEAF FLUTTERING IN WINDMUSHROOMTOMATOAUBERGINEGRAPESMEL" + - "ONWATERMELONTANGERINELEMONBANANAPINEAPPLERED APPLEGREEN APPLEPEARPEACHCH" + - "ERRIESSTRAWBERRYHAMBURGERSLICE OF PIZZAMEAT ON BONEPOULTRY LEGRICE CRACK" + - "ERRICE BALLCOOKED RICECURRY AND RICESTEAMING BOWLSPAGHETTIBREADFRENCH FR" + - "IESROASTED SWEET POTATODANGOODENSUSHIFRIED SHRIMPFISH CAKE WITH SWIRL DE" + - "SIGNSOFT ICE CREAMSHAVED ICEICE CREAMDOUGHNUTCOOKIECHOCOLATE BARCANDYLOL" + - "LIPOPCUSTARDHONEY POTSHORTCAKEBENTO BOXPOT OF FOODCOOKINGFORK AND KNIFET" + - "EACUP WITHOUT HANDLESAKE BOTTLE AND CUPWINE GLASSCOCKTAIL GLASSTROPICAL " + - "DRINKBEER MUGCLINKING BEER MUGSBABY BOTTLEFORK AND KNIFE WITH PLATEBOTTL" + - "E WITH POPPING CORKPOPCORNRIBBONWRAPPED PRESENTBIRTHDAY CAKEJACK-O-LANTE" + - "RNCHRISTMAS TREEFATHER CHRISTMASFIREWORKSFIREWORK SPARKLERBALLOONPARTY P" + - "OPPERCONFETTI BALLTANABATA TREECROSSED FLAGSPINE DECORATIONJAPANESE DOLL" + - "SCARP STREAMERWIND CHIMEMOON VIEWING CEREMONYSCHOOL SATCHELGRADUATION CA" + - "PHEART WITH TIP ON THE LEFTBOUQUET OF FLOWERSMILITARY MEDALREMINDER RIBB" + - "ONMUSICAL KEYBOARD WITH JACKSSTUDIO MICROPHONELEVEL SLIDERCONTROL KNOBSB" + - "EAMED ASCENDING MUSICAL NOTESBEAMED DESCENDING MUSICAL NOTESFILM FRAMESA" + - "DMISSION TICKETSCAROUSEL HORSEFERRIS WHEELROLLER COASTERFISHING POLE AND" + - " FISHMICROPHONEMOVIE CAMERACINEMAHEADPHONEARTIST PALETTETOP HATCIRCUS TE" + - "NTTICKETCLAPPER BOARDPERFORMING ARTSVIDEO GAMEDIRECT HITSLOT MACHINEBILL" + - "IARDSGAME DIEBOWLINGFLOWER PLAYING CARDSMUSICAL NOTEMULTIPLE MUSICAL NOT" + - "ESSAXOPHONEGUITARMUSICAL KEYBOARDTRUMPETVIOLINMUSICAL SCORERUNNING SHIRT" + - " WITH SASHTENNIS RACQUET AND BALLSKI AND SKI BOOTBASKETBALL AND HOOPCHEQ" + - "UERED FLAGSNOWBOARDERRUNNERSURFERSPORTS MEDALTROPHYHORSE RACINGAMERICAN " + - "FOOTBALLRUGBY FOOTBALLSWIMMERWEIGHT LIFTERGOLFERRACING MOTORCYCLERACING " + - "CARCRICKET BAT AND BALLVOLLEYBALLFIELD HOCKEY STICK AND BALLICE HOCKEY S" + - "TICK AND PUCKTABLE TENNIS PADDLE AND BALLSNOW CAPPED MOUNTAINCAMPINGBEAC" + - "H WITH UMBRELLABUILDING CONSTRUCTIONHOUSE BUILDINGSCITYSCAPEDERELICT HOU" + - "SE BUILDINGCLASSICAL BUILDINGDESERTDESERT ISLANDNATIONAL PARKSTADIUMHOUS" + - "E BUILDINGHOUSE WITH GARDENOFFICE BUILDINGJAPANESE POST OFFICEEUROPEAN P" + - "OST OFFICEHOSPITALBANKAUTOMATED TELLER MACHINEHOTELLOVE HOTELCONVENIENCE" + - " STORESCHOOLDEPARTMENT STOREFACTORYIZAKAYA LANTERNJAPANESE CASTLEEUROPEA" + - "N CASTLEWHITE PENNANTBLACK PENNANTWAVING WHITE FLAGWAVING BLACK FLAGROSE" + - "TTEBLACK ROSETTELABELBADMINTON RACQUET AND SHUTTLECOCKBOW AND ARROWAMPHO" + - "RAEMOJI MODIFIER FITZPATRICK TYPE-1-2EMOJI MODIFIER FITZPATRICK TYPE-3EM" + - "OJI MODIFIER FITZPATRICK TYPE-4EMOJI MODIFIER FITZPATRICK TYPE-5EMOJI MO") + ("" + - "DIFIER FITZPATRICK TYPE-6RATMOUSEOXWATER BUFFALOCOWTIGERLEOPARDRABBITCAT" + - "DRAGONCROCODILEWHALESNAILSNAKEHORSERAMGOATSHEEPMONKEYROOSTERCHICKENDOGPI" + - "GBOARELEPHANTOCTOPUSSPIRAL SHELLBUGANTHONEYBEELADY BEETLEFISHTROPICAL FI" + - "SHBLOWFISHTURTLEHATCHING CHICKBABY CHICKFRONT-FACING BABY CHICKBIRDPENGU" + - "INKOALAPOODLEDROMEDARY CAMELBACTRIAN CAMELDOLPHINMOUSE FACECOW FACETIGER" + - " FACERABBIT FACECAT FACEDRAGON FACESPOUTING WHALEHORSE FACEMONKEY FACEDO" + - "G FACEPIG FACEFROG FACEHAMSTER FACEWOLF FACEBEAR FACEPANDA FACEPIG NOSEP" + - "AW PRINTSCHIPMUNKEYESEYEEARNOSEMOUTHTONGUEWHITE UP POINTING BACKHAND IND" + - "EXWHITE DOWN POINTING BACKHAND INDEXWHITE LEFT POINTING BACKHAND INDEXWH" + - "ITE RIGHT POINTING BACKHAND INDEXFISTED HAND SIGNWAVING HAND SIGNOK HAND" + - " SIGNTHUMBS UP SIGNTHUMBS DOWN SIGNCLAPPING HANDS SIGNOPEN HANDS SIGNCRO" + - "WNWOMANS HATEYEGLASSESNECKTIET-SHIRTJEANSDRESSKIMONOBIKINIWOMANS CLOTHES" + - "PURSEHANDBAGPOUCHMANS SHOEATHLETIC SHOEHIGH-HEELED SHOEWOMANS SANDALWOMA" + - "NS BOOTSFOOTPRINTSBUST IN SILHOUETTEBUSTS IN SILHOUETTEBOYGIRLMANWOMANFA" + - "MILYMAN AND WOMAN HOLDING HANDSTWO MEN HOLDING HANDSTWO WOMEN HOLDING HA" + - "NDSPOLICE OFFICERWOMAN WITH BUNNY EARSBRIDE WITH VEILPERSON WITH BLOND H" + - "AIRMAN WITH GUA PI MAOMAN WITH TURBANOLDER MANOLDER WOMANBABYCONSTRUCTIO" + - "N WORKERPRINCESSJAPANESE OGREJAPANESE GOBLINGHOSTBABY ANGELEXTRATERRESTR" + - "IAL ALIENALIEN MONSTERIMPSKULLINFORMATION DESK PERSONGUARDSMANDANCERLIPS" + - "TICKNAIL POLISHFACE MASSAGEHAIRCUTBARBER POLESYRINGEPILLKISS MARKLOVE LE" + - "TTERRINGGEM STONEKISSBOUQUETCOUPLE WITH HEARTWEDDINGBEATING HEARTBROKEN " + - "HEARTTWO HEARTSSPARKLING HEARTGROWING HEARTHEART WITH ARROWBLUE HEARTGRE" + - "EN HEARTYELLOW HEARTPURPLE HEARTHEART WITH RIBBONREVOLVING HEARTSHEART D" + - "ECORATIONDIAMOND SHAPE WITH A DOT INSIDEELECTRIC LIGHT BULBANGER SYMBOLB" + - "OMBSLEEPING SYMBOLCOLLISION SYMBOLSPLASHING SWEAT SYMBOLDROPLETDASH SYMB" + - "OLPILE OF POOFLEXED BICEPSDIZZY SYMBOLSPEECH BALLOONTHOUGHT BALLOONWHITE" + - " FLOWERHUNDRED POINTS SYMBOLMONEY BAGCURRENCY EXCHANGEHEAVY DOLLAR SIGNC" + - "REDIT CARDBANKNOTE WITH YEN SIGNBANKNOTE WITH DOLLAR SIGNBANKNOTE WITH E" + - "URO SIGNBANKNOTE WITH POUND SIGNMONEY WITH WINGSCHART WITH UPWARDS TREND" + - " AND YEN SIGNSEATPERSONAL COMPUTERBRIEFCASEMINIDISCFLOPPY DISKOPTICAL DI" + - "SCDVDFILE FOLDEROPEN FILE FOLDERPAGE WITH CURLPAGE FACING UPCALENDARTEAR" + - "-OFF CALENDARCARD INDEXCHART WITH UPWARDS TRENDCHART WITH DOWNWARDS TREN" + - "DBAR CHARTCLIPBOARDPUSHPINROUND PUSHPINPAPERCLIPSTRAIGHT RULERTRIANGULAR" + - " RULERBOOKMARK TABSLEDGERNOTEBOOKNOTEBOOK WITH DECORATIVE COVERCLOSED BO" + - "OKOPEN BOOKGREEN BOOKBLUE BOOKORANGE BOOKBOOKSNAME BADGESCROLLMEMOTELEPH" + - "ONE RECEIVERPAGERFAX MACHINESATELLITE ANTENNAPUBLIC ADDRESS LOUDSPEAKERC" + - "HEERING MEGAPHONEOUTBOX TRAYINBOX TRAYPACKAGEE-MAIL SYMBOLINCOMING ENVEL" + - "OPEENVELOPE WITH DOWNWARDS ARROW ABOVECLOSED MAILBOX WITH LOWERED FLAGCL" + - "OSED MAILBOX WITH RAISED FLAGOPEN MAILBOX WITH RAISED FLAGOPEN MAILBOX W" + - "ITH LOWERED FLAGPOSTBOXPOSTAL HORNNEWSPAPERMOBILE PHONEMOBILE PHONE WITH" + - " RIGHTWARDS ARROW AT LEFTVIBRATION MODEMOBILE PHONE OFFNO MOBILE PHONESA" + - "NTENNA WITH BARSCAMERACAMERA WITH FLASHVIDEO CAMERATELEVISIONRADIOVIDEOC" + - "ASSETTEFILM PROJECTORPORTABLE STEREOPRAYER BEADSTWISTED RIGHTWARDS ARROW" + - "SCLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWSCLOCKWISE RIGHTWAR" + - "DS AND LEFTWARDS OPEN CIRCLE ARROWS WITH CIRCLED ONE OVERLAYCLOCKWISE DO" + - "WNWARDS AND UPWARDS OPEN CIRCLE ARROWSANTICLOCKWISE DOWNWARDS AND UPWARD" + - "S OPEN CIRCLE ARROWSLOW BRIGHTNESS SYMBOLHIGH BRIGHTNESS SYMBOLSPEAKER W" + - "ITH CANCELLATION STROKESPEAKERSPEAKER WITH ONE SOUND WAVESPEAKER WITH TH" + - "REE SOUND WAVESBATTERYELECTRIC PLUGLEFT-POINTING MAGNIFYING GLASSRIGHT-P" + - "OINTING MAGNIFYING GLASSLOCK WITH INK PENCLOSED LOCK WITH KEYKEYLOCKOPEN" + - " LOCKBELLBELL WITH CANCELLATION STROKEBOOKMARKLINK SYMBOLRADIO BUTTONBAC" + - "K WITH LEFTWARDS ARROW ABOVEEND WITH LEFTWARDS ARROW ABOVEON WITH EXCLAM" + - "ATION MARK WITH LEFT RIGHT ARROW ABOVESOON WITH RIGHTWARDS ARROW ABOVETO" + - "P WITH UPWARDS ARROW ABOVENO ONE UNDER EIGHTEEN SYMBOLKEYCAP TENINPUT SY" + - "MBOL FOR LATIN CAPITAL LETTERSINPUT SYMBOL FOR LATIN SMALL LETTERSINPUT " + - "SYMBOL FOR NUMBERSINPUT SYMBOL FOR SYMBOLSINPUT SYMBOL FOR LATIN LETTERS" + - "FIREELECTRIC TORCHWRENCHHAMMERNUT AND BOLTHOCHOPISTOLMICROSCOPETELESCOPE" + - "CRYSTAL BALLSIX POINTED STAR WITH MIDDLE DOTJAPANESE SYMBOL FOR BEGINNER" + - "TRIDENT EMBLEMBLACK SQUARE BUTTONWHITE SQUARE BUTTONLARGE RED CIRCLELARG" + - "E BLUE CIRCLELARGE ORANGE DIAMONDLARGE BLUE DIAMONDSMALL ORANGE DIAMONDS" + - "MALL BLUE DIAMONDUP-POINTING RED TRIANGLEDOWN-POINTING RED TRIANGLEUP-PO" + - "INTING SMALL RED TRIANGLEDOWN-POINTING SMALL RED TRIANGLELOWER RIGHT SHA" + - "DOWED WHITE CIRCLEUPPER RIGHT SHADOWED WHITE CIRCLECIRCLED CROSS POMMEEC" + - "ROSS POMMEE WITH HALF-CIRCLE BELOWCROSS POMMEENOTCHED LEFT SEMICIRCLE WI") + ("" + - "TH THREE DOTSNOTCHED RIGHT SEMICIRCLE WITH THREE DOTSSYMBOL FOR MARKS CH" + - "APTERWHITE LATIN CROSSHEAVY LATIN CROSSCELTIC CROSSOM SYMBOLDOVE OF PEAC" + - "EKAABAMOSQUESYNAGOGUEMENORAH WITH NINE BRANCHESBOWL OF HYGIEIACLOCK FACE" + - " ONE OCLOCKCLOCK FACE TWO OCLOCKCLOCK FACE THREE OCLOCKCLOCK FACE FOUR O" + - "CLOCKCLOCK FACE FIVE OCLOCKCLOCK FACE SIX OCLOCKCLOCK FACE SEVEN OCLOCKC" + - "LOCK FACE EIGHT OCLOCKCLOCK FACE NINE OCLOCKCLOCK FACE TEN OCLOCKCLOCK F" + - "ACE ELEVEN OCLOCKCLOCK FACE TWELVE OCLOCKCLOCK FACE ONE-THIRTYCLOCK FACE" + - " TWO-THIRTYCLOCK FACE THREE-THIRTYCLOCK FACE FOUR-THIRTYCLOCK FACE FIVE-" + - "THIRTYCLOCK FACE SIX-THIRTYCLOCK FACE SEVEN-THIRTYCLOCK FACE EIGHT-THIRT" + - "YCLOCK FACE NINE-THIRTYCLOCK FACE TEN-THIRTYCLOCK FACE ELEVEN-THIRTYCLOC" + - "K FACE TWELVE-THIRTYRIGHT SPEAKERRIGHT SPEAKER WITH ONE SOUND WAVERIGHT " + - "SPEAKER WITH THREE SOUND WAVESBULLHORNBULLHORN WITH SOUND WAVESRINGING B" + - "ELLBOOKCANDLEMANTELPIECE CLOCKBLACK SKULL AND CROSSBONESNO PIRACYHOLEMAN" + - " IN BUSINESS SUIT LEVITATINGSLEUTH OR SPYDARK SUNGLASSESSPIDERSPIDER WEB" + - "JOYSTICKMAN DANCINGLEFT HAND TELEPHONE RECEIVERTELEPHONE RECEIVER WITH P" + - "AGERIGHT HAND TELEPHONE RECEIVERWHITE TOUCHTONE TELEPHONEBLACK TOUCHTONE" + - " TELEPHONETELEPHONE ON TOP OF MODEMCLAMSHELL MOBILE PHONEBACK OF ENVELOP" + - "ESTAMPED ENVELOPEENVELOPE WITH LIGHTNINGFLYING ENVELOPEPEN OVER STAMPED " + - "ENVELOPELINKED PAPERCLIPSBLACK PUSHPINLOWER LEFT PENCILLOWER LEFT BALLPO" + - "INT PENLOWER LEFT FOUNTAIN PENLOWER LEFT PAINTBRUSHLOWER LEFT CRAYONLEFT" + - " WRITING HANDTURNED OK HAND SIGNRAISED HAND WITH FINGERS SPLAYEDREVERSED" + - " RAISED HAND WITH FINGERS SPLAYEDREVERSED THUMBS UP SIGNREVERSED THUMBS " + - "DOWN SIGNREVERSED VICTORY HANDREVERSED HAND WITH MIDDLE FINGER EXTENDEDR" + - "AISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERSWHITE DOWN POINTING " + - "LEFT HAND INDEXSIDEWAYS WHITE LEFT POINTING INDEXSIDEWAYS WHITE RIGHT PO" + - "INTING INDEXSIDEWAYS BLACK LEFT POINTING INDEXSIDEWAYS BLACK RIGHT POINT" + - "ING INDEXBLACK LEFT POINTING BACKHAND INDEXBLACK RIGHT POINTING BACKHAND" + - " INDEXSIDEWAYS WHITE UP POINTING INDEXSIDEWAYS WHITE DOWN POINTING INDEX" + - "SIDEWAYS BLACK UP POINTING INDEXSIDEWAYS BLACK DOWN POINTING INDEXBLACK " + - "UP POINTING BACKHAND INDEXBLACK DOWN POINTING BACKHAND INDEXBLACK HEARTD" + - "ESKTOP COMPUTERKEYBOARD AND MOUSETHREE NETWORKED COMPUTERSPRINTERPOCKET " + - "CALCULATORBLACK HARD SHELL FLOPPY DISKWHITE HARD SHELL FLOPPY DISKSOFT S" + - "HELL FLOPPY DISKTAPE CARTRIDGEWIRED KEYBOARDONE BUTTON MOUSETWO BUTTON M" + - "OUSETHREE BUTTON MOUSETRACKBALLOLD PERSONAL COMPUTERHARD DISKSCREENPRINT" + - "ER ICONFAX ICONOPTICAL DISC ICONDOCUMENT WITH TEXTDOCUMENT WITH TEXT AND" + - " PICTUREDOCUMENT WITH PICTUREFRAME WITH PICTUREFRAME WITH TILESFRAME WIT" + - "H AN XBLACK FOLDERFOLDEROPEN FOLDERCARD INDEX DIVIDERSCARD FILE BOXFILE " + - "CABINETEMPTY NOTEEMPTY NOTE PAGEEMPTY NOTE PADNOTENOTE PAGENOTE PADEMPTY" + - " DOCUMENTEMPTY PAGEEMPTY PAGESDOCUMENTPAGEPAGESWASTEBASKETSPIRAL NOTE PA" + - "DSPIRAL CALENDAR PADDESKTOP WINDOWMINIMIZEMAXIMIZEOVERLAPCLOCKWISE RIGHT" + - " AND LEFT SEMICIRCLE ARROWSCANCELLATION XINCREASE FONT SIZE SYMBOLDECREA" + - "SE FONT SIZE SYMBOLCOMPRESSIONOLD KEYROLLED-UP NEWSPAPERPAGE WITH CIRCLE" + - "D TEXTSTOCK CHARTDAGGER KNIFELIPSSPEAKING HEAD IN SILHOUETTETHREE RAYS A" + - "BOVETHREE RAYS BELOWTHREE RAYS LEFTTHREE RAYS RIGHTLEFT SPEECH BUBBLERIG" + - "HT SPEECH BUBBLETWO SPEECH BUBBLESTHREE SPEECH BUBBLESLEFT THOUGHT BUBBL" + - "ERIGHT THOUGHT BUBBLELEFT ANGER BUBBLERIGHT ANGER BUBBLEMOOD BUBBLELIGHT" + - "NING MOOD BUBBLELIGHTNING MOODBALLOT BOX WITH BALLOTBALLOT SCRIPT XBALLO" + - "T BOX WITH SCRIPT XBALLOT BOLD SCRIPT XBALLOT BOX WITH BOLD SCRIPT XLIGH" + - "T CHECK MARKBALLOT BOX WITH BOLD CHECKWORLD MAPMOUNT FUJITOKYO TOWERSTAT" + - "UE OF LIBERTYSILHOUETTE OF JAPANMOYAIGRINNING FACEGRINNING FACE WITH SMI" + - "LING EYESFACE WITH TEARS OF JOYSMILING FACE WITH OPEN MOUTHSMILING FACE " + - "WITH OPEN MOUTH AND SMILING EYESSMILING FACE WITH OPEN MOUTH AND COLD SW" + - "EATSMILING FACE WITH OPEN MOUTH AND TIGHTLY-CLOSED EYESSMILING FACE WITH" + - " HALOSMILING FACE WITH HORNSWINKING FACESMILING FACE WITH SMILING EYESFA" + - "CE SAVOURING DELICIOUS FOODRELIEVED FACESMILING FACE WITH HEART-SHAPED E" + - "YESSMILING FACE WITH SUNGLASSESSMIRKING FACENEUTRAL FACEEXPRESSIONLESS F" + - "ACEUNAMUSED FACEFACE WITH COLD SWEATPENSIVE FACECONFUSED FACECONFOUNDED " + - "FACEKISSING FACEFACE THROWING A KISSKISSING FACE WITH SMILING EYESKISSIN" + - "G FACE WITH CLOSED EYESFACE WITH STUCK-OUT TONGUEFACE WITH STUCK-OUT TON" + - "GUE AND WINKING EYEFACE WITH STUCK-OUT TONGUE AND TIGHTLY-CLOSED EYESDIS" + - "APPOINTED FACEWORRIED FACEANGRY FACEPOUTING FACECRYING FACEPERSEVERING F" + - "ACEFACE WITH LOOK OF TRIUMPHDISAPPOINTED BUT RELIEVED FACEFROWNING FACE " + - "WITH OPEN MOUTHANGUISHED FACEFEARFUL FACEWEARY FACESLEEPY FACETIRED FACE" + - "GRIMACING FACELOUDLY CRYING FACEFACE WITH OPEN MOUTHHUSHED FACEFACE WITH") + ("" + - " OPEN MOUTH AND COLD SWEATFACE SCREAMING IN FEARASTONISHED FACEFLUSHED F" + - "ACESLEEPING FACEDIZZY FACEFACE WITHOUT MOUTHFACE WITH MEDICAL MASKGRINNI" + - "NG CAT FACE WITH SMILING EYESCAT FACE WITH TEARS OF JOYSMILING CAT FACE " + - "WITH OPEN MOUTHSMILING CAT FACE WITH HEART-SHAPED EYESCAT FACE WITH WRY " + - "SMILEKISSING CAT FACE WITH CLOSED EYESPOUTING CAT FACECRYING CAT FACEWEA" + - "RY CAT FACESLIGHTLY FROWNING FACESLIGHTLY SMILING FACEUPSIDE-DOWN FACEFA" + - "CE WITH ROLLING EYESFACE WITH NO GOOD GESTUREFACE WITH OK GESTUREPERSON " + - "BOWING DEEPLYSEE-NO-EVIL MONKEYHEAR-NO-EVIL MONKEYSPEAK-NO-EVIL MONKEYHA" + - "PPY PERSON RAISING ONE HANDPERSON RAISING BOTH HANDS IN CELEBRATIONPERSO" + - "N FROWNINGPERSON WITH POUTING FACEPERSON WITH FOLDED HANDSNORTH WEST POI" + - "NTING LEAFSOUTH WEST POINTING LEAFNORTH EAST POINTING LEAFSOUTH EAST POI" + - "NTING LEAFTURNED NORTH WEST POINTING LEAFTURNED SOUTH WEST POINTING LEAF" + - "TURNED NORTH EAST POINTING LEAFTURNED SOUTH EAST POINTING LEAFNORTH WEST" + - " POINTING VINE LEAFSOUTH WEST POINTING VINE LEAFNORTH EAST POINTING VINE" + - " LEAFSOUTH EAST POINTING VINE LEAFHEAVY NORTH WEST POINTING VINE LEAFHEA" + - "VY SOUTH WEST POINTING VINE LEAFHEAVY NORTH EAST POINTING VINE LEAFHEAVY" + - " SOUTH EAST POINTING VINE LEAFNORTH WEST POINTING BUDSOUTH WEST POINTING" + - " BUDNORTH EAST POINTING BUDSOUTH EAST POINTING BUDHEAVY NORTH WEST POINT" + - "ING BUDHEAVY SOUTH WEST POINTING BUDHEAVY NORTH EAST POINTING BUDHEAVY S" + - "OUTH EAST POINTING BUDHOLLOW QUILT SQUARE ORNAMENTHOLLOW QUILT SQUARE OR" + - "NAMENT IN BLACK SQUARESOLID QUILT SQUARE ORNAMENTSOLID QUILT SQUARE ORNA" + - "MENT IN BLACK SQUARELEFTWARDS ROCKETUPWARDS ROCKETRIGHTWARDS ROCKETDOWNW" + - "ARDS ROCKETSCRIPT LIGATURE ET ORNAMENTHEAVY SCRIPT LIGATURE ET ORNAMENTL" + - "IGATURE OPEN ET ORNAMENTHEAVY LIGATURE OPEN ET ORNAMENTHEAVY AMPERSAND O" + - "RNAMENTSWASH AMPERSAND ORNAMENTSANS-SERIF HEAVY DOUBLE TURNED COMMA QUOT" + - "ATION MARK ORNAMENTSANS-SERIF HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT" + - "SANS-SERIF HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENTHEAVY INTERROBA" + - "NG ORNAMENTSANS-SERIF INTERROBANG ORNAMENTHEAVY SANS-SERIF INTERROBANG O" + - "RNAMENTVERY HEAVY SOLIDUSVERY HEAVY REVERSE SOLIDUSCHECKER BOARDREVERSE " + - "CHECKER BOARDROCKETHELICOPTERSTEAM LOCOMOTIVERAILWAY CARHIGH-SPEED TRAIN" + - "HIGH-SPEED TRAIN WITH BULLET NOSETRAINMETROLIGHT RAILSTATIONTRAMTRAM CAR" + - "BUSONCOMING BUSTROLLEYBUSBUS STOPMINIBUSAMBULANCEFIRE ENGINEPOLICE CARON" + - "COMING POLICE CARTAXIONCOMING TAXIAUTOMOBILEONCOMING AUTOMOBILERECREATIO" + - "NAL VEHICLEDELIVERY TRUCKARTICULATED LORRYTRACTORMONORAILMOUNTAIN RAILWA" + - "YSUSPENSION RAILWAYMOUNTAIN CABLEWAYAERIAL TRAMWAYSHIPROWBOATSPEEDBOATHO" + - "RIZONTAL TRAFFIC LIGHTVERTICAL TRAFFIC LIGHTCONSTRUCTION SIGNPOLICE CARS" + - " REVOLVING LIGHTTRIANGULAR FLAG ON POSTDOORNO ENTRY SIGNSMOKING SYMBOLNO" + - " SMOKING SYMBOLPUT LITTER IN ITS PLACE SYMBOLDO NOT LITTER SYMBOLPOTABLE" + - " WATER SYMBOLNON-POTABLE WATER SYMBOLBICYCLENO BICYCLESBICYCLISTMOUNTAIN" + - " BICYCLISTPEDESTRIANNO PEDESTRIANSCHILDREN CROSSINGMENS SYMBOLWOMENS SYM" + - "BOLRESTROOMBABY SYMBOLTOILETWATER CLOSETSHOWERBATHBATHTUBPASSPORT CONTRO" + - "LCUSTOMSBAGGAGE CLAIMLEFT LUGGAGETRIANGLE WITH ROUNDED CORNERSPROHIBITED" + - " SIGNCIRCLED INFORMATION SOURCEBOYS SYMBOLGIRLS SYMBOLCOUCH AND LAMPSLEE" + - "PING ACCOMMODATIONSHOPPING BAGSBELLHOP BELLBEDPLACE OF WORSHIPOCTAGONAL " + - "SIGNSHOPPING TROLLEYHAMMER AND WRENCHSHIELDOIL DRUMMOTORWAYRAILWAY TRACK" + - "MOTOR BOATUP-POINTING MILITARY AIRPLANEUP-POINTING AIRPLANEUP-POINTING S" + - "MALL AIRPLANESMALL AIRPLANENORTHEAST-POINTING AIRPLANEAIRPLANE DEPARTURE" + - "AIRPLANE ARRIVINGSATELLITEONCOMING FIRE ENGINEDIESEL LOCOMOTIVEPASSENGER" + - " SHIPSCOOTERMOTOR SCOOTERCANOEALCHEMICAL SYMBOL FOR QUINTESSENCEALCHEMIC" + - "AL SYMBOL FOR AIRALCHEMICAL SYMBOL FOR FIREALCHEMICAL SYMBOL FOR EARTHAL" + - "CHEMICAL SYMBOL FOR WATERALCHEMICAL SYMBOL FOR AQUAFORTISALCHEMICAL SYMB" + - "OL FOR AQUA REGIAALCHEMICAL SYMBOL FOR AQUA REGIA-2ALCHEMICAL SYMBOL FOR" + - " AQUA VITAEALCHEMICAL SYMBOL FOR AQUA VITAE-2ALCHEMICAL SYMBOL FOR VINEG" + - "ARALCHEMICAL SYMBOL FOR VINEGAR-2ALCHEMICAL SYMBOL FOR VINEGAR-3ALCHEMIC" + - "AL SYMBOL FOR SULFURALCHEMICAL SYMBOL FOR PHILOSOPHERS SULFURALCHEMICAL " + - "SYMBOL FOR BLACK SULFURALCHEMICAL SYMBOL FOR MERCURY SUBLIMATEALCHEMICAL" + - " SYMBOL FOR MERCURY SUBLIMATE-2ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-3" + - "ALCHEMICAL SYMBOL FOR CINNABARALCHEMICAL SYMBOL FOR SALTALCHEMICAL SYMBO" + - "L FOR NITREALCHEMICAL SYMBOL FOR VITRIOLALCHEMICAL SYMBOL FOR VITRIOL-2A" + - "LCHEMICAL SYMBOL FOR ROCK SALTALCHEMICAL SYMBOL FOR ROCK SALT-2ALCHEMICA" + - "L SYMBOL FOR GOLDALCHEMICAL SYMBOL FOR SILVERALCHEMICAL SYMBOL FOR IRON " + - "OREALCHEMICAL SYMBOL FOR IRON ORE-2ALCHEMICAL SYMBOL FOR CROCUS OF IRONA" + - "LCHEMICAL SYMBOL FOR REGULUS OF IRONALCHEMICAL SYMBOL FOR COPPER OREALCH" + - "EMICAL SYMBOL FOR IRON-COPPER OREALCHEMICAL SYMBOL FOR SUBLIMATE OF COPP") + ("" + - "ERALCHEMICAL SYMBOL FOR CROCUS OF COPPERALCHEMICAL SYMBOL FOR CROCUS OF " + - "COPPER-2ALCHEMICAL SYMBOL FOR COPPER ANTIMONIATEALCHEMICAL SYMBOL FOR SA" + - "LT OF COPPER ANTIMONIATEALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF COPPE" + - "RALCHEMICAL SYMBOL FOR VERDIGRISALCHEMICAL SYMBOL FOR TIN OREALCHEMICAL " + - "SYMBOL FOR LEAD OREALCHEMICAL SYMBOL FOR ANTIMONY OREALCHEMICAL SYMBOL F" + - "OR SUBLIMATE OF ANTIMONYALCHEMICAL SYMBOL FOR SALT OF ANTIMONYALCHEMICAL" + - " SYMBOL FOR SUBLIMATE OF SALT OF ANTIMONYALCHEMICAL SYMBOL FOR VINEGAR O" + - "F ANTIMONYALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONYALCHEMICAL SYMBOL FOR" + - " REGULUS OF ANTIMONY-2ALCHEMICAL SYMBOL FOR REGULUSALCHEMICAL SYMBOL FOR" + - " REGULUS-2ALCHEMICAL SYMBOL FOR REGULUS-3ALCHEMICAL SYMBOL FOR REGULUS-4" + - "ALCHEMICAL SYMBOL FOR ALKALIALCHEMICAL SYMBOL FOR ALKALI-2ALCHEMICAL SYM" + - "BOL FOR MARCASITEALCHEMICAL SYMBOL FOR SAL-AMMONIACALCHEMICAL SYMBOL FOR" + - " ARSENICALCHEMICAL SYMBOL FOR REALGARALCHEMICAL SYMBOL FOR REALGAR-2ALCH" + - "EMICAL SYMBOL FOR AURIPIGMENTALCHEMICAL SYMBOL FOR BISMUTH OREALCHEMICAL" + - " SYMBOL FOR TARTARALCHEMICAL SYMBOL FOR TARTAR-2ALCHEMICAL SYMBOL FOR QU" + - "ICK LIMEALCHEMICAL SYMBOL FOR BORAXALCHEMICAL SYMBOL FOR BORAX-2ALCHEMIC" + - "AL SYMBOL FOR BORAX-3ALCHEMICAL SYMBOL FOR ALUMALCHEMICAL SYMBOL FOR OIL" + - "ALCHEMICAL SYMBOL FOR SPIRITALCHEMICAL SYMBOL FOR TINCTUREALCHEMICAL SYM" + - "BOL FOR GUMALCHEMICAL SYMBOL FOR WAXALCHEMICAL SYMBOL FOR POWDERALCHEMIC" + - "AL SYMBOL FOR CALXALCHEMICAL SYMBOL FOR TUTTYALCHEMICAL SYMBOL FOR CAPUT" + - " MORTUUMALCHEMICAL SYMBOL FOR SCEPTER OF JOVEALCHEMICAL SYMBOL FOR CADUC" + - "EUSALCHEMICAL SYMBOL FOR TRIDENTALCHEMICAL SYMBOL FOR STARRED TRIDENTALC" + - "HEMICAL SYMBOL FOR LODESTONEALCHEMICAL SYMBOL FOR SOAPALCHEMICAL SYMBOL " + - "FOR URINEALCHEMICAL SYMBOL FOR HORSE DUNGALCHEMICAL SYMBOL FOR ASHESALCH" + - "EMICAL SYMBOL FOR POT ASHESALCHEMICAL SYMBOL FOR BRICKALCHEMICAL SYMBOL " + - "FOR POWDERED BRICKALCHEMICAL SYMBOL FOR AMALGAMALCHEMICAL SYMBOL FOR STR" + - "ATUM SUPER STRATUMALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM-2ALCHEMICA" + - "L SYMBOL FOR SUBLIMATIONALCHEMICAL SYMBOL FOR PRECIPITATEALCHEMICAL SYMB" + - "OL FOR DISTILLALCHEMICAL SYMBOL FOR DISSOLVEALCHEMICAL SYMBOL FOR DISSOL" + - "VE-2ALCHEMICAL SYMBOL FOR PURIFYALCHEMICAL SYMBOL FOR PUTREFACTIONALCHEM" + - "ICAL SYMBOL FOR CRUCIBLEALCHEMICAL SYMBOL FOR CRUCIBLE-2ALCHEMICAL SYMBO" + - "L FOR CRUCIBLE-3ALCHEMICAL SYMBOL FOR CRUCIBLE-4ALCHEMICAL SYMBOL FOR CR" + - "UCIBLE-5ALCHEMICAL SYMBOL FOR ALEMBICALCHEMICAL SYMBOL FOR BATH OF MARYA" + - "LCHEMICAL SYMBOL FOR BATH OF VAPOURSALCHEMICAL SYMBOL FOR RETORTALCHEMIC" + - "AL SYMBOL FOR HOURALCHEMICAL SYMBOL FOR NIGHTALCHEMICAL SYMBOL FOR DAY-N" + - "IGHTALCHEMICAL SYMBOL FOR MONTHALCHEMICAL SYMBOL FOR HALF DRAMALCHEMICAL" + - " SYMBOL FOR HALF OUNCEBLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLEBLACK " + - "UP-POINTING ISOSCELES RIGHT TRIANGLEBLACK RIGHT-POINTING ISOSCELES RIGHT" + - " TRIANGLEBLACK DOWN-POINTING ISOSCELES RIGHT TRIANGLEBLACK SLIGHTLY SMAL" + - "L CIRCLEMEDIUM BOLD WHITE CIRCLEBOLD WHITE CIRCLEHEAVY WHITE CIRCLEVERY " + - "HEAVY WHITE CIRCLEEXTREMELY HEAVY WHITE CIRCLEWHITE CIRCLE CONTAINING BL" + - "ACK SMALL CIRCLEROUND TARGETBLACK TINY SQUAREBLACK SLIGHTLY SMALL SQUARE" + - "LIGHT WHITE SQUAREMEDIUM WHITE SQUAREBOLD WHITE SQUAREHEAVY WHITE SQUARE" + - "VERY HEAVY WHITE SQUAREEXTREMELY HEAVY WHITE SQUAREWHITE SQUARE CONTAINI" + - "NG BLACK VERY SMALL SQUAREWHITE SQUARE CONTAINING BLACK MEDIUM SQUARESQU" + - "ARE TARGETBLACK TINY DIAMONDBLACK VERY SMALL DIAMONDBLACK MEDIUM SMALL D" + - "IAMONDWHITE DIAMOND CONTAINING BLACK VERY SMALL DIAMONDWHITE DIAMOND CON" + - "TAINING BLACK MEDIUM DIAMONDDIAMOND TARGETBLACK TINY LOZENGEBLACK VERY S" + - "MALL LOZENGEBLACK MEDIUM SMALL LOZENGEWHITE LOZENGE CONTAINING BLACK SMA" + - "LL LOZENGETHIN GREEK CROSSLIGHT GREEK CROSSMEDIUM GREEK CROSSBOLD GREEK " + - "CROSSVERY BOLD GREEK CROSSVERY HEAVY GREEK CROSSEXTREMELY HEAVY GREEK CR" + - "OSSTHIN SALTIRELIGHT SALTIREMEDIUM SALTIREBOLD SALTIREHEAVY SALTIREVERY " + - "HEAVY SALTIREEXTREMELY HEAVY SALTIRELIGHT FIVE SPOKED ASTERISKMEDIUM FIV" + - "E SPOKED ASTERISKBOLD FIVE SPOKED ASTERISKHEAVY FIVE SPOKED ASTERISKVERY" + - " HEAVY FIVE SPOKED ASTERISKEXTREMELY HEAVY FIVE SPOKED ASTERISKLIGHT SIX" + - " SPOKED ASTERISKMEDIUM SIX SPOKED ASTERISKBOLD SIX SPOKED ASTERISKHEAVY " + - "SIX SPOKED ASTERISKVERY HEAVY SIX SPOKED ASTERISKEXTREMELY HEAVY SIX SPO" + - "KED ASTERISKLIGHT EIGHT SPOKED ASTERISKMEDIUM EIGHT SPOKED ASTERISKBOLD " + - "EIGHT SPOKED ASTERISKHEAVY EIGHT SPOKED ASTERISKVERY HEAVY EIGHT SPOKED " + - "ASTERISKLIGHT THREE POINTED BLACK STARMEDIUM THREE POINTED BLACK STARTHR" + - "EE POINTED BLACK STARMEDIUM THREE POINTED PINWHEEL STARLIGHT FOUR POINTE" + - "D BLACK STARMEDIUM FOUR POINTED BLACK STARFOUR POINTED BLACK STARMEDIUM " + - "FOUR POINTED PINWHEEL STARREVERSE LIGHT FOUR POINTED PINWHEEL STARLIGHT " + - "FIVE POINTED BLACK STARHEAVY FIVE POINTED BLACK STARMEDIUM SIX POINTED B") + ("" + - "LACK STARHEAVY SIX POINTED BLACK STARSIX POINTED PINWHEEL STARMEDIUM EIG" + - "HT POINTED BLACK STARHEAVY EIGHT POINTED BLACK STARVERY HEAVY EIGHT POIN" + - "TED BLACK STARHEAVY EIGHT POINTED PINWHEEL STARLIGHT TWELVE POINTED BLAC" + - "K STARHEAVY TWELVE POINTED BLACK STARHEAVY TWELVE POINTED PINWHEEL STARL" + - "EFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEADUPWARDS ARROW WITH SMALL TRI" + - "ANGLE ARROWHEADRIGHTWARDS ARROW WITH SMALL TRIANGLE ARROWHEADDOWNWARDS A" + - "RROW WITH SMALL TRIANGLE ARROWHEADLEFTWARDS ARROW WITH MEDIUM TRIANGLE A" + - "RROWHEADUPWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEADRIGHTWARDS ARROW WIT" + - "H MEDIUM TRIANGLE ARROWHEADDOWNWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEA" + - "DLEFTWARDS ARROW WITH LARGE TRIANGLE ARROWHEADUPWARDS ARROW WITH LARGE T" + - "RIANGLE ARROWHEADRIGHTWARDS ARROW WITH LARGE TRIANGLE ARROWHEADDOWNWARDS" + - " ARROW WITH LARGE TRIANGLE ARROWHEADLEFTWARDS ARROW WITH SMALL EQUILATER" + - "AL ARROWHEADUPWARDS ARROW WITH SMALL EQUILATERAL ARROWHEADRIGHTWARDS ARR" + - "OW WITH SMALL EQUILATERAL ARROWHEADDOWNWARDS ARROW WITH SMALL EQUILATERA" + - "L ARROWHEADLEFTWARDS ARROW WITH EQUILATERAL ARROWHEADUPWARDS ARROW WITH " + - "EQUILATERAL ARROWHEADRIGHTWARDS ARROW WITH EQUILATERAL ARROWHEADDOWNWARD" + - "S ARROW WITH EQUILATERAL ARROWHEADHEAVY LEFTWARDS ARROW WITH EQUILATERAL" + - " ARROWHEADHEAVY UPWARDS ARROW WITH EQUILATERAL ARROWHEADHEAVY RIGHTWARDS" + - " ARROW WITH EQUILATERAL ARROWHEADHEAVY DOWNWARDS ARROW WITH EQUILATERAL " + - "ARROWHEADHEAVY LEFTWARDS ARROW WITH LARGE EQUILATERAL ARROWHEADHEAVY UPW" + - "ARDS ARROW WITH LARGE EQUILATERAL ARROWHEADHEAVY RIGHTWARDS ARROW WITH L" + - "ARGE EQUILATERAL ARROWHEADHEAVY DOWNWARDS ARROW WITH LARGE EQUILATERAL A" + - "RROWHEADLEFTWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFTUPWARDS TRIANGL" + - "E-HEADED ARROW WITH NARROW SHAFTRIGHTWARDS TRIANGLE-HEADED ARROW WITH NA" + - "RROW SHAFTDOWNWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFTLEFTWARDS TRI" + - "ANGLE-HEADED ARROW WITH MEDIUM SHAFTUPWARDS TRIANGLE-HEADED ARROW WITH M" + - "EDIUM SHAFTRIGHTWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFTDOWNWARDS T" + - "RIANGLE-HEADED ARROW WITH MEDIUM SHAFTLEFTWARDS TRIANGLE-HEADED ARROW WI" + - "TH BOLD SHAFTUPWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFTRIGHTWARDS TRI" + - "ANGLE-HEADED ARROW WITH BOLD SHAFTDOWNWARDS TRIANGLE-HEADED ARROW WITH B" + - "OLD SHAFTLEFTWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFTUPWARDS TRIANGL" + - "E-HEADED ARROW WITH HEAVY SHAFTRIGHTWARDS TRIANGLE-HEADED ARROW WITH HEA" + - "VY SHAFTDOWNWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFTLEFTWARDS TRIANG" + - "LE-HEADED ARROW WITH VERY HEAVY SHAFTUPWARDS TRIANGLE-HEADED ARROW WITH " + - "VERY HEAVY SHAFTRIGHTWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFTDO" + - "WNWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFTLEFTWARDS FINGER-POST" + - " ARROWUPWARDS FINGER-POST ARROWRIGHTWARDS FINGER-POST ARROWDOWNWARDS FIN" + - "GER-POST ARROWLEFTWARDS SQUARED ARROWUPWARDS SQUARED ARROWRIGHTWARDS SQU" + - "ARED ARROWDOWNWARDS SQUARED ARROWLEFTWARDS COMPRESSED ARROWUPWARDS COMPR" + - "ESSED ARROWRIGHTWARDS COMPRESSED ARROWDOWNWARDS COMPRESSED ARROWLEFTWARD" + - "S HEAVY COMPRESSED ARROWUPWARDS HEAVY COMPRESSED ARROWRIGHTWARDS HEAVY C" + - "OMPRESSED ARROWDOWNWARDS HEAVY COMPRESSED ARROWLEFTWARDS HEAVY ARROWUPWA" + - "RDS HEAVY ARROWRIGHTWARDS HEAVY ARROWDOWNWARDS HEAVY ARROWLEFTWARDS SANS" + - "-SERIF ARROWUPWARDS SANS-SERIF ARROWRIGHTWARDS SANS-SERIF ARROWDOWNWARDS" + - " SANS-SERIF ARROWNORTH WEST SANS-SERIF ARROWNORTH EAST SANS-SERIF ARROWS" + - "OUTH EAST SANS-SERIF ARROWSOUTH WEST SANS-SERIF ARROWLEFT RIGHT SANS-SER" + - "IF ARROWUP DOWN SANS-SERIF ARROWWIDE-HEADED LEFTWARDS LIGHT BARB ARROWWI" + - "DE-HEADED UPWARDS LIGHT BARB ARROWWIDE-HEADED RIGHTWARDS LIGHT BARB ARRO" + - "WWIDE-HEADED DOWNWARDS LIGHT BARB ARROWWIDE-HEADED NORTH WEST LIGHT BARB" + - " ARROWWIDE-HEADED NORTH EAST LIGHT BARB ARROWWIDE-HEADED SOUTH EAST LIGH" + - "T BARB ARROWWIDE-HEADED SOUTH WEST LIGHT BARB ARROWWIDE-HEADED LEFTWARDS" + - " BARB ARROWWIDE-HEADED UPWARDS BARB ARROWWIDE-HEADED RIGHTWARDS BARB ARR" + - "OWWIDE-HEADED DOWNWARDS BARB ARROWWIDE-HEADED NORTH WEST BARB ARROWWIDE-" + - "HEADED NORTH EAST BARB ARROWWIDE-HEADED SOUTH EAST BARB ARROWWIDE-HEADED" + - " SOUTH WEST BARB ARROWWIDE-HEADED LEFTWARDS MEDIUM BARB ARROWWIDE-HEADED" + - " UPWARDS MEDIUM BARB ARROWWIDE-HEADED RIGHTWARDS MEDIUM BARB ARROWWIDE-H" + - "EADED DOWNWARDS MEDIUM BARB ARROWWIDE-HEADED NORTH WEST MEDIUM BARB ARRO" + - "WWIDE-HEADED NORTH EAST MEDIUM BARB ARROWWIDE-HEADED SOUTH EAST MEDIUM B" + - "ARB ARROWWIDE-HEADED SOUTH WEST MEDIUM BARB ARROWWIDE-HEADED LEFTWARDS H" + - "EAVY BARB ARROWWIDE-HEADED UPWARDS HEAVY BARB ARROWWIDE-HEADED RIGHTWARD" + - "S HEAVY BARB ARROWWIDE-HEADED DOWNWARDS HEAVY BARB ARROWWIDE-HEADED NORT" + - "H WEST HEAVY BARB ARROWWIDE-HEADED NORTH EAST HEAVY BARB ARROWWIDE-HEADE" + - "D SOUTH EAST HEAVY BARB ARROWWIDE-HEADED SOUTH WEST HEAVY BARB ARROWWIDE" + - "-HEADED LEFTWARDS VERY HEAVY BARB ARROWWIDE-HEADED UPWARDS VERY HEAVY BA") + ("" + - "RB ARROWWIDE-HEADED RIGHTWARDS VERY HEAVY BARB ARROWWIDE-HEADED DOWNWARD" + - "S VERY HEAVY BARB ARROWWIDE-HEADED NORTH WEST VERY HEAVY BARB ARROWWIDE-" + - "HEADED NORTH EAST VERY HEAVY BARB ARROWWIDE-HEADED SOUTH EAST VERY HEAVY" + - " BARB ARROWWIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROWLEFTWARDS TRIANGL" + - "E ARROWHEADUPWARDS TRIANGLE ARROWHEADRIGHTWARDS TRIANGLE ARROWHEADDOWNWA" + - "RDS TRIANGLE ARROWHEADLEFTWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEADUPW" + - "ARDS WHITE ARROW WITHIN TRIANGLE ARROWHEADRIGHTWARDS WHITE ARROW WITHIN " + - "TRIANGLE ARROWHEADDOWNWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEADLEFTWAR" + - "DS ARROW WITH NOTCHED TAILUPWARDS ARROW WITH NOTCHED TAILRIGHTWARDS ARRO" + - "W WITH NOTCHED TAILDOWNWARDS ARROW WITH NOTCHED TAILHEAVY ARROW SHAFT WI" + - "DTH ONEHEAVY ARROW SHAFT WIDTH TWO THIRDSHEAVY ARROW SHAFT WIDTH ONE HAL" + - "FHEAVY ARROW SHAFT WIDTH ONE THIRDLEFTWARDS BOTTOM-SHADED WHITE ARROWRIG" + - "HTWARDS BOTTOM SHADED WHITE ARROWLEFTWARDS TOP SHADED WHITE ARROWRIGHTWA" + - "RDS TOP SHADED WHITE ARROWLEFTWARDS LEFT-SHADED WHITE ARROWRIGHTWARDS RI" + - "GHT-SHADED WHITE ARROWLEFTWARDS RIGHT-SHADED WHITE ARROWRIGHTWARDS LEFT-" + - "SHADED WHITE ARROWLEFTWARDS BACK-TILTED SHADOWED WHITE ARROWRIGHTWARDS B" + - "ACK-TILTED SHADOWED WHITE ARROWLEFTWARDS FRONT-TILTED SHADOWED WHITE ARR" + - "OWRIGHTWARDS FRONT-TILTED SHADOWED WHITE ARROWWHITE ARROW SHAFT WIDTH ON" + - "EWHITE ARROW SHAFT WIDTH TWO THIRDSZIPPER-MOUTH FACEMONEY-MOUTH FACEFACE" + - " WITH THERMOMETERNERD FACETHINKING FACEFACE WITH HEAD-BANDAGEROBOT FACEH" + - "UGGING FACESIGN OF THE HORNSCALL ME HANDRAISED BACK OF HANDLEFT-FACING F" + - "ISTRIGHT-FACING FISTHANDSHAKEHAND WITH INDEX AND MIDDLE FINGERS CROSSEDF" + - "ACE WITH COWBOY HATCLOWN FACENAUSEATED FACEROLLING ON THE FLOOR LAUGHING" + - "DROOLING FACELYING FACEFACE PALMSNEEZING FACEPREGNANT WOMANSELFIEPRINCEM" + - "AN IN TUXEDOMOTHER CHRISTMASSHRUGPERSON DOING CARTWHEELJUGGLINGFENCERMOD" + - "ERN PENTATHLONWRESTLERSWATER POLOHANDBALLWILTED FLOWERDRUM WITH DRUMSTIC" + - "KSCLINKING GLASSESTUMBLER GLASSSPOONGOAL NETRIFLEFIRST PLACE MEDALSECOND" + - " PLACE MEDALTHIRD PLACE MEDALBOXING GLOVEMARTIAL ARTS UNIFORMCROISSANTAV" + - "OCADOCUCUMBERBACONPOTATOCARROTBAGUETTE BREADGREEN SALADSHALLOW PAN OF FO" + - "ODSTUFFED FLATBREADEGGGLASS OF MILKPEANUTSKIWIFRUITPANCAKESCRABLION FACE" + - "SCORPIONTURKEYUNICORN FACEEAGLEDUCKBATSHARKOWLFOX FACEBUTTERFLYDEERGORIL" + - "LALIZARDRHINOCEROSSHRIMPSQUIDCHEESE WEDGECJK COMPATIBILITY IDEOGRAPH-2F8" + - "00CJK COMPATIBILITY IDEOGRAPH-2F801CJK COMPATIBILITY IDEOGRAPH-2F802CJK " + - "COMPATIBILITY IDEOGRAPH-2F803CJK COMPATIBILITY IDEOGRAPH-2F804CJK COMPAT" + - "IBILITY IDEOGRAPH-2F805CJK COMPATIBILITY IDEOGRAPH-2F806CJK COMPATIBILIT" + - "Y IDEOGRAPH-2F807CJK COMPATIBILITY IDEOGRAPH-2F808CJK COMPATIBILITY IDEO" + - "GRAPH-2F809CJK COMPATIBILITY IDEOGRAPH-2F80ACJK COMPATIBILITY IDEOGRAPH-" + - "2F80BCJK COMPATIBILITY IDEOGRAPH-2F80CCJK COMPATIBILITY IDEOGRAPH-2F80DC" + - "JK COMPATIBILITY IDEOGRAPH-2F80ECJK COMPATIBILITY IDEOGRAPH-2F80FCJK COM" + - "PATIBILITY IDEOGRAPH-2F810CJK COMPATIBILITY IDEOGRAPH-2F811CJK COMPATIBI" + - "LITY IDEOGRAPH-2F812CJK COMPATIBILITY IDEOGRAPH-2F813CJK COMPATIBILITY I" + - "DEOGRAPH-2F814CJK COMPATIBILITY IDEOGRAPH-2F815CJK COMPATIBILITY IDEOGRA" + - "PH-2F816CJK COMPATIBILITY IDEOGRAPH-2F817CJK COMPATIBILITY IDEOGRAPH-2F8" + - "18CJK COMPATIBILITY IDEOGRAPH-2F819CJK COMPATIBILITY IDEOGRAPH-2F81ACJK " + - "COMPATIBILITY IDEOGRAPH-2F81BCJK COMPATIBILITY IDEOGRAPH-2F81CCJK COMPAT" + - "IBILITY IDEOGRAPH-2F81DCJK COMPATIBILITY IDEOGRAPH-2F81ECJK COMPATIBILIT" + - "Y IDEOGRAPH-2F81FCJK COMPATIBILITY IDEOGRAPH-2F820CJK COMPATIBILITY IDEO" + - "GRAPH-2F821CJK COMPATIBILITY IDEOGRAPH-2F822CJK COMPATIBILITY IDEOGRAPH-" + - "2F823CJK COMPATIBILITY IDEOGRAPH-2F824CJK COMPATIBILITY IDEOGRAPH-2F825C" + - "JK COMPATIBILITY IDEOGRAPH-2F826CJK COMPATIBILITY IDEOGRAPH-2F827CJK COM" + - "PATIBILITY IDEOGRAPH-2F828CJK COMPATIBILITY IDEOGRAPH-2F829CJK COMPATIBI" + - "LITY IDEOGRAPH-2F82ACJK COMPATIBILITY IDEOGRAPH-2F82BCJK COMPATIBILITY I" + - "DEOGRAPH-2F82CCJK COMPATIBILITY IDEOGRAPH-2F82DCJK COMPATIBILITY IDEOGRA" + - "PH-2F82ECJK COMPATIBILITY IDEOGRAPH-2F82FCJK COMPATIBILITY IDEOGRAPH-2F8" + - "30CJK COMPATIBILITY IDEOGRAPH-2F831CJK COMPATIBILITY IDEOGRAPH-2F832CJK " + - "COMPATIBILITY IDEOGRAPH-2F833CJK COMPATIBILITY IDEOGRAPH-2F834CJK COMPAT" + - "IBILITY IDEOGRAPH-2F835CJK COMPATIBILITY IDEOGRAPH-2F836CJK COMPATIBILIT" + - "Y IDEOGRAPH-2F837CJK COMPATIBILITY IDEOGRAPH-2F838CJK COMPATIBILITY IDEO" + - "GRAPH-2F839CJK COMPATIBILITY IDEOGRAPH-2F83ACJK COMPATIBILITY IDEOGRAPH-" + - "2F83BCJK COMPATIBILITY IDEOGRAPH-2F83CCJK COMPATIBILITY IDEOGRAPH-2F83DC" + - "JK COMPATIBILITY IDEOGRAPH-2F83ECJK COMPATIBILITY IDEOGRAPH-2F83FCJK COM" + - "PATIBILITY IDEOGRAPH-2F840CJK COMPATIBILITY IDEOGRAPH-2F841CJK COMPATIBI" + - "LITY IDEOGRAPH-2F842CJK COMPATIBILITY IDEOGRAPH-2F843CJK COMPATIBILITY I" + - "DEOGRAPH-2F844CJK COMPATIBILITY IDEOGRAPH-2F845CJK COMPATIBILITY IDEOGRA") + ("" + - "PH-2F846CJK COMPATIBILITY IDEOGRAPH-2F847CJK COMPATIBILITY IDEOGRAPH-2F8" + - "48CJK COMPATIBILITY IDEOGRAPH-2F849CJK COMPATIBILITY IDEOGRAPH-2F84ACJK " + - "COMPATIBILITY IDEOGRAPH-2F84BCJK COMPATIBILITY IDEOGRAPH-2F84CCJK COMPAT" + - "IBILITY IDEOGRAPH-2F84DCJK COMPATIBILITY IDEOGRAPH-2F84ECJK COMPATIBILIT" + - "Y IDEOGRAPH-2F84FCJK COMPATIBILITY IDEOGRAPH-2F850CJK COMPATIBILITY IDEO" + - "GRAPH-2F851CJK COMPATIBILITY IDEOGRAPH-2F852CJK COMPATIBILITY IDEOGRAPH-" + - "2F853CJK COMPATIBILITY IDEOGRAPH-2F854CJK COMPATIBILITY IDEOGRAPH-2F855C" + - "JK COMPATIBILITY IDEOGRAPH-2F856CJK COMPATIBILITY IDEOGRAPH-2F857CJK COM" + - "PATIBILITY IDEOGRAPH-2F858CJK COMPATIBILITY IDEOGRAPH-2F859CJK COMPATIBI" + - "LITY IDEOGRAPH-2F85ACJK COMPATIBILITY IDEOGRAPH-2F85BCJK COMPATIBILITY I" + - "DEOGRAPH-2F85CCJK COMPATIBILITY IDEOGRAPH-2F85DCJK COMPATIBILITY IDEOGRA" + - "PH-2F85ECJK COMPATIBILITY IDEOGRAPH-2F85FCJK COMPATIBILITY IDEOGRAPH-2F8" + - "60CJK COMPATIBILITY IDEOGRAPH-2F861CJK COMPATIBILITY IDEOGRAPH-2F862CJK " + - "COMPATIBILITY IDEOGRAPH-2F863CJK COMPATIBILITY IDEOGRAPH-2F864CJK COMPAT" + - "IBILITY IDEOGRAPH-2F865CJK COMPATIBILITY IDEOGRAPH-2F866CJK COMPATIBILIT" + - "Y IDEOGRAPH-2F867CJK COMPATIBILITY IDEOGRAPH-2F868CJK COMPATIBILITY IDEO" + - "GRAPH-2F869CJK COMPATIBILITY IDEOGRAPH-2F86ACJK COMPATIBILITY IDEOGRAPH-" + - "2F86BCJK COMPATIBILITY IDEOGRAPH-2F86CCJK COMPATIBILITY IDEOGRAPH-2F86DC" + - "JK COMPATIBILITY IDEOGRAPH-2F86ECJK COMPATIBILITY IDEOGRAPH-2F86FCJK COM" + - "PATIBILITY IDEOGRAPH-2F870CJK COMPATIBILITY IDEOGRAPH-2F871CJK COMPATIBI" + - "LITY IDEOGRAPH-2F872CJK COMPATIBILITY IDEOGRAPH-2F873CJK COMPATIBILITY I" + - "DEOGRAPH-2F874CJK COMPATIBILITY IDEOGRAPH-2F875CJK COMPATIBILITY IDEOGRA" + - "PH-2F876CJK COMPATIBILITY IDEOGRAPH-2F877CJK COMPATIBILITY IDEOGRAPH-2F8" + - "78CJK COMPATIBILITY IDEOGRAPH-2F879CJK COMPATIBILITY IDEOGRAPH-2F87ACJK " + - "COMPATIBILITY IDEOGRAPH-2F87BCJK COMPATIBILITY IDEOGRAPH-2F87CCJK COMPAT" + - "IBILITY IDEOGRAPH-2F87DCJK COMPATIBILITY IDEOGRAPH-2F87ECJK COMPATIBILIT" + - "Y IDEOGRAPH-2F87FCJK COMPATIBILITY IDEOGRAPH-2F880CJK COMPATIBILITY IDEO" + - "GRAPH-2F881CJK COMPATIBILITY IDEOGRAPH-2F882CJK COMPATIBILITY IDEOGRAPH-" + - "2F883CJK COMPATIBILITY IDEOGRAPH-2F884CJK COMPATIBILITY IDEOGRAPH-2F885C" + - "JK COMPATIBILITY IDEOGRAPH-2F886CJK COMPATIBILITY IDEOGRAPH-2F887CJK COM" + - "PATIBILITY IDEOGRAPH-2F888CJK COMPATIBILITY IDEOGRAPH-2F889CJK COMPATIBI" + - "LITY IDEOGRAPH-2F88ACJK COMPATIBILITY IDEOGRAPH-2F88BCJK COMPATIBILITY I" + - "DEOGRAPH-2F88CCJK COMPATIBILITY IDEOGRAPH-2F88DCJK COMPATIBILITY IDEOGRA" + - "PH-2F88ECJK COMPATIBILITY IDEOGRAPH-2F88FCJK COMPATIBILITY IDEOGRAPH-2F8" + - "90CJK COMPATIBILITY IDEOGRAPH-2F891CJK COMPATIBILITY IDEOGRAPH-2F892CJK " + - "COMPATIBILITY IDEOGRAPH-2F893CJK COMPATIBILITY IDEOGRAPH-2F894CJK COMPAT" + - "IBILITY IDEOGRAPH-2F895CJK COMPATIBILITY IDEOGRAPH-2F896CJK COMPATIBILIT" + - "Y IDEOGRAPH-2F897CJK COMPATIBILITY IDEOGRAPH-2F898CJK COMPATIBILITY IDEO" + - "GRAPH-2F899CJK COMPATIBILITY IDEOGRAPH-2F89ACJK COMPATIBILITY IDEOGRAPH-" + - "2F89BCJK COMPATIBILITY IDEOGRAPH-2F89CCJK COMPATIBILITY IDEOGRAPH-2F89DC" + - "JK COMPATIBILITY IDEOGRAPH-2F89ECJK COMPATIBILITY IDEOGRAPH-2F89FCJK COM" + - "PATIBILITY IDEOGRAPH-2F8A0CJK COMPATIBILITY IDEOGRAPH-2F8A1CJK COMPATIBI" + - "LITY IDEOGRAPH-2F8A2CJK COMPATIBILITY IDEOGRAPH-2F8A3CJK COMPATIBILITY I" + - "DEOGRAPH-2F8A4CJK COMPATIBILITY IDEOGRAPH-2F8A5CJK COMPATIBILITY IDEOGRA" + - "PH-2F8A6CJK COMPATIBILITY IDEOGRAPH-2F8A7CJK COMPATIBILITY IDEOGRAPH-2F8" + - "A8CJK COMPATIBILITY IDEOGRAPH-2F8A9CJK COMPATIBILITY IDEOGRAPH-2F8AACJK " + - "COMPATIBILITY IDEOGRAPH-2F8ABCJK COMPATIBILITY IDEOGRAPH-2F8ACCJK COMPAT" + - "IBILITY IDEOGRAPH-2F8ADCJK COMPATIBILITY IDEOGRAPH-2F8AECJK COMPATIBILIT" + - "Y IDEOGRAPH-2F8AFCJK COMPATIBILITY IDEOGRAPH-2F8B0CJK COMPATIBILITY IDEO" + - "GRAPH-2F8B1CJK COMPATIBILITY IDEOGRAPH-2F8B2CJK COMPATIBILITY IDEOGRAPH-" + - "2F8B3CJK COMPATIBILITY IDEOGRAPH-2F8B4CJK COMPATIBILITY IDEOGRAPH-2F8B5C" + - "JK COMPATIBILITY IDEOGRAPH-2F8B6CJK COMPATIBILITY IDEOGRAPH-2F8B7CJK COM" + - "PATIBILITY IDEOGRAPH-2F8B8CJK COMPATIBILITY IDEOGRAPH-2F8B9CJK COMPATIBI" + - "LITY IDEOGRAPH-2F8BACJK COMPATIBILITY IDEOGRAPH-2F8BBCJK COMPATIBILITY I" + - "DEOGRAPH-2F8BCCJK COMPATIBILITY IDEOGRAPH-2F8BDCJK COMPATIBILITY IDEOGRA" + - "PH-2F8BECJK COMPATIBILITY IDEOGRAPH-2F8BFCJK COMPATIBILITY IDEOGRAPH-2F8" + - "C0CJK COMPATIBILITY IDEOGRAPH-2F8C1CJK COMPATIBILITY IDEOGRAPH-2F8C2CJK " + - "COMPATIBILITY IDEOGRAPH-2F8C3CJK COMPATIBILITY IDEOGRAPH-2F8C4CJK COMPAT" + - "IBILITY IDEOGRAPH-2F8C5CJK COMPATIBILITY IDEOGRAPH-2F8C6CJK COMPATIBILIT" + - "Y IDEOGRAPH-2F8C7CJK COMPATIBILITY IDEOGRAPH-2F8C8CJK COMPATIBILITY IDEO" + - "GRAPH-2F8C9CJK COMPATIBILITY IDEOGRAPH-2F8CACJK COMPATIBILITY IDEOGRAPH-" + - "2F8CBCJK COMPATIBILITY IDEOGRAPH-2F8CCCJK COMPATIBILITY IDEOGRAPH-2F8CDC" + - "JK COMPATIBILITY IDEOGRAPH-2F8CECJK COMPATIBILITY IDEOGRAPH-2F8CFCJK COM" + - "PATIBILITY IDEOGRAPH-2F8D0CJK COMPATIBILITY IDEOGRAPH-2F8D1CJK COMPATIBI") + ("" + - "LITY IDEOGRAPH-2F8D2CJK COMPATIBILITY IDEOGRAPH-2F8D3CJK COMPATIBILITY I" + - "DEOGRAPH-2F8D4CJK COMPATIBILITY IDEOGRAPH-2F8D5CJK COMPATIBILITY IDEOGRA" + - "PH-2F8D6CJK COMPATIBILITY IDEOGRAPH-2F8D7CJK COMPATIBILITY IDEOGRAPH-2F8" + - "D8CJK COMPATIBILITY IDEOGRAPH-2F8D9CJK COMPATIBILITY IDEOGRAPH-2F8DACJK " + - "COMPATIBILITY IDEOGRAPH-2F8DBCJK COMPATIBILITY IDEOGRAPH-2F8DCCJK COMPAT" + - "IBILITY IDEOGRAPH-2F8DDCJK COMPATIBILITY IDEOGRAPH-2F8DECJK COMPATIBILIT" + - "Y IDEOGRAPH-2F8DFCJK COMPATIBILITY IDEOGRAPH-2F8E0CJK COMPATIBILITY IDEO" + - "GRAPH-2F8E1CJK COMPATIBILITY IDEOGRAPH-2F8E2CJK COMPATIBILITY IDEOGRAPH-" + - "2F8E3CJK COMPATIBILITY IDEOGRAPH-2F8E4CJK COMPATIBILITY IDEOGRAPH-2F8E5C" + - "JK COMPATIBILITY IDEOGRAPH-2F8E6CJK COMPATIBILITY IDEOGRAPH-2F8E7CJK COM" + - "PATIBILITY IDEOGRAPH-2F8E8CJK COMPATIBILITY IDEOGRAPH-2F8E9CJK COMPATIBI" + - "LITY IDEOGRAPH-2F8EACJK COMPATIBILITY IDEOGRAPH-2F8EBCJK COMPATIBILITY I" + - "DEOGRAPH-2F8ECCJK COMPATIBILITY IDEOGRAPH-2F8EDCJK COMPATIBILITY IDEOGRA" + - "PH-2F8EECJK COMPATIBILITY IDEOGRAPH-2F8EFCJK COMPATIBILITY IDEOGRAPH-2F8" + - "F0CJK COMPATIBILITY IDEOGRAPH-2F8F1CJK COMPATIBILITY IDEOGRAPH-2F8F2CJK " + - "COMPATIBILITY IDEOGRAPH-2F8F3CJK COMPATIBILITY IDEOGRAPH-2F8F4CJK COMPAT" + - "IBILITY IDEOGRAPH-2F8F5CJK COMPATIBILITY IDEOGRAPH-2F8F6CJK COMPATIBILIT" + - "Y IDEOGRAPH-2F8F7CJK COMPATIBILITY IDEOGRAPH-2F8F8CJK COMPATIBILITY IDEO" + - "GRAPH-2F8F9CJK COMPATIBILITY IDEOGRAPH-2F8FACJK COMPATIBILITY IDEOGRAPH-" + - "2F8FBCJK COMPATIBILITY IDEOGRAPH-2F8FCCJK COMPATIBILITY IDEOGRAPH-2F8FDC" + - "JK COMPATIBILITY IDEOGRAPH-2F8FECJK COMPATIBILITY IDEOGRAPH-2F8FFCJK COM" + - "PATIBILITY IDEOGRAPH-2F900CJK COMPATIBILITY IDEOGRAPH-2F901CJK COMPATIBI" + - "LITY IDEOGRAPH-2F902CJK COMPATIBILITY IDEOGRAPH-2F903CJK COMPATIBILITY I" + - "DEOGRAPH-2F904CJK COMPATIBILITY IDEOGRAPH-2F905CJK COMPATIBILITY IDEOGRA" + - "PH-2F906CJK COMPATIBILITY IDEOGRAPH-2F907CJK COMPATIBILITY IDEOGRAPH-2F9" + - "08CJK COMPATIBILITY IDEOGRAPH-2F909CJK COMPATIBILITY IDEOGRAPH-2F90ACJK " + - "COMPATIBILITY IDEOGRAPH-2F90BCJK COMPATIBILITY IDEOGRAPH-2F90CCJK COMPAT" + - "IBILITY IDEOGRAPH-2F90DCJK COMPATIBILITY IDEOGRAPH-2F90ECJK COMPATIBILIT" + - "Y IDEOGRAPH-2F90FCJK COMPATIBILITY IDEOGRAPH-2F910CJK COMPATIBILITY IDEO" + - "GRAPH-2F911CJK COMPATIBILITY IDEOGRAPH-2F912CJK COMPATIBILITY IDEOGRAPH-" + - "2F913CJK COMPATIBILITY IDEOGRAPH-2F914CJK COMPATIBILITY IDEOGRAPH-2F915C" + - "JK COMPATIBILITY IDEOGRAPH-2F916CJK COMPATIBILITY IDEOGRAPH-2F917CJK COM" + - "PATIBILITY IDEOGRAPH-2F918CJK COMPATIBILITY IDEOGRAPH-2F919CJK COMPATIBI" + - "LITY IDEOGRAPH-2F91ACJK COMPATIBILITY IDEOGRAPH-2F91BCJK COMPATIBILITY I" + - "DEOGRAPH-2F91CCJK COMPATIBILITY IDEOGRAPH-2F91DCJK COMPATIBILITY IDEOGRA" + - "PH-2F91ECJK COMPATIBILITY IDEOGRAPH-2F91FCJK COMPATIBILITY IDEOGRAPH-2F9" + - "20CJK COMPATIBILITY IDEOGRAPH-2F921CJK COMPATIBILITY IDEOGRAPH-2F922CJK " + - "COMPATIBILITY IDEOGRAPH-2F923CJK COMPATIBILITY IDEOGRAPH-2F924CJK COMPAT" + - "IBILITY IDEOGRAPH-2F925CJK COMPATIBILITY IDEOGRAPH-2F926CJK COMPATIBILIT" + - "Y IDEOGRAPH-2F927CJK COMPATIBILITY IDEOGRAPH-2F928CJK COMPATIBILITY IDEO" + - "GRAPH-2F929CJK COMPATIBILITY IDEOGRAPH-2F92ACJK COMPATIBILITY IDEOGRAPH-" + - "2F92BCJK COMPATIBILITY IDEOGRAPH-2F92CCJK COMPATIBILITY IDEOGRAPH-2F92DC" + - "JK COMPATIBILITY IDEOGRAPH-2F92ECJK COMPATIBILITY IDEOGRAPH-2F92FCJK COM" + - "PATIBILITY IDEOGRAPH-2F930CJK COMPATIBILITY IDEOGRAPH-2F931CJK COMPATIBI" + - "LITY IDEOGRAPH-2F932CJK COMPATIBILITY IDEOGRAPH-2F933CJK COMPATIBILITY I" + - "DEOGRAPH-2F934CJK COMPATIBILITY IDEOGRAPH-2F935CJK COMPATIBILITY IDEOGRA" + - "PH-2F936CJK COMPATIBILITY IDEOGRAPH-2F937CJK COMPATIBILITY IDEOGRAPH-2F9" + - "38CJK COMPATIBILITY IDEOGRAPH-2F939CJK COMPATIBILITY IDEOGRAPH-2F93ACJK " + - "COMPATIBILITY IDEOGRAPH-2F93BCJK COMPATIBILITY IDEOGRAPH-2F93CCJK COMPAT" + - "IBILITY IDEOGRAPH-2F93DCJK COMPATIBILITY IDEOGRAPH-2F93ECJK COMPATIBILIT" + - "Y IDEOGRAPH-2F93FCJK COMPATIBILITY IDEOGRAPH-2F940CJK COMPATIBILITY IDEO" + - "GRAPH-2F941CJK COMPATIBILITY IDEOGRAPH-2F942CJK COMPATIBILITY IDEOGRAPH-" + - "2F943CJK COMPATIBILITY IDEOGRAPH-2F944CJK COMPATIBILITY IDEOGRAPH-2F945C" + - "JK COMPATIBILITY IDEOGRAPH-2F946CJK COMPATIBILITY IDEOGRAPH-2F947CJK COM" + - "PATIBILITY IDEOGRAPH-2F948CJK COMPATIBILITY IDEOGRAPH-2F949CJK COMPATIBI" + - "LITY IDEOGRAPH-2F94ACJK COMPATIBILITY IDEOGRAPH-2F94BCJK COMPATIBILITY I" + - "DEOGRAPH-2F94CCJK COMPATIBILITY IDEOGRAPH-2F94DCJK COMPATIBILITY IDEOGRA" + - "PH-2F94ECJK COMPATIBILITY IDEOGRAPH-2F94FCJK COMPATIBILITY IDEOGRAPH-2F9" + - "50CJK COMPATIBILITY IDEOGRAPH-2F951CJK COMPATIBILITY IDEOGRAPH-2F952CJK " + - "COMPATIBILITY IDEOGRAPH-2F953CJK COMPATIBILITY IDEOGRAPH-2F954CJK COMPAT" + - "IBILITY IDEOGRAPH-2F955CJK COMPATIBILITY IDEOGRAPH-2F956CJK COMPATIBILIT" + - "Y IDEOGRAPH-2F957CJK COMPATIBILITY IDEOGRAPH-2F958CJK COMPATIBILITY IDEO" + - "GRAPH-2F959CJK COMPATIBILITY IDEOGRAPH-2F95ACJK COMPATIBILITY IDEOGRAPH-" + - "2F95BCJK COMPATIBILITY IDEOGRAPH-2F95CCJK COMPATIBILITY IDEOGRAPH-2F95DC") + ("" + - "JK COMPATIBILITY IDEOGRAPH-2F95ECJK COMPATIBILITY IDEOGRAPH-2F95FCJK COM" + - "PATIBILITY IDEOGRAPH-2F960CJK COMPATIBILITY IDEOGRAPH-2F961CJK COMPATIBI" + - "LITY IDEOGRAPH-2F962CJK COMPATIBILITY IDEOGRAPH-2F963CJK COMPATIBILITY I" + - "DEOGRAPH-2F964CJK COMPATIBILITY IDEOGRAPH-2F965CJK COMPATIBILITY IDEOGRA" + - "PH-2F966CJK COMPATIBILITY IDEOGRAPH-2F967CJK COMPATIBILITY IDEOGRAPH-2F9" + - "68CJK COMPATIBILITY IDEOGRAPH-2F969CJK COMPATIBILITY IDEOGRAPH-2F96ACJK " + - "COMPATIBILITY IDEOGRAPH-2F96BCJK COMPATIBILITY IDEOGRAPH-2F96CCJK COMPAT" + - "IBILITY IDEOGRAPH-2F96DCJK COMPATIBILITY IDEOGRAPH-2F96ECJK COMPATIBILIT" + - "Y IDEOGRAPH-2F96FCJK COMPATIBILITY IDEOGRAPH-2F970CJK COMPATIBILITY IDEO" + - "GRAPH-2F971CJK COMPATIBILITY IDEOGRAPH-2F972CJK COMPATIBILITY IDEOGRAPH-" + - "2F973CJK COMPATIBILITY IDEOGRAPH-2F974CJK COMPATIBILITY IDEOGRAPH-2F975C" + - "JK COMPATIBILITY IDEOGRAPH-2F976CJK COMPATIBILITY IDEOGRAPH-2F977CJK COM" + - "PATIBILITY IDEOGRAPH-2F978CJK COMPATIBILITY IDEOGRAPH-2F979CJK COMPATIBI" + - "LITY IDEOGRAPH-2F97ACJK COMPATIBILITY IDEOGRAPH-2F97BCJK COMPATIBILITY I" + - "DEOGRAPH-2F97CCJK COMPATIBILITY IDEOGRAPH-2F97DCJK COMPATIBILITY IDEOGRA" + - "PH-2F97ECJK COMPATIBILITY IDEOGRAPH-2F97FCJK COMPATIBILITY IDEOGRAPH-2F9" + - "80CJK COMPATIBILITY IDEOGRAPH-2F981CJK COMPATIBILITY IDEOGRAPH-2F982CJK " + - "COMPATIBILITY IDEOGRAPH-2F983CJK COMPATIBILITY IDEOGRAPH-2F984CJK COMPAT" + - "IBILITY IDEOGRAPH-2F985CJK COMPATIBILITY IDEOGRAPH-2F986CJK COMPATIBILIT" + - "Y IDEOGRAPH-2F987CJK COMPATIBILITY IDEOGRAPH-2F988CJK COMPATIBILITY IDEO" + - "GRAPH-2F989CJK COMPATIBILITY IDEOGRAPH-2F98ACJK COMPATIBILITY IDEOGRAPH-" + - "2F98BCJK COMPATIBILITY IDEOGRAPH-2F98CCJK COMPATIBILITY IDEOGRAPH-2F98DC" + - "JK COMPATIBILITY IDEOGRAPH-2F98ECJK COMPATIBILITY IDEOGRAPH-2F98FCJK COM" + - "PATIBILITY IDEOGRAPH-2F990CJK COMPATIBILITY IDEOGRAPH-2F991CJK COMPATIBI" + - "LITY IDEOGRAPH-2F992CJK COMPATIBILITY IDEOGRAPH-2F993CJK COMPATIBILITY I" + - "DEOGRAPH-2F994CJK COMPATIBILITY IDEOGRAPH-2F995CJK COMPATIBILITY IDEOGRA" + - "PH-2F996CJK COMPATIBILITY IDEOGRAPH-2F997CJK COMPATIBILITY IDEOGRAPH-2F9" + - "98CJK COMPATIBILITY IDEOGRAPH-2F999CJK COMPATIBILITY IDEOGRAPH-2F99ACJK " + - "COMPATIBILITY IDEOGRAPH-2F99BCJK COMPATIBILITY IDEOGRAPH-2F99CCJK COMPAT" + - "IBILITY IDEOGRAPH-2F99DCJK COMPATIBILITY IDEOGRAPH-2F99ECJK COMPATIBILIT" + - "Y IDEOGRAPH-2F99FCJK COMPATIBILITY IDEOGRAPH-2F9A0CJK COMPATIBILITY IDEO" + - "GRAPH-2F9A1CJK COMPATIBILITY IDEOGRAPH-2F9A2CJK COMPATIBILITY IDEOGRAPH-" + - "2F9A3CJK COMPATIBILITY IDEOGRAPH-2F9A4CJK COMPATIBILITY IDEOGRAPH-2F9A5C" + - "JK COMPATIBILITY IDEOGRAPH-2F9A6CJK COMPATIBILITY IDEOGRAPH-2F9A7CJK COM" + - "PATIBILITY IDEOGRAPH-2F9A8CJK COMPATIBILITY IDEOGRAPH-2F9A9CJK COMPATIBI" + - "LITY IDEOGRAPH-2F9AACJK COMPATIBILITY IDEOGRAPH-2F9ABCJK COMPATIBILITY I" + - "DEOGRAPH-2F9ACCJK COMPATIBILITY IDEOGRAPH-2F9ADCJK COMPATIBILITY IDEOGRA" + - "PH-2F9AECJK COMPATIBILITY IDEOGRAPH-2F9AFCJK COMPATIBILITY IDEOGRAPH-2F9" + - "B0CJK COMPATIBILITY IDEOGRAPH-2F9B1CJK COMPATIBILITY IDEOGRAPH-2F9B2CJK " + - "COMPATIBILITY IDEOGRAPH-2F9B3CJK COMPATIBILITY IDEOGRAPH-2F9B4CJK COMPAT" + - "IBILITY IDEOGRAPH-2F9B5CJK COMPATIBILITY IDEOGRAPH-2F9B6CJK COMPATIBILIT" + - "Y IDEOGRAPH-2F9B7CJK COMPATIBILITY IDEOGRAPH-2F9B8CJK COMPATIBILITY IDEO" + - "GRAPH-2F9B9CJK COMPATIBILITY IDEOGRAPH-2F9BACJK COMPATIBILITY IDEOGRAPH-" + - "2F9BBCJK COMPATIBILITY IDEOGRAPH-2F9BCCJK COMPATIBILITY IDEOGRAPH-2F9BDC" + - "JK COMPATIBILITY IDEOGRAPH-2F9BECJK COMPATIBILITY IDEOGRAPH-2F9BFCJK COM" + - "PATIBILITY IDEOGRAPH-2F9C0CJK COMPATIBILITY IDEOGRAPH-2F9C1CJK COMPATIBI" + - "LITY IDEOGRAPH-2F9C2CJK COMPATIBILITY IDEOGRAPH-2F9C3CJK COMPATIBILITY I" + - "DEOGRAPH-2F9C4CJK COMPATIBILITY IDEOGRAPH-2F9C5CJK COMPATIBILITY IDEOGRA" + - "PH-2F9C6CJK COMPATIBILITY IDEOGRAPH-2F9C7CJK COMPATIBILITY IDEOGRAPH-2F9" + - "C8CJK COMPATIBILITY IDEOGRAPH-2F9C9CJK COMPATIBILITY IDEOGRAPH-2F9CACJK " + - "COMPATIBILITY IDEOGRAPH-2F9CBCJK COMPATIBILITY IDEOGRAPH-2F9CCCJK COMPAT" + - "IBILITY IDEOGRAPH-2F9CDCJK COMPATIBILITY IDEOGRAPH-2F9CECJK COMPATIBILIT" + - "Y IDEOGRAPH-2F9CFCJK COMPATIBILITY IDEOGRAPH-2F9D0CJK COMPATIBILITY IDEO" + - "GRAPH-2F9D1CJK COMPATIBILITY IDEOGRAPH-2F9D2CJK COMPATIBILITY IDEOGRAPH-" + - "2F9D3CJK COMPATIBILITY IDEOGRAPH-2F9D4CJK COMPATIBILITY IDEOGRAPH-2F9D5C" + - "JK COMPATIBILITY IDEOGRAPH-2F9D6CJK COMPATIBILITY IDEOGRAPH-2F9D7CJK COM" + - "PATIBILITY IDEOGRAPH-2F9D8CJK COMPATIBILITY IDEOGRAPH-2F9D9CJK COMPATIBI" + - "LITY IDEOGRAPH-2F9DACJK COMPATIBILITY IDEOGRAPH-2F9DBCJK COMPATIBILITY I" + - "DEOGRAPH-2F9DCCJK COMPATIBILITY IDEOGRAPH-2F9DDCJK COMPATIBILITY IDEOGRA" + - "PH-2F9DECJK COMPATIBILITY IDEOGRAPH-2F9DFCJK COMPATIBILITY IDEOGRAPH-2F9" + - "E0CJK COMPATIBILITY IDEOGRAPH-2F9E1CJK COMPATIBILITY IDEOGRAPH-2F9E2CJK " + - "COMPATIBILITY IDEOGRAPH-2F9E3CJK COMPATIBILITY IDEOGRAPH-2F9E4CJK COMPAT" + - "IBILITY IDEOGRAPH-2F9E5CJK COMPATIBILITY IDEOGRAPH-2F9E6CJK COMPATIBILIT" + - "Y IDEOGRAPH-2F9E7CJK COMPATIBILITY IDEOGRAPH-2F9E8CJK COMPATIBILITY IDEO") + ("" + - "GRAPH-2F9E9CJK COMPATIBILITY IDEOGRAPH-2F9EACJK COMPATIBILITY IDEOGRAPH-" + - "2F9EBCJK COMPATIBILITY IDEOGRAPH-2F9ECCJK COMPATIBILITY IDEOGRAPH-2F9EDC" + - "JK COMPATIBILITY IDEOGRAPH-2F9EECJK COMPATIBILITY IDEOGRAPH-2F9EFCJK COM" + - "PATIBILITY IDEOGRAPH-2F9F0CJK COMPATIBILITY IDEOGRAPH-2F9F1CJK COMPATIBI" + - "LITY IDEOGRAPH-2F9F2CJK COMPATIBILITY IDEOGRAPH-2F9F3CJK COMPATIBILITY I" + - "DEOGRAPH-2F9F4CJK COMPATIBILITY IDEOGRAPH-2F9F5CJK COMPATIBILITY IDEOGRA" + - "PH-2F9F6CJK COMPATIBILITY IDEOGRAPH-2F9F7CJK COMPATIBILITY IDEOGRAPH-2F9" + - "F8CJK COMPATIBILITY IDEOGRAPH-2F9F9CJK COMPATIBILITY IDEOGRAPH-2F9FACJK " + - "COMPATIBILITY IDEOGRAPH-2F9FBCJK COMPATIBILITY IDEOGRAPH-2F9FCCJK COMPAT" + - "IBILITY IDEOGRAPH-2F9FDCJK COMPATIBILITY IDEOGRAPH-2F9FECJK COMPATIBILIT" + - "Y IDEOGRAPH-2F9FFCJK COMPATIBILITY IDEOGRAPH-2FA00CJK COMPATIBILITY IDEO" + - "GRAPH-2FA01CJK COMPATIBILITY IDEOGRAPH-2FA02CJK COMPATIBILITY IDEOGRAPH-" + - "2FA03CJK COMPATIBILITY IDEOGRAPH-2FA04CJK COMPATIBILITY IDEOGRAPH-2FA05C" + - "JK COMPATIBILITY IDEOGRAPH-2FA06CJK COMPATIBILITY IDEOGRAPH-2FA07CJK COM" + - "PATIBILITY IDEOGRAPH-2FA08CJK COMPATIBILITY IDEOGRAPH-2FA09CJK COMPATIBI" + - "LITY IDEOGRAPH-2FA0ACJK COMPATIBILITY IDEOGRAPH-2FA0BCJK COMPATIBILITY I" + - "DEOGRAPH-2FA0CCJK COMPATIBILITY IDEOGRAPH-2FA0DCJK COMPATIBILITY IDEOGRA" + - "PH-2FA0ECJK COMPATIBILITY IDEOGRAPH-2FA0FCJK COMPATIBILITY IDEOGRAPH-2FA" + - "10CJK COMPATIBILITY IDEOGRAPH-2FA11CJK COMPATIBILITY IDEOGRAPH-2FA12CJK " + - "COMPATIBILITY IDEOGRAPH-2FA13CJK COMPATIBILITY IDEOGRAPH-2FA14CJK COMPAT" + - "IBILITY IDEOGRAPH-2FA15CJK COMPATIBILITY IDEOGRAPH-2FA16CJK COMPATIBILIT" + - "Y IDEOGRAPH-2FA17CJK COMPATIBILITY IDEOGRAPH-2FA18CJK COMPATIBILITY IDEO" + - "GRAPH-2FA19CJK COMPATIBILITY IDEOGRAPH-2FA1ACJK COMPATIBILITY IDEOGRAPH-" + - "2FA1BCJK COMPATIBILITY IDEOGRAPH-2FA1CCJK COMPATIBILITY IDEOGRAPH-2FA1DL" + - "ANGUAGE TAGTAG SPACETAG EXCLAMATION MARKTAG QUOTATION MARKTAG NUMBER SIG" + - "NTAG DOLLAR SIGNTAG PERCENT SIGNTAG AMPERSANDTAG APOSTROPHETAG LEFT PARE" + - "NTHESISTAG RIGHT PARENTHESISTAG ASTERISKTAG PLUS SIGNTAG COMMATAG HYPHEN" + - "-MINUSTAG FULL STOPTAG SOLIDUSTAG DIGIT ZEROTAG DIGIT ONETAG DIGIT TWOTA" + - "G DIGIT THREETAG DIGIT FOURTAG DIGIT FIVETAG DIGIT SIXTAG DIGIT SEVENTAG" + - " DIGIT EIGHTTAG DIGIT NINETAG COLONTAG SEMICOLONTAG LESS-THAN SIGNTAG EQ" + - "UALS SIGNTAG GREATER-THAN SIGNTAG QUESTION MARKTAG COMMERCIAL ATTAG LATI" + - "N CAPITAL LETTER ATAG LATIN CAPITAL LETTER BTAG LATIN CAPITAL LETTER CTA" + - "G LATIN CAPITAL LETTER DTAG LATIN CAPITAL LETTER ETAG LATIN CAPITAL LETT" + - "ER FTAG LATIN CAPITAL LETTER GTAG LATIN CAPITAL LETTER HTAG LATIN CAPITA" + - "L LETTER ITAG LATIN CAPITAL LETTER JTAG LATIN CAPITAL LETTER KTAG LATIN " + - "CAPITAL LETTER LTAG LATIN CAPITAL LETTER MTAG LATIN CAPITAL LETTER NTAG " + - "LATIN CAPITAL LETTER OTAG LATIN CAPITAL LETTER PTAG LATIN CAPITAL LETTER" + - " QTAG LATIN CAPITAL LETTER RTAG LATIN CAPITAL LETTER STAG LATIN CAPITAL " + - "LETTER TTAG LATIN CAPITAL LETTER UTAG LATIN CAPITAL LETTER VTAG LATIN CA" + - "PITAL LETTER WTAG LATIN CAPITAL LETTER XTAG LATIN CAPITAL LETTER YTAG LA" + - "TIN CAPITAL LETTER ZTAG LEFT SQUARE BRACKETTAG REVERSE SOLIDUSTAG RIGHT " + - "SQUARE BRACKETTAG CIRCUMFLEX ACCENTTAG LOW LINETAG GRAVE ACCENTTAG LATIN" + - " SMALL LETTER ATAG LATIN SMALL LETTER BTAG LATIN SMALL LETTER CTAG LATIN" + - " SMALL LETTER DTAG LATIN SMALL LETTER ETAG LATIN SMALL LETTER FTAG LATIN" + - " SMALL LETTER GTAG LATIN SMALL LETTER HTAG LATIN SMALL LETTER ITAG LATIN" + - " SMALL LETTER JTAG LATIN SMALL LETTER KTAG LATIN SMALL LETTER LTAG LATIN" + - " SMALL LETTER MTAG LATIN SMALL LETTER NTAG LATIN SMALL LETTER OTAG LATIN" + - " SMALL LETTER PTAG LATIN SMALL LETTER QTAG LATIN SMALL LETTER RTAG LATIN" + - " SMALL LETTER STAG LATIN SMALL LETTER TTAG LATIN SMALL LETTER UTAG LATIN" + - " SMALL LETTER VTAG LATIN SMALL LETTER WTAG LATIN SMALL LETTER XTAG LATIN" + - " SMALL LETTER YTAG LATIN SMALL LETTER ZTAG LEFT CURLY BRACKETTAG VERTICA" + - "L LINETAG RIGHT CURLY BRACKETTAG TILDECANCEL TAGVARIATION SELECTOR-17VAR" + - "IATION SELECTOR-18VARIATION SELECTOR-19VARIATION SELECTOR-20VARIATION SE" + - "LECTOR-21VARIATION SELECTOR-22VARIATION SELECTOR-23VARIATION SELECTOR-24" + - "VARIATION SELECTOR-25VARIATION SELECTOR-26VARIATION SELECTOR-27VARIATION" + - " SELECTOR-28VARIATION SELECTOR-29VARIATION SELECTOR-30VARIATION SELECTOR" + - "-31VARIATION SELECTOR-32VARIATION SELECTOR-33VARIATION SELECTOR-34VARIAT" + - "ION SELECTOR-35VARIATION SELECTOR-36VARIATION SELECTOR-37VARIATION SELEC" + - "TOR-38VARIATION SELECTOR-39VARIATION SELECTOR-40VARIATION SELECTOR-41VAR" + - "IATION SELECTOR-42VARIATION SELECTOR-43VARIATION SELECTOR-44VARIATION SE" + - "LECTOR-45VARIATION SELECTOR-46VARIATION SELECTOR-47VARIATION SELECTOR-48" + - "VARIATION SELECTOR-49VARIATION SELECTOR-50VARIATION SELECTOR-51VARIATION" + - " SELECTOR-52VARIATION SELECTOR-53VARIATION SELECTOR-54VARIATION SELECTOR" + - "-55VARIATION SELECTOR-56VARIATION SELECTOR-57VARIATION SELECTOR-58VARIAT") + ("" + - "ION SELECTOR-59VARIATION SELECTOR-60VARIATION SELECTOR-61VARIATION SELEC" + - "TOR-62VARIATION SELECTOR-63VARIATION SELECTOR-64VARIATION SELECTOR-65VAR" + - "IATION SELECTOR-66VARIATION SELECTOR-67VARIATION SELECTOR-68VARIATION SE" + - "LECTOR-69VARIATION SELECTOR-70VARIATION SELECTOR-71VARIATION SELECTOR-72" + - "VARIATION SELECTOR-73VARIATION SELECTOR-74VARIATION SELECTOR-75VARIATION" + - " SELECTOR-76VARIATION SELECTOR-77VARIATION SELECTOR-78VARIATION SELECTOR" + - "-79VARIATION SELECTOR-80VARIATION SELECTOR-81VARIATION SELECTOR-82VARIAT" + - "ION SELECTOR-83VARIATION SELECTOR-84VARIATION SELECTOR-85VARIATION SELEC" + - "TOR-86VARIATION SELECTOR-87VARIATION SELECTOR-88VARIATION SELECTOR-89VAR" + - "IATION SELECTOR-90VARIATION SELECTOR-91VARIATION SELECTOR-92VARIATION SE" + - "LECTOR-93VARIATION SELECTOR-94VARIATION SELECTOR-95VARIATION SELECTOR-96" + - "VARIATION SELECTOR-97VARIATION SELECTOR-98VARIATION SELECTOR-99VARIATION" + - " SELECTOR-100VARIATION SELECTOR-101VARIATION SELECTOR-102VARIATION SELEC" + - "TOR-103VARIATION SELECTOR-104VARIATION SELECTOR-105VARIATION SELECTOR-10" + - "6VARIATION SELECTOR-107VARIATION SELECTOR-108VARIATION SELECTOR-109VARIA" + - "TION SELECTOR-110VARIATION SELECTOR-111VARIATION SELECTOR-112VARIATION S" + - "ELECTOR-113VARIATION SELECTOR-114VARIATION SELECTOR-115VARIATION SELECTO" + - "R-116VARIATION SELECTOR-117VARIATION SELECTOR-118VARIATION SELECTOR-119V" + - "ARIATION SELECTOR-120VARIATION SELECTOR-121VARIATION SELECTOR-122VARIATI" + - "ON SELECTOR-123VARIATION SELECTOR-124VARIATION SELECTOR-125VARIATION SEL" + - "ECTOR-126VARIATION SELECTOR-127VARIATION SELECTOR-128VARIATION SELECTOR-" + - "129VARIATION SELECTOR-130VARIATION SELECTOR-131VARIATION SELECTOR-132VAR" + - "IATION SELECTOR-133VARIATION SELECTOR-134VARIATION SELECTOR-135VARIATION" + - " SELECTOR-136VARIATION SELECTOR-137VARIATION SELECTOR-138VARIATION SELEC" + - "TOR-139VARIATION SELECTOR-140VARIATION SELECTOR-141VARIATION SELECTOR-14" + - "2VARIATION SELECTOR-143VARIATION SELECTOR-144VARIATION SELECTOR-145VARIA" + - "TION SELECTOR-146VARIATION SELECTOR-147VARIATION SELECTOR-148VARIATION S" + - "ELECTOR-149VARIATION SELECTOR-150VARIATION SELECTOR-151VARIATION SELECTO" + - "R-152VARIATION SELECTOR-153VARIATION SELECTOR-154VARIATION SELECTOR-155V" + - "ARIATION SELECTOR-156VARIATION SELECTOR-157VARIATION SELECTOR-158VARIATI" + - "ON SELECTOR-159VARIATION SELECTOR-160VARIATION SELECTOR-161VARIATION SEL" + - "ECTOR-162VARIATION SELECTOR-163VARIATION SELECTOR-164VARIATION SELECTOR-" + - "165VARIATION SELECTOR-166VARIATION SELECTOR-167VARIATION SELECTOR-168VAR" + - "IATION SELECTOR-169VARIATION SELECTOR-170VARIATION SELECTOR-171VARIATION" + - " SELECTOR-172VARIATION SELECTOR-173VARIATION SELECTOR-174VARIATION SELEC" + - "TOR-175VARIATION SELECTOR-176VARIATION SELECTOR-177VARIATION SELECTOR-17" + - "8VARIATION SELECTOR-179VARIATION SELECTOR-180VARIATION SELECTOR-181VARIA" + - "TION SELECTOR-182VARIATION SELECTOR-183VARIATION SELECTOR-184VARIATION S" + - "ELECTOR-185VARIATION SELECTOR-186VARIATION SELECTOR-187VARIATION SELECTO" + - "R-188VARIATION SELECTOR-189VARIATION SELECTOR-190VARIATION SELECTOR-191V" + - "ARIATION SELECTOR-192VARIATION SELECTOR-193VARIATION SELECTOR-194VARIATI" + - "ON SELECTOR-195VARIATION SELECTOR-196VARIATION SELECTOR-197VARIATION SEL" + - "ECTOR-198VARIATION SELECTOR-199VARIATION SELECTOR-200VARIATION SELECTOR-" + - "201VARIATION SELECTOR-202VARIATION SELECTOR-203VARIATION SELECTOR-204VAR" + - "IATION SELECTOR-205VARIATION SELECTOR-206VARIATION SELECTOR-207VARIATION" + - " SELECTOR-208VARIATION SELECTOR-209VARIATION SELECTOR-210VARIATION SELEC" + - "TOR-211VARIATION SELECTOR-212VARIATION SELECTOR-213VARIATION SELECTOR-21" + - "4VARIATION SELECTOR-215VARIATION SELECTOR-216VARIATION SELECTOR-217VARIA" + - "TION SELECTOR-218VARIATION SELECTOR-219VARIATION SELECTOR-220VARIATION S" + - "ELECTOR-221VARIATION SELECTOR-222VARIATION SELECTOR-223VARIATION SELECTO" + - "R-224VARIATION SELECTOR-225VARIATION SELECTOR-226VARIATION SELECTOR-227V" + - "ARIATION SELECTOR-228VARIATION SELECTOR-229VARIATION SELECTOR-230VARIATI" + - "ON SELECTOR-231VARIATION SELECTOR-232VARIATION SELECTOR-233VARIATION SEL" + - "ECTOR-234VARIATION SELECTOR-235VARIATION SELECTOR-236VARIATION SELECTOR-" + - "237VARIATION SELECTOR-238VARIATION SELECTOR-239VARIATION SELECTOR-240VAR" + - "IATION SELECTOR-241VARIATION SELECTOR-242VARIATION SELECTOR-243VARIATION" + - " SELECTOR-244VARIATION SELECTOR-245VARIATION SELECTOR-246VARIATION SELEC" + - "TOR-247VARIATION SELECTOR-248VARIATION SELECTOR-249VARIATION SELECTOR-25" + - "0VARIATION SELECTOR-251VARIATION SELECTOR-252VARIATION SELECTOR-253VARIA" + - "TION SELECTOR-254VARIATION SELECTOR-255VARIATION SELECTOR-256") - -// Total table size 855081 bytes (835KiB); checksum: 98E3EADD diff --git a/vendor/golang.org/x/text/unicode/runenames/tables10.0.0.go b/vendor/golang.org/x/text/unicode/runenames/tables10.0.0.go new file mode 100644 index 0000000..26a7820 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/runenames/tables10.0.0.go @@ -0,0 +1,15920 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// +build go1.10 + +package runenames + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "10.0.0" + +type entry uint64 + +func (e entry) startRune() int32 { + return int32((e >> 43) & 0x1fffff) +} + +func (e entry) numRunes() int { + return int((e >> 27) & 0xffff) +} + +func (e entry) index() int { + return int((e >> 11) & 0xffff) +} + +func (e entry) base() int { + return int((e >> 5) & 0x3f) +} + +func (e entry) direct() bool { + const bit = 1 << 4 + return e&bit == bit +} + +var entries = []entry{ // 670 elements + // Entry 0 - 1F + 0x00000001000ac130, 0x00010002f8000000, 0x0003f801080ac130, 0x00050016c002f800, + 0x001bd0003019b800, 0x001c20003819e800, 0x001c6000081a2000, 0x001c7000a01a2800, + 0x001d180c681ac800, 0x0029880130273000, 0x002ac80038286000, 0x002b080138289800, + 0x002c48001029d000, 0x002c68001829e000, 0x002c8801b829f800, 0x002e8000d82bb000, + 0x002f8000282c8800, 0x00300000e82cb000, 0x0030f007802d9800, 0x00387801e0351800, + 0x003a68032836f800, 0x003e0001d83a2000, 0x00400001703bf800, 0x00418000783d6800, + 0x00420000e03de000, 0x0042f000083ec000, 0x00430000583ec800, 0x00450000a83f2000, + 0x0045b000403fc800, 0x0046a00580400800, 0x004c280040458800, 0x004c78001045c800, + // Entry 20 - 3F + 0x004c9800b045d800, 0x004d500038468800, 0x004d90000846c000, 0x004db0002046c800, + 0x004de0004846e800, 0x004e380010473000, 0x004e580020474000, 0x004eb80008476000, + 0x004ee00010476800, 0x004ef80028477800, 0x004f3000c047a000, 0x0050080018486000, + 0x0050280030487800, 0x005078001048a800, 0x00509800b048b800, 0x0051500038496800, + 0x005190001049a000, 0x0051a8001049b000, 0x0051c0001049c000, 0x0051e0000849d000, + 0x0051f0002849d800, 0x00523800104a0000, 0x00525800184a1000, 0x00528800084a2800, + 0x0052c800204a3000, 0x0052f000084a5000, 0x00533000804a5800, 0x00540800184ad800, + 0x00542800484af000, 0x00547800184b3800, 0x00549800404b5000, 0x0054d800704b9020, + // Entry 40 - 5F + 0x00555000384c0020, 0x00559000104c3820, 0x0055a800284c4820, 0x0055e000504c7020, + 0x00563800184cc020, 0x00565800184cd820, 0x00568000084cf020, 0x00570000204cf820, + 0x00573000604d1820, 0x0057c800384d7820, 0x00580800184db020, 0x00582800404dc820, + 0x00587800104e0820, 0x00589800b04e1820, 0x00595000384ec820, 0x00599000104f0020, + 0x0059a800284f1020, 0x0059e000484f3820, 0x005a3800104f8020, 0x005a5800184f9020, + 0x005ab000104fa820, 0x005ae000104fb820, 0x005af800284fc820, 0x005b3000904ff020, + 0x005c100010508020, 0x005c280030509020, 0x005c70001850c020, 0x005c90002050d820, + 0x005cc8001050f820, 0x005ce00008510820, 0x005cf00010511020, 0x005d180010512020, + // Entry 60 - 7F + 0x005d400018513020, 0x005d700060514820, 0x005df0002851a820, 0x005e30001851d020, + 0x005e50002051e820, 0x005e800008520820, 0x005eb80008521020, 0x005f3000a8521820, + 0x006000002052c020, 0x006028004052e020, 0x0060700018532020, 0x00609000b8533820, + 0x006150008053f020, 0x0061e80040547020, 0x006230001854b020, 0x006250002054c820, + 0x0062a8001054e820, 0x0062c0001854f820, 0x0063000020551020, 0x0063300050553020, + 0x0063c00060558020, 0x006428004055e020, 0x0064700018562020, 0x00649000b8563820, + 0x006550005056f020, 0x0065a80028574020, 0x0065e00048576820, 0x006630001857b020, + 0x006650002057c820, 0x0066a8001057e820, 0x0066f0000857f820, 0x0067000020580020, + // Entry 80 - 9F + 0x0067300050582020, 0x0067880010587020, 0x0068000020588020, 0x006828004058a020, + 0x006870001858e020, 0x006890019858f820, 0x006a3000185a9020, 0x006a5000305aa820, + 0x006aa000805ad820, 0x006b3000d05b5820, 0x006c1000105c2820, 0x006c2800905c3820, + 0x006cd000c05cc820, 0x006d9800485d8820, 0x006de800085dd020, 0x006e0000385dd820, + 0x006e5000085e1020, 0x006e7800305e1820, 0x006eb000085e4820, 0x006ec000405e5020, + 0x006f3000505e9020, 0x006f9000185ee020, 0x00700801d05ef820, 0x0071f800e860c820, + 0x007408001061b020, 0x007420000861c020, 0x007438001061c820, 0x007450000861d820, + 0x007468000861e020, 0x0074a0002061e820, 0x0074c80038620820, 0x0075080018624020, + // Entry A0 - BF + 0x0075280008625820, 0x0075380008626020, 0x0075500010626820, 0x0075680068627820, + 0x0075d8001862e020, 0x007600002862f820, 0x0076300008632020, 0x0076400030632820, + 0x0076800050635820, 0x0076e0002063a820, 0x007800024063c820, 0x007a480120660820, + 0x007b880138672820, 0x007cc80120686020, 0x007df00078698020, 0x007e70006869f820, + 0x00800006306a6020, 0x0086380008709020, 0x0086680008709820, 0x0086800bc870a020, + 0x00925000207c6820, 0x00928000387c8820, 0x0092c000087cc020, 0x0092d000207cc820, + 0x00930001487ce820, 0x00945000207e3020, 0x00948001087e5020, 0x00959000207f5820, + 0x0095c000387f7820, 0x00960000087fb020, 0x00961000207fb820, 0x00964000787fd820, + // Entry C0 - DF + 0x0096c001c8805020, 0x0098900020821820, 0x0098c00218823820, 0x009ae80100845020, + 0x009c0000d0855020, 0x009d0002b0862020, 0x009fc0003088d020, 0x00a00014e8890020, + 0x00b50002c89de820, 0x00b8000068a0b020, 0x00b8700038a11820, 0x00b90000b8a15020, + 0x00ba0000a0a20820, 0x00bb000068a2a820, 0x00bb700018a31020, 0x00bb900010a32820, + 0x00bc000090a33820, 0x00bc900260a3c840, 0x00bf000050a62840, 0x00bf800050a67840, + 0x00c0000078a6c840, 0x00c0800050a74040, 0x00c10002c0a79040, 0x00c4000158aa5040, + 0x00c5800230aba840, 0x00c80000f8add840, 0x00c9000060aed040, 0x00c9800060af3040, + 0x00ca000008af9040, 0x00ca200150af9840, 0x00cb800028b0e840, 0x00cc000160b11040, + // Entry E0 - FF + 0x00cd8000d0b27040, 0x00ce800058b34040, 0x00cef001f0b39840, 0x00d0f00208b58840, + 0x00d30000e8b79040, 0x00d3f80058b87840, 0x00d4800050b8d040, 0x00d5000070b92040, + 0x00d5800078b99040, 0x00d8000260ba0840, 0x00da800168bc6840, 0x00dc0003a0bdd040, + 0x00dfe001e0c17040, 0x00e1d80078c35040, 0x00e26801e0c3c840, 0x00e6000040c5a840, + 0x00e6800150c5e840, 0x00e80007d0c73840, 0x00efd808d8cf0840, 0x00f8c00030d7e040, + 0x00f9000130d81040, 0x00fa400030d94040, 0x00fa800040d97040, 0x00fac80008d9b040, + 0x00fad80008d9b840, 0x00fae80008d9c040, 0x00faf800f8d9c840, 0x00fc0001a8dac040, + 0x00fdb00078dc6840, 0x00fe300070dce040, 0x00feb00030dd5040, 0x00fee80098dd8040, + // Entry 100 - 11F + 0x00ff900018de1840, 0x00ffb00048de3040, 0x0100000328de7840, 0x0103300060e1a040, + 0x0103a000d8e20040, 0x0104800068e2d840, 0x0105000100e34040, 0x0106800108e44040, + 0x0108000460e54840, 0x010c8003b0e9a840, 0x0110301108ed5860, 0x0122000058fe6060, + 0x01230038a0feb860, 0x015bb00101375860, 0x015cc000c1385860, 0x015d800051391880, + 0x015de80061396880, 0x015e50004939c880, 0x015f6000213a1080, 0x01600001793a3080, + 0x01618001793ba880, 0x01630004a13d2080, 0x0167c8016941c080, 0x0169380009432880, + 0x0169680009433080, 0x01698001c1433880, 0x016b78001144f880, 0x016bf800c1450880, + 0x016d00003945c880, 0x016d400039460080, 0x016d800039463880, 0x016dc00039467080, + // Entry 120 - 13F + 0x016e00003946a880, 0x016e40003946e080, 0x016e800039471880, 0x016ec00039475080, + 0x016f000351478880, 0x01740000d14ad880, 0x0174d802c94ba880, 0x01780006b14e7080, + 0x017f800061552080, 0x0180000201558080, 0x01820802b1578080, 0x0184c803395a3080, + 0x01882801515d6880, 0x01898802f15eb880, 0x018c80015961a880, 0x018e000121630080, + 0x018f800179642080, 0x01910006f9659880, 0x01980008016c9080, 0x01a000cdb0000370, + 0x026e000201749080, 0x0270028f580511f0, 0x0500002469769080, 0x05248001b99af880, + 0x05268002519cb080, 0x0528d008919f00a0, 0x05320005c1a790a0, 0x0538000579ad50a0, + 0x053d800041b2c8a0, 0x053fb801a9b308a0, 0x0541800051b4b0a0, 0x05420001c1b500a0, + // Entry 140 - 15F + 0x0544000231b6c0a0, 0x0546700061b8f0a0, 0x05470000f1b950a0, 0x05480002a1ba40a0, + 0x054af800f1bce0a0, 0x054c000271bdd0a0, 0x054e780059c040a0, 0x054ef00109c098a0, + 0x05500001b9c1a0a0, 0x0552000071c358a0, 0x0552800051c3c8a0, 0x0552e00339c418a0, + 0x0556d800e1c750a0, 0x0558080031c830a0, 0x0558480031c860a0, 0x0558880031c890a0, + 0x0559000039c8c0a0, 0x0559400039c8f8a0, 0x05598001b1c930a0, 0x055b8003f1cae0a0, + 0x055f800051ced0a0, 0x0560015d20058a30, 0x06bd8000b9cf20a0, 0x06be580189cfd8a0, + 0x06c0001c00068c10, 0x06dc00040008eb90, 0x06e00020000611f0, 0x070000c80009c9b0, + 0x07c8000b71d160a0, 0x07d3800351dcd0a0, 0x07d8000039e020a0, 0x07d8980029e058a0, + // Entry 160 - 17F + 0x07d8e800d1e080a0, 0x07d9c00029e150a0, 0x07d9f00009e178a0, 0x07da000011e180a0, + 0x07da180011e190a0, 0x07da3003e1e1a0a0, 0x07de9804f1e580a0, 0x07e3880679ea70c0, + 0x07ea800201f0e8c0, 0x07ec9001b1f2e8c0, 0x07ef800071f498c0, 0x07f00000d1f508c0, + 0x07f1000199f5d8c0, 0x07f2a00099f770c0, 0x07f3400021f808c0, 0x07f3800029f828c0, + 0x07f3b00439f850c0, 0x07f7f80009fc88c0, 0x07f80805f1fc90c0, 0x07fe1000320280c0, + 0x07fe50003202b0c0, 0x07fe90003202e0c0, 0x07fed0001a0310c0, 0x07ff00003a0328c0, + 0x07ff40003a0360c0, 0x07ffc8002a0398c0, 0x080000006203c0c0, 0x08006800d20420c0, + 0x080140009a04f0c0, 0x0801e000120588c0, 0x0801f8007a0598c0, 0x08028000720610c0, + // Entry 180 - 19F + 0x08040003da0680c0, 0x080800001a0a58c0, 0x080838016a0a70c0, 0x0809b802c20bd8c0, + 0x080c8000620e98c0, 0x080d00000a0ef8c0, 0x080e8001720f00c0, 0x08140000ea1070c0, + 0x081500018a1158c0, 0x08170000e212e0c0, 0x081800012213c0c0, 0x08196800f214e0c0, + 0x081a80015a15d0c0, 0x081c0000f21728c0, 0x081cf8012a1818c0, 0x081e4000721940c0, + 0x08200004f219b0c0, 0x08250000521ea0c0, 0x08258001221ef0c0, 0x0826c001222010c0, + 0x08280001422130c0, 0x08298001a22270c0, 0x082b78000a2410c0, 0x08300009ba2418c0, + 0x083a0000b22dd0c0, 0x083b0000422e80c0, 0x08400000322ec0c0, 0x084040000a2ef0c0, + 0x08405001622ef8c0, 0x0841b800123058c0, 0x0841e0000a3068c0, 0x0841f800ba3070c0, + // Entry 1A0 - 1BF + 0x0842b802423128c0, 0x084538004a3368c0, 0x084700009a33b0c0, 0x0847a000123448c0, + 0x0847d8010a3458c0, 0x0848f800da3560c0, 0x0849f8000a3638c0, 0x084c00004a3640c0, + 0x084c48017a3688e0, 0x084de000a23800e0, 0x084e90019238a0e0, 0x08502800123a30e0, + 0x08506000423a40e0, 0x0850a8001a3a80e0, 0x0850c800da3a98e0, 0x0851c0001a3b70e0, + 0x0851f8004a3b88e0, 0x085280004a3bd0e0, 0x08530002023c18e0, 0x085600013a3e18e0, + 0x08575800623f50e0, 0x08580001b23fb0e0, 0x0859c800ea4160e0, 0x085ac000da4248e0, + 0x085bc000d24320e0, 0x085cc8002243f0e0, 0x085d48003a4410e0, 0x086000024a4448e0, + 0x086400019a4690e0, 0x086600019a4828e0, 0x0867d0003249c0e0, 0x08730000fa49f0e0, + // Entry 1C0 - 1DF + 0x08800002724ae8e0, 0x08829000f24d58e0, 0x0883f8021a4e48e0, 0x08868000ca5060e0, + 0x08878000525128e0, 0x08880001aa5178e0, 0x0889b000725320e0, 0x088a80013a5390e0, + 0x088c00027254c8e0, 0x088e8000825738e0, 0x088f0800a257b8e0, 0x08900000925858e0, + 0x089098016258e8e0, 0x089400003a5a48e0, 0x089440000a5a80e0, 0x08945000225a88e0, + 0x089478007a5aa8e0, 0x0894f8005a5b20e0, 0x08958001da5b78e0, 0x08978000525d50e0, + 0x08980000225da0e0, 0x08982800425dc0e0, 0x08987800125e00e0, 0x08989800b25e10e0, + 0x089950003a5ec0e0, 0x08999000125ef8e0, 0x0899a8002a5f08e0, 0x0899e0004a5f30e0, + 0x089a3800125f78e0, 0x089a58001a5f88e0, 0x089a80000a5fa0e0, 0x089ab8000a5fa8e0, + // Entry 1E0 - 1FF + 0x089ae8003a5fb0e0, 0x089b30003a5fe8e0, 0x089b80002a6020e0, 0x08a00002d26048e0, + 0x08a2d8000a6318e0, 0x08a2e8000a6320e0, 0x08a40002426328e0, 0x08a68000526568e0, + 0x08ac0001b265b8e0, 0x08adc001326768e0, 0x08b000022a6898e0, 0x08b28000526ac0e0, + 0x08b300006a6b10e0, 0x08b40001c26b78e0, 0x08b60000526d38e0, 0x08b80000d26d88e0, + 0x08b8e8007a6e58e0, 0x08b98000826ed0e0, 0x08c500029a6f50e0, 0x08c7f8000a71e8e0, + 0x08d000024271f0e0, 0x08d28001a27430e0, 0x08d43000ba75d0e0, 0x08d4f0002a7688e0, + 0x08d60001ca76b0e0, 0x08e000004a7878e0, 0x08e050016a78c0e0, 0x08e1c000727a28e0, + 0x08e28000ea7a98e0, 0x08e38001027b80e0, 0x08e49000b27c80e0, 0x08e54800727d30e0, + // Entry 200 - 21F + 0x08e800003a7da0e0, 0x08e84000127dd8e0, 0x08e85801627de8e0, 0x08e9d0000a7f48e0, + 0x08e9e000127f50e0, 0x08e9f8004a7f60e0, 0x08ea8000527fa8e0, 0x0900000de27ff8e0, + 0x090de00ef28dd900, 0x092000037a9cc900, 0x092380002aa04100, 0x0924000622a06900, + 0x098000217aa68900, 0x0a2000123ac80100, 0x0b400001e2da3900, 0x0b41e00feadc1920, + 0x0b520000faec0120, 0x0b53000052ecf920, 0x0b53700012ed4920, 0x0b568000f2ed5920, + 0x0b57800032ee4920, 0x0b58000232ee7920, 0x0b5a800052f0a920, 0x0b5ad8003af0f920, + 0x0b5b1800aaf13120, 0x0b5be8009af1d920, 0x0b7800022af27120, 0x0b7a80017af49920, + 0x0b7c78008af61120, 0x0b7f000012f69920, 0x0b8000bf680a3250, 0x0c4000179af6a920, + // Entry 220 - 23F + 0x0d800008fb0e4120, 0x0d8b800c63173920, 0x0de000035b239920, 0x0de380006b26f120, + 0x0de400004b275920, 0x0de480005327a120, 0x0de4e0004327f120, 0x0e800007b3283120, + 0x0e8800013b2fe120, 0x0e8948015b311920, 0x0e8aa004ab327140, 0x0e90000233371940, + 0x0e980002bb394940, 0x0e9b0000933c0140, 0x0ea00002ab3c9140, 0x0ea2b0023b3f3940, + 0x0ea4f00013417140, 0x0ea510000b418140, 0x0ea5280013418940, 0x0ea5480023419940, + 0x0ea570006341b940, 0x0ea5d8000b421940, 0x0ea5e8003b422140, 0x0ea628020b425940, + 0x0ea8380023446140, 0x0ea8680043448140, 0x0ea8b0003b44c140, 0x0ea8f000e344f940, + 0x0ea9d8002345d940, 0x0eaa00002b45f940, 0x0eaa30000b462140, 0x0eaa50003b462940, + // Entry 240 - 25F + 0x0eaa900aa3466140, 0x0eb5400923510140, 0x0ebe7010f35a2140, 0x0ecf6005036b1160, + 0x0ed4d8002b701160, 0x0ed508007b703960, 0x0f0000003b70b160, 0x0f0040008b70e960, + 0x0f00d8003b717160, 0x0f0118001371a960, 0x0f0130002b71b960, 0x0f4000062b71e160, + 0x0f46380083780960, 0x0f4800025b788960, 0x0f4a8000537ae160, 0x0f4af000137b3160, + 0x0f700000237b4160, 0x0f702800db7b6160, 0x0f710800137c3960, 0x0f7120000b7c4960, + 0x0f7138000b7c5160, 0x0f714800537c5960, 0x0f71a000237ca960, 0x0f71c8000b7cc960, + 0x0f71d8000b7cd160, 0x0f7210000b7cd960, 0x0f7238000b7ce160, 0x0f7248000b7ce960, + 0x0f7258000b7cf160, 0x0f7268001b7cf960, 0x0f728800137d1160, 0x0f72a0000b7d2160, + // Entry 260 - 27F + 0x0f72b8000b7d2960, 0x0f72c8000b7d3160, 0x0f72d8000b7d3960, 0x0f72e8000b7d4160, + 0x0f72f8000b7d4960, 0x0f730800137d5160, 0x0f7320000b7d6160, 0x0f733800237d6960, + 0x0f7360003b7d8960, 0x0f73a000237dc160, 0x0f73c800237de160, 0x0f73f0000b7e0160, + 0x0f740000537e0960, 0x0f7458008b7e5960, 0x0f7508001b7ee160, 0x0f7528002b7ef960, + 0x0f7558008b7f2160, 0x0f778000137fa960, 0x0f800001637fb960, 0x0f81800323811960, + 0x0f8500007b843960, 0x0f8588007b84b160, 0x0f8608007b852960, 0x0f8688012b85a160, + 0x0f8800006b86c960, 0x0f888000fb873160, 0x0f898001e3882960, 0x0f8b8001eb8a0960, + 0x0f8f3000eb8bf160, 0x0f908001638cd960, 0x0f9200004b8e3960, 0x0f928000138e8160, + // Entry 280 - 29F + 0x0f930000338e9160, 0x0f98001eab8ec160, 0x0fb700006bad6960, 0x0fb780004badd160, + 0x0fb80003a3ae1960, 0x0fbc0002abb1b960, 0x0fc0000063b46160, 0x0fc08001c3b4c160, + 0x0fc2800053b68160, 0x0fc3000143b6d160, 0x0fc48000f3b81160, 0x0fc8000063b90160, + 0x0fc880017bb96160, 0x0fca00006bbad960, 0x0fca8000e3bb4160, 0x0fcc0000c3bc2160, + 0x0fce00000bbce160, 0x0fce8000bbbce960, 0x10000536b800db70, 0x15380081a801b370, + 0x15ba0006f0028b70, 0x15c100b410036370, 0x167580e988043b70, 0x17c0000193bda160, + 0x17c1900f63bf3180, 0x700008000bce9180, 0x7001000303ce9980, 0x7008000783d19980, + 0x780007fff0078ad0, 0x800007fff0083ad0, +} // Size: 5384 bytes + +var index = []uint16{ // 31524 elements + // Entry 0 - 3F + 0x0000, 0x0005, 0x0015, 0x0023, 0x002e, 0x0039, 0x0045, 0x004e, + 0x0058, 0x0068, 0x0079, 0x0081, 0x008a, 0x008f, 0x009b, 0x00a4, + 0x00ab, 0x00b5, 0x00be, 0x00c7, 0x00d2, 0x00dc, 0x00e6, 0x00ef, + 0x00fa, 0x0105, 0x010f, 0x0114, 0x011d, 0x012b, 0x0136, 0x0147, + 0x0154, 0x0161, 0x0177, 0x018d, 0x01a3, 0x01b9, 0x01cf, 0x01e5, + 0x01fb, 0x0211, 0x0227, 0x023d, 0x0253, 0x0269, 0x027f, 0x0295, + 0x02ab, 0x02c1, 0x02d7, 0x02ed, 0x0303, 0x0319, 0x032f, 0x0345, + 0x035b, 0x0371, 0x0387, 0x039d, 0x03b0, 0x03bf, 0x03d3, 0x03e4, + // Entry 40 - 7F + 0x03ec, 0x03f8, 0x040c, 0x0420, 0x0434, 0x0448, 0x045c, 0x0470, + 0x0484, 0x0498, 0x04ac, 0x04c0, 0x04d4, 0x04e8, 0x04fc, 0x0510, + 0x0524, 0x0538, 0x054c, 0x0560, 0x0574, 0x0588, 0x059c, 0x05b0, + 0x05c4, 0x05d8, 0x05ec, 0x0600, 0x0612, 0x061f, 0x0632, 0x0637, + 0x0645, 0x065e, 0x0667, 0x0671, 0x067e, 0x0686, 0x0690, 0x069c, + 0x06a5, 0x06b3, 0x06cd, 0x06f6, 0x06fe, 0x0709, 0x0718, 0x071e, + 0x0729, 0x0738, 0x0747, 0x0758, 0x0764, 0x076e, 0x077a, 0x0784, + 0x078b, 0x079a, 0x07b5, 0x07df, 0x07fa, 0x0812, 0x0830, 0x0846, + // Entry 80 - BF + 0x0867, 0x0888, 0x08ae, 0x08cf, 0x08f4, 0x091a, 0x0931, 0x0954, + 0x0975, 0x0996, 0x09bc, 0x09e1, 0x0a02, 0x0a23, 0x0a49, 0x0a6e, + 0x0a86, 0x0aa7, 0x0ac8, 0x0ae9, 0x0b0f, 0x0b30, 0x0b55, 0x0b68, + 0x0b8a, 0x0bab, 0x0bcc, 0x0bf2, 0x0c17, 0x0c38, 0x0c52, 0x0c6c, + 0x0c8b, 0x0caa, 0x0cce, 0x0ced, 0x0d10, 0x0d34, 0x0d49, 0x0d6a, + 0x0d89, 0x0da8, 0x0dcc, 0x0def, 0x0e0e, 0x0e2d, 0x0e51, 0x0e74, + 0x0e8a, 0x0ea9, 0x0ec8, 0x0ee7, 0x0f0b, 0x0f2a, 0x0f4d, 0x0f5a, + 0x0f7a, 0x0f99, 0x0fb8, 0x0fdc, 0x0fff, 0x101e, 0x1036, 0x1059, + // Entry C0 - FF + 0x107b, 0x109b, 0x10bc, 0x10db, 0x10fd, 0x111d, 0x113e, 0x115d, + 0x1183, 0x11a7, 0x11cc, 0x11ef, 0x1210, 0x122f, 0x1250, 0x126f, + 0x1291, 0x12b1, 0x12d3, 0x12f3, 0x1314, 0x1333, 0x1358, 0x137b, + 0x139d, 0x13bd, 0x13de, 0x13fd, 0x1423, 0x1447, 0x1468, 0x1487, + 0x14ac, 0x14cf, 0x14f2, 0x1513, 0x1539, 0x155d, 0x157f, 0x159f, + 0x15c0, 0x15df, 0x1601, 0x1621, 0x1642, 0x1661, 0x1683, 0x16a3, + 0x16c8, 0x16e4, 0x16fd, 0x1714, 0x173a, 0x175e, 0x1781, 0x17a2, + 0x17b8, 0x17d9, 0x17f8, 0x181b, 0x183c, 0x185d, 0x187c, 0x18a2, + // Entry 100 - 13F + 0x18c6, 0x18e8, 0x1908, 0x1929, 0x1948, 0x196b, 0x198c, 0x19ad, + 0x19cc, 0x19f7, 0x1a0f, 0x1a25, 0x1a47, 0x1a67, 0x1a88, 0x1aa7, + 0x1acf, 0x1af5, 0x1b0e, 0x1b25, 0x1b46, 0x1b65, 0x1b88, 0x1ba9, + 0x1bca, 0x1be9, 0x1c0a, 0x1c29, 0x1c4f, 0x1c73, 0x1c96, 0x1cb7, + 0x1cd8, 0x1cf7, 0x1d1a, 0x1d3b, 0x1d5c, 0x1d7b, 0x1d9d, 0x1dbd, + 0x1dde, 0x1dfd, 0x1e1f, 0x1e3f, 0x1e60, 0x1e7f, 0x1ea5, 0x1ec9, + 0x1ef1, 0x1f17, 0x1f39, 0x1f59, 0x1f7f, 0x1fa3, 0x1fc9, 0x1fed, + 0x2012, 0x2033, 0x2052, 0x2077, 0x209a, 0x20bb, 0x20da, 0x20f3, + // Entry 140 - 17F + 0x2113, 0x2133, 0x2155, 0x2175, 0x2192, 0x21ad, 0x21c8, 0x21e8, + 0x2206, 0x2224, 0x2244, 0x2266, 0x2286, 0x22a5, 0x22c4, 0x22de, + 0x22f9, 0x2319, 0x2337, 0x2357, 0x2371, 0x2386, 0x239f, 0x23c1, + 0x23e1, 0x23ff, 0x241c, 0x2441, 0x245e, 0x2483, 0x24ab, 0x24d3, + 0x24f3, 0x2511, 0x2528, 0x253d, 0x255d, 0x257b, 0x258a, 0x25a7, + 0x25c2, 0x25da, 0x25f8, 0x261e, 0x263e, 0x265c, 0x2686, 0x26a6, + 0x26c4, 0x26e0, 0x2700, 0x2720, 0x273e, 0x2760, 0x2780, 0x2798, + 0x27b9, 0x27d8, 0x27f8, 0x2814, 0x2832, 0x284e, 0x287c, 0x288d, + // Entry 180 - 1BF + 0x28a6, 0x28c0, 0x28db, 0x28f7, 0x2919, 0x294e, 0x296e, 0x2985, + 0x29af, 0x29c4, 0x29db, 0x2a05, 0x2a1a, 0x2a3b, 0x2a5a, 0x2a7b, + 0x2a9a, 0x2abb, 0x2ada, 0x2afb, 0x2b1a, 0x2b4a, 0x2b78, 0x2ba7, + 0x2bd4, 0x2c03, 0x2c30, 0x2c5f, 0x2c8c, 0x2ca7, 0x2cd7, 0x2d05, + 0x2d35, 0x2d63, 0x2d86, 0x2da7, 0x2dc9, 0x2de9, 0x2e0a, 0x2e29, + 0x2e4a, 0x2e69, 0x2e8b, 0x2eab, 0x2ed8, 0x2f03, 0x2f26, 0x2f47, + 0x2f66, 0x2f7d, 0x2fa7, 0x2fbc, 0x2fdd, 0x2ffc, 0x3016, 0x302f, + 0x3050, 0x306f, 0x309f, 0x30cd, 0x30ef, 0x310f, 0x313b, 0x3165, + // Entry 1C0 - 1FF + 0x318d, 0x31b3, 0x31dd, 0x3205, 0x322d, 0x3253, 0x327d, 0x32a5, + 0x32cd, 0x32f3, 0x331d, 0x3345, 0x336d, 0x3393, 0x33bd, 0x33e5, + 0x340d, 0x3433, 0x345d, 0x3485, 0x34ad, 0x34d3, 0x34fd, 0x3525, + 0x354c, 0x3571, 0x3598, 0x35bd, 0x35d6, 0x35ed, 0x360e, 0x362d, + 0x3657, 0x3675, 0x368c, 0x36a1, 0x36c1, 0x36df, 0x3704, 0x3727, + 0x374a, 0x376b, 0x379b, 0x37c9, 0x37f5, 0x381f, 0x3844, 0x3867, + 0x3897, 0x38c5, 0x38e7, 0x3907, 0x3925, 0x3943, 0x3961, 0x397d, + 0x399a, 0x39b7, 0x39d9, 0x39fb, 0x3a1b, 0x3a3a, 0x3a65, 0x3a89, + // Entry 200 - 23F + 0x3aad, 0x3ace, 0x3aed, 0x3b0f, 0x3b29, 0x3b46, 0x3b68, 0x3b88, + 0x3baa, 0x3bca, 0x3bf5, 0x3c18, 0x3c3a, 0x3c5a, 0x3c7c, 0x3c9c, + 0x3cb7, 0x3ccf, 0x3cee, 0x3d0c, 0x3d25, 0x3d43, 0x3d61, 0x3d7f, + 0x3d9c, 0x3db4, 0x3dd6, 0x3def, 0x3e11, 0x3e3d, 0x3e66, 0x3e8e, + 0x3eac, 0x3ec7, 0x3ee3, 0x3efb, 0x3f17, 0x3f32, 0x3f50, 0x3f71, + 0x3f91, 0x3fa8, 0x3fc4, 0x3fea, 0x4008, 0x4030, 0x4047, 0x4062, + 0x408b, 0x40a9, 0x40cc, 0x40f4, 0x4110, 0x412b, 0x4148, 0x4167, + 0x417d, 0x4198, 0x41c1, 0x41e6, 0x4208, 0x4226, 0x4248, 0x4273, + // Entry 240 - 27F + 0x428f, 0x42b4, 0x42d2, 0x42e8, 0x4319, 0x433e, 0x435e, 0x4379, + 0x43a1, 0x43b9, 0x43d3, 0x43f1, 0x440c, 0x4427, 0x4442, 0x445e, + 0x4486, 0x44a4, 0x44ba, 0x44da, 0x44f3, 0x451b, 0x453d, 0x4555, + 0x4570, 0x458c, 0x45ac, 0x45d2, 0x45ee, 0x4614, 0x462f, 0x464b, + 0x4669, 0x468e, 0x46bc, 0x46d9, 0x46f8, 0x471f, 0x473c, 0x475b, + 0x4782, 0x47a1, 0x47be, 0x47db, 0x47fb, 0x481b, 0x4844, 0x4876, + 0x488d, 0x48ae, 0x48c5, 0x48dc, 0x48fa, 0x4922, 0x494a, 0x4961, + 0x4978, 0x498d, 0x49a9, 0x49c5, 0x49df, 0x49fd, 0x4a1c, 0x4a3a, + // Entry 280 - 2BF + 0x4a56, 0x4a7b, 0x4a99, 0x4ab8, 0x4ad4, 0x4af2, 0x4b13, 0x4b18, + 0x4b35, 0x4b4b, 0x4b67, 0x4b83, 0x4ba4, 0x4bbe, 0x4bde, 0x4bfe, + 0x4c1e, 0x4c43, 0x4c6a, 0x4c90, 0x4ca7, 0x4cc0, 0x4cd9, 0x4cf3, + 0x4cf8, 0x4d01, 0x4d0b, 0x4d11, 0x4d1c, 0x4d2f, 0x4d4a, 0x4d66, + 0x4d81, 0x4d98, 0x4daf, 0x4dc6, 0x4df1, 0x4e14, 0x4e31, 0x4e4d, + 0x4e69, 0x4e8b, 0x4eb2, 0x4eda, 0x4ef1, 0x4f0c, 0x4f2d, 0x4f4f, + 0x4f6f, 0x4f91, 0x4fb4, 0x4fcc, 0x4fef, 0x5019, 0x5043, 0x505c, + 0x5078, 0x5097, 0x50b4, 0x50d2, 0x50ee, 0x5103, 0x511d, 0x513b, + // Entry 2C0 - 2FF + 0x5151, 0x5167, 0x5182, 0x5191, 0x51a1, 0x51b3, 0x51c2, 0x51d5, + 0x51e8, 0x51fc, 0x5210, 0x522d, 0x523c, 0x5259, 0x527d, 0x529a, + 0x52af, 0x52c7, 0x52e3, 0x52f8, 0x5316, 0x5331, 0x534d, 0x5369, + 0x5382, 0x539c, 0x53b6, 0x53c4, 0x53e2, 0x53f9, 0x5412, 0x542b, + 0x5445, 0x5465, 0x5483, 0x5496, 0x54af, 0x54c3, 0x54d8, 0x54e9, + 0x54f9, 0x5516, 0x552c, 0x5550, 0x5565, 0x5586, 0x559b, 0x55b9, + 0x55ce, 0x55e4, 0x55f6, 0x560f, 0x5626, 0x5644, 0x5661, 0x5680, + 0x569e, 0x56bd, 0x56dc, 0x56f2, 0x5709, 0x571a, 0x5732, 0x574b, + // Entry 300 - 33F + 0x5764, 0x577d, 0x5798, 0x57af, 0x57ce, 0x57eb, 0x5801, 0x581c, + 0x5840, 0x585a, 0x5873, 0x588d, 0x58ac, 0x58cc, 0x58e9, 0x5902, + 0x5921, 0x593f, 0x5950, 0x5961, 0x597f, 0x599e, 0x59ce, 0x59ed, + 0x5a06, 0x5a1e, 0x5a39, 0x5a4f, 0x5a6b, 0x5a81, 0x5a98, 0x5ab5, + 0x5acb, 0x5aea, 0x5b11, 0x5b2f, 0x5b4d, 0x5b6b, 0x5b89, 0x5ba7, + 0x5bc5, 0x5be3, 0x5c01, 0x5c1f, 0x5c3d, 0x5c5b, 0x5c79, 0x5c97, + 0x5cb0, 0x5cc7, 0x5ce9, 0x5d09, 0x5d1b, 0x5d33, 0x5d5a, 0x5d7f, + 0x5d92, 0x5dba, 0x5de0, 0x5e0f, 0x5e22, 0x5e3a, 0x5e45, 0x5e5a, + // Entry 340 - 37F + 0x5e7f, 0x5e8f, 0x5eb6, 0x5ed9, 0x5efd, 0x5f24, 0x5f4b, 0x5f70, + 0x5fa0, 0x5fba, 0x5fd3, 0x5fed, 0x6007, 0x6023, 0x603c, 0x6054, + 0x606e, 0x6087, 0x60a1, 0x60bb, 0x60d2, 0x60e9, 0x6100, 0x611c, + 0x6133, 0x614b, 0x6165, 0x617d, 0x6199, 0x61b1, 0x61c9, 0x61e1, + 0x61fb, 0x6223, 0x624e, 0x6271, 0x6296, 0x62b7, 0x62d9, 0x630c, + 0x6324, 0x633b, 0x6353, 0x636b, 0x6385, 0x639c, 0x63b2, 0x63ca, + 0x63e1, 0x63f9, 0x6411, 0x6426, 0x643b, 0x6450, 0x646a, 0x647f, + 0x6495, 0x64b3, 0x64cb, 0x64e1, 0x64fb, 0x6511, 0x6527, 0x653d, + // Entry 380 - 3BF + 0x6555, 0x657b, 0x65a4, 0x65c9, 0x65ee, 0x6611, 0x6629, 0x663a, + 0x664c, 0x666a, 0x6692, 0x66be, 0x66ce, 0x66dd, 0x66ed, 0x6707, + 0x6727, 0x673a, 0x6753, 0x6767, 0x6781, 0x6793, 0x67ab, 0x67bd, + 0x67d5, 0x67ef, 0x6807, 0x6820, 0x6837, 0x6851, 0x6869, 0x6883, + 0x689b, 0x68b7, 0x68d1, 0x68ec, 0x6905, 0x691e, 0x6935, 0x6947, + 0x6957, 0x6970, 0x6980, 0x699a, 0x69b5, 0x69d9, 0x69f1, 0x6a07, + 0x6a28, 0x6a40, 0x6a56, 0x6a72, 0x6a9c, 0x6ac4, 0x6af5, 0x6b1a, + 0x6b34, 0x6b4f, 0x6b6a, 0x6b8e, 0x6ba9, 0x6bd9, 0x6bf3, 0x6c0d, + // Entry 3C0 - 3FF + 0x6c28, 0x6c43, 0x6c5f, 0x6c7a, 0x6c9e, 0x6cbd, 0x6cd9, 0x6cf2, + 0x6d0c, 0x6d26, 0x6d41, 0x6d5b, 0x6d75, 0x6d90, 0x6daa, 0x6dc3, + 0x6de2, 0x6dfc, 0x6e16, 0x6e30, 0x6e4a, 0x6e63, 0x6e7d, 0x6e97, + 0x6eb1, 0x6ecb, 0x6ee4, 0x6efe, 0x6f18, 0x6f33, 0x6f4e, 0x6f69, + 0x6f86, 0x6fa7, 0x6fc3, 0x6fe4, 0x6ffd, 0x7017, 0x7031, 0x7048, + 0x7060, 0x7078, 0x7091, 0x70a9, 0x70c1, 0x70da, 0x70f2, 0x7109, + 0x7126, 0x713e, 0x7156, 0x716e, 0x7186, 0x719d, 0x71b5, 0x71cd, + 0x71e5, 0x71fd, 0x7214, 0x722c, 0x7244, 0x725d, 0x7276, 0x728f, + // Entry 400 - 43F + 0x72aa, 0x72c9, 0x72e3, 0x7302, 0x7319, 0x7331, 0x7349, 0x736c, + 0x7384, 0x739d, 0x73b6, 0x73d8, 0x73f1, 0x741f, 0x7437, 0x744f, + 0x7468, 0x7481, 0x749b, 0x74b4, 0x74d6, 0x74f3, 0x750d, 0x752a, + 0x7545, 0x7560, 0x7579, 0x759b, 0x75bb, 0x75dd, 0x75fd, 0x7628, + 0x7651, 0x7670, 0x768d, 0x76b5, 0x76db, 0x76f6, 0x770f, 0x772a, + 0x7743, 0x775f, 0x7779, 0x7798, 0x77b5, 0x77ed, 0x7823, 0x783d, + 0x7855, 0x7878, 0x7899, 0x78c1, 0x78e7, 0x7901, 0x7919, 0x7936, + 0x7951, 0x7968, 0x7980, 0x79a1, 0x79c2, 0x79e3, 0x79fe, 0x7a27, + // Entry 440 - 47F + 0x7a47, 0x7a70, 0x7a97, 0x7abc, 0x7adf, 0x7b03, 0x7b25, 0x7b4c, + 0x7b71, 0x7b98, 0x7bbd, 0x7be9, 0x7c13, 0x7c3d, 0x7c65, 0x7c8e, + 0x7cb5, 0x7cde, 0x7d05, 0x7d34, 0x7d61, 0x7d87, 0x7dab, 0x7dcd, + 0x7ded, 0x7e16, 0x7e3d, 0x7e5d, 0x7e7b, 0x7ea6, 0x7ecf, 0x7ef3, + 0x7f15, 0x7f3e, 0x7f65, 0x7f8e, 0x7fb5, 0x7fd7, 0x7ff7, 0x8025, + 0x8051, 0x807a, 0x80a1, 0x80c1, 0x80df, 0x8109, 0x8131, 0x8161, + 0x818f, 0x81ab, 0x81c5, 0x81ea, 0x820d, 0x8241, 0x8273, 0x828b, + 0x82b1, 0x82d5, 0x82f9, 0x831b, 0x833f, 0x8361, 0x8385, 0x83a7, + // Entry 480 - 4BF + 0x83cb, 0x83ed, 0x8413, 0x8437, 0x845b, 0x847d, 0x849b, 0x84bf, + 0x84e1, 0x8509, 0x852f, 0x854d, 0x8569, 0x858e, 0x85b1, 0x85ce, + 0x85e9, 0x8615, 0x863f, 0x8669, 0x8691, 0x86ba, 0x86e1, 0x8706, + 0x8729, 0x874e, 0x8771, 0x8799, 0x87bf, 0x87e7, 0x880d, 0x882d, + 0x884b, 0x887a, 0x88a7, 0x88cf, 0x88f5, 0x891a, 0x893d, 0x8965, + 0x898b, 0x89b6, 0x89df, 0x8a09, 0x8a31, 0x8a5b, 0x8a83, 0x8aae, + 0x8ad7, 0x8b07, 0x8b35, 0x8b59, 0x8b7b, 0x8ba1, 0x8bc5, 0x8be4, + 0x8c01, 0x8c21, 0x8c3f, 0x8c5f, 0x8c7d, 0x8c9e, 0x8cbd, 0x8cdd, + // Entry 4C0 - 4FF + 0x8cfb, 0x8d1b, 0x8d39, 0x8d59, 0x8d77, 0x8d97, 0x8db5, 0x8dd8, + 0x8df9, 0x8e1d, 0x8e3f, 0x8e5a, 0x8e73, 0x8e8e, 0x8ea7, 0x8ec2, + 0x8edb, 0x8ef5, 0x8f0d, 0x8f27, 0x8f3f, 0x8f5f, 0x8f7d, 0x8fa8, + 0x8fd1, 0x8ffc, 0x9025, 0x904e, 0x9075, 0x90a0, 0x90c9, 0x90f2, + 0x9119, 0x9136, 0x9151, 0x916d, 0x9187, 0x91b0, 0x91d7, 0x91f2, + 0x920d, 0x9228, 0x9242, 0x925d, 0x9277, 0x9291, 0x92ab, 0x92c5, + 0x92e0, 0x92fb, 0x9317, 0x9332, 0x934c, 0x9367, 0x9381, 0x939b, + 0x93b7, 0x93d3, 0x93ee, 0x9408, 0x9423, 0x943e, 0x9458, 0x9473, + // Entry 500 - 53F + 0x948e, 0x94aa, 0x94c4, 0x94df, 0x94fa, 0x9516, 0x9531, 0x954b, + 0x9567, 0x9583, 0x959e, 0x95b8, 0x95d3, 0x95fa, 0x960d, 0x9623, + 0x963c, 0x964a, 0x9660, 0x967a, 0x9693, 0x96ac, 0x96c5, 0x96dd, + 0x96f6, 0x970e, 0x9726, 0x973e, 0x9756, 0x976f, 0x9788, 0x97a2, + 0x97bb, 0x97d3, 0x97ec, 0x9804, 0x981c, 0x9836, 0x9850, 0x9869, + 0x9881, 0x989a, 0x98b3, 0x98cb, 0x98e4, 0x98fd, 0x9917, 0x992f, + 0x9948, 0x9961, 0x997b, 0x9994, 0x99ac, 0x99c6, 0x99e0, 0x99f9, + 0x9a11, 0x9a2a, 0x9a4a, 0x9a5c, 0x9a6b, 0x9a8e, 0x9ab0, 0x9ac2, + // Entry 540 - 57F + 0x9ad7, 0x9aea, 0x9b02, 0x9b1b, 0x9b34, 0x9b48, 0x9b5b, 0x9b6e, + 0x9b82, 0x9b95, 0x9ba8, 0x9bbc, 0x9bd7, 0x9bee, 0x9c07, 0x9c23, + 0x9c36, 0x9c50, 0x9c63, 0x9c79, 0x9c8d, 0x9ca8, 0x9cbb, 0x9cce, + 0x9cea, 0x9d06, 0x9d17, 0x9d29, 0x9d3b, 0x9d4e, 0x9d67, 0x9d79, + 0x9d91, 0x9da9, 0x9dc2, 0x9dd4, 0x9de6, 0x9df8, 0x9e0a, 0x9e1d, + 0x9e2f, 0x9e4f, 0x9e62, 0x9e7e, 0x9e90, 0x9ea8, 0x9eb9, 0x9ed1, + 0x9ee6, 0x9efa, 0x9f16, 0x9f2b, 0x9f40, 0x9f5e, 0x9f77, 0x9f89, + 0x9f9a, 0x9fad, 0x9fc0, 0x9fd0, 0x9fe1, 0x9ff4, 0xa005, 0xa016, + // Entry 580 - 5BF + 0xa027, 0xa03e, 0xa04f, 0xa062, 0xa079, 0xa08a, 0xa0a1, 0xa0b2, + 0xa0c6, 0xa0d8, 0xa0ee, 0xa0fe, 0xa117, 0xa12a, 0xa13b, 0xa14d, + 0xa15f, 0xa170, 0xa192, 0xa1b1, 0xa1d3, 0xa1ec, 0xa208, 0xa21a, + 0xa22b, 0xa241, 0xa252, 0xa264, 0xa27c, 0xa292, 0xa2aa, 0xa2b4, + 0xa2cf, 0xa2f1, 0xa2fd, 0xa309, 0xa31e, 0xa336, 0xa347, 0xa36f, + 0xa38a, 0xa3a8, 0xa3c5, 0xa3da, 0xa3ef, 0xa420, 0xa436, 0xa448, + 0xa45a, 0xa46c, 0xa47c, 0xa48e, 0xa4b0, 0xa4c4, 0xa4de, 0xa4f1, + 0xa514, 0xa537, 0xa559, 0xa57c, 0xa59e, 0xa5b0, 0xa5c1, 0xa5da, + // Entry 5C0 - 5FF + 0xa5eb, 0xa5fd, 0xa60f, 0xa620, 0xa632, 0xa643, 0xa655, 0xa666, + 0xa678, 0xa68a, 0xa69d, 0xa6ae, 0xa6bf, 0xa6d0, 0xa6e1, 0xa6f2, + 0xa705, 0xa72c, 0xa755, 0xa77c, 0xa7a7, 0xa7d4, 0xa7e2, 0xa7f3, + 0xa804, 0xa815, 0xa826, 0xa838, 0xa84a, 0xa85b, 0xa86c, 0xa886, + 0xa897, 0xa8a6, 0xa8b5, 0xa8c4, 0xa8d0, 0xa8dc, 0xa8e8, 0xa8f5, + 0xa901, 0xa914, 0xa926, 0xa938, 0xa94d, 0xa962, 0xa979, 0xa988, + 0xa9a7, 0xa9cf, 0xa9ea, 0xa9ff, 0xaa19, 0xaa30, 0xaa47, 0xaa5d, + 0xaa73, 0xaa8b, 0xaaa2, 0xaab9, 0xaacf, 0xaae7, 0xaaff, 0xab16, + // Entry 600 - 63F + 0xab29, 0xab41, 0xab5b, 0xab73, 0xab8c, 0xaba5, 0xabc3, 0xabdb, + 0xac03, 0xac2b, 0xac43, 0xac60, 0xac7c, 0xac9c, 0xacb8, 0xacca, + 0xacde, 0xacf0, 0xad0b, 0xad3c, 0xad4d, 0xad60, 0xad73, 0xad95, + 0xadc3, 0xadd5, 0xade7, 0xae0e, 0xae21, 0xae36, 0xae48, 0xae63, + 0xae83, 0xaeb1, 0xaec4, 0xaed8, 0xaee9, 0xaf1a, 0xaf40, 0xaf52, + 0xaf70, 0xaf8b, 0xafab, 0xafcf, 0xaffd, 0xb022, 0xb033, 0xb059, + 0xb088, 0xb0b0, 0xb0ed, 0xb112, 0xb139, 0xb160, 0xb187, 0xb1a0, + 0xb1c6, 0xb1e6, 0xb1f7, 0xb21e, 0xb231, 0xb251, 0xb278, 0xb28b, + // Entry 640 - 67F + 0xb2a2, 0xb2bd, 0xb2dd, 0xb2ed, 0xb314, 0xb325, 0xb340, 0xb353, + 0xb378, 0xb38a, 0xb3b1, 0xb3cf, 0xb3ef, 0xb416, 0xb43d, 0xb45e, + 0xb477, 0xb48a, 0xb4a6, 0xb4ce, 0xb4eb, 0xb50d, 0xb52d, 0xb543, + 0xb56a, 0xb588, 0xb5a3, 0xb5bb, 0xb5cb, 0xb5da, 0xb5ea, 0xb602, + 0xb627, 0xb637, 0xb64e, 0xb669, 0xb687, 0xb6a7, 0xb6b6, 0xb6dd, + 0xb6f5, 0xb71e, 0xb72e, 0xb73e, 0xb777, 0xb7b0, 0xb7d3, 0xb7ed, + 0xb803, 0xb81f, 0xb835, 0xb847, 0xb862, 0xb880, 0xb8aa, 0xb8d0, + 0xb8f4, 0xb909, 0xb920, 0xb930, 0xb940, 0xb955, 0xb96b, 0xb981, + // Entry 680 - 6BF + 0xb99d, 0xb9ba, 0xb9e5, 0xb9fa, 0xba1b, 0xba3c, 0xba5c, 0xba7b, + 0xba9a, 0xbabb, 0xbadb, 0xbafb, 0xbb1a, 0xbb3b, 0xbb5c, 0xbb7c, + 0xbb9e, 0xbbbe, 0xbbe0, 0xbbfc, 0xbc1f, 0xbc40, 0xbc57, 0xbc73, + 0xbc8d, 0xbca5, 0xbcbb, 0xbcd2, 0xbcea, 0xbd03, 0xbd27, 0xbd4a, + 0xbd5c, 0xbd72, 0xbd8b, 0xbda5, 0xbdbd, 0xbdd0, 0xbdef, 0xbe01, + 0xbe14, 0xbe30, 0xbe44, 0xbe65, 0xbe75, 0xbe86, 0xbe98, 0xbeaa, + 0xbebc, 0xbed7, 0xbee9, 0xbefe, 0xbf10, 0xbf24, 0xbf35, 0xbf46, + 0xbf5b, 0xbf76, 0xbf85, 0xbf95, 0xbfae, 0xbfc1, 0xbfd3, 0xbfe5, + // Entry 6C0 - 6FF + 0xbff7, 0xc008, 0xc023, 0xc03f, 0xc05c, 0xc06f, 0xc082, 0xc096, + 0xc0a9, 0xc0bc, 0xc0d0, 0xc0e2, 0xc0f4, 0xc112, 0xc12d, 0xc13f, + 0xc151, 0xc16a, 0xc17c, 0xc18e, 0xc19a, 0xc1ad, 0xc1bd, 0xc1cc, + 0xc1ea, 0xc208, 0xc21f, 0xc236, 0xc24f, 0xc268, 0xc274, 0xc282, + 0xc29d, 0xc2b8, 0xc2d0, 0xc304, 0xc339, 0xc371, 0xc3bc, 0xc3ef, + 0xc41c, 0xc43a, 0xc45f, 0xc497, 0xc4d5, 0xc502, 0xc51f, 0xc546, + 0xc56b, 0xc5a5, 0xc5d5, 0xc5fa, 0xc632, 0xc654, 0xc67d, 0xc6b7, + 0xc6d8, 0xc6f9, 0xc71f, 0xc740, 0xc75f, 0xc779, 0xc7a9, 0xc7cb, + // Entry 700 - 73F + 0xc7fc, 0xc830, 0xc86b, 0xc8a7, 0xc8e2, 0xc916, 0xc953, 0xc992, + 0xc9d4, 0xca18, 0xca5b, 0xca97, 0xcad5, 0xcb18, 0xcb5d, 0xcb9a, + 0xcbd8, 0xcbfa, 0xcc1f, 0xcc30, 0xcc47, 0xcc5a, 0xcc6b, 0xcc7c, + 0xcc93, 0xcca6, 0xccb9, 0xcccc, 0xccdf, 0xccf2, 0xcd06, 0xcd18, + 0xcd2b, 0xcd3e, 0xcd55, 0xcd68, 0xcd7e, 0xcd94, 0xcdaa, 0xcdbb, + 0xcdd1, 0xcde7, 0xcdfe, 0xce10, 0xce22, 0xce34, 0xce48, 0xce59, + 0xce6d, 0xce81, 0xce95, 0xcea5, 0xceb5, 0xcec7, 0xcedb, 0xceee, + 0xcf01, 0xcf0f, 0xcf1f, 0xcf2d, 0xcf3d, 0xcf4b, 0xcf5b, 0xcf69, + // Entry 740 - 77F + 0xcf79, 0xcf87, 0xcf97, 0xcfa3, 0xcfb4, 0xcfc2, 0xcfcf, 0xcfdc, + 0xcfeb, 0xcff9, 0xd007, 0xd014, 0xd023, 0xd032, 0xd040, 0xd04c, + 0xd059, 0xd065, 0xd071, 0xd07d, 0xd08a, 0xd096, 0xd0ab, 0xd0b7, + 0xd0c4, 0xd0d1, 0xd0de, 0xd0eb, 0xd0f9, 0xd106, 0xd113, 0xd121, + 0xd12e, 0xd13c, 0xd149, 0xd156, 0xd163, 0xd177, 0xd184, 0xd192, + 0xd19f, 0xd1ac, 0xd1b9, 0xd1c6, 0xd1db, 0xd1ed, 0xd200, 0xd212, + 0xd22f, 0xd24b, 0xd26a, 0xd28c, 0xd2a8, 0xd2c3, 0xd2e1, 0xd300, + 0xd31e, 0xd336, 0xd34d, 0xd361, 0xd376, 0xd37f, 0xd393, 0xd3a1, + // Entry 780 - 7BF + 0xd3b6, 0xd3ca, 0xd3e0, 0xd3f6, 0xd409, 0xd41d, 0xd431, 0xd444, + 0xd458, 0xd46c, 0xd481, 0xd497, 0xd4ab, 0xd4bf, 0xd4d7, 0xd4ea, + 0xd4fd, 0xd515, 0xd529, 0xd53e, 0xd553, 0xd568, 0xd579, 0xd58f, + 0xd5a7, 0xd5bc, 0xd5e4, 0xd601, 0xd61c, 0xd632, 0xd652, 0xd66e, + 0xd685, 0xd6a4, 0xd6bf, 0xd6d5, 0xd6f6, 0xd712, 0xd72d, 0xd743, + 0xd75e, 0xd779, 0xd78f, 0xd7a5, 0xd7bf, 0xd7d5, 0xd7f2, 0xd80e, + 0xd829, 0xd842, 0xd85e, 0xd87e, 0xd899, 0xd8bc, 0xd8d7, 0xd8f2, + 0xd90c, 0xd926, 0xd943, 0xd965, 0xd981, 0xd995, 0xd9a6, 0xd9b7, + // Entry 7C0 - 7FF + 0xd9c8, 0xd9d9, 0xd9ef, 0xda00, 0xda11, 0xda23, 0xda36, 0xda47, + 0xda58, 0xda69, 0xda7a, 0xda8b, 0xda9c, 0xdaad, 0xdabf, 0xdad0, + 0xdae1, 0xdaf3, 0xdb04, 0xdb1b, 0xdb2d, 0xdb3f, 0xdb57, 0xdb70, + 0xdb87, 0xdb9a, 0xdbb5, 0xdbcf, 0xdbea, 0xdc05, 0xdc20, 0xdc3c, + 0xdc57, 0xdc71, 0xdc8c, 0xdca8, 0xdcc3, 0xdce7, 0xdd09, 0xdd2f, + 0xdd54, 0xdd89, 0xdda9, 0xddca, 0xddf2, 0xde27, 0xde5a, 0xde75, + 0xde96, 0xdeb0, 0xdec6, 0xdeed, 0xdf14, 0xdf3a, 0xdf54, 0xdf7c, + 0xdfa3, 0xdfc3, 0xdfea, 0xe011, 0xe037, 0xe05e, 0xe098, 0xe0b1, + // Entry 800 - 83F + 0xe0ca, 0xe0e4, 0xe101, 0xe116, 0xe12b, 0xe140, 0xe161, 0xe181, + 0xe1a4, 0xe1c3, 0xe1e1, 0xe1fd, 0xe217, 0xe233, 0xe254, 0xe270, + 0xe28b, 0xe2a4, 0xe2b6, 0xe2c8, 0xe2da, 0xe2ef, 0xe304, 0xe319, + 0xe332, 0xe34c, 0xe362, 0xe37b, 0xe395, 0xe3ab, 0xe3bf, 0xe3d3, + 0xe3e7, 0xe3fc, 0xe412, 0xe42d, 0xe448, 0xe463, 0xe47f, 0xe49a, + 0xe4b6, 0xe4d9, 0xe505, 0xe52a, 0xe53f, 0xe55f, 0xe583, 0xe59e, + 0xe5b6, 0xe5cd, 0xe5e6, 0xe5f9, 0xe60d, 0xe620, 0xe634, 0xe647, + 0xe65b, 0xe676, 0xe691, 0xe6ab, 0xe6c4, 0xe6d7, 0xe6eb, 0xe705, + // Entry 840 - 87F + 0xe71e, 0xe731, 0xe745, 0xe759, 0xe76e, 0xe782, 0xe797, 0xe7ac, + 0xe7c0, 0xe7d5, 0xe7e9, 0xe7fe, 0xe813, 0xe828, 0xe83e, 0xe853, + 0xe869, 0xe87e, 0xe892, 0xe8a7, 0xe8bb, 0xe8d0, 0xe8e4, 0xe8fa, + 0xe90e, 0xe923, 0xe937, 0xe94c, 0xe960, 0xe974, 0xe988, 0xe99d, + 0xe9b1, 0xe9c6, 0xe9dc, 0xe9f0, 0xea05, 0xea1a, 0xea2e, 0xea42, + 0xea5a, 0xea73, 0xea88, 0xeaa0, 0xeab8, 0xeacf, 0xeae7, 0xeafe, + 0xeb16, 0xeb35, 0xeb55, 0xeb73, 0xeb90, 0xeba7, 0xebbf, 0xebdd, + 0xebfa, 0xec11, 0xec29, 0xec3f, 0xec64, 0xec7c, 0xec89, 0xeca6, + // Entry 880 - 8BF + 0xecc5, 0xecdc, 0xecf3, 0xed16, 0xed2e, 0xed47, 0xed5b, 0xed71, + 0xed87, 0xed9b, 0xedb2, 0xedc7, 0xeddb, 0xedf0, 0xee0c, 0xee28, + 0xee47, 0xee67, 0xee77, 0xee8e, 0xeea3, 0xeeb7, 0xeecb, 0xeee1, + 0xeef6, 0xef0b, 0xef1f, 0xef35, 0xef4b, 0xef60, 0xef7c, 0xef9c, + 0xefb6, 0xefca, 0xefdf, 0xeff3, 0xf007, 0xf01c, 0xf039, 0xf04e, + 0xf068, 0xf07d, 0xf092, 0xf0b0, 0xf0c6, 0xf0db, 0xf0e7, 0xf0ff, + 0xf114, 0xf128, 0xf138, 0xf149, 0xf159, 0xf16a, 0xf17a, 0xf18b, + 0xf1a3, 0xf1bb, 0xf1cb, 0xf1dc, 0xf1ec, 0xf1fd, 0xf20e, 0xf220, + // Entry 8C0 - 8FF + 0xf231, 0xf243, 0xf255, 0xf266, 0xf278, 0xf289, 0xf29b, 0xf2ad, + 0xf2bf, 0xf2d2, 0xf2e4, 0xf2f7, 0xf309, 0xf31a, 0xf32c, 0xf33d, + 0xf34f, 0xf360, 0xf371, 0xf383, 0xf394, 0xf3a6, 0xf3b7, 0xf3c8, + 0xf3d9, 0xf3ea, 0xf3fc, 0xf40e, 0xf41f, 0xf430, 0xf442, 0xf457, + 0xf46c, 0xf480, 0xf495, 0xf4a9, 0xf4be, 0xf4da, 0xf4f7, 0xf50b, + 0xf520, 0xf534, 0xf549, 0xf55c, 0xf574, 0xf58a, 0xf59c, 0xf5ae, + 0xf5c0, 0xf5d9, 0xf5f2, 0xf60e, 0xf62b, 0xf63d, 0xf64e, 0xf65f, + 0xf672, 0xf684, 0xf696, 0xf6a7, 0xf6ba, 0xf6cd, 0xf6df, 0xf705, + // Entry 900 - 93F + 0xf72a, 0xf73c, 0xf74e, 0xf76c, 0xf78a, 0xf7aa, 0xf7c9, 0xf801, + 0xf825, 0xf833, 0xf845, 0xf862, 0xf87b, 0xf893, 0xf8a6, 0xf8bb, + 0xf8cc, 0xf8de, 0xf8ef, 0xf901, 0xf912, 0xf924, 0xf936, 0xf948, + 0xf95a, 0xf96c, 0xf97e, 0xf991, 0xf9a3, 0xf9b6, 0xf9c9, 0xf9db, + 0xf9ee, 0xfa00, 0xfa13, 0xfa26, 0xfa39, 0xfa4d, 0xfa60, 0xfa74, + 0xfa87, 0xfa99, 0xfaac, 0xfabe, 0xfad1, 0xfae3, 0xfaf5, 0xfb08, + 0xfb1a, 0xfb2d, 0xfb3f, 0xfb51, 0xfb63, 0xfb75, 0xfb88, 0xfb9a, + 0xfbad, 0xfbbf, 0xfbd1, 0xfbe4, 0xfbfa, 0xfc0f, 0xfc25, 0xfc3a, + // Entry 940 - 97F + 0xfc50, 0xfc66, 0xfc7c, 0xfc92, 0xfca8, 0xfcbc, 0xfccf, 0xfce3, + 0xfcf7, 0xfd09, 0xfd1c, 0xfd2e, 0xfd41, 0xfd53, 0xfd65, 0xfd79, + 0xfd8c, 0xfd9f, 0xfdb1, 0xfdc5, 0xfdd9, 0xfdec, 0xfdfa, 0xfe08, + 0xfe14, 0xfe20, 0xfe31, 0xfe45, 0xfe5e, 0xfe74, 0xfe89, 0xfe9a, + 0xfeac, 0xfebd, 0xfecf, 0xfee0, 0xfef2, 0xff0b, 0xff24, 0xff3b, + 0xff4c, 0xff5e, 0xff75, 0xff86, 0xff98, 0xffaa, 0xffbd, 0xffcf, + 0xffe2, 0xfff5, 0x0007, 0x001a, 0x002c, 0x003f, 0x0052, 0x0065, + 0x0079, 0x008c, 0x00a0, 0x00b3, 0x00c5, 0x00d8, 0x00ea, 0x00fd, + // Entry 980 - 9BF + 0x010f, 0x0121, 0x0134, 0x0146, 0x0159, 0x016b, 0x017d, 0x018f, + 0x01a1, 0x01b4, 0x01c6, 0x01d9, 0x01ec, 0x01fe, 0x0210, 0x0223, + 0x0239, 0x024f, 0x0264, 0x027a, 0x028f, 0x02a5, 0x02c2, 0x02e0, + 0x02fc, 0x0311, 0x0327, 0x0343, 0x0358, 0x036e, 0x0382, 0x038d, + 0x03a7, 0x03c1, 0x03de, 0x03fc, 0x040f, 0x0421, 0x0433, 0x0447, + 0x045a, 0x046d, 0x047f, 0x0493, 0x04a7, 0x04ba, 0x04d4, 0x04e7, + 0x04fa, 0x050d, 0x0521, 0x0535, 0x0558, 0x0578, 0x059c, 0x05b2, + 0x05c5, 0x05d7, 0x05e5, 0x05f4, 0x0602, 0x0611, 0x061f, 0x062e, + // Entry 9C0 - 9FF + 0x0644, 0x065a, 0x0668, 0x0677, 0x0685, 0x0694, 0x06a3, 0x06b3, + 0x06c2, 0x06d2, 0x06e2, 0x06f1, 0x0701, 0x0710, 0x0720, 0x0730, + 0x0740, 0x0751, 0x0761, 0x0772, 0x0782, 0x0791, 0x07a1, 0x07b0, + 0x07c0, 0x07cf, 0x07de, 0x07ee, 0x07fd, 0x080d, 0x081c, 0x082b, + 0x083a, 0x0849, 0x0859, 0x0868, 0x0878, 0x0888, 0x0897, 0x08a6, + 0x08b6, 0x08c9, 0x08dc, 0x08ee, 0x0901, 0x0913, 0x0926, 0x0940, + 0x095b, 0x096d, 0x0980, 0x0992, 0x09a5, 0x09b6, 0x09ca, 0x09de, + 0x09ee, 0x09fe, 0x0a0e, 0x0a25, 0x0a3c, 0x0a56, 0x0a71, 0x0a81, + // Entry A00 - A3F + 0x0a90, 0x0a9f, 0x0ab0, 0x0ac0, 0x0ad0, 0x0adf, 0x0af0, 0x0b01, + 0x0b11, 0x0b1d, 0x0b2c, 0x0b46, 0x0b5d, 0x0b7a, 0x0b96, 0x0baf, + 0x0bce, 0x0be1, 0x0bf3, 0x0c01, 0x0c10, 0x0c1e, 0x0c2d, 0x0c3b, + 0x0c4a, 0x0c58, 0x0c67, 0x0c76, 0x0c84, 0x0c93, 0x0ca2, 0x0cb1, + 0x0cc1, 0x0cd0, 0x0cdf, 0x0cef, 0x0cff, 0x0d0f, 0x0d1e, 0x0d2d, + 0x0d3e, 0x0d4d, 0x0d5c, 0x0d6b, 0x0d7a, 0x0d8a, 0x0d99, 0x0da9, + 0x0dba, 0x0dc9, 0x0dd9, 0x0de9, 0x0df8, 0x0e07, 0x0e1a, 0x0e2c, + 0x0e3f, 0x0e51, 0x0e64, 0x0e76, 0x0e89, 0x0e9c, 0x0eae, 0x0ec1, + // Entry A40 - A7F + 0x0ed4, 0x0ee5, 0x0eed, 0x0f01, 0x0f11, 0x0f20, 0x0f2f, 0x0f40, + 0x0f50, 0x0f60, 0x0f6f, 0x0f80, 0x0f91, 0x0fa1, 0x0fb1, 0x0fc9, + 0x0fe2, 0x0ff0, 0x1000, 0x100f, 0x101f, 0x1030, 0x1043, 0x1053, + 0x1064, 0x108b, 0x10a2, 0x10b6, 0x10c9, 0x10d8, 0x10e8, 0x10f7, + 0x1107, 0x1116, 0x1126, 0x113d, 0x1154, 0x1163, 0x1173, 0x1183, + 0x1192, 0x11a2, 0x11b2, 0x11c2, 0x11d3, 0x11e3, 0x11f4, 0x1205, + 0x1215, 0x1226, 0x1236, 0x1247, 0x1258, 0x1269, 0x127b, 0x128c, + 0x129e, 0x12af, 0x12bf, 0x12d0, 0x12e0, 0x12f1, 0x1301, 0x1311, + // Entry A80 - ABF + 0x1322, 0x1332, 0x1343, 0x1353, 0x1363, 0x1373, 0x1384, 0x1394, + 0x13a5, 0x13b7, 0x13c7, 0x13d8, 0x13e9, 0x13f9, 0x1409, 0x141d, + 0x1431, 0x1444, 0x1458, 0x146b, 0x147f, 0x149a, 0x14b6, 0x14c9, + 0x14dd, 0x14f1, 0x1504, 0x1518, 0x152c, 0x153e, 0x1550, 0x1565, + 0x1576, 0x1587, 0x1599, 0x15b1, 0x15c9, 0x15e4, 0x1600, 0x1611, + 0x1621, 0x1631, 0x1643, 0x1654, 0x1665, 0x1675, 0x1687, 0x1699, + 0x16aa, 0x16db, 0x170b, 0x173b, 0x176d, 0x179e, 0x17cf, 0x1802, + 0x1813, 0x1833, 0x184b, 0x1860, 0x1874, 0x1884, 0x1895, 0x18a5, + // Entry AC0 - AFF + 0x18b6, 0x18c6, 0x18d7, 0x18ef, 0x1907, 0x1917, 0x1928, 0x1939, + 0x1949, 0x195a, 0x196b, 0x197c, 0x198e, 0x199f, 0x19b1, 0x19c3, + 0x19d4, 0x19e6, 0x19f7, 0x1a09, 0x1a1b, 0x1a2d, 0x1a40, 0x1a52, + 0x1a65, 0x1a77, 0x1a88, 0x1a9a, 0x1aab, 0x1abd, 0x1ace, 0x1adf, + 0x1af1, 0x1b02, 0x1b14, 0x1b25, 0x1b36, 0x1b47, 0x1b59, 0x1b6a, + 0x1b7c, 0x1b8d, 0x1b9f, 0x1bb1, 0x1bc2, 0x1bd3, 0x1be5, 0x1bfa, + 0x1c0f, 0x1c23, 0x1c38, 0x1c4c, 0x1c61, 0x1c7d, 0x1c9a, 0x1cae, + 0x1cc3, 0x1cd8, 0x1cec, 0x1d01, 0x1d16, 0x1d29, 0x1d3c, 0x1d52, + // Entry B00 - B3F + 0x1d63, 0x1d7c, 0x1d95, 0x1db1, 0x1dce, 0x1de0, 0x1df1, 0x1e02, + 0x1e15, 0x1e27, 0x1e39, 0x1e4a, 0x1e5d, 0x1e70, 0x1e82, 0x1e9a, + 0x1eb2, 0x1ed9, 0x1ef3, 0x1f0a, 0x1f20, 0x1f32, 0x1f45, 0x1f57, + 0x1f6a, 0x1f7c, 0x1f8f, 0x1fa9, 0x1fc3, 0x1fd5, 0x1fe8, 0x1ffb, + 0x200d, 0x2020, 0x2033, 0x2046, 0x205a, 0x206d, 0x2081, 0x2095, + 0x20a8, 0x20bc, 0x20cf, 0x20e3, 0x20f7, 0x210b, 0x2120, 0x2134, + 0x2149, 0x215d, 0x2170, 0x2184, 0x2197, 0x21ab, 0x21be, 0x21d3, + 0x21e6, 0x21fa, 0x220d, 0x2221, 0x2234, 0x2247, 0x225a, 0x226e, + // Entry B40 - B7F + 0x2281, 0x2295, 0x22aa, 0x22bd, 0x22d1, 0x22e5, 0x22f8, 0x230b, + 0x2320, 0x2342, 0x2360, 0x2377, 0x238e, 0x23a4, 0x23bb, 0x23d1, + 0x23e8, 0x2406, 0x2425, 0x243b, 0x2452, 0x2469, 0x247f, 0x2496, + 0x24ad, 0x24c2, 0x24db, 0x24ee, 0x2507, 0x2520, 0x253b, 0x2553, + 0x2582, 0x25a1, 0x25c4, 0x25e4, 0x2600, 0x2623, 0x263f, 0x265a, + 0x2675, 0x2690, 0x26ae, 0x26cd, 0x26e1, 0x26f4, 0x2707, 0x271c, + 0x2730, 0x2744, 0x2757, 0x276c, 0x2781, 0x2795, 0x27a9, 0x27c5, + 0x27e2, 0x2800, 0x281b, 0x283c, 0x285c, 0x2879, 0x289c, 0x28af, + // Entry B80 - BBF + 0x28c9, 0x28e2, 0x28fc, 0x2915, 0x292f, 0x2948, 0x295f, 0x2975, + 0x298a, 0x29a0, 0x29b6, 0x29cd, 0x29e2, 0x29f8, 0x2a0d, 0x2a23, + 0x2a3a, 0x2a52, 0x2a69, 0x2a81, 0x2a96, 0x2aac, 0x2ac2, 0x2ad7, + 0x2aed, 0x2b03, 0x2b24, 0x2b46, 0x2b67, 0x2b89, 0x2baa, 0x2bc8, + 0x2be9, 0x2c0b, 0x2c2c, 0x2c4e, 0x2c6f, 0x2c9a, 0x2cb8, 0x2cda, + 0x2cfd, 0x2d1f, 0x2d42, 0x2d62, 0x2d81, 0x2da2, 0x2dc4, 0x2de5, + 0x2e07, 0x2e25, 0x2e43, 0x2e64, 0x2e86, 0x2ea7, 0x2ec9, 0x2edf, + 0x2efa, 0x2f10, 0x2f26, 0x2f44, 0x2f5a, 0x2f78, 0x2f98, 0x2fb6, + // Entry BC0 - BFF + 0x2fcc, 0x2fec, 0x3002, 0x3018, 0x3035, 0x3058, 0x307a, 0x309b, + 0x30bb, 0x30dd, 0x30fe, 0x311d, 0x3137, 0x3156, 0x3173, 0x319c, + 0x31ca, 0x31f4, 0x3212, 0x3229, 0x323f, 0x3255, 0x326d, 0x3284, + 0x329b, 0x32b1, 0x32c9, 0x32e1, 0x32f8, 0x331c, 0x333f, 0x335d, + 0x3372, 0x3389, 0x33a1, 0x33b9, 0x33d0, 0x33ea, 0x3400, 0x3417, + 0x342f, 0x3447, 0x345b, 0x3472, 0x3488, 0x349f, 0x34b6, 0x34cd, + 0x34ea, 0x3504, 0x3519, 0x352e, 0x3543, 0x355b, 0x3574, 0x358c, + 0x35a0, 0x35b8, 0x35cd, 0x35e5, 0x35f9, 0x3610, 0x3625, 0x363f, + // Entry C00 - C3F + 0x3653, 0x3668, 0x367d, 0x368e, 0x36a4, 0x36b5, 0x36cb, 0x36e1, + 0x36f7, 0x370c, 0x3721, 0x3738, 0x374c, 0x3764, 0x377c, 0x3791, + 0x37ac, 0x37c2, 0x37d8, 0x37ed, 0x3803, 0x3819, 0x3830, 0x3845, + 0x385b, 0x3871, 0x388a, 0x389f, 0x38b5, 0x38ca, 0x38e8, 0x3907, + 0x3921, 0x3938, 0x3950, 0x3965, 0x397b, 0x3991, 0x39ac, 0x39c6, + 0x39dd, 0x39f4, 0x3a0a, 0x3a19, 0x3a27, 0x3a35, 0x3a45, 0x3a54, + 0x3a63, 0x3a71, 0x3a81, 0x3a91, 0x3aa0, 0x3ab9, 0x3ace, 0x3adb, + 0x3aee, 0x3b00, 0x3b0e, 0x3b1b, 0x3b2c, 0x3b3a, 0x3b47, 0x3b54, + // Entry C40 - C7F + 0x3b67, 0x3b79, 0x3b86, 0x3b93, 0x3ba0, 0x3bb3, 0x3bc4, 0x3bd6, + 0x3be8, 0x3bf5, 0x3c02, 0x3c14, 0x3c26, 0x3c33, 0x3c45, 0x3c57, + 0x3c63, 0x3c74, 0x3c80, 0x3c90, 0x3ca6, 0x3cb7, 0x3cc8, 0x3cd8, + 0x3ce9, 0x3cf9, 0x3d0a, 0x3d1a, 0x3d2b, 0x3d41, 0x3d56, 0x3d6c, + 0x3d7c, 0x3d8d, 0x3d9d, 0x3dae, 0x3dbf, 0x3dc8, 0x3dd7, 0x3de7, + 0x3df6, 0x3e09, 0x3e1e, 0x3e2b, 0x3e39, 0x3e46, 0x3e53, 0x3e62, + 0x3e70, 0x3e7e, 0x3e8b, 0x3e9a, 0x3ea9, 0x3eb7, 0x3ec0, 0x3ec9, + 0x3edb, 0x3eee, 0x3f01, 0x3f26, 0x3f50, 0x3f7b, 0x3f9f, 0x3fc3, + // Entry C80 - CBF + 0x3fea, 0x400c, 0x4023, 0x403d, 0x405b, 0x407b, 0x409d, 0x40ae, + 0x40c4, 0x40db, 0x40f7, 0x4118, 0x4133, 0x415d, 0x4174, 0x4194, + 0x41b4, 0x41e3, 0x4206, 0x422c, 0x4247, 0x4263, 0x427e, 0x4298, + 0x42b3, 0x42d2, 0x42e4, 0x42f5, 0x4306, 0x4319, 0x432b, 0x433d, + 0x434e, 0x4361, 0x4374, 0x4386, 0x439c, 0x43b2, 0x43ca, 0x43e1, + 0x43f8, 0x440e, 0x4426, 0x443e, 0x4455, 0x446c, 0x4484, 0x44a3, + 0x44ce, 0x44f0, 0x4504, 0x451a, 0x4535, 0x4550, 0x456b, 0x4586, + 0x459c, 0x45b2, 0x45c3, 0x45d5, 0x45e6, 0x45f8, 0x460a, 0x461b, + // Entry CC0 - CFF + 0x462d, 0x463e, 0x4650, 0x4662, 0x4675, 0x4687, 0x469a, 0x46ac, + 0x46bd, 0x46cf, 0x46e0, 0x46f2, 0x4703, 0x4714, 0x4726, 0x4737, + 0x4749, 0x475a, 0x476c, 0x477f, 0x4791, 0x47a4, 0x47b5, 0x47c7, + 0x47d8, 0x47e9, 0x47fa, 0x480b, 0x481c, 0x482e, 0x4840, 0x4851, + 0x4862, 0x4872, 0x4885, 0x48a1, 0x48b3, 0x48c5, 0x48da, 0x48ee, + 0x4903, 0x4917, 0x492c, 0x4948, 0x4965, 0x4981, 0x499e, 0x49b2, + 0x49c7, 0x49db, 0x49f0, 0x4a0b, 0x4a21, 0x4a3e, 0x4a5c, 0x4a77, + 0x4a8c, 0x4aa0, 0x4ab3, 0x4ac9, 0x4ae0, 0x4af8, 0x4b0d, 0x4b29, + // Entry D00 - D3F + 0x4b45, 0x4b63, 0x4b85, 0x4ba4, 0x4bcc, 0x4be7, 0x4c03, 0x4c1e, + 0x4c3a, 0x4c56, 0x4c71, 0x4c8d, 0x4ca8, 0x4cc4, 0x4ce0, 0x4cfd, + 0x4d19, 0x4d36, 0x4d52, 0x4d6d, 0x4d89, 0x4da4, 0x4dc0, 0x4ddb, + 0x4df6, 0x4e12, 0x4e2d, 0x4e49, 0x4e64, 0x4e80, 0x4e9d, 0x4eb9, + 0x4ed6, 0x4ef1, 0x4f0d, 0x4f28, 0x4f43, 0x4f5e, 0x4f79, 0x4f94, + 0x4fb0, 0x4fcc, 0x4fe7, 0x5002, 0x501c, 0x5039, 0x505f, 0x5085, + 0x50ab, 0x50bc, 0x50da, 0x50fe, 0x5122, 0x5145, 0x5169, 0x517f, + 0x5195, 0x51ae, 0x51ce, 0x51e4, 0x51f9, 0x521a, 0x523b, 0x525c, + // Entry D40 - D7F + 0x527b, 0x5295, 0x52b9, 0x52dc, 0x52f3, 0x5323, 0x5353, 0x536b, + 0x5382, 0x53a4, 0x53c5, 0x53e5, 0x5406, 0x5417, 0x5429, 0x543a, + 0x544c, 0x545e, 0x546f, 0x5481, 0x5492, 0x54a4, 0x54b6, 0x54c9, + 0x54db, 0x54ee, 0x5500, 0x5513, 0x5525, 0x5536, 0x5548, 0x5559, + 0x556b, 0x557c, 0x558d, 0x559f, 0x55b0, 0x55c2, 0x55d3, 0x55e4, + 0x55f5, 0x5606, 0x5617, 0x5628, 0x5639, 0x564b, 0x565b, 0x5670, + 0x5680, 0x5691, 0x56a1, 0x56b2, 0x56c2, 0x56d6, 0x56e6, 0x56f7, + 0x5711, 0x5726, 0x573a, 0x574f, 0x5763, 0x5778, 0x578c, 0x57a1, + // Entry D80 - DBF + 0x57ba, 0x57d2, 0x57ec, 0x5801, 0x5817, 0x582b, 0x583e, 0x584f, + 0x586f, 0x588f, 0x58af, 0x58cf, 0x58e6, 0x58f8, 0x5909, 0x591a, + 0x592d, 0x593f, 0x5951, 0x5962, 0x5975, 0x5988, 0x599a, 0x59b5, + 0x59c9, 0x59e0, 0x59f8, 0x5a15, 0x5a2c, 0x5a3e, 0x5a50, 0x5a68, + 0x5a81, 0x5a99, 0x5ab2, 0x5ace, 0x5aeb, 0x5b07, 0x5b24, 0x5b3a, + 0x5b50, 0x5b66, 0x5b7c, 0x5ba0, 0x5bc4, 0x5be8, 0x5c05, 0x5c25, + 0x5c47, 0x5c6a, 0x5c8e, 0x5cb2, 0x5cd9, 0x5d00, 0x5d25, 0x5d4a, + 0x5d6f, 0x5d94, 0x5db9, 0x5ddd, 0x5e01, 0x5e26, 0x5e45, 0x5e60, + // Entry DC0 - DFF + 0x5e7a, 0x5e95, 0x5eab, 0x5ec2, 0x5ed8, 0x5eee, 0x5f04, 0x5f1b, + 0x5f31, 0x5f47, 0x5f5e, 0x5f74, 0x5f8a, 0x5fa1, 0x5fb7, 0x5fdc, + 0x5ff6, 0x600f, 0x602e, 0x604d, 0x6065, 0x607d, 0x6095, 0x60ad, + 0x60cd, 0x60ed, 0x6114, 0x6133, 0x6154, 0x616b, 0x6181, 0x6197, + 0x61af, 0x61c6, 0x61dd, 0x61f3, 0x620b, 0x6223, 0x623a, 0x6254, + 0x626e, 0x6288, 0x62a3, 0x62ba, 0x62d9, 0x62f3, 0x630e, 0x6329, + 0x6344, 0x635e, 0x6379, 0x6394, 0x63af, 0x63c9, 0x63e4, 0x63ff, + 0x641a, 0x6435, 0x644f, 0x646a, 0x6486, 0x64a1, 0x64bc, 0x64d7, + // Entry E00 - E3F + 0x64f1, 0x650d, 0x6529, 0x6545, 0x6560, 0x657c, 0x6598, 0x65b3, + 0x65ce, 0x65e9, 0x6605, 0x6620, 0x663c, 0x6657, 0x6671, 0x668c, + 0x66a6, 0x66c1, 0x66dc, 0x66f6, 0x6711, 0x6723, 0x6736, 0x6749, + 0x675c, 0x676e, 0x6781, 0x6794, 0x67a7, 0x67b9, 0x67cc, 0x67df, + 0x67f2, 0x6805, 0x6817, 0x682a, 0x683e, 0x6851, 0x6864, 0x6877, + 0x6889, 0x689d, 0x68b1, 0x68c5, 0x68d8, 0x68ec, 0x6900, 0x6913, + 0x6926, 0x6939, 0x694d, 0x6960, 0x6974, 0x6987, 0x6999, 0x69ac, + 0x69be, 0x69d1, 0x69e4, 0x69f6, 0x6a08, 0x6a1d, 0x6a37, 0x6a4a, + // Entry E40 - E7F + 0x6a66, 0x6a82, 0x6a95, 0x6aae, 0x6ac9, 0x6adf, 0x6afa, 0x6b0f, + 0x6b25, 0x6b40, 0x6b55, 0x6b6a, 0x6b7f, 0x6b99, 0x6bad, 0x6bc6, + 0x6bdb, 0x6bf0, 0x6c0a, 0x6c21, 0x6c38, 0x6c4f, 0x6c66, 0x6c7b, + 0x6c97, 0x6cb1, 0x6ccd, 0x6ce8, 0x6d05, 0x6d20, 0x6d3a, 0x6d55, + 0x6d72, 0x6d8d, 0x6daa, 0x6dc6, 0x6de1, 0x6dfd, 0x6e17, 0x6e38, + 0x6e59, 0x6e79, 0x6e98, 0x6eb8, 0x6ed3, 0x6ef0, 0x6f0d, 0x6f2a, + 0x6f47, 0x6f69, 0x6f84, 0x6f9e, 0x6fb9, 0x6fd3, 0x6fed, 0x7007, + 0x7028, 0x7046, 0x7060, 0x707a, 0x7096, 0x70b2, 0x70ce, 0x70ea, + // Entry E80 - EBF + 0x7104, 0x7120, 0x7141, 0x7160, 0x7184, 0x719b, 0x71b7, 0x71d3, + 0x71ee, 0x7209, 0x7223, 0x7240, 0x725a, 0x7275, 0x7292, 0x72af, + 0x72cc, 0x72e4, 0x72ff, 0x731c, 0x733e, 0x735e, 0x7383, 0x73a2, + 0x73bf, 0x73de, 0x7400, 0x741d, 0x743c, 0x7456, 0x7471, 0x748e, + 0x74a8, 0x74c3, 0x74de, 0x74fa, 0x7510, 0x7527, 0x7539, 0x754c, + 0x755f, 0x7573, 0x7586, 0x7598, 0x75ac, 0x75bf, 0x75d1, 0x75e4, + 0x75f8, 0x760b, 0x761e, 0x7630, 0x7644, 0x7657, 0x766a, 0x767d, + 0x7690, 0x76a3, 0x76b5, 0x76c9, 0x76dd, 0x76f2, 0x7708, 0x771d, + // Entry EC0 - EFF + 0x7732, 0x7748, 0x775e, 0x7774, 0x7789, 0x779d, 0x77b2, 0x77c6, + 0x77da, 0x77f0, 0x7807, 0x781e, 0x7833, 0x7848, 0x785c, 0x7871, + 0x7889, 0x789e, 0x78b2, 0x78c7, 0x78dd, 0x78f2, 0x7909, 0x791f, + 0x7934, 0x7949, 0x795e, 0x7974, 0x7989, 0x799d, 0x79b2, 0x79c6, + 0x79da, 0x79ef, 0x7a07, 0x7a1d, 0x7a36, 0x7a4e, 0x7a66, 0x7a81, + 0x7a96, 0x7aab, 0x7ac2, 0x7ad7, 0x7aed, 0x7b04, 0x7b20, 0x7b3c, + 0x7b52, 0x7b6e, 0x7b8a, 0x7ba1, 0x7bb7, 0x7bd4, 0x7bf0, 0x7c0c, + 0x7c27, 0x7c45, 0x7c63, 0x7c7f, 0x7c95, 0x7cab, 0x7cc6, 0x7cdb, + // Entry F00 - F3F + 0x7cf5, 0x7d0b, 0x7d21, 0x7d39, 0x7d51, 0x7d69, 0x7d81, 0x7d97, + 0x7db4, 0x7dd7, 0x7df4, 0x7e11, 0x7e2c, 0x7e4a, 0x7e68, 0x7e86, + 0x7ea3, 0x7ec5, 0x7ee1, 0x7efe, 0x7f21, 0x7f3c, 0x7f5f, 0x7f80, + 0x7fa1, 0x7fc3, 0x7fe7, 0x8007, 0x8025, 0x8043, 0x8065, 0x8082, + 0x809e, 0x80ba, 0x80d5, 0x80f5, 0x8113, 0x8131, 0x814d, 0x816b, + 0x8187, 0x81a5, 0x81c1, 0x81df, 0x81fb, 0x8217, 0x8232, 0x824d, + 0x8265, 0x8282, 0x82a4, 0x82bf, 0x82dd, 0x82f6, 0x8314, 0x8335, + 0x8353, 0x8373, 0x838f, 0x83ab, 0x83c7, 0x83e3, 0x83ff, 0x841c, + // Entry F40 - F7F + 0x8439, 0x8458, 0x8477, 0x8494, 0x84af, 0x84c3, 0x84d7, 0x84eb, + 0x8500, 0x8515, 0x8529, 0x853d, 0x8552, 0x8566, 0x857a, 0x858e, + 0x85a3, 0x85b8, 0x85cc, 0x85e0, 0x85f5, 0x860a, 0x861f, 0x8634, + 0x864a, 0x8660, 0x8675, 0x868a, 0x86a0, 0x86b4, 0x86c8, 0x86dc, + 0x86f1, 0x8706, 0x871a, 0x872e, 0x8743, 0x8758, 0x876d, 0x8782, + 0x8798, 0x87ae, 0x87c3, 0x87d8, 0x87ee, 0x8802, 0x8816, 0x882a, + 0x883f, 0x8854, 0x8868, 0x887c, 0x8891, 0x88a5, 0x88b9, 0x88cd, + 0x88e2, 0x88f7, 0x890b, 0x891f, 0x8934, 0x8949, 0x895e, 0x8973, + // Entry F80 - FBF + 0x8989, 0x899f, 0x89b4, 0x89c9, 0x89df, 0x89f3, 0x8a07, 0x8a1b, + 0x8a30, 0x8a45, 0x8a59, 0x8a6d, 0x8a82, 0x8a97, 0x8aac, 0x8ac2, + 0x8ad8, 0x8aed, 0x8b02, 0x8b17, 0x8b2c, 0x8b42, 0x8b58, 0x8b6d, + 0x8b82, 0x8b98, 0x8bae, 0x8bc5, 0x8bdc, 0x8bf2, 0x8c06, 0x8c1a, + 0x8c2e, 0x8c43, 0x8c58, 0x8c6c, 0x8c80, 0x8c95, 0x8ca9, 0x8cbd, + 0x8cd1, 0x8ce6, 0x8cfb, 0x8d0f, 0x8d23, 0x8d38, 0x8d4c, 0x8d60, + 0x8d74, 0x8d89, 0x8d9e, 0x8db2, 0x8dc6, 0x8ddb, 0x8def, 0x8e03, + 0x8e17, 0x8e2c, 0x8e41, 0x8e55, 0x8e69, 0x8e7e, 0x8e92, 0x8ea6, + // Entry FC0 - FFF + 0x8eba, 0x8ecf, 0x8ee4, 0x8ef8, 0x8f0c, 0x8f21, 0x8f36, 0x8f4b, + 0x8f61, 0x8f77, 0x8f8c, 0x8fa0, 0x8fb4, 0x8fc8, 0x8fdd, 0x8ff2, + 0x9006, 0x901a, 0x902f, 0x9044, 0x9059, 0x906e, 0x9084, 0x909a, + 0x90af, 0x90c4, 0x90da, 0x90f5, 0x9110, 0x912b, 0x9147, 0x9163, + 0x917e, 0x9199, 0x91b5, 0x91c9, 0x91dd, 0x91f1, 0x9206, 0x921b, + 0x922f, 0x9243, 0x9258, 0x926d, 0x9282, 0x9298, 0x92ae, 0x92c3, + 0x92d8, 0x92ed, 0x9302, 0x9318, 0x932e, 0x9343, 0x9358, 0x936e, + 0x9384, 0x939b, 0x93b2, 0x93c8, 0x93dc, 0x93f0, 0x9404, 0x9419, + // Entry 1000 - 103F + 0x942e, 0x9442, 0x9456, 0x946b, 0x9489, 0x94a7, 0x94c5, 0x94e4, + 0x9503, 0x9521, 0x953f, 0x9553, 0x9567, 0x957b, 0x9590, 0x95a5, + 0x95b9, 0x95cd, 0x95e2, 0x95f7, 0x960c, 0x9621, 0x9637, 0x964d, + 0x9662, 0x9677, 0x968d, 0x96a1, 0x96b5, 0x96c9, 0x96de, 0x96f3, + 0x9707, 0x971b, 0x9730, 0x9744, 0x9758, 0x976c, 0x9781, 0x9796, + 0x97aa, 0x97be, 0x97d3, 0x97e8, 0x97fd, 0x9812, 0x9828, 0x983e, + 0x9853, 0x9868, 0x987e, 0x9892, 0x98a6, 0x98ba, 0x98cf, 0x98e4, + 0x98f8, 0x990c, 0x9921, 0x9935, 0x9949, 0x995d, 0x9972, 0x9987, + // Entry 1040 - 107F + 0x999b, 0x99af, 0x99c4, 0x99d9, 0x99ee, 0x9a04, 0x9a1a, 0x9a2f, + 0x9a44, 0x9a59, 0x9a6e, 0x9a84, 0x9a9a, 0x9aaf, 0x9ac4, 0x9adb, + 0x9af0, 0x9b05, 0x9b1a, 0x9b30, 0x9b46, 0x9b5b, 0x9b70, 0x9b86, + 0x9b9b, 0x9bb0, 0x9bc5, 0x9bdb, 0x9bf1, 0x9c06, 0x9c1b, 0x9c31, + 0x9c46, 0x9c5b, 0x9c70, 0x9c86, 0x9c9c, 0x9cb1, 0x9cc6, 0x9cdc, + 0x9cf1, 0x9d06, 0x9d1b, 0x9d31, 0x9d47, 0x9d5c, 0x9d71, 0x9d87, + 0x9d9c, 0x9db1, 0x9dc6, 0x9ddc, 0x9df2, 0x9e07, 0x9e1c, 0x9e32, + 0x9e46, 0x9e5a, 0x9e6e, 0x9e83, 0x9e98, 0x9eac, 0x9ec0, 0x9ed5, + // Entry 1080 - 10BF + 0x9ee9, 0x9efd, 0x9f11, 0x9f26, 0x9f3b, 0x9f4f, 0x9f63, 0x9f78, + 0x9f8d, 0x9fa2, 0x9fb7, 0x9fea, 0xa00e, 0xa030, 0xa045, 0xa057, + 0xa069, 0xa077, 0xa089, 0xa097, 0xa0ad, 0xa0c3, 0xa0df, 0xa0f1, + 0xa103, 0xa117, 0xa12a, 0xa13d, 0xa14f, 0xa163, 0xa177, 0xa18a, + 0xa19d, 0xa1b3, 0xa1c9, 0xa1de, 0xa1f3, 0xa208, 0xa21f, 0xa235, + 0xa24b, 0xa262, 0xa27e, 0xa29d, 0xa2b2, 0xa2c8, 0xa2dd, 0xa2fc, + 0xa311, 0xa327, 0xa33c, 0xa35b, 0xa370, 0xa386, 0xa39b, 0xa3ba, + 0xa3cf, 0xa3e5, 0xa3fa, 0xa413, 0xa42c, 0xa446, 0xa466, 0xa47f, + // Entry 10C0 - 10FF + 0xa498, 0xa4b2, 0xa4cb, 0xa4ea, 0xa502, 0xa513, 0xa524, 0xa535, + 0xa546, 0xa557, 0xa568, 0xa57a, 0xa58c, 0xa59e, 0xa5b0, 0xa5c2, + 0xa5d4, 0xa5e6, 0xa5f8, 0xa60a, 0xa61c, 0xa62e, 0xa640, 0xa652, + 0xa664, 0xa676, 0xa688, 0xa69a, 0xa6ac, 0xa6be, 0xa6d0, 0xa6e2, + 0xa6f4, 0xa706, 0xa718, 0xa72a, 0xa73d, 0xa750, 0xa762, 0xa774, + 0xa786, 0xa798, 0xa7aa, 0xa7bd, 0xa7d0, 0xa7e3, 0xa7f6, 0xa809, + 0xa81c, 0xa82e, 0xa83f, 0xa851, 0xa863, 0xa875, 0xa887, 0xa899, + 0xa8ab, 0xa8bd, 0xa8cf, 0xa8e1, 0xa8f3, 0xa905, 0xa917, 0xa929, + // Entry 1100 - 113F + 0xa93b, 0xa94e, 0xa961, 0xa974, 0xa987, 0xa99a, 0xa9ad, 0xa9c0, + 0xa9d3, 0xa9e6, 0xa9f9, 0xaa0c, 0xaa1f, 0xaa32, 0xaa44, 0xaa56, + 0xaa68, 0xaa7a, 0xaa8c, 0xaa9e, 0xaab0, 0xaac2, 0xaad4, 0xaae6, + 0xaaf8, 0xab0a, 0xab1c, 0xab34, 0xab4c, 0xab64, 0xab7c, 0xab94, + 0xabac, 0xabc5, 0xabd9, 0xabef, 0xac03, 0xac18, 0xac2c, 0xac41, + 0xac5d, 0xac7a, 0xac96, 0xacaa, 0xacbf, 0xacd4, 0xacf3, 0xad08, + 0xad27, 0xad3d, 0xad5d, 0xad72, 0xad91, 0xada7, 0xadc7, 0xade5, + 0xadfa, 0xae19, 0xae2f, 0xae4f, 0xae6d, 0xae82, 0xae9d, 0xaebc, + // Entry 1140 - 117F + 0xaeda, 0xaef8, 0xaf21, 0xaf47, 0xaf6f, 0xaf8c, 0xafb1, 0xafe7, + 0xb00a, 0xb03a, 0xb057, 0xb079, 0xb08e, 0xb0a3, 0xb0b8, 0xb0cd, + 0xb0e2, 0xb0f9, 0xb10e, 0xb124, 0xb139, 0xb14f, 0xb16c, 0xb18a, + 0xb1a7, 0xb1bc, 0xb1d2, 0xb1e8, 0xb208, 0xb21e, 0xb23e, 0xb255, + 0xb276, 0xb28c, 0xb2ac, 0xb2c3, 0xb2e4, 0xb2fa, 0xb31a, 0xb331, + 0xb352, 0xb370, 0xb384, 0xb3a2, 0xb3be, 0xb3d3, 0xb3ea, 0xb3ff, + 0xb415, 0xb42a, 0xb440, 0xb45d, 0xb47b, 0xb498, 0xb4ad, 0xb4c3, + 0xb4d9, 0xb4f9, 0xb50f, 0xb52f, 0xb546, 0xb567, 0xb57d, 0xb59d, + // Entry 1180 - 11BF + 0xb5b4, 0xb5d5, 0xb5eb, 0xb60b, 0xb622, 0xb643, 0xb662, 0xb676, + 0xb68c, 0xb6a2, 0xb6b8, 0xb6ce, 0xb6e3, 0xb6fa, 0xb70f, 0xb725, + 0xb73a, 0xb750, 0xb76d, 0xb782, 0xb798, 0xb7ae, 0xb7ce, 0xb7e4, + 0xb804, 0xb81b, 0xb83c, 0xb852, 0xb872, 0xb889, 0xb8aa, 0xb8c0, + 0xb8e0, 0xb8f7, 0xb918, 0xb937, 0xb94b, 0xb960, 0xb983, 0xb9a6, + 0xb9c9, 0xb9ec, 0xba01, 0xba18, 0xba2d, 0xba43, 0xba58, 0xba6e, + 0xba8b, 0xbaa0, 0xbab6, 0xbacc, 0xbaec, 0xbb02, 0xbb22, 0xbb39, + 0xbb5a, 0xbb70, 0xbb90, 0xbba7, 0xbbc8, 0xbbde, 0xbbfe, 0xbc15, + // Entry 11C0 - 11FF + 0xbc36, 0xbc55, 0xbc69, 0xbc85, 0xbc9a, 0xbcb1, 0xbcc6, 0xbcdc, + 0xbcf1, 0xbd07, 0xbd24, 0xbd39, 0xbd4f, 0xbd65, 0xbd85, 0xbd9b, + 0xbdbb, 0xbdd2, 0xbdf3, 0xbe09, 0xbe29, 0xbe40, 0xbe61, 0xbe77, + 0xbe97, 0xbeae, 0xbecf, 0xbeee, 0xbf02, 0xbf20, 0xbf35, 0xbf54, + 0xbf6f, 0xbf84, 0xbf9b, 0xbfb0, 0xbfc6, 0xbfdb, 0xbff1, 0xc00e, + 0xc023, 0xc039, 0xc04f, 0xc06f, 0xc085, 0xc0a5, 0xc0bc, 0xc0dd, + 0xc0fc, 0xc110, 0xc12d, 0xc142, 0xc157, 0xc16e, 0xc183, 0xc199, + 0xc1ae, 0xc1c4, 0xc1e1, 0xc1f6, 0xc20c, 0xc222, 0xc242, 0xc258, + // Entry 1200 - 123F + 0xc278, 0xc28f, 0xc2b0, 0xc2c6, 0xc2e6, 0xc2fd, 0xc31e, 0xc334, + 0xc354, 0xc36b, 0xc38c, 0xc3a0, 0xc3be, 0xc3d9, 0xc3ee, 0xc405, + 0xc41a, 0xc430, 0xc445, 0xc45b, 0xc478, 0xc48d, 0xc4a3, 0xc4b9, + 0xc4d9, 0xc4ef, 0xc50f, 0xc526, 0xc547, 0xc55d, 0xc57d, 0xc594, + 0xc5b5, 0xc5cb, 0xc5eb, 0xc602, 0xc623, 0xc642, 0xc656, 0xc675, + 0xc68a, 0xc6a8, 0xc6c8, 0xc6e6, 0xc704, 0xc723, 0xc742, 0xc761, + 0xc780, 0xc796, 0xc7ac, 0xc7c3, 0xc7d9, 0xc7f0, 0xc806, 0xc81d, + 0xc834, 0xc855, 0xc86c, 0xc88d, 0xc8a5, 0xc8c7, 0xc8de, 0xc8ff, + // Entry 1240 - 127F + 0xc917, 0xc939, 0xc950, 0xc971, 0xc989, 0xc9ab, 0xc9c0, 0xc9d5, + 0xc9ec, 0xca01, 0xca17, 0xca2c, 0xca42, 0xca5f, 0xca74, 0xca8a, + 0xcaa0, 0xcac0, 0xcad6, 0xcaf6, 0xcb0d, 0xcb2e, 0xcb44, 0xcb64, + 0xcb7b, 0xcb9c, 0xcbb2, 0xcbd2, 0xcbe9, 0xcc0a, 0xcc29, 0xcc3d, + 0xcc5c, 0xcc7a, 0xcc96, 0xccab, 0xccc7, 0xcce6, 0xccfd, 0xcd12, + 0xcd28, 0xcd3d, 0xcd53, 0xcd72, 0xcd87, 0xcd9d, 0xcdbc, 0xcdd3, + 0xcdf4, 0xce08, 0xce26, 0xce41, 0xce56, 0xce6d, 0xce82, 0xce98, + 0xcead, 0xcec3, 0xced8, 0xceee, 0xcf05, 0xcf26, 0xcf3a, 0xcf50, + // Entry 1280 - 12BF + 0xcf6d, 0xcf83, 0xcfa0, 0xcfb7, 0xcfd5, 0xcfeb, 0xd002, 0xd018, + 0xd02f, 0xd047, 0xd069, 0xd07e, 0xd095, 0xd0ac, 0xd0c3, 0xd0da, + 0xd0f0, 0xd106, 0xd11c, 0xd132, 0xd148, 0xd165, 0xd182, 0xd1a0, + 0xd1bd, 0xd1db, 0xd1f8, 0xd216, 0xd232, 0xd24e, 0xd263, 0xd27a, + 0xd28f, 0xd2a5, 0xd2ba, 0xd2d0, 0xd2e5, 0xd2fb, 0xd30f, 0xd326, + 0xd33d, 0xd354, 0xd36b, 0xd38a, 0xd3a9, 0xd3c8, 0xd3e7, 0xd3ff, + 0xd415, 0xd42c, 0xd442, 0xd459, 0xd46f, 0xd486, 0xd49b, 0xd4b1, + 0xd4ce, 0xd4eb, 0xd508, 0xd525, 0xd546, 0xd567, 0xd588, 0xd5a9, + // Entry 12C0 - 12FF + 0xd5c9, 0xd5df, 0xd5f6, 0xd60c, 0xd623, 0xd639, 0xd650, 0xd665, + 0xd683, 0xd6a1, 0xd6c0, 0xd6de, 0xd6fd, 0xd71b, 0xd73a, 0xd757, + 0xd773, 0xd791, 0xd7af, 0xd7cd, 0xd7eb, 0xd80a, 0xd829, 0xd848, + 0xd867, 0xd886, 0xd8a5, 0xd8c4, 0xd8e3, 0xd902, 0xd921, 0xd940, + 0xd95f, 0xd97b, 0xd997, 0xd9b3, 0xd9cf, 0xd9ed, 0xda0b, 0xda29, + 0xda48, 0xda66, 0xda84, 0xdaa1, 0xdabe, 0xdadb, 0xdaf9, 0xdb16, + 0xdb33, 0xdb50, 0xdb6d, 0xdb8a, 0xdba8, 0xdbc5, 0xdbe2, 0xdc00, + 0xdc1e, 0xdc3c, 0xdc5b, 0xdc79, 0xdc97, 0xdcb5, 0xdcd3, 0xdcf1, + // Entry 1300 - 133F + 0xdd10, 0xdd2e, 0xdd4c, 0xdd6a, 0xdd88, 0xdda6, 0xddc5, 0xdde3, + 0xde01, 0xde1e, 0xde3b, 0xde58, 0xde76, 0xde93, 0xdeb0, 0xdecc, + 0xdee9, 0xdf06, 0xdf23, 0xdf41, 0xdf5e, 0xdf7b, 0xdf99, 0xdfb7, + 0xdfd5, 0xdff4, 0xe012, 0xe030, 0xe04e, 0xe06c, 0xe08a, 0xe0a9, + 0xe0c7, 0xe0e5, 0xe102, 0xe11f, 0xe13c, 0xe159, 0xe177, 0xe194, + 0xe1b1, 0xe1ce, 0xe1eb, 0xe208, 0xe226, 0xe243, 0xe260, 0xe27d, + 0xe29a, 0xe2b7, 0xe2d5, 0xe2f2, 0xe30f, 0xe32c, 0xe348, 0xe365, + 0xe382, 0xe3a0, 0xe3bd, 0xe3d9, 0xe3f6, 0xe414, 0xe432, 0xe450, + // Entry 1340 - 137F + 0xe46f, 0xe48d, 0xe4ab, 0xe4c8, 0xe4e5, 0xe502, 0xe520, 0xe53d, + 0xe55a, 0xe578, 0xe596, 0xe5b4, 0xe5d3, 0xe5f1, 0xe60f, 0xe62d, + 0xe64b, 0xe669, 0xe688, 0xe6a6, 0xe6c4, 0xe6e3, 0xe702, 0xe721, + 0xe741, 0xe760, 0xe77f, 0xe79d, 0xe7bb, 0xe7d9, 0xe7f8, 0xe816, + 0xe834, 0xe851, 0xe86e, 0xe88b, 0xe8a9, 0xe8c6, 0xe8e3, 0xe8ff, + 0xe923, 0xe941, 0xe95f, 0xe97d, 0xe99c, 0xe9ba, 0xe9d8, 0xe9f5, + 0xea12, 0xea2f, 0xea4d, 0xea6a, 0xea87, 0xeaa5, 0xeac3, 0xeae1, + 0xeb00, 0xeb1e, 0xeb3c, 0xeb59, 0xeb77, 0xeb95, 0xebb3, 0xebd2, + // Entry 1380 - 13BF + 0xebf0, 0xec0e, 0xec2c, 0xec4a, 0xec68, 0xec87, 0xeca5, 0xecc3, + 0xece2, 0xed01, 0xed20, 0xed40, 0xed5f, 0xed7e, 0xed99, 0xedb5, + 0xedcb, 0xede2, 0xedf9, 0xee11, 0xee28, 0xee40, 0xee57, 0xee6f, + 0xee92, 0xeeb4, 0xeed7, 0xeef9, 0xef1c, 0xef3e, 0xef61, 0xef87, + 0xefa5, 0xefb5, 0xefc7, 0xefd8, 0xefea, 0xeffb, 0xf00c, 0xf01d, + 0xf02e, 0xf040, 0xf051, 0xf063, 0xf074, 0xf085, 0xf099, 0xf0ac, + 0xf0bd, 0xf0ce, 0xf0de, 0xf0ed, 0xf101, 0xf115, 0xf129, 0xf138, + 0xf14d, 0xf15e, 0xf176, 0xf188, 0xf19a, 0xf1b5, 0xf1d0, 0xf1de, + // Entry 13C0 - 13FF + 0xf1f4, 0xf203, 0xf211, 0xf21f, 0xf240, 0xf250, 0xf264, 0xf275, + 0xf286, 0xf297, 0xf2b5, 0xf2d2, 0xf2e0, 0xf2ef, 0xf2fe, 0xf31b, + 0xf32d, 0xf33d, 0xf350, 0xf35e, 0xf36e, 0xf386, 0xf396, 0xf3af, + 0xf3c4, 0xf3d8, 0xf3f9, 0xf419, 0xf437, 0xf455, 0xf46a, 0xf484, + 0xf492, 0xf4a6, 0xf4b6, 0xf4d4, 0xf4f0, 0xf505, 0xf521, 0xf539, + 0xf54e, 0xf572, 0xf58f, 0xf59d, 0xf5ab, 0xf5c7, 0xf5e4, 0xf5f2, + 0xf617, 0xf638, 0xf64d, 0xf660, 0xf677, 0xf690, 0xf6af, 0xf6cd, + 0xf6ec, 0xf701, 0xf714, 0xf724, 0xf73d, 0xf759, 0xf769, 0xf779, + // Entry 1400 - 143F + 0xf78d, 0xf79e, 0xf7b0, 0xf7c1, 0xf7dc, 0xf7f6, 0xf80f, 0xf81d, + 0xf82b, 0xf843, 0xf85d, 0xf874, 0xf887, 0xf89c, 0xf8b1, 0xf8bf, + 0xf8ce, 0xf8dd, 0xf8fa, 0xf917, 0xf934, 0xf951, 0xf970, 0xf980, + 0xf990, 0xf9a0, 0xf9b1, 0xf9c2, 0xf9d4, 0xf9e5, 0xf9f6, 0xfa07, + 0xfa18, 0xfa29, 0xfa3a, 0xfa4b, 0xfa5c, 0xfa6d, 0xfa7e, 0xfa8f, + 0xfaa3, 0xfab7, 0xfaca, 0xfada, 0xfaea, 0xfafa, 0xfb0b, 0xfb1c, + 0xfb2e, 0xfb3f, 0xfb50, 0xfb61, 0xfb72, 0xfb83, 0xfb94, 0xfba5, + 0xfbb6, 0xfbc7, 0xfbd8, 0xfbe9, 0xfbfa, 0xfc0e, 0xfc22, 0xfc37, + // Entry 1440 - 147F + 0xfc54, 0xfc71, 0xfc7f, 0xfc8d, 0xfc9b, 0xfcaa, 0xfcb9, 0xfcc9, + 0xfcd8, 0xfce7, 0xfcf6, 0xfd05, 0xfd14, 0xfd23, 0xfd32, 0xfd41, + 0xfd50, 0xfd5f, 0xfd6e, 0xfd7d, 0xfd8f, 0xfda1, 0xfdb2, 0xfdc3, + 0xfdd4, 0xfde6, 0xfdf8, 0xfe0b, 0xfe1d, 0xfe2f, 0xfe41, 0xfe53, + 0xfe65, 0xfe77, 0xfe89, 0xfe9b, 0xfead, 0xfebf, 0xfed4, 0xfee9, + 0xfef8, 0xff08, 0xff17, 0xff27, 0xff37, 0xff46, 0xff56, 0xff65, + 0xff75, 0xff85, 0xff94, 0xffa5, 0xffb4, 0xffc5, 0xffd5, 0xffe4, + 0xfff4, 0x0003, 0x0013, 0x0022, 0x0031, 0x0041, 0x0050, 0x0060, + // Entry 1480 - 14BF + 0x006f, 0x007e, 0x008d, 0x009c, 0x00ab, 0x00bb, 0x00cb, 0x00da, + 0x00e9, 0x00f8, 0x0107, 0x0122, 0x013d, 0x0157, 0x0172, 0x018c, + 0x01a7, 0x01c2, 0x01de, 0x01f8, 0x0213, 0x022d, 0x0248, 0x0262, + 0x027d, 0x02a1, 0x02c5, 0x02e0, 0x02f7, 0x030e, 0x0321, 0x0333, + 0x0346, 0x0358, 0x036b, 0x037d, 0x0390, 0x03a3, 0x03b6, 0x03c9, + 0x03dc, 0x03ee, 0x0401, 0x0414, 0x0427, 0x043a, 0x044c, 0x045e, + 0x0476, 0x048c, 0x049e, 0x04af, 0x04bf, 0x04d5, 0x04e7, 0x04f7, + 0x050f, 0x0520, 0x0530, 0x0545, 0x0554, 0x0569, 0x0583, 0x0595, + // Entry 14C0 - 14FF + 0x05a6, 0x05bc, 0x05ce, 0x05e8, 0x0600, 0x0613, 0x0623, 0x0632, + 0x0641, 0x0652, 0x0662, 0x0672, 0x0681, 0x0692, 0x06a3, 0x06b3, + 0x06cd, 0x06e8, 0x0702, 0x071c, 0x0737, 0x0752, 0x0772, 0x0791, + 0x07b0, 0x07d0, 0x07df, 0x07f1, 0x0800, 0x0813, 0x0822, 0x0835, + 0x084f, 0x0876, 0x088c, 0x08a6, 0x08b6, 0x08db, 0x0900, 0x0927, + 0x0940, 0x0954, 0x0967, 0x097a, 0x098f, 0x09a3, 0x09b7, 0x09ca, + 0x09df, 0x09f4, 0x0a08, 0x0a1a, 0x0a2c, 0x0a3e, 0x0a50, 0x0a62, + 0x0a75, 0x0a88, 0x0a9b, 0x0aae, 0x0ac2, 0x0ad5, 0x0ae8, 0x0afb, + // Entry 1500 - 153F + 0x0b0e, 0x0b21, 0x0b34, 0x0b47, 0x0b5b, 0x0b6e, 0x0b81, 0x0b95, + 0x0ba8, 0x0bbb, 0x0bce, 0x0be1, 0x0bf4, 0x0c07, 0x0c1b, 0x0c2f, + 0x0c42, 0x0c56, 0x0c6a, 0x0c7e, 0x0c92, 0x0ca6, 0x0ccb, 0x0ce2, + 0x0cf9, 0x0d10, 0x0d27, 0x0d3f, 0x0d57, 0x0d70, 0x0d88, 0x0da0, + 0x0db8, 0x0dd0, 0x0de8, 0x0e00, 0x0e18, 0x0e31, 0x0e49, 0x0e62, + 0x0e7a, 0x0e92, 0x0eaa, 0x0ec3, 0x0edc, 0x0ef5, 0x0f0e, 0x0f27, + 0x0f3e, 0x0f55, 0x0f6d, 0x0f85, 0x0f9c, 0x0fb5, 0x0fcd, 0x0fe5, + 0x0ffd, 0x1015, 0x102e, 0x1046, 0x105e, 0x1076, 0x108e, 0x10a7, + // Entry 1540 - 157F + 0x10c0, 0x10d9, 0x10f1, 0x110a, 0x1123, 0x113c, 0x1155, 0x116f, + 0x1189, 0x11a3, 0x11be, 0x11e4, 0x1209, 0x1229, 0x124a, 0x1274, + 0x1294, 0x12ba, 0x12d5, 0x12f0, 0x130c, 0x1329, 0x1345, 0x1362, + 0x1380, 0x139d, 0x13ba, 0x13d6, 0x13f2, 0x140e, 0x142b, 0x1448, + 0x1465, 0x1481, 0x149d, 0x14be, 0x14e0, 0x1504, 0x1528, 0x154b, + 0x156f, 0x1593, 0x15b8, 0x15db, 0x15ff, 0x1623, 0x1647, 0x166b, + 0x168e, 0x16ae, 0x16cf, 0x16f3, 0x1714, 0x1738, 0x174d, 0x1762, + 0x1778, 0x178e, 0x17a4, 0x17ba, 0x17d1, 0x17e7, 0x17fd, 0x1814, + // Entry 1580 - 15BF + 0x182a, 0x1840, 0x1856, 0x186c, 0x1882, 0x1898, 0x18af, 0x18c6, + 0x18de, 0x18f4, 0x190a, 0x1920, 0x1936, 0x1954, 0x196b, 0x198a, + 0x19a0, 0x19be, 0x19d5, 0x19f4, 0x1a0b, 0x1a21, 0x1a38, 0x1a4e, + 0x1a65, 0x1a7b, 0x1a97, 0x1ab3, 0x1acf, 0x1aeb, 0x1b07, 0x1b23, + 0x1b3f, 0x1b5c, 0x1b78, 0x1b94, 0x1bb7, 0x1bda, 0x1bf7, 0x1c17, + 0x1c37, 0x1c4e, 0x1c65, 0x1c7d, 0x1c95, 0x1cad, 0x1cc5, 0x1cdd, + 0x1cfb, 0x1d19, 0x1d36, 0x1d54, 0x1d77, 0x1d95, 0x1db3, 0x1dd0, + 0x1dee, 0x1e0e, 0x1e2e, 0x1e51, 0x1e6b, 0x1e7a, 0x1e8a, 0x1e99, + // Entry 15C0 - 15FF + 0x1ea9, 0x1eb9, 0x1ec8, 0x1ed8, 0x1ee7, 0x1ef7, 0x1f07, 0x1f16, + 0x1f26, 0x1f35, 0x1f45, 0x1f54, 0x1f63, 0x1f73, 0x1f82, 0x1f92, + 0x1fa1, 0x1fb0, 0x1fbf, 0x1fce, 0x1fdd, 0x1fed, 0x1ffd, 0x200c, + 0x201b, 0x202c, 0x203c, 0x204e, 0x2060, 0x2072, 0x2085, 0x2098, + 0x20ab, 0x20be, 0x20d0, 0x20e2, 0x20fb, 0x2114, 0x212d, 0x2142, + 0x2158, 0x2173, 0x2188, 0x219d, 0x21b2, 0x21c7, 0x21dc, 0x21f1, + 0x2205, 0x2219, 0x2228, 0x2236, 0x224c, 0x225f, 0x226f, 0x227e, + 0x228d, 0x229e, 0x22ae, 0x22be, 0x22cd, 0x22de, 0x22ef, 0x22ff, + // Entry 1600 - 163F + 0x230f, 0x231f, 0x2330, 0x2341, 0x2351, 0x2361, 0x2371, 0x2382, + 0x2392, 0x23a2, 0x23b3, 0x23c3, 0x23d3, 0x23e3, 0x23f3, 0x2403, + 0x2414, 0x2426, 0x2436, 0x2445, 0x2454, 0x2464, 0x2474, 0x2483, + 0x2493, 0x24a2, 0x24b2, 0x24c1, 0x24d2, 0x24e2, 0x24f6, 0x250a, + 0x251e, 0x2532, 0x2546, 0x2560, 0x2579, 0x2593, 0x25ad, 0x25c8, + 0x25e1, 0x25fa, 0x2614, 0x262f, 0x2649, 0x2663, 0x267d, 0x2696, + 0x26af, 0x26c9, 0x26e4, 0x26fe, 0x2717, 0x2731, 0x274a, 0x2764, + 0x277f, 0x2799, 0x27b2, 0x27cc, 0x27e5, 0x27ff, 0x2819, 0x2833, + // Entry 1640 - 167F + 0x284c, 0x2865, 0x287e, 0x2898, 0x28b2, 0x28cc, 0x28e5, 0x28fe, + 0x2917, 0x2932, 0x294d, 0x2967, 0x2981, 0x299c, 0x29b6, 0x29dc, + 0x29f5, 0x2a0e, 0x2a26, 0x2a3f, 0x2a57, 0x2a70, 0x2a88, 0x2aa1, + 0x2aba, 0x2ad3, 0x2aed, 0x2b06, 0x2b1f, 0x2b39, 0x2b53, 0x2b6c, + 0x2b86, 0x2ba1, 0x2bbb, 0x2bd5, 0x2bef, 0x2c09, 0x2c23, 0x2c3a, + 0x2c51, 0x2c67, 0x2c7c, 0x2c91, 0x2ca8, 0x2cbe, 0x2cd4, 0x2ce9, + 0x2d00, 0x2d17, 0x2d2d, 0x2d47, 0x2d5b, 0x2d70, 0x2d87, 0x2d9d, + 0x2db2, 0x2dc7, 0x2ddd, 0x2df3, 0x2e0e, 0x2e28, 0x2e42, 0x2e5d, + // Entry 1680 - 16BF + 0x2e72, 0x2e8c, 0x2ea5, 0x2ebe, 0x2ed8, 0x2ef2, 0x2f08, 0x2f1d, + 0x2f31, 0x2f45, 0x2f5a, 0x2f6f, 0x2f89, 0x2fa2, 0x2fbb, 0x2fd5, + 0x2fe9, 0x3002, 0x301a, 0x3032, 0x304b, 0x3064, 0x3076, 0x3088, + 0x309b, 0x30af, 0x30c1, 0x30d3, 0x30e5, 0x30f8, 0x310a, 0x311c, + 0x312e, 0x3141, 0x3153, 0x3165, 0x3178, 0x318c, 0x319e, 0x31b0, + 0x31c2, 0x31d4, 0x31e6, 0x31f7, 0x3209, 0x321e, 0x3233, 0x3248, + 0x325d, 0x3273, 0x3283, 0x329a, 0x32b1, 0x32c9, 0x32e1, 0x32f7, + 0x330e, 0x3325, 0x3338, 0x334f, 0x3367, 0x337d, 0x3393, 0x33aa, + // Entry 16C0 - 16FF + 0x33bd, 0x33d1, 0x33eb, 0x33fd, 0x3416, 0x342a, 0x3441, 0x3459, + 0x346f, 0x3486, 0x3498, 0x34aa, 0x34c1, 0x34d9, 0x34f0, 0x3506, + 0x351c, 0x3533, 0x3545, 0x355b, 0x3572, 0x3584, 0x3597, 0x35a9, + 0x35bc, 0x35ce, 0x35e6, 0x35fe, 0x3615, 0x362c, 0x363f, 0x3650, + 0x3666, 0x3677, 0x3689, 0x369a, 0x36ac, 0x36be, 0x36d0, 0x36e3, + 0x36fb, 0x371c, 0x373d, 0x3760, 0x377a, 0x379b, 0x37b9, 0x37e5, + 0x37ff, 0x3819, 0x3833, 0x3846, 0x385b, 0x3876, 0x388c, 0x38a7, + 0x38bc, 0x38d2, 0x38e8, 0x38ff, 0x3914, 0x392a, 0x393f, 0x395b, + // Entry 1700 - 173F + 0x3971, 0x3986, 0x399c, 0x39b2, 0x39c8, 0x39e3, 0x39ff, 0x3a15, + 0x3a29, 0x3a3d, 0x3a57, 0x3a71, 0x3a8b, 0x3aa0, 0x3ab5, 0x3ad2, + 0x3af6, 0x3b0e, 0x3b25, 0x3b3c, 0x3b55, 0x3b6d, 0x3b85, 0x3b9c, + 0x3bb5, 0x3bce, 0x3be6, 0x3bfe, 0x3c15, 0x3c2c, 0x3c45, 0x3c5d, + 0x3c75, 0x3c8c, 0x3ca5, 0x3cbe, 0x3cd6, 0x3ce9, 0x3d00, 0x3d13, + 0x3d25, 0x3d36, 0x3d4a, 0x3d6d, 0x3d84, 0x3d96, 0x3dab, 0x3dc0, + 0x3dd8, 0x3dea, 0x3dfd, 0x3e20, 0x3e38, 0x3e4a, 0x3e63, 0x3e77, + 0x3e8a, 0x3ea5, 0x3ebe, 0x3ede, 0x3f09, 0x3f35, 0x3f50, 0x3f72, + // Entry 1740 - 177F + 0x3f8d, 0x3faa, 0x3fc1, 0x3fd9, 0x3fec, 0x4000, 0x4013, 0x4028, + 0x4044, 0x4059, 0x4075, 0x408a, 0x40a6, 0x40bd, 0x40db, 0x40f3, + 0x4112, 0x4127, 0x413d, 0x4152, 0x416e, 0x4180, 0x419c, 0x41ae, + 0x41c5, 0x41d8, 0x41ea, 0x4201, 0x4213, 0x422a, 0x423d, 0x4255, + 0x4277, 0x4299, 0x42bb, 0x42d4, 0x42e6, 0x42fd, 0x430f, 0x4326, + 0x4338, 0x434a, 0x4362, 0x4374, 0x438e, 0x43a0, 0x43b2, 0x43c4, + 0x43d6, 0x43e8, 0x43ff, 0x4416, 0x4428, 0x443a, 0x444f, 0x4469, + 0x4480, 0x449c, 0x44b4, 0x44d1, 0x44ec, 0x450e, 0x452a, 0x454d, + // Entry 1780 - 17BF + 0x4567, 0x4586, 0x45a7, 0x45cd, 0x45e6, 0x4606, 0x4618, 0x4631, + 0x464b, 0x4665, 0x467d, 0x4695, 0x46ae, 0x46ca, 0x46dd, 0x46ef, + 0x4701, 0x4715, 0x4728, 0x473b, 0x474d, 0x4761, 0x4775, 0x4788, + 0x4796, 0x47a5, 0x47b3, 0x47cb, 0x47de, 0x47f4, 0x4805, 0x4821, + 0x483d, 0x4859, 0x4875, 0x4898, 0x48b4, 0x48d1, 0x48ee, 0x490b, + 0x492c, 0x4953, 0x497a, 0x49a2, 0x49ca, 0x49f3, 0x4a28, 0x4a5d, + 0x4a84, 0x4aaa, 0x4ad5, 0x4b00, 0x4b2d, 0x4b5a, 0x4b85, 0x4bb0, + 0x4bdd, 0x4c0a, 0x4c35, 0x4c4c, 0x4c64, 0x4c7c, 0x4c8e, 0x4ca0, + // Entry 17C0 - 17FF + 0x4cb2, 0x4cc5, 0x4cd7, 0x4ce9, 0x4cfc, 0x4d0f, 0x4d22, 0x4d35, + 0x4d49, 0x4d5c, 0x4d6f, 0x4d82, 0x4d96, 0x4da9, 0x4dbc, 0x4dcf, + 0x4de2, 0x4df5, 0x4e08, 0x4e1b, 0x4e2e, 0x4e41, 0x4e54, 0x4e67, + 0x4e7a, 0x4e8d, 0x4ea0, 0x4eb3, 0x4ed5, 0x4ef6, 0x4f16, 0x4f33, + 0x4f4f, 0x4f6e, 0x4f8b, 0x4fa7, 0x4fc6, 0x4fdc, 0x4ff1, 0x5015, + 0x5039, 0x504d, 0x5061, 0x5075, 0x5088, 0x509b, 0x50b0, 0x50c4, + 0x50d8, 0x50eb, 0x5100, 0x5115, 0x5129, 0x513b, 0x514f, 0x5163, + 0x5177, 0x518f, 0x51a7, 0x51b5, 0x51ce, 0x51dd, 0x51f7, 0x5211, + // Entry 1800 - 183F + 0x5220, 0x5234, 0x5243, 0x525d, 0x526c, 0x5286, 0x5295, 0x52af, + 0x52c5, 0x52d4, 0x52ee, 0x52fd, 0x530c, 0x531b, 0x5335, 0x5344, + 0x535e, 0x5376, 0x538e, 0x539d, 0x53b7, 0x53d1, 0x53e0, 0x53fa, + 0x540a, 0x5419, 0x5433, 0x5443, 0x5452, 0x5462, 0x5472, 0x5480, + 0x548e, 0x549e, 0x54b0, 0x54c9, 0x54dc, 0x54ee, 0x5505, 0x5517, + 0x552e, 0x5540, 0x5564, 0x557b, 0x5591, 0x559f, 0x55af, 0x55ca, + 0x55e7, 0x55ff, 0x561a, 0x562a, 0x563b, 0x564c, 0x565c, 0x566d, + 0x567e, 0x568e, 0x569f, 0x56af, 0x56c0, 0x56d0, 0x56e1, 0x56f1, + // Entry 1840 - 187F + 0x5701, 0x5711, 0x5722, 0x5733, 0x5743, 0x5754, 0x5764, 0x5775, + 0x5785, 0x5796, 0x57a7, 0x57b9, 0x57ca, 0x57da, 0x57ea, 0x57fa, + 0x580a, 0x581b, 0x582b, 0x583b, 0x584c, 0x585c, 0x586b, 0x5885, + 0x589f, 0x58b3, 0x58c6, 0x58d9, 0x58ed, 0x5900, 0x5914, 0x5927, + 0x593e, 0x5955, 0x596c, 0x5983, 0x599a, 0x59b1, 0x59c8, 0x59e5, + 0x59ff, 0x5a0e, 0x5a1f, 0x5a38, 0x5a5d, 0x5a76, 0x5a96, 0x5aaf, + 0x5ac0, 0x5ad0, 0x5ae0, 0x5af2, 0x5b03, 0x5b14, 0x5b24, 0x5b36, + 0x5b48, 0x5b59, 0x5b6a, 0x5b7c, 0x5b8d, 0x5ba0, 0x5bb2, 0x5bc4, + // Entry 1880 - 18BF + 0x5bd8, 0x5beb, 0x5bfe, 0x5c10, 0x5c24, 0x5c38, 0x5c4b, 0x5c5d, + 0x5c6f, 0x5c81, 0x5c94, 0x5ca6, 0x5cb9, 0x5ccc, 0x5cdf, 0x5cf2, + 0x5d05, 0x5d17, 0x5d29, 0x5d3b, 0x5d4e, 0x5d60, 0x5d72, 0x5d84, + 0x5d96, 0x5da9, 0x5dbb, 0x5dcd, 0x5ddf, 0x5df2, 0x5e04, 0x5e17, + 0x5e29, 0x5e3c, 0x5e4e, 0x5e60, 0x5e72, 0x5e85, 0x5e9e, 0x5eba, + 0x5ec8, 0x5ed9, 0x5ee6, 0x5f01, 0x5f23, 0x5f43, 0x5f67, 0x5f85, + 0x5fa2, 0x5fbf, 0x5fe4, 0x6008, 0x6026, 0x6048, 0x6069, 0x608d, + 0x60b0, 0x60d1, 0x60f8, 0x611e, 0x6144, 0x616a, 0x617d, 0x618d, + // Entry 18C0 - 18FF + 0x619f, 0x61b3, 0x61d8, 0x620c, 0x6235, 0x6266, 0x627d, 0x62b8, + 0x62d1, 0x62ea, 0x6305, 0x6319, 0x6332, 0x634d, 0x637d, 0x63a8, + 0x63c2, 0x63db, 0x63fd, 0x6418, 0x643c, 0x645f, 0x6484, 0x64a4, + 0x64c4, 0x64e3, 0x650c, 0x651d, 0x653e, 0x6556, 0x6575, 0x6597, + 0x65ae, 0x65cd, 0x65e4, 0x65fa, 0x6610, 0x6623, 0x6638, 0x6654, + 0x6670, 0x668d, 0x66a9, 0x66cc, 0x66e8, 0x6704, 0x6722, 0x673e, + 0x675e, 0x6779, 0x6795, 0x67b1, 0x67d9, 0x67f5, 0x681a, 0x6836, + 0x6857, 0x6874, 0x6896, 0x68bf, 0x68db, 0x68f8, 0x6915, 0x6935, + // Entry 1900 - 193F + 0x6951, 0x6976, 0x6999, 0x69b5, 0x69d1, 0x69ee, 0x6a17, 0x6a3b, + 0x6a57, 0x6a73, 0x6a8f, 0x6aad, 0x6ad2, 0x6ae2, 0x6b02, 0x6b22, + 0x6b3f, 0x6b5d, 0x6b7b, 0x6b9b, 0x6bb4, 0x6bce, 0x6be7, 0x6c07, + 0x6c20, 0x6c39, 0x6c5b, 0x6c74, 0x6c8d, 0x6ca6, 0x6cbf, 0x6cd8, + 0x6cf1, 0x6d0a, 0x6d23, 0x6d45, 0x6d5e, 0x6d78, 0x6d91, 0x6daa, + 0x6dc3, 0x6ddc, 0x6df5, 0x6e0c, 0x6e2a, 0x6e45, 0x6e64, 0x6e7b, + 0x6e92, 0x6ea9, 0x6ec4, 0x6ee0, 0x6f03, 0x6f1a, 0x6f38, 0x6f4f, + 0x6f66, 0x6f7f, 0x6f96, 0x6fb2, 0x6fd2, 0x6ff5, 0x700c, 0x7023, + // Entry 1940 - 197F + 0x703a, 0x705a, 0x7078, 0x708f, 0x70a8, 0x70c2, 0x70e3, 0x70fe, + 0x711d, 0x7136, 0x7154, 0x7172, 0x7190, 0x71ae, 0x71cf, 0x71f1, + 0x7211, 0x7231, 0x7251, 0x7266, 0x728c, 0x72b2, 0x72d8, 0x72fe, + 0x7324, 0x734a, 0x7370, 0x73a3, 0x73c9, 0x73ef, 0x7415, 0x7430, + 0x744b, 0x7467, 0x748f, 0x74b7, 0x74da, 0x74fa, 0x7522, 0x7548, + 0x756e, 0x7594, 0x75ba, 0x75e0, 0x7606, 0x762c, 0x7652, 0x7678, + 0x769e, 0x76c4, 0x76ea, 0x7712, 0x7738, 0x775e, 0x7784, 0x77ac, + 0x77d8, 0x77ff, 0x7827, 0x7854, 0x788a, 0x78b6, 0x78de, 0x790b, + // Entry 1980 - 19BF + 0x7935, 0x795d, 0x7987, 0x79a9, 0x79c0, 0x79e1, 0x79fa, 0x7a1f, + 0x7a36, 0x7a61, 0x7a7f, 0x7a9d, 0x7ac0, 0x7ada, 0x7af9, 0x7b24, + 0x7b4d, 0x7b78, 0x7ba1, 0x7bc0, 0x7be1, 0x7c0d, 0x7c33, 0x7c5e, + 0x7c7d, 0x7c9b, 0x7cb4, 0x7cd5, 0x7cee, 0x7d17, 0x7d32, 0x7d4f, + 0x7d6e, 0x7d8f, 0x7dad, 0x7dc4, 0x7def, 0x7e10, 0x7e29, 0x7e44, + 0x7e61, 0x7e7e, 0x7e93, 0x7eac, 0x7ec2, 0x7ed8, 0x7eee, 0x7f04, + 0x7f1f, 0x7f3a, 0x7f5e, 0x7f74, 0x7f8a, 0x7fab, 0x7fc1, 0x7fd7, + 0x7fe9, 0x7ffb, 0x800d, 0x8040, 0x805f, 0x807e, 0x809d, 0x80c3, + // Entry 19C0 - 19FF + 0x80e9, 0x8109, 0x8127, 0x814d, 0x816b, 0x8189, 0x81af, 0x81d5, + 0x81f3, 0x8219, 0x823f, 0x8265, 0x8283, 0x82a6, 0x82c4, 0x82e6, + 0x8304, 0x8325, 0x8347, 0x8365, 0x839c, 0x83db, 0x83f9, 0x8419, + 0x8458, 0x8476, 0x84a3, 0x84d0, 0x84fd, 0x8514, 0x8530, 0x854b, + 0x8563, 0x8587, 0x859e, 0x85c3, 0x85e2, 0x8600, 0x8632, 0x8658, + 0x867c, 0x86a1, 0x86c4, 0x86e9, 0x870c, 0x8732, 0x8756, 0x8783, + 0x87ae, 0x87d3, 0x87f6, 0x881b, 0x883e, 0x8864, 0x8888, 0x88ab, + 0x88cc, 0x88f8, 0x8922, 0x894e, 0x8978, 0x89a4, 0x89ce, 0x89fa, + // Entry 1A00 - 1A3F + 0x8a24, 0x8a4b, 0x8a70, 0x8a9d, 0x8ac8, 0x8aed, 0x8b10, 0x8b32, + 0x8b52, 0x8b77, 0x8b9a, 0x8bbf, 0x8be2, 0x8c07, 0x8c2a, 0x8c4d, + 0x8c6e, 0x8c95, 0x8cba, 0x8ce1, 0x8d06, 0x8d35, 0x8d62, 0x8d83, + 0x8da2, 0x8dc7, 0x8dea, 0x8e10, 0x8e34, 0x8e59, 0x8e7c, 0x8eac, + 0x8eda, 0x8f00, 0x8f24, 0x8f50, 0x8f7a, 0x8f9b, 0x8fba, 0x8fdf, + 0x9002, 0x9027, 0x904a, 0x906f, 0x9092, 0x90b7, 0x90da, 0x9100, + 0x9124, 0x9150, 0x917a, 0x91a5, 0x91ce, 0x91fd, 0x922a, 0x9256, + 0x9280, 0x92ac, 0x92d6, 0x92f7, 0x9316, 0x933b, 0x935e, 0x9383, + // Entry 1A40 - 1A7F + 0x93a6, 0x93cb, 0x93ee, 0x941e, 0x944c, 0x9472, 0x9496, 0x94bb, + 0x94de, 0x9503, 0x9526, 0x9555, 0x9582, 0x95b1, 0x95de, 0x9611, + 0x9642, 0x9667, 0x968a, 0x96af, 0x96d2, 0x96f8, 0x971c, 0x9748, + 0x9772, 0x979d, 0x97c6, 0x97ed, 0x9812, 0x983e, 0x9868, 0x9893, + 0x98bc, 0x98ec, 0x991a, 0x993b, 0x995a, 0x997f, 0x99a2, 0x99c3, + 0x99e2, 0x9a03, 0x9a22, 0x9a47, 0x9a6a, 0x9a8f, 0x9ab2, 0x9ad7, + 0x9afa, 0x9b1f, 0x9b42, 0x9b67, 0x9b8a, 0x9baf, 0x9bd2, 0x9bf8, + 0x9c1c, 0x9c41, 0x9c64, 0x9c8a, 0x9cae, 0x9cd2, 0x9cf5, 0x9d19, + // Entry 1A80 - 1ABF + 0x9d3d, 0x9d66, 0x9d8e, 0x9dbc, 0x9de6, 0x9e02, 0x9e1a, 0x9e3f, + 0x9e62, 0x9e88, 0x9eac, 0x9edc, 0x9f0a, 0x9f3a, 0x9f68, 0x9f9d, + 0x9fd0, 0xa000, 0xa02e, 0xa062, 0xa094, 0xa0bf, 0xa0e8, 0xa113, + 0xa13c, 0xa16c, 0xa19a, 0xa1c5, 0xa1ee, 0xa21d, 0xa24a, 0xa26f, + 0xa292, 0xa2b8, 0xa2dc, 0xa2fd, 0xa31c, 0xa34c, 0xa37a, 0xa3aa, + 0xa3d8, 0xa40d, 0xa440, 0xa470, 0xa49e, 0xa4d2, 0xa504, 0xa52a, + 0xa54e, 0xa573, 0xa596, 0xa5bb, 0xa5de, 0xa604, 0xa628, 0xa658, + 0xa686, 0xa6b6, 0xa6e4, 0xa719, 0xa74c, 0xa77c, 0xa7aa, 0xa7de, + // Entry 1AC0 - 1AFF + 0xa810, 0xa83a, 0xa862, 0xa88c, 0xa8b4, 0xa8e3, 0xa910, 0xa93a, + 0xa962, 0xa990, 0xa9bc, 0xa9e1, 0xaa04, 0xaa2a, 0xaa4e, 0xaa78, + 0xaaa0, 0xaaca, 0xaaf2, 0xab21, 0xab4e, 0xab78, 0xaba0, 0xabce, + 0xabfa, 0xac1b, 0xac3a, 0xac5f, 0xac82, 0xaca8, 0xaccc, 0xaced, + 0xad0c, 0xad30, 0xad52, 0xad75, 0xad96, 0xadb6, 0xadd4, 0xadf7, + 0xae1a, 0xae47, 0xae74, 0xaea0, 0xaecc, 0xaeff, 0xaf32, 0xaf57, + 0xaf7c, 0xafab, 0xafda, 0xb008, 0xb036, 0xb06b, 0xb0a0, 0xb0c5, + 0xb0ea, 0xb119, 0xb148, 0xb176, 0xb1a4, 0xb1cb, 0xb1f2, 0xb223, + // Entry 1B00 - 1B3F + 0xb254, 0xb284, 0xb2b4, 0xb2d5, 0xb2f6, 0xb321, 0xb34c, 0xb376, + 0xb3a0, 0xb3d1, 0xb402, 0xb425, 0xb448, 0xb475, 0xb4a2, 0xb4ce, + 0xb4fa, 0xb52d, 0xb560, 0xb582, 0xb5a4, 0xb5d0, 0xb5fc, 0xb627, + 0xb652, 0xb684, 0xb6b6, 0xb6da, 0xb6fe, 0xb72c, 0xb75a, 0xb787, + 0xb7b4, 0xb7e8, 0xb81c, 0xb841, 0xb866, 0xb895, 0xb8c4, 0xb8f2, + 0xb920, 0xb947, 0xb96e, 0xb99f, 0xb9d0, 0xba00, 0xba30, 0xba55, + 0xba7a, 0xbaa9, 0xbad8, 0xbb06, 0xbb34, 0xbb69, 0xbb9e, 0xbbc5, + 0xbbf6, 0xbc26, 0xbc5d, 0xbc80, 0xbca3, 0xbcd0, 0xbcfd, 0xbd29, + // Entry 1B40 - 1B7F + 0xbd55, 0xbd88, 0xbdbb, 0xbde0, 0xbe05, 0xbe34, 0xbe63, 0xbe91, + 0xbebf, 0xbef4, 0xbf29, 0xbf4c, 0xbf6e, 0xbf93, 0xbfb7, 0xbfd8, + 0xbff8, 0xc01a, 0xc03b, 0xc060, 0xc084, 0xc0a9, 0xc0cd, 0xc0f0, + 0xc112, 0xc147, 0xc17c, 0xc1bb, 0xc1fa, 0xc238, 0xc276, 0xc2bb, + 0xc300, 0xc338, 0xc370, 0xc3b2, 0xc3f4, 0xc435, 0xc476, 0xc4be, + 0xc506, 0xc539, 0xc56c, 0xc5a9, 0xc5e6, 0xc622, 0xc65e, 0xc6a1, + 0xc6e4, 0xc71a, 0xc750, 0xc790, 0xc7d0, 0xc80f, 0xc84e, 0xc894, + 0xc8da, 0xc90f, 0xc944, 0xc983, 0xc9c2, 0xca00, 0xca3e, 0xca83, + // Entry 1B80 - 1BBF + 0xcac8, 0xcb00, 0xcb38, 0xcb7a, 0xcbbc, 0xcbfd, 0xcc3e, 0xcc86, + 0xccce, 0xccf2, 0xcd16, 0xcd4b, 0xcd76, 0xcdaa, 0xcdd3, 0xce0e, + 0xce34, 0xce5a, 0xce7f, 0xcea3, 0xced1, 0xcede, 0xcef2, 0xcefd, + 0xcf0e, 0xcf2d, 0xcf60, 0xcf89, 0xcfbb, 0xcfe2, 0xd01b, 0xd042, + 0xd068, 0xd08b, 0xd0ad, 0xd0d9, 0xd0ee, 0xd102, 0xd11d, 0xd140, + 0xd163, 0xd193, 0xd1c2, 0xd1ea, 0xd220, 0xd245, 0xd26a, 0xd28e, + 0xd2b1, 0xd2c6, 0xd2da, 0xd2f5, 0xd31b, 0xd341, 0xd374, 0xd3a6, + 0xd3c7, 0xd3e8, 0xd413, 0xd44c, 0xd474, 0xd49c, 0xd4c3, 0xd4e9, + // Entry 1BC0 - 1BFF + 0xd50c, 0xd525, 0xd53d, 0xd548, 0xd57d, 0xd5a8, 0xd5dc, 0xd605, + 0xd640, 0xd667, 0xd68d, 0xd6b2, 0xd6d6, 0xd704, 0xd70e, 0xd719, + 0xd720, 0xd727, 0xd72f, 0xd737, 0xd749, 0xd75a, 0xd76a, 0xd776, + 0xd787, 0xd791, 0xd79b, 0xd7ab, 0xd7c0, 0xd7d1, 0xd7e3, 0xd7f5, + 0xd7fb, 0xd80e, 0xd819, 0xd820, 0xd827, 0xd835, 0xd849, 0xd858, + 0xd872, 0xd88d, 0xd8a8, 0xd8cd, 0xd8e7, 0xd902, 0xd91d, 0xd942, + 0xd948, 0xd955, 0xd95b, 0xd96c, 0xd97a, 0xd988, 0xd99b, 0xd9ac, + 0xd9ba, 0xd9cd, 0xd9e4, 0xd9fb, 0xda15, 0xda2b, 0xda41, 0xda56, + // Entry 1C00 - 1C3F + 0xda64, 0xda79, 0xda7e, 0xda8a, 0xda96, 0xdaa4, 0xdab9, 0xdace, + 0xdad3, 0xdafc, 0xdb26, 0xdb34, 0xdb4b, 0xdb56, 0xdb5e, 0xdb66, + 0xdb73, 0xdb88, 0xdb90, 0xdb9d, 0xdbab, 0xdbc9, 0xdbe8, 0xdbfc, + 0xdc15, 0xdc2e, 0xdc3e, 0xdc53, 0xdc69, 0xdc80, 0xdc8c, 0xdc9e, + 0xdca6, 0xdcc6, 0xdcdb, 0xdce5, 0xdcf6, 0xdd0d, 0xdd22, 0xdd31, + 0xdd45, 0xdd59, 0xdd6c, 0xdd79, 0xdd85, 0xdd8d, 0xdd9f, 0xddb8, + 0xddc3, 0xddd7, 0xdde6, 0xddf9, 0xde07, 0xde1c, 0xde31, 0xde45, + 0xde5c, 0xde76, 0xde91, 0xdeac, 0xdec8, 0xdedd, 0xdef1, 0xdf01, + // Entry 1C40 - 1C7F + 0xdf21, 0xdf31, 0xdf41, 0xdf50, 0xdf61, 0xdf72, 0xdf82, 0xdf97, + 0xdfa8, 0xdfbf, 0xdfdb, 0xdff8, 0xe018, 0xe026, 0xe033, 0xe040, + 0xe04f, 0xe05d, 0xe06b, 0xe078, 0xe087, 0xe096, 0xe0a4, 0xe0b7, + 0xe0c6, 0xe0db, 0xe0f5, 0xe110, 0xe12e, 0xe14c, 0xe16a, 0xe188, + 0xe1aa, 0xe1c8, 0xe1e6, 0xe204, 0xe222, 0xe240, 0xe25e, 0xe27c, + 0xe29a, 0xe2ac, 0xe2b6, 0xe2c3, 0xe2d4, 0xe2dd, 0xe2e6, 0xe2f0, + 0xe2fb, 0xe305, 0xe30d, 0xe31c, 0xe325, 0xe32e, 0xe336, 0xe341, + 0xe34d, 0xe35e, 0xe367, 0xe373, 0xe37f, 0xe38b, 0xe394, 0xe3a7, + // Entry 1C80 - 1CBF + 0xe3b4, 0xe3be, 0xe3cf, 0xe3e0, 0xe3f0, 0xe3fa, 0xe404, 0xe40d, + 0xe419, 0xe435, 0xe452, 0xe476, 0xe49b, 0xe4be, 0xe4dd, 0xe4f7, + 0xe512, 0xe528, 0xe548, 0xe56c, 0xe586, 0xe59f, 0xe5b9, 0xe5d3, + 0xe5ee, 0xe612, 0xe632, 0xe64c, 0xe666, 0xe692, 0xe6b3, 0xe6db, + 0xe6f3, 0xe70c, 0xe727, 0xe748, 0xe76d, 0xe79d, 0xe7cc, 0xe7e6, + 0xe801, 0xe819, 0xe823, 0xe83b, 0xe852, 0xe860, 0xe872, 0xe879, + 0xe881, 0xe88f, 0xe896, 0xe8a7, 0xe8b5, 0xe8c5, 0xe8db, 0xe8f2, + 0xe901, 0xe91c, 0xe92c, 0xe942, 0xe952, 0xe960, 0xe96e, 0xe985, + // Entry 1CC0 - 1CFF + 0xe990, 0xe9a9, 0xe9b9, 0xe9d0, 0xe9e7, 0xe9f7, 0xea0d, 0xea24, + 0xea35, 0xea3d, 0xea49, 0xea57, 0xea66, 0xea6e, 0xea85, 0xea8f, + 0xea97, 0xeaa8, 0xeabe, 0xeadc, 0xeae7, 0xeaf4, 0xeb04, 0xeb1a, + 0xeb2a, 0xeb38, 0xeb48, 0xeb58, 0xeb68, 0xeb78, 0xeb86, 0xeb91, + 0xeb9b, 0xeba7, 0xebb3, 0xebc5, 0xebd6, 0xebe4, 0xebfa, 0xec13, + 0xec2e, 0xec46, 0xec63, 0xec7e, 0xec99, 0xecb6, 0xecd1, 0xecef, + 0xed0b, 0xed27, 0xed43, 0xed5f, 0xed6c, 0xed7c, 0xed84, 0xed90, + 0xed9e, 0xedb9, 0xedd4, 0xeded, 0xee06, 0xee1f, 0xee39, 0xee52, + // Entry 1D00 - 1D3F + 0xee6c, 0xee88, 0xeea3, 0xeebc, 0xeed7, 0xeef1, 0xef0e, 0xef2a, + 0xef47, 0xef5d, 0xef6e, 0xef7f, 0xef92, 0xefa4, 0xefb6, 0xefc7, + 0xefda, 0xefed, 0xefff, 0xf010, 0xf024, 0xf038, 0xf04b, 0xf064, + 0xf07e, 0xf098, 0xf0af, 0xf0c6, 0xf0df, 0xf0f7, 0xf10f, 0xf126, + 0xf13f, 0xf158, 0xf170, 0xf187, 0xf1a1, 0xf1bb, 0xf1d4, 0xf1f3, + 0xf213, 0xf233, 0xf251, 0xf26c, 0xf286, 0xf2a8, 0xf2c5, 0xf2e0, + 0xf2fe, 0xf31a, 0xf33c, 0xf357, 0xf367, 0xf379, 0xf388, 0xf395, + 0xf3a5, 0xf3b4, 0xf3c4, 0xf3d1, 0xf3e1, 0xf3f1, 0xf401, 0xf411, + // Entry 1D40 - 1D7F + 0xf42c, 0xf448, 0xf45c, 0xf471, 0xf48b, 0xf4a3, 0xf4be, 0xf4d8, + 0xf4f1, 0xf50b, 0xf523, 0xf539, 0xf552, 0xf56a, 0xf581, 0xf59a, + 0xf5b4, 0xf5cd, 0xf5e7, 0xf5fc, 0xf618, 0xf62e, 0xf64e, 0xf66f, + 0xf691, 0xf6b4, 0xf6da, 0xf6ff, 0xf721, 0xf73f, 0xf75b, 0xf78e, + 0xf7ad, 0xf7c8, 0xf7eb, 0xf810, 0xf834, 0xf857, 0xf87b, 0xf8a1, + 0xf8c7, 0xf8ec, 0xf911, 0xf93b, 0xf960, 0xf977, 0xf98c, 0xf9a4, + 0xf9bb, 0xf9e4, 0xfa0d, 0xfa2f, 0xfa52, 0xfa75, 0xfa8b, 0xfa9f, + 0xfab6, 0xfacc, 0xfae3, 0xfaf7, 0xfb0e, 0xfb25, 0xfb3c, 0xfb53, + // Entry 1D80 - 1DBF + 0xfb69, 0xfb80, 0xfb98, 0xfbb1, 0xfbd1, 0xfbf3, 0xfc09, 0xfc1d, + 0xfc34, 0xfc4a, 0xfc60, 0xfc77, 0xfc8c, 0xfc9f, 0xfcb5, 0xfcca, + 0xfce6, 0xfd05, 0xfd38, 0xfd69, 0xfd83, 0xfda9, 0xfdc9, 0xfde3, + 0xfdfd, 0xfe10, 0xfe2d, 0xfe57, 0xfe6e, 0xfe92, 0xfeb7, 0xfedc, + 0xff07, 0xff33, 0xff5f, 0xff7a, 0xff96, 0xffb2, 0xffb9, 0xffc3, + 0xffd7, 0xffe3, 0xfff7, 0x0000, 0x0009, 0x000e, 0x0018, 0x0029, + 0x0039, 0x004b, 0x0065, 0x007d, 0x0089, 0x0096, 0x00a5, 0x00b4, + 0x00be, 0x00d0, 0x00d8, 0x00e6, 0x00ef, 0x0100, 0x010d, 0x011c, + // Entry 1DC0 - 1DFF + 0x0127, 0x0130, 0x013b, 0x014a, 0x0152, 0x015d, 0x0162, 0x0170, + 0x017f, 0x0186, 0x0195, 0x01a0, 0x01af, 0x01ba, 0x01c4, 0x01d0, + 0x01d5, 0x01dd, 0x01ec, 0x01fb, 0x020b, 0x021b, 0x022a, 0x023c, + 0x0256, 0x0274, 0x027d, 0x0284, 0x0289, 0x0293, 0x029c, 0x02a2, + 0x02b6, 0x02c0, 0x02ce, 0x02dc, 0x02eb, 0x02f4, 0x0302, 0x030b, + 0x0316, 0x032d, 0x0348, 0x035e, 0x0385, 0x03b0, 0x03bf, 0x03d2, + 0x03ea, 0x03f6, 0x0402, 0x040f, 0x042a, 0x043c, 0x0450, 0x0466, + 0x048c, 0x04ae, 0x04ba, 0x04c6, 0x04d6, 0x04e3, 0x04f1, 0x04fa, + // Entry 1E00 - 1E3F + 0x0508, 0x0513, 0x0521, 0x0537, 0x0542, 0x0555, 0x0561, 0x056d, + 0x057d, 0x0593, 0x05a8, 0x05c0, 0x05d7, 0x05f1, 0x060b, 0x0628, + 0x0636, 0x0647, 0x064e, 0x065f, 0x066c, 0x067c, 0x069a, 0x06bb, + 0x06d5, 0x06f2, 0x0715, 0x073b, 0x0754, 0x076d, 0x078f, 0x07b1, + 0x07b9, 0x07c1, 0x07d5, 0x07e9, 0x0802, 0x081b, 0x082b, 0x083b, + 0x0844, 0x084f, 0x085e, 0x086f, 0x0884, 0x089b, 0x08bb, 0x08dd, + 0x08f8, 0x0915, 0x091d, 0x0934, 0x0942, 0x0951, 0x0963, 0x097e, + 0x099c, 0x09a6, 0x09b0, 0x09bc, 0x09c9, 0x09d6, 0x09ec, 0x0a00, + // Entry 1E40 - 1E7F + 0x0a15, 0x0a2e, 0x0a3c, 0x0a48, 0x0a54, 0x0a61, 0x0a6e, 0x0a82, + 0x0a8c, 0x0a95, 0x0a9e, 0x0aa5, 0x0aae, 0x0ab4, 0x0ab8, 0x0abe, + 0x0ae1, 0x0b0b, 0x0b19, 0x0b21, 0x0b2f, 0x0b61, 0x0b78, 0x0b8f, + 0x0ba1, 0x0bbc, 0x0bda, 0x0c01, 0x0c0c, 0x0c14, 0x0c1c, 0x0c36, + 0x0c41, 0x0c44, 0x0c48, 0x0c4b, 0x0c5f, 0x0c6d, 0x0c7e, 0x0c8e, + 0x0ca0, 0x0cab, 0x0cbb, 0x0cc7, 0x0cd4, 0x0ce2, 0x0ce8, 0x0d0d, + 0x0d33, 0x0d4a, 0x0d62, 0x0d77, 0x0d87, 0x0d98, 0x0da5, 0x0db4, + 0x0dc7, 0x0dd3, 0x0ddc, 0x0df1, 0x0e03, 0x0e18, 0x0e2b, 0x0e41, + // Entry 1E80 - 1EBF + 0x0e63, 0x0e85, 0x0e9a, 0x0eb2, 0x0ec6, 0x0eda, 0x0ef3, 0x0f0c, + 0x0f2b, 0x0f4d, 0x0f6c, 0x0f8e, 0x0fad, 0x0fcf, 0x0fed, 0x100b, + 0x1021, 0x1044, 0x1066, 0x1092, 0x10a3, 0x10be, 0x10d8, 0x10f4, + 0x111a, 0x1152, 0x1190, 0x11a9, 0x11c0, 0x11dd, 0x11f5, 0x121b, + 0x123f, 0x1275, 0x12b1, 0x12c6, 0x12e1, 0x12fa, 0x1307, 0x1315, + 0x131a, 0x1326, 0x1334, 0x133e, 0x1349, 0x1352, 0x135e, 0x136b, + 0x1375, 0x1380, 0x1391, 0x13a1, 0x13af, 0x13bc, 0x13cd, 0x13db, + 0x13de, 0x13e5, 0x13eb, 0x13fd, 0x140f, 0x141e, 0x1434, 0x1443, + // Entry 1EC0 - 1EFF + 0x1448, 0x1451, 0x1460, 0x1470, 0x1482, 0x1495, 0x14a6, 0x14ba, + 0x14bf, 0x14c4, 0x14ec, 0x14f6, 0x1508, 0x151c, 0x1524, 0x153f, + 0x155b, 0x156c, 0x1578, 0x1584, 0x1596, 0x159e, 0x15aa, 0x15ba, + 0x15c7, 0x15cc, 0x15d7, 0x15e2, 0x15fe, 0x161f, 0x163f, 0x1660, + 0x1682, 0x16a0, 0x16c1, 0x16e3, 0x1703, 0x1722, 0x1745, 0x1765, + 0x1789, 0x17ad, 0x17d4, 0x17f8, 0x181d, 0x1847, 0x1872, 0x1898, + 0x18c0, 0x18e1, 0x1906, 0x1926, 0x1949, 0x196b, 0x1993, 0x19b8, + 0x19d7, 0x19fa, 0x1a18, 0x1a39, 0x1a5d, 0x1a87, 0x1aab, 0x1acf, + // Entry 1F00 - 1F3F + 0x1af5, 0x1b17, 0x1b3c, 0x1b5d, 0x1b7d, 0x1b9e, 0x1bbe, 0x1be5, + 0x1c08, 0x1c2c, 0x1c4f, 0x1c75, 0x1c9a, 0x1cbf, 0x1ce4, 0x1d10, + 0x1d2f, 0x1d4e, 0x1d69, 0x1d8a, 0x1db2, 0x1dd6, 0x1df9, 0x1e1f, + 0x1e43, 0x1e5d, 0x1e76, 0x1e91, 0x1eb5, 0x1edb, 0x1efe, 0x1f22, + 0x1f3d, 0x1f4b, 0x1f72, 0x1f85, 0x1f90, 0x1fad, 0x1fbd, 0x1fd8, + 0x1ff6, 0x2005, 0x2017, 0x203d, 0x2049, 0x205f, 0x206a, 0x208b, + 0x20a0, 0x20c2, 0x20cd, 0x20de, 0x20ef, 0x2110, 0x2131, 0x2150, + 0x216d, 0x218b, 0x21a3, 0x21bd, 0x21d9, 0x21e6, 0x21ef, 0x2202, + // Entry 1F40 - 1F7F + 0x2215, 0x2230, 0x224a, 0x2265, 0x2281, 0x229c, 0x22b8, 0x22d8, + 0x22f5, 0x2315, 0x2336, 0x2354, 0x2375, 0x2392, 0x23b1, 0x23ce, + 0x23e5, 0x2403, 0x2423, 0x2441, 0x2453, 0x246c, 0x249b, 0x24ca, + 0x24d7, 0x24e7, 0x24f9, 0x250e, 0x253b, 0x2550, 0x2566, 0x257d, + 0x2593, 0x25a9, 0x25bf, 0x25d5, 0x2602, 0x2632, 0x265d, 0x2693, + 0x26c7, 0x26f4, 0x272c, 0x2762, 0x278a, 0x27be, 0x27f0, 0x281a, + 0x2842, 0x286e, 0x289d, 0x28a8, 0x28b5, 0x28c1, 0x28d8, 0x28e6, + 0x28fe, 0x2916, 0x2933, 0x2950, 0x296a, 0x297a, 0x298c, 0x299e, + // Entry 1F80 - 1FBF + 0x29aa, 0x29ae, 0x29bd, 0x29cf, 0x29e0, 0x29f4, 0x2a0e, 0x2a2b, + 0x2a3a, 0x2a52, 0x2a5e, 0x2a66, 0x2a70, 0x2a87, 0x2a9e, 0x2ac2, + 0x2ae5, 0x2b06, 0x2b29, 0x2b5f, 0x2b94, 0x2bca, 0x2bd5, 0x2bde, + 0x2be9, 0x2c04, 0x2c27, 0x2c4b, 0x2c6c, 0x2c8f, 0x2ca2, 0x2cb7, + 0x2cce, 0x2cda, 0x2ced, 0x2cfc, 0x2d0e, 0x2d21, 0x2d30, 0x2d4b, + 0x2d63, 0x2d79, 0x2d97, 0x2da9, 0x2dbf, 0x2dce, 0x2de2, 0x2e02, + 0x2e16, 0x2e34, 0x2e48, 0x2e62, 0x2e76, 0x2e89, 0x2ea4, 0x2ec1, + 0x2ede, 0x2efd, 0x2f1b, 0x2f3a, 0x2f55, 0x2f79, 0x2f8a, 0x2fa2, + // Entry 1FC0 - 1FFF + 0x2fb7, 0x2fc8, 0x2fe1, 0x2ffb, 0x3016, 0x302f, 0x303f, 0x3050, + 0x305c, 0x3064, 0x3076, 0x3090, 0x30ae, 0x30b6, 0x30bf, 0x30c7, + 0x30d8, 0x30e7, 0x30f2, 0x3110, 0x3123, 0x312b, 0x3146, 0x315a, + 0x316b, 0x317c, 0x318f, 0x31a1, 0x31b3, 0x31c4, 0x31d7, 0x31ea, + 0x31fc, 0x320e, 0x3223, 0x3238, 0x324f, 0x3266, 0x327c, 0x3292, + 0x32aa, 0x32c1, 0x32d8, 0x32ed, 0x3304, 0x331b, 0x3334, 0x334c, + 0x3364, 0x337b, 0x3394, 0x33ad, 0x33c5, 0x33dd, 0x33f8, 0x3413, + 0x3430, 0x344d, 0x3469, 0x3485, 0x34a3, 0x34c0, 0x34dd, 0x34f8, + // Entry 2000 - 203F + 0x350b, 0x351e, 0x3533, 0x3547, 0x355b, 0x356e, 0x3583, 0x3598, + 0x35ac, 0x35c0, 0x35d7, 0x35ee, 0x3607, 0x3620, 0x3638, 0x3650, + 0x366a, 0x3683, 0x369c, 0x36b3, 0x36d5, 0x36f7, 0x3719, 0x373b, + 0x375d, 0x377f, 0x37a1, 0x37c3, 0x37e5, 0x3807, 0x3829, 0x384b, + 0x386d, 0x388f, 0x38b1, 0x38d3, 0x38f5, 0x3917, 0x3939, 0x395b, + 0x397d, 0x399f, 0x39c1, 0x39e3, 0x3a05, 0x3a27, 0x3a45, 0x3a63, + 0x3a81, 0x3a9f, 0x3abd, 0x3adb, 0x3af9, 0x3b17, 0x3b35, 0x3b53, + 0x3b71, 0x3b8f, 0x3bad, 0x3bcb, 0x3be9, 0x3c07, 0x3c25, 0x3c43, + // Entry 2040 - 207F + 0x3c61, 0x3c7f, 0x3c9d, 0x3cbb, 0x3cd9, 0x3cf7, 0x3d15, 0x3d33, + 0x3d4f, 0x3d6b, 0x3d87, 0x3da3, 0x3dbf, 0x3ddb, 0x3df7, 0x3e13, + 0x3e2f, 0x3e4b, 0x3e67, 0x3e83, 0x3e9f, 0x3ebb, 0x3ed7, 0x3ef3, + 0x3f0f, 0x3f2b, 0x3f47, 0x3f63, 0x3f7f, 0x3f9b, 0x3fb7, 0x3fd3, + 0x3fef, 0x400b, 0x401d, 0x403b, 0x4059, 0x4079, 0x4099, 0x40b8, + 0x40d7, 0x40f8, 0x4118, 0x4138, 0x4156, 0x416e, 0x4186, 0x41a0, + 0x41b9, 0x41d2, 0x41ea, 0x4204, 0x421e, 0x4237, 0x4250, 0x426b, + 0x4288, 0x42a5, 0x42c0, 0x42db, 0x4304, 0x432d, 0x4354, 0x437b, + // Entry 2080 - 20BF + 0x43a7, 0x43d3, 0x43fd, 0x4427, 0x4448, 0x446f, 0x4496, 0x44b7, + 0x44d7, 0x44fd, 0x4523, 0x4543, 0x4562, 0x4587, 0x45ac, 0x45cb, + 0x45e9, 0x460d, 0x4631, 0x464f, 0x4674, 0x469f, 0x46c9, 0x46f3, + 0x471e, 0x4748, 0x4772, 0x4797, 0x47bb, 0x47e5, 0x480e, 0x4837, + 0x4861, 0x488a, 0x48b3, 0x48d7, 0x48fd, 0x4929, 0x4955, 0x4981, + 0x49ad, 0x49d9, 0x4a05, 0x4a2b, 0x4a4f, 0x4a79, 0x4aa3, 0x4acd, + 0x4af7, 0x4b21, 0x4b4b, 0x4b6f, 0x4b99, 0x4bc9, 0x4bf9, 0x4c29, + 0x4c58, 0x4c87, 0x4cb7, 0x4ce6, 0x4d15, 0x4d44, 0x4d73, 0x4da2, + // Entry 20C0 - 20FF + 0x4dd1, 0x4e01, 0x4e31, 0x4e5b, 0x4e84, 0x4ead, 0x4ed4, 0x4efb, + 0x4f19, 0x4f35, 0x4f5e, 0x4f87, 0x4fa9, 0x4fd1, 0x4ff9, 0x501a, + 0x5041, 0x5068, 0x5088, 0x50ae, 0x50d4, 0x50f3, 0x5120, 0x514d, + 0x5173, 0x519f, 0x51cb, 0x51f0, 0x521e, 0x524c, 0x5273, 0x529f, + 0x52cb, 0x52f0, 0x5322, 0x5354, 0x537f, 0x53a4, 0x53c8, 0x53ea, + 0x540d, 0x5442, 0x5477, 0x5498, 0x54af, 0x54c4, 0x54dc, 0x54f3, + 0x550a, 0x551f, 0x5537, 0x554e, 0x5575, 0x5599, 0x55c0, 0x55e4, + 0x55f4, 0x560a, 0x5621, 0x563a, 0x564a, 0x5662, 0x567c, 0x5695, + // Entry 2100 - 213F + 0x569f, 0x56b7, 0x56d0, 0x56e7, 0x56f6, 0x570e, 0x5724, 0x5739, + 0x5749, 0x5754, 0x5760, 0x576a, 0x5780, 0x5796, 0x57a9, 0x57bd, + 0x57d0, 0x5802, 0x5825, 0x5857, 0x588a, 0x589e, 0x58c1, 0x58f4, + 0x5900, 0x590c, 0x592d, 0x5957, 0x5972, 0x598b, 0x59b1, 0x59db, + 0x5a05, 0x5a29, 0x5a3b, 0x5a4d, 0x5a5c, 0x5a6b, 0x5a83, 0x5a9b, + 0x5aae, 0x5ac1, 0x5adb, 0x5af5, 0x5b15, 0x5b35, 0x5b52, 0x5b6f, + 0x5b92, 0x5bb5, 0x5bd1, 0x5bed, 0x5c09, 0x5c25, 0x5c47, 0x5c69, + 0x5c85, 0x5ca1, 0x5cc3, 0x5ce5, 0x5d00, 0x5d1b, 0x5d28, 0x5d35, + // Entry 2140 - 217F + 0x5d61, 0x5d68, 0x5d6f, 0x5d7b, 0x5d88, 0x5da1, 0x5da9, 0x5db5, + 0x5dd0, 0x5dec, 0x5e08, 0x5e24, 0x5e4a, 0x5e77, 0x5e8d, 0x5ea4, + 0x5eb2, 0x5ec6, 0x5ee5, 0x5f04, 0x5f24, 0x5f45, 0x5f66, 0x5f86, + 0x5f97, 0x5fa8, 0x5fc2, 0x5fdb, 0x5ff4, 0x600e, 0x601a, 0x6035, + 0x6051, 0x607b, 0x60a6, 0x60cf, 0x60f2, 0x611b, 0x6145, 0x6151, + 0x6176, 0x619b, 0x61c1, 0x61e7, 0x620c, 0x6231, 0x6257, 0x627d, + 0x6290, 0x62a4, 0x62b7, 0x62ca, 0x62dd, 0x62f6, 0x630f, 0x6323, + 0x6336, 0x633b, 0x6343, 0x634a, 0x634f, 0x6359, 0x6363, 0x636c, + // Entry 2180 - 21BF + 0x6378, 0x637b, 0x6389, 0x6398, 0x63a3, 0x63ad, 0x63bc, 0x63cb, + 0x63d5, 0x63ea, 0x63fb, 0x6402, 0x641a, 0x6426, 0x6437, 0x6448, + 0x6450, 0x6474, 0x648d, 0x64a7, 0x64c0, 0x64d7, 0x64f1, 0x650a, + 0x651e, 0x652a, 0x653a, 0x6548, 0x6550, 0x6554, 0x6562, 0x6569, + 0x657a, 0x658c, 0x659d, 0x65a9, 0x65b3, 0x65c4, 0x65d0, 0x65d8, + 0x65ea, 0x65fa, 0x660a, 0x661d, 0x662d, 0x663e, 0x6652, 0x6663, + 0x6672, 0x6685, 0x6697, 0x66a9, 0x66bc, 0x66ce, 0x66df, 0x66e6, + 0x66f1, 0x66f6, 0x66ff, 0x6706, 0x670c, 0x6712, 0x6719, 0x671e, + // Entry 21C0 - 21FF + 0x6723, 0x6729, 0x672f, 0x6735, 0x6738, 0x673d, 0x6742, 0x674a, + 0x6755, 0x675e, 0x6766, 0x676c, 0x677c, 0x678d, 0x679d, 0x67af, + 0x67c1, 0x67d1, 0x67e1, 0x67f2, 0x6802, 0x6814, 0x6826, 0x6836, + 0x6846, 0x6856, 0x6868, 0x6877, 0x6887, 0x6897, 0x68a9, 0x68b8, + 0x68c3, 0x68cf, 0x68da, 0x68ed, 0x6903, 0x6912, 0x6924, 0x6934, + 0x6945, 0x6956, 0x6970, 0x6994, 0x69b8, 0x69dc, 0x6a00, 0x6a24, + 0x6a48, 0x6a6c, 0x6a92, 0x6ab2, 0x6ac7, 0x6ae6, 0x6afa, 0x6b0b, + 0x6b15, 0x6b1f, 0x6b29, 0x6b33, 0x6b3d, 0x6b47, 0x6b62, 0x6b7c, + // Entry 2200 - 223F + 0x6b9d, 0x6bbd, 0x6bce, 0x6bde, 0x6bf5, 0x6c0a, 0x6c20, 0x6c36, + 0x6c40, 0x6c4a, 0x6c59, 0x6c5f, 0x6c6d, 0x6c81, 0x6c87, 0x6c8e, + 0x6c94, 0x6c98, 0x6ca7, 0x6cb2, 0x6cbe, 0x6cd1, 0x6ced, 0x6d08, + 0x6d14, 0x6d25, 0x6d38, 0x6d49, 0x6d69, 0x6d7d, 0x6d92, 0x6dbb, + 0x6dd9, 0x6df9, 0x6e0c, 0x6e1f, 0x6e38, 0x6e47, 0x6e55, 0x6e71, + 0x6e77, 0x6e82, 0x6e88, 0x6e8d, 0x6e93, 0x6e97, 0x6e9c, 0x6ea2, + 0x6eb3, 0x6eba, 0x6ec5, 0x6ecd, 0x6edb, 0x6ee6, 0x6eee, 0x6ef9, + 0x6f0b, 0x6f1e, 0x6f30, 0x6f43, 0x6f57, 0x6f67, 0x6f6b, 0x6f78, + // Entry 2240 - 227F + 0x6f8e, 0x6fa6, 0x6fbe, 0x6fd5, 0x6fe3, 0x6fef, 0x6ff8, 0x6ffc, + 0x7007, 0x701e, 0x7034, 0x703a, 0x7042, 0x7064, 0x7082, 0x70a0, + 0x70b5, 0x70ca, 0x70d9, 0x70fb, 0x710c, 0x711b, 0x714b, 0x7156, + 0x716d, 0x7184, 0x71a2, 0x71cd, 0x71d6, 0x71f7, 0x7217, 0x7229, + 0x723e, 0x724b, 0x7251, 0x7257, 0x7264, 0x7274, 0x7285, 0x729e, + 0x72a6, 0x72b8, 0x72c0, 0x72cc, 0x72d1, 0x72d9, 0x72ec, 0x72f1, + 0x72fa, 0x730a, 0x730e, 0x7322, 0x733c, 0x7345, 0x7358, 0x7386, + 0x739b, 0x73af, 0x73bd, 0x73d1, 0x73df, 0x73f5, 0x740c, 0x7416, + // Entry 2280 - 22BF + 0x741e, 0x7426, 0x7431, 0x743c, 0x7448, 0x7454, 0x7466, 0x746c, + 0x747e, 0x7487, 0x7490, 0x749a, 0x74aa, 0x74ba, 0x74d0, 0x74d8, + 0x74e6, 0x74fa, 0x750b, 0x751c, 0x7533, 0x753e, 0x7558, 0x756c, + 0x7579, 0x7586, 0x75a3, 0x75bf, 0x75e1, 0x75fa, 0x7611, 0x7628, + 0x7630, 0x764a, 0x765c, 0x7672, 0x7689, 0x769c, 0x76b5, 0x76c2, + 0x76d5, 0x76e3, 0x76f7, 0x770c, 0x7724, 0x773f, 0x7755, 0x7779, + 0x77a3, 0x77bc, 0x77d4, 0x77ec, 0x7810, 0x782e, 0x7853, 0x7861, + 0x786f, 0x7895, 0x78bb, 0x78e2, 0x78eb, 0x7905, 0x791c, 0x7923, + // Entry 22C0 - 22FF + 0x7930, 0x7947, 0x796f, 0x799d, 0x79a7, 0x79bc, 0x79d7, 0x79fd, + 0x7a23, 0x7a44, 0x7a65, 0x7a81, 0x7a9d, 0x7abc, 0x7ad7, 0x7af4, + 0x7b06, 0x7b19, 0x7b2b, 0x7b5c, 0x7b86, 0x7bb7, 0x7be1, 0x7c0f, + 0x7c3d, 0x7c60, 0x7c7f, 0x7ca4, 0x7cb5, 0x7cd5, 0x7ce1, 0x7cfc, + 0x7d1c, 0x7d3d, 0x7d67, 0x7d92, 0x7dbd, 0x7de9, 0x7e1a, 0x7e4c, + 0x7e76, 0x7ea1, 0x7ecb, 0x7ef6, 0x7f18, 0x7f3b, 0x7f5d, 0x7f7f, + 0x7fa3, 0x7fc6, 0x7fe9, 0x800b, 0x802f, 0x8053, 0x8076, 0x8099, + 0x80bd, 0x80e1, 0x8107, 0x812c, 0x8151, 0x8175, 0x819b, 0x81c1, + // Entry 2300 - 233F + 0x81e6, 0x820b, 0x8238, 0x8265, 0x8294, 0x82c2, 0x82f0, 0x831d, + 0x834c, 0x837b, 0x83a9, 0x83d7, 0x83f9, 0x8408, 0x8418, 0x842b, + 0x8441, 0x8457, 0x846d, 0x848c, 0x84af, 0x84cf, 0x84f5, 0x851c, + 0x8549, 0x855f, 0x8587, 0x85b2, 0x85cc, 0x85fd, 0x862c, 0x8648, + 0x8674, 0x8697, 0x86b9, 0x86e4, 0x8710, 0x8741, 0x8772, 0x87a5, + 0x87af, 0x87e2, 0x8806, 0x8826, 0x8846, 0x8866, 0x8886, 0x88ac, + 0x88d2, 0x88f8, 0x8918, 0x893f, 0x895c, 0x897f, 0x899d, 0x89ae, + 0x89c5, 0x89f3, 0x8a00, 0x8a0b, 0x8a18, 0x8a33, 0x8a4f, 0x8a61, + // Entry 2340 - 237F + 0x8a81, 0x8a9b, 0x8abe, 0x8ada, 0x8ae7, 0x8b04, 0x8b17, 0x8b29, + 0x8b47, 0x8b53, 0x8b6d, 0x8b88, 0x8ba2, 0x8bb1, 0x8bc1, 0x8bd0, + 0x8bdd, 0x8bec, 0x8c0b, 0x8c1e, 0x8c2b, 0x8c3a, 0x8c48, 0x8c61, + 0x8c83, 0x8c9e, 0x8ccd, 0x8cfd, 0x8d1d, 0x8d3e, 0x8d64, 0x8d8b, + 0x8daa, 0x8dca, 0x8df0, 0x8e17, 0x8e45, 0x8e74, 0x8e9b, 0x8ec3, + 0x8eda, 0x8ef3, 0x8f14, 0x8f31, 0x8f4e, 0x8f62, 0x8f77, 0x8f8c, + 0x8fa7, 0x8fc3, 0x8fdf, 0x8ffc, 0x901a, 0x903e, 0x9063, 0x9081, + 0x9096, 0x90ac, 0x90c2, 0x90d9, 0x90ef, 0x9106, 0x911d, 0x9135, + // Entry 2380 - 23BF + 0x914b, 0x9162, 0x9179, 0x9191, 0x91a8, 0x91c0, 0x91d8, 0x91f1, + 0x9207, 0x921e, 0x9235, 0x924d, 0x9264, 0x927c, 0x9294, 0x92ad, + 0x92c4, 0x92dc, 0x92f4, 0x930d, 0x9325, 0x933e, 0x9357, 0x9371, + 0x9387, 0x939e, 0x93b5, 0x93cd, 0x93e4, 0x93fc, 0x9414, 0x942d, + 0x9444, 0x945c, 0x9474, 0x948d, 0x94a5, 0x94be, 0x94d7, 0x94f1, + 0x9508, 0x9520, 0x9538, 0x9551, 0x9569, 0x9582, 0x959b, 0x95b5, + 0x95cd, 0x95e6, 0x95ff, 0x9619, 0x9632, 0x964c, 0x9666, 0x9681, + 0x9697, 0x96ae, 0x96c5, 0x96dd, 0x96f4, 0x970c, 0x9724, 0x973d, + // Entry 23C0 - 23FF + 0x9754, 0x976c, 0x9784, 0x979d, 0x97b5, 0x97ce, 0x97e7, 0x9801, + 0x9818, 0x9830, 0x9848, 0x9861, 0x9879, 0x9892, 0x98ab, 0x98c5, + 0x98dd, 0x98f6, 0x990f, 0x9929, 0x9942, 0x995c, 0x9976, 0x9991, + 0x99a8, 0x99c0, 0x99d8, 0x99f1, 0x9a09, 0x9a22, 0x9a3b, 0x9a55, + 0x9a6d, 0x9a86, 0x9a9f, 0x9ab9, 0x9ad2, 0x9aec, 0x9b06, 0x9b21, + 0x9b39, 0x9b52, 0x9b6b, 0x9b85, 0x9b9e, 0x9bb8, 0x9bd2, 0x9bed, + 0x9c06, 0x9c20, 0x9c3a, 0x9c55, 0x9c6f, 0x9c8a, 0x9ca5, 0x9cc1, + 0x9cd7, 0x9cee, 0x9d05, 0x9d1d, 0x9d34, 0x9d4c, 0x9d64, 0x9d7d, + // Entry 2400 - 243F + 0x9d94, 0x9dac, 0x9dc4, 0x9ddd, 0x9df5, 0x9e0e, 0x9e27, 0x9e41, + 0x9e58, 0x9e70, 0x9e88, 0x9ea1, 0x9eb9, 0x9ed2, 0x9eeb, 0x9f05, + 0x9f1d, 0x9f36, 0x9f4f, 0x9f69, 0x9f82, 0x9f9c, 0x9fb6, 0x9fd1, + 0x9fe8, 0xa000, 0xa018, 0xa031, 0xa049, 0xa062, 0xa07b, 0xa095, + 0xa0ad, 0xa0c6, 0xa0df, 0xa0f9, 0xa112, 0xa12c, 0xa146, 0xa161, + 0xa179, 0xa192, 0xa1ab, 0xa1c5, 0xa1de, 0xa1f8, 0xa212, 0xa22d, + 0xa246, 0xa260, 0xa27a, 0xa295, 0xa2af, 0xa2ca, 0xa2e5, 0xa301, + 0xa318, 0xa330, 0xa348, 0xa361, 0xa379, 0xa392, 0xa3ab, 0xa3c5, + // Entry 2440 - 247F + 0xa3dd, 0xa3f6, 0xa40f, 0xa429, 0xa442, 0xa45c, 0xa476, 0xa491, + 0xa4a9, 0xa4c2, 0xa4db, 0xa4f5, 0xa50e, 0xa528, 0xa542, 0xa55d, + 0xa576, 0xa590, 0xa5aa, 0xa5c5, 0xa5df, 0xa5fa, 0xa615, 0xa631, + 0xa649, 0xa662, 0xa67b, 0xa695, 0xa6ae, 0xa6c8, 0xa6e2, 0xa6fd, + 0xa716, 0xa730, 0xa74a, 0xa765, 0xa77f, 0xa79a, 0xa7b5, 0xa7d1, + 0xa7ea, 0xa804, 0xa81e, 0xa839, 0xa853, 0xa86e, 0xa889, 0xa8a5, + 0xa8bf, 0xa8da, 0xa8f5, 0xa911, 0xa92c, 0xa948, 0xa964, 0xa981, + 0xa9b1, 0xa9e8, 0xaa13, 0xaa3f, 0xaa6b, 0xaa8f, 0xaaae, 0xaace, + // Entry 2480 - 24BF + 0xaaf4, 0xab18, 0xab2c, 0xab42, 0xab5d, 0xab79, 0xab94, 0xabb0, + 0xabd7, 0xabf8, 0xac0c, 0xac22, 0xac51, 0xac87, 0xacac, 0xace6, + 0xad27, 0xad3b, 0xad50, 0xad6b, 0xad87, 0xada7, 0xadc8, 0xadf1, + 0xae1b, 0xae3a, 0xae59, 0xae73, 0xae8d, 0xaea7, 0xaec1, 0xaee6, + 0xaf0b, 0xaf30, 0xaf55, 0xaf7e, 0xafa7, 0xafd1, 0xaffb, 0xb025, + 0xb04e, 0xb078, 0xb0a2, 0xb0c4, 0xb0f2, 0xb122, 0xb151, 0xb181, + 0xb19f, 0xb1c0, 0xb1db, 0xb1f9, 0xb21b, 0xb240, 0xb268, 0xb293, + 0xb2b4, 0xb2d1, 0xb2fd, 0xb329, 0xb355, 0xb375, 0xb394, 0xb3ae, + // Entry 24C0 - 24FF + 0xb3d3, 0xb3fd, 0xb421, 0xb445, 0xb469, 0xb48d, 0xb4af, 0xb4d4, + 0xb4fa, 0xb51d, 0xb542, 0xb568, 0xb58e, 0xb5b6, 0xb5dd, 0xb605, + 0xb62a, 0xb651, 0xb678, 0xb6a0, 0xb6c8, 0xb6f2, 0xb71b, 0xb745, + 0xb76c, 0xb795, 0xb7da, 0xb81f, 0xb866, 0xb8af, 0xb8f3, 0xb93b, + 0xb97f, 0xb9c7, 0xb9f5, 0xba25, 0xba54, 0xba85, 0xbacc, 0xbb13, + 0xbb37, 0xbb59, 0xbb7e, 0xbba2, 0xbbc7, 0xbbed, 0xbc0c, 0xbc2d, + 0xbc50, 0xbc6d, 0xbc8b, 0xbca9, 0xbcb7, 0xbcc6, 0xbcd2, 0xbce0, + 0xbcfd, 0xbd0c, 0xbd21, 0xbd39, 0xbd52, 0xbd68, 0xbd7f, 0xbd9c, + // Entry 2500 - 253F + 0xbdba, 0xbdd9, 0xbdf9, 0xbe1a, 0xbe3c, 0xbe67, 0xbe96, 0xbec4, + 0xbef0, 0xbf0b, 0xbf27, 0xbf41, 0xbf5f, 0xbf83, 0xbfa5, 0xbfc6, + 0xbfe8, 0xbff4, 0xc008, 0xc023, 0xc042, 0xc05f, 0xc072, 0xc07d, + 0xc099, 0xc0b3, 0xc0bf, 0xc0cd, 0xc0e0, 0xc0fc, 0xc114, 0xc12e, + 0xc170, 0xc1b1, 0xc1f5, 0xc238, 0xc27a, 0xc2bb, 0xc2ff, 0xc342, + 0xc354, 0xc36a, 0xc38b, 0xc3ab, 0xc3ca, 0xc3e4, 0xc3f8, 0xc408, + 0xc41f, 0xc434, 0xc479, 0xc493, 0xc4be, 0xc4d5, 0xc4e9, 0xc4f7, + 0xc508, 0xc51c, 0xc541, 0xc570, 0xc58d, 0xc5ab, 0xc5bb, 0xc5cf, + // Entry 2540 - 257F + 0xc5dd, 0xc5ef, 0xc606, 0xc61c, 0xc629, 0xc647, 0xc669, 0xc68a, + 0xc6ac, 0xc6c7, 0xc6e3, 0xc6ef, 0xc709, 0xc724, 0xc733, 0xc742, + 0xc753, 0xc765, 0xc77d, 0xc796, 0xc7a9, 0xc7ba, 0xc7dc, 0xc7f1, + 0xc80e, 0xc81a, 0xc829, 0xc849, 0xc87a, 0xc89b, 0xc8a7, 0xc8b4, + 0xc8df, 0xc90b, 0xc928, 0xc935, 0xc951, 0xc96d, 0xc986, 0xc99f, + 0xc9b9, 0xc9d3, 0xc9ec, 0xca05, 0xca11, 0xca29, 0xca3d, 0xca63, + 0xca6e, 0xca81, 0xca8c, 0xca97, 0xcab9, 0xcadc, 0xcae0, 0xcae4, + 0xcafe, 0xcb19, 0xcb35, 0xcb52, 0xcb70, 0xcb92, 0xcbad, 0xcbc5, + // Entry 2580 - 25BF + 0xcbdc, 0xcbf0, 0xcbfe, 0xcc15, 0xcc30, 0xcc44, 0xcc5f, 0xcc7a, + 0xcc8e, 0xcca7, 0xccd9, 0xcd0c, 0xcd33, 0xcd53, 0xcd6f, 0xcd96, + 0xcdae, 0xcdc8, 0xcddb, 0xcdf0, 0xce06, 0xce0a, 0xce26, 0xce43, + 0xce5b, 0xce77, 0xce98, 0xcebe, 0xced8, 0xcef0, 0xcf0a, 0xcf26, + 0xcf43, 0xcf5e, 0xcf77, 0xcf93, 0xcfae, 0xcfcb, 0xcfe9, 0xd000, + 0xd022, 0xd043, 0xd068, 0xd075, 0xd09c, 0xd0c4, 0xd0f6, 0xd11a, + 0xd12f, 0xd144, 0xd15a, 0xd179, 0xd189, 0xd1a3, 0xd1c4, 0xd1dd, + 0xd1f2, 0xd207, 0xd219, 0xd232, 0xd24f, 0xd264, 0xd27c, 0xd294, + // Entry 25C0 - 25FF + 0xd2b6, 0xd2d8, 0xd2fa, 0xd32a, 0xd342, 0xd361, 0xd37b, 0xd38e, + 0xd3b8, 0xd3d2, 0xd3eb, 0xd3fd, 0xd40e, 0xd42a, 0xd445, 0xd455, + 0xd466, 0xd488, 0xd4a4, 0xd4bf, 0xd4df, 0xd4fe, 0xd51d, 0xd536, + 0xd556, 0xd56d, 0xd58b, 0xd5aa, 0xd5cb, 0xd5eb, 0xd605, 0xd61d, + 0xd64e, 0xd67f, 0xd69c, 0xd6bb, 0xd6d0, 0xd6e8, 0xd6fc, 0xd722, + 0xd741, 0xd75c, 0xd777, 0xd797, 0xd7a9, 0xd7c5, 0xd7e3, 0xd815, + 0xd834, 0xd850, 0xd86f, 0xd891, 0xd8b6, 0xd8d3, 0xd8f3, 0xd920, + 0xd950, 0xd97c, 0xd9ab, 0xd9dd, 0xda11, 0xda29, 0xda44, 0xda6a, + // Entry 2600 - 263F + 0xda93, 0xdab0, 0xdad0, 0xdb04, 0xdb38, 0xdb58, 0xdb7b, 0xdba5, + 0xdbcf, 0xdc03, 0xdc37, 0xdc7b, 0xdcbf, 0xdcdc, 0xdcfc, 0xdd29, + 0xdd59, 0xdd7a, 0xdd9e, 0xddc7, 0xddf3, 0xde07, 0xde1e, 0xde47, + 0xde73, 0xde8a, 0xdea4, 0xdec9, 0xdeeb, 0xdf08, 0xdf21, 0xdf3d, + 0xdf6a, 0xdf9a, 0xdfa6, 0xdfb1, 0xdfc9, 0xdfe0, 0xdffc, 0xe022, + 0xe048, 0xe06f, 0xe096, 0xe0b0, 0xe0ca, 0xe0e5, 0xe100, 0xe11e, + 0xe13c, 0xe15e, 0xe180, 0xe18f, 0xe19e, 0xe1ad, 0xe1be, 0xe1d9, + 0xe1f6, 0xe21b, 0xe242, 0xe266, 0xe28c, 0xe2a7, 0xe2c4, 0xe2e2, + // Entry 2640 - 267F + 0xe302, 0xe321, 0xe342, 0xe35e, 0xe37c, 0xe399, 0xe3b7, 0xe3c4, + 0xe3d3, 0xe3ec, 0xe407, 0xe41c, 0xe431, 0xe444, 0xe45b, 0xe471, + 0xe49f, 0xe4bb, 0xe4d1, 0xe4e9, 0xe4f0, 0xe4fa, 0xe509, 0xe518, + 0xe525, 0xe539, 0xe55c, 0xe57e, 0xe5a0, 0xe5c9, 0xe5f6, 0xe612, + 0xe62d, 0xe650, 0xe660, 0xe66e, 0xe684, 0xe6a3, 0xe6cf, 0xe6ee, + 0xe70d, 0xe728, 0xe747, 0xe763, 0xe786, 0xe7b0, 0xe7c5, 0xe7dc, + 0xe7f6, 0xe81f, 0xe84b, 0xe869, 0xe88b, 0xe8a2, 0xe8b4, 0xe8cc, + 0xe8e2, 0xe8f8, 0xe90e, 0xe924, 0xe93a, 0xe94f, 0xe962, 0xe977, + // Entry 2680 - 26BF + 0xe98d, 0xe9a3, 0xe9b9, 0xe9cf, 0xe9e5, 0xe9f8, 0xea1b, 0xea3c, + 0xea5e, 0xea7e, 0xea98, 0xeab5, 0xeae0, 0xeb0a, 0xeb26, 0xeb43, + 0xeb5e, 0xeb7c, 0xeb89, 0xeb9b, 0xebad, 0xebc4, 0xebdb, 0xebe9, + 0xebf7, 0xec04, 0xec11, 0xec29, 0xec3b, 0xec4f, 0xec63, 0xec77, + 0xec8b, 0xec9e, 0xecb1, 0xecc4, 0xecdc, 0xecf4, 0xed0a, 0xed20, + 0xed3c, 0xed52, 0xed6e, 0xed8b, 0xedba, 0xedf0, 0xee13, 0xee39, + 0xee59, 0xee87, 0xeebc, 0xeee0, 0xef19, 0xef59, 0xef72, 0xef93, + 0xefb4, 0xefe0, 0xf00d, 0xf032, 0xf053, 0xf06c, 0xf086, 0xf0b3, + // Entry 26C0 - 26FF + 0xf0e1, 0xf105, 0xf12a, 0xf156, 0xf183, 0xf1a9, 0xf1c2, 0xf1df, + 0xf1f0, 0xf200, 0xf210, 0xf22d, 0xf24a, 0xf25c, 0xf277, 0xf296, + 0xf2a2, 0xf2b7, 0xf2db, 0xf303, 0xf32b, 0xf357, 0xf384, 0xf3b7, + 0xf3d6, 0xf3f3, 0xf413, 0xf432, 0xf452, 0xf46f, 0xf48f, 0xf4af, + 0xf4cf, 0xf4ef, 0xf515, 0xf539, 0xf560, 0xf586, 0xf5b1, 0xf5e0, + 0xf606, 0xf62a, 0xf651, 0xf677, 0xf69e, 0xf6c5, 0xf6ec, 0xf713, + 0xf750, 0xf78b, 0xf7c9, 0xf806, 0xf818, 0xf828, 0xf86d, 0xf8b7, + 0xf8fc, 0xf946, 0xf96d, 0xf992, 0xf9ba, 0xf9e1, 0xfa04, 0xfa25, + // Entry 2700 - 273F + 0xfa49, 0xfa6c, 0xfa9e, 0xfad1, 0xfb02, 0xfb32, 0xfb3d, 0xfb49, + 0xfb55, 0xfb62, 0xfb8b, 0xfba1, 0xfbd4, 0xfc07, 0xfc3b, 0xfc6f, + 0xfc94, 0xfcb7, 0xfcdd, 0xfd02, 0xfd39, 0xfd71, 0xfda6, 0xfddc, + 0xfe11, 0xfe47, 0xfe7e, 0xfeb6, 0xfee0, 0xff0b, 0xff33, 0xff5c, + 0xff84, 0xffad, 0xffd7, 0x0002, 0x0018, 0x002f, 0x0043, 0x0058, + 0x006c, 0x0081, 0x0097, 0x00ae, 0x00de, 0x00fd, 0x0114, 0x011d, + 0x012b, 0x013f, 0x0154, 0x0169, 0x0181, 0x018e, 0x01b7, 0x01e2, + 0x020d, 0x0239, 0x024e, 0x0266, 0x0283, 0x02a8, 0x02bf, 0x02de, + // Entry 2740 - 277F + 0x02f7, 0x0307, 0x0311, 0x0344, 0x0375, 0x03a9, 0x03dc, 0x03f9, + 0x0417, 0x0435, 0x0456, 0x0475, 0x0494, 0x04b5, 0x04d4, 0x04f4, + 0x0512, 0x0538, 0x0553, 0x0573, 0x0591, 0x05b2, 0x05d3, 0x05f2, + 0x060f, 0x062f, 0x064e, 0x066d, 0x068d, 0x06aa, 0x06c9, 0x06e7, + 0x0704, 0x0720, 0x073e, 0x075b, 0x077b, 0x0798, 0x07b6, 0x07d4, + 0x07f2, 0x0816, 0x0832, 0x0855, 0x0882, 0x089e, 0x08c9, 0x08ea, + 0x0913, 0x0931, 0x0952, 0x0973, 0x0999, 0x09c3, 0x09de, 0x09fa, + 0x0a16, 0x0a35, 0x0a52, 0x0a6f, 0x0a8e, 0x0aab, 0x0ac9, 0x0ae5, + // Entry 2780 - 27BF + 0x0b09, 0x0b22, 0x0b40, 0x0b5c, 0x0b7b, 0x0b9a, 0x0bb7, 0x0bd2, + 0x0bf0, 0x0c0d, 0x0c2a, 0x0c48, 0x0c63, 0x0c80, 0x0c9c, 0x0cb7, + 0x0cd1, 0x0ced, 0x0d08, 0x0d26, 0x0d41, 0x0d5d, 0x0d79, 0x0d95, + 0x0db7, 0x0dd1, 0x0df2, 0x0e1d, 0x0e37, 0x0e60, 0x0e7f, 0x0ea6, + 0x0ec2, 0x0ee1, 0x0f00, 0x0f24, 0x0f4c, 0x0f72, 0x0f96, 0x0fbe, + 0x0fe0, 0x1000, 0x1020, 0x1049, 0x106e, 0x1091, 0x10b6, 0x10d9, + 0x10fe, 0x1121, 0x113b, 0x115b, 0x1178, 0x1199, 0x11bd, 0x11dd, + 0x11fb, 0x1219, 0x1234, 0x124d, 0x126c, 0x128b, 0x12b0, 0x12d9, + // Entry 27C0 - 27FF + 0x12fc, 0x131a, 0x1333, 0x1359, 0x137f, 0x1399, 0x13b1, 0x13cb, + 0x13e3, 0x13fe, 0x1417, 0x1432, 0x144b, 0x1464, 0x147b, 0x1494, + 0x14ab, 0x14c5, 0x14dd, 0x14f7, 0x150f, 0x152b, 0x1545, 0x1560, + 0x1579, 0x1593, 0x15ab, 0x15c6, 0x15df, 0x15f7, 0x160d, 0x1625, + 0x163b, 0x1654, 0x166b, 0x1682, 0x1697, 0x16af, 0x16c5, 0x16dd, + 0x16f3, 0x170d, 0x1725, 0x173e, 0x1755, 0x176d, 0x1783, 0x179b, + 0x17b1, 0x17ca, 0x17e1, 0x17fa, 0x1811, 0x182a, 0x1841, 0x1865, + 0x1887, 0x18ab, 0x18cd, 0x18f4, 0x1919, 0x193d, 0x195f, 0x1981, + // Entry 2800 - 283F + 0x19a1, 0x19c7, 0x19eb, 0x1a0f, 0x1a31, 0x1a4c, 0x1a65, 0x1a87, + 0x1aa7, 0x1acc, 0x1aef, 0x1b13, 0x1b35, 0x1b58, 0x1b79, 0x1b9d, + 0x1bbf, 0x1be4, 0x1c07, 0x1c2a, 0x1c4b, 0x1c6c, 0x1c8b, 0x1caf, + 0x1cd1, 0x1cf5, 0x1d17, 0x1d3e, 0x1d63, 0x1d87, 0x1da9, 0x1dcf, + 0x1df3, 0x1e19, 0x1e3d, 0x1e61, 0x1e83, 0x1ea7, 0x1ec9, 0x1eed, + 0x1f0f, 0x1f20, 0x1f33, 0x1f46, 0x1f5b, 0x1f6f, 0x1f83, 0x1f9b, + 0x1fc3, 0x1fe9, 0x2013, 0x203b, 0x2054, 0x2073, 0x2092, 0x20b5, + 0x20d6, 0x20f1, 0x2117, 0x213f, 0x215e, 0x2176, 0x2186, 0x21a2, + // Entry 2840 - 287F + 0x21ba, 0x21d3, 0x21ec, 0x2205, 0x221d, 0x2236, 0x224f, 0x2268, + 0x2280, 0x2299, 0x22b2, 0x22cb, 0x22e4, 0x22fc, 0x2315, 0x232f, + 0x2348, 0x2361, 0x237a, 0x2392, 0x23ac, 0x23c6, 0x23e0, 0x23f9, + 0x2413, 0x242d, 0x2446, 0x245f, 0x2478, 0x2492, 0x24ab, 0x24c5, + 0x24de, 0x24f6, 0x250f, 0x2527, 0x2540, 0x2559, 0x2571, 0x258a, + 0x259c, 0x25af, 0x25c3, 0x25d6, 0x25eb, 0x260d, 0x2620, 0x2633, + 0x2647, 0x265b, 0x2670, 0x2683, 0x2696, 0x26a9, 0x26c3, 0x26d8, + 0x26eb, 0x270d, 0x2727, 0x273b, 0x274e, 0x2762, 0x277d, 0x2790, + // Entry 2880 - 28BF + 0x27aa, 0x27bc, 0x27d0, 0x27ec, 0x2807, 0x281a, 0x282d, 0x2840, + 0x285b, 0x2876, 0x2889, 0x289b, 0x28ae, 0x28c2, 0x28d6, 0x28f1, + 0x290a, 0x291d, 0x2931, 0x2945, 0x2958, 0x296c, 0x2980, 0x2994, + 0x29a7, 0x29ba, 0x29cd, 0x29e0, 0x29fe, 0x2a12, 0x2a24, 0x2a36, + 0x2a61, 0x2a78, 0x2a91, 0x2aa6, 0x2abb, 0x2ad0, 0x2ae5, 0x2afb, + 0x2b10, 0x2b25, 0x2b3a, 0x2b4f, 0x2b65, 0x2b81, 0x2b96, 0x2bab, + 0x2bc1, 0x2bd6, 0x2bec, 0x2c02, 0x2c18, 0x2c2d, 0x2c43, 0x2c59, + 0x2c70, 0x2c86, 0x2c9b, 0x2cb0, 0x2cc5, 0x2cdb, 0x2cf1, 0x2d06, + // Entry 28C0 - 28FF + 0x2d1b, 0x2d30, 0x2d45, 0x2d5a, 0x2d70, 0x2d86, 0x2d9b, 0x2db0, + 0x2dc5, 0x2dda, 0x2def, 0x2e05, 0x2e1b, 0x2e30, 0x2e45, 0x2e5b, + 0x2e71, 0x2e87, 0x2e9e, 0x2eb5, 0x2ecb, 0x2ee1, 0x2ef6, 0x2f0b, + 0x2f20, 0x2f36, 0x2f4c, 0x2f61, 0x2f76, 0x2f8b, 0x2fa0, 0x2fb5, + 0x2fcb, 0x2fe1, 0x2ff6, 0x300b, 0x3020, 0x3035, 0x304a, 0x3060, + 0x3076, 0x308b, 0x30a0, 0x30b5, 0x30ca, 0x30df, 0x30f5, 0x310b, + 0x3120, 0x3135, 0x3151, 0x316d, 0x318a, 0x31a6, 0x31c3, 0x31df, + 0x31fb, 0x3217, 0x3233, 0x324f, 0x326a, 0x3286, 0x32a2, 0x32be, + // Entry 2900 - 293F + 0x32da, 0x32f6, 0x3313, 0x3330, 0x334d, 0x336c, 0x338a, 0x33a9, + 0x33c4, 0x33e0, 0x33ff, 0x3425, 0x3442, 0x345e, 0x3482, 0x34a6, + 0x34c7, 0x34f1, 0x3510, 0x3536, 0x354f, 0x3569, 0x3589, 0x35aa, + 0x35c5, 0x35e7, 0x3602, 0x361c, 0x3637, 0x3644, 0x3660, 0x367d, + 0x368e, 0x3699, 0x36ab, 0x36c6, 0x36d2, 0x36df, 0x36ef, 0x36fd, + 0x3718, 0x372d, 0x3741, 0x374c, 0x3761, 0x3776, 0x3791, 0x37ad, + 0x37c1, 0x37d5, 0x37f1, 0x380e, 0x3823, 0x3839, 0x3851, 0x386a, + 0x3881, 0x3899, 0x38b0, 0x38c8, 0x38e9, 0x390a, 0x3926, 0x3933, + // Entry 2940 - 297F + 0x3949, 0x3957, 0x3961, 0x397a, 0x3986, 0x3990, 0x399c, 0x39ac, + 0x39c2, 0x39d9, 0x39e6, 0x39fb, 0x3a06, 0x3a13, 0x3a29, 0x3a3a, + 0x3a4e, 0x3a57, 0x3a64, 0x3a72, 0x3a96, 0x3aab, 0x3ac1, 0x3ad4, + 0x3af9, 0x3b03, 0x3b16, 0x3b2a, 0x3b3c, 0x3b4d, 0x3b63, 0x3b79, + 0x3b91, 0x3ba3, 0x3bb2, 0x3bc3, 0x3bd8, 0x3bed, 0x3c03, 0x3c13, + 0x3c28, 0x3c3d, 0x3c51, 0x3c65, 0x3c7b, 0x3c90, 0x3ca1, 0x3cb3, + 0x3cc8, 0x3cdd, 0x3cf2, 0x3d07, 0x3d17, 0x3d26, 0x3d37, 0x3d46, + 0x3d56, 0x3d67, 0x3d79, 0x3d8d, 0x3da2, 0x3db7, 0x3dc7, 0x3dda, + // Entry 2980 - 29BF + 0x3ded, 0x3e13, 0x3e22, 0x3e31, 0x3e41, 0x3e5a, 0x3e69, 0x3e7f, + 0x3e95, 0x3ea7, 0x3eb7, 0x3ed4, 0x3ee7, 0x3efa, 0x3f0f, 0x3f23, + 0x3f33, 0x3f44, 0x3f53, 0x3f62, 0x3f71, 0x3f86, 0x3f9b, 0x3fab, + 0x3fbd, 0x3fd2, 0x3fe7, 0x3ffe, 0x400f, 0x4022, 0x4036, 0x404a, + 0x4066, 0x4081, 0x4091, 0x40b0, 0x40ce, 0x40de, 0x40fb, 0x4116, + 0x412a, 0x413e, 0x414e, 0x416b, 0x417f, 0x4193, 0x41b0, 0x41cd, + 0x41e2, 0x41f7, 0x4207, 0x4217, 0x423e, 0x425b, 0x4278, 0x4294, + 0x42a7, 0x42ba, 0x42cf, 0x42eb, 0x42fb, 0x4319, 0x4329, 0x433a, + // Entry 29C0 - 29FF + 0x4357, 0x4374, 0x4391, 0x43ad, 0x43ca, 0x43e7, 0x4404, 0x4421, + 0x443f, 0x445d, 0x447c, 0x449b, 0x44ad, 0x44cc, 0x44eb, 0x44fd, + 0x4510, 0x4522, 0x4536, 0x454b, 0x455e, 0x4570, 0x4582, 0x4594, + 0x45a7, 0x45bb, 0x45cf, 0x45e6, 0x45fa, 0x460c, 0x4620, 0x4637, + 0x464b, 0x465f, 0x4672, 0x4686, 0x46a3, 0x46c2, 0x46d4, 0x46ed, + 0x4700, 0x4714, 0x472a, 0x473e, 0x4752, 0x476a, 0x477e, 0x4794, + 0x47a5, 0x47bd, 0x47d3, 0x47e5, 0x47f9, 0x480d, 0x4820, 0x4833, + 0x4847, 0x485a, 0x486f, 0x4884, 0x489b, 0x48af, 0x48c2, 0x48d8, + // Entry 2A00 - 2A3F + 0x48ed, 0x48ff, 0x491a, 0x4935, 0x494f, 0x4967, 0x497b, 0x498d, + 0x49a1, 0x49b7, 0x49ca, 0x49de, 0x49f4, 0x4a07, 0x4a1a, 0x4a2f, + 0x4a41, 0x4a56, 0x4a6b, 0x4a7d, 0x4a92, 0x4aa4, 0x4ab6, 0x4ac8, + 0x4adb, 0x4aee, 0x4b01, 0x4b14, 0x4b28, 0x4b3d, 0x4b52, 0x4b68, + 0x4b7a, 0x4b8d, 0x4ba1, 0x4bb5, 0x4bc8, 0x4bdb, 0x4bf0, 0x4c07, + 0x4c25, 0x4c39, 0x4c4c, 0x4c5e, 0x4c70, 0x4c87, 0x4c9a, 0x4cae, + 0x4cc1, 0x4cd5, 0x4ce8, 0x4cfa, 0x4d0e, 0x4d2a, 0x4d41, 0x4d5b, + 0x4d6f, 0x4d82, 0x4d95, 0x4da7, 0x4dbb, 0x4dcf, 0x4de3, 0x4df8, + // Entry 2A40 - 2A7F + 0x4e0c, 0x4e20, 0x4e33, 0x4e47, 0x4e5c, 0x4e6f, 0x4e82, 0x4e94, + 0x4ea6, 0x4eba, 0x4ed0, 0x4ee2, 0x4ef4, 0x4f07, 0x4f19, 0x4f2d, + 0x4f40, 0x4f57, 0x4f6a, 0x4f7f, 0x4f94, 0x4fa9, 0x4fbe, 0x4fd1, + 0x4fe8, 0x4ffc, 0x5010, 0x5024, 0x5039, 0x504d, 0x506a, 0x5080, + 0x5093, 0x50a5, 0x50b8, 0x50cd, 0x50e2, 0x50f5, 0x5107, 0x511c, + 0x5130, 0x5142, 0x5154, 0x5167, 0x517a, 0x518d, 0x51a2, 0x51b8, + 0x51cb, 0x51de, 0x51f1, 0x520b, 0x5221, 0x5234, 0x5247, 0x525a, + 0x526e, 0x5282, 0x52a2, 0x52b5, 0x52c8, 0x52dc, 0x52ef, 0x5305, + // Entry 2A80 - 2ABF + 0x5322, 0x5335, 0x5349, 0x535c, 0x536f, 0x5381, 0x5393, 0x53a6, + 0x53bd, 0x53d1, 0x53e4, 0x53f7, 0x540a, 0x541e, 0x543d, 0x5454, + 0x5468, 0x547b, 0x548e, 0x54a1, 0x54b4, 0x54c8, 0x54db, 0x54f0, + 0x5505, 0x5519, 0x5532, 0x5545, 0x555a, 0x556d, 0x557f, 0x5592, + 0x55a5, 0x55b9, 0x55ce, 0x55e3, 0x55f7, 0x5626, 0x5656, 0x5690, + 0x56cb, 0x56fa, 0x572f, 0x5764, 0x5798, 0x57d2, 0x580d, 0x5847, + 0x5871, 0x5882, 0x5893, 0x58a8, 0x58b2, 0x58d5, 0x58ef, 0x5907, + 0x591e, 0x5930, 0x5943, 0x595c, 0x5976, 0x5989, 0x599d, 0x59b6, + // Entry 2AC0 - 2AFF + 0x59d0, 0x59ed, 0x5a0b, 0x5a16, 0x5a1f, 0x5a3a, 0x5a56, 0x5a73, + 0x5a91, 0x5ab2, 0x5ad4, 0x5aed, 0x5b07, 0x5b10, 0x5b34, 0x5b4f, + 0x5b6e, 0x5b7e, 0x5b92, 0x5ba6, 0x5bbc, 0x5bd1, 0x5be6, 0x5bfa, + 0x5c10, 0x5c26, 0x5c3b, 0x5c56, 0x5c72, 0x5c91, 0x5caf, 0x5cca, + 0x5ce5, 0x5cee, 0x5d07, 0x5d32, 0x5d56, 0x5d8c, 0x5db0, 0x5dc3, + 0x5df3, 0x5e07, 0x5e1e, 0x5e35, 0x5e58, 0x5e61, 0x5e76, 0x5e95, + 0x5eb0, 0x5ec7, 0x5ed8, 0x5eef, 0x5f00, 0x5f17, 0x5f28, 0x5f3f, + 0x5f50, 0x5f67, 0x5f78, 0x5f8a, 0x5f9c, 0x5fae, 0x5fc0, 0x5fd2, + // Entry 2B00 - 2B3F + 0x5fe4, 0x5ff6, 0x6008, 0x601a, 0x602c, 0x603e, 0x6050, 0x6062, + 0x6074, 0x6086, 0x6098, 0x60aa, 0x60bc, 0x60ce, 0x60e0, 0x60f2, + 0x6104, 0x6116, 0x6128, 0x6140, 0x6152, 0x6164, 0x6176, 0x6188, + 0x619a, 0x61ac, 0x61be, 0x61d0, 0x61e2, 0x61f4, 0x6206, 0x6218, + 0x622a, 0x623c, 0x624e, 0x6260, 0x6272, 0x6284, 0x6296, 0x62a8, + 0x62ba, 0x62cc, 0x62de, 0x62f0, 0x6302, 0x6314, 0x6326, 0x6338, + 0x634a, 0x635c, 0x636e, 0x6386, 0x6398, 0x63b0, 0x63c2, 0x63da, + 0x63ec, 0x63fe, 0x6410, 0x6422, 0x6434, 0x6446, 0x645e, 0x6470, + // Entry 2B40 - 2B7F + 0x6482, 0x6494, 0x64a6, 0x64b7, 0x64c9, 0x64e1, 0x64f9, 0x6526, + 0x6558, 0x657b, 0x65a3, 0x65ba, 0x65d8, 0x65ed, 0x660c, 0x6623, + 0x6634, 0x664b, 0x665c, 0x6673, 0x6684, 0x669b, 0x66ac, 0x66c3, + 0x66d4, 0x66e6, 0x66f8, 0x670a, 0x671c, 0x672e, 0x6740, 0x6752, + 0x6764, 0x6776, 0x6788, 0x679a, 0x67ac, 0x67be, 0x67d0, 0x67e2, + 0x67f4, 0x6806, 0x6818, 0x682a, 0x683c, 0x684e, 0x6860, 0x6872, + 0x6884, 0x689c, 0x68ae, 0x68c0, 0x68d2, 0x68e4, 0x68f6, 0x6908, + 0x691a, 0x692c, 0x693e, 0x6950, 0x6962, 0x6974, 0x6986, 0x6998, + // Entry 2B80 - 2BBF + 0x69aa, 0x69bc, 0x69ce, 0x69e0, 0x69f2, 0x6a04, 0x6a16, 0x6a28, + 0x6a3a, 0x6a4c, 0x6a5e, 0x6a70, 0x6a82, 0x6a94, 0x6aa6, 0x6ab8, + 0x6aca, 0x6ae2, 0x6af4, 0x6b0c, 0x6b1e, 0x6b36, 0x6b48, 0x6b5a, + 0x6b6c, 0x6b7e, 0x6b90, 0x6ba2, 0x6bba, 0x6bcc, 0x6bde, 0x6bf0, + 0x6c02, 0x6c13, 0x6c25, 0x6c3d, 0x6c55, 0x6c67, 0x6c79, 0x6c8b, + 0x6c9d, 0x6cb0, 0x6cd6, 0x6ced, 0x6d0b, 0x6d20, 0x6d31, 0x6d42, + 0x6d53, 0x6d64, 0x6d75, 0x6d86, 0x6d97, 0x6da8, 0x6db9, 0x6dca, + 0x6ddb, 0x6dec, 0x6dfd, 0x6e0e, 0x6e20, 0x6e32, 0x6e44, 0x6e55, + // Entry 2BC0 - 2BFF + 0x6e66, 0x6e77, 0x6e88, 0x6e99, 0x6eaa, 0x6ebb, 0x6ecd, 0x6edf, + 0x6ef1, 0x6f03, 0x6f15, 0x6f27, 0x6f39, 0x6f4c, 0x6f5f, 0x6f71, + 0x6f82, 0x6f93, 0x6fa5, 0x6fb6, 0x6fc8, 0x6fda, 0x6fec, 0x700c, + 0x7020, 0x7039, 0x7052, 0x7065, 0x707e, 0x7097, 0x70ab, 0x70c4, + 0x70d7, 0x70f1, 0x710a, 0x7123, 0x713b, 0x7156, 0x7171, 0x718a, + 0x719d, 0x71b0, 0x71c8, 0x71e0, 0x71f2, 0x7209, 0x721c, 0x722f, + 0x7247, 0x725c, 0x7271, 0x7286, 0x729b, 0x72ae, 0x72bd, 0x72cd, + 0x72dd, 0x72ee, 0x72fe, 0x730d, 0x731e, 0x732e, 0x733d, 0x734d, + // Entry 2C00 - 2C3F + 0x735e, 0x736e, 0x737e, 0x738d, 0x739e, 0x73ae, 0x73be, 0x73ce, + 0x73de, 0x73ee, 0x73fd, 0x740a, 0x7422, 0x743c, 0x7454, 0x746f, + 0x748e, 0x74a8, 0x74c6, 0x74e1, 0x7500, 0x7519, 0x7531, 0x754c, + 0x7567, 0x7581, 0x759b, 0x75ba, 0x75d9, 0x75f2, 0x760d, 0x7628, + 0x7648, 0x7661, 0x7679, 0x7692, 0x76aa, 0x76c2, 0x76d7, 0x76ef, + 0x7705, 0x7720, 0x773e, 0x775b, 0x7773, 0x778c, 0x779f, 0x77b3, + 0x77c5, 0x77d9, 0x77ec, 0x77fe, 0x7811, 0x7825, 0x7848, 0x786b, + 0x788a, 0x78a9, 0x78ca, 0x78ea, 0x7909, 0x792b, 0x794d, 0x796e, + // Entry 2C40 - 2C7F + 0x7990, 0x79b1, 0x79d3, 0x79f5, 0x7a16, 0x7a35, 0x7a47, 0x7a59, + 0x7a6b, 0x7a7d, 0x7a8f, 0x7aa2, 0x7ab4, 0x7ac7, 0x7ad9, 0x7aec, + 0x7aff, 0x7b12, 0x7b24, 0x7b37, 0x7b4b, 0x7b5f, 0x7b71, 0x7b83, + 0x7b96, 0x7baa, 0x7bc1, 0x7bd8, 0x7bef, 0x7c06, 0x7c18, 0x7c2a, + 0x7c3c, 0x7c48, 0x7c55, 0x7c62, 0x7c70, 0x7c7d, 0x7c8b, 0x7c99, + 0x7ca6, 0x7cb5, 0x7cc4, 0x7cd2, 0x7ce1, 0x7cf0, 0x7cfe, 0x7d0d, + 0x7d19, 0x7d25, 0x7d31, 0x7d3d, 0x7d4a, 0x7d56, 0x7d63, 0x7d70, + 0x7d7d, 0x7d8b, 0x7d98, 0x7da5, 0x7db2, 0x7dbf, 0x7dcc, 0x7dda, + // Entry 2C80 - 2CBF + 0x7de8, 0x7df7, 0x7e07, 0x7e14, 0x7e20, 0x7e38, 0x7e50, 0x7e68, + 0x7e80, 0x7e98, 0x7eb0, 0x7ec8, 0x7ee0, 0x7ef8, 0x7f10, 0x7f28, + 0x7f40, 0x7f58, 0x7f70, 0x7f88, 0x7fa0, 0x7fbb, 0x7fd5, 0x7ff0, + 0x800a, 0x8024, 0x803e, 0x8057, 0x8071, 0x808b, 0x80a7, 0x80c3, + 0x80df, 0x80fb, 0x8115, 0x8132, 0x814e, 0x816b, 0x8187, 0x81a3, + 0x81bf, 0x81da, 0x81f6, 0x8212, 0x8230, 0x824e, 0x826c, 0x828a, + 0x82a6, 0x82c2, 0x82e6, 0x8309, 0x8324, 0x833f, 0x835c, 0x8378, + 0x8394, 0x83af, 0x83cc, 0x83e9, 0x8405, 0x8420, 0x843c, 0x8458, + // Entry 2CC0 - 2CFF + 0x8475, 0x8491, 0x84ae, 0x84cb, 0x84e6, 0x8503, 0x851f, 0x853e, + 0x855a, 0x8579, 0x859a, 0x85c0, 0x85dd, 0x85fe, 0x861a, 0x8637, + 0x8658, 0x867a, 0x869a, 0x86ba, 0x86da, 0x86f6, 0x8712, 0x872f, + 0x8749, 0x8767, 0x877f, 0x8795, 0x87b7, 0x87dc, 0x8801, 0x8825, + 0x8849, 0x886d, 0x8893, 0x88b8, 0x88c8, 0x88e1, 0x88fa, 0x8915, + 0x892f, 0x8949, 0x8962, 0x897d, 0x8998, 0x89b2, 0x89c7, 0x89e0, + 0x89f9, 0x8a14, 0x8a2e, 0x8a48, 0x8a5d, 0x8a71, 0x8a86, 0x8a9a, + 0x8aae, 0x8ac2, 0x8ad5, 0x8ae9, 0x8afd, 0x8b13, 0x8b29, 0x8b3f, + // Entry 2D00 - 2D3F + 0x8b55, 0x8b69, 0x8b80, 0x8b96, 0x8bad, 0x8bc3, 0x8bd9, 0x8bef, + 0x8c04, 0x8c1a, 0x8c30, 0x8c48, 0x8c60, 0x8c78, 0x8c90, 0x8ca6, + 0x8cc5, 0x8ce3, 0x8cf9, 0x8d0f, 0x8d24, 0x8d39, 0x8d50, 0x8d66, + 0x8d7c, 0x8d91, 0x8da8, 0x8dbf, 0x8dd5, 0x8dea, 0x8e00, 0x8e16, + 0x8e2d, 0x8e43, 0x8e5a, 0x8e71, 0x8e86, 0x8e9d, 0x8eb3, 0x8ecc, + 0x8ee2, 0x8efb, 0x8f16, 0x8f36, 0x8f4d, 0x8f65, 0x8f7b, 0x8f93, + 0x8fad, 0x8fc8, 0x8fdf, 0x8ffa, 0x9010, 0x9026, 0x903c, 0x9055, + 0x906b, 0x9083, 0x9098, 0x90ae, 0x90c5, 0x90df, 0x90f9, 0x9110, + // Entry 2D40 - 2D7F + 0x912b, 0x9147, 0x9161, 0x917b, 0x9192, 0x91ab, 0x91c6, 0x91e1, + 0x91fb, 0x920f, 0x9227, 0x923f, 0x9259, 0x9272, 0x928b, 0x92a3, + 0x92bd, 0x92d7, 0x92f0, 0x9304, 0x932c, 0x9355, 0x937b, 0x93a1, + 0x93c5, 0x93ea, 0x940f, 0x9436, 0x9460, 0x9488, 0x94b1, 0x94da, + 0x94e3, 0x94ed, 0x94f6, 0x950c, 0x951e, 0x9530, 0x9542, 0x9554, + 0x9566, 0x9579, 0x958c, 0x959f, 0x95b2, 0x95c5, 0x95d8, 0x95eb, + 0x95fe, 0x9611, 0x9624, 0x9637, 0x964a, 0x965d, 0x9670, 0x9683, + 0x9696, 0x96a9, 0x96bc, 0x96cf, 0x96e2, 0x96f5, 0x9708, 0x971b, + // Entry 2D80 - 2DBF + 0x972e, 0x9741, 0x9754, 0x9767, 0x977a, 0x978d, 0x97a0, 0x97b3, + 0x97c6, 0x97d9, 0x97ec, 0x97ff, 0x9812, 0x9825, 0x9838, 0x984b, + 0x985e, 0x9871, 0x9884, 0x9891, 0x989e, 0x98aa, 0x98b5, 0x98c2, + 0x98cd, 0x98d7, 0x98e6, 0x98f2, 0x98fd, 0x9908, 0x9914, 0x9922, + 0x9930, 0x993c, 0x9948, 0x9953, 0x995f, 0x996c, 0x997a, 0x9985, + 0x9996, 0x99a8, 0x99b8, 0x99c5, 0x99d5, 0x99e5, 0x99f3, 0x99ff, + 0x9a0c, 0x9a18, 0x9a26, 0x9a35, 0x9a43, 0x9a4f, 0x9a5b, 0x9a67, + 0x9a72, 0x9a7d, 0x9a87, 0x9a92, 0x9a9e, 0x9aaa, 0x9ab9, 0x9ac5, + // Entry 2DC0 - 2DFF + 0x9ad3, 0x9ae3, 0x9af0, 0x9afb, 0x9b06, 0x9b15, 0x9b22, 0x9b31, + 0x9b3d, 0x9b4d, 0x9b58, 0x9b65, 0x9b72, 0x9b7e, 0x9b8a, 0x9b96, + 0x9ba3, 0x9bb0, 0x9bba, 0x9bc6, 0x9bd2, 0x9bdd, 0x9beb, 0x9bf7, + 0x9c03, 0x9c10, 0x9c1e, 0x9c2c, 0x9c37, 0x9c47, 0x9c52, 0x9c60, + 0x9c6e, 0x9c7a, 0x9c86, 0x9c91, 0x9c9f, 0x9caa, 0x9cb6, 0x9cc4, + 0x9ccf, 0x9cde, 0x9cea, 0x9d14, 0x9d3d, 0x9d66, 0x9d91, 0x9dbb, + 0x9de5, 0x9e0e, 0x9e39, 0x9e64, 0x9e8e, 0x9eb7, 0x9ee3, 0x9f0f, + 0x9f3d, 0x9f6b, 0x9f98, 0x9fc5, 0x9ff4, 0xa022, 0xa050, 0xa07c, + // Entry 2E00 - 2E3F + 0xa0ac, 0xa0dc, 0xa10e, 0xa13f, 0xa149, 0xa152, 0xa15b, 0xa165, + 0xa16e, 0xa177, 0xa180, 0xa191, 0xa1a0, 0xa1a9, 0xa1bf, 0xa1d5, + 0xa1ec, 0xa201, 0xa213, 0xa221, 0xa22a, 0xa235, 0xa23e, 0xa247, + 0xa250, 0xa259, 0xa262, 0xa26c, 0xa277, 0xa280, 0xa289, 0xa294, + 0xa29f, 0xa2a8, 0xa2b1, 0xa2ba, 0xa2c4, 0xa2ce, 0xa2d8, 0xa2e2, + 0xa2ed, 0xa2f6, 0xa2ff, 0xa308, 0xa311, 0xa31a, 0xa325, 0xa32e, + 0xa337, 0xa340, 0xa351, 0xa362, 0xa372, 0xa383, 0xa392, 0xa3a1, + 0xa3af, 0xa3be, 0xa3cd, 0xa3e4, 0xa3ed, 0xa3f7, 0xa401, 0xa40b, + // Entry 2E40 - 2E7F + 0xa415, 0xa426, 0xa43f, 0xa448, 0xa451, 0xa45c, 0xa465, 0xa46e, + 0xa477, 0xa482, 0xa48b, 0xa494, 0xa4a2, 0xa4ab, 0xa4b4, 0xa4bf, + 0xa4c8, 0xa4d1, 0xa4df, 0xa4eb, 0xa4f7, 0xa500, 0xa509, 0xa512, + 0xa51b, 0xa52b, 0xa534, 0xa53d, 0xa546, 0xa54f, 0xa558, 0xa561, + 0xa56a, 0xa57b, 0xa584, 0xa58d, 0xa596, 0xa5a0, 0xa5a9, 0xa5b8, + 0xa5c2, 0xa5cc, 0xa5d5, 0xa5de, 0xa5e8, 0xa5f1, 0xa5fa, 0xa603, + 0xa60c, 0xa61b, 0xa62a, 0xa652, 0xa67a, 0xa6a4, 0xa6cd, 0xa6f6, + 0xa71e, 0xa748, 0xa772, 0xa79b, 0xa7c3, 0xa7ee, 0xa819, 0xa846, + // Entry 2E80 - 2EBF + 0xa873, 0xa89f, 0xa8cb, 0xa8f9, 0xa926, 0xa953, 0xa97e, 0xa9ad, + 0xa9dc, 0xaa0d, 0xaa3d, 0xaa6d, 0xaa9c, 0xaacd, 0xaafe, 0xab2e, + 0xab59, 0xab88, 0xab92, 0xabb2, 0xabd2, 0xabfa, 0xac15, 0xac29, + 0xac3e, 0xac53, 0xac70, 0xac89, 0xac9e, 0xacb0, 0xacc7, 0xacde, + 0xacfb, 0xad0f, 0xad26, 0xad3c, 0xad5c, 0xad71, 0xad8b, 0xada6, + 0xadb8, 0xadd4, 0xade7, 0xadfd, 0xae16, 0xae30, 0xae50, 0xae6e, + 0xae8c, 0xaea2, 0xaeb7, 0xaecb, 0xaee3, 0xaef8, 0xaf1b, 0xaf32, + 0xaf49, 0xaf61, 0xaf79, 0xaf8e, 0xafa3, 0xafbc, 0xafd7, 0xaff6, + // Entry 2EC0 - 2EFF + 0xb011, 0xb028, 0xb03d, 0xb054, 0xb06d, 0xb08e, 0xb0b5, 0xb0cd, + 0xb0ed, 0xb103, 0xb11c, 0xb138, 0xb154, 0xb16b, 0xb182, 0xb19a, + 0xb1ba, 0xb1d7, 0xb1f5, 0xb203, 0xb211, 0xb21e, 0xb22c, 0xb23b, + 0xb24a, 0xb258, 0xb267, 0xb275, 0xb283, 0xb290, 0xb29e, 0xb2ad, + 0xb2bb, 0xb2ca, 0xb2d8, 0xb2e6, 0xb2f3, 0xb301, 0xb30f, 0xb31c, + 0xb32a, 0xb339, 0xb348, 0xb356, 0xb365, 0xb375, 0xb385, 0xb394, + 0xb3a4, 0xb3b3, 0xb3c2, 0xb3d0, 0xb3df, 0xb3ef, 0xb3fe, 0xb40e, + 0xb41d, 0xb42c, 0xb43a, 0xb449, 0xb458, 0xb466, 0xb475, 0xb484, + // Entry 2F00 - 2F3F + 0xb493, 0xb4a1, 0xb4b0, 0xb4c0, 0xb4cf, 0xb4de, 0xb4ed, 0xb4fb, + 0xb50a, 0xb51a, 0xb529, 0xb538, 0xb547, 0xb555, 0xb564, 0xb574, + 0xb583, 0xb593, 0xb5a2, 0xb5b1, 0xb5bf, 0xb5ce, 0xb5de, 0xb5ed, + 0xb5fd, 0xb60c, 0xb61b, 0xb629, 0xb638, 0xb647, 0xb656, 0xb664, + 0xb673, 0xb683, 0xb692, 0xb6a1, 0xb6b0, 0xb6be, 0xb6cd, 0xb6dd, + 0xb6ec, 0xb6fc, 0xb70c, 0xb71b, 0xb72b, 0xb73c, 0xb74d, 0xb75d, + 0xb76e, 0xb77e, 0xb78e, 0xb79d, 0xb7ad, 0xb7be, 0xb7ce, 0xb7df, + 0xb7ef, 0xb7ff, 0xb80e, 0xb81e, 0xb82e, 0xb83d, 0xb84d, 0xb85d, + // Entry 2F40 - 2F7F + 0xb86d, 0xb87c, 0xb88c, 0xb89d, 0xb8ad, 0xb8bd, 0xb8cd, 0xb8dc, + 0xb8ec, 0xb8fc, 0xb90c, 0xb91b, 0xb92b, 0xb93c, 0xb94c, 0xb95d, + 0xb96d, 0xb97d, 0xb98c, 0xb99c, 0xb9ac, 0xb9bc, 0xb9cb, 0xb9db, + 0xb9eb, 0xb9fb, 0xba0a, 0xba1a, 0xba2b, 0xba3b, 0xba4b, 0xba5b, + 0xba6a, 0xba7a, 0xba8b, 0xba9b, 0xbaab, 0xbabb, 0xbaca, 0xbada, + 0xbaeb, 0xbafb, 0xbb0c, 0xbb1c, 0xbb2c, 0xbb3b, 0xbb4b, 0xbb5c, + 0xbb6c, 0xbb7d, 0xbb8d, 0xbb9d, 0xbbac, 0xbbbc, 0xbbcc, 0xbbdc, + 0xbbeb, 0xbbfb, 0xbc0c, 0xbc1c, 0xbc2c, 0xbc3b, 0xbc4b, 0xbc5c, + // Entry 2F80 - 2FBF + 0xbc6c, 0xbc7b, 0xbc8a, 0xbc98, 0xbca7, 0xbcb7, 0xbcc6, 0xbcd6, + 0xbce5, 0xbcf4, 0xbd02, 0xbd11, 0xbd21, 0xbd31, 0xbd40, 0xbd50, + 0xbd5f, 0xbd6e, 0xbd7c, 0xbd8b, 0xbd9a, 0xbda8, 0xbdb7, 0xbdc6, + 0xbdd4, 0xbde3, 0xbdf3, 0xbe02, 0xbe11, 0xbe20, 0xbe2e, 0xbe3d, + 0xbe4c, 0xbe5b, 0xbe69, 0xbe78, 0xbe87, 0xbe96, 0xbea4, 0xbeb3, + 0xbec2, 0xbed0, 0xbedf, 0xbeee, 0xbefd, 0xbf0b, 0xbf1a, 0xbf2a, + 0xbf39, 0xbf48, 0xbf57, 0xbf65, 0xbf74, 0xbf83, 0xbf92, 0xbfa0, + 0xbfaf, 0xbfbf, 0xbfcf, 0xbfde, 0xbfee, 0xbffd, 0xc00c, 0xc01a, + // Entry 2FC0 - 2FFF + 0xc029, 0xc038, 0xc047, 0xc055, 0xc064, 0xc073, 0xc082, 0xc091, + 0xc0a0, 0xc0ae, 0xc0bd, 0xc0cd, 0xc0dc, 0xc0eb, 0xc0fa, 0xc108, + 0xc117, 0xc127, 0xc136, 0xc145, 0xc154, 0xc162, 0xc171, 0xc181, + 0xc190, 0xc1a0, 0xc1af, 0xc1be, 0xc1cc, 0xc1db, 0xc1eb, 0xc1fa, + 0xc209, 0xc218, 0xc226, 0xc235, 0xc244, 0xc252, 0xc261, 0xc270, + 0xc27f, 0xc28d, 0xc29c, 0xc2ac, 0xc2bb, 0xc2ca, 0xc2d9, 0xc2e7, + 0xc2f6, 0xc306, 0xc315, 0xc325, 0xc334, 0xc343, 0xc351, 0xc360, + 0xc370, 0xc380, 0xc38f, 0xc39f, 0xc3ae, 0xc3bd, 0xc3cb, 0xc3da, + // Entry 3000 - 303F + 0xc3e9, 0xc3f7, 0xc406, 0xc415, 0xc424, 0xc432, 0xc441, 0xc451, + 0xc460, 0xc470, 0xc480, 0xc48f, 0xc49f, 0xc4b0, 0xc4c0, 0xc4d1, + 0xc4e1, 0xc4f1, 0xc500, 0xc510, 0xc521, 0xc531, 0xc542, 0xc552, + 0xc562, 0xc571, 0xc581, 0xc591, 0xc5a0, 0xc5b0, 0xc5c0, 0xc5d0, + 0xc5df, 0xc5ef, 0xc600, 0xc610, 0xc620, 0xc630, 0xc63f, 0xc64f, + 0xc660, 0xc670, 0xc680, 0xc690, 0xc69f, 0xc6af, 0xc6bf, 0xc6cf, + 0xc6de, 0xc6ee, 0xc6fe, 0xc70d, 0xc71d, 0xc72d, 0xc73d, 0xc74c, + 0xc75c, 0xc76d, 0xc77d, 0xc78d, 0xc79d, 0xc7ac, 0xc7bc, 0xc7cd, + // Entry 3040 - 307F + 0xc7de, 0xc7ee, 0xc7ff, 0xc80f, 0xc81f, 0xc82e, 0xc83e, 0xc84f, + 0xc85f, 0xc86f, 0xc87f, 0xc88f, 0xc89f, 0xc8ae, 0xc8be, 0xc8ce, + 0xc8dd, 0xc8ec, 0xc8fa, 0xc909, 0xc919, 0xc928, 0xc938, 0xc947, + 0xc955, 0xc964, 0xc974, 0xc983, 0xc993, 0xc9a2, 0xc9b1, 0xc9bf, + 0xc9ce, 0xc9dd, 0xc9eb, 0xc9fa, 0xca09, 0xca18, 0xca26, 0xca35, + 0xca45, 0xca54, 0xca64, 0xca74, 0xca83, 0xca93, 0xcaa4, 0xcab4, + 0xcac5, 0xcad5, 0xcae5, 0xcaf4, 0xcb04, 0xcb15, 0xcb25, 0xcb36, + 0xcb46, 0xcb55, 0xcb65, 0xcb75, 0xcb84, 0xcb94, 0xcba4, 0xcbb4, + // Entry 3080 - 30BF + 0xcbc3, 0xcbd3, 0xcbe4, 0xcbf4, 0xcc04, 0xcc14, 0xcc23, 0xcc33, + 0xcc44, 0xcc54, 0xcc63, 0xcc72, 0xcc80, 0xcc8f, 0xcc9f, 0xccaf, + 0xccbe, 0xccce, 0xccdd, 0xccec, 0xccfa, 0xcd09, 0xcd19, 0xcd29, + 0xcd38, 0xcd48, 0xcd57, 0xcd66, 0xcd74, 0xcd83, 0xcd92, 0xcda0, + 0xcdaf, 0xcdbe, 0xcdcd, 0xcddb, 0xcdea, 0xcdfa, 0xce09, 0xce18, + 0xce27, 0xce35, 0xce44, 0xce54, 0xce63, 0xce72, 0xce81, 0xce8f, + 0xce9e, 0xceae, 0xcebe, 0xcecd, 0xcedd, 0xceec, 0xcefb, 0xcf09, + 0xcf18, 0xcf28, 0xcf38, 0xcf47, 0xcf57, 0xcf66, 0xcf75, 0xcf83, + // Entry 30C0 - 30FF + 0xcf92, 0xcfa1, 0xcfb0, 0xcfbe, 0xcfcd, 0xcfdc, 0xcfeb, 0xcff9, + 0xd008, 0xd018, 0xd027, 0xd036, 0xd045, 0xd053, 0xd062, 0xd072, + 0xd081, 0xd091, 0xd0a0, 0xd0af, 0xd0bd, 0xd0cc, 0xd0dc, 0xd0eb, + 0xd0fb, 0xd10a, 0xd119, 0xd127, 0xd136, 0xd145, 0xd154, 0xd162, + 0xd171, 0xd180, 0xd18f, 0xd19d, 0xd1ac, 0xd1bc, 0xd1cb, 0xd1db, + 0xd1eb, 0xd1fa, 0xd20b, 0xd21b, 0xd22c, 0xd23c, 0xd24c, 0xd25b, + 0xd26b, 0xd27c, 0xd28d, 0xd29d, 0xd2ae, 0xd2be, 0xd2ce, 0xd2dd, + 0xd2ed, 0xd2fd, 0xd30d, 0xd31c, 0xd32c, 0xd33c, 0xd34c, 0xd35b, + // Entry 3100 - 313F + 0xd36b, 0xd37c, 0xd38c, 0xd39d, 0xd3ad, 0xd3bd, 0xd3cd, 0xd3dc, + 0xd3ec, 0xd3fd, 0xd40d, 0xd41e, 0xd42e, 0xd43e, 0xd44d, 0xd45d, + 0xd46d, 0xd47c, 0xd48c, 0xd49c, 0xd4ac, 0xd4bb, 0xd4cb, 0xd4dc, + 0xd4ec, 0xd4fc, 0xd50c, 0xd51b, 0xd52b, 0xd53c, 0xd54d, 0xd55d, + 0xd56e, 0xd57e, 0xd58e, 0xd59d, 0xd5ad, 0xd5be, 0xd5cf, 0xd5df, + 0xd5f0, 0xd600, 0xd610, 0xd61f, 0xd62f, 0xd63f, 0xd64e, 0xd65e, + 0xd66f, 0xd67f, 0xd690, 0xd6a0, 0xd6b0, 0xd6bf, 0xd6cf, 0xd6e0, + 0xd6f1, 0xd701, 0xd711, 0xd721, 0xd730, 0xd740, 0xd750, 0xd75f, + // Entry 3140 - 317F + 0xd76f, 0xd77e, 0xd78e, 0xd79d, 0xd7ac, 0xd7bb, 0xd7c9, 0xd7d8, + 0xd7e8, 0xd7f8, 0xd807, 0xd817, 0xd826, 0xd835, 0xd843, 0xd852, + 0xd861, 0xd86f, 0xd87e, 0xd88d, 0xd89c, 0xd8aa, 0xd8b9, 0xd8c9, + 0xd8d8, 0xd8e8, 0xd8f7, 0xd905, 0xd914, 0xd923, 0xd931, 0xd940, + 0xd94f, 0xd95e, 0xd96c, 0xd97b, 0xd98b, 0xd99a, 0xd9aa, 0xd9b9, + 0xd9c8, 0xd9d6, 0xd9e5, 0xd9f5, 0xda04, 0xda14, 0xda23, 0xda32, + 0xda40, 0xda4f, 0xda5e, 0xda6c, 0xda7b, 0xda8a, 0xda99, 0xdaa7, + 0xdab6, 0xdac6, 0xdad5, 0xdae4, 0xdaf3, 0xdb01, 0xdb10, 0xdb20, + // Entry 3180 - 31BF + 0xdb2f, 0xdb3e, 0xdb4d, 0xdb5b, 0xdb6a, 0xdb7a, 0xdb8a, 0xdb99, + 0xdba9, 0xdbb8, 0xdbc7, 0xdbd5, 0xdbe4, 0xdbf4, 0xdc03, 0xdc13, + 0xdc22, 0xdc31, 0xdc3f, 0xdc4e, 0xdc5d, 0xdc6b, 0xdc7a, 0xdc89, + 0xdc98, 0xdca6, 0xdcb5, 0xdcc5, 0xdcd4, 0xdce3, 0xdcf2, 0xdd00, + 0xdd0f, 0xdd1f, 0xdd2e, 0xdd3e, 0xdd4e, 0xdd5d, 0xdd6d, 0xdd7e, + 0xdd8f, 0xdd9f, 0xddb0, 0xddc0, 0xddd0, 0xdddf, 0xddef, 0xddff, + 0xde0e, 0xde1e, 0xde2e, 0xde3d, 0xde4d, 0xde5d, 0xde6c, 0xde7c, + 0xde8d, 0xde9d, 0xdead, 0xdebd, 0xdecc, 0xdedc, 0xdeed, 0xdefd, + // Entry 31C0 - 31FF + 0xdf0d, 0xdf1d, 0xdf2c, 0xdf3c, 0xdf4d, 0xdf5d, 0xdf6e, 0xdf7e, + 0xdf8e, 0xdf9d, 0xdfad, 0xdfbe, 0xdfce, 0xdfde, 0xdfee, 0xdffe, + 0xe00d, 0xe01d, 0xe02c, 0xe03c, 0xe04d, 0xe05d, 0xe06d, 0xe07d, + 0xe08c, 0xe09c, 0xe0ad, 0xe0bd, 0xe0cc, 0xe0db, 0xe0e9, 0xe0f8, + 0xe108, 0xe117, 0xe127, 0xe136, 0xe145, 0xe153, 0xe162, 0xe172, + 0xe181, 0xe191, 0xe1a0, 0xe1af, 0xe1bd, 0xe1cc, 0xe1db, 0xe1e9, + 0xe1f8, 0xe207, 0xe216, 0xe224, 0xe233, 0xe243, 0xe252, 0xe261, + 0xe270, 0xe27e, 0xe28d, 0xe29d, 0xe2ac, 0xe2bc, 0xe2cc, 0xe2db, + // Entry 3200 - 323F + 0xe2eb, 0xe2fc, 0xe30c, 0xe31d, 0xe32d, 0xe33d, 0xe34c, 0xe35c, + 0xe36c, 0xe37c, 0xe38b, 0xe39b, 0xe3ab, 0xe3ba, 0xe3ca, 0xe3da, + 0xe3ea, 0xe3f9, 0xe409, 0xe419, 0xe429, 0xe438, 0xe448, 0xe459, + 0xe469, 0xe479, 0xe489, 0xe498, 0xe4a8, 0xe4b9, 0xe4c9, 0xe4da, + 0xe4ea, 0xe4fa, 0xe509, 0xe519, 0xe529, 0xe539, 0xe548, 0xe558, + 0xe568, 0xe578, 0xe587, 0xe597, 0xe5a8, 0xe5b8, 0xe5c8, 0xe5d8, + 0xe5e7, 0xe5f7, 0xe608, 0xe618, 0xe628, 0xe638, 0xe647, 0xe657, + 0xe668, 0xe679, 0xe689, 0xe69a, 0xe6aa, 0xe6ba, 0xe6c9, 0xe6d9, + // Entry 3240 - 327F + 0xe6e9, 0xe6f9, 0xe708, 0xe718, 0xe728, 0xe737, 0xe747, 0xe758, + 0xe768, 0xe778, 0xe788, 0xe797, 0xe7a7, 0xe7b8, 0xe7c8, 0xe7d8, + 0xe7e7, 0xe7f8, 0xe808, 0xe818, 0xe828, 0xe837, 0xe847, 0xe857, + 0xe867, 0xe876, 0xe886, 0xe896, 0xe8a6, 0xe8b5, 0xe8c5, 0xe8d6, + 0xe8e6, 0xe8f6, 0xe906, 0xe915, 0xe925, 0xe936, 0xe946, 0xe956, + 0xe966, 0xe975, 0xe985, 0xe995, 0xe9a4, 0xe9b4, 0xe9c4, 0xe9d4, + 0xe9e3, 0xe9f3, 0xea03, 0xea13, 0xea22, 0xea32, 0xea43, 0xea53, + 0xea63, 0xea73, 0xea82, 0xea92, 0xeaa3, 0xeab3, 0xeac3, 0xead3, + // Entry 3280 - 32BF + 0xeae2, 0xeaf2, 0xeb03, 0xeb13, 0xeb24, 0xeb34, 0xeb44, 0xeb53, + 0xeb63, 0xeb73, 0xeb83, 0xeb92, 0xeba2, 0xebb2, 0xebc2, 0xebd1, + 0xebe1, 0xebf2, 0xec02, 0xec12, 0xec22, 0xec31, 0xec41, 0xec52, + 0xec62, 0xec71, 0xec80, 0xec8e, 0xec9d, 0xecad, 0xecbc, 0xeccc, + 0xecdb, 0xecea, 0xecf8, 0xed07, 0xed16, 0xed24, 0xed33, 0xed42, + 0xed51, 0xed5f, 0xed6e, 0xed7e, 0xed8d, 0xed9c, 0xedab, 0xedb9, + 0xedc8, 0xedd8, 0xede7, 0xedf6, 0xee05, 0xee13, 0xee22, 0xee32, + 0xee42, 0xee51, 0xee61, 0xee71, 0xee81, 0xee90, 0xeea0, 0xeeaf, + // Entry 32C0 - 32FF + 0xeebe, 0xeecc, 0xeedb, 0xeeea, 0xeef9, 0xef07, 0xef16, 0xef26, + 0xef35, 0xef44, 0xef53, 0xef61, 0xef70, 0xef80, 0xef8f, 0xef9e, + 0xefad, 0xefbb, 0xefca, 0xefda, 0xefea, 0xeff9, 0xf009, 0xf019, + 0xf029, 0xf038, 0xf048, 0xf057, 0xf066, 0xf074, 0xf083, 0xf092, + 0xf0a1, 0xf0af, 0xf0be, 0xf0ce, 0xf0dd, 0xf0ec, 0xf0fb, 0xf109, + 0xf118, 0xf128, 0xf137, 0xf147, 0xf157, 0xf166, 0xf176, 0xf187, + 0xf198, 0xf1a8, 0xf1b9, 0xf1ca, 0xf1da, 0xf1eb, 0xf1fb, 0xf20b, + 0xf21a, 0xf22a, 0xf23a, 0xf24a, 0xf259, 0xf269, 0xf27a, 0xf28a, + // Entry 3300 - 333F + 0xf29a, 0xf2aa, 0xf2b9, 0xf2c9, 0xf2d9, 0xf2e9, 0xf2f8, 0xf308, + 0xf319, 0xf32a, 0xf33a, 0xf34b, 0xf35c, 0xf36c, 0xf37c, 0xf38c, + 0xf39b, 0xf3ab, 0xf3bb, 0xf3ca, 0xf3da, 0xf3eb, 0xf3fb, 0xf40b, + 0xf41b, 0xf42a, 0xf43a, 0xf44b, 0xf45b, 0xf46b, 0xf47b, 0xf48a, + 0xf49a, 0xf4ab, 0xf4bc, 0xf4cc, 0xf4dd, 0xf4ee, 0xf4fe, 0xf50f, + 0xf51f, 0xf52f, 0xf53e, 0xf54e, 0xf55e, 0xf56e, 0xf57d, 0xf58d, + 0xf59c, 0xf5ab, 0xf5b9, 0xf5c8, 0xf5d8, 0xf5e8, 0xf5f7, 0xf607, + 0xf617, 0xf626, 0xf635, 0xf644, 0xf652, 0xf661, 0xf670, 0xf67f, + // Entry 3340 - 337F + 0xf68d, 0xf69c, 0xf6ac, 0xf6bb, 0xf6ca, 0xf6d9, 0xf6e7, 0xf6f6, + 0xf706, 0xf716, 0xf725, 0xf735, 0xf745, 0xf755, 0xf764, 0xf774, + 0xf783, 0xf792, 0xf7a0, 0xf7af, 0xf7be, 0xf7cd, 0xf7db, 0xf7ea, + 0xf7fa, 0xf809, 0xf818, 0xf827, 0xf835, 0xf844, 0xf854, 0xf863, + 0xf871, 0xf87e, 0xf88c, 0xf89b, 0xf8a9, 0xf8b7, 0xf8c6, 0xf8d4, + 0xf8e1, 0xf8f0, 0xf8fe, 0xf90d, 0xf91b, 0xf928, 0xf936, 0xf945, + 0xf953, 0xf960, 0xf96e, 0xf97c, 0xf98b, 0xf999, 0xf9a8, 0xf9b7, + 0xf9c4, 0xf9d1, 0xf9e0, 0xf9ee, 0xf9fc, 0xfa0a, 0xfa18, 0xfa26, + // Entry 3380 - 33BF + 0xfa34, 0xfa42, 0xfa4f, 0xfa5c, 0xfa6b, 0xfa79, 0xfa87, 0xfa96, + 0xfaa3, 0xfab0, 0xfabf, 0xfacd, 0xfada, 0xfae9, 0xfaf7, 0xfb06, + 0xfb15, 0xfb23, 0xfb32, 0xfb40, 0xfb50, 0xfb5f, 0xfb6c, 0xfb7a, + 0xfb88, 0xfb97, 0xfba5, 0xfbb3, 0xfbc2, 0xfbd0, 0xfbde, 0xfbed, + 0xfbfb, 0xfc09, 0xfc18, 0xfc27, 0xfc36, 0xfc46, 0xfc54, 0xfc62, + 0xfc70, 0xfc7e, 0xfc8d, 0xfc9b, 0xfcaa, 0xfcb8, 0xfcc6, 0xfcd5, + 0xfce3, 0xfcf1, 0xfd00, 0xfd0e, 0xfd1d, 0xfd2a, 0xfd38, 0xfd45, + 0xfd53, 0xfd60, 0xfd6d, 0xfd7a, 0xfd88, 0xfd96, 0xfda4, 0xfdbb, + // Entry 33C0 - 33FF + 0xfdd1, 0xfde9, 0xfe00, 0xfe17, 0xfe2f, 0xfe45, 0xfe5f, 0xfe6e, + 0xfe7e, 0xfe8e, 0xfe9e, 0xfeaf, 0xfebf, 0xfed0, 0xfee0, 0xfef1, + 0xff02, 0xff14, 0xff25, 0xff35, 0xff45, 0xff55, 0xff66, 0xff77, + 0xff89, 0xff99, 0xffa9, 0xffb9, 0xffca, 0xffda, 0xffeb, 0xfffb, + 0x000c, 0x001c, 0x002c, 0x003d, 0x004d, 0x005d, 0x006f, 0x007f, + 0x008f, 0x009f, 0x00b0, 0x00be, 0x00cd, 0x00dc, 0x00ec, 0x00fb, + 0x010b, 0x011a, 0x012a, 0x0139, 0x0149, 0x0159, 0x016a, 0x017a, + 0x0189, 0x0198, 0x01a7, 0x01b7, 0x01c7, 0x01d8, 0x01e7, 0x01f6, + // Entry 3400 - 343F + 0x0205, 0x0215, 0x0224, 0x0234, 0x0243, 0x0253, 0x0262, 0x0271, + 0x0281, 0x0290, 0x029f, 0x02b0, 0x02bf, 0x02ce, 0x02dd, 0x02ed, + 0x02fb, 0x030a, 0x031b, 0x032a, 0x033a, 0x0349, 0x0359, 0x0368, + 0x0378, 0x0387, 0x0397, 0x03a7, 0x03b8, 0x03c9, 0x03d9, 0x03e8, + 0x03f7, 0x0406, 0x0416, 0x0426, 0x0437, 0x0446, 0x0455, 0x0464, + 0x0474, 0x0483, 0x0493, 0x04a2, 0x04b2, 0x04c1, 0x04d0, 0x04e0, + 0x04ef, 0x04fe, 0x050e, 0x051f, 0x052e, 0x053d, 0x054c, 0x055c, + 0x056b, 0x057b, 0x058b, 0x059b, 0x05ac, 0x05bc, 0x05cd, 0x05dd, + // Entry 3440 - 347F + 0x05ee, 0x05ff, 0x0611, 0x0622, 0x0632, 0x0642, 0x0652, 0x0663, + 0x0674, 0x0686, 0x0696, 0x06a6, 0x06b6, 0x06c7, 0x06d7, 0x06e8, + 0x06f8, 0x0709, 0x0719, 0x0729, 0x073a, 0x074a, 0x075a, 0x076c, + 0x077c, 0x078c, 0x079c, 0x07ad, 0x07bb, 0x07ca, 0x07d9, 0x07e9, + 0x07f8, 0x0808, 0x0817, 0x0827, 0x0836, 0x0846, 0x0856, 0x0867, + 0x0877, 0x0886, 0x0895, 0x08a4, 0x08b4, 0x08c4, 0x08d5, 0x08e4, + 0x08f3, 0x0902, 0x0912, 0x0921, 0x0931, 0x0940, 0x0950, 0x095f, + 0x096e, 0x097e, 0x098d, 0x099c, 0x09ad, 0x09bc, 0x09cb, 0x09da, + // Entry 3480 - 34BF + 0x09ea, 0x09f8, 0x0a07, 0x0a18, 0x0a27, 0x0a37, 0x0a46, 0x0a56, + 0x0a65, 0x0a75, 0x0a84, 0x0a94, 0x0aa4, 0x0ab5, 0x0ac5, 0x0ad6, + 0x0ae5, 0x0af4, 0x0b03, 0x0b13, 0x0b23, 0x0b34, 0x0b43, 0x0b52, + 0x0b61, 0x0b71, 0x0b80, 0x0b90, 0x0b9f, 0x0baf, 0x0bbe, 0x0bcd, + 0x0bdd, 0x0bec, 0x0bfb, 0x0c0c, 0x0c1b, 0x0c2a, 0x0c39, 0x0c49, + 0x0c57, 0x0c66, 0x0c77, 0x0c86, 0x0c96, 0x0ca5, 0x0cb5, 0x0cc4, + 0x0cd4, 0x0ce3, 0x0cf3, 0x0d03, 0x0d14, 0x0d25, 0x0d35, 0x0d46, + 0x0d55, 0x0d64, 0x0d73, 0x0d83, 0x0d93, 0x0da4, 0x0db3, 0x0dc2, + // Entry 34C0 - 34FF + 0x0dd1, 0x0de1, 0x0df0, 0x0e00, 0x0e0f, 0x0e1f, 0x0e2e, 0x0e3d, + 0x0e4d, 0x0e5c, 0x0e6b, 0x0e7c, 0x0e8e, 0x0e9d, 0x0ead, 0x0ebc, + 0x0ecb, 0x0edb, 0x0eea, 0x0f01, 0x0f0a, 0x0f17, 0x0f28, 0x0f3d, + 0x0f52, 0x0f68, 0x0f78, 0x0f88, 0x0f97, 0x0fa5, 0x0fb4, 0x0fc2, + 0x0fd0, 0x0fdf, 0x0fef, 0x0ffe, 0x100d, 0x101c, 0x102b, 0x1039, + 0x1046, 0x1053, 0x1062, 0x1070, 0x107e, 0x108b, 0x109a, 0x10a9, + 0x10b7, 0x10cc, 0x10e1, 0x10ff, 0x111b, 0x1138, 0x1153, 0x1177, + 0x1199, 0x11b5, 0x11cf, 0x11ec, 0x1207, 0x122b, 0x124d, 0x1270, + // Entry 3500 - 353F + 0x1291, 0x12b4, 0x12d5, 0x12ff, 0x1327, 0x134b, 0x136d, 0x1390, + 0x13b1, 0x13d3, 0x13f3, 0x141c, 0x1443, 0x1466, 0x1487, 0x14b9, + 0x14e9, 0x1503, 0x151b, 0x153f, 0x1561, 0x1580, 0x159d, 0x15bc, + 0x15d9, 0x15f8, 0x1615, 0x1638, 0x1659, 0x167c, 0x169d, 0x16c7, + 0x16ef, 0x170c, 0x1724, 0x1748, 0x1770, 0x1799, 0x17aa, 0x17d0, + 0x17eb, 0x1807, 0x1822, 0x1845, 0x1863, 0x1886, 0x18a5, 0x18be, + 0x18d8, 0x18e7, 0x18f7, 0x1912, 0x192b, 0x1947, 0x1961, 0x197d, + 0x1997, 0x19b3, 0x19cd, 0x19e9, 0x1a03, 0x1a2e, 0x1a57, 0x1a72, + // Entry 3540 - 357F + 0x1a8b, 0x1aa7, 0x1ac1, 0x1add, 0x1af7, 0x1b13, 0x1b2d, 0x1b48, + 0x1b61, 0x1b7d, 0x1b97, 0x1bb7, 0x1bd5, 0x1bf6, 0x1c15, 0x1c37, + 0x1c59, 0x1c75, 0x1c99, 0x1ca7, 0x1cb6, 0x1cc4, 0x1cd3, 0x1ce2, + 0x1cf2, 0x1d02, 0x1d10, 0x1d20, 0x1d2e, 0x1d3d, 0x1d4c, 0x1d5c, + 0x1d6d, 0x1d7f, 0x1d91, 0x1da1, 0x1db2, 0x1dc4, 0x1dd2, 0x1de2, + 0x1df1, 0x1e02, 0x1e11, 0x1e23, 0x1e34, 0x1e45, 0x1e55, 0x1e66, + 0x1e75, 0x1e87, 0x1e97, 0x1ea7, 0x1eb7, 0x1ec6, 0x1ed7, 0x1ee8, + 0x1ef9, 0x1f0a, 0x1f1b, 0x1f2b, 0x1f3b, 0x1f4b, 0x1f5b, 0x1f6a, + // Entry 3580 - 35BF + 0x1f79, 0x1f88, 0x1f97, 0x1fa8, 0x1fb8, 0x1fc8, 0x1fdc, 0x1fed, + 0x1ffd, 0x200d, 0x201e, 0x202d, 0x203d, 0x204c, 0x205b, 0x206a, + 0x2079, 0x2089, 0x2098, 0x20a9, 0x20b9, 0x20c9, 0x20d8, 0x20e7, + 0x20f6, 0x2105, 0x2116, 0x2126, 0x2136, 0x2146, 0x2157, 0x2169, + 0x217c, 0x218e, 0x21a1, 0x21bd, 0x21db, 0x21e8, 0x21f7, 0x2202, + 0x220d, 0x221c, 0x222f, 0x2254, 0x227a, 0x22a0, 0x22c7, 0x22ea, + 0x230e, 0x2331, 0x2355, 0x237f, 0x23a3, 0x23c6, 0x23e9, 0x2412, + 0x2446, 0x2474, 0x24a1, 0x24ce, 0x2501, 0x252e, 0x2555, 0x257b, + // Entry 35C0 - 35FF + 0x25a1, 0x25cd, 0x25ed, 0x2606, 0x2628, 0x2650, 0x266f, 0x2690, + 0x26b7, 0x26e7, 0x2714, 0x2738, 0x275b, 0x2782, 0x27a7, 0x27cd, + 0x27f1, 0x280a, 0x2821, 0x2838, 0x284d, 0x286a, 0x2885, 0x28a3, + 0x28bf, 0x28e8, 0x290f, 0x292b, 0x2947, 0x295e, 0x2973, 0x298a, + 0x299f, 0x29b6, 0x29cb, 0x29e2, 0x29f7, 0x2a22, 0x2a4b, 0x2a62, + 0x2a77, 0x2a9f, 0x2ac5, 0x2ae7, 0x2b07, 0x2b32, 0x2b5b, 0x2b91, + 0x2bc5, 0x2be2, 0x2bfd, 0x2c24, 0x2c49, 0x2c78, 0x2ca5, 0x2cc5, + 0x2ce3, 0x2cfa, 0x2d0f, 0x2d43, 0x2d75, 0x2d99, 0x2dbb, 0x2de4, + // Entry 3600 - 363F + 0x2e0b, 0x2e3f, 0x2e71, 0x2e9c, 0x2ec5, 0x2ee3, 0x2eff, 0x2f1f, + 0x2f3d, 0x2f68, 0x2f91, 0x2fa8, 0x2fbd, 0x2fde, 0x2ffd, 0x3023, + 0x3047, 0x307f, 0x30b5, 0x30ce, 0x30e5, 0x30fc, 0x3111, 0x3128, + 0x313d, 0x3155, 0x316b, 0x317d, 0x3193, 0x31a9, 0x31bf, 0x31d5, + 0x31eb, 0x3209, 0x321f, 0x3234, 0x3252, 0x326e, 0x328c, 0x32a8, + 0x32c6, 0x32eb, 0x330e, 0x332b, 0x3346, 0x3364, 0x3380, 0x339e, + 0x33ba, 0x33d8, 0x33f4, 0x3419, 0x342e, 0x344f, 0x346c, 0x3487, + 0x34a4, 0x34d5, 0x34f1, 0x3516, 0x3539, 0x3558, 0x3575, 0x359b, + // Entry 3640 - 367F + 0x35c1, 0x35e5, 0x3607, 0x3629, 0x3649, 0x3668, 0x3685, 0x36a4, + 0x36c1, 0x36e0, 0x36fd, 0x3727, 0x374f, 0x3779, 0x37a1, 0x37cb, + 0x37f3, 0x381d, 0x3845, 0x386f, 0x3897, 0x38b7, 0x38db, 0x38f8, + 0x3918, 0x393c, 0x3959, 0x3976, 0x399e, 0x39b6, 0x39cf, 0x39e6, + 0x3a00, 0x3a18, 0x3a3a, 0x3a5f, 0x3a80, 0x3aa3, 0x3ac5, 0x3ae7, + 0x3b09, 0x3b28, 0x3b49, 0x3b5e, 0x3b73, 0x3b8d, 0x3ba2, 0x3bb7, + 0x3bcc, 0x3be5, 0x3bfb, 0x3c12, 0x3c28, 0x3c3f, 0x3c59, 0x3c6f, + 0x3c86, 0x3c9c, 0x3cb3, 0x3cca, 0x3ce2, 0x3cf9, 0x3d11, 0x3d27, + // Entry 3680 - 36BF + 0x3d3e, 0x3d54, 0x3d6b, 0x3d81, 0x3d97, 0x3dae, 0x3dc4, 0x3ddb, + 0x3df1, 0x3e07, 0x3e1d, 0x3e34, 0x3e4a, 0x3e60, 0x3e79, 0x3e92, + 0x3eab, 0x3ec4, 0x3ede, 0x3ef8, 0x3f12, 0x3f2c, 0x3f46, 0x3f66, + 0x3f83, 0x3fa6, 0x3fc8, 0x3fe7, 0x400c, 0x4024, 0x4040, 0x4056, + 0x406f, 0x4081, 0x4094, 0x40a6, 0x40b9, 0x40cb, 0x40de, 0x40f0, + 0x4103, 0x4115, 0x4128, 0x413a, 0x414c, 0x415e, 0x4171, 0x4183, + 0x4195, 0x41a8, 0x41bc, 0x41cf, 0x41e1, 0x41f4, 0x4206, 0x421d, + 0x422f, 0x4241, 0x4253, 0x4266, 0x4278, 0x428a, 0x429b, 0x42ac, + // Entry 36C0 - 36FF + 0x42bd, 0x42ce, 0x42df, 0x42f1, 0x4303, 0x4315, 0x4328, 0x433a, + 0x4356, 0x4372, 0x4385, 0x4399, 0x43ac, 0x43bf, 0x43db, 0x43f8, + 0x4411, 0x442d, 0x4449, 0x4466, 0x4481, 0x449a, 0x44b3, 0x44c5, + 0x44de, 0x44f6, 0x450d, 0x4520, 0x4534, 0x4547, 0x455b, 0x456e, + 0x4582, 0x459d, 0x45b9, 0x45d4, 0x45f0, 0x4603, 0x4617, 0x462b, + 0x463e, 0x4652, 0x4666, 0x467a, 0x468f, 0x46a3, 0x46b8, 0x46cd, + 0x46e1, 0x46f6, 0x470a, 0x471f, 0x4734, 0x4749, 0x475f, 0x4774, + 0x478a, 0x479f, 0x47b3, 0x47c8, 0x47dc, 0x47f1, 0x4805, 0x4819, + // Entry 3700 - 373F + 0x482e, 0x4842, 0x4857, 0x486b, 0x487f, 0x4893, 0x48a7, 0x48bb, + 0x48d0, 0x48e5, 0x48f9, 0x490d, 0x4922, 0x4941, 0x4959, 0x4970, + 0x4988, 0x499f, 0x49b7, 0x49d6, 0x49f6, 0x4a15, 0x4a35, 0x4a4c, + 0x4a64, 0x4a7c, 0x4a93, 0x4aab, 0x4ac3, 0x4ad9, 0x4af4, 0x4b04, + 0x4b1b, 0x4b30, 0x4b44, 0x4b58, 0x4b6e, 0x4b83, 0x4b98, 0x4bac, + 0x4bc2, 0x4bd8, 0x4bed, 0x4c0c, 0x4c2a, 0x4c48, 0x4c68, 0x4c87, + 0x4ca6, 0x4cc4, 0x4ce4, 0x4d04, 0x4d23, 0x4d40, 0x4d5d, 0x4d7b, + 0x4d99, 0x4db7, 0x4dd5, 0x4df3, 0x4e15, 0x4e38, 0x4e5a, 0x4e83, + // Entry 3740 - 377F + 0x4ea2, 0x4ec3, 0x4ee7, 0x4eff, 0x4f14, 0x4f24, 0x4f39, 0x4f50, + 0x4f62, 0x4f75, 0x4f87, 0x4f99, 0x4fad, 0x4fc0, 0x4fd3, 0x4fe5, + 0x4ff9, 0x500d, 0x5020, 0x5032, 0x5045, 0x5057, 0x506a, 0x507c, + 0x508f, 0x50a1, 0x50b4, 0x50c6, 0x50d9, 0x50eb, 0x50fd, 0x5110, + 0x5122, 0x5134, 0x5146, 0x5158, 0x516a, 0x517c, 0x518e, 0x51a1, + 0x51b3, 0x51c5, 0x51d7, 0x51e8, 0x51fa, 0x520b, 0x521d, 0x522e, + 0x523e, 0x524e, 0x525f, 0x526f, 0x5283, 0x5296, 0x52b0, 0x52c1, + 0x52d3, 0x52e3, 0x52f3, 0x5304, 0x5314, 0x5324, 0x5334, 0x5344, + // Entry 3780 - 37BF + 0x5354, 0x5364, 0x5374, 0x5384, 0x5395, 0x53a5, 0x53b5, 0x53c5, + 0x53d5, 0x53e5, 0x53f5, 0x5406, 0x5418, 0x5429, 0x543b, 0x544a, + 0x545d, 0x5470, 0x5483, 0x5497, 0x54aa, 0x54be, 0x54d2, 0x54e6, + 0x54fe, 0x5515, 0x552c, 0x5543, 0x5550, 0x5563, 0x557f, 0x559b, + 0x55b6, 0x55d2, 0x55ee, 0x560f, 0x562b, 0x564c, 0x5667, 0x5682, + 0x56a2, 0x56c5, 0x56df, 0x56fa, 0x5717, 0x5733, 0x574f, 0x5769, + 0x578b, 0x57a8, 0x57c3, 0x57e2, 0x57fd, 0x5818, 0x5838, 0x5854, + 0x5871, 0x588b, 0x58ab, 0x58c2, 0x58d5, 0x58e8, 0x58fd, 0x590e, + // Entry 37C0 - 37FF + 0x5924, 0x5935, 0x5947, 0x5958, 0x5970, 0x5989, 0x59aa, 0x59bb, + 0x59cd, 0x59de, 0x59f0, 0x5a08, 0x5a20, 0x5a32, 0x5a4a, 0x5a5d, + 0x5a6f, 0x5a87, 0x5a99, 0x5ab2, 0x5ace, 0x5ae1, 0x5af4, 0x5b11, + 0x5b24, 0x5b41, 0x5b59, 0x5b6b, 0x5b83, 0x5b95, 0x5bb1, 0x5bc3, + 0x5bd5, 0x5bed, 0x5bff, 0x5c17, 0x5c29, 0x5c3b, 0x5c4d, 0x5c65, + 0x5c77, 0x5c89, 0x5ca1, 0x5cbd, 0x5ccf, 0x5ce1, 0x5cf9, 0x5d13, + 0x5d2d, 0x5d45, 0x5d63, 0x5d7b, 0x5d9a, 0x5db4, 0x5dd2, 0x5deb, + 0x5e08, 0x5e27, 0x5e44, 0x5e54, 0x5e6b, 0x5e83, 0x5e96, 0x5ea9, + // Entry 3800 - 383F + 0x5ebc, 0x5ecf, 0x5ee4, 0x5ef8, 0x5f0c, 0x5f1e, 0x5f35, 0x5f4a, + 0x5f66, 0x5f7a, 0x5f8d, 0x5f9f, 0x5fb1, 0x5fc5, 0x5fd8, 0x5feb, + 0x5ffd, 0x6011, 0x6025, 0x6038, 0x6053, 0x606a, 0x6081, 0x6098, + 0x60af, 0x60c6, 0x60dd, 0x60f2, 0x611c, 0x6138, 0x6153, 0x616e, + 0x618a, 0x61a5, 0x61c1, 0x61dd, 0x61fa, 0x6216, 0x6232, 0x624d, + 0x6268, 0x6285, 0x62a1, 0x62bd, 0x62d8, 0x62f5, 0x6312, 0x632e, + 0x634a, 0x6365, 0x6381, 0x639c, 0x63b8, 0x63c5, 0x63d2, 0x63df, + 0x63ec, 0x63fa, 0x6407, 0x6415, 0x6424, 0x6432, 0x6441, 0x6451, + // Entry 3840 - 387F + 0x6460, 0x646f, 0x647f, 0x648d, 0x649c, 0x64ac, 0x64bb, 0x64cb, + 0x64d9, 0x64e8, 0x64f6, 0x6505, 0x6514, 0x6522, 0x6531, 0x653f, + 0x654e, 0x655d, 0x656b, 0x657a, 0x6589, 0x6597, 0x65a6, 0x65b4, + 0x65c2, 0x65d0, 0x65de, 0x65ed, 0x65fb, 0x6609, 0x661b, 0x662c, + 0x663e, 0x6650, 0x6661, 0x6673, 0x6684, 0x6696, 0x66a8, 0x66ba, + 0x66d0, 0x66e6, 0x66fc, 0x6712, 0x6725, 0x6738, 0x674c, 0x6768, + 0x677c, 0x678f, 0x67a2, 0x67b5, 0x67c8, 0x67db, 0x67ee, 0x6802, + 0x681d, 0x6838, 0x6847, 0x6855, 0x6863, 0x6873, 0x6882, 0x6891, + // Entry 3880 - 38BF + 0x689f, 0x68af, 0x68bf, 0x68ce, 0x68e5, 0x68fb, 0x6918, 0x6935, + 0x694d, 0x6965, 0x697e, 0x6996, 0x69af, 0x69c8, 0x69e1, 0x69fb, + 0x6a14, 0x6a2e, 0x6a47, 0x6a5f, 0x6a77, 0x6a8f, 0x6aa8, 0x6ac0, + 0x6aec, 0x6b04, 0x6b1c, 0x6b34, 0x6b4f, 0x6b69, 0x6b83, 0x6ba3, + 0x6bbb, 0x6bd3, 0x6bea, 0x6c05, 0x6c22, 0x6c3f, 0x6c5e, 0x6c7d, + 0x6c93, 0x6caa, 0x6cc1, 0x6cd9, 0x6cf1, 0x6d0a, 0x6d20, 0x6d37, + 0x6d4e, 0x6d66, 0x6d7c, 0x6d93, 0x6daa, 0x6dc2, 0x6dd8, 0x6def, + 0x6e06, 0x6e1e, 0x6e34, 0x6e4b, 0x6e61, 0x6e78, 0x6e8f, 0x6ea7, + // Entry 38C0 - 38FF + 0x6ebd, 0x6ed4, 0x6eea, 0x6f01, 0x6f17, 0x6f2e, 0x6f45, 0x6f5d, + 0x6f73, 0x6f8a, 0x6fa0, 0x6fb7, 0x6fcd, 0x6fe4, 0x6ffa, 0x7011, + 0x7027, 0x703e, 0x7054, 0x706b, 0x7081, 0x7098, 0x70ad, 0x70c3, + 0x70d4, 0x70e5, 0x70f5, 0x7106, 0x7116, 0x7126, 0x7136, 0x7147, + 0x7158, 0x716a, 0x717b, 0x718d, 0x719e, 0x71af, 0x71c0, 0x71d4, + 0x71eb, 0x7200, 0x7216, 0x7229, 0x723e, 0x7251, 0x7267, 0x727e, + 0x7293, 0x72a8, 0x72bf, 0x72d6, 0x72ed, 0x7305, 0x731c, 0x7334, + 0x734b, 0x7362, 0x7379, 0x7393, 0x73ad, 0x73c8, 0x73e2, 0x73fd, + // Entry 3900 - 393F + 0x7412, 0x742b, 0x743c, 0x7461, 0x7482, 0x74a1, 0x74b4, 0x74ca, + 0x74e0, 0x74f7, 0x750e, 0x7524, 0x753a, 0x7550, 0x7566, 0x757d, + 0x7594, 0x75aa, 0x75c0, 0x75d5, 0x75ea, 0x7600, 0x7616, 0x762b, + 0x7640, 0x7657, 0x766e, 0x7685, 0x769d, 0x76b5, 0x76cc, 0x76e3, + 0x76f8, 0x770d, 0x7722, 0x7738, 0x774e, 0x7763, 0x7778, 0x7797, + 0x77ba, 0x77da, 0x77f5, 0x7817, 0x7831, 0x785e, 0x7887, 0x78b4, + 0x78d9, 0x78ff, 0x7925, 0x794d, 0x796d, 0x7999, 0x79be, 0x79dc, + 0x7a04, 0x7a37, 0x7a59, 0x7a87, 0x7aa3, 0x7ace, 0x7af1, 0x7b0c, + // Entry 3940 - 397F + 0x7b32, 0x7b5f, 0x7b7a, 0x7b9f, 0x7bbe, 0x7be7, 0x7c14, 0x7c29, + 0x7c45, 0x7c68, 0x7c7e, 0x7ca8, 0x7cd2, 0x7cfa, 0x7d21, 0x7d5b, + 0x7d8d, 0x7db6, 0x7dd8, 0x7df2, 0x7e1e, 0x7e47, 0x7e6d, 0x7e89, + 0x7ea6, 0x7ec0, 0x7ed5, 0x7ef6, 0x7f16, 0x7f2d, 0x7f44, 0x7f5b, + 0x7f72, 0x7f89, 0x7fa0, 0x7fb8, 0x7fd0, 0x7fe8, 0x8000, 0x8018, + 0x8030, 0x8048, 0x8060, 0x8078, 0x8090, 0x80a8, 0x80c0, 0x80d8, + 0x80f0, 0x8108, 0x8120, 0x8138, 0x8150, 0x8168, 0x8180, 0x8198, + 0x81b0, 0x81c8, 0x81e0, 0x81f8, 0x8211, 0x822a, 0x8242, 0x825a, + // Entry 3980 - 39BF + 0x8272, 0x828a, 0x82a2, 0x82bb, 0x82d4, 0x82ed, 0x8306, 0x831f, + 0x8338, 0x8350, 0x8367, 0x837f, 0x8397, 0x83af, 0x83c7, 0x83df, + 0x83f7, 0x840f, 0x8427, 0x843f, 0x8457, 0x846f, 0x8487, 0x849f, + 0x84b7, 0x84d0, 0x84e9, 0x8502, 0x851b, 0x8534, 0x854d, 0x8566, + 0x857f, 0x8598, 0x85b1, 0x85ca, 0x85e3, 0x85fc, 0x8614, 0x862c, + 0x8644, 0x865c, 0x8674, 0x868c, 0x86a4, 0x86bb, 0x86d2, 0x86e9, + 0x8700, 0x8716, 0x872c, 0x8744, 0x875b, 0x8773, 0x878b, 0x87a3, + 0x87ba, 0x87d2, 0x87e9, 0x87ff, 0x8814, 0x882c, 0x8845, 0x885c, + // Entry 39C0 - 39FF + 0x8874, 0x888b, 0x88a1, 0x88b8, 0x88cf, 0x88e7, 0x88ff, 0x8917, + 0x8935, 0x8953, 0x8971, 0x898e, 0x89ab, 0x89c9, 0x89e8, 0x8a04, + 0x8a20, 0x8a3c, 0x8a58, 0x8a75, 0x8a93, 0x8aaf, 0x8ace, 0x8aea, + 0x8aff, 0x8b14, 0x8b2a, 0x8b41, 0x8b57, 0x8b6d, 0x8b85, 0x8b9c, + 0x8bb3, 0x8bc9, 0x8be1, 0x8bf9, 0x8c10, 0x8c26, 0x8c3c, 0x8c51, + 0x8c67, 0x8c7d, 0x8c93, 0x8ca9, 0x8cbf, 0x8cd4, 0x8ce9, 0x8cff, + 0x8d14, 0x8d29, 0x8d40, 0x8d56, 0x8d6c, 0x8d81, 0x8d97, 0x8dac, + 0x8dc1, 0x8dd5, 0x8ded, 0x8e05, 0x8e21, 0x8e3f, 0x8e5b, 0x8e7d, + // Entry 3A00 - 3A3F + 0x8e9a, 0x8eb6, 0x8ed9, 0x8ef6, 0x8f15, 0x8f34, 0x8f56, 0x8f79, + 0x8f9c, 0x8fbe, 0x8fe1, 0x9005, 0x9024, 0x904c, 0x906a, 0x9086, + 0x90a7, 0x90c2, 0x90e3, 0x90ff, 0x911c, 0x9140, 0x915c, 0x9177, + 0x9199, 0x91b5, 0x91d3, 0x91ee, 0x9211, 0x9232, 0x9253, 0x9270, + 0x928b, 0x92a8, 0x92c5, 0x92e0, 0x92fe, 0x9324, 0x9343, 0x9362, + 0x937e, 0x939f, 0x93ba, 0x93d7, 0x93f7, 0x9417, 0x9437, 0x9457, + 0x9477, 0x9497, 0x94b7, 0x94d7, 0x94f7, 0x9517, 0x9537, 0x9557, + 0x9577, 0x9597, 0x95b7, 0x95d7, 0x95f7, 0x9617, 0x9637, 0x9657, + // Entry 3A40 - 3A7F + 0x9677, 0x9697, 0x96b7, 0x96d7, 0x96f7, 0x9717, 0x9737, 0x9757, + 0x9777, 0x9797, 0x97b7, 0x97d7, 0x97f7, 0x9817, 0x9837, 0x9857, + 0x9877, 0x9897, 0x98b7, 0x98d7, 0x98f7, 0x9917, 0x9937, 0x9957, + 0x9977, 0x9997, 0x99b7, 0x99d7, 0x99f7, 0x9a17, 0x9a37, 0x9a57, + 0x9a77, 0x9a97, 0x9ab7, 0x9ad7, 0x9af7, 0x9b17, 0x9b37, 0x9b57, + 0x9b77, 0x9b97, 0x9bb7, 0x9bd7, 0x9bf7, 0x9c17, 0x9c37, 0x9c57, + 0x9c77, 0x9c97, 0x9cb7, 0x9cd7, 0x9cf7, 0x9d17, 0x9d37, 0x9d57, + 0x9d77, 0x9d97, 0x9db7, 0x9dd7, 0x9df7, 0x9e17, 0x9e37, 0x9e57, + // Entry 3A80 - 3ABF + 0x9e77, 0x9e97, 0x9eb7, 0x9ed7, 0x9ef7, 0x9f17, 0x9f37, 0x9f57, + 0x9f77, 0x9f97, 0x9fb7, 0x9fd7, 0x9ff7, 0xa017, 0xa037, 0xa057, + 0xa077, 0xa097, 0xa0b7, 0xa0d7, 0xa0f7, 0xa117, 0xa137, 0xa157, + 0xa177, 0xa197, 0xa1b7, 0xa1d7, 0xa1f7, 0xa217, 0xa237, 0xa257, + 0xa277, 0xa297, 0xa2b7, 0xa2d7, 0xa2f7, 0xa317, 0xa337, 0xa357, + 0xa377, 0xa397, 0xa3b7, 0xa3d7, 0xa3f7, 0xa417, 0xa437, 0xa457, + 0xa477, 0xa497, 0xa4b7, 0xa4d7, 0xa4f7, 0xa517, 0xa537, 0xa557, + 0xa577, 0xa597, 0xa5b7, 0xa5d7, 0xa5f7, 0xa617, 0xa637, 0xa657, + // Entry 3AC0 - 3AFF + 0xa677, 0xa697, 0xa6b7, 0xa6d7, 0xa6f7, 0xa717, 0xa737, 0xa757, + 0xa777, 0xa797, 0xa7b7, 0xa7d7, 0xa7f7, 0xa817, 0xa837, 0xa857, + 0xa877, 0xa897, 0xa8b7, 0xa8d7, 0xa8f7, 0xa917, 0xa937, 0xa957, + 0xa977, 0xa997, 0xa9b7, 0xa9d7, 0xa9f7, 0xaa17, 0xaa37, 0xaa57, + 0xaa77, 0xaa97, 0xaab7, 0xaad7, 0xaaf7, 0xab17, 0xab37, 0xab57, + 0xab77, 0xab97, 0xabb7, 0xabd7, 0xabf7, 0xac17, 0xac37, 0xac57, + 0xac77, 0xac97, 0xacb7, 0xacd7, 0xacf7, 0xad17, 0xad37, 0xad57, + 0xad77, 0xad97, 0xadb7, 0xadd7, 0xadf7, 0xae17, 0xae37, 0xae57, + // Entry 3B00 - 3B3F + 0xae77, 0xae97, 0xaeb7, 0xaed7, 0xaef7, 0xaf17, 0xaf37, 0xaf57, + 0xaf77, 0xaf97, 0xafb7, 0xafd7, 0xaff7, 0xb017, 0xb037, 0xb057, + 0xb077, 0xb097, 0xb0b7, 0xb0d7, 0xb0f7, 0xb117, 0xb137, 0xb157, + 0xb177, 0xb197, 0xb1b7, 0xb1d7, 0xb1f7, 0xb217, 0xb237, 0xb257, + 0xb277, 0xb297, 0xb2b7, 0xb2d7, 0xb2f7, 0xb317, 0xb337, 0xb357, + 0xb377, 0xb397, 0xb3b7, 0xb3d7, 0xb3f7, 0xb417, 0xb437, 0xb457, + 0xb477, 0xb497, 0xb4b7, 0xb4d7, 0xb4f7, 0xb517, 0xb537, 0xb557, + 0xb577, 0xb597, 0xb5b7, 0xb5d7, 0xb5f7, 0xb617, 0xb637, 0xb657, + // Entry 3B40 - 3B7F + 0xb677, 0xb697, 0xb6b7, 0xb6d7, 0xb6f7, 0xb717, 0xb737, 0xb757, + 0xb777, 0xb797, 0xb7b7, 0xb7d7, 0xb7f7, 0xb817, 0xb837, 0xb857, + 0xb877, 0xb897, 0xb8b7, 0xb8d7, 0xb8f7, 0xb917, 0xb937, 0xb957, + 0xb977, 0xb997, 0xb9b7, 0xb9d7, 0xb9f7, 0xba17, 0xba37, 0xba57, + 0xba77, 0xba97, 0xbab7, 0xbad7, 0xbaf7, 0xbb17, 0xbb37, 0xbb57, + 0xbb77, 0xbb97, 0xbbb7, 0xbbd7, 0xbbf7, 0xbc17, 0xbc37, 0xbc57, + 0xbc77, 0xbc97, 0xbcb7, 0xbcd7, 0xbcf7, 0xbd17, 0xbd37, 0xbd57, + 0xbd77, 0xbd97, 0xbdb7, 0xbdd7, 0xbdf7, 0xbe17, 0xbe37, 0xbe57, + // Entry 3B80 - 3BBF + 0xbe77, 0xbe97, 0xbeb7, 0xbed7, 0xbef7, 0xbf17, 0xbf37, 0xbf57, + 0xbf77, 0xbf97, 0xbfb7, 0xbfd7, 0xbff7, 0xc017, 0xc037, 0xc057, + 0xc077, 0xc097, 0xc0b7, 0xc0d7, 0xc0f7, 0xc117, 0xc137, 0xc157, + 0xc177, 0xc197, 0xc1b7, 0xc1d7, 0xc1f7, 0xc217, 0xc237, 0xc257, + 0xc277, 0xc297, 0xc2b7, 0xc2d7, 0xc2f7, 0xc317, 0xc337, 0xc357, + 0xc377, 0xc397, 0xc3b7, 0xc3d7, 0xc3f7, 0xc417, 0xc437, 0xc457, + 0xc477, 0xc497, 0xc4b7, 0xc4d7, 0xc4f7, 0xc517, 0xc537, 0xc557, + 0xc577, 0xc597, 0xc5b7, 0xc5d7, 0xc5f7, 0xc617, 0xc637, 0xc657, + // Entry 3BC0 - 3BFF + 0xc677, 0xc697, 0xc6b7, 0xc6d7, 0xc6f7, 0xc717, 0xc737, 0xc757, + 0xc777, 0xc797, 0xc7b7, 0xc7d7, 0xc7f7, 0xc817, 0xc837, 0xc857, + 0xc877, 0xc897, 0xc8b7, 0xc8d7, 0xc8f7, 0xc917, 0xc937, 0xc957, + 0xc977, 0xc997, 0xc9b7, 0xc9d7, 0xc9f7, 0xca17, 0xca37, 0xca57, + 0xca77, 0xca97, 0xcab7, 0xcad7, 0xcaf7, 0xcb17, 0xcb37, 0xcb57, + 0xcb77, 0xcb97, 0xcbb7, 0xcbd7, 0xcbf7, 0xcc17, 0xcc37, 0xcc57, + 0xcc77, 0xcc97, 0xccb7, 0xccd7, 0xccf7, 0xcd17, 0xcd37, 0xcd57, + 0xcd77, 0xcd97, 0xcdb7, 0xcdd7, 0xcdf7, 0xce17, 0xce37, 0xce57, + // Entry 3C00 - 3C3F + 0xce77, 0xce97, 0xceb7, 0xced7, 0xcef7, 0xcf0e, 0xcf25, 0xcf3c, + 0xcf54, 0xcf6c, 0xcf89, 0xcfa0, 0xcfbf, 0xcfde, 0xcffd, 0xd01c, + 0xd03b, 0xd057, 0xd078, 0xd09d, 0xd0bb, 0xd0d2, 0xd0ea, 0xd0ff, + 0xd115, 0xd12d, 0xd149, 0xd160, 0xd176, 0xd199, 0xd1b9, 0xd1d8, + 0xd203, 0xd22d, 0xd24a, 0xd268, 0xd285, 0xd2a2, 0xd2c1, 0xd2e0, + 0xd2fb, 0xd318, 0xd337, 0xd354, 0xd371, 0xd394, 0xd3b1, 0xd3d0, + 0xd3ed, 0xd40a, 0xd42a, 0xd44c, 0xd468, 0xd487, 0xd4a4, 0xd4c2, + 0xd4e0, 0xd4fd, 0xd519, 0xd534, 0xd54f, 0xd569, 0xd583, 0xd5a9, + // Entry 3C40 - 3C7F + 0xd5cc, 0xd5ec, 0xd609, 0xd628, 0xd646, 0xd665, 0xd681, 0xd69f, + 0xd6bc, 0xd6dd, 0xd6fb, 0xd71b, 0xd73a, 0xd75c, 0xd77b, 0xd79c, + 0xd7bc, 0xd7dd, 0xd7fb, 0xd81b, 0xd83a, 0xd85a, 0xd877, 0xd896, + 0xd8b4, 0xd8d3, 0xd8ef, 0xd90d, 0xd92a, 0xd94b, 0xd969, 0xd989, + 0xd9a8, 0xd9c8, 0xd9e5, 0xda04, 0xda22, 0xda42, 0xda5f, 0xda7e, + 0xda9c, 0xdabd, 0xdadb, 0xdafb, 0xdb1a, 0xdb3d, 0xdb5d, 0xdb7f, + 0xdba0, 0xdbc2, 0xdbe1, 0xdc02, 0xdc20, 0xdc3f, 0xdc5b, 0xdc7b, + 0xdc98, 0xdcb7, 0xdcd3, 0xdcf3, 0xdd10, 0xdd31, 0xdd4f, 0xdd6f, + // Entry 3C80 - 3CBF + 0xdd8e, 0xddad, 0xddc9, 0xdde7, 0xde04, 0xde24, 0xde41, 0xde60, + 0xde7e, 0xde9f, 0xdebd, 0xdedd, 0xdefc, 0xdf23, 0xdf47, 0xdf68, + 0xdf86, 0xdfa6, 0xdfc5, 0xdff3, 0xe01e, 0xe042, 0xe063, 0xe086, + 0xe0a8, 0xe0d3, 0xe0fb, 0xe125, 0xe14e, 0xe174, 0xe197, 0xe1ce, + 0xe202, 0xe219, 0xe230, 0xe24c, 0xe268, 0xe286, 0xe2a4, 0xe2d5, + 0xe306, 0xe323, 0xe340, 0xe367, 0xe38e, 0xe3b5, 0xe3c7, 0xe3e4, + 0xe401, 0xe41f, 0xe43a, 0xe457, 0xe473, 0xe490, 0xe4aa, 0xe4c8, + 0xe4e3, 0xe501, 0xe51c, 0xe54a, 0xe568, 0xe583, 0xe5a9, 0xe5cc, + // Entry 3CC0 - 3CFF + 0xe5f2, 0xe615, 0xe632, 0xe64c, 0xe668, 0xe683, 0xe6c0, 0xe6fc, + 0xe738, 0xe771, 0xe7ab, 0xe7e2, 0xe81d, 0xe855, 0xe88e, 0xe8c4, + 0xe8fe, 0xe935, 0xe96f, 0xe9a6, 0xe9df, 0xea15, 0xea4d, 0xeaa0, + 0xeaf0, 0xeb42, 0xeb67, 0xeb89, 0xebad, 0xebd0, 0xec0c, 0xec47, + 0xec83, 0xecc7, 0xed02, 0xed2d, 0xed57, 0xed82, 0xedad, 0xede0, + 0xee0a, 0xee35, 0xee5f, 0xee8a, 0xeeb5, 0xeee8, 0xef12, 0xef3e, + 0xef6a, 0xef9e, 0xefc9, 0xeff4, 0xf020, 0xf04b, 0xf076, 0xf0a2, + 0xf0cd, 0xf0f9, 0xf125, 0xf150, 0xf17c, 0xf1a8, 0xf1d2, 0xf1fd, + // Entry 3D00 - 3D3F + 0xf228, 0xf252, 0xf27d, 0xf2a8, 0xf2d2, 0xf2fd, 0xf328, 0xf353, + 0xf37e, 0xf3ab, 0xf3d8, 0xf403, 0xf42d, 0xf458, 0xf483, 0xf4b6, + 0xf4e0, 0xf50a, 0xf535, 0xf568, 0xf592, 0xf5bd, 0xf5e8, 0xf612, + 0xf63d, 0xf667, 0xf692, 0xf6c5, 0xf6ef, 0xf71a, 0xf744, 0xf76f, + 0xf79a, 0xf7cd, 0xf7f7, 0xf823, 0xf84e, 0xf87a, 0xf8a6, 0xf8da, + 0xf905, 0xf931, 0xf95c, 0xf988, 0xf9b4, 0xf9e8, 0xfa13, 0xfa3e, + 0xfa69, 0xfa9c, 0xfac6, 0xfaf1, 0xfb1b, 0xfb46, 0xfb71, 0xfba4, + 0xfbce, 0xfc06, 0xfc3d, 0xfc7d, 0xfcaf, 0xfce1, 0xfd10, 0xfd3f, + // Entry 3D40 - 3D7F + 0xfd6e, 0xfda8, 0xfde0, 0xfe19, 0xfe52, 0xfe8b, 0xfecc, 0xff04, + 0xff2b, 0xff53, 0xff7b, 0xffa3, 0xffd3, 0xfffa, 0x0021, 0x0049, + 0x0071, 0x0099, 0x00c9, 0x00f0, 0x0118, 0x0141, 0x016a, 0x0193, + 0x01c4, 0x01ec, 0x021c, 0x0243, 0x0273, 0x029a, 0x02c2, 0x02e9, + 0x0311, 0x0341, 0x0368, 0x0390, 0x03c0, 0x03e7, 0x0410, 0x0439, + 0x0461, 0x048a, 0x04b3, 0x04dc, 0x050d, 0x0535, 0x0572, 0x0599, + 0x05c1, 0x05e9, 0x0611, 0x0641, 0x0668, 0x06a3, 0x06dd, 0x0718, + 0x0753, 0x078d, 0x07b7, 0x07e0, 0x080a, 0x0834, 0x085d, 0x0887, + // Entry 3D80 - 3DBF + 0x08b0, 0x08da, 0x0904, 0x092d, 0x0958, 0x0982, 0x09ad, 0x09d7, + 0x0a01, 0x0a2c, 0x0a57, 0x0a82, 0x0aac, 0x0ad7, 0x0b02, 0x0b2b, + 0x0b55, 0x0b7f, 0x0ba9, 0x0bd2, 0x0bfc, 0x0c26, 0x0c4f, 0x0c79, + 0x0ca3, 0x0ccd, 0x0cf9, 0x0d25, 0x0d4f, 0x0d78, 0x0da2, 0x0dcc, + 0x0df5, 0x0e1f, 0x0e49, 0x0e72, 0x0e9c, 0x0ec5, 0x0eef, 0x0f19, + 0x0f42, 0x0f6c, 0x0f96, 0x0fbf, 0x0fea, 0x1014, 0x103f, 0x106a, + 0x1095, 0x10bf, 0x10ea, 0x1115, 0x113f, 0x1169, 0x1193, 0x11c9, + 0x11f3, 0x121c, 0x1246, 0x1270, 0x1299, 0x12d3, 0x130c, 0x1335, + // Entry 3DC0 - 3DFF + 0x135d, 0x1386, 0x13ae, 0x13d8, 0x1401, 0x142b, 0x1454, 0x147f, + 0x14a9, 0x14d1, 0x14fa, 0x1523, 0x154d, 0x1576, 0x159f, 0x15c7, + 0x15f4, 0x1621, 0x164e, 0x1681, 0x16ab, 0x16de, 0x1708, 0x173d, + 0x1769, 0x179d, 0x17c8, 0x17fd, 0x1829, 0x185c, 0x1886, 0x18ba, + 0x18e5, 0x1919, 0x1944, 0x1977, 0x19a1, 0x19d4, 0x19fe, 0x1a2b, + 0x1a57, 0x1a84, 0x1ab1, 0x1add, 0x1b08, 0x1b32, 0x1b5c, 0x1b8c, + 0x1bb3, 0x1be3, 0x1c0a, 0x1c3c, 0x1c65, 0x1c96, 0x1cbe, 0x1cf0, + 0x1d19, 0x1d49, 0x1d70, 0x1da1, 0x1dc9, 0x1dfa, 0x1e22, 0x1e52, + // Entry 3E00 - 3E3F + 0x1e79, 0x1ea9, 0x1ed0, 0x1efa, 0x1f23, 0x1f4d, 0x1f77, 0x1fa0, + 0x1fc8, 0x1fef, 0x2016, 0x2042, 0x206d, 0x2099, 0x20c5, 0x20ef, + 0x211a, 0x2144, 0x216e, 0x2197, 0x21c1, 0x21ec, 0x2216, 0x2241, + 0x226a, 0x2293, 0x22c0, 0x22f0, 0x2307, 0x231f, 0x2353, 0x2384, + 0x23b7, 0x23ea, 0x241e, 0x2452, 0x2485, 0x24b9, 0x24eb, 0x251f, + 0x2550, 0x258a, 0x25be, 0x25f2, 0x262d, 0x265f, 0x2693, 0x26c8, + 0x26fb, 0x2730, 0x2760, 0x2792, 0x27c4, 0x27f7, 0x282c, 0x285f, + 0x2893, 0x28c9, 0x28fd, 0x2933, 0x296c, 0x299e, 0x29d2, 0x2a03, + // Entry 3E40 - 3E7F + 0x2a36, 0x2a6a, 0x2a9b, 0x2acd, 0x2aff, 0x2b33, 0x2b6d, 0x2ba1, + 0x2bd4, 0x2c10, 0x2c42, 0x2c76, 0x2ca7, 0x2cd9, 0x2d0a, 0x2d3a, + 0x2d73, 0x2da7, 0x2dd9, 0x2e0b, 0x2e3f, 0x2e70, 0x2ea3, 0x2ed7, + 0x2f0b, 0x2f3c, 0x2f70, 0x2fa5, 0x2fda, 0x300f, 0x3044, 0x3078, + 0x30ac, 0x30e0, 0x311a, 0x314d, 0x3182, 0x31bd, 0x31ef, 0x322a, + 0x325c, 0x3290, 0x32c1, 0x32f2, 0x332c, 0x335d, 0x3397, 0x33c8, + 0x3402, 0x3434, 0x346e, 0x34a9, 0x34e4, 0x3514, 0x3546, 0x3576, + 0x35a7, 0x35d8, 0x3608, 0x3639, 0x366a, 0x369c, 0x36cd, 0x36fe, + // Entry 3E80 - 3EBF + 0x3731, 0x3764, 0x3795, 0x37c6, 0x37fa, 0x382c, 0x3860, 0x3892, + 0x38c4, 0x38f6, 0x3927, 0x3958, 0x398a, 0x39bb, 0x39eb, 0x3a1f, + 0x3a53, 0x3a87, 0x3ab9, 0x3aeb, 0x3b28, 0x3b64, 0x3b87, 0x3baa, + 0x3bd0, 0x3bf3, 0x3c17, 0x3c3b, 0x3c61, 0x3c84, 0x3caf, 0x3cce, + 0x3cd7, 0x3d04, 0x3d18, 0x3d2c, 0x3d40, 0x3d54, 0x3d68, 0x3d7c, + 0x3d90, 0x3da4, 0x3db8, 0x3dcd, 0x3de2, 0x3df7, 0x3e0c, 0x3e21, + 0x3e36, 0x3e4b, 0x3e6f, 0x3e9f, 0x3ed3, 0x3ef7, 0x3f1f, 0x3f4e, + 0x3f7a, 0x3fb6, 0x3ff3, 0x4025, 0x4041, 0x405e, 0x407e, 0x409f, + // Entry 3EC0 - 3EFF + 0x40b9, 0x40d4, 0x40ef, 0x4111, 0x4134, 0x4153, 0x4173, 0x4193, + 0x41b4, 0x41d5, 0x41f7, 0x421a, 0x4247, 0x426d, 0x4293, 0x42ba, + 0x42e6, 0x4315, 0x4345, 0x4376, 0x43a8, 0x43e2, 0x441d, 0x4459, + 0x4496, 0x44ce, 0x4507, 0x4538, 0x456a, 0x459c, 0x45cf, 0x4607, + 0x4640, 0x464a, 0x465a, 0x468c, 0x46bf, 0x46ce, 0x46e1, 0x46ee, + 0x4702, 0x4711, 0x4724, 0x4731, 0x473c, 0x4753, 0x4762, 0x4771, + 0x477c, 0x478f, 0x47a5, 0x47b2, 0x47c8, 0x47df, 0x47f7, 0x4810, + 0x4831, 0x4853, 0x4864, 0x4873, 0x4881, 0x4890, 0x48a2, 0x48b6, + // Entry 3F00 - 3F3F + 0x48cd, 0x48de, 0x48f3, 0x4904, 0x4916, 0x4929, 0x4946, 0x4968, + 0x4985, 0x4999, 0x49b6, 0x49d0, 0x49e8, 0x4a02, 0x4a1a, 0x4a34, + 0x4a4c, 0x4a67, 0x4a80, 0x4a9a, 0x4ab2, 0x4ad3, 0x4b04, 0x4b32, + 0x4b63, 0x4b91, 0x4bc1, 0x4bee, 0x4c1f, 0x4c4d, 0x4c7d, 0x4caa, + 0x4cd9, 0x4d07, 0x4d27, 0x4d44, 0x4d63, 0x4d7f, 0x4d9d, 0x4dba, + 0x4de1, 0x4e05, 0x4e24, 0x4e40, 0x4e5e, 0x4e7b, 0x4e9b, 0x4eb8, + 0x4ed7, 0x4ef5, 0x4f15, 0x4f32, 0x4f51, 0x4f6f, 0x4f8e, 0x4faa, + 0x4fc8, 0x4fe5, 0x5005, 0x5022, 0x5041, 0x505f, 0x507e, 0x509a, + // Entry 3F40 - 3F7F + 0x50ba, 0x50d7, 0x50f6, 0x5112, 0x5132, 0x514f, 0x516f, 0x518c, + 0x51ab, 0x51c9, 0x51ea, 0x5208, 0x5228, 0x5247, 0x5266, 0x5282, + 0x52a0, 0x52bd, 0x52dc, 0x52f8, 0x5316, 0x5333, 0x5352, 0x536e, + 0x538c, 0x53a9, 0x53c8, 0x53e4, 0x5402, 0x541f, 0x543e, 0x545a, + 0x5478, 0x5495, 0x54b6, 0x54d4, 0x54f4, 0x5513, 0x5532, 0x554e, + 0x556c, 0x5589, 0x55a8, 0x55c4, 0x55e2, 0x55ff, 0x561e, 0x563a, + 0x5658, 0x5675, 0x5694, 0x56b0, 0x56ce, 0x56eb, 0x570b, 0x5728, + 0x5747, 0x5765, 0x5785, 0x57a2, 0x57c1, 0x57df, 0x57fe, 0x581a, + // Entry 3F80 - 3FBF + 0x5838, 0x5855, 0x5874, 0x5890, 0x58b8, 0x58dd, 0x58fc, 0x5918, + 0x5936, 0x5953, 0x598f, 0x59c8, 0x5a04, 0x5a3d, 0x5a79, 0x5ab2, + 0x5add, 0x5b05, 0x5b1e, 0x5b38, 0x5b50, 0x5b65, 0x5b7a, 0x5b90, + 0x5ba3, 0x5bb7, 0x5bd1, 0x5bec, 0x5bfe, 0x5c11, 0x5c20, 0x5c36, + 0x5c49, 0x5c5a, 0x5c6e, 0x5c81, 0x5c94, 0x5ca9, 0x5cbd, 0x5cd1, + 0x5ce4, 0x5cf9, 0x5d0e, 0x5d22, 0x5d31, 0x5d44, 0x5d5c, 0x5d71, + 0x5d8c, 0x5da3, 0x5dba, 0x5dda, 0x5dfa, 0x5e1a, 0x5e3a, 0x5e5a, + 0x5e7a, 0x5e9a, 0x5eba, 0x5eda, 0x5efa, 0x5f1a, 0x5f3a, 0x5f5a, + // Entry 3FC0 - 3FFF + 0x5f7a, 0x5f9a, 0x5fba, 0x5fda, 0x5ffa, 0x601a, 0x603a, 0x605a, + 0x607a, 0x609a, 0x60ba, 0x60da, 0x60fa, 0x6117, 0x6130, 0x614e, + 0x6169, 0x617b, 0x6191, 0x61af, 0x61cd, 0x61eb, 0x6209, 0x6227, + 0x6245, 0x6263, 0x6281, 0x629f, 0x62bd, 0x62db, 0x62f9, 0x6317, + 0x6335, 0x6353, 0x6371, 0x638f, 0x63ad, 0x63cb, 0x63e9, 0x6407, + 0x6425, 0x6443, 0x6461, 0x647f, 0x649d, 0x64b9, 0x64d0, 0x64ed, + 0x64fc, 0x651c, 0x653d, 0x655c, 0x6579, 0x6597, 0x65b2, 0x65cf, + 0x65eb, 0x660c, 0x662d, 0x664e, 0x666f, 0x6690, 0x66b2, 0x66d4, + // Entry 4000 - 403F + 0x66f6, 0x6718, 0x6748, 0x6763, 0x677e, 0x6799, 0x67b4, 0x67cf, + 0x67eb, 0x6807, 0x6823, 0x683f, 0x685b, 0x6877, 0x6893, 0x68af, + 0x68cb, 0x68e7, 0x6903, 0x691f, 0x693b, 0x6957, 0x6973, 0x698f, + 0x69ab, 0x69c7, 0x69e3, 0x69ff, 0x6a1b, 0x6a37, 0x6a53, 0x6a6f, + 0x6a8b, 0x6aa7, 0x6ac3, 0x6adf, 0x6afb, 0x6b17, 0x6b33, 0x6b4f, + 0x6b6b, 0x6b87, 0x6ba3, 0x6bbf, 0x6bdb, 0x6bf7, 0x6c13, 0x6c2e, + 0x6c52, 0x6c7b, 0x6c92, 0x6cb0, 0x6cd3, 0x6cf6, 0x6d13, 0x6d36, + 0x6d59, 0x6d77, 0x6d9a, 0x6db7, 0x6ddb, 0x6dfe, 0x6e21, 0x6e43, + // Entry 4040 - 407F + 0x6e68, 0x6e8d, 0x6eb0, 0x6ecd, 0x6eea, 0x6f0c, 0x6f2e, 0x6f4a, + 0x6f6b, 0x6f88, 0x6fa5, 0x6fc7, 0x6fe6, 0x7005, 0x7024, 0x7043, + 0x7060, 0x7079, 0x7093, 0x70ad, 0x70c8, 0x70e2, 0x70fb, 0x7116, + 0x7130, 0x7149, 0x7163, 0x717e, 0x7198, 0x71b2, 0x71cb, 0x71e6, + 0x7200, 0x721a, 0x7234, 0x724e, 0x7268, 0x7281, 0x7294, 0x72a8, + 0x72ba, 0x72ca, 0x72de, 0x72f0, 0x7302, 0x7320, 0x7339, 0x7350, + 0x736a, 0x7383, 0x7399, 0x73af, 0x73cc, 0x73ec, 0x740d, 0x7429, + 0x743e, 0x7456, 0x746e, 0x7486, 0x749e, 0x74b6, 0x74cf, 0x74e8, + // Entry 4080 - 40BF + 0x7501, 0x751a, 0x7533, 0x754c, 0x7565, 0x757e, 0x7597, 0x75b0, + 0x75c9, 0x75e2, 0x75fb, 0x7614, 0x762d, 0x7646, 0x765f, 0x7678, + 0x7691, 0x76aa, 0x76c3, 0x76dc, 0x76f5, 0x770e, 0x7727, 0x7740, + 0x7759, 0x7772, 0x778b, 0x77a4, 0x77bd, 0x77d6, 0x77ef, 0x7808, + 0x7821, 0x783a, 0x7853, 0x786c, 0x7885, 0x789e, 0x78b7, 0x78d0, + 0x78e9, 0x7902, 0x791b, 0x7934, 0x794d, 0x7966, 0x797f, 0x7998, + 0x79b1, 0x79ca, 0x79e3, 0x79fc, 0x7a15, 0x7a2e, 0x7a47, 0x7a60, + 0x7a7a, 0x7a94, 0x7aae, 0x7ac8, 0x7ae2, 0x7afc, 0x7b16, 0x7b30, + // Entry 40C0 - 40FF + 0x7b4a, 0x7b64, 0x7b7e, 0x7b92, 0x7ba6, 0x7bba, 0x7bce, 0x7be2, + 0x7bf6, 0x7c0a, 0x7c1e, 0x7c32, 0x7c46, 0x7c5a, 0x7c6e, 0x7c82, + 0x7c96, 0x7cb0, 0x7ccc, 0x7ce7, 0x7d03, 0x7d1f, 0x7d3f, 0x7d5a, + 0x7d75, 0x7d95, 0x7db4, 0x7dcf, 0x7deb, 0x7e06, 0x7e22, 0x7e3e, + 0x7e5b, 0x7e77, 0x7e93, 0x7eb1, 0x7ecc, 0x7ee9, 0x7f03, 0x7f1e, + 0x7f34, 0x7f50, 0x7f6b, 0x7f88, 0x7fa3, 0x7fb9, 0x7fd4, 0x7fea, + 0x8000, 0x801b, 0x8031, 0x8047, 0x805d, 0x8079, 0x808f, 0x80a5, + 0x80c1, 0x80d7, 0x80ed, 0x810b, 0x8128, 0x813e, 0x8154, 0x816a, + // Entry 4100 - 413F + 0x8180, 0x8196, 0x81ac, 0x81c2, 0x81d8, 0x81ee, 0x820a, 0x8220, + 0x823b, 0x8251, 0x8267, 0x827d, 0x8293, 0x82a9, 0x82bf, 0x82d5, + 0x82eb, 0x8301, 0x8317, 0x832d, 0x834a, 0x836a, 0x8388, 0x83a4, + 0x83c0, 0x83d6, 0x83f2, 0x8408, 0x841e, 0x8444, 0x8462, 0x8486, + 0x84a2, 0x84b8, 0x84ce, 0x84ea, 0x8500, 0x8516, 0x852c, 0x8542, + 0x8558, 0x8573, 0x8589, 0x859f, 0x85b5, 0x85cb, 0x85e1, 0x85fe, + 0x861b, 0x8638, 0x8655, 0x8672, 0x868f, 0x86ac, 0x86c9, 0x86e6, + 0x8703, 0x8720, 0x873d, 0x875a, 0x8777, 0x8794, 0x87b1, 0x87ce, + // Entry 4140 - 417F + 0x87eb, 0x8808, 0x8825, 0x8842, 0x885f, 0x887c, 0x8899, 0x88b6, + 0x88d3, 0x88f0, 0x890d, 0x892a, 0x8944, 0x895d, 0x896e, 0x897f, + 0x8990, 0x89a3, 0x89b5, 0x89c7, 0x89d8, 0x89eb, 0x89fe, 0x8a10, + 0x8a21, 0x8a35, 0x8a49, 0x8a5c, 0x8a6f, 0x8a82, 0x8a97, 0x8aab, + 0x8abf, 0x8ad8, 0x8af1, 0x8b0c, 0x8b26, 0x8b40, 0x8b59, 0x8b74, + 0x8b8f, 0x8ba9, 0x8bc3, 0x8bdd, 0x8bf9, 0x8c14, 0x8c2f, 0x8c49, + 0x8c65, 0x8c81, 0x8c9c, 0x8cb6, 0x8cd3, 0x8cf0, 0x8d0c, 0x8d28, + 0x8d44, 0x8d62, 0x8d7f, 0x8d9c, 0x8db3, 0x8dce, 0x8dea, 0x8e05, + // Entry 4180 - 41BF + 0x8e21, 0x8e41, 0x8e64, 0x8e81, 0x8e9d, 0x8ebf, 0x8ede, 0x8f00, + 0x8f1b, 0x8f37, 0x8f5a, 0x8f7e, 0x8fa3, 0x8fc6, 0x8fe8, 0x900c, + 0x9036, 0x9061, 0x908c, 0x90b8, 0x90db, 0x90fd, 0x9121, 0x914b, + 0x9176, 0x91a1, 0x91cc, 0x91f9, 0x9218, 0x923d, 0x925a, 0x9279, + 0x9298, 0x92b5, 0x92db, 0x9303, 0x9323, 0x9342, 0x9370, 0x938f, + 0x93ad, 0x93ca, 0x93ea, 0x940b, 0x943b, 0x945c, 0x947b, 0x94a0, + 0x94c7, 0x94ef, 0x9517, 0x953d, 0x9564, 0x9588, 0x95ae, 0x95d5, + 0x95f7, 0x961b, 0x962e, 0x9650, 0x9665, 0x967e, 0x968d, 0x969e, + // Entry 41C0 - 41FF + 0x96b0, 0x96bf, 0x96d3, 0x96e9, 0x96fe, 0x9713, 0x9726, 0x973d, + 0x974d, 0x975e, 0x976f, 0x9780, 0x9791, 0x97a2, 0x97ba, 0x97c9, + 0x97df, 0x97f2, 0x9806, 0x9812, 0x9824, 0x9834, 0x9847, 0x9859, + 0x9873, 0x9885, 0x9898, 0x98ac, 0x98c1, 0x98d5, 0x98e2, 0x98f6, + 0x990a, 0x9927, 0x9945, 0x9965, 0x997f, 0x9997, 0x99af, 0x99c8, + 0x99e3, 0x99fb, 0x9a13, 0x9a29, 0x9a42, 0x9a59, 0x9a74, 0x9a8e, + 0x9aa4, 0x9aba, 0x9ad6, 0x9af8, 0x9b11, 0x9b28, 0x9b40, 0x9b59, + 0x9b73, 0x9b8a, 0x9ba1, 0x9bb8, 0x9bd4, 0x9bea, 0x9c00, 0x9c18, + // Entry 4200 - 423F + 0x9c2f, 0x9c47, 0x9c5d, 0x9c7a, 0x9c91, 0x9cab, 0x9cc5, 0x9cdc, + 0x9cf6, 0x9d0e, 0x9d27, 0x9d42, 0x9d5e, 0x9d7a, 0x9da5, 0x9db4, + 0x9dc3, 0x9dd2, 0x9de2, 0x9df1, 0x9e00, 0x9e0f, 0x9e1e, 0x9e2d, + 0x9e3d, 0x9e4c, 0x9e5b, 0x9e6a, 0x9e79, 0x9e88, 0x9e97, 0x9ea7, + 0x9eb7, 0x9ec6, 0x9ed5, 0x9ee5, 0x9ef4, 0x9f03, 0x9f12, 0x9f22, + 0x9f32, 0x9f42, 0x9f51, 0x9f60, 0x9f6f, 0x9f7f, 0x9f8e, 0x9f9d, + 0x9fae, 0x9fbd, 0x9fcd, 0x9fdd, 0x9fec, 0x9ffb, 0xa00a, 0xa019, + 0xa029, 0xa038, 0xa048, 0xa059, 0xa068, 0xa07a, 0xa089, 0xa099, + // Entry 4240 - 427F + 0xa0a8, 0xa0b7, 0xa0c8, 0xa0d7, 0xa0e7, 0xa0f6, 0xa105, 0xa117, + 0xa126, 0xa136, 0xa146, 0xa156, 0xa165, 0xa175, 0xa185, 0xa196, + 0xa1a6, 0xa1b6, 0xa1c8, 0xa1d8, 0xa1ea, 0xa1fa, 0xa20a, 0xa21b, + 0xa22c, 0xa23d, 0xa24e, 0xa25e, 0xa270, 0xa28b, 0xa2a1, 0xa2b7, + 0xa2cf, 0xa2e6, 0xa2fd, 0xa313, 0xa32b, 0xa343, 0xa35a, 0xa371, + 0xa38b, 0xa3a5, 0xa3be, 0xa3d7, 0xa3f0, 0xa40b, 0xa425, 0xa43f, + 0xa45e, 0xa47d, 0xa49e, 0xa4be, 0xa4de, 0xa4fd, 0xa51e, 0xa53f, + 0xa55f, 0xa572, 0xa586, 0xa59a, 0xa5ae, 0xa5c1, 0xa5d5, 0xa5e9, + // Entry 4280 - 42BF + 0xa5fd, 0xa612, 0xa625, 0xa639, 0xa64d, 0xa661, 0xa675, 0xa68a, + 0xa69d, 0xa6b1, 0xa6c6, 0xa6da, 0xa6ee, 0xa702, 0xa716, 0xa729, + 0xa73e, 0xa753, 0xa768, 0xa77c, 0xa791, 0xa7a6, 0xa7ba, 0xa7ce, + 0xa7e3, 0xa7f9, 0xa810, 0xa826, 0xa83e, 0xa852, 0xa870, 0xa88e, + 0xa8a0, 0xa8b5, 0xa8c7, 0xa8d9, 0xa8ed, 0xa903, 0xa915, 0xa927, + 0xa93b, 0xa94c, 0xa95f, 0xa972, 0xa985, 0xa999, 0xa9aa, 0xa9bc, + 0xa9d2, 0xa9e6, 0xa9f9, 0xaa0c, 0xaa1f, 0xaa32, 0xaa45, 0xaa58, + 0xaa6b, 0xaa7e, 0xaa98, 0xaaac, 0xaac1, 0xaad6, 0xaaeb, 0xaafe, + // Entry 42C0 - 42FF + 0xab14, 0xab2b, 0xab41, 0xab58, 0xab6b, 0xab81, 0xab96, 0xabad, + 0xabc4, 0xabda, 0xabf0, 0xac05, 0xac1a, 0xac2f, 0xac42, 0xac59, + 0xac70, 0xac89, 0xac9e, 0xacb4, 0xacc7, 0xacdb, 0xacef, 0xad03, + 0xad19, 0xad2e, 0xad43, 0xad59, 0xad6e, 0xad82, 0xad96, 0xadaa, + 0xadbe, 0xaddc, 0xadfb, 0xae1b, 0xae3c, 0xae5b, 0xae6f, 0xae83, + 0xae98, 0xaeab, 0xaec0, 0xaed2, 0xaee4, 0xaef8, 0xaf0c, 0xaf1f, + 0xaf32, 0xaf45, 0xaf59, 0xaf6e, 0xaf81, 0xaf95, 0xafa8, 0xafba, + 0xafcf, 0xafe2, 0xaff4, 0xb008, 0xb01c, 0xb031, 0xb047, 0xb05c, + // Entry 4300 - 433F + 0xb06e, 0xb07f, 0xb090, 0xb0a3, 0xb0b8, 0xb0ca, 0xb0dc, 0xb0ee, + 0xb101, 0xb114, 0xb127, 0xb13a, 0xb14d, 0xb160, 0xb173, 0xb186, + 0xb199, 0xb1ac, 0xb1bf, 0xb1d2, 0xb1e5, 0xb1f9, 0xb20c, 0xb21f, + 0xb232, 0xb245, 0xb258, 0xb26b, 0xb27e, 0xb291, 0xb2a4, 0xb2b7, + 0xb2ca, 0xb2dd, 0xb2f0, 0xb303, 0xb316, 0xb329, 0xb33d, 0xb351, + 0xb364, 0xb37f, 0xb39c, 0xb3b9, 0xb3d6, 0xb3f0, 0xb40c, 0xb421, + 0xb439, 0xb451, 0xb467, 0xb47d, 0xb493, 0xb4ac, 0xb4c6, 0xb4e3, + 0xb500, 0xb51d, 0xb53b, 0xb558, 0xb576, 0xb594, 0xb5b2, 0xb5d0, + // Entry 4340 - 437F + 0xb5ef, 0xb60d, 0xb62c, 0xb645, 0xb65e, 0xb677, 0xb691, 0xb6a9, + 0xb6c3, 0xb6dd, 0xb6f7, 0xb711, 0xb72c, 0xb746, 0xb760, 0xb77a, + 0xb793, 0xb7ad, 0xb7c7, 0xb7e2, 0xb7fb, 0xb815, 0xb82f, 0xb84a, + 0xb863, 0xb87c, 0xb895, 0xb8ae, 0xb8c8, 0xb8e1, 0xb8fa, 0xb915, + 0xb930, 0xb94b, 0xb967, 0xb982, 0xb99e, 0xb9ba, 0xb9d6, 0xb9f2, + 0xba0f, 0xba2b, 0xba48, 0xba5f, 0xba76, 0xba8d, 0xbaa5, 0xbabb, + 0xbad3, 0xbaeb, 0xbb03, 0xbb1b, 0xbb34, 0xbb4c, 0xbb64, 0xbb7c, + 0xbb93, 0xbbab, 0xbbc3, 0xbbdc, 0xbbf3, 0xbc0b, 0xbc23, 0xbc3c, + // Entry 4380 - 43BF + 0xbc53, 0xbc6a, 0xbc81, 0xbc98, 0xbcb0, 0xbcc7, 0xbcde, 0xbcf1, + 0xbd03, 0xbd16, 0xbd28, 0xbd3c, 0xbd4d, 0xbd60, 0xbd75, 0xbd87, + 0xbd9a, 0xbdac, 0xbdbf, 0xbdd1, 0xbde3, 0xbdf6, 0xbe08, 0xbe1e, + 0xbe32, 0xbe44, 0xbe58, 0xbe6b, 0xbe7e, 0xbe8f, 0xbea1, 0xbeb3, + 0xbec5, 0xbed6, 0xbee9, 0xbefb, 0xbf0c, 0xbf1f, 0xbf31, 0xbf43, + 0xbf55, 0xbf67, 0xbf78, 0xbf8a, 0xbf9d, 0xbfaf, 0xbfc1, 0xbfd3, + 0xbfe4, 0xbff6, 0xc008, 0xc01c, 0xc02e, 0xc040, 0xc052, 0xc065, + 0xc076, 0xc087, 0xc098, 0xc0a9, 0xc0bb, 0xc0ce, 0xc0df, 0xc0f0, + // Entry 43C0 - 43FF + 0xc104, 0xc116, 0xc129, 0xc13a, 0xc14b, 0xc15e, 0xc171, 0xc184, + 0xc197, 0xc1aa, 0xc1bc, 0xc1cd, 0xc1de, 0xc1ee, 0xc1fe, 0xc20e, + 0xc21e, 0xc22e, 0xc23f, 0xc250, 0xc261, 0xc273, 0xc284, 0xc295, + 0xc2a8, 0xc2ba, 0xc2cc, 0xc2dd, 0xc2f0, 0xc303, 0xc315, 0xc32b, + 0xc342, 0xc35a, 0xc371, 0xc389, 0xc3a1, 0xc3bb, 0xc3d1, 0xc3e9, + 0xc400, 0xc418, 0xc42e, 0xc445, 0xc45e, 0xc476, 0xc48d, 0xc4a4, + 0xc4bb, 0xc4d1, 0xc4e9, 0xc500, 0xc519, 0xc530, 0xc548, 0xc55f, + 0xc578, 0xc590, 0xc5aa, 0xc5c3, 0xc5db, 0xc5f1, 0xc608, 0xc620, + // Entry 4400 - 443F + 0xc638, 0xc64f, 0xc667, 0xc67b, 0xc690, 0xc6a6, 0xc6bb, 0xc6d1, + 0xc6e7, 0xc6ff, 0xc713, 0xc729, 0xc73e, 0xc754, 0xc768, 0xc77d, + 0xc794, 0xc7aa, 0xc7bf, 0xc7d4, 0xc7e9, 0xc7fd, 0xc813, 0xc828, + 0xc83f, 0xc854, 0xc86a, 0xc87f, 0xc896, 0xc8ac, 0xc8c4, 0xc8db, + 0xc8f1, 0xc905, 0xc91a, 0xc930, 0xc946, 0xc95b, 0xc971, 0xc981, + 0xc992, 0xc9a3, 0xc9b5, 0xc9c6, 0xc9d8, 0xc9ea, 0xc9fb, 0xca0b, + 0xca1c, 0xca2d, 0xca3f, 0xca50, 0xca60, 0xca71, 0xca82, 0xca93, + 0xcaa5, 0xcab6, 0xcac7, 0xcad8, 0xcaea, 0xcafa, 0xcb0b, 0xcb1c, + // Entry 4440 - 447F + 0xcb2d, 0xcb3f, 0xcb50, 0xcb62, 0xcb73, 0xcb85, 0xcb95, 0xcba6, + 0xcbb7, 0xcbc7, 0xcbd8, 0xcbea, 0xcbfc, 0xcc11, 0xcc23, 0xcc40, + 0xcc5d, 0xcc7a, 0xcc97, 0xccb3, 0xccd1, 0xccee, 0xcd0c, 0xcd29, + 0xcd46, 0xcd64, 0xcd81, 0xcd9e, 0xcdbb, 0xcdd8, 0xcdf6, 0xce14, + 0xce32, 0xce4f, 0xce6d, 0xce8a, 0xcea8, 0xcec6, 0xcee3, 0xcf00, + 0xcf1e, 0xcf3b, 0xcf59, 0xcf76, 0xcf93, 0xcfb1, 0xcfd0, 0xcfee, + 0xd00c, 0xd028, 0xd046, 0xd063, 0xd081, 0xd09f, 0xd0bc, 0xd0db, + 0xd0f8, 0xd116, 0xd134, 0xd152, 0xd170, 0xd18d, 0xd1ab, 0xd1c9, + // Entry 4480 - 44BF + 0xd1e7, 0xd205, 0xd222, 0xd242, 0xd255, 0xd268, 0xd27b, 0xd28e, + 0xd2a1, 0xd2b4, 0xd2c7, 0xd2da, 0xd2ed, 0xd300, 0xd313, 0xd326, + 0xd339, 0xd34c, 0xd35f, 0xd372, 0xd386, 0xd39a, 0xd3ad, 0xd3c1, + 0xd3d5, 0xd3e8, 0xd3fc, 0xd40f, 0xd422, 0xd435, 0xd448, 0xd45b, + 0xd46e, 0xd481, 0xd494, 0xd4a7, 0xd4ba, 0xd4cd, 0xd4e0, 0xd4f3, + 0xd506, 0xd519, 0xd52c, 0xd53f, 0xd552, 0xd565, 0xd578, 0xd58b, + 0xd59e, 0xd5b1, 0xd5c4, 0xd5d7, 0xd5ea, 0xd5fd, 0xd610, 0xd623, + 0xd636, 0xd649, 0xd65c, 0xd66f, 0xd682, 0xd695, 0xd6a8, 0xd6bb, + // Entry 44C0 - 44FF + 0xd6ce, 0xd6e1, 0xd6f4, 0xd707, 0xd71a, 0xd72d, 0xd740, 0xd753, + 0xd766, 0xd779, 0xd78c, 0xd7a2, 0xd7b5, 0xd7c8, 0xd7db, 0xd7ee, + 0xd801, 0xd815, 0xd829, 0xd83c, 0xd84f, 0xd862, 0xd875, 0xd888, + 0xd89b, 0xd8ad, 0xd8bf, 0xd8d1, 0xd8e3, 0xd8f5, 0xd907, 0xd919, + 0xd92b, 0xd93e, 0xd951, 0xd964, 0xd976, 0xd988, 0xd99a, 0xd9ad, + 0xd9c0, 0xd9d3, 0xd9e5, 0xd9f7, 0xda09, 0xda1b, 0xda2d, 0xda3f, + 0xda51, 0xda63, 0xda75, 0xda87, 0xda99, 0xdaab, 0xdabd, 0xdacf, + 0xdae1, 0xdaf3, 0xdb05, 0xdb17, 0xdb29, 0xdb3b, 0xdb4d, 0xdb5f, + // Entry 4500 - 453F + 0xdb71, 0xdb83, 0xdb95, 0xdba7, 0xdbb9, 0xdbcb, 0xdbdd, 0xdbef, + 0xdc01, 0xdc13, 0xdc25, 0xdc37, 0xdc49, 0xdc5b, 0xdc6d, 0xdc7f, + 0xdc91, 0xdca3, 0xdcb5, 0xdcc7, 0xdcd9, 0xdceb, 0xdcfd, 0xdd0f, + 0xdd21, 0xdd33, 0xdd45, 0xdd57, 0xdd69, 0xdd7b, 0xdd8d, 0xdd9f, + 0xddb1, 0xddc3, 0xddd5, 0xdde7, 0xddfd, 0xde13, 0xde29, 0xde3f, + 0xde55, 0xde6b, 0xde81, 0xde97, 0xdead, 0xdec3, 0xded9, 0xdeef, + 0xdf05, 0xdf1b, 0xdf31, 0xdf47, 0xdf5d, 0xdf73, 0xdf89, 0xdf9b, + 0xdfad, 0xdfbf, 0xdfd1, 0xdfe3, 0xdff5, 0xe007, 0xe019, 0xe02b, + // Entry 4540 - 457F + 0xe03d, 0xe04f, 0xe061, 0xe073, 0xe085, 0xe097, 0xe0a9, 0xe0bb, + 0xe0cd, 0xe0df, 0xe0f1, 0xe103, 0xe115, 0xe127, 0xe139, 0xe14b, + 0xe15d, 0xe16f, 0xe181, 0xe193, 0xe1a5, 0xe1b7, 0xe1c9, 0xe1db, + 0xe1ed, 0xe1ff, 0xe211, 0xe223, 0xe235, 0xe247, 0xe259, 0xe26b, + 0xe27d, 0xe28f, 0xe2a1, 0xe2b3, 0xe2c5, 0xe2d7, 0xe2e9, 0xe2fb, + 0xe30d, 0xe31f, 0xe331, 0xe343, 0xe355, 0xe367, 0xe379, 0xe38b, + 0xe39d, 0xe3af, 0xe3c1, 0xe3d3, 0xe3e5, 0xe3f7, 0xe409, 0xe41b, + 0xe42d, 0xe43f, 0xe451, 0xe463, 0xe475, 0xe487, 0xe499, 0xe4ab, + // Entry 4580 - 45BF + 0xe4bd, 0xe4cf, 0xe4e1, 0xe4f3, 0xe505, 0xe517, 0xe529, 0xe53b, + 0xe54d, 0xe55f, 0xe571, 0xe583, 0xe595, 0xe5a7, 0xe5b9, 0xe5cb, + 0xe5dd, 0xe5ef, 0xe601, 0xe613, 0xe625, 0xe637, 0xe649, 0xe65b, + 0xe66d, 0xe67f, 0xe691, 0xe6a3, 0xe6b5, 0xe6c7, 0xe6d9, 0xe6eb, + 0xe6fd, 0xe70f, 0xe721, 0xe733, 0xe745, 0xe757, 0xe769, 0xe77b, + 0xe78d, 0xe79f, 0xe7b1, 0xe7c3, 0xe7d5, 0xe7e7, 0xe7f9, 0xe80b, + 0xe81d, 0xe82f, 0xe841, 0xe853, 0xe865, 0xe877, 0xe889, 0xe89b, + 0xe8ad, 0xe8bf, 0xe8d1, 0xe8e5, 0xe8f9, 0xe90d, 0xe921, 0xe935, + // Entry 45C0 - 45FF + 0xe949, 0xe95d, 0xe971, 0xe985, 0xe99c, 0xe9b3, 0xe9ca, 0xe9e1, + 0xe9f5, 0xea09, 0xea1d, 0xea35, 0xea4b, 0xea60, 0xea75, 0xea8c, + 0xeaa1, 0xeab3, 0xeac5, 0xead7, 0xeae9, 0xeafb, 0xeb0d, 0xeb1f, + 0xeb31, 0xeb43, 0xeb55, 0xeb67, 0xeb79, 0xeb8b, 0xeb9e, 0xebb1, + 0xebc4, 0xebd7, 0xebea, 0xebfd, 0xec10, 0xec23, 0xec36, 0xec49, + 0xec5c, 0xec6f, 0xec82, 0xec95, 0xeca8, 0xecbb, 0xecce, 0xece1, + 0xecf4, 0xed07, 0xed1a, 0xed2d, 0xed40, 0xed53, 0xed66, 0xed79, + 0xed8c, 0xed9f, 0xedb2, 0xedc5, 0xedd8, 0xedeb, 0xedfe, 0xee11, + // Entry 4600 - 463F + 0xee24, 0xee37, 0xee4a, 0xee5d, 0xee70, 0xee83, 0xee96, 0xeea9, + 0xeebc, 0xeecf, 0xeee2, 0xeef5, 0xef08, 0xef1b, 0xef2e, 0xef41, + 0xef5e, 0xef7a, 0xef97, 0xefb5, 0xefcf, 0xefea, 0xf007, 0xf023, + 0xf03f, 0xf05b, 0xf077, 0xf095, 0xf0b0, 0xf0cb, 0xf0e9, 0xf105, + 0xf11f, 0xf13c, 0xf158, 0xf174, 0xf190, 0xf1ab, 0xf1c8, 0xf1e3, + 0xf1fe, 0xf21b, 0xf236, 0xf254, 0xf277, 0xf29b, 0xf2bf, 0xf2d5, + 0xf2ea, 0xf300, 0xf317, 0xf32a, 0xf33e, 0xf354, 0xf369, 0xf37e, + 0xf393, 0xf3a8, 0xf3bf, 0xf3d3, 0xf3ed, 0xf401, 0xf418, 0xf42d, + // Entry 4640 - 467F + 0xf440, 0xf456, 0xf46b, 0xf480, 0xf495, 0xf4a9, 0xf4c8, 0xf4e8, + 0xf4fc, 0xf510, 0xf526, 0xf53b, 0xf550, 0xf564, 0xf57b, 0xf597, + 0xf5ad, 0xf5c8, 0xf5dd, 0xf5f3, 0xf60a, 0xf623, 0xf636, 0xf64a, + 0xf660, 0xf675, 0xf68a, 0xf6a5, 0xf6ba, 0xf6d5, 0xf6ea, 0xf707, + 0xf71e, 0xf738, 0xf74c, 0xf766, 0xf77a, 0xf791, 0xf7a6, 0xf7b9, + 0xf7cf, 0xf7e4, 0xf7f9, 0xf814, 0xf829, 0xf83d, 0xf851, 0xf865, + 0xf87b, 0xf890, 0xf8af, 0xf8c4, 0xf8d8, 0xf8ef, 0xf90b, 0xf91e, + 0xf930, 0xf943, 0xf95c, 0xf96c, 0xf97d, 0xf98f, 0xf9a1, 0xf9b3, + // Entry 4680 - 46BF + 0xf9c5, 0xf9d7, 0xf9eb, 0xf9fc, 0xfa0d, 0xfa21, 0xfa32, 0xfa42, + 0xfa55, 0xfa67, 0xfa79, 0xfa8a, 0xfa9b, 0xfaad, 0xfabe, 0xfad2, + 0xfaeb, 0xfb00, 0xfb15, 0xfb2b, 0xfb41, 0xfb55, 0xfb6a, 0xfb7f, + 0xfb94, 0xfba9, 0xfbbe, 0xfbd3, 0xfbe9, 0xfbfe, 0xfc13, 0xfc29, + 0xfc3e, 0xfc52, 0xfc68, 0xfc7d, 0xfc93, 0xfca9, 0xfcbe, 0xfcd3, + 0xfce8, 0xfd00, 0xfd1d, 0xfd32, 0xfd49, 0xfd62, 0xfd71, 0xfd80, + 0xfd8f, 0xfd9e, 0xfdad, 0xfdbc, 0xfdcb, 0xfdda, 0xfde9, 0xfdf8, + 0xfe07, 0xfe16, 0xfe25, 0xfe34, 0xfe44, 0xfe53, 0xfe62, 0xfe71, + // Entry 46C0 - 46FF + 0xfe80, 0xfe8f, 0xfe9f, 0xfeaf, 0xfebf, 0xfecf, 0xfedf, 0xfeee, + 0xff04, 0xff22, 0xff40, 0xff5e, 0xff7c, 0xff9b, 0xffba, 0xffd9, + 0xfffa, 0x0019, 0x0038, 0x0057, 0x0078, 0x0097, 0x00b8, 0x00d7, + 0x00f8, 0x0117, 0x0137, 0x0157, 0x0176, 0x0197, 0x01b6, 0x01d5, + 0x01f4, 0x0213, 0x0234, 0x0253, 0x0274, 0x0293, 0x02b2, 0x02d3, + 0x02f6, 0x030f, 0x0328, 0x0341, 0x035a, 0x0374, 0x038e, 0x03a8, + 0x03c2, 0x03dc, 0x03f6, 0x0410, 0x042a, 0x0444, 0x045f, 0x047a, + 0x0494, 0x04b6, 0x04d0, 0x04ea, 0x0504, 0x051e, 0x0538, 0x0552, + // Entry 4700 - 473F + 0x056c, 0x0595, 0x05b7, 0x05d4, 0x05f1, 0x060c, 0x0627, 0x0644, + 0x0660, 0x067c, 0x0697, 0x06b4, 0x06d1, 0x06ed, 0x0708, 0x0726, + 0x0744, 0x0761, 0x077e, 0x079b, 0x07ba, 0x07dd, 0x0800, 0x0825, + 0x0849, 0x086d, 0x0890, 0x08b5, 0x08da, 0x08fe, 0x0922, 0x0946, + 0x096c, 0x0991, 0x09b6, 0x09da, 0x0a00, 0x0a26, 0x0a4b, 0x0a6f, + 0x0a96, 0x0abd, 0x0ae3, 0x0b09, 0x0b2f, 0x0b57, 0x0b7e, 0x0ba5, + 0x0bd1, 0x0bfd, 0x0c2b, 0x0c58, 0x0c85, 0x0cb1, 0x0cdf, 0x0d0d, + 0x0d3a, 0x0d5f, 0x0d85, 0x0dad, 0x0dd4, 0x0dfb, 0x0e21, 0x0e49, + // Entry 4740 - 477F + 0x0e71, 0x0e98, 0x0ebe, 0x0ed1, 0x0ee8, 0x0eff, 0x0f1e, 0x0f35, + 0x0f4c, 0x0f68, 0x0f89, 0x0fa1, 0x0fb8, 0x0fcc, 0x0fe1, 0x0ff5, + 0x100a, 0x101e, 0x1033, 0x1047, 0x105c, 0x1071, 0x1087, 0x109c, + 0x10b2, 0x10c7, 0x10db, 0x10f0, 0x1104, 0x1119, 0x112d, 0x1141, + 0x1156, 0x116a, 0x117f, 0x1193, 0x11a7, 0x11bb, 0x11cf, 0x11e3, + 0x11f8, 0x120d, 0x1221, 0x1235, 0x1249, 0x125e, 0x1275, 0x128e, + 0x12a3, 0x12bc, 0x12cd, 0x12e1, 0x12f5, 0x130b, 0x1320, 0x1335, + 0x134d, 0x136a, 0x1388, 0x13a2, 0x13c5, 0x13e2, 0x1405, 0x1424, + // Entry 4780 - 47BF + 0x1440, 0x145c, 0x147f, 0x149b, 0x14b6, 0x14d5, 0x14f2, 0x150e, + 0x152b, 0x1547, 0x1564, 0x1581, 0x159e, 0x15ba, 0x15d6, 0x15f3, + 0x160f, 0x162d, 0x164b, 0x166a, 0x1685, 0x16a2, 0x16be, 0x16dd, + 0x16fb, 0x171a, 0x1738, 0x1755, 0x1772, 0x1792, 0x17af, 0x17cc, + 0x17ea, 0x1806, 0x1824, 0x1847, 0x1863, 0x187f, 0x189b, 0x18b8, + 0x18d4, 0x18f0, 0x190d, 0x1929, 0x1945, 0x1961, 0x197e, 0x199a, + 0x19b7, 0x19d4, 0x19f0, 0x1a0d, 0x1a29, 0x1a46, 0x1a62, 0x1a7e, + 0x1a9b, 0x1ab7, 0x1ad5, 0x1af1, 0x1b0e, 0x1b2b, 0x1b47, 0x1b64, + // Entry 47C0 - 47FF + 0x1b80, 0x1b9c, 0x1bb8, 0x1bd7, 0x1bee, 0x1c04, 0x1c1b, 0x1c32, + 0x1c4a, 0x1c62, 0x1c76, 0x1c8b, 0x1c9d, 0x1cb4, 0x1ccc, 0x1ce3, + 0x1cfb, 0x1d11, 0x1d27, 0x1d3d, 0x1d53, 0x1d69, 0x1d80, 0x1d98, + 0x1db1, 0x1dca, 0x1ddf, 0x1df4, 0x1e0c, 0x1e22, 0x1e39, 0x1e4d, + 0x1e61, 0x1e78, 0x1e8e, 0x1ea4, 0x1ebb, 0x1ed1, 0x1ee7, 0x1efe, + 0x1f13, 0x1f35, 0x1f57, 0x1f6c, 0x1f82, 0x1f97, 0x1faf, 0x1fcc, + 0x1fe7, 0x2005, 0x2031, 0x2056, 0x2070, 0x208f, 0x20b1, 0x20c1, + 0x20d2, 0x20e3, 0x20f5, 0x2106, 0x2118, 0x2129, 0x213b, 0x214b, + // Entry 4800 - 483F + 0x215c, 0x216c, 0x217d, 0x218d, 0x219e, 0x21ae, 0x21bf, 0x21d0, + 0x21e1, 0x21f3, 0x2205, 0x2216, 0x2228, 0x223a, 0x224b, 0x225c, + 0x226d, 0x227f, 0x2290, 0x22a2, 0x22b4, 0x22c5, 0x22d6, 0x22e7, + 0x22f9, 0x230b, 0x231e, 0x2331, 0x2342, 0x2354, 0x2366, 0x2377, + 0x2389, 0x239b, 0x23ac, 0x23bd, 0x23ce, 0x23df, 0x23f0, 0x2401, + 0x2413, 0x2425, 0x2438, 0x244b, 0x245c, 0x2475, 0x249b, 0x24c2, + 0x24e9, 0x2510, 0x2539, 0x2562, 0x2585, 0x25a7, 0x25ca, 0x25ee, + 0x260e, 0x262f, 0x2652, 0x2674, 0x2696, 0x26b8, 0x26da, 0x26fe, + // Entry 4840 - 487F + 0x271f, 0x2740, 0x2764, 0x2786, 0x27a6, 0x27c9, 0x27eb, 0x280d, + 0x282f, 0x2850, 0x2871, 0x2892, 0x28b5, 0x28d7, 0x28f8, 0x291c, + 0x2945, 0x296f, 0x2991, 0x29b2, 0x29d4, 0x29f7, 0x2a16, 0x2a40, + 0x2a62, 0x2a83, 0x2aa4, 0x2ac5, 0x2ae6, 0x2b09, 0x2b2e, 0x2b4e, + 0x2b71, 0x2b90, 0x2bb2, 0x2bd3, 0x2bf3, 0x2c13, 0x2c33, 0x2c55, + 0x2c76, 0x2c96, 0x2cb9, 0x2ce1, 0x2d0a, 0x2d26, 0x2d41, 0x2d5d, + 0x2d7a, 0x2d93, 0x2db7, 0x2dd3, 0x2dee, 0x2e09, 0x2e24, 0x2e41, + 0x2e60, 0x2e7a, 0x2e97, 0x2eb0, 0x2ecc, 0x2ee7, 0x2f01, 0x2f1d, + // Entry 4880 - 48BF + 0x2f40, 0x2f64, 0x2f86, 0x2fa0, 0x2fba, 0x2fd6, 0x2ff1, 0x300b, + 0x3028, 0x304a, 0x3064, 0x307f, 0x309b, 0x30b5, 0x30d0, 0x30eb, + 0x3105, 0x3120, 0x313c, 0x3157, 0x3173, 0x318f, 0x31ac, 0x31c7, + 0x31e3, 0x31ff, 0x321c, 0x3237, 0x3253, 0x326f, 0x328a, 0x32a6, + 0x32c1, 0x32dd, 0x32f9, 0x3316, 0x3332, 0x334f, 0x336b, 0x3388, + 0x33a3, 0x33bf, 0x33db, 0x33f7, 0x3412, 0x342d, 0x3449, 0x3466, + 0x3482, 0x349f, 0x34bb, 0x34d8, 0x34f4, 0x3511, 0x352e, 0x354a, + 0x3568, 0x3583, 0x359e, 0x35b9, 0x35d4, 0x35f0, 0x360b, 0x3627, + // Entry 48C0 - 48FF + 0x3642, 0x365e, 0x3679, 0x3695, 0x36b0, 0x36cc, 0x36e8, 0x3703, + 0x371f, 0x373b, 0x3758, 0x3774, 0x3791, 0x37ac, 0x37c8, 0x37e4, + 0x3801, 0x381c, 0x3839, 0x3857, 0x3876, 0x3895, 0x38b5, 0x38d4, + 0x38f4, 0x3914, 0x3933, 0x3953, 0x3971, 0x3995, 0x39b4, 0x39d3, + 0x39f2, 0x3a12, 0x3a31, 0x3a4f, 0x3a6e, 0x3a8d, 0x3aac, 0x3acb, + 0x3aeb, 0x3b0a, 0x3b2a, 0x3b49, 0x3b68, 0x3b88, 0x3ba6, 0x3bc5, + 0x3bef, 0x3c18, 0x3c38, 0x3c57, 0x3c77, 0x3c96, 0x3cbb, 0x3cda, + 0x3cfa, 0x3d19, 0x3d39, 0x3d59, 0x3d79, 0x3d97, 0x3db6, 0x3de0, + // Entry 4900 - 493F + 0x3e09, 0x3e28, 0x3e47, 0x3e67, 0x3e93, 0x3eb2, 0x3ece, 0x3eeb, + 0x3f08, 0x3f26, 0x3f43, 0x3f61, 0x3f7f, 0x3f9c, 0x3fba, 0x3fd6, + 0x3ff8, 0x4015, 0x4032, 0x404f, 0x406d, 0x408a, 0x40a6, 0x40c3, + 0x40e0, 0x40fd, 0x411a, 0x4138, 0x4155, 0x4173, 0x4190, 0x41ad, + 0x41cb, 0x41e7, 0x4204, 0x422c, 0x4253, 0x4271, 0x428e, 0x42ac, + 0x42c9, 0x42ec, 0x4309, 0x4327, 0x4344, 0x4362, 0x4380, 0x439e, + 0x43ba, 0x43d7, 0x43ff, 0x4426, 0x4443, 0x4460, 0x447e, 0x44a8, + 0x44c5, 0x44dd, 0x44f6, 0x450e, 0x4528, 0x4548, 0x4569, 0x4577, + // Entry 4940 - 497F + 0x4585, 0x4595, 0x45a4, 0x45b3, 0x45c1, 0x45d1, 0x45e1, 0x45f0, + 0x45ff, 0x4611, 0x4623, 0x4634, 0x4645, 0x4656, 0x4669, 0x467b, + 0x468d, 0x46a4, 0x46bb, 0x46d4, 0x46ec, 0x4704, 0x471b, 0x4734, + 0x474d, 0x4765, 0x477b, 0x4794, 0x47ab, 0x47c3, 0x47da, 0x47ee, + 0x4801, 0x4818, 0x482f, 0x483e, 0x484e, 0x485d, 0x486d, 0x487c, + 0x488c, 0x48a3, 0x48bb, 0x48d2, 0x48ea, 0x48f9, 0x4909, 0x4918, + 0x4928, 0x4938, 0x4949, 0x4959, 0x496a, 0x497b, 0x498b, 0x499c, + 0x49ac, 0x49bd, 0x49ce, 0x49df, 0x49f1, 0x4a02, 0x4a14, 0x4a25, + // Entry 4980 - 49BF + 0x4a35, 0x4a46, 0x4a56, 0x4a67, 0x4a77, 0x4a87, 0x4a98, 0x4aa8, + 0x4ab9, 0x4ac9, 0x4ad9, 0x4ae9, 0x4af9, 0x4b09, 0x4b1a, 0x4b2b, + 0x4b3b, 0x4b4b, 0x4b5c, 0x4b78, 0x4b93, 0x4baf, 0x4bc3, 0x4be3, + 0x4bf6, 0x4c0a, 0x4c1d, 0x4c31, 0x4c4c, 0x4c68, 0x4c83, 0x4c9f, + 0x4cb2, 0x4cc6, 0x4cd9, 0x4ced, 0x4cfa, 0x4d06, 0x4d19, 0x4d2f, + 0x4d4c, 0x4d63, 0x4d82, 0x4d9a, 0x4dab, 0x4dbc, 0x4dcf, 0x4de1, + 0x4df3, 0x4e04, 0x4e17, 0x4e2a, 0x4e3c, 0x4e4d, 0x4e61, 0x4e75, + 0x4e88, 0x4e9b, 0x4eae, 0x4ec3, 0x4ed7, 0x4eeb, 0x4f04, 0x4f1e, + // Entry 49C0 - 49FF + 0x4f2f, 0x4f3f, 0x4f4f, 0x4f61, 0x4f72, 0x4f83, 0x4f93, 0x4fa5, + 0x4fb7, 0x4fc8, 0x4fdc, 0x4ff3, 0x5007, 0x501a, 0x5029, 0x5039, + 0x5048, 0x5058, 0x5067, 0x5077, 0x5086, 0x5096, 0x50a5, 0x50b5, + 0x50c5, 0x50d6, 0x50e6, 0x50f7, 0x5108, 0x5118, 0x5129, 0x5139, + 0x514a, 0x515b, 0x516c, 0x517e, 0x518f, 0x51a2, 0x51b4, 0x51c5, + 0x51d6, 0x51e6, 0x51f7, 0x5207, 0x5218, 0x5228, 0x5238, 0x5249, + 0x5259, 0x526a, 0x527a, 0x528a, 0x529a, 0x52aa, 0x52ba, 0x52cb, + 0x52dc, 0x52ec, 0x52fc, 0x5310, 0x5323, 0x5337, 0x534a, 0x535e, + // Entry 4A00 - 4A3F + 0x5371, 0x5385, 0x5398, 0x53ac, 0x53be, 0x53cf, 0x53e7, 0x53fe, + 0x5410, 0x5423, 0x543d, 0x5449, 0x545c, 0x5473, 0x548a, 0x54a1, + 0x54b8, 0x54cf, 0x54e6, 0x54fd, 0x5515, 0x552c, 0x5543, 0x555a, + 0x5571, 0x5588, 0x559f, 0x55b6, 0x55cd, 0x55e4, 0x55fc, 0x5612, + 0x5629, 0x563f, 0x5655, 0x566b, 0x5681, 0x5698, 0x56af, 0x56c5, + 0x56db, 0x56f3, 0x570a, 0x5721, 0x5737, 0x574f, 0x5767, 0x577e, + 0x5795, 0x57a9, 0x57bc, 0x57cc, 0x57db, 0x57ea, 0x57f9, 0x580a, + 0x581c, 0x582d, 0x583f, 0x5851, 0x5862, 0x5874, 0x5885, 0x5897, + // Entry 4A40 - 4A7F + 0x58a9, 0x58bb, 0x58ce, 0x58e0, 0x58f3, 0x5905, 0x5916, 0x5928, + 0x5939, 0x594b, 0x595c, 0x596d, 0x597f, 0x5990, 0x59a2, 0x59b3, + 0x59c5, 0x59d6, 0x59e7, 0x59f8, 0x5a09, 0x5a1a, 0x5a2b, 0x5a3e, + 0x5a51, 0x5a65, 0x5a78, 0x5a8c, 0x5a9f, 0x5ab3, 0x5ac6, 0x5ada, + 0x5aee, 0x5afb, 0x5b09, 0x5b16, 0x5b24, 0x5b35, 0x5b45, 0x5b55, + 0x5b67, 0x5b78, 0x5b89, 0x5b99, 0x5bab, 0x5bbd, 0x5bce, 0x5be1, + 0x5bed, 0x5c00, 0x5c14, 0x5c25, 0x5c36, 0x5c47, 0x5c58, 0x5c69, + 0x5c7b, 0x5c8e, 0x5ca0, 0x5cb3, 0x5cc5, 0x5cd8, 0x5cea, 0x5cfd, + // Entry 4A80 - 4ABF + 0x5d10, 0x5d23, 0x5d37, 0x5d4a, 0x5d5e, 0x5d71, 0x5d83, 0x5d96, + 0x5da8, 0x5dbb, 0x5dcd, 0x5ddf, 0x5df2, 0x5e04, 0x5e17, 0x5e29, + 0x5e3b, 0x5e4d, 0x5e5f, 0x5e71, 0x5e83, 0x5e96, 0x5ea9, 0x5ec3, + 0x5ed8, 0x5eee, 0x5f06, 0x5f1b, 0x5f2f, 0x5f3f, 0x5f50, 0x5f60, + 0x5f71, 0x5f81, 0x5f92, 0x5faa, 0x5fc3, 0x5fdb, 0x5ff4, 0x6004, + 0x6015, 0x6025, 0x6036, 0x6047, 0x6059, 0x606a, 0x607c, 0x608e, + 0x609f, 0x60b1, 0x60c2, 0x60d4, 0x60e6, 0x60f8, 0x610b, 0x611d, + 0x6130, 0x6142, 0x6153, 0x6165, 0x6176, 0x6188, 0x6199, 0x61aa, + // Entry 4AC0 - 4AFF + 0x61bc, 0x61cd, 0x61df, 0x61f0, 0x6201, 0x6212, 0x6223, 0x6235, + 0x6246, 0x6258, 0x626a, 0x627b, 0x628c, 0x62a1, 0x62b5, 0x62ca, + 0x62de, 0x62f3, 0x630f, 0x632c, 0x6348, 0x6365, 0x6379, 0x638e, + 0x63a2, 0x63b7, 0x63ca, 0x63df, 0x63f7, 0x640f, 0x6419, 0x6426, + 0x643a, 0x6453, 0x6464, 0x6477, 0x6489, 0x64a4, 0x64c2, 0x64d4, + 0x64e6, 0x64f7, 0x6508, 0x651b, 0x652d, 0x653f, 0x6550, 0x6563, + 0x6576, 0x6588, 0x6594, 0x65a8, 0x65ba, 0x65d3, 0x65e9, 0x65ff, + 0x6618, 0x6631, 0x664c, 0x6666, 0x6680, 0x6699, 0x66b4, 0x66cf, + // Entry 4B00 - 4B3F + 0x66e9, 0x6703, 0x6720, 0x673d, 0x6759, 0x6775, 0x6791, 0x67af, + 0x67cc, 0x67e9, 0x680b, 0x682e, 0x683d, 0x684d, 0x685c, 0x686b, + 0x687a, 0x688a, 0x6899, 0x68a9, 0x68b9, 0x68ca, 0x68da, 0x68eb, + 0x68fc, 0x690d, 0x691d, 0x692e, 0x693e, 0x694f, 0x6960, 0x6971, + 0x6983, 0x6994, 0x69a6, 0x69b7, 0x69c7, 0x69d8, 0x69e8, 0x69fa, + 0x6a0b, 0x6a1b, 0x6a2b, 0x6a3c, 0x6a4c, 0x6a5d, 0x6a6e, 0x6a7e, + 0x6a8e, 0x6a9e, 0x6aae, 0x6abe, 0x6ace, 0x6ade, 0x6aef, 0x6b03, + 0x6b16, 0x6b2a, 0x6b3d, 0x6b50, 0x6b64, 0x6b77, 0x6b8b, 0x6b9f, + // Entry 4B40 - 4B7F + 0x6bb1, 0x6bc2, 0x6bd4, 0x6be0, 0x6bf3, 0x6c08, 0x6c1b, 0x6c35, + 0x6c4d, 0x6c5e, 0x6c6e, 0x6c7e, 0x6c8e, 0x6c9e, 0x6caf, 0x6cc1, + 0x6cd2, 0x6ce4, 0x6cf5, 0x6d07, 0x6d18, 0x6d2a, 0x6d3c, 0x6d4e, + 0x6d61, 0x6d73, 0x6d86, 0x6d99, 0x6dab, 0x6dbc, 0x6dce, 0x6ddf, + 0x6df1, 0x6e02, 0x6e13, 0x6e25, 0x6e36, 0x6e48, 0x6e59, 0x6e6a, + 0x6e7b, 0x6e8c, 0x6e9d, 0x6eae, 0x6ebf, 0x6ed1, 0x6ee3, 0x6ef7, + 0x6f09, 0x6f1c, 0x6f2e, 0x6f41, 0x6f53, 0x6f66, 0x6f78, 0x6f8b, + 0x6f9d, 0x6fb0, 0x6fc3, 0x6fd7, 0x6fea, 0x6ffe, 0x7012, 0x7026, + // Entry 4B80 - 4BBF + 0x7039, 0x704d, 0x7060, 0x7074, 0x7088, 0x709c, 0x70b0, 0x70c5, + 0x70d9, 0x70ee, 0x7102, 0x7117, 0x712b, 0x713e, 0x7152, 0x7165, + 0x7179, 0x718c, 0x719f, 0x71b3, 0x71c6, 0x71da, 0x71ee, 0x7201, + 0x7214, 0x7227, 0x723a, 0x724d, 0x7261, 0x7274, 0x7287, 0x729e, + 0x72b5, 0x72cb, 0x72e2, 0x72f8, 0x730f, 0x7325, 0x733c, 0x7352, + 0x7369, 0x737d, 0x7392, 0x73a6, 0x73b9, 0x73cc, 0x73e1, 0x73f5, + 0x7409, 0x741c, 0x7431, 0x7446, 0x745a, 0x747f, 0x7497, 0x74ac, + 0x74c0, 0x74d0, 0x74e1, 0x74f1, 0x7502, 0x7512, 0x7523, 0x753b, + // Entry 4BC0 - 4BFF + 0x7553, 0x7564, 0x7575, 0x7586, 0x7597, 0x75a8, 0x75ba, 0x75cb, + 0x75dd, 0x75ef, 0x7600, 0x7612, 0x7623, 0x7635, 0x7647, 0x7659, + 0x766c, 0x767e, 0x7691, 0x76a3, 0x76b4, 0x76c6, 0x76d7, 0x76e9, + 0x76fa, 0x770b, 0x771d, 0x772e, 0x7740, 0x7751, 0x7762, 0x7773, + 0x7784, 0x7796, 0x77a7, 0x77b9, 0x77cb, 0x77dc, 0x77ed, 0x77ff, + 0x7814, 0x7829, 0x783d, 0x7852, 0x7866, 0x787b, 0x7897, 0x78b4, + 0x78c9, 0x78de, 0x78f3, 0x7908, 0x791b, 0x7925, 0x793b, 0x794d, + 0x796a, 0x798e, 0x79a7, 0x79c0, 0x79dc, 0x79f9, 0x7a15, 0x7a30, + // Entry 4C00 - 4C3F + 0x7a4b, 0x7a68, 0x7a84, 0x7aa0, 0x7abb, 0x7ad5, 0x7af0, 0x7b0b, + 0x7b26, 0x7b41, 0x7b4e, 0x7b5c, 0x7b69, 0x7b77, 0x7b84, 0x7b92, + 0x7ba7, 0x7bbd, 0x7bd2, 0x7be8, 0x7bf5, 0x7c03, 0x7c10, 0x7c1e, + 0x7c2c, 0x7c3b, 0x7c49, 0x7c58, 0x7c67, 0x7c77, 0x7c85, 0x7c94, + 0x7ca2, 0x7cb1, 0x7cc0, 0x7cd0, 0x7cdf, 0x7cef, 0x7cfe, 0x7d0e, + 0x7d1d, 0x7d2b, 0x7d3a, 0x7d48, 0x7d57, 0x7d65, 0x7d74, 0x7d82, + 0x7d91, 0x7d9f, 0x7dae, 0x7dbc, 0x7dcb, 0x7dd9, 0x7de7, 0x7df6, + 0x7e04, 0x7e13, 0x7e21, 0x7e30, 0x7e3f, 0x7e4d, 0x7e5b, 0x7e6d, + // Entry 4C40 - 4C7F + 0x7e7e, 0x7e90, 0x7ea1, 0x7eb3, 0x7ecc, 0x7ee6, 0x7eff, 0x7f19, + 0x7f2a, 0x7f3c, 0x7f4d, 0x7f5f, 0x7f6f, 0x7f84, 0x7f96, 0x7fa7, + 0x7fb6, 0x7fc8, 0x7fe0, 0x7fe7, 0x7ff2, 0x7ffc, 0x800d, 0x8017, + 0x8026, 0x803c, 0x804b, 0x8059, 0x8067, 0x8077, 0x8086, 0x8095, + 0x80a3, 0x80b3, 0x80c3, 0x80d2, 0x80e7, 0x80fa, 0x8106, 0x8116, + 0x8127, 0x8137, 0x8148, 0x8158, 0x8169, 0x8181, 0x819a, 0x81b2, + 0x81cb, 0x81db, 0x81ec, 0x81fc, 0x820d, 0x821e, 0x8230, 0x8241, + 0x8253, 0x8265, 0x8276, 0x8288, 0x8299, 0x82ab, 0x82bd, 0x82cf, + // Entry 4C80 - 4CBF + 0x82e2, 0x82f4, 0x8307, 0x8319, 0x832a, 0x833c, 0x834d, 0x835f, + 0x8370, 0x8381, 0x8393, 0x83a4, 0x83b6, 0x83c7, 0x83d8, 0x83e9, + 0x83fa, 0x840b, 0x841d, 0x842f, 0x8440, 0x8451, 0x8466, 0x847a, + 0x848f, 0x84a3, 0x84b8, 0x84d4, 0x84f1, 0x850d, 0x852a, 0x853e, + 0x8558, 0x856d, 0x8581, 0x859b, 0x85b0, 0x85c8, 0x85dd, 0x85f1, + 0x8604, 0x8616, 0x862b, 0x8638, 0x8651, 0x865b, 0x866d, 0x867e, + 0x868f, 0x86a2, 0x86b4, 0x86c6, 0x86d7, 0x86ea, 0x86fd, 0x870f, + 0x871f, 0x8730, 0x8740, 0x8751, 0x8761, 0x8772, 0x878a, 0x87a3, + // Entry 4CC0 - 4CFF + 0x87bb, 0x87d4, 0x87e4, 0x87f5, 0x8805, 0x8816, 0x8827, 0x8839, + 0x884a, 0x885c, 0x886e, 0x887f, 0x8891, 0x88a2, 0x88b4, 0x88c6, + 0x88d8, 0x88eb, 0x88fd, 0x8910, 0x8922, 0x8933, 0x8945, 0x8956, + 0x8968, 0x8979, 0x898a, 0x899c, 0x89ad, 0x89bf, 0x89d0, 0x89e1, + 0x89f2, 0x8a03, 0x8a14, 0x8a26, 0x8a38, 0x8a49, 0x8a5a, 0x8a6f, + 0x8a83, 0x8a98, 0x8aac, 0x8ac1, 0x8add, 0x8afa, 0x8b0e, 0x8b23, + 0x8b37, 0x8b4c, 0x8b64, 0x8b79, 0x8b8d, 0x8ba0, 0x8bb2, 0x8bc6, + 0x8bd3, 0x8be7, 0x8bfc, 0x8c11, 0x8c2a, 0x8c43, 0x8c5c, 0x8c74, + // Entry 4D00 - 4D3F + 0x8cac, 0x8ce2, 0x8d15, 0x8d4f, 0x8d89, 0x8da9, 0x8dd3, 0x8dfd, + 0x8e27, 0x8e54, 0x8e80, 0x8eaa, 0x8ede, 0x8f13, 0x8f3a, 0x8f5f, + 0x8f85, 0x8f9f, 0x8fbd, 0x8fdc, 0x8fe9, 0x8ff7, 0x9004, 0x9012, + 0x901f, 0x902d, 0x9042, 0x9058, 0x906d, 0x9083, 0x9090, 0x909e, + 0x90ab, 0x90b9, 0x90c7, 0x90d6, 0x90e4, 0x90f3, 0x9102, 0x9110, + 0x911f, 0x912d, 0x913c, 0x914b, 0x915a, 0x916a, 0x9179, 0x9189, + 0x9198, 0x91a6, 0x91b5, 0x91c3, 0x91d2, 0x91e0, 0x91ee, 0x91fd, + 0x920b, 0x921a, 0x9228, 0x9236, 0x9244, 0x9252, 0x9260, 0x926f, + // Entry 4D40 - 4D7F + 0x927e, 0x928c, 0x929a, 0x92a9, 0x92bb, 0x92cc, 0x92de, 0x92ef, + 0x9301, 0x931a, 0x9334, 0x934d, 0x9367, 0x9378, 0x938a, 0x939b, + 0x93ad, 0x93bf, 0x93d0, 0x93e0, 0x93f5, 0x93ff, 0x9410, 0x9426, + 0x9434, 0x9443, 0x9451, 0x945f, 0x946f, 0x947e, 0x948d, 0x949b, + 0x94ab, 0x94bb, 0x94ca, 0x94e7, 0x94fe, 0x9522, 0x9546, 0x956a, + 0x958f, 0x95bb, 0x95d3, 0x9600, 0x9615, 0x9638, 0x9662, 0x9693, + 0x96a1, 0x96b0, 0x96be, 0x96cd, 0x96db, 0x96ea, 0x96f8, 0x9707, + 0x9715, 0x9724, 0x9733, 0x9743, 0x9752, 0x9762, 0x9772, 0x9781, + // Entry 4D80 - 4DBF + 0x9791, 0x97a0, 0x97b0, 0x97c0, 0x97d0, 0x97e1, 0x97f1, 0x9802, + 0x9812, 0x9821, 0x9831, 0x9840, 0x9850, 0x985f, 0x986e, 0x987e, + 0x988d, 0x989d, 0x98ac, 0x98bb, 0x98ca, 0x98d9, 0x98e8, 0x98f8, + 0x9907, 0x9916, 0x9926, 0x9939, 0x994b, 0x995e, 0x9970, 0x9983, + 0x9995, 0x99a8, 0x99ba, 0x99cd, 0x99df, 0x99f2, 0x9a03, 0x9a13, + 0x9a23, 0x9a32, 0x9a41, 0x9a52, 0x9a62, 0x9a72, 0x9a81, 0x9a92, + 0x9aa3, 0x9ab3, 0x9ac1, 0x9ad0, 0x9adf, 0x9aed, 0x9afb, 0x9b13, + 0x9b21, 0x9b30, 0x9b3e, 0x9b4c, 0x9b5a, 0x9b69, 0x9b78, 0x9b86, + // Entry 4DC0 - 4DFF + 0x9b94, 0x9ba2, 0x9bb1, 0x9bbf, 0x9bcc, 0x9bda, 0x9be9, 0x9bf7, + 0x9c0f, 0x9c1e, 0x9c2d, 0x9c3c, 0x9c59, 0x9c76, 0x9c9c, 0x9cad, + 0x9cbf, 0x9cd0, 0x9ce2, 0x9cf3, 0x9d05, 0x9d16, 0x9d28, 0x9d39, + 0x9d4b, 0x9d5d, 0x9d6d, 0x9d7c, 0x9d8a, 0x9d98, 0x9da8, 0x9db7, + 0x9dc6, 0x9dd4, 0x9de4, 0x9df4, 0x9e03, 0x9e12, 0x9e24, 0x9e3b, + 0x9e4c, 0x9e5b, 0x9e69, 0x9e88, 0x9ea4, 0x9ec1, 0x9ede, 0x9efb, + 0x9f18, 0x9f35, 0x9f52, 0x9f6e, 0x9f8a, 0x9fa8, 0x9fc5, 0x9fe2, + 0xa000, 0xa01e, 0xa03b, 0xa059, 0xa077, 0xa095, 0xa0b4, 0xa0d1, + // Entry 4E00 - 4E3F + 0xa0ee, 0xa10b, 0xa128, 0xa145, 0xa164, 0xa183, 0xa1a2, 0xa1c0, + 0xa1df, 0xa1fd, 0xa21c, 0xa239, 0xa253, 0xa26e, 0xa289, 0xa2a4, + 0xa2bf, 0xa2da, 0xa2f5, 0xa30f, 0xa329, 0xa345, 0xa360, 0xa37b, + 0xa397, 0xa3b3, 0xa3ce, 0xa3ea, 0xa406, 0xa422, 0xa43f, 0xa45a, + 0xa475, 0xa490, 0xa4ab, 0xa4c6, 0xa4e3, 0xa500, 0xa51d, 0xa539, + 0xa556, 0xa572, 0xa58f, 0xa5a5, 0xa5ba, 0xa5cf, 0xa5e6, 0xa5fc, + 0xa612, 0xa627, 0xa63e, 0xa655, 0xa66b, 0xa681, 0xa69a, 0xa6b3, + 0xa6cb, 0xa6e3, 0xa6fb, 0xa715, 0xa72e, 0xa747, 0xa755, 0xa76e, + // Entry 4E40 - 4E7F + 0xa78b, 0xa7a9, 0xa7c6, 0xa7e3, 0xa801, 0xa81e, 0xa83c, 0xa85a, + 0xa880, 0xa8a2, 0xa8bc, 0xa8d7, 0xa8f1, 0xa90c, 0xa927, 0xa941, + 0xa95c, 0xa976, 0xa991, 0xa9ac, 0xa9c8, 0xa9e3, 0xa9ff, 0xaa1a, + 0xaa34, 0xaa4f, 0xaa69, 0xaa84, 0xaa9e, 0xaab8, 0xaad3, 0xaaed, + 0xab08, 0xab22, 0xab3d, 0xab59, 0xab74, 0xab90, 0xabab, 0xabc5, + 0xabdf, 0xabf9, 0xac13, 0xac2d, 0xac47, 0xac62, 0xac7d, 0xac97, + 0xacb1, 0xaccd, 0xacf2, 0xad0e, 0xad2f, 0xad5e, 0xad88, 0xada6, + 0xadc3, 0xaded, 0xae15, 0xae3d, 0xae65, 0xae8d, 0xaeaf, 0xaed1, + // Entry 4E80 - 4EBF + 0xaeec, 0xaf06, 0xaf27, 0xaf47, 0xaf76, 0xafa5, 0xafbf, 0xafcf, + 0xafe3, 0xaff8, 0xb00c, 0xb020, 0xb034, 0xb049, 0xb05e, 0xb073, + 0xb08f, 0xb0ab, 0xb0c4, 0xb0d5, 0xb0e7, 0xb0f8, 0xb10a, 0xb11c, + 0xb12d, 0xb13f, 0xb150, 0xb162, 0xb174, 0xb186, 0xb199, 0xb1ab, + 0xb1be, 0xb1d0, 0xb1e1, 0xb1f3, 0xb204, 0xb216, 0xb227, 0xb238, + 0xb24a, 0xb25b, 0xb26d, 0xb27e, 0xb290, 0xb2a3, 0xb2b5, 0xb2c7, + 0xb2d8, 0xb2e9, 0xb2fa, 0xb30b, 0xb31c, 0xb32d, 0xb33f, 0xb351, + 0xb362, 0xb373, 0xb386, 0xb3a7, 0xb3c8, 0xb3ea, 0xb40b, 0xb429, + // Entry 4EC0 - 4EFF + 0xb447, 0xb466, 0xb484, 0xb4a2, 0xb4c0, 0xb4de, 0xb4fc, 0xb51a, + 0xb539, 0xb557, 0xb576, 0xb58b, 0xb59f, 0xb5b6, 0xb5c7, 0xb5d9, + 0xb5ea, 0xb602, 0xb636, 0xb663, 0xb686, 0xb69d, 0xb6b4, 0xb6c9, + 0xb6de, 0xb6f3, 0xb708, 0xb71d, 0xb732, 0xb747, 0xb75d, 0xb772, + 0xb787, 0xb79d, 0xb7b2, 0xb7c7, 0xb7dc, 0xb7f1, 0xb807, 0xb81c, + 0xb832, 0xb847, 0xb85c, 0xb872, 0xb886, 0xb89a, 0xb8ae, 0xb8c2, + 0xb8d6, 0xb8eb, 0xb900, 0xb91a, 0xb934, 0xb94e, 0xb968, 0xb982, + 0xb99c, 0xb9b6, 0xb9d1, 0xb9eb, 0xba07, 0xba1e, 0xba3d, 0xba5f, + // Entry 4F00 - 4F3F + 0xba7c, 0xbaa1, 0xbabd, 0xbad4, 0xbaf6, 0xbb13, 0xbb2d, 0xbb4d, + 0xbb72, 0xbb92, 0xbbb3, 0xbbcf, 0xbbe7, 0xbc0e, 0xbc30, 0xbc4e, + 0xbc60, 0xbc73, 0xbc85, 0xbc98, 0xbcaa, 0xbcbd, 0xbcd7, 0xbcf2, + 0xbd0c, 0xbd1e, 0xbd31, 0xbd43, 0xbd56, 0xbd69, 0xbd7d, 0xbd90, + 0xbda4, 0xbdb8, 0xbdcb, 0xbddf, 0xbdf2, 0xbe06, 0xbe1a, 0xbe2e, + 0xbe43, 0xbe57, 0xbe6c, 0xbe80, 0xbe93, 0xbea7, 0xbeba, 0xbece, + 0xbee1, 0xbef4, 0xbf08, 0xbf1b, 0xbf2f, 0xbf42, 0xbf55, 0xbf68, + 0xbf7b, 0xbf8e, 0xbfa2, 0xbfb6, 0xbfc9, 0xbfdc, 0xbff3, 0xc009, + // Entry 4F40 - 4F7F + 0xc020, 0xc036, 0xc04d, 0xc06b, 0xc08a, 0xc0a8, 0xc0be, 0xc0d5, + 0xc0eb, 0xc102, 0xc11c, 0xc133, 0xc149, 0xc15e, 0xc175, 0xc184, + 0xc19a, 0xc1b2, 0xc1c8, 0xc1de, 0xc1f2, 0xc205, 0xc218, 0xc22d, + 0xc241, 0xc255, 0xc268, 0xc27d, 0xc292, 0xc2a6, 0xc2ba, 0xc2ce, + 0xc2e4, 0xc2f9, 0xc30e, 0xc322, 0xc338, 0xc34e, 0xc363, 0xc377, + 0xc38e, 0xc3a5, 0xc3bb, 0xc3d1, 0xc3e7, 0xc3ff, 0xc416, 0xc42d, + 0xc449, 0xc45a, 0xc46b, 0xc47c, 0xc48e, 0xc49f, 0xc4b1, 0xc4c2, + 0xc4d4, 0xc4e5, 0xc4f7, 0xc508, 0xc51a, 0xc52b, 0xc53c, 0xc54d, + // Entry 4F80 - 4FBF + 0xc55f, 0xc570, 0xc581, 0xc593, 0xc5a6, 0xc5b8, 0xc5c9, 0xc5db, + 0xc5ec, 0xc5fd, 0xc60e, 0xc61f, 0xc630, 0xc642, 0xc653, 0xc664, + 0xc674, 0xc68f, 0xc6ab, 0xc6c6, 0xc6e2, 0xc6fd, 0xc719, 0xc734, + 0xc750, 0xc76b, 0xc787, 0xc7a2, 0xc7bd, 0xc7d8, 0xc7f4, 0xc80f, + 0xc82a, 0xc846, 0xc863, 0xc87f, 0xc89a, 0xc8b6, 0xc8d1, 0xc8ec, + 0xc907, 0xc922, 0xc93e, 0xc959, 0xc974, 0xc98e, 0xc9a3, 0xc9b7, + 0xc9cb, 0xc9df, 0xc9f3, 0xca08, 0xca20, 0xca36, 0xca4d, 0xca63, + 0xca7a, 0xca90, 0xcaa7, 0xcabd, 0xcad4, 0xcaea, 0xcb01, 0xcb18, + // Entry 4FC0 - 4FFF + 0xcb30, 0xcb47, 0xcb5f, 0xcb77, 0xcb8e, 0xcba6, 0xcbbd, 0xcbd5, + 0xcbed, 0xcc05, 0xcc1e, 0xcc36, 0xcc4f, 0xcc67, 0xcc7e, 0xcc96, + 0xccad, 0xccc5, 0xccdc, 0xccf3, 0xcd0b, 0xcd22, 0xcd3a, 0xcd51, + 0xcd68, 0xcd7f, 0xcd96, 0xcdad, 0xcdc5, 0xcddd, 0xcdf4, 0xce0b, + 0xce23, 0xce3c, 0xce55, 0xce6d, 0xce88, 0xcea2, 0xcebd, 0xced7, + 0xcef2, 0xcf14, 0xcf2e, 0xcf49, 0xcf63, 0xcf7e, 0xcf99, 0xcfb3, + 0xcfcb, 0xcfe4, 0xcffe, 0xd012, 0xd025, 0xd03a, 0xd052, 0xd069, + 0xd080, 0xd099, 0xd0b1, 0xd0c9, 0xd0e0, 0xd0f9, 0xd112, 0xd12a, + // Entry 5000 - 503F + 0xd13a, 0xd152, 0xd16c, 0xd18c, 0xd1a5, 0xd1bf, 0xd1e0, 0xd1fb, + 0xd215, 0xd226, 0xd237, 0xd253, 0xd274, 0xd28f, 0xd2b0, 0xd2ca, + 0xd2ea, 0xd306, 0xd323, 0xd340, 0xd367, 0xd37d, 0xd38f, 0xd3ad, + 0xd3cf, 0xd3f2, 0xd40f, 0xd42c, 0xd43d, 0xd44e, 0xd46b, 0xd492, + 0xd4a3, 0xd4bd, 0xd4d9, 0xd4f5, 0xd50f, 0xd52b, 0xd545, 0xd560, + 0xd57b, 0xd58e, 0xd5a2, 0xd5b5, 0xd5d2, 0xd5e3, 0xd5fc, 0xd619, + 0xd64a, 0xd66d, 0xd681, 0xd694, 0xd6a7, 0xd6c4, 0xd6d8, 0xd6ec, + 0xd6fe, 0xd71a, 0xd736, 0xd773, 0xd797, 0xd7da, 0xd7ed, 0xd802, + // Entry 5040 - 507F + 0xd813, 0xd825, 0xd838, 0xd84d, 0xd85f, 0xd87a, 0xd88e, 0xd8a0, + 0xd8b4, 0xd8c5, 0xd8de, 0xd8f9, 0xd919, 0xd92a, 0xd946, 0xd962, + 0xd97f, 0xd993, 0xd9b2, 0xd9c4, 0xd9d7, 0xd9e8, 0xd9fa, 0xda25, + 0xda49, 0xda6e, 0xda90, 0xdab2, 0xdade, 0xdb00, 0xdb24, 0xdb47, + 0xdb69, 0xdb8b, 0xdbb5, 0xdbd8, 0xdbfa, 0xdc1c, 0xdc49, 0xdc6c, + 0xdc8e, 0xdcba, 0xdcdc, 0xdd00, 0xdd2c, 0xdd4f, 0xdd61, 0xdd73, + 0xdd87, 0xdd9b, 0xddac, 0xddbe, 0xddd0, 0xddec, 0xddff, 0xde11, + 0xde36, 0xde49, 0xde5a, 0xde73, 0xde89, 0xdea2, 0xdeb4, 0xded1, + // Entry 5080 - 50BF + 0xdee4, 0xdef6, 0xdf0a, 0xdf1c, 0xdf2e, 0xdf41, 0xdf59, 0xdf76, + 0xdf89, 0xdf9c, 0xdfac, 0xdfc6, 0xdfea, 0xdffb, 0xe024, 0xe03f, + 0xe059, 0xe074, 0xe08f, 0xe0a8, 0xe0bb, 0xe0ce, 0xe0df, 0xe0f0, + 0xe10c, 0xe12d, 0xe147, 0xe164, 0xe181, 0xe19a, 0xe1ad, 0xe1c1, + 0xe1d4, 0xe1e7, 0xe202, 0xe226, 0xe254, 0xe270, 0xe28d, 0xe2b0, + 0xe2d8, 0xe2f4, 0xe315, 0xe337, 0xe357, 0xe37f, 0xe39c, 0xe3b8, + 0xe3df, 0xe3fb, 0xe417, 0xe433, 0xe44f, 0xe460, 0xe476, 0xe488, + 0xe4b2, 0xe4d4, 0xe4f7, 0xe521, 0xe53c, 0xe558, 0xe57e, 0xe59a, + // Entry 50C0 - 50FF + 0xe5be, 0xe5da, 0xe5fe, 0xe619, 0xe634, 0xe65a, 0xe676, 0xe691, + 0xe6b4, 0xe6cf, 0xe6fa, 0xe71c, 0xe738, 0xe753, 0xe76f, 0xe792, + 0xe7b7, 0xe7e4, 0xe800, 0xe824, 0xe847, 0xe864, 0xe885, 0xe8b2, + 0xe8ce, 0xe8ed, 0xe909, 0xe92e, 0xe952, 0xe96d, 0xe990, 0xe9ab, + 0xe9c7, 0xe9ec, 0xea07, 0xea23, 0xea3f, 0xea5b, 0xea80, 0xea9d, + 0xeab9, 0xead6, 0xeaf0, 0xeb0b, 0xeb2e, 0xeb49, 0xeb5c, 0xeb7d, + 0xeb8f, 0xebb7, 0xebc9, 0xebf5, 0xec09, 0xec1b, 0xec2d, 0xec40, + 0xec58, 0xec75, 0xec96, 0xeca8, 0xecbb, 0xecd0, 0xece6, 0xed06, + // Entry 5100 - 513F + 0xed17, 0xed30, 0xed49, 0xed66, 0xed78, 0xed93, 0xedb2, 0xedc6, + 0xedd9, 0xedf1, 0xee04, 0xee28, 0xee4b, 0xee68, 0xee8d, 0xeea9, + 0xeebd, 0xeed0, 0xeef1, 0xef0e, 0xef2c, 0xef44, 0xef55, 0xef72, + 0xef84, 0xefa0, 0xefcb, 0xefe7, 0xf00d, 0xf024, 0xf036, 0xf059, + 0xf075, 0xf096, 0xf0a8, 0xf0ba, 0xf0d6, 0xf0e8, 0xf0fb, 0xf10f, + 0xf124, 0xf135, 0xf14b, 0xf161, 0xf173, 0xf184, 0xf19f, 0xf1bb, + 0xf1d6, 0xf1f2, 0xf20d, 0xf228, 0xf243, 0xf25e, 0xf277, 0xf288, + 0xf29b, 0xf2b7, 0xf2d4, 0xf2f4, 0xf312, 0xf32e, 0xf341, 0xf351, + // Entry 5140 - 517F + 0xf363, 0xf374, 0xf387, 0xf3a8, 0xf3cd, 0xf3de, 0xf3f0, 0xf406, + 0xf41b, 0xf450, 0xf467, 0xf478, 0xf499, 0xf4ab, 0xf4bc, 0xf4d8, + 0xf4f5, 0xf512, 0xf52b, 0xf53e, 0xf54f, 0xf560, 0xf572, 0xf583, + 0xf59c, 0xf5b6, 0xf5d9, 0xf5f5, 0xf610, 0xf62d, 0xf648, 0xf662, + 0xf67f, 0xf69b, 0xf6b5, 0xf6d0, 0xf6f1, 0xf70c, 0xf738, 0xf752, + 0xf76e, 0xf793, 0xf7bd, 0xf7d7, 0xf7f3, 0xf80e, 0xf828, 0xf843, + 0xf85d, 0xf878, 0xf892, 0xf8ac, 0xf8c6, 0xf8e8, 0xf90a, 0xf92c, + 0xf946, 0xf96b, 0xf985, 0xf9a0, 0xf9ba, 0xf9d4, 0xf9ee, 0xfa09, + // Entry 5180 - 51BF + 0xfa24, 0xfa3f, 0xfa5b, 0xfa76, 0xfa91, 0xfaae, 0xfac9, 0xfae2, + 0xfafc, 0xfb16, 0xfb3b, 0xfb56, 0xfb70, 0xfb82, 0xfba1, 0xfbb3, + 0xfbc6, 0xfbd9, 0xfbec, 0xfbff, 0xfc1c, 0xfc2e, 0xfc4f, 0xfc61, + 0xfc7d, 0xfc9c, 0xfcaf, 0xfcc2, 0xfcd7, 0xfd0d, 0xfd4f, 0xfd63, + 0xfd74, 0xfd8f, 0xfda8, 0xfdc2, 0xfdd4, 0xfde6, 0xfdfa, 0xfe0d, + 0xfe22, 0xfe43, 0xfe54, 0xfe8e, 0xfea0, 0xfeb2, 0xfed1, 0xfee3, + 0xfef5, 0xff0c, 0xff1e, 0xff30, 0xff4f, 0xff64, 0xff79, 0xff8a, + 0xff9e, 0xffba, 0xffe6, 0x000b, 0x0030, 0x004d, 0x006a, 0x0092, + // Entry 51C0 - 51FF + 0x00b0, 0x00cd, 0x00eb, 0x0108, 0x0125, 0x0143, 0x0161, 0x0188, + 0x01a5, 0x01c3, 0x01ea, 0x020d, 0x022a, 0x024f, 0x0274, 0x0291, + 0x02af, 0x02cd, 0x02eb, 0x0318, 0x0338, 0x0357, 0x0374, 0x0392, + 0x03af, 0x03d4, 0x03f3, 0x0410, 0x0437, 0x046c, 0x049b, 0x04ba, + 0x04e3, 0x0501, 0x051f, 0x053e, 0x0572, 0x058e, 0x05b1, 0x05db, + 0x0601, 0x061e, 0x063c, 0x0658, 0x066c, 0x068a, 0x06b1, 0x06ca, + 0x06f7, 0x070c, 0x071e, 0x073a, 0x074c, 0x0768, 0x078c, 0x079d, + 0x07af, 0x07c4, 0x07d7, 0x07e8, 0x0803, 0x0815, 0x0830, 0x084c, + // Entry 5200 - 523F + 0x0869, 0x088b, 0x08ad, 0x08d2, 0x08ed, 0x090a, 0x0927, 0x094d, + 0x0968, 0x098c, 0x09aa, 0x09cd, 0x09e8, 0x0a03, 0x0a27, 0x0a4c, + 0x0a69, 0x0a80, 0x0a9f, 0x0abe, 0x0ad8, 0x0af2, 0x0b04, 0x0b18, + 0x0b37, 0x0b5a, 0x0b76, 0x0b88, 0x0b9a, 0x0bac, 0x0bc7, 0x0bef, + 0x0c00, 0x0c1c, 0x0c32, 0x0c44, 0x0c56, 0x0c68, 0x0c7b, 0x0c8f, + 0x0ca0, 0x0cb2, 0x0cc3, 0x0cd5, 0x0ce6, 0x0cff, 0x0d11, 0x0d28, + 0x0d3d, 0x0d52, 0x0d65, 0x0d80, 0x0d9d, 0x0db9, 0x0dd6, 0x0e03, + 0x0e24, 0x0e38, 0x0e54, 0x0e78, 0x0e95, 0x0eae, 0x0ebf, 0x0ed1, + // Entry 5240 - 527F + 0x0ee4, 0x0f00, 0x0f22, 0x0f43, 0x0f57, 0x0f71, 0x0f83, 0x0f96, + 0x0fa7, 0x0fc0, 0x0fda, 0x0ff3, 0x1004, 0x101d, 0x102f, 0x1041, + 0x1063, 0x108e, 0x10a3, 0x10c1, 0x10e0, 0x1108, 0x1127, 0x1154, + 0x1172, 0x1191, 0x11b0, 0x11d9, 0x1201, 0x1232, 0x1259, 0x1278, + 0x128c, 0x129d, 0x12b0, 0x12c2, 0x12e4, 0x1307, 0x1329, 0x1364, + 0x1386, 0x139d, 0x13b8, 0x13d7, 0x1407, 0x141b, 0x1440, 0x1461, + 0x1483, 0x14a5, 0x14cc, 0x14ef, 0x1510, 0x1531, 0x1555, 0x1576, + 0x159a, 0x15c0, 0x15d1, 0x15e3, 0x15f5, 0x1607, 0x161b, 0x162c, + // Entry 5280 - 52BF + 0x1645, 0x165f, 0x1679, 0x1693, 0x16ac, 0x16c5, 0x16df, 0x16f8, + 0x1712, 0x172f, 0x1743, 0x1761, 0x177e, 0x179b, 0x17be, 0x17cf, + 0x17e1, 0x17f2, 0x1803, 0x1814, 0x182e, 0x1840, 0x185a, 0x1875, + 0x1891, 0x18ac, 0x18c8, 0x18e4, 0x1900, 0x191b, 0x1937, 0x1953, + 0x1970, 0x198c, 0x19a7, 0x19c2, 0x19dd, 0x19f8, 0x1a14, 0x1a2f, + 0x1a46, 0x1a58, 0x1a7b, 0x1a90, 0x1aa2, 0x1ab4, 0x1ac7, 0x1ae2, + 0x1aff, 0x1b1d, 0x1b39, 0x1b57, 0x1b74, 0x1b8f, 0x1bb1, 0x1bc4, + 0x1bd8, 0x1bec, 0x1bfe, 0x1c13, 0x1c48, 0x1c7d, 0x1c91, 0x1ca4, + // Entry 52C0 - 52FF + 0x1cb8, 0x1ccd, 0x1ce4, 0x1cf7, 0x1d12, 0x1d2e, 0x1d41, 0x1d5c, + 0x1d79, 0x1d98, 0x1db5, 0x1dd2, 0x1def, 0x1e11, 0x1e31, 0x1e4e, + 0x1e6b, 0x1e88, 0x1e9d, 0x1eb0, 0x1ec8, 0x1ef2, 0x1f06, 0x1f18, + 0x1f3c, 0x1f4f, 0x1f64, 0x1f75, 0x1f8b, 0x1f9d, 0x1fb0, 0x1fd2, + 0x1fe5, 0x1ff9, 0x200a, 0x2023, 0x2035, 0x2048, 0x205c, 0x206e, + 0x2083, 0x2095, 0x20a8, 0x20b9, 0x20d3, 0x20ed, 0x2107, 0x211d, + 0x212f, 0x2164, 0x217e, 0x2190, 0x21ab, 0x21c7, 0x21e3, 0x21ff, + 0x221c, 0x2237, 0x224a, 0x225c, 0x226d, 0x2283, 0x2294, 0x22aa, + // Entry 5300 - 533F + 0x22bc, 0x22ce, 0x22eb, 0x2306, 0x233b, 0x234c, 0x235f, 0x2371, + 0x2383, 0x2395, 0x23bb, 0x23cb, 0x23df, 0x23f3, 0x2422, 0x2446, + 0x2478, 0x2489, 0x249a, 0x24ab, 0x24c3, 0x24de, 0x24f8, 0x251f, + 0x254b, 0x2561, 0x257a, 0x259d, 0x25b0, 0x25c1, 0x25de, 0x2600, + 0x261c, 0x2635, 0x2649, 0x265c, 0x267c, 0x2698, 0x26a9, 0x26bf, + 0x26d0, 0x26ed, 0x2706, 0x2718, 0x273a, 0x275c, 0x2777, 0x2792, + 0x27ae, 0x27c9, 0x27ed, 0x2810, 0x2822, 0x2834, 0x2847, 0x2859, + 0x2873, 0x2892, 0x28ae, 0x28ca, 0x28e5, 0x2901, 0x2923, 0x293f, + // Entry 5340 - 537F + 0x295a, 0x2975, 0x2991, 0x29ac, 0x29c8, 0x29e3, 0x29ff, 0x2a1b, + 0x2a36, 0x2a52, 0x2a6f, 0x2a8a, 0x2aad, 0x2ac8, 0x2ae6, 0x2afa, + 0x2b16, 0x2b28, 0x2b42, 0x2b5d, 0x2b79, 0x2b96, 0x2ba9, 0x2bbc, + 0x2bd1, 0x2be5, 0x2bf7, 0x2c16, 0x2c28, 0x2c39, 0x2c4f, 0x2c72, + 0x2c84, 0x2c97, 0x2ca9, 0x2cba, 0x2cd3, 0x2ce5, 0x2cf7, 0x2d13, + 0x2d25, 0x2d38, 0x2d49, 0x2d5b, 0x2d75, 0x2d89, 0x2d9b, 0x2db5, + 0x2dd0, 0x2dea, 0x2e07, 0x2e33, 0x2e46, 0x2e62, 0x2e7e, 0x2e9b, + 0x2eb8, 0x2ee3, 0x2f00, 0x2f13, 0x2f25, 0x2f38, 0x2f55, 0x2f71, + // Entry 5380 - 53BF + 0x2f8d, 0x2fa8, 0x2fcd, 0x2fe8, 0x3002, 0x301e, 0x3038, 0x3053, + 0x3070, 0x3094, 0x30ba, 0x30d6, 0x30e9, 0x3106, 0x3118, 0x312a, + 0x313d, 0x315c, 0x317a, 0x31a4, 0x31c1, 0x31d4, 0x31f5, 0x3207, + 0x3221, 0x3233, 0x3251, 0x3271, 0x3290, 0x32af, 0x32cd, 0x32ed, + 0x330d, 0x332c, 0x334d, 0x336d, 0x338d, 0x33ac, 0x33cd, 0x33ee, + 0x340e, 0x342b, 0x3448, 0x3464, 0x3482, 0x34a0, 0x34bd, 0x34dd, + 0x34fd, 0x351f, 0x3540, 0x3561, 0x3581, 0x35a3, 0x35c5, 0x35e6, + 0x3606, 0x3626, 0x3648, 0x3669, 0x368a, 0x36aa, 0x36cc, 0x36fb, + // Entry 53C0 - 53FF + 0x371c, 0x373d, 0x375d, 0x377f, 0x37a1, 0x37c2, 0x37e2, 0x3802, + 0x3824, 0x3853, 0x3874, 0x3895, 0x38c5, 0x38f4, 0x3913, 0x3932, + 0x3953, 0x3981, 0x39a1, 0x39c1, 0x39f0, 0x3a1f, 0x3a4d, 0x3a7c, + 0x3aac, 0x3adc, 0x3b08, 0x3b37, 0x3b67, 0x3b97, 0x3bc5, 0x3bf4, + 0x3c23, 0x3c53, 0x3c83, 0x3cb4, 0x3cd7, 0x3cfc, 0x3d20, 0x3d44, + 0x3d67, 0x3d86, 0x3da5, 0x3dc6, 0x3de6, 0x3e13, 0x3e33, 0x3e60, + 0x3e80, 0x3ea0, 0x3ec0, 0x3ee0, 0x3f05, 0x3f2b, 0x3f52, 0x3f81, + 0x3fb1, 0x3fd6, 0x3ffc, 0x4029, 0x4058, 0x407e, 0x40a1, 0x40c9, + // Entry 5400 - 543F + 0x40f2, 0x4116, 0x413a, 0x4164, 0x418e, 0x41b7, 0x41e2, 0x420d, + 0x4237, 0x426b, 0x4294, 0x42bd, 0x42e9, 0x4316, 0x4336, 0x4352, + 0x436e, 0x4390, 0x43af, 0x43cd, 0x43eb, 0x440e, 0x442a, 0x4446, + 0x4462, 0x4480, 0x449c, 0x44ba, 0x44d6, 0x44fa, 0x4516, 0x4532, + 0x4550, 0x456b, 0x4586, 0x45a8, 0x45c5, 0x45e0, 0x45fb, 0x461c, + 0x463b, 0x4657, 0x4676, 0x46a1, 0x46c1, 0x46dd, 0x4703, 0x4729, + 0x4746, 0x4762, 0x477d, 0x4798, 0x47b3, 0x47cf, 0x47ef, 0x480a, + 0x4825, 0x483b, 0x485c, 0x4881, 0x48a5, 0x48cf, 0x48f3, 0x4918, + // Entry 5440 - 547F + 0x493c, 0x4961, 0x4985, 0x49a1, 0x49c0, 0x49e1, 0x4a0c, 0x4a35, + 0x4a52, 0x4a6d, 0x4a91, 0x4ab5, 0x4ad7, 0x4b02, 0x4b1e, 0x4b44, + 0x4b60, 0x4b7d, 0x4b98, 0x4bbb, 0x4bde, 0x4bfb, 0x4c18, 0x4c42, + 0x4c60, 0x4c8c, 0x4cad, 0x4cd4, 0x4cef, 0x4d1c, 0x4d36, 0x4d50, + 0x4d6d, 0x4d87, 0x4dac, 0x4dc2, 0x4dd8, 0x4dee, 0x4e04, 0x4e1a, + 0x4e30, 0x4e46, 0x4e6e, 0x4e84, 0x4ea7, 0x4ebd, 0x4ed3, 0x4ee9, + 0x4eff, 0x4f15, 0x4f2b, 0x4f41, 0x4f57, 0x4f6d, 0x4f83, 0x4f99, + 0x4faf, 0x4fc5, 0x4fdb, 0x4ff1, 0x5007, 0x501d, 0x5033, 0x5049, + // Entry 5480 - 54BF + 0x5068, 0x5088, 0x50b1, 0x50e3, 0x510a, 0x5120, 0x5136, 0x514c, + 0x5162, 0x5178, 0x518e, 0x51a4, 0x51ba, 0x51d0, 0x51e6, 0x51fc, + 0x521c, 0x523c, 0x5267, 0x5287, 0x52a6, 0x52c6, 0x52e5, 0x5304, + 0x5323, 0x5345, 0x535b, 0x5371, 0x5391, 0x53b0, 0x53d0, 0x53f5, + 0x5414, 0x5446, 0x5470, 0x548f, 0x54b1, 0x54c7, 0x54dd, 0x54fe, + 0x551b, 0x5537, 0x5553, 0x5581, 0x559e, 0x55b8, 0x55de, 0x5605, + 0x5629, 0x5649, 0x5668, 0x5686, 0x56a7, 0x56ca, 0x56ea, 0x5712, + 0x572f, 0x5753, 0x5774, 0x5794, 0x57af, 0x57d3, 0x57f0, 0x5808, + // Entry 54C0 - 54FF + 0x5823, 0x583f, 0x585b, 0x5876, 0x589b, 0x58bf, 0x58db, 0x58f7, + 0x5919, 0x593c, 0x5957, 0x5972, 0x5990, 0x59b0, 0x59cc, 0x59de, + 0x5a00, 0x5a28, 0x5a40, 0x5a58, 0x5a70, 0x5a88, 0x5aa0, 0x5ab9, + 0x5ad1, 0x5aea, 0x5b03, 0x5b1b, 0x5b33, 0x5b4b, 0x5b63, 0x5b7b, + 0x5b93, 0x5bab, 0x5bc3, 0x5bdc, 0x5bf4, 0x5c0c, 0x5c24, 0x5c3d, + 0x5c55, 0x5c6d, 0x5c85, 0x5c9d, 0x5cb5, 0x5ccd, 0x5ce5, 0x5cfd, + 0x5d15, 0x5d2d, 0x5d45, 0x5d5d, 0x5d75, 0x5d8d, 0x5da5, 0x5dbe, + 0x5dd6, 0x5dee, 0x5e06, 0x5e1e, 0x5e36, 0x5e4e, 0x5e66, 0x5e7e, + // Entry 5500 - 553F + 0x5e97, 0x5eaf, 0x5ec7, 0x5ee0, 0x5ef8, 0x5f11, 0x5f29, 0x5f41, + 0x5f5a, 0x5f72, 0x5f8a, 0x5fa2, 0x5fba, 0x5fd2, 0x5fea, 0x6002, + 0x601a, 0x6032, 0x604a, 0x6062, 0x607a, 0x6092, 0x60aa, 0x60c2, + 0x60da, 0x60f2, 0x610a, 0x6122, 0x613a, 0x6152, 0x616a, 0x6182, + 0x619a, 0x61b2, 0x61ca, 0x61e2, 0x61fa, 0x6212, 0x622a, 0x6243, + 0x625b, 0x6273, 0x628b, 0x62a3, 0x62bb, 0x62d3, 0x62ec, 0x6305, + 0x631e, 0x6336, 0x634e, 0x6366, 0x637e, 0x6396, 0x63ae, 0x63c6, + 0x63de, 0x63f7, 0x640f, 0x6427, 0x643f, 0x6457, 0x646f, 0x6487, + // Entry 5540 - 557F + 0x649f, 0x64b7, 0x64cf, 0x64e7, 0x64ff, 0x6517, 0x652f, 0x6547, + 0x655f, 0x6577, 0x658f, 0x65a7, 0x65bf, 0x65d7, 0x65ef, 0x6607, + 0x6620, 0x6638, 0x6650, 0x6668, 0x6680, 0x6698, 0x66b0, 0x66c8, + 0x66e0, 0x66f8, 0x6710, 0x6728, 0x6740, 0x6758, 0x6770, 0x6788, + 0x67a0, 0x67b8, 0x67d0, 0x67e8, 0x6801, 0x6819, 0x6831, 0x6849, + 0x6861, 0x687a, 0x6892, 0x68aa, 0x68c2, 0x68db, 0x68f3, 0x690b, + 0x6923, 0x693b, 0x6953, 0x696b, 0x6983, 0x699b, 0x69b3, 0x69cb, + 0x69e3, 0x69fb, 0x6a14, 0x6a2c, 0x6a44, 0x6a5d, 0x6a75, 0x6a8d, + // Entry 5580 - 55BF + 0x6aa6, 0x6abf, 0x6ad8, 0x6af1, 0x6b0a, 0x6b23, 0x6b3c, 0x6b55, + 0x6b6e, 0x6b86, 0x6b9e, 0x6bb7, 0x6bcf, 0x6be7, 0x6c00, 0x6c18, + 0x6c30, 0x6c48, 0x6c60, 0x6c78, 0x6c90, 0x6ca8, 0x6cc0, 0x6cd8, + 0x6cf0, 0x6d08, 0x6d20, 0x6d38, 0x6d51, 0x6d6a, 0x6d83, 0x6d9c, + 0x6db5, 0x6dce, 0x6de7, 0x6e00, 0x6e18, 0x6e30, 0x6e48, 0x6e60, + 0x6e78, 0x6e90, 0x6ea8, 0x6ec0, 0x6ed9, 0x6ef1, 0x6f0a, 0x6f22, + 0x6f3a, 0x6f52, 0x6f6a, 0x6f82, 0x6f9a, 0x6fb2, 0x6fcb, 0x6fe3, + 0x6ffc, 0x7014, 0x702c, 0x7044, 0x705d, 0x7075, 0x708d, 0x70a5, + // Entry 55C0 - 55FF + 0x70bd, 0x70d5, 0x70ed, 0x7105, 0x711d, 0x7136, 0x714e, 0x7166, + 0x717e, 0x7196, 0x71ae, 0x71c6, 0x71df, 0x71f7, 0x720f, 0x7227, + 0x723f, 0x7258, 0x7270, 0x7288, 0x72a0, 0x72b8, 0x72d0, 0x72e8, + 0x7300, 0x7318, 0x7330, 0x7348, 0x7360, 0x7378, 0x7391, 0x73a9, + 0x73c1, 0x73d9, 0x73f1, 0x7409, 0x7421, 0x7439, 0x7451, 0x746a, + 0x7482, 0x749a, 0x74b2, 0x74ca, 0x74e2, 0x74fa, 0x7512, 0x752a, + 0x7542, 0x755a, 0x7573, 0x758b, 0x75a3, 0x75bb, 0x75d3, 0x75eb, + 0x7603, 0x761c, 0x7634, 0x764d, 0x7665, 0x767d, 0x7695, 0x76ad, + // Entry 5600 - 563F + 0x76c5, 0x76dd, 0x76f5, 0x770e, 0x7726, 0x773f, 0x7757, 0x7770, + 0x7788, 0x77a0, 0x77b8, 0x77d0, 0x77e9, 0x7802, 0x781b, 0x7833, + 0x784b, 0x7863, 0x787b, 0x7893, 0x78ab, 0x78c3, 0x78db, 0x78f4, + 0x790c, 0x7925, 0x793e, 0x7956, 0x796e, 0x7986, 0x799e, 0x79b7, + 0x79cf, 0x79e7, 0x79ff, 0x7a17, 0x7a2f, 0x7a47, 0x7a5f, 0x7a77, + 0x7a8f, 0x7aa8, 0x7ac0, 0x7ad8, 0x7af0, 0x7b08, 0x7b20, 0x7b38, + 0x7b51, 0x7b69, 0x7b81, 0x7b99, 0x7bb1, 0x7bc9, 0x7be1, 0x7bf9, + 0x7c11, 0x7c29, 0x7c41, 0x7c5a, 0x7c72, 0x7c8b, 0x7ca3, 0x7cbb, + // Entry 5640 - 567F + 0x7cd3, 0x7ceb, 0x7d03, 0x7d1b, 0x7d34, 0x7d4c, 0x7d64, 0x7d7d, + 0x7d95, 0x7dad, 0x7dc5, 0x7ddd, 0x7df5, 0x7e0d, 0x7e25, 0x7e3d, + 0x7e55, 0x7e6d, 0x7e85, 0x7e9d, 0x7eb5, 0x7ecd, 0x7ee5, 0x7efe, + 0x7f16, 0x7f2e, 0x7f46, 0x7f5e, 0x7f76, 0x7f8e, 0x7fa6, 0x7fbf, + 0x7fd7, 0x7fef, 0x8007, 0x801f, 0x8038, 0x8050, 0x8069, 0x8081, + 0x809a, 0x80b2, 0x80ca, 0x80e2, 0x80fa, 0x8112, 0x812a, 0x8142, + 0x815a, 0x8172, 0x818a, 0x81a2, 0x81ba, 0x81d2, 0x81ea, 0x8203, + 0x821b, 0x8233, 0x824b, 0x8263, 0x827c, 0x8294, 0x82ac, 0x82c4, + // Entry 5680 - 56BF + 0x82dd, 0x82f6, 0x830e, 0x8326, 0x833f, 0x8357, 0x836f, 0x8387, + 0x839f, 0x83b7, 0x83cf, 0x83e7, 0x8400, 0x8418, 0x8430, 0x8449, + 0x8462, 0x847b, 0x8494, 0x84ad, 0x84c6, 0x84df, 0x84f8, 0x8510, + 0x8528, 0x8540, 0x8559, 0x8571, 0x858a, 0x85a2, 0x85bb, 0x85d3, + 0x85eb, 0x8603, 0x861b, 0x8633, 0x864c, 0x8664, 0x867c, 0x8695, + 0x86ad, 0x86c5, 0x86dd, 0x86f5, 0x870e, 0x8726, 0x873e, 0x8756, + 0x876f, 0x8787, 0x879f, 0x87b8, 0x87d1, 0x87e9, 0x8801, 0x8819, + 0x8831, 0x8849, 0x8861, 0x8879, 0x8892, 0x88aa, 0x88c2, 0x88da, + // Entry 56C0 - 56FF + 0x88f2, 0x890a, 0x8922, 0x893a, 0x8952, 0x896a, 0x8982, 0x899a, + 0x89b2, 0x89ca, 0x89e2, 0x89fa, 0x8a12, 0x8a2a, 0x8a42, 0x8a5a, + 0x8a72, 0x8a8a, 0x8aa2, 0x8abb, 0x8ad4, 0x8aec, 0x8b04, 0x8b1c, + 0x8b34, 0x8b4c, 0x8b64, 0x8b7c, 0x8b95, 0x8bad, 0x8bc5, 0x8bdd, + 0x8bf5, 0x8c0d, 0x8c25, 0x8c3d, 0x8c55, 0x8c6e, 0x8c86, 0x8c9f, + 0x8cb7, 0x8cd0, 0x8ce8, 0x8d00, 0x8d19, 0x8d31, 0x8d49, 0x8d61, + 0x8d79, 0x8d91, 0x8daa, 0x8dc3, 0x8ddc, 0x8df5, 0x8e0e, 0x8e28, + 0x8e41, 0x8e5a, 0x8e73, 0x8e8c, 0x8ea5, 0x8ebe, 0x8ed7, 0x8ef0, + // Entry 5700 - 573F + 0x8f09, 0x8f22, 0x8f3b, 0x8f54, 0x8f6e, 0x8f87, 0x8fa0, 0x8fb9, + 0x8fd2, 0x8feb, 0x9004, 0x901d, 0x9036, 0x904f, 0x9068, 0x9081, + 0x909a, 0x90b3, 0x90cd, 0x90e6, 0x9100, 0x9119, 0x9132, 0x914b, + 0x9164, 0x917d, 0x9196, 0x91af, 0x91c9, 0x91e2, 0x91fb, 0x9214, + 0x922d, 0x9247, 0x925f, 0x9278, 0x9290, 0x92a8, 0x92c0, 0x92d8, + 0x92f1, 0x9309, 0x9322, 0x933b, 0x9354, 0x936d, 0x9386, 0x939f, + 0x93b7, 0x93cf, 0x93e7, 0x93ff, 0x9418, 0x9431, 0x944a, 0x9462, + 0x947a, 0x9492, 0x94aa, 0x94c2, 0x94da, 0x94f2, 0x950a, 0x9522, + // Entry 5740 - 577F + 0x953b, 0x9553, 0x956c, 0x9584, 0x959c, 0x95b4, 0x95cc, 0x95e5, + 0x95fd, 0x9616, 0x962e, 0x9646, 0x965e, 0x9676, 0x968f, 0x96a7, + 0x96c0, 0x96d8, 0x96f0, 0x9708, 0x9721, 0x9739, 0x9751, 0x9769, + 0x9782, 0x979b, 0x97b4, 0x97cd, 0x97e5, 0x97fd, 0x9815, 0x982d, + 0x9845, 0x985d, 0x9875, 0x988d, 0x98a5, 0x98bd, 0x98d5, 0x98ed, + 0x9905, 0x991d, 0x9936, 0x994f, 0x9967, 0x997f, 0x9998, 0x99b0, + 0x99c8, 0x99e1, 0x99f9, 0x9a11, 0x9a29, 0x9a41, 0x9a59, 0x9a71, + 0x9a89, 0x9aa1, 0x9ab9, 0x9ad1, 0x9ae9, 0x9b01, 0x9b19, 0x9b31, + // Entry 5780 - 57BF + 0x9b49, 0x9b61, 0x9b79, 0x9b92, 0x9baa, 0x9bc3, 0x9bdc, 0x9bf4, + 0x9c0c, 0x9c24, 0x9c3c, 0x9c54, 0x9c6c, 0x9c84, 0x9c9d, 0x9cb5, + 0x9ccd, 0x9ce5, 0x9cfd, 0x9d15, 0x9d2d, 0x9d46, 0x9d5e, 0x9d76, + 0x9d8e, 0x9da6, 0x9dbe, 0x9dd6, 0x9dee, 0x9e06, 0x9e1e, 0x9e36, + 0x9e4e, 0x9e66, 0x9e7e, 0x9e96, 0x9eae, 0x9ec7, 0x9edf, 0x9ef7, + 0x9f0f, 0x9f27, 0x9f40, 0x9f58, 0x9f70, 0x9f88, 0x9fa0, 0x9fb8, + 0x9fd0, 0x9fe8, 0xa000, 0xa019, 0xa032, 0xa04a, 0xa062, 0xa07a, + 0xa093, 0xa0ab, 0xa0c3, 0xa0db, 0xa0f3, 0xa10b, 0xa123, 0xa13b, + // Entry 57C0 - 57FF + 0xa153, 0xa16b, 0xa184, 0xa19d, 0xa1b5, 0xa1cd, 0xa1e5, 0xa1fd, + 0xa215, 0xa22d, 0xa245, 0xa25d, 0xa275, 0xa28e, 0xa2a6, 0xa2be, + 0xa2d6, 0xa2ee, 0xa306, 0xa31e, 0xa336, 0xa34e, 0xa366, 0xa37e, + 0xa396, 0xa3ae, 0xa3c6, 0xa3de, 0xa3f7, 0xa40f, 0xa427, 0xa43f, + 0xa457, 0xa470, 0xa488, 0xa4a1, 0xa4b9, 0xa4d2, 0xa4ea, 0xa502, + 0xa51b, 0xa533, 0xa54b, 0xa563, 0xa57b, 0xa593, 0xa5ac, 0xa5c4, + 0xa5dc, 0xa5f4, 0xa60c, 0xa624, 0xa63c, 0xa654, 0xa66c, 0xa684, + 0xa69c, 0xa6b4, 0xa6cc, 0xa6e4, 0xa6fc, 0xa714, 0xa72c, 0xa745, + // Entry 5800 - 583F + 0xa75d, 0xa776, 0xa78e, 0xa7a6, 0xa7be, 0xa7d6, 0xa7ee, 0xa806, + 0xa81e, 0xa836, 0xa84e, 0xa867, 0xa880, 0xa898, 0xa8b0, 0xa8c8, + 0xa8e0, 0xa8f8, 0xa910, 0xa928, 0xa940, 0xa958, 0xa970, 0xa988, + 0xa9a0, 0xa9b8, 0xa9d0, 0xa9e8, 0xaa00, 0xaa18, 0xaa31, 0xaa49, + 0xaa61, 0xaa79, 0xaa91, 0xaaa9, 0xaac1, 0xaada, 0xaaf2, 0xab0a, + 0xab22, 0xab3b, 0xab53, 0xab6b, 0xab83, 0xab9b, 0xabb3, 0xabcb, + 0xabe3, 0xabfb, 0xac13, 0xac2b, 0xac43, 0xac5c, 0xac75, 0xac8e, + 0xaca7, 0xacc0, 0xacd9, 0xacf2, 0xad0b, 0xad24, 0xad3c, 0xad55, + // Entry 5840 - 587F + 0xad6d, 0xad85, 0xad9d, 0xadb5, 0xadcd, 0xade6, 0xadff, 0xae17, + 0xae2f, 0xae47, 0xae5f, 0xae78, 0xae91, 0xaeaa, 0xaec2, 0xaedb, + 0xaef4, 0xaf0c, 0xaf24, 0xaf3c, 0xaf54, 0xaf6c, 0xaf84, 0xaf9c, + 0xafb4, 0xafcd, 0xafe6, 0xafff, 0xb018, 0xb031, 0xb04a, 0xb063, + 0xb07c, 0xb095, 0xb0ae, 0xb0c7, 0xb0e0, 0xb0f8, 0xb110, 0xb128, + 0xb141, 0xb159, 0xb171, 0xb189, 0xb1a1, 0xb1b9, 0xb1d2, 0xb1ea, + 0xb203, 0xb21b, 0xb234, 0xb24c, 0xb265, 0xb27d, 0xb295, 0xb2ae, + 0xb2c6, 0xb2de, 0xb2f6, 0xb30e, 0xb327, 0xb33f, 0xb357, 0xb36f, + // Entry 5880 - 58BF + 0xb388, 0xb3a0, 0xb3b8, 0xb3d0, 0xb3e9, 0xb401, 0xb419, 0xb431, + 0xb449, 0xb461, 0xb479, 0xb492, 0xb4aa, 0xb4c3, 0xb4db, 0xb4f3, + 0xb50b, 0xb523, 0xb53c, 0xb554, 0xb56c, 0xb584, 0xb59d, 0xb5b5, + 0xb5ce, 0xb5e6, 0xb5fe, 0xb616, 0xb62e, 0xb646, 0xb65e, 0xb677, + 0xb68f, 0xb6a7, 0xb6bf, 0xb6d7, 0xb6ef, 0xb708, 0xb721, 0xb739, + 0xb751, 0xb76a, 0xb782, 0xb79a, 0xb7b3, 0xb7cb, 0xb7e4, 0xb7fc, + 0xb814, 0xb82c, 0xb844, 0xb85c, 0xb874, 0xb88c, 0xb8a4, 0xb8bc, + 0xb8d5, 0xb8ee, 0xb907, 0xb920, 0xb938, 0xb951, 0xb96a, 0xb982, + // Entry 58C0 - 58FF + 0xb99b, 0xb9b3, 0xb9cc, 0xb9e4, 0xb9fc, 0xba14, 0xba2c, 0xba44, + 0xba5c, 0xba74, 0xba8c, 0xbaa4, 0xbabc, 0xbad5, 0xbaee, 0xbb07, + 0xbb20, 0xbb39, 0xbb52, 0xbb6b, 0xbb84, 0xbb9d, 0xbbb5, 0xbbce, + 0xbbe7, 0xbc00, 0xbc19, 0xbc32, 0xbc4b, 0xbc64, 0xbc7d, 0xbc96, + 0xbcaf, 0xbcc8, 0xbce1, 0xbcfa, 0xbd13, 0xbd2c, 0xbd46, 0xbd60, + 0xbd79, 0xbd92, 0xbdab, 0xbdc4, 0xbddd, 0xbdf6, 0xbe0f, 0xbe28, + 0xbe41, 0xbe5a, 0xbe73, 0xbe8c, 0xbea5, 0xbebe, 0xbed7, 0xbef0, + 0xbf09, 0xbf22, 0xbf3b, 0xbf54, 0xbf6d, 0xbf86, 0xbf9f, 0xbfb8, + // Entry 5900 - 593F + 0xbfd1, 0xbfea, 0xc003, 0xc01c, 0xc035, 0xc04e, 0xc067, 0xc080, + 0xc099, 0xc0b2, 0xc0cb, 0xc0e5, 0xc0fe, 0xc117, 0xc130, 0xc149, + 0xc162, 0xc17b, 0xc194, 0xc1ad, 0xc1c6, 0xc1df, 0xc1f8, 0xc211, + 0xc22a, 0xc243, 0xc25c, 0xc275, 0xc28f, 0xc2a8, 0xc2c1, 0xc2da, + 0xc2f3, 0xc30c, 0xc325, 0xc33e, 0xc357, 0xc370, 0xc389, 0xc3a2, + 0xc3bb, 0xc3d4, 0xc3ee, 0xc407, 0xc420, 0xc43a, 0xc453, 0xc46c, + 0xc485, 0xc49e, 0xc4b8, 0xc4d1, 0xc4eb, 0xc505, 0xc51e, 0xc537, + 0xc550, 0xc569, 0xc582, 0xc59b, 0xc5b4, 0xc5cd, 0xc5e6, 0xc5ff, + // Entry 5940 - 597F + 0xc618, 0xc631, 0xc64a, 0xc663, 0xc67c, 0xc695, 0xc6ae, 0xc6c7, + 0xc6e0, 0xc6f9, 0xc713, 0xc72d, 0xc747, 0xc760, 0xc779, 0xc792, + 0xc7ab, 0xc7c4, 0xc7dd, 0xc7f6, 0xc80f, 0xc828, 0xc841, 0xc85a, + 0xc873, 0xc88c, 0xc8a5, 0xc8be, 0xc8d7, 0xc8f0, 0xc909, 0xc922, + 0xc93b, 0xc954, 0xc96d, 0xc986, 0xc99f, 0xc9b8, 0xc9d1, 0xc9ea, + 0xca03, 0xca1c, 0xca35, 0xca4e, 0xca68, 0xca81, 0xca9b, 0xcab4, + 0xcacd, 0xcae7, 0xcb00, 0xcb1a, 0xcb33, 0xcb4d, 0xcb66, 0xcb7f, + 0xcb99, 0xcbb3, 0xcbcd, 0xcbe6, 0xcc00, 0xcc1a, 0xcc33, 0xcc4c, + // Entry 5980 - 59BF + 0xcc66, 0xcc80, 0xcc9a, 0xccb3, 0xcccc, 0xcce5, 0xccff, 0xcd19, + 0xcd32, 0xcd4b, 0xcd64, 0xcd7d, 0xcd96, 0xcdb0, 0xcdc9, 0xcde2, + 0xcdfb, 0xce14, 0xce2d, 0xce46, 0xce5f, 0xce78, 0xce91, 0xceaa, + 0xcec4, 0xcedd, 0xcef6, 0xcf0f, 0xcf28, 0xcf41, 0xcf5a, 0xcf73, + 0xcf8c, 0xcfa5, 0xcfbe, 0xcfd8, 0xcff1, 0xd00a, 0xd023, 0xd03c, + 0xd055, 0xd06e, 0xd087, 0xd0a0, 0xd0b9, 0xd0d2, 0xd0eb, 0xd104, + 0xd11d, 0xd136, 0xd14f, 0xd168, 0xd181, 0xd19a, 0xd1b3, 0xd1cc, + 0xd1e5, 0xd1fe, 0xd217, 0xd230, 0xd249, 0xd262, 0xd27b, 0xd294, + // Entry 59C0 - 59FF + 0xd2ad, 0xd2c6, 0xd2df, 0xd2f8, 0xd311, 0xd32a, 0xd343, 0xd35c, + 0xd375, 0xd38e, 0xd3a7, 0xd3c0, 0xd3d9, 0xd3f2, 0xd40b, 0xd424, + 0xd43d, 0xd456, 0xd46f, 0xd488, 0xd4a1, 0xd4ba, 0xd4d3, 0xd4ec, + 0xd505, 0xd51e, 0xd537, 0xd550, 0xd569, 0xd582, 0xd59b, 0xd5b4, + 0xd5cd, 0xd5e6, 0xd5ff, 0xd618, 0xd631, 0xd64a, 0xd663, 0xd67d, + 0xd697, 0xd6b0, 0xd6c9, 0xd6e2, 0xd6fb, 0xd714, 0xd72e, 0xd747, + 0xd760, 0xd77a, 0xd793, 0xd7ac, 0xd7c5, 0xd7de, 0xd7f7, 0xd810, + 0xd82a, 0xd843, 0xd85d, 0xd876, 0xd88f, 0xd8a8, 0xd8c1, 0xd8da, + // Entry 5A00 - 5A3F + 0xd8f3, 0xd90c, 0xd925, 0xd93e, 0xd957, 0xd970, 0xd98a, 0xd9a3, + 0xd9bc, 0xd9d5, 0xd9ee, 0xda07, 0xda20, 0xda39, 0xda52, 0xda6b, + 0xda84, 0xda9d, 0xdab6, 0xdacf, 0xdae8, 0xdb01, 0xdb1a, 0xdb33, + 0xdb4c, 0xdb65, 0xdb7e, 0xdb97, 0xdbb0, 0xdbc9, 0xdbe2, 0xdbfb, + 0xdc14, 0xdc2d, 0xdc46, 0xdc5f, 0xdc78, 0xdc91, 0xdcaa, 0xdcc3, + 0xdcdc, 0xdcf5, 0xdd0e, 0xdd27, 0xdd40, 0xdd59, 0xdd72, 0xdd8c, + 0xdda5, 0xddbe, 0xddd7, 0xddf0, 0xde09, 0xde22, 0xde3b, 0xde54, + 0xde6d, 0xde86, 0xde9f, 0xdeb8, 0xded1, 0xdeea, 0xdf03, 0xdf1c, + // Entry 5A40 - 5A7F + 0xdf35, 0xdf4e, 0xdf67, 0xdf80, 0xdf99, 0xdfb2, 0xdfcc, 0xdfe5, + 0xdffe, 0xe017, 0xe030, 0xe049, 0xe063, 0xe07c, 0xe095, 0xe0ae, + 0xe0c7, 0xe0e0, 0xe0fa, 0xe113, 0xe12c, 0xe145, 0xe15e, 0xe177, + 0xe190, 0xe1a9, 0xe1c2, 0xe1db, 0xe1f4, 0xe20e, 0xe227, 0xe240, + 0xe259, 0xe272, 0xe28b, 0xe2a4, 0xe2bd, 0xe2d6, 0xe2ef, 0xe308, + 0xe321, 0xe33a, 0xe353, 0xe36c, 0xe385, 0xe39e, 0xe3b7, 0xe3d0, + 0xe3e9, 0xe402, 0xe41c, 0xe435, 0xe44e, 0xe468, 0xe482, 0xe49c, + 0xe4b5, 0xe4ce, 0xe4e7, 0xe500, 0xe51a, 0xe534, 0xe54e, 0xe567, + // Entry 5A80 - 5ABF + 0xe580, 0xe599, 0xe5b2, 0xe5cb, 0xe5e4, 0xe5fd, 0xe616, 0xe62f, + 0xe648, 0xe661, 0xe67a, 0xe693, 0xe6ac, 0xe6c5, 0xe6de, 0xe6f7, + 0xe710, 0xe729, 0xe742, 0xe75b, 0xe774, 0xe78d, 0xe7a7, 0xe7c0, + 0xe7d9, 0xe7f2, 0xe80b, 0xe824, 0xe83e, 0xe857, 0xe870, 0xe889, + 0xe8a2, 0xe8bc, 0xe8d5, 0xe8ee, 0xe907, 0xe921, 0xe93a, 0xe953, + 0xe96c, 0xe985, 0xe99e, 0xe9b7, 0xe9d0, 0xe9e9, 0xea02, 0xea1b, + 0xea35, 0xea4e, 0xea70, 0xea8a, 0xeaa3, 0xeabc, 0xead5, 0xeaef, + 0xeb08, 0xeb21, 0xeb3a, 0xeb53, 0xeb6c, 0xeb85, 0xeba4, 0xebbd, + // Entry 5AC0 - 5AFF + 0xebd6, 0xebef, 0xec08, 0xec21, 0xec3a, 0xec53, 0xec6c, 0xec85, + 0xec9e, 0xecb7, 0xecd0, 0xece9, 0xed02, 0xed1b, 0xed34, 0xed61, + 0xed8d, 0xeda6, 0xedbf, 0xedd8, 0xedf1, 0xee0a, 0xee23, 0xee3c, + 0xee55, 0xee6e, 0xee87, 0xeea0, 0xeeb9, 0xeed2, 0xeeeb, 0xef04, + 0xef1d, 0xef36, 0xef4f, 0xef68, 0xef81, 0xef9a, 0xefb3, 0xefcc, + 0xefe5, 0xeffe, 0xf017, 0xf030, 0xf049, 0xf062, 0xf07b, 0xf094, + 0xf0ad, 0xf0c6, 0xf0df, 0xf0f8, 0xf111, 0xf12a, 0xf143, 0xf15c, + 0xf175, 0xf18f, 0xf1a8, 0xf1c1, 0xf1da, 0xf1f3, 0xf20c, 0xf225, + // Entry 5B00 - 5B3F + 0xf23e, 0xf258, 0xf271, 0xf28a, 0xf2a3, 0xf2bc, 0xf2d5, 0xf2ee, + 0xf307, 0xf320, 0xf339, 0xf352, 0xf36b, 0xf384, 0xf39d, 0xf3b6, + 0xf3cf, 0xf3e8, 0xf401, 0xf41a, 0xf433, 0xf44c, 0xf465, 0xf47e, + 0xf497, 0xf4b0, 0xf4c9, 0xf4e2, 0xf4fb, 0xf514, 0xf52d, 0xf546, + 0xf55f, 0xf578, 0xf591, 0xf5aa, 0xf5c3, 0xf5dc, 0xf5f5, 0xf60e, + 0xf627, 0xf640, 0xf659, 0xf672, 0xf68b, 0xf6a4, 0xf6bd, 0xf6d6, + 0xf6ef, 0xf708, 0xf721, 0xf73a, 0xf753, 0xf76c, 0xf785, 0xf79e, + 0xf7b7, 0xf7d0, 0xf7e9, 0xf802, 0xf81b, 0xf834, 0xf84d, 0xf866, + // Entry 5B40 - 5B7F + 0xf87f, 0xf898, 0xf8b1, 0xf8ca, 0xf8e3, 0xf8fc, 0xf915, 0xf92e, + 0xf94d, 0xf96b, 0xf994, 0xf9ba, 0xf9d7, 0xf9f6, 0xfa14, 0xfa31, + 0xfa53, 0xfa7e, 0xfaa6, 0xfac5, 0xfae3, 0xfafe, 0xfb1b, 0xfb37, + 0xfb56, 0xfb72, 0xfb8e, 0xfbad, 0xfbc8, 0xfbe0, 0xfbff, 0xfc19, + 0xfc35, 0xfc53, 0xfc6f, 0xfc8a, 0xfca8, 0xfcc4, 0xfce5, 0xfd03, + 0xfd21, 0xfd42, 0xfd60, 0xfd79, 0xfd94, 0xfdb5, 0xfdd1, 0xfdea, + 0xfe0a, 0xfe2b, 0xfe43, 0xfe60, 0xfe79, 0xfe91, 0xfeab, 0xfec5, + 0xfee0, 0xfefe, 0xff19, 0xff31, 0xff52, 0xff6b, 0xff87, 0xffa0, + // Entry 5B80 - 5BBF + 0xffbb, 0xffd4, 0xffec, 0x0005, 0x001d, 0x003b, 0x0056, 0x006f, + 0x0092, 0x00b6, 0x00d1, 0x00ed, 0x0109, 0x0123, 0x013d, 0x0156, + 0x0171, 0x018a, 0x01a5, 0x01bd, 0x01d6, 0x01f1, 0x020a, 0x0222, + 0x023a, 0x0253, 0x026b, 0x0282, 0x029a, 0x02b2, 0x02cb, 0x02e6, + 0x0307, 0x0320, 0x033b, 0x0359, 0x0378, 0x0392, 0x03ad, 0x03c9, + 0x03e1, 0x03fc, 0x041e, 0x0441, 0x0462, 0x047f, 0x049f, 0x04b7, + 0x04d4, 0x04f2, 0x0510, 0x0530, 0x0551, 0x056f, 0x058a, 0x05a7, + 0x05c3, 0x05de, 0x05f8, 0x0611, 0x0632, 0x0650, 0x066a, 0x0686, + // Entry 5BC0 - 5BFF + 0x069f, 0x06b8, 0x06d3, 0x06f4, 0x070f, 0x0727, 0x0742, 0x075f, + 0x077b, 0x0797, 0x07b7, 0x07d0, 0x07ea, 0x0802, 0x081d, 0x083d, + 0x085a, 0x0872, 0x088d, 0x08a6, 0x08bd, 0x08d5, 0x08ee, 0x090f, + 0x0927, 0x093f, 0x095c, 0x0976, 0x0994, 0x09ae, 0x09c9, 0x09e6, + 0x0a00, 0x0a26, 0x0a43, 0x0a5d, 0x0a79, 0x0a94, 0x0aba, 0x0ad9, + 0x0af2, 0x0b0d, 0x0b2b, 0x0b45, 0x0b5e, 0x0b7a, 0x0b93, 0x0bac, + 0x0bc7, 0x0bdf, 0x0bf8, 0x0c12, 0x0c2e, 0x0c48, 0x0c65, 0x0c7f, + 0x0ca0, 0x0cb9, 0x0cd6, 0x0cf5, 0x0d0e, 0x0d29, 0x0d41, 0x0d5e, + // Entry 5C00 - 5C3F + 0x0d7a, 0x0d97, 0x0db3, 0x0dcd, 0x0de5, 0x0dff, 0x0e17, 0x0e31, + 0x0e4a, 0x0e67, 0x0e82, 0x0e99, 0x0eb3, 0x0ecb, 0x0ee7, 0x0f06, + 0x0f21, 0x0f39, 0x0f52, 0x0f6c, 0x0f87, 0x0f9e, 0x0fb6, 0x0fcf, + 0x0fe8, 0x1000, 0x101c, 0x1035, 0x104e, 0x106f, 0x1088, 0x10a1, + 0x10be, 0x10d6, 0x10ef, 0x1109, 0x1124, 0x113c, 0x1157, 0x1172, + 0x118e, 0x11a8, 0x11c1, 0x11e1, 0x11fb, 0x1215, 0x122e, 0x1247, + 0x1260, 0x127c, 0x129c, 0x12b5, 0x12cd, 0x12e5, 0x12fd, 0x1315, + 0x132d, 0x1346, 0x135e, 0x1376, 0x138f, 0x13a9, 0x13c2, 0x13dc, + // Entry 5C40 - 5C7F + 0x13f6, 0x1413, 0x142c, 0x1446, 0x1460, 0x1479, 0x1493, 0x14b2, + 0x14cb, 0x14e6, 0x14ff, 0x1517, 0x152f, 0x154b, 0x1564, 0x157c, + 0x1596, 0x15b0, 0x15cc, 0x15e5, 0x1600, 0x1618, 0x1634, 0x1654, + 0x1670, 0x1687, 0x16a0, 0x16bb, 0x16d9, 0x16f2, 0x170e, 0x1729, + 0x1742, 0x175b, 0x1776, 0x178f, 0x17aa, 0x17c2, 0x17da, 0x17f5, + 0x180e, 0x1828, 0x1841, 0x185c, 0x1874, 0x188e, 0x18a7, 0x18c0, + 0x18da, 0x18f7, 0x1912, 0x192d, 0x1946, 0x195e, 0x1979, 0x1992, + 0x19aa, 0x19c5, 0x19df, 0x19fb, 0x1a14, 0x1a2c, 0x1a45, 0x1a5e, + // Entry 5C80 - 5CBF + 0x1a78, 0x1a91, 0x1aa9, 0x1ac4, 0x1adf, 0x1af8, 0x1b11, 0x1b29, + 0x1b42, 0x1b5b, 0x1b77, 0x1b91, 0x1baa, 0x1bc5, 0x1bdf, 0x1bf9, + 0x1c14, 0x1c2b, 0x1c47, 0x1c5f, 0x1c77, 0x1c8f, 0x1ca7, 0x1cc1, + 0x1cdb, 0x1cf1, 0x1d09, 0x1d20, 0x1d39, 0x1d53, 0x1d6c, 0x1d83, + 0x1d9b, 0x1db4, 0x1dcc, 0x1de3, 0x1dfc, 0x1e14, 0x1e2d, 0x1e45, + 0x1e62, 0x1e79, 0x1e92, 0x1eb1, 0x1ec9, 0x1ee1, 0x1efa, 0x1f13, + 0x1f2d, 0x1f45, 0x1f5d, 0x1f76, 0x1f8e, 0x1fa6, 0x1fbe, 0x1fd9, + 0x1ff2, 0x200b, 0x2023, 0x203c, 0x2056, 0x206e, 0x2086, 0x20a3, + // Entry 5CC0 - 5CFF + 0x20bc, 0x20d4, 0x20ed, 0x2105, 0x2120, 0x2139, 0x2152, 0x216d, + 0x2186, 0x21a0, 0x21bb, 0x21d5, 0x21ee, 0x2206, 0x2222, 0x223b, + 0x2255, 0x2272, 0x228e, 0x22a6, 0x22bf, 0x22db, 0x22f4, 0x2313, + 0x232b, 0x2343, 0x2365, 0x2389, 0x23a2, 0x23bc, 0x23d5, 0x23ef, + 0x2406, 0x2420, 0x243a, 0x2454, 0x246f, 0x2489, 0x24a2, 0x24bb, + 0x24d2, 0x24eb, 0x2507, 0x2524, 0x2540, 0x255a, 0x2573, 0x258c, + 0x25a5, 0x25be, 0x25d6, 0x25ef, 0x2607, 0x2627, 0x263f, 0x2659, + 0x2673, 0x268d, 0x26a6, 0x26c1, 0x26d9, 0x26f3, 0x270d, 0x2725, + // Entry 5D00 - 5D3F + 0x273d, 0x2759, 0x2772, 0x2789, 0x27a2, 0x27bb, 0x27d4, 0x27f0, + 0x2810, 0x2829, 0x2842, 0x285b, 0x2874, 0x288c, 0x28a5, 0x28c0, + 0x28d9, 0x28f1, 0x290a, 0x2924, 0x293c, 0x2955, 0x296e, 0x2989, + 0x29a3, 0x29c1, 0x29dd, 0x29f5, 0x2a0e, 0x2a24, 0x2a3c, 0x2a52, + 0x2a68, 0x2a80, 0x2a9e, 0x2ab6, 0x2ace, 0x2af0, 0x2b09, 0x2b22, + 0x2b3c, 0x2b56, 0x2b77, 0x2b95, 0x2bad, 0x2bc5, 0x2bde, 0x2bf7, + 0x2c16, 0x2c2e, 0x2c46, 0x2c5e, 0x2c76, 0x2c8d, 0x2ca4, 0x2cbd, + 0x2cd5, 0x2cf0, 0x2d08, 0x2d20, 0x2d39, 0x2d57, 0x2d6e, 0x2d85, + // Entry 5D40 - 5D7F + 0x2d9d, 0x2db4, 0x2dcc, 0x2de3, 0x2dfb, 0x2e13, 0x2e2a, 0x2e42, + 0x2e5a, 0x2e72, 0x2e8b, 0x2ea2, 0x2eb8, 0x2ecf, 0x2ee6, 0x2efe, + 0x2f16, 0x2f2e, 0x2f45, 0x2f5d, 0x2f76, 0x2f90, 0x2fa8, 0x2fc1, + 0x2fdb, 0x2ff1, 0x3009, 0x3022, 0x3039, 0x3052, 0x306b, 0x3083, + 0x309c, 0x30b3, 0x30cd, 0x30e5, 0x30fd, 0x3114, 0x312d, 0x3146, + 0x315f, 0x3177, 0x318f, 0x31a6, 0x31bd, 0x31d6, 0x31ee, 0x320a, + 0x3223, 0x323b, 0x3254, 0x326c, 0x3283, 0x329a, 0x32b2, 0x32c9, + 0x32e2, 0x32fa, 0x3311, 0x3328, 0x3341, 0x3359, 0x3371, 0x338b, + // Entry 5D80 - 5DBF + 0x33a4, 0x33b1, 0x33bf, 0x33cc, 0x33da, 0x33e7, 0x33f4, 0x3400, + 0x340e, 0x341d, 0x342b, 0x3439, 0x3447, 0x3457, 0x3464, 0x3473, + 0x3481, 0x348e, 0x349b, 0x34a7, 0x34b4, 0x34c2, 0x34d1, 0x34de, + 0x34eb, 0x34f7, 0x3504, 0x3512, 0x351f, 0x352d, 0x353a, 0x3548, + 0x3556, 0x3563, 0x3570, 0x357f, 0x358d, 0x359b, 0x35a8, 0x35b7, + 0x35c6, 0x35d4, 0x35dd, 0x35ed, 0x3602, 0x3615, 0x3628, 0x363b, + 0x364f, 0x3663, 0x3677, 0x368c, 0x36a1, 0x36b4, 0x36c9, 0x36dc, + 0x36ef, 0x3703, 0x3716, 0x3729, 0x373d, 0x3750, 0x3763, 0x3776, + // Entry 5DC0 - 5DFF + 0x378b, 0x379e, 0x37b4, 0x37c6, 0x37d8, 0x37eb, 0x37fd, 0x3810, + 0x3822, 0x3834, 0x3851, 0x386d, 0x3889, 0x38a9, 0x38ca, 0x38dd, + 0x38f4, 0x390b, 0x3921, 0x3937, 0x394e, 0x3965, 0x397b, 0x3991, + 0x39a7, 0x39bd, 0x39d4, 0x39eb, 0x3a02, 0x3a19, 0x3a30, 0x3a47, + 0x3a5e, 0x3a75, 0x3a8b, 0x3aa1, 0x3ab8, 0x3acf, 0x3ae5, 0x3afb, + 0x3b11, 0x3b27, 0x3b3e, 0x3b55, 0x3b6f, 0x3b8b, 0x3ba5, 0x3bbf, + 0x3bda, 0x3bf4, 0x3c0f, 0x3c2a, 0x3c44, 0x3c5f, 0x3c79, 0x3c94, + 0x3cb0, 0x3ccb, 0x3ce7, 0x3d03, 0x3d1d, 0x3d36, 0x3d50, 0x3d6a, + // Entry 5E00 - 5E3F + 0x3d83, 0x3d9b, 0x3db4, 0x3dce, 0x3de8, 0x3e01, 0x3e1b, 0x3e35, + 0x3e55, 0x3e70, 0x3e8b, 0x3ea5, 0x3ec2, 0x3edd, 0x3ef8, 0x3f14, + 0x3f2e, 0x3f49, 0x3f63, 0x3f7b, 0x3f91, 0x3faf, 0x3fc6, 0x3fdc, + 0x3ff2, 0x400a, 0x4021, 0x4038, 0x404e, 0x4066, 0x407e, 0x4095, + 0x40ad, 0x40c9, 0x40ea, 0x4106, 0x412a, 0x414a, 0x4167, 0x4180, + 0x4196, 0x41ab, 0x41cc, 0x41e6, 0x41fc, 0x4212, 0x4228, 0x423e, + 0x4252, 0x426f, 0x428b, 0x42a0, 0x42b5, 0x42ca, 0x42f2, 0x4313, + 0x432d, 0x434c, 0x436a, 0x4388, 0x43a5, 0x43c0, 0x43da, 0x43f5, + // Entry 5E40 - 5E7F + 0x4411, 0x442b, 0x4446, 0x4461, 0x447c, 0x4497, 0x44b2, 0x44cd, + 0x44e7, 0x4501, 0x451b, 0x4535, 0x4550, 0x456a, 0x4584, 0x4592, + 0x45a0, 0x45b1, 0x45c0, 0x45ce, 0x45dd, 0x45f3, 0x4601, 0x460f, + 0x461e, 0x462c, 0x463a, 0x464c, 0x465d, 0x466c, 0x467b, 0x4689, + 0x4698, 0x46aa, 0x46c0, 0x46cf, 0x46df, 0x46ed, 0x46fc, 0x470b, + 0x471b, 0x472b, 0x473b, 0x474c, 0x475d, 0x476b, 0x4779, 0x478a, + 0x4798, 0x47a7, 0x47b6, 0x47c6, 0x47dd, 0x47eb, 0x47f9, 0x4808, + 0x4818, 0x4828, 0x4838, 0x4847, 0x4857, 0x4867, 0x4877, 0x488a, + // Entry 5E80 - 5EBF + 0x489d, 0x48b6, 0x48c5, 0x48d4, 0x48e3, 0x48f3, 0x4902, 0x4911, + 0x4923, 0x4931, 0x493f, 0x494e, 0x495d, 0x496d, 0x4984, 0x4994, + 0x49a5, 0x49b3, 0x49c1, 0x49d0, 0x49e8, 0x49fc, 0x4a16, 0x4a33, + 0x4a44, 0x4a56, 0x4a69, 0x4a7b, 0x4a8e, 0x4a9f, 0x4ab1, 0x4ac3, + 0x4ad4, 0x4ae5, 0x4af7, 0x4b0a, 0x4b1d, 0x4b2e, 0x4b40, 0x4b53, + 0x4b67, 0x4b79, 0x4b8b, 0x4b9d, 0x4baf, 0x4bc2, 0x4bd3, 0x4be5, + 0x4bf8, 0x4c0c, 0x4c1e, 0x4c31, 0x4c44, 0x4c55, 0x4c67, 0x4c79, + 0x4c8c, 0x4c9f, 0x4cba, 0x4ccc, 0x4ce6, 0x4cf8, 0x4d0a, 0x4d1c, + // Entry 5EC0 - 5EFF + 0x4d2e, 0x4d3f, 0x4d51, 0x4d60, 0x4d73, 0x4d82, 0x4d91, 0x4da3, + 0x4db5, 0x4dc7, 0x4dd9, 0x4deb, 0x4dfd, 0x4e0f, 0x4e2a, 0x4e45, + 0x4e60, 0x4e7b, 0x4e96, 0x4eb1, 0x4ec6, 0x4eda, 0x4eee, 0x4f02, + 0x4f16, 0x4f2a, 0x4f3e, 0x4f52, 0x4f66, 0x4f7a, 0x4f8e, 0x4fa2, + 0x4fb6, 0x4fca, 0x4fde, 0x4ff2, 0x5006, 0x501a, 0x502e, 0x5042, + 0x5056, 0x506a, 0x507e, 0x5092, 0x50a6, 0x50ba, 0x50ce, 0x50e2, + 0x50f6, 0x510a, 0x511e, 0x5132, 0x5146, 0x515a, 0x516e, 0x5182, + 0x5196, 0x51aa, 0x51be, 0x51d2, 0x51e6, 0x51fa, 0x520e, 0x5222, + // Entry 5F00 - 5F3F + 0x5236, 0x524a, 0x525e, 0x5272, 0x5286, 0x529a, 0x52ae, 0x52c2, + 0x52d6, 0x52ea, 0x52fe, 0x5312, 0x5326, 0x533a, 0x534e, 0x5362, + 0x5376, 0x538a, 0x539e, 0x53b2, 0x53c6, 0x53da, 0x53ee, 0x5402, + 0x5416, 0x542a, 0x543e, 0x5452, 0x5466, 0x547a, 0x548e, 0x54a2, + 0x54b6, 0x54ca, 0x54de, 0x54f2, 0x5506, 0x551a, 0x552e, 0x5542, + 0x5556, 0x556a, 0x557e, 0x5592, 0x55a6, 0x55ba, 0x55ce, 0x55e2, + 0x55f6, 0x560a, 0x561e, 0x5632, 0x5646, 0x565a, 0x566e, 0x5682, + 0x5696, 0x56aa, 0x56be, 0x56d2, 0x56e6, 0x56fa, 0x570e, 0x5722, + // Entry 5F40 - 5F7F + 0x5736, 0x574a, 0x575e, 0x5772, 0x5786, 0x579a, 0x57ae, 0x57c2, + 0x57d6, 0x57ea, 0x57fe, 0x5812, 0x5826, 0x583a, 0x584e, 0x5862, + 0x5876, 0x588a, 0x589e, 0x58b2, 0x58c6, 0x58da, 0x58ee, 0x5902, + 0x5916, 0x592a, 0x593e, 0x5952, 0x5966, 0x597a, 0x598e, 0x59a2, + 0x59b6, 0x59ca, 0x59de, 0x59f2, 0x5a06, 0x5a1a, 0x5a2e, 0x5a42, + 0x5a56, 0x5a6a, 0x5a7e, 0x5a92, 0x5aa6, 0x5aba, 0x5ace, 0x5ae2, + 0x5af6, 0x5b0a, 0x5b1e, 0x5b32, 0x5b46, 0x5b5a, 0x5b6e, 0x5b82, + 0x5b96, 0x5baa, 0x5bbe, 0x5bd2, 0x5be6, 0x5bfa, 0x5c0e, 0x5c22, + // Entry 5F80 - 5FBF + 0x5c36, 0x5c4a, 0x5c5e, 0x5c72, 0x5c86, 0x5c9a, 0x5cae, 0x5cc2, + 0x5cd6, 0x5cea, 0x5cfe, 0x5d12, 0x5d26, 0x5d3a, 0x5d4e, 0x5d62, + 0x5d76, 0x5d8a, 0x5d9e, 0x5db2, 0x5dc6, 0x5dda, 0x5dee, 0x5e02, + 0x5e16, 0x5e2a, 0x5e3e, 0x5e52, 0x5e66, 0x5e7a, 0x5e8e, 0x5ea2, + 0x5eb6, 0x5eca, 0x5ede, 0x5ef2, 0x5f06, 0x5f1a, 0x5f2e, 0x5f42, + 0x5f56, 0x5f6a, 0x5f7e, 0x5f92, 0x5fa6, 0x5fba, 0x5fce, 0x5fe2, + 0x5ff6, 0x600a, 0x601e, 0x6032, 0x6046, 0x605a, 0x606e, 0x6082, + 0x6096, 0x60aa, 0x60be, 0x60d2, 0x60e6, 0x60fa, 0x610e, 0x6122, + // Entry 5FC0 - 5FFF + 0x6136, 0x614a, 0x615e, 0x6172, 0x6186, 0x619a, 0x61ae, 0x61c2, + 0x61d6, 0x61ea, 0x61fe, 0x6212, 0x6226, 0x623a, 0x624e, 0x6262, + 0x6276, 0x628a, 0x629e, 0x62b2, 0x62c6, 0x62da, 0x62ee, 0x6302, + 0x6316, 0x632a, 0x633e, 0x6352, 0x6366, 0x637a, 0x638e, 0x63a2, + 0x63b6, 0x63ca, 0x63de, 0x63f2, 0x6406, 0x641a, 0x642e, 0x6442, + 0x6456, 0x646a, 0x647e, 0x6492, 0x64a6, 0x64ba, 0x64ce, 0x64e2, + 0x64f6, 0x650a, 0x651e, 0x6532, 0x6546, 0x655a, 0x656e, 0x6582, + 0x6596, 0x65aa, 0x65be, 0x65d2, 0x65e6, 0x65fa, 0x660e, 0x6622, + // Entry 6000 - 603F + 0x6636, 0x664a, 0x665e, 0x6672, 0x6686, 0x669a, 0x66ae, 0x66c2, + 0x66d6, 0x66ea, 0x66fe, 0x6712, 0x6726, 0x673a, 0x674e, 0x6762, + 0x6776, 0x678a, 0x679e, 0x67b2, 0x67c6, 0x67da, 0x67ee, 0x6802, + 0x6816, 0x682a, 0x683e, 0x6852, 0x6866, 0x687a, 0x688e, 0x68a2, + 0x68b6, 0x68ca, 0x68de, 0x68f2, 0x6906, 0x691a, 0x692e, 0x6942, + 0x6956, 0x696a, 0x697e, 0x6992, 0x69a6, 0x69ba, 0x69ce, 0x69e2, + 0x69f6, 0x6a0a, 0x6a1e, 0x6a32, 0x6a46, 0x6a5a, 0x6a6e, 0x6a82, + 0x6a96, 0x6aaa, 0x6abe, 0x6ad2, 0x6ae6, 0x6afa, 0x6b0e, 0x6b22, + // Entry 6040 - 607F + 0x6b36, 0x6b4a, 0x6b5e, 0x6b72, 0x6b86, 0x6b9a, 0x6bae, 0x6bc2, + 0x6bd6, 0x6bea, 0x6bfe, 0x6c12, 0x6c26, 0x6c3a, 0x6c4e, 0x6c62, + 0x6c76, 0x6c8a, 0x6c9e, 0x6cb2, 0x6cc6, 0x6cda, 0x6cee, 0x6d02, + 0x6d16, 0x6d2a, 0x6d3e, 0x6d52, 0x6d66, 0x6d7a, 0x6d8e, 0x6da2, + 0x6db6, 0x6dca, 0x6dde, 0x6df2, 0x6e06, 0x6e1a, 0x6e2e, 0x6e42, + 0x6e56, 0x6e6a, 0x6e7e, 0x6e92, 0x6ea6, 0x6eba, 0x6ece, 0x6ee2, + 0x6ef6, 0x6f0a, 0x6f1e, 0x6f32, 0x6f46, 0x6f5a, 0x6f6e, 0x6f82, + 0x6f96, 0x6faa, 0x6fbe, 0x6fd2, 0x6fe6, 0x6ffa, 0x700e, 0x7022, + // Entry 6080 - 60BF + 0x7036, 0x704a, 0x705e, 0x7072, 0x7086, 0x709a, 0x70ae, 0x70c2, + 0x70d6, 0x70ea, 0x70fe, 0x7112, 0x7126, 0x713a, 0x714e, 0x7162, + 0x7176, 0x718a, 0x719e, 0x71b2, 0x71c6, 0x71da, 0x71ee, 0x7202, + 0x7216, 0x722a, 0x723e, 0x7252, 0x7266, 0x727a, 0x728e, 0x72a2, + 0x72b6, 0x72ca, 0x72de, 0x72f2, 0x7306, 0x731a, 0x732e, 0x7342, + 0x7356, 0x736a, 0x737e, 0x7392, 0x73a6, 0x73ba, 0x73ce, 0x73e2, + 0x73f6, 0x740a, 0x741e, 0x7432, 0x7446, 0x745a, 0x746e, 0x7482, + 0x7496, 0x74aa, 0x74be, 0x74d2, 0x74e6, 0x74fa, 0x750e, 0x7522, + // Entry 60C0 - 60FF + 0x7536, 0x754a, 0x755e, 0x7572, 0x7586, 0x759a, 0x75ae, 0x75c2, + 0x75d6, 0x75ea, 0x75fe, 0x7612, 0x7626, 0x763a, 0x764e, 0x7662, + 0x7676, 0x768a, 0x769e, 0x76b2, 0x76c6, 0x76da, 0x76ee, 0x7702, + 0x7716, 0x772a, 0x773e, 0x7752, 0x7766, 0x777a, 0x778e, 0x77a2, + 0x77b6, 0x77ca, 0x77de, 0x77f2, 0x7806, 0x781a, 0x782e, 0x7842, + 0x7856, 0x786a, 0x787e, 0x7892, 0x78a6, 0x78ba, 0x78ce, 0x78e2, + 0x78f6, 0x790a, 0x791e, 0x7932, 0x7946, 0x795a, 0x796e, 0x7982, + 0x7996, 0x79aa, 0x79be, 0x79d2, 0x79e6, 0x79fa, 0x7a0e, 0x7a22, + // Entry 6100 - 613F + 0x7a36, 0x7a4a, 0x7a5e, 0x7a72, 0x7a86, 0x7a9a, 0x7aae, 0x7ac2, + 0x7ad6, 0x7aea, 0x7afe, 0x7b12, 0x7b26, 0x7b3a, 0x7b4e, 0x7b62, + 0x7b76, 0x7b8a, 0x7b9e, 0x7bb2, 0x7bc6, 0x7bda, 0x7bee, 0x7c02, + 0x7c16, 0x7c2a, 0x7c3e, 0x7c52, 0x7c66, 0x7c7a, 0x7c8e, 0x7ca2, + 0x7cb6, 0x7cca, 0x7cde, 0x7cf2, 0x7d06, 0x7d1a, 0x7d2e, 0x7d42, + 0x7d56, 0x7d6a, 0x7d7e, 0x7d92, 0x7da6, 0x7dba, 0x7dce, 0x7de2, + 0x7df6, 0x7e0a, 0x7e1e, 0x7e32, 0x7e46, 0x7e5a, 0x7e6e, 0x7e82, + 0x7e96, 0x7eaa, 0x7ebe, 0x7ed2, 0x7ee6, 0x7efa, 0x7f0e, 0x7f22, + // Entry 6140 - 617F + 0x7f36, 0x7f4a, 0x7f5e, 0x7f72, 0x7f86, 0x7f9a, 0x7fae, 0x7fc2, + 0x7fd6, 0x7fea, 0x7ffe, 0x8012, 0x8026, 0x803a, 0x804e, 0x8062, + 0x8076, 0x808a, 0x809e, 0x80b2, 0x80c6, 0x80da, 0x80ee, 0x8102, + 0x8116, 0x812a, 0x813e, 0x8152, 0x8166, 0x817a, 0x818e, 0x81a2, + 0x81b6, 0x81ca, 0x81de, 0x81f2, 0x8206, 0x821a, 0x822e, 0x8242, + 0x8256, 0x826a, 0x827e, 0x8292, 0x82a6, 0x82ba, 0x82ce, 0x82e2, + 0x82f6, 0x830a, 0x831e, 0x8332, 0x8346, 0x835a, 0x836e, 0x8382, + 0x8396, 0x83aa, 0x83be, 0x83d2, 0x83e6, 0x83fa, 0x840e, 0x8422, + // Entry 6180 - 61BF + 0x8436, 0x844a, 0x845e, 0x8472, 0x8486, 0x849a, 0x84ae, 0x84c2, + 0x84d6, 0x84ea, 0x84fe, 0x8512, 0x8526, 0x853a, 0x854e, 0x8562, + 0x8576, 0x858a, 0x859e, 0x85b2, 0x85c6, 0x85da, 0x85ee, 0x8602, + 0x8616, 0x862a, 0x863e, 0x8652, 0x8666, 0x867a, 0x868e, 0x86a2, + 0x86b6, 0x86ca, 0x86de, 0x86f2, 0x8706, 0x871a, 0x872e, 0x8742, + 0x8756, 0x876a, 0x877e, 0x8792, 0x87a6, 0x87ba, 0x87ce, 0x87e2, + 0x87f6, 0x880a, 0x881e, 0x8832, 0x8846, 0x885a, 0x886e, 0x8882, + 0x8896, 0x88aa, 0x88be, 0x88d2, 0x88e6, 0x88fa, 0x890e, 0x8922, + // Entry 61C0 - 61FF + 0x8936, 0x894a, 0x895e, 0x8972, 0x8986, 0x899a, 0x89ae, 0x89c2, + 0x89d6, 0x89ef, 0x8a09, 0x8a1e, 0x8a33, 0x8a48, 0x8a5e, 0x8a73, + 0x8a88, 0x8a9d, 0x8ab2, 0x8ac7, 0x8adc, 0x8af1, 0x8b06, 0x8b1b, + 0x8b30, 0x8b45, 0x8b5a, 0x8b6f, 0x8b84, 0x8b99, 0x8bae, 0x8bc3, + 0x8bd9, 0x8bef, 0x8c05, 0x8c1b, 0x8c31, 0x8c47, 0x8c5d, 0x8c73, + 0x8c89, 0x8ca0, 0x8cb7, 0x8cce, 0x8ce4, 0x8cfa, 0x8d10, 0x8d26, + 0x8d3c, 0x8d52, 0x8d68, 0x8d7e, 0x8d94, 0x8daa, 0x8dc0, 0x8dd6, + 0x8dec, 0x8e02, 0x8e18, 0x8e2e, 0x8e44, 0x8e5a, 0x8e70, 0x8e86, + // Entry 6200 - 623F + 0x8e9c, 0x8eb2, 0x8ec8, 0x8ede, 0x8ef5, 0x8f0b, 0x8f21, 0x8f37, + 0x8f4d, 0x8f63, 0x8f79, 0x8f8f, 0x8fa5, 0x8fbb, 0x8fd1, 0x8fe7, + 0x8ffd, 0x9013, 0x9029, 0x903f, 0x9055, 0x906b, 0x9081, 0x9097, + 0x90ad, 0x90c3, 0x90d9, 0x90ef, 0x9105, 0x911b, 0x9131, 0x9147, + 0x915d, 0x9173, 0x9189, 0x919f, 0x91b5, 0x91cb, 0x91e1, 0x91f7, + 0x920d, 0x9223, 0x9239, 0x924f, 0x9265, 0x927b, 0x9291, 0x92a7, + 0x92bd, 0x92d3, 0x92e9, 0x92ff, 0x9315, 0x932b, 0x9342, 0x9358, + 0x936e, 0x9384, 0x939a, 0x93b0, 0x93c6, 0x93dc, 0x93f2, 0x9408, + // Entry 6240 - 627F + 0x941e, 0x9434, 0x944a, 0x9460, 0x9476, 0x948c, 0x94a3, 0x94b9, + 0x94cf, 0x94e5, 0x94fb, 0x9511, 0x9527, 0x953d, 0x9553, 0x9569, + 0x957f, 0x9595, 0x95ab, 0x95c1, 0x95d7, 0x95ed, 0x9603, 0x961a, + 0x9630, 0x9646, 0x965c, 0x9672, 0x9688, 0x969e, 0x96b4, 0x96ca, + 0x96e0, 0x96f7, 0x970d, 0x9723, 0x9739, 0x974f, 0x9765, 0x977b, + 0x9791, 0x97a7, 0x97bd, 0x97d3, 0x97e9, 0x97ff, 0x9815, 0x982b, + 0x9842, 0x9859, 0x986f, 0x9885, 0x989b, 0x98b1, 0x98c7, 0x98dd, + 0x98f3, 0x9909, 0x991f, 0x9935, 0x994b, 0x9961, 0x9977, 0x998d, + // Entry 6280 - 62BF + 0x99a3, 0x99b9, 0x99cf, 0x99e5, 0x99fb, 0x9a11, 0x9a27, 0x9a3d, + 0x9a53, 0x9a69, 0x9a7f, 0x9a95, 0x9aab, 0x9ac1, 0x9ad7, 0x9aed, + 0x9b03, 0x9b19, 0x9b2f, 0x9b45, 0x9b5b, 0x9b71, 0x9b87, 0x9b9d, + 0x9bb3, 0x9bc9, 0x9bdf, 0x9bf5, 0x9c0b, 0x9c21, 0x9c37, 0x9c4e, + 0x9c64, 0x9c7a, 0x9c90, 0x9ca6, 0x9cbc, 0x9cd2, 0x9ce8, 0x9cfe, + 0x9d14, 0x9d2a, 0x9d40, 0x9d57, 0x9d6d, 0x9d83, 0x9d99, 0x9daf, + 0x9dc5, 0x9ddb, 0x9df1, 0x9e07, 0x9e1d, 0x9e33, 0x9e49, 0x9e5f, + 0x9e75, 0x9e8b, 0x9ea1, 0x9eb7, 0x9ecd, 0x9ee3, 0x9ef9, 0x9f0f, + // Entry 62C0 - 62FF + 0x9f25, 0x9f3b, 0x9f51, 0x9f67, 0x9f7d, 0x9f93, 0x9fa9, 0x9fbf, + 0x9fd5, 0x9feb, 0xa001, 0xa017, 0xa02d, 0xa043, 0xa059, 0xa06f, + 0xa085, 0xa09b, 0xa0b1, 0xa0c7, 0xa0dd, 0xa0f3, 0xa109, 0xa11f, + 0xa135, 0xa14b, 0xa161, 0xa177, 0xa18d, 0xa1a3, 0xa1b9, 0xa1cf, + 0xa1e5, 0xa1fb, 0xa211, 0xa227, 0xa23d, 0xa253, 0xa26e, 0xa289, + 0xa29e, 0xa2b3, 0xa2c8, 0xa2dd, 0xa2f2, 0xa307, 0xa31c, 0xa331, + 0xa346, 0xa35b, 0xa370, 0xa385, 0xa39a, 0xa3af, 0xa3c4, 0xa3d9, + 0xa3ee, 0xa403, 0xa418, 0xa42d, 0xa442, 0xa457, 0xa46c, 0xa481, + // Entry 6300 - 633F + 0xa496, 0xa4ab, 0xa4c0, 0xa4d5, 0xa4ea, 0xa4ff, 0xa514, 0xa529, + 0xa53e, 0xa553, 0xa568, 0xa57d, 0xa592, 0xa5a7, 0xa5bc, 0xa5d1, + 0xa5e6, 0xa5fb, 0xa610, 0xa625, 0xa63a, 0xa64f, 0xa664, 0xa679, + 0xa68e, 0xa6a3, 0xa6b8, 0xa6cd, 0xa6e2, 0xa6f7, 0xa70c, 0xa721, + 0xa736, 0xa74b, 0xa760, 0xa775, 0xa78a, 0xa79f, 0xa7b4, 0xa7c9, + 0xa7de, 0xa7f3, 0xa808, 0xa81d, 0xa832, 0xa847, 0xa85c, 0xa871, + 0xa886, 0xa89b, 0xa8b0, 0xa8c5, 0xa8da, 0xa8ef, 0xa904, 0xa919, + 0xa92e, 0xa943, 0xa958, 0xa96d, 0xa982, 0xa997, 0xa9ac, 0xa9c1, + // Entry 6340 - 637F + 0xa9d6, 0xa9eb, 0xaa00, 0xaa15, 0xaa2a, 0xaa3f, 0xaa54, 0xaa69, + 0xaa7e, 0xaa93, 0xaaa8, 0xaabd, 0xaad2, 0xaae7, 0xaafc, 0xab11, + 0xab26, 0xab3b, 0xab50, 0xab65, 0xab7a, 0xab8f, 0xaba4, 0xabb9, + 0xabce, 0xabe3, 0xabf8, 0xac0d, 0xac22, 0xac37, 0xac4c, 0xac61, + 0xac76, 0xac8b, 0xaca0, 0xacb5, 0xacca, 0xacdf, 0xacf4, 0xad09, + 0xad1e, 0xad33, 0xad48, 0xad5d, 0xad72, 0xad87, 0xad9c, 0xadb1, + 0xadc6, 0xaddb, 0xadf0, 0xae05, 0xae1a, 0xae2f, 0xae44, 0xae59, + 0xae6e, 0xae83, 0xae98, 0xaead, 0xaec2, 0xaed7, 0xaeec, 0xaf01, + // Entry 6380 - 63BF + 0xaf16, 0xaf2b, 0xaf40, 0xaf55, 0xaf6a, 0xaf7f, 0xaf94, 0xafa9, + 0xafbe, 0xafd3, 0xafe8, 0xaffd, 0xb012, 0xb027, 0xb03c, 0xb051, + 0xb066, 0xb07b, 0xb090, 0xb0a5, 0xb0ba, 0xb0cf, 0xb0e4, 0xb0f9, + 0xb10e, 0xb123, 0xb138, 0xb14d, 0xb162, 0xb177, 0xb18c, 0xb1a1, + 0xb1b6, 0xb1cb, 0xb1e0, 0xb1f5, 0xb20a, 0xb21f, 0xb234, 0xb249, + 0xb25e, 0xb273, 0xb288, 0xb29d, 0xb2b2, 0xb2c7, 0xb2dc, 0xb2f1, + 0xb306, 0xb31b, 0xb330, 0xb345, 0xb35a, 0xb36f, 0xb384, 0xb399, + 0xb3ae, 0xb3c3, 0xb3d8, 0xb3ed, 0xb402, 0xb417, 0xb42c, 0xb441, + // Entry 63C0 - 63FF + 0xb456, 0xb46b, 0xb480, 0xb495, 0xb4aa, 0xb4bf, 0xb4d4, 0xb4e9, + 0xb4fe, 0xb513, 0xb528, 0xb53d, 0xb552, 0xb567, 0xb57c, 0xb591, + 0xb5a6, 0xb5bb, 0xb5d0, 0xb5e5, 0xb5fa, 0xb60f, 0xb624, 0xb639, + 0xb64e, 0xb663, 0xb678, 0xb68d, 0xb6a2, 0xb6b7, 0xb6cc, 0xb6e1, + 0xb6f6, 0xb70b, 0xb720, 0xb735, 0xb74a, 0xb75f, 0xb774, 0xb789, + 0xb79e, 0xb7b3, 0xb7c8, 0xb7dd, 0xb7f2, 0xb807, 0xb81c, 0xb831, + 0xb846, 0xb85b, 0xb870, 0xb885, 0xb89a, 0xb8af, 0xb8c4, 0xb8d9, + 0xb8ee, 0xb903, 0xb918, 0xb92d, 0xb942, 0xb957, 0xb96c, 0xb981, + // Entry 6400 - 643F + 0xb996, 0xb9ab, 0xb9c0, 0xb9d5, 0xb9ea, 0xb9ff, 0xba14, 0xba29, + 0xba3e, 0xba53, 0xba68, 0xba7d, 0xba92, 0xbaa7, 0xbabc, 0xbad1, + 0xbae6, 0xbafb, 0xbb10, 0xbb25, 0xbb3a, 0xbb4f, 0xbb64, 0xbb79, + 0xbb8e, 0xbba3, 0xbbb8, 0xbbcd, 0xbbe2, 0xbbf7, 0xbc0c, 0xbc21, + 0xbc36, 0xbc4b, 0xbc60, 0xbc75, 0xbc8a, 0xbc9f, 0xbcb4, 0xbcc9, + 0xbcde, 0xbcf3, 0xbd08, 0xbd1d, 0xbd32, 0xbd47, 0xbd5c, 0xbd71, + 0xbd86, 0xbd9b, 0xbdb0, 0xbdc5, 0xbdda, 0xbdef, 0xbe04, 0xbe19, + 0xbe2e, 0xbe43, 0xbe58, 0xbe6d, 0xbe82, 0xbe97, 0xbeac, 0xbec1, + // Entry 6440 - 647F + 0xbed6, 0xbeeb, 0xbf00, 0xbf15, 0xbf2a, 0xbf3f, 0xbf54, 0xbf69, + 0xbf7e, 0xbf93, 0xbfa8, 0xbfbd, 0xbfd2, 0xbfe7, 0xbffc, 0xc011, + 0xc026, 0xc03b, 0xc050, 0xc065, 0xc07a, 0xc08f, 0xc0a4, 0xc0b9, + 0xc0ce, 0xc0e3, 0xc0f8, 0xc10d, 0xc122, 0xc137, 0xc14c, 0xc161, + 0xc176, 0xc18b, 0xc1a0, 0xc1b5, 0xc1ca, 0xc1df, 0xc1f4, 0xc209, + 0xc21e, 0xc233, 0xc248, 0xc25d, 0xc272, 0xc287, 0xc29c, 0xc2b1, + 0xc2c6, 0xc2db, 0xc2f0, 0xc305, 0xc316, 0xc327, 0xc338, 0xc349, + 0xc35a, 0xc36b, 0xc37c, 0xc38d, 0xc39e, 0xc3af, 0xc3c0, 0xc3d1, + // Entry 6480 - 64BF + 0xc3e4, 0xc3f7, 0xc40a, 0xc41d, 0xc430, 0xc442, 0xc45a, 0xc46c, + 0xc47e, 0xc495, 0xc4a7, 0xc4b9, 0xc4cb, 0xc4dc, 0xc4ed, 0xc4fe, + 0xc50f, 0xc522, 0xc535, 0xc548, 0xc55b, 0xc575, 0xc58f, 0xc5a9, + 0xc5d5, 0xc5ef, 0xc60f, 0xc622, 0xc635, 0xc648, 0xc65b, 0xc670, + 0xc685, 0xc69a, 0xc6af, 0xc6cb, 0xc6de, 0xc6f3, 0xc706, 0xc71b, + 0xc72e, 0xc743, 0xc756, 0xc76b, 0xc77c, 0xc78e, 0xc7a1, 0xc7b4, + 0xc7c7, 0xc7dc, 0xc7f1, 0xc804, 0xc819, 0xc82a, 0xc842, 0xc854, + 0xc865, 0xc878, 0xc889, 0xc89a, 0xc8ac, 0xc8c3, 0xc8d5, 0xc8e7, + // Entry 64C0 - 64FF + 0xc8ff, 0xc919, 0xc931, 0xc947, 0xc959, 0xc96a, 0xc97c, 0xc98e, + 0xc9a1, 0xc9b7, 0xc9d1, 0xc9e3, 0xc9fa, 0xca0d, 0xca1f, 0xca31, + 0xca43, 0xca55, 0xca67, 0xca7a, 0xca8d, 0xcaa4, 0xcabb, 0xcad2, + 0xcae9, 0xcb02, 0xcb1b, 0xcb33, 0xcb4b, 0xcb63, 0xcb7c, 0xcba1, + 0xcbc5, 0xcbeb, 0xcc0d, 0xcc2f, 0xcc52, 0xcc70, 0xcc9c, 0xccbb, + 0xccd7, 0xccf5, 0xcd13, 0xcd37, 0xcd50, 0xcd6f, 0xcd88, 0xcda6, + 0xcdbd, 0xcdd7, 0xcdef, 0xce07, 0xce23, 0xce3b, 0xce59, 0xce71, + 0xce8e, 0xcea4, 0xcebd, 0xced4, 0xceeb, 0xcf06, 0xcf1e, 0xcf38, + // Entry 6500 - 653F + 0xcf56, 0xcf6a, 0xcf90, 0xcfaf, 0xcfd2, 0xcfec, 0xd004, 0xd022, + 0xd041, 0xd065, 0xd08f, 0xd0b3, 0xd0de, 0xd103, 0xd124, 0xd146, + 0xd16a, 0xd18c, 0xd1b4, 0xd1d5, 0xd1ff, 0xd227, 0xd246, 0xd268, + 0xd28b, 0xd2b4, 0xd2d4, 0xd2f2, 0xd31a, 0xd342, 0xd361, 0xd382, + 0xd3a0, 0xd3c6, 0xd3ef, 0xd41a, 0xd43b, 0xd45c, 0xd485, 0xd4ad, + 0xd4d6, 0xd500, 0xd521, 0xd540, 0xd55e, 0xd586, 0xd5a6, 0xd5cb, + 0xd5ea, 0xd613, 0xd640, 0xd66b, 0xd689, 0xd6a7, 0xd6c3, 0xd6e0, + 0xd700, 0xd722, 0xd748, 0xd770, 0xd792, 0xd7bc, 0xd7e4, 0xd805, + // Entry 6540 - 657F + 0xd827, 0xd848, 0xd872, 0xd892, 0xd8bf, 0xd8ec, 0xd90c, 0xd929, + 0xd949, 0xd96f, 0xd995, 0xd9ba, 0xd9df, 0xda00, 0xda23, 0xda45, + 0xda65, 0xda86, 0xdaae, 0xdad6, 0xdafb, 0xdb25, 0xdb4d, 0xdb6c, + 0xdb93, 0xdbc4, 0xdbe4, 0xdc0c, 0xdc2c, 0xdc4c, 0xdc70, 0xdc93, + 0xdcb6, 0xdcdc, 0xdcfb, 0xdd1e, 0xdd3e, 0xdd66, 0xdd8e, 0xddb9, + 0xddd9, 0xde01, 0xde26, 0xde49, 0xde6d, 0xde8b, 0xdeb0, 0xded1, + 0xdef4, 0xdf19, 0xdf42, 0xdf6a, 0xdf91, 0xdfbc, 0xdfe8, 0xe00f, + 0xe037, 0xe05e, 0xe084, 0xe0b1, 0xe0d7, 0xe0ff, 0xe127, 0xe14c, + // Entry 6580 - 65BF + 0xe175, 0xe197, 0xe1b9, 0xe1db, 0xe1fc, 0xe21c, 0xe23f, 0xe266, + 0xe28f, 0xe2b4, 0xe2d8, 0xe2fd, 0xe31a, 0xe338, 0xe357, 0xe378, + 0xe398, 0xe3c4, 0xe3ef, 0xe41c, 0xe44c, 0xe47b, 0xe4a2, 0xe4d8, + 0xe50b, 0xe52c, 0xe569, 0xe5a5, 0xe5da, 0xe5fc, 0xe61a, 0xe63d, + 0xe65d, 0xe685, 0xe6ac, 0xe6cf, 0xe6f4, 0xe717, 0xe73b, 0xe763, + 0xe78c, 0xe7ba, 0xe7ed, 0xe81d, 0xe852, 0xe880, 0xe8ab, 0xe8db, + 0xe913, 0xe942, 0xe971, 0xe9a1, 0xe9d5, 0xea03, 0xea30, 0xea5b, + 0xea88, 0xeaba, 0xeaf2, 0xeb1e, 0xeb4b, 0xeb7a, 0xeb9b, 0xebbe, + // Entry 65C0 - 65FF + 0xebf5, 0xec21, 0xec4f, 0xec79, 0xeca5, 0xecd8, 0xed04, 0xed30, + 0xed61, 0xed91, 0xedc8, 0xee01, 0xee35, 0xee6a, 0xee90, 0xeeb4, + 0xeed9, 0xeefe, 0xef34, 0xef68, 0xef93, 0xefbe, 0xefeb, 0xf01c, + 0xf058, 0xf08d, 0xf0c5, 0xf0f6, 0xf132, 0xf167, 0xf19f, 0xf1c5, + 0xf1eb, 0xf217, 0xf244, 0xf26b, 0xf294, 0xf2bd, 0xf2ee, 0xf320, + 0xf354, 0xf37c, 0xf3ac, 0xf3dd, 0xf410, 0xf434, 0xf459, 0xf478, + 0xf49b, 0xf4bf, 0xf4e2, 0xf505, 0xf528, 0xf54b, 0xf56e, 0xf599, + 0xf5c2, 0xf5ed, 0xf616, 0xf63a, 0xf662, 0xf67f, 0xf69c, 0xf6b8, + // Entry 6600 - 663F + 0xf6dc, 0xf6f9, 0xf715, 0xf734, 0xf754, 0xf76e, 0xf786, 0xf79c, + 0xf7b0, 0xf7c3, 0xf7e3, 0xf803, 0xf823, 0xf839, 0xf855, 0xf86f, + 0xf885, 0xf899, 0xf8af, 0xf8cc, 0xf8e9, 0xf908, 0xf926, 0xf944, + 0xf961, 0xf984, 0xf9a8, 0xf9bd, 0xf9de, 0xfa00, 0xfa15, 0xfa2a, + 0xfa4b, 0xfa6d, 0xfa87, 0xfaa1, 0xfac5, 0xfae0, 0xfafa, 0xfb10, + 0xfb28, 0xfb41, 0xfb5c, 0xfb73, 0xfb8c, 0xfbad, 0xfbcd, 0xfbe7, + 0xfbfe, 0xfc18, 0xfc33, 0xfc53, 0xfc74, 0xfc8d, 0xfca6, 0xfcbe, + 0xfcd9, 0xfcf3, 0xfd10, 0xfd31, 0xfd51, 0xfd7e, 0xfd97, 0xfdb3, + // Entry 6640 - 667F + 0xfdd3, 0xfdf7, 0xfe1b, 0xfe44, 0xfe6d, 0xfe98, 0xfec3, 0xfeef, + 0xff1b, 0xff46, 0xff71, 0xffa0, 0xffcf, 0xfff1, 0x0013, 0x0044, + 0x0075, 0x0098, 0x00b4, 0x00d1, 0x00ed, 0x0112, 0x0137, 0x014b, + 0x0164, 0x017c, 0x0197, 0x01b1, 0x01ce, 0x01ef, 0x020f, 0x023c, + 0x0259, 0x0283, 0x02a5, 0x02c7, 0x02e9, 0x030a, 0x032b, 0x034c, + 0x0375, 0x0394, 0x03b3, 0x03d2, 0x03f1, 0x0410, 0x0429, 0x0440, + 0x0458, 0x046e, 0x0487, 0x049e, 0x04b9, 0x04d2, 0x04f1, 0x0512, + 0x0531, 0x0557, 0x0577, 0x05a0, 0x05c8, 0x05e6, 0x0602, 0x0620, + // Entry 6680 - 66BF + 0x063d, 0x0659, 0x0676, 0x0694, 0x06b1, 0x06d7, 0x06fd, 0x0717, + 0x072c, 0x073c, 0x0750, 0x0764, 0x0778, 0x0790, 0x07aa, 0x07c9, + 0x07eb, 0x07fc, 0x080f, 0x082b, 0x0844, 0x085a, 0x087a, 0x089a, + 0x08ba, 0x08da, 0x08fa, 0x091a, 0x093a, 0x095a, 0x097a, 0x099b, + 0x09bc, 0x09d6, 0x09f0, 0x0a0c, 0x0a27, 0x0a48, 0x0a67, 0x0a88, + 0x0aaf, 0x0ac8, 0x0ae4, 0x0b02, 0x0b1d, 0x0b3a, 0x0b59, 0x0b6c, + 0x0b83, 0x0b98, 0x0bac, 0x0bc1, 0x0be0, 0x0bff, 0x0c14, 0x0c2f, + 0x0c4e, 0x0c6d, 0x0c86, 0x0c9f, 0x0cc1, 0x0ce5, 0x0cff, 0x0d1d, + // Entry 66C0 - 66FF + 0x0d37, 0x0d55, 0x0d8c, 0x0dc5, 0x0e09, 0x0e42, 0x0e7d, 0x0ec5, + 0x0f0d, 0x0f55, 0x0f69, 0x0f88, 0x0fa7, 0x0fbe, 0x0fd2, 0x0fe8, + 0x0ffd, 0x1015, 0x102c, 0x1043, 0x105b, 0x107a, 0x1099, 0x10ba, + 0x10d7, 0x10f3, 0x1115, 0x1135, 0x115a, 0x117a, 0x1199, 0x11c5, + 0x11ef, 0x121a, 0x1243, 0x1262, 0x127f, 0x129c, 0x12b9, 0x12d6, + 0x12f3, 0x1310, 0x132d, 0x134a, 0x1367, 0x1385, 0x13a3, 0x13c1, + 0x13df, 0x13fd, 0x141b, 0x1439, 0x1457, 0x1475, 0x1493, 0x14b1, + 0x14cf, 0x14ed, 0x150b, 0x1529, 0x1547, 0x1565, 0x1583, 0x15a1, + // Entry 6700 - 673F + 0x15bf, 0x15e3, 0x1607, 0x162b, 0x164f, 0x1673, 0x1697, 0x16bc, + 0x16e1, 0x1706, 0x172b, 0x1750, 0x1775, 0x179a, 0x17bf, 0x17e4, + 0x1809, 0x182e, 0x1853, 0x1878, 0x189d, 0x18c2, 0x18e7, 0x190c, + 0x1931, 0x1956, 0x197b, 0x19a0, 0x19c5, 0x19ea, 0x1a0f, 0x1a34, + 0x1a59, 0x1a7e, 0x1aa3, 0x1ac8, 0x1aed, 0x1b12, 0x1b31, 0x1b52, + 0x1b73, 0x1b87, 0x1b99, 0x1bb2, 0x1bc8, 0x1be1, 0x1bf9, 0x1c09, + 0x1c1d, 0x1c36, 0x1c49, 0x1c5e, 0x1c79, 0x1c92, 0x1ca6, 0x1cbe, + 0x1cd9, 0x1d02, 0x1d1a, 0x1d34, 0x1d4a, 0x1d63, 0x1d76, 0x1d8b, + // Entry 6740 - 677F + 0x1da5, 0x1dba, 0x1dd1, 0x1de6, 0x1dfb, 0x1e13, 0x1e25, 0x1e36, + 0x1e4e, 0x1e65, 0x1e79, 0x1e8d, 0x1ea7, 0x1ec4, 0x1ed9, 0x1eed, + 0x1f04, 0x1f19, 0x1f30, 0x1f46, 0x1f5a, 0x1f70, 0x1f87, 0x1fa1, + 0x1fb7, 0x1fd2, 0x1fea, 0x1ffd, 0x2014, 0x202d, 0x2042, 0x2056, + 0x206a, 0x208b, 0x20a2, 0x20b7, 0x20cd, 0x20e0, 0x20fa, 0x2114, + 0x212d, 0x2147, 0x215c, 0x2176, 0x2191, 0x21a4, 0x21b7, 0x21cc, + 0x21df, 0x21f6, 0x220d, 0x2222, 0x223a, 0x2251, 0x2267, 0x227d, + 0x2295, 0x22aa, 0x22bf, 0x22d8, 0x22f0, 0x230a, 0x2324, 0x233b, + // Entry 6780 - 67BF + 0x2352, 0x236d, 0x2388, 0x23a5, 0x23c1, 0x23dd, 0x23f8, 0x2415, + 0x2432, 0x244e, 0x2469, 0x2484, 0x24a1, 0x24bd, 0x24d9, 0x24f4, + 0x2511, 0x252e, 0x254a, 0x2565, 0x2580, 0x259b, 0x25b6, 0x25d1, + 0x25ec, 0x2607, 0x2622, 0x263d, 0x2658, 0x2673, 0x268e, 0x26a9, + 0x26c4, 0x26df, 0x26fa, 0x2715, 0x2730, 0x274b, 0x2766, 0x2781, + 0x279c, 0x27b7, 0x27d2, 0x27ed, 0x2808, 0x2821, 0x283a, 0x2853, + 0x286c, 0x2885, 0x289e, 0x28b7, 0x28d0, 0x28e9, 0x2902, 0x291b, + 0x2934, 0x294d, 0x2966, 0x297f, 0x2998, 0x29b1, 0x29ca, 0x29e3, + // Entry 67C0 - 67FF + 0x29fc, 0x2a15, 0x2a2e, 0x2a47, 0x2a60, 0x2a79, 0x2a92, 0x2aaf, + 0x2acc, 0x2ae9, 0x2b06, 0x2b23, 0x2b40, 0x2b5d, 0x2b7a, 0x2b97, + 0x2bb4, 0x2bd1, 0x2bee, 0x2c0b, 0x2c28, 0x2c45, 0x2c62, 0x2c7f, + 0x2c9c, 0x2cb9, 0x2cd6, 0x2cf3, 0x2d10, 0x2d2d, 0x2d4a, 0x2d67, + 0x2d84, 0x2d9f, 0x2dba, 0x2dd5, 0x2df0, 0x2e0b, 0x2e26, 0x2e41, + 0x2e5c, 0x2e77, 0x2e92, 0x2ead, 0x2ec8, 0x2ee3, 0x2efe, 0x2f19, + 0x2f34, 0x2f4f, 0x2f6a, 0x2f85, 0x2fa0, 0x2fbb, 0x2fd6, 0x2ff1, + 0x300c, 0x3027, 0x3049, 0x306b, 0x308d, 0x30af, 0x30d1, 0x30f3, + // Entry 6800 - 683F + 0x3115, 0x3137, 0x3159, 0x317b, 0x319d, 0x31bf, 0x31e1, 0x3203, + 0x3225, 0x3247, 0x3269, 0x328b, 0x32ad, 0x32cf, 0x32f1, 0x3313, + 0x3335, 0x3357, 0x3379, 0x339b, 0x33bb, 0x33db, 0x33fb, 0x341b, + 0x343b, 0x345b, 0x347b, 0x349b, 0x34bb, 0x34db, 0x34fb, 0x351b, + 0x353b, 0x355b, 0x357b, 0x359b, 0x35bb, 0x35db, 0x35fb, 0x361b, + 0x363b, 0x365b, 0x367b, 0x369b, 0x36bb, 0x36db, 0x36f8, 0x3715, + 0x3732, 0x374f, 0x376c, 0x3789, 0x37a6, 0x37c3, 0x37e0, 0x37fd, + 0x381a, 0x3837, 0x3854, 0x3871, 0x388e, 0x38ab, 0x38c8, 0x38e5, + // Entry 6840 - 687F + 0x3900, 0x391b, 0x3936, 0x3951, 0x396c, 0x3987, 0x39a2, 0x39bd, + 0x39d8, 0x39f3, 0x3a0e, 0x3a29, 0x3a44, 0x3a5f, 0x3a7a, 0x3a95, + 0x3ab0, 0x3acb, 0x3ae6, 0x3b01, 0x3b1c, 0x3b37, 0x3b52, 0x3b74, + 0x3b96, 0x3bb8, 0x3bda, 0x3bfc, 0x3c1e, 0x3c40, 0x3c62, 0x3c84, + 0x3ca6, 0x3cc8, 0x3cea, 0x3d0c, 0x3d2e, 0x3d50, 0x3d72, 0x3d94, + 0x3db6, 0x3dd8, 0x3dfa, 0x3e1c, 0x3e3e, 0x3e60, 0x3e82, 0x3ea4, + 0x3ec6, 0x3ee6, 0x3f06, 0x3f26, 0x3f46, 0x3f66, 0x3f86, 0x3fa6, + 0x3fc6, 0x3fe6, 0x4006, 0x4026, 0x4046, 0x4066, 0x4086, 0x40a6, + // Entry 6880 - 68BF + 0x40c6, 0x40e6, 0x4106, 0x4126, 0x4146, 0x4166, 0x4186, 0x41a6, + 0x41c6, 0x41e6, 0x4206, 0x4224, 0x4242, 0x4260, 0x427e, 0x429c, + 0x42ba, 0x42d8, 0x42f6, 0x4314, 0x4332, 0x4350, 0x436e, 0x438c, + 0x43aa, 0x43c8, 0x43e6, 0x4404, 0x4422, 0x4440, 0x445e, 0x447c, + 0x4498, 0x44b4, 0x44d0, 0x44ec, 0x4508, 0x4524, 0x4540, 0x455c, + 0x4578, 0x4594, 0x45b0, 0x45cc, 0x45e8, 0x4604, 0x4620, 0x463c, + 0x4658, 0x4674, 0x4690, 0x46ac, 0x46c8, 0x46e4, 0x4700, 0x471c, + 0x4738, 0x4754, 0x4778, 0x479c, 0x47c0, 0x47e4, 0x4808, 0x482c, + // Entry 68C0 - 68FF + 0x4850, 0x4874, 0x4898, 0x48bc, 0x48e0, 0x4904, 0x4928, 0x494c, + 0x4970, 0x4994, 0x49b8, 0x49dc, 0x4a00, 0x4a22, 0x4a44, 0x4a66, + 0x4a88, 0x4aaa, 0x4acc, 0x4aee, 0x4b10, 0x4b32, 0x4b54, 0x4b76, + 0x4b98, 0x4bba, 0x4bdc, 0x4bfe, 0x4c20, 0x4c42, 0x4c64, 0x4c86, + 0x4ca8, 0x4cca, 0x4cec, 0x4d0e, 0x4d30, 0x4d52, 0x4d74, 0x4d97, + 0x4dba, 0x4ddd, 0x4e00, 0x4e23, 0x4e46, 0x4e69, 0x4e8c, 0x4eaf, + 0x4ed2, 0x4ef5, 0x4f18, 0x4f3b, 0x4f5e, 0x4f81, 0x4fa4, 0x4fc7, + 0x4fea, 0x500d, 0x5030, 0x5053, 0x5076, 0x5099, 0x50bc, 0x50df, + // Entry 6900 - 693F + 0x5102, 0x5123, 0x5144, 0x5165, 0x5186, 0x51a7, 0x51c8, 0x51e9, + 0x520a, 0x522b, 0x524c, 0x526d, 0x528e, 0x52af, 0x52d0, 0x52f1, + 0x5312, 0x5333, 0x5354, 0x5375, 0x5396, 0x53b7, 0x53d8, 0x53f9, + 0x541a, 0x543b, 0x545c, 0x547d, 0x549e, 0x54bf, 0x54e0, 0x5501, + 0x5522, 0x5543, 0x5564, 0x5585, 0x55a6, 0x55c7, 0x55e8, 0x5609, + 0x562a, 0x564b, 0x566c, 0x568d, 0x56ae, 0x56cf, 0x56f0, 0x5711, + 0x5732, 0x5753, 0x5774, 0x5795, 0x57b6, 0x57d5, 0x57f4, 0x5813, + 0x5832, 0x5851, 0x5870, 0x588f, 0x58ae, 0x58cd, 0x58ec, 0x590b, + // Entry 6940 - 697F + 0x592a, 0x5949, 0x5968, 0x5987, 0x59a6, 0x59c5, 0x59e4, 0x5a03, + 0x5a22, 0x5a41, 0x5a60, 0x5a7f, 0x5a9e, 0x5abd, 0x5adc, 0x5b02, + 0x5b28, 0x5b4e, 0x5b74, 0x5b9a, 0x5bc0, 0x5be6, 0x5c0c, 0x5c32, + 0x5c58, 0x5c7e, 0x5ca4, 0x5cca, 0x5cf0, 0x5d16, 0x5d3c, 0x5d62, + 0x5d88, 0x5dae, 0x5dd4, 0x5dfa, 0x5e20, 0x5e46, 0x5e6c, 0x5e92, + 0x5eb8, 0x5edc, 0x5f00, 0x5f24, 0x5f48, 0x5f6c, 0x5f90, 0x5fb4, + 0x5fd8, 0x5ffc, 0x6020, 0x6044, 0x6068, 0x608c, 0x60b0, 0x60d4, + 0x60f8, 0x611c, 0x6140, 0x6164, 0x6188, 0x61ac, 0x61d0, 0x61f4, + // Entry 6980 - 69BF + 0x6218, 0x623c, 0x6260, 0x6288, 0x62b0, 0x62d8, 0x6300, 0x6328, + 0x6350, 0x6378, 0x63a0, 0x63c8, 0x63f0, 0x6418, 0x6440, 0x6468, + 0x6490, 0x64b8, 0x64e0, 0x6508, 0x6530, 0x6558, 0x6580, 0x65a8, + 0x65d0, 0x65f8, 0x6620, 0x6648, 0x6670, 0x6696, 0x66bc, 0x66e2, + 0x6708, 0x672e, 0x6754, 0x677a, 0x67a0, 0x67c6, 0x67ec, 0x6812, + 0x6838, 0x685e, 0x6884, 0x68aa, 0x68d0, 0x68f6, 0x691c, 0x6942, + 0x6968, 0x698e, 0x69b4, 0x69da, 0x6a00, 0x6a26, 0x6a4c, 0x6a79, + 0x6aa6, 0x6ad3, 0x6b00, 0x6b2d, 0x6b5a, 0x6b87, 0x6bb4, 0x6be1, + // Entry 69C0 - 69FF + 0x6c0e, 0x6c3b, 0x6c68, 0x6c95, 0x6cc2, 0x6cef, 0x6d1c, 0x6d49, + 0x6d76, 0x6da3, 0x6dd0, 0x6dfd, 0x6e2a, 0x6e57, 0x6e84, 0x6eb1, + 0x6ede, 0x6f09, 0x6f34, 0x6f5f, 0x6f8a, 0x6fb5, 0x6fe0, 0x700b, + 0x7036, 0x7061, 0x708c, 0x70b7, 0x70e2, 0x710d, 0x7138, 0x7163, + 0x718e, 0x71b9, 0x71e4, 0x720f, 0x723a, 0x7265, 0x7290, 0x72bb, + 0x72e6, 0x7311, 0x733c, 0x735c, 0x737c, 0x739c, 0x73bc, 0x73dc, + 0x73fc, 0x741c, 0x743c, 0x745c, 0x747c, 0x749c, 0x74bc, 0x74dc, + 0x74fc, 0x751c, 0x753c, 0x755c, 0x757c, 0x759c, 0x75bc, 0x75dc, + // Entry 6A00 - 6A3F + 0x75fc, 0x761c, 0x763c, 0x765c, 0x767c, 0x769a, 0x76b8, 0x76d6, + 0x76f4, 0x7712, 0x7730, 0x774e, 0x776c, 0x778a, 0x77a8, 0x77c6, + 0x77e4, 0x7802, 0x7820, 0x783e, 0x785c, 0x787a, 0x7898, 0x78b6, + 0x78d4, 0x78f2, 0x7910, 0x792e, 0x794c, 0x796a, 0x7988, 0x79ab, + 0x79ce, 0x79ed, 0x7a0b, 0x7a2a, 0x7a49, 0x7a6a, 0x7a88, 0x7aa5, + 0x7ac4, 0x7ae2, 0x7b01, 0x7b20, 0x7b3c, 0x7b58, 0x7b74, 0x7b95, + 0x7bb1, 0x7bce, 0x7bf4, 0x7c13, 0x7c30, 0x7c51, 0x7c6e, 0x7c8b, + 0x7ca8, 0x7cc7, 0x7cde, 0x7cfb, 0x7d17, 0x7d34, 0x7d51, 0x7d70, + // Entry 6A40 - 6A7F + 0x7d8c, 0x7da7, 0x7dc4, 0x7de0, 0x7dfd, 0x7e1a, 0x7e34, 0x7e4e, + 0x7e68, 0x7e87, 0x7ea1, 0x7ebc, 0x7edf, 0x7efc, 0x7f17, 0x7f36, + 0x7f51, 0x7f6c, 0x7f87, 0x7fa4, 0x7fca, 0x7fea, 0x8008, 0x8026, + 0x8042, 0x805e, 0x8079, 0x809a, 0x80ba, 0x80db, 0x80fc, 0x811f, + 0x813f, 0x815e, 0x817f, 0x819f, 0x81c0, 0x81e1, 0x81ff, 0x821d, + 0x823b, 0x825e, 0x827c, 0x829b, 0x82c3, 0x82e4, 0x8303, 0x8326, + 0x8345, 0x8364, 0x8383, 0x83a4, 0x83bd, 0x83dc, 0x83fa, 0x8419, + 0x8438, 0x8459, 0x8477, 0x8494, 0x84b3, 0x84d1, 0x84f0, 0x850f, + // Entry 6A80 - 6ABF + 0x852b, 0x8547, 0x8563, 0x8584, 0x85a0, 0x85bd, 0x85e2, 0x8601, + 0x861e, 0x863f, 0x865c, 0x8679, 0x8696, 0x86b5, 0x86dd, 0x86ff, + 0x871f, 0x873f, 0x875d, 0x877b, 0x8798, 0x87be, 0x87e3, 0x8809, + 0x882f, 0x8857, 0x887c, 0x88a0, 0x88c6, 0x88eb, 0x8911, 0x8937, + 0x895a, 0x897d, 0x89a0, 0x89c8, 0x89eb, 0x8a0f, 0x8a3c, 0x8a62, + 0x8a86, 0x8aae, 0x8ad2, 0x8af6, 0x8b1a, 0x8b40, 0x8b5e, 0x8b82, + 0x8ba5, 0x8bc9, 0x8bed, 0x8c13, 0x8c36, 0x8c58, 0x8c7c, 0x8c9f, + 0x8cc3, 0x8ce7, 0x8d08, 0x8d29, 0x8d4a, 0x8d70, 0x8d91, 0x8db3, + // Entry 6AC0 - 6AFF + 0x8ddd, 0x8e01, 0x8e23, 0x8e49, 0x8e6b, 0x8e8d, 0x8eaf, 0x8ed3, + 0x8f00, 0x8f27, 0x8f4c, 0x8f71, 0x8f94, 0x8fb7, 0x8fd9, 0x9003, + 0x902c, 0x9056, 0x9080, 0x90ac, 0x90d5, 0x90fd, 0x9127, 0x9150, + 0x917a, 0x91a4, 0x91cb, 0x91f2, 0x9219, 0x9245, 0x926c, 0x9294, + 0x92c5, 0x92ef, 0x9317, 0x9343, 0x936b, 0x9393, 0x93bb, 0x93e5, + 0x9407, 0x942f, 0x9456, 0x947e, 0x94a6, 0x94d0, 0x94f7, 0x951d, + 0x9545, 0x956c, 0x9594, 0x95bc, 0x95e1, 0x9606, 0x962b, 0x9655, + 0x967a, 0x96a0, 0x96ce, 0x96f6, 0x971c, 0x9746, 0x976c, 0x9792, + // Entry 6B00 - 6B3F + 0x97b8, 0x97e0, 0x9811, 0x983c, 0x9865, 0x988e, 0x98b5, 0x98dc, + 0x9902, 0x9933, 0x9963, 0x9994, 0x99c5, 0x99f8, 0x9a28, 0x9a57, + 0x9a88, 0x9ab8, 0x9ae9, 0x9b1a, 0x9b48, 0x9b76, 0x9ba4, 0x9bd7, + 0x9c05, 0x9c34, 0x9c6c, 0x9c9d, 0x9ccc, 0x9cff, 0x9d2e, 0x9d5d, + 0x9d8c, 0x9dbd, 0x9de6, 0x9e15, 0x9e43, 0x9e72, 0x9ea1, 0x9ed2, + 0x9f00, 0x9f2d, 0x9f5c, 0x9f8a, 0x9fb9, 0x9fe8, 0xa014, 0xa040, + 0xa06c, 0xa09d, 0xa0c9, 0xa0f6, 0xa12b, 0xa15a, 0xa187, 0xa1b8, + 0xa1e5, 0xa212, 0xa23f, 0xa26e, 0xa2a6, 0xa2d8, 0xa308, 0xa338, + // Entry 6B40 - 6B7F + 0xa366, 0xa394, 0xa3c1, 0xa3e2, 0xa401, 0xa41d, 0xa438, 0xa453, + 0xa470, 0xa48c, 0xa4a8, 0xa4c3, 0xa4e0, 0xa4fd, 0xa519, 0xa53e, + 0xa562, 0xa586, 0xa5ac, 0xa5d1, 0xa5f6, 0xa61a, 0xa640, 0xa666, + 0xa68b, 0xa6ad, 0xa6ce, 0xa6ef, 0xa712, 0xa734, 0xa756, 0xa777, + 0xa79a, 0xa7bd, 0xa7df, 0xa806, 0xa82c, 0xa852, 0xa87a, 0xa8a1, + 0xa8c8, 0xa8ee, 0xa916, 0xa93e, 0xa965, 0xa986, 0xa9a6, 0xa9c6, + 0xa9e8, 0xaa09, 0xaa2a, 0xaa4a, 0xaa6c, 0xaa8e, 0xaaaf, 0xaaca, + 0xaae7, 0xab01, 0xab1c, 0xab38, 0xab54, 0xab74, 0xab96, 0xabc2, + // Entry 6B80 - 6BBF + 0xabec, 0xac0e, 0xac30, 0xac56, 0xac79, 0xac9b, 0xacbf, 0xace6, + 0xad18, 0xad41, 0xad6d, 0xad99, 0xadc5, 0xadfc, 0xae34, 0xae67, + 0xae9a, 0xaec4, 0xaef0, 0xaf1c, 0xaf48, 0xaf70, 0xaf9a, 0xafd0, + 0xb006, 0xb033, 0xb06e, 0xb0a5, 0xb0e1, 0xb118, 0xb152, 0xb181, + 0xb1b1, 0xb1e0, 0xb20f, 0xb248, 0xb27f, 0xb2c0, 0xb2fc, 0xb32e, + 0xb360, 0xb39e, 0xb3d3, 0xb40d, 0xb44e, 0xb480, 0xb4b2, 0xb4e5, + 0xb51c, 0xb552, 0xb587, 0xb5ba, 0xb5f3, 0xb626, 0xb655, 0xb68b, + 0xb6c6, 0xb6f8, 0xb72e, 0xb750, 0xb777, 0xb7a0, 0xb7cc, 0xb7fe, + // Entry 6BC0 - 6BFF + 0xb82a, 0xb85b, 0xb888, 0xb8b1, 0xb8df, 0xb912, 0xb94a, 0xb978, + 0xb9ab, 0xb9e2, 0xba0a, 0xba37, 0xba66, 0xba8f, 0xbabf, 0xbafa, + 0xbb33, 0xbb48, 0xbb72, 0xbb8c, 0xbbac, 0xbbd1, 0xbbf1, 0xbc14, + 0xbc40, 0xbc62, 0xbc8f, 0xbcc1, 0xbce3, 0xbcf8, 0xbd18, 0xbd36, + 0xbd59, 0xbd77, 0xbd8c, 0xbda5, 0xbdb9, 0xbddd, 0xbdfc, 0xbe1e, + 0xbe3b, 0xbe62, 0xbe84, 0xbea2, 0xbebb, 0xbed2, 0xbee7, 0xbf07, + 0xbf25, 0xbf48, 0xbf63, 0xbf8c, 0xbfa2, 0xbfbe, 0xbfe4, 0xc005, + 0xc029, 0xc048, 0xc078, 0xc0a8, 0xc0be, 0xc0e5, 0xc10e, 0xc136, + // Entry 6C00 - 6C3F + 0xc15e, 0xc17b, 0xc1a7, 0xc1d8, 0xc20a, 0xc22b, 0xc25c, 0xc28b, + 0xc2bb, 0xc2da, 0xc305, 0xc326, 0xc345, 0xc365, 0xc390, 0xc3b1, + 0xc3db, 0xc3fd, 0xc420, 0xc448, 0xc471, 0xc4aa, 0xc4df, 0xc501, + 0xc525, 0xc548, 0xc56b, 0xc594, 0xc5bf, 0xc5e9, 0xc604, 0xc62e, + 0xc65d, 0xc68e, 0xc6ad, 0xc6e5, 0xc71e, 0xc73b, 0xc764, 0xc785, + 0xc7a8, 0xc7c9, 0xc7eb, 0xc80c, 0xc837, 0xc868, 0xc888, 0xc8a8, + 0xc8c8, 0xc8ef, 0xc918, 0xc946, 0xc971, 0xc99b, 0xc9c8, 0xc9ee, + 0xca16, 0xca42, 0xca6a, 0xca8b, 0xcaa8, 0xcac7, 0xcae8, 0xcb13, + // Entry 6C40 - 6C7F + 0xcb3d, 0xcb5f, 0xcb88, 0xcbab, 0xcbd3, 0xcbfd, 0xcc2c, 0xcc53, + 0xcc7c, 0xcca9, 0xccd5, 0xccfe, 0xcd2d, 0xcd5f, 0xcd96, 0xcdcc, + 0xce01, 0xce33, 0xce56, 0xce7c, 0xcea3, 0xced8, 0xcf0e, 0xcf3f, + 0xcf70, 0xcfa0, 0xcfd2, 0xd00a, 0xd03e, 0xd064, 0xd08e, 0xd0c2, + 0xd0f6, 0xd129, 0xd151, 0xd171, 0xd196, 0xd1bd, 0xd1e5, 0xd207, + 0xd22f, 0xd255, 0xd27a, 0xd29c, 0xd2b7, 0xd2d7, 0xd300, 0xd32a, + 0xd34f, 0xd372, 0xd3a2, 0xd3d1, 0xd400, 0xd42d, 0xd459, 0xd488, + 0xd4b6, 0xd4eb, 0xd500, 0xd51a, 0xd532, 0xd54c, 0xd565, 0xd57d, + // Entry 6C80 - 6CBF + 0xd597, 0xd5b0, 0xd5c9, 0xd5e4, 0xd5fe, 0xd616, 0xd630, 0xd649, + 0xd65f, 0xd677, 0xd68e, 0xd6a9, 0xd6c4, 0xd6e4, 0xd704, 0xd726, + 0xd748, 0xd766, 0xd784, 0xd7a2, 0xd7c2, 0xd7e2, 0xd7fe, 0xd823, + 0xd84b, 0xd873, 0xd89b, 0xd8c5, 0xd8f9, 0xd92d, 0xd95d, 0xd98a, + 0xd9b8, 0xd9ec, 0xda21, 0xda55, 0xda8b, 0xdabb, 0xdae9, 0xdb19, + 0xdb4a, 0xdb86, 0xdbaa, 0xdbe1, 0xdc11, 0xdc42, 0xdc7e, 0xdca7, + 0xdcd1, 0xdcfa, 0xdd25, 0xdd51, 0xdd7c, 0xddaa, 0xddd4, 0xddff, + 0xde29, 0xde51, 0xde7a, 0xdea2, 0xdecd, 0xdef9, 0xdf24, 0xdf4e, + // Entry 6CC0 - 6CFF + 0xdf79, 0xdfa3, 0xdfd9, 0xe00f, 0xe04a, 0xe081, 0xe0b8, 0xe0f4, + 0xe118, 0xe146, 0xe174, 0xe1a2, 0xe1ca, 0xe1f3, 0xe21b, 0xe245, + 0xe270, 0xe29c, 0xe2c7, 0xe2f4, 0xe324, 0xe355, 0xe385, 0xe3b7, + 0xe3ea, 0xe41e, 0xe451, 0xe486, 0xe4bb, 0xe4f1, 0xe526, 0xe55d, + 0xe58e, 0xe5bd, 0xe5ee, 0xe620, 0xe65d, 0xe682, 0xe6ba, 0xe6eb, + 0xe726, 0xe763, 0xe787, 0xe7b3, 0xe7e0, 0xe80c, 0xe831, 0xe85a, + 0xe884, 0xe8ad, 0xe8d9, 0xe906, 0xe932, 0xe95d, 0xe989, 0xe9b4, + 0xe9ec, 0xea24, 0xea61, 0xea98, 0xeacf, 0xeb0b, 0xeb30, 0xeb62, + // Entry 6D00 - 6D3F + 0xeb95, 0xebc7, 0xebfb, 0xec31, 0xec68, 0xec9e, 0xecd6, 0xed15, + 0xed55, 0xed7e, 0xeda8, 0xedd1, 0xedfa, 0xee24, 0xee4d, 0xee7d, + 0xeeb3, 0xeeea, 0xef20, 0xef56, 0xef8d, 0xefc3, 0xeff5, 0xf026, + 0xf058, 0xf07d, 0xf0a2, 0xf0ca, 0xf0f0, 0xf127, 0xf15d, 0xf193, + 0xf1c9, 0xf201, 0xf239, 0xf276, 0xf2a8, 0xf2d9, 0xf30a, 0xf33b, + 0xf36e, 0xf3a1, 0xf3d9, 0xf410, 0xf448, 0xf47f, 0xf4ba, 0xf4f5, + 0xf536, 0xf577, 0xf5b8, 0xf5f9, 0xf63a, 0xf67b, 0xf6bc, 0xf6fd, + 0xf737, 0xf771, 0xf7a7, 0xf7dd, 0xf818, 0xf851, 0xf88a, 0xf8c9, + // Entry 6D40 - 6D7F + 0xf908, 0xf94e, 0xf994, 0xf9d3, 0xfa12, 0xfa51, 0xfa90, 0xfac8, + 0xfb00, 0xfb34, 0xfb68, 0xfba1, 0xfbcc, 0xfbf8, 0xfc23, 0xfc50, + 0xfc7e, 0xfca8, 0xfcd2, 0xfcfc, 0xfd26, 0xfd50, 0xfd76, 0xfd9c, + 0xfdc7, 0xfdf7, 0xfe2d, 0xfe64, 0xfe9a, 0xfed1, 0xff15, 0xff5a, + 0xff9e, 0xffe2, 0x0027, 0x006b, 0x00a3, 0x00db, 0x011b, 0x015b, + 0x018f, 0x01c3, 0x0205, 0x0247, 0x026a, 0x028d, 0x02a5, 0x02bd, + 0x02d6, 0x02f1, 0x0311, 0x033d, 0x0361, 0x037c, 0x038c, 0x03a0, + 0x03cc, 0x03f4, 0x0421, 0x044a, 0x0474, 0x0494, 0x04cc, 0x04ff, + // Entry 6D80 - 6DBF + 0x053a, 0x055a, 0x057f, 0x05a1, 0x05c9, 0x05f1, 0x0617, 0x063d, + 0x0659, 0x0675, 0x0692, 0x06a7, 0x06c0, 0x06d7, 0x06f3, 0x0711, + 0x072b, 0x0745, 0x0761, 0x0783, 0x0797, 0x07af, 0x07c9, 0x07e9, + 0x080f, 0x083c, 0x086e, 0x0895, 0x08c3, 0x08f6, 0x091a, 0x093f, + 0x0965, 0x097e, 0x0998, 0x09b1, 0x09ce, 0x09ed, 0x0a09, 0x0a19, + 0x0a31, 0x0a49, 0x0a62, 0x0a7a, 0x0a95, 0x0aaf, 0x0ad3, 0x0af7, + 0x0b10, 0x0b29, 0x0b49, 0x0b69, 0x0b89, 0x0ba0, 0x0bc0, 0x0bdc, + 0x0bf3, 0x0c13, 0x0c2f, 0x0c4c, 0x0c6a, 0x0c89, 0x0ca4, 0x0cc8, + // Entry 6DC0 - 6DFF + 0x0ce8, 0x0d08, 0x0d31, 0x0d56, 0x0d6c, 0x0d8a, 0x0da9, 0x0dc0, + 0x0ddf, 0x0dfd, 0x0e1e, 0x0e3e, 0x0e5e, 0x0e77, 0x0e98, 0x0eb9, + 0x0edc, 0x0efb, 0x0f1e, 0x0f4a, 0x0f71, 0x0f97, 0x0fbd, 0x0fe3, + 0x0ff4, 0x100e, 0x1029, 0x104d, 0x1066, 0x1088, 0x10a3, 0x10c5, + 0x10e8, 0x10f8, 0x1108, 0x111e, 0x113c, 0x115e, 0x1185, 0x11ad, + 0x11d4, 0x1200, 0x1227, 0x124c, 0x127a, 0x1296, 0x12af, 0x12c8, + 0x12e1, 0x12fa, 0x1313, 0x132c, 0x1345, 0x1357, 0x137b, 0x13a0, + 0x13bb, 0x13d5, 0x13ef, 0x140d, 0x1427, 0x1448, 0x1459, 0x146e, + // Entry 6E00 - 6E3F + 0x1483, 0x1494, 0x14ab, 0x14c6, 0x14e1, 0x14fc, 0x1517, 0x1532, + 0x1551, 0x1570, 0x158f, 0x15ae, 0x15cd, 0x15ec, 0x160b, 0x162a, + 0x164a, 0x166a, 0x168a, 0x16aa, 0x16ca, 0x16ea, 0x170a, 0x1729, + 0x1749, 0x1769, 0x178c, 0x17ad, 0x17ce, 0x17f1, 0x1813, 0x1833, + 0x185b, 0x1878, 0x189a, 0x18ba, 0x18dd, 0x1900, 0x1921, 0x1940, + 0x1962, 0x1983, 0x19a4, 0x19c6, 0x19e5, 0x1a06, 0x1a26, 0x1a46, + 0x1a65, 0x1a87, 0x1aa6, 0x1ac6, 0x1ae6, 0x1b06, 0x1b24, 0x1b49, + 0x1b67, 0x1b94, 0x1bb7, 0x1be2, 0x1c02, 0x1c20, 0x1c3e, 0x1c5c, + // Entry 6E40 - 6E7F + 0x1c7b, 0x1c99, 0x1cb8, 0x1cd6, 0x1cf5, 0x1d13, 0x1d31, 0x1d4f, + 0x1d6e, 0x1d8c, 0x1dab, 0x1dc9, 0x1de8, 0x1e07, 0x1e26, 0x1e45, + 0x1e64, 0x1e83, 0x1ea2, 0x1ec1, 0x1ee0, 0x1eff, 0x1f1f, 0x1f3f, + 0x1f5d, 0x1f7b, 0x1f99, 0x1fb8, 0x1fd6, 0x1ff5, 0x2013, 0x2030, + 0x204d, 0x206a, 0x2088, 0x20a5, 0x20c3, 0x20e0, 0x20fe, 0x211c, + 0x213a, 0x2158, 0x2176, 0x2194, 0x21b2, 0x21d0, 0x21ef, 0x220d, + 0x222c, 0x224a, 0x2269, 0x2287, 0x22a5, 0x22c3, 0x22e2, 0x2300, + 0x231f, 0x233d, 0x2360, 0x237e, 0x239c, 0x23ba, 0x23d9, 0x23f8, + // Entry 6E80 - 6EBF + 0x2416, 0x2434, 0x2452, 0x2470, 0x248f, 0x24ad, 0x24cc, 0x24ea, + 0x2508, 0x2526, 0x2544, 0x2563, 0x2581, 0x25a0, 0x25be, 0x25e1, + 0x25ff, 0x261d, 0x263b, 0x265a, 0x2678, 0x2697, 0x26b5, 0x26d3, + 0x26f1, 0x270f, 0x272e, 0x274c, 0x276b, 0x2789, 0x27a8, 0x27c7, + 0x27e6, 0x2805, 0x2824, 0x2843, 0x2862, 0x2880, 0x289e, 0x28bc, + 0x28db, 0x28f9, 0x2918, 0x2936, 0x2956, 0x2976, 0x2995, 0x29b4, + 0x29d3, 0x29f2, 0x2a11, 0x2a31, 0x2a51, 0x2a71, 0x2a91, 0x2ab2, + 0x2ad2, 0x2af3, 0x2b13, 0x2b34, 0x2b55, 0x2b7a, 0x2ba0, 0x2bc5, + // Entry 6EC0 - 6EFF + 0x2be3, 0x2c01, 0x2c1f, 0x2c3e, 0x2c5e, 0x2c7e, 0x2c9e, 0x2cbe, + 0x2cdf, 0x2cfd, 0x2d1b, 0x2d39, 0x2d58, 0x2d76, 0x2d95, 0x2db3, + 0x2dd2, 0x2df1, 0x2e10, 0x2e30, 0x2e50, 0x2e6f, 0x2e8f, 0x2eae, + 0x2ece, 0x2ef2, 0x2f17, 0x2f3b, 0x2f5a, 0x2f79, 0x2f98, 0x2fb8, + 0x2fd7, 0x2ff7, 0x3016, 0x3035, 0x3054, 0x3073, 0x3093, 0x30b2, + 0x30d2, 0x30f1, 0x310f, 0x312e, 0x314d, 0x316c, 0x318c, 0x31ab, + 0x31cb, 0x31ea, 0x3209, 0x3228, 0x3248, 0x3268, 0x3286, 0x32a4, + 0x32c2, 0x32e1, 0x32ff, 0x331e, 0x333c, 0x335c, 0x337c, 0x339c, + // Entry 6F00 - 6F3F + 0x33bc, 0x33dc, 0x33f3, 0x340a, 0x3423, 0x343b, 0x3453, 0x346a, + 0x3483, 0x349c, 0x34b4, 0x34d8, 0x34fb, 0x3522, 0x354a, 0x3576, + 0x35a6, 0x35cd, 0x35e6, 0x3600, 0x3619, 0x3632, 0x3649, 0x3668, + 0x367f, 0x3697, 0x36ae, 0x36c4, 0x36db, 0x36f1, 0x3707, 0x371f, + 0x3737, 0x374f, 0x3767, 0x377f, 0x3796, 0x37ac, 0x37c5, 0x37dd, + 0x37f4, 0x380d, 0x3824, 0x383c, 0x3853, 0x386b, 0x3882, 0x389a, + 0x38b2, 0x38ca, 0x38e2, 0x38fa, 0x3911, 0x3929, 0x3940, 0x3957, + 0x396c, 0x3989, 0x399e, 0x39b4, 0x39c9, 0x39dd, 0x39f2, 0x3a06, + // Entry 6F40 - 6F7F + 0x3a1a, 0x3a30, 0x3a46, 0x3a5c, 0x3a72, 0x3a88, 0x3a9d, 0x3ab1, + 0x3ac8, 0x3ade, 0x3af3, 0x3b0a, 0x3b1f, 0x3b35, 0x3b4a, 0x3b60, + 0x3b75, 0x3b8b, 0x3ba1, 0x3bb7, 0x3bcd, 0x3be3, 0x3bf8, 0x3c0e, + 0x3c23, 0x3c2e, 0x3c46, 0x3c67, 0x3c72, 0x3c82, 0x3c91, 0x3ca0, + 0x3cb1, 0x3cc1, 0x3cd1, 0x3ce0, 0x3cf1, 0x3d02, 0x3d12, 0x3d30, + 0x3d4b, 0x3d63, 0x3d7a, 0x3d92, 0x3da9, 0x3dc0, 0x3dd8, 0x3def, + 0x3e06, 0x3e1d, 0x3e34, 0x3e4b, 0x3e63, 0x3e7b, 0x3e93, 0x3eaa, + 0x3ec1, 0x3ed8, 0x3eef, 0x3f06, 0x3f1f, 0x3f36, 0x3f4e, 0x3f66, + // Entry 6F80 - 6FBF + 0x3f7e, 0x3f95, 0x3fac, 0x3fc5, 0x3fe4, 0x4004, 0x4023, 0x4042, + 0x4061, 0x4081, 0x40a0, 0x40bf, 0x40de, 0x40fd, 0x411c, 0x413c, + 0x415c, 0x417c, 0x419b, 0x41ba, 0x41d9, 0x41f8, 0x4219, 0x4238, + 0x4258, 0x4278, 0x4297, 0x42b8, 0x42d7, 0x42f5, 0x4313, 0x4331, + 0x4350, 0x436f, 0x438d, 0x43ab, 0x43c9, 0x43e9, 0x4408, 0x4426, + 0x4446, 0x446d, 0x4493, 0x44b4, 0x44d6, 0x44f7, 0x4518, 0x4539, + 0x455a, 0x457b, 0x459d, 0x45bf, 0x45e1, 0x4602, 0x4623, 0x4644, + 0x4665, 0x4688, 0x46a9, 0x46cb, 0x46ed, 0x470e, 0x472f, 0x4752, + // Entry 6FC0 - 6FFF + 0x477b, 0x47a4, 0x47c3, 0x47e1, 0x4800, 0x481e, 0x483c, 0x485a, + 0x4879, 0x4897, 0x48b5, 0x48d3, 0x48f1, 0x4910, 0x492f, 0x494e, + 0x496c, 0x498a, 0x49a8, 0x49c6, 0x49e4, 0x4a04, 0x4a22, 0x4a41, + 0x4a60, 0x4a7f, 0x4a9d, 0x4abb, 0x4adb, 0x4b00, 0x4b26, 0x4b4b, + 0x4b70, 0x4b96, 0x4bbb, 0x4be0, 0x4c05, 0x4c2a, 0x4c50, 0x4c76, + 0x4c9c, 0x4cc1, 0x4ce6, 0x4d0b, 0x4d30, 0x4d55, 0x4d7c, 0x4da1, + 0x4dc7, 0x4ded, 0x4e13, 0x4e38, 0x4e5d, 0x4e84, 0x4ebb, 0x4ee4, + 0x4efa, 0x4f11, 0x4f27, 0x4f3e, 0x4f55, 0x4f6e, 0x4f87, 0x4fa5, + // Entry 7000 - 703F + 0x4fc3, 0x4fe3, 0x5002, 0x5021, 0x503f, 0x505f, 0x507f, 0x509e, + 0x50b9, 0x50d4, 0x50f1, 0x510d, 0x5129, 0x5144, 0x5161, 0x517e, + 0x519a, 0x51b5, 0x51d0, 0x51ed, 0x5209, 0x5225, 0x5240, 0x525d, + 0x527a, 0x5296, 0x52a7, 0x52ba, 0x52cd, 0x52e7, 0x52fa, 0x530d, + 0x5320, 0x5333, 0x5345, 0x5356, 0x5371, 0x538d, 0x53a9, 0x53c5, + 0x53e1, 0x53fd, 0x5419, 0x5435, 0x5451, 0x546d, 0x5489, 0x54a5, + 0x54c1, 0x54dd, 0x54f9, 0x5515, 0x5531, 0x554d, 0x5569, 0x5585, + 0x55a1, 0x55bd, 0x55d9, 0x55f5, 0x5611, 0x562d, 0x5649, 0x5665, + // Entry 7040 - 707F + 0x5681, 0x569d, 0x56b9, 0x56d5, 0x56f1, 0x570d, 0x5729, 0x5745, + 0x5761, 0x577d, 0x5799, 0x57b5, 0x57d1, 0x57ed, 0x5809, 0x5825, + 0x5841, 0x585d, 0x5879, 0x5895, 0x58b1, 0x58cd, 0x58e6, 0x5900, + 0x591a, 0x5934, 0x594e, 0x5968, 0x5982, 0x599c, 0x59b6, 0x59d0, + 0x59ea, 0x5a04, 0x5a1e, 0x5a38, 0x5a52, 0x5a6c, 0x5a86, 0x5aa0, + 0x5aba, 0x5ad4, 0x5aee, 0x5b08, 0x5b22, 0x5b3c, 0x5b56, 0x5b70, + 0x5b8a, 0x5ba4, 0x5bbe, 0x5bd8, 0x5bf2, 0x5c0c, 0x5c26, 0x5c40, + 0x5c5a, 0x5c74, 0x5c8e, 0x5ca8, 0x5cc2, 0x5cdc, 0x5cf6, 0x5d10, + // Entry 7080 - 70BF + 0x5d2a, 0x5d44, 0x5d5e, 0x5d78, 0x5d92, 0x5dac, 0x5dc6, 0x5de0, + 0x5df1, 0x5e0b, 0x5e25, 0x5e41, 0x5e5c, 0x5e77, 0x5e91, 0x5ead, + 0x5ec9, 0x5ee4, 0x5efe, 0x5f19, 0x5f36, 0x5f52, 0x5f6d, 0x5f87, + 0x5fa1, 0x5fbd, 0x5fd8, 0x5ff3, 0x600d, 0x6029, 0x6045, 0x6060, + 0x607a, 0x6095, 0x60b2, 0x60ce, 0x60e9, 0x60ff, 0x611b, 0x6137, + 0x6155, 0x6172, 0x618f, 0x61ab, 0x61c9, 0x61e7, 0x6204, 0x6220, + 0x623d, 0x625c, 0x627a, 0x6297, 0x62af, 0x62c8, 0x62e1, 0x62fc, + 0x6316, 0x6330, 0x6349, 0x6364, 0x637f, 0x6399, 0x63b2, 0x63cc, + // Entry 70C0 - 70FF + 0x63e8, 0x6403, 0x641d, 0x6435, 0x6446, 0x645a, 0x646e, 0x6482, + 0x6496, 0x64aa, 0x64be, 0x64d2, 0x64e6, 0x64fa, 0x650f, 0x6524, + 0x6539, 0x654e, 0x6563, 0x6578, 0x658d, 0x65a2, 0x65b7, 0x65cc, + 0x65e1, 0x65f6, 0x660a, 0x661a, 0x6629, 0x6638, 0x6649, 0x6659, + 0x6669, 0x6678, 0x6689, 0x669a, 0x66aa, 0x66cf, 0x66fd, 0x6721, + 0x6745, 0x6769, 0x678d, 0x67b1, 0x67d5, 0x67f9, 0x681d, 0x6841, + 0x6865, 0x6889, 0x68ad, 0x68d1, 0x68f5, 0x6919, 0x693d, 0x6961, + 0x6985, 0x69a9, 0x69cd, 0x69f1, 0x6a15, 0x6a39, 0x6a5d, 0x6a81, + // Entry 7100 - 713F + 0x6aa5, 0x6ad4, 0x6af9, 0x6b1e, 0x6b28, 0x6b32, 0x6b50, 0x6b6e, + 0x6b8c, 0x6baa, 0x6bc8, 0x6be6, 0x6c04, 0x6c22, 0x6c40, 0x6c5e, + 0x6c7c, 0x6c9a, 0x6cb8, 0x6cd6, 0x6cf4, 0x6d12, 0x6d30, 0x6d4e, + 0x6d6c, 0x6d8a, 0x6da8, 0x6dc6, 0x6de4, 0x6e02, 0x6e20, 0x6e3e, + 0x6e48, 0x6e52, 0x6e5c, 0x6e66, 0x6e71, 0x6e7b, 0x6ea2, 0x6ec9, + 0x6ef0, 0x6f17, 0x6f3e, 0x6f65, 0x6f8c, 0x6fb3, 0x6fda, 0x7001, + 0x7028, 0x704f, 0x7076, 0x709d, 0x70c4, 0x70eb, 0x7112, 0x7139, + 0x7160, 0x7187, 0x71ae, 0x71d5, 0x71fc, 0x7223, 0x724a, 0x7271, + // Entry 7140 - 717F + 0x727f, 0x728d, 0x72b4, 0x72db, 0x7302, 0x7329, 0x7350, 0x7377, + 0x739e, 0x73c5, 0x73ec, 0x7413, 0x743a, 0x7461, 0x7488, 0x74af, + 0x74d6, 0x74fd, 0x7524, 0x754b, 0x7572, 0x7599, 0x75c0, 0x75e7, + 0x760e, 0x7635, 0x765c, 0x7683, 0x76b2, 0x76c5, 0x76d8, 0x76eb, + 0x76fe, 0x7711, 0x771a, 0x7724, 0x7730, 0x773c, 0x7746, 0x7751, + 0x775b, 0x7765, 0x7770, 0x7790, 0x779a, 0x77a9, 0x77be, 0x77cb, + 0x77d9, 0x77e8, 0x77fe, 0x7815, 0x7831, 0x7840, 0x785c, 0x7878, + 0x7882, 0x788d, 0x789b, 0x78ab, 0x78b6, 0x78c1, 0x78cc, 0x78ee, + // Entry 7180 - 71BF + 0x7910, 0x7932, 0x7954, 0x7976, 0x7998, 0x79ba, 0x79dc, 0x79fe, + 0x7a20, 0x7a42, 0x7a64, 0x7a86, 0x7aa8, 0x7aca, 0x7aec, 0x7b0e, + 0x7b30, 0x7b52, 0x7b74, 0x7b96, 0x7bb8, 0x7bda, 0x7bfc, 0x7c1e, + 0x7c40, 0x7c54, 0x7c69, 0x7c7c, 0x7c9e, 0x7cc0, 0x7ce2, 0x7cf5, + 0x7d17, 0x7d39, 0x7d5b, 0x7d7d, 0x7d9f, 0x7dc1, 0x7de3, 0x7e05, + 0x7e27, 0x7e49, 0x7e6b, 0x7e8d, 0x7eaf, 0x7ed1, 0x7ef3, 0x7f15, + 0x7f37, 0x7f59, 0x7f7b, 0x7f9d, 0x7fbf, 0x7fe1, 0x8003, 0x8025, + 0x8047, 0x8069, 0x808b, 0x80ad, 0x80cf, 0x80f1, 0x8113, 0x8135, + // Entry 71C0 - 71FF + 0x8157, 0x8179, 0x819b, 0x81bd, 0x81df, 0x8201, 0x8223, 0x8245, + 0x8278, 0x82ab, 0x82de, 0x8311, 0x8344, 0x8377, 0x83aa, 0x83dd, + 0x8410, 0x842b, 0x8443, 0x8458, 0x846d, 0x8484, 0x8499, 0x84b4, + 0x84ca, 0x84d1, 0x84d6, 0x84e5, 0x84f5, 0x850b, 0x8512, 0x8523, + 0x8538, 0x853f, 0x854e, 0x8558, 0x855f, 0x8568, 0x8581, 0x8595, + 0x85af, 0x85c3, 0x85d2, 0x85ed, 0x8606, 0x8620, 0x8630, 0x864a, + 0x8662, 0x867d, 0x868a, 0x869c, 0x86b8, 0x86d3, 0x86e6, 0x86f3, + 0x86ff, 0x870c, 0x8717, 0x8724, 0x872d, 0x8747, 0x875d, 0x877d, + // Entry 7200 - 723F + 0x878c, 0x879b, 0x87af, 0x87c1, 0x87c4, 0x87d5, 0x87dc, 0x87e0, + 0x87e7, 0x87ef, 0x87f7, 0x8805, 0x8813, 0x881c, 0x8822, 0x882c, + 0x8831, 0x883f, 0x8843, 0x884b, 0x8854, 0x885b, 0x8867, 0x8872, + 0x8876, 0x8886, 0x8890, 0x889b, 0x88b2, 0x88ba, 0x88c0, 0x88c9, + 0x88cf, 0x88d4, 0x88de, 0x88e7, 0x88ec, 0x88f2, 0x88fb, 0x8904, + 0x890f, 0x8913, 0x8918, 0x8920, 0x892a, 0x8933, 0x8941, 0x894d, + 0x8958, 0x8964, 0x896d, 0x8978, 0x8986, 0x8993, 0x899c, 0x89a1, + 0x89ad, 0x89c1, 0x89c6, 0x89ca, 0x89cf, 0x89db, 0x89f6, 0x8a04, + // Entry 7240 - 727F + 0x8a0e, 0x8a17, 0x8a1f, 0x8a25, 0x8a32, 0x8a37, 0x8a3f, 0x8a46, + 0x8a4f, 0x8a58, 0x8a61, 0x8a6c, 0x8a73, 0x8a81, 0x8a96, 0x8aa9, + 0x8ab3, 0x8ac1, 0x8acf, 0x8ad7, 0x8ae9, 0x8af4, 0x8b0d, 0x8b25, + 0x8b2c, 0x8b32, 0x8b41, 0x8b4e, 0x8b5c, 0x8b6a, 0x8b7a, 0x8b83, + 0x8b94, 0x8b9b, 0x8ba7, 0x8bb4, 0x8bc1, 0x8bce, 0x8bdd, 0x8beb, + 0x8bf8, 0x8c02, 0x8c17, 0x8c25, 0x8c33, 0x8c4d, 0x8c5f, 0x8c6d, + 0x8c7c, 0x8c97, 0x8ca8, 0x8cb4, 0x8cc1, 0x8cdf, 0x8cfe, 0x8d09, + 0x8d1a, 0x8d28, 0x8d34, 0x8d42, 0x8d57, 0x8d61, 0x8d6d, 0x8d73, + // Entry 7280 - 72BF + 0x8d7c, 0x8d8a, 0x8d91, 0x8d9c, 0x8da2, 0x8daf, 0x8dbe, 0x8dc8, + 0x8dd2, 0x8dde, 0x8de7, 0x8def, 0x8df6, 0x8e0a, 0x8e16, 0x8e2c, + 0x8e35, 0x8e3b, 0x8e4b, 0x8e52, 0x8e58, 0x8e65, 0x8e7c, 0x8e93, + 0x8ea3, 0x8eb6, 0x8ec4, 0x8ecf, 0x8ed5, 0x8edb, 0x8ee7, 0x8eed, + 0x8ef9, 0x8f0a, 0x8f18, 0x8f1f, 0x8f2c, 0x8f32, 0x8f43, 0x8f4d, + 0x8f61, 0x8f6b, 0x8f86, 0x8f9f, 0x8fbb, 0x8fcf, 0x8fd6, 0x8fe9, + 0x8ffe, 0x900d, 0x9016, 0x902d, 0x903f, 0x9045, 0x9052, 0x905f, + 0x9066, 0x9074, 0x9085, 0x9094, 0x90a8, 0x90bc, 0x90c4, 0x90c8, + // Entry 72C0 - 72FF + 0x90e0, 0x90e5, 0x90ef, 0x9100, 0x9106, 0x9116, 0x911d, 0x912c, + 0x913b, 0x914a, 0x9157, 0x9164, 0x9175, 0x9186, 0x918d, 0x919a, + 0x919f, 0x91c0, 0x91cd, 0x91d4, 0x91f7, 0x9218, 0x9239, 0x925a, + 0x927b, 0x927e, 0x9283, 0x9285, 0x9292, 0x9295, 0x929a, 0x92a1, + 0x92a7, 0x92aa, 0x92b0, 0x92b9, 0x92be, 0x92c3, 0x92c8, 0x92cd, + 0x92d0, 0x92d4, 0x92d9, 0x92df, 0x92e6, 0x92ed, 0x92f0, 0x92f3, + 0x92f7, 0x92ff, 0x9306, 0x9312, 0x9315, 0x9318, 0x9320, 0x932b, + 0x932f, 0x933c, 0x9344, 0x934a, 0x9358, 0x9362, 0x9379, 0x937d, + // Entry 7300 - 733F + 0x9384, 0x9389, 0x938f, 0x939e, 0x93ac, 0x93b3, 0x93bd, 0x93c5, + 0x93cf, 0x93da, 0x93e2, 0x93ed, 0x93fb, 0x9405, 0x9410, 0x9418, + 0x9420, 0x9429, 0x9435, 0x943e, 0x9447, 0x9451, 0x9459, 0x9463, + 0x946b, 0x946f, 0x9472, 0x9475, 0x9479, 0x947e, 0x9484, 0x94a4, + 0x94c6, 0x94e8, 0x950b, 0x951b, 0x952b, 0x9537, 0x9545, 0x9555, + 0x9568, 0x9577, 0x957c, 0x9586, 0x9590, 0x9597, 0x959e, 0x95a3, + 0x95a8, 0x95ae, 0x95b4, 0x95c2, 0x95c7, 0x95ce, 0x95d3, 0x95dc, + 0x95e9, 0x95f9, 0x9606, 0x9612, 0x961c, 0x962e, 0x9641, 0x9644, + // Entry 7340 - 737F + 0x9648, 0x964b, 0x9650, 0x9656, 0x9671, 0x9686, 0x969d, 0x96ab, + 0x96c0, 0x96cf, 0x96e5, 0x96f8, 0x9707, 0x9710, 0x971b, 0x971f, + 0x9732, 0x973a, 0x9747, 0x9756, 0x975b, 0x9765, 0x977b, 0x9788, + 0x978b, 0x9790, 0x97a7, 0x97b0, 0x97b6, 0x97be, 0x97c9, 0x97d5, + 0x97dc, 0x97e7, 0x97ee, 0x97f2, 0x97fb, 0x9806, 0x980a, 0x9813, + 0x9817, 0x981e, 0x982f, 0x9836, 0x9843, 0x984f, 0x9859, 0x9868, + 0x9875, 0x9885, 0x988f, 0x989a, 0x98a6, 0x98b2, 0x98c3, 0x98d3, + 0x98e3, 0x9902, 0x9915, 0x9921, 0x9925, 0x9934, 0x9944, 0x995a, + // Entry 7380 - 73BF + 0x9961, 0x996c, 0x9977, 0x9984, 0x9990, 0x999e, 0x99ad, 0x99b9, + 0x99ce, 0x99d7, 0x99e8, 0x99f9, 0x9a04, 0x9a1a, 0x9a33, 0x9a4a, + 0x9a62, 0x9a72, 0x9a97, 0x9a9b, 0x9aac, 0x9ab5, 0x9abd, 0x9ac8, + 0x9ad4, 0x9ad7, 0x9ae2, 0x9af2, 0x9b00, 0x9b0e, 0x9b16, 0x9b27, + 0x9b31, 0x9b49, 0x9b63, 0x9b6c, 0x9b75, 0x9b7c, 0x9b89, 0x9b92, + 0x9ba0, 0x9bb0, 0x9bbd, 0x9bc3, 0x9bcb, 0x9be9, 0x9bf4, 0x9bfd, + 0x9c07, 0x9c10, 0x9c1b, 0x9c20, 0x9c2a, 0x9c30, 0x9c34, 0x9c46, + 0x9c4b, 0x9c56, 0x9c67, 0x9c81, 0x9c93, 0x9c9e, 0x9ca8, 0x9caf, + // Entry 73C0 - 73FF + 0x9cbc, 0x9ccd, 0x9cf0, 0x9d10, 0x9d2f, 0x9d4c, 0x9d6a, 0x9d71, + 0x9d7c, 0x9d85, 0x9d91, 0x9dbb, 0x9dc9, 0x9dd9, 0x9de9, 0x9dfa, + 0x9e00, 0x9e11, 0x9e1d, 0x9e27, 0x9e2c, 0x9e39, 0x9e47, 0x9e56, + 0x9e62, 0x9e7b, 0x9eb0, 0x9efe, 0x9f30, 0x9f66, 0x9f7b, 0x9f91, + 0x9fb1, 0x9fb8, 0x9fd3, 0x9ff1, 0x9ff8, 0xa005, 0xa023, 0xa042, + 0xa053, 0xa067, 0xa06a, 0xa06e, 0xa077, 0xa07b, 0xa098, 0xa0a0, + 0xa0ab, 0xa0b7, 0xa0d6, 0xa0f4, 0xa128, 0xa148, 0xa164, 0xa180, + 0xa18a, 0xa1b0, 0xa1d4, 0xa1ec, 0xa204, 0xa222, 0xa226, 0xa234, + // Entry 7400 - 743F + 0xa23a, 0xa240, 0xa24c, 0xa251, 0xa257, 0xa261, 0xa26a, 0xa276, + 0xa296, 0xa2b2, 0xa2c0, 0xa2d3, 0xa2e6, 0xa2f6, 0xa307, 0xa31b, + 0xa32d, 0xa341, 0xa353, 0xa36b, 0xa385, 0xa3a3, 0xa3c3, 0xa3e4, + 0xa405, 0xa419, 0xa43c, 0xa448, 0xa46f, 0xa497, 0xa4af, 0xa4c0, + 0xa4d1, 0xa4dd, 0xa4e6, 0xa4f3, 0xa4f8, 0xa4fe, 0xa507, 0xa521, + 0xa530, 0xa545, 0xa55a, 0xa571, 0xa587, 0xa59d, 0xa5b2, 0xa5c9, + 0xa5e0, 0xa5f6, 0xa60b, 0xa623, 0xa63b, 0xa650, 0xa665, 0xa67c, + 0xa692, 0xa6a8, 0xa6bd, 0xa6d4, 0xa6eb, 0xa701, 0xa716, 0xa72e, + // Entry 7440 - 747F + 0xa746, 0xa753, 0xa774, 0xa798, 0xa7a0, 0xa7b9, 0xa7c5, 0xa7c9, + 0xa7cf, 0xa7e0, 0xa7fa, 0xa803, 0xa807, 0xa826, 0xa833, 0xa842, + 0xa848, 0xa852, 0xa85a, 0xa865, 0xa881, 0xa89d, 0xa8ba, 0xa8d3, + 0xa8ec, 0xa905, 0xa91b, 0xa92b, 0xa93b, 0xa952, 0xa961, 0xa97a, + 0xa98b, 0xa998, 0xa9a9, 0xa9c1, 0xa9d8, 0xa9ed, 0xa9fe, 0xaa0f, + 0xaa22, 0xaa42, 0xaa6b, 0xaa82, 0xaa9b, 0xaab0, 0xaad9, 0xab0e, + 0xab31, 0xab53, 0xab76, 0xab98, 0xabbb, 0xabdd, 0xac00, 0xac20, + 0xac42, 0xac62, 0xac84, 0xaca4, 0xacc6, 0xacd1, 0xace1, 0xacf3, + // Entry 7480 - 74BF + 0xad0c, 0xad13, 0xad24, 0xad40, 0xad5c, 0xad72, 0xad80, 0xad8e, + 0xad9e, 0xadae, 0xadc0, 0xadc9, 0xadde, 0xade7, 0xaded, 0xadf9, + 0xae01, 0xae12, 0xae24, 0xae42, 0xae57, 0xae69, 0xae79, 0xae88, + 0xae94, 0xae9a, 0xaea5, 0xaeb8, 0xaec5, 0xaed1, 0xaedb, 0xaeea, + 0xaef8, 0xaefc, 0xaf05, 0xaf0d, 0xaf1b, 0xaf25, 0xaf30, 0xaf38, + 0xaf3c, 0xaf41, 0xaf4c, 0xaf5b, 0xaf6e, 0xaf7c, 0xaf84, 0xaf8c, + 0xaf93, 0xafbd, 0xafcb, 0xafe4, 0xaffd, 0xb008, 0xb00f, 0xb022, + 0xb038, 0xb043, 0xb04f, 0xb053, 0xb06e, 0xb07e, 0xb08e, 0xb09d, + // Entry 74C0 - 74FF + 0xb0ad, 0xb0bf, 0xb0d2, 0xb0e4, 0xb0f8, 0xb10b, 0xb11f, 0xb130, + 0xb142, 0xb14d, 0xb162, 0xb170, 0xb186, 0xb195, 0xb1ad, 0xb1c1, + 0xb1de, 0xb1ee, 0xb208, 0xb211, 0xb21b, 0xb226, 0xb237, 0xb24a, + 0xb24f, 0xb25c, 0xb27b, 0xb291, 0xb2ad, 0xb2da, 0xb305, 0xb339, + 0xb34f, 0xb366, 0xb372, 0xb390, 0xb3ad, 0xb3ba, 0xb3dd, 0xb3f9, + 0xb406, 0xb412, 0xb425, 0xb432, 0xb446, 0xb452, 0xb45f, 0xb46e, + 0xb47a, 0xb48e, 0xb4ac, 0xb4c9, 0xb4e3, 0xb50d, 0xb53f, 0xb550, + 0xb55c, 0xb566, 0xb572, 0xb57d, 0xb58d, 0xb5a6, 0xb5c4, 0xb5e1, + // Entry 7500 - 753F + 0xb5ef, 0xb5fb, 0xb605, 0xb610, 0xb61a, 0xb628, 0xb63a, 0xb64e, + 0xb659, 0xb67c, 0xb692, 0xb6a1, 0xb6ad, 0xb6ba, 0xb6c4, 0xb6d6, + 0xb6ec, 0xb70f, 0xb729, 0xb749, 0xb770, 0xb787, 0xb7a8, 0xb7b8, + 0xb7c7, 0xb7d5, 0xb7eb, 0xb800, 0xb810, 0xb826, 0xb83f, 0xb853, + 0xb867, 0xb879, 0xb88c, 0xb8a0, 0xb8bd, 0xb8e5, 0xb8f4, 0xb90c, + 0xb924, 0xb93c, 0xb954, 0xb96c, 0xb984, 0xb9a3, 0xb9c2, 0xb9e1, + 0xba00, 0xba1d, 0xba3a, 0xba57, 0xba74, 0xba97, 0xbaba, 0xbadd, + 0xbb00, 0xbb17, 0xbb2e, 0xbb45, 0xbb5c, 0xbb79, 0xbb96, 0xbbb3, + // Entry 7540 - 757F + 0xbbd0, 0xbbec, 0xbc18, 0xbc33, 0xbc5e, 0xbc6e, 0xbc7c, 0xbc8d, + 0xbc9d, 0xbcb8, 0xbcd9, 0xbcf2, 0xbd11, 0xbd29, 0xbd41, 0xbd7d, + 0xbdb2, 0xbdeb, 0xbe05, 0xbe24, 0xbe49, 0xbe5b, 0xbe75, 0xbe82, + 0xbe97, 0xbe9d, 0xbea7, 0xbeb7, 0xbec2, 0xbed2, 0xbef3, 0xbef8, + 0xbefd, 0xbf07, 0xbf0e, 0xbf12, 0xbf1a, 0xbf1d, 0xbf29, 0xbf33, + 0xbf3b, 0xbf42, 0xbf4b, 0xbf56, 0xbf60, 0xbf73, 0xbf77, 0xbf84, + 0xbf8e, 0xbfa1, 0xbfb5, 0xbfc3, 0xbfd4, 0xbfdb, 0xbfe3, 0xbff3, + 0xc005, 0xc016, 0xc024, 0xc028, 0xc02f, 0xc038, 0xc050, 0xc066, + // Entry 7580 - 75BF + 0xc077, 0xc092, 0xc0a9, 0xc0ad, 0xc0ba, 0xc0c8, 0xc0d9, 0xc0f7, + 0xc10b, 0xc11f, 0xc137, 0xc13e, 0xc149, 0xc152, 0xc164, 0xc16e, + 0xc17c, 0xc18d, 0xc198, 0xc1a5, 0xc1ad, 0xc1b8, 0xc1be, 0xc1ca, + 0xc1d0, 0xc1d4, 0xc1db, 0xc1eb, 0xc1f2, 0xc1ff, 0xc20b, 0xc228, + 0xc237, 0xc251, 0xc25c, 0xc268, 0xc276, 0xc28c, 0xc299, 0xc2a5, + 0xc2a8, 0xc2b8, 0xc2c6, 0xc2d6, 0xc2db, 0xc2e1, 0xc2f2, 0xc2f8, + 0xc300, 0xc308, 0xc315, 0xc31f, 0xc33c, 0xc350, 0xc36a, 0xc378, + 0xc393, 0xc3a5, 0xc3b6, 0xc3bf, 0xc3d3, 0xc3e4, 0xc3f2, 0xc3f9, + // Entry 75C0 - 75FF + 0xc406, 0xc40b, 0xc40f, 0xc41c, 0xc43e, 0xc457, 0xc471, 0xc48c, + 0xc4a7, 0xc4c7, 0xc4e7, 0xc509, 0xc529, 0xc54b, 0xc568, 0xc587, + 0xc5a6, 0xc5c2, 0xc5eb, 0xc60d, 0xc634, 0xc65d, 0xc686, 0xc6a4, + 0xc6be, 0xc6d9, 0xc6f6, 0xc715, 0xc734, 0xc755, 0xc76f, 0xc78b, + 0xc7a9, 0xc7c9, 0xc7ed, 0xc812, 0xc832, 0xc857, 0xc880, 0xc8a6, + 0xc8ce, 0xc8f6, 0xc926, 0xc957, 0xc976, 0xc993, 0xc9b1, 0xc9d3, + 0xc9fe, 0xca24, 0xca57, 0xca80, 0xcaa9, 0xcad4, 0xcaf1, 0xcb10, + 0xcb2f, 0xcb4e, 0xcb6a, 0xcb88, 0xcba7, 0xcbc9, 0xcbe6, 0xcc03, + // Entry 7600 - 763F + 0xcc22, 0xcc43, 0xcc64, 0xcc80, 0xcc9e, 0xccbe, 0xccd9, 0xccf6, + 0xcd13, 0xcd2d, 0xcd46, 0xcd62, 0xcd80, 0xcd99, 0xcdb2, 0xcdce, + 0xcde8, 0xce03, 0xce26, 0xce4b, 0xce69, 0xce86, 0xceab, 0xceca, + 0xcee4, 0xceff, 0xcf1f, 0xcf3a, 0xcf59, 0xcf74, 0xcf98, 0xcfb5, + 0xcfe0, 0xd00d, 0xd02e, 0xd04f, 0xd06c, 0xd08a, 0xd0aa, 0xd0c6, + 0xd0e8, 0xd106, 0xd126, 0xd146, 0xd166, 0xd186, 0xd1a3, 0xd1c5, + 0xd1ea, 0xd206, 0xd220, 0xd23b, 0xd25a, 0xd275, 0xd294, 0xd2b4, + 0xd2e0, 0xd30a, 0xd337, 0xd363, 0xd37e, 0xd396, 0xd3a7, 0xd3b9, + // Entry 7640 - 767F + 0xd3d0, 0xd3ec, 0xd416, 0xd422, 0xd433, 0xd44e, 0xd460, 0xd473, + 0xd484, 0xd496, 0xd4ad, 0xd4c9, 0xd4f8, 0xd523, 0xd530, 0xd542, + 0xd55a, 0xd574, 0xd5a5, 0xd5d2, 0xd5e0, 0xd5f2, 0xd60a, 0xd624, + 0xd650, 0xd660, 0xd671, 0xd683, 0xd693, 0xd6a8, 0xd6be, 0xd6d9, + 0xd6e5, 0xd6f2, 0xd700, 0xd70c, 0xd719, 0xd72b, 0xd742, 0xd75c, + 0xd777, 0xd790, 0xd7aa, 0xd7c9, 0xd7ed, 0xd806, 0xd820, 0xd838, + 0xd851, 0xd86f, 0xd892, 0xd8ad, 0xd8c9, 0xd8e3, 0xd8fe, 0xd91e, + 0xd93c, 0xd95b, 0xd973, 0xd995, 0xd9b2, 0xd9d0, 0xd9e7, 0xda08, + // Entry 7680 - 76BF + 0xda30, 0xda4d, 0xda6a, 0xda87, 0xdaa3, 0xdabc, 0xdadb, 0xdaf9, + 0xdb1c, 0xdb3d, 0xdb5c, 0xdb7b, 0xdb9d, 0xdbca, 0xdbf5, 0xdc23, + 0xdc50, 0xdc7e, 0xdcaa, 0xdcd9, 0xdd07, 0xdd34, 0xdd5f, 0xdd8d, + 0xddba, 0xddea, 0xde18, 0xde49, 0xde79, 0xdea3, 0xdecb, 0xdef6, + 0xdf20, 0xdf50, 0xdf7e, 0xdfaf, 0xdfdf, 0xe015, 0xe049, 0xe080, + 0xe0b6, 0xe0e7, 0xe116, 0xe148, 0xe179, 0xe1aa, 0xe1d9, 0xe20b, + 0xe23c, 0xe26b, 0xe298, 0xe2c8, 0xe2f7, 0xe327, 0xe355, 0xe386, + 0xe3b6, 0xe3eb, 0xe41e, 0xe454, 0xe489, 0xe4a4, 0xe4bd, 0xe4d9, + // Entry 76C0 - 76FF + 0xe4f4, 0xe50b, 0xe520, 0xe538, 0xe54f, 0xe569, 0xe581, 0xe59c, + 0xe5b6, 0xe5d6, 0xe5f4, 0xe615, 0xe635, 0xe64a, 0xe65d, 0xe673, + 0xe688, 0xe6a2, 0xe6ba, 0xe6d5, 0xe6ef, 0xe70a, 0xe725, 0xe740, + 0xe75b, 0xe776, 0xe78e, 0xe7b4, 0xe7d8, 0xe7ff, 0xe825, 0xe84c, + 0xe873, 0xe89a, 0xe8c1, 0xe8e1, 0xe8ff, 0xe920, 0xe940, 0xe961, + 0xe982, 0xe9a3, 0xe9c4, 0xe9eb, 0xea10, 0xea38, 0xea5f, 0xea87, + 0xeaaf, 0xead7, 0xeaff, 0xeb25, 0xeb49, 0xeb70, 0xeb96, 0xebbd, + 0xebe4, 0xec0b, 0xec32, 0xec5d, 0xec86, 0xecb2, 0xecdd, 0xed09, + // Entry 7700 - 773F + 0xed35, 0xed61, 0xed8d, 0xeda9, 0xedc3, 0xede0, 0xedfc, 0xee2b, + 0xee58, 0xee88, 0xeeb7, 0xeed8, 0xeef7, 0xef19, 0xef3a, 0xef55, + 0xef77, 0xef97, 0xefb8, 0xefdb, 0xefff, 0xf01f, 0xf040, 0xf061, + 0xf084, 0xf0a6, 0xf0c8, 0xf0f2, 0xf11d, 0xf148, 0xf174, 0xf18f, + 0xf1b1, 0xf1d4, 0xf1f6, 0xf20a, 0xf229, 0xf249, 0xf267, 0xf280, + 0xf290, 0xf2a4, 0xf2c0, 0xf2dd, 0xf302, 0xf313, 0xf323, 0xf338, + 0xf341, 0xf34e, 0xf364, 0xf36e, 0xf37a, 0xf38b, 0xf397, 0xf3aa, + 0xf3ba, 0xf3cb, 0xf3d4, 0xf3fe, 0xf412, 0xf426, 0xf430, 0xf43e, + // Entry 7740 - 777F + 0xf45b, 0xf468, 0xf472, 0xf47b, 0xf488, 0xf4a4, 0xf4c0, 0xf4ee, + 0xf513, 0xf53b, 0xf571, 0xf58e, 0xf5ae, 0xf5bc, 0xf5ca, 0xf5db, + 0xf5e1, 0xf5e7, 0xf5f4, 0xf604, 0xf609, 0xf61f, 0xf627, 0xf62d, + 0xf63e, 0xf647, 0xf651, 0xf659, 0xf666, 0xf67a, 0xf68a, 0xf697, + 0xf69c, 0xf6a4, 0xf6a9, 0xf6ba, 0xf6cc, 0xf6dd, 0xf6e9, 0xf6fd, + 0xf70a, 0xf713, 0xf71a, 0xf722, 0xf727, 0xf72d, 0xf733, 0xf741, + 0xf74c, 0xf75f, 0xf770, 0xf773, 0xf780, 0xf787, 0xf790, 0xf798, + 0xf7a0, 0xf7ae, 0xf7b9, 0xf7c3, 0xf7d2, 0xf7e0, 0xf7e7, 0xf7ef, + // Entry 7780 - 77BF + 0xf7f2, 0xf7f9, 0xf804, 0xf80c, 0xf817, 0xf81b, 0xf824, 0xf82c, + 0xf832, 0xf83e, 0xf843, 0xf847, 0xf84a, 0xf84f, 0xf852, 0xf85a, + 0xf863, 0xf867, 0xf86e, 0xf874, 0xf87e, 0xf884, 0xf889, 0xf895, + 0xf89f, 0xf8a7, 0xf8af, 0xf8b4, 0xf8bb, 0xf8c7, 0xf8d8, 0xf8dd, + 0xf8e2, 0xf8ed, 0xf8fb, 0xf910, 0xf925, 0xf934, 0xf94c, 0xf950, + 0xf955, 0xf95c, 0xf965, 0xf968, 0xf96d, 0xf973, 0xf978, 0xf984, + 0xf98e, 0xf993, 0xf999, 0xf99d, 0xf9a2, 0xf9c3, 0xf9e4, 0xfa05, + 0xfa26, 0xfa47, 0xfa68, 0xfa89, 0xfaaa, 0xfacb, 0xfaec, 0xfb0d, + // Entry 77C0 - 77FF + 0xfb2e, 0xfb4f, 0xfb70, 0xfb91, 0xfbb2, 0xfbd3, 0xfbf4, 0xfc15, + 0xfc36, 0xfc57, 0xfc78, 0xfc99, 0xfcba, 0xfcdb, 0xfcfc, 0xfd1d, + 0xfd3e, 0xfd5f, 0xfd80, 0xfda1, 0xfdc2, 0xfde3, 0xfe04, 0xfe25, + 0xfe46, 0xfe67, 0xfe88, 0xfea9, 0xfeca, 0xfeeb, 0xff0c, 0xff2d, + 0xff4e, 0xff6f, 0xff90, 0xffb1, 0xffd2, 0xfff3, 0x0014, 0x0035, + 0x0056, 0x0077, 0x0098, 0x00b9, 0x00da, 0x00fb, 0x011c, 0x013d, + 0x015e, 0x017f, 0x01a0, 0x01c1, 0x01e2, 0x0203, 0x0224, 0x0245, + 0x0266, 0x0287, 0x02a8, 0x02c9, 0x02ea, 0x030b, 0x032c, 0x034d, + // Entry 7800 - 783F + 0x036e, 0x038f, 0x03b0, 0x03d1, 0x03f2, 0x0413, 0x0434, 0x0455, + 0x0476, 0x0497, 0x04b8, 0x04d9, 0x04fa, 0x051b, 0x053c, 0x055d, + 0x057e, 0x059f, 0x05c0, 0x05e1, 0x0602, 0x0623, 0x0644, 0x0665, + 0x0686, 0x06a7, 0x06c8, 0x06e9, 0x070a, 0x072b, 0x074c, 0x076d, + 0x078e, 0x07af, 0x07d0, 0x07f1, 0x0812, 0x0833, 0x0854, 0x0875, + 0x0896, 0x08b7, 0x08d8, 0x08f9, 0x091a, 0x093b, 0x095c, 0x097d, + 0x099e, 0x09bf, 0x09e0, 0x0a01, 0x0a22, 0x0a43, 0x0a64, 0x0a85, + 0x0aa6, 0x0ac7, 0x0ae8, 0x0b09, 0x0b2a, 0x0b4b, 0x0b6c, 0x0b8d, + // Entry 7840 - 787F + 0x0bae, 0x0bcf, 0x0bf0, 0x0c11, 0x0c32, 0x0c53, 0x0c74, 0x0c95, + 0x0cb6, 0x0cd7, 0x0cf8, 0x0d19, 0x0d3a, 0x0d5b, 0x0d7c, 0x0d9d, + 0x0dbe, 0x0ddf, 0x0e00, 0x0e21, 0x0e42, 0x0e63, 0x0e84, 0x0ea5, + 0x0ec6, 0x0ee7, 0x0f08, 0x0f29, 0x0f4a, 0x0f6b, 0x0f8c, 0x0fad, + 0x0fce, 0x0fef, 0x1010, 0x1031, 0x1052, 0x1073, 0x1094, 0x10b5, + 0x10d6, 0x10f7, 0x1118, 0x1139, 0x115a, 0x117b, 0x119c, 0x11bd, + 0x11de, 0x11ff, 0x1220, 0x1241, 0x1262, 0x1283, 0x12a4, 0x12c5, + 0x12e6, 0x1307, 0x1328, 0x1349, 0x136a, 0x138b, 0x13ac, 0x13cd, + // Entry 7880 - 78BF + 0x13ee, 0x140f, 0x1430, 0x1451, 0x1472, 0x1493, 0x14b4, 0x14d5, + 0x14f6, 0x1517, 0x1538, 0x1559, 0x157a, 0x159b, 0x15bc, 0x15dd, + 0x15fe, 0x161f, 0x1640, 0x1661, 0x1682, 0x16a3, 0x16c4, 0x16e5, + 0x1706, 0x1727, 0x1748, 0x1769, 0x178a, 0x17ab, 0x17cc, 0x17ed, + 0x180e, 0x182f, 0x1850, 0x1871, 0x1892, 0x18b3, 0x18d4, 0x18f5, + 0x1916, 0x1937, 0x1958, 0x1979, 0x199a, 0x19bb, 0x19dc, 0x19fd, + 0x1a1e, 0x1a3f, 0x1a60, 0x1a81, 0x1aa2, 0x1ac3, 0x1ae4, 0x1b05, + 0x1b26, 0x1b47, 0x1b68, 0x1b89, 0x1baa, 0x1bcb, 0x1bec, 0x1c0d, + // Entry 78C0 - 78FF + 0x1c2e, 0x1c4f, 0x1c70, 0x1c91, 0x1cb2, 0x1cd3, 0x1cf4, 0x1d15, + 0x1d36, 0x1d57, 0x1d78, 0x1d99, 0x1dba, 0x1ddb, 0x1dfc, 0x1e1d, + 0x1e3e, 0x1e5f, 0x1e80, 0x1ea1, 0x1ec2, 0x1ee3, 0x1f04, 0x1f25, + 0x1f46, 0x1f67, 0x1f88, 0x1fa9, 0x1fca, 0x1feb, 0x200c, 0x202d, + 0x204e, 0x206f, 0x2090, 0x20b1, 0x20d2, 0x20f3, 0x2114, 0x2135, + 0x2156, 0x2177, 0x2198, 0x21b9, 0x21da, 0x21fb, 0x221c, 0x223d, + 0x225e, 0x227f, 0x22a0, 0x22c1, 0x22e2, 0x2303, 0x2324, 0x2345, + 0x2366, 0x2387, 0x23a8, 0x23c9, 0x23ea, 0x240b, 0x242c, 0x244d, + // Entry 7900 - 793F + 0x246e, 0x248f, 0x24b0, 0x24d1, 0x24f2, 0x2513, 0x2534, 0x2555, + 0x2576, 0x2597, 0x25b8, 0x25d9, 0x25fa, 0x261b, 0x263c, 0x265d, + 0x267e, 0x269f, 0x26c0, 0x26e1, 0x2702, 0x2723, 0x2744, 0x2765, + 0x2786, 0x27a7, 0x27c8, 0x27e9, 0x280a, 0x282b, 0x284c, 0x286d, + 0x288e, 0x28af, 0x28d0, 0x28f1, 0x2912, 0x2933, 0x2954, 0x2975, + 0x2996, 0x29b7, 0x29d8, 0x29f9, 0x2a1a, 0x2a3b, 0x2a5c, 0x2a7d, + 0x2a9e, 0x2abf, 0x2ae0, 0x2b01, 0x2b22, 0x2b43, 0x2b64, 0x2b85, + 0x2ba6, 0x2bc7, 0x2be8, 0x2c09, 0x2c2a, 0x2c4b, 0x2c6c, 0x2c8d, + // Entry 7940 - 797F + 0x2cae, 0x2ccf, 0x2cf0, 0x2d11, 0x2d32, 0x2d53, 0x2d74, 0x2d95, + 0x2db6, 0x2dd7, 0x2df8, 0x2e19, 0x2e3a, 0x2e5b, 0x2e7c, 0x2e9d, + 0x2ebe, 0x2edf, 0x2f00, 0x2f21, 0x2f42, 0x2f63, 0x2f84, 0x2fa5, + 0x2fc6, 0x2fe7, 0x3008, 0x3029, 0x304a, 0x306b, 0x308c, 0x30ad, + 0x30ce, 0x30ef, 0x3110, 0x3131, 0x3152, 0x3173, 0x3194, 0x31b5, + 0x31d6, 0x31f7, 0x3218, 0x3239, 0x325a, 0x327b, 0x329c, 0x32bd, + 0x32de, 0x32ff, 0x3320, 0x3341, 0x3362, 0x3383, 0x33a4, 0x33c5, + 0x33e6, 0x3407, 0x3428, 0x3449, 0x346a, 0x348b, 0x34ac, 0x34cd, + // Entry 7980 - 79BF + 0x34ee, 0x350f, 0x3530, 0x3551, 0x3572, 0x3593, 0x35b4, 0x35d5, + 0x35f6, 0x3617, 0x3638, 0x3659, 0x367a, 0x369b, 0x36bc, 0x36dd, + 0x36fe, 0x371f, 0x3740, 0x3761, 0x3782, 0x37a3, 0x37c4, 0x37e5, + 0x3806, 0x3827, 0x3848, 0x3869, 0x388a, 0x38ab, 0x38cc, 0x38ed, + 0x390e, 0x392f, 0x3950, 0x3971, 0x3992, 0x39b3, 0x39d4, 0x39f5, + 0x3a16, 0x3a37, 0x3a58, 0x3a79, 0x3a9a, 0x3abb, 0x3adc, 0x3afd, + 0x3b1e, 0x3b3f, 0x3b60, 0x3b81, 0x3ba2, 0x3bc3, 0x3be4, 0x3c05, + 0x3c26, 0x3c47, 0x3c68, 0x3c89, 0x3caa, 0x3ccb, 0x3cec, 0x3d0d, + // Entry 79C0 - 79FF + 0x3d2e, 0x3d4f, 0x3d70, 0x3d91, 0x3db2, 0x3dd3, 0x3df4, 0x3e15, + 0x3e36, 0x3e57, 0x3e78, 0x3e99, 0x3eba, 0x3edb, 0x3efc, 0x3f1d, + 0x3f3e, 0x3f5f, 0x3f80, 0x3f8c, 0x3f95, 0x3fa9, 0x3fbb, 0x3fca, + 0x3fd9, 0x3fe9, 0x3ff6, 0x4004, 0x4018, 0x402d, 0x4039, 0x4046, + 0x404f, 0x405f, 0x406c, 0x4077, 0x4085, 0x4092, 0x409f, 0x40ae, + 0x40bc, 0x40ca, 0x40d7, 0x40e6, 0x40f5, 0x4103, 0x410c, 0x4119, + 0x412b, 0x413a, 0x414f, 0x4160, 0x4171, 0x418b, 0x41a5, 0x41bf, + 0x41d9, 0x41f3, 0x420d, 0x4227, 0x4241, 0x425b, 0x4275, 0x428f, + // Entry 7A00 - 7A3F + 0x42a9, 0x42c3, 0x42dd, 0x42f7, 0x4311, 0x432b, 0x4345, 0x435f, + 0x4379, 0x4393, 0x43ad, 0x43c7, 0x43e1, 0x43fb, 0x4415, 0x442c, + 0x443f, 0x4457, 0x446c, 0x4478, 0x4488, 0x44a0, 0x44b8, 0x44d0, + 0x44e8, 0x4500, 0x4518, 0x4530, 0x4548, 0x4560, 0x4578, 0x4590, + 0x45a8, 0x45c0, 0x45d8, 0x45f0, 0x4608, 0x4620, 0x4638, 0x4650, + 0x4668, 0x4680, 0x4698, 0x46b0, 0x46c8, 0x46e0, 0x46f8, 0x470e, + 0x471f, 0x4736, 0x473f, 0x4749, 0x475e, 0x4773, 0x4788, 0x479d, + 0x47b2, 0x47c7, 0x47dc, 0x47f1, 0x4806, 0x481b, 0x4830, 0x4845, + // Entry 7A40 - 7A7F + 0x485a, 0x486f, 0x4884, 0x4899, 0x48ae, 0x48c3, 0x48d8, 0x48ed, + 0x4902, 0x4917, 0x492c, 0x4941, 0x4956, 0x496b, 0x4980, 0x4995, + 0x49aa, 0x49bf, 0x49d4, 0x49e9, 0x49fe, 0x4a13, 0x4a28, 0x4a3d, + 0x4a52, 0x4a67, 0x4a7c, 0x4a91, 0x4aa6, 0x4abb, 0x4ad0, 0x4ae5, + 0x4afa, 0x4b0f, 0x4b24, 0x4b39, 0x4b4e, 0x4b63, 0x4b78, 0x4b8d, + 0x4ba2, 0x4bb7, 0x4bcc, 0x4be1, 0x4bf6, 0x4c0b, 0x4c20, 0x4c35, + 0x4c4a, 0x4c5f, 0x4c74, 0x4c89, 0x4c9e, 0x4cb3, 0x4cc8, 0x4cdd, + 0x4cf2, 0x4d07, 0x4d1c, 0x4d31, 0x4d46, 0x4d5b, 0x4d70, 0x4d85, + // Entry 7A80 - 7ABF + 0x4d9a, 0x4daf, 0x4dc4, 0x4dd9, 0x4dee, 0x4e03, 0x4e18, 0x4e2e, + 0x4e44, 0x4e5a, 0x4e70, 0x4e86, 0x4e9c, 0x4eb2, 0x4ec8, 0x4ede, + 0x4ef4, 0x4f0a, 0x4f20, 0x4f36, 0x4f4c, 0x4f62, 0x4f78, 0x4f8e, + 0x4fa4, 0x4fba, 0x4fd0, 0x4fe6, 0x4ffc, 0x5012, 0x5028, 0x503e, + 0x5054, 0x506a, 0x5080, 0x5096, 0x50ac, 0x50c2, 0x50d8, 0x50ee, + 0x5104, 0x511a, 0x5130, 0x5146, 0x515c, 0x5172, 0x5188, 0x519e, + 0x51b4, 0x51ca, 0x51e0, 0x51f6, 0x520c, 0x5222, 0x5238, 0x524e, + 0x5264, 0x527a, 0x5290, 0x52a6, 0x52bc, 0x52d2, 0x52e8, 0x52fe, + // Entry 7AC0 - 7AFF + 0x5314, 0x532a, 0x5340, 0x5356, 0x536c, 0x5382, 0x5398, 0x53ae, + 0x53c4, 0x53da, 0x53f0, 0x5406, 0x541c, 0x5432, 0x5448, 0x545e, + 0x5474, 0x548a, 0x54a0, 0x54b6, 0x54cc, 0x54e2, 0x54f8, 0x550e, + 0x5524, 0x553a, 0x5550, 0x5566, 0x557c, 0x5592, 0x55a8, 0x55be, + 0x55d4, 0x55ea, 0x5600, 0x5616, 0x562c, 0x5642, 0x5658, 0x566e, + 0x5684, 0x569a, 0x56b0, 0x56c6, 0x56dc, 0x56f2, 0x5708, 0x571e, + 0x5734, 0x574a, 0x5760, 0x5776, 0x578c, 0x57a2, 0x57b8, 0x57ce, + 0x57e4, 0x57fa, 0x5810, 0x5826, 0x583c, 0x5852, 0x5868, 0x587e, + // Entry 7B00 - 7B3F + 0x5894, 0x58aa, 0x58c0, 0x58d6, 0x58ec, 0x5902, 0x5918, 0x592e, + 0x5944, 0x595a, 0x5970, 0x5986, 0x599c, 0x59b2, 0x59c8, 0x59de, + 0x59f4, 0x5a0a, 0x5a20, 0x5a36, 0x5a4c, 0x5a62, 0x5a78, 0x5a8e, + 0x5aa4, 0x5aba, 0x5ad0, 0x5ae6, 0x5afc, 0x5b12, 0x5b28, 0x5b3e, + 0x5b54, 0x5b6a, 0x5b80, 0x5b96, +} // Size: 63072 bytes + +const directData string = "" + // Size: 353 bytes + "" + +const singleData string = ("" + // Size: 809878 bytes; the redundant, explicit parens are for https://golang.org/issue/18078 + "SPACEEXCLAMATION MARKQUOTATION MARKNUMBER SIGNDOLLAR SIGNPERCENT SIGNAMP" + + "ERSANDAPOSTROPHELEFT PARENTHESISRIGHT PARENTHESISASTERISKPLUS SIGNCOMMAH" + + "YPHEN-MINUSFULL STOPSOLIDUSDIGIT ZERODIGIT ONEDIGIT TWODIGIT THREEDIGIT " + + "FOURDIGIT FIVEDIGIT SIXDIGIT SEVENDIGIT EIGHTDIGIT NINECOLONSEMICOLONLES" + + "S-THAN SIGNEQUALS SIGNGREATER-THAN SIGNQUESTION MARKCOMMERCIAL ATLATIN C" + + "APITAL LETTER ALATIN CAPITAL LETTER BLATIN CAPITAL LETTER CLATIN CAPITAL" + + " LETTER DLATIN CAPITAL LETTER ELATIN CAPITAL LETTER FLATIN CAPITAL LETTE" + + "R GLATIN CAPITAL LETTER HLATIN CAPITAL LETTER ILATIN CAPITAL LETTER JLAT" + + "IN CAPITAL LETTER KLATIN CAPITAL LETTER LLATIN CAPITAL LETTER MLATIN CAP" + + "ITAL LETTER NLATIN CAPITAL LETTER OLATIN CAPITAL LETTER PLATIN CAPITAL L" + + "ETTER QLATIN CAPITAL LETTER RLATIN CAPITAL LETTER SLATIN CAPITAL LETTER " + + "TLATIN CAPITAL LETTER ULATIN CAPITAL LETTER VLATIN CAPITAL LETTER WLATIN" + + " CAPITAL LETTER XLATIN CAPITAL LETTER YLATIN CAPITAL LETTER ZLEFT SQUARE" + + " BRACKETREVERSE SOLIDUSRIGHT SQUARE BRACKETCIRCUMFLEX ACCENTLOW LINEGRAV" + + "E ACCENTLATIN SMALL LETTER ALATIN SMALL LETTER BLATIN SMALL LETTER CLATI" + + "N SMALL LETTER DLATIN SMALL LETTER ELATIN SMALL LETTER FLATIN SMALL LETT" + + "ER GLATIN SMALL LETTER HLATIN SMALL LETTER ILATIN SMALL LETTER JLATIN SM" + + "ALL LETTER KLATIN SMALL LETTER LLATIN SMALL LETTER MLATIN SMALL LETTER N" + + "LATIN SMALL LETTER OLATIN SMALL LETTER PLATIN SMALL LETTER QLATIN SMALL " + + "LETTER RLATIN SMALL LETTER SLATIN SMALL LETTER TLATIN SMALL LETTER ULATI" + + "N SMALL LETTER VLATIN SMALL LETTER WLATIN SMALL LETTER XLATIN SMALL LETT" + + "ER YLATIN SMALL LETTER ZLEFT CURLY BRACKETVERTICAL LINERIGHT CURLY BRACK" + + "ETTILDENO-BREAK SPACEINVERTED EXCLAMATION MARKCENT SIGNPOUND SIGNCURRENC" + + "Y SIGNYEN SIGNBROKEN BARSECTION SIGNDIAERESISCOPYRIGHT SIGNFEMININE ORDI" + + "NAL INDICATORLEFT-POINTING DOUBLE ANGLE QUOTATION MARKNOT SIGNSOFT HYPHE" + + "NREGISTERED SIGNMACRONDEGREE SIGNPLUS-MINUS SIGNSUPERSCRIPT TWOSUPERSCRI" + + "PT THREEACUTE ACCENTMICRO SIGNPILCROW SIGNMIDDLE DOTCEDILLASUPERSCRIPT O" + + "NEMASCULINE ORDINAL INDICATORRIGHT-POINTING DOUBLE ANGLE QUOTATION MARKV" + + "ULGAR FRACTION ONE QUARTERVULGAR FRACTION ONE HALFVULGAR FRACTION THREE " + + "QUARTERSINVERTED QUESTION MARKLATIN CAPITAL LETTER A WITH GRAVELATIN CAP" + + "ITAL LETTER A WITH ACUTELATIN CAPITAL LETTER A WITH CIRCUMFLEXLATIN CAPI" + + "TAL LETTER A WITH TILDELATIN CAPITAL LETTER A WITH DIAERESISLATIN CAPITA" + + "L LETTER A WITH RING ABOVELATIN CAPITAL LETTER AELATIN CAPITAL LETTER C " + + "WITH CEDILLALATIN CAPITAL LETTER E WITH GRAVELATIN CAPITAL LETTER E WITH" + + " ACUTELATIN CAPITAL LETTER E WITH CIRCUMFLEXLATIN CAPITAL LETTER E WITH " + + "DIAERESISLATIN CAPITAL LETTER I WITH GRAVELATIN CAPITAL LETTER I WITH AC" + + "UTELATIN CAPITAL LETTER I WITH CIRCUMFLEXLATIN CAPITAL LETTER I WITH DIA" + + "ERESISLATIN CAPITAL LETTER ETHLATIN CAPITAL LETTER N WITH TILDELATIN CAP" + + "ITAL LETTER O WITH GRAVELATIN CAPITAL LETTER O WITH ACUTELATIN CAPITAL L" + + "ETTER O WITH CIRCUMFLEXLATIN CAPITAL LETTER O WITH TILDELATIN CAPITAL LE" + + "TTER O WITH DIAERESISMULTIPLICATION SIGNLATIN CAPITAL LETTER O WITH STRO" + + "KELATIN CAPITAL LETTER U WITH GRAVELATIN CAPITAL LETTER U WITH ACUTELATI" + + "N CAPITAL LETTER U WITH CIRCUMFLEXLATIN CAPITAL LETTER U WITH DIAERESISL" + + "ATIN CAPITAL LETTER Y WITH ACUTELATIN CAPITAL LETTER THORNLATIN SMALL LE" + + "TTER SHARP SLATIN SMALL LETTER A WITH GRAVELATIN SMALL LETTER A WITH ACU" + + "TELATIN SMALL LETTER A WITH CIRCUMFLEXLATIN SMALL LETTER A WITH TILDELAT" + + "IN SMALL LETTER A WITH DIAERESISLATIN SMALL LETTER A WITH RING ABOVELATI" + + "N SMALL LETTER AELATIN SMALL LETTER C WITH CEDILLALATIN SMALL LETTER E W" + + "ITH GRAVELATIN SMALL LETTER E WITH ACUTELATIN SMALL LETTER E WITH CIRCUM" + + "FLEXLATIN SMALL LETTER E WITH DIAERESISLATIN SMALL LETTER I WITH GRAVELA" + + "TIN SMALL LETTER I WITH ACUTELATIN SMALL LETTER I WITH CIRCUMFLEXLATIN S" + + "MALL LETTER I WITH DIAERESISLATIN SMALL LETTER ETHLATIN SMALL LETTER N W" + + "ITH TILDELATIN SMALL LETTER O WITH GRAVELATIN SMALL LETTER O WITH ACUTEL" + + "ATIN SMALL LETTER O WITH CIRCUMFLEXLATIN SMALL LETTER O WITH TILDELATIN " + + "SMALL LETTER O WITH DIAERESISDIVISION SIGNLATIN SMALL LETTER O WITH STRO" + + "KELATIN SMALL LETTER U WITH GRAVELATIN SMALL LETTER U WITH ACUTELATIN SM" + + "ALL LETTER U WITH CIRCUMFLEXLATIN SMALL LETTER U WITH DIAERESISLATIN SMA" + + "LL LETTER Y WITH ACUTELATIN SMALL LETTER THORNLATIN SMALL LETTER Y WITH " + + "DIAERESISLATIN CAPITAL LETTER A WITH MACRONLATIN SMALL LETTER A WITH MAC" + + "RONLATIN CAPITAL LETTER A WITH BREVELATIN SMALL LETTER A WITH BREVELATIN" + + " CAPITAL LETTER A WITH OGONEKLATIN SMALL LETTER A WITH OGONEKLATIN CAPIT" + + "AL LETTER C WITH ACUTELATIN SMALL LETTER C WITH ACUTELATIN CAPITAL LETTE" + + "R C WITH CIRCUMFLEXLATIN SMALL LETTER C WITH CIRCUMFLEXLATIN CAPITAL LET") + ("" + + "TER C WITH DOT ABOVELATIN SMALL LETTER C WITH DOT ABOVELATIN CAPITAL LET" + + "TER C WITH CARONLATIN SMALL LETTER C WITH CARONLATIN CAPITAL LETTER D WI" + + "TH CARONLATIN SMALL LETTER D WITH CARONLATIN CAPITAL LETTER D WITH STROK" + + "ELATIN SMALL LETTER D WITH STROKELATIN CAPITAL LETTER E WITH MACRONLATIN" + + " SMALL LETTER E WITH MACRONLATIN CAPITAL LETTER E WITH BREVELATIN SMALL " + + "LETTER E WITH BREVELATIN CAPITAL LETTER E WITH DOT ABOVELATIN SMALL LETT" + + "ER E WITH DOT ABOVELATIN CAPITAL LETTER E WITH OGONEKLATIN SMALL LETTER " + + "E WITH OGONEKLATIN CAPITAL LETTER E WITH CARONLATIN SMALL LETTER E WITH " + + "CARONLATIN CAPITAL LETTER G WITH CIRCUMFLEXLATIN SMALL LETTER G WITH CIR" + + "CUMFLEXLATIN CAPITAL LETTER G WITH BREVELATIN SMALL LETTER G WITH BREVEL" + + "ATIN CAPITAL LETTER G WITH DOT ABOVELATIN SMALL LETTER G WITH DOT ABOVEL" + + "ATIN CAPITAL LETTER G WITH CEDILLALATIN SMALL LETTER G WITH CEDILLALATIN" + + " CAPITAL LETTER H WITH CIRCUMFLEXLATIN SMALL LETTER H WITH CIRCUMFLEXLAT" + + "IN CAPITAL LETTER H WITH STROKELATIN SMALL LETTER H WITH STROKELATIN CAP" + + "ITAL LETTER I WITH TILDELATIN SMALL LETTER I WITH TILDELATIN CAPITAL LET" + + "TER I WITH MACRONLATIN SMALL LETTER I WITH MACRONLATIN CAPITAL LETTER I " + + "WITH BREVELATIN SMALL LETTER I WITH BREVELATIN CAPITAL LETTER I WITH OGO" + + "NEKLATIN SMALL LETTER I WITH OGONEKLATIN CAPITAL LETTER I WITH DOT ABOVE" + + "LATIN SMALL LETTER DOTLESS ILATIN CAPITAL LIGATURE IJLATIN SMALL LIGATUR" + + "E IJLATIN CAPITAL LETTER J WITH CIRCUMFLEXLATIN SMALL LETTER J WITH CIRC" + + "UMFLEXLATIN CAPITAL LETTER K WITH CEDILLALATIN SMALL LETTER K WITH CEDIL" + + "LALATIN SMALL LETTER KRALATIN CAPITAL LETTER L WITH ACUTELATIN SMALL LET" + + "TER L WITH ACUTELATIN CAPITAL LETTER L WITH CEDILLALATIN SMALL LETTER L " + + "WITH CEDILLALATIN CAPITAL LETTER L WITH CARONLATIN SMALL LETTER L WITH C" + + "ARONLATIN CAPITAL LETTER L WITH MIDDLE DOTLATIN SMALL LETTER L WITH MIDD" + + "LE DOTLATIN CAPITAL LETTER L WITH STROKELATIN SMALL LETTER L WITH STROKE" + + "LATIN CAPITAL LETTER N WITH ACUTELATIN SMALL LETTER N WITH ACUTELATIN CA" + + "PITAL LETTER N WITH CEDILLALATIN SMALL LETTER N WITH CEDILLALATIN CAPITA" + + "L LETTER N WITH CARONLATIN SMALL LETTER N WITH CARONLATIN SMALL LETTER N" + + " PRECEDED BY APOSTROPHELATIN CAPITAL LETTER ENGLATIN SMALL LETTER ENGLAT" + + "IN CAPITAL LETTER O WITH MACRONLATIN SMALL LETTER O WITH MACRONLATIN CAP" + + "ITAL LETTER O WITH BREVELATIN SMALL LETTER O WITH BREVELATIN CAPITAL LET" + + "TER O WITH DOUBLE ACUTELATIN SMALL LETTER O WITH DOUBLE ACUTELATIN CAPIT" + + "AL LIGATURE OELATIN SMALL LIGATURE OELATIN CAPITAL LETTER R WITH ACUTELA" + + "TIN SMALL LETTER R WITH ACUTELATIN CAPITAL LETTER R WITH CEDILLALATIN SM" + + "ALL LETTER R WITH CEDILLALATIN CAPITAL LETTER R WITH CARONLATIN SMALL LE" + + "TTER R WITH CARONLATIN CAPITAL LETTER S WITH ACUTELATIN SMALL LETTER S W" + + "ITH ACUTELATIN CAPITAL LETTER S WITH CIRCUMFLEXLATIN SMALL LETTER S WITH" + + " CIRCUMFLEXLATIN CAPITAL LETTER S WITH CEDILLALATIN SMALL LETTER S WITH " + + "CEDILLALATIN CAPITAL LETTER S WITH CARONLATIN SMALL LETTER S WITH CARONL" + + "ATIN CAPITAL LETTER T WITH CEDILLALATIN SMALL LETTER T WITH CEDILLALATIN" + + " CAPITAL LETTER T WITH CARONLATIN SMALL LETTER T WITH CARONLATIN CAPITAL" + + " LETTER T WITH STROKELATIN SMALL LETTER T WITH STROKELATIN CAPITAL LETTE" + + "R U WITH TILDELATIN SMALL LETTER U WITH TILDELATIN CAPITAL LETTER U WITH" + + " MACRONLATIN SMALL LETTER U WITH MACRONLATIN CAPITAL LETTER U WITH BREVE" + + "LATIN SMALL LETTER U WITH BREVELATIN CAPITAL LETTER U WITH RING ABOVELAT" + + "IN SMALL LETTER U WITH RING ABOVELATIN CAPITAL LETTER U WITH DOUBLE ACUT" + + "ELATIN SMALL LETTER U WITH DOUBLE ACUTELATIN CAPITAL LETTER U WITH OGONE" + + "KLATIN SMALL LETTER U WITH OGONEKLATIN CAPITAL LETTER W WITH CIRCUMFLEXL" + + "ATIN SMALL LETTER W WITH CIRCUMFLEXLATIN CAPITAL LETTER Y WITH CIRCUMFLE" + + "XLATIN SMALL LETTER Y WITH CIRCUMFLEXLATIN CAPITAL LETTER Y WITH DIAERES" + + "ISLATIN CAPITAL LETTER Z WITH ACUTELATIN SMALL LETTER Z WITH ACUTELATIN " + + "CAPITAL LETTER Z WITH DOT ABOVELATIN SMALL LETTER Z WITH DOT ABOVELATIN " + + "CAPITAL LETTER Z WITH CARONLATIN SMALL LETTER Z WITH CARONLATIN SMALL LE" + + "TTER LONG SLATIN SMALL LETTER B WITH STROKELATIN CAPITAL LETTER B WITH H" + + "OOKLATIN CAPITAL LETTER B WITH TOPBARLATIN SMALL LETTER B WITH TOPBARLAT" + + "IN CAPITAL LETTER TONE SIXLATIN SMALL LETTER TONE SIXLATIN CAPITAL LETTE" + + "R OPEN OLATIN CAPITAL LETTER C WITH HOOKLATIN SMALL LETTER C WITH HOOKLA" + + "TIN CAPITAL LETTER AFRICAN DLATIN CAPITAL LETTER D WITH HOOKLATIN CAPITA" + + "L LETTER D WITH TOPBARLATIN SMALL LETTER D WITH TOPBARLATIN SMALL LETTER" + + " TURNED DELTALATIN CAPITAL LETTER REVERSED ELATIN CAPITAL LETTER SCHWALA" + + "TIN CAPITAL LETTER OPEN ELATIN CAPITAL LETTER F WITH HOOKLATIN SMALL LET" + + "TER F WITH HOOKLATIN CAPITAL LETTER G WITH HOOKLATIN CAPITAL LETTER GAMM" + + "ALATIN SMALL LETTER HVLATIN CAPITAL LETTER IOTALATIN CAPITAL LETTER I WI") + ("" + + "TH STROKELATIN CAPITAL LETTER K WITH HOOKLATIN SMALL LETTER K WITH HOOKL" + + "ATIN SMALL LETTER L WITH BARLATIN SMALL LETTER LAMBDA WITH STROKELATIN C" + + "APITAL LETTER TURNED MLATIN CAPITAL LETTER N WITH LEFT HOOKLATIN SMALL L" + + "ETTER N WITH LONG RIGHT LEGLATIN CAPITAL LETTER O WITH MIDDLE TILDELATIN" + + " CAPITAL LETTER O WITH HORNLATIN SMALL LETTER O WITH HORNLATIN CAPITAL L" + + "ETTER OILATIN SMALL LETTER OILATIN CAPITAL LETTER P WITH HOOKLATIN SMALL" + + " LETTER P WITH HOOKLATIN LETTER YRLATIN CAPITAL LETTER TONE TWOLATIN SMA" + + "LL LETTER TONE TWOLATIN CAPITAL LETTER ESHLATIN LETTER REVERSED ESH LOOP" + + "LATIN SMALL LETTER T WITH PALATAL HOOKLATIN CAPITAL LETTER T WITH HOOKLA" + + "TIN SMALL LETTER T WITH HOOKLATIN CAPITAL LETTER T WITH RETROFLEX HOOKLA" + + "TIN CAPITAL LETTER U WITH HORNLATIN SMALL LETTER U WITH HORNLATIN CAPITA" + + "L LETTER UPSILONLATIN CAPITAL LETTER V WITH HOOKLATIN CAPITAL LETTER Y W" + + "ITH HOOKLATIN SMALL LETTER Y WITH HOOKLATIN CAPITAL LETTER Z WITH STROKE" + + "LATIN SMALL LETTER Z WITH STROKELATIN CAPITAL LETTER EZHLATIN CAPITAL LE" + + "TTER EZH REVERSEDLATIN SMALL LETTER EZH REVERSEDLATIN SMALL LETTER EZH W" + + "ITH TAILLATIN LETTER TWO WITH STROKELATIN CAPITAL LETTER TONE FIVELATIN " + + "SMALL LETTER TONE FIVELATIN LETTER INVERTED GLOTTAL STOP WITH STROKELATI" + + "N LETTER WYNNLATIN LETTER DENTAL CLICKLATIN LETTER LATERAL CLICKLATIN LE" + + "TTER ALVEOLAR CLICKLATIN LETTER RETROFLEX CLICKLATIN CAPITAL LETTER DZ W" + + "ITH CARONLATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARONLATIN SMAL" + + "L LETTER DZ WITH CARONLATIN CAPITAL LETTER LJLATIN CAPITAL LETTER L WITH" + + " SMALL LETTER JLATIN SMALL LETTER LJLATIN CAPITAL LETTER NJLATIN CAPITAL" + + " LETTER N WITH SMALL LETTER JLATIN SMALL LETTER NJLATIN CAPITAL LETTER A" + + " WITH CARONLATIN SMALL LETTER A WITH CARONLATIN CAPITAL LETTER I WITH CA" + + "RONLATIN SMALL LETTER I WITH CARONLATIN CAPITAL LETTER O WITH CARONLATIN" + + " SMALL LETTER O WITH CARONLATIN CAPITAL LETTER U WITH CARONLATIN SMALL L" + + "ETTER U WITH CARONLATIN CAPITAL LETTER U WITH DIAERESIS AND MACRONLATIN " + + "SMALL LETTER U WITH DIAERESIS AND MACRONLATIN CAPITAL LETTER U WITH DIAE" + + "RESIS AND ACUTELATIN SMALL LETTER U WITH DIAERESIS AND ACUTELATIN CAPITA" + + "L LETTER U WITH DIAERESIS AND CARONLATIN SMALL LETTER U WITH DIAERESIS A" + + "ND CARONLATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVELATIN SMALL LETTE" + + "R U WITH DIAERESIS AND GRAVELATIN SMALL LETTER TURNED ELATIN CAPITAL LET" + + "TER A WITH DIAERESIS AND MACRONLATIN SMALL LETTER A WITH DIAERESIS AND M" + + "ACRONLATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRONLATIN SMALL LETTER " + + "A WITH DOT ABOVE AND MACRONLATIN CAPITAL LETTER AE WITH MACRONLATIN SMAL" + + "L LETTER AE WITH MACRONLATIN CAPITAL LETTER G WITH STROKELATIN SMALL LET" + + "TER G WITH STROKELATIN CAPITAL LETTER G WITH CARONLATIN SMALL LETTER G W" + + "ITH CARONLATIN CAPITAL LETTER K WITH CARONLATIN SMALL LETTER K WITH CARO" + + "NLATIN CAPITAL LETTER O WITH OGONEKLATIN SMALL LETTER O WITH OGONEKLATIN" + + " CAPITAL LETTER O WITH OGONEK AND MACRONLATIN SMALL LETTER O WITH OGONEK" + + " AND MACRONLATIN CAPITAL LETTER EZH WITH CARONLATIN SMALL LETTER EZH WIT" + + "H CARONLATIN SMALL LETTER J WITH CARONLATIN CAPITAL LETTER DZLATIN CAPIT" + + "AL LETTER D WITH SMALL LETTER ZLATIN SMALL LETTER DZLATIN CAPITAL LETTER" + + " G WITH ACUTELATIN SMALL LETTER G WITH ACUTELATIN CAPITAL LETTER HWAIRLA" + + "TIN CAPITAL LETTER WYNNLATIN CAPITAL LETTER N WITH GRAVELATIN SMALL LETT" + + "ER N WITH GRAVELATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTELATIN SMA" + + "LL LETTER A WITH RING ABOVE AND ACUTELATIN CAPITAL LETTER AE WITH ACUTEL" + + "ATIN SMALL LETTER AE WITH ACUTELATIN CAPITAL LETTER O WITH STROKE AND AC" + + "UTELATIN SMALL LETTER O WITH STROKE AND ACUTELATIN CAPITAL LETTER A WITH" + + " DOUBLE GRAVELATIN SMALL LETTER A WITH DOUBLE GRAVELATIN CAPITAL LETTER " + + "A WITH INVERTED BREVELATIN SMALL LETTER A WITH INVERTED BREVELATIN CAPIT" + + "AL LETTER E WITH DOUBLE GRAVELATIN SMALL LETTER E WITH DOUBLE GRAVELATIN" + + " CAPITAL LETTER E WITH INVERTED BREVELATIN SMALL LETTER E WITH INVERTED " + + "BREVELATIN CAPITAL LETTER I WITH DOUBLE GRAVELATIN SMALL LETTER I WITH D" + + "OUBLE GRAVELATIN CAPITAL LETTER I WITH INVERTED BREVELATIN SMALL LETTER " + + "I WITH INVERTED BREVELATIN CAPITAL LETTER O WITH DOUBLE GRAVELATIN SMALL" + + " LETTER O WITH DOUBLE GRAVELATIN CAPITAL LETTER O WITH INVERTED BREVELAT" + + "IN SMALL LETTER O WITH INVERTED BREVELATIN CAPITAL LETTER R WITH DOUBLE " + + "GRAVELATIN SMALL LETTER R WITH DOUBLE GRAVELATIN CAPITAL LETTER R WITH I" + + "NVERTED BREVELATIN SMALL LETTER R WITH INVERTED BREVELATIN CAPITAL LETTE" + + "R U WITH DOUBLE GRAVELATIN SMALL LETTER U WITH DOUBLE GRAVELATIN CAPITAL" + + " LETTER U WITH INVERTED BREVELATIN SMALL LETTER U WITH INVERTED BREVELAT" + + "IN CAPITAL LETTER S WITH COMMA BELOWLATIN SMALL LETTER S WITH COMMA BELO" + + "WLATIN CAPITAL LETTER T WITH COMMA BELOWLATIN SMALL LETTER T WITH COMMA ") + ("" + + "BELOWLATIN CAPITAL LETTER YOGHLATIN SMALL LETTER YOGHLATIN CAPITAL LETTE" + + "R H WITH CARONLATIN SMALL LETTER H WITH CARONLATIN CAPITAL LETTER N WITH" + + " LONG RIGHT LEGLATIN SMALL LETTER D WITH CURLLATIN CAPITAL LETTER OULATI" + + "N SMALL LETTER OULATIN CAPITAL LETTER Z WITH HOOKLATIN SMALL LETTER Z WI" + + "TH HOOKLATIN CAPITAL LETTER A WITH DOT ABOVELATIN SMALL LETTER A WITH DO" + + "T ABOVELATIN CAPITAL LETTER E WITH CEDILLALATIN SMALL LETTER E WITH CEDI" + + "LLALATIN CAPITAL LETTER O WITH DIAERESIS AND MACRONLATIN SMALL LETTER O " + + "WITH DIAERESIS AND MACRONLATIN CAPITAL LETTER O WITH TILDE AND MACRONLAT" + + "IN SMALL LETTER O WITH TILDE AND MACRONLATIN CAPITAL LETTER O WITH DOT A" + + "BOVELATIN SMALL LETTER O WITH DOT ABOVELATIN CAPITAL LETTER O WITH DOT A" + + "BOVE AND MACRONLATIN SMALL LETTER O WITH DOT ABOVE AND MACRONLATIN CAPIT" + + "AL LETTER Y WITH MACRONLATIN SMALL LETTER Y WITH MACRONLATIN SMALL LETTE" + + "R L WITH CURLLATIN SMALL LETTER N WITH CURLLATIN SMALL LETTER T WITH CUR" + + "LLATIN SMALL LETTER DOTLESS JLATIN SMALL LETTER DB DIGRAPHLATIN SMALL LE" + + "TTER QP DIGRAPHLATIN CAPITAL LETTER A WITH STROKELATIN CAPITAL LETTER C " + + "WITH STROKELATIN SMALL LETTER C WITH STROKELATIN CAPITAL LETTER L WITH B" + + "ARLATIN CAPITAL LETTER T WITH DIAGONAL STROKELATIN SMALL LETTER S WITH S" + + "WASH TAILLATIN SMALL LETTER Z WITH SWASH TAILLATIN CAPITAL LETTER GLOTTA" + + "L STOPLATIN SMALL LETTER GLOTTAL STOPLATIN CAPITAL LETTER B WITH STROKEL" + + "ATIN CAPITAL LETTER U BARLATIN CAPITAL LETTER TURNED VLATIN CAPITAL LETT" + + "ER E WITH STROKELATIN SMALL LETTER E WITH STROKELATIN CAPITAL LETTER J W" + + "ITH STROKELATIN SMALL LETTER J WITH STROKELATIN CAPITAL LETTER SMALL Q W" + + "ITH HOOK TAILLATIN SMALL LETTER Q WITH HOOK TAILLATIN CAPITAL LETTER R W" + + "ITH STROKELATIN SMALL LETTER R WITH STROKELATIN CAPITAL LETTER Y WITH ST" + + "ROKELATIN SMALL LETTER Y WITH STROKELATIN SMALL LETTER TURNED ALATIN SMA" + + "LL LETTER ALPHALATIN SMALL LETTER TURNED ALPHALATIN SMALL LETTER B WITH " + + "HOOKLATIN SMALL LETTER OPEN OLATIN SMALL LETTER C WITH CURLLATIN SMALL L" + + "ETTER D WITH TAILLATIN SMALL LETTER D WITH HOOKLATIN SMALL LETTER REVERS" + + "ED ELATIN SMALL LETTER SCHWALATIN SMALL LETTER SCHWA WITH HOOKLATIN SMAL" + + "L LETTER OPEN ELATIN SMALL LETTER REVERSED OPEN ELATIN SMALL LETTER REVE" + + "RSED OPEN E WITH HOOKLATIN SMALL LETTER CLOSED REVERSED OPEN ELATIN SMAL" + + "L LETTER DOTLESS J WITH STROKELATIN SMALL LETTER G WITH HOOKLATIN SMALL " + + "LETTER SCRIPT GLATIN LETTER SMALL CAPITAL GLATIN SMALL LETTER GAMMALATIN" + + " SMALL LETTER RAMS HORNLATIN SMALL LETTER TURNED HLATIN SMALL LETTER H W" + + "ITH HOOKLATIN SMALL LETTER HENG WITH HOOKLATIN SMALL LETTER I WITH STROK" + + "ELATIN SMALL LETTER IOTALATIN LETTER SMALL CAPITAL ILATIN SMALL LETTER L" + + " WITH MIDDLE TILDELATIN SMALL LETTER L WITH BELTLATIN SMALL LETTER L WIT" + + "H RETROFLEX HOOKLATIN SMALL LETTER LEZHLATIN SMALL LETTER TURNED MLATIN " + + "SMALL LETTER TURNED M WITH LONG LEGLATIN SMALL LETTER M WITH HOOKLATIN S" + + "MALL LETTER N WITH LEFT HOOKLATIN SMALL LETTER N WITH RETROFLEX HOOKLATI" + + "N LETTER SMALL CAPITAL NLATIN SMALL LETTER BARRED OLATIN LETTER SMALL CA" + + "PITAL OELATIN SMALL LETTER CLOSED OMEGALATIN SMALL LETTER PHILATIN SMALL" + + " LETTER TURNED RLATIN SMALL LETTER TURNED R WITH LONG LEGLATIN SMALL LET" + + "TER TURNED R WITH HOOKLATIN SMALL LETTER R WITH LONG LEGLATIN SMALL LETT" + + "ER R WITH TAILLATIN SMALL LETTER R WITH FISHHOOKLATIN SMALL LETTER REVER" + + "SED R WITH FISHHOOKLATIN LETTER SMALL CAPITAL RLATIN LETTER SMALL CAPITA" + + "L INVERTED RLATIN SMALL LETTER S WITH HOOKLATIN SMALL LETTER ESHLATIN SM" + + "ALL LETTER DOTLESS J WITH STROKE AND HOOKLATIN SMALL LETTER SQUAT REVERS" + + "ED ESHLATIN SMALL LETTER ESH WITH CURLLATIN SMALL LETTER TURNED TLATIN S" + + "MALL LETTER T WITH RETROFLEX HOOKLATIN SMALL LETTER U BARLATIN SMALL LET" + + "TER UPSILONLATIN SMALL LETTER V WITH HOOKLATIN SMALL LETTER TURNED VLATI" + + "N SMALL LETTER TURNED WLATIN SMALL LETTER TURNED YLATIN LETTER SMALL CAP" + + "ITAL YLATIN SMALL LETTER Z WITH RETROFLEX HOOKLATIN SMALL LETTER Z WITH " + + "CURLLATIN SMALL LETTER EZHLATIN SMALL LETTER EZH WITH CURLLATIN LETTER G" + + "LOTTAL STOPLATIN LETTER PHARYNGEAL VOICED FRICATIVELATIN LETTER INVERTED" + + " GLOTTAL STOPLATIN LETTER STRETCHED CLATIN LETTER BILABIAL CLICKLATIN LE" + + "TTER SMALL CAPITAL BLATIN SMALL LETTER CLOSED OPEN ELATIN LETTER SMALL C" + + "APITAL G WITH HOOKLATIN LETTER SMALL CAPITAL HLATIN SMALL LETTER J WITH " + + "CROSSED-TAILLATIN SMALL LETTER TURNED KLATIN LETTER SMALL CAPITAL LLATIN" + + " SMALL LETTER Q WITH HOOKLATIN LETTER GLOTTAL STOP WITH STROKELATIN LETT" + + "ER REVERSED GLOTTAL STOP WITH STROKELATIN SMALL LETTER DZ DIGRAPHLATIN S" + + "MALL LETTER DEZH DIGRAPHLATIN SMALL LETTER DZ DIGRAPH WITH CURLLATIN SMA" + + "LL LETTER TS DIGRAPHLATIN SMALL LETTER TESH DIGRAPHLATIN SMALL LETTER TC" + + " DIGRAPH WITH CURLLATIN SMALL LETTER FENG DIGRAPHLATIN SMALL LETTER LS D") + ("" + + "IGRAPHLATIN SMALL LETTER LZ DIGRAPHLATIN LETTER BILABIAL PERCUSSIVELATIN" + + " LETTER BIDENTAL PERCUSSIVELATIN SMALL LETTER TURNED H WITH FISHHOOKLATI" + + "N SMALL LETTER TURNED H WITH FISHHOOK AND TAILMODIFIER LETTER SMALL HMOD" + + "IFIER LETTER SMALL H WITH HOOKMODIFIER LETTER SMALL JMODIFIER LETTER SMA" + + "LL RMODIFIER LETTER SMALL TURNED RMODIFIER LETTER SMALL TURNED R WITH HO" + + "OKMODIFIER LETTER SMALL CAPITAL INVERTED RMODIFIER LETTER SMALL WMODIFIE" + + "R LETTER SMALL YMODIFIER LETTER PRIMEMODIFIER LETTER DOUBLE PRIMEMODIFIE" + + "R LETTER TURNED COMMAMODIFIER LETTER APOSTROPHEMODIFIER LETTER REVERSED " + + "COMMAMODIFIER LETTER RIGHT HALF RINGMODIFIER LETTER LEFT HALF RINGMODIFI" + + "ER LETTER GLOTTAL STOPMODIFIER LETTER REVERSED GLOTTAL STOPMODIFIER LETT" + + "ER LEFT ARROWHEADMODIFIER LETTER RIGHT ARROWHEADMODIFIER LETTER UP ARROW" + + "HEADMODIFIER LETTER DOWN ARROWHEADMODIFIER LETTER CIRCUMFLEX ACCENTCARON" + + "MODIFIER LETTER VERTICAL LINEMODIFIER LETTER MACRONMODIFIER LETTER ACUTE" + + " ACCENTMODIFIER LETTER GRAVE ACCENTMODIFIER LETTER LOW VERTICAL LINEMODI" + + "FIER LETTER LOW MACRONMODIFIER LETTER LOW GRAVE ACCENTMODIFIER LETTER LO" + + "W ACUTE ACCENTMODIFIER LETTER TRIANGULAR COLONMODIFIER LETTER HALF TRIAN" + + "GULAR COLONMODIFIER LETTER CENTRED RIGHT HALF RINGMODIFIER LETTER CENTRE" + + "D LEFT HALF RINGMODIFIER LETTER UP TACKMODIFIER LETTER DOWN TACKMODIFIER" + + " LETTER PLUS SIGNMODIFIER LETTER MINUS SIGNBREVEDOT ABOVERING ABOVEOGONE" + + "KSMALL TILDEDOUBLE ACUTE ACCENTMODIFIER LETTER RHOTIC HOOKMODIFIER LETTE" + + "R CROSS ACCENTMODIFIER LETTER SMALL GAMMAMODIFIER LETTER SMALL LMODIFIER" + + " LETTER SMALL SMODIFIER LETTER SMALL XMODIFIER LETTER SMALL REVERSED GLO" + + "TTAL STOPMODIFIER LETTER EXTRA-HIGH TONE BARMODIFIER LETTER HIGH TONE BA" + + "RMODIFIER LETTER MID TONE BARMODIFIER LETTER LOW TONE BARMODIFIER LETTER" + + " EXTRA-LOW TONE BARMODIFIER LETTER YIN DEPARTING TONE MARKMODIFIER LETTE" + + "R YANG DEPARTING TONE MARKMODIFIER LETTER VOICINGMODIFIER LETTER UNASPIR" + + "ATEDMODIFIER LETTER DOUBLE APOSTROPHEMODIFIER LETTER LOW DOWN ARROWHEADM" + + "ODIFIER LETTER LOW UP ARROWHEADMODIFIER LETTER LOW LEFT ARROWHEADMODIFIE" + + "R LETTER LOW RIGHT ARROWHEADMODIFIER LETTER LOW RINGMODIFIER LETTER MIDD" + + "LE GRAVE ACCENTMODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENTMODIFIER LETTER" + + " MIDDLE DOUBLE ACUTE ACCENTMODIFIER LETTER LOW TILDEMODIFIER LETTER RAIS" + + "ED COLONMODIFIER LETTER BEGIN HIGH TONEMODIFIER LETTER END HIGH TONEMODI" + + "FIER LETTER BEGIN LOW TONEMODIFIER LETTER END LOW TONEMODIFIER LETTER SH" + + "ELFMODIFIER LETTER OPEN SHELFMODIFIER LETTER LOW LEFT ARROWCOMBINING GRA" + + "VE ACCENTCOMBINING ACUTE ACCENTCOMBINING CIRCUMFLEX ACCENTCOMBINING TILD" + + "ECOMBINING MACRONCOMBINING OVERLINECOMBINING BREVECOMBINING DOT ABOVECOM" + + "BINING DIAERESISCOMBINING HOOK ABOVECOMBINING RING ABOVECOMBINING DOUBLE" + + " ACUTE ACCENTCOMBINING CARONCOMBINING VERTICAL LINE ABOVECOMBINING DOUBL" + + "E VERTICAL LINE ABOVECOMBINING DOUBLE GRAVE ACCENTCOMBINING CANDRABINDUC" + + "OMBINING INVERTED BREVECOMBINING TURNED COMMA ABOVECOMBINING COMMA ABOVE" + + "COMBINING REVERSED COMMA ABOVECOMBINING COMMA ABOVE RIGHTCOMBINING GRAVE" + + " ACCENT BELOWCOMBINING ACUTE ACCENT BELOWCOMBINING LEFT TACK BELOWCOMBIN" + + "ING RIGHT TACK BELOWCOMBINING LEFT ANGLE ABOVECOMBINING HORNCOMBINING LE" + + "FT HALF RING BELOWCOMBINING UP TACK BELOWCOMBINING DOWN TACK BELOWCOMBIN" + + "ING PLUS SIGN BELOWCOMBINING MINUS SIGN BELOWCOMBINING PALATALIZED HOOK " + + "BELOWCOMBINING RETROFLEX HOOK BELOWCOMBINING DOT BELOWCOMBINING DIAERESI" + + "S BELOWCOMBINING RING BELOWCOMBINING COMMA BELOWCOMBINING CEDILLACOMBINI" + + "NG OGONEKCOMBINING VERTICAL LINE BELOWCOMBINING BRIDGE BELOWCOMBINING IN" + + "VERTED DOUBLE ARCH BELOWCOMBINING CARON BELOWCOMBINING CIRCUMFLEX ACCENT" + + " BELOWCOMBINING BREVE BELOWCOMBINING INVERTED BREVE BELOWCOMBINING TILDE" + + " BELOWCOMBINING MACRON BELOWCOMBINING LOW LINECOMBINING DOUBLE LOW LINEC" + + "OMBINING TILDE OVERLAYCOMBINING SHORT STROKE OVERLAYCOMBINING LONG STROK" + + "E OVERLAYCOMBINING SHORT SOLIDUS OVERLAYCOMBINING LONG SOLIDUS OVERLAYCO" + + "MBINING RIGHT HALF RING BELOWCOMBINING INVERTED BRIDGE BELOWCOMBINING SQ" + + "UARE BELOWCOMBINING SEAGULL BELOWCOMBINING X ABOVECOMBINING VERTICAL TIL" + + "DECOMBINING DOUBLE OVERLINECOMBINING GRAVE TONE MARKCOMBINING ACUTE TONE" + + " MARKCOMBINING GREEK PERISPOMENICOMBINING GREEK KORONISCOMBINING GREEK D" + + "IALYTIKA TONOSCOMBINING GREEK YPOGEGRAMMENICOMBINING BRIDGE ABOVECOMBINI" + + "NG EQUALS SIGN BELOWCOMBINING DOUBLE VERTICAL LINE BELOWCOMBINING LEFT A" + + "NGLE BELOWCOMBINING NOT TILDE ABOVECOMBINING HOMOTHETIC ABOVECOMBINING A" + + "LMOST EQUAL TO ABOVECOMBINING LEFT RIGHT ARROW BELOWCOMBINING UPWARDS AR" + + "ROW BELOWCOMBINING GRAPHEME JOINERCOMBINING RIGHT ARROWHEAD ABOVECOMBINI" + + "NG LEFT HALF RING ABOVECOMBINING FERMATACOMBINING X BELOWCOMBINING LEFT " + + "ARROWHEAD BELOWCOMBINING RIGHT ARROWHEAD BELOWCOMBINING RIGHT ARROWHEAD ") + ("" + + "AND UP ARROWHEAD BELOWCOMBINING RIGHT HALF RING ABOVECOMBINING DOT ABOVE" + + " RIGHTCOMBINING ASTERISK BELOWCOMBINING DOUBLE RING BELOWCOMBINING ZIGZA" + + "G ABOVECOMBINING DOUBLE BREVE BELOWCOMBINING DOUBLE BREVECOMBINING DOUBL" + + "E MACRONCOMBINING DOUBLE MACRON BELOWCOMBINING DOUBLE TILDECOMBINING DOU" + + "BLE INVERTED BREVECOMBINING DOUBLE RIGHTWARDS ARROW BELOWCOMBINING LATIN" + + " SMALL LETTER ACOMBINING LATIN SMALL LETTER ECOMBINING LATIN SMALL LETTE" + + "R ICOMBINING LATIN SMALL LETTER OCOMBINING LATIN SMALL LETTER UCOMBINING" + + " LATIN SMALL LETTER CCOMBINING LATIN SMALL LETTER DCOMBINING LATIN SMALL" + + " LETTER HCOMBINING LATIN SMALL LETTER MCOMBINING LATIN SMALL LETTER RCOM" + + "BINING LATIN SMALL LETTER TCOMBINING LATIN SMALL LETTER VCOMBINING LATIN" + + " SMALL LETTER XGREEK CAPITAL LETTER HETAGREEK SMALL LETTER HETAGREEK CAP" + + "ITAL LETTER ARCHAIC SAMPIGREEK SMALL LETTER ARCHAIC SAMPIGREEK NUMERAL S" + + "IGNGREEK LOWER NUMERAL SIGNGREEK CAPITAL LETTER PAMPHYLIAN DIGAMMAGREEK " + + "SMALL LETTER PAMPHYLIAN DIGAMMAGREEK YPOGEGRAMMENIGREEK SMALL REVERSED L" + + "UNATE SIGMA SYMBOLGREEK SMALL DOTTED LUNATE SIGMA SYMBOLGREEK SMALL REVE" + + "RSED DOTTED LUNATE SIGMA SYMBOLGREEK QUESTION MARKGREEK CAPITAL LETTER Y" + + "OTGREEK TONOSGREEK DIALYTIKA TONOSGREEK CAPITAL LETTER ALPHA WITH TONOSG" + + "REEK ANO TELEIAGREEK CAPITAL LETTER EPSILON WITH TONOSGREEK CAPITAL LETT" + + "ER ETA WITH TONOSGREEK CAPITAL LETTER IOTA WITH TONOSGREEK CAPITAL LETTE" + + "R OMICRON WITH TONOSGREEK CAPITAL LETTER UPSILON WITH TONOSGREEK CAPITAL" + + " LETTER OMEGA WITH TONOSGREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS" + + "GREEK CAPITAL LETTER ALPHAGREEK CAPITAL LETTER BETAGREEK CAPITAL LETTER " + + "GAMMAGREEK CAPITAL LETTER DELTAGREEK CAPITAL LETTER EPSILONGREEK CAPITAL" + + " LETTER ZETAGREEK CAPITAL LETTER ETAGREEK CAPITAL LETTER THETAGREEK CAPI" + + "TAL LETTER IOTAGREEK CAPITAL LETTER KAPPAGREEK CAPITAL LETTER LAMDAGREEK" + + " CAPITAL LETTER MUGREEK CAPITAL LETTER NUGREEK CAPITAL LETTER XIGREEK CA" + + "PITAL LETTER OMICRONGREEK CAPITAL LETTER PIGREEK CAPITAL LETTER RHOGREEK" + + " CAPITAL LETTER SIGMAGREEK CAPITAL LETTER TAUGREEK CAPITAL LETTER UPSILO" + + "NGREEK CAPITAL LETTER PHIGREEK CAPITAL LETTER CHIGREEK CAPITAL LETTER PS" + + "IGREEK CAPITAL LETTER OMEGAGREEK CAPITAL LETTER IOTA WITH DIALYTIKAGREEK" + + " CAPITAL LETTER UPSILON WITH DIALYTIKAGREEK SMALL LETTER ALPHA WITH TONO" + + "SGREEK SMALL LETTER EPSILON WITH TONOSGREEK SMALL LETTER ETA WITH TONOSG" + + "REEK SMALL LETTER IOTA WITH TONOSGREEK SMALL LETTER UPSILON WITH DIALYTI" + + "KA AND TONOSGREEK SMALL LETTER ALPHAGREEK SMALL LETTER BETAGREEK SMALL L" + + "ETTER GAMMAGREEK SMALL LETTER DELTAGREEK SMALL LETTER EPSILONGREEK SMALL" + + " LETTER ZETAGREEK SMALL LETTER ETAGREEK SMALL LETTER THETAGREEK SMALL LE" + + "TTER IOTAGREEK SMALL LETTER KAPPAGREEK SMALL LETTER LAMDAGREEK SMALL LET" + + "TER MUGREEK SMALL LETTER NUGREEK SMALL LETTER XIGREEK SMALL LETTER OMICR" + + "ONGREEK SMALL LETTER PIGREEK SMALL LETTER RHOGREEK SMALL LETTER FINAL SI" + + "GMAGREEK SMALL LETTER SIGMAGREEK SMALL LETTER TAUGREEK SMALL LETTER UPSI" + + "LONGREEK SMALL LETTER PHIGREEK SMALL LETTER CHIGREEK SMALL LETTER PSIGRE" + + "EK SMALL LETTER OMEGAGREEK SMALL LETTER IOTA WITH DIALYTIKAGREEK SMALL L" + + "ETTER UPSILON WITH DIALYTIKAGREEK SMALL LETTER OMICRON WITH TONOSGREEK S" + + "MALL LETTER UPSILON WITH TONOSGREEK SMALL LETTER OMEGA WITH TONOSGREEK C" + + "APITAL KAI SYMBOLGREEK BETA SYMBOLGREEK THETA SYMBOLGREEK UPSILON WITH H" + + "OOK SYMBOLGREEK UPSILON WITH ACUTE AND HOOK SYMBOLGREEK UPSILON WITH DIA" + + "ERESIS AND HOOK SYMBOLGREEK PHI SYMBOLGREEK PI SYMBOLGREEK KAI SYMBOLGRE" + + "EK LETTER ARCHAIC KOPPAGREEK SMALL LETTER ARCHAIC KOPPAGREEK LETTER STIG" + + "MAGREEK SMALL LETTER STIGMAGREEK LETTER DIGAMMAGREEK SMALL LETTER DIGAMM" + + "AGREEK LETTER KOPPAGREEK SMALL LETTER KOPPAGREEK LETTER SAMPIGREEK SMALL" + + " LETTER SAMPICOPTIC CAPITAL LETTER SHEICOPTIC SMALL LETTER SHEICOPTIC CA" + + "PITAL LETTER FEICOPTIC SMALL LETTER FEICOPTIC CAPITAL LETTER KHEICOPTIC " + + "SMALL LETTER KHEICOPTIC CAPITAL LETTER HORICOPTIC SMALL LETTER HORICOPTI" + + "C CAPITAL LETTER GANGIACOPTIC SMALL LETTER GANGIACOPTIC CAPITAL LETTER S" + + "HIMACOPTIC SMALL LETTER SHIMACOPTIC CAPITAL LETTER DEICOPTIC SMALL LETTE" + + "R DEIGREEK KAPPA SYMBOLGREEK RHO SYMBOLGREEK LUNATE SIGMA SYMBOLGREEK LE" + + "TTER YOTGREEK CAPITAL THETA SYMBOLGREEK LUNATE EPSILON SYMBOLGREEK REVER" + + "SED LUNATE EPSILON SYMBOLGREEK CAPITAL LETTER SHOGREEK SMALL LETTER SHOG" + + "REEK CAPITAL LUNATE SIGMA SYMBOLGREEK CAPITAL LETTER SANGREEK SMALL LETT" + + "ER SANGREEK RHO WITH STROKE SYMBOLGREEK CAPITAL REVERSED LUNATE SIGMA SY" + + "MBOLGREEK CAPITAL DOTTED LUNATE SIGMA SYMBOLGREEK CAPITAL REVERSED DOTTE" + + "D LUNATE SIGMA SYMBOLCYRILLIC CAPITAL LETTER IE WITH GRAVECYRILLIC CAPIT" + + "AL LETTER IOCYRILLIC CAPITAL LETTER DJECYRILLIC CAPITAL LETTER GJECYRILL" + + "IC CAPITAL LETTER UKRAINIAN IECYRILLIC CAPITAL LETTER DZECYRILLIC CAPITA") + ("" + + "L LETTER BYELORUSSIAN-UKRAINIAN ICYRILLIC CAPITAL LETTER YICYRILLIC CAPI" + + "TAL LETTER JECYRILLIC CAPITAL LETTER LJECYRILLIC CAPITAL LETTER NJECYRIL" + + "LIC CAPITAL LETTER TSHECYRILLIC CAPITAL LETTER KJECYRILLIC CAPITAL LETTE" + + "R I WITH GRAVECYRILLIC CAPITAL LETTER SHORT UCYRILLIC CAPITAL LETTER DZH" + + "ECYRILLIC CAPITAL LETTER ACYRILLIC CAPITAL LETTER BECYRILLIC CAPITAL LET" + + "TER VECYRILLIC CAPITAL LETTER GHECYRILLIC CAPITAL LETTER DECYRILLIC CAPI" + + "TAL LETTER IECYRILLIC CAPITAL LETTER ZHECYRILLIC CAPITAL LETTER ZECYRILL" + + "IC CAPITAL LETTER ICYRILLIC CAPITAL LETTER SHORT ICYRILLIC CAPITAL LETTE" + + "R KACYRILLIC CAPITAL LETTER ELCYRILLIC CAPITAL LETTER EMCYRILLIC CAPITAL" + + " LETTER ENCYRILLIC CAPITAL LETTER OCYRILLIC CAPITAL LETTER PECYRILLIC CA" + + "PITAL LETTER ERCYRILLIC CAPITAL LETTER ESCYRILLIC CAPITAL LETTER TECYRIL" + + "LIC CAPITAL LETTER UCYRILLIC CAPITAL LETTER EFCYRILLIC CAPITAL LETTER HA" + + "CYRILLIC CAPITAL LETTER TSECYRILLIC CAPITAL LETTER CHECYRILLIC CAPITAL L" + + "ETTER SHACYRILLIC CAPITAL LETTER SHCHACYRILLIC CAPITAL LETTER HARD SIGNC" + + "YRILLIC CAPITAL LETTER YERUCYRILLIC CAPITAL LETTER SOFT SIGNCYRILLIC CAP" + + "ITAL LETTER ECYRILLIC CAPITAL LETTER YUCYRILLIC CAPITAL LETTER YACYRILLI" + + "C SMALL LETTER ACYRILLIC SMALL LETTER BECYRILLIC SMALL LETTER VECYRILLIC" + + " SMALL LETTER GHECYRILLIC SMALL LETTER DECYRILLIC SMALL LETTER IECYRILLI" + + "C SMALL LETTER ZHECYRILLIC SMALL LETTER ZECYRILLIC SMALL LETTER ICYRILLI" + + "C SMALL LETTER SHORT ICYRILLIC SMALL LETTER KACYRILLIC SMALL LETTER ELCY" + + "RILLIC SMALL LETTER EMCYRILLIC SMALL LETTER ENCYRILLIC SMALL LETTER OCYR" + + "ILLIC SMALL LETTER PECYRILLIC SMALL LETTER ERCYRILLIC SMALL LETTER ESCYR" + + "ILLIC SMALL LETTER TECYRILLIC SMALL LETTER UCYRILLIC SMALL LETTER EFCYRI" + + "LLIC SMALL LETTER HACYRILLIC SMALL LETTER TSECYRILLIC SMALL LETTER CHECY" + + "RILLIC SMALL LETTER SHACYRILLIC SMALL LETTER SHCHACYRILLIC SMALL LETTER " + + "HARD SIGNCYRILLIC SMALL LETTER YERUCYRILLIC SMALL LETTER SOFT SIGNCYRILL" + + "IC SMALL LETTER ECYRILLIC SMALL LETTER YUCYRILLIC SMALL LETTER YACYRILLI" + + "C SMALL LETTER IE WITH GRAVECYRILLIC SMALL LETTER IOCYRILLIC SMALL LETTE" + + "R DJECYRILLIC SMALL LETTER GJECYRILLIC SMALL LETTER UKRAINIAN IECYRILLIC" + + " SMALL LETTER DZECYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN ICYRILLIC " + + "SMALL LETTER YICYRILLIC SMALL LETTER JECYRILLIC SMALL LETTER LJECYRILLIC" + + " SMALL LETTER NJECYRILLIC SMALL LETTER TSHECYRILLIC SMALL LETTER KJECYRI" + + "LLIC SMALL LETTER I WITH GRAVECYRILLIC SMALL LETTER SHORT UCYRILLIC SMAL" + + "L LETTER DZHECYRILLIC CAPITAL LETTER OMEGACYRILLIC SMALL LETTER OMEGACYR" + + "ILLIC CAPITAL LETTER YATCYRILLIC SMALL LETTER YATCYRILLIC CAPITAL LETTER" + + " IOTIFIED ECYRILLIC SMALL LETTER IOTIFIED ECYRILLIC CAPITAL LETTER LITTL" + + "E YUSCYRILLIC SMALL LETTER LITTLE YUSCYRILLIC CAPITAL LETTER IOTIFIED LI" + + "TTLE YUSCYRILLIC SMALL LETTER IOTIFIED LITTLE YUSCYRILLIC CAPITAL LETTER" + + " BIG YUSCYRILLIC SMALL LETTER BIG YUSCYRILLIC CAPITAL LETTER IOTIFIED BI" + + "G YUSCYRILLIC SMALL LETTER IOTIFIED BIG YUSCYRILLIC CAPITAL LETTER KSICY" + + "RILLIC SMALL LETTER KSICYRILLIC CAPITAL LETTER PSICYRILLIC SMALL LETTER " + + "PSICYRILLIC CAPITAL LETTER FITACYRILLIC SMALL LETTER FITACYRILLIC CAPITA" + + "L LETTER IZHITSACYRILLIC SMALL LETTER IZHITSACYRILLIC CAPITAL LETTER IZH" + + "ITSA WITH DOUBLE GRAVE ACCENTCYRILLIC SMALL LETTER IZHITSA WITH DOUBLE G" + + "RAVE ACCENTCYRILLIC CAPITAL LETTER UKCYRILLIC SMALL LETTER UKCYRILLIC CA" + + "PITAL LETTER ROUND OMEGACYRILLIC SMALL LETTER ROUND OMEGACYRILLIC CAPITA" + + "L LETTER OMEGA WITH TITLOCYRILLIC SMALL LETTER OMEGA WITH TITLOCYRILLIC " + + "CAPITAL LETTER OTCYRILLIC SMALL LETTER OTCYRILLIC CAPITAL LETTER KOPPACY" + + "RILLIC SMALL LETTER KOPPACYRILLIC THOUSANDS SIGNCOMBINING CYRILLIC TITLO" + + "COMBINING CYRILLIC PALATALIZATIONCOMBINING CYRILLIC DASIA PNEUMATACOMBIN" + + "ING CYRILLIC PSILI PNEUMATACOMBINING CYRILLIC POKRYTIECOMBINING CYRILLIC" + + " HUNDRED THOUSANDS SIGNCOMBINING CYRILLIC MILLIONS SIGNCYRILLIC CAPITAL " + + "LETTER SHORT I WITH TAILCYRILLIC SMALL LETTER SHORT I WITH TAILCYRILLIC " + + "CAPITAL LETTER SEMISOFT SIGNCYRILLIC SMALL LETTER SEMISOFT SIGNCYRILLIC " + + "CAPITAL LETTER ER WITH TICKCYRILLIC SMALL LETTER ER WITH TICKCYRILLIC CA" + + "PITAL LETTER GHE WITH UPTURNCYRILLIC SMALL LETTER GHE WITH UPTURNCYRILLI" + + "C CAPITAL LETTER GHE WITH STROKECYRILLIC SMALL LETTER GHE WITH STROKECYR" + + "ILLIC CAPITAL LETTER GHE WITH MIDDLE HOOKCYRILLIC SMALL LETTER GHE WITH " + + "MIDDLE HOOKCYRILLIC CAPITAL LETTER ZHE WITH DESCENDERCYRILLIC SMALL LETT" + + "ER ZHE WITH DESCENDERCYRILLIC CAPITAL LETTER ZE WITH DESCENDERCYRILLIC S" + + "MALL LETTER ZE WITH DESCENDERCYRILLIC CAPITAL LETTER KA WITH DESCENDERCY" + + "RILLIC SMALL LETTER KA WITH DESCENDERCYRILLIC CAPITAL LETTER KA WITH VER" + + "TICAL STROKECYRILLIC SMALL LETTER KA WITH VERTICAL STROKECYRILLIC CAPITA" + + "L LETTER KA WITH STROKECYRILLIC SMALL LETTER KA WITH STROKECYRILLIC CAPI") + ("" + + "TAL LETTER BASHKIR KACYRILLIC SMALL LETTER BASHKIR KACYRILLIC CAPITAL LE" + + "TTER EN WITH DESCENDERCYRILLIC SMALL LETTER EN WITH DESCENDERCYRILLIC CA" + + "PITAL LIGATURE EN GHECYRILLIC SMALL LIGATURE EN GHECYRILLIC CAPITAL LETT" + + "ER PE WITH MIDDLE HOOKCYRILLIC SMALL LETTER PE WITH MIDDLE HOOKCYRILLIC " + + "CAPITAL LETTER ABKHASIAN HACYRILLIC SMALL LETTER ABKHASIAN HACYRILLIC CA" + + "PITAL LETTER ES WITH DESCENDERCYRILLIC SMALL LETTER ES WITH DESCENDERCYR" + + "ILLIC CAPITAL LETTER TE WITH DESCENDERCYRILLIC SMALL LETTER TE WITH DESC" + + "ENDERCYRILLIC CAPITAL LETTER STRAIGHT UCYRILLIC SMALL LETTER STRAIGHT UC" + + "YRILLIC CAPITAL LETTER STRAIGHT U WITH STROKECYRILLIC SMALL LETTER STRAI" + + "GHT U WITH STROKECYRILLIC CAPITAL LETTER HA WITH DESCENDERCYRILLIC SMALL" + + " LETTER HA WITH DESCENDERCYRILLIC CAPITAL LIGATURE TE TSECYRILLIC SMALL " + + "LIGATURE TE TSECYRILLIC CAPITAL LETTER CHE WITH DESCENDERCYRILLIC SMALL " + + "LETTER CHE WITH DESCENDERCYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROK" + + "ECYRILLIC SMALL LETTER CHE WITH VERTICAL STROKECYRILLIC CAPITAL LETTER S" + + "HHACYRILLIC SMALL LETTER SHHACYRILLIC CAPITAL LETTER ABKHASIAN CHECYRILL" + + "IC SMALL LETTER ABKHASIAN CHECYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH " + + "DESCENDERCYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDERCYRILLIC LETT" + + "ER PALOCHKACYRILLIC CAPITAL LETTER ZHE WITH BREVECYRILLIC SMALL LETTER Z" + + "HE WITH BREVECYRILLIC CAPITAL LETTER KA WITH HOOKCYRILLIC SMALL LETTER K" + + "A WITH HOOKCYRILLIC CAPITAL LETTER EL WITH TAILCYRILLIC SMALL LETTER EL " + + "WITH TAILCYRILLIC CAPITAL LETTER EN WITH HOOKCYRILLIC SMALL LETTER EN WI" + + "TH HOOKCYRILLIC CAPITAL LETTER EN WITH TAILCYRILLIC SMALL LETTER EN WITH" + + " TAILCYRILLIC CAPITAL LETTER KHAKASSIAN CHECYRILLIC SMALL LETTER KHAKASS" + + "IAN CHECYRILLIC CAPITAL LETTER EM WITH TAILCYRILLIC SMALL LETTER EM WITH" + + " TAILCYRILLIC SMALL LETTER PALOCHKACYRILLIC CAPITAL LETTER A WITH BREVEC" + + "YRILLIC SMALL LETTER A WITH BREVECYRILLIC CAPITAL LETTER A WITH DIAERESI" + + "SCYRILLIC SMALL LETTER A WITH DIAERESISCYRILLIC CAPITAL LIGATURE A IECYR" + + "ILLIC SMALL LIGATURE A IECYRILLIC CAPITAL LETTER IE WITH BREVECYRILLIC S" + + "MALL LETTER IE WITH BREVECYRILLIC CAPITAL LETTER SCHWACYRILLIC SMALL LET" + + "TER SCHWACYRILLIC CAPITAL LETTER SCHWA WITH DIAERESISCYRILLIC SMALL LETT" + + "ER SCHWA WITH DIAERESISCYRILLIC CAPITAL LETTER ZHE WITH DIAERESISCYRILLI" + + "C SMALL LETTER ZHE WITH DIAERESISCYRILLIC CAPITAL LETTER ZE WITH DIAERES" + + "ISCYRILLIC SMALL LETTER ZE WITH DIAERESISCYRILLIC CAPITAL LETTER ABKHASI" + + "AN DZECYRILLIC SMALL LETTER ABKHASIAN DZECYRILLIC CAPITAL LETTER I WITH " + + "MACRONCYRILLIC SMALL LETTER I WITH MACRONCYRILLIC CAPITAL LETTER I WITH " + + "DIAERESISCYRILLIC SMALL LETTER I WITH DIAERESISCYRILLIC CAPITAL LETTER O" + + " WITH DIAERESISCYRILLIC SMALL LETTER O WITH DIAERESISCYRILLIC CAPITAL LE" + + "TTER BARRED OCYRILLIC SMALL LETTER BARRED OCYRILLIC CAPITAL LETTER BARRE" + + "D O WITH DIAERESISCYRILLIC SMALL LETTER BARRED O WITH DIAERESISCYRILLIC " + + "CAPITAL LETTER E WITH DIAERESISCYRILLIC SMALL LETTER E WITH DIAERESISCYR" + + "ILLIC CAPITAL LETTER U WITH MACRONCYRILLIC SMALL LETTER U WITH MACRONCYR" + + "ILLIC CAPITAL LETTER U WITH DIAERESISCYRILLIC SMALL LETTER U WITH DIAERE" + + "SISCYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTECYRILLIC SMALL LETTER U WI" + + "TH DOUBLE ACUTECYRILLIC CAPITAL LETTER CHE WITH DIAERESISCYRILLIC SMALL " + + "LETTER CHE WITH DIAERESISCYRILLIC CAPITAL LETTER GHE WITH DESCENDERCYRIL" + + "LIC SMALL LETTER GHE WITH DESCENDERCYRILLIC CAPITAL LETTER YERU WITH DIA" + + "ERESISCYRILLIC SMALL LETTER YERU WITH DIAERESISCYRILLIC CAPITAL LETTER G" + + "HE WITH STROKE AND HOOKCYRILLIC SMALL LETTER GHE WITH STROKE AND HOOKCYR" + + "ILLIC CAPITAL LETTER HA WITH HOOKCYRILLIC SMALL LETTER HA WITH HOOKCYRIL" + + "LIC CAPITAL LETTER HA WITH STROKECYRILLIC SMALL LETTER HA WITH STROKECYR" + + "ILLIC CAPITAL LETTER KOMI DECYRILLIC SMALL LETTER KOMI DECYRILLIC CAPITA" + + "L LETTER KOMI DJECYRILLIC SMALL LETTER KOMI DJECYRILLIC CAPITAL LETTER K" + + "OMI ZJECYRILLIC SMALL LETTER KOMI ZJECYRILLIC CAPITAL LETTER KOMI DZJECY" + + "RILLIC SMALL LETTER KOMI DZJECYRILLIC CAPITAL LETTER KOMI LJECYRILLIC SM" + + "ALL LETTER KOMI LJECYRILLIC CAPITAL LETTER KOMI NJECYRILLIC SMALL LETTER" + + " KOMI NJECYRILLIC CAPITAL LETTER KOMI SJECYRILLIC SMALL LETTER KOMI SJEC" + + "YRILLIC CAPITAL LETTER KOMI TJECYRILLIC SMALL LETTER KOMI TJECYRILLIC CA" + + "PITAL LETTER REVERSED ZECYRILLIC SMALL LETTER REVERSED ZECYRILLIC CAPITA" + + "L LETTER EL WITH HOOKCYRILLIC SMALL LETTER EL WITH HOOKCYRILLIC CAPITAL " + + "LETTER LHACYRILLIC SMALL LETTER LHACYRILLIC CAPITAL LETTER RHACYRILLIC S" + + "MALL LETTER RHACYRILLIC CAPITAL LETTER YAECYRILLIC SMALL LETTER YAECYRIL" + + "LIC CAPITAL LETTER QACYRILLIC SMALL LETTER QACYRILLIC CAPITAL LETTER WEC" + + "YRILLIC SMALL LETTER WECYRILLIC CAPITAL LETTER ALEUT KACYRILLIC SMALL LE" + + "TTER ALEUT KACYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOKCYRILLIC SMALL L") + ("" + + "ETTER EL WITH MIDDLE HOOKCYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOKCYRI" + + "LLIC SMALL LETTER EN WITH MIDDLE HOOKCYRILLIC CAPITAL LETTER PE WITH DES" + + "CENDERCYRILLIC SMALL LETTER PE WITH DESCENDERCYRILLIC CAPITAL LETTER SHH" + + "A WITH DESCENDERCYRILLIC SMALL LETTER SHHA WITH DESCENDERCYRILLIC CAPITA" + + "L LETTER EN WITH LEFT HOOKCYRILLIC SMALL LETTER EN WITH LEFT HOOKCYRILLI" + + "C CAPITAL LETTER DZZHECYRILLIC SMALL LETTER DZZHECYRILLIC CAPITAL LETTER" + + " DCHECYRILLIC SMALL LETTER DCHECYRILLIC CAPITAL LETTER EL WITH DESCENDER" + + "CYRILLIC SMALL LETTER EL WITH DESCENDERARMENIAN CAPITAL LETTER AYBARMENI" + + "AN CAPITAL LETTER BENARMENIAN CAPITAL LETTER GIMARMENIAN CAPITAL LETTER " + + "DAARMENIAN CAPITAL LETTER ECHARMENIAN CAPITAL LETTER ZAARMENIAN CAPITAL " + + "LETTER EHARMENIAN CAPITAL LETTER ETARMENIAN CAPITAL LETTER TOARMENIAN CA" + + "PITAL LETTER ZHEARMENIAN CAPITAL LETTER INIARMENIAN CAPITAL LETTER LIWNA" + + "RMENIAN CAPITAL LETTER XEHARMENIAN CAPITAL LETTER CAARMENIAN CAPITAL LET" + + "TER KENARMENIAN CAPITAL LETTER HOARMENIAN CAPITAL LETTER JAARMENIAN CAPI" + + "TAL LETTER GHADARMENIAN CAPITAL LETTER CHEHARMENIAN CAPITAL LETTER MENAR" + + "MENIAN CAPITAL LETTER YIARMENIAN CAPITAL LETTER NOWARMENIAN CAPITAL LETT" + + "ER SHAARMENIAN CAPITAL LETTER VOARMENIAN CAPITAL LETTER CHAARMENIAN CAPI" + + "TAL LETTER PEHARMENIAN CAPITAL LETTER JHEHARMENIAN CAPITAL LETTER RAARME" + + "NIAN CAPITAL LETTER SEHARMENIAN CAPITAL LETTER VEWARMENIAN CAPITAL LETTE" + + "R TIWNARMENIAN CAPITAL LETTER REHARMENIAN CAPITAL LETTER COARMENIAN CAPI" + + "TAL LETTER YIWNARMENIAN CAPITAL LETTER PIWRARMENIAN CAPITAL LETTER KEHAR" + + "MENIAN CAPITAL LETTER OHARMENIAN CAPITAL LETTER FEHARMENIAN MODIFIER LET" + + "TER LEFT HALF RINGARMENIAN APOSTROPHEARMENIAN EMPHASIS MARKARMENIAN EXCL" + + "AMATION MARKARMENIAN COMMAARMENIAN QUESTION MARKARMENIAN ABBREVIATION MA" + + "RKARMENIAN SMALL LETTER AYBARMENIAN SMALL LETTER BENARMENIAN SMALL LETTE" + + "R GIMARMENIAN SMALL LETTER DAARMENIAN SMALL LETTER ECHARMENIAN SMALL LET" + + "TER ZAARMENIAN SMALL LETTER EHARMENIAN SMALL LETTER ETARMENIAN SMALL LET" + + "TER TOARMENIAN SMALL LETTER ZHEARMENIAN SMALL LETTER INIARMENIAN SMALL L" + + "ETTER LIWNARMENIAN SMALL LETTER XEHARMENIAN SMALL LETTER CAARMENIAN SMAL" + + "L LETTER KENARMENIAN SMALL LETTER HOARMENIAN SMALL LETTER JAARMENIAN SMA" + + "LL LETTER GHADARMENIAN SMALL LETTER CHEHARMENIAN SMALL LETTER MENARMENIA" + + "N SMALL LETTER YIARMENIAN SMALL LETTER NOWARMENIAN SMALL LETTER SHAARMEN" + + "IAN SMALL LETTER VOARMENIAN SMALL LETTER CHAARMENIAN SMALL LETTER PEHARM" + + "ENIAN SMALL LETTER JHEHARMENIAN SMALL LETTER RAARMENIAN SMALL LETTER SEH" + + "ARMENIAN SMALL LETTER VEWARMENIAN SMALL LETTER TIWNARMENIAN SMALL LETTER" + + " REHARMENIAN SMALL LETTER COARMENIAN SMALL LETTER YIWNARMENIAN SMALL LET" + + "TER PIWRARMENIAN SMALL LETTER KEHARMENIAN SMALL LETTER OHARMENIAN SMALL " + + "LETTER FEHARMENIAN SMALL LIGATURE ECH YIWNARMENIAN FULL STOPARMENIAN HYP" + + "HENRIGHT-FACING ARMENIAN ETERNITY SIGNLEFT-FACING ARMENIAN ETERNITY SIGN" + + "ARMENIAN DRAM SIGNHEBREW ACCENT ETNAHTAHEBREW ACCENT SEGOLHEBREW ACCENT " + + "SHALSHELETHEBREW ACCENT ZAQEF QATANHEBREW ACCENT ZAQEF GADOLHEBREW ACCEN" + + "T TIPEHAHEBREW ACCENT REVIAHEBREW ACCENT ZARQAHEBREW ACCENT PASHTAHEBREW" + + " ACCENT YETIVHEBREW ACCENT TEVIRHEBREW ACCENT GERESHHEBREW ACCENT GERESH" + + " MUQDAMHEBREW ACCENT GERSHAYIMHEBREW ACCENT QARNEY PARAHEBREW ACCENT TEL" + + "ISHA GEDOLAHEBREW ACCENT PAZERHEBREW ACCENT ATNAH HAFUKHHEBREW ACCENT MU" + + "NAHHEBREW ACCENT MAHAPAKHHEBREW ACCENT MERKHAHEBREW ACCENT MERKHA KEFULA" + + "HEBREW ACCENT DARGAHEBREW ACCENT QADMAHEBREW ACCENT TELISHA QETANAHEBREW" + + " ACCENT YERAH BEN YOMOHEBREW ACCENT OLEHEBREW ACCENT ILUYHEBREW ACCENT D" + + "EHIHEBREW ACCENT ZINORHEBREW MARK MASORA CIRCLEHEBREW POINT SHEVAHEBREW " + + "POINT HATAF SEGOLHEBREW POINT HATAF PATAHHEBREW POINT HATAF QAMATSHEBREW" + + " POINT HIRIQHEBREW POINT TSEREHEBREW POINT SEGOLHEBREW POINT PATAHHEBREW" + + " POINT QAMATSHEBREW POINT HOLAMHEBREW POINT HOLAM HASER FOR VAVHEBREW PO" + + "INT QUBUTSHEBREW POINT DAGESH OR MAPIQHEBREW POINT METEGHEBREW PUNCTUATI" + + "ON MAQAFHEBREW POINT RAFEHEBREW PUNCTUATION PASEQHEBREW POINT SHIN DOTHE" + + "BREW POINT SIN DOTHEBREW PUNCTUATION SOF PASUQHEBREW MARK UPPER DOTHEBRE" + + "W MARK LOWER DOTHEBREW PUNCTUATION NUN HAFUKHAHEBREW POINT QAMATS QATANH" + + "EBREW LETTER ALEFHEBREW LETTER BETHEBREW LETTER GIMELHEBREW LETTER DALET" + + "HEBREW LETTER HEHEBREW LETTER VAVHEBREW LETTER ZAYINHEBREW LETTER HETHEB" + + "REW LETTER TETHEBREW LETTER YODHEBREW LETTER FINAL KAFHEBREW LETTER KAFH" + + "EBREW LETTER LAMEDHEBREW LETTER FINAL MEMHEBREW LETTER MEMHEBREW LETTER " + + "FINAL NUNHEBREW LETTER NUNHEBREW LETTER SAMEKHHEBREW LETTER AYINHEBREW L" + + "ETTER FINAL PEHEBREW LETTER PEHEBREW LETTER FINAL TSADIHEBREW LETTER TSA" + + "DIHEBREW LETTER QOFHEBREW LETTER RESHHEBREW LETTER SHINHEBREW LETTER TAV" + + "HEBREW LIGATURE YIDDISH DOUBLE VAVHEBREW LIGATURE YIDDISH VAV YODHEBREW ") + ("" + + "LIGATURE YIDDISH DOUBLE YODHEBREW PUNCTUATION GERESHHEBREW PUNCTUATION G" + + "ERSHAYIMARABIC NUMBER SIGNARABIC SIGN SANAHARABIC FOOTNOTE MARKERARABIC " + + "SIGN SAFHAARABIC SIGN SAMVATARABIC NUMBER MARK ABOVEARABIC-INDIC CUBE RO" + + "OTARABIC-INDIC FOURTH ROOTARABIC RAYARABIC-INDIC PER MILLE SIGNARABIC-IN" + + "DIC PER TEN THOUSAND SIGNAFGHANI SIGNARABIC COMMAARABIC DATE SEPARATORAR" + + "ABIC POETIC VERSE SIGNARABIC SIGN MISRAARABIC SIGN SALLALLAHOU ALAYHE WA" + + "SSALLAMARABIC SIGN ALAYHE ASSALLAMARABIC SIGN RAHMATULLAH ALAYHEARABIC S" + + "IGN RADI ALLAHOU ANHUARABIC SIGN TAKHALLUSARABIC SMALL HIGH TAHARABIC SM" + + "ALL HIGH LIGATURE ALEF WITH LAM WITH YEHARABIC SMALL HIGH ZAINARABIC SMA" + + "LL FATHAARABIC SMALL DAMMAARABIC SMALL KASRAARABIC SEMICOLONARABIC LETTE" + + "R MARKARABIC TRIPLE DOT PUNCTUATION MARKARABIC QUESTION MARKARABIC LETTE" + + "R KASHMIRI YEHARABIC LETTER HAMZAARABIC LETTER ALEF WITH MADDA ABOVEARAB" + + "IC LETTER ALEF WITH HAMZA ABOVEARABIC LETTER WAW WITH HAMZA ABOVEARABIC " + + "LETTER ALEF WITH HAMZA BELOWARABIC LETTER YEH WITH HAMZA ABOVEARABIC LET" + + "TER ALEFARABIC LETTER BEHARABIC LETTER TEH MARBUTAARABIC LETTER TEHARABI" + + "C LETTER THEHARABIC LETTER JEEMARABIC LETTER HAHARABIC LETTER KHAHARABIC" + + " LETTER DALARABIC LETTER THALARABIC LETTER REHARABIC LETTER ZAINARABIC L" + + "ETTER SEENARABIC LETTER SHEENARABIC LETTER SADARABIC LETTER DADARABIC LE" + + "TTER TAHARABIC LETTER ZAHARABIC LETTER AINARABIC LETTER GHAINARABIC LETT" + + "ER KEHEH WITH TWO DOTS ABOVEARABIC LETTER KEHEH WITH THREE DOTS BELOWARA" + + "BIC LETTER FARSI YEH WITH INVERTED VARABIC LETTER FARSI YEH WITH TWO DOT" + + "S ABOVEARABIC LETTER FARSI YEH WITH THREE DOTS ABOVEARABIC TATWEELARABIC" + + " LETTER FEHARABIC LETTER QAFARABIC LETTER KAFARABIC LETTER LAMARABIC LET" + + "TER MEEMARABIC LETTER NOONARABIC LETTER HEHARABIC LETTER WAWARABIC LETTE" + + "R ALEF MAKSURAARABIC LETTER YEHARABIC FATHATANARABIC DAMMATANARABIC KASR" + + "ATANARABIC FATHAARABIC DAMMAARABIC KASRAARABIC SHADDAARABIC SUKUNARABIC " + + "MADDAH ABOVEARABIC HAMZA ABOVEARABIC HAMZA BELOWARABIC SUBSCRIPT ALEFARA" + + "BIC INVERTED DAMMAARABIC MARK NOON GHUNNAARABIC ZWARAKAYARABIC VOWEL SIG" + + "N SMALL V ABOVEARABIC VOWEL SIGN INVERTED SMALL V ABOVEARABIC VOWEL SIGN" + + " DOT BELOWARABIC REVERSED DAMMAARABIC FATHA WITH TWO DOTSARABIC WAVY HAM" + + "ZA BELOWARABIC-INDIC DIGIT ZEROARABIC-INDIC DIGIT ONEARABIC-INDIC DIGIT " + + "TWOARABIC-INDIC DIGIT THREEARABIC-INDIC DIGIT FOURARABIC-INDIC DIGIT FIV" + + "EARABIC-INDIC DIGIT SIXARABIC-INDIC DIGIT SEVENARABIC-INDIC DIGIT EIGHTA" + + "RABIC-INDIC DIGIT NINEARABIC PERCENT SIGNARABIC DECIMAL SEPARATORARABIC " + + "THOUSANDS SEPARATORARABIC FIVE POINTED STARARABIC LETTER DOTLESS BEHARAB" + + "IC LETTER DOTLESS QAFARABIC LETTER SUPERSCRIPT ALEFARABIC LETTER ALEF WA" + + "SLAARABIC LETTER ALEF WITH WAVY HAMZA ABOVEARABIC LETTER ALEF WITH WAVY " + + "HAMZA BELOWARABIC LETTER HIGH HAMZAARABIC LETTER HIGH HAMZA ALEFARABIC L" + + "ETTER HIGH HAMZA WAWARABIC LETTER U WITH HAMZA ABOVEARABIC LETTER HIGH H" + + "AMZA YEHARABIC LETTER TTEHARABIC LETTER TTEHEHARABIC LETTER BEEHARABIC L" + + "ETTER TEH WITH RINGARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDSARAB" + + "IC LETTER PEHARABIC LETTER TEHEHARABIC LETTER BEHEHARABIC LETTER HAH WIT" + + "H HAMZA ABOVEARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVEARABIC LETTER" + + " NYEHARABIC LETTER DYEHARABIC LETTER HAH WITH THREE DOTS ABOVEARABIC LET" + + "TER TCHEHARABIC LETTER TCHEHEHARABIC LETTER DDALARABIC LETTER DAL WITH R" + + "INGARABIC LETTER DAL WITH DOT BELOWARABIC LETTER DAL WITH DOT BELOW AND " + + "SMALL TAHARABIC LETTER DAHALARABIC LETTER DDAHALARABIC LETTER DULARABIC " + + "LETTER DAL WITH THREE DOTS ABOVE DOWNWARDSARABIC LETTER DAL WITH FOUR DO" + + "TS ABOVEARABIC LETTER RREHARABIC LETTER REH WITH SMALL VARABIC LETTER RE" + + "H WITH RINGARABIC LETTER REH WITH DOT BELOWARABIC LETTER REH WITH SMALL " + + "V BELOWARABIC LETTER REH WITH DOT BELOW AND DOT ABOVEARABIC LETTER REH W" + + "ITH TWO DOTS ABOVEARABIC LETTER JEHARABIC LETTER REH WITH FOUR DOTS ABOV" + + "EARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVEARABIC LETTER SEEN WITH " + + "THREE DOTS BELOWARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS " + + "ABOVEARABIC LETTER SAD WITH TWO DOTS BELOWARABIC LETTER SAD WITH THREE D" + + "OTS ABOVEARABIC LETTER TAH WITH THREE DOTS ABOVEARABIC LETTER AIN WITH T" + + "HREE DOTS ABOVEARABIC LETTER DOTLESS FEHARABIC LETTER FEH WITH DOT MOVED" + + " BELOWARABIC LETTER FEH WITH DOT BELOWARABIC LETTER VEHARABIC LETTER FEH" + + " WITH THREE DOTS BELOWARABIC LETTER PEHEHARABIC LETTER QAF WITH DOT ABOV" + + "EARABIC LETTER QAF WITH THREE DOTS ABOVEARABIC LETTER KEHEHARABIC LETTER" + + " SWASH KAFARABIC LETTER KAF WITH RINGARABIC LETTER KAF WITH DOT ABOVEARA" + + "BIC LETTER NGARABIC LETTER KAF WITH THREE DOTS BELOWARABIC LETTER GAFARA" + + "BIC LETTER GAF WITH RINGARABIC LETTER NGOEHARABIC LETTER GAF WITH TWO DO" + + "TS BELOWARABIC LETTER GUEHARABIC LETTER GAF WITH THREE DOTS ABOVEARABIC ") + ("" + + "LETTER LAM WITH SMALL VARABIC LETTER LAM WITH DOT ABOVEARABIC LETTER LAM" + + " WITH THREE DOTS ABOVEARABIC LETTER LAM WITH THREE DOTS BELOWARABIC LETT" + + "ER NOON WITH DOT BELOWARABIC LETTER NOON GHUNNAARABIC LETTER RNOONARABIC" + + " LETTER NOON WITH RINGARABIC LETTER NOON WITH THREE DOTS ABOVEARABIC LET" + + "TER HEH DOACHASHMEEARABIC LETTER TCHEH WITH DOT ABOVEARABIC LETTER HEH W" + + "ITH YEH ABOVEARABIC LETTER HEH GOALARABIC LETTER HEH GOAL WITH HAMZA ABO" + + "VEARABIC LETTER TEH MARBUTA GOALARABIC LETTER WAW WITH RINGARABIC LETTER" + + " KIRGHIZ OEARABIC LETTER OEARABIC LETTER UARABIC LETTER YUARABIC LETTER " + + "KIRGHIZ YUARABIC LETTER WAW WITH TWO DOTS ABOVEARABIC LETTER VEARABIC LE" + + "TTER FARSI YEHARABIC LETTER YEH WITH TAILARABIC LETTER YEH WITH SMALL VA" + + "RABIC LETTER WAW WITH DOT ABOVEARABIC LETTER EARABIC LETTER YEH WITH THR" + + "EE DOTS BELOWARABIC LETTER YEH BARREEARABIC LETTER YEH BARREE WITH HAMZA" + + " ABOVEARABIC FULL STOPARABIC LETTER AEARABIC SMALL HIGH LIGATURE SAD WIT" + + "H LAM WITH ALEF MAKSURAARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF" + + " MAKSURAARABIC SMALL HIGH MEEM INITIAL FORMARABIC SMALL HIGH LAM ALEFARA" + + "BIC SMALL HIGH JEEMARABIC SMALL HIGH THREE DOTSARABIC SMALL HIGH SEENARA" + + "BIC END OF AYAHARABIC START OF RUB EL HIZBARABIC SMALL HIGH ROUNDED ZERO" + + "ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZEROARABIC SMALL HIGH DOTLESS HEAD" + + " OF KHAHARABIC SMALL HIGH MEEM ISOLATED FORMARABIC SMALL LOW SEENARABIC " + + "SMALL HIGH MADDAARABIC SMALL WAWARABIC SMALL YEHARABIC SMALL HIGH YEHARA" + + "BIC SMALL HIGH NOONARABIC PLACE OF SAJDAHARABIC EMPTY CENTRE LOW STOPARA" + + "BIC EMPTY CENTRE HIGH STOPARABIC ROUNDED HIGH STOP WITH FILLED CENTREARA" + + "BIC SMALL LOW MEEMARABIC LETTER DAL WITH INVERTED VARABIC LETTER REH WIT" + + "H INVERTED VEXTENDED ARABIC-INDIC DIGIT ZEROEXTENDED ARABIC-INDIC DIGIT " + + "ONEEXTENDED ARABIC-INDIC DIGIT TWOEXTENDED ARABIC-INDIC DIGIT THREEEXTEN" + + "DED ARABIC-INDIC DIGIT FOUREXTENDED ARABIC-INDIC DIGIT FIVEEXTENDED ARAB" + + "IC-INDIC DIGIT SIXEXTENDED ARABIC-INDIC DIGIT SEVENEXTENDED ARABIC-INDIC" + + " DIGIT EIGHTEXTENDED ARABIC-INDIC DIGIT NINEARABIC LETTER SHEEN WITH DOT" + + " BELOWARABIC LETTER DAD WITH DOT BELOWARABIC LETTER GHAIN WITH DOT BELOW" + + "ARABIC SIGN SINDHI AMPERSANDARABIC SIGN SINDHI POSTPOSITION MENARABIC LE" + + "TTER HEH WITH INVERTED VSYRIAC END OF PARAGRAPHSYRIAC SUPRALINEAR FULL S" + + "TOPSYRIAC SUBLINEAR FULL STOPSYRIAC SUPRALINEAR COLONSYRIAC SUBLINEAR CO" + + "LONSYRIAC HORIZONTAL COLONSYRIAC COLON SKEWED LEFTSYRIAC COLON SKEWED RI" + + "GHTSYRIAC SUPRALINEAR COLON SKEWED LEFTSYRIAC SUBLINEAR COLON SKEWED RIG" + + "HTSYRIAC CONTRACTIONSYRIAC HARKLEAN OBELUSSYRIAC HARKLEAN METOBELUSSYRIA" + + "C HARKLEAN ASTERISCUSSYRIAC ABBREVIATION MARKSYRIAC LETTER ALAPHSYRIAC L" + + "ETTER SUPERSCRIPT ALAPHSYRIAC LETTER BETHSYRIAC LETTER GAMALSYRIAC LETTE" + + "R GAMAL GARSHUNISYRIAC LETTER DALATHSYRIAC LETTER DOTLESS DALATH RISHSYR" + + "IAC LETTER HESYRIAC LETTER WAWSYRIAC LETTER ZAINSYRIAC LETTER HETHSYRIAC" + + " LETTER TETHSYRIAC LETTER TETH GARSHUNISYRIAC LETTER YUDHSYRIAC LETTER Y" + + "UDH HESYRIAC LETTER KAPHSYRIAC LETTER LAMADHSYRIAC LETTER MIMSYRIAC LETT" + + "ER NUNSYRIAC LETTER SEMKATHSYRIAC LETTER FINAL SEMKATHSYRIAC LETTER ESYR" + + "IAC LETTER PESYRIAC LETTER REVERSED PESYRIAC LETTER SADHESYRIAC LETTER Q" + + "APHSYRIAC LETTER RISHSYRIAC LETTER SHINSYRIAC LETTER TAWSYRIAC LETTER PE" + + "RSIAN BHETHSYRIAC LETTER PERSIAN GHAMALSYRIAC LETTER PERSIAN DHALATHSYRI" + + "AC PTHAHA ABOVESYRIAC PTHAHA BELOWSYRIAC PTHAHA DOTTEDSYRIAC ZQAPHA ABOV" + + "ESYRIAC ZQAPHA BELOWSYRIAC ZQAPHA DOTTEDSYRIAC RBASA ABOVESYRIAC RBASA B" + + "ELOWSYRIAC DOTTED ZLAMA HORIZONTALSYRIAC DOTTED ZLAMA ANGULARSYRIAC HBAS" + + "A ABOVESYRIAC HBASA BELOWSYRIAC HBASA-ESASA DOTTEDSYRIAC ESASA ABOVESYRI" + + "AC ESASA BELOWSYRIAC RWAHASYRIAC FEMININE DOTSYRIAC QUSHSHAYASYRIAC RUKK" + + "AKHASYRIAC TWO VERTICAL DOTS ABOVESYRIAC TWO VERTICAL DOTS BELOWSYRIAC T" + + "HREE DOTS ABOVESYRIAC THREE DOTS BELOWSYRIAC OBLIQUE LINE ABOVESYRIAC OB" + + "LIQUE LINE BELOWSYRIAC MUSICSYRIAC BARREKHSYRIAC LETTER SOGDIAN ZHAINSYR" + + "IAC LETTER SOGDIAN KHAPHSYRIAC LETTER SOGDIAN FEARABIC LETTER BEH WITH T" + + "HREE DOTS HORIZONTALLY BELOWARABIC LETTER BEH WITH DOT BELOW AND THREE D" + + "OTS ABOVEARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOWARABIC " + + "LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVEARAB" + + "IC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVEARABIC LETTER BEH WITH IN" + + "VERTED SMALL V BELOWARABIC LETTER BEH WITH SMALL VARABIC LETTER HAH WITH" + + " TWO DOTS ABOVEARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOWA" + + "RABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAHARABIC LETT" + + "ER DAL WITH INVERTED SMALL V BELOWARABIC LETTER REH WITH STROKEARABIC LE" + + "TTER SEEN WITH FOUR DOTS ABOVEARABIC LETTER AIN WITH TWO DOTS ABOVEARABI" + + "C LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVEARABIC LETTER AIN W") + ("" + + "ITH TWO DOTS VERTICALLY ABOVEARABIC LETTER FEH WITH TWO DOTS BELOWARABIC" + + " LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOWARABIC LETTER KEHEH WI" + + "TH DOT ABOVEARABIC LETTER KEHEH WITH THREE DOTS ABOVEARABIC LETTER KEHEH" + + " WITH THREE DOTS POINTING UPWARDS BELOWARABIC LETTER MEEM WITH DOT ABOVE" + + "ARABIC LETTER MEEM WITH DOT BELOWARABIC LETTER NOON WITH TWO DOTS BELOWA" + + "RABIC LETTER NOON WITH SMALL TAHARABIC LETTER NOON WITH SMALL VARABIC LE" + + "TTER LAM WITH BARARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVEARABIC " + + "LETTER REH WITH HAMZA ABOVEARABIC LETTER SEEN WITH TWO DOTS VERTICALLY A" + + "BOVEARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH BELOWARABIC LETTER HA" + + "H WITH SMALL ARABIC LETTER TAH AND TWO DOTSARABIC LETTER SEEN WITH SMALL" + + " ARABIC LETTER TAH AND TWO DOTSARABIC LETTER REH WITH SMALL ARABIC LETTE" + + "R TAH AND TWO DOTSARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH ABOVEAR" + + "ABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVEARABIC LETTER" + + " ALEF WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVEARABIC LETTER FARSI YE" + + "H WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVEARABIC LETTER FARSI YEH WITH" + + " EXTENDED ARABIC-INDIC DIGIT THREE ABOVEARABIC LETTER FARSI YEH WITH EXT" + + "ENDED ARABIC-INDIC DIGIT FOUR BELOWARABIC LETTER WAW WITH EXTENDED ARABI" + + "C-INDIC DIGIT TWO ABOVEARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGI" + + "T THREE ABOVEARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT T" + + "WO ABOVEARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT THREE " + + "ABOVEARABIC LETTER HAH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOWARABIC" + + " LETTER SEEN WITH EXTENDED ARABIC-INDIC DIGIT FOUR ABOVEARABIC LETTER SE" + + "EN WITH INVERTED VARABIC LETTER KAF WITH TWO DOTS ABOVETHAANA LETTER HAA" + + "THAANA LETTER SHAVIYANITHAANA LETTER NOONUTHAANA LETTER RAATHAANA LETTER" + + " BAATHAANA LETTER LHAVIYANITHAANA LETTER KAAFUTHAANA LETTER ALIFUTHAANA " + + "LETTER VAAVUTHAANA LETTER MEEMUTHAANA LETTER FAAFUTHAANA LETTER DHAALUTH" + + "AANA LETTER THAATHAANA LETTER LAAMUTHAANA LETTER GAAFUTHAANA LETTER GNAV" + + "IYANITHAANA LETTER SEENUTHAANA LETTER DAVIYANITHAANA LETTER ZAVIYANITHAA" + + "NA LETTER TAVIYANITHAANA LETTER YAATHAANA LETTER PAVIYANITHAANA LETTER J" + + "AVIYANITHAANA LETTER CHAVIYANITHAANA LETTER TTAATHAANA LETTER HHAATHAANA" + + " LETTER KHAATHAANA LETTER THAALUTHAANA LETTER ZAATHAANA LETTER SHEENUTHA" + + "ANA LETTER SAADHUTHAANA LETTER DAADHUTHAANA LETTER TOTHAANA LETTER ZOTHA" + + "ANA LETTER AINUTHAANA LETTER GHAINUTHAANA LETTER QAAFUTHAANA LETTER WAAV" + + "UTHAANA ABAFILITHAANA AABAAFILITHAANA IBIFILITHAANA EEBEEFILITHAANA UBUF" + + "ILITHAANA OOBOOFILITHAANA EBEFILITHAANA EYBEYFILITHAANA OBOFILITHAANA OA" + + "BOAFILITHAANA SUKUNTHAANA LETTER NAANKO DIGIT ZERONKO DIGIT ONENKO DIGIT" + + " TWONKO DIGIT THREENKO DIGIT FOURNKO DIGIT FIVENKO DIGIT SIXNKO DIGIT SE" + + "VENNKO DIGIT EIGHTNKO DIGIT NINENKO LETTER ANKO LETTER EENKO LETTER INKO" + + " LETTER ENKO LETTER UNKO LETTER OONKO LETTER ONKO LETTER DAGBASINNANKO L" + + "ETTER NNKO LETTER BANKO LETTER PANKO LETTER TANKO LETTER JANKO LETTER CH" + + "ANKO LETTER DANKO LETTER RANKO LETTER RRANKO LETTER SANKO LETTER GBANKO " + + "LETTER FANKO LETTER KANKO LETTER LANKO LETTER NA WOLOSONKO LETTER MANKO " + + "LETTER NYANKO LETTER NANKO LETTER HANKO LETTER WANKO LETTER YANKO LETTER" + + " NYA WOLOSONKO LETTER JONA JANKO LETTER JONA CHANKO LETTER JONA RANKO CO" + + "MBINING SHORT HIGH TONENKO COMBINING SHORT LOW TONENKO COMBINING SHORT R" + + "ISING TONENKO COMBINING LONG DESCENDING TONENKO COMBINING LONG HIGH TONE" + + "NKO COMBINING LONG LOW TONENKO COMBINING LONG RISING TONENKO COMBINING N" + + "ASALIZATION MARKNKO COMBINING DOUBLE DOT ABOVENKO HIGH TONE APOSTROPHENK" + + "O LOW TONE APOSTROPHENKO SYMBOL OO DENNENNKO SYMBOL GBAKURUNENNKO COMMAN" + + "KO EXCLAMATION MARKNKO LAJANYALANSAMARITAN LETTER ALAFSAMARITAN LETTER B" + + "ITSAMARITAN LETTER GAMANSAMARITAN LETTER DALATSAMARITAN LETTER IYSAMARIT" + + "AN LETTER BAASAMARITAN LETTER ZENSAMARITAN LETTER ITSAMARITAN LETTER TIT" + + "SAMARITAN LETTER YUTSAMARITAN LETTER KAAFSAMARITAN LETTER LABATSAMARITAN" + + " LETTER MIMSAMARITAN LETTER NUNSAMARITAN LETTER SINGAATSAMARITAN LETTER " + + "INSAMARITAN LETTER FISAMARITAN LETTER TSAADIYSAMARITAN LETTER QUFSAMARIT" + + "AN LETTER RISHSAMARITAN LETTER SHANSAMARITAN LETTER TAAFSAMARITAN MARK I" + + "NSAMARITAN MARK IN-ALAFSAMARITAN MARK OCCLUSIONSAMARITAN MARK DAGESHSAMA" + + "RITAN MODIFIER LETTER EPENTHETIC YUTSAMARITAN MARK EPENTHETIC YUTSAMARIT" + + "AN VOWEL SIGN LONG ESAMARITAN VOWEL SIGN ESAMARITAN VOWEL SIGN OVERLONG " + + "AASAMARITAN VOWEL SIGN LONG AASAMARITAN VOWEL SIGN AASAMARITAN VOWEL SIG" + + "N OVERLONG ASAMARITAN VOWEL SIGN LONG ASAMARITAN VOWEL SIGN ASAMARITAN M" + + "ODIFIER LETTER SHORT ASAMARITAN VOWEL SIGN SHORT ASAMARITAN VOWEL SIGN L" + + "ONG USAMARITAN VOWEL SIGN USAMARITAN MODIFIER LETTER ISAMARITAN VOWEL SI" + + "GN LONG ISAMARITAN VOWEL SIGN ISAMARITAN VOWEL SIGN OSAMARITAN VOWEL SIG") + ("" + + "N SUKUNSAMARITAN MARK NEQUDAASAMARITAN PUNCTUATION NEQUDAASAMARITAN PUNC" + + "TUATION AFSAAQSAMARITAN PUNCTUATION ANGEDSAMARITAN PUNCTUATION BAUSAMARI" + + "TAN PUNCTUATION ATMAAUSAMARITAN PUNCTUATION SHIYYAALAASAMARITAN ABBREVIA" + + "TION MARKSAMARITAN PUNCTUATION MELODIC QITSASAMARITAN PUNCTUATION ZIQAAS" + + "AMARITAN PUNCTUATION QITSASAMARITAN PUNCTUATION ZAEFSAMARITAN PUNCTUATIO" + + "N TURUSAMARITAN PUNCTUATION ARKAANUSAMARITAN PUNCTUATION SOF MASHFAATSAM" + + "ARITAN PUNCTUATION ANNAAUMANDAIC LETTER HALQAMANDAIC LETTER ABMANDAIC LE" + + "TTER AGMANDAIC LETTER ADMANDAIC LETTER AHMANDAIC LETTER USHENNAMANDAIC L" + + "ETTER AZMANDAIC LETTER ITMANDAIC LETTER ATTMANDAIC LETTER AKSAMANDAIC LE" + + "TTER AKMANDAIC LETTER ALMANDAIC LETTER AMMANDAIC LETTER ANMANDAIC LETTER" + + " ASMANDAIC LETTER INMANDAIC LETTER APMANDAIC LETTER ASZMANDAIC LETTER AQ" + + "MANDAIC LETTER ARMANDAIC LETTER ASHMANDAIC LETTER ATMANDAIC LETTER DUSHE" + + "NNAMANDAIC LETTER KADMANDAIC LETTER AINMANDAIC AFFRICATION MARKMANDAIC V" + + "OCALIZATION MARKMANDAIC GEMINATION MARKMANDAIC PUNCTUATIONSYRIAC LETTER " + + "MALAYALAM NGASYRIAC LETTER MALAYALAM JASYRIAC LETTER MALAYALAM NYASYRIAC" + + " LETTER MALAYALAM TTASYRIAC LETTER MALAYALAM NNASYRIAC LETTER MALAYALAM " + + "NNNASYRIAC LETTER MALAYALAM BHASYRIAC LETTER MALAYALAM RASYRIAC LETTER M" + + "ALAYALAM LLASYRIAC LETTER MALAYALAM LLLASYRIAC LETTER MALAYALAM SSAARABI" + + "C LETTER BEH WITH SMALL V BELOWARABIC LETTER BEH WITH HAMZA ABOVEARABIC " + + "LETTER JEEM WITH TWO DOTS ABOVEARABIC LETTER TAH WITH TWO DOTS ABOVEARAB" + + "IC LETTER FEH WITH DOT BELOW AND THREE DOTS ABOVEARABIC LETTER QAF WITH " + + "DOT BELOWARABIC LETTER LAM WITH DOUBLE BARARABIC LETTER MEEM WITH THREE " + + "DOTS ABOVEARABIC LETTER YEH WITH TWO DOTS BELOW AND HAMZA ABOVEARABIC LE" + + "TTER YEH WITH TWO DOTS BELOW AND DOT ABOVEARABIC LETTER REH WITH LOOPARA" + + "BIC LETTER WAW WITH DOT WITHINARABIC LETTER ROHINGYA YEHARABIC LETTER LO" + + "W ALEFARABIC LETTER DAL WITH THREE DOTS BELOWARABIC LETTER SAD WITH THRE" + + "E DOTS BELOWARABIC LETTER GAF WITH INVERTED STROKEARABIC LETTER STRAIGHT" + + " WAWARABIC LETTER ZAIN WITH INVERTED V ABOVEARABIC LETTER AIN WITH THREE" + + " DOTS BELOWARABIC LETTER KAF WITH DOT BELOWARABIC LETTER BEH WITH SMALL " + + "MEEM ABOVEARABIC LETTER PEH WITH SMALL MEEM ABOVEARABIC LETTER TEH WITH " + + "SMALL TEH ABOVEARABIC LETTER REH WITH SMALL NOON ABOVEARABIC LETTER YEH " + + "WITH TWO DOTS BELOW AND SMALL NOON ABOVEARABIC LETTER AFRICAN FEHARABIC " + + "LETTER AFRICAN QAFARABIC LETTER AFRICAN NOONARABIC SMALL HIGH WORD AR-RU" + + "BARABIC SMALL HIGH SADARABIC SMALL HIGH AINARABIC SMALL HIGH QAFARABIC S" + + "MALL HIGH NOON WITH KASRAARABIC SMALL LOW NOON WITH KASRAARABIC SMALL HI" + + "GH WORD ATH-THALATHAARABIC SMALL HIGH WORD AS-SAJDAARABIC SMALL HIGH WOR" + + "D AN-NISFARABIC SMALL HIGH WORD SAKTAARABIC SMALL HIGH WORD QIFARABIC SM" + + "ALL HIGH WORD WAQFAARABIC SMALL HIGH FOOTNOTE MARKERARABIC SMALL HIGH SI" + + "GN SAFHAARABIC DISPUTED END OF AYAHARABIC TURNED DAMMA BELOWARABIC CURLY" + + " FATHAARABIC CURLY DAMMAARABIC CURLY KASRAARABIC CURLY FATHATANARABIC CU" + + "RLY DAMMATANARABIC CURLY KASRATANARABIC TONE ONE DOT ABOVEARABIC TONE TW" + + "O DOTS ABOVEARABIC TONE LOOP ABOVEARABIC TONE ONE DOT BELOWARABIC TONE T" + + "WO DOTS BELOWARABIC TONE LOOP BELOWARABIC OPEN FATHATANARABIC OPEN DAMMA" + + "TANARABIC OPEN KASRATANARABIC SMALL HIGH WAWARABIC FATHA WITH RINGARABIC" + + " FATHA WITH DOT ABOVEARABIC KASRA WITH DOT BELOWARABIC LEFT ARROWHEAD AB" + + "OVEARABIC RIGHT ARROWHEAD ABOVEARABIC LEFT ARROWHEAD BELOWARABIC RIGHT A" + + "RROWHEAD BELOWARABIC DOUBLE RIGHT ARROWHEAD ABOVEARABIC DOUBLE RIGHT ARR" + + "OWHEAD ABOVE WITH DOTARABIC RIGHT ARROWHEAD ABOVE WITH DOTARABIC DAMMA W" + + "ITH DOTARABIC MARK SIDEWAYS NOON GHUNNADEVANAGARI SIGN INVERTED CANDRABI" + + "NDUDEVANAGARI SIGN CANDRABINDUDEVANAGARI SIGN ANUSVARADEVANAGARI SIGN VI" + + "SARGADEVANAGARI LETTER SHORT ADEVANAGARI LETTER ADEVANAGARI LETTER AADEV" + + "ANAGARI LETTER IDEVANAGARI LETTER IIDEVANAGARI LETTER UDEVANAGARI LETTER" + + " UUDEVANAGARI LETTER VOCALIC RDEVANAGARI LETTER VOCALIC LDEVANAGARI LETT" + + "ER CANDRA EDEVANAGARI LETTER SHORT EDEVANAGARI LETTER EDEVANAGARI LETTER" + + " AIDEVANAGARI LETTER CANDRA ODEVANAGARI LETTER SHORT ODEVANAGARI LETTER " + + "ODEVANAGARI LETTER AUDEVANAGARI LETTER KADEVANAGARI LETTER KHADEVANAGARI" + + " LETTER GADEVANAGARI LETTER GHADEVANAGARI LETTER NGADEVANAGARI LETTER CA" + + "DEVANAGARI LETTER CHADEVANAGARI LETTER JADEVANAGARI LETTER JHADEVANAGARI" + + " LETTER NYADEVANAGARI LETTER TTADEVANAGARI LETTER TTHADEVANAGARI LETTER " + + "DDADEVANAGARI LETTER DDHADEVANAGARI LETTER NNADEVANAGARI LETTER TADEVANA" + + "GARI LETTER THADEVANAGARI LETTER DADEVANAGARI LETTER DHADEVANAGARI LETTE" + + "R NADEVANAGARI LETTER NNNADEVANAGARI LETTER PADEVANAGARI LETTER PHADEVAN" + + "AGARI LETTER BADEVANAGARI LETTER BHADEVANAGARI LETTER MADEVANAGARI LETTE" + + "R YADEVANAGARI LETTER RADEVANAGARI LETTER RRADEVANAGARI LETTER LADEVANAG") + ("" + + "ARI LETTER LLADEVANAGARI LETTER LLLADEVANAGARI LETTER VADEVANAGARI LETTE" + + "R SHADEVANAGARI LETTER SSADEVANAGARI LETTER SADEVANAGARI LETTER HADEVANA" + + "GARI VOWEL SIGN OEDEVANAGARI VOWEL SIGN OOEDEVANAGARI SIGN NUKTADEVANAGA" + + "RI SIGN AVAGRAHADEVANAGARI VOWEL SIGN AADEVANAGARI VOWEL SIGN IDEVANAGAR" + + "I VOWEL SIGN IIDEVANAGARI VOWEL SIGN UDEVANAGARI VOWEL SIGN UUDEVANAGARI" + + " VOWEL SIGN VOCALIC RDEVANAGARI VOWEL SIGN VOCALIC RRDEVANAGARI VOWEL SI" + + "GN CANDRA EDEVANAGARI VOWEL SIGN SHORT EDEVANAGARI VOWEL SIGN EDEVANAGAR" + + "I VOWEL SIGN AIDEVANAGARI VOWEL SIGN CANDRA ODEVANAGARI VOWEL SIGN SHORT" + + " ODEVANAGARI VOWEL SIGN ODEVANAGARI VOWEL SIGN AUDEVANAGARI SIGN VIRAMAD" + + "EVANAGARI VOWEL SIGN PRISHTHAMATRA EDEVANAGARI VOWEL SIGN AWDEVANAGARI O" + + "MDEVANAGARI STRESS SIGN UDATTADEVANAGARI STRESS SIGN ANUDATTADEVANAGARI " + + "GRAVE ACCENTDEVANAGARI ACUTE ACCENTDEVANAGARI VOWEL SIGN CANDRA LONG EDE" + + "VANAGARI VOWEL SIGN UEDEVANAGARI VOWEL SIGN UUEDEVANAGARI LETTER QADEVAN" + + "AGARI LETTER KHHADEVANAGARI LETTER GHHADEVANAGARI LETTER ZADEVANAGARI LE" + + "TTER DDDHADEVANAGARI LETTER RHADEVANAGARI LETTER FADEVANAGARI LETTER YYA" + + "DEVANAGARI LETTER VOCALIC RRDEVANAGARI LETTER VOCALIC LLDEVANAGARI VOWEL" + + " SIGN VOCALIC LDEVANAGARI VOWEL SIGN VOCALIC LLDEVANAGARI DANDADEVANAGAR" + + "I DOUBLE DANDADEVANAGARI DIGIT ZERODEVANAGARI DIGIT ONEDEVANAGARI DIGIT " + + "TWODEVANAGARI DIGIT THREEDEVANAGARI DIGIT FOURDEVANAGARI DIGIT FIVEDEVAN" + + "AGARI DIGIT SIXDEVANAGARI DIGIT SEVENDEVANAGARI DIGIT EIGHTDEVANAGARI DI" + + "GIT NINEDEVANAGARI ABBREVIATION SIGNDEVANAGARI SIGN HIGH SPACING DOTDEVA" + + "NAGARI LETTER CANDRA ADEVANAGARI LETTER OEDEVANAGARI LETTER OOEDEVANAGAR" + + "I LETTER AWDEVANAGARI LETTER UEDEVANAGARI LETTER UUEDEVANAGARI LETTER MA" + + "RWARI DDADEVANAGARI LETTER ZHADEVANAGARI LETTER HEAVY YADEVANAGARI LETTE" + + "R GGADEVANAGARI LETTER JJADEVANAGARI LETTER GLOTTAL STOPDEVANAGARI LETTE" + + "R DDDADEVANAGARI LETTER BBABENGALI ANJIBENGALI SIGN CANDRABINDUBENGALI S" + + "IGN ANUSVARABENGALI SIGN VISARGABENGALI LETTER ABENGALI LETTER AABENGALI" + + " LETTER IBENGALI LETTER IIBENGALI LETTER UBENGALI LETTER UUBENGALI LETTE" + + "R VOCALIC RBENGALI LETTER VOCALIC LBENGALI LETTER EBENGALI LETTER AIBENG" + + "ALI LETTER OBENGALI LETTER AUBENGALI LETTER KABENGALI LETTER KHABENGALI " + + "LETTER GABENGALI LETTER GHABENGALI LETTER NGABENGALI LETTER CABENGALI LE" + + "TTER CHABENGALI LETTER JABENGALI LETTER JHABENGALI LETTER NYABENGALI LET" + + "TER TTABENGALI LETTER TTHABENGALI LETTER DDABENGALI LETTER DDHABENGALI L" + + "ETTER NNABENGALI LETTER TABENGALI LETTER THABENGALI LETTER DABENGALI LET" + + "TER DHABENGALI LETTER NABENGALI LETTER PABENGALI LETTER PHABENGALI LETTE" + + "R BABENGALI LETTER BHABENGALI LETTER MABENGALI LETTER YABENGALI LETTER R" + + "ABENGALI LETTER LABENGALI LETTER SHABENGALI LETTER SSABENGALI LETTER SAB" + + "ENGALI LETTER HABENGALI SIGN NUKTABENGALI SIGN AVAGRAHABENGALI VOWEL SIG" + + "N AABENGALI VOWEL SIGN IBENGALI VOWEL SIGN IIBENGALI VOWEL SIGN UBENGALI" + + " VOWEL SIGN UUBENGALI VOWEL SIGN VOCALIC RBENGALI VOWEL SIGN VOCALIC RRB" + + "ENGALI VOWEL SIGN EBENGALI VOWEL SIGN AIBENGALI VOWEL SIGN OBENGALI VOWE" + + "L SIGN AUBENGALI SIGN VIRAMABENGALI LETTER KHANDA TABENGALI AU LENGTH MA" + + "RKBENGALI LETTER RRABENGALI LETTER RHABENGALI LETTER YYABENGALI LETTER V" + + "OCALIC RRBENGALI LETTER VOCALIC LLBENGALI VOWEL SIGN VOCALIC LBENGALI VO" + + "WEL SIGN VOCALIC LLBENGALI DIGIT ZEROBENGALI DIGIT ONEBENGALI DIGIT TWOB" + + "ENGALI DIGIT THREEBENGALI DIGIT FOURBENGALI DIGIT FIVEBENGALI DIGIT SIXB" + + "ENGALI DIGIT SEVENBENGALI DIGIT EIGHTBENGALI DIGIT NINEBENGALI LETTER RA" + + " WITH MIDDLE DIAGONALBENGALI LETTER RA WITH LOWER DIAGONALBENGALI RUPEE " + + "MARKBENGALI RUPEE SIGNBENGALI CURRENCY NUMERATOR ONEBENGALI CURRENCY NUM" + + "ERATOR TWOBENGALI CURRENCY NUMERATOR THREEBENGALI CURRENCY NUMERATOR FOU" + + "RBENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATORBENGALI CURRENC" + + "Y DENOMINATOR SIXTEENBENGALI ISSHARBENGALI GANDA MARKBENGALI LETTER VEDI" + + "C ANUSVARABENGALI ABBREVIATION SIGNGURMUKHI SIGN ADAK BINDIGURMUKHI SIGN" + + " BINDIGURMUKHI SIGN VISARGAGURMUKHI LETTER AGURMUKHI LETTER AAGURMUKHI L" + + "ETTER IGURMUKHI LETTER IIGURMUKHI LETTER UGURMUKHI LETTER UUGURMUKHI LET" + + "TER EEGURMUKHI LETTER AIGURMUKHI LETTER OOGURMUKHI LETTER AUGURMUKHI LET" + + "TER KAGURMUKHI LETTER KHAGURMUKHI LETTER GAGURMUKHI LETTER GHAGURMUKHI L" + + "ETTER NGAGURMUKHI LETTER CAGURMUKHI LETTER CHAGURMUKHI LETTER JAGURMUKHI" + + " LETTER JHAGURMUKHI LETTER NYAGURMUKHI LETTER TTAGURMUKHI LETTER TTHAGUR" + + "MUKHI LETTER DDAGURMUKHI LETTER DDHAGURMUKHI LETTER NNAGURMUKHI LETTER T" + + "AGURMUKHI LETTER THAGURMUKHI LETTER DAGURMUKHI LETTER DHAGURMUKHI LETTER" + + " NAGURMUKHI LETTER PAGURMUKHI LETTER PHAGURMUKHI LETTER BAGURMUKHI LETTE" + + "R BHAGURMUKHI LETTER MAGURMUKHI LETTER YAGURMUKHI LETTER RAGURMUKHI LETT" + + "ER LAGURMUKHI LETTER LLAGURMUKHI LETTER VAGURMUKHI LETTER SHAGURMUKHI LE") + ("" + + "TTER SAGURMUKHI LETTER HAGURMUKHI SIGN NUKTAGURMUKHI VOWEL SIGN AAGURMUK" + + "HI VOWEL SIGN IGURMUKHI VOWEL SIGN IIGURMUKHI VOWEL SIGN UGURMUKHI VOWEL" + + " SIGN UUGURMUKHI VOWEL SIGN EEGURMUKHI VOWEL SIGN AIGURMUKHI VOWEL SIGN " + + "OOGURMUKHI VOWEL SIGN AUGURMUKHI SIGN VIRAMAGURMUKHI SIGN UDAATGURMUKHI " + + "LETTER KHHAGURMUKHI LETTER GHHAGURMUKHI LETTER ZAGURMUKHI LETTER RRAGURM" + + "UKHI LETTER FAGURMUKHI DIGIT ZEROGURMUKHI DIGIT ONEGURMUKHI DIGIT TWOGUR" + + "MUKHI DIGIT THREEGURMUKHI DIGIT FOURGURMUKHI DIGIT FIVEGURMUKHI DIGIT SI" + + "XGURMUKHI DIGIT SEVENGURMUKHI DIGIT EIGHTGURMUKHI DIGIT NINEGURMUKHI TIP" + + "PIGURMUKHI ADDAKGURMUKHI IRIGURMUKHI URAGURMUKHI EK ONKARGURMUKHI SIGN Y" + + "AKASHGUJARATI SIGN CANDRABINDUGUJARATI SIGN ANUSVARAGUJARATI SIGN VISARG" + + "AGUJARATI LETTER AGUJARATI LETTER AAGUJARATI LETTER IGUJARATI LETTER IIG" + + "UJARATI LETTER UGUJARATI LETTER UUGUJARATI LETTER VOCALIC RGUJARATI LETT" + + "ER VOCALIC LGUJARATI VOWEL CANDRA EGUJARATI LETTER EGUJARATI LETTER AIGU" + + "JARATI VOWEL CANDRA OGUJARATI LETTER OGUJARATI LETTER AUGUJARATI LETTER " + + "KAGUJARATI LETTER KHAGUJARATI LETTER GAGUJARATI LETTER GHAGUJARATI LETTE" + + "R NGAGUJARATI LETTER CAGUJARATI LETTER CHAGUJARATI LETTER JAGUJARATI LET" + + "TER JHAGUJARATI LETTER NYAGUJARATI LETTER TTAGUJARATI LETTER TTHAGUJARAT" + + "I LETTER DDAGUJARATI LETTER DDHAGUJARATI LETTER NNAGUJARATI LETTER TAGUJ" + + "ARATI LETTER THAGUJARATI LETTER DAGUJARATI LETTER DHAGUJARATI LETTER NAG" + + "UJARATI LETTER PAGUJARATI LETTER PHAGUJARATI LETTER BAGUJARATI LETTER BH" + + "AGUJARATI LETTER MAGUJARATI LETTER YAGUJARATI LETTER RAGUJARATI LETTER L" + + "AGUJARATI LETTER LLAGUJARATI LETTER VAGUJARATI LETTER SHAGUJARATI LETTER" + + " SSAGUJARATI LETTER SAGUJARATI LETTER HAGUJARATI SIGN NUKTAGUJARATI SIGN" + + " AVAGRAHAGUJARATI VOWEL SIGN AAGUJARATI VOWEL SIGN IGUJARATI VOWEL SIGN " + + "IIGUJARATI VOWEL SIGN UGUJARATI VOWEL SIGN UUGUJARATI VOWEL SIGN VOCALIC" + + " RGUJARATI VOWEL SIGN VOCALIC RRGUJARATI VOWEL SIGN CANDRA EGUJARATI VOW" + + "EL SIGN EGUJARATI VOWEL SIGN AIGUJARATI VOWEL SIGN CANDRA OGUJARATI VOWE" + + "L SIGN OGUJARATI VOWEL SIGN AUGUJARATI SIGN VIRAMAGUJARATI OMGUJARATI LE" + + "TTER VOCALIC RRGUJARATI LETTER VOCALIC LLGUJARATI VOWEL SIGN VOCALIC LGU" + + "JARATI VOWEL SIGN VOCALIC LLGUJARATI DIGIT ZEROGUJARATI DIGIT ONEGUJARAT" + + "I DIGIT TWOGUJARATI DIGIT THREEGUJARATI DIGIT FOURGUJARATI DIGIT FIVEGUJ" + + "ARATI DIGIT SIXGUJARATI DIGIT SEVENGUJARATI DIGIT EIGHTGUJARATI DIGIT NI" + + "NEGUJARATI ABBREVIATION SIGNGUJARATI RUPEE SIGNGUJARATI LETTER ZHAGUJARA" + + "TI SIGN SUKUNGUJARATI SIGN SHADDAGUJARATI SIGN MADDAHGUJARATI SIGN THREE" + + "-DOT NUKTA ABOVEGUJARATI SIGN CIRCLE NUKTA ABOVEGUJARATI SIGN TWO-CIRCLE" + + " NUKTA ABOVEORIYA SIGN CANDRABINDUORIYA SIGN ANUSVARAORIYA SIGN VISARGAO" + + "RIYA LETTER AORIYA LETTER AAORIYA LETTER IORIYA LETTER IIORIYA LETTER UO" + + "RIYA LETTER UUORIYA LETTER VOCALIC RORIYA LETTER VOCALIC LORIYA LETTER E" + + "ORIYA LETTER AIORIYA LETTER OORIYA LETTER AUORIYA LETTER KAORIYA LETTER " + + "KHAORIYA LETTER GAORIYA LETTER GHAORIYA LETTER NGAORIYA LETTER CAORIYA L" + + "ETTER CHAORIYA LETTER JAORIYA LETTER JHAORIYA LETTER NYAORIYA LETTER TTA" + + "ORIYA LETTER TTHAORIYA LETTER DDAORIYA LETTER DDHAORIYA LETTER NNAORIYA " + + "LETTER TAORIYA LETTER THAORIYA LETTER DAORIYA LETTER DHAORIYA LETTER NAO" + + "RIYA LETTER PAORIYA LETTER PHAORIYA LETTER BAORIYA LETTER BHAORIYA LETTE" + + "R MAORIYA LETTER YAORIYA LETTER RAORIYA LETTER LAORIYA LETTER LLAORIYA L" + + "ETTER VAORIYA LETTER SHAORIYA LETTER SSAORIYA LETTER SAORIYA LETTER HAOR" + + "IYA SIGN NUKTAORIYA SIGN AVAGRAHAORIYA VOWEL SIGN AAORIYA VOWEL SIGN IOR" + + "IYA VOWEL SIGN IIORIYA VOWEL SIGN UORIYA VOWEL SIGN UUORIYA VOWEL SIGN V" + + "OCALIC RORIYA VOWEL SIGN VOCALIC RRORIYA VOWEL SIGN EORIYA VOWEL SIGN AI" + + "ORIYA VOWEL SIGN OORIYA VOWEL SIGN AUORIYA SIGN VIRAMAORIYA AI LENGTH MA" + + "RKORIYA AU LENGTH MARKORIYA LETTER RRAORIYA LETTER RHAORIYA LETTER YYAOR" + + "IYA LETTER VOCALIC RRORIYA LETTER VOCALIC LLORIYA VOWEL SIGN VOCALIC LOR" + + "IYA VOWEL SIGN VOCALIC LLORIYA DIGIT ZEROORIYA DIGIT ONEORIYA DIGIT TWOO" + + "RIYA DIGIT THREEORIYA DIGIT FOURORIYA DIGIT FIVEORIYA DIGIT SIXORIYA DIG" + + "IT SEVENORIYA DIGIT EIGHTORIYA DIGIT NINEORIYA ISSHARORIYA LETTER WAORIY" + + "A FRACTION ONE QUARTERORIYA FRACTION ONE HALFORIYA FRACTION THREE QUARTE" + + "RSORIYA FRACTION ONE SIXTEENTHORIYA FRACTION ONE EIGHTHORIYA FRACTION TH" + + "REE SIXTEENTHSTAMIL SIGN ANUSVARATAMIL SIGN VISARGATAMIL LETTER ATAMIL L" + + "ETTER AATAMIL LETTER ITAMIL LETTER IITAMIL LETTER UTAMIL LETTER UUTAMIL " + + "LETTER ETAMIL LETTER EETAMIL LETTER AITAMIL LETTER OTAMIL LETTER OOTAMIL" + + " LETTER AUTAMIL LETTER KATAMIL LETTER NGATAMIL LETTER CATAMIL LETTER JAT" + + "AMIL LETTER NYATAMIL LETTER TTATAMIL LETTER NNATAMIL LETTER TATAMIL LETT" + + "ER NATAMIL LETTER NNNATAMIL LETTER PATAMIL LETTER MATAMIL LETTER YATAMIL" + + " LETTER RATAMIL LETTER RRATAMIL LETTER LATAMIL LETTER LLATAMIL LETTER LL") + ("" + + "LATAMIL LETTER VATAMIL LETTER SHATAMIL LETTER SSATAMIL LETTER SATAMIL LE" + + "TTER HATAMIL VOWEL SIGN AATAMIL VOWEL SIGN ITAMIL VOWEL SIGN IITAMIL VOW" + + "EL SIGN UTAMIL VOWEL SIGN UUTAMIL VOWEL SIGN ETAMIL VOWEL SIGN EETAMIL V" + + "OWEL SIGN AITAMIL VOWEL SIGN OTAMIL VOWEL SIGN OOTAMIL VOWEL SIGN AUTAMI" + + "L SIGN VIRAMATAMIL OMTAMIL AU LENGTH MARKTAMIL DIGIT ZEROTAMIL DIGIT ONE" + + "TAMIL DIGIT TWOTAMIL DIGIT THREETAMIL DIGIT FOURTAMIL DIGIT FIVETAMIL DI" + + "GIT SIXTAMIL DIGIT SEVENTAMIL DIGIT EIGHTTAMIL DIGIT NINETAMIL NUMBER TE" + + "NTAMIL NUMBER ONE HUNDREDTAMIL NUMBER ONE THOUSANDTAMIL DAY SIGNTAMIL MO" + + "NTH SIGNTAMIL YEAR SIGNTAMIL DEBIT SIGNTAMIL CREDIT SIGNTAMIL AS ABOVE S" + + "IGNTAMIL RUPEE SIGNTAMIL NUMBER SIGNTELUGU SIGN COMBINING CANDRABINDU AB" + + "OVETELUGU SIGN CANDRABINDUTELUGU SIGN ANUSVARATELUGU SIGN VISARGATELUGU " + + "LETTER ATELUGU LETTER AATELUGU LETTER ITELUGU LETTER IITELUGU LETTER UTE" + + "LUGU LETTER UUTELUGU LETTER VOCALIC RTELUGU LETTER VOCALIC LTELUGU LETTE" + + "R ETELUGU LETTER EETELUGU LETTER AITELUGU LETTER OTELUGU LETTER OOTELUGU" + + " LETTER AUTELUGU LETTER KATELUGU LETTER KHATELUGU LETTER GATELUGU LETTER" + + " GHATELUGU LETTER NGATELUGU LETTER CATELUGU LETTER CHATELUGU LETTER JATE" + + "LUGU LETTER JHATELUGU LETTER NYATELUGU LETTER TTATELUGU LETTER TTHATELUG" + + "U LETTER DDATELUGU LETTER DDHATELUGU LETTER NNATELUGU LETTER TATELUGU LE" + + "TTER THATELUGU LETTER DATELUGU LETTER DHATELUGU LETTER NATELUGU LETTER P" + + "ATELUGU LETTER PHATELUGU LETTER BATELUGU LETTER BHATELUGU LETTER MATELUG" + + "U LETTER YATELUGU LETTER RATELUGU LETTER RRATELUGU LETTER LATELUGU LETTE" + + "R LLATELUGU LETTER LLLATELUGU LETTER VATELUGU LETTER SHATELUGU LETTER SS" + + "ATELUGU LETTER SATELUGU LETTER HATELUGU SIGN AVAGRAHATELUGU VOWEL SIGN A" + + "ATELUGU VOWEL SIGN ITELUGU VOWEL SIGN IITELUGU VOWEL SIGN UTELUGU VOWEL " + + "SIGN UUTELUGU VOWEL SIGN VOCALIC RTELUGU VOWEL SIGN VOCALIC RRTELUGU VOW" + + "EL SIGN ETELUGU VOWEL SIGN EETELUGU VOWEL SIGN AITELUGU VOWEL SIGN OTELU" + + "GU VOWEL SIGN OOTELUGU VOWEL SIGN AUTELUGU SIGN VIRAMATELUGU LENGTH MARK" + + "TELUGU AI LENGTH MARKTELUGU LETTER TSATELUGU LETTER DZATELUGU LETTER RRR" + + "ATELUGU LETTER VOCALIC RRTELUGU LETTER VOCALIC LLTELUGU VOWEL SIGN VOCAL" + + "IC LTELUGU VOWEL SIGN VOCALIC LLTELUGU DIGIT ZEROTELUGU DIGIT ONETELUGU " + + "DIGIT TWOTELUGU DIGIT THREETELUGU DIGIT FOURTELUGU DIGIT FIVETELUGU DIGI" + + "T SIXTELUGU DIGIT SEVENTELUGU DIGIT EIGHTTELUGU DIGIT NINETELUGU FRACTIO" + + "N DIGIT ZERO FOR ODD POWERS OF FOURTELUGU FRACTION DIGIT ONE FOR ODD POW" + + "ERS OF FOURTELUGU FRACTION DIGIT TWO FOR ODD POWERS OF FOURTELUGU FRACTI" + + "ON DIGIT THREE FOR ODD POWERS OF FOURTELUGU FRACTION DIGIT ONE FOR EVEN " + + "POWERS OF FOURTELUGU FRACTION DIGIT TWO FOR EVEN POWERS OF FOURTELUGU FR" + + "ACTION DIGIT THREE FOR EVEN POWERS OF FOURTELUGU SIGN TUUMUKANNADA SIGN " + + "SPACING CANDRABINDUKANNADA SIGN CANDRABINDUKANNADA SIGN ANUSVARAKANNADA " + + "SIGN VISARGAKANNADA LETTER AKANNADA LETTER AAKANNADA LETTER IKANNADA LET" + + "TER IIKANNADA LETTER UKANNADA LETTER UUKANNADA LETTER VOCALIC RKANNADA L" + + "ETTER VOCALIC LKANNADA LETTER EKANNADA LETTER EEKANNADA LETTER AIKANNADA" + + " LETTER OKANNADA LETTER OOKANNADA LETTER AUKANNADA LETTER KAKANNADA LETT" + + "ER KHAKANNADA LETTER GAKANNADA LETTER GHAKANNADA LETTER NGAKANNADA LETTE" + + "R CAKANNADA LETTER CHAKANNADA LETTER JAKANNADA LETTER JHAKANNADA LETTER " + + "NYAKANNADA LETTER TTAKANNADA LETTER TTHAKANNADA LETTER DDAKANNADA LETTER" + + " DDHAKANNADA LETTER NNAKANNADA LETTER TAKANNADA LETTER THAKANNADA LETTER" + + " DAKANNADA LETTER DHAKANNADA LETTER NAKANNADA LETTER PAKANNADA LETTER PH" + + "AKANNADA LETTER BAKANNADA LETTER BHAKANNADA LETTER MAKANNADA LETTER YAKA" + + "NNADA LETTER RAKANNADA LETTER RRAKANNADA LETTER LAKANNADA LETTER LLAKANN" + + "ADA LETTER VAKANNADA LETTER SHAKANNADA LETTER SSAKANNADA LETTER SAKANNAD" + + "A LETTER HAKANNADA SIGN NUKTAKANNADA SIGN AVAGRAHAKANNADA VOWEL SIGN AAK" + + "ANNADA VOWEL SIGN IKANNADA VOWEL SIGN IIKANNADA VOWEL SIGN UKANNADA VOWE" + + "L SIGN UUKANNADA VOWEL SIGN VOCALIC RKANNADA VOWEL SIGN VOCALIC RRKANNAD" + + "A VOWEL SIGN EKANNADA VOWEL SIGN EEKANNADA VOWEL SIGN AIKANNADA VOWEL SI" + + "GN OKANNADA VOWEL SIGN OOKANNADA VOWEL SIGN AUKANNADA SIGN VIRAMAKANNADA" + + " LENGTH MARKKANNADA AI LENGTH MARKKANNADA LETTER FAKANNADA LETTER VOCALI" + + "C RRKANNADA LETTER VOCALIC LLKANNADA VOWEL SIGN VOCALIC LKANNADA VOWEL S" + + "IGN VOCALIC LLKANNADA DIGIT ZEROKANNADA DIGIT ONEKANNADA DIGIT TWOKANNAD" + + "A DIGIT THREEKANNADA DIGIT FOURKANNADA DIGIT FIVEKANNADA DIGIT SIXKANNAD" + + "A DIGIT SEVENKANNADA DIGIT EIGHTKANNADA DIGIT NINEKANNADA SIGN JIHVAMULI" + + "YAKANNADA SIGN UPADHMANIYAMALAYALAM SIGN COMBINING ANUSVARA ABOVEMALAYAL" + + "AM SIGN CANDRABINDUMALAYALAM SIGN ANUSVARAMALAYALAM SIGN VISARGAMALAYALA" + + "M LETTER AMALAYALAM LETTER AAMALAYALAM LETTER IMALAYALAM LETTER IIMALAYA" + + "LAM LETTER UMALAYALAM LETTER UUMALAYALAM LETTER VOCALIC RMALAYALAM LETTE") + ("" + + "R VOCALIC LMALAYALAM LETTER EMALAYALAM LETTER EEMALAYALAM LETTER AIMALAY" + + "ALAM LETTER OMALAYALAM LETTER OOMALAYALAM LETTER AUMALAYALAM LETTER KAMA" + + "LAYALAM LETTER KHAMALAYALAM LETTER GAMALAYALAM LETTER GHAMALAYALAM LETTE" + + "R NGAMALAYALAM LETTER CAMALAYALAM LETTER CHAMALAYALAM LETTER JAMALAYALAM" + + " LETTER JHAMALAYALAM LETTER NYAMALAYALAM LETTER TTAMALAYALAM LETTER TTHA" + + "MALAYALAM LETTER DDAMALAYALAM LETTER DDHAMALAYALAM LETTER NNAMALAYALAM L" + + "ETTER TAMALAYALAM LETTER THAMALAYALAM LETTER DAMALAYALAM LETTER DHAMALAY" + + "ALAM LETTER NAMALAYALAM LETTER NNNAMALAYALAM LETTER PAMALAYALAM LETTER P" + + "HAMALAYALAM LETTER BAMALAYALAM LETTER BHAMALAYALAM LETTER MAMALAYALAM LE" + + "TTER YAMALAYALAM LETTER RAMALAYALAM LETTER RRAMALAYALAM LETTER LAMALAYAL" + + "AM LETTER LLAMALAYALAM LETTER LLLAMALAYALAM LETTER VAMALAYALAM LETTER SH" + + "AMALAYALAM LETTER SSAMALAYALAM LETTER SAMALAYALAM LETTER HAMALAYALAM LET" + + "TER TTTAMALAYALAM SIGN VERTICAL BAR VIRAMAMALAYALAM SIGN CIRCULAR VIRAMA" + + "MALAYALAM SIGN AVAGRAHAMALAYALAM VOWEL SIGN AAMALAYALAM VOWEL SIGN IMALA" + + "YALAM VOWEL SIGN IIMALAYALAM VOWEL SIGN UMALAYALAM VOWEL SIGN UUMALAYALA" + + "M VOWEL SIGN VOCALIC RMALAYALAM VOWEL SIGN VOCALIC RRMALAYALAM VOWEL SIG" + + "N EMALAYALAM VOWEL SIGN EEMALAYALAM VOWEL SIGN AIMALAYALAM VOWEL SIGN OM" + + "ALAYALAM VOWEL SIGN OOMALAYALAM VOWEL SIGN AUMALAYALAM SIGN VIRAMAMALAYA" + + "LAM LETTER DOT REPHMALAYALAM SIGN PARAMALAYALAM LETTER CHILLU MMALAYALAM" + + " LETTER CHILLU YMALAYALAM LETTER CHILLU LLLMALAYALAM AU LENGTH MARKMALAY" + + "ALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETHMALAYALAM FRACTION ONE FORTIET" + + "HMALAYALAM FRACTION THREE EIGHTIETHSMALAYALAM FRACTION ONE TWENTIETHMALA" + + "YALAM FRACTION ONE TENTHMALAYALAM FRACTION THREE TWENTIETHSMALAYALAM FRA" + + "CTION ONE FIFTHMALAYALAM LETTER ARCHAIC IIMALAYALAM LETTER VOCALIC RRMAL" + + "AYALAM LETTER VOCALIC LLMALAYALAM VOWEL SIGN VOCALIC LMALAYALAM VOWEL SI" + + "GN VOCALIC LLMALAYALAM DIGIT ZEROMALAYALAM DIGIT ONEMALAYALAM DIGIT TWOM" + + "ALAYALAM DIGIT THREEMALAYALAM DIGIT FOURMALAYALAM DIGIT FIVEMALAYALAM DI" + + "GIT SIXMALAYALAM DIGIT SEVENMALAYALAM DIGIT EIGHTMALAYALAM DIGIT NINEMAL" + + "AYALAM NUMBER TENMALAYALAM NUMBER ONE HUNDREDMALAYALAM NUMBER ONE THOUSA" + + "NDMALAYALAM FRACTION ONE QUARTERMALAYALAM FRACTION ONE HALFMALAYALAM FRA" + + "CTION THREE QUARTERSMALAYALAM FRACTION ONE SIXTEENTHMALAYALAM FRACTION O" + + "NE EIGHTHMALAYALAM FRACTION THREE SIXTEENTHSMALAYALAM DATE MARKMALAYALAM" + + " LETTER CHILLU NNMALAYALAM LETTER CHILLU NMALAYALAM LETTER CHILLU RRMALA" + + "YALAM LETTER CHILLU LMALAYALAM LETTER CHILLU LLMALAYALAM LETTER CHILLU K" + + "SINHALA SIGN ANUSVARAYASINHALA SIGN VISARGAYASINHALA LETTER AYANNASINHAL" + + "A LETTER AAYANNASINHALA LETTER AEYANNASINHALA LETTER AEEYANNASINHALA LET" + + "TER IYANNASINHALA LETTER IIYANNASINHALA LETTER UYANNASINHALA LETTER UUYA" + + "NNASINHALA LETTER IRUYANNASINHALA LETTER IRUUYANNASINHALA LETTER ILUYANN" + + "ASINHALA LETTER ILUUYANNASINHALA LETTER EYANNASINHALA LETTER EEYANNASINH" + + "ALA LETTER AIYANNASINHALA LETTER OYANNASINHALA LETTER OOYANNASINHALA LET" + + "TER AUYANNASINHALA LETTER ALPAPRAANA KAYANNASINHALA LETTER MAHAAPRAANA K" + + "AYANNASINHALA LETTER ALPAPRAANA GAYANNASINHALA LETTER MAHAAPRAANA GAYANN" + + "ASINHALA LETTER KANTAJA NAASIKYAYASINHALA LETTER SANYAKA GAYANNASINHALA " + + "LETTER ALPAPRAANA CAYANNASINHALA LETTER MAHAAPRAANA CAYANNASINHALA LETTE" + + "R ALPAPRAANA JAYANNASINHALA LETTER MAHAAPRAANA JAYANNASINHALA LETTER TAA" + + "LUJA NAASIKYAYASINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYASINHALA LETTER" + + " SANYAKA JAYANNASINHALA LETTER ALPAPRAANA TTAYANNASINHALA LETTER MAHAAPR" + + "AANA TTAYANNASINHALA LETTER ALPAPRAANA DDAYANNASINHALA LETTER MAHAAPRAAN" + + "A DDAYANNASINHALA LETTER MUURDHAJA NAYANNASINHALA LETTER SANYAKA DDAYANN" + + "ASINHALA LETTER ALPAPRAANA TAYANNASINHALA LETTER MAHAAPRAANA TAYANNASINH" + + "ALA LETTER ALPAPRAANA DAYANNASINHALA LETTER MAHAAPRAANA DAYANNASINHALA L" + + "ETTER DANTAJA NAYANNASINHALA LETTER SANYAKA DAYANNASINHALA LETTER ALPAPR" + + "AANA PAYANNASINHALA LETTER MAHAAPRAANA PAYANNASINHALA LETTER ALPAPRAANA " + + "BAYANNASINHALA LETTER MAHAAPRAANA BAYANNASINHALA LETTER MAYANNASINHALA L" + + "ETTER AMBA BAYANNASINHALA LETTER YAYANNASINHALA LETTER RAYANNASINHALA LE" + + "TTER DANTAJA LAYANNASINHALA LETTER VAYANNASINHALA LETTER TAALUJA SAYANNA" + + "SINHALA LETTER MUURDHAJA SAYANNASINHALA LETTER DANTAJA SAYANNASINHALA LE" + + "TTER HAYANNASINHALA LETTER MUURDHAJA LAYANNASINHALA LETTER FAYANNASINHAL" + + "A SIGN AL-LAKUNASINHALA VOWEL SIGN AELA-PILLASINHALA VOWEL SIGN KETTI AE" + + "DA-PILLASINHALA VOWEL SIGN DIGA AEDA-PILLASINHALA VOWEL SIGN KETTI IS-PI" + + "LLASINHALA VOWEL SIGN DIGA IS-PILLASINHALA VOWEL SIGN KETTI PAA-PILLASIN" + + "HALA VOWEL SIGN DIGA PAA-PILLASINHALA VOWEL SIGN GAETTA-PILLASINHALA VOW" + + "EL SIGN KOMBUVASINHALA VOWEL SIGN DIGA KOMBUVASINHALA VOWEL SIGN KOMBU D" + + "EKASINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLASINHALA VOWEL SIGN KOMBUVA H") + ("" + + "AA DIGA AELA-PILLASINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTASINHALA VOWE" + + "L SIGN GAYANUKITTASINHALA LITH DIGIT ZEROSINHALA LITH DIGIT ONESINHALA L" + + "ITH DIGIT TWOSINHALA LITH DIGIT THREESINHALA LITH DIGIT FOURSINHALA LITH" + + " DIGIT FIVESINHALA LITH DIGIT SIXSINHALA LITH DIGIT SEVENSINHALA LITH DI" + + "GIT EIGHTSINHALA LITH DIGIT NINESINHALA VOWEL SIGN DIGA GAETTA-PILLASINH" + + "ALA VOWEL SIGN DIGA GAYANUKITTASINHALA PUNCTUATION KUNDDALIYATHAI CHARAC" + + "TER KO KAITHAI CHARACTER KHO KHAITHAI CHARACTER KHO KHUATTHAI CHARACTER " + + "KHO KHWAITHAI CHARACTER KHO KHONTHAI CHARACTER KHO RAKHANGTHAI CHARACTER" + + " NGO NGUTHAI CHARACTER CHO CHANTHAI CHARACTER CHO CHINGTHAI CHARACTER CH" + + "O CHANGTHAI CHARACTER SO SOTHAI CHARACTER CHO CHOETHAI CHARACTER YO YING" + + "THAI CHARACTER DO CHADATHAI CHARACTER TO PATAKTHAI CHARACTER THO THANTHA" + + "I CHARACTER THO NANGMONTHOTHAI CHARACTER THO PHUTHAOTHAI CHARACTER NO NE" + + "NTHAI CHARACTER DO DEKTHAI CHARACTER TO TAOTHAI CHARACTER THO THUNGTHAI " + + "CHARACTER THO THAHANTHAI CHARACTER THO THONGTHAI CHARACTER NO NUTHAI CHA" + + "RACTER BO BAIMAITHAI CHARACTER PO PLATHAI CHARACTER PHO PHUNGTHAI CHARAC" + + "TER FO FATHAI CHARACTER PHO PHANTHAI CHARACTER FO FANTHAI CHARACTER PHO " + + "SAMPHAOTHAI CHARACTER MO MATHAI CHARACTER YO YAKTHAI CHARACTER RO RUATHA" + + "I CHARACTER RUTHAI CHARACTER LO LINGTHAI CHARACTER LUTHAI CHARACTER WO W" + + "AENTHAI CHARACTER SO SALATHAI CHARACTER SO RUSITHAI CHARACTER SO SUATHAI" + + " CHARACTER HO HIPTHAI CHARACTER LO CHULATHAI CHARACTER O ANGTHAI CHARACT" + + "ER HO NOKHUKTHAI CHARACTER PAIYANNOITHAI CHARACTER SARA ATHAI CHARACTER " + + "MAI HAN-AKATTHAI CHARACTER SARA AATHAI CHARACTER SARA AMTHAI CHARACTER S" + + "ARA ITHAI CHARACTER SARA IITHAI CHARACTER SARA UETHAI CHARACTER SARA UEE" + + "THAI CHARACTER SARA UTHAI CHARACTER SARA UUTHAI CHARACTER PHINTHUTHAI CU" + + "RRENCY SYMBOL BAHTTHAI CHARACTER SARA ETHAI CHARACTER SARA AETHAI CHARAC" + + "TER SARA OTHAI CHARACTER SARA AI MAIMUANTHAI CHARACTER SARA AI MAIMALAIT" + + "HAI CHARACTER LAKKHANGYAOTHAI CHARACTER MAIYAMOKTHAI CHARACTER MAITAIKHU" + + "THAI CHARACTER MAI EKTHAI CHARACTER MAI THOTHAI CHARACTER MAI TRITHAI CH" + + "ARACTER MAI CHATTAWATHAI CHARACTER THANTHAKHATTHAI CHARACTER NIKHAHITTHA" + + "I CHARACTER YAMAKKANTHAI CHARACTER FONGMANTHAI DIGIT ZEROTHAI DIGIT ONET" + + "HAI DIGIT TWOTHAI DIGIT THREETHAI DIGIT FOURTHAI DIGIT FIVETHAI DIGIT SI" + + "XTHAI DIGIT SEVENTHAI DIGIT EIGHTTHAI DIGIT NINETHAI CHARACTER ANGKHANKH" + + "UTHAI CHARACTER KHOMUTLAO LETTER KOLAO LETTER KHO SUNGLAO LETTER KHO TAM" + + "LAO LETTER NGOLAO LETTER COLAO LETTER SO TAMLAO LETTER NYOLAO LETTER DOL" + + "AO LETTER TOLAO LETTER THO SUNGLAO LETTER THO TAMLAO LETTER NOLAO LETTER" + + " BOLAO LETTER POLAO LETTER PHO SUNGLAO LETTER FO TAMLAO LETTER PHO TAMLA" + + "O LETTER FO SUNGLAO LETTER MOLAO LETTER YOLAO LETTER LO LINGLAO LETTER L" + + "O LOOTLAO LETTER WOLAO LETTER SO SUNGLAO LETTER HO SUNGLAO LETTER OLAO L" + + "ETTER HO TAMLAO ELLIPSISLAO VOWEL SIGN ALAO VOWEL SIGN MAI KANLAO VOWEL " + + "SIGN AALAO VOWEL SIGN AMLAO VOWEL SIGN ILAO VOWEL SIGN IILAO VOWEL SIGN " + + "YLAO VOWEL SIGN YYLAO VOWEL SIGN ULAO VOWEL SIGN UULAO VOWEL SIGN MAI KO" + + "NLAO SEMIVOWEL SIGN LOLAO SEMIVOWEL SIGN NYOLAO VOWEL SIGN ELAO VOWEL SI" + + "GN EILAO VOWEL SIGN OLAO VOWEL SIGN AYLAO VOWEL SIGN AILAO KO LALAO TONE" + + " MAI EKLAO TONE MAI THOLAO TONE MAI TILAO TONE MAI CATAWALAO CANCELLATIO" + + "N MARKLAO NIGGAHITALAO DIGIT ZEROLAO DIGIT ONELAO DIGIT TWOLAO DIGIT THR" + + "EELAO DIGIT FOURLAO DIGIT FIVELAO DIGIT SIXLAO DIGIT SEVENLAO DIGIT EIGH" + + "TLAO DIGIT NINELAO HO NOLAO HO MOLAO LETTER KHMU GOLAO LETTER KHMU NYOTI" + + "BETAN SYLLABLE OMTIBETAN MARK GTER YIG MGO TRUNCATED ATIBETAN MARK GTER " + + "YIG MGO -UM RNAM BCAD MATIBETAN MARK GTER YIG MGO -UM GTER TSHEG MATIBET" + + "AN MARK INITIAL YIG MGO MDUN MATIBETAN MARK CLOSING YIG MGO SGAB MATIBET" + + "AN MARK CARET YIG MGO PHUR SHAD MATIBETAN MARK YIG MGO TSHEG SHAD MATIBE" + + "TAN MARK SBRUL SHADTIBETAN MARK BSKUR YIG MGOTIBETAN MARK BKA- SHOG YIG " + + "MGOTIBETAN MARK INTERSYLLABIC TSHEGTIBETAN MARK DELIMITER TSHEG BSTARTIB" + + "ETAN MARK SHADTIBETAN MARK NYIS SHADTIBETAN MARK TSHEG SHADTIBETAN MARK " + + "NYIS TSHEG SHADTIBETAN MARK RIN CHEN SPUNGS SHADTIBETAN MARK RGYA GRAM S" + + "HADTIBETAN MARK CARET -DZUD RTAGS ME LONG CANTIBETAN MARK GTER TSHEGTIBE" + + "TAN LOGOTYPE SIGN CHAD RTAGSTIBETAN LOGOTYPE SIGN LHAG RTAGSTIBETAN ASTR" + + "OLOGICAL SIGN SGRA GCAN -CHAR RTAGSTIBETAN ASTROLOGICAL SIGN -KHYUD PATI" + + "BETAN ASTROLOGICAL SIGN SDONG TSHUGSTIBETAN SIGN RDEL DKAR GCIGTIBETAN S" + + "IGN RDEL DKAR GNYISTIBETAN SIGN RDEL DKAR GSUMTIBETAN SIGN RDEL NAG GCIG" + + "TIBETAN SIGN RDEL NAG GNYISTIBETAN SIGN RDEL DKAR RDEL NAGTIBETAN DIGIT " + + "ZEROTIBETAN DIGIT ONETIBETAN DIGIT TWOTIBETAN DIGIT THREETIBETAN DIGIT F" + + "OURTIBETAN DIGIT FIVETIBETAN DIGIT SIXTIBETAN DIGIT SEVENTIBETAN DIGIT E" + + "IGHTTIBETAN DIGIT NINETIBETAN DIGIT HALF ONETIBETAN DIGIT HALF TWOTIBETA") + ("" + + "N DIGIT HALF THREETIBETAN DIGIT HALF FOURTIBETAN DIGIT HALF FIVETIBETAN " + + "DIGIT HALF SIXTIBETAN DIGIT HALF SEVENTIBETAN DIGIT HALF EIGHTTIBETAN DI" + + "GIT HALF NINETIBETAN DIGIT HALF ZEROTIBETAN MARK BSDUS RTAGSTIBETAN MARK" + + " NGAS BZUNG NYI ZLATIBETAN MARK CARET -DZUD RTAGS BZHI MIG CANTIBETAN MA" + + "RK NGAS BZUNG SGOR RTAGSTIBETAN MARK CHE MGOTIBETAN MARK TSA -PHRUTIBETA" + + "N MARK GUG RTAGS GYONTIBETAN MARK GUG RTAGS GYASTIBETAN MARK ANG KHANG G" + + "YONTIBETAN MARK ANG KHANG GYASTIBETAN SIGN YAR TSHESTIBETAN SIGN MAR TSH" + + "ESTIBETAN LETTER KATIBETAN LETTER KHATIBETAN LETTER GATIBETAN LETTER GHA" + + "TIBETAN LETTER NGATIBETAN LETTER CATIBETAN LETTER CHATIBETAN LETTER JATI" + + "BETAN LETTER NYATIBETAN LETTER TTATIBETAN LETTER TTHATIBETAN LETTER DDAT" + + "IBETAN LETTER DDHATIBETAN LETTER NNATIBETAN LETTER TATIBETAN LETTER THAT" + + "IBETAN LETTER DATIBETAN LETTER DHATIBETAN LETTER NATIBETAN LETTER PATIBE" + + "TAN LETTER PHATIBETAN LETTER BATIBETAN LETTER BHATIBETAN LETTER MATIBETA" + + "N LETTER TSATIBETAN LETTER TSHATIBETAN LETTER DZATIBETAN LETTER DZHATIBE" + + "TAN LETTER WATIBETAN LETTER ZHATIBETAN LETTER ZATIBETAN LETTER -ATIBETAN" + + " LETTER YATIBETAN LETTER RATIBETAN LETTER LATIBETAN LETTER SHATIBETAN LE" + + "TTER SSATIBETAN LETTER SATIBETAN LETTER HATIBETAN LETTER ATIBETAN LETTER" + + " KSSATIBETAN LETTER FIXED-FORM RATIBETAN LETTER KKATIBETAN LETTER RRATIB" + + "ETAN VOWEL SIGN AATIBETAN VOWEL SIGN ITIBETAN VOWEL SIGN IITIBETAN VOWEL" + + " SIGN UTIBETAN VOWEL SIGN UUTIBETAN VOWEL SIGN VOCALIC RTIBETAN VOWEL SI" + + "GN VOCALIC RRTIBETAN VOWEL SIGN VOCALIC LTIBETAN VOWEL SIGN VOCALIC LLTI" + + "BETAN VOWEL SIGN ETIBETAN VOWEL SIGN EETIBETAN VOWEL SIGN OTIBETAN VOWEL" + + " SIGN OOTIBETAN SIGN RJES SU NGA ROTIBETAN SIGN RNAM BCADTIBETAN VOWEL S" + + "IGN REVERSED ITIBETAN VOWEL SIGN REVERSED IITIBETAN SIGN NYI ZLA NAA DAT" + + "IBETAN SIGN SNA LDANTIBETAN MARK HALANTATIBETAN MARK PALUTATIBETAN SIGN " + + "LCI RTAGSTIBETAN SIGN YANG RTAGSTIBETAN SIGN LCE TSA CANTIBETAN SIGN MCH" + + "U CANTIBETAN SIGN GRU CAN RGYINGSTIBETAN SIGN GRU MED RGYINGSTIBETAN SIG" + + "N INVERTED MCHU CANTIBETAN SUBJOINED SIGN LCE TSA CANTIBETAN SUBJOINED S" + + "IGN MCHU CANTIBETAN SUBJOINED SIGN INVERTED MCHU CANTIBETAN SUBJOINED LE" + + "TTER KATIBETAN SUBJOINED LETTER KHATIBETAN SUBJOINED LETTER GATIBETAN SU" + + "BJOINED LETTER GHATIBETAN SUBJOINED LETTER NGATIBETAN SUBJOINED LETTER C" + + "ATIBETAN SUBJOINED LETTER CHATIBETAN SUBJOINED LETTER JATIBETAN SUBJOINE" + + "D LETTER NYATIBETAN SUBJOINED LETTER TTATIBETAN SUBJOINED LETTER TTHATIB" + + "ETAN SUBJOINED LETTER DDATIBETAN SUBJOINED LETTER DDHATIBETAN SUBJOINED " + + "LETTER NNATIBETAN SUBJOINED LETTER TATIBETAN SUBJOINED LETTER THATIBETAN" + + " SUBJOINED LETTER DATIBETAN SUBJOINED LETTER DHATIBETAN SUBJOINED LETTER" + + " NATIBETAN SUBJOINED LETTER PATIBETAN SUBJOINED LETTER PHATIBETAN SUBJOI" + + "NED LETTER BATIBETAN SUBJOINED LETTER BHATIBETAN SUBJOINED LETTER MATIBE" + + "TAN SUBJOINED LETTER TSATIBETAN SUBJOINED LETTER TSHATIBETAN SUBJOINED L" + + "ETTER DZATIBETAN SUBJOINED LETTER DZHATIBETAN SUBJOINED LETTER WATIBETAN" + + " SUBJOINED LETTER ZHATIBETAN SUBJOINED LETTER ZATIBETAN SUBJOINED LETTER" + + " -ATIBETAN SUBJOINED LETTER YATIBETAN SUBJOINED LETTER RATIBETAN SUBJOIN" + + "ED LETTER LATIBETAN SUBJOINED LETTER SHATIBETAN SUBJOINED LETTER SSATIBE" + + "TAN SUBJOINED LETTER SATIBETAN SUBJOINED LETTER HATIBETAN SUBJOINED LETT" + + "ER ATIBETAN SUBJOINED LETTER KSSATIBETAN SUBJOINED LETTER FIXED-FORM WAT" + + "IBETAN SUBJOINED LETTER FIXED-FORM YATIBETAN SUBJOINED LETTER FIXED-FORM" + + " RATIBETAN KU RU KHATIBETAN KU RU KHA BZHI MIG CANTIBETAN CANTILLATION S" + + "IGN HEAVY BEATTIBETAN CANTILLATION SIGN LIGHT BEATTIBETAN CANTILLATION S" + + "IGN CANG TE-UTIBETAN CANTILLATION SIGN SBUB -CHALTIBETAN SYMBOL DRIL BUT" + + "IBETAN SYMBOL RDO RJETIBETAN SYMBOL PADMA GDANTIBETAN SYMBOL RDO RJE RGY" + + "A GRAMTIBETAN SYMBOL PHUR PATIBETAN SYMBOL NOR BUTIBETAN SYMBOL NOR BU N" + + "YIS -KHYILTIBETAN SYMBOL NOR BU GSUM -KHYILTIBETAN SYMBOL NOR BU BZHI -K" + + "HYILTIBETAN SIGN RDEL NAG RDEL DKARTIBETAN SIGN RDEL NAG GSUMTIBETAN MAR" + + "K BSKA- SHOG GI MGO RGYANTIBETAN MARK MNYAM YIG GI MGO RGYANTIBETAN MARK" + + " NYIS TSHEGTIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MATIBETAN MARK " + + "CLOSING BRDA RNYING YIG MGO SGAB MARIGHT-FACING SVASTI SIGNLEFT-FACING S" + + "VASTI SIGNRIGHT-FACING SVASTI SIGN WITH DOTSLEFT-FACING SVASTI SIGN WITH" + + " DOTSTIBETAN MARK LEADING MCHAN RTAGSTIBETAN MARK TRAILING MCHAN RTAGSMY" + + "ANMAR LETTER KAMYANMAR LETTER KHAMYANMAR LETTER GAMYANMAR LETTER GHAMYAN" + + "MAR LETTER NGAMYANMAR LETTER CAMYANMAR LETTER CHAMYANMAR LETTER JAMYANMA" + + "R LETTER JHAMYANMAR LETTER NYAMYANMAR LETTER NNYAMYANMAR LETTER TTAMYANM" + + "AR LETTER TTHAMYANMAR LETTER DDAMYANMAR LETTER DDHAMYANMAR LETTER NNAMYA" + + "NMAR LETTER TAMYANMAR LETTER THAMYANMAR LETTER DAMYANMAR LETTER DHAMYANM" + + "AR LETTER NAMYANMAR LETTER PAMYANMAR LETTER PHAMYANMAR LETTER BAMYANMAR ") + ("" + + "LETTER BHAMYANMAR LETTER MAMYANMAR LETTER YAMYANMAR LETTER RAMYANMAR LET" + + "TER LAMYANMAR LETTER WAMYANMAR LETTER SAMYANMAR LETTER HAMYANMAR LETTER " + + "LLAMYANMAR LETTER AMYANMAR LETTER SHAN AMYANMAR LETTER IMYANMAR LETTER I" + + "IMYANMAR LETTER UMYANMAR LETTER UUMYANMAR LETTER EMYANMAR LETTER MON EMY" + + "ANMAR LETTER OMYANMAR LETTER AUMYANMAR VOWEL SIGN TALL AAMYANMAR VOWEL S" + + "IGN AAMYANMAR VOWEL SIGN IMYANMAR VOWEL SIGN IIMYANMAR VOWEL SIGN UMYANM" + + "AR VOWEL SIGN UUMYANMAR VOWEL SIGN EMYANMAR VOWEL SIGN AIMYANMAR VOWEL S" + + "IGN MON IIMYANMAR VOWEL SIGN MON OMYANMAR VOWEL SIGN E ABOVEMYANMAR SIGN" + + " ANUSVARAMYANMAR SIGN DOT BELOWMYANMAR SIGN VISARGAMYANMAR SIGN VIRAMAMY" + + "ANMAR SIGN ASATMYANMAR CONSONANT SIGN MEDIAL YAMYANMAR CONSONANT SIGN ME" + + "DIAL RAMYANMAR CONSONANT SIGN MEDIAL WAMYANMAR CONSONANT SIGN MEDIAL HAM" + + "YANMAR LETTER GREAT SAMYANMAR DIGIT ZEROMYANMAR DIGIT ONEMYANMAR DIGIT T" + + "WOMYANMAR DIGIT THREEMYANMAR DIGIT FOURMYANMAR DIGIT FIVEMYANMAR DIGIT S" + + "IXMYANMAR DIGIT SEVENMYANMAR DIGIT EIGHTMYANMAR DIGIT NINEMYANMAR SIGN L" + + "ITTLE SECTIONMYANMAR SIGN SECTIONMYANMAR SYMBOL LOCATIVEMYANMAR SYMBOL C" + + "OMPLETEDMYANMAR SYMBOL AFOREMENTIONEDMYANMAR SYMBOL GENITIVEMYANMAR LETT" + + "ER SHAMYANMAR LETTER SSAMYANMAR LETTER VOCALIC RMYANMAR LETTER VOCALIC R" + + "RMYANMAR LETTER VOCALIC LMYANMAR LETTER VOCALIC LLMYANMAR VOWEL SIGN VOC" + + "ALIC RMYANMAR VOWEL SIGN VOCALIC RRMYANMAR VOWEL SIGN VOCALIC LMYANMAR V" + + "OWEL SIGN VOCALIC LLMYANMAR LETTER MON NGAMYANMAR LETTER MON JHAMYANMAR " + + "LETTER MON BBAMYANMAR LETTER MON BBEMYANMAR CONSONANT SIGN MON MEDIAL NA" + + "MYANMAR CONSONANT SIGN MON MEDIAL MAMYANMAR CONSONANT SIGN MON MEDIAL LA" + + "MYANMAR LETTER SGAW KAREN SHAMYANMAR VOWEL SIGN SGAW KAREN EUMYANMAR TON" + + "E MARK SGAW KAREN HATHIMYANMAR TONE MARK SGAW KAREN KE PHOMYANMAR LETTER" + + " WESTERN PWO KAREN THAMYANMAR LETTER WESTERN PWO KAREN PWAMYANMAR VOWEL " + + "SIGN WESTERN PWO KAREN EUMYANMAR VOWEL SIGN WESTERN PWO KAREN UEMYANMAR " + + "SIGN WESTERN PWO KAREN TONE-1MYANMAR SIGN WESTERN PWO KAREN TONE-2MYANMA" + + "R SIGN WESTERN PWO KAREN TONE-3MYANMAR SIGN WESTERN PWO KAREN TONE-4MYAN" + + "MAR SIGN WESTERN PWO KAREN TONE-5MYANMAR LETTER EASTERN PWO KAREN NNAMYA" + + "NMAR LETTER EASTERN PWO KAREN YWAMYANMAR LETTER EASTERN PWO KAREN GHWAMY" + + "ANMAR VOWEL SIGN GEBA KAREN IMYANMAR VOWEL SIGN KAYAH OEMYANMAR VOWEL SI" + + "GN KAYAH UMYANMAR VOWEL SIGN KAYAH EEMYANMAR LETTER SHAN KAMYANMAR LETTE" + + "R SHAN KHAMYANMAR LETTER SHAN GAMYANMAR LETTER SHAN CAMYANMAR LETTER SHA" + + "N ZAMYANMAR LETTER SHAN NYAMYANMAR LETTER SHAN DAMYANMAR LETTER SHAN NAM" + + "YANMAR LETTER SHAN PHAMYANMAR LETTER SHAN FAMYANMAR LETTER SHAN BAMYANMA" + + "R LETTER SHAN THAMYANMAR LETTER SHAN HAMYANMAR CONSONANT SIGN SHAN MEDIA" + + "L WAMYANMAR VOWEL SIGN SHAN AAMYANMAR VOWEL SIGN SHAN EMYANMAR VOWEL SIG" + + "N SHAN E ABOVEMYANMAR VOWEL SIGN SHAN FINAL YMYANMAR SIGN SHAN TONE-2MYA" + + "NMAR SIGN SHAN TONE-3MYANMAR SIGN SHAN TONE-5MYANMAR SIGN SHAN TONE-6MYA" + + "NMAR SIGN SHAN COUNCIL TONE-2MYANMAR SIGN SHAN COUNCIL TONE-3MYANMAR SIG" + + "N SHAN COUNCIL EMPHATIC TONEMYANMAR LETTER RUMAI PALAUNG FAMYANMAR SIGN " + + "RUMAI PALAUNG TONE-5MYANMAR SHAN DIGIT ZEROMYANMAR SHAN DIGIT ONEMYANMAR" + + " SHAN DIGIT TWOMYANMAR SHAN DIGIT THREEMYANMAR SHAN DIGIT FOURMYANMAR SH" + + "AN DIGIT FIVEMYANMAR SHAN DIGIT SIXMYANMAR SHAN DIGIT SEVENMYANMAR SHAN " + + "DIGIT EIGHTMYANMAR SHAN DIGIT NINEMYANMAR SIGN KHAMTI TONE-1MYANMAR SIGN" + + " KHAMTI TONE-3MYANMAR VOWEL SIGN AITON AMYANMAR VOWEL SIGN AITON AIMYANM" + + "AR SYMBOL SHAN ONEMYANMAR SYMBOL SHAN EXCLAMATIONGEORGIAN CAPITAL LETTER" + + " ANGEORGIAN CAPITAL LETTER BANGEORGIAN CAPITAL LETTER GANGEORGIAN CAPITA" + + "L LETTER DONGEORGIAN CAPITAL LETTER ENGEORGIAN CAPITAL LETTER VINGEORGIA" + + "N CAPITAL LETTER ZENGEORGIAN CAPITAL LETTER TANGEORGIAN CAPITAL LETTER I" + + "NGEORGIAN CAPITAL LETTER KANGEORGIAN CAPITAL LETTER LASGEORGIAN CAPITAL " + + "LETTER MANGEORGIAN CAPITAL LETTER NARGEORGIAN CAPITAL LETTER ONGEORGIAN " + + "CAPITAL LETTER PARGEORGIAN CAPITAL LETTER ZHARGEORGIAN CAPITAL LETTER RA" + + "EGEORGIAN CAPITAL LETTER SANGEORGIAN CAPITAL LETTER TARGEORGIAN CAPITAL " + + "LETTER UNGEORGIAN CAPITAL LETTER PHARGEORGIAN CAPITAL LETTER KHARGEORGIA" + + "N CAPITAL LETTER GHANGEORGIAN CAPITAL LETTER QARGEORGIAN CAPITAL LETTER " + + "SHINGEORGIAN CAPITAL LETTER CHINGEORGIAN CAPITAL LETTER CANGEORGIAN CAPI" + + "TAL LETTER JILGEORGIAN CAPITAL LETTER CILGEORGIAN CAPITAL LETTER CHARGEO" + + "RGIAN CAPITAL LETTER XANGEORGIAN CAPITAL LETTER JHANGEORGIAN CAPITAL LET" + + "TER HAEGEORGIAN CAPITAL LETTER HEGEORGIAN CAPITAL LETTER HIEGEORGIAN CAP" + + "ITAL LETTER WEGEORGIAN CAPITAL LETTER HARGEORGIAN CAPITAL LETTER HOEGEOR" + + "GIAN CAPITAL LETTER YNGEORGIAN CAPITAL LETTER AENGEORGIAN LETTER ANGEORG" + + "IAN LETTER BANGEORGIAN LETTER GANGEORGIAN LETTER DONGEORGIAN LETTER ENGE" + + "ORGIAN LETTER VINGEORGIAN LETTER ZENGEORGIAN LETTER TANGEORGIAN LETTER I") + ("" + + "NGEORGIAN LETTER KANGEORGIAN LETTER LASGEORGIAN LETTER MANGEORGIAN LETTE" + + "R NARGEORGIAN LETTER ONGEORGIAN LETTER PARGEORGIAN LETTER ZHARGEORGIAN L" + + "ETTER RAEGEORGIAN LETTER SANGEORGIAN LETTER TARGEORGIAN LETTER UNGEORGIA" + + "N LETTER PHARGEORGIAN LETTER KHARGEORGIAN LETTER GHANGEORGIAN LETTER QAR" + + "GEORGIAN LETTER SHINGEORGIAN LETTER CHINGEORGIAN LETTER CANGEORGIAN LETT" + + "ER JILGEORGIAN LETTER CILGEORGIAN LETTER CHARGEORGIAN LETTER XANGEORGIAN" + + " LETTER JHANGEORGIAN LETTER HAEGEORGIAN LETTER HEGEORGIAN LETTER HIEGEOR" + + "GIAN LETTER WEGEORGIAN LETTER HARGEORGIAN LETTER HOEGEORGIAN LETTER FIGE" + + "ORGIAN LETTER YNGEORGIAN LETTER ELIFIGEORGIAN LETTER TURNED GANGEORGIAN " + + "LETTER AINGEORGIAN PARAGRAPH SEPARATORMODIFIER LETTER GEORGIAN NARGEORGI" + + "AN LETTER AENGEORGIAN LETTER HARD SIGNGEORGIAN LETTER LABIAL SIGNHANGUL " + + "CHOSEONG KIYEOKHANGUL CHOSEONG SSANGKIYEOKHANGUL CHOSEONG NIEUNHANGUL CH" + + "OSEONG TIKEUTHANGUL CHOSEONG SSANGTIKEUTHANGUL CHOSEONG RIEULHANGUL CHOS" + + "EONG MIEUMHANGUL CHOSEONG PIEUPHANGUL CHOSEONG SSANGPIEUPHANGUL CHOSEONG" + + " SIOSHANGUL CHOSEONG SSANGSIOSHANGUL CHOSEONG IEUNGHANGUL CHOSEONG CIEUC" + + "HANGUL CHOSEONG SSANGCIEUCHANGUL CHOSEONG CHIEUCHHANGUL CHOSEONG KHIEUKH" + + "HANGUL CHOSEONG THIEUTHHANGUL CHOSEONG PHIEUPHHANGUL CHOSEONG HIEUHHANGU" + + "L CHOSEONG NIEUN-KIYEOKHANGUL CHOSEONG SSANGNIEUNHANGUL CHOSEONG NIEUN-T" + + "IKEUTHANGUL CHOSEONG NIEUN-PIEUPHANGUL CHOSEONG TIKEUT-KIYEOKHANGUL CHOS" + + "EONG RIEUL-NIEUNHANGUL CHOSEONG SSANGRIEULHANGUL CHOSEONG RIEUL-HIEUHHAN" + + "GUL CHOSEONG KAPYEOUNRIEULHANGUL CHOSEONG MIEUM-PIEUPHANGUL CHOSEONG KAP" + + "YEOUNMIEUMHANGUL CHOSEONG PIEUP-KIYEOKHANGUL CHOSEONG PIEUP-NIEUNHANGUL " + + "CHOSEONG PIEUP-TIKEUTHANGUL CHOSEONG PIEUP-SIOSHANGUL CHOSEONG PIEUP-SIO" + + "S-KIYEOKHANGUL CHOSEONG PIEUP-SIOS-TIKEUTHANGUL CHOSEONG PIEUP-SIOS-PIEU" + + "PHANGUL CHOSEONG PIEUP-SSANGSIOSHANGUL CHOSEONG PIEUP-SIOS-CIEUCHANGUL C" + + "HOSEONG PIEUP-CIEUCHANGUL CHOSEONG PIEUP-CHIEUCHHANGUL CHOSEONG PIEUP-TH" + + "IEUTHHANGUL CHOSEONG PIEUP-PHIEUPHHANGUL CHOSEONG KAPYEOUNPIEUPHANGUL CH" + + "OSEONG KAPYEOUNSSANGPIEUPHANGUL CHOSEONG SIOS-KIYEOKHANGUL CHOSEONG SIOS" + + "-NIEUNHANGUL CHOSEONG SIOS-TIKEUTHANGUL CHOSEONG SIOS-RIEULHANGUL CHOSEO" + + "NG SIOS-MIEUMHANGUL CHOSEONG SIOS-PIEUPHANGUL CHOSEONG SIOS-PIEUP-KIYEOK" + + "HANGUL CHOSEONG SIOS-SSANGSIOSHANGUL CHOSEONG SIOS-IEUNGHANGUL CHOSEONG " + + "SIOS-CIEUCHANGUL CHOSEONG SIOS-CHIEUCHHANGUL CHOSEONG SIOS-KHIEUKHHANGUL" + + " CHOSEONG SIOS-THIEUTHHANGUL CHOSEONG SIOS-PHIEUPHHANGUL CHOSEONG SIOS-H" + + "IEUHHANGUL CHOSEONG CHITUEUMSIOSHANGUL CHOSEONG CHITUEUMSSANGSIOSHANGUL " + + "CHOSEONG CEONGCHIEUMSIOSHANGUL CHOSEONG CEONGCHIEUMSSANGSIOSHANGUL CHOSE" + + "ONG PANSIOSHANGUL CHOSEONG IEUNG-KIYEOKHANGUL CHOSEONG IEUNG-TIKEUTHANGU" + + "L CHOSEONG IEUNG-MIEUMHANGUL CHOSEONG IEUNG-PIEUPHANGUL CHOSEONG IEUNG-S" + + "IOSHANGUL CHOSEONG IEUNG-PANSIOSHANGUL CHOSEONG SSANGIEUNGHANGUL CHOSEON" + + "G IEUNG-CIEUCHANGUL CHOSEONG IEUNG-CHIEUCHHANGUL CHOSEONG IEUNG-THIEUTHH" + + "ANGUL CHOSEONG IEUNG-PHIEUPHHANGUL CHOSEONG YESIEUNGHANGUL CHOSEONG CIEU" + + "C-IEUNGHANGUL CHOSEONG CHITUEUMCIEUCHANGUL CHOSEONG CHITUEUMSSANGCIEUCHA" + + "NGUL CHOSEONG CEONGCHIEUMCIEUCHANGUL CHOSEONG CEONGCHIEUMSSANGCIEUCHANGU" + + "L CHOSEONG CHIEUCH-KHIEUKHHANGUL CHOSEONG CHIEUCH-HIEUHHANGUL CHOSEONG C" + + "HITUEUMCHIEUCHHANGUL CHOSEONG CEONGCHIEUMCHIEUCHHANGUL CHOSEONG PHIEUPH-" + + "PIEUPHANGUL CHOSEONG KAPYEOUNPHIEUPHHANGUL CHOSEONG SSANGHIEUHHANGUL CHO" + + "SEONG YEORINHIEUHHANGUL CHOSEONG KIYEOK-TIKEUTHANGUL CHOSEONG NIEUN-SIOS" + + "HANGUL CHOSEONG NIEUN-CIEUCHANGUL CHOSEONG NIEUN-HIEUHHANGUL CHOSEONG TI" + + "KEUT-RIEULHANGUL CHOSEONG FILLERHANGUL JUNGSEONG FILLERHANGUL JUNGSEONG " + + "AHANGUL JUNGSEONG AEHANGUL JUNGSEONG YAHANGUL JUNGSEONG YAEHANGUL JUNGSE" + + "ONG EOHANGUL JUNGSEONG EHANGUL JUNGSEONG YEOHANGUL JUNGSEONG YEHANGUL JU" + + "NGSEONG OHANGUL JUNGSEONG WAHANGUL JUNGSEONG WAEHANGUL JUNGSEONG OEHANGU" + + "L JUNGSEONG YOHANGUL JUNGSEONG UHANGUL JUNGSEONG WEOHANGUL JUNGSEONG WEH" + + "ANGUL JUNGSEONG WIHANGUL JUNGSEONG YUHANGUL JUNGSEONG EUHANGUL JUNGSEONG" + + " YIHANGUL JUNGSEONG IHANGUL JUNGSEONG A-OHANGUL JUNGSEONG A-UHANGUL JUNG" + + "SEONG YA-OHANGUL JUNGSEONG YA-YOHANGUL JUNGSEONG EO-OHANGUL JUNGSEONG EO" + + "-UHANGUL JUNGSEONG EO-EUHANGUL JUNGSEONG YEO-OHANGUL JUNGSEONG YEO-UHANG" + + "UL JUNGSEONG O-EOHANGUL JUNGSEONG O-EHANGUL JUNGSEONG O-YEHANGUL JUNGSEO" + + "NG O-OHANGUL JUNGSEONG O-UHANGUL JUNGSEONG YO-YAHANGUL JUNGSEONG YO-YAEH" + + "ANGUL JUNGSEONG YO-YEOHANGUL JUNGSEONG YO-OHANGUL JUNGSEONG YO-IHANGUL J" + + "UNGSEONG U-AHANGUL JUNGSEONG U-AEHANGUL JUNGSEONG U-EO-EUHANGUL JUNGSEON" + + "G U-YEHANGUL JUNGSEONG U-UHANGUL JUNGSEONG YU-AHANGUL JUNGSEONG YU-EOHAN" + + "GUL JUNGSEONG YU-EHANGUL JUNGSEONG YU-YEOHANGUL JUNGSEONG YU-YEHANGUL JU" + + "NGSEONG YU-UHANGUL JUNGSEONG YU-IHANGUL JUNGSEONG EU-UHANGUL JUNGSEONG E" + + "U-EUHANGUL JUNGSEONG YI-UHANGUL JUNGSEONG I-AHANGUL JUNGSEONG I-YAHANGUL") + ("" + + " JUNGSEONG I-OHANGUL JUNGSEONG I-UHANGUL JUNGSEONG I-EUHANGUL JUNGSEONG " + + "I-ARAEAHANGUL JUNGSEONG ARAEAHANGUL JUNGSEONG ARAEA-EOHANGUL JUNGSEONG A" + + "RAEA-UHANGUL JUNGSEONG ARAEA-IHANGUL JUNGSEONG SSANGARAEAHANGUL JUNGSEON" + + "G A-EUHANGUL JUNGSEONG YA-UHANGUL JUNGSEONG YEO-YAHANGUL JUNGSEONG O-YAH" + + "ANGUL JUNGSEONG O-YAEHANGUL JONGSEONG KIYEOKHANGUL JONGSEONG SSANGKIYEOK" + + "HANGUL JONGSEONG KIYEOK-SIOSHANGUL JONGSEONG NIEUNHANGUL JONGSEONG NIEUN" + + "-CIEUCHANGUL JONGSEONG NIEUN-HIEUHHANGUL JONGSEONG TIKEUTHANGUL JONGSEON" + + "G RIEULHANGUL JONGSEONG RIEUL-KIYEOKHANGUL JONGSEONG RIEUL-MIEUMHANGUL J" + + "ONGSEONG RIEUL-PIEUPHANGUL JONGSEONG RIEUL-SIOSHANGUL JONGSEONG RIEUL-TH" + + "IEUTHHANGUL JONGSEONG RIEUL-PHIEUPHHANGUL JONGSEONG RIEUL-HIEUHHANGUL JO" + + "NGSEONG MIEUMHANGUL JONGSEONG PIEUPHANGUL JONGSEONG PIEUP-SIOSHANGUL JON" + + "GSEONG SIOSHANGUL JONGSEONG SSANGSIOSHANGUL JONGSEONG IEUNGHANGUL JONGSE" + + "ONG CIEUCHANGUL JONGSEONG CHIEUCHHANGUL JONGSEONG KHIEUKHHANGUL JONGSEON" + + "G THIEUTHHANGUL JONGSEONG PHIEUPHHANGUL JONGSEONG HIEUHHANGUL JONGSEONG " + + "KIYEOK-RIEULHANGUL JONGSEONG KIYEOK-SIOS-KIYEOKHANGUL JONGSEONG NIEUN-KI" + + "YEOKHANGUL JONGSEONG NIEUN-TIKEUTHANGUL JONGSEONG NIEUN-SIOSHANGUL JONGS" + + "EONG NIEUN-PANSIOSHANGUL JONGSEONG NIEUN-THIEUTHHANGUL JONGSEONG TIKEUT-" + + "KIYEOKHANGUL JONGSEONG TIKEUT-RIEULHANGUL JONGSEONG RIEUL-KIYEOK-SIOSHAN" + + "GUL JONGSEONG RIEUL-NIEUNHANGUL JONGSEONG RIEUL-TIKEUTHANGUL JONGSEONG R" + + "IEUL-TIKEUT-HIEUHHANGUL JONGSEONG SSANGRIEULHANGUL JONGSEONG RIEUL-MIEUM" + + "-KIYEOKHANGUL JONGSEONG RIEUL-MIEUM-SIOSHANGUL JONGSEONG RIEUL-PIEUP-SIO" + + "SHANGUL JONGSEONG RIEUL-PIEUP-HIEUHHANGUL JONGSEONG RIEUL-KAPYEOUNPIEUPH" + + "ANGUL JONGSEONG RIEUL-SSANGSIOSHANGUL JONGSEONG RIEUL-PANSIOSHANGUL JONG" + + "SEONG RIEUL-KHIEUKHHANGUL JONGSEONG RIEUL-YEORINHIEUHHANGUL JONGSEONG MI" + + "EUM-KIYEOKHANGUL JONGSEONG MIEUM-RIEULHANGUL JONGSEONG MIEUM-PIEUPHANGUL" + + " JONGSEONG MIEUM-SIOSHANGUL JONGSEONG MIEUM-SSANGSIOSHANGUL JONGSEONG MI" + + "EUM-PANSIOSHANGUL JONGSEONG MIEUM-CHIEUCHHANGUL JONGSEONG MIEUM-HIEUHHAN" + + "GUL JONGSEONG KAPYEOUNMIEUMHANGUL JONGSEONG PIEUP-RIEULHANGUL JONGSEONG " + + "PIEUP-PHIEUPHHANGUL JONGSEONG PIEUP-HIEUHHANGUL JONGSEONG KAPYEOUNPIEUPH" + + "ANGUL JONGSEONG SIOS-KIYEOKHANGUL JONGSEONG SIOS-TIKEUTHANGUL JONGSEONG " + + "SIOS-RIEULHANGUL JONGSEONG SIOS-PIEUPHANGUL JONGSEONG PANSIOSHANGUL JONG" + + "SEONG IEUNG-KIYEOKHANGUL JONGSEONG IEUNG-SSANGKIYEOKHANGUL JONGSEONG SSA" + + "NGIEUNGHANGUL JONGSEONG IEUNG-KHIEUKHHANGUL JONGSEONG YESIEUNGHANGUL JON" + + "GSEONG YESIEUNG-SIOSHANGUL JONGSEONG YESIEUNG-PANSIOSHANGUL JONGSEONG PH" + + "IEUPH-PIEUPHANGUL JONGSEONG KAPYEOUNPHIEUPHHANGUL JONGSEONG HIEUH-NIEUNH" + + "ANGUL JONGSEONG HIEUH-RIEULHANGUL JONGSEONG HIEUH-MIEUMHANGUL JONGSEONG " + + "HIEUH-PIEUPHANGUL JONGSEONG YEORINHIEUHHANGUL JONGSEONG KIYEOK-NIEUNHANG" + + "UL JONGSEONG KIYEOK-PIEUPHANGUL JONGSEONG KIYEOK-CHIEUCHHANGUL JONGSEONG" + + " KIYEOK-KHIEUKHHANGUL JONGSEONG KIYEOK-HIEUHHANGUL JONGSEONG SSANGNIEUNE" + + "THIOPIC SYLLABLE HAETHIOPIC SYLLABLE HUETHIOPIC SYLLABLE HIETHIOPIC SYLL" + + "ABLE HAAETHIOPIC SYLLABLE HEEETHIOPIC SYLLABLE HEETHIOPIC SYLLABLE HOETH" + + "IOPIC SYLLABLE HOAETHIOPIC SYLLABLE LAETHIOPIC SYLLABLE LUETHIOPIC SYLLA" + + "BLE LIETHIOPIC SYLLABLE LAAETHIOPIC SYLLABLE LEEETHIOPIC SYLLABLE LEETHI" + + "OPIC SYLLABLE LOETHIOPIC SYLLABLE LWAETHIOPIC SYLLABLE HHAETHIOPIC SYLLA" + + "BLE HHUETHIOPIC SYLLABLE HHIETHIOPIC SYLLABLE HHAAETHIOPIC SYLLABLE HHEE" + + "ETHIOPIC SYLLABLE HHEETHIOPIC SYLLABLE HHOETHIOPIC SYLLABLE HHWAETHIOPIC" + + " SYLLABLE MAETHIOPIC SYLLABLE MUETHIOPIC SYLLABLE MIETHIOPIC SYLLABLE MA" + + "AETHIOPIC SYLLABLE MEEETHIOPIC SYLLABLE MEETHIOPIC SYLLABLE MOETHIOPIC S" + + "YLLABLE MWAETHIOPIC SYLLABLE SZAETHIOPIC SYLLABLE SZUETHIOPIC SYLLABLE S" + + "ZIETHIOPIC SYLLABLE SZAAETHIOPIC SYLLABLE SZEEETHIOPIC SYLLABLE SZEETHIO" + + "PIC SYLLABLE SZOETHIOPIC SYLLABLE SZWAETHIOPIC SYLLABLE RAETHIOPIC SYLLA" + + "BLE RUETHIOPIC SYLLABLE RIETHIOPIC SYLLABLE RAAETHIOPIC SYLLABLE REEETHI" + + "OPIC SYLLABLE REETHIOPIC SYLLABLE ROETHIOPIC SYLLABLE RWAETHIOPIC SYLLAB" + + "LE SAETHIOPIC SYLLABLE SUETHIOPIC SYLLABLE SIETHIOPIC SYLLABLE SAAETHIOP" + + "IC SYLLABLE SEEETHIOPIC SYLLABLE SEETHIOPIC SYLLABLE SOETHIOPIC SYLLABLE" + + " SWAETHIOPIC SYLLABLE SHAETHIOPIC SYLLABLE SHUETHIOPIC SYLLABLE SHIETHIO" + + "PIC SYLLABLE SHAAETHIOPIC SYLLABLE SHEEETHIOPIC SYLLABLE SHEETHIOPIC SYL" + + "LABLE SHOETHIOPIC SYLLABLE SHWAETHIOPIC SYLLABLE QAETHIOPIC SYLLABLE QUE" + + "THIOPIC SYLLABLE QIETHIOPIC SYLLABLE QAAETHIOPIC SYLLABLE QEEETHIOPIC SY" + + "LLABLE QEETHIOPIC SYLLABLE QOETHIOPIC SYLLABLE QOAETHIOPIC SYLLABLE QWAE" + + "THIOPIC SYLLABLE QWIETHIOPIC SYLLABLE QWAAETHIOPIC SYLLABLE QWEEETHIOPIC" + + " SYLLABLE QWEETHIOPIC SYLLABLE QHAETHIOPIC SYLLABLE QHUETHIOPIC SYLLABLE" + + " QHIETHIOPIC SYLLABLE QHAAETHIOPIC SYLLABLE QHEEETHIOPIC SYLLABLE QHEETH" + + "IOPIC SYLLABLE QHOETHIOPIC SYLLABLE QHWAETHIOPIC SYLLABLE QHWIETHIOPIC S") + ("" + + "YLLABLE QHWAAETHIOPIC SYLLABLE QHWEEETHIOPIC SYLLABLE QHWEETHIOPIC SYLLA" + + "BLE BAETHIOPIC SYLLABLE BUETHIOPIC SYLLABLE BIETHIOPIC SYLLABLE BAAETHIO" + + "PIC SYLLABLE BEEETHIOPIC SYLLABLE BEETHIOPIC SYLLABLE BOETHIOPIC SYLLABL" + + "E BWAETHIOPIC SYLLABLE VAETHIOPIC SYLLABLE VUETHIOPIC SYLLABLE VIETHIOPI" + + "C SYLLABLE VAAETHIOPIC SYLLABLE VEEETHIOPIC SYLLABLE VEETHIOPIC SYLLABLE" + + " VOETHIOPIC SYLLABLE VWAETHIOPIC SYLLABLE TAETHIOPIC SYLLABLE TUETHIOPIC" + + " SYLLABLE TIETHIOPIC SYLLABLE TAAETHIOPIC SYLLABLE TEEETHIOPIC SYLLABLE " + + "TEETHIOPIC SYLLABLE TOETHIOPIC SYLLABLE TWAETHIOPIC SYLLABLE CAETHIOPIC " + + "SYLLABLE CUETHIOPIC SYLLABLE CIETHIOPIC SYLLABLE CAAETHIOPIC SYLLABLE CE" + + "EETHIOPIC SYLLABLE CEETHIOPIC SYLLABLE COETHIOPIC SYLLABLE CWAETHIOPIC S" + + "YLLABLE XAETHIOPIC SYLLABLE XUETHIOPIC SYLLABLE XIETHIOPIC SYLLABLE XAAE" + + "THIOPIC SYLLABLE XEEETHIOPIC SYLLABLE XEETHIOPIC SYLLABLE XOETHIOPIC SYL" + + "LABLE XOAETHIOPIC SYLLABLE XWAETHIOPIC SYLLABLE XWIETHIOPIC SYLLABLE XWA" + + "AETHIOPIC SYLLABLE XWEEETHIOPIC SYLLABLE XWEETHIOPIC SYLLABLE NAETHIOPIC" + + " SYLLABLE NUETHIOPIC SYLLABLE NIETHIOPIC SYLLABLE NAAETHIOPIC SYLLABLE N" + + "EEETHIOPIC SYLLABLE NEETHIOPIC SYLLABLE NOETHIOPIC SYLLABLE NWAETHIOPIC " + + "SYLLABLE NYAETHIOPIC SYLLABLE NYUETHIOPIC SYLLABLE NYIETHIOPIC SYLLABLE " + + "NYAAETHIOPIC SYLLABLE NYEEETHIOPIC SYLLABLE NYEETHIOPIC SYLLABLE NYOETHI" + + "OPIC SYLLABLE NYWAETHIOPIC SYLLABLE GLOTTAL AETHIOPIC SYLLABLE GLOTTAL U" + + "ETHIOPIC SYLLABLE GLOTTAL IETHIOPIC SYLLABLE GLOTTAL AAETHIOPIC SYLLABLE" + + " GLOTTAL EEETHIOPIC SYLLABLE GLOTTAL EETHIOPIC SYLLABLE GLOTTAL OETHIOPI" + + "C SYLLABLE GLOTTAL WAETHIOPIC SYLLABLE KAETHIOPIC SYLLABLE KUETHIOPIC SY" + + "LLABLE KIETHIOPIC SYLLABLE KAAETHIOPIC SYLLABLE KEEETHIOPIC SYLLABLE KEE" + + "THIOPIC SYLLABLE KOETHIOPIC SYLLABLE KOAETHIOPIC SYLLABLE KWAETHIOPIC SY" + + "LLABLE KWIETHIOPIC SYLLABLE KWAAETHIOPIC SYLLABLE KWEEETHIOPIC SYLLABLE " + + "KWEETHIOPIC SYLLABLE KXAETHIOPIC SYLLABLE KXUETHIOPIC SYLLABLE KXIETHIOP" + + "IC SYLLABLE KXAAETHIOPIC SYLLABLE KXEEETHIOPIC SYLLABLE KXEETHIOPIC SYLL" + + "ABLE KXOETHIOPIC SYLLABLE KXWAETHIOPIC SYLLABLE KXWIETHIOPIC SYLLABLE KX" + + "WAAETHIOPIC SYLLABLE KXWEEETHIOPIC SYLLABLE KXWEETHIOPIC SYLLABLE WAETHI" + + "OPIC SYLLABLE WUETHIOPIC SYLLABLE WIETHIOPIC SYLLABLE WAAETHIOPIC SYLLAB" + + "LE WEEETHIOPIC SYLLABLE WEETHIOPIC SYLLABLE WOETHIOPIC SYLLABLE WOAETHIO" + + "PIC SYLLABLE PHARYNGEAL AETHIOPIC SYLLABLE PHARYNGEAL UETHIOPIC SYLLABLE" + + " PHARYNGEAL IETHIOPIC SYLLABLE PHARYNGEAL AAETHIOPIC SYLLABLE PHARYNGEAL" + + " EEETHIOPIC SYLLABLE PHARYNGEAL EETHIOPIC SYLLABLE PHARYNGEAL OETHIOPIC " + + "SYLLABLE ZAETHIOPIC SYLLABLE ZUETHIOPIC SYLLABLE ZIETHIOPIC SYLLABLE ZAA" + + "ETHIOPIC SYLLABLE ZEEETHIOPIC SYLLABLE ZEETHIOPIC SYLLABLE ZOETHIOPIC SY" + + "LLABLE ZWAETHIOPIC SYLLABLE ZHAETHIOPIC SYLLABLE ZHUETHIOPIC SYLLABLE ZH" + + "IETHIOPIC SYLLABLE ZHAAETHIOPIC SYLLABLE ZHEEETHIOPIC SYLLABLE ZHEETHIOP" + + "IC SYLLABLE ZHOETHIOPIC SYLLABLE ZHWAETHIOPIC SYLLABLE YAETHIOPIC SYLLAB" + + "LE YUETHIOPIC SYLLABLE YIETHIOPIC SYLLABLE YAAETHIOPIC SYLLABLE YEEETHIO" + + "PIC SYLLABLE YEETHIOPIC SYLLABLE YOETHIOPIC SYLLABLE YOAETHIOPIC SYLLABL" + + "E DAETHIOPIC SYLLABLE DUETHIOPIC SYLLABLE DIETHIOPIC SYLLABLE DAAETHIOPI" + + "C SYLLABLE DEEETHIOPIC SYLLABLE DEETHIOPIC SYLLABLE DOETHIOPIC SYLLABLE " + + "DWAETHIOPIC SYLLABLE DDAETHIOPIC SYLLABLE DDUETHIOPIC SYLLABLE DDIETHIOP" + + "IC SYLLABLE DDAAETHIOPIC SYLLABLE DDEEETHIOPIC SYLLABLE DDEETHIOPIC SYLL" + + "ABLE DDOETHIOPIC SYLLABLE DDWAETHIOPIC SYLLABLE JAETHIOPIC SYLLABLE JUET" + + "HIOPIC SYLLABLE JIETHIOPIC SYLLABLE JAAETHIOPIC SYLLABLE JEEETHIOPIC SYL" + + "LABLE JEETHIOPIC SYLLABLE JOETHIOPIC SYLLABLE JWAETHIOPIC SYLLABLE GAETH" + + "IOPIC SYLLABLE GUETHIOPIC SYLLABLE GIETHIOPIC SYLLABLE GAAETHIOPIC SYLLA" + + "BLE GEEETHIOPIC SYLLABLE GEETHIOPIC SYLLABLE GOETHIOPIC SYLLABLE GOAETHI" + + "OPIC SYLLABLE GWAETHIOPIC SYLLABLE GWIETHIOPIC SYLLABLE GWAAETHIOPIC SYL" + + "LABLE GWEEETHIOPIC SYLLABLE GWEETHIOPIC SYLLABLE GGAETHIOPIC SYLLABLE GG" + + "UETHIOPIC SYLLABLE GGIETHIOPIC SYLLABLE GGAAETHIOPIC SYLLABLE GGEEETHIOP" + + "IC SYLLABLE GGEETHIOPIC SYLLABLE GGOETHIOPIC SYLLABLE GGWAAETHIOPIC SYLL" + + "ABLE THAETHIOPIC SYLLABLE THUETHIOPIC SYLLABLE THIETHIOPIC SYLLABLE THAA" + + "ETHIOPIC SYLLABLE THEEETHIOPIC SYLLABLE THEETHIOPIC SYLLABLE THOETHIOPIC" + + " SYLLABLE THWAETHIOPIC SYLLABLE CHAETHIOPIC SYLLABLE CHUETHIOPIC SYLLABL" + + "E CHIETHIOPIC SYLLABLE CHAAETHIOPIC SYLLABLE CHEEETHIOPIC SYLLABLE CHEET" + + "HIOPIC SYLLABLE CHOETHIOPIC SYLLABLE CHWAETHIOPIC SYLLABLE PHAETHIOPIC S" + + "YLLABLE PHUETHIOPIC SYLLABLE PHIETHIOPIC SYLLABLE PHAAETHIOPIC SYLLABLE " + + "PHEEETHIOPIC SYLLABLE PHEETHIOPIC SYLLABLE PHOETHIOPIC SYLLABLE PHWAETHI" + + "OPIC SYLLABLE TSAETHIOPIC SYLLABLE TSUETHIOPIC SYLLABLE TSIETHIOPIC SYLL" + + "ABLE TSAAETHIOPIC SYLLABLE TSEEETHIOPIC SYLLABLE TSEETHIOPIC SYLLABLE TS" + + "OETHIOPIC SYLLABLE TSWAETHIOPIC SYLLABLE TZAETHIOPIC SYLLABLE TZUETHIOPI") + ("" + + "C SYLLABLE TZIETHIOPIC SYLLABLE TZAAETHIOPIC SYLLABLE TZEEETHIOPIC SYLLA" + + "BLE TZEETHIOPIC SYLLABLE TZOETHIOPIC SYLLABLE TZOAETHIOPIC SYLLABLE FAET" + + "HIOPIC SYLLABLE FUETHIOPIC SYLLABLE FIETHIOPIC SYLLABLE FAAETHIOPIC SYLL" + + "ABLE FEEETHIOPIC SYLLABLE FEETHIOPIC SYLLABLE FOETHIOPIC SYLLABLE FWAETH" + + "IOPIC SYLLABLE PAETHIOPIC SYLLABLE PUETHIOPIC SYLLABLE PIETHIOPIC SYLLAB" + + "LE PAAETHIOPIC SYLLABLE PEEETHIOPIC SYLLABLE PEETHIOPIC SYLLABLE POETHIO" + + "PIC SYLLABLE PWAETHIOPIC SYLLABLE RYAETHIOPIC SYLLABLE MYAETHIOPIC SYLLA" + + "BLE FYAETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARKETHIOPIC COMBI" + + "NING VOWEL LENGTH MARKETHIOPIC COMBINING GEMINATION MARKETHIOPIC SECTION" + + " MARKETHIOPIC WORDSPACEETHIOPIC FULL STOPETHIOPIC COMMAETHIOPIC SEMICOLO" + + "NETHIOPIC COLONETHIOPIC PREFACE COLONETHIOPIC QUESTION MARKETHIOPIC PARA" + + "GRAPH SEPARATORETHIOPIC DIGIT ONEETHIOPIC DIGIT TWOETHIOPIC DIGIT THREEE" + + "THIOPIC DIGIT FOURETHIOPIC DIGIT FIVEETHIOPIC DIGIT SIXETHIOPIC DIGIT SE" + + "VENETHIOPIC DIGIT EIGHTETHIOPIC DIGIT NINEETHIOPIC NUMBER TENETHIOPIC NU" + + "MBER TWENTYETHIOPIC NUMBER THIRTYETHIOPIC NUMBER FORTYETHIOPIC NUMBER FI" + + "FTYETHIOPIC NUMBER SIXTYETHIOPIC NUMBER SEVENTYETHIOPIC NUMBER EIGHTYETH" + + "IOPIC NUMBER NINETYETHIOPIC NUMBER HUNDREDETHIOPIC NUMBER TEN THOUSANDET" + + "HIOPIC SYLLABLE SEBATBEIT MWAETHIOPIC SYLLABLE MWIETHIOPIC SYLLABLE MWEE" + + "ETHIOPIC SYLLABLE MWEETHIOPIC SYLLABLE SEBATBEIT BWAETHIOPIC SYLLABLE BW" + + "IETHIOPIC SYLLABLE BWEEETHIOPIC SYLLABLE BWEETHIOPIC SYLLABLE SEBATBEIT " + + "FWAETHIOPIC SYLLABLE FWIETHIOPIC SYLLABLE FWEEETHIOPIC SYLLABLE FWEETHIO" + + "PIC SYLLABLE SEBATBEIT PWAETHIOPIC SYLLABLE PWIETHIOPIC SYLLABLE PWEEETH" + + "IOPIC SYLLABLE PWEETHIOPIC TONAL MARK YIZETETHIOPIC TONAL MARK DERETETHI" + + "OPIC TONAL MARK RIKRIKETHIOPIC TONAL MARK SHORT RIKRIKETHIOPIC TONAL MAR" + + "K DIFATETHIOPIC TONAL MARK KENATETHIOPIC TONAL MARK CHIRETETHIOPIC TONAL" + + " MARK HIDETETHIOPIC TONAL MARK DERET-HIDETETHIOPIC TONAL MARK KURTCHEROK" + + "EE LETTER ACHEROKEE LETTER ECHEROKEE LETTER ICHEROKEE LETTER OCHEROKEE L" + + "ETTER UCHEROKEE LETTER VCHEROKEE LETTER GACHEROKEE LETTER KACHEROKEE LET" + + "TER GECHEROKEE LETTER GICHEROKEE LETTER GOCHEROKEE LETTER GUCHEROKEE LET" + + "TER GVCHEROKEE LETTER HACHEROKEE LETTER HECHEROKEE LETTER HICHEROKEE LET" + + "TER HOCHEROKEE LETTER HUCHEROKEE LETTER HVCHEROKEE LETTER LACHEROKEE LET" + + "TER LECHEROKEE LETTER LICHEROKEE LETTER LOCHEROKEE LETTER LUCHEROKEE LET" + + "TER LVCHEROKEE LETTER MACHEROKEE LETTER MECHEROKEE LETTER MICHEROKEE LET" + + "TER MOCHEROKEE LETTER MUCHEROKEE LETTER NACHEROKEE LETTER HNACHEROKEE LE" + + "TTER NAHCHEROKEE LETTER NECHEROKEE LETTER NICHEROKEE LETTER NOCHEROKEE L" + + "ETTER NUCHEROKEE LETTER NVCHEROKEE LETTER QUACHEROKEE LETTER QUECHEROKEE" + + " LETTER QUICHEROKEE LETTER QUOCHEROKEE LETTER QUUCHEROKEE LETTER QUVCHER" + + "OKEE LETTER SACHEROKEE LETTER SCHEROKEE LETTER SECHEROKEE LETTER SICHERO" + + "KEE LETTER SOCHEROKEE LETTER SUCHEROKEE LETTER SVCHEROKEE LETTER DACHERO" + + "KEE LETTER TACHEROKEE LETTER DECHEROKEE LETTER TECHEROKEE LETTER DICHERO" + + "KEE LETTER TICHEROKEE LETTER DOCHEROKEE LETTER DUCHEROKEE LETTER DVCHERO" + + "KEE LETTER DLACHEROKEE LETTER TLACHEROKEE LETTER TLECHEROKEE LETTER TLIC" + + "HEROKEE LETTER TLOCHEROKEE LETTER TLUCHEROKEE LETTER TLVCHEROKEE LETTER " + + "TSACHEROKEE LETTER TSECHEROKEE LETTER TSICHEROKEE LETTER TSOCHEROKEE LET" + + "TER TSUCHEROKEE LETTER TSVCHEROKEE LETTER WACHEROKEE LETTER WECHEROKEE L" + + "ETTER WICHEROKEE LETTER WOCHEROKEE LETTER WUCHEROKEE LETTER WVCHEROKEE L" + + "ETTER YACHEROKEE LETTER YECHEROKEE LETTER YICHEROKEE LETTER YOCHEROKEE L" + + "ETTER YUCHEROKEE LETTER YVCHEROKEE LETTER MVCHEROKEE SMALL LETTER YECHER" + + "OKEE SMALL LETTER YICHEROKEE SMALL LETTER YOCHEROKEE SMALL LETTER YUCHER" + + "OKEE SMALL LETTER YVCHEROKEE SMALL LETTER MVCANADIAN SYLLABICS HYPHENCAN" + + "ADIAN SYLLABICS ECANADIAN SYLLABICS AAICANADIAN SYLLABICS ICANADIAN SYLL" + + "ABICS IICANADIAN SYLLABICS OCANADIAN SYLLABICS OOCANADIAN SYLLABICS Y-CR" + + "EE OOCANADIAN SYLLABICS CARRIER EECANADIAN SYLLABICS CARRIER ICANADIAN S" + + "YLLABICS ACANADIAN SYLLABICS AACANADIAN SYLLABICS WECANADIAN SYLLABICS W" + + "EST-CREE WECANADIAN SYLLABICS WICANADIAN SYLLABICS WEST-CREE WICANADIAN " + + "SYLLABICS WIICANADIAN SYLLABICS WEST-CREE WIICANADIAN SYLLABICS WOCANADI" + + "AN SYLLABICS WEST-CREE WOCANADIAN SYLLABICS WOOCANADIAN SYLLABICS WEST-C" + + "REE WOOCANADIAN SYLLABICS NASKAPI WOOCANADIAN SYLLABICS WACANADIAN SYLLA" + + "BICS WEST-CREE WACANADIAN SYLLABICS WAACANADIAN SYLLABICS WEST-CREE WAAC" + + "ANADIAN SYLLABICS NASKAPI WAACANADIAN SYLLABICS AICANADIAN SYLLABICS Y-C" + + "REE WCANADIAN SYLLABICS GLOTTAL STOPCANADIAN SYLLABICS FINAL ACUTECANADI" + + "AN SYLLABICS FINAL GRAVECANADIAN SYLLABICS FINAL BOTTOM HALF RINGCANADIA" + + "N SYLLABICS FINAL TOP HALF RINGCANADIAN SYLLABICS FINAL RIGHT HALF RINGC" + + "ANADIAN SYLLABICS FINAL RINGCANADIAN SYLLABICS FINAL DOUBLE ACUTECANADIA") + ("" + + "N SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKESCANADIAN SYLLABICS FINAL " + + "MIDDLE DOTCANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKECANADIAN SYLLA" + + "BICS FINAL PLUSCANADIAN SYLLABICS FINAL DOWN TACKCANADIAN SYLLABICS ENCA" + + "NADIAN SYLLABICS INCANADIAN SYLLABICS ONCANADIAN SYLLABICS ANCANADIAN SY" + + "LLABICS PECANADIAN SYLLABICS PAAICANADIAN SYLLABICS PICANADIAN SYLLABICS" + + " PIICANADIAN SYLLABICS POCANADIAN SYLLABICS POOCANADIAN SYLLABICS Y-CREE" + + " POOCANADIAN SYLLABICS CARRIER HEECANADIAN SYLLABICS CARRIER HICANADIAN " + + "SYLLABICS PACANADIAN SYLLABICS PAACANADIAN SYLLABICS PWECANADIAN SYLLABI" + + "CS WEST-CREE PWECANADIAN SYLLABICS PWICANADIAN SYLLABICS WEST-CREE PWICA" + + "NADIAN SYLLABICS PWIICANADIAN SYLLABICS WEST-CREE PWIICANADIAN SYLLABICS" + + " PWOCANADIAN SYLLABICS WEST-CREE PWOCANADIAN SYLLABICS PWOOCANADIAN SYLL" + + "ABICS WEST-CREE PWOOCANADIAN SYLLABICS PWACANADIAN SYLLABICS WEST-CREE P" + + "WACANADIAN SYLLABICS PWAACANADIAN SYLLABICS WEST-CREE PWAACANADIAN SYLLA" + + "BICS Y-CREE PWAACANADIAN SYLLABICS PCANADIAN SYLLABICS WEST-CREE PCANADI" + + "AN SYLLABICS CARRIER HCANADIAN SYLLABICS TECANADIAN SYLLABICS TAAICANADI" + + "AN SYLLABICS TICANADIAN SYLLABICS TIICANADIAN SYLLABICS TOCANADIAN SYLLA" + + "BICS TOOCANADIAN SYLLABICS Y-CREE TOOCANADIAN SYLLABICS CARRIER DEECANAD" + + "IAN SYLLABICS CARRIER DICANADIAN SYLLABICS TACANADIAN SYLLABICS TAACANAD" + + "IAN SYLLABICS TWECANADIAN SYLLABICS WEST-CREE TWECANADIAN SYLLABICS TWIC" + + "ANADIAN SYLLABICS WEST-CREE TWICANADIAN SYLLABICS TWIICANADIAN SYLLABICS" + + " WEST-CREE TWIICANADIAN SYLLABICS TWOCANADIAN SYLLABICS WEST-CREE TWOCAN" + + "ADIAN SYLLABICS TWOOCANADIAN SYLLABICS WEST-CREE TWOOCANADIAN SYLLABICS " + + "TWACANADIAN SYLLABICS WEST-CREE TWACANADIAN SYLLABICS TWAACANADIAN SYLLA" + + "BICS WEST-CREE TWAACANADIAN SYLLABICS NASKAPI TWAACANADIAN SYLLABICS TCA" + + "NADIAN SYLLABICS TTECANADIAN SYLLABICS TTICANADIAN SYLLABICS TTOCANADIAN" + + " SYLLABICS TTACANADIAN SYLLABICS KECANADIAN SYLLABICS KAAICANADIAN SYLLA" + + "BICS KICANADIAN SYLLABICS KIICANADIAN SYLLABICS KOCANADIAN SYLLABICS KOO" + + "CANADIAN SYLLABICS Y-CREE KOOCANADIAN SYLLABICS KACANADIAN SYLLABICS KAA" + + "CANADIAN SYLLABICS KWECANADIAN SYLLABICS WEST-CREE KWECANADIAN SYLLABICS" + + " KWICANADIAN SYLLABICS WEST-CREE KWICANADIAN SYLLABICS KWIICANADIAN SYLL" + + "ABICS WEST-CREE KWIICANADIAN SYLLABICS KWOCANADIAN SYLLABICS WEST-CREE K" + + "WOCANADIAN SYLLABICS KWOOCANADIAN SYLLABICS WEST-CREE KWOOCANADIAN SYLLA" + + "BICS KWACANADIAN SYLLABICS WEST-CREE KWACANADIAN SYLLABICS KWAACANADIAN " + + "SYLLABICS WEST-CREE KWAACANADIAN SYLLABICS NASKAPI KWAACANADIAN SYLLABIC" + + "S KCANADIAN SYLLABICS KWCANADIAN SYLLABICS SOUTH-SLAVEY KEHCANADIAN SYLL" + + "ABICS SOUTH-SLAVEY KIHCANADIAN SYLLABICS SOUTH-SLAVEY KOHCANADIAN SYLLAB" + + "ICS SOUTH-SLAVEY KAHCANADIAN SYLLABICS CECANADIAN SYLLABICS CAAICANADIAN" + + " SYLLABICS CICANADIAN SYLLABICS CIICANADIAN SYLLABICS COCANADIAN SYLLABI" + + "CS COOCANADIAN SYLLABICS Y-CREE COOCANADIAN SYLLABICS CACANADIAN SYLLABI" + + "CS CAACANADIAN SYLLABICS CWECANADIAN SYLLABICS WEST-CREE CWECANADIAN SYL" + + "LABICS CWICANADIAN SYLLABICS WEST-CREE CWICANADIAN SYLLABICS CWIICANADIA" + + "N SYLLABICS WEST-CREE CWIICANADIAN SYLLABICS CWOCANADIAN SYLLABICS WEST-" + + "CREE CWOCANADIAN SYLLABICS CWOOCANADIAN SYLLABICS WEST-CREE CWOOCANADIAN" + + " SYLLABICS CWACANADIAN SYLLABICS WEST-CREE CWACANADIAN SYLLABICS CWAACAN" + + "ADIAN SYLLABICS WEST-CREE CWAACANADIAN SYLLABICS NASKAPI CWAACANADIAN SY" + + "LLABICS CCANADIAN SYLLABICS SAYISI THCANADIAN SYLLABICS MECANADIAN SYLLA" + + "BICS MAAICANADIAN SYLLABICS MICANADIAN SYLLABICS MIICANADIAN SYLLABICS M" + + "OCANADIAN SYLLABICS MOOCANADIAN SYLLABICS Y-CREE MOOCANADIAN SYLLABICS M" + + "ACANADIAN SYLLABICS MAACANADIAN SYLLABICS MWECANADIAN SYLLABICS WEST-CRE" + + "E MWECANADIAN SYLLABICS MWICANADIAN SYLLABICS WEST-CREE MWICANADIAN SYLL" + + "ABICS MWIICANADIAN SYLLABICS WEST-CREE MWIICANADIAN SYLLABICS MWOCANADIA" + + "N SYLLABICS WEST-CREE MWOCANADIAN SYLLABICS MWOOCANADIAN SYLLABICS WEST-" + + "CREE MWOOCANADIAN SYLLABICS MWACANADIAN SYLLABICS WEST-CREE MWACANADIAN " + + "SYLLABICS MWAACANADIAN SYLLABICS WEST-CREE MWAACANADIAN SYLLABICS NASKAP" + + "I MWAACANADIAN SYLLABICS MCANADIAN SYLLABICS WEST-CREE MCANADIAN SYLLABI" + + "CS MHCANADIAN SYLLABICS ATHAPASCAN MCANADIAN SYLLABICS SAYISI MCANADIAN " + + "SYLLABICS NECANADIAN SYLLABICS NAAICANADIAN SYLLABICS NICANADIAN SYLLABI" + + "CS NIICANADIAN SYLLABICS NOCANADIAN SYLLABICS NOOCANADIAN SYLLABICS Y-CR" + + "EE NOOCANADIAN SYLLABICS NACANADIAN SYLLABICS NAACANADIAN SYLLABICS NWEC" + + "ANADIAN SYLLABICS WEST-CREE NWECANADIAN SYLLABICS NWACANADIAN SYLLABICS " + + "WEST-CREE NWACANADIAN SYLLABICS NWAACANADIAN SYLLABICS WEST-CREE NWAACAN" + + "ADIAN SYLLABICS NASKAPI NWAACANADIAN SYLLABICS NCANADIAN SYLLABICS CARRI" + + "ER NGCANADIAN SYLLABICS NHCANADIAN SYLLABICS LECANADIAN SYLLABICS LAAICA" + + "NADIAN SYLLABICS LICANADIAN SYLLABICS LIICANADIAN SYLLABICS LOCANADIAN S") + ("" + + "YLLABICS LOOCANADIAN SYLLABICS Y-CREE LOOCANADIAN SYLLABICS LACANADIAN S" + + "YLLABICS LAACANADIAN SYLLABICS LWECANADIAN SYLLABICS WEST-CREE LWECANADI" + + "AN SYLLABICS LWICANADIAN SYLLABICS WEST-CREE LWICANADIAN SYLLABICS LWIIC" + + "ANADIAN SYLLABICS WEST-CREE LWIICANADIAN SYLLABICS LWOCANADIAN SYLLABICS" + + " WEST-CREE LWOCANADIAN SYLLABICS LWOOCANADIAN SYLLABICS WEST-CREE LWOOCA" + + "NADIAN SYLLABICS LWACANADIAN SYLLABICS WEST-CREE LWACANADIAN SYLLABICS L" + + "WAACANADIAN SYLLABICS WEST-CREE LWAACANADIAN SYLLABICS LCANADIAN SYLLABI" + + "CS WEST-CREE LCANADIAN SYLLABICS MEDIAL LCANADIAN SYLLABICS SECANADIAN S" + + "YLLABICS SAAICANADIAN SYLLABICS SICANADIAN SYLLABICS SIICANADIAN SYLLABI" + + "CS SOCANADIAN SYLLABICS SOOCANADIAN SYLLABICS Y-CREE SOOCANADIAN SYLLABI" + + "CS SACANADIAN SYLLABICS SAACANADIAN SYLLABICS SWECANADIAN SYLLABICS WEST" + + "-CREE SWECANADIAN SYLLABICS SWICANADIAN SYLLABICS WEST-CREE SWICANADIAN " + + "SYLLABICS SWIICANADIAN SYLLABICS WEST-CREE SWIICANADIAN SYLLABICS SWOCAN" + + "ADIAN SYLLABICS WEST-CREE SWOCANADIAN SYLLABICS SWOOCANADIAN SYLLABICS W" + + "EST-CREE SWOOCANADIAN SYLLABICS SWACANADIAN SYLLABICS WEST-CREE SWACANAD" + + "IAN SYLLABICS SWAACANADIAN SYLLABICS WEST-CREE SWAACANADIAN SYLLABICS NA" + + "SKAPI SWAACANADIAN SYLLABICS SCANADIAN SYLLABICS ATHAPASCAN SCANADIAN SY" + + "LLABICS SWCANADIAN SYLLABICS BLACKFOOT SCANADIAN SYLLABICS MOOSE-CREE SK" + + "CANADIAN SYLLABICS NASKAPI SKWCANADIAN SYLLABICS NASKAPI S-WCANADIAN SYL" + + "LABICS NASKAPI SPWACANADIAN SYLLABICS NASKAPI STWACANADIAN SYLLABICS NAS" + + "KAPI SKWACANADIAN SYLLABICS NASKAPI SCWACANADIAN SYLLABICS SHECANADIAN S" + + "YLLABICS SHICANADIAN SYLLABICS SHIICANADIAN SYLLABICS SHOCANADIAN SYLLAB" + + "ICS SHOOCANADIAN SYLLABICS SHACANADIAN SYLLABICS SHAACANADIAN SYLLABICS " + + "SHWECANADIAN SYLLABICS WEST-CREE SHWECANADIAN SYLLABICS SHWICANADIAN SYL" + + "LABICS WEST-CREE SHWICANADIAN SYLLABICS SHWIICANADIAN SYLLABICS WEST-CRE" + + "E SHWIICANADIAN SYLLABICS SHWOCANADIAN SYLLABICS WEST-CREE SHWOCANADIAN " + + "SYLLABICS SHWOOCANADIAN SYLLABICS WEST-CREE SHWOOCANADIAN SYLLABICS SHWA" + + "CANADIAN SYLLABICS WEST-CREE SHWACANADIAN SYLLABICS SHWAACANADIAN SYLLAB" + + "ICS WEST-CREE SHWAACANADIAN SYLLABICS SHCANADIAN SYLLABICS YECANADIAN SY" + + "LLABICS YAAICANADIAN SYLLABICS YICANADIAN SYLLABICS YIICANADIAN SYLLABIC" + + "S YOCANADIAN SYLLABICS YOOCANADIAN SYLLABICS Y-CREE YOOCANADIAN SYLLABIC" + + "S YACANADIAN SYLLABICS YAACANADIAN SYLLABICS YWECANADIAN SYLLABICS WEST-" + + "CREE YWECANADIAN SYLLABICS YWICANADIAN SYLLABICS WEST-CREE YWICANADIAN S" + + "YLLABICS YWIICANADIAN SYLLABICS WEST-CREE YWIICANADIAN SYLLABICS YWOCANA" + + "DIAN SYLLABICS WEST-CREE YWOCANADIAN SYLLABICS YWOOCANADIAN SYLLABICS WE" + + "ST-CREE YWOOCANADIAN SYLLABICS YWACANADIAN SYLLABICS WEST-CREE YWACANADI" + + "AN SYLLABICS YWAACANADIAN SYLLABICS WEST-CREE YWAACANADIAN SYLLABICS NAS" + + "KAPI YWAACANADIAN SYLLABICS YCANADIAN SYLLABICS BIBLE-CREE YCANADIAN SYL" + + "LABICS WEST-CREE YCANADIAN SYLLABICS SAYISI YICANADIAN SYLLABICS RECANAD" + + "IAN SYLLABICS R-CREE RECANADIAN SYLLABICS WEST-CREE LECANADIAN SYLLABICS" + + " RAAICANADIAN SYLLABICS RICANADIAN SYLLABICS RIICANADIAN SYLLABICS ROCAN" + + "ADIAN SYLLABICS ROOCANADIAN SYLLABICS WEST-CREE LOCANADIAN SYLLABICS RAC" + + "ANADIAN SYLLABICS RAACANADIAN SYLLABICS WEST-CREE LACANADIAN SYLLABICS R" + + "WAACANADIAN SYLLABICS WEST-CREE RWAACANADIAN SYLLABICS RCANADIAN SYLLABI" + + "CS WEST-CREE RCANADIAN SYLLABICS MEDIAL RCANADIAN SYLLABICS FECANADIAN S" + + "YLLABICS FAAICANADIAN SYLLABICS FICANADIAN SYLLABICS FIICANADIAN SYLLABI" + + "CS FOCANADIAN SYLLABICS FOOCANADIAN SYLLABICS FACANADIAN SYLLABICS FAACA" + + "NADIAN SYLLABICS FWAACANADIAN SYLLABICS WEST-CREE FWAACANADIAN SYLLABICS" + + " FCANADIAN SYLLABICS THECANADIAN SYLLABICS N-CREE THECANADIAN SYLLABICS " + + "THICANADIAN SYLLABICS N-CREE THICANADIAN SYLLABICS THIICANADIAN SYLLABIC" + + "S N-CREE THIICANADIAN SYLLABICS THOCANADIAN SYLLABICS THOOCANADIAN SYLLA" + + "BICS THACANADIAN SYLLABICS THAACANADIAN SYLLABICS THWAACANADIAN SYLLABIC" + + "S WEST-CREE THWAACANADIAN SYLLABICS THCANADIAN SYLLABICS TTHECANADIAN SY" + + "LLABICS TTHICANADIAN SYLLABICS TTHOCANADIAN SYLLABICS TTHACANADIAN SYLLA" + + "BICS TTHCANADIAN SYLLABICS TYECANADIAN SYLLABICS TYICANADIAN SYLLABICS T" + + "YOCANADIAN SYLLABICS TYACANADIAN SYLLABICS NUNAVIK HECANADIAN SYLLABICS " + + "NUNAVIK HICANADIAN SYLLABICS NUNAVIK HIICANADIAN SYLLABICS NUNAVIK HOCAN" + + "ADIAN SYLLABICS NUNAVIK HOOCANADIAN SYLLABICS NUNAVIK HACANADIAN SYLLABI" + + "CS NUNAVIK HAACANADIAN SYLLABICS NUNAVIK HCANADIAN SYLLABICS NUNAVUT HCA" + + "NADIAN SYLLABICS HKCANADIAN SYLLABICS QAAICANADIAN SYLLABICS QICANADIAN " + + "SYLLABICS QIICANADIAN SYLLABICS QOCANADIAN SYLLABICS QOOCANADIAN SYLLABI" + + "CS QACANADIAN SYLLABICS QAACANADIAN SYLLABICS QCANADIAN SYLLABICS TLHECA" + + "NADIAN SYLLABICS TLHICANADIAN SYLLABICS TLHOCANADIAN SYLLABICS TLHACANAD" + + "IAN SYLLABICS WEST-CREE RECANADIAN SYLLABICS WEST-CREE RICANADIAN SYLLAB") + ("" + + "ICS WEST-CREE ROCANADIAN SYLLABICS WEST-CREE RACANADIAN SYLLABICS NGAAIC" + + "ANADIAN SYLLABICS NGICANADIAN SYLLABICS NGIICANADIAN SYLLABICS NGOCANADI" + + "AN SYLLABICS NGOOCANADIAN SYLLABICS NGACANADIAN SYLLABICS NGAACANADIAN S" + + "YLLABICS NGCANADIAN SYLLABICS NNGCANADIAN SYLLABICS SAYISI SHECANADIAN S" + + "YLLABICS SAYISI SHICANADIAN SYLLABICS SAYISI SHOCANADIAN SYLLABICS SAYIS" + + "I SHACANADIAN SYLLABICS WOODS-CREE THECANADIAN SYLLABICS WOODS-CREE THIC" + + "ANADIAN SYLLABICS WOODS-CREE THOCANADIAN SYLLABICS WOODS-CREE THACANADIA" + + "N SYLLABICS WOODS-CREE THCANADIAN SYLLABICS LHICANADIAN SYLLABICS LHIICA" + + "NADIAN SYLLABICS LHOCANADIAN SYLLABICS LHOOCANADIAN SYLLABICS LHACANADIA" + + "N SYLLABICS LHAACANADIAN SYLLABICS LHCANADIAN SYLLABICS TH-CREE THECANAD" + + "IAN SYLLABICS TH-CREE THICANADIAN SYLLABICS TH-CREE THIICANADIAN SYLLABI" + + "CS TH-CREE THOCANADIAN SYLLABICS TH-CREE THOOCANADIAN SYLLABICS TH-CREE " + + "THACANADIAN SYLLABICS TH-CREE THAACANADIAN SYLLABICS TH-CREE THCANADIAN " + + "SYLLABICS AIVILIK BCANADIAN SYLLABICS BLACKFOOT ECANADIAN SYLLABICS BLAC" + + "KFOOT ICANADIAN SYLLABICS BLACKFOOT OCANADIAN SYLLABICS BLACKFOOT ACANAD" + + "IAN SYLLABICS BLACKFOOT WECANADIAN SYLLABICS BLACKFOOT WICANADIAN SYLLAB" + + "ICS BLACKFOOT WOCANADIAN SYLLABICS BLACKFOOT WACANADIAN SYLLABICS BLACKF" + + "OOT NECANADIAN SYLLABICS BLACKFOOT NICANADIAN SYLLABICS BLACKFOOT NOCANA" + + "DIAN SYLLABICS BLACKFOOT NACANADIAN SYLLABICS BLACKFOOT KECANADIAN SYLLA" + + "BICS BLACKFOOT KICANADIAN SYLLABICS BLACKFOOT KOCANADIAN SYLLABICS BLACK" + + "FOOT KACANADIAN SYLLABICS SAYISI HECANADIAN SYLLABICS SAYISI HICANADIAN " + + "SYLLABICS SAYISI HOCANADIAN SYLLABICS SAYISI HACANADIAN SYLLABICS CARRIE" + + "R GHUCANADIAN SYLLABICS CARRIER GHOCANADIAN SYLLABICS CARRIER GHECANADIA" + + "N SYLLABICS CARRIER GHEECANADIAN SYLLABICS CARRIER GHICANADIAN SYLLABICS" + + " CARRIER GHACANADIAN SYLLABICS CARRIER RUCANADIAN SYLLABICS CARRIER ROCA" + + "NADIAN SYLLABICS CARRIER RECANADIAN SYLLABICS CARRIER REECANADIAN SYLLAB" + + "ICS CARRIER RICANADIAN SYLLABICS CARRIER RACANADIAN SYLLABICS CARRIER WU" + + "CANADIAN SYLLABICS CARRIER WOCANADIAN SYLLABICS CARRIER WECANADIAN SYLLA" + + "BICS CARRIER WEECANADIAN SYLLABICS CARRIER WICANADIAN SYLLABICS CARRIER " + + "WACANADIAN SYLLABICS CARRIER HWUCANADIAN SYLLABICS CARRIER HWOCANADIAN S" + + "YLLABICS CARRIER HWECANADIAN SYLLABICS CARRIER HWEECANADIAN SYLLABICS CA" + + "RRIER HWICANADIAN SYLLABICS CARRIER HWACANADIAN SYLLABICS CARRIER THUCAN" + + "ADIAN SYLLABICS CARRIER THOCANADIAN SYLLABICS CARRIER THECANADIAN SYLLAB" + + "ICS CARRIER THEECANADIAN SYLLABICS CARRIER THICANADIAN SYLLABICS CARRIER" + + " THACANADIAN SYLLABICS CARRIER TTUCANADIAN SYLLABICS CARRIER TTOCANADIAN" + + " SYLLABICS CARRIER TTECANADIAN SYLLABICS CARRIER TTEECANADIAN SYLLABICS " + + "CARRIER TTICANADIAN SYLLABICS CARRIER TTACANADIAN SYLLABICS CARRIER PUCA" + + "NADIAN SYLLABICS CARRIER POCANADIAN SYLLABICS CARRIER PECANADIAN SYLLABI" + + "CS CARRIER PEECANADIAN SYLLABICS CARRIER PICANADIAN SYLLABICS CARRIER PA" + + "CANADIAN SYLLABICS CARRIER PCANADIAN SYLLABICS CARRIER GUCANADIAN SYLLAB" + + "ICS CARRIER GOCANADIAN SYLLABICS CARRIER GECANADIAN SYLLABICS CARRIER GE" + + "ECANADIAN SYLLABICS CARRIER GICANADIAN SYLLABICS CARRIER GACANADIAN SYLL" + + "ABICS CARRIER KHUCANADIAN SYLLABICS CARRIER KHOCANADIAN SYLLABICS CARRIE" + + "R KHECANADIAN SYLLABICS CARRIER KHEECANADIAN SYLLABICS CARRIER KHICANADI" + + "AN SYLLABICS CARRIER KHACANADIAN SYLLABICS CARRIER KKUCANADIAN SYLLABICS" + + " CARRIER KKOCANADIAN SYLLABICS CARRIER KKECANADIAN SYLLABICS CARRIER KKE" + + "ECANADIAN SYLLABICS CARRIER KKICANADIAN SYLLABICS CARRIER KKACANADIAN SY" + + "LLABICS CARRIER KKCANADIAN SYLLABICS CARRIER NUCANADIAN SYLLABICS CARRIE" + + "R NOCANADIAN SYLLABICS CARRIER NECANADIAN SYLLABICS CARRIER NEECANADIAN " + + "SYLLABICS CARRIER NICANADIAN SYLLABICS CARRIER NACANADIAN SYLLABICS CARR" + + "IER MUCANADIAN SYLLABICS CARRIER MOCANADIAN SYLLABICS CARRIER MECANADIAN" + + " SYLLABICS CARRIER MEECANADIAN SYLLABICS CARRIER MICANADIAN SYLLABICS CA" + + "RRIER MACANADIAN SYLLABICS CARRIER YUCANADIAN SYLLABICS CARRIER YOCANADI" + + "AN SYLLABICS CARRIER YECANADIAN SYLLABICS CARRIER YEECANADIAN SYLLABICS " + + "CARRIER YICANADIAN SYLLABICS CARRIER YACANADIAN SYLLABICS CARRIER JUCANA" + + "DIAN SYLLABICS SAYISI JUCANADIAN SYLLABICS CARRIER JOCANADIAN SYLLABICS " + + "CARRIER JECANADIAN SYLLABICS CARRIER JEECANADIAN SYLLABICS CARRIER JICAN" + + "ADIAN SYLLABICS SAYISI JICANADIAN SYLLABICS CARRIER JACANADIAN SYLLABICS" + + " CARRIER JJUCANADIAN SYLLABICS CARRIER JJOCANADIAN SYLLABICS CARRIER JJE" + + "CANADIAN SYLLABICS CARRIER JJEECANADIAN SYLLABICS CARRIER JJICANADIAN SY" + + "LLABICS CARRIER JJACANADIAN SYLLABICS CARRIER LUCANADIAN SYLLABICS CARRI" + + "ER LOCANADIAN SYLLABICS CARRIER LECANADIAN SYLLABICS CARRIER LEECANADIAN" + + " SYLLABICS CARRIER LICANADIAN SYLLABICS CARRIER LACANADIAN SYLLABICS CAR" + + "RIER DLUCANADIAN SYLLABICS CARRIER DLOCANADIAN SYLLABICS CARRIER DLECANA") + ("" + + "DIAN SYLLABICS CARRIER DLEECANADIAN SYLLABICS CARRIER DLICANADIAN SYLLAB" + + "ICS CARRIER DLACANADIAN SYLLABICS CARRIER LHUCANADIAN SYLLABICS CARRIER " + + "LHOCANADIAN SYLLABICS CARRIER LHECANADIAN SYLLABICS CARRIER LHEECANADIAN" + + " SYLLABICS CARRIER LHICANADIAN SYLLABICS CARRIER LHACANADIAN SYLLABICS C" + + "ARRIER TLHUCANADIAN SYLLABICS CARRIER TLHOCANADIAN SYLLABICS CARRIER TLH" + + "ECANADIAN SYLLABICS CARRIER TLHEECANADIAN SYLLABICS CARRIER TLHICANADIAN" + + " SYLLABICS CARRIER TLHACANADIAN SYLLABICS CARRIER TLUCANADIAN SYLLABICS " + + "CARRIER TLOCANADIAN SYLLABICS CARRIER TLECANADIAN SYLLABICS CARRIER TLEE" + + "CANADIAN SYLLABICS CARRIER TLICANADIAN SYLLABICS CARRIER TLACANADIAN SYL" + + "LABICS CARRIER ZUCANADIAN SYLLABICS CARRIER ZOCANADIAN SYLLABICS CARRIER" + + " ZECANADIAN SYLLABICS CARRIER ZEECANADIAN SYLLABICS CARRIER ZICANADIAN S" + + "YLLABICS CARRIER ZACANADIAN SYLLABICS CARRIER ZCANADIAN SYLLABICS CARRIE" + + "R INITIAL ZCANADIAN SYLLABICS CARRIER DZUCANADIAN SYLLABICS CARRIER DZOC" + + "ANADIAN SYLLABICS CARRIER DZECANADIAN SYLLABICS CARRIER DZEECANADIAN SYL" + + "LABICS CARRIER DZICANADIAN SYLLABICS CARRIER DZACANADIAN SYLLABICS CARRI" + + "ER SUCANADIAN SYLLABICS CARRIER SOCANADIAN SYLLABICS CARRIER SECANADIAN " + + "SYLLABICS CARRIER SEECANADIAN SYLLABICS CARRIER SICANADIAN SYLLABICS CAR" + + "RIER SACANADIAN SYLLABICS CARRIER SHUCANADIAN SYLLABICS CARRIER SHOCANAD" + + "IAN SYLLABICS CARRIER SHECANADIAN SYLLABICS CARRIER SHEECANADIAN SYLLABI" + + "CS CARRIER SHICANADIAN SYLLABICS CARRIER SHACANADIAN SYLLABICS CARRIER S" + + "HCANADIAN SYLLABICS CARRIER TSUCANADIAN SYLLABICS CARRIER TSOCANADIAN SY" + + "LLABICS CARRIER TSECANADIAN SYLLABICS CARRIER TSEECANADIAN SYLLABICS CAR" + + "RIER TSICANADIAN SYLLABICS CARRIER TSACANADIAN SYLLABICS CARRIER CHUCANA" + + "DIAN SYLLABICS CARRIER CHOCANADIAN SYLLABICS CARRIER CHECANADIAN SYLLABI" + + "CS CARRIER CHEECANADIAN SYLLABICS CARRIER CHICANADIAN SYLLABICS CARRIER " + + "CHACANADIAN SYLLABICS CARRIER TTSUCANADIAN SYLLABICS CARRIER TTSOCANADIA" + + "N SYLLABICS CARRIER TTSECANADIAN SYLLABICS CARRIER TTSEECANADIAN SYLLABI" + + "CS CARRIER TTSICANADIAN SYLLABICS CARRIER TTSACANADIAN SYLLABICS CHI SIG" + + "NCANADIAN SYLLABICS FULL STOPCANADIAN SYLLABICS QAICANADIAN SYLLABICS NG" + + "AICANADIAN SYLLABICS NNGICANADIAN SYLLABICS NNGIICANADIAN SYLLABICS NNGO" + + "CANADIAN SYLLABICS NNGOOCANADIAN SYLLABICS NNGACANADIAN SYLLABICS NNGAAC" + + "ANADIAN SYLLABICS WOODS-CREE THWEECANADIAN SYLLABICS WOODS-CREE THWICANA" + + "DIAN SYLLABICS WOODS-CREE THWIICANADIAN SYLLABICS WOODS-CREE THWOCANADIA" + + "N SYLLABICS WOODS-CREE THWOOCANADIAN SYLLABICS WOODS-CREE THWACANADIAN S" + + "YLLABICS WOODS-CREE THWAACANADIAN SYLLABICS WOODS-CREE FINAL THCANADIAN " + + "SYLLABICS BLACKFOOT WOGHAM SPACE MARKOGHAM LETTER BEITHOGHAM LETTER LUIS" + + "OGHAM LETTER FEARNOGHAM LETTER SAILOGHAM LETTER NIONOGHAM LETTER UATHOGH" + + "AM LETTER DAIROGHAM LETTER TINNEOGHAM LETTER COLLOGHAM LETTER CEIRTOGHAM" + + " LETTER MUINOGHAM LETTER GORTOGHAM LETTER NGEADALOGHAM LETTER STRAIFOGHA" + + "M LETTER RUISOGHAM LETTER AILMOGHAM LETTER ONNOGHAM LETTER UROGHAM LETTE" + + "R EADHADHOGHAM LETTER IODHADHOGHAM LETTER EABHADHOGHAM LETTER OROGHAM LE" + + "TTER UILLEANNOGHAM LETTER IFINOGHAM LETTER EAMHANCHOLLOGHAM LETTER PEITH" + + "OGHAM FEATHER MARKOGHAM REVERSED FEATHER MARKRUNIC LETTER FEHU FEOH FE F" + + "RUNIC LETTER VRUNIC LETTER URUZ UR URUNIC LETTER YRRUNIC LETTER YRUNIC L" + + "ETTER WRUNIC LETTER THURISAZ THURS THORNRUNIC LETTER ETHRUNIC LETTER ANS" + + "UZ ARUNIC LETTER OS ORUNIC LETTER AC ARUNIC LETTER AESCRUNIC LETTER LONG" + + "-BRANCH-OSS ORUNIC LETTER SHORT-TWIG-OSS ORUNIC LETTER ORUNIC LETTER OER" + + "UNIC LETTER ONRUNIC LETTER RAIDO RAD REID RRUNIC LETTER KAUNARUNIC LETTE" + + "R CENRUNIC LETTER KAUN KRUNIC LETTER GRUNIC LETTER ENGRUNIC LETTER GEBO " + + "GYFU GRUNIC LETTER GARRUNIC LETTER WUNJO WYNN WRUNIC LETTER HAGLAZ HRUNI" + + "C LETTER HAEGL HRUNIC LETTER LONG-BRANCH-HAGALL HRUNIC LETTER SHORT-TWIG" + + "-HAGALL HRUNIC LETTER NAUDIZ NYD NAUD NRUNIC LETTER SHORT-TWIG-NAUD NRUN" + + "IC LETTER DOTTED-NRUNIC LETTER ISAZ IS ISS IRUNIC LETTER ERUNIC LETTER J" + + "ERAN JRUNIC LETTER GERRUNIC LETTER LONG-BRANCH-AR AERUNIC LETTER SHORT-T" + + "WIG-AR ARUNIC LETTER IWAZ EOHRUNIC LETTER PERTHO PEORTH PRUNIC LETTER AL" + + "GIZ EOLHXRUNIC LETTER SOWILO SRUNIC LETTER SIGEL LONG-BRANCH-SOL SRUNIC " + + "LETTER SHORT-TWIG-SOL SRUNIC LETTER CRUNIC LETTER ZRUNIC LETTER TIWAZ TI" + + "R TYR TRUNIC LETTER SHORT-TWIG-TYR TRUNIC LETTER DRUNIC LETTER BERKANAN " + + "BEORC BJARKAN BRUNIC LETTER SHORT-TWIG-BJARKAN BRUNIC LETTER DOTTED-PRUN" + + "IC LETTER OPEN-PRUNIC LETTER EHWAZ EH ERUNIC LETTER MANNAZ MAN MRUNIC LE" + + "TTER LONG-BRANCH-MADR MRUNIC LETTER SHORT-TWIG-MADR MRUNIC LETTER LAUKAZ" + + " LAGU LOGR LRUNIC LETTER DOTTED-LRUNIC LETTER INGWAZRUNIC LETTER INGRUNI" + + "C LETTER DAGAZ DAEG DRUNIC LETTER OTHALAN ETHEL ORUNIC LETTER EARRUNIC L" + + "ETTER IORRUNIC LETTER CWEORTHRUNIC LETTER CALCRUNIC LETTER CEALCRUNIC LE") + ("" + + "TTER STANRUNIC LETTER LONG-BRANCH-YRRUNIC LETTER SHORT-TWIG-YRRUNIC LETT" + + "ER ICELANDIC-YRRUNIC LETTER QRUNIC LETTER XRUNIC SINGLE PUNCTUATIONRUNIC" + + " MULTIPLE PUNCTUATIONRUNIC CROSS PUNCTUATIONRUNIC ARLAUG SYMBOLRUNIC TVI" + + "MADUR SYMBOLRUNIC BELGTHOR SYMBOLRUNIC LETTER KRUNIC LETTER SHRUNIC LETT" + + "ER OORUNIC LETTER FRANKS CASKET OSRUNIC LETTER FRANKS CASKET ISRUNIC LET" + + "TER FRANKS CASKET EHRUNIC LETTER FRANKS CASKET ACRUNIC LETTER FRANKS CAS" + + "KET AESCTAGALOG LETTER ATAGALOG LETTER ITAGALOG LETTER UTAGALOG LETTER K" + + "ATAGALOG LETTER GATAGALOG LETTER NGATAGALOG LETTER TATAGALOG LETTER DATA" + + "GALOG LETTER NATAGALOG LETTER PATAGALOG LETTER BATAGALOG LETTER MATAGALO" + + "G LETTER YATAGALOG LETTER LATAGALOG LETTER WATAGALOG LETTER SATAGALOG LE" + + "TTER HATAGALOG VOWEL SIGN ITAGALOG VOWEL SIGN UTAGALOG SIGN VIRAMAHANUNO" + + "O LETTER AHANUNOO LETTER IHANUNOO LETTER UHANUNOO LETTER KAHANUNOO LETTE" + + "R GAHANUNOO LETTER NGAHANUNOO LETTER TAHANUNOO LETTER DAHANUNOO LETTER N" + + "AHANUNOO LETTER PAHANUNOO LETTER BAHANUNOO LETTER MAHANUNOO LETTER YAHAN" + + "UNOO LETTER RAHANUNOO LETTER LAHANUNOO LETTER WAHANUNOO LETTER SAHANUNOO" + + " LETTER HAHANUNOO VOWEL SIGN IHANUNOO VOWEL SIGN UHANUNOO SIGN PAMUDPODP" + + "HILIPPINE SINGLE PUNCTUATIONPHILIPPINE DOUBLE PUNCTUATIONBUHID LETTER AB" + + "UHID LETTER IBUHID LETTER UBUHID LETTER KABUHID LETTER GABUHID LETTER NG" + + "ABUHID LETTER TABUHID LETTER DABUHID LETTER NABUHID LETTER PABUHID LETTE" + + "R BABUHID LETTER MABUHID LETTER YABUHID LETTER RABUHID LETTER LABUHID LE" + + "TTER WABUHID LETTER SABUHID LETTER HABUHID VOWEL SIGN IBUHID VOWEL SIGN " + + "UTAGBANWA LETTER ATAGBANWA LETTER ITAGBANWA LETTER UTAGBANWA LETTER KATA" + + "GBANWA LETTER GATAGBANWA LETTER NGATAGBANWA LETTER TATAGBANWA LETTER DAT" + + "AGBANWA LETTER NATAGBANWA LETTER PATAGBANWA LETTER BATAGBANWA LETTER MAT" + + "AGBANWA LETTER YATAGBANWA LETTER LATAGBANWA LETTER WATAGBANWA LETTER SAT" + + "AGBANWA VOWEL SIGN ITAGBANWA VOWEL SIGN UKHMER LETTER KAKHMER LETTER KHA" + + "KHMER LETTER KOKHMER LETTER KHOKHMER LETTER NGOKHMER LETTER CAKHMER LETT" + + "ER CHAKHMER LETTER COKHMER LETTER CHOKHMER LETTER NYOKHMER LETTER DAKHME" + + "R LETTER TTHAKHMER LETTER DOKHMER LETTER TTHOKHMER LETTER NNOKHMER LETTE" + + "R TAKHMER LETTER THAKHMER LETTER TOKHMER LETTER THOKHMER LETTER NOKHMER " + + "LETTER BAKHMER LETTER PHAKHMER LETTER POKHMER LETTER PHOKHMER LETTER MOK" + + "HMER LETTER YOKHMER LETTER ROKHMER LETTER LOKHMER LETTER VOKHMER LETTER " + + "SHAKHMER LETTER SSOKHMER LETTER SAKHMER LETTER HAKHMER LETTER LAKHMER LE" + + "TTER QAKHMER INDEPENDENT VOWEL QAQKHMER INDEPENDENT VOWEL QAAKHMER INDEP" + + "ENDENT VOWEL QIKHMER INDEPENDENT VOWEL QIIKHMER INDEPENDENT VOWEL QUKHME" + + "R INDEPENDENT VOWEL QUKKHMER INDEPENDENT VOWEL QUUKHMER INDEPENDENT VOWE" + + "L QUUVKHMER INDEPENDENT VOWEL RYKHMER INDEPENDENT VOWEL RYYKHMER INDEPEN" + + "DENT VOWEL LYKHMER INDEPENDENT VOWEL LYYKHMER INDEPENDENT VOWEL QEKHMER " + + "INDEPENDENT VOWEL QAIKHMER INDEPENDENT VOWEL QOO TYPE ONEKHMER INDEPENDE" + + "NT VOWEL QOO TYPE TWOKHMER INDEPENDENT VOWEL QAUKHMER VOWEL INHERENT AQK" + + "HMER VOWEL INHERENT AAKHMER VOWEL SIGN AAKHMER VOWEL SIGN IKHMER VOWEL S" + + "IGN IIKHMER VOWEL SIGN YKHMER VOWEL SIGN YYKHMER VOWEL SIGN UKHMER VOWEL" + + " SIGN UUKHMER VOWEL SIGN UAKHMER VOWEL SIGN OEKHMER VOWEL SIGN YAKHMER V" + + "OWEL SIGN IEKHMER VOWEL SIGN EKHMER VOWEL SIGN AEKHMER VOWEL SIGN AIKHME" + + "R VOWEL SIGN OOKHMER VOWEL SIGN AUKHMER SIGN NIKAHITKHMER SIGN REAHMUKKH" + + "MER SIGN YUUKALEAPINTUKHMER SIGN MUUSIKATOANKHMER SIGN TRIISAPKHMER SIGN" + + " BANTOCKHMER SIGN ROBATKHMER SIGN TOANDAKHIATKHMER SIGN KAKABATKHMER SIG" + + "N AHSDAKHMER SIGN SAMYOK SANNYAKHMER SIGN VIRIAMKHMER SIGN COENGKHMER SI" + + "GN BATHAMASATKHMER SIGN KHANKHMER SIGN BARIYOOSANKHMER SIGN CAMNUC PII K" + + "UUHKHMER SIGN LEK TOOKHMER SIGN BEYYALKHMER SIGN PHNAEK MUANKHMER SIGN K" + + "OOMUUTKHMER CURRENCY SYMBOL RIELKHMER SIGN AVAKRAHASANYAKHMER SIGN ATTHA" + + "CANKHMER DIGIT ZEROKHMER DIGIT ONEKHMER DIGIT TWOKHMER DIGIT THREEKHMER " + + "DIGIT FOURKHMER DIGIT FIVEKHMER DIGIT SIXKHMER DIGIT SEVENKHMER DIGIT EI" + + "GHTKHMER DIGIT NINEKHMER SYMBOL LEK ATTAK SONKHMER SYMBOL LEK ATTAK MUOY" + + "KHMER SYMBOL LEK ATTAK PIIKHMER SYMBOL LEK ATTAK BEIKHMER SYMBOL LEK ATT" + + "AK BUONKHMER SYMBOL LEK ATTAK PRAMKHMER SYMBOL LEK ATTAK PRAM-MUOYKHMER " + + "SYMBOL LEK ATTAK PRAM-PIIKHMER SYMBOL LEK ATTAK PRAM-BEIKHMER SYMBOL LEK" + + " ATTAK PRAM-BUONMONGOLIAN BIRGAMONGOLIAN ELLIPSISMONGOLIAN COMMAMONGOLIA" + + "N FULL STOPMONGOLIAN COLONMONGOLIAN FOUR DOTSMONGOLIAN TODO SOFT HYPHENM" + + "ONGOLIAN SIBE SYLLABLE BOUNDARY MARKERMONGOLIAN MANCHU COMMAMONGOLIAN MA" + + "NCHU FULL STOPMONGOLIAN NIRUGUMONGOLIAN FREE VARIATION SELECTOR ONEMONGO" + + "LIAN FREE VARIATION SELECTOR TWOMONGOLIAN FREE VARIATION SELECTOR THREEM" + + "ONGOLIAN VOWEL SEPARATORMONGOLIAN DIGIT ZEROMONGOLIAN DIGIT ONEMONGOLIAN" + + " DIGIT TWOMONGOLIAN DIGIT THREEMONGOLIAN DIGIT FOURMONGOLIAN DIGIT FIVEM") + ("" + + "ONGOLIAN DIGIT SIXMONGOLIAN DIGIT SEVENMONGOLIAN DIGIT EIGHTMONGOLIAN DI" + + "GIT NINEMONGOLIAN LETTER AMONGOLIAN LETTER EMONGOLIAN LETTER IMONGOLIAN " + + "LETTER OMONGOLIAN LETTER UMONGOLIAN LETTER OEMONGOLIAN LETTER UEMONGOLIA" + + "N LETTER EEMONGOLIAN LETTER NAMONGOLIAN LETTER ANGMONGOLIAN LETTER BAMON" + + "GOLIAN LETTER PAMONGOLIAN LETTER QAMONGOLIAN LETTER GAMONGOLIAN LETTER M" + + "AMONGOLIAN LETTER LAMONGOLIAN LETTER SAMONGOLIAN LETTER SHAMONGOLIAN LET" + + "TER TAMONGOLIAN LETTER DAMONGOLIAN LETTER CHAMONGOLIAN LETTER JAMONGOLIA" + + "N LETTER YAMONGOLIAN LETTER RAMONGOLIAN LETTER WAMONGOLIAN LETTER FAMONG" + + "OLIAN LETTER KAMONGOLIAN LETTER KHAMONGOLIAN LETTER TSAMONGOLIAN LETTER " + + "ZAMONGOLIAN LETTER HAAMONGOLIAN LETTER ZRAMONGOLIAN LETTER LHAMONGOLIAN " + + "LETTER ZHIMONGOLIAN LETTER CHIMONGOLIAN LETTER TODO LONG VOWEL SIGNMONGO" + + "LIAN LETTER TODO EMONGOLIAN LETTER TODO IMONGOLIAN LETTER TODO OMONGOLIA" + + "N LETTER TODO UMONGOLIAN LETTER TODO OEMONGOLIAN LETTER TODO UEMONGOLIAN" + + " LETTER TODO ANGMONGOLIAN LETTER TODO BAMONGOLIAN LETTER TODO PAMONGOLIA" + + "N LETTER TODO QAMONGOLIAN LETTER TODO GAMONGOLIAN LETTER TODO MAMONGOLIA" + + "N LETTER TODO TAMONGOLIAN LETTER TODO DAMONGOLIAN LETTER TODO CHAMONGOLI" + + "AN LETTER TODO JAMONGOLIAN LETTER TODO TSAMONGOLIAN LETTER TODO YAMONGOL" + + "IAN LETTER TODO WAMONGOLIAN LETTER TODO KAMONGOLIAN LETTER TODO GAAMONGO" + + "LIAN LETTER TODO HAAMONGOLIAN LETTER TODO JIAMONGOLIAN LETTER TODO NIAMO" + + "NGOLIAN LETTER TODO DZAMONGOLIAN LETTER SIBE EMONGOLIAN LETTER SIBE IMON" + + "GOLIAN LETTER SIBE IYMONGOLIAN LETTER SIBE UEMONGOLIAN LETTER SIBE UMONG" + + "OLIAN LETTER SIBE ANGMONGOLIAN LETTER SIBE KAMONGOLIAN LETTER SIBE GAMON" + + "GOLIAN LETTER SIBE HAMONGOLIAN LETTER SIBE PAMONGOLIAN LETTER SIBE SHAMO" + + "NGOLIAN LETTER SIBE TAMONGOLIAN LETTER SIBE DAMONGOLIAN LETTER SIBE JAMO" + + "NGOLIAN LETTER SIBE FAMONGOLIAN LETTER SIBE GAAMONGOLIAN LETTER SIBE HAA" + + "MONGOLIAN LETTER SIBE TSAMONGOLIAN LETTER SIBE ZAMONGOLIAN LETTER SIBE R" + + "AAMONGOLIAN LETTER SIBE CHAMONGOLIAN LETTER SIBE ZHAMONGOLIAN LETTER MAN" + + "CHU IMONGOLIAN LETTER MANCHU KAMONGOLIAN LETTER MANCHU RAMONGOLIAN LETTE" + + "R MANCHU FAMONGOLIAN LETTER MANCHU ZHAMONGOLIAN LETTER ALI GALI ANUSVARA" + + " ONEMONGOLIAN LETTER ALI GALI VISARGA ONEMONGOLIAN LETTER ALI GALI DAMAR" + + "UMONGOLIAN LETTER ALI GALI UBADAMAMONGOLIAN LETTER ALI GALI INVERTED UBA" + + "DAMAMONGOLIAN LETTER ALI GALI BALUDAMONGOLIAN LETTER ALI GALI THREE BALU" + + "DAMONGOLIAN LETTER ALI GALI AMONGOLIAN LETTER ALI GALI IMONGOLIAN LETTER" + + " ALI GALI KAMONGOLIAN LETTER ALI GALI NGAMONGOLIAN LETTER ALI GALI CAMON" + + "GOLIAN LETTER ALI GALI TTAMONGOLIAN LETTER ALI GALI TTHAMONGOLIAN LETTER" + + " ALI GALI DDAMONGOLIAN LETTER ALI GALI NNAMONGOLIAN LETTER ALI GALI TAMO" + + "NGOLIAN LETTER ALI GALI DAMONGOLIAN LETTER ALI GALI PAMONGOLIAN LETTER A" + + "LI GALI PHAMONGOLIAN LETTER ALI GALI SSAMONGOLIAN LETTER ALI GALI ZHAMON" + + "GOLIAN LETTER ALI GALI ZAMONGOLIAN LETTER ALI GALI AHMONGOLIAN LETTER TO" + + "DO ALI GALI TAMONGOLIAN LETTER TODO ALI GALI ZHAMONGOLIAN LETTER MANCHU " + + "ALI GALI GHAMONGOLIAN LETTER MANCHU ALI GALI NGAMONGOLIAN LETTER MANCHU " + + "ALI GALI CAMONGOLIAN LETTER MANCHU ALI GALI JHAMONGOLIAN LETTER MANCHU A" + + "LI GALI TTAMONGOLIAN LETTER MANCHU ALI GALI DDHAMONGOLIAN LETTER MANCHU " + + "ALI GALI TAMONGOLIAN LETTER MANCHU ALI GALI DHAMONGOLIAN LETTER MANCHU A" + + "LI GALI SSAMONGOLIAN LETTER MANCHU ALI GALI CYAMONGOLIAN LETTER MANCHU A" + + "LI GALI ZHAMONGOLIAN LETTER MANCHU ALI GALI ZAMONGOLIAN LETTER ALI GALI " + + "HALF UMONGOLIAN LETTER ALI GALI HALF YAMONGOLIAN LETTER MANCHU ALI GALI " + + "BHAMONGOLIAN LETTER ALI GALI DAGALGAMONGOLIAN LETTER MANCHU ALI GALI LHA" + + "CANADIAN SYLLABICS OYCANADIAN SYLLABICS AYCANADIAN SYLLABICS AAYCANADIAN" + + " SYLLABICS WAYCANADIAN SYLLABICS POYCANADIAN SYLLABICS PAYCANADIAN SYLLA" + + "BICS PWOYCANADIAN SYLLABICS TAYCANADIAN SYLLABICS KAYCANADIAN SYLLABICS " + + "KWAYCANADIAN SYLLABICS MAYCANADIAN SYLLABICS NOYCANADIAN SYLLABICS NAYCA" + + "NADIAN SYLLABICS LAYCANADIAN SYLLABICS SOYCANADIAN SYLLABICS SAYCANADIAN" + + " SYLLABICS SHOYCANADIAN SYLLABICS SHAYCANADIAN SYLLABICS SHWOYCANADIAN S" + + "YLLABICS YOYCANADIAN SYLLABICS YAYCANADIAN SYLLABICS RAYCANADIAN SYLLABI" + + "CS NWICANADIAN SYLLABICS OJIBWAY NWICANADIAN SYLLABICS NWIICANADIAN SYLL" + + "ABICS OJIBWAY NWIICANADIAN SYLLABICS NWOCANADIAN SYLLABICS OJIBWAY NWOCA" + + "NADIAN SYLLABICS NWOOCANADIAN SYLLABICS OJIBWAY NWOOCANADIAN SYLLABICS R" + + "WEECANADIAN SYLLABICS RWICANADIAN SYLLABICS RWIICANADIAN SYLLABICS RWOCA" + + "NADIAN SYLLABICS RWOOCANADIAN SYLLABICS RWACANADIAN SYLLABICS OJIBWAY PC" + + "ANADIAN SYLLABICS OJIBWAY TCANADIAN SYLLABICS OJIBWAY KCANADIAN SYLLABIC" + + "S OJIBWAY CCANADIAN SYLLABICS OJIBWAY MCANADIAN SYLLABICS OJIBWAY NCANAD" + + "IAN SYLLABICS OJIBWAY SCANADIAN SYLLABICS OJIBWAY SHCANADIAN SYLLABICS E" + + "ASTERN WCANADIAN SYLLABICS WESTERN WCANADIAN SYLLABICS FINAL SMALL RINGC") + ("" + + "ANADIAN SYLLABICS FINAL RAISED DOTCANADIAN SYLLABICS R-CREE RWECANADIAN " + + "SYLLABICS WEST-CREE LOOCANADIAN SYLLABICS WEST-CREE LAACANADIAN SYLLABIC" + + "S THWECANADIAN SYLLABICS THWACANADIAN SYLLABICS TTHWECANADIAN SYLLABICS " + + "TTHOOCANADIAN SYLLABICS TTHAACANADIAN SYLLABICS TLHWECANADIAN SYLLABICS " + + "TLHOOCANADIAN SYLLABICS SAYISI SHWECANADIAN SYLLABICS SAYISI SHOOCANADIA" + + "N SYLLABICS SAYISI HOOCANADIAN SYLLABICS CARRIER GWUCANADIAN SYLLABICS C" + + "ARRIER DENE GEECANADIAN SYLLABICS CARRIER GAACANADIAN SYLLABICS CARRIER " + + "GWACANADIAN SYLLABICS SAYISI JUUCANADIAN SYLLABICS CARRIER JWACANADIAN S" + + "YLLABICS BEAVER DENE LCANADIAN SYLLABICS BEAVER DENE RCANADIAN SYLLABICS" + + " CARRIER DENTAL SLIMBU VOWEL-CARRIER LETTERLIMBU LETTER KALIMBU LETTER K" + + "HALIMBU LETTER GALIMBU LETTER GHALIMBU LETTER NGALIMBU LETTER CALIMBU LE" + + "TTER CHALIMBU LETTER JALIMBU LETTER JHALIMBU LETTER YANLIMBU LETTER TALI" + + "MBU LETTER THALIMBU LETTER DALIMBU LETTER DHALIMBU LETTER NALIMBU LETTER" + + " PALIMBU LETTER PHALIMBU LETTER BALIMBU LETTER BHALIMBU LETTER MALIMBU L" + + "ETTER YALIMBU LETTER RALIMBU LETTER LALIMBU LETTER WALIMBU LETTER SHALIM" + + "BU LETTER SSALIMBU LETTER SALIMBU LETTER HALIMBU LETTER GYANLIMBU LETTER" + + " TRALIMBU VOWEL SIGN ALIMBU VOWEL SIGN ILIMBU VOWEL SIGN ULIMBU VOWEL SI" + + "GN EELIMBU VOWEL SIGN AILIMBU VOWEL SIGN OOLIMBU VOWEL SIGN AULIMBU VOWE" + + "L SIGN ELIMBU VOWEL SIGN OLIMBU SUBJOINED LETTER YALIMBU SUBJOINED LETTE" + + "R RALIMBU SUBJOINED LETTER WALIMBU SMALL LETTER KALIMBU SMALL LETTER NGA" + + "LIMBU SMALL LETTER ANUSVARALIMBU SMALL LETTER TALIMBU SMALL LETTER NALIM" + + "BU SMALL LETTER PALIMBU SMALL LETTER MALIMBU SMALL LETTER RALIMBU SMALL " + + "LETTER LALIMBU SIGN MUKPHRENGLIMBU SIGN KEMPHRENGLIMBU SIGN SA-ILIMBU SI" + + "GN LOOLIMBU EXCLAMATION MARKLIMBU QUESTION MARKLIMBU DIGIT ZEROLIMBU DIG" + + "IT ONELIMBU DIGIT TWOLIMBU DIGIT THREELIMBU DIGIT FOURLIMBU DIGIT FIVELI" + + "MBU DIGIT SIXLIMBU DIGIT SEVENLIMBU DIGIT EIGHTLIMBU DIGIT NINETAI LE LE" + + "TTER KATAI LE LETTER XATAI LE LETTER NGATAI LE LETTER TSATAI LE LETTER S" + + "ATAI LE LETTER YATAI LE LETTER TATAI LE LETTER THATAI LE LETTER LATAI LE" + + " LETTER PATAI LE LETTER PHATAI LE LETTER MATAI LE LETTER FATAI LE LETTER" + + " VATAI LE LETTER HATAI LE LETTER QATAI LE LETTER KHATAI LE LETTER TSHATA" + + "I LE LETTER NATAI LE LETTER ATAI LE LETTER ITAI LE LETTER EETAI LE LETTE" + + "R EHTAI LE LETTER UTAI LE LETTER OOTAI LE LETTER OTAI LE LETTER UETAI LE" + + " LETTER ETAI LE LETTER AUETAI LE LETTER AITAI LE LETTER TONE-2TAI LE LET" + + "TER TONE-3TAI LE LETTER TONE-4TAI LE LETTER TONE-5TAI LE LETTER TONE-6NE" + + "W TAI LUE LETTER HIGH QANEW TAI LUE LETTER LOW QANEW TAI LUE LETTER HIGH" + + " KANEW TAI LUE LETTER HIGH XANEW TAI LUE LETTER HIGH NGANEW TAI LUE LETT" + + "ER LOW KANEW TAI LUE LETTER LOW XANEW TAI LUE LETTER LOW NGANEW TAI LUE " + + "LETTER HIGH TSANEW TAI LUE LETTER HIGH SANEW TAI LUE LETTER HIGH YANEW T" + + "AI LUE LETTER LOW TSANEW TAI LUE LETTER LOW SANEW TAI LUE LETTER LOW YAN" + + "EW TAI LUE LETTER HIGH TANEW TAI LUE LETTER HIGH THANEW TAI LUE LETTER H" + + "IGH NANEW TAI LUE LETTER LOW TANEW TAI LUE LETTER LOW THANEW TAI LUE LET" + + "TER LOW NANEW TAI LUE LETTER HIGH PANEW TAI LUE LETTER HIGH PHANEW TAI L" + + "UE LETTER HIGH MANEW TAI LUE LETTER LOW PANEW TAI LUE LETTER LOW PHANEW " + + "TAI LUE LETTER LOW MANEW TAI LUE LETTER HIGH FANEW TAI LUE LETTER HIGH V" + + "ANEW TAI LUE LETTER HIGH LANEW TAI LUE LETTER LOW FANEW TAI LUE LETTER L" + + "OW VANEW TAI LUE LETTER LOW LANEW TAI LUE LETTER HIGH HANEW TAI LUE LETT" + + "ER HIGH DANEW TAI LUE LETTER HIGH BANEW TAI LUE LETTER LOW HANEW TAI LUE" + + " LETTER LOW DANEW TAI LUE LETTER LOW BANEW TAI LUE LETTER HIGH KVANEW TA" + + "I LUE LETTER HIGH XVANEW TAI LUE LETTER LOW KVANEW TAI LUE LETTER LOW XV" + + "ANEW TAI LUE LETTER HIGH SUANEW TAI LUE LETTER LOW SUANEW TAI LUE VOWEL " + + "SIGN VOWEL SHORTENERNEW TAI LUE VOWEL SIGN AANEW TAI LUE VOWEL SIGN IINE" + + "W TAI LUE VOWEL SIGN UNEW TAI LUE VOWEL SIGN UUNEW TAI LUE VOWEL SIGN EN" + + "EW TAI LUE VOWEL SIGN AENEW TAI LUE VOWEL SIGN ONEW TAI LUE VOWEL SIGN O" + + "ANEW TAI LUE VOWEL SIGN UENEW TAI LUE VOWEL SIGN AYNEW TAI LUE VOWEL SIG" + + "N AAYNEW TAI LUE VOWEL SIGN UYNEW TAI LUE VOWEL SIGN OYNEW TAI LUE VOWEL" + + " SIGN OAYNEW TAI LUE VOWEL SIGN UEYNEW TAI LUE VOWEL SIGN IYNEW TAI LUE " + + "LETTER FINAL VNEW TAI LUE LETTER FINAL NGNEW TAI LUE LETTER FINAL NNEW T" + + "AI LUE LETTER FINAL MNEW TAI LUE LETTER FINAL KNEW TAI LUE LETTER FINAL " + + "DNEW TAI LUE LETTER FINAL BNEW TAI LUE TONE MARK-1NEW TAI LUE TONE MARK-" + + "2NEW TAI LUE DIGIT ZERONEW TAI LUE DIGIT ONENEW TAI LUE DIGIT TWONEW TAI" + + " LUE DIGIT THREENEW TAI LUE DIGIT FOURNEW TAI LUE DIGIT FIVENEW TAI LUE " + + "DIGIT SIXNEW TAI LUE DIGIT SEVENNEW TAI LUE DIGIT EIGHTNEW TAI LUE DIGIT" + + " NINENEW TAI LUE THAM DIGIT ONENEW TAI LUE SIGN LAENEW TAI LUE SIGN LAEV" + + "KHMER SYMBOL PATHAMASATKHMER SYMBOL MUOY KOETKHMER SYMBOL PII KOETKHMER ") + ("" + + "SYMBOL BEI KOETKHMER SYMBOL BUON KOETKHMER SYMBOL PRAM KOETKHMER SYMBOL " + + "PRAM-MUOY KOETKHMER SYMBOL PRAM-PII KOETKHMER SYMBOL PRAM-BEI KOETKHMER " + + "SYMBOL PRAM-BUON KOETKHMER SYMBOL DAP KOETKHMER SYMBOL DAP-MUOY KOETKHME" + + "R SYMBOL DAP-PII KOETKHMER SYMBOL DAP-BEI KOETKHMER SYMBOL DAP-BUON KOET" + + "KHMER SYMBOL DAP-PRAM KOETKHMER SYMBOL TUTEYASATKHMER SYMBOL MUOY ROCKHM" + + "ER SYMBOL PII ROCKHMER SYMBOL BEI ROCKHMER SYMBOL BUON ROCKHMER SYMBOL P" + + "RAM ROCKHMER SYMBOL PRAM-MUOY ROCKHMER SYMBOL PRAM-PII ROCKHMER SYMBOL P" + + "RAM-BEI ROCKHMER SYMBOL PRAM-BUON ROCKHMER SYMBOL DAP ROCKHMER SYMBOL DA" + + "P-MUOY ROCKHMER SYMBOL DAP-PII ROCKHMER SYMBOL DAP-BEI ROCKHMER SYMBOL D" + + "AP-BUON ROCKHMER SYMBOL DAP-PRAM ROCBUGINESE LETTER KABUGINESE LETTER GA" + + "BUGINESE LETTER NGABUGINESE LETTER NGKABUGINESE LETTER PABUGINESE LETTER" + + " BABUGINESE LETTER MABUGINESE LETTER MPABUGINESE LETTER TABUGINESE LETTE" + + "R DABUGINESE LETTER NABUGINESE LETTER NRABUGINESE LETTER CABUGINESE LETT" + + "ER JABUGINESE LETTER NYABUGINESE LETTER NYCABUGINESE LETTER YABUGINESE L" + + "ETTER RABUGINESE LETTER LABUGINESE LETTER VABUGINESE LETTER SABUGINESE L" + + "ETTER ABUGINESE LETTER HABUGINESE VOWEL SIGN IBUGINESE VOWEL SIGN UBUGIN" + + "ESE VOWEL SIGN EBUGINESE VOWEL SIGN OBUGINESE VOWEL SIGN AEBUGINESE PALL" + + "AWABUGINESE END OF SECTIONTAI THAM LETTER HIGH KATAI THAM LETTER HIGH KH" + + "ATAI THAM LETTER HIGH KXATAI THAM LETTER LOW KATAI THAM LETTER LOW KXATA" + + "I THAM LETTER LOW KHATAI THAM LETTER NGATAI THAM LETTER HIGH CATAI THAM " + + "LETTER HIGH CHATAI THAM LETTER LOW CATAI THAM LETTER LOW SATAI THAM LETT" + + "ER LOW CHATAI THAM LETTER NYATAI THAM LETTER RATATAI THAM LETTER HIGH RA" + + "THATAI THAM LETTER DATAI THAM LETTER LOW RATHATAI THAM LETTER RANATAI TH" + + "AM LETTER HIGH TATAI THAM LETTER HIGH THATAI THAM LETTER LOW TATAI THAM " + + "LETTER LOW THATAI THAM LETTER NATAI THAM LETTER BATAI THAM LETTER HIGH P" + + "ATAI THAM LETTER HIGH PHATAI THAM LETTER HIGH FATAI THAM LETTER LOW PATA" + + "I THAM LETTER LOW FATAI THAM LETTER LOW PHATAI THAM LETTER MATAI THAM LE" + + "TTER LOW YATAI THAM LETTER HIGH YATAI THAM LETTER RATAI THAM LETTER RUET" + + "AI THAM LETTER LATAI THAM LETTER LUETAI THAM LETTER WATAI THAM LETTER HI" + + "GH SHATAI THAM LETTER HIGH SSATAI THAM LETTER HIGH SATAI THAM LETTER HIG" + + "H HATAI THAM LETTER LLATAI THAM LETTER ATAI THAM LETTER LOW HATAI THAM L" + + "ETTER ITAI THAM LETTER IITAI THAM LETTER UTAI THAM LETTER UUTAI THAM LET" + + "TER EETAI THAM LETTER OOTAI THAM LETTER LAETAI THAM LETTER GREAT SATAI T" + + "HAM CONSONANT SIGN MEDIAL RATAI THAM CONSONANT SIGN MEDIAL LATAI THAM CO" + + "NSONANT SIGN LA TANG LAITAI THAM SIGN MAI KANG LAITAI THAM CONSONANT SIG" + + "N FINAL NGATAI THAM CONSONANT SIGN LOW PATAI THAM CONSONANT SIGN HIGH RA" + + "THA OR LOW PATAI THAM CONSONANT SIGN MATAI THAM CONSONANT SIGN BATAI THA" + + "M CONSONANT SIGN SATAI THAM SIGN SAKOTTAI THAM VOWEL SIGN ATAI THAM VOWE" + + "L SIGN MAI SATTAI THAM VOWEL SIGN AATAI THAM VOWEL SIGN TALL AATAI THAM " + + "VOWEL SIGN ITAI THAM VOWEL SIGN IITAI THAM VOWEL SIGN UETAI THAM VOWEL S" + + "IGN UUETAI THAM VOWEL SIGN UTAI THAM VOWEL SIGN UUTAI THAM VOWEL SIGN OT" + + "AI THAM VOWEL SIGN OA BELOWTAI THAM VOWEL SIGN OYTAI THAM VOWEL SIGN ETA" + + "I THAM VOWEL SIGN AETAI THAM VOWEL SIGN OOTAI THAM VOWEL SIGN AITAI THAM" + + " VOWEL SIGN THAM AITAI THAM VOWEL SIGN OA ABOVETAI THAM SIGN MAI KANGTAI" + + " THAM SIGN TONE-1TAI THAM SIGN TONE-2TAI THAM SIGN KHUEN TONE-3TAI THAM " + + "SIGN KHUEN TONE-4TAI THAM SIGN KHUEN TONE-5TAI THAM SIGN RA HAAMTAI THAM" + + " SIGN MAI SAMTAI THAM SIGN KHUEN-LUE KARANTAI THAM COMBINING CRYPTOGRAMM" + + "IC DOTTAI THAM HORA DIGIT ZEROTAI THAM HORA DIGIT ONETAI THAM HORA DIGIT" + + " TWOTAI THAM HORA DIGIT THREETAI THAM HORA DIGIT FOURTAI THAM HORA DIGIT" + + " FIVETAI THAM HORA DIGIT SIXTAI THAM HORA DIGIT SEVENTAI THAM HORA DIGIT" + + " EIGHTTAI THAM HORA DIGIT NINETAI THAM THAM DIGIT ZEROTAI THAM THAM DIGI" + + "T ONETAI THAM THAM DIGIT TWOTAI THAM THAM DIGIT THREETAI THAM THAM DIGIT" + + " FOURTAI THAM THAM DIGIT FIVETAI THAM THAM DIGIT SIXTAI THAM THAM DIGIT " + + "SEVENTAI THAM THAM DIGIT EIGHTTAI THAM THAM DIGIT NINETAI THAM SIGN WIAN" + + "GTAI THAM SIGN WIANGWAAKTAI THAM SIGN SAWANTAI THAM SIGN KEOWTAI THAM SI" + + "GN HOYTAI THAM SIGN DOKMAITAI THAM SIGN REVERSED ROTATED RANATAI THAM SI" + + "GN MAI YAMOKTAI THAM SIGN KAANTAI THAM SIGN KAANKUUTAI THAM SIGN SATKAAN" + + "TAI THAM SIGN SATKAANKUUTAI THAM SIGN HANGTAI THAM SIGN CAANGCOMBINING D" + + "OUBLED CIRCUMFLEX ACCENTCOMBINING DIAERESIS-RINGCOMBINING INFINITYCOMBIN" + + "ING DOWNWARDS ARROWCOMBINING TRIPLE DOTCOMBINING X-X BELOWCOMBINING WIGG" + + "LY LINE BELOWCOMBINING OPEN MARK BELOWCOMBINING DOUBLE OPEN MARK BELOWCO" + + "MBINING LIGHT CENTRALIZATION STROKE BELOWCOMBINING STRONG CENTRALIZATION" + + " STROKE BELOWCOMBINING PARENTHESES ABOVECOMBINING DOUBLE PARENTHESES ABO" + + "VECOMBINING PARENTHESES BELOWCOMBINING PARENTHESES OVERLAYBALINESE SIGN ") + ("" + + "ULU RICEMBALINESE SIGN ULU CANDRABALINESE SIGN CECEKBALINESE SIGN SURANG" + + "BALINESE SIGN BISAHBALINESE LETTER AKARABALINESE LETTER AKARA TEDUNGBALI" + + "NESE LETTER IKARABALINESE LETTER IKARA TEDUNGBALINESE LETTER UKARABALINE" + + "SE LETTER UKARA TEDUNGBALINESE LETTER RA REPABALINESE LETTER RA REPA TED" + + "UNGBALINESE LETTER LA LENGABALINESE LETTER LA LENGA TEDUNGBALINESE LETTE" + + "R EKARABALINESE LETTER AIKARABALINESE LETTER OKARABALINESE LETTER OKARA " + + "TEDUNGBALINESE LETTER KABALINESE LETTER KA MAHAPRANABALINESE LETTER GABA" + + "LINESE LETTER GA GORABALINESE LETTER NGABALINESE LETTER CABALINESE LETTE" + + "R CA LACABALINESE LETTER JABALINESE LETTER JA JERABALINESE LETTER NYABAL" + + "INESE LETTER TA LATIKBALINESE LETTER TA MURDA MAHAPRANABALINESE LETTER D" + + "A MURDA ALPAPRANABALINESE LETTER DA MURDA MAHAPRANABALINESE LETTER NA RA" + + "MBATBALINESE LETTER TABALINESE LETTER TA TAWABALINESE LETTER DABALINESE " + + "LETTER DA MADUBALINESE LETTER NABALINESE LETTER PABALINESE LETTER PA KAP" + + "ALBALINESE LETTER BABALINESE LETTER BA KEMBANGBALINESE LETTER MABALINESE" + + " LETTER YABALINESE LETTER RABALINESE LETTER LABALINESE LETTER WABALINESE" + + " LETTER SA SAGABALINESE LETTER SA SAPABALINESE LETTER SABALINESE LETTER " + + "HABALINESE SIGN REREKANBALINESE VOWEL SIGN TEDUNGBALINESE VOWEL SIGN ULU" + + "BALINESE VOWEL SIGN ULU SARIBALINESE VOWEL SIGN SUKUBALINESE VOWEL SIGN " + + "SUKU ILUTBALINESE VOWEL SIGN RA REPABALINESE VOWEL SIGN RA REPA TEDUNGBA" + + "LINESE VOWEL SIGN LA LENGABALINESE VOWEL SIGN LA LENGA TEDUNGBALINESE VO" + + "WEL SIGN TALINGBALINESE VOWEL SIGN TALING REPABALINESE VOWEL SIGN TALING" + + " TEDUNGBALINESE VOWEL SIGN TALING REPA TEDUNGBALINESE VOWEL SIGN PEPETBA" + + "LINESE VOWEL SIGN PEPET TEDUNGBALINESE ADEG ADEGBALINESE LETTER KAF SASA" + + "KBALINESE LETTER KHOT SASAKBALINESE LETTER TZIR SASAKBALINESE LETTER EF " + + "SASAKBALINESE LETTER VE SASAKBALINESE LETTER ZAL SASAKBALINESE LETTER AS" + + "YURA SASAKBALINESE DIGIT ZEROBALINESE DIGIT ONEBALINESE DIGIT TWOBALINES" + + "E DIGIT THREEBALINESE DIGIT FOURBALINESE DIGIT FIVEBALINESE DIGIT SIXBAL" + + "INESE DIGIT SEVENBALINESE DIGIT EIGHTBALINESE DIGIT NINEBALINESE PANTIBA" + + "LINESE PAMADABALINESE WINDUBALINESE CARIK PAMUNGKAHBALINESE CARIK SIKIBA" + + "LINESE CARIK PARERENBALINESE PAMENENGBALINESE MUSICAL SYMBOL DONGBALINES" + + "E MUSICAL SYMBOL DENGBALINESE MUSICAL SYMBOL DUNGBALINESE MUSICAL SYMBOL" + + " DANGBALINESE MUSICAL SYMBOL DANG SURANGBALINESE MUSICAL SYMBOL DINGBALI" + + "NESE MUSICAL SYMBOL DAENGBALINESE MUSICAL SYMBOL DEUNGBALINESE MUSICAL S" + + "YMBOL DAINGBALINESE MUSICAL SYMBOL DANG GEDEBALINESE MUSICAL SYMBOL COMB" + + "INING TEGEHBALINESE MUSICAL SYMBOL COMBINING ENDEPBALINESE MUSICAL SYMBO" + + "L COMBINING KEMPULBALINESE MUSICAL SYMBOL COMBINING KEMPLIBALINESE MUSIC" + + "AL SYMBOL COMBINING JEGOGANBALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH" + + " JEGOGANBALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGANBALINESE MU" + + "SICAL SYMBOL COMBINING BENDEBALINESE MUSICAL SYMBOL COMBINING GONGBALINE" + + "SE MUSICAL SYMBOL RIGHT-HAND OPEN DUGBALINESE MUSICAL SYMBOL RIGHT-HAND " + + "OPEN DAGBALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUKBALINESE MUSICAL SY" + + "MBOL RIGHT-HAND CLOSED TAKBALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANGBAL" + + "INESE MUSICAL SYMBOL LEFT-HAND OPEN PUNGBALINESE MUSICAL SYMBOL LEFT-HAN" + + "D CLOSED PLAKBALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUKBALINESE MUSIC" + + "AL SYMBOL LEFT-HAND OPEN PINGSUNDANESE SIGN PANYECEKSUNDANESE SIGN PANGL" + + "AYARSUNDANESE SIGN PANGWISADSUNDANESE LETTER ASUNDANESE LETTER ISUNDANES" + + "E LETTER USUNDANESE LETTER AESUNDANESE LETTER OSUNDANESE LETTER ESUNDANE" + + "SE LETTER EUSUNDANESE LETTER KASUNDANESE LETTER QASUNDANESE LETTER GASUN" + + "DANESE LETTER NGASUNDANESE LETTER CASUNDANESE LETTER JASUNDANESE LETTER " + + "ZASUNDANESE LETTER NYASUNDANESE LETTER TASUNDANESE LETTER DASUNDANESE LE" + + "TTER NASUNDANESE LETTER PASUNDANESE LETTER FASUNDANESE LETTER VASUNDANES" + + "E LETTER BASUNDANESE LETTER MASUNDANESE LETTER YASUNDANESE LETTER RASUND" + + "ANESE LETTER LASUNDANESE LETTER WASUNDANESE LETTER SASUNDANESE LETTER XA" + + "SUNDANESE LETTER HASUNDANESE CONSONANT SIGN PAMINGKALSUNDANESE CONSONANT" + + " SIGN PANYAKRASUNDANESE CONSONANT SIGN PANYIKUSUNDANESE VOWEL SIGN PANGH" + + "ULUSUNDANESE VOWEL SIGN PANYUKUSUNDANESE VOWEL SIGN PANAELAENGSUNDANESE " + + "VOWEL SIGN PANOLONGSUNDANESE VOWEL SIGN PAMEPETSUNDANESE VOWEL SIGN PANE" + + "ULEUNGSUNDANESE SIGN PAMAAEHSUNDANESE SIGN VIRAMASUNDANESE CONSONANT SIG" + + "N PASANGAN MASUNDANESE CONSONANT SIGN PASANGAN WASUNDANESE LETTER KHASUN" + + "DANESE LETTER SYASUNDANESE DIGIT ZEROSUNDANESE DIGIT ONESUNDANESE DIGIT " + + "TWOSUNDANESE DIGIT THREESUNDANESE DIGIT FOURSUNDANESE DIGIT FIVESUNDANES" + + "E DIGIT SIXSUNDANESE DIGIT SEVENSUNDANESE DIGIT EIGHTSUNDANESE DIGIT NIN" + + "ESUNDANESE AVAGRAHASUNDANESE LETTER REUSUNDANESE LETTER LEUSUNDANESE LET" + + "TER BHASUNDANESE LETTER FINAL KSUNDANESE LETTER FINAL MBATAK LETTER ABAT") + ("" + + "AK LETTER SIMALUNGUN ABATAK LETTER HABATAK LETTER SIMALUNGUN HABATAK LET" + + "TER MANDAILING HABATAK LETTER BABATAK LETTER KARO BABATAK LETTER PABATAK" + + " LETTER SIMALUNGUN PABATAK LETTER NABATAK LETTER MANDAILING NABATAK LETT" + + "ER WABATAK LETTER SIMALUNGUN WABATAK LETTER PAKPAK WABATAK LETTER GABATA" + + "K LETTER SIMALUNGUN GABATAK LETTER JABATAK LETTER DABATAK LETTER RABATAK" + + " LETTER SIMALUNGUN RABATAK LETTER MABATAK LETTER SIMALUNGUN MABATAK LETT" + + "ER SOUTHERN TABATAK LETTER NORTHERN TABATAK LETTER SABATAK LETTER SIMALU" + + "NGUN SABATAK LETTER MANDAILING SABATAK LETTER YABATAK LETTER SIMALUNGUN " + + "YABATAK LETTER NGABATAK LETTER LABATAK LETTER SIMALUNGUN LABATAK LETTER " + + "NYABATAK LETTER CABATAK LETTER NDABATAK LETTER MBABATAK LETTER IBATAK LE" + + "TTER UBATAK SIGN TOMPIBATAK VOWEL SIGN EBATAK VOWEL SIGN PAKPAK EBATAK V" + + "OWEL SIGN EEBATAK VOWEL SIGN IBATAK VOWEL SIGN KARO IBATAK VOWEL SIGN OB" + + "ATAK VOWEL SIGN KARO OBATAK VOWEL SIGN UBATAK VOWEL SIGN U FOR SIMALUNGU" + + "N SABATAK CONSONANT SIGN NGBATAK CONSONANT SIGN HBATAK PANGOLATBATAK PAN" + + "ONGONANBATAK SYMBOL BINDU NA METEKBATAK SYMBOL BINDU PINARBORASBATAK SYM" + + "BOL BINDU JUDULBATAK SYMBOL BINDU PANGOLATLEPCHA LETTER KALEPCHA LETTER " + + "KLALEPCHA LETTER KHALEPCHA LETTER GALEPCHA LETTER GLALEPCHA LETTER NGALE" + + "PCHA LETTER CALEPCHA LETTER CHALEPCHA LETTER JALEPCHA LETTER NYALEPCHA L" + + "ETTER TALEPCHA LETTER THALEPCHA LETTER DALEPCHA LETTER NALEPCHA LETTER P" + + "ALEPCHA LETTER PLALEPCHA LETTER PHALEPCHA LETTER FALEPCHA LETTER FLALEPC" + + "HA LETTER BALEPCHA LETTER BLALEPCHA LETTER MALEPCHA LETTER MLALEPCHA LET" + + "TER TSALEPCHA LETTER TSHALEPCHA LETTER DZALEPCHA LETTER YALEPCHA LETTER " + + "RALEPCHA LETTER LALEPCHA LETTER HALEPCHA LETTER HLALEPCHA LETTER VALEPCH" + + "A LETTER SALEPCHA LETTER SHALEPCHA LETTER WALEPCHA LETTER ALEPCHA SUBJOI" + + "NED LETTER YALEPCHA SUBJOINED LETTER RALEPCHA VOWEL SIGN AALEPCHA VOWEL " + + "SIGN ILEPCHA VOWEL SIGN OLEPCHA VOWEL SIGN OOLEPCHA VOWEL SIGN ULEPCHA V" + + "OWEL SIGN UULEPCHA VOWEL SIGN ELEPCHA CONSONANT SIGN KLEPCHA CONSONANT S" + + "IGN MLEPCHA CONSONANT SIGN LLEPCHA CONSONANT SIGN NLEPCHA CONSONANT SIGN" + + " PLEPCHA CONSONANT SIGN RLEPCHA CONSONANT SIGN TLEPCHA CONSONANT SIGN NY" + + "IN-DOLEPCHA CONSONANT SIGN KANGLEPCHA SIGN RANLEPCHA SIGN NUKTALEPCHA PU" + + "NCTUATION TA-ROLLEPCHA PUNCTUATION NYET THYOOM TA-ROLLEPCHA PUNCTUATION " + + "CER-WALEPCHA PUNCTUATION TSHOOK CER-WALEPCHA PUNCTUATION TSHOOKLEPCHA DI" + + "GIT ZEROLEPCHA DIGIT ONELEPCHA DIGIT TWOLEPCHA DIGIT THREELEPCHA DIGIT F" + + "OURLEPCHA DIGIT FIVELEPCHA DIGIT SIXLEPCHA DIGIT SEVENLEPCHA DIGIT EIGHT" + + "LEPCHA DIGIT NINELEPCHA LETTER TTALEPCHA LETTER TTHALEPCHA LETTER DDAOL " + + "CHIKI DIGIT ZEROOL CHIKI DIGIT ONEOL CHIKI DIGIT TWOOL CHIKI DIGIT THREE" + + "OL CHIKI DIGIT FOUROL CHIKI DIGIT FIVEOL CHIKI DIGIT SIXOL CHIKI DIGIT S" + + "EVENOL CHIKI DIGIT EIGHTOL CHIKI DIGIT NINEOL CHIKI LETTER LAOL CHIKI LE" + + "TTER ATOL CHIKI LETTER AGOL CHIKI LETTER ANGOL CHIKI LETTER ALOL CHIKI L" + + "ETTER LAAOL CHIKI LETTER AAKOL CHIKI LETTER AAJOL CHIKI LETTER AAMOL CHI" + + "KI LETTER AAWOL CHIKI LETTER LIOL CHIKI LETTER ISOL CHIKI LETTER IHOL CH" + + "IKI LETTER INYOL CHIKI LETTER IROL CHIKI LETTER LUOL CHIKI LETTER UCOL C" + + "HIKI LETTER UDOL CHIKI LETTER UNNOL CHIKI LETTER UYOL CHIKI LETTER LEOL " + + "CHIKI LETTER EPOL CHIKI LETTER EDDOL CHIKI LETTER ENOL CHIKI LETTER ERRO" + + "L CHIKI LETTER LOOL CHIKI LETTER OTTOL CHIKI LETTER OBOL CHIKI LETTER OV" + + "OL CHIKI LETTER OHOL CHIKI MU TTUDDAGOL CHIKI GAAHLAA TTUDDAAGOL CHIKI M" + + "U-GAAHLAA TTUDDAAGOL CHIKI RELAAOL CHIKI PHAARKAAOL CHIKI AHADOL CHIKI P" + + "UNCTUATION MUCAADOL CHIKI PUNCTUATION DOUBLE MUCAADCYRILLIC SMALL LETTER" + + " ROUNDED VECYRILLIC SMALL LETTER LONG-LEGGED DECYRILLIC SMALL LETTER NAR" + + "ROW OCYRILLIC SMALL LETTER WIDE ESCYRILLIC SMALL LETTER TALL TECYRILLIC " + + "SMALL LETTER THREE-LEGGED TECYRILLIC SMALL LETTER TALL HARD SIGNCYRILLIC" + + " SMALL LETTER TALL YATCYRILLIC SMALL LETTER UNBLENDED UKSUNDANESE PUNCTU" + + "ATION BINDU SURYASUNDANESE PUNCTUATION BINDU PANGLONGSUNDANESE PUNCTUATI" + + "ON BINDU PURNAMASUNDANESE PUNCTUATION BINDU CAKRASUNDANESE PUNCTUATION B" + + "INDU LEU SATANGASUNDANESE PUNCTUATION BINDU KA SATANGASUNDANESE PUNCTUAT" + + "ION BINDU DA SATANGASUNDANESE PUNCTUATION BINDU BA SATANGAVEDIC TONE KAR" + + "SHANAVEDIC TONE SHARAVEDIC TONE PRENKHAVEDIC SIGN NIHSHVASAVEDIC SIGN YA" + + "JURVEDIC MIDLINE SVARITAVEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVA" + + "RITAVEDIC TONE YAJURVEDIC INDEPENDENT SVARITAVEDIC TONE YAJURVEDIC KATHA" + + "KA INDEPENDENT SVARITAVEDIC TONE CANDRA BELOWVEDIC TONE YAJURVEDIC KATHA" + + "KA INDEPENDENT SVARITA SCHROEDERVEDIC TONE DOUBLE SVARITAVEDIC TONE TRIP" + + "LE SVARITAVEDIC TONE KATHAKA ANUDATTAVEDIC TONE DOT BELOWVEDIC TONE TWO " + + "DOTS BELOWVEDIC TONE THREE DOTS BELOWVEDIC TONE RIGVEDIC KASHMIRI INDEPE" + + "NDENT SVARITAVEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITAVEDIC SIGN VISAR") + ("" + + "GA SVARITAVEDIC SIGN VISARGA UDATTAVEDIC SIGN REVERSED VISARGA UDATTAVED" + + "IC SIGN VISARGA ANUDATTAVEDIC SIGN REVERSED VISARGA ANUDATTAVEDIC SIGN V" + + "ISARGA UDATTA WITH TAILVEDIC SIGN VISARGA ANUDATTA WITH TAILVEDIC SIGN A" + + "NUSVARA ANTARGOMUKHAVEDIC SIGN ANUSVARA BAHIRGOMUKHAVEDIC SIGN ANUSVARA " + + "VAMAGOMUKHAVEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAILVEDIC SIGN TIRYAKVED" + + "IC SIGN HEXIFORM LONG ANUSVARAVEDIC SIGN LONG ANUSVARAVEDIC SIGN RTHANG " + + "LONG ANUSVARAVEDIC SIGN ANUSVARA UBHAYATO MUKHAVEDIC SIGN ARDHAVISARGAVE" + + "DIC SIGN ROTATED ARDHAVISARGAVEDIC TONE CANDRA ABOVEVEDIC SIGN JIHVAMULI" + + "YAVEDIC SIGN UPADHMANIYAVEDIC SIGN ATIKRAMAVEDIC TONE RING ABOVEVEDIC TO" + + "NE DOUBLE RING ABOVELATIN LETTER SMALL CAPITAL ALATIN LETTER SMALL CAPIT" + + "AL AELATIN SMALL LETTER TURNED AELATIN LETTER SMALL CAPITAL BARRED BLATI" + + "N LETTER SMALL CAPITAL CLATIN LETTER SMALL CAPITAL DLATIN LETTER SMALL C" + + "APITAL ETHLATIN LETTER SMALL CAPITAL ELATIN SMALL LETTER TURNED OPEN ELA" + + "TIN SMALL LETTER TURNED ILATIN LETTER SMALL CAPITAL JLATIN LETTER SMALL " + + "CAPITAL KLATIN LETTER SMALL CAPITAL L WITH STROKELATIN LETTER SMALL CAPI" + + "TAL MLATIN LETTER SMALL CAPITAL REVERSED NLATIN LETTER SMALL CAPITAL OLA" + + "TIN LETTER SMALL CAPITAL OPEN OLATIN SMALL LETTER SIDEWAYS OLATIN SMALL " + + "LETTER SIDEWAYS OPEN OLATIN SMALL LETTER SIDEWAYS O WITH STROKELATIN SMA" + + "LL LETTER TURNED OELATIN LETTER SMALL CAPITAL OULATIN SMALL LETTER TOP H" + + "ALF OLATIN SMALL LETTER BOTTOM HALF OLATIN LETTER SMALL CAPITAL PLATIN L" + + "ETTER SMALL CAPITAL REVERSED RLATIN LETTER SMALL CAPITAL TURNED RLATIN L" + + "ETTER SMALL CAPITAL TLATIN LETTER SMALL CAPITAL ULATIN SMALL LETTER SIDE" + + "WAYS ULATIN SMALL LETTER SIDEWAYS DIAERESIZED ULATIN SMALL LETTER SIDEWA" + + "YS TURNED MLATIN LETTER SMALL CAPITAL VLATIN LETTER SMALL CAPITAL WLATIN" + + " LETTER SMALL CAPITAL ZLATIN LETTER SMALL CAPITAL EZHLATIN LETTER VOICED" + + " LARYNGEAL SPIRANTLATIN LETTER AINGREEK LETTER SMALL CAPITAL GAMMAGREEK " + + "LETTER SMALL CAPITAL LAMDAGREEK LETTER SMALL CAPITAL PIGREEK LETTER SMAL" + + "L CAPITAL RHOGREEK LETTER SMALL CAPITAL PSICYRILLIC LETTER SMALL CAPITAL" + + " ELMODIFIER LETTER CAPITAL AMODIFIER LETTER CAPITAL AEMODIFIER LETTER CA" + + "PITAL BMODIFIER LETTER CAPITAL BARRED BMODIFIER LETTER CAPITAL DMODIFIER" + + " LETTER CAPITAL EMODIFIER LETTER CAPITAL REVERSED EMODIFIER LETTER CAPIT" + + "AL GMODIFIER LETTER CAPITAL HMODIFIER LETTER CAPITAL IMODIFIER LETTER CA" + + "PITAL JMODIFIER LETTER CAPITAL KMODIFIER LETTER CAPITAL LMODIFIER LETTER" + + " CAPITAL MMODIFIER LETTER CAPITAL NMODIFIER LETTER CAPITAL REVERSED NMOD" + + "IFIER LETTER CAPITAL OMODIFIER LETTER CAPITAL OUMODIFIER LETTER CAPITAL " + + "PMODIFIER LETTER CAPITAL RMODIFIER LETTER CAPITAL TMODIFIER LETTER CAPIT" + + "AL UMODIFIER LETTER CAPITAL WMODIFIER LETTER SMALL AMODIFIER LETTER SMAL" + + "L TURNED AMODIFIER LETTER SMALL ALPHAMODIFIER LETTER SMALL TURNED AEMODI" + + "FIER LETTER SMALL BMODIFIER LETTER SMALL DMODIFIER LETTER SMALL EMODIFIE" + + "R LETTER SMALL SCHWAMODIFIER LETTER SMALL OPEN EMODIFIER LETTER SMALL TU" + + "RNED OPEN EMODIFIER LETTER SMALL GMODIFIER LETTER SMALL TURNED IMODIFIER" + + " LETTER SMALL KMODIFIER LETTER SMALL MMODIFIER LETTER SMALL ENGMODIFIER " + + "LETTER SMALL OMODIFIER LETTER SMALL OPEN OMODIFIER LETTER SMALL TOP HALF" + + " OMODIFIER LETTER SMALL BOTTOM HALF OMODIFIER LETTER SMALL PMODIFIER LET" + + "TER SMALL TMODIFIER LETTER SMALL UMODIFIER LETTER SMALL SIDEWAYS UMODIFI" + + "ER LETTER SMALL TURNED MMODIFIER LETTER SMALL VMODIFIER LETTER SMALL AIN" + + "MODIFIER LETTER SMALL BETAMODIFIER LETTER SMALL GREEK GAMMAMODIFIER LETT" + + "ER SMALL DELTAMODIFIER LETTER SMALL GREEK PHIMODIFIER LETTER SMALL CHILA" + + "TIN SUBSCRIPT SMALL LETTER ILATIN SUBSCRIPT SMALL LETTER RLATIN SUBSCRIP" + + "T SMALL LETTER ULATIN SUBSCRIPT SMALL LETTER VGREEK SUBSCRIPT SMALL LETT" + + "ER BETAGREEK SUBSCRIPT SMALL LETTER GAMMAGREEK SUBSCRIPT SMALL LETTER RH" + + "OGREEK SUBSCRIPT SMALL LETTER PHIGREEK SUBSCRIPT SMALL LETTER CHILATIN S" + + "MALL LETTER UELATIN SMALL LETTER B WITH MIDDLE TILDELATIN SMALL LETTER D" + + " WITH MIDDLE TILDELATIN SMALL LETTER F WITH MIDDLE TILDELATIN SMALL LETT" + + "ER M WITH MIDDLE TILDELATIN SMALL LETTER N WITH MIDDLE TILDELATIN SMALL " + + "LETTER P WITH MIDDLE TILDELATIN SMALL LETTER R WITH MIDDLE TILDELATIN SM" + + "ALL LETTER R WITH FISHHOOK AND MIDDLE TILDELATIN SMALL LETTER S WITH MID" + + "DLE TILDELATIN SMALL LETTER T WITH MIDDLE TILDELATIN SMALL LETTER Z WITH" + + " MIDDLE TILDELATIN SMALL LETTER TURNED GMODIFIER LETTER CYRILLIC ENLATIN" + + " SMALL LETTER INSULAR GLATIN SMALL LETTER TH WITH STRIKETHROUGHLATIN SMA" + + "LL CAPITAL LETTER I WITH STROKELATIN SMALL LETTER IOTA WITH STROKELATIN " + + "SMALL LETTER P WITH STROKELATIN SMALL CAPITAL LETTER U WITH STROKELATIN " + + "SMALL LETTER UPSILON WITH STROKELATIN SMALL LETTER B WITH PALATAL HOOKLA" + + "TIN SMALL LETTER D WITH PALATAL HOOKLATIN SMALL LETTER F WITH PALATAL HO") + ("" + + "OKLATIN SMALL LETTER G WITH PALATAL HOOKLATIN SMALL LETTER K WITH PALATA" + + "L HOOKLATIN SMALL LETTER L WITH PALATAL HOOKLATIN SMALL LETTER M WITH PA" + + "LATAL HOOKLATIN SMALL LETTER N WITH PALATAL HOOKLATIN SMALL LETTER P WIT" + + "H PALATAL HOOKLATIN SMALL LETTER R WITH PALATAL HOOKLATIN SMALL LETTER S" + + " WITH PALATAL HOOKLATIN SMALL LETTER ESH WITH PALATAL HOOKLATIN SMALL LE" + + "TTER V WITH PALATAL HOOKLATIN SMALL LETTER X WITH PALATAL HOOKLATIN SMAL" + + "L LETTER Z WITH PALATAL HOOKLATIN SMALL LETTER A WITH RETROFLEX HOOKLATI" + + "N SMALL LETTER ALPHA WITH RETROFLEX HOOKLATIN SMALL LETTER D WITH HOOK A" + + "ND TAILLATIN SMALL LETTER E WITH RETROFLEX HOOKLATIN SMALL LETTER OPEN E" + + " WITH RETROFLEX HOOKLATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HO" + + "OKLATIN SMALL LETTER SCHWA WITH RETROFLEX HOOKLATIN SMALL LETTER I WITH " + + "RETROFLEX HOOKLATIN SMALL LETTER OPEN O WITH RETROFLEX HOOKLATIN SMALL L" + + "ETTER ESH WITH RETROFLEX HOOKLATIN SMALL LETTER U WITH RETROFLEX HOOKLAT" + + "IN SMALL LETTER EZH WITH RETROFLEX HOOKMODIFIER LETTER SMALL TURNED ALPH" + + "AMODIFIER LETTER SMALL CMODIFIER LETTER SMALL C WITH CURLMODIFIER LETTER" + + " SMALL ETHMODIFIER LETTER SMALL REVERSED OPEN EMODIFIER LETTER SMALL FMO" + + "DIFIER LETTER SMALL DOTLESS J WITH STROKEMODIFIER LETTER SMALL SCRIPT GM" + + "ODIFIER LETTER SMALL TURNED HMODIFIER LETTER SMALL I WITH STROKEMODIFIER" + + " LETTER SMALL IOTAMODIFIER LETTER SMALL CAPITAL IMODIFIER LETTER SMALL C" + + "APITAL I WITH STROKEMODIFIER LETTER SMALL J WITH CROSSED-TAILMODIFIER LE" + + "TTER SMALL L WITH RETROFLEX HOOKMODIFIER LETTER SMALL L WITH PALATAL HOO" + + "KMODIFIER LETTER SMALL CAPITAL LMODIFIER LETTER SMALL M WITH HOOKMODIFIE" + + "R LETTER SMALL TURNED M WITH LONG LEGMODIFIER LETTER SMALL N WITH LEFT H" + + "OOKMODIFIER LETTER SMALL N WITH RETROFLEX HOOKMODIFIER LETTER SMALL CAPI" + + "TAL NMODIFIER LETTER SMALL BARRED OMODIFIER LETTER SMALL PHIMODIFIER LET" + + "TER SMALL S WITH HOOKMODIFIER LETTER SMALL ESHMODIFIER LETTER SMALL T WI" + + "TH PALATAL HOOKMODIFIER LETTER SMALL U BARMODIFIER LETTER SMALL UPSILONM" + + "ODIFIER LETTER SMALL CAPITAL UMODIFIER LETTER SMALL V WITH HOOKMODIFIER " + + "LETTER SMALL TURNED VMODIFIER LETTER SMALL ZMODIFIER LETTER SMALL Z WITH" + + " RETROFLEX HOOKMODIFIER LETTER SMALL Z WITH CURLMODIFIER LETTER SMALL EZ" + + "HMODIFIER LETTER SMALL THETACOMBINING DOTTED GRAVE ACCENTCOMBINING DOTTE" + + "D ACUTE ACCENTCOMBINING SNAKE BELOWCOMBINING SUSPENSION MARKCOMBINING MA" + + "CRON-ACUTECOMBINING GRAVE-MACRONCOMBINING MACRON-GRAVECOMBINING ACUTE-MA" + + "CRONCOMBINING GRAVE-ACUTE-GRAVECOMBINING ACUTE-GRAVE-ACUTECOMBINING LATI" + + "N SMALL LETTER R BELOWCOMBINING BREVE-MACRONCOMBINING MACRON-BREVECOMBIN" + + "ING DOUBLE CIRCUMFLEX ABOVECOMBINING OGONEK ABOVECOMBINING ZIGZAG BELOWC" + + "OMBINING IS BELOWCOMBINING UR ABOVECOMBINING US ABOVECOMBINING LATIN SMA" + + "LL LETTER FLATTENED OPEN A ABOVECOMBINING LATIN SMALL LETTER AECOMBINING" + + " LATIN SMALL LETTER AOCOMBINING LATIN SMALL LETTER AVCOMBINING LATIN SMA" + + "LL LETTER C CEDILLACOMBINING LATIN SMALL LETTER INSULAR DCOMBINING LATIN" + + " SMALL LETTER ETHCOMBINING LATIN SMALL LETTER GCOMBINING LATIN LETTER SM" + + "ALL CAPITAL GCOMBINING LATIN SMALL LETTER KCOMBINING LATIN SMALL LETTER " + + "LCOMBINING LATIN LETTER SMALL CAPITAL LCOMBINING LATIN LETTER SMALL CAPI" + + "TAL MCOMBINING LATIN SMALL LETTER NCOMBINING LATIN LETTER SMALL CAPITAL " + + "NCOMBINING LATIN LETTER SMALL CAPITAL RCOMBINING LATIN SMALL LETTER R RO" + + "TUNDACOMBINING LATIN SMALL LETTER SCOMBINING LATIN SMALL LETTER LONG SCO" + + "MBINING LATIN SMALL LETTER ZCOMBINING LATIN SMALL LETTER ALPHACOMBINING " + + "LATIN SMALL LETTER BCOMBINING LATIN SMALL LETTER BETACOMBINING LATIN SMA" + + "LL LETTER SCHWACOMBINING LATIN SMALL LETTER FCOMBINING LATIN SMALL LETTE" + + "R L WITH DOUBLE MIDDLE TILDECOMBINING LATIN SMALL LETTER O WITH LIGHT CE" + + "NTRALIZATION STROKECOMBINING LATIN SMALL LETTER PCOMBINING LATIN SMALL L" + + "ETTER ESHCOMBINING LATIN SMALL LETTER U WITH LIGHT CENTRALIZATION STROKE" + + "COMBINING LATIN SMALL LETTER WCOMBINING LATIN SMALL LETTER A WITH DIAERE" + + "SISCOMBINING LATIN SMALL LETTER O WITH DIAERESISCOMBINING LATIN SMALL LE" + + "TTER U WITH DIAERESISCOMBINING UP TACK ABOVECOMBINING KAVYKA ABOVE RIGHT" + + "COMBINING KAVYKA ABOVE LEFTCOMBINING DOT ABOVE LEFTCOMBINING WIDE INVERT" + + "ED BRIDGE BELOWCOMBINING DELETION MARKCOMBINING DOUBLE INVERTED BREVE BE" + + "LOWCOMBINING ALMOST EQUAL TO BELOWCOMBINING LEFT ARROWHEAD ABOVECOMBININ" + + "G RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOWLATIN CAPITAL LETTER A WITH RI" + + "NG BELOWLATIN SMALL LETTER A WITH RING BELOWLATIN CAPITAL LETTER B WITH " + + "DOT ABOVELATIN SMALL LETTER B WITH DOT ABOVELATIN CAPITAL LETTER B WITH " + + "DOT BELOWLATIN SMALL LETTER B WITH DOT BELOWLATIN CAPITAL LETTER B WITH " + + "LINE BELOWLATIN SMALL LETTER B WITH LINE BELOWLATIN CAPITAL LETTER C WIT" + + "H CEDILLA AND ACUTELATIN SMALL LETTER C WITH CEDILLA AND ACUTELATIN CAPI") + ("" + + "TAL LETTER D WITH DOT ABOVELATIN SMALL LETTER D WITH DOT ABOVELATIN CAPI" + + "TAL LETTER D WITH DOT BELOWLATIN SMALL LETTER D WITH DOT BELOWLATIN CAPI" + + "TAL LETTER D WITH LINE BELOWLATIN SMALL LETTER D WITH LINE BELOWLATIN CA" + + "PITAL LETTER D WITH CEDILLALATIN SMALL LETTER D WITH CEDILLALATIN CAPITA" + + "L LETTER D WITH CIRCUMFLEX BELOWLATIN SMALL LETTER D WITH CIRCUMFLEX BEL" + + "OWLATIN CAPITAL LETTER E WITH MACRON AND GRAVELATIN SMALL LETTER E WITH " + + "MACRON AND GRAVELATIN CAPITAL LETTER E WITH MACRON AND ACUTELATIN SMALL " + + "LETTER E WITH MACRON AND ACUTELATIN CAPITAL LETTER E WITH CIRCUMFLEX BEL" + + "OWLATIN SMALL LETTER E WITH CIRCUMFLEX BELOWLATIN CAPITAL LETTER E WITH " + + "TILDE BELOWLATIN SMALL LETTER E WITH TILDE BELOWLATIN CAPITAL LETTER E W" + + "ITH CEDILLA AND BREVELATIN SMALL LETTER E WITH CEDILLA AND BREVELATIN CA" + + "PITAL LETTER F WITH DOT ABOVELATIN SMALL LETTER F WITH DOT ABOVELATIN CA" + + "PITAL LETTER G WITH MACRONLATIN SMALL LETTER G WITH MACRONLATIN CAPITAL " + + "LETTER H WITH DOT ABOVELATIN SMALL LETTER H WITH DOT ABOVELATIN CAPITAL " + + "LETTER H WITH DOT BELOWLATIN SMALL LETTER H WITH DOT BELOWLATIN CAPITAL " + + "LETTER H WITH DIAERESISLATIN SMALL LETTER H WITH DIAERESISLATIN CAPITAL " + + "LETTER H WITH CEDILLALATIN SMALL LETTER H WITH CEDILLALATIN CAPITAL LETT" + + "ER H WITH BREVE BELOWLATIN SMALL LETTER H WITH BREVE BELOWLATIN CAPITAL " + + "LETTER I WITH TILDE BELOWLATIN SMALL LETTER I WITH TILDE BELOWLATIN CAPI" + + "TAL LETTER I WITH DIAERESIS AND ACUTELATIN SMALL LETTER I WITH DIAERESIS" + + " AND ACUTELATIN CAPITAL LETTER K WITH ACUTELATIN SMALL LETTER K WITH ACU" + + "TELATIN CAPITAL LETTER K WITH DOT BELOWLATIN SMALL LETTER K WITH DOT BEL" + + "OWLATIN CAPITAL LETTER K WITH LINE BELOWLATIN SMALL LETTER K WITH LINE B" + + "ELOWLATIN CAPITAL LETTER L WITH DOT BELOWLATIN SMALL LETTER L WITH DOT B" + + "ELOWLATIN CAPITAL LETTER L WITH DOT BELOW AND MACRONLATIN SMALL LETTER L" + + " WITH DOT BELOW AND MACRONLATIN CAPITAL LETTER L WITH LINE BELOWLATIN SM" + + "ALL LETTER L WITH LINE BELOWLATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW" + + "LATIN SMALL LETTER L WITH CIRCUMFLEX BELOWLATIN CAPITAL LETTER M WITH AC" + + "UTELATIN SMALL LETTER M WITH ACUTELATIN CAPITAL LETTER M WITH DOT ABOVEL" + + "ATIN SMALL LETTER M WITH DOT ABOVELATIN CAPITAL LETTER M WITH DOT BELOWL" + + "ATIN SMALL LETTER M WITH DOT BELOWLATIN CAPITAL LETTER N WITH DOT ABOVEL" + + "ATIN SMALL LETTER N WITH DOT ABOVELATIN CAPITAL LETTER N WITH DOT BELOWL" + + "ATIN SMALL LETTER N WITH DOT BELOWLATIN CAPITAL LETTER N WITH LINE BELOW" + + "LATIN SMALL LETTER N WITH LINE BELOWLATIN CAPITAL LETTER N WITH CIRCUMFL" + + "EX BELOWLATIN SMALL LETTER N WITH CIRCUMFLEX BELOWLATIN CAPITAL LETTER O" + + " WITH TILDE AND ACUTELATIN SMALL LETTER O WITH TILDE AND ACUTELATIN CAPI" + + "TAL LETTER O WITH TILDE AND DIAERESISLATIN SMALL LETTER O WITH TILDE AND" + + " DIAERESISLATIN CAPITAL LETTER O WITH MACRON AND GRAVELATIN SMALL LETTER" + + " O WITH MACRON AND GRAVELATIN CAPITAL LETTER O WITH MACRON AND ACUTELATI" + + "N SMALL LETTER O WITH MACRON AND ACUTELATIN CAPITAL LETTER P WITH ACUTEL" + + "ATIN SMALL LETTER P WITH ACUTELATIN CAPITAL LETTER P WITH DOT ABOVELATIN" + + " SMALL LETTER P WITH DOT ABOVELATIN CAPITAL LETTER R WITH DOT ABOVELATIN" + + " SMALL LETTER R WITH DOT ABOVELATIN CAPITAL LETTER R WITH DOT BELOWLATIN" + + " SMALL LETTER R WITH DOT BELOWLATIN CAPITAL LETTER R WITH DOT BELOW AND " + + "MACRONLATIN SMALL LETTER R WITH DOT BELOW AND MACRONLATIN CAPITAL LETTER" + + " R WITH LINE BELOWLATIN SMALL LETTER R WITH LINE BELOWLATIN CAPITAL LETT" + + "ER S WITH DOT ABOVELATIN SMALL LETTER S WITH DOT ABOVELATIN CAPITAL LETT" + + "ER S WITH DOT BELOWLATIN SMALL LETTER S WITH DOT BELOWLATIN CAPITAL LETT" + + "ER S WITH ACUTE AND DOT ABOVELATIN SMALL LETTER S WITH ACUTE AND DOT ABO" + + "VELATIN CAPITAL LETTER S WITH CARON AND DOT ABOVELATIN SMALL LETTER S WI" + + "TH CARON AND DOT ABOVELATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOV" + + "ELATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVELATIN CAPITAL LETTER T" + + " WITH DOT ABOVELATIN SMALL LETTER T WITH DOT ABOVELATIN CAPITAL LETTER T" + + " WITH DOT BELOWLATIN SMALL LETTER T WITH DOT BELOWLATIN CAPITAL LETTER T" + + " WITH LINE BELOWLATIN SMALL LETTER T WITH LINE BELOWLATIN CAPITAL LETTER" + + " T WITH CIRCUMFLEX BELOWLATIN SMALL LETTER T WITH CIRCUMFLEX BELOWLATIN " + + "CAPITAL LETTER U WITH DIAERESIS BELOWLATIN SMALL LETTER U WITH DIAERESIS" + + " BELOWLATIN CAPITAL LETTER U WITH TILDE BELOWLATIN SMALL LETTER U WITH T" + + "ILDE BELOWLATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOWLATIN SMALL LETTER" + + " U WITH CIRCUMFLEX BELOWLATIN CAPITAL LETTER U WITH TILDE AND ACUTELATIN" + + " SMALL LETTER U WITH TILDE AND ACUTELATIN CAPITAL LETTER U WITH MACRON A" + + "ND DIAERESISLATIN SMALL LETTER U WITH MACRON AND DIAERESISLATIN CAPITAL " + + "LETTER V WITH TILDELATIN SMALL LETTER V WITH TILDELATIN CAPITAL LETTER V" + + " WITH DOT BELOWLATIN SMALL LETTER V WITH DOT BELOWLATIN CAPITAL LETTER W") + ("" + + " WITH GRAVELATIN SMALL LETTER W WITH GRAVELATIN CAPITAL LETTER W WITH AC" + + "UTELATIN SMALL LETTER W WITH ACUTELATIN CAPITAL LETTER W WITH DIAERESISL" + + "ATIN SMALL LETTER W WITH DIAERESISLATIN CAPITAL LETTER W WITH DOT ABOVEL" + + "ATIN SMALL LETTER W WITH DOT ABOVELATIN CAPITAL LETTER W WITH DOT BELOWL" + + "ATIN SMALL LETTER W WITH DOT BELOWLATIN CAPITAL LETTER X WITH DOT ABOVEL" + + "ATIN SMALL LETTER X WITH DOT ABOVELATIN CAPITAL LETTER X WITH DIAERESISL" + + "ATIN SMALL LETTER X WITH DIAERESISLATIN CAPITAL LETTER Y WITH DOT ABOVEL" + + "ATIN SMALL LETTER Y WITH DOT ABOVELATIN CAPITAL LETTER Z WITH CIRCUMFLEX" + + "LATIN SMALL LETTER Z WITH CIRCUMFLEXLATIN CAPITAL LETTER Z WITH DOT BELO" + + "WLATIN SMALL LETTER Z WITH DOT BELOWLATIN CAPITAL LETTER Z WITH LINE BEL" + + "OWLATIN SMALL LETTER Z WITH LINE BELOWLATIN SMALL LETTER H WITH LINE BEL" + + "OWLATIN SMALL LETTER T WITH DIAERESISLATIN SMALL LETTER W WITH RING ABOV" + + "ELATIN SMALL LETTER Y WITH RING ABOVELATIN SMALL LETTER A WITH RIGHT HAL" + + "F RINGLATIN SMALL LETTER LONG S WITH DOT ABOVELATIN SMALL LETTER LONG S " + + "WITH DIAGONAL STROKELATIN SMALL LETTER LONG S WITH HIGH STROKELATIN CAPI" + + "TAL LETTER SHARP SLATIN SMALL LETTER DELTALATIN CAPITAL LETTER A WITH DO" + + "T BELOWLATIN SMALL LETTER A WITH DOT BELOWLATIN CAPITAL LETTER A WITH HO" + + "OK ABOVELATIN SMALL LETTER A WITH HOOK ABOVELATIN CAPITAL LETTER A WITH " + + "CIRCUMFLEX AND ACUTELATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTELATIN " + + "CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVELATIN SMALL LETTER A WITH CIRC" + + "UMFLEX AND GRAVELATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVELAT" + + "IN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVELATIN CAPITAL LETTER A W" + + "ITH CIRCUMFLEX AND TILDELATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDELA" + + "TIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOWLATIN SMALL LETTER A W" + + "ITH CIRCUMFLEX AND DOT BELOWLATIN CAPITAL LETTER A WITH BREVE AND ACUTEL" + + "ATIN SMALL LETTER A WITH BREVE AND ACUTELATIN CAPITAL LETTER A WITH BREV" + + "E AND GRAVELATIN SMALL LETTER A WITH BREVE AND GRAVELATIN CAPITAL LETTER" + + " A WITH BREVE AND HOOK ABOVELATIN SMALL LETTER A WITH BREVE AND HOOK ABO" + + "VELATIN CAPITAL LETTER A WITH BREVE AND TILDELATIN SMALL LETTER A WITH B" + + "REVE AND TILDELATIN CAPITAL LETTER A WITH BREVE AND DOT BELOWLATIN SMALL" + + " LETTER A WITH BREVE AND DOT BELOWLATIN CAPITAL LETTER E WITH DOT BELOWL" + + "ATIN SMALL LETTER E WITH DOT BELOWLATIN CAPITAL LETTER E WITH HOOK ABOVE" + + "LATIN SMALL LETTER E WITH HOOK ABOVELATIN CAPITAL LETTER E WITH TILDELAT" + + "IN SMALL LETTER E WITH TILDELATIN CAPITAL LETTER E WITH CIRCUMFLEX AND A" + + "CUTELATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTELATIN CAPITAL LETTER E" + + " WITH CIRCUMFLEX AND GRAVELATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE" + + "LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVELATIN SMALL LETTER " + + "E WITH CIRCUMFLEX AND HOOK ABOVELATIN CAPITAL LETTER E WITH CIRCUMFLEX A" + + "ND TILDELATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDELATIN CAPITAL LETT" + + "ER E WITH CIRCUMFLEX AND DOT BELOWLATIN SMALL LETTER E WITH CIRCUMFLEX A" + + "ND DOT BELOWLATIN CAPITAL LETTER I WITH HOOK ABOVELATIN SMALL LETTER I W" + + "ITH HOOK ABOVELATIN CAPITAL LETTER I WITH DOT BELOWLATIN SMALL LETTER I " + + "WITH DOT BELOWLATIN CAPITAL LETTER O WITH DOT BELOWLATIN SMALL LETTER O " + + "WITH DOT BELOWLATIN CAPITAL LETTER O WITH HOOK ABOVELATIN SMALL LETTER O" + + " WITH HOOK ABOVELATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTELATIN SM" + + "ALL LETTER O WITH CIRCUMFLEX AND ACUTELATIN CAPITAL LETTER O WITH CIRCUM" + + "FLEX AND GRAVELATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVELATIN CAPITA" + + "L LETTER O WITH CIRCUMFLEX AND HOOK ABOVELATIN SMALL LETTER O WITH CIRCU" + + "MFLEX AND HOOK ABOVELATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDELATI" + + "N SMALL LETTER O WITH CIRCUMFLEX AND TILDELATIN CAPITAL LETTER O WITH CI" + + "RCUMFLEX AND DOT BELOWLATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW" + + "LATIN CAPITAL LETTER O WITH HORN AND ACUTELATIN SMALL LETTER O WITH HORN" + + " AND ACUTELATIN CAPITAL LETTER O WITH HORN AND GRAVELATIN SMALL LETTER O" + + " WITH HORN AND GRAVELATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVELATIN" + + " SMALL LETTER O WITH HORN AND HOOK ABOVELATIN CAPITAL LETTER O WITH HORN" + + " AND TILDELATIN SMALL LETTER O WITH HORN AND TILDELATIN CAPITAL LETTER O" + + " WITH HORN AND DOT BELOWLATIN SMALL LETTER O WITH HORN AND DOT BELOWLATI" + + "N CAPITAL LETTER U WITH DOT BELOWLATIN SMALL LETTER U WITH DOT BELOWLATI" + + "N CAPITAL LETTER U WITH HOOK ABOVELATIN SMALL LETTER U WITH HOOK ABOVELA" + + "TIN CAPITAL LETTER U WITH HORN AND ACUTELATIN SMALL LETTER U WITH HORN A" + + "ND ACUTELATIN CAPITAL LETTER U WITH HORN AND GRAVELATIN SMALL LETTER U W" + + "ITH HORN AND GRAVELATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVELATIN S" + + "MALL LETTER U WITH HORN AND HOOK ABOVELATIN CAPITAL LETTER U WITH HORN A" + + "ND TILDELATIN SMALL LETTER U WITH HORN AND TILDELATIN CAPITAL LETTER U W") + ("" + + "ITH HORN AND DOT BELOWLATIN SMALL LETTER U WITH HORN AND DOT BELOWLATIN " + + "CAPITAL LETTER Y WITH GRAVELATIN SMALL LETTER Y WITH GRAVELATIN CAPITAL " + + "LETTER Y WITH DOT BELOWLATIN SMALL LETTER Y WITH DOT BELOWLATIN CAPITAL " + + "LETTER Y WITH HOOK ABOVELATIN SMALL LETTER Y WITH HOOK ABOVELATIN CAPITA" + + "L LETTER Y WITH TILDELATIN SMALL LETTER Y WITH TILDELATIN CAPITAL LETTER" + + " MIDDLE-WELSH LLLATIN SMALL LETTER MIDDLE-WELSH LLLATIN CAPITAL LETTER M" + + "IDDLE-WELSH VLATIN SMALL LETTER MIDDLE-WELSH VLATIN CAPITAL LETTER Y WIT" + + "H LOOPLATIN SMALL LETTER Y WITH LOOPGREEK SMALL LETTER ALPHA WITH PSILIG" + + "REEK SMALL LETTER ALPHA WITH DASIAGREEK SMALL LETTER ALPHA WITH PSILI AN" + + "D VARIAGREEK SMALL LETTER ALPHA WITH DASIA AND VARIAGREEK SMALL LETTER A" + + "LPHA WITH PSILI AND OXIAGREEK SMALL LETTER ALPHA WITH DASIA AND OXIAGREE" + + "K SMALL LETTER ALPHA WITH PSILI AND PERISPOMENIGREEK SMALL LETTER ALPHA " + + "WITH DASIA AND PERISPOMENIGREEK CAPITAL LETTER ALPHA WITH PSILIGREEK CAP" + + "ITAL LETTER ALPHA WITH DASIAGREEK CAPITAL LETTER ALPHA WITH PSILI AND VA" + + "RIAGREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIAGREEK CAPITAL LETTER A" + + "LPHA WITH PSILI AND OXIAGREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIAGR" + + "EEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENIGREEK CAPITAL LETTER " + + "ALPHA WITH DASIA AND PERISPOMENIGREEK SMALL LETTER EPSILON WITH PSILIGRE" + + "EK SMALL LETTER EPSILON WITH DASIAGREEK SMALL LETTER EPSILON WITH PSILI " + + "AND VARIAGREEK SMALL LETTER EPSILON WITH DASIA AND VARIAGREEK SMALL LETT" + + "ER EPSILON WITH PSILI AND OXIAGREEK SMALL LETTER EPSILON WITH DASIA AND " + + "OXIAGREEK CAPITAL LETTER EPSILON WITH PSILIGREEK CAPITAL LETTER EPSILON " + + "WITH DASIAGREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIAGREEK CAPITAL" + + " LETTER EPSILON WITH DASIA AND VARIAGREEK CAPITAL LETTER EPSILON WITH PS" + + "ILI AND OXIAGREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIAGREEK SMALL " + + "LETTER ETA WITH PSILIGREEK SMALL LETTER ETA WITH DASIAGREEK SMALL LETTER" + + " ETA WITH PSILI AND VARIAGREEK SMALL LETTER ETA WITH DASIA AND VARIAGREE" + + "K SMALL LETTER ETA WITH PSILI AND OXIAGREEK SMALL LETTER ETA WITH DASIA " + + "AND OXIAGREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENIGREEK SMALL LET" + + "TER ETA WITH DASIA AND PERISPOMENIGREEK CAPITAL LETTER ETA WITH PSILIGRE" + + "EK CAPITAL LETTER ETA WITH DASIAGREEK CAPITAL LETTER ETA WITH PSILI AND " + + "VARIAGREEK CAPITAL LETTER ETA WITH DASIA AND VARIAGREEK CAPITAL LETTER E" + + "TA WITH PSILI AND OXIAGREEK CAPITAL LETTER ETA WITH DASIA AND OXIAGREEK " + + "CAPITAL LETTER ETA WITH PSILI AND PERISPOMENIGREEK CAPITAL LETTER ETA WI" + + "TH DASIA AND PERISPOMENIGREEK SMALL LETTER IOTA WITH PSILIGREEK SMALL LE" + + "TTER IOTA WITH DASIAGREEK SMALL LETTER IOTA WITH PSILI AND VARIAGREEK SM" + + "ALL LETTER IOTA WITH DASIA AND VARIAGREEK SMALL LETTER IOTA WITH PSILI A" + + "ND OXIAGREEK SMALL LETTER IOTA WITH DASIA AND OXIAGREEK SMALL LETTER IOT" + + "A WITH PSILI AND PERISPOMENIGREEK SMALL LETTER IOTA WITH DASIA AND PERIS" + + "POMENIGREEK CAPITAL LETTER IOTA WITH PSILIGREEK CAPITAL LETTER IOTA WITH" + + " DASIAGREEK CAPITAL LETTER IOTA WITH PSILI AND VARIAGREEK CAPITAL LETTER" + + " IOTA WITH DASIA AND VARIAGREEK CAPITAL LETTER IOTA WITH PSILI AND OXIAG" + + "REEK CAPITAL LETTER IOTA WITH DASIA AND OXIAGREEK CAPITAL LETTER IOTA WI" + + "TH PSILI AND PERISPOMENIGREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPO" + + "MENIGREEK SMALL LETTER OMICRON WITH PSILIGREEK SMALL LETTER OMICRON WITH" + + " DASIAGREEK SMALL LETTER OMICRON WITH PSILI AND VARIAGREEK SMALL LETTER " + + "OMICRON WITH DASIA AND VARIAGREEK SMALL LETTER OMICRON WITH PSILI AND OX" + + "IAGREEK SMALL LETTER OMICRON WITH DASIA AND OXIAGREEK CAPITAL LETTER OMI" + + "CRON WITH PSILIGREEK CAPITAL LETTER OMICRON WITH DASIAGREEK CAPITAL LETT" + + "ER OMICRON WITH PSILI AND VARIAGREEK CAPITAL LETTER OMICRON WITH DASIA A" + + "ND VARIAGREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIAGREEK CAPITAL LE" + + "TTER OMICRON WITH DASIA AND OXIAGREEK SMALL LETTER UPSILON WITH PSILIGRE" + + "EK SMALL LETTER UPSILON WITH DASIAGREEK SMALL LETTER UPSILON WITH PSILI " + + "AND VARIAGREEK SMALL LETTER UPSILON WITH DASIA AND VARIAGREEK SMALL LETT" + + "ER UPSILON WITH PSILI AND OXIAGREEK SMALL LETTER UPSILON WITH DASIA AND " + + "OXIAGREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENIGREEK SMALL LET" + + "TER UPSILON WITH DASIA AND PERISPOMENIGREEK CAPITAL LETTER UPSILON WITH " + + "DASIAGREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIAGREEK CAPITAL LETT" + + "ER UPSILON WITH DASIA AND OXIAGREEK CAPITAL LETTER UPSILON WITH DASIA AN" + + "D PERISPOMENIGREEK SMALL LETTER OMEGA WITH PSILIGREEK SMALL LETTER OMEGA" + + " WITH DASIAGREEK SMALL LETTER OMEGA WITH PSILI AND VARIAGREEK SMALL LETT" + + "ER OMEGA WITH DASIA AND VARIAGREEK SMALL LETTER OMEGA WITH PSILI AND OXI" + + "AGREEK SMALL LETTER OMEGA WITH DASIA AND OXIAGREEK SMALL LETTER OMEGA WI" + + "TH PSILI AND PERISPOMENIGREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOM") + ("" + + "ENIGREEK CAPITAL LETTER OMEGA WITH PSILIGREEK CAPITAL LETTER OMEGA WITH " + + "DASIAGREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIAGREEK CAPITAL LETTER" + + " OMEGA WITH DASIA AND VARIAGREEK CAPITAL LETTER OMEGA WITH PSILI AND OXI" + + "AGREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIAGREEK CAPITAL LETTER OMEG" + + "A WITH PSILI AND PERISPOMENIGREEK CAPITAL LETTER OMEGA WITH DASIA AND PE" + + "RISPOMENIGREEK SMALL LETTER ALPHA WITH VARIAGREEK SMALL LETTER ALPHA WIT" + + "H OXIAGREEK SMALL LETTER EPSILON WITH VARIAGREEK SMALL LETTER EPSILON WI" + + "TH OXIAGREEK SMALL LETTER ETA WITH VARIAGREEK SMALL LETTER ETA WITH OXIA" + + "GREEK SMALL LETTER IOTA WITH VARIAGREEK SMALL LETTER IOTA WITH OXIAGREEK" + + " SMALL LETTER OMICRON WITH VARIAGREEK SMALL LETTER OMICRON WITH OXIAGREE" + + "K SMALL LETTER UPSILON WITH VARIAGREEK SMALL LETTER UPSILON WITH OXIAGRE" + + "EK SMALL LETTER OMEGA WITH VARIAGREEK SMALL LETTER OMEGA WITH OXIAGREEK " + + "SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENIGREEK SMALL LETTER ALPHA " + + "WITH DASIA AND YPOGEGRAMMENIGREEK SMALL LETTER ALPHA WITH PSILI AND VARI" + + "A AND YPOGEGRAMMENIGREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPO" + + "GEGRAMMENIGREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI" + + "GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENIGREEK SMAL" + + "L LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENIGREEK SMALL L" + + "ETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENIGREEK CAPITAL LE" + + "TTER ALPHA WITH PSILI AND PROSGEGRAMMENIGREEK CAPITAL LETTER ALPHA WITH " + + "DASIA AND PROSGEGRAMMENIGREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA " + + "AND PROSGEGRAMMENIGREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PR" + + "OSGEGRAMMENIGREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRA" + + "MMENIGREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENIGR" + + "EEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENIGR" + + "EEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENIGR" + + "EEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENIGREEK SMALL LETTER ETA " + + "WITH DASIA AND YPOGEGRAMMENIGREEK SMALL LETTER ETA WITH PSILI AND VARIA " + + "AND YPOGEGRAMMENIGREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGR" + + "AMMENIGREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENIGREEK " + + "SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENIGREEK SMALL LETTER" + + " ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENIGREEK SMALL LETTER ETA " + + "WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENIGREEK CAPITAL LETTER ETA WIT" + + "H PSILI AND PROSGEGRAMMENIGREEK CAPITAL LETTER ETA WITH DASIA AND PROSGE" + + "GRAMMENIGREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI" + + "GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENIGREEK CA" + + "PITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENIGREEK CAPITAL LET" + + "TER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENIGREEK CAPITAL LETTER ETA W" + + "ITH PSILI AND PERISPOMENI AND PROSGEGRAMMENIGREEK CAPITAL LETTER ETA WIT" + + "H DASIA AND PERISPOMENI AND PROSGEGRAMMENIGREEK SMALL LETTER OMEGA WITH " + + "PSILI AND YPOGEGRAMMENIGREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAM" + + "MENIGREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENIGREEK" + + " SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENIGREEK SMALL LE" + + "TTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENIGREEK SMALL LETTER OMEGA" + + " WITH DASIA AND OXIA AND YPOGEGRAMMENIGREEK SMALL LETTER OMEGA WITH PSIL" + + "I AND PERISPOMENI AND YPOGEGRAMMENIGREEK SMALL LETTER OMEGA WITH DASIA A" + + "ND PERISPOMENI AND YPOGEGRAMMENIGREEK CAPITAL LETTER OMEGA WITH PSILI AN" + + "D PROSGEGRAMMENIGREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI" + + "GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENIGREEK " + + "CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENIGREEK CAPITA" + + "L LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENIGREEK CAPITAL LETTE" + + "R OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENIGREEK CAPITAL LETTER OMEGA" + + " WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENIGREEK CAPITAL LETTER OMEGA" + + " WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENIGREEK SMALL LETTER ALPHA W" + + "ITH VRACHYGREEK SMALL LETTER ALPHA WITH MACRONGREEK SMALL LETTER ALPHA W" + + "ITH VARIA AND YPOGEGRAMMENIGREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENIGR" + + "EEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENIGREEK SMALL LETTER ALP" + + "HA WITH PERISPOMENIGREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGR" + + "AMMENIGREEK CAPITAL LETTER ALPHA WITH VRACHYGREEK CAPITAL LETTER ALPHA W" + + "ITH MACRONGREEK CAPITAL LETTER ALPHA WITH VARIAGREEK CAPITAL LETTER ALPH" + + "A WITH OXIAGREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENIGREEK KORONISGR" + + "EEK PROSGEGRAMMENIGREEK PSILIGREEK PERISPOMENIGREEK DIALYTIKA AND PERISP" + + "OMENIGREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENIGREEK SMALL LETT" + + "ER ETA WITH YPOGEGRAMMENIGREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMM") + ("" + + "ENIGREEK SMALL LETTER ETA WITH PERISPOMENIGREEK SMALL LETTER ETA WITH PE" + + "RISPOMENI AND YPOGEGRAMMENIGREEK CAPITAL LETTER EPSILON WITH VARIAGREEK " + + "CAPITAL LETTER EPSILON WITH OXIAGREEK CAPITAL LETTER ETA WITH VARIAGREEK" + + " CAPITAL LETTER ETA WITH OXIAGREEK CAPITAL LETTER ETA WITH PROSGEGRAMMEN" + + "IGREEK PSILI AND VARIAGREEK PSILI AND OXIAGREEK PSILI AND PERISPOMENIGRE" + + "EK SMALL LETTER IOTA WITH VRACHYGREEK SMALL LETTER IOTA WITH MACRONGREEK" + + " SMALL LETTER IOTA WITH DIALYTIKA AND VARIAGREEK SMALL LETTER IOTA WITH " + + "DIALYTIKA AND OXIAGREEK SMALL LETTER IOTA WITH PERISPOMENIGREEK SMALL LE" + + "TTER IOTA WITH DIALYTIKA AND PERISPOMENIGREEK CAPITAL LETTER IOTA WITH V" + + "RACHYGREEK CAPITAL LETTER IOTA WITH MACRONGREEK CAPITAL LETTER IOTA WITH" + + " VARIAGREEK CAPITAL LETTER IOTA WITH OXIAGREEK DASIA AND VARIAGREEK DASI" + + "A AND OXIAGREEK DASIA AND PERISPOMENIGREEK SMALL LETTER UPSILON WITH VRA" + + "CHYGREEK SMALL LETTER UPSILON WITH MACRONGREEK SMALL LETTER UPSILON WITH" + + " DIALYTIKA AND VARIAGREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIAGR" + + "EEK SMALL LETTER RHO WITH PSILIGREEK SMALL LETTER RHO WITH DASIAGREEK SM" + + "ALL LETTER UPSILON WITH PERISPOMENIGREEK SMALL LETTER UPSILON WITH DIALY" + + "TIKA AND PERISPOMENIGREEK CAPITAL LETTER UPSILON WITH VRACHYGREEK CAPITA" + + "L LETTER UPSILON WITH MACRONGREEK CAPITAL LETTER UPSILON WITH VARIAGREEK" + + " CAPITAL LETTER UPSILON WITH OXIAGREEK CAPITAL LETTER RHO WITH DASIAGREE" + + "K DIALYTIKA AND VARIAGREEK DIALYTIKA AND OXIAGREEK VARIAGREEK SMALL LETT" + + "ER OMEGA WITH VARIA AND YPOGEGRAMMENIGREEK SMALL LETTER OMEGA WITH YPOGE" + + "GRAMMENIGREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENIGREEK SMALL " + + "LETTER OMEGA WITH PERISPOMENIGREEK SMALL LETTER OMEGA WITH PERISPOMENI A" + + "ND YPOGEGRAMMENIGREEK CAPITAL LETTER OMICRON WITH VARIAGREEK CAPITAL LET" + + "TER OMICRON WITH OXIAGREEK CAPITAL LETTER OMEGA WITH VARIAGREEK CAPITAL " + + "LETTER OMEGA WITH OXIAGREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENIGREE" + + "K OXIAGREEK DASIAEN QUADEM QUADEN SPACEEM SPACETHREE-PER-EM SPACEFOUR-PE" + + "R-EM SPACESIX-PER-EM SPACEFIGURE SPACEPUNCTUATION SPACETHIN SPACEHAIR SP" + + "ACEZERO WIDTH SPACEZERO WIDTH NON-JOINERZERO WIDTH JOINERLEFT-TO-RIGHT M" + + "ARKRIGHT-TO-LEFT MARKHYPHENNON-BREAKING HYPHENFIGURE DASHEN DASHEM DASHH" + + "ORIZONTAL BARDOUBLE VERTICAL LINEDOUBLE LOW LINELEFT SINGLE QUOTATION MA" + + "RKRIGHT SINGLE QUOTATION MARKSINGLE LOW-9 QUOTATION MARKSINGLE HIGH-REVE" + + "RSED-9 QUOTATION MARKLEFT DOUBLE QUOTATION MARKRIGHT DOUBLE QUOTATION MA" + + "RKDOUBLE LOW-9 QUOTATION MARKDOUBLE HIGH-REVERSED-9 QUOTATION MARKDAGGER" + + "DOUBLE DAGGERBULLETTRIANGULAR BULLETONE DOT LEADERTWO DOT LEADERHORIZONT" + + "AL ELLIPSISHYPHENATION POINTLINE SEPARATORPARAGRAPH SEPARATORLEFT-TO-RIG" + + "HT EMBEDDINGRIGHT-TO-LEFT EMBEDDINGPOP DIRECTIONAL FORMATTINGLEFT-TO-RIG" + + "HT OVERRIDERIGHT-TO-LEFT OVERRIDENARROW NO-BREAK SPACEPER MILLE SIGNPER " + + "TEN THOUSAND SIGNPRIMEDOUBLE PRIMETRIPLE PRIMEREVERSED PRIMEREVERSED DOU" + + "BLE PRIMEREVERSED TRIPLE PRIMECARETSINGLE LEFT-POINTING ANGLE QUOTATION " + + "MARKSINGLE RIGHT-POINTING ANGLE QUOTATION MARKREFERENCE MARKDOUBLE EXCLA" + + "MATION MARKINTERROBANGOVERLINEUNDERTIECHARACTER TIECARET INSERTION POINT" + + "ASTERISMHYPHEN BULLETFRACTION SLASHLEFT SQUARE BRACKET WITH QUILLRIGHT S" + + "QUARE BRACKET WITH QUILLDOUBLE QUESTION MARKQUESTION EXCLAMATION MARKEXC" + + "LAMATION QUESTION MARKTIRONIAN SIGN ETREVERSED PILCROW SIGNBLACK LEFTWAR" + + "DS BULLETBLACK RIGHTWARDS BULLETLOW ASTERISKREVERSED SEMICOLONCLOSE UPTW" + + "O ASTERISKS ALIGNED VERTICALLYCOMMERCIAL MINUS SIGNSWUNG DASHINVERTED UN" + + "DERTIEFLOWER PUNCTUATION MARKTHREE DOT PUNCTUATIONQUADRUPLE PRIMEFOUR DO" + + "T PUNCTUATIONFIVE DOT PUNCTUATIONTWO DOT PUNCTUATIONFOUR DOT MARKDOTTED " + + "CROSSTRICOLONVERTICAL FOUR DOTSMEDIUM MATHEMATICAL SPACEWORD JOINERFUNCT" + + "ION APPLICATIONINVISIBLE TIMESINVISIBLE SEPARATORINVISIBLE PLUSLEFT-TO-R" + + "IGHT ISOLATERIGHT-TO-LEFT ISOLATEFIRST STRONG ISOLATEPOP DIRECTIONAL ISO" + + "LATEINHIBIT SYMMETRIC SWAPPINGACTIVATE SYMMETRIC SWAPPINGINHIBIT ARABIC " + + "FORM SHAPINGACTIVATE ARABIC FORM SHAPINGNATIONAL DIGIT SHAPESNOMINAL DIG" + + "IT SHAPESSUPERSCRIPT ZEROSUPERSCRIPT LATIN SMALL LETTER ISUPERSCRIPT FOU" + + "RSUPERSCRIPT FIVESUPERSCRIPT SIXSUPERSCRIPT SEVENSUPERSCRIPT EIGHTSUPERS" + + "CRIPT NINESUPERSCRIPT PLUS SIGNSUPERSCRIPT MINUSSUPERSCRIPT EQUALS SIGNS" + + "UPERSCRIPT LEFT PARENTHESISSUPERSCRIPT RIGHT PARENTHESISSUPERSCRIPT LATI" + + "N SMALL LETTER NSUBSCRIPT ZEROSUBSCRIPT ONESUBSCRIPT TWOSUBSCRIPT THREES" + + "UBSCRIPT FOURSUBSCRIPT FIVESUBSCRIPT SIXSUBSCRIPT SEVENSUBSCRIPT EIGHTSU" + + "BSCRIPT NINESUBSCRIPT PLUS SIGNSUBSCRIPT MINUSSUBSCRIPT EQUALS SIGNSUBSC" + + "RIPT LEFT PARENTHESISSUBSCRIPT RIGHT PARENTHESISLATIN SUBSCRIPT SMALL LE" + + "TTER ALATIN SUBSCRIPT SMALL LETTER ELATIN SUBSCRIPT SMALL LETTER OLATIN " + + "SUBSCRIPT SMALL LETTER XLATIN SUBSCRIPT SMALL LETTER SCHWALATIN SUBSCRIP") + ("" + + "T SMALL LETTER HLATIN SUBSCRIPT SMALL LETTER KLATIN SUBSCRIPT SMALL LETT" + + "ER LLATIN SUBSCRIPT SMALL LETTER MLATIN SUBSCRIPT SMALL LETTER NLATIN SU" + + "BSCRIPT SMALL LETTER PLATIN SUBSCRIPT SMALL LETTER SLATIN SUBSCRIPT SMAL" + + "L LETTER TEURO-CURRENCY SIGNCOLON SIGNCRUZEIRO SIGNFRENCH FRANC SIGNLIRA" + + " SIGNMILL SIGNNAIRA SIGNPESETA SIGNRUPEE SIGNWON SIGNNEW SHEQEL SIGNDONG" + + " SIGNEURO SIGNKIP SIGNTUGRIK SIGNDRACHMA SIGNGERMAN PENNY SIGNPESO SIGNG" + + "UARANI SIGNAUSTRAL SIGNHRYVNIA SIGNCEDI SIGNLIVRE TOURNOIS SIGNSPESMILO " + + "SIGNTENGE SIGNINDIAN RUPEE SIGNTURKISH LIRA SIGNNORDIC MARK SIGNMANAT SI" + + "GNRUBLE SIGNLARI SIGNBITCOIN SIGNCOMBINING LEFT HARPOON ABOVECOMBINING R" + + "IGHT HARPOON ABOVECOMBINING LONG VERTICAL LINE OVERLAYCOMBINING SHORT VE" + + "RTICAL LINE OVERLAYCOMBINING ANTICLOCKWISE ARROW ABOVECOMBINING CLOCKWIS" + + "E ARROW ABOVECOMBINING LEFT ARROW ABOVECOMBINING RIGHT ARROW ABOVECOMBIN" + + "ING RING OVERLAYCOMBINING CLOCKWISE RING OVERLAYCOMBINING ANTICLOCKWISE " + + "RING OVERLAYCOMBINING THREE DOTS ABOVECOMBINING FOUR DOTS ABOVECOMBINING" + + " ENCLOSING CIRCLECOMBINING ENCLOSING SQUARECOMBINING ENCLOSING DIAMONDCO" + + "MBINING ENCLOSING CIRCLE BACKSLASHCOMBINING LEFT RIGHT ARROW ABOVECOMBIN" + + "ING ENCLOSING SCREENCOMBINING ENCLOSING KEYCAPCOMBINING ENCLOSING UPWARD" + + " POINTING TRIANGLECOMBINING REVERSE SOLIDUS OVERLAYCOMBINING DOUBLE VERT" + + "ICAL STROKE OVERLAYCOMBINING ANNUITY SYMBOLCOMBINING TRIPLE UNDERDOTCOMB" + + "INING WIDE BRIDGE ABOVECOMBINING LEFTWARDS ARROW OVERLAYCOMBINING LONG D" + + "OUBLE SOLIDUS OVERLAYCOMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDSCOM" + + "BINING LEFTWARDS HARPOON WITH BARB DOWNWARDSCOMBINING LEFT ARROW BELOWCO" + + "MBINING RIGHT ARROW BELOWCOMBINING ASTERISK ABOVEACCOUNT OFADDRESSED TO " + + "THE SUBJECTDOUBLE-STRUCK CAPITAL CDEGREE CELSIUSCENTRE LINE SYMBOLCARE O" + + "FCADA UNAEULER CONSTANTSCRUPLEDEGREE FAHRENHEITSCRIPT SMALL GSCRIPT CAPI" + + "TAL HBLACK-LETTER CAPITAL HDOUBLE-STRUCK CAPITAL HPLANCK CONSTANTPLANCK " + + "CONSTANT OVER TWO PISCRIPT CAPITAL IBLACK-LETTER CAPITAL ISCRIPT CAPITAL" + + " LSCRIPT SMALL LL B BAR SYMBOLDOUBLE-STRUCK CAPITAL NNUMERO SIGNSOUND RE" + + "CORDING COPYRIGHTSCRIPT CAPITAL PDOUBLE-STRUCK CAPITAL PDOUBLE-STRUCK CA" + + "PITAL QSCRIPT CAPITAL RBLACK-LETTER CAPITAL RDOUBLE-STRUCK CAPITAL RPRES" + + "CRIPTION TAKERESPONSESERVICE MARKTELEPHONE SIGNTRADE MARK SIGNVERSICLEDO" + + "UBLE-STRUCK CAPITAL ZOUNCE SIGNOHM SIGNINVERTED OHM SIGNBLACK-LETTER CAP" + + "ITAL ZTURNED GREEK SMALL LETTER IOTAKELVIN SIGNANGSTROM SIGNSCRIPT CAPIT" + + "AL BBLACK-LETTER CAPITAL CESTIMATED SYMBOLSCRIPT SMALL ESCRIPT CAPITAL E" + + "SCRIPT CAPITAL FTURNED CAPITAL FSCRIPT CAPITAL MSCRIPT SMALL OALEF SYMBO" + + "LBET SYMBOLGIMEL SYMBOLDALET SYMBOLINFORMATION SOURCEROTATED CAPITAL QFA" + + "CSIMILE SIGNDOUBLE-STRUCK SMALL PIDOUBLE-STRUCK SMALL GAMMADOUBLE-STRUCK" + + " CAPITAL GAMMADOUBLE-STRUCK CAPITAL PIDOUBLE-STRUCK N-ARY SUMMATIONTURNE" + + "D SANS-SERIF CAPITAL GTURNED SANS-SERIF CAPITAL LREVERSED SANS-SERIF CAP" + + "ITAL LTURNED SANS-SERIF CAPITAL YDOUBLE-STRUCK ITALIC CAPITAL DDOUBLE-ST" + + "RUCK ITALIC SMALL DDOUBLE-STRUCK ITALIC SMALL EDOUBLE-STRUCK ITALIC SMAL" + + "L IDOUBLE-STRUCK ITALIC SMALL JPROPERTY LINETURNED AMPERSANDPER SIGNAKTI" + + "ESELSKABTURNED SMALL FSYMBOL FOR SAMARITAN SOURCEVULGAR FRACTION ONE SEV" + + "ENTHVULGAR FRACTION ONE NINTHVULGAR FRACTION ONE TENTHVULGAR FRACTION ON" + + "E THIRDVULGAR FRACTION TWO THIRDSVULGAR FRACTION ONE FIFTHVULGAR FRACTIO" + + "N TWO FIFTHSVULGAR FRACTION THREE FIFTHSVULGAR FRACTION FOUR FIFTHSVULGA" + + "R FRACTION ONE SIXTHVULGAR FRACTION FIVE SIXTHSVULGAR FRACTION ONE EIGHT" + + "HVULGAR FRACTION THREE EIGHTHSVULGAR FRACTION FIVE EIGHTHSVULGAR FRACTIO" + + "N SEVEN EIGHTHSFRACTION NUMERATOR ONEROMAN NUMERAL ONEROMAN NUMERAL TWOR" + + "OMAN NUMERAL THREEROMAN NUMERAL FOURROMAN NUMERAL FIVEROMAN NUMERAL SIXR" + + "OMAN NUMERAL SEVENROMAN NUMERAL EIGHTROMAN NUMERAL NINEROMAN NUMERAL TEN" + + "ROMAN NUMERAL ELEVENROMAN NUMERAL TWELVEROMAN NUMERAL FIFTYROMAN NUMERAL" + + " ONE HUNDREDROMAN NUMERAL FIVE HUNDREDROMAN NUMERAL ONE THOUSANDSMALL RO" + + "MAN NUMERAL ONESMALL ROMAN NUMERAL TWOSMALL ROMAN NUMERAL THREESMALL ROM" + + "AN NUMERAL FOURSMALL ROMAN NUMERAL FIVESMALL ROMAN NUMERAL SIXSMALL ROMA" + + "N NUMERAL SEVENSMALL ROMAN NUMERAL EIGHTSMALL ROMAN NUMERAL NINESMALL RO" + + "MAN NUMERAL TENSMALL ROMAN NUMERAL ELEVENSMALL ROMAN NUMERAL TWELVESMALL" + + " ROMAN NUMERAL FIFTYSMALL ROMAN NUMERAL ONE HUNDREDSMALL ROMAN NUMERAL F" + + "IVE HUNDREDSMALL ROMAN NUMERAL ONE THOUSANDROMAN NUMERAL ONE THOUSAND C " + + "DROMAN NUMERAL FIVE THOUSANDROMAN NUMERAL TEN THOUSANDROMAN NUMERAL REVE" + + "RSED ONE HUNDREDLATIN SMALL LETTER REVERSED CROMAN NUMERAL SIX LATE FORM" + + "ROMAN NUMERAL FIFTY EARLY FORMROMAN NUMERAL FIFTY THOUSANDROMAN NUMERAL " + + "ONE HUNDRED THOUSANDVULGAR FRACTION ZERO THIRDSTURNED DIGIT TWOTURNED DI" + + "GIT THREELEFTWARDS ARROWUPWARDS ARROWRIGHTWARDS ARROWDOWNWARDS ARROWLEFT") + ("" + + " RIGHT ARROWUP DOWN ARROWNORTH WEST ARROWNORTH EAST ARROWSOUTH EAST ARRO" + + "WSOUTH WEST ARROWLEFTWARDS ARROW WITH STROKERIGHTWARDS ARROW WITH STROKE" + + "LEFTWARDS WAVE ARROWRIGHTWARDS WAVE ARROWLEFTWARDS TWO HEADED ARROWUPWAR" + + "DS TWO HEADED ARROWRIGHTWARDS TWO HEADED ARROWDOWNWARDS TWO HEADED ARROW" + + "LEFTWARDS ARROW WITH TAILRIGHTWARDS ARROW WITH TAILLEFTWARDS ARROW FROM " + + "BARUPWARDS ARROW FROM BARRIGHTWARDS ARROW FROM BARDOWNWARDS ARROW FROM B" + + "ARUP DOWN ARROW WITH BASELEFTWARDS ARROW WITH HOOKRIGHTWARDS ARROW WITH " + + "HOOKLEFTWARDS ARROW WITH LOOPRIGHTWARDS ARROW WITH LOOPLEFT RIGHT WAVE A" + + "RROWLEFT RIGHT ARROW WITH STROKEDOWNWARDS ZIGZAG ARROWUPWARDS ARROW WITH" + + " TIP LEFTWARDSUPWARDS ARROW WITH TIP RIGHTWARDSDOWNWARDS ARROW WITH TIP " + + "LEFTWARDSDOWNWARDS ARROW WITH TIP RIGHTWARDSRIGHTWARDS ARROW WITH CORNER" + + " DOWNWARDSDOWNWARDS ARROW WITH CORNER LEFTWARDSANTICLOCKWISE TOP SEMICIR" + + "CLE ARROWCLOCKWISE TOP SEMICIRCLE ARROWNORTH WEST ARROW TO LONG BARLEFTW" + + "ARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BARANTICLOCKWISE OPEN CIRCLE " + + "ARROWCLOCKWISE OPEN CIRCLE ARROWLEFTWARDS HARPOON WITH BARB UPWARDSLEFTW" + + "ARDS HARPOON WITH BARB DOWNWARDSUPWARDS HARPOON WITH BARB RIGHTWARDSUPWA" + + "RDS HARPOON WITH BARB LEFTWARDSRIGHTWARDS HARPOON WITH BARB UPWARDSRIGHT" + + "WARDS HARPOON WITH BARB DOWNWARDSDOWNWARDS HARPOON WITH BARB RIGHTWARDSD" + + "OWNWARDS HARPOON WITH BARB LEFTWARDSRIGHTWARDS ARROW OVER LEFTWARDS ARRO" + + "WUPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROWLEFTWARDS ARROW OVER RIGHTWAR" + + "DS ARROWLEFTWARDS PAIRED ARROWSUPWARDS PAIRED ARROWSRIGHTWARDS PAIRED AR" + + "ROWSDOWNWARDS PAIRED ARROWSLEFTWARDS HARPOON OVER RIGHTWARDS HARPOONRIGH" + + "TWARDS HARPOON OVER LEFTWARDS HARPOONLEFTWARDS DOUBLE ARROW WITH STROKEL" + + "EFT RIGHT DOUBLE ARROW WITH STROKERIGHTWARDS DOUBLE ARROW WITH STROKELEF" + + "TWARDS DOUBLE ARROWUPWARDS DOUBLE ARROWRIGHTWARDS DOUBLE ARROWDOWNWARDS " + + "DOUBLE ARROWLEFT RIGHT DOUBLE ARROWUP DOWN DOUBLE ARROWNORTH WEST DOUBLE" + + " ARROWNORTH EAST DOUBLE ARROWSOUTH EAST DOUBLE ARROWSOUTH WEST DOUBLE AR" + + "ROWLEFTWARDS TRIPLE ARROWRIGHTWARDS TRIPLE ARROWLEFTWARDS SQUIGGLE ARROW" + + "RIGHTWARDS SQUIGGLE ARROWUPWARDS ARROW WITH DOUBLE STROKEDOWNWARDS ARROW" + + " WITH DOUBLE STROKELEFTWARDS DASHED ARROWUPWARDS DASHED ARROWRIGHTWARDS " + + "DASHED ARROWDOWNWARDS DASHED ARROWLEFTWARDS ARROW TO BARRIGHTWARDS ARROW" + + " TO BARLEFTWARDS WHITE ARROWUPWARDS WHITE ARROWRIGHTWARDS WHITE ARROWDOW" + + "NWARDS WHITE ARROWUPWARDS WHITE ARROW FROM BARUPWARDS WHITE ARROW ON PED" + + "ESTALUPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BARUPWARDS WHITE AR" + + "ROW ON PEDESTAL WITH VERTICAL BARUPWARDS WHITE DOUBLE ARROWUPWARDS WHITE" + + " DOUBLE ARROW ON PEDESTALRIGHTWARDS WHITE ARROW FROM WALLNORTH WEST ARRO" + + "W TO CORNERSOUTH EAST ARROW TO CORNERUP DOWN WHITE ARROWRIGHT ARROW WITH" + + " SMALL CIRCLEDOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROWTHREE RIGHTWARDS " + + "ARROWSLEFTWARDS ARROW WITH VERTICAL STROKERIGHTWARDS ARROW WITH VERTICAL" + + " STROKELEFT RIGHT ARROW WITH VERTICAL STROKELEFTWARDS ARROW WITH DOUBLE " + + "VERTICAL STROKERIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKELEFT RIGHT AR" + + "ROW WITH DOUBLE VERTICAL STROKELEFTWARDS OPEN-HEADED ARROWRIGHTWARDS OPE" + + "N-HEADED ARROWLEFT RIGHT OPEN-HEADED ARROWFOR ALLCOMPLEMENTPARTIAL DIFFE" + + "RENTIALTHERE EXISTSTHERE DOES NOT EXISTEMPTY SETINCREMENTNABLAELEMENT OF" + + "NOT AN ELEMENT OFSMALL ELEMENT OFCONTAINS AS MEMBERDOES NOT CONTAIN AS M" + + "EMBERSMALL CONTAINS AS MEMBEREND OF PROOFN-ARY PRODUCTN-ARY COPRODUCTN-A" + + "RY SUMMATIONMINUS SIGNMINUS-OR-PLUS SIGNDOT PLUSDIVISION SLASHSET MINUSA" + + "STERISK OPERATORRING OPERATORBULLET OPERATORSQUARE ROOTCUBE ROOTFOURTH R" + + "OOTPROPORTIONAL TOINFINITYRIGHT ANGLEANGLEMEASURED ANGLESPHERICAL ANGLED" + + "IVIDESDOES NOT DIVIDEPARALLEL TONOT PARALLEL TOLOGICAL ANDLOGICAL ORINTE" + + "RSECTIONUNIONINTEGRALDOUBLE INTEGRALTRIPLE INTEGRALCONTOUR INTEGRALSURFA" + + "CE INTEGRALVOLUME INTEGRALCLOCKWISE INTEGRALCLOCKWISE CONTOUR INTEGRALAN" + + "TICLOCKWISE CONTOUR INTEGRALTHEREFOREBECAUSERATIOPROPORTIONDOT MINUSEXCE" + + "SSGEOMETRIC PROPORTIONHOMOTHETICTILDE OPERATORREVERSED TILDEINVERTED LAZ" + + "Y SSINE WAVEWREATH PRODUCTNOT TILDEMINUS TILDEASYMPTOTICALLY EQUAL TONOT" + + " ASYMPTOTICALLY EQUAL TOAPPROXIMATELY EQUAL TOAPPROXIMATELY BUT NOT ACTU" + + "ALLY EQUAL TONEITHER APPROXIMATELY NOR ACTUALLY EQUAL TOALMOST EQUAL TON" + + "OT ALMOST EQUAL TOALMOST EQUAL OR EQUAL TOTRIPLE TILDEALL EQUAL TOEQUIVA" + + "LENT TOGEOMETRICALLY EQUIVALENT TODIFFERENCE BETWEENAPPROACHES THE LIMIT" + + "GEOMETRICALLY EQUAL TOAPPROXIMATELY EQUAL TO OR THE IMAGE OFIMAGE OF OR " + + "APPROXIMATELY EQUAL TOCOLON EQUALSEQUALS COLONRING IN EQUAL TORING EQUAL" + + " TOCORRESPONDS TOESTIMATESEQUIANGULAR TOSTAR EQUALSDELTA EQUAL TOEQUAL T" + + "O BY DEFINITIONMEASURED BYQUESTIONED EQUAL TONOT EQUAL TOIDENTICAL TONOT" + + " IDENTICAL TOSTRICTLY EQUIVALENT TOLESS-THAN OR EQUAL TOGREATER-THAN OR ") + ("" + + "EQUAL TOLESS-THAN OVER EQUAL TOGREATER-THAN OVER EQUAL TOLESS-THAN BUT N" + + "OT EQUAL TOGREATER-THAN BUT NOT EQUAL TOMUCH LESS-THANMUCH GREATER-THANB" + + "ETWEENNOT EQUIVALENT TONOT LESS-THANNOT GREATER-THANNEITHER LESS-THAN NO" + + "R EQUAL TONEITHER GREATER-THAN NOR EQUAL TOLESS-THAN OR EQUIVALENT TOGRE" + + "ATER-THAN OR EQUIVALENT TONEITHER LESS-THAN NOR EQUIVALENT TONEITHER GRE" + + "ATER-THAN NOR EQUIVALENT TOLESS-THAN OR GREATER-THANGREATER-THAN OR LESS" + + "-THANNEITHER LESS-THAN NOR GREATER-THANNEITHER GREATER-THAN NOR LESS-THA" + + "NPRECEDESSUCCEEDSPRECEDES OR EQUAL TOSUCCEEDS OR EQUAL TOPRECEDES OR EQU" + + "IVALENT TOSUCCEEDS OR EQUIVALENT TODOES NOT PRECEDEDOES NOT SUCCEEDSUBSE" + + "T OFSUPERSET OFNOT A SUBSET OFNOT A SUPERSET OFSUBSET OF OR EQUAL TOSUPE" + + "RSET OF OR EQUAL TONEITHER A SUBSET OF NOR EQUAL TONEITHER A SUPERSET OF" + + " NOR EQUAL TOSUBSET OF WITH NOT EQUAL TOSUPERSET OF WITH NOT EQUAL TOMUL" + + "TISETMULTISET MULTIPLICATIONMULTISET UNIONSQUARE IMAGE OFSQUARE ORIGINAL" + + " OFSQUARE IMAGE OF OR EQUAL TOSQUARE ORIGINAL OF OR EQUAL TOSQUARE CAPSQ" + + "UARE CUPCIRCLED PLUSCIRCLED MINUSCIRCLED TIMESCIRCLED DIVISION SLASHCIRC" + + "LED DOT OPERATORCIRCLED RING OPERATORCIRCLED ASTERISK OPERATORCIRCLED EQ" + + "UALSCIRCLED DASHSQUARED PLUSSQUARED MINUSSQUARED TIMESSQUARED DOT OPERAT" + + "ORRIGHT TACKLEFT TACKDOWN TACKUP TACKASSERTIONMODELSTRUEFORCESTRIPLE VER" + + "TICAL BAR RIGHT TURNSTILEDOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILEDOES " + + "NOT PROVENOT TRUEDOES NOT FORCENEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT " + + "TURNSTILEPRECEDES UNDER RELATIONSUCCEEDS UNDER RELATIONNORMAL SUBGROUP O" + + "FCONTAINS AS NORMAL SUBGROUPNORMAL SUBGROUP OF OR EQUAL TOCONTAINS AS NO" + + "RMAL SUBGROUP OR EQUAL TOORIGINAL OFIMAGE OFMULTIMAPHERMITIAN CONJUGATE " + + "MATRIXINTERCALATEXORNANDNORRIGHT ANGLE WITH ARCRIGHT TRIANGLEN-ARY LOGIC" + + "AL ANDN-ARY LOGICAL ORN-ARY INTERSECTIONN-ARY UNIONDIAMOND OPERATORDOT O" + + "PERATORSTAR OPERATORDIVISION TIMESBOWTIELEFT NORMAL FACTOR SEMIDIRECT PR" + + "ODUCTRIGHT NORMAL FACTOR SEMIDIRECT PRODUCTLEFT SEMIDIRECT PRODUCTRIGHT " + + "SEMIDIRECT PRODUCTREVERSED TILDE EQUALSCURLY LOGICAL ORCURLY LOGICAL AND" + + "DOUBLE SUBSETDOUBLE SUPERSETDOUBLE INTERSECTIONDOUBLE UNIONPITCHFORKEQUA" + + "L AND PARALLEL TOLESS-THAN WITH DOTGREATER-THAN WITH DOTVERY MUCH LESS-T" + + "HANVERY MUCH GREATER-THANLESS-THAN EQUAL TO OR GREATER-THANGREATER-THAN " + + "EQUAL TO OR LESS-THANEQUAL TO OR LESS-THANEQUAL TO OR GREATER-THANEQUAL " + + "TO OR PRECEDESEQUAL TO OR SUCCEEDSDOES NOT PRECEDE OR EQUALDOES NOT SUCC" + + "EED OR EQUALNOT SQUARE IMAGE OF OR EQUAL TONOT SQUARE ORIGINAL OF OR EQU" + + "AL TOSQUARE IMAGE OF OR NOT EQUAL TOSQUARE ORIGINAL OF OR NOT EQUAL TOLE" + + "SS-THAN BUT NOT EQUIVALENT TOGREATER-THAN BUT NOT EQUIVALENT TOPRECEDES " + + "BUT NOT EQUIVALENT TOSUCCEEDS BUT NOT EQUIVALENT TONOT NORMAL SUBGROUP O" + + "FDOES NOT CONTAIN AS NORMAL SUBGROUPNOT NORMAL SUBGROUP OF OR EQUAL TODO" + + "ES NOT CONTAIN AS NORMAL SUBGROUP OR EQUALVERTICAL ELLIPSISMIDLINE HORIZ" + + "ONTAL ELLIPSISUP RIGHT DIAGONAL ELLIPSISDOWN RIGHT DIAGONAL ELLIPSISELEM" + + "ENT OF WITH LONG HORIZONTAL STROKEELEMENT OF WITH VERTICAL BAR AT END OF" + + " HORIZONTAL STROKESMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTA" + + "L STROKEELEMENT OF WITH DOT ABOVEELEMENT OF WITH OVERBARSMALL ELEMENT OF" + + " WITH OVERBARELEMENT OF WITH UNDERBARELEMENT OF WITH TWO HORIZONTAL STRO" + + "KESCONTAINS WITH LONG HORIZONTAL STROKECONTAINS WITH VERTICAL BAR AT END" + + " OF HORIZONTAL STROKESMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONT" + + "AL STROKECONTAINS WITH OVERBARSMALL CONTAINS WITH OVERBARZ NOTATION BAG " + + "MEMBERSHIPDIAMETER SIGNELECTRIC ARROWHOUSEUP ARROWHEADDOWN ARROWHEADPROJ" + + "ECTIVEPERSPECTIVEWAVY LINELEFT CEILINGRIGHT CEILINGLEFT FLOORRIGHT FLOOR" + + "BOTTOM RIGHT CROPBOTTOM LEFT CROPTOP RIGHT CROPTOP LEFT CROPREVERSED NOT" + + " SIGNSQUARE LOZENGEARCSEGMENTSECTORTELEPHONE RECORDERPOSITION INDICATORV" + + "IEWDATA SQUAREPLACE OF INTEREST SIGNTURNED NOT SIGNWATCHHOURGLASSTOP LEF" + + "T CORNERTOP RIGHT CORNERBOTTOM LEFT CORNERBOTTOM RIGHT CORNERTOP HALF IN" + + "TEGRALBOTTOM HALF INTEGRALFROWNSMILEUP ARROWHEAD BETWEEN TWO HORIZONTAL " + + "BARSOPTION KEYERASE TO THE RIGHTX IN A RECTANGLE BOXKEYBOARDLEFT-POINTIN" + + "G ANGLE BRACKETRIGHT-POINTING ANGLE BRACKETERASE TO THE LEFTBENZENE RING" + + "CYLINDRICITYALL AROUND-PROFILESYMMETRYTOTAL RUNOUTDIMENSION ORIGINCONICA" + + "L TAPERSLOPECOUNTERBORECOUNTERSINKAPL FUNCTIONAL SYMBOL I-BEAMAPL FUNCTI" + + "ONAL SYMBOL SQUISH QUADAPL FUNCTIONAL SYMBOL QUAD EQUALAPL FUNCTIONAL SY" + + "MBOL QUAD DIVIDEAPL FUNCTIONAL SYMBOL QUAD DIAMONDAPL FUNCTIONAL SYMBOL " + + "QUAD JOTAPL FUNCTIONAL SYMBOL QUAD CIRCLEAPL FUNCTIONAL SYMBOL CIRCLE ST" + + "ILEAPL FUNCTIONAL SYMBOL CIRCLE JOTAPL FUNCTIONAL SYMBOL SLASH BARAPL FU" + + "NCTIONAL SYMBOL BACKSLASH BARAPL FUNCTIONAL SYMBOL QUAD SLASHAPL FUNCTIO" + + "NAL SYMBOL QUAD BACKSLASHAPL FUNCTIONAL SYMBOL QUAD LESS-THANAPL FUNCTIO") + ("" + + "NAL SYMBOL QUAD GREATER-THANAPL FUNCTIONAL SYMBOL LEFTWARDS VANEAPL FUNC" + + "TIONAL SYMBOL RIGHTWARDS VANEAPL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROWA" + + "PL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROWAPL FUNCTIONAL SYMBOL CIRCLE B" + + "ACKSLASHAPL FUNCTIONAL SYMBOL DOWN TACK UNDERBARAPL FUNCTIONAL SYMBOL DE" + + "LTA STILEAPL FUNCTIONAL SYMBOL QUAD DOWN CARETAPL FUNCTIONAL SYMBOL QUAD" + + " DELTAAPL FUNCTIONAL SYMBOL DOWN TACK JOTAPL FUNCTIONAL SYMBOL UPWARDS V" + + "ANEAPL FUNCTIONAL SYMBOL QUAD UPWARDS ARROWAPL FUNCTIONAL SYMBOL UP TACK" + + " OVERBARAPL FUNCTIONAL SYMBOL DEL STILEAPL FUNCTIONAL SYMBOL QUAD UP CAR" + + "ETAPL FUNCTIONAL SYMBOL QUAD DELAPL FUNCTIONAL SYMBOL UP TACK JOTAPL FUN" + + "CTIONAL SYMBOL DOWNWARDS VANEAPL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROWA" + + "PL FUNCTIONAL SYMBOL QUOTE UNDERBARAPL FUNCTIONAL SYMBOL DELTA UNDERBARA" + + "PL FUNCTIONAL SYMBOL DIAMOND UNDERBARAPL FUNCTIONAL SYMBOL JOT UNDERBARA" + + "PL FUNCTIONAL SYMBOL CIRCLE UNDERBARAPL FUNCTIONAL SYMBOL UP SHOE JOTAPL" + + " FUNCTIONAL SYMBOL QUOTE QUADAPL FUNCTIONAL SYMBOL CIRCLE STARAPL FUNCTI" + + "ONAL SYMBOL QUAD COLONAPL FUNCTIONAL SYMBOL UP TACK DIAERESISAPL FUNCTIO" + + "NAL SYMBOL DEL DIAERESISAPL FUNCTIONAL SYMBOL STAR DIAERESISAPL FUNCTION" + + "AL SYMBOL JOT DIAERESISAPL FUNCTIONAL SYMBOL CIRCLE DIAERESISAPL FUNCTIO" + + "NAL SYMBOL DOWN SHOE STILEAPL FUNCTIONAL SYMBOL LEFT SHOE STILEAPL FUNCT" + + "IONAL SYMBOL TILDE DIAERESISAPL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS" + + "APL FUNCTIONAL SYMBOL COMMA BARAPL FUNCTIONAL SYMBOL DEL TILDEAPL FUNCTI" + + "ONAL SYMBOL ZILDEAPL FUNCTIONAL SYMBOL STILE TILDEAPL FUNCTIONAL SYMBOL " + + "SEMICOLON UNDERBARAPL FUNCTIONAL SYMBOL QUAD NOT EQUALAPL FUNCTIONAL SYM" + + "BOL QUAD QUESTIONAPL FUNCTIONAL SYMBOL DOWN CARET TILDEAPL FUNCTIONAL SY" + + "MBOL UP CARET TILDEAPL FUNCTIONAL SYMBOL IOTAAPL FUNCTIONAL SYMBOL RHOAP" + + "L FUNCTIONAL SYMBOL OMEGAAPL FUNCTIONAL SYMBOL ALPHA UNDERBARAPL FUNCTIO" + + "NAL SYMBOL EPSILON UNDERBARAPL FUNCTIONAL SYMBOL IOTA UNDERBARAPL FUNCTI" + + "ONAL SYMBOL OMEGA UNDERBARAPL FUNCTIONAL SYMBOL ALPHANOT CHECK MARKRIGHT" + + " ANGLE WITH DOWNWARDS ZIGZAG ARROWSHOULDERED OPEN BOXBELL SYMBOLVERTICAL" + + " LINE WITH MIDDLE DOTINSERTION SYMBOLCONTINUOUS UNDERLINE SYMBOLDISCONTI" + + "NUOUS UNDERLINE SYMBOLEMPHASIS SYMBOLCOMPOSITION SYMBOLWHITE SQUARE WITH" + + " CENTRE VERTICAL LINEENTER SYMBOLALTERNATIVE KEY SYMBOLHELM SYMBOLCIRCLE" + + "D HORIZONTAL BAR WITH NOTCHCIRCLED TRIANGLE DOWNBROKEN CIRCLE WITH NORTH" + + "WEST ARROWUNDO SYMBOLMONOSTABLE SYMBOLHYSTERESIS SYMBOLOPEN-CIRCUIT-OUTP" + + "UT H-TYPE SYMBOLOPEN-CIRCUIT-OUTPUT L-TYPE SYMBOLPASSIVE-PULL-DOWN-OUTPU" + + "T SYMBOLPASSIVE-PULL-UP-OUTPUT SYMBOLDIRECT CURRENT SYMBOL FORM TWOSOFTW" + + "ARE-FUNCTION SYMBOLAPL FUNCTIONAL SYMBOL QUADDECIMAL SEPARATOR KEY SYMBO" + + "LPREVIOUS PAGENEXT PAGEPRINT SCREEN SYMBOLCLEAR SCREEN SYMBOLLEFT PARENT" + + "HESIS UPPER HOOKLEFT PARENTHESIS EXTENSIONLEFT PARENTHESIS LOWER HOOKRIG" + + "HT PARENTHESIS UPPER HOOKRIGHT PARENTHESIS EXTENSIONRIGHT PARENTHESIS LO" + + "WER HOOKLEFT SQUARE BRACKET UPPER CORNERLEFT SQUARE BRACKET EXTENSIONLEF" + + "T SQUARE BRACKET LOWER CORNERRIGHT SQUARE BRACKET UPPER CORNERRIGHT SQUA" + + "RE BRACKET EXTENSIONRIGHT SQUARE BRACKET LOWER CORNERLEFT CURLY BRACKET " + + "UPPER HOOKLEFT CURLY BRACKET MIDDLE PIECELEFT CURLY BRACKET LOWER HOOKCU" + + "RLY BRACKET EXTENSIONRIGHT CURLY BRACKET UPPER HOOKRIGHT CURLY BRACKET M" + + "IDDLE PIECERIGHT CURLY BRACKET LOWER HOOKINTEGRAL EXTENSIONHORIZONTAL LI" + + "NE EXTENSIONUPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTIONUPPER RIGHT O" + + "R LOWER LEFT CURLY BRACKET SECTIONSUMMATION TOPSUMMATION BOTTOMTOP SQUAR" + + "E BRACKETBOTTOM SQUARE BRACKETBOTTOM SQUARE BRACKET OVER TOP SQUARE BRAC" + + "KETRADICAL SYMBOL BOTTOMLEFT VERTICAL BOX LINERIGHT VERTICAL BOX LINEHOR" + + "IZONTAL SCAN LINE-1HORIZONTAL SCAN LINE-3HORIZONTAL SCAN LINE-7HORIZONTA" + + "L SCAN LINE-9DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHTDENTISTRY SYMB" + + "OL LIGHT VERTICAL AND BOTTOM RIGHTDENTISTRY SYMBOL LIGHT VERTICAL WITH C" + + "IRCLEDENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLEDENTISTRY SYM" + + "BOL LIGHT UP AND HORIZONTAL WITH CIRCLEDENTISTRY SYMBOL LIGHT VERTICAL W" + + "ITH TRIANGLEDENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLEDENT" + + "ISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLEDENTISTRY SYMBOL LIGHT" + + " VERTICAL AND WAVEDENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVEDE" + + "NTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVEDENTISTRY SYMBOL LIGHT D" + + "OWN AND HORIZONTALDENTISTRY SYMBOL LIGHT UP AND HORIZONTALDENTISTRY SYMB" + + "OL LIGHT VERTICAL AND TOP LEFTDENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM" + + " LEFTSQUARE FOOTRETURN SYMBOLEJECT SYMBOLVERTICAL LINE EXTENSIONMETRICAL" + + " BREVEMETRICAL LONG OVER SHORTMETRICAL SHORT OVER LONGMETRICAL LONG OVER" + + " TWO SHORTSMETRICAL TWO SHORTS OVER LONGMETRICAL TWO SHORTS JOINEDMETRIC" + + "AL TRISEMEMETRICAL TETRASEMEMETRICAL PENTASEMEEARTH GROUNDFUSETOP PARENT") + ("" + + "HESISBOTTOM PARENTHESISTOP CURLY BRACKETBOTTOM CURLY BRACKETTOP TORTOISE" + + " SHELL BRACKETBOTTOM TORTOISE SHELL BRACKETWHITE TRAPEZIUMBENZENE RING W" + + "ITH CIRCLESTRAIGHTNESSFLATNESSAC CURRENTELECTRICAL INTERSECTIONDECIMAL E" + + "XPONENT SYMBOLBLACK RIGHT-POINTING DOUBLE TRIANGLEBLACK LEFT-POINTING DO" + + "UBLE TRIANGLEBLACK UP-POINTING DOUBLE TRIANGLEBLACK DOWN-POINTING DOUBLE" + + " TRIANGLEBLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BARBLACK LEF" + + "T-POINTING DOUBLE TRIANGLE WITH VERTICAL BARBLACK RIGHT-POINTING TRIANGL" + + "E WITH DOUBLE VERTICAL BARALARM CLOCKSTOPWATCHTIMER CLOCKHOURGLASS WITH " + + "FLOWING SANDBLACK MEDIUM LEFT-POINTING TRIANGLEBLACK MEDIUM RIGHT-POINTI" + + "NG TRIANGLEBLACK MEDIUM UP-POINTING TRIANGLEBLACK MEDIUM DOWN-POINTING T" + + "RIANGLEDOUBLE VERTICAL BARBLACK SQUARE FOR STOPBLACK CIRCLE FOR RECORDPO" + + "WER SYMBOLPOWER ON-OFF SYMBOLPOWER ON SYMBOLPOWER SLEEP SYMBOLOBSERVER E" + + "YE SYMBOLSYMBOL FOR NULLSYMBOL FOR START OF HEADINGSYMBOL FOR START OF T" + + "EXTSYMBOL FOR END OF TEXTSYMBOL FOR END OF TRANSMISSIONSYMBOL FOR ENQUIR" + + "YSYMBOL FOR ACKNOWLEDGESYMBOL FOR BELLSYMBOL FOR BACKSPACESYMBOL FOR HOR" + + "IZONTAL TABULATIONSYMBOL FOR LINE FEEDSYMBOL FOR VERTICAL TABULATIONSYMB" + + "OL FOR FORM FEEDSYMBOL FOR CARRIAGE RETURNSYMBOL FOR SHIFT OUTSYMBOL FOR" + + " SHIFT INSYMBOL FOR DATA LINK ESCAPESYMBOL FOR DEVICE CONTROL ONESYMBOL " + + "FOR DEVICE CONTROL TWOSYMBOL FOR DEVICE CONTROL THREESYMBOL FOR DEVICE C" + + "ONTROL FOURSYMBOL FOR NEGATIVE ACKNOWLEDGESYMBOL FOR SYNCHRONOUS IDLESYM" + + "BOL FOR END OF TRANSMISSION BLOCKSYMBOL FOR CANCELSYMBOL FOR END OF MEDI" + + "UMSYMBOL FOR SUBSTITUTESYMBOL FOR ESCAPESYMBOL FOR FILE SEPARATORSYMBOL " + + "FOR GROUP SEPARATORSYMBOL FOR RECORD SEPARATORSYMBOL FOR UNIT SEPARATORS" + + "YMBOL FOR SPACESYMBOL FOR DELETEBLANK SYMBOLOPEN BOXSYMBOL FOR NEWLINESY" + + "MBOL FOR DELETE FORM TWOSYMBOL FOR SUBSTITUTE FORM TWOOCR HOOKOCR CHAIRO" + + "CR FORKOCR INVERTED FORKOCR BELT BUCKLEOCR BOW TIEOCR BRANCH BANK IDENTI" + + "FICATIONOCR AMOUNT OF CHECKOCR DASHOCR CUSTOMER ACCOUNT NUMBEROCR DOUBLE" + + " BACKSLASHCIRCLED DIGIT ONECIRCLED DIGIT TWOCIRCLED DIGIT THREECIRCLED D" + + "IGIT FOURCIRCLED DIGIT FIVECIRCLED DIGIT SIXCIRCLED DIGIT SEVENCIRCLED D" + + "IGIT EIGHTCIRCLED DIGIT NINECIRCLED NUMBER TENCIRCLED NUMBER ELEVENCIRCL" + + "ED NUMBER TWELVECIRCLED NUMBER THIRTEENCIRCLED NUMBER FOURTEENCIRCLED NU" + + "MBER FIFTEENCIRCLED NUMBER SIXTEENCIRCLED NUMBER SEVENTEENCIRCLED NUMBER" + + " EIGHTEENCIRCLED NUMBER NINETEENCIRCLED NUMBER TWENTYPARENTHESIZED DIGIT" + + " ONEPARENTHESIZED DIGIT TWOPARENTHESIZED DIGIT THREEPARENTHESIZED DIGIT " + + "FOURPARENTHESIZED DIGIT FIVEPARENTHESIZED DIGIT SIXPARENTHESIZED DIGIT S" + + "EVENPARENTHESIZED DIGIT EIGHTPARENTHESIZED DIGIT NINEPARENTHESIZED NUMBE" + + "R TENPARENTHESIZED NUMBER ELEVENPARENTHESIZED NUMBER TWELVEPARENTHESIZED" + + " NUMBER THIRTEENPARENTHESIZED NUMBER FOURTEENPARENTHESIZED NUMBER FIFTEE" + + "NPARENTHESIZED NUMBER SIXTEENPARENTHESIZED NUMBER SEVENTEENPARENTHESIZED" + + " NUMBER EIGHTEENPARENTHESIZED NUMBER NINETEENPARENTHESIZED NUMBER TWENTY" + + "DIGIT ONE FULL STOPDIGIT TWO FULL STOPDIGIT THREE FULL STOPDIGIT FOUR FU" + + "LL STOPDIGIT FIVE FULL STOPDIGIT SIX FULL STOPDIGIT SEVEN FULL STOPDIGIT" + + " EIGHT FULL STOPDIGIT NINE FULL STOPNUMBER TEN FULL STOPNUMBER ELEVEN FU" + + "LL STOPNUMBER TWELVE FULL STOPNUMBER THIRTEEN FULL STOPNUMBER FOURTEEN F" + + "ULL STOPNUMBER FIFTEEN FULL STOPNUMBER SIXTEEN FULL STOPNUMBER SEVENTEEN" + + " FULL STOPNUMBER EIGHTEEN FULL STOPNUMBER NINETEEN FULL STOPNUMBER TWENT" + + "Y FULL STOPPARENTHESIZED LATIN SMALL LETTER APARENTHESIZED LATIN SMALL L" + + "ETTER BPARENTHESIZED LATIN SMALL LETTER CPARENTHESIZED LATIN SMALL LETTE" + + "R DPARENTHESIZED LATIN SMALL LETTER EPARENTHESIZED LATIN SMALL LETTER FP" + + "ARENTHESIZED LATIN SMALL LETTER GPARENTHESIZED LATIN SMALL LETTER HPAREN" + + "THESIZED LATIN SMALL LETTER IPARENTHESIZED LATIN SMALL LETTER JPARENTHES" + + "IZED LATIN SMALL LETTER KPARENTHESIZED LATIN SMALL LETTER LPARENTHESIZED" + + " LATIN SMALL LETTER MPARENTHESIZED LATIN SMALL LETTER NPARENTHESIZED LAT" + + "IN SMALL LETTER OPARENTHESIZED LATIN SMALL LETTER PPARENTHESIZED LATIN S" + + "MALL LETTER QPARENTHESIZED LATIN SMALL LETTER RPARENTHESIZED LATIN SMALL" + + " LETTER SPARENTHESIZED LATIN SMALL LETTER TPARENTHESIZED LATIN SMALL LET" + + "TER UPARENTHESIZED LATIN SMALL LETTER VPARENTHESIZED LATIN SMALL LETTER " + + "WPARENTHESIZED LATIN SMALL LETTER XPARENTHESIZED LATIN SMALL LETTER YPAR" + + "ENTHESIZED LATIN SMALL LETTER ZCIRCLED LATIN CAPITAL LETTER ACIRCLED LAT" + + "IN CAPITAL LETTER BCIRCLED LATIN CAPITAL LETTER CCIRCLED LATIN CAPITAL L" + + "ETTER DCIRCLED LATIN CAPITAL LETTER ECIRCLED LATIN CAPITAL LETTER FCIRCL" + + "ED LATIN CAPITAL LETTER GCIRCLED LATIN CAPITAL LETTER HCIRCLED LATIN CAP" + + "ITAL LETTER ICIRCLED LATIN CAPITAL LETTER JCIRCLED LATIN CAPITAL LETTER " + + "KCIRCLED LATIN CAPITAL LETTER LCIRCLED LATIN CAPITAL LETTER MCIRCLED LAT") + ("" + + "IN CAPITAL LETTER NCIRCLED LATIN CAPITAL LETTER OCIRCLED LATIN CAPITAL L" + + "ETTER PCIRCLED LATIN CAPITAL LETTER QCIRCLED LATIN CAPITAL LETTER RCIRCL" + + "ED LATIN CAPITAL LETTER SCIRCLED LATIN CAPITAL LETTER TCIRCLED LATIN CAP" + + "ITAL LETTER UCIRCLED LATIN CAPITAL LETTER VCIRCLED LATIN CAPITAL LETTER " + + "WCIRCLED LATIN CAPITAL LETTER XCIRCLED LATIN CAPITAL LETTER YCIRCLED LAT" + + "IN CAPITAL LETTER ZCIRCLED LATIN SMALL LETTER ACIRCLED LATIN SMALL LETTE" + + "R BCIRCLED LATIN SMALL LETTER CCIRCLED LATIN SMALL LETTER DCIRCLED LATIN" + + " SMALL LETTER ECIRCLED LATIN SMALL LETTER FCIRCLED LATIN SMALL LETTER GC" + + "IRCLED LATIN SMALL LETTER HCIRCLED LATIN SMALL LETTER ICIRCLED LATIN SMA" + + "LL LETTER JCIRCLED LATIN SMALL LETTER KCIRCLED LATIN SMALL LETTER LCIRCL" + + "ED LATIN SMALL LETTER MCIRCLED LATIN SMALL LETTER NCIRCLED LATIN SMALL L" + + "ETTER OCIRCLED LATIN SMALL LETTER PCIRCLED LATIN SMALL LETTER QCIRCLED L" + + "ATIN SMALL LETTER RCIRCLED LATIN SMALL LETTER SCIRCLED LATIN SMALL LETTE" + + "R TCIRCLED LATIN SMALL LETTER UCIRCLED LATIN SMALL LETTER VCIRCLED LATIN" + + " SMALL LETTER WCIRCLED LATIN SMALL LETTER XCIRCLED LATIN SMALL LETTER YC" + + "IRCLED LATIN SMALL LETTER ZCIRCLED DIGIT ZERONEGATIVE CIRCLED NUMBER ELE" + + "VENNEGATIVE CIRCLED NUMBER TWELVENEGATIVE CIRCLED NUMBER THIRTEENNEGATIV" + + "E CIRCLED NUMBER FOURTEENNEGATIVE CIRCLED NUMBER FIFTEENNEGATIVE CIRCLED" + + " NUMBER SIXTEENNEGATIVE CIRCLED NUMBER SEVENTEENNEGATIVE CIRCLED NUMBER " + + "EIGHTEENNEGATIVE CIRCLED NUMBER NINETEENNEGATIVE CIRCLED NUMBER TWENTYDO" + + "UBLE CIRCLED DIGIT ONEDOUBLE CIRCLED DIGIT TWODOUBLE CIRCLED DIGIT THREE" + + "DOUBLE CIRCLED DIGIT FOURDOUBLE CIRCLED DIGIT FIVEDOUBLE CIRCLED DIGIT S" + + "IXDOUBLE CIRCLED DIGIT SEVENDOUBLE CIRCLED DIGIT EIGHTDOUBLE CIRCLED DIG" + + "IT NINEDOUBLE CIRCLED NUMBER TENNEGATIVE CIRCLED DIGIT ZEROBOX DRAWINGS " + + "LIGHT HORIZONTALBOX DRAWINGS HEAVY HORIZONTALBOX DRAWINGS LIGHT VERTICAL" + + "BOX DRAWINGS HEAVY VERTICALBOX DRAWINGS LIGHT TRIPLE DASH HORIZONTALBOX " + + "DRAWINGS HEAVY TRIPLE DASH HORIZONTALBOX DRAWINGS LIGHT TRIPLE DASH VERT" + + "ICALBOX DRAWINGS HEAVY TRIPLE DASH VERTICALBOX DRAWINGS LIGHT QUADRUPLE " + + "DASH HORIZONTALBOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTALBOX DRAWINGS " + + "LIGHT QUADRUPLE DASH VERTICALBOX DRAWINGS HEAVY QUADRUPLE DASH VERTICALB" + + "OX DRAWINGS LIGHT DOWN AND RIGHTBOX DRAWINGS DOWN LIGHT AND RIGHT HEAVYB" + + "OX DRAWINGS DOWN HEAVY AND RIGHT LIGHTBOX DRAWINGS HEAVY DOWN AND RIGHTB" + + "OX DRAWINGS LIGHT DOWN AND LEFTBOX DRAWINGS DOWN LIGHT AND LEFT HEAVYBOX" + + " DRAWINGS DOWN HEAVY AND LEFT LIGHTBOX DRAWINGS HEAVY DOWN AND LEFTBOX D" + + "RAWINGS LIGHT UP AND RIGHTBOX DRAWINGS UP LIGHT AND RIGHT HEAVYBOX DRAWI" + + "NGS UP HEAVY AND RIGHT LIGHTBOX DRAWINGS HEAVY UP AND RIGHTBOX DRAWINGS " + + "LIGHT UP AND LEFTBOX DRAWINGS UP LIGHT AND LEFT HEAVYBOX DRAWINGS UP HEA" + + "VY AND LEFT LIGHTBOX DRAWINGS HEAVY UP AND LEFTBOX DRAWINGS LIGHT VERTIC" + + "AL AND RIGHTBOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVYBOX DRAWINGS UP H" + + "EAVY AND RIGHT DOWN LIGHTBOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHTBOX D" + + "RAWINGS VERTICAL HEAVY AND RIGHT LIGHTBOX DRAWINGS DOWN LIGHT AND RIGHT " + + "UP HEAVYBOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVYBOX DRAWINGS HEAVY VER" + + "TICAL AND RIGHTBOX DRAWINGS LIGHT VERTICAL AND LEFTBOX DRAWINGS VERTICAL" + + " LIGHT AND LEFT HEAVYBOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHTBOX DRAWIN" + + "GS DOWN HEAVY AND LEFT UP LIGHTBOX DRAWINGS VERTICAL HEAVY AND LEFT LIGH" + + "TBOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVYBOX DRAWINGS UP LIGHT AND LEFT" + + " DOWN HEAVYBOX DRAWINGS HEAVY VERTICAL AND LEFTBOX DRAWINGS LIGHT DOWN A" + + "ND HORIZONTALBOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHTBOX DRAWINGS RI" + + "GHT HEAVY AND LEFT DOWN LIGHTBOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAV" + + "YBOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHTBOX DRAWINGS RIGHT LIGHT AN" + + "D LEFT DOWN HEAVYBOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVYBOX DRAWING" + + "S HEAVY DOWN AND HORIZONTALBOX DRAWINGS LIGHT UP AND HORIZONTALBOX DRAWI" + + "NGS LEFT HEAVY AND RIGHT UP LIGHTBOX DRAWINGS RIGHT HEAVY AND LEFT UP LI" + + "GHTBOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVYBOX DRAWINGS UP HEAVY AND H" + + "ORIZONTAL LIGHTBOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVYBOX DRAWINGS LE" + + "FT LIGHT AND RIGHT UP HEAVYBOX DRAWINGS HEAVY UP AND HORIZONTALBOX DRAWI" + + "NGS LIGHT VERTICAL AND HORIZONTALBOX DRAWINGS LEFT HEAVY AND RIGHT VERTI" + + "CAL LIGHTBOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHTBOX DRAWINGS VE" + + "RTICAL LIGHT AND HORIZONTAL HEAVYBOX DRAWINGS UP HEAVY AND DOWN HORIZONT" + + "AL LIGHTBOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHTBOX DRAWINGS VERT" + + "ICAL HEAVY AND HORIZONTAL LIGHTBOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN" + + " LIGHTBOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHTBOX DRAWINGS LEFT D" + + "OWN HEAVY AND RIGHT UP LIGHTBOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LI" + + "GHTBOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVYBOX DRAWINGS UP LIGHT ") + ("" + + "AND DOWN HORIZONTAL HEAVYBOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAV" + + "YBOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVYBOX DRAWINGS HEAVY VERT" + + "ICAL AND HORIZONTALBOX DRAWINGS LIGHT DOUBLE DASH HORIZONTALBOX DRAWINGS" + + " HEAVY DOUBLE DASH HORIZONTALBOX DRAWINGS LIGHT DOUBLE DASH VERTICALBOX " + + "DRAWINGS HEAVY DOUBLE DASH VERTICALBOX DRAWINGS DOUBLE HORIZONTALBOX DRA" + + "WINGS DOUBLE VERTICALBOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLEBOX DRAWIN" + + "GS DOWN DOUBLE AND RIGHT SINGLEBOX DRAWINGS DOUBLE DOWN AND RIGHTBOX DRA" + + "WINGS DOWN SINGLE AND LEFT DOUBLEBOX DRAWINGS DOWN DOUBLE AND LEFT SINGL" + + "EBOX DRAWINGS DOUBLE DOWN AND LEFTBOX DRAWINGS UP SINGLE AND RIGHT DOUBL" + + "EBOX DRAWINGS UP DOUBLE AND RIGHT SINGLEBOX DRAWINGS DOUBLE UP AND RIGHT" + + "BOX DRAWINGS UP SINGLE AND LEFT DOUBLEBOX DRAWINGS UP DOUBLE AND LEFT SI" + + "NGLEBOX DRAWINGS DOUBLE UP AND LEFTBOX DRAWINGS VERTICAL SINGLE AND RIGH" + + "T DOUBLEBOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLEBOX DRAWINGS DOUBLE" + + " VERTICAL AND RIGHTBOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLEBOX DRAWI" + + "NGS VERTICAL DOUBLE AND LEFT SINGLEBOX DRAWINGS DOUBLE VERTICAL AND LEFT" + + "BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLEBOX DRAWINGS DOWN DOUBLE A" + + "ND HORIZONTAL SINGLEBOX DRAWINGS DOUBLE DOWN AND HORIZONTALBOX DRAWINGS " + + "UP SINGLE AND HORIZONTAL DOUBLEBOX DRAWINGS UP DOUBLE AND HORIZONTAL SIN" + + "GLEBOX DRAWINGS DOUBLE UP AND HORIZONTALBOX DRAWINGS VERTICAL SINGLE AND" + + " HORIZONTAL DOUBLEBOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLEBOX " + + "DRAWINGS DOUBLE VERTICAL AND HORIZONTALBOX DRAWINGS LIGHT ARC DOWN AND R" + + "IGHTBOX DRAWINGS LIGHT ARC DOWN AND LEFTBOX DRAWINGS LIGHT ARC UP AND LE" + + "FTBOX DRAWINGS LIGHT ARC UP AND RIGHTBOX DRAWINGS LIGHT DIAGONAL UPPER R" + + "IGHT TO LOWER LEFTBOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHTB" + + "OX DRAWINGS LIGHT DIAGONAL CROSSBOX DRAWINGS LIGHT LEFTBOX DRAWINGS LIGH" + + "T UPBOX DRAWINGS LIGHT RIGHTBOX DRAWINGS LIGHT DOWNBOX DRAWINGS HEAVY LE" + + "FTBOX DRAWINGS HEAVY UPBOX DRAWINGS HEAVY RIGHTBOX DRAWINGS HEAVY DOWNBO" + + "X DRAWINGS LIGHT LEFT AND HEAVY RIGHTBOX DRAWINGS LIGHT UP AND HEAVY DOW" + + "NBOX DRAWINGS HEAVY LEFT AND LIGHT RIGHTBOX DRAWINGS HEAVY UP AND LIGHT " + + "DOWNUPPER HALF BLOCKLOWER ONE EIGHTH BLOCKLOWER ONE QUARTER BLOCKLOWER T" + + "HREE EIGHTHS BLOCKLOWER HALF BLOCKLOWER FIVE EIGHTHS BLOCKLOWER THREE QU" + + "ARTERS BLOCKLOWER SEVEN EIGHTHS BLOCKFULL BLOCKLEFT SEVEN EIGHTHS BLOCKL" + + "EFT THREE QUARTERS BLOCKLEFT FIVE EIGHTHS BLOCKLEFT HALF BLOCKLEFT THREE" + + " EIGHTHS BLOCKLEFT ONE QUARTER BLOCKLEFT ONE EIGHTH BLOCKRIGHT HALF BLOC" + + "KLIGHT SHADEMEDIUM SHADEDARK SHADEUPPER ONE EIGHTH BLOCKRIGHT ONE EIGHTH" + + " BLOCKQUADRANT LOWER LEFTQUADRANT LOWER RIGHTQUADRANT UPPER LEFTQUADRANT" + + " UPPER LEFT AND LOWER LEFT AND LOWER RIGHTQUADRANT UPPER LEFT AND LOWER " + + "RIGHTQUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFTQUADRANT UPPER LE" + + "FT AND UPPER RIGHT AND LOWER RIGHTQUADRANT UPPER RIGHTQUADRANT UPPER RIG" + + "HT AND LOWER LEFTQUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHTBLAC" + + "K SQUAREWHITE SQUAREWHITE SQUARE WITH ROUNDED CORNERSWHITE SQUARE CONTAI" + + "NING BLACK SMALL SQUARESQUARE WITH HORIZONTAL FILLSQUARE WITH VERTICAL F" + + "ILLSQUARE WITH ORTHOGONAL CROSSHATCH FILLSQUARE WITH UPPER LEFT TO LOWER" + + " RIGHT FILLSQUARE WITH UPPER RIGHT TO LOWER LEFT FILLSQUARE WITH DIAGONA" + + "L CROSSHATCH FILLBLACK SMALL SQUAREWHITE SMALL SQUAREBLACK RECTANGLEWHIT" + + "E RECTANGLEBLACK VERTICAL RECTANGLEWHITE VERTICAL RECTANGLEBLACK PARALLE" + + "LOGRAMWHITE PARALLELOGRAMBLACK UP-POINTING TRIANGLEWHITE UP-POINTING TRI" + + "ANGLEBLACK UP-POINTING SMALL TRIANGLEWHITE UP-POINTING SMALL TRIANGLEBLA" + + "CK RIGHT-POINTING TRIANGLEWHITE RIGHT-POINTING TRIANGLEBLACK RIGHT-POINT" + + "ING SMALL TRIANGLEWHITE RIGHT-POINTING SMALL TRIANGLEBLACK RIGHT-POINTIN" + + "G POINTERWHITE RIGHT-POINTING POINTERBLACK DOWN-POINTING TRIANGLEWHITE D" + + "OWN-POINTING TRIANGLEBLACK DOWN-POINTING SMALL TRIANGLEWHITE DOWN-POINTI" + + "NG SMALL TRIANGLEBLACK LEFT-POINTING TRIANGLEWHITE LEFT-POINTING TRIANGL" + + "EBLACK LEFT-POINTING SMALL TRIANGLEWHITE LEFT-POINTING SMALL TRIANGLEBLA" + + "CK LEFT-POINTING POINTERWHITE LEFT-POINTING POINTERBLACK DIAMONDWHITE DI" + + "AMONDWHITE DIAMOND CONTAINING BLACK SMALL DIAMONDFISHEYELOZENGEWHITE CIR" + + "CLEDOTTED CIRCLECIRCLE WITH VERTICAL FILLBULLSEYEBLACK CIRCLECIRCLE WITH" + + " LEFT HALF BLACKCIRCLE WITH RIGHT HALF BLACKCIRCLE WITH LOWER HALF BLACK" + + "CIRCLE WITH UPPER HALF BLACKCIRCLE WITH UPPER RIGHT QUADRANT BLACKCIRCLE" + + " WITH ALL BUT UPPER LEFT QUADRANT BLACKLEFT HALF BLACK CIRCLERIGHT HALF " + + "BLACK CIRCLEINVERSE BULLETINVERSE WHITE CIRCLEUPPER HALF INVERSE WHITE C" + + "IRCLELOWER HALF INVERSE WHITE CIRCLEUPPER LEFT QUADRANT CIRCULAR ARCUPPE" + + "R RIGHT QUADRANT CIRCULAR ARCLOWER RIGHT QUADRANT CIRCULAR ARCLOWER LEFT" + + " QUADRANT CIRCULAR ARCUPPER HALF CIRCLELOWER HALF CIRCLEBLACK LOWER RIGH") + ("" + + "T TRIANGLEBLACK LOWER LEFT TRIANGLEBLACK UPPER LEFT TRIANGLEBLACK UPPER " + + "RIGHT TRIANGLEWHITE BULLETSQUARE WITH LEFT HALF BLACKSQUARE WITH RIGHT H" + + "ALF BLACKSQUARE WITH UPPER LEFT DIAGONAL HALF BLACKSQUARE WITH LOWER RIG" + + "HT DIAGONAL HALF BLACKWHITE SQUARE WITH VERTICAL BISECTING LINEWHITE UP-" + + "POINTING TRIANGLE WITH DOTUP-POINTING TRIANGLE WITH LEFT HALF BLACKUP-PO" + + "INTING TRIANGLE WITH RIGHT HALF BLACKLARGE CIRCLEWHITE SQUARE WITH UPPER" + + " LEFT QUADRANTWHITE SQUARE WITH LOWER LEFT QUADRANTWHITE SQUARE WITH LOW" + + "ER RIGHT QUADRANTWHITE SQUARE WITH UPPER RIGHT QUADRANTWHITE CIRCLE WITH" + + " UPPER LEFT QUADRANTWHITE CIRCLE WITH LOWER LEFT QUADRANTWHITE CIRCLE WI" + + "TH LOWER RIGHT QUADRANTWHITE CIRCLE WITH UPPER RIGHT QUADRANTUPPER LEFT " + + "TRIANGLEUPPER RIGHT TRIANGLELOWER LEFT TRIANGLEWHITE MEDIUM SQUAREBLACK " + + "MEDIUM SQUAREWHITE MEDIUM SMALL SQUAREBLACK MEDIUM SMALL SQUARELOWER RIG" + + "HT TRIANGLEBLACK SUN WITH RAYSCLOUDUMBRELLASNOWMANCOMETBLACK STARWHITE S" + + "TARLIGHTNINGTHUNDERSTORMSUNASCENDING NODEDESCENDING NODECONJUNCTIONOPPOS" + + "ITIONBLACK TELEPHONEWHITE TELEPHONEBALLOT BOXBALLOT BOX WITH CHECKBALLOT" + + " BOX WITH XSALTIREUMBRELLA WITH RAIN DROPSHOT BEVERAGEWHITE SHOGI PIECEB" + + "LACK SHOGI PIECESHAMROCKREVERSED ROTATED FLORAL HEART BULLETBLACK LEFT P" + + "OINTING INDEXBLACK RIGHT POINTING INDEXWHITE LEFT POINTING INDEXWHITE UP" + + " POINTING INDEXWHITE RIGHT POINTING INDEXWHITE DOWN POINTING INDEXSKULL " + + "AND CROSSBONESCAUTION SIGNRADIOACTIVE SIGNBIOHAZARD SIGNCADUCEUSANKHORTH" + + "ODOX CROSSCHI RHOCROSS OF LORRAINECROSS OF JERUSALEMSTAR AND CRESCENTFAR" + + "SI SYMBOLADI SHAKTIHAMMER AND SICKLEPEACE SYMBOLYIN YANGTRIGRAM FOR HEAV" + + "ENTRIGRAM FOR LAKETRIGRAM FOR FIRETRIGRAM FOR THUNDERTRIGRAM FOR WINDTRI" + + "GRAM FOR WATERTRIGRAM FOR MOUNTAINTRIGRAM FOR EARTHWHEEL OF DHARMAWHITE " + + "FROWNING FACEWHITE SMILING FACEBLACK SMILING FACEWHITE SUN WITH RAYSFIRS" + + "T QUARTER MOONLAST QUARTER MOONMERCURYFEMALE SIGNEARTHMALE SIGNJUPITERSA" + + "TURNURANUSNEPTUNEPLUTOARIESTAURUSGEMINICANCERLEOVIRGOLIBRASCORPIUSSAGITT" + + "ARIUSCAPRICORNAQUARIUSPISCESWHITE CHESS KINGWHITE CHESS QUEENWHITE CHESS" + + " ROOKWHITE CHESS BISHOPWHITE CHESS KNIGHTWHITE CHESS PAWNBLACK CHESS KIN" + + "GBLACK CHESS QUEENBLACK CHESS ROOKBLACK CHESS BISHOPBLACK CHESS KNIGHTBL" + + "ACK CHESS PAWNBLACK SPADE SUITWHITE HEART SUITWHITE DIAMOND SUITBLACK CL" + + "UB SUITWHITE SPADE SUITBLACK HEART SUITBLACK DIAMOND SUITWHITE CLUB SUIT" + + "HOT SPRINGSQUARTER NOTEEIGHTH NOTEBEAMED EIGHTH NOTESBEAMED SIXTEENTH NO" + + "TESMUSIC FLAT SIGNMUSIC NATURAL SIGNMUSIC SHARP SIGNWEST SYRIAC CROSSEAS" + + "T SYRIAC CROSSUNIVERSAL RECYCLING SYMBOLRECYCLING SYMBOL FOR TYPE-1 PLAS" + + "TICSRECYCLING SYMBOL FOR TYPE-2 PLASTICSRECYCLING SYMBOL FOR TYPE-3 PLAS" + + "TICSRECYCLING SYMBOL FOR TYPE-4 PLASTICSRECYCLING SYMBOL FOR TYPE-5 PLAS" + + "TICSRECYCLING SYMBOL FOR TYPE-6 PLASTICSRECYCLING SYMBOL FOR TYPE-7 PLAS" + + "TICSRECYCLING SYMBOL FOR GENERIC MATERIALSBLACK UNIVERSAL RECYCLING SYMB" + + "OLRECYCLED PAPER SYMBOLPARTIALLY-RECYCLED PAPER SYMBOLPERMANENT PAPER SI" + + "GNWHEELCHAIR SYMBOLDIE FACE-1DIE FACE-2DIE FACE-3DIE FACE-4DIE FACE-5DIE" + + " FACE-6WHITE CIRCLE WITH DOT RIGHTWHITE CIRCLE WITH TWO DOTSBLACK CIRCLE" + + " WITH WHITE DOT RIGHTBLACK CIRCLE WITH TWO WHITE DOTSMONOGRAM FOR YANGMO" + + "NOGRAM FOR YINDIGRAM FOR GREATER YANGDIGRAM FOR LESSER YINDIGRAM FOR LES" + + "SER YANGDIGRAM FOR GREATER YINWHITE FLAGBLACK FLAGHAMMER AND PICKANCHORC" + + "ROSSED SWORDSSTAFF OF AESCULAPIUSSCALESALEMBICFLOWERGEARSTAFF OF HERMESA" + + "TOM SYMBOLFLEUR-DE-LISOUTLINED WHITE STARTHREE LINES CONVERGING RIGHTTHR" + + "EE LINES CONVERGING LEFTWARNING SIGNHIGH VOLTAGE SIGNDOUBLED FEMALE SIGN" + + "DOUBLED MALE SIGNINTERLOCKED FEMALE AND MALE SIGNMALE AND FEMALE SIGNMAL" + + "E WITH STROKE SIGNMALE WITH STROKE AND MALE AND FEMALE SIGNVERTICAL MALE" + + " WITH STROKE SIGNHORIZONTAL MALE WITH STROKE SIGNMEDIUM WHITE CIRCLEMEDI" + + "UM BLACK CIRCLEMEDIUM SMALL WHITE CIRCLEMARRIAGE SYMBOLDIVORCE SYMBOLUNM" + + "ARRIED PARTNERSHIP SYMBOLCOFFINFUNERAL URNNEUTERCERESPALLASJUNOVESTACHIR" + + "ONBLACK MOON LILITHSEXTILESEMISEXTILEQUINCUNXSESQUIQUADRATESOCCER BALLBA" + + "SEBALLSQUARED KEYWHITE DRAUGHTS MANWHITE DRAUGHTS KINGBLACK DRAUGHTS MAN" + + "BLACK DRAUGHTS KINGSNOWMAN WITHOUT SNOWSUN BEHIND CLOUDRAINBLACK SNOWMAN" + + "THUNDER CLOUD AND RAINTURNED WHITE SHOGI PIECETURNED BLACK SHOGI PIECEWH" + + "ITE DIAMOND IN SQUARECROSSING LANESDISABLED CAROPHIUCHUSPICKCAR SLIDINGH" + + "ELMET WITH WHITE CROSSCIRCLED CROSSING LANESCHAINSNO ENTRYALTERNATE ONE-" + + "WAY LEFT WAY TRAFFICBLACK TWO-WAY LEFT WAY TRAFFICWHITE TWO-WAY LEFT WAY" + + " TRAFFICBLACK LEFT LANE MERGEWHITE LEFT LANE MERGEDRIVE SLOW SIGNHEAVY W" + + "HITE DOWN-POINTING TRIANGLELEFT CLOSED ENTRYSQUARED SALTIREFALLING DIAGO" + + "NAL IN WHITE CIRCLE IN BLACK SQUAREBLACK TRUCKRESTRICTED LEFT ENTRY-1RES" + + "TRICTED LEFT ENTRY-2ASTRONOMICAL SYMBOL FOR URANUSHEAVY CIRCLE WITH STRO") + ("" + + "KE AND TWO DOTS ABOVEPENTAGRAMRIGHT-HANDED INTERLACED PENTAGRAMLEFT-HAND" + + "ED INTERLACED PENTAGRAMINVERTED PENTAGRAMBLACK CROSS ON SHIELDSHINTO SHR" + + "INECHURCHCASTLEHISTORIC SITEGEAR WITHOUT HUBGEAR WITH HANDLESMAP SYMBOL " + + "FOR LIGHTHOUSEMOUNTAINUMBRELLA ON GROUNDFOUNTAINFLAG IN HOLEFERRYSAILBOA" + + "TSQUARE FOUR CORNERSSKIERICE SKATEPERSON WITH BALLTENTJAPANESE BANK SYMB" + + "OLHEADSTONE GRAVEYARD SYMBOLFUEL PUMPCUP ON BLACK SQUAREWHITE FLAG WITH " + + "HORIZONTAL MIDDLE BLACK STRIPEBLACK SAFETY SCISSORSUPPER BLADE SCISSORSB" + + "LACK SCISSORSLOWER BLADE SCISSORSWHITE SCISSORSWHITE HEAVY CHECK MARKTEL" + + "EPHONE LOCATION SIGNTAPE DRIVEAIRPLANEENVELOPERAISED FISTRAISED HANDVICT" + + "ORY HANDWRITING HANDLOWER RIGHT PENCILPENCILUPPER RIGHT PENCILWHITE NIBB" + + "LACK NIBCHECK MARKHEAVY CHECK MARKMULTIPLICATION XHEAVY MULTIPLICATION X" + + "BALLOT XHEAVY BALLOT XOUTLINED GREEK CROSSHEAVY GREEK CROSSOPEN CENTRE C" + + "ROSSHEAVY OPEN CENTRE CROSSLATIN CROSSSHADOWED WHITE LATIN CROSSOUTLINED" + + " LATIN CROSSMALTESE CROSSSTAR OF DAVIDFOUR TEARDROP-SPOKED ASTERISKFOUR " + + "BALLOON-SPOKED ASTERISKHEAVY FOUR BALLOON-SPOKED ASTERISKFOUR CLUB-SPOKE" + + "D ASTERISKBLACK FOUR POINTED STARWHITE FOUR POINTED STARSPARKLESSTRESS O" + + "UTLINED WHITE STARCIRCLED WHITE STAROPEN CENTRE BLACK STARBLACK CENTRE W" + + "HITE STAROUTLINED BLACK STARHEAVY OUTLINED BLACK STARPINWHEEL STARSHADOW" + + "ED WHITE STARHEAVY ASTERISKOPEN CENTRE ASTERISKEIGHT SPOKED ASTERISKEIGH" + + "T POINTED BLACK STAREIGHT POINTED PINWHEEL STARSIX POINTED BLACK STAREIG" + + "HT POINTED RECTILINEAR BLACK STARHEAVY EIGHT POINTED RECTILINEAR BLACK S" + + "TARTWELVE POINTED BLACK STARSIXTEEN POINTED ASTERISKTEARDROP-SPOKED ASTE" + + "RISKOPEN CENTRE TEARDROP-SPOKED ASTERISKHEAVY TEARDROP-SPOKED ASTERISKSI" + + "X PETALLED BLACK AND WHITE FLORETTEBLACK FLORETTEWHITE FLORETTEEIGHT PET" + + "ALLED OUTLINED BLACK FLORETTECIRCLED OPEN CENTRE EIGHT POINTED STARHEAVY" + + " TEARDROP-SPOKED PINWHEEL ASTERISKSNOWFLAKETIGHT TRIFOLIATE SNOWFLAKEHEA" + + "VY CHEVRON SNOWFLAKESPARKLEHEAVY SPARKLEBALLOON-SPOKED ASTERISKEIGHT TEA" + + "RDROP-SPOKED PROPELLER ASTERISKHEAVY EIGHT TEARDROP-SPOKED PROPELLER AST" + + "ERISKCROSS MARKSHADOWED WHITE CIRCLENEGATIVE SQUARED CROSS MARKLOWER RIG" + + "HT DROP-SHADOWED WHITE SQUAREUPPER RIGHT DROP-SHADOWED WHITE SQUARELOWER" + + " RIGHT SHADOWED WHITE SQUAREUPPER RIGHT SHADOWED WHITE SQUAREBLACK QUEST" + + "ION MARK ORNAMENTWHITE QUESTION MARK ORNAMENTWHITE EXCLAMATION MARK ORNA" + + "MENTBLACK DIAMOND MINUS WHITE XHEAVY EXCLAMATION MARK SYMBOLLIGHT VERTIC" + + "AL BARMEDIUM VERTICAL BARHEAVY VERTICAL BARHEAVY SINGLE TURNED COMMA QUO" + + "TATION MARK ORNAMENTHEAVY SINGLE COMMA QUOTATION MARK ORNAMENTHEAVY DOUB" + + "LE TURNED COMMA QUOTATION MARK ORNAMENTHEAVY DOUBLE COMMA QUOTATION MARK" + + " ORNAMENTHEAVY LOW SINGLE COMMA QUOTATION MARK ORNAMENTHEAVY LOW DOUBLE " + + "COMMA QUOTATION MARK ORNAMENTCURVED STEM PARAGRAPH SIGN ORNAMENTHEAVY EX" + + "CLAMATION MARK ORNAMENTHEAVY HEART EXCLAMATION MARK ORNAMENTHEAVY BLACK " + + "HEARTROTATED HEAVY BLACK HEART BULLETFLORAL HEARTROTATED FLORAL HEART BU" + + "LLETMEDIUM LEFT PARENTHESIS ORNAMENTMEDIUM RIGHT PARENTHESIS ORNAMENTMED" + + "IUM FLATTENED LEFT PARENTHESIS ORNAMENTMEDIUM FLATTENED RIGHT PARENTHESI" + + "S ORNAMENTMEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENTMEDIUM RIGHT-POINTI" + + "NG ANGLE BRACKET ORNAMENTHEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAME" + + "NTHEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENTHEAVY LEFT-POINTING " + + "ANGLE BRACKET ORNAMENTHEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENTLIGHT L" + + "EFT TORTOISE SHELL BRACKET ORNAMENTLIGHT RIGHT TORTOISE SHELL BRACKET OR" + + "NAMENTMEDIUM LEFT CURLY BRACKET ORNAMENTMEDIUM RIGHT CURLY BRACKET ORNAM" + + "ENTDINGBAT NEGATIVE CIRCLED DIGIT ONEDINGBAT NEGATIVE CIRCLED DIGIT TWOD" + + "INGBAT NEGATIVE CIRCLED DIGIT THREEDINGBAT NEGATIVE CIRCLED DIGIT FOURDI" + + "NGBAT NEGATIVE CIRCLED DIGIT FIVEDINGBAT NEGATIVE CIRCLED DIGIT SIXDINGB" + + "AT NEGATIVE CIRCLED DIGIT SEVENDINGBAT NEGATIVE CIRCLED DIGIT EIGHTDINGB" + + "AT NEGATIVE CIRCLED DIGIT NINEDINGBAT NEGATIVE CIRCLED NUMBER TENDINGBAT" + + " CIRCLED SANS-SERIF DIGIT ONEDINGBAT CIRCLED SANS-SERIF DIGIT TWODINGBAT" + + " CIRCLED SANS-SERIF DIGIT THREEDINGBAT CIRCLED SANS-SERIF DIGIT FOURDING" + + "BAT CIRCLED SANS-SERIF DIGIT FIVEDINGBAT CIRCLED SANS-SERIF DIGIT SIXDIN" + + "GBAT CIRCLED SANS-SERIF DIGIT SEVENDINGBAT CIRCLED SANS-SERIF DIGIT EIGH" + + "TDINGBAT CIRCLED SANS-SERIF DIGIT NINEDINGBAT CIRCLED SANS-SERIF NUMBER " + + "TENDINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONEDINGBAT NEGATIVE CIRCLED" + + " SANS-SERIF DIGIT TWODINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREEDING" + + "BAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOURDINGBAT NEGATIVE CIRCLED SANS-" + + "SERIF DIGIT FIVEDINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIXDINGBAT NEG" + + "ATIVE CIRCLED SANS-SERIF DIGIT SEVENDINGBAT NEGATIVE CIRCLED SANS-SERIF " + + "DIGIT EIGHTDINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINEDINGBAT NEGATIV") + ("" + + "E CIRCLED SANS-SERIF NUMBER TENHEAVY WIDE-HEADED RIGHTWARDS ARROWHEAVY P" + + "LUS SIGNHEAVY MINUS SIGNHEAVY DIVISION SIGNHEAVY SOUTH EAST ARROWHEAVY R" + + "IGHTWARDS ARROWHEAVY NORTH EAST ARROWDRAFTING POINT RIGHTWARDS ARROWHEAV" + + "Y ROUND-TIPPED RIGHTWARDS ARROWTRIANGLE-HEADED RIGHTWARDS ARROWHEAVY TRI" + + "ANGLE-HEADED RIGHTWARDS ARROWDASHED TRIANGLE-HEADED RIGHTWARDS ARROWHEAV" + + "Y DASHED TRIANGLE-HEADED RIGHTWARDS ARROWBLACK RIGHTWARDS ARROWTHREE-D T" + + "OP-LIGHTED RIGHTWARDS ARROWHEADTHREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHE" + + "ADBLACK RIGHTWARDS ARROWHEADHEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS " + + "ARROWHEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROWSQUAT BLACK RIGHTWAR" + + "DS ARROWHEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROWRIGHT-SHADED WHITE R" + + "IGHTWARDS ARROWLEFT-SHADED WHITE RIGHTWARDS ARROWBACK-TILTED SHADOWED WH" + + "ITE RIGHTWARDS ARROWFRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROWHEAVY LO" + + "WER RIGHT-SHADOWED WHITE RIGHTWARDS ARROWHEAVY UPPER RIGHT-SHADOWED WHIT" + + "E RIGHTWARDS ARROWNOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROWCUR" + + "LY LOOPNOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROWCIRCLED HEAVY " + + "WHITE RIGHTWARDS ARROWWHITE-FEATHERED RIGHTWARDS ARROWBLACK-FEATHERED SO" + + "UTH EAST ARROWBLACK-FEATHERED RIGHTWARDS ARROWBLACK-FEATHERED NORTH EAST" + + " ARROWHEAVY BLACK-FEATHERED SOUTH EAST ARROWHEAVY BLACK-FEATHERED RIGHTW" + + "ARDS ARROWHEAVY BLACK-FEATHERED NORTH EAST ARROWTEARDROP-BARBED RIGHTWAR" + + "DS ARROWHEAVY TEARDROP-SHANKED RIGHTWARDS ARROWWEDGE-TAILED RIGHTWARDS A" + + "RROWHEAVY WEDGE-TAILED RIGHTWARDS ARROWOPEN-OUTLINED RIGHTWARDS ARROWDOU" + + "BLE CURLY LOOPTHREE DIMENSIONAL ANGLEWHITE TRIANGLE CONTAINING SMALL WHI" + + "TE TRIANGLEPERPENDICULAROPEN SUBSETOPEN SUPERSETLEFT S-SHAPED BAG DELIMI" + + "TERRIGHT S-SHAPED BAG DELIMITEROR WITH DOT INSIDEREVERSE SOLIDUS PRECEDI" + + "NG SUBSETSUPERSET PRECEDING SOLIDUSVERTICAL BAR WITH HORIZONTAL STROKEMA" + + "THEMATICAL RISING DIAGONALLONG DIVISIONMATHEMATICAL FALLING DIAGONALSQUA" + + "RED LOGICAL ANDSQUARED LOGICAL ORWHITE DIAMOND WITH CENTRED DOTAND WITH " + + "DOTELEMENT OF OPENING UPWARDSLOWER RIGHT CORNER WITH DOTUPPER LEFT CORNE" + + "R WITH DOTLEFT OUTER JOINRIGHT OUTER JOINFULL OUTER JOINLARGE UP TACKLAR" + + "GE DOWN TACKLEFT AND RIGHT DOUBLE TURNSTILELEFT AND RIGHT TACKLEFT MULTI" + + "MAPLONG RIGHT TACKLONG LEFT TACKUP TACK WITH CIRCLE ABOVELOZENGE DIVIDED" + + " BY HORIZONTAL RULEWHITE CONCAVE-SIDED DIAMONDWHITE CONCAVE-SIDED DIAMON" + + "D WITH LEFTWARDS TICKWHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICKWHI" + + "TE SQUARE WITH LEFTWARDS TICKWHITE SQUARE WITH RIGHTWARDS TICKMATHEMATIC" + + "AL LEFT WHITE SQUARE BRACKETMATHEMATICAL RIGHT WHITE SQUARE BRACKETMATHE" + + "MATICAL LEFT ANGLE BRACKETMATHEMATICAL RIGHT ANGLE BRACKETMATHEMATICAL L" + + "EFT DOUBLE ANGLE BRACKETMATHEMATICAL RIGHT DOUBLE ANGLE BRACKETMATHEMATI" + + "CAL LEFT WHITE TORTOISE SHELL BRACKETMATHEMATICAL RIGHT WHITE TORTOISE S" + + "HELL BRACKETMATHEMATICAL LEFT FLATTENED PARENTHESISMATHEMATICAL RIGHT FL" + + "ATTENED PARENTHESISUPWARDS QUADRUPLE ARROWDOWNWARDS QUADRUPLE ARROWANTIC" + + "LOCKWISE GAPPED CIRCLE ARROWCLOCKWISE GAPPED CIRCLE ARROWRIGHT ARROW WIT" + + "H CIRCLED PLUSLONG LEFTWARDS ARROWLONG RIGHTWARDS ARROWLONG LEFT RIGHT A" + + "RROWLONG LEFTWARDS DOUBLE ARROWLONG RIGHTWARDS DOUBLE ARROWLONG LEFT RIG" + + "HT DOUBLE ARROWLONG LEFTWARDS ARROW FROM BARLONG RIGHTWARDS ARROW FROM B" + + "ARLONG LEFTWARDS DOUBLE ARROW FROM BARLONG RIGHTWARDS DOUBLE ARROW FROM " + + "BARLONG RIGHTWARDS SQUIGGLE ARROWBRAILLE PATTERN BLANKBRAILLE PATTERN DO" + + "TS-1BRAILLE PATTERN DOTS-2BRAILLE PATTERN DOTS-12BRAILLE PATTERN DOTS-3B" + + "RAILLE PATTERN DOTS-13BRAILLE PATTERN DOTS-23BRAILLE PATTERN DOTS-123BRA" + + "ILLE PATTERN DOTS-4BRAILLE PATTERN DOTS-14BRAILLE PATTERN DOTS-24BRAILLE" + + " PATTERN DOTS-124BRAILLE PATTERN DOTS-34BRAILLE PATTERN DOTS-134BRAILLE " + + "PATTERN DOTS-234BRAILLE PATTERN DOTS-1234BRAILLE PATTERN DOTS-5BRAILLE P" + + "ATTERN DOTS-15BRAILLE PATTERN DOTS-25BRAILLE PATTERN DOTS-125BRAILLE PAT" + + "TERN DOTS-35BRAILLE PATTERN DOTS-135BRAILLE PATTERN DOTS-235BRAILLE PATT" + + "ERN DOTS-1235BRAILLE PATTERN DOTS-45BRAILLE PATTERN DOTS-145BRAILLE PATT" + + "ERN DOTS-245BRAILLE PATTERN DOTS-1245BRAILLE PATTERN DOTS-345BRAILLE PAT" + + "TERN DOTS-1345BRAILLE PATTERN DOTS-2345BRAILLE PATTERN DOTS-12345BRAILLE" + + " PATTERN DOTS-6BRAILLE PATTERN DOTS-16BRAILLE PATTERN DOTS-26BRAILLE PAT" + + "TERN DOTS-126BRAILLE PATTERN DOTS-36BRAILLE PATTERN DOTS-136BRAILLE PATT" + + "ERN DOTS-236BRAILLE PATTERN DOTS-1236BRAILLE PATTERN DOTS-46BRAILLE PATT" + + "ERN DOTS-146BRAILLE PATTERN DOTS-246BRAILLE PATTERN DOTS-1246BRAILLE PAT" + + "TERN DOTS-346BRAILLE PATTERN DOTS-1346BRAILLE PATTERN DOTS-2346BRAILLE P" + + "ATTERN DOTS-12346BRAILLE PATTERN DOTS-56BRAILLE PATTERN DOTS-156BRAILLE " + + "PATTERN DOTS-256BRAILLE PATTERN DOTS-1256BRAILLE PATTERN DOTS-356BRAILLE" + + " PATTERN DOTS-1356BRAILLE PATTERN DOTS-2356BRAILLE PATTERN DOTS-12356BRA") + ("" + + "ILLE PATTERN DOTS-456BRAILLE PATTERN DOTS-1456BRAILLE PATTERN DOTS-2456B" + + "RAILLE PATTERN DOTS-12456BRAILLE PATTERN DOTS-3456BRAILLE PATTERN DOTS-1" + + "3456BRAILLE PATTERN DOTS-23456BRAILLE PATTERN DOTS-123456BRAILLE PATTERN" + + " DOTS-7BRAILLE PATTERN DOTS-17BRAILLE PATTERN DOTS-27BRAILLE PATTERN DOT" + + "S-127BRAILLE PATTERN DOTS-37BRAILLE PATTERN DOTS-137BRAILLE PATTERN DOTS" + + "-237BRAILLE PATTERN DOTS-1237BRAILLE PATTERN DOTS-47BRAILLE PATTERN DOTS" + + "-147BRAILLE PATTERN DOTS-247BRAILLE PATTERN DOTS-1247BRAILLE PATTERN DOT" + + "S-347BRAILLE PATTERN DOTS-1347BRAILLE PATTERN DOTS-2347BRAILLE PATTERN D" + + "OTS-12347BRAILLE PATTERN DOTS-57BRAILLE PATTERN DOTS-157BRAILLE PATTERN " + + "DOTS-257BRAILLE PATTERN DOTS-1257BRAILLE PATTERN DOTS-357BRAILLE PATTERN" + + " DOTS-1357BRAILLE PATTERN DOTS-2357BRAILLE PATTERN DOTS-12357BRAILLE PAT" + + "TERN DOTS-457BRAILLE PATTERN DOTS-1457BRAILLE PATTERN DOTS-2457BRAILLE P" + + "ATTERN DOTS-12457BRAILLE PATTERN DOTS-3457BRAILLE PATTERN DOTS-13457BRAI" + + "LLE PATTERN DOTS-23457BRAILLE PATTERN DOTS-123457BRAILLE PATTERN DOTS-67" + + "BRAILLE PATTERN DOTS-167BRAILLE PATTERN DOTS-267BRAILLE PATTERN DOTS-126" + + "7BRAILLE PATTERN DOTS-367BRAILLE PATTERN DOTS-1367BRAILLE PATTERN DOTS-2" + + "367BRAILLE PATTERN DOTS-12367BRAILLE PATTERN DOTS-467BRAILLE PATTERN DOT" + + "S-1467BRAILLE PATTERN DOTS-2467BRAILLE PATTERN DOTS-12467BRAILLE PATTERN" + + " DOTS-3467BRAILLE PATTERN DOTS-13467BRAILLE PATTERN DOTS-23467BRAILLE PA" + + "TTERN DOTS-123467BRAILLE PATTERN DOTS-567BRAILLE PATTERN DOTS-1567BRAILL" + + "E PATTERN DOTS-2567BRAILLE PATTERN DOTS-12567BRAILLE PATTERN DOTS-3567BR" + + "AILLE PATTERN DOTS-13567BRAILLE PATTERN DOTS-23567BRAILLE PATTERN DOTS-1" + + "23567BRAILLE PATTERN DOTS-4567BRAILLE PATTERN DOTS-14567BRAILLE PATTERN " + + "DOTS-24567BRAILLE PATTERN DOTS-124567BRAILLE PATTERN DOTS-34567BRAILLE P" + + "ATTERN DOTS-134567BRAILLE PATTERN DOTS-234567BRAILLE PATTERN DOTS-123456" + + "7BRAILLE PATTERN DOTS-8BRAILLE PATTERN DOTS-18BRAILLE PATTERN DOTS-28BRA" + + "ILLE PATTERN DOTS-128BRAILLE PATTERN DOTS-38BRAILLE PATTERN DOTS-138BRAI" + + "LLE PATTERN DOTS-238BRAILLE PATTERN DOTS-1238BRAILLE PATTERN DOTS-48BRAI" + + "LLE PATTERN DOTS-148BRAILLE PATTERN DOTS-248BRAILLE PATTERN DOTS-1248BRA" + + "ILLE PATTERN DOTS-348BRAILLE PATTERN DOTS-1348BRAILLE PATTERN DOTS-2348B" + + "RAILLE PATTERN DOTS-12348BRAILLE PATTERN DOTS-58BRAILLE PATTERN DOTS-158" + + "BRAILLE PATTERN DOTS-258BRAILLE PATTERN DOTS-1258BRAILLE PATTERN DOTS-35" + + "8BRAILLE PATTERN DOTS-1358BRAILLE PATTERN DOTS-2358BRAILLE PATTERN DOTS-" + + "12358BRAILLE PATTERN DOTS-458BRAILLE PATTERN DOTS-1458BRAILLE PATTERN DO" + + "TS-2458BRAILLE PATTERN DOTS-12458BRAILLE PATTERN DOTS-3458BRAILLE PATTER" + + "N DOTS-13458BRAILLE PATTERN DOTS-23458BRAILLE PATTERN DOTS-123458BRAILLE" + + " PATTERN DOTS-68BRAILLE PATTERN DOTS-168BRAILLE PATTERN DOTS-268BRAILLE " + + "PATTERN DOTS-1268BRAILLE PATTERN DOTS-368BRAILLE PATTERN DOTS-1368BRAILL" + + "E PATTERN DOTS-2368BRAILLE PATTERN DOTS-12368BRAILLE PATTERN DOTS-468BRA" + + "ILLE PATTERN DOTS-1468BRAILLE PATTERN DOTS-2468BRAILLE PATTERN DOTS-1246" + + "8BRAILLE PATTERN DOTS-3468BRAILLE PATTERN DOTS-13468BRAILLE PATTERN DOTS" + + "-23468BRAILLE PATTERN DOTS-123468BRAILLE PATTERN DOTS-568BRAILLE PATTERN" + + " DOTS-1568BRAILLE PATTERN DOTS-2568BRAILLE PATTERN DOTS-12568BRAILLE PAT" + + "TERN DOTS-3568BRAILLE PATTERN DOTS-13568BRAILLE PATTERN DOTS-23568BRAILL" + + "E PATTERN DOTS-123568BRAILLE PATTERN DOTS-4568BRAILLE PATTERN DOTS-14568" + + "BRAILLE PATTERN DOTS-24568BRAILLE PATTERN DOTS-124568BRAILLE PATTERN DOT" + + "S-34568BRAILLE PATTERN DOTS-134568BRAILLE PATTERN DOTS-234568BRAILLE PAT" + + "TERN DOTS-1234568BRAILLE PATTERN DOTS-78BRAILLE PATTERN DOTS-178BRAILLE " + + "PATTERN DOTS-278BRAILLE PATTERN DOTS-1278BRAILLE PATTERN DOTS-378BRAILLE" + + " PATTERN DOTS-1378BRAILLE PATTERN DOTS-2378BRAILLE PATTERN DOTS-12378BRA" + + "ILLE PATTERN DOTS-478BRAILLE PATTERN DOTS-1478BRAILLE PATTERN DOTS-2478B" + + "RAILLE PATTERN DOTS-12478BRAILLE PATTERN DOTS-3478BRAILLE PATTERN DOTS-1" + + "3478BRAILLE PATTERN DOTS-23478BRAILLE PATTERN DOTS-123478BRAILLE PATTERN" + + " DOTS-578BRAILLE PATTERN DOTS-1578BRAILLE PATTERN DOTS-2578BRAILLE PATTE" + + "RN DOTS-12578BRAILLE PATTERN DOTS-3578BRAILLE PATTERN DOTS-13578BRAILLE " + + "PATTERN DOTS-23578BRAILLE PATTERN DOTS-123578BRAILLE PATTERN DOTS-4578BR" + + "AILLE PATTERN DOTS-14578BRAILLE PATTERN DOTS-24578BRAILLE PATTERN DOTS-1" + + "24578BRAILLE PATTERN DOTS-34578BRAILLE PATTERN DOTS-134578BRAILLE PATTER" + + "N DOTS-234578BRAILLE PATTERN DOTS-1234578BRAILLE PATTERN DOTS-678BRAILLE" + + " PATTERN DOTS-1678BRAILLE PATTERN DOTS-2678BRAILLE PATTERN DOTS-12678BRA" + + "ILLE PATTERN DOTS-3678BRAILLE PATTERN DOTS-13678BRAILLE PATTERN DOTS-236" + + "78BRAILLE PATTERN DOTS-123678BRAILLE PATTERN DOTS-4678BRAILLE PATTERN DO" + + "TS-14678BRAILLE PATTERN DOTS-24678BRAILLE PATTERN DOTS-124678BRAILLE PAT" + + "TERN DOTS-34678BRAILLE PATTERN DOTS-134678BRAILLE PATTERN DOTS-234678BRA") + ("" + + "ILLE PATTERN DOTS-1234678BRAILLE PATTERN DOTS-5678BRAILLE PATTERN DOTS-1" + + "5678BRAILLE PATTERN DOTS-25678BRAILLE PATTERN DOTS-125678BRAILLE PATTERN" + + " DOTS-35678BRAILLE PATTERN DOTS-135678BRAILLE PATTERN DOTS-235678BRAILLE" + + " PATTERN DOTS-1235678BRAILLE PATTERN DOTS-45678BRAILLE PATTERN DOTS-1456" + + "78BRAILLE PATTERN DOTS-245678BRAILLE PATTERN DOTS-1245678BRAILLE PATTERN" + + " DOTS-345678BRAILLE PATTERN DOTS-1345678BRAILLE PATTERN DOTS-2345678BRAI" + + "LLE PATTERN DOTS-12345678RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROK" + + "ERIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKELEFTWARDS DOUBLE" + + " ARROW WITH VERTICAL STROKERIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKEL" + + "EFT RIGHT DOUBLE ARROW WITH VERTICAL STROKERIGHTWARDS TWO-HEADED ARROW F" + + "ROM BARLEFTWARDS DOUBLE ARROW FROM BARRIGHTWARDS DOUBLE ARROW FROM BARDO" + + "WNWARDS ARROW WITH HORIZONTAL STROKEUPWARDS ARROW WITH HORIZONTAL STROKE" + + "UPWARDS TRIPLE ARROWDOWNWARDS TRIPLE ARROWLEFTWARDS DOUBLE DASH ARROWRIG" + + "HTWARDS DOUBLE DASH ARROWLEFTWARDS TRIPLE DASH ARROWRIGHTWARDS TRIPLE DA" + + "SH ARROWRIGHTWARDS TWO-HEADED TRIPLE DASH ARROWRIGHTWARDS ARROW WITH DOT" + + "TED STEMUPWARDS ARROW TO BARDOWNWARDS ARROW TO BARRIGHTWARDS ARROW WITH " + + "TAIL WITH VERTICAL STROKERIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL" + + " STROKERIGHTWARDS TWO-HEADED ARROW WITH TAILRIGHTWARDS TWO-HEADED ARROW " + + "WITH TAIL WITH VERTICAL STROKERIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH" + + " DOUBLE VERTICAL STROKELEFTWARDS ARROW-TAILRIGHTWARDS ARROW-TAILLEFTWARD" + + "S DOUBLE ARROW-TAILRIGHTWARDS DOUBLE ARROW-TAILLEFTWARDS ARROW TO BLACK " + + "DIAMONDRIGHTWARDS ARROW TO BLACK DIAMONDLEFTWARDS ARROW FROM BAR TO BLAC" + + "K DIAMONDRIGHTWARDS ARROW FROM BAR TO BLACK DIAMONDNORTH WEST AND SOUTH " + + "EAST ARROWNORTH EAST AND SOUTH WEST ARROWNORTH WEST ARROW WITH HOOKNORTH" + + " EAST ARROW WITH HOOKSOUTH EAST ARROW WITH HOOKSOUTH WEST ARROW WITH HOO" + + "KNORTH WEST ARROW AND NORTH EAST ARROWNORTH EAST ARROW AND SOUTH EAST AR" + + "ROWSOUTH EAST ARROW AND SOUTH WEST ARROWSOUTH WEST ARROW AND NORTH WEST " + + "ARROWRISING DIAGONAL CROSSING FALLING DIAGONALFALLING DIAGONAL CROSSING " + + "RISING DIAGONALSOUTH EAST ARROW CROSSING NORTH EAST ARROWNORTH EAST ARRO" + + "W CROSSING SOUTH EAST ARROWFALLING DIAGONAL CROSSING NORTH EAST ARROWRIS" + + "ING DIAGONAL CROSSING SOUTH EAST ARROWNORTH EAST ARROW CROSSING NORTH WE" + + "ST ARROWNORTH WEST ARROW CROSSING NORTH EAST ARROWWAVE ARROW POINTING DI" + + "RECTLY RIGHTARROW POINTING RIGHTWARDS THEN CURVING UPWARDSARROW POINTING" + + " RIGHTWARDS THEN CURVING DOWNWARDSARROW POINTING DOWNWARDS THEN CURVING " + + "LEFTWARDSARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDSRIGHT-SIDE ARC " + + "CLOCKWISE ARROWLEFT-SIDE ARC ANTICLOCKWISE ARROWTOP ARC ANTICLOCKWISE AR" + + "ROWBOTTOM ARC ANTICLOCKWISE ARROWTOP ARC CLOCKWISE ARROW WITH MINUSTOP A" + + "RC ANTICLOCKWISE ARROW WITH PLUSLOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW" + + "LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROWANTICLOCKWISE CLOSED CIRCLE A" + + "RROWCLOCKWISE CLOSED CIRCLE ARROWRIGHTWARDS ARROW ABOVE SHORT LEFTWARDS " + + "ARROWLEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROWSHORT RIGHTWARDS ARROW " + + "ABOVE LEFTWARDS ARROWRIGHTWARDS ARROW WITH PLUS BELOWLEFTWARDS ARROW WIT" + + "H PLUS BELOWRIGHTWARDS ARROW THROUGH XLEFT RIGHT ARROW THROUGH SMALL CIR" + + "CLEUPWARDS TWO-HEADED ARROW FROM SMALL CIRCLELEFT BARB UP RIGHT BARB DOW" + + "N HARPOONLEFT BARB DOWN RIGHT BARB UP HARPOONUP BARB RIGHT DOWN BARB LEF" + + "T HARPOONUP BARB LEFT DOWN BARB RIGHT HARPOONLEFT BARB UP RIGHT BARB UP " + + "HARPOONUP BARB RIGHT DOWN BARB RIGHT HARPOONLEFT BARB DOWN RIGHT BARB DO" + + "WN HARPOONUP BARB LEFT DOWN BARB LEFT HARPOONLEFTWARDS HARPOON WITH BARB" + + " UP TO BARRIGHTWARDS HARPOON WITH BARB UP TO BARUPWARDS HARPOON WITH BAR" + + "B RIGHT TO BARDOWNWARDS HARPOON WITH BARB RIGHT TO BARLEFTWARDS HARPOON " + + "WITH BARB DOWN TO BARRIGHTWARDS HARPOON WITH BARB DOWN TO BARUPWARDS HAR" + + "POON WITH BARB LEFT TO BARDOWNWARDS HARPOON WITH BARB LEFT TO BARLEFTWAR" + + "DS HARPOON WITH BARB UP FROM BARRIGHTWARDS HARPOON WITH BARB UP FROM BAR" + + "UPWARDS HARPOON WITH BARB RIGHT FROM BARDOWNWARDS HARPOON WITH BARB RIGH" + + "T FROM BARLEFTWARDS HARPOON WITH BARB DOWN FROM BARRIGHTWARDS HARPOON WI" + + "TH BARB DOWN FROM BARUPWARDS HARPOON WITH BARB LEFT FROM BARDOWNWARDS HA" + + "RPOON WITH BARB LEFT FROM BARLEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWA" + + "RDS HARPOON WITH BARB DOWNUPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS " + + "HARPOON WITH BARB RIGHTRIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS " + + "HARPOON WITH BARB DOWNDOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS " + + "HARPOON WITH BARB RIGHTLEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS H" + + "ARPOON WITH BARB UPLEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HAR" + + "POON WITH BARB DOWNRIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPO" + + "ON WITH BARB UPRIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON") + ("" + + " WITH BARB DOWNLEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASHLEFTWARDS H" + + "ARPOON WITH BARB DOWN BELOW LONG DASHRIGHTWARDS HARPOON WITH BARB UP ABO" + + "VE LONG DASHRIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASHUPWARDS HAR" + + "POON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHTDOWNWARDS HA" + + "RPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHTRIGHT DOUBLE " + + "ARROW WITH ROUNDED HEADEQUALS SIGN ABOVE RIGHTWARDS ARROWTILDE OPERATOR " + + "ABOVE RIGHTWARDS ARROWLEFTWARDS ARROW ABOVE TILDE OPERATORRIGHTWARDS ARR" + + "OW ABOVE TILDE OPERATORRIGHTWARDS ARROW ABOVE ALMOST EQUAL TOLESS-THAN A" + + "BOVE LEFTWARDS ARROWLEFTWARDS ARROW THROUGH LESS-THANGREATER-THAN ABOVE " + + "RIGHTWARDS ARROWSUBSET ABOVE RIGHTWARDS ARROWLEFTWARDS ARROW THROUGH SUB" + + "SETSUPERSET ABOVE LEFTWARDS ARROWLEFT FISH TAILRIGHT FISH TAILUP FISH TA" + + "ILDOWN FISH TAILTRIPLE VERTICAL BAR DELIMITERZ NOTATION SPOTZ NOTATION T" + + "YPE COLONLEFT WHITE CURLY BRACKETRIGHT WHITE CURLY BRACKETLEFT WHITE PAR" + + "ENTHESISRIGHT WHITE PARENTHESISZ NOTATION LEFT IMAGE BRACKETZ NOTATION R" + + "IGHT IMAGE BRACKETZ NOTATION LEFT BINDING BRACKETZ NOTATION RIGHT BINDIN" + + "G BRACKETLEFT SQUARE BRACKET WITH UNDERBARRIGHT SQUARE BRACKET WITH UNDE" + + "RBARLEFT SQUARE BRACKET WITH TICK IN TOP CORNERRIGHT SQUARE BRACKET WITH" + + " TICK IN BOTTOM CORNERLEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNERRIGH" + + "T SQUARE BRACKET WITH TICK IN TOP CORNERLEFT ANGLE BRACKET WITH DOTRIGHT" + + " ANGLE BRACKET WITH DOTLEFT ARC LESS-THAN BRACKETRIGHT ARC GREATER-THAN " + + "BRACKETDOUBLE LEFT ARC GREATER-THAN BRACKETDOUBLE RIGHT ARC LESS-THAN BR" + + "ACKETLEFT BLACK TORTOISE SHELL BRACKETRIGHT BLACK TORTOISE SHELL BRACKET" + + "DOTTED FENCEVERTICAL ZIGZAG LINEMEASURED ANGLE OPENING LEFTRIGHT ANGLE V" + + "ARIANT WITH SQUAREMEASURED RIGHT ANGLE WITH DOTANGLE WITH S INSIDEACUTE " + + "ANGLESPHERICAL ANGLE OPENING LEFTSPHERICAL ANGLE OPENING UPTURNED ANGLER" + + "EVERSED ANGLEANGLE WITH UNDERBARREVERSED ANGLE WITH UNDERBAROBLIQUE ANGL" + + "E OPENING UPOBLIQUE ANGLE OPENING DOWNMEASURED ANGLE WITH OPEN ARM ENDIN" + + "G IN ARROW POINTING UP AND RIGHTMEASURED ANGLE WITH OPEN ARM ENDING IN A" + + "RROW POINTING UP AND LEFTMEASURED ANGLE WITH OPEN ARM ENDING IN ARROW PO" + + "INTING DOWN AND RIGHTMEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTI" + + "NG DOWN AND LEFTMEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RI" + + "GHT AND UPMEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND" + + " UPMEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWNM" + + "EASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWNREVERS" + + "ED EMPTY SETEMPTY SET WITH OVERBAREMPTY SET WITH SMALL CIRCLE ABOVEEMPTY" + + " SET WITH RIGHT ARROW ABOVEEMPTY SET WITH LEFT ARROW ABOVECIRCLE WITH HO" + + "RIZONTAL BARCIRCLED VERTICAL BARCIRCLED PARALLELCIRCLED REVERSE SOLIDUSC" + + "IRCLED PERPENDICULARCIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDE" + + "D BY VERTICAL BARCIRCLE WITH SUPERIMPOSED XCIRCLED ANTICLOCKWISE-ROTATED" + + " DIVISION SIGNUP ARROW THROUGH CIRCLECIRCLED WHITE BULLETCIRCLED BULLETC" + + "IRCLED LESS-THANCIRCLED GREATER-THANCIRCLE WITH SMALL CIRCLE TO THE RIGH" + + "TCIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHTSQUARED RISING DIAGONAL " + + "SLASHSQUARED FALLING DIAGONAL SLASHSQUARED ASTERISKSQUARED SMALL CIRCLES" + + "QUARED SQUARETWO JOINED SQUARESTRIANGLE WITH DOT ABOVETRIANGLE WITH UNDE" + + "RBARS IN TRIANGLETRIANGLE WITH SERIFS AT BOTTOMRIGHT TRIANGLE ABOVE LEFT" + + " TRIANGLELEFT TRIANGLE BESIDE VERTICAL BARVERTICAL BAR BESIDE RIGHT TRIA" + + "NGLEBOWTIE WITH LEFT HALF BLACKBOWTIE WITH RIGHT HALF BLACKBLACK BOWTIET" + + "IMES WITH LEFT HALF BLACKTIMES WITH RIGHT HALF BLACKWHITE HOURGLASSBLACK" + + " HOURGLASSLEFT WIGGLY FENCERIGHT WIGGLY FENCELEFT DOUBLE WIGGLY FENCERIG" + + "HT DOUBLE WIGGLY FENCEINCOMPLETE INFINITYTIE OVER INFINITYINFINITY NEGAT" + + "ED WITH VERTICAL BARDOUBLE-ENDED MULTIMAPSQUARE WITH CONTOURED OUTLINEIN" + + "CREASES ASSHUFFLE PRODUCTEQUALS SIGN AND SLANTED PARALLELEQUALS SIGN AND" + + " SLANTED PARALLEL WITH TILDE ABOVEIDENTICAL TO AND SLANTED PARALLELGLEIC" + + "H STARKTHERMODYNAMICDOWN-POINTING TRIANGLE WITH LEFT HALF BLACKDOWN-POIN" + + "TING TRIANGLE WITH RIGHT HALF BLACKBLACK DIAMOND WITH DOWN ARROWBLACK LO" + + "ZENGEWHITE CIRCLE WITH DOWN ARROWBLACK CIRCLE WITH DOWN ARROWERROR-BARRE" + + "D WHITE SQUAREERROR-BARRED BLACK SQUAREERROR-BARRED WHITE DIAMONDERROR-B" + + "ARRED BLACK DIAMONDERROR-BARRED WHITE CIRCLEERROR-BARRED BLACK CIRCLERUL" + + "E-DELAYEDREVERSE SOLIDUS OPERATORSOLIDUS WITH OVERBARREVERSE SOLIDUS WIT" + + "H HORIZONTAL STROKEBIG SOLIDUSBIG REVERSE SOLIDUSDOUBLE PLUSTRIPLE PLUSL" + + "EFT-POINTING CURVED ANGLE BRACKETRIGHT-POINTING CURVED ANGLE BRACKETTINY" + + "MINYN-ARY CIRCLED DOT OPERATORN-ARY CIRCLED PLUS OPERATORN-ARY CIRCLED T" + + "IMES OPERATORN-ARY UNION OPERATOR WITH DOTN-ARY UNION OPERATOR WITH PLUS" + + "N-ARY SQUARE INTERSECTION OPERATORN-ARY SQUARE UNION OPERATORTWO LOGICAL") + ("" + + " AND OPERATORTWO LOGICAL OR OPERATORN-ARY TIMES OPERATORMODULO TWO SUMSU" + + "MMATION WITH INTEGRALQUADRUPLE INTEGRAL OPERATORFINITE PART INTEGRALINTE" + + "GRAL WITH DOUBLE STROKEINTEGRAL AVERAGE WITH SLASHCIRCULATION FUNCTIONAN" + + "TICLOCKWISE INTEGRATIONLINE INTEGRATION WITH RECTANGULAR PATH AROUND POL" + + "ELINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLELINE INTEGRATION NOT" + + " INCLUDING THE POLEINTEGRAL AROUND A POINT OPERATORQUATERNION INTEGRAL O" + + "PERATORINTEGRAL WITH LEFTWARDS ARROW WITH HOOKINTEGRAL WITH TIMES SIGNIN" + + "TEGRAL WITH INTERSECTIONINTEGRAL WITH UNIONINTEGRAL WITH OVERBARINTEGRAL" + + " WITH UNDERBARJOINLARGE LEFT TRIANGLE OPERATORZ NOTATION SCHEMA COMPOSIT" + + "IONZ NOTATION SCHEMA PIPINGZ NOTATION SCHEMA PROJECTIONPLUS SIGN WITH SM" + + "ALL CIRCLE ABOVEPLUS SIGN WITH CIRCUMFLEX ACCENT ABOVEPLUS SIGN WITH TIL" + + "DE ABOVEPLUS SIGN WITH DOT BELOWPLUS SIGN WITH TILDE BELOWPLUS SIGN WITH" + + " SUBSCRIPT TWOPLUS SIGN WITH BLACK TRIANGLEMINUS SIGN WITH COMMA ABOVEMI" + + "NUS SIGN WITH DOT BELOWMINUS SIGN WITH FALLING DOTSMINUS SIGN WITH RISIN" + + "G DOTSPLUS SIGN IN LEFT HALF CIRCLEPLUS SIGN IN RIGHT HALF CIRCLEVECTOR " + + "OR CROSS PRODUCTMULTIPLICATION SIGN WITH DOT ABOVEMULTIPLICATION SIGN WI" + + "TH UNDERBARSEMIDIRECT PRODUCT WITH BOTTOM CLOSEDSMASH PRODUCTMULTIPLICAT" + + "ION SIGN IN LEFT HALF CIRCLEMULTIPLICATION SIGN IN RIGHT HALF CIRCLECIRC" + + "LED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENTMULTIPLICATION SIGN IN DOU" + + "BLE CIRCLECIRCLED DIVISION SIGNPLUS SIGN IN TRIANGLEMINUS SIGN IN TRIANG" + + "LEMULTIPLICATION SIGN IN TRIANGLEINTERIOR PRODUCTRIGHTHAND INTERIOR PROD" + + "UCTZ NOTATION RELATIONAL COMPOSITIONAMALGAMATION OR COPRODUCTINTERSECTIO" + + "N WITH DOTUNION WITH MINUS SIGNUNION WITH OVERBARINTERSECTION WITH OVERB" + + "ARINTERSECTION WITH LOGICAL ANDUNION WITH LOGICAL ORUNION ABOVE INTERSEC" + + "TIONINTERSECTION ABOVE UNIONUNION ABOVE BAR ABOVE INTERSECTIONINTERSECTI" + + "ON ABOVE BAR ABOVE UNIONUNION BESIDE AND JOINED WITH UNIONINTERSECTION B" + + "ESIDE AND JOINED WITH INTERSECTIONCLOSED UNION WITH SERIFSCLOSED INTERSE" + + "CTION WITH SERIFSDOUBLE SQUARE INTERSECTIONDOUBLE SQUARE UNIONCLOSED UNI" + + "ON WITH SERIFS AND SMASH PRODUCTLOGICAL AND WITH DOT ABOVELOGICAL OR WIT" + + "H DOT ABOVEDOUBLE LOGICAL ANDDOUBLE LOGICAL ORTWO INTERSECTING LOGICAL A" + + "NDTWO INTERSECTING LOGICAL ORSLOPING LARGE ORSLOPING LARGE ANDLOGICAL OR" + + " OVERLAPPING LOGICAL ANDLOGICAL AND WITH MIDDLE STEMLOGICAL OR WITH MIDD" + + "LE STEMLOGICAL AND WITH HORIZONTAL DASHLOGICAL OR WITH HORIZONTAL DASHLO" + + "GICAL AND WITH DOUBLE OVERBARLOGICAL AND WITH UNDERBARLOGICAL AND WITH D" + + "OUBLE UNDERBARSMALL VEE WITH UNDERBARLOGICAL OR WITH DOUBLE OVERBARLOGIC" + + "AL OR WITH DOUBLE UNDERBARZ NOTATION DOMAIN ANTIRESTRICTIONZ NOTATION RA" + + "NGE ANTIRESTRICTIONEQUALS SIGN WITH DOT BELOWIDENTICAL WITH DOT ABOVETRI" + + "PLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKETRIPLE HORIZONTAL BAR WITH" + + " TRIPLE VERTICAL STROKETILDE OPERATOR WITH DOT ABOVETILDE OPERATOR WITH " + + "RISING DOTSSIMILAR MINUS SIMILARCONGRUENT WITH DOT ABOVEEQUALS WITH ASTE" + + "RISKALMOST EQUAL TO WITH CIRCUMFLEX ACCENTAPPROXIMATELY EQUAL OR EQUAL T" + + "OEQUALS SIGN ABOVE PLUS SIGNPLUS SIGN ABOVE EQUALS SIGNEQUALS SIGN ABOVE" + + " TILDE OPERATORDOUBLE COLON EQUALTWO CONSECUTIVE EQUALS SIGNSTHREE CONSE" + + "CUTIVE EQUALS SIGNSEQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOWEQU" + + "IVALENT WITH FOUR DOTS ABOVELESS-THAN WITH CIRCLE INSIDEGREATER-THAN WIT" + + "H CIRCLE INSIDELESS-THAN WITH QUESTION MARK ABOVEGREATER-THAN WITH QUEST" + + "ION MARK ABOVELESS-THAN OR SLANTED EQUAL TOGREATER-THAN OR SLANTED EQUAL" + + " TOLESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDEGREATER-THAN OR SLANTED " + + "EQUAL TO WITH DOT INSIDELESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVEGREA" + + "TER-THAN OR SLANTED EQUAL TO WITH DOT ABOVELESS-THAN OR SLANTED EQUAL TO" + + " WITH DOT ABOVE RIGHTGREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEF" + + "TLESS-THAN OR APPROXIMATEGREATER-THAN OR APPROXIMATELESS-THAN AND SINGLE" + + "-LINE NOT EQUAL TOGREATER-THAN AND SINGLE-LINE NOT EQUAL TOLESS-THAN AND" + + " NOT APPROXIMATEGREATER-THAN AND NOT APPROXIMATELESS-THAN ABOVE DOUBLE-L" + + "INE EQUAL ABOVE GREATER-THANGREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE L" + + "ESS-THANLESS-THAN ABOVE SIMILAR OR EQUALGREATER-THAN ABOVE SIMILAR OR EQ" + + "UALLESS-THAN ABOVE SIMILAR ABOVE GREATER-THANGREATER-THAN ABOVE SIMILAR " + + "ABOVE LESS-THANLESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUALGREAT" + + "ER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUALLESS-THAN ABOVE SLANTED E" + + "QUAL ABOVE GREATER-THAN ABOVE SLANTED EQUALGREATER-THAN ABOVE SLANTED EQ" + + "UAL ABOVE LESS-THAN ABOVE SLANTED EQUALSLANTED EQUAL TO OR LESS-THANSLAN" + + "TED EQUAL TO OR GREATER-THANSLANTED EQUAL TO OR LESS-THAN WITH DOT INSID" + + "ESLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDEDOUBLE-LINE EQUAL TO OR" + + " LESS-THANDOUBLE-LINE EQUAL TO OR GREATER-THANDOUBLE-LINE SLANTED EQUAL ") + ("" + + "TO OR LESS-THANDOUBLE-LINE SLANTED EQUAL TO OR GREATER-THANSIMILAR OR LE" + + "SS-THANSIMILAR OR GREATER-THANSIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGNS" + + "IMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGNDOUBLE NESTED LESS-THANDOUBLE" + + " NESTED GREATER-THANDOUBLE NESTED LESS-THAN WITH UNDERBARGREATER-THAN OV" + + "ERLAPPING LESS-THANGREATER-THAN BESIDE LESS-THANLESS-THAN CLOSED BY CURV" + + "EGREATER-THAN CLOSED BY CURVELESS-THAN CLOSED BY CURVE ABOVE SLANTED EQU" + + "ALGREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUALSMALLER THANLARGER THA" + + "NSMALLER THAN OR EQUAL TOLARGER THAN OR EQUAL TOEQUALS SIGN WITH BUMPY A" + + "BOVEPRECEDES ABOVE SINGLE-LINE EQUALS SIGNSUCCEEDS ABOVE SINGLE-LINE EQU" + + "ALS SIGNPRECEDES ABOVE SINGLE-LINE NOT EQUAL TOSUCCEEDS ABOVE SINGLE-LIN" + + "E NOT EQUAL TOPRECEDES ABOVE EQUALS SIGNSUCCEEDS ABOVE EQUALS SIGNPRECED" + + "ES ABOVE NOT EQUAL TOSUCCEEDS ABOVE NOT EQUAL TOPRECEDES ABOVE ALMOST EQ" + + "UAL TOSUCCEEDS ABOVE ALMOST EQUAL TOPRECEDES ABOVE NOT ALMOST EQUAL TOSU" + + "CCEEDS ABOVE NOT ALMOST EQUAL TODOUBLE PRECEDESDOUBLE SUCCEEDSSUBSET WIT" + + "H DOTSUPERSET WITH DOTSUBSET WITH PLUS SIGN BELOWSUPERSET WITH PLUS SIGN" + + " BELOWSUBSET WITH MULTIPLICATION SIGN BELOWSUPERSET WITH MULTIPLICATION " + + "SIGN BELOWSUBSET OF OR EQUAL TO WITH DOT ABOVESUPERSET OF OR EQUAL TO WI" + + "TH DOT ABOVESUBSET OF ABOVE EQUALS SIGNSUPERSET OF ABOVE EQUALS SIGNSUBS" + + "ET OF ABOVE TILDE OPERATORSUPERSET OF ABOVE TILDE OPERATORSUBSET OF ABOV" + + "E ALMOST EQUAL TOSUPERSET OF ABOVE ALMOST EQUAL TOSUBSET OF ABOVE NOT EQ" + + "UAL TOSUPERSET OF ABOVE NOT EQUAL TOSQUARE LEFT OPEN BOX OPERATORSQUARE " + + "RIGHT OPEN BOX OPERATORCLOSED SUBSETCLOSED SUPERSETCLOSED SUBSET OR EQUA" + + "L TOCLOSED SUPERSET OR EQUAL TOSUBSET ABOVE SUPERSETSUPERSET ABOVE SUBSE" + + "TSUBSET ABOVE SUBSETSUPERSET ABOVE SUPERSETSUPERSET BESIDE SUBSETSUPERSE" + + "T BESIDE AND JOINED BY DASH WITH SUBSETELEMENT OF OPENING DOWNWARDSPITCH" + + "FORK WITH TEE TOPTRANSVERSAL INTERSECTIONFORKINGNONFORKINGSHORT LEFT TAC" + + "KSHORT DOWN TACKSHORT UP TACKPERPENDICULAR WITH SVERTICAL BAR TRIPLE RIG" + + "HT TURNSTILEDOUBLE VERTICAL BAR LEFT TURNSTILEVERTICAL BAR DOUBLE LEFT T" + + "URNSTILEDOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILELONG DASH FROM LEFT MEM" + + "BER OF DOUBLE VERTICALSHORT DOWN TACK WITH OVERBARSHORT UP TACK WITH UND" + + "ERBARSHORT UP TACK ABOVE SHORT DOWN TACKDOUBLE DOWN TACKDOUBLE UP TACKDO" + + "UBLE STROKE NOT SIGNREVERSED DOUBLE STROKE NOT SIGNDOES NOT DIVIDE WITH " + + "REVERSED NEGATION SLASHVERTICAL LINE WITH CIRCLE ABOVEVERTICAL LINE WITH" + + " CIRCLE BELOWDOWN TACK WITH CIRCLE BELOWPARALLEL WITH HORIZONTAL STROKEP" + + "ARALLEL WITH TILDE OPERATORTRIPLE VERTICAL BAR BINARY RELATIONTRIPLE VER" + + "TICAL BAR WITH HORIZONTAL STROKETRIPLE COLON OPERATORTRIPLE NESTED LESS-" + + "THANTRIPLE NESTED GREATER-THANDOUBLE-LINE SLANTED LESS-THAN OR EQUAL TOD" + + "OUBLE-LINE SLANTED GREATER-THAN OR EQUAL TOTRIPLE SOLIDUS BINARY RELATIO" + + "NLARGE TRIPLE VERTICAL BAR OPERATORDOUBLE SOLIDUS OPERATORWHITE VERTICAL" + + " BARN-ARY WHITE VERTICAL BARNORTH EAST WHITE ARROWNORTH WEST WHITE ARROW" + + "SOUTH EAST WHITE ARROWSOUTH WEST WHITE ARROWLEFT RIGHT WHITE ARROWLEFTWA" + + "RDS BLACK ARROWUPWARDS BLACK ARROWDOWNWARDS BLACK ARROWNORTH EAST BLACK " + + "ARROWNORTH WEST BLACK ARROWSOUTH EAST BLACK ARROWSOUTH WEST BLACK ARROWL" + + "EFT RIGHT BLACK ARROWUP DOWN BLACK ARROWRIGHTWARDS ARROW WITH TIP DOWNWA" + + "RDSRIGHTWARDS ARROW WITH TIP UPWARDSLEFTWARDS ARROW WITH TIP DOWNWARDSLE" + + "FTWARDS ARROW WITH TIP UPWARDSSQUARE WITH TOP HALF BLACKSQUARE WITH BOTT" + + "OM HALF BLACKSQUARE WITH UPPER RIGHT DIAGONAL HALF BLACKSQUARE WITH LOWE" + + "R LEFT DIAGONAL HALF BLACKDIAMOND WITH LEFT HALF BLACKDIAMOND WITH RIGHT" + + " HALF BLACKDIAMOND WITH TOP HALF BLACKDIAMOND WITH BOTTOM HALF BLACKDOTT" + + "ED SQUAREBLACK LARGE SQUAREWHITE LARGE SQUAREBLACK VERY SMALL SQUAREWHIT" + + "E VERY SMALL SQUAREBLACK PENTAGONWHITE PENTAGONWHITE HEXAGONBLACK HEXAGO" + + "NHORIZONTAL BLACK HEXAGONBLACK LARGE CIRCLEBLACK MEDIUM DIAMONDWHITE MED" + + "IUM DIAMONDBLACK MEDIUM LOZENGEWHITE MEDIUM LOZENGEBLACK SMALL DIAMONDBL" + + "ACK SMALL LOZENGEWHITE SMALL LOZENGEBLACK HORIZONTAL ELLIPSEWHITE HORIZO" + + "NTAL ELLIPSEBLACK VERTICAL ELLIPSEWHITE VERTICAL ELLIPSELEFT ARROW WITH " + + "SMALL CIRCLETHREE LEFTWARDS ARROWSLEFT ARROW WITH CIRCLED PLUSLONG LEFTW" + + "ARDS SQUIGGLE ARROWLEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKELEFTWA" + + "RDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKELEFTWARDS TWO-HEADED ARR" + + "OW FROM BARLEFTWARDS TWO-HEADED TRIPLE DASH ARROWLEFTWARDS ARROW WITH DO" + + "TTED STEMLEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKELEFTWARDS ARROW W" + + "ITH TAIL WITH DOUBLE VERTICAL STROKELEFTWARDS TWO-HEADED ARROW WITH TAIL" + + "LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKELEFTWARDS TWO-H" + + "EADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKELEFTWARDS ARROW THROUGH" + + " XWAVE ARROW POINTING DIRECTLY LEFTEQUALS SIGN ABOVE LEFTWARDS ARROWREVE") + ("" + + "RSE TILDE OPERATOR ABOVE LEFTWARDS ARROWLEFTWARDS ARROW ABOVE REVERSE AL" + + "MOST EQUAL TORIGHTWARDS ARROW THROUGH GREATER-THANRIGHTWARDS ARROW THROU" + + "GH SUPERSETLEFTWARDS QUADRUPLE ARROWRIGHTWARDS QUADRUPLE ARROWREVERSE TI" + + "LDE OPERATOR ABOVE RIGHTWARDS ARROWRIGHTWARDS ARROW ABOVE REVERSE ALMOST" + + " EQUAL TOTILDE OPERATOR ABOVE LEFTWARDS ARROWLEFTWARDS ARROW ABOVE ALMOS" + + "T EQUAL TOLEFTWARDS ARROW ABOVE REVERSE TILDE OPERATORRIGHTWARDS ARROW A" + + "BOVE REVERSE TILDE OPERATORDOWNWARDS TRIANGLE-HEADED ZIGZAG ARROWSHORT S" + + "LANTED NORTH ARROWSHORT BACKSLANTED SOUTH ARROWWHITE MEDIUM STARBLACK SM" + + "ALL STARWHITE SMALL STARBLACK RIGHT-POINTING PENTAGONWHITE RIGHT-POINTIN" + + "G PENTAGONHEAVY LARGE CIRCLEHEAVY OVAL WITH OVAL INSIDEHEAVY CIRCLE WITH" + + " CIRCLE INSIDEHEAVY CIRCLEHEAVY CIRCLED SALTIRESLANTED NORTH ARROW WITH " + + "HOOKED HEADBACKSLANTED SOUTH ARROW WITH HOOKED TAILSLANTED NORTH ARROW W" + + "ITH HORIZONTAL TAILBACKSLANTED SOUTH ARROW WITH HORIZONTAL TAILBENT ARRO" + + "W POINTING DOWNWARDS THEN NORTH EASTSHORT BENT ARROW POINTING DOWNWARDS " + + "THEN NORTH EASTLEFTWARDS TRIANGLE-HEADED ARROWUPWARDS TRIANGLE-HEADED AR" + + "ROWRIGHTWARDS TRIANGLE-HEADED ARROWDOWNWARDS TRIANGLE-HEADED ARROWLEFT R" + + "IGHT TRIANGLE-HEADED ARROWUP DOWN TRIANGLE-HEADED ARROWNORTH WEST TRIANG" + + "LE-HEADED ARROWNORTH EAST TRIANGLE-HEADED ARROWSOUTH EAST TRIANGLE-HEADE" + + "D ARROWSOUTH WEST TRIANGLE-HEADED ARROWLEFTWARDS TRIANGLE-HEADED DASHED " + + "ARROWUPWARDS TRIANGLE-HEADED DASHED ARROWRIGHTWARDS TRIANGLE-HEADED DASH" + + "ED ARROWDOWNWARDS TRIANGLE-HEADED DASHED ARROWCLOCKWISE TRIANGLE-HEADED " + + "OPEN CIRCLE ARROWANTICLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROWLEFTWARD" + + "S TRIANGLE-HEADED ARROW TO BARUPWARDS TRIANGLE-HEADED ARROW TO BARRIGHTW" + + "ARDS TRIANGLE-HEADED ARROW TO BARDOWNWARDS TRIANGLE-HEADED ARROW TO BARN" + + "ORTH WEST TRIANGLE-HEADED ARROW TO BARNORTH EAST TRIANGLE-HEADED ARROW T" + + "O BARSOUTH EAST TRIANGLE-HEADED ARROW TO BARSOUTH WEST TRIANGLE-HEADED A" + + "RROW TO BARLEFTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE" + + "UPWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKERIGHTWARDS TR" + + "IANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKEDOWNWARDS TRIANGLE-HEAD" + + "ED ARROW WITH DOUBLE HORIZONTAL STROKEHORIZONTAL TAB KEYVERTICAL TAB KEY" + + "LEFTWARDS TRIANGLE-HEADED ARROW OVER RIGHTWARDS TRIANGLE-HEADED ARROWUPW" + + "ARDS TRIANGLE-HEADED ARROW LEFTWARDS OF DOWNWARDS TRIANGLE-HEADED ARROWR" + + "IGHTWARDS TRIANGLE-HEADED ARROW OVER LEFTWARDS TRIANGLE-HEADED ARROWDOWN" + + "WARDS TRIANGLE-HEADED ARROW LEFTWARDS OF UPWARDS TRIANGLE-HEADED ARROWLE" + + "FTWARDS TRIANGLE-HEADED PAIRED ARROWSUPWARDS TRIANGLE-HEADED PAIRED ARRO" + + "WSRIGHTWARDS TRIANGLE-HEADED PAIRED ARROWSDOWNWARDS TRIANGLE-HEADED PAIR" + + "ED ARROWSLEFTWARDS BLACK CIRCLED WHITE ARROWUPWARDS BLACK CIRCLED WHITE " + + "ARROWRIGHTWARDS BLACK CIRCLED WHITE ARROWDOWNWARDS BLACK CIRCLED WHITE A" + + "RROWANTICLOCKWISE TRIANGLE-HEADED RIGHT U-SHAPED ARROWANTICLOCKWISE TRIA" + + "NGLE-HEADED BOTTOM U-SHAPED ARROWANTICLOCKWISE TRIANGLE-HEADED LEFT U-SH" + + "APED ARROWANTICLOCKWISE TRIANGLE-HEADED TOP U-SHAPED ARROWRETURN LEFTRET" + + "URN RIGHTNEWLINE LEFTNEWLINE RIGHTFOUR CORNER ARROWS CIRCLING ANTICLOCKW" + + "ISERIGHTWARDS BLACK ARROWTHREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROW" + + "HEADTHREE-D RIGHT-LIGHTED UPWARDS EQUILATERAL ARROWHEADTHREE-D TOP-LIGHT" + + "ED RIGHTWARDS EQUILATERAL ARROWHEADTHREE-D LEFT-LIGHTED DOWNWARDS EQUILA" + + "TERAL ARROWHEADBLACK LEFTWARDS EQUILATERAL ARROWHEADBLACK UPWARDS EQUILA" + + "TERAL ARROWHEADBLACK RIGHTWARDS EQUILATERAL ARROWHEADBLACK DOWNWARDS EQU" + + "ILATERAL ARROWHEADDOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARD" + + "SDOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDSUPWARDS TRIANGL" + + "E-HEADED ARROW WITH LONG TIP LEFTWARDSUPWARDS TRIANGLE-HEADED ARROW WITH" + + " LONG TIP RIGHTWARDSLEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARD" + + "SRIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDSLEFTWARDS TRIANGL" + + "E-HEADED ARROW WITH LONG TIP DOWNWARDSRIGHTWARDS TRIANGLE-HEADED ARROW W" + + "ITH LONG TIP DOWNWARDSBLACK CURVED DOWNWARDS AND LEFTWARDS ARROWBLACK CU" + + "RVED DOWNWARDS AND RIGHTWARDS ARROWBLACK CURVED UPWARDS AND LEFTWARDS AR" + + "ROWBLACK CURVED UPWARDS AND RIGHTWARDS ARROWBLACK CURVED LEFTWARDS AND U" + + "PWARDS ARROWBLACK CURVED RIGHTWARDS AND UPWARDS ARROWBLACK CURVED LEFTWA" + + "RDS AND DOWNWARDS ARROWBLACK CURVED RIGHTWARDS AND DOWNWARDS ARROWRIBBON" + + " ARROW DOWN LEFTRIBBON ARROW DOWN RIGHTRIBBON ARROW UP LEFTRIBBON ARROW " + + "UP RIGHTRIBBON ARROW LEFT UPRIBBON ARROW RIGHT UPRIBBON ARROW LEFT DOWNR" + + "IBBON ARROW RIGHT DOWNUPWARDS WHITE ARROW FROM BAR WITH HORIZONTAL BARUP" + + " ARROWHEAD IN A RECTANGLE BOXBALLOT BOX WITH LIGHT XCIRCLED XCIRCLED BOL" + + "D XBLACK SQUARE CENTREDBLACK DIAMOND CENTREDTURNED BLACK PENTAGONHORIZON" + + "TAL BLACK OCTAGONBLACK OCTAGONBLACK MEDIUM UP-POINTING TRIANGLE CENTREDB") + ("" + + "LACK MEDIUM DOWN-POINTING TRIANGLE CENTREDBLACK MEDIUM LEFT-POINTING TRI" + + "ANGLE CENTREDBLACK MEDIUM RIGHT-POINTING TRIANGLE CENTREDTOP HALF BLACK " + + "CIRCLEBOTTOM HALF BLACK CIRCLELIGHT FOUR POINTED BLACK CUSPROTATED LIGHT" + + " FOUR POINTED BLACK CUSPWHITE FOUR POINTED CUSPROTATED WHITE FOUR POINTE" + + "D CUSPSQUARE POSITION INDICATORUNCERTAINTY SIGNGROUP MARKLEFTWARDS TWO-H" + + "EADED ARROW WITH TRIANGLE ARROWHEADSUPWARDS TWO-HEADED ARROW WITH TRIANG" + + "LE ARROWHEADSRIGHTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADSDOWNWAR" + + "DS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADSGLAGOLITIC CAPITAL LETTER AZ" + + "UGLAGOLITIC CAPITAL LETTER BUKYGLAGOLITIC CAPITAL LETTER VEDEGLAGOLITIC " + + "CAPITAL LETTER GLAGOLIGLAGOLITIC CAPITAL LETTER DOBROGLAGOLITIC CAPITAL " + + "LETTER YESTUGLAGOLITIC CAPITAL LETTER ZHIVETEGLAGOLITIC CAPITAL LETTER D" + + "ZELOGLAGOLITIC CAPITAL LETTER ZEMLJAGLAGOLITIC CAPITAL LETTER IZHEGLAGOL" + + "ITIC CAPITAL LETTER INITIAL IZHEGLAGOLITIC CAPITAL LETTER IGLAGOLITIC CA" + + "PITAL LETTER DJERVIGLAGOLITIC CAPITAL LETTER KAKOGLAGOLITIC CAPITAL LETT" + + "ER LJUDIJEGLAGOLITIC CAPITAL LETTER MYSLITEGLAGOLITIC CAPITAL LETTER NAS" + + "HIGLAGOLITIC CAPITAL LETTER ONUGLAGOLITIC CAPITAL LETTER POKOJIGLAGOLITI" + + "C CAPITAL LETTER RITSIGLAGOLITIC CAPITAL LETTER SLOVOGLAGOLITIC CAPITAL " + + "LETTER TVRIDOGLAGOLITIC CAPITAL LETTER UKUGLAGOLITIC CAPITAL LETTER FRIT" + + "UGLAGOLITIC CAPITAL LETTER HERUGLAGOLITIC CAPITAL LETTER OTUGLAGOLITIC C" + + "APITAL LETTER PEGLAGOLITIC CAPITAL LETTER SHTAGLAGOLITIC CAPITAL LETTER " + + "TSIGLAGOLITIC CAPITAL LETTER CHRIVIGLAGOLITIC CAPITAL LETTER SHAGLAGOLIT" + + "IC CAPITAL LETTER YERUGLAGOLITIC CAPITAL LETTER YERIGLAGOLITIC CAPITAL L" + + "ETTER YATIGLAGOLITIC CAPITAL LETTER SPIDERY HAGLAGOLITIC CAPITAL LETTER " + + "YUGLAGOLITIC CAPITAL LETTER SMALL YUSGLAGOLITIC CAPITAL LETTER SMALL YUS" + + " WITH TAILGLAGOLITIC CAPITAL LETTER YOGLAGOLITIC CAPITAL LETTER IOTATED " + + "SMALL YUSGLAGOLITIC CAPITAL LETTER BIG YUSGLAGOLITIC CAPITAL LETTER IOTA" + + "TED BIG YUSGLAGOLITIC CAPITAL LETTER FITAGLAGOLITIC CAPITAL LETTER IZHIT" + + "SAGLAGOLITIC CAPITAL LETTER SHTAPICGLAGOLITIC CAPITAL LETTER TROKUTASTI " + + "AGLAGOLITIC CAPITAL LETTER LATINATE MYSLITEGLAGOLITIC SMALL LETTER AZUGL" + + "AGOLITIC SMALL LETTER BUKYGLAGOLITIC SMALL LETTER VEDEGLAGOLITIC SMALL L" + + "ETTER GLAGOLIGLAGOLITIC SMALL LETTER DOBROGLAGOLITIC SMALL LETTER YESTUG" + + "LAGOLITIC SMALL LETTER ZHIVETEGLAGOLITIC SMALL LETTER DZELOGLAGOLITIC SM" + + "ALL LETTER ZEMLJAGLAGOLITIC SMALL LETTER IZHEGLAGOLITIC SMALL LETTER INI" + + "TIAL IZHEGLAGOLITIC SMALL LETTER IGLAGOLITIC SMALL LETTER DJERVIGLAGOLIT" + + "IC SMALL LETTER KAKOGLAGOLITIC SMALL LETTER LJUDIJEGLAGOLITIC SMALL LETT" + + "ER MYSLITEGLAGOLITIC SMALL LETTER NASHIGLAGOLITIC SMALL LETTER ONUGLAGOL" + + "ITIC SMALL LETTER POKOJIGLAGOLITIC SMALL LETTER RITSIGLAGOLITIC SMALL LE" + + "TTER SLOVOGLAGOLITIC SMALL LETTER TVRIDOGLAGOLITIC SMALL LETTER UKUGLAGO" + + "LITIC SMALL LETTER FRITUGLAGOLITIC SMALL LETTER HERUGLAGOLITIC SMALL LET" + + "TER OTUGLAGOLITIC SMALL LETTER PEGLAGOLITIC SMALL LETTER SHTAGLAGOLITIC " + + "SMALL LETTER TSIGLAGOLITIC SMALL LETTER CHRIVIGLAGOLITIC SMALL LETTER SH" + + "AGLAGOLITIC SMALL LETTER YERUGLAGOLITIC SMALL LETTER YERIGLAGOLITIC SMAL" + + "L LETTER YATIGLAGOLITIC SMALL LETTER SPIDERY HAGLAGOLITIC SMALL LETTER Y" + + "UGLAGOLITIC SMALL LETTER SMALL YUSGLAGOLITIC SMALL LETTER SMALL YUS WITH" + + " TAILGLAGOLITIC SMALL LETTER YOGLAGOLITIC SMALL LETTER IOTATED SMALL YUS" + + "GLAGOLITIC SMALL LETTER BIG YUSGLAGOLITIC SMALL LETTER IOTATED BIG YUSGL" + + "AGOLITIC SMALL LETTER FITAGLAGOLITIC SMALL LETTER IZHITSAGLAGOLITIC SMAL" + + "L LETTER SHTAPICGLAGOLITIC SMALL LETTER TROKUTASTI AGLAGOLITIC SMALL LET" + + "TER LATINATE MYSLITELATIN CAPITAL LETTER L WITH DOUBLE BARLATIN SMALL LE" + + "TTER L WITH DOUBLE BARLATIN CAPITAL LETTER L WITH MIDDLE TILDELATIN CAPI" + + "TAL LETTER P WITH STROKELATIN CAPITAL LETTER R WITH TAILLATIN SMALL LETT" + + "ER A WITH STROKELATIN SMALL LETTER T WITH DIAGONAL STROKELATIN CAPITAL L" + + "ETTER H WITH DESCENDERLATIN SMALL LETTER H WITH DESCENDERLATIN CAPITAL L" + + "ETTER K WITH DESCENDERLATIN SMALL LETTER K WITH DESCENDERLATIN CAPITAL L" + + "ETTER Z WITH DESCENDERLATIN SMALL LETTER Z WITH DESCENDERLATIN CAPITAL L" + + "ETTER ALPHALATIN CAPITAL LETTER M WITH HOOKLATIN CAPITAL LETTER TURNED A" + + "LATIN CAPITAL LETTER TURNED ALPHALATIN SMALL LETTER V WITH RIGHT HOOKLAT" + + "IN CAPITAL LETTER W WITH HOOKLATIN SMALL LETTER W WITH HOOKLATIN SMALL L" + + "ETTER V WITH CURLLATIN CAPITAL LETTER HALF HLATIN SMALL LETTER HALF HLAT" + + "IN SMALL LETTER TAILLESS PHILATIN SMALL LETTER E WITH NOTCHLATIN SMALL L" + + "ETTER TURNED R WITH TAILLATIN SMALL LETTER O WITH LOW RING INSIDELATIN L" + + "ETTER SMALL CAPITAL TURNED ELATIN SUBSCRIPT SMALL LETTER JMODIFIER LETTE" + + "R CAPITAL VLATIN CAPITAL LETTER S WITH SWASH TAILLATIN CAPITAL LETTER Z " + + "WITH SWASH TAILCOPTIC CAPITAL LETTER ALFACOPTIC SMALL LETTER ALFACOPTIC ") + ("" + + "CAPITAL LETTER VIDACOPTIC SMALL LETTER VIDACOPTIC CAPITAL LETTER GAMMACO" + + "PTIC SMALL LETTER GAMMACOPTIC CAPITAL LETTER DALDACOPTIC SMALL LETTER DA" + + "LDACOPTIC CAPITAL LETTER EIECOPTIC SMALL LETTER EIECOPTIC CAPITAL LETTER" + + " SOUCOPTIC SMALL LETTER SOUCOPTIC CAPITAL LETTER ZATACOPTIC SMALL LETTER" + + " ZATACOPTIC CAPITAL LETTER HATECOPTIC SMALL LETTER HATECOPTIC CAPITAL LE" + + "TTER THETHECOPTIC SMALL LETTER THETHECOPTIC CAPITAL LETTER IAUDACOPTIC S" + + "MALL LETTER IAUDACOPTIC CAPITAL LETTER KAPACOPTIC SMALL LETTER KAPACOPTI" + + "C CAPITAL LETTER LAULACOPTIC SMALL LETTER LAULACOPTIC CAPITAL LETTER MIC" + + "OPTIC SMALL LETTER MICOPTIC CAPITAL LETTER NICOPTIC SMALL LETTER NICOPTI" + + "C CAPITAL LETTER KSICOPTIC SMALL LETTER KSICOPTIC CAPITAL LETTER OCOPTIC" + + " SMALL LETTER OCOPTIC CAPITAL LETTER PICOPTIC SMALL LETTER PICOPTIC CAPI" + + "TAL LETTER ROCOPTIC SMALL LETTER ROCOPTIC CAPITAL LETTER SIMACOPTIC SMAL" + + "L LETTER SIMACOPTIC CAPITAL LETTER TAUCOPTIC SMALL LETTER TAUCOPTIC CAPI" + + "TAL LETTER UACOPTIC SMALL LETTER UACOPTIC CAPITAL LETTER FICOPTIC SMALL " + + "LETTER FICOPTIC CAPITAL LETTER KHICOPTIC SMALL LETTER KHICOPTIC CAPITAL " + + "LETTER PSICOPTIC SMALL LETTER PSICOPTIC CAPITAL LETTER OOUCOPTIC SMALL L" + + "ETTER OOUCOPTIC CAPITAL LETTER DIALECT-P ALEFCOPTIC SMALL LETTER DIALECT" + + "-P ALEFCOPTIC CAPITAL LETTER OLD COPTIC AINCOPTIC SMALL LETTER OLD COPTI" + + "C AINCOPTIC CAPITAL LETTER CRYPTOGRAMMIC EIECOPTIC SMALL LETTER CRYPTOGR" + + "AMMIC EIECOPTIC CAPITAL LETTER DIALECT-P KAPACOPTIC SMALL LETTER DIALECT" + + "-P KAPACOPTIC CAPITAL LETTER DIALECT-P NICOPTIC SMALL LETTER DIALECT-P N" + + "ICOPTIC CAPITAL LETTER CRYPTOGRAMMIC NICOPTIC SMALL LETTER CRYPTOGRAMMIC" + + " NICOPTIC CAPITAL LETTER OLD COPTIC OOUCOPTIC SMALL LETTER OLD COPTIC OO" + + "UCOPTIC CAPITAL LETTER SAMPICOPTIC SMALL LETTER SAMPICOPTIC CAPITAL LETT" + + "ER CROSSED SHEICOPTIC SMALL LETTER CROSSED SHEICOPTIC CAPITAL LETTER OLD" + + " COPTIC SHEICOPTIC SMALL LETTER OLD COPTIC SHEICOPTIC CAPITAL LETTER OLD" + + " COPTIC ESHCOPTIC SMALL LETTER OLD COPTIC ESHCOPTIC CAPITAL LETTER AKHMI" + + "MIC KHEICOPTIC SMALL LETTER AKHMIMIC KHEICOPTIC CAPITAL LETTER DIALECT-P" + + " HORICOPTIC SMALL LETTER DIALECT-P HORICOPTIC CAPITAL LETTER OLD COPTIC " + + "HORICOPTIC SMALL LETTER OLD COPTIC HORICOPTIC CAPITAL LETTER OLD COPTIC " + + "HACOPTIC SMALL LETTER OLD COPTIC HACOPTIC CAPITAL LETTER L-SHAPED HACOPT" + + "IC SMALL LETTER L-SHAPED HACOPTIC CAPITAL LETTER OLD COPTIC HEICOPTIC SM" + + "ALL LETTER OLD COPTIC HEICOPTIC CAPITAL LETTER OLD COPTIC HATCOPTIC SMAL" + + "L LETTER OLD COPTIC HATCOPTIC CAPITAL LETTER OLD COPTIC GANGIACOPTIC SMA" + + "LL LETTER OLD COPTIC GANGIACOPTIC CAPITAL LETTER OLD COPTIC DJACOPTIC SM" + + "ALL LETTER OLD COPTIC DJACOPTIC CAPITAL LETTER OLD COPTIC SHIMACOPTIC SM" + + "ALL LETTER OLD COPTIC SHIMACOPTIC CAPITAL LETTER OLD NUBIAN SHIMACOPTIC " + + "SMALL LETTER OLD NUBIAN SHIMACOPTIC CAPITAL LETTER OLD NUBIAN NGICOPTIC " + + "SMALL LETTER OLD NUBIAN NGICOPTIC CAPITAL LETTER OLD NUBIAN NYICOPTIC SM" + + "ALL LETTER OLD NUBIAN NYICOPTIC CAPITAL LETTER OLD NUBIAN WAUCOPTIC SMAL" + + "L LETTER OLD NUBIAN WAUCOPTIC SYMBOL KAICOPTIC SYMBOL MI ROCOPTIC SYMBOL" + + " PI ROCOPTIC SYMBOL STAUROSCOPTIC SYMBOL TAU ROCOPTIC SYMBOL KHI ROCOPTI" + + "C SYMBOL SHIMA SIMACOPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEICOPTIC SMALL " + + "LETTER CRYPTOGRAMMIC SHEICOPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIACOPTI" + + "C SMALL LETTER CRYPTOGRAMMIC GANGIACOPTIC COMBINING NI ABOVECOPTIC COMBI" + + "NING SPIRITUS ASPERCOPTIC COMBINING SPIRITUS LENISCOPTIC CAPITAL LETTER " + + "BOHAIRIC KHEICOPTIC SMALL LETTER BOHAIRIC KHEICOPTIC OLD NUBIAN FULL STO" + + "PCOPTIC OLD NUBIAN DIRECT QUESTION MARKCOPTIC OLD NUBIAN INDIRECT QUESTI" + + "ON MARKCOPTIC OLD NUBIAN VERSE DIVIDERCOPTIC FRACTION ONE HALFCOPTIC FUL" + + "L STOPCOPTIC MORPHOLOGICAL DIVIDERGEORGIAN SMALL LETTER ANGEORGIAN SMALL" + + " LETTER BANGEORGIAN SMALL LETTER GANGEORGIAN SMALL LETTER DONGEORGIAN SM" + + "ALL LETTER ENGEORGIAN SMALL LETTER VINGEORGIAN SMALL LETTER ZENGEORGIAN " + + "SMALL LETTER TANGEORGIAN SMALL LETTER INGEORGIAN SMALL LETTER KANGEORGIA" + + "N SMALL LETTER LASGEORGIAN SMALL LETTER MANGEORGIAN SMALL LETTER NARGEOR" + + "GIAN SMALL LETTER ONGEORGIAN SMALL LETTER PARGEORGIAN SMALL LETTER ZHARG" + + "EORGIAN SMALL LETTER RAEGEORGIAN SMALL LETTER SANGEORGIAN SMALL LETTER T" + + "ARGEORGIAN SMALL LETTER UNGEORGIAN SMALL LETTER PHARGEORGIAN SMALL LETTE" + + "R KHARGEORGIAN SMALL LETTER GHANGEORGIAN SMALL LETTER QARGEORGIAN SMALL " + + "LETTER SHINGEORGIAN SMALL LETTER CHINGEORGIAN SMALL LETTER CANGEORGIAN S" + + "MALL LETTER JILGEORGIAN SMALL LETTER CILGEORGIAN SMALL LETTER CHARGEORGI" + + "AN SMALL LETTER XANGEORGIAN SMALL LETTER JHANGEORGIAN SMALL LETTER HAEGE" + + "ORGIAN SMALL LETTER HEGEORGIAN SMALL LETTER HIEGEORGIAN SMALL LETTER WEG" + + "EORGIAN SMALL LETTER HARGEORGIAN SMALL LETTER HOEGEORGIAN SMALL LETTER Y" + + "NGEORGIAN SMALL LETTER AENTIFINAGH LETTER YATIFINAGH LETTER YABTIFINAGH ") + ("" + + "LETTER YABHTIFINAGH LETTER YAGTIFINAGH LETTER YAGHHTIFINAGH LETTER BERBE" + + "R ACADEMY YAJTIFINAGH LETTER YAJTIFINAGH LETTER YADTIFINAGH LETTER YADHT" + + "IFINAGH LETTER YADDTIFINAGH LETTER YADDHTIFINAGH LETTER YEYTIFINAGH LETT" + + "ER YAFTIFINAGH LETTER YAKTIFINAGH LETTER TUAREG YAKTIFINAGH LETTER YAKHH" + + "TIFINAGH LETTER YAHTIFINAGH LETTER BERBER ACADEMY YAHTIFINAGH LETTER TUA" + + "REG YAHTIFINAGH LETTER YAHHTIFINAGH LETTER YAATIFINAGH LETTER YAKHTIFINA" + + "GH LETTER TUAREG YAKHTIFINAGH LETTER YAQTIFINAGH LETTER TUAREG YAQTIFINA" + + "GH LETTER YITIFINAGH LETTER YAZHTIFINAGH LETTER AHAGGAR YAZHTIFINAGH LET" + + "TER TUAREG YAZHTIFINAGH LETTER YALTIFINAGH LETTER YAMTIFINAGH LETTER YAN" + + "TIFINAGH LETTER TUAREG YAGNTIFINAGH LETTER TUAREG YANGTIFINAGH LETTER YA" + + "PTIFINAGH LETTER YUTIFINAGH LETTER YARTIFINAGH LETTER YARRTIFINAGH LETTE" + + "R YAGHTIFINAGH LETTER TUAREG YAGHTIFINAGH LETTER AYER YAGHTIFINAGH LETTE" + + "R YASTIFINAGH LETTER YASSTIFINAGH LETTER YASHTIFINAGH LETTER YATTIFINAGH" + + " LETTER YATHTIFINAGH LETTER YACHTIFINAGH LETTER YATTTIFINAGH LETTER YAVT" + + "IFINAGH LETTER YAWTIFINAGH LETTER YAYTIFINAGH LETTER YAZTIFINAGH LETTER " + + "TAWELLEMET YAZTIFINAGH LETTER YAZZTIFINAGH LETTER YETIFINAGH LETTER YOTI" + + "FINAGH MODIFIER LETTER LABIALIZATION MARKTIFINAGH SEPARATOR MARKTIFINAGH" + + " CONSONANT JOINERETHIOPIC SYLLABLE LOAETHIOPIC SYLLABLE MOAETHIOPIC SYLL" + + "ABLE ROAETHIOPIC SYLLABLE SOAETHIOPIC SYLLABLE SHOAETHIOPIC SYLLABLE BOA" + + "ETHIOPIC SYLLABLE TOAETHIOPIC SYLLABLE COAETHIOPIC SYLLABLE NOAETHIOPIC " + + "SYLLABLE NYOAETHIOPIC SYLLABLE GLOTTAL OAETHIOPIC SYLLABLE ZOAETHIOPIC S" + + "YLLABLE DOAETHIOPIC SYLLABLE DDOAETHIOPIC SYLLABLE JOAETHIOPIC SYLLABLE " + + "THOAETHIOPIC SYLLABLE CHOAETHIOPIC SYLLABLE PHOAETHIOPIC SYLLABLE POAETH" + + "IOPIC SYLLABLE GGWAETHIOPIC SYLLABLE GGWIETHIOPIC SYLLABLE GGWEEETHIOPIC" + + " SYLLABLE GGWEETHIOPIC SYLLABLE SSAETHIOPIC SYLLABLE SSUETHIOPIC SYLLABL" + + "E SSIETHIOPIC SYLLABLE SSAAETHIOPIC SYLLABLE SSEEETHIOPIC SYLLABLE SSEET" + + "HIOPIC SYLLABLE SSOETHIOPIC SYLLABLE CCAETHIOPIC SYLLABLE CCUETHIOPIC SY" + + "LLABLE CCIETHIOPIC SYLLABLE CCAAETHIOPIC SYLLABLE CCEEETHIOPIC SYLLABLE " + + "CCEETHIOPIC SYLLABLE CCOETHIOPIC SYLLABLE ZZAETHIOPIC SYLLABLE ZZUETHIOP" + + "IC SYLLABLE ZZIETHIOPIC SYLLABLE ZZAAETHIOPIC SYLLABLE ZZEEETHIOPIC SYLL" + + "ABLE ZZEETHIOPIC SYLLABLE ZZOETHIOPIC SYLLABLE CCHAETHIOPIC SYLLABLE CCH" + + "UETHIOPIC SYLLABLE CCHIETHIOPIC SYLLABLE CCHAAETHIOPIC SYLLABLE CCHEEETH" + + "IOPIC SYLLABLE CCHEETHIOPIC SYLLABLE CCHOETHIOPIC SYLLABLE QYAETHIOPIC S" + + "YLLABLE QYUETHIOPIC SYLLABLE QYIETHIOPIC SYLLABLE QYAAETHIOPIC SYLLABLE " + + "QYEEETHIOPIC SYLLABLE QYEETHIOPIC SYLLABLE QYOETHIOPIC SYLLABLE KYAETHIO" + + "PIC SYLLABLE KYUETHIOPIC SYLLABLE KYIETHIOPIC SYLLABLE KYAAETHIOPIC SYLL" + + "ABLE KYEEETHIOPIC SYLLABLE KYEETHIOPIC SYLLABLE KYOETHIOPIC SYLLABLE XYA" + + "ETHIOPIC SYLLABLE XYUETHIOPIC SYLLABLE XYIETHIOPIC SYLLABLE XYAAETHIOPIC" + + " SYLLABLE XYEEETHIOPIC SYLLABLE XYEETHIOPIC SYLLABLE XYOETHIOPIC SYLLABL" + + "E GYAETHIOPIC SYLLABLE GYUETHIOPIC SYLLABLE GYIETHIOPIC SYLLABLE GYAAETH" + + "IOPIC SYLLABLE GYEEETHIOPIC SYLLABLE GYEETHIOPIC SYLLABLE GYOCOMBINING C" + + "YRILLIC LETTER BECOMBINING CYRILLIC LETTER VECOMBINING CYRILLIC LETTER G" + + "HECOMBINING CYRILLIC LETTER DECOMBINING CYRILLIC LETTER ZHECOMBINING CYR" + + "ILLIC LETTER ZECOMBINING CYRILLIC LETTER KACOMBINING CYRILLIC LETTER ELC" + + "OMBINING CYRILLIC LETTER EMCOMBINING CYRILLIC LETTER ENCOMBINING CYRILLI" + + "C LETTER OCOMBINING CYRILLIC LETTER PECOMBINING CYRILLIC LETTER ERCOMBIN" + + "ING CYRILLIC LETTER ESCOMBINING CYRILLIC LETTER TECOMBINING CYRILLIC LET" + + "TER HACOMBINING CYRILLIC LETTER TSECOMBINING CYRILLIC LETTER CHECOMBININ" + + "G CYRILLIC LETTER SHACOMBINING CYRILLIC LETTER SHCHACOMBINING CYRILLIC L" + + "ETTER FITACOMBINING CYRILLIC LETTER ES-TECOMBINING CYRILLIC LETTER ACOMB" + + "INING CYRILLIC LETTER IECOMBINING CYRILLIC LETTER DJERVCOMBINING CYRILLI" + + "C LETTER MONOGRAPH UKCOMBINING CYRILLIC LETTER YATCOMBINING CYRILLIC LET" + + "TER YUCOMBINING CYRILLIC LETTER IOTIFIED ACOMBINING CYRILLIC LETTER LITT" + + "LE YUSCOMBINING CYRILLIC LETTER BIG YUSCOMBINING CYRILLIC LETTER IOTIFIE" + + "D BIG YUSRIGHT ANGLE SUBSTITUTION MARKERRIGHT ANGLE DOTTED SUBSTITUTION " + + "MARKERLEFT SUBSTITUTION BRACKETRIGHT SUBSTITUTION BRACKETLEFT DOTTED SUB" + + "STITUTION BRACKETRIGHT DOTTED SUBSTITUTION BRACKETRAISED INTERPOLATION M" + + "ARKERRAISED DOTTED INTERPOLATION MARKERDOTTED TRANSPOSITION MARKERLEFT T" + + "RANSPOSITION BRACKETRIGHT TRANSPOSITION BRACKETRAISED SQUARELEFT RAISED " + + "OMISSION BRACKETRIGHT RAISED OMISSION BRACKETEDITORIAL CORONISPARAGRAPHO" + + "SFORKED PARAGRAPHOSREVERSED FORKED PARAGRAPHOSHYPODIASTOLEDOTTED OBELOSD" + + "OWNWARDS ANCORAUPWARDS ANCORADOTTED RIGHT-POINTING ANGLEDOUBLE OBLIQUE H" + + "YPHENINVERTED INTERROBANGPALM BRANCHHYPHEN WITH DIAERESISTILDE WITH RING" + + " ABOVELEFT LOW PARAPHRASE BRACKETRIGHT LOW PARAPHRASE BRACKETTILDE WITH ") + ("" + + "DOT ABOVETILDE WITH DOT BELOWLEFT VERTICAL BAR WITH QUILLRIGHT VERTICAL " + + "BAR WITH QUILLTOP LEFT HALF BRACKETTOP RIGHT HALF BRACKETBOTTOM LEFT HAL" + + "F BRACKETBOTTOM RIGHT HALF BRACKETLEFT SIDEWAYS U BRACKETRIGHT SIDEWAYS " + + "U BRACKETLEFT DOUBLE PARENTHESISRIGHT DOUBLE PARENTHESISTWO DOTS OVER ON" + + "E DOT PUNCTUATIONONE DOT OVER TWO DOTS PUNCTUATIONSQUARED FOUR DOT PUNCT" + + "UATIONFIVE DOT MARKREVERSED QUESTION MARKVERTICAL TILDERING POINTWORD SE" + + "PARATOR MIDDLE DOTTURNED COMMARAISED DOTRAISED COMMATURNED SEMICOLONDAGG" + + "ER WITH LEFT GUARDDAGGER WITH RIGHT GUARDTURNED DAGGERTOP HALF SECTION S" + + "IGNTWO-EM DASHTHREE-EM DASHSTENOGRAPHIC FULL STOPVERTICAL SIX DOTSWIGGLY" + + " VERTICAL LINECAPITULUMDOUBLE HYPHENREVERSED COMMADOUBLE LOW-REVERSED-9 " + + "QUOTATION MARKDASH WITH LEFT UPTURNDOUBLE SUSPENSION MARKINVERTED LOW KA" + + "VYKAINVERTED LOW KAVYKA WITH KAVYKA ABOVELOW KAVYKALOW KAVYKA WITH DOTDO" + + "UBLE STACKED COMMACJK RADICAL REPEATCJK RADICAL CLIFFCJK RADICAL SECOND " + + "ONECJK RADICAL SECOND TWOCJK RADICAL SECOND THREECJK RADICAL PERSONCJK R" + + "ADICAL BOXCJK RADICAL TABLECJK RADICAL KNIFE ONECJK RADICAL KNIFE TWOCJK" + + " RADICAL DIVINATIONCJK RADICAL SEALCJK RADICAL SMALL ONECJK RADICAL SMAL" + + "L TWOCJK RADICAL LAME ONECJK RADICAL LAME TWOCJK RADICAL LAME THREECJK R" + + "ADICAL LAME FOURCJK RADICAL SNAKECJK RADICAL THREADCJK RADICAL SNOUT ONE" + + "CJK RADICAL SNOUT TWOCJK RADICAL HEART ONECJK RADICAL HEART TWOCJK RADIC" + + "AL HANDCJK RADICAL RAPCJK RADICAL CHOKECJK RADICAL SUNCJK RADICAL MOONCJ" + + "K RADICAL DEATHCJK RADICAL MOTHERCJK RADICAL CIVILIANCJK RADICAL WATER O" + + "NECJK RADICAL WATER TWOCJK RADICAL FIRECJK RADICAL PAW ONECJK RADICAL PA" + + "W TWOCJK RADICAL SIMPLIFIED HALF TREE TRUNKCJK RADICAL COWCJK RADICAL DO" + + "GCJK RADICAL JADECJK RADICAL BOLT OF CLOTHCJK RADICAL EYECJK RADICAL SPI" + + "RIT ONECJK RADICAL SPIRIT TWOCJK RADICAL BAMBOOCJK RADICAL SILKCJK RADIC" + + "AL C-SIMPLIFIED SILKCJK RADICAL NET ONECJK RADICAL NET TWOCJK RADICAL NE" + + "T THREECJK RADICAL NET FOURCJK RADICAL MESHCJK RADICAL SHEEPCJK RADICAL " + + "RAMCJK RADICAL EWECJK RADICAL OLDCJK RADICAL BRUSH ONECJK RADICAL BRUSH " + + "TWOCJK RADICAL MEATCJK RADICAL MORTARCJK RADICAL GRASS ONECJK RADICAL GR" + + "ASS TWOCJK RADICAL GRASS THREECJK RADICAL TIGERCJK RADICAL CLOTHESCJK RA" + + "DICAL WEST ONECJK RADICAL WEST TWOCJK RADICAL C-SIMPLIFIED SEECJK RADICA" + + "L SIMPLIFIED HORNCJK RADICAL HORNCJK RADICAL C-SIMPLIFIED SPEECHCJK RADI" + + "CAL C-SIMPLIFIED SHELLCJK RADICAL FOOTCJK RADICAL C-SIMPLIFIED CARTCJK R" + + "ADICAL SIMPLIFIED WALKCJK RADICAL WALK ONECJK RADICAL WALK TWOCJK RADICA" + + "L CITYCJK RADICAL C-SIMPLIFIED GOLDCJK RADICAL LONG ONECJK RADICAL LONG " + + "TWOCJK RADICAL C-SIMPLIFIED LONGCJK RADICAL C-SIMPLIFIED GATECJK RADICAL" + + " MOUND ONECJK RADICAL MOUND TWOCJK RADICAL RAINCJK RADICAL BLUECJK RADIC" + + "AL C-SIMPLIFIED TANNED LEATHERCJK RADICAL C-SIMPLIFIED LEAFCJK RADICAL C" + + "-SIMPLIFIED WINDCJK RADICAL C-SIMPLIFIED FLYCJK RADICAL EAT ONECJK RADIC" + + "AL EAT TWOCJK RADICAL EAT THREECJK RADICAL C-SIMPLIFIED EATCJK RADICAL H" + + "EADCJK RADICAL C-SIMPLIFIED HORSECJK RADICAL BONECJK RADICAL GHOSTCJK RA" + + "DICAL C-SIMPLIFIED FISHCJK RADICAL C-SIMPLIFIED BIRDCJK RADICAL C-SIMPLI" + + "FIED SALTCJK RADICAL SIMPLIFIED WHEATCJK RADICAL SIMPLIFIED YELLOWCJK RA" + + "DICAL C-SIMPLIFIED FROGCJK RADICAL J-SIMPLIFIED EVENCJK RADICAL C-SIMPLI" + + "FIED EVENCJK RADICAL J-SIMPLIFIED TOOTHCJK RADICAL C-SIMPLIFIED TOOTHCJK" + + " RADICAL J-SIMPLIFIED DRAGONCJK RADICAL C-SIMPLIFIED DRAGONCJK RADICAL T" + + "URTLECJK RADICAL J-SIMPLIFIED TURTLECJK RADICAL C-SIMPLIFIED TURTLEKANGX" + + "I RADICAL ONEKANGXI RADICAL LINEKANGXI RADICAL DOTKANGXI RADICAL SLASHKA" + + "NGXI RADICAL SECONDKANGXI RADICAL HOOKKANGXI RADICAL TWOKANGXI RADICAL L" + + "IDKANGXI RADICAL MANKANGXI RADICAL LEGSKANGXI RADICAL ENTERKANGXI RADICA" + + "L EIGHTKANGXI RADICAL DOWN BOXKANGXI RADICAL COVERKANGXI RADICAL ICEKANG" + + "XI RADICAL TABLEKANGXI RADICAL OPEN BOXKANGXI RADICAL KNIFEKANGXI RADICA" + + "L POWERKANGXI RADICAL WRAPKANGXI RADICAL SPOONKANGXI RADICAL RIGHT OPEN " + + "BOXKANGXI RADICAL HIDING ENCLOSUREKANGXI RADICAL TENKANGXI RADICAL DIVIN" + + "ATIONKANGXI RADICAL SEALKANGXI RADICAL CLIFFKANGXI RADICAL PRIVATEKANGXI" + + " RADICAL AGAINKANGXI RADICAL MOUTHKANGXI RADICAL ENCLOSUREKANGXI RADICAL" + + " EARTHKANGXI RADICAL SCHOLARKANGXI RADICAL GOKANGXI RADICAL GO SLOWLYKAN" + + "GXI RADICAL EVENINGKANGXI RADICAL BIGKANGXI RADICAL WOMANKANGXI RADICAL " + + "CHILDKANGXI RADICAL ROOFKANGXI RADICAL INCHKANGXI RADICAL SMALLKANGXI RA" + + "DICAL LAMEKANGXI RADICAL CORPSEKANGXI RADICAL SPROUTKANGXI RADICAL MOUNT" + + "AINKANGXI RADICAL RIVERKANGXI RADICAL WORKKANGXI RADICAL ONESELFKANGXI R" + + "ADICAL TURBANKANGXI RADICAL DRYKANGXI RADICAL SHORT THREADKANGXI RADICAL" + + " DOTTED CLIFFKANGXI RADICAL LONG STRIDEKANGXI RADICAL TWO HANDSKANGXI RA" + + "DICAL SHOOTKANGXI RADICAL BOWKANGXI RADICAL SNOUTKANGXI RADICAL BRISTLEK") + ("" + + "ANGXI RADICAL STEPKANGXI RADICAL HEARTKANGXI RADICAL HALBERDKANGXI RADIC" + + "AL DOORKANGXI RADICAL HANDKANGXI RADICAL BRANCHKANGXI RADICAL RAPKANGXI " + + "RADICAL SCRIPTKANGXI RADICAL DIPPERKANGXI RADICAL AXEKANGXI RADICAL SQUA" + + "REKANGXI RADICAL NOTKANGXI RADICAL SUNKANGXI RADICAL SAYKANGXI RADICAL M" + + "OONKANGXI RADICAL TREEKANGXI RADICAL LACKKANGXI RADICAL STOPKANGXI RADIC" + + "AL DEATHKANGXI RADICAL WEAPONKANGXI RADICAL DO NOTKANGXI RADICAL COMPARE" + + "KANGXI RADICAL FURKANGXI RADICAL CLANKANGXI RADICAL STEAMKANGXI RADICAL " + + "WATERKANGXI RADICAL FIREKANGXI RADICAL CLAWKANGXI RADICAL FATHERKANGXI R" + + "ADICAL DOUBLE XKANGXI RADICAL HALF TREE TRUNKKANGXI RADICAL SLICEKANGXI " + + "RADICAL FANGKANGXI RADICAL COWKANGXI RADICAL DOGKANGXI RADICAL PROFOUNDK" + + "ANGXI RADICAL JADEKANGXI RADICAL MELONKANGXI RADICAL TILEKANGXI RADICAL " + + "SWEETKANGXI RADICAL LIFEKANGXI RADICAL USEKANGXI RADICAL FIELDKANGXI RAD" + + "ICAL BOLT OF CLOTHKANGXI RADICAL SICKNESSKANGXI RADICAL DOTTED TENTKANGX" + + "I RADICAL WHITEKANGXI RADICAL SKINKANGXI RADICAL DISHKANGXI RADICAL EYEK" + + "ANGXI RADICAL SPEARKANGXI RADICAL ARROWKANGXI RADICAL STONEKANGXI RADICA" + + "L SPIRITKANGXI RADICAL TRACKKANGXI RADICAL GRAINKANGXI RADICAL CAVEKANGX" + + "I RADICAL STANDKANGXI RADICAL BAMBOOKANGXI RADICAL RICEKANGXI RADICAL SI" + + "LKKANGXI RADICAL JARKANGXI RADICAL NETKANGXI RADICAL SHEEPKANGXI RADICAL" + + " FEATHERKANGXI RADICAL OLDKANGXI RADICAL ANDKANGXI RADICAL PLOWKANGXI RA" + + "DICAL EARKANGXI RADICAL BRUSHKANGXI RADICAL MEATKANGXI RADICAL MINISTERK" + + "ANGXI RADICAL SELFKANGXI RADICAL ARRIVEKANGXI RADICAL MORTARKANGXI RADIC" + + "AL TONGUEKANGXI RADICAL OPPOSEKANGXI RADICAL BOATKANGXI RADICAL STOPPING" + + "KANGXI RADICAL COLORKANGXI RADICAL GRASSKANGXI RADICAL TIGERKANGXI RADIC" + + "AL INSECTKANGXI RADICAL BLOODKANGXI RADICAL WALK ENCLOSUREKANGXI RADICAL" + + " CLOTHESKANGXI RADICAL WESTKANGXI RADICAL SEEKANGXI RADICAL HORNKANGXI R" + + "ADICAL SPEECHKANGXI RADICAL VALLEYKANGXI RADICAL BEANKANGXI RADICAL PIGK" + + "ANGXI RADICAL BADGERKANGXI RADICAL SHELLKANGXI RADICAL REDKANGXI RADICAL" + + " RUNKANGXI RADICAL FOOTKANGXI RADICAL BODYKANGXI RADICAL CARTKANGXI RADI" + + "CAL BITTERKANGXI RADICAL MORNINGKANGXI RADICAL WALKKANGXI RADICAL CITYKA" + + "NGXI RADICAL WINEKANGXI RADICAL DISTINGUISHKANGXI RADICAL VILLAGEKANGXI " + + "RADICAL GOLDKANGXI RADICAL LONGKANGXI RADICAL GATEKANGXI RADICAL MOUNDKA" + + "NGXI RADICAL SLAVEKANGXI RADICAL SHORT TAILED BIRDKANGXI RADICAL RAINKAN" + + "GXI RADICAL BLUEKANGXI RADICAL WRONGKANGXI RADICAL FACEKANGXI RADICAL LE" + + "ATHERKANGXI RADICAL TANNED LEATHERKANGXI RADICAL LEEKKANGXI RADICAL SOUN" + + "DKANGXI RADICAL LEAFKANGXI RADICAL WINDKANGXI RADICAL FLYKANGXI RADICAL " + + "EATKANGXI RADICAL HEADKANGXI RADICAL FRAGRANTKANGXI RADICAL HORSEKANGXI " + + "RADICAL BONEKANGXI RADICAL TALLKANGXI RADICAL HAIRKANGXI RADICAL FIGHTKA" + + "NGXI RADICAL SACRIFICIAL WINEKANGXI RADICAL CAULDRONKANGXI RADICAL GHOST" + + "KANGXI RADICAL FISHKANGXI RADICAL BIRDKANGXI RADICAL SALTKANGXI RADICAL " + + "DEERKANGXI RADICAL WHEATKANGXI RADICAL HEMPKANGXI RADICAL YELLOWKANGXI R" + + "ADICAL MILLETKANGXI RADICAL BLACKKANGXI RADICAL EMBROIDERYKANGXI RADICAL" + + " FROGKANGXI RADICAL TRIPODKANGXI RADICAL DRUMKANGXI RADICAL RATKANGXI RA" + + "DICAL NOSEKANGXI RADICAL EVENKANGXI RADICAL TOOTHKANGXI RADICAL DRAGONKA" + + "NGXI RADICAL TURTLEKANGXI RADICAL FLUTEIDEOGRAPHIC DESCRIPTION CHARACTER" + + " LEFT TO RIGHTIDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOWIDEOGRAPHI" + + "C DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHTIDEOGRAPHIC DESCRIPTION " + + "CHARACTER ABOVE TO MIDDLE AND BELOWIDEOGRAPHIC DESCRIPTION CHARACTER FUL" + + "L SURROUNDIDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVEIDEOGRAPH" + + "IC DESCRIPTION CHARACTER SURROUND FROM BELOWIDEOGRAPHIC DESCRIPTION CHAR" + + "ACTER SURROUND FROM LEFTIDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM " + + "UPPER LEFTIDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHTIDE" + + "OGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFTIDEOGRAPHIC DESCR" + + "IPTION CHARACTER OVERLAIDIDEOGRAPHIC SPACEIDEOGRAPHIC COMMAIDEOGRAPHIC F" + + "ULL STOPDITTO MARKJAPANESE INDUSTRIAL STANDARD SYMBOLIDEOGRAPHIC ITERATI" + + "ON MARKIDEOGRAPHIC CLOSING MARKIDEOGRAPHIC NUMBER ZEROLEFT ANGLE BRACKET" + + "RIGHT ANGLE BRACKETLEFT DOUBLE ANGLE BRACKETRIGHT DOUBLE ANGLE BRACKETLE" + + "FT CORNER BRACKETRIGHT CORNER BRACKETLEFT WHITE CORNER BRACKETRIGHT WHIT" + + "E CORNER BRACKETLEFT BLACK LENTICULAR BRACKETRIGHT BLACK LENTICULAR BRAC" + + "KETPOSTAL MARKGETA MARKLEFT TORTOISE SHELL BRACKETRIGHT TORTOISE SHELL B" + + "RACKETLEFT WHITE LENTICULAR BRACKETRIGHT WHITE LENTICULAR BRACKETLEFT WH" + + "ITE TORTOISE SHELL BRACKETRIGHT WHITE TORTOISE SHELL BRACKETLEFT WHITE S" + + "QUARE BRACKETRIGHT WHITE SQUARE BRACKETWAVE DASHREVERSED DOUBLE PRIME QU" + + "OTATION MARKDOUBLE PRIME QUOTATION MARKLOW DOUBLE PRIME QUOTATION MARKPO" + + "STAL MARK FACEHANGZHOU NUMERAL ONEHANGZHOU NUMERAL TWOHANGZHOU NUMERAL T") + ("" + + "HREEHANGZHOU NUMERAL FOURHANGZHOU NUMERAL FIVEHANGZHOU NUMERAL SIXHANGZH" + + "OU NUMERAL SEVENHANGZHOU NUMERAL EIGHTHANGZHOU NUMERAL NINEIDEOGRAPHIC L" + + "EVEL TONE MARKIDEOGRAPHIC RISING TONE MARKIDEOGRAPHIC DEPARTING TONE MAR" + + "KIDEOGRAPHIC ENTERING TONE MARKHANGUL SINGLE DOT TONE MARKHANGUL DOUBLE " + + "DOT TONE MARKWAVY DASHVERTICAL KANA REPEAT MARKVERTICAL KANA REPEAT WITH" + + " VOICED SOUND MARKVERTICAL KANA REPEAT MARK UPPER HALFVERTICAL KANA REPE" + + "AT WITH VOICED SOUND MARK UPPER HALFVERTICAL KANA REPEAT MARK LOWER HALF" + + "CIRCLED POSTAL MARKIDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOLHANGZ" + + "HOU NUMERAL TENHANGZHOU NUMERAL TWENTYHANGZHOU NUMERAL THIRTYVERTICAL ID" + + "EOGRAPHIC ITERATION MARKMASU MARKPART ALTERNATION MARKIDEOGRAPHIC VARIAT" + + "ION INDICATORIDEOGRAPHIC HALF FILL SPACEHIRAGANA LETTER SMALL AHIRAGANA " + + "LETTER AHIRAGANA LETTER SMALL IHIRAGANA LETTER IHIRAGANA LETTER SMALL UH" + + "IRAGANA LETTER UHIRAGANA LETTER SMALL EHIRAGANA LETTER EHIRAGANA LETTER " + + "SMALL OHIRAGANA LETTER OHIRAGANA LETTER KAHIRAGANA LETTER GAHIRAGANA LET" + + "TER KIHIRAGANA LETTER GIHIRAGANA LETTER KUHIRAGANA LETTER GUHIRAGANA LET" + + "TER KEHIRAGANA LETTER GEHIRAGANA LETTER KOHIRAGANA LETTER GOHIRAGANA LET" + + "TER SAHIRAGANA LETTER ZAHIRAGANA LETTER SIHIRAGANA LETTER ZIHIRAGANA LET" + + "TER SUHIRAGANA LETTER ZUHIRAGANA LETTER SEHIRAGANA LETTER ZEHIRAGANA LET" + + "TER SOHIRAGANA LETTER ZOHIRAGANA LETTER TAHIRAGANA LETTER DAHIRAGANA LET" + + "TER TIHIRAGANA LETTER DIHIRAGANA LETTER SMALL TUHIRAGANA LETTER TUHIRAGA" + + "NA LETTER DUHIRAGANA LETTER TEHIRAGANA LETTER DEHIRAGANA LETTER TOHIRAGA" + + "NA LETTER DOHIRAGANA LETTER NAHIRAGANA LETTER NIHIRAGANA LETTER NUHIRAGA" + + "NA LETTER NEHIRAGANA LETTER NOHIRAGANA LETTER HAHIRAGANA LETTER BAHIRAGA" + + "NA LETTER PAHIRAGANA LETTER HIHIRAGANA LETTER BIHIRAGANA LETTER PIHIRAGA" + + "NA LETTER HUHIRAGANA LETTER BUHIRAGANA LETTER PUHIRAGANA LETTER HEHIRAGA" + + "NA LETTER BEHIRAGANA LETTER PEHIRAGANA LETTER HOHIRAGANA LETTER BOHIRAGA" + + "NA LETTER POHIRAGANA LETTER MAHIRAGANA LETTER MIHIRAGANA LETTER MUHIRAGA" + + "NA LETTER MEHIRAGANA LETTER MOHIRAGANA LETTER SMALL YAHIRAGANA LETTER YA" + + "HIRAGANA LETTER SMALL YUHIRAGANA LETTER YUHIRAGANA LETTER SMALL YOHIRAGA" + + "NA LETTER YOHIRAGANA LETTER RAHIRAGANA LETTER RIHIRAGANA LETTER RUHIRAGA" + + "NA LETTER REHIRAGANA LETTER ROHIRAGANA LETTER SMALL WAHIRAGANA LETTER WA" + + "HIRAGANA LETTER WIHIRAGANA LETTER WEHIRAGANA LETTER WOHIRAGANA LETTER NH" + + "IRAGANA LETTER VUHIRAGANA LETTER SMALL KAHIRAGANA LETTER SMALL KECOMBINI" + + "NG KATAKANA-HIRAGANA VOICED SOUND MARKCOMBINING KATAKANA-HIRAGANA SEMI-V" + + "OICED SOUND MARKKATAKANA-HIRAGANA VOICED SOUND MARKKATAKANA-HIRAGANA SEM" + + "I-VOICED SOUND MARKHIRAGANA ITERATION MARKHIRAGANA VOICED ITERATION MARK" + + "HIRAGANA DIGRAPH YORIKATAKANA-HIRAGANA DOUBLE HYPHENKATAKANA LETTER SMAL" + + "L AKATAKANA LETTER AKATAKANA LETTER SMALL IKATAKANA LETTER IKATAKANA LET" + + "TER SMALL UKATAKANA LETTER UKATAKANA LETTER SMALL EKATAKANA LETTER EKATA" + + "KANA LETTER SMALL OKATAKANA LETTER OKATAKANA LETTER KAKATAKANA LETTER GA" + + "KATAKANA LETTER KIKATAKANA LETTER GIKATAKANA LETTER KUKATAKANA LETTER GU" + + "KATAKANA LETTER KEKATAKANA LETTER GEKATAKANA LETTER KOKATAKANA LETTER GO" + + "KATAKANA LETTER SAKATAKANA LETTER ZAKATAKANA LETTER SIKATAKANA LETTER ZI" + + "KATAKANA LETTER SUKATAKANA LETTER ZUKATAKANA LETTER SEKATAKANA LETTER ZE" + + "KATAKANA LETTER SOKATAKANA LETTER ZOKATAKANA LETTER TAKATAKANA LETTER DA" + + "KATAKANA LETTER TIKATAKANA LETTER DIKATAKANA LETTER SMALL TUKATAKANA LET" + + "TER TUKATAKANA LETTER DUKATAKANA LETTER TEKATAKANA LETTER DEKATAKANA LET" + + "TER TOKATAKANA LETTER DOKATAKANA LETTER NAKATAKANA LETTER NIKATAKANA LET" + + "TER NUKATAKANA LETTER NEKATAKANA LETTER NOKATAKANA LETTER HAKATAKANA LET" + + "TER BAKATAKANA LETTER PAKATAKANA LETTER HIKATAKANA LETTER BIKATAKANA LET" + + "TER PIKATAKANA LETTER HUKATAKANA LETTER BUKATAKANA LETTER PUKATAKANA LET" + + "TER HEKATAKANA LETTER BEKATAKANA LETTER PEKATAKANA LETTER HOKATAKANA LET" + + "TER BOKATAKANA LETTER POKATAKANA LETTER MAKATAKANA LETTER MIKATAKANA LET" + + "TER MUKATAKANA LETTER MEKATAKANA LETTER MOKATAKANA LETTER SMALL YAKATAKA" + + "NA LETTER YAKATAKANA LETTER SMALL YUKATAKANA LETTER YUKATAKANA LETTER SM" + + "ALL YOKATAKANA LETTER YOKATAKANA LETTER RAKATAKANA LETTER RIKATAKANA LET" + + "TER RUKATAKANA LETTER REKATAKANA LETTER ROKATAKANA LETTER SMALL WAKATAKA" + + "NA LETTER WAKATAKANA LETTER WIKATAKANA LETTER WEKATAKANA LETTER WOKATAKA" + + "NA LETTER NKATAKANA LETTER VUKATAKANA LETTER SMALL KAKATAKANA LETTER SMA" + + "LL KEKATAKANA LETTER VAKATAKANA LETTER VIKATAKANA LETTER VEKATAKANA LETT" + + "ER VOKATAKANA MIDDLE DOTKATAKANA-HIRAGANA PROLONGED SOUND MARKKATAKANA I" + + "TERATION MARKKATAKANA VOICED ITERATION MARKKATAKANA DIGRAPH KOTOBOPOMOFO" + + " LETTER BBOPOMOFO LETTER PBOPOMOFO LETTER MBOPOMOFO LETTER FBOPOMOFO LET" + + "TER DBOPOMOFO LETTER TBOPOMOFO LETTER NBOPOMOFO LETTER LBOPOMOFO LETTER ") + ("" + + "GBOPOMOFO LETTER KBOPOMOFO LETTER HBOPOMOFO LETTER JBOPOMOFO LETTER QBOP" + + "OMOFO LETTER XBOPOMOFO LETTER ZHBOPOMOFO LETTER CHBOPOMOFO LETTER SHBOPO" + + "MOFO LETTER RBOPOMOFO LETTER ZBOPOMOFO LETTER CBOPOMOFO LETTER SBOPOMOFO" + + " LETTER ABOPOMOFO LETTER OBOPOMOFO LETTER EBOPOMOFO LETTER EHBOPOMOFO LE" + + "TTER AIBOPOMOFO LETTER EIBOPOMOFO LETTER AUBOPOMOFO LETTER OUBOPOMOFO LE" + + "TTER ANBOPOMOFO LETTER ENBOPOMOFO LETTER ANGBOPOMOFO LETTER ENGBOPOMOFO " + + "LETTER ERBOPOMOFO LETTER IBOPOMOFO LETTER UBOPOMOFO LETTER IUBOPOMOFO LE" + + "TTER VBOPOMOFO LETTER NGBOPOMOFO LETTER GNBOPOMOFO LETTER IHBOPOMOFO LET" + + "TER O WITH DOT ABOVEHANGUL LETTER KIYEOKHANGUL LETTER SSANGKIYEOKHANGUL " + + "LETTER KIYEOK-SIOSHANGUL LETTER NIEUNHANGUL LETTER NIEUN-CIEUCHANGUL LET" + + "TER NIEUN-HIEUHHANGUL LETTER TIKEUTHANGUL LETTER SSANGTIKEUTHANGUL LETTE" + + "R RIEULHANGUL LETTER RIEUL-KIYEOKHANGUL LETTER RIEUL-MIEUMHANGUL LETTER " + + "RIEUL-PIEUPHANGUL LETTER RIEUL-SIOSHANGUL LETTER RIEUL-THIEUTHHANGUL LET" + + "TER RIEUL-PHIEUPHHANGUL LETTER RIEUL-HIEUHHANGUL LETTER MIEUMHANGUL LETT" + + "ER PIEUPHANGUL LETTER SSANGPIEUPHANGUL LETTER PIEUP-SIOSHANGUL LETTER SI" + + "OSHANGUL LETTER SSANGSIOSHANGUL LETTER IEUNGHANGUL LETTER CIEUCHANGUL LE" + + "TTER SSANGCIEUCHANGUL LETTER CHIEUCHHANGUL LETTER KHIEUKHHANGUL LETTER T" + + "HIEUTHHANGUL LETTER PHIEUPHHANGUL LETTER HIEUHHANGUL LETTER AHANGUL LETT" + + "ER AEHANGUL LETTER YAHANGUL LETTER YAEHANGUL LETTER EOHANGUL LETTER EHAN" + + "GUL LETTER YEOHANGUL LETTER YEHANGUL LETTER OHANGUL LETTER WAHANGUL LETT" + + "ER WAEHANGUL LETTER OEHANGUL LETTER YOHANGUL LETTER UHANGUL LETTER WEOHA" + + "NGUL LETTER WEHANGUL LETTER WIHANGUL LETTER YUHANGUL LETTER EUHANGUL LET" + + "TER YIHANGUL LETTER IHANGUL FILLERHANGUL LETTER SSANGNIEUNHANGUL LETTER " + + "NIEUN-TIKEUTHANGUL LETTER NIEUN-SIOSHANGUL LETTER NIEUN-PANSIOSHANGUL LE" + + "TTER RIEUL-KIYEOK-SIOSHANGUL LETTER RIEUL-TIKEUTHANGUL LETTER RIEUL-PIEU" + + "P-SIOSHANGUL LETTER RIEUL-PANSIOSHANGUL LETTER RIEUL-YEORINHIEUHHANGUL L" + + "ETTER MIEUM-PIEUPHANGUL LETTER MIEUM-SIOSHANGUL LETTER MIEUM-PANSIOSHANG" + + "UL LETTER KAPYEOUNMIEUMHANGUL LETTER PIEUP-KIYEOKHANGUL LETTER PIEUP-TIK" + + "EUTHANGUL LETTER PIEUP-SIOS-KIYEOKHANGUL LETTER PIEUP-SIOS-TIKEUTHANGUL " + + "LETTER PIEUP-CIEUCHANGUL LETTER PIEUP-THIEUTHHANGUL LETTER KAPYEOUNPIEUP" + + "HANGUL LETTER KAPYEOUNSSANGPIEUPHANGUL LETTER SIOS-KIYEOKHANGUL LETTER S" + + "IOS-NIEUNHANGUL LETTER SIOS-TIKEUTHANGUL LETTER SIOS-PIEUPHANGUL LETTER " + + "SIOS-CIEUCHANGUL LETTER PANSIOSHANGUL LETTER SSANGIEUNGHANGUL LETTER YES" + + "IEUNGHANGUL LETTER YESIEUNG-SIOSHANGUL LETTER YESIEUNG-PANSIOSHANGUL LET" + + "TER KAPYEOUNPHIEUPHHANGUL LETTER SSANGHIEUHHANGUL LETTER YEORINHIEUHHANG" + + "UL LETTER YO-YAHANGUL LETTER YO-YAEHANGUL LETTER YO-IHANGUL LETTER YU-YE" + + "OHANGUL LETTER YU-YEHANGUL LETTER YU-IHANGUL LETTER ARAEAHANGUL LETTER A" + + "RAEAEIDEOGRAPHIC ANNOTATION LINKING MARKIDEOGRAPHIC ANNOTATION REVERSE M" + + "ARKIDEOGRAPHIC ANNOTATION ONE MARKIDEOGRAPHIC ANNOTATION TWO MARKIDEOGRA" + + "PHIC ANNOTATION THREE MARKIDEOGRAPHIC ANNOTATION FOUR MARKIDEOGRAPHIC AN" + + "NOTATION TOP MARKIDEOGRAPHIC ANNOTATION MIDDLE MARKIDEOGRAPHIC ANNOTATIO" + + "N BOTTOM MARKIDEOGRAPHIC ANNOTATION FIRST MARKIDEOGRAPHIC ANNOTATION SEC" + + "OND MARKIDEOGRAPHIC ANNOTATION THIRD MARKIDEOGRAPHIC ANNOTATION FOURTH M" + + "ARKIDEOGRAPHIC ANNOTATION HEAVEN MARKIDEOGRAPHIC ANNOTATION EARTH MARKID" + + "EOGRAPHIC ANNOTATION MAN MARKBOPOMOFO LETTER BUBOPOMOFO LETTER ZIBOPOMOF" + + "O LETTER JIBOPOMOFO LETTER GUBOPOMOFO LETTER EEBOPOMOFO LETTER ENNBOPOMO" + + "FO LETTER OOBOPOMOFO LETTER ONNBOPOMOFO LETTER IRBOPOMOFO LETTER ANNBOPO" + + "MOFO LETTER INNBOPOMOFO LETTER UNNBOPOMOFO LETTER IMBOPOMOFO LETTER NGGB" + + "OPOMOFO LETTER AINNBOPOMOFO LETTER AUNNBOPOMOFO LETTER AMBOPOMOFO LETTER" + + " OMBOPOMOFO LETTER ONGBOPOMOFO LETTER INNNBOPOMOFO FINAL LETTER PBOPOMOF" + + "O FINAL LETTER TBOPOMOFO FINAL LETTER KBOPOMOFO FINAL LETTER HBOPOMOFO L" + + "ETTER GHBOPOMOFO LETTER LHBOPOMOFO LETTER ZYCJK STROKE TCJK STROKE WGCJK" + + " STROKE XGCJK STROKE BXGCJK STROKE SWCJK STROKE HZZCJK STROKE HZGCJK STR" + + "OKE HPCJK STROKE HZWGCJK STROKE SZWGCJK STROKE HZTCJK STROKE HZZPCJK STR" + + "OKE HPWGCJK STROKE HZWCJK STROKE HZZZCJK STROKE NCJK STROKE HCJK STROKE " + + "SCJK STROKE PCJK STROKE SPCJK STROKE DCJK STROKE HZCJK STROKE HGCJK STRO" + + "KE SZCJK STROKE SWZCJK STROKE STCJK STROKE SGCJK STROKE PDCJK STROKE PZC" + + "JK STROKE TNCJK STROKE SZZCJK STROKE SWGCJK STROKE HXWGCJK STROKE HZZZGC" + + "JK STROKE PGCJK STROKE QKATAKANA LETTER SMALL KUKATAKANA LETTER SMALL SI" + + "KATAKANA LETTER SMALL SUKATAKANA LETTER SMALL TOKATAKANA LETTER SMALL NU" + + "KATAKANA LETTER SMALL HAKATAKANA LETTER SMALL HIKATAKANA LETTER SMALL HU" + + "KATAKANA LETTER SMALL HEKATAKANA LETTER SMALL HOKATAKANA LETTER SMALL MU" + + "KATAKANA LETTER SMALL RAKATAKANA LETTER SMALL RIKATAKANA LETTER SMALL RU" + + "KATAKANA LETTER SMALL REKATAKANA LETTER SMALL ROPARENTHESIZED HANGUL KIY") + ("" + + "EOKPARENTHESIZED HANGUL NIEUNPARENTHESIZED HANGUL TIKEUTPARENTHESIZED HA" + + "NGUL RIEULPARENTHESIZED HANGUL MIEUMPARENTHESIZED HANGUL PIEUPPARENTHESI" + + "ZED HANGUL SIOSPARENTHESIZED HANGUL IEUNGPARENTHESIZED HANGUL CIEUCPAREN" + + "THESIZED HANGUL CHIEUCHPARENTHESIZED HANGUL KHIEUKHPARENTHESIZED HANGUL " + + "THIEUTHPARENTHESIZED HANGUL PHIEUPHPARENTHESIZED HANGUL HIEUHPARENTHESIZ" + + "ED HANGUL KIYEOK APARENTHESIZED HANGUL NIEUN APARENTHESIZED HANGUL TIKEU" + + "T APARENTHESIZED HANGUL RIEUL APARENTHESIZED HANGUL MIEUM APARENTHESIZED" + + " HANGUL PIEUP APARENTHESIZED HANGUL SIOS APARENTHESIZED HANGUL IEUNG APA" + + "RENTHESIZED HANGUL CIEUC APARENTHESIZED HANGUL CHIEUCH APARENTHESIZED HA" + + "NGUL KHIEUKH APARENTHESIZED HANGUL THIEUTH APARENTHESIZED HANGUL PHIEUPH" + + " APARENTHESIZED HANGUL HIEUH APARENTHESIZED HANGUL CIEUC UPARENTHESIZED " + + "KOREAN CHARACTER OJEONPARENTHESIZED KOREAN CHARACTER O HUPARENTHESIZED I" + + "DEOGRAPH ONEPARENTHESIZED IDEOGRAPH TWOPARENTHESIZED IDEOGRAPH THREEPARE" + + "NTHESIZED IDEOGRAPH FOURPARENTHESIZED IDEOGRAPH FIVEPARENTHESIZED IDEOGR" + + "APH SIXPARENTHESIZED IDEOGRAPH SEVENPARENTHESIZED IDEOGRAPH EIGHTPARENTH" + + "ESIZED IDEOGRAPH NINEPARENTHESIZED IDEOGRAPH TENPARENTHESIZED IDEOGRAPH " + + "MOONPARENTHESIZED IDEOGRAPH FIREPARENTHESIZED IDEOGRAPH WATERPARENTHESIZ" + + "ED IDEOGRAPH WOODPARENTHESIZED IDEOGRAPH METALPARENTHESIZED IDEOGRAPH EA" + + "RTHPARENTHESIZED IDEOGRAPH SUNPARENTHESIZED IDEOGRAPH STOCKPARENTHESIZED" + + " IDEOGRAPH HAVEPARENTHESIZED IDEOGRAPH SOCIETYPARENTHESIZED IDEOGRAPH NA" + + "MEPARENTHESIZED IDEOGRAPH SPECIALPARENTHESIZED IDEOGRAPH FINANCIALPARENT" + + "HESIZED IDEOGRAPH CONGRATULATIONPARENTHESIZED IDEOGRAPH LABORPARENTHESIZ" + + "ED IDEOGRAPH REPRESENTPARENTHESIZED IDEOGRAPH CALLPARENTHESIZED IDEOGRAP" + + "H STUDYPARENTHESIZED IDEOGRAPH SUPERVISEPARENTHESIZED IDEOGRAPH ENTERPRI" + + "SEPARENTHESIZED IDEOGRAPH RESOURCEPARENTHESIZED IDEOGRAPH ALLIANCEPARENT" + + "HESIZED IDEOGRAPH FESTIVALPARENTHESIZED IDEOGRAPH RESTPARENTHESIZED IDEO" + + "GRAPH SELFPARENTHESIZED IDEOGRAPH REACHCIRCLED IDEOGRAPH QUESTIONCIRCLED" + + " IDEOGRAPH KINDERGARTENCIRCLED IDEOGRAPH SCHOOLCIRCLED IDEOGRAPH KOTOCIR" + + "CLED NUMBER TEN ON BLACK SQUARECIRCLED NUMBER TWENTY ON BLACK SQUARECIRC" + + "LED NUMBER THIRTY ON BLACK SQUARECIRCLED NUMBER FORTY ON BLACK SQUARECIR" + + "CLED NUMBER FIFTY ON BLACK SQUARECIRCLED NUMBER SIXTY ON BLACK SQUARECIR" + + "CLED NUMBER SEVENTY ON BLACK SQUARECIRCLED NUMBER EIGHTY ON BLACK SQUARE" + + "PARTNERSHIP SIGNCIRCLED NUMBER TWENTY ONECIRCLED NUMBER TWENTY TWOCIRCLE" + + "D NUMBER TWENTY THREECIRCLED NUMBER TWENTY FOURCIRCLED NUMBER TWENTY FIV" + + "ECIRCLED NUMBER TWENTY SIXCIRCLED NUMBER TWENTY SEVENCIRCLED NUMBER TWEN" + + "TY EIGHTCIRCLED NUMBER TWENTY NINECIRCLED NUMBER THIRTYCIRCLED NUMBER TH" + + "IRTY ONECIRCLED NUMBER THIRTY TWOCIRCLED NUMBER THIRTY THREECIRCLED NUMB" + + "ER THIRTY FOURCIRCLED NUMBER THIRTY FIVECIRCLED HANGUL KIYEOKCIRCLED HAN" + + "GUL NIEUNCIRCLED HANGUL TIKEUTCIRCLED HANGUL RIEULCIRCLED HANGUL MIEUMCI" + + "RCLED HANGUL PIEUPCIRCLED HANGUL SIOSCIRCLED HANGUL IEUNGCIRCLED HANGUL " + + "CIEUCCIRCLED HANGUL CHIEUCHCIRCLED HANGUL KHIEUKHCIRCLED HANGUL THIEUTHC" + + "IRCLED HANGUL PHIEUPHCIRCLED HANGUL HIEUHCIRCLED HANGUL KIYEOK ACIRCLED " + + "HANGUL NIEUN ACIRCLED HANGUL TIKEUT ACIRCLED HANGUL RIEUL ACIRCLED HANGU" + + "L MIEUM ACIRCLED HANGUL PIEUP ACIRCLED HANGUL SIOS ACIRCLED HANGUL IEUNG" + + " ACIRCLED HANGUL CIEUC ACIRCLED HANGUL CHIEUCH ACIRCLED HANGUL KHIEUKH A" + + "CIRCLED HANGUL THIEUTH ACIRCLED HANGUL PHIEUPH ACIRCLED HANGUL HIEUH ACI" + + "RCLED KOREAN CHARACTER CHAMKOCIRCLED KOREAN CHARACTER JUEUICIRCLED HANGU" + + "L IEUNG UKOREAN STANDARD SYMBOLCIRCLED IDEOGRAPH ONECIRCLED IDEOGRAPH TW" + + "OCIRCLED IDEOGRAPH THREECIRCLED IDEOGRAPH FOURCIRCLED IDEOGRAPH FIVECIRC" + + "LED IDEOGRAPH SIXCIRCLED IDEOGRAPH SEVENCIRCLED IDEOGRAPH EIGHTCIRCLED I" + + "DEOGRAPH NINECIRCLED IDEOGRAPH TENCIRCLED IDEOGRAPH MOONCIRCLED IDEOGRAP" + + "H FIRECIRCLED IDEOGRAPH WATERCIRCLED IDEOGRAPH WOODCIRCLED IDEOGRAPH MET" + + "ALCIRCLED IDEOGRAPH EARTHCIRCLED IDEOGRAPH SUNCIRCLED IDEOGRAPH STOCKCIR" + + "CLED IDEOGRAPH HAVECIRCLED IDEOGRAPH SOCIETYCIRCLED IDEOGRAPH NAMECIRCLE" + + "D IDEOGRAPH SPECIALCIRCLED IDEOGRAPH FINANCIALCIRCLED IDEOGRAPH CONGRATU" + + "LATIONCIRCLED IDEOGRAPH LABORCIRCLED IDEOGRAPH SECRETCIRCLED IDEOGRAPH M" + + "ALECIRCLED IDEOGRAPH FEMALECIRCLED IDEOGRAPH SUITABLECIRCLED IDEOGRAPH E" + + "XCELLENTCIRCLED IDEOGRAPH PRINTCIRCLED IDEOGRAPH ATTENTIONCIRCLED IDEOGR" + + "APH ITEMCIRCLED IDEOGRAPH RESTCIRCLED IDEOGRAPH COPYCIRCLED IDEOGRAPH CO" + + "RRECTCIRCLED IDEOGRAPH HIGHCIRCLED IDEOGRAPH CENTRECIRCLED IDEOGRAPH LOW" + + "CIRCLED IDEOGRAPH LEFTCIRCLED IDEOGRAPH RIGHTCIRCLED IDEOGRAPH MEDICINEC" + + "IRCLED IDEOGRAPH RELIGIONCIRCLED IDEOGRAPH STUDYCIRCLED IDEOGRAPH SUPERV" + + "ISECIRCLED IDEOGRAPH ENTERPRISECIRCLED IDEOGRAPH RESOURCECIRCLED IDEOGRA" + + "PH ALLIANCECIRCLED IDEOGRAPH NIGHTCIRCLED NUMBER THIRTY SIXCIRCLED NUMBE") + ("" + + "R THIRTY SEVENCIRCLED NUMBER THIRTY EIGHTCIRCLED NUMBER THIRTY NINECIRCL" + + "ED NUMBER FORTYCIRCLED NUMBER FORTY ONECIRCLED NUMBER FORTY TWOCIRCLED N" + + "UMBER FORTY THREECIRCLED NUMBER FORTY FOURCIRCLED NUMBER FORTY FIVECIRCL" + + "ED NUMBER FORTY SIXCIRCLED NUMBER FORTY SEVENCIRCLED NUMBER FORTY EIGHTC" + + "IRCLED NUMBER FORTY NINECIRCLED NUMBER FIFTYIDEOGRAPHIC TELEGRAPH SYMBOL" + + " FOR JANUARYIDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARYIDEOGRAPHIC TELEGRA" + + "PH SYMBOL FOR MARCHIDEOGRAPHIC TELEGRAPH SYMBOL FOR APRILIDEOGRAPHIC TEL" + + "EGRAPH SYMBOL FOR MAYIDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNEIDEOGRAPHIC TE" + + "LEGRAPH SYMBOL FOR JULYIDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUSTIDEOGRAPHI" + + "C TELEGRAPH SYMBOL FOR SEPTEMBERIDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER" + + "IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBERIDEOGRAPHIC TELEGRAPH SYMBOL FO" + + "R DECEMBERSQUARE HGSQUARE ERGSQUARE EVLIMITED LIABILITY SIGNCIRCLED KATA" + + "KANA ACIRCLED KATAKANA ICIRCLED KATAKANA UCIRCLED KATAKANA ECIRCLED KATA" + + "KANA OCIRCLED KATAKANA KACIRCLED KATAKANA KICIRCLED KATAKANA KUCIRCLED K" + + "ATAKANA KECIRCLED KATAKANA KOCIRCLED KATAKANA SACIRCLED KATAKANA SICIRCL" + + "ED KATAKANA SUCIRCLED KATAKANA SECIRCLED KATAKANA SOCIRCLED KATAKANA TAC" + + "IRCLED KATAKANA TICIRCLED KATAKANA TUCIRCLED KATAKANA TECIRCLED KATAKANA" + + " TOCIRCLED KATAKANA NACIRCLED KATAKANA NICIRCLED KATAKANA NUCIRCLED KATA" + + "KANA NECIRCLED KATAKANA NOCIRCLED KATAKANA HACIRCLED KATAKANA HICIRCLED " + + "KATAKANA HUCIRCLED KATAKANA HECIRCLED KATAKANA HOCIRCLED KATAKANA MACIRC" + + "LED KATAKANA MICIRCLED KATAKANA MUCIRCLED KATAKANA MECIRCLED KATAKANA MO" + + "CIRCLED KATAKANA YACIRCLED KATAKANA YUCIRCLED KATAKANA YOCIRCLED KATAKAN" + + "A RACIRCLED KATAKANA RICIRCLED KATAKANA RUCIRCLED KATAKANA RECIRCLED KAT" + + "AKANA ROCIRCLED KATAKANA WACIRCLED KATAKANA WICIRCLED KATAKANA WECIRCLED" + + " KATAKANA WOSQUARE APAATOSQUARE ARUHUASQUARE ANPEASQUARE AARUSQUARE ININ" + + "GUSQUARE INTISQUARE UONSQUARE ESUKUUDOSQUARE EEKAASQUARE ONSUSQUARE OOMU" + + "SQUARE KAIRISQUARE KARATTOSQUARE KARORIISQUARE GARONSQUARE GANMASQUARE G" + + "IGASQUARE GINIISQUARE KYURIISQUARE GIRUDAASQUARE KIROSQUARE KIROGURAMUSQ" + + "UARE KIROMEETORUSQUARE KIROWATTOSQUARE GURAMUSQUARE GURAMUTONSQUARE KURU" + + "ZEIROSQUARE KUROONESQUARE KEESUSQUARE KORUNASQUARE KOOPOSQUARE SAIKURUSQ" + + "UARE SANTIIMUSQUARE SIRINGUSQUARE SENTISQUARE SENTOSQUARE DAASUSQUARE DE" + + "SISQUARE DORUSQUARE TONSQUARE NANOSQUARE NOTTOSQUARE HAITUSQUARE PAASENT" + + "OSQUARE PAATUSQUARE BAARERUSQUARE PIASUTORUSQUARE PIKURUSQUARE PIKOSQUAR" + + "E BIRUSQUARE HUARADDOSQUARE HUIITOSQUARE BUSSYERUSQUARE HURANSQUARE HEKU" + + "TAARUSQUARE PESOSQUARE PENIHISQUARE HERUTUSQUARE PENSUSQUARE PEEZISQUARE" + + " BEETASQUARE POINTOSQUARE BORUTOSQUARE HONSQUARE PONDOSQUARE HOORUSQUARE" + + " HOONSQUARE MAIKUROSQUARE MAIRUSQUARE MAHHASQUARE MARUKUSQUARE MANSYONSQ" + + "UARE MIKURONSQUARE MIRISQUARE MIRIBAARUSQUARE MEGASQUARE MEGATONSQUARE M" + + "EETORUSQUARE YAADOSQUARE YAARUSQUARE YUANSQUARE RITTORUSQUARE RIRASQUARE" + + " RUPIISQUARE RUUBURUSQUARE REMUSQUARE RENTOGENSQUARE WATTOIDEOGRAPHIC TE" + + "LEGRAPH SYMBOL FOR HOUR ZEROIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONEIDE" + + "OGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWOIDEOGRAPHIC TELEGRAPH SYMBOL FOR H" + + "OUR THREEIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURIDEOGRAPHIC TELEGRAPH" + + " SYMBOL FOR HOUR FIVEIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXIDEOGRAPHI" + + "C TELEGRAPH SYMBOL FOR HOUR SEVENIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR E" + + "IGHTIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINEIDEOGRAPHIC TELEGRAPH SYMB" + + "OL FOR HOUR TENIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVENIDEOGRAPHIC T" + + "ELEGRAPH SYMBOL FOR HOUR TWELVEIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THI" + + "RTEENIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEENIDEOGRAPHIC TELEGRAPH" + + " SYMBOL FOR HOUR FIFTEENIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEENIDE" + + "OGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEENIDEOGRAPHIC TELEGRAPH SYMBOL" + + " FOR HOUR EIGHTEENIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEENIDEOGRAP" + + "HIC TELEGRAPH SYMBOL FOR HOUR TWENTYIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOU" + + "R TWENTY-ONEIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWOIDEOGRAPHIC " + + "TELEGRAPH SYMBOL FOR HOUR TWENTY-THREEIDEOGRAPHIC TELEGRAPH SYMBOL FOR H" + + "OUR TWENTY-FOURSQUARE HPASQUARE DASQUARE AUSQUARE BARSQUARE OVSQUARE PCS" + + "QUARE DMSQUARE DM SQUAREDSQUARE DM CUBEDSQUARE IUSQUARE ERA NAME HEISEIS" + + "QUARE ERA NAME SYOUWASQUARE ERA NAME TAISYOUSQUARE ERA NAME MEIZISQUARE " + + "CORPORATIONSQUARE PA AMPSSQUARE NASQUARE MU ASQUARE MASQUARE KASQUARE KB" + + "SQUARE MBSQUARE GBSQUARE CALSQUARE KCALSQUARE PFSQUARE NFSQUARE MU FSQUA" + + "RE MU GSQUARE MGSQUARE KGSQUARE HZSQUARE KHZSQUARE MHZSQUARE GHZSQUARE T" + + "HZSQUARE MU LSQUARE MLSQUARE DLSQUARE KLSQUARE FMSQUARE NMSQUARE MU MSQU" + + "ARE MMSQUARE CMSQUARE KMSQUARE MM SQUAREDSQUARE CM SQUAREDSQUARE M SQUAR" + + "EDSQUARE KM SQUAREDSQUARE MM CUBEDSQUARE CM CUBEDSQUARE M CUBEDSQUARE KM") + ("" + + " CUBEDSQUARE M OVER SSQUARE M OVER S SQUAREDSQUARE PASQUARE KPASQUARE MP" + + "ASQUARE GPASQUARE RADSQUARE RAD OVER SSQUARE RAD OVER S SQUAREDSQUARE PS" + + "SQUARE NSSQUARE MU SSQUARE MSSQUARE PVSQUARE NVSQUARE MU VSQUARE MVSQUAR" + + "E KVSQUARE MV MEGASQUARE PWSQUARE NWSQUARE MU WSQUARE MWSQUARE KWSQUARE " + + "MW MEGASQUARE K OHMSQUARE M OHMSQUARE AMSQUARE BQSQUARE CCSQUARE CDSQUAR" + + "E C OVER KGSQUARE COSQUARE DBSQUARE GYSQUARE HASQUARE HPSQUARE INSQUARE " + + "KKSQUARE KM CAPITALSQUARE KTSQUARE LMSQUARE LNSQUARE LOGSQUARE LXSQUARE " + + "MB SMALLSQUARE MILSQUARE MOLSQUARE PHSQUARE PMSQUARE PPMSQUARE PRSQUARE " + + "SRSQUARE SVSQUARE WBSQUARE V OVER MSQUARE A OVER MIDEOGRAPHIC TELEGRAPH " + + "SYMBOL FOR DAY ONEIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWOIDEOGRAPHIC TE" + + "LEGRAPH SYMBOL FOR DAY THREEIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURIDE" + + "OGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVEIDEOGRAPHIC TELEGRAPH SYMBOL FOR D" + + "AY SIXIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENIDEOGRAPHIC TELEGRAPH SY" + + "MBOL FOR DAY EIGHTIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINEIDEOGRAPHIC T" + + "ELEGRAPH SYMBOL FOR DAY TENIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVENID" + + "EOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVEIDEOGRAPHIC TELEGRAPH SYMBOL FO" + + "R DAY THIRTEENIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEENIDEOGRAPHIC T" + + "ELEGRAPH SYMBOL FOR DAY FIFTEENIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXT" + + "EENIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEENIDEOGRAPHIC TELEGRAPH S" + + "YMBOL FOR DAY EIGHTEENIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEENIDEOG" + + "RAPHIC TELEGRAPH SYMBOL FOR DAY TWENTYIDEOGRAPHIC TELEGRAPH SYMBOL FOR D" + + "AY TWENTY-ONEIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWOIDEOGRAPHIC " + + "TELEGRAPH SYMBOL FOR DAY TWENTY-THREEIDEOGRAPHIC TELEGRAPH SYMBOL FOR DA" + + "Y TWENTY-FOURIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVEIDEOGRAPHIC" + + " TELEGRAPH SYMBOL FOR DAY TWENTY-SIXIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY" + + " TWENTY-SEVENIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHTIDEOGRAPHI" + + "C TELEGRAPH SYMBOL FOR DAY TWENTY-NINEIDEOGRAPHIC TELEGRAPH SYMBOL FOR D" + + "AY THIRTYIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONESQUARE GALHEXAGR" + + "AM FOR THE CREATIVE HEAVENHEXAGRAM FOR THE RECEPTIVE EARTHHEXAGRAM FOR D" + + "IFFICULTY AT THE BEGINNINGHEXAGRAM FOR YOUTHFUL FOLLYHEXAGRAM FOR WAITIN" + + "GHEXAGRAM FOR CONFLICTHEXAGRAM FOR THE ARMYHEXAGRAM FOR HOLDING TOGETHER" + + "HEXAGRAM FOR SMALL TAMINGHEXAGRAM FOR TREADINGHEXAGRAM FOR PEACEHEXAGRAM" + + " FOR STANDSTILLHEXAGRAM FOR FELLOWSHIPHEXAGRAM FOR GREAT POSSESSIONHEXAG" + + "RAM FOR MODESTYHEXAGRAM FOR ENTHUSIASMHEXAGRAM FOR FOLLOWINGHEXAGRAM FOR" + + " WORK ON THE DECAYEDHEXAGRAM FOR APPROACHHEXAGRAM FOR CONTEMPLATIONHEXAG" + + "RAM FOR BITING THROUGHHEXAGRAM FOR GRACEHEXAGRAM FOR SPLITTING APARTHEXA" + + "GRAM FOR RETURNHEXAGRAM FOR INNOCENCEHEXAGRAM FOR GREAT TAMINGHEXAGRAM F" + + "OR MOUTH CORNERSHEXAGRAM FOR GREAT PREPONDERANCEHEXAGRAM FOR THE ABYSMAL" + + " WATERHEXAGRAM FOR THE CLINGING FIREHEXAGRAM FOR INFLUENCEHEXAGRAM FOR D" + + "URATIONHEXAGRAM FOR RETREATHEXAGRAM FOR GREAT POWERHEXAGRAM FOR PROGRESS" + + "HEXAGRAM FOR DARKENING OF THE LIGHTHEXAGRAM FOR THE FAMILYHEXAGRAM FOR O" + + "PPOSITIONHEXAGRAM FOR OBSTRUCTIONHEXAGRAM FOR DELIVERANCEHEXAGRAM FOR DE" + + "CREASEHEXAGRAM FOR INCREASEHEXAGRAM FOR BREAKTHROUGHHEXAGRAM FOR COMING " + + "TO MEETHEXAGRAM FOR GATHERING TOGETHERHEXAGRAM FOR PUSHING UPWARDHEXAGRA" + + "M FOR OPPRESSIONHEXAGRAM FOR THE WELLHEXAGRAM FOR REVOLUTIONHEXAGRAM FOR" + + " THE CAULDRONHEXAGRAM FOR THE AROUSING THUNDERHEXAGRAM FOR THE KEEPING S" + + "TILL MOUNTAINHEXAGRAM FOR DEVELOPMENTHEXAGRAM FOR THE MARRYING MAIDENHEX" + + "AGRAM FOR ABUNDANCEHEXAGRAM FOR THE WANDERERHEXAGRAM FOR THE GENTLE WIND" + + "HEXAGRAM FOR THE JOYOUS LAKEHEXAGRAM FOR DISPERSIONHEXAGRAM FOR LIMITATI" + + "ONHEXAGRAM FOR INNER TRUTHHEXAGRAM FOR SMALL PREPONDERANCEHEXAGRAM FOR A" + + "FTER COMPLETIONHEXAGRAM FOR BEFORE COMPLETIONYI SYLLABLE ITYI SYLLABLE I" + + "XYI SYLLABLE IYI SYLLABLE IPYI SYLLABLE IETYI SYLLABLE IEXYI SYLLABLE IE" + + "YI SYLLABLE IEPYI SYLLABLE ATYI SYLLABLE AXYI SYLLABLE AYI SYLLABLE APYI" + + " SYLLABLE UOXYI SYLLABLE UOYI SYLLABLE UOPYI SYLLABLE OTYI SYLLABLE OXYI" + + " SYLLABLE OYI SYLLABLE OPYI SYLLABLE EXYI SYLLABLE EYI SYLLABLE WUYI SYL" + + "LABLE BITYI SYLLABLE BIXYI SYLLABLE BIYI SYLLABLE BIPYI SYLLABLE BIETYI " + + "SYLLABLE BIEXYI SYLLABLE BIEYI SYLLABLE BIEPYI SYLLABLE BATYI SYLLABLE B" + + "AXYI SYLLABLE BAYI SYLLABLE BAPYI SYLLABLE BUOXYI SYLLABLE BUOYI SYLLABL" + + "E BUOPYI SYLLABLE BOTYI SYLLABLE BOXYI SYLLABLE BOYI SYLLABLE BOPYI SYLL" + + "ABLE BEXYI SYLLABLE BEYI SYLLABLE BEPYI SYLLABLE BUTYI SYLLABLE BUXYI SY" + + "LLABLE BUYI SYLLABLE BUPYI SYLLABLE BURXYI SYLLABLE BURYI SYLLABLE BYTYI" + + " SYLLABLE BYXYI SYLLABLE BYYI SYLLABLE BYPYI SYLLABLE BYRXYI SYLLABLE BY" + + "RYI SYLLABLE PITYI SYLLABLE PIXYI SYLLABLE PIYI SYLLABLE PIPYI SYLLABLE " + + "PIEXYI SYLLABLE PIEYI SYLLABLE PIEPYI SYLLABLE PATYI SYLLABLE PAXYI SYLL") + ("" + + "ABLE PAYI SYLLABLE PAPYI SYLLABLE PUOXYI SYLLABLE PUOYI SYLLABLE PUOPYI " + + "SYLLABLE POTYI SYLLABLE POXYI SYLLABLE POYI SYLLABLE POPYI SYLLABLE PUTY" + + "I SYLLABLE PUXYI SYLLABLE PUYI SYLLABLE PUPYI SYLLABLE PURXYI SYLLABLE P" + + "URYI SYLLABLE PYTYI SYLLABLE PYXYI SYLLABLE PYYI SYLLABLE PYPYI SYLLABLE" + + " PYRXYI SYLLABLE PYRYI SYLLABLE BBITYI SYLLABLE BBIXYI SYLLABLE BBIYI SY" + + "LLABLE BBIPYI SYLLABLE BBIETYI SYLLABLE BBIEXYI SYLLABLE BBIEYI SYLLABLE" + + " BBIEPYI SYLLABLE BBATYI SYLLABLE BBAXYI SYLLABLE BBAYI SYLLABLE BBAPYI " + + "SYLLABLE BBUOXYI SYLLABLE BBUOYI SYLLABLE BBUOPYI SYLLABLE BBOTYI SYLLAB" + + "LE BBOXYI SYLLABLE BBOYI SYLLABLE BBOPYI SYLLABLE BBEXYI SYLLABLE BBEYI " + + "SYLLABLE BBEPYI SYLLABLE BBUTYI SYLLABLE BBUXYI SYLLABLE BBUYI SYLLABLE " + + "BBUPYI SYLLABLE BBURXYI SYLLABLE BBURYI SYLLABLE BBYTYI SYLLABLE BBYXYI " + + "SYLLABLE BBYYI SYLLABLE BBYPYI SYLLABLE NBITYI SYLLABLE NBIXYI SYLLABLE " + + "NBIYI SYLLABLE NBIPYI SYLLABLE NBIEXYI SYLLABLE NBIEYI SYLLABLE NBIEPYI " + + "SYLLABLE NBATYI SYLLABLE NBAXYI SYLLABLE NBAYI SYLLABLE NBAPYI SYLLABLE " + + "NBOTYI SYLLABLE NBOXYI SYLLABLE NBOYI SYLLABLE NBOPYI SYLLABLE NBUTYI SY" + + "LLABLE NBUXYI SYLLABLE NBUYI SYLLABLE NBUPYI SYLLABLE NBURXYI SYLLABLE N" + + "BURYI SYLLABLE NBYTYI SYLLABLE NBYXYI SYLLABLE NBYYI SYLLABLE NBYPYI SYL" + + "LABLE NBYRXYI SYLLABLE NBYRYI SYLLABLE HMITYI SYLLABLE HMIXYI SYLLABLE H" + + "MIYI SYLLABLE HMIPYI SYLLABLE HMIEXYI SYLLABLE HMIEYI SYLLABLE HMIEPYI S" + + "YLLABLE HMATYI SYLLABLE HMAXYI SYLLABLE HMAYI SYLLABLE HMAPYI SYLLABLE H" + + "MUOXYI SYLLABLE HMUOYI SYLLABLE HMUOPYI SYLLABLE HMOTYI SYLLABLE HMOXYI " + + "SYLLABLE HMOYI SYLLABLE HMOPYI SYLLABLE HMUTYI SYLLABLE HMUXYI SYLLABLE " + + "HMUYI SYLLABLE HMUPYI SYLLABLE HMURXYI SYLLABLE HMURYI SYLLABLE HMYXYI S" + + "YLLABLE HMYYI SYLLABLE HMYPYI SYLLABLE HMYRXYI SYLLABLE HMYRYI SYLLABLE " + + "MITYI SYLLABLE MIXYI SYLLABLE MIYI SYLLABLE MIPYI SYLLABLE MIEXYI SYLLAB" + + "LE MIEYI SYLLABLE MIEPYI SYLLABLE MATYI SYLLABLE MAXYI SYLLABLE MAYI SYL" + + "LABLE MAPYI SYLLABLE MUOTYI SYLLABLE MUOXYI SYLLABLE MUOYI SYLLABLE MUOP" + + "YI SYLLABLE MOTYI SYLLABLE MOXYI SYLLABLE MOYI SYLLABLE MOPYI SYLLABLE M" + + "EXYI SYLLABLE MEYI SYLLABLE MUTYI SYLLABLE MUXYI SYLLABLE MUYI SYLLABLE " + + "MUPYI SYLLABLE MURXYI SYLLABLE MURYI SYLLABLE MYTYI SYLLABLE MYXYI SYLLA" + + "BLE MYYI SYLLABLE MYPYI SYLLABLE FITYI SYLLABLE FIXYI SYLLABLE FIYI SYLL" + + "ABLE FIPYI SYLLABLE FATYI SYLLABLE FAXYI SYLLABLE FAYI SYLLABLE FAPYI SY" + + "LLABLE FOXYI SYLLABLE FOYI SYLLABLE FOPYI SYLLABLE FUTYI SYLLABLE FUXYI " + + "SYLLABLE FUYI SYLLABLE FUPYI SYLLABLE FURXYI SYLLABLE FURYI SYLLABLE FYT" + + "YI SYLLABLE FYXYI SYLLABLE FYYI SYLLABLE FYPYI SYLLABLE VITYI SYLLABLE V" + + "IXYI SYLLABLE VIYI SYLLABLE VIPYI SYLLABLE VIETYI SYLLABLE VIEXYI SYLLAB" + + "LE VIEYI SYLLABLE VIEPYI SYLLABLE VATYI SYLLABLE VAXYI SYLLABLE VAYI SYL" + + "LABLE VAPYI SYLLABLE VOTYI SYLLABLE VOXYI SYLLABLE VOYI SYLLABLE VOPYI S" + + "YLLABLE VEXYI SYLLABLE VEPYI SYLLABLE VUTYI SYLLABLE VUXYI SYLLABLE VUYI" + + " SYLLABLE VUPYI SYLLABLE VURXYI SYLLABLE VURYI SYLLABLE VYTYI SYLLABLE V" + + "YXYI SYLLABLE VYYI SYLLABLE VYPYI SYLLABLE VYRXYI SYLLABLE VYRYI SYLLABL" + + "E DITYI SYLLABLE DIXYI SYLLABLE DIYI SYLLABLE DIPYI SYLLABLE DIEXYI SYLL" + + "ABLE DIEYI SYLLABLE DIEPYI SYLLABLE DATYI SYLLABLE DAXYI SYLLABLE DAYI S" + + "YLLABLE DAPYI SYLLABLE DUOXYI SYLLABLE DUOYI SYLLABLE DOTYI SYLLABLE DOX" + + "YI SYLLABLE DOYI SYLLABLE DOPYI SYLLABLE DEXYI SYLLABLE DEYI SYLLABLE DE" + + "PYI SYLLABLE DUTYI SYLLABLE DUXYI SYLLABLE DUYI SYLLABLE DUPYI SYLLABLE " + + "DURXYI SYLLABLE DURYI SYLLABLE TITYI SYLLABLE TIXYI SYLLABLE TIYI SYLLAB" + + "LE TIPYI SYLLABLE TIEXYI SYLLABLE TIEYI SYLLABLE TIEPYI SYLLABLE TATYI S" + + "YLLABLE TAXYI SYLLABLE TAYI SYLLABLE TAPYI SYLLABLE TUOTYI SYLLABLE TUOX" + + "YI SYLLABLE TUOYI SYLLABLE TUOPYI SYLLABLE TOTYI SYLLABLE TOXYI SYLLABLE" + + " TOYI SYLLABLE TOPYI SYLLABLE TEXYI SYLLABLE TEYI SYLLABLE TEPYI SYLLABL" + + "E TUTYI SYLLABLE TUXYI SYLLABLE TUYI SYLLABLE TUPYI SYLLABLE TURXYI SYLL" + + "ABLE TURYI SYLLABLE DDITYI SYLLABLE DDIXYI SYLLABLE DDIYI SYLLABLE DDIPY" + + "I SYLLABLE DDIEXYI SYLLABLE DDIEYI SYLLABLE DDIEPYI SYLLABLE DDATYI SYLL" + + "ABLE DDAXYI SYLLABLE DDAYI SYLLABLE DDAPYI SYLLABLE DDUOXYI SYLLABLE DDU" + + "OYI SYLLABLE DDUOPYI SYLLABLE DDOTYI SYLLABLE DDOXYI SYLLABLE DDOYI SYLL" + + "ABLE DDOPYI SYLLABLE DDEXYI SYLLABLE DDEYI SYLLABLE DDEPYI SYLLABLE DDUT" + + "YI SYLLABLE DDUXYI SYLLABLE DDUYI SYLLABLE DDUPYI SYLLABLE DDURXYI SYLLA" + + "BLE DDURYI SYLLABLE NDITYI SYLLABLE NDIXYI SYLLABLE NDIYI SYLLABLE NDIPY" + + "I SYLLABLE NDIEXYI SYLLABLE NDIEYI SYLLABLE NDATYI SYLLABLE NDAXYI SYLLA" + + "BLE NDAYI SYLLABLE NDAPYI SYLLABLE NDOTYI SYLLABLE NDOXYI SYLLABLE NDOYI" + + " SYLLABLE NDOPYI SYLLABLE NDEXYI SYLLABLE NDEYI SYLLABLE NDEPYI SYLLABLE" + + " NDUTYI SYLLABLE NDUXYI SYLLABLE NDUYI SYLLABLE NDUPYI SYLLABLE NDURXYI " + + "SYLLABLE NDURYI SYLLABLE HNITYI SYLLABLE HNIXYI SYLLABLE HNIYI SYLLABLE ") + ("" + + "HNIPYI SYLLABLE HNIETYI SYLLABLE HNIEXYI SYLLABLE HNIEYI SYLLABLE HNIEPY" + + "I SYLLABLE HNATYI SYLLABLE HNAXYI SYLLABLE HNAYI SYLLABLE HNAPYI SYLLABL" + + "E HNUOXYI SYLLABLE HNUOYI SYLLABLE HNOTYI SYLLABLE HNOXYI SYLLABLE HNOPY" + + "I SYLLABLE HNEXYI SYLLABLE HNEYI SYLLABLE HNEPYI SYLLABLE HNUTYI SYLLABL" + + "E NITYI SYLLABLE NIXYI SYLLABLE NIYI SYLLABLE NIPYI SYLLABLE NIEXYI SYLL" + + "ABLE NIEYI SYLLABLE NIEPYI SYLLABLE NAXYI SYLLABLE NAYI SYLLABLE NAPYI S" + + "YLLABLE NUOXYI SYLLABLE NUOYI SYLLABLE NUOPYI SYLLABLE NOTYI SYLLABLE NO" + + "XYI SYLLABLE NOYI SYLLABLE NOPYI SYLLABLE NEXYI SYLLABLE NEYI SYLLABLE N" + + "EPYI SYLLABLE NUTYI SYLLABLE NUXYI SYLLABLE NUYI SYLLABLE NUPYI SYLLABLE" + + " NURXYI SYLLABLE NURYI SYLLABLE HLITYI SYLLABLE HLIXYI SYLLABLE HLIYI SY" + + "LLABLE HLIPYI SYLLABLE HLIEXYI SYLLABLE HLIEYI SYLLABLE HLIEPYI SYLLABLE" + + " HLATYI SYLLABLE HLAXYI SYLLABLE HLAYI SYLLABLE HLAPYI SYLLABLE HLUOXYI " + + "SYLLABLE HLUOYI SYLLABLE HLUOPYI SYLLABLE HLOXYI SYLLABLE HLOYI SYLLABLE" + + " HLOPYI SYLLABLE HLEXYI SYLLABLE HLEYI SYLLABLE HLEPYI SYLLABLE HLUTYI S" + + "YLLABLE HLUXYI SYLLABLE HLUYI SYLLABLE HLUPYI SYLLABLE HLURXYI SYLLABLE " + + "HLURYI SYLLABLE HLYTYI SYLLABLE HLYXYI SYLLABLE HLYYI SYLLABLE HLYPYI SY" + + "LLABLE HLYRXYI SYLLABLE HLYRYI SYLLABLE LITYI SYLLABLE LIXYI SYLLABLE LI" + + "YI SYLLABLE LIPYI SYLLABLE LIETYI SYLLABLE LIEXYI SYLLABLE LIEYI SYLLABL" + + "E LIEPYI SYLLABLE LATYI SYLLABLE LAXYI SYLLABLE LAYI SYLLABLE LAPYI SYLL" + + "ABLE LUOTYI SYLLABLE LUOXYI SYLLABLE LUOYI SYLLABLE LUOPYI SYLLABLE LOTY" + + "I SYLLABLE LOXYI SYLLABLE LOYI SYLLABLE LOPYI SYLLABLE LEXYI SYLLABLE LE" + + "YI SYLLABLE LEPYI SYLLABLE LUTYI SYLLABLE LUXYI SYLLABLE LUYI SYLLABLE L" + + "UPYI SYLLABLE LURXYI SYLLABLE LURYI SYLLABLE LYTYI SYLLABLE LYXYI SYLLAB" + + "LE LYYI SYLLABLE LYPYI SYLLABLE LYRXYI SYLLABLE LYRYI SYLLABLE GITYI SYL" + + "LABLE GIXYI SYLLABLE GIYI SYLLABLE GIPYI SYLLABLE GIETYI SYLLABLE GIEXYI" + + " SYLLABLE GIEYI SYLLABLE GIEPYI SYLLABLE GATYI SYLLABLE GAXYI SYLLABLE G" + + "AYI SYLLABLE GAPYI SYLLABLE GUOTYI SYLLABLE GUOXYI SYLLABLE GUOYI SYLLAB" + + "LE GUOPYI SYLLABLE GOTYI SYLLABLE GOXYI SYLLABLE GOYI SYLLABLE GOPYI SYL" + + "LABLE GETYI SYLLABLE GEXYI SYLLABLE GEYI SYLLABLE GEPYI SYLLABLE GUTYI S" + + "YLLABLE GUXYI SYLLABLE GUYI SYLLABLE GUPYI SYLLABLE GURXYI SYLLABLE GURY" + + "I SYLLABLE KITYI SYLLABLE KIXYI SYLLABLE KIYI SYLLABLE KIPYI SYLLABLE KI" + + "EXYI SYLLABLE KIEYI SYLLABLE KIEPYI SYLLABLE KATYI SYLLABLE KAXYI SYLLAB" + + "LE KAYI SYLLABLE KAPYI SYLLABLE KUOXYI SYLLABLE KUOYI SYLLABLE KUOPYI SY" + + "LLABLE KOTYI SYLLABLE KOXYI SYLLABLE KOYI SYLLABLE KOPYI SYLLABLE KETYI " + + "SYLLABLE KEXYI SYLLABLE KEYI SYLLABLE KEPYI SYLLABLE KUTYI SYLLABLE KUXY" + + "I SYLLABLE KUYI SYLLABLE KUPYI SYLLABLE KURXYI SYLLABLE KURYI SYLLABLE G" + + "GITYI SYLLABLE GGIXYI SYLLABLE GGIYI SYLLABLE GGIEXYI SYLLABLE GGIEYI SY" + + "LLABLE GGIEPYI SYLLABLE GGATYI SYLLABLE GGAXYI SYLLABLE GGAYI SYLLABLE G" + + "GAPYI SYLLABLE GGUOTYI SYLLABLE GGUOXYI SYLLABLE GGUOYI SYLLABLE GGUOPYI" + + " SYLLABLE GGOTYI SYLLABLE GGOXYI SYLLABLE GGOYI SYLLABLE GGOPYI SYLLABLE" + + " GGETYI SYLLABLE GGEXYI SYLLABLE GGEYI SYLLABLE GGEPYI SYLLABLE GGUTYI S" + + "YLLABLE GGUXYI SYLLABLE GGUYI SYLLABLE GGUPYI SYLLABLE GGURXYI SYLLABLE " + + "GGURYI SYLLABLE MGIEXYI SYLLABLE MGIEYI SYLLABLE MGATYI SYLLABLE MGAXYI " + + "SYLLABLE MGAYI SYLLABLE MGAPYI SYLLABLE MGUOXYI SYLLABLE MGUOYI SYLLABLE" + + " MGUOPYI SYLLABLE MGOTYI SYLLABLE MGOXYI SYLLABLE MGOYI SYLLABLE MGOPYI " + + "SYLLABLE MGEXYI SYLLABLE MGEYI SYLLABLE MGEPYI SYLLABLE MGUTYI SYLLABLE " + + "MGUXYI SYLLABLE MGUYI SYLLABLE MGUPYI SYLLABLE MGURXYI SYLLABLE MGURYI S" + + "YLLABLE HXITYI SYLLABLE HXIXYI SYLLABLE HXIYI SYLLABLE HXIPYI SYLLABLE H" + + "XIETYI SYLLABLE HXIEXYI SYLLABLE HXIEYI SYLLABLE HXIEPYI SYLLABLE HXATYI" + + " SYLLABLE HXAXYI SYLLABLE HXAYI SYLLABLE HXAPYI SYLLABLE HXUOTYI SYLLABL" + + "E HXUOXYI SYLLABLE HXUOYI SYLLABLE HXUOPYI SYLLABLE HXOTYI SYLLABLE HXOX" + + "YI SYLLABLE HXOYI SYLLABLE HXOPYI SYLLABLE HXEXYI SYLLABLE HXEYI SYLLABL" + + "E HXEPYI SYLLABLE NGIEXYI SYLLABLE NGIEYI SYLLABLE NGIEPYI SYLLABLE NGAT" + + "YI SYLLABLE NGAXYI SYLLABLE NGAYI SYLLABLE NGAPYI SYLLABLE NGUOTYI SYLLA" + + "BLE NGUOXYI SYLLABLE NGUOYI SYLLABLE NGOTYI SYLLABLE NGOXYI SYLLABLE NGO" + + "YI SYLLABLE NGOPYI SYLLABLE NGEXYI SYLLABLE NGEYI SYLLABLE NGEPYI SYLLAB" + + "LE HITYI SYLLABLE HIEXYI SYLLABLE HIEYI SYLLABLE HATYI SYLLABLE HAXYI SY" + + "LLABLE HAYI SYLLABLE HAPYI SYLLABLE HUOTYI SYLLABLE HUOXYI SYLLABLE HUOY" + + "I SYLLABLE HUOPYI SYLLABLE HOTYI SYLLABLE HOXYI SYLLABLE HOYI SYLLABLE H" + + "OPYI SYLLABLE HEXYI SYLLABLE HEYI SYLLABLE HEPYI SYLLABLE WATYI SYLLABLE" + + " WAXYI SYLLABLE WAYI SYLLABLE WAPYI SYLLABLE WUOXYI SYLLABLE WUOYI SYLLA" + + "BLE WUOPYI SYLLABLE WOXYI SYLLABLE WOYI SYLLABLE WOPYI SYLLABLE WEXYI SY" + + "LLABLE WEYI SYLLABLE WEPYI SYLLABLE ZITYI SYLLABLE ZIXYI SYLLABLE ZIYI S" + + "YLLABLE ZIPYI SYLLABLE ZIEXYI SYLLABLE ZIEYI SYLLABLE ZIEPYI SYLLABLE ZA") + ("" + + "TYI SYLLABLE ZAXYI SYLLABLE ZAYI SYLLABLE ZAPYI SYLLABLE ZUOXYI SYLLABLE" + + " ZUOYI SYLLABLE ZUOPYI SYLLABLE ZOTYI SYLLABLE ZOXYI SYLLABLE ZOYI SYLLA" + + "BLE ZOPYI SYLLABLE ZEXYI SYLLABLE ZEYI SYLLABLE ZEPYI SYLLABLE ZUTYI SYL" + + "LABLE ZUXYI SYLLABLE ZUYI SYLLABLE ZUPYI SYLLABLE ZURXYI SYLLABLE ZURYI " + + "SYLLABLE ZYTYI SYLLABLE ZYXYI SYLLABLE ZYYI SYLLABLE ZYPYI SYLLABLE ZYRX" + + "YI SYLLABLE ZYRYI SYLLABLE CITYI SYLLABLE CIXYI SYLLABLE CIYI SYLLABLE C" + + "IPYI SYLLABLE CIETYI SYLLABLE CIEXYI SYLLABLE CIEYI SYLLABLE CIEPYI SYLL" + + "ABLE CATYI SYLLABLE CAXYI SYLLABLE CAYI SYLLABLE CAPYI SYLLABLE CUOXYI S" + + "YLLABLE CUOYI SYLLABLE CUOPYI SYLLABLE COTYI SYLLABLE COXYI SYLLABLE COY" + + "I SYLLABLE COPYI SYLLABLE CEXYI SYLLABLE CEYI SYLLABLE CEPYI SYLLABLE CU" + + "TYI SYLLABLE CUXYI SYLLABLE CUYI SYLLABLE CUPYI SYLLABLE CURXYI SYLLABLE" + + " CURYI SYLLABLE CYTYI SYLLABLE CYXYI SYLLABLE CYYI SYLLABLE CYPYI SYLLAB" + + "LE CYRXYI SYLLABLE CYRYI SYLLABLE ZZITYI SYLLABLE ZZIXYI SYLLABLE ZZIYI " + + "SYLLABLE ZZIPYI SYLLABLE ZZIETYI SYLLABLE ZZIEXYI SYLLABLE ZZIEYI SYLLAB" + + "LE ZZIEPYI SYLLABLE ZZATYI SYLLABLE ZZAXYI SYLLABLE ZZAYI SYLLABLE ZZAPY" + + "I SYLLABLE ZZOXYI SYLLABLE ZZOYI SYLLABLE ZZOPYI SYLLABLE ZZEXYI SYLLABL" + + "E ZZEYI SYLLABLE ZZEPYI SYLLABLE ZZUXYI SYLLABLE ZZUYI SYLLABLE ZZUPYI S" + + "YLLABLE ZZURXYI SYLLABLE ZZURYI SYLLABLE ZZYTYI SYLLABLE ZZYXYI SYLLABLE" + + " ZZYYI SYLLABLE ZZYPYI SYLLABLE ZZYRXYI SYLLABLE ZZYRYI SYLLABLE NZITYI " + + "SYLLABLE NZIXYI SYLLABLE NZIYI SYLLABLE NZIPYI SYLLABLE NZIEXYI SYLLABLE" + + " NZIEYI SYLLABLE NZIEPYI SYLLABLE NZATYI SYLLABLE NZAXYI SYLLABLE NZAYI " + + "SYLLABLE NZAPYI SYLLABLE NZUOXYI SYLLABLE NZUOYI SYLLABLE NZOXYI SYLLABL" + + "E NZOPYI SYLLABLE NZEXYI SYLLABLE NZEYI SYLLABLE NZUXYI SYLLABLE NZUYI S" + + "YLLABLE NZUPYI SYLLABLE NZURXYI SYLLABLE NZURYI SYLLABLE NZYTYI SYLLABLE" + + " NZYXYI SYLLABLE NZYYI SYLLABLE NZYPYI SYLLABLE NZYRXYI SYLLABLE NZYRYI " + + "SYLLABLE SITYI SYLLABLE SIXYI SYLLABLE SIYI SYLLABLE SIPYI SYLLABLE SIEX" + + "YI SYLLABLE SIEYI SYLLABLE SIEPYI SYLLABLE SATYI SYLLABLE SAXYI SYLLABLE" + + " SAYI SYLLABLE SAPYI SYLLABLE SUOXYI SYLLABLE SUOYI SYLLABLE SUOPYI SYLL" + + "ABLE SOTYI SYLLABLE SOXYI SYLLABLE SOYI SYLLABLE SOPYI SYLLABLE SEXYI SY" + + "LLABLE SEYI SYLLABLE SEPYI SYLLABLE SUTYI SYLLABLE SUXYI SYLLABLE SUYI S" + + "YLLABLE SUPYI SYLLABLE SURXYI SYLLABLE SURYI SYLLABLE SYTYI SYLLABLE SYX" + + "YI SYLLABLE SYYI SYLLABLE SYPYI SYLLABLE SYRXYI SYLLABLE SYRYI SYLLABLE " + + "SSITYI SYLLABLE SSIXYI SYLLABLE SSIYI SYLLABLE SSIPYI SYLLABLE SSIEXYI S" + + "YLLABLE SSIEYI SYLLABLE SSIEPYI SYLLABLE SSATYI SYLLABLE SSAXYI SYLLABLE" + + " SSAYI SYLLABLE SSAPYI SYLLABLE SSOTYI SYLLABLE SSOXYI SYLLABLE SSOYI SY" + + "LLABLE SSOPYI SYLLABLE SSEXYI SYLLABLE SSEYI SYLLABLE SSEPYI SYLLABLE SS" + + "UTYI SYLLABLE SSUXYI SYLLABLE SSUYI SYLLABLE SSUPYI SYLLABLE SSYTYI SYLL" + + "ABLE SSYXYI SYLLABLE SSYYI SYLLABLE SSYPYI SYLLABLE SSYRXYI SYLLABLE SSY" + + "RYI SYLLABLE ZHATYI SYLLABLE ZHAXYI SYLLABLE ZHAYI SYLLABLE ZHAPYI SYLLA" + + "BLE ZHUOXYI SYLLABLE ZHUOYI SYLLABLE ZHUOPYI SYLLABLE ZHOTYI SYLLABLE ZH" + + "OXYI SYLLABLE ZHOYI SYLLABLE ZHOPYI SYLLABLE ZHETYI SYLLABLE ZHEXYI SYLL" + + "ABLE ZHEYI SYLLABLE ZHEPYI SYLLABLE ZHUTYI SYLLABLE ZHUXYI SYLLABLE ZHUY" + + "I SYLLABLE ZHUPYI SYLLABLE ZHURXYI SYLLABLE ZHURYI SYLLABLE ZHYTYI SYLLA" + + "BLE ZHYXYI SYLLABLE ZHYYI SYLLABLE ZHYPYI SYLLABLE ZHYRXYI SYLLABLE ZHYR" + + "YI SYLLABLE CHATYI SYLLABLE CHAXYI SYLLABLE CHAYI SYLLABLE CHAPYI SYLLAB" + + "LE CHUOTYI SYLLABLE CHUOXYI SYLLABLE CHUOYI SYLLABLE CHUOPYI SYLLABLE CH" + + "OTYI SYLLABLE CHOXYI SYLLABLE CHOYI SYLLABLE CHOPYI SYLLABLE CHETYI SYLL" + + "ABLE CHEXYI SYLLABLE CHEYI SYLLABLE CHEPYI SYLLABLE CHUXYI SYLLABLE CHUY" + + "I SYLLABLE CHUPYI SYLLABLE CHURXYI SYLLABLE CHURYI SYLLABLE CHYTYI SYLLA" + + "BLE CHYXYI SYLLABLE CHYYI SYLLABLE CHYPYI SYLLABLE CHYRXYI SYLLABLE CHYR" + + "YI SYLLABLE RRAXYI SYLLABLE RRAYI SYLLABLE RRUOXYI SYLLABLE RRUOYI SYLLA" + + "BLE RROTYI SYLLABLE RROXYI SYLLABLE RROYI SYLLABLE RROPYI SYLLABLE RRETY" + + "I SYLLABLE RREXYI SYLLABLE RREYI SYLLABLE RREPYI SYLLABLE RRUTYI SYLLABL" + + "E RRUXYI SYLLABLE RRUYI SYLLABLE RRUPYI SYLLABLE RRURXYI SYLLABLE RRURYI" + + " SYLLABLE RRYTYI SYLLABLE RRYXYI SYLLABLE RRYYI SYLLABLE RRYPYI SYLLABLE" + + " RRYRXYI SYLLABLE RRYRYI SYLLABLE NRATYI SYLLABLE NRAXYI SYLLABLE NRAYI " + + "SYLLABLE NRAPYI SYLLABLE NROXYI SYLLABLE NROYI SYLLABLE NROPYI SYLLABLE " + + "NRETYI SYLLABLE NREXYI SYLLABLE NREYI SYLLABLE NREPYI SYLLABLE NRUTYI SY" + + "LLABLE NRUXYI SYLLABLE NRUYI SYLLABLE NRUPYI SYLLABLE NRURXYI SYLLABLE N" + + "RURYI SYLLABLE NRYTYI SYLLABLE NRYXYI SYLLABLE NRYYI SYLLABLE NRYPYI SYL" + + "LABLE NRYRXYI SYLLABLE NRYRYI SYLLABLE SHATYI SYLLABLE SHAXYI SYLLABLE S" + + "HAYI SYLLABLE SHAPYI SYLLABLE SHUOXYI SYLLABLE SHUOYI SYLLABLE SHUOPYI S" + + "YLLABLE SHOTYI SYLLABLE SHOXYI SYLLABLE SHOYI SYLLABLE SHOPYI SYLLABLE S" + + "HETYI SYLLABLE SHEXYI SYLLABLE SHEYI SYLLABLE SHEPYI SYLLABLE SHUTYI SYL") + ("" + + "LABLE SHUXYI SYLLABLE SHUYI SYLLABLE SHUPYI SYLLABLE SHURXYI SYLLABLE SH" + + "URYI SYLLABLE SHYTYI SYLLABLE SHYXYI SYLLABLE SHYYI SYLLABLE SHYPYI SYLL" + + "ABLE SHYRXYI SYLLABLE SHYRYI SYLLABLE RATYI SYLLABLE RAXYI SYLLABLE RAYI" + + " SYLLABLE RAPYI SYLLABLE RUOXYI SYLLABLE RUOYI SYLLABLE RUOPYI SYLLABLE " + + "ROTYI SYLLABLE ROXYI SYLLABLE ROYI SYLLABLE ROPYI SYLLABLE REXYI SYLLABL" + + "E REYI SYLLABLE REPYI SYLLABLE RUTYI SYLLABLE RUXYI SYLLABLE RUYI SYLLAB" + + "LE RUPYI SYLLABLE RURXYI SYLLABLE RURYI SYLLABLE RYTYI SYLLABLE RYXYI SY" + + "LLABLE RYYI SYLLABLE RYPYI SYLLABLE RYRXYI SYLLABLE RYRYI SYLLABLE JITYI" + + " SYLLABLE JIXYI SYLLABLE JIYI SYLLABLE JIPYI SYLLABLE JIETYI SYLLABLE JI" + + "EXYI SYLLABLE JIEYI SYLLABLE JIEPYI SYLLABLE JUOTYI SYLLABLE JUOXYI SYLL" + + "ABLE JUOYI SYLLABLE JUOPYI SYLLABLE JOTYI SYLLABLE JOXYI SYLLABLE JOYI S" + + "YLLABLE JOPYI SYLLABLE JUTYI SYLLABLE JUXYI SYLLABLE JUYI SYLLABLE JUPYI" + + " SYLLABLE JURXYI SYLLABLE JURYI SYLLABLE JYTYI SYLLABLE JYXYI SYLLABLE J" + + "YYI SYLLABLE JYPYI SYLLABLE JYRXYI SYLLABLE JYRYI SYLLABLE QITYI SYLLABL" + + "E QIXYI SYLLABLE QIYI SYLLABLE QIPYI SYLLABLE QIETYI SYLLABLE QIEXYI SYL" + + "LABLE QIEYI SYLLABLE QIEPYI SYLLABLE QUOTYI SYLLABLE QUOXYI SYLLABLE QUO" + + "YI SYLLABLE QUOPYI SYLLABLE QOTYI SYLLABLE QOXYI SYLLABLE QOYI SYLLABLE " + + "QOPYI SYLLABLE QUTYI SYLLABLE QUXYI SYLLABLE QUYI SYLLABLE QUPYI SYLLABL" + + "E QURXYI SYLLABLE QURYI SYLLABLE QYTYI SYLLABLE QYXYI SYLLABLE QYYI SYLL" + + "ABLE QYPYI SYLLABLE QYRXYI SYLLABLE QYRYI SYLLABLE JJITYI SYLLABLE JJIXY" + + "I SYLLABLE JJIYI SYLLABLE JJIPYI SYLLABLE JJIETYI SYLLABLE JJIEXYI SYLLA" + + "BLE JJIEYI SYLLABLE JJIEPYI SYLLABLE JJUOXYI SYLLABLE JJUOYI SYLLABLE JJ" + + "UOPYI SYLLABLE JJOTYI SYLLABLE JJOXYI SYLLABLE JJOYI SYLLABLE JJOPYI SYL" + + "LABLE JJUTYI SYLLABLE JJUXYI SYLLABLE JJUYI SYLLABLE JJUPYI SYLLABLE JJU" + + "RXYI SYLLABLE JJURYI SYLLABLE JJYTYI SYLLABLE JJYXYI SYLLABLE JJYYI SYLL" + + "ABLE JJYPYI SYLLABLE NJITYI SYLLABLE NJIXYI SYLLABLE NJIYI SYLLABLE NJIP" + + "YI SYLLABLE NJIETYI SYLLABLE NJIEXYI SYLLABLE NJIEYI SYLLABLE NJIEPYI SY" + + "LLABLE NJUOXYI SYLLABLE NJUOYI SYLLABLE NJOTYI SYLLABLE NJOXYI SYLLABLE " + + "NJOYI SYLLABLE NJOPYI SYLLABLE NJUXYI SYLLABLE NJUYI SYLLABLE NJUPYI SYL" + + "LABLE NJURXYI SYLLABLE NJURYI SYLLABLE NJYTYI SYLLABLE NJYXYI SYLLABLE N" + + "JYYI SYLLABLE NJYPYI SYLLABLE NJYRXYI SYLLABLE NJYRYI SYLLABLE NYITYI SY" + + "LLABLE NYIXYI SYLLABLE NYIYI SYLLABLE NYIPYI SYLLABLE NYIETYI SYLLABLE N" + + "YIEXYI SYLLABLE NYIEYI SYLLABLE NYIEPYI SYLLABLE NYUOXYI SYLLABLE NYUOYI" + + " SYLLABLE NYUOPYI SYLLABLE NYOTYI SYLLABLE NYOXYI SYLLABLE NYOYI SYLLABL" + + "E NYOPYI SYLLABLE NYUTYI SYLLABLE NYUXYI SYLLABLE NYUYI SYLLABLE NYUPYI " + + "SYLLABLE XITYI SYLLABLE XIXYI SYLLABLE XIYI SYLLABLE XIPYI SYLLABLE XIET" + + "YI SYLLABLE XIEXYI SYLLABLE XIEYI SYLLABLE XIEPYI SYLLABLE XUOXYI SYLLAB" + + "LE XUOYI SYLLABLE XOTYI SYLLABLE XOXYI SYLLABLE XOYI SYLLABLE XOPYI SYLL" + + "ABLE XYTYI SYLLABLE XYXYI SYLLABLE XYYI SYLLABLE XYPYI SYLLABLE XYRXYI S" + + "YLLABLE XYRYI SYLLABLE YITYI SYLLABLE YIXYI SYLLABLE YIYI SYLLABLE YIPYI" + + " SYLLABLE YIETYI SYLLABLE YIEXYI SYLLABLE YIEYI SYLLABLE YIEPYI SYLLABLE" + + " YUOTYI SYLLABLE YUOXYI SYLLABLE YUOYI SYLLABLE YUOPYI SYLLABLE YOTYI SY" + + "LLABLE YOXYI SYLLABLE YOYI SYLLABLE YOPYI SYLLABLE YUTYI SYLLABLE YUXYI " + + "SYLLABLE YUYI SYLLABLE YUPYI SYLLABLE YURXYI SYLLABLE YURYI SYLLABLE YYT" + + "YI SYLLABLE YYXYI SYLLABLE YYYI SYLLABLE YYPYI SYLLABLE YYRXYI SYLLABLE " + + "YYRYI RADICAL QOTYI RADICAL LIYI RADICAL KITYI RADICAL NYIPYI RADICAL CY" + + "PYI RADICAL SSIYI RADICAL GGOPYI RADICAL GEPYI RADICAL MIYI RADICAL HXIT" + + "YI RADICAL LYRYI RADICAL BBUTYI RADICAL MOPYI RADICAL YOYI RADICAL PUTYI" + + " RADICAL HXUOYI RADICAL TATYI RADICAL GAYI RADICAL ZUPYI RADICAL CYTYI R" + + "ADICAL DDURYI RADICAL BURYI RADICAL GGUOYI RADICAL NYOPYI RADICAL TUYI R" + + "ADICAL OPYI RADICAL JJUTYI RADICAL ZOTYI RADICAL PYTYI RADICAL HMOYI RAD" + + "ICAL YITYI RADICAL VURYI RADICAL SHYYI RADICAL VEPYI RADICAL ZAYI RADICA" + + "L JOYI RADICAL NZUPYI RADICAL JJYYI RADICAL GOTYI RADICAL JJIEYI RADICAL" + + " WOYI RADICAL DUYI RADICAL SHURYI RADICAL LIEYI RADICAL CYYI RADICAL CUO" + + "PYI RADICAL CIPYI RADICAL HXOPYI RADICAL SHATYI RADICAL ZURYI RADICAL SH" + + "OPYI RADICAL CHEYI RADICAL ZZIETYI RADICAL NBIEYI RADICAL KELISU LETTER " + + "BALISU LETTER PALISU LETTER PHALISU LETTER DALISU LETTER TALISU LETTER T" + + "HALISU LETTER GALISU LETTER KALISU LETTER KHALISU LETTER JALISU LETTER C" + + "ALISU LETTER CHALISU LETTER DZALISU LETTER TSALISU LETTER TSHALISU LETTE" + + "R MALISU LETTER NALISU LETTER LALISU LETTER SALISU LETTER ZHALISU LETTER" + + " ZALISU LETTER NGALISU LETTER HALISU LETTER XALISU LETTER HHALISU LETTER" + + " FALISU LETTER WALISU LETTER SHALISU LETTER YALISU LETTER GHALISU LETTER" + + " ALISU LETTER AELISU LETTER ELISU LETTER EULISU LETTER ILISU LETTER OLIS" + + "U LETTER ULISU LETTER UELISU LETTER UHLISU LETTER OELISU LETTER TONE MYA") + ("" + + " TILISU LETTER TONE NA POLISU LETTER TONE MYA CYALISU LETTER TONE MYA BO" + + "LISU LETTER TONE MYA NALISU LETTER TONE MYA JEULISU PUNCTUATION COMMALIS" + + "U PUNCTUATION FULL STOPVAI SYLLABLE EEVAI SYLLABLE EENVAI SYLLABLE HEEVA" + + "I SYLLABLE WEEVAI SYLLABLE WEENVAI SYLLABLE PEEVAI SYLLABLE BHEEVAI SYLL" + + "ABLE BEEVAI SYLLABLE MBEEVAI SYLLABLE KPEEVAI SYLLABLE MGBEEVAI SYLLABLE" + + " GBEEVAI SYLLABLE FEEVAI SYLLABLE VEEVAI SYLLABLE TEEVAI SYLLABLE THEEVA" + + "I SYLLABLE DHEEVAI SYLLABLE DHHEEVAI SYLLABLE LEEVAI SYLLABLE REEVAI SYL" + + "LABLE DEEVAI SYLLABLE NDEEVAI SYLLABLE SEEVAI SYLLABLE SHEEVAI SYLLABLE " + + "ZEEVAI SYLLABLE ZHEEVAI SYLLABLE CEEVAI SYLLABLE JEEVAI SYLLABLE NJEEVAI" + + " SYLLABLE YEEVAI SYLLABLE KEEVAI SYLLABLE NGGEEVAI SYLLABLE GEEVAI SYLLA" + + "BLE MEEVAI SYLLABLE NEEVAI SYLLABLE NYEEVAI SYLLABLE IVAI SYLLABLE INVAI" + + " SYLLABLE HIVAI SYLLABLE HINVAI SYLLABLE WIVAI SYLLABLE WINVAI SYLLABLE " + + "PIVAI SYLLABLE BHIVAI SYLLABLE BIVAI SYLLABLE MBIVAI SYLLABLE KPIVAI SYL" + + "LABLE MGBIVAI SYLLABLE GBIVAI SYLLABLE FIVAI SYLLABLE VIVAI SYLLABLE TIV" + + "AI SYLLABLE THIVAI SYLLABLE DHIVAI SYLLABLE DHHIVAI SYLLABLE LIVAI SYLLA" + + "BLE RIVAI SYLLABLE DIVAI SYLLABLE NDIVAI SYLLABLE SIVAI SYLLABLE SHIVAI " + + "SYLLABLE ZIVAI SYLLABLE ZHIVAI SYLLABLE CIVAI SYLLABLE JIVAI SYLLABLE NJ" + + "IVAI SYLLABLE YIVAI SYLLABLE KIVAI SYLLABLE NGGIVAI SYLLABLE GIVAI SYLLA" + + "BLE MIVAI SYLLABLE NIVAI SYLLABLE NYIVAI SYLLABLE AVAI SYLLABLE ANVAI SY" + + "LLABLE NGANVAI SYLLABLE HAVAI SYLLABLE HANVAI SYLLABLE WAVAI SYLLABLE WA" + + "NVAI SYLLABLE PAVAI SYLLABLE BHAVAI SYLLABLE BAVAI SYLLABLE MBAVAI SYLLA" + + "BLE KPAVAI SYLLABLE KPANVAI SYLLABLE MGBAVAI SYLLABLE GBAVAI SYLLABLE FA" + + "VAI SYLLABLE VAVAI SYLLABLE TAVAI SYLLABLE THAVAI SYLLABLE DHAVAI SYLLAB" + + "LE DHHAVAI SYLLABLE LAVAI SYLLABLE RAVAI SYLLABLE DAVAI SYLLABLE NDAVAI " + + "SYLLABLE SAVAI SYLLABLE SHAVAI SYLLABLE ZAVAI SYLLABLE ZHAVAI SYLLABLE C" + + "AVAI SYLLABLE JAVAI SYLLABLE NJAVAI SYLLABLE YAVAI SYLLABLE KAVAI SYLLAB" + + "LE KANVAI SYLLABLE NGGAVAI SYLLABLE GAVAI SYLLABLE MAVAI SYLLABLE NAVAI " + + "SYLLABLE NYAVAI SYLLABLE OOVAI SYLLABLE OONVAI SYLLABLE HOOVAI SYLLABLE " + + "WOOVAI SYLLABLE WOONVAI SYLLABLE POOVAI SYLLABLE BHOOVAI SYLLABLE BOOVAI" + + " SYLLABLE MBOOVAI SYLLABLE KPOOVAI SYLLABLE MGBOOVAI SYLLABLE GBOOVAI SY" + + "LLABLE FOOVAI SYLLABLE VOOVAI SYLLABLE TOOVAI SYLLABLE THOOVAI SYLLABLE " + + "DHOOVAI SYLLABLE DHHOOVAI SYLLABLE LOOVAI SYLLABLE ROOVAI SYLLABLE DOOVA" + + "I SYLLABLE NDOOVAI SYLLABLE SOOVAI SYLLABLE SHOOVAI SYLLABLE ZOOVAI SYLL" + + "ABLE ZHOOVAI SYLLABLE COOVAI SYLLABLE JOOVAI SYLLABLE NJOOVAI SYLLABLE Y" + + "OOVAI SYLLABLE KOOVAI SYLLABLE NGGOOVAI SYLLABLE GOOVAI SYLLABLE MOOVAI " + + "SYLLABLE NOOVAI SYLLABLE NYOOVAI SYLLABLE UVAI SYLLABLE UNVAI SYLLABLE H" + + "UVAI SYLLABLE HUNVAI SYLLABLE WUVAI SYLLABLE WUNVAI SYLLABLE PUVAI SYLLA" + + "BLE BHUVAI SYLLABLE BUVAI SYLLABLE MBUVAI SYLLABLE KPUVAI SYLLABLE MGBUV" + + "AI SYLLABLE GBUVAI SYLLABLE FUVAI SYLLABLE VUVAI SYLLABLE TUVAI SYLLABLE" + + " THUVAI SYLLABLE DHUVAI SYLLABLE DHHUVAI SYLLABLE LUVAI SYLLABLE RUVAI S" + + "YLLABLE DUVAI SYLLABLE NDUVAI SYLLABLE SUVAI SYLLABLE SHUVAI SYLLABLE ZU" + + "VAI SYLLABLE ZHUVAI SYLLABLE CUVAI SYLLABLE JUVAI SYLLABLE NJUVAI SYLLAB" + + "LE YUVAI SYLLABLE KUVAI SYLLABLE NGGUVAI SYLLABLE GUVAI SYLLABLE MUVAI S" + + "YLLABLE NUVAI SYLLABLE NYUVAI SYLLABLE OVAI SYLLABLE ONVAI SYLLABLE NGON" + + "VAI SYLLABLE HOVAI SYLLABLE HONVAI SYLLABLE WOVAI SYLLABLE WONVAI SYLLAB" + + "LE POVAI SYLLABLE BHOVAI SYLLABLE BOVAI SYLLABLE MBOVAI SYLLABLE KPOVAI " + + "SYLLABLE MGBOVAI SYLLABLE GBOVAI SYLLABLE GBONVAI SYLLABLE FOVAI SYLLABL" + + "E VOVAI SYLLABLE TOVAI SYLLABLE THOVAI SYLLABLE DHOVAI SYLLABLE DHHOVAI " + + "SYLLABLE LOVAI SYLLABLE ROVAI SYLLABLE DOVAI SYLLABLE NDOVAI SYLLABLE SO" + + "VAI SYLLABLE SHOVAI SYLLABLE ZOVAI SYLLABLE ZHOVAI SYLLABLE COVAI SYLLAB" + + "LE JOVAI SYLLABLE NJOVAI SYLLABLE YOVAI SYLLABLE KOVAI SYLLABLE NGGOVAI " + + "SYLLABLE GOVAI SYLLABLE MOVAI SYLLABLE NOVAI SYLLABLE NYOVAI SYLLABLE EV" + + "AI SYLLABLE ENVAI SYLLABLE NGENVAI SYLLABLE HEVAI SYLLABLE HENVAI SYLLAB" + + "LE WEVAI SYLLABLE WENVAI SYLLABLE PEVAI SYLLABLE BHEVAI SYLLABLE BEVAI S" + + "YLLABLE MBEVAI SYLLABLE KPEVAI SYLLABLE KPENVAI SYLLABLE MGBEVAI SYLLABL" + + "E GBEVAI SYLLABLE GBENVAI SYLLABLE FEVAI SYLLABLE VEVAI SYLLABLE TEVAI S" + + "YLLABLE THEVAI SYLLABLE DHEVAI SYLLABLE DHHEVAI SYLLABLE LEVAI SYLLABLE " + + "REVAI SYLLABLE DEVAI SYLLABLE NDEVAI SYLLABLE SEVAI SYLLABLE SHEVAI SYLL" + + "ABLE ZEVAI SYLLABLE ZHEVAI SYLLABLE CEVAI SYLLABLE JEVAI SYLLABLE NJEVAI" + + " SYLLABLE YEVAI SYLLABLE KEVAI SYLLABLE NGGEVAI SYLLABLE NGGENVAI SYLLAB" + + "LE GEVAI SYLLABLE GENVAI SYLLABLE MEVAI SYLLABLE NEVAI SYLLABLE NYEVAI S" + + "YLLABLE NGVAI SYLLABLE LENGTHENERVAI COMMAVAI FULL STOPVAI QUESTION MARK" + + "VAI SYLLABLE NDOLE FAVAI SYLLABLE NDOLE KAVAI SYLLABLE NDOLE SOOVAI SYMB" + + "OL FEENGVAI SYMBOL KEENGVAI SYMBOL TINGVAI SYMBOL NIIVAI SYMBOL BANGVAI ") + ("" + + "SYMBOL FAAVAI SYMBOL TAAVAI SYMBOL DANGVAI SYMBOL DOONGVAI SYMBOL KUNGVA" + + "I SYMBOL TONGVAI SYMBOL DO-OVAI SYMBOL JONGVAI DIGIT ZEROVAI DIGIT ONEVA" + + "I DIGIT TWOVAI DIGIT THREEVAI DIGIT FOURVAI DIGIT FIVEVAI DIGIT SIXVAI D" + + "IGIT SEVENVAI DIGIT EIGHTVAI DIGIT NINEVAI SYLLABLE NDOLE MAVAI SYLLABLE" + + " NDOLE DOCYRILLIC CAPITAL LETTER ZEMLYACYRILLIC SMALL LETTER ZEMLYACYRIL" + + "LIC CAPITAL LETTER DZELOCYRILLIC SMALL LETTER DZELOCYRILLIC CAPITAL LETT" + + "ER REVERSED DZECYRILLIC SMALL LETTER REVERSED DZECYRILLIC CAPITAL LETTER" + + " IOTACYRILLIC SMALL LETTER IOTACYRILLIC CAPITAL LETTER DJERVCYRILLIC SMA" + + "LL LETTER DJERVCYRILLIC CAPITAL LETTER MONOGRAPH UKCYRILLIC SMALL LETTER" + + " MONOGRAPH UKCYRILLIC CAPITAL LETTER BROAD OMEGACYRILLIC SMALL LETTER BR" + + "OAD OMEGACYRILLIC CAPITAL LETTER NEUTRAL YERCYRILLIC SMALL LETTER NEUTRA" + + "L YERCYRILLIC CAPITAL LETTER YERU WITH BACK YERCYRILLIC SMALL LETTER YER" + + "U WITH BACK YERCYRILLIC CAPITAL LETTER IOTIFIED YATCYRILLIC SMALL LETTER" + + " IOTIFIED YATCYRILLIC CAPITAL LETTER REVERSED YUCYRILLIC SMALL LETTER RE" + + "VERSED YUCYRILLIC CAPITAL LETTER IOTIFIED ACYRILLIC SMALL LETTER IOTIFIE" + + "D ACYRILLIC CAPITAL LETTER CLOSED LITTLE YUSCYRILLIC SMALL LETTER CLOSED" + + " LITTLE YUSCYRILLIC CAPITAL LETTER BLENDED YUSCYRILLIC SMALL LETTER BLEN" + + "DED YUSCYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUSCYRILLIC SMALL " + + "LETTER IOTIFIED CLOSED LITTLE YUSCYRILLIC CAPITAL LETTER YNCYRILLIC SMAL" + + "L LETTER YNCYRILLIC CAPITAL LETTER REVERSED TSECYRILLIC SMALL LETTER REV" + + "ERSED TSECYRILLIC CAPITAL LETTER SOFT DECYRILLIC SMALL LETTER SOFT DECYR" + + "ILLIC CAPITAL LETTER SOFT ELCYRILLIC SMALL LETTER SOFT ELCYRILLIC CAPITA" + + "L LETTER SOFT EMCYRILLIC SMALL LETTER SOFT EMCYRILLIC CAPITAL LETTER MON" + + "OCULAR OCYRILLIC SMALL LETTER MONOCULAR OCYRILLIC CAPITAL LETTER BINOCUL" + + "AR OCYRILLIC SMALL LETTER BINOCULAR OCYRILLIC CAPITAL LETTER DOUBLE MONO" + + "CULAR OCYRILLIC SMALL LETTER DOUBLE MONOCULAR OCYRILLIC LETTER MULTIOCUL" + + "AR OCOMBINING CYRILLIC VZMETCOMBINING CYRILLIC TEN MILLIONS SIGNCOMBININ" + + "G CYRILLIC HUNDRED MILLIONS SIGNCOMBINING CYRILLIC THOUSAND MILLIONS SIG" + + "NSLAVONIC ASTERISKCOMBINING CYRILLIC LETTER UKRAINIAN IECOMBINING CYRILL" + + "IC LETTER ICOMBINING CYRILLIC LETTER YICOMBINING CYRILLIC LETTER UCOMBIN" + + "ING CYRILLIC LETTER HARD SIGNCOMBINING CYRILLIC LETTER YERUCOMBINING CYR" + + "ILLIC LETTER SOFT SIGNCOMBINING CYRILLIC LETTER OMEGACOMBINING CYRILLIC " + + "KAVYKACOMBINING CYRILLIC PAYEROKCYRILLIC KAVYKACYRILLIC PAYEROKCYRILLIC " + + "CAPITAL LETTER DWECYRILLIC SMALL LETTER DWECYRILLIC CAPITAL LETTER DZWEC" + + "YRILLIC SMALL LETTER DZWECYRILLIC CAPITAL LETTER ZHWECYRILLIC SMALL LETT" + + "ER ZHWECYRILLIC CAPITAL LETTER CCHECYRILLIC SMALL LETTER CCHECYRILLIC CA" + + "PITAL LETTER DZZECYRILLIC SMALL LETTER DZZECYRILLIC CAPITAL LETTER TE WI" + + "TH MIDDLE HOOKCYRILLIC SMALL LETTER TE WITH MIDDLE HOOKCYRILLIC CAPITAL " + + "LETTER TWECYRILLIC SMALL LETTER TWECYRILLIC CAPITAL LETTER TSWECYRILLIC " + + "SMALL LETTER TSWECYRILLIC CAPITAL LETTER TSSECYRILLIC SMALL LETTER TSSEC" + + "YRILLIC CAPITAL LETTER TCHECYRILLIC SMALL LETTER TCHECYRILLIC CAPITAL LE" + + "TTER HWECYRILLIC SMALL LETTER HWECYRILLIC CAPITAL LETTER SHWECYRILLIC SM" + + "ALL LETTER SHWECYRILLIC CAPITAL LETTER DOUBLE OCYRILLIC SMALL LETTER DOU" + + "BLE OCYRILLIC CAPITAL LETTER CROSSED OCYRILLIC SMALL LETTER CROSSED OMOD" + + "IFIER LETTER CYRILLIC HARD SIGNMODIFIER LETTER CYRILLIC SOFT SIGNCOMBINI" + + "NG CYRILLIC LETTER EFCOMBINING CYRILLIC LETTER IOTIFIED EBAMUM LETTER AB" + + "AMUM LETTER KABAMUM LETTER UBAMUM LETTER KUBAMUM LETTER EEBAMUM LETTER R" + + "EEBAMUM LETTER TAEBAMUM LETTER OBAMUM LETTER NYIBAMUM LETTER IBAMUM LETT" + + "ER LABAMUM LETTER PABAMUM LETTER RIIBAMUM LETTER RIEEBAMUM LETTER LEEEEB" + + "AMUM LETTER MEEEEBAMUM LETTER TAABAMUM LETTER NDAABAMUM LETTER NJAEMBAMU" + + "M LETTER MBAMUM LETTER SUUBAMUM LETTER MUBAMUM LETTER SHIIBAMUM LETTER S" + + "IBAMUM LETTER SHEUXBAMUM LETTER SEUXBAMUM LETTER KYEEBAMUM LETTER KETBAM" + + "UM LETTER NUAEBAMUM LETTER NUBAMUM LETTER NJUAEBAMUM LETTER YOQBAMUM LET" + + "TER SHUBAMUM LETTER YUQBAMUM LETTER YABAMUM LETTER NSHABAMUM LETTER KEUX" + + "BAMUM LETTER PEUXBAMUM LETTER NJEEBAMUM LETTER NTEEBAMUM LETTER PUEBAMUM" + + " LETTER WUEBAMUM LETTER PEEBAMUM LETTER FEEBAMUM LETTER RUBAMUM LETTER L" + + "UBAMUM LETTER MIBAMUM LETTER NIBAMUM LETTER REUXBAMUM LETTER RAEBAMUM LE" + + "TTER KENBAMUM LETTER NGKWAENBAMUM LETTER NGGABAMUM LETTER NGABAMUM LETTE" + + "R SHOBAMUM LETTER PUAEBAMUM LETTER FUBAMUM LETTER FOMBAMUM LETTER WABAMU" + + "M LETTER NABAMUM LETTER LIBAMUM LETTER PIBAMUM LETTER LOQBAMUM LETTER KO" + + "BAMUM LETTER MBENBAMUM LETTER RENBAMUM LETTER MENBAMUM LETTER MABAMUM LE" + + "TTER TIBAMUM LETTER KIBAMUM LETTER MOBAMUM LETTER MBAABAMUM LETTER TETBA" + + "MUM LETTER KPABAMUM LETTER TENBAMUM LETTER NTUUBAMUM LETTER SAMBABAMUM L" + + "ETTER FAAMAEBAMUM LETTER KOVUUBAMUM LETTER KOGHOMBAMUM COMBINING MARK KO") + ("" + + "QNDONBAMUM COMBINING MARK TUKWENTISBAMUM NJAEMLIBAMUM FULL STOPBAMUM COL" + + "ONBAMUM COMMABAMUM SEMICOLONBAMUM QUESTION MARKMODIFIER LETTER CHINESE T" + + "ONE YIN PINGMODIFIER LETTER CHINESE TONE YANG PINGMODIFIER LETTER CHINES" + + "E TONE YIN SHANGMODIFIER LETTER CHINESE TONE YANG SHANGMODIFIER LETTER C" + + "HINESE TONE YIN QUMODIFIER LETTER CHINESE TONE YANG QUMODIFIER LETTER CH" + + "INESE TONE YIN RUMODIFIER LETTER CHINESE TONE YANG RUMODIFIER LETTER EXT" + + "RA-HIGH DOTTED TONE BARMODIFIER LETTER HIGH DOTTED TONE BARMODIFIER LETT" + + "ER MID DOTTED TONE BARMODIFIER LETTER LOW DOTTED TONE BARMODIFIER LETTER" + + " EXTRA-LOW DOTTED TONE BARMODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TO" + + "NE BARMODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BARMODIFIER LETTER MID " + + "DOTTED LEFT-STEM TONE BARMODIFIER LETTER LOW DOTTED LEFT-STEM TONE BARMO" + + "DIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BARMODIFIER LETTER EXTRA-H" + + "IGH LEFT-STEM TONE BARMODIFIER LETTER HIGH LEFT-STEM TONE BARMODIFIER LE" + + "TTER MID LEFT-STEM TONE BARMODIFIER LETTER LOW LEFT-STEM TONE BARMODIFIE" + + "R LETTER EXTRA-LOW LEFT-STEM TONE BARMODIFIER LETTER DOT VERTICAL BARMOD" + + "IFIER LETTER DOT SLASHMODIFIER LETTER DOT HORIZONTAL BARMODIFIER LETTER " + + "LOWER RIGHT CORNER ANGLEMODIFIER LETTER RAISED UP ARROWMODIFIER LETTER R" + + "AISED DOWN ARROWMODIFIER LETTER RAISED EXCLAMATION MARKMODIFIER LETTER R" + + "AISED INVERTED EXCLAMATION MARKMODIFIER LETTER LOW INVERTED EXCLAMATION " + + "MARKMODIFIER LETTER STRESS AND HIGH TONEMODIFIER LETTER STRESS AND LOW T" + + "ONELATIN CAPITAL LETTER EGYPTOLOGICAL ALEFLATIN SMALL LETTER EGYPTOLOGIC" + + "AL ALEFLATIN CAPITAL LETTER EGYPTOLOGICAL AINLATIN SMALL LETTER EGYPTOLO" + + "GICAL AINLATIN CAPITAL LETTER HENGLATIN SMALL LETTER HENGLATIN CAPITAL L" + + "ETTER TZLATIN SMALL LETTER TZLATIN CAPITAL LETTER TRESILLOLATIN SMALL LE" + + "TTER TRESILLOLATIN CAPITAL LETTER CUATRILLOLATIN SMALL LETTER CUATRILLOL" + + "ATIN CAPITAL LETTER CUATRILLO WITH COMMALATIN SMALL LETTER CUATRILLO WIT" + + "H COMMALATIN LETTER SMALL CAPITAL FLATIN LETTER SMALL CAPITAL SLATIN CAP" + + "ITAL LETTER AALATIN SMALL LETTER AALATIN CAPITAL LETTER AOLATIN SMALL LE" + + "TTER AOLATIN CAPITAL LETTER AULATIN SMALL LETTER AULATIN CAPITAL LETTER " + + "AVLATIN SMALL LETTER AVLATIN CAPITAL LETTER AV WITH HORIZONTAL BARLATIN " + + "SMALL LETTER AV WITH HORIZONTAL BARLATIN CAPITAL LETTER AYLATIN SMALL LE" + + "TTER AYLATIN CAPITAL LETTER REVERSED C WITH DOTLATIN SMALL LETTER REVERS" + + "ED C WITH DOTLATIN CAPITAL LETTER K WITH STROKELATIN SMALL LETTER K WITH" + + " STROKELATIN CAPITAL LETTER K WITH DIAGONAL STROKELATIN SMALL LETTER K W" + + "ITH DIAGONAL STROKELATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROK" + + "ELATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKELATIN CAPITAL LETTE" + + "R BROKEN LLATIN SMALL LETTER BROKEN LLATIN CAPITAL LETTER L WITH HIGH ST" + + "ROKELATIN SMALL LETTER L WITH HIGH STROKELATIN CAPITAL LETTER O WITH LON" + + "G STROKE OVERLAYLATIN SMALL LETTER O WITH LONG STROKE OVERLAYLATIN CAPIT" + + "AL LETTER O WITH LOOPLATIN SMALL LETTER O WITH LOOPLATIN CAPITAL LETTER " + + "OOLATIN SMALL LETTER OOLATIN CAPITAL LETTER P WITH STROKE THROUGH DESCEN" + + "DERLATIN SMALL LETTER P WITH STROKE THROUGH DESCENDERLATIN CAPITAL LETTE" + + "R P WITH FLOURISHLATIN SMALL LETTER P WITH FLOURISHLATIN CAPITAL LETTER " + + "P WITH SQUIRREL TAILLATIN SMALL LETTER P WITH SQUIRREL TAILLATIN CAPITAL" + + " LETTER Q WITH STROKE THROUGH DESCENDERLATIN SMALL LETTER Q WITH STROKE " + + "THROUGH DESCENDERLATIN CAPITAL LETTER Q WITH DIAGONAL STROKELATIN SMALL " + + "LETTER Q WITH DIAGONAL STROKELATIN CAPITAL LETTER R ROTUNDALATIN SMALL L" + + "ETTER R ROTUNDALATIN CAPITAL LETTER RUM ROTUNDALATIN SMALL LETTER RUM RO" + + "TUNDALATIN CAPITAL LETTER V WITH DIAGONAL STROKELATIN SMALL LETTER V WIT" + + "H DIAGONAL STROKELATIN CAPITAL LETTER VYLATIN SMALL LETTER VYLATIN CAPIT" + + "AL LETTER VISIGOTHIC ZLATIN SMALL LETTER VISIGOTHIC ZLATIN CAPITAL LETTE" + + "R THORN WITH STROKELATIN SMALL LETTER THORN WITH STROKELATIN CAPITAL LET" + + "TER THORN WITH STROKE THROUGH DESCENDERLATIN SMALL LETTER THORN WITH STR" + + "OKE THROUGH DESCENDERLATIN CAPITAL LETTER VENDLATIN SMALL LETTER VENDLAT" + + "IN CAPITAL LETTER ETLATIN SMALL LETTER ETLATIN CAPITAL LETTER ISLATIN SM" + + "ALL LETTER ISLATIN CAPITAL LETTER CONLATIN SMALL LETTER CONMODIFIER LETT" + + "ER USLATIN SMALL LETTER DUMLATIN SMALL LETTER LUMLATIN SMALL LETTER MUML" + + "ATIN SMALL LETTER NUMLATIN SMALL LETTER RUMLATIN LETTER SMALL CAPITAL RU" + + "MLATIN SMALL LETTER TUMLATIN SMALL LETTER UMLATIN CAPITAL LETTER INSULAR" + + " DLATIN SMALL LETTER INSULAR DLATIN CAPITAL LETTER INSULAR FLATIN SMALL " + + "LETTER INSULAR FLATIN CAPITAL LETTER INSULAR GLATIN CAPITAL LETTER TURNE" + + "D INSULAR GLATIN SMALL LETTER TURNED INSULAR GLATIN CAPITAL LETTER TURNE" + + "D LLATIN SMALL LETTER TURNED LLATIN CAPITAL LETTER INSULAR RLATIN SMALL " + + "LETTER INSULAR RLATIN CAPITAL LETTER INSULAR SLATIN SMALL LETTER INSULAR") + ("" + + " SLATIN CAPITAL LETTER INSULAR TLATIN SMALL LETTER INSULAR TMODIFIER LET" + + "TER LOW CIRCUMFLEX ACCENTMODIFIER LETTER COLONMODIFIER LETTER SHORT EQUA" + + "LS SIGNLATIN CAPITAL LETTER SALTILLOLATIN SMALL LETTER SALTILLOLATIN CAP" + + "ITAL LETTER TURNED HLATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELTLAT" + + "IN LETTER SINOLOGICAL DOTLATIN CAPITAL LETTER N WITH DESCENDERLATIN SMAL" + + "L LETTER N WITH DESCENDERLATIN CAPITAL LETTER C WITH BARLATIN SMALL LETT" + + "ER C WITH BARLATIN SMALL LETTER C WITH PALATAL HOOKLATIN SMALL LETTER H " + + "WITH PALATAL HOOKLATIN CAPITAL LETTER B WITH FLOURISHLATIN SMALL LETTER " + + "B WITH FLOURISHLATIN CAPITAL LETTER F WITH STROKELATIN SMALL LETTER F WI" + + "TH STROKELATIN CAPITAL LETTER VOLAPUK AELATIN SMALL LETTER VOLAPUK AELAT" + + "IN CAPITAL LETTER VOLAPUK OELATIN SMALL LETTER VOLAPUK OELATIN CAPITAL L" + + "ETTER VOLAPUK UELATIN SMALL LETTER VOLAPUK UELATIN CAPITAL LETTER G WITH" + + " OBLIQUE STROKELATIN SMALL LETTER G WITH OBLIQUE STROKELATIN CAPITAL LET" + + "TER K WITH OBLIQUE STROKELATIN SMALL LETTER K WITH OBLIQUE STROKELATIN C" + + "APITAL LETTER N WITH OBLIQUE STROKELATIN SMALL LETTER N WITH OBLIQUE STR" + + "OKELATIN CAPITAL LETTER R WITH OBLIQUE STROKELATIN SMALL LETTER R WITH O" + + "BLIQUE STROKELATIN CAPITAL LETTER S WITH OBLIQUE STROKELATIN SMALL LETTE" + + "R S WITH OBLIQUE STROKELATIN CAPITAL LETTER H WITH HOOKLATIN CAPITAL LET" + + "TER REVERSED OPEN ELATIN CAPITAL LETTER SCRIPT GLATIN CAPITAL LETTER L W" + + "ITH BELTLATIN CAPITAL LETTER SMALL CAPITAL ILATIN CAPITAL LETTER TURNED " + + "KLATIN CAPITAL LETTER TURNED TLATIN CAPITAL LETTER J WITH CROSSED-TAILLA" + + "TIN CAPITAL LETTER CHILATIN CAPITAL LETTER BETALATIN SMALL LETTER BETALA" + + "TIN CAPITAL LETTER OMEGALATIN SMALL LETTER OMEGALATIN EPIGRAPHIC LETTER " + + "SIDEWAYS IMODIFIER LETTER CAPITAL H WITH STROKEMODIFIER LETTER SMALL LIG" + + "ATURE OELATIN LETTER SMALL CAPITAL TURNED MLATIN EPIGRAPHIC LETTER REVER" + + "SED FLATIN EPIGRAPHIC LETTER REVERSED PLATIN EPIGRAPHIC LETTER INVERTED " + + "MLATIN EPIGRAPHIC LETTER I LONGALATIN EPIGRAPHIC LETTER ARCHAIC MSYLOTI " + + "NAGRI LETTER ASYLOTI NAGRI LETTER ISYLOTI NAGRI SIGN DVISVARASYLOTI NAGR" + + "I LETTER USYLOTI NAGRI LETTER ESYLOTI NAGRI LETTER OSYLOTI NAGRI SIGN HA" + + "SANTASYLOTI NAGRI LETTER KOSYLOTI NAGRI LETTER KHOSYLOTI NAGRI LETTER GO" + + "SYLOTI NAGRI LETTER GHOSYLOTI NAGRI SIGN ANUSVARASYLOTI NAGRI LETTER COS" + + "YLOTI NAGRI LETTER CHOSYLOTI NAGRI LETTER JOSYLOTI NAGRI LETTER JHOSYLOT" + + "I NAGRI LETTER TTOSYLOTI NAGRI LETTER TTHOSYLOTI NAGRI LETTER DDOSYLOTI " + + "NAGRI LETTER DDHOSYLOTI NAGRI LETTER TOSYLOTI NAGRI LETTER THOSYLOTI NAG" + + "RI LETTER DOSYLOTI NAGRI LETTER DHOSYLOTI NAGRI LETTER NOSYLOTI NAGRI LE" + + "TTER POSYLOTI NAGRI LETTER PHOSYLOTI NAGRI LETTER BOSYLOTI NAGRI LETTER " + + "BHOSYLOTI NAGRI LETTER MOSYLOTI NAGRI LETTER ROSYLOTI NAGRI LETTER LOSYL" + + "OTI NAGRI LETTER RROSYLOTI NAGRI LETTER SOSYLOTI NAGRI LETTER HOSYLOTI N" + + "AGRI VOWEL SIGN ASYLOTI NAGRI VOWEL SIGN ISYLOTI NAGRI VOWEL SIGN USYLOT" + + "I NAGRI VOWEL SIGN ESYLOTI NAGRI VOWEL SIGN OOSYLOTI NAGRI POETRY MARK-1" + + "SYLOTI NAGRI POETRY MARK-2SYLOTI NAGRI POETRY MARK-3SYLOTI NAGRI POETRY " + + "MARK-4NORTH INDIC FRACTION ONE QUARTERNORTH INDIC FRACTION ONE HALFNORTH" + + " INDIC FRACTION THREE QUARTERSNORTH INDIC FRACTION ONE SIXTEENTHNORTH IN" + + "DIC FRACTION ONE EIGHTHNORTH INDIC FRACTION THREE SIXTEENTHSNORTH INDIC " + + "QUARTER MARKNORTH INDIC PLACEHOLDER MARKNORTH INDIC RUPEE MARKNORTH INDI" + + "C QUANTITY MARKPHAGS-PA LETTER KAPHAGS-PA LETTER KHAPHAGS-PA LETTER GAPH" + + "AGS-PA LETTER NGAPHAGS-PA LETTER CAPHAGS-PA LETTER CHAPHAGS-PA LETTER JA" + + "PHAGS-PA LETTER NYAPHAGS-PA LETTER TAPHAGS-PA LETTER THAPHAGS-PA LETTER " + + "DAPHAGS-PA LETTER NAPHAGS-PA LETTER PAPHAGS-PA LETTER PHAPHAGS-PA LETTER" + + " BAPHAGS-PA LETTER MAPHAGS-PA LETTER TSAPHAGS-PA LETTER TSHAPHAGS-PA LET" + + "TER DZAPHAGS-PA LETTER WAPHAGS-PA LETTER ZHAPHAGS-PA LETTER ZAPHAGS-PA L" + + "ETTER SMALL APHAGS-PA LETTER YAPHAGS-PA LETTER RAPHAGS-PA LETTER LAPHAGS" + + "-PA LETTER SHAPHAGS-PA LETTER SAPHAGS-PA LETTER HAPHAGS-PA LETTER APHAGS" + + "-PA LETTER IPHAGS-PA LETTER UPHAGS-PA LETTER EPHAGS-PA LETTER OPHAGS-PA " + + "LETTER QAPHAGS-PA LETTER XAPHAGS-PA LETTER FAPHAGS-PA LETTER GGAPHAGS-PA" + + " LETTER EEPHAGS-PA SUBJOINED LETTER WAPHAGS-PA SUBJOINED LETTER YAPHAGS-" + + "PA LETTER TTAPHAGS-PA LETTER TTHAPHAGS-PA LETTER DDAPHAGS-PA LETTER NNAP" + + "HAGS-PA LETTER ALTERNATE YAPHAGS-PA LETTER VOICELESS SHAPHAGS-PA LETTER " + + "VOICED HAPHAGS-PA LETTER ASPIRATED FAPHAGS-PA SUBJOINED LETTER RAPHAGS-P" + + "A SUPERFIXED LETTER RAPHAGS-PA LETTER CANDRABINDUPHAGS-PA SINGLE HEAD MA" + + "RKPHAGS-PA DOUBLE HEAD MARKPHAGS-PA MARK SHADPHAGS-PA MARK DOUBLE SHADSA" + + "URASHTRA SIGN ANUSVARASAURASHTRA SIGN VISARGASAURASHTRA LETTER ASAURASHT" + + "RA LETTER AASAURASHTRA LETTER ISAURASHTRA LETTER IISAURASHTRA LETTER USA" + + "URASHTRA LETTER UUSAURASHTRA LETTER VOCALIC RSAURASHTRA LETTER VOCALIC R") + ("" + + "RSAURASHTRA LETTER VOCALIC LSAURASHTRA LETTER VOCALIC LLSAURASHTRA LETTE" + + "R ESAURASHTRA LETTER EESAURASHTRA LETTER AISAURASHTRA LETTER OSAURASHTRA" + + " LETTER OOSAURASHTRA LETTER AUSAURASHTRA LETTER KASAURASHTRA LETTER KHAS" + + "AURASHTRA LETTER GASAURASHTRA LETTER GHASAURASHTRA LETTER NGASAURASHTRA " + + "LETTER CASAURASHTRA LETTER CHASAURASHTRA LETTER JASAURASHTRA LETTER JHAS" + + "AURASHTRA LETTER NYASAURASHTRA LETTER TTASAURASHTRA LETTER TTHASAURASHTR" + + "A LETTER DDASAURASHTRA LETTER DDHASAURASHTRA LETTER NNASAURASHTRA LETTER" + + " TASAURASHTRA LETTER THASAURASHTRA LETTER DASAURASHTRA LETTER DHASAURASH" + + "TRA LETTER NASAURASHTRA LETTER PASAURASHTRA LETTER PHASAURASHTRA LETTER " + + "BASAURASHTRA LETTER BHASAURASHTRA LETTER MASAURASHTRA LETTER YASAURASHTR" + + "A LETTER RASAURASHTRA LETTER LASAURASHTRA LETTER VASAURASHTRA LETTER SHA" + + "SAURASHTRA LETTER SSASAURASHTRA LETTER SASAURASHTRA LETTER HASAURASHTRA " + + "LETTER LLASAURASHTRA CONSONANT SIGN HAARUSAURASHTRA VOWEL SIGN AASAURASH" + + "TRA VOWEL SIGN ISAURASHTRA VOWEL SIGN IISAURASHTRA VOWEL SIGN USAURASHTR" + + "A VOWEL SIGN UUSAURASHTRA VOWEL SIGN VOCALIC RSAURASHTRA VOWEL SIGN VOCA" + + "LIC RRSAURASHTRA VOWEL SIGN VOCALIC LSAURASHTRA VOWEL SIGN VOCALIC LLSAU" + + "RASHTRA VOWEL SIGN ESAURASHTRA VOWEL SIGN EESAURASHTRA VOWEL SIGN AISAUR" + + "ASHTRA VOWEL SIGN OSAURASHTRA VOWEL SIGN OOSAURASHTRA VOWEL SIGN AUSAURA" + + "SHTRA SIGN VIRAMASAURASHTRA SIGN CANDRABINDUSAURASHTRA DANDASAURASHTRA D" + + "OUBLE DANDASAURASHTRA DIGIT ZEROSAURASHTRA DIGIT ONESAURASHTRA DIGIT TWO" + + "SAURASHTRA DIGIT THREESAURASHTRA DIGIT FOURSAURASHTRA DIGIT FIVESAURASHT" + + "RA DIGIT SIXSAURASHTRA DIGIT SEVENSAURASHTRA DIGIT EIGHTSAURASHTRA DIGIT" + + " NINECOMBINING DEVANAGARI DIGIT ZEROCOMBINING DEVANAGARI DIGIT ONECOMBIN" + + "ING DEVANAGARI DIGIT TWOCOMBINING DEVANAGARI DIGIT THREECOMBINING DEVANA" + + "GARI DIGIT FOURCOMBINING DEVANAGARI DIGIT FIVECOMBINING DEVANAGARI DIGIT" + + " SIXCOMBINING DEVANAGARI DIGIT SEVENCOMBINING DEVANAGARI DIGIT EIGHTCOMB" + + "INING DEVANAGARI DIGIT NINECOMBINING DEVANAGARI LETTER ACOMBINING DEVANA" + + "GARI LETTER UCOMBINING DEVANAGARI LETTER KACOMBINING DEVANAGARI LETTER N" + + "ACOMBINING DEVANAGARI LETTER PACOMBINING DEVANAGARI LETTER RACOMBINING D" + + "EVANAGARI LETTER VICOMBINING DEVANAGARI SIGN AVAGRAHADEVANAGARI SIGN SPA" + + "CING CANDRABINDUDEVANAGARI SIGN CANDRABINDU VIRAMADEVANAGARI SIGN DOUBLE" + + " CANDRABINDU VIRAMADEVANAGARI SIGN CANDRABINDU TWODEVANAGARI SIGN CANDRA" + + "BINDU THREEDEVANAGARI SIGN CANDRABINDU AVAGRAHADEVANAGARI SIGN PUSHPIKAD" + + "EVANAGARI GAP FILLERDEVANAGARI CARETDEVANAGARI HEADSTROKEDEVANAGARI SIGN" + + " SIDDHAMDEVANAGARI JAIN OMKAYAH LI DIGIT ZEROKAYAH LI DIGIT ONEKAYAH LI " + + "DIGIT TWOKAYAH LI DIGIT THREEKAYAH LI DIGIT FOURKAYAH LI DIGIT FIVEKAYAH" + + " LI DIGIT SIXKAYAH LI DIGIT SEVENKAYAH LI DIGIT EIGHTKAYAH LI DIGIT NINE" + + "KAYAH LI LETTER KAKAYAH LI LETTER KHAKAYAH LI LETTER GAKAYAH LI LETTER N" + + "GAKAYAH LI LETTER SAKAYAH LI LETTER SHAKAYAH LI LETTER ZAKAYAH LI LETTER" + + " NYAKAYAH LI LETTER TAKAYAH LI LETTER HTAKAYAH LI LETTER NAKAYAH LI LETT" + + "ER PAKAYAH LI LETTER PHAKAYAH LI LETTER MAKAYAH LI LETTER DAKAYAH LI LET" + + "TER BAKAYAH LI LETTER RAKAYAH LI LETTER YAKAYAH LI LETTER LAKAYAH LI LET" + + "TER WAKAYAH LI LETTER THAKAYAH LI LETTER HAKAYAH LI LETTER VAKAYAH LI LE" + + "TTER CAKAYAH LI LETTER AKAYAH LI LETTER OEKAYAH LI LETTER IKAYAH LI LETT" + + "ER OOKAYAH LI VOWEL UEKAYAH LI VOWEL EKAYAH LI VOWEL UKAYAH LI VOWEL EEK" + + "AYAH LI VOWEL OKAYAH LI TONE PLOPHUKAYAH LI TONE CALYAKAYAH LI TONE CALY" + + "A PLOPHUKAYAH LI SIGN CWIKAYAH LI SIGN SHYAREJANG LETTER KAREJANG LETTER" + + " GAREJANG LETTER NGAREJANG LETTER TAREJANG LETTER DAREJANG LETTER NAREJA" + + "NG LETTER PAREJANG LETTER BAREJANG LETTER MAREJANG LETTER CAREJANG LETTE" + + "R JAREJANG LETTER NYAREJANG LETTER SAREJANG LETTER RAREJANG LETTER LAREJ" + + "ANG LETTER YAREJANG LETTER WAREJANG LETTER HAREJANG LETTER MBAREJANG LET" + + "TER NGGAREJANG LETTER NDAREJANG LETTER NYJAREJANG LETTER AREJANG VOWEL S" + + "IGN IREJANG VOWEL SIGN UREJANG VOWEL SIGN EREJANG VOWEL SIGN AIREJANG VO" + + "WEL SIGN OREJANG VOWEL SIGN AUREJANG VOWEL SIGN EUREJANG VOWEL SIGN EARE" + + "JANG CONSONANT SIGN NGREJANG CONSONANT SIGN NREJANG CONSONANT SIGN RREJA" + + "NG CONSONANT SIGN HREJANG VIRAMAREJANG SECTION MARKHANGUL CHOSEONG TIKEU" + + "T-MIEUMHANGUL CHOSEONG TIKEUT-PIEUPHANGUL CHOSEONG TIKEUT-SIOSHANGUL CHO" + + "SEONG TIKEUT-CIEUCHANGUL CHOSEONG RIEUL-KIYEOKHANGUL CHOSEONG RIEUL-SSAN" + + "GKIYEOKHANGUL CHOSEONG RIEUL-TIKEUTHANGUL CHOSEONG RIEUL-SSANGTIKEUTHANG" + + "UL CHOSEONG RIEUL-MIEUMHANGUL CHOSEONG RIEUL-PIEUPHANGUL CHOSEONG RIEUL-" + + "SSANGPIEUPHANGUL CHOSEONG RIEUL-KAPYEOUNPIEUPHANGUL CHOSEONG RIEUL-SIOSH" + + "ANGUL CHOSEONG RIEUL-CIEUCHANGUL CHOSEONG RIEUL-KHIEUKHHANGUL CHOSEONG M" + + "IEUM-KIYEOKHANGUL CHOSEONG MIEUM-TIKEUTHANGUL CHOSEONG MIEUM-SIOSHANGUL " + + "CHOSEONG PIEUP-SIOS-THIEUTHHANGUL CHOSEONG PIEUP-KHIEUKHHANGUL CHOSEONG ") + ("" + + "PIEUP-HIEUHHANGUL CHOSEONG SSANGSIOS-PIEUPHANGUL CHOSEONG IEUNG-RIEULHAN" + + "GUL CHOSEONG IEUNG-HIEUHHANGUL CHOSEONG SSANGCIEUC-HIEUHHANGUL CHOSEONG " + + "SSANGTHIEUTHHANGUL CHOSEONG PHIEUPH-HIEUHHANGUL CHOSEONG HIEUH-SIOSHANGU" + + "L CHOSEONG SSANGYEORINHIEUHJAVANESE SIGN PANYANGGAJAVANESE SIGN CECAKJAV" + + "ANESE SIGN LAYARJAVANESE SIGN WIGNYANJAVANESE LETTER AJAVANESE LETTER I " + + "KAWIJAVANESE LETTER IJAVANESE LETTER IIJAVANESE LETTER UJAVANESE LETTER " + + "PA CEREKJAVANESE LETTER NGA LELETJAVANESE LETTER NGA LELET RASWADIJAVANE" + + "SE LETTER EJAVANESE LETTER AIJAVANESE LETTER OJAVANESE LETTER KAJAVANESE" + + " LETTER KA SASAKJAVANESE LETTER KA MURDAJAVANESE LETTER GAJAVANESE LETTE" + + "R GA MURDAJAVANESE LETTER NGAJAVANESE LETTER CAJAVANESE LETTER CA MURDAJ" + + "AVANESE LETTER JAJAVANESE LETTER NYA MURDAJAVANESE LETTER JA MAHAPRANAJA" + + "VANESE LETTER NYAJAVANESE LETTER TTAJAVANESE LETTER TTA MAHAPRANAJAVANES" + + "E LETTER DDAJAVANESE LETTER DDA MAHAPRANAJAVANESE LETTER NA MURDAJAVANES" + + "E LETTER TAJAVANESE LETTER TA MURDAJAVANESE LETTER DAJAVANESE LETTER DA " + + "MAHAPRANAJAVANESE LETTER NAJAVANESE LETTER PAJAVANESE LETTER PA MURDAJAV" + + "ANESE LETTER BAJAVANESE LETTER BA MURDAJAVANESE LETTER MAJAVANESE LETTER" + + " YAJAVANESE LETTER RAJAVANESE LETTER RA AGUNGJAVANESE LETTER LAJAVANESE " + + "LETTER WAJAVANESE LETTER SA MURDAJAVANESE LETTER SA MAHAPRANAJAVANESE LE" + + "TTER SAJAVANESE LETTER HAJAVANESE SIGN CECAK TELUJAVANESE VOWEL SIGN TAR" + + "UNGJAVANESE VOWEL SIGN TOLONGJAVANESE VOWEL SIGN WULUJAVANESE VOWEL SIGN" + + " WULU MELIKJAVANESE VOWEL SIGN SUKUJAVANESE VOWEL SIGN SUKU MENDUTJAVANE" + + "SE VOWEL SIGN TALINGJAVANESE VOWEL SIGN DIRGA MUREJAVANESE VOWEL SIGN PE" + + "PETJAVANESE CONSONANT SIGN KERETJAVANESE CONSONANT SIGN PENGKALJAVANESE " + + "CONSONANT SIGN CAKRAJAVANESE PANGKONJAVANESE LEFT RERENGGANJAVANESE RIGH" + + "T RERENGGANJAVANESE PADA ANDAPJAVANESE PADA MADYAJAVANESE PADA LUHURJAVA" + + "NESE PADA WINDUJAVANESE PADA PANGKATJAVANESE PADA LINGSAJAVANESE PADA LU" + + "NGSIJAVANESE PADA ADEGJAVANESE PADA ADEG ADEGJAVANESE PADA PISELEHJAVANE" + + "SE TURNED PADA PISELEHJAVANESE PANGRANGKEPJAVANESE DIGIT ZEROJAVANESE DI" + + "GIT ONEJAVANESE DIGIT TWOJAVANESE DIGIT THREEJAVANESE DIGIT FOURJAVANESE" + + " DIGIT FIVEJAVANESE DIGIT SIXJAVANESE DIGIT SEVENJAVANESE DIGIT EIGHTJAV" + + "ANESE DIGIT NINEJAVANESE PADA TIRTA TUMETESJAVANESE PADA ISEN-ISENMYANMA" + + "R LETTER SHAN GHAMYANMAR LETTER SHAN CHAMYANMAR LETTER SHAN JHAMYANMAR L" + + "ETTER SHAN NNAMYANMAR LETTER SHAN BHAMYANMAR SIGN SHAN SAWMYANMAR MODIFI" + + "ER LETTER SHAN REDUPLICATIONMYANMAR LETTER TAI LAING NYAMYANMAR LETTER T" + + "AI LAING FAMYANMAR LETTER TAI LAING GAMYANMAR LETTER TAI LAING GHAMYANMA" + + "R LETTER TAI LAING JAMYANMAR LETTER TAI LAING JHAMYANMAR LETTER TAI LAIN" + + "G DDAMYANMAR LETTER TAI LAING DDHAMYANMAR LETTER TAI LAING NNAMYANMAR TA" + + "I LAING DIGIT ZEROMYANMAR TAI LAING DIGIT ONEMYANMAR TAI LAING DIGIT TWO" + + "MYANMAR TAI LAING DIGIT THREEMYANMAR TAI LAING DIGIT FOURMYANMAR TAI LAI" + + "NG DIGIT FIVEMYANMAR TAI LAING DIGIT SIXMYANMAR TAI LAING DIGIT SEVENMYA" + + "NMAR TAI LAING DIGIT EIGHTMYANMAR TAI LAING DIGIT NINEMYANMAR LETTER TAI" + + " LAING LLAMYANMAR LETTER TAI LAING DAMYANMAR LETTER TAI LAING DHAMYANMAR" + + " LETTER TAI LAING BAMYANMAR LETTER TAI LAING BHACHAM LETTER ACHAM LETTER" + + " ICHAM LETTER UCHAM LETTER ECHAM LETTER AICHAM LETTER OCHAM LETTER KACHA" + + "M LETTER KHACHAM LETTER GACHAM LETTER GHACHAM LETTER NGUECHAM LETTER NGA" + + "CHAM LETTER CHACHAM LETTER CHHACHAM LETTER JACHAM LETTER JHACHAM LETTER " + + "NHUECHAM LETTER NHACHAM LETTER NHJACHAM LETTER TACHAM LETTER THACHAM LET" + + "TER DACHAM LETTER DHACHAM LETTER NUECHAM LETTER NACHAM LETTER DDACHAM LE" + + "TTER PACHAM LETTER PPACHAM LETTER PHACHAM LETTER BACHAM LETTER BHACHAM L" + + "ETTER MUECHAM LETTER MACHAM LETTER BBACHAM LETTER YACHAM LETTER RACHAM L" + + "ETTER LACHAM LETTER VACHAM LETTER SSACHAM LETTER SACHAM LETTER HACHAM VO" + + "WEL SIGN AACHAM VOWEL SIGN ICHAM VOWEL SIGN IICHAM VOWEL SIGN EICHAM VOW" + + "EL SIGN UCHAM VOWEL SIGN OECHAM VOWEL SIGN OCHAM VOWEL SIGN AICHAM VOWEL" + + " SIGN AUCHAM VOWEL SIGN UECHAM CONSONANT SIGN YACHAM CONSONANT SIGN RACH" + + "AM CONSONANT SIGN LACHAM CONSONANT SIGN WACHAM LETTER FINAL KCHAM LETTER" + + " FINAL GCHAM LETTER FINAL NGCHAM CONSONANT SIGN FINAL NGCHAM LETTER FINA" + + "L CHCHAM LETTER FINAL TCHAM LETTER FINAL NCHAM LETTER FINAL PCHAM LETTER" + + " FINAL YCHAM LETTER FINAL RCHAM LETTER FINAL LCHAM LETTER FINAL SSCHAM C" + + "ONSONANT SIGN FINAL MCHAM CONSONANT SIGN FINAL HCHAM DIGIT ZEROCHAM DIGI" + + "T ONECHAM DIGIT TWOCHAM DIGIT THREECHAM DIGIT FOURCHAM DIGIT FIVECHAM DI" + + "GIT SIXCHAM DIGIT SEVENCHAM DIGIT EIGHTCHAM DIGIT NINECHAM PUNCTUATION S" + + "PIRALCHAM PUNCTUATION DANDACHAM PUNCTUATION DOUBLE DANDACHAM PUNCTUATION" + + " TRIPLE DANDAMYANMAR LETTER KHAMTI GAMYANMAR LETTER KHAMTI CAMYANMAR LET" + + "TER KHAMTI CHAMYANMAR LETTER KHAMTI JAMYANMAR LETTER KHAMTI JHAMYANMAR L") + ("" + + "ETTER KHAMTI NYAMYANMAR LETTER KHAMTI TTAMYANMAR LETTER KHAMTI TTHAMYANM" + + "AR LETTER KHAMTI DDAMYANMAR LETTER KHAMTI DDHAMYANMAR LETTER KHAMTI DHAM" + + "YANMAR LETTER KHAMTI NAMYANMAR LETTER KHAMTI SAMYANMAR LETTER KHAMTI HAM" + + "YANMAR LETTER KHAMTI HHAMYANMAR LETTER KHAMTI FAMYANMAR MODIFIER LETTER " + + "KHAMTI REDUPLICATIONMYANMAR LETTER KHAMTI XAMYANMAR LETTER KHAMTI ZAMYAN" + + "MAR LETTER KHAMTI RAMYANMAR LOGOGRAM KHAMTI OAYMYANMAR LOGOGRAM KHAMTI Q" + + "NMYANMAR LOGOGRAM KHAMTI HMMYANMAR SYMBOL AITON EXCLAMATIONMYANMAR SYMBO" + + "L AITON ONEMYANMAR SYMBOL AITON TWOMYANMAR LETTER AITON RAMYANMAR SIGN P" + + "AO KAREN TONEMYANMAR SIGN TAI LAING TONE-2MYANMAR SIGN TAI LAING TONE-5M" + + "YANMAR LETTER SHWE PALAUNG CHAMYANMAR LETTER SHWE PALAUNG SHATAI VIET LE" + + "TTER LOW KOTAI VIET LETTER HIGH KOTAI VIET LETTER LOW KHOTAI VIET LETTER" + + " HIGH KHOTAI VIET LETTER LOW KHHOTAI VIET LETTER HIGH KHHOTAI VIET LETTE" + + "R LOW GOTAI VIET LETTER HIGH GOTAI VIET LETTER LOW NGOTAI VIET LETTER HI" + + "GH NGOTAI VIET LETTER LOW COTAI VIET LETTER HIGH COTAI VIET LETTER LOW C" + + "HOTAI VIET LETTER HIGH CHOTAI VIET LETTER LOW SOTAI VIET LETTER HIGH SOT" + + "AI VIET LETTER LOW NYOTAI VIET LETTER HIGH NYOTAI VIET LETTER LOW DOTAI " + + "VIET LETTER HIGH DOTAI VIET LETTER LOW TOTAI VIET LETTER HIGH TOTAI VIET" + + " LETTER LOW THOTAI VIET LETTER HIGH THOTAI VIET LETTER LOW NOTAI VIET LE" + + "TTER HIGH NOTAI VIET LETTER LOW BOTAI VIET LETTER HIGH BOTAI VIET LETTER" + + " LOW POTAI VIET LETTER HIGH POTAI VIET LETTER LOW PHOTAI VIET LETTER HIG" + + "H PHOTAI VIET LETTER LOW FOTAI VIET LETTER HIGH FOTAI VIET LETTER LOW MO" + + "TAI VIET LETTER HIGH MOTAI VIET LETTER LOW YOTAI VIET LETTER HIGH YOTAI " + + "VIET LETTER LOW ROTAI VIET LETTER HIGH ROTAI VIET LETTER LOW LOTAI VIET " + + "LETTER HIGH LOTAI VIET LETTER LOW VOTAI VIET LETTER HIGH VOTAI VIET LETT" + + "ER LOW HOTAI VIET LETTER HIGH HOTAI VIET LETTER LOW OTAI VIET LETTER HIG" + + "H OTAI VIET MAI KANGTAI VIET VOWEL AATAI VIET VOWEL ITAI VIET VOWEL UETA" + + "I VIET VOWEL UTAI VIET VOWEL ETAI VIET VOWEL OTAI VIET MAI KHITTAI VIET " + + "VOWEL IATAI VIET VOWEL UEATAI VIET VOWEL UATAI VIET VOWEL AUETAI VIET VO" + + "WEL AYTAI VIET VOWEL ANTAI VIET VOWEL AMTAI VIET TONE MAI EKTAI VIET TON" + + "E MAI NUENGTAI VIET TONE MAI THOTAI VIET TONE MAI SONGTAI VIET SYMBOL KO" + + "NTAI VIET SYMBOL NUENGTAI VIET SYMBOL SAMTAI VIET SYMBOL HO HOITAI VIET " + + "SYMBOL KOI KOIMEETEI MAYEK LETTER EMEETEI MAYEK LETTER OMEETEI MAYEK LET" + + "TER CHAMEETEI MAYEK LETTER NYAMEETEI MAYEK LETTER TTAMEETEI MAYEK LETTER" + + " TTHAMEETEI MAYEK LETTER DDAMEETEI MAYEK LETTER DDHAMEETEI MAYEK LETTER " + + "NNAMEETEI MAYEK LETTER SHAMEETEI MAYEK LETTER SSAMEETEI MAYEK VOWEL SIGN" + + " IIMEETEI MAYEK VOWEL SIGN UUMEETEI MAYEK VOWEL SIGN AAIMEETEI MAYEK VOW" + + "EL SIGN AUMEETEI MAYEK VOWEL SIGN AAUMEETEI MAYEK CHEIKHANMEETEI MAYEK A" + + "HANG KHUDAMMEETEI MAYEK ANJIMEETEI MAYEK SYLLABLE REPETITION MARKMEETEI " + + "MAYEK WORD REPETITION MARKMEETEI MAYEK VOWEL SIGN VISARGAMEETEI MAYEK VI" + + "RAMAETHIOPIC SYLLABLE TTHUETHIOPIC SYLLABLE TTHIETHIOPIC SYLLABLE TTHAAE" + + "THIOPIC SYLLABLE TTHEEETHIOPIC SYLLABLE TTHEETHIOPIC SYLLABLE TTHOETHIOP" + + "IC SYLLABLE DDHUETHIOPIC SYLLABLE DDHIETHIOPIC SYLLABLE DDHAAETHIOPIC SY" + + "LLABLE DDHEEETHIOPIC SYLLABLE DDHEETHIOPIC SYLLABLE DDHOETHIOPIC SYLLABL" + + "E DZUETHIOPIC SYLLABLE DZIETHIOPIC SYLLABLE DZAAETHIOPIC SYLLABLE DZEEET" + + "HIOPIC SYLLABLE DZEETHIOPIC SYLLABLE DZOETHIOPIC SYLLABLE CCHHAETHIOPIC " + + "SYLLABLE CCHHUETHIOPIC SYLLABLE CCHHIETHIOPIC SYLLABLE CCHHAAETHIOPIC SY" + + "LLABLE CCHHEEETHIOPIC SYLLABLE CCHHEETHIOPIC SYLLABLE CCHHOETHIOPIC SYLL" + + "ABLE BBAETHIOPIC SYLLABLE BBUETHIOPIC SYLLABLE BBIETHIOPIC SYLLABLE BBAA" + + "ETHIOPIC SYLLABLE BBEEETHIOPIC SYLLABLE BBEETHIOPIC SYLLABLE BBOLATIN SM" + + "ALL LETTER BARRED ALPHALATIN SMALL LETTER A REVERSED-SCHWALATIN SMALL LE" + + "TTER BLACKLETTER ELATIN SMALL LETTER BARRED ELATIN SMALL LETTER E WITH F" + + "LOURISHLATIN SMALL LETTER LENIS FLATIN SMALL LETTER SCRIPT G WITH CROSSE" + + "D-TAILLATIN SMALL LETTER L WITH INVERTED LAZY SLATIN SMALL LETTER L WITH" + + " DOUBLE MIDDLE TILDELATIN SMALL LETTER L WITH MIDDLE RINGLATIN SMALL LET" + + "TER M WITH CROSSED-TAILLATIN SMALL LETTER N WITH CROSSED-TAILLATIN SMALL" + + " LETTER ENG WITH CROSSED-TAILLATIN SMALL LETTER BLACKLETTER OLATIN SMALL" + + " LETTER BLACKLETTER O WITH STROKELATIN SMALL LETTER OPEN O WITH STROKELA" + + "TIN SMALL LETTER INVERTED OELATIN SMALL LETTER TURNED OE WITH STROKELATI" + + "N SMALL LETTER TURNED OE WITH HORIZONTAL STROKELATIN SMALL LETTER TURNED" + + " O OPEN-OLATIN SMALL LETTER TURNED O OPEN-O WITH STROKELATIN SMALL LETTE" + + "R STIRRUP RLATIN LETTER SMALL CAPITAL R WITH RIGHT LEGLATIN SMALL LETTER" + + " R WITHOUT HANDLELATIN SMALL LETTER DOUBLE RLATIN SMALL LETTER R WITH CR" + + "OSSED-TAILLATIN SMALL LETTER DOUBLE R WITH CROSSED-TAILLATIN SMALL LETTE" + + "R SCRIPT RLATIN SMALL LETTER SCRIPT R WITH RINGLATIN SMALL LETTER BASELI") + ("" + + "NE ESHLATIN SMALL LETTER U WITH SHORT RIGHT LEGLATIN SMALL LETTER U BAR " + + "WITH SHORT RIGHT LEGLATIN SMALL LETTER UILATIN SMALL LETTER TURNED UILAT" + + "IN SMALL LETTER U WITH LEFT HOOKLATIN SMALL LETTER CHILATIN SMALL LETTER" + + " CHI WITH LOW RIGHT RINGLATIN SMALL LETTER CHI WITH LOW LEFT SERIFLATIN " + + "SMALL LETTER X WITH LOW RIGHT RINGLATIN SMALL LETTER X WITH LONG LEFT LE" + + "GLATIN SMALL LETTER X WITH LONG LEFT LEG AND LOW RIGHT RINGLATIN SMALL L" + + "ETTER X WITH LONG LEFT LEG WITH SERIFLATIN SMALL LETTER Y WITH SHORT RIG" + + "HT LEGMODIFIER BREVE WITH INVERTED BREVEMODIFIER LETTER SMALL HENGMODIFI" + + "ER LETTER SMALL L WITH INVERTED LAZY SMODIFIER LETTER SMALL L WITH MIDDL" + + "E TILDEMODIFIER LETTER SMALL U WITH LEFT HOOKLATIN SMALL LETTER SAKHA YA" + + "TLATIN SMALL LETTER IOTIFIED ELATIN SMALL LETTER OPEN OELATIN SMALL LETT" + + "ER UOLATIN SMALL LETTER INVERTED ALPHAGREEK LETTER SMALL CAPITAL OMEGACH" + + "EROKEE SMALL LETTER ACHEROKEE SMALL LETTER ECHEROKEE SMALL LETTER ICHERO" + + "KEE SMALL LETTER OCHEROKEE SMALL LETTER UCHEROKEE SMALL LETTER VCHEROKEE" + + " SMALL LETTER GACHEROKEE SMALL LETTER KACHEROKEE SMALL LETTER GECHEROKEE" + + " SMALL LETTER GICHEROKEE SMALL LETTER GOCHEROKEE SMALL LETTER GUCHEROKEE" + + " SMALL LETTER GVCHEROKEE SMALL LETTER HACHEROKEE SMALL LETTER HECHEROKEE" + + " SMALL LETTER HICHEROKEE SMALL LETTER HOCHEROKEE SMALL LETTER HUCHEROKEE" + + " SMALL LETTER HVCHEROKEE SMALL LETTER LACHEROKEE SMALL LETTER LECHEROKEE" + + " SMALL LETTER LICHEROKEE SMALL LETTER LOCHEROKEE SMALL LETTER LUCHEROKEE" + + " SMALL LETTER LVCHEROKEE SMALL LETTER MACHEROKEE SMALL LETTER MECHEROKEE" + + " SMALL LETTER MICHEROKEE SMALL LETTER MOCHEROKEE SMALL LETTER MUCHEROKEE" + + " SMALL LETTER NACHEROKEE SMALL LETTER HNACHEROKEE SMALL LETTER NAHCHEROK" + + "EE SMALL LETTER NECHEROKEE SMALL LETTER NICHEROKEE SMALL LETTER NOCHEROK" + + "EE SMALL LETTER NUCHEROKEE SMALL LETTER NVCHEROKEE SMALL LETTER QUACHERO" + + "KEE SMALL LETTER QUECHEROKEE SMALL LETTER QUICHEROKEE SMALL LETTER QUOCH" + + "EROKEE SMALL LETTER QUUCHEROKEE SMALL LETTER QUVCHEROKEE SMALL LETTER SA" + + "CHEROKEE SMALL LETTER SCHEROKEE SMALL LETTER SECHEROKEE SMALL LETTER SIC" + + "HEROKEE SMALL LETTER SOCHEROKEE SMALL LETTER SUCHEROKEE SMALL LETTER SVC" + + "HEROKEE SMALL LETTER DACHEROKEE SMALL LETTER TACHEROKEE SMALL LETTER DEC" + + "HEROKEE SMALL LETTER TECHEROKEE SMALL LETTER DICHEROKEE SMALL LETTER TIC" + + "HEROKEE SMALL LETTER DOCHEROKEE SMALL LETTER DUCHEROKEE SMALL LETTER DVC" + + "HEROKEE SMALL LETTER DLACHEROKEE SMALL LETTER TLACHEROKEE SMALL LETTER T" + + "LECHEROKEE SMALL LETTER TLICHEROKEE SMALL LETTER TLOCHEROKEE SMALL LETTE" + + "R TLUCHEROKEE SMALL LETTER TLVCHEROKEE SMALL LETTER TSACHEROKEE SMALL LE" + + "TTER TSECHEROKEE SMALL LETTER TSICHEROKEE SMALL LETTER TSOCHEROKEE SMALL" + + " LETTER TSUCHEROKEE SMALL LETTER TSVCHEROKEE SMALL LETTER WACHEROKEE SMA" + + "LL LETTER WECHEROKEE SMALL LETTER WICHEROKEE SMALL LETTER WOCHEROKEE SMA" + + "LL LETTER WUCHEROKEE SMALL LETTER WVCHEROKEE SMALL LETTER YAMEETEI MAYEK" + + " LETTER KOKMEETEI MAYEK LETTER SAMMEETEI MAYEK LETTER LAIMEETEI MAYEK LE" + + "TTER MITMEETEI MAYEK LETTER PAMEETEI MAYEK LETTER NAMEETEI MAYEK LETTER " + + "CHILMEETEI MAYEK LETTER TILMEETEI MAYEK LETTER KHOUMEETEI MAYEK LETTER N" + + "GOUMEETEI MAYEK LETTER THOUMEETEI MAYEK LETTER WAIMEETEI MAYEK LETTER YA" + + "NGMEETEI MAYEK LETTER HUKMEETEI MAYEK LETTER UNMEETEI MAYEK LETTER IMEET" + + "EI MAYEK LETTER PHAMMEETEI MAYEK LETTER ATIYAMEETEI MAYEK LETTER GOKMEET" + + "EI MAYEK LETTER JHAMMEETEI MAYEK LETTER RAIMEETEI MAYEK LETTER BAMEETEI " + + "MAYEK LETTER JILMEETEI MAYEK LETTER DILMEETEI MAYEK LETTER GHOUMEETEI MA" + + "YEK LETTER DHOUMEETEI MAYEK LETTER BHAMMEETEI MAYEK LETTER KOK LONSUMMEE" + + "TEI MAYEK LETTER LAI LONSUMMEETEI MAYEK LETTER MIT LONSUMMEETEI MAYEK LE" + + "TTER PA LONSUMMEETEI MAYEK LETTER NA LONSUMMEETEI MAYEK LETTER TIL LONSU" + + "MMEETEI MAYEK LETTER NGOU LONSUMMEETEI MAYEK LETTER I LONSUMMEETEI MAYEK" + + " VOWEL SIGN ONAPMEETEI MAYEK VOWEL SIGN INAPMEETEI MAYEK VOWEL SIGN ANAP" + + "MEETEI MAYEK VOWEL SIGN YENAPMEETEI MAYEK VOWEL SIGN SOUNAPMEETEI MAYEK " + + "VOWEL SIGN UNAPMEETEI MAYEK VOWEL SIGN CHEINAPMEETEI MAYEK VOWEL SIGN NU" + + "NGMEETEI MAYEK CHEIKHEIMEETEI MAYEK LUM IYEKMEETEI MAYEK APUN IYEKMEETEI" + + " MAYEK DIGIT ZEROMEETEI MAYEK DIGIT ONEMEETEI MAYEK DIGIT TWOMEETEI MAYE" + + "K DIGIT THREEMEETEI MAYEK DIGIT FOURMEETEI MAYEK DIGIT FIVEMEETEI MAYEK " + + "DIGIT SIXMEETEI MAYEK DIGIT SEVENMEETEI MAYEK DIGIT EIGHTMEETEI MAYEK DI" + + "GIT NINEHANGUL JUNGSEONG O-YEOHANGUL JUNGSEONG O-O-IHANGUL JUNGSEONG YO-" + + "AHANGUL JUNGSEONG YO-AEHANGUL JUNGSEONG YO-EOHANGUL JUNGSEONG U-YEOHANGU" + + "L JUNGSEONG U-I-IHANGUL JUNGSEONG YU-AEHANGUL JUNGSEONG YU-OHANGUL JUNGS" + + "EONG EU-AHANGUL JUNGSEONG EU-EOHANGUL JUNGSEONG EU-EHANGUL JUNGSEONG EU-" + + "OHANGUL JUNGSEONG I-YA-OHANGUL JUNGSEONG I-YAEHANGUL JUNGSEONG I-YEOHANG" + + "UL JUNGSEONG I-YEHANGUL JUNGSEONG I-O-IHANGUL JUNGSEONG I-YOHANGUL JUNGS") + ("" + + "EONG I-YUHANGUL JUNGSEONG I-IHANGUL JUNGSEONG ARAEA-AHANGUL JUNGSEONG AR" + + "AEA-EHANGUL JONGSEONG NIEUN-RIEULHANGUL JONGSEONG NIEUN-CHIEUCHHANGUL JO" + + "NGSEONG SSANGTIKEUTHANGUL JONGSEONG SSANGTIKEUT-PIEUPHANGUL JONGSEONG TI" + + "KEUT-PIEUPHANGUL JONGSEONG TIKEUT-SIOSHANGUL JONGSEONG TIKEUT-SIOS-KIYEO" + + "KHANGUL JONGSEONG TIKEUT-CIEUCHANGUL JONGSEONG TIKEUT-CHIEUCHHANGUL JONG" + + "SEONG TIKEUT-THIEUTHHANGUL JONGSEONG RIEUL-SSANGKIYEOKHANGUL JONGSEONG R" + + "IEUL-KIYEOK-HIEUHHANGUL JONGSEONG SSANGRIEUL-KHIEUKHHANGUL JONGSEONG RIE" + + "UL-MIEUM-HIEUHHANGUL JONGSEONG RIEUL-PIEUP-TIKEUTHANGUL JONGSEONG RIEUL-" + + "PIEUP-PHIEUPHHANGUL JONGSEONG RIEUL-YESIEUNGHANGUL JONGSEONG RIEUL-YEORI" + + "NHIEUH-HIEUHHANGUL JONGSEONG KAPYEOUNRIEULHANGUL JONGSEONG MIEUM-NIEUNHA" + + "NGUL JONGSEONG MIEUM-SSANGNIEUNHANGUL JONGSEONG SSANGMIEUMHANGUL JONGSEO" + + "NG MIEUM-PIEUP-SIOSHANGUL JONGSEONG MIEUM-CIEUCHANGUL JONGSEONG PIEUP-TI" + + "KEUTHANGUL JONGSEONG PIEUP-RIEUL-PHIEUPHHANGUL JONGSEONG PIEUP-MIEUMHANG" + + "UL JONGSEONG SSANGPIEUPHANGUL JONGSEONG PIEUP-SIOS-TIKEUTHANGUL JONGSEON" + + "G PIEUP-CIEUCHANGUL JONGSEONG PIEUP-CHIEUCHHANGUL JONGSEONG SIOS-MIEUMHA" + + "NGUL JONGSEONG SIOS-KAPYEOUNPIEUPHANGUL JONGSEONG SSANGSIOS-KIYEOKHANGUL" + + " JONGSEONG SSANGSIOS-TIKEUTHANGUL JONGSEONG SIOS-PANSIOSHANGUL JONGSEONG" + + " SIOS-CIEUCHANGUL JONGSEONG SIOS-CHIEUCHHANGUL JONGSEONG SIOS-THIEUTHHAN" + + "GUL JONGSEONG SIOS-HIEUHHANGUL JONGSEONG PANSIOS-PIEUPHANGUL JONGSEONG P" + + "ANSIOS-KAPYEOUNPIEUPHANGUL JONGSEONG YESIEUNG-MIEUMHANGUL JONGSEONG YESI" + + "EUNG-HIEUHHANGUL JONGSEONG CIEUC-PIEUPHANGUL JONGSEONG CIEUC-SSANGPIEUPH" + + "ANGUL JONGSEONG SSANGCIEUCHANGUL JONGSEONG PHIEUPH-SIOSHANGUL JONGSEONG " + + "PHIEUPH-THIEUTHCJK COMPATIBILITY IDEOGRAPH-F900CJK COMPATIBILITY IDEOGRA" + + "PH-F901CJK COMPATIBILITY IDEOGRAPH-F902CJK COMPATIBILITY IDEOGRAPH-F903C" + + "JK COMPATIBILITY IDEOGRAPH-F904CJK COMPATIBILITY IDEOGRAPH-F905CJK COMPA" + + "TIBILITY IDEOGRAPH-F906CJK COMPATIBILITY IDEOGRAPH-F907CJK COMPATIBILITY" + + " IDEOGRAPH-F908CJK COMPATIBILITY IDEOGRAPH-F909CJK COMPATIBILITY IDEOGRA" + + "PH-F90ACJK COMPATIBILITY IDEOGRAPH-F90BCJK COMPATIBILITY IDEOGRAPH-F90CC" + + "JK COMPATIBILITY IDEOGRAPH-F90DCJK COMPATIBILITY IDEOGRAPH-F90ECJK COMPA" + + "TIBILITY IDEOGRAPH-F90FCJK COMPATIBILITY IDEOGRAPH-F910CJK COMPATIBILITY" + + " IDEOGRAPH-F911CJK COMPATIBILITY IDEOGRAPH-F912CJK COMPATIBILITY IDEOGRA" + + "PH-F913CJK COMPATIBILITY IDEOGRAPH-F914CJK COMPATIBILITY IDEOGRAPH-F915C" + + "JK COMPATIBILITY IDEOGRAPH-F916CJK COMPATIBILITY IDEOGRAPH-F917CJK COMPA" + + "TIBILITY IDEOGRAPH-F918CJK COMPATIBILITY IDEOGRAPH-F919CJK COMPATIBILITY" + + " IDEOGRAPH-F91ACJK COMPATIBILITY IDEOGRAPH-F91BCJK COMPATIBILITY IDEOGRA" + + "PH-F91CCJK COMPATIBILITY IDEOGRAPH-F91DCJK COMPATIBILITY IDEOGRAPH-F91EC" + + "JK COMPATIBILITY IDEOGRAPH-F91FCJK COMPATIBILITY IDEOGRAPH-F920CJK COMPA" + + "TIBILITY IDEOGRAPH-F921CJK COMPATIBILITY IDEOGRAPH-F922CJK COMPATIBILITY" + + " IDEOGRAPH-F923CJK COMPATIBILITY IDEOGRAPH-F924CJK COMPATIBILITY IDEOGRA" + + "PH-F925CJK COMPATIBILITY IDEOGRAPH-F926CJK COMPATIBILITY IDEOGRAPH-F927C" + + "JK COMPATIBILITY IDEOGRAPH-F928CJK COMPATIBILITY IDEOGRAPH-F929CJK COMPA" + + "TIBILITY IDEOGRAPH-F92ACJK COMPATIBILITY IDEOGRAPH-F92BCJK COMPATIBILITY" + + " IDEOGRAPH-F92CCJK COMPATIBILITY IDEOGRAPH-F92DCJK COMPATIBILITY IDEOGRA" + + "PH-F92ECJK COMPATIBILITY IDEOGRAPH-F92FCJK COMPATIBILITY IDEOGRAPH-F930C" + + "JK COMPATIBILITY IDEOGRAPH-F931CJK COMPATIBILITY IDEOGRAPH-F932CJK COMPA" + + "TIBILITY IDEOGRAPH-F933CJK COMPATIBILITY IDEOGRAPH-F934CJK COMPATIBILITY" + + " IDEOGRAPH-F935CJK COMPATIBILITY IDEOGRAPH-F936CJK COMPATIBILITY IDEOGRA" + + "PH-F937CJK COMPATIBILITY IDEOGRAPH-F938CJK COMPATIBILITY IDEOGRAPH-F939C" + + "JK COMPATIBILITY IDEOGRAPH-F93ACJK COMPATIBILITY IDEOGRAPH-F93BCJK COMPA" + + "TIBILITY IDEOGRAPH-F93CCJK COMPATIBILITY IDEOGRAPH-F93DCJK COMPATIBILITY" + + " IDEOGRAPH-F93ECJK COMPATIBILITY IDEOGRAPH-F93FCJK COMPATIBILITY IDEOGRA" + + "PH-F940CJK COMPATIBILITY IDEOGRAPH-F941CJK COMPATIBILITY IDEOGRAPH-F942C" + + "JK COMPATIBILITY IDEOGRAPH-F943CJK COMPATIBILITY IDEOGRAPH-F944CJK COMPA" + + "TIBILITY IDEOGRAPH-F945CJK COMPATIBILITY IDEOGRAPH-F946CJK COMPATIBILITY" + + " IDEOGRAPH-F947CJK COMPATIBILITY IDEOGRAPH-F948CJK COMPATIBILITY IDEOGRA" + + "PH-F949CJK COMPATIBILITY IDEOGRAPH-F94ACJK COMPATIBILITY IDEOGRAPH-F94BC" + + "JK COMPATIBILITY IDEOGRAPH-F94CCJK COMPATIBILITY IDEOGRAPH-F94DCJK COMPA" + + "TIBILITY IDEOGRAPH-F94ECJK COMPATIBILITY IDEOGRAPH-F94FCJK COMPATIBILITY" + + " IDEOGRAPH-F950CJK COMPATIBILITY IDEOGRAPH-F951CJK COMPATIBILITY IDEOGRA" + + "PH-F952CJK COMPATIBILITY IDEOGRAPH-F953CJK COMPATIBILITY IDEOGRAPH-F954C" + + "JK COMPATIBILITY IDEOGRAPH-F955CJK COMPATIBILITY IDEOGRAPH-F956CJK COMPA" + + "TIBILITY IDEOGRAPH-F957CJK COMPATIBILITY IDEOGRAPH-F958CJK COMPATIBILITY" + + " IDEOGRAPH-F959CJK COMPATIBILITY IDEOGRAPH-F95ACJK COMPATIBILITY IDEOGRA" + + "PH-F95BCJK COMPATIBILITY IDEOGRAPH-F95CCJK COMPATIBILITY IDEOGRAPH-F95DC") + ("" + + "JK COMPATIBILITY IDEOGRAPH-F95ECJK COMPATIBILITY IDEOGRAPH-F95FCJK COMPA" + + "TIBILITY IDEOGRAPH-F960CJK COMPATIBILITY IDEOGRAPH-F961CJK COMPATIBILITY" + + " IDEOGRAPH-F962CJK COMPATIBILITY IDEOGRAPH-F963CJK COMPATIBILITY IDEOGRA" + + "PH-F964CJK COMPATIBILITY IDEOGRAPH-F965CJK COMPATIBILITY IDEOGRAPH-F966C" + + "JK COMPATIBILITY IDEOGRAPH-F967CJK COMPATIBILITY IDEOGRAPH-F968CJK COMPA" + + "TIBILITY IDEOGRAPH-F969CJK COMPATIBILITY IDEOGRAPH-F96ACJK COMPATIBILITY" + + " IDEOGRAPH-F96BCJK COMPATIBILITY IDEOGRAPH-F96CCJK COMPATIBILITY IDEOGRA" + + "PH-F96DCJK COMPATIBILITY IDEOGRAPH-F96ECJK COMPATIBILITY IDEOGRAPH-F96FC" + + "JK COMPATIBILITY IDEOGRAPH-F970CJK COMPATIBILITY IDEOGRAPH-F971CJK COMPA" + + "TIBILITY IDEOGRAPH-F972CJK COMPATIBILITY IDEOGRAPH-F973CJK COMPATIBILITY" + + " IDEOGRAPH-F974CJK COMPATIBILITY IDEOGRAPH-F975CJK COMPATIBILITY IDEOGRA" + + "PH-F976CJK COMPATIBILITY IDEOGRAPH-F977CJK COMPATIBILITY IDEOGRAPH-F978C" + + "JK COMPATIBILITY IDEOGRAPH-F979CJK COMPATIBILITY IDEOGRAPH-F97ACJK COMPA" + + "TIBILITY IDEOGRAPH-F97BCJK COMPATIBILITY IDEOGRAPH-F97CCJK COMPATIBILITY" + + " IDEOGRAPH-F97DCJK COMPATIBILITY IDEOGRAPH-F97ECJK COMPATIBILITY IDEOGRA" + + "PH-F97FCJK COMPATIBILITY IDEOGRAPH-F980CJK COMPATIBILITY IDEOGRAPH-F981C" + + "JK COMPATIBILITY IDEOGRAPH-F982CJK COMPATIBILITY IDEOGRAPH-F983CJK COMPA" + + "TIBILITY IDEOGRAPH-F984CJK COMPATIBILITY IDEOGRAPH-F985CJK COMPATIBILITY" + + " IDEOGRAPH-F986CJK COMPATIBILITY IDEOGRAPH-F987CJK COMPATIBILITY IDEOGRA" + + "PH-F988CJK COMPATIBILITY IDEOGRAPH-F989CJK COMPATIBILITY IDEOGRAPH-F98AC" + + "JK COMPATIBILITY IDEOGRAPH-F98BCJK COMPATIBILITY IDEOGRAPH-F98CCJK COMPA" + + "TIBILITY IDEOGRAPH-F98DCJK COMPATIBILITY IDEOGRAPH-F98ECJK COMPATIBILITY" + + " IDEOGRAPH-F98FCJK COMPATIBILITY IDEOGRAPH-F990CJK COMPATIBILITY IDEOGRA" + + "PH-F991CJK COMPATIBILITY IDEOGRAPH-F992CJK COMPATIBILITY IDEOGRAPH-F993C" + + "JK COMPATIBILITY IDEOGRAPH-F994CJK COMPATIBILITY IDEOGRAPH-F995CJK COMPA" + + "TIBILITY IDEOGRAPH-F996CJK COMPATIBILITY IDEOGRAPH-F997CJK COMPATIBILITY" + + " IDEOGRAPH-F998CJK COMPATIBILITY IDEOGRAPH-F999CJK COMPATIBILITY IDEOGRA" + + "PH-F99ACJK COMPATIBILITY IDEOGRAPH-F99BCJK COMPATIBILITY IDEOGRAPH-F99CC" + + "JK COMPATIBILITY IDEOGRAPH-F99DCJK COMPATIBILITY IDEOGRAPH-F99ECJK COMPA" + + "TIBILITY IDEOGRAPH-F99FCJK COMPATIBILITY IDEOGRAPH-F9A0CJK COMPATIBILITY" + + " IDEOGRAPH-F9A1CJK COMPATIBILITY IDEOGRAPH-F9A2CJK COMPATIBILITY IDEOGRA" + + "PH-F9A3CJK COMPATIBILITY IDEOGRAPH-F9A4CJK COMPATIBILITY IDEOGRAPH-F9A5C" + + "JK COMPATIBILITY IDEOGRAPH-F9A6CJK COMPATIBILITY IDEOGRAPH-F9A7CJK COMPA" + + "TIBILITY IDEOGRAPH-F9A8CJK COMPATIBILITY IDEOGRAPH-F9A9CJK COMPATIBILITY" + + " IDEOGRAPH-F9AACJK COMPATIBILITY IDEOGRAPH-F9ABCJK COMPATIBILITY IDEOGRA" + + "PH-F9ACCJK COMPATIBILITY IDEOGRAPH-F9ADCJK COMPATIBILITY IDEOGRAPH-F9AEC" + + "JK COMPATIBILITY IDEOGRAPH-F9AFCJK COMPATIBILITY IDEOGRAPH-F9B0CJK COMPA" + + "TIBILITY IDEOGRAPH-F9B1CJK COMPATIBILITY IDEOGRAPH-F9B2CJK COMPATIBILITY" + + " IDEOGRAPH-F9B3CJK COMPATIBILITY IDEOGRAPH-F9B4CJK COMPATIBILITY IDEOGRA" + + "PH-F9B5CJK COMPATIBILITY IDEOGRAPH-F9B6CJK COMPATIBILITY IDEOGRAPH-F9B7C" + + "JK COMPATIBILITY IDEOGRAPH-F9B8CJK COMPATIBILITY IDEOGRAPH-F9B9CJK COMPA" + + "TIBILITY IDEOGRAPH-F9BACJK COMPATIBILITY IDEOGRAPH-F9BBCJK COMPATIBILITY" + + " IDEOGRAPH-F9BCCJK COMPATIBILITY IDEOGRAPH-F9BDCJK COMPATIBILITY IDEOGRA" + + "PH-F9BECJK COMPATIBILITY IDEOGRAPH-F9BFCJK COMPATIBILITY IDEOGRAPH-F9C0C" + + "JK COMPATIBILITY IDEOGRAPH-F9C1CJK COMPATIBILITY IDEOGRAPH-F9C2CJK COMPA" + + "TIBILITY IDEOGRAPH-F9C3CJK COMPATIBILITY IDEOGRAPH-F9C4CJK COMPATIBILITY" + + " IDEOGRAPH-F9C5CJK COMPATIBILITY IDEOGRAPH-F9C6CJK COMPATIBILITY IDEOGRA" + + "PH-F9C7CJK COMPATIBILITY IDEOGRAPH-F9C8CJK COMPATIBILITY IDEOGRAPH-F9C9C" + + "JK COMPATIBILITY IDEOGRAPH-F9CACJK COMPATIBILITY IDEOGRAPH-F9CBCJK COMPA" + + "TIBILITY IDEOGRAPH-F9CCCJK COMPATIBILITY IDEOGRAPH-F9CDCJK COMPATIBILITY" + + " IDEOGRAPH-F9CECJK COMPATIBILITY IDEOGRAPH-F9CFCJK COMPATIBILITY IDEOGRA" + + "PH-F9D0CJK COMPATIBILITY IDEOGRAPH-F9D1CJK COMPATIBILITY IDEOGRAPH-F9D2C" + + "JK COMPATIBILITY IDEOGRAPH-F9D3CJK COMPATIBILITY IDEOGRAPH-F9D4CJK COMPA" + + "TIBILITY IDEOGRAPH-F9D5CJK COMPATIBILITY IDEOGRAPH-F9D6CJK COMPATIBILITY" + + " IDEOGRAPH-F9D7CJK COMPATIBILITY IDEOGRAPH-F9D8CJK COMPATIBILITY IDEOGRA" + + "PH-F9D9CJK COMPATIBILITY IDEOGRAPH-F9DACJK COMPATIBILITY IDEOGRAPH-F9DBC" + + "JK COMPATIBILITY IDEOGRAPH-F9DCCJK COMPATIBILITY IDEOGRAPH-F9DDCJK COMPA" + + "TIBILITY IDEOGRAPH-F9DECJK COMPATIBILITY IDEOGRAPH-F9DFCJK COMPATIBILITY" + + " IDEOGRAPH-F9E0CJK COMPATIBILITY IDEOGRAPH-F9E1CJK COMPATIBILITY IDEOGRA" + + "PH-F9E2CJK COMPATIBILITY IDEOGRAPH-F9E3CJK COMPATIBILITY IDEOGRAPH-F9E4C" + + "JK COMPATIBILITY IDEOGRAPH-F9E5CJK COMPATIBILITY IDEOGRAPH-F9E6CJK COMPA" + + "TIBILITY IDEOGRAPH-F9E7CJK COMPATIBILITY IDEOGRAPH-F9E8CJK COMPATIBILITY" + + " IDEOGRAPH-F9E9CJK COMPATIBILITY IDEOGRAPH-F9EACJK COMPATIBILITY IDEOGRA" + + "PH-F9EBCJK COMPATIBILITY IDEOGRAPH-F9ECCJK COMPATIBILITY IDEOGRAPH-F9EDC") + ("" + + "JK COMPATIBILITY IDEOGRAPH-F9EECJK COMPATIBILITY IDEOGRAPH-F9EFCJK COMPA" + + "TIBILITY IDEOGRAPH-F9F0CJK COMPATIBILITY IDEOGRAPH-F9F1CJK COMPATIBILITY" + + " IDEOGRAPH-F9F2CJK COMPATIBILITY IDEOGRAPH-F9F3CJK COMPATIBILITY IDEOGRA" + + "PH-F9F4CJK COMPATIBILITY IDEOGRAPH-F9F5CJK COMPATIBILITY IDEOGRAPH-F9F6C" + + "JK COMPATIBILITY IDEOGRAPH-F9F7CJK COMPATIBILITY IDEOGRAPH-F9F8CJK COMPA" + + "TIBILITY IDEOGRAPH-F9F9CJK COMPATIBILITY IDEOGRAPH-F9FACJK COMPATIBILITY" + + " IDEOGRAPH-F9FBCJK COMPATIBILITY IDEOGRAPH-F9FCCJK COMPATIBILITY IDEOGRA" + + "PH-F9FDCJK COMPATIBILITY IDEOGRAPH-F9FECJK COMPATIBILITY IDEOGRAPH-F9FFC" + + "JK COMPATIBILITY IDEOGRAPH-FA00CJK COMPATIBILITY IDEOGRAPH-FA01CJK COMPA" + + "TIBILITY IDEOGRAPH-FA02CJK COMPATIBILITY IDEOGRAPH-FA03CJK COMPATIBILITY" + + " IDEOGRAPH-FA04CJK COMPATIBILITY IDEOGRAPH-FA05CJK COMPATIBILITY IDEOGRA" + + "PH-FA06CJK COMPATIBILITY IDEOGRAPH-FA07CJK COMPATIBILITY IDEOGRAPH-FA08C" + + "JK COMPATIBILITY IDEOGRAPH-FA09CJK COMPATIBILITY IDEOGRAPH-FA0ACJK COMPA" + + "TIBILITY IDEOGRAPH-FA0BCJK COMPATIBILITY IDEOGRAPH-FA0CCJK COMPATIBILITY" + + " IDEOGRAPH-FA0DCJK COMPATIBILITY IDEOGRAPH-FA0ECJK COMPATIBILITY IDEOGRA" + + "PH-FA0FCJK COMPATIBILITY IDEOGRAPH-FA10CJK COMPATIBILITY IDEOGRAPH-FA11C" + + "JK COMPATIBILITY IDEOGRAPH-FA12CJK COMPATIBILITY IDEOGRAPH-FA13CJK COMPA" + + "TIBILITY IDEOGRAPH-FA14CJK COMPATIBILITY IDEOGRAPH-FA15CJK COMPATIBILITY" + + " IDEOGRAPH-FA16CJK COMPATIBILITY IDEOGRAPH-FA17CJK COMPATIBILITY IDEOGRA" + + "PH-FA18CJK COMPATIBILITY IDEOGRAPH-FA19CJK COMPATIBILITY IDEOGRAPH-FA1AC" + + "JK COMPATIBILITY IDEOGRAPH-FA1BCJK COMPATIBILITY IDEOGRAPH-FA1CCJK COMPA" + + "TIBILITY IDEOGRAPH-FA1DCJK COMPATIBILITY IDEOGRAPH-FA1ECJK COMPATIBILITY" + + " IDEOGRAPH-FA1FCJK COMPATIBILITY IDEOGRAPH-FA20CJK COMPATIBILITY IDEOGRA" + + "PH-FA21CJK COMPATIBILITY IDEOGRAPH-FA22CJK COMPATIBILITY IDEOGRAPH-FA23C" + + "JK COMPATIBILITY IDEOGRAPH-FA24CJK COMPATIBILITY IDEOGRAPH-FA25CJK COMPA" + + "TIBILITY IDEOGRAPH-FA26CJK COMPATIBILITY IDEOGRAPH-FA27CJK COMPATIBILITY" + + " IDEOGRAPH-FA28CJK COMPATIBILITY IDEOGRAPH-FA29CJK COMPATIBILITY IDEOGRA" + + "PH-FA2ACJK COMPATIBILITY IDEOGRAPH-FA2BCJK COMPATIBILITY IDEOGRAPH-FA2CC" + + "JK COMPATIBILITY IDEOGRAPH-FA2DCJK COMPATIBILITY IDEOGRAPH-FA2ECJK COMPA" + + "TIBILITY IDEOGRAPH-FA2FCJK COMPATIBILITY IDEOGRAPH-FA30CJK COMPATIBILITY" + + " IDEOGRAPH-FA31CJK COMPATIBILITY IDEOGRAPH-FA32CJK COMPATIBILITY IDEOGRA" + + "PH-FA33CJK COMPATIBILITY IDEOGRAPH-FA34CJK COMPATIBILITY IDEOGRAPH-FA35C" + + "JK COMPATIBILITY IDEOGRAPH-FA36CJK COMPATIBILITY IDEOGRAPH-FA37CJK COMPA" + + "TIBILITY IDEOGRAPH-FA38CJK COMPATIBILITY IDEOGRAPH-FA39CJK COMPATIBILITY" + + " IDEOGRAPH-FA3ACJK COMPATIBILITY IDEOGRAPH-FA3BCJK COMPATIBILITY IDEOGRA" + + "PH-FA3CCJK COMPATIBILITY IDEOGRAPH-FA3DCJK COMPATIBILITY IDEOGRAPH-FA3EC" + + "JK COMPATIBILITY IDEOGRAPH-FA3FCJK COMPATIBILITY IDEOGRAPH-FA40CJK COMPA" + + "TIBILITY IDEOGRAPH-FA41CJK COMPATIBILITY IDEOGRAPH-FA42CJK COMPATIBILITY" + + " IDEOGRAPH-FA43CJK COMPATIBILITY IDEOGRAPH-FA44CJK COMPATIBILITY IDEOGRA" + + "PH-FA45CJK COMPATIBILITY IDEOGRAPH-FA46CJK COMPATIBILITY IDEOGRAPH-FA47C" + + "JK COMPATIBILITY IDEOGRAPH-FA48CJK COMPATIBILITY IDEOGRAPH-FA49CJK COMPA" + + "TIBILITY IDEOGRAPH-FA4ACJK COMPATIBILITY IDEOGRAPH-FA4BCJK COMPATIBILITY" + + " IDEOGRAPH-FA4CCJK COMPATIBILITY IDEOGRAPH-FA4DCJK COMPATIBILITY IDEOGRA" + + "PH-FA4ECJK COMPATIBILITY IDEOGRAPH-FA4FCJK COMPATIBILITY IDEOGRAPH-FA50C" + + "JK COMPATIBILITY IDEOGRAPH-FA51CJK COMPATIBILITY IDEOGRAPH-FA52CJK COMPA" + + "TIBILITY IDEOGRAPH-FA53CJK COMPATIBILITY IDEOGRAPH-FA54CJK COMPATIBILITY" + + " IDEOGRAPH-FA55CJK COMPATIBILITY IDEOGRAPH-FA56CJK COMPATIBILITY IDEOGRA" + + "PH-FA57CJK COMPATIBILITY IDEOGRAPH-FA58CJK COMPATIBILITY IDEOGRAPH-FA59C" + + "JK COMPATIBILITY IDEOGRAPH-FA5ACJK COMPATIBILITY IDEOGRAPH-FA5BCJK COMPA" + + "TIBILITY IDEOGRAPH-FA5CCJK COMPATIBILITY IDEOGRAPH-FA5DCJK COMPATIBILITY" + + " IDEOGRAPH-FA5ECJK COMPATIBILITY IDEOGRAPH-FA5FCJK COMPATIBILITY IDEOGRA" + + "PH-FA60CJK COMPATIBILITY IDEOGRAPH-FA61CJK COMPATIBILITY IDEOGRAPH-FA62C" + + "JK COMPATIBILITY IDEOGRAPH-FA63CJK COMPATIBILITY IDEOGRAPH-FA64CJK COMPA" + + "TIBILITY IDEOGRAPH-FA65CJK COMPATIBILITY IDEOGRAPH-FA66CJK COMPATIBILITY" + + " IDEOGRAPH-FA67CJK COMPATIBILITY IDEOGRAPH-FA68CJK COMPATIBILITY IDEOGRA" + + "PH-FA69CJK COMPATIBILITY IDEOGRAPH-FA6ACJK COMPATIBILITY IDEOGRAPH-FA6BC" + + "JK COMPATIBILITY IDEOGRAPH-FA6CCJK COMPATIBILITY IDEOGRAPH-FA6DCJK COMPA" + + "TIBILITY IDEOGRAPH-FA70CJK COMPATIBILITY IDEOGRAPH-FA71CJK COMPATIBILITY" + + " IDEOGRAPH-FA72CJK COMPATIBILITY IDEOGRAPH-FA73CJK COMPATIBILITY IDEOGRA" + + "PH-FA74CJK COMPATIBILITY IDEOGRAPH-FA75CJK COMPATIBILITY IDEOGRAPH-FA76C" + + "JK COMPATIBILITY IDEOGRAPH-FA77CJK COMPATIBILITY IDEOGRAPH-FA78CJK COMPA" + + "TIBILITY IDEOGRAPH-FA79CJK COMPATIBILITY IDEOGRAPH-FA7ACJK COMPATIBILITY" + + " IDEOGRAPH-FA7BCJK COMPATIBILITY IDEOGRAPH-FA7CCJK COMPATIBILITY IDEOGRA" + + "PH-FA7DCJK COMPATIBILITY IDEOGRAPH-FA7ECJK COMPATIBILITY IDEOGRAPH-FA7FC") + ("" + + "JK COMPATIBILITY IDEOGRAPH-FA80CJK COMPATIBILITY IDEOGRAPH-FA81CJK COMPA" + + "TIBILITY IDEOGRAPH-FA82CJK COMPATIBILITY IDEOGRAPH-FA83CJK COMPATIBILITY" + + " IDEOGRAPH-FA84CJK COMPATIBILITY IDEOGRAPH-FA85CJK COMPATIBILITY IDEOGRA" + + "PH-FA86CJK COMPATIBILITY IDEOGRAPH-FA87CJK COMPATIBILITY IDEOGRAPH-FA88C" + + "JK COMPATIBILITY IDEOGRAPH-FA89CJK COMPATIBILITY IDEOGRAPH-FA8ACJK COMPA" + + "TIBILITY IDEOGRAPH-FA8BCJK COMPATIBILITY IDEOGRAPH-FA8CCJK COMPATIBILITY" + + " IDEOGRAPH-FA8DCJK COMPATIBILITY IDEOGRAPH-FA8ECJK COMPATIBILITY IDEOGRA" + + "PH-FA8FCJK COMPATIBILITY IDEOGRAPH-FA90CJK COMPATIBILITY IDEOGRAPH-FA91C" + + "JK COMPATIBILITY IDEOGRAPH-FA92CJK COMPATIBILITY IDEOGRAPH-FA93CJK COMPA" + + "TIBILITY IDEOGRAPH-FA94CJK COMPATIBILITY IDEOGRAPH-FA95CJK COMPATIBILITY" + + " IDEOGRAPH-FA96CJK COMPATIBILITY IDEOGRAPH-FA97CJK COMPATIBILITY IDEOGRA" + + "PH-FA98CJK COMPATIBILITY IDEOGRAPH-FA99CJK COMPATIBILITY IDEOGRAPH-FA9AC" + + "JK COMPATIBILITY IDEOGRAPH-FA9BCJK COMPATIBILITY IDEOGRAPH-FA9CCJK COMPA" + + "TIBILITY IDEOGRAPH-FA9DCJK COMPATIBILITY IDEOGRAPH-FA9ECJK COMPATIBILITY" + + " IDEOGRAPH-FA9FCJK COMPATIBILITY IDEOGRAPH-FAA0CJK COMPATIBILITY IDEOGRA" + + "PH-FAA1CJK COMPATIBILITY IDEOGRAPH-FAA2CJK COMPATIBILITY IDEOGRAPH-FAA3C" + + "JK COMPATIBILITY IDEOGRAPH-FAA4CJK COMPATIBILITY IDEOGRAPH-FAA5CJK COMPA" + + "TIBILITY IDEOGRAPH-FAA6CJK COMPATIBILITY IDEOGRAPH-FAA7CJK COMPATIBILITY" + + " IDEOGRAPH-FAA8CJK COMPATIBILITY IDEOGRAPH-FAA9CJK COMPATIBILITY IDEOGRA" + + "PH-FAAACJK COMPATIBILITY IDEOGRAPH-FAABCJK COMPATIBILITY IDEOGRAPH-FAACC" + + "JK COMPATIBILITY IDEOGRAPH-FAADCJK COMPATIBILITY IDEOGRAPH-FAAECJK COMPA" + + "TIBILITY IDEOGRAPH-FAAFCJK COMPATIBILITY IDEOGRAPH-FAB0CJK COMPATIBILITY" + + " IDEOGRAPH-FAB1CJK COMPATIBILITY IDEOGRAPH-FAB2CJK COMPATIBILITY IDEOGRA" + + "PH-FAB3CJK COMPATIBILITY IDEOGRAPH-FAB4CJK COMPATIBILITY IDEOGRAPH-FAB5C" + + "JK COMPATIBILITY IDEOGRAPH-FAB6CJK COMPATIBILITY IDEOGRAPH-FAB7CJK COMPA" + + "TIBILITY IDEOGRAPH-FAB8CJK COMPATIBILITY IDEOGRAPH-FAB9CJK COMPATIBILITY" + + " IDEOGRAPH-FABACJK COMPATIBILITY IDEOGRAPH-FABBCJK COMPATIBILITY IDEOGRA" + + "PH-FABCCJK COMPATIBILITY IDEOGRAPH-FABDCJK COMPATIBILITY IDEOGRAPH-FABEC" + + "JK COMPATIBILITY IDEOGRAPH-FABFCJK COMPATIBILITY IDEOGRAPH-FAC0CJK COMPA" + + "TIBILITY IDEOGRAPH-FAC1CJK COMPATIBILITY IDEOGRAPH-FAC2CJK COMPATIBILITY" + + " IDEOGRAPH-FAC3CJK COMPATIBILITY IDEOGRAPH-FAC4CJK COMPATIBILITY IDEOGRA" + + "PH-FAC5CJK COMPATIBILITY IDEOGRAPH-FAC6CJK COMPATIBILITY IDEOGRAPH-FAC7C" + + "JK COMPATIBILITY IDEOGRAPH-FAC8CJK COMPATIBILITY IDEOGRAPH-FAC9CJK COMPA" + + "TIBILITY IDEOGRAPH-FACACJK COMPATIBILITY IDEOGRAPH-FACBCJK COMPATIBILITY" + + " IDEOGRAPH-FACCCJK COMPATIBILITY IDEOGRAPH-FACDCJK COMPATIBILITY IDEOGRA" + + "PH-FACECJK COMPATIBILITY IDEOGRAPH-FACFCJK COMPATIBILITY IDEOGRAPH-FAD0C" + + "JK COMPATIBILITY IDEOGRAPH-FAD1CJK COMPATIBILITY IDEOGRAPH-FAD2CJK COMPA" + + "TIBILITY IDEOGRAPH-FAD3CJK COMPATIBILITY IDEOGRAPH-FAD4CJK COMPATIBILITY" + + " IDEOGRAPH-FAD5CJK COMPATIBILITY IDEOGRAPH-FAD6CJK COMPATIBILITY IDEOGRA" + + "PH-FAD7CJK COMPATIBILITY IDEOGRAPH-FAD8CJK COMPATIBILITY IDEOGRAPH-FAD9L" + + "ATIN SMALL LIGATURE FFLATIN SMALL LIGATURE FILATIN SMALL LIGATURE FLLATI" + + "N SMALL LIGATURE FFILATIN SMALL LIGATURE FFLLATIN SMALL LIGATURE LONG S " + + "TLATIN SMALL LIGATURE STARMENIAN SMALL LIGATURE MEN NOWARMENIAN SMALL LI" + + "GATURE MEN ECHARMENIAN SMALL LIGATURE MEN INIARMENIAN SMALL LIGATURE VEW" + + " NOWARMENIAN SMALL LIGATURE MEN XEHHEBREW LETTER YOD WITH HIRIQHEBREW PO" + + "INT JUDEO-SPANISH VARIKAHEBREW LIGATURE YIDDISH YOD YOD PATAHHEBREW LETT" + + "ER ALTERNATIVE AYINHEBREW LETTER WIDE ALEFHEBREW LETTER WIDE DALETHEBREW" + + " LETTER WIDE HEHEBREW LETTER WIDE KAFHEBREW LETTER WIDE LAMEDHEBREW LETT" + + "ER WIDE FINAL MEMHEBREW LETTER WIDE RESHHEBREW LETTER WIDE TAVHEBREW LET" + + "TER ALTERNATIVE PLUS SIGNHEBREW LETTER SHIN WITH SHIN DOTHEBREW LETTER S" + + "HIN WITH SIN DOTHEBREW LETTER SHIN WITH DAGESH AND SHIN DOTHEBREW LETTER" + + " SHIN WITH DAGESH AND SIN DOTHEBREW LETTER ALEF WITH PATAHHEBREW LETTER " + + "ALEF WITH QAMATSHEBREW LETTER ALEF WITH MAPIQHEBREW LETTER BET WITH DAGE" + + "SHHEBREW LETTER GIMEL WITH DAGESHHEBREW LETTER DALET WITH DAGESHHEBREW L" + + "ETTER HE WITH MAPIQHEBREW LETTER VAV WITH DAGESHHEBREW LETTER ZAYIN WITH" + + " DAGESHHEBREW LETTER TET WITH DAGESHHEBREW LETTER YOD WITH DAGESHHEBREW " + + "LETTER FINAL KAF WITH DAGESHHEBREW LETTER KAF WITH DAGESHHEBREW LETTER L" + + "AMED WITH DAGESHHEBREW LETTER MEM WITH DAGESHHEBREW LETTER NUN WITH DAGE" + + "SHHEBREW LETTER SAMEKH WITH DAGESHHEBREW LETTER FINAL PE WITH DAGESHHEBR" + + "EW LETTER PE WITH DAGESHHEBREW LETTER TSADI WITH DAGESHHEBREW LETTER QOF" + + " WITH DAGESHHEBREW LETTER RESH WITH DAGESHHEBREW LETTER SHIN WITH DAGESH" + + "HEBREW LETTER TAV WITH DAGESHHEBREW LETTER VAV WITH HOLAMHEBREW LETTER B" + + "ET WITH RAFEHEBREW LETTER KAF WITH RAFEHEBREW LETTER PE WITH RAFEHEBREW " + + "LIGATURE ALEF LAMEDARABIC LETTER ALEF WASLA ISOLATED FORMARABIC LETTER A") + ("" + + "LEF WASLA FINAL FORMARABIC LETTER BEEH ISOLATED FORMARABIC LETTER BEEH F" + + "INAL FORMARABIC LETTER BEEH INITIAL FORMARABIC LETTER BEEH MEDIAL FORMAR" + + "ABIC LETTER PEH ISOLATED FORMARABIC LETTER PEH FINAL FORMARABIC LETTER P" + + "EH INITIAL FORMARABIC LETTER PEH MEDIAL FORMARABIC LETTER BEHEH ISOLATED" + + " FORMARABIC LETTER BEHEH FINAL FORMARABIC LETTER BEHEH INITIAL FORMARABI" + + "C LETTER BEHEH MEDIAL FORMARABIC LETTER TTEHEH ISOLATED FORMARABIC LETTE" + + "R TTEHEH FINAL FORMARABIC LETTER TTEHEH INITIAL FORMARABIC LETTER TTEHEH" + + " MEDIAL FORMARABIC LETTER TEHEH ISOLATED FORMARABIC LETTER TEHEH FINAL F" + + "ORMARABIC LETTER TEHEH INITIAL FORMARABIC LETTER TEHEH MEDIAL FORMARABIC" + + " LETTER TTEH ISOLATED FORMARABIC LETTER TTEH FINAL FORMARABIC LETTER TTE" + + "H INITIAL FORMARABIC LETTER TTEH MEDIAL FORMARABIC LETTER VEH ISOLATED F" + + "ORMARABIC LETTER VEH FINAL FORMARABIC LETTER VEH INITIAL FORMARABIC LETT" + + "ER VEH MEDIAL FORMARABIC LETTER PEHEH ISOLATED FORMARABIC LETTER PEHEH F" + + "INAL FORMARABIC LETTER PEHEH INITIAL FORMARABIC LETTER PEHEH MEDIAL FORM" + + "ARABIC LETTER DYEH ISOLATED FORMARABIC LETTER DYEH FINAL FORMARABIC LETT" + + "ER DYEH INITIAL FORMARABIC LETTER DYEH MEDIAL FORMARABIC LETTER NYEH ISO" + + "LATED FORMARABIC LETTER NYEH FINAL FORMARABIC LETTER NYEH INITIAL FORMAR" + + "ABIC LETTER NYEH MEDIAL FORMARABIC LETTER TCHEH ISOLATED FORMARABIC LETT" + + "ER TCHEH FINAL FORMARABIC LETTER TCHEH INITIAL FORMARABIC LETTER TCHEH M" + + "EDIAL FORMARABIC LETTER TCHEHEH ISOLATED FORMARABIC LETTER TCHEHEH FINAL" + + " FORMARABIC LETTER TCHEHEH INITIAL FORMARABIC LETTER TCHEHEH MEDIAL FORM" + + "ARABIC LETTER DDAHAL ISOLATED FORMARABIC LETTER DDAHAL FINAL FORMARABIC " + + "LETTER DAHAL ISOLATED FORMARABIC LETTER DAHAL FINAL FORMARABIC LETTER DU" + + "L ISOLATED FORMARABIC LETTER DUL FINAL FORMARABIC LETTER DDAL ISOLATED F" + + "ORMARABIC LETTER DDAL FINAL FORMARABIC LETTER JEH ISOLATED FORMARABIC LE" + + "TTER JEH FINAL FORMARABIC LETTER RREH ISOLATED FORMARABIC LETTER RREH FI" + + "NAL FORMARABIC LETTER KEHEH ISOLATED FORMARABIC LETTER KEHEH FINAL FORMA" + + "RABIC LETTER KEHEH INITIAL FORMARABIC LETTER KEHEH MEDIAL FORMARABIC LET" + + "TER GAF ISOLATED FORMARABIC LETTER GAF FINAL FORMARABIC LETTER GAF INITI" + + "AL FORMARABIC LETTER GAF MEDIAL FORMARABIC LETTER GUEH ISOLATED FORMARAB" + + "IC LETTER GUEH FINAL FORMARABIC LETTER GUEH INITIAL FORMARABIC LETTER GU" + + "EH MEDIAL FORMARABIC LETTER NGOEH ISOLATED FORMARABIC LETTER NGOEH FINAL" + + " FORMARABIC LETTER NGOEH INITIAL FORMARABIC LETTER NGOEH MEDIAL FORMARAB" + + "IC LETTER NOON GHUNNA ISOLATED FORMARABIC LETTER NOON GHUNNA FINAL FORMA" + + "RABIC LETTER RNOON ISOLATED FORMARABIC LETTER RNOON FINAL FORMARABIC LET" + + "TER RNOON INITIAL FORMARABIC LETTER RNOON MEDIAL FORMARABIC LETTER HEH W" + + "ITH YEH ABOVE ISOLATED FORMARABIC LETTER HEH WITH YEH ABOVE FINAL FORMAR" + + "ABIC LETTER HEH GOAL ISOLATED FORMARABIC LETTER HEH GOAL FINAL FORMARABI" + + "C LETTER HEH GOAL INITIAL FORMARABIC LETTER HEH GOAL MEDIAL FORMARABIC L" + + "ETTER HEH DOACHASHMEE ISOLATED FORMARABIC LETTER HEH DOACHASHMEE FINAL F" + + "ORMARABIC LETTER HEH DOACHASHMEE INITIAL FORMARABIC LETTER HEH DOACHASHM" + + "EE MEDIAL FORMARABIC LETTER YEH BARREE ISOLATED FORMARABIC LETTER YEH BA" + + "RREE FINAL FORMARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORMAR" + + "ABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORMARABIC SYMBOL DOT ABOV" + + "EARABIC SYMBOL DOT BELOWARABIC SYMBOL TWO DOTS ABOVEARABIC SYMBOL TWO DO" + + "TS BELOWARABIC SYMBOL THREE DOTS ABOVEARABIC SYMBOL THREE DOTS BELOWARAB" + + "IC SYMBOL THREE DOTS POINTING DOWNWARDS ABOVEARABIC SYMBOL THREE DOTS PO" + + "INTING DOWNWARDS BELOWARABIC SYMBOL FOUR DOTS ABOVEARABIC SYMBOL FOUR DO" + + "TS BELOWARABIC SYMBOL DOUBLE VERTICAL BAR BELOWARABIC SYMBOL TWO DOTS VE" + + "RTICALLY ABOVEARABIC SYMBOL TWO DOTS VERTICALLY BELOWARABIC SYMBOL RINGA" + + "RABIC SYMBOL SMALL TAH ABOVEARABIC SYMBOL SMALL TAH BELOWARABIC LETTER N" + + "G ISOLATED FORMARABIC LETTER NG FINAL FORMARABIC LETTER NG INITIAL FORMA" + + "RABIC LETTER NG MEDIAL FORMARABIC LETTER U ISOLATED FORMARABIC LETTER U " + + "FINAL FORMARABIC LETTER OE ISOLATED FORMARABIC LETTER OE FINAL FORMARABI" + + "C LETTER YU ISOLATED FORMARABIC LETTER YU FINAL FORMARABIC LETTER U WITH" + + " HAMZA ABOVE ISOLATED FORMARABIC LETTER VE ISOLATED FORMARABIC LETTER VE" + + " FINAL FORMARABIC LETTER KIRGHIZ OE ISOLATED FORMARABIC LETTER KIRGHIZ O" + + "E FINAL FORMARABIC LETTER KIRGHIZ YU ISOLATED FORMARABIC LETTER KIRGHIZ " + + "YU FINAL FORMARABIC LETTER E ISOLATED FORMARABIC LETTER E FINAL FORMARAB" + + "IC LETTER E INITIAL FORMARABIC LETTER E MEDIAL FORMARABIC LETTER UIGHUR " + + "KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORMARABIC LETTER UIGHUR KAZAKH KIRG" + + "HIZ ALEF MAKSURA MEDIAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AL" + + "EF ISOLATED FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FOR" + + "MARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORMARABIC LIGATU") + ("" + + "RE YEH WITH HAMZA ABOVE WITH AE FINAL FORMARABIC LIGATURE YEH WITH HAMZA" + + " ABOVE WITH WAW ISOLATED FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH W" + + "AW FINAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORMAR" + + "ABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORMARABIC LIGATURE YEH " + + "WITH HAMZA ABOVE WITH OE ISOLATED FORMARABIC LIGATURE YEH WITH HAMZA ABO" + + "VE WITH OE FINAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLAT" + + "ED FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORMARABIC LIG" + + "ATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORMARABIC LIGATURE YEH WITH " + + "HAMZA ABOVE WITH E FINAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E" + + " INITIAL FORMARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH AL" + + "EF MAKSURA ISOLATED FORMARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA AB" + + "OVE WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH " + + "HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORMARABIC LETTER FARSI YEH ISOLAT" + + "ED FORMARABIC LETTER FARSI YEH FINAL FORMARABIC LETTER FARSI YEH INITIAL" + + " FORMARABIC LETTER FARSI YEH MEDIAL FORMARABIC LIGATURE YEH WITH HAMZA A" + + "BOVE WITH JEEM ISOLATED FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HA" + + "H ISOLATED FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED F" + + "ORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORMA" + + "RABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORMARABIC LIGATUR" + + "E BEH WITH JEEM ISOLATED FORMARABIC LIGATURE BEH WITH HAH ISOLATED FORMA" + + "RABIC LIGATURE BEH WITH KHAH ISOLATED FORMARABIC LIGATURE BEH WITH MEEM " + + "ISOLATED FORMARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORMARABIC L" + + "IGATURE BEH WITH YEH ISOLATED FORMARABIC LIGATURE TEH WITH JEEM ISOLATED" + + " FORMARABIC LIGATURE TEH WITH HAH ISOLATED FORMARABIC LIGATURE TEH WITH " + + "KHAH ISOLATED FORMARABIC LIGATURE TEH WITH MEEM ISOLATED FORMARABIC LIGA" + + "TURE TEH WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE TEH WITH YEH ISO" + + "LATED FORMARABIC LIGATURE THEH WITH JEEM ISOLATED FORMARABIC LIGATURE TH" + + "EH WITH MEEM ISOLATED FORMARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATE" + + "D FORMARABIC LIGATURE THEH WITH YEH ISOLATED FORMARABIC LIGATURE JEEM WI" + + "TH HAH ISOLATED FORMARABIC LIGATURE JEEM WITH MEEM ISOLATED FORMARABIC L" + + "IGATURE HAH WITH JEEM ISOLATED FORMARABIC LIGATURE HAH WITH MEEM ISOLATE" + + "D FORMARABIC LIGATURE KHAH WITH JEEM ISOLATED FORMARABIC LIGATURE KHAH W" + + "ITH HAH ISOLATED FORMARABIC LIGATURE KHAH WITH MEEM ISOLATED FORMARABIC " + + "LIGATURE SEEN WITH JEEM ISOLATED FORMARABIC LIGATURE SEEN WITH HAH ISOLA" + + "TED FORMARABIC LIGATURE SEEN WITH KHAH ISOLATED FORMARABIC LIGATURE SEEN" + + " WITH MEEM ISOLATED FORMARABIC LIGATURE SAD WITH HAH ISOLATED FORMARABIC" + + " LIGATURE SAD WITH MEEM ISOLATED FORMARABIC LIGATURE DAD WITH JEEM ISOLA" + + "TED FORMARABIC LIGATURE DAD WITH HAH ISOLATED FORMARABIC LIGATURE DAD WI" + + "TH KHAH ISOLATED FORMARABIC LIGATURE DAD WITH MEEM ISOLATED FORMARABIC L" + + "IGATURE TAH WITH HAH ISOLATED FORMARABIC LIGATURE TAH WITH MEEM ISOLATED" + + " FORMARABIC LIGATURE ZAH WITH MEEM ISOLATED FORMARABIC LIGATURE AIN WITH" + + " JEEM ISOLATED FORMARABIC LIGATURE AIN WITH MEEM ISOLATED FORMARABIC LIG" + + "ATURE GHAIN WITH JEEM ISOLATED FORMARABIC LIGATURE GHAIN WITH MEEM ISOLA" + + "TED FORMARABIC LIGATURE FEH WITH JEEM ISOLATED FORMARABIC LIGATURE FEH W" + + "ITH HAH ISOLATED FORMARABIC LIGATURE FEH WITH KHAH ISOLATED FORMARABIC L" + + "IGATURE FEH WITH MEEM ISOLATED FORMARABIC LIGATURE FEH WITH ALEF MAKSURA" + + " ISOLATED FORMARABIC LIGATURE FEH WITH YEH ISOLATED FORMARABIC LIGATURE " + + "QAF WITH HAH ISOLATED FORMARABIC LIGATURE QAF WITH MEEM ISOLATED FORMARA" + + "BIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE QAF WITH" + + " YEH ISOLATED FORMARABIC LIGATURE KAF WITH ALEF ISOLATED FORMARABIC LIGA" + + "TURE KAF WITH JEEM ISOLATED FORMARABIC LIGATURE KAF WITH HAH ISOLATED FO" + + "RMARABIC LIGATURE KAF WITH KHAH ISOLATED FORMARABIC LIGATURE KAF WITH LA" + + "M ISOLATED FORMARABIC LIGATURE KAF WITH MEEM ISOLATED FORMARABIC LIGATUR" + + "E KAF WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE KAF WITH YEH ISOLAT" + + "ED FORMARABIC LIGATURE LAM WITH JEEM ISOLATED FORMARABIC LIGATURE LAM WI" + + "TH HAH ISOLATED FORMARABIC LIGATURE LAM WITH KHAH ISOLATED FORMARABIC LI" + + "GATURE LAM WITH MEEM ISOLATED FORMARABIC LIGATURE LAM WITH ALEF MAKSURA " + + "ISOLATED FORMARABIC LIGATURE LAM WITH YEH ISOLATED FORMARABIC LIGATURE M" + + "EEM WITH JEEM ISOLATED FORMARABIC LIGATURE MEEM WITH HAH ISOLATED FORMAR" + + "ABIC LIGATURE MEEM WITH KHAH ISOLATED FORMARABIC LIGATURE MEEM WITH MEEM" + + " ISOLATED FORMARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORMARABIC" + + " LIGATURE MEEM WITH YEH ISOLATED FORMARABIC LIGATURE NOON WITH JEEM ISOL" + + "ATED FORMARABIC LIGATURE NOON WITH HAH ISOLATED FORMARABIC LIGATURE NOON" + + " WITH KHAH ISOLATED FORMARABIC LIGATURE NOON WITH MEEM ISOLATED FORMARAB") + ("" + + "IC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE NOON WIT" + + "H YEH ISOLATED FORMARABIC LIGATURE HEH WITH JEEM ISOLATED FORMARABIC LIG" + + "ATURE HEH WITH MEEM ISOLATED FORMARABIC LIGATURE HEH WITH ALEF MAKSURA I" + + "SOLATED FORMARABIC LIGATURE HEH WITH YEH ISOLATED FORMARABIC LIGATURE YE" + + "H WITH JEEM ISOLATED FORMARABIC LIGATURE YEH WITH HAH ISOLATED FORMARABI" + + "C LIGATURE YEH WITH KHAH ISOLATED FORMARABIC LIGATURE YEH WITH MEEM ISOL" + + "ATED FORMARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORMARABIC LIGAT" + + "URE YEH WITH YEH ISOLATED FORMARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF" + + " ISOLATED FORMARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORMARA" + + "BIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORMARABIC LIGA" + + "TURE SHADDA WITH DAMMATAN ISOLATED FORMARABIC LIGATURE SHADDA WITH KASRA" + + "TAN ISOLATED FORMARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORMARABIC L" + + "IGATURE SHADDA WITH DAMMA ISOLATED FORMARABIC LIGATURE SHADDA WITH KASRA" + + " ISOLATED FORMARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM" + + "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORMARABIC LIGATURE " + + "YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORMARABIC LIGATURE YEH WITH HAMZA " + + "ABOVE WITH MEEM FINAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON" + + " FINAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL " + + "FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORMARABIC LIGAT" + + "URE BEH WITH REH FINAL FORMARABIC LIGATURE BEH WITH ZAIN FINAL FORMARABI" + + "C LIGATURE BEH WITH MEEM FINAL FORMARABIC LIGATURE BEH WITH NOON FINAL F" + + "ORMARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE BEH W" + + "ITH YEH FINAL FORMARABIC LIGATURE TEH WITH REH FINAL FORMARABIC LIGATURE" + + " TEH WITH ZAIN FINAL FORMARABIC LIGATURE TEH WITH MEEM FINAL FORMARABIC " + + "LIGATURE TEH WITH NOON FINAL FORMARABIC LIGATURE TEH WITH ALEF MAKSURA F" + + "INAL FORMARABIC LIGATURE TEH WITH YEH FINAL FORMARABIC LIGATURE THEH WIT" + + "H REH FINAL FORMARABIC LIGATURE THEH WITH ZAIN FINAL FORMARABIC LIGATURE" + + " THEH WITH MEEM FINAL FORMARABIC LIGATURE THEH WITH NOON FINAL FORMARABI" + + "C LIGATURE THEH WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE THEH WITH YE" + + "H FINAL FORMARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORMARABIC LIGAT" + + "URE FEH WITH YEH FINAL FORMARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL F" + + "ORMARABIC LIGATURE QAF WITH YEH FINAL FORMARABIC LIGATURE KAF WITH ALEF " + + "FINAL FORMARABIC LIGATURE KAF WITH LAM FINAL FORMARABIC LIGATURE KAF WIT" + + "H MEEM FINAL FORMARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORMARABIC " + + "LIGATURE KAF WITH YEH FINAL FORMARABIC LIGATURE LAM WITH MEEM FINAL FORM" + + "ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE LAM WITH" + + " YEH FINAL FORMARABIC LIGATURE MEEM WITH ALEF FINAL FORMARABIC LIGATURE " + + "MEEM WITH MEEM FINAL FORMARABIC LIGATURE NOON WITH REH FINAL FORMARABIC " + + "LIGATURE NOON WITH ZAIN FINAL FORMARABIC LIGATURE NOON WITH MEEM FINAL F" + + "ORMARABIC LIGATURE NOON WITH NOON FINAL FORMARABIC LIGATURE NOON WITH AL" + + "EF MAKSURA FINAL FORMARABIC LIGATURE NOON WITH YEH FINAL FORMARABIC LIGA" + + "TURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORMARABIC LIGATURE YEH WI" + + "TH REH FINAL FORMARABIC LIGATURE YEH WITH ZAIN FINAL FORMARABIC LIGATURE" + + " YEH WITH MEEM FINAL FORMARABIC LIGATURE YEH WITH NOON FINAL FORMARABIC " + + "LIGATURE YEH WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE YEH WITH YEH FI" + + "NAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORMARABI" + + "C LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORMARABIC LIGATURE YEH" + + " WITH HAMZA ABOVE WITH KHAH INITIAL FORMARABIC LIGATURE YEH WITH HAMZA A" + + "BOVE WITH MEEM INITIAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH" + + " INITIAL FORMARABIC LIGATURE BEH WITH JEEM INITIAL FORMARABIC LIGATURE B" + + "EH WITH HAH INITIAL FORMARABIC LIGATURE BEH WITH KHAH INITIAL FORMARABIC" + + " LIGATURE BEH WITH MEEM INITIAL FORMARABIC LIGATURE BEH WITH HEH INITIAL" + + " FORMARABIC LIGATURE TEH WITH JEEM INITIAL FORMARABIC LIGATURE TEH WITH " + + "HAH INITIAL FORMARABIC LIGATURE TEH WITH KHAH INITIAL FORMARABIC LIGATUR" + + "E TEH WITH MEEM INITIAL FORMARABIC LIGATURE TEH WITH HEH INITIAL FORMARA" + + "BIC LIGATURE THEH WITH MEEM INITIAL FORMARABIC LIGATURE JEEM WITH HAH IN" + + "ITIAL FORMARABIC LIGATURE JEEM WITH MEEM INITIAL FORMARABIC LIGATURE HAH" + + " WITH JEEM INITIAL FORMARABIC LIGATURE HAH WITH MEEM INITIAL FORMARABIC " + + "LIGATURE KHAH WITH JEEM INITIAL FORMARABIC LIGATURE KHAH WITH MEEM INITI" + + "AL FORMARABIC LIGATURE SEEN WITH JEEM INITIAL FORMARABIC LIGATURE SEEN W" + + "ITH HAH INITIAL FORMARABIC LIGATURE SEEN WITH KHAH INITIAL FORMARABIC LI" + + "GATURE SEEN WITH MEEM INITIAL FORMARABIC LIGATURE SAD WITH HAH INITIAL F" + + "ORMARABIC LIGATURE SAD WITH KHAH INITIAL FORMARABIC LIGATURE SAD WITH ME" + + "EM INITIAL FORMARABIC LIGATURE DAD WITH JEEM INITIAL FORMARABIC LIGATURE") + ("" + + " DAD WITH HAH INITIAL FORMARABIC LIGATURE DAD WITH KHAH INITIAL FORMARAB" + + "IC LIGATURE DAD WITH MEEM INITIAL FORMARABIC LIGATURE TAH WITH HAH INITI" + + "AL FORMARABIC LIGATURE ZAH WITH MEEM INITIAL FORMARABIC LIGATURE AIN WIT" + + "H JEEM INITIAL FORMARABIC LIGATURE AIN WITH MEEM INITIAL FORMARABIC LIGA" + + "TURE GHAIN WITH JEEM INITIAL FORMARABIC LIGATURE GHAIN WITH MEEM INITIAL" + + " FORMARABIC LIGATURE FEH WITH JEEM INITIAL FORMARABIC LIGATURE FEH WITH " + + "HAH INITIAL FORMARABIC LIGATURE FEH WITH KHAH INITIAL FORMARABIC LIGATUR" + + "E FEH WITH MEEM INITIAL FORMARABIC LIGATURE QAF WITH HAH INITIAL FORMARA" + + "BIC LIGATURE QAF WITH MEEM INITIAL FORMARABIC LIGATURE KAF WITH JEEM INI" + + "TIAL FORMARABIC LIGATURE KAF WITH HAH INITIAL FORMARABIC LIGATURE KAF WI" + + "TH KHAH INITIAL FORMARABIC LIGATURE KAF WITH LAM INITIAL FORMARABIC LIGA" + + "TURE KAF WITH MEEM INITIAL FORMARABIC LIGATURE LAM WITH JEEM INITIAL FOR" + + "MARABIC LIGATURE LAM WITH HAH INITIAL FORMARABIC LIGATURE LAM WITH KHAH " + + "INITIAL FORMARABIC LIGATURE LAM WITH MEEM INITIAL FORMARABIC LIGATURE LA" + + "M WITH HEH INITIAL FORMARABIC LIGATURE MEEM WITH JEEM INITIAL FORMARABIC" + + " LIGATURE MEEM WITH HAH INITIAL FORMARABIC LIGATURE MEEM WITH KHAH INITI" + + "AL FORMARABIC LIGATURE MEEM WITH MEEM INITIAL FORMARABIC LIGATURE NOON W" + + "ITH JEEM INITIAL FORMARABIC LIGATURE NOON WITH HAH INITIAL FORMARABIC LI" + + "GATURE NOON WITH KHAH INITIAL FORMARABIC LIGATURE NOON WITH MEEM INITIAL" + + " FORMARABIC LIGATURE NOON WITH HEH INITIAL FORMARABIC LIGATURE HEH WITH " + + "JEEM INITIAL FORMARABIC LIGATURE HEH WITH MEEM INITIAL FORMARABIC LIGATU" + + "RE HEH WITH SUPERSCRIPT ALEF INITIAL FORMARABIC LIGATURE YEH WITH JEEM I" + + "NITIAL FORMARABIC LIGATURE YEH WITH HAH INITIAL FORMARABIC LIGATURE YEH " + + "WITH KHAH INITIAL FORMARABIC LIGATURE YEH WITH MEEM INITIAL FORMARABIC L" + + "IGATURE YEH WITH HEH INITIAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WI" + + "TH MEEM MEDIAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL " + + "FORMARABIC LIGATURE BEH WITH MEEM MEDIAL FORMARABIC LIGATURE BEH WITH HE" + + "H MEDIAL FORMARABIC LIGATURE TEH WITH MEEM MEDIAL FORMARABIC LIGATURE TE" + + "H WITH HEH MEDIAL FORMARABIC LIGATURE THEH WITH MEEM MEDIAL FORMARABIC L" + + "IGATURE THEH WITH HEH MEDIAL FORMARABIC LIGATURE SEEN WITH MEEM MEDIAL F" + + "ORMARABIC LIGATURE SEEN WITH HEH MEDIAL FORMARABIC LIGATURE SHEEN WITH M" + + "EEM MEDIAL FORMARABIC LIGATURE SHEEN WITH HEH MEDIAL FORMARABIC LIGATURE" + + " KAF WITH LAM MEDIAL FORMARABIC LIGATURE KAF WITH MEEM MEDIAL FORMARABIC" + + " LIGATURE LAM WITH MEEM MEDIAL FORMARABIC LIGATURE NOON WITH MEEM MEDIAL" + + " FORMARABIC LIGATURE NOON WITH HEH MEDIAL FORMARABIC LIGATURE YEH WITH M" + + "EEM MEDIAL FORMARABIC LIGATURE YEH WITH HEH MEDIAL FORMARABIC LIGATURE S" + + "HADDA WITH FATHA MEDIAL FORMARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FOR" + + "MARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORMARABIC LIGATURE TAH WITH A" + + "LEF MAKSURA ISOLATED FORMARABIC LIGATURE TAH WITH YEH ISOLATED FORMARABI" + + "C LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE AIN WITH Y" + + "EH ISOLATED FORMARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORMARA" + + "BIC LIGATURE GHAIN WITH YEH ISOLATED FORMARABIC LIGATURE SEEN WITH ALEF " + + "MAKSURA ISOLATED FORMARABIC LIGATURE SEEN WITH YEH ISOLATED FORMARABIC L" + + "IGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE SHEEN WITH " + + "YEH ISOLATED FORMARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORMARAB" + + "IC LIGATURE HAH WITH YEH ISOLATED FORMARABIC LIGATURE JEEM WITH ALEF MAK" + + "SURA ISOLATED FORMARABIC LIGATURE JEEM WITH YEH ISOLATED FORMARABIC LIGA" + + "TURE KHAH WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE KHAH WITH YEH I" + + "SOLATED FORMARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORMARABIC LI" + + "GATURE SAD WITH YEH ISOLATED FORMARABIC LIGATURE DAD WITH ALEF MAKSURA I" + + "SOLATED FORMARABIC LIGATURE DAD WITH YEH ISOLATED FORMARABIC LIGATURE SH" + + "EEN WITH JEEM ISOLATED FORMARABIC LIGATURE SHEEN WITH HAH ISOLATED FORMA" + + "RABIC LIGATURE SHEEN WITH KHAH ISOLATED FORMARABIC LIGATURE SHEEN WITH M" + + "EEM ISOLATED FORMARABIC LIGATURE SHEEN WITH REH ISOLATED FORMARABIC LIGA" + + "TURE SEEN WITH REH ISOLATED FORMARABIC LIGATURE SAD WITH REH ISOLATED FO" + + "RMARABIC LIGATURE DAD WITH REH ISOLATED FORMARABIC LIGATURE TAH WITH ALE" + + "F MAKSURA FINAL FORMARABIC LIGATURE TAH WITH YEH FINAL FORMARABIC LIGATU" + + "RE AIN WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE AIN WITH YEH FINAL FO" + + "RMARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE GHAI" + + "N WITH YEH FINAL FORMARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORMAR" + + "ABIC LIGATURE SEEN WITH YEH FINAL FORMARABIC LIGATURE SHEEN WITH ALEF MA" + + "KSURA FINAL FORMARABIC LIGATURE SHEEN WITH YEH FINAL FORMARABIC LIGATURE" + + " HAH WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE HAH WITH YEH FINAL FORM" + + "ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE JEEM WI") + ("" + + "TH YEH FINAL FORMARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORMARABIC" + + " LIGATURE KHAH WITH YEH FINAL FORMARABIC LIGATURE SAD WITH ALEF MAKSURA " + + "FINAL FORMARABIC LIGATURE SAD WITH YEH FINAL FORMARABIC LIGATURE DAD WIT" + + "H ALEF MAKSURA FINAL FORMARABIC LIGATURE DAD WITH YEH FINAL FORMARABIC L" + + "IGATURE SHEEN WITH JEEM FINAL FORMARABIC LIGATURE SHEEN WITH HAH FINAL F" + + "ORMARABIC LIGATURE SHEEN WITH KHAH FINAL FORMARABIC LIGATURE SHEEN WITH " + + "MEEM FINAL FORMARABIC LIGATURE SHEEN WITH REH FINAL FORMARABIC LIGATURE " + + "SEEN WITH REH FINAL FORMARABIC LIGATURE SAD WITH REH FINAL FORMARABIC LI" + + "GATURE DAD WITH REH FINAL FORMARABIC LIGATURE SHEEN WITH JEEM INITIAL FO" + + "RMARABIC LIGATURE SHEEN WITH HAH INITIAL FORMARABIC LIGATURE SHEEN WITH " + + "KHAH INITIAL FORMARABIC LIGATURE SHEEN WITH MEEM INITIAL FORMARABIC LIGA" + + "TURE SEEN WITH HEH INITIAL FORMARABIC LIGATURE SHEEN WITH HEH INITIAL FO" + + "RMARABIC LIGATURE TAH WITH MEEM INITIAL FORMARABIC LIGATURE SEEN WITH JE" + + "EM MEDIAL FORMARABIC LIGATURE SEEN WITH HAH MEDIAL FORMARABIC LIGATURE S" + + "EEN WITH KHAH MEDIAL FORMARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORMARAB" + + "IC LIGATURE SHEEN WITH HAH MEDIAL FORMARABIC LIGATURE SHEEN WITH KHAH ME" + + "DIAL FORMARABIC LIGATURE TAH WITH MEEM MEDIAL FORMARABIC LIGATURE ZAH WI" + + "TH MEEM MEDIAL FORMARABIC LIGATURE ALEF WITH FATHATAN FINAL FORMARABIC L" + + "IGATURE ALEF WITH FATHATAN ISOLATED FORMORNATE LEFT PARENTHESISORNATE RI" + + "GHT PARENTHESISARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORMARABI" + + "C LIGATURE TEH WITH HAH WITH JEEM FINAL FORMARABIC LIGATURE TEH WITH HAH" + + " WITH JEEM INITIAL FORMARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FO" + + "RMARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORMARABIC LIGATURE TE" + + "H WITH MEEM WITH JEEM INITIAL FORMARABIC LIGATURE TEH WITH MEEM WITH HAH" + + " INITIAL FORMARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORMARABIC " + + "LIGATURE JEEM WITH MEEM WITH HAH FINAL FORMARABIC LIGATURE JEEM WITH MEE" + + "M WITH HAH INITIAL FORMARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM" + + "ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORMARABIC LIGATUR" + + "E SEEN WITH HAH WITH JEEM INITIAL FORMARABIC LIGATURE SEEN WITH JEEM WIT" + + "H HAH INITIAL FORMARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL" + + " FORMARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORMARABIC LIGATURE S" + + "EEN WITH MEEM WITH HAH INITIAL FORMARABIC LIGATURE SEEN WITH MEEM WITH J" + + "EEM INITIAL FORMARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORMARABI" + + "C LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORMARABIC LIGATURE SAD WITH" + + " HAH WITH HAH FINAL FORMARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FO" + + "RMARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORMARABIC LIGATURE SHEE" + + "N WITH HAH WITH MEEM FINAL FORMARABIC LIGATURE SHEEN WITH HAH WITH MEEM " + + "INITIAL FORMARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORMARABIC LI" + + "GATURE SHEEN WITH MEEM WITH KHAH FINAL FORMARABIC LIGATURE SHEEN WITH ME" + + "EM WITH KHAH INITIAL FORMARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL" + + " FORMARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORMARABIC LIGATU" + + "RE DAD WITH HAH WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE DAD WITH KHA" + + "H WITH MEEM FINAL FORMARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FO" + + "RMARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORMARABIC LIGATURE TAH W" + + "ITH MEEM WITH HAH INITIAL FORMARABIC LIGATURE TAH WITH MEEM WITH MEEM IN" + + "ITIAL FORMARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORMARABIC LIGATU" + + "RE AIN WITH JEEM WITH MEEM FINAL FORMARABIC LIGATURE AIN WITH MEEM WITH " + + "MEEM FINAL FORMARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORMARABI" + + "C LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE GHA" + + "IN WITH MEEM WITH MEEM FINAL FORMARABIC LIGATURE GHAIN WITH MEEM WITH YE" + + "H FINAL FORMARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM" + + "ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORMARABIC LIGATURE FEH WI" + + "TH KHAH WITH MEEM INITIAL FORMARABIC LIGATURE QAF WITH MEEM WITH HAH FIN" + + "AL FORMARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORMARABIC LIGATURE" + + " LAM WITH HAH WITH MEEM FINAL FORMARABIC LIGATURE LAM WITH HAH WITH YEH " + + "FINAL FORMARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORMARABI" + + "C LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORMARABIC LIGATURE LAM WITH " + + "JEEM WITH JEEM FINAL FORMARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL F" + + "ORMARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORMARABIC LIGATURE L" + + "AM WITH MEEM WITH HAH FINAL FORMARABIC LIGATURE LAM WITH MEEM WITH HAH I" + + "NITIAL FORMARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORMARABIC LI" + + "GATURE MEEM WITH HAH WITH MEEM INITIAL FORMARABIC LIGATURE MEEM WITH HAH" + + " WITH YEH FINAL FORMARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM" + + "ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORMARABIC LIGATURE MEE") + ("" + + "M WITH KHAH WITH JEEM INITIAL FORMARABIC LIGATURE MEEM WITH KHAH WITH ME" + + "EM INITIAL FORMARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORMARAB" + + "IC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORMARABIC LIGATURE HEH WITH" + + " MEEM WITH MEEM INITIAL FORMARABIC LIGATURE NOON WITH HAH WITH MEEM INIT" + + "IAL FORMARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORMARABIC" + + " LIGATURE NOON WITH JEEM WITH MEEM FINAL FORMARABIC LIGATURE NOON WITH J" + + "EEM WITH MEEM INITIAL FORMARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSU" + + "RA FINAL FORMARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORMARABIC LI" + + "GATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE YEH WI" + + "TH MEEM WITH MEEM FINAL FORMARABIC LIGATURE YEH WITH MEEM WITH MEEM INIT" + + "IAL FORMARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORMARABIC LIGATURE" + + " TEH WITH JEEM WITH YEH FINAL FORMARABIC LIGATURE TEH WITH JEEM WITH ALE" + + "F MAKSURA FINAL FORMARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORMARA" + + "BIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE T" + + "EH WITH MEEM WITH YEH FINAL FORMARABIC LIGATURE TEH WITH MEEM WITH ALEF " + + "MAKSURA FINAL FORMARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORMARAB" + + "IC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE JE" + + "EM WITH MEEM WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE SEEN WITH KHAH " + + "WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE SAD WITH HAH WITH YEH FINAL " + + "FORMARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORMARABIC LIGATURE DA" + + "D WITH HAH WITH YEH FINAL FORMARABIC LIGATURE LAM WITH JEEM WITH YEH FIN" + + "AL FORMARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORMARABIC LIGATURE " + + "YEH WITH HAH WITH YEH FINAL FORMARABIC LIGATURE YEH WITH JEEM WITH YEH F" + + "INAL FORMARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORMARABIC LIGATUR" + + "E MEEM WITH MEEM WITH YEH FINAL FORMARABIC LIGATURE QAF WITH MEEM WITH Y" + + "EH FINAL FORMARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORMARABIC LIG" + + "ATURE QAF WITH MEEM WITH HAH INITIAL FORMARABIC LIGATURE LAM WITH HAH WI" + + "TH MEEM INITIAL FORMARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORMARA" + + "BIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORMARABIC LIGATURE NOON WITH " + + "JEEM WITH HAH INITIAL FORMARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL " + + "FORMARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORMARABIC LIGATURE " + + "KAF WITH MEEM WITH MEEM FINAL FORMARABIC LIGATURE LAM WITH JEEM WITH MEE" + + "M FINAL FORMARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORMARABIC LIG" + + "ATURE JEEM WITH HAH WITH YEH FINAL FORMARABIC LIGATURE HAH WITH JEEM WIT" + + "H YEH FINAL FORMARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORMARABIC" + + " LIGATURE FEH WITH MEEM WITH YEH FINAL FORMARABIC LIGATURE BEH WITH HAH " + + "WITH YEH FINAL FORMARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORMA" + + "RABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORMARABIC LIGATURE SAD W" + + "ITH MEEM WITH MEEM INITIAL FORMARABIC LIGATURE SEEN WITH KHAH WITH YEH F" + + "INAL FORMARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORMARABIC LIGATU" + + "RE SALLA USED AS KORANIC STOP SIGN ISOLATED FORMARABIC LIGATURE QALA USE" + + "D AS KORANIC STOP SIGN ISOLATED FORMARABIC LIGATURE ALLAH ISOLATED FORMA" + + "RABIC LIGATURE AKBAR ISOLATED FORMARABIC LIGATURE MOHAMMAD ISOLATED FORM" + + "ARABIC LIGATURE SALAM ISOLATED FORMARABIC LIGATURE RASOUL ISOLATED FORMA" + + "RABIC LIGATURE ALAYHE ISOLATED FORMARABIC LIGATURE WASALLAM ISOLATED FOR" + + "MARABIC LIGATURE SALLA ISOLATED FORMARABIC LIGATURE SALLALLAHOU ALAYHE W" + + "ASALLAMARABIC LIGATURE JALLAJALALOUHOURIAL SIGNARABIC LIGATURE BISMILLAH" + + " AR-RAHMAN AR-RAHEEMVARIATION SELECTOR-1VARIATION SELECTOR-2VARIATION SE" + + "LECTOR-3VARIATION SELECTOR-4VARIATION SELECTOR-5VARIATION SELECTOR-6VARI" + + "ATION SELECTOR-7VARIATION SELECTOR-8VARIATION SELECTOR-9VARIATION SELECT" + + "OR-10VARIATION SELECTOR-11VARIATION SELECTOR-12VARIATION SELECTOR-13VARI" + + "ATION SELECTOR-14VARIATION SELECTOR-15VARIATION SELECTOR-16PRESENTATION " + + "FORM FOR VERTICAL COMMAPRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMAP" + + "RESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOPPRESENTATION FORM FOR" + + " VERTICAL COLONPRESENTATION FORM FOR VERTICAL SEMICOLONPRESENTATION FORM" + + " FOR VERTICAL EXCLAMATION MARKPRESENTATION FORM FOR VERTICAL QUESTION MA" + + "RKPRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKETPRESENTATI" + + "ON FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCETPRESENTATION FORM FOR" + + " VERTICAL HORIZONTAL ELLIPSISCOMBINING LIGATURE LEFT HALFCOMBINING LIGAT" + + "URE RIGHT HALFCOMBINING DOUBLE TILDE LEFT HALFCOMBINING DOUBLE TILDE RIG" + + "HT HALFCOMBINING MACRON LEFT HALFCOMBINING MACRON RIGHT HALFCOMBINING CO" + + "NJOINING MACRONCOMBINING LIGATURE LEFT HALF BELOWCOMBINING LIGATURE RIGH" + + "T HALF BELOWCOMBINING TILDE LEFT HALF BELOWCOMBINING TILDE RIGHT HALF BE" + + "LOWCOMBINING MACRON LEFT HALF BELOWCOMBINING MACRON RIGHT HALF BELOWCOMB") + ("" + + "INING CONJOINING MACRON BELOWCOMBINING CYRILLIC TITLO LEFT HALFCOMBINING" + + " CYRILLIC TITLO RIGHT HALFPRESENTATION FORM FOR VERTICAL TWO DOT LEADERP" + + "RESENTATION FORM FOR VERTICAL EM DASHPRESENTATION FORM FOR VERTICAL EN D" + + "ASHPRESENTATION FORM FOR VERTICAL LOW LINEPRESENTATION FORM FOR VERTICAL" + + " WAVY LOW LINEPRESENTATION FORM FOR VERTICAL LEFT PARENTHESISPRESENTATIO" + + "N FORM FOR VERTICAL RIGHT PARENTHESISPRESENTATION FORM FOR VERTICAL LEFT" + + " CURLY BRACKETPRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKETPRESENTA" + + "TION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKETPRESENTATION FORM FOR " + + "VERTICAL RIGHT TORTOISE SHELL BRACKETPRESENTATION FORM FOR VERTICAL LEFT" + + " BLACK LENTICULAR BRACKETPRESENTATION FORM FOR VERTICAL RIGHT BLACK LENT" + + "ICULAR BRACKETPRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKETPR" + + "ESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKETPRESENTATION FORM" + + " FOR VERTICAL LEFT ANGLE BRACKETPRESENTATION FORM FOR VERTICAL RIGHT ANG" + + "LE BRACKETPRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKETPRESENTATION" + + " FORM FOR VERTICAL RIGHT CORNER BRACKETPRESENTATION FORM FOR VERTICAL LE" + + "FT WHITE CORNER BRACKETPRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER" + + " BRACKETSESAME DOTWHITE SESAME DOTPRESENTATION FORM FOR VERTICAL LEFT SQ" + + "UARE BRACKETPRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKETDASHED OV" + + "ERLINECENTRELINE OVERLINEWAVY OVERLINEDOUBLE WAVY OVERLINEDASHED LOW LIN" + + "ECENTRELINE LOW LINEWAVY LOW LINESMALL COMMASMALL IDEOGRAPHIC COMMASMALL" + + " FULL STOPSMALL SEMICOLONSMALL COLONSMALL QUESTION MARKSMALL EXCLAMATION" + + " MARKSMALL EM DASHSMALL LEFT PARENTHESISSMALL RIGHT PARENTHESISSMALL LEF" + + "T CURLY BRACKETSMALL RIGHT CURLY BRACKETSMALL LEFT TORTOISE SHELL BRACKE" + + "TSMALL RIGHT TORTOISE SHELL BRACKETSMALL NUMBER SIGNSMALL AMPERSANDSMALL" + + " ASTERISKSMALL PLUS SIGNSMALL HYPHEN-MINUSSMALL LESS-THAN SIGNSMALL GREA" + + "TER-THAN SIGNSMALL EQUALS SIGNSMALL REVERSE SOLIDUSSMALL DOLLAR SIGNSMAL" + + "L PERCENT SIGNSMALL COMMERCIAL ATARABIC FATHATAN ISOLATED FORMARABIC TAT" + + "WEEL WITH FATHATAN ABOVEARABIC DAMMATAN ISOLATED FORMARABIC TAIL FRAGMEN" + + "TARABIC KASRATAN ISOLATED FORMARABIC FATHA ISOLATED FORMARABIC FATHA MED" + + "IAL FORMARABIC DAMMA ISOLATED FORMARABIC DAMMA MEDIAL FORMARABIC KASRA I" + + "SOLATED FORMARABIC KASRA MEDIAL FORMARABIC SHADDA ISOLATED FORMARABIC SH" + + "ADDA MEDIAL FORMARABIC SUKUN ISOLATED FORMARABIC SUKUN MEDIAL FORMARABIC" + + " LETTER HAMZA ISOLATED FORMARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED " + + "FORMARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORMARABIC LETTER ALEF WIT" + + "H HAMZA ABOVE ISOLATED FORMARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FOR" + + "MARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORMARABIC LETTER WAW WITH " + + "HAMZA ABOVE FINAL FORMARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORMA" + + "RABIC LETTER ALEF WITH HAMZA BELOW FINAL FORMARABIC LETTER YEH WITH HAMZ" + + "A ABOVE ISOLATED FORMARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORMARABIC" + + " LETTER YEH WITH HAMZA ABOVE INITIAL FORMARABIC LETTER YEH WITH HAMZA AB" + + "OVE MEDIAL FORMARABIC LETTER ALEF ISOLATED FORMARABIC LETTER ALEF FINAL " + + "FORMARABIC LETTER BEH ISOLATED FORMARABIC LETTER BEH FINAL FORMARABIC LE" + + "TTER BEH INITIAL FORMARABIC LETTER BEH MEDIAL FORMARABIC LETTER TEH MARB" + + "UTA ISOLATED FORMARABIC LETTER TEH MARBUTA FINAL FORMARABIC LETTER TEH I" + + "SOLATED FORMARABIC LETTER TEH FINAL FORMARABIC LETTER TEH INITIAL FORMAR" + + "ABIC LETTER TEH MEDIAL FORMARABIC LETTER THEH ISOLATED FORMARABIC LETTER" + + " THEH FINAL FORMARABIC LETTER THEH INITIAL FORMARABIC LETTER THEH MEDIAL" + + " FORMARABIC LETTER JEEM ISOLATED FORMARABIC LETTER JEEM FINAL FORMARABIC" + + " LETTER JEEM INITIAL FORMARABIC LETTER JEEM MEDIAL FORMARABIC LETTER HAH" + + " ISOLATED FORMARABIC LETTER HAH FINAL FORMARABIC LETTER HAH INITIAL FORM" + + "ARABIC LETTER HAH MEDIAL FORMARABIC LETTER KHAH ISOLATED FORMARABIC LETT" + + "ER KHAH FINAL FORMARABIC LETTER KHAH INITIAL FORMARABIC LETTER KHAH MEDI" + + "AL FORMARABIC LETTER DAL ISOLATED FORMARABIC LETTER DAL FINAL FORMARABIC" + + " LETTER THAL ISOLATED FORMARABIC LETTER THAL FINAL FORMARABIC LETTER REH" + + " ISOLATED FORMARABIC LETTER REH FINAL FORMARABIC LETTER ZAIN ISOLATED FO" + + "RMARABIC LETTER ZAIN FINAL FORMARABIC LETTER SEEN ISOLATED FORMARABIC LE" + + "TTER SEEN FINAL FORMARABIC LETTER SEEN INITIAL FORMARABIC LETTER SEEN ME" + + "DIAL FORMARABIC LETTER SHEEN ISOLATED FORMARABIC LETTER SHEEN FINAL FORM" + + "ARABIC LETTER SHEEN INITIAL FORMARABIC LETTER SHEEN MEDIAL FORMARABIC LE" + + "TTER SAD ISOLATED FORMARABIC LETTER SAD FINAL FORMARABIC LETTER SAD INIT" + + "IAL FORMARABIC LETTER SAD MEDIAL FORMARABIC LETTER DAD ISOLATED FORMARAB" + + "IC LETTER DAD FINAL FORMARABIC LETTER DAD INITIAL FORMARABIC LETTER DAD " + + "MEDIAL FORMARABIC LETTER TAH ISOLATED FORMARABIC LETTER TAH FINAL FORMAR" + + "ABIC LETTER TAH INITIAL FORMARABIC LETTER TAH MEDIAL FORMARABIC LETTER Z") + ("" + + "AH ISOLATED FORMARABIC LETTER ZAH FINAL FORMARABIC LETTER ZAH INITIAL FO" + + "RMARABIC LETTER ZAH MEDIAL FORMARABIC LETTER AIN ISOLATED FORMARABIC LET" + + "TER AIN FINAL FORMARABIC LETTER AIN INITIAL FORMARABIC LETTER AIN MEDIAL" + + " FORMARABIC LETTER GHAIN ISOLATED FORMARABIC LETTER GHAIN FINAL FORMARAB" + + "IC LETTER GHAIN INITIAL FORMARABIC LETTER GHAIN MEDIAL FORMARABIC LETTER" + + " FEH ISOLATED FORMARABIC LETTER FEH FINAL FORMARABIC LETTER FEH INITIAL " + + "FORMARABIC LETTER FEH MEDIAL FORMARABIC LETTER QAF ISOLATED FORMARABIC L" + + "ETTER QAF FINAL FORMARABIC LETTER QAF INITIAL FORMARABIC LETTER QAF MEDI" + + "AL FORMARABIC LETTER KAF ISOLATED FORMARABIC LETTER KAF FINAL FORMARABIC" + + " LETTER KAF INITIAL FORMARABIC LETTER KAF MEDIAL FORMARABIC LETTER LAM I" + + "SOLATED FORMARABIC LETTER LAM FINAL FORMARABIC LETTER LAM INITIAL FORMAR" + + "ABIC LETTER LAM MEDIAL FORMARABIC LETTER MEEM ISOLATED FORMARABIC LETTER" + + " MEEM FINAL FORMARABIC LETTER MEEM INITIAL FORMARABIC LETTER MEEM MEDIAL" + + " FORMARABIC LETTER NOON ISOLATED FORMARABIC LETTER NOON FINAL FORMARABIC" + + " LETTER NOON INITIAL FORMARABIC LETTER NOON MEDIAL FORMARABIC LETTER HEH" + + " ISOLATED FORMARABIC LETTER HEH FINAL FORMARABIC LETTER HEH INITIAL FORM" + + "ARABIC LETTER HEH MEDIAL FORMARABIC LETTER WAW ISOLATED FORMARABIC LETTE" + + "R WAW FINAL FORMARABIC LETTER ALEF MAKSURA ISOLATED FORMARABIC LETTER AL" + + "EF MAKSURA FINAL FORMARABIC LETTER YEH ISOLATED FORMARABIC LETTER YEH FI" + + "NAL FORMARABIC LETTER YEH INITIAL FORMARABIC LETTER YEH MEDIAL FORMARABI" + + "C LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORMARABIC LIGATURE L" + + "AM WITH ALEF WITH MADDA ABOVE FINAL FORMARABIC LIGATURE LAM WITH ALEF WI" + + "TH HAMZA ABOVE ISOLATED FORMARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABO" + + "VE FINAL FORMARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FOR" + + "MARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORMARABIC LIGATUR" + + "E LAM WITH ALEF ISOLATED FORMARABIC LIGATURE LAM WITH ALEF FINAL FORMZER" + + "O WIDTH NO-BREAK SPACEFULLWIDTH EXCLAMATION MARKFULLWIDTH QUOTATION MARK" + + "FULLWIDTH NUMBER SIGNFULLWIDTH DOLLAR SIGNFULLWIDTH PERCENT SIGNFULLWIDT" + + "H AMPERSANDFULLWIDTH APOSTROPHEFULLWIDTH LEFT PARENTHESISFULLWIDTH RIGHT" + + " PARENTHESISFULLWIDTH ASTERISKFULLWIDTH PLUS SIGNFULLWIDTH COMMAFULLWIDT" + + "H HYPHEN-MINUSFULLWIDTH FULL STOPFULLWIDTH SOLIDUSFULLWIDTH DIGIT ZEROFU" + + "LLWIDTH DIGIT ONEFULLWIDTH DIGIT TWOFULLWIDTH DIGIT THREEFULLWIDTH DIGIT" + + " FOURFULLWIDTH DIGIT FIVEFULLWIDTH DIGIT SIXFULLWIDTH DIGIT SEVENFULLWID" + + "TH DIGIT EIGHTFULLWIDTH DIGIT NINEFULLWIDTH COLONFULLWIDTH SEMICOLONFULL" + + "WIDTH LESS-THAN SIGNFULLWIDTH EQUALS SIGNFULLWIDTH GREATER-THAN SIGNFULL" + + "WIDTH QUESTION MARKFULLWIDTH COMMERCIAL ATFULLWIDTH LATIN CAPITAL LETTER" + + " AFULLWIDTH LATIN CAPITAL LETTER BFULLWIDTH LATIN CAPITAL LETTER CFULLWI" + + "DTH LATIN CAPITAL LETTER DFULLWIDTH LATIN CAPITAL LETTER EFULLWIDTH LATI" + + "N CAPITAL LETTER FFULLWIDTH LATIN CAPITAL LETTER GFULLWIDTH LATIN CAPITA" + + "L LETTER HFULLWIDTH LATIN CAPITAL LETTER IFULLWIDTH LATIN CAPITAL LETTER" + + " JFULLWIDTH LATIN CAPITAL LETTER KFULLWIDTH LATIN CAPITAL LETTER LFULLWI" + + "DTH LATIN CAPITAL LETTER MFULLWIDTH LATIN CAPITAL LETTER NFULLWIDTH LATI" + + "N CAPITAL LETTER OFULLWIDTH LATIN CAPITAL LETTER PFULLWIDTH LATIN CAPITA" + + "L LETTER QFULLWIDTH LATIN CAPITAL LETTER RFULLWIDTH LATIN CAPITAL LETTER" + + " SFULLWIDTH LATIN CAPITAL LETTER TFULLWIDTH LATIN CAPITAL LETTER UFULLWI" + + "DTH LATIN CAPITAL LETTER VFULLWIDTH LATIN CAPITAL LETTER WFULLWIDTH LATI" + + "N CAPITAL LETTER XFULLWIDTH LATIN CAPITAL LETTER YFULLWIDTH LATIN CAPITA" + + "L LETTER ZFULLWIDTH LEFT SQUARE BRACKETFULLWIDTH REVERSE SOLIDUSFULLWIDT" + + "H RIGHT SQUARE BRACKETFULLWIDTH CIRCUMFLEX ACCENTFULLWIDTH LOW LINEFULLW" + + "IDTH GRAVE ACCENTFULLWIDTH LATIN SMALL LETTER AFULLWIDTH LATIN SMALL LET" + + "TER BFULLWIDTH LATIN SMALL LETTER CFULLWIDTH LATIN SMALL LETTER DFULLWID" + + "TH LATIN SMALL LETTER EFULLWIDTH LATIN SMALL LETTER FFULLWIDTH LATIN SMA" + + "LL LETTER GFULLWIDTH LATIN SMALL LETTER HFULLWIDTH LATIN SMALL LETTER IF" + + "ULLWIDTH LATIN SMALL LETTER JFULLWIDTH LATIN SMALL LETTER KFULLWIDTH LAT" + + "IN SMALL LETTER LFULLWIDTH LATIN SMALL LETTER MFULLWIDTH LATIN SMALL LET" + + "TER NFULLWIDTH LATIN SMALL LETTER OFULLWIDTH LATIN SMALL LETTER PFULLWID" + + "TH LATIN SMALL LETTER QFULLWIDTH LATIN SMALL LETTER RFULLWIDTH LATIN SMA" + + "LL LETTER SFULLWIDTH LATIN SMALL LETTER TFULLWIDTH LATIN SMALL LETTER UF" + + "ULLWIDTH LATIN SMALL LETTER VFULLWIDTH LATIN SMALL LETTER WFULLWIDTH LAT" + + "IN SMALL LETTER XFULLWIDTH LATIN SMALL LETTER YFULLWIDTH LATIN SMALL LET" + + "TER ZFULLWIDTH LEFT CURLY BRACKETFULLWIDTH VERTICAL LINEFULLWIDTH RIGHT " + + "CURLY BRACKETFULLWIDTH TILDEFULLWIDTH LEFT WHITE PARENTHESISFULLWIDTH RI" + + "GHT WHITE PARENTHESISHALFWIDTH IDEOGRAPHIC FULL STOPHALFWIDTH LEFT CORNE" + + "R BRACKETHALFWIDTH RIGHT CORNER BRACKETHALFWIDTH IDEOGRAPHIC COMMAHALFWI") + ("" + + "DTH KATAKANA MIDDLE DOTHALFWIDTH KATAKANA LETTER WOHALFWIDTH KATAKANA LE" + + "TTER SMALL AHALFWIDTH KATAKANA LETTER SMALL IHALFWIDTH KATAKANA LETTER S" + + "MALL UHALFWIDTH KATAKANA LETTER SMALL EHALFWIDTH KATAKANA LETTER SMALL O" + + "HALFWIDTH KATAKANA LETTER SMALL YAHALFWIDTH KATAKANA LETTER SMALL YUHALF" + + "WIDTH KATAKANA LETTER SMALL YOHALFWIDTH KATAKANA LETTER SMALL TUHALFWIDT" + + "H KATAKANA-HIRAGANA PROLONGED SOUND MARKHALFWIDTH KATAKANA LETTER AHALFW" + + "IDTH KATAKANA LETTER IHALFWIDTH KATAKANA LETTER UHALFWIDTH KATAKANA LETT" + + "ER EHALFWIDTH KATAKANA LETTER OHALFWIDTH KATAKANA LETTER KAHALFWIDTH KAT" + + "AKANA LETTER KIHALFWIDTH KATAKANA LETTER KUHALFWIDTH KATAKANA LETTER KEH" + + "ALFWIDTH KATAKANA LETTER KOHALFWIDTH KATAKANA LETTER SAHALFWIDTH KATAKAN" + + "A LETTER SIHALFWIDTH KATAKANA LETTER SUHALFWIDTH KATAKANA LETTER SEHALFW" + + "IDTH KATAKANA LETTER SOHALFWIDTH KATAKANA LETTER TAHALFWIDTH KATAKANA LE" + + "TTER TIHALFWIDTH KATAKANA LETTER TUHALFWIDTH KATAKANA LETTER TEHALFWIDTH" + + " KATAKANA LETTER TOHALFWIDTH KATAKANA LETTER NAHALFWIDTH KATAKANA LETTER" + + " NIHALFWIDTH KATAKANA LETTER NUHALFWIDTH KATAKANA LETTER NEHALFWIDTH KAT" + + "AKANA LETTER NOHALFWIDTH KATAKANA LETTER HAHALFWIDTH KATAKANA LETTER HIH" + + "ALFWIDTH KATAKANA LETTER HUHALFWIDTH KATAKANA LETTER HEHALFWIDTH KATAKAN" + + "A LETTER HOHALFWIDTH KATAKANA LETTER MAHALFWIDTH KATAKANA LETTER MIHALFW" + + "IDTH KATAKANA LETTER MUHALFWIDTH KATAKANA LETTER MEHALFWIDTH KATAKANA LE" + + "TTER MOHALFWIDTH KATAKANA LETTER YAHALFWIDTH KATAKANA LETTER YUHALFWIDTH" + + " KATAKANA LETTER YOHALFWIDTH KATAKANA LETTER RAHALFWIDTH KATAKANA LETTER" + + " RIHALFWIDTH KATAKANA LETTER RUHALFWIDTH KATAKANA LETTER REHALFWIDTH KAT" + + "AKANA LETTER ROHALFWIDTH KATAKANA LETTER WAHALFWIDTH KATAKANA LETTER NHA" + + "LFWIDTH KATAKANA VOICED SOUND MARKHALFWIDTH KATAKANA SEMI-VOICED SOUND M" + + "ARKHALFWIDTH HANGUL FILLERHALFWIDTH HANGUL LETTER KIYEOKHALFWIDTH HANGUL" + + " LETTER SSANGKIYEOKHALFWIDTH HANGUL LETTER KIYEOK-SIOSHALFWIDTH HANGUL L" + + "ETTER NIEUNHALFWIDTH HANGUL LETTER NIEUN-CIEUCHALFWIDTH HANGUL LETTER NI" + + "EUN-HIEUHHALFWIDTH HANGUL LETTER TIKEUTHALFWIDTH HANGUL LETTER SSANGTIKE" + + "UTHALFWIDTH HANGUL LETTER RIEULHALFWIDTH HANGUL LETTER RIEUL-KIYEOKHALFW" + + "IDTH HANGUL LETTER RIEUL-MIEUMHALFWIDTH HANGUL LETTER RIEUL-PIEUPHALFWID" + + "TH HANGUL LETTER RIEUL-SIOSHALFWIDTH HANGUL LETTER RIEUL-THIEUTHHALFWIDT" + + "H HANGUL LETTER RIEUL-PHIEUPHHALFWIDTH HANGUL LETTER RIEUL-HIEUHHALFWIDT" + + "H HANGUL LETTER MIEUMHALFWIDTH HANGUL LETTER PIEUPHALFWIDTH HANGUL LETTE" + + "R SSANGPIEUPHALFWIDTH HANGUL LETTER PIEUP-SIOSHALFWIDTH HANGUL LETTER SI" + + "OSHALFWIDTH HANGUL LETTER SSANGSIOSHALFWIDTH HANGUL LETTER IEUNGHALFWIDT" + + "H HANGUL LETTER CIEUCHALFWIDTH HANGUL LETTER SSANGCIEUCHALFWIDTH HANGUL " + + "LETTER CHIEUCHHALFWIDTH HANGUL LETTER KHIEUKHHALFWIDTH HANGUL LETTER THI" + + "EUTHHALFWIDTH HANGUL LETTER PHIEUPHHALFWIDTH HANGUL LETTER HIEUHHALFWIDT" + + "H HANGUL LETTER AHALFWIDTH HANGUL LETTER AEHALFWIDTH HANGUL LETTER YAHAL" + + "FWIDTH HANGUL LETTER YAEHALFWIDTH HANGUL LETTER EOHALFWIDTH HANGUL LETTE" + + "R EHALFWIDTH HANGUL LETTER YEOHALFWIDTH HANGUL LETTER YEHALFWIDTH HANGUL" + + " LETTER OHALFWIDTH HANGUL LETTER WAHALFWIDTH HANGUL LETTER WAEHALFWIDTH " + + "HANGUL LETTER OEHALFWIDTH HANGUL LETTER YOHALFWIDTH HANGUL LETTER UHALFW" + + "IDTH HANGUL LETTER WEOHALFWIDTH HANGUL LETTER WEHALFWIDTH HANGUL LETTER " + + "WIHALFWIDTH HANGUL LETTER YUHALFWIDTH HANGUL LETTER EUHALFWIDTH HANGUL L" + + "ETTER YIHALFWIDTH HANGUL LETTER IFULLWIDTH CENT SIGNFULLWIDTH POUND SIGN" + + "FULLWIDTH NOT SIGNFULLWIDTH MACRONFULLWIDTH BROKEN BARFULLWIDTH YEN SIGN" + + "FULLWIDTH WON SIGNHALFWIDTH FORMS LIGHT VERTICALHALFWIDTH LEFTWARDS ARRO" + + "WHALFWIDTH UPWARDS ARROWHALFWIDTH RIGHTWARDS ARROWHALFWIDTH DOWNWARDS AR" + + "ROWHALFWIDTH BLACK SQUAREHALFWIDTH WHITE CIRCLEINTERLINEAR ANNOTATION AN" + + "CHORINTERLINEAR ANNOTATION SEPARATORINTERLINEAR ANNOTATION TERMINATOROBJ" + + "ECT REPLACEMENT CHARACTERREPLACEMENT CHARACTERLINEAR B SYLLABLE B008 ALI" + + "NEAR B SYLLABLE B038 ELINEAR B SYLLABLE B028 ILINEAR B SYLLABLE B061 OLI" + + "NEAR B SYLLABLE B010 ULINEAR B SYLLABLE B001 DALINEAR B SYLLABLE B045 DE" + + "LINEAR B SYLLABLE B007 DILINEAR B SYLLABLE B014 DOLINEAR B SYLLABLE B051" + + " DULINEAR B SYLLABLE B057 JALINEAR B SYLLABLE B046 JELINEAR B SYLLABLE B" + + "036 JOLINEAR B SYLLABLE B065 JULINEAR B SYLLABLE B077 KALINEAR B SYLLABL" + + "E B044 KELINEAR B SYLLABLE B067 KILINEAR B SYLLABLE B070 KOLINEAR B SYLL" + + "ABLE B081 KULINEAR B SYLLABLE B080 MALINEAR B SYLLABLE B013 MELINEAR B S" + + "YLLABLE B073 MILINEAR B SYLLABLE B015 MOLINEAR B SYLLABLE B023 MULINEAR " + + "B SYLLABLE B006 NALINEAR B SYLLABLE B024 NELINEAR B SYLLABLE B030 NILINE" + + "AR B SYLLABLE B052 NOLINEAR B SYLLABLE B055 NULINEAR B SYLLABLE B003 PAL" + + "INEAR B SYLLABLE B072 PELINEAR B SYLLABLE B039 PILINEAR B SYLLABLE B011 " + + "POLINEAR B SYLLABLE B050 PULINEAR B SYLLABLE B016 QALINEAR B SYLLABLE B0") + ("" + + "78 QELINEAR B SYLLABLE B021 QILINEAR B SYLLABLE B032 QOLINEAR B SYLLABLE" + + " B060 RALINEAR B SYLLABLE B027 RELINEAR B SYLLABLE B053 RILINEAR B SYLLA" + + "BLE B002 ROLINEAR B SYLLABLE B026 RULINEAR B SYLLABLE B031 SALINEAR B SY" + + "LLABLE B009 SELINEAR B SYLLABLE B041 SILINEAR B SYLLABLE B012 SOLINEAR B" + + " SYLLABLE B058 SULINEAR B SYLLABLE B059 TALINEAR B SYLLABLE B004 TELINEA" + + "R B SYLLABLE B037 TILINEAR B SYLLABLE B005 TOLINEAR B SYLLABLE B069 TULI" + + "NEAR B SYLLABLE B054 WALINEAR B SYLLABLE B075 WELINEAR B SYLLABLE B040 W" + + "ILINEAR B SYLLABLE B042 WOLINEAR B SYLLABLE B017 ZALINEAR B SYLLABLE B07" + + "4 ZELINEAR B SYLLABLE B020 ZOLINEAR B SYLLABLE B025 A2LINEAR B SYLLABLE " + + "B043 A3LINEAR B SYLLABLE B085 AULINEAR B SYLLABLE B071 DWELINEAR B SYLLA" + + "BLE B090 DWOLINEAR B SYLLABLE B048 NWALINEAR B SYLLABLE B029 PU2LINEAR B" + + " SYLLABLE B062 PTELINEAR B SYLLABLE B076 RA2LINEAR B SYLLABLE B033 RA3LI" + + "NEAR B SYLLABLE B068 RO2LINEAR B SYLLABLE B066 TA2LINEAR B SYLLABLE B087" + + " TWELINEAR B SYLLABLE B091 TWOLINEAR B SYMBOL B018LINEAR B SYMBOL B019LI" + + "NEAR B SYMBOL B022LINEAR B SYMBOL B034LINEAR B SYMBOL B047LINEAR B SYMBO" + + "L B049LINEAR B SYMBOL B056LINEAR B SYMBOL B063LINEAR B SYMBOL B064LINEAR" + + " B SYMBOL B079LINEAR B SYMBOL B082LINEAR B SYMBOL B083LINEAR B SYMBOL B0" + + "86LINEAR B SYMBOL B089LINEAR B IDEOGRAM B100 MANLINEAR B IDEOGRAM B102 W" + + "OMANLINEAR B IDEOGRAM B104 DEERLINEAR B IDEOGRAM B105 EQUIDLINEAR B IDEO" + + "GRAM B105F MARELINEAR B IDEOGRAM B105M STALLIONLINEAR B IDEOGRAM B106F E" + + "WELINEAR B IDEOGRAM B106M RAMLINEAR B IDEOGRAM B107F SHE-GOATLINEAR B ID" + + "EOGRAM B107M HE-GOATLINEAR B IDEOGRAM B108F SOWLINEAR B IDEOGRAM B108M B" + + "OARLINEAR B IDEOGRAM B109F COWLINEAR B IDEOGRAM B109M BULLLINEAR B IDEOG" + + "RAM B120 WHEATLINEAR B IDEOGRAM B121 BARLEYLINEAR B IDEOGRAM B122 OLIVEL" + + "INEAR B IDEOGRAM B123 SPICELINEAR B IDEOGRAM B125 CYPERUSLINEAR B MONOGR" + + "AM B127 KAPOLINEAR B MONOGRAM B128 KANAKOLINEAR B IDEOGRAM B130 OILLINEA" + + "R B IDEOGRAM B131 WINELINEAR B IDEOGRAM B132LINEAR B MONOGRAM B133 AREPA" + + "LINEAR B MONOGRAM B135 MERILINEAR B IDEOGRAM B140 BRONZELINEAR B IDEOGRA" + + "M B141 GOLDLINEAR B IDEOGRAM B142LINEAR B IDEOGRAM B145 WOOLLINEAR B IDE" + + "OGRAM B146LINEAR B IDEOGRAM B150LINEAR B IDEOGRAM B151 HORNLINEAR B IDEO" + + "GRAM B152LINEAR B IDEOGRAM B153LINEAR B IDEOGRAM B154LINEAR B MONOGRAM B" + + "156 TURO2LINEAR B IDEOGRAM B157LINEAR B IDEOGRAM B158LINEAR B IDEOGRAM B" + + "159 CLOTHLINEAR B IDEOGRAM B160LINEAR B IDEOGRAM B161LINEAR B IDEOGRAM B" + + "162 GARMENTLINEAR B IDEOGRAM B163 ARMOURLINEAR B IDEOGRAM B164LINEAR B I" + + "DEOGRAM B165LINEAR B IDEOGRAM B166LINEAR B IDEOGRAM B167LINEAR B IDEOGRA" + + "M B168LINEAR B IDEOGRAM B169LINEAR B IDEOGRAM B170LINEAR B IDEOGRAM B171" + + "LINEAR B IDEOGRAM B172LINEAR B IDEOGRAM B173 MONTHLINEAR B IDEOGRAM B174" + + "LINEAR B IDEOGRAM B176 TREELINEAR B IDEOGRAM B177LINEAR B IDEOGRAM B178L" + + "INEAR B IDEOGRAM B179LINEAR B IDEOGRAM B180LINEAR B IDEOGRAM B181LINEAR " + + "B IDEOGRAM B182LINEAR B IDEOGRAM B183LINEAR B IDEOGRAM B184LINEAR B IDEO" + + "GRAM B185LINEAR B IDEOGRAM B189LINEAR B IDEOGRAM B190LINEAR B IDEOGRAM B" + + "191 HELMETLINEAR B IDEOGRAM B220 FOOTSTOOLLINEAR B IDEOGRAM B225 BATHTUB" + + "LINEAR B IDEOGRAM B230 SPEARLINEAR B IDEOGRAM B231 ARROWLINEAR B IDEOGRA" + + "M B232LINEAR B IDEOGRAM B233 SWORDLINEAR B IDEOGRAM B234LINEAR B IDEOGRA" + + "M B236LINEAR B IDEOGRAM B240 WHEELED CHARIOTLINEAR B IDEOGRAM B241 CHARI" + + "OTLINEAR B IDEOGRAM B242 CHARIOT FRAMELINEAR B IDEOGRAM B243 WHEELLINEAR" + + " B IDEOGRAM B245LINEAR B IDEOGRAM B246LINEAR B MONOGRAM B247 DIPTELINEAR" + + " B IDEOGRAM B248LINEAR B IDEOGRAM B249LINEAR B IDEOGRAM B251LINEAR B IDE" + + "OGRAM B252LINEAR B IDEOGRAM B253LINEAR B IDEOGRAM B254 DARTLINEAR B IDEO" + + "GRAM B255LINEAR B IDEOGRAM B256LINEAR B IDEOGRAM B257LINEAR B IDEOGRAM B" + + "258LINEAR B IDEOGRAM B259LINEAR B IDEOGRAM VESSEL B155LINEAR B IDEOGRAM " + + "VESSEL B200LINEAR B IDEOGRAM VESSEL B201LINEAR B IDEOGRAM VESSEL B202LIN" + + "EAR B IDEOGRAM VESSEL B203LINEAR B IDEOGRAM VESSEL B204LINEAR B IDEOGRAM" + + " VESSEL B205LINEAR B IDEOGRAM VESSEL B206LINEAR B IDEOGRAM VESSEL B207LI" + + "NEAR B IDEOGRAM VESSEL B208LINEAR B IDEOGRAM VESSEL B209LINEAR B IDEOGRA" + + "M VESSEL B210LINEAR B IDEOGRAM VESSEL B211LINEAR B IDEOGRAM VESSEL B212L" + + "INEAR B IDEOGRAM VESSEL B213LINEAR B IDEOGRAM VESSEL B214LINEAR B IDEOGR" + + "AM VESSEL B215LINEAR B IDEOGRAM VESSEL B216LINEAR B IDEOGRAM VESSEL B217" + + "LINEAR B IDEOGRAM VESSEL B218LINEAR B IDEOGRAM VESSEL B219LINEAR B IDEOG" + + "RAM VESSEL B221LINEAR B IDEOGRAM VESSEL B222LINEAR B IDEOGRAM VESSEL B22" + + "6LINEAR B IDEOGRAM VESSEL B227LINEAR B IDEOGRAM VESSEL B228LINEAR B IDEO" + + "GRAM VESSEL B229LINEAR B IDEOGRAM VESSEL B250LINEAR B IDEOGRAM VESSEL B3" + + "05AEGEAN WORD SEPARATOR LINEAEGEAN WORD SEPARATOR DOTAEGEAN CHECK MARKAE" + + "GEAN NUMBER ONEAEGEAN NUMBER TWOAEGEAN NUMBER THREEAEGEAN NUMBER FOURAEG") + ("" + + "EAN NUMBER FIVEAEGEAN NUMBER SIXAEGEAN NUMBER SEVENAEGEAN NUMBER EIGHTAE" + + "GEAN NUMBER NINEAEGEAN NUMBER TENAEGEAN NUMBER TWENTYAEGEAN NUMBER THIRT" + + "YAEGEAN NUMBER FORTYAEGEAN NUMBER FIFTYAEGEAN NUMBER SIXTYAEGEAN NUMBER " + + "SEVENTYAEGEAN NUMBER EIGHTYAEGEAN NUMBER NINETYAEGEAN NUMBER ONE HUNDRED" + + "AEGEAN NUMBER TWO HUNDREDAEGEAN NUMBER THREE HUNDREDAEGEAN NUMBER FOUR H" + + "UNDREDAEGEAN NUMBER FIVE HUNDREDAEGEAN NUMBER SIX HUNDREDAEGEAN NUMBER S" + + "EVEN HUNDREDAEGEAN NUMBER EIGHT HUNDREDAEGEAN NUMBER NINE HUNDREDAEGEAN " + + "NUMBER ONE THOUSANDAEGEAN NUMBER TWO THOUSANDAEGEAN NUMBER THREE THOUSAN" + + "DAEGEAN NUMBER FOUR THOUSANDAEGEAN NUMBER FIVE THOUSANDAEGEAN NUMBER SIX" + + " THOUSANDAEGEAN NUMBER SEVEN THOUSANDAEGEAN NUMBER EIGHT THOUSANDAEGEAN " + + "NUMBER NINE THOUSANDAEGEAN NUMBER TEN THOUSANDAEGEAN NUMBER TWENTY THOUS" + + "ANDAEGEAN NUMBER THIRTY THOUSANDAEGEAN NUMBER FORTY THOUSANDAEGEAN NUMBE" + + "R FIFTY THOUSANDAEGEAN NUMBER SIXTY THOUSANDAEGEAN NUMBER SEVENTY THOUSA" + + "NDAEGEAN NUMBER EIGHTY THOUSANDAEGEAN NUMBER NINETY THOUSANDAEGEAN WEIGH" + + "T BASE UNITAEGEAN WEIGHT FIRST SUBUNITAEGEAN WEIGHT SECOND SUBUNITAEGEAN" + + " WEIGHT THIRD SUBUNITAEGEAN WEIGHT FOURTH SUBUNITAEGEAN DRY MEASURE FIRS" + + "T SUBUNITAEGEAN LIQUID MEASURE FIRST SUBUNITAEGEAN MEASURE SECOND SUBUNI" + + "TAEGEAN MEASURE THIRD SUBUNITGREEK ACROPHONIC ATTIC ONE QUARTERGREEK ACR" + + "OPHONIC ATTIC ONE HALFGREEK ACROPHONIC ATTIC ONE DRACHMAGREEK ACROPHONIC" + + " ATTIC FIVEGREEK ACROPHONIC ATTIC FIFTYGREEK ACROPHONIC ATTIC FIVE HUNDR" + + "EDGREEK ACROPHONIC ATTIC FIVE THOUSANDGREEK ACROPHONIC ATTIC FIFTY THOUS" + + "ANDGREEK ACROPHONIC ATTIC FIVE TALENTSGREEK ACROPHONIC ATTIC TEN TALENTS" + + "GREEK ACROPHONIC ATTIC FIFTY TALENTSGREEK ACROPHONIC ATTIC ONE HUNDRED T" + + "ALENTSGREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTSGREEK ACROPHONIC ATTIC " + + "ONE THOUSAND TALENTSGREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTSGREEK AC" + + "ROPHONIC ATTIC FIVE STATERSGREEK ACROPHONIC ATTIC TEN STATERSGREEK ACROP" + + "HONIC ATTIC FIFTY STATERSGREEK ACROPHONIC ATTIC ONE HUNDRED STATERSGREEK" + + " ACROPHONIC ATTIC FIVE HUNDRED STATERSGREEK ACROPHONIC ATTIC ONE THOUSAN" + + "D STATERSGREEK ACROPHONIC ATTIC TEN THOUSAND STATERSGREEK ACROPHONIC ATT" + + "IC FIFTY THOUSAND STATERSGREEK ACROPHONIC ATTIC TEN MNASGREEK ACROPHONIC" + + " HERAEUM ONE PLETHRONGREEK ACROPHONIC THESPIAN ONEGREEK ACROPHONIC HERMI" + + "ONIAN ONEGREEK ACROPHONIC EPIDAUREAN TWOGREEK ACROPHONIC THESPIAN TWOGRE" + + "EK ACROPHONIC CYRENAIC TWO DRACHMASGREEK ACROPHONIC EPIDAUREAN TWO DRACH" + + "MASGREEK ACROPHONIC TROEZENIAN FIVEGREEK ACROPHONIC TROEZENIAN TENGREEK " + + "ACROPHONIC TROEZENIAN TEN ALTERNATE FORMGREEK ACROPHONIC HERMIONIAN TENG" + + "REEK ACROPHONIC MESSENIAN TENGREEK ACROPHONIC THESPIAN TENGREEK ACROPHON" + + "IC THESPIAN THIRTYGREEK ACROPHONIC TROEZENIAN FIFTYGREEK ACROPHONIC TROE" + + "ZENIAN FIFTY ALTERNATE FORMGREEK ACROPHONIC HERMIONIAN FIFTYGREEK ACROPH" + + "ONIC THESPIAN FIFTYGREEK ACROPHONIC THESPIAN ONE HUNDREDGREEK ACROPHONIC" + + " THESPIAN THREE HUNDREDGREEK ACROPHONIC EPIDAUREAN FIVE HUNDREDGREEK ACR" + + "OPHONIC TROEZENIAN FIVE HUNDREDGREEK ACROPHONIC THESPIAN FIVE HUNDREDGRE" + + "EK ACROPHONIC CARYSTIAN FIVE HUNDREDGREEK ACROPHONIC NAXIAN FIVE HUNDRED" + + "GREEK ACROPHONIC THESPIAN ONE THOUSANDGREEK ACROPHONIC THESPIAN FIVE THO" + + "USANDGREEK ACROPHONIC DELPHIC FIVE MNASGREEK ACROPHONIC STRATIAN FIFTY M" + + "NASGREEK ONE HALF SIGNGREEK ONE HALF SIGN ALTERNATE FORMGREEK TWO THIRDS" + + " SIGNGREEK THREE QUARTERS SIGNGREEK YEAR SIGNGREEK TALENT SIGNGREEK DRAC" + + "HMA SIGNGREEK OBOL SIGNGREEK TWO OBOLS SIGNGREEK THREE OBOLS SIGNGREEK F" + + "OUR OBOLS SIGNGREEK FIVE OBOLS SIGNGREEK METRETES SIGNGREEK KYATHOS BASE" + + " SIGNGREEK LITRA SIGNGREEK OUNKIA SIGNGREEK XESTES SIGNGREEK ARTABE SIGN" + + "GREEK AROURA SIGNGREEK GRAMMA SIGNGREEK TRYBLION BASE SIGNGREEK ZERO SIG" + + "NGREEK ONE QUARTER SIGNGREEK SINUSOID SIGNGREEK INDICTION SIGNNOMISMA SI" + + "GNROMAN SEXTANS SIGNROMAN UNCIA SIGNROMAN SEMUNCIA SIGNROMAN SEXTULA SIG" + + "NROMAN DIMIDIA SEXTULA SIGNROMAN SILIQUA SIGNROMAN DENARIUS SIGNROMAN QU" + + "INARIUS SIGNROMAN SESTERTIUS SIGNROMAN DUPONDIUS SIGNROMAN AS SIGNROMAN " + + "CENTURIAL SIGNGREEK SYMBOL TAU RHOPHAISTOS DISC SIGN PEDESTRIANPHAISTOS " + + "DISC SIGN PLUMED HEADPHAISTOS DISC SIGN TATTOOED HEADPHAISTOS DISC SIGN " + + "CAPTIVEPHAISTOS DISC SIGN CHILDPHAISTOS DISC SIGN WOMANPHAISTOS DISC SIG" + + "N HELMETPHAISTOS DISC SIGN GAUNTLETPHAISTOS DISC SIGN TIARAPHAISTOS DISC" + + " SIGN ARROWPHAISTOS DISC SIGN BOWPHAISTOS DISC SIGN SHIELDPHAISTOS DISC " + + "SIGN CLUBPHAISTOS DISC SIGN MANACLESPHAISTOS DISC SIGN MATTOCKPHAISTOS D" + + "ISC SIGN SAWPHAISTOS DISC SIGN LIDPHAISTOS DISC SIGN BOOMERANGPHAISTOS D" + + "ISC SIGN CARPENTRY PLANEPHAISTOS DISC SIGN DOLIUMPHAISTOS DISC SIGN COMB" + + "PHAISTOS DISC SIGN SLINGPHAISTOS DISC SIGN COLUMNPHAISTOS DISC SIGN BEEH" + + "IVEPHAISTOS DISC SIGN SHIPPHAISTOS DISC SIGN HORNPHAISTOS DISC SIGN HIDE") + ("" + + "PHAISTOS DISC SIGN BULLS LEGPHAISTOS DISC SIGN CATPHAISTOS DISC SIGN RAM" + + "PHAISTOS DISC SIGN EAGLEPHAISTOS DISC SIGN DOVEPHAISTOS DISC SIGN TUNNYP" + + "HAISTOS DISC SIGN BEEPHAISTOS DISC SIGN PLANE TREEPHAISTOS DISC SIGN VIN" + + "EPHAISTOS DISC SIGN PAPYRUSPHAISTOS DISC SIGN ROSETTEPHAISTOS DISC SIGN " + + "LILYPHAISTOS DISC SIGN OX BACKPHAISTOS DISC SIGN FLUTEPHAISTOS DISC SIGN" + + " GRATERPHAISTOS DISC SIGN STRAINERPHAISTOS DISC SIGN SMALL AXEPHAISTOS D" + + "ISC SIGN WAVY BANDPHAISTOS DISC SIGN COMBINING OBLIQUE STROKELYCIAN LETT" + + "ER ALYCIAN LETTER ELYCIAN LETTER BLYCIAN LETTER BHLYCIAN LETTER GLYCIAN " + + "LETTER DLYCIAN LETTER ILYCIAN LETTER WLYCIAN LETTER ZLYCIAN LETTER THLYC" + + "IAN LETTER JLYCIAN LETTER KLYCIAN LETTER QLYCIAN LETTER LLYCIAN LETTER M" + + "LYCIAN LETTER NLYCIAN LETTER MMLYCIAN LETTER NNLYCIAN LETTER ULYCIAN LET" + + "TER PLYCIAN LETTER KKLYCIAN LETTER RLYCIAN LETTER SLYCIAN LETTER TLYCIAN" + + " LETTER TTLYCIAN LETTER ANLYCIAN LETTER ENLYCIAN LETTER HLYCIAN LETTER X" + + "CARIAN LETTER ACARIAN LETTER P2CARIAN LETTER DCARIAN LETTER LCARIAN LETT" + + "ER UUUCARIAN LETTER RCARIAN LETTER LDCARIAN LETTER A2CARIAN LETTER QCARI" + + "AN LETTER BCARIAN LETTER MCARIAN LETTER OCARIAN LETTER D2CARIAN LETTER T" + + "CARIAN LETTER SHCARIAN LETTER SH2CARIAN LETTER SCARIAN LETTER C-18CARIAN" + + " LETTER UCARIAN LETTER NNCARIAN LETTER XCARIAN LETTER NCARIAN LETTER TT2" + + "CARIAN LETTER PCARIAN LETTER SSCARIAN LETTER ICARIAN LETTER ECARIAN LETT" + + "ER UUUUCARIAN LETTER KCARIAN LETTER K2CARIAN LETTER NDCARIAN LETTER UUCA" + + "RIAN LETTER GCARIAN LETTER G2CARIAN LETTER STCARIAN LETTER ST2CARIAN LET" + + "TER NGCARIAN LETTER IICARIAN LETTER C-39CARIAN LETTER TTCARIAN LETTER UU" + + "U2CARIAN LETTER RRCARIAN LETTER MBCARIAN LETTER MB2CARIAN LETTER MB3CARI" + + "AN LETTER MB4CARIAN LETTER LD2CARIAN LETTER E2CARIAN LETTER UUU3COPTIC E" + + "PACT THOUSANDS MARKCOPTIC EPACT DIGIT ONECOPTIC EPACT DIGIT TWOCOPTIC EP" + + "ACT DIGIT THREECOPTIC EPACT DIGIT FOURCOPTIC EPACT DIGIT FIVECOPTIC EPAC" + + "T DIGIT SIXCOPTIC EPACT DIGIT SEVENCOPTIC EPACT DIGIT EIGHTCOPTIC EPACT " + + "DIGIT NINECOPTIC EPACT NUMBER TENCOPTIC EPACT NUMBER TWENTYCOPTIC EPACT " + + "NUMBER THIRTYCOPTIC EPACT NUMBER FORTYCOPTIC EPACT NUMBER FIFTYCOPTIC EP" + + "ACT NUMBER SIXTYCOPTIC EPACT NUMBER SEVENTYCOPTIC EPACT NUMBER EIGHTYCOP" + + "TIC EPACT NUMBER NINETYCOPTIC EPACT NUMBER ONE HUNDREDCOPTIC EPACT NUMBE" + + "R TWO HUNDREDCOPTIC EPACT NUMBER THREE HUNDREDCOPTIC EPACT NUMBER FOUR H" + + "UNDREDCOPTIC EPACT NUMBER FIVE HUNDREDCOPTIC EPACT NUMBER SIX HUNDREDCOP" + + "TIC EPACT NUMBER SEVEN HUNDREDCOPTIC EPACT NUMBER EIGHT HUNDREDCOPTIC EP" + + "ACT NUMBER NINE HUNDREDOLD ITALIC LETTER AOLD ITALIC LETTER BEOLD ITALIC" + + " LETTER KEOLD ITALIC LETTER DEOLD ITALIC LETTER EOLD ITALIC LETTER VEOLD" + + " ITALIC LETTER ZEOLD ITALIC LETTER HEOLD ITALIC LETTER THEOLD ITALIC LET" + + "TER IOLD ITALIC LETTER KAOLD ITALIC LETTER ELOLD ITALIC LETTER EMOLD ITA" + + "LIC LETTER ENOLD ITALIC LETTER ESHOLD ITALIC LETTER OOLD ITALIC LETTER P" + + "EOLD ITALIC LETTER SHEOLD ITALIC LETTER KUOLD ITALIC LETTER EROLD ITALIC" + + " LETTER ESOLD ITALIC LETTER TEOLD ITALIC LETTER UOLD ITALIC LETTER EKSOL" + + "D ITALIC LETTER PHEOLD ITALIC LETTER KHEOLD ITALIC LETTER EFOLD ITALIC L" + + "ETTER ERSOLD ITALIC LETTER CHEOLD ITALIC LETTER IIOLD ITALIC LETTER UUOL" + + "D ITALIC LETTER ESSOLD ITALIC NUMERAL ONEOLD ITALIC NUMERAL FIVEOLD ITAL" + + "IC NUMERAL TENOLD ITALIC NUMERAL FIFTYOLD ITALIC LETTER YEOLD ITALIC LET" + + "TER NORTHERN TSEOLD ITALIC LETTER SOUTHERN TSEGOTHIC LETTER AHSAGOTHIC L" + + "ETTER BAIRKANGOTHIC LETTER GIBAGOTHIC LETTER DAGSGOTHIC LETTER AIHVUSGOT" + + "HIC LETTER QAIRTHRAGOTHIC LETTER IUJAGOTHIC LETTER HAGLGOTHIC LETTER THI" + + "UTHGOTHIC LETTER EISGOTHIC LETTER KUSMAGOTHIC LETTER LAGUSGOTHIC LETTER " + + "MANNAGOTHIC LETTER NAUTHSGOTHIC LETTER JERGOTHIC LETTER URUSGOTHIC LETTE" + + "R PAIRTHRAGOTHIC LETTER NINETYGOTHIC LETTER RAIDAGOTHIC LETTER SAUILGOTH" + + "IC LETTER TEIWSGOTHIC LETTER WINJAGOTHIC LETTER FAIHUGOTHIC LETTER IGGWS" + + "GOTHIC LETTER HWAIRGOTHIC LETTER OTHALGOTHIC LETTER NINE HUNDREDOLD PERM" + + "IC LETTER ANOLD PERMIC LETTER BUROLD PERMIC LETTER GAIOLD PERMIC LETTER " + + "DOIOLD PERMIC LETTER EOLD PERMIC LETTER ZHOIOLD PERMIC LETTER DZHOIOLD P" + + "ERMIC LETTER ZATAOLD PERMIC LETTER DZITAOLD PERMIC LETTER IOLD PERMIC LE" + + "TTER KOKEOLD PERMIC LETTER LEIOLD PERMIC LETTER MENOEOLD PERMIC LETTER N" + + "ENOEOLD PERMIC LETTER VOOIOLD PERMIC LETTER PEEIOLD PERMIC LETTER REIOLD" + + " PERMIC LETTER SIIOLD PERMIC LETTER TAIOLD PERMIC LETTER UOLD PERMIC LET" + + "TER CHERYOLD PERMIC LETTER SHOOIOLD PERMIC LETTER SHCHOOIOLD PERMIC LETT" + + "ER YRYOLD PERMIC LETTER YERUOLD PERMIC LETTER OOLD PERMIC LETTER OOOLD P" + + "ERMIC LETTER EFOLD PERMIC LETTER HAOLD PERMIC LETTER TSIUOLD PERMIC LETT" + + "ER VEROLD PERMIC LETTER YEROLD PERMIC LETTER YERIOLD PERMIC LETTER YATOL" + + "D PERMIC LETTER IEOLD PERMIC LETTER YUOLD PERMIC LETTER YAOLD PERMIC LET") + ("" + + "TER IACOMBINING OLD PERMIC LETTER ANCOMBINING OLD PERMIC LETTER DOICOMBI" + + "NING OLD PERMIC LETTER ZATACOMBINING OLD PERMIC LETTER NENOECOMBINING OL" + + "D PERMIC LETTER SIIUGARITIC LETTER ALPAUGARITIC LETTER BETAUGARITIC LETT" + + "ER GAMLAUGARITIC LETTER KHAUGARITIC LETTER DELTAUGARITIC LETTER HOUGARIT" + + "IC LETTER WOUGARITIC LETTER ZETAUGARITIC LETTER HOTAUGARITIC LETTER TETU" + + "GARITIC LETTER YODUGARITIC LETTER KAFUGARITIC LETTER SHINUGARITIC LETTER" + + " LAMDAUGARITIC LETTER MEMUGARITIC LETTER DHALUGARITIC LETTER NUNUGARITIC" + + " LETTER ZUUGARITIC LETTER SAMKAUGARITIC LETTER AINUGARITIC LETTER PUUGAR" + + "ITIC LETTER SADEUGARITIC LETTER QOPAUGARITIC LETTER RASHAUGARITIC LETTER" + + " THANNAUGARITIC LETTER GHAINUGARITIC LETTER TOUGARITIC LETTER IUGARITIC " + + "LETTER UUGARITIC LETTER SSUUGARITIC WORD DIVIDEROLD PERSIAN SIGN AOLD PE" + + "RSIAN SIGN IOLD PERSIAN SIGN UOLD PERSIAN SIGN KAOLD PERSIAN SIGN KUOLD " + + "PERSIAN SIGN GAOLD PERSIAN SIGN GUOLD PERSIAN SIGN XAOLD PERSIAN SIGN CA" + + "OLD PERSIAN SIGN JAOLD PERSIAN SIGN JIOLD PERSIAN SIGN TAOLD PERSIAN SIG" + + "N TUOLD PERSIAN SIGN DAOLD PERSIAN SIGN DIOLD PERSIAN SIGN DUOLD PERSIAN" + + " SIGN THAOLD PERSIAN SIGN PAOLD PERSIAN SIGN BAOLD PERSIAN SIGN FAOLD PE" + + "RSIAN SIGN NAOLD PERSIAN SIGN NUOLD PERSIAN SIGN MAOLD PERSIAN SIGN MIOL" + + "D PERSIAN SIGN MUOLD PERSIAN SIGN YAOLD PERSIAN SIGN VAOLD PERSIAN SIGN " + + "VIOLD PERSIAN SIGN RAOLD PERSIAN SIGN RUOLD PERSIAN SIGN LAOLD PERSIAN S" + + "IGN SAOLD PERSIAN SIGN ZAOLD PERSIAN SIGN SHAOLD PERSIAN SIGN SSAOLD PER" + + "SIAN SIGN HAOLD PERSIAN SIGN AURAMAZDAAOLD PERSIAN SIGN AURAMAZDAA-2OLD " + + "PERSIAN SIGN AURAMAZDAAHAOLD PERSIAN SIGN XSHAAYATHIYAOLD PERSIAN SIGN D" + + "AHYAAUSHOLD PERSIAN SIGN DAHYAAUSH-2OLD PERSIAN SIGN BAGAOLD PERSIAN SIG" + + "N BUUMISHOLD PERSIAN WORD DIVIDEROLD PERSIAN NUMBER ONEOLD PERSIAN NUMBE" + + "R TWOOLD PERSIAN NUMBER TENOLD PERSIAN NUMBER TWENTYOLD PERSIAN NUMBER H" + + "UNDREDDESERET CAPITAL LETTER LONG IDESERET CAPITAL LETTER LONG EDESERET " + + "CAPITAL LETTER LONG ADESERET CAPITAL LETTER LONG AHDESERET CAPITAL LETTE" + + "R LONG ODESERET CAPITAL LETTER LONG OODESERET CAPITAL LETTER SHORT IDESE" + + "RET CAPITAL LETTER SHORT EDESERET CAPITAL LETTER SHORT ADESERET CAPITAL " + + "LETTER SHORT AHDESERET CAPITAL LETTER SHORT ODESERET CAPITAL LETTER SHOR" + + "T OODESERET CAPITAL LETTER AYDESERET CAPITAL LETTER OWDESERET CAPITAL LE" + + "TTER WUDESERET CAPITAL LETTER YEEDESERET CAPITAL LETTER HDESERET CAPITAL" + + " LETTER PEEDESERET CAPITAL LETTER BEEDESERET CAPITAL LETTER TEEDESERET C" + + "APITAL LETTER DEEDESERET CAPITAL LETTER CHEEDESERET CAPITAL LETTER JEEDE" + + "SERET CAPITAL LETTER KAYDESERET CAPITAL LETTER GAYDESERET CAPITAL LETTER" + + " EFDESERET CAPITAL LETTER VEEDESERET CAPITAL LETTER ETHDESERET CAPITAL L" + + "ETTER THEEDESERET CAPITAL LETTER ESDESERET CAPITAL LETTER ZEEDESERET CAP" + + "ITAL LETTER ESHDESERET CAPITAL LETTER ZHEEDESERET CAPITAL LETTER ERDESER" + + "ET CAPITAL LETTER ELDESERET CAPITAL LETTER EMDESERET CAPITAL LETTER ENDE" + + "SERET CAPITAL LETTER ENGDESERET CAPITAL LETTER OIDESERET CAPITAL LETTER " + + "EWDESERET SMALL LETTER LONG IDESERET SMALL LETTER LONG EDESERET SMALL LE" + + "TTER LONG ADESERET SMALL LETTER LONG AHDESERET SMALL LETTER LONG ODESERE" + + "T SMALL LETTER LONG OODESERET SMALL LETTER SHORT IDESERET SMALL LETTER S" + + "HORT EDESERET SMALL LETTER SHORT ADESERET SMALL LETTER SHORT AHDESERET S" + + "MALL LETTER SHORT ODESERET SMALL LETTER SHORT OODESERET SMALL LETTER AYD" + + "ESERET SMALL LETTER OWDESERET SMALL LETTER WUDESERET SMALL LETTER YEEDES" + + "ERET SMALL LETTER HDESERET SMALL LETTER PEEDESERET SMALL LETTER BEEDESER" + + "ET SMALL LETTER TEEDESERET SMALL LETTER DEEDESERET SMALL LETTER CHEEDESE" + + "RET SMALL LETTER JEEDESERET SMALL LETTER KAYDESERET SMALL LETTER GAYDESE" + + "RET SMALL LETTER EFDESERET SMALL LETTER VEEDESERET SMALL LETTER ETHDESER" + + "ET SMALL LETTER THEEDESERET SMALL LETTER ESDESERET SMALL LETTER ZEEDESER" + + "ET SMALL LETTER ESHDESERET SMALL LETTER ZHEEDESERET SMALL LETTER ERDESER" + + "ET SMALL LETTER ELDESERET SMALL LETTER EMDESERET SMALL LETTER ENDESERET " + + "SMALL LETTER ENGDESERET SMALL LETTER OIDESERET SMALL LETTER EWSHAVIAN LE" + + "TTER PEEPSHAVIAN LETTER TOTSHAVIAN LETTER KICKSHAVIAN LETTER FEESHAVIAN " + + "LETTER THIGHSHAVIAN LETTER SOSHAVIAN LETTER SURESHAVIAN LETTER CHURCHSHA" + + "VIAN LETTER YEASHAVIAN LETTER HUNGSHAVIAN LETTER BIBSHAVIAN LETTER DEADS" + + "HAVIAN LETTER GAGSHAVIAN LETTER VOWSHAVIAN LETTER THEYSHAVIAN LETTER ZOO" + + "SHAVIAN LETTER MEASURESHAVIAN LETTER JUDGESHAVIAN LETTER WOESHAVIAN LETT" + + "ER HA-HASHAVIAN LETTER LOLLSHAVIAN LETTER MIMESHAVIAN LETTER IFSHAVIAN L" + + "ETTER EGGSHAVIAN LETTER ASHSHAVIAN LETTER ADOSHAVIAN LETTER ONSHAVIAN LE" + + "TTER WOOLSHAVIAN LETTER OUTSHAVIAN LETTER AHSHAVIAN LETTER ROARSHAVIAN L" + + "ETTER NUNSHAVIAN LETTER EATSHAVIAN LETTER AGESHAVIAN LETTER ICESHAVIAN L" + + "ETTER UPSHAVIAN LETTER OAKSHAVIAN LETTER OOZESHAVIAN LETTER OILSHAVIAN L") + ("" + + "ETTER AWESHAVIAN LETTER ARESHAVIAN LETTER ORSHAVIAN LETTER AIRSHAVIAN LE" + + "TTER ERRSHAVIAN LETTER ARRAYSHAVIAN LETTER EARSHAVIAN LETTER IANSHAVIAN " + + "LETTER YEWOSMANYA LETTER ALEFOSMANYA LETTER BAOSMANYA LETTER TAOSMANYA L" + + "ETTER JAOSMANYA LETTER XAOSMANYA LETTER KHAOSMANYA LETTER DEELOSMANYA LE" + + "TTER RAOSMANYA LETTER SAOSMANYA LETTER SHIINOSMANYA LETTER DHAOSMANYA LE" + + "TTER CAYNOSMANYA LETTER GAOSMANYA LETTER FAOSMANYA LETTER QAAFOSMANYA LE" + + "TTER KAAFOSMANYA LETTER LAANOSMANYA LETTER MIINOSMANYA LETTER NUUNOSMANY" + + "A LETTER WAWOSMANYA LETTER HAOSMANYA LETTER YAOSMANYA LETTER AOSMANYA LE" + + "TTER EOSMANYA LETTER IOSMANYA LETTER OOSMANYA LETTER UOSMANYA LETTER AAO" + + "SMANYA LETTER EEOSMANYA LETTER OOOSMANYA DIGIT ZEROOSMANYA DIGIT ONEOSMA" + + "NYA DIGIT TWOOSMANYA DIGIT THREEOSMANYA DIGIT FOUROSMANYA DIGIT FIVEOSMA" + + "NYA DIGIT SIXOSMANYA DIGIT SEVENOSMANYA DIGIT EIGHTOSMANYA DIGIT NINEOSA" + + "GE CAPITAL LETTER AOSAGE CAPITAL LETTER AIOSAGE CAPITAL LETTER AINOSAGE " + + "CAPITAL LETTER AHOSAGE CAPITAL LETTER BRAOSAGE CAPITAL LETTER CHAOSAGE C" + + "APITAL LETTER EHCHAOSAGE CAPITAL LETTER EOSAGE CAPITAL LETTER EINOSAGE C" + + "APITAL LETTER HAOSAGE CAPITAL LETTER HYAOSAGE CAPITAL LETTER IOSAGE CAPI" + + "TAL LETTER KAOSAGE CAPITAL LETTER EHKAOSAGE CAPITAL LETTER KYAOSAGE CAPI" + + "TAL LETTER LAOSAGE CAPITAL LETTER MAOSAGE CAPITAL LETTER NAOSAGE CAPITAL" + + " LETTER OOSAGE CAPITAL LETTER OINOSAGE CAPITAL LETTER PAOSAGE CAPITAL LE" + + "TTER EHPAOSAGE CAPITAL LETTER SAOSAGE CAPITAL LETTER SHAOSAGE CAPITAL LE" + + "TTER TAOSAGE CAPITAL LETTER EHTAOSAGE CAPITAL LETTER TSAOSAGE CAPITAL LE" + + "TTER EHTSAOSAGE CAPITAL LETTER TSHAOSAGE CAPITAL LETTER DHAOSAGE CAPITAL" + + " LETTER UOSAGE CAPITAL LETTER WAOSAGE CAPITAL LETTER KHAOSAGE CAPITAL LE" + + "TTER GHAOSAGE CAPITAL LETTER ZAOSAGE CAPITAL LETTER ZHAOSAGE SMALL LETTE" + + "R AOSAGE SMALL LETTER AIOSAGE SMALL LETTER AINOSAGE SMALL LETTER AHOSAGE" + + " SMALL LETTER BRAOSAGE SMALL LETTER CHAOSAGE SMALL LETTER EHCHAOSAGE SMA" + + "LL LETTER EOSAGE SMALL LETTER EINOSAGE SMALL LETTER HAOSAGE SMALL LETTER" + + " HYAOSAGE SMALL LETTER IOSAGE SMALL LETTER KAOSAGE SMALL LETTER EHKAOSAG" + + "E SMALL LETTER KYAOSAGE SMALL LETTER LAOSAGE SMALL LETTER MAOSAGE SMALL " + + "LETTER NAOSAGE SMALL LETTER OOSAGE SMALL LETTER OINOSAGE SMALL LETTER PA" + + "OSAGE SMALL LETTER EHPAOSAGE SMALL LETTER SAOSAGE SMALL LETTER SHAOSAGE " + + "SMALL LETTER TAOSAGE SMALL LETTER EHTAOSAGE SMALL LETTER TSAOSAGE SMALL " + + "LETTER EHTSAOSAGE SMALL LETTER TSHAOSAGE SMALL LETTER DHAOSAGE SMALL LET" + + "TER UOSAGE SMALL LETTER WAOSAGE SMALL LETTER KHAOSAGE SMALL LETTER GHAOS" + + "AGE SMALL LETTER ZAOSAGE SMALL LETTER ZHAELBASAN LETTER AELBASAN LETTER " + + "BEELBASAN LETTER CEELBASAN LETTER CHEELBASAN LETTER DEELBASAN LETTER NDE" + + "ELBASAN LETTER DHEELBASAN LETTER EIELBASAN LETTER EELBASAN LETTER FEELBA" + + "SAN LETTER GEELBASAN LETTER GJEELBASAN LETTER HEELBASAN LETTER IELBASAN " + + "LETTER JEELBASAN LETTER KEELBASAN LETTER LEELBASAN LETTER LLEELBASAN LET" + + "TER MEELBASAN LETTER NEELBASAN LETTER NAELBASAN LETTER NJEELBASAN LETTER" + + " OELBASAN LETTER PEELBASAN LETTER QEELBASAN LETTER REELBASAN LETTER RREE" + + "LBASAN LETTER SEELBASAN LETTER SHEELBASAN LETTER TEELBASAN LETTER THEELB" + + "ASAN LETTER UELBASAN LETTER VEELBASAN LETTER XEELBASAN LETTER YELBASAN L" + + "ETTER ZEELBASAN LETTER ZHEELBASAN LETTER GHEELBASAN LETTER GHAMMAELBASAN" + + " LETTER KHECAUCASIAN ALBANIAN LETTER ALTCAUCASIAN ALBANIAN LETTER BETCAU" + + "CASIAN ALBANIAN LETTER GIMCAUCASIAN ALBANIAN LETTER DATCAUCASIAN ALBANIA" + + "N LETTER EBCAUCASIAN ALBANIAN LETTER ZARLCAUCASIAN ALBANIAN LETTER EYNCA" + + "UCASIAN ALBANIAN LETTER ZHILCAUCASIAN ALBANIAN LETTER TASCAUCASIAN ALBAN" + + "IAN LETTER CHACAUCASIAN ALBANIAN LETTER YOWDCAUCASIAN ALBANIAN LETTER ZH" + + "ACAUCASIAN ALBANIAN LETTER IRBCAUCASIAN ALBANIAN LETTER SHACAUCASIAN ALB" + + "ANIAN LETTER LANCAUCASIAN ALBANIAN LETTER INYACAUCASIAN ALBANIAN LETTER " + + "XEYNCAUCASIAN ALBANIAN LETTER DYANCAUCASIAN ALBANIAN LETTER CARCAUCASIAN" + + " ALBANIAN LETTER JHOXCAUCASIAN ALBANIAN LETTER KARCAUCASIAN ALBANIAN LET" + + "TER LYITCAUCASIAN ALBANIAN LETTER HEYTCAUCASIAN ALBANIAN LETTER QAYCAUCA" + + "SIAN ALBANIAN LETTER AORCAUCASIAN ALBANIAN LETTER CHOYCAUCASIAN ALBANIAN" + + " LETTER CHICAUCASIAN ALBANIAN LETTER CYAYCAUCASIAN ALBANIAN LETTER MAQCA" + + "UCASIAN ALBANIAN LETTER QARCAUCASIAN ALBANIAN LETTER NOWCCAUCASIAN ALBAN" + + "IAN LETTER DZYAYCAUCASIAN ALBANIAN LETTER SHAKCAUCASIAN ALBANIAN LETTER " + + "JAYNCAUCASIAN ALBANIAN LETTER ONCAUCASIAN ALBANIAN LETTER TYAYCAUCASIAN " + + "ALBANIAN LETTER FAMCAUCASIAN ALBANIAN LETTER DZAYCAUCASIAN ALBANIAN LETT" + + "ER CHATCAUCASIAN ALBANIAN LETTER PENCAUCASIAN ALBANIAN LETTER GHEYSCAUCA" + + "SIAN ALBANIAN LETTER RATCAUCASIAN ALBANIAN LETTER SEYKCAUCASIAN ALBANIAN" + + " LETTER VEYZCAUCASIAN ALBANIAN LETTER TIWRCAUCASIAN ALBANIAN LETTER SHOY" + + "CAUCASIAN ALBANIAN LETTER IWNCAUCASIAN ALBANIAN LETTER CYAWCAUCASIAN ALB") + ("" + + "ANIAN LETTER CAYNCAUCASIAN ALBANIAN LETTER YAYDCAUCASIAN ALBANIAN LETTER" + + " PIWRCAUCASIAN ALBANIAN LETTER KIWCAUCASIAN ALBANIAN CITATION MARKLINEAR" + + " A SIGN AB001LINEAR A SIGN AB002LINEAR A SIGN AB003LINEAR A SIGN AB004LI" + + "NEAR A SIGN AB005LINEAR A SIGN AB006LINEAR A SIGN AB007LINEAR A SIGN AB0" + + "08LINEAR A SIGN AB009LINEAR A SIGN AB010LINEAR A SIGN AB011LINEAR A SIGN" + + " AB013LINEAR A SIGN AB016LINEAR A SIGN AB017LINEAR A SIGN AB020LINEAR A " + + "SIGN AB021LINEAR A SIGN AB021FLINEAR A SIGN AB021MLINEAR A SIGN AB022LIN" + + "EAR A SIGN AB022FLINEAR A SIGN AB022MLINEAR A SIGN AB023LINEAR A SIGN AB" + + "023MLINEAR A SIGN AB024LINEAR A SIGN AB026LINEAR A SIGN AB027LINEAR A SI" + + "GN AB028LINEAR A SIGN A028BLINEAR A SIGN AB029LINEAR A SIGN AB030LINEAR " + + "A SIGN AB031LINEAR A SIGN AB034LINEAR A SIGN AB037LINEAR A SIGN AB038LIN" + + "EAR A SIGN AB039LINEAR A SIGN AB040LINEAR A SIGN AB041LINEAR A SIGN AB04" + + "4LINEAR A SIGN AB045LINEAR A SIGN AB046LINEAR A SIGN AB047LINEAR A SIGN " + + "AB048LINEAR A SIGN AB049LINEAR A SIGN AB050LINEAR A SIGN AB051LINEAR A S" + + "IGN AB053LINEAR A SIGN AB054LINEAR A SIGN AB055LINEAR A SIGN AB056LINEAR" + + " A SIGN AB057LINEAR A SIGN AB058LINEAR A SIGN AB059LINEAR A SIGN AB060LI" + + "NEAR A SIGN AB061LINEAR A SIGN AB065LINEAR A SIGN AB066LINEAR A SIGN AB0" + + "67LINEAR A SIGN AB069LINEAR A SIGN AB070LINEAR A SIGN AB073LINEAR A SIGN" + + " AB074LINEAR A SIGN AB076LINEAR A SIGN AB077LINEAR A SIGN AB078LINEAR A " + + "SIGN AB079LINEAR A SIGN AB080LINEAR A SIGN AB081LINEAR A SIGN AB082LINEA" + + "R A SIGN AB085LINEAR A SIGN AB086LINEAR A SIGN AB087LINEAR A SIGN A100-1" + + "02LINEAR A SIGN AB118LINEAR A SIGN AB120LINEAR A SIGN A120BLINEAR A SIGN" + + " AB122LINEAR A SIGN AB123LINEAR A SIGN AB131ALINEAR A SIGN AB131BLINEAR " + + "A SIGN A131CLINEAR A SIGN AB164LINEAR A SIGN AB171LINEAR A SIGN AB180LIN" + + "EAR A SIGN AB188LINEAR A SIGN AB191LINEAR A SIGN A301LINEAR A SIGN A302L" + + "INEAR A SIGN A303LINEAR A SIGN A304LINEAR A SIGN A305LINEAR A SIGN A306L" + + "INEAR A SIGN A307LINEAR A SIGN A308LINEAR A SIGN A309ALINEAR A SIGN A309" + + "BLINEAR A SIGN A309CLINEAR A SIGN A310LINEAR A SIGN A311LINEAR A SIGN A3" + + "12LINEAR A SIGN A313ALINEAR A SIGN A313BLINEAR A SIGN A313CLINEAR A SIGN" + + " A314LINEAR A SIGN A315LINEAR A SIGN A316LINEAR A SIGN A317LINEAR A SIGN" + + " A318LINEAR A SIGN A319LINEAR A SIGN A320LINEAR A SIGN A321LINEAR A SIGN" + + " A322LINEAR A SIGN A323LINEAR A SIGN A324LINEAR A SIGN A325LINEAR A SIGN" + + " A326LINEAR A SIGN A327LINEAR A SIGN A328LINEAR A SIGN A329LINEAR A SIGN" + + " A330LINEAR A SIGN A331LINEAR A SIGN A332LINEAR A SIGN A333LINEAR A SIGN" + + " A334LINEAR A SIGN A335LINEAR A SIGN A336LINEAR A SIGN A337LINEAR A SIGN" + + " A338LINEAR A SIGN A339LINEAR A SIGN A340LINEAR A SIGN A341LINEAR A SIGN" + + " A342LINEAR A SIGN A343LINEAR A SIGN A344LINEAR A SIGN A345LINEAR A SIGN" + + " A346LINEAR A SIGN A347LINEAR A SIGN A348LINEAR A SIGN A349LINEAR A SIGN" + + " A350LINEAR A SIGN A351LINEAR A SIGN A352LINEAR A SIGN A353LINEAR A SIGN" + + " A354LINEAR A SIGN A355LINEAR A SIGN A356LINEAR A SIGN A357LINEAR A SIGN" + + " A358LINEAR A SIGN A359LINEAR A SIGN A360LINEAR A SIGN A361LINEAR A SIGN" + + " A362LINEAR A SIGN A363LINEAR A SIGN A364LINEAR A SIGN A365LINEAR A SIGN" + + " A366LINEAR A SIGN A367LINEAR A SIGN A368LINEAR A SIGN A369LINEAR A SIGN" + + " A370LINEAR A SIGN A371LINEAR A SIGN A400-VASLINEAR A SIGN A401-VASLINEA" + + "R A SIGN A402-VASLINEAR A SIGN A403-VASLINEAR A SIGN A404-VASLINEAR A SI" + + "GN A405-VASLINEAR A SIGN A406-VASLINEAR A SIGN A407-VASLINEAR A SIGN A40" + + "8-VASLINEAR A SIGN A409-VASLINEAR A SIGN A410-VASLINEAR A SIGN A411-VASL" + + "INEAR A SIGN A412-VASLINEAR A SIGN A413-VASLINEAR A SIGN A414-VASLINEAR " + + "A SIGN A415-VASLINEAR A SIGN A416-VASLINEAR A SIGN A417-VASLINEAR A SIGN" + + " A418-VASLINEAR A SIGN A501LINEAR A SIGN A502LINEAR A SIGN A503LINEAR A " + + "SIGN A504LINEAR A SIGN A505LINEAR A SIGN A506LINEAR A SIGN A508LINEAR A " + + "SIGN A509LINEAR A SIGN A510LINEAR A SIGN A511LINEAR A SIGN A512LINEAR A " + + "SIGN A513LINEAR A SIGN A515LINEAR A SIGN A516LINEAR A SIGN A520LINEAR A " + + "SIGN A521LINEAR A SIGN A523LINEAR A SIGN A524LINEAR A SIGN A525LINEAR A " + + "SIGN A526LINEAR A SIGN A527LINEAR A SIGN A528LINEAR A SIGN A529LINEAR A " + + "SIGN A530LINEAR A SIGN A531LINEAR A SIGN A532LINEAR A SIGN A534LINEAR A " + + "SIGN A535LINEAR A SIGN A536LINEAR A SIGN A537LINEAR A SIGN A538LINEAR A " + + "SIGN A539LINEAR A SIGN A540LINEAR A SIGN A541LINEAR A SIGN A542LINEAR A " + + "SIGN A545LINEAR A SIGN A547LINEAR A SIGN A548LINEAR A SIGN A549LINEAR A " + + "SIGN A550LINEAR A SIGN A551LINEAR A SIGN A552LINEAR A SIGN A553LINEAR A " + + "SIGN A554LINEAR A SIGN A555LINEAR A SIGN A556LINEAR A SIGN A557LINEAR A " + + "SIGN A559LINEAR A SIGN A563LINEAR A SIGN A564LINEAR A SIGN A565LINEAR A " + + "SIGN A566LINEAR A SIGN A568LINEAR A SIGN A569LINEAR A SIGN A570LINEAR A " + + "SIGN A571LINEAR A SIGN A572LINEAR A SIGN A573LINEAR A SIGN A574LINEAR A ") + ("" + + "SIGN A575LINEAR A SIGN A576LINEAR A SIGN A577LINEAR A SIGN A578LINEAR A " + + "SIGN A579LINEAR A SIGN A580LINEAR A SIGN A581LINEAR A SIGN A582LINEAR A " + + "SIGN A583LINEAR A SIGN A584LINEAR A SIGN A585LINEAR A SIGN A586LINEAR A " + + "SIGN A587LINEAR A SIGN A588LINEAR A SIGN A589LINEAR A SIGN A591LINEAR A " + + "SIGN A592LINEAR A SIGN A594LINEAR A SIGN A595LINEAR A SIGN A596LINEAR A " + + "SIGN A598LINEAR A SIGN A600LINEAR A SIGN A601LINEAR A SIGN A602LINEAR A " + + "SIGN A603LINEAR A SIGN A604LINEAR A SIGN A606LINEAR A SIGN A608LINEAR A " + + "SIGN A609LINEAR A SIGN A610LINEAR A SIGN A611LINEAR A SIGN A612LINEAR A " + + "SIGN A613LINEAR A SIGN A614LINEAR A SIGN A615LINEAR A SIGN A616LINEAR A " + + "SIGN A617LINEAR A SIGN A618LINEAR A SIGN A619LINEAR A SIGN A620LINEAR A " + + "SIGN A621LINEAR A SIGN A622LINEAR A SIGN A623LINEAR A SIGN A624LINEAR A " + + "SIGN A626LINEAR A SIGN A627LINEAR A SIGN A628LINEAR A SIGN A629LINEAR A " + + "SIGN A634LINEAR A SIGN A637LINEAR A SIGN A638LINEAR A SIGN A640LINEAR A " + + "SIGN A642LINEAR A SIGN A643LINEAR A SIGN A644LINEAR A SIGN A645LINEAR A " + + "SIGN A646LINEAR A SIGN A648LINEAR A SIGN A649LINEAR A SIGN A651LINEAR A " + + "SIGN A652LINEAR A SIGN A653LINEAR A SIGN A654LINEAR A SIGN A655LINEAR A " + + "SIGN A656LINEAR A SIGN A657LINEAR A SIGN A658LINEAR A SIGN A659LINEAR A " + + "SIGN A660LINEAR A SIGN A661LINEAR A SIGN A662LINEAR A SIGN A663LINEAR A " + + "SIGN A664LINEAR A SIGN A701 ALINEAR A SIGN A702 BLINEAR A SIGN A703 DLIN" + + "EAR A SIGN A704 ELINEAR A SIGN A705 FLINEAR A SIGN A706 HLINEAR A SIGN A" + + "707 JLINEAR A SIGN A708 KLINEAR A SIGN A709 LLINEAR A SIGN A709-2 L2LINE" + + "AR A SIGN A709-3 L3LINEAR A SIGN A709-4 L4LINEAR A SIGN A709-6 L6LINEAR " + + "A SIGN A710 WLINEAR A SIGN A711 XLINEAR A SIGN A712 YLINEAR A SIGN A713 " + + "OMEGALINEAR A SIGN A714 ABBLINEAR A SIGN A715 BBLINEAR A SIGN A717 DDLIN" + + "EAR A SIGN A726 EYYYLINEAR A SIGN A732 JELINEAR A SIGN A800LINEAR A SIGN" + + " A801LINEAR A SIGN A802LINEAR A SIGN A803LINEAR A SIGN A804LINEAR A SIGN" + + " A805LINEAR A SIGN A806LINEAR A SIGN A807CYPRIOT SYLLABLE ACYPRIOT SYLLA" + + "BLE ECYPRIOT SYLLABLE ICYPRIOT SYLLABLE OCYPRIOT SYLLABLE UCYPRIOT SYLLA" + + "BLE JACYPRIOT SYLLABLE JOCYPRIOT SYLLABLE KACYPRIOT SYLLABLE KECYPRIOT S" + + "YLLABLE KICYPRIOT SYLLABLE KOCYPRIOT SYLLABLE KUCYPRIOT SYLLABLE LACYPRI" + + "OT SYLLABLE LECYPRIOT SYLLABLE LICYPRIOT SYLLABLE LOCYPRIOT SYLLABLE LUC" + + "YPRIOT SYLLABLE MACYPRIOT SYLLABLE MECYPRIOT SYLLABLE MICYPRIOT SYLLABLE" + + " MOCYPRIOT SYLLABLE MUCYPRIOT SYLLABLE NACYPRIOT SYLLABLE NECYPRIOT SYLL" + + "ABLE NICYPRIOT SYLLABLE NOCYPRIOT SYLLABLE NUCYPRIOT SYLLABLE PACYPRIOT " + + "SYLLABLE PECYPRIOT SYLLABLE PICYPRIOT SYLLABLE POCYPRIOT SYLLABLE PUCYPR" + + "IOT SYLLABLE RACYPRIOT SYLLABLE RECYPRIOT SYLLABLE RICYPRIOT SYLLABLE RO" + + "CYPRIOT SYLLABLE RUCYPRIOT SYLLABLE SACYPRIOT SYLLABLE SECYPRIOT SYLLABL" + + "E SICYPRIOT SYLLABLE SOCYPRIOT SYLLABLE SUCYPRIOT SYLLABLE TACYPRIOT SYL" + + "LABLE TECYPRIOT SYLLABLE TICYPRIOT SYLLABLE TOCYPRIOT SYLLABLE TUCYPRIOT" + + " SYLLABLE WACYPRIOT SYLLABLE WECYPRIOT SYLLABLE WICYPRIOT SYLLABLE WOCYP" + + "RIOT SYLLABLE XACYPRIOT SYLLABLE XECYPRIOT SYLLABLE ZACYPRIOT SYLLABLE Z" + + "OIMPERIAL ARAMAIC LETTER ALEPHIMPERIAL ARAMAIC LETTER BETHIMPERIAL ARAMA" + + "IC LETTER GIMELIMPERIAL ARAMAIC LETTER DALETHIMPERIAL ARAMAIC LETTER HEI" + + "MPERIAL ARAMAIC LETTER WAWIMPERIAL ARAMAIC LETTER ZAYINIMPERIAL ARAMAIC " + + "LETTER HETHIMPERIAL ARAMAIC LETTER TETHIMPERIAL ARAMAIC LETTER YODHIMPER" + + "IAL ARAMAIC LETTER KAPHIMPERIAL ARAMAIC LETTER LAMEDHIMPERIAL ARAMAIC LE" + + "TTER MEMIMPERIAL ARAMAIC LETTER NUNIMPERIAL ARAMAIC LETTER SAMEKHIMPERIA" + + "L ARAMAIC LETTER AYINIMPERIAL ARAMAIC LETTER PEIMPERIAL ARAMAIC LETTER S" + + "ADHEIMPERIAL ARAMAIC LETTER QOPHIMPERIAL ARAMAIC LETTER RESHIMPERIAL ARA" + + "MAIC LETTER SHINIMPERIAL ARAMAIC LETTER TAWIMPERIAL ARAMAIC SECTION SIGN" + + "IMPERIAL ARAMAIC NUMBER ONEIMPERIAL ARAMAIC NUMBER TWOIMPERIAL ARAMAIC N" + + "UMBER THREEIMPERIAL ARAMAIC NUMBER TENIMPERIAL ARAMAIC NUMBER TWENTYIMPE" + + "RIAL ARAMAIC NUMBER ONE HUNDREDIMPERIAL ARAMAIC NUMBER ONE THOUSANDIMPER" + + "IAL ARAMAIC NUMBER TEN THOUSANDPALMYRENE LETTER ALEPHPALMYRENE LETTER BE" + + "THPALMYRENE LETTER GIMELPALMYRENE LETTER DALETHPALMYRENE LETTER HEPALMYR" + + "ENE LETTER WAWPALMYRENE LETTER ZAYINPALMYRENE LETTER HETHPALMYRENE LETTE" + + "R TETHPALMYRENE LETTER YODHPALMYRENE LETTER KAPHPALMYRENE LETTER LAMEDHP" + + "ALMYRENE LETTER MEMPALMYRENE LETTER FINAL NUNPALMYRENE LETTER NUNPALMYRE" + + "NE LETTER SAMEKHPALMYRENE LETTER AYINPALMYRENE LETTER PEPALMYRENE LETTER" + + " SADHEPALMYRENE LETTER QOPHPALMYRENE LETTER RESHPALMYRENE LETTER SHINPAL" + + "MYRENE LETTER TAWPALMYRENE LEFT-POINTING FLEURONPALMYRENE RIGHT-POINTING" + + " FLEURONPALMYRENE NUMBER ONEPALMYRENE NUMBER TWOPALMYRENE NUMBER THREEPA" + + "LMYRENE NUMBER FOURPALMYRENE NUMBER FIVEPALMYRENE NUMBER TENPALMYRENE NU" + + "MBER TWENTYNABATAEAN LETTER FINAL ALEPHNABATAEAN LETTER ALEPHNABATAEAN L") + ("" + + "ETTER FINAL BETHNABATAEAN LETTER BETHNABATAEAN LETTER GIMELNABATAEAN LET" + + "TER DALETHNABATAEAN LETTER FINAL HENABATAEAN LETTER HENABATAEAN LETTER W" + + "AWNABATAEAN LETTER ZAYINNABATAEAN LETTER HETHNABATAEAN LETTER TETHNABATA" + + "EAN LETTER FINAL YODHNABATAEAN LETTER YODHNABATAEAN LETTER FINAL KAPHNAB" + + "ATAEAN LETTER KAPHNABATAEAN LETTER FINAL LAMEDHNABATAEAN LETTER LAMEDHNA" + + "BATAEAN LETTER FINAL MEMNABATAEAN LETTER MEMNABATAEAN LETTER FINAL NUNNA" + + "BATAEAN LETTER NUNNABATAEAN LETTER SAMEKHNABATAEAN LETTER AYINNABATAEAN " + + "LETTER PENABATAEAN LETTER SADHENABATAEAN LETTER QOPHNABATAEAN LETTER RES" + + "HNABATAEAN LETTER FINAL SHINNABATAEAN LETTER SHINNABATAEAN LETTER TAWNAB" + + "ATAEAN NUMBER ONENABATAEAN NUMBER TWONABATAEAN NUMBER THREENABATAEAN NUM" + + "BER FOURNABATAEAN CRUCIFORM NUMBER FOURNABATAEAN NUMBER FIVENABATAEAN NU" + + "MBER TENNABATAEAN NUMBER TWENTYNABATAEAN NUMBER ONE HUNDREDHATRAN LETTER" + + " ALEPHHATRAN LETTER BETHHATRAN LETTER GIMELHATRAN LETTER DALETH-RESHHATR" + + "AN LETTER HEHATRAN LETTER WAWHATRAN LETTER ZAYNHATRAN LETTER HETHHATRAN " + + "LETTER TETHHATRAN LETTER YODHHATRAN LETTER KAPHHATRAN LETTER LAMEDHHATRA" + + "N LETTER MEMHATRAN LETTER NUNHATRAN LETTER SAMEKHHATRAN LETTER AYNHATRAN" + + " LETTER PEHATRAN LETTER SADHEHATRAN LETTER QOPHHATRAN LETTER SHINHATRAN " + + "LETTER TAWHATRAN NUMBER ONEHATRAN NUMBER FIVEHATRAN NUMBER TENHATRAN NUM" + + "BER TWENTYHATRAN NUMBER ONE HUNDREDPHOENICIAN LETTER ALFPHOENICIAN LETTE" + + "R BETPHOENICIAN LETTER GAMLPHOENICIAN LETTER DELTPHOENICIAN LETTER HEPHO" + + "ENICIAN LETTER WAUPHOENICIAN LETTER ZAIPHOENICIAN LETTER HETPHOENICIAN L" + + "ETTER TETPHOENICIAN LETTER YODPHOENICIAN LETTER KAFPHOENICIAN LETTER LAM" + + "DPHOENICIAN LETTER MEMPHOENICIAN LETTER NUNPHOENICIAN LETTER SEMKPHOENIC" + + "IAN LETTER AINPHOENICIAN LETTER PEPHOENICIAN LETTER SADEPHOENICIAN LETTE" + + "R QOFPHOENICIAN LETTER ROSHPHOENICIAN LETTER SHINPHOENICIAN LETTER TAUPH" + + "OENICIAN NUMBER ONEPHOENICIAN NUMBER TENPHOENICIAN NUMBER TWENTYPHOENICI" + + "AN NUMBER ONE HUNDREDPHOENICIAN NUMBER TWOPHOENICIAN NUMBER THREEPHOENIC" + + "IAN WORD SEPARATORLYDIAN LETTER ALYDIAN LETTER BLYDIAN LETTER GLYDIAN LE" + + "TTER DLYDIAN LETTER ELYDIAN LETTER VLYDIAN LETTER ILYDIAN LETTER YLYDIAN" + + " LETTER KLYDIAN LETTER LLYDIAN LETTER MLYDIAN LETTER NLYDIAN LETTER OLYD" + + "IAN LETTER RLYDIAN LETTER SSLYDIAN LETTER TLYDIAN LETTER ULYDIAN LETTER " + + "FLYDIAN LETTER QLYDIAN LETTER SLYDIAN LETTER TTLYDIAN LETTER ANLYDIAN LE" + + "TTER ENLYDIAN LETTER LYLYDIAN LETTER NNLYDIAN LETTER CLYDIAN TRIANGULAR " + + "MARKMEROITIC HIEROGLYPHIC LETTER AMEROITIC HIEROGLYPHIC LETTER EMEROITIC" + + " HIEROGLYPHIC LETTER IMEROITIC HIEROGLYPHIC LETTER OMEROITIC HIEROGLYPHI" + + "C LETTER YAMEROITIC HIEROGLYPHIC LETTER WAMEROITIC HIEROGLYPHIC LETTER B" + + "AMEROITIC HIEROGLYPHIC LETTER BA-2MEROITIC HIEROGLYPHIC LETTER PAMEROITI" + + "C HIEROGLYPHIC LETTER MAMEROITIC HIEROGLYPHIC LETTER NAMEROITIC HIEROGLY" + + "PHIC LETTER NA-2MEROITIC HIEROGLYPHIC LETTER NEMEROITIC HIEROGLYPHIC LET" + + "TER NE-2MEROITIC HIEROGLYPHIC LETTER RAMEROITIC HIEROGLYPHIC LETTER RA-2" + + "MEROITIC HIEROGLYPHIC LETTER LAMEROITIC HIEROGLYPHIC LETTER KHAMEROITIC " + + "HIEROGLYPHIC LETTER HHAMEROITIC HIEROGLYPHIC LETTER SAMEROITIC HIEROGLYP" + + "HIC LETTER SA-2MEROITIC HIEROGLYPHIC LETTER SEMEROITIC HIEROGLYPHIC LETT" + + "ER KAMEROITIC HIEROGLYPHIC LETTER QAMEROITIC HIEROGLYPHIC LETTER TAMEROI" + + "TIC HIEROGLYPHIC LETTER TA-2MEROITIC HIEROGLYPHIC LETTER TEMEROITIC HIER" + + "OGLYPHIC LETTER TE-2MEROITIC HIEROGLYPHIC LETTER TOMEROITIC HIEROGLYPHIC" + + " LETTER DAMEROITIC HIEROGLYPHIC SYMBOL VIDJMEROITIC HIEROGLYPHIC SYMBOL " + + "VIDJ-2MEROITIC CURSIVE LETTER AMEROITIC CURSIVE LETTER EMEROITIC CURSIVE" + + " LETTER IMEROITIC CURSIVE LETTER OMEROITIC CURSIVE LETTER YAMEROITIC CUR" + + "SIVE LETTER WAMEROITIC CURSIVE LETTER BAMEROITIC CURSIVE LETTER PAMEROIT" + + "IC CURSIVE LETTER MAMEROITIC CURSIVE LETTER NAMEROITIC CURSIVE LETTER NE" + + "MEROITIC CURSIVE LETTER RAMEROITIC CURSIVE LETTER LAMEROITIC CURSIVE LET" + + "TER KHAMEROITIC CURSIVE LETTER HHAMEROITIC CURSIVE LETTER SAMEROITIC CUR" + + "SIVE LETTER ARCHAIC SAMEROITIC CURSIVE LETTER SEMEROITIC CURSIVE LETTER " + + "KAMEROITIC CURSIVE LETTER QAMEROITIC CURSIVE LETTER TAMEROITIC CURSIVE L" + + "ETTER TEMEROITIC CURSIVE LETTER TOMEROITIC CURSIVE LETTER DAMEROITIC CUR" + + "SIVE FRACTION ELEVEN TWELFTHSMEROITIC CURSIVE FRACTION ONE HALFMEROITIC " + + "CURSIVE LOGOGRAM RMTMEROITIC CURSIVE LOGOGRAM IMNMEROITIC CURSIVE NUMBER" + + " ONEMEROITIC CURSIVE NUMBER TWOMEROITIC CURSIVE NUMBER THREEMEROITIC CUR" + + "SIVE NUMBER FOURMEROITIC CURSIVE NUMBER FIVEMEROITIC CURSIVE NUMBER SIXM" + + "EROITIC CURSIVE NUMBER SEVENMEROITIC CURSIVE NUMBER EIGHTMEROITIC CURSIV" + + "E NUMBER NINEMEROITIC CURSIVE NUMBER TENMEROITIC CURSIVE NUMBER TWENTYME" + + "ROITIC CURSIVE NUMBER THIRTYMEROITIC CURSIVE NUMBER FORTYMEROITIC CURSIV" + + "E NUMBER FIFTYMEROITIC CURSIVE NUMBER SIXTYMEROITIC CURSIVE NUMBER SEVEN") + ("" + + "TYMEROITIC CURSIVE NUMBER ONE HUNDREDMEROITIC CURSIVE NUMBER TWO HUNDRED" + + "MEROITIC CURSIVE NUMBER THREE HUNDREDMEROITIC CURSIVE NUMBER FOUR HUNDRE" + + "DMEROITIC CURSIVE NUMBER FIVE HUNDREDMEROITIC CURSIVE NUMBER SIX HUNDRED" + + "MEROITIC CURSIVE NUMBER SEVEN HUNDREDMEROITIC CURSIVE NUMBER EIGHT HUNDR" + + "EDMEROITIC CURSIVE NUMBER NINE HUNDREDMEROITIC CURSIVE NUMBER ONE THOUSA" + + "NDMEROITIC CURSIVE NUMBER TWO THOUSANDMEROITIC CURSIVE NUMBER THREE THOU" + + "SANDMEROITIC CURSIVE NUMBER FOUR THOUSANDMEROITIC CURSIVE NUMBER FIVE TH" + + "OUSANDMEROITIC CURSIVE NUMBER SIX THOUSANDMEROITIC CURSIVE NUMBER SEVEN " + + "THOUSANDMEROITIC CURSIVE NUMBER EIGHT THOUSANDMEROITIC CURSIVE NUMBER NI" + + "NE THOUSANDMEROITIC CURSIVE NUMBER TEN THOUSANDMEROITIC CURSIVE NUMBER T" + + "WENTY THOUSANDMEROITIC CURSIVE NUMBER THIRTY THOUSANDMEROITIC CURSIVE NU" + + "MBER FORTY THOUSANDMEROITIC CURSIVE NUMBER FIFTY THOUSANDMEROITIC CURSIV" + + "E NUMBER SIXTY THOUSANDMEROITIC CURSIVE NUMBER SEVENTY THOUSANDMEROITIC " + + "CURSIVE NUMBER EIGHTY THOUSANDMEROITIC CURSIVE NUMBER NINETY THOUSANDMER" + + "OITIC CURSIVE NUMBER ONE HUNDRED THOUSANDMEROITIC CURSIVE NUMBER TWO HUN" + + "DRED THOUSANDMEROITIC CURSIVE NUMBER THREE HUNDRED THOUSANDMEROITIC CURS" + + "IVE NUMBER FOUR HUNDRED THOUSANDMEROITIC CURSIVE NUMBER FIVE HUNDRED THO" + + "USANDMEROITIC CURSIVE NUMBER SIX HUNDRED THOUSANDMEROITIC CURSIVE NUMBER" + + " SEVEN HUNDRED THOUSANDMEROITIC CURSIVE NUMBER EIGHT HUNDRED THOUSANDMER" + + "OITIC CURSIVE NUMBER NINE HUNDRED THOUSANDMEROITIC CURSIVE FRACTION ONE " + + "TWELFTHMEROITIC CURSIVE FRACTION TWO TWELFTHSMEROITIC CURSIVE FRACTION T" + + "HREE TWELFTHSMEROITIC CURSIVE FRACTION FOUR TWELFTHSMEROITIC CURSIVE FRA" + + "CTION FIVE TWELFTHSMEROITIC CURSIVE FRACTION SIX TWELFTHSMEROITIC CURSIV" + + "E FRACTION SEVEN TWELFTHSMEROITIC CURSIVE FRACTION EIGHT TWELFTHSMEROITI" + + "C CURSIVE FRACTION NINE TWELFTHSMEROITIC CURSIVE FRACTION TEN TWELFTHSKH" + + "AROSHTHI LETTER AKHAROSHTHI VOWEL SIGN IKHAROSHTHI VOWEL SIGN UKHAROSHTH" + + "I VOWEL SIGN VOCALIC RKHAROSHTHI VOWEL SIGN EKHAROSHTHI VOWEL SIGN OKHAR" + + "OSHTHI VOWEL LENGTH MARKKHAROSHTHI SIGN DOUBLE RING BELOWKHAROSHTHI SIGN" + + " ANUSVARAKHAROSHTHI SIGN VISARGAKHAROSHTHI LETTER KAKHAROSHTHI LETTER KH" + + "AKHAROSHTHI LETTER GAKHAROSHTHI LETTER GHAKHAROSHTHI LETTER CAKHAROSHTHI" + + " LETTER CHAKHAROSHTHI LETTER JAKHAROSHTHI LETTER NYAKHAROSHTHI LETTER TT" + + "AKHAROSHTHI LETTER TTHAKHAROSHTHI LETTER DDAKHAROSHTHI LETTER DDHAKHAROS" + + "HTHI LETTER NNAKHAROSHTHI LETTER TAKHAROSHTHI LETTER THAKHAROSHTHI LETTE" + + "R DAKHAROSHTHI LETTER DHAKHAROSHTHI LETTER NAKHAROSHTHI LETTER PAKHAROSH" + + "THI LETTER PHAKHAROSHTHI LETTER BAKHAROSHTHI LETTER BHAKHAROSHTHI LETTER" + + " MAKHAROSHTHI LETTER YAKHAROSHTHI LETTER RAKHAROSHTHI LETTER LAKHAROSHTH" + + "I LETTER VAKHAROSHTHI LETTER SHAKHAROSHTHI LETTER SSAKHAROSHTHI LETTER S" + + "AKHAROSHTHI LETTER ZAKHAROSHTHI LETTER HAKHAROSHTHI LETTER KKAKHAROSHTHI" + + " LETTER TTTHAKHAROSHTHI SIGN BAR ABOVEKHAROSHTHI SIGN CAUDAKHAROSHTHI SI" + + "GN DOT BELOWKHAROSHTHI VIRAMAKHAROSHTHI DIGIT ONEKHAROSHTHI DIGIT TWOKHA" + + "ROSHTHI DIGIT THREEKHAROSHTHI DIGIT FOURKHAROSHTHI NUMBER TENKHAROSHTHI " + + "NUMBER TWENTYKHAROSHTHI NUMBER ONE HUNDREDKHAROSHTHI NUMBER ONE THOUSAND" + + "KHAROSHTHI PUNCTUATION DOTKHAROSHTHI PUNCTUATION SMALL CIRCLEKHAROSHTHI " + + "PUNCTUATION CIRCLEKHAROSHTHI PUNCTUATION CRESCENT BARKHAROSHTHI PUNCTUAT" + + "ION MANGALAMKHAROSHTHI PUNCTUATION LOTUSKHAROSHTHI PUNCTUATION DANDAKHAR" + + "OSHTHI PUNCTUATION DOUBLE DANDAKHAROSHTHI PUNCTUATION LINESOLD SOUTH ARA" + + "BIAN LETTER HEOLD SOUTH ARABIAN LETTER LAMEDHOLD SOUTH ARABIAN LETTER HE" + + "THOLD SOUTH ARABIAN LETTER MEMOLD SOUTH ARABIAN LETTER QOPHOLD SOUTH ARA" + + "BIAN LETTER WAWOLD SOUTH ARABIAN LETTER SHINOLD SOUTH ARABIAN LETTER RES" + + "HOLD SOUTH ARABIAN LETTER BETHOLD SOUTH ARABIAN LETTER TAWOLD SOUTH ARAB" + + "IAN LETTER SATOLD SOUTH ARABIAN LETTER KAPHOLD SOUTH ARABIAN LETTER NUNO" + + "LD SOUTH ARABIAN LETTER KHETHOLD SOUTH ARABIAN LETTER SADHEOLD SOUTH ARA" + + "BIAN LETTER SAMEKHOLD SOUTH ARABIAN LETTER FEOLD SOUTH ARABIAN LETTER AL" + + "EFOLD SOUTH ARABIAN LETTER AYNOLD SOUTH ARABIAN LETTER DHADHEOLD SOUTH A" + + "RABIAN LETTER GIMELOLD SOUTH ARABIAN LETTER DALETHOLD SOUTH ARABIAN LETT" + + "ER GHAYNOLD SOUTH ARABIAN LETTER TETHOLD SOUTH ARABIAN LETTER ZAYNOLD SO" + + "UTH ARABIAN LETTER DHALETHOLD SOUTH ARABIAN LETTER YODHOLD SOUTH ARABIAN" + + " LETTER THAWOLD SOUTH ARABIAN LETTER THETHOLD SOUTH ARABIAN NUMBER ONEOL" + + "D SOUTH ARABIAN NUMBER FIFTYOLD SOUTH ARABIAN NUMERIC INDICATOROLD NORTH" + + " ARABIAN LETTER HEHOLD NORTH ARABIAN LETTER LAMOLD NORTH ARABIAN LETTER " + + "HAHOLD NORTH ARABIAN LETTER MEEMOLD NORTH ARABIAN LETTER QAFOLD NORTH AR" + + "ABIAN LETTER WAWOLD NORTH ARABIAN LETTER ES-2OLD NORTH ARABIAN LETTER RE" + + "HOLD NORTH ARABIAN LETTER BEHOLD NORTH ARABIAN LETTER TEHOLD NORTH ARABI" + + "AN LETTER ES-1OLD NORTH ARABIAN LETTER KAFOLD NORTH ARABIAN LETTER NOONO") + ("" + + "LD NORTH ARABIAN LETTER KHAHOLD NORTH ARABIAN LETTER SADOLD NORTH ARABIA" + + "N LETTER ES-3OLD NORTH ARABIAN LETTER FEHOLD NORTH ARABIAN LETTER ALEFOL" + + "D NORTH ARABIAN LETTER AINOLD NORTH ARABIAN LETTER DADOLD NORTH ARABIAN " + + "LETTER GEEMOLD NORTH ARABIAN LETTER DALOLD NORTH ARABIAN LETTER GHAINOLD" + + " NORTH ARABIAN LETTER TAHOLD NORTH ARABIAN LETTER ZAINOLD NORTH ARABIAN " + + "LETTER THALOLD NORTH ARABIAN LETTER YEHOLD NORTH ARABIAN LETTER THEHOLD " + + "NORTH ARABIAN LETTER ZAHOLD NORTH ARABIAN NUMBER ONEOLD NORTH ARABIAN NU" + + "MBER TENOLD NORTH ARABIAN NUMBER TWENTYMANICHAEAN LETTER ALEPHMANICHAEAN" + + " LETTER BETHMANICHAEAN LETTER BHETHMANICHAEAN LETTER GIMELMANICHAEAN LET" + + "TER GHIMELMANICHAEAN LETTER DALETHMANICHAEAN LETTER HEMANICHAEAN LETTER " + + "WAWMANICHAEAN SIGN UDMANICHAEAN LETTER ZAYINMANICHAEAN LETTER ZHAYINMANI" + + "CHAEAN LETTER JAYINMANICHAEAN LETTER JHAYINMANICHAEAN LETTER HETHMANICHA" + + "EAN LETTER TETHMANICHAEAN LETTER YODHMANICHAEAN LETTER KAPHMANICHAEAN LE" + + "TTER XAPHMANICHAEAN LETTER KHAPHMANICHAEAN LETTER LAMEDHMANICHAEAN LETTE" + + "R DHAMEDHMANICHAEAN LETTER THAMEDHMANICHAEAN LETTER MEMMANICHAEAN LETTER" + + " NUNMANICHAEAN LETTER SAMEKHMANICHAEAN LETTER AYINMANICHAEAN LETTER AAYI" + + "NMANICHAEAN LETTER PEMANICHAEAN LETTER FEMANICHAEAN LETTER SADHEMANICHAE" + + "AN LETTER QOPHMANICHAEAN LETTER XOPHMANICHAEAN LETTER QHOPHMANICHAEAN LE" + + "TTER RESHMANICHAEAN LETTER SHINMANICHAEAN LETTER SSHINMANICHAEAN LETTER " + + "TAWMANICHAEAN ABBREVIATION MARK ABOVEMANICHAEAN ABBREVIATION MARK BELOWM" + + "ANICHAEAN NUMBER ONEMANICHAEAN NUMBER FIVEMANICHAEAN NUMBER TENMANICHAEA" + + "N NUMBER TWENTYMANICHAEAN NUMBER ONE HUNDREDMANICHAEAN PUNCTUATION STARM" + + "ANICHAEAN PUNCTUATION FLEURONMANICHAEAN PUNCTUATION DOUBLE DOT WITHIN DO" + + "TMANICHAEAN PUNCTUATION DOT WITHIN DOTMANICHAEAN PUNCTUATION DOTMANICHAE" + + "AN PUNCTUATION TWO DOTSMANICHAEAN PUNCTUATION LINE FILLERAVESTAN LETTER " + + "AAVESTAN LETTER AAAVESTAN LETTER AOAVESTAN LETTER AAOAVESTAN LETTER ANAV" + + "ESTAN LETTER AANAVESTAN LETTER AEAVESTAN LETTER AEEAVESTAN LETTER EAVEST" + + "AN LETTER EEAVESTAN LETTER OAVESTAN LETTER OOAVESTAN LETTER IAVESTAN LET" + + "TER IIAVESTAN LETTER UAVESTAN LETTER UUAVESTAN LETTER KEAVESTAN LETTER X" + + "EAVESTAN LETTER XYEAVESTAN LETTER XVEAVESTAN LETTER GEAVESTAN LETTER GGE" + + "AVESTAN LETTER GHEAVESTAN LETTER CEAVESTAN LETTER JEAVESTAN LETTER TEAVE" + + "STAN LETTER THEAVESTAN LETTER DEAVESTAN LETTER DHEAVESTAN LETTER TTEAVES" + + "TAN LETTER PEAVESTAN LETTER FEAVESTAN LETTER BEAVESTAN LETTER BHEAVESTAN" + + " LETTER NGEAVESTAN LETTER NGYEAVESTAN LETTER NGVEAVESTAN LETTER NEAVESTA" + + "N LETTER NYEAVESTAN LETTER NNEAVESTAN LETTER MEAVESTAN LETTER HMEAVESTAN" + + " LETTER YYEAVESTAN LETTER YEAVESTAN LETTER VEAVESTAN LETTER REAVESTAN LE" + + "TTER LEAVESTAN LETTER SEAVESTAN LETTER ZEAVESTAN LETTER SHEAVESTAN LETTE" + + "R ZHEAVESTAN LETTER SHYEAVESTAN LETTER SSHEAVESTAN LETTER HEAVESTAN ABBR" + + "EVIATION MARKTINY TWO DOTS OVER ONE DOT PUNCTUATIONSMALL TWO DOTS OVER O" + + "NE DOT PUNCTUATIONLARGE TWO DOTS OVER ONE DOT PUNCTUATIONLARGE ONE DOT O" + + "VER TWO DOTS PUNCTUATIONLARGE TWO RINGS OVER ONE RING PUNCTUATIONLARGE O" + + "NE RING OVER TWO RINGS PUNCTUATIONINSCRIPTIONAL PARTHIAN LETTER ALEPHINS" + + "CRIPTIONAL PARTHIAN LETTER BETHINSCRIPTIONAL PARTHIAN LETTER GIMELINSCRI" + + "PTIONAL PARTHIAN LETTER DALETHINSCRIPTIONAL PARTHIAN LETTER HEINSCRIPTIO" + + "NAL PARTHIAN LETTER WAWINSCRIPTIONAL PARTHIAN LETTER ZAYININSCRIPTIONAL " + + "PARTHIAN LETTER HETHINSCRIPTIONAL PARTHIAN LETTER TETHINSCRIPTIONAL PART" + + "HIAN LETTER YODHINSCRIPTIONAL PARTHIAN LETTER KAPHINSCRIPTIONAL PARTHIAN" + + " LETTER LAMEDHINSCRIPTIONAL PARTHIAN LETTER MEMINSCRIPTIONAL PARTHIAN LE" + + "TTER NUNINSCRIPTIONAL PARTHIAN LETTER SAMEKHINSCRIPTIONAL PARTHIAN LETTE" + + "R AYININSCRIPTIONAL PARTHIAN LETTER PEINSCRIPTIONAL PARTHIAN LETTER SADH" + + "EINSCRIPTIONAL PARTHIAN LETTER QOPHINSCRIPTIONAL PARTHIAN LETTER RESHINS" + + "CRIPTIONAL PARTHIAN LETTER SHININSCRIPTIONAL PARTHIAN LETTER TAWINSCRIPT" + + "IONAL PARTHIAN NUMBER ONEINSCRIPTIONAL PARTHIAN NUMBER TWOINSCRIPTIONAL " + + "PARTHIAN NUMBER THREEINSCRIPTIONAL PARTHIAN NUMBER FOURINSCRIPTIONAL PAR" + + "THIAN NUMBER TENINSCRIPTIONAL PARTHIAN NUMBER TWENTYINSCRIPTIONAL PARTHI" + + "AN NUMBER ONE HUNDREDINSCRIPTIONAL PARTHIAN NUMBER ONE THOUSANDINSCRIPTI" + + "ONAL PAHLAVI LETTER ALEPHINSCRIPTIONAL PAHLAVI LETTER BETHINSCRIPTIONAL " + + "PAHLAVI LETTER GIMELINSCRIPTIONAL PAHLAVI LETTER DALETHINSCRIPTIONAL PAH" + + "LAVI LETTER HEINSCRIPTIONAL PAHLAVI LETTER WAW-AYIN-RESHINSCRIPTIONAL PA" + + "HLAVI LETTER ZAYININSCRIPTIONAL PAHLAVI LETTER HETHINSCRIPTIONAL PAHLAVI" + + " LETTER TETHINSCRIPTIONAL PAHLAVI LETTER YODHINSCRIPTIONAL PAHLAVI LETTE" + + "R KAPHINSCRIPTIONAL PAHLAVI LETTER LAMEDHINSCRIPTIONAL PAHLAVI LETTER ME" + + "M-QOPHINSCRIPTIONAL PAHLAVI LETTER NUNINSCRIPTIONAL PAHLAVI LETTER SAMEK" + + "HINSCRIPTIONAL PAHLAVI LETTER PEINSCRIPTIONAL PAHLAVI LETTER SADHEINSCRI") + ("" + + "PTIONAL PAHLAVI LETTER SHININSCRIPTIONAL PAHLAVI LETTER TAWINSCRIPTIONAL" + + " PAHLAVI NUMBER ONEINSCRIPTIONAL PAHLAVI NUMBER TWOINSCRIPTIONAL PAHLAVI" + + " NUMBER THREEINSCRIPTIONAL PAHLAVI NUMBER FOURINSCRIPTIONAL PAHLAVI NUMB" + + "ER TENINSCRIPTIONAL PAHLAVI NUMBER TWENTYINSCRIPTIONAL PAHLAVI NUMBER ON" + + "E HUNDREDINSCRIPTIONAL PAHLAVI NUMBER ONE THOUSANDPSALTER PAHLAVI LETTER" + + " ALEPHPSALTER PAHLAVI LETTER BETHPSALTER PAHLAVI LETTER GIMELPSALTER PAH" + + "LAVI LETTER DALETHPSALTER PAHLAVI LETTER HEPSALTER PAHLAVI LETTER WAW-AY" + + "IN-RESHPSALTER PAHLAVI LETTER ZAYINPSALTER PAHLAVI LETTER HETHPSALTER PA" + + "HLAVI LETTER YODHPSALTER PAHLAVI LETTER KAPHPSALTER PAHLAVI LETTER LAMED" + + "HPSALTER PAHLAVI LETTER MEM-QOPHPSALTER PAHLAVI LETTER NUNPSALTER PAHLAV" + + "I LETTER SAMEKHPSALTER PAHLAVI LETTER PEPSALTER PAHLAVI LETTER SADHEPSAL" + + "TER PAHLAVI LETTER SHINPSALTER PAHLAVI LETTER TAWPSALTER PAHLAVI SECTION" + + " MARKPSALTER PAHLAVI TURNED SECTION MARKPSALTER PAHLAVI FOUR DOTS WITH C" + + "ROSSPSALTER PAHLAVI FOUR DOTS WITH DOTPSALTER PAHLAVI NUMBER ONEPSALTER " + + "PAHLAVI NUMBER TWOPSALTER PAHLAVI NUMBER THREEPSALTER PAHLAVI NUMBER FOU" + + "RPSALTER PAHLAVI NUMBER TENPSALTER PAHLAVI NUMBER TWENTYPSALTER PAHLAVI " + + "NUMBER ONE HUNDREDOLD TURKIC LETTER ORKHON AOLD TURKIC LETTER YENISEI AO" + + "LD TURKIC LETTER YENISEI AEOLD TURKIC LETTER ORKHON IOLD TURKIC LETTER Y" + + "ENISEI IOLD TURKIC LETTER YENISEI EOLD TURKIC LETTER ORKHON OOLD TURKIC " + + "LETTER ORKHON OEOLD TURKIC LETTER YENISEI OEOLD TURKIC LETTER ORKHON ABO" + + "LD TURKIC LETTER YENISEI ABOLD TURKIC LETTER ORKHON AEBOLD TURKIC LETTER" + + " YENISEI AEBOLD TURKIC LETTER ORKHON AGOLD TURKIC LETTER YENISEI AGOLD T" + + "URKIC LETTER ORKHON AEGOLD TURKIC LETTER YENISEI AEGOLD TURKIC LETTER OR" + + "KHON ADOLD TURKIC LETTER YENISEI ADOLD TURKIC LETTER ORKHON AEDOLD TURKI" + + "C LETTER ORKHON EZOLD TURKIC LETTER YENISEI EZOLD TURKIC LETTER ORKHON A" + + "YOLD TURKIC LETTER YENISEI AYOLD TURKIC LETTER ORKHON AEYOLD TURKIC LETT" + + "ER YENISEI AEYOLD TURKIC LETTER ORKHON AEKOLD TURKIC LETTER YENISEI AEKO" + + "LD TURKIC LETTER ORKHON OEKOLD TURKIC LETTER YENISEI OEKOLD TURKIC LETTE" + + "R ORKHON ALOLD TURKIC LETTER YENISEI ALOLD TURKIC LETTER ORKHON AELOLD T" + + "URKIC LETTER ORKHON ELTOLD TURKIC LETTER ORKHON EMOLD TURKIC LETTER ORKH" + + "ON ANOLD TURKIC LETTER ORKHON AENOLD TURKIC LETTER YENISEI AENOLD TURKIC" + + " LETTER ORKHON ENTOLD TURKIC LETTER YENISEI ENTOLD TURKIC LETTER ORKHON " + + "ENCOLD TURKIC LETTER YENISEI ENCOLD TURKIC LETTER ORKHON ENYOLD TURKIC L" + + "ETTER YENISEI ENYOLD TURKIC LETTER YENISEI ANGOLD TURKIC LETTER ORKHON E" + + "NGOLD TURKIC LETTER YENISEI AENGOLD TURKIC LETTER ORKHON EPOLD TURKIC LE" + + "TTER ORKHON OPOLD TURKIC LETTER ORKHON ICOLD TURKIC LETTER ORKHON ECOLD " + + "TURKIC LETTER YENISEI ECOLD TURKIC LETTER ORKHON AQOLD TURKIC LETTER YEN" + + "ISEI AQOLD TURKIC LETTER ORKHON IQOLD TURKIC LETTER YENISEI IQOLD TURKIC" + + " LETTER ORKHON OQOLD TURKIC LETTER YENISEI OQOLD TURKIC LETTER ORKHON AR" + + "OLD TURKIC LETTER YENISEI AROLD TURKIC LETTER ORKHON AEROLD TURKIC LETTE" + + "R ORKHON ASOLD TURKIC LETTER ORKHON AESOLD TURKIC LETTER ORKHON ASHOLD T" + + "URKIC LETTER YENISEI ASHOLD TURKIC LETTER ORKHON ESHOLD TURKIC LETTER YE" + + "NISEI ESHOLD TURKIC LETTER ORKHON ATOLD TURKIC LETTER YENISEI ATOLD TURK" + + "IC LETTER ORKHON AETOLD TURKIC LETTER YENISEI AETOLD TURKIC LETTER ORKHO" + + "N OTOLD TURKIC LETTER ORKHON BASHOLD HUNGARIAN CAPITAL LETTER AOLD HUNGA" + + "RIAN CAPITAL LETTER AAOLD HUNGARIAN CAPITAL LETTER EBOLD HUNGARIAN CAPIT" + + "AL LETTER AMBOLD HUNGARIAN CAPITAL LETTER ECOLD HUNGARIAN CAPITAL LETTER" + + " ENCOLD HUNGARIAN CAPITAL LETTER ECSOLD HUNGARIAN CAPITAL LETTER EDOLD H" + + "UNGARIAN CAPITAL LETTER ANDOLD HUNGARIAN CAPITAL LETTER EOLD HUNGARIAN C" + + "APITAL LETTER CLOSE EOLD HUNGARIAN CAPITAL LETTER EEOLD HUNGARIAN CAPITA" + + "L LETTER EFOLD HUNGARIAN CAPITAL LETTER EGOLD HUNGARIAN CAPITAL LETTER E" + + "GYOLD HUNGARIAN CAPITAL LETTER EHOLD HUNGARIAN CAPITAL LETTER IOLD HUNGA" + + "RIAN CAPITAL LETTER IIOLD HUNGARIAN CAPITAL LETTER EJOLD HUNGARIAN CAPIT" + + "AL LETTER EKOLD HUNGARIAN CAPITAL LETTER AKOLD HUNGARIAN CAPITAL LETTER " + + "UNKOLD HUNGARIAN CAPITAL LETTER ELOLD HUNGARIAN CAPITAL LETTER ELYOLD HU" + + "NGARIAN CAPITAL LETTER EMOLD HUNGARIAN CAPITAL LETTER ENOLD HUNGARIAN CA" + + "PITAL LETTER ENYOLD HUNGARIAN CAPITAL LETTER OOLD HUNGARIAN CAPITAL LETT" + + "ER OOOLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OEOLD HUNGARIAN CAPITAL LET" + + "TER RUDIMENTA OEOLD HUNGARIAN CAPITAL LETTER OEEOLD HUNGARIAN CAPITAL LE" + + "TTER EPOLD HUNGARIAN CAPITAL LETTER EMPOLD HUNGARIAN CAPITAL LETTER EROL" + + "D HUNGARIAN CAPITAL LETTER SHORT EROLD HUNGARIAN CAPITAL LETTER ESOLD HU" + + "NGARIAN CAPITAL LETTER ESZOLD HUNGARIAN CAPITAL LETTER ETOLD HUNGARIAN C" + + "APITAL LETTER ENTOLD HUNGARIAN CAPITAL LETTER ETYOLD HUNGARIAN CAPITAL L" + + "ETTER ECHOLD HUNGARIAN CAPITAL LETTER UOLD HUNGARIAN CAPITAL LETTER UUOL") + ("" + + "D HUNGARIAN CAPITAL LETTER NIKOLSBURG UEOLD HUNGARIAN CAPITAL LETTER RUD" + + "IMENTA UEOLD HUNGARIAN CAPITAL LETTER EVOLD HUNGARIAN CAPITAL LETTER EZO" + + "LD HUNGARIAN CAPITAL LETTER EZSOLD HUNGARIAN CAPITAL LETTER ENT-SHAPED S" + + "IGNOLD HUNGARIAN CAPITAL LETTER USOLD HUNGARIAN SMALL LETTER AOLD HUNGAR" + + "IAN SMALL LETTER AAOLD HUNGARIAN SMALL LETTER EBOLD HUNGARIAN SMALL LETT" + + "ER AMBOLD HUNGARIAN SMALL LETTER ECOLD HUNGARIAN SMALL LETTER ENCOLD HUN" + + "GARIAN SMALL LETTER ECSOLD HUNGARIAN SMALL LETTER EDOLD HUNGARIAN SMALL " + + "LETTER ANDOLD HUNGARIAN SMALL LETTER EOLD HUNGARIAN SMALL LETTER CLOSE E" + + "OLD HUNGARIAN SMALL LETTER EEOLD HUNGARIAN SMALL LETTER EFOLD HUNGARIAN " + + "SMALL LETTER EGOLD HUNGARIAN SMALL LETTER EGYOLD HUNGARIAN SMALL LETTER " + + "EHOLD HUNGARIAN SMALL LETTER IOLD HUNGARIAN SMALL LETTER IIOLD HUNGARIAN" + + " SMALL LETTER EJOLD HUNGARIAN SMALL LETTER EKOLD HUNGARIAN SMALL LETTER " + + "AKOLD HUNGARIAN SMALL LETTER UNKOLD HUNGARIAN SMALL LETTER ELOLD HUNGARI" + + "AN SMALL LETTER ELYOLD HUNGARIAN SMALL LETTER EMOLD HUNGARIAN SMALL LETT" + + "ER ENOLD HUNGARIAN SMALL LETTER ENYOLD HUNGARIAN SMALL LETTER OOLD HUNGA" + + "RIAN SMALL LETTER OOOLD HUNGARIAN SMALL LETTER NIKOLSBURG OEOLD HUNGARIA" + + "N SMALL LETTER RUDIMENTA OEOLD HUNGARIAN SMALL LETTER OEEOLD HUNGARIAN S" + + "MALL LETTER EPOLD HUNGARIAN SMALL LETTER EMPOLD HUNGARIAN SMALL LETTER E" + + "ROLD HUNGARIAN SMALL LETTER SHORT EROLD HUNGARIAN SMALL LETTER ESOLD HUN" + + "GARIAN SMALL LETTER ESZOLD HUNGARIAN SMALL LETTER ETOLD HUNGARIAN SMALL " + + "LETTER ENTOLD HUNGARIAN SMALL LETTER ETYOLD HUNGARIAN SMALL LETTER ECHOL" + + "D HUNGARIAN SMALL LETTER UOLD HUNGARIAN SMALL LETTER UUOLD HUNGARIAN SMA" + + "LL LETTER NIKOLSBURG UEOLD HUNGARIAN SMALL LETTER RUDIMENTA UEOLD HUNGAR" + + "IAN SMALL LETTER EVOLD HUNGARIAN SMALL LETTER EZOLD HUNGARIAN SMALL LETT" + + "ER EZSOLD HUNGARIAN SMALL LETTER ENT-SHAPED SIGNOLD HUNGARIAN SMALL LETT" + + "ER USOLD HUNGARIAN NUMBER ONEOLD HUNGARIAN NUMBER FIVEOLD HUNGARIAN NUMB" + + "ER TENOLD HUNGARIAN NUMBER FIFTYOLD HUNGARIAN NUMBER ONE HUNDREDOLD HUNG" + + "ARIAN NUMBER ONE THOUSANDRUMI DIGIT ONERUMI DIGIT TWORUMI DIGIT THREERUM" + + "I DIGIT FOURRUMI DIGIT FIVERUMI DIGIT SIXRUMI DIGIT SEVENRUMI DIGIT EIGH" + + "TRUMI DIGIT NINERUMI NUMBER TENRUMI NUMBER TWENTYRUMI NUMBER THIRTYRUMI " + + "NUMBER FORTYRUMI NUMBER FIFTYRUMI NUMBER SIXTYRUMI NUMBER SEVENTYRUMI NU" + + "MBER EIGHTYRUMI NUMBER NINETYRUMI NUMBER ONE HUNDREDRUMI NUMBER TWO HUND" + + "REDRUMI NUMBER THREE HUNDREDRUMI NUMBER FOUR HUNDREDRUMI NUMBER FIVE HUN" + + "DREDRUMI NUMBER SIX HUNDREDRUMI NUMBER SEVEN HUNDREDRUMI NUMBER EIGHT HU" + + "NDREDRUMI NUMBER NINE HUNDREDRUMI FRACTION ONE HALFRUMI FRACTION ONE QUA" + + "RTERRUMI FRACTION ONE THIRDRUMI FRACTION TWO THIRDSBRAHMI SIGN CANDRABIN" + + "DUBRAHMI SIGN ANUSVARABRAHMI SIGN VISARGABRAHMI SIGN JIHVAMULIYABRAHMI S" + + "IGN UPADHMANIYABRAHMI LETTER ABRAHMI LETTER AABRAHMI LETTER IBRAHMI LETT" + + "ER IIBRAHMI LETTER UBRAHMI LETTER UUBRAHMI LETTER VOCALIC RBRAHMI LETTER" + + " VOCALIC RRBRAHMI LETTER VOCALIC LBRAHMI LETTER VOCALIC LLBRAHMI LETTER " + + "EBRAHMI LETTER AIBRAHMI LETTER OBRAHMI LETTER AUBRAHMI LETTER KABRAHMI L" + + "ETTER KHABRAHMI LETTER GABRAHMI LETTER GHABRAHMI LETTER NGABRAHMI LETTER" + + " CABRAHMI LETTER CHABRAHMI LETTER JABRAHMI LETTER JHABRAHMI LETTER NYABR" + + "AHMI LETTER TTABRAHMI LETTER TTHABRAHMI LETTER DDABRAHMI LETTER DDHABRAH" + + "MI LETTER NNABRAHMI LETTER TABRAHMI LETTER THABRAHMI LETTER DABRAHMI LET" + + "TER DHABRAHMI LETTER NABRAHMI LETTER PABRAHMI LETTER PHABRAHMI LETTER BA" + + "BRAHMI LETTER BHABRAHMI LETTER MABRAHMI LETTER YABRAHMI LETTER RABRAHMI " + + "LETTER LABRAHMI LETTER VABRAHMI LETTER SHABRAHMI LETTER SSABRAHMI LETTER" + + " SABRAHMI LETTER HABRAHMI LETTER LLABRAHMI LETTER OLD TAMIL LLLABRAHMI L" + + "ETTER OLD TAMIL RRABRAHMI LETTER OLD TAMIL NNNABRAHMI VOWEL SIGN AABRAHM" + + "I VOWEL SIGN BHATTIPROLU AABRAHMI VOWEL SIGN IBRAHMI VOWEL SIGN IIBRAHMI" + + " VOWEL SIGN UBRAHMI VOWEL SIGN UUBRAHMI VOWEL SIGN VOCALIC RBRAHMI VOWEL" + + " SIGN VOCALIC RRBRAHMI VOWEL SIGN VOCALIC LBRAHMI VOWEL SIGN VOCALIC LLB" + + "RAHMI VOWEL SIGN EBRAHMI VOWEL SIGN AIBRAHMI VOWEL SIGN OBRAHMI VOWEL SI" + + "GN AUBRAHMI VIRAMABRAHMI DANDABRAHMI DOUBLE DANDABRAHMI PUNCTUATION DOTB" + + "RAHMI PUNCTUATION DOUBLE DOTBRAHMI PUNCTUATION LINEBRAHMI PUNCTUATION CR" + + "ESCENT BARBRAHMI PUNCTUATION LOTUSBRAHMI NUMBER ONEBRAHMI NUMBER TWOBRAH" + + "MI NUMBER THREEBRAHMI NUMBER FOURBRAHMI NUMBER FIVEBRAHMI NUMBER SIXBRAH" + + "MI NUMBER SEVENBRAHMI NUMBER EIGHTBRAHMI NUMBER NINEBRAHMI NUMBER TENBRA" + + "HMI NUMBER TWENTYBRAHMI NUMBER THIRTYBRAHMI NUMBER FORTYBRAHMI NUMBER FI" + + "FTYBRAHMI NUMBER SIXTYBRAHMI NUMBER SEVENTYBRAHMI NUMBER EIGHTYBRAHMI NU" + + "MBER NINETYBRAHMI NUMBER ONE HUNDREDBRAHMI NUMBER ONE THOUSANDBRAHMI DIG" + + "IT ZEROBRAHMI DIGIT ONEBRAHMI DIGIT TWOBRAHMI DIGIT THREEBRAHMI DIGIT FO" + + "URBRAHMI DIGIT FIVEBRAHMI DIGIT SIXBRAHMI DIGIT SEVENBRAHMI DIGIT EIGHTB") + ("" + + "RAHMI DIGIT NINEBRAHMI NUMBER JOINERKAITHI SIGN CANDRABINDUKAITHI SIGN A" + + "NUSVARAKAITHI SIGN VISARGAKAITHI LETTER AKAITHI LETTER AAKAITHI LETTER I" + + "KAITHI LETTER IIKAITHI LETTER UKAITHI LETTER UUKAITHI LETTER EKAITHI LET" + + "TER AIKAITHI LETTER OKAITHI LETTER AUKAITHI LETTER KAKAITHI LETTER KHAKA" + + "ITHI LETTER GAKAITHI LETTER GHAKAITHI LETTER NGAKAITHI LETTER CAKAITHI L" + + "ETTER CHAKAITHI LETTER JAKAITHI LETTER JHAKAITHI LETTER NYAKAITHI LETTER" + + " TTAKAITHI LETTER TTHAKAITHI LETTER DDAKAITHI LETTER DDDHAKAITHI LETTER " + + "DDHAKAITHI LETTER RHAKAITHI LETTER NNAKAITHI LETTER TAKAITHI LETTER THAK" + + "AITHI LETTER DAKAITHI LETTER DHAKAITHI LETTER NAKAITHI LETTER PAKAITHI L" + + "ETTER PHAKAITHI LETTER BAKAITHI LETTER BHAKAITHI LETTER MAKAITHI LETTER " + + "YAKAITHI LETTER RAKAITHI LETTER LAKAITHI LETTER VAKAITHI LETTER SHAKAITH" + + "I LETTER SSAKAITHI LETTER SAKAITHI LETTER HAKAITHI VOWEL SIGN AAKAITHI V" + + "OWEL SIGN IKAITHI VOWEL SIGN IIKAITHI VOWEL SIGN UKAITHI VOWEL SIGN UUKA" + + "ITHI VOWEL SIGN EKAITHI VOWEL SIGN AIKAITHI VOWEL SIGN OKAITHI VOWEL SIG" + + "N AUKAITHI SIGN VIRAMAKAITHI SIGN NUKTAKAITHI ABBREVIATION SIGNKAITHI EN" + + "UMERATION SIGNKAITHI NUMBER SIGNKAITHI SECTION MARKKAITHI DOUBLE SECTION" + + " MARKKAITHI DANDAKAITHI DOUBLE DANDASORA SOMPENG LETTER SAHSORA SOMPENG " + + "LETTER TAHSORA SOMPENG LETTER BAHSORA SOMPENG LETTER CAHSORA SOMPENG LET" + + "TER DAHSORA SOMPENG LETTER GAHSORA SOMPENG LETTER MAHSORA SOMPENG LETTER" + + " NGAHSORA SOMPENG LETTER LAHSORA SOMPENG LETTER NAHSORA SOMPENG LETTER V" + + "AHSORA SOMPENG LETTER PAHSORA SOMPENG LETTER YAHSORA SOMPENG LETTER RAHS" + + "ORA SOMPENG LETTER HAHSORA SOMPENG LETTER KAHSORA SOMPENG LETTER JAHSORA" + + " SOMPENG LETTER NYAHSORA SOMPENG LETTER AHSORA SOMPENG LETTER EEHSORA SO" + + "MPENG LETTER IHSORA SOMPENG LETTER UHSORA SOMPENG LETTER OHSORA SOMPENG " + + "LETTER EHSORA SOMPENG LETTER MAESORA SOMPENG DIGIT ZEROSORA SOMPENG DIGI" + + "T ONESORA SOMPENG DIGIT TWOSORA SOMPENG DIGIT THREESORA SOMPENG DIGIT FO" + + "URSORA SOMPENG DIGIT FIVESORA SOMPENG DIGIT SIXSORA SOMPENG DIGIT SEVENS" + + "ORA SOMPENG DIGIT EIGHTSORA SOMPENG DIGIT NINECHAKMA SIGN CANDRABINDUCHA" + + "KMA SIGN ANUSVARACHAKMA SIGN VISARGACHAKMA LETTER AACHAKMA LETTER ICHAKM" + + "A LETTER UCHAKMA LETTER ECHAKMA LETTER KAACHAKMA LETTER KHAACHAKMA LETTE" + + "R GAACHAKMA LETTER GHAACHAKMA LETTER NGAACHAKMA LETTER CAACHAKMA LETTER " + + "CHAACHAKMA LETTER JAACHAKMA LETTER JHAACHAKMA LETTER NYAACHAKMA LETTER T" + + "TAACHAKMA LETTER TTHAACHAKMA LETTER DDAACHAKMA LETTER DDHAACHAKMA LETTER" + + " NNAACHAKMA LETTER TAACHAKMA LETTER THAACHAKMA LETTER DAACHAKMA LETTER D" + + "HAACHAKMA LETTER NAACHAKMA LETTER PAACHAKMA LETTER PHAACHAKMA LETTER BAA" + + "CHAKMA LETTER BHAACHAKMA LETTER MAACHAKMA LETTER YYAACHAKMA LETTER YAACH" + + "AKMA LETTER RAACHAKMA LETTER LAACHAKMA LETTER WAACHAKMA LETTER SAACHAKMA" + + " LETTER HAACHAKMA VOWEL SIGN ACHAKMA VOWEL SIGN ICHAKMA VOWEL SIGN IICHA" + + "KMA VOWEL SIGN UCHAKMA VOWEL SIGN UUCHAKMA VOWEL SIGN ECHAKMA VOWEL SIGN" + + " AICHAKMA VOWEL SIGN OCHAKMA VOWEL SIGN AUCHAKMA VOWEL SIGN OICHAKMA O M" + + "ARKCHAKMA AU MARKCHAKMA VIRAMACHAKMA MAAYYAACHAKMA DIGIT ZEROCHAKMA DIGI" + + "T ONECHAKMA DIGIT TWOCHAKMA DIGIT THREECHAKMA DIGIT FOURCHAKMA DIGIT FIV" + + "ECHAKMA DIGIT SIXCHAKMA DIGIT SEVENCHAKMA DIGIT EIGHTCHAKMA DIGIT NINECH" + + "AKMA SECTION MARKCHAKMA DANDACHAKMA DOUBLE DANDACHAKMA QUESTION MARKMAHA" + + "JANI LETTER AMAHAJANI LETTER IMAHAJANI LETTER UMAHAJANI LETTER EMAHAJANI" + + " LETTER OMAHAJANI LETTER KAMAHAJANI LETTER KHAMAHAJANI LETTER GAMAHAJANI" + + " LETTER GHAMAHAJANI LETTER CAMAHAJANI LETTER CHAMAHAJANI LETTER JAMAHAJA" + + "NI LETTER JHAMAHAJANI LETTER NYAMAHAJANI LETTER TTAMAHAJANI LETTER TTHAM" + + "AHAJANI LETTER DDAMAHAJANI LETTER DDHAMAHAJANI LETTER NNAMAHAJANI LETTER" + + " TAMAHAJANI LETTER THAMAHAJANI LETTER DAMAHAJANI LETTER DHAMAHAJANI LETT" + + "ER NAMAHAJANI LETTER PAMAHAJANI LETTER PHAMAHAJANI LETTER BAMAHAJANI LET" + + "TER BHAMAHAJANI LETTER MAMAHAJANI LETTER RAMAHAJANI LETTER LAMAHAJANI LE" + + "TTER VAMAHAJANI LETTER SAMAHAJANI LETTER HAMAHAJANI LETTER RRAMAHAJANI S" + + "IGN NUKTAMAHAJANI ABBREVIATION SIGNMAHAJANI SECTION MARKMAHAJANI LIGATUR" + + "E SHRISHARADA SIGN CANDRABINDUSHARADA SIGN ANUSVARASHARADA SIGN VISARGAS" + + "HARADA LETTER ASHARADA LETTER AASHARADA LETTER ISHARADA LETTER IISHARADA" + + " LETTER USHARADA LETTER UUSHARADA LETTER VOCALIC RSHARADA LETTER VOCALIC" + + " RRSHARADA LETTER VOCALIC LSHARADA LETTER VOCALIC LLSHARADA LETTER ESHAR" + + "ADA LETTER AISHARADA LETTER OSHARADA LETTER AUSHARADA LETTER KASHARADA L" + + "ETTER KHASHARADA LETTER GASHARADA LETTER GHASHARADA LETTER NGASHARADA LE" + + "TTER CASHARADA LETTER CHASHARADA LETTER JASHARADA LETTER JHASHARADA LETT" + + "ER NYASHARADA LETTER TTASHARADA LETTER TTHASHARADA LETTER DDASHARADA LET" + + "TER DDHASHARADA LETTER NNASHARADA LETTER TASHARADA LETTER THASHARADA LET" + + "TER DASHARADA LETTER DHASHARADA LETTER NASHARADA LETTER PASHARADA LETTER") + ("" + + " PHASHARADA LETTER BASHARADA LETTER BHASHARADA LETTER MASHARADA LETTER Y" + + "ASHARADA LETTER RASHARADA LETTER LASHARADA LETTER LLASHARADA LETTER VASH" + + "ARADA LETTER SHASHARADA LETTER SSASHARADA LETTER SASHARADA LETTER HASHAR" + + "ADA VOWEL SIGN AASHARADA VOWEL SIGN ISHARADA VOWEL SIGN IISHARADA VOWEL " + + "SIGN USHARADA VOWEL SIGN UUSHARADA VOWEL SIGN VOCALIC RSHARADA VOWEL SIG" + + "N VOCALIC RRSHARADA VOWEL SIGN VOCALIC LSHARADA VOWEL SIGN VOCALIC LLSHA" + + "RADA VOWEL SIGN ESHARADA VOWEL SIGN AISHARADA VOWEL SIGN OSHARADA VOWEL " + + "SIGN AUSHARADA SIGN VIRAMASHARADA SIGN AVAGRAHASHARADA SIGN JIHVAMULIYAS" + + "HARADA SIGN UPADHMANIYASHARADA OMSHARADA DANDASHARADA DOUBLE DANDASHARAD" + + "A ABBREVIATION SIGNSHARADA SEPARATORSHARADA SANDHI MARKSHARADA SIGN NUKT" + + "ASHARADA VOWEL MODIFIER MARKSHARADA EXTRA SHORT VOWEL MARKSHARADA SUTRA " + + "MARKSHARADA DIGIT ZEROSHARADA DIGIT ONESHARADA DIGIT TWOSHARADA DIGIT TH" + + "REESHARADA DIGIT FOURSHARADA DIGIT FIVESHARADA DIGIT SIXSHARADA DIGIT SE" + + "VENSHARADA DIGIT EIGHTSHARADA DIGIT NINESHARADA EKAMSHARADA SIGN SIDDHAM" + + "SHARADA HEADSTROKESHARADA CONTINUATION SIGNSHARADA SECTION MARK-1SHARADA" + + " SECTION MARK-2SINHALA ARCHAIC DIGIT ONESINHALA ARCHAIC DIGIT TWOSINHALA" + + " ARCHAIC DIGIT THREESINHALA ARCHAIC DIGIT FOURSINHALA ARCHAIC DIGIT FIVE" + + "SINHALA ARCHAIC DIGIT SIXSINHALA ARCHAIC DIGIT SEVENSINHALA ARCHAIC DIGI" + + "T EIGHTSINHALA ARCHAIC DIGIT NINESINHALA ARCHAIC NUMBER TENSINHALA ARCHA" + + "IC NUMBER TWENTYSINHALA ARCHAIC NUMBER THIRTYSINHALA ARCHAIC NUMBER FORT" + + "YSINHALA ARCHAIC NUMBER FIFTYSINHALA ARCHAIC NUMBER SIXTYSINHALA ARCHAIC" + + " NUMBER SEVENTYSINHALA ARCHAIC NUMBER EIGHTYSINHALA ARCHAIC NUMBER NINET" + + "YSINHALA ARCHAIC NUMBER ONE HUNDREDSINHALA ARCHAIC NUMBER ONE THOUSANDKH" + + "OJKI LETTER AKHOJKI LETTER AAKHOJKI LETTER IKHOJKI LETTER UKHOJKI LETTER" + + " EKHOJKI LETTER AIKHOJKI LETTER OKHOJKI LETTER AUKHOJKI LETTER KAKHOJKI " + + "LETTER KHAKHOJKI LETTER GAKHOJKI LETTER GGAKHOJKI LETTER GHAKHOJKI LETTE" + + "R NGAKHOJKI LETTER CAKHOJKI LETTER CHAKHOJKI LETTER JAKHOJKI LETTER JJAK" + + "HOJKI LETTER NYAKHOJKI LETTER TTAKHOJKI LETTER TTHAKHOJKI LETTER DDAKHOJ" + + "KI LETTER DDHAKHOJKI LETTER NNAKHOJKI LETTER TAKHOJKI LETTER THAKHOJKI L" + + "ETTER DAKHOJKI LETTER DDDAKHOJKI LETTER DHAKHOJKI LETTER NAKHOJKI LETTER" + + " PAKHOJKI LETTER PHAKHOJKI LETTER BAKHOJKI LETTER BBAKHOJKI LETTER BHAKH" + + "OJKI LETTER MAKHOJKI LETTER YAKHOJKI LETTER RAKHOJKI LETTER LAKHOJKI LET" + + "TER VAKHOJKI LETTER SAKHOJKI LETTER HAKHOJKI LETTER LLAKHOJKI VOWEL SIGN" + + " AAKHOJKI VOWEL SIGN IKHOJKI VOWEL SIGN IIKHOJKI VOWEL SIGN UKHOJKI VOWE" + + "L SIGN EKHOJKI VOWEL SIGN AIKHOJKI VOWEL SIGN OKHOJKI VOWEL SIGN AUKHOJK" + + "I SIGN ANUSVARAKHOJKI SIGN VIRAMAKHOJKI SIGN NUKTAKHOJKI SIGN SHADDAKHOJ" + + "KI DANDAKHOJKI DOUBLE DANDAKHOJKI WORD SEPARATORKHOJKI SECTION MARKKHOJK" + + "I DOUBLE SECTION MARKKHOJKI ABBREVIATION SIGNKHOJKI SIGN SUKUNMULTANI LE" + + "TTER AMULTANI LETTER IMULTANI LETTER UMULTANI LETTER EMULTANI LETTER KAM" + + "ULTANI LETTER KHAMULTANI LETTER GAMULTANI LETTER GHAMULTANI LETTER CAMUL" + + "TANI LETTER CHAMULTANI LETTER JAMULTANI LETTER JJAMULTANI LETTER NYAMULT" + + "ANI LETTER TTAMULTANI LETTER TTHAMULTANI LETTER DDAMULTANI LETTER DDDAMU" + + "LTANI LETTER DDHAMULTANI LETTER NNAMULTANI LETTER TAMULTANI LETTER THAMU" + + "LTANI LETTER DAMULTANI LETTER DHAMULTANI LETTER NAMULTANI LETTER PAMULTA" + + "NI LETTER PHAMULTANI LETTER BAMULTANI LETTER BHAMULTANI LETTER MAMULTANI" + + " LETTER YAMULTANI LETTER RAMULTANI LETTER LAMULTANI LETTER VAMULTANI LET" + + "TER SAMULTANI LETTER HAMULTANI LETTER RRAMULTANI LETTER RHAMULTANI SECTI" + + "ON MARKKHUDAWADI LETTER AKHUDAWADI LETTER AAKHUDAWADI LETTER IKHUDAWADI " + + "LETTER IIKHUDAWADI LETTER UKHUDAWADI LETTER UUKHUDAWADI LETTER EKHUDAWAD" + + "I LETTER AIKHUDAWADI LETTER OKHUDAWADI LETTER AUKHUDAWADI LETTER KAKHUDA" + + "WADI LETTER KHAKHUDAWADI LETTER GAKHUDAWADI LETTER GGAKHUDAWADI LETTER G" + + "HAKHUDAWADI LETTER NGAKHUDAWADI LETTER CAKHUDAWADI LETTER CHAKHUDAWADI L" + + "ETTER JAKHUDAWADI LETTER JJAKHUDAWADI LETTER JHAKHUDAWADI LETTER NYAKHUD" + + "AWADI LETTER TTAKHUDAWADI LETTER TTHAKHUDAWADI LETTER DDAKHUDAWADI LETTE" + + "R DDDAKHUDAWADI LETTER RRAKHUDAWADI LETTER DDHAKHUDAWADI LETTER NNAKHUDA" + + "WADI LETTER TAKHUDAWADI LETTER THAKHUDAWADI LETTER DAKHUDAWADI LETTER DH" + + "AKHUDAWADI LETTER NAKHUDAWADI LETTER PAKHUDAWADI LETTER PHAKHUDAWADI LET" + + "TER BAKHUDAWADI LETTER BBAKHUDAWADI LETTER BHAKHUDAWADI LETTER MAKHUDAWA" + + "DI LETTER YAKHUDAWADI LETTER RAKHUDAWADI LETTER LAKHUDAWADI LETTER VAKHU" + + "DAWADI LETTER SHAKHUDAWADI LETTER SAKHUDAWADI LETTER HAKHUDAWADI SIGN AN" + + "USVARAKHUDAWADI VOWEL SIGN AAKHUDAWADI VOWEL SIGN IKHUDAWADI VOWEL SIGN " + + "IIKHUDAWADI VOWEL SIGN UKHUDAWADI VOWEL SIGN UUKHUDAWADI VOWEL SIGN EKHU" + + "DAWADI VOWEL SIGN AIKHUDAWADI VOWEL SIGN OKHUDAWADI VOWEL SIGN AUKHUDAWA" + + "DI SIGN NUKTAKHUDAWADI SIGN VIRAMAKHUDAWADI DIGIT ZEROKHUDAWADI DIGIT ON") + ("" + + "EKHUDAWADI DIGIT TWOKHUDAWADI DIGIT THREEKHUDAWADI DIGIT FOURKHUDAWADI D" + + "IGIT FIVEKHUDAWADI DIGIT SIXKHUDAWADI DIGIT SEVENKHUDAWADI DIGIT EIGHTKH" + + "UDAWADI DIGIT NINEGRANTHA SIGN COMBINING ANUSVARA ABOVEGRANTHA SIGN CAND" + + "RABINDUGRANTHA SIGN ANUSVARAGRANTHA SIGN VISARGAGRANTHA LETTER AGRANTHA " + + "LETTER AAGRANTHA LETTER IGRANTHA LETTER IIGRANTHA LETTER UGRANTHA LETTER" + + " UUGRANTHA LETTER VOCALIC RGRANTHA LETTER VOCALIC LGRANTHA LETTER EEGRAN" + + "THA LETTER AIGRANTHA LETTER OOGRANTHA LETTER AUGRANTHA LETTER KAGRANTHA " + + "LETTER KHAGRANTHA LETTER GAGRANTHA LETTER GHAGRANTHA LETTER NGAGRANTHA L" + + "ETTER CAGRANTHA LETTER CHAGRANTHA LETTER JAGRANTHA LETTER JHAGRANTHA LET" + + "TER NYAGRANTHA LETTER TTAGRANTHA LETTER TTHAGRANTHA LETTER DDAGRANTHA LE" + + "TTER DDHAGRANTHA LETTER NNAGRANTHA LETTER TAGRANTHA LETTER THAGRANTHA LE" + + "TTER DAGRANTHA LETTER DHAGRANTHA LETTER NAGRANTHA LETTER PAGRANTHA LETTE" + + "R PHAGRANTHA LETTER BAGRANTHA LETTER BHAGRANTHA LETTER MAGRANTHA LETTER " + + "YAGRANTHA LETTER RAGRANTHA LETTER LAGRANTHA LETTER LLAGRANTHA LETTER VAG" + + "RANTHA LETTER SHAGRANTHA LETTER SSAGRANTHA LETTER SAGRANTHA LETTER HAGRA" + + "NTHA SIGN NUKTAGRANTHA SIGN AVAGRAHAGRANTHA VOWEL SIGN AAGRANTHA VOWEL S" + + "IGN IGRANTHA VOWEL SIGN IIGRANTHA VOWEL SIGN UGRANTHA VOWEL SIGN UUGRANT" + + "HA VOWEL SIGN VOCALIC RGRANTHA VOWEL SIGN VOCALIC RRGRANTHA VOWEL SIGN E" + + "EGRANTHA VOWEL SIGN AIGRANTHA VOWEL SIGN OOGRANTHA VOWEL SIGN AUGRANTHA " + + "SIGN VIRAMAGRANTHA OMGRANTHA AU LENGTH MARKGRANTHA SIGN PLUTAGRANTHA LET" + + "TER VEDIC ANUSVARAGRANTHA LETTER VEDIC DOUBLE ANUSVARAGRANTHA LETTER VOC" + + "ALIC RRGRANTHA LETTER VOCALIC LLGRANTHA VOWEL SIGN VOCALIC LGRANTHA VOWE" + + "L SIGN VOCALIC LLCOMBINING GRANTHA DIGIT ZEROCOMBINING GRANTHA DIGIT ONE" + + "COMBINING GRANTHA DIGIT TWOCOMBINING GRANTHA DIGIT THREECOMBINING GRANTH" + + "A DIGIT FOURCOMBINING GRANTHA DIGIT FIVECOMBINING GRANTHA DIGIT SIXCOMBI" + + "NING GRANTHA LETTER ACOMBINING GRANTHA LETTER KACOMBINING GRANTHA LETTER" + + " NACOMBINING GRANTHA LETTER VICOMBINING GRANTHA LETTER PANEWA LETTER ANE" + + "WA LETTER AANEWA LETTER INEWA LETTER IINEWA LETTER UNEWA LETTER UUNEWA L" + + "ETTER VOCALIC RNEWA LETTER VOCALIC RRNEWA LETTER VOCALIC LNEWA LETTER VO" + + "CALIC LLNEWA LETTER ENEWA LETTER AINEWA LETTER ONEWA LETTER AUNEWA LETTE" + + "R KANEWA LETTER KHANEWA LETTER GANEWA LETTER GHANEWA LETTER NGANEWA LETT" + + "ER NGHANEWA LETTER CANEWA LETTER CHANEWA LETTER JANEWA LETTER JHANEWA LE" + + "TTER NYANEWA LETTER NYHANEWA LETTER TTANEWA LETTER TTHANEWA LETTER DDANE" + + "WA LETTER DDHANEWA LETTER NNANEWA LETTER TANEWA LETTER THANEWA LETTER DA" + + "NEWA LETTER DHANEWA LETTER NANEWA LETTER NHANEWA LETTER PANEWA LETTER PH" + + "ANEWA LETTER BANEWA LETTER BHANEWA LETTER MANEWA LETTER MHANEWA LETTER Y" + + "ANEWA LETTER RANEWA LETTER RHANEWA LETTER LANEWA LETTER LHANEWA LETTER W" + + "ANEWA LETTER SHANEWA LETTER SSANEWA LETTER SANEWA LETTER HANEWA VOWEL SI" + + "GN AANEWA VOWEL SIGN INEWA VOWEL SIGN IINEWA VOWEL SIGN UNEWA VOWEL SIGN" + + " UUNEWA VOWEL SIGN VOCALIC RNEWA VOWEL SIGN VOCALIC RRNEWA VOWEL SIGN VO" + + "CALIC LNEWA VOWEL SIGN VOCALIC LLNEWA VOWEL SIGN ENEWA VOWEL SIGN AINEWA" + + " VOWEL SIGN ONEWA VOWEL SIGN AUNEWA SIGN VIRAMANEWA SIGN CANDRABINDUNEWA" + + " SIGN ANUSVARANEWA SIGN VISARGANEWA SIGN NUKTANEWA SIGN AVAGRAHANEWA SIG" + + "N FINAL ANUSVARANEWA OMNEWA SIDDHINEWA DANDANEWA DOUBLE DANDANEWA COMMAN" + + "EWA GAP FILLERNEWA ABBREVIATION SIGNNEWA DIGIT ZERONEWA DIGIT ONENEWA DI" + + "GIT TWONEWA DIGIT THREENEWA DIGIT FOURNEWA DIGIT FIVENEWA DIGIT SIXNEWA " + + "DIGIT SEVENNEWA DIGIT EIGHTNEWA DIGIT NINENEWA PLACEHOLDER MARKNEWA INSE" + + "RTION SIGNTIRHUTA ANJITIRHUTA LETTER ATIRHUTA LETTER AATIRHUTA LETTER IT" + + "IRHUTA LETTER IITIRHUTA LETTER UTIRHUTA LETTER UUTIRHUTA LETTER VOCALIC " + + "RTIRHUTA LETTER VOCALIC RRTIRHUTA LETTER VOCALIC LTIRHUTA LETTER VOCALIC" + + " LLTIRHUTA LETTER ETIRHUTA LETTER AITIRHUTA LETTER OTIRHUTA LETTER AUTIR" + + "HUTA LETTER KATIRHUTA LETTER KHATIRHUTA LETTER GATIRHUTA LETTER GHATIRHU" + + "TA LETTER NGATIRHUTA LETTER CATIRHUTA LETTER CHATIRHUTA LETTER JATIRHUTA" + + " LETTER JHATIRHUTA LETTER NYATIRHUTA LETTER TTATIRHUTA LETTER TTHATIRHUT" + + "A LETTER DDATIRHUTA LETTER DDHATIRHUTA LETTER NNATIRHUTA LETTER TATIRHUT" + + "A LETTER THATIRHUTA LETTER DATIRHUTA LETTER DHATIRHUTA LETTER NATIRHUTA " + + "LETTER PATIRHUTA LETTER PHATIRHUTA LETTER BATIRHUTA LETTER BHATIRHUTA LE" + + "TTER MATIRHUTA LETTER YATIRHUTA LETTER RATIRHUTA LETTER LATIRHUTA LETTER" + + " VATIRHUTA LETTER SHATIRHUTA LETTER SSATIRHUTA LETTER SATIRHUTA LETTER H" + + "ATIRHUTA VOWEL SIGN AATIRHUTA VOWEL SIGN ITIRHUTA VOWEL SIGN IITIRHUTA V" + + "OWEL SIGN UTIRHUTA VOWEL SIGN UUTIRHUTA VOWEL SIGN VOCALIC RTIRHUTA VOWE" + + "L SIGN VOCALIC RRTIRHUTA VOWEL SIGN VOCALIC LTIRHUTA VOWEL SIGN VOCALIC " + + "LLTIRHUTA VOWEL SIGN ETIRHUTA VOWEL SIGN SHORT ETIRHUTA VOWEL SIGN AITIR" + + "HUTA VOWEL SIGN OTIRHUTA VOWEL SIGN SHORT OTIRHUTA VOWEL SIGN AUTIRHUTA ") + ("" + + "SIGN CANDRABINDUTIRHUTA SIGN ANUSVARATIRHUTA SIGN VISARGATIRHUTA SIGN VI" + + "RAMATIRHUTA SIGN NUKTATIRHUTA SIGN AVAGRAHATIRHUTA GVANGTIRHUTA ABBREVIA" + + "TION SIGNTIRHUTA OMTIRHUTA DIGIT ZEROTIRHUTA DIGIT ONETIRHUTA DIGIT TWOT" + + "IRHUTA DIGIT THREETIRHUTA DIGIT FOURTIRHUTA DIGIT FIVETIRHUTA DIGIT SIXT" + + "IRHUTA DIGIT SEVENTIRHUTA DIGIT EIGHTTIRHUTA DIGIT NINESIDDHAM LETTER AS" + + "IDDHAM LETTER AASIDDHAM LETTER ISIDDHAM LETTER IISIDDHAM LETTER USIDDHAM" + + " LETTER UUSIDDHAM LETTER VOCALIC RSIDDHAM LETTER VOCALIC RRSIDDHAM LETTE" + + "R VOCALIC LSIDDHAM LETTER VOCALIC LLSIDDHAM LETTER ESIDDHAM LETTER AISID" + + "DHAM LETTER OSIDDHAM LETTER AUSIDDHAM LETTER KASIDDHAM LETTER KHASIDDHAM" + + " LETTER GASIDDHAM LETTER GHASIDDHAM LETTER NGASIDDHAM LETTER CASIDDHAM L" + + "ETTER CHASIDDHAM LETTER JASIDDHAM LETTER JHASIDDHAM LETTER NYASIDDHAM LE" + + "TTER TTASIDDHAM LETTER TTHASIDDHAM LETTER DDASIDDHAM LETTER DDHASIDDHAM " + + "LETTER NNASIDDHAM LETTER TASIDDHAM LETTER THASIDDHAM LETTER DASIDDHAM LE" + + "TTER DHASIDDHAM LETTER NASIDDHAM LETTER PASIDDHAM LETTER PHASIDDHAM LETT" + + "ER BASIDDHAM LETTER BHASIDDHAM LETTER MASIDDHAM LETTER YASIDDHAM LETTER " + + "RASIDDHAM LETTER LASIDDHAM LETTER VASIDDHAM LETTER SHASIDDHAM LETTER SSA" + + "SIDDHAM LETTER SASIDDHAM LETTER HASIDDHAM VOWEL SIGN AASIDDHAM VOWEL SIG" + + "N ISIDDHAM VOWEL SIGN IISIDDHAM VOWEL SIGN USIDDHAM VOWEL SIGN UUSIDDHAM" + + " VOWEL SIGN VOCALIC RSIDDHAM VOWEL SIGN VOCALIC RRSIDDHAM VOWEL SIGN ESI" + + "DDHAM VOWEL SIGN AISIDDHAM VOWEL SIGN OSIDDHAM VOWEL SIGN AUSIDDHAM SIGN" + + " CANDRABINDUSIDDHAM SIGN ANUSVARASIDDHAM SIGN VISARGASIDDHAM SIGN VIRAMA" + + "SIDDHAM SIGN NUKTASIDDHAM SIGN SIDDHAMSIDDHAM DANDASIDDHAM DOUBLE DANDAS" + + "IDDHAM SEPARATOR DOTSIDDHAM SEPARATOR BARSIDDHAM REPETITION MARK-1SIDDHA" + + "M REPETITION MARK-2SIDDHAM REPETITION MARK-3SIDDHAM END OF TEXT MARKSIDD" + + "HAM SECTION MARK WITH TRIDENT AND U-SHAPED ORNAMENTSSIDDHAM SECTION MARK" + + " WITH TRIDENT AND DOTTED CRESCENTSSIDDHAM SECTION MARK WITH RAYS AND DOT" + + "TED CRESCENTSSIDDHAM SECTION MARK WITH RAYS AND DOTTED DOUBLE CRESCENTSS" + + "IDDHAM SECTION MARK WITH RAYS AND DOTTED TRIPLE CRESCENTSSIDDHAM SECTION" + + " MARK DOUBLE RINGSIDDHAM SECTION MARK DOUBLE RING WITH RAYSSIDDHAM SECTI" + + "ON MARK WITH DOUBLE CRESCENTSSIDDHAM SECTION MARK WITH TRIPLE CRESCENTSS" + + "IDDHAM SECTION MARK WITH QUADRUPLE CRESCENTSSIDDHAM SECTION MARK WITH SE" + + "PTUPLE CRESCENTSSIDDHAM SECTION MARK WITH CIRCLES AND RAYSSIDDHAM SECTIO" + + "N MARK WITH CIRCLES AND TWO ENCLOSURESSIDDHAM SECTION MARK WITH CIRCLES " + + "AND FOUR ENCLOSURESSIDDHAM LETTER THREE-CIRCLE ALTERNATE ISIDDHAM LETTER" + + " TWO-CIRCLE ALTERNATE ISIDDHAM LETTER TWO-CIRCLE ALTERNATE IISIDDHAM LET" + + "TER ALTERNATE USIDDHAM VOWEL SIGN ALTERNATE USIDDHAM VOWEL SIGN ALTERNAT" + + "E UUMODI LETTER AMODI LETTER AAMODI LETTER IMODI LETTER IIMODI LETTER UM" + + "ODI LETTER UUMODI LETTER VOCALIC RMODI LETTER VOCALIC RRMODI LETTER VOCA" + + "LIC LMODI LETTER VOCALIC LLMODI LETTER EMODI LETTER AIMODI LETTER OMODI " + + "LETTER AUMODI LETTER KAMODI LETTER KHAMODI LETTER GAMODI LETTER GHAMODI " + + "LETTER NGAMODI LETTER CAMODI LETTER CHAMODI LETTER JAMODI LETTER JHAMODI" + + " LETTER NYAMODI LETTER TTAMODI LETTER TTHAMODI LETTER DDAMODI LETTER DDH" + + "AMODI LETTER NNAMODI LETTER TAMODI LETTER THAMODI LETTER DAMODI LETTER D" + + "HAMODI LETTER NAMODI LETTER PAMODI LETTER PHAMODI LETTER BAMODI LETTER B" + + "HAMODI LETTER MAMODI LETTER YAMODI LETTER RAMODI LETTER LAMODI LETTER VA" + + "MODI LETTER SHAMODI LETTER SSAMODI LETTER SAMODI LETTER HAMODI LETTER LL" + + "AMODI VOWEL SIGN AAMODI VOWEL SIGN IMODI VOWEL SIGN IIMODI VOWEL SIGN UM" + + "ODI VOWEL SIGN UUMODI VOWEL SIGN VOCALIC RMODI VOWEL SIGN VOCALIC RRMODI" + + " VOWEL SIGN VOCALIC LMODI VOWEL SIGN VOCALIC LLMODI VOWEL SIGN EMODI VOW" + + "EL SIGN AIMODI VOWEL SIGN OMODI VOWEL SIGN AUMODI SIGN ANUSVARAMODI SIGN" + + " VISARGAMODI SIGN VIRAMAMODI SIGN ARDHACANDRAMODI DANDAMODI DOUBLE DANDA" + + "MODI ABBREVIATION SIGNMODI SIGN HUVAMODI DIGIT ZEROMODI DIGIT ONEMODI DI" + + "GIT TWOMODI DIGIT THREEMODI DIGIT FOURMODI DIGIT FIVEMODI DIGIT SIXMODI " + + "DIGIT SEVENMODI DIGIT EIGHTMODI DIGIT NINEMONGOLIAN BIRGA WITH ORNAMENTM" + + "ONGOLIAN ROTATED BIRGAMONGOLIAN DOUBLE BIRGA WITH ORNAMENTMONGOLIAN TRIP" + + "LE BIRGA WITH ORNAMENTMONGOLIAN BIRGA WITH DOUBLE ORNAMENTMONGOLIAN ROTA" + + "TED BIRGA WITH ORNAMENTMONGOLIAN ROTATED BIRGA WITH DOUBLE ORNAMENTMONGO" + + "LIAN INVERTED BIRGAMONGOLIAN INVERTED BIRGA WITH DOUBLE ORNAMENTMONGOLIA" + + "N SWIRL BIRGAMONGOLIAN SWIRL BIRGA WITH ORNAMENTMONGOLIAN SWIRL BIRGA WI" + + "TH DOUBLE ORNAMENTMONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENTTAKRI" + + " LETTER ATAKRI LETTER AATAKRI LETTER ITAKRI LETTER IITAKRI LETTER UTAKRI" + + " LETTER UUTAKRI LETTER ETAKRI LETTER AITAKRI LETTER OTAKRI LETTER AUTAKR" + + "I LETTER KATAKRI LETTER KHATAKRI LETTER GATAKRI LETTER GHATAKRI LETTER N" + + "GATAKRI LETTER CATAKRI LETTER CHATAKRI LETTER JATAKRI LETTER JHATAKRI LE") + ("" + + "TTER NYATAKRI LETTER TTATAKRI LETTER TTHATAKRI LETTER DDATAKRI LETTER DD" + + "HATAKRI LETTER NNATAKRI LETTER TATAKRI LETTER THATAKRI LETTER DATAKRI LE" + + "TTER DHATAKRI LETTER NATAKRI LETTER PATAKRI LETTER PHATAKRI LETTER BATAK" + + "RI LETTER BHATAKRI LETTER MATAKRI LETTER YATAKRI LETTER RATAKRI LETTER L" + + "ATAKRI LETTER VATAKRI LETTER SHATAKRI LETTER SATAKRI LETTER HATAKRI LETT" + + "ER RRATAKRI SIGN ANUSVARATAKRI SIGN VISARGATAKRI VOWEL SIGN AATAKRI VOWE" + + "L SIGN ITAKRI VOWEL SIGN IITAKRI VOWEL SIGN UTAKRI VOWEL SIGN UUTAKRI VO" + + "WEL SIGN ETAKRI VOWEL SIGN AITAKRI VOWEL SIGN OTAKRI VOWEL SIGN AUTAKRI " + + "SIGN VIRAMATAKRI SIGN NUKTATAKRI DIGIT ZEROTAKRI DIGIT ONETAKRI DIGIT TW" + + "OTAKRI DIGIT THREETAKRI DIGIT FOURTAKRI DIGIT FIVETAKRI DIGIT SIXTAKRI D" + + "IGIT SEVENTAKRI DIGIT EIGHTTAKRI DIGIT NINEAHOM LETTER KAAHOM LETTER KHA" + + "AHOM LETTER NGAAHOM LETTER NAAHOM LETTER TAAHOM LETTER ALTERNATE TAAHOM " + + "LETTER PAAHOM LETTER PHAAHOM LETTER BAAHOM LETTER MAAHOM LETTER JAAHOM L" + + "ETTER CHAAHOM LETTER THAAHOM LETTER RAAHOM LETTER LAAHOM LETTER SAAHOM L" + + "ETTER NYAAHOM LETTER HAAHOM LETTER AAHOM LETTER DAAHOM LETTER DHAAHOM LE" + + "TTER GAAHOM LETTER ALTERNATE GAAHOM LETTER GHAAHOM LETTER BHAAHOM LETTER" + + " JHAAHOM CONSONANT SIGN MEDIAL LAAHOM CONSONANT SIGN MEDIAL RAAHOM CONSO" + + "NANT SIGN MEDIAL LIGATING RAAHOM VOWEL SIGN AAHOM VOWEL SIGN AAAHOM VOWE" + + "L SIGN IAHOM VOWEL SIGN IIAHOM VOWEL SIGN UAHOM VOWEL SIGN UUAHOM VOWEL " + + "SIGN EAHOM VOWEL SIGN AWAHOM VOWEL SIGN OAHOM VOWEL SIGN AIAHOM VOWEL SI" + + "GN AMAHOM SIGN KILLERAHOM DIGIT ZEROAHOM DIGIT ONEAHOM DIGIT TWOAHOM DIG" + + "IT THREEAHOM DIGIT FOURAHOM DIGIT FIVEAHOM DIGIT SIXAHOM DIGIT SEVENAHOM" + + " DIGIT EIGHTAHOM DIGIT NINEAHOM NUMBER TENAHOM NUMBER TWENTYAHOM SIGN SM" + + "ALL SECTIONAHOM SIGN SECTIONAHOM SIGN RULAIAHOM SYMBOL VIWARANG CITI CAP" + + "ITAL LETTER NGAAWARANG CITI CAPITAL LETTER AWARANG CITI CAPITAL LETTER W" + + "IWARANG CITI CAPITAL LETTER YUWARANG CITI CAPITAL LETTER YAWARANG CITI C" + + "APITAL LETTER YOWARANG CITI CAPITAL LETTER IIWARANG CITI CAPITAL LETTER " + + "UUWARANG CITI CAPITAL LETTER EWARANG CITI CAPITAL LETTER OWARANG CITI CA" + + "PITAL LETTER ANGWARANG CITI CAPITAL LETTER GAWARANG CITI CAPITAL LETTER " + + "KOWARANG CITI CAPITAL LETTER ENYWARANG CITI CAPITAL LETTER YUJWARANG CIT" + + "I CAPITAL LETTER UCWARANG CITI CAPITAL LETTER ENNWARANG CITI CAPITAL LET" + + "TER ODDWARANG CITI CAPITAL LETTER TTEWARANG CITI CAPITAL LETTER NUNGWARA" + + "NG CITI CAPITAL LETTER DAWARANG CITI CAPITAL LETTER ATWARANG CITI CAPITA" + + "L LETTER AMWARANG CITI CAPITAL LETTER BUWARANG CITI CAPITAL LETTER PUWAR" + + "ANG CITI CAPITAL LETTER HIYOWARANG CITI CAPITAL LETTER HOLOWARANG CITI C" + + "APITAL LETTER HORRWARANG CITI CAPITAL LETTER HARWARANG CITI CAPITAL LETT" + + "ER SSUUWARANG CITI CAPITAL LETTER SIIWARANG CITI CAPITAL LETTER VIYOWARA" + + "NG CITI SMALL LETTER NGAAWARANG CITI SMALL LETTER AWARANG CITI SMALL LET" + + "TER WIWARANG CITI SMALL LETTER YUWARANG CITI SMALL LETTER YAWARANG CITI " + + "SMALL LETTER YOWARANG CITI SMALL LETTER IIWARANG CITI SMALL LETTER UUWAR" + + "ANG CITI SMALL LETTER EWARANG CITI SMALL LETTER OWARANG CITI SMALL LETTE" + + "R ANGWARANG CITI SMALL LETTER GAWARANG CITI SMALL LETTER KOWARANG CITI S" + + "MALL LETTER ENYWARANG CITI SMALL LETTER YUJWARANG CITI SMALL LETTER UCWA" + + "RANG CITI SMALL LETTER ENNWARANG CITI SMALL LETTER ODDWARANG CITI SMALL " + + "LETTER TTEWARANG CITI SMALL LETTER NUNGWARANG CITI SMALL LETTER DAWARANG" + + " CITI SMALL LETTER ATWARANG CITI SMALL LETTER AMWARANG CITI SMALL LETTER" + + " BUWARANG CITI SMALL LETTER PUWARANG CITI SMALL LETTER HIYOWARANG CITI S" + + "MALL LETTER HOLOWARANG CITI SMALL LETTER HORRWARANG CITI SMALL LETTER HA" + + "RWARANG CITI SMALL LETTER SSUUWARANG CITI SMALL LETTER SIIWARANG CITI SM" + + "ALL LETTER VIYOWARANG CITI DIGIT ZEROWARANG CITI DIGIT ONEWARANG CITI DI" + + "GIT TWOWARANG CITI DIGIT THREEWARANG CITI DIGIT FOURWARANG CITI DIGIT FI" + + "VEWARANG CITI DIGIT SIXWARANG CITI DIGIT SEVENWARANG CITI DIGIT EIGHTWAR" + + "ANG CITI DIGIT NINEWARANG CITI NUMBER TENWARANG CITI NUMBER TWENTYWARANG" + + " CITI NUMBER THIRTYWARANG CITI NUMBER FORTYWARANG CITI NUMBER FIFTYWARAN" + + "G CITI NUMBER SIXTYWARANG CITI NUMBER SEVENTYWARANG CITI NUMBER EIGHTYWA" + + "RANG CITI NUMBER NINETYWARANG CITI OMZANABAZAR SQUARE LETTER AZANABAZAR " + + "SQUARE VOWEL SIGN IZANABAZAR SQUARE VOWEL SIGN UEZANABAZAR SQUARE VOWEL " + + "SIGN UZANABAZAR SQUARE VOWEL SIGN EZANABAZAR SQUARE VOWEL SIGN OEZANABAZ" + + "AR SQUARE VOWEL SIGN OZANABAZAR SQUARE VOWEL SIGN AIZANABAZAR SQUARE VOW" + + "EL SIGN AUZANABAZAR SQUARE VOWEL SIGN REVERSED IZANABAZAR SQUARE VOWEL L" + + "ENGTH MARKZANABAZAR SQUARE LETTER KAZANABAZAR SQUARE LETTER KHAZANABAZAR" + + " SQUARE LETTER GAZANABAZAR SQUARE LETTER GHAZANABAZAR SQUARE LETTER NGAZ" + + "ANABAZAR SQUARE LETTER CAZANABAZAR SQUARE LETTER CHAZANABAZAR SQUARE LET" + + "TER JAZANABAZAR SQUARE LETTER NYAZANABAZAR SQUARE LETTER TTAZANABAZAR SQ") + ("" + + "UARE LETTER TTHAZANABAZAR SQUARE LETTER DDAZANABAZAR SQUARE LETTER DDHAZ" + + "ANABAZAR SQUARE LETTER NNAZANABAZAR SQUARE LETTER TAZANABAZAR SQUARE LET" + + "TER THAZANABAZAR SQUARE LETTER DAZANABAZAR SQUARE LETTER DHAZANABAZAR SQ" + + "UARE LETTER NAZANABAZAR SQUARE LETTER PAZANABAZAR SQUARE LETTER PHAZANAB" + + "AZAR SQUARE LETTER BAZANABAZAR SQUARE LETTER BHAZANABAZAR SQUARE LETTER " + + "MAZANABAZAR SQUARE LETTER TSAZANABAZAR SQUARE LETTER TSHAZANABAZAR SQUAR" + + "E LETTER DZAZANABAZAR SQUARE LETTER DZHAZANABAZAR SQUARE LETTER ZHAZANAB" + + "AZAR SQUARE LETTER ZAZANABAZAR SQUARE LETTER -AZANABAZAR SQUARE LETTER Y" + + "AZANABAZAR SQUARE LETTER RAZANABAZAR SQUARE LETTER LAZANABAZAR SQUARE LE" + + "TTER VAZANABAZAR SQUARE LETTER SHAZANABAZAR SQUARE LETTER SSAZANABAZAR S" + + "QUARE LETTER SAZANABAZAR SQUARE LETTER HAZANABAZAR SQUARE LETTER KSSAZAN" + + "ABAZAR SQUARE FINAL CONSONANT MARKZANABAZAR SQUARE SIGN VIRAMAZANABAZAR " + + "SQUARE SIGN CANDRABINDUZANABAZAR SQUARE SIGN CANDRABINDU WITH ORNAMENTZA" + + "NABAZAR SQUARE SIGN CANDRA WITH ORNAMENTZANABAZAR SQUARE SIGN ANUSVARAZA" + + "NABAZAR SQUARE SIGN VISARGAZANABAZAR SQUARE CLUSTER-INITIAL LETTER RAZAN" + + "ABAZAR SQUARE CLUSTER-FINAL LETTER YAZANABAZAR SQUARE CLUSTER-FINAL LETT" + + "ER RAZANABAZAR SQUARE CLUSTER-FINAL LETTER LAZANABAZAR SQUARE CLUSTER-FI" + + "NAL LETTER VAZANABAZAR SQUARE INITIAL HEAD MARKZANABAZAR SQUARE CLOSING " + + "HEAD MARKZANABAZAR SQUARE MARK TSHEGZANABAZAR SQUARE MARK SHADZANABAZAR " + + "SQUARE MARK DOUBLE SHADZANABAZAR SQUARE MARK LONG TSHEGZANABAZAR SQUARE " + + "INITIAL DOUBLE-LINED HEAD MARKZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD" + + " MARKZANABAZAR SQUARE SUBJOINERSOYOMBO LETTER ASOYOMBO VOWEL SIGN ISOYOM" + + "BO VOWEL SIGN UESOYOMBO VOWEL SIGN USOYOMBO VOWEL SIGN ESOYOMBO VOWEL SI" + + "GN OSOYOMBO VOWEL SIGN OESOYOMBO VOWEL SIGN AISOYOMBO VOWEL SIGN AUSOYOM" + + "BO VOWEL SIGN VOCALIC RSOYOMBO VOWEL SIGN VOCALIC LSOYOMBO VOWEL LENGTH " + + "MARKSOYOMBO LETTER KASOYOMBO LETTER KHASOYOMBO LETTER GASOYOMBO LETTER G" + + "HASOYOMBO LETTER NGASOYOMBO LETTER CASOYOMBO LETTER CHASOYOMBO LETTER JA" + + "SOYOMBO LETTER JHASOYOMBO LETTER NYASOYOMBO LETTER TTASOYOMBO LETTER TTH" + + "ASOYOMBO LETTER DDASOYOMBO LETTER DDHASOYOMBO LETTER NNASOYOMBO LETTER T" + + "ASOYOMBO LETTER THASOYOMBO LETTER DASOYOMBO LETTER DHASOYOMBO LETTER NAS" + + "OYOMBO LETTER PASOYOMBO LETTER PHASOYOMBO LETTER BASOYOMBO LETTER BHASOY" + + "OMBO LETTER MASOYOMBO LETTER TSASOYOMBO LETTER TSHASOYOMBO LETTER DZASOY" + + "OMBO LETTER ZHASOYOMBO LETTER ZASOYOMBO LETTER -ASOYOMBO LETTER YASOYOMB" + + "O LETTER RASOYOMBO LETTER LASOYOMBO LETTER VASOYOMBO LETTER SHASOYOMBO L" + + "ETTER SSASOYOMBO LETTER SASOYOMBO LETTER HASOYOMBO LETTER KSSASOYOMBO CL" + + "USTER-INITIAL LETTER RASOYOMBO CLUSTER-INITIAL LETTER LASOYOMBO CLUSTER-" + + "INITIAL LETTER SHASOYOMBO CLUSTER-INITIAL LETTER SASOYOMBO FINAL CONSONA" + + "NT SIGN GSOYOMBO FINAL CONSONANT SIGN KSOYOMBO FINAL CONSONANT SIGN NGSO" + + "YOMBO FINAL CONSONANT SIGN DSOYOMBO FINAL CONSONANT SIGN NSOYOMBO FINAL " + + "CONSONANT SIGN BSOYOMBO FINAL CONSONANT SIGN MSOYOMBO FINAL CONSONANT SI" + + "GN RSOYOMBO FINAL CONSONANT SIGN LSOYOMBO FINAL CONSONANT SIGN SHSOYOMBO" + + " FINAL CONSONANT SIGN SSOYOMBO FINAL CONSONANT SIGN -ASOYOMBO SIGN ANUSV" + + "ARASOYOMBO SIGN VISARGASOYOMBO GEMINATION MARKSOYOMBO SUBJOINERSOYOMBO M" + + "ARK TSHEGSOYOMBO MARK SHADSOYOMBO MARK DOUBLE SHADSOYOMBO HEAD MARK WITH" + + " MOON AND SUN AND TRIPLE FLAMESOYOMBO HEAD MARK WITH MOON AND SUN AND FL" + + "AMESOYOMBO HEAD MARK WITH MOON AND SUNSOYOMBO TERMINAL MARK-1SOYOMBO TER" + + "MINAL MARK-2PAU CIN HAU LETTER PAPAU CIN HAU LETTER KAPAU CIN HAU LETTER" + + " LAPAU CIN HAU LETTER MAPAU CIN HAU LETTER DAPAU CIN HAU LETTER ZAPAU CI" + + "N HAU LETTER VAPAU CIN HAU LETTER NGAPAU CIN HAU LETTER HAPAU CIN HAU LE" + + "TTER GAPAU CIN HAU LETTER KHAPAU CIN HAU LETTER SAPAU CIN HAU LETTER BAP" + + "AU CIN HAU LETTER CAPAU CIN HAU LETTER TAPAU CIN HAU LETTER THAPAU CIN H" + + "AU LETTER NAPAU CIN HAU LETTER PHAPAU CIN HAU LETTER RAPAU CIN HAU LETTE" + + "R FAPAU CIN HAU LETTER CHAPAU CIN HAU LETTER APAU CIN HAU LETTER EPAU CI" + + "N HAU LETTER IPAU CIN HAU LETTER OPAU CIN HAU LETTER UPAU CIN HAU LETTER" + + " UAPAU CIN HAU LETTER IAPAU CIN HAU LETTER FINAL PPAU CIN HAU LETTER FIN" + + "AL KPAU CIN HAU LETTER FINAL TPAU CIN HAU LETTER FINAL MPAU CIN HAU LETT" + + "ER FINAL NPAU CIN HAU LETTER FINAL LPAU CIN HAU LETTER FINAL WPAU CIN HA" + + "U LETTER FINAL NGPAU CIN HAU LETTER FINAL YPAU CIN HAU RISING TONE LONGP" + + "AU CIN HAU RISING TONEPAU CIN HAU SANDHI GLOTTAL STOPPAU CIN HAU RISING " + + "TONE LONG FINALPAU CIN HAU RISING TONE FINALPAU CIN HAU SANDHI GLOTTAL S" + + "TOP FINALPAU CIN HAU SANDHI TONE LONGPAU CIN HAU SANDHI TONEPAU CIN HAU " + + "SANDHI TONE LONG FINALPAU CIN HAU SANDHI TONE FINALPAU CIN HAU MID-LEVEL" + + " TONEPAU CIN HAU GLOTTAL STOP VARIANTPAU CIN HAU MID-LEVEL TONE LONG FIN" + + "ALPAU CIN HAU MID-LEVEL TONE FINALPAU CIN HAU LOW-FALLING TONE LONGPAU C") + ("" + + "IN HAU LOW-FALLING TONEPAU CIN HAU GLOTTAL STOPPAU CIN HAU LOW-FALLING T" + + "ONE LONG FINALPAU CIN HAU LOW-FALLING TONE FINALPAU CIN HAU GLOTTAL STOP" + + " FINALBHAIKSUKI LETTER ABHAIKSUKI LETTER AABHAIKSUKI LETTER IBHAIKSUKI L" + + "ETTER IIBHAIKSUKI LETTER UBHAIKSUKI LETTER UUBHAIKSUKI LETTER VOCALIC RB" + + "HAIKSUKI LETTER VOCALIC RRBHAIKSUKI LETTER VOCALIC LBHAIKSUKI LETTER EBH" + + "AIKSUKI LETTER AIBHAIKSUKI LETTER OBHAIKSUKI LETTER AUBHAIKSUKI LETTER K" + + "ABHAIKSUKI LETTER KHABHAIKSUKI LETTER GABHAIKSUKI LETTER GHABHAIKSUKI LE" + + "TTER NGABHAIKSUKI LETTER CABHAIKSUKI LETTER CHABHAIKSUKI LETTER JABHAIKS" + + "UKI LETTER JHABHAIKSUKI LETTER NYABHAIKSUKI LETTER TTABHAIKSUKI LETTER T" + + "THABHAIKSUKI LETTER DDABHAIKSUKI LETTER DDHABHAIKSUKI LETTER NNABHAIKSUK" + + "I LETTER TABHAIKSUKI LETTER THABHAIKSUKI LETTER DABHAIKSUKI LETTER DHABH" + + "AIKSUKI LETTER NABHAIKSUKI LETTER PABHAIKSUKI LETTER PHABHAIKSUKI LETTER" + + " BABHAIKSUKI LETTER BHABHAIKSUKI LETTER MABHAIKSUKI LETTER YABHAIKSUKI L" + + "ETTER RABHAIKSUKI LETTER LABHAIKSUKI LETTER VABHAIKSUKI LETTER SHABHAIKS" + + "UKI LETTER SSABHAIKSUKI LETTER SABHAIKSUKI LETTER HABHAIKSUKI VOWEL SIGN" + + " AABHAIKSUKI VOWEL SIGN IBHAIKSUKI VOWEL SIGN IIBHAIKSUKI VOWEL SIGN UBH" + + "AIKSUKI VOWEL SIGN UUBHAIKSUKI VOWEL SIGN VOCALIC RBHAIKSUKI VOWEL SIGN " + + "VOCALIC RRBHAIKSUKI VOWEL SIGN VOCALIC LBHAIKSUKI VOWEL SIGN EBHAIKSUKI " + + "VOWEL SIGN AIBHAIKSUKI VOWEL SIGN OBHAIKSUKI VOWEL SIGN AUBHAIKSUKI SIGN" + + " CANDRABINDUBHAIKSUKI SIGN ANUSVARABHAIKSUKI SIGN VISARGABHAIKSUKI SIGN " + + "VIRAMABHAIKSUKI SIGN AVAGRAHABHAIKSUKI DANDABHAIKSUKI DOUBLE DANDABHAIKS" + + "UKI WORD SEPARATORBHAIKSUKI GAP FILLER-1BHAIKSUKI GAP FILLER-2BHAIKSUKI " + + "DIGIT ZEROBHAIKSUKI DIGIT ONEBHAIKSUKI DIGIT TWOBHAIKSUKI DIGIT THREEBHA" + + "IKSUKI DIGIT FOURBHAIKSUKI DIGIT FIVEBHAIKSUKI DIGIT SIXBHAIKSUKI DIGIT " + + "SEVENBHAIKSUKI DIGIT EIGHTBHAIKSUKI DIGIT NINEBHAIKSUKI NUMBER ONEBHAIKS" + + "UKI NUMBER TWOBHAIKSUKI NUMBER THREEBHAIKSUKI NUMBER FOURBHAIKSUKI NUMBE" + + "R FIVEBHAIKSUKI NUMBER SIXBHAIKSUKI NUMBER SEVENBHAIKSUKI NUMBER EIGHTBH" + + "AIKSUKI NUMBER NINEBHAIKSUKI NUMBER TENBHAIKSUKI NUMBER TWENTYBHAIKSUKI " + + "NUMBER THIRTYBHAIKSUKI NUMBER FORTYBHAIKSUKI NUMBER FIFTYBHAIKSUKI NUMBE" + + "R SIXTYBHAIKSUKI NUMBER SEVENTYBHAIKSUKI NUMBER EIGHTYBHAIKSUKI NUMBER N" + + "INETYBHAIKSUKI HUNDREDS UNIT MARKMARCHEN HEAD MARKMARCHEN MARK SHADMARCH" + + "EN LETTER KAMARCHEN LETTER KHAMARCHEN LETTER GAMARCHEN LETTER NGAMARCHEN" + + " LETTER CAMARCHEN LETTER CHAMARCHEN LETTER JAMARCHEN LETTER NYAMARCHEN L" + + "ETTER TAMARCHEN LETTER THAMARCHEN LETTER DAMARCHEN LETTER NAMARCHEN LETT" + + "ER PAMARCHEN LETTER PHAMARCHEN LETTER BAMARCHEN LETTER MAMARCHEN LETTER " + + "TSAMARCHEN LETTER TSHAMARCHEN LETTER DZAMARCHEN LETTER WAMARCHEN LETTER " + + "ZHAMARCHEN LETTER ZAMARCHEN LETTER -AMARCHEN LETTER YAMARCHEN LETTER RAM" + + "ARCHEN LETTER LAMARCHEN LETTER SHAMARCHEN LETTER SAMARCHEN LETTER HAMARC" + + "HEN LETTER AMARCHEN SUBJOINED LETTER KAMARCHEN SUBJOINED LETTER KHAMARCH" + + "EN SUBJOINED LETTER GAMARCHEN SUBJOINED LETTER NGAMARCHEN SUBJOINED LETT" + + "ER CAMARCHEN SUBJOINED LETTER CHAMARCHEN SUBJOINED LETTER JAMARCHEN SUBJ" + + "OINED LETTER NYAMARCHEN SUBJOINED LETTER TAMARCHEN SUBJOINED LETTER THAM" + + "ARCHEN SUBJOINED LETTER DAMARCHEN SUBJOINED LETTER NAMARCHEN SUBJOINED L" + + "ETTER PAMARCHEN SUBJOINED LETTER PHAMARCHEN SUBJOINED LETTER BAMARCHEN S" + + "UBJOINED LETTER MAMARCHEN SUBJOINED LETTER TSAMARCHEN SUBJOINED LETTER T" + + "SHAMARCHEN SUBJOINED LETTER DZAMARCHEN SUBJOINED LETTER WAMARCHEN SUBJOI" + + "NED LETTER ZHAMARCHEN SUBJOINED LETTER ZAMARCHEN SUBJOINED LETTER YAMARC" + + "HEN SUBJOINED LETTER RAMARCHEN SUBJOINED LETTER LAMARCHEN SUBJOINED LETT" + + "ER SHAMARCHEN SUBJOINED LETTER SAMARCHEN SUBJOINED LETTER HAMARCHEN SUBJ" + + "OINED LETTER AMARCHEN VOWEL SIGN AAMARCHEN VOWEL SIGN IMARCHEN VOWEL SIG" + + "N UMARCHEN VOWEL SIGN EMARCHEN VOWEL SIGN OMARCHEN SIGN ANUSVARAMARCHEN " + + "SIGN CANDRABINDUMASARAM GONDI LETTER AMASARAM GONDI LETTER AAMASARAM GON" + + "DI LETTER IMASARAM GONDI LETTER IIMASARAM GONDI LETTER UMASARAM GONDI LE" + + "TTER UUMASARAM GONDI LETTER EMASARAM GONDI LETTER AIMASARAM GONDI LETTER" + + " OMASARAM GONDI LETTER AUMASARAM GONDI LETTER KAMASARAM GONDI LETTER KHA" + + "MASARAM GONDI LETTER GAMASARAM GONDI LETTER GHAMASARAM GONDI LETTER NGAM" + + "ASARAM GONDI LETTER CAMASARAM GONDI LETTER CHAMASARAM GONDI LETTER JAMAS" + + "ARAM GONDI LETTER JHAMASARAM GONDI LETTER NYAMASARAM GONDI LETTER TTAMAS" + + "ARAM GONDI LETTER TTHAMASARAM GONDI LETTER DDAMASARAM GONDI LETTER DDHAM" + + "ASARAM GONDI LETTER NNAMASARAM GONDI LETTER TAMASARAM GONDI LETTER THAMA" + + "SARAM GONDI LETTER DAMASARAM GONDI LETTER DHAMASARAM GONDI LETTER NAMASA" + + "RAM GONDI LETTER PAMASARAM GONDI LETTER PHAMASARAM GONDI LETTER BAMASARA" + + "M GONDI LETTER BHAMASARAM GONDI LETTER MAMASARAM GONDI LETTER YAMASARAM " + + "GONDI LETTER RAMASARAM GONDI LETTER LAMASARAM GONDI LETTER VAMASARAM GON") + ("" + + "DI LETTER SHAMASARAM GONDI LETTER SSAMASARAM GONDI LETTER SAMASARAM GOND" + + "I LETTER HAMASARAM GONDI LETTER LLAMASARAM GONDI LETTER KSSAMASARAM GOND" + + "I LETTER JNYAMASARAM GONDI LETTER TRAMASARAM GONDI VOWEL SIGN AAMASARAM " + + "GONDI VOWEL SIGN IMASARAM GONDI VOWEL SIGN IIMASARAM GONDI VOWEL SIGN UM" + + "ASARAM GONDI VOWEL SIGN UUMASARAM GONDI VOWEL SIGN VOCALIC RMASARAM GOND" + + "I VOWEL SIGN EMASARAM GONDI VOWEL SIGN AIMASARAM GONDI VOWEL SIGN OMASAR" + + "AM GONDI VOWEL SIGN AUMASARAM GONDI SIGN ANUSVARAMASARAM GONDI SIGN VISA" + + "RGAMASARAM GONDI SIGN NUKTAMASARAM GONDI SIGN CANDRAMASARAM GONDI SIGN H" + + "ALANTAMASARAM GONDI VIRAMAMASARAM GONDI REPHAMASARAM GONDI RA-KARAMASARA" + + "M GONDI DIGIT ZEROMASARAM GONDI DIGIT ONEMASARAM GONDI DIGIT TWOMASARAM " + + "GONDI DIGIT THREEMASARAM GONDI DIGIT FOURMASARAM GONDI DIGIT FIVEMASARAM" + + " GONDI DIGIT SIXMASARAM GONDI DIGIT SEVENMASARAM GONDI DIGIT EIGHTMASARA" + + "M GONDI DIGIT NINECUNEIFORM SIGN ACUNEIFORM SIGN A TIMES ACUNEIFORM SIGN" + + " A TIMES BADCUNEIFORM SIGN A TIMES GAN2 TENUCUNEIFORM SIGN A TIMES HACUN" + + "EIFORM SIGN A TIMES IGICUNEIFORM SIGN A TIMES LAGAR GUNUCUNEIFORM SIGN A" + + " TIMES MUSHCUNEIFORM SIGN A TIMES SAGCUNEIFORM SIGN A2CUNEIFORM SIGN ABC" + + "UNEIFORM SIGN AB TIMES ASH2CUNEIFORM SIGN AB TIMES DUN3 GUNUCUNEIFORM SI" + + "GN AB TIMES GALCUNEIFORM SIGN AB TIMES GAN2 TENUCUNEIFORM SIGN AB TIMES " + + "HACUNEIFORM SIGN AB TIMES IGI GUNUCUNEIFORM SIGN AB TIMES IMINCUNEIFORM " + + "SIGN AB TIMES LAGABCUNEIFORM SIGN AB TIMES SHESHCUNEIFORM SIGN AB TIMES " + + "U PLUS U PLUS UCUNEIFORM SIGN AB GUNUCUNEIFORM SIGN AB2CUNEIFORM SIGN AB" + + "2 TIMES BALAGCUNEIFORM SIGN AB2 TIMES GAN2 TENUCUNEIFORM SIGN AB2 TIMES " + + "ME PLUS ENCUNEIFORM SIGN AB2 TIMES SHA3CUNEIFORM SIGN AB2 TIMES TAK4CUNE" + + "IFORM SIGN ADCUNEIFORM SIGN AKCUNEIFORM SIGN AK TIMES ERIN2CUNEIFORM SIG" + + "N AK TIMES SHITA PLUS GISHCUNEIFORM SIGN ALCUNEIFORM SIGN AL TIMES ALCUN" + + "EIFORM SIGN AL TIMES DIM2CUNEIFORM SIGN AL TIMES GISHCUNEIFORM SIGN AL T" + + "IMES HACUNEIFORM SIGN AL TIMES KAD3CUNEIFORM SIGN AL TIMES KICUNEIFORM S" + + "IGN AL TIMES SHECUNEIFORM SIGN AL TIMES USHCUNEIFORM SIGN ALANCUNEIFORM " + + "SIGN ALEPHCUNEIFORM SIGN AMARCUNEIFORM SIGN AMAR TIMES SHECUNEIFORM SIGN" + + " ANCUNEIFORM SIGN AN OVER ANCUNEIFORM SIGN AN THREE TIMESCUNEIFORM SIGN " + + "AN PLUS NAGA OPPOSING AN PLUS NAGACUNEIFORM SIGN AN PLUS NAGA SQUAREDCUN" + + "EIFORM SIGN ANSHECUNEIFORM SIGN APINCUNEIFORM SIGN ARADCUNEIFORM SIGN AR" + + "AD TIMES KURCUNEIFORM SIGN ARKABCUNEIFORM SIGN ASAL2CUNEIFORM SIGN ASHCU" + + "NEIFORM SIGN ASH ZIDA TENUCUNEIFORM SIGN ASH KABA TENUCUNEIFORM SIGN ASH" + + " OVER ASH TUG2 OVER TUG2 TUG2 OVER TUG2 PAPCUNEIFORM SIGN ASH OVER ASH O" + + "VER ASHCUNEIFORM SIGN ASH OVER ASH OVER ASH CROSSING ASH OVER ASH OVER A" + + "SHCUNEIFORM SIGN ASH2CUNEIFORM SIGN ASHGABCUNEIFORM SIGN BACUNEIFORM SIG" + + "N BADCUNEIFORM SIGN BAG3CUNEIFORM SIGN BAHAR2CUNEIFORM SIGN BALCUNEIFORM" + + " SIGN BAL OVER BALCUNEIFORM SIGN BALAGCUNEIFORM SIGN BARCUNEIFORM SIGN B" + + "ARA2CUNEIFORM SIGN BICUNEIFORM SIGN BI TIMES ACUNEIFORM SIGN BI TIMES GA" + + "RCUNEIFORM SIGN BI TIMES IGI GUNUCUNEIFORM SIGN BUCUNEIFORM SIGN BU OVER" + + " BU ABCUNEIFORM SIGN BU OVER BU UNCUNEIFORM SIGN BU CROSSING BUCUNEIFORM" + + " SIGN BULUGCUNEIFORM SIGN BULUG OVER BULUGCUNEIFORM SIGN BURCUNEIFORM SI" + + "GN BUR2CUNEIFORM SIGN DACUNEIFORM SIGN DAGCUNEIFORM SIGN DAG KISIM5 TIME" + + "S A PLUS MASHCUNEIFORM SIGN DAG KISIM5 TIMES AMARCUNEIFORM SIGN DAG KISI" + + "M5 TIMES BALAGCUNEIFORM SIGN DAG KISIM5 TIMES BICUNEIFORM SIGN DAG KISIM" + + "5 TIMES GACUNEIFORM SIGN DAG KISIM5 TIMES GA PLUS MASHCUNEIFORM SIGN DAG" + + " KISIM5 TIMES GICUNEIFORM SIGN DAG KISIM5 TIMES GIR2CUNEIFORM SIGN DAG K" + + "ISIM5 TIMES GUDCUNEIFORM SIGN DAG KISIM5 TIMES HACUNEIFORM SIGN DAG KISI" + + "M5 TIMES IRCUNEIFORM SIGN DAG KISIM5 TIMES IR PLUS LUCUNEIFORM SIGN DAG " + + "KISIM5 TIMES KAKCUNEIFORM SIGN DAG KISIM5 TIMES LACUNEIFORM SIGN DAG KIS" + + "IM5 TIMES LUCUNEIFORM SIGN DAG KISIM5 TIMES LU PLUS MASH2CUNEIFORM SIGN " + + "DAG KISIM5 TIMES LUMCUNEIFORM SIGN DAG KISIM5 TIMES NECUNEIFORM SIGN DAG" + + " KISIM5 TIMES PAP PLUS PAPCUNEIFORM SIGN DAG KISIM5 TIMES SICUNEIFORM SI" + + "GN DAG KISIM5 TIMES TAK4CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS GIR2CUNE" + + "IFORM SIGN DAG KISIM5 TIMES USHCUNEIFORM SIGN DAMCUNEIFORM SIGN DARCUNEI" + + "FORM SIGN DARA3CUNEIFORM SIGN DARA4CUNEIFORM SIGN DICUNEIFORM SIGN DIBCU" + + "NEIFORM SIGN DIMCUNEIFORM SIGN DIM TIMES SHECUNEIFORM SIGN DIM2CUNEIFORM" + + " SIGN DINCUNEIFORM SIGN DIN KASKAL U GUNU DISHCUNEIFORM SIGN DISHCUNEIFO" + + "RM SIGN DUCUNEIFORM SIGN DU OVER DUCUNEIFORM SIGN DU GUNUCUNEIFORM SIGN " + + "DU SHESHIGCUNEIFORM SIGN DUBCUNEIFORM SIGN DUB TIMES ESH2CUNEIFORM SIGN " + + "DUB2CUNEIFORM SIGN DUGCUNEIFORM SIGN DUGUDCUNEIFORM SIGN DUHCUNEIFORM SI" + + "GN DUNCUNEIFORM SIGN DUN3CUNEIFORM SIGN DUN3 GUNUCUNEIFORM SIGN DUN3 GUN" + + "U GUNUCUNEIFORM SIGN DUN4CUNEIFORM SIGN DUR2CUNEIFORM SIGN ECUNEIFORM SI") + ("" + + "GN E TIMES PAPCUNEIFORM SIGN E OVER E NUN OVER NUNCUNEIFORM SIGN E2CUNEI" + + "FORM SIGN E2 TIMES A PLUS HA PLUS DACUNEIFORM SIGN E2 TIMES GARCUNEIFORM" + + " SIGN E2 TIMES MICUNEIFORM SIGN E2 TIMES SALCUNEIFORM SIGN E2 TIMES SHEC" + + "UNEIFORM SIGN E2 TIMES UCUNEIFORM SIGN EDINCUNEIFORM SIGN EGIRCUNEIFORM " + + "SIGN ELCUNEIFORM SIGN ENCUNEIFORM SIGN EN TIMES GAN2CUNEIFORM SIGN EN TI" + + "MES GAN2 TENUCUNEIFORM SIGN EN TIMES MECUNEIFORM SIGN EN CROSSING ENCUNE" + + "IFORM SIGN EN OPPOSING ENCUNEIFORM SIGN EN SQUAREDCUNEIFORM SIGN ERENCUN" + + "EIFORM SIGN ERIN2CUNEIFORM SIGN ESH2CUNEIFORM SIGN EZENCUNEIFORM SIGN EZ" + + "EN TIMES ACUNEIFORM SIGN EZEN TIMES A PLUS LALCUNEIFORM SIGN EZEN TIMES " + + "A PLUS LAL TIMES LALCUNEIFORM SIGN EZEN TIMES ANCUNEIFORM SIGN EZEN TIME" + + "S BADCUNEIFORM SIGN EZEN TIMES DUN3 GUNUCUNEIFORM SIGN EZEN TIMES DUN3 G" + + "UNU GUNUCUNEIFORM SIGN EZEN TIMES HACUNEIFORM SIGN EZEN TIMES HA GUNUCUN" + + "EIFORM SIGN EZEN TIMES IGI GUNUCUNEIFORM SIGN EZEN TIMES KASKALCUNEIFORM" + + " SIGN EZEN TIMES KASKAL SQUAREDCUNEIFORM SIGN EZEN TIMES KU3CUNEIFORM SI" + + "GN EZEN TIMES LACUNEIFORM SIGN EZEN TIMES LAL TIMES LALCUNEIFORM SIGN EZ" + + "EN TIMES LICUNEIFORM SIGN EZEN TIMES LUCUNEIFORM SIGN EZEN TIMES U2CUNEI" + + "FORM SIGN EZEN TIMES UDCUNEIFORM SIGN GACUNEIFORM SIGN GA GUNUCUNEIFORM " + + "SIGN GA2CUNEIFORM SIGN GA2 TIMES A PLUS DA PLUS HACUNEIFORM SIGN GA2 TIM" + + "ES A PLUS HACUNEIFORM SIGN GA2 TIMES A PLUS IGICUNEIFORM SIGN GA2 TIMES " + + "AB2 TENU PLUS TABCUNEIFORM SIGN GA2 TIMES ANCUNEIFORM SIGN GA2 TIMES ASH" + + "CUNEIFORM SIGN GA2 TIMES ASH2 PLUS GALCUNEIFORM SIGN GA2 TIMES BADCUNEIF" + + "ORM SIGN GA2 TIMES BAR PLUS RACUNEIFORM SIGN GA2 TIMES BURCUNEIFORM SIGN" + + " GA2 TIMES BUR PLUS RACUNEIFORM SIGN GA2 TIMES DACUNEIFORM SIGN GA2 TIME" + + "S DICUNEIFORM SIGN GA2 TIMES DIM TIMES SHECUNEIFORM SIGN GA2 TIMES DUBCU" + + "NEIFORM SIGN GA2 TIMES ELCUNEIFORM SIGN GA2 TIMES EL PLUS LACUNEIFORM SI" + + "GN GA2 TIMES ENCUNEIFORM SIGN GA2 TIMES EN TIMES GAN2 TENUCUNEIFORM SIGN" + + " GA2 TIMES GAN2 TENUCUNEIFORM SIGN GA2 TIMES GARCUNEIFORM SIGN GA2 TIMES" + + " GICUNEIFORM SIGN GA2 TIMES GI4CUNEIFORM SIGN GA2 TIMES GI4 PLUS ACUNEIF" + + "ORM SIGN GA2 TIMES GIR2 PLUS SUCUNEIFORM SIGN GA2 TIMES HA PLUS LU PLUS " + + "ESH2CUNEIFORM SIGN GA2 TIMES HALCUNEIFORM SIGN GA2 TIMES HAL PLUS LACUNE" + + "IFORM SIGN GA2 TIMES HI PLUS LICUNEIFORM SIGN GA2 TIMES HUB2CUNEIFORM SI" + + "GN GA2 TIMES IGI GUNUCUNEIFORM SIGN GA2 TIMES ISH PLUS HU PLUS ASHCUNEIF" + + "ORM SIGN GA2 TIMES KAKCUNEIFORM SIGN GA2 TIMES KASKALCUNEIFORM SIGN GA2 " + + "TIMES KIDCUNEIFORM SIGN GA2 TIMES KID PLUS LALCUNEIFORM SIGN GA2 TIMES K" + + "U3 PLUS ANCUNEIFORM SIGN GA2 TIMES LACUNEIFORM SIGN GA2 TIMES ME PLUS EN" + + "CUNEIFORM SIGN GA2 TIMES MICUNEIFORM SIGN GA2 TIMES NUNCUNEIFORM SIGN GA" + + "2 TIMES NUN OVER NUNCUNEIFORM SIGN GA2 TIMES PACUNEIFORM SIGN GA2 TIMES " + + "SALCUNEIFORM SIGN GA2 TIMES SARCUNEIFORM SIGN GA2 TIMES SHECUNEIFORM SIG" + + "N GA2 TIMES SHE PLUS TURCUNEIFORM SIGN GA2 TIMES SHIDCUNEIFORM SIGN GA2 " + + "TIMES SUMCUNEIFORM SIGN GA2 TIMES TAK4CUNEIFORM SIGN GA2 TIMES UCUNEIFOR" + + "M SIGN GA2 TIMES UDCUNEIFORM SIGN GA2 TIMES UD PLUS DUCUNEIFORM SIGN GA2" + + " OVER GA2CUNEIFORM SIGN GABACUNEIFORM SIGN GABA CROSSING GABACUNEIFORM S" + + "IGN GADCUNEIFORM SIGN GAD OVER GAD GAR OVER GARCUNEIFORM SIGN GALCUNEIFO" + + "RM SIGN GAL GAD OVER GAD GAR OVER GARCUNEIFORM SIGN GALAMCUNEIFORM SIGN " + + "GAMCUNEIFORM SIGN GANCUNEIFORM SIGN GAN2CUNEIFORM SIGN GAN2 TENUCUNEIFOR" + + "M SIGN GAN2 OVER GAN2CUNEIFORM SIGN GAN2 CROSSING GAN2CUNEIFORM SIGN GAR" + + "CUNEIFORM SIGN GAR3CUNEIFORM SIGN GASHANCUNEIFORM SIGN GESHTINCUNEIFORM " + + "SIGN GESHTIN TIMES KURCUNEIFORM SIGN GICUNEIFORM SIGN GI TIMES ECUNEIFOR" + + "M SIGN GI TIMES UCUNEIFORM SIGN GI CROSSING GICUNEIFORM SIGN GI4CUNEIFOR" + + "M SIGN GI4 OVER GI4CUNEIFORM SIGN GI4 CROSSING GI4CUNEIFORM SIGN GIDIMCU" + + "NEIFORM SIGN GIR2CUNEIFORM SIGN GIR2 GUNUCUNEIFORM SIGN GIR3CUNEIFORM SI" + + "GN GIR3 TIMES A PLUS IGICUNEIFORM SIGN GIR3 TIMES GAN2 TENUCUNEIFORM SIG" + + "N GIR3 TIMES IGICUNEIFORM SIGN GIR3 TIMES LU PLUS IGICUNEIFORM SIGN GIR3" + + " TIMES PACUNEIFORM SIGN GISALCUNEIFORM SIGN GISHCUNEIFORM SIGN GISH CROS" + + "SING GISHCUNEIFORM SIGN GISH TIMES BADCUNEIFORM SIGN GISH TIMES TAK4CUNE" + + "IFORM SIGN GISH TENUCUNEIFORM SIGN GUCUNEIFORM SIGN GU CROSSING GUCUNEIF" + + "ORM SIGN GU2CUNEIFORM SIGN GU2 TIMES KAKCUNEIFORM SIGN GU2 TIMES KAK TIM" + + "ES IGI GUNUCUNEIFORM SIGN GU2 TIMES NUNCUNEIFORM SIGN GU2 TIMES SAL PLUS" + + " TUG2CUNEIFORM SIGN GU2 GUNUCUNEIFORM SIGN GUDCUNEIFORM SIGN GUD TIMES A" + + " PLUS KURCUNEIFORM SIGN GUD TIMES KURCUNEIFORM SIGN GUD OVER GUD LUGALCU" + + "NEIFORM SIGN GULCUNEIFORM SIGN GUMCUNEIFORM SIGN GUM TIMES SHECUNEIFORM " + + "SIGN GURCUNEIFORM SIGN GUR7CUNEIFORM SIGN GURUNCUNEIFORM SIGN GURUSHCUNE" + + "IFORM SIGN HACUNEIFORM SIGN HA TENUCUNEIFORM SIGN HA GUNUCUNEIFORM SIGN " + + "HALCUNEIFORM SIGN HICUNEIFORM SIGN HI TIMES ASHCUNEIFORM SIGN HI TIMES A") + ("" + + "SH2CUNEIFORM SIGN HI TIMES BADCUNEIFORM SIGN HI TIMES DISHCUNEIFORM SIGN" + + " HI TIMES GADCUNEIFORM SIGN HI TIMES KINCUNEIFORM SIGN HI TIMES NUNCUNEI" + + "FORM SIGN HI TIMES SHECUNEIFORM SIGN HI TIMES UCUNEIFORM SIGN HUCUNEIFOR" + + "M SIGN HUB2CUNEIFORM SIGN HUB2 TIMES ANCUNEIFORM SIGN HUB2 TIMES HALCUNE" + + "IFORM SIGN HUB2 TIMES KASKALCUNEIFORM SIGN HUB2 TIMES LISHCUNEIFORM SIGN" + + " HUB2 TIMES UDCUNEIFORM SIGN HUL2CUNEIFORM SIGN ICUNEIFORM SIGN I ACUNEI" + + "FORM SIGN IBCUNEIFORM SIGN IDIMCUNEIFORM SIGN IDIM OVER IDIM BURCUNEIFOR" + + "M SIGN IDIM OVER IDIM SQUAREDCUNEIFORM SIGN IGCUNEIFORM SIGN IGICUNEIFOR" + + "M SIGN IGI DIBCUNEIFORM SIGN IGI RICUNEIFORM SIGN IGI OVER IGI SHIR OVER" + + " SHIR UD OVER UDCUNEIFORM SIGN IGI GUNUCUNEIFORM SIGN ILCUNEIFORM SIGN I" + + "L TIMES GAN2 TENUCUNEIFORM SIGN IL2CUNEIFORM SIGN IMCUNEIFORM SIGN IM TI" + + "MES TAK4CUNEIFORM SIGN IM CROSSING IMCUNEIFORM SIGN IM OPPOSING IMCUNEIF" + + "ORM SIGN IM SQUAREDCUNEIFORM SIGN IMINCUNEIFORM SIGN INCUNEIFORM SIGN IR" + + "CUNEIFORM SIGN ISHCUNEIFORM SIGN KACUNEIFORM SIGN KA TIMES ACUNEIFORM SI" + + "GN KA TIMES ADCUNEIFORM SIGN KA TIMES AD PLUS KU3CUNEIFORM SIGN KA TIMES" + + " ASH2CUNEIFORM SIGN KA TIMES BADCUNEIFORM SIGN KA TIMES BALAGCUNEIFORM S" + + "IGN KA TIMES BARCUNEIFORM SIGN KA TIMES BICUNEIFORM SIGN KA TIMES ERIN2C" + + "UNEIFORM SIGN KA TIMES ESH2CUNEIFORM SIGN KA TIMES GACUNEIFORM SIGN KA T" + + "IMES GALCUNEIFORM SIGN KA TIMES GAN2 TENUCUNEIFORM SIGN KA TIMES GARCUNE" + + "IFORM SIGN KA TIMES GAR PLUS SHA3 PLUS ACUNEIFORM SIGN KA TIMES GICUNEIF" + + "ORM SIGN KA TIMES GIR2CUNEIFORM SIGN KA TIMES GISH PLUS SARCUNEIFORM SIG" + + "N KA TIMES GISH CROSSING GISHCUNEIFORM SIGN KA TIMES GUCUNEIFORM SIGN KA" + + " TIMES GUR7CUNEIFORM SIGN KA TIMES IGICUNEIFORM SIGN KA TIMES IMCUNEIFOR" + + "M SIGN KA TIMES KAKCUNEIFORM SIGN KA TIMES KICUNEIFORM SIGN KA TIMES KID" + + "CUNEIFORM SIGN KA TIMES LICUNEIFORM SIGN KA TIMES LUCUNEIFORM SIGN KA TI" + + "MES MECUNEIFORM SIGN KA TIMES ME PLUS DUCUNEIFORM SIGN KA TIMES ME PLUS " + + "GICUNEIFORM SIGN KA TIMES ME PLUS TECUNEIFORM SIGN KA TIMES MICUNEIFORM " + + "SIGN KA TIMES MI PLUS NUNUZCUNEIFORM SIGN KA TIMES NECUNEIFORM SIGN KA T" + + "IMES NUNCUNEIFORM SIGN KA TIMES PICUNEIFORM SIGN KA TIMES RUCUNEIFORM SI" + + "GN KA TIMES SACUNEIFORM SIGN KA TIMES SARCUNEIFORM SIGN KA TIMES SHACUNE" + + "IFORM SIGN KA TIMES SHECUNEIFORM SIGN KA TIMES SHIDCUNEIFORM SIGN KA TIM" + + "ES SHUCUNEIFORM SIGN KA TIMES SIGCUNEIFORM SIGN KA TIMES SUHURCUNEIFORM " + + "SIGN KA TIMES TARCUNEIFORM SIGN KA TIMES UCUNEIFORM SIGN KA TIMES U2CUNE" + + "IFORM SIGN KA TIMES UDCUNEIFORM SIGN KA TIMES UMUM TIMES PACUNEIFORM SIG" + + "N KA TIMES USHCUNEIFORM SIGN KA TIMES ZICUNEIFORM SIGN KA2CUNEIFORM SIGN" + + " KA2 CROSSING KA2CUNEIFORM SIGN KABCUNEIFORM SIGN KAD2CUNEIFORM SIGN KAD" + + "3CUNEIFORM SIGN KAD4CUNEIFORM SIGN KAD5CUNEIFORM SIGN KAD5 OVER KAD5CUNE" + + "IFORM SIGN KAKCUNEIFORM SIGN KAK TIMES IGI GUNUCUNEIFORM SIGN KALCUNEIFO" + + "RM SIGN KAL TIMES BADCUNEIFORM SIGN KAL CROSSING KALCUNEIFORM SIGN KAM2C" + + "UNEIFORM SIGN KAM4CUNEIFORM SIGN KASKALCUNEIFORM SIGN KASKAL LAGAB TIMES" + + " U OVER LAGAB TIMES UCUNEIFORM SIGN KASKAL OVER KASKAL LAGAB TIMES U OVE" + + "R LAGAB TIMES UCUNEIFORM SIGN KESH2CUNEIFORM SIGN KICUNEIFORM SIGN KI TI" + + "MES BADCUNEIFORM SIGN KI TIMES UCUNEIFORM SIGN KI TIMES UDCUNEIFORM SIGN" + + " KIDCUNEIFORM SIGN KINCUNEIFORM SIGN KISALCUNEIFORM SIGN KISHCUNEIFORM S" + + "IGN KISIM5CUNEIFORM SIGN KISIM5 OVER KISIM5CUNEIFORM SIGN KUCUNEIFORM SI" + + "GN KU OVER HI TIMES ASH2 KU OVER HI TIMES ASH2CUNEIFORM SIGN KU3CUNEIFOR" + + "M SIGN KU4CUNEIFORM SIGN KU4 VARIANT FORMCUNEIFORM SIGN KU7CUNEIFORM SIG" + + "N KULCUNEIFORM SIGN KUL GUNUCUNEIFORM SIGN KUNCUNEIFORM SIGN KURCUNEIFOR" + + "M SIGN KUR OPPOSING KURCUNEIFORM SIGN KUSHU2CUNEIFORM SIGN KWU318CUNEIFO" + + "RM SIGN LACUNEIFORM SIGN LAGABCUNEIFORM SIGN LAGAB TIMES ACUNEIFORM SIGN" + + " LAGAB TIMES A PLUS DA PLUS HACUNEIFORM SIGN LAGAB TIMES A PLUS GARCUNEI" + + "FORM SIGN LAGAB TIMES A PLUS LALCUNEIFORM SIGN LAGAB TIMES ALCUNEIFORM S" + + "IGN LAGAB TIMES ANCUNEIFORM SIGN LAGAB TIMES ASH ZIDA TENUCUNEIFORM SIGN" + + " LAGAB TIMES BADCUNEIFORM SIGN LAGAB TIMES BICUNEIFORM SIGN LAGAB TIMES " + + "DARCUNEIFORM SIGN LAGAB TIMES ENCUNEIFORM SIGN LAGAB TIMES GACUNEIFORM S" + + "IGN LAGAB TIMES GARCUNEIFORM SIGN LAGAB TIMES GUDCUNEIFORM SIGN LAGAB TI" + + "MES GUD PLUS GUDCUNEIFORM SIGN LAGAB TIMES HACUNEIFORM SIGN LAGAB TIMES " + + "HALCUNEIFORM SIGN LAGAB TIMES HI TIMES NUNCUNEIFORM SIGN LAGAB TIMES IGI" + + " GUNUCUNEIFORM SIGN LAGAB TIMES IMCUNEIFORM SIGN LAGAB TIMES IM PLUS HAC" + + "UNEIFORM SIGN LAGAB TIMES IM PLUS LUCUNEIFORM SIGN LAGAB TIMES KICUNEIFO" + + "RM SIGN LAGAB TIMES KINCUNEIFORM SIGN LAGAB TIMES KU3CUNEIFORM SIGN LAGA" + + "B TIMES KULCUNEIFORM SIGN LAGAB TIMES KUL PLUS HI PLUS ACUNEIFORM SIGN L" + + "AGAB TIMES LAGABCUNEIFORM SIGN LAGAB TIMES LISHCUNEIFORM SIGN LAGAB TIME" + + "S LUCUNEIFORM SIGN LAGAB TIMES LULCUNEIFORM SIGN LAGAB TIMES MECUNEIFORM") + ("" + + " SIGN LAGAB TIMES ME PLUS ENCUNEIFORM SIGN LAGAB TIMES MUSHCUNEIFORM SIG" + + "N LAGAB TIMES NECUNEIFORM SIGN LAGAB TIMES SHE PLUS SUMCUNEIFORM SIGN LA" + + "GAB TIMES SHITA PLUS GISH PLUS ERIN2CUNEIFORM SIGN LAGAB TIMES SHITA PLU" + + "S GISH TENUCUNEIFORM SIGN LAGAB TIMES SHU2CUNEIFORM SIGN LAGAB TIMES SHU" + + "2 PLUS SHU2CUNEIFORM SIGN LAGAB TIMES SUMCUNEIFORM SIGN LAGAB TIMES TAGC" + + "UNEIFORM SIGN LAGAB TIMES TAK4CUNEIFORM SIGN LAGAB TIMES TE PLUS A PLUS " + + "SU PLUS NACUNEIFORM SIGN LAGAB TIMES UCUNEIFORM SIGN LAGAB TIMES U PLUS " + + "ACUNEIFORM SIGN LAGAB TIMES U PLUS U PLUS UCUNEIFORM SIGN LAGAB TIMES U2" + + " PLUS ASHCUNEIFORM SIGN LAGAB TIMES UDCUNEIFORM SIGN LAGAB TIMES USHCUNE" + + "IFORM SIGN LAGAB SQUAREDCUNEIFORM SIGN LAGARCUNEIFORM SIGN LAGAR TIMES S" + + "HECUNEIFORM SIGN LAGAR TIMES SHE PLUS SUMCUNEIFORM SIGN LAGAR GUNUCUNEIF" + + "ORM SIGN LAGAR GUNU OVER LAGAR GUNU SHECUNEIFORM SIGN LAHSHUCUNEIFORM SI" + + "GN LALCUNEIFORM SIGN LAL TIMES LALCUNEIFORM SIGN LAMCUNEIFORM SIGN LAM T" + + "IMES KURCUNEIFORM SIGN LAM TIMES KUR PLUS RUCUNEIFORM SIGN LICUNEIFORM S" + + "IGN LILCUNEIFORM SIGN LIMMU2CUNEIFORM SIGN LISHCUNEIFORM SIGN LUCUNEIFOR" + + "M SIGN LU TIMES BADCUNEIFORM SIGN LU2CUNEIFORM SIGN LU2 TIMES ALCUNEIFOR" + + "M SIGN LU2 TIMES BADCUNEIFORM SIGN LU2 TIMES ESH2CUNEIFORM SIGN LU2 TIME" + + "S ESH2 TENUCUNEIFORM SIGN LU2 TIMES GAN2 TENUCUNEIFORM SIGN LU2 TIMES HI" + + " TIMES BADCUNEIFORM SIGN LU2 TIMES IMCUNEIFORM SIGN LU2 TIMES KAD2CUNEIF" + + "ORM SIGN LU2 TIMES KAD3CUNEIFORM SIGN LU2 TIMES KAD3 PLUS ASHCUNEIFORM S" + + "IGN LU2 TIMES KICUNEIFORM SIGN LU2 TIMES LA PLUS ASHCUNEIFORM SIGN LU2 T" + + "IMES LAGABCUNEIFORM SIGN LU2 TIMES ME PLUS ENCUNEIFORM SIGN LU2 TIMES NE" + + "CUNEIFORM SIGN LU2 TIMES NUCUNEIFORM SIGN LU2 TIMES SI PLUS ASHCUNEIFORM" + + " SIGN LU2 TIMES SIK2 PLUS BUCUNEIFORM SIGN LU2 TIMES TUG2CUNEIFORM SIGN " + + "LU2 TENUCUNEIFORM SIGN LU2 CROSSING LU2CUNEIFORM SIGN LU2 OPPOSING LU2CU" + + "NEIFORM SIGN LU2 SQUAREDCUNEIFORM SIGN LU2 SHESHIGCUNEIFORM SIGN LU3CUNE" + + "IFORM SIGN LUGALCUNEIFORM SIGN LUGAL OVER LUGALCUNEIFORM SIGN LUGAL OPPO" + + "SING LUGALCUNEIFORM SIGN LUGAL SHESHIGCUNEIFORM SIGN LUHCUNEIFORM SIGN L" + + "ULCUNEIFORM SIGN LUMCUNEIFORM SIGN LUM OVER LUMCUNEIFORM SIGN LUM OVER L" + + "UM GAR OVER GARCUNEIFORM SIGN MACUNEIFORM SIGN MA TIMES TAK4CUNEIFORM SI" + + "GN MA GUNUCUNEIFORM SIGN MA2CUNEIFORM SIGN MAHCUNEIFORM SIGN MARCUNEIFOR" + + "M SIGN MASHCUNEIFORM SIGN MASH2CUNEIFORM SIGN MECUNEIFORM SIGN MESCUNEIF" + + "ORM SIGN MICUNEIFORM SIGN MINCUNEIFORM SIGN MUCUNEIFORM SIGN MU OVER MUC" + + "UNEIFORM SIGN MUGCUNEIFORM SIGN MUG GUNUCUNEIFORM SIGN MUNSUBCUNEIFORM S" + + "IGN MURGU2CUNEIFORM SIGN MUSHCUNEIFORM SIGN MUSH TIMES ACUNEIFORM SIGN M" + + "USH TIMES KURCUNEIFORM SIGN MUSH TIMES ZACUNEIFORM SIGN MUSH OVER MUSHCU" + + "NEIFORM SIGN MUSH OVER MUSH TIMES A PLUS NACUNEIFORM SIGN MUSH CROSSING " + + "MUSHCUNEIFORM SIGN MUSH3CUNEIFORM SIGN MUSH3 TIMES ACUNEIFORM SIGN MUSH3" + + " TIMES A PLUS DICUNEIFORM SIGN MUSH3 TIMES DICUNEIFORM SIGN MUSH3 GUNUCU" + + "NEIFORM SIGN NACUNEIFORM SIGN NA2CUNEIFORM SIGN NAGACUNEIFORM SIGN NAGA " + + "INVERTEDCUNEIFORM SIGN NAGA TIMES SHU TENUCUNEIFORM SIGN NAGA OPPOSING N" + + "AGACUNEIFORM SIGN NAGARCUNEIFORM SIGN NAM NUTILLUCUNEIFORM SIGN NAMCUNEI" + + "FORM SIGN NAM2CUNEIFORM SIGN NECUNEIFORM SIGN NE TIMES ACUNEIFORM SIGN N" + + "E TIMES UDCUNEIFORM SIGN NE SHESHIGCUNEIFORM SIGN NICUNEIFORM SIGN NI TI" + + "MES ECUNEIFORM SIGN NI2CUNEIFORM SIGN NIMCUNEIFORM SIGN NIM TIMES GAN2 T" + + "ENUCUNEIFORM SIGN NIM TIMES GAR PLUS GAN2 TENUCUNEIFORM SIGN NINDA2CUNEI" + + "FORM SIGN NINDA2 TIMES ANCUNEIFORM SIGN NINDA2 TIMES ASHCUNEIFORM SIGN N" + + "INDA2 TIMES ASH PLUS ASHCUNEIFORM SIGN NINDA2 TIMES GUDCUNEIFORM SIGN NI" + + "NDA2 TIMES ME PLUS GAN2 TENUCUNEIFORM SIGN NINDA2 TIMES NECUNEIFORM SIGN" + + " NINDA2 TIMES NUNCUNEIFORM SIGN NINDA2 TIMES SHECUNEIFORM SIGN NINDA2 TI" + + "MES SHE PLUS A ANCUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASHCUNEIFORM SIGN " + + "NINDA2 TIMES SHE PLUS ASH PLUS ASHCUNEIFORM SIGN NINDA2 TIMES U2 PLUS AS" + + "HCUNEIFORM SIGN NINDA2 TIMES USHCUNEIFORM SIGN NISAGCUNEIFORM SIGN NUCUN" + + "EIFORM SIGN NU11CUNEIFORM SIGN NUNCUNEIFORM SIGN NUN LAGAR TIMES GARCUNE" + + "IFORM SIGN NUN LAGAR TIMES MASHCUNEIFORM SIGN NUN LAGAR TIMES SALCUNEIFO" + + "RM SIGN NUN LAGAR TIMES SAL OVER NUN LAGAR TIMES SALCUNEIFORM SIGN NUN L" + + "AGAR TIMES USHCUNEIFORM SIGN NUN TENUCUNEIFORM SIGN NUN OVER NUNCUNEIFOR" + + "M SIGN NUN CROSSING NUNCUNEIFORM SIGN NUN CROSSING NUN LAGAR OVER LAGARC" + + "UNEIFORM SIGN NUNUZCUNEIFORM SIGN NUNUZ AB2 TIMES ASHGABCUNEIFORM SIGN N" + + "UNUZ AB2 TIMES BICUNEIFORM SIGN NUNUZ AB2 TIMES DUGCUNEIFORM SIGN NUNUZ " + + "AB2 TIMES GUDCUNEIFORM SIGN NUNUZ AB2 TIMES IGI GUNUCUNEIFORM SIGN NUNUZ" + + " AB2 TIMES KAD3CUNEIFORM SIGN NUNUZ AB2 TIMES LACUNEIFORM SIGN NUNUZ AB2" + + " TIMES NECUNEIFORM SIGN NUNUZ AB2 TIMES SILA3CUNEIFORM SIGN NUNUZ AB2 TI" + + "MES U2CUNEIFORM SIGN NUNUZ KISIM5 TIMES BICUNEIFORM SIGN NUNUZ KISIM5 TI") + ("" + + "MES BI UCUNEIFORM SIGN PACUNEIFORM SIGN PADCUNEIFORM SIGN PANCUNEIFORM S" + + "IGN PAPCUNEIFORM SIGN PESH2CUNEIFORM SIGN PICUNEIFORM SIGN PI TIMES ACUN" + + "EIFORM SIGN PI TIMES ABCUNEIFORM SIGN PI TIMES BICUNEIFORM SIGN PI TIMES" + + " BUCUNEIFORM SIGN PI TIMES ECUNEIFORM SIGN PI TIMES ICUNEIFORM SIGN PI T" + + "IMES IBCUNEIFORM SIGN PI TIMES UCUNEIFORM SIGN PI TIMES U2CUNEIFORM SIGN" + + " PI CROSSING PICUNEIFORM SIGN PIRIGCUNEIFORM SIGN PIRIG TIMES KALCUNEIFO" + + "RM SIGN PIRIG TIMES UDCUNEIFORM SIGN PIRIG TIMES ZACUNEIFORM SIGN PIRIG " + + "OPPOSING PIRIGCUNEIFORM SIGN RACUNEIFORM SIGN RABCUNEIFORM SIGN RICUNEIF" + + "ORM SIGN RUCUNEIFORM SIGN SACUNEIFORM SIGN SAG NUTILLUCUNEIFORM SIGN SAG" + + "CUNEIFORM SIGN SAG TIMES ACUNEIFORM SIGN SAG TIMES DUCUNEIFORM SIGN SAG " + + "TIMES DUBCUNEIFORM SIGN SAG TIMES HACUNEIFORM SIGN SAG TIMES KAKCUNEIFOR" + + "M SIGN SAG TIMES KURCUNEIFORM SIGN SAG TIMES LUMCUNEIFORM SIGN SAG TIMES" + + " MICUNEIFORM SIGN SAG TIMES NUNCUNEIFORM SIGN SAG TIMES SALCUNEIFORM SIG" + + "N SAG TIMES SHIDCUNEIFORM SIGN SAG TIMES TABCUNEIFORM SIGN SAG TIMES U2C" + + "UNEIFORM SIGN SAG TIMES UBCUNEIFORM SIGN SAG TIMES UMCUNEIFORM SIGN SAG " + + "TIMES URCUNEIFORM SIGN SAG TIMES USHCUNEIFORM SIGN SAG OVER SAGCUNEIFORM" + + " SIGN SAG GUNUCUNEIFORM SIGN SALCUNEIFORM SIGN SAL LAGAB TIMES ASH2CUNEI" + + "FORM SIGN SANGA2CUNEIFORM SIGN SARCUNEIFORM SIGN SHACUNEIFORM SIGN SHA3C" + + "UNEIFORM SIGN SHA3 TIMES ACUNEIFORM SIGN SHA3 TIMES BADCUNEIFORM SIGN SH" + + "A3 TIMES GISHCUNEIFORM SIGN SHA3 TIMES NECUNEIFORM SIGN SHA3 TIMES SHU2C" + + "UNEIFORM SIGN SHA3 TIMES TURCUNEIFORM SIGN SHA3 TIMES UCUNEIFORM SIGN SH" + + "A3 TIMES U PLUS ACUNEIFORM SIGN SHA6CUNEIFORM SIGN SHAB6CUNEIFORM SIGN S" + + "HAR2CUNEIFORM SIGN SHECUNEIFORM SIGN SHE HUCUNEIFORM SIGN SHE OVER SHE G" + + "AD OVER GAD GAR OVER GARCUNEIFORM SIGN SHE OVER SHE TAB OVER TAB GAR OVE" + + "R GARCUNEIFORM SIGN SHEG9CUNEIFORM SIGN SHENCUNEIFORM SIGN SHESHCUNEIFOR" + + "M SIGN SHESH2CUNEIFORM SIGN SHESHLAMCUNEIFORM SIGN SHIDCUNEIFORM SIGN SH" + + "ID TIMES ACUNEIFORM SIGN SHID TIMES IMCUNEIFORM SIGN SHIMCUNEIFORM SIGN " + + "SHIM TIMES ACUNEIFORM SIGN SHIM TIMES BALCUNEIFORM SIGN SHIM TIMES BULUG" + + "CUNEIFORM SIGN SHIM TIMES DINCUNEIFORM SIGN SHIM TIMES GARCUNEIFORM SIGN" + + " SHIM TIMES IGICUNEIFORM SIGN SHIM TIMES IGI GUNUCUNEIFORM SIGN SHIM TIM" + + "ES KUSHU2CUNEIFORM SIGN SHIM TIMES LULCUNEIFORM SIGN SHIM TIMES MUGCUNEI" + + "FORM SIGN SHIM TIMES SALCUNEIFORM SIGN SHINIGCUNEIFORM SIGN SHIRCUNEIFOR" + + "M SIGN SHIR TENUCUNEIFORM SIGN SHIR OVER SHIR BUR OVER BURCUNEIFORM SIGN" + + " SHITACUNEIFORM SIGN SHUCUNEIFORM SIGN SHU OVER INVERTED SHUCUNEIFORM SI" + + "GN SHU2CUNEIFORM SIGN SHUBURCUNEIFORM SIGN SICUNEIFORM SIGN SI GUNUCUNEI" + + "FORM SIGN SIGCUNEIFORM SIGN SIG4CUNEIFORM SIGN SIG4 OVER SIG4 SHU2CUNEIF" + + "ORM SIGN SIK2CUNEIFORM SIGN SILA3CUNEIFORM SIGN SUCUNEIFORM SIGN SU OVER" + + " SUCUNEIFORM SIGN SUDCUNEIFORM SIGN SUD2CUNEIFORM SIGN SUHURCUNEIFORM SI" + + "GN SUMCUNEIFORM SIGN SUMASHCUNEIFORM SIGN SURCUNEIFORM SIGN SUR9CUNEIFOR" + + "M SIGN TACUNEIFORM SIGN TA ASTERISKCUNEIFORM SIGN TA TIMES HICUNEIFORM S" + + "IGN TA TIMES MICUNEIFORM SIGN TA GUNUCUNEIFORM SIGN TABCUNEIFORM SIGN TA" + + "B OVER TAB NI OVER NI DISH OVER DISHCUNEIFORM SIGN TAB SQUAREDCUNEIFORM " + + "SIGN TAGCUNEIFORM SIGN TAG TIMES BICUNEIFORM SIGN TAG TIMES GUDCUNEIFORM" + + " SIGN TAG TIMES SHECUNEIFORM SIGN TAG TIMES SHUCUNEIFORM SIGN TAG TIMES " + + "TUG2CUNEIFORM SIGN TAG TIMES UDCUNEIFORM SIGN TAK4CUNEIFORM SIGN TARCUNE" + + "IFORM SIGN TECUNEIFORM SIGN TE GUNUCUNEIFORM SIGN TICUNEIFORM SIGN TI TE" + + "NUCUNEIFORM SIGN TILCUNEIFORM SIGN TIRCUNEIFORM SIGN TIR TIMES TAK4CUNEI" + + "FORM SIGN TIR OVER TIRCUNEIFORM SIGN TIR OVER TIR GAD OVER GAD GAR OVER " + + "GARCUNEIFORM SIGN TUCUNEIFORM SIGN TUG2CUNEIFORM SIGN TUKCUNEIFORM SIGN " + + "TUMCUNEIFORM SIGN TURCUNEIFORM SIGN TUR OVER TUR ZA OVER ZACUNEIFORM SIG" + + "N UCUNEIFORM SIGN U GUDCUNEIFORM SIGN U U UCUNEIFORM SIGN U OVER U PA OV" + + "ER PA GAR OVER GARCUNEIFORM SIGN U OVER U SUR OVER SURCUNEIFORM SIGN U O" + + "VER U U REVERSED OVER U REVERSEDCUNEIFORM SIGN U2CUNEIFORM SIGN UBCUNEIF" + + "ORM SIGN UDCUNEIFORM SIGN UD KUSHU2CUNEIFORM SIGN UD TIMES BADCUNEIFORM " + + "SIGN UD TIMES MICUNEIFORM SIGN UD TIMES U PLUS U PLUS UCUNEIFORM SIGN UD" + + " TIMES U PLUS U PLUS U GUNUCUNEIFORM SIGN UD GUNUCUNEIFORM SIGN UD SHESH" + + "IGCUNEIFORM SIGN UD SHESHIG TIMES BADCUNEIFORM SIGN UDUGCUNEIFORM SIGN U" + + "MCUNEIFORM SIGN UM TIMES LAGABCUNEIFORM SIGN UM TIMES ME PLUS DACUNEIFOR" + + "M SIGN UM TIMES SHA3CUNEIFORM SIGN UM TIMES UCUNEIFORM SIGN UMBINCUNEIFO" + + "RM SIGN UMUMCUNEIFORM SIGN UMUM TIMES KASKALCUNEIFORM SIGN UMUM TIMES PA" + + "CUNEIFORM SIGN UNCUNEIFORM SIGN UN GUNUCUNEIFORM SIGN URCUNEIFORM SIGN U" + + "R CROSSING URCUNEIFORM SIGN UR SHESHIGCUNEIFORM SIGN UR2CUNEIFORM SIGN U" + + "R2 TIMES A PLUS HACUNEIFORM SIGN UR2 TIMES A PLUS NACUNEIFORM SIGN UR2 T" + + "IMES ALCUNEIFORM SIGN UR2 TIMES HACUNEIFORM SIGN UR2 TIMES NUNCUNEIFORM ") + ("" + + "SIGN UR2 TIMES U2CUNEIFORM SIGN UR2 TIMES U2 PLUS ASHCUNEIFORM SIGN UR2 " + + "TIMES U2 PLUS BICUNEIFORM SIGN UR4CUNEIFORM SIGN URICUNEIFORM SIGN URI3C" + + "UNEIFORM SIGN URUCUNEIFORM SIGN URU TIMES ACUNEIFORM SIGN URU TIMES ASHG" + + "ABCUNEIFORM SIGN URU TIMES BARCUNEIFORM SIGN URU TIMES DUNCUNEIFORM SIGN" + + " URU TIMES GACUNEIFORM SIGN URU TIMES GALCUNEIFORM SIGN URU TIMES GAN2 T" + + "ENUCUNEIFORM SIGN URU TIMES GARCUNEIFORM SIGN URU TIMES GUCUNEIFORM SIGN" + + " URU TIMES HACUNEIFORM SIGN URU TIMES IGICUNEIFORM SIGN URU TIMES IMCUNE" + + "IFORM SIGN URU TIMES ISHCUNEIFORM SIGN URU TIMES KICUNEIFORM SIGN URU TI" + + "MES LUMCUNEIFORM SIGN URU TIMES MINCUNEIFORM SIGN URU TIMES PACUNEIFORM " + + "SIGN URU TIMES SHECUNEIFORM SIGN URU TIMES SIG4CUNEIFORM SIGN URU TIMES " + + "TUCUNEIFORM SIGN URU TIMES U PLUS GUDCUNEIFORM SIGN URU TIMES UDCUNEIFOR" + + "M SIGN URU TIMES URUDACUNEIFORM SIGN URUDACUNEIFORM SIGN URUDA TIMES UCU" + + "NEIFORM SIGN USHCUNEIFORM SIGN USH TIMES ACUNEIFORM SIGN USH TIMES KUCUN" + + "EIFORM SIGN USH TIMES KURCUNEIFORM SIGN USH TIMES TAK4CUNEIFORM SIGN USH" + + "XCUNEIFORM SIGN USH2CUNEIFORM SIGN USHUMXCUNEIFORM SIGN UTUKICUNEIFORM S" + + "IGN UZ3CUNEIFORM SIGN UZ3 TIMES KASKALCUNEIFORM SIGN UZUCUNEIFORM SIGN Z" + + "ACUNEIFORM SIGN ZA TENUCUNEIFORM SIGN ZA SQUARED TIMES KURCUNEIFORM SIGN" + + " ZAGCUNEIFORM SIGN ZAMXCUNEIFORM SIGN ZE2CUNEIFORM SIGN ZICUNEIFORM SIGN" + + " ZI OVER ZICUNEIFORM SIGN ZI3CUNEIFORM SIGN ZIBCUNEIFORM SIGN ZIB KABA T" + + "ENUCUNEIFORM SIGN ZIGCUNEIFORM SIGN ZIZ2CUNEIFORM SIGN ZUCUNEIFORM SIGN " + + "ZU5CUNEIFORM SIGN ZU5 TIMES ACUNEIFORM SIGN ZUBURCUNEIFORM SIGN ZUMCUNEI" + + "FORM SIGN KAP ELAMITECUNEIFORM SIGN AB TIMES NUNCUNEIFORM SIGN AB2 TIMES" + + " ACUNEIFORM SIGN AMAR TIMES KUGCUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS M" + + "ASHCUNEIFORM SIGN DAG3CUNEIFORM SIGN DISH PLUS SHUCUNEIFORM SIGN DUB TIM" + + "ES SHECUNEIFORM SIGN EZEN TIMES GUDCUNEIFORM SIGN EZEN TIMES SHECUNEIFOR" + + "M SIGN GA2 TIMES AN PLUS KAK PLUS ACUNEIFORM SIGN GA2 TIMES ASH2CUNEIFOR" + + "M SIGN GE22CUNEIFORM SIGN GIGCUNEIFORM SIGN HUSHCUNEIFORM SIGN KA TIMES " + + "ANSHECUNEIFORM SIGN KA TIMES ASH3CUNEIFORM SIGN KA TIMES GISHCUNEIFORM S" + + "IGN KA TIMES GUDCUNEIFORM SIGN KA TIMES HI TIMES ASH2CUNEIFORM SIGN KA T" + + "IMES LUMCUNEIFORM SIGN KA TIMES PACUNEIFORM SIGN KA TIMES SHULCUNEIFORM " + + "SIGN KA TIMES TUCUNEIFORM SIGN KA TIMES UR2CUNEIFORM SIGN LAGAB TIMES GI" + + "CUNEIFORM SIGN LU2 SHESHIG TIMES BADCUNEIFORM SIGN LU2 TIMES ESH2 PLUS L" + + "ALCUNEIFORM SIGN LU2 TIMES SHUCUNEIFORM SIGN MESHCUNEIFORM SIGN MUSH3 TI" + + "MES ZACUNEIFORM SIGN NA4CUNEIFORM SIGN NINCUNEIFORM SIGN NIN9CUNEIFORM S" + + "IGN NINDA2 TIMES BALCUNEIFORM SIGN NINDA2 TIMES GICUNEIFORM SIGN NU11 RO" + + "TATED NINETY DEGREESCUNEIFORM SIGN PESH2 ASTERISKCUNEIFORM SIGN PIR2CUNE" + + "IFORM SIGN SAG TIMES IGI GUNUCUNEIFORM SIGN TI2CUNEIFORM SIGN UM TIMES M" + + "ECUNEIFORM SIGN U UCUNEIFORM NUMERIC SIGN TWO ASHCUNEIFORM NUMERIC SIGN " + + "THREE ASHCUNEIFORM NUMERIC SIGN FOUR ASHCUNEIFORM NUMERIC SIGN FIVE ASHC" + + "UNEIFORM NUMERIC SIGN SIX ASHCUNEIFORM NUMERIC SIGN SEVEN ASHCUNEIFORM N" + + "UMERIC SIGN EIGHT ASHCUNEIFORM NUMERIC SIGN NINE ASHCUNEIFORM NUMERIC SI" + + "GN THREE DISHCUNEIFORM NUMERIC SIGN FOUR DISHCUNEIFORM NUMERIC SIGN FIVE" + + " DISHCUNEIFORM NUMERIC SIGN SIX DISHCUNEIFORM NUMERIC SIGN SEVEN DISHCUN" + + "EIFORM NUMERIC SIGN EIGHT DISHCUNEIFORM NUMERIC SIGN NINE DISHCUNEIFORM " + + "NUMERIC SIGN FOUR UCUNEIFORM NUMERIC SIGN FIVE UCUNEIFORM NUMERIC SIGN S" + + "IX UCUNEIFORM NUMERIC SIGN SEVEN UCUNEIFORM NUMERIC SIGN EIGHT UCUNEIFOR" + + "M NUMERIC SIGN NINE UCUNEIFORM NUMERIC SIGN ONE GESH2CUNEIFORM NUMERIC S" + + "IGN TWO GESH2CUNEIFORM NUMERIC SIGN THREE GESH2CUNEIFORM NUMERIC SIGN FO" + + "UR GESH2CUNEIFORM NUMERIC SIGN FIVE GESH2CUNEIFORM NUMERIC SIGN SIX GESH" + + "2CUNEIFORM NUMERIC SIGN SEVEN GESH2CUNEIFORM NUMERIC SIGN EIGHT GESH2CUN" + + "EIFORM NUMERIC SIGN NINE GESH2CUNEIFORM NUMERIC SIGN ONE GESHUCUNEIFORM " + + "NUMERIC SIGN TWO GESHUCUNEIFORM NUMERIC SIGN THREE GESHUCUNEIFORM NUMERI" + + "C SIGN FOUR GESHUCUNEIFORM NUMERIC SIGN FIVE GESHUCUNEIFORM NUMERIC SIGN" + + " TWO SHAR2CUNEIFORM NUMERIC SIGN THREE SHAR2CUNEIFORM NUMERIC SIGN THREE" + + " SHAR2 VARIANT FORMCUNEIFORM NUMERIC SIGN FOUR SHAR2CUNEIFORM NUMERIC SI" + + "GN FIVE SHAR2CUNEIFORM NUMERIC SIGN SIX SHAR2CUNEIFORM NUMERIC SIGN SEVE" + + "N SHAR2CUNEIFORM NUMERIC SIGN EIGHT SHAR2CUNEIFORM NUMERIC SIGN NINE SHA" + + "R2CUNEIFORM NUMERIC SIGN ONE SHARUCUNEIFORM NUMERIC SIGN TWO SHARUCUNEIF" + + "ORM NUMERIC SIGN THREE SHARUCUNEIFORM NUMERIC SIGN THREE SHARU VARIANT F" + + "ORMCUNEIFORM NUMERIC SIGN FOUR SHARUCUNEIFORM NUMERIC SIGN FIVE SHARUCUN" + + "EIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS DISHCUNEIFORM NUMERIC SIGN SHAR" + + "2 TIMES GAL PLUS MINCUNEIFORM NUMERIC SIGN ONE BURUCUNEIFORM NUMERIC SIG" + + "N TWO BURUCUNEIFORM NUMERIC SIGN THREE BURUCUNEIFORM NUMERIC SIGN THREE " + + "BURU VARIANT FORMCUNEIFORM NUMERIC SIGN FOUR BURUCUNEIFORM NUMERIC SIGN ") + ("" + + "FIVE BURUCUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH16CUNEIFORM NUMERI" + + "C SIGN THREE VARIANT FORM ESH21CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM " + + "LIMMUCUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU4CUNEIFORM NUMERIC SI" + + "GN FOUR VARIANT FORM LIMMU ACUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIM" + + "MU BCUNEIFORM NUMERIC SIGN SIX VARIANT FORM ASH9CUNEIFORM NUMERIC SIGN S" + + "EVEN VARIANT FORM IMIN3CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN AC" + + "UNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN BCUNEIFORM NUMERIC SIGN EI" + + "GHT VARIANT FORM USSUCUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU3CUNE" + + "IFORM NUMERIC SIGN NINE VARIANT FORM ILIMMUCUNEIFORM NUMERIC SIGN NINE V" + + "ARIANT FORM ILIMMU3CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU4CUNEI" + + "FORM NUMERIC SIGN NINE VARIANT FORM ILIMMU ACUNEIFORM NUMERIC SIGN TWO A" + + "SH TENUCUNEIFORM NUMERIC SIGN THREE ASH TENUCUNEIFORM NUMERIC SIGN FOUR " + + "ASH TENUCUNEIFORM NUMERIC SIGN FIVE ASH TENUCUNEIFORM NUMERIC SIGN SIX A" + + "SH TENUCUNEIFORM NUMERIC SIGN ONE BAN2CUNEIFORM NUMERIC SIGN TWO BAN2CUN" + + "EIFORM NUMERIC SIGN THREE BAN2CUNEIFORM NUMERIC SIGN FOUR BAN2CUNEIFORM " + + "NUMERIC SIGN FOUR BAN2 VARIANT FORMCUNEIFORM NUMERIC SIGN FIVE BAN2CUNEI" + + "FORM NUMERIC SIGN FIVE BAN2 VARIANT FORMCUNEIFORM NUMERIC SIGN NIGIDAMIN" + + "CUNEIFORM NUMERIC SIGN NIGIDAESHCUNEIFORM NUMERIC SIGN ONE ESHE3CUNEIFOR" + + "M NUMERIC SIGN TWO ESHE3CUNEIFORM NUMERIC SIGN ONE THIRD DISHCUNEIFORM N" + + "UMERIC SIGN TWO THIRDS DISHCUNEIFORM NUMERIC SIGN FIVE SIXTHS DISHCUNEIF" + + "ORM NUMERIC SIGN ONE THIRD VARIANT FORM ACUNEIFORM NUMERIC SIGN TWO THIR" + + "DS VARIANT FORM ACUNEIFORM NUMERIC SIGN ONE EIGHTH ASHCUNEIFORM NUMERIC " + + "SIGN ONE QUARTER ASHCUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE SIXTHCUNEIFO" + + "RM NUMERIC SIGN OLD ASSYRIAN ONE QUARTERCUNEIFORM NUMERIC SIGN ONE QUART" + + "ER GURCUNEIFORM NUMERIC SIGN ONE HALF GURCUNEIFORM NUMERIC SIGN ELAMITE " + + "ONE THIRDCUNEIFORM NUMERIC SIGN ELAMITE TWO THIRDSCUNEIFORM NUMERIC SIGN" + + " ELAMITE FORTYCUNEIFORM NUMERIC SIGN ELAMITE FIFTYCUNEIFORM NUMERIC SIGN" + + " FOUR U VARIANT FORMCUNEIFORM NUMERIC SIGN FIVE U VARIANT FORMCUNEIFORM " + + "NUMERIC SIGN SIX U VARIANT FORMCUNEIFORM NUMERIC SIGN SEVEN U VARIANT FO" + + "RMCUNEIFORM NUMERIC SIGN EIGHT U VARIANT FORMCUNEIFORM NUMERIC SIGN NINE" + + " U VARIANT FORMCUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDERCUNEI" + + "FORM PUNCTUATION SIGN VERTICAL COLONCUNEIFORM PUNCTUATION SIGN DIAGONAL " + + "COLONCUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLONCUNEIFORM PUNCTUATION S" + + "IGN DIAGONAL QUADCOLONCUNEIFORM SIGN AB TIMES NUN TENUCUNEIFORM SIGN AB " + + "TIMES SHU2CUNEIFORM SIGN AD TIMES ESH2CUNEIFORM SIGN BAD TIMES DISH TENU" + + "CUNEIFORM SIGN BAHAR2 TIMES AB2CUNEIFORM SIGN BAHAR2 TIMES NICUNEIFORM S" + + "IGN BAHAR2 TIMES ZACUNEIFORM SIGN BU OVER BU TIMES NA2CUNEIFORM SIGN DA " + + "TIMES TAK4CUNEIFORM SIGN DAG TIMES KURCUNEIFORM SIGN DIM TIMES IGICUNEIF" + + "ORM SIGN DIM TIMES U U UCUNEIFORM SIGN DIM2 TIMES UDCUNEIFORM SIGN DUG T" + + "IMES ANSHECUNEIFORM SIGN DUG TIMES ASHCUNEIFORM SIGN DUG TIMES ASH AT LE" + + "FTCUNEIFORM SIGN DUG TIMES DINCUNEIFORM SIGN DUG TIMES DUNCUNEIFORM SIGN" + + " DUG TIMES ERIN2CUNEIFORM SIGN DUG TIMES GACUNEIFORM SIGN DUG TIMES GICU" + + "NEIFORM SIGN DUG TIMES GIR2 GUNUCUNEIFORM SIGN DUG TIMES GISHCUNEIFORM S" + + "IGN DUG TIMES HACUNEIFORM SIGN DUG TIMES HICUNEIFORM SIGN DUG TIMES IGI " + + "GUNUCUNEIFORM SIGN DUG TIMES KASKALCUNEIFORM SIGN DUG TIMES KURCUNEIFORM" + + " SIGN DUG TIMES KUSHU2CUNEIFORM SIGN DUG TIMES KUSHU2 PLUS KASKALCUNEIFO" + + "RM SIGN DUG TIMES LAK-020CUNEIFORM SIGN DUG TIMES LAMCUNEIFORM SIGN DUG " + + "TIMES LAM TIMES KURCUNEIFORM SIGN DUG TIMES LUH PLUS GISHCUNEIFORM SIGN " + + "DUG TIMES MASHCUNEIFORM SIGN DUG TIMES MESCUNEIFORM SIGN DUG TIMES MICUN" + + "EIFORM SIGN DUG TIMES NICUNEIFORM SIGN DUG TIMES PICUNEIFORM SIGN DUG TI" + + "MES SHECUNEIFORM SIGN DUG TIMES SI GUNUCUNEIFORM SIGN E2 TIMES KURCUNEIF" + + "ORM SIGN E2 TIMES PAPCUNEIFORM SIGN ERIN2 XCUNEIFORM SIGN ESH2 CROSSING " + + "ESH2CUNEIFORM SIGN EZEN SHESHIG TIMES ASHCUNEIFORM SIGN EZEN SHESHIG TIM" + + "ES HICUNEIFORM SIGN EZEN SHESHIG TIMES IGI GUNUCUNEIFORM SIGN EZEN SHESH" + + "IG TIMES LACUNEIFORM SIGN EZEN SHESHIG TIMES LALCUNEIFORM SIGN EZEN SHES" + + "HIG TIMES MECUNEIFORM SIGN EZEN SHESHIG TIMES MESCUNEIFORM SIGN EZEN SHE" + + "SHIG TIMES SUCUNEIFORM SIGN EZEN TIMES SUCUNEIFORM SIGN GA2 TIMES BAHAR2" + + "CUNEIFORM SIGN GA2 TIMES DIM GUNUCUNEIFORM SIGN GA2 TIMES DUG TIMES IGI " + + "GUNUCUNEIFORM SIGN GA2 TIMES DUG TIMES KASKALCUNEIFORM SIGN GA2 TIMES ER" + + "ENCUNEIFORM SIGN GA2 TIMES GACUNEIFORM SIGN GA2 TIMES GAR PLUS DICUNEIFO" + + "RM SIGN GA2 TIMES GAR PLUS NECUNEIFORM SIGN GA2 TIMES HA PLUS ACUNEIFORM" + + " SIGN GA2 TIMES KUSHU2 PLUS KASKALCUNEIFORM SIGN GA2 TIMES LAMCUNEIFORM " + + "SIGN GA2 TIMES LAM TIMES KURCUNEIFORM SIGN GA2 TIMES LUHCUNEIFORM SIGN G" + + "A2 TIMES MUSHCUNEIFORM SIGN GA2 TIMES NECUNEIFORM SIGN GA2 TIMES NE PLUS") + ("" + + " E2CUNEIFORM SIGN GA2 TIMES NE PLUS GICUNEIFORM SIGN GA2 TIMES SHIMCUNEI" + + "FORM SIGN GA2 TIMES ZIZ2CUNEIFORM SIGN GABA ROTATED NINETY DEGREESCUNEIF" + + "ORM SIGN GESHTIN TIMES UCUNEIFORM SIGN GISH TIMES GISH CROSSING GISHCUNE" + + "IFORM SIGN GU2 TIMES IGI GUNUCUNEIFORM SIGN GUD PLUS GISH TIMES TAK4CUNE" + + "IFORM SIGN HA TENU GUNUCUNEIFORM SIGN HI TIMES ASH OVER HI TIMES ASHCUNE" + + "IFORM SIGN KA TIMES BUCUNEIFORM SIGN KA TIMES KACUNEIFORM SIGN KA TIMES " + + "U U UCUNEIFORM SIGN KA TIMES URCUNEIFORM SIGN LAGAB TIMES ZU OVER ZUCUNE" + + "IFORM SIGN LAK-003CUNEIFORM SIGN LAK-021CUNEIFORM SIGN LAK-025CUNEIFORM " + + "SIGN LAK-030CUNEIFORM SIGN LAK-050CUNEIFORM SIGN LAK-051CUNEIFORM SIGN L" + + "AK-062CUNEIFORM SIGN LAK-079 OVER LAK-079 GUNUCUNEIFORM SIGN LAK-080CUNE" + + "IFORM SIGN LAK-081 OVER LAK-081CUNEIFORM SIGN LAK-092CUNEIFORM SIGN LAK-" + + "130CUNEIFORM SIGN LAK-142CUNEIFORM SIGN LAK-210CUNEIFORM SIGN LAK-219CUN" + + "EIFORM SIGN LAK-220CUNEIFORM SIGN LAK-225CUNEIFORM SIGN LAK-228CUNEIFORM" + + " SIGN LAK-238CUNEIFORM SIGN LAK-265CUNEIFORM SIGN LAK-266CUNEIFORM SIGN " + + "LAK-343CUNEIFORM SIGN LAK-347CUNEIFORM SIGN LAK-348CUNEIFORM SIGN LAK-38" + + "3CUNEIFORM SIGN LAK-384CUNEIFORM SIGN LAK-390CUNEIFORM SIGN LAK-441CUNEI" + + "FORM SIGN LAK-449CUNEIFORM SIGN LAK-449 TIMES GUCUNEIFORM SIGN LAK-449 T" + + "IMES IGICUNEIFORM SIGN LAK-449 TIMES PAP PLUS LU3CUNEIFORM SIGN LAK-449 " + + "TIMES PAP PLUS PAP PLUS LU3CUNEIFORM SIGN LAK-449 TIMES U2 PLUS BACUNEIF" + + "ORM SIGN LAK-450CUNEIFORM SIGN LAK-457CUNEIFORM SIGN LAK-470CUNEIFORM SI" + + "GN LAK-483CUNEIFORM SIGN LAK-490CUNEIFORM SIGN LAK-492CUNEIFORM SIGN LAK" + + "-493CUNEIFORM SIGN LAK-495CUNEIFORM SIGN LAK-550CUNEIFORM SIGN LAK-608CU" + + "NEIFORM SIGN LAK-617CUNEIFORM SIGN LAK-617 TIMES ASHCUNEIFORM SIGN LAK-6" + + "17 TIMES BADCUNEIFORM SIGN LAK-617 TIMES DUN3 GUNU GUNUCUNEIFORM SIGN LA" + + "K-617 TIMES KU3CUNEIFORM SIGN LAK-617 TIMES LACUNEIFORM SIGN LAK-617 TIM" + + "ES TARCUNEIFORM SIGN LAK-617 TIMES TECUNEIFORM SIGN LAK-617 TIMES U2CUNE" + + "IFORM SIGN LAK-617 TIMES UDCUNEIFORM SIGN LAK-617 TIMES URUDACUNEIFORM S" + + "IGN LAK-636CUNEIFORM SIGN LAK-648CUNEIFORM SIGN LAK-648 TIMES DUBCUNEIFO" + + "RM SIGN LAK-648 TIMES GACUNEIFORM SIGN LAK-648 TIMES IGICUNEIFORM SIGN L" + + "AK-648 TIMES IGI GUNUCUNEIFORM SIGN LAK-648 TIMES NICUNEIFORM SIGN LAK-6" + + "48 TIMES PAP PLUS PAP PLUS LU3CUNEIFORM SIGN LAK-648 TIMES SHESH PLUS KI" + + "CUNEIFORM SIGN LAK-648 TIMES UDCUNEIFORM SIGN LAK-648 TIMES URUDACUNEIFO" + + "RM SIGN LAK-724CUNEIFORM SIGN LAK-749CUNEIFORM SIGN LU2 GUNU TIMES ASHCU" + + "NEIFORM SIGN LU2 TIMES DISHCUNEIFORM SIGN LU2 TIMES HALCUNEIFORM SIGN LU" + + "2 TIMES PAPCUNEIFORM SIGN LU2 TIMES PAP PLUS PAP PLUS LU3CUNEIFORM SIGN " + + "LU2 TIMES TAK4CUNEIFORM SIGN MI PLUS ZA7CUNEIFORM SIGN MUSH OVER MUSH TI" + + "MES GACUNEIFORM SIGN MUSH OVER MUSH TIMES KAKCUNEIFORM SIGN NINDA2 TIMES" + + " DIM GUNUCUNEIFORM SIGN NINDA2 TIMES GISHCUNEIFORM SIGN NINDA2 TIMES GUL" + + "CUNEIFORM SIGN NINDA2 TIMES HICUNEIFORM SIGN NINDA2 TIMES KESH2CUNEIFORM" + + " SIGN NINDA2 TIMES LAK-050CUNEIFORM SIGN NINDA2 TIMES MASHCUNEIFORM SIGN" + + " NINDA2 TIMES PAP PLUS PAPCUNEIFORM SIGN NINDA2 TIMES UCUNEIFORM SIGN NI" + + "NDA2 TIMES U PLUS UCUNEIFORM SIGN NINDA2 TIMES URUDACUNEIFORM SIGN SAG G" + + "UNU TIMES HACUNEIFORM SIGN SAG TIMES ENCUNEIFORM SIGN SAG TIMES SHE AT L" + + "EFTCUNEIFORM SIGN SAG TIMES TAK4CUNEIFORM SIGN SHA6 TENUCUNEIFORM SIGN S" + + "HE OVER SHECUNEIFORM SIGN SHE PLUS HUB2CUNEIFORM SIGN SHE PLUS NAM2CUNEI" + + "FORM SIGN SHE PLUS SARCUNEIFORM SIGN SHU2 PLUS DUG TIMES NICUNEIFORM SIG" + + "N SHU2 PLUS E2 TIMES ANCUNEIFORM SIGN SI TIMES TAK4CUNEIFORM SIGN TAK4 P" + + "LUS SAGCUNEIFORM SIGN TUM TIMES GAN2 TENUCUNEIFORM SIGN TUM TIMES THREE " + + "DISHCUNEIFORM SIGN UR2 INVERTEDCUNEIFORM SIGN UR2 TIMES UDCUNEIFORM SIGN" + + " URU TIMES DARA3CUNEIFORM SIGN URU TIMES LAK-668CUNEIFORM SIGN URU TIMES" + + " LU3CUNEIFORM SIGN ZA7CUNEIFORM SIGN ZU OVER ZU PLUS SARCUNEIFORM SIGN Z" + + "U5 TIMES THREE DISH TENUEGYPTIAN HIEROGLYPH A001EGYPTIAN HIEROGLYPH A002" + + "EGYPTIAN HIEROGLYPH A003EGYPTIAN HIEROGLYPH A004EGYPTIAN HIEROGLYPH A005" + + "EGYPTIAN HIEROGLYPH A005AEGYPTIAN HIEROGLYPH A006EGYPTIAN HIEROGLYPH A00" + + "6AEGYPTIAN HIEROGLYPH A006BEGYPTIAN HIEROGLYPH A007EGYPTIAN HIEROGLYPH A" + + "008EGYPTIAN HIEROGLYPH A009EGYPTIAN HIEROGLYPH A010EGYPTIAN HIEROGLYPH A" + + "011EGYPTIAN HIEROGLYPH A012EGYPTIAN HIEROGLYPH A013EGYPTIAN HIEROGLYPH A" + + "014EGYPTIAN HIEROGLYPH A014AEGYPTIAN HIEROGLYPH A015EGYPTIAN HIEROGLYPH " + + "A016EGYPTIAN HIEROGLYPH A017EGYPTIAN HIEROGLYPH A017AEGYPTIAN HIEROGLYPH" + + " A018EGYPTIAN HIEROGLYPH A019EGYPTIAN HIEROGLYPH A020EGYPTIAN HIEROGLYPH" + + " A021EGYPTIAN HIEROGLYPH A022EGYPTIAN HIEROGLYPH A023EGYPTIAN HIEROGLYPH" + + " A024EGYPTIAN HIEROGLYPH A025EGYPTIAN HIEROGLYPH A026EGYPTIAN HIEROGLYPH" + + " A027EGYPTIAN HIEROGLYPH A028EGYPTIAN HIEROGLYPH A029EGYPTIAN HIEROGLYPH" + + " A030EGYPTIAN HIEROGLYPH A031EGYPTIAN HIEROGLYPH A032EGYPTIAN HIEROGLYPH") + ("" + + " A032AEGYPTIAN HIEROGLYPH A033EGYPTIAN HIEROGLYPH A034EGYPTIAN HIEROGLYP" + + "H A035EGYPTIAN HIEROGLYPH A036EGYPTIAN HIEROGLYPH A037EGYPTIAN HIEROGLYP" + + "H A038EGYPTIAN HIEROGLYPH A039EGYPTIAN HIEROGLYPH A040EGYPTIAN HIEROGLYP" + + "H A040AEGYPTIAN HIEROGLYPH A041EGYPTIAN HIEROGLYPH A042EGYPTIAN HIEROGLY" + + "PH A042AEGYPTIAN HIEROGLYPH A043EGYPTIAN HIEROGLYPH A043AEGYPTIAN HIEROG" + + "LYPH A044EGYPTIAN HIEROGLYPH A045EGYPTIAN HIEROGLYPH A045AEGYPTIAN HIERO" + + "GLYPH A046EGYPTIAN HIEROGLYPH A047EGYPTIAN HIEROGLYPH A048EGYPTIAN HIERO" + + "GLYPH A049EGYPTIAN HIEROGLYPH A050EGYPTIAN HIEROGLYPH A051EGYPTIAN HIERO" + + "GLYPH A052EGYPTIAN HIEROGLYPH A053EGYPTIAN HIEROGLYPH A054EGYPTIAN HIERO" + + "GLYPH A055EGYPTIAN HIEROGLYPH A056EGYPTIAN HIEROGLYPH A057EGYPTIAN HIERO" + + "GLYPH A058EGYPTIAN HIEROGLYPH A059EGYPTIAN HIEROGLYPH A060EGYPTIAN HIERO" + + "GLYPH A061EGYPTIAN HIEROGLYPH A062EGYPTIAN HIEROGLYPH A063EGYPTIAN HIERO" + + "GLYPH A064EGYPTIAN HIEROGLYPH A065EGYPTIAN HIEROGLYPH A066EGYPTIAN HIERO" + + "GLYPH A067EGYPTIAN HIEROGLYPH A068EGYPTIAN HIEROGLYPH A069EGYPTIAN HIERO" + + "GLYPH A070EGYPTIAN HIEROGLYPH B001EGYPTIAN HIEROGLYPH B002EGYPTIAN HIERO" + + "GLYPH B003EGYPTIAN HIEROGLYPH B004EGYPTIAN HIEROGLYPH B005EGYPTIAN HIERO" + + "GLYPH B005AEGYPTIAN HIEROGLYPH B006EGYPTIAN HIEROGLYPH B007EGYPTIAN HIER" + + "OGLYPH B008EGYPTIAN HIEROGLYPH B009EGYPTIAN HIEROGLYPH C001EGYPTIAN HIER" + + "OGLYPH C002EGYPTIAN HIEROGLYPH C002AEGYPTIAN HIEROGLYPH C002BEGYPTIAN HI" + + "EROGLYPH C002CEGYPTIAN HIEROGLYPH C003EGYPTIAN HIEROGLYPH C004EGYPTIAN H" + + "IEROGLYPH C005EGYPTIAN HIEROGLYPH C006EGYPTIAN HIEROGLYPH C007EGYPTIAN H" + + "IEROGLYPH C008EGYPTIAN HIEROGLYPH C009EGYPTIAN HIEROGLYPH C010EGYPTIAN H" + + "IEROGLYPH C010AEGYPTIAN HIEROGLYPH C011EGYPTIAN HIEROGLYPH C012EGYPTIAN " + + "HIEROGLYPH C013EGYPTIAN HIEROGLYPH C014EGYPTIAN HIEROGLYPH C015EGYPTIAN " + + "HIEROGLYPH C016EGYPTIAN HIEROGLYPH C017EGYPTIAN HIEROGLYPH C018EGYPTIAN " + + "HIEROGLYPH C019EGYPTIAN HIEROGLYPH C020EGYPTIAN HIEROGLYPH C021EGYPTIAN " + + "HIEROGLYPH C022EGYPTIAN HIEROGLYPH C023EGYPTIAN HIEROGLYPH C024EGYPTIAN " + + "HIEROGLYPH D001EGYPTIAN HIEROGLYPH D002EGYPTIAN HIEROGLYPH D003EGYPTIAN " + + "HIEROGLYPH D004EGYPTIAN HIEROGLYPH D005EGYPTIAN HIEROGLYPH D006EGYPTIAN " + + "HIEROGLYPH D007EGYPTIAN HIEROGLYPH D008EGYPTIAN HIEROGLYPH D008AEGYPTIAN" + + " HIEROGLYPH D009EGYPTIAN HIEROGLYPH D010EGYPTIAN HIEROGLYPH D011EGYPTIAN" + + " HIEROGLYPH D012EGYPTIAN HIEROGLYPH D013EGYPTIAN HIEROGLYPH D014EGYPTIAN" + + " HIEROGLYPH D015EGYPTIAN HIEROGLYPH D016EGYPTIAN HIEROGLYPH D017EGYPTIAN" + + " HIEROGLYPH D018EGYPTIAN HIEROGLYPH D019EGYPTIAN HIEROGLYPH D020EGYPTIAN" + + " HIEROGLYPH D021EGYPTIAN HIEROGLYPH D022EGYPTIAN HIEROGLYPH D023EGYPTIAN" + + " HIEROGLYPH D024EGYPTIAN HIEROGLYPH D025EGYPTIAN HIEROGLYPH D026EGYPTIAN" + + " HIEROGLYPH D027EGYPTIAN HIEROGLYPH D027AEGYPTIAN HIEROGLYPH D028EGYPTIA" + + "N HIEROGLYPH D029EGYPTIAN HIEROGLYPH D030EGYPTIAN HIEROGLYPH D031EGYPTIA" + + "N HIEROGLYPH D031AEGYPTIAN HIEROGLYPH D032EGYPTIAN HIEROGLYPH D033EGYPTI" + + "AN HIEROGLYPH D034EGYPTIAN HIEROGLYPH D034AEGYPTIAN HIEROGLYPH D035EGYPT" + + "IAN HIEROGLYPH D036EGYPTIAN HIEROGLYPH D037EGYPTIAN HIEROGLYPH D038EGYPT" + + "IAN HIEROGLYPH D039EGYPTIAN HIEROGLYPH D040EGYPTIAN HIEROGLYPH D041EGYPT" + + "IAN HIEROGLYPH D042EGYPTIAN HIEROGLYPH D043EGYPTIAN HIEROGLYPH D044EGYPT" + + "IAN HIEROGLYPH D045EGYPTIAN HIEROGLYPH D046EGYPTIAN HIEROGLYPH D046AEGYP" + + "TIAN HIEROGLYPH D047EGYPTIAN HIEROGLYPH D048EGYPTIAN HIEROGLYPH D048AEGY" + + "PTIAN HIEROGLYPH D049EGYPTIAN HIEROGLYPH D050EGYPTIAN HIEROGLYPH D050AEG" + + "YPTIAN HIEROGLYPH D050BEGYPTIAN HIEROGLYPH D050CEGYPTIAN HIEROGLYPH D050" + + "DEGYPTIAN HIEROGLYPH D050EEGYPTIAN HIEROGLYPH D050FEGYPTIAN HIEROGLYPH D" + + "050GEGYPTIAN HIEROGLYPH D050HEGYPTIAN HIEROGLYPH D050IEGYPTIAN HIEROGLYP" + + "H D051EGYPTIAN HIEROGLYPH D052EGYPTIAN HIEROGLYPH D052AEGYPTIAN HIEROGLY" + + "PH D053EGYPTIAN HIEROGLYPH D054EGYPTIAN HIEROGLYPH D054AEGYPTIAN HIEROGL" + + "YPH D055EGYPTIAN HIEROGLYPH D056EGYPTIAN HIEROGLYPH D057EGYPTIAN HIEROGL" + + "YPH D058EGYPTIAN HIEROGLYPH D059EGYPTIAN HIEROGLYPH D060EGYPTIAN HIEROGL" + + "YPH D061EGYPTIAN HIEROGLYPH D062EGYPTIAN HIEROGLYPH D063EGYPTIAN HIEROGL" + + "YPH D064EGYPTIAN HIEROGLYPH D065EGYPTIAN HIEROGLYPH D066EGYPTIAN HIEROGL" + + "YPH D067EGYPTIAN HIEROGLYPH D067AEGYPTIAN HIEROGLYPH D067BEGYPTIAN HIERO" + + "GLYPH D067CEGYPTIAN HIEROGLYPH D067DEGYPTIAN HIEROGLYPH D067EEGYPTIAN HI" + + "EROGLYPH D067FEGYPTIAN HIEROGLYPH D067GEGYPTIAN HIEROGLYPH D067HEGYPTIAN" + + " HIEROGLYPH E001EGYPTIAN HIEROGLYPH E002EGYPTIAN HIEROGLYPH E003EGYPTIAN" + + " HIEROGLYPH E004EGYPTIAN HIEROGLYPH E005EGYPTIAN HIEROGLYPH E006EGYPTIAN" + + " HIEROGLYPH E007EGYPTIAN HIEROGLYPH E008EGYPTIAN HIEROGLYPH E008AEGYPTIA" + + "N HIEROGLYPH E009EGYPTIAN HIEROGLYPH E009AEGYPTIAN HIEROGLYPH E010EGYPTI" + + "AN HIEROGLYPH E011EGYPTIAN HIEROGLYPH E012EGYPTIAN HIEROGLYPH E013EGYPTI" + + "AN HIEROGLYPH E014EGYPTIAN HIEROGLYPH E015EGYPTIAN HIEROGLYPH E016EGYPTI") + ("" + + "AN HIEROGLYPH E016AEGYPTIAN HIEROGLYPH E017EGYPTIAN HIEROGLYPH E017AEGYP" + + "TIAN HIEROGLYPH E018EGYPTIAN HIEROGLYPH E019EGYPTIAN HIEROGLYPH E020EGYP" + + "TIAN HIEROGLYPH E020AEGYPTIAN HIEROGLYPH E021EGYPTIAN HIEROGLYPH E022EGY" + + "PTIAN HIEROGLYPH E023EGYPTIAN HIEROGLYPH E024EGYPTIAN HIEROGLYPH E025EGY" + + "PTIAN HIEROGLYPH E026EGYPTIAN HIEROGLYPH E027EGYPTIAN HIEROGLYPH E028EGY" + + "PTIAN HIEROGLYPH E028AEGYPTIAN HIEROGLYPH E029EGYPTIAN HIEROGLYPH E030EG" + + "YPTIAN HIEROGLYPH E031EGYPTIAN HIEROGLYPH E032EGYPTIAN HIEROGLYPH E033EG" + + "YPTIAN HIEROGLYPH E034EGYPTIAN HIEROGLYPH E034AEGYPTIAN HIEROGLYPH E036E" + + "GYPTIAN HIEROGLYPH E037EGYPTIAN HIEROGLYPH E038EGYPTIAN HIEROGLYPH F001E" + + "GYPTIAN HIEROGLYPH F001AEGYPTIAN HIEROGLYPH F002EGYPTIAN HIEROGLYPH F003" + + "EGYPTIAN HIEROGLYPH F004EGYPTIAN HIEROGLYPH F005EGYPTIAN HIEROGLYPH F006" + + "EGYPTIAN HIEROGLYPH F007EGYPTIAN HIEROGLYPH F008EGYPTIAN HIEROGLYPH F009" + + "EGYPTIAN HIEROGLYPH F010EGYPTIAN HIEROGLYPH F011EGYPTIAN HIEROGLYPH F012" + + "EGYPTIAN HIEROGLYPH F013EGYPTIAN HIEROGLYPH F013AEGYPTIAN HIEROGLYPH F01" + + "4EGYPTIAN HIEROGLYPH F015EGYPTIAN HIEROGLYPH F016EGYPTIAN HIEROGLYPH F01" + + "7EGYPTIAN HIEROGLYPH F018EGYPTIAN HIEROGLYPH F019EGYPTIAN HIEROGLYPH F02" + + "0EGYPTIAN HIEROGLYPH F021EGYPTIAN HIEROGLYPH F021AEGYPTIAN HIEROGLYPH F0" + + "22EGYPTIAN HIEROGLYPH F023EGYPTIAN HIEROGLYPH F024EGYPTIAN HIEROGLYPH F0" + + "25EGYPTIAN HIEROGLYPH F026EGYPTIAN HIEROGLYPH F027EGYPTIAN HIEROGLYPH F0" + + "28EGYPTIAN HIEROGLYPH F029EGYPTIAN HIEROGLYPH F030EGYPTIAN HIEROGLYPH F0" + + "31EGYPTIAN HIEROGLYPH F031AEGYPTIAN HIEROGLYPH F032EGYPTIAN HIEROGLYPH F" + + "033EGYPTIAN HIEROGLYPH F034EGYPTIAN HIEROGLYPH F035EGYPTIAN HIEROGLYPH F" + + "036EGYPTIAN HIEROGLYPH F037EGYPTIAN HIEROGLYPH F037AEGYPTIAN HIEROGLYPH " + + "F038EGYPTIAN HIEROGLYPH F038AEGYPTIAN HIEROGLYPH F039EGYPTIAN HIEROGLYPH" + + " F040EGYPTIAN HIEROGLYPH F041EGYPTIAN HIEROGLYPH F042EGYPTIAN HIEROGLYPH" + + " F043EGYPTIAN HIEROGLYPH F044EGYPTIAN HIEROGLYPH F045EGYPTIAN HIEROGLYPH" + + " F045AEGYPTIAN HIEROGLYPH F046EGYPTIAN HIEROGLYPH F046AEGYPTIAN HIEROGLY" + + "PH F047EGYPTIAN HIEROGLYPH F047AEGYPTIAN HIEROGLYPH F048EGYPTIAN HIEROGL" + + "YPH F049EGYPTIAN HIEROGLYPH F050EGYPTIAN HIEROGLYPH F051EGYPTIAN HIEROGL" + + "YPH F051AEGYPTIAN HIEROGLYPH F051BEGYPTIAN HIEROGLYPH F051CEGYPTIAN HIER" + + "OGLYPH F052EGYPTIAN HIEROGLYPH F053EGYPTIAN HIEROGLYPH G001EGYPTIAN HIER" + + "OGLYPH G002EGYPTIAN HIEROGLYPH G003EGYPTIAN HIEROGLYPH G004EGYPTIAN HIER" + + "OGLYPH G005EGYPTIAN HIEROGLYPH G006EGYPTIAN HIEROGLYPH G006AEGYPTIAN HIE" + + "ROGLYPH G007EGYPTIAN HIEROGLYPH G007AEGYPTIAN HIEROGLYPH G007BEGYPTIAN H" + + "IEROGLYPH G008EGYPTIAN HIEROGLYPH G009EGYPTIAN HIEROGLYPH G010EGYPTIAN H" + + "IEROGLYPH G011EGYPTIAN HIEROGLYPH G011AEGYPTIAN HIEROGLYPH G012EGYPTIAN " + + "HIEROGLYPH G013EGYPTIAN HIEROGLYPH G014EGYPTIAN HIEROGLYPH G015EGYPTIAN " + + "HIEROGLYPH G016EGYPTIAN HIEROGLYPH G017EGYPTIAN HIEROGLYPH G018EGYPTIAN " + + "HIEROGLYPH G019EGYPTIAN HIEROGLYPH G020EGYPTIAN HIEROGLYPH G020AEGYPTIAN" + + " HIEROGLYPH G021EGYPTIAN HIEROGLYPH G022EGYPTIAN HIEROGLYPH G023EGYPTIAN" + + " HIEROGLYPH G024EGYPTIAN HIEROGLYPH G025EGYPTIAN HIEROGLYPH G026EGYPTIAN" + + " HIEROGLYPH G026AEGYPTIAN HIEROGLYPH G027EGYPTIAN HIEROGLYPH G028EGYPTIA" + + "N HIEROGLYPH G029EGYPTIAN HIEROGLYPH G030EGYPTIAN HIEROGLYPH G031EGYPTIA" + + "N HIEROGLYPH G032EGYPTIAN HIEROGLYPH G033EGYPTIAN HIEROGLYPH G034EGYPTIA" + + "N HIEROGLYPH G035EGYPTIAN HIEROGLYPH G036EGYPTIAN HIEROGLYPH G036AEGYPTI" + + "AN HIEROGLYPH G037EGYPTIAN HIEROGLYPH G037AEGYPTIAN HIEROGLYPH G038EGYPT" + + "IAN HIEROGLYPH G039EGYPTIAN HIEROGLYPH G040EGYPTIAN HIEROGLYPH G041EGYPT" + + "IAN HIEROGLYPH G042EGYPTIAN HIEROGLYPH G043EGYPTIAN HIEROGLYPH G043AEGYP" + + "TIAN HIEROGLYPH G044EGYPTIAN HIEROGLYPH G045EGYPTIAN HIEROGLYPH G045AEGY" + + "PTIAN HIEROGLYPH G046EGYPTIAN HIEROGLYPH G047EGYPTIAN HIEROGLYPH G048EGY" + + "PTIAN HIEROGLYPH G049EGYPTIAN HIEROGLYPH G050EGYPTIAN HIEROGLYPH G051EGY" + + "PTIAN HIEROGLYPH G052EGYPTIAN HIEROGLYPH G053EGYPTIAN HIEROGLYPH G054EGY" + + "PTIAN HIEROGLYPH H001EGYPTIAN HIEROGLYPH H002EGYPTIAN HIEROGLYPH H003EGY" + + "PTIAN HIEROGLYPH H004EGYPTIAN HIEROGLYPH H005EGYPTIAN HIEROGLYPH H006EGY" + + "PTIAN HIEROGLYPH H006AEGYPTIAN HIEROGLYPH H007EGYPTIAN HIEROGLYPH H008EG" + + "YPTIAN HIEROGLYPH I001EGYPTIAN HIEROGLYPH I002EGYPTIAN HIEROGLYPH I003EG" + + "YPTIAN HIEROGLYPH I004EGYPTIAN HIEROGLYPH I005EGYPTIAN HIEROGLYPH I005AE" + + "GYPTIAN HIEROGLYPH I006EGYPTIAN HIEROGLYPH I007EGYPTIAN HIEROGLYPH I008E" + + "GYPTIAN HIEROGLYPH I009EGYPTIAN HIEROGLYPH I009AEGYPTIAN HIEROGLYPH I010" + + "EGYPTIAN HIEROGLYPH I010AEGYPTIAN HIEROGLYPH I011EGYPTIAN HIEROGLYPH I01" + + "1AEGYPTIAN HIEROGLYPH I012EGYPTIAN HIEROGLYPH I013EGYPTIAN HIEROGLYPH I0" + + "14EGYPTIAN HIEROGLYPH I015EGYPTIAN HIEROGLYPH K001EGYPTIAN HIEROGLYPH K0" + + "02EGYPTIAN HIEROGLYPH K003EGYPTIAN HIEROGLYPH K004EGYPTIAN HIEROGLYPH K0" + + "05EGYPTIAN HIEROGLYPH K006EGYPTIAN HIEROGLYPH K007EGYPTIAN HIEROGLYPH K0") + ("" + + "08EGYPTIAN HIEROGLYPH L001EGYPTIAN HIEROGLYPH L002EGYPTIAN HIEROGLYPH L0" + + "02AEGYPTIAN HIEROGLYPH L003EGYPTIAN HIEROGLYPH L004EGYPTIAN HIEROGLYPH L" + + "005EGYPTIAN HIEROGLYPH L006EGYPTIAN HIEROGLYPH L006AEGYPTIAN HIEROGLYPH " + + "L007EGYPTIAN HIEROGLYPH L008EGYPTIAN HIEROGLYPH M001EGYPTIAN HIEROGLYPH " + + "M001AEGYPTIAN HIEROGLYPH M001BEGYPTIAN HIEROGLYPH M002EGYPTIAN HIEROGLYP" + + "H M003EGYPTIAN HIEROGLYPH M003AEGYPTIAN HIEROGLYPH M004EGYPTIAN HIEROGLY" + + "PH M005EGYPTIAN HIEROGLYPH M006EGYPTIAN HIEROGLYPH M007EGYPTIAN HIEROGLY" + + "PH M008EGYPTIAN HIEROGLYPH M009EGYPTIAN HIEROGLYPH M010EGYPTIAN HIEROGLY" + + "PH M010AEGYPTIAN HIEROGLYPH M011EGYPTIAN HIEROGLYPH M012EGYPTIAN HIEROGL" + + "YPH M012AEGYPTIAN HIEROGLYPH M012BEGYPTIAN HIEROGLYPH M012CEGYPTIAN HIER" + + "OGLYPH M012DEGYPTIAN HIEROGLYPH M012EEGYPTIAN HIEROGLYPH M012FEGYPTIAN H" + + "IEROGLYPH M012GEGYPTIAN HIEROGLYPH M012HEGYPTIAN HIEROGLYPH M013EGYPTIAN" + + " HIEROGLYPH M014EGYPTIAN HIEROGLYPH M015EGYPTIAN HIEROGLYPH M015AEGYPTIA" + + "N HIEROGLYPH M016EGYPTIAN HIEROGLYPH M016AEGYPTIAN HIEROGLYPH M017EGYPTI" + + "AN HIEROGLYPH M017AEGYPTIAN HIEROGLYPH M018EGYPTIAN HIEROGLYPH M019EGYPT" + + "IAN HIEROGLYPH M020EGYPTIAN HIEROGLYPH M021EGYPTIAN HIEROGLYPH M022EGYPT" + + "IAN HIEROGLYPH M022AEGYPTIAN HIEROGLYPH M023EGYPTIAN HIEROGLYPH M024EGYP" + + "TIAN HIEROGLYPH M024AEGYPTIAN HIEROGLYPH M025EGYPTIAN HIEROGLYPH M026EGY" + + "PTIAN HIEROGLYPH M027EGYPTIAN HIEROGLYPH M028EGYPTIAN HIEROGLYPH M028AEG" + + "YPTIAN HIEROGLYPH M029EGYPTIAN HIEROGLYPH M030EGYPTIAN HIEROGLYPH M031EG" + + "YPTIAN HIEROGLYPH M031AEGYPTIAN HIEROGLYPH M032EGYPTIAN HIEROGLYPH M033E" + + "GYPTIAN HIEROGLYPH M033AEGYPTIAN HIEROGLYPH M033BEGYPTIAN HIEROGLYPH M03" + + "4EGYPTIAN HIEROGLYPH M035EGYPTIAN HIEROGLYPH M036EGYPTIAN HIEROGLYPH M03" + + "7EGYPTIAN HIEROGLYPH M038EGYPTIAN HIEROGLYPH M039EGYPTIAN HIEROGLYPH M04" + + "0EGYPTIAN HIEROGLYPH M040AEGYPTIAN HIEROGLYPH M041EGYPTIAN HIEROGLYPH M0" + + "42EGYPTIAN HIEROGLYPH M043EGYPTIAN HIEROGLYPH M044EGYPTIAN HIEROGLYPH N0" + + "01EGYPTIAN HIEROGLYPH N002EGYPTIAN HIEROGLYPH N003EGYPTIAN HIEROGLYPH N0" + + "04EGYPTIAN HIEROGLYPH N005EGYPTIAN HIEROGLYPH N006EGYPTIAN HIEROGLYPH N0" + + "07EGYPTIAN HIEROGLYPH N008EGYPTIAN HIEROGLYPH N009EGYPTIAN HIEROGLYPH N0" + + "10EGYPTIAN HIEROGLYPH N011EGYPTIAN HIEROGLYPH N012EGYPTIAN HIEROGLYPH N0" + + "13EGYPTIAN HIEROGLYPH N014EGYPTIAN HIEROGLYPH N015EGYPTIAN HIEROGLYPH N0" + + "16EGYPTIAN HIEROGLYPH N017EGYPTIAN HIEROGLYPH N018EGYPTIAN HIEROGLYPH N0" + + "18AEGYPTIAN HIEROGLYPH N018BEGYPTIAN HIEROGLYPH N019EGYPTIAN HIEROGLYPH " + + "N020EGYPTIAN HIEROGLYPH N021EGYPTIAN HIEROGLYPH N022EGYPTIAN HIEROGLYPH " + + "N023EGYPTIAN HIEROGLYPH N024EGYPTIAN HIEROGLYPH N025EGYPTIAN HIEROGLYPH " + + "N025AEGYPTIAN HIEROGLYPH N026EGYPTIAN HIEROGLYPH N027EGYPTIAN HIEROGLYPH" + + " N028EGYPTIAN HIEROGLYPH N029EGYPTIAN HIEROGLYPH N030EGYPTIAN HIEROGLYPH" + + " N031EGYPTIAN HIEROGLYPH N032EGYPTIAN HIEROGLYPH N033EGYPTIAN HIEROGLYPH" + + " N033AEGYPTIAN HIEROGLYPH N034EGYPTIAN HIEROGLYPH N034AEGYPTIAN HIEROGLY" + + "PH N035EGYPTIAN HIEROGLYPH N035AEGYPTIAN HIEROGLYPH N036EGYPTIAN HIEROGL" + + "YPH N037EGYPTIAN HIEROGLYPH N037AEGYPTIAN HIEROGLYPH N038EGYPTIAN HIEROG" + + "LYPH N039EGYPTIAN HIEROGLYPH N040EGYPTIAN HIEROGLYPH N041EGYPTIAN HIEROG" + + "LYPH N042EGYPTIAN HIEROGLYPH NL001EGYPTIAN HIEROGLYPH NL002EGYPTIAN HIER" + + "OGLYPH NL003EGYPTIAN HIEROGLYPH NL004EGYPTIAN HIEROGLYPH NL005EGYPTIAN H" + + "IEROGLYPH NL005AEGYPTIAN HIEROGLYPH NL006EGYPTIAN HIEROGLYPH NL007EGYPTI" + + "AN HIEROGLYPH NL008EGYPTIAN HIEROGLYPH NL009EGYPTIAN HIEROGLYPH NL010EGY" + + "PTIAN HIEROGLYPH NL011EGYPTIAN HIEROGLYPH NL012EGYPTIAN HIEROGLYPH NL013" + + "EGYPTIAN HIEROGLYPH NL014EGYPTIAN HIEROGLYPH NL015EGYPTIAN HIEROGLYPH NL" + + "016EGYPTIAN HIEROGLYPH NL017EGYPTIAN HIEROGLYPH NL017AEGYPTIAN HIEROGLYP" + + "H NL018EGYPTIAN HIEROGLYPH NL019EGYPTIAN HIEROGLYPH NL020EGYPTIAN HIEROG" + + "LYPH NU001EGYPTIAN HIEROGLYPH NU002EGYPTIAN HIEROGLYPH NU003EGYPTIAN HIE" + + "ROGLYPH NU004EGYPTIAN HIEROGLYPH NU005EGYPTIAN HIEROGLYPH NU006EGYPTIAN " + + "HIEROGLYPH NU007EGYPTIAN HIEROGLYPH NU008EGYPTIAN HIEROGLYPH NU009EGYPTI" + + "AN HIEROGLYPH NU010EGYPTIAN HIEROGLYPH NU010AEGYPTIAN HIEROGLYPH NU011EG" + + "YPTIAN HIEROGLYPH NU011AEGYPTIAN HIEROGLYPH NU012EGYPTIAN HIEROGLYPH NU0" + + "13EGYPTIAN HIEROGLYPH NU014EGYPTIAN HIEROGLYPH NU015EGYPTIAN HIEROGLYPH " + + "NU016EGYPTIAN HIEROGLYPH NU017EGYPTIAN HIEROGLYPH NU018EGYPTIAN HIEROGLY" + + "PH NU018AEGYPTIAN HIEROGLYPH NU019EGYPTIAN HIEROGLYPH NU020EGYPTIAN HIER" + + "OGLYPH NU021EGYPTIAN HIEROGLYPH NU022EGYPTIAN HIEROGLYPH NU022AEGYPTIAN " + + "HIEROGLYPH O001EGYPTIAN HIEROGLYPH O001AEGYPTIAN HIEROGLYPH O002EGYPTIAN" + + " HIEROGLYPH O003EGYPTIAN HIEROGLYPH O004EGYPTIAN HIEROGLYPH O005EGYPTIAN" + + " HIEROGLYPH O005AEGYPTIAN HIEROGLYPH O006EGYPTIAN HIEROGLYPH O006AEGYPTI" + + "AN HIEROGLYPH O006BEGYPTIAN HIEROGLYPH O006CEGYPTIAN HIEROGLYPH O006DEGY" + + "PTIAN HIEROGLYPH O006EEGYPTIAN HIEROGLYPH O006FEGYPTIAN HIEROGLYPH O007E") + ("" + + "GYPTIAN HIEROGLYPH O008EGYPTIAN HIEROGLYPH O009EGYPTIAN HIEROGLYPH O010E" + + "GYPTIAN HIEROGLYPH O010AEGYPTIAN HIEROGLYPH O010BEGYPTIAN HIEROGLYPH O01" + + "0CEGYPTIAN HIEROGLYPH O011EGYPTIAN HIEROGLYPH O012EGYPTIAN HIEROGLYPH O0" + + "13EGYPTIAN HIEROGLYPH O014EGYPTIAN HIEROGLYPH O015EGYPTIAN HIEROGLYPH O0" + + "16EGYPTIAN HIEROGLYPH O017EGYPTIAN HIEROGLYPH O018EGYPTIAN HIEROGLYPH O0" + + "19EGYPTIAN HIEROGLYPH O019AEGYPTIAN HIEROGLYPH O020EGYPTIAN HIEROGLYPH O" + + "020AEGYPTIAN HIEROGLYPH O021EGYPTIAN HIEROGLYPH O022EGYPTIAN HIEROGLYPH " + + "O023EGYPTIAN HIEROGLYPH O024EGYPTIAN HIEROGLYPH O024AEGYPTIAN HIEROGLYPH" + + " O025EGYPTIAN HIEROGLYPH O025AEGYPTIAN HIEROGLYPH O026EGYPTIAN HIEROGLYP" + + "H O027EGYPTIAN HIEROGLYPH O028EGYPTIAN HIEROGLYPH O029EGYPTIAN HIEROGLYP" + + "H O029AEGYPTIAN HIEROGLYPH O030EGYPTIAN HIEROGLYPH O030AEGYPTIAN HIEROGL" + + "YPH O031EGYPTIAN HIEROGLYPH O032EGYPTIAN HIEROGLYPH O033EGYPTIAN HIEROGL" + + "YPH O033AEGYPTIAN HIEROGLYPH O034EGYPTIAN HIEROGLYPH O035EGYPTIAN HIEROG" + + "LYPH O036EGYPTIAN HIEROGLYPH O036AEGYPTIAN HIEROGLYPH O036BEGYPTIAN HIER" + + "OGLYPH O036CEGYPTIAN HIEROGLYPH O036DEGYPTIAN HIEROGLYPH O037EGYPTIAN HI" + + "EROGLYPH O038EGYPTIAN HIEROGLYPH O039EGYPTIAN HIEROGLYPH O040EGYPTIAN HI" + + "EROGLYPH O041EGYPTIAN HIEROGLYPH O042EGYPTIAN HIEROGLYPH O043EGYPTIAN HI" + + "EROGLYPH O044EGYPTIAN HIEROGLYPH O045EGYPTIAN HIEROGLYPH O046EGYPTIAN HI" + + "EROGLYPH O047EGYPTIAN HIEROGLYPH O048EGYPTIAN HIEROGLYPH O049EGYPTIAN HI" + + "EROGLYPH O050EGYPTIAN HIEROGLYPH O050AEGYPTIAN HIEROGLYPH O050BEGYPTIAN " + + "HIEROGLYPH O051EGYPTIAN HIEROGLYPH P001EGYPTIAN HIEROGLYPH P001AEGYPTIAN" + + " HIEROGLYPH P002EGYPTIAN HIEROGLYPH P003EGYPTIAN HIEROGLYPH P003AEGYPTIA" + + "N HIEROGLYPH P004EGYPTIAN HIEROGLYPH P005EGYPTIAN HIEROGLYPH P006EGYPTIA" + + "N HIEROGLYPH P007EGYPTIAN HIEROGLYPH P008EGYPTIAN HIEROGLYPH P009EGYPTIA" + + "N HIEROGLYPH P010EGYPTIAN HIEROGLYPH P011EGYPTIAN HIEROGLYPH Q001EGYPTIA" + + "N HIEROGLYPH Q002EGYPTIAN HIEROGLYPH Q003EGYPTIAN HIEROGLYPH Q004EGYPTIA" + + "N HIEROGLYPH Q005EGYPTIAN HIEROGLYPH Q006EGYPTIAN HIEROGLYPH Q007EGYPTIA" + + "N HIEROGLYPH R001EGYPTIAN HIEROGLYPH R002EGYPTIAN HIEROGLYPH R002AEGYPTI" + + "AN HIEROGLYPH R003EGYPTIAN HIEROGLYPH R003AEGYPTIAN HIEROGLYPH R003BEGYP" + + "TIAN HIEROGLYPH R004EGYPTIAN HIEROGLYPH R005EGYPTIAN HIEROGLYPH R006EGYP" + + "TIAN HIEROGLYPH R007EGYPTIAN HIEROGLYPH R008EGYPTIAN HIEROGLYPH R009EGYP" + + "TIAN HIEROGLYPH R010EGYPTIAN HIEROGLYPH R010AEGYPTIAN HIEROGLYPH R011EGY" + + "PTIAN HIEROGLYPH R012EGYPTIAN HIEROGLYPH R013EGYPTIAN HIEROGLYPH R014EGY" + + "PTIAN HIEROGLYPH R015EGYPTIAN HIEROGLYPH R016EGYPTIAN HIEROGLYPH R016AEG" + + "YPTIAN HIEROGLYPH R017EGYPTIAN HIEROGLYPH R018EGYPTIAN HIEROGLYPH R019EG" + + "YPTIAN HIEROGLYPH R020EGYPTIAN HIEROGLYPH R021EGYPTIAN HIEROGLYPH R022EG" + + "YPTIAN HIEROGLYPH R023EGYPTIAN HIEROGLYPH R024EGYPTIAN HIEROGLYPH R025EG" + + "YPTIAN HIEROGLYPH R026EGYPTIAN HIEROGLYPH R027EGYPTIAN HIEROGLYPH R028EG" + + "YPTIAN HIEROGLYPH R029EGYPTIAN HIEROGLYPH S001EGYPTIAN HIEROGLYPH S002EG" + + "YPTIAN HIEROGLYPH S002AEGYPTIAN HIEROGLYPH S003EGYPTIAN HIEROGLYPH S004E" + + "GYPTIAN HIEROGLYPH S005EGYPTIAN HIEROGLYPH S006EGYPTIAN HIEROGLYPH S006A" + + "EGYPTIAN HIEROGLYPH S007EGYPTIAN HIEROGLYPH S008EGYPTIAN HIEROGLYPH S009" + + "EGYPTIAN HIEROGLYPH S010EGYPTIAN HIEROGLYPH S011EGYPTIAN HIEROGLYPH S012" + + "EGYPTIAN HIEROGLYPH S013EGYPTIAN HIEROGLYPH S014EGYPTIAN HIEROGLYPH S014" + + "AEGYPTIAN HIEROGLYPH S014BEGYPTIAN HIEROGLYPH S015EGYPTIAN HIEROGLYPH S0" + + "16EGYPTIAN HIEROGLYPH S017EGYPTIAN HIEROGLYPH S017AEGYPTIAN HIEROGLYPH S" + + "018EGYPTIAN HIEROGLYPH S019EGYPTIAN HIEROGLYPH S020EGYPTIAN HIEROGLYPH S" + + "021EGYPTIAN HIEROGLYPH S022EGYPTIAN HIEROGLYPH S023EGYPTIAN HIEROGLYPH S" + + "024EGYPTIAN HIEROGLYPH S025EGYPTIAN HIEROGLYPH S026EGYPTIAN HIEROGLYPH S" + + "026AEGYPTIAN HIEROGLYPH S026BEGYPTIAN HIEROGLYPH S027EGYPTIAN HIEROGLYPH" + + " S028EGYPTIAN HIEROGLYPH S029EGYPTIAN HIEROGLYPH S030EGYPTIAN HIEROGLYPH" + + " S031EGYPTIAN HIEROGLYPH S032EGYPTIAN HIEROGLYPH S033EGYPTIAN HIEROGLYPH" + + " S034EGYPTIAN HIEROGLYPH S035EGYPTIAN HIEROGLYPH S035AEGYPTIAN HIEROGLYP" + + "H S036EGYPTIAN HIEROGLYPH S037EGYPTIAN HIEROGLYPH S038EGYPTIAN HIEROGLYP" + + "H S039EGYPTIAN HIEROGLYPH S040EGYPTIAN HIEROGLYPH S041EGYPTIAN HIEROGLYP" + + "H S042EGYPTIAN HIEROGLYPH S043EGYPTIAN HIEROGLYPH S044EGYPTIAN HIEROGLYP" + + "H S045EGYPTIAN HIEROGLYPH S046EGYPTIAN HIEROGLYPH T001EGYPTIAN HIEROGLYP" + + "H T002EGYPTIAN HIEROGLYPH T003EGYPTIAN HIEROGLYPH T003AEGYPTIAN HIEROGLY" + + "PH T004EGYPTIAN HIEROGLYPH T005EGYPTIAN HIEROGLYPH T006EGYPTIAN HIEROGLY" + + "PH T007EGYPTIAN HIEROGLYPH T007AEGYPTIAN HIEROGLYPH T008EGYPTIAN HIEROGL" + + "YPH T008AEGYPTIAN HIEROGLYPH T009EGYPTIAN HIEROGLYPH T009AEGYPTIAN HIERO" + + "GLYPH T010EGYPTIAN HIEROGLYPH T011EGYPTIAN HIEROGLYPH T011AEGYPTIAN HIER" + + "OGLYPH T012EGYPTIAN HIEROGLYPH T013EGYPTIAN HIEROGLYPH T014EGYPTIAN HIER" + + "OGLYPH T015EGYPTIAN HIEROGLYPH T016EGYPTIAN HIEROGLYPH T016AEGYPTIAN HIE") + ("" + + "ROGLYPH T017EGYPTIAN HIEROGLYPH T018EGYPTIAN HIEROGLYPH T019EGYPTIAN HIE" + + "ROGLYPH T020EGYPTIAN HIEROGLYPH T021EGYPTIAN HIEROGLYPH T022EGYPTIAN HIE" + + "ROGLYPH T023EGYPTIAN HIEROGLYPH T024EGYPTIAN HIEROGLYPH T025EGYPTIAN HIE" + + "ROGLYPH T026EGYPTIAN HIEROGLYPH T027EGYPTIAN HIEROGLYPH T028EGYPTIAN HIE" + + "ROGLYPH T029EGYPTIAN HIEROGLYPH T030EGYPTIAN HIEROGLYPH T031EGYPTIAN HIE" + + "ROGLYPH T032EGYPTIAN HIEROGLYPH T032AEGYPTIAN HIEROGLYPH T033EGYPTIAN HI" + + "EROGLYPH T033AEGYPTIAN HIEROGLYPH T034EGYPTIAN HIEROGLYPH T035EGYPTIAN H" + + "IEROGLYPH T036EGYPTIAN HIEROGLYPH U001EGYPTIAN HIEROGLYPH U002EGYPTIAN H" + + "IEROGLYPH U003EGYPTIAN HIEROGLYPH U004EGYPTIAN HIEROGLYPH U005EGYPTIAN H" + + "IEROGLYPH U006EGYPTIAN HIEROGLYPH U006AEGYPTIAN HIEROGLYPH U006BEGYPTIAN" + + " HIEROGLYPH U007EGYPTIAN HIEROGLYPH U008EGYPTIAN HIEROGLYPH U009EGYPTIAN" + + " HIEROGLYPH U010EGYPTIAN HIEROGLYPH U011EGYPTIAN HIEROGLYPH U012EGYPTIAN" + + " HIEROGLYPH U013EGYPTIAN HIEROGLYPH U014EGYPTIAN HIEROGLYPH U015EGYPTIAN" + + " HIEROGLYPH U016EGYPTIAN HIEROGLYPH U017EGYPTIAN HIEROGLYPH U018EGYPTIAN" + + " HIEROGLYPH U019EGYPTIAN HIEROGLYPH U020EGYPTIAN HIEROGLYPH U021EGYPTIAN" + + " HIEROGLYPH U022EGYPTIAN HIEROGLYPH U023EGYPTIAN HIEROGLYPH U023AEGYPTIA" + + "N HIEROGLYPH U024EGYPTIAN HIEROGLYPH U025EGYPTIAN HIEROGLYPH U026EGYPTIA" + + "N HIEROGLYPH U027EGYPTIAN HIEROGLYPH U028EGYPTIAN HIEROGLYPH U029EGYPTIA" + + "N HIEROGLYPH U029AEGYPTIAN HIEROGLYPH U030EGYPTIAN HIEROGLYPH U031EGYPTI" + + "AN HIEROGLYPH U032EGYPTIAN HIEROGLYPH U032AEGYPTIAN HIEROGLYPH U033EGYPT" + + "IAN HIEROGLYPH U034EGYPTIAN HIEROGLYPH U035EGYPTIAN HIEROGLYPH U036EGYPT" + + "IAN HIEROGLYPH U037EGYPTIAN HIEROGLYPH U038EGYPTIAN HIEROGLYPH U039EGYPT" + + "IAN HIEROGLYPH U040EGYPTIAN HIEROGLYPH U041EGYPTIAN HIEROGLYPH U042EGYPT" + + "IAN HIEROGLYPH V001EGYPTIAN HIEROGLYPH V001AEGYPTIAN HIEROGLYPH V001BEGY" + + "PTIAN HIEROGLYPH V001CEGYPTIAN HIEROGLYPH V001DEGYPTIAN HIEROGLYPH V001E" + + "EGYPTIAN HIEROGLYPH V001FEGYPTIAN HIEROGLYPH V001GEGYPTIAN HIEROGLYPH V0" + + "01HEGYPTIAN HIEROGLYPH V001IEGYPTIAN HIEROGLYPH V002EGYPTIAN HIEROGLYPH " + + "V002AEGYPTIAN HIEROGLYPH V003EGYPTIAN HIEROGLYPH V004EGYPTIAN HIEROGLYPH" + + " V005EGYPTIAN HIEROGLYPH V006EGYPTIAN HIEROGLYPH V007EGYPTIAN HIEROGLYPH" + + " V007AEGYPTIAN HIEROGLYPH V007BEGYPTIAN HIEROGLYPH V008EGYPTIAN HIEROGLY" + + "PH V009EGYPTIAN HIEROGLYPH V010EGYPTIAN HIEROGLYPH V011EGYPTIAN HIEROGLY" + + "PH V011AEGYPTIAN HIEROGLYPH V011BEGYPTIAN HIEROGLYPH V011CEGYPTIAN HIERO" + + "GLYPH V012EGYPTIAN HIEROGLYPH V012AEGYPTIAN HIEROGLYPH V012BEGYPTIAN HIE" + + "ROGLYPH V013EGYPTIAN HIEROGLYPH V014EGYPTIAN HIEROGLYPH V015EGYPTIAN HIE" + + "ROGLYPH V016EGYPTIAN HIEROGLYPH V017EGYPTIAN HIEROGLYPH V018EGYPTIAN HIE" + + "ROGLYPH V019EGYPTIAN HIEROGLYPH V020EGYPTIAN HIEROGLYPH V020AEGYPTIAN HI" + + "EROGLYPH V020BEGYPTIAN HIEROGLYPH V020CEGYPTIAN HIEROGLYPH V020DEGYPTIAN" + + " HIEROGLYPH V020EEGYPTIAN HIEROGLYPH V020FEGYPTIAN HIEROGLYPH V020GEGYPT" + + "IAN HIEROGLYPH V020HEGYPTIAN HIEROGLYPH V020IEGYPTIAN HIEROGLYPH V020JEG" + + "YPTIAN HIEROGLYPH V020KEGYPTIAN HIEROGLYPH V020LEGYPTIAN HIEROGLYPH V021" + + "EGYPTIAN HIEROGLYPH V022EGYPTIAN HIEROGLYPH V023EGYPTIAN HIEROGLYPH V023" + + "AEGYPTIAN HIEROGLYPH V024EGYPTIAN HIEROGLYPH V025EGYPTIAN HIEROGLYPH V02" + + "6EGYPTIAN HIEROGLYPH V027EGYPTIAN HIEROGLYPH V028EGYPTIAN HIEROGLYPH V02" + + "8AEGYPTIAN HIEROGLYPH V029EGYPTIAN HIEROGLYPH V029AEGYPTIAN HIEROGLYPH V" + + "030EGYPTIAN HIEROGLYPH V030AEGYPTIAN HIEROGLYPH V031EGYPTIAN HIEROGLYPH " + + "V031AEGYPTIAN HIEROGLYPH V032EGYPTIAN HIEROGLYPH V033EGYPTIAN HIEROGLYPH" + + " V033AEGYPTIAN HIEROGLYPH V034EGYPTIAN HIEROGLYPH V035EGYPTIAN HIEROGLYP" + + "H V036EGYPTIAN HIEROGLYPH V037EGYPTIAN HIEROGLYPH V037AEGYPTIAN HIEROGLY" + + "PH V038EGYPTIAN HIEROGLYPH V039EGYPTIAN HIEROGLYPH V040EGYPTIAN HIEROGLY" + + "PH V040AEGYPTIAN HIEROGLYPH W001EGYPTIAN HIEROGLYPH W002EGYPTIAN HIEROGL" + + "YPH W003EGYPTIAN HIEROGLYPH W003AEGYPTIAN HIEROGLYPH W004EGYPTIAN HIEROG" + + "LYPH W005EGYPTIAN HIEROGLYPH W006EGYPTIAN HIEROGLYPH W007EGYPTIAN HIEROG" + + "LYPH W008EGYPTIAN HIEROGLYPH W009EGYPTIAN HIEROGLYPH W009AEGYPTIAN HIERO" + + "GLYPH W010EGYPTIAN HIEROGLYPH W010AEGYPTIAN HIEROGLYPH W011EGYPTIAN HIER" + + "OGLYPH W012EGYPTIAN HIEROGLYPH W013EGYPTIAN HIEROGLYPH W014EGYPTIAN HIER" + + "OGLYPH W014AEGYPTIAN HIEROGLYPH W015EGYPTIAN HIEROGLYPH W016EGYPTIAN HIE" + + "ROGLYPH W017EGYPTIAN HIEROGLYPH W017AEGYPTIAN HIEROGLYPH W018EGYPTIAN HI" + + "EROGLYPH W018AEGYPTIAN HIEROGLYPH W019EGYPTIAN HIEROGLYPH W020EGYPTIAN H" + + "IEROGLYPH W021EGYPTIAN HIEROGLYPH W022EGYPTIAN HIEROGLYPH W023EGYPTIAN H" + + "IEROGLYPH W024EGYPTIAN HIEROGLYPH W024AEGYPTIAN HIEROGLYPH W025EGYPTIAN " + + "HIEROGLYPH X001EGYPTIAN HIEROGLYPH X002EGYPTIAN HIEROGLYPH X003EGYPTIAN " + + "HIEROGLYPH X004EGYPTIAN HIEROGLYPH X004AEGYPTIAN HIEROGLYPH X004BEGYPTIA" + + "N HIEROGLYPH X005EGYPTIAN HIEROGLYPH X006EGYPTIAN HIEROGLYPH X006AEGYPTI" + + "AN HIEROGLYPH X007EGYPTIAN HIEROGLYPH X008EGYPTIAN HIEROGLYPH X008AEGYPT") + ("" + + "IAN HIEROGLYPH Y001EGYPTIAN HIEROGLYPH Y001AEGYPTIAN HIEROGLYPH Y002EGYP" + + "TIAN HIEROGLYPH Y003EGYPTIAN HIEROGLYPH Y004EGYPTIAN HIEROGLYPH Y005EGYP" + + "TIAN HIEROGLYPH Y006EGYPTIAN HIEROGLYPH Y007EGYPTIAN HIEROGLYPH Y008EGYP" + + "TIAN HIEROGLYPH Z001EGYPTIAN HIEROGLYPH Z002EGYPTIAN HIEROGLYPH Z002AEGY" + + "PTIAN HIEROGLYPH Z002BEGYPTIAN HIEROGLYPH Z002CEGYPTIAN HIEROGLYPH Z002D" + + "EGYPTIAN HIEROGLYPH Z003EGYPTIAN HIEROGLYPH Z003AEGYPTIAN HIEROGLYPH Z00" + + "3BEGYPTIAN HIEROGLYPH Z004EGYPTIAN HIEROGLYPH Z004AEGYPTIAN HIEROGLYPH Z" + + "005EGYPTIAN HIEROGLYPH Z005AEGYPTIAN HIEROGLYPH Z006EGYPTIAN HIEROGLYPH " + + "Z007EGYPTIAN HIEROGLYPH Z008EGYPTIAN HIEROGLYPH Z009EGYPTIAN HIEROGLYPH " + + "Z010EGYPTIAN HIEROGLYPH Z011EGYPTIAN HIEROGLYPH Z012EGYPTIAN HIEROGLYPH " + + "Z013EGYPTIAN HIEROGLYPH Z014EGYPTIAN HIEROGLYPH Z015EGYPTIAN HIEROGLYPH " + + "Z015AEGYPTIAN HIEROGLYPH Z015BEGYPTIAN HIEROGLYPH Z015CEGYPTIAN HIEROGLY" + + "PH Z015DEGYPTIAN HIEROGLYPH Z015EEGYPTIAN HIEROGLYPH Z015FEGYPTIAN HIERO" + + "GLYPH Z015GEGYPTIAN HIEROGLYPH Z015HEGYPTIAN HIEROGLYPH Z015IEGYPTIAN HI" + + "EROGLYPH Z016EGYPTIAN HIEROGLYPH Z016AEGYPTIAN HIEROGLYPH Z016BEGYPTIAN " + + "HIEROGLYPH Z016CEGYPTIAN HIEROGLYPH Z016DEGYPTIAN HIEROGLYPH Z016EEGYPTI" + + "AN HIEROGLYPH Z016FEGYPTIAN HIEROGLYPH Z016GEGYPTIAN HIEROGLYPH Z016HEGY" + + "PTIAN HIEROGLYPH AA001EGYPTIAN HIEROGLYPH AA002EGYPTIAN HIEROGLYPH AA003" + + "EGYPTIAN HIEROGLYPH AA004EGYPTIAN HIEROGLYPH AA005EGYPTIAN HIEROGLYPH AA" + + "006EGYPTIAN HIEROGLYPH AA007EGYPTIAN HIEROGLYPH AA007AEGYPTIAN HIEROGLYP" + + "H AA007BEGYPTIAN HIEROGLYPH AA008EGYPTIAN HIEROGLYPH AA009EGYPTIAN HIERO" + + "GLYPH AA010EGYPTIAN HIEROGLYPH AA011EGYPTIAN HIEROGLYPH AA012EGYPTIAN HI" + + "EROGLYPH AA013EGYPTIAN HIEROGLYPH AA014EGYPTIAN HIEROGLYPH AA015EGYPTIAN" + + " HIEROGLYPH AA016EGYPTIAN HIEROGLYPH AA017EGYPTIAN HIEROGLYPH AA018EGYPT" + + "IAN HIEROGLYPH AA019EGYPTIAN HIEROGLYPH AA020EGYPTIAN HIEROGLYPH AA021EG" + + "YPTIAN HIEROGLYPH AA022EGYPTIAN HIEROGLYPH AA023EGYPTIAN HIEROGLYPH AA02" + + "4EGYPTIAN HIEROGLYPH AA025EGYPTIAN HIEROGLYPH AA026EGYPTIAN HIEROGLYPH A" + + "A027EGYPTIAN HIEROGLYPH AA028EGYPTIAN HIEROGLYPH AA029EGYPTIAN HIEROGLYP" + + "H AA030EGYPTIAN HIEROGLYPH AA031EGYPTIAN HIEROGLYPH AA032ANATOLIAN HIERO" + + "GLYPH A001ANATOLIAN HIEROGLYPH A002ANATOLIAN HIEROGLYPH A003ANATOLIAN HI" + + "EROGLYPH A004ANATOLIAN HIEROGLYPH A005ANATOLIAN HIEROGLYPH A006ANATOLIAN" + + " HIEROGLYPH A007ANATOLIAN HIEROGLYPH A008ANATOLIAN HIEROGLYPH A009ANATOL" + + "IAN HIEROGLYPH A010ANATOLIAN HIEROGLYPH A010AANATOLIAN HIEROGLYPH A011AN" + + "ATOLIAN HIEROGLYPH A012ANATOLIAN HIEROGLYPH A013ANATOLIAN HIEROGLYPH A01" + + "4ANATOLIAN HIEROGLYPH A015ANATOLIAN HIEROGLYPH A016ANATOLIAN HIEROGLYPH " + + "A017ANATOLIAN HIEROGLYPH A018ANATOLIAN HIEROGLYPH A019ANATOLIAN HIEROGLY" + + "PH A020ANATOLIAN HIEROGLYPH A021ANATOLIAN HIEROGLYPH A022ANATOLIAN HIERO" + + "GLYPH A023ANATOLIAN HIEROGLYPH A024ANATOLIAN HIEROGLYPH A025ANATOLIAN HI" + + "EROGLYPH A026ANATOLIAN HIEROGLYPH A026AANATOLIAN HIEROGLYPH A027ANATOLIA" + + "N HIEROGLYPH A028ANATOLIAN HIEROGLYPH A029ANATOLIAN HIEROGLYPH A030ANATO" + + "LIAN HIEROGLYPH A031ANATOLIAN HIEROGLYPH A032ANATOLIAN HIEROGLYPH A033AN" + + "ATOLIAN HIEROGLYPH A034ANATOLIAN HIEROGLYPH A035ANATOLIAN HIEROGLYPH A03" + + "6ANATOLIAN HIEROGLYPH A037ANATOLIAN HIEROGLYPH A038ANATOLIAN HIEROGLYPH " + + "A039ANATOLIAN HIEROGLYPH A039AANATOLIAN HIEROGLYPH A040ANATOLIAN HIEROGL" + + "YPH A041ANATOLIAN HIEROGLYPH A041AANATOLIAN HIEROGLYPH A042ANATOLIAN HIE" + + "ROGLYPH A043ANATOLIAN HIEROGLYPH A044ANATOLIAN HIEROGLYPH A045ANATOLIAN " + + "HIEROGLYPH A045AANATOLIAN HIEROGLYPH A046ANATOLIAN HIEROGLYPH A046AANATO" + + "LIAN HIEROGLYPH A046BANATOLIAN HIEROGLYPH A047ANATOLIAN HIEROGLYPH A048A" + + "NATOLIAN HIEROGLYPH A049ANATOLIAN HIEROGLYPH A050ANATOLIAN HIEROGLYPH A0" + + "51ANATOLIAN HIEROGLYPH A052ANATOLIAN HIEROGLYPH A053ANATOLIAN HIEROGLYPH" + + " A054ANATOLIAN HIEROGLYPH A055ANATOLIAN HIEROGLYPH A056ANATOLIAN HIEROGL" + + "YPH A057ANATOLIAN HIEROGLYPH A058ANATOLIAN HIEROGLYPH A059ANATOLIAN HIER" + + "OGLYPH A060ANATOLIAN HIEROGLYPH A061ANATOLIAN HIEROGLYPH A062ANATOLIAN H" + + "IEROGLYPH A063ANATOLIAN HIEROGLYPH A064ANATOLIAN HIEROGLYPH A065ANATOLIA" + + "N HIEROGLYPH A066ANATOLIAN HIEROGLYPH A066AANATOLIAN HIEROGLYPH A066BANA" + + "TOLIAN HIEROGLYPH A066CANATOLIAN HIEROGLYPH A067ANATOLIAN HIEROGLYPH A06" + + "8ANATOLIAN HIEROGLYPH A069ANATOLIAN HIEROGLYPH A070ANATOLIAN HIEROGLYPH " + + "A071ANATOLIAN HIEROGLYPH A072ANATOLIAN HIEROGLYPH A073ANATOLIAN HIEROGLY" + + "PH A074ANATOLIAN HIEROGLYPH A075ANATOLIAN HIEROGLYPH A076ANATOLIAN HIERO" + + "GLYPH A077ANATOLIAN HIEROGLYPH A078ANATOLIAN HIEROGLYPH A079ANATOLIAN HI" + + "EROGLYPH A080ANATOLIAN HIEROGLYPH A081ANATOLIAN HIEROGLYPH A082ANATOLIAN" + + " HIEROGLYPH A083ANATOLIAN HIEROGLYPH A084ANATOLIAN HIEROGLYPH A085ANATOL" + + "IAN HIEROGLYPH A086ANATOLIAN HIEROGLYPH A087ANATOLIAN HIEROGLYPH A088ANA" + + "TOLIAN HIEROGLYPH A089ANATOLIAN HIEROGLYPH A090ANATOLIAN HIEROGLYPH A091") + ("" + + "ANATOLIAN HIEROGLYPH A092ANATOLIAN HIEROGLYPH A093ANATOLIAN HIEROGLYPH A" + + "094ANATOLIAN HIEROGLYPH A095ANATOLIAN HIEROGLYPH A096ANATOLIAN HIEROGLYP" + + "H A097ANATOLIAN HIEROGLYPH A097AANATOLIAN HIEROGLYPH A098ANATOLIAN HIERO" + + "GLYPH A098AANATOLIAN HIEROGLYPH A099ANATOLIAN HIEROGLYPH A100ANATOLIAN H" + + "IEROGLYPH A100AANATOLIAN HIEROGLYPH A101ANATOLIAN HIEROGLYPH A101AANATOL" + + "IAN HIEROGLYPH A102ANATOLIAN HIEROGLYPH A102AANATOLIAN HIEROGLYPH A103AN" + + "ATOLIAN HIEROGLYPH A104ANATOLIAN HIEROGLYPH A104AANATOLIAN HIEROGLYPH A1" + + "04BANATOLIAN HIEROGLYPH A104CANATOLIAN HIEROGLYPH A105ANATOLIAN HIEROGLY" + + "PH A105AANATOLIAN HIEROGLYPH A105BANATOLIAN HIEROGLYPH A106ANATOLIAN HIE" + + "ROGLYPH A107ANATOLIAN HIEROGLYPH A107AANATOLIAN HIEROGLYPH A107BANATOLIA" + + "N HIEROGLYPH A107CANATOLIAN HIEROGLYPH A108ANATOLIAN HIEROGLYPH A109ANAT" + + "OLIAN HIEROGLYPH A110ANATOLIAN HIEROGLYPH A110AANATOLIAN HIEROGLYPH A110" + + "BANATOLIAN HIEROGLYPH A111ANATOLIAN HIEROGLYPH A112ANATOLIAN HIEROGLYPH " + + "A113ANATOLIAN HIEROGLYPH A114ANATOLIAN HIEROGLYPH A115ANATOLIAN HIEROGLY" + + "PH A115AANATOLIAN HIEROGLYPH A116ANATOLIAN HIEROGLYPH A117ANATOLIAN HIER" + + "OGLYPH A118ANATOLIAN HIEROGLYPH A119ANATOLIAN HIEROGLYPH A120ANATOLIAN H" + + "IEROGLYPH A121ANATOLIAN HIEROGLYPH A122ANATOLIAN HIEROGLYPH A123ANATOLIA" + + "N HIEROGLYPH A124ANATOLIAN HIEROGLYPH A125ANATOLIAN HIEROGLYPH A125AANAT" + + "OLIAN HIEROGLYPH A126ANATOLIAN HIEROGLYPH A127ANATOLIAN HIEROGLYPH A128A" + + "NATOLIAN HIEROGLYPH A129ANATOLIAN HIEROGLYPH A130ANATOLIAN HIEROGLYPH A1" + + "31ANATOLIAN HIEROGLYPH A132ANATOLIAN HIEROGLYPH A133ANATOLIAN HIEROGLYPH" + + " A134ANATOLIAN HIEROGLYPH A135ANATOLIAN HIEROGLYPH A135AANATOLIAN HIEROG" + + "LYPH A136ANATOLIAN HIEROGLYPH A137ANATOLIAN HIEROGLYPH A138ANATOLIAN HIE" + + "ROGLYPH A139ANATOLIAN HIEROGLYPH A140ANATOLIAN HIEROGLYPH A141ANATOLIAN " + + "HIEROGLYPH A142ANATOLIAN HIEROGLYPH A143ANATOLIAN HIEROGLYPH A144ANATOLI" + + "AN HIEROGLYPH A145ANATOLIAN HIEROGLYPH A146ANATOLIAN HIEROGLYPH A147ANAT" + + "OLIAN HIEROGLYPH A148ANATOLIAN HIEROGLYPH A149ANATOLIAN HIEROGLYPH A150A" + + "NATOLIAN HIEROGLYPH A151ANATOLIAN HIEROGLYPH A152ANATOLIAN HIEROGLYPH A1" + + "53ANATOLIAN HIEROGLYPH A154ANATOLIAN HIEROGLYPH A155ANATOLIAN HIEROGLYPH" + + " A156ANATOLIAN HIEROGLYPH A157ANATOLIAN HIEROGLYPH A158ANATOLIAN HIEROGL" + + "YPH A159ANATOLIAN HIEROGLYPH A160ANATOLIAN HIEROGLYPH A161ANATOLIAN HIER" + + "OGLYPH A162ANATOLIAN HIEROGLYPH A163ANATOLIAN HIEROGLYPH A164ANATOLIAN H" + + "IEROGLYPH A165ANATOLIAN HIEROGLYPH A166ANATOLIAN HIEROGLYPH A167ANATOLIA" + + "N HIEROGLYPH A168ANATOLIAN HIEROGLYPH A169ANATOLIAN HIEROGLYPH A170ANATO" + + "LIAN HIEROGLYPH A171ANATOLIAN HIEROGLYPH A172ANATOLIAN HIEROGLYPH A173AN" + + "ATOLIAN HIEROGLYPH A174ANATOLIAN HIEROGLYPH A175ANATOLIAN HIEROGLYPH A17" + + "6ANATOLIAN HIEROGLYPH A177ANATOLIAN HIEROGLYPH A178ANATOLIAN HIEROGLYPH " + + "A179ANATOLIAN HIEROGLYPH A180ANATOLIAN HIEROGLYPH A181ANATOLIAN HIEROGLY" + + "PH A182ANATOLIAN HIEROGLYPH A183ANATOLIAN HIEROGLYPH A184ANATOLIAN HIERO" + + "GLYPH A185ANATOLIAN HIEROGLYPH A186ANATOLIAN HIEROGLYPH A187ANATOLIAN HI" + + "EROGLYPH A188ANATOLIAN HIEROGLYPH A189ANATOLIAN HIEROGLYPH A190ANATOLIAN" + + " HIEROGLYPH A191ANATOLIAN HIEROGLYPH A192ANATOLIAN HIEROGLYPH A193ANATOL" + + "IAN HIEROGLYPH A194ANATOLIAN HIEROGLYPH A195ANATOLIAN HIEROGLYPH A196ANA" + + "TOLIAN HIEROGLYPH A197ANATOLIAN HIEROGLYPH A198ANATOLIAN HIEROGLYPH A199" + + "ANATOLIAN HIEROGLYPH A200ANATOLIAN HIEROGLYPH A201ANATOLIAN HIEROGLYPH A" + + "202ANATOLIAN HIEROGLYPH A202AANATOLIAN HIEROGLYPH A202BANATOLIAN HIEROGL" + + "YPH A203ANATOLIAN HIEROGLYPH A204ANATOLIAN HIEROGLYPH A205ANATOLIAN HIER" + + "OGLYPH A206ANATOLIAN HIEROGLYPH A207ANATOLIAN HIEROGLYPH A207AANATOLIAN " + + "HIEROGLYPH A208ANATOLIAN HIEROGLYPH A209ANATOLIAN HIEROGLYPH A209AANATOL" + + "IAN HIEROGLYPH A210ANATOLIAN HIEROGLYPH A211ANATOLIAN HIEROGLYPH A212ANA" + + "TOLIAN HIEROGLYPH A213ANATOLIAN HIEROGLYPH A214ANATOLIAN HIEROGLYPH A215" + + "ANATOLIAN HIEROGLYPH A215AANATOLIAN HIEROGLYPH A216ANATOLIAN HIEROGLYPH " + + "A216AANATOLIAN HIEROGLYPH A217ANATOLIAN HIEROGLYPH A218ANATOLIAN HIEROGL" + + "YPH A219ANATOLIAN HIEROGLYPH A220ANATOLIAN HIEROGLYPH A221ANATOLIAN HIER" + + "OGLYPH A222ANATOLIAN HIEROGLYPH A223ANATOLIAN HIEROGLYPH A224ANATOLIAN H" + + "IEROGLYPH A225ANATOLIAN HIEROGLYPH A226ANATOLIAN HIEROGLYPH A227ANATOLIA" + + "N HIEROGLYPH A227AANATOLIAN HIEROGLYPH A228ANATOLIAN HIEROGLYPH A229ANAT" + + "OLIAN HIEROGLYPH A230ANATOLIAN HIEROGLYPH A231ANATOLIAN HIEROGLYPH A232A" + + "NATOLIAN HIEROGLYPH A233ANATOLIAN HIEROGLYPH A234ANATOLIAN HIEROGLYPH A2" + + "35ANATOLIAN HIEROGLYPH A236ANATOLIAN HIEROGLYPH A237ANATOLIAN HIEROGLYPH" + + " A238ANATOLIAN HIEROGLYPH A239ANATOLIAN HIEROGLYPH A240ANATOLIAN HIEROGL" + + "YPH A241ANATOLIAN HIEROGLYPH A242ANATOLIAN HIEROGLYPH A243ANATOLIAN HIER" + + "OGLYPH A244ANATOLIAN HIEROGLYPH A245ANATOLIAN HIEROGLYPH A246ANATOLIAN H" + + "IEROGLYPH A247ANATOLIAN HIEROGLYPH A248ANATOLIAN HIEROGLYPH A249ANATOLIA") + ("" + + "N HIEROGLYPH A250ANATOLIAN HIEROGLYPH A251ANATOLIAN HIEROGLYPH A252ANATO" + + "LIAN HIEROGLYPH A253ANATOLIAN HIEROGLYPH A254ANATOLIAN HIEROGLYPH A255AN" + + "ATOLIAN HIEROGLYPH A256ANATOLIAN HIEROGLYPH A257ANATOLIAN HIEROGLYPH A25" + + "8ANATOLIAN HIEROGLYPH A259ANATOLIAN HIEROGLYPH A260ANATOLIAN HIEROGLYPH " + + "A261ANATOLIAN HIEROGLYPH A262ANATOLIAN HIEROGLYPH A263ANATOLIAN HIEROGLY" + + "PH A264ANATOLIAN HIEROGLYPH A265ANATOLIAN HIEROGLYPH A266ANATOLIAN HIERO" + + "GLYPH A267ANATOLIAN HIEROGLYPH A267AANATOLIAN HIEROGLYPH A268ANATOLIAN H" + + "IEROGLYPH A269ANATOLIAN HIEROGLYPH A270ANATOLIAN HIEROGLYPH A271ANATOLIA" + + "N HIEROGLYPH A272ANATOLIAN HIEROGLYPH A273ANATOLIAN HIEROGLYPH A274ANATO" + + "LIAN HIEROGLYPH A275ANATOLIAN HIEROGLYPH A276ANATOLIAN HIEROGLYPH A277AN" + + "ATOLIAN HIEROGLYPH A278ANATOLIAN HIEROGLYPH A279ANATOLIAN HIEROGLYPH A28" + + "0ANATOLIAN HIEROGLYPH A281ANATOLIAN HIEROGLYPH A282ANATOLIAN HIEROGLYPH " + + "A283ANATOLIAN HIEROGLYPH A284ANATOLIAN HIEROGLYPH A285ANATOLIAN HIEROGLY" + + "PH A286ANATOLIAN HIEROGLYPH A287ANATOLIAN HIEROGLYPH A288ANATOLIAN HIERO" + + "GLYPH A289ANATOLIAN HIEROGLYPH A289AANATOLIAN HIEROGLYPH A290ANATOLIAN H" + + "IEROGLYPH A291ANATOLIAN HIEROGLYPH A292ANATOLIAN HIEROGLYPH A293ANATOLIA" + + "N HIEROGLYPH A294ANATOLIAN HIEROGLYPH A294AANATOLIAN HIEROGLYPH A295ANAT" + + "OLIAN HIEROGLYPH A296ANATOLIAN HIEROGLYPH A297ANATOLIAN HIEROGLYPH A298A" + + "NATOLIAN HIEROGLYPH A299ANATOLIAN HIEROGLYPH A299AANATOLIAN HIEROGLYPH A" + + "300ANATOLIAN HIEROGLYPH A301ANATOLIAN HIEROGLYPH A302ANATOLIAN HIEROGLYP" + + "H A303ANATOLIAN HIEROGLYPH A304ANATOLIAN HIEROGLYPH A305ANATOLIAN HIEROG" + + "LYPH A306ANATOLIAN HIEROGLYPH A307ANATOLIAN HIEROGLYPH A308ANATOLIAN HIE" + + "ROGLYPH A309ANATOLIAN HIEROGLYPH A309AANATOLIAN HIEROGLYPH A310ANATOLIAN" + + " HIEROGLYPH A311ANATOLIAN HIEROGLYPH A312ANATOLIAN HIEROGLYPH A313ANATOL" + + "IAN HIEROGLYPH A314ANATOLIAN HIEROGLYPH A315ANATOLIAN HIEROGLYPH A316ANA" + + "TOLIAN HIEROGLYPH A317ANATOLIAN HIEROGLYPH A318ANATOLIAN HIEROGLYPH A319" + + "ANATOLIAN HIEROGLYPH A320ANATOLIAN HIEROGLYPH A321ANATOLIAN HIEROGLYPH A" + + "322ANATOLIAN HIEROGLYPH A323ANATOLIAN HIEROGLYPH A324ANATOLIAN HIEROGLYP" + + "H A325ANATOLIAN HIEROGLYPH A326ANATOLIAN HIEROGLYPH A327ANATOLIAN HIEROG" + + "LYPH A328ANATOLIAN HIEROGLYPH A329ANATOLIAN HIEROGLYPH A329AANATOLIAN HI" + + "EROGLYPH A330ANATOLIAN HIEROGLYPH A331ANATOLIAN HIEROGLYPH A332AANATOLIA" + + "N HIEROGLYPH A332BANATOLIAN HIEROGLYPH A332CANATOLIAN HIEROGLYPH A333ANA" + + "TOLIAN HIEROGLYPH A334ANATOLIAN HIEROGLYPH A335ANATOLIAN HIEROGLYPH A336" + + "ANATOLIAN HIEROGLYPH A336AANATOLIAN HIEROGLYPH A336BANATOLIAN HIEROGLYPH" + + " A336CANATOLIAN HIEROGLYPH A337ANATOLIAN HIEROGLYPH A338ANATOLIAN HIEROG" + + "LYPH A339ANATOLIAN HIEROGLYPH A340ANATOLIAN HIEROGLYPH A341ANATOLIAN HIE" + + "ROGLYPH A342ANATOLIAN HIEROGLYPH A343ANATOLIAN HIEROGLYPH A344ANATOLIAN " + + "HIEROGLYPH A345ANATOLIAN HIEROGLYPH A346ANATOLIAN HIEROGLYPH A347ANATOLI" + + "AN HIEROGLYPH A348ANATOLIAN HIEROGLYPH A349ANATOLIAN HIEROGLYPH A350ANAT" + + "OLIAN HIEROGLYPH A351ANATOLIAN HIEROGLYPH A352ANATOLIAN HIEROGLYPH A353A" + + "NATOLIAN HIEROGLYPH A354ANATOLIAN HIEROGLYPH A355ANATOLIAN HIEROGLYPH A3" + + "56ANATOLIAN HIEROGLYPH A357ANATOLIAN HIEROGLYPH A358ANATOLIAN HIEROGLYPH" + + " A359ANATOLIAN HIEROGLYPH A359AANATOLIAN HIEROGLYPH A360ANATOLIAN HIEROG" + + "LYPH A361ANATOLIAN HIEROGLYPH A362ANATOLIAN HIEROGLYPH A363ANATOLIAN HIE" + + "ROGLYPH A364ANATOLIAN HIEROGLYPH A364AANATOLIAN HIEROGLYPH A365ANATOLIAN" + + " HIEROGLYPH A366ANATOLIAN HIEROGLYPH A367ANATOLIAN HIEROGLYPH A368ANATOL" + + "IAN HIEROGLYPH A368AANATOLIAN HIEROGLYPH A369ANATOLIAN HIEROGLYPH A370AN" + + "ATOLIAN HIEROGLYPH A371ANATOLIAN HIEROGLYPH A371AANATOLIAN HIEROGLYPH A3" + + "72ANATOLIAN HIEROGLYPH A373ANATOLIAN HIEROGLYPH A374ANATOLIAN HIEROGLYPH" + + " A375ANATOLIAN HIEROGLYPH A376ANATOLIAN HIEROGLYPH A377ANATOLIAN HIEROGL" + + "YPH A378ANATOLIAN HIEROGLYPH A379ANATOLIAN HIEROGLYPH A380ANATOLIAN HIER" + + "OGLYPH A381ANATOLIAN HIEROGLYPH A381AANATOLIAN HIEROGLYPH A382ANATOLIAN " + + "HIEROGLYPH A383 RA OR RIANATOLIAN HIEROGLYPH A383AANATOLIAN HIEROGLYPH A" + + "384ANATOLIAN HIEROGLYPH A385ANATOLIAN HIEROGLYPH A386ANATOLIAN HIEROGLYP" + + "H A386AANATOLIAN HIEROGLYPH A387ANATOLIAN HIEROGLYPH A388ANATOLIAN HIERO" + + "GLYPH A389ANATOLIAN HIEROGLYPH A390ANATOLIAN HIEROGLYPH A391ANATOLIAN HI" + + "EROGLYPH A392ANATOLIAN HIEROGLYPH A393 EIGHTANATOLIAN HIEROGLYPH A394ANA" + + "TOLIAN HIEROGLYPH A395ANATOLIAN HIEROGLYPH A396ANATOLIAN HIEROGLYPH A397" + + "ANATOLIAN HIEROGLYPH A398ANATOLIAN HIEROGLYPH A399ANATOLIAN HIEROGLYPH A" + + "400ANATOLIAN HIEROGLYPH A401ANATOLIAN HIEROGLYPH A402ANATOLIAN HIEROGLYP" + + "H A403ANATOLIAN HIEROGLYPH A404ANATOLIAN HIEROGLYPH A405ANATOLIAN HIEROG" + + "LYPH A406ANATOLIAN HIEROGLYPH A407ANATOLIAN HIEROGLYPH A408ANATOLIAN HIE" + + "ROGLYPH A409ANATOLIAN HIEROGLYPH A410 BEGIN LOGOGRAM MARKANATOLIAN HIERO" + + "GLYPH A410A END LOGOGRAM MARKANATOLIAN HIEROGLYPH A411ANATOLIAN HIEROGLY") + ("" + + "PH A412ANATOLIAN HIEROGLYPH A413ANATOLIAN HIEROGLYPH A414ANATOLIAN HIERO" + + "GLYPH A415ANATOLIAN HIEROGLYPH A416ANATOLIAN HIEROGLYPH A417ANATOLIAN HI" + + "EROGLYPH A418ANATOLIAN HIEROGLYPH A419ANATOLIAN HIEROGLYPH A420ANATOLIAN" + + " HIEROGLYPH A421ANATOLIAN HIEROGLYPH A422ANATOLIAN HIEROGLYPH A423ANATOL" + + "IAN HIEROGLYPH A424ANATOLIAN HIEROGLYPH A425ANATOLIAN HIEROGLYPH A426ANA" + + "TOLIAN HIEROGLYPH A427ANATOLIAN HIEROGLYPH A428ANATOLIAN HIEROGLYPH A429" + + "ANATOLIAN HIEROGLYPH A430ANATOLIAN HIEROGLYPH A431ANATOLIAN HIEROGLYPH A" + + "432ANATOLIAN HIEROGLYPH A433ANATOLIAN HIEROGLYPH A434ANATOLIAN HIEROGLYP" + + "H A435ANATOLIAN HIEROGLYPH A436ANATOLIAN HIEROGLYPH A437ANATOLIAN HIEROG" + + "LYPH A438ANATOLIAN HIEROGLYPH A439ANATOLIAN HIEROGLYPH A440ANATOLIAN HIE" + + "ROGLYPH A441ANATOLIAN HIEROGLYPH A442ANATOLIAN HIEROGLYPH A443ANATOLIAN " + + "HIEROGLYPH A444ANATOLIAN HIEROGLYPH A445ANATOLIAN HIEROGLYPH A446ANATOLI" + + "AN HIEROGLYPH A447ANATOLIAN HIEROGLYPH A448ANATOLIAN HIEROGLYPH A449ANAT" + + "OLIAN HIEROGLYPH A450ANATOLIAN HIEROGLYPH A450AANATOLIAN HIEROGLYPH A451" + + "ANATOLIAN HIEROGLYPH A452ANATOLIAN HIEROGLYPH A453ANATOLIAN HIEROGLYPH A" + + "454ANATOLIAN HIEROGLYPH A455ANATOLIAN HIEROGLYPH A456ANATOLIAN HIEROGLYP" + + "H A457ANATOLIAN HIEROGLYPH A457AANATOLIAN HIEROGLYPH A458ANATOLIAN HIERO" + + "GLYPH A459ANATOLIAN HIEROGLYPH A460ANATOLIAN HIEROGLYPH A461ANATOLIAN HI" + + "EROGLYPH A462ANATOLIAN HIEROGLYPH A463ANATOLIAN HIEROGLYPH A464ANATOLIAN" + + " HIEROGLYPH A465ANATOLIAN HIEROGLYPH A466ANATOLIAN HIEROGLYPH A467ANATOL" + + "IAN HIEROGLYPH A468ANATOLIAN HIEROGLYPH A469ANATOLIAN HIEROGLYPH A470ANA" + + "TOLIAN HIEROGLYPH A471ANATOLIAN HIEROGLYPH A472ANATOLIAN HIEROGLYPH A473" + + "ANATOLIAN HIEROGLYPH A474ANATOLIAN HIEROGLYPH A475ANATOLIAN HIEROGLYPH A" + + "476ANATOLIAN HIEROGLYPH A477ANATOLIAN HIEROGLYPH A478ANATOLIAN HIEROGLYP" + + "H A479ANATOLIAN HIEROGLYPH A480ANATOLIAN HIEROGLYPH A481ANATOLIAN HIEROG" + + "LYPH A482ANATOLIAN HIEROGLYPH A483ANATOLIAN HIEROGLYPH A484ANATOLIAN HIE" + + "ROGLYPH A485ANATOLIAN HIEROGLYPH A486ANATOLIAN HIEROGLYPH A487ANATOLIAN " + + "HIEROGLYPH A488ANATOLIAN HIEROGLYPH A489ANATOLIAN HIEROGLYPH A490ANATOLI" + + "AN HIEROGLYPH A491ANATOLIAN HIEROGLYPH A492ANATOLIAN HIEROGLYPH A493ANAT" + + "OLIAN HIEROGLYPH A494ANATOLIAN HIEROGLYPH A495ANATOLIAN HIEROGLYPH A496A" + + "NATOLIAN HIEROGLYPH A497ANATOLIAN HIEROGLYPH A501ANATOLIAN HIEROGLYPH A5" + + "02ANATOLIAN HIEROGLYPH A503ANATOLIAN HIEROGLYPH A504ANATOLIAN HIEROGLYPH" + + " A505ANATOLIAN HIEROGLYPH A506ANATOLIAN HIEROGLYPH A507ANATOLIAN HIEROGL" + + "YPH A508ANATOLIAN HIEROGLYPH A509ANATOLIAN HIEROGLYPH A510ANATOLIAN HIER" + + "OGLYPH A511ANATOLIAN HIEROGLYPH A512ANATOLIAN HIEROGLYPH A513ANATOLIAN H" + + "IEROGLYPH A514ANATOLIAN HIEROGLYPH A515ANATOLIAN HIEROGLYPH A516ANATOLIA" + + "N HIEROGLYPH A517ANATOLIAN HIEROGLYPH A518ANATOLIAN HIEROGLYPH A519ANATO" + + "LIAN HIEROGLYPH A520ANATOLIAN HIEROGLYPH A521ANATOLIAN HIEROGLYPH A522AN" + + "ATOLIAN HIEROGLYPH A523ANATOLIAN HIEROGLYPH A524ANATOLIAN HIEROGLYPH A52" + + "5ANATOLIAN HIEROGLYPH A526ANATOLIAN HIEROGLYPH A527ANATOLIAN HIEROGLYPH " + + "A528ANATOLIAN HIEROGLYPH A529ANATOLIAN HIEROGLYPH A530BAMUM LETTER PHASE" + + "-A NGKUE MFONBAMUM LETTER PHASE-A GBIEE FONBAMUM LETTER PHASE-A PON MFON" + + " PIPAEMGBIEEBAMUM LETTER PHASE-A PON MFON PIPAEMBABAMUM LETTER PHASE-A N" + + "AA MFONBAMUM LETTER PHASE-A SHUENSHUETBAMUM LETTER PHASE-A TITA MFONBAMU" + + "M LETTER PHASE-A NZA MFONBAMUM LETTER PHASE-A SHINDA PA NJIBAMUM LETTER " + + "PHASE-A PON PA NJI PIPAEMGBIEEBAMUM LETTER PHASE-A PON PA NJI PIPAEMBABA" + + "MUM LETTER PHASE-A MAEMBGBIEEBAMUM LETTER PHASE-A TU MAEMBABAMUM LETTER " + + "PHASE-A NGANGUBAMUM LETTER PHASE-A MAEMVEUXBAMUM LETTER PHASE-A MANSUAEB" + + "AMUM LETTER PHASE-A MVEUAENGAMBAMUM LETTER PHASE-A SEUNYAMBAMUM LETTER P" + + "HASE-A NTOQPENBAMUM LETTER PHASE-A KEUKEUTNDABAMUM LETTER PHASE-A NKINDI" + + "BAMUM LETTER PHASE-A SUUBAMUM LETTER PHASE-A NGKUENZEUMBAMUM LETTER PHAS" + + "E-A LAPAQBAMUM LETTER PHASE-A LET KUTBAMUM LETTER PHASE-A NTAP MFAABAMUM" + + " LETTER PHASE-A MAEKEUPBAMUM LETTER PHASE-A PASHAEBAMUM LETTER PHASE-A G" + + "HEUAERAEBAMUM LETTER PHASE-A PAMSHAEBAMUM LETTER PHASE-A MON NGGEUAETBAM" + + "UM LETTER PHASE-A NZUN MEUTBAMUM LETTER PHASE-A U YUQ NAEBAMUM LETTER PH" + + "ASE-A GHEUAEGHEUAEBAMUM LETTER PHASE-A NTAP NTAABAMUM LETTER PHASE-A SIS" + + "ABAMUM LETTER PHASE-A MGBASABAMUM LETTER PHASE-A MEUNJOMNDEUQBAMUM LETTE" + + "R PHASE-A MOOMPUQBAMUM LETTER PHASE-A KAFABAMUM LETTER PHASE-A PA LEERAE" + + "WABAMUM LETTER PHASE-A NDA LEERAEWABAMUM LETTER PHASE-A PETBAMUM LETTER " + + "PHASE-A MAEMKPENBAMUM LETTER PHASE-A NIKABAMUM LETTER PHASE-A PUPBAMUM L" + + "ETTER PHASE-A TUAEPBAMUM LETTER PHASE-A LUAEPBAMUM LETTER PHASE-A SONJAM" + + "BAMUM LETTER PHASE-A TEUTEUWENBAMUM LETTER PHASE-A MAENYIBAMUM LETTER PH" + + "ASE-A KETBAMUM LETTER PHASE-A NDAANGGEUAETBAMUM LETTER PHASE-A KUOQBAMUM" + + " LETTER PHASE-A MOOMEUTBAMUM LETTER PHASE-A SHUMBAMUM LETTER PHASE-A LOM") + ("" + + "MAEBAMUM LETTER PHASE-A FIRIBAMUM LETTER PHASE-A ROMBAMUM LETTER PHASE-A" + + " KPOQBAMUM LETTER PHASE-A SOQBAMUM LETTER PHASE-A MAP PIEETBAMUM LETTER " + + "PHASE-A SHIRAEBAMUM LETTER PHASE-A NTAPBAMUM LETTER PHASE-A SHOQ NSHUT Y" + + "UMBAMUM LETTER PHASE-A NYIT MONGKEUAEQBAMUM LETTER PHASE-A PAARAEBAMUM L" + + "ETTER PHASE-A NKAARAEBAMUM LETTER PHASE-A UNKNOWNBAMUM LETTER PHASE-A NG" + + "GENBAMUM LETTER PHASE-A MAESIBAMUM LETTER PHASE-A NJAMBAMUM LETTER PHASE" + + "-A MBANYIBAMUM LETTER PHASE-A NYETBAMUM LETTER PHASE-A TEUAENBAMUM LETTE" + + "R PHASE-A SOTBAMUM LETTER PHASE-A PAAMBAMUM LETTER PHASE-A NSHIEEBAMUM L" + + "ETTER PHASE-A MAEMBAMUM LETTER PHASE-A NYIBAMUM LETTER PHASE-A KAQBAMUM " + + "LETTER PHASE-A NSHABAMUM LETTER PHASE-A VEEBAMUM LETTER PHASE-A LUBAMUM " + + "LETTER PHASE-A NENBAMUM LETTER PHASE-A NAQBAMUM LETTER PHASE-A MBAQBAMUM" + + " LETTER PHASE-B NSHUETBAMUM LETTER PHASE-B TU MAEMGBIEEBAMUM LETTER PHAS" + + "E-B SIEEBAMUM LETTER PHASE-B SET TUBAMUM LETTER PHASE-B LOM NTEUMBAMUM L" + + "ETTER PHASE-B MBA MAELEEBAMUM LETTER PHASE-B KIEEMBAMUM LETTER PHASE-B Y" + + "EURAEBAMUM LETTER PHASE-B MBAARAEBAMUM LETTER PHASE-B KAMBAMUM LETTER PH" + + "ASE-B PEESHIBAMUM LETTER PHASE-B YAFU LEERAEWABAMUM LETTER PHASE-B LAM N" + + "SHUT NYAMBAMUM LETTER PHASE-B NTIEE SHEUOQBAMUM LETTER PHASE-B NDU NJAAB" + + "AMUM LETTER PHASE-B GHEUGHEUAEMBAMUM LETTER PHASE-B PITBAMUM LETTER PHAS" + + "E-B TU NSIEEBAMUM LETTER PHASE-B SHET NJAQBAMUM LETTER PHASE-B SHEUAEQTU" + + "BAMUM LETTER PHASE-B MFON TEUAEQBAMUM LETTER PHASE-B MBIT MBAAKETBAMUM L" + + "ETTER PHASE-B NYI NTEUMBAMUM LETTER PHASE-B KEUPUQBAMUM LETTER PHASE-B G" + + "HEUGHENBAMUM LETTER PHASE-B KEUYEUXBAMUM LETTER PHASE-B LAANAEBAMUM LETT" + + "ER PHASE-B PARUMBAMUM LETTER PHASE-B VEUMBAMUM LETTER PHASE-B NGKINDI MV" + + "OPBAMUM LETTER PHASE-B NGGEU MBUBAMUM LETTER PHASE-B WUAETBAMUM LETTER P" + + "HASE-B SAKEUAEBAMUM LETTER PHASE-B TAAMBAMUM LETTER PHASE-B MEUQBAMUM LE" + + "TTER PHASE-B NGGUOQBAMUM LETTER PHASE-B NGGUOQ LARGEBAMUM LETTER PHASE-B" + + " MFIYAQBAMUM LETTER PHASE-B SUEBAMUM LETTER PHASE-B MBEURIBAMUM LETTER P" + + "HASE-B MONTIEENBAMUM LETTER PHASE-B NYAEMAEBAMUM LETTER PHASE-B PUNGAAMB" + + "AMUM LETTER PHASE-B MEUT NGGEETBAMUM LETTER PHASE-B FEUXBAMUM LETTER PHA" + + "SE-B MBUOQBAMUM LETTER PHASE-B FEEBAMUM LETTER PHASE-B KEUAEMBAMUM LETTE" + + "R PHASE-B MA NJEUAENABAMUM LETTER PHASE-B MA NJUQABAMUM LETTER PHASE-B L" + + "ETBAMUM LETTER PHASE-B NGGAAMBAMUM LETTER PHASE-B NSENBAMUM LETTER PHASE" + + "-B MABAMUM LETTER PHASE-B KIQBAMUM LETTER PHASE-B NGOMBAMUM LETTER PHASE" + + "-C NGKUE MAEMBABAMUM LETTER PHASE-C NZABAMUM LETTER PHASE-C YUMBAMUM LET" + + "TER PHASE-C WANGKUOQBAMUM LETTER PHASE-C NGGENBAMUM LETTER PHASE-C NDEUA" + + "EREEBAMUM LETTER PHASE-C NGKAQBAMUM LETTER PHASE-C GHARAEBAMUM LETTER PH" + + "ASE-C MBEEKEETBAMUM LETTER PHASE-C GBAYIBAMUM LETTER PHASE-C NYIR MKPARA" + + "Q MEUNBAMUM LETTER PHASE-C NTU MBITBAMUM LETTER PHASE-C MBEUMBAMUM LETTE" + + "R PHASE-C PIRIEENBAMUM LETTER PHASE-C NDOMBUBAMUM LETTER PHASE-C MBAA CA" + + "BBAGE-TREEBAMUM LETTER PHASE-C KEUSHEUAEPBAMUM LETTER PHASE-C GHAPBAMUM " + + "LETTER PHASE-C KEUKAQBAMUM LETTER PHASE-C YU MUOMAEBAMUM LETTER PHASE-C " + + "NZEUMBAMUM LETTER PHASE-C MBUEBAMUM LETTER PHASE-C NSEUAENBAMUM LETTER P" + + "HASE-C MBITBAMUM LETTER PHASE-C YEUQBAMUM LETTER PHASE-C KPARAQBAMUM LET" + + "TER PHASE-C KAABAMUM LETTER PHASE-C SEUXBAMUM LETTER PHASE-C NDIDABAMUM " + + "LETTER PHASE-C TAASHAEBAMUM LETTER PHASE-C NJUEQBAMUM LETTER PHASE-C TIT" + + "A YUEBAMUM LETTER PHASE-C SUAETBAMUM LETTER PHASE-C NGGUAEN NYAMBAMUM LE" + + "TTER PHASE-C VEUXBAMUM LETTER PHASE-C NANSANAQBAMUM LETTER PHASE-C MA KE" + + "UAERIBAMUM LETTER PHASE-C NTAABAMUM LETTER PHASE-C NGGUONBAMUM LETTER PH" + + "ASE-C LAPBAMUM LETTER PHASE-C MBIRIEENBAMUM LETTER PHASE-C MGBASAQBAMUM " + + "LETTER PHASE-C NTEUNGBABAMUM LETTER PHASE-C TEUTEUXBAMUM LETTER PHASE-C " + + "NGGUMBAMUM LETTER PHASE-C FUEBAMUM LETTER PHASE-C NDEUTBAMUM LETTER PHAS" + + "E-C NSABAMUM LETTER PHASE-C NSHAQBAMUM LETTER PHASE-C BUNGBAMUM LETTER P" + + "HASE-C VEUAEPENBAMUM LETTER PHASE-C MBERAEBAMUM LETTER PHASE-C RUBAMUM L" + + "ETTER PHASE-C NJAEMBAMUM LETTER PHASE-C LAMBAMUM LETTER PHASE-C TITUAEPB" + + "AMUM LETTER PHASE-C NSUOT NGOMBAMUM LETTER PHASE-C NJEEEEBAMUM LETTER PH" + + "ASE-C KETBAMUM LETTER PHASE-C NGGUBAMUM LETTER PHASE-C MAESIBAMUM LETTER" + + " PHASE-C MBUAEMBAMUM LETTER PHASE-C LUBAMUM LETTER PHASE-C KUTBAMUM LETT" + + "ER PHASE-C NJAMBAMUM LETTER PHASE-C NGOMBAMUM LETTER PHASE-C WUPBAMUM LE" + + "TTER PHASE-C NGGUEETBAMUM LETTER PHASE-C NSOMBAMUM LETTER PHASE-C NTENBA" + + "MUM LETTER PHASE-C KUOP NKAARAEBAMUM LETTER PHASE-C NSUNBAMUM LETTER PHA" + + "SE-C NDAMBAMUM LETTER PHASE-C MA NSIEEBAMUM LETTER PHASE-C YAABAMUM LETT" + + "ER PHASE-C NDAPBAMUM LETTER PHASE-C SHUEQBAMUM LETTER PHASE-C SETFONBAMU" + + "M LETTER PHASE-C MBIBAMUM LETTER PHASE-C MAEMBABAMUM LETTER PHASE-C MBAN" + + "YIBAMUM LETTER PHASE-C KEUSEUXBAMUM LETTER PHASE-C MBEUXBAMUM LETTER PHA") + ("" + + "SE-C KEUMBAMUM LETTER PHASE-C MBAA PICKETBAMUM LETTER PHASE-C YUWOQBAMUM" + + " LETTER PHASE-C NJEUXBAMUM LETTER PHASE-C MIEEBAMUM LETTER PHASE-C MUAEB" + + "AMUM LETTER PHASE-C SHIQBAMUM LETTER PHASE-C KEN LAWBAMUM LETTER PHASE-C" + + " KEN FATIGUEBAMUM LETTER PHASE-C NGAQBAMUM LETTER PHASE-C NAQBAMUM LETTE" + + "R PHASE-C LIQBAMUM LETTER PHASE-C PINBAMUM LETTER PHASE-C PENBAMUM LETTE" + + "R PHASE-C TETBAMUM LETTER PHASE-D MBUOBAMUM LETTER PHASE-D WAPBAMUM LETT" + + "ER PHASE-D NJIBAMUM LETTER PHASE-D MFONBAMUM LETTER PHASE-D NJIEEBAMUM L" + + "ETTER PHASE-D LIEEBAMUM LETTER PHASE-D NJEUTBAMUM LETTER PHASE-D NSHEEBA" + + "MUM LETTER PHASE-D NGGAAMAEBAMUM LETTER PHASE-D NYAMBAMUM LETTER PHASE-D" + + " WUAENBAMUM LETTER PHASE-D NGKUNBAMUM LETTER PHASE-D SHEEBAMUM LETTER PH" + + "ASE-D NGKAPBAMUM LETTER PHASE-D KEUAETMEUNBAMUM LETTER PHASE-D TEUTBAMUM" + + " LETTER PHASE-D SHEUAEBAMUM LETTER PHASE-D NJAPBAMUM LETTER PHASE-D SUEB" + + "AMUM LETTER PHASE-D KETBAMUM LETTER PHASE-D YAEMMAEBAMUM LETTER PHASE-D " + + "KUOMBAMUM LETTER PHASE-D SAPBAMUM LETTER PHASE-D MFEUTBAMUM LETTER PHASE" + + "-D NDEUXBAMUM LETTER PHASE-D MALEERIBAMUM LETTER PHASE-D MEUTBAMUM LETTE" + + "R PHASE-D SEUAEQBAMUM LETTER PHASE-D YENBAMUM LETTER PHASE-D NJEUAEMBAMU" + + "M LETTER PHASE-D KEUOT MBUAEBAMUM LETTER PHASE-D NGKEURIBAMUM LETTER PHA" + + "SE-D TUBAMUM LETTER PHASE-D GHAABAMUM LETTER PHASE-D NGKYEEBAMUM LETTER " + + "PHASE-D FEUFEUAETBAMUM LETTER PHASE-D NDEEBAMUM LETTER PHASE-D MGBOFUMBA" + + "MUM LETTER PHASE-D LEUAEPBAMUM LETTER PHASE-D NDONBAMUM LETTER PHASE-D M" + + "ONIBAMUM LETTER PHASE-D MGBEUNBAMUM LETTER PHASE-D PUUTBAMUM LETTER PHAS" + + "E-D MGBIEEBAMUM LETTER PHASE-D MFOBAMUM LETTER PHASE-D LUMBAMUM LETTER P" + + "HASE-D NSIEEPBAMUM LETTER PHASE-D MBAABAMUM LETTER PHASE-D KWAETBAMUM LE" + + "TTER PHASE-D NYETBAMUM LETTER PHASE-D TEUAENBAMUM LETTER PHASE-D SOTBAMU" + + "M LETTER PHASE-D YUWOQBAMUM LETTER PHASE-D KEUMBAMUM LETTER PHASE-D RAEM" + + "BAMUM LETTER PHASE-D TEEEEBAMUM LETTER PHASE-D NGKEUAEQBAMUM LETTER PHAS" + + "E-D MFEUAEBAMUM LETTER PHASE-D NSIEETBAMUM LETTER PHASE-D KEUPBAMUM LETT" + + "ER PHASE-D PIPBAMUM LETTER PHASE-D PEUTAEBAMUM LETTER PHASE-D NYUEBAMUM " + + "LETTER PHASE-D LETBAMUM LETTER PHASE-D NGGAAMBAMUM LETTER PHASE-D MFIEEB" + + "AMUM LETTER PHASE-D NGGWAENBAMUM LETTER PHASE-D YUOMBAMUM LETTER PHASE-D" + + " PAPBAMUM LETTER PHASE-D YUOPBAMUM LETTER PHASE-D NDAMBAMUM LETTER PHASE" + + "-D NTEUMBAMUM LETTER PHASE-D SUAEBAMUM LETTER PHASE-D KUNBAMUM LETTER PH" + + "ASE-D NGGEUXBAMUM LETTER PHASE-D NGKIEEBAMUM LETTER PHASE-D TUOTBAMUM LE" + + "TTER PHASE-D MEUNBAMUM LETTER PHASE-D KUQBAMUM LETTER PHASE-D NSUMBAMUM " + + "LETTER PHASE-D TEUNBAMUM LETTER PHASE-D MAENJETBAMUM LETTER PHASE-D NGGA" + + "PBAMUM LETTER PHASE-D LEUMBAMUM LETTER PHASE-D NGGUOMBAMUM LETTER PHASE-" + + "D NSHUTBAMUM LETTER PHASE-D NJUEQBAMUM LETTER PHASE-D GHEUAEBAMUM LETTER" + + " PHASE-D KUBAMUM LETTER PHASE-D REN OLDBAMUM LETTER PHASE-D TAEBAMUM LET" + + "TER PHASE-D TOQBAMUM LETTER PHASE-D NYIBAMUM LETTER PHASE-D RIIBAMUM LET" + + "TER PHASE-D LEEEEBAMUM LETTER PHASE-D MEEEEBAMUM LETTER PHASE-D MBAMUM L" + + "ETTER PHASE-D SUUBAMUM LETTER PHASE-D MUBAMUM LETTER PHASE-D SHIIBAMUM L" + + "ETTER PHASE-D SHEUXBAMUM LETTER PHASE-D KYEEBAMUM LETTER PHASE-D NUBAMUM" + + " LETTER PHASE-D SHUBAMUM LETTER PHASE-D NTEEBAMUM LETTER PHASE-D PEEBAMU" + + "M LETTER PHASE-D NIBAMUM LETTER PHASE-D SHOQBAMUM LETTER PHASE-D PUQBAMU" + + "M LETTER PHASE-D MVOPBAMUM LETTER PHASE-D LOQBAMUM LETTER PHASE-D REN MU" + + "CHBAMUM LETTER PHASE-D TIBAMUM LETTER PHASE-D NTUUBAMUM LETTER PHASE-D M" + + "BAA SEVENBAMUM LETTER PHASE-D SAQBAMUM LETTER PHASE-D FAABAMUM LETTER PH" + + "ASE-E NDAPBAMUM LETTER PHASE-E TOONBAMUM LETTER PHASE-E MBEUMBAMUM LETTE" + + "R PHASE-E LAPBAMUM LETTER PHASE-E VOMBAMUM LETTER PHASE-E LOONBAMUM LETT" + + "ER PHASE-E PAABAMUM LETTER PHASE-E SOMBAMUM LETTER PHASE-E RAQBAMUM LETT" + + "ER PHASE-E NSHUOPBAMUM LETTER PHASE-E NDUNBAMUM LETTER PHASE-E PUAEBAMUM" + + " LETTER PHASE-E TAMBAMUM LETTER PHASE-E NGKABAMUM LETTER PHASE-E KPEUXBA" + + "MUM LETTER PHASE-E WUOBAMUM LETTER PHASE-E SEEBAMUM LETTER PHASE-E NGGEU" + + "AETBAMUM LETTER PHASE-E PAAMBAMUM LETTER PHASE-E TOOBAMUM LETTER PHASE-E" + + " KUOPBAMUM LETTER PHASE-E LOMBAMUM LETTER PHASE-E NSHIEEBAMUM LETTER PHA" + + "SE-E NGOPBAMUM LETTER PHASE-E MAEMBAMUM LETTER PHASE-E NGKEUXBAMUM LETTE" + + "R PHASE-E NGOQBAMUM LETTER PHASE-E NSHUEBAMUM LETTER PHASE-E RIMGBABAMUM" + + " LETTER PHASE-E NJEUXBAMUM LETTER PHASE-E PEEMBAMUM LETTER PHASE-E SAABA" + + "MUM LETTER PHASE-E NGGURAEBAMUM LETTER PHASE-E MGBABAMUM LETTER PHASE-E " + + "GHEUXBAMUM LETTER PHASE-E NGKEUAEMBAMUM LETTER PHASE-E NJAEMLIBAMUM LETT" + + "ER PHASE-E MAPBAMUM LETTER PHASE-E LOOTBAMUM LETTER PHASE-E NGGEEEEBAMUM" + + " LETTER PHASE-E NDIQBAMUM LETTER PHASE-E TAEN NTEUMBAMUM LETTER PHASE-E " + + "SETBAMUM LETTER PHASE-E PUMBAMUM LETTER PHASE-E NDAA SOFTNESSBAMUM LETTE" + + "R PHASE-E NGGUAESHAE NYAMBAMUM LETTER PHASE-E YIEEBAMUM LETTER PHASE-E G") + ("" + + "HEUNBAMUM LETTER PHASE-E TUAEBAMUM LETTER PHASE-E YEUAEBAMUM LETTER PHAS" + + "E-E POBAMUM LETTER PHASE-E TUMAEBAMUM LETTER PHASE-E KEUAEBAMUM LETTER P" + + "HASE-E SUAENBAMUM LETTER PHASE-E TEUAEQBAMUM LETTER PHASE-E VEUAEBAMUM L" + + "ETTER PHASE-E WEUXBAMUM LETTER PHASE-E LAAMBAMUM LETTER PHASE-E PUBAMUM " + + "LETTER PHASE-E TAAQBAMUM LETTER PHASE-E GHAAMAEBAMUM LETTER PHASE-E NGEU" + + "REUTBAMUM LETTER PHASE-E SHEUAEQBAMUM LETTER PHASE-E MGBENBAMUM LETTER P" + + "HASE-E MBEEBAMUM LETTER PHASE-E NZAQBAMUM LETTER PHASE-E NKOMBAMUM LETTE" + + "R PHASE-E GBETBAMUM LETTER PHASE-E TUMBAMUM LETTER PHASE-E KUETBAMUM LET" + + "TER PHASE-E YAPBAMUM LETTER PHASE-E NYI CLEAVERBAMUM LETTER PHASE-E YITB" + + "AMUM LETTER PHASE-E MFEUQBAMUM LETTER PHASE-E NDIAQBAMUM LETTER PHASE-E " + + "PIEEQBAMUM LETTER PHASE-E YUEQBAMUM LETTER PHASE-E LEUAEMBAMUM LETTER PH" + + "ASE-E FUEBAMUM LETTER PHASE-E GBEUXBAMUM LETTER PHASE-E NGKUPBAMUM LETTE" + + "R PHASE-E KETBAMUM LETTER PHASE-E MAEBAMUM LETTER PHASE-E NGKAAMIBAMUM L" + + "ETTER PHASE-E GHETBAMUM LETTER PHASE-E FABAMUM LETTER PHASE-E NTUMBAMUM " + + "LETTER PHASE-E PEUTBAMUM LETTER PHASE-E YEUMBAMUM LETTER PHASE-E NGGEUAE" + + "BAMUM LETTER PHASE-E NYI BETWEENBAMUM LETTER PHASE-E NZUQBAMUM LETTER PH" + + "ASE-E POONBAMUM LETTER PHASE-E MIEEBAMUM LETTER PHASE-E FUETBAMUM LETTER" + + " PHASE-E NAEBAMUM LETTER PHASE-E MUAEBAMUM LETTER PHASE-E GHEUAEBAMUM LE" + + "TTER PHASE-E FU IBAMUM LETTER PHASE-E MVIBAMUM LETTER PHASE-E PUAQBAMUM " + + "LETTER PHASE-E NGKUMBAMUM LETTER PHASE-E KUTBAMUM LETTER PHASE-E PIETBAM" + + "UM LETTER PHASE-E NTAPBAMUM LETTER PHASE-E YEUAETBAMUM LETTER PHASE-E NG" + + "GUPBAMUM LETTER PHASE-E PA PEOPLEBAMUM LETTER PHASE-E FU CALLBAMUM LETTE" + + "R PHASE-E FOMBAMUM LETTER PHASE-E NJEEBAMUM LETTER PHASE-E ABAMUM LETTER" + + " PHASE-E TOQBAMUM LETTER PHASE-E OBAMUM LETTER PHASE-E IBAMUM LETTER PHA" + + "SE-E LAQBAMUM LETTER PHASE-E PA PLURALBAMUM LETTER PHASE-E TAABAMUM LETT" + + "ER PHASE-E TAQBAMUM LETTER PHASE-E NDAA MY HOUSEBAMUM LETTER PHASE-E SHI" + + "QBAMUM LETTER PHASE-E YEUXBAMUM LETTER PHASE-E NGUAEBAMUM LETTER PHASE-E" + + " YUAENBAMUM LETTER PHASE-E YOQ SWIMMINGBAMUM LETTER PHASE-E YOQ COVERBAM" + + "UM LETTER PHASE-E YUQBAMUM LETTER PHASE-E YUNBAMUM LETTER PHASE-E KEUXBA" + + "MUM LETTER PHASE-E PEUXBAMUM LETTER PHASE-E NJEE EPOCHBAMUM LETTER PHASE" + + "-E PUEBAMUM LETTER PHASE-E WUEBAMUM LETTER PHASE-E FEEBAMUM LETTER PHASE" + + "-E VEEBAMUM LETTER PHASE-E LUBAMUM LETTER PHASE-E MIBAMUM LETTER PHASE-E" + + " REUXBAMUM LETTER PHASE-E RAEBAMUM LETTER PHASE-E NGUAETBAMUM LETTER PHA" + + "SE-E NGABAMUM LETTER PHASE-E SHOBAMUM LETTER PHASE-E SHOQBAMUM LETTER PH" + + "ASE-E FU REMEDYBAMUM LETTER PHASE-E NABAMUM LETTER PHASE-E PIBAMUM LETTE" + + "R PHASE-E LOQBAMUM LETTER PHASE-E KOBAMUM LETTER PHASE-E MENBAMUM LETTER" + + " PHASE-E MABAMUM LETTER PHASE-E MAQBAMUM LETTER PHASE-E TEUBAMUM LETTER " + + "PHASE-E KIBAMUM LETTER PHASE-E MONBAMUM LETTER PHASE-E TENBAMUM LETTER P" + + "HASE-E FAQBAMUM LETTER PHASE-E GHOMBAMUM LETTER PHASE-F KABAMUM LETTER P" + + "HASE-F UBAMUM LETTER PHASE-F KUBAMUM LETTER PHASE-F EEBAMUM LETTER PHASE" + + "-F REEBAMUM LETTER PHASE-F TAEBAMUM LETTER PHASE-F NYIBAMUM LETTER PHASE" + + "-F LABAMUM LETTER PHASE-F RIIBAMUM LETTER PHASE-F RIEEBAMUM LETTER PHASE" + + "-F MEEEEBAMUM LETTER PHASE-F TAABAMUM LETTER PHASE-F NDAABAMUM LETTER PH" + + "ASE-F NJAEMBAMUM LETTER PHASE-F MBAMUM LETTER PHASE-F SUUBAMUM LETTER PH" + + "ASE-F SHIIBAMUM LETTER PHASE-F SIBAMUM LETTER PHASE-F SEUXBAMUM LETTER P" + + "HASE-F KYEEBAMUM LETTER PHASE-F KETBAMUM LETTER PHASE-F NUAEBAMUM LETTER" + + " PHASE-F NUBAMUM LETTER PHASE-F NJUAEBAMUM LETTER PHASE-F YOQBAMUM LETTE" + + "R PHASE-F SHUBAMUM LETTER PHASE-F YABAMUM LETTER PHASE-F NSHABAMUM LETTE" + + "R PHASE-F PEUXBAMUM LETTER PHASE-F NTEEBAMUM LETTER PHASE-F WUEBAMUM LET" + + "TER PHASE-F PEEBAMUM LETTER PHASE-F RUBAMUM LETTER PHASE-F NIBAMUM LETTE" + + "R PHASE-F REUXBAMUM LETTER PHASE-F KENBAMUM LETTER PHASE-F NGKWAENBAMUM " + + "LETTER PHASE-F NGGABAMUM LETTER PHASE-F SHOBAMUM LETTER PHASE-F PUAEBAMU" + + "M LETTER PHASE-F FOMBAMUM LETTER PHASE-F WABAMUM LETTER PHASE-F LIBAMUM " + + "LETTER PHASE-F LOQBAMUM LETTER PHASE-F KOBAMUM LETTER PHASE-F MBENBAMUM " + + "LETTER PHASE-F RENBAMUM LETTER PHASE-F MABAMUM LETTER PHASE-F MOBAMUM LE" + + "TTER PHASE-F MBAABAMUM LETTER PHASE-F TETBAMUM LETTER PHASE-F KPABAMUM L" + + "ETTER PHASE-F SAMBABAMUM LETTER PHASE-F VUEQMRO LETTER TAMRO LETTER NGIM" + + "RO LETTER YOMRO LETTER MIMMRO LETTER BAMRO LETTER DAMRO LETTER AMRO LETT" + + "ER PHIMRO LETTER KHAIMRO LETTER HAOMRO LETTER DAIMRO LETTER CHUMRO LETTE" + + "R KEAAEMRO LETTER OLMRO LETTER MAEMMRO LETTER NINMRO LETTER PAMRO LETTER" + + " OOMRO LETTER OMRO LETTER ROMRO LETTER SHIMRO LETTER THEAMRO LETTER EAMR" + + "O LETTER WAMRO LETTER EMRO LETTER KOMRO LETTER LANMRO LETTER LAMRO LETTE" + + "R HAIMRO LETTER RIMRO LETTER TEKMRO DIGIT ZEROMRO DIGIT ONEMRO DIGIT TWO" + + "MRO DIGIT THREEMRO DIGIT FOURMRO DIGIT FIVEMRO DIGIT SIXMRO DIGIT SEVENM") + ("" + + "RO DIGIT EIGHTMRO DIGIT NINEMRO DANDAMRO DOUBLE DANDABASSA VAH LETTER EN" + + "NIBASSA VAH LETTER KABASSA VAH LETTER SEBASSA VAH LETTER FABASSA VAH LET" + + "TER MBEBASSA VAH LETTER YIEBASSA VAH LETTER GAHBASSA VAH LETTER DHIIBASS" + + "A VAH LETTER KPAHBASSA VAH LETTER JOBASSA VAH LETTER HWAHBASSA VAH LETTE" + + "R WABASSA VAH LETTER ZOBASSA VAH LETTER GBUBASSA VAH LETTER DOBASSA VAH " + + "LETTER CEBASSA VAH LETTER UWUBASSA VAH LETTER TOBASSA VAH LETTER BABASSA" + + " VAH LETTER VUBASSA VAH LETTER YEINBASSA VAH LETTER PABASSA VAH LETTER W" + + "ADDABASSA VAH LETTER ABASSA VAH LETTER OBASSA VAH LETTER OOBASSA VAH LET" + + "TER UBASSA VAH LETTER EEBASSA VAH LETTER EBASSA VAH LETTER IBASSA VAH CO" + + "MBINING HIGH TONEBASSA VAH COMBINING LOW TONEBASSA VAH COMBINING MID TON" + + "EBASSA VAH COMBINING LOW-MID TONEBASSA VAH COMBINING HIGH-LOW TONEBASSA " + + "VAH FULL STOPPAHAWH HMONG VOWEL KEEBPAHAWH HMONG VOWEL KEEVPAHAWH HMONG " + + "VOWEL KIBPAHAWH HMONG VOWEL KIVPAHAWH HMONG VOWEL KAUBPAHAWH HMONG VOWEL" + + " KAUVPAHAWH HMONG VOWEL KUBPAHAWH HMONG VOWEL KUVPAHAWH HMONG VOWEL KEBP" + + "AHAWH HMONG VOWEL KEVPAHAWH HMONG VOWEL KAIBPAHAWH HMONG VOWEL KAIVPAHAW" + + "H HMONG VOWEL KOOBPAHAWH HMONG VOWEL KOOVPAHAWH HMONG VOWEL KAWBPAHAWH H" + + "MONG VOWEL KAWVPAHAWH HMONG VOWEL KUABPAHAWH HMONG VOWEL KUAVPAHAWH HMON" + + "G VOWEL KOBPAHAWH HMONG VOWEL KOVPAHAWH HMONG VOWEL KIABPAHAWH HMONG VOW" + + "EL KIAVPAHAWH HMONG VOWEL KABPAHAWH HMONG VOWEL KAVPAHAWH HMONG VOWEL KW" + + "BPAHAWH HMONG VOWEL KWVPAHAWH HMONG VOWEL KAABPAHAWH HMONG VOWEL KAAVPAH" + + "AWH HMONG CONSONANT VAUPAHAWH HMONG CONSONANT NTSAUPAHAWH HMONG CONSONAN" + + "T LAUPAHAWH HMONG CONSONANT HAUPAHAWH HMONG CONSONANT NLAUPAHAWH HMONG C" + + "ONSONANT RAUPAHAWH HMONG CONSONANT NKAUPAHAWH HMONG CONSONANT QHAUPAHAWH" + + " HMONG CONSONANT YAUPAHAWH HMONG CONSONANT HLAUPAHAWH HMONG CONSONANT MA" + + "UPAHAWH HMONG CONSONANT CHAUPAHAWH HMONG CONSONANT NCHAUPAHAWH HMONG CON" + + "SONANT HNAUPAHAWH HMONG CONSONANT PLHAUPAHAWH HMONG CONSONANT NTHAUPAHAW" + + "H HMONG CONSONANT NAUPAHAWH HMONG CONSONANT AUPAHAWH HMONG CONSONANT XAU" + + "PAHAWH HMONG CONSONANT CAUPAHAWH HMONG MARK CIM TUBPAHAWH HMONG MARK CIM" + + " SOPAHAWH HMONG MARK CIM KESPAHAWH HMONG MARK CIM KHAVPAHAWH HMONG MARK " + + "CIM SUAMPAHAWH HMONG MARK CIM HOMPAHAWH HMONG MARK CIM TAUMPAHAWH HMONG " + + "SIGN VOS THOMPAHAWH HMONG SIGN VOS TSHAB CEEBPAHAWH HMONG SIGN CIM CHEEM" + + "PAHAWH HMONG SIGN VOS THIABPAHAWH HMONG SIGN VOS FEEMPAHAWH HMONG SIGN X" + + "YEEM NTXIVPAHAWH HMONG SIGN XYEEM RHOPAHAWH HMONG SIGN XYEEM TOVPAHAWH H" + + "MONG SIGN XYEEM FAIBPAHAWH HMONG SIGN VOS SEEVPAHAWH HMONG SIGN MEEJ SUA" + + "BPAHAWH HMONG SIGN VOS NRUAPAHAWH HMONG SIGN IB YAMPAHAWH HMONG SIGN XAU" + + "SPAHAWH HMONG SIGN CIM TSOV ROGPAHAWH HMONG DIGIT ZEROPAHAWH HMONG DIGIT" + + " ONEPAHAWH HMONG DIGIT TWOPAHAWH HMONG DIGIT THREEPAHAWH HMONG DIGIT FOU" + + "RPAHAWH HMONG DIGIT FIVEPAHAWH HMONG DIGIT SIXPAHAWH HMONG DIGIT SEVENPA" + + "HAWH HMONG DIGIT EIGHTPAHAWH HMONG DIGIT NINEPAHAWH HMONG NUMBER TENSPAH" + + "AWH HMONG NUMBER HUNDREDSPAHAWH HMONG NUMBER TEN THOUSANDSPAHAWH HMONG N" + + "UMBER MILLIONSPAHAWH HMONG NUMBER HUNDRED MILLIONSPAHAWH HMONG NUMBER TE" + + "N BILLIONSPAHAWH HMONG NUMBER TRILLIONSPAHAWH HMONG SIGN VOS LUBPAHAWH H" + + "MONG SIGN XYOOPAHAWH HMONG SIGN HLIPAHAWH HMONG SIGN THIRD-STAGE HLIPAHA" + + "WH HMONG SIGN ZWJ THAJPAHAWH HMONG SIGN HNUBPAHAWH HMONG SIGN NQIGPAHAWH" + + " HMONG SIGN XIABPAHAWH HMONG SIGN NTUJPAHAWH HMONG SIGN AVPAHAWH HMONG S" + + "IGN TXHEEJ CEEVPAHAWH HMONG SIGN MEEJ TSEEBPAHAWH HMONG SIGN TAUPAHAWH H" + + "MONG SIGN LOSPAHAWH HMONG SIGN MUSPAHAWH HMONG SIGN CIM HAIS LUS NTOG NT" + + "OGPAHAWH HMONG SIGN CIM CUAM TSHOOJPAHAWH HMONG SIGN CIM TXWVPAHAWH HMON" + + "G SIGN CIM TXWV CHWVPAHAWH HMONG SIGN CIM PUB DAWBPAHAWH HMONG SIGN CIM " + + "NRES TOSPAHAWH HMONG CLAN SIGN TSHEEJPAHAWH HMONG CLAN SIGN YEEGPAHAWH H" + + "MONG CLAN SIGN LISPAHAWH HMONG CLAN SIGN LAUJPAHAWH HMONG CLAN SIGN XYOO" + + "JPAHAWH HMONG CLAN SIGN KOOPAHAWH HMONG CLAN SIGN HAWJPAHAWH HMONG CLAN " + + "SIGN MUASPAHAWH HMONG CLAN SIGN THOJPAHAWH HMONG CLAN SIGN TSABPAHAWH HM" + + "ONG CLAN SIGN PHABPAHAWH HMONG CLAN SIGN KHABPAHAWH HMONG CLAN SIGN HAMP" + + "AHAWH HMONG CLAN SIGN VAJPAHAWH HMONG CLAN SIGN FAJPAHAWH HMONG CLAN SIG" + + "N YAJPAHAWH HMONG CLAN SIGN TSWBPAHAWH HMONG CLAN SIGN KWMPAHAWH HMONG C" + + "LAN SIGN VWJMIAO LETTER PAMIAO LETTER BAMIAO LETTER YI PAMIAO LETTER PLA" + + "MIAO LETTER MAMIAO LETTER MHAMIAO LETTER ARCHAIC MAMIAO LETTER FAMIAO LE" + + "TTER VAMIAO LETTER VFAMIAO LETTER TAMIAO LETTER DAMIAO LETTER YI TTAMIAO" + + " LETTER YI TAMIAO LETTER TTAMIAO LETTER DDAMIAO LETTER NAMIAO LETTER NHA" + + "MIAO LETTER YI NNAMIAO LETTER ARCHAIC NAMIAO LETTER NNAMIAO LETTER NNHAM" + + "IAO LETTER LAMIAO LETTER LYAMIAO LETTER LHAMIAO LETTER LHYAMIAO LETTER T" + + "LHAMIAO LETTER DLHAMIAO LETTER TLHYAMIAO LETTER DLHYAMIAO LETTER KAMIAO " + + "LETTER GAMIAO LETTER YI KAMIAO LETTER QAMIAO LETTER QGAMIAO LETTER NGAMI") + ("" + + "AO LETTER NGHAMIAO LETTER ARCHAIC NGAMIAO LETTER HAMIAO LETTER XAMIAO LE" + + "TTER GHAMIAO LETTER GHHAMIAO LETTER TSSAMIAO LETTER DZZAMIAO LETTER NYAM" + + "IAO LETTER NYHAMIAO LETTER TSHAMIAO LETTER DZHAMIAO LETTER YI TSHAMIAO L" + + "ETTER YI DZHAMIAO LETTER REFORMED TSHAMIAO LETTER SHAMIAO LETTER SSAMIAO" + + " LETTER ZHAMIAO LETTER ZSHAMIAO LETTER TSAMIAO LETTER DZAMIAO LETTER YI " + + "TSAMIAO LETTER SAMIAO LETTER ZAMIAO LETTER ZSAMIAO LETTER ZZAMIAO LETTER" + + " ZZSAMIAO LETTER ARCHAIC ZZAMIAO LETTER ZZYAMIAO LETTER ZZSYAMIAO LETTER" + + " WAMIAO LETTER AHMIAO LETTER HHAMIAO LETTER NASALIZATIONMIAO SIGN ASPIRA" + + "TIONMIAO SIGN REFORMED VOICINGMIAO SIGN REFORMED ASPIRATIONMIAO VOWEL SI" + + "GN AMIAO VOWEL SIGN AAMIAO VOWEL SIGN AHHMIAO VOWEL SIGN ANMIAO VOWEL SI" + + "GN ANGMIAO VOWEL SIGN OMIAO VOWEL SIGN OOMIAO VOWEL SIGN WOMIAO VOWEL SI" + + "GN WMIAO VOWEL SIGN EMIAO VOWEL SIGN ENMIAO VOWEL SIGN ENGMIAO VOWEL SIG" + + "N OEYMIAO VOWEL SIGN IMIAO VOWEL SIGN IAMIAO VOWEL SIGN IANMIAO VOWEL SI" + + "GN IANGMIAO VOWEL SIGN IOMIAO VOWEL SIGN IEMIAO VOWEL SIGN IIMIAO VOWEL " + + "SIGN IUMIAO VOWEL SIGN INGMIAO VOWEL SIGN UMIAO VOWEL SIGN UAMIAO VOWEL " + + "SIGN UANMIAO VOWEL SIGN UANGMIAO VOWEL SIGN UUMIAO VOWEL SIGN UEIMIAO VO" + + "WEL SIGN UNGMIAO VOWEL SIGN YMIAO VOWEL SIGN YIMIAO VOWEL SIGN AEMIAO VO" + + "WEL SIGN AEEMIAO VOWEL SIGN ERRMIAO VOWEL SIGN ROUNDED ERRMIAO VOWEL SIG" + + "N ERMIAO VOWEL SIGN ROUNDED ERMIAO VOWEL SIGN AIMIAO VOWEL SIGN EIMIAO V" + + "OWEL SIGN AUMIAO VOWEL SIGN OUMIAO VOWEL SIGN NMIAO VOWEL SIGN NGMIAO TO" + + "NE RIGHTMIAO TONE TOP RIGHTMIAO TONE ABOVEMIAO TONE BELOWMIAO LETTER TON" + + "E-2MIAO LETTER TONE-3MIAO LETTER TONE-4MIAO LETTER TONE-5MIAO LETTER TON" + + "E-6MIAO LETTER TONE-7MIAO LETTER TONE-8MIAO LETTER REFORMED TONE-1MIAO L" + + "ETTER REFORMED TONE-2MIAO LETTER REFORMED TONE-4MIAO LETTER REFORMED TON" + + "E-5MIAO LETTER REFORMED TONE-6MIAO LETTER REFORMED TONE-8TANGUT ITERATIO" + + "N MARKNUSHU ITERATION MARKTANGUT COMPONENT-001TANGUT COMPONENT-002TANGUT" + + " COMPONENT-003TANGUT COMPONENT-004TANGUT COMPONENT-005TANGUT COMPONENT-0" + + "06TANGUT COMPONENT-007TANGUT COMPONENT-008TANGUT COMPONENT-009TANGUT COM" + + "PONENT-010TANGUT COMPONENT-011TANGUT COMPONENT-012TANGUT COMPONENT-013TA" + + "NGUT COMPONENT-014TANGUT COMPONENT-015TANGUT COMPONENT-016TANGUT COMPONE" + + "NT-017TANGUT COMPONENT-018TANGUT COMPONENT-019TANGUT COMPONENT-020TANGUT" + + " COMPONENT-021TANGUT COMPONENT-022TANGUT COMPONENT-023TANGUT COMPONENT-0" + + "24TANGUT COMPONENT-025TANGUT COMPONENT-026TANGUT COMPONENT-027TANGUT COM" + + "PONENT-028TANGUT COMPONENT-029TANGUT COMPONENT-030TANGUT COMPONENT-031TA" + + "NGUT COMPONENT-032TANGUT COMPONENT-033TANGUT COMPONENT-034TANGUT COMPONE" + + "NT-035TANGUT COMPONENT-036TANGUT COMPONENT-037TANGUT COMPONENT-038TANGUT" + + " COMPONENT-039TANGUT COMPONENT-040TANGUT COMPONENT-041TANGUT COMPONENT-0" + + "42TANGUT COMPONENT-043TANGUT COMPONENT-044TANGUT COMPONENT-045TANGUT COM" + + "PONENT-046TANGUT COMPONENT-047TANGUT COMPONENT-048TANGUT COMPONENT-049TA" + + "NGUT COMPONENT-050TANGUT COMPONENT-051TANGUT COMPONENT-052TANGUT COMPONE" + + "NT-053TANGUT COMPONENT-054TANGUT COMPONENT-055TANGUT COMPONENT-056TANGUT" + + " COMPONENT-057TANGUT COMPONENT-058TANGUT COMPONENT-059TANGUT COMPONENT-0" + + "60TANGUT COMPONENT-061TANGUT COMPONENT-062TANGUT COMPONENT-063TANGUT COM" + + "PONENT-064TANGUT COMPONENT-065TANGUT COMPONENT-066TANGUT COMPONENT-067TA" + + "NGUT COMPONENT-068TANGUT COMPONENT-069TANGUT COMPONENT-070TANGUT COMPONE" + + "NT-071TANGUT COMPONENT-072TANGUT COMPONENT-073TANGUT COMPONENT-074TANGUT" + + " COMPONENT-075TANGUT COMPONENT-076TANGUT COMPONENT-077TANGUT COMPONENT-0" + + "78TANGUT COMPONENT-079TANGUT COMPONENT-080TANGUT COMPONENT-081TANGUT COM" + + "PONENT-082TANGUT COMPONENT-083TANGUT COMPONENT-084TANGUT COMPONENT-085TA" + + "NGUT COMPONENT-086TANGUT COMPONENT-087TANGUT COMPONENT-088TANGUT COMPONE" + + "NT-089TANGUT COMPONENT-090TANGUT COMPONENT-091TANGUT COMPONENT-092TANGUT" + + " COMPONENT-093TANGUT COMPONENT-094TANGUT COMPONENT-095TANGUT COMPONENT-0" + + "96TANGUT COMPONENT-097TANGUT COMPONENT-098TANGUT COMPONENT-099TANGUT COM" + + "PONENT-100TANGUT COMPONENT-101TANGUT COMPONENT-102TANGUT COMPONENT-103TA" + + "NGUT COMPONENT-104TANGUT COMPONENT-105TANGUT COMPONENT-106TANGUT COMPONE" + + "NT-107TANGUT COMPONENT-108TANGUT COMPONENT-109TANGUT COMPONENT-110TANGUT" + + " COMPONENT-111TANGUT COMPONENT-112TANGUT COMPONENT-113TANGUT COMPONENT-1" + + "14TANGUT COMPONENT-115TANGUT COMPONENT-116TANGUT COMPONENT-117TANGUT COM" + + "PONENT-118TANGUT COMPONENT-119TANGUT COMPONENT-120TANGUT COMPONENT-121TA" + + "NGUT COMPONENT-122TANGUT COMPONENT-123TANGUT COMPONENT-124TANGUT COMPONE" + + "NT-125TANGUT COMPONENT-126TANGUT COMPONENT-127TANGUT COMPONENT-128TANGUT" + + " COMPONENT-129TANGUT COMPONENT-130TANGUT COMPONENT-131TANGUT COMPONENT-1" + + "32TANGUT COMPONENT-133TANGUT COMPONENT-134TANGUT COMPONENT-135TANGUT COM" + + "PONENT-136TANGUT COMPONENT-137TANGUT COMPONENT-138TANGUT COMPONENT-139TA") + ("" + + "NGUT COMPONENT-140TANGUT COMPONENT-141TANGUT COMPONENT-142TANGUT COMPONE" + + "NT-143TANGUT COMPONENT-144TANGUT COMPONENT-145TANGUT COMPONENT-146TANGUT" + + " COMPONENT-147TANGUT COMPONENT-148TANGUT COMPONENT-149TANGUT COMPONENT-1" + + "50TANGUT COMPONENT-151TANGUT COMPONENT-152TANGUT COMPONENT-153TANGUT COM" + + "PONENT-154TANGUT COMPONENT-155TANGUT COMPONENT-156TANGUT COMPONENT-157TA" + + "NGUT COMPONENT-158TANGUT COMPONENT-159TANGUT COMPONENT-160TANGUT COMPONE" + + "NT-161TANGUT COMPONENT-162TANGUT COMPONENT-163TANGUT COMPONENT-164TANGUT" + + " COMPONENT-165TANGUT COMPONENT-166TANGUT COMPONENT-167TANGUT COMPONENT-1" + + "68TANGUT COMPONENT-169TANGUT COMPONENT-170TANGUT COMPONENT-171TANGUT COM" + + "PONENT-172TANGUT COMPONENT-173TANGUT COMPONENT-174TANGUT COMPONENT-175TA" + + "NGUT COMPONENT-176TANGUT COMPONENT-177TANGUT COMPONENT-178TANGUT COMPONE" + + "NT-179TANGUT COMPONENT-180TANGUT COMPONENT-181TANGUT COMPONENT-182TANGUT" + + " COMPONENT-183TANGUT COMPONENT-184TANGUT COMPONENT-185TANGUT COMPONENT-1" + + "86TANGUT COMPONENT-187TANGUT COMPONENT-188TANGUT COMPONENT-189TANGUT COM" + + "PONENT-190TANGUT COMPONENT-191TANGUT COMPONENT-192TANGUT COMPONENT-193TA" + + "NGUT COMPONENT-194TANGUT COMPONENT-195TANGUT COMPONENT-196TANGUT COMPONE" + + "NT-197TANGUT COMPONENT-198TANGUT COMPONENT-199TANGUT COMPONENT-200TANGUT" + + " COMPONENT-201TANGUT COMPONENT-202TANGUT COMPONENT-203TANGUT COMPONENT-2" + + "04TANGUT COMPONENT-205TANGUT COMPONENT-206TANGUT COMPONENT-207TANGUT COM" + + "PONENT-208TANGUT COMPONENT-209TANGUT COMPONENT-210TANGUT COMPONENT-211TA" + + "NGUT COMPONENT-212TANGUT COMPONENT-213TANGUT COMPONENT-214TANGUT COMPONE" + + "NT-215TANGUT COMPONENT-216TANGUT COMPONENT-217TANGUT COMPONENT-218TANGUT" + + " COMPONENT-219TANGUT COMPONENT-220TANGUT COMPONENT-221TANGUT COMPONENT-2" + + "22TANGUT COMPONENT-223TANGUT COMPONENT-224TANGUT COMPONENT-225TANGUT COM" + + "PONENT-226TANGUT COMPONENT-227TANGUT COMPONENT-228TANGUT COMPONENT-229TA" + + "NGUT COMPONENT-230TANGUT COMPONENT-231TANGUT COMPONENT-232TANGUT COMPONE" + + "NT-233TANGUT COMPONENT-234TANGUT COMPONENT-235TANGUT COMPONENT-236TANGUT" + + " COMPONENT-237TANGUT COMPONENT-238TANGUT COMPONENT-239TANGUT COMPONENT-2" + + "40TANGUT COMPONENT-241TANGUT COMPONENT-242TANGUT COMPONENT-243TANGUT COM" + + "PONENT-244TANGUT COMPONENT-245TANGUT COMPONENT-246TANGUT COMPONENT-247TA" + + "NGUT COMPONENT-248TANGUT COMPONENT-249TANGUT COMPONENT-250TANGUT COMPONE" + + "NT-251TANGUT COMPONENT-252TANGUT COMPONENT-253TANGUT COMPONENT-254TANGUT" + + " COMPONENT-255TANGUT COMPONENT-256TANGUT COMPONENT-257TANGUT COMPONENT-2" + + "58TANGUT COMPONENT-259TANGUT COMPONENT-260TANGUT COMPONENT-261TANGUT COM" + + "PONENT-262TANGUT COMPONENT-263TANGUT COMPONENT-264TANGUT COMPONENT-265TA" + + "NGUT COMPONENT-266TANGUT COMPONENT-267TANGUT COMPONENT-268TANGUT COMPONE" + + "NT-269TANGUT COMPONENT-270TANGUT COMPONENT-271TANGUT COMPONENT-272TANGUT" + + " COMPONENT-273TANGUT COMPONENT-274TANGUT COMPONENT-275TANGUT COMPONENT-2" + + "76TANGUT COMPONENT-277TANGUT COMPONENT-278TANGUT COMPONENT-279TANGUT COM" + + "PONENT-280TANGUT COMPONENT-281TANGUT COMPONENT-282TANGUT COMPONENT-283TA" + + "NGUT COMPONENT-284TANGUT COMPONENT-285TANGUT COMPONENT-286TANGUT COMPONE" + + "NT-287TANGUT COMPONENT-288TANGUT COMPONENT-289TANGUT COMPONENT-290TANGUT" + + " COMPONENT-291TANGUT COMPONENT-292TANGUT COMPONENT-293TANGUT COMPONENT-2" + + "94TANGUT COMPONENT-295TANGUT COMPONENT-296TANGUT COMPONENT-297TANGUT COM" + + "PONENT-298TANGUT COMPONENT-299TANGUT COMPONENT-300TANGUT COMPONENT-301TA" + + "NGUT COMPONENT-302TANGUT COMPONENT-303TANGUT COMPONENT-304TANGUT COMPONE" + + "NT-305TANGUT COMPONENT-306TANGUT COMPONENT-307TANGUT COMPONENT-308TANGUT" + + " COMPONENT-309TANGUT COMPONENT-310TANGUT COMPONENT-311TANGUT COMPONENT-3" + + "12TANGUT COMPONENT-313TANGUT COMPONENT-314TANGUT COMPONENT-315TANGUT COM" + + "PONENT-316TANGUT COMPONENT-317TANGUT COMPONENT-318TANGUT COMPONENT-319TA" + + "NGUT COMPONENT-320TANGUT COMPONENT-321TANGUT COMPONENT-322TANGUT COMPONE" + + "NT-323TANGUT COMPONENT-324TANGUT COMPONENT-325TANGUT COMPONENT-326TANGUT" + + " COMPONENT-327TANGUT COMPONENT-328TANGUT COMPONENT-329TANGUT COMPONENT-3" + + "30TANGUT COMPONENT-331TANGUT COMPONENT-332TANGUT COMPONENT-333TANGUT COM" + + "PONENT-334TANGUT COMPONENT-335TANGUT COMPONENT-336TANGUT COMPONENT-337TA" + + "NGUT COMPONENT-338TANGUT COMPONENT-339TANGUT COMPONENT-340TANGUT COMPONE" + + "NT-341TANGUT COMPONENT-342TANGUT COMPONENT-343TANGUT COMPONENT-344TANGUT" + + " COMPONENT-345TANGUT COMPONENT-346TANGUT COMPONENT-347TANGUT COMPONENT-3" + + "48TANGUT COMPONENT-349TANGUT COMPONENT-350TANGUT COMPONENT-351TANGUT COM" + + "PONENT-352TANGUT COMPONENT-353TANGUT COMPONENT-354TANGUT COMPONENT-355TA" + + "NGUT COMPONENT-356TANGUT COMPONENT-357TANGUT COMPONENT-358TANGUT COMPONE" + + "NT-359TANGUT COMPONENT-360TANGUT COMPONENT-361TANGUT COMPONENT-362TANGUT" + + " COMPONENT-363TANGUT COMPONENT-364TANGUT COMPONENT-365TANGUT COMPONENT-3" + + "66TANGUT COMPONENT-367TANGUT COMPONENT-368TANGUT COMPONENT-369TANGUT COM") + ("" + + "PONENT-370TANGUT COMPONENT-371TANGUT COMPONENT-372TANGUT COMPONENT-373TA" + + "NGUT COMPONENT-374TANGUT COMPONENT-375TANGUT COMPONENT-376TANGUT COMPONE" + + "NT-377TANGUT COMPONENT-378TANGUT COMPONENT-379TANGUT COMPONENT-380TANGUT" + + " COMPONENT-381TANGUT COMPONENT-382TANGUT COMPONENT-383TANGUT COMPONENT-3" + + "84TANGUT COMPONENT-385TANGUT COMPONENT-386TANGUT COMPONENT-387TANGUT COM" + + "PONENT-388TANGUT COMPONENT-389TANGUT COMPONENT-390TANGUT COMPONENT-391TA" + + "NGUT COMPONENT-392TANGUT COMPONENT-393TANGUT COMPONENT-394TANGUT COMPONE" + + "NT-395TANGUT COMPONENT-396TANGUT COMPONENT-397TANGUT COMPONENT-398TANGUT" + + " COMPONENT-399TANGUT COMPONENT-400TANGUT COMPONENT-401TANGUT COMPONENT-4" + + "02TANGUT COMPONENT-403TANGUT COMPONENT-404TANGUT COMPONENT-405TANGUT COM" + + "PONENT-406TANGUT COMPONENT-407TANGUT COMPONENT-408TANGUT COMPONENT-409TA" + + "NGUT COMPONENT-410TANGUT COMPONENT-411TANGUT COMPONENT-412TANGUT COMPONE" + + "NT-413TANGUT COMPONENT-414TANGUT COMPONENT-415TANGUT COMPONENT-416TANGUT" + + " COMPONENT-417TANGUT COMPONENT-418TANGUT COMPONENT-419TANGUT COMPONENT-4" + + "20TANGUT COMPONENT-421TANGUT COMPONENT-422TANGUT COMPONENT-423TANGUT COM" + + "PONENT-424TANGUT COMPONENT-425TANGUT COMPONENT-426TANGUT COMPONENT-427TA" + + "NGUT COMPONENT-428TANGUT COMPONENT-429TANGUT COMPONENT-430TANGUT COMPONE" + + "NT-431TANGUT COMPONENT-432TANGUT COMPONENT-433TANGUT COMPONENT-434TANGUT" + + " COMPONENT-435TANGUT COMPONENT-436TANGUT COMPONENT-437TANGUT COMPONENT-4" + + "38TANGUT COMPONENT-439TANGUT COMPONENT-440TANGUT COMPONENT-441TANGUT COM" + + "PONENT-442TANGUT COMPONENT-443TANGUT COMPONENT-444TANGUT COMPONENT-445TA" + + "NGUT COMPONENT-446TANGUT COMPONENT-447TANGUT COMPONENT-448TANGUT COMPONE" + + "NT-449TANGUT COMPONENT-450TANGUT COMPONENT-451TANGUT COMPONENT-452TANGUT" + + " COMPONENT-453TANGUT COMPONENT-454TANGUT COMPONENT-455TANGUT COMPONENT-4" + + "56TANGUT COMPONENT-457TANGUT COMPONENT-458TANGUT COMPONENT-459TANGUT COM" + + "PONENT-460TANGUT COMPONENT-461TANGUT COMPONENT-462TANGUT COMPONENT-463TA" + + "NGUT COMPONENT-464TANGUT COMPONENT-465TANGUT COMPONENT-466TANGUT COMPONE" + + "NT-467TANGUT COMPONENT-468TANGUT COMPONENT-469TANGUT COMPONENT-470TANGUT" + + " COMPONENT-471TANGUT COMPONENT-472TANGUT COMPONENT-473TANGUT COMPONENT-4" + + "74TANGUT COMPONENT-475TANGUT COMPONENT-476TANGUT COMPONENT-477TANGUT COM" + + "PONENT-478TANGUT COMPONENT-479TANGUT COMPONENT-480TANGUT COMPONENT-481TA" + + "NGUT COMPONENT-482TANGUT COMPONENT-483TANGUT COMPONENT-484TANGUT COMPONE" + + "NT-485TANGUT COMPONENT-486TANGUT COMPONENT-487TANGUT COMPONENT-488TANGUT" + + " COMPONENT-489TANGUT COMPONENT-490TANGUT COMPONENT-491TANGUT COMPONENT-4" + + "92TANGUT COMPONENT-493TANGUT COMPONENT-494TANGUT COMPONENT-495TANGUT COM" + + "PONENT-496TANGUT COMPONENT-497TANGUT COMPONENT-498TANGUT COMPONENT-499TA" + + "NGUT COMPONENT-500TANGUT COMPONENT-501TANGUT COMPONENT-502TANGUT COMPONE" + + "NT-503TANGUT COMPONENT-504TANGUT COMPONENT-505TANGUT COMPONENT-506TANGUT" + + " COMPONENT-507TANGUT COMPONENT-508TANGUT COMPONENT-509TANGUT COMPONENT-5" + + "10TANGUT COMPONENT-511TANGUT COMPONENT-512TANGUT COMPONENT-513TANGUT COM" + + "PONENT-514TANGUT COMPONENT-515TANGUT COMPONENT-516TANGUT COMPONENT-517TA" + + "NGUT COMPONENT-518TANGUT COMPONENT-519TANGUT COMPONENT-520TANGUT COMPONE" + + "NT-521TANGUT COMPONENT-522TANGUT COMPONENT-523TANGUT COMPONENT-524TANGUT" + + " COMPONENT-525TANGUT COMPONENT-526TANGUT COMPONENT-527TANGUT COMPONENT-5" + + "28TANGUT COMPONENT-529TANGUT COMPONENT-530TANGUT COMPONENT-531TANGUT COM" + + "PONENT-532TANGUT COMPONENT-533TANGUT COMPONENT-534TANGUT COMPONENT-535TA" + + "NGUT COMPONENT-536TANGUT COMPONENT-537TANGUT COMPONENT-538TANGUT COMPONE" + + "NT-539TANGUT COMPONENT-540TANGUT COMPONENT-541TANGUT COMPONENT-542TANGUT" + + " COMPONENT-543TANGUT COMPONENT-544TANGUT COMPONENT-545TANGUT COMPONENT-5" + + "46TANGUT COMPONENT-547TANGUT COMPONENT-548TANGUT COMPONENT-549TANGUT COM" + + "PONENT-550TANGUT COMPONENT-551TANGUT COMPONENT-552TANGUT COMPONENT-553TA" + + "NGUT COMPONENT-554TANGUT COMPONENT-555TANGUT COMPONENT-556TANGUT COMPONE" + + "NT-557TANGUT COMPONENT-558TANGUT COMPONENT-559TANGUT COMPONENT-560TANGUT" + + " COMPONENT-561TANGUT COMPONENT-562TANGUT COMPONENT-563TANGUT COMPONENT-5" + + "64TANGUT COMPONENT-565TANGUT COMPONENT-566TANGUT COMPONENT-567TANGUT COM" + + "PONENT-568TANGUT COMPONENT-569TANGUT COMPONENT-570TANGUT COMPONENT-571TA" + + "NGUT COMPONENT-572TANGUT COMPONENT-573TANGUT COMPONENT-574TANGUT COMPONE" + + "NT-575TANGUT COMPONENT-576TANGUT COMPONENT-577TANGUT COMPONENT-578TANGUT" + + " COMPONENT-579TANGUT COMPONENT-580TANGUT COMPONENT-581TANGUT COMPONENT-5" + + "82TANGUT COMPONENT-583TANGUT COMPONENT-584TANGUT COMPONENT-585TANGUT COM" + + "PONENT-586TANGUT COMPONENT-587TANGUT COMPONENT-588TANGUT COMPONENT-589TA" + + "NGUT COMPONENT-590TANGUT COMPONENT-591TANGUT COMPONENT-592TANGUT COMPONE" + + "NT-593TANGUT COMPONENT-594TANGUT COMPONENT-595TANGUT COMPONENT-596TANGUT" + + " COMPONENT-597TANGUT COMPONENT-598TANGUT COMPONENT-599TANGUT COMPONENT-6") + ("" + + "00TANGUT COMPONENT-601TANGUT COMPONENT-602TANGUT COMPONENT-603TANGUT COM" + + "PONENT-604TANGUT COMPONENT-605TANGUT COMPONENT-606TANGUT COMPONENT-607TA" + + "NGUT COMPONENT-608TANGUT COMPONENT-609TANGUT COMPONENT-610TANGUT COMPONE" + + "NT-611TANGUT COMPONENT-612TANGUT COMPONENT-613TANGUT COMPONENT-614TANGUT" + + " COMPONENT-615TANGUT COMPONENT-616TANGUT COMPONENT-617TANGUT COMPONENT-6" + + "18TANGUT COMPONENT-619TANGUT COMPONENT-620TANGUT COMPONENT-621TANGUT COM" + + "PONENT-622TANGUT COMPONENT-623TANGUT COMPONENT-624TANGUT COMPONENT-625TA" + + "NGUT COMPONENT-626TANGUT COMPONENT-627TANGUT COMPONENT-628TANGUT COMPONE" + + "NT-629TANGUT COMPONENT-630TANGUT COMPONENT-631TANGUT COMPONENT-632TANGUT" + + " COMPONENT-633TANGUT COMPONENT-634TANGUT COMPONENT-635TANGUT COMPONENT-6" + + "36TANGUT COMPONENT-637TANGUT COMPONENT-638TANGUT COMPONENT-639TANGUT COM" + + "PONENT-640TANGUT COMPONENT-641TANGUT COMPONENT-642TANGUT COMPONENT-643TA" + + "NGUT COMPONENT-644TANGUT COMPONENT-645TANGUT COMPONENT-646TANGUT COMPONE" + + "NT-647TANGUT COMPONENT-648TANGUT COMPONENT-649TANGUT COMPONENT-650TANGUT" + + " COMPONENT-651TANGUT COMPONENT-652TANGUT COMPONENT-653TANGUT COMPONENT-6" + + "54TANGUT COMPONENT-655TANGUT COMPONENT-656TANGUT COMPONENT-657TANGUT COM" + + "PONENT-658TANGUT COMPONENT-659TANGUT COMPONENT-660TANGUT COMPONENT-661TA" + + "NGUT COMPONENT-662TANGUT COMPONENT-663TANGUT COMPONENT-664TANGUT COMPONE" + + "NT-665TANGUT COMPONENT-666TANGUT COMPONENT-667TANGUT COMPONENT-668TANGUT" + + " COMPONENT-669TANGUT COMPONENT-670TANGUT COMPONENT-671TANGUT COMPONENT-6" + + "72TANGUT COMPONENT-673TANGUT COMPONENT-674TANGUT COMPONENT-675TANGUT COM" + + "PONENT-676TANGUT COMPONENT-677TANGUT COMPONENT-678TANGUT COMPONENT-679TA" + + "NGUT COMPONENT-680TANGUT COMPONENT-681TANGUT COMPONENT-682TANGUT COMPONE" + + "NT-683TANGUT COMPONENT-684TANGUT COMPONENT-685TANGUT COMPONENT-686TANGUT" + + " COMPONENT-687TANGUT COMPONENT-688TANGUT COMPONENT-689TANGUT COMPONENT-6" + + "90TANGUT COMPONENT-691TANGUT COMPONENT-692TANGUT COMPONENT-693TANGUT COM" + + "PONENT-694TANGUT COMPONENT-695TANGUT COMPONENT-696TANGUT COMPONENT-697TA" + + "NGUT COMPONENT-698TANGUT COMPONENT-699TANGUT COMPONENT-700TANGUT COMPONE" + + "NT-701TANGUT COMPONENT-702TANGUT COMPONENT-703TANGUT COMPONENT-704TANGUT" + + " COMPONENT-705TANGUT COMPONENT-706TANGUT COMPONENT-707TANGUT COMPONENT-7" + + "08TANGUT COMPONENT-709TANGUT COMPONENT-710TANGUT COMPONENT-711TANGUT COM" + + "PONENT-712TANGUT COMPONENT-713TANGUT COMPONENT-714TANGUT COMPONENT-715TA" + + "NGUT COMPONENT-716TANGUT COMPONENT-717TANGUT COMPONENT-718TANGUT COMPONE" + + "NT-719TANGUT COMPONENT-720TANGUT COMPONENT-721TANGUT COMPONENT-722TANGUT" + + " COMPONENT-723TANGUT COMPONENT-724TANGUT COMPONENT-725TANGUT COMPONENT-7" + + "26TANGUT COMPONENT-727TANGUT COMPONENT-728TANGUT COMPONENT-729TANGUT COM" + + "PONENT-730TANGUT COMPONENT-731TANGUT COMPONENT-732TANGUT COMPONENT-733TA" + + "NGUT COMPONENT-734TANGUT COMPONENT-735TANGUT COMPONENT-736TANGUT COMPONE" + + "NT-737TANGUT COMPONENT-738TANGUT COMPONENT-739TANGUT COMPONENT-740TANGUT" + + " COMPONENT-741TANGUT COMPONENT-742TANGUT COMPONENT-743TANGUT COMPONENT-7" + + "44TANGUT COMPONENT-745TANGUT COMPONENT-746TANGUT COMPONENT-747TANGUT COM" + + "PONENT-748TANGUT COMPONENT-749TANGUT COMPONENT-750TANGUT COMPONENT-751TA" + + "NGUT COMPONENT-752TANGUT COMPONENT-753TANGUT COMPONENT-754TANGUT COMPONE" + + "NT-755KATAKANA LETTER ARCHAIC EHIRAGANA LETTER ARCHAIC YEHENTAIGANA LETT" + + "ER A-1HENTAIGANA LETTER A-2HENTAIGANA LETTER A-3HENTAIGANA LETTER A-WOHE" + + "NTAIGANA LETTER I-1HENTAIGANA LETTER I-2HENTAIGANA LETTER I-3HENTAIGANA " + + "LETTER I-4HENTAIGANA LETTER U-1HENTAIGANA LETTER U-2HENTAIGANA LETTER U-" + + "3HENTAIGANA LETTER U-4HENTAIGANA LETTER U-5HENTAIGANA LETTER E-2HENTAIGA" + + "NA LETTER E-3HENTAIGANA LETTER E-4HENTAIGANA LETTER E-5HENTAIGANA LETTER" + + " E-6HENTAIGANA LETTER O-1HENTAIGANA LETTER O-2HENTAIGANA LETTER O-3HENTA" + + "IGANA LETTER KA-1HENTAIGANA LETTER KA-2HENTAIGANA LETTER KA-3HENTAIGANA " + + "LETTER KA-4HENTAIGANA LETTER KA-5HENTAIGANA LETTER KA-6HENTAIGANA LETTER" + + " KA-7HENTAIGANA LETTER KA-8HENTAIGANA LETTER KA-9HENTAIGANA LETTER KA-10" + + "HENTAIGANA LETTER KA-11HENTAIGANA LETTER KA-KEHENTAIGANA LETTER KI-1HENT" + + "AIGANA LETTER KI-2HENTAIGANA LETTER KI-3HENTAIGANA LETTER KI-4HENTAIGANA" + + " LETTER KI-5HENTAIGANA LETTER KI-6HENTAIGANA LETTER KI-7HENTAIGANA LETTE" + + "R KI-8HENTAIGANA LETTER KU-1HENTAIGANA LETTER KU-2HENTAIGANA LETTER KU-3" + + "HENTAIGANA LETTER KU-4HENTAIGANA LETTER KU-5HENTAIGANA LETTER KU-6HENTAI" + + "GANA LETTER KU-7HENTAIGANA LETTER KE-1HENTAIGANA LETTER KE-2HENTAIGANA L" + + "ETTER KE-3HENTAIGANA LETTER KE-4HENTAIGANA LETTER KE-5HENTAIGANA LETTER " + + "KE-6HENTAIGANA LETTER KO-1HENTAIGANA LETTER KO-2HENTAIGANA LETTER KO-3HE" + + "NTAIGANA LETTER KO-KIHENTAIGANA LETTER SA-1HENTAIGANA LETTER SA-2HENTAIG" + + "ANA LETTER SA-3HENTAIGANA LETTER SA-4HENTAIGANA LETTER SA-5HENTAIGANA LE" + + "TTER SA-6HENTAIGANA LETTER SA-7HENTAIGANA LETTER SA-8HENTAIGANA LETTER S") + ("" + + "I-1HENTAIGANA LETTER SI-2HENTAIGANA LETTER SI-3HENTAIGANA LETTER SI-4HEN" + + "TAIGANA LETTER SI-5HENTAIGANA LETTER SI-6HENTAIGANA LETTER SU-1HENTAIGAN" + + "A LETTER SU-2HENTAIGANA LETTER SU-3HENTAIGANA LETTER SU-4HENTAIGANA LETT" + + "ER SU-5HENTAIGANA LETTER SU-6HENTAIGANA LETTER SU-7HENTAIGANA LETTER SU-" + + "8HENTAIGANA LETTER SE-1HENTAIGANA LETTER SE-2HENTAIGANA LETTER SE-3HENTA" + + "IGANA LETTER SE-4HENTAIGANA LETTER SE-5HENTAIGANA LETTER SO-1HENTAIGANA " + + "LETTER SO-2HENTAIGANA LETTER SO-3HENTAIGANA LETTER SO-4HENTAIGANA LETTER" + + " SO-5HENTAIGANA LETTER SO-6HENTAIGANA LETTER SO-7HENTAIGANA LETTER TA-1H" + + "ENTAIGANA LETTER TA-2HENTAIGANA LETTER TA-3HENTAIGANA LETTER TA-4HENTAIG" + + "ANA LETTER TI-1HENTAIGANA LETTER TI-2HENTAIGANA LETTER TI-3HENTAIGANA LE" + + "TTER TI-4HENTAIGANA LETTER TI-5HENTAIGANA LETTER TI-6HENTAIGANA LETTER T" + + "I-7HENTAIGANA LETTER TU-1HENTAIGANA LETTER TU-2HENTAIGANA LETTER TU-3HEN" + + "TAIGANA LETTER TU-4HENTAIGANA LETTER TU-TOHENTAIGANA LETTER TE-1HENTAIGA" + + "NA LETTER TE-2HENTAIGANA LETTER TE-3HENTAIGANA LETTER TE-4HENTAIGANA LET" + + "TER TE-5HENTAIGANA LETTER TE-6HENTAIGANA LETTER TE-7HENTAIGANA LETTER TE" + + "-8HENTAIGANA LETTER TE-9HENTAIGANA LETTER TO-1HENTAIGANA LETTER TO-2HENT" + + "AIGANA LETTER TO-3HENTAIGANA LETTER TO-4HENTAIGANA LETTER TO-5HENTAIGANA" + + " LETTER TO-6HENTAIGANA LETTER TO-RAHENTAIGANA LETTER NA-1HENTAIGANA LETT" + + "ER NA-2HENTAIGANA LETTER NA-3HENTAIGANA LETTER NA-4HENTAIGANA LETTER NA-" + + "5HENTAIGANA LETTER NA-6HENTAIGANA LETTER NA-7HENTAIGANA LETTER NA-8HENTA" + + "IGANA LETTER NA-9HENTAIGANA LETTER NI-1HENTAIGANA LETTER NI-2HENTAIGANA " + + "LETTER NI-3HENTAIGANA LETTER NI-4HENTAIGANA LETTER NI-5HENTAIGANA LETTER" + + " NI-6HENTAIGANA LETTER NI-7HENTAIGANA LETTER NI-TEHENTAIGANA LETTER NU-1" + + "HENTAIGANA LETTER NU-2HENTAIGANA LETTER NU-3HENTAIGANA LETTER NE-1HENTAI" + + "GANA LETTER NE-2HENTAIGANA LETTER NE-3HENTAIGANA LETTER NE-4HENTAIGANA L" + + "ETTER NE-5HENTAIGANA LETTER NE-6HENTAIGANA LETTER NE-KOHENTAIGANA LETTER" + + " NO-1HENTAIGANA LETTER NO-2HENTAIGANA LETTER NO-3HENTAIGANA LETTER NO-4H" + + "ENTAIGANA LETTER NO-5HENTAIGANA LETTER HA-1HENTAIGANA LETTER HA-2HENTAIG" + + "ANA LETTER HA-3HENTAIGANA LETTER HA-4HENTAIGANA LETTER HA-5HENTAIGANA LE" + + "TTER HA-6HENTAIGANA LETTER HA-7HENTAIGANA LETTER HA-8HENTAIGANA LETTER H" + + "A-9HENTAIGANA LETTER HA-10HENTAIGANA LETTER HA-11HENTAIGANA LETTER HI-1H" + + "ENTAIGANA LETTER HI-2HENTAIGANA LETTER HI-3HENTAIGANA LETTER HI-4HENTAIG" + + "ANA LETTER HI-5HENTAIGANA LETTER HI-6HENTAIGANA LETTER HI-7HENTAIGANA LE" + + "TTER HU-1HENTAIGANA LETTER HU-2HENTAIGANA LETTER HU-3HENTAIGANA LETTER H" + + "E-1HENTAIGANA LETTER HE-2HENTAIGANA LETTER HE-3HENTAIGANA LETTER HE-4HEN" + + "TAIGANA LETTER HE-5HENTAIGANA LETTER HE-6HENTAIGANA LETTER HE-7HENTAIGAN" + + "A LETTER HO-1HENTAIGANA LETTER HO-2HENTAIGANA LETTER HO-3HENTAIGANA LETT" + + "ER HO-4HENTAIGANA LETTER HO-5HENTAIGANA LETTER HO-6HENTAIGANA LETTER HO-" + + "7HENTAIGANA LETTER HO-8HENTAIGANA LETTER MA-1HENTAIGANA LETTER MA-2HENTA" + + "IGANA LETTER MA-3HENTAIGANA LETTER MA-4HENTAIGANA LETTER MA-5HENTAIGANA " + + "LETTER MA-6HENTAIGANA LETTER MA-7HENTAIGANA LETTER MI-1HENTAIGANA LETTER" + + " MI-2HENTAIGANA LETTER MI-3HENTAIGANA LETTER MI-4HENTAIGANA LETTER MI-5H" + + "ENTAIGANA LETTER MI-6HENTAIGANA LETTER MI-7HENTAIGANA LETTER MU-1HENTAIG" + + "ANA LETTER MU-2HENTAIGANA LETTER MU-3HENTAIGANA LETTER MU-4HENTAIGANA LE" + + "TTER ME-1HENTAIGANA LETTER ME-2HENTAIGANA LETTER ME-MAHENTAIGANA LETTER " + + "MO-1HENTAIGANA LETTER MO-2HENTAIGANA LETTER MO-3HENTAIGANA LETTER MO-4HE" + + "NTAIGANA LETTER MO-5HENTAIGANA LETTER MO-6HENTAIGANA LETTER YA-1HENTAIGA" + + "NA LETTER YA-2HENTAIGANA LETTER YA-3HENTAIGANA LETTER YA-4HENTAIGANA LET" + + "TER YA-5HENTAIGANA LETTER YA-YOHENTAIGANA LETTER YU-1HENTAIGANA LETTER Y" + + "U-2HENTAIGANA LETTER YU-3HENTAIGANA LETTER YU-4HENTAIGANA LETTER YO-1HEN" + + "TAIGANA LETTER YO-2HENTAIGANA LETTER YO-3HENTAIGANA LETTER YO-4HENTAIGAN" + + "A LETTER YO-5HENTAIGANA LETTER YO-6HENTAIGANA LETTER RA-1HENTAIGANA LETT" + + "ER RA-2HENTAIGANA LETTER RA-3HENTAIGANA LETTER RA-4HENTAIGANA LETTER RI-" + + "1HENTAIGANA LETTER RI-2HENTAIGANA LETTER RI-3HENTAIGANA LETTER RI-4HENTA" + + "IGANA LETTER RI-5HENTAIGANA LETTER RI-6HENTAIGANA LETTER RI-7HENTAIGANA " + + "LETTER RU-1HENTAIGANA LETTER RU-2HENTAIGANA LETTER RU-3HENTAIGANA LETTER" + + " RU-4HENTAIGANA LETTER RU-5HENTAIGANA LETTER RU-6HENTAIGANA LETTER RE-1H" + + "ENTAIGANA LETTER RE-2HENTAIGANA LETTER RE-3HENTAIGANA LETTER RE-4HENTAIG" + + "ANA LETTER RO-1HENTAIGANA LETTER RO-2HENTAIGANA LETTER RO-3HENTAIGANA LE" + + "TTER RO-4HENTAIGANA LETTER RO-5HENTAIGANA LETTER RO-6HENTAIGANA LETTER W" + + "A-1HENTAIGANA LETTER WA-2HENTAIGANA LETTER WA-3HENTAIGANA LETTER WA-4HEN" + + "TAIGANA LETTER WA-5HENTAIGANA LETTER WI-1HENTAIGANA LETTER WI-2HENTAIGAN" + + "A LETTER WI-3HENTAIGANA LETTER WI-4HENTAIGANA LETTER WI-5HENTAIGANA LETT" + + "ER WE-1HENTAIGANA LETTER WE-2HENTAIGANA LETTER WE-3HENTAIGANA LETTER WE-") + ("" + + "4HENTAIGANA LETTER WO-1HENTAIGANA LETTER WO-2HENTAIGANA LETTER WO-3HENTA" + + "IGANA LETTER WO-4HENTAIGANA LETTER WO-5HENTAIGANA LETTER WO-6HENTAIGANA " + + "LETTER WO-7HENTAIGANA LETTER N-MU-MO-1HENTAIGANA LETTER N-MU-MO-2NUSHU C" + + "HARACTER-1B170NUSHU CHARACTER-1B171NUSHU CHARACTER-1B172NUSHU CHARACTER-" + + "1B173NUSHU CHARACTER-1B174NUSHU CHARACTER-1B175NUSHU CHARACTER-1B176NUSH" + + "U CHARACTER-1B177NUSHU CHARACTER-1B178NUSHU CHARACTER-1B179NUSHU CHARACT" + + "ER-1B17ANUSHU CHARACTER-1B17BNUSHU CHARACTER-1B17CNUSHU CHARACTER-1B17DN" + + "USHU CHARACTER-1B17ENUSHU CHARACTER-1B17FNUSHU CHARACTER-1B180NUSHU CHAR" + + "ACTER-1B181NUSHU CHARACTER-1B182NUSHU CHARACTER-1B183NUSHU CHARACTER-1B1" + + "84NUSHU CHARACTER-1B185NUSHU CHARACTER-1B186NUSHU CHARACTER-1B187NUSHU C" + + "HARACTER-1B188NUSHU CHARACTER-1B189NUSHU CHARACTER-1B18ANUSHU CHARACTER-" + + "1B18BNUSHU CHARACTER-1B18CNUSHU CHARACTER-1B18DNUSHU CHARACTER-1B18ENUSH" + + "U CHARACTER-1B18FNUSHU CHARACTER-1B190NUSHU CHARACTER-1B191NUSHU CHARACT" + + "ER-1B192NUSHU CHARACTER-1B193NUSHU CHARACTER-1B194NUSHU CHARACTER-1B195N" + + "USHU CHARACTER-1B196NUSHU CHARACTER-1B197NUSHU CHARACTER-1B198NUSHU CHAR" + + "ACTER-1B199NUSHU CHARACTER-1B19ANUSHU CHARACTER-1B19BNUSHU CHARACTER-1B1" + + "9CNUSHU CHARACTER-1B19DNUSHU CHARACTER-1B19ENUSHU CHARACTER-1B19FNUSHU C" + + "HARACTER-1B1A0NUSHU CHARACTER-1B1A1NUSHU CHARACTER-1B1A2NUSHU CHARACTER-" + + "1B1A3NUSHU CHARACTER-1B1A4NUSHU CHARACTER-1B1A5NUSHU CHARACTER-1B1A6NUSH" + + "U CHARACTER-1B1A7NUSHU CHARACTER-1B1A8NUSHU CHARACTER-1B1A9NUSHU CHARACT" + + "ER-1B1AANUSHU CHARACTER-1B1ABNUSHU CHARACTER-1B1ACNUSHU CHARACTER-1B1ADN" + + "USHU CHARACTER-1B1AENUSHU CHARACTER-1B1AFNUSHU CHARACTER-1B1B0NUSHU CHAR" + + "ACTER-1B1B1NUSHU CHARACTER-1B1B2NUSHU CHARACTER-1B1B3NUSHU CHARACTER-1B1" + + "B4NUSHU CHARACTER-1B1B5NUSHU CHARACTER-1B1B6NUSHU CHARACTER-1B1B7NUSHU C" + + "HARACTER-1B1B8NUSHU CHARACTER-1B1B9NUSHU CHARACTER-1B1BANUSHU CHARACTER-" + + "1B1BBNUSHU CHARACTER-1B1BCNUSHU CHARACTER-1B1BDNUSHU CHARACTER-1B1BENUSH" + + "U CHARACTER-1B1BFNUSHU CHARACTER-1B1C0NUSHU CHARACTER-1B1C1NUSHU CHARACT" + + "ER-1B1C2NUSHU CHARACTER-1B1C3NUSHU CHARACTER-1B1C4NUSHU CHARACTER-1B1C5N" + + "USHU CHARACTER-1B1C6NUSHU CHARACTER-1B1C7NUSHU CHARACTER-1B1C8NUSHU CHAR" + + "ACTER-1B1C9NUSHU CHARACTER-1B1CANUSHU CHARACTER-1B1CBNUSHU CHARACTER-1B1" + + "CCNUSHU CHARACTER-1B1CDNUSHU CHARACTER-1B1CENUSHU CHARACTER-1B1CFNUSHU C" + + "HARACTER-1B1D0NUSHU CHARACTER-1B1D1NUSHU CHARACTER-1B1D2NUSHU CHARACTER-" + + "1B1D3NUSHU CHARACTER-1B1D4NUSHU CHARACTER-1B1D5NUSHU CHARACTER-1B1D6NUSH" + + "U CHARACTER-1B1D7NUSHU CHARACTER-1B1D8NUSHU CHARACTER-1B1D9NUSHU CHARACT" + + "ER-1B1DANUSHU CHARACTER-1B1DBNUSHU CHARACTER-1B1DCNUSHU CHARACTER-1B1DDN" + + "USHU CHARACTER-1B1DENUSHU CHARACTER-1B1DFNUSHU CHARACTER-1B1E0NUSHU CHAR" + + "ACTER-1B1E1NUSHU CHARACTER-1B1E2NUSHU CHARACTER-1B1E3NUSHU CHARACTER-1B1" + + "E4NUSHU CHARACTER-1B1E5NUSHU CHARACTER-1B1E6NUSHU CHARACTER-1B1E7NUSHU C" + + "HARACTER-1B1E8NUSHU CHARACTER-1B1E9NUSHU CHARACTER-1B1EANUSHU CHARACTER-" + + "1B1EBNUSHU CHARACTER-1B1ECNUSHU CHARACTER-1B1EDNUSHU CHARACTER-1B1EENUSH" + + "U CHARACTER-1B1EFNUSHU CHARACTER-1B1F0NUSHU CHARACTER-1B1F1NUSHU CHARACT" + + "ER-1B1F2NUSHU CHARACTER-1B1F3NUSHU CHARACTER-1B1F4NUSHU CHARACTER-1B1F5N" + + "USHU CHARACTER-1B1F6NUSHU CHARACTER-1B1F7NUSHU CHARACTER-1B1F8NUSHU CHAR" + + "ACTER-1B1F9NUSHU CHARACTER-1B1FANUSHU CHARACTER-1B1FBNUSHU CHARACTER-1B1" + + "FCNUSHU CHARACTER-1B1FDNUSHU CHARACTER-1B1FENUSHU CHARACTER-1B1FFNUSHU C" + + "HARACTER-1B200NUSHU CHARACTER-1B201NUSHU CHARACTER-1B202NUSHU CHARACTER-" + + "1B203NUSHU CHARACTER-1B204NUSHU CHARACTER-1B205NUSHU CHARACTER-1B206NUSH" + + "U CHARACTER-1B207NUSHU CHARACTER-1B208NUSHU CHARACTER-1B209NUSHU CHARACT" + + "ER-1B20ANUSHU CHARACTER-1B20BNUSHU CHARACTER-1B20CNUSHU CHARACTER-1B20DN" + + "USHU CHARACTER-1B20ENUSHU CHARACTER-1B20FNUSHU CHARACTER-1B210NUSHU CHAR" + + "ACTER-1B211NUSHU CHARACTER-1B212NUSHU CHARACTER-1B213NUSHU CHARACTER-1B2" + + "14NUSHU CHARACTER-1B215NUSHU CHARACTER-1B216NUSHU CHARACTER-1B217NUSHU C" + + "HARACTER-1B218NUSHU CHARACTER-1B219NUSHU CHARACTER-1B21ANUSHU CHARACTER-" + + "1B21BNUSHU CHARACTER-1B21CNUSHU CHARACTER-1B21DNUSHU CHARACTER-1B21ENUSH" + + "U CHARACTER-1B21FNUSHU CHARACTER-1B220NUSHU CHARACTER-1B221NUSHU CHARACT" + + "ER-1B222NUSHU CHARACTER-1B223NUSHU CHARACTER-1B224NUSHU CHARACTER-1B225N" + + "USHU CHARACTER-1B226NUSHU CHARACTER-1B227NUSHU CHARACTER-1B228NUSHU CHAR" + + "ACTER-1B229NUSHU CHARACTER-1B22ANUSHU CHARACTER-1B22BNUSHU CHARACTER-1B2" + + "2CNUSHU CHARACTER-1B22DNUSHU CHARACTER-1B22ENUSHU CHARACTER-1B22FNUSHU C" + + "HARACTER-1B230NUSHU CHARACTER-1B231NUSHU CHARACTER-1B232NUSHU CHARACTER-" + + "1B233NUSHU CHARACTER-1B234NUSHU CHARACTER-1B235NUSHU CHARACTER-1B236NUSH" + + "U CHARACTER-1B237NUSHU CHARACTER-1B238NUSHU CHARACTER-1B239NUSHU CHARACT" + + "ER-1B23ANUSHU CHARACTER-1B23BNUSHU CHARACTER-1B23CNUSHU CHARACTER-1B23DN" + + "USHU CHARACTER-1B23ENUSHU CHARACTER-1B23FNUSHU CHARACTER-1B240NUSHU CHAR") + ("" + + "ACTER-1B241NUSHU CHARACTER-1B242NUSHU CHARACTER-1B243NUSHU CHARACTER-1B2" + + "44NUSHU CHARACTER-1B245NUSHU CHARACTER-1B246NUSHU CHARACTER-1B247NUSHU C" + + "HARACTER-1B248NUSHU CHARACTER-1B249NUSHU CHARACTER-1B24ANUSHU CHARACTER-" + + "1B24BNUSHU CHARACTER-1B24CNUSHU CHARACTER-1B24DNUSHU CHARACTER-1B24ENUSH" + + "U CHARACTER-1B24FNUSHU CHARACTER-1B250NUSHU CHARACTER-1B251NUSHU CHARACT" + + "ER-1B252NUSHU CHARACTER-1B253NUSHU CHARACTER-1B254NUSHU CHARACTER-1B255N" + + "USHU CHARACTER-1B256NUSHU CHARACTER-1B257NUSHU CHARACTER-1B258NUSHU CHAR" + + "ACTER-1B259NUSHU CHARACTER-1B25ANUSHU CHARACTER-1B25BNUSHU CHARACTER-1B2" + + "5CNUSHU CHARACTER-1B25DNUSHU CHARACTER-1B25ENUSHU CHARACTER-1B25FNUSHU C" + + "HARACTER-1B260NUSHU CHARACTER-1B261NUSHU CHARACTER-1B262NUSHU CHARACTER-" + + "1B263NUSHU CHARACTER-1B264NUSHU CHARACTER-1B265NUSHU CHARACTER-1B266NUSH" + + "U CHARACTER-1B267NUSHU CHARACTER-1B268NUSHU CHARACTER-1B269NUSHU CHARACT" + + "ER-1B26ANUSHU CHARACTER-1B26BNUSHU CHARACTER-1B26CNUSHU CHARACTER-1B26DN" + + "USHU CHARACTER-1B26ENUSHU CHARACTER-1B26FNUSHU CHARACTER-1B270NUSHU CHAR" + + "ACTER-1B271NUSHU CHARACTER-1B272NUSHU CHARACTER-1B273NUSHU CHARACTER-1B2" + + "74NUSHU CHARACTER-1B275NUSHU CHARACTER-1B276NUSHU CHARACTER-1B277NUSHU C" + + "HARACTER-1B278NUSHU CHARACTER-1B279NUSHU CHARACTER-1B27ANUSHU CHARACTER-" + + "1B27BNUSHU CHARACTER-1B27CNUSHU CHARACTER-1B27DNUSHU CHARACTER-1B27ENUSH" + + "U CHARACTER-1B27FNUSHU CHARACTER-1B280NUSHU CHARACTER-1B281NUSHU CHARACT" + + "ER-1B282NUSHU CHARACTER-1B283NUSHU CHARACTER-1B284NUSHU CHARACTER-1B285N" + + "USHU CHARACTER-1B286NUSHU CHARACTER-1B287NUSHU CHARACTER-1B288NUSHU CHAR" + + "ACTER-1B289NUSHU CHARACTER-1B28ANUSHU CHARACTER-1B28BNUSHU CHARACTER-1B2" + + "8CNUSHU CHARACTER-1B28DNUSHU CHARACTER-1B28ENUSHU CHARACTER-1B28FNUSHU C" + + "HARACTER-1B290NUSHU CHARACTER-1B291NUSHU CHARACTER-1B292NUSHU CHARACTER-" + + "1B293NUSHU CHARACTER-1B294NUSHU CHARACTER-1B295NUSHU CHARACTER-1B296NUSH" + + "U CHARACTER-1B297NUSHU CHARACTER-1B298NUSHU CHARACTER-1B299NUSHU CHARACT" + + "ER-1B29ANUSHU CHARACTER-1B29BNUSHU CHARACTER-1B29CNUSHU CHARACTER-1B29DN" + + "USHU CHARACTER-1B29ENUSHU CHARACTER-1B29FNUSHU CHARACTER-1B2A0NUSHU CHAR" + + "ACTER-1B2A1NUSHU CHARACTER-1B2A2NUSHU CHARACTER-1B2A3NUSHU CHARACTER-1B2" + + "A4NUSHU CHARACTER-1B2A5NUSHU CHARACTER-1B2A6NUSHU CHARACTER-1B2A7NUSHU C" + + "HARACTER-1B2A8NUSHU CHARACTER-1B2A9NUSHU CHARACTER-1B2AANUSHU CHARACTER-" + + "1B2ABNUSHU CHARACTER-1B2ACNUSHU CHARACTER-1B2ADNUSHU CHARACTER-1B2AENUSH" + + "U CHARACTER-1B2AFNUSHU CHARACTER-1B2B0NUSHU CHARACTER-1B2B1NUSHU CHARACT" + + "ER-1B2B2NUSHU CHARACTER-1B2B3NUSHU CHARACTER-1B2B4NUSHU CHARACTER-1B2B5N" + + "USHU CHARACTER-1B2B6NUSHU CHARACTER-1B2B7NUSHU CHARACTER-1B2B8NUSHU CHAR" + + "ACTER-1B2B9NUSHU CHARACTER-1B2BANUSHU CHARACTER-1B2BBNUSHU CHARACTER-1B2" + + "BCNUSHU CHARACTER-1B2BDNUSHU CHARACTER-1B2BENUSHU CHARACTER-1B2BFNUSHU C" + + "HARACTER-1B2C0NUSHU CHARACTER-1B2C1NUSHU CHARACTER-1B2C2NUSHU CHARACTER-" + + "1B2C3NUSHU CHARACTER-1B2C4NUSHU CHARACTER-1B2C5NUSHU CHARACTER-1B2C6NUSH" + + "U CHARACTER-1B2C7NUSHU CHARACTER-1B2C8NUSHU CHARACTER-1B2C9NUSHU CHARACT" + + "ER-1B2CANUSHU CHARACTER-1B2CBNUSHU CHARACTER-1B2CCNUSHU CHARACTER-1B2CDN" + + "USHU CHARACTER-1B2CENUSHU CHARACTER-1B2CFNUSHU CHARACTER-1B2D0NUSHU CHAR" + + "ACTER-1B2D1NUSHU CHARACTER-1B2D2NUSHU CHARACTER-1B2D3NUSHU CHARACTER-1B2" + + "D4NUSHU CHARACTER-1B2D5NUSHU CHARACTER-1B2D6NUSHU CHARACTER-1B2D7NUSHU C" + + "HARACTER-1B2D8NUSHU CHARACTER-1B2D9NUSHU CHARACTER-1B2DANUSHU CHARACTER-" + + "1B2DBNUSHU CHARACTER-1B2DCNUSHU CHARACTER-1B2DDNUSHU CHARACTER-1B2DENUSH" + + "U CHARACTER-1B2DFNUSHU CHARACTER-1B2E0NUSHU CHARACTER-1B2E1NUSHU CHARACT" + + "ER-1B2E2NUSHU CHARACTER-1B2E3NUSHU CHARACTER-1B2E4NUSHU CHARACTER-1B2E5N" + + "USHU CHARACTER-1B2E6NUSHU CHARACTER-1B2E7NUSHU CHARACTER-1B2E8NUSHU CHAR" + + "ACTER-1B2E9NUSHU CHARACTER-1B2EANUSHU CHARACTER-1B2EBNUSHU CHARACTER-1B2" + + "ECNUSHU CHARACTER-1B2EDNUSHU CHARACTER-1B2EENUSHU CHARACTER-1B2EFNUSHU C" + + "HARACTER-1B2F0NUSHU CHARACTER-1B2F1NUSHU CHARACTER-1B2F2NUSHU CHARACTER-" + + "1B2F3NUSHU CHARACTER-1B2F4NUSHU CHARACTER-1B2F5NUSHU CHARACTER-1B2F6NUSH" + + "U CHARACTER-1B2F7NUSHU CHARACTER-1B2F8NUSHU CHARACTER-1B2F9NUSHU CHARACT" + + "ER-1B2FANUSHU CHARACTER-1B2FBDUPLOYAN LETTER HDUPLOYAN LETTER XDUPLOYAN " + + "LETTER PDUPLOYAN LETTER TDUPLOYAN LETTER FDUPLOYAN LETTER KDUPLOYAN LETT" + + "ER LDUPLOYAN LETTER BDUPLOYAN LETTER DDUPLOYAN LETTER VDUPLOYAN LETTER G" + + "DUPLOYAN LETTER RDUPLOYAN LETTER P NDUPLOYAN LETTER D SDUPLOYAN LETTER F" + + " NDUPLOYAN LETTER K MDUPLOYAN LETTER R SDUPLOYAN LETTER THDUPLOYAN LETTE" + + "R SLOAN DHDUPLOYAN LETTER DHDUPLOYAN LETTER KKDUPLOYAN LETTER SLOAN JDUP" + + "LOYAN LETTER HLDUPLOYAN LETTER LHDUPLOYAN LETTER RHDUPLOYAN LETTER MDUPL" + + "OYAN LETTER NDUPLOYAN LETTER JDUPLOYAN LETTER SDUPLOYAN LETTER M NDUPLOY" + + "AN LETTER N MDUPLOYAN LETTER J MDUPLOYAN LETTER S JDUPLOYAN LETTER M WIT" + + "H DOTDUPLOYAN LETTER N WITH DOTDUPLOYAN LETTER J WITH DOTDUPLOYAN LETTER") + ("" + + " J WITH DOTS INSIDE AND ABOVEDUPLOYAN LETTER S WITH DOTDUPLOYAN LETTER S" + + " WITH DOT BELOWDUPLOYAN LETTER M SDUPLOYAN LETTER N SDUPLOYAN LETTER J S" + + "DUPLOYAN LETTER S SDUPLOYAN LETTER M N SDUPLOYAN LETTER N M SDUPLOYAN LE" + + "TTER J M SDUPLOYAN LETTER S J SDUPLOYAN LETTER J S WITH DOTDUPLOYAN LETT" + + "ER J NDUPLOYAN LETTER J N SDUPLOYAN LETTER S TDUPLOYAN LETTER S T RDUPLO" + + "YAN LETTER S PDUPLOYAN LETTER S P RDUPLOYAN LETTER T SDUPLOYAN LETTER T " + + "R SDUPLOYAN LETTER WDUPLOYAN LETTER WHDUPLOYAN LETTER W RDUPLOYAN LETTER" + + " S NDUPLOYAN LETTER S MDUPLOYAN LETTER K R SDUPLOYAN LETTER G R SDUPLOYA" + + "N LETTER S KDUPLOYAN LETTER S K RDUPLOYAN LETTER ADUPLOYAN LETTER SLOAN " + + "OWDUPLOYAN LETTER OADUPLOYAN LETTER ODUPLOYAN LETTER AOUDUPLOYAN LETTER " + + "IDUPLOYAN LETTER EDUPLOYAN LETTER IEDUPLOYAN LETTER SHORT IDUPLOYAN LETT" + + "ER UIDUPLOYAN LETTER EEDUPLOYAN LETTER SLOAN EHDUPLOYAN LETTER ROMANIAN " + + "IDUPLOYAN LETTER SLOAN EEDUPLOYAN LETTER LONG IDUPLOYAN LETTER YEDUPLOYA" + + "N LETTER UDUPLOYAN LETTER EUDUPLOYAN LETTER XWDUPLOYAN LETTER U NDUPLOYA" + + "N LETTER LONG UDUPLOYAN LETTER ROMANIAN UDUPLOYAN LETTER UHDUPLOYAN LETT" + + "ER SLOAN UDUPLOYAN LETTER OOHDUPLOYAN LETTER OWDUPLOYAN LETTER OUDUPLOYA" + + "N LETTER WADUPLOYAN LETTER WODUPLOYAN LETTER WIDUPLOYAN LETTER WEIDUPLOY" + + "AN LETTER WOWDUPLOYAN LETTER NASAL UDUPLOYAN LETTER NASAL ODUPLOYAN LETT" + + "ER NASAL IDUPLOYAN LETTER NASAL ADUPLOYAN LETTER PERNIN ANDUPLOYAN LETTE" + + "R PERNIN AMDUPLOYAN LETTER SLOAN ENDUPLOYAN LETTER SLOAN ANDUPLOYAN LETT" + + "ER SLOAN ONDUPLOYAN LETTER VOCALIC MDUPLOYAN AFFIX LEFT HORIZONTAL SECAN" + + "TDUPLOYAN AFFIX MID HORIZONTAL SECANTDUPLOYAN AFFIX RIGHT HORIZONTAL SEC" + + "ANTDUPLOYAN AFFIX LOW VERTICAL SECANTDUPLOYAN AFFIX MID VERTICAL SECANTD" + + "UPLOYAN AFFIX HIGH VERTICAL SECANTDUPLOYAN AFFIX ATTACHED SECANTDUPLOYAN" + + " AFFIX ATTACHED LEFT-TO-RIGHT SECANTDUPLOYAN AFFIX ATTACHED TANGENTDUPLO" + + "YAN AFFIX ATTACHED TAILDUPLOYAN AFFIX ATTACHED E HOOKDUPLOYAN AFFIX ATTA" + + "CHED I HOOKDUPLOYAN AFFIX ATTACHED TANGENT HOOKDUPLOYAN AFFIX HIGH ACUTE" + + "DUPLOYAN AFFIX HIGH TIGHT ACUTEDUPLOYAN AFFIX HIGH GRAVEDUPLOYAN AFFIX H" + + "IGH LONG GRAVEDUPLOYAN AFFIX HIGH DOTDUPLOYAN AFFIX HIGH CIRCLEDUPLOYAN " + + "AFFIX HIGH LINEDUPLOYAN AFFIX HIGH WAVEDUPLOYAN AFFIX HIGH VERTICALDUPLO" + + "YAN AFFIX LOW ACUTEDUPLOYAN AFFIX LOW TIGHT ACUTEDUPLOYAN AFFIX LOW GRAV" + + "EDUPLOYAN AFFIX LOW LONG GRAVEDUPLOYAN AFFIX LOW DOTDUPLOYAN AFFIX LOW C" + + "IRCLEDUPLOYAN AFFIX LOW LINEDUPLOYAN AFFIX LOW WAVEDUPLOYAN AFFIX LOW VE" + + "RTICALDUPLOYAN AFFIX LOW ARROWDUPLOYAN SIGN O WITH CROSSDUPLOYAN THICK L" + + "ETTER SELECTORDUPLOYAN DOUBLE MARKDUPLOYAN PUNCTUATION CHINOOK FULL STOP" + + "SHORTHAND FORMAT LETTER OVERLAPSHORTHAND FORMAT CONTINUING OVERLAPSHORTH" + + "AND FORMAT DOWN STEPSHORTHAND FORMAT UP STEPBYZANTINE MUSICAL SYMBOL PSI" + + "LIBYZANTINE MUSICAL SYMBOL DASEIABYZANTINE MUSICAL SYMBOL PERISPOMENIBYZ" + + "ANTINE MUSICAL SYMBOL OXEIA EKFONITIKONBYZANTINE MUSICAL SYMBOL OXEIA DI" + + "PLIBYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKONBYZANTINE MUSICAL SYMBOL V" + + "AREIA DIPLIBYZANTINE MUSICAL SYMBOL KATHISTIBYZANTINE MUSICAL SYMBOL SYR" + + "MATIKIBYZANTINE MUSICAL SYMBOL PARAKLITIKIBYZANTINE MUSICAL SYMBOL YPOKR" + + "ISISBYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLIBYZANTINE MUSICAL SYMBOL KRE" + + "MASTIBYZANTINE MUSICAL SYMBOL APESO EKFONITIKONBYZANTINE MUSICAL SYMBOL " + + "EXO EKFONITIKONBYZANTINE MUSICAL SYMBOL TELEIABYZANTINE MUSICAL SYMBOL K" + + "ENTIMATABYZANTINE MUSICAL SYMBOL APOSTROFOSBYZANTINE MUSICAL SYMBOL APOS" + + "TROFOS DIPLIBYZANTINE MUSICAL SYMBOL SYNEVMABYZANTINE MUSICAL SYMBOL THI" + + "TABYZANTINE MUSICAL SYMBOL OLIGON ARCHAIONBYZANTINE MUSICAL SYMBOL GORGO" + + "N ARCHAIONBYZANTINE MUSICAL SYMBOL PSILONBYZANTINE MUSICAL SYMBOL CHAMIL" + + "ONBYZANTINE MUSICAL SYMBOL VATHYBYZANTINE MUSICAL SYMBOL ISON ARCHAIONBY" + + "ZANTINE MUSICAL SYMBOL KENTIMA ARCHAIONBYZANTINE MUSICAL SYMBOL KENTIMAT" + + "A ARCHAIONBYZANTINE MUSICAL SYMBOL SAXIMATABYZANTINE MUSICAL SYMBOL PARI" + + "CHONBYZANTINE MUSICAL SYMBOL STAVROS APODEXIABYZANTINE MUSICAL SYMBOL OX" + + "EIAI ARCHAIONBYZANTINE MUSICAL SYMBOL VAREIAI ARCHAIONBYZANTINE MUSICAL " + + "SYMBOL APODERMA ARCHAIONBYZANTINE MUSICAL SYMBOL APOTHEMABYZANTINE MUSIC" + + "AL SYMBOL KLASMABYZANTINE MUSICAL SYMBOL REVMABYZANTINE MUSICAL SYMBOL P" + + "IASMA ARCHAIONBYZANTINE MUSICAL SYMBOL TINAGMABYZANTINE MUSICAL SYMBOL A" + + "NATRICHISMABYZANTINE MUSICAL SYMBOL SEISMABYZANTINE MUSICAL SYMBOL SYNAG" + + "MA ARCHAIONBYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROUBYZANTINE MUSICA" + + "L SYMBOL OYRANISMA ARCHAIONBYZANTINE MUSICAL SYMBOL THEMABYZANTINE MUSIC" + + "AL SYMBOL LEMOIBYZANTINE MUSICAL SYMBOL DYOBYZANTINE MUSICAL SYMBOL TRIA" + + "BYZANTINE MUSICAL SYMBOL TESSERABYZANTINE MUSICAL SYMBOL KRATIMATABYZANT" + + "INE MUSICAL SYMBOL APESO EXO NEOBYZANTINE MUSICAL SYMBOL FTHORA ARCHAION" + + "BYZANTINE MUSICAL SYMBOL IMIFTHORABYZANTINE MUSICAL SYMBOL TROMIKON ARCH") + ("" + + "AIONBYZANTINE MUSICAL SYMBOL KATAVA TROMIKONBYZANTINE MUSICAL SYMBOL PEL" + + "ASTONBYZANTINE MUSICAL SYMBOL PSIFISTONBYZANTINE MUSICAL SYMBOL KONTEVMA" + + "BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAIONBYZANTINE MUSICAL SYMBOL RAPIS" + + "MABYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAIONBYZANTINE MUSICAL SYMBOL " + + "PARAKLITIKI ARCHAIONBYZANTINE MUSICAL SYMBOL ICHADINBYZANTINE MUSICAL SY" + + "MBOL NANABYZANTINE MUSICAL SYMBOL PETASMABYZANTINE MUSICAL SYMBOL KONTEV" + + "MA ALLOBYZANTINE MUSICAL SYMBOL TROMIKON ALLOBYZANTINE MUSICAL SYMBOL ST" + + "RAGGISMATABYZANTINE MUSICAL SYMBOL GRONTHISMATABYZANTINE MUSICAL SYMBOL " + + "ISON NEOBYZANTINE MUSICAL SYMBOL OLIGON NEOBYZANTINE MUSICAL SYMBOL OXEI" + + "A NEOBYZANTINE MUSICAL SYMBOL PETASTIBYZANTINE MUSICAL SYMBOL KOUFISMABY" + + "ZANTINE MUSICAL SYMBOL PETASTOKOUFISMABYZANTINE MUSICAL SYMBOL KRATIMOKO" + + "UFISMABYZANTINE MUSICAL SYMBOL PELASTON NEOBYZANTINE MUSICAL SYMBOL KENT" + + "IMATA NEO ANOBYZANTINE MUSICAL SYMBOL KENTIMA NEO ANOBYZANTINE MUSICAL S" + + "YMBOL YPSILIBYZANTINE MUSICAL SYMBOL APOSTROFOS NEOBYZANTINE MUSICAL SYM" + + "BOL APOSTROFOI SYNDESMOS NEOBYZANTINE MUSICAL SYMBOL YPORROIBYZANTINE MU" + + "SICAL SYMBOL KRATIMOYPORROONBYZANTINE MUSICAL SYMBOL ELAFRONBYZANTINE MU" + + "SICAL SYMBOL CHAMILIBYZANTINE MUSICAL SYMBOL MIKRON ISONBYZANTINE MUSICA" + + "L SYMBOL VAREIA NEOBYZANTINE MUSICAL SYMBOL PIASMA NEOBYZANTINE MUSICAL " + + "SYMBOL PSIFISTON NEOBYZANTINE MUSICAL SYMBOL OMALONBYZANTINE MUSICAL SYM" + + "BOL ANTIKENOMABYZANTINE MUSICAL SYMBOL LYGISMABYZANTINE MUSICAL SYMBOL P" + + "ARAKLITIKI NEOBYZANTINE MUSICAL SYMBOL PARAKALESMA NEOBYZANTINE MUSICAL " + + "SYMBOL ETERON PARAKALESMABYZANTINE MUSICAL SYMBOL KYLISMABYZANTINE MUSIC" + + "AL SYMBOL ANTIKENOKYLISMABYZANTINE MUSICAL SYMBOL TROMIKON NEOBYZANTINE " + + "MUSICAL SYMBOL EKSTREPTONBYZANTINE MUSICAL SYMBOL SYNAGMA NEOBYZANTINE M" + + "USICAL SYMBOL SYRMABYZANTINE MUSICAL SYMBOL CHOREVMA NEOBYZANTINE MUSICA" + + "L SYMBOL EPEGERMABYZANTINE MUSICAL SYMBOL SEISMA NEOBYZANTINE MUSICAL SY" + + "MBOL XIRON KLASMABYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTONBYZANTINE MUSI" + + "CAL SYMBOL PSIFISTOLYGISMABYZANTINE MUSICAL SYMBOL TROMIKOLYGISMABYZANTI" + + "NE MUSICAL SYMBOL TROMIKOPARAKALESMABYZANTINE MUSICAL SYMBOL PSIFISTOPAR" + + "AKALESMABYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMABYZANTINE MUSICAL SYMBOL " + + "PSIFISTOSYNAGMABYZANTINE MUSICAL SYMBOL GORGOSYNTHETONBYZANTINE MUSICAL " + + "SYMBOL ARGOSYNTHETONBYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETONBYZANTI" + + "NE MUSICAL SYMBOL OYRANISMA NEOBYZANTINE MUSICAL SYMBOL THEMATISMOS ESOB" + + "YZANTINE MUSICAL SYMBOL THEMATISMOS EXOBYZANTINE MUSICAL SYMBOL THEMA AP" + + "LOUNBYZANTINE MUSICAL SYMBOL THES KAI APOTHESBYZANTINE MUSICAL SYMBOL KA" + + "TAVASMABYZANTINE MUSICAL SYMBOL ENDOFONONBYZANTINE MUSICAL SYMBOL YFEN K" + + "ATOBYZANTINE MUSICAL SYMBOL YFEN ANOBYZANTINE MUSICAL SYMBOL STAVROSBYZA" + + "NTINE MUSICAL SYMBOL KLASMA ANOBYZANTINE MUSICAL SYMBOL DIPLI ARCHAIONBY" + + "ZANTINE MUSICAL SYMBOL KRATIMA ARCHAIONBYZANTINE MUSICAL SYMBOL KRATIMA " + + "ALLOBYZANTINE MUSICAL SYMBOL KRATIMA NEOBYZANTINE MUSICAL SYMBOL APODERM" + + "A NEOBYZANTINE MUSICAL SYMBOL APLIBYZANTINE MUSICAL SYMBOL DIPLIBYZANTIN" + + "E MUSICAL SYMBOL TRIPLIBYZANTINE MUSICAL SYMBOL TETRAPLIBYZANTINE MUSICA" + + "L SYMBOL KORONISBYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOUBYZANTINE MU" + + "SICAL SYMBOL LEIMMA DYO CHRONONBYZANTINE MUSICAL SYMBOL LEIMMA TRION CHR" + + "ONONBYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONONBYZANTINE MUSICAL SY" + + "MBOL LEIMMA IMISEOS CHRONOUBYZANTINE MUSICAL SYMBOL GORGON NEO ANOBYZANT" + + "INE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERABYZANTINE MUSICAL SYMBOL" + + " GORGON PARESTIGMENON DEXIABYZANTINE MUSICAL SYMBOL DIGORGONBYZANTINE MU" + + "SICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATOBYZANTINE MUSICAL SYMBO" + + "L DIGORGON PARESTIGMENON ARISTERA ANOBYZANTINE MUSICAL SYMBOL DIGORGON P" + + "ARESTIGMENON DEXIABYZANTINE MUSICAL SYMBOL TRIGORGONBYZANTINE MUSICAL SY" + + "MBOL ARGONBYZANTINE MUSICAL SYMBOL IMIDIARGONBYZANTINE MUSICAL SYMBOL DI" + + "ARGONBYZANTINE MUSICAL SYMBOL AGOGI POLI ARGIBYZANTINE MUSICAL SYMBOL AG" + + "OGI ARGOTERIBYZANTINE MUSICAL SYMBOL AGOGI ARGIBYZANTINE MUSICAL SYMBOL " + + "AGOGI METRIABYZANTINE MUSICAL SYMBOL AGOGI MESIBYZANTINE MUSICAL SYMBOL " + + "AGOGI GORGIBYZANTINE MUSICAL SYMBOL AGOGI GORGOTERIBYZANTINE MUSICAL SYM" + + "BOL AGOGI POLI GORGIBYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOSBYZANT" + + "INE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOSBYZANTINE MUSICAL SYMBOL MA" + + "RTYRIA DEYTEROS ICHOSBYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICH" + + "OSBYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOSBYZANTINE MUSICAL SYMBOL" + + " MARTYRIA TRIFONIASBYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOSBYZAN" + + "TINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOSBYZANTINE MUSICAL SYM" + + "BOL MARTYRIA LEGETOS ICHOSBYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHO" + + "SBYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOSBYZANTINE MUSICAL SYMBO") + ("" + + "L APOSTROFOI TELOUS ICHIMATOSBYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFON" + + "IASBYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIASBYZANTINE MUSICAL SYMBOL" + + " FANEROSIS DIFONIASBYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOSBYZANTIN" + + "E MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOSBYZANTINE MUSICAL SYMBOL MARTY" + + "RIA PLAGIOS TETARTOS ICHOSBYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUNBY" + + "ZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUNBYZANTINE MUSICAL SYMBOL ENAR" + + "XIS KAI FTHORA VOUBYZANTINE MUSICAL SYMBOL IMIFONONBYZANTINE MUSICAL SYM" + + "BOL IMIFTHORONBYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOUBYZ" + + "ANTINE MUSICAL SYMBOL FTHORA DIATONIKI PABYZANTINE MUSICAL SYMBOL FTHORA" + + " DIATONIKI NANABYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOSBYZANTINE MUSIC" + + "AL SYMBOL FTHORA DIATONIKI DIBYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIA" + + "TONON DIBYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KEBYZANTINE MUSICAL SY" + + "MBOL FTHORA DIATONIKI ZOBYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KAT" + + "OBYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANOBYZANTINE MUSICAL SYMBO" + + "L FTHORA MALAKON CHROMA DIFONIASBYZANTINE MUSICAL SYMBOL FTHORA MALAKON " + + "CHROMA MONOFONIASBYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASISBYZ" + + "ANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFIBYZANTINE MUSICAL SYMB" + + "OL FTHORA NENANOBYZANTINE MUSICAL SYMBOL CHROA ZYGOSBYZANTINE MUSICAL SY" + + "MBOL CHROA KLITONBYZANTINE MUSICAL SYMBOL CHROA SPATHIBYZANTINE MUSICAL " + + "SYMBOL FTHORA I YFESIS TETARTIMORIONBYZANTINE MUSICAL SYMBOL FTHORA ENAR" + + "MONIOS ANTIFONIABYZANTINE MUSICAL SYMBOL YFESIS TRITIMORIONBYZANTINE MUS" + + "ICAL SYMBOL DIESIS TRITIMORIONBYZANTINE MUSICAL SYMBOL DIESIS TETARTIMOR" + + "IONBYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATABYZANTINE MUSICAL SY" + + "MBOL DIESIS MONOGRAMMOS TESSERA DODEKATABYZANTINE MUSICAL SYMBOL DIESIS " + + "DIGRAMMOS EX DODEKATABYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DOD" + + "EKATABYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATABYZANTINE MUSICAL " + + "SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATABYZANTINE MUSICAL SYMBOL YFESI" + + "S DIGRAMMOS EX DODEKATABYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO D" + + "ODEKATABYZANTINE MUSICAL SYMBOL GENIKI DIESISBYZANTINE MUSICAL SYMBOL GE" + + "NIKI YFESISBYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRIBYZANTINE MUSICAL" + + " SYMBOL DIASTOLI APLI MEGALIBYZANTINE MUSICAL SYMBOL DIASTOLI DIPLIBYZAN" + + "TINE MUSICAL SYMBOL DIASTOLI THESEOSBYZANTINE MUSICAL SYMBOL SIMANSIS TH" + + "ESEOSBYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOUBYZANTINE MUSICAL " + + "SYMBOL SIMANSIS THESEOS TRISIMOUBYZANTINE MUSICAL SYMBOL SIMANSIS THESEO" + + "S TETRASIMOUBYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOSBYZANTINE MUSICAL SY" + + "MBOL SIMANSIS ARSEOS DISIMOUBYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRI" + + "SIMOUBYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOUBYZANTINE MUSICA" + + "L SYMBOL DIGRAMMA GGBYZANTINE MUSICAL SYMBOL DIFTOGGOS OUBYZANTINE MUSIC" + + "AL SYMBOL STIGMABYZANTINE MUSICAL SYMBOL ARKTIKO PABYZANTINE MUSICAL SYM" + + "BOL ARKTIKO VOUBYZANTINE MUSICAL SYMBOL ARKTIKO GABYZANTINE MUSICAL SYMB" + + "OL ARKTIKO DIBYZANTINE MUSICAL SYMBOL ARKTIKO KEBYZANTINE MUSICAL SYMBOL" + + " ARKTIKO ZOBYZANTINE MUSICAL SYMBOL ARKTIKO NIBYZANTINE MUSICAL SYMBOL K" + + "ENTIMATA NEO MESOBYZANTINE MUSICAL SYMBOL KENTIMA NEO MESOBYZANTINE MUSI" + + "CAL SYMBOL KENTIMATA NEO KATOBYZANTINE MUSICAL SYMBOL KENTIMA NEO KATOBY" + + "ZANTINE MUSICAL SYMBOL KLASMA KATOBYZANTINE MUSICAL SYMBOL GORGON NEO KA" + + "TOMUSICAL SYMBOL SINGLE BARLINEMUSICAL SYMBOL DOUBLE BARLINEMUSICAL SYMB" + + "OL FINAL BARLINEMUSICAL SYMBOL REVERSE FINAL BARLINEMUSICAL SYMBOL DASHE" + + "D BARLINEMUSICAL SYMBOL SHORT BARLINEMUSICAL SYMBOL LEFT REPEAT SIGNMUSI" + + "CAL SYMBOL RIGHT REPEAT SIGNMUSICAL SYMBOL REPEAT DOTSMUSICAL SYMBOL DAL" + + " SEGNOMUSICAL SYMBOL DA CAPOMUSICAL SYMBOL SEGNOMUSICAL SYMBOL CODAMUSIC" + + "AL SYMBOL REPEATED FIGURE-1MUSICAL SYMBOL REPEATED FIGURE-2MUSICAL SYMBO" + + "L REPEATED FIGURE-3MUSICAL SYMBOL FERMATAMUSICAL SYMBOL FERMATA BELOWMUS" + + "ICAL SYMBOL BREATH MARKMUSICAL SYMBOL CAESURAMUSICAL SYMBOL BRACEMUSICAL" + + " SYMBOL BRACKETMUSICAL SYMBOL ONE-LINE STAFFMUSICAL SYMBOL TWO-LINE STAF" + + "FMUSICAL SYMBOL THREE-LINE STAFFMUSICAL SYMBOL FOUR-LINE STAFFMUSICAL SY" + + "MBOL FIVE-LINE STAFFMUSICAL SYMBOL SIX-LINE STAFFMUSICAL SYMBOL SIX-STRI" + + "NG FRETBOARDMUSICAL SYMBOL FOUR-STRING FRETBOARDMUSICAL SYMBOL G CLEFMUS" + + "ICAL SYMBOL G CLEF OTTAVA ALTAMUSICAL SYMBOL G CLEF OTTAVA BASSAMUSICAL " + + "SYMBOL C CLEFMUSICAL SYMBOL F CLEFMUSICAL SYMBOL F CLEF OTTAVA ALTAMUSIC" + + "AL SYMBOL F CLEF OTTAVA BASSAMUSICAL SYMBOL DRUM CLEF-1MUSICAL SYMBOL DR" + + "UM CLEF-2MUSICAL SYMBOL MULTIPLE MEASURE RESTMUSICAL SYMBOL DOUBLE SHARP" + + "MUSICAL SYMBOL DOUBLE FLATMUSICAL SYMBOL FLAT UPMUSICAL SYMBOL FLAT DOWN" + + "MUSICAL SYMBOL NATURAL UPMUSICAL SYMBOL NATURAL DOWNMUSICAL SYMBOL SHARP" + + " UPMUSICAL SYMBOL SHARP DOWNMUSICAL SYMBOL QUARTER TONE SHARPMUSICAL SYM") + ("" + + "BOL QUARTER TONE FLATMUSICAL SYMBOL COMMON TIMEMUSICAL SYMBOL CUT TIMEMU" + + "SICAL SYMBOL OTTAVA ALTAMUSICAL SYMBOL OTTAVA BASSAMUSICAL SYMBOL QUINDI" + + "CESIMA ALTAMUSICAL SYMBOL QUINDICESIMA BASSAMUSICAL SYMBOL MULTI RESTMUS" + + "ICAL SYMBOL WHOLE RESTMUSICAL SYMBOL HALF RESTMUSICAL SYMBOL QUARTER RES" + + "TMUSICAL SYMBOL EIGHTH RESTMUSICAL SYMBOL SIXTEENTH RESTMUSICAL SYMBOL T" + + "HIRTY-SECOND RESTMUSICAL SYMBOL SIXTY-FOURTH RESTMUSICAL SYMBOL ONE HUND" + + "RED TWENTY-EIGHTH RESTMUSICAL SYMBOL X NOTEHEADMUSICAL SYMBOL PLUS NOTEH" + + "EADMUSICAL SYMBOL CIRCLE X NOTEHEADMUSICAL SYMBOL SQUARE NOTEHEAD WHITEM" + + "USICAL SYMBOL SQUARE NOTEHEAD BLACKMUSICAL SYMBOL TRIANGLE NOTEHEAD UP W" + + "HITEMUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACKMUSICAL SYMBOL TRIANGLE NOT" + + "EHEAD LEFT WHITEMUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACKMUSICAL SYMBO" + + "L TRIANGLE NOTEHEAD RIGHT WHITEMUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BL" + + "ACKMUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITEMUSICAL SYMBOL TRIANGLE NO" + + "TEHEAD DOWN BLACKMUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITEMUSICAL " + + "SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACKMUSICAL SYMBOL MOON NOTEHEAD WHIT" + + "EMUSICAL SYMBOL MOON NOTEHEAD BLACKMUSICAL SYMBOL TRIANGLE-ROUND NOTEHEA" + + "D DOWN WHITEMUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACKMUSICAL SYM" + + "BOL PARENTHESIS NOTEHEADMUSICAL SYMBOL VOID NOTEHEADMUSICAL SYMBOL NOTEH" + + "EAD BLACKMUSICAL SYMBOL NULL NOTEHEADMUSICAL SYMBOL CLUSTER NOTEHEAD WHI" + + "TEMUSICAL SYMBOL CLUSTER NOTEHEAD BLACKMUSICAL SYMBOL BREVEMUSICAL SYMBO" + + "L WHOLE NOTEMUSICAL SYMBOL HALF NOTEMUSICAL SYMBOL QUARTER NOTEMUSICAL S" + + "YMBOL EIGHTH NOTEMUSICAL SYMBOL SIXTEENTH NOTEMUSICAL SYMBOL THIRTY-SECO" + + "ND NOTEMUSICAL SYMBOL SIXTY-FOURTH NOTEMUSICAL SYMBOL ONE HUNDRED TWENTY" + + "-EIGHTH NOTEMUSICAL SYMBOL COMBINING STEMMUSICAL SYMBOL COMBINING SPRECH" + + "GESANG STEMMUSICAL SYMBOL COMBINING TREMOLO-1MUSICAL SYMBOL COMBINING TR" + + "EMOLO-2MUSICAL SYMBOL COMBINING TREMOLO-3MUSICAL SYMBOL FINGERED TREMOLO" + + "-1MUSICAL SYMBOL FINGERED TREMOLO-2MUSICAL SYMBOL FINGERED TREMOLO-3MUSI" + + "CAL SYMBOL COMBINING AUGMENTATION DOTMUSICAL SYMBOL COMBINING FLAG-1MUSI" + + "CAL SYMBOL COMBINING FLAG-2MUSICAL SYMBOL COMBINING FLAG-3MUSICAL SYMBOL" + + " COMBINING FLAG-4MUSICAL SYMBOL COMBINING FLAG-5MUSICAL SYMBOL BEGIN BEA" + + "MMUSICAL SYMBOL END BEAMMUSICAL SYMBOL BEGIN TIEMUSICAL SYMBOL END TIEMU" + + "SICAL SYMBOL BEGIN SLURMUSICAL SYMBOL END SLURMUSICAL SYMBOL BEGIN PHRAS" + + "EMUSICAL SYMBOL END PHRASEMUSICAL SYMBOL COMBINING ACCENTMUSICAL SYMBOL " + + "COMBINING STACCATOMUSICAL SYMBOL COMBINING TENUTOMUSICAL SYMBOL COMBININ" + + "G STACCATISSIMOMUSICAL SYMBOL COMBINING MARCATOMUSICAL SYMBOL COMBINING " + + "MARCATO-STACCATOMUSICAL SYMBOL COMBINING ACCENT-STACCATOMUSICAL SYMBOL C" + + "OMBINING LOUREMUSICAL SYMBOL ARPEGGIATO UPMUSICAL SYMBOL ARPEGGIATO DOWN" + + "MUSICAL SYMBOL COMBINING DOITMUSICAL SYMBOL COMBINING RIPMUSICAL SYMBOL " + + "COMBINING FLIPMUSICAL SYMBOL COMBINING SMEARMUSICAL SYMBOL COMBINING BEN" + + "DMUSICAL SYMBOL COMBINING DOUBLE TONGUEMUSICAL SYMBOL COMBINING TRIPLE T" + + "ONGUEMUSICAL SYMBOL RINFORZANDOMUSICAL SYMBOL SUBITOMUSICAL SYMBOL ZMUSI" + + "CAL SYMBOL PIANOMUSICAL SYMBOL MEZZOMUSICAL SYMBOL FORTEMUSICAL SYMBOL C" + + "RESCENDOMUSICAL SYMBOL DECRESCENDOMUSICAL SYMBOL GRACE NOTE SLASHMUSICAL" + + " SYMBOL GRACE NOTE NO SLASHMUSICAL SYMBOL TRMUSICAL SYMBOL TURNMUSICAL S" + + "YMBOL INVERTED TURNMUSICAL SYMBOL TURN SLASHMUSICAL SYMBOL TURN UPMUSICA" + + "L SYMBOL ORNAMENT STROKE-1MUSICAL SYMBOL ORNAMENT STROKE-2MUSICAL SYMBOL" + + " ORNAMENT STROKE-3MUSICAL SYMBOL ORNAMENT STROKE-4MUSICAL SYMBOL ORNAMEN" + + "T STROKE-5MUSICAL SYMBOL ORNAMENT STROKE-6MUSICAL SYMBOL ORNAMENT STROKE" + + "-7MUSICAL SYMBOL ORNAMENT STROKE-8MUSICAL SYMBOL ORNAMENT STROKE-9MUSICA" + + "L SYMBOL ORNAMENT STROKE-10MUSICAL SYMBOL ORNAMENT STROKE-11MUSICAL SYMB" + + "OL HAUPTSTIMMEMUSICAL SYMBOL NEBENSTIMMEMUSICAL SYMBOL END OF STIMMEMUSI" + + "CAL SYMBOL DEGREE SLASHMUSICAL SYMBOL COMBINING DOWN BOWMUSICAL SYMBOL C" + + "OMBINING UP BOWMUSICAL SYMBOL COMBINING HARMONICMUSICAL SYMBOL COMBINING" + + " SNAP PIZZICATOMUSICAL SYMBOL PEDAL MARKMUSICAL SYMBOL PEDAL UP MARKMUSI" + + "CAL SYMBOL HALF PEDAL MARKMUSICAL SYMBOL GLISSANDO UPMUSICAL SYMBOL GLIS" + + "SANDO DOWNMUSICAL SYMBOL WITH FINGERNAILSMUSICAL SYMBOL DAMPMUSICAL SYMB" + + "OL DAMP ALLMUSICAL SYMBOL MAXIMAMUSICAL SYMBOL LONGAMUSICAL SYMBOL BREVI" + + "SMUSICAL SYMBOL SEMIBREVIS WHITEMUSICAL SYMBOL SEMIBREVIS BLACKMUSICAL S" + + "YMBOL MINIMAMUSICAL SYMBOL MINIMA BLACKMUSICAL SYMBOL SEMIMINIMA WHITEMU" + + "SICAL SYMBOL SEMIMINIMA BLACKMUSICAL SYMBOL FUSA WHITEMUSICAL SYMBOL FUS" + + "A BLACKMUSICAL SYMBOL LONGA PERFECTA RESTMUSICAL SYMBOL LONGA IMPERFECTA" + + " RESTMUSICAL SYMBOL BREVIS RESTMUSICAL SYMBOL SEMIBREVIS RESTMUSICAL SYM" + + "BOL MINIMA RESTMUSICAL SYMBOL SEMIMINIMA RESTMUSICAL SYMBOL TEMPUS PERFE" + + "CTUM CUM PROLATIONE PERFECTAMUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIO") + ("" + + "NE IMPERFECTAMUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIM" + + "INUTION-1MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTAMUSICA" + + "L SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTAMUSICAL SYMBOL TEMP" + + "US IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1MUSICAL SYMBOL TEMP" + + "US IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2MUSICAL SYMBOL TEMP" + + "US IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3MUSICAL SYMBOL CROI" + + "XMUSICAL SYMBOL GREGORIAN C CLEFMUSICAL SYMBOL GREGORIAN F CLEFMUSICAL S" + + "YMBOL SQUARE BMUSICAL SYMBOL VIRGAMUSICAL SYMBOL PODATUSMUSICAL SYMBOL C" + + "LIVISMUSICAL SYMBOL SCANDICUSMUSICAL SYMBOL CLIMACUSMUSICAL SYMBOL TORCU" + + "LUSMUSICAL SYMBOL PORRECTUSMUSICAL SYMBOL PORRECTUS FLEXUSMUSICAL SYMBOL" + + " SCANDICUS FLEXUSMUSICAL SYMBOL TORCULUS RESUPINUSMUSICAL SYMBOL PES SUB" + + "PUNCTISMUSICAL SYMBOL KIEVAN C CLEFMUSICAL SYMBOL KIEVAN END OF PIECEMUS" + + "ICAL SYMBOL KIEVAN FINAL NOTEMUSICAL SYMBOL KIEVAN RECITATIVE MARKMUSICA" + + "L SYMBOL KIEVAN WHOLE NOTEMUSICAL SYMBOL KIEVAN HALF NOTEMUSICAL SYMBOL " + + "KIEVAN QUARTER NOTE STEM DOWNMUSICAL SYMBOL KIEVAN QUARTER NOTE STEM UPM" + + "USICAL SYMBOL KIEVAN EIGHTH NOTE STEM DOWNMUSICAL SYMBOL KIEVAN EIGHTH N" + + "OTE STEM UPMUSICAL SYMBOL KIEVAN FLAT SIGNGREEK VOCAL NOTATION SYMBOL-1G" + + "REEK VOCAL NOTATION SYMBOL-2GREEK VOCAL NOTATION SYMBOL-3GREEK VOCAL NOT" + + "ATION SYMBOL-4GREEK VOCAL NOTATION SYMBOL-5GREEK VOCAL NOTATION SYMBOL-6" + + "GREEK VOCAL NOTATION SYMBOL-7GREEK VOCAL NOTATION SYMBOL-8GREEK VOCAL NO" + + "TATION SYMBOL-9GREEK VOCAL NOTATION SYMBOL-10GREEK VOCAL NOTATION SYMBOL" + + "-11GREEK VOCAL NOTATION SYMBOL-12GREEK VOCAL NOTATION SYMBOL-13GREEK VOC" + + "AL NOTATION SYMBOL-14GREEK VOCAL NOTATION SYMBOL-15GREEK VOCAL NOTATION " + + "SYMBOL-16GREEK VOCAL NOTATION SYMBOL-17GREEK VOCAL NOTATION SYMBOL-18GRE" + + "EK VOCAL NOTATION SYMBOL-19GREEK VOCAL NOTATION SYMBOL-20GREEK VOCAL NOT" + + "ATION SYMBOL-21GREEK VOCAL NOTATION SYMBOL-22GREEK VOCAL NOTATION SYMBOL" + + "-23GREEK VOCAL NOTATION SYMBOL-24GREEK VOCAL NOTATION SYMBOL-50GREEK VOC" + + "AL NOTATION SYMBOL-51GREEK VOCAL NOTATION SYMBOL-52GREEK VOCAL NOTATION " + + "SYMBOL-53GREEK VOCAL NOTATION SYMBOL-54GREEK INSTRUMENTAL NOTATION SYMBO" + + "L-1GREEK INSTRUMENTAL NOTATION SYMBOL-2GREEK INSTRUMENTAL NOTATION SYMBO" + + "L-4GREEK INSTRUMENTAL NOTATION SYMBOL-5GREEK INSTRUMENTAL NOTATION SYMBO" + + "L-7GREEK INSTRUMENTAL NOTATION SYMBOL-8GREEK INSTRUMENTAL NOTATION SYMBO" + + "L-11GREEK INSTRUMENTAL NOTATION SYMBOL-12GREEK INSTRUMENTAL NOTATION SYM" + + "BOL-13GREEK INSTRUMENTAL NOTATION SYMBOL-14GREEK INSTRUMENTAL NOTATION S" + + "YMBOL-17GREEK INSTRUMENTAL NOTATION SYMBOL-18GREEK INSTRUMENTAL NOTATION" + + " SYMBOL-19GREEK INSTRUMENTAL NOTATION SYMBOL-23GREEK INSTRUMENTAL NOTATI" + + "ON SYMBOL-24GREEK INSTRUMENTAL NOTATION SYMBOL-25GREEK INSTRUMENTAL NOTA" + + "TION SYMBOL-26GREEK INSTRUMENTAL NOTATION SYMBOL-27GREEK INSTRUMENTAL NO" + + "TATION SYMBOL-29GREEK INSTRUMENTAL NOTATION SYMBOL-30GREEK INSTRUMENTAL " + + "NOTATION SYMBOL-32GREEK INSTRUMENTAL NOTATION SYMBOL-36GREEK INSTRUMENTA" + + "L NOTATION SYMBOL-37GREEK INSTRUMENTAL NOTATION SYMBOL-38GREEK INSTRUMEN" + + "TAL NOTATION SYMBOL-39GREEK INSTRUMENTAL NOTATION SYMBOL-40GREEK INSTRUM" + + "ENTAL NOTATION SYMBOL-42GREEK INSTRUMENTAL NOTATION SYMBOL-43GREEK INSTR" + + "UMENTAL NOTATION SYMBOL-45GREEK INSTRUMENTAL NOTATION SYMBOL-47GREEK INS" + + "TRUMENTAL NOTATION SYMBOL-48GREEK INSTRUMENTAL NOTATION SYMBOL-49GREEK I" + + "NSTRUMENTAL NOTATION SYMBOL-50GREEK INSTRUMENTAL NOTATION SYMBOL-51GREEK" + + " INSTRUMENTAL NOTATION SYMBOL-52GREEK INSTRUMENTAL NOTATION SYMBOL-53GRE" + + "EK INSTRUMENTAL NOTATION SYMBOL-54COMBINING GREEK MUSICAL TRISEMECOMBINI" + + "NG GREEK MUSICAL TETRASEMECOMBINING GREEK MUSICAL PENTASEMEGREEK MUSICAL" + + " LEIMMAMONOGRAM FOR EARTHDIGRAM FOR HEAVENLY EARTHDIGRAM FOR HUMAN EARTH" + + "DIGRAM FOR EARTHLY HEAVENDIGRAM FOR EARTHLY HUMANDIGRAM FOR EARTHTETRAGR" + + "AM FOR CENTRETETRAGRAM FOR FULL CIRCLETETRAGRAM FOR MIREDTETRAGRAM FOR B" + + "ARRIERTETRAGRAM FOR KEEPING SMALLTETRAGRAM FOR CONTRARIETYTETRAGRAM FOR " + + "ASCENTTETRAGRAM FOR OPPOSITIONTETRAGRAM FOR BRANCHING OUTTETRAGRAM FOR D" + + "EFECTIVENESS OR DISTORTIONTETRAGRAM FOR DIVERGENCETETRAGRAM FOR YOUTHFUL" + + "NESSTETRAGRAM FOR INCREASETETRAGRAM FOR PENETRATIONTETRAGRAM FOR REACHTE" + + "TRAGRAM FOR CONTACTTETRAGRAM FOR HOLDING BACKTETRAGRAM FOR WAITINGTETRAG" + + "RAM FOR FOLLOWINGTETRAGRAM FOR ADVANCETETRAGRAM FOR RELEASETETRAGRAM FOR" + + " RESISTANCETETRAGRAM FOR EASETETRAGRAM FOR JOYTETRAGRAM FOR CONTENTIONTE" + + "TRAGRAM FOR ENDEAVOURTETRAGRAM FOR DUTIESTETRAGRAM FOR CHANGETETRAGRAM F" + + "OR DECISIVENESSTETRAGRAM FOR BOLD RESOLUTIONTETRAGRAM FOR PACKINGTETRAGR" + + "AM FOR LEGIONTETRAGRAM FOR CLOSENESSTETRAGRAM FOR KINSHIPTETRAGRAM FOR G" + + "ATHERINGTETRAGRAM FOR STRENGTHTETRAGRAM FOR PURITYTETRAGRAM FOR FULLNESS" + + "TETRAGRAM FOR RESIDENCETETRAGRAM FOR LAW OR MODELTETRAGRAM FOR RESPONSET") + ("" + + "ETRAGRAM FOR GOING TO MEETTETRAGRAM FOR ENCOUNTERSTETRAGRAM FOR STOVETET" + + "RAGRAM FOR GREATNESSTETRAGRAM FOR ENLARGEMENTTETRAGRAM FOR PATTERNTETRAG" + + "RAM FOR RITUALTETRAGRAM FOR FLIGHTTETRAGRAM FOR VASTNESS OR WASTINGTETRA" + + "GRAM FOR CONSTANCYTETRAGRAM FOR MEASURETETRAGRAM FOR ETERNITYTETRAGRAM F" + + "OR UNITYTETRAGRAM FOR DIMINISHMENTTETRAGRAM FOR CLOSED MOUTHTETRAGRAM FO" + + "R GUARDEDNESSTETRAGRAM FOR GATHERING INTETRAGRAM FOR MASSINGTETRAGRAM FO" + + "R ACCUMULATIONTETRAGRAM FOR EMBELLISHMENTTETRAGRAM FOR DOUBTTETRAGRAM FO" + + "R WATCHTETRAGRAM FOR SINKINGTETRAGRAM FOR INNERTETRAGRAM FOR DEPARTURETE" + + "TRAGRAM FOR DARKENINGTETRAGRAM FOR DIMMINGTETRAGRAM FOR EXHAUSTIONTETRAG" + + "RAM FOR SEVERANCETETRAGRAM FOR STOPPAGETETRAGRAM FOR HARDNESSTETRAGRAM F" + + "OR COMPLETIONTETRAGRAM FOR CLOSURETETRAGRAM FOR FAILURETETRAGRAM FOR AGG" + + "RAVATIONTETRAGRAM FOR COMPLIANCETETRAGRAM FOR ON THE VERGETETRAGRAM FOR " + + "DIFFICULTIESTETRAGRAM FOR LABOURINGTETRAGRAM FOR FOSTERINGCOUNTING ROD U" + + "NIT DIGIT ONECOUNTING ROD UNIT DIGIT TWOCOUNTING ROD UNIT DIGIT THREECOU" + + "NTING ROD UNIT DIGIT FOURCOUNTING ROD UNIT DIGIT FIVECOUNTING ROD UNIT D" + + "IGIT SIXCOUNTING ROD UNIT DIGIT SEVENCOUNTING ROD UNIT DIGIT EIGHTCOUNTI" + + "NG ROD UNIT DIGIT NINECOUNTING ROD TENS DIGIT ONECOUNTING ROD TENS DIGIT" + + " TWOCOUNTING ROD TENS DIGIT THREECOUNTING ROD TENS DIGIT FOURCOUNTING RO" + + "D TENS DIGIT FIVECOUNTING ROD TENS DIGIT SIXCOUNTING ROD TENS DIGIT SEVE" + + "NCOUNTING ROD TENS DIGIT EIGHTCOUNTING ROD TENS DIGIT NINEMATHEMATICAL B" + + "OLD CAPITAL AMATHEMATICAL BOLD CAPITAL BMATHEMATICAL BOLD CAPITAL CMATHE" + + "MATICAL BOLD CAPITAL DMATHEMATICAL BOLD CAPITAL EMATHEMATICAL BOLD CAPIT" + + "AL FMATHEMATICAL BOLD CAPITAL GMATHEMATICAL BOLD CAPITAL HMATHEMATICAL B" + + "OLD CAPITAL IMATHEMATICAL BOLD CAPITAL JMATHEMATICAL BOLD CAPITAL KMATHE" + + "MATICAL BOLD CAPITAL LMATHEMATICAL BOLD CAPITAL MMATHEMATICAL BOLD CAPIT" + + "AL NMATHEMATICAL BOLD CAPITAL OMATHEMATICAL BOLD CAPITAL PMATHEMATICAL B" + + "OLD CAPITAL QMATHEMATICAL BOLD CAPITAL RMATHEMATICAL BOLD CAPITAL SMATHE" + + "MATICAL BOLD CAPITAL TMATHEMATICAL BOLD CAPITAL UMATHEMATICAL BOLD CAPIT" + + "AL VMATHEMATICAL BOLD CAPITAL WMATHEMATICAL BOLD CAPITAL XMATHEMATICAL B" + + "OLD CAPITAL YMATHEMATICAL BOLD CAPITAL ZMATHEMATICAL BOLD SMALL AMATHEMA" + + "TICAL BOLD SMALL BMATHEMATICAL BOLD SMALL CMATHEMATICAL BOLD SMALL DMATH" + + "EMATICAL BOLD SMALL EMATHEMATICAL BOLD SMALL FMATHEMATICAL BOLD SMALL GM" + + "ATHEMATICAL BOLD SMALL HMATHEMATICAL BOLD SMALL IMATHEMATICAL BOLD SMALL" + + " JMATHEMATICAL BOLD SMALL KMATHEMATICAL BOLD SMALL LMATHEMATICAL BOLD SM" + + "ALL MMATHEMATICAL BOLD SMALL NMATHEMATICAL BOLD SMALL OMATHEMATICAL BOLD" + + " SMALL PMATHEMATICAL BOLD SMALL QMATHEMATICAL BOLD SMALL RMATHEMATICAL B" + + "OLD SMALL SMATHEMATICAL BOLD SMALL TMATHEMATICAL BOLD SMALL UMATHEMATICA" + + "L BOLD SMALL VMATHEMATICAL BOLD SMALL WMATHEMATICAL BOLD SMALL XMATHEMAT" + + "ICAL BOLD SMALL YMATHEMATICAL BOLD SMALL ZMATHEMATICAL ITALIC CAPITAL AM" + + "ATHEMATICAL ITALIC CAPITAL BMATHEMATICAL ITALIC CAPITAL CMATHEMATICAL IT" + + "ALIC CAPITAL DMATHEMATICAL ITALIC CAPITAL EMATHEMATICAL ITALIC CAPITAL F" + + "MATHEMATICAL ITALIC CAPITAL GMATHEMATICAL ITALIC CAPITAL HMATHEMATICAL I" + + "TALIC CAPITAL IMATHEMATICAL ITALIC CAPITAL JMATHEMATICAL ITALIC CAPITAL " + + "KMATHEMATICAL ITALIC CAPITAL LMATHEMATICAL ITALIC CAPITAL MMATHEMATICAL " + + "ITALIC CAPITAL NMATHEMATICAL ITALIC CAPITAL OMATHEMATICAL ITALIC CAPITAL" + + " PMATHEMATICAL ITALIC CAPITAL QMATHEMATICAL ITALIC CAPITAL RMATHEMATICAL" + + " ITALIC CAPITAL SMATHEMATICAL ITALIC CAPITAL TMATHEMATICAL ITALIC CAPITA" + + "L UMATHEMATICAL ITALIC CAPITAL VMATHEMATICAL ITALIC CAPITAL WMATHEMATICA" + + "L ITALIC CAPITAL XMATHEMATICAL ITALIC CAPITAL YMATHEMATICAL ITALIC CAPIT" + + "AL ZMATHEMATICAL ITALIC SMALL AMATHEMATICAL ITALIC SMALL BMATHEMATICAL I" + + "TALIC SMALL CMATHEMATICAL ITALIC SMALL DMATHEMATICAL ITALIC SMALL EMATHE" + + "MATICAL ITALIC SMALL FMATHEMATICAL ITALIC SMALL GMATHEMATICAL ITALIC SMA" + + "LL IMATHEMATICAL ITALIC SMALL JMATHEMATICAL ITALIC SMALL KMATHEMATICAL I" + + "TALIC SMALL LMATHEMATICAL ITALIC SMALL MMATHEMATICAL ITALIC SMALL NMATHE" + + "MATICAL ITALIC SMALL OMATHEMATICAL ITALIC SMALL PMATHEMATICAL ITALIC SMA" + + "LL QMATHEMATICAL ITALIC SMALL RMATHEMATICAL ITALIC SMALL SMATHEMATICAL I" + + "TALIC SMALL TMATHEMATICAL ITALIC SMALL UMATHEMATICAL ITALIC SMALL VMATHE" + + "MATICAL ITALIC SMALL WMATHEMATICAL ITALIC SMALL XMATHEMATICAL ITALIC SMA" + + "LL YMATHEMATICAL ITALIC SMALL ZMATHEMATICAL BOLD ITALIC CAPITAL AMATHEMA" + + "TICAL BOLD ITALIC CAPITAL BMATHEMATICAL BOLD ITALIC CAPITAL CMATHEMATICA" + + "L BOLD ITALIC CAPITAL DMATHEMATICAL BOLD ITALIC CAPITAL EMATHEMATICAL BO" + + "LD ITALIC CAPITAL FMATHEMATICAL BOLD ITALIC CAPITAL GMATHEMATICAL BOLD I" + + "TALIC CAPITAL HMATHEMATICAL BOLD ITALIC CAPITAL IMATHEMATICAL BOLD ITALI" + + "C CAPITAL JMATHEMATICAL BOLD ITALIC CAPITAL KMATHEMATICAL BOLD ITALIC CA") + ("" + + "PITAL LMATHEMATICAL BOLD ITALIC CAPITAL MMATHEMATICAL BOLD ITALIC CAPITA" + + "L NMATHEMATICAL BOLD ITALIC CAPITAL OMATHEMATICAL BOLD ITALIC CAPITAL PM" + + "ATHEMATICAL BOLD ITALIC CAPITAL QMATHEMATICAL BOLD ITALIC CAPITAL RMATHE" + + "MATICAL BOLD ITALIC CAPITAL SMATHEMATICAL BOLD ITALIC CAPITAL TMATHEMATI" + + "CAL BOLD ITALIC CAPITAL UMATHEMATICAL BOLD ITALIC CAPITAL VMATHEMATICAL " + + "BOLD ITALIC CAPITAL WMATHEMATICAL BOLD ITALIC CAPITAL XMATHEMATICAL BOLD" + + " ITALIC CAPITAL YMATHEMATICAL BOLD ITALIC CAPITAL ZMATHEMATICAL BOLD ITA" + + "LIC SMALL AMATHEMATICAL BOLD ITALIC SMALL BMATHEMATICAL BOLD ITALIC SMAL" + + "L CMATHEMATICAL BOLD ITALIC SMALL DMATHEMATICAL BOLD ITALIC SMALL EMATHE" + + "MATICAL BOLD ITALIC SMALL FMATHEMATICAL BOLD ITALIC SMALL GMATHEMATICAL " + + "BOLD ITALIC SMALL HMATHEMATICAL BOLD ITALIC SMALL IMATHEMATICAL BOLD ITA" + + "LIC SMALL JMATHEMATICAL BOLD ITALIC SMALL KMATHEMATICAL BOLD ITALIC SMAL" + + "L LMATHEMATICAL BOLD ITALIC SMALL MMATHEMATICAL BOLD ITALIC SMALL NMATHE" + + "MATICAL BOLD ITALIC SMALL OMATHEMATICAL BOLD ITALIC SMALL PMATHEMATICAL " + + "BOLD ITALIC SMALL QMATHEMATICAL BOLD ITALIC SMALL RMATHEMATICAL BOLD ITA" + + "LIC SMALL SMATHEMATICAL BOLD ITALIC SMALL TMATHEMATICAL BOLD ITALIC SMAL" + + "L UMATHEMATICAL BOLD ITALIC SMALL VMATHEMATICAL BOLD ITALIC SMALL WMATHE" + + "MATICAL BOLD ITALIC SMALL XMATHEMATICAL BOLD ITALIC SMALL YMATHEMATICAL " + + "BOLD ITALIC SMALL ZMATHEMATICAL SCRIPT CAPITAL AMATHEMATICAL SCRIPT CAPI" + + "TAL CMATHEMATICAL SCRIPT CAPITAL DMATHEMATICAL SCRIPT CAPITAL GMATHEMATI" + + "CAL SCRIPT CAPITAL JMATHEMATICAL SCRIPT CAPITAL KMATHEMATICAL SCRIPT CAP" + + "ITAL NMATHEMATICAL SCRIPT CAPITAL OMATHEMATICAL SCRIPT CAPITAL PMATHEMAT" + + "ICAL SCRIPT CAPITAL QMATHEMATICAL SCRIPT CAPITAL SMATHEMATICAL SCRIPT CA" + + "PITAL TMATHEMATICAL SCRIPT CAPITAL UMATHEMATICAL SCRIPT CAPITAL VMATHEMA" + + "TICAL SCRIPT CAPITAL WMATHEMATICAL SCRIPT CAPITAL XMATHEMATICAL SCRIPT C" + + "APITAL YMATHEMATICAL SCRIPT CAPITAL ZMATHEMATICAL SCRIPT SMALL AMATHEMAT" + + "ICAL SCRIPT SMALL BMATHEMATICAL SCRIPT SMALL CMATHEMATICAL SCRIPT SMALL " + + "DMATHEMATICAL SCRIPT SMALL FMATHEMATICAL SCRIPT SMALL HMATHEMATICAL SCRI" + + "PT SMALL IMATHEMATICAL SCRIPT SMALL JMATHEMATICAL SCRIPT SMALL KMATHEMAT" + + "ICAL SCRIPT SMALL LMATHEMATICAL SCRIPT SMALL MMATHEMATICAL SCRIPT SMALL " + + "NMATHEMATICAL SCRIPT SMALL PMATHEMATICAL SCRIPT SMALL QMATHEMATICAL SCRI" + + "PT SMALL RMATHEMATICAL SCRIPT SMALL SMATHEMATICAL SCRIPT SMALL TMATHEMAT" + + "ICAL SCRIPT SMALL UMATHEMATICAL SCRIPT SMALL VMATHEMATICAL SCRIPT SMALL " + + "WMATHEMATICAL SCRIPT SMALL XMATHEMATICAL SCRIPT SMALL YMATHEMATICAL SCRI" + + "PT SMALL ZMATHEMATICAL BOLD SCRIPT CAPITAL AMATHEMATICAL BOLD SCRIPT CAP" + + "ITAL BMATHEMATICAL BOLD SCRIPT CAPITAL CMATHEMATICAL BOLD SCRIPT CAPITAL" + + " DMATHEMATICAL BOLD SCRIPT CAPITAL EMATHEMATICAL BOLD SCRIPT CAPITAL FMA" + + "THEMATICAL BOLD SCRIPT CAPITAL GMATHEMATICAL BOLD SCRIPT CAPITAL HMATHEM" + + "ATICAL BOLD SCRIPT CAPITAL IMATHEMATICAL BOLD SCRIPT CAPITAL JMATHEMATIC" + + "AL BOLD SCRIPT CAPITAL KMATHEMATICAL BOLD SCRIPT CAPITAL LMATHEMATICAL B" + + "OLD SCRIPT CAPITAL MMATHEMATICAL BOLD SCRIPT CAPITAL NMATHEMATICAL BOLD " + + "SCRIPT CAPITAL OMATHEMATICAL BOLD SCRIPT CAPITAL PMATHEMATICAL BOLD SCRI" + + "PT CAPITAL QMATHEMATICAL BOLD SCRIPT CAPITAL RMATHEMATICAL BOLD SCRIPT C" + + "APITAL SMATHEMATICAL BOLD SCRIPT CAPITAL TMATHEMATICAL BOLD SCRIPT CAPIT" + + "AL UMATHEMATICAL BOLD SCRIPT CAPITAL VMATHEMATICAL BOLD SCRIPT CAPITAL W" + + "MATHEMATICAL BOLD SCRIPT CAPITAL XMATHEMATICAL BOLD SCRIPT CAPITAL YMATH" + + "EMATICAL BOLD SCRIPT CAPITAL ZMATHEMATICAL BOLD SCRIPT SMALL AMATHEMATIC" + + "AL BOLD SCRIPT SMALL BMATHEMATICAL BOLD SCRIPT SMALL CMATHEMATICAL BOLD " + + "SCRIPT SMALL DMATHEMATICAL BOLD SCRIPT SMALL EMATHEMATICAL BOLD SCRIPT S" + + "MALL FMATHEMATICAL BOLD SCRIPT SMALL GMATHEMATICAL BOLD SCRIPT SMALL HMA" + + "THEMATICAL BOLD SCRIPT SMALL IMATHEMATICAL BOLD SCRIPT SMALL JMATHEMATIC" + + "AL BOLD SCRIPT SMALL KMATHEMATICAL BOLD SCRIPT SMALL LMATHEMATICAL BOLD " + + "SCRIPT SMALL MMATHEMATICAL BOLD SCRIPT SMALL NMATHEMATICAL BOLD SCRIPT S" + + "MALL OMATHEMATICAL BOLD SCRIPT SMALL PMATHEMATICAL BOLD SCRIPT SMALL QMA" + + "THEMATICAL BOLD SCRIPT SMALL RMATHEMATICAL BOLD SCRIPT SMALL SMATHEMATIC" + + "AL BOLD SCRIPT SMALL TMATHEMATICAL BOLD SCRIPT SMALL UMATHEMATICAL BOLD " + + "SCRIPT SMALL VMATHEMATICAL BOLD SCRIPT SMALL WMATHEMATICAL BOLD SCRIPT S" + + "MALL XMATHEMATICAL BOLD SCRIPT SMALL YMATHEMATICAL BOLD SCRIPT SMALL ZMA" + + "THEMATICAL FRAKTUR CAPITAL AMATHEMATICAL FRAKTUR CAPITAL BMATHEMATICAL F" + + "RAKTUR CAPITAL DMATHEMATICAL FRAKTUR CAPITAL EMATHEMATICAL FRAKTUR CAPIT" + + "AL FMATHEMATICAL FRAKTUR CAPITAL GMATHEMATICAL FRAKTUR CAPITAL JMATHEMAT" + + "ICAL FRAKTUR CAPITAL KMATHEMATICAL FRAKTUR CAPITAL LMATHEMATICAL FRAKTUR" + + " CAPITAL MMATHEMATICAL FRAKTUR CAPITAL NMATHEMATICAL FRAKTUR CAPITAL OMA" + + "THEMATICAL FRAKTUR CAPITAL PMATHEMATICAL FRAKTUR CAPITAL QMATHEMATICAL F") + ("" + + "RAKTUR CAPITAL SMATHEMATICAL FRAKTUR CAPITAL TMATHEMATICAL FRAKTUR CAPIT" + + "AL UMATHEMATICAL FRAKTUR CAPITAL VMATHEMATICAL FRAKTUR CAPITAL WMATHEMAT" + + "ICAL FRAKTUR CAPITAL XMATHEMATICAL FRAKTUR CAPITAL YMATHEMATICAL FRAKTUR" + + " SMALL AMATHEMATICAL FRAKTUR SMALL BMATHEMATICAL FRAKTUR SMALL CMATHEMAT" + + "ICAL FRAKTUR SMALL DMATHEMATICAL FRAKTUR SMALL EMATHEMATICAL FRAKTUR SMA" + + "LL FMATHEMATICAL FRAKTUR SMALL GMATHEMATICAL FRAKTUR SMALL HMATHEMATICAL" + + " FRAKTUR SMALL IMATHEMATICAL FRAKTUR SMALL JMATHEMATICAL FRAKTUR SMALL K" + + "MATHEMATICAL FRAKTUR SMALL LMATHEMATICAL FRAKTUR SMALL MMATHEMATICAL FRA" + + "KTUR SMALL NMATHEMATICAL FRAKTUR SMALL OMATHEMATICAL FRAKTUR SMALL PMATH" + + "EMATICAL FRAKTUR SMALL QMATHEMATICAL FRAKTUR SMALL RMATHEMATICAL FRAKTUR" + + " SMALL SMATHEMATICAL FRAKTUR SMALL TMATHEMATICAL FRAKTUR SMALL UMATHEMAT" + + "ICAL FRAKTUR SMALL VMATHEMATICAL FRAKTUR SMALL WMATHEMATICAL FRAKTUR SMA" + + "LL XMATHEMATICAL FRAKTUR SMALL YMATHEMATICAL FRAKTUR SMALL ZMATHEMATICAL" + + " DOUBLE-STRUCK CAPITAL AMATHEMATICAL DOUBLE-STRUCK CAPITAL BMATHEMATICAL" + + " DOUBLE-STRUCK CAPITAL DMATHEMATICAL DOUBLE-STRUCK CAPITAL EMATHEMATICAL" + + " DOUBLE-STRUCK CAPITAL FMATHEMATICAL DOUBLE-STRUCK CAPITAL GMATHEMATICAL" + + " DOUBLE-STRUCK CAPITAL IMATHEMATICAL DOUBLE-STRUCK CAPITAL JMATHEMATICAL" + + " DOUBLE-STRUCK CAPITAL KMATHEMATICAL DOUBLE-STRUCK CAPITAL LMATHEMATICAL" + + " DOUBLE-STRUCK CAPITAL MMATHEMATICAL DOUBLE-STRUCK CAPITAL OMATHEMATICAL" + + " DOUBLE-STRUCK CAPITAL SMATHEMATICAL DOUBLE-STRUCK CAPITAL TMATHEMATICAL" + + " DOUBLE-STRUCK CAPITAL UMATHEMATICAL DOUBLE-STRUCK CAPITAL VMATHEMATICAL" + + " DOUBLE-STRUCK CAPITAL WMATHEMATICAL DOUBLE-STRUCK CAPITAL XMATHEMATICAL" + + " DOUBLE-STRUCK CAPITAL YMATHEMATICAL DOUBLE-STRUCK SMALL AMATHEMATICAL D" + + "OUBLE-STRUCK SMALL BMATHEMATICAL DOUBLE-STRUCK SMALL CMATHEMATICAL DOUBL" + + "E-STRUCK SMALL DMATHEMATICAL DOUBLE-STRUCK SMALL EMATHEMATICAL DOUBLE-ST" + + "RUCK SMALL FMATHEMATICAL DOUBLE-STRUCK SMALL GMATHEMATICAL DOUBLE-STRUCK" + + " SMALL HMATHEMATICAL DOUBLE-STRUCK SMALL IMATHEMATICAL DOUBLE-STRUCK SMA" + + "LL JMATHEMATICAL DOUBLE-STRUCK SMALL KMATHEMATICAL DOUBLE-STRUCK SMALL L" + + "MATHEMATICAL DOUBLE-STRUCK SMALL MMATHEMATICAL DOUBLE-STRUCK SMALL NMATH" + + "EMATICAL DOUBLE-STRUCK SMALL OMATHEMATICAL DOUBLE-STRUCK SMALL PMATHEMAT" + + "ICAL DOUBLE-STRUCK SMALL QMATHEMATICAL DOUBLE-STRUCK SMALL RMATHEMATICAL" + + " DOUBLE-STRUCK SMALL SMATHEMATICAL DOUBLE-STRUCK SMALL TMATHEMATICAL DOU" + + "BLE-STRUCK SMALL UMATHEMATICAL DOUBLE-STRUCK SMALL VMATHEMATICAL DOUBLE-" + + "STRUCK SMALL WMATHEMATICAL DOUBLE-STRUCK SMALL XMATHEMATICAL DOUBLE-STRU" + + "CK SMALL YMATHEMATICAL DOUBLE-STRUCK SMALL ZMATHEMATICAL BOLD FRAKTUR CA" + + "PITAL AMATHEMATICAL BOLD FRAKTUR CAPITAL BMATHEMATICAL BOLD FRAKTUR CAPI" + + "TAL CMATHEMATICAL BOLD FRAKTUR CAPITAL DMATHEMATICAL BOLD FRAKTUR CAPITA" + + "L EMATHEMATICAL BOLD FRAKTUR CAPITAL FMATHEMATICAL BOLD FRAKTUR CAPITAL " + + "GMATHEMATICAL BOLD FRAKTUR CAPITAL HMATHEMATICAL BOLD FRAKTUR CAPITAL IM" + + "ATHEMATICAL BOLD FRAKTUR CAPITAL JMATHEMATICAL BOLD FRAKTUR CAPITAL KMAT" + + "HEMATICAL BOLD FRAKTUR CAPITAL LMATHEMATICAL BOLD FRAKTUR CAPITAL MMATHE" + + "MATICAL BOLD FRAKTUR CAPITAL NMATHEMATICAL BOLD FRAKTUR CAPITAL OMATHEMA" + + "TICAL BOLD FRAKTUR CAPITAL PMATHEMATICAL BOLD FRAKTUR CAPITAL QMATHEMATI" + + "CAL BOLD FRAKTUR CAPITAL RMATHEMATICAL BOLD FRAKTUR CAPITAL SMATHEMATICA" + + "L BOLD FRAKTUR CAPITAL TMATHEMATICAL BOLD FRAKTUR CAPITAL UMATHEMATICAL " + + "BOLD FRAKTUR CAPITAL VMATHEMATICAL BOLD FRAKTUR CAPITAL WMATHEMATICAL BO" + + "LD FRAKTUR CAPITAL XMATHEMATICAL BOLD FRAKTUR CAPITAL YMATHEMATICAL BOLD" + + " FRAKTUR CAPITAL ZMATHEMATICAL BOLD FRAKTUR SMALL AMATHEMATICAL BOLD FRA" + + "KTUR SMALL BMATHEMATICAL BOLD FRAKTUR SMALL CMATHEMATICAL BOLD FRAKTUR S" + + "MALL DMATHEMATICAL BOLD FRAKTUR SMALL EMATHEMATICAL BOLD FRAKTUR SMALL F" + + "MATHEMATICAL BOLD FRAKTUR SMALL GMATHEMATICAL BOLD FRAKTUR SMALL HMATHEM" + + "ATICAL BOLD FRAKTUR SMALL IMATHEMATICAL BOLD FRAKTUR SMALL JMATHEMATICAL" + + " BOLD FRAKTUR SMALL KMATHEMATICAL BOLD FRAKTUR SMALL LMATHEMATICAL BOLD " + + "FRAKTUR SMALL MMATHEMATICAL BOLD FRAKTUR SMALL NMATHEMATICAL BOLD FRAKTU" + + "R SMALL OMATHEMATICAL BOLD FRAKTUR SMALL PMATHEMATICAL BOLD FRAKTUR SMAL" + + "L QMATHEMATICAL BOLD FRAKTUR SMALL RMATHEMATICAL BOLD FRAKTUR SMALL SMAT" + + "HEMATICAL BOLD FRAKTUR SMALL TMATHEMATICAL BOLD FRAKTUR SMALL UMATHEMATI" + + "CAL BOLD FRAKTUR SMALL VMATHEMATICAL BOLD FRAKTUR SMALL WMATHEMATICAL BO" + + "LD FRAKTUR SMALL XMATHEMATICAL BOLD FRAKTUR SMALL YMATHEMATICAL BOLD FRA" + + "KTUR SMALL ZMATHEMATICAL SANS-SERIF CAPITAL AMATHEMATICAL SANS-SERIF CAP" + + "ITAL BMATHEMATICAL SANS-SERIF CAPITAL CMATHEMATICAL SANS-SERIF CAPITAL D" + + "MATHEMATICAL SANS-SERIF CAPITAL EMATHEMATICAL SANS-SERIF CAPITAL FMATHEM" + + "ATICAL SANS-SERIF CAPITAL GMATHEMATICAL SANS-SERIF CAPITAL HMATHEMATICAL" + + " SANS-SERIF CAPITAL IMATHEMATICAL SANS-SERIF CAPITAL JMATHEMATICAL SANS-") + ("" + + "SERIF CAPITAL KMATHEMATICAL SANS-SERIF CAPITAL LMATHEMATICAL SANS-SERIF " + + "CAPITAL MMATHEMATICAL SANS-SERIF CAPITAL NMATHEMATICAL SANS-SERIF CAPITA" + + "L OMATHEMATICAL SANS-SERIF CAPITAL PMATHEMATICAL SANS-SERIF CAPITAL QMAT" + + "HEMATICAL SANS-SERIF CAPITAL RMATHEMATICAL SANS-SERIF CAPITAL SMATHEMATI" + + "CAL SANS-SERIF CAPITAL TMATHEMATICAL SANS-SERIF CAPITAL UMATHEMATICAL SA" + + "NS-SERIF CAPITAL VMATHEMATICAL SANS-SERIF CAPITAL WMATHEMATICAL SANS-SER" + + "IF CAPITAL XMATHEMATICAL SANS-SERIF CAPITAL YMATHEMATICAL SANS-SERIF CAP" + + "ITAL ZMATHEMATICAL SANS-SERIF SMALL AMATHEMATICAL SANS-SERIF SMALL BMATH" + + "EMATICAL SANS-SERIF SMALL CMATHEMATICAL SANS-SERIF SMALL DMATHEMATICAL S" + + "ANS-SERIF SMALL EMATHEMATICAL SANS-SERIF SMALL FMATHEMATICAL SANS-SERIF " + + "SMALL GMATHEMATICAL SANS-SERIF SMALL HMATHEMATICAL SANS-SERIF SMALL IMAT" + + "HEMATICAL SANS-SERIF SMALL JMATHEMATICAL SANS-SERIF SMALL KMATHEMATICAL " + + "SANS-SERIF SMALL LMATHEMATICAL SANS-SERIF SMALL MMATHEMATICAL SANS-SERIF" + + " SMALL NMATHEMATICAL SANS-SERIF SMALL OMATHEMATICAL SANS-SERIF SMALL PMA" + + "THEMATICAL SANS-SERIF SMALL QMATHEMATICAL SANS-SERIF SMALL RMATHEMATICAL" + + " SANS-SERIF SMALL SMATHEMATICAL SANS-SERIF SMALL TMATHEMATICAL SANS-SERI" + + "F SMALL UMATHEMATICAL SANS-SERIF SMALL VMATHEMATICAL SANS-SERIF SMALL WM" + + "ATHEMATICAL SANS-SERIF SMALL XMATHEMATICAL SANS-SERIF SMALL YMATHEMATICA" + + "L SANS-SERIF SMALL ZMATHEMATICAL SANS-SERIF BOLD CAPITAL AMATHEMATICAL S" + + "ANS-SERIF BOLD CAPITAL BMATHEMATICAL SANS-SERIF BOLD CAPITAL CMATHEMATIC" + + "AL SANS-SERIF BOLD CAPITAL DMATHEMATICAL SANS-SERIF BOLD CAPITAL EMATHEM" + + "ATICAL SANS-SERIF BOLD CAPITAL FMATHEMATICAL SANS-SERIF BOLD CAPITAL GMA" + + "THEMATICAL SANS-SERIF BOLD CAPITAL HMATHEMATICAL SANS-SERIF BOLD CAPITAL" + + " IMATHEMATICAL SANS-SERIF BOLD CAPITAL JMATHEMATICAL SANS-SERIF BOLD CAP" + + "ITAL KMATHEMATICAL SANS-SERIF BOLD CAPITAL LMATHEMATICAL SANS-SERIF BOLD" + + " CAPITAL MMATHEMATICAL SANS-SERIF BOLD CAPITAL NMATHEMATICAL SANS-SERIF " + + "BOLD CAPITAL OMATHEMATICAL SANS-SERIF BOLD CAPITAL PMATHEMATICAL SANS-SE" + + "RIF BOLD CAPITAL QMATHEMATICAL SANS-SERIF BOLD CAPITAL RMATHEMATICAL SAN" + + "S-SERIF BOLD CAPITAL SMATHEMATICAL SANS-SERIF BOLD CAPITAL TMATHEMATICAL" + + " SANS-SERIF BOLD CAPITAL UMATHEMATICAL SANS-SERIF BOLD CAPITAL VMATHEMAT" + + "ICAL SANS-SERIF BOLD CAPITAL WMATHEMATICAL SANS-SERIF BOLD CAPITAL XMATH" + + "EMATICAL SANS-SERIF BOLD CAPITAL YMATHEMATICAL SANS-SERIF BOLD CAPITAL Z" + + "MATHEMATICAL SANS-SERIF BOLD SMALL AMATHEMATICAL SANS-SERIF BOLD SMALL B" + + "MATHEMATICAL SANS-SERIF BOLD SMALL CMATHEMATICAL SANS-SERIF BOLD SMALL D" + + "MATHEMATICAL SANS-SERIF BOLD SMALL EMATHEMATICAL SANS-SERIF BOLD SMALL F" + + "MATHEMATICAL SANS-SERIF BOLD SMALL GMATHEMATICAL SANS-SERIF BOLD SMALL H" + + "MATHEMATICAL SANS-SERIF BOLD SMALL IMATHEMATICAL SANS-SERIF BOLD SMALL J" + + "MATHEMATICAL SANS-SERIF BOLD SMALL KMATHEMATICAL SANS-SERIF BOLD SMALL L" + + "MATHEMATICAL SANS-SERIF BOLD SMALL MMATHEMATICAL SANS-SERIF BOLD SMALL N" + + "MATHEMATICAL SANS-SERIF BOLD SMALL OMATHEMATICAL SANS-SERIF BOLD SMALL P" + + "MATHEMATICAL SANS-SERIF BOLD SMALL QMATHEMATICAL SANS-SERIF BOLD SMALL R" + + "MATHEMATICAL SANS-SERIF BOLD SMALL SMATHEMATICAL SANS-SERIF BOLD SMALL T" + + "MATHEMATICAL SANS-SERIF BOLD SMALL UMATHEMATICAL SANS-SERIF BOLD SMALL V" + + "MATHEMATICAL SANS-SERIF BOLD SMALL WMATHEMATICAL SANS-SERIF BOLD SMALL X" + + "MATHEMATICAL SANS-SERIF BOLD SMALL YMATHEMATICAL SANS-SERIF BOLD SMALL Z" + + "MATHEMATICAL SANS-SERIF ITALIC CAPITAL AMATHEMATICAL SANS-SERIF ITALIC C" + + "APITAL BMATHEMATICAL SANS-SERIF ITALIC CAPITAL CMATHEMATICAL SANS-SERIF " + + "ITALIC CAPITAL DMATHEMATICAL SANS-SERIF ITALIC CAPITAL EMATHEMATICAL SAN" + + "S-SERIF ITALIC CAPITAL FMATHEMATICAL SANS-SERIF ITALIC CAPITAL GMATHEMAT" + + "ICAL SANS-SERIF ITALIC CAPITAL HMATHEMATICAL SANS-SERIF ITALIC CAPITAL I" + + "MATHEMATICAL SANS-SERIF ITALIC CAPITAL JMATHEMATICAL SANS-SERIF ITALIC C" + + "APITAL KMATHEMATICAL SANS-SERIF ITALIC CAPITAL LMATHEMATICAL SANS-SERIF " + + "ITALIC CAPITAL MMATHEMATICAL SANS-SERIF ITALIC CAPITAL NMATHEMATICAL SAN" + + "S-SERIF ITALIC CAPITAL OMATHEMATICAL SANS-SERIF ITALIC CAPITAL PMATHEMAT" + + "ICAL SANS-SERIF ITALIC CAPITAL QMATHEMATICAL SANS-SERIF ITALIC CAPITAL R" + + "MATHEMATICAL SANS-SERIF ITALIC CAPITAL SMATHEMATICAL SANS-SERIF ITALIC C" + + "APITAL TMATHEMATICAL SANS-SERIF ITALIC CAPITAL UMATHEMATICAL SANS-SERIF " + + "ITALIC CAPITAL VMATHEMATICAL SANS-SERIF ITALIC CAPITAL WMATHEMATICAL SAN" + + "S-SERIF ITALIC CAPITAL XMATHEMATICAL SANS-SERIF ITALIC CAPITAL YMATHEMAT" + + "ICAL SANS-SERIF ITALIC CAPITAL ZMATHEMATICAL SANS-SERIF ITALIC SMALL AMA" + + "THEMATICAL SANS-SERIF ITALIC SMALL BMATHEMATICAL SANS-SERIF ITALIC SMALL" + + " CMATHEMATICAL SANS-SERIF ITALIC SMALL DMATHEMATICAL SANS-SERIF ITALIC S" + + "MALL EMATHEMATICAL SANS-SERIF ITALIC SMALL FMATHEMATICAL SANS-SERIF ITAL" + + "IC SMALL GMATHEMATICAL SANS-SERIF ITALIC SMALL HMATHEMATICAL SANS-SERIF ") + ("" + + "ITALIC SMALL IMATHEMATICAL SANS-SERIF ITALIC SMALL JMATHEMATICAL SANS-SE" + + "RIF ITALIC SMALL KMATHEMATICAL SANS-SERIF ITALIC SMALL LMATHEMATICAL SAN" + + "S-SERIF ITALIC SMALL MMATHEMATICAL SANS-SERIF ITALIC SMALL NMATHEMATICAL" + + " SANS-SERIF ITALIC SMALL OMATHEMATICAL SANS-SERIF ITALIC SMALL PMATHEMAT" + + "ICAL SANS-SERIF ITALIC SMALL QMATHEMATICAL SANS-SERIF ITALIC SMALL RMATH" + + "EMATICAL SANS-SERIF ITALIC SMALL SMATHEMATICAL SANS-SERIF ITALIC SMALL T" + + "MATHEMATICAL SANS-SERIF ITALIC SMALL UMATHEMATICAL SANS-SERIF ITALIC SMA" + + "LL VMATHEMATICAL SANS-SERIF ITALIC SMALL WMATHEMATICAL SANS-SERIF ITALIC" + + " SMALL XMATHEMATICAL SANS-SERIF ITALIC SMALL YMATHEMATICAL SANS-SERIF IT" + + "ALIC SMALL ZMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL AMATHEMATICAL SA" + + "NS-SERIF BOLD ITALIC CAPITAL BMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITA" + + "L CMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DMATHEMATICAL SANS-SERIF " + + "BOLD ITALIC CAPITAL EMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL FMATHEM" + + "ATICAL SANS-SERIF BOLD ITALIC CAPITAL GMATHEMATICAL SANS-SERIF BOLD ITAL" + + "IC CAPITAL HMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IMATHEMATICAL SA" + + "NS-SERIF BOLD ITALIC CAPITAL JMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITA" + + "L KMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LMATHEMATICAL SANS-SERIF " + + "BOLD ITALIC CAPITAL MMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NMATHEM" + + "ATICAL SANS-SERIF BOLD ITALIC CAPITAL OMATHEMATICAL SANS-SERIF BOLD ITAL" + + "IC CAPITAL PMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL QMATHEMATICAL SA" + + "NS-SERIF BOLD ITALIC CAPITAL RMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITA" + + "L SMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TMATHEMATICAL SANS-SERIF " + + "BOLD ITALIC CAPITAL UMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL VMATHEM" + + "ATICAL SANS-SERIF BOLD ITALIC CAPITAL WMATHEMATICAL SANS-SERIF BOLD ITAL" + + "IC CAPITAL XMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL YMATHEMATICAL SA" + + "NS-SERIF BOLD ITALIC CAPITAL ZMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL " + + "AMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BMATHEMATICAL SANS-SERIF BOLD" + + " ITALIC SMALL CMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DMATHEMATICAL S" + + "ANS-SERIF BOLD ITALIC SMALL EMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F" + + "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GMATHEMATICAL SANS-SERIF BOLD " + + "ITALIC SMALL HMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IMATHEMATICAL SA" + + "NS-SERIF BOLD ITALIC SMALL JMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KM" + + "ATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LMATHEMATICAL SANS-SERIF BOLD I" + + "TALIC SMALL MMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NMATHEMATICAL SAN" + + "S-SERIF BOLD ITALIC SMALL OMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PMA" + + "THEMATICAL SANS-SERIF BOLD ITALIC SMALL QMATHEMATICAL SANS-SERIF BOLD IT" + + "ALIC SMALL RMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SMATHEMATICAL SANS" + + "-SERIF BOLD ITALIC SMALL TMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UMAT" + + "HEMATICAL SANS-SERIF BOLD ITALIC SMALL VMATHEMATICAL SANS-SERIF BOLD ITA" + + "LIC SMALL WMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XMATHEMATICAL SANS-" + + "SERIF BOLD ITALIC SMALL YMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZMATH" + + "EMATICAL MONOSPACE CAPITAL AMATHEMATICAL MONOSPACE CAPITAL BMATHEMATICAL" + + " MONOSPACE CAPITAL CMATHEMATICAL MONOSPACE CAPITAL DMATHEMATICAL MONOSPA" + + "CE CAPITAL EMATHEMATICAL MONOSPACE CAPITAL FMATHEMATICAL MONOSPACE CAPIT" + + "AL GMATHEMATICAL MONOSPACE CAPITAL HMATHEMATICAL MONOSPACE CAPITAL IMATH" + + "EMATICAL MONOSPACE CAPITAL JMATHEMATICAL MONOSPACE CAPITAL KMATHEMATICAL" + + " MONOSPACE CAPITAL LMATHEMATICAL MONOSPACE CAPITAL MMATHEMATICAL MONOSPA" + + "CE CAPITAL NMATHEMATICAL MONOSPACE CAPITAL OMATHEMATICAL MONOSPACE CAPIT" + + "AL PMATHEMATICAL MONOSPACE CAPITAL QMATHEMATICAL MONOSPACE CAPITAL RMATH" + + "EMATICAL MONOSPACE CAPITAL SMATHEMATICAL MONOSPACE CAPITAL TMATHEMATICAL" + + " MONOSPACE CAPITAL UMATHEMATICAL MONOSPACE CAPITAL VMATHEMATICAL MONOSPA" + + "CE CAPITAL WMATHEMATICAL MONOSPACE CAPITAL XMATHEMATICAL MONOSPACE CAPIT" + + "AL YMATHEMATICAL MONOSPACE CAPITAL ZMATHEMATICAL MONOSPACE SMALL AMATHEM" + + "ATICAL MONOSPACE SMALL BMATHEMATICAL MONOSPACE SMALL CMATHEMATICAL MONOS" + + "PACE SMALL DMATHEMATICAL MONOSPACE SMALL EMATHEMATICAL MONOSPACE SMALL F" + + "MATHEMATICAL MONOSPACE SMALL GMATHEMATICAL MONOSPACE SMALL HMATHEMATICAL" + + " MONOSPACE SMALL IMATHEMATICAL MONOSPACE SMALL JMATHEMATICAL MONOSPACE S" + + "MALL KMATHEMATICAL MONOSPACE SMALL LMATHEMATICAL MONOSPACE SMALL MMATHEM" + + "ATICAL MONOSPACE SMALL NMATHEMATICAL MONOSPACE SMALL OMATHEMATICAL MONOS" + + "PACE SMALL PMATHEMATICAL MONOSPACE SMALL QMATHEMATICAL MONOSPACE SMALL R" + + "MATHEMATICAL MONOSPACE SMALL SMATHEMATICAL MONOSPACE SMALL TMATHEMATICAL" + + " MONOSPACE SMALL UMATHEMATICAL MONOSPACE SMALL VMATHEMATICAL MONOSPACE S" + + "MALL WMATHEMATICAL MONOSPACE SMALL XMATHEMATICAL MONOSPACE SMALL YMATHEM" + + "ATICAL MONOSPACE SMALL ZMATHEMATICAL ITALIC SMALL DOTLESS IMATHEMATICAL ") + ("" + + "ITALIC SMALL DOTLESS JMATHEMATICAL BOLD CAPITAL ALPHAMATHEMATICAL BOLD C" + + "APITAL BETAMATHEMATICAL BOLD CAPITAL GAMMAMATHEMATICAL BOLD CAPITAL DELT" + + "AMATHEMATICAL BOLD CAPITAL EPSILONMATHEMATICAL BOLD CAPITAL ZETAMATHEMAT" + + "ICAL BOLD CAPITAL ETAMATHEMATICAL BOLD CAPITAL THETAMATHEMATICAL BOLD CA" + + "PITAL IOTAMATHEMATICAL BOLD CAPITAL KAPPAMATHEMATICAL BOLD CAPITAL LAMDA" + + "MATHEMATICAL BOLD CAPITAL MUMATHEMATICAL BOLD CAPITAL NUMATHEMATICAL BOL" + + "D CAPITAL XIMATHEMATICAL BOLD CAPITAL OMICRONMATHEMATICAL BOLD CAPITAL P" + + "IMATHEMATICAL BOLD CAPITAL RHOMATHEMATICAL BOLD CAPITAL THETA SYMBOLMATH" + + "EMATICAL BOLD CAPITAL SIGMAMATHEMATICAL BOLD CAPITAL TAUMATHEMATICAL BOL" + + "D CAPITAL UPSILONMATHEMATICAL BOLD CAPITAL PHIMATHEMATICAL BOLD CAPITAL " + + "CHIMATHEMATICAL BOLD CAPITAL PSIMATHEMATICAL BOLD CAPITAL OMEGAMATHEMATI" + + "CAL BOLD NABLAMATHEMATICAL BOLD SMALL ALPHAMATHEMATICAL BOLD SMALL BETAM" + + "ATHEMATICAL BOLD SMALL GAMMAMATHEMATICAL BOLD SMALL DELTAMATHEMATICAL BO" + + "LD SMALL EPSILONMATHEMATICAL BOLD SMALL ZETAMATHEMATICAL BOLD SMALL ETAM" + + "ATHEMATICAL BOLD SMALL THETAMATHEMATICAL BOLD SMALL IOTAMATHEMATICAL BOL" + + "D SMALL KAPPAMATHEMATICAL BOLD SMALL LAMDAMATHEMATICAL BOLD SMALL MUMATH" + + "EMATICAL BOLD SMALL NUMATHEMATICAL BOLD SMALL XIMATHEMATICAL BOLD SMALL " + + "OMICRONMATHEMATICAL BOLD SMALL PIMATHEMATICAL BOLD SMALL RHOMATHEMATICAL" + + " BOLD SMALL FINAL SIGMAMATHEMATICAL BOLD SMALL SIGMAMATHEMATICAL BOLD SM" + + "ALL TAUMATHEMATICAL BOLD SMALL UPSILONMATHEMATICAL BOLD SMALL PHIMATHEMA" + + "TICAL BOLD SMALL CHIMATHEMATICAL BOLD SMALL PSIMATHEMATICAL BOLD SMALL O" + + "MEGAMATHEMATICAL BOLD PARTIAL DIFFERENTIALMATHEMATICAL BOLD EPSILON SYMB" + + "OLMATHEMATICAL BOLD THETA SYMBOLMATHEMATICAL BOLD KAPPA SYMBOLMATHEMATIC" + + "AL BOLD PHI SYMBOLMATHEMATICAL BOLD RHO SYMBOLMATHEMATICAL BOLD PI SYMBO" + + "LMATHEMATICAL ITALIC CAPITAL ALPHAMATHEMATICAL ITALIC CAPITAL BETAMATHEM" + + "ATICAL ITALIC CAPITAL GAMMAMATHEMATICAL ITALIC CAPITAL DELTAMATHEMATICAL" + + " ITALIC CAPITAL EPSILONMATHEMATICAL ITALIC CAPITAL ZETAMATHEMATICAL ITAL" + + "IC CAPITAL ETAMATHEMATICAL ITALIC CAPITAL THETAMATHEMATICAL ITALIC CAPIT" + + "AL IOTAMATHEMATICAL ITALIC CAPITAL KAPPAMATHEMATICAL ITALIC CAPITAL LAMD" + + "AMATHEMATICAL ITALIC CAPITAL MUMATHEMATICAL ITALIC CAPITAL NUMATHEMATICA" + + "L ITALIC CAPITAL XIMATHEMATICAL ITALIC CAPITAL OMICRONMATHEMATICAL ITALI" + + "C CAPITAL PIMATHEMATICAL ITALIC CAPITAL RHOMATHEMATICAL ITALIC CAPITAL T" + + "HETA SYMBOLMATHEMATICAL ITALIC CAPITAL SIGMAMATHEMATICAL ITALIC CAPITAL " + + "TAUMATHEMATICAL ITALIC CAPITAL UPSILONMATHEMATICAL ITALIC CAPITAL PHIMAT" + + "HEMATICAL ITALIC CAPITAL CHIMATHEMATICAL ITALIC CAPITAL PSIMATHEMATICAL " + + "ITALIC CAPITAL OMEGAMATHEMATICAL ITALIC NABLAMATHEMATICAL ITALIC SMALL A" + + "LPHAMATHEMATICAL ITALIC SMALL BETAMATHEMATICAL ITALIC SMALL GAMMAMATHEMA" + + "TICAL ITALIC SMALL DELTAMATHEMATICAL ITALIC SMALL EPSILONMATHEMATICAL IT" + + "ALIC SMALL ZETAMATHEMATICAL ITALIC SMALL ETAMATHEMATICAL ITALIC SMALL TH" + + "ETAMATHEMATICAL ITALIC SMALL IOTAMATHEMATICAL ITALIC SMALL KAPPAMATHEMAT" + + "ICAL ITALIC SMALL LAMDAMATHEMATICAL ITALIC SMALL MUMATHEMATICAL ITALIC S" + + "MALL NUMATHEMATICAL ITALIC SMALL XIMATHEMATICAL ITALIC SMALL OMICRONMATH" + + "EMATICAL ITALIC SMALL PIMATHEMATICAL ITALIC SMALL RHOMATHEMATICAL ITALIC" + + " SMALL FINAL SIGMAMATHEMATICAL ITALIC SMALL SIGMAMATHEMATICAL ITALIC SMA" + + "LL TAUMATHEMATICAL ITALIC SMALL UPSILONMATHEMATICAL ITALIC SMALL PHIMATH" + + "EMATICAL ITALIC SMALL CHIMATHEMATICAL ITALIC SMALL PSIMATHEMATICAL ITALI" + + "C SMALL OMEGAMATHEMATICAL ITALIC PARTIAL DIFFERENTIALMATHEMATICAL ITALIC" + + " EPSILON SYMBOLMATHEMATICAL ITALIC THETA SYMBOLMATHEMATICAL ITALIC KAPPA" + + " SYMBOLMATHEMATICAL ITALIC PHI SYMBOLMATHEMATICAL ITALIC RHO SYMBOLMATHE" + + "MATICAL ITALIC PI SYMBOLMATHEMATICAL BOLD ITALIC CAPITAL ALPHAMATHEMATIC" + + "AL BOLD ITALIC CAPITAL BETAMATHEMATICAL BOLD ITALIC CAPITAL GAMMAMATHEMA" + + "TICAL BOLD ITALIC CAPITAL DELTAMATHEMATICAL BOLD ITALIC CAPITAL EPSILONM" + + "ATHEMATICAL BOLD ITALIC CAPITAL ZETAMATHEMATICAL BOLD ITALIC CAPITAL ETA" + + "MATHEMATICAL BOLD ITALIC CAPITAL THETAMATHEMATICAL BOLD ITALIC CAPITAL I" + + "OTAMATHEMATICAL BOLD ITALIC CAPITAL KAPPAMATHEMATICAL BOLD ITALIC CAPITA" + + "L LAMDAMATHEMATICAL BOLD ITALIC CAPITAL MUMATHEMATICAL BOLD ITALIC CAPIT" + + "AL NUMATHEMATICAL BOLD ITALIC CAPITAL XIMATHEMATICAL BOLD ITALIC CAPITAL" + + " OMICRONMATHEMATICAL BOLD ITALIC CAPITAL PIMATHEMATICAL BOLD ITALIC CAPI" + + "TAL RHOMATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOLMATHEMATICAL BOLD IT" + + "ALIC CAPITAL SIGMAMATHEMATICAL BOLD ITALIC CAPITAL TAUMATHEMATICAL BOLD " + + "ITALIC CAPITAL UPSILONMATHEMATICAL BOLD ITALIC CAPITAL PHIMATHEMATICAL B" + + "OLD ITALIC CAPITAL CHIMATHEMATICAL BOLD ITALIC CAPITAL PSIMATHEMATICAL B" + + "OLD ITALIC CAPITAL OMEGAMATHEMATICAL BOLD ITALIC NABLAMATHEMATICAL BOLD " + + "ITALIC SMALL ALPHAMATHEMATICAL BOLD ITALIC SMALL BETAMATHEMATICAL BOLD I") + ("" + + "TALIC SMALL GAMMAMATHEMATICAL BOLD ITALIC SMALL DELTAMATHEMATICAL BOLD I" + + "TALIC SMALL EPSILONMATHEMATICAL BOLD ITALIC SMALL ZETAMATHEMATICAL BOLD " + + "ITALIC SMALL ETAMATHEMATICAL BOLD ITALIC SMALL THETAMATHEMATICAL BOLD IT" + + "ALIC SMALL IOTAMATHEMATICAL BOLD ITALIC SMALL KAPPAMATHEMATICAL BOLD ITA" + + "LIC SMALL LAMDAMATHEMATICAL BOLD ITALIC SMALL MUMATHEMATICAL BOLD ITALIC" + + " SMALL NUMATHEMATICAL BOLD ITALIC SMALL XIMATHEMATICAL BOLD ITALIC SMALL" + + " OMICRONMATHEMATICAL BOLD ITALIC SMALL PIMATHEMATICAL BOLD ITALIC SMALL " + + "RHOMATHEMATICAL BOLD ITALIC SMALL FINAL SIGMAMATHEMATICAL BOLD ITALIC SM" + + "ALL SIGMAMATHEMATICAL BOLD ITALIC SMALL TAUMATHEMATICAL BOLD ITALIC SMAL" + + "L UPSILONMATHEMATICAL BOLD ITALIC SMALL PHIMATHEMATICAL BOLD ITALIC SMAL" + + "L CHIMATHEMATICAL BOLD ITALIC SMALL PSIMATHEMATICAL BOLD ITALIC SMALL OM" + + "EGAMATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIALMATHEMATICAL BOLD ITALIC" + + " EPSILON SYMBOLMATHEMATICAL BOLD ITALIC THETA SYMBOLMATHEMATICAL BOLD IT" + + "ALIC KAPPA SYMBOLMATHEMATICAL BOLD ITALIC PHI SYMBOLMATHEMATICAL BOLD IT" + + "ALIC RHO SYMBOLMATHEMATICAL BOLD ITALIC PI SYMBOLMATHEMATICAL SANS-SERIF" + + " BOLD CAPITAL ALPHAMATHEMATICAL SANS-SERIF BOLD CAPITAL BETAMATHEMATICAL" + + " SANS-SERIF BOLD CAPITAL GAMMAMATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA" + + "MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILONMATHEMATICAL SANS-SERIF BOLD" + + " CAPITAL ZETAMATHEMATICAL SANS-SERIF BOLD CAPITAL ETAMATHEMATICAL SANS-S" + + "ERIF BOLD CAPITAL THETAMATHEMATICAL SANS-SERIF BOLD CAPITAL IOTAMATHEMAT" + + "ICAL SANS-SERIF BOLD CAPITAL KAPPAMATHEMATICAL SANS-SERIF BOLD CAPITAL L" + + "AMDAMATHEMATICAL SANS-SERIF BOLD CAPITAL MUMATHEMATICAL SANS-SERIF BOLD " + + "CAPITAL NUMATHEMATICAL SANS-SERIF BOLD CAPITAL XIMATHEMATICAL SANS-SERIF" + + " BOLD CAPITAL OMICRONMATHEMATICAL SANS-SERIF BOLD CAPITAL PIMATHEMATICAL" + + " SANS-SERIF BOLD CAPITAL RHOMATHEMATICAL SANS-SERIF BOLD CAPITAL THETA S" + + "YMBOLMATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMAMATHEMATICAL SANS-SERIF B" + + "OLD CAPITAL TAUMATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILONMATHEMATICAL " + + "SANS-SERIF BOLD CAPITAL PHIMATHEMATICAL SANS-SERIF BOLD CAPITAL CHIMATHE" + + "MATICAL SANS-SERIF BOLD CAPITAL PSIMATHEMATICAL SANS-SERIF BOLD CAPITAL " + + "OMEGAMATHEMATICAL SANS-SERIF BOLD NABLAMATHEMATICAL SANS-SERIF BOLD SMAL" + + "L ALPHAMATHEMATICAL SANS-SERIF BOLD SMALL BETAMATHEMATICAL SANS-SERIF BO" + + "LD SMALL GAMMAMATHEMATICAL SANS-SERIF BOLD SMALL DELTAMATHEMATICAL SANS-" + + "SERIF BOLD SMALL EPSILONMATHEMATICAL SANS-SERIF BOLD SMALL ZETAMATHEMATI" + + "CAL SANS-SERIF BOLD SMALL ETAMATHEMATICAL SANS-SERIF BOLD SMALL THETAMAT" + + "HEMATICAL SANS-SERIF BOLD SMALL IOTAMATHEMATICAL SANS-SERIF BOLD SMALL K" + + "APPAMATHEMATICAL SANS-SERIF BOLD SMALL LAMDAMATHEMATICAL SANS-SERIF BOLD" + + " SMALL MUMATHEMATICAL SANS-SERIF BOLD SMALL NUMATHEMATICAL SANS-SERIF BO" + + "LD SMALL XIMATHEMATICAL SANS-SERIF BOLD SMALL OMICRONMATHEMATICAL SANS-S" + + "ERIF BOLD SMALL PIMATHEMATICAL SANS-SERIF BOLD SMALL RHOMATHEMATICAL SAN" + + "S-SERIF BOLD SMALL FINAL SIGMAMATHEMATICAL SANS-SERIF BOLD SMALL SIGMAMA" + + "THEMATICAL SANS-SERIF BOLD SMALL TAUMATHEMATICAL SANS-SERIF BOLD SMALL U" + + "PSILONMATHEMATICAL SANS-SERIF BOLD SMALL PHIMATHEMATICAL SANS-SERIF BOLD" + + " SMALL CHIMATHEMATICAL SANS-SERIF BOLD SMALL PSIMATHEMATICAL SANS-SERIF " + + "BOLD SMALL OMEGAMATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIALMATHEMA" + + "TICAL SANS-SERIF BOLD EPSILON SYMBOLMATHEMATICAL SANS-SERIF BOLD THETA S" + + "YMBOLMATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOLMATHEMATICAL SANS-SERIF BO" + + "LD PHI SYMBOLMATHEMATICAL SANS-SERIF BOLD RHO SYMBOLMATHEMATICAL SANS-SE" + + "RIF BOLD PI SYMBOLMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHAMATHE" + + "MATICAL SANS-SERIF BOLD ITALIC CAPITAL BETAMATHEMATICAL SANS-SERIF BOLD " + + "ITALIC CAPITAL GAMMAMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTAMAT" + + "HEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILONMATHEMATICAL SANS-SERIF " + + "BOLD ITALIC CAPITAL ZETAMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETAM" + + "ATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETAMATHEMATICAL SANS-SERIF " + + "BOLD ITALIC CAPITAL IOTAMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPP" + + "AMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDAMATHEMATICAL SANS-SERI" + + "F BOLD ITALIC CAPITAL MUMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NUMA" + + "THEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XIMATHEMATICAL SANS-SERIF BOLD" + + " ITALIC CAPITAL OMICRONMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PIMAT" + + "HEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHOMATHEMATICAL SANS-SERIF BOLD" + + " ITALIC CAPITAL THETA SYMBOLMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL " + + "SIGMAMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAUMATHEMATICAL SANS-SE" + + "RIF BOLD ITALIC CAPITAL UPSILONMATHEMATICAL SANS-SERIF BOLD ITALIC CAPIT" + + "AL PHIMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHIMATHEMATICAL SANS-S" + + "ERIF BOLD ITALIC CAPITAL PSIMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ") + ("" + + "OMEGAMATHEMATICAL SANS-SERIF BOLD ITALIC NABLAMATHEMATICAL SANS-SERIF BO" + + "LD ITALIC SMALL ALPHAMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETAMATHE" + + "MATICAL SANS-SERIF BOLD ITALIC SMALL GAMMAMATHEMATICAL SANS-SERIF BOLD I" + + "TALIC SMALL DELTAMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILONMATHEM" + + "ATICAL SANS-SERIF BOLD ITALIC SMALL ZETAMATHEMATICAL SANS-SERIF BOLD ITA" + + "LIC SMALL ETAMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETAMATHEMATICAL" + + " SANS-SERIF BOLD ITALIC SMALL IOTAMATHEMATICAL SANS-SERIF BOLD ITALIC SM" + + "ALL KAPPAMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDAMATHEMATICAL SAN" + + "S-SERIF BOLD ITALIC SMALL MUMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU" + + "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XIMATHEMATICAL SANS-SERIF BOLD" + + " ITALIC SMALL OMICRONMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PIMATHEMA" + + "TICAL SANS-SERIF BOLD ITALIC SMALL RHOMATHEMATICAL SANS-SERIF BOLD ITALI" + + "C SMALL FINAL SIGMAMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMAMATHEM" + + "ATICAL SANS-SERIF BOLD ITALIC SMALL TAUMATHEMATICAL SANS-SERIF BOLD ITAL" + + "IC SMALL UPSILONMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHIMATHEMATICA" + + "L SANS-SERIF BOLD ITALIC SMALL CHIMATHEMATICAL SANS-SERIF BOLD ITALIC SM" + + "ALL PSIMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGAMATHEMATICAL SANS-" + + "SERIF BOLD ITALIC PARTIAL DIFFERENTIALMATHEMATICAL SANS-SERIF BOLD ITALI" + + "C EPSILON SYMBOLMATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOLMATHEMAT" + + "ICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOLMATHEMATICAL SANS-SERIF BOLD ITA" + + "LIC PHI SYMBOLMATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOLMATHEMATICAL" + + " SANS-SERIF BOLD ITALIC PI SYMBOLMATHEMATICAL BOLD CAPITAL DIGAMMAMATHEM" + + "ATICAL BOLD SMALL DIGAMMAMATHEMATICAL BOLD DIGIT ZEROMATHEMATICAL BOLD D" + + "IGIT ONEMATHEMATICAL BOLD DIGIT TWOMATHEMATICAL BOLD DIGIT THREEMATHEMAT" + + "ICAL BOLD DIGIT FOURMATHEMATICAL BOLD DIGIT FIVEMATHEMATICAL BOLD DIGIT " + + "SIXMATHEMATICAL BOLD DIGIT SEVENMATHEMATICAL BOLD DIGIT EIGHTMATHEMATICA" + + "L BOLD DIGIT NINEMATHEMATICAL DOUBLE-STRUCK DIGIT ZEROMATHEMATICAL DOUBL" + + "E-STRUCK DIGIT ONEMATHEMATICAL DOUBLE-STRUCK DIGIT TWOMATHEMATICAL DOUBL" + + "E-STRUCK DIGIT THREEMATHEMATICAL DOUBLE-STRUCK DIGIT FOURMATHEMATICAL DO" + + "UBLE-STRUCK DIGIT FIVEMATHEMATICAL DOUBLE-STRUCK DIGIT SIXMATHEMATICAL D" + + "OUBLE-STRUCK DIGIT SEVENMATHEMATICAL DOUBLE-STRUCK DIGIT EIGHTMATHEMATIC" + + "AL DOUBLE-STRUCK DIGIT NINEMATHEMATICAL SANS-SERIF DIGIT ZEROMATHEMATICA" + + "L SANS-SERIF DIGIT ONEMATHEMATICAL SANS-SERIF DIGIT TWOMATHEMATICAL SANS" + + "-SERIF DIGIT THREEMATHEMATICAL SANS-SERIF DIGIT FOURMATHEMATICAL SANS-SE" + + "RIF DIGIT FIVEMATHEMATICAL SANS-SERIF DIGIT SIXMATHEMATICAL SANS-SERIF D" + + "IGIT SEVENMATHEMATICAL SANS-SERIF DIGIT EIGHTMATHEMATICAL SANS-SERIF DIG" + + "IT NINEMATHEMATICAL SANS-SERIF BOLD DIGIT ZEROMATHEMATICAL SANS-SERIF BO" + + "LD DIGIT ONEMATHEMATICAL SANS-SERIF BOLD DIGIT TWOMATHEMATICAL SANS-SERI" + + "F BOLD DIGIT THREEMATHEMATICAL SANS-SERIF BOLD DIGIT FOURMATHEMATICAL SA" + + "NS-SERIF BOLD DIGIT FIVEMATHEMATICAL SANS-SERIF BOLD DIGIT SIXMATHEMATIC" + + "AL SANS-SERIF BOLD DIGIT SEVENMATHEMATICAL SANS-SERIF BOLD DIGIT EIGHTMA" + + "THEMATICAL SANS-SERIF BOLD DIGIT NINEMATHEMATICAL MONOSPACE DIGIT ZEROMA" + + "THEMATICAL MONOSPACE DIGIT ONEMATHEMATICAL MONOSPACE DIGIT TWOMATHEMATIC" + + "AL MONOSPACE DIGIT THREEMATHEMATICAL MONOSPACE DIGIT FOURMATHEMATICAL MO" + + "NOSPACE DIGIT FIVEMATHEMATICAL MONOSPACE DIGIT SIXMATHEMATICAL MONOSPACE" + + " DIGIT SEVENMATHEMATICAL MONOSPACE DIGIT EIGHTMATHEMATICAL MONOSPACE DIG" + + "IT NINESIGNWRITING HAND-FIST INDEXSIGNWRITING HAND-CIRCLE INDEXSIGNWRITI" + + "NG HAND-CUP INDEXSIGNWRITING HAND-OVAL INDEXSIGNWRITING HAND-HINGE INDEX" + + "SIGNWRITING HAND-ANGLE INDEXSIGNWRITING HAND-FIST INDEX BENTSIGNWRITING " + + "HAND-CIRCLE INDEX BENTSIGNWRITING HAND-FIST THUMB UNDER INDEX BENTSIGNWR" + + "ITING HAND-FIST INDEX RAISED KNUCKLESIGNWRITING HAND-FIST INDEX CUPPEDSI" + + "GNWRITING HAND-FIST INDEX HINGEDSIGNWRITING HAND-FIST INDEX HINGED LOWSI" + + "GNWRITING HAND-CIRCLE INDEX HINGESIGNWRITING HAND-FIST INDEX MIDDLESIGNW" + + "RITING HAND-CIRCLE INDEX MIDDLESIGNWRITING HAND-FIST INDEX MIDDLE BENTSI" + + "GNWRITING HAND-FIST INDEX MIDDLE RAISED KNUCKLESSIGNWRITING HAND-FIST IN" + + "DEX MIDDLE HINGEDSIGNWRITING HAND-FIST INDEX UP MIDDLE HINGEDSIGNWRITING" + + " HAND-FIST INDEX HINGED MIDDLE UPSIGNWRITING HAND-FIST INDEX MIDDLE CONJ" + + "OINEDSIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED INDEX BENTSIGNWRITING " + + "HAND-FIST INDEX MIDDLE CONJOINED MIDDLE BENTSIGNWRITING HAND-FIST INDEX " + + "MIDDLE CONJOINED CUPPEDSIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HING" + + "EDSIGNWRITING HAND-FIST INDEX MIDDLE CROSSEDSIGNWRITING HAND-CIRCLE INDE" + + "X MIDDLE CROSSEDSIGNWRITING HAND-FIST MIDDLE BENT OVER INDEXSIGNWRITING " + + "HAND-FIST INDEX BENT OVER MIDDLESIGNWRITING HAND-FIST INDEX MIDDLE THUMB" + + "SIGNWRITING HAND-CIRCLE INDEX MIDDLE THUMBSIGNWRITING HAND-FIST INDEX MI") + ("" + + "DDLE STRAIGHT THUMB BENTSIGNWRITING HAND-FIST INDEX MIDDLE BENT THUMB ST" + + "RAIGHTSIGNWRITING HAND-FIST INDEX MIDDLE THUMB BENTSIGNWRITING HAND-FIST" + + " INDEX MIDDLE HINGED SPREAD THUMB SIDESIGNWRITING HAND-FIST INDEX UP MID" + + "DLE HINGED THUMB SIDESIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB " + + "CONJOINEDSIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP THUMB SIDESIGNWRIT" + + "ING HAND-FIST INDEX MIDDLE UP SPREAD THUMB FORWARDSIGNWRITING HAND-FIST " + + "INDEX MIDDLE THUMB CUPPEDSIGNWRITING HAND-FIST INDEX MIDDLE THUMB CIRCLE" + + "DSIGNWRITING HAND-FIST INDEX MIDDLE THUMB HOOKEDSIGNWRITING HAND-FIST IN" + + "DEX MIDDLE THUMB HINGEDSIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE " + + "STRAIGHTSIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDESIGNWRITI" + + "NG HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE CONJOINEDSIGNWRITING HAND" + + "-FIST INDEX MIDDLE CONJOINED THUMB SIDE BENTSIGNWRITING HAND-FIST MIDDLE" + + " THUMB HOOKED INDEX UPSIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE UP" + + "SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED THUMB SIDESIGNWRITIN" + + "G HAND-FIST INDEX MIDDLE CROSSED THUMB SIDESIGNWRITING HAND-FIST INDEX M" + + "IDDLE CONJOINED THUMB FORWARDSIGNWRITING HAND-FIST INDEX MIDDLE CONJOINE" + + "D CUPPED THUMB FORWARDSIGNWRITING HAND-FIST MIDDLE THUMB CUPPED INDEX UP" + + "SIGNWRITING HAND-FIST INDEX THUMB CUPPED MIDDLE UPSIGNWRITING HAND-FIST " + + "MIDDLE THUMB CIRCLED INDEX UPSIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED " + + "INDEX HINGEDSIGNWRITING HAND-FIST INDEX THUMB ANGLED OUT MIDDLE UPSIGNWR" + + "ITING HAND-FIST INDEX THUMB ANGLED IN MIDDLE UPSIGNWRITING HAND-FIST IND" + + "EX THUMB CIRCLED MIDDLE UPSIGNWRITING HAND-FIST INDEX MIDDLE THUMB CONJO" + + "INED HINGEDSIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED OUTSIGNWRITIN" + + "G HAND-FIST INDEX MIDDLE THUMB ANGLEDSIGNWRITING HAND-FIST MIDDLE THUMB " + + "ANGLED OUT INDEX UPSIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX C" + + "ROSSEDSIGNWRITING HAND-FIST MIDDLE THUMB ANGLED INDEX UPSIGNWRITING HAND" + + "-FIST INDEX THUMB HOOKED MIDDLE HINGEDSIGNWRITING HAND-FLAT FOUR FINGERS" + + "SIGNWRITING HAND-FLAT FOUR FINGERS BENTSIGNWRITING HAND-FLAT FOUR FINGER" + + "S HINGEDSIGNWRITING HAND-FLAT FOUR FINGERS CONJOINEDSIGNWRITING HAND-FLA" + + "T FOUR FINGERS CONJOINED SPLITSIGNWRITING HAND-CLAW FOUR FINGERS CONJOIN" + + "EDSIGNWRITING HAND-FIST FOUR FINGERS CONJOINED BENTSIGNWRITING HAND-HING" + + "E FOUR FINGERS CONJOINEDSIGNWRITING HAND-FLAT FIVE FINGERS SPREADSIGNWRI" + + "TING HAND-FLAT HEEL FIVE FINGERS SPREADSIGNWRITING HAND-FLAT FIVE FINGER" + + "S SPREAD FOUR BENTSIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD FOUR BE" + + "NTSIGNWRITING HAND-FLAT FIVE FINGERS SPREAD BENTSIGNWRITING HAND-FLAT HE" + + "EL FIVE FINGERS SPREAD BENTSIGNWRITING HAND-FLAT FIVE FINGERS SPREAD THU" + + "MB FORWARDSIGNWRITING HAND-CUP FIVE FINGERS SPREADSIGNWRITING HAND-CUP F" + + "IVE FINGERS SPREAD OPENSIGNWRITING HAND-HINGE FIVE FINGERS SPREAD OPENSI" + + "GNWRITING HAND-OVAL FIVE FINGERS SPREADSIGNWRITING HAND-FLAT FIVE FINGER" + + "S SPREAD HINGEDSIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED THUMB SI" + + "DESIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED NO THUMBSIGNWRITING H" + + "AND-FLATSIGNWRITING HAND-FLAT BETWEEN PALM FACINGSSIGNWRITING HAND-FLAT " + + "HEELSIGNWRITING HAND-FLAT THUMB SIDESIGNWRITING HAND-FLAT HEEL THUMB SID" + + "ESIGNWRITING HAND-FLAT THUMB BENTSIGNWRITING HAND-FLAT THUMB FORWARDSIGN" + + "WRITING HAND-FLAT SPLIT INDEX THUMB SIDESIGNWRITING HAND-FLAT SPLIT CENT" + + "RESIGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDESIGNWRITING HAND-FLAT SPL" + + "IT CENTRE THUMB SIDE BENTSIGNWRITING HAND-FLAT SPLIT LITTLESIGNWRITING H" + + "AND-CLAWSIGNWRITING HAND-CLAW THUMB SIDESIGNWRITING HAND-CLAW NO THUMBSI" + + "GNWRITING HAND-CLAW THUMB FORWARDSIGNWRITING HAND-HOOK CURLICUESIGNWRITI" + + "NG HAND-HOOKSIGNWRITING HAND-CUP OPENSIGNWRITING HAND-CUPSIGNWRITING HAN" + + "D-CUP OPEN THUMB SIDESIGNWRITING HAND-CUP THUMB SIDESIGNWRITING HAND-CUP" + + " OPEN NO THUMBSIGNWRITING HAND-CUP NO THUMBSIGNWRITING HAND-CUP OPEN THU" + + "MB FORWARDSIGNWRITING HAND-CUP THUMB FORWARDSIGNWRITING HAND-CURLICUE OP" + + "ENSIGNWRITING HAND-CURLICUESIGNWRITING HAND-CIRCLESIGNWRITING HAND-OVALS" + + "IGNWRITING HAND-OVAL THUMB SIDESIGNWRITING HAND-OVAL NO THUMBSIGNWRITING" + + " HAND-OVAL THUMB FORWARDSIGNWRITING HAND-HINGE OPENSIGNWRITING HAND-HING" + + "E OPEN THUMB FORWARDSIGNWRITING HAND-HINGESIGNWRITING HAND-HINGE SMALLSI" + + "GNWRITING HAND-HINGE OPEN THUMB SIDESIGNWRITING HAND-HINGE THUMB SIDESIG" + + "NWRITING HAND-HINGE OPEN NO THUMBSIGNWRITING HAND-HINGE NO THUMBSIGNWRIT" + + "ING HAND-HINGE THUMB SIDE TOUCHING INDEXSIGNWRITING HAND-HINGE THUMB BET" + + "WEEN MIDDLE RINGSIGNWRITING HAND-ANGLESIGNWRITING HAND-FIST INDEX MIDDLE" + + " RINGSIGNWRITING HAND-CIRCLE INDEX MIDDLE RINGSIGNWRITING HAND-HINGE IND" + + "EX MIDDLE RINGSIGNWRITING HAND-ANGLE INDEX MIDDLE RINGSIGNWRITING HAND-H" + + "INGE LITTLESIGNWRITING HAND-FIST INDEX MIDDLE RING BENTSIGNWRITING HAND-") + ("" + + "FIST INDEX MIDDLE RING CONJOINEDSIGNWRITING HAND-HINGE INDEX MIDDLE RING" + + " CONJOINEDSIGNWRITING HAND-FIST LITTLE DOWNSIGNWRITING HAND-FIST LITTLE " + + "DOWN RIPPLE STRAIGHTSIGNWRITING HAND-FIST LITTLE DOWN RIPPLE CURVEDSIGNW" + + "RITING HAND-FIST LITTLE DOWN OTHERS CIRCLEDSIGNWRITING HAND-FIST LITTLE " + + "UPSIGNWRITING HAND-FIST THUMB UNDER LITTLE UPSIGNWRITING HAND-CIRCLE LIT" + + "TLE UPSIGNWRITING HAND-OVAL LITTLE UPSIGNWRITING HAND-ANGLE LITTLE UPSIG" + + "NWRITING HAND-FIST LITTLE RAISED KNUCKLESIGNWRITING HAND-FIST LITTLE BEN" + + "TSIGNWRITING HAND-FIST LITTLE TOUCHES THUMBSIGNWRITING HAND-FIST LITTLE " + + "THUMBSIGNWRITING HAND-HINGE LITTLE THUMBSIGNWRITING HAND-FIST LITTLE IND" + + "EX THUMBSIGNWRITING HAND-HINGE LITTLE INDEX THUMBSIGNWRITING HAND-ANGLE " + + "LITTLE INDEX THUMB INDEX THUMB OUTSIGNWRITING HAND-ANGLE LITTLE INDEX TH" + + "UMB INDEX THUMBSIGNWRITING HAND-FIST LITTLE INDEXSIGNWRITING HAND-CIRCLE" + + " LITTLE INDEXSIGNWRITING HAND-HINGE LITTLE INDEXSIGNWRITING HAND-ANGLE L" + + "ITTLE INDEXSIGNWRITING HAND-FIST INDEX MIDDLE LITTLESIGNWRITING HAND-CIR" + + "CLE INDEX MIDDLE LITTLESIGNWRITING HAND-HINGE INDEX MIDDLE LITTLESIGNWRI" + + "TING HAND-HINGE RINGSIGNWRITING HAND-ANGLE INDEX MIDDLE LITTLESIGNWRITIN" + + "G HAND-FIST INDEX MIDDLE CROSS LITTLESIGNWRITING HAND-CIRCLE INDEX MIDDL" + + "E CROSS LITTLESIGNWRITING HAND-FIST RING DOWNSIGNWRITING HAND-HINGE RING" + + " DOWN INDEX THUMB HOOK MIDDLESIGNWRITING HAND-ANGLE RING DOWN MIDDLE THU" + + "MB INDEX CROSSSIGNWRITING HAND-FIST RING UPSIGNWRITING HAND-FIST RING RA" + + "ISED KNUCKLESIGNWRITING HAND-FIST RING LITTLESIGNWRITING HAND-CIRCLE RIN" + + "G LITTLESIGNWRITING HAND-OVAL RING LITTLESIGNWRITING HAND-ANGLE RING LIT" + + "TLESIGNWRITING HAND-FIST RING MIDDLESIGNWRITING HAND-FIST RING MIDDLE CO" + + "NJOINEDSIGNWRITING HAND-FIST RING MIDDLE RAISED KNUCKLESSIGNWRITING HAND" + + "-FIST RING INDEXSIGNWRITING HAND-FIST RING THUMBSIGNWRITING HAND-HOOK RI" + + "NG THUMBSIGNWRITING HAND-FIST INDEX RING LITTLESIGNWRITING HAND-CIRCLE I" + + "NDEX RING LITTLESIGNWRITING HAND-CURLICUE INDEX RING LITTLE ONSIGNWRITIN" + + "G HAND-HOOK INDEX RING LITTLE OUTSIGNWRITING HAND-HOOK INDEX RING LITTLE" + + " INSIGNWRITING HAND-HOOK INDEX RING LITTLE UNDERSIGNWRITING HAND-CUP IND" + + "EX RING LITTLESIGNWRITING HAND-HINGE INDEX RING LITTLESIGNWRITING HAND-A" + + "NGLE INDEX RING LITTLE OUTSIGNWRITING HAND-ANGLE INDEX RING LITTLESIGNWR" + + "ITING HAND-FIST MIDDLE DOWNSIGNWRITING HAND-HINGE MIDDLESIGNWRITING HAND" + + "-FIST MIDDLE UPSIGNWRITING HAND-CIRCLE MIDDLE UPSIGNWRITING HAND-FIST MI" + + "DDLE RAISED KNUCKLESIGNWRITING HAND-FIST MIDDLE UP THUMB SIDESIGNWRITING" + + " HAND-HOOK MIDDLE THUMBSIGNWRITING HAND-FIST MIDDLE THUMB LITTLESIGNWRIT" + + "ING HAND-FIST MIDDLE LITTLESIGNWRITING HAND-FIST MIDDLE RING LITTLESIGNW" + + "RITING HAND-CIRCLE MIDDLE RING LITTLESIGNWRITING HAND-CURLICUE MIDDLE RI" + + "NG LITTLE ONSIGNWRITING HAND-CUP MIDDLE RING LITTLESIGNWRITING HAND-HING" + + "E MIDDLE RING LITTLESIGNWRITING HAND-ANGLE MIDDLE RING LITTLE OUTSIGNWRI" + + "TING HAND-ANGLE MIDDLE RING LITTLE INSIGNWRITING HAND-ANGLE MIDDLE RING " + + "LITTLESIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE BENTSIGNWRITING HAND-CL" + + "AW MIDDLE RING LITTLE CONJOINEDSIGNWRITING HAND-CLAW MIDDLE RING LITTLE " + + "CONJOINED SIDESIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED OUTSIGN" + + "WRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED INSIGNWRITING HAND-HOOK M" + + "IDDLE RING LITTLE CONJOINEDSIGNWRITING HAND-HINGE INDEX HINGEDSIGNWRITIN" + + "G HAND-FIST INDEX THUMB SIDESIGNWRITING HAND-HINGE INDEX THUMB SIDESIGNW" + + "RITING HAND-FIST INDEX THUMB SIDE THUMB DIAGONALSIGNWRITING HAND-FIST IN" + + "DEX THUMB SIDE THUMB CONJOINEDSIGNWRITING HAND-FIST INDEX THUMB SIDE THU" + + "MB BENTSIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX BENTSIGNWRITING HAND" + + "-FIST INDEX THUMB SIDE BOTH BENTSIGNWRITING HAND-FIST INDEX THUMB SIDE I" + + "NDEX HINGESIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX STRAIGHTSIGNWR" + + "ITING HAND-FIST INDEX THUMB FORWARD INDEX BENTSIGNWRITING HAND-FIST INDE" + + "X THUMB HOOKSIGNWRITING HAND-FIST INDEX THUMB CURLICUESIGNWRITING HAND-F" + + "IST INDEX THUMB CURVE THUMB INSIDESIGNWRITING HAND-CLAW INDEX THUMB CURV" + + "E THUMB INSIDESIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB UNDERSIGNWRI" + + "TING HAND-FIST INDEX THUMB CIRCLESIGNWRITING HAND-CUP INDEX THUMBSIGNWRI" + + "TING HAND-CUP INDEX THUMB OPENSIGNWRITING HAND-HINGE INDEX THUMB OPENSIG" + + "NWRITING HAND-HINGE INDEX THUMB LARGESIGNWRITING HAND-HINGE INDEX THUMBS" + + "IGNWRITING HAND-HINGE INDEX THUMB SMALLSIGNWRITING HAND-ANGLE INDEX THUM" + + "B OUTSIGNWRITING HAND-ANGLE INDEX THUMB INSIGNWRITING HAND-ANGLE INDEX T" + + "HUMBSIGNWRITING HAND-FIST THUMBSIGNWRITING HAND-FIST THUMB HEELSIGNWRITI" + + "NG HAND-FIST THUMB SIDE DIAGONALSIGNWRITING HAND-FIST THUMB SIDE CONJOIN" + + "EDSIGNWRITING HAND-FIST THUMB SIDE BENTSIGNWRITING HAND-FIST THUMB FORWA" + + "RDSIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLESIGNWRITING HAND-FIST ") + ("" + + "THUMB BETWEEN MIDDLE RINGSIGNWRITING HAND-FIST THUMB BETWEEN RING LITTLE" + + "SIGNWRITING HAND-FIST THUMB UNDER TWO FINGERSSIGNWRITING HAND-FIST THUMB" + + " OVER TWO FINGERSSIGNWRITING HAND-FIST THUMB UNDER THREE FINGERSSIGNWRIT" + + "ING HAND-FIST THUMB UNDER FOUR FINGERSSIGNWRITING HAND-FIST THUMB OVER F" + + "OUR RAISED KNUCKLESSIGNWRITING HAND-FISTSIGNWRITING HAND-FIST HEELSIGNWR" + + "ITING TOUCH SINGLESIGNWRITING TOUCH MULTIPLESIGNWRITING TOUCH BETWEENSIG" + + "NWRITING GRASP SINGLESIGNWRITING GRASP MULTIPLESIGNWRITING GRASP BETWEEN" + + "SIGNWRITING STRIKE SINGLESIGNWRITING STRIKE MULTIPLESIGNWRITING STRIKE B" + + "ETWEENSIGNWRITING BRUSH SINGLESIGNWRITING BRUSH MULTIPLESIGNWRITING BRUS" + + "H BETWEENSIGNWRITING RUB SINGLESIGNWRITING RUB MULTIPLESIGNWRITING RUB B" + + "ETWEENSIGNWRITING SURFACE SYMBOLSSIGNWRITING SURFACE BETWEENSIGNWRITING " + + "SQUEEZE LARGE SINGLESIGNWRITING SQUEEZE SMALL SINGLESIGNWRITING SQUEEZE " + + "LARGE MULTIPLESIGNWRITING SQUEEZE SMALL MULTIPLESIGNWRITING SQUEEZE SEQU" + + "ENTIALSIGNWRITING FLICK LARGE SINGLESIGNWRITING FLICK SMALL SINGLESIGNWR" + + "ITING FLICK LARGE MULTIPLESIGNWRITING FLICK SMALL MULTIPLESIGNWRITING FL" + + "ICK SEQUENTIALSIGNWRITING SQUEEZE FLICK ALTERNATINGSIGNWRITING MOVEMENT-" + + "HINGE UP DOWN LARGESIGNWRITING MOVEMENT-HINGE UP DOWN SMALLSIGNWRITING M" + + "OVEMENT-HINGE UP SEQUENTIALSIGNWRITING MOVEMENT-HINGE DOWN SEQUENTIALSIG" + + "NWRITING MOVEMENT-HINGE UP DOWN ALTERNATING LARGESIGNWRITING MOVEMENT-HI" + + "NGE UP DOWN ALTERNATING SMALLSIGNWRITING MOVEMENT-HINGE SIDE TO SIDE SCI" + + "SSORSSIGNWRITING MOVEMENT-WALLPLANE FINGER CONTACTSIGNWRITING MOVEMENT-F" + + "LOORPLANE FINGER CONTACTSIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT S" + + "MALLSIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT MEDIUMSIGNWRITING MOV" + + "EMENT-WALLPLANE SINGLE STRAIGHT LARGESIGNWRITING MOVEMENT-WALLPLANE SING" + + "LE STRAIGHT LARGESTSIGNWRITING MOVEMENT-WALLPLANE SINGLE WRIST FLEXSIGNW" + + "RITING MOVEMENT-WALLPLANE DOUBLE STRAIGHTSIGNWRITING MOVEMENT-WALLPLANE " + + "DOUBLE WRIST FLEXSIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATINGSIGNWR" + + "ITING MOVEMENT-WALLPLANE DOUBLE ALTERNATING WRIST FLEXSIGNWRITING MOVEME" + + "NT-WALLPLANE CROSSSIGNWRITING MOVEMENT-WALLPLANE TRIPLE STRAIGHT MOVEMEN" + + "TSIGNWRITING MOVEMENT-WALLPLANE TRIPLE WRIST FLEXSIGNWRITING MOVEMENT-WA" + + "LLPLANE TRIPLE ALTERNATINGSIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNAT" + + "ING WRIST FLEXSIGNWRITING MOVEMENT-WALLPLANE BEND SMALLSIGNWRITING MOVEM" + + "ENT-WALLPLANE BEND MEDIUMSIGNWRITING MOVEMENT-WALLPLANE BEND LARGESIGNWR" + + "ITING MOVEMENT-WALLPLANE CORNER SMALLSIGNWRITING MOVEMENT-WALLPLANE CORN" + + "ER MEDIUMSIGNWRITING MOVEMENT-WALLPLANE CORNER LARGESIGNWRITING MOVEMENT" + + "-WALLPLANE CORNER ROTATIONSIGNWRITING MOVEMENT-WALLPLANE CHECK SMALLSIGN" + + "WRITING MOVEMENT-WALLPLANE CHECK MEDIUMSIGNWRITING MOVEMENT-WALLPLANE CH" + + "ECK LARGESIGNWRITING MOVEMENT-WALLPLANE BOX SMALLSIGNWRITING MOVEMENT-WA" + + "LLPLANE BOX MEDIUMSIGNWRITING MOVEMENT-WALLPLANE BOX LARGESIGNWRITING MO" + + "VEMENT-WALLPLANE ZIGZAG SMALLSIGNWRITING MOVEMENT-WALLPLANE ZIGZAG MEDIU" + + "MSIGNWRITING MOVEMENT-WALLPLANE ZIGZAG LARGESIGNWRITING MOVEMENT-WALLPLA" + + "NE PEAKS SMALLSIGNWRITING MOVEMENT-WALLPLANE PEAKS MEDIUMSIGNWRITING MOV" + + "EMENT-WALLPLANE PEAKS LARGESIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLA" + + "NE SINGLESIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE DOUBLESIGNWRITI" + + "NG TRAVEL-WALLPLANE ROTATION-WALLPLANE ALTERNATINGSIGNWRITING TRAVEL-WAL" + + "LPLANE ROTATION-FLOORPLANE SINGLESIGNWRITING TRAVEL-WALLPLANE ROTATION-F" + + "LOORPLANE DOUBLESIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE ALTERNA" + + "TINGSIGNWRITING TRAVEL-WALLPLANE SHAKINGSIGNWRITING TRAVEL-WALLPLANE ARM" + + " SPIRAL SINGLESIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL DOUBLESIGNWRITING " + + "TRAVEL-WALLPLANE ARM SPIRAL TRIPLESIGNWRITING MOVEMENT-DIAGONAL AWAY SMA" + + "LLSIGNWRITING MOVEMENT-DIAGONAL AWAY MEDIUMSIGNWRITING MOVEMENT-DIAGONAL" + + " AWAY LARGESIGNWRITING MOVEMENT-DIAGONAL AWAY LARGESTSIGNWRITING MOVEMEN" + + "T-DIAGONAL TOWARDS SMALLSIGNWRITING MOVEMENT-DIAGONAL TOWARDS MEDIUMSIGN" + + "WRITING MOVEMENT-DIAGONAL TOWARDS LARGESIGNWRITING MOVEMENT-DIAGONAL TOW" + + "ARDS LARGESTSIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY SMALLSIGNWRITING " + + "MOVEMENT-DIAGONAL BETWEEN AWAY MEDIUMSIGNWRITING MOVEMENT-DIAGONAL BETWE" + + "EN AWAY LARGESIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGESTSIGNWRITI" + + "NG MOVEMENT-DIAGONAL BETWEEN TOWARDS SMALLSIGNWRITING MOVEMENT-DIAGONAL " + + "BETWEEN TOWARDS MEDIUMSIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARG" + + "ESIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGESTSIGNWRITING MOVEME" + + "NT-FLOORPLANE SINGLE STRAIGHT SMALLSIGNWRITING MOVEMENT-FLOORPLANE SINGL" + + "E STRAIGHT MEDIUMSIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGESI" + + "GNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGESTSIGNWRITING MOVEMEN" + + "T-FLOORPLANE SINGLE WRIST FLEXSIGNWRITING MOVEMENT-FLOORPLANE DOUBLE STR") + ("" + + "AIGHTSIGNWRITING MOVEMENT-FLOORPLANE DOUBLE WRIST FLEXSIGNWRITING MOVEME" + + "NT-FLOORPLANE DOUBLE ALTERNATINGSIGNWRITING MOVEMENT-FLOORPLANE DOUBLE A" + + "LTERNATING WRIST FLEXSIGNWRITING MOVEMENT-FLOORPLANE CROSSSIGNWRITING MO" + + "VEMENT-FLOORPLANE TRIPLE STRAIGHT MOVEMENTSIGNWRITING MOVEMENT-FLOORPLAN" + + "E TRIPLE WRIST FLEXSIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING MO" + + "VEMENTSIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING WRIST FLEXSIGNW" + + "RITING MOVEMENT-FLOORPLANE BENDSIGNWRITING MOVEMENT-FLOORPLANE CORNER SM" + + "ALLSIGNWRITING MOVEMENT-FLOORPLANE CORNER MEDIUMSIGNWRITING MOVEMENT-FLO" + + "ORPLANE CORNER LARGESIGNWRITING MOVEMENT-FLOORPLANE CHECKSIGNWRITING MOV" + + "EMENT-FLOORPLANE BOX SMALLSIGNWRITING MOVEMENT-FLOORPLANE BOX MEDIUMSIGN" + + "WRITING MOVEMENT-FLOORPLANE BOX LARGESIGNWRITING MOVEMENT-FLOORPLANE ZIG" + + "ZAG SMALLSIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG MEDIUMSIGNWRITING MOVEME" + + "NT-FLOORPLANE ZIGZAG LARGESIGNWRITING MOVEMENT-FLOORPLANE PEAKS SMALLSIG" + + "NWRITING MOVEMENT-FLOORPLANE PEAKS MEDIUMSIGNWRITING MOVEMENT-FLOORPLANE" + + " PEAKS LARGESIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE SINGLESIGN" + + "WRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE DOUBLESIGNWRITING TRAVEL-F" + + "LOORPLANE ROTATION-FLOORPLANE ALTERNATINGSIGNWRITING TRAVEL-FLOORPLANE R" + + "OTATION-WALLPLANE SINGLESIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE" + + " DOUBLESIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE ALTERNATINGSIGNW" + + "RITING TRAVEL-FLOORPLANE SHAKINGSIGNWRITING MOVEMENT-WALLPLANE CURVE QUA" + + "RTER SMALLSIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER MEDIUMSIGNWRITING" + + " MOVEMENT-WALLPLANE CURVE QUARTER LARGESIGNWRITING MOVEMENT-WALLPLANE CU" + + "RVE QUARTER LARGESTSIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE SMAL" + + "LSIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE MEDIUMSIGNWRITING MOVE" + + "MENT-WALLPLANE CURVE HALF-CIRCLE LARGESIGNWRITING MOVEMENT-WALLPLANE CUR" + + "VE HALF-CIRCLE LARGESTSIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER" + + " CIRCLE SMALLSIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE M" + + "EDIUMSIGNWRITING MOVEMENT-WALLPLANE HUMP SMALLSIGNWRITING MOVEMENT-WALLP" + + "LANE HUMP MEDIUMSIGNWRITING MOVEMENT-WALLPLANE HUMP LARGESIGNWRITING MOV" + + "EMENT-WALLPLANE LOOP SMALLSIGNWRITING MOVEMENT-WALLPLANE LOOP MEDIUMSIGN" + + "WRITING MOVEMENT-WALLPLANE LOOP LARGESIGNWRITING MOVEMENT-WALLPLANE LOOP" + + " SMALL DOUBLESIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE SMALLSIGNW" + + "RITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE MEDIUMSIGNWRITING MOVEMENT-W" + + "ALLPLANE WAVE CURVE DOUBLE LARGESIGNWRITING MOVEMENT-WALLPLANE WAVE CURV" + + "E TRIPLE SMALLSIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE MEDIUMSIG" + + "NWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE LARGESIGNWRITING MOVEMENT-" + + "WALLPLANE CURVE THEN STRAIGHTSIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS" + + " SMALLSIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS MEDIUMSIGNWRITING ROTA" + + "TION-WALLPLANE SINGLESIGNWRITING ROTATION-WALLPLANE DOUBLESIGNWRITING RO" + + "TATION-WALLPLANE ALTERNATESIGNWRITING MOVEMENT-WALLPLANE SHAKINGSIGNWRIT" + + "ING MOVEMENT-WALLPLANE CURVE HITTING FRONT WALLSIGNWRITING MOVEMENT-WALL" + + "PLANE HUMP HITTING FRONT WALLSIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING" + + " FRONT WALLSIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING FRONT WALLSIGNWRI" + + "TING ROTATION-WALLPLANE SINGLE HITTING FRONT WALLSIGNWRITING ROTATION-WA" + + "LLPLANE DOUBLE HITTING FRONT WALLSIGNWRITING ROTATION-WALLPLANE ALTERNAT" + + "ING HITTING FRONT WALLSIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING CHEST" + + "SIGNWRITING MOVEMENT-WALLPLANE HUMP HITTING CHESTSIGNWRITING MOVEMENT-WA" + + "LLPLANE LOOP HITTING CHESTSIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING CH" + + "ESTSIGNWRITING ROTATION-WALLPLANE SINGLE HITTING CHESTSIGNWRITING ROTATI" + + "ON-WALLPLANE DOUBLE HITTING CHESTSIGNWRITING ROTATION-WALLPLANE ALTERNAT" + + "ING HITTING CHESTSIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH SMALL" + + "SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH MEDIUMSIGNWRITING MOVE" + + "MENT-WALLPLANE WAVE DIAGONAL PATH LARGESIGNWRITING MOVEMENT-FLOORPLANE C" + + "URVE HITTING CEILING SMALLSIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING " + + "CEILING LARGESIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL " + + "DOUBLESIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE DOUBLES" + + "IGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL TRIPLESIGNWRIT" + + "ING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE TRIPLESIGNWRITING MOV" + + "EMENT-FLOORPLANE LOOP HITTING CEILING SMALL SINGLESIGNWRITING MOVEMENT-F" + + "LOORPLANE LOOP HITTING CEILING LARGE SINGLESIGNWRITING MOVEMENT-FLOORPLA" + + "NE LOOP HITTING CEILING SMALL DOUBLESIGNWRITING MOVEMENT-FLOORPLANE LOOP" + + " HITTING CEILING LARGE DOUBLESIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTIN" + + "G CEILING SMALLSIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING LARG" + + "ESIGNWRITING ROTATION-FLOORPLANE SINGLE HITTING CEILINGSIGNWRITING ROTAT") + ("" + + "ION-FLOORPLANE DOUBLE HITTING CEILINGSIGNWRITING ROTATION-FLOORPLANE ALT" + + "ERNATING HITTING CEILINGSIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FL" + + "OOR SMALLSIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR LARGESIGNWR" + + "ITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR SMALL DOUBLESIGNWRITING MOV" + + "EMENT-FLOORPLANE HUMP HITTING FLOOR LARGE DOUBLESIGNWRITING MOVEMENT-FLO" + + "ORPLANE HUMP HITTING FLOOR TRIPLE SMALL TRIPLESIGNWRITING MOVEMENT-FLOOR" + + "PLANE HUMP HITTING FLOOR TRIPLE LARGE TRIPLESIGNWRITING MOVEMENT-FLOORPL" + + "ANE LOOP HITTING FLOOR SMALL SINGLESIGNWRITING MOVEMENT-FLOORPLANE LOOP " + + "HITTING FLOOR LARGE SINGLESIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING F" + + "LOOR SMALL DOUBLESIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARG" + + "E DOUBLESIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR SMALLSIGNWRIT" + + "ING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR LARGESIGNWRITING ROTATION-FLO" + + "ORPLANE SINGLE HITTING FLOORSIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTI" + + "NG FLOORSIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING FLOORSIGNWRI" + + "TING MOVEMENT-FLOORPLANE CURVE SMALLSIGNWRITING MOVEMENT-FLOORPLANE CURV" + + "E MEDIUMSIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGESIGNWRITING MOVEMENT-" + + "FLOORPLANE CURVE LARGESTSIGNWRITING MOVEMENT-FLOORPLANE CURVE COMBINEDSI" + + "GNWRITING MOVEMENT-FLOORPLANE HUMP SMALLSIGNWRITING MOVEMENT-FLOORPLANE " + + "LOOP SMALLSIGNWRITING MOVEMENT-FLOORPLANE WAVE SNAKESIGNWRITING MOVEMENT" + + "-FLOORPLANE WAVE SMALLSIGNWRITING MOVEMENT-FLOORPLANE WAVE LARGESIGNWRIT" + + "ING ROTATION-FLOORPLANE SINGLESIGNWRITING ROTATION-FLOORPLANE DOUBLESIGN" + + "WRITING ROTATION-FLOORPLANE ALTERNATINGSIGNWRITING MOVEMENT-FLOORPLANE S" + + "HAKING PARALLELSIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL SINGLESIG" + + "NWRITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM SINGLESIGNWRITING MOVEMENT" + + "-WALLPLANE ARM CIRCLE SMALL DOUBLESIGNWRITING MOVEMENT-WALLPLANE ARM CIR" + + "CLE MEDIUM DOUBLESIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL" + + " SMALL SINGLESIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MED" + + "IUM SINGLESIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE " + + "SINGLESIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL DOUB" + + "LESIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM DOUBLES" + + "IGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE DOUBLESIGNW" + + "RITING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT SINGLESIGNWRITING MOVEMENT-" + + "WALLPLANE WRIST CIRCLE FRONT DOUBLESIGNWRITING MOVEMENT-FLOORPLANE WRIST" + + " CIRCLE HITTING WALL SINGLESIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE " + + "HITTING WALL DOUBLESIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES SINGLES" + + "IGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES DOUBLESIGNWRITING MOVEMENT-" + + "FLOORPLANE FINGER CIRCLES HITTING WALL SINGLESIGNWRITING MOVEMENT-FLOORP" + + "LANE FINGER CIRCLES HITTING WALL DOUBLESIGNWRITING DYNAMIC ARROWHEAD SMA" + + "LLSIGNWRITING DYNAMIC ARROWHEAD LARGESIGNWRITING DYNAMIC FASTSIGNWRITING" + + " DYNAMIC SLOWSIGNWRITING DYNAMIC TENSESIGNWRITING DYNAMIC RELAXEDSIGNWRI" + + "TING DYNAMIC SIMULTANEOUSSIGNWRITING DYNAMIC SIMULTANEOUS ALTERNATINGSIG" + + "NWRITING DYNAMIC EVERY OTHER TIMESIGNWRITING DYNAMIC GRADUALSIGNWRITING " + + "HEADSIGNWRITING HEAD RIMSIGNWRITING HEAD MOVEMENT-WALLPLANE STRAIGHTSIGN" + + "WRITING HEAD MOVEMENT-WALLPLANE TILTSIGNWRITING HEAD MOVEMENT-FLOORPLANE" + + " STRAIGHTSIGNWRITING HEAD MOVEMENT-WALLPLANE CURVESIGNWRITING HEAD MOVEM" + + "ENT-FLOORPLANE CURVESIGNWRITING HEAD MOVEMENT CIRCLESIGNWRITING FACE DIR" + + "ECTION POSITION NOSE FORWARD TILTINGSIGNWRITING FACE DIRECTION POSITION " + + "NOSE UP OR DOWNSIGNWRITING FACE DIRECTION POSITION NOSE UP OR DOWN TILTI" + + "NGSIGNWRITING EYEBROWS STRAIGHT UPSIGNWRITING EYEBROWS STRAIGHT NEUTRALS" + + "IGNWRITING EYEBROWS STRAIGHT DOWNSIGNWRITING DREAMY EYEBROWS NEUTRAL DOW" + + "NSIGNWRITING DREAMY EYEBROWS DOWN NEUTRALSIGNWRITING DREAMY EYEBROWS UP " + + "NEUTRALSIGNWRITING DREAMY EYEBROWS NEUTRAL UPSIGNWRITING FOREHEAD NEUTRA" + + "LSIGNWRITING FOREHEAD CONTACTSIGNWRITING FOREHEAD WRINKLEDSIGNWRITING EY" + + "ES OPENSIGNWRITING EYES SQUEEZEDSIGNWRITING EYES CLOSEDSIGNWRITING EYE B" + + "LINK SINGLESIGNWRITING EYE BLINK MULTIPLESIGNWRITING EYES HALF OPENSIGNW" + + "RITING EYES WIDE OPENSIGNWRITING EYES HALF CLOSEDSIGNWRITING EYES WIDENI" + + "NG MOVEMENTSIGNWRITING EYE WINKSIGNWRITING EYELASHES UPSIGNWRITING EYELA" + + "SHES DOWNSIGNWRITING EYELASHES FLUTTERINGSIGNWRITING EYEGAZE-WALLPLANE S" + + "TRAIGHTSIGNWRITING EYEGAZE-WALLPLANE STRAIGHT DOUBLESIGNWRITING EYEGAZE-" + + "WALLPLANE STRAIGHT ALTERNATINGSIGNWRITING EYEGAZE-FLOORPLANE STRAIGHTSIG" + + "NWRITING EYEGAZE-FLOORPLANE STRAIGHT DOUBLESIGNWRITING EYEGAZE-FLOORPLAN" + + "E STRAIGHT ALTERNATINGSIGNWRITING EYEGAZE-WALLPLANE CURVEDSIGNWRITING EY" + + "EGAZE-FLOORPLANE CURVEDSIGNWRITING EYEGAZE-WALLPLANE CIRCLINGSIGNWRITING" + + " CHEEKS PUFFEDSIGNWRITING CHEEKS NEUTRALSIGNWRITING CHEEKS SUCKEDSIGNWRI") + ("" + + "TING TENSE CHEEKS HIGHSIGNWRITING TENSE CHEEKS MIDDLESIGNWRITING TENSE C" + + "HEEKS LOWSIGNWRITING EARSSIGNWRITING NOSE NEUTRALSIGNWRITING NOSE CONTAC" + + "TSIGNWRITING NOSE WRINKLESSIGNWRITING NOSE WIGGLESSIGNWRITING AIR BLOWIN" + + "G OUTSIGNWRITING AIR SUCKING INSIGNWRITING AIR BLOW SMALL ROTATIONSSIGNW" + + "RITING AIR SUCK SMALL ROTATIONSSIGNWRITING BREATH INHALESIGNWRITING BREA" + + "TH EXHALESIGNWRITING MOUTH CLOSED NEUTRALSIGNWRITING MOUTH CLOSED FORWAR" + + "DSIGNWRITING MOUTH CLOSED CONTACTSIGNWRITING MOUTH SMILESIGNWRITING MOUT" + + "H SMILE WRINKLEDSIGNWRITING MOUTH SMILE OPENSIGNWRITING MOUTH FROWNSIGNW" + + "RITING MOUTH FROWN WRINKLEDSIGNWRITING MOUTH FROWN OPENSIGNWRITING MOUTH" + + " OPEN CIRCLESIGNWRITING MOUTH OPEN FORWARDSIGNWRITING MOUTH OPEN WRINKLE" + + "DSIGNWRITING MOUTH OPEN OVALSIGNWRITING MOUTH OPEN OVAL WRINKLEDSIGNWRIT" + + "ING MOUTH OPEN OVAL YAWNSIGNWRITING MOUTH OPEN RECTANGLESIGNWRITING MOUT" + + "H OPEN RECTANGLE WRINKLEDSIGNWRITING MOUTH OPEN RECTANGLE YAWNSIGNWRITIN" + + "G MOUTH KISSSIGNWRITING MOUTH KISS FORWARDSIGNWRITING MOUTH KISS WRINKLE" + + "DSIGNWRITING MOUTH TENSESIGNWRITING MOUTH TENSE FORWARDSIGNWRITING MOUTH" + + " TENSE SUCKEDSIGNWRITING LIPS PRESSED TOGETHERSIGNWRITING LIP LOWER OVER" + + " UPPERSIGNWRITING LIP UPPER OVER LOWERSIGNWRITING MOUTH CORNERSSIGNWRITI" + + "NG MOUTH WRINKLES SINGLESIGNWRITING MOUTH WRINKLES DOUBLESIGNWRITING TON" + + "GUE STICKING OUT FARSIGNWRITING TONGUE LICKING LIPSSIGNWRITING TONGUE TI" + + "P BETWEEN LIPSSIGNWRITING TONGUE TIP TOUCHING INSIDE MOUTHSIGNWRITING TO" + + "NGUE INSIDE MOUTH RELAXEDSIGNWRITING TONGUE MOVES AGAINST CHEEKSIGNWRITI" + + "NG TONGUE CENTRE STICKING OUTSIGNWRITING TONGUE CENTRE INSIDE MOUTHSIGNW" + + "RITING TEETHSIGNWRITING TEETH MOVEMENTSIGNWRITING TEETH ON TONGUESIGNWRI" + + "TING TEETH ON TONGUE MOVEMENTSIGNWRITING TEETH ON LIPSSIGNWRITING TEETH " + + "ON LIPS MOVEMENTSIGNWRITING TEETH BITE LIPSSIGNWRITING MOVEMENT-WALLPLAN" + + "E JAWSIGNWRITING MOVEMENT-FLOORPLANE JAWSIGNWRITING NECKSIGNWRITING HAIR" + + "SIGNWRITING EXCITEMENTSIGNWRITING SHOULDER HIP SPINESIGNWRITING SHOULDER" + + " HIP POSITIONSSIGNWRITING WALLPLANE SHOULDER HIP MOVESIGNWRITING FLOORPL" + + "ANE SHOULDER HIP MOVESIGNWRITING SHOULDER TILTING FROM WAISTSIGNWRITING " + + "TORSO-WALLPLANE STRAIGHT STRETCHSIGNWRITING TORSO-WALLPLANE CURVED BENDS" + + "IGNWRITING TORSO-FLOORPLANE TWISTINGSIGNWRITING UPPER BODY TILTING FROM " + + "HIP JOINTSSIGNWRITING LIMB COMBINATIONSIGNWRITING LIMB LENGTH-1SIGNWRITI" + + "NG LIMB LENGTH-2SIGNWRITING LIMB LENGTH-3SIGNWRITING LIMB LENGTH-4SIGNWR" + + "ITING LIMB LENGTH-5SIGNWRITING LIMB LENGTH-6SIGNWRITING LIMB LENGTH-7SIG" + + "NWRITING FINGERSIGNWRITING LOCATION-WALLPLANE SPACESIGNWRITING LOCATION-" + + "FLOORPLANE SPACESIGNWRITING LOCATION HEIGHTSIGNWRITING LOCATION WIDTHSIG" + + "NWRITING LOCATION DEPTHSIGNWRITING LOCATION HEAD NECKSIGNWRITING LOCATIO" + + "N TORSOSIGNWRITING LOCATION LIMBS DIGITSSIGNWRITING COMMASIGNWRITING FUL" + + "L STOPSIGNWRITING SEMICOLONSIGNWRITING COLONSIGNWRITING PARENTHESISSIGNW" + + "RITING FILL MODIFIER-2SIGNWRITING FILL MODIFIER-3SIGNWRITING FILL MODIFI" + + "ER-4SIGNWRITING FILL MODIFIER-5SIGNWRITING FILL MODIFIER-6SIGNWRITING RO" + + "TATION MODIFIER-2SIGNWRITING ROTATION MODIFIER-3SIGNWRITING ROTATION MOD" + + "IFIER-4SIGNWRITING ROTATION MODIFIER-5SIGNWRITING ROTATION MODIFIER-6SIG" + + "NWRITING ROTATION MODIFIER-7SIGNWRITING ROTATION MODIFIER-8SIGNWRITING R" + + "OTATION MODIFIER-9SIGNWRITING ROTATION MODIFIER-10SIGNWRITING ROTATION M" + + "ODIFIER-11SIGNWRITING ROTATION MODIFIER-12SIGNWRITING ROTATION MODIFIER-" + + "13SIGNWRITING ROTATION MODIFIER-14SIGNWRITING ROTATION MODIFIER-15SIGNWR" + + "ITING ROTATION MODIFIER-16COMBINING GLAGOLITIC LETTER AZUCOMBINING GLAGO" + + "LITIC LETTER BUKYCOMBINING GLAGOLITIC LETTER VEDECOMBINING GLAGOLITIC LE" + + "TTER GLAGOLICOMBINING GLAGOLITIC LETTER DOBROCOMBINING GLAGOLITIC LETTER" + + " YESTUCOMBINING GLAGOLITIC LETTER ZHIVETECOMBINING GLAGOLITIC LETTER ZEM" + + "LJACOMBINING GLAGOLITIC LETTER IZHECOMBINING GLAGOLITIC LETTER INITIAL I" + + "ZHECOMBINING GLAGOLITIC LETTER ICOMBINING GLAGOLITIC LETTER DJERVICOMBIN" + + "ING GLAGOLITIC LETTER KAKOCOMBINING GLAGOLITIC LETTER LJUDIJECOMBINING G" + + "LAGOLITIC LETTER MYSLITECOMBINING GLAGOLITIC LETTER NASHICOMBINING GLAGO" + + "LITIC LETTER ONUCOMBINING GLAGOLITIC LETTER POKOJICOMBINING GLAGOLITIC L" + + "ETTER RITSICOMBINING GLAGOLITIC LETTER SLOVOCOMBINING GLAGOLITIC LETTER " + + "TVRIDOCOMBINING GLAGOLITIC LETTER UKUCOMBINING GLAGOLITIC LETTER FRITUCO" + + "MBINING GLAGOLITIC LETTER HERUCOMBINING GLAGOLITIC LETTER SHTACOMBINING " + + "GLAGOLITIC LETTER TSICOMBINING GLAGOLITIC LETTER CHRIVICOMBINING GLAGOLI" + + "TIC LETTER SHACOMBINING GLAGOLITIC LETTER YERUCOMBINING GLAGOLITIC LETTE" + + "R YERICOMBINING GLAGOLITIC LETTER YATICOMBINING GLAGOLITIC LETTER YUCOMB" + + "INING GLAGOLITIC LETTER SMALL YUSCOMBINING GLAGOLITIC LETTER YOCOMBINING" + + " GLAGOLITIC LETTER IOTATED SMALL YUSCOMBINING GLAGOLITIC LETTER BIG YUSC") + ("" + + "OMBINING GLAGOLITIC LETTER IOTATED BIG YUSCOMBINING GLAGOLITIC LETTER FI" + + "TAMENDE KIKAKUI SYLLABLE M001 KIMENDE KIKAKUI SYLLABLE M002 KAMENDE KIKA" + + "KUI SYLLABLE M003 KUMENDE KIKAKUI SYLLABLE M065 KEEMENDE KIKAKUI SYLLABL" + + "E M095 KEMENDE KIKAKUI SYLLABLE M076 KOOMENDE KIKAKUI SYLLABLE M048 KOME" + + "NDE KIKAKUI SYLLABLE M179 KUAMENDE KIKAKUI SYLLABLE M004 WIMENDE KIKAKUI" + + " SYLLABLE M005 WAMENDE KIKAKUI SYLLABLE M006 WUMENDE KIKAKUI SYLLABLE M1" + + "26 WEEMENDE KIKAKUI SYLLABLE M118 WEMENDE KIKAKUI SYLLABLE M114 WOOMENDE" + + " KIKAKUI SYLLABLE M045 WOMENDE KIKAKUI SYLLABLE M194 WUIMENDE KIKAKUI SY" + + "LLABLE M143 WEIMENDE KIKAKUI SYLLABLE M061 WVIMENDE KIKAKUI SYLLABLE M04" + + "9 WVAMENDE KIKAKUI SYLLABLE M139 WVEMENDE KIKAKUI SYLLABLE M007 MINMENDE" + + " KIKAKUI SYLLABLE M008 MANMENDE KIKAKUI SYLLABLE M009 MUNMENDE KIKAKUI S" + + "YLLABLE M059 MENMENDE KIKAKUI SYLLABLE M094 MONMENDE KIKAKUI SYLLABLE M1" + + "54 MUANMENDE KIKAKUI SYLLABLE M189 MUENMENDE KIKAKUI SYLLABLE M010 BIMEN" + + "DE KIKAKUI SYLLABLE M011 BAMENDE KIKAKUI SYLLABLE M012 BUMENDE KIKAKUI S" + + "YLLABLE M150 BEEMENDE KIKAKUI SYLLABLE M097 BEMENDE KIKAKUI SYLLABLE M10" + + "3 BOOMENDE KIKAKUI SYLLABLE M138 BOMENDE KIKAKUI SYLLABLE M013 IMENDE KI" + + "KAKUI SYLLABLE M014 AMENDE KIKAKUI SYLLABLE M015 UMENDE KIKAKUI SYLLABLE" + + " M163 EEMENDE KIKAKUI SYLLABLE M100 EMENDE KIKAKUI SYLLABLE M165 OOMENDE" + + " KIKAKUI SYLLABLE M147 OMENDE KIKAKUI SYLLABLE M137 EIMENDE KIKAKUI SYLL" + + "ABLE M131 INMENDE KIKAKUI SYLLABLE M135 INMENDE KIKAKUI SYLLABLE M195 AN" + + "MENDE KIKAKUI SYLLABLE M178 ENMENDE KIKAKUI SYLLABLE M019 SIMENDE KIKAKU" + + "I SYLLABLE M020 SAMENDE KIKAKUI SYLLABLE M021 SUMENDE KIKAKUI SYLLABLE M" + + "162 SEEMENDE KIKAKUI SYLLABLE M116 SEMENDE KIKAKUI SYLLABLE M136 SOOMEND" + + "E KIKAKUI SYLLABLE M079 SOMENDE KIKAKUI SYLLABLE M196 SIAMENDE KIKAKUI S" + + "YLLABLE M025 LIMENDE KIKAKUI SYLLABLE M026 LAMENDE KIKAKUI SYLLABLE M027" + + " LUMENDE KIKAKUI SYLLABLE M084 LEEMENDE KIKAKUI SYLLABLE M073 LEMENDE KI" + + "KAKUI SYLLABLE M054 LOOMENDE KIKAKUI SYLLABLE M153 LOMENDE KIKAKUI SYLLA" + + "BLE M110 LONG LEMENDE KIKAKUI SYLLABLE M016 DIMENDE KIKAKUI SYLLABLE M01" + + "7 DAMENDE KIKAKUI SYLLABLE M018 DUMENDE KIKAKUI SYLLABLE M089 DEEMENDE K" + + "IKAKUI SYLLABLE M180 DOOMENDE KIKAKUI SYLLABLE M181 DOMENDE KIKAKUI SYLL" + + "ABLE M022 TIMENDE KIKAKUI SYLLABLE M023 TAMENDE KIKAKUI SYLLABLE M024 TU" + + "MENDE KIKAKUI SYLLABLE M091 TEEMENDE KIKAKUI SYLLABLE M055 TEMENDE KIKAK" + + "UI SYLLABLE M104 TOOMENDE KIKAKUI SYLLABLE M069 TOMENDE KIKAKUI SYLLABLE" + + " M028 JIMENDE KIKAKUI SYLLABLE M029 JAMENDE KIKAKUI SYLLABLE M030 JUMEND" + + "E KIKAKUI SYLLABLE M157 JEEMENDE KIKAKUI SYLLABLE M113 JEMENDE KIKAKUI S" + + "YLLABLE M160 JOOMENDE KIKAKUI SYLLABLE M063 JOMENDE KIKAKUI SYLLABLE M17" + + "5 LONG JOMENDE KIKAKUI SYLLABLE M031 YIMENDE KIKAKUI SYLLABLE M032 YAMEN" + + "DE KIKAKUI SYLLABLE M033 YUMENDE KIKAKUI SYLLABLE M109 YEEMENDE KIKAKUI " + + "SYLLABLE M080 YEMENDE KIKAKUI SYLLABLE M141 YOOMENDE KIKAKUI SYLLABLE M1" + + "21 YOMENDE KIKAKUI SYLLABLE M034 FIMENDE KIKAKUI SYLLABLE M035 FAMENDE K" + + "IKAKUI SYLLABLE M036 FUMENDE KIKAKUI SYLLABLE M078 FEEMENDE KIKAKUI SYLL" + + "ABLE M075 FEMENDE KIKAKUI SYLLABLE M133 FOOMENDE KIKAKUI SYLLABLE M088 F" + + "OMENDE KIKAKUI SYLLABLE M197 FUAMENDE KIKAKUI SYLLABLE M101 FANMENDE KIK" + + "AKUI SYLLABLE M037 NINMENDE KIKAKUI SYLLABLE M038 NANMENDE KIKAKUI SYLLA" + + "BLE M039 NUNMENDE KIKAKUI SYLLABLE M117 NENMENDE KIKAKUI SYLLABLE M169 N" + + "ONMENDE KIKAKUI SYLLABLE M176 HIMENDE KIKAKUI SYLLABLE M041 HAMENDE KIKA" + + "KUI SYLLABLE M186 HUMENDE KIKAKUI SYLLABLE M040 HEEMENDE KIKAKUI SYLLABL" + + "E M096 HEMENDE KIKAKUI SYLLABLE M042 HOOMENDE KIKAKUI SYLLABLE M140 HOME" + + "NDE KIKAKUI SYLLABLE M083 HEEIMENDE KIKAKUI SYLLABLE M128 HOOUMENDE KIKA" + + "KUI SYLLABLE M053 HINMENDE KIKAKUI SYLLABLE M130 HANMENDE KIKAKUI SYLLAB" + + "LE M087 HUNMENDE KIKAKUI SYLLABLE M052 HENMENDE KIKAKUI SYLLABLE M193 HO" + + "NMENDE KIKAKUI SYLLABLE M046 HUANMENDE KIKAKUI SYLLABLE M090 NGGIMENDE K" + + "IKAKUI SYLLABLE M043 NGGAMENDE KIKAKUI SYLLABLE M082 NGGUMENDE KIKAKUI S" + + "YLLABLE M115 NGGEEMENDE KIKAKUI SYLLABLE M146 NGGEMENDE KIKAKUI SYLLABLE" + + " M156 NGGOOMENDE KIKAKUI SYLLABLE M120 NGGOMENDE KIKAKUI SYLLABLE M159 N" + + "GGAAMENDE KIKAKUI SYLLABLE M127 NGGUAMENDE KIKAKUI SYLLABLE M086 LONG NG" + + "GEMENDE KIKAKUI SYLLABLE M106 LONG NGGOOMENDE KIKAKUI SYLLABLE M183 LONG" + + " NGGOMENDE KIKAKUI SYLLABLE M155 GIMENDE KIKAKUI SYLLABLE M111 GAMENDE K" + + "IKAKUI SYLLABLE M168 GUMENDE KIKAKUI SYLLABLE M190 GEEMENDE KIKAKUI SYLL" + + "ABLE M166 GUEIMENDE KIKAKUI SYLLABLE M167 GUANMENDE KIKAKUI SYLLABLE M18" + + "4 NGENMENDE KIKAKUI SYLLABLE M057 NGONMENDE KIKAKUI SYLLABLE M177 NGUANM" + + "ENDE KIKAKUI SYLLABLE M068 PIMENDE KIKAKUI SYLLABLE M099 PAMENDE KIKAKUI" + + " SYLLABLE M050 PUMENDE KIKAKUI SYLLABLE M081 PEEMENDE KIKAKUI SYLLABLE M" + + "051 PEMENDE KIKAKUI SYLLABLE M102 POOMENDE KIKAKUI SYLLABLE M066 POMENDE") + ("" + + " KIKAKUI SYLLABLE M145 MBIMENDE KIKAKUI SYLLABLE M062 MBAMENDE KIKAKUI S" + + "YLLABLE M122 MBUMENDE KIKAKUI SYLLABLE M047 MBEEMENDE KIKAKUI SYLLABLE M" + + "188 MBEEMENDE KIKAKUI SYLLABLE M072 MBEMENDE KIKAKUI SYLLABLE M172 MBOOM" + + "ENDE KIKAKUI SYLLABLE M174 MBOMENDE KIKAKUI SYLLABLE M187 MBUUMENDE KIKA" + + "KUI SYLLABLE M161 LONG MBEMENDE KIKAKUI SYLLABLE M105 LONG MBOOMENDE KIK" + + "AKUI SYLLABLE M142 LONG MBOMENDE KIKAKUI SYLLABLE M132 KPIMENDE KIKAKUI " + + "SYLLABLE M092 KPAMENDE KIKAKUI SYLLABLE M074 KPUMENDE KIKAKUI SYLLABLE M" + + "044 KPEEMENDE KIKAKUI SYLLABLE M108 KPEMENDE KIKAKUI SYLLABLE M112 KPOOM" + + "ENDE KIKAKUI SYLLABLE M158 KPOMENDE KIKAKUI SYLLABLE M124 GBIMENDE KIKAK" + + "UI SYLLABLE M056 GBAMENDE KIKAKUI SYLLABLE M148 GBUMENDE KIKAKUI SYLLABL" + + "E M093 GBEEMENDE KIKAKUI SYLLABLE M107 GBEMENDE KIKAKUI SYLLABLE M071 GB" + + "OOMENDE KIKAKUI SYLLABLE M070 GBOMENDE KIKAKUI SYLLABLE M171 RAMENDE KIK" + + "AKUI SYLLABLE M123 NDIMENDE KIKAKUI SYLLABLE M129 NDAMENDE KIKAKUI SYLLA" + + "BLE M125 NDUMENDE KIKAKUI SYLLABLE M191 NDEEMENDE KIKAKUI SYLLABLE M119 " + + "NDEMENDE KIKAKUI SYLLABLE M067 NDOOMENDE KIKAKUI SYLLABLE M064 NDOMENDE " + + "KIKAKUI SYLLABLE M152 NJAMENDE KIKAKUI SYLLABLE M192 NJUMENDE KIKAKUI SY" + + "LLABLE M149 NJEEMENDE KIKAKUI SYLLABLE M134 NJOOMENDE KIKAKUI SYLLABLE M" + + "182 VIMENDE KIKAKUI SYLLABLE M185 VAMENDE KIKAKUI SYLLABLE M151 VUMENDE " + + "KIKAKUI SYLLABLE M173 VEEMENDE KIKAKUI SYLLABLE M085 VEMENDE KIKAKUI SYL" + + "LABLE M144 VOOMENDE KIKAKUI SYLLABLE M077 VOMENDE KIKAKUI SYLLABLE M164 " + + "NYINMENDE KIKAKUI SYLLABLE M058 NYANMENDE KIKAKUI SYLLABLE M170 NYUNMEND" + + "E KIKAKUI SYLLABLE M098 NYENMENDE KIKAKUI SYLLABLE M060 NYONMENDE KIKAKU" + + "I DIGIT ONEMENDE KIKAKUI DIGIT TWOMENDE KIKAKUI DIGIT THREEMENDE KIKAKUI" + + " DIGIT FOURMENDE KIKAKUI DIGIT FIVEMENDE KIKAKUI DIGIT SIXMENDE KIKAKUI " + + "DIGIT SEVENMENDE KIKAKUI DIGIT EIGHTMENDE KIKAKUI DIGIT NINEMENDE KIKAKU" + + "I COMBINING NUMBER TEENSMENDE KIKAKUI COMBINING NUMBER TENSMENDE KIKAKUI" + + " COMBINING NUMBER HUNDREDSMENDE KIKAKUI COMBINING NUMBER THOUSANDSMENDE " + + "KIKAKUI COMBINING NUMBER TEN THOUSANDSMENDE KIKAKUI COMBINING NUMBER HUN" + + "DRED THOUSANDSMENDE KIKAKUI COMBINING NUMBER MILLIONSADLAM CAPITAL LETTE" + + "R ALIFADLAM CAPITAL LETTER DAALIADLAM CAPITAL LETTER LAAMADLAM CAPITAL L" + + "ETTER MIIMADLAM CAPITAL LETTER BAADLAM CAPITAL LETTER SINNYIIYHEADLAM CA" + + "PITAL LETTER PEADLAM CAPITAL LETTER BHEADLAM CAPITAL LETTER RAADLAM CAPI" + + "TAL LETTER EADLAM CAPITAL LETTER FAADLAM CAPITAL LETTER IADLAM CAPITAL L" + + "ETTER OADLAM CAPITAL LETTER DHAADLAM CAPITAL LETTER YHEADLAM CAPITAL LET" + + "TER WAWADLAM CAPITAL LETTER NUNADLAM CAPITAL LETTER KAFADLAM CAPITAL LET" + + "TER YAADLAM CAPITAL LETTER UADLAM CAPITAL LETTER JIIMADLAM CAPITAL LETTE" + + "R CHIADLAM CAPITAL LETTER HAADLAM CAPITAL LETTER QAAFADLAM CAPITAL LETTE" + + "R GAADLAM CAPITAL LETTER NYAADLAM CAPITAL LETTER TUADLAM CAPITAL LETTER " + + "NHAADLAM CAPITAL LETTER VAADLAM CAPITAL LETTER KHAADLAM CAPITAL LETTER G" + + "BEADLAM CAPITAL LETTER ZALADLAM CAPITAL LETTER KPOADLAM CAPITAL LETTER S" + + "HAADLAM SMALL LETTER ALIFADLAM SMALL LETTER DAALIADLAM SMALL LETTER LAAM" + + "ADLAM SMALL LETTER MIIMADLAM SMALL LETTER BAADLAM SMALL LETTER SINNYIIYH" + + "EADLAM SMALL LETTER PEADLAM SMALL LETTER BHEADLAM SMALL LETTER RAADLAM S" + + "MALL LETTER EADLAM SMALL LETTER FAADLAM SMALL LETTER IADLAM SMALL LETTER" + + " OADLAM SMALL LETTER DHAADLAM SMALL LETTER YHEADLAM SMALL LETTER WAWADLA" + + "M SMALL LETTER NUNADLAM SMALL LETTER KAFADLAM SMALL LETTER YAADLAM SMALL" + + " LETTER UADLAM SMALL LETTER JIIMADLAM SMALL LETTER CHIADLAM SMALL LETTER" + + " HAADLAM SMALL LETTER QAAFADLAM SMALL LETTER GAADLAM SMALL LETTER NYAADL" + + "AM SMALL LETTER TUADLAM SMALL LETTER NHAADLAM SMALL LETTER VAADLAM SMALL" + + " LETTER KHAADLAM SMALL LETTER GBEADLAM SMALL LETTER ZALADLAM SMALL LETTE" + + "R KPOADLAM SMALL LETTER SHAADLAM ALIF LENGTHENERADLAM VOWEL LENGTHENERAD" + + "LAM GEMINATION MARKADLAM HAMZAADLAM CONSONANT MODIFIERADLAM GEMINATE CON" + + "SONANT MODIFIERADLAM NUKTAADLAM DIGIT ZEROADLAM DIGIT ONEADLAM DIGIT TWO" + + "ADLAM DIGIT THREEADLAM DIGIT FOURADLAM DIGIT FIVEADLAM DIGIT SIXADLAM DI" + + "GIT SEVENADLAM DIGIT EIGHTADLAM DIGIT NINEADLAM INITIAL EXCLAMATION MARK" + + "ADLAM INITIAL QUESTION MARKARABIC MATHEMATICAL ALEFARABIC MATHEMATICAL B" + + "EHARABIC MATHEMATICAL JEEMARABIC MATHEMATICAL DALARABIC MATHEMATICAL WAW" + + "ARABIC MATHEMATICAL ZAINARABIC MATHEMATICAL HAHARABIC MATHEMATICAL TAHAR" + + "ABIC MATHEMATICAL YEHARABIC MATHEMATICAL KAFARABIC MATHEMATICAL LAMARABI" + + "C MATHEMATICAL MEEMARABIC MATHEMATICAL NOONARABIC MATHEMATICAL SEENARABI" + + "C MATHEMATICAL AINARABIC MATHEMATICAL FEHARABIC MATHEMATICAL SADARABIC M" + + "ATHEMATICAL QAFARABIC MATHEMATICAL REHARABIC MATHEMATICAL SHEENARABIC MA" + + "THEMATICAL TEHARABIC MATHEMATICAL THEHARABIC MATHEMATICAL KHAHARABIC MAT" + + "HEMATICAL THALARABIC MATHEMATICAL DADARABIC MATHEMATICAL ZAHARABIC MATHE") + ("" + + "MATICAL GHAINARABIC MATHEMATICAL DOTLESS BEHARABIC MATHEMATICAL DOTLESS " + + "NOONARABIC MATHEMATICAL DOTLESS FEHARABIC MATHEMATICAL DOTLESS QAFARABIC" + + " MATHEMATICAL INITIAL BEHARABIC MATHEMATICAL INITIAL JEEMARABIC MATHEMAT" + + "ICAL INITIAL HEHARABIC MATHEMATICAL INITIAL HAHARABIC MATHEMATICAL INITI" + + "AL YEHARABIC MATHEMATICAL INITIAL KAFARABIC MATHEMATICAL INITIAL LAMARAB" + + "IC MATHEMATICAL INITIAL MEEMARABIC MATHEMATICAL INITIAL NOONARABIC MATHE" + + "MATICAL INITIAL SEENARABIC MATHEMATICAL INITIAL AINARABIC MATHEMATICAL I" + + "NITIAL FEHARABIC MATHEMATICAL INITIAL SADARABIC MATHEMATICAL INITIAL QAF" + + "ARABIC MATHEMATICAL INITIAL SHEENARABIC MATHEMATICAL INITIAL TEHARABIC M" + + "ATHEMATICAL INITIAL THEHARABIC MATHEMATICAL INITIAL KHAHARABIC MATHEMATI" + + "CAL INITIAL DADARABIC MATHEMATICAL INITIAL GHAINARABIC MATHEMATICAL TAIL" + + "ED JEEMARABIC MATHEMATICAL TAILED HAHARABIC MATHEMATICAL TAILED YEHARABI" + + "C MATHEMATICAL TAILED LAMARABIC MATHEMATICAL TAILED NOONARABIC MATHEMATI" + + "CAL TAILED SEENARABIC MATHEMATICAL TAILED AINARABIC MATHEMATICAL TAILED " + + "SADARABIC MATHEMATICAL TAILED QAFARABIC MATHEMATICAL TAILED SHEENARABIC " + + "MATHEMATICAL TAILED KHAHARABIC MATHEMATICAL TAILED DADARABIC MATHEMATICA" + + "L TAILED GHAINARABIC MATHEMATICAL TAILED DOTLESS NOONARABIC MATHEMATICAL" + + " TAILED DOTLESS QAFARABIC MATHEMATICAL STRETCHED BEHARABIC MATHEMATICAL " + + "STRETCHED JEEMARABIC MATHEMATICAL STRETCHED HEHARABIC MATHEMATICAL STRET" + + "CHED HAHARABIC MATHEMATICAL STRETCHED TAHARABIC MATHEMATICAL STRETCHED Y" + + "EHARABIC MATHEMATICAL STRETCHED KAFARABIC MATHEMATICAL STRETCHED MEEMARA" + + "BIC MATHEMATICAL STRETCHED NOONARABIC MATHEMATICAL STRETCHED SEENARABIC " + + "MATHEMATICAL STRETCHED AINARABIC MATHEMATICAL STRETCHED FEHARABIC MATHEM" + + "ATICAL STRETCHED SADARABIC MATHEMATICAL STRETCHED QAFARABIC MATHEMATICAL" + + " STRETCHED SHEENARABIC MATHEMATICAL STRETCHED TEHARABIC MATHEMATICAL STR" + + "ETCHED THEHARABIC MATHEMATICAL STRETCHED KHAHARABIC MATHEMATICAL STRETCH" + + "ED DADARABIC MATHEMATICAL STRETCHED ZAHARABIC MATHEMATICAL STRETCHED GHA" + + "INARABIC MATHEMATICAL STRETCHED DOTLESS BEHARABIC MATHEMATICAL STRETCHED" + + " DOTLESS FEHARABIC MATHEMATICAL LOOPED ALEFARABIC MATHEMATICAL LOOPED BE" + + "HARABIC MATHEMATICAL LOOPED JEEMARABIC MATHEMATICAL LOOPED DALARABIC MAT" + + "HEMATICAL LOOPED HEHARABIC MATHEMATICAL LOOPED WAWARABIC MATHEMATICAL LO" + + "OPED ZAINARABIC MATHEMATICAL LOOPED HAHARABIC MATHEMATICAL LOOPED TAHARA" + + "BIC MATHEMATICAL LOOPED YEHARABIC MATHEMATICAL LOOPED LAMARABIC MATHEMAT" + + "ICAL LOOPED MEEMARABIC MATHEMATICAL LOOPED NOONARABIC MATHEMATICAL LOOPE" + + "D SEENARABIC MATHEMATICAL LOOPED AINARABIC MATHEMATICAL LOOPED FEHARABIC" + + " MATHEMATICAL LOOPED SADARABIC MATHEMATICAL LOOPED QAFARABIC MATHEMATICA" + + "L LOOPED REHARABIC MATHEMATICAL LOOPED SHEENARABIC MATHEMATICAL LOOPED T" + + "EHARABIC MATHEMATICAL LOOPED THEHARABIC MATHEMATICAL LOOPED KHAHARABIC M" + + "ATHEMATICAL LOOPED THALARABIC MATHEMATICAL LOOPED DADARABIC MATHEMATICAL" + + " LOOPED ZAHARABIC MATHEMATICAL LOOPED GHAINARABIC MATHEMATICAL DOUBLE-ST" + + "RUCK BEHARABIC MATHEMATICAL DOUBLE-STRUCK JEEMARABIC MATHEMATICAL DOUBLE" + + "-STRUCK DALARABIC MATHEMATICAL DOUBLE-STRUCK WAWARABIC MATHEMATICAL DOUB" + + "LE-STRUCK ZAINARABIC MATHEMATICAL DOUBLE-STRUCK HAHARABIC MATHEMATICAL D" + + "OUBLE-STRUCK TAHARABIC MATHEMATICAL DOUBLE-STRUCK YEHARABIC MATHEMATICAL" + + " DOUBLE-STRUCK LAMARABIC MATHEMATICAL DOUBLE-STRUCK MEEMARABIC MATHEMATI" + + "CAL DOUBLE-STRUCK NOONARABIC MATHEMATICAL DOUBLE-STRUCK SEENARABIC MATHE" + + "MATICAL DOUBLE-STRUCK AINARABIC MATHEMATICAL DOUBLE-STRUCK FEHARABIC MAT" + + "HEMATICAL DOUBLE-STRUCK SADARABIC MATHEMATICAL DOUBLE-STRUCK QAFARABIC M" + + "ATHEMATICAL DOUBLE-STRUCK REHARABIC MATHEMATICAL DOUBLE-STRUCK SHEENARAB" + + "IC MATHEMATICAL DOUBLE-STRUCK TEHARABIC MATHEMATICAL DOUBLE-STRUCK THEHA" + + "RABIC MATHEMATICAL DOUBLE-STRUCK KHAHARABIC MATHEMATICAL DOUBLE-STRUCK T" + + "HALARABIC MATHEMATICAL DOUBLE-STRUCK DADARABIC MATHEMATICAL DOUBLE-STRUC" + + "K ZAHARABIC MATHEMATICAL DOUBLE-STRUCK GHAINARABIC MATHEMATICAL OPERATOR" + + " MEEM WITH HAH WITH TATWEELARABIC MATHEMATICAL OPERATOR HAH WITH DALMAHJ" + + "ONG TILE EAST WINDMAHJONG TILE SOUTH WINDMAHJONG TILE WEST WINDMAHJONG T" + + "ILE NORTH WINDMAHJONG TILE RED DRAGONMAHJONG TILE GREEN DRAGONMAHJONG TI" + + "LE WHITE DRAGONMAHJONG TILE ONE OF CHARACTERSMAHJONG TILE TWO OF CHARACT" + + "ERSMAHJONG TILE THREE OF CHARACTERSMAHJONG TILE FOUR OF CHARACTERSMAHJON" + + "G TILE FIVE OF CHARACTERSMAHJONG TILE SIX OF CHARACTERSMAHJONG TILE SEVE" + + "N OF CHARACTERSMAHJONG TILE EIGHT OF CHARACTERSMAHJONG TILE NINE OF CHAR" + + "ACTERSMAHJONG TILE ONE OF BAMBOOSMAHJONG TILE TWO OF BAMBOOSMAHJONG TILE" + + " THREE OF BAMBOOSMAHJONG TILE FOUR OF BAMBOOSMAHJONG TILE FIVE OF BAMBOO" + + "SMAHJONG TILE SIX OF BAMBOOSMAHJONG TILE SEVEN OF BAMBOOSMAHJONG TILE EI" + + "GHT OF BAMBOOSMAHJONG TILE NINE OF BAMBOOSMAHJONG TILE ONE OF CIRCLESMAH") + ("" + + "JONG TILE TWO OF CIRCLESMAHJONG TILE THREE OF CIRCLESMAHJONG TILE FOUR O" + + "F CIRCLESMAHJONG TILE FIVE OF CIRCLESMAHJONG TILE SIX OF CIRCLESMAHJONG " + + "TILE SEVEN OF CIRCLESMAHJONG TILE EIGHT OF CIRCLESMAHJONG TILE NINE OF C" + + "IRCLESMAHJONG TILE PLUMMAHJONG TILE ORCHIDMAHJONG TILE BAMBOOMAHJONG TIL" + + "E CHRYSANTHEMUMMAHJONG TILE SPRINGMAHJONG TILE SUMMERMAHJONG TILE AUTUMN" + + "MAHJONG TILE WINTERMAHJONG TILE JOKERMAHJONG TILE BACKDOMINO TILE HORIZO" + + "NTAL BACKDOMINO TILE HORIZONTAL-00-00DOMINO TILE HORIZONTAL-00-01DOMINO " + + "TILE HORIZONTAL-00-02DOMINO TILE HORIZONTAL-00-03DOMINO TILE HORIZONTAL-" + + "00-04DOMINO TILE HORIZONTAL-00-05DOMINO TILE HORIZONTAL-00-06DOMINO TILE" + + " HORIZONTAL-01-00DOMINO TILE HORIZONTAL-01-01DOMINO TILE HORIZONTAL-01-0" + + "2DOMINO TILE HORIZONTAL-01-03DOMINO TILE HORIZONTAL-01-04DOMINO TILE HOR" + + "IZONTAL-01-05DOMINO TILE HORIZONTAL-01-06DOMINO TILE HORIZONTAL-02-00DOM" + + "INO TILE HORIZONTAL-02-01DOMINO TILE HORIZONTAL-02-02DOMINO TILE HORIZON" + + "TAL-02-03DOMINO TILE HORIZONTAL-02-04DOMINO TILE HORIZONTAL-02-05DOMINO " + + "TILE HORIZONTAL-02-06DOMINO TILE HORIZONTAL-03-00DOMINO TILE HORIZONTAL-" + + "03-01DOMINO TILE HORIZONTAL-03-02DOMINO TILE HORIZONTAL-03-03DOMINO TILE" + + " HORIZONTAL-03-04DOMINO TILE HORIZONTAL-03-05DOMINO TILE HORIZONTAL-03-0" + + "6DOMINO TILE HORIZONTAL-04-00DOMINO TILE HORIZONTAL-04-01DOMINO TILE HOR" + + "IZONTAL-04-02DOMINO TILE HORIZONTAL-04-03DOMINO TILE HORIZONTAL-04-04DOM" + + "INO TILE HORIZONTAL-04-05DOMINO TILE HORIZONTAL-04-06DOMINO TILE HORIZON" + + "TAL-05-00DOMINO TILE HORIZONTAL-05-01DOMINO TILE HORIZONTAL-05-02DOMINO " + + "TILE HORIZONTAL-05-03DOMINO TILE HORIZONTAL-05-04DOMINO TILE HORIZONTAL-" + + "05-05DOMINO TILE HORIZONTAL-05-06DOMINO TILE HORIZONTAL-06-00DOMINO TILE" + + " HORIZONTAL-06-01DOMINO TILE HORIZONTAL-06-02DOMINO TILE HORIZONTAL-06-0" + + "3DOMINO TILE HORIZONTAL-06-04DOMINO TILE HORIZONTAL-06-05DOMINO TILE HOR" + + "IZONTAL-06-06DOMINO TILE VERTICAL BACKDOMINO TILE VERTICAL-00-00DOMINO T" + + "ILE VERTICAL-00-01DOMINO TILE VERTICAL-00-02DOMINO TILE VERTICAL-00-03DO" + + "MINO TILE VERTICAL-00-04DOMINO TILE VERTICAL-00-05DOMINO TILE VERTICAL-0" + + "0-06DOMINO TILE VERTICAL-01-00DOMINO TILE VERTICAL-01-01DOMINO TILE VERT" + + "ICAL-01-02DOMINO TILE VERTICAL-01-03DOMINO TILE VERTICAL-01-04DOMINO TIL" + + "E VERTICAL-01-05DOMINO TILE VERTICAL-01-06DOMINO TILE VERTICAL-02-00DOMI" + + "NO TILE VERTICAL-02-01DOMINO TILE VERTICAL-02-02DOMINO TILE VERTICAL-02-" + + "03DOMINO TILE VERTICAL-02-04DOMINO TILE VERTICAL-02-05DOMINO TILE VERTIC" + + "AL-02-06DOMINO TILE VERTICAL-03-00DOMINO TILE VERTICAL-03-01DOMINO TILE " + + "VERTICAL-03-02DOMINO TILE VERTICAL-03-03DOMINO TILE VERTICAL-03-04DOMINO" + + " TILE VERTICAL-03-05DOMINO TILE VERTICAL-03-06DOMINO TILE VERTICAL-04-00" + + "DOMINO TILE VERTICAL-04-01DOMINO TILE VERTICAL-04-02DOMINO TILE VERTICAL" + + "-04-03DOMINO TILE VERTICAL-04-04DOMINO TILE VERTICAL-04-05DOMINO TILE VE" + + "RTICAL-04-06DOMINO TILE VERTICAL-05-00DOMINO TILE VERTICAL-05-01DOMINO T" + + "ILE VERTICAL-05-02DOMINO TILE VERTICAL-05-03DOMINO TILE VERTICAL-05-04DO" + + "MINO TILE VERTICAL-05-05DOMINO TILE VERTICAL-05-06DOMINO TILE VERTICAL-0" + + "6-00DOMINO TILE VERTICAL-06-01DOMINO TILE VERTICAL-06-02DOMINO TILE VERT" + + "ICAL-06-03DOMINO TILE VERTICAL-06-04DOMINO TILE VERTICAL-06-05DOMINO TIL" + + "E VERTICAL-06-06PLAYING CARD BACKPLAYING CARD ACE OF SPADESPLAYING CARD " + + "TWO OF SPADESPLAYING CARD THREE OF SPADESPLAYING CARD FOUR OF SPADESPLAY" + + "ING CARD FIVE OF SPADESPLAYING CARD SIX OF SPADESPLAYING CARD SEVEN OF S" + + "PADESPLAYING CARD EIGHT OF SPADESPLAYING CARD NINE OF SPADESPLAYING CARD" + + " TEN OF SPADESPLAYING CARD JACK OF SPADESPLAYING CARD KNIGHT OF SPADESPL" + + "AYING CARD QUEEN OF SPADESPLAYING CARD KING OF SPADESPLAYING CARD ACE OF" + + " HEARTSPLAYING CARD TWO OF HEARTSPLAYING CARD THREE OF HEARTSPLAYING CAR" + + "D FOUR OF HEARTSPLAYING CARD FIVE OF HEARTSPLAYING CARD SIX OF HEARTSPLA" + + "YING CARD SEVEN OF HEARTSPLAYING CARD EIGHT OF HEARTSPLAYING CARD NINE O" + + "F HEARTSPLAYING CARD TEN OF HEARTSPLAYING CARD JACK OF HEARTSPLAYING CAR" + + "D KNIGHT OF HEARTSPLAYING CARD QUEEN OF HEARTSPLAYING CARD KING OF HEART" + + "SPLAYING CARD RED JOKERPLAYING CARD ACE OF DIAMONDSPLAYING CARD TWO OF D" + + "IAMONDSPLAYING CARD THREE OF DIAMONDSPLAYING CARD FOUR OF DIAMONDSPLAYIN" + + "G CARD FIVE OF DIAMONDSPLAYING CARD SIX OF DIAMONDSPLAYING CARD SEVEN OF" + + " DIAMONDSPLAYING CARD EIGHT OF DIAMONDSPLAYING CARD NINE OF DIAMONDSPLAY" + + "ING CARD TEN OF DIAMONDSPLAYING CARD JACK OF DIAMONDSPLAYING CARD KNIGHT" + + " OF DIAMONDSPLAYING CARD QUEEN OF DIAMONDSPLAYING CARD KING OF DIAMONDSP" + + "LAYING CARD BLACK JOKERPLAYING CARD ACE OF CLUBSPLAYING CARD TWO OF CLUB" + + "SPLAYING CARD THREE OF CLUBSPLAYING CARD FOUR OF CLUBSPLAYING CARD FIVE " + + "OF CLUBSPLAYING CARD SIX OF CLUBSPLAYING CARD SEVEN OF CLUBSPLAYING CARD" + + " EIGHT OF CLUBSPLAYING CARD NINE OF CLUBSPLAYING CARD TEN OF CLUBSPLAYIN") + ("" + + "G CARD JACK OF CLUBSPLAYING CARD KNIGHT OF CLUBSPLAYING CARD QUEEN OF CL" + + "UBSPLAYING CARD KING OF CLUBSPLAYING CARD WHITE JOKERPLAYING CARD FOOLPL" + + "AYING CARD TRUMP-1PLAYING CARD TRUMP-2PLAYING CARD TRUMP-3PLAYING CARD T" + + "RUMP-4PLAYING CARD TRUMP-5PLAYING CARD TRUMP-6PLAYING CARD TRUMP-7PLAYIN" + + "G CARD TRUMP-8PLAYING CARD TRUMP-9PLAYING CARD TRUMP-10PLAYING CARD TRUM" + + "P-11PLAYING CARD TRUMP-12PLAYING CARD TRUMP-13PLAYING CARD TRUMP-14PLAYI" + + "NG CARD TRUMP-15PLAYING CARD TRUMP-16PLAYING CARD TRUMP-17PLAYING CARD T" + + "RUMP-18PLAYING CARD TRUMP-19PLAYING CARD TRUMP-20PLAYING CARD TRUMP-21DI" + + "GIT ZERO FULL STOPDIGIT ZERO COMMADIGIT ONE COMMADIGIT TWO COMMADIGIT TH" + + "REE COMMADIGIT FOUR COMMADIGIT FIVE COMMADIGIT SIX COMMADIGIT SEVEN COMM" + + "ADIGIT EIGHT COMMADIGIT NINE COMMADINGBAT CIRCLED SANS-SERIF DIGIT ZEROD" + + "INGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZEROPARENTHESIZED LATIN CAPITAL" + + " LETTER APARENTHESIZED LATIN CAPITAL LETTER BPARENTHESIZED LATIN CAPITAL" + + " LETTER CPARENTHESIZED LATIN CAPITAL LETTER DPARENTHESIZED LATIN CAPITAL" + + " LETTER EPARENTHESIZED LATIN CAPITAL LETTER FPARENTHESIZED LATIN CAPITAL" + + " LETTER GPARENTHESIZED LATIN CAPITAL LETTER HPARENTHESIZED LATIN CAPITAL" + + " LETTER IPARENTHESIZED LATIN CAPITAL LETTER JPARENTHESIZED LATIN CAPITAL" + + " LETTER KPARENTHESIZED LATIN CAPITAL LETTER LPARENTHESIZED LATIN CAPITAL" + + " LETTER MPARENTHESIZED LATIN CAPITAL LETTER NPARENTHESIZED LATIN CAPITAL" + + " LETTER OPARENTHESIZED LATIN CAPITAL LETTER PPARENTHESIZED LATIN CAPITAL" + + " LETTER QPARENTHESIZED LATIN CAPITAL LETTER RPARENTHESIZED LATIN CAPITAL" + + " LETTER SPARENTHESIZED LATIN CAPITAL LETTER TPARENTHESIZED LATIN CAPITAL" + + " LETTER UPARENTHESIZED LATIN CAPITAL LETTER VPARENTHESIZED LATIN CAPITAL" + + " LETTER WPARENTHESIZED LATIN CAPITAL LETTER XPARENTHESIZED LATIN CAPITAL" + + " LETTER YPARENTHESIZED LATIN CAPITAL LETTER ZTORTOISE SHELL BRACKETED LA" + + "TIN CAPITAL LETTER SCIRCLED ITALIC LATIN CAPITAL LETTER CCIRCLED ITALIC " + + "LATIN CAPITAL LETTER RCIRCLED CDCIRCLED WZSQUARED LATIN CAPITAL LETTER A" + + "SQUARED LATIN CAPITAL LETTER BSQUARED LATIN CAPITAL LETTER CSQUARED LATI" + + "N CAPITAL LETTER DSQUARED LATIN CAPITAL LETTER ESQUARED LATIN CAPITAL LE" + + "TTER FSQUARED LATIN CAPITAL LETTER GSQUARED LATIN CAPITAL LETTER HSQUARE" + + "D LATIN CAPITAL LETTER ISQUARED LATIN CAPITAL LETTER JSQUARED LATIN CAPI" + + "TAL LETTER KSQUARED LATIN CAPITAL LETTER LSQUARED LATIN CAPITAL LETTER M" + + "SQUARED LATIN CAPITAL LETTER NSQUARED LATIN CAPITAL LETTER OSQUARED LATI" + + "N CAPITAL LETTER PSQUARED LATIN CAPITAL LETTER QSQUARED LATIN CAPITAL LE" + + "TTER RSQUARED LATIN CAPITAL LETTER SSQUARED LATIN CAPITAL LETTER TSQUARE" + + "D LATIN CAPITAL LETTER USQUARED LATIN CAPITAL LETTER VSQUARED LATIN CAPI" + + "TAL LETTER WSQUARED LATIN CAPITAL LETTER XSQUARED LATIN CAPITAL LETTER Y" + + "SQUARED LATIN CAPITAL LETTER ZSQUARED HVSQUARED MVSQUARED SDSQUARED SSSQ" + + "UARED PPVSQUARED WCNEGATIVE CIRCLED LATIN CAPITAL LETTER ANEGATIVE CIRCL" + + "ED LATIN CAPITAL LETTER BNEGATIVE CIRCLED LATIN CAPITAL LETTER CNEGATIVE" + + " CIRCLED LATIN CAPITAL LETTER DNEGATIVE CIRCLED LATIN CAPITAL LETTER ENE" + + "GATIVE CIRCLED LATIN CAPITAL LETTER FNEGATIVE CIRCLED LATIN CAPITAL LETT" + + "ER GNEGATIVE CIRCLED LATIN CAPITAL LETTER HNEGATIVE CIRCLED LATIN CAPITA" + + "L LETTER INEGATIVE CIRCLED LATIN CAPITAL LETTER JNEGATIVE CIRCLED LATIN " + + "CAPITAL LETTER KNEGATIVE CIRCLED LATIN CAPITAL LETTER LNEGATIVE CIRCLED " + + "LATIN CAPITAL LETTER MNEGATIVE CIRCLED LATIN CAPITAL LETTER NNEGATIVE CI" + + "RCLED LATIN CAPITAL LETTER ONEGATIVE CIRCLED LATIN CAPITAL LETTER PNEGAT" + + "IVE CIRCLED LATIN CAPITAL LETTER QNEGATIVE CIRCLED LATIN CAPITAL LETTER " + + "RNEGATIVE CIRCLED LATIN CAPITAL LETTER SNEGATIVE CIRCLED LATIN CAPITAL L" + + "ETTER TNEGATIVE CIRCLED LATIN CAPITAL LETTER UNEGATIVE CIRCLED LATIN CAP" + + "ITAL LETTER VNEGATIVE CIRCLED LATIN CAPITAL LETTER WNEGATIVE CIRCLED LAT" + + "IN CAPITAL LETTER XNEGATIVE CIRCLED LATIN CAPITAL LETTER YNEGATIVE CIRCL" + + "ED LATIN CAPITAL LETTER ZRAISED MC SIGNRAISED MD SIGNNEGATIVE SQUARED LA" + + "TIN CAPITAL LETTER ANEGATIVE SQUARED LATIN CAPITAL LETTER BNEGATIVE SQUA" + + "RED LATIN CAPITAL LETTER CNEGATIVE SQUARED LATIN CAPITAL LETTER DNEGATIV" + + "E SQUARED LATIN CAPITAL LETTER ENEGATIVE SQUARED LATIN CAPITAL LETTER FN" + + "EGATIVE SQUARED LATIN CAPITAL LETTER GNEGATIVE SQUARED LATIN CAPITAL LET" + + "TER HNEGATIVE SQUARED LATIN CAPITAL LETTER INEGATIVE SQUARED LATIN CAPIT" + + "AL LETTER JNEGATIVE SQUARED LATIN CAPITAL LETTER KNEGATIVE SQUARED LATIN" + + " CAPITAL LETTER LNEGATIVE SQUARED LATIN CAPITAL LETTER MNEGATIVE SQUARED" + + " LATIN CAPITAL LETTER NNEGATIVE SQUARED LATIN CAPITAL LETTER ONEGATIVE S" + + "QUARED LATIN CAPITAL LETTER PNEGATIVE SQUARED LATIN CAPITAL LETTER QNEGA" + + "TIVE SQUARED LATIN CAPITAL LETTER RNEGATIVE SQUARED LATIN CAPITAL LETTER" + + " SNEGATIVE SQUARED LATIN CAPITAL LETTER TNEGATIVE SQUARED LATIN CAPITAL ") + ("" + + "LETTER UNEGATIVE SQUARED LATIN CAPITAL LETTER VNEGATIVE SQUARED LATIN CA" + + "PITAL LETTER WNEGATIVE SQUARED LATIN CAPITAL LETTER XNEGATIVE SQUARED LA" + + "TIN CAPITAL LETTER YNEGATIVE SQUARED LATIN CAPITAL LETTER ZCROSSED NEGAT" + + "IVE SQUARED LATIN CAPITAL LETTER PNEGATIVE SQUARED ICNEGATIVE SQUARED PA" + + "NEGATIVE SQUARED SANEGATIVE SQUARED ABNEGATIVE SQUARED WCSQUARE DJSQUARE" + + "D CLSQUARED COOLSQUARED FREESQUARED IDSQUARED NEWSQUARED NGSQUARED OKSQU" + + "ARED SOSSQUARED UP WITH EXCLAMATION MARKSQUARED VSSQUARED THREE DSQUARED" + + " SECOND SCREENSQUARED TWO KSQUARED FOUR KSQUARED EIGHT KSQUARED FIVE POI" + + "NT ONESQUARED SEVEN POINT ONESQUARED TWENTY-TWO POINT TWOSQUARED SIXTY P" + + "SQUARED ONE HUNDRED TWENTY PSQUARED LATIN SMALL LETTER DSQUARED HCSQUARE" + + "D HDRSQUARED HI-RESSQUARED LOSSLESSSQUARED SHVSQUARED UHDSQUARED VODREGI" + + "ONAL INDICATOR SYMBOL LETTER AREGIONAL INDICATOR SYMBOL LETTER BREGIONAL" + + " INDICATOR SYMBOL LETTER CREGIONAL INDICATOR SYMBOL LETTER DREGIONAL IND" + + "ICATOR SYMBOL LETTER EREGIONAL INDICATOR SYMBOL LETTER FREGIONAL INDICAT" + + "OR SYMBOL LETTER GREGIONAL INDICATOR SYMBOL LETTER HREGIONAL INDICATOR S" + + "YMBOL LETTER IREGIONAL INDICATOR SYMBOL LETTER JREGIONAL INDICATOR SYMBO" + + "L LETTER KREGIONAL INDICATOR SYMBOL LETTER LREGIONAL INDICATOR SYMBOL LE" + + "TTER MREGIONAL INDICATOR SYMBOL LETTER NREGIONAL INDICATOR SYMBOL LETTER" + + " OREGIONAL INDICATOR SYMBOL LETTER PREGIONAL INDICATOR SYMBOL LETTER QRE" + + "GIONAL INDICATOR SYMBOL LETTER RREGIONAL INDICATOR SYMBOL LETTER SREGION" + + "AL INDICATOR SYMBOL LETTER TREGIONAL INDICATOR SYMBOL LETTER UREGIONAL I" + + "NDICATOR SYMBOL LETTER VREGIONAL INDICATOR SYMBOL LETTER WREGIONAL INDIC" + + "ATOR SYMBOL LETTER XREGIONAL INDICATOR SYMBOL LETTER YREGIONAL INDICATOR" + + " SYMBOL LETTER ZSQUARE HIRAGANA HOKASQUARED KATAKANA KOKOSQUARED KATAKAN" + + "A SASQUARED CJK UNIFIED IDEOGRAPH-624BSQUARED CJK UNIFIED IDEOGRAPH-5B57" + + "SQUARED CJK UNIFIED IDEOGRAPH-53CCSQUARED KATAKANA DESQUARED CJK UNIFIED" + + " IDEOGRAPH-4E8CSQUARED CJK UNIFIED IDEOGRAPH-591ASQUARED CJK UNIFIED IDE" + + "OGRAPH-89E3SQUARED CJK UNIFIED IDEOGRAPH-5929SQUARED CJK UNIFIED IDEOGRA" + + "PH-4EA4SQUARED CJK UNIFIED IDEOGRAPH-6620SQUARED CJK UNIFIED IDEOGRAPH-7" + + "121SQUARED CJK UNIFIED IDEOGRAPH-6599SQUARED CJK UNIFIED IDEOGRAPH-524DS" + + "QUARED CJK UNIFIED IDEOGRAPH-5F8CSQUARED CJK UNIFIED IDEOGRAPH-518DSQUAR" + + "ED CJK UNIFIED IDEOGRAPH-65B0SQUARED CJK UNIFIED IDEOGRAPH-521DSQUARED C" + + "JK UNIFIED IDEOGRAPH-7D42SQUARED CJK UNIFIED IDEOGRAPH-751FSQUARED CJK U" + + "NIFIED IDEOGRAPH-8CA9SQUARED CJK UNIFIED IDEOGRAPH-58F0SQUARED CJK UNIFI" + + "ED IDEOGRAPH-5439SQUARED CJK UNIFIED IDEOGRAPH-6F14SQUARED CJK UNIFIED I" + + "DEOGRAPH-6295SQUARED CJK UNIFIED IDEOGRAPH-6355SQUARED CJK UNIFIED IDEOG" + + "RAPH-4E00SQUARED CJK UNIFIED IDEOGRAPH-4E09SQUARED CJK UNIFIED IDEOGRAPH" + + "-904ASQUARED CJK UNIFIED IDEOGRAPH-5DE6SQUARED CJK UNIFIED IDEOGRAPH-4E2" + + "DSQUARED CJK UNIFIED IDEOGRAPH-53F3SQUARED CJK UNIFIED IDEOGRAPH-6307SQU" + + "ARED CJK UNIFIED IDEOGRAPH-8D70SQUARED CJK UNIFIED IDEOGRAPH-6253SQUARED" + + " CJK UNIFIED IDEOGRAPH-7981SQUARED CJK UNIFIED IDEOGRAPH-7A7ASQUARED CJK" + + " UNIFIED IDEOGRAPH-5408SQUARED CJK UNIFIED IDEOGRAPH-6E80SQUARED CJK UNI" + + "FIED IDEOGRAPH-6709SQUARED CJK UNIFIED IDEOGRAPH-6708SQUARED CJK UNIFIED" + + " IDEOGRAPH-7533SQUARED CJK UNIFIED IDEOGRAPH-5272SQUARED CJK UNIFIED IDE" + + "OGRAPH-55B6SQUARED CJK UNIFIED IDEOGRAPH-914DTORTOISE SHELL BRACKETED CJ" + + "K UNIFIED IDEOGRAPH-672CTORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4" + + "E09TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8CTORTOISE SHELL BRA" + + "CKETED CJK UNIFIED IDEOGRAPH-5B89TORTOISE SHELL BRACKETED CJK UNIFIED ID" + + "EOGRAPH-70B9TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253TORTOISE " + + "SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7TORTOISE SHELL BRACKETED CJK U" + + "NIFIED IDEOGRAPH-52DDTORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557" + + "CIRCLED IDEOGRAPH ADVANTAGECIRCLED IDEOGRAPH ACCEPTROUNDED SYMBOL FOR FU" + + "ROUNDED SYMBOL FOR LUROUNDED SYMBOL FOR SHOUROUNDED SYMBOL FOR XIROUNDED" + + " SYMBOL FOR SHUANGXIROUNDED SYMBOL FOR CAICYCLONEFOGGYCLOSED UMBRELLANIG" + + "HT WITH STARSSUNRISE OVER MOUNTAINSSUNRISECITYSCAPE AT DUSKSUNSET OVER B" + + "UILDINGSRAINBOWBRIDGE AT NIGHTWATER WAVEVOLCANOMILKY WAYEARTH GLOBE EURO" + + "PE-AFRICAEARTH GLOBE AMERICASEARTH GLOBE ASIA-AUSTRALIAGLOBE WITH MERIDI" + + "ANSNEW MOON SYMBOLWAXING CRESCENT MOON SYMBOLFIRST QUARTER MOON SYMBOLWA" + + "XING GIBBOUS MOON SYMBOLFULL MOON SYMBOLWANING GIBBOUS MOON SYMBOLLAST Q" + + "UARTER MOON SYMBOLWANING CRESCENT MOON SYMBOLCRESCENT MOONNEW MOON WITH " + + "FACEFIRST QUARTER MOON WITH FACELAST QUARTER MOON WITH FACEFULL MOON WIT" + + "H FACESUN WITH FACEGLOWING STARSHOOTING STARTHERMOMETERBLACK DROPLETWHIT" + + "E SUNWHITE SUN WITH SMALL CLOUDWHITE SUN BEHIND CLOUDWHITE SUN BEHIND CL" + + "OUD WITH RAINCLOUD WITH RAINCLOUD WITH SNOWCLOUD WITH LIGHTNINGCLOUD WIT") + ("" + + "H TORNADOFOGWIND BLOWING FACEHOT DOGTACOBURRITOCHESTNUTSEEDLINGEVERGREEN" + + " TREEDECIDUOUS TREEPALM TREECACTUSHOT PEPPERTULIPCHERRY BLOSSOMROSEHIBIS" + + "CUSSUNFLOWERBLOSSOMEAR OF MAIZEEAR OF RICEHERBFOUR LEAF CLOVERMAPLE LEAF" + + "FALLEN LEAFLEAF FLUTTERING IN WINDMUSHROOMTOMATOAUBERGINEGRAPESMELONWATE" + + "RMELONTANGERINELEMONBANANAPINEAPPLERED APPLEGREEN APPLEPEARPEACHCHERRIES" + + "STRAWBERRYHAMBURGERSLICE OF PIZZAMEAT ON BONEPOULTRY LEGRICE CRACKERRICE" + + " BALLCOOKED RICECURRY AND RICESTEAMING BOWLSPAGHETTIBREADFRENCH FRIESROA" + + "STED SWEET POTATODANGOODENSUSHIFRIED SHRIMPFISH CAKE WITH SWIRL DESIGNSO" + + "FT ICE CREAMSHAVED ICEICE CREAMDOUGHNUTCOOKIECHOCOLATE BARCANDYLOLLIPOPC" + + "USTARDHONEY POTSHORTCAKEBENTO BOXPOT OF FOODCOOKINGFORK AND KNIFETEACUP " + + "WITHOUT HANDLESAKE BOTTLE AND CUPWINE GLASSCOCKTAIL GLASSTROPICAL DRINKB" + + "EER MUGCLINKING BEER MUGSBABY BOTTLEFORK AND KNIFE WITH PLATEBOTTLE WITH" + + " POPPING CORKPOPCORNRIBBONWRAPPED PRESENTBIRTHDAY CAKEJACK-O-LANTERNCHRI" + + "STMAS TREEFATHER CHRISTMASFIREWORKSFIREWORK SPARKLERBALLOONPARTY POPPERC" + + "ONFETTI BALLTANABATA TREECROSSED FLAGSPINE DECORATIONJAPANESE DOLLSCARP " + + "STREAMERWIND CHIMEMOON VIEWING CEREMONYSCHOOL SATCHELGRADUATION CAPHEART" + + " WITH TIP ON THE LEFTBOUQUET OF FLOWERSMILITARY MEDALREMINDER RIBBONMUSI" + + "CAL KEYBOARD WITH JACKSSTUDIO MICROPHONELEVEL SLIDERCONTROL KNOBSBEAMED " + + "ASCENDING MUSICAL NOTESBEAMED DESCENDING MUSICAL NOTESFILM FRAMESADMISSI" + + "ON TICKETSCAROUSEL HORSEFERRIS WHEELROLLER COASTERFISHING POLE AND FISHM" + + "ICROPHONEMOVIE CAMERACINEMAHEADPHONEARTIST PALETTETOP HATCIRCUS TENTTICK" + + "ETCLAPPER BOARDPERFORMING ARTSVIDEO GAMEDIRECT HITSLOT MACHINEBILLIARDSG" + + "AME DIEBOWLINGFLOWER PLAYING CARDSMUSICAL NOTEMULTIPLE MUSICAL NOTESSAXO" + + "PHONEGUITARMUSICAL KEYBOARDTRUMPETVIOLINMUSICAL SCORERUNNING SHIRT WITH " + + "SASHTENNIS RACQUET AND BALLSKI AND SKI BOOTBASKETBALL AND HOOPCHEQUERED " + + "FLAGSNOWBOARDERRUNNERSURFERSPORTS MEDALTROPHYHORSE RACINGAMERICAN FOOTBA" + + "LLRUGBY FOOTBALLSWIMMERWEIGHT LIFTERGOLFERRACING MOTORCYCLERACING CARCRI" + + "CKET BAT AND BALLVOLLEYBALLFIELD HOCKEY STICK AND BALLICE HOCKEY STICK A" + + "ND PUCKTABLE TENNIS PADDLE AND BALLSNOW CAPPED MOUNTAINCAMPINGBEACH WITH" + + " UMBRELLABUILDING CONSTRUCTIONHOUSE BUILDINGSCITYSCAPEDERELICT HOUSE BUI" + + "LDINGCLASSICAL BUILDINGDESERTDESERT ISLANDNATIONAL PARKSTADIUMHOUSE BUIL" + + "DINGHOUSE WITH GARDENOFFICE BUILDINGJAPANESE POST OFFICEEUROPEAN POST OF" + + "FICEHOSPITALBANKAUTOMATED TELLER MACHINEHOTELLOVE HOTELCONVENIENCE STORE" + + "SCHOOLDEPARTMENT STOREFACTORYIZAKAYA LANTERNJAPANESE CASTLEEUROPEAN CAST" + + "LEWHITE PENNANTBLACK PENNANTWAVING WHITE FLAGWAVING BLACK FLAGROSETTEBLA" + + "CK ROSETTELABELBADMINTON RACQUET AND SHUTTLECOCKBOW AND ARROWAMPHORAEMOJ" + + "I MODIFIER FITZPATRICK TYPE-1-2EMOJI MODIFIER FITZPATRICK TYPE-3EMOJI MO" + + "DIFIER FITZPATRICK TYPE-4EMOJI MODIFIER FITZPATRICK TYPE-5EMOJI MODIFIER" + + " FITZPATRICK TYPE-6RATMOUSEOXWATER BUFFALOCOWTIGERLEOPARDRABBITCATDRAGON" + + "CROCODILEWHALESNAILSNAKEHORSERAMGOATSHEEPMONKEYROOSTERCHICKENDOGPIGBOARE" + + "LEPHANTOCTOPUSSPIRAL SHELLBUGANTHONEYBEELADY BEETLEFISHTROPICAL FISHBLOW" + + "FISHTURTLEHATCHING CHICKBABY CHICKFRONT-FACING BABY CHICKBIRDPENGUINKOAL" + + "APOODLEDROMEDARY CAMELBACTRIAN CAMELDOLPHINMOUSE FACECOW FACETIGER FACER" + + "ABBIT FACECAT FACEDRAGON FACESPOUTING WHALEHORSE FACEMONKEY FACEDOG FACE" + + "PIG FACEFROG FACEHAMSTER FACEWOLF FACEBEAR FACEPANDA FACEPIG NOSEPAW PRI" + + "NTSCHIPMUNKEYESEYEEARNOSEMOUTHTONGUEWHITE UP POINTING BACKHAND INDEXWHIT" + + "E DOWN POINTING BACKHAND INDEXWHITE LEFT POINTING BACKHAND INDEXWHITE RI" + + "GHT POINTING BACKHAND INDEXFISTED HAND SIGNWAVING HAND SIGNOK HAND SIGNT" + + "HUMBS UP SIGNTHUMBS DOWN SIGNCLAPPING HANDS SIGNOPEN HANDS SIGNCROWNWOMA" + + "NS HATEYEGLASSESNECKTIET-SHIRTJEANSDRESSKIMONOBIKINIWOMANS CLOTHESPURSEH" + + "ANDBAGPOUCHMANS SHOEATHLETIC SHOEHIGH-HEELED SHOEWOMANS SANDALWOMANS BOO" + + "TSFOOTPRINTSBUST IN SILHOUETTEBUSTS IN SILHOUETTEBOYGIRLMANWOMANFAMILYMA" + + "N AND WOMAN HOLDING HANDSTWO MEN HOLDING HANDSTWO WOMEN HOLDING HANDSPOL" + + "ICE OFFICERWOMAN WITH BUNNY EARSBRIDE WITH VEILPERSON WITH BLOND HAIRMAN" + + " WITH GUA PI MAOMAN WITH TURBANOLDER MANOLDER WOMANBABYCONSTRUCTION WORK" + + "ERPRINCESSJAPANESE OGREJAPANESE GOBLINGHOSTBABY ANGELEXTRATERRESTRIAL AL" + + "IENALIEN MONSTERIMPSKULLINFORMATION DESK PERSONGUARDSMANDANCERLIPSTICKNA" + + "IL POLISHFACE MASSAGEHAIRCUTBARBER POLESYRINGEPILLKISS MARKLOVE LETTERRI" + + "NGGEM STONEKISSBOUQUETCOUPLE WITH HEARTWEDDINGBEATING HEARTBROKEN HEARTT" + + "WO HEARTSSPARKLING HEARTGROWING HEARTHEART WITH ARROWBLUE HEARTGREEN HEA" + + "RTYELLOW HEARTPURPLE HEARTHEART WITH RIBBONREVOLVING HEARTSHEART DECORAT" + + "IONDIAMOND SHAPE WITH A DOT INSIDEELECTRIC LIGHT BULBANGER SYMBOLBOMBSLE" + + "EPING SYMBOLCOLLISION SYMBOLSPLASHING SWEAT SYMBOLDROPLETDASH SYMBOLPILE" + + " OF POOFLEXED BICEPSDIZZY SYMBOLSPEECH BALLOONTHOUGHT BALLOONWHITE FLOWE") + ("" + + "RHUNDRED POINTS SYMBOLMONEY BAGCURRENCY EXCHANGEHEAVY DOLLAR SIGNCREDIT " + + "CARDBANKNOTE WITH YEN SIGNBANKNOTE WITH DOLLAR SIGNBANKNOTE WITH EURO SI" + + "GNBANKNOTE WITH POUND SIGNMONEY WITH WINGSCHART WITH UPWARDS TREND AND Y" + + "EN SIGNSEATPERSONAL COMPUTERBRIEFCASEMINIDISCFLOPPY DISKOPTICAL DISCDVDF" + + "ILE FOLDEROPEN FILE FOLDERPAGE WITH CURLPAGE FACING UPCALENDARTEAR-OFF C" + + "ALENDARCARD INDEXCHART WITH UPWARDS TRENDCHART WITH DOWNWARDS TRENDBAR C" + + "HARTCLIPBOARDPUSHPINROUND PUSHPINPAPERCLIPSTRAIGHT RULERTRIANGULAR RULER" + + "BOOKMARK TABSLEDGERNOTEBOOKNOTEBOOK WITH DECORATIVE COVERCLOSED BOOKOPEN" + + " BOOKGREEN BOOKBLUE BOOKORANGE BOOKBOOKSNAME BADGESCROLLMEMOTELEPHONE RE" + + "CEIVERPAGERFAX MACHINESATELLITE ANTENNAPUBLIC ADDRESS LOUDSPEAKERCHEERIN" + + "G MEGAPHONEOUTBOX TRAYINBOX TRAYPACKAGEE-MAIL SYMBOLINCOMING ENVELOPEENV" + + "ELOPE WITH DOWNWARDS ARROW ABOVECLOSED MAILBOX WITH LOWERED FLAGCLOSED M" + + "AILBOX WITH RAISED FLAGOPEN MAILBOX WITH RAISED FLAGOPEN MAILBOX WITH LO" + + "WERED FLAGPOSTBOXPOSTAL HORNNEWSPAPERMOBILE PHONEMOBILE PHONE WITH RIGHT" + + "WARDS ARROW AT LEFTVIBRATION MODEMOBILE PHONE OFFNO MOBILE PHONESANTENNA" + + " WITH BARSCAMERACAMERA WITH FLASHVIDEO CAMERATELEVISIONRADIOVIDEOCASSETT" + + "EFILM PROJECTORPORTABLE STEREOPRAYER BEADSTWISTED RIGHTWARDS ARROWSCLOCK" + + "WISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWSCLOCKWISE RIGHTWARDS AND" + + " LEFTWARDS OPEN CIRCLE ARROWS WITH CIRCLED ONE OVERLAYCLOCKWISE DOWNWARD" + + "S AND UPWARDS OPEN CIRCLE ARROWSANTICLOCKWISE DOWNWARDS AND UPWARDS OPEN" + + " CIRCLE ARROWSLOW BRIGHTNESS SYMBOLHIGH BRIGHTNESS SYMBOLSPEAKER WITH CA" + + "NCELLATION STROKESPEAKERSPEAKER WITH ONE SOUND WAVESPEAKER WITH THREE SO" + + "UND WAVESBATTERYELECTRIC PLUGLEFT-POINTING MAGNIFYING GLASSRIGHT-POINTIN" + + "G MAGNIFYING GLASSLOCK WITH INK PENCLOSED LOCK WITH KEYKEYLOCKOPEN LOCKB" + + "ELLBELL WITH CANCELLATION STROKEBOOKMARKLINK SYMBOLRADIO BUTTONBACK WITH" + + " LEFTWARDS ARROW ABOVEEND WITH LEFTWARDS ARROW ABOVEON WITH EXCLAMATION " + + "MARK WITH LEFT RIGHT ARROW ABOVESOON WITH RIGHTWARDS ARROW ABOVETOP WITH" + + " UPWARDS ARROW ABOVENO ONE UNDER EIGHTEEN SYMBOLKEYCAP TENINPUT SYMBOL F" + + "OR LATIN CAPITAL LETTERSINPUT SYMBOL FOR LATIN SMALL LETTERSINPUT SYMBOL" + + " FOR NUMBERSINPUT SYMBOL FOR SYMBOLSINPUT SYMBOL FOR LATIN LETTERSFIREEL" + + "ECTRIC TORCHWRENCHHAMMERNUT AND BOLTHOCHOPISTOLMICROSCOPETELESCOPECRYSTA" + + "L BALLSIX POINTED STAR WITH MIDDLE DOTJAPANESE SYMBOL FOR BEGINNERTRIDEN" + + "T EMBLEMBLACK SQUARE BUTTONWHITE SQUARE BUTTONLARGE RED CIRCLELARGE BLUE" + + " CIRCLELARGE ORANGE DIAMONDLARGE BLUE DIAMONDSMALL ORANGE DIAMONDSMALL B" + + "LUE DIAMONDUP-POINTING RED TRIANGLEDOWN-POINTING RED TRIANGLEUP-POINTING" + + " SMALL RED TRIANGLEDOWN-POINTING SMALL RED TRIANGLELOWER RIGHT SHADOWED " + + "WHITE CIRCLEUPPER RIGHT SHADOWED WHITE CIRCLECIRCLED CROSS POMMEECROSS P" + + "OMMEE WITH HALF-CIRCLE BELOWCROSS POMMEENOTCHED LEFT SEMICIRCLE WITH THR" + + "EE DOTSNOTCHED RIGHT SEMICIRCLE WITH THREE DOTSSYMBOL FOR MARKS CHAPTERW" + + "HITE LATIN CROSSHEAVY LATIN CROSSCELTIC CROSSOM SYMBOLDOVE OF PEACEKAABA" + + "MOSQUESYNAGOGUEMENORAH WITH NINE BRANCHESBOWL OF HYGIEIACLOCK FACE ONE O" + + "CLOCKCLOCK FACE TWO OCLOCKCLOCK FACE THREE OCLOCKCLOCK FACE FOUR OCLOCKC" + + "LOCK FACE FIVE OCLOCKCLOCK FACE SIX OCLOCKCLOCK FACE SEVEN OCLOCKCLOCK F" + + "ACE EIGHT OCLOCKCLOCK FACE NINE OCLOCKCLOCK FACE TEN OCLOCKCLOCK FACE EL" + + "EVEN OCLOCKCLOCK FACE TWELVE OCLOCKCLOCK FACE ONE-THIRTYCLOCK FACE TWO-T" + + "HIRTYCLOCK FACE THREE-THIRTYCLOCK FACE FOUR-THIRTYCLOCK FACE FIVE-THIRTY" + + "CLOCK FACE SIX-THIRTYCLOCK FACE SEVEN-THIRTYCLOCK FACE EIGHT-THIRTYCLOCK" + + " FACE NINE-THIRTYCLOCK FACE TEN-THIRTYCLOCK FACE ELEVEN-THIRTYCLOCK FACE" + + " TWELVE-THIRTYRIGHT SPEAKERRIGHT SPEAKER WITH ONE SOUND WAVERIGHT SPEAKE" + + "R WITH THREE SOUND WAVESBULLHORNBULLHORN WITH SOUND WAVESRINGING BELLBOO" + + "KCANDLEMANTELPIECE CLOCKBLACK SKULL AND CROSSBONESNO PIRACYHOLEMAN IN BU" + + "SINESS SUIT LEVITATINGSLEUTH OR SPYDARK SUNGLASSESSPIDERSPIDER WEBJOYSTI" + + "CKMAN DANCINGLEFT HAND TELEPHONE RECEIVERTELEPHONE RECEIVER WITH PAGERIG" + + "HT HAND TELEPHONE RECEIVERWHITE TOUCHTONE TELEPHONEBLACK TOUCHTONE TELEP" + + "HONETELEPHONE ON TOP OF MODEMCLAMSHELL MOBILE PHONEBACK OF ENVELOPESTAMP" + + "ED ENVELOPEENVELOPE WITH LIGHTNINGFLYING ENVELOPEPEN OVER STAMPED ENVELO" + + "PELINKED PAPERCLIPSBLACK PUSHPINLOWER LEFT PENCILLOWER LEFT BALLPOINT PE" + + "NLOWER LEFT FOUNTAIN PENLOWER LEFT PAINTBRUSHLOWER LEFT CRAYONLEFT WRITI" + + "NG HANDTURNED OK HAND SIGNRAISED HAND WITH FINGERS SPLAYEDREVERSED RAISE" + + "D HAND WITH FINGERS SPLAYEDREVERSED THUMBS UP SIGNREVERSED THUMBS DOWN S" + + "IGNREVERSED VICTORY HANDREVERSED HAND WITH MIDDLE FINGER EXTENDEDRAISED " + + "HAND WITH PART BETWEEN MIDDLE AND RING FINGERSWHITE DOWN POINTING LEFT H" + + "AND INDEXSIDEWAYS WHITE LEFT POINTING INDEXSIDEWAYS WHITE RIGHT POINTING" + + " INDEXSIDEWAYS BLACK LEFT POINTING INDEXSIDEWAYS BLACK RIGHT POINTING IN") + ("" + + "DEXBLACK LEFT POINTING BACKHAND INDEXBLACK RIGHT POINTING BACKHAND INDEX" + + "SIDEWAYS WHITE UP POINTING INDEXSIDEWAYS WHITE DOWN POINTING INDEXSIDEWA" + + "YS BLACK UP POINTING INDEXSIDEWAYS BLACK DOWN POINTING INDEXBLACK UP POI" + + "NTING BACKHAND INDEXBLACK DOWN POINTING BACKHAND INDEXBLACK HEARTDESKTOP" + + " COMPUTERKEYBOARD AND MOUSETHREE NETWORKED COMPUTERSPRINTERPOCKET CALCUL" + + "ATORBLACK HARD SHELL FLOPPY DISKWHITE HARD SHELL FLOPPY DISKSOFT SHELL F" + + "LOPPY DISKTAPE CARTRIDGEWIRED KEYBOARDONE BUTTON MOUSETWO BUTTON MOUSETH" + + "REE BUTTON MOUSETRACKBALLOLD PERSONAL COMPUTERHARD DISKSCREENPRINTER ICO" + + "NFAX ICONOPTICAL DISC ICONDOCUMENT WITH TEXTDOCUMENT WITH TEXT AND PICTU" + + "REDOCUMENT WITH PICTUREFRAME WITH PICTUREFRAME WITH TILESFRAME WITH AN X" + + "BLACK FOLDERFOLDEROPEN FOLDERCARD INDEX DIVIDERSCARD FILE BOXFILE CABINE" + + "TEMPTY NOTEEMPTY NOTE PAGEEMPTY NOTE PADNOTENOTE PAGENOTE PADEMPTY DOCUM" + + "ENTEMPTY PAGEEMPTY PAGESDOCUMENTPAGEPAGESWASTEBASKETSPIRAL NOTE PADSPIRA" + + "L CALENDAR PADDESKTOP WINDOWMINIMIZEMAXIMIZEOVERLAPCLOCKWISE RIGHT AND L" + + "EFT SEMICIRCLE ARROWSCANCELLATION XINCREASE FONT SIZE SYMBOLDECREASE FON" + + "T SIZE SYMBOLCOMPRESSIONOLD KEYROLLED-UP NEWSPAPERPAGE WITH CIRCLED TEXT" + + "STOCK CHARTDAGGER KNIFELIPSSPEAKING HEAD IN SILHOUETTETHREE RAYS ABOVETH" + + "REE RAYS BELOWTHREE RAYS LEFTTHREE RAYS RIGHTLEFT SPEECH BUBBLERIGHT SPE" + + "ECH BUBBLETWO SPEECH BUBBLESTHREE SPEECH BUBBLESLEFT THOUGHT BUBBLERIGHT" + + " THOUGHT BUBBLELEFT ANGER BUBBLERIGHT ANGER BUBBLEMOOD BUBBLELIGHTNING M" + + "OOD BUBBLELIGHTNING MOODBALLOT BOX WITH BALLOTBALLOT SCRIPT XBALLOT BOX " + + "WITH SCRIPT XBALLOT BOLD SCRIPT XBALLOT BOX WITH BOLD SCRIPT XLIGHT CHEC" + + "K MARKBALLOT BOX WITH BOLD CHECKWORLD MAPMOUNT FUJITOKYO TOWERSTATUE OF " + + "LIBERTYSILHOUETTE OF JAPANMOYAIGRINNING FACEGRINNING FACE WITH SMILING E" + + "YESFACE WITH TEARS OF JOYSMILING FACE WITH OPEN MOUTHSMILING FACE WITH O" + + "PEN MOUTH AND SMILING EYESSMILING FACE WITH OPEN MOUTH AND COLD SWEATSMI" + + "LING FACE WITH OPEN MOUTH AND TIGHTLY-CLOSED EYESSMILING FACE WITH HALOS" + + "MILING FACE WITH HORNSWINKING FACESMILING FACE WITH SMILING EYESFACE SAV" + + "OURING DELICIOUS FOODRELIEVED FACESMILING FACE WITH HEART-SHAPED EYESSMI" + + "LING FACE WITH SUNGLASSESSMIRKING FACENEUTRAL FACEEXPRESSIONLESS FACEUNA" + + "MUSED FACEFACE WITH COLD SWEATPENSIVE FACECONFUSED FACECONFOUNDED FACEKI" + + "SSING FACEFACE THROWING A KISSKISSING FACE WITH SMILING EYESKISSING FACE" + + " WITH CLOSED EYESFACE WITH STUCK-OUT TONGUEFACE WITH STUCK-OUT TONGUE AN" + + "D WINKING EYEFACE WITH STUCK-OUT TONGUE AND TIGHTLY-CLOSED EYESDISAPPOIN" + + "TED FACEWORRIED FACEANGRY FACEPOUTING FACECRYING FACEPERSEVERING FACEFAC" + + "E WITH LOOK OF TRIUMPHDISAPPOINTED BUT RELIEVED FACEFROWNING FACE WITH O" + + "PEN MOUTHANGUISHED FACEFEARFUL FACEWEARY FACESLEEPY FACETIRED FACEGRIMAC" + + "ING FACELOUDLY CRYING FACEFACE WITH OPEN MOUTHHUSHED FACEFACE WITH OPEN " + + "MOUTH AND COLD SWEATFACE SCREAMING IN FEARASTONISHED FACEFLUSHED FACESLE" + + "EPING FACEDIZZY FACEFACE WITHOUT MOUTHFACE WITH MEDICAL MASKGRINNING CAT" + + " FACE WITH SMILING EYESCAT FACE WITH TEARS OF JOYSMILING CAT FACE WITH O" + + "PEN MOUTHSMILING CAT FACE WITH HEART-SHAPED EYESCAT FACE WITH WRY SMILEK" + + "ISSING CAT FACE WITH CLOSED EYESPOUTING CAT FACECRYING CAT FACEWEARY CAT" + + " FACESLIGHTLY FROWNING FACESLIGHTLY SMILING FACEUPSIDE-DOWN FACEFACE WIT" + + "H ROLLING EYESFACE WITH NO GOOD GESTUREFACE WITH OK GESTUREPERSON BOWING" + + " DEEPLYSEE-NO-EVIL MONKEYHEAR-NO-EVIL MONKEYSPEAK-NO-EVIL MONKEYHAPPY PE" + + "RSON RAISING ONE HANDPERSON RAISING BOTH HANDS IN CELEBRATIONPERSON FROW" + + "NINGPERSON WITH POUTING FACEPERSON WITH FOLDED HANDSNORTH WEST POINTING " + + "LEAFSOUTH WEST POINTING LEAFNORTH EAST POINTING LEAFSOUTH EAST POINTING " + + "LEAFTURNED NORTH WEST POINTING LEAFTURNED SOUTH WEST POINTING LEAFTURNED" + + " NORTH EAST POINTING LEAFTURNED SOUTH EAST POINTING LEAFNORTH WEST POINT" + + "ING VINE LEAFSOUTH WEST POINTING VINE LEAFNORTH EAST POINTING VINE LEAFS" + + "OUTH EAST POINTING VINE LEAFHEAVY NORTH WEST POINTING VINE LEAFHEAVY SOU" + + "TH WEST POINTING VINE LEAFHEAVY NORTH EAST POINTING VINE LEAFHEAVY SOUTH" + + " EAST POINTING VINE LEAFNORTH WEST POINTING BUDSOUTH WEST POINTING BUDNO" + + "RTH EAST POINTING BUDSOUTH EAST POINTING BUDHEAVY NORTH WEST POINTING BU" + + "DHEAVY SOUTH WEST POINTING BUDHEAVY NORTH EAST POINTING BUDHEAVY SOUTH E" + + "AST POINTING BUDHOLLOW QUILT SQUARE ORNAMENTHOLLOW QUILT SQUARE ORNAMENT" + + " IN BLACK SQUARESOLID QUILT SQUARE ORNAMENTSOLID QUILT SQUARE ORNAMENT I" + + "N BLACK SQUARELEFTWARDS ROCKETUPWARDS ROCKETRIGHTWARDS ROCKETDOWNWARDS R" + + "OCKETSCRIPT LIGATURE ET ORNAMENTHEAVY SCRIPT LIGATURE ET ORNAMENTLIGATUR" + + "E OPEN ET ORNAMENTHEAVY LIGATURE OPEN ET ORNAMENTHEAVY AMPERSAND ORNAMEN" + + "TSWASH AMPERSAND ORNAMENTSANS-SERIF HEAVY DOUBLE TURNED COMMA QUOTATION " + + "MARK ORNAMENTSANS-SERIF HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENTSANS-S") + ("" + + "ERIF HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENTHEAVY INTERROBANG ORN" + + "AMENTSANS-SERIF INTERROBANG ORNAMENTHEAVY SANS-SERIF INTERROBANG ORNAMEN" + + "TVERY HEAVY SOLIDUSVERY HEAVY REVERSE SOLIDUSCHECKER BOARDREVERSE CHECKE" + + "R BOARDROCKETHELICOPTERSTEAM LOCOMOTIVERAILWAY CARHIGH-SPEED TRAINHIGH-S" + + "PEED TRAIN WITH BULLET NOSETRAINMETROLIGHT RAILSTATIONTRAMTRAM CARBUSONC" + + "OMING BUSTROLLEYBUSBUS STOPMINIBUSAMBULANCEFIRE ENGINEPOLICE CARONCOMING" + + " POLICE CARTAXIONCOMING TAXIAUTOMOBILEONCOMING AUTOMOBILERECREATIONAL VE" + + "HICLEDELIVERY TRUCKARTICULATED LORRYTRACTORMONORAILMOUNTAIN RAILWAYSUSPE" + + "NSION RAILWAYMOUNTAIN CABLEWAYAERIAL TRAMWAYSHIPROWBOATSPEEDBOATHORIZONT" + + "AL TRAFFIC LIGHTVERTICAL TRAFFIC LIGHTCONSTRUCTION SIGNPOLICE CARS REVOL" + + "VING LIGHTTRIANGULAR FLAG ON POSTDOORNO ENTRY SIGNSMOKING SYMBOLNO SMOKI" + + "NG SYMBOLPUT LITTER IN ITS PLACE SYMBOLDO NOT LITTER SYMBOLPOTABLE WATER" + + " SYMBOLNON-POTABLE WATER SYMBOLBICYCLENO BICYCLESBICYCLISTMOUNTAIN BICYC" + + "LISTPEDESTRIANNO PEDESTRIANSCHILDREN CROSSINGMENS SYMBOLWOMENS SYMBOLRES" + + "TROOMBABY SYMBOLTOILETWATER CLOSETSHOWERBATHBATHTUBPASSPORT CONTROLCUSTO" + + "MSBAGGAGE CLAIMLEFT LUGGAGETRIANGLE WITH ROUNDED CORNERSPROHIBITED SIGNC" + + "IRCLED INFORMATION SOURCEBOYS SYMBOLGIRLS SYMBOLCOUCH AND LAMPSLEEPING A" + + "CCOMMODATIONSHOPPING BAGSBELLHOP BELLBEDPLACE OF WORSHIPOCTAGONAL SIGNSH" + + "OPPING TROLLEYSTUPAPAGODAHAMMER AND WRENCHSHIELDOIL DRUMMOTORWAYRAILWAY " + + "TRACKMOTOR BOATUP-POINTING MILITARY AIRPLANEUP-POINTING AIRPLANEUP-POINT" + + "ING SMALL AIRPLANESMALL AIRPLANENORTHEAST-POINTING AIRPLANEAIRPLANE DEPA" + + "RTUREAIRPLANE ARRIVINGSATELLITEONCOMING FIRE ENGINEDIESEL LOCOMOTIVEPASS" + + "ENGER SHIPSCOOTERMOTOR SCOOTERCANOESLEDFLYING SAUCERALCHEMICAL SYMBOL FO" + + "R QUINTESSENCEALCHEMICAL SYMBOL FOR AIRALCHEMICAL SYMBOL FOR FIREALCHEMI" + + "CAL SYMBOL FOR EARTHALCHEMICAL SYMBOL FOR WATERALCHEMICAL SYMBOL FOR AQU" + + "AFORTISALCHEMICAL SYMBOL FOR AQUA REGIAALCHEMICAL SYMBOL FOR AQUA REGIA-" + + "2ALCHEMICAL SYMBOL FOR AQUA VITAEALCHEMICAL SYMBOL FOR AQUA VITAE-2ALCHE" + + "MICAL SYMBOL FOR VINEGARALCHEMICAL SYMBOL FOR VINEGAR-2ALCHEMICAL SYMBOL" + + " FOR VINEGAR-3ALCHEMICAL SYMBOL FOR SULFURALCHEMICAL SYMBOL FOR PHILOSOP" + + "HERS SULFURALCHEMICAL SYMBOL FOR BLACK SULFURALCHEMICAL SYMBOL FOR MERCU" + + "RY SUBLIMATEALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-2ALCHEMICAL SYMBOL F" + + "OR MERCURY SUBLIMATE-3ALCHEMICAL SYMBOL FOR CINNABARALCHEMICAL SYMBOL FO" + + "R SALTALCHEMICAL SYMBOL FOR NITREALCHEMICAL SYMBOL FOR VITRIOLALCHEMICAL" + + " SYMBOL FOR VITRIOL-2ALCHEMICAL SYMBOL FOR ROCK SALTALCHEMICAL SYMBOL FO" + + "R ROCK SALT-2ALCHEMICAL SYMBOL FOR GOLDALCHEMICAL SYMBOL FOR SILVERALCHE" + + "MICAL SYMBOL FOR IRON OREALCHEMICAL SYMBOL FOR IRON ORE-2ALCHEMICAL SYMB" + + "OL FOR CROCUS OF IRONALCHEMICAL SYMBOL FOR REGULUS OF IRONALCHEMICAL SYM" + + "BOL FOR COPPER OREALCHEMICAL SYMBOL FOR IRON-COPPER OREALCHEMICAL SYMBOL" + + " FOR SUBLIMATE OF COPPERALCHEMICAL SYMBOL FOR CROCUS OF COPPERALCHEMICAL" + + " SYMBOL FOR CROCUS OF COPPER-2ALCHEMICAL SYMBOL FOR COPPER ANTIMONIATEAL" + + "CHEMICAL SYMBOL FOR SALT OF COPPER ANTIMONIATEALCHEMICAL SYMBOL FOR SUBL" + + "IMATE OF SALT OF COPPERALCHEMICAL SYMBOL FOR VERDIGRISALCHEMICAL SYMBOL " + + "FOR TIN OREALCHEMICAL SYMBOL FOR LEAD OREALCHEMICAL SYMBOL FOR ANTIMONY " + + "OREALCHEMICAL SYMBOL FOR SUBLIMATE OF ANTIMONYALCHEMICAL SYMBOL FOR SALT" + + " OF ANTIMONYALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF ANTIMONYALCHEMICA" + + "L SYMBOL FOR VINEGAR OF ANTIMONYALCHEMICAL SYMBOL FOR REGULUS OF ANTIMON" + + "YALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY-2ALCHEMICAL SYMBOL FOR REGULU" + + "SALCHEMICAL SYMBOL FOR REGULUS-2ALCHEMICAL SYMBOL FOR REGULUS-3ALCHEMICA" + + "L SYMBOL FOR REGULUS-4ALCHEMICAL SYMBOL FOR ALKALIALCHEMICAL SYMBOL FOR " + + "ALKALI-2ALCHEMICAL SYMBOL FOR MARCASITEALCHEMICAL SYMBOL FOR SAL-AMMONIA" + + "CALCHEMICAL SYMBOL FOR ARSENICALCHEMICAL SYMBOL FOR REALGARALCHEMICAL SY" + + "MBOL FOR REALGAR-2ALCHEMICAL SYMBOL FOR AURIPIGMENTALCHEMICAL SYMBOL FOR" + + " BISMUTH OREALCHEMICAL SYMBOL FOR TARTARALCHEMICAL SYMBOL FOR TARTAR-2AL" + + "CHEMICAL SYMBOL FOR QUICK LIMEALCHEMICAL SYMBOL FOR BORAXALCHEMICAL SYMB" + + "OL FOR BORAX-2ALCHEMICAL SYMBOL FOR BORAX-3ALCHEMICAL SYMBOL FOR ALUMALC" + + "HEMICAL SYMBOL FOR OILALCHEMICAL SYMBOL FOR SPIRITALCHEMICAL SYMBOL FOR " + + "TINCTUREALCHEMICAL SYMBOL FOR GUMALCHEMICAL SYMBOL FOR WAXALCHEMICAL SYM" + + "BOL FOR POWDERALCHEMICAL SYMBOL FOR CALXALCHEMICAL SYMBOL FOR TUTTYALCHE" + + "MICAL SYMBOL FOR CAPUT MORTUUMALCHEMICAL SYMBOL FOR SCEPTER OF JOVEALCHE" + + "MICAL SYMBOL FOR CADUCEUSALCHEMICAL SYMBOL FOR TRIDENTALCHEMICAL SYMBOL " + + "FOR STARRED TRIDENTALCHEMICAL SYMBOL FOR LODESTONEALCHEMICAL SYMBOL FOR " + + "SOAPALCHEMICAL SYMBOL FOR URINEALCHEMICAL SYMBOL FOR HORSE DUNGALCHEMICA" + + "L SYMBOL FOR ASHESALCHEMICAL SYMBOL FOR POT ASHESALCHEMICAL SYMBOL FOR B" + + "RICKALCHEMICAL SYMBOL FOR POWDERED BRICKALCHEMICAL SYMBOL FOR AMALGAMALC") + ("" + + "HEMICAL SYMBOL FOR STRATUM SUPER STRATUMALCHEMICAL SYMBOL FOR STRATUM SU" + + "PER STRATUM-2ALCHEMICAL SYMBOL FOR SUBLIMATIONALCHEMICAL SYMBOL FOR PREC" + + "IPITATEALCHEMICAL SYMBOL FOR DISTILLALCHEMICAL SYMBOL FOR DISSOLVEALCHEM" + + "ICAL SYMBOL FOR DISSOLVE-2ALCHEMICAL SYMBOL FOR PURIFYALCHEMICAL SYMBOL " + + "FOR PUTREFACTIONALCHEMICAL SYMBOL FOR CRUCIBLEALCHEMICAL SYMBOL FOR CRUC" + + "IBLE-2ALCHEMICAL SYMBOL FOR CRUCIBLE-3ALCHEMICAL SYMBOL FOR CRUCIBLE-4AL" + + "CHEMICAL SYMBOL FOR CRUCIBLE-5ALCHEMICAL SYMBOL FOR ALEMBICALCHEMICAL SY" + + "MBOL FOR BATH OF MARYALCHEMICAL SYMBOL FOR BATH OF VAPOURSALCHEMICAL SYM" + + "BOL FOR RETORTALCHEMICAL SYMBOL FOR HOURALCHEMICAL SYMBOL FOR NIGHTALCHE" + + "MICAL SYMBOL FOR DAY-NIGHTALCHEMICAL SYMBOL FOR MONTHALCHEMICAL SYMBOL F" + + "OR HALF DRAMALCHEMICAL SYMBOL FOR HALF OUNCEBLACK LEFT-POINTING ISOSCELE" + + "S RIGHT TRIANGLEBLACK UP-POINTING ISOSCELES RIGHT TRIANGLEBLACK RIGHT-PO" + + "INTING ISOSCELES RIGHT TRIANGLEBLACK DOWN-POINTING ISOSCELES RIGHT TRIAN" + + "GLEBLACK SLIGHTLY SMALL CIRCLEMEDIUM BOLD WHITE CIRCLEBOLD WHITE CIRCLEH" + + "EAVY WHITE CIRCLEVERY HEAVY WHITE CIRCLEEXTREMELY HEAVY WHITE CIRCLEWHIT" + + "E CIRCLE CONTAINING BLACK SMALL CIRCLEROUND TARGETBLACK TINY SQUAREBLACK" + + " SLIGHTLY SMALL SQUARELIGHT WHITE SQUAREMEDIUM WHITE SQUAREBOLD WHITE SQ" + + "UAREHEAVY WHITE SQUAREVERY HEAVY WHITE SQUAREEXTREMELY HEAVY WHITE SQUAR" + + "EWHITE SQUARE CONTAINING BLACK VERY SMALL SQUAREWHITE SQUARE CONTAINING " + + "BLACK MEDIUM SQUARESQUARE TARGETBLACK TINY DIAMONDBLACK VERY SMALL DIAMO" + + "NDBLACK MEDIUM SMALL DIAMONDWHITE DIAMOND CONTAINING BLACK VERY SMALL DI" + + "AMONDWHITE DIAMOND CONTAINING BLACK MEDIUM DIAMONDDIAMOND TARGETBLACK TI" + + "NY LOZENGEBLACK VERY SMALL LOZENGEBLACK MEDIUM SMALL LOZENGEWHITE LOZENG" + + "E CONTAINING BLACK SMALL LOZENGETHIN GREEK CROSSLIGHT GREEK CROSSMEDIUM " + + "GREEK CROSSBOLD GREEK CROSSVERY BOLD GREEK CROSSVERY HEAVY GREEK CROSSEX" + + "TREMELY HEAVY GREEK CROSSTHIN SALTIRELIGHT SALTIREMEDIUM SALTIREBOLD SAL" + + "TIREHEAVY SALTIREVERY HEAVY SALTIREEXTREMELY HEAVY SALTIRELIGHT FIVE SPO" + + "KED ASTERISKMEDIUM FIVE SPOKED ASTERISKBOLD FIVE SPOKED ASTERISKHEAVY FI" + + "VE SPOKED ASTERISKVERY HEAVY FIVE SPOKED ASTERISKEXTREMELY HEAVY FIVE SP" + + "OKED ASTERISKLIGHT SIX SPOKED ASTERISKMEDIUM SIX SPOKED ASTERISKBOLD SIX" + + " SPOKED ASTERISKHEAVY SIX SPOKED ASTERISKVERY HEAVY SIX SPOKED ASTERISKE" + + "XTREMELY HEAVY SIX SPOKED ASTERISKLIGHT EIGHT SPOKED ASTERISKMEDIUM EIGH" + + "T SPOKED ASTERISKBOLD EIGHT SPOKED ASTERISKHEAVY EIGHT SPOKED ASTERISKVE" + + "RY HEAVY EIGHT SPOKED ASTERISKLIGHT THREE POINTED BLACK STARMEDIUM THREE" + + " POINTED BLACK STARTHREE POINTED BLACK STARMEDIUM THREE POINTED PINWHEEL" + + " STARLIGHT FOUR POINTED BLACK STARMEDIUM FOUR POINTED BLACK STARFOUR POI" + + "NTED BLACK STARMEDIUM FOUR POINTED PINWHEEL STARREVERSE LIGHT FOUR POINT" + + "ED PINWHEEL STARLIGHT FIVE POINTED BLACK STARHEAVY FIVE POINTED BLACK ST" + + "ARMEDIUM SIX POINTED BLACK STARHEAVY SIX POINTED BLACK STARSIX POINTED P" + + "INWHEEL STARMEDIUM EIGHT POINTED BLACK STARHEAVY EIGHT POINTED BLACK STA" + + "RVERY HEAVY EIGHT POINTED BLACK STARHEAVY EIGHT POINTED PINWHEEL STARLIG" + + "HT TWELVE POINTED BLACK STARHEAVY TWELVE POINTED BLACK STARHEAVY TWELVE " + + "POINTED PINWHEEL STARLEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEADUPWARD" + + "S ARROW WITH SMALL TRIANGLE ARROWHEADRIGHTWARDS ARROW WITH SMALL TRIANGL" + + "E ARROWHEADDOWNWARDS ARROW WITH SMALL TRIANGLE ARROWHEADLEFTWARDS ARROW " + + "WITH MEDIUM TRIANGLE ARROWHEADUPWARDS ARROW WITH MEDIUM TRIANGLE ARROWHE" + + "ADRIGHTWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEADDOWNWARDS ARROW WITH ME" + + "DIUM TRIANGLE ARROWHEADLEFTWARDS ARROW WITH LARGE TRIANGLE ARROWHEADUPWA" + + "RDS ARROW WITH LARGE TRIANGLE ARROWHEADRIGHTWARDS ARROW WITH LARGE TRIAN" + + "GLE ARROWHEADDOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEADLEFTWARDS ARRO" + + "W WITH SMALL EQUILATERAL ARROWHEADUPWARDS ARROW WITH SMALL EQUILATERAL A" + + "RROWHEADRIGHTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEADDOWNWARDS ARROW" + + " WITH SMALL EQUILATERAL ARROWHEADLEFTWARDS ARROW WITH EQUILATERAL ARROWH" + + "EADUPWARDS ARROW WITH EQUILATERAL ARROWHEADRIGHTWARDS ARROW WITH EQUILAT" + + "ERAL ARROWHEADDOWNWARDS ARROW WITH EQUILATERAL ARROWHEADHEAVY LEFTWARDS " + + "ARROW WITH EQUILATERAL ARROWHEADHEAVY UPWARDS ARROW WITH EQUILATERAL ARR" + + "OWHEADHEAVY RIGHTWARDS ARROW WITH EQUILATERAL ARROWHEADHEAVY DOWNWARDS A" + + "RROW WITH EQUILATERAL ARROWHEADHEAVY LEFTWARDS ARROW WITH LARGE EQUILATE" + + "RAL ARROWHEADHEAVY UPWARDS ARROW WITH LARGE EQUILATERAL ARROWHEADHEAVY R" + + "IGHTWARDS ARROW WITH LARGE EQUILATERAL ARROWHEADHEAVY DOWNWARDS ARROW WI" + + "TH LARGE EQUILATERAL ARROWHEADLEFTWARDS TRIANGLE-HEADED ARROW WITH NARRO" + + "W SHAFTUPWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFTRIGHTWARDS TRIANGL" + + "E-HEADED ARROW WITH NARROW SHAFTDOWNWARDS TRIANGLE-HEADED ARROW WITH NAR" + + "ROW SHAFTLEFTWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFTUPWARDS TRIANG") + ("" + + "LE-HEADED ARROW WITH MEDIUM SHAFTRIGHTWARDS TRIANGLE-HEADED ARROW WITH M" + + "EDIUM SHAFTDOWNWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFTLEFTWARDS TR" + + "IANGLE-HEADED ARROW WITH BOLD SHAFTUPWARDS TRIANGLE-HEADED ARROW WITH BO" + + "LD SHAFTRIGHTWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFTDOWNWARDS TRIANG" + + "LE-HEADED ARROW WITH BOLD SHAFTLEFTWARDS TRIANGLE-HEADED ARROW WITH HEAV" + + "Y SHAFTUPWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFTRIGHTWARDS TRIANGLE" + + "-HEADED ARROW WITH HEAVY SHAFTDOWNWARDS TRIANGLE-HEADED ARROW WITH HEAVY" + + " SHAFTLEFTWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFTUPWARDS TRIAN" + + "GLE-HEADED ARROW WITH VERY HEAVY SHAFTRIGHTWARDS TRIANGLE-HEADED ARROW W" + + "ITH VERY HEAVY SHAFTDOWNWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAF" + + "TLEFTWARDS FINGER-POST ARROWUPWARDS FINGER-POST ARROWRIGHTWARDS FINGER-P" + + "OST ARROWDOWNWARDS FINGER-POST ARROWLEFTWARDS SQUARED ARROWUPWARDS SQUAR" + + "ED ARROWRIGHTWARDS SQUARED ARROWDOWNWARDS SQUARED ARROWLEFTWARDS COMPRES" + + "SED ARROWUPWARDS COMPRESSED ARROWRIGHTWARDS COMPRESSED ARROWDOWNWARDS CO" + + "MPRESSED ARROWLEFTWARDS HEAVY COMPRESSED ARROWUPWARDS HEAVY COMPRESSED A" + + "RROWRIGHTWARDS HEAVY COMPRESSED ARROWDOWNWARDS HEAVY COMPRESSED ARROWLEF" + + "TWARDS HEAVY ARROWUPWARDS HEAVY ARROWRIGHTWARDS HEAVY ARROWDOWNWARDS HEA" + + "VY ARROWLEFTWARDS SANS-SERIF ARROWUPWARDS SANS-SERIF ARROWRIGHTWARDS SAN" + + "S-SERIF ARROWDOWNWARDS SANS-SERIF ARROWNORTH WEST SANS-SERIF ARROWNORTH " + + "EAST SANS-SERIF ARROWSOUTH EAST SANS-SERIF ARROWSOUTH WEST SANS-SERIF AR" + + "ROWLEFT RIGHT SANS-SERIF ARROWUP DOWN SANS-SERIF ARROWWIDE-HEADED LEFTWA" + + "RDS LIGHT BARB ARROWWIDE-HEADED UPWARDS LIGHT BARB ARROWWIDE-HEADED RIGH" + + "TWARDS LIGHT BARB ARROWWIDE-HEADED DOWNWARDS LIGHT BARB ARROWWIDE-HEADED" + + " NORTH WEST LIGHT BARB ARROWWIDE-HEADED NORTH EAST LIGHT BARB ARROWWIDE-" + + "HEADED SOUTH EAST LIGHT BARB ARROWWIDE-HEADED SOUTH WEST LIGHT BARB ARRO" + + "WWIDE-HEADED LEFTWARDS BARB ARROWWIDE-HEADED UPWARDS BARB ARROWWIDE-HEAD" + + "ED RIGHTWARDS BARB ARROWWIDE-HEADED DOWNWARDS BARB ARROWWIDE-HEADED NORT" + + "H WEST BARB ARROWWIDE-HEADED NORTH EAST BARB ARROWWIDE-HEADED SOUTH EAST" + + " BARB ARROWWIDE-HEADED SOUTH WEST BARB ARROWWIDE-HEADED LEFTWARDS MEDIUM" + + " BARB ARROWWIDE-HEADED UPWARDS MEDIUM BARB ARROWWIDE-HEADED RIGHTWARDS M" + + "EDIUM BARB ARROWWIDE-HEADED DOWNWARDS MEDIUM BARB ARROWWIDE-HEADED NORTH" + + " WEST MEDIUM BARB ARROWWIDE-HEADED NORTH EAST MEDIUM BARB ARROWWIDE-HEAD" + + "ED SOUTH EAST MEDIUM BARB ARROWWIDE-HEADED SOUTH WEST MEDIUM BARB ARROWW" + + "IDE-HEADED LEFTWARDS HEAVY BARB ARROWWIDE-HEADED UPWARDS HEAVY BARB ARRO" + + "WWIDE-HEADED RIGHTWARDS HEAVY BARB ARROWWIDE-HEADED DOWNWARDS HEAVY BARB" + + " ARROWWIDE-HEADED NORTH WEST HEAVY BARB ARROWWIDE-HEADED NORTH EAST HEAV" + + "Y BARB ARROWWIDE-HEADED SOUTH EAST HEAVY BARB ARROWWIDE-HEADED SOUTH WES" + + "T HEAVY BARB ARROWWIDE-HEADED LEFTWARDS VERY HEAVY BARB ARROWWIDE-HEADED" + + " UPWARDS VERY HEAVY BARB ARROWWIDE-HEADED RIGHTWARDS VERY HEAVY BARB ARR" + + "OWWIDE-HEADED DOWNWARDS VERY HEAVY BARB ARROWWIDE-HEADED NORTH WEST VERY" + + " HEAVY BARB ARROWWIDE-HEADED NORTH EAST VERY HEAVY BARB ARROWWIDE-HEADED" + + " SOUTH EAST VERY HEAVY BARB ARROWWIDE-HEADED SOUTH WEST VERY HEAVY BARB " + + "ARROWLEFTWARDS TRIANGLE ARROWHEADUPWARDS TRIANGLE ARROWHEADRIGHTWARDS TR" + + "IANGLE ARROWHEADDOWNWARDS TRIANGLE ARROWHEADLEFTWARDS WHITE ARROW WITHIN" + + " TRIANGLE ARROWHEADUPWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEADRIGHTWAR" + + "DS WHITE ARROW WITHIN TRIANGLE ARROWHEADDOWNWARDS WHITE ARROW WITHIN TRI" + + "ANGLE ARROWHEADLEFTWARDS ARROW WITH NOTCHED TAILUPWARDS ARROW WITH NOTCH" + + "ED TAILRIGHTWARDS ARROW WITH NOTCHED TAILDOWNWARDS ARROW WITH NOTCHED TA" + + "ILHEAVY ARROW SHAFT WIDTH ONEHEAVY ARROW SHAFT WIDTH TWO THIRDSHEAVY ARR" + + "OW SHAFT WIDTH ONE HALFHEAVY ARROW SHAFT WIDTH ONE THIRDLEFTWARDS BOTTOM" + + "-SHADED WHITE ARROWRIGHTWARDS BOTTOM SHADED WHITE ARROWLEFTWARDS TOP SHA" + + "DED WHITE ARROWRIGHTWARDS TOP SHADED WHITE ARROWLEFTWARDS LEFT-SHADED WH" + + "ITE ARROWRIGHTWARDS RIGHT-SHADED WHITE ARROWLEFTWARDS RIGHT-SHADED WHITE" + + " ARROWRIGHTWARDS LEFT-SHADED WHITE ARROWLEFTWARDS BACK-TILTED SHADOWED W" + + "HITE ARROWRIGHTWARDS BACK-TILTED SHADOWED WHITE ARROWLEFTWARDS FRONT-TIL" + + "TED SHADOWED WHITE ARROWRIGHTWARDS FRONT-TILTED SHADOWED WHITE ARROWWHIT" + + "E ARROW SHAFT WIDTH ONEWHITE ARROW SHAFT WIDTH TWO THIRDSCIRCLED CROSS F" + + "ORMEE WITH FOUR DOTSCIRCLED CROSS FORMEE WITH TWO DOTSCIRCLED CROSS FORM" + + "EELEFT HALF CIRCLE WITH FOUR DOTSLEFT HALF CIRCLE WITH THREE DOTSLEFT HA" + + "LF CIRCLE WITH TWO DOTSLEFT HALF CIRCLE WITH DOTLEFT HALF CIRCLEDOWNWARD" + + " FACING HOOKDOWNWARD FACING NOTCHED HOOKDOWNWARD FACING HOOK WITH DOTDOW" + + "NWARD FACING NOTCHED HOOK WITH DOTZIPPER-MOUTH FACEMONEY-MOUTH FACEFACE " + + "WITH THERMOMETERNERD FACETHINKING FACEFACE WITH HEAD-BANDAGEROBOT FACEHU" + + "GGING FACESIGN OF THE HORNSCALL ME HANDRAISED BACK OF HANDLEFT-FACING FI") + ("" + + "STRIGHT-FACING FISTHANDSHAKEHAND WITH INDEX AND MIDDLE FINGERS CROSSEDI " + + "LOVE YOU HAND SIGNFACE WITH COWBOY HATCLOWN FACENAUSEATED FACEROLLING ON" + + " THE FLOOR LAUGHINGDROOLING FACELYING FACEFACE PALMSNEEZING FACEFACE WIT" + + "H ONE EYEBROW RAISEDGRINNING FACE WITH STAR EYESGRINNING FACE WITH ONE L" + + "ARGE AND ONE SMALL EYEFACE WITH FINGER COVERING CLOSED LIPSSERIOUS FACE " + + "WITH SYMBOLS COVERING MOUTHSMILING FACE WITH SMILING EYES AND HAND COVER" + + "ING MOUTHFACE WITH OPEN MOUTH VOMITINGSHOCKED FACE WITH EXPLODING HEADPR" + + "EGNANT WOMANBREAST-FEEDINGPALMS UP TOGETHERSELFIEPRINCEMAN IN TUXEDOMOTH" + + "ER CHRISTMASSHRUGPERSON DOING CARTWHEELJUGGLINGFENCERMODERN PENTATHLONWR" + + "ESTLERSWATER POLOHANDBALLWILTED FLOWERDRUM WITH DRUMSTICKSCLINKING GLASS" + + "ESTUMBLER GLASSSPOONGOAL NETRIFLEFIRST PLACE MEDALSECOND PLACE MEDALTHIR" + + "D PLACE MEDALBOXING GLOVEMARTIAL ARTS UNIFORMCURLING STONECROISSANTAVOCA" + + "DOCUCUMBERBACONPOTATOCARROTBAGUETTE BREADGREEN SALADSHALLOW PAN OF FOODS" + + "TUFFED FLATBREADEGGGLASS OF MILKPEANUTSKIWIFRUITPANCAKESDUMPLINGFORTUNE " + + "COOKIETAKEOUT BOXCHOPSTICKSBOWL WITH SPOONCUP WITH STRAWCOCONUTBROCCOLIP" + + "IEPRETZELCUT OF MEATSANDWICHCANNED FOODCRABLION FACESCORPIONTURKEYUNICOR" + + "N FACEEAGLEDUCKBATSHARKOWLFOX FACEBUTTERFLYDEERGORILLALIZARDRHINOCEROSSH" + + "RIMPSQUIDGIRAFFE FACEZEBRA FACEHEDGEHOGSAUROPODT-REXCRICKETCHEESE WEDGEF" + + "ACE WITH MONOCLEADULTCHILDOLDER ADULTBEARDED PERSONPERSON WITH HEADSCARF" + + "PERSON IN STEAMY ROOMPERSON CLIMBINGPERSON IN LOTUS POSITIONMAGEFAIRYVAM" + + "PIREMERPERSONELFGENIEZOMBIEBRAINORANGE HEARTBILLED CAPSCARFGLOVESCOATSOC" + + "KSCJK COMPATIBILITY IDEOGRAPH-2F800CJK COMPATIBILITY IDEOGRAPH-2F801CJK " + + "COMPATIBILITY IDEOGRAPH-2F802CJK COMPATIBILITY IDEOGRAPH-2F803CJK COMPAT" + + "IBILITY IDEOGRAPH-2F804CJK COMPATIBILITY IDEOGRAPH-2F805CJK COMPATIBILIT" + + "Y IDEOGRAPH-2F806CJK COMPATIBILITY IDEOGRAPH-2F807CJK COMPATIBILITY IDEO" + + "GRAPH-2F808CJK COMPATIBILITY IDEOGRAPH-2F809CJK COMPATIBILITY IDEOGRAPH-" + + "2F80ACJK COMPATIBILITY IDEOGRAPH-2F80BCJK COMPATIBILITY IDEOGRAPH-2F80CC" + + "JK COMPATIBILITY IDEOGRAPH-2F80DCJK COMPATIBILITY IDEOGRAPH-2F80ECJK COM" + + "PATIBILITY IDEOGRAPH-2F80FCJK COMPATIBILITY IDEOGRAPH-2F810CJK COMPATIBI" + + "LITY IDEOGRAPH-2F811CJK COMPATIBILITY IDEOGRAPH-2F812CJK COMPATIBILITY I" + + "DEOGRAPH-2F813CJK COMPATIBILITY IDEOGRAPH-2F814CJK COMPATIBILITY IDEOGRA" + + "PH-2F815CJK COMPATIBILITY IDEOGRAPH-2F816CJK COMPATIBILITY IDEOGRAPH-2F8" + + "17CJK COMPATIBILITY IDEOGRAPH-2F818CJK COMPATIBILITY IDEOGRAPH-2F819CJK " + + "COMPATIBILITY IDEOGRAPH-2F81ACJK COMPATIBILITY IDEOGRAPH-2F81BCJK COMPAT" + + "IBILITY IDEOGRAPH-2F81CCJK COMPATIBILITY IDEOGRAPH-2F81DCJK COMPATIBILIT" + + "Y IDEOGRAPH-2F81ECJK COMPATIBILITY IDEOGRAPH-2F81FCJK COMPATIBILITY IDEO" + + "GRAPH-2F820CJK COMPATIBILITY IDEOGRAPH-2F821CJK COMPATIBILITY IDEOGRAPH-" + + "2F822CJK COMPATIBILITY IDEOGRAPH-2F823CJK COMPATIBILITY IDEOGRAPH-2F824C" + + "JK COMPATIBILITY IDEOGRAPH-2F825CJK COMPATIBILITY IDEOGRAPH-2F826CJK COM" + + "PATIBILITY IDEOGRAPH-2F827CJK COMPATIBILITY IDEOGRAPH-2F828CJK COMPATIBI" + + "LITY IDEOGRAPH-2F829CJK COMPATIBILITY IDEOGRAPH-2F82ACJK COMPATIBILITY I" + + "DEOGRAPH-2F82BCJK COMPATIBILITY IDEOGRAPH-2F82CCJK COMPATIBILITY IDEOGRA" + + "PH-2F82DCJK COMPATIBILITY IDEOGRAPH-2F82ECJK COMPATIBILITY IDEOGRAPH-2F8" + + "2FCJK COMPATIBILITY IDEOGRAPH-2F830CJK COMPATIBILITY IDEOGRAPH-2F831CJK " + + "COMPATIBILITY IDEOGRAPH-2F832CJK COMPATIBILITY IDEOGRAPH-2F833CJK COMPAT" + + "IBILITY IDEOGRAPH-2F834CJK COMPATIBILITY IDEOGRAPH-2F835CJK COMPATIBILIT" + + "Y IDEOGRAPH-2F836CJK COMPATIBILITY IDEOGRAPH-2F837CJK COMPATIBILITY IDEO" + + "GRAPH-2F838CJK COMPATIBILITY IDEOGRAPH-2F839CJK COMPATIBILITY IDEOGRAPH-" + + "2F83ACJK COMPATIBILITY IDEOGRAPH-2F83BCJK COMPATIBILITY IDEOGRAPH-2F83CC" + + "JK COMPATIBILITY IDEOGRAPH-2F83DCJK COMPATIBILITY IDEOGRAPH-2F83ECJK COM" + + "PATIBILITY IDEOGRAPH-2F83FCJK COMPATIBILITY IDEOGRAPH-2F840CJK COMPATIBI" + + "LITY IDEOGRAPH-2F841CJK COMPATIBILITY IDEOGRAPH-2F842CJK COMPATIBILITY I" + + "DEOGRAPH-2F843CJK COMPATIBILITY IDEOGRAPH-2F844CJK COMPATIBILITY IDEOGRA" + + "PH-2F845CJK COMPATIBILITY IDEOGRAPH-2F846CJK COMPATIBILITY IDEOGRAPH-2F8" + + "47CJK COMPATIBILITY IDEOGRAPH-2F848CJK COMPATIBILITY IDEOGRAPH-2F849CJK " + + "COMPATIBILITY IDEOGRAPH-2F84ACJK COMPATIBILITY IDEOGRAPH-2F84BCJK COMPAT" + + "IBILITY IDEOGRAPH-2F84CCJK COMPATIBILITY IDEOGRAPH-2F84DCJK COMPATIBILIT" + + "Y IDEOGRAPH-2F84ECJK COMPATIBILITY IDEOGRAPH-2F84FCJK COMPATIBILITY IDEO" + + "GRAPH-2F850CJK COMPATIBILITY IDEOGRAPH-2F851CJK COMPATIBILITY IDEOGRAPH-" + + "2F852CJK COMPATIBILITY IDEOGRAPH-2F853CJK COMPATIBILITY IDEOGRAPH-2F854C" + + "JK COMPATIBILITY IDEOGRAPH-2F855CJK COMPATIBILITY IDEOGRAPH-2F856CJK COM" + + "PATIBILITY IDEOGRAPH-2F857CJK COMPATIBILITY IDEOGRAPH-2F858CJK COMPATIBI" + + "LITY IDEOGRAPH-2F859CJK COMPATIBILITY IDEOGRAPH-2F85ACJK COMPATIBILITY I" + + "DEOGRAPH-2F85BCJK COMPATIBILITY IDEOGRAPH-2F85CCJK COMPATIBILITY IDEOGRA") + ("" + + "PH-2F85DCJK COMPATIBILITY IDEOGRAPH-2F85ECJK COMPATIBILITY IDEOGRAPH-2F8" + + "5FCJK COMPATIBILITY IDEOGRAPH-2F860CJK COMPATIBILITY IDEOGRAPH-2F861CJK " + + "COMPATIBILITY IDEOGRAPH-2F862CJK COMPATIBILITY IDEOGRAPH-2F863CJK COMPAT" + + "IBILITY IDEOGRAPH-2F864CJK COMPATIBILITY IDEOGRAPH-2F865CJK COMPATIBILIT" + + "Y IDEOGRAPH-2F866CJK COMPATIBILITY IDEOGRAPH-2F867CJK COMPATIBILITY IDEO" + + "GRAPH-2F868CJK COMPATIBILITY IDEOGRAPH-2F869CJK COMPATIBILITY IDEOGRAPH-" + + "2F86ACJK COMPATIBILITY IDEOGRAPH-2F86BCJK COMPATIBILITY IDEOGRAPH-2F86CC" + + "JK COMPATIBILITY IDEOGRAPH-2F86DCJK COMPATIBILITY IDEOGRAPH-2F86ECJK COM" + + "PATIBILITY IDEOGRAPH-2F86FCJK COMPATIBILITY IDEOGRAPH-2F870CJK COMPATIBI" + + "LITY IDEOGRAPH-2F871CJK COMPATIBILITY IDEOGRAPH-2F872CJK COMPATIBILITY I" + + "DEOGRAPH-2F873CJK COMPATIBILITY IDEOGRAPH-2F874CJK COMPATIBILITY IDEOGRA" + + "PH-2F875CJK COMPATIBILITY IDEOGRAPH-2F876CJK COMPATIBILITY IDEOGRAPH-2F8" + + "77CJK COMPATIBILITY IDEOGRAPH-2F878CJK COMPATIBILITY IDEOGRAPH-2F879CJK " + + "COMPATIBILITY IDEOGRAPH-2F87ACJK COMPATIBILITY IDEOGRAPH-2F87BCJK COMPAT" + + "IBILITY IDEOGRAPH-2F87CCJK COMPATIBILITY IDEOGRAPH-2F87DCJK COMPATIBILIT" + + "Y IDEOGRAPH-2F87ECJK COMPATIBILITY IDEOGRAPH-2F87FCJK COMPATIBILITY IDEO" + + "GRAPH-2F880CJK COMPATIBILITY IDEOGRAPH-2F881CJK COMPATIBILITY IDEOGRAPH-" + + "2F882CJK COMPATIBILITY IDEOGRAPH-2F883CJK COMPATIBILITY IDEOGRAPH-2F884C" + + "JK COMPATIBILITY IDEOGRAPH-2F885CJK COMPATIBILITY IDEOGRAPH-2F886CJK COM" + + "PATIBILITY IDEOGRAPH-2F887CJK COMPATIBILITY IDEOGRAPH-2F888CJK COMPATIBI" + + "LITY IDEOGRAPH-2F889CJK COMPATIBILITY IDEOGRAPH-2F88ACJK COMPATIBILITY I" + + "DEOGRAPH-2F88BCJK COMPATIBILITY IDEOGRAPH-2F88CCJK COMPATIBILITY IDEOGRA" + + "PH-2F88DCJK COMPATIBILITY IDEOGRAPH-2F88ECJK COMPATIBILITY IDEOGRAPH-2F8" + + "8FCJK COMPATIBILITY IDEOGRAPH-2F890CJK COMPATIBILITY IDEOGRAPH-2F891CJK " + + "COMPATIBILITY IDEOGRAPH-2F892CJK COMPATIBILITY IDEOGRAPH-2F893CJK COMPAT" + + "IBILITY IDEOGRAPH-2F894CJK COMPATIBILITY IDEOGRAPH-2F895CJK COMPATIBILIT" + + "Y IDEOGRAPH-2F896CJK COMPATIBILITY IDEOGRAPH-2F897CJK COMPATIBILITY IDEO" + + "GRAPH-2F898CJK COMPATIBILITY IDEOGRAPH-2F899CJK COMPATIBILITY IDEOGRAPH-" + + "2F89ACJK COMPATIBILITY IDEOGRAPH-2F89BCJK COMPATIBILITY IDEOGRAPH-2F89CC" + + "JK COMPATIBILITY IDEOGRAPH-2F89DCJK COMPATIBILITY IDEOGRAPH-2F89ECJK COM" + + "PATIBILITY IDEOGRAPH-2F89FCJK COMPATIBILITY IDEOGRAPH-2F8A0CJK COMPATIBI" + + "LITY IDEOGRAPH-2F8A1CJK COMPATIBILITY IDEOGRAPH-2F8A2CJK COMPATIBILITY I" + + "DEOGRAPH-2F8A3CJK COMPATIBILITY IDEOGRAPH-2F8A4CJK COMPATIBILITY IDEOGRA" + + "PH-2F8A5CJK COMPATIBILITY IDEOGRAPH-2F8A6CJK COMPATIBILITY IDEOGRAPH-2F8" + + "A7CJK COMPATIBILITY IDEOGRAPH-2F8A8CJK COMPATIBILITY IDEOGRAPH-2F8A9CJK " + + "COMPATIBILITY IDEOGRAPH-2F8AACJK COMPATIBILITY IDEOGRAPH-2F8ABCJK COMPAT" + + "IBILITY IDEOGRAPH-2F8ACCJK COMPATIBILITY IDEOGRAPH-2F8ADCJK COMPATIBILIT" + + "Y IDEOGRAPH-2F8AECJK COMPATIBILITY IDEOGRAPH-2F8AFCJK COMPATIBILITY IDEO" + + "GRAPH-2F8B0CJK COMPATIBILITY IDEOGRAPH-2F8B1CJK COMPATIBILITY IDEOGRAPH-" + + "2F8B2CJK COMPATIBILITY IDEOGRAPH-2F8B3CJK COMPATIBILITY IDEOGRAPH-2F8B4C" + + "JK COMPATIBILITY IDEOGRAPH-2F8B5CJK COMPATIBILITY IDEOGRAPH-2F8B6CJK COM" + + "PATIBILITY IDEOGRAPH-2F8B7CJK COMPATIBILITY IDEOGRAPH-2F8B8CJK COMPATIBI" + + "LITY IDEOGRAPH-2F8B9CJK COMPATIBILITY IDEOGRAPH-2F8BACJK COMPATIBILITY I" + + "DEOGRAPH-2F8BBCJK COMPATIBILITY IDEOGRAPH-2F8BCCJK COMPATIBILITY IDEOGRA" + + "PH-2F8BDCJK COMPATIBILITY IDEOGRAPH-2F8BECJK COMPATIBILITY IDEOGRAPH-2F8" + + "BFCJK COMPATIBILITY IDEOGRAPH-2F8C0CJK COMPATIBILITY IDEOGRAPH-2F8C1CJK " + + "COMPATIBILITY IDEOGRAPH-2F8C2CJK COMPATIBILITY IDEOGRAPH-2F8C3CJK COMPAT" + + "IBILITY IDEOGRAPH-2F8C4CJK COMPATIBILITY IDEOGRAPH-2F8C5CJK COMPATIBILIT" + + "Y IDEOGRAPH-2F8C6CJK COMPATIBILITY IDEOGRAPH-2F8C7CJK COMPATIBILITY IDEO" + + "GRAPH-2F8C8CJK COMPATIBILITY IDEOGRAPH-2F8C9CJK COMPATIBILITY IDEOGRAPH-" + + "2F8CACJK COMPATIBILITY IDEOGRAPH-2F8CBCJK COMPATIBILITY IDEOGRAPH-2F8CCC" + + "JK COMPATIBILITY IDEOGRAPH-2F8CDCJK COMPATIBILITY IDEOGRAPH-2F8CECJK COM" + + "PATIBILITY IDEOGRAPH-2F8CFCJK COMPATIBILITY IDEOGRAPH-2F8D0CJK COMPATIBI" + + "LITY IDEOGRAPH-2F8D1CJK COMPATIBILITY IDEOGRAPH-2F8D2CJK COMPATIBILITY I" + + "DEOGRAPH-2F8D3CJK COMPATIBILITY IDEOGRAPH-2F8D4CJK COMPATIBILITY IDEOGRA" + + "PH-2F8D5CJK COMPATIBILITY IDEOGRAPH-2F8D6CJK COMPATIBILITY IDEOGRAPH-2F8" + + "D7CJK COMPATIBILITY IDEOGRAPH-2F8D8CJK COMPATIBILITY IDEOGRAPH-2F8D9CJK " + + "COMPATIBILITY IDEOGRAPH-2F8DACJK COMPATIBILITY IDEOGRAPH-2F8DBCJK COMPAT" + + "IBILITY IDEOGRAPH-2F8DCCJK COMPATIBILITY IDEOGRAPH-2F8DDCJK COMPATIBILIT" + + "Y IDEOGRAPH-2F8DECJK COMPATIBILITY IDEOGRAPH-2F8DFCJK COMPATIBILITY IDEO" + + "GRAPH-2F8E0CJK COMPATIBILITY IDEOGRAPH-2F8E1CJK COMPATIBILITY IDEOGRAPH-" + + "2F8E2CJK COMPATIBILITY IDEOGRAPH-2F8E3CJK COMPATIBILITY IDEOGRAPH-2F8E4C" + + "JK COMPATIBILITY IDEOGRAPH-2F8E5CJK COMPATIBILITY IDEOGRAPH-2F8E6CJK COM" + + "PATIBILITY IDEOGRAPH-2F8E7CJK COMPATIBILITY IDEOGRAPH-2F8E8CJK COMPATIBI") + ("" + + "LITY IDEOGRAPH-2F8E9CJK COMPATIBILITY IDEOGRAPH-2F8EACJK COMPATIBILITY I" + + "DEOGRAPH-2F8EBCJK COMPATIBILITY IDEOGRAPH-2F8ECCJK COMPATIBILITY IDEOGRA" + + "PH-2F8EDCJK COMPATIBILITY IDEOGRAPH-2F8EECJK COMPATIBILITY IDEOGRAPH-2F8" + + "EFCJK COMPATIBILITY IDEOGRAPH-2F8F0CJK COMPATIBILITY IDEOGRAPH-2F8F1CJK " + + "COMPATIBILITY IDEOGRAPH-2F8F2CJK COMPATIBILITY IDEOGRAPH-2F8F3CJK COMPAT" + + "IBILITY IDEOGRAPH-2F8F4CJK COMPATIBILITY IDEOGRAPH-2F8F5CJK COMPATIBILIT" + + "Y IDEOGRAPH-2F8F6CJK COMPATIBILITY IDEOGRAPH-2F8F7CJK COMPATIBILITY IDEO" + + "GRAPH-2F8F8CJK COMPATIBILITY IDEOGRAPH-2F8F9CJK COMPATIBILITY IDEOGRAPH-" + + "2F8FACJK COMPATIBILITY IDEOGRAPH-2F8FBCJK COMPATIBILITY IDEOGRAPH-2F8FCC" + + "JK COMPATIBILITY IDEOGRAPH-2F8FDCJK COMPATIBILITY IDEOGRAPH-2F8FECJK COM" + + "PATIBILITY IDEOGRAPH-2F8FFCJK COMPATIBILITY IDEOGRAPH-2F900CJK COMPATIBI" + + "LITY IDEOGRAPH-2F901CJK COMPATIBILITY IDEOGRAPH-2F902CJK COMPATIBILITY I" + + "DEOGRAPH-2F903CJK COMPATIBILITY IDEOGRAPH-2F904CJK COMPATIBILITY IDEOGRA" + + "PH-2F905CJK COMPATIBILITY IDEOGRAPH-2F906CJK COMPATIBILITY IDEOGRAPH-2F9" + + "07CJK COMPATIBILITY IDEOGRAPH-2F908CJK COMPATIBILITY IDEOGRAPH-2F909CJK " + + "COMPATIBILITY IDEOGRAPH-2F90ACJK COMPATIBILITY IDEOGRAPH-2F90BCJK COMPAT" + + "IBILITY IDEOGRAPH-2F90CCJK COMPATIBILITY IDEOGRAPH-2F90DCJK COMPATIBILIT" + + "Y IDEOGRAPH-2F90ECJK COMPATIBILITY IDEOGRAPH-2F90FCJK COMPATIBILITY IDEO" + + "GRAPH-2F910CJK COMPATIBILITY IDEOGRAPH-2F911CJK COMPATIBILITY IDEOGRAPH-" + + "2F912CJK COMPATIBILITY IDEOGRAPH-2F913CJK COMPATIBILITY IDEOGRAPH-2F914C" + + "JK COMPATIBILITY IDEOGRAPH-2F915CJK COMPATIBILITY IDEOGRAPH-2F916CJK COM" + + "PATIBILITY IDEOGRAPH-2F917CJK COMPATIBILITY IDEOGRAPH-2F918CJK COMPATIBI" + + "LITY IDEOGRAPH-2F919CJK COMPATIBILITY IDEOGRAPH-2F91ACJK COMPATIBILITY I" + + "DEOGRAPH-2F91BCJK COMPATIBILITY IDEOGRAPH-2F91CCJK COMPATIBILITY IDEOGRA" + + "PH-2F91DCJK COMPATIBILITY IDEOGRAPH-2F91ECJK COMPATIBILITY IDEOGRAPH-2F9" + + "1FCJK COMPATIBILITY IDEOGRAPH-2F920CJK COMPATIBILITY IDEOGRAPH-2F921CJK " + + "COMPATIBILITY IDEOGRAPH-2F922CJK COMPATIBILITY IDEOGRAPH-2F923CJK COMPAT" + + "IBILITY IDEOGRAPH-2F924CJK COMPATIBILITY IDEOGRAPH-2F925CJK COMPATIBILIT" + + "Y IDEOGRAPH-2F926CJK COMPATIBILITY IDEOGRAPH-2F927CJK COMPATIBILITY IDEO" + + "GRAPH-2F928CJK COMPATIBILITY IDEOGRAPH-2F929CJK COMPATIBILITY IDEOGRAPH-" + + "2F92ACJK COMPATIBILITY IDEOGRAPH-2F92BCJK COMPATIBILITY IDEOGRAPH-2F92CC" + + "JK COMPATIBILITY IDEOGRAPH-2F92DCJK COMPATIBILITY IDEOGRAPH-2F92ECJK COM" + + "PATIBILITY IDEOGRAPH-2F92FCJK COMPATIBILITY IDEOGRAPH-2F930CJK COMPATIBI" + + "LITY IDEOGRAPH-2F931CJK COMPATIBILITY IDEOGRAPH-2F932CJK COMPATIBILITY I" + + "DEOGRAPH-2F933CJK COMPATIBILITY IDEOGRAPH-2F934CJK COMPATIBILITY IDEOGRA" + + "PH-2F935CJK COMPATIBILITY IDEOGRAPH-2F936CJK COMPATIBILITY IDEOGRAPH-2F9" + + "37CJK COMPATIBILITY IDEOGRAPH-2F938CJK COMPATIBILITY IDEOGRAPH-2F939CJK " + + "COMPATIBILITY IDEOGRAPH-2F93ACJK COMPATIBILITY IDEOGRAPH-2F93BCJK COMPAT" + + "IBILITY IDEOGRAPH-2F93CCJK COMPATIBILITY IDEOGRAPH-2F93DCJK COMPATIBILIT" + + "Y IDEOGRAPH-2F93ECJK COMPATIBILITY IDEOGRAPH-2F93FCJK COMPATIBILITY IDEO" + + "GRAPH-2F940CJK COMPATIBILITY IDEOGRAPH-2F941CJK COMPATIBILITY IDEOGRAPH-" + + "2F942CJK COMPATIBILITY IDEOGRAPH-2F943CJK COMPATIBILITY IDEOGRAPH-2F944C" + + "JK COMPATIBILITY IDEOGRAPH-2F945CJK COMPATIBILITY IDEOGRAPH-2F946CJK COM" + + "PATIBILITY IDEOGRAPH-2F947CJK COMPATIBILITY IDEOGRAPH-2F948CJK COMPATIBI" + + "LITY IDEOGRAPH-2F949CJK COMPATIBILITY IDEOGRAPH-2F94ACJK COMPATIBILITY I" + + "DEOGRAPH-2F94BCJK COMPATIBILITY IDEOGRAPH-2F94CCJK COMPATIBILITY IDEOGRA" + + "PH-2F94DCJK COMPATIBILITY IDEOGRAPH-2F94ECJK COMPATIBILITY IDEOGRAPH-2F9" + + "4FCJK COMPATIBILITY IDEOGRAPH-2F950CJK COMPATIBILITY IDEOGRAPH-2F951CJK " + + "COMPATIBILITY IDEOGRAPH-2F952CJK COMPATIBILITY IDEOGRAPH-2F953CJK COMPAT" + + "IBILITY IDEOGRAPH-2F954CJK COMPATIBILITY IDEOGRAPH-2F955CJK COMPATIBILIT" + + "Y IDEOGRAPH-2F956CJK COMPATIBILITY IDEOGRAPH-2F957CJK COMPATIBILITY IDEO" + + "GRAPH-2F958CJK COMPATIBILITY IDEOGRAPH-2F959CJK COMPATIBILITY IDEOGRAPH-" + + "2F95ACJK COMPATIBILITY IDEOGRAPH-2F95BCJK COMPATIBILITY IDEOGRAPH-2F95CC" + + "JK COMPATIBILITY IDEOGRAPH-2F95DCJK COMPATIBILITY IDEOGRAPH-2F95ECJK COM" + + "PATIBILITY IDEOGRAPH-2F95FCJK COMPATIBILITY IDEOGRAPH-2F960CJK COMPATIBI" + + "LITY IDEOGRAPH-2F961CJK COMPATIBILITY IDEOGRAPH-2F962CJK COMPATIBILITY I" + + "DEOGRAPH-2F963CJK COMPATIBILITY IDEOGRAPH-2F964CJK COMPATIBILITY IDEOGRA" + + "PH-2F965CJK COMPATIBILITY IDEOGRAPH-2F966CJK COMPATIBILITY IDEOGRAPH-2F9" + + "67CJK COMPATIBILITY IDEOGRAPH-2F968CJK COMPATIBILITY IDEOGRAPH-2F969CJK " + + "COMPATIBILITY IDEOGRAPH-2F96ACJK COMPATIBILITY IDEOGRAPH-2F96BCJK COMPAT" + + "IBILITY IDEOGRAPH-2F96CCJK COMPATIBILITY IDEOGRAPH-2F96DCJK COMPATIBILIT" + + "Y IDEOGRAPH-2F96ECJK COMPATIBILITY IDEOGRAPH-2F96FCJK COMPATIBILITY IDEO" + + "GRAPH-2F970CJK COMPATIBILITY IDEOGRAPH-2F971CJK COMPATIBILITY IDEOGRAPH-" + + "2F972CJK COMPATIBILITY IDEOGRAPH-2F973CJK COMPATIBILITY IDEOGRAPH-2F974C") + ("" + + "JK COMPATIBILITY IDEOGRAPH-2F975CJK COMPATIBILITY IDEOGRAPH-2F976CJK COM" + + "PATIBILITY IDEOGRAPH-2F977CJK COMPATIBILITY IDEOGRAPH-2F978CJK COMPATIBI" + + "LITY IDEOGRAPH-2F979CJK COMPATIBILITY IDEOGRAPH-2F97ACJK COMPATIBILITY I" + + "DEOGRAPH-2F97BCJK COMPATIBILITY IDEOGRAPH-2F97CCJK COMPATIBILITY IDEOGRA" + + "PH-2F97DCJK COMPATIBILITY IDEOGRAPH-2F97ECJK COMPATIBILITY IDEOGRAPH-2F9" + + "7FCJK COMPATIBILITY IDEOGRAPH-2F980CJK COMPATIBILITY IDEOGRAPH-2F981CJK " + + "COMPATIBILITY IDEOGRAPH-2F982CJK COMPATIBILITY IDEOGRAPH-2F983CJK COMPAT" + + "IBILITY IDEOGRAPH-2F984CJK COMPATIBILITY IDEOGRAPH-2F985CJK COMPATIBILIT" + + "Y IDEOGRAPH-2F986CJK COMPATIBILITY IDEOGRAPH-2F987CJK COMPATIBILITY IDEO" + + "GRAPH-2F988CJK COMPATIBILITY IDEOGRAPH-2F989CJK COMPATIBILITY IDEOGRAPH-" + + "2F98ACJK COMPATIBILITY IDEOGRAPH-2F98BCJK COMPATIBILITY IDEOGRAPH-2F98CC" + + "JK COMPATIBILITY IDEOGRAPH-2F98DCJK COMPATIBILITY IDEOGRAPH-2F98ECJK COM" + + "PATIBILITY IDEOGRAPH-2F98FCJK COMPATIBILITY IDEOGRAPH-2F990CJK COMPATIBI" + + "LITY IDEOGRAPH-2F991CJK COMPATIBILITY IDEOGRAPH-2F992CJK COMPATIBILITY I" + + "DEOGRAPH-2F993CJK COMPATIBILITY IDEOGRAPH-2F994CJK COMPATIBILITY IDEOGRA" + + "PH-2F995CJK COMPATIBILITY IDEOGRAPH-2F996CJK COMPATIBILITY IDEOGRAPH-2F9" + + "97CJK COMPATIBILITY IDEOGRAPH-2F998CJK COMPATIBILITY IDEOGRAPH-2F999CJK " + + "COMPATIBILITY IDEOGRAPH-2F99ACJK COMPATIBILITY IDEOGRAPH-2F99BCJK COMPAT" + + "IBILITY IDEOGRAPH-2F99CCJK COMPATIBILITY IDEOGRAPH-2F99DCJK COMPATIBILIT" + + "Y IDEOGRAPH-2F99ECJK COMPATIBILITY IDEOGRAPH-2F99FCJK COMPATIBILITY IDEO" + + "GRAPH-2F9A0CJK COMPATIBILITY IDEOGRAPH-2F9A1CJK COMPATIBILITY IDEOGRAPH-" + + "2F9A2CJK COMPATIBILITY IDEOGRAPH-2F9A3CJK COMPATIBILITY IDEOGRAPH-2F9A4C" + + "JK COMPATIBILITY IDEOGRAPH-2F9A5CJK COMPATIBILITY IDEOGRAPH-2F9A6CJK COM" + + "PATIBILITY IDEOGRAPH-2F9A7CJK COMPATIBILITY IDEOGRAPH-2F9A8CJK COMPATIBI" + + "LITY IDEOGRAPH-2F9A9CJK COMPATIBILITY IDEOGRAPH-2F9AACJK COMPATIBILITY I" + + "DEOGRAPH-2F9ABCJK COMPATIBILITY IDEOGRAPH-2F9ACCJK COMPATIBILITY IDEOGRA" + + "PH-2F9ADCJK COMPATIBILITY IDEOGRAPH-2F9AECJK COMPATIBILITY IDEOGRAPH-2F9" + + "AFCJK COMPATIBILITY IDEOGRAPH-2F9B0CJK COMPATIBILITY IDEOGRAPH-2F9B1CJK " + + "COMPATIBILITY IDEOGRAPH-2F9B2CJK COMPATIBILITY IDEOGRAPH-2F9B3CJK COMPAT" + + "IBILITY IDEOGRAPH-2F9B4CJK COMPATIBILITY IDEOGRAPH-2F9B5CJK COMPATIBILIT" + + "Y IDEOGRAPH-2F9B6CJK COMPATIBILITY IDEOGRAPH-2F9B7CJK COMPATIBILITY IDEO" + + "GRAPH-2F9B8CJK COMPATIBILITY IDEOGRAPH-2F9B9CJK COMPATIBILITY IDEOGRAPH-" + + "2F9BACJK COMPATIBILITY IDEOGRAPH-2F9BBCJK COMPATIBILITY IDEOGRAPH-2F9BCC" + + "JK COMPATIBILITY IDEOGRAPH-2F9BDCJK COMPATIBILITY IDEOGRAPH-2F9BECJK COM" + + "PATIBILITY IDEOGRAPH-2F9BFCJK COMPATIBILITY IDEOGRAPH-2F9C0CJK COMPATIBI" + + "LITY IDEOGRAPH-2F9C1CJK COMPATIBILITY IDEOGRAPH-2F9C2CJK COMPATIBILITY I" + + "DEOGRAPH-2F9C3CJK COMPATIBILITY IDEOGRAPH-2F9C4CJK COMPATIBILITY IDEOGRA" + + "PH-2F9C5CJK COMPATIBILITY IDEOGRAPH-2F9C6CJK COMPATIBILITY IDEOGRAPH-2F9" + + "C7CJK COMPATIBILITY IDEOGRAPH-2F9C8CJK COMPATIBILITY IDEOGRAPH-2F9C9CJK " + + "COMPATIBILITY IDEOGRAPH-2F9CACJK COMPATIBILITY IDEOGRAPH-2F9CBCJK COMPAT" + + "IBILITY IDEOGRAPH-2F9CCCJK COMPATIBILITY IDEOGRAPH-2F9CDCJK COMPATIBILIT" + + "Y IDEOGRAPH-2F9CECJK COMPATIBILITY IDEOGRAPH-2F9CFCJK COMPATIBILITY IDEO" + + "GRAPH-2F9D0CJK COMPATIBILITY IDEOGRAPH-2F9D1CJK COMPATIBILITY IDEOGRAPH-" + + "2F9D2CJK COMPATIBILITY IDEOGRAPH-2F9D3CJK COMPATIBILITY IDEOGRAPH-2F9D4C" + + "JK COMPATIBILITY IDEOGRAPH-2F9D5CJK COMPATIBILITY IDEOGRAPH-2F9D6CJK COM" + + "PATIBILITY IDEOGRAPH-2F9D7CJK COMPATIBILITY IDEOGRAPH-2F9D8CJK COMPATIBI" + + "LITY IDEOGRAPH-2F9D9CJK COMPATIBILITY IDEOGRAPH-2F9DACJK COMPATIBILITY I" + + "DEOGRAPH-2F9DBCJK COMPATIBILITY IDEOGRAPH-2F9DCCJK COMPATIBILITY IDEOGRA" + + "PH-2F9DDCJK COMPATIBILITY IDEOGRAPH-2F9DECJK COMPATIBILITY IDEOGRAPH-2F9" + + "DFCJK COMPATIBILITY IDEOGRAPH-2F9E0CJK COMPATIBILITY IDEOGRAPH-2F9E1CJK " + + "COMPATIBILITY IDEOGRAPH-2F9E2CJK COMPATIBILITY IDEOGRAPH-2F9E3CJK COMPAT" + + "IBILITY IDEOGRAPH-2F9E4CJK COMPATIBILITY IDEOGRAPH-2F9E5CJK COMPATIBILIT" + + "Y IDEOGRAPH-2F9E6CJK COMPATIBILITY IDEOGRAPH-2F9E7CJK COMPATIBILITY IDEO" + + "GRAPH-2F9E8CJK COMPATIBILITY IDEOGRAPH-2F9E9CJK COMPATIBILITY IDEOGRAPH-" + + "2F9EACJK COMPATIBILITY IDEOGRAPH-2F9EBCJK COMPATIBILITY IDEOGRAPH-2F9ECC" + + "JK COMPATIBILITY IDEOGRAPH-2F9EDCJK COMPATIBILITY IDEOGRAPH-2F9EECJK COM" + + "PATIBILITY IDEOGRAPH-2F9EFCJK COMPATIBILITY IDEOGRAPH-2F9F0CJK COMPATIBI" + + "LITY IDEOGRAPH-2F9F1CJK COMPATIBILITY IDEOGRAPH-2F9F2CJK COMPATIBILITY I" + + "DEOGRAPH-2F9F3CJK COMPATIBILITY IDEOGRAPH-2F9F4CJK COMPATIBILITY IDEOGRA" + + "PH-2F9F5CJK COMPATIBILITY IDEOGRAPH-2F9F6CJK COMPATIBILITY IDEOGRAPH-2F9" + + "F7CJK COMPATIBILITY IDEOGRAPH-2F9F8CJK COMPATIBILITY IDEOGRAPH-2F9F9CJK " + + "COMPATIBILITY IDEOGRAPH-2F9FACJK COMPATIBILITY IDEOGRAPH-2F9FBCJK COMPAT" + + "IBILITY IDEOGRAPH-2F9FCCJK COMPATIBILITY IDEOGRAPH-2F9FDCJK COMPATIBILIT" + + "Y IDEOGRAPH-2F9FECJK COMPATIBILITY IDEOGRAPH-2F9FFCJK COMPATIBILITY IDEO") + ("" + + "GRAPH-2FA00CJK COMPATIBILITY IDEOGRAPH-2FA01CJK COMPATIBILITY IDEOGRAPH-" + + "2FA02CJK COMPATIBILITY IDEOGRAPH-2FA03CJK COMPATIBILITY IDEOGRAPH-2FA04C" + + "JK COMPATIBILITY IDEOGRAPH-2FA05CJK COMPATIBILITY IDEOGRAPH-2FA06CJK COM" + + "PATIBILITY IDEOGRAPH-2FA07CJK COMPATIBILITY IDEOGRAPH-2FA08CJK COMPATIBI" + + "LITY IDEOGRAPH-2FA09CJK COMPATIBILITY IDEOGRAPH-2FA0ACJK COMPATIBILITY I" + + "DEOGRAPH-2FA0BCJK COMPATIBILITY IDEOGRAPH-2FA0CCJK COMPATIBILITY IDEOGRA" + + "PH-2FA0DCJK COMPATIBILITY IDEOGRAPH-2FA0ECJK COMPATIBILITY IDEOGRAPH-2FA" + + "0FCJK COMPATIBILITY IDEOGRAPH-2FA10CJK COMPATIBILITY IDEOGRAPH-2FA11CJK " + + "COMPATIBILITY IDEOGRAPH-2FA12CJK COMPATIBILITY IDEOGRAPH-2FA13CJK COMPAT" + + "IBILITY IDEOGRAPH-2FA14CJK COMPATIBILITY IDEOGRAPH-2FA15CJK COMPATIBILIT" + + "Y IDEOGRAPH-2FA16CJK COMPATIBILITY IDEOGRAPH-2FA17CJK COMPATIBILITY IDEO" + + "GRAPH-2FA18CJK COMPATIBILITY IDEOGRAPH-2FA19CJK COMPATIBILITY IDEOGRAPH-" + + "2FA1ACJK COMPATIBILITY IDEOGRAPH-2FA1BCJK COMPATIBILITY IDEOGRAPH-2FA1CC" + + "JK COMPATIBILITY IDEOGRAPH-2FA1DLANGUAGE TAGTAG SPACETAG EXCLAMATION MAR" + + "KTAG QUOTATION MARKTAG NUMBER SIGNTAG DOLLAR SIGNTAG PERCENT SIGNTAG AMP" + + "ERSANDTAG APOSTROPHETAG LEFT PARENTHESISTAG RIGHT PARENTHESISTAG ASTERIS" + + "KTAG PLUS SIGNTAG COMMATAG HYPHEN-MINUSTAG FULL STOPTAG SOLIDUSTAG DIGIT" + + " ZEROTAG DIGIT ONETAG DIGIT TWOTAG DIGIT THREETAG DIGIT FOURTAG DIGIT FI" + + "VETAG DIGIT SIXTAG DIGIT SEVENTAG DIGIT EIGHTTAG DIGIT NINETAG COLONTAG " + + "SEMICOLONTAG LESS-THAN SIGNTAG EQUALS SIGNTAG GREATER-THAN SIGNTAG QUEST" + + "ION MARKTAG COMMERCIAL ATTAG LATIN CAPITAL LETTER ATAG LATIN CAPITAL LET" + + "TER BTAG LATIN CAPITAL LETTER CTAG LATIN CAPITAL LETTER DTAG LATIN CAPIT" + + "AL LETTER ETAG LATIN CAPITAL LETTER FTAG LATIN CAPITAL LETTER GTAG LATIN" + + " CAPITAL LETTER HTAG LATIN CAPITAL LETTER ITAG LATIN CAPITAL LETTER JTAG" + + " LATIN CAPITAL LETTER KTAG LATIN CAPITAL LETTER LTAG LATIN CAPITAL LETTE" + + "R MTAG LATIN CAPITAL LETTER NTAG LATIN CAPITAL LETTER OTAG LATIN CAPITAL" + + " LETTER PTAG LATIN CAPITAL LETTER QTAG LATIN CAPITAL LETTER RTAG LATIN C" + + "APITAL LETTER STAG LATIN CAPITAL LETTER TTAG LATIN CAPITAL LETTER UTAG L" + + "ATIN CAPITAL LETTER VTAG LATIN CAPITAL LETTER WTAG LATIN CAPITAL LETTER " + + "XTAG LATIN CAPITAL LETTER YTAG LATIN CAPITAL LETTER ZTAG LEFT SQUARE BRA" + + "CKETTAG REVERSE SOLIDUSTAG RIGHT SQUARE BRACKETTAG CIRCUMFLEX ACCENTTAG " + + "LOW LINETAG GRAVE ACCENTTAG LATIN SMALL LETTER ATAG LATIN SMALL LETTER B" + + "TAG LATIN SMALL LETTER CTAG LATIN SMALL LETTER DTAG LATIN SMALL LETTER E" + + "TAG LATIN SMALL LETTER FTAG LATIN SMALL LETTER GTAG LATIN SMALL LETTER H" + + "TAG LATIN SMALL LETTER ITAG LATIN SMALL LETTER JTAG LATIN SMALL LETTER K" + + "TAG LATIN SMALL LETTER LTAG LATIN SMALL LETTER MTAG LATIN SMALL LETTER N" + + "TAG LATIN SMALL LETTER OTAG LATIN SMALL LETTER PTAG LATIN SMALL LETTER Q" + + "TAG LATIN SMALL LETTER RTAG LATIN SMALL LETTER STAG LATIN SMALL LETTER T" + + "TAG LATIN SMALL LETTER UTAG LATIN SMALL LETTER VTAG LATIN SMALL LETTER W" + + "TAG LATIN SMALL LETTER XTAG LATIN SMALL LETTER YTAG LATIN SMALL LETTER Z" + + "TAG LEFT CURLY BRACKETTAG VERTICAL LINETAG RIGHT CURLY BRACKETTAG TILDEC" + + "ANCEL TAGVARIATION SELECTOR-17VARIATION SELECTOR-18VARIATION SELECTOR-19" + + "VARIATION SELECTOR-20VARIATION SELECTOR-21VARIATION SELECTOR-22VARIATION" + + " SELECTOR-23VARIATION SELECTOR-24VARIATION SELECTOR-25VARIATION SELECTOR" + + "-26VARIATION SELECTOR-27VARIATION SELECTOR-28VARIATION SELECTOR-29VARIAT" + + "ION SELECTOR-30VARIATION SELECTOR-31VARIATION SELECTOR-32VARIATION SELEC" + + "TOR-33VARIATION SELECTOR-34VARIATION SELECTOR-35VARIATION SELECTOR-36VAR" + + "IATION SELECTOR-37VARIATION SELECTOR-38VARIATION SELECTOR-39VARIATION SE" + + "LECTOR-40VARIATION SELECTOR-41VARIATION SELECTOR-42VARIATION SELECTOR-43" + + "VARIATION SELECTOR-44VARIATION SELECTOR-45VARIATION SELECTOR-46VARIATION" + + " SELECTOR-47VARIATION SELECTOR-48VARIATION SELECTOR-49VARIATION SELECTOR" + + "-50VARIATION SELECTOR-51VARIATION SELECTOR-52VARIATION SELECTOR-53VARIAT" + + "ION SELECTOR-54VARIATION SELECTOR-55VARIATION SELECTOR-56VARIATION SELEC" + + "TOR-57VARIATION SELECTOR-58VARIATION SELECTOR-59VARIATION SELECTOR-60VAR" + + "IATION SELECTOR-61VARIATION SELECTOR-62VARIATION SELECTOR-63VARIATION SE" + + "LECTOR-64VARIATION SELECTOR-65VARIATION SELECTOR-66VARIATION SELECTOR-67" + + "VARIATION SELECTOR-68VARIATION SELECTOR-69VARIATION SELECTOR-70VARIATION" + + " SELECTOR-71VARIATION SELECTOR-72VARIATION SELECTOR-73VARIATION SELECTOR" + + "-74VARIATION SELECTOR-75VARIATION SELECTOR-76VARIATION SELECTOR-77VARIAT" + + "ION SELECTOR-78VARIATION SELECTOR-79VARIATION SELECTOR-80VARIATION SELEC" + + "TOR-81VARIATION SELECTOR-82VARIATION SELECTOR-83VARIATION SELECTOR-84VAR" + + "IATION SELECTOR-85VARIATION SELECTOR-86VARIATION SELECTOR-87VARIATION SE" + + "LECTOR-88VARIATION SELECTOR-89VARIATION SELECTOR-90VARIATION SELECTOR-91" + + "VARIATION SELECTOR-92VARIATION SELECTOR-93VARIATION SELECTOR-94VARIATION") + ("" + + " SELECTOR-95VARIATION SELECTOR-96VARIATION SELECTOR-97VARIATION SELECTOR" + + "-98VARIATION SELECTOR-99VARIATION SELECTOR-100VARIATION SELECTOR-101VARI" + + "ATION SELECTOR-102VARIATION SELECTOR-103VARIATION SELECTOR-104VARIATION " + + "SELECTOR-105VARIATION SELECTOR-106VARIATION SELECTOR-107VARIATION SELECT" + + "OR-108VARIATION SELECTOR-109VARIATION SELECTOR-110VARIATION SELECTOR-111" + + "VARIATION SELECTOR-112VARIATION SELECTOR-113VARIATION SELECTOR-114VARIAT" + + "ION SELECTOR-115VARIATION SELECTOR-116VARIATION SELECTOR-117VARIATION SE" + + "LECTOR-118VARIATION SELECTOR-119VARIATION SELECTOR-120VARIATION SELECTOR" + + "-121VARIATION SELECTOR-122VARIATION SELECTOR-123VARIATION SELECTOR-124VA" + + "RIATION SELECTOR-125VARIATION SELECTOR-126VARIATION SELECTOR-127VARIATIO" + + "N SELECTOR-128VARIATION SELECTOR-129VARIATION SELECTOR-130VARIATION SELE" + + "CTOR-131VARIATION SELECTOR-132VARIATION SELECTOR-133VARIATION SELECTOR-1" + + "34VARIATION SELECTOR-135VARIATION SELECTOR-136VARIATION SELECTOR-137VARI" + + "ATION SELECTOR-138VARIATION SELECTOR-139VARIATION SELECTOR-140VARIATION " + + "SELECTOR-141VARIATION SELECTOR-142VARIATION SELECTOR-143VARIATION SELECT" + + "OR-144VARIATION SELECTOR-145VARIATION SELECTOR-146VARIATION SELECTOR-147" + + "VARIATION SELECTOR-148VARIATION SELECTOR-149VARIATION SELECTOR-150VARIAT" + + "ION SELECTOR-151VARIATION SELECTOR-152VARIATION SELECTOR-153VARIATION SE" + + "LECTOR-154VARIATION SELECTOR-155VARIATION SELECTOR-156VARIATION SELECTOR" + + "-157VARIATION SELECTOR-158VARIATION SELECTOR-159VARIATION SELECTOR-160VA" + + "RIATION SELECTOR-161VARIATION SELECTOR-162VARIATION SELECTOR-163VARIATIO" + + "N SELECTOR-164VARIATION SELECTOR-165VARIATION SELECTOR-166VARIATION SELE" + + "CTOR-167VARIATION SELECTOR-168VARIATION SELECTOR-169VARIATION SELECTOR-1" + + "70VARIATION SELECTOR-171VARIATION SELECTOR-172VARIATION SELECTOR-173VARI" + + "ATION SELECTOR-174VARIATION SELECTOR-175VARIATION SELECTOR-176VARIATION " + + "SELECTOR-177VARIATION SELECTOR-178VARIATION SELECTOR-179VARIATION SELECT" + + "OR-180VARIATION SELECTOR-181VARIATION SELECTOR-182VARIATION SELECTOR-183" + + "VARIATION SELECTOR-184VARIATION SELECTOR-185VARIATION SELECTOR-186VARIAT" + + "ION SELECTOR-187VARIATION SELECTOR-188VARIATION SELECTOR-189VARIATION SE" + + "LECTOR-190VARIATION SELECTOR-191VARIATION SELECTOR-192VARIATION SELECTOR" + + "-193VARIATION SELECTOR-194VARIATION SELECTOR-195VARIATION SELECTOR-196VA" + + "RIATION SELECTOR-197VARIATION SELECTOR-198VARIATION SELECTOR-199VARIATIO" + + "N SELECTOR-200VARIATION SELECTOR-201VARIATION SELECTOR-202VARIATION SELE" + + "CTOR-203VARIATION SELECTOR-204VARIATION SELECTOR-205VARIATION SELECTOR-2" + + "06VARIATION SELECTOR-207VARIATION SELECTOR-208VARIATION SELECTOR-209VARI" + + "ATION SELECTOR-210VARIATION SELECTOR-211VARIATION SELECTOR-212VARIATION " + + "SELECTOR-213VARIATION SELECTOR-214VARIATION SELECTOR-215VARIATION SELECT" + + "OR-216VARIATION SELECTOR-217VARIATION SELECTOR-218VARIATION SELECTOR-219" + + "VARIATION SELECTOR-220VARIATION SELECTOR-221VARIATION SELECTOR-222VARIAT" + + "ION SELECTOR-223VARIATION SELECTOR-224VARIATION SELECTOR-225VARIATION SE" + + "LECTOR-226VARIATION SELECTOR-227VARIATION SELECTOR-228VARIATION SELECTOR" + + "-229VARIATION SELECTOR-230VARIATION SELECTOR-231VARIATION SELECTOR-232VA" + + "RIATION SELECTOR-233VARIATION SELECTOR-234VARIATION SELECTOR-235VARIATIO" + + "N SELECTOR-236VARIATION SELECTOR-237VARIATION SELECTOR-238VARIATION SELE" + + "CTOR-239VARIATION SELECTOR-240VARIATION SELECTOR-241VARIATION SELECTOR-2" + + "42VARIATION SELECTOR-243VARIATION SELECTOR-244VARIATION SELECTOR-245VARI" + + "ATION SELECTOR-246VARIATION SELECTOR-247VARIATION SELECTOR-248VARIATION " + + "SELECTOR-249VARIATION SELECTOR-250VARIATION SELECTOR-251VARIATION SELECT" + + "OR-252VARIATION SELECTOR-253VARIATION SELECTOR-254VARIATION SELECTOR-255" + + "VARIATION SELECTOR-256") + +// Total table size 878687 bytes (858KiB); checksum: 59530D43 diff --git a/vendor/golang.org/x/text/unicode/runenames/tables9.0.0.go b/vendor/golang.org/x/text/unicode/runenames/tables9.0.0.go new file mode 100644 index 0000000..912c396 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/runenames/tables9.0.0.go @@ -0,0 +1,15459 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// +build !go1.10 + +package runenames + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "9.0.0" + +type entry uint64 + +func (e entry) startRune() int32 { + return int32((e >> 43) & 0x1fffff) +} + +func (e entry) numRunes() int { + return int((e >> 27) & 0xffff) +} + +func (e entry) index() int { + return int((e >> 11) & 0xffff) +} + +func (e entry) base() int { + return int((e >> 5) & 0x3f) +} + +func (e entry) direct() bool { + const bit = 1 << 4 + return e&bit == bit +} + +var entries = []entry{ // 659 elements + // Entry 0 - 1F + 0x000000010009e930, 0x00010002f8000000, 0x0003f8010809e930, 0x00050016c002f800, + 0x001bd0003019b800, 0x001c20003819e800, 0x001c6000081a2000, 0x001c7000a01a2800, + 0x001d180c681ac800, 0x0029880130273000, 0x002ac80038286000, 0x002b080138289800, + 0x002c48001029d000, 0x002c68001829e000, 0x002c8801b829f800, 0x002e8000d82bb000, + 0x002f8000282c8800, 0x00300000e82cb000, 0x0030f007802d9800, 0x00387801e0351800, + 0x003a68032836f800, 0x003e0001d83a2000, 0x00400001703bf800, 0x00418000783d6800, + 0x00420000e03de000, 0x0042f000083ec000, 0x00450000a83ec800, 0x0045b000403f7000, + 0x0046a005803fb000, 0x004c280040453000, 0x004c780010457000, 0x004c9800b0458000, + // Entry 20 - 3F + 0x004d500038463000, 0x004d900008466800, 0x004db00020467000, 0x004de00048469000, + 0x004e38001046d800, 0x004e58002046e800, 0x004eb80008470800, 0x004ee00010471000, + 0x004ef80028472000, 0x004f3000b0474800, 0x005008001847f800, 0x0050280030481000, + 0x0050780010484000, 0x00509800b0485000, 0x0051500038490000, 0x0051900010493800, + 0x0051a80010494800, 0x0051c00010495800, 0x0051e00008496800, 0x0051f00028497000, + 0x0052380010499800, 0x005258001849a800, 0x005288000849c000, 0x0052c8002049c800, + 0x0052f0000849e800, 0x005330008049f000, 0x00540800184a7000, 0x00542800484a8800, + 0x00547800184ad000, 0x00549800b04ae800, 0x00555000284b9800, 0x00557800104bc020, + // Entry 40 - 5F + 0x00559000104bd020, 0x0055a800284be020, 0x0055e000504c0820, 0x00563800184c5820, + 0x00565800184c7020, 0x00568000084c8820, 0x00570000204c9020, 0x00573000604cb020, + 0x0057c800084d1020, 0x00580800184d1820, 0x00582800404d3020, 0x00587800104d7020, + 0x00589800b04d8020, 0x00595000384e3020, 0x00599000104e6820, 0x0059a800284e7820, + 0x0059e000484ea020, 0x005a3800104ee820, 0x005a5800184ef820, 0x005ab000104f1020, + 0x005ae000104f2020, 0x005af800284f3020, 0x005b3000904f5820, 0x005c1000104fe820, + 0x005c2800304ff820, 0x005c700018502820, 0x005c900020504020, 0x005cc80010506020, + 0x005ce00008507020, 0x005cf00010507820, 0x005d180010508820, 0x005d400018509820, + // Entry 60 - 7F + 0x005d70006050b020, 0x005df00028511020, 0x005e300018513820, 0x005e500020515020, + 0x005e800008517020, 0x005eb80008517820, 0x005f3000a8518020, 0x0060000020522820, + 0x0060280040524820, 0x0060700018528820, 0x00609000b852a020, 0x0061500080535820, + 0x0061e8004053d820, 0x0062300018541820, 0x0062500020543020, 0x0062a80010545020, + 0x0062c00018546020, 0x0063000020547820, 0x0063300050549820, 0x0063c0006054e820, + 0x0064280040554820, 0x0064700018558820, 0x00649000b855a020, 0x0065500050565820, + 0x0065a8002856a820, 0x0065e0004856d020, 0x0066300018571820, 0x0066500020573020, + 0x0066a80010575020, 0x0066f00008576020, 0x0067000020576820, 0x0067300050578820, + // Entry 80 - 9F + 0x006788001057d820, 0x006808001857e820, 0x0068280040580020, 0x0068700018584020, + 0x0068900148585820, 0x0069e8004059a020, 0x006a30001859e020, 0x006a50003059f820, + 0x006aa000805a2820, 0x006b3000d05aa820, 0x006c1000105b7820, 0x006c2800905b8820, + 0x006cd000c05c1820, 0x006d9800485cd820, 0x006de800085d2020, 0x006e0000385d2820, + 0x006e5000085d6020, 0x006e7800305d6820, 0x006eb000085d9820, 0x006ec000405da020, + 0x006f3000505de020, 0x006f9000185e3020, 0x00700801d05e4820, 0x0071f800e8601820, + 0x0074080010610020, 0x0074200008611020, 0x0074380010611820, 0x0074500008612820, + 0x0074680008613020, 0x0074a00020613820, 0x0074c80038615820, 0x0075080018619020, + // Entry A0 - BF + 0x007528000861a820, 0x007538000861b020, 0x007550001061b820, 0x007568006861c820, + 0x0075d80018623020, 0x0076000028624820, 0x0076300008627020, 0x0076400030627820, + 0x007680005062a820, 0x0076e0002062f820, 0x0078000240631820, 0x007a480120655820, + 0x007b880138667820, 0x007cc8012067b020, 0x007df0007868d020, 0x007e700068694820, + 0x008000063069b020, 0x00863800086fe020, 0x00866800086fe820, 0x0086800bc86ff020, + 0x00925000207bb820, 0x00928000387bd820, 0x0092c000087c1020, 0x0092d000207c1820, + 0x00930001487c3820, 0x00945000207d8020, 0x00948001087da020, 0x00959000207ea820, + 0x0095c000387ec820, 0x00960000087f0020, 0x00961000207f0820, 0x00964000787f2820, + // Entry C0 - DF + 0x0096c001c87fa020, 0x0098900020816820, 0x0098c00218818820, 0x009ae8010083a020, + 0x009c0000d084a020, 0x009d0002b0857020, 0x009fc00030882020, 0x00a00014e8885020, + 0x00b50002c89d3820, 0x00b8000068a00020, 0x00b8700038a06820, 0x00b90000b8a0a020, + 0x00ba0000a0a15820, 0x00bb000068a1f820, 0x00bb700018a26020, 0x00bb900010a27820, + 0x00bc000188a28820, 0x00bd880168a41040, 0x00bf000050a57840, 0x00bf800050a5c840, + 0x00c0000078a61840, 0x00c0800050a69040, 0x00c10002c0a6e040, 0x00c4000158a9a040, + 0x00c5800230aaf840, 0x00c80000f8ad2840, 0x00c9000060ae2040, 0x00c9800060ae8040, + 0x00ca000008aee040, 0x00ca200150aee840, 0x00cb800028b03840, 0x00cc000160b06040, + // Entry E0 - FF + 0x00cd8000d0b1c040, 0x00ce800058b29040, 0x00cef001f0b2e840, 0x00d0f00208b4d840, + 0x00d30000e8b6e040, 0x00d3f80058b7c840, 0x00d4800050b82040, 0x00d5000070b87040, + 0x00d5800078b8e040, 0x00d8000260b95840, 0x00da800168bbb840, 0x00dc0003a0bd2040, + 0x00dfe001e0c0c040, 0x00e1d80078c2a040, 0x00e26801e0c31840, 0x00e6000040c4f840, + 0x00e6800138c53840, 0x00e7c00010c67040, 0x00e80007b0c68040, 0x00efd808d8ce3040, + 0x00f8c00030d70840, 0x00f9000130d73840, 0x00fa400030d86840, 0x00fa800040d89840, + 0x00fac80008d8d840, 0x00fad80008d8e040, 0x00fae80008d8e840, 0x00faf800f8d8f040, + 0x00fc0001a8d9e840, 0x00fdb00078db9040, 0x00fe300070dc0840, 0x00feb00030dc7840, + // Entry 100 - 11F + 0x00fee80098dca840, 0x00ff900018dd4040, 0x00ffb00048dd5840, 0x0100000328dda040, + 0x0103300060e0c840, 0x0103a000d8e12840, 0x0104800068e20040, 0x01050000f8e26840, + 0x0106800108e36040, 0x0108000460e46840, 0x010c800588e8c840, 0x0112080df0ee5060, + 0x0120000138fc4060, 0x0122000058fd7860, 0x01230038a0fdd060, 0x015bb00101367060, + 0x015cc00111377060, 0x015de80061388060, 0x015e50004138e060, 0x015f600009392060, + 0x015f680019392880, 0x0160000179394080, 0x01618001793ab880, 0x01630004a13c3080, + 0x0167c8016940d080, 0x0169380009423880, 0x0169680009424080, 0x01698001c1424880, + 0x016b780011440880, 0x016bf800c1441880, 0x016d00003944d880, 0x016d400039451080, + // Entry 120 - 13F + 0x016d800039454880, 0x016dc00039458080, 0x016e00003945b880, 0x016e40003945f080, + 0x016e800039462880, 0x016ec00039466080, 0x016f000329469880, 0x01740000d149c080, + 0x0174d802c94a9080, 0x01780006b14d5880, 0x017f800061540880, 0x0180000201546880, + 0x01820802b1566880, 0x0184c80339591880, 0x01882801495c5080, 0x01898802f15d9880, + 0x018c800159608880, 0x018e00012161e080, 0x018f800179630080, 0x01910006f9647880, + 0x01980008016b7080, 0x01a000cdb0000370, 0x026e000201737080, 0x0270028eb00439f0, + 0x0500002469757080, 0x05248001b999d880, 0x05268004299b9080, 0x052aa806b99fb8a0, + 0x05320005c1a670a0, 0x0538000579ac30a0, 0x053d800041b1a8a0, 0x053fb801a9b1e8a0, + // Entry 140 - 15F + 0x0541800051b390a0, 0x05420001c1b3e0a0, 0x0544000231b5a0a0, 0x0546700061b7d0a0, + 0x05470000f1b830a0, 0x05480002a1b920a0, 0x054af800f1bbc0a0, 0x054c000271bcb0a0, + 0x054e780059bf20a0, 0x054ef00109bf78a0, 0x05500001b9c080a0, 0x0552000071c238a0, + 0x0552800051c2a8a0, 0x0552e00339c2f8a0, 0x0556d800e1c630a0, 0x0558080031c710a0, + 0x0558480031c740a0, 0x0558880031c770a0, 0x0559000039c7a0a0, 0x0559400039c7d8a0, + 0x05598001b1c810a0, 0x055b8003f1c9c0a0, 0x055f800051cdb0a0, 0x0560015d2004b230, + 0x06bd8000b9ce00a0, 0x06be580189ceb8a0, 0x06c0001c0005b410, 0x06dc000400081390, + 0x06e00020000539f0, 0x070000c80008f1b0, 0x07c8000b71d040a0, 0x07d3800351dbb0a0, + // Entry 160 - 17F + 0x07d8000039df00a0, 0x07d8980029df38a0, 0x07d8e800d1df60a0, 0x07d9c00029e030a0, + 0x07d9f00009e058a0, 0x07da000011e060a0, 0x07da180011e070a0, 0x07da3003e1e080a0, + 0x07de9805a1e460a0, 0x07e43805c9ea00c0, 0x07ea800201efc8c0, 0x07ec9001b1f1c8c0, + 0x07ef800071f378c0, 0x07f00000d1f3e8c0, 0x07f1000199f4b8c0, 0x07f2a00099f650c0, + 0x07f3400021f6e8c0, 0x07f3800029f708c0, 0x07f3b00439f730c0, 0x07f7f80009fb68c0, + 0x07f80805f1fb70c0, 0x07fe1000320160c0, 0x07fe5000320190c0, 0x07fe90003201c0c0, + 0x07fed0001a01f0c0, 0x07ff00003a0208c0, 0x07ff40003a0240c0, 0x07ffc8002a0278c0, + 0x080000006202a0c0, 0x08006800d20300c0, 0x080140009a03d0c0, 0x0801e000120468c0, + // Entry 180 - 19F + 0x0801f8007a0478c0, 0x080280007204f0c0, 0x08040003da0560c0, 0x080800001a0938c0, + 0x080838016a0950c0, 0x0809b802c20ab8c0, 0x080c8000620d78c0, 0x080d00000a0dd8c0, + 0x080e8001720de0c0, 0x08140000ea0f50c0, 0x081500018a1038c0, 0x08170000e211c0c0, + 0x081800012212a0c0, 0x08198000da13c0c0, 0x081a80015a1498c0, 0x081c0000f215f0c0, + 0x081cf8012a16e0c0, 0x081e4000721808c0, 0x08200004f21878c0, 0x08250000521d68c0, + 0x08258001221db8c0, 0x0826c001221ed8c0, 0x08280001421ff8c0, 0x08298001a22138c0, + 0x082b78000a22d8c0, 0x08300009ba22e0c0, 0x083a0000b22c98c0, 0x083b0000422d48c0, + 0x08400000322d88c0, 0x084040000a2db8c0, 0x08405001622dc0c0, 0x0841b800122f20c0, + // Entry 1A0 - 1BF + 0x0841e0000a2f30c0, 0x0841f800ba2f38c0, 0x0842b802422ff0c0, 0x084538004a3230c0, + 0x084700009a3278c0, 0x0847a000123310c0, 0x0847d8010a3320c0, 0x0848f800da3428c0, + 0x0849f8000a3500c0, 0x084c0001523508c0, 0x084d5000723658e0, 0x084de000a236c8e0, + 0x084e9001923768e0, 0x085028001238f8e0, 0x08506000423908e0, 0x0850a8001a3948e0, + 0x0850c800da3960e0, 0x0851c0001a3a38e0, 0x0851f8004a3a50e0, 0x085280004a3a98e0, + 0x08530002023ae0e0, 0x085600013a3ce0e0, 0x08575800623e18e0, 0x08580001b23e78e0, + 0x0859c800ea4028e0, 0x085ac000da4110e0, 0x085bc000d241e8e0, 0x085cc8002242b8e0, + 0x085d48003a42d8e0, 0x086000024a4310e0, 0x086400019a4558e0, 0x086600019a46f0e0, + // Entry 1C0 - 1DF + 0x0867d000324888e0, 0x08730000fa48b8e0, 0x088000027249b0e0, 0x08829000f24c20e0, + 0x0883f8021a4d10e0, 0x08868000ca4f28e0, 0x08878000524ff0e0, 0x08880001aa5040e0, + 0x0889b0007251e8e0, 0x088a80013a5258e0, 0x088c0002725390e0, 0x088e8000825600e0, + 0x088f0800a25680e0, 0x08900000925720e0, 0x089098016257b0e0, 0x089400003a5910e0, + 0x089440000a5948e0, 0x08945000225950e0, 0x089478007a5970e0, 0x0894f8005a59e8e0, + 0x08958001da5a40e0, 0x08978000525c18e0, 0x08980000225c68e0, 0x08982800425c88e0, + 0x08987800125cc8e0, 0x08989800b25cd8e0, 0x089950003a5d88e0, 0x08999000125dc0e0, + 0x0899a8002a5dd0e0, 0x0899e0004a5df8e0, 0x089a3800125e40e0, 0x089a58001a5e50e0, + // Entry 1E0 - 1FF + 0x089a80000a5e68e0, 0x089ab8000a5e70e0, 0x089ae8003a5e78e0, 0x089b30003a5eb0e0, + 0x089b80002a5ee8e0, 0x08a00002d25f10e0, 0x08a2d8000a61e0e0, 0x08a2e8000a61e8e0, + 0x08a400024261f0e0, 0x08a68000526430e0, 0x08ac0001b26480e0, 0x08adc001326630e0, + 0x08b000022a6760e0, 0x08b28000526988e0, 0x08b300006a69d8e0, 0x08b40001c26a40e0, + 0x08b60000526c00e0, 0x08b80000d26c50e0, 0x08b8e8007a6d20e0, 0x08b98000826d98e0, + 0x08c500029a6e18e0, 0x08c7f8000a70b0e0, 0x08d60001ca70b8e0, 0x08e000004a7280e0, + 0x08e050016a72c8e0, 0x08e1c000727430e0, 0x08e28000ea74a0e0, 0x08e38001027588e0, + 0x08e49000b27688e0, 0x08e54800727738e0, 0x090000155a77a8e0, 0x091558077a8d0100, + // Entry 200 - 21F + 0x092000037a947900, 0x092380002a97f100, 0x0924000622981900, 0x098000217a9e3900, + 0x0a2000123abfb100, 0x0b400009c2d1e900, 0x0b49c0080adba920, 0x0b520000fae3b120, + 0x0b53000052e4a920, 0x0b53700012e4f920, 0x0b568000f2e50920, 0x0b57800032e5f920, + 0x0b58000232e62920, 0x0b5a800052e85920, 0x0b5ad8003ae8a920, 0x0b5b1800aae8e120, + 0x0b5be8009ae98920, 0x0b7800022aea2120, 0x0b7a80017aec4920, 0x0b7c78008aedc120, + 0x0b7f00000aee4920, 0x0b8000bf68095a50, 0x0c4000179aee5120, 0x0d8000001305e920, + 0x0de000035b05f920, 0x0de380006b095120, 0x0de400004b09b920, 0x0de48000530a0120, + 0x0de4e000430a5120, 0x0e800007b30a9120, 0x0e8800013b124120, 0x0e89480603137920, + // Entry 220 - 23F + 0x0e90000233197920, 0x0e980002bb1ba920, 0x0e9b0000931e6120, 0x0ea00002ab1ef120, + 0x0ea2b0023b219920, 0x0ea4f0001323d120, 0x0ea510000b23e120, 0x0ea528001323e920, + 0x0ea548002323f920, 0x0ea5700063241920, 0x0ea5d8000b247920, 0x0ea5e8003b248120, + 0x0ea628020b24b920, 0x0ea838002326c120, 0x0ea868004326e120, 0x0ea8b0003b272120, + 0x0ea8f000e3275920, 0x0ea9d80023283920, 0x0eaa00002b285920, 0x0eaa30000b288120, + 0x0eaa50003b288920, 0x0eaa90023b28c120, 0x0eacc8086b2af940, 0x0eb5400923336140, + 0x0ebe7015f33c8140, 0x0ed4d8002b527140, 0x0ed508007b529940, 0x0f0000003b531140, + 0x0f0040008b534940, 0x0f00d8003b53d140, 0x0f01180013540940, 0x0f0130002b541940, + // Entry 240 - 25F + 0x0f4000062b544140, 0x0f463800835a6940, 0x0f4800025b5ae940, 0x0f4a8000535d4140, + 0x0f4af000135d9140, 0x0f700000235da140, 0x0f702800db5dc140, 0x0f710800135e9940, + 0x0f7120000b5ea940, 0x0f7138000b5eb140, 0x0f714800535eb940, 0x0f71a000235f0940, + 0x0f71c8000b5f2940, 0x0f71d8000b5f3140, 0x0f7210000b5f3940, 0x0f7238000b5f4140, + 0x0f7248000b5f4940, 0x0f7258000b5f5140, 0x0f7268001b5f5940, 0x0f728800135f7140, + 0x0f72a0000b5f8140, 0x0f72b8000b5f8940, 0x0f72c8000b5f9140, 0x0f72d8000b5f9940, + 0x0f72e8000b5fa140, 0x0f72f8000b5fa940, 0x0f730800135fb140, 0x0f7320000b5fc140, + 0x0f733800235fc940, 0x0f7360003b5fe940, 0x0f73a00023602140, 0x0f73c80023604140, + // Entry 260 - 27F + 0x0f73f0000b606140, 0x0f74000053606940, 0x0f7458008b60b940, 0x0f7508001b614140, + 0x0f7528002b615940, 0x0f7558008b618140, 0x0f77800013620940, 0x0f80000163621940, + 0x0f8180000b637940, 0x0f8188031b638160, 0x0f8500007b669960, 0x0f8588007b671160, + 0x0f8608007b678960, 0x0f8688012b680160, 0x0f8800006b692960, 0x0f888000fb699160, + 0x0f898001e36a8960, 0x0f8b8001eb6c6960, 0x0f8f3000eb6e5160, 0x0f908001636f3960, + 0x0f9200004b709960, 0x0f9280001370e160, 0x0f98001e9b70f160, 0x0fb700006b8f8960, + 0x0fb780003b8ff160, 0x0fb80003a3902960, 0x0fbc0002ab93c960, 0x0fc0000063967160, + 0x0fc08001c396d160, 0x0fc2800053989160, 0x0fc300014398e160, 0x0fc48000f39a2160, + // Entry 280 - 29F + 0x0fc880007b9b1160, 0x0fc90000439b8960, 0x0fc980000b9bc960, 0x0fc99800639bd160, + 0x0fca0000639c3160, 0x0fca80007b9c9160, 0x0fcc0000939d0960, 0x0fce00000b9d9960, + 0x10000536b800db70, 0x15380081a801b370, 0x15ba0006f0028b70, 0x15c100b410036370, + 0x17c00010f39da160, 0x700008000bae9160, 0x7001000303ae9960, 0x7008000653b19960, + 0x700e500133b7e980, 0x780007fff006b2d0, 0x800007fff00762d0, +} // Size: 5296 bytes + +var index = []uint16{ // 30500 elements + // Entry 0 - 3F + 0x0000, 0x0005, 0x0015, 0x0023, 0x002e, 0x0039, 0x0045, 0x004e, + 0x0058, 0x0068, 0x0079, 0x0081, 0x008a, 0x008f, 0x009b, 0x00a4, + 0x00ab, 0x00b5, 0x00be, 0x00c7, 0x00d2, 0x00dc, 0x00e6, 0x00ef, + 0x00fa, 0x0105, 0x010f, 0x0114, 0x011d, 0x012b, 0x0136, 0x0147, + 0x0154, 0x0161, 0x0177, 0x018d, 0x01a3, 0x01b9, 0x01cf, 0x01e5, + 0x01fb, 0x0211, 0x0227, 0x023d, 0x0253, 0x0269, 0x027f, 0x0295, + 0x02ab, 0x02c1, 0x02d7, 0x02ed, 0x0303, 0x0319, 0x032f, 0x0345, + 0x035b, 0x0371, 0x0387, 0x039d, 0x03b0, 0x03bf, 0x03d3, 0x03e4, + // Entry 40 - 7F + 0x03ec, 0x03f8, 0x040c, 0x0420, 0x0434, 0x0448, 0x045c, 0x0470, + 0x0484, 0x0498, 0x04ac, 0x04c0, 0x04d4, 0x04e8, 0x04fc, 0x0510, + 0x0524, 0x0538, 0x054c, 0x0560, 0x0574, 0x0588, 0x059c, 0x05b0, + 0x05c4, 0x05d8, 0x05ec, 0x0600, 0x0612, 0x061f, 0x0632, 0x0637, + 0x0645, 0x065e, 0x0667, 0x0671, 0x067e, 0x0686, 0x0690, 0x069c, + 0x06a5, 0x06b3, 0x06cd, 0x06f6, 0x06fe, 0x0709, 0x0718, 0x071e, + 0x0729, 0x0738, 0x0747, 0x0758, 0x0764, 0x076e, 0x077a, 0x0784, + 0x078b, 0x079a, 0x07b5, 0x07df, 0x07fa, 0x0812, 0x0830, 0x0846, + // Entry 80 - BF + 0x0867, 0x0888, 0x08ae, 0x08cf, 0x08f4, 0x091a, 0x0931, 0x0954, + 0x0975, 0x0996, 0x09bc, 0x09e1, 0x0a02, 0x0a23, 0x0a49, 0x0a6e, + 0x0a86, 0x0aa7, 0x0ac8, 0x0ae9, 0x0b0f, 0x0b30, 0x0b55, 0x0b68, + 0x0b8a, 0x0bab, 0x0bcc, 0x0bf2, 0x0c17, 0x0c38, 0x0c52, 0x0c6c, + 0x0c8b, 0x0caa, 0x0cce, 0x0ced, 0x0d10, 0x0d34, 0x0d49, 0x0d6a, + 0x0d89, 0x0da8, 0x0dcc, 0x0def, 0x0e0e, 0x0e2d, 0x0e51, 0x0e74, + 0x0e8a, 0x0ea9, 0x0ec8, 0x0ee7, 0x0f0b, 0x0f2a, 0x0f4d, 0x0f5a, + 0x0f7a, 0x0f99, 0x0fb8, 0x0fdc, 0x0fff, 0x101e, 0x1036, 0x1059, + // Entry C0 - FF + 0x107b, 0x109b, 0x10bc, 0x10db, 0x10fd, 0x111d, 0x113e, 0x115d, + 0x1183, 0x11a7, 0x11cc, 0x11ef, 0x1210, 0x122f, 0x1250, 0x126f, + 0x1291, 0x12b1, 0x12d3, 0x12f3, 0x1314, 0x1333, 0x1358, 0x137b, + 0x139d, 0x13bd, 0x13de, 0x13fd, 0x1423, 0x1447, 0x1468, 0x1487, + 0x14ac, 0x14cf, 0x14f2, 0x1513, 0x1539, 0x155d, 0x157f, 0x159f, + 0x15c0, 0x15df, 0x1601, 0x1621, 0x1642, 0x1661, 0x1683, 0x16a3, + 0x16c8, 0x16e4, 0x16fd, 0x1714, 0x173a, 0x175e, 0x1781, 0x17a2, + 0x17b8, 0x17d9, 0x17f8, 0x181b, 0x183c, 0x185d, 0x187c, 0x18a2, + // Entry 100 - 13F + 0x18c6, 0x18e8, 0x1908, 0x1929, 0x1948, 0x196b, 0x198c, 0x19ad, + 0x19cc, 0x19f7, 0x1a0f, 0x1a25, 0x1a47, 0x1a67, 0x1a88, 0x1aa7, + 0x1acf, 0x1af5, 0x1b0e, 0x1b25, 0x1b46, 0x1b65, 0x1b88, 0x1ba9, + 0x1bca, 0x1be9, 0x1c0a, 0x1c29, 0x1c4f, 0x1c73, 0x1c96, 0x1cb7, + 0x1cd8, 0x1cf7, 0x1d1a, 0x1d3b, 0x1d5c, 0x1d7b, 0x1d9d, 0x1dbd, + 0x1dde, 0x1dfd, 0x1e1f, 0x1e3f, 0x1e60, 0x1e7f, 0x1ea5, 0x1ec9, + 0x1ef1, 0x1f17, 0x1f39, 0x1f59, 0x1f7f, 0x1fa3, 0x1fc9, 0x1fed, + 0x2012, 0x2033, 0x2052, 0x2077, 0x209a, 0x20bb, 0x20da, 0x20f3, + // Entry 140 - 17F + 0x2113, 0x2133, 0x2155, 0x2175, 0x2192, 0x21ad, 0x21c8, 0x21e8, + 0x2206, 0x2224, 0x2244, 0x2266, 0x2286, 0x22a5, 0x22c4, 0x22de, + 0x22f9, 0x2319, 0x2337, 0x2357, 0x2371, 0x2386, 0x239f, 0x23c1, + 0x23e1, 0x23ff, 0x241c, 0x2441, 0x245e, 0x2483, 0x24ab, 0x24d3, + 0x24f3, 0x2511, 0x2528, 0x253d, 0x255d, 0x257b, 0x258a, 0x25a7, + 0x25c2, 0x25da, 0x25f8, 0x261e, 0x263e, 0x265c, 0x2686, 0x26a6, + 0x26c4, 0x26e0, 0x2700, 0x2720, 0x273e, 0x2760, 0x2780, 0x2798, + 0x27b9, 0x27d8, 0x27f8, 0x2814, 0x2832, 0x284e, 0x287c, 0x288d, + // Entry 180 - 1BF + 0x28a6, 0x28c0, 0x28db, 0x28f7, 0x2919, 0x294e, 0x296e, 0x2985, + 0x29af, 0x29c4, 0x29db, 0x2a05, 0x2a1a, 0x2a3b, 0x2a5a, 0x2a7b, + 0x2a9a, 0x2abb, 0x2ada, 0x2afb, 0x2b1a, 0x2b4a, 0x2b78, 0x2ba7, + 0x2bd4, 0x2c03, 0x2c30, 0x2c5f, 0x2c8c, 0x2ca7, 0x2cd7, 0x2d05, + 0x2d35, 0x2d63, 0x2d86, 0x2da7, 0x2dc9, 0x2de9, 0x2e0a, 0x2e29, + 0x2e4a, 0x2e69, 0x2e8b, 0x2eab, 0x2ed8, 0x2f03, 0x2f26, 0x2f47, + 0x2f66, 0x2f7d, 0x2fa7, 0x2fbc, 0x2fdd, 0x2ffc, 0x3016, 0x302f, + 0x3050, 0x306f, 0x309f, 0x30cd, 0x30ef, 0x310f, 0x313b, 0x3165, + // Entry 1C0 - 1FF + 0x318d, 0x31b3, 0x31dd, 0x3205, 0x322d, 0x3253, 0x327d, 0x32a5, + 0x32cd, 0x32f3, 0x331d, 0x3345, 0x336d, 0x3393, 0x33bd, 0x33e5, + 0x340d, 0x3433, 0x345d, 0x3485, 0x34ad, 0x34d3, 0x34fd, 0x3525, + 0x354c, 0x3571, 0x3598, 0x35bd, 0x35d6, 0x35ed, 0x360e, 0x362d, + 0x3657, 0x3675, 0x368c, 0x36a1, 0x36c1, 0x36df, 0x3704, 0x3727, + 0x374a, 0x376b, 0x379b, 0x37c9, 0x37f5, 0x381f, 0x3844, 0x3867, + 0x3897, 0x38c5, 0x38e7, 0x3907, 0x3925, 0x3943, 0x3961, 0x397d, + 0x399a, 0x39b7, 0x39d9, 0x39fb, 0x3a1b, 0x3a3a, 0x3a65, 0x3a89, + // Entry 200 - 23F + 0x3aad, 0x3ace, 0x3aed, 0x3b0f, 0x3b29, 0x3b46, 0x3b68, 0x3b88, + 0x3baa, 0x3bca, 0x3bf5, 0x3c18, 0x3c3a, 0x3c5a, 0x3c7c, 0x3c9c, + 0x3cb7, 0x3ccf, 0x3cee, 0x3d0c, 0x3d25, 0x3d43, 0x3d61, 0x3d7f, + 0x3d9c, 0x3db4, 0x3dd6, 0x3def, 0x3e11, 0x3e3d, 0x3e66, 0x3e8e, + 0x3eac, 0x3ec7, 0x3ee3, 0x3efb, 0x3f17, 0x3f32, 0x3f50, 0x3f71, + 0x3f91, 0x3fa8, 0x3fc4, 0x3fea, 0x4008, 0x4030, 0x4047, 0x4062, + 0x408b, 0x40a9, 0x40cc, 0x40f4, 0x4110, 0x412b, 0x4148, 0x4167, + 0x417d, 0x4198, 0x41c1, 0x41e6, 0x4208, 0x4226, 0x4248, 0x4273, + // Entry 240 - 27F + 0x428f, 0x42b4, 0x42d2, 0x42e8, 0x4319, 0x433e, 0x435e, 0x4379, + 0x43a1, 0x43b9, 0x43d3, 0x43f1, 0x440c, 0x4427, 0x4442, 0x445e, + 0x4486, 0x44a4, 0x44ba, 0x44da, 0x44f3, 0x451b, 0x453d, 0x4555, + 0x4570, 0x458c, 0x45ac, 0x45d2, 0x45ee, 0x4614, 0x462f, 0x464b, + 0x4669, 0x468e, 0x46bc, 0x46d9, 0x46f8, 0x471f, 0x473c, 0x475b, + 0x4782, 0x47a1, 0x47be, 0x47db, 0x47fb, 0x481b, 0x4844, 0x4876, + 0x488d, 0x48ae, 0x48c5, 0x48dc, 0x48fa, 0x4922, 0x494a, 0x4961, + 0x4978, 0x498d, 0x49a9, 0x49c5, 0x49df, 0x49fd, 0x4a1c, 0x4a3a, + // Entry 280 - 2BF + 0x4a56, 0x4a7b, 0x4a99, 0x4ab8, 0x4ad4, 0x4af2, 0x4b13, 0x4b18, + 0x4b35, 0x4b4b, 0x4b67, 0x4b83, 0x4ba4, 0x4bbe, 0x4bde, 0x4bfe, + 0x4c1e, 0x4c43, 0x4c6a, 0x4c90, 0x4ca7, 0x4cc0, 0x4cd9, 0x4cf3, + 0x4cf8, 0x4d01, 0x4d0b, 0x4d11, 0x4d1c, 0x4d2f, 0x4d4a, 0x4d66, + 0x4d81, 0x4d98, 0x4daf, 0x4dc6, 0x4df1, 0x4e14, 0x4e31, 0x4e4d, + 0x4e69, 0x4e8b, 0x4eb2, 0x4eda, 0x4ef1, 0x4f0c, 0x4f2d, 0x4f4f, + 0x4f6f, 0x4f91, 0x4fb4, 0x4fcc, 0x4fef, 0x5019, 0x5043, 0x505c, + 0x5078, 0x5097, 0x50b4, 0x50d2, 0x50ee, 0x5103, 0x511d, 0x513b, + // Entry 2C0 - 2FF + 0x5151, 0x5167, 0x5182, 0x5191, 0x51a1, 0x51b3, 0x51c2, 0x51d5, + 0x51e8, 0x51fc, 0x5210, 0x522d, 0x523c, 0x5259, 0x527d, 0x529a, + 0x52af, 0x52c7, 0x52e3, 0x52f8, 0x5316, 0x5331, 0x534d, 0x5369, + 0x5382, 0x539c, 0x53b6, 0x53c4, 0x53e2, 0x53f9, 0x5412, 0x542b, + 0x5445, 0x5465, 0x5483, 0x5496, 0x54af, 0x54c3, 0x54d8, 0x54e9, + 0x54f9, 0x5516, 0x552c, 0x5550, 0x5565, 0x5586, 0x559b, 0x55b9, + 0x55ce, 0x55e4, 0x55f6, 0x560f, 0x5626, 0x5644, 0x5661, 0x5680, + 0x569e, 0x56bd, 0x56dc, 0x56f2, 0x5709, 0x571a, 0x5732, 0x574b, + // Entry 300 - 33F + 0x5764, 0x577d, 0x5798, 0x57af, 0x57ce, 0x57eb, 0x5801, 0x581c, + 0x5840, 0x585a, 0x5873, 0x588d, 0x58ac, 0x58cc, 0x58e9, 0x5902, + 0x5921, 0x593f, 0x5950, 0x5961, 0x597f, 0x599e, 0x59ce, 0x59ed, + 0x5a06, 0x5a1e, 0x5a39, 0x5a4f, 0x5a6b, 0x5a81, 0x5a98, 0x5ab5, + 0x5acb, 0x5aea, 0x5b11, 0x5b2f, 0x5b4d, 0x5b6b, 0x5b89, 0x5ba7, + 0x5bc5, 0x5be3, 0x5c01, 0x5c1f, 0x5c3d, 0x5c5b, 0x5c79, 0x5c97, + 0x5cb0, 0x5cc7, 0x5ce9, 0x5d09, 0x5d1b, 0x5d33, 0x5d5a, 0x5d7f, + 0x5d92, 0x5dba, 0x5de0, 0x5e0f, 0x5e22, 0x5e3a, 0x5e45, 0x5e5a, + // Entry 340 - 37F + 0x5e7f, 0x5e8f, 0x5eb6, 0x5ed9, 0x5efd, 0x5f24, 0x5f4b, 0x5f70, + 0x5fa0, 0x5fba, 0x5fd3, 0x5fed, 0x6007, 0x6023, 0x603c, 0x6054, + 0x606e, 0x6087, 0x60a1, 0x60bb, 0x60d2, 0x60e9, 0x6100, 0x611c, + 0x6133, 0x614b, 0x6165, 0x617d, 0x6199, 0x61b1, 0x61c9, 0x61e1, + 0x61fb, 0x6223, 0x624e, 0x6271, 0x6296, 0x62b7, 0x62d9, 0x630c, + 0x6324, 0x633b, 0x6353, 0x636b, 0x6385, 0x639c, 0x63b2, 0x63ca, + 0x63e1, 0x63f9, 0x6411, 0x6426, 0x643b, 0x6450, 0x646a, 0x647f, + 0x6495, 0x64b3, 0x64cb, 0x64e1, 0x64fb, 0x6511, 0x6527, 0x653d, + // Entry 380 - 3BF + 0x6555, 0x657b, 0x65a4, 0x65c9, 0x65ee, 0x6611, 0x6629, 0x663a, + 0x664c, 0x666a, 0x6692, 0x66be, 0x66ce, 0x66dd, 0x66ed, 0x6707, + 0x6727, 0x673a, 0x6753, 0x6767, 0x6781, 0x6793, 0x67ab, 0x67bd, + 0x67d5, 0x67ef, 0x6807, 0x6820, 0x6837, 0x6851, 0x6869, 0x6883, + 0x689b, 0x68b7, 0x68d1, 0x68ec, 0x6905, 0x691e, 0x6935, 0x6947, + 0x6957, 0x6970, 0x6980, 0x699a, 0x69b5, 0x69d9, 0x69f1, 0x6a07, + 0x6a28, 0x6a40, 0x6a56, 0x6a72, 0x6a9c, 0x6ac4, 0x6af5, 0x6b1a, + 0x6b34, 0x6b4f, 0x6b6a, 0x6b8e, 0x6ba9, 0x6bd9, 0x6bf3, 0x6c0d, + // Entry 3C0 - 3FF + 0x6c28, 0x6c43, 0x6c5f, 0x6c7a, 0x6c9e, 0x6cbd, 0x6cd9, 0x6cf2, + 0x6d0c, 0x6d26, 0x6d41, 0x6d5b, 0x6d75, 0x6d90, 0x6daa, 0x6dc3, + 0x6de2, 0x6dfc, 0x6e16, 0x6e30, 0x6e4a, 0x6e63, 0x6e7d, 0x6e97, + 0x6eb1, 0x6ecb, 0x6ee4, 0x6efe, 0x6f18, 0x6f33, 0x6f4e, 0x6f69, + 0x6f86, 0x6fa7, 0x6fc3, 0x6fe4, 0x6ffd, 0x7017, 0x7031, 0x7048, + 0x7060, 0x7078, 0x7091, 0x70a9, 0x70c1, 0x70da, 0x70f2, 0x7109, + 0x7126, 0x713e, 0x7156, 0x716e, 0x7186, 0x719d, 0x71b5, 0x71cd, + 0x71e5, 0x71fd, 0x7214, 0x722c, 0x7244, 0x725d, 0x7276, 0x728f, + // Entry 400 - 43F + 0x72aa, 0x72c9, 0x72e3, 0x7302, 0x7319, 0x7331, 0x7349, 0x736c, + 0x7384, 0x739d, 0x73b6, 0x73d8, 0x73f1, 0x741f, 0x7437, 0x744f, + 0x7468, 0x7481, 0x749b, 0x74b4, 0x74d6, 0x74f3, 0x750d, 0x752a, + 0x7545, 0x7560, 0x7579, 0x759b, 0x75bb, 0x75dd, 0x75fd, 0x7628, + 0x7651, 0x7670, 0x768d, 0x76b5, 0x76db, 0x76f6, 0x770f, 0x772a, + 0x7743, 0x775f, 0x7779, 0x7798, 0x77b5, 0x77ed, 0x7823, 0x783d, + 0x7855, 0x7878, 0x7899, 0x78c1, 0x78e7, 0x7901, 0x7919, 0x7936, + 0x7951, 0x7968, 0x7980, 0x79a1, 0x79c2, 0x79e3, 0x79fe, 0x7a27, + // Entry 440 - 47F + 0x7a47, 0x7a70, 0x7a97, 0x7abc, 0x7adf, 0x7b03, 0x7b25, 0x7b4c, + 0x7b71, 0x7b98, 0x7bbd, 0x7be9, 0x7c13, 0x7c3d, 0x7c65, 0x7c8e, + 0x7cb5, 0x7cde, 0x7d05, 0x7d34, 0x7d61, 0x7d87, 0x7dab, 0x7dcd, + 0x7ded, 0x7e16, 0x7e3d, 0x7e5d, 0x7e7b, 0x7ea6, 0x7ecf, 0x7ef3, + 0x7f15, 0x7f3e, 0x7f65, 0x7f8e, 0x7fb5, 0x7fd7, 0x7ff7, 0x8025, + 0x8051, 0x807a, 0x80a1, 0x80c1, 0x80df, 0x8109, 0x8131, 0x8161, + 0x818f, 0x81ab, 0x81c5, 0x81ea, 0x820d, 0x8241, 0x8273, 0x828b, + 0x82b1, 0x82d5, 0x82f9, 0x831b, 0x833f, 0x8361, 0x8385, 0x83a7, + // Entry 480 - 4BF + 0x83cb, 0x83ed, 0x8413, 0x8437, 0x845b, 0x847d, 0x849b, 0x84bf, + 0x84e1, 0x8509, 0x852f, 0x854d, 0x8569, 0x858e, 0x85b1, 0x85ce, + 0x85e9, 0x8615, 0x863f, 0x8669, 0x8691, 0x86ba, 0x86e1, 0x8706, + 0x8729, 0x874e, 0x8771, 0x8799, 0x87bf, 0x87e7, 0x880d, 0x882d, + 0x884b, 0x887a, 0x88a7, 0x88cf, 0x88f5, 0x891a, 0x893d, 0x8965, + 0x898b, 0x89b6, 0x89df, 0x8a09, 0x8a31, 0x8a5b, 0x8a83, 0x8aae, + 0x8ad7, 0x8b07, 0x8b35, 0x8b59, 0x8b7b, 0x8ba1, 0x8bc5, 0x8be4, + 0x8c01, 0x8c21, 0x8c3f, 0x8c5f, 0x8c7d, 0x8c9e, 0x8cbd, 0x8cdd, + // Entry 4C0 - 4FF + 0x8cfb, 0x8d1b, 0x8d39, 0x8d59, 0x8d77, 0x8d97, 0x8db5, 0x8dd8, + 0x8df9, 0x8e1d, 0x8e3f, 0x8e5a, 0x8e73, 0x8e8e, 0x8ea7, 0x8ec2, + 0x8edb, 0x8ef5, 0x8f0d, 0x8f27, 0x8f3f, 0x8f5f, 0x8f7d, 0x8fa8, + 0x8fd1, 0x8ffc, 0x9025, 0x904e, 0x9075, 0x90a0, 0x90c9, 0x90f2, + 0x9119, 0x9136, 0x9151, 0x916d, 0x9187, 0x91b0, 0x91d7, 0x91f2, + 0x920d, 0x9228, 0x9242, 0x925d, 0x9277, 0x9291, 0x92ab, 0x92c5, + 0x92e0, 0x92fb, 0x9317, 0x9332, 0x934c, 0x9367, 0x9381, 0x939b, + 0x93b7, 0x93d3, 0x93ee, 0x9408, 0x9423, 0x943e, 0x9458, 0x9473, + // Entry 500 - 53F + 0x948e, 0x94aa, 0x94c4, 0x94df, 0x94fa, 0x9516, 0x9531, 0x954b, + 0x9567, 0x9583, 0x959e, 0x95b8, 0x95d3, 0x95fa, 0x960d, 0x9623, + 0x963c, 0x964a, 0x9660, 0x967a, 0x9693, 0x96ac, 0x96c5, 0x96dd, + 0x96f6, 0x970e, 0x9726, 0x973e, 0x9756, 0x976f, 0x9788, 0x97a2, + 0x97bb, 0x97d3, 0x97ec, 0x9804, 0x981c, 0x9836, 0x9850, 0x9869, + 0x9881, 0x989a, 0x98b3, 0x98cb, 0x98e4, 0x98fd, 0x9917, 0x992f, + 0x9948, 0x9961, 0x997b, 0x9994, 0x99ac, 0x99c6, 0x99e0, 0x99f9, + 0x9a11, 0x9a2a, 0x9a4a, 0x9a5c, 0x9a6b, 0x9a8e, 0x9ab0, 0x9ac2, + // Entry 540 - 57F + 0x9ad7, 0x9aea, 0x9b02, 0x9b1b, 0x9b34, 0x9b48, 0x9b5b, 0x9b6e, + 0x9b82, 0x9b95, 0x9ba8, 0x9bbc, 0x9bd7, 0x9bee, 0x9c07, 0x9c23, + 0x9c36, 0x9c50, 0x9c63, 0x9c79, 0x9c8d, 0x9ca8, 0x9cbb, 0x9cce, + 0x9cea, 0x9d06, 0x9d17, 0x9d29, 0x9d3b, 0x9d4e, 0x9d67, 0x9d79, + 0x9d91, 0x9da9, 0x9dc2, 0x9dd4, 0x9de6, 0x9df8, 0x9e0a, 0x9e1d, + 0x9e2f, 0x9e4f, 0x9e62, 0x9e7e, 0x9e90, 0x9ea8, 0x9eb9, 0x9ed1, + 0x9ee6, 0x9efa, 0x9f16, 0x9f2b, 0x9f40, 0x9f5e, 0x9f77, 0x9f89, + 0x9f9a, 0x9fad, 0x9fc0, 0x9fd0, 0x9fe1, 0x9ff4, 0xa005, 0xa016, + // Entry 580 - 5BF + 0xa027, 0xa03e, 0xa04f, 0xa062, 0xa079, 0xa08a, 0xa0a1, 0xa0b2, + 0xa0c6, 0xa0d8, 0xa0ee, 0xa0fe, 0xa117, 0xa12a, 0xa13b, 0xa14d, + 0xa15f, 0xa170, 0xa192, 0xa1b1, 0xa1d3, 0xa1ec, 0xa208, 0xa21a, + 0xa22b, 0xa241, 0xa252, 0xa264, 0xa27c, 0xa292, 0xa2aa, 0xa2b4, + 0xa2cf, 0xa2f1, 0xa2fd, 0xa309, 0xa31e, 0xa336, 0xa347, 0xa36f, + 0xa38a, 0xa3a8, 0xa3c5, 0xa3da, 0xa3ef, 0xa420, 0xa436, 0xa448, + 0xa45a, 0xa46c, 0xa47c, 0xa48e, 0xa4b0, 0xa4c4, 0xa4de, 0xa4f1, + 0xa514, 0xa537, 0xa559, 0xa57c, 0xa59e, 0xa5b0, 0xa5c1, 0xa5da, + // Entry 5C0 - 5FF + 0xa5eb, 0xa5fd, 0xa60f, 0xa620, 0xa632, 0xa643, 0xa655, 0xa666, + 0xa678, 0xa68a, 0xa69d, 0xa6ae, 0xa6bf, 0xa6d0, 0xa6e1, 0xa6f2, + 0xa705, 0xa72c, 0xa755, 0xa77c, 0xa7a7, 0xa7d4, 0xa7e2, 0xa7f3, + 0xa804, 0xa815, 0xa826, 0xa838, 0xa84a, 0xa85b, 0xa86c, 0xa886, + 0xa897, 0xa8a6, 0xa8b5, 0xa8c4, 0xa8d0, 0xa8dc, 0xa8e8, 0xa8f5, + 0xa901, 0xa914, 0xa926, 0xa938, 0xa94d, 0xa962, 0xa979, 0xa988, + 0xa9a7, 0xa9cf, 0xa9ea, 0xa9ff, 0xaa19, 0xaa30, 0xaa47, 0xaa5d, + 0xaa73, 0xaa8b, 0xaaa2, 0xaab9, 0xaacf, 0xaae7, 0xaaff, 0xab16, + // Entry 600 - 63F + 0xab29, 0xab41, 0xab5b, 0xab73, 0xab8c, 0xaba5, 0xabc3, 0xabdb, + 0xac03, 0xac2b, 0xac43, 0xac60, 0xac7c, 0xac9c, 0xacb8, 0xacca, + 0xacde, 0xacf0, 0xad0b, 0xad3c, 0xad4d, 0xad60, 0xad73, 0xad95, + 0xadc3, 0xadd5, 0xade7, 0xae0e, 0xae21, 0xae36, 0xae48, 0xae63, + 0xae83, 0xaeb1, 0xaec4, 0xaed8, 0xaee9, 0xaf1a, 0xaf40, 0xaf52, + 0xaf70, 0xaf8b, 0xafab, 0xafcf, 0xaffd, 0xb022, 0xb033, 0xb059, + 0xb088, 0xb0b0, 0xb0ed, 0xb112, 0xb139, 0xb160, 0xb187, 0xb1a0, + 0xb1c6, 0xb1e6, 0xb1f7, 0xb21e, 0xb231, 0xb251, 0xb278, 0xb28b, + // Entry 640 - 67F + 0xb2a2, 0xb2bd, 0xb2dd, 0xb2ed, 0xb314, 0xb325, 0xb340, 0xb353, + 0xb378, 0xb38a, 0xb3b1, 0xb3cf, 0xb3ef, 0xb416, 0xb43d, 0xb45e, + 0xb477, 0xb48a, 0xb4a6, 0xb4ce, 0xb4eb, 0xb50d, 0xb52d, 0xb543, + 0xb56a, 0xb588, 0xb5a3, 0xb5bb, 0xb5cb, 0xb5da, 0xb5ea, 0xb602, + 0xb627, 0xb637, 0xb64e, 0xb669, 0xb687, 0xb6a7, 0xb6b6, 0xb6dd, + 0xb6f5, 0xb71e, 0xb72e, 0xb73e, 0xb777, 0xb7b0, 0xb7d3, 0xb7ed, + 0xb803, 0xb81f, 0xb835, 0xb847, 0xb862, 0xb880, 0xb8aa, 0xb8d0, + 0xb8f4, 0xb909, 0xb920, 0xb930, 0xb940, 0xb955, 0xb96b, 0xb981, + // Entry 680 - 6BF + 0xb99d, 0xb9ba, 0xb9e5, 0xb9fa, 0xba1b, 0xba3c, 0xba5c, 0xba7b, + 0xba9a, 0xbabb, 0xbadb, 0xbafb, 0xbb1a, 0xbb3b, 0xbb5c, 0xbb7c, + 0xbb9e, 0xbbbe, 0xbbe0, 0xbbfc, 0xbc1f, 0xbc40, 0xbc57, 0xbc73, + 0xbc8d, 0xbca5, 0xbcbb, 0xbcd2, 0xbcea, 0xbd03, 0xbd27, 0xbd4a, + 0xbd5c, 0xbd72, 0xbd8b, 0xbda5, 0xbdbd, 0xbdd0, 0xbdef, 0xbe01, + 0xbe14, 0xbe30, 0xbe44, 0xbe65, 0xbe75, 0xbe86, 0xbe98, 0xbeaa, + 0xbebc, 0xbed7, 0xbee9, 0xbefe, 0xbf10, 0xbf24, 0xbf35, 0xbf46, + 0xbf5b, 0xbf76, 0xbf85, 0xbf95, 0xbfae, 0xbfc1, 0xbfd3, 0xbfe5, + // Entry 6C0 - 6FF + 0xbff7, 0xc008, 0xc023, 0xc03f, 0xc05c, 0xc06f, 0xc082, 0xc096, + 0xc0a9, 0xc0bc, 0xc0d0, 0xc0e2, 0xc0f4, 0xc112, 0xc12d, 0xc13f, + 0xc151, 0xc16a, 0xc17c, 0xc18e, 0xc19a, 0xc1ad, 0xc1bd, 0xc1cc, + 0xc1ea, 0xc208, 0xc21f, 0xc236, 0xc24f, 0xc268, 0xc274, 0xc282, + 0xc29d, 0xc2b8, 0xc2d0, 0xc304, 0xc339, 0xc371, 0xc3bc, 0xc3ef, + 0xc41c, 0xc43a, 0xc45f, 0xc497, 0xc4d5, 0xc502, 0xc51f, 0xc546, + 0xc56b, 0xc5a5, 0xc5d5, 0xc5fa, 0xc632, 0xc654, 0xc67d, 0xc6b7, + 0xc6d8, 0xc6f9, 0xc71f, 0xc740, 0xc75f, 0xc779, 0xc7a9, 0xc7cb, + // Entry 700 - 73F + 0xc7fc, 0xc830, 0xc86b, 0xc8a7, 0xc8e2, 0xc916, 0xc953, 0xc992, + 0xc9d4, 0xca18, 0xca5b, 0xca97, 0xcad5, 0xcb18, 0xcb5d, 0xcb9a, + 0xcbd8, 0xcbfa, 0xcc1f, 0xcc30, 0xcc47, 0xcc5a, 0xcc6b, 0xcc7c, + 0xcc93, 0xcca6, 0xccb9, 0xcccc, 0xccdf, 0xccf2, 0xcd06, 0xcd18, + 0xcd2b, 0xcd3e, 0xcd55, 0xcd68, 0xcd7e, 0xcd94, 0xcdaa, 0xcdbb, + 0xcdd1, 0xcde7, 0xcdfe, 0xce10, 0xce22, 0xce34, 0xce48, 0xce59, + 0xce6d, 0xce81, 0xce95, 0xcea5, 0xceb5, 0xcec7, 0xcedb, 0xceee, + 0xcf01, 0xcf0f, 0xcf1f, 0xcf2d, 0xcf3d, 0xcf4b, 0xcf5b, 0xcf69, + // Entry 740 - 77F + 0xcf79, 0xcf87, 0xcf97, 0xcfa3, 0xcfb4, 0xcfc2, 0xcfcf, 0xcfdc, + 0xcfeb, 0xcff9, 0xd007, 0xd014, 0xd023, 0xd032, 0xd040, 0xd04c, + 0xd059, 0xd065, 0xd071, 0xd07d, 0xd08a, 0xd096, 0xd0ab, 0xd0b7, + 0xd0c4, 0xd0d1, 0xd0de, 0xd0eb, 0xd0f9, 0xd106, 0xd113, 0xd121, + 0xd12e, 0xd13c, 0xd149, 0xd156, 0xd163, 0xd177, 0xd184, 0xd192, + 0xd19f, 0xd1ac, 0xd1b9, 0xd1c6, 0xd1db, 0xd1ed, 0xd200, 0xd212, + 0xd22f, 0xd24b, 0xd26a, 0xd28c, 0xd2a8, 0xd2c3, 0xd2e1, 0xd300, + 0xd31e, 0xd336, 0xd34d, 0xd361, 0xd376, 0xd37f, 0xd393, 0xd3a1, + // Entry 780 - 7BF + 0xd3b6, 0xd3ca, 0xd3e0, 0xd3f6, 0xd409, 0xd41d, 0xd431, 0xd444, + 0xd458, 0xd46c, 0xd481, 0xd497, 0xd4ab, 0xd4bf, 0xd4d7, 0xd4ea, + 0xd4fd, 0xd515, 0xd529, 0xd53e, 0xd553, 0xd568, 0xd579, 0xd58f, + 0xd5a7, 0xd5bc, 0xd5e4, 0xd601, 0xd61c, 0xd632, 0xd652, 0xd66e, + 0xd685, 0xd6a4, 0xd6bf, 0xd6d5, 0xd6f6, 0xd712, 0xd72d, 0xd743, + 0xd75e, 0xd779, 0xd78f, 0xd7a5, 0xd7bf, 0xd7d5, 0xd7f2, 0xd80e, + 0xd829, 0xd842, 0xd85e, 0xd87e, 0xd899, 0xd8bc, 0xd8d7, 0xd8f2, + 0xd90c, 0xd926, 0xd943, 0xd965, 0xd981, 0xd995, 0xd9a6, 0xd9b7, + // Entry 7C0 - 7FF + 0xd9c8, 0xd9d9, 0xd9ef, 0xda00, 0xda11, 0xda23, 0xda36, 0xda47, + 0xda58, 0xda69, 0xda7a, 0xda8b, 0xda9c, 0xdaad, 0xdabf, 0xdad0, + 0xdae1, 0xdaf3, 0xdb04, 0xdb1b, 0xdb2d, 0xdb3f, 0xdb57, 0xdb70, + 0xdb87, 0xdb9a, 0xdbbe, 0xdbe0, 0xdc06, 0xdc2b, 0xdc60, 0xdc80, + 0xdca1, 0xdcc9, 0xdcfe, 0xdd31, 0xdd4c, 0xdd6d, 0xdd87, 0xdd9d, + 0xddc4, 0xddeb, 0xde11, 0xde2b, 0xde53, 0xde7a, 0xde9a, 0xdec1, + 0xdee8, 0xdf0e, 0xdf35, 0xdf6f, 0xdf88, 0xdfa1, 0xdfbb, 0xdfd8, + 0xdfed, 0xe002, 0xe017, 0xe038, 0xe058, 0xe07b, 0xe09a, 0xe0b8, + // Entry 800 - 83F + 0xe0d4, 0xe0ee, 0xe10a, 0xe12b, 0xe147, 0xe162, 0xe17b, 0xe18d, + 0xe19f, 0xe1b1, 0xe1c6, 0xe1db, 0xe1f0, 0xe209, 0xe223, 0xe239, + 0xe252, 0xe26c, 0xe282, 0xe296, 0xe2aa, 0xe2be, 0xe2d3, 0xe2e9, + 0xe304, 0xe31f, 0xe33a, 0xe356, 0xe371, 0xe38d, 0xe3b0, 0xe3dc, + 0xe401, 0xe416, 0xe436, 0xe45a, 0xe475, 0xe48d, 0xe4a4, 0xe4bd, + 0xe4d0, 0xe4e4, 0xe4f7, 0xe50b, 0xe51e, 0xe532, 0xe54d, 0xe568, + 0xe582, 0xe59b, 0xe5ae, 0xe5c2, 0xe5dc, 0xe5f5, 0xe608, 0xe61c, + 0xe630, 0xe645, 0xe659, 0xe66e, 0xe683, 0xe697, 0xe6ac, 0xe6c0, + // Entry 840 - 87F + 0xe6d5, 0xe6ea, 0xe6ff, 0xe715, 0xe72a, 0xe740, 0xe755, 0xe769, + 0xe77e, 0xe792, 0xe7a7, 0xe7bb, 0xe7d1, 0xe7e5, 0xe7fa, 0xe80e, + 0xe823, 0xe837, 0xe84b, 0xe85f, 0xe874, 0xe888, 0xe89d, 0xe8b3, + 0xe8c7, 0xe8dc, 0xe8f1, 0xe905, 0xe919, 0xe931, 0xe94a, 0xe95f, + 0xe977, 0xe98f, 0xe9a6, 0xe9be, 0xe9d5, 0xe9ed, 0xea0c, 0xea2c, + 0xea4a, 0xea67, 0xea7e, 0xea96, 0xeab4, 0xead1, 0xeae8, 0xeb00, + 0xeb16, 0xeb3b, 0xeb53, 0xeb60, 0xeb7d, 0xeb9c, 0xebb3, 0xebca, + 0xebed, 0xec05, 0xec1e, 0xec32, 0xec48, 0xec5e, 0xec72, 0xec89, + // Entry 880 - 8BF + 0xec9e, 0xecb2, 0xecc7, 0xece3, 0xecff, 0xed1e, 0xed3e, 0xed4e, + 0xed65, 0xed7a, 0xed8e, 0xeda2, 0xedb8, 0xedcd, 0xede2, 0xedf6, + 0xee0c, 0xee22, 0xee37, 0xee53, 0xee73, 0xee8d, 0xeea1, 0xeeb6, + 0xeeca, 0xeede, 0xeef3, 0xef10, 0xef25, 0xef3f, 0xef54, 0xef69, + 0xef87, 0xef9d, 0xefb2, 0xefbe, 0xefd6, 0xefeb, 0xefff, 0xf00f, + 0xf020, 0xf030, 0xf041, 0xf051, 0xf062, 0xf07a, 0xf092, 0xf0a2, + 0xf0b3, 0xf0c3, 0xf0d4, 0xf0e5, 0xf0f7, 0xf108, 0xf11a, 0xf12c, + 0xf13d, 0xf14f, 0xf160, 0xf172, 0xf184, 0xf196, 0xf1a9, 0xf1bb, + // Entry 8C0 - 8FF + 0xf1ce, 0xf1e0, 0xf1f1, 0xf203, 0xf214, 0xf226, 0xf237, 0xf248, + 0xf25a, 0xf26b, 0xf27d, 0xf28e, 0xf29f, 0xf2b0, 0xf2c1, 0xf2d3, + 0xf2e5, 0xf2f6, 0xf307, 0xf319, 0xf32e, 0xf343, 0xf357, 0xf36c, + 0xf380, 0xf395, 0xf3b1, 0xf3ce, 0xf3e2, 0xf3f7, 0xf40b, 0xf420, + 0xf433, 0xf44b, 0xf461, 0xf473, 0xf485, 0xf497, 0xf4b0, 0xf4c9, + 0xf4e5, 0xf502, 0xf514, 0xf525, 0xf536, 0xf549, 0xf55b, 0xf56d, + 0xf57e, 0xf591, 0xf5a4, 0xf5b6, 0xf5dc, 0xf601, 0xf613, 0xf625, + 0xf643, 0xf661, 0xf681, 0xf6a0, 0xf6d8, 0xf6fc, 0xf70a, 0xf71c, + // Entry 900 - 93F + 0xf734, 0xf747, 0xf75c, 0xf76d, 0xf77f, 0xf790, 0xf7a2, 0xf7b3, + 0xf7c5, 0xf7d7, 0xf7e9, 0xf7fb, 0xf80d, 0xf81f, 0xf832, 0xf844, + 0xf857, 0xf86a, 0xf87c, 0xf88f, 0xf8a1, 0xf8b4, 0xf8c7, 0xf8da, + 0xf8ee, 0xf901, 0xf915, 0xf928, 0xf93a, 0xf94d, 0xf95f, 0xf972, + 0xf984, 0xf996, 0xf9a9, 0xf9bb, 0xf9ce, 0xf9e0, 0xf9f2, 0xfa04, + 0xfa16, 0xfa29, 0xfa3b, 0xfa4e, 0xfa60, 0xfa72, 0xfa85, 0xfa9b, + 0xfab0, 0xfac6, 0xfadb, 0xfaf1, 0xfb07, 0xfb1d, 0xfb33, 0xfb49, + 0xfb5d, 0xfb70, 0xfb84, 0xfb98, 0xfbaa, 0xfbbd, 0xfbcf, 0xfbe2, + // Entry 940 - 97F + 0xfbf4, 0xfc06, 0xfc1a, 0xfc2d, 0xfc40, 0xfc52, 0xfc66, 0xfc7a, + 0xfc8d, 0xfc9b, 0xfca9, 0xfcb5, 0xfcc1, 0xfcd2, 0xfce6, 0xfcff, + 0xfd15, 0xfd2a, 0xfd3b, 0xfd4d, 0xfd5e, 0xfd70, 0xfd81, 0xfd93, + 0xfdac, 0xfdc5, 0xfddc, 0xfded, 0xfdff, 0xfe16, 0xfe27, 0xfe39, + 0xfe4b, 0xfe5e, 0xfe70, 0xfe83, 0xfe96, 0xfea8, 0xfebb, 0xfecd, + 0xfee0, 0xfef3, 0xff06, 0xff1a, 0xff2d, 0xff41, 0xff54, 0xff66, + 0xff79, 0xff8b, 0xff9e, 0xffb0, 0xffc2, 0xffd5, 0xffe7, 0xfffa, + 0x000c, 0x001e, 0x0030, 0x0042, 0x0055, 0x0067, 0x007a, 0x008d, + // Entry 980 - 9BF + 0x009f, 0x00b1, 0x00c4, 0x00da, 0x00f0, 0x0105, 0x011b, 0x0130, + 0x0146, 0x0163, 0x0181, 0x019d, 0x01b2, 0x01c8, 0x01e4, 0x01f9, + 0x020f, 0x0223, 0x022e, 0x0248, 0x0262, 0x027f, 0x029d, 0x02b0, + 0x02c2, 0x02d4, 0x02e8, 0x02fb, 0x030e, 0x0320, 0x0334, 0x0348, + 0x035b, 0x0375, 0x0388, 0x039b, 0x03b1, 0x03c4, 0x03d6, 0x03e4, + 0x03f3, 0x0401, 0x0410, 0x041e, 0x042d, 0x0443, 0x0459, 0x0467, + 0x0476, 0x0484, 0x0493, 0x04a2, 0x04b2, 0x04c1, 0x04d1, 0x04e1, + 0x04f0, 0x0500, 0x050f, 0x051f, 0x052f, 0x053f, 0x0550, 0x0560, + // Entry 9C0 - 9FF + 0x0571, 0x0581, 0x0590, 0x05a0, 0x05af, 0x05bf, 0x05ce, 0x05dd, + 0x05ed, 0x05fc, 0x060c, 0x061b, 0x062a, 0x0639, 0x0648, 0x0658, + 0x0667, 0x0677, 0x0687, 0x0696, 0x06a5, 0x06b5, 0x06c8, 0x06db, + 0x06ed, 0x0700, 0x0712, 0x0725, 0x073f, 0x075a, 0x076c, 0x077f, + 0x0791, 0x07a4, 0x07b5, 0x07c9, 0x07dd, 0x07ed, 0x07fd, 0x080d, + 0x0824, 0x083b, 0x0855, 0x0870, 0x0880, 0x088f, 0x089e, 0x08af, + 0x08bf, 0x08cf, 0x08de, 0x08ef, 0x0900, 0x0910, 0x091c, 0x092b, + 0x0945, 0x095c, 0x0979, 0x0995, 0x09ae, 0x09cd, 0x09e0, 0x09f2, + // Entry A00 - A3F + 0x0a00, 0x0a0f, 0x0a1d, 0x0a2c, 0x0a3a, 0x0a49, 0x0a57, 0x0a66, + 0x0a75, 0x0a83, 0x0a92, 0x0aa1, 0x0ab0, 0x0ac0, 0x0acf, 0x0ade, + 0x0aee, 0x0afe, 0x0b0e, 0x0b1d, 0x0b2c, 0x0b3d, 0x0b4c, 0x0b5b, + 0x0b6a, 0x0b79, 0x0b89, 0x0b98, 0x0ba8, 0x0bb9, 0x0bc8, 0x0bd8, + 0x0be8, 0x0bf7, 0x0c06, 0x0c19, 0x0c2b, 0x0c3e, 0x0c50, 0x0c63, + 0x0c75, 0x0c88, 0x0c9b, 0x0cad, 0x0cc0, 0x0cd3, 0x0ce4, 0x0cec, + 0x0d00, 0x0d10, 0x0d1f, 0x0d2e, 0x0d3f, 0x0d4f, 0x0d5f, 0x0d6e, + 0x0d7f, 0x0d90, 0x0da0, 0x0db0, 0x0dc8, 0x0de1, 0x0def, 0x0dff, + // Entry A40 - A7F + 0x0e0e, 0x0e1e, 0x0e2f, 0x0e42, 0x0e52, 0x0e63, 0x0e8a, 0x0ea1, + 0x0eb5, 0x0ec8, 0x0ed7, 0x0ee7, 0x0ef6, 0x0f06, 0x0f15, 0x0f25, + 0x0f3c, 0x0f53, 0x0f62, 0x0f72, 0x0f82, 0x0f91, 0x0fa1, 0x0fb1, + 0x0fc1, 0x0fd2, 0x0fe2, 0x0ff3, 0x1004, 0x1014, 0x1025, 0x1035, + 0x1046, 0x1057, 0x1068, 0x107a, 0x108b, 0x109d, 0x10ae, 0x10be, + 0x10cf, 0x10df, 0x10f0, 0x1100, 0x1110, 0x1121, 0x1131, 0x1142, + 0x1152, 0x1162, 0x1172, 0x1183, 0x1193, 0x11a4, 0x11b6, 0x11c6, + 0x11d7, 0x11e8, 0x11f8, 0x1208, 0x121c, 0x1230, 0x1243, 0x1257, + // Entry A80 - ABF + 0x126a, 0x127e, 0x1299, 0x12b5, 0x12c8, 0x12dc, 0x12f0, 0x1303, + 0x1317, 0x132b, 0x133d, 0x134f, 0x1364, 0x1375, 0x1386, 0x1398, + 0x13b0, 0x13c8, 0x13e3, 0x13ff, 0x1410, 0x1420, 0x1430, 0x1442, + 0x1453, 0x1464, 0x1474, 0x1486, 0x1498, 0x14a9, 0x14da, 0x150a, + 0x153a, 0x156c, 0x159d, 0x15ce, 0x1601, 0x1612, 0x1632, 0x164a, + 0x165f, 0x1673, 0x1683, 0x1694, 0x16a4, 0x16b5, 0x16c5, 0x16d6, + 0x16ee, 0x1706, 0x1716, 0x1727, 0x1738, 0x1748, 0x1759, 0x176a, + 0x177b, 0x178d, 0x179e, 0x17b0, 0x17c2, 0x17d3, 0x17e5, 0x17f6, + // Entry AC0 - AFF + 0x1808, 0x181a, 0x182c, 0x183f, 0x1851, 0x1864, 0x1876, 0x1887, + 0x1899, 0x18aa, 0x18bc, 0x18cd, 0x18de, 0x18f0, 0x1901, 0x1913, + 0x1924, 0x1935, 0x1946, 0x1958, 0x1969, 0x197b, 0x198c, 0x199e, + 0x19b0, 0x19c1, 0x19d2, 0x19e4, 0x19f9, 0x1a0e, 0x1a22, 0x1a37, + 0x1a4b, 0x1a60, 0x1a7c, 0x1a99, 0x1aad, 0x1ac2, 0x1ad7, 0x1aeb, + 0x1b00, 0x1b15, 0x1b28, 0x1b3b, 0x1b51, 0x1b62, 0x1b7b, 0x1b94, + 0x1bb0, 0x1bcd, 0x1bdf, 0x1bf0, 0x1c01, 0x1c14, 0x1c26, 0x1c38, + 0x1c49, 0x1c5c, 0x1c6f, 0x1c81, 0x1c99, 0x1cb1, 0x1ccb, 0x1ce2, + // Entry B00 - B3F + 0x1cf8, 0x1d0a, 0x1d1d, 0x1d2f, 0x1d42, 0x1d54, 0x1d67, 0x1d81, + 0x1d9b, 0x1dad, 0x1dc0, 0x1dd3, 0x1de5, 0x1df8, 0x1e0b, 0x1e1e, + 0x1e32, 0x1e45, 0x1e59, 0x1e6d, 0x1e80, 0x1e94, 0x1ea7, 0x1ebb, + 0x1ecf, 0x1ee3, 0x1ef8, 0x1f0c, 0x1f21, 0x1f35, 0x1f48, 0x1f5c, + 0x1f6f, 0x1f83, 0x1f96, 0x1fab, 0x1fbe, 0x1fd2, 0x1fe5, 0x1ff9, + 0x200c, 0x201f, 0x2032, 0x2046, 0x2059, 0x206d, 0x2082, 0x2095, + 0x20a9, 0x20bd, 0x20d0, 0x20e3, 0x20f8, 0x210f, 0x2126, 0x213c, + 0x2153, 0x2169, 0x2180, 0x219e, 0x21bd, 0x21d3, 0x21ea, 0x2201, + // Entry B40 - B7F + 0x2217, 0x222e, 0x2245, 0x225a, 0x2273, 0x2286, 0x229f, 0x22b8, + 0x22d3, 0x22eb, 0x231a, 0x2339, 0x235c, 0x237c, 0x2398, 0x23bb, + 0x23d7, 0x23f2, 0x240d, 0x2428, 0x2446, 0x2465, 0x2479, 0x248c, + 0x249f, 0x24b4, 0x24c8, 0x24dc, 0x24ef, 0x2504, 0x2519, 0x252d, + 0x2541, 0x255d, 0x257a, 0x2598, 0x25b3, 0x25d4, 0x25f4, 0x2611, + 0x2634, 0x2647, 0x2661, 0x267a, 0x2694, 0x26ad, 0x26c7, 0x26e0, + 0x26f7, 0x270d, 0x2722, 0x2738, 0x274e, 0x2765, 0x277a, 0x2790, + 0x27a5, 0x27bb, 0x27d2, 0x27ea, 0x2801, 0x2819, 0x282e, 0x2844, + // Entry B80 - BBF + 0x285a, 0x286f, 0x2885, 0x289b, 0x28bc, 0x28de, 0x28ff, 0x2921, + 0x2942, 0x2960, 0x2981, 0x29a3, 0x29c4, 0x29e6, 0x2a07, 0x2a32, + 0x2a50, 0x2a72, 0x2a95, 0x2ab7, 0x2ada, 0x2afa, 0x2b19, 0x2b3a, + 0x2b5c, 0x2b7d, 0x2b9f, 0x2bbd, 0x2bdb, 0x2bfc, 0x2c1e, 0x2c3f, + 0x2c61, 0x2c77, 0x2c92, 0x2ca8, 0x2cbe, 0x2cdc, 0x2cf2, 0x2d10, + 0x2d30, 0x2d4e, 0x2d64, 0x2d84, 0x2d9a, 0x2db0, 0x2dcd, 0x2df0, + 0x2e12, 0x2e33, 0x2e53, 0x2e75, 0x2e96, 0x2eb5, 0x2ecf, 0x2eee, + 0x2f0b, 0x2f34, 0x2f62, 0x2f8c, 0x2faa, 0x2fc1, 0x2fd7, 0x2fed, + // Entry BC0 - BFF + 0x3005, 0x301c, 0x3033, 0x3049, 0x3061, 0x3079, 0x3090, 0x30b4, + 0x30d7, 0x30f5, 0x310a, 0x3121, 0x3139, 0x3151, 0x3168, 0x3182, + 0x3198, 0x31af, 0x31c7, 0x31df, 0x31f3, 0x320a, 0x3220, 0x3237, + 0x324e, 0x3265, 0x3282, 0x329c, 0x32b1, 0x32c6, 0x32db, 0x32f3, + 0x330c, 0x3324, 0x3338, 0x3350, 0x3365, 0x337d, 0x3391, 0x33a8, + 0x33bd, 0x33d7, 0x33eb, 0x3400, 0x3415, 0x3426, 0x343c, 0x344d, + 0x3463, 0x3479, 0x348f, 0x34a4, 0x34b9, 0x34d0, 0x34e4, 0x34fc, + 0x3514, 0x3529, 0x3544, 0x355a, 0x3570, 0x3585, 0x359b, 0x35b1, + // Entry C00 - C3F + 0x35c8, 0x35dd, 0x35f3, 0x3609, 0x3622, 0x3637, 0x364d, 0x3662, + 0x3680, 0x369f, 0x36b9, 0x36d0, 0x36e8, 0x36fd, 0x3713, 0x3729, + 0x3744, 0x375e, 0x3775, 0x378c, 0x37a2, 0x37b1, 0x37bf, 0x37cd, + 0x37dd, 0x37ec, 0x37fb, 0x3809, 0x3819, 0x3829, 0x3838, 0x3851, + 0x3866, 0x3873, 0x3886, 0x3898, 0x38a6, 0x38b3, 0x38c4, 0x38d2, + 0x38df, 0x38ec, 0x38ff, 0x3911, 0x391e, 0x392b, 0x3938, 0x394b, + 0x395c, 0x396e, 0x3980, 0x398d, 0x399a, 0x39ac, 0x39be, 0x39cb, + 0x39dd, 0x39ef, 0x39fb, 0x3a0c, 0x3a18, 0x3a28, 0x3a3e, 0x3a4f, + // Entry C40 - C7F + 0x3a60, 0x3a70, 0x3a81, 0x3a91, 0x3aa2, 0x3ab2, 0x3ac3, 0x3ad9, + 0x3aee, 0x3b04, 0x3b14, 0x3b25, 0x3b35, 0x3b46, 0x3b57, 0x3b60, + 0x3b6f, 0x3b7f, 0x3b8e, 0x3ba1, 0x3bb6, 0x3bc3, 0x3bd1, 0x3bde, + 0x3beb, 0x3bfa, 0x3c08, 0x3c16, 0x3c23, 0x3c32, 0x3c41, 0x3c4f, + 0x3c58, 0x3c61, 0x3c73, 0x3c86, 0x3c99, 0x3cbe, 0x3ce8, 0x3d13, + 0x3d37, 0x3d5b, 0x3d82, 0x3da4, 0x3dbb, 0x3dd5, 0x3df3, 0x3e13, + 0x3e35, 0x3e46, 0x3e5c, 0x3e73, 0x3e8f, 0x3eb0, 0x3ecb, 0x3ef5, + 0x3f0c, 0x3f2c, 0x3f4c, 0x3f7b, 0x3f9e, 0x3fc4, 0x3fdf, 0x3ffb, + // Entry C80 - CBF + 0x4016, 0x4030, 0x404b, 0x406a, 0x407c, 0x408d, 0x409e, 0x40b1, + 0x40c3, 0x40d5, 0x40e6, 0x40f9, 0x410c, 0x411e, 0x4134, 0x414a, + 0x4162, 0x4179, 0x4190, 0x41a6, 0x41be, 0x41d6, 0x41ed, 0x4204, + 0x421c, 0x423b, 0x4266, 0x4288, 0x429c, 0x42b2, 0x42cd, 0x42e8, + 0x4303, 0x431e, 0x4334, 0x434a, 0x435b, 0x436d, 0x437e, 0x4390, + 0x43a2, 0x43b3, 0x43c5, 0x43d6, 0x43e8, 0x43fa, 0x440d, 0x441f, + 0x4432, 0x4444, 0x4455, 0x4467, 0x4478, 0x448a, 0x449b, 0x44ac, + 0x44be, 0x44cf, 0x44e1, 0x44f2, 0x4504, 0x4517, 0x4529, 0x453c, + // Entry CC0 - CFF + 0x454d, 0x455f, 0x4570, 0x4581, 0x4592, 0x45a3, 0x45b4, 0x45c6, + 0x45d8, 0x45e9, 0x45fa, 0x460a, 0x461d, 0x4639, 0x464b, 0x465d, + 0x4672, 0x4686, 0x469b, 0x46af, 0x46c4, 0x46e0, 0x46fd, 0x4719, + 0x4736, 0x474a, 0x475f, 0x4773, 0x4788, 0x47a3, 0x47b9, 0x47d6, + 0x47f4, 0x480f, 0x4824, 0x4838, 0x484b, 0x4861, 0x4878, 0x4890, + 0x48a5, 0x48c1, 0x48dd, 0x48fb, 0x491d, 0x493c, 0x4964, 0x497f, + 0x499b, 0x49b6, 0x49d2, 0x49ee, 0x4a09, 0x4a25, 0x4a40, 0x4a5c, + 0x4a78, 0x4a95, 0x4ab1, 0x4ace, 0x4aea, 0x4b05, 0x4b21, 0x4b3c, + // Entry D00 - D3F + 0x4b58, 0x4b73, 0x4b8e, 0x4baa, 0x4bc5, 0x4be1, 0x4bfc, 0x4c18, + 0x4c35, 0x4c51, 0x4c6e, 0x4c89, 0x4ca5, 0x4cc0, 0x4cdb, 0x4cf6, + 0x4d11, 0x4d2c, 0x4d48, 0x4d64, 0x4d7f, 0x4d9a, 0x4db4, 0x4dd1, + 0x4df7, 0x4e1d, 0x4e43, 0x4e54, 0x4e72, 0x4e96, 0x4eba, 0x4edd, + 0x4f01, 0x4f17, 0x4f2d, 0x4f46, 0x4f66, 0x4f7c, 0x4f91, 0x4fb2, + 0x4fd3, 0x4ff4, 0x5013, 0x502d, 0x5051, 0x5074, 0x508b, 0x50bb, + 0x50eb, 0x5103, 0x511a, 0x513c, 0x515d, 0x517d, 0x519e, 0x51af, + 0x51c1, 0x51d2, 0x51e4, 0x51f6, 0x5207, 0x5219, 0x522a, 0x523c, + // Entry D40 - D7F + 0x524e, 0x5261, 0x5273, 0x5286, 0x5298, 0x52ab, 0x52bd, 0x52ce, + 0x52e0, 0x52f1, 0x5303, 0x5314, 0x5325, 0x5337, 0x5348, 0x535a, + 0x536b, 0x537c, 0x538d, 0x539e, 0x53af, 0x53c0, 0x53d1, 0x53e3, + 0x53f3, 0x5408, 0x5418, 0x5429, 0x5439, 0x544a, 0x545a, 0x546e, + 0x547e, 0x548f, 0x54a9, 0x54be, 0x54d2, 0x54e7, 0x54fb, 0x5510, + 0x5524, 0x5539, 0x5552, 0x556a, 0x5584, 0x5599, 0x55af, 0x55c3, + 0x55d6, 0x55e7, 0x5607, 0x5627, 0x5647, 0x5667, 0x567e, 0x5690, + 0x56a1, 0x56b2, 0x56c5, 0x56d7, 0x56e9, 0x56fa, 0x570d, 0x5720, + // Entry D80 - DBF + 0x5732, 0x574d, 0x5761, 0x5778, 0x5790, 0x57ad, 0x57c4, 0x57d6, + 0x57e8, 0x5800, 0x5819, 0x5831, 0x584a, 0x5866, 0x5883, 0x589f, + 0x58bc, 0x58d2, 0x58e8, 0x58fe, 0x5914, 0x5938, 0x595c, 0x5980, + 0x599d, 0x59bd, 0x59df, 0x5a02, 0x5a26, 0x5a4a, 0x5a71, 0x5a98, + 0x5abd, 0x5ae2, 0x5b07, 0x5b2c, 0x5b51, 0x5b75, 0x5b99, 0x5bbe, + 0x5bdd, 0x5bf8, 0x5c12, 0x5c2d, 0x5c43, 0x5c5a, 0x5c70, 0x5c86, + 0x5c9c, 0x5cb3, 0x5cc9, 0x5cdf, 0x5cf6, 0x5d0c, 0x5d22, 0x5d39, + 0x5d4f, 0x5d74, 0x5d8e, 0x5da7, 0x5dc6, 0x5de5, 0x5dfd, 0x5e15, + // Entry DC0 - DFF + 0x5e2d, 0x5e45, 0x5e65, 0x5e85, 0x5eac, 0x5ecb, 0x5eec, 0x5f03, + 0x5f19, 0x5f2f, 0x5f47, 0x5f5e, 0x5f75, 0x5f8b, 0x5fa3, 0x5fbb, + 0x5fd2, 0x5fec, 0x6006, 0x6020, 0x603b, 0x6052, 0x6071, 0x608b, + 0x60a6, 0x60c1, 0x60dc, 0x60f6, 0x6111, 0x612c, 0x6147, 0x6161, + 0x617c, 0x6197, 0x61b2, 0x61cd, 0x61e7, 0x6202, 0x621e, 0x6239, + 0x6254, 0x626f, 0x6289, 0x62a5, 0x62c1, 0x62dd, 0x62f8, 0x6314, + 0x6330, 0x634b, 0x6366, 0x6381, 0x639d, 0x63b8, 0x63d4, 0x63ef, + 0x6409, 0x6424, 0x643e, 0x6459, 0x6474, 0x648e, 0x64a9, 0x64bb, + // Entry E00 - E3F + 0x64ce, 0x64e1, 0x64f4, 0x6506, 0x6519, 0x652c, 0x653f, 0x6551, + 0x6564, 0x6577, 0x658a, 0x659d, 0x65af, 0x65c2, 0x65d6, 0x65e9, + 0x65fc, 0x660f, 0x6621, 0x6635, 0x6649, 0x665d, 0x6670, 0x6684, + 0x6698, 0x66ab, 0x66be, 0x66d1, 0x66e5, 0x66f8, 0x670c, 0x671f, + 0x6731, 0x6744, 0x6756, 0x6769, 0x677c, 0x678e, 0x67a0, 0x67b5, + 0x67cf, 0x67e2, 0x67fe, 0x681a, 0x682d, 0x6846, 0x6861, 0x6877, + 0x6892, 0x68a7, 0x68bd, 0x68d8, 0x68ed, 0x6902, 0x6917, 0x6931, + 0x6945, 0x695e, 0x6973, 0x6988, 0x69a2, 0x69b9, 0x69d0, 0x69e7, + // Entry E40 - E7F + 0x69fe, 0x6a13, 0x6a2f, 0x6a49, 0x6a65, 0x6a80, 0x6a9d, 0x6ab8, + 0x6ad2, 0x6aed, 0x6b0a, 0x6b25, 0x6b42, 0x6b5e, 0x6b79, 0x6b95, + 0x6baf, 0x6bd0, 0x6bf1, 0x6c11, 0x6c30, 0x6c50, 0x6c6b, 0x6c88, + 0x6ca5, 0x6cc2, 0x6cdf, 0x6d01, 0x6d1c, 0x6d36, 0x6d51, 0x6d6b, + 0x6d85, 0x6d9f, 0x6dc0, 0x6dde, 0x6df8, 0x6e12, 0x6e2e, 0x6e4a, + 0x6e66, 0x6e82, 0x6e9c, 0x6eb8, 0x6ed9, 0x6ef8, 0x6f1c, 0x6f33, + 0x6f4f, 0x6f6b, 0x6f86, 0x6fa1, 0x6fbb, 0x6fd8, 0x6ff2, 0x700d, + 0x702a, 0x7047, 0x7064, 0x707c, 0x7097, 0x70b4, 0x70d6, 0x70f6, + // Entry E80 - EBF + 0x711b, 0x713a, 0x7157, 0x7176, 0x7198, 0x71b5, 0x71d4, 0x71ee, + 0x7209, 0x7226, 0x7240, 0x725b, 0x7276, 0x7292, 0x72a8, 0x72bf, + 0x72d1, 0x72e4, 0x72f7, 0x730b, 0x731e, 0x7330, 0x7344, 0x7357, + 0x7369, 0x737c, 0x7390, 0x73a3, 0x73b6, 0x73c8, 0x73dc, 0x73ef, + 0x7402, 0x7415, 0x7428, 0x743b, 0x744d, 0x7461, 0x7475, 0x748a, + 0x74a0, 0x74b5, 0x74ca, 0x74e0, 0x74f6, 0x750c, 0x7521, 0x7535, + 0x754a, 0x755e, 0x7572, 0x7588, 0x759f, 0x75b6, 0x75cb, 0x75e0, + 0x75f4, 0x7609, 0x7621, 0x7636, 0x764a, 0x765f, 0x7675, 0x768a, + // Entry EC0 - EFF + 0x76a1, 0x76b7, 0x76cc, 0x76e1, 0x76f6, 0x770c, 0x7721, 0x7735, + 0x774a, 0x775e, 0x7772, 0x7787, 0x779f, 0x77b5, 0x77ce, 0x77e6, + 0x77fe, 0x7819, 0x782e, 0x7843, 0x785a, 0x786f, 0x7885, 0x789c, + 0x78b8, 0x78d4, 0x78ea, 0x7906, 0x7922, 0x7939, 0x794f, 0x796c, + 0x7988, 0x79a4, 0x79bf, 0x79dd, 0x79fb, 0x7a17, 0x7a2d, 0x7a43, + 0x7a5e, 0x7a73, 0x7a8d, 0x7aa3, 0x7ab9, 0x7ad1, 0x7ae9, 0x7b01, + 0x7b19, 0x7b2f, 0x7b4c, 0x7b6f, 0x7b8c, 0x7ba9, 0x7bc4, 0x7be2, + 0x7c00, 0x7c1e, 0x7c3b, 0x7c5d, 0x7c79, 0x7c96, 0x7cb9, 0x7cd4, + // Entry F00 - F3F + 0x7cf7, 0x7d18, 0x7d39, 0x7d5b, 0x7d7f, 0x7d9f, 0x7dbd, 0x7ddb, + 0x7dfd, 0x7e1a, 0x7e36, 0x7e52, 0x7e6d, 0x7e8d, 0x7eab, 0x7ec9, + 0x7ee5, 0x7f03, 0x7f1f, 0x7f3d, 0x7f59, 0x7f77, 0x7f93, 0x7faf, + 0x7fca, 0x7fe5, 0x7ffd, 0x801a, 0x803c, 0x8057, 0x8075, 0x808e, + 0x80ac, 0x80cd, 0x80eb, 0x810b, 0x8127, 0x8143, 0x815f, 0x817b, + 0x8197, 0x81b4, 0x81d1, 0x81f0, 0x820f, 0x822c, 0x8247, 0x825b, + 0x826f, 0x8283, 0x8298, 0x82ad, 0x82c1, 0x82d5, 0x82ea, 0x82fe, + 0x8312, 0x8326, 0x833b, 0x8350, 0x8364, 0x8378, 0x838d, 0x83a2, + // Entry F40 - F7F + 0x83b7, 0x83cc, 0x83e2, 0x83f8, 0x840d, 0x8422, 0x8438, 0x844c, + 0x8460, 0x8474, 0x8489, 0x849e, 0x84b2, 0x84c6, 0x84db, 0x84f0, + 0x8505, 0x851a, 0x8530, 0x8546, 0x855b, 0x8570, 0x8586, 0x859a, + 0x85ae, 0x85c2, 0x85d7, 0x85ec, 0x8600, 0x8614, 0x8629, 0x863d, + 0x8651, 0x8665, 0x867a, 0x868f, 0x86a3, 0x86b7, 0x86cc, 0x86e1, + 0x86f6, 0x870b, 0x8721, 0x8737, 0x874c, 0x8761, 0x8777, 0x878b, + 0x879f, 0x87b3, 0x87c8, 0x87dd, 0x87f1, 0x8805, 0x881a, 0x882f, + 0x8844, 0x885a, 0x8870, 0x8885, 0x889a, 0x88af, 0x88c4, 0x88da, + // Entry F80 - FBF + 0x88f0, 0x8905, 0x891a, 0x8930, 0x8946, 0x895d, 0x8974, 0x898a, + 0x899e, 0x89b2, 0x89c6, 0x89db, 0x89f0, 0x8a04, 0x8a18, 0x8a2d, + 0x8a41, 0x8a55, 0x8a69, 0x8a7e, 0x8a93, 0x8aa7, 0x8abb, 0x8ad0, + 0x8ae4, 0x8af8, 0x8b0c, 0x8b21, 0x8b36, 0x8b4a, 0x8b5e, 0x8b73, + 0x8b87, 0x8b9b, 0x8baf, 0x8bc4, 0x8bd9, 0x8bed, 0x8c01, 0x8c16, + 0x8c2a, 0x8c3e, 0x8c52, 0x8c67, 0x8c7c, 0x8c90, 0x8ca4, 0x8cb9, + 0x8cce, 0x8ce3, 0x8cf9, 0x8d0f, 0x8d24, 0x8d38, 0x8d4c, 0x8d60, + 0x8d75, 0x8d8a, 0x8d9e, 0x8db2, 0x8dc7, 0x8ddc, 0x8df1, 0x8e06, + // Entry FC0 - FFF + 0x8e1c, 0x8e32, 0x8e47, 0x8e5c, 0x8e72, 0x8e8d, 0x8ea8, 0x8ec3, + 0x8edf, 0x8efb, 0x8f16, 0x8f31, 0x8f4d, 0x8f61, 0x8f75, 0x8f89, + 0x8f9e, 0x8fb3, 0x8fc7, 0x8fdb, 0x8ff0, 0x9005, 0x901a, 0x9030, + 0x9046, 0x905b, 0x9070, 0x9085, 0x909a, 0x90b0, 0x90c6, 0x90db, + 0x90f0, 0x9106, 0x911c, 0x9133, 0x914a, 0x9160, 0x9174, 0x9188, + 0x919c, 0x91b1, 0x91c6, 0x91da, 0x91ee, 0x9203, 0x9221, 0x923f, + 0x925d, 0x927c, 0x929b, 0x92b9, 0x92d7, 0x92eb, 0x92ff, 0x9313, + 0x9328, 0x933d, 0x9351, 0x9365, 0x937a, 0x938f, 0x93a4, 0x93b9, + // Entry 1000 - 103F + 0x93cf, 0x93e5, 0x93fa, 0x940f, 0x9425, 0x9439, 0x944d, 0x9461, + 0x9476, 0x948b, 0x949f, 0x94b3, 0x94c8, 0x94dc, 0x94f0, 0x9504, + 0x9519, 0x952e, 0x9542, 0x9556, 0x956b, 0x9580, 0x9595, 0x95aa, + 0x95c0, 0x95d6, 0x95eb, 0x9600, 0x9616, 0x962a, 0x963e, 0x9652, + 0x9667, 0x967c, 0x9690, 0x96a4, 0x96b9, 0x96cd, 0x96e1, 0x96f5, + 0x970a, 0x971f, 0x9733, 0x9747, 0x975c, 0x9771, 0x9786, 0x979c, + 0x97b2, 0x97c7, 0x97dc, 0x97f1, 0x9806, 0x981c, 0x9832, 0x9847, + 0x985c, 0x9873, 0x9888, 0x989d, 0x98b2, 0x98c8, 0x98de, 0x98f3, + // Entry 1040 - 107F + 0x9908, 0x991e, 0x9933, 0x9948, 0x995d, 0x9973, 0x9989, 0x999e, + 0x99b3, 0x99c9, 0x99de, 0x99f3, 0x9a08, 0x9a1e, 0x9a34, 0x9a49, + 0x9a5e, 0x9a74, 0x9a89, 0x9a9e, 0x9ab3, 0x9ac9, 0x9adf, 0x9af4, + 0x9b09, 0x9b1f, 0x9b34, 0x9b49, 0x9b5e, 0x9b74, 0x9b8a, 0x9b9f, + 0x9bb4, 0x9bca, 0x9bde, 0x9bf2, 0x9c06, 0x9c1b, 0x9c30, 0x9c44, + 0x9c58, 0x9c6d, 0x9c81, 0x9c95, 0x9ca9, 0x9cbe, 0x9cd3, 0x9ce7, + 0x9cfb, 0x9d10, 0x9d25, 0x9d3a, 0x9d4f, 0x9d82, 0x9da6, 0x9dc8, + 0x9ddd, 0x9def, 0x9e01, 0x9e0f, 0x9e21, 0x9e2f, 0x9e45, 0x9e5b, + // Entry 1080 - 10BF + 0x9e77, 0x9e89, 0x9e9b, 0x9eaf, 0x9ec2, 0x9ed5, 0x9ee7, 0x9efb, + 0x9f0f, 0x9f22, 0x9f35, 0x9f4b, 0x9f61, 0x9f76, 0x9f8b, 0x9fa0, + 0x9fb7, 0x9fcd, 0x9fe3, 0x9ffa, 0xa016, 0xa035, 0xa04a, 0xa060, + 0xa075, 0xa094, 0xa0a9, 0xa0bf, 0xa0d4, 0xa0f3, 0xa108, 0xa11e, + 0xa133, 0xa152, 0xa167, 0xa17d, 0xa192, 0xa1ab, 0xa1c4, 0xa1de, + 0xa1fe, 0xa217, 0xa230, 0xa24a, 0xa263, 0xa282, 0xa29a, 0xa2ab, + 0xa2bc, 0xa2cd, 0xa2de, 0xa2ef, 0xa300, 0xa312, 0xa324, 0xa336, + 0xa348, 0xa35a, 0xa36c, 0xa37e, 0xa390, 0xa3a2, 0xa3b4, 0xa3c6, + // Entry 10C0 - 10FF + 0xa3d8, 0xa3ea, 0xa3fc, 0xa40e, 0xa420, 0xa432, 0xa444, 0xa456, + 0xa468, 0xa47a, 0xa48c, 0xa49e, 0xa4b0, 0xa4c2, 0xa4d5, 0xa4e8, + 0xa4fa, 0xa50c, 0xa51e, 0xa530, 0xa542, 0xa555, 0xa568, 0xa57b, + 0xa58e, 0xa5a1, 0xa5b4, 0xa5c6, 0xa5d7, 0xa5e9, 0xa5fb, 0xa60d, + 0xa61f, 0xa631, 0xa643, 0xa655, 0xa667, 0xa679, 0xa68b, 0xa69d, + 0xa6af, 0xa6c1, 0xa6d3, 0xa6e6, 0xa6f9, 0xa70c, 0xa71f, 0xa732, + 0xa745, 0xa758, 0xa76b, 0xa77e, 0xa791, 0xa7a4, 0xa7b7, 0xa7ca, + 0xa7dc, 0xa7ee, 0xa800, 0xa812, 0xa824, 0xa836, 0xa848, 0xa85a, + // Entry 1100 - 113F + 0xa86c, 0xa87e, 0xa890, 0xa8a2, 0xa8b4, 0xa8cc, 0xa8e4, 0xa8fc, + 0xa914, 0xa92c, 0xa944, 0xa95d, 0xa971, 0xa987, 0xa99b, 0xa9b0, + 0xa9c4, 0xa9d9, 0xa9f5, 0xaa12, 0xaa2e, 0xaa42, 0xaa57, 0xaa6c, + 0xaa8b, 0xaaa0, 0xaabf, 0xaad5, 0xaaf5, 0xab0a, 0xab29, 0xab3f, + 0xab5f, 0xab7d, 0xab92, 0xabb1, 0xabc7, 0xabe7, 0xac05, 0xac1a, + 0xac35, 0xac54, 0xac72, 0xac90, 0xacb9, 0xacdf, 0xad07, 0xad24, + 0xad49, 0xad7f, 0xada2, 0xadd2, 0xadef, 0xae11, 0xae26, 0xae3b, + 0xae50, 0xae65, 0xae7a, 0xae91, 0xaea6, 0xaebc, 0xaed1, 0xaee7, + // Entry 1140 - 117F + 0xaf04, 0xaf22, 0xaf3f, 0xaf54, 0xaf6a, 0xaf80, 0xafa0, 0xafb6, + 0xafd6, 0xafed, 0xb00e, 0xb024, 0xb044, 0xb05b, 0xb07c, 0xb092, + 0xb0b2, 0xb0c9, 0xb0ea, 0xb108, 0xb11c, 0xb13a, 0xb156, 0xb16b, + 0xb182, 0xb197, 0xb1ad, 0xb1c2, 0xb1d8, 0xb1f5, 0xb213, 0xb230, + 0xb245, 0xb25b, 0xb271, 0xb291, 0xb2a7, 0xb2c7, 0xb2de, 0xb2ff, + 0xb315, 0xb335, 0xb34c, 0xb36d, 0xb383, 0xb3a3, 0xb3ba, 0xb3db, + 0xb3fa, 0xb40e, 0xb424, 0xb43a, 0xb450, 0xb466, 0xb47b, 0xb492, + 0xb4a7, 0xb4bd, 0xb4d2, 0xb4e8, 0xb505, 0xb51a, 0xb530, 0xb546, + // Entry 1180 - 11BF + 0xb566, 0xb57c, 0xb59c, 0xb5b3, 0xb5d4, 0xb5ea, 0xb60a, 0xb621, + 0xb642, 0xb658, 0xb678, 0xb68f, 0xb6b0, 0xb6cf, 0xb6e3, 0xb6f8, + 0xb71b, 0xb73e, 0xb761, 0xb784, 0xb799, 0xb7b0, 0xb7c5, 0xb7db, + 0xb7f0, 0xb806, 0xb823, 0xb838, 0xb84e, 0xb864, 0xb884, 0xb89a, + 0xb8ba, 0xb8d1, 0xb8f2, 0xb908, 0xb928, 0xb93f, 0xb960, 0xb976, + 0xb996, 0xb9ad, 0xb9ce, 0xb9ed, 0xba01, 0xba1d, 0xba32, 0xba49, + 0xba5e, 0xba74, 0xba89, 0xba9f, 0xbabc, 0xbad1, 0xbae7, 0xbafd, + 0xbb1d, 0xbb33, 0xbb53, 0xbb6a, 0xbb8b, 0xbba1, 0xbbc1, 0xbbd8, + // Entry 11C0 - 11FF + 0xbbf9, 0xbc0f, 0xbc2f, 0xbc46, 0xbc67, 0xbc86, 0xbc9a, 0xbcb8, + 0xbccd, 0xbcec, 0xbd07, 0xbd1c, 0xbd33, 0xbd48, 0xbd5e, 0xbd73, + 0xbd89, 0xbda6, 0xbdbb, 0xbdd1, 0xbde7, 0xbe07, 0xbe1d, 0xbe3d, + 0xbe54, 0xbe75, 0xbe94, 0xbea8, 0xbec5, 0xbeda, 0xbeef, 0xbf06, + 0xbf1b, 0xbf31, 0xbf46, 0xbf5c, 0xbf79, 0xbf8e, 0xbfa4, 0xbfba, + 0xbfda, 0xbff0, 0xc010, 0xc027, 0xc048, 0xc05e, 0xc07e, 0xc095, + 0xc0b6, 0xc0cc, 0xc0ec, 0xc103, 0xc124, 0xc138, 0xc156, 0xc171, + 0xc186, 0xc19d, 0xc1b2, 0xc1c8, 0xc1dd, 0xc1f3, 0xc210, 0xc225, + // Entry 1200 - 123F + 0xc23b, 0xc251, 0xc271, 0xc287, 0xc2a7, 0xc2be, 0xc2df, 0xc2f5, + 0xc315, 0xc32c, 0xc34d, 0xc363, 0xc383, 0xc39a, 0xc3bb, 0xc3da, + 0xc3ee, 0xc40d, 0xc422, 0xc440, 0xc460, 0xc47e, 0xc49c, 0xc4bb, + 0xc4da, 0xc4f9, 0xc518, 0xc52e, 0xc544, 0xc55b, 0xc571, 0xc588, + 0xc59e, 0xc5b5, 0xc5cc, 0xc5ed, 0xc604, 0xc625, 0xc63d, 0xc65f, + 0xc676, 0xc697, 0xc6af, 0xc6d1, 0xc6e8, 0xc709, 0xc721, 0xc743, + 0xc758, 0xc76d, 0xc784, 0xc799, 0xc7af, 0xc7c4, 0xc7da, 0xc7f7, + 0xc80c, 0xc822, 0xc838, 0xc858, 0xc86e, 0xc88e, 0xc8a5, 0xc8c6, + // Entry 1240 - 127F + 0xc8dc, 0xc8fc, 0xc913, 0xc934, 0xc94a, 0xc96a, 0xc981, 0xc9a2, + 0xc9c1, 0xc9d5, 0xc9f4, 0xca12, 0xca2e, 0xca43, 0xca5f, 0xca7e, + 0xca95, 0xcaaa, 0xcac0, 0xcad5, 0xcaeb, 0xcb0a, 0xcb1f, 0xcb35, + 0xcb54, 0xcb6b, 0xcb8c, 0xcba0, 0xcbbe, 0xcbd9, 0xcbee, 0xcc05, + 0xcc1a, 0xcc30, 0xcc45, 0xcc5b, 0xcc70, 0xcc86, 0xcc9d, 0xccbe, + 0xccd2, 0xcce8, 0xcd05, 0xcd1b, 0xcd38, 0xcd4f, 0xcd6d, 0xcd83, + 0xcd9a, 0xcdb0, 0xcdc7, 0xcddf, 0xce01, 0xce16, 0xce2d, 0xce44, + 0xce5b, 0xce72, 0xce88, 0xce9e, 0xceb4, 0xceca, 0xcee0, 0xcefd, + // Entry 1280 - 12BF + 0xcf1a, 0xcf38, 0xcf55, 0xcf73, 0xcf90, 0xcfae, 0xcfca, 0xcfe6, + 0xcffb, 0xd012, 0xd027, 0xd03d, 0xd052, 0xd068, 0xd07d, 0xd093, + 0xd0a7, 0xd0be, 0xd0d5, 0xd0ec, 0xd103, 0xd122, 0xd141, 0xd160, + 0xd17f, 0xd197, 0xd1ad, 0xd1c4, 0xd1da, 0xd1f1, 0xd207, 0xd21e, + 0xd233, 0xd249, 0xd266, 0xd283, 0xd2a0, 0xd2bd, 0xd2de, 0xd2ff, + 0xd320, 0xd341, 0xd361, 0xd377, 0xd38e, 0xd3a4, 0xd3bb, 0xd3d1, + 0xd3e8, 0xd3fd, 0xd41b, 0xd439, 0xd458, 0xd476, 0xd495, 0xd4b3, + 0xd4d2, 0xd4ef, 0xd50b, 0xd529, 0xd547, 0xd565, 0xd583, 0xd5a2, + // Entry 12C0 - 12FF + 0xd5c1, 0xd5e0, 0xd5ff, 0xd61e, 0xd63d, 0xd65c, 0xd67b, 0xd69a, + 0xd6b9, 0xd6d8, 0xd6f7, 0xd713, 0xd72f, 0xd74b, 0xd767, 0xd785, + 0xd7a3, 0xd7c1, 0xd7e0, 0xd7fe, 0xd81c, 0xd839, 0xd856, 0xd873, + 0xd891, 0xd8ae, 0xd8cb, 0xd8e8, 0xd905, 0xd922, 0xd940, 0xd95d, + 0xd97a, 0xd998, 0xd9b6, 0xd9d4, 0xd9f3, 0xda11, 0xda2f, 0xda4d, + 0xda6b, 0xda89, 0xdaa8, 0xdac6, 0xdae4, 0xdb02, 0xdb20, 0xdb3e, + 0xdb5d, 0xdb7b, 0xdb99, 0xdbb6, 0xdbd3, 0xdbf0, 0xdc0e, 0xdc2b, + 0xdc48, 0xdc64, 0xdc81, 0xdc9e, 0xdcbb, 0xdcd9, 0xdcf6, 0xdd13, + // Entry 1300 - 133F + 0xdd31, 0xdd4f, 0xdd6d, 0xdd8c, 0xddaa, 0xddc8, 0xdde6, 0xde04, + 0xde22, 0xde41, 0xde5f, 0xde7d, 0xde9a, 0xdeb7, 0xded4, 0xdef1, + 0xdf0f, 0xdf2c, 0xdf49, 0xdf66, 0xdf83, 0xdfa0, 0xdfbe, 0xdfdb, + 0xdff8, 0xe015, 0xe032, 0xe04f, 0xe06d, 0xe08a, 0xe0a7, 0xe0c4, + 0xe0e0, 0xe0fd, 0xe11a, 0xe138, 0xe155, 0xe171, 0xe18e, 0xe1ac, + 0xe1ca, 0xe1e8, 0xe207, 0xe225, 0xe243, 0xe260, 0xe27d, 0xe29a, + 0xe2b8, 0xe2d5, 0xe2f2, 0xe310, 0xe32e, 0xe34c, 0xe36b, 0xe389, + 0xe3a7, 0xe3c5, 0xe3e3, 0xe401, 0xe420, 0xe43e, 0xe45c, 0xe47b, + // Entry 1340 - 137F + 0xe49a, 0xe4b9, 0xe4d9, 0xe4f8, 0xe517, 0xe535, 0xe553, 0xe571, + 0xe590, 0xe5ae, 0xe5cc, 0xe5e9, 0xe606, 0xe623, 0xe641, 0xe65e, + 0xe67b, 0xe697, 0xe6bb, 0xe6d9, 0xe6f7, 0xe715, 0xe734, 0xe752, + 0xe770, 0xe78d, 0xe7aa, 0xe7c7, 0xe7e5, 0xe802, 0xe81f, 0xe83d, + 0xe85b, 0xe879, 0xe898, 0xe8b6, 0xe8d4, 0xe8f1, 0xe90f, 0xe92d, + 0xe94b, 0xe96a, 0xe988, 0xe9a6, 0xe9c4, 0xe9e2, 0xea00, 0xea1f, + 0xea3d, 0xea5b, 0xea7a, 0xea99, 0xeab8, 0xead8, 0xeaf7, 0xeb16, + 0xeb31, 0xeb4d, 0xeb63, 0xeb7a, 0xeb91, 0xeba9, 0xebc0, 0xebd8, + // Entry 1380 - 13BF + 0xebef, 0xec07, 0xec2a, 0xec4c, 0xec6f, 0xec91, 0xecb4, 0xecd6, + 0xecf9, 0xed1f, 0xed3d, 0xed4d, 0xed5f, 0xed70, 0xed82, 0xed93, + 0xeda4, 0xedb5, 0xedc6, 0xedd8, 0xede9, 0xedfb, 0xee0c, 0xee1d, + 0xee31, 0xee44, 0xee55, 0xee66, 0xee76, 0xee85, 0xee99, 0xeead, + 0xeec1, 0xeed0, 0xeee5, 0xeef6, 0xef0e, 0xef20, 0xef32, 0xef4d, + 0xef68, 0xef76, 0xef8c, 0xef9b, 0xefa9, 0xefb7, 0xefd8, 0xefe8, + 0xeffc, 0xf00d, 0xf01e, 0xf02f, 0xf04d, 0xf06a, 0xf078, 0xf087, + 0xf096, 0xf0b3, 0xf0c5, 0xf0d5, 0xf0e8, 0xf0f6, 0xf106, 0xf11e, + // Entry 13C0 - 13FF + 0xf12e, 0xf147, 0xf15c, 0xf170, 0xf191, 0xf1b1, 0xf1cf, 0xf1ed, + 0xf202, 0xf21c, 0xf22a, 0xf23e, 0xf24e, 0xf26c, 0xf288, 0xf29d, + 0xf2b9, 0xf2d1, 0xf2e6, 0xf30a, 0xf327, 0xf335, 0xf343, 0xf35f, + 0xf37c, 0xf38a, 0xf3af, 0xf3d0, 0xf3e5, 0xf3f8, 0xf40f, 0xf428, + 0xf447, 0xf465, 0xf484, 0xf499, 0xf4ac, 0xf4bc, 0xf4d5, 0xf4f1, + 0xf501, 0xf511, 0xf525, 0xf536, 0xf548, 0xf559, 0xf574, 0xf58e, + 0xf5a7, 0xf5b5, 0xf5c3, 0xf5db, 0xf5f5, 0xf60c, 0xf61f, 0xf634, + 0xf649, 0xf657, 0xf666, 0xf675, 0xf692, 0xf6af, 0xf6cc, 0xf6e9, + // Entry 1400 - 143F + 0xf708, 0xf718, 0xf728, 0xf738, 0xf749, 0xf75a, 0xf76c, 0xf77d, + 0xf78e, 0xf79f, 0xf7b0, 0xf7c1, 0xf7d2, 0xf7e3, 0xf7f4, 0xf805, + 0xf816, 0xf827, 0xf83b, 0xf84f, 0xf862, 0xf872, 0xf882, 0xf892, + 0xf8a3, 0xf8b4, 0xf8c6, 0xf8d7, 0xf8e8, 0xf8f9, 0xf90a, 0xf91b, + 0xf92c, 0xf93d, 0xf94e, 0xf95f, 0xf970, 0xf981, 0xf992, 0xf9a6, + 0xf9ba, 0xf9cf, 0xf9ec, 0xfa09, 0xfa17, 0xfa25, 0xfa33, 0xfa42, + 0xfa51, 0xfa61, 0xfa70, 0xfa7f, 0xfa8e, 0xfa9d, 0xfaac, 0xfabb, + 0xfaca, 0xfad9, 0xfae8, 0xfaf7, 0xfb06, 0xfb15, 0xfb27, 0xfb39, + // Entry 1440 - 147F + 0xfb4a, 0xfb5b, 0xfb6c, 0xfb7e, 0xfb90, 0xfba3, 0xfbb5, 0xfbc7, + 0xfbd9, 0xfbeb, 0xfbfd, 0xfc0f, 0xfc21, 0xfc33, 0xfc45, 0xfc57, + 0xfc6c, 0xfc81, 0xfc90, 0xfca0, 0xfcaf, 0xfcbf, 0xfccf, 0xfcde, + 0xfcee, 0xfcfd, 0xfd0d, 0xfd1d, 0xfd2c, 0xfd3d, 0xfd4c, 0xfd5d, + 0xfd6d, 0xfd7c, 0xfd8c, 0xfd9b, 0xfdab, 0xfdba, 0xfdc9, 0xfdd9, + 0xfde8, 0xfdf8, 0xfe07, 0xfe16, 0xfe25, 0xfe34, 0xfe43, 0xfe53, + 0xfe63, 0xfe72, 0xfe81, 0xfe90, 0xfe9f, 0xfeba, 0xfed5, 0xfeef, + 0xff0a, 0xff24, 0xff3f, 0xff5a, 0xff76, 0xff90, 0xffab, 0xffc5, + // Entry 1480 - 14BF + 0xffe0, 0xfffa, 0x0015, 0x0039, 0x005d, 0x0078, 0x008f, 0x00a6, + 0x00b9, 0x00cb, 0x00de, 0x00f0, 0x0103, 0x0115, 0x0128, 0x013b, + 0x014e, 0x0161, 0x0174, 0x0186, 0x0199, 0x01ac, 0x01bf, 0x01d2, + 0x01e4, 0x01f6, 0x020e, 0x0224, 0x0236, 0x0247, 0x0257, 0x026d, + 0x027f, 0x028f, 0x02a7, 0x02b8, 0x02c8, 0x02dd, 0x02ec, 0x0301, + 0x031b, 0x032d, 0x033e, 0x0354, 0x0366, 0x0380, 0x0398, 0x03ab, + 0x03bb, 0x03ca, 0x03d9, 0x03ea, 0x03fa, 0x040a, 0x0419, 0x042a, + 0x043b, 0x044b, 0x0465, 0x0480, 0x049a, 0x04b4, 0x04cf, 0x04ea, + // Entry 14C0 - 14FF + 0x050a, 0x0529, 0x0548, 0x0568, 0x0577, 0x0589, 0x0598, 0x05ab, + 0x05ba, 0x05cd, 0x05e7, 0x060e, 0x0624, 0x063e, 0x064e, 0x0673, + 0x0698, 0x06bf, 0x06d8, 0x06ec, 0x06ff, 0x0712, 0x0727, 0x073b, + 0x074f, 0x0762, 0x0777, 0x078c, 0x07a0, 0x07b2, 0x07c4, 0x07d6, + 0x07e8, 0x07fa, 0x080d, 0x0820, 0x0833, 0x0846, 0x085a, 0x086d, + 0x0880, 0x0893, 0x08a6, 0x08b9, 0x08cc, 0x08df, 0x08f3, 0x0906, + 0x0919, 0x092d, 0x0940, 0x0953, 0x0966, 0x0979, 0x098c, 0x099f, + 0x09b3, 0x09c7, 0x09da, 0x09ee, 0x0a02, 0x0a16, 0x0a2a, 0x0a3e, + // Entry 1500 - 153F + 0x0a63, 0x0a7a, 0x0a91, 0x0aa8, 0x0abf, 0x0ad7, 0x0aef, 0x0b08, + 0x0b20, 0x0b38, 0x0b50, 0x0b68, 0x0b80, 0x0b98, 0x0bb0, 0x0bc9, + 0x0be1, 0x0bfa, 0x0c12, 0x0c2a, 0x0c42, 0x0c5b, 0x0c74, 0x0c8d, + 0x0ca6, 0x0cbf, 0x0cd6, 0x0ced, 0x0d05, 0x0d1d, 0x0d34, 0x0d4d, + 0x0d65, 0x0d7d, 0x0d95, 0x0dad, 0x0dc6, 0x0dde, 0x0df6, 0x0e0e, + 0x0e26, 0x0e3f, 0x0e58, 0x0e71, 0x0e89, 0x0ea2, 0x0ebb, 0x0ed4, + 0x0eed, 0x0f07, 0x0f21, 0x0f3b, 0x0f56, 0x0f7c, 0x0fa1, 0x0fc1, + 0x0fe2, 0x100c, 0x102c, 0x1052, 0x106d, 0x1088, 0x10a4, 0x10c1, + // Entry 1540 - 157F + 0x10dd, 0x10fa, 0x1118, 0x1135, 0x1152, 0x116e, 0x118a, 0x11a6, + 0x11c3, 0x11e0, 0x11fd, 0x1219, 0x1235, 0x1256, 0x1278, 0x129c, + 0x12c0, 0x12e3, 0x1307, 0x132b, 0x1350, 0x1373, 0x1397, 0x13bb, + 0x13df, 0x1403, 0x1426, 0x1446, 0x1467, 0x148b, 0x14ac, 0x14d0, + 0x14e5, 0x14fa, 0x1510, 0x1526, 0x153c, 0x1552, 0x1569, 0x157f, + 0x1595, 0x15ac, 0x15c2, 0x15d8, 0x15ee, 0x1604, 0x161a, 0x1630, + 0x1647, 0x165e, 0x1676, 0x168c, 0x16a2, 0x16b8, 0x16ce, 0x16ec, + 0x1703, 0x1722, 0x1738, 0x1756, 0x176d, 0x178c, 0x17a3, 0x17b9, + // Entry 1580 - 15BF + 0x17d0, 0x17e6, 0x17fd, 0x1813, 0x182f, 0x184b, 0x1867, 0x1883, + 0x189f, 0x18bb, 0x18d7, 0x18f4, 0x1910, 0x192c, 0x194f, 0x1972, + 0x198f, 0x19af, 0x19cf, 0x19e6, 0x19fd, 0x1a15, 0x1a2d, 0x1a45, + 0x1a5d, 0x1a75, 0x1a93, 0x1ab1, 0x1ace, 0x1aec, 0x1b0f, 0x1b2d, + 0x1b4b, 0x1b68, 0x1b86, 0x1ba6, 0x1bc6, 0x1be9, 0x1c03, 0x1c12, + 0x1c22, 0x1c31, 0x1c41, 0x1c51, 0x1c60, 0x1c70, 0x1c7f, 0x1c8f, + 0x1c9f, 0x1cae, 0x1cbe, 0x1ccd, 0x1cdd, 0x1cec, 0x1cfb, 0x1d0b, + 0x1d1a, 0x1d2a, 0x1d39, 0x1d48, 0x1d57, 0x1d66, 0x1d75, 0x1d85, + // Entry 15C0 - 15FF + 0x1d95, 0x1da4, 0x1db3, 0x1dc4, 0x1dd4, 0x1de6, 0x1df8, 0x1e0a, + 0x1e1d, 0x1e30, 0x1e43, 0x1e56, 0x1e68, 0x1e7a, 0x1e93, 0x1eac, + 0x1ec5, 0x1eda, 0x1ef0, 0x1f0b, 0x1f20, 0x1f35, 0x1f4a, 0x1f5f, + 0x1f74, 0x1f89, 0x1f9d, 0x1fb1, 0x1fc0, 0x1fce, 0x1fe4, 0x1ff7, + 0x2007, 0x2016, 0x2025, 0x2036, 0x2046, 0x2056, 0x2065, 0x2076, + 0x2087, 0x2097, 0x20a7, 0x20b7, 0x20c8, 0x20d9, 0x20e9, 0x20f9, + 0x2109, 0x211a, 0x212a, 0x213a, 0x214b, 0x215b, 0x216b, 0x217b, + 0x218b, 0x219b, 0x21ac, 0x21be, 0x21ce, 0x21dd, 0x21ec, 0x21fc, + // Entry 1600 - 163F + 0x220c, 0x221b, 0x222b, 0x223a, 0x224a, 0x2259, 0x226a, 0x227a, + 0x228e, 0x22a2, 0x22b6, 0x22ca, 0x22de, 0x22f8, 0x2311, 0x232b, + 0x2345, 0x2360, 0x2379, 0x2392, 0x23ac, 0x23c7, 0x23e1, 0x23fb, + 0x2415, 0x242e, 0x2447, 0x2461, 0x247c, 0x2496, 0x24af, 0x24c9, + 0x24e2, 0x24fc, 0x2517, 0x2531, 0x254a, 0x2564, 0x257d, 0x2597, + 0x25b1, 0x25cb, 0x25e4, 0x25fd, 0x2616, 0x2630, 0x264a, 0x2664, + 0x267d, 0x2696, 0x26af, 0x26ca, 0x26e5, 0x26ff, 0x2719, 0x2734, + 0x274e, 0x2774, 0x278d, 0x27a6, 0x27be, 0x27d7, 0x27ef, 0x2808, + // Entry 1640 - 167F + 0x2820, 0x2839, 0x2852, 0x286b, 0x2885, 0x289e, 0x28b7, 0x28d1, + 0x28eb, 0x2904, 0x291e, 0x2939, 0x2953, 0x296d, 0x2987, 0x29a1, + 0x29bb, 0x29d2, 0x29e9, 0x29ff, 0x2a14, 0x2a29, 0x2a40, 0x2a56, + 0x2a6c, 0x2a81, 0x2a98, 0x2aaf, 0x2ac5, 0x2adf, 0x2af3, 0x2b08, + 0x2b1f, 0x2b35, 0x2b4a, 0x2b5f, 0x2b75, 0x2b8b, 0x2ba6, 0x2bc0, + 0x2bda, 0x2bf5, 0x2c0a, 0x2c24, 0x2c3d, 0x2c56, 0x2c70, 0x2c8a, + 0x2ca0, 0x2cb5, 0x2cc9, 0x2cdd, 0x2cf2, 0x2d07, 0x2d21, 0x2d3a, + 0x2d53, 0x2d6d, 0x2d81, 0x2d9a, 0x2db2, 0x2dca, 0x2de3, 0x2dfc, + // Entry 1680 - 16BF + 0x2e0e, 0x2e20, 0x2e33, 0x2e47, 0x2e59, 0x2e6b, 0x2e7d, 0x2e90, + 0x2ea2, 0x2eb4, 0x2ec6, 0x2ed9, 0x2eeb, 0x2efd, 0x2f10, 0x2f24, + 0x2f36, 0x2f48, 0x2f5a, 0x2f6c, 0x2f7e, 0x2f8f, 0x2fa1, 0x2fb6, + 0x2fcb, 0x2fe0, 0x2ff5, 0x300b, 0x301b, 0x3032, 0x3049, 0x3061, + 0x3079, 0x308f, 0x30a6, 0x30bd, 0x30d0, 0x30e7, 0x30ff, 0x3115, + 0x312b, 0x3142, 0x3155, 0x3169, 0x3183, 0x3195, 0x31ae, 0x31c2, + 0x31d9, 0x31f1, 0x3207, 0x321e, 0x3230, 0x3242, 0x3259, 0x3271, + 0x3288, 0x329e, 0x32b4, 0x32cb, 0x32dd, 0x32f3, 0x330a, 0x331c, + // Entry 16C0 - 16FF + 0x332f, 0x3341, 0x3354, 0x3366, 0x337e, 0x3396, 0x33ad, 0x33c4, + 0x33d7, 0x33e8, 0x33fe, 0x340f, 0x3421, 0x3432, 0x3444, 0x3456, + 0x3468, 0x347b, 0x3493, 0x34b4, 0x34d5, 0x34f8, 0x3512, 0x3533, + 0x3551, 0x357d, 0x3597, 0x35b1, 0x35cb, 0x35de, 0x35f3, 0x360e, + 0x3624, 0x363f, 0x3654, 0x366a, 0x3680, 0x3697, 0x36ac, 0x36c2, + 0x36d7, 0x36f3, 0x3709, 0x371e, 0x3734, 0x374a, 0x3760, 0x377b, + 0x3797, 0x37ad, 0x37c1, 0x37d5, 0x37ef, 0x3809, 0x3823, 0x3838, + 0x384d, 0x386a, 0x388e, 0x38a6, 0x38bd, 0x38d4, 0x38ed, 0x3905, + // Entry 1700 - 173F + 0x391d, 0x3934, 0x394d, 0x3966, 0x397e, 0x3996, 0x39ad, 0x39c4, + 0x39dd, 0x39f5, 0x3a0d, 0x3a24, 0x3a3d, 0x3a56, 0x3a6e, 0x3a81, + 0x3a98, 0x3aab, 0x3abd, 0x3ace, 0x3ae2, 0x3b05, 0x3b1c, 0x3b2e, + 0x3b43, 0x3b58, 0x3b70, 0x3b82, 0x3b95, 0x3bb8, 0x3bd0, 0x3be2, + 0x3bfb, 0x3c0f, 0x3c22, 0x3c3d, 0x3c56, 0x3c76, 0x3ca1, 0x3ccd, + 0x3ce8, 0x3d0a, 0x3d25, 0x3d42, 0x3d59, 0x3d71, 0x3d84, 0x3d98, + 0x3dab, 0x3dc0, 0x3ddc, 0x3df1, 0x3e0d, 0x3e22, 0x3e3e, 0x3e55, + 0x3e73, 0x3e8b, 0x3eaa, 0x3ebf, 0x3ed5, 0x3eea, 0x3f06, 0x3f18, + // Entry 1740 - 177F + 0x3f34, 0x3f46, 0x3f5d, 0x3f70, 0x3f82, 0x3f99, 0x3fab, 0x3fc2, + 0x3fd5, 0x3fed, 0x400f, 0x4031, 0x4053, 0x406c, 0x407e, 0x4095, + 0x40a7, 0x40be, 0x40d0, 0x40e2, 0x40fa, 0x410c, 0x4126, 0x4138, + 0x414a, 0x415c, 0x416e, 0x4180, 0x4197, 0x41ae, 0x41c0, 0x41d2, + 0x41e7, 0x4201, 0x4218, 0x4234, 0x424c, 0x4269, 0x4284, 0x42a6, + 0x42c2, 0x42e5, 0x42ff, 0x431e, 0x433f, 0x4365, 0x437e, 0x439e, + 0x43b0, 0x43c9, 0x43e3, 0x43fd, 0x4415, 0x442d, 0x4446, 0x4462, + 0x4475, 0x4487, 0x4499, 0x44ad, 0x44c0, 0x44d3, 0x44e5, 0x44f9, + // Entry 1780 - 17BF + 0x450d, 0x4520, 0x452e, 0x453d, 0x454b, 0x4563, 0x4576, 0x458c, + 0x459d, 0x45b9, 0x45d5, 0x45f1, 0x460d, 0x4630, 0x464c, 0x4669, + 0x4686, 0x46a3, 0x46c4, 0x46eb, 0x4712, 0x473a, 0x4762, 0x478b, + 0x47c0, 0x47f5, 0x481c, 0x4842, 0x486d, 0x4898, 0x48c5, 0x48f2, + 0x491d, 0x4948, 0x4975, 0x49a2, 0x49cd, 0x49e4, 0x49fc, 0x4a14, + 0x4a26, 0x4a38, 0x4a4a, 0x4a5d, 0x4a6f, 0x4a81, 0x4a94, 0x4aa7, + 0x4aba, 0x4acd, 0x4ae1, 0x4af4, 0x4b07, 0x4b1a, 0x4b2e, 0x4b41, + 0x4b54, 0x4b67, 0x4b7a, 0x4b8d, 0x4ba0, 0x4bb3, 0x4bc6, 0x4bd9, + // Entry 17C0 - 17FF + 0x4bec, 0x4bff, 0x4c12, 0x4c25, 0x4c38, 0x4c4b, 0x4c6d, 0x4c8e, + 0x4cae, 0x4ccb, 0x4ce7, 0x4d06, 0x4d23, 0x4d3f, 0x4d5e, 0x4d74, + 0x4d89, 0x4dad, 0x4dd1, 0x4de5, 0x4df9, 0x4e0d, 0x4e20, 0x4e33, + 0x4e48, 0x4e5c, 0x4e70, 0x4e83, 0x4e98, 0x4ead, 0x4ec1, 0x4ed3, + 0x4ee7, 0x4efb, 0x4f0f, 0x4f27, 0x4f3f, 0x4f4d, 0x4f66, 0x4f75, + 0x4f8f, 0x4fa9, 0x4fb8, 0x4fcc, 0x4fdb, 0x4ff5, 0x5004, 0x501e, + 0x502d, 0x5047, 0x505d, 0x506c, 0x5086, 0x5095, 0x50a4, 0x50b3, + 0x50cd, 0x50dc, 0x50f6, 0x510e, 0x5126, 0x5135, 0x514f, 0x5169, + // Entry 1800 - 183F + 0x5178, 0x5192, 0x51a2, 0x51b1, 0x51cb, 0x51db, 0x51ea, 0x51fa, + 0x520a, 0x5218, 0x5226, 0x5236, 0x5248, 0x5261, 0x5274, 0x5286, + 0x529d, 0x52af, 0x52c6, 0x52d8, 0x52fc, 0x5313, 0x5329, 0x5337, + 0x5347, 0x5362, 0x537f, 0x5397, 0x53b2, 0x53c2, 0x53d3, 0x53e4, + 0x53f4, 0x5405, 0x5416, 0x5426, 0x5437, 0x5447, 0x5458, 0x5468, + 0x5479, 0x5489, 0x5499, 0x54a9, 0x54ba, 0x54cb, 0x54db, 0x54ec, + 0x54fc, 0x550d, 0x551d, 0x552e, 0x553f, 0x5551, 0x5562, 0x5572, + 0x5582, 0x5592, 0x55a2, 0x55b3, 0x55c3, 0x55d3, 0x55e4, 0x55f4, + // Entry 1840 - 187F + 0x5603, 0x561d, 0x5637, 0x564b, 0x565e, 0x5671, 0x5685, 0x5698, + 0x56ac, 0x56bf, 0x56d6, 0x56ed, 0x5704, 0x571b, 0x5732, 0x5749, + 0x5760, 0x577d, 0x5797, 0x57a6, 0x57b7, 0x57d0, 0x57f5, 0x580e, + 0x582e, 0x5847, 0x5858, 0x5868, 0x5878, 0x588a, 0x589b, 0x58ac, + 0x58bc, 0x58ce, 0x58e0, 0x58f1, 0x5902, 0x5914, 0x5925, 0x5938, + 0x594a, 0x595c, 0x5970, 0x5983, 0x5996, 0x59a8, 0x59bc, 0x59d0, + 0x59e3, 0x59f5, 0x5a07, 0x5a19, 0x5a2c, 0x5a3e, 0x5a51, 0x5a64, + 0x5a77, 0x5a8a, 0x5a9d, 0x5aaf, 0x5ac1, 0x5ad3, 0x5ae6, 0x5af8, + // Entry 1880 - 18BF + 0x5b0a, 0x5b1c, 0x5b2e, 0x5b41, 0x5b53, 0x5b65, 0x5b77, 0x5b8a, + 0x5b9c, 0x5baf, 0x5bc1, 0x5bd4, 0x5be6, 0x5bf8, 0x5c0a, 0x5c1d, + 0x5c36, 0x5c52, 0x5c60, 0x5c71, 0x5c7e, 0x5c99, 0x5cbb, 0x5cdb, + 0x5cff, 0x5d1d, 0x5d3a, 0x5d57, 0x5d7c, 0x5da0, 0x5dbe, 0x5de0, + 0x5e01, 0x5e25, 0x5e48, 0x5e69, 0x5e90, 0x5eb6, 0x5edc, 0x5f02, + 0x5f15, 0x5f25, 0x5f37, 0x5f4b, 0x5f70, 0x5fa4, 0x5fcd, 0x5ffe, + 0x6015, 0x6050, 0x6069, 0x6082, 0x609d, 0x60b1, 0x60ca, 0x60e5, + 0x6115, 0x6140, 0x615a, 0x6173, 0x6195, 0x61b0, 0x61d4, 0x61f7, + // Entry 18C0 - 18FF + 0x621c, 0x623c, 0x625c, 0x627b, 0x62a4, 0x62b5, 0x62d6, 0x62ee, + 0x630d, 0x632f, 0x6346, 0x6365, 0x637c, 0x6392, 0x63a8, 0x63bd, + 0x63d9, 0x63f5, 0x6412, 0x642e, 0x6451, 0x646d, 0x6489, 0x64a7, + 0x64c3, 0x64e3, 0x64fe, 0x651a, 0x6536, 0x655e, 0x657a, 0x659f, + 0x65bb, 0x65dc, 0x65f9, 0x661b, 0x6644, 0x6660, 0x667d, 0x669a, + 0x66ba, 0x66d6, 0x66fb, 0x671e, 0x673a, 0x6756, 0x6773, 0x679c, + 0x67c0, 0x67dc, 0x67f8, 0x6814, 0x6832, 0x6857, 0x6867, 0x6887, + 0x68a7, 0x68c4, 0x68e2, 0x6900, 0x6920, 0x6939, 0x6953, 0x696c, + // Entry 1900 - 193F + 0x698c, 0x69a5, 0x69be, 0x69e0, 0x69f9, 0x6a12, 0x6a2b, 0x6a44, + 0x6a5d, 0x6a76, 0x6a8f, 0x6aa8, 0x6aca, 0x6ae3, 0x6afd, 0x6b16, + 0x6b2f, 0x6b48, 0x6b61, 0x6b7a, 0x6b91, 0x6baf, 0x6bca, 0x6be9, + 0x6c00, 0x6c17, 0x6c2e, 0x6c49, 0x6c65, 0x6c88, 0x6c9f, 0x6cbd, + 0x6cd4, 0x6ceb, 0x6d04, 0x6d1b, 0x6d37, 0x6d57, 0x6d7a, 0x6d91, + 0x6da8, 0x6dbf, 0x6ddf, 0x6dfd, 0x6e14, 0x6e2d, 0x6e47, 0x6e68, + 0x6e83, 0x6ea2, 0x6ebb, 0x6ed9, 0x6ef7, 0x6f15, 0x6f33, 0x6f54, + 0x6f76, 0x6f96, 0x6fb6, 0x6fd6, 0x6feb, 0x7011, 0x7037, 0x705d, + // Entry 1940 - 197F + 0x7083, 0x70a9, 0x70cf, 0x70f5, 0x7128, 0x714e, 0x7174, 0x719a, + 0x71b5, 0x71d0, 0x71ec, 0x7214, 0x723c, 0x725f, 0x727f, 0x72a7, + 0x72cd, 0x72f3, 0x7319, 0x733f, 0x7365, 0x738b, 0x73b1, 0x73d7, + 0x73fd, 0x7423, 0x7449, 0x746f, 0x7497, 0x74bd, 0x74e3, 0x7509, + 0x7531, 0x755d, 0x7584, 0x75ac, 0x75d9, 0x760f, 0x763b, 0x7663, + 0x7690, 0x76ba, 0x76e2, 0x770c, 0x772e, 0x7745, 0x7766, 0x777f, + 0x77a4, 0x77bb, 0x77e6, 0x7804, 0x7822, 0x7845, 0x785f, 0x787e, + 0x78a9, 0x78d2, 0x78fd, 0x7926, 0x7945, 0x7966, 0x7992, 0x79b8, + // Entry 1980 - 19BF + 0x79e3, 0x7a02, 0x7a20, 0x7a39, 0x7a5a, 0x7a73, 0x7a9c, 0x7ab7, + 0x7ad4, 0x7af3, 0x7b14, 0x7b32, 0x7b49, 0x7b74, 0x7b95, 0x7bae, + 0x7bc9, 0x7be6, 0x7c03, 0x7c18, 0x7c31, 0x7c47, 0x7c5d, 0x7c73, + 0x7c89, 0x7ca4, 0x7cbf, 0x7ce3, 0x7cf9, 0x7d0f, 0x7d30, 0x7d46, + 0x7d5c, 0x7d6e, 0x7d80, 0x7d92, 0x7dc5, 0x7de4, 0x7e03, 0x7e22, + 0x7e48, 0x7e6e, 0x7e8e, 0x7eac, 0x7ed2, 0x7ef0, 0x7f0e, 0x7f34, + 0x7f5a, 0x7f78, 0x7f9e, 0x7fc4, 0x7fea, 0x8008, 0x802b, 0x8049, + 0x806b, 0x8089, 0x80aa, 0x80cc, 0x80ea, 0x8121, 0x8160, 0x817e, + // Entry 19C0 - 19FF + 0x819e, 0x81dd, 0x81fb, 0x8228, 0x8255, 0x8282, 0x8299, 0x82b0, + 0x82d5, 0x82f4, 0x8312, 0x8344, 0x836a, 0x838e, 0x83b3, 0x83d6, + 0x83fb, 0x841e, 0x8444, 0x8468, 0x8495, 0x84c0, 0x84e5, 0x8508, + 0x852d, 0x8550, 0x8576, 0x859a, 0x85bd, 0x85de, 0x860a, 0x8634, + 0x8660, 0x868a, 0x86b6, 0x86e0, 0x870c, 0x8736, 0x875d, 0x8782, + 0x87af, 0x87da, 0x87ff, 0x8822, 0x8844, 0x8864, 0x8889, 0x88ac, + 0x88d1, 0x88f4, 0x8919, 0x893c, 0x895f, 0x8980, 0x89a7, 0x89cc, + 0x89f3, 0x8a18, 0x8a47, 0x8a74, 0x8a95, 0x8ab4, 0x8ad9, 0x8afc, + // Entry 1A00 - 1A3F + 0x8b22, 0x8b46, 0x8b6b, 0x8b8e, 0x8bbe, 0x8bec, 0x8c12, 0x8c36, + 0x8c62, 0x8c8c, 0x8cad, 0x8ccc, 0x8cf1, 0x8d14, 0x8d39, 0x8d5c, + 0x8d81, 0x8da4, 0x8dc9, 0x8dec, 0x8e12, 0x8e36, 0x8e62, 0x8e8c, + 0x8eb7, 0x8ee0, 0x8f0f, 0x8f3c, 0x8f68, 0x8f92, 0x8fbe, 0x8fe8, + 0x9009, 0x9028, 0x904d, 0x9070, 0x9095, 0x90b8, 0x90dd, 0x9100, + 0x9130, 0x915e, 0x9184, 0x91a8, 0x91cd, 0x91f0, 0x9215, 0x9238, + 0x9267, 0x9294, 0x92c3, 0x92f0, 0x9323, 0x9354, 0x9379, 0x939c, + 0x93c1, 0x93e4, 0x940a, 0x942e, 0x945a, 0x9484, 0x94af, 0x94d8, + // Entry 1A40 - 1A7F + 0x94ff, 0x9524, 0x9550, 0x957a, 0x95a5, 0x95ce, 0x95fe, 0x962c, + 0x964d, 0x966c, 0x9691, 0x96b4, 0x96d5, 0x96f4, 0x9715, 0x9734, + 0x9759, 0x977c, 0x97a1, 0x97c4, 0x97e9, 0x980c, 0x9831, 0x9854, + 0x9879, 0x989c, 0x98c1, 0x98e4, 0x990a, 0x992e, 0x9953, 0x9976, + 0x999c, 0x99c0, 0x99e4, 0x9a07, 0x9a2b, 0x9a4f, 0x9a78, 0x9aa0, + 0x9ace, 0x9af8, 0x9b14, 0x9b2c, 0x9b51, 0x9b74, 0x9b9a, 0x9bbe, + 0x9bee, 0x9c1c, 0x9c4c, 0x9c7a, 0x9caf, 0x9ce2, 0x9d12, 0x9d40, + 0x9d74, 0x9da6, 0x9dd1, 0x9dfa, 0x9e25, 0x9e4e, 0x9e7e, 0x9eac, + // Entry 1A80 - 1ABF + 0x9ed7, 0x9f00, 0x9f2f, 0x9f5c, 0x9f81, 0x9fa4, 0x9fca, 0x9fee, + 0xa00f, 0xa02e, 0xa05e, 0xa08c, 0xa0bc, 0xa0ea, 0xa11f, 0xa152, + 0xa182, 0xa1b0, 0xa1e4, 0xa216, 0xa23c, 0xa260, 0xa285, 0xa2a8, + 0xa2cd, 0xa2f0, 0xa316, 0xa33a, 0xa36a, 0xa398, 0xa3c8, 0xa3f6, + 0xa42b, 0xa45e, 0xa48e, 0xa4bc, 0xa4f0, 0xa522, 0xa54c, 0xa574, + 0xa59e, 0xa5c6, 0xa5f5, 0xa622, 0xa64c, 0xa674, 0xa6a2, 0xa6ce, + 0xa6f3, 0xa716, 0xa73c, 0xa760, 0xa78a, 0xa7b2, 0xa7dc, 0xa804, + 0xa833, 0xa860, 0xa88a, 0xa8b2, 0xa8e0, 0xa90c, 0xa92d, 0xa94c, + // Entry 1AC0 - 1AFF + 0xa971, 0xa994, 0xa9ba, 0xa9de, 0xa9ff, 0xaa1e, 0xaa42, 0xaa64, + 0xaa87, 0xaaa8, 0xaac8, 0xaae6, 0xab09, 0xab2c, 0xab59, 0xab86, + 0xabb2, 0xabde, 0xac11, 0xac44, 0xac69, 0xac8e, 0xacbd, 0xacec, + 0xad1a, 0xad48, 0xad7d, 0xadb2, 0xadd7, 0xadfc, 0xae2b, 0xae5a, + 0xae88, 0xaeb6, 0xaedd, 0xaf04, 0xaf35, 0xaf66, 0xaf96, 0xafc6, + 0xafe7, 0xb008, 0xb033, 0xb05e, 0xb088, 0xb0b2, 0xb0e3, 0xb114, + 0xb137, 0xb15a, 0xb187, 0xb1b4, 0xb1e0, 0xb20c, 0xb23f, 0xb272, + 0xb294, 0xb2b6, 0xb2e2, 0xb30e, 0xb339, 0xb364, 0xb396, 0xb3c8, + // Entry 1B00 - 1B3F + 0xb3ec, 0xb410, 0xb43e, 0xb46c, 0xb499, 0xb4c6, 0xb4fa, 0xb52e, + 0xb553, 0xb578, 0xb5a7, 0xb5d6, 0xb604, 0xb632, 0xb659, 0xb680, + 0xb6b1, 0xb6e2, 0xb712, 0xb742, 0xb767, 0xb78c, 0xb7bb, 0xb7ea, + 0xb818, 0xb846, 0xb87b, 0xb8b0, 0xb8d7, 0xb908, 0xb938, 0xb96f, + 0xb992, 0xb9b5, 0xb9e2, 0xba0f, 0xba3b, 0xba67, 0xba9a, 0xbacd, + 0xbaf2, 0xbb17, 0xbb46, 0xbb75, 0xbba3, 0xbbd1, 0xbc06, 0xbc3b, + 0xbc5e, 0xbc80, 0xbca5, 0xbcc9, 0xbcea, 0xbd0a, 0xbd2c, 0xbd4d, + 0xbd72, 0xbd96, 0xbdbb, 0xbddf, 0xbe02, 0xbe24, 0xbe59, 0xbe8e, + // Entry 1B40 - 1B7F + 0xbecd, 0xbf0c, 0xbf4a, 0xbf88, 0xbfcd, 0xc012, 0xc04a, 0xc082, + 0xc0c4, 0xc106, 0xc147, 0xc188, 0xc1d0, 0xc218, 0xc24b, 0xc27e, + 0xc2bb, 0xc2f8, 0xc334, 0xc370, 0xc3b3, 0xc3f6, 0xc42c, 0xc462, + 0xc4a2, 0xc4e2, 0xc521, 0xc560, 0xc5a6, 0xc5ec, 0xc621, 0xc656, + 0xc695, 0xc6d4, 0xc712, 0xc750, 0xc795, 0xc7da, 0xc812, 0xc84a, + 0xc88c, 0xc8ce, 0xc90f, 0xc950, 0xc998, 0xc9e0, 0xca04, 0xca28, + 0xca5d, 0xca88, 0xcabc, 0xcae5, 0xcb20, 0xcb46, 0xcb6c, 0xcb91, + 0xcbb5, 0xcbe3, 0xcbf0, 0xcc04, 0xcc0f, 0xcc20, 0xcc3f, 0xcc72, + // Entry 1B80 - 1BBF + 0xcc9b, 0xcccd, 0xccf4, 0xcd2d, 0xcd54, 0xcd7a, 0xcd9d, 0xcdbf, + 0xcdeb, 0xce00, 0xce14, 0xce2f, 0xce52, 0xce75, 0xcea5, 0xced4, + 0xcefc, 0xcf32, 0xcf57, 0xcf7c, 0xcfa0, 0xcfc3, 0xcfd8, 0xcfec, + 0xd007, 0xd02d, 0xd053, 0xd086, 0xd0b8, 0xd0d9, 0xd0fa, 0xd125, + 0xd15e, 0xd186, 0xd1ae, 0xd1d5, 0xd1fb, 0xd21e, 0xd237, 0xd24f, + 0xd25a, 0xd28f, 0xd2ba, 0xd2ee, 0xd317, 0xd352, 0xd379, 0xd39f, + 0xd3c4, 0xd3e8, 0xd416, 0xd420, 0xd42b, 0xd432, 0xd439, 0xd441, + 0xd449, 0xd45b, 0xd46c, 0xd47c, 0xd488, 0xd499, 0xd4a3, 0xd4ad, + // Entry 1BC0 - 1BFF + 0xd4bd, 0xd4d2, 0xd4e3, 0xd4f5, 0xd507, 0xd50d, 0xd520, 0xd52b, + 0xd532, 0xd539, 0xd547, 0xd55b, 0xd56a, 0xd584, 0xd59f, 0xd5ba, + 0xd5df, 0xd5f9, 0xd614, 0xd62f, 0xd654, 0xd65a, 0xd667, 0xd66d, + 0xd67e, 0xd68c, 0xd69a, 0xd6ad, 0xd6be, 0xd6cc, 0xd6df, 0xd6f6, + 0xd70d, 0xd727, 0xd73d, 0xd753, 0xd768, 0xd776, 0xd78b, 0xd790, + 0xd79c, 0xd7a8, 0xd7b6, 0xd7cb, 0xd7e0, 0xd7e5, 0xd80e, 0xd838, + 0xd846, 0xd85d, 0xd868, 0xd870, 0xd878, 0xd885, 0xd89a, 0xd8a2, + 0xd8af, 0xd8bd, 0xd8db, 0xd8fa, 0xd90e, 0xd927, 0xd940, 0xd950, + // Entry 1C00 - 1C3F + 0xd965, 0xd97b, 0xd992, 0xd99e, 0xd9b0, 0xd9b8, 0xd9d8, 0xd9ed, + 0xd9f7, 0xda08, 0xda1f, 0xda34, 0xda43, 0xda57, 0xda6b, 0xda7e, + 0xda8b, 0xda97, 0xda9f, 0xdab1, 0xdaca, 0xdad5, 0xdae9, 0xdaf8, + 0xdb0b, 0xdb19, 0xdb2e, 0xdb43, 0xdb57, 0xdb6e, 0xdb88, 0xdba3, + 0xdbbe, 0xdbda, 0xdbef, 0xdc03, 0xdc13, 0xdc33, 0xdc43, 0xdc53, + 0xdc62, 0xdc73, 0xdc84, 0xdc94, 0xdca9, 0xdcba, 0xdcd1, 0xdced, + 0xdd0a, 0xdd2a, 0xdd38, 0xdd45, 0xdd52, 0xdd61, 0xdd6f, 0xdd7d, + 0xdd8a, 0xdd99, 0xdda8, 0xddb6, 0xddc9, 0xddd8, 0xdded, 0xde07, + // Entry 1C40 - 1C7F + 0xde22, 0xde40, 0xde5e, 0xde7c, 0xde9a, 0xdebc, 0xdeda, 0xdef8, + 0xdf16, 0xdf34, 0xdf52, 0xdf70, 0xdf8e, 0xdfac, 0xdfbe, 0xdfc8, + 0xdfd5, 0xdfe6, 0xdfef, 0xdff8, 0xe002, 0xe00d, 0xe017, 0xe01f, + 0xe02e, 0xe037, 0xe040, 0xe048, 0xe053, 0xe05f, 0xe070, 0xe079, + 0xe085, 0xe091, 0xe09d, 0xe0a6, 0xe0b9, 0xe0c6, 0xe0d0, 0xe0e1, + 0xe0f2, 0xe102, 0xe10c, 0xe116, 0xe11f, 0xe13b, 0xe158, 0xe17c, + 0xe1a1, 0xe1c4, 0xe1e3, 0xe1fd, 0xe218, 0xe22e, 0xe24e, 0xe272, + 0xe28c, 0xe2a5, 0xe2bf, 0xe2d9, 0xe2f4, 0xe318, 0xe338, 0xe352, + // Entry 1C80 - 1CBF + 0xe36c, 0xe398, 0xe3b9, 0xe3e1, 0xe3f9, 0xe412, 0xe42d, 0xe44e, + 0xe473, 0xe4a3, 0xe4d2, 0xe4ec, 0xe507, 0xe51f, 0xe529, 0xe541, + 0xe558, 0xe566, 0xe578, 0xe57f, 0xe587, 0xe595, 0xe59c, 0xe5ad, + 0xe5bb, 0xe5cb, 0xe5e1, 0xe5f8, 0xe607, 0xe622, 0xe632, 0xe648, + 0xe658, 0xe666, 0xe674, 0xe68b, 0xe696, 0xe6af, 0xe6bf, 0xe6d6, + 0xe6ed, 0xe6fd, 0xe713, 0xe72a, 0xe73b, 0xe743, 0xe74f, 0xe75d, + 0xe76c, 0xe774, 0xe78b, 0xe795, 0xe79d, 0xe7ae, 0xe7c4, 0xe7e2, + 0xe7ed, 0xe7fa, 0xe80a, 0xe820, 0xe830, 0xe83e, 0xe84e, 0xe85e, + // Entry 1CC0 - 1CFF + 0xe86e, 0xe87e, 0xe88c, 0xe897, 0xe8a1, 0xe8ad, 0xe8b9, 0xe8cb, + 0xe8dc, 0xe8ea, 0xe900, 0xe919, 0xe934, 0xe94c, 0xe969, 0xe984, + 0xe99f, 0xe9bc, 0xe9d7, 0xe9f5, 0xea11, 0xea2d, 0xea49, 0xea65, + 0xea72, 0xea82, 0xea8a, 0xea96, 0xeaa4, 0xeabf, 0xeada, 0xeaf3, + 0xeb0c, 0xeb25, 0xeb3f, 0xeb58, 0xeb72, 0xeb8e, 0xeba9, 0xebc2, + 0xebdd, 0xebf7, 0xec14, 0xec30, 0xec4d, 0xec63, 0xec74, 0xec85, + 0xec98, 0xecaa, 0xecbc, 0xeccd, 0xece0, 0xecf3, 0xed05, 0xed16, + 0xed2a, 0xed3e, 0xed51, 0xed6a, 0xed84, 0xed9e, 0xedb5, 0xedcc, + // Entry 1D00 - 1D3F + 0xede5, 0xedfd, 0xee15, 0xee2c, 0xee45, 0xee5e, 0xee76, 0xee8d, + 0xeea7, 0xeec1, 0xeeda, 0xeef9, 0xef19, 0xef39, 0xef57, 0xef72, + 0xef8c, 0xefae, 0xefcb, 0xefe6, 0xf004, 0xf020, 0xf042, 0xf05d, + 0xf06d, 0xf07f, 0xf08e, 0xf09b, 0xf0ab, 0xf0ba, 0xf0ca, 0xf0d7, + 0xf0e7, 0xf0f7, 0xf107, 0xf117, 0xf132, 0xf14e, 0xf162, 0xf177, + 0xf191, 0xf1a9, 0xf1c4, 0xf1de, 0xf1f7, 0xf211, 0xf229, 0xf23f, + 0xf258, 0xf270, 0xf287, 0xf2a0, 0xf2ba, 0xf2d3, 0xf2ed, 0xf302, + 0xf31e, 0xf334, 0xf354, 0xf375, 0xf397, 0xf3ba, 0xf3e0, 0xf405, + // Entry 1D40 - 1D7F + 0xf427, 0xf445, 0xf461, 0xf494, 0xf4b3, 0xf4ce, 0xf4f1, 0xf516, + 0xf53a, 0xf55d, 0xf581, 0xf5a7, 0xf5cd, 0xf5f2, 0xf617, 0xf641, + 0xf666, 0xf67d, 0xf692, 0xf6aa, 0xf6c1, 0xf6ea, 0xf713, 0xf735, + 0xf758, 0xf77b, 0xf791, 0xf7a5, 0xf7bc, 0xf7d2, 0xf7e9, 0xf7fd, + 0xf814, 0xf82b, 0xf842, 0xf859, 0xf86f, 0xf886, 0xf89e, 0xf8b7, + 0xf8d7, 0xf8f9, 0xf90f, 0xf923, 0xf93a, 0xf950, 0xf966, 0xf97d, + 0xf992, 0xf9a5, 0xf9bb, 0xf9d0, 0xf9ec, 0xfa0b, 0xfa3e, 0xfa6f, + 0xfa89, 0xfaaf, 0xfacf, 0xfae9, 0xfb03, 0xfb16, 0xfb33, 0xfb5d, + // Entry 1D80 - 1DBF + 0xfb74, 0xfb98, 0xfbbd, 0xfbe2, 0xfc0d, 0xfc39, 0xfc65, 0xfc80, + 0xfc9c, 0xfcb8, 0xfcbf, 0xfcc9, 0xfcdd, 0xfce9, 0xfcfd, 0xfd06, + 0xfd0f, 0xfd14, 0xfd1e, 0xfd2f, 0xfd3f, 0xfd51, 0xfd6b, 0xfd83, + 0xfd8f, 0xfd9c, 0xfdab, 0xfdba, 0xfdc4, 0xfdd6, 0xfdde, 0xfdec, + 0xfdf5, 0xfe06, 0xfe13, 0xfe22, 0xfe2d, 0xfe36, 0xfe41, 0xfe50, + 0xfe58, 0xfe63, 0xfe68, 0xfe76, 0xfe85, 0xfe8c, 0xfe9b, 0xfea6, + 0xfeb5, 0xfec0, 0xfeca, 0xfed6, 0xfedb, 0xfee3, 0xfef2, 0xff01, + 0xff11, 0xff21, 0xff30, 0xff42, 0xff5c, 0xff7a, 0xff83, 0xff8a, + // Entry 1DC0 - 1DFF + 0xff8f, 0xff99, 0xffa2, 0xffa8, 0xffbc, 0xffc6, 0xffd4, 0xffe2, + 0xfff1, 0xfffa, 0x0008, 0x0011, 0x001c, 0x0033, 0x004e, 0x0064, + 0x008b, 0x00b6, 0x00c5, 0x00d8, 0x00f0, 0x00fc, 0x0108, 0x0115, + 0x0130, 0x0142, 0x0156, 0x016c, 0x0192, 0x01b4, 0x01c0, 0x01cc, + 0x01dc, 0x01e9, 0x01f7, 0x0200, 0x020e, 0x0219, 0x0227, 0x023d, + 0x0248, 0x025b, 0x0267, 0x0273, 0x0283, 0x0299, 0x02ae, 0x02c6, + 0x02dd, 0x02f7, 0x0311, 0x032e, 0x033c, 0x034d, 0x0354, 0x0365, + 0x0372, 0x0382, 0x03a0, 0x03c1, 0x03db, 0x03f8, 0x041b, 0x0441, + // Entry 1E00 - 1E3F + 0x045a, 0x0473, 0x0495, 0x04b7, 0x04bf, 0x04c7, 0x04db, 0x04ef, + 0x0508, 0x0521, 0x0531, 0x0541, 0x054a, 0x0555, 0x0564, 0x0575, + 0x058a, 0x05a1, 0x05c1, 0x05e3, 0x05fe, 0x061b, 0x0623, 0x063a, + 0x0648, 0x0657, 0x0669, 0x0684, 0x06a2, 0x06ac, 0x06b6, 0x06c2, + 0x06cf, 0x06dc, 0x06f2, 0x0706, 0x071b, 0x0734, 0x0742, 0x074e, + 0x075a, 0x0767, 0x0774, 0x0788, 0x0792, 0x079b, 0x07a4, 0x07ab, + 0x07b4, 0x07ba, 0x07be, 0x07c4, 0x07e7, 0x0811, 0x081f, 0x0827, + 0x0835, 0x0867, 0x087e, 0x0895, 0x08a7, 0x08c2, 0x08e0, 0x0907, + // Entry 1E40 - 1E7F + 0x0912, 0x091a, 0x0922, 0x093c, 0x0947, 0x094a, 0x094e, 0x0951, + 0x0965, 0x0973, 0x0984, 0x0994, 0x09a6, 0x09b1, 0x09c1, 0x09cd, + 0x09da, 0x09e8, 0x09ee, 0x0a13, 0x0a39, 0x0a50, 0x0a68, 0x0a7d, + 0x0a8d, 0x0a9e, 0x0aab, 0x0aba, 0x0acd, 0x0ad9, 0x0ae2, 0x0af7, + 0x0b09, 0x0b1e, 0x0b31, 0x0b47, 0x0b69, 0x0b8b, 0x0ba0, 0x0bb8, + 0x0bcc, 0x0be0, 0x0bf9, 0x0c12, 0x0c31, 0x0c53, 0x0c72, 0x0c94, + 0x0cb3, 0x0cd5, 0x0cf3, 0x0d11, 0x0d27, 0x0d4a, 0x0d6c, 0x0d98, + 0x0da9, 0x0dc4, 0x0dde, 0x0dfa, 0x0e20, 0x0e58, 0x0e96, 0x0eaf, + // Entry 1E80 - 1EBF + 0x0ec6, 0x0ee3, 0x0efb, 0x0f21, 0x0f45, 0x0f7b, 0x0fb7, 0x0fcc, + 0x0fe7, 0x1000, 0x100d, 0x101b, 0x1020, 0x102c, 0x103a, 0x1044, + 0x104f, 0x1058, 0x1064, 0x1071, 0x107b, 0x1086, 0x1097, 0x10a7, + 0x10b5, 0x10c2, 0x10d3, 0x10e1, 0x10e4, 0x10eb, 0x10f1, 0x1103, + 0x1115, 0x1124, 0x113a, 0x1149, 0x114e, 0x1157, 0x1166, 0x1176, + 0x1188, 0x119b, 0x11ac, 0x11c0, 0x11c5, 0x11ca, 0x11f2, 0x11fc, + 0x120e, 0x1222, 0x122a, 0x1245, 0x1261, 0x1272, 0x127e, 0x128a, + 0x129c, 0x12a4, 0x12b0, 0x12c0, 0x12cd, 0x12d2, 0x12dd, 0x12e8, + // Entry 1EC0 - 1EFF + 0x1304, 0x1325, 0x1345, 0x1366, 0x1388, 0x13a6, 0x13c7, 0x13e9, + 0x1409, 0x1428, 0x144b, 0x146b, 0x148f, 0x14b3, 0x14da, 0x14fe, + 0x1523, 0x154d, 0x1578, 0x159e, 0x15c6, 0x15e7, 0x160c, 0x162c, + 0x164f, 0x1671, 0x1699, 0x16be, 0x16dd, 0x1700, 0x171e, 0x173f, + 0x1763, 0x178d, 0x17b1, 0x17d5, 0x17fb, 0x181d, 0x1842, 0x1863, + 0x1883, 0x18a4, 0x18c4, 0x18eb, 0x190e, 0x1932, 0x1955, 0x197b, + 0x19a0, 0x19c5, 0x19ea, 0x1a16, 0x1a35, 0x1a54, 0x1a6f, 0x1a90, + 0x1ab8, 0x1adc, 0x1aff, 0x1b25, 0x1b49, 0x1b63, 0x1b7c, 0x1b97, + // Entry 1F00 - 1F3F + 0x1bbb, 0x1be1, 0x1c04, 0x1c28, 0x1c43, 0x1c51, 0x1c78, 0x1c8b, + 0x1c96, 0x1cb3, 0x1cc3, 0x1cde, 0x1cfc, 0x1d0b, 0x1d1d, 0x1d43, + 0x1d4f, 0x1d65, 0x1d70, 0x1d91, 0x1da6, 0x1dc8, 0x1dd3, 0x1de4, + 0x1df5, 0x1e16, 0x1e37, 0x1e56, 0x1e73, 0x1e91, 0x1ea9, 0x1ec3, + 0x1edf, 0x1eec, 0x1ef5, 0x1f08, 0x1f1b, 0x1f36, 0x1f50, 0x1f6b, + 0x1f87, 0x1fa2, 0x1fbe, 0x1fde, 0x1ffb, 0x201b, 0x203c, 0x205a, + 0x207b, 0x2098, 0x20b7, 0x20d4, 0x20eb, 0x2109, 0x2129, 0x2147, + 0x2159, 0x2172, 0x21a1, 0x21d0, 0x21dd, 0x21ed, 0x21ff, 0x2214, + // Entry 1F40 - 1F7F + 0x2241, 0x2256, 0x226c, 0x2283, 0x2299, 0x22af, 0x22c5, 0x22db, + 0x2308, 0x2338, 0x2363, 0x2399, 0x23cd, 0x23fa, 0x2432, 0x2468, + 0x2490, 0x24c4, 0x24f6, 0x2520, 0x2548, 0x2574, 0x25a3, 0x25ae, + 0x25bb, 0x25c7, 0x25de, 0x25ec, 0x2604, 0x261c, 0x2639, 0x2656, + 0x2670, 0x2680, 0x2692, 0x26a4, 0x26b0, 0x26b4, 0x26c3, 0x26d5, + 0x26e6, 0x26fa, 0x2714, 0x2731, 0x2740, 0x2758, 0x2764, 0x276c, + 0x2776, 0x278d, 0x27a4, 0x27c8, 0x27eb, 0x280c, 0x282f, 0x2865, + 0x289a, 0x28d0, 0x28db, 0x28e4, 0x28ef, 0x290a, 0x292d, 0x2951, + // Entry 1F80 - 1FBF + 0x2972, 0x2995, 0x29a8, 0x29bd, 0x29d4, 0x29e0, 0x29f3, 0x2a02, + 0x2a14, 0x2a23, 0x2a3e, 0x2a56, 0x2a6c, 0x2a8a, 0x2a9c, 0x2ab2, + 0x2ac1, 0x2ad5, 0x2af5, 0x2b09, 0x2b27, 0x2b3b, 0x2b55, 0x2b69, + 0x2b7c, 0x2b97, 0x2bb4, 0x2bd1, 0x2bf0, 0x2c0e, 0x2c2d, 0x2c48, + 0x2c6c, 0x2c7d, 0x2c95, 0x2caa, 0x2cbb, 0x2cd4, 0x2cee, 0x2d09, + 0x2d22, 0x2d32, 0x2d43, 0x2d4f, 0x2d57, 0x2d69, 0x2d83, 0x2da1, + 0x2da9, 0x2db2, 0x2dba, 0x2dcb, 0x2dda, 0x2de5, 0x2e03, 0x2e16, + 0x2e1e, 0x2e39, 0x2e4d, 0x2e5e, 0x2e6f, 0x2e82, 0x2e94, 0x2ea6, + // Entry 1FC0 - 1FFF + 0x2eb7, 0x2eca, 0x2edd, 0x2eef, 0x2f01, 0x2f16, 0x2f2b, 0x2f42, + 0x2f59, 0x2f6f, 0x2f85, 0x2f9d, 0x2fb4, 0x2fcb, 0x2fe0, 0x2ff7, + 0x300e, 0x3027, 0x303f, 0x3057, 0x306e, 0x3087, 0x30a0, 0x30b8, + 0x30d0, 0x30eb, 0x3106, 0x3123, 0x3140, 0x315c, 0x3178, 0x3196, + 0x31b3, 0x31d0, 0x31eb, 0x31fe, 0x3211, 0x3226, 0x323a, 0x324e, + 0x3261, 0x3276, 0x328b, 0x329f, 0x32b3, 0x32ca, 0x32e1, 0x32fa, + 0x3313, 0x332b, 0x3343, 0x335d, 0x3376, 0x338f, 0x33a6, 0x33c8, + 0x33ea, 0x340c, 0x342e, 0x3450, 0x3472, 0x3494, 0x34b6, 0x34d8, + // Entry 2000 - 203F + 0x34fa, 0x351c, 0x353e, 0x3560, 0x3582, 0x35a4, 0x35c6, 0x35e8, + 0x360a, 0x362c, 0x364e, 0x3670, 0x3692, 0x36b4, 0x36d6, 0x36f8, + 0x371a, 0x3738, 0x3756, 0x3774, 0x3792, 0x37b0, 0x37ce, 0x37ec, + 0x380a, 0x3828, 0x3846, 0x3864, 0x3882, 0x38a0, 0x38be, 0x38dc, + 0x38fa, 0x3918, 0x3936, 0x3954, 0x3972, 0x3990, 0x39ae, 0x39cc, + 0x39ea, 0x3a08, 0x3a26, 0x3a42, 0x3a5e, 0x3a7a, 0x3a96, 0x3ab2, + 0x3ace, 0x3aea, 0x3b06, 0x3b22, 0x3b3e, 0x3b5a, 0x3b76, 0x3b92, + 0x3bae, 0x3bca, 0x3be6, 0x3c02, 0x3c1e, 0x3c3a, 0x3c56, 0x3c72, + // Entry 2040 - 207F + 0x3c8e, 0x3caa, 0x3cc6, 0x3ce2, 0x3cfe, 0x3d10, 0x3d2e, 0x3d4c, + 0x3d6c, 0x3d8c, 0x3dab, 0x3dca, 0x3deb, 0x3e0b, 0x3e2b, 0x3e49, + 0x3e61, 0x3e79, 0x3e93, 0x3eac, 0x3ec5, 0x3edd, 0x3ef7, 0x3f11, + 0x3f2a, 0x3f43, 0x3f5e, 0x3f7b, 0x3f98, 0x3fb3, 0x3fce, 0x3ff7, + 0x4020, 0x4047, 0x406e, 0x409a, 0x40c6, 0x40f0, 0x411a, 0x413b, + 0x4162, 0x4189, 0x41aa, 0x41ca, 0x41f0, 0x4216, 0x4236, 0x4255, + 0x427a, 0x429f, 0x42be, 0x42dc, 0x4300, 0x4324, 0x4342, 0x4367, + 0x4392, 0x43bc, 0x43e6, 0x4411, 0x443b, 0x4465, 0x448a, 0x44ae, + // Entry 2080 - 20BF + 0x44d8, 0x4501, 0x452a, 0x4554, 0x457d, 0x45a6, 0x45ca, 0x45f0, + 0x461c, 0x4648, 0x4674, 0x46a0, 0x46cc, 0x46f8, 0x471e, 0x4742, + 0x476c, 0x4796, 0x47c0, 0x47ea, 0x4814, 0x483e, 0x4862, 0x488c, + 0x48bc, 0x48ec, 0x491c, 0x494b, 0x497a, 0x49aa, 0x49d9, 0x4a08, + 0x4a37, 0x4a66, 0x4a95, 0x4ac4, 0x4af4, 0x4b24, 0x4b4e, 0x4b77, + 0x4ba0, 0x4bc7, 0x4bee, 0x4c0c, 0x4c28, 0x4c51, 0x4c7a, 0x4c9c, + 0x4cc4, 0x4cec, 0x4d0d, 0x4d34, 0x4d5b, 0x4d7b, 0x4da1, 0x4dc7, + 0x4de6, 0x4e13, 0x4e40, 0x4e66, 0x4e92, 0x4ebe, 0x4ee3, 0x4f11, + // Entry 20C0 - 20FF + 0x4f3f, 0x4f66, 0x4f92, 0x4fbe, 0x4fe3, 0x5015, 0x5047, 0x5072, + 0x5097, 0x50bb, 0x50dd, 0x5100, 0x5135, 0x516a, 0x518b, 0x51a2, + 0x51b7, 0x51cf, 0x51e6, 0x51fd, 0x5212, 0x522a, 0x5241, 0x5268, + 0x528c, 0x52b3, 0x52d7, 0x52e7, 0x52fd, 0x5314, 0x532d, 0x533d, + 0x5355, 0x536f, 0x5388, 0x5392, 0x53aa, 0x53c3, 0x53da, 0x53e9, + 0x5401, 0x5417, 0x542c, 0x543c, 0x5447, 0x5453, 0x545d, 0x5473, + 0x5489, 0x549c, 0x54b0, 0x54c3, 0x54f5, 0x5518, 0x554a, 0x557d, + 0x5591, 0x55b4, 0x55e7, 0x55f3, 0x55ff, 0x5620, 0x564a, 0x5665, + // Entry 2100 - 213F + 0x567e, 0x56a4, 0x56ce, 0x56f8, 0x571c, 0x572e, 0x5740, 0x574f, + 0x575e, 0x5776, 0x578e, 0x57a1, 0x57b4, 0x57ce, 0x57e8, 0x5808, + 0x5828, 0x5845, 0x5862, 0x5885, 0x58a8, 0x58c4, 0x58e0, 0x58fc, + 0x5918, 0x593a, 0x595c, 0x5978, 0x5994, 0x59b6, 0x59d8, 0x59f3, + 0x5a0e, 0x5a1b, 0x5a28, 0x5a54, 0x5a5b, 0x5a62, 0x5a6e, 0x5a7b, + 0x5a94, 0x5a9c, 0x5aa8, 0x5ac3, 0x5adf, 0x5afb, 0x5b17, 0x5b3d, + 0x5b6a, 0x5b80, 0x5b97, 0x5ba5, 0x5bb9, 0x5bd8, 0x5bf7, 0x5c17, + 0x5c38, 0x5c59, 0x5c79, 0x5c8a, 0x5c9b, 0x5cb5, 0x5cce, 0x5ce7, + // Entry 2140 - 217F + 0x5d01, 0x5d0d, 0x5d28, 0x5d44, 0x5d6e, 0x5d99, 0x5dc2, 0x5de5, + 0x5e0e, 0x5e38, 0x5e44, 0x5e69, 0x5e8e, 0x5eb4, 0x5eda, 0x5eff, + 0x5f24, 0x5f4a, 0x5f70, 0x5f83, 0x5f97, 0x5faa, 0x5fbd, 0x5fd0, + 0x5fe9, 0x6002, 0x6016, 0x6029, 0x602e, 0x6036, 0x603d, 0x6042, + 0x604c, 0x6056, 0x605f, 0x606b, 0x606e, 0x607c, 0x608b, 0x6096, + 0x60a0, 0x60af, 0x60be, 0x60c8, 0x60dd, 0x60ee, 0x60f5, 0x610d, + 0x6119, 0x612a, 0x613b, 0x6143, 0x6167, 0x6180, 0x619a, 0x61b3, + 0x61ca, 0x61e4, 0x61fd, 0x6211, 0x621d, 0x622d, 0x623b, 0x6243, + // Entry 2180 - 21BF + 0x6247, 0x6255, 0x625c, 0x626d, 0x627f, 0x6290, 0x629c, 0x62a6, + 0x62b7, 0x62c3, 0x62cb, 0x62dd, 0x62ed, 0x62fd, 0x6310, 0x6320, + 0x6331, 0x6345, 0x6356, 0x6365, 0x6378, 0x638a, 0x639c, 0x63af, + 0x63c1, 0x63d2, 0x63d9, 0x63e4, 0x63e9, 0x63f2, 0x63f9, 0x63ff, + 0x6405, 0x640c, 0x6411, 0x6416, 0x641c, 0x6422, 0x6428, 0x642b, + 0x6430, 0x6435, 0x643d, 0x6448, 0x6451, 0x6459, 0x645f, 0x646f, + 0x6480, 0x6490, 0x64a2, 0x64b4, 0x64c4, 0x64d4, 0x64e5, 0x64f5, + 0x6507, 0x6519, 0x6529, 0x6539, 0x6549, 0x655b, 0x656a, 0x657a, + // Entry 21C0 - 21FF + 0x658a, 0x659c, 0x65ab, 0x65b6, 0x65c2, 0x65cd, 0x65e0, 0x65f6, + 0x6605, 0x6617, 0x6627, 0x6638, 0x6649, 0x6663, 0x6687, 0x66ab, + 0x66cf, 0x66f3, 0x6717, 0x673b, 0x675f, 0x6785, 0x67a5, 0x67ba, + 0x67d9, 0x67ed, 0x67fe, 0x6808, 0x6812, 0x681c, 0x6826, 0x6830, + 0x683a, 0x6855, 0x686f, 0x6890, 0x68b0, 0x68c1, 0x68d1, 0x68e8, + 0x68fd, 0x6913, 0x6929, 0x6933, 0x693d, 0x694c, 0x6952, 0x6960, + 0x6974, 0x697a, 0x6981, 0x6987, 0x698b, 0x699a, 0x69a5, 0x69b1, + 0x69c4, 0x69e0, 0x69fb, 0x6a07, 0x6a18, 0x6a2b, 0x6a3c, 0x6a5c, + // Entry 2200 - 223F + 0x6a70, 0x6a85, 0x6aae, 0x6acc, 0x6aec, 0x6aff, 0x6b12, 0x6b2b, + 0x6b3a, 0x6b48, 0x6b64, 0x6b6a, 0x6b75, 0x6b7b, 0x6b80, 0x6b86, + 0x6b8a, 0x6b8f, 0x6b95, 0x6ba6, 0x6bad, 0x6bb8, 0x6bc0, 0x6bce, + 0x6bd9, 0x6be1, 0x6bec, 0x6bfe, 0x6c11, 0x6c23, 0x6c36, 0x6c4a, + 0x6c5a, 0x6c5e, 0x6c6b, 0x6c81, 0x6c99, 0x6cb1, 0x6cc8, 0x6cd6, + 0x6ce2, 0x6ceb, 0x6cef, 0x6cfa, 0x6d11, 0x6d27, 0x6d2d, 0x6d35, + 0x6d57, 0x6d75, 0x6d93, 0x6da8, 0x6dbd, 0x6dcc, 0x6dee, 0x6dff, + 0x6e0e, 0x6e3e, 0x6e49, 0x6e60, 0x6e77, 0x6e95, 0x6ec0, 0x6ec9, + // Entry 2240 - 227F + 0x6eea, 0x6f0a, 0x6f1c, 0x6f31, 0x6f3e, 0x6f44, 0x6f4a, 0x6f57, + 0x6f67, 0x6f78, 0x6f91, 0x6f99, 0x6fab, 0x6fb3, 0x6fbf, 0x6fc4, + 0x6fcc, 0x6fdf, 0x6fe4, 0x6fed, 0x6ffd, 0x7001, 0x7015, 0x702f, + 0x7038, 0x704b, 0x7079, 0x708e, 0x70a2, 0x70b0, 0x70c4, 0x70d2, + 0x70e8, 0x70ff, 0x7109, 0x7111, 0x7119, 0x7124, 0x712f, 0x713b, + 0x7147, 0x7159, 0x715f, 0x7171, 0x717a, 0x7183, 0x718d, 0x719d, + 0x71ad, 0x71c3, 0x71cb, 0x71d9, 0x71ed, 0x71fe, 0x720f, 0x7226, + 0x7231, 0x724b, 0x725f, 0x726c, 0x7279, 0x7296, 0x72b2, 0x72d4, + // Entry 2280 - 22BF + 0x72ed, 0x7304, 0x731b, 0x7323, 0x733d, 0x734f, 0x7365, 0x737c, + 0x738f, 0x73a8, 0x73b5, 0x73c8, 0x73d6, 0x73ea, 0x73ff, 0x7417, + 0x7432, 0x7448, 0x746c, 0x7496, 0x74af, 0x74c7, 0x74df, 0x7503, + 0x7521, 0x7546, 0x7554, 0x7562, 0x7588, 0x75ae, 0x75d5, 0x75de, + 0x75f8, 0x760f, 0x7616, 0x7623, 0x763a, 0x7662, 0x7690, 0x769a, + 0x76af, 0x76ca, 0x76f0, 0x7716, 0x7737, 0x7758, 0x7774, 0x7790, + 0x77af, 0x77ca, 0x77e7, 0x77f9, 0x780c, 0x781e, 0x784f, 0x7879, + 0x78aa, 0x78d4, 0x7902, 0x7930, 0x7953, 0x7972, 0x7997, 0x79a8, + // Entry 22C0 - 22FF + 0x79c8, 0x79d4, 0x79ef, 0x7a0f, 0x7a30, 0x7a5a, 0x7a85, 0x7ab0, + 0x7adc, 0x7b0d, 0x7b3f, 0x7b69, 0x7b94, 0x7bbe, 0x7be9, 0x7c0b, + 0x7c2e, 0x7c50, 0x7c72, 0x7c96, 0x7cb9, 0x7cdc, 0x7cfe, 0x7d22, + 0x7d46, 0x7d69, 0x7d8c, 0x7db0, 0x7dd4, 0x7dfa, 0x7e1f, 0x7e44, + 0x7e68, 0x7e8e, 0x7eb4, 0x7ed9, 0x7efe, 0x7f2b, 0x7f58, 0x7f87, + 0x7fb5, 0x7fe3, 0x8010, 0x803f, 0x806e, 0x809c, 0x80ca, 0x80ec, + 0x80fb, 0x810b, 0x811e, 0x8134, 0x814a, 0x8160, 0x817f, 0x81a2, + 0x81c2, 0x81e8, 0x820f, 0x823c, 0x8252, 0x827a, 0x82a5, 0x82bf, + // Entry 2300 - 233F + 0x82f0, 0x831f, 0x833b, 0x8367, 0x838a, 0x83ac, 0x83d7, 0x8403, + 0x8434, 0x8465, 0x8498, 0x84a2, 0x84d5, 0x84f9, 0x8519, 0x8539, + 0x8559, 0x8579, 0x859f, 0x85c5, 0x85eb, 0x860b, 0x8632, 0x864f, + 0x8672, 0x8690, 0x86a1, 0x86b8, 0x86e6, 0x86f3, 0x86fe, 0x870b, + 0x8726, 0x8742, 0x8754, 0x8774, 0x878e, 0x87b1, 0x87cd, 0x87da, + 0x87f7, 0x880a, 0x881c, 0x883a, 0x8846, 0x8860, 0x887b, 0x8895, + 0x88a4, 0x88b4, 0x88c3, 0x88d0, 0x88df, 0x88fe, 0x8911, 0x891e, + 0x892d, 0x893b, 0x8954, 0x8976, 0x8991, 0x89c0, 0x89f0, 0x8a10, + // Entry 2340 - 237F + 0x8a31, 0x8a57, 0x8a7e, 0x8a9d, 0x8abd, 0x8ae3, 0x8b0a, 0x8b38, + 0x8b67, 0x8b8e, 0x8bb6, 0x8bcd, 0x8be6, 0x8c07, 0x8c24, 0x8c41, + 0x8c55, 0x8c6a, 0x8c7f, 0x8c9a, 0x8cb6, 0x8cd2, 0x8cef, 0x8d0d, + 0x8d31, 0x8d56, 0x8d74, 0x8d89, 0x8d9f, 0x8db5, 0x8dcc, 0x8de2, + 0x8df9, 0x8e10, 0x8e28, 0x8e3e, 0x8e55, 0x8e6c, 0x8e84, 0x8e9b, + 0x8eb3, 0x8ecb, 0x8ee4, 0x8efa, 0x8f11, 0x8f28, 0x8f40, 0x8f57, + 0x8f6f, 0x8f87, 0x8fa0, 0x8fb7, 0x8fcf, 0x8fe7, 0x9000, 0x9018, + 0x9031, 0x904a, 0x9064, 0x907a, 0x9091, 0x90a8, 0x90c0, 0x90d7, + // Entry 2380 - 23BF + 0x90ef, 0x9107, 0x9120, 0x9137, 0x914f, 0x9167, 0x9180, 0x9198, + 0x91b1, 0x91ca, 0x91e4, 0x91fb, 0x9213, 0x922b, 0x9244, 0x925c, + 0x9275, 0x928e, 0x92a8, 0x92c0, 0x92d9, 0x92f2, 0x930c, 0x9325, + 0x933f, 0x9359, 0x9374, 0x938a, 0x93a1, 0x93b8, 0x93d0, 0x93e7, + 0x93ff, 0x9417, 0x9430, 0x9447, 0x945f, 0x9477, 0x9490, 0x94a8, + 0x94c1, 0x94da, 0x94f4, 0x950b, 0x9523, 0x953b, 0x9554, 0x956c, + 0x9585, 0x959e, 0x95b8, 0x95d0, 0x95e9, 0x9602, 0x961c, 0x9635, + 0x964f, 0x9669, 0x9684, 0x969b, 0x96b3, 0x96cb, 0x96e4, 0x96fc, + // Entry 23C0 - 23FF + 0x9715, 0x972e, 0x9748, 0x9760, 0x9779, 0x9792, 0x97ac, 0x97c5, + 0x97df, 0x97f9, 0x9814, 0x982c, 0x9845, 0x985e, 0x9878, 0x9891, + 0x98ab, 0x98c5, 0x98e0, 0x98f9, 0x9913, 0x992d, 0x9948, 0x9962, + 0x997d, 0x9998, 0x99b4, 0x99ca, 0x99e1, 0x99f8, 0x9a10, 0x9a27, + 0x9a3f, 0x9a57, 0x9a70, 0x9a87, 0x9a9f, 0x9ab7, 0x9ad0, 0x9ae8, + 0x9b01, 0x9b1a, 0x9b34, 0x9b4b, 0x9b63, 0x9b7b, 0x9b94, 0x9bac, + 0x9bc5, 0x9bde, 0x9bf8, 0x9c10, 0x9c29, 0x9c42, 0x9c5c, 0x9c75, + 0x9c8f, 0x9ca9, 0x9cc4, 0x9cdb, 0x9cf3, 0x9d0b, 0x9d24, 0x9d3c, + // Entry 2400 - 243F + 0x9d55, 0x9d6e, 0x9d88, 0x9da0, 0x9db9, 0x9dd2, 0x9dec, 0x9e05, + 0x9e1f, 0x9e39, 0x9e54, 0x9e6c, 0x9e85, 0x9e9e, 0x9eb8, 0x9ed1, + 0x9eeb, 0x9f05, 0x9f20, 0x9f39, 0x9f53, 0x9f6d, 0x9f88, 0x9fa2, + 0x9fbd, 0x9fd8, 0x9ff4, 0xa00b, 0xa023, 0xa03b, 0xa054, 0xa06c, + 0xa085, 0xa09e, 0xa0b8, 0xa0d0, 0xa0e9, 0xa102, 0xa11c, 0xa135, + 0xa14f, 0xa169, 0xa184, 0xa19c, 0xa1b5, 0xa1ce, 0xa1e8, 0xa201, + 0xa21b, 0xa235, 0xa250, 0xa269, 0xa283, 0xa29d, 0xa2b8, 0xa2d2, + 0xa2ed, 0xa308, 0xa324, 0xa33c, 0xa355, 0xa36e, 0xa388, 0xa3a1, + // Entry 2440 - 247F + 0xa3bb, 0xa3d5, 0xa3f0, 0xa409, 0xa423, 0xa43d, 0xa458, 0xa472, + 0xa48d, 0xa4a8, 0xa4c4, 0xa4dd, 0xa4f7, 0xa511, 0xa52c, 0xa546, + 0xa561, 0xa57c, 0xa598, 0xa5b2, 0xa5cd, 0xa5e8, 0xa604, 0xa61f, + 0xa63b, 0xa657, 0xa674, 0xa6a4, 0xa6db, 0xa706, 0xa732, 0xa75e, + 0xa782, 0xa7a1, 0xa7c1, 0xa7e7, 0xa80b, 0xa81f, 0xa835, 0xa850, + 0xa86c, 0xa887, 0xa8a3, 0xa8ca, 0xa8eb, 0xa8ff, 0xa915, 0xa944, + 0xa97a, 0xa99f, 0xa9d9, 0xaa1a, 0xaa2e, 0xaa43, 0xaa5e, 0xaa7a, + 0xaa9a, 0xaabb, 0xaae4, 0xab0e, 0xab2d, 0xab4c, 0xab66, 0xab80, + // Entry 2480 - 24BF + 0xab9a, 0xabb4, 0xabd9, 0xabfe, 0xac23, 0xac48, 0xac71, 0xac9a, + 0xacc4, 0xacee, 0xad18, 0xad41, 0xad6b, 0xad95, 0xadb7, 0xade5, + 0xae15, 0xae44, 0xae74, 0xae92, 0xaeb3, 0xaece, 0xaeec, 0xaf0e, + 0xaf33, 0xaf5b, 0xaf86, 0xafa7, 0xafc4, 0xaff0, 0xb01c, 0xb048, + 0xb068, 0xb087, 0xb0a1, 0xb0c6, 0xb0f0, 0xb114, 0xb138, 0xb15c, + 0xb180, 0xb1a2, 0xb1c7, 0xb1ed, 0xb210, 0xb235, 0xb25b, 0xb281, + 0xb2a9, 0xb2d0, 0xb2f8, 0xb31d, 0xb344, 0xb36b, 0xb393, 0xb3bb, + 0xb3e5, 0xb40e, 0xb438, 0xb45f, 0xb488, 0xb4cd, 0xb512, 0xb559, + // Entry 24C0 - 24FF + 0xb5a2, 0xb5e6, 0xb62e, 0xb672, 0xb6ba, 0xb6e8, 0xb718, 0xb747, + 0xb778, 0xb7bf, 0xb806, 0xb82a, 0xb84c, 0xb871, 0xb895, 0xb8ba, + 0xb8e0, 0xb8ff, 0xb920, 0xb943, 0xb960, 0xb97e, 0xb99c, 0xb9aa, + 0xb9b9, 0xb9c5, 0xb9d3, 0xb9f0, 0xb9ff, 0xba14, 0xba2c, 0xba45, + 0xba5b, 0xba72, 0xba8f, 0xbaad, 0xbacc, 0xbaec, 0xbb0d, 0xbb2f, + 0xbb5a, 0xbb89, 0xbbb7, 0xbbe3, 0xbbfe, 0xbc1a, 0xbc34, 0xbc52, + 0xbc76, 0xbc98, 0xbcb9, 0xbcdb, 0xbce7, 0xbcfb, 0xbd16, 0xbd35, + 0xbd52, 0xbd65, 0xbd70, 0xbd8c, 0xbda6, 0xbdb2, 0xbdc0, 0xbdd3, + // Entry 2500 - 253F + 0xbdef, 0xbe07, 0xbe21, 0xbe63, 0xbea4, 0xbee8, 0xbf2b, 0xbf6d, + 0xbfae, 0xbff2, 0xc035, 0xc047, 0xc05d, 0xc07e, 0xc09e, 0xc0bd, + 0xc0d7, 0xc0eb, 0xc0fb, 0xc112, 0xc127, 0xc16c, 0xc186, 0xc1b1, + 0xc1c8, 0xc1dc, 0xc1ea, 0xc1fb, 0xc20f, 0xc234, 0xc263, 0xc280, + 0xc29e, 0xc2ae, 0xc2c2, 0xc2d0, 0xc2e2, 0xc2f9, 0xc30f, 0xc31c, + 0xc33a, 0xc35c, 0xc37d, 0xc39f, 0xc3ba, 0xc3d6, 0xc3e2, 0xc3fc, + 0xc417, 0xc426, 0xc435, 0xc446, 0xc458, 0xc470, 0xc489, 0xc49c, + 0xc4ad, 0xc4cf, 0xc4e4, 0xc501, 0xc50d, 0xc51c, 0xc53c, 0xc56d, + // Entry 2540 - 257F + 0xc58e, 0xc59a, 0xc5a7, 0xc5d2, 0xc5fe, 0xc61b, 0xc628, 0xc644, + 0xc660, 0xc679, 0xc692, 0xc6ac, 0xc6c6, 0xc6df, 0xc6f8, 0xc704, + 0xc71c, 0xc730, 0xc756, 0xc761, 0xc774, 0xc77f, 0xc78a, 0xc7ac, + 0xc7cf, 0xc7d3, 0xc7d7, 0xc7f1, 0xc80c, 0xc828, 0xc845, 0xc863, + 0xc885, 0xc8a0, 0xc8b8, 0xc8cf, 0xc8e3, 0xc8f1, 0xc908, 0xc923, + 0xc937, 0xc952, 0xc96d, 0xc981, 0xc99a, 0xc9cc, 0xc9ff, 0xca26, + 0xca46, 0xca62, 0xca89, 0xcaa1, 0xcabb, 0xcace, 0xcae3, 0xcaf9, + 0xcafd, 0xcb19, 0xcb36, 0xcb4e, 0xcb6a, 0xcb8b, 0xcbb1, 0xcbcb, + // Entry 2580 - 25BF + 0xcbe3, 0xcbfd, 0xcc19, 0xcc36, 0xcc51, 0xcc6a, 0xcc86, 0xcca1, + 0xccbe, 0xccdc, 0xccf3, 0xcd15, 0xcd36, 0xcd5b, 0xcd68, 0xcd8f, + 0xcdb7, 0xcde9, 0xce0d, 0xce22, 0xce37, 0xce4d, 0xce6c, 0xce7c, + 0xce96, 0xceb7, 0xced0, 0xcee5, 0xcefa, 0xcf0c, 0xcf25, 0xcf42, + 0xcf57, 0xcf6f, 0xcf87, 0xcfa9, 0xcfcb, 0xcfed, 0xd01d, 0xd035, + 0xd054, 0xd06e, 0xd081, 0xd0ab, 0xd0c5, 0xd0de, 0xd0f0, 0xd101, + 0xd11d, 0xd138, 0xd148, 0xd159, 0xd17b, 0xd197, 0xd1b2, 0xd1d2, + 0xd1f1, 0xd210, 0xd229, 0xd249, 0xd260, 0xd27e, 0xd29d, 0xd2be, + // Entry 25C0 - 25FF + 0xd2de, 0xd2f8, 0xd310, 0xd341, 0xd372, 0xd38f, 0xd3ae, 0xd3c3, + 0xd3db, 0xd3ef, 0xd415, 0xd434, 0xd44f, 0xd46a, 0xd48a, 0xd49c, + 0xd4b8, 0xd4d6, 0xd508, 0xd527, 0xd543, 0xd562, 0xd584, 0xd5a9, + 0xd5c6, 0xd5e6, 0xd613, 0xd643, 0xd66f, 0xd69e, 0xd6d0, 0xd704, + 0xd71c, 0xd737, 0xd75d, 0xd786, 0xd7a3, 0xd7c3, 0xd7f7, 0xd82b, + 0xd84b, 0xd86e, 0xd898, 0xd8c2, 0xd8f6, 0xd92a, 0xd96e, 0xd9b2, + 0xd9cf, 0xd9ef, 0xda1c, 0xda4c, 0xda6d, 0xda91, 0xdaba, 0xdae6, + 0xdafa, 0xdb11, 0xdb3a, 0xdb66, 0xdb7d, 0xdb97, 0xdbbc, 0xdbde, + // Entry 2600 - 263F + 0xdbfb, 0xdc14, 0xdc30, 0xdc5d, 0xdc8d, 0xdc99, 0xdca4, 0xdcbc, + 0xdcd3, 0xdcef, 0xdd15, 0xdd3b, 0xdd62, 0xdd89, 0xdda3, 0xddbd, + 0xddd8, 0xddf3, 0xde11, 0xde2f, 0xde51, 0xde73, 0xde82, 0xde91, + 0xdea0, 0xdeb1, 0xdecc, 0xdee9, 0xdf0e, 0xdf35, 0xdf59, 0xdf7f, + 0xdf9a, 0xdfb7, 0xdfd5, 0xdff5, 0xe014, 0xe035, 0xe051, 0xe06f, + 0xe08c, 0xe0aa, 0xe0b7, 0xe0c6, 0xe0df, 0xe0fa, 0xe10f, 0xe124, + 0xe137, 0xe14e, 0xe164, 0xe192, 0xe1ae, 0xe1c4, 0xe1dc, 0xe1e3, + 0xe1ed, 0xe1fc, 0xe20b, 0xe218, 0xe22c, 0xe24f, 0xe271, 0xe293, + // Entry 2640 - 267F + 0xe2bc, 0xe2e9, 0xe305, 0xe320, 0xe343, 0xe353, 0xe361, 0xe377, + 0xe396, 0xe3c2, 0xe3e1, 0xe400, 0xe41b, 0xe43a, 0xe456, 0xe479, + 0xe4a3, 0xe4b8, 0xe4cf, 0xe4e9, 0xe512, 0xe53e, 0xe55c, 0xe57e, + 0xe595, 0xe5a7, 0xe5bf, 0xe5d5, 0xe5eb, 0xe601, 0xe617, 0xe62d, + 0xe642, 0xe655, 0xe66a, 0xe680, 0xe696, 0xe6ac, 0xe6c2, 0xe6d8, + 0xe6eb, 0xe70e, 0xe72f, 0xe751, 0xe771, 0xe78b, 0xe7a8, 0xe7d3, + 0xe7fd, 0xe819, 0xe836, 0xe851, 0xe86f, 0xe87c, 0xe88e, 0xe8a0, + 0xe8b7, 0xe8ce, 0xe8dc, 0xe8ea, 0xe8f7, 0xe904, 0xe91c, 0xe92e, + // Entry 2680 - 26BF + 0xe942, 0xe956, 0xe96a, 0xe97e, 0xe991, 0xe9a4, 0xe9b7, 0xe9cf, + 0xe9e7, 0xe9fd, 0xea13, 0xea2f, 0xea45, 0xea61, 0xea7e, 0xeaad, + 0xeae3, 0xeb06, 0xeb2c, 0xeb4c, 0xeb7a, 0xebaf, 0xebd3, 0xec0c, + 0xec4c, 0xec65, 0xec86, 0xeca7, 0xecd3, 0xed00, 0xed25, 0xed46, + 0xed5f, 0xed79, 0xeda6, 0xedd4, 0xedf8, 0xee1d, 0xee49, 0xee76, + 0xee9c, 0xeeb5, 0xeed2, 0xeee3, 0xeef3, 0xef03, 0xef20, 0xef3d, + 0xef4f, 0xef6a, 0xef89, 0xef95, 0xefaa, 0xefce, 0xeff6, 0xf01e, + 0xf04a, 0xf077, 0xf0aa, 0xf0c9, 0xf0e6, 0xf106, 0xf125, 0xf145, + // Entry 26C0 - 26FF + 0xf162, 0xf182, 0xf1a2, 0xf1c2, 0xf1e2, 0xf208, 0xf22c, 0xf253, + 0xf279, 0xf2a4, 0xf2d3, 0xf2f9, 0xf31d, 0xf344, 0xf36a, 0xf391, + 0xf3b8, 0xf3df, 0xf406, 0xf443, 0xf47e, 0xf4bc, 0xf4f9, 0xf50b, + 0xf51b, 0xf560, 0xf5aa, 0xf5ef, 0xf639, 0xf660, 0xf685, 0xf6ad, + 0xf6d4, 0xf6f7, 0xf718, 0xf73c, 0xf75f, 0xf791, 0xf7c4, 0xf7f5, + 0xf825, 0xf830, 0xf83c, 0xf848, 0xf855, 0xf87e, 0xf894, 0xf8c7, + 0xf8fa, 0xf92e, 0xf962, 0xf987, 0xf9aa, 0xf9d0, 0xf9f5, 0xfa2c, + 0xfa64, 0xfa99, 0xfacf, 0xfb04, 0xfb3a, 0xfb71, 0xfba9, 0xfbd3, + // Entry 2700 - 273F + 0xfbfe, 0xfc26, 0xfc4f, 0xfc77, 0xfca0, 0xfcca, 0xfcf5, 0xfd0b, + 0xfd22, 0xfd36, 0xfd4b, 0xfd5f, 0xfd74, 0xfd8a, 0xfda1, 0xfdd1, + 0xfdf0, 0xfe07, 0xfe10, 0xfe1e, 0xfe32, 0xfe47, 0xfe5c, 0xfe74, + 0xfe81, 0xfeaa, 0xfed5, 0xff00, 0xff2c, 0xff41, 0xff59, 0xff76, + 0xff9b, 0xffb2, 0xffd1, 0xffea, 0xfffa, 0x002d, 0x005e, 0x0092, + 0x00c5, 0x00e2, 0x0100, 0x011e, 0x013f, 0x015e, 0x017d, 0x019e, + 0x01bd, 0x01dd, 0x01fb, 0x0221, 0x023c, 0x025c, 0x027a, 0x029b, + 0x02bc, 0x02db, 0x02f8, 0x0318, 0x0337, 0x0356, 0x0376, 0x0393, + // Entry 2740 - 277F + 0x03b2, 0x03d0, 0x03ed, 0x0409, 0x0427, 0x0444, 0x0464, 0x0481, + 0x049f, 0x04bd, 0x04db, 0x04ff, 0x051b, 0x053e, 0x056b, 0x0587, + 0x05b2, 0x05d3, 0x05fc, 0x061a, 0x063b, 0x065c, 0x0682, 0x06ac, + 0x06c7, 0x06e3, 0x06ff, 0x071e, 0x073b, 0x0758, 0x0777, 0x0794, + 0x07b2, 0x07ce, 0x07f2, 0x080b, 0x0829, 0x0845, 0x0864, 0x0883, + 0x08a0, 0x08bb, 0x08d9, 0x08f6, 0x0913, 0x0931, 0x094c, 0x0969, + 0x0985, 0x09a0, 0x09ba, 0x09d6, 0x09f1, 0x0a0f, 0x0a2a, 0x0a46, + 0x0a62, 0x0a7e, 0x0aa0, 0x0aba, 0x0adb, 0x0b06, 0x0b20, 0x0b49, + // Entry 2780 - 27BF + 0x0b68, 0x0b8f, 0x0bab, 0x0bca, 0x0be9, 0x0c0d, 0x0c35, 0x0c5b, + 0x0c7f, 0x0ca7, 0x0cc9, 0x0ce9, 0x0d09, 0x0d32, 0x0d57, 0x0d7a, + 0x0d9f, 0x0dc2, 0x0de7, 0x0e0a, 0x0e24, 0x0e44, 0x0e61, 0x0e82, + 0x0ea6, 0x0ec6, 0x0ee4, 0x0f02, 0x0f1d, 0x0f36, 0x0f55, 0x0f74, + 0x0f99, 0x0fc2, 0x0fe5, 0x1003, 0x101c, 0x1042, 0x1068, 0x1082, + 0x109a, 0x10b4, 0x10cc, 0x10e7, 0x1100, 0x111b, 0x1134, 0x114d, + 0x1164, 0x117d, 0x1194, 0x11ae, 0x11c6, 0x11e0, 0x11f8, 0x1214, + 0x122e, 0x1249, 0x1262, 0x127c, 0x1294, 0x12af, 0x12c8, 0x12e0, + // Entry 27C0 - 27FF + 0x12f6, 0x130e, 0x1324, 0x133d, 0x1354, 0x136b, 0x1380, 0x1398, + 0x13ae, 0x13c6, 0x13dc, 0x13f6, 0x140e, 0x1427, 0x143e, 0x1456, + 0x146c, 0x1484, 0x149a, 0x14b3, 0x14ca, 0x14e3, 0x14fa, 0x1513, + 0x152a, 0x154e, 0x1570, 0x1594, 0x15b6, 0x15dd, 0x1602, 0x1626, + 0x1648, 0x166a, 0x168a, 0x16b0, 0x16d4, 0x16f8, 0x171a, 0x1735, + 0x174e, 0x1770, 0x1790, 0x17b5, 0x17d8, 0x17fc, 0x181e, 0x1841, + 0x1862, 0x1886, 0x18a8, 0x18cd, 0x18f0, 0x1913, 0x1934, 0x1955, + 0x1974, 0x1998, 0x19ba, 0x19de, 0x1a00, 0x1a27, 0x1a4c, 0x1a70, + // Entry 2800 - 283F + 0x1a92, 0x1ab8, 0x1adc, 0x1b02, 0x1b26, 0x1b4a, 0x1b6c, 0x1b90, + 0x1bb2, 0x1bd6, 0x1bf8, 0x1c09, 0x1c1c, 0x1c2f, 0x1c44, 0x1c58, + 0x1c6c, 0x1c84, 0x1cac, 0x1cd2, 0x1cfc, 0x1d24, 0x1d3d, 0x1d5c, + 0x1d7b, 0x1d9e, 0x1dbf, 0x1dda, 0x1e00, 0x1e28, 0x1e47, 0x1e5f, + 0x1e6f, 0x1e8b, 0x1ea3, 0x1ebc, 0x1ed5, 0x1eee, 0x1f06, 0x1f1f, + 0x1f38, 0x1f51, 0x1f69, 0x1f82, 0x1f9b, 0x1fb4, 0x1fcd, 0x1fe5, + 0x1ffe, 0x2018, 0x2031, 0x204a, 0x2063, 0x207b, 0x2095, 0x20af, + 0x20c9, 0x20e2, 0x20fc, 0x2116, 0x212f, 0x2148, 0x2161, 0x217b, + // Entry 2840 - 287F + 0x2194, 0x21ae, 0x21c7, 0x21df, 0x21f8, 0x2210, 0x2229, 0x2242, + 0x225a, 0x2273, 0x2285, 0x2298, 0x22ac, 0x22bf, 0x22d4, 0x22f6, + 0x2309, 0x231c, 0x2330, 0x2344, 0x2359, 0x236c, 0x237f, 0x2392, + 0x23ac, 0x23c1, 0x23d4, 0x23f6, 0x2410, 0x2424, 0x2437, 0x244b, + 0x2466, 0x2479, 0x2493, 0x24a5, 0x24b9, 0x24d5, 0x24f0, 0x2503, + 0x2516, 0x2529, 0x2544, 0x255f, 0x2572, 0x2584, 0x2597, 0x25ab, + 0x25bf, 0x25da, 0x25f3, 0x2606, 0x261a, 0x262e, 0x2641, 0x2655, + 0x2669, 0x267d, 0x2690, 0x26a3, 0x26b6, 0x26c9, 0x26e7, 0x26fb, + // Entry 2880 - 28BF + 0x270d, 0x271f, 0x274a, 0x2761, 0x277a, 0x278f, 0x27a4, 0x27b9, + 0x27ce, 0x27e4, 0x27f9, 0x280e, 0x2823, 0x2838, 0x284e, 0x286a, + 0x287f, 0x2894, 0x28aa, 0x28bf, 0x28d5, 0x28eb, 0x2901, 0x2916, + 0x292c, 0x2942, 0x2959, 0x296f, 0x2984, 0x2999, 0x29ae, 0x29c4, + 0x29da, 0x29ef, 0x2a04, 0x2a19, 0x2a2e, 0x2a43, 0x2a59, 0x2a6f, + 0x2a84, 0x2a99, 0x2aae, 0x2ac3, 0x2ad8, 0x2aee, 0x2b04, 0x2b19, + 0x2b2e, 0x2b44, 0x2b5a, 0x2b70, 0x2b87, 0x2b9e, 0x2bb4, 0x2bca, + 0x2bdf, 0x2bf4, 0x2c09, 0x2c1f, 0x2c35, 0x2c4a, 0x2c5f, 0x2c74, + // Entry 28C0 - 28FF + 0x2c89, 0x2c9e, 0x2cb4, 0x2cca, 0x2cdf, 0x2cf4, 0x2d09, 0x2d1e, + 0x2d33, 0x2d49, 0x2d5f, 0x2d74, 0x2d89, 0x2d9e, 0x2db3, 0x2dc8, + 0x2dde, 0x2df4, 0x2e09, 0x2e1e, 0x2e3a, 0x2e56, 0x2e73, 0x2e8f, + 0x2eac, 0x2ec8, 0x2ee4, 0x2f00, 0x2f1c, 0x2f38, 0x2f53, 0x2f6f, + 0x2f8b, 0x2fa7, 0x2fc3, 0x2fdf, 0x2ffc, 0x3019, 0x3036, 0x3055, + 0x3073, 0x3092, 0x30ad, 0x30c9, 0x30e8, 0x310e, 0x312b, 0x3147, + 0x316b, 0x318f, 0x31b0, 0x31da, 0x31f9, 0x321f, 0x3238, 0x3252, + 0x3272, 0x3293, 0x32ae, 0x32d0, 0x32eb, 0x3305, 0x3320, 0x332d, + // Entry 2900 - 293F + 0x3349, 0x3366, 0x3377, 0x3382, 0x3394, 0x33af, 0x33bb, 0x33c8, + 0x33d8, 0x33e6, 0x3401, 0x3416, 0x342a, 0x3435, 0x344a, 0x345f, + 0x347a, 0x3496, 0x34aa, 0x34be, 0x34da, 0x34f7, 0x350c, 0x3522, + 0x353a, 0x3553, 0x356a, 0x3582, 0x3599, 0x35b1, 0x35d2, 0x35f3, + 0x360f, 0x361c, 0x3632, 0x3640, 0x364a, 0x3663, 0x366f, 0x3679, + 0x3685, 0x3695, 0x36ab, 0x36c2, 0x36cf, 0x36e4, 0x36ef, 0x36fc, + 0x3712, 0x3723, 0x3737, 0x3740, 0x374d, 0x375b, 0x377f, 0x3794, + 0x37aa, 0x37bc, 0x37cd, 0x37e3, 0x37f9, 0x3811, 0x3823, 0x3832, + // Entry 2940 - 297F + 0x3843, 0x3858, 0x386d, 0x3883, 0x3893, 0x38a8, 0x38bd, 0x38d1, + 0x38e5, 0x38fb, 0x3910, 0x3921, 0x3933, 0x3948, 0x395d, 0x3972, + 0x3987, 0x3997, 0x39a6, 0x39b7, 0x39c6, 0x39d6, 0x39e7, 0x39f9, + 0x3a0d, 0x3a22, 0x3a37, 0x3a47, 0x3a5a, 0x3a6d, 0x3a93, 0x3aa2, + 0x3ab1, 0x3ac1, 0x3ada, 0x3ae9, 0x3aff, 0x3b15, 0x3b27, 0x3b37, + 0x3b54, 0x3b67, 0x3b7a, 0x3b8f, 0x3ba3, 0x3bb3, 0x3bc4, 0x3bd3, + 0x3be2, 0x3bf1, 0x3c06, 0x3c1b, 0x3c2b, 0x3c3d, 0x3c52, 0x3c67, + 0x3c7e, 0x3c8f, 0x3ca2, 0x3cb6, 0x3cca, 0x3ce6, 0x3d01, 0x3d11, + // Entry 2980 - 29BF + 0x3d30, 0x3d4e, 0x3d5e, 0x3d7b, 0x3d96, 0x3daa, 0x3dbe, 0x3dce, + 0x3deb, 0x3dff, 0x3e13, 0x3e30, 0x3e4d, 0x3e62, 0x3e77, 0x3e87, + 0x3e97, 0x3ebe, 0x3edb, 0x3ef8, 0x3f14, 0x3f27, 0x3f3a, 0x3f4f, + 0x3f6b, 0x3f7b, 0x3f99, 0x3fa9, 0x3fba, 0x3fd7, 0x3ff4, 0x4011, + 0x402d, 0x404a, 0x4067, 0x4084, 0x40a1, 0x40bf, 0x40dd, 0x40fc, + 0x411b, 0x412d, 0x414c, 0x416b, 0x417d, 0x4190, 0x41a2, 0x41b6, + 0x41cb, 0x41de, 0x41f0, 0x4202, 0x4214, 0x4227, 0x423b, 0x424f, + 0x4266, 0x427a, 0x428c, 0x42a0, 0x42b7, 0x42cb, 0x42df, 0x42f2, + // Entry 29C0 - 29FF + 0x4306, 0x4323, 0x4342, 0x4354, 0x436d, 0x4380, 0x4394, 0x43aa, + 0x43be, 0x43d2, 0x43ea, 0x43fe, 0x4414, 0x4425, 0x443d, 0x4453, + 0x4465, 0x4479, 0x448d, 0x44a0, 0x44b3, 0x44c7, 0x44da, 0x44ef, + 0x4504, 0x451b, 0x452f, 0x4542, 0x4558, 0x456d, 0x457f, 0x459a, + 0x45b5, 0x45cf, 0x45e7, 0x45fb, 0x460d, 0x4621, 0x4637, 0x464a, + 0x465e, 0x4674, 0x4687, 0x469a, 0x46af, 0x46c1, 0x46d6, 0x46eb, + 0x46fd, 0x4712, 0x4724, 0x4736, 0x4748, 0x475b, 0x476e, 0x4781, + 0x4794, 0x47a8, 0x47bd, 0x47d2, 0x47e8, 0x47fa, 0x480d, 0x4821, + // Entry 2A00 - 2A3F + 0x4835, 0x4848, 0x485b, 0x4870, 0x4887, 0x48a5, 0x48b9, 0x48cc, + 0x48de, 0x48f0, 0x4907, 0x491a, 0x492e, 0x4941, 0x4955, 0x4968, + 0x497a, 0x498e, 0x49aa, 0x49c1, 0x49db, 0x49ef, 0x4a02, 0x4a15, + 0x4a27, 0x4a3b, 0x4a4f, 0x4a63, 0x4a78, 0x4a8c, 0x4aa0, 0x4ab3, + 0x4ac7, 0x4adc, 0x4aef, 0x4b02, 0x4b14, 0x4b26, 0x4b3a, 0x4b50, + 0x4b62, 0x4b74, 0x4b87, 0x4b99, 0x4bad, 0x4bc0, 0x4bd7, 0x4bea, + 0x4bff, 0x4c14, 0x4c29, 0x4c3e, 0x4c51, 0x4c68, 0x4c7c, 0x4c90, + 0x4ca4, 0x4cb9, 0x4ccd, 0x4cea, 0x4d00, 0x4d13, 0x4d25, 0x4d38, + // Entry 2A40 - 2A7F + 0x4d4d, 0x4d62, 0x4d75, 0x4d87, 0x4d9c, 0x4db0, 0x4dc2, 0x4dd4, + 0x4de7, 0x4dfa, 0x4e0d, 0x4e22, 0x4e38, 0x4e4b, 0x4e5e, 0x4e71, + 0x4e8b, 0x4ea1, 0x4eb4, 0x4ec7, 0x4eda, 0x4eee, 0x4f02, 0x4f22, + 0x4f35, 0x4f48, 0x4f5c, 0x4f6f, 0x4f85, 0x4fa2, 0x4fb5, 0x4fc9, + 0x4fdc, 0x4fef, 0x5001, 0x5013, 0x5026, 0x503d, 0x5051, 0x5064, + 0x5077, 0x508a, 0x509e, 0x50bd, 0x50d4, 0x50e8, 0x50fb, 0x510e, + 0x5121, 0x5134, 0x5148, 0x515b, 0x5170, 0x5185, 0x5199, 0x51b2, + 0x51c5, 0x51da, 0x51ed, 0x51ff, 0x5212, 0x5225, 0x5239, 0x524e, + // Entry 2A80 - 2ABF + 0x5263, 0x5277, 0x52a6, 0x52d6, 0x5310, 0x534b, 0x537a, 0x53af, + 0x53e4, 0x5418, 0x5452, 0x548d, 0x54c7, 0x54f1, 0x5502, 0x5513, + 0x5528, 0x5532, 0x5555, 0x556f, 0x5587, 0x559e, 0x55b0, 0x55c3, + 0x55dc, 0x55f6, 0x5609, 0x561d, 0x5636, 0x5650, 0x566d, 0x568b, + 0x5696, 0x569f, 0x56ba, 0x56d6, 0x56f3, 0x5711, 0x5732, 0x5754, + 0x576d, 0x5787, 0x5790, 0x57b4, 0x57cf, 0x57ee, 0x57fe, 0x5812, + 0x5826, 0x583c, 0x5851, 0x5866, 0x587a, 0x5890, 0x58a6, 0x58bb, + 0x58d6, 0x58f2, 0x5911, 0x592f, 0x594a, 0x5965, 0x596e, 0x5987, + // Entry 2AC0 - 2AFF + 0x59b2, 0x59d6, 0x5a0c, 0x5a30, 0x5a43, 0x5a73, 0x5a87, 0x5a9e, + 0x5ab5, 0x5ad8, 0x5ae1, 0x5af6, 0x5b15, 0x5b30, 0x5b47, 0x5b58, + 0x5b6f, 0x5b80, 0x5b97, 0x5ba8, 0x5bbf, 0x5bd0, 0x5be7, 0x5bf8, + 0x5c0a, 0x5c1c, 0x5c2e, 0x5c40, 0x5c52, 0x5c64, 0x5c76, 0x5c88, + 0x5c9a, 0x5cac, 0x5cbe, 0x5cd0, 0x5ce2, 0x5cf4, 0x5d06, 0x5d18, + 0x5d2a, 0x5d3c, 0x5d4e, 0x5d60, 0x5d72, 0x5d84, 0x5d96, 0x5da8, + 0x5dc0, 0x5dd2, 0x5de4, 0x5df6, 0x5e08, 0x5e1a, 0x5e2c, 0x5e3e, + 0x5e50, 0x5e62, 0x5e74, 0x5e86, 0x5e98, 0x5eaa, 0x5ebc, 0x5ece, + // Entry 2B00 - 2B3F + 0x5ee0, 0x5ef2, 0x5f04, 0x5f16, 0x5f28, 0x5f3a, 0x5f4c, 0x5f5e, + 0x5f70, 0x5f82, 0x5f94, 0x5fa6, 0x5fb8, 0x5fca, 0x5fdc, 0x5fee, + 0x6006, 0x6018, 0x6030, 0x6042, 0x605a, 0x606c, 0x607e, 0x6090, + 0x60a2, 0x60b4, 0x60c6, 0x60de, 0x60f0, 0x6102, 0x6114, 0x6126, + 0x6137, 0x6149, 0x6161, 0x6179, 0x61a6, 0x61d8, 0x61fb, 0x6223, + 0x623a, 0x6258, 0x626d, 0x628c, 0x62a3, 0x62b4, 0x62cb, 0x62dc, + 0x62f3, 0x6304, 0x631b, 0x632c, 0x6343, 0x6354, 0x6366, 0x6378, + 0x638a, 0x639c, 0x63ae, 0x63c0, 0x63d2, 0x63e4, 0x63f6, 0x6408, + // Entry 2B40 - 2B7F + 0x641a, 0x642c, 0x643e, 0x6450, 0x6462, 0x6474, 0x6486, 0x6498, + 0x64aa, 0x64bc, 0x64ce, 0x64e0, 0x64f2, 0x6504, 0x651c, 0x652e, + 0x6540, 0x6552, 0x6564, 0x6576, 0x6588, 0x659a, 0x65ac, 0x65be, + 0x65d0, 0x65e2, 0x65f4, 0x6606, 0x6618, 0x662a, 0x663c, 0x664e, + 0x6660, 0x6672, 0x6684, 0x6696, 0x66a8, 0x66ba, 0x66cc, 0x66de, + 0x66f0, 0x6702, 0x6714, 0x6726, 0x6738, 0x674a, 0x6762, 0x6774, + 0x678c, 0x679e, 0x67b6, 0x67c8, 0x67da, 0x67ec, 0x67fe, 0x6810, + 0x6822, 0x683a, 0x684c, 0x685e, 0x6870, 0x6882, 0x6893, 0x68a5, + // Entry 2B80 - 2BBF + 0x68bd, 0x68d5, 0x68e7, 0x68f9, 0x690b, 0x691d, 0x6930, 0x6956, + 0x696d, 0x698b, 0x69a0, 0x69b1, 0x69c2, 0x69d3, 0x69e4, 0x69f5, + 0x6a06, 0x6a17, 0x6a28, 0x6a39, 0x6a4a, 0x6a5b, 0x6a6c, 0x6a7d, + 0x6a8e, 0x6aa0, 0x6ab2, 0x6ac4, 0x6ad5, 0x6ae6, 0x6af7, 0x6b08, + 0x6b19, 0x6b2a, 0x6b3b, 0x6b4d, 0x6b5f, 0x6b71, 0x6b83, 0x6b95, + 0x6ba7, 0x6bb9, 0x6bcc, 0x6bdf, 0x6bf1, 0x6c02, 0x6c13, 0x6c25, + 0x6c36, 0x6c48, 0x6c5a, 0x6c6c, 0x6c80, 0x6c99, 0x6cb2, 0x6cc5, + 0x6cde, 0x6cf7, 0x6d0b, 0x6d24, 0x6d37, 0x6d51, 0x6d6a, 0x6d83, + // Entry 2BC0 - 2BFF + 0x6d9b, 0x6db6, 0x6dd1, 0x6dea, 0x6dfd, 0x6e10, 0x6e28, 0x6e40, + 0x6e52, 0x6e69, 0x6e7c, 0x6e8f, 0x6ea7, 0x6ebc, 0x6ed1, 0x6ee6, + 0x6efb, 0x6f0e, 0x6f1d, 0x6f2d, 0x6f3d, 0x6f4e, 0x6f5e, 0x6f6d, + 0x6f7e, 0x6f8e, 0x6f9d, 0x6fad, 0x6fbe, 0x6fce, 0x6fde, 0x6fed, + 0x6ffe, 0x700e, 0x701e, 0x702e, 0x703e, 0x704e, 0x705d, 0x706a, + 0x7082, 0x709c, 0x70b4, 0x70cf, 0x70ee, 0x7108, 0x7126, 0x7141, + 0x7160, 0x7179, 0x7191, 0x71ac, 0x71c7, 0x71e1, 0x71fb, 0x721a, + 0x7239, 0x7252, 0x726d, 0x7288, 0x72a8, 0x72c1, 0x72d9, 0x72f2, + // Entry 2C00 - 2C3F + 0x730a, 0x7322, 0x7337, 0x734f, 0x7365, 0x7380, 0x739e, 0x73bb, + 0x73d3, 0x73ec, 0x73ff, 0x7413, 0x7425, 0x7439, 0x744c, 0x745e, + 0x7471, 0x7485, 0x74a8, 0x74cb, 0x74ea, 0x7509, 0x752a, 0x754a, + 0x7569, 0x758b, 0x75ad, 0x75ce, 0x75f0, 0x7611, 0x7633, 0x7655, + 0x7676, 0x7695, 0x76a7, 0x76b9, 0x76cb, 0x76dd, 0x76ef, 0x7702, + 0x7714, 0x7727, 0x7739, 0x774c, 0x775f, 0x7772, 0x7784, 0x7797, + 0x77ab, 0x77bf, 0x77d1, 0x77e3, 0x77f6, 0x780a, 0x7821, 0x7838, + 0x784f, 0x7866, 0x7878, 0x788a, 0x789c, 0x78a8, 0x78b5, 0x78c2, + // Entry 2C40 - 2C7F + 0x78d0, 0x78dd, 0x78eb, 0x78f9, 0x7906, 0x7915, 0x7924, 0x7932, + 0x7941, 0x7950, 0x795e, 0x796d, 0x7979, 0x7985, 0x7991, 0x799d, + 0x79aa, 0x79b6, 0x79c3, 0x79d0, 0x79dd, 0x79eb, 0x79f8, 0x7a05, + 0x7a12, 0x7a1f, 0x7a2c, 0x7a3a, 0x7a48, 0x7a57, 0x7a67, 0x7a74, + 0x7a80, 0x7a98, 0x7ab0, 0x7ac8, 0x7ae0, 0x7af8, 0x7b10, 0x7b28, + 0x7b40, 0x7b58, 0x7b70, 0x7b88, 0x7ba0, 0x7bb8, 0x7bd0, 0x7be8, + 0x7c00, 0x7c1b, 0x7c35, 0x7c50, 0x7c6a, 0x7c84, 0x7c9e, 0x7cb7, + 0x7cd1, 0x7ceb, 0x7d07, 0x7d23, 0x7d3f, 0x7d5b, 0x7d75, 0x7d92, + // Entry 2C80 - 2CBF + 0x7dae, 0x7dcb, 0x7de7, 0x7e03, 0x7e1f, 0x7e3a, 0x7e56, 0x7e72, + 0x7e90, 0x7eae, 0x7ecc, 0x7eea, 0x7f06, 0x7f22, 0x7f46, 0x7f69, + 0x7f84, 0x7f9f, 0x7fbc, 0x7fd8, 0x7ff4, 0x800f, 0x802c, 0x8049, + 0x8065, 0x8080, 0x809c, 0x80b8, 0x80d5, 0x80f1, 0x810e, 0x812b, + 0x8146, 0x8163, 0x817f, 0x819e, 0x81ba, 0x81d9, 0x81fa, 0x8220, + 0x823d, 0x825e, 0x827a, 0x8297, 0x82b8, 0x82da, 0x82fa, 0x831a, + 0x833a, 0x8356, 0x8372, 0x838f, 0x83a9, 0x83c7, 0x83df, 0x83f5, + 0x8417, 0x843c, 0x8461, 0x8485, 0x84a9, 0x84cd, 0x84f3, 0x8518, + // Entry 2CC0 - 2CFF + 0x8528, 0x8541, 0x855a, 0x8575, 0x858f, 0x85a9, 0x85c2, 0x85dd, + 0x85f8, 0x8612, 0x8627, 0x8640, 0x8659, 0x8674, 0x868e, 0x86a8, + 0x86bd, 0x86d1, 0x86e6, 0x86fa, 0x870e, 0x8722, 0x8735, 0x8749, + 0x875d, 0x8773, 0x8789, 0x879f, 0x87b5, 0x87c9, 0x87e0, 0x87f6, + 0x880d, 0x8823, 0x8839, 0x884f, 0x8864, 0x887a, 0x8890, 0x88a8, + 0x88c0, 0x88d8, 0x88f0, 0x8906, 0x8925, 0x8943, 0x8959, 0x896f, + 0x8984, 0x8999, 0x89b0, 0x89c6, 0x89dc, 0x89f1, 0x8a08, 0x8a1f, + 0x8a35, 0x8a4a, 0x8a60, 0x8a76, 0x8a8d, 0x8aa3, 0x8aba, 0x8ad1, + // Entry 2D00 - 2D3F + 0x8ae6, 0x8afd, 0x8b13, 0x8b2c, 0x8b42, 0x8b5b, 0x8b76, 0x8b96, + 0x8bad, 0x8bc5, 0x8bdb, 0x8bf3, 0x8c0d, 0x8c28, 0x8c3f, 0x8c5a, + 0x8c70, 0x8c86, 0x8c9c, 0x8cb5, 0x8ccb, 0x8ce3, 0x8cf8, 0x8d0e, + 0x8d25, 0x8d3f, 0x8d59, 0x8d70, 0x8d8b, 0x8da7, 0x8dc1, 0x8ddb, + 0x8df2, 0x8e0b, 0x8e26, 0x8e41, 0x8e5b, 0x8e6f, 0x8e87, 0x8e9f, + 0x8eb9, 0x8ed2, 0x8eeb, 0x8f03, 0x8f1d, 0x8f37, 0x8f50, 0x8f64, + 0x8f8c, 0x8fb5, 0x8fdb, 0x9001, 0x9025, 0x904a, 0x906f, 0x9096, + 0x90c0, 0x90e8, 0x9111, 0x913a, 0x9143, 0x914d, 0x9156, 0x916c, + // Entry 2D40 - 2D7F + 0x917e, 0x9190, 0x91a2, 0x91b4, 0x91c6, 0x91d9, 0x91ec, 0x91ff, + 0x9212, 0x9225, 0x9238, 0x924b, 0x925e, 0x9271, 0x9284, 0x9297, + 0x92aa, 0x92bd, 0x92d0, 0x92e3, 0x92f6, 0x9309, 0x931c, 0x932f, + 0x9342, 0x9355, 0x9368, 0x937b, 0x938e, 0x93a1, 0x93b4, 0x93c7, + 0x93da, 0x93ed, 0x9400, 0x9413, 0x9426, 0x9439, 0x944c, 0x945f, + 0x9472, 0x9485, 0x9498, 0x94ab, 0x94be, 0x94d1, 0x94e4, 0x94f1, + 0x94fe, 0x950a, 0x9515, 0x9522, 0x952d, 0x9537, 0x9546, 0x9552, + 0x955d, 0x9568, 0x9574, 0x9582, 0x9590, 0x959c, 0x95a8, 0x95b3, + // Entry 2D80 - 2DBF + 0x95bf, 0x95cc, 0x95da, 0x95e5, 0x95f6, 0x9608, 0x9618, 0x9625, + 0x9635, 0x9645, 0x9653, 0x965f, 0x966c, 0x9678, 0x9686, 0x9695, + 0x96a3, 0x96af, 0x96bb, 0x96c7, 0x96d2, 0x96dd, 0x96e7, 0x96f2, + 0x96fe, 0x970a, 0x9719, 0x9725, 0x9733, 0x9743, 0x9750, 0x975b, + 0x9766, 0x9775, 0x9782, 0x9791, 0x979d, 0x97ad, 0x97b8, 0x97c5, + 0x97d2, 0x97de, 0x97ea, 0x97f6, 0x9803, 0x9810, 0x981a, 0x9826, + 0x9832, 0x983d, 0x984b, 0x9857, 0x9863, 0x9870, 0x987e, 0x988c, + 0x9897, 0x98a7, 0x98b2, 0x98c0, 0x98ce, 0x98da, 0x98e6, 0x98f1, + // Entry 2DC0 - 2DFF + 0x98ff, 0x990a, 0x9916, 0x9924, 0x992f, 0x993e, 0x994a, 0x9974, + 0x999d, 0x99c6, 0x99f1, 0x9a1b, 0x9a45, 0x9a6e, 0x9a99, 0x9ac4, + 0x9aee, 0x9b17, 0x9b43, 0x9b6f, 0x9b9d, 0x9bcb, 0x9bf8, 0x9c25, + 0x9c54, 0x9c82, 0x9cb0, 0x9cdc, 0x9d0c, 0x9d3c, 0x9d6e, 0x9d9f, + 0x9da9, 0x9db2, 0x9dbb, 0x9dc5, 0x9dce, 0x9dd7, 0x9de0, 0x9df1, + 0x9e00, 0x9e09, 0x9e1f, 0x9e35, 0x9e4c, 0x9e61, 0x9e73, 0x9e81, + 0x9e8a, 0x9e95, 0x9e9e, 0x9ea7, 0x9eb0, 0x9eb9, 0x9ec2, 0x9ecc, + 0x9ed7, 0x9ee0, 0x9ee9, 0x9ef4, 0x9eff, 0x9f08, 0x9f11, 0x9f1a, + // Entry 2E00 - 2E3F + 0x9f24, 0x9f2e, 0x9f38, 0x9f42, 0x9f4d, 0x9f56, 0x9f5f, 0x9f68, + 0x9f71, 0x9f7a, 0x9f85, 0x9f8e, 0x9f97, 0x9fa0, 0x9fb1, 0x9fc2, + 0x9fd2, 0x9fe3, 0x9ff2, 0xa001, 0xa00f, 0xa01e, 0xa02d, 0xa044, + 0xa04d, 0xa057, 0xa061, 0xa06b, 0xa075, 0xa086, 0xa09f, 0xa0a8, + 0xa0b1, 0xa0bc, 0xa0c5, 0xa0ce, 0xa0d7, 0xa0e2, 0xa0eb, 0xa0f4, + 0xa102, 0xa10b, 0xa114, 0xa11f, 0xa128, 0xa131, 0xa13f, 0xa14b, + 0xa157, 0xa160, 0xa169, 0xa172, 0xa17b, 0xa18b, 0xa194, 0xa19d, + 0xa1a6, 0xa1af, 0xa1b8, 0xa1c1, 0xa1ca, 0xa1db, 0xa1e4, 0xa1ed, + // Entry 2E40 - 2E7F + 0xa1f6, 0xa200, 0xa209, 0xa218, 0xa222, 0xa22c, 0xa235, 0xa23e, + 0xa248, 0xa251, 0xa25a, 0xa263, 0xa26c, 0xa27b, 0xa28a, 0xa2b2, + 0xa2da, 0xa304, 0xa32d, 0xa356, 0xa37e, 0xa3a8, 0xa3d2, 0xa3fb, + 0xa423, 0xa44e, 0xa479, 0xa4a6, 0xa4d3, 0xa4ff, 0xa52b, 0xa559, + 0xa586, 0xa5b3, 0xa5de, 0xa60d, 0xa63c, 0xa66d, 0xa69d, 0xa6cd, + 0xa6fc, 0xa72d, 0xa75e, 0xa78e, 0xa7b9, 0xa7e8, 0xa7f2, 0xa812, + 0xa832, 0xa85a, 0xa875, 0xa889, 0xa89e, 0xa8b3, 0xa8d0, 0xa8e9, + 0xa8fe, 0xa910, 0xa927, 0xa93e, 0xa95b, 0xa96f, 0xa986, 0xa99c, + // Entry 2E80 - 2EBF + 0xa9bc, 0xa9d1, 0xa9eb, 0xaa06, 0xaa18, 0xaa34, 0xaa47, 0xaa5d, + 0xaa76, 0xaa90, 0xaab0, 0xaace, 0xaaec, 0xab02, 0xab17, 0xab2b, + 0xab43, 0xab58, 0xab7b, 0xab92, 0xaba9, 0xabc1, 0xabd9, 0xabee, + 0xac03, 0xac1c, 0xac37, 0xac56, 0xac71, 0xac88, 0xac9d, 0xacb4, + 0xaccd, 0xacee, 0xad15, 0xad2d, 0xad4d, 0xad63, 0xad7c, 0xad98, + 0xadb4, 0xadcb, 0xade2, 0xadfa, 0xae1a, 0xae37, 0xae55, 0xae63, + 0xae71, 0xae7e, 0xae8c, 0xae9b, 0xaeaa, 0xaeb8, 0xaec7, 0xaed5, + 0xaee3, 0xaef0, 0xaefe, 0xaf0d, 0xaf1b, 0xaf2a, 0xaf38, 0xaf46, + // Entry 2EC0 - 2EFF + 0xaf53, 0xaf61, 0xaf6f, 0xaf7c, 0xaf8a, 0xaf99, 0xafa8, 0xafb6, + 0xafc5, 0xafd5, 0xafe5, 0xaff4, 0xb004, 0xb013, 0xb022, 0xb030, + 0xb03f, 0xb04f, 0xb05e, 0xb06e, 0xb07d, 0xb08c, 0xb09a, 0xb0a9, + 0xb0b8, 0xb0c6, 0xb0d5, 0xb0e4, 0xb0f3, 0xb101, 0xb110, 0xb120, + 0xb12f, 0xb13e, 0xb14d, 0xb15b, 0xb16a, 0xb17a, 0xb189, 0xb198, + 0xb1a7, 0xb1b5, 0xb1c4, 0xb1d4, 0xb1e3, 0xb1f3, 0xb202, 0xb211, + 0xb21f, 0xb22e, 0xb23e, 0xb24d, 0xb25d, 0xb26c, 0xb27b, 0xb289, + 0xb298, 0xb2a7, 0xb2b6, 0xb2c4, 0xb2d3, 0xb2e3, 0xb2f2, 0xb301, + // Entry 2F00 - 2F3F + 0xb310, 0xb31e, 0xb32d, 0xb33d, 0xb34c, 0xb35c, 0xb36c, 0xb37b, + 0xb38b, 0xb39c, 0xb3ad, 0xb3bd, 0xb3ce, 0xb3de, 0xb3ee, 0xb3fd, + 0xb40d, 0xb41e, 0xb42e, 0xb43f, 0xb44f, 0xb45f, 0xb46e, 0xb47e, + 0xb48e, 0xb49d, 0xb4ad, 0xb4bd, 0xb4cd, 0xb4dc, 0xb4ec, 0xb4fd, + 0xb50d, 0xb51d, 0xb52d, 0xb53c, 0xb54c, 0xb55c, 0xb56c, 0xb57b, + 0xb58b, 0xb59c, 0xb5ac, 0xb5bd, 0xb5cd, 0xb5dd, 0xb5ec, 0xb5fc, + 0xb60c, 0xb61c, 0xb62b, 0xb63b, 0xb64b, 0xb65b, 0xb66a, 0xb67a, + 0xb68b, 0xb69b, 0xb6ab, 0xb6bb, 0xb6ca, 0xb6da, 0xb6eb, 0xb6fb, + // Entry 2F40 - 2F7F + 0xb70b, 0xb71b, 0xb72a, 0xb73a, 0xb74b, 0xb75b, 0xb76c, 0xb77c, + 0xb78c, 0xb79b, 0xb7ab, 0xb7bc, 0xb7cc, 0xb7dd, 0xb7ed, 0xb7fd, + 0xb80c, 0xb81c, 0xb82c, 0xb83c, 0xb84b, 0xb85b, 0xb86c, 0xb87c, + 0xb88c, 0xb89b, 0xb8ab, 0xb8bc, 0xb8cc, 0xb8db, 0xb8ea, 0xb8f8, + 0xb907, 0xb917, 0xb926, 0xb936, 0xb945, 0xb954, 0xb962, 0xb971, + 0xb981, 0xb991, 0xb9a0, 0xb9b0, 0xb9bf, 0xb9ce, 0xb9dc, 0xb9eb, + 0xb9fa, 0xba08, 0xba17, 0xba26, 0xba34, 0xba43, 0xba53, 0xba62, + 0xba71, 0xba80, 0xba8e, 0xba9d, 0xbaac, 0xbabb, 0xbac9, 0xbad8, + // Entry 2F80 - 2FBF + 0xbae7, 0xbaf6, 0xbb04, 0xbb13, 0xbb22, 0xbb30, 0xbb3f, 0xbb4e, + 0xbb5d, 0xbb6b, 0xbb7a, 0xbb8a, 0xbb99, 0xbba8, 0xbbb7, 0xbbc5, + 0xbbd4, 0xbbe3, 0xbbf2, 0xbc00, 0xbc0f, 0xbc1f, 0xbc2f, 0xbc3e, + 0xbc4e, 0xbc5d, 0xbc6c, 0xbc7a, 0xbc89, 0xbc98, 0xbca7, 0xbcb5, + 0xbcc4, 0xbcd3, 0xbce2, 0xbcf1, 0xbd00, 0xbd0e, 0xbd1d, 0xbd2d, + 0xbd3c, 0xbd4b, 0xbd5a, 0xbd68, 0xbd77, 0xbd87, 0xbd96, 0xbda5, + 0xbdb4, 0xbdc2, 0xbdd1, 0xbde1, 0xbdf0, 0xbe00, 0xbe0f, 0xbe1e, + 0xbe2c, 0xbe3b, 0xbe4b, 0xbe5a, 0xbe69, 0xbe78, 0xbe86, 0xbe95, + // Entry 2FC0 - 2FFF + 0xbea4, 0xbeb2, 0xbec1, 0xbed0, 0xbedf, 0xbeed, 0xbefc, 0xbf0c, + 0xbf1b, 0xbf2a, 0xbf39, 0xbf47, 0xbf56, 0xbf66, 0xbf75, 0xbf85, + 0xbf94, 0xbfa3, 0xbfb1, 0xbfc0, 0xbfd0, 0xbfe0, 0xbfef, 0xbfff, + 0xc00e, 0xc01d, 0xc02b, 0xc03a, 0xc049, 0xc057, 0xc066, 0xc075, + 0xc084, 0xc092, 0xc0a1, 0xc0b1, 0xc0c0, 0xc0d0, 0xc0e0, 0xc0ef, + 0xc0ff, 0xc110, 0xc120, 0xc131, 0xc141, 0xc151, 0xc160, 0xc170, + 0xc181, 0xc191, 0xc1a2, 0xc1b2, 0xc1c2, 0xc1d1, 0xc1e1, 0xc1f1, + 0xc200, 0xc210, 0xc220, 0xc230, 0xc23f, 0xc24f, 0xc260, 0xc270, + // Entry 3000 - 303F + 0xc280, 0xc290, 0xc29f, 0xc2af, 0xc2c0, 0xc2d0, 0xc2e0, 0xc2f0, + 0xc2ff, 0xc30f, 0xc31f, 0xc32f, 0xc33e, 0xc34e, 0xc35e, 0xc36d, + 0xc37d, 0xc38d, 0xc39d, 0xc3ac, 0xc3bc, 0xc3cd, 0xc3dd, 0xc3ed, + 0xc3fd, 0xc40c, 0xc41c, 0xc42d, 0xc43e, 0xc44e, 0xc45f, 0xc46f, + 0xc47f, 0xc48e, 0xc49e, 0xc4af, 0xc4bf, 0xc4cf, 0xc4df, 0xc4ef, + 0xc4ff, 0xc50e, 0xc51e, 0xc52e, 0xc53d, 0xc54c, 0xc55a, 0xc569, + 0xc579, 0xc588, 0xc598, 0xc5a7, 0xc5b5, 0xc5c4, 0xc5d4, 0xc5e3, + 0xc5f3, 0xc602, 0xc611, 0xc61f, 0xc62e, 0xc63d, 0xc64b, 0xc65a, + // Entry 3040 - 307F + 0xc669, 0xc678, 0xc686, 0xc695, 0xc6a5, 0xc6b4, 0xc6c4, 0xc6d4, + 0xc6e3, 0xc6f3, 0xc704, 0xc714, 0xc725, 0xc735, 0xc745, 0xc754, + 0xc764, 0xc775, 0xc785, 0xc796, 0xc7a6, 0xc7b5, 0xc7c5, 0xc7d5, + 0xc7e4, 0xc7f4, 0xc804, 0xc814, 0xc823, 0xc833, 0xc844, 0xc854, + 0xc864, 0xc874, 0xc883, 0xc893, 0xc8a4, 0xc8b4, 0xc8c3, 0xc8d2, + 0xc8e0, 0xc8ef, 0xc8ff, 0xc90f, 0xc91e, 0xc92e, 0xc93d, 0xc94c, + 0xc95a, 0xc969, 0xc979, 0xc989, 0xc998, 0xc9a8, 0xc9b7, 0xc9c6, + 0xc9d4, 0xc9e3, 0xc9f2, 0xca00, 0xca0f, 0xca1e, 0xca2d, 0xca3b, + // Entry 3080 - 30BF + 0xca4a, 0xca5a, 0xca69, 0xca78, 0xca87, 0xca95, 0xcaa4, 0xcab4, + 0xcac3, 0xcad2, 0xcae1, 0xcaef, 0xcafe, 0xcb0e, 0xcb1e, 0xcb2d, + 0xcb3d, 0xcb4c, 0xcb5b, 0xcb69, 0xcb78, 0xcb88, 0xcb98, 0xcba7, + 0xcbb7, 0xcbc6, 0xcbd5, 0xcbe3, 0xcbf2, 0xcc01, 0xcc10, 0xcc1e, + 0xcc2d, 0xcc3c, 0xcc4b, 0xcc59, 0xcc68, 0xcc78, 0xcc87, 0xcc96, + 0xcca5, 0xccb3, 0xccc2, 0xccd2, 0xcce1, 0xccf1, 0xcd00, 0xcd0f, + 0xcd1d, 0xcd2c, 0xcd3c, 0xcd4b, 0xcd5b, 0xcd6a, 0xcd79, 0xcd87, + 0xcd96, 0xcda5, 0xcdb4, 0xcdc2, 0xcdd1, 0xcde0, 0xcdef, 0xcdfd, + // Entry 30C0 - 30FF + 0xce0c, 0xce1c, 0xce2b, 0xce3b, 0xce4b, 0xce5a, 0xce6b, 0xce7b, + 0xce8c, 0xce9c, 0xceac, 0xcebb, 0xcecb, 0xcedc, 0xceed, 0xcefd, + 0xcf0e, 0xcf1e, 0xcf2e, 0xcf3d, 0xcf4d, 0xcf5d, 0xcf6d, 0xcf7c, + 0xcf8c, 0xcf9c, 0xcfac, 0xcfbb, 0xcfcb, 0xcfdc, 0xcfec, 0xcffd, + 0xd00d, 0xd01d, 0xd02d, 0xd03c, 0xd04c, 0xd05d, 0xd06d, 0xd07e, + 0xd08e, 0xd09e, 0xd0ad, 0xd0bd, 0xd0cd, 0xd0dc, 0xd0ec, 0xd0fc, + 0xd10c, 0xd11b, 0xd12b, 0xd13c, 0xd14c, 0xd15c, 0xd16c, 0xd17b, + 0xd18b, 0xd19c, 0xd1ad, 0xd1bd, 0xd1ce, 0xd1de, 0xd1ee, 0xd1fd, + // Entry 3100 - 313F + 0xd20d, 0xd21e, 0xd22f, 0xd23f, 0xd250, 0xd260, 0xd270, 0xd27f, + 0xd28f, 0xd29f, 0xd2ae, 0xd2be, 0xd2cf, 0xd2df, 0xd2f0, 0xd300, + 0xd310, 0xd31f, 0xd32f, 0xd340, 0xd351, 0xd361, 0xd371, 0xd381, + 0xd390, 0xd3a0, 0xd3b0, 0xd3bf, 0xd3cf, 0xd3de, 0xd3ee, 0xd3fd, + 0xd40c, 0xd41b, 0xd429, 0xd438, 0xd448, 0xd458, 0xd467, 0xd477, + 0xd486, 0xd495, 0xd4a3, 0xd4b2, 0xd4c1, 0xd4cf, 0xd4de, 0xd4ed, + 0xd4fc, 0xd50a, 0xd519, 0xd529, 0xd538, 0xd548, 0xd557, 0xd565, + 0xd574, 0xd583, 0xd591, 0xd5a0, 0xd5af, 0xd5be, 0xd5cc, 0xd5db, + // Entry 3140 - 317F + 0xd5eb, 0xd5fa, 0xd60a, 0xd619, 0xd628, 0xd636, 0xd645, 0xd655, + 0xd664, 0xd674, 0xd683, 0xd692, 0xd6a0, 0xd6af, 0xd6be, 0xd6cc, + 0xd6db, 0xd6ea, 0xd6f9, 0xd707, 0xd716, 0xd726, 0xd735, 0xd744, + 0xd753, 0xd761, 0xd770, 0xd780, 0xd78f, 0xd79e, 0xd7ad, 0xd7bb, + 0xd7ca, 0xd7da, 0xd7ea, 0xd7f9, 0xd809, 0xd818, 0xd827, 0xd835, + 0xd844, 0xd854, 0xd863, 0xd873, 0xd882, 0xd891, 0xd89f, 0xd8ae, + 0xd8bd, 0xd8cb, 0xd8da, 0xd8e9, 0xd8f8, 0xd906, 0xd915, 0xd925, + 0xd934, 0xd943, 0xd952, 0xd960, 0xd96f, 0xd97f, 0xd98e, 0xd99e, + // Entry 3180 - 31BF + 0xd9ae, 0xd9bd, 0xd9cd, 0xd9de, 0xd9ef, 0xd9ff, 0xda10, 0xda20, + 0xda30, 0xda3f, 0xda4f, 0xda5f, 0xda6e, 0xda7e, 0xda8e, 0xda9d, + 0xdaad, 0xdabd, 0xdacc, 0xdadc, 0xdaed, 0xdafd, 0xdb0d, 0xdb1d, + 0xdb2c, 0xdb3c, 0xdb4d, 0xdb5d, 0xdb6d, 0xdb7d, 0xdb8c, 0xdb9c, + 0xdbad, 0xdbbd, 0xdbce, 0xdbde, 0xdbee, 0xdbfd, 0xdc0d, 0xdc1e, + 0xdc2e, 0xdc3e, 0xdc4e, 0xdc5e, 0xdc6d, 0xdc7d, 0xdc8c, 0xdc9c, + 0xdcad, 0xdcbd, 0xdccd, 0xdcdd, 0xdcec, 0xdcfc, 0xdd0d, 0xdd1d, + 0xdd2c, 0xdd3b, 0xdd49, 0xdd58, 0xdd68, 0xdd77, 0xdd87, 0xdd96, + // Entry 31C0 - 31FF + 0xdda5, 0xddb3, 0xddc2, 0xddd2, 0xdde1, 0xddf1, 0xde00, 0xde0f, + 0xde1d, 0xde2c, 0xde3b, 0xde49, 0xde58, 0xde67, 0xde76, 0xde84, + 0xde93, 0xdea3, 0xdeb2, 0xdec1, 0xded0, 0xdede, 0xdeed, 0xdefd, + 0xdf0c, 0xdf1c, 0xdf2c, 0xdf3b, 0xdf4b, 0xdf5c, 0xdf6c, 0xdf7d, + 0xdf8d, 0xdf9d, 0xdfac, 0xdfbc, 0xdfcc, 0xdfdc, 0xdfeb, 0xdffb, + 0xe00b, 0xe01a, 0xe02a, 0xe03a, 0xe04a, 0xe059, 0xe069, 0xe079, + 0xe089, 0xe098, 0xe0a8, 0xe0b9, 0xe0c9, 0xe0d9, 0xe0e9, 0xe0f8, + 0xe108, 0xe119, 0xe129, 0xe13a, 0xe14a, 0xe15a, 0xe169, 0xe179, + // Entry 3200 - 323F + 0xe189, 0xe199, 0xe1a8, 0xe1b8, 0xe1c8, 0xe1d8, 0xe1e7, 0xe1f7, + 0xe208, 0xe218, 0xe228, 0xe238, 0xe247, 0xe257, 0xe268, 0xe278, + 0xe288, 0xe298, 0xe2a7, 0xe2b7, 0xe2c8, 0xe2d9, 0xe2e9, 0xe2fa, + 0xe30a, 0xe31a, 0xe329, 0xe339, 0xe349, 0xe359, 0xe368, 0xe378, + 0xe388, 0xe397, 0xe3a7, 0xe3b8, 0xe3c8, 0xe3d8, 0xe3e8, 0xe3f7, + 0xe407, 0xe418, 0xe428, 0xe438, 0xe447, 0xe458, 0xe468, 0xe478, + 0xe488, 0xe497, 0xe4a7, 0xe4b7, 0xe4c7, 0xe4d6, 0xe4e6, 0xe4f6, + 0xe506, 0xe515, 0xe525, 0xe536, 0xe546, 0xe556, 0xe566, 0xe575, + // Entry 3240 - 327F + 0xe585, 0xe596, 0xe5a6, 0xe5b6, 0xe5c6, 0xe5d5, 0xe5e5, 0xe5f5, + 0xe604, 0xe614, 0xe624, 0xe634, 0xe643, 0xe653, 0xe663, 0xe673, + 0xe682, 0xe692, 0xe6a3, 0xe6b3, 0xe6c3, 0xe6d3, 0xe6e2, 0xe6f2, + 0xe703, 0xe713, 0xe723, 0xe733, 0xe742, 0xe752, 0xe763, 0xe773, + 0xe784, 0xe794, 0xe7a4, 0xe7b3, 0xe7c3, 0xe7d3, 0xe7e3, 0xe7f2, + 0xe802, 0xe812, 0xe822, 0xe831, 0xe841, 0xe852, 0xe862, 0xe872, + 0xe882, 0xe891, 0xe8a1, 0xe8b2, 0xe8c2, 0xe8d1, 0xe8e0, 0xe8ee, + 0xe8fd, 0xe90d, 0xe91c, 0xe92c, 0xe93b, 0xe94a, 0xe958, 0xe967, + // Entry 3280 - 32BF + 0xe976, 0xe984, 0xe993, 0xe9a2, 0xe9b1, 0xe9bf, 0xe9ce, 0xe9de, + 0xe9ed, 0xe9fc, 0xea0b, 0xea19, 0xea28, 0xea38, 0xea47, 0xea56, + 0xea65, 0xea73, 0xea82, 0xea92, 0xeaa2, 0xeab1, 0xeac1, 0xead1, + 0xeae1, 0xeaf0, 0xeb00, 0xeb0f, 0xeb1e, 0xeb2c, 0xeb3b, 0xeb4a, + 0xeb59, 0xeb67, 0xeb76, 0xeb86, 0xeb95, 0xeba4, 0xebb3, 0xebc1, + 0xebd0, 0xebe0, 0xebef, 0xebfe, 0xec0d, 0xec1b, 0xec2a, 0xec3a, + 0xec4a, 0xec59, 0xec69, 0xec79, 0xec89, 0xec98, 0xeca8, 0xecb7, + 0xecc6, 0xecd4, 0xece3, 0xecf2, 0xed01, 0xed0f, 0xed1e, 0xed2e, + // Entry 32C0 - 32FF + 0xed3d, 0xed4c, 0xed5b, 0xed69, 0xed78, 0xed88, 0xed97, 0xeda7, + 0xedb7, 0xedc6, 0xedd6, 0xede7, 0xedf8, 0xee08, 0xee19, 0xee2a, + 0xee3a, 0xee4b, 0xee5b, 0xee6b, 0xee7a, 0xee8a, 0xee9a, 0xeeaa, + 0xeeb9, 0xeec9, 0xeeda, 0xeeea, 0xeefa, 0xef0a, 0xef19, 0xef29, + 0xef39, 0xef49, 0xef58, 0xef68, 0xef79, 0xef8a, 0xef9a, 0xefab, + 0xefbc, 0xefcc, 0xefdc, 0xefec, 0xeffb, 0xf00b, 0xf01b, 0xf02a, + 0xf03a, 0xf04b, 0xf05b, 0xf06b, 0xf07b, 0xf08a, 0xf09a, 0xf0ab, + 0xf0bb, 0xf0cb, 0xf0db, 0xf0ea, 0xf0fa, 0xf10b, 0xf11c, 0xf12c, + // Entry 3300 - 333F + 0xf13d, 0xf14e, 0xf15e, 0xf16f, 0xf17f, 0xf18f, 0xf19e, 0xf1ae, + 0xf1be, 0xf1ce, 0xf1dd, 0xf1ed, 0xf1fc, 0xf20b, 0xf219, 0xf228, + 0xf238, 0xf248, 0xf257, 0xf267, 0xf277, 0xf286, 0xf295, 0xf2a4, + 0xf2b2, 0xf2c1, 0xf2d0, 0xf2df, 0xf2ed, 0xf2fc, 0xf30c, 0xf31b, + 0xf32a, 0xf339, 0xf347, 0xf356, 0xf366, 0xf376, 0xf385, 0xf395, + 0xf3a5, 0xf3b5, 0xf3c4, 0xf3d4, 0xf3e3, 0xf3f2, 0xf400, 0xf40f, + 0xf41e, 0xf42d, 0xf43b, 0xf44a, 0xf45a, 0xf469, 0xf478, 0xf487, + 0xf495, 0xf4a4, 0xf4b4, 0xf4c3, 0xf4d1, 0xf4de, 0xf4ec, 0xf4fb, + // Entry 3340 - 337F + 0xf509, 0xf517, 0xf526, 0xf534, 0xf541, 0xf550, 0xf55e, 0xf56d, + 0xf57b, 0xf588, 0xf596, 0xf5a5, 0xf5b3, 0xf5c0, 0xf5ce, 0xf5dc, + 0xf5eb, 0xf5f9, 0xf608, 0xf617, 0xf624, 0xf631, 0xf640, 0xf64e, + 0xf65c, 0xf66a, 0xf678, 0xf686, 0xf694, 0xf6a2, 0xf6af, 0xf6bc, + 0xf6cb, 0xf6d9, 0xf6e7, 0xf6f6, 0xf703, 0xf710, 0xf71f, 0xf72d, + 0xf73a, 0xf749, 0xf757, 0xf766, 0xf775, 0xf783, 0xf792, 0xf7a0, + 0xf7b0, 0xf7bf, 0xf7cc, 0xf7da, 0xf7e8, 0xf7f7, 0xf805, 0xf813, + 0xf822, 0xf830, 0xf83e, 0xf84d, 0xf85b, 0xf869, 0xf878, 0xf887, + // Entry 3380 - 33BF + 0xf896, 0xf8a6, 0xf8b4, 0xf8c2, 0xf8d0, 0xf8de, 0xf8ed, 0xf8fb, + 0xf90a, 0xf918, 0xf926, 0xf935, 0xf943, 0xf951, 0xf960, 0xf96e, + 0xf97d, 0xf98a, 0xf998, 0xf9a5, 0xf9b3, 0xf9c0, 0xf9cd, 0xf9da, + 0xf9e8, 0xf9f6, 0xfa04, 0xfa1b, 0xfa31, 0xfa49, 0xfa60, 0xfa77, + 0xfa8f, 0xfaa5, 0xfabf, 0xface, 0xfade, 0xfaee, 0xfafe, 0xfb0f, + 0xfb1f, 0xfb30, 0xfb40, 0xfb51, 0xfb62, 0xfb74, 0xfb85, 0xfb95, + 0xfba5, 0xfbb5, 0xfbc6, 0xfbd7, 0xfbe9, 0xfbf9, 0xfc09, 0xfc19, + 0xfc2a, 0xfc3a, 0xfc4b, 0xfc5b, 0xfc6c, 0xfc7c, 0xfc8c, 0xfc9d, + // Entry 33C0 - 33FF + 0xfcad, 0xfcbd, 0xfccf, 0xfcdf, 0xfcef, 0xfcff, 0xfd10, 0xfd1e, + 0xfd2d, 0xfd3c, 0xfd4c, 0xfd5b, 0xfd6b, 0xfd7a, 0xfd8a, 0xfd99, + 0xfda9, 0xfdb9, 0xfdca, 0xfdda, 0xfde9, 0xfdf8, 0xfe07, 0xfe17, + 0xfe27, 0xfe38, 0xfe47, 0xfe56, 0xfe65, 0xfe75, 0xfe84, 0xfe94, + 0xfea3, 0xfeb3, 0xfec2, 0xfed1, 0xfee1, 0xfef0, 0xfeff, 0xff10, + 0xff1f, 0xff2e, 0xff3d, 0xff4d, 0xff5b, 0xff6a, 0xff7b, 0xff8a, + 0xff9a, 0xffa9, 0xffb9, 0xffc8, 0xffd8, 0xffe7, 0xfff7, 0x0007, + 0x0018, 0x0029, 0x0039, 0x0048, 0x0057, 0x0066, 0x0076, 0x0086, + // Entry 3400 - 343F + 0x0097, 0x00a6, 0x00b5, 0x00c4, 0x00d4, 0x00e3, 0x00f3, 0x0102, + 0x0112, 0x0121, 0x0130, 0x0140, 0x014f, 0x015e, 0x016e, 0x017f, + 0x018e, 0x019d, 0x01ac, 0x01bc, 0x01cb, 0x01db, 0x01eb, 0x01fb, + 0x020c, 0x021c, 0x022d, 0x023d, 0x024e, 0x025f, 0x0271, 0x0282, + 0x0292, 0x02a2, 0x02b2, 0x02c3, 0x02d4, 0x02e6, 0x02f6, 0x0306, + 0x0316, 0x0327, 0x0337, 0x0348, 0x0358, 0x0369, 0x0379, 0x0389, + 0x039a, 0x03aa, 0x03ba, 0x03cc, 0x03dc, 0x03ec, 0x03fc, 0x040d, + 0x041b, 0x042a, 0x0439, 0x0449, 0x0458, 0x0468, 0x0477, 0x0487, + // Entry 3440 - 347F + 0x0496, 0x04a6, 0x04b6, 0x04c7, 0x04d7, 0x04e6, 0x04f5, 0x0504, + 0x0514, 0x0524, 0x0535, 0x0544, 0x0553, 0x0562, 0x0572, 0x0581, + 0x0591, 0x05a0, 0x05b0, 0x05bf, 0x05ce, 0x05de, 0x05ed, 0x05fc, + 0x060d, 0x061c, 0x062b, 0x063a, 0x064a, 0x0658, 0x0667, 0x0678, + 0x0687, 0x0697, 0x06a6, 0x06b6, 0x06c5, 0x06d5, 0x06e4, 0x06f4, + 0x0704, 0x0715, 0x0725, 0x0736, 0x0745, 0x0754, 0x0763, 0x0773, + 0x0783, 0x0794, 0x07a3, 0x07b2, 0x07c1, 0x07d1, 0x07e0, 0x07f0, + 0x07ff, 0x080f, 0x081e, 0x082d, 0x083d, 0x084c, 0x085b, 0x086c, + // Entry 3480 - 34BF + 0x087b, 0x088a, 0x0899, 0x08a9, 0x08b7, 0x08c6, 0x08d7, 0x08e6, + 0x08f6, 0x0905, 0x0915, 0x0924, 0x0934, 0x0943, 0x0953, 0x0963, + 0x0974, 0x0985, 0x0995, 0x09a6, 0x09b5, 0x09c4, 0x09d3, 0x09e3, + 0x09f3, 0x0a04, 0x0a13, 0x0a22, 0x0a31, 0x0a41, 0x0a50, 0x0a60, + 0x0a6f, 0x0a7f, 0x0a8e, 0x0a9d, 0x0aad, 0x0abc, 0x0acb, 0x0adc, + 0x0aee, 0x0afd, 0x0b0d, 0x0b1c, 0x0b2b, 0x0b3b, 0x0b4a, 0x0b61, + 0x0b6a, 0x0b77, 0x0b88, 0x0b9d, 0x0bb2, 0x0bc8, 0x0bd8, 0x0be8, + 0x0bf7, 0x0c05, 0x0c14, 0x0c22, 0x0c30, 0x0c3f, 0x0c4f, 0x0c5e, + // Entry 34C0 - 34FF + 0x0c6d, 0x0c7c, 0x0c8b, 0x0c99, 0x0ca6, 0x0cb3, 0x0cc2, 0x0cd0, + 0x0cde, 0x0ceb, 0x0cfa, 0x0d09, 0x0d17, 0x0d2c, 0x0d41, 0x0d5f, + 0x0d7b, 0x0d98, 0x0db3, 0x0dd7, 0x0df9, 0x0e15, 0x0e2f, 0x0e4c, + 0x0e67, 0x0e8b, 0x0ead, 0x0ed0, 0x0ef1, 0x0f14, 0x0f35, 0x0f5f, + 0x0f87, 0x0fab, 0x0fcd, 0x0ff0, 0x1011, 0x1033, 0x1053, 0x107c, + 0x10a3, 0x10c6, 0x10e7, 0x1119, 0x1149, 0x1163, 0x117b, 0x119f, + 0x11c1, 0x11e0, 0x11fd, 0x121c, 0x1239, 0x1258, 0x1275, 0x1298, + 0x12b9, 0x12dc, 0x12fd, 0x1327, 0x134f, 0x136c, 0x1384, 0x13a8, + // Entry 3500 - 353F + 0x13d0, 0x13f9, 0x140a, 0x1430, 0x144b, 0x1467, 0x1482, 0x14a5, + 0x14c3, 0x14e6, 0x1505, 0x151e, 0x1538, 0x1547, 0x1557, 0x1572, + 0x158b, 0x15a7, 0x15c1, 0x15dd, 0x15f7, 0x1613, 0x162d, 0x1649, + 0x1663, 0x168e, 0x16b7, 0x16d2, 0x16eb, 0x1707, 0x1721, 0x173d, + 0x1757, 0x1773, 0x178d, 0x17a8, 0x17c1, 0x17dd, 0x17f7, 0x1817, + 0x1835, 0x1856, 0x1875, 0x1897, 0x18b9, 0x18d5, 0x18f9, 0x1907, + 0x1916, 0x1924, 0x1933, 0x1942, 0x1952, 0x1962, 0x1970, 0x1980, + 0x198e, 0x199d, 0x19ac, 0x19bc, 0x19cd, 0x19df, 0x19f1, 0x1a01, + // Entry 3540 - 357F + 0x1a12, 0x1a24, 0x1a32, 0x1a42, 0x1a51, 0x1a62, 0x1a71, 0x1a83, + 0x1a94, 0x1aa5, 0x1ab5, 0x1ac6, 0x1ad5, 0x1ae7, 0x1af7, 0x1b07, + 0x1b17, 0x1b26, 0x1b37, 0x1b48, 0x1b59, 0x1b6a, 0x1b7b, 0x1b8b, + 0x1b9b, 0x1bab, 0x1bbb, 0x1bca, 0x1bd9, 0x1be8, 0x1bf7, 0x1c08, + 0x1c18, 0x1c28, 0x1c3c, 0x1c4d, 0x1c5d, 0x1c6d, 0x1c7e, 0x1c8d, + 0x1c9d, 0x1cac, 0x1cbb, 0x1cca, 0x1cd9, 0x1ce9, 0x1cf8, 0x1d09, + 0x1d19, 0x1d29, 0x1d38, 0x1d47, 0x1d56, 0x1d65, 0x1d76, 0x1d86, + 0x1d96, 0x1da6, 0x1db7, 0x1dc9, 0x1ddc, 0x1dee, 0x1e01, 0x1e1d, + // Entry 3580 - 35BF + 0x1e3b, 0x1e48, 0x1e57, 0x1e62, 0x1e6d, 0x1e7c, 0x1e8f, 0x1eb4, + 0x1eda, 0x1f00, 0x1f27, 0x1f4a, 0x1f6e, 0x1f91, 0x1fb5, 0x1fdf, + 0x2003, 0x2026, 0x2049, 0x2072, 0x20a6, 0x20d4, 0x2101, 0x212e, + 0x2161, 0x218e, 0x21b5, 0x21db, 0x2201, 0x222d, 0x224d, 0x2266, + 0x2288, 0x22b0, 0x22cf, 0x22f0, 0x2317, 0x2347, 0x2374, 0x2398, + 0x23bb, 0x23e2, 0x2407, 0x242d, 0x2451, 0x246a, 0x2481, 0x2498, + 0x24ad, 0x24ca, 0x24e5, 0x2503, 0x251f, 0x2548, 0x256f, 0x258b, + 0x25a7, 0x25be, 0x25d3, 0x25ea, 0x25ff, 0x2616, 0x262b, 0x2642, + // Entry 35C0 - 35FF + 0x2657, 0x2682, 0x26ab, 0x26c2, 0x26d7, 0x26ff, 0x2725, 0x2747, + 0x2767, 0x2792, 0x27bb, 0x27f1, 0x2825, 0x2842, 0x285d, 0x2884, + 0x28a9, 0x28d8, 0x2905, 0x2925, 0x2943, 0x295a, 0x296f, 0x29a3, + 0x29d5, 0x29f9, 0x2a1b, 0x2a44, 0x2a6b, 0x2a9f, 0x2ad1, 0x2afc, + 0x2b25, 0x2b43, 0x2b5f, 0x2b7f, 0x2b9d, 0x2bc8, 0x2bf1, 0x2c08, + 0x2c1d, 0x2c3e, 0x2c5d, 0x2c83, 0x2ca7, 0x2cdf, 0x2d15, 0x2d2e, + 0x2d45, 0x2d5c, 0x2d71, 0x2d88, 0x2d9d, 0x2db5, 0x2dcb, 0x2ddd, + 0x2df3, 0x2e09, 0x2e1f, 0x2e35, 0x2e4b, 0x2e69, 0x2e7f, 0x2e94, + // Entry 3600 - 363F + 0x2eb2, 0x2ece, 0x2eec, 0x2f08, 0x2f26, 0x2f4b, 0x2f6e, 0x2f8b, + 0x2fa6, 0x2fc4, 0x2fe0, 0x2ffe, 0x301a, 0x3038, 0x3054, 0x3079, + 0x308e, 0x30af, 0x30cc, 0x30e7, 0x3104, 0x3135, 0x3151, 0x3176, + 0x3199, 0x31b8, 0x31d5, 0x31fb, 0x3221, 0x3245, 0x3267, 0x3289, + 0x32a9, 0x32c8, 0x32e5, 0x3304, 0x3321, 0x3340, 0x335d, 0x3387, + 0x33af, 0x33d9, 0x3401, 0x342b, 0x3453, 0x347d, 0x34a5, 0x34cf, + 0x34f7, 0x3517, 0x353b, 0x3558, 0x3578, 0x359c, 0x35b9, 0x35d6, + 0x35fe, 0x3616, 0x362f, 0x3646, 0x3660, 0x3678, 0x369a, 0x36bf, + // Entry 3640 - 367F + 0x36e0, 0x3703, 0x3725, 0x3747, 0x3769, 0x3788, 0x37a9, 0x37be, + 0x37d3, 0x37ed, 0x3802, 0x3817, 0x382c, 0x3845, 0x385b, 0x3872, + 0x3888, 0x389f, 0x38b9, 0x38cf, 0x38e6, 0x38fc, 0x3913, 0x392a, + 0x3942, 0x3959, 0x3971, 0x3987, 0x399e, 0x39b4, 0x39cb, 0x39e1, + 0x39f7, 0x3a0e, 0x3a24, 0x3a3b, 0x3a51, 0x3a67, 0x3a7d, 0x3a94, + 0x3aaa, 0x3ac0, 0x3ad9, 0x3af2, 0x3b0b, 0x3b24, 0x3b3e, 0x3b58, + 0x3b72, 0x3b8c, 0x3ba6, 0x3bc6, 0x3be3, 0x3c06, 0x3c28, 0x3c47, + 0x3c6c, 0x3c84, 0x3ca0, 0x3cb6, 0x3ccf, 0x3ce1, 0x3cf4, 0x3d06, + // Entry 3680 - 36BF + 0x3d19, 0x3d2b, 0x3d3e, 0x3d50, 0x3d63, 0x3d75, 0x3d88, 0x3d9a, + 0x3dac, 0x3dbe, 0x3dd1, 0x3de3, 0x3df5, 0x3e08, 0x3e1c, 0x3e2f, + 0x3e41, 0x3e54, 0x3e66, 0x3e7d, 0x3e8f, 0x3ea1, 0x3eb3, 0x3ec6, + 0x3ed8, 0x3eea, 0x3efb, 0x3f0c, 0x3f1d, 0x3f2e, 0x3f3f, 0x3f51, + 0x3f63, 0x3f75, 0x3f88, 0x3f9a, 0x3fb6, 0x3fd2, 0x3fe5, 0x3ff9, + 0x400c, 0x401f, 0x403b, 0x4058, 0x4071, 0x408d, 0x40a9, 0x40c6, + 0x40e1, 0x40fa, 0x4113, 0x4125, 0x413e, 0x4156, 0x416d, 0x4180, + 0x4194, 0x41a7, 0x41bb, 0x41ce, 0x41e2, 0x41fd, 0x4219, 0x4234, + // Entry 36C0 - 36FF + 0x4250, 0x4263, 0x4277, 0x428b, 0x429e, 0x42b2, 0x42c6, 0x42da, + 0x42ef, 0x4303, 0x4318, 0x432d, 0x4341, 0x4356, 0x436a, 0x437f, + 0x4394, 0x43a9, 0x43bf, 0x43d4, 0x43ea, 0x43ff, 0x4413, 0x4428, + 0x443c, 0x4451, 0x4465, 0x4479, 0x448e, 0x44a2, 0x44b7, 0x44cb, + 0x44df, 0x44f3, 0x4507, 0x451b, 0x4530, 0x4545, 0x4559, 0x456d, + 0x4582, 0x45a1, 0x45b9, 0x45d0, 0x45e8, 0x45ff, 0x4617, 0x4636, + 0x4656, 0x4675, 0x4695, 0x46ac, 0x46c4, 0x46dc, 0x46f3, 0x470b, + 0x4723, 0x4739, 0x4754, 0x4764, 0x477b, 0x4790, 0x47a4, 0x47b8, + // Entry 3700 - 373F + 0x47ce, 0x47e3, 0x47f8, 0x480c, 0x4822, 0x4838, 0x484d, 0x486c, + 0x488a, 0x48a8, 0x48c8, 0x48e7, 0x4906, 0x4924, 0x4944, 0x4964, + 0x4983, 0x49a0, 0x49bd, 0x49db, 0x49f9, 0x4a17, 0x4a35, 0x4a53, + 0x4a75, 0x4a98, 0x4aba, 0x4ae3, 0x4b02, 0x4b23, 0x4b47, 0x4b5f, + 0x4b74, 0x4b84, 0x4b99, 0x4bb0, 0x4bc2, 0x4bd5, 0x4be7, 0x4bf9, + 0x4c0d, 0x4c20, 0x4c33, 0x4c45, 0x4c59, 0x4c6d, 0x4c80, 0x4c92, + 0x4ca5, 0x4cb7, 0x4cca, 0x4cdc, 0x4cef, 0x4d01, 0x4d14, 0x4d26, + 0x4d39, 0x4d4b, 0x4d5d, 0x4d70, 0x4d82, 0x4d94, 0x4da6, 0x4db8, + // Entry 3740 - 377F + 0x4dca, 0x4ddc, 0x4dee, 0x4e01, 0x4e13, 0x4e25, 0x4e37, 0x4e48, + 0x4e5a, 0x4e6b, 0x4e7d, 0x4e8e, 0x4e9e, 0x4eae, 0x4ebf, 0x4ecf, + 0x4ee3, 0x4ef6, 0x4f10, 0x4f21, 0x4f33, 0x4f43, 0x4f53, 0x4f64, + 0x4f74, 0x4f84, 0x4f94, 0x4fa4, 0x4fb4, 0x4fc4, 0x4fd4, 0x4fe4, + 0x4ff5, 0x5005, 0x5015, 0x5025, 0x5035, 0x5045, 0x5055, 0x5066, + 0x5078, 0x5089, 0x509b, 0x50aa, 0x50bd, 0x50d0, 0x50e3, 0x50f7, + 0x510a, 0x511e, 0x5132, 0x5146, 0x515e, 0x5175, 0x518c, 0x51a3, + 0x51b0, 0x51c3, 0x51df, 0x51fb, 0x5216, 0x5232, 0x524e, 0x526f, + // Entry 3780 - 37BF + 0x528b, 0x52ac, 0x52c7, 0x52e2, 0x5302, 0x5325, 0x533f, 0x535a, + 0x5377, 0x5393, 0x53af, 0x53c9, 0x53eb, 0x5408, 0x5423, 0x5442, + 0x545d, 0x5478, 0x5498, 0x54b4, 0x54d1, 0x54eb, 0x550b, 0x5522, + 0x5535, 0x5548, 0x555d, 0x556e, 0x5584, 0x5595, 0x55a7, 0x55b8, + 0x55d0, 0x55e9, 0x560a, 0x561b, 0x562d, 0x563e, 0x5650, 0x5668, + 0x5680, 0x5692, 0x56aa, 0x56bd, 0x56cf, 0x56e7, 0x56f9, 0x5712, + 0x572e, 0x5741, 0x5754, 0x5771, 0x5784, 0x57a1, 0x57b9, 0x57cb, + 0x57e3, 0x57f5, 0x5811, 0x5823, 0x5835, 0x584d, 0x585f, 0x5877, + // Entry 37C0 - 37FF + 0x5889, 0x589b, 0x58ad, 0x58c5, 0x58d7, 0x58e9, 0x5901, 0x591d, + 0x592f, 0x5941, 0x5959, 0x5973, 0x598d, 0x59a5, 0x59c3, 0x59db, + 0x59fa, 0x5a14, 0x5a32, 0x5a4b, 0x5a68, 0x5a87, 0x5aa4, 0x5ab4, + 0x5acb, 0x5ae3, 0x5af6, 0x5b09, 0x5b1c, 0x5b2f, 0x5b44, 0x5b58, + 0x5b6c, 0x5b7e, 0x5b95, 0x5baa, 0x5bc6, 0x5bda, 0x5bed, 0x5bff, + 0x5c11, 0x5c25, 0x5c38, 0x5c4b, 0x5c5d, 0x5c71, 0x5c85, 0x5c98, + 0x5cb3, 0x5cca, 0x5ce1, 0x5cf8, 0x5d0f, 0x5d26, 0x5d3d, 0x5d52, + 0x5d7c, 0x5d98, 0x5db3, 0x5dce, 0x5dea, 0x5e05, 0x5e21, 0x5e3d, + // Entry 3800 - 383F + 0x5e5a, 0x5e76, 0x5e92, 0x5ead, 0x5ec8, 0x5ee5, 0x5f01, 0x5f1d, + 0x5f38, 0x5f55, 0x5f72, 0x5f8e, 0x5faa, 0x5fc5, 0x5fe1, 0x5ffc, + 0x6018, 0x6025, 0x6032, 0x603f, 0x604c, 0x605a, 0x6067, 0x6075, + 0x6084, 0x6092, 0x60a1, 0x60b1, 0x60c0, 0x60cf, 0x60df, 0x60ed, + 0x60fc, 0x610c, 0x611b, 0x612b, 0x6139, 0x6148, 0x6156, 0x6165, + 0x6174, 0x6182, 0x6191, 0x619f, 0x61ae, 0x61bd, 0x61cb, 0x61da, + 0x61e9, 0x61f7, 0x6206, 0x6214, 0x6222, 0x6230, 0x623e, 0x624d, + 0x625b, 0x6269, 0x627b, 0x628c, 0x629e, 0x62b0, 0x62c1, 0x62d3, + // Entry 3840 - 387F + 0x62e4, 0x62f6, 0x6308, 0x631a, 0x6330, 0x6346, 0x635c, 0x6372, + 0x6385, 0x6398, 0x63ac, 0x63c8, 0x63dc, 0x63ef, 0x6402, 0x6415, + 0x6428, 0x643b, 0x644e, 0x6462, 0x647d, 0x6498, 0x64a7, 0x64b5, + 0x64c3, 0x64d3, 0x64e2, 0x64f1, 0x64ff, 0x650f, 0x651f, 0x652e, + 0x6545, 0x655b, 0x6578, 0x6595, 0x65ad, 0x65c5, 0x65de, 0x65f6, + 0x660f, 0x6628, 0x6641, 0x665b, 0x6674, 0x668e, 0x66a7, 0x66bf, + 0x66d7, 0x66ef, 0x6708, 0x6720, 0x674c, 0x6764, 0x677c, 0x6794, + 0x67af, 0x67c9, 0x67e3, 0x6803, 0x681b, 0x6833, 0x684a, 0x6865, + // Entry 3880 - 38BF + 0x6882, 0x689f, 0x68be, 0x68dd, 0x68f3, 0x690a, 0x6921, 0x6939, + 0x6951, 0x696a, 0x6980, 0x6997, 0x69ae, 0x69c6, 0x69dc, 0x69f3, + 0x6a0a, 0x6a22, 0x6a38, 0x6a4f, 0x6a66, 0x6a7e, 0x6a94, 0x6aab, + 0x6ac1, 0x6ad8, 0x6aef, 0x6b07, 0x6b1d, 0x6b34, 0x6b4a, 0x6b61, + 0x6b77, 0x6b8e, 0x6ba5, 0x6bbd, 0x6bd3, 0x6bea, 0x6c00, 0x6c17, + 0x6c2d, 0x6c44, 0x6c5a, 0x6c71, 0x6c87, 0x6c9e, 0x6cb4, 0x6ccb, + 0x6ce1, 0x6cf8, 0x6d0d, 0x6d23, 0x6d34, 0x6d45, 0x6d55, 0x6d66, + 0x6d76, 0x6d86, 0x6d96, 0x6da7, 0x6db8, 0x6dca, 0x6ddb, 0x6ded, + // Entry 38C0 - 38FF + 0x6dfe, 0x6e0f, 0x6e20, 0x6e34, 0x6e4b, 0x6e60, 0x6e76, 0x6e89, + 0x6e9e, 0x6eb1, 0x6ec7, 0x6ede, 0x6ef3, 0x6f08, 0x6f1f, 0x6f36, + 0x6f4d, 0x6f65, 0x6f7c, 0x6f94, 0x6fab, 0x6fc2, 0x6fd9, 0x6ff3, + 0x700d, 0x7028, 0x7042, 0x705d, 0x7072, 0x708b, 0x709c, 0x70c1, + 0x70e2, 0x7101, 0x7114, 0x712a, 0x7140, 0x7157, 0x716e, 0x7184, + 0x719a, 0x71b0, 0x71c6, 0x71dd, 0x71f4, 0x720a, 0x7220, 0x7235, + 0x724a, 0x7260, 0x7276, 0x728b, 0x72a0, 0x72b7, 0x72ce, 0x72e5, + 0x72fd, 0x7315, 0x732c, 0x7343, 0x7358, 0x736d, 0x7382, 0x7398, + // Entry 3900 - 393F + 0x73ae, 0x73c3, 0x73d8, 0x73f7, 0x741a, 0x743a, 0x7455, 0x7477, + 0x7491, 0x74be, 0x74e7, 0x7514, 0x7539, 0x755f, 0x7585, 0x75ad, + 0x75cd, 0x75f9, 0x761e, 0x763c, 0x7664, 0x7697, 0x76b9, 0x76e7, + 0x7703, 0x772e, 0x7751, 0x776c, 0x7792, 0x77bf, 0x77da, 0x77ff, + 0x781e, 0x7847, 0x7874, 0x7889, 0x78a5, 0x78c8, 0x78de, 0x7908, + 0x7932, 0x795a, 0x7981, 0x79bb, 0x79ed, 0x7a16, 0x7a38, 0x7a52, + 0x7a7e, 0x7aa7, 0x7acd, 0x7ae9, 0x7b06, 0x7b20, 0x7b35, 0x7b56, + 0x7b76, 0x7b8d, 0x7ba4, 0x7bbb, 0x7bd2, 0x7be9, 0x7c00, 0x7c18, + // Entry 3940 - 397F + 0x7c30, 0x7c48, 0x7c60, 0x7c78, 0x7c90, 0x7ca8, 0x7cc0, 0x7cd8, + 0x7cf0, 0x7d08, 0x7d20, 0x7d38, 0x7d50, 0x7d68, 0x7d80, 0x7d98, + 0x7db0, 0x7dc8, 0x7de0, 0x7df8, 0x7e10, 0x7e28, 0x7e40, 0x7e58, + 0x7e71, 0x7e8a, 0x7ea2, 0x7eba, 0x7ed2, 0x7eea, 0x7f02, 0x7f1b, + 0x7f34, 0x7f4d, 0x7f66, 0x7f7f, 0x7f98, 0x7fb0, 0x7fc7, 0x7fdf, + 0x7ff7, 0x800f, 0x8027, 0x803f, 0x8057, 0x806f, 0x8087, 0x809f, + 0x80b7, 0x80cf, 0x80e7, 0x80ff, 0x8117, 0x8130, 0x8149, 0x8162, + 0x817b, 0x8194, 0x81ad, 0x81c6, 0x81df, 0x81f8, 0x8211, 0x822a, + // Entry 3980 - 39BF + 0x8243, 0x825c, 0x8274, 0x828c, 0x82a4, 0x82bc, 0x82d4, 0x82ec, + 0x8304, 0x831b, 0x8332, 0x8349, 0x8360, 0x8376, 0x838c, 0x83a4, + 0x83bb, 0x83d3, 0x83eb, 0x8403, 0x841a, 0x8432, 0x8449, 0x845f, + 0x8474, 0x848c, 0x84a5, 0x84bc, 0x84d4, 0x84eb, 0x8501, 0x8518, + 0x852f, 0x8547, 0x855f, 0x8577, 0x8595, 0x85b3, 0x85d1, 0x85ee, + 0x860b, 0x8629, 0x8648, 0x8664, 0x8680, 0x869c, 0x86b8, 0x86d5, + 0x86f3, 0x870f, 0x872e, 0x874a, 0x875f, 0x8774, 0x878a, 0x87a1, + 0x87b7, 0x87cd, 0x87e5, 0x87fc, 0x8813, 0x8829, 0x8841, 0x8859, + // Entry 39C0 - 39FF + 0x8870, 0x8886, 0x889c, 0x88b1, 0x88c7, 0x88dd, 0x88f3, 0x8909, + 0x891f, 0x8934, 0x8949, 0x895f, 0x8974, 0x8989, 0x89a0, 0x89b6, + 0x89cc, 0x89e1, 0x89f7, 0x8a0c, 0x8a21, 0x8a35, 0x8a4d, 0x8a65, + 0x8a81, 0x8a9f, 0x8abb, 0x8add, 0x8afa, 0x8b16, 0x8b39, 0x8b56, + 0x8b75, 0x8b94, 0x8bb6, 0x8bd9, 0x8bfc, 0x8c1e, 0x8c41, 0x8c65, + 0x8c84, 0x8cac, 0x8cca, 0x8ce6, 0x8d07, 0x8d22, 0x8d43, 0x8d5f, + 0x8d7c, 0x8da0, 0x8dbc, 0x8dd7, 0x8df9, 0x8e15, 0x8e33, 0x8e4e, + 0x8e71, 0x8e92, 0x8eb3, 0x8ed0, 0x8eeb, 0x8f08, 0x8f25, 0x8f40, + // Entry 3A00 - 3A3F + 0x8f5e, 0x8f84, 0x8fa3, 0x8fc2, 0x8fde, 0x8fff, 0x901a, 0x9037, + 0x9057, 0x9077, 0x9097, 0x90b7, 0x90d7, 0x90f7, 0x9117, 0x9137, + 0x9157, 0x9177, 0x9197, 0x91b7, 0x91d7, 0x91f7, 0x9217, 0x9237, + 0x9257, 0x9277, 0x9297, 0x92b7, 0x92d7, 0x92f7, 0x9317, 0x9337, + 0x9357, 0x9377, 0x9397, 0x93b7, 0x93d7, 0x93f7, 0x9417, 0x9437, + 0x9457, 0x9477, 0x9497, 0x94b7, 0x94d7, 0x94f7, 0x9517, 0x9537, + 0x9557, 0x9577, 0x9597, 0x95b7, 0x95d7, 0x95f7, 0x9617, 0x9637, + 0x9657, 0x9677, 0x9697, 0x96b7, 0x96d7, 0x96f7, 0x9717, 0x9737, + // Entry 3A40 - 3A7F + 0x9757, 0x9777, 0x9797, 0x97b7, 0x97d7, 0x97f7, 0x9817, 0x9837, + 0x9857, 0x9877, 0x9897, 0x98b7, 0x98d7, 0x98f7, 0x9917, 0x9937, + 0x9957, 0x9977, 0x9997, 0x99b7, 0x99d7, 0x99f7, 0x9a17, 0x9a37, + 0x9a57, 0x9a77, 0x9a97, 0x9ab7, 0x9ad7, 0x9af7, 0x9b17, 0x9b37, + 0x9b57, 0x9b77, 0x9b97, 0x9bb7, 0x9bd7, 0x9bf7, 0x9c17, 0x9c37, + 0x9c57, 0x9c77, 0x9c97, 0x9cb7, 0x9cd7, 0x9cf7, 0x9d17, 0x9d37, + 0x9d57, 0x9d77, 0x9d97, 0x9db7, 0x9dd7, 0x9df7, 0x9e17, 0x9e37, + 0x9e57, 0x9e77, 0x9e97, 0x9eb7, 0x9ed7, 0x9ef7, 0x9f17, 0x9f37, + // Entry 3A80 - 3ABF + 0x9f57, 0x9f77, 0x9f97, 0x9fb7, 0x9fd7, 0x9ff7, 0xa017, 0xa037, + 0xa057, 0xa077, 0xa097, 0xa0b7, 0xa0d7, 0xa0f7, 0xa117, 0xa137, + 0xa157, 0xa177, 0xa197, 0xa1b7, 0xa1d7, 0xa1f7, 0xa217, 0xa237, + 0xa257, 0xa277, 0xa297, 0xa2b7, 0xa2d7, 0xa2f7, 0xa317, 0xa337, + 0xa357, 0xa377, 0xa397, 0xa3b7, 0xa3d7, 0xa3f7, 0xa417, 0xa437, + 0xa457, 0xa477, 0xa497, 0xa4b7, 0xa4d7, 0xa4f7, 0xa517, 0xa537, + 0xa557, 0xa577, 0xa597, 0xa5b7, 0xa5d7, 0xa5f7, 0xa617, 0xa637, + 0xa657, 0xa677, 0xa697, 0xa6b7, 0xa6d7, 0xa6f7, 0xa717, 0xa737, + // Entry 3AC0 - 3AFF + 0xa757, 0xa777, 0xa797, 0xa7b7, 0xa7d7, 0xa7f7, 0xa817, 0xa837, + 0xa857, 0xa877, 0xa897, 0xa8b7, 0xa8d7, 0xa8f7, 0xa917, 0xa937, + 0xa957, 0xa977, 0xa997, 0xa9b7, 0xa9d7, 0xa9f7, 0xaa17, 0xaa37, + 0xaa57, 0xaa77, 0xaa97, 0xaab7, 0xaad7, 0xaaf7, 0xab17, 0xab37, + 0xab57, 0xab77, 0xab97, 0xabb7, 0xabd7, 0xabf7, 0xac17, 0xac37, + 0xac57, 0xac77, 0xac97, 0xacb7, 0xacd7, 0xacf7, 0xad17, 0xad37, + 0xad57, 0xad77, 0xad97, 0xadb7, 0xadd7, 0xadf7, 0xae17, 0xae37, + 0xae57, 0xae77, 0xae97, 0xaeb7, 0xaed7, 0xaef7, 0xaf17, 0xaf37, + // Entry 3B00 - 3B3F + 0xaf57, 0xaf77, 0xaf97, 0xafb7, 0xafd7, 0xaff7, 0xb017, 0xb037, + 0xb057, 0xb077, 0xb097, 0xb0b7, 0xb0d7, 0xb0f7, 0xb117, 0xb137, + 0xb157, 0xb177, 0xb197, 0xb1b7, 0xb1d7, 0xb1f7, 0xb217, 0xb237, + 0xb257, 0xb277, 0xb297, 0xb2b7, 0xb2d7, 0xb2f7, 0xb317, 0xb337, + 0xb357, 0xb377, 0xb397, 0xb3b7, 0xb3d7, 0xb3f7, 0xb417, 0xb437, + 0xb457, 0xb477, 0xb497, 0xb4b7, 0xb4d7, 0xb4f7, 0xb517, 0xb537, + 0xb557, 0xb577, 0xb597, 0xb5b7, 0xb5d7, 0xb5f7, 0xb617, 0xb637, + 0xb657, 0xb677, 0xb697, 0xb6b7, 0xb6d7, 0xb6f7, 0xb717, 0xb737, + // Entry 3B40 - 3B7F + 0xb757, 0xb777, 0xb797, 0xb7b7, 0xb7d7, 0xb7f7, 0xb817, 0xb837, + 0xb857, 0xb877, 0xb897, 0xb8b7, 0xb8d7, 0xb8f7, 0xb917, 0xb937, + 0xb957, 0xb977, 0xb997, 0xb9b7, 0xb9d7, 0xb9f7, 0xba17, 0xba37, + 0xba57, 0xba77, 0xba97, 0xbab7, 0xbad7, 0xbaf7, 0xbb17, 0xbb37, + 0xbb57, 0xbb77, 0xbb97, 0xbbb7, 0xbbd7, 0xbbf7, 0xbc17, 0xbc37, + 0xbc57, 0xbc77, 0xbc97, 0xbcb7, 0xbcd7, 0xbcf7, 0xbd17, 0xbd37, + 0xbd57, 0xbd77, 0xbd97, 0xbdb7, 0xbdd7, 0xbdf7, 0xbe17, 0xbe37, + 0xbe57, 0xbe77, 0xbe97, 0xbeb7, 0xbed7, 0xbef7, 0xbf17, 0xbf37, + // Entry 3B80 - 3BBF + 0xbf57, 0xbf77, 0xbf97, 0xbfb7, 0xbfd7, 0xbff7, 0xc017, 0xc037, + 0xc057, 0xc077, 0xc097, 0xc0b7, 0xc0d7, 0xc0f7, 0xc117, 0xc137, + 0xc157, 0xc177, 0xc197, 0xc1b7, 0xc1d7, 0xc1f7, 0xc217, 0xc237, + 0xc257, 0xc277, 0xc297, 0xc2b7, 0xc2d7, 0xc2f7, 0xc317, 0xc337, + 0xc357, 0xc377, 0xc397, 0xc3b7, 0xc3d7, 0xc3f7, 0xc417, 0xc437, + 0xc457, 0xc477, 0xc497, 0xc4b7, 0xc4d7, 0xc4f7, 0xc517, 0xc537, + 0xc557, 0xc577, 0xc597, 0xc5b7, 0xc5d7, 0xc5f7, 0xc617, 0xc637, + 0xc657, 0xc677, 0xc697, 0xc6b7, 0xc6d7, 0xc6f7, 0xc717, 0xc737, + // Entry 3BC0 - 3BFF + 0xc757, 0xc777, 0xc797, 0xc7b7, 0xc7d7, 0xc7f7, 0xc817, 0xc837, + 0xc857, 0xc877, 0xc897, 0xc8b7, 0xc8d7, 0xc8f7, 0xc917, 0xc937, + 0xc957, 0xc977, 0xc997, 0xc9b7, 0xc9d7, 0xc9f7, 0xca17, 0xca37, + 0xca57, 0xca77, 0xca97, 0xcab7, 0xcad7, 0xcaf7, 0xcb17, 0xcb37, + 0xcb57, 0xcb6e, 0xcb85, 0xcb9c, 0xcbb4, 0xcbcc, 0xcbe9, 0xcc00, + 0xcc1f, 0xcc3e, 0xcc5d, 0xcc7c, 0xcc9b, 0xccb7, 0xccd8, 0xccfd, + 0xcd1b, 0xcd32, 0xcd4a, 0xcd5f, 0xcd75, 0xcd8d, 0xcda9, 0xcdc0, + 0xcdd6, 0xcdf9, 0xce19, 0xce38, 0xce63, 0xce8d, 0xceaa, 0xcec8, + // Entry 3C00 - 3C3F + 0xcee5, 0xcf02, 0xcf21, 0xcf40, 0xcf5b, 0xcf78, 0xcf97, 0xcfb4, + 0xcfd1, 0xcff4, 0xd011, 0xd030, 0xd04d, 0xd06a, 0xd08a, 0xd0ac, + 0xd0c8, 0xd0e7, 0xd104, 0xd122, 0xd140, 0xd15d, 0xd179, 0xd194, + 0xd1af, 0xd1c9, 0xd1e3, 0xd209, 0xd22c, 0xd24c, 0xd269, 0xd288, + 0xd2a6, 0xd2c5, 0xd2e1, 0xd2ff, 0xd31c, 0xd33d, 0xd35b, 0xd37b, + 0xd39a, 0xd3bc, 0xd3db, 0xd3fc, 0xd41c, 0xd43d, 0xd45b, 0xd47b, + 0xd49a, 0xd4ba, 0xd4d7, 0xd4f6, 0xd514, 0xd533, 0xd54f, 0xd56d, + 0xd58a, 0xd5ab, 0xd5c9, 0xd5e9, 0xd608, 0xd628, 0xd645, 0xd664, + // Entry 3C40 - 3C7F + 0xd682, 0xd6a2, 0xd6bf, 0xd6de, 0xd6fc, 0xd71d, 0xd73b, 0xd75b, + 0xd77a, 0xd79d, 0xd7bd, 0xd7df, 0xd800, 0xd822, 0xd841, 0xd862, + 0xd880, 0xd89f, 0xd8bb, 0xd8db, 0xd8f8, 0xd917, 0xd933, 0xd953, + 0xd970, 0xd991, 0xd9af, 0xd9cf, 0xd9ee, 0xda0d, 0xda29, 0xda47, + 0xda64, 0xda84, 0xdaa1, 0xdac0, 0xdade, 0xdaff, 0xdb1d, 0xdb3d, + 0xdb5c, 0xdb83, 0xdba7, 0xdbc8, 0xdbe6, 0xdc06, 0xdc25, 0xdc53, + 0xdc7e, 0xdca2, 0xdcc3, 0xdce6, 0xdd08, 0xdd33, 0xdd5b, 0xdd85, + 0xddae, 0xddd4, 0xddf7, 0xde2e, 0xde62, 0xde79, 0xde90, 0xdeac, + // Entry 3C80 - 3CBF + 0xdec8, 0xdee6, 0xdf04, 0xdf35, 0xdf66, 0xdf83, 0xdfa0, 0xdfc7, + 0xdfee, 0xe015, 0xe027, 0xe044, 0xe061, 0xe07f, 0xe09a, 0xe0b7, + 0xe0d3, 0xe0f0, 0xe10a, 0xe128, 0xe143, 0xe161, 0xe17c, 0xe1aa, + 0xe1c8, 0xe1e3, 0xe209, 0xe22c, 0xe252, 0xe275, 0xe292, 0xe2ac, + 0xe2c8, 0xe2e3, 0xe320, 0xe35c, 0xe398, 0xe3d1, 0xe40b, 0xe442, + 0xe47d, 0xe4b5, 0xe4ee, 0xe524, 0xe55e, 0xe595, 0xe5cf, 0xe606, + 0xe63f, 0xe675, 0xe6ad, 0xe700, 0xe750, 0xe7a2, 0xe7c7, 0xe7e9, + 0xe80d, 0xe830, 0xe86c, 0xe8a7, 0xe8e3, 0xe927, 0xe962, 0xe98d, + // Entry 3CC0 - 3CFF + 0xe9b7, 0xe9e2, 0xea0d, 0xea40, 0xea6a, 0xea95, 0xeabf, 0xeaea, + 0xeb15, 0xeb48, 0xeb72, 0xeb9e, 0xebca, 0xebfe, 0xec29, 0xec54, + 0xec80, 0xecab, 0xecd6, 0xed02, 0xed2d, 0xed59, 0xed85, 0xedb0, + 0xeddc, 0xee08, 0xee32, 0xee5d, 0xee88, 0xeeb2, 0xeedd, 0xef08, + 0xef32, 0xef5d, 0xef88, 0xefb3, 0xefde, 0xf00b, 0xf038, 0xf063, + 0xf08d, 0xf0b8, 0xf0e3, 0xf116, 0xf140, 0xf16a, 0xf195, 0xf1c8, + 0xf1f2, 0xf21d, 0xf248, 0xf272, 0xf29d, 0xf2c7, 0xf2f2, 0xf325, + 0xf34f, 0xf37a, 0xf3a4, 0xf3cf, 0xf3fa, 0xf42d, 0xf457, 0xf483, + // Entry 3D00 - 3D3F + 0xf4ae, 0xf4da, 0xf506, 0xf53a, 0xf565, 0xf591, 0xf5bc, 0xf5e8, + 0xf614, 0xf648, 0xf673, 0xf69e, 0xf6c9, 0xf6fc, 0xf726, 0xf751, + 0xf77b, 0xf7a6, 0xf7d1, 0xf804, 0xf82e, 0xf866, 0xf89d, 0xf8dd, + 0xf90f, 0xf941, 0xf970, 0xf99f, 0xf9ce, 0xfa08, 0xfa40, 0xfa79, + 0xfab2, 0xfaeb, 0xfb2c, 0xfb64, 0xfb8b, 0xfbb3, 0xfbdb, 0xfc03, + 0xfc33, 0xfc5a, 0xfc81, 0xfca9, 0xfcd1, 0xfcf9, 0xfd29, 0xfd50, + 0xfd78, 0xfda1, 0xfdca, 0xfdf3, 0xfe24, 0xfe4c, 0xfe7c, 0xfea3, + 0xfed3, 0xfefa, 0xff22, 0xff49, 0xff71, 0xffa1, 0xffc8, 0xfff0, + // Entry 3D40 - 3D7F + 0x0020, 0x0047, 0x0070, 0x0099, 0x00c1, 0x00ea, 0x0113, 0x013c, + 0x016d, 0x0195, 0x01d2, 0x01f9, 0x0221, 0x0249, 0x0271, 0x02a1, + 0x02c8, 0x0303, 0x033d, 0x0378, 0x03b3, 0x03ed, 0x0417, 0x0440, + 0x046a, 0x0494, 0x04bd, 0x04e7, 0x0510, 0x053a, 0x0564, 0x058d, + 0x05b8, 0x05e2, 0x060d, 0x0637, 0x0661, 0x068c, 0x06b7, 0x06e2, + 0x070c, 0x0737, 0x0762, 0x078b, 0x07b5, 0x07df, 0x0809, 0x0832, + 0x085c, 0x0886, 0x08af, 0x08d9, 0x0903, 0x092d, 0x0959, 0x0985, + 0x09af, 0x09d8, 0x0a02, 0x0a2c, 0x0a55, 0x0a7f, 0x0aa9, 0x0ad2, + // Entry 3D80 - 3DBF + 0x0afc, 0x0b25, 0x0b4f, 0x0b79, 0x0ba2, 0x0bcc, 0x0bf6, 0x0c1f, + 0x0c4a, 0x0c74, 0x0c9f, 0x0cca, 0x0cf5, 0x0d1f, 0x0d4a, 0x0d75, + 0x0d9f, 0x0dc9, 0x0df3, 0x0e29, 0x0e53, 0x0e7c, 0x0ea6, 0x0ed0, + 0x0ef9, 0x0f33, 0x0f6c, 0x0f95, 0x0fbd, 0x0fe6, 0x100e, 0x1038, + 0x1061, 0x108b, 0x10b4, 0x10df, 0x1109, 0x1131, 0x115a, 0x1183, + 0x11ad, 0x11d6, 0x11ff, 0x1227, 0x1254, 0x1281, 0x12ae, 0x12e1, + 0x130b, 0x133e, 0x1368, 0x139d, 0x13c9, 0x13fd, 0x1428, 0x145d, + 0x1489, 0x14bc, 0x14e6, 0x151a, 0x1545, 0x1579, 0x15a4, 0x15d7, + // Entry 3DC0 - 3DFF + 0x1601, 0x1634, 0x165e, 0x168b, 0x16b7, 0x16e4, 0x1711, 0x173d, + 0x1768, 0x1792, 0x17bc, 0x17ec, 0x1813, 0x1843, 0x186a, 0x189c, + 0x18c5, 0x18f6, 0x191e, 0x1950, 0x1979, 0x19a9, 0x19d0, 0x1a01, + 0x1a29, 0x1a5a, 0x1a82, 0x1ab2, 0x1ad9, 0x1b09, 0x1b30, 0x1b5a, + 0x1b83, 0x1bad, 0x1bd7, 0x1c00, 0x1c28, 0x1c4f, 0x1c76, 0x1ca2, + 0x1ccd, 0x1cf9, 0x1d25, 0x1d4f, 0x1d7a, 0x1da4, 0x1dce, 0x1df7, + 0x1e21, 0x1e4c, 0x1e76, 0x1ea1, 0x1eca, 0x1ef3, 0x1f20, 0x1f50, + 0x1f67, 0x1f7f, 0x1fb3, 0x1fe4, 0x2017, 0x204a, 0x207e, 0x20b2, + // Entry 3E00 - 3E3F + 0x20e5, 0x2119, 0x214b, 0x217f, 0x21b0, 0x21ea, 0x221e, 0x2252, + 0x228d, 0x22bf, 0x22f3, 0x2328, 0x235b, 0x2390, 0x23c0, 0x23f2, + 0x2424, 0x2457, 0x248c, 0x24bf, 0x24f3, 0x2529, 0x255d, 0x2593, + 0x25cc, 0x25fe, 0x2632, 0x2663, 0x2696, 0x26ca, 0x26fb, 0x272d, + 0x275f, 0x2793, 0x27cd, 0x2801, 0x2834, 0x2870, 0x28a2, 0x28d6, + 0x2907, 0x2939, 0x296a, 0x299a, 0x29d3, 0x2a07, 0x2a39, 0x2a6b, + 0x2a9f, 0x2ad0, 0x2b03, 0x2b37, 0x2b6b, 0x2b9c, 0x2bd0, 0x2c05, + 0x2c3a, 0x2c6f, 0x2ca4, 0x2cd8, 0x2d0c, 0x2d40, 0x2d7a, 0x2dad, + // Entry 3E40 - 3E7F + 0x2de2, 0x2e1d, 0x2e4f, 0x2e8a, 0x2ebc, 0x2ef0, 0x2f21, 0x2f52, + 0x2f8c, 0x2fbd, 0x2ff7, 0x3028, 0x3062, 0x3094, 0x30ce, 0x3109, + 0x3144, 0x3174, 0x31a6, 0x31d6, 0x3207, 0x3238, 0x3268, 0x3299, + 0x32ca, 0x32fc, 0x332d, 0x335e, 0x3391, 0x33c4, 0x33f5, 0x3426, + 0x345a, 0x348c, 0x34c0, 0x34f2, 0x3524, 0x3556, 0x3587, 0x35b8, + 0x35ea, 0x361b, 0x364b, 0x367f, 0x36b3, 0x36e7, 0x3719, 0x374b, + 0x3788, 0x37c4, 0x37e7, 0x380a, 0x3830, 0x3853, 0x3877, 0x389b, + 0x38c1, 0x38e4, 0x390f, 0x392e, 0x3937, 0x3964, 0x3978, 0x398c, + // Entry 3E80 - 3EBF + 0x39a0, 0x39b4, 0x39c8, 0x39dc, 0x39f0, 0x3a04, 0x3a18, 0x3a2d, + 0x3a42, 0x3a57, 0x3a6c, 0x3a81, 0x3a96, 0x3aab, 0x3acf, 0x3aff, + 0x3b33, 0x3b57, 0x3b7f, 0x3bae, 0x3bda, 0x3c16, 0x3c53, 0x3c85, + 0x3ca1, 0x3cbe, 0x3cde, 0x3cff, 0x3d19, 0x3d34, 0x3d4f, 0x3d71, + 0x3d94, 0x3db3, 0x3dd3, 0x3df3, 0x3e14, 0x3e35, 0x3e57, 0x3e7a, + 0x3ea7, 0x3ecd, 0x3ef3, 0x3f1a, 0x3f46, 0x3f75, 0x3fa5, 0x3fd6, + 0x4008, 0x4042, 0x407d, 0x40b9, 0x40f6, 0x412e, 0x4167, 0x4198, + 0x41ca, 0x41fc, 0x422f, 0x4267, 0x42a0, 0x42aa, 0x42ba, 0x42ec, + // Entry 3EC0 - 3EFF + 0x431f, 0x432e, 0x4341, 0x434e, 0x4362, 0x4371, 0x4384, 0x4391, + 0x439c, 0x43b3, 0x43c2, 0x43d1, 0x43dc, 0x43ef, 0x4405, 0x4412, + 0x4428, 0x443f, 0x4457, 0x4470, 0x4491, 0x44b3, 0x44c4, 0x44d3, + 0x44e1, 0x44f0, 0x4502, 0x4516, 0x452d, 0x453e, 0x4553, 0x4564, + 0x4576, 0x4589, 0x45a6, 0x45c8, 0x45e5, 0x45f9, 0x4616, 0x4630, + 0x4648, 0x4662, 0x467a, 0x4694, 0x46ac, 0x46c7, 0x46e0, 0x46fa, + 0x4712, 0x4733, 0x4764, 0x4792, 0x47c3, 0x47f1, 0x4821, 0x484e, + 0x487f, 0x48ad, 0x48dd, 0x490a, 0x4939, 0x4967, 0x4987, 0x49a4, + // Entry 3F00 - 3F3F + 0x49c3, 0x49df, 0x49fd, 0x4a1a, 0x4a41, 0x4a65, 0x4a84, 0x4aa0, + 0x4abe, 0x4adb, 0x4afb, 0x4b18, 0x4b37, 0x4b55, 0x4b75, 0x4b92, + 0x4bb1, 0x4bcf, 0x4bee, 0x4c0a, 0x4c28, 0x4c45, 0x4c65, 0x4c82, + 0x4ca1, 0x4cbf, 0x4cde, 0x4cfa, 0x4d1a, 0x4d37, 0x4d56, 0x4d72, + 0x4d92, 0x4daf, 0x4dcf, 0x4dec, 0x4e0b, 0x4e29, 0x4e4a, 0x4e68, + 0x4e88, 0x4ea7, 0x4ec6, 0x4ee2, 0x4f00, 0x4f1d, 0x4f3c, 0x4f58, + 0x4f76, 0x4f93, 0x4fb2, 0x4fce, 0x4fec, 0x5009, 0x5028, 0x5044, + 0x5062, 0x507f, 0x509e, 0x50ba, 0x50d8, 0x50f5, 0x5116, 0x5134, + // Entry 3F40 - 3F7F + 0x5154, 0x5173, 0x5192, 0x51ae, 0x51cc, 0x51e9, 0x5208, 0x5224, + 0x5242, 0x525f, 0x527e, 0x529a, 0x52b8, 0x52d5, 0x52f4, 0x5310, + 0x532e, 0x534b, 0x536b, 0x5388, 0x53a7, 0x53c5, 0x53e5, 0x5402, + 0x5421, 0x543f, 0x545e, 0x547a, 0x5498, 0x54b5, 0x54d4, 0x54f0, + 0x5518, 0x553d, 0x555c, 0x5578, 0x5596, 0x55b3, 0x55ef, 0x5628, + 0x5664, 0x569d, 0x56d9, 0x5712, 0x573d, 0x5765, 0x577e, 0x5798, + 0x57b0, 0x57c5, 0x57da, 0x57f0, 0x5803, 0x5817, 0x5831, 0x584c, + 0x585e, 0x5871, 0x5880, 0x5896, 0x58a9, 0x58ba, 0x58ce, 0x58e1, + // Entry 3F80 - 3FBF + 0x58f4, 0x5909, 0x591d, 0x5931, 0x5944, 0x5959, 0x596e, 0x5982, + 0x5991, 0x59a4, 0x59bc, 0x59d1, 0x59ec, 0x5a03, 0x5a1a, 0x5a3a, + 0x5a5a, 0x5a7a, 0x5a9a, 0x5aba, 0x5ada, 0x5afa, 0x5b1a, 0x5b3a, + 0x5b5a, 0x5b7a, 0x5b9a, 0x5bba, 0x5bda, 0x5bfa, 0x5c1a, 0x5c3a, + 0x5c5a, 0x5c7a, 0x5c9a, 0x5cba, 0x5cda, 0x5cfa, 0x5d1a, 0x5d3a, + 0x5d5a, 0x5d77, 0x5d90, 0x5dae, 0x5dc9, 0x5ddb, 0x5df1, 0x5e0f, + 0x5e2d, 0x5e4b, 0x5e69, 0x5e87, 0x5ea5, 0x5ec3, 0x5ee1, 0x5eff, + 0x5f1d, 0x5f3b, 0x5f59, 0x5f77, 0x5f95, 0x5fb3, 0x5fd1, 0x5fef, + // Entry 3FC0 - 3FFF + 0x600d, 0x602b, 0x6049, 0x6067, 0x6085, 0x60a3, 0x60c1, 0x60df, + 0x60fd, 0x6119, 0x6130, 0x614d, 0x615c, 0x617c, 0x619d, 0x61bc, + 0x61d9, 0x61f7, 0x6212, 0x622f, 0x624b, 0x626c, 0x628d, 0x62ae, + 0x62cf, 0x62f0, 0x6312, 0x6334, 0x6356, 0x6378, 0x63a8, 0x63c3, + 0x63de, 0x63f9, 0x6414, 0x642f, 0x644b, 0x6467, 0x6483, 0x649f, + 0x64bb, 0x64d7, 0x64f3, 0x650f, 0x652b, 0x6547, 0x6563, 0x657f, + 0x659b, 0x65b7, 0x65d3, 0x65ef, 0x660b, 0x6627, 0x6643, 0x665f, + 0x667b, 0x6697, 0x66b3, 0x66cf, 0x66eb, 0x6707, 0x6723, 0x673f, + // Entry 4000 - 403F + 0x675b, 0x6777, 0x6793, 0x67af, 0x67cb, 0x67e7, 0x6803, 0x681f, + 0x683b, 0x6857, 0x6873, 0x688e, 0x68b2, 0x68db, 0x68f2, 0x6910, + 0x6933, 0x6956, 0x6973, 0x6996, 0x69b9, 0x69d7, 0x69fa, 0x6a17, + 0x6a3b, 0x6a5e, 0x6a81, 0x6aa3, 0x6ac8, 0x6aed, 0x6b10, 0x6b2d, + 0x6b4a, 0x6b6c, 0x6b8e, 0x6baa, 0x6bcb, 0x6be8, 0x6c05, 0x6c27, + 0x6c46, 0x6c65, 0x6c84, 0x6ca3, 0x6cc0, 0x6cd9, 0x6cf3, 0x6d0d, + 0x6d28, 0x6d42, 0x6d5b, 0x6d76, 0x6d90, 0x6da9, 0x6dc3, 0x6dde, + 0x6df8, 0x6e12, 0x6e2b, 0x6e46, 0x6e60, 0x6e7a, 0x6e94, 0x6eae, + // Entry 4040 - 407F + 0x6ec8, 0x6ee1, 0x6ef4, 0x6f08, 0x6f1a, 0x6f2a, 0x6f3e, 0x6f50, + 0x6f62, 0x6f80, 0x6f99, 0x6fb0, 0x6fca, 0x6fe3, 0x6ff9, 0x700f, + 0x702c, 0x704c, 0x706d, 0x7089, 0x709e, 0x70b6, 0x70ce, 0x70e6, + 0x70fe, 0x7116, 0x712f, 0x7148, 0x7161, 0x717a, 0x7193, 0x71ac, + 0x71c5, 0x71de, 0x71f7, 0x7210, 0x7229, 0x7242, 0x725b, 0x7274, + 0x728d, 0x72a6, 0x72bf, 0x72d8, 0x72f1, 0x730a, 0x7323, 0x733c, + 0x7355, 0x736e, 0x7387, 0x73a0, 0x73b9, 0x73d2, 0x73eb, 0x7404, + 0x741d, 0x7436, 0x744f, 0x7468, 0x7481, 0x749a, 0x74b3, 0x74cc, + // Entry 4080 - 40BF + 0x74e5, 0x74fe, 0x7517, 0x7530, 0x7549, 0x7562, 0x757b, 0x7594, + 0x75ad, 0x75c6, 0x75df, 0x75f8, 0x7611, 0x762a, 0x7643, 0x765c, + 0x7675, 0x768e, 0x76a7, 0x76c0, 0x76da, 0x76f4, 0x770e, 0x7728, + 0x7742, 0x775c, 0x7776, 0x7790, 0x77aa, 0x77c4, 0x77de, 0x77f2, + 0x7806, 0x781a, 0x782e, 0x7842, 0x7856, 0x786a, 0x787e, 0x7892, + 0x78a6, 0x78ba, 0x78ce, 0x78e2, 0x78f6, 0x7910, 0x792c, 0x7947, + 0x7963, 0x797f, 0x799f, 0x79ba, 0x79d5, 0x79f5, 0x7a14, 0x7a2f, + 0x7a4b, 0x7a66, 0x7a82, 0x7a9e, 0x7abb, 0x7ad7, 0x7af3, 0x7b11, + // Entry 40C0 - 40FF + 0x7b2c, 0x7b49, 0x7b63, 0x7b7e, 0x7b94, 0x7bb0, 0x7bcb, 0x7be8, + 0x7c03, 0x7c19, 0x7c34, 0x7c4a, 0x7c60, 0x7c7b, 0x7c91, 0x7ca7, + 0x7cbd, 0x7cd9, 0x7cef, 0x7d05, 0x7d21, 0x7d37, 0x7d4d, 0x7d6b, + 0x7d88, 0x7d9e, 0x7db4, 0x7dca, 0x7de0, 0x7df6, 0x7e0c, 0x7e22, + 0x7e38, 0x7e4e, 0x7e6a, 0x7e80, 0x7e9b, 0x7eb1, 0x7ec7, 0x7edd, + 0x7ef3, 0x7f09, 0x7f1f, 0x7f35, 0x7f4b, 0x7f61, 0x7f77, 0x7f8d, + 0x7faa, 0x7fca, 0x7fe8, 0x8004, 0x8020, 0x8036, 0x8052, 0x8068, + 0x807e, 0x80a4, 0x80c2, 0x80e6, 0x8102, 0x8118, 0x812e, 0x814a, + // Entry 4100 - 413F + 0x8160, 0x8176, 0x818c, 0x81a2, 0x81b8, 0x81d3, 0x81e9, 0x81ff, + 0x8215, 0x822b, 0x8241, 0x825e, 0x827b, 0x8298, 0x82b5, 0x82d2, + 0x82ef, 0x830c, 0x8329, 0x8346, 0x8363, 0x8380, 0x839d, 0x83ba, + 0x83d7, 0x83f4, 0x8411, 0x842e, 0x844b, 0x8468, 0x8485, 0x84a2, + 0x84bf, 0x84dc, 0x84f9, 0x8516, 0x8533, 0x8550, 0x856d, 0x858a, + 0x85a4, 0x85bd, 0x85ce, 0x85df, 0x85f0, 0x8603, 0x8615, 0x8627, + 0x8638, 0x864b, 0x865e, 0x8670, 0x8681, 0x8695, 0x86a9, 0x86bc, + 0x86cf, 0x86e2, 0x86f7, 0x870b, 0x871f, 0x8738, 0x8751, 0x876c, + // Entry 4140 - 417F + 0x8786, 0x87a0, 0x87b9, 0x87d4, 0x87ef, 0x8809, 0x8823, 0x883d, + 0x8859, 0x8874, 0x888f, 0x88a9, 0x88c5, 0x88e1, 0x88fc, 0x8916, + 0x8933, 0x8950, 0x896c, 0x8988, 0x89a4, 0x89c2, 0x89df, 0x89fc, + 0x8a13, 0x8a2e, 0x8a4a, 0x8a65, 0x8a81, 0x8aa1, 0x8ac4, 0x8ae1, + 0x8afd, 0x8b1f, 0x8b3e, 0x8b60, 0x8b7b, 0x8b97, 0x8bba, 0x8bde, + 0x8c03, 0x8c26, 0x8c48, 0x8c6c, 0x8c96, 0x8cc1, 0x8cec, 0x8d18, + 0x8d3b, 0x8d5d, 0x8d81, 0x8dab, 0x8dd6, 0x8e01, 0x8e2c, 0x8e59, + 0x8e78, 0x8e9d, 0x8eba, 0x8ed9, 0x8ef8, 0x8f15, 0x8f3b, 0x8f63, + // Entry 4180 - 41BF + 0x8f83, 0x8fa2, 0x8fd0, 0x8fef, 0x900d, 0x902a, 0x904a, 0x906b, + 0x909b, 0x90bc, 0x90db, 0x9100, 0x9127, 0x914f, 0x9177, 0x919d, + 0x91c4, 0x91e8, 0x920e, 0x9235, 0x9257, 0x927b, 0x928e, 0x92b0, + 0x92c5, 0x92de, 0x92ed, 0x92fe, 0x9310, 0x931f, 0x9333, 0x9349, + 0x935e, 0x9373, 0x9386, 0x939d, 0x93ad, 0x93be, 0x93cf, 0x93e0, + 0x93f1, 0x9402, 0x941a, 0x9429, 0x943f, 0x9452, 0x9466, 0x9472, + 0x9484, 0x9494, 0x94a7, 0x94b9, 0x94d3, 0x94e5, 0x94f8, 0x950c, + 0x9521, 0x9535, 0x9542, 0x9556, 0x956a, 0x9587, 0x95a5, 0x95c5, + // Entry 41C0 - 41FF + 0x95df, 0x95f7, 0x960f, 0x9628, 0x9643, 0x965b, 0x9673, 0x9689, + 0x96a2, 0x96b9, 0x96d4, 0x96ee, 0x9704, 0x971a, 0x9736, 0x9758, + 0x9771, 0x9788, 0x97a0, 0x97b9, 0x97d3, 0x97ea, 0x9801, 0x9818, + 0x9834, 0x984a, 0x9860, 0x9878, 0x988f, 0x98a7, 0x98bd, 0x98da, + 0x98f1, 0x990b, 0x9925, 0x993c, 0x9956, 0x996e, 0x9987, 0x99a2, + 0x99be, 0x99da, 0x9a05, 0x9a14, 0x9a23, 0x9a32, 0x9a42, 0x9a51, + 0x9a60, 0x9a6f, 0x9a7e, 0x9a8d, 0x9a9d, 0x9aac, 0x9abb, 0x9aca, + 0x9ad9, 0x9ae8, 0x9af7, 0x9b07, 0x9b17, 0x9b26, 0x9b35, 0x9b45, + // Entry 4200 - 423F + 0x9b54, 0x9b63, 0x9b72, 0x9b82, 0x9b92, 0x9ba2, 0x9bb1, 0x9bc0, + 0x9bcf, 0x9bdf, 0x9bee, 0x9bfd, 0x9c0e, 0x9c1d, 0x9c2d, 0x9c3d, + 0x9c4c, 0x9c5b, 0x9c6a, 0x9c79, 0x9c89, 0x9c98, 0x9ca8, 0x9cb9, + 0x9cc8, 0x9cda, 0x9ce9, 0x9cf9, 0x9d08, 0x9d17, 0x9d28, 0x9d37, + 0x9d47, 0x9d56, 0x9d65, 0x9d77, 0x9d86, 0x9d96, 0x9da6, 0x9db6, + 0x9dc5, 0x9dd5, 0x9de5, 0x9df6, 0x9e06, 0x9e16, 0x9e28, 0x9e38, + 0x9e4a, 0x9e5a, 0x9e6a, 0x9e7b, 0x9e8c, 0x9e9d, 0x9eae, 0x9ebe, + 0x9ed0, 0x9eeb, 0x9f01, 0x9f17, 0x9f2f, 0x9f46, 0x9f5d, 0x9f73, + // Entry 4240 - 427F + 0x9f8b, 0x9fa3, 0x9fba, 0x9fd1, 0x9feb, 0xa005, 0xa01e, 0xa037, + 0xa050, 0xa06b, 0xa085, 0xa09f, 0xa0be, 0xa0dd, 0xa0fe, 0xa11e, + 0xa13e, 0xa15d, 0xa17e, 0xa19f, 0xa1bf, 0xa1d2, 0xa1e6, 0xa1fa, + 0xa20e, 0xa221, 0xa235, 0xa249, 0xa25d, 0xa272, 0xa285, 0xa299, + 0xa2ad, 0xa2c1, 0xa2d5, 0xa2ea, 0xa2fd, 0xa311, 0xa326, 0xa33a, + 0xa34e, 0xa362, 0xa376, 0xa389, 0xa39e, 0xa3b3, 0xa3c8, 0xa3dc, + 0xa3f1, 0xa406, 0xa41a, 0xa42e, 0xa443, 0xa459, 0xa470, 0xa486, + 0xa49e, 0xa4b0, 0xa4c5, 0xa4d7, 0xa4e9, 0xa4fd, 0xa513, 0xa525, + // Entry 4280 - 42BF + 0xa537, 0xa54b, 0xa55c, 0xa56f, 0xa582, 0xa595, 0xa5a9, 0xa5ba, + 0xa5cc, 0xa5e2, 0xa5f6, 0xa609, 0xa61c, 0xa62f, 0xa642, 0xa655, + 0xa668, 0xa67b, 0xa68e, 0xa6a8, 0xa6bc, 0xa6d1, 0xa6e6, 0xa6fb, + 0xa70e, 0xa724, 0xa73b, 0xa751, 0xa768, 0xa77b, 0xa791, 0xa7a6, + 0xa7bd, 0xa7d4, 0xa7ea, 0xa800, 0xa815, 0xa82a, 0xa83f, 0xa852, + 0xa869, 0xa880, 0xa899, 0xa8ae, 0xa8c4, 0xa8d7, 0xa8eb, 0xa8ff, + 0xa913, 0xa929, 0xa93e, 0xa953, 0xa969, 0xa97e, 0xa992, 0xa9a6, + 0xa9ba, 0xa9ce, 0xa9ec, 0xaa0b, 0xaa2b, 0xaa4c, 0xaa6b, 0xaa7f, + // Entry 42C0 - 42FF + 0xaa93, 0xaaa8, 0xaabb, 0xaad0, 0xaae2, 0xaaf4, 0xab08, 0xab1c, + 0xab2f, 0xab42, 0xab55, 0xab69, 0xab7e, 0xab91, 0xaba5, 0xabb8, + 0xabca, 0xabdf, 0xabf2, 0xac04, 0xac18, 0xac2c, 0xac41, 0xac57, + 0xac6c, 0xac7e, 0xac8f, 0xaca0, 0xacb3, 0xacc8, 0xacda, 0xacec, + 0xacfe, 0xad11, 0xad24, 0xad37, 0xad4a, 0xad5d, 0xad70, 0xad83, + 0xad96, 0xada9, 0xadbc, 0xadcf, 0xade2, 0xadf5, 0xae09, 0xae1c, + 0xae2f, 0xae42, 0xae55, 0xae68, 0xae7b, 0xae8e, 0xaea1, 0xaeb4, + 0xaec7, 0xaeda, 0xaeed, 0xaf00, 0xaf13, 0xaf26, 0xaf39, 0xaf4d, + // Entry 4300 - 433F + 0xaf61, 0xaf74, 0xaf8f, 0xafac, 0xafc9, 0xafe6, 0xb000, 0xb01c, + 0xb031, 0xb049, 0xb061, 0xb077, 0xb08d, 0xb0a3, 0xb0bc, 0xb0d6, + 0xb0f3, 0xb110, 0xb12d, 0xb14b, 0xb168, 0xb186, 0xb1a4, 0xb1c2, + 0xb1e0, 0xb1ff, 0xb21d, 0xb23c, 0xb255, 0xb26e, 0xb287, 0xb2a1, + 0xb2b9, 0xb2d3, 0xb2ed, 0xb307, 0xb321, 0xb33c, 0xb356, 0xb370, + 0xb38a, 0xb3a3, 0xb3bd, 0xb3d7, 0xb3f2, 0xb40b, 0xb425, 0xb43f, + 0xb45a, 0xb473, 0xb48c, 0xb4a5, 0xb4be, 0xb4d8, 0xb4f1, 0xb50a, + 0xb525, 0xb540, 0xb55b, 0xb577, 0xb592, 0xb5ae, 0xb5ca, 0xb5e6, + // Entry 4340 - 437F + 0xb602, 0xb61f, 0xb63b, 0xb658, 0xb66f, 0xb686, 0xb69d, 0xb6b5, + 0xb6cb, 0xb6e3, 0xb6fb, 0xb713, 0xb72b, 0xb744, 0xb75c, 0xb774, + 0xb78c, 0xb7a3, 0xb7bb, 0xb7d3, 0xb7ec, 0xb803, 0xb81b, 0xb833, + 0xb84c, 0xb863, 0xb87a, 0xb891, 0xb8a8, 0xb8c0, 0xb8d7, 0xb8ee, + 0xb901, 0xb913, 0xb926, 0xb938, 0xb94c, 0xb95d, 0xb970, 0xb985, + 0xb997, 0xb9aa, 0xb9bc, 0xb9cf, 0xb9e1, 0xb9f3, 0xba06, 0xba18, + 0xba2e, 0xba42, 0xba54, 0xba68, 0xba7b, 0xba8e, 0xba9f, 0xbab1, + 0xbac3, 0xbad5, 0xbae6, 0xbaf9, 0xbb0b, 0xbb1c, 0xbb2f, 0xbb41, + // Entry 4380 - 43BF + 0xbb53, 0xbb65, 0xbb77, 0xbb88, 0xbb9a, 0xbbad, 0xbbbf, 0xbbd1, + 0xbbe3, 0xbbf4, 0xbc06, 0xbc18, 0xbc2c, 0xbc3e, 0xbc50, 0xbc62, + 0xbc75, 0xbc86, 0xbc97, 0xbca8, 0xbcb9, 0xbccb, 0xbcde, 0xbcef, + 0xbd00, 0xbd14, 0xbd26, 0xbd39, 0xbd4a, 0xbd5b, 0xbd6e, 0xbd81, + 0xbd94, 0xbda7, 0xbdba, 0xbdcc, 0xbddd, 0xbdee, 0xbdfe, 0xbe0e, + 0xbe1e, 0xbe2e, 0xbe3e, 0xbe4f, 0xbe60, 0xbe71, 0xbe83, 0xbe94, + 0xbea5, 0xbeb8, 0xbeca, 0xbedc, 0xbeed, 0xbf00, 0xbf13, 0xbf25, + 0xbf3b, 0xbf52, 0xbf6a, 0xbf81, 0xbf99, 0xbfb1, 0xbfcb, 0xbfe1, + // Entry 43C0 - 43FF + 0xbff9, 0xc010, 0xc028, 0xc03e, 0xc055, 0xc06e, 0xc086, 0xc09d, + 0xc0b4, 0xc0cb, 0xc0e1, 0xc0f9, 0xc110, 0xc129, 0xc140, 0xc158, + 0xc16f, 0xc188, 0xc1a0, 0xc1ba, 0xc1d3, 0xc1eb, 0xc201, 0xc218, + 0xc230, 0xc248, 0xc25f, 0xc277, 0xc28b, 0xc2a0, 0xc2b6, 0xc2cb, + 0xc2e1, 0xc2f7, 0xc30f, 0xc323, 0xc339, 0xc34e, 0xc364, 0xc378, + 0xc38d, 0xc3a4, 0xc3ba, 0xc3cf, 0xc3e4, 0xc3f9, 0xc40d, 0xc423, + 0xc438, 0xc44f, 0xc464, 0xc47a, 0xc48f, 0xc4a6, 0xc4bc, 0xc4d4, + 0xc4eb, 0xc501, 0xc515, 0xc52a, 0xc540, 0xc556, 0xc56b, 0xc581, + // Entry 4400 - 443F + 0xc591, 0xc5a2, 0xc5b3, 0xc5c5, 0xc5d6, 0xc5e8, 0xc5fa, 0xc60b, + 0xc61b, 0xc62c, 0xc63d, 0xc64f, 0xc660, 0xc670, 0xc681, 0xc692, + 0xc6a3, 0xc6b5, 0xc6c6, 0xc6d7, 0xc6e8, 0xc6fa, 0xc70a, 0xc71b, + 0xc72c, 0xc73d, 0xc74f, 0xc760, 0xc772, 0xc783, 0xc795, 0xc7a5, + 0xc7b6, 0xc7c7, 0xc7d7, 0xc7e8, 0xc7fa, 0xc80c, 0xc821, 0xc833, + 0xc850, 0xc86d, 0xc88a, 0xc8a7, 0xc8c3, 0xc8e1, 0xc8fe, 0xc91c, + 0xc939, 0xc956, 0xc974, 0xc991, 0xc9ae, 0xc9cb, 0xc9e8, 0xca06, + 0xca24, 0xca42, 0xca5f, 0xca7d, 0xca9a, 0xcab8, 0xcad6, 0xcaf3, + // Entry 4440 - 447F + 0xcb10, 0xcb2e, 0xcb4b, 0xcb69, 0xcb86, 0xcba3, 0xcbc1, 0xcbe0, + 0xcbfe, 0xcc1c, 0xcc38, 0xcc56, 0xcc73, 0xcc91, 0xccaf, 0xcccc, + 0xcceb, 0xcd08, 0xcd26, 0xcd44, 0xcd62, 0xcd80, 0xcd9d, 0xcdbb, + 0xcdd9, 0xcdf7, 0xce15, 0xce32, 0xce52, 0xce65, 0xce78, 0xce8b, + 0xce9e, 0xceb1, 0xcec4, 0xced7, 0xceea, 0xcefd, 0xcf10, 0xcf23, + 0xcf36, 0xcf49, 0xcf5c, 0xcf6f, 0xcf82, 0xcf96, 0xcfaa, 0xcfbd, + 0xcfd1, 0xcfe5, 0xcff8, 0xd00c, 0xd01f, 0xd032, 0xd045, 0xd058, + 0xd06b, 0xd07e, 0xd091, 0xd0a4, 0xd0b7, 0xd0ca, 0xd0dd, 0xd0f0, + // Entry 4480 - 44BF + 0xd103, 0xd116, 0xd129, 0xd13c, 0xd14f, 0xd162, 0xd175, 0xd188, + 0xd19b, 0xd1ae, 0xd1c1, 0xd1d4, 0xd1e7, 0xd1fa, 0xd20d, 0xd220, + 0xd233, 0xd246, 0xd259, 0xd26c, 0xd27f, 0xd292, 0xd2a5, 0xd2b8, + 0xd2cb, 0xd2de, 0xd2f1, 0xd304, 0xd317, 0xd32a, 0xd33d, 0xd350, + 0xd363, 0xd376, 0xd389, 0xd39c, 0xd3b2, 0xd3c5, 0xd3d8, 0xd3eb, + 0xd3fe, 0xd411, 0xd425, 0xd439, 0xd44c, 0xd45f, 0xd472, 0xd485, + 0xd498, 0xd4ab, 0xd4bd, 0xd4cf, 0xd4e1, 0xd4f3, 0xd505, 0xd517, + 0xd529, 0xd53b, 0xd54e, 0xd561, 0xd574, 0xd586, 0xd598, 0xd5aa, + // Entry 44C0 - 44FF + 0xd5bd, 0xd5d0, 0xd5e3, 0xd5f5, 0xd607, 0xd619, 0xd62b, 0xd63d, + 0xd64f, 0xd661, 0xd673, 0xd685, 0xd697, 0xd6a9, 0xd6bb, 0xd6cd, + 0xd6df, 0xd6f1, 0xd703, 0xd715, 0xd727, 0xd739, 0xd74b, 0xd75d, + 0xd76f, 0xd781, 0xd793, 0xd7a5, 0xd7b7, 0xd7c9, 0xd7db, 0xd7ed, + 0xd7ff, 0xd811, 0xd823, 0xd835, 0xd847, 0xd859, 0xd86b, 0xd87d, + 0xd88f, 0xd8a1, 0xd8b3, 0xd8c5, 0xd8d7, 0xd8e9, 0xd8fb, 0xd90d, + 0xd91f, 0xd931, 0xd943, 0xd955, 0xd967, 0xd979, 0xd98b, 0xd99d, + 0xd9af, 0xd9c1, 0xd9d3, 0xd9e5, 0xd9f7, 0xda0d, 0xda23, 0xda39, + // Entry 4500 - 453F + 0xda4f, 0xda65, 0xda7b, 0xda91, 0xdaa7, 0xdabd, 0xdad3, 0xdae9, + 0xdaff, 0xdb15, 0xdb2b, 0xdb41, 0xdb57, 0xdb6d, 0xdb83, 0xdb99, + 0xdbab, 0xdbbd, 0xdbcf, 0xdbe1, 0xdbf3, 0xdc05, 0xdc17, 0xdc29, + 0xdc3b, 0xdc4d, 0xdc5f, 0xdc71, 0xdc83, 0xdc95, 0xdca7, 0xdcb9, + 0xdccb, 0xdcdd, 0xdcef, 0xdd01, 0xdd13, 0xdd25, 0xdd37, 0xdd49, + 0xdd5b, 0xdd6d, 0xdd7f, 0xdd91, 0xdda3, 0xddb5, 0xddc7, 0xddd9, + 0xddeb, 0xddfd, 0xde0f, 0xde21, 0xde33, 0xde45, 0xde57, 0xde69, + 0xde7b, 0xde8d, 0xde9f, 0xdeb1, 0xdec3, 0xded5, 0xdee7, 0xdef9, + // Entry 4540 - 457F + 0xdf0b, 0xdf1d, 0xdf2f, 0xdf41, 0xdf53, 0xdf65, 0xdf77, 0xdf89, + 0xdf9b, 0xdfad, 0xdfbf, 0xdfd1, 0xdfe3, 0xdff5, 0xe007, 0xe019, + 0xe02b, 0xe03d, 0xe04f, 0xe061, 0xe073, 0xe085, 0xe097, 0xe0a9, + 0xe0bb, 0xe0cd, 0xe0df, 0xe0f1, 0xe103, 0xe115, 0xe127, 0xe139, + 0xe14b, 0xe15d, 0xe16f, 0xe181, 0xe193, 0xe1a5, 0xe1b7, 0xe1c9, + 0xe1db, 0xe1ed, 0xe1ff, 0xe211, 0xe223, 0xe235, 0xe247, 0xe259, + 0xe26b, 0xe27d, 0xe28f, 0xe2a1, 0xe2b3, 0xe2c5, 0xe2d7, 0xe2e9, + 0xe2fb, 0xe30d, 0xe31f, 0xe331, 0xe343, 0xe355, 0xe367, 0xe379, + // Entry 4580 - 45BF + 0xe38b, 0xe39d, 0xe3af, 0xe3c1, 0xe3d3, 0xe3e5, 0xe3f7, 0xe409, + 0xe41b, 0xe42d, 0xe43f, 0xe451, 0xe463, 0xe475, 0xe487, 0xe499, + 0xe4ab, 0xe4bd, 0xe4cf, 0xe4e1, 0xe4f5, 0xe509, 0xe51d, 0xe531, + 0xe545, 0xe559, 0xe56d, 0xe581, 0xe595, 0xe5ac, 0xe5c3, 0xe5da, + 0xe5f1, 0xe605, 0xe619, 0xe62d, 0xe645, 0xe65b, 0xe670, 0xe685, + 0xe69c, 0xe6b1, 0xe6c3, 0xe6d5, 0xe6e7, 0xe6f9, 0xe70b, 0xe71d, + 0xe72f, 0xe741, 0xe753, 0xe765, 0xe777, 0xe789, 0xe79b, 0xe7ae, + 0xe7c1, 0xe7d4, 0xe7e7, 0xe7fa, 0xe80d, 0xe820, 0xe833, 0xe846, + // Entry 45C0 - 45FF + 0xe859, 0xe86c, 0xe87f, 0xe892, 0xe8a5, 0xe8b8, 0xe8cb, 0xe8de, + 0xe8f1, 0xe904, 0xe917, 0xe92a, 0xe93d, 0xe950, 0xe963, 0xe976, + 0xe989, 0xe99c, 0xe9af, 0xe9c2, 0xe9d5, 0xe9e8, 0xe9fb, 0xea0e, + 0xea21, 0xea34, 0xea47, 0xea5a, 0xea6d, 0xea80, 0xea93, 0xeaa6, + 0xeab9, 0xeacc, 0xeadf, 0xeaf2, 0xeb05, 0xeb18, 0xeb2b, 0xeb3e, + 0xeb51, 0xeb6e, 0xeb8a, 0xeba7, 0xebc5, 0xebdf, 0xebfa, 0xec17, + 0xec33, 0xec4f, 0xec6b, 0xec87, 0xeca5, 0xecc0, 0xecdb, 0xecf9, + 0xed15, 0xed2f, 0xed4c, 0xed68, 0xed84, 0xeda0, 0xedbb, 0xedd8, + // Entry 4600 - 463F + 0xedf3, 0xee0e, 0xee2b, 0xee46, 0xee64, 0xee87, 0xeeab, 0xeecf, + 0xeee5, 0xeefa, 0xef10, 0xef27, 0xef3a, 0xef4e, 0xef64, 0xef79, + 0xef8e, 0xefa3, 0xefb8, 0xefcf, 0xefe3, 0xeffd, 0xf011, 0xf028, + 0xf03d, 0xf050, 0xf066, 0xf07b, 0xf090, 0xf0a5, 0xf0b9, 0xf0d8, + 0xf0f8, 0xf10c, 0xf120, 0xf136, 0xf14b, 0xf160, 0xf174, 0xf18b, + 0xf1a7, 0xf1bd, 0xf1d8, 0xf1ed, 0xf203, 0xf21a, 0xf233, 0xf246, + 0xf25a, 0xf270, 0xf285, 0xf29a, 0xf2b5, 0xf2ca, 0xf2e5, 0xf2fa, + 0xf317, 0xf32e, 0xf348, 0xf35c, 0xf376, 0xf38a, 0xf3a1, 0xf3b6, + // Entry 4640 - 467F + 0xf3c9, 0xf3df, 0xf3f4, 0xf409, 0xf424, 0xf439, 0xf44d, 0xf461, + 0xf475, 0xf48b, 0xf4a0, 0xf4bf, 0xf4d4, 0xf4e8, 0xf4ff, 0xf51b, + 0xf52e, 0xf540, 0xf553, 0xf56c, 0xf57c, 0xf58d, 0xf59f, 0xf5b1, + 0xf5c3, 0xf5d5, 0xf5e7, 0xf5fb, 0xf60c, 0xf61d, 0xf631, 0xf642, + 0xf652, 0xf665, 0xf677, 0xf689, 0xf69a, 0xf6ab, 0xf6bd, 0xf6ce, + 0xf6e2, 0xf6fb, 0xf710, 0xf725, 0xf73b, 0xf751, 0xf765, 0xf77a, + 0xf78f, 0xf7a4, 0xf7b9, 0xf7ce, 0xf7e3, 0xf7f9, 0xf80e, 0xf823, + 0xf839, 0xf84e, 0xf862, 0xf878, 0xf88d, 0xf8a3, 0xf8b9, 0xf8ce, + // Entry 4680 - 46BF + 0xf8e3, 0xf8f8, 0xf910, 0xf92d, 0xf942, 0xf959, 0xf972, 0xf981, + 0xf990, 0xf99f, 0xf9ae, 0xf9bd, 0xf9cc, 0xf9db, 0xf9ea, 0xf9f9, + 0xfa08, 0xfa17, 0xfa26, 0xfa35, 0xfa44, 0xfa54, 0xfa63, 0xfa72, + 0xfa81, 0xfa90, 0xfa9f, 0xfaaf, 0xfabf, 0xfacf, 0xfadf, 0xfaef, + 0xfafe, 0xfb14, 0xfb32, 0xfb50, 0xfb6e, 0xfb8c, 0xfbab, 0xfbca, + 0xfbe9, 0xfc0a, 0xfc29, 0xfc48, 0xfc67, 0xfc88, 0xfca7, 0xfcc8, + 0xfce7, 0xfd08, 0xfd27, 0xfd47, 0xfd67, 0xfd86, 0xfda7, 0xfdc6, + 0xfde5, 0xfe04, 0xfe23, 0xfe44, 0xfe63, 0xfe84, 0xfea3, 0xfec2, + // Entry 46C0 - 46FF + 0xfee3, 0xff06, 0xff1f, 0xff38, 0xff51, 0xff6a, 0xff84, 0xff9e, + 0xffb8, 0xffd2, 0xffec, 0x0006, 0x0020, 0x003a, 0x0054, 0x006f, + 0x008a, 0x00a4, 0x00c6, 0x00e0, 0x00fa, 0x0114, 0x012e, 0x0148, + 0x0162, 0x017c, 0x01a5, 0x01c7, 0x01e4, 0x0201, 0x021c, 0x0237, + 0x0254, 0x0270, 0x028c, 0x02a7, 0x02c4, 0x02e1, 0x02fd, 0x0318, + 0x0336, 0x0354, 0x0371, 0x038e, 0x03ab, 0x03ca, 0x03ed, 0x0410, + 0x0435, 0x0459, 0x047d, 0x04a0, 0x04c5, 0x04ea, 0x050e, 0x0532, + 0x0556, 0x057c, 0x05a1, 0x05c6, 0x05ea, 0x0610, 0x0636, 0x065b, + // Entry 4700 - 473F + 0x067f, 0x06a6, 0x06cd, 0x06f3, 0x0719, 0x073f, 0x0767, 0x078e, + 0x07b5, 0x07e1, 0x080d, 0x083b, 0x0868, 0x0895, 0x08c1, 0x08ef, + 0x091d, 0x094a, 0x096f, 0x0995, 0x09bd, 0x09e4, 0x0a0b, 0x0a31, + 0x0a59, 0x0a81, 0x0aa8, 0x0ace, 0x0ae1, 0x0af8, 0x0b0f, 0x0b2e, + 0x0b45, 0x0b5c, 0x0b78, 0x0b99, 0x0bb1, 0x0bc8, 0x0bdc, 0x0bf1, + 0x0c05, 0x0c1a, 0x0c2e, 0x0c43, 0x0c57, 0x0c6c, 0x0c81, 0x0c97, + 0x0cac, 0x0cc2, 0x0cd7, 0x0ceb, 0x0d00, 0x0d14, 0x0d29, 0x0d3d, + 0x0d51, 0x0d66, 0x0d7a, 0x0d8f, 0x0da3, 0x0db7, 0x0dcb, 0x0ddf, + // Entry 4740 - 477F + 0x0df3, 0x0e08, 0x0e1d, 0x0e31, 0x0e45, 0x0e59, 0x0e6e, 0x0e85, + 0x0e9e, 0x0eb3, 0x0ecc, 0x0edd, 0x0ef1, 0x0f05, 0x0f1b, 0x0f30, + 0x0f45, 0x0f5d, 0x0f7a, 0x0f98, 0x0fb2, 0x0fd5, 0x0ff2, 0x1015, + 0x1034, 0x1050, 0x106c, 0x108f, 0x10ab, 0x10c6, 0x10e5, 0x1102, + 0x111e, 0x113b, 0x1157, 0x1174, 0x1191, 0x11ae, 0x11ca, 0x11e6, + 0x1203, 0x121f, 0x123d, 0x125b, 0x127a, 0x1295, 0x12b2, 0x12ce, + 0x12ed, 0x130b, 0x132a, 0x1348, 0x1365, 0x1382, 0x13a2, 0x13bf, + 0x13dc, 0x13fa, 0x1416, 0x1434, 0x1457, 0x1473, 0x148f, 0x14ab, + // Entry 4780 - 47BF + 0x14c8, 0x14e4, 0x1500, 0x151d, 0x1539, 0x1555, 0x1571, 0x158e, + 0x15aa, 0x15c7, 0x15e4, 0x1600, 0x161d, 0x1639, 0x1656, 0x1672, + 0x168e, 0x16ab, 0x16c7, 0x16e5, 0x1701, 0x171e, 0x173b, 0x1757, + 0x1774, 0x1790, 0x17ac, 0x17c8, 0x17e7, 0x17fe, 0x1814, 0x182b, + 0x1842, 0x185a, 0x1872, 0x1886, 0x189b, 0x18ad, 0x18c4, 0x18dc, + 0x18f3, 0x190b, 0x1921, 0x1937, 0x194d, 0x1963, 0x1979, 0x1990, + 0x19a8, 0x19c1, 0x19da, 0x19ef, 0x1a04, 0x1a1c, 0x1a32, 0x1a49, + 0x1a5d, 0x1a71, 0x1a88, 0x1a9e, 0x1ab4, 0x1acb, 0x1ae1, 0x1af7, + // Entry 47C0 - 47FF + 0x1b0e, 0x1b23, 0x1b45, 0x1b67, 0x1b7c, 0x1b92, 0x1ba7, 0x1bbf, + 0x1bdc, 0x1bf7, 0x1c15, 0x1c41, 0x1c66, 0x1c80, 0x1c9f, 0x1cc1, + 0x1cd1, 0x1ce2, 0x1cf3, 0x1d05, 0x1d16, 0x1d28, 0x1d39, 0x1d4b, + 0x1d5b, 0x1d6c, 0x1d7c, 0x1d8d, 0x1d9d, 0x1dae, 0x1dbe, 0x1dcf, + 0x1de0, 0x1df1, 0x1e03, 0x1e15, 0x1e26, 0x1e38, 0x1e4a, 0x1e5b, + 0x1e6c, 0x1e7d, 0x1e8f, 0x1ea0, 0x1eb2, 0x1ec4, 0x1ed5, 0x1ee6, + 0x1ef7, 0x1f09, 0x1f1b, 0x1f2e, 0x1f41, 0x1f52, 0x1f64, 0x1f76, + 0x1f87, 0x1f99, 0x1fab, 0x1fbc, 0x1fcd, 0x1fde, 0x1fef, 0x2000, + // Entry 4800 - 483F + 0x2011, 0x2023, 0x2035, 0x2048, 0x205b, 0x206c, 0x2085, 0x20ab, + 0x20d2, 0x20f9, 0x2120, 0x2149, 0x2172, 0x2195, 0x21b7, 0x21da, + 0x21fe, 0x221e, 0x223f, 0x2262, 0x2284, 0x22a6, 0x22c8, 0x22ea, + 0x230e, 0x232f, 0x2350, 0x2374, 0x2396, 0x23b6, 0x23d9, 0x23fb, + 0x241d, 0x243f, 0x2460, 0x2481, 0x24a2, 0x24c5, 0x24e7, 0x2508, + 0x252c, 0x2555, 0x257f, 0x25a1, 0x25c2, 0x25e4, 0x2607, 0x2626, + 0x2650, 0x2672, 0x2693, 0x26b4, 0x26d5, 0x26f6, 0x2719, 0x273e, + 0x275e, 0x2781, 0x27a0, 0x27c2, 0x27e3, 0x2803, 0x2823, 0x2843, + // Entry 4840 - 487F + 0x2865, 0x2886, 0x28a6, 0x28c9, 0x28f1, 0x291a, 0x2936, 0x2951, + 0x296d, 0x298a, 0x29a3, 0x29c7, 0x29e3, 0x29fe, 0x2a19, 0x2a34, + 0x2a51, 0x2a70, 0x2a8a, 0x2aa7, 0x2ac0, 0x2adc, 0x2af7, 0x2b11, + 0x2b2d, 0x2b50, 0x2b74, 0x2b96, 0x2bb0, 0x2bca, 0x2be6, 0x2c01, + 0x2c1b, 0x2c38, 0x2c5a, 0x2c74, 0x2c8f, 0x2cab, 0x2cc5, 0x2ce0, + 0x2cfb, 0x2d15, 0x2d30, 0x2d4c, 0x2d67, 0x2d83, 0x2d9f, 0x2dbc, + 0x2dd7, 0x2df3, 0x2e0f, 0x2e2c, 0x2e47, 0x2e63, 0x2e7f, 0x2e9a, + 0x2eb6, 0x2ed1, 0x2eed, 0x2f09, 0x2f26, 0x2f42, 0x2f5f, 0x2f7b, + // Entry 4880 - 48BF + 0x2f98, 0x2fb3, 0x2fcf, 0x2feb, 0x3007, 0x3022, 0x303d, 0x3059, + 0x3076, 0x3092, 0x30af, 0x30cb, 0x30e8, 0x3104, 0x3121, 0x313e, + 0x315a, 0x3178, 0x3193, 0x31ae, 0x31c9, 0x31e4, 0x3200, 0x321b, + 0x3237, 0x3252, 0x326e, 0x3289, 0x32a5, 0x32c0, 0x32dc, 0x32f8, + 0x3313, 0x332f, 0x334b, 0x3368, 0x3384, 0x33a1, 0x33bc, 0x33d8, + 0x33f4, 0x3411, 0x342c, 0x3449, 0x3467, 0x3486, 0x34a5, 0x34c5, + 0x34e4, 0x3504, 0x3524, 0x3543, 0x3563, 0x3581, 0x35a5, 0x35c4, + 0x35e3, 0x3602, 0x3622, 0x3641, 0x365f, 0x367e, 0x369d, 0x36bc, + // Entry 48C0 - 48FF + 0x36db, 0x36fb, 0x371a, 0x373a, 0x3759, 0x3778, 0x3798, 0x37b6, + 0x37d5, 0x37ff, 0x3828, 0x3848, 0x3867, 0x3887, 0x38a6, 0x38cb, + 0x38ea, 0x390a, 0x3929, 0x3949, 0x3969, 0x3989, 0x39a7, 0x39c6, + 0x39f0, 0x3a19, 0x3a38, 0x3a57, 0x3a77, 0x3aa3, 0x3ac2, 0x3ade, + 0x3afb, 0x3b18, 0x3b36, 0x3b53, 0x3b71, 0x3b8f, 0x3bac, 0x3bca, + 0x3be6, 0x3c08, 0x3c25, 0x3c42, 0x3c5f, 0x3c7d, 0x3c9a, 0x3cb6, + 0x3cd3, 0x3cf0, 0x3d0d, 0x3d2a, 0x3d48, 0x3d65, 0x3d83, 0x3da0, + 0x3dbd, 0x3ddb, 0x3df7, 0x3e14, 0x3e3c, 0x3e63, 0x3e81, 0x3e9e, + // Entry 4900 - 493F + 0x3ebc, 0x3ed9, 0x3efc, 0x3f19, 0x3f37, 0x3f54, 0x3f72, 0x3f90, + 0x3fae, 0x3fca, 0x3fe7, 0x400f, 0x4036, 0x4053, 0x4070, 0x408e, + 0x40b8, 0x40d5, 0x40ed, 0x4106, 0x411e, 0x4138, 0x4158, 0x4179, + 0x4187, 0x4195, 0x41a5, 0x41b4, 0x41c3, 0x41d1, 0x41e1, 0x41f1, + 0x4200, 0x420f, 0x4221, 0x4233, 0x4244, 0x4255, 0x4266, 0x4279, + 0x428b, 0x429d, 0x42b4, 0x42cb, 0x42e4, 0x42fc, 0x4314, 0x432b, + 0x4344, 0x435d, 0x4375, 0x438b, 0x43a4, 0x43bb, 0x43d3, 0x43ea, + 0x43fe, 0x4411, 0x4428, 0x443f, 0x444e, 0x445e, 0x446d, 0x447d, + // Entry 4940 - 497F + 0x448c, 0x449c, 0x44b3, 0x44cb, 0x44e2, 0x44fa, 0x4509, 0x4519, + 0x4528, 0x4538, 0x4548, 0x4559, 0x4569, 0x457a, 0x458b, 0x459b, + 0x45ac, 0x45bc, 0x45cd, 0x45de, 0x45ef, 0x4601, 0x4612, 0x4624, + 0x4635, 0x4645, 0x4656, 0x4666, 0x4677, 0x4687, 0x4697, 0x46a8, + 0x46b8, 0x46c9, 0x46d9, 0x46e9, 0x46f9, 0x4709, 0x4719, 0x472a, + 0x473b, 0x474b, 0x475b, 0x476c, 0x4788, 0x47a3, 0x47bf, 0x47d3, + 0x47f3, 0x4806, 0x481a, 0x482d, 0x4841, 0x485c, 0x4878, 0x4893, + 0x48af, 0x48c2, 0x48d6, 0x48e9, 0x48fd, 0x490a, 0x4916, 0x4929, + // Entry 4980 - 49BF + 0x493f, 0x495c, 0x4973, 0x4992, 0x49aa, 0x49bb, 0x49cc, 0x49df, + 0x49f1, 0x4a03, 0x4a14, 0x4a27, 0x4a3a, 0x4a4c, 0x4a5d, 0x4a71, + 0x4a85, 0x4a98, 0x4aab, 0x4abe, 0x4ad3, 0x4ae7, 0x4afb, 0x4b14, + 0x4b2e, 0x4b3f, 0x4b4f, 0x4b5f, 0x4b71, 0x4b82, 0x4b93, 0x4ba3, + 0x4bb5, 0x4bc7, 0x4bd8, 0x4bec, 0x4c03, 0x4c17, 0x4c2a, 0x4c39, + 0x4c49, 0x4c58, 0x4c68, 0x4c77, 0x4c87, 0x4c96, 0x4ca6, 0x4cb5, + 0x4cc5, 0x4cd5, 0x4ce6, 0x4cf6, 0x4d07, 0x4d18, 0x4d28, 0x4d39, + 0x4d49, 0x4d5a, 0x4d6b, 0x4d7c, 0x4d8e, 0x4d9f, 0x4db2, 0x4dc4, + // Entry 49C0 - 49FF + 0x4dd5, 0x4de6, 0x4df6, 0x4e07, 0x4e17, 0x4e28, 0x4e38, 0x4e48, + 0x4e59, 0x4e69, 0x4e7a, 0x4e8a, 0x4e9a, 0x4eaa, 0x4eba, 0x4eca, + 0x4edb, 0x4eec, 0x4efc, 0x4f0c, 0x4f20, 0x4f33, 0x4f47, 0x4f5a, + 0x4f6e, 0x4f81, 0x4f95, 0x4fa8, 0x4fbc, 0x4fce, 0x4fdf, 0x4ff7, + 0x500e, 0x5020, 0x5033, 0x504d, 0x5059, 0x506c, 0x5083, 0x509a, + 0x50b1, 0x50c8, 0x50df, 0x50f6, 0x510d, 0x5125, 0x513c, 0x5153, + 0x516a, 0x5181, 0x5198, 0x51af, 0x51c6, 0x51dd, 0x51f4, 0x520c, + 0x5222, 0x5239, 0x524f, 0x5265, 0x527b, 0x5291, 0x52a8, 0x52bf, + // Entry 4A00 - 4A3F + 0x52d5, 0x52eb, 0x5303, 0x531a, 0x5331, 0x5347, 0x535f, 0x5377, + 0x538e, 0x53a5, 0x53b9, 0x53cc, 0x53dc, 0x53eb, 0x53fa, 0x5409, + 0x541a, 0x542c, 0x543d, 0x544f, 0x5461, 0x5472, 0x5484, 0x5495, + 0x54a7, 0x54b9, 0x54cb, 0x54de, 0x54f0, 0x5503, 0x5515, 0x5526, + 0x5538, 0x5549, 0x555b, 0x556c, 0x557d, 0x558f, 0x55a0, 0x55b2, + 0x55c3, 0x55d5, 0x55e6, 0x55f7, 0x5608, 0x5619, 0x562a, 0x563b, + 0x564e, 0x5661, 0x5675, 0x5688, 0x569c, 0x56af, 0x56c3, 0x56d6, + 0x56ea, 0x56fe, 0x570b, 0x5719, 0x5726, 0x5734, 0x5745, 0x5755, + // Entry 4A40 - 4A7F + 0x5765, 0x5777, 0x5788, 0x5799, 0x57a9, 0x57bb, 0x57cd, 0x57de, + 0x57f1, 0x57fd, 0x5810, 0x5824, 0x5835, 0x5846, 0x5857, 0x5868, + 0x5879, 0x588b, 0x589e, 0x58b0, 0x58c3, 0x58d5, 0x58e8, 0x58fa, + 0x590d, 0x5920, 0x5933, 0x5947, 0x595a, 0x596e, 0x5981, 0x5993, + 0x59a6, 0x59b8, 0x59cb, 0x59dd, 0x59ef, 0x5a02, 0x5a14, 0x5a27, + 0x5a39, 0x5a4b, 0x5a5d, 0x5a6f, 0x5a81, 0x5a93, 0x5aa6, 0x5ab9, + 0x5ad3, 0x5ae8, 0x5afe, 0x5b16, 0x5b2b, 0x5b3f, 0x5b4f, 0x5b60, + 0x5b70, 0x5b81, 0x5b91, 0x5ba2, 0x5bba, 0x5bd3, 0x5beb, 0x5c04, + // Entry 4A80 - 4ABF + 0x5c14, 0x5c25, 0x5c35, 0x5c46, 0x5c57, 0x5c69, 0x5c7a, 0x5c8c, + 0x5c9e, 0x5caf, 0x5cc1, 0x5cd2, 0x5ce4, 0x5cf6, 0x5d08, 0x5d1b, + 0x5d2d, 0x5d40, 0x5d52, 0x5d63, 0x5d75, 0x5d86, 0x5d98, 0x5da9, + 0x5dba, 0x5dcc, 0x5ddd, 0x5def, 0x5e00, 0x5e11, 0x5e22, 0x5e33, + 0x5e45, 0x5e56, 0x5e68, 0x5e7a, 0x5e8b, 0x5e9c, 0x5eb1, 0x5ec5, + 0x5eda, 0x5eee, 0x5f03, 0x5f1f, 0x5f3c, 0x5f58, 0x5f75, 0x5f89, + 0x5f9e, 0x5fb2, 0x5fc7, 0x5fda, 0x5fef, 0x6007, 0x601f, 0x6029, + 0x6036, 0x604a, 0x6063, 0x6074, 0x6087, 0x6099, 0x60b4, 0x60d2, + // Entry 4AC0 - 4AFF + 0x60e4, 0x60f6, 0x6107, 0x6118, 0x612b, 0x613d, 0x614f, 0x6160, + 0x6173, 0x6186, 0x6198, 0x61a4, 0x61b8, 0x61ca, 0x61e3, 0x61f9, + 0x620f, 0x6228, 0x6241, 0x625c, 0x6276, 0x6290, 0x62a9, 0x62c4, + 0x62df, 0x62f9, 0x6313, 0x6330, 0x634d, 0x6369, 0x6385, 0x63a1, + 0x63bf, 0x63dc, 0x63f9, 0x641b, 0x643e, 0x644d, 0x645d, 0x646c, + 0x647b, 0x648a, 0x649a, 0x64a9, 0x64b9, 0x64c9, 0x64da, 0x64ea, + 0x64fb, 0x650c, 0x651d, 0x652d, 0x653e, 0x654e, 0x655f, 0x6570, + 0x6581, 0x6593, 0x65a4, 0x65b6, 0x65c7, 0x65d7, 0x65e8, 0x65f8, + // Entry 4B00 - 4B3F + 0x660a, 0x661b, 0x662b, 0x663b, 0x664c, 0x665c, 0x666d, 0x667e, + 0x668e, 0x669e, 0x66ae, 0x66be, 0x66ce, 0x66de, 0x66ee, 0x66ff, + 0x6713, 0x6726, 0x673a, 0x674d, 0x6760, 0x6774, 0x6787, 0x679b, + 0x67af, 0x67c1, 0x67d2, 0x67e4, 0x67f0, 0x6803, 0x6818, 0x682b, + 0x6845, 0x685d, 0x686e, 0x687e, 0x688e, 0x689e, 0x68ae, 0x68bf, + 0x68d1, 0x68e2, 0x68f4, 0x6905, 0x6917, 0x6928, 0x693a, 0x694c, + 0x695e, 0x6971, 0x6983, 0x6996, 0x69a9, 0x69bb, 0x69cc, 0x69de, + 0x69ef, 0x6a01, 0x6a12, 0x6a23, 0x6a35, 0x6a46, 0x6a58, 0x6a69, + // Entry 4B40 - 4B7F + 0x6a7a, 0x6a8b, 0x6a9c, 0x6aad, 0x6abe, 0x6acf, 0x6ae1, 0x6af3, + 0x6b07, 0x6b19, 0x6b2c, 0x6b3e, 0x6b51, 0x6b63, 0x6b76, 0x6b88, + 0x6b9b, 0x6bad, 0x6bc0, 0x6bd3, 0x6be7, 0x6bfa, 0x6c0e, 0x6c22, + 0x6c36, 0x6c49, 0x6c5d, 0x6c70, 0x6c84, 0x6c98, 0x6cac, 0x6cc0, + 0x6cd5, 0x6ce9, 0x6cfe, 0x6d12, 0x6d27, 0x6d3b, 0x6d4e, 0x6d62, + 0x6d75, 0x6d89, 0x6d9c, 0x6daf, 0x6dc3, 0x6dd6, 0x6dea, 0x6dfe, + 0x6e11, 0x6e24, 0x6e37, 0x6e4a, 0x6e5d, 0x6e71, 0x6e84, 0x6e97, + 0x6eae, 0x6ec5, 0x6edb, 0x6ef2, 0x6f08, 0x6f1f, 0x6f35, 0x6f4c, + // Entry 4B80 - 4BBF + 0x6f62, 0x6f79, 0x6f8d, 0x6fa2, 0x6fb6, 0x6fc9, 0x6fdc, 0x6ff1, + 0x7005, 0x7019, 0x702c, 0x7041, 0x7056, 0x706a, 0x708f, 0x70a7, + 0x70bc, 0x70d0, 0x70e0, 0x70f1, 0x7101, 0x7112, 0x7122, 0x7133, + 0x714b, 0x7163, 0x7174, 0x7185, 0x7196, 0x71a7, 0x71b8, 0x71ca, + 0x71db, 0x71ed, 0x71ff, 0x7210, 0x7222, 0x7233, 0x7245, 0x7257, + 0x7269, 0x727c, 0x728e, 0x72a1, 0x72b3, 0x72c4, 0x72d6, 0x72e7, + 0x72f9, 0x730a, 0x731b, 0x732d, 0x733e, 0x7350, 0x7361, 0x7372, + 0x7383, 0x7394, 0x73a6, 0x73b7, 0x73c9, 0x73db, 0x73ec, 0x73fd, + // Entry 4BC0 - 4BFF + 0x740f, 0x7424, 0x7439, 0x744d, 0x7462, 0x7476, 0x748b, 0x74a7, + 0x74c4, 0x74d9, 0x74ee, 0x7503, 0x7518, 0x752b, 0x7535, 0x754b, + 0x755d, 0x757a, 0x759e, 0x75b7, 0x75d0, 0x75ec, 0x7609, 0x7625, + 0x7640, 0x765b, 0x7678, 0x7694, 0x76b0, 0x76cb, 0x76e5, 0x7700, + 0x771b, 0x7736, 0x7751, 0x775e, 0x776c, 0x7779, 0x7787, 0x7794, + 0x77a2, 0x77b7, 0x77cd, 0x77e2, 0x77f8, 0x7805, 0x7813, 0x7820, + 0x782e, 0x783c, 0x784b, 0x7859, 0x7868, 0x7877, 0x7887, 0x7895, + 0x78a4, 0x78b2, 0x78c1, 0x78d0, 0x78e0, 0x78ef, 0x78ff, 0x790e, + // Entry 4C00 - 4C3F + 0x791e, 0x792d, 0x793b, 0x794a, 0x7958, 0x7967, 0x7975, 0x7984, + 0x7992, 0x79a1, 0x79af, 0x79be, 0x79cc, 0x79db, 0x79e9, 0x79f7, + 0x7a06, 0x7a14, 0x7a23, 0x7a31, 0x7a40, 0x7a4f, 0x7a5d, 0x7a6b, + 0x7a7d, 0x7a8e, 0x7aa0, 0x7ab1, 0x7ac3, 0x7adc, 0x7af6, 0x7b0f, + 0x7b29, 0x7b3a, 0x7b4c, 0x7b5d, 0x7b6f, 0x7b7f, 0x7b94, 0x7ba6, + 0x7bb7, 0x7bc6, 0x7bd8, 0x7bf0, 0x7bf7, 0x7c02, 0x7c0c, 0x7c1d, + 0x7c27, 0x7c36, 0x7c4c, 0x7c5b, 0x7c69, 0x7c77, 0x7c87, 0x7c96, + 0x7ca5, 0x7cb3, 0x7cc3, 0x7cd3, 0x7ce2, 0x7cf7, 0x7d0a, 0x7d16, + // Entry 4C40 - 4C7F + 0x7d26, 0x7d37, 0x7d47, 0x7d58, 0x7d68, 0x7d79, 0x7d91, 0x7daa, + 0x7dc2, 0x7ddb, 0x7deb, 0x7dfc, 0x7e0c, 0x7e1d, 0x7e2e, 0x7e40, + 0x7e51, 0x7e63, 0x7e75, 0x7e86, 0x7e98, 0x7ea9, 0x7ebb, 0x7ecd, + 0x7edf, 0x7ef2, 0x7f04, 0x7f17, 0x7f29, 0x7f3a, 0x7f4c, 0x7f5d, + 0x7f6f, 0x7f80, 0x7f91, 0x7fa3, 0x7fb4, 0x7fc6, 0x7fd7, 0x7fe8, + 0x7ff9, 0x800a, 0x801b, 0x802d, 0x803f, 0x8050, 0x8061, 0x8076, + 0x808a, 0x809f, 0x80b3, 0x80c8, 0x80e4, 0x8101, 0x811d, 0x813a, + 0x814e, 0x8168, 0x817d, 0x8191, 0x81ab, 0x81c0, 0x81d8, 0x81ed, + // Entry 4C80 - 4CBF + 0x8201, 0x8214, 0x8226, 0x823b, 0x8248, 0x8261, 0x826b, 0x827d, + 0x828e, 0x829f, 0x82b2, 0x82c4, 0x82d6, 0x82e7, 0x82fa, 0x830d, + 0x831f, 0x832f, 0x8340, 0x8350, 0x8361, 0x8371, 0x8382, 0x839a, + 0x83b3, 0x83cb, 0x83e4, 0x83f4, 0x8405, 0x8415, 0x8426, 0x8437, + 0x8449, 0x845a, 0x846c, 0x847e, 0x848f, 0x84a1, 0x84b2, 0x84c4, + 0x84d6, 0x84e8, 0x84fb, 0x850d, 0x8520, 0x8532, 0x8543, 0x8555, + 0x8566, 0x8578, 0x8589, 0x859a, 0x85ac, 0x85bd, 0x85cf, 0x85e0, + 0x85f1, 0x8602, 0x8613, 0x8624, 0x8636, 0x8648, 0x8659, 0x866a, + // Entry 4CC0 - 4CFF + 0x867f, 0x8693, 0x86a8, 0x86bc, 0x86d1, 0x86ed, 0x870a, 0x871e, + 0x8733, 0x8747, 0x875c, 0x8774, 0x8789, 0x879d, 0x87b0, 0x87c2, + 0x87d6, 0x87e3, 0x87f7, 0x880c, 0x8821, 0x883a, 0x8853, 0x886c, + 0x8884, 0x88bc, 0x88f2, 0x8925, 0x895f, 0x8999, 0x89b9, 0x89e3, + 0x8a0d, 0x8a37, 0x8a64, 0x8a90, 0x8aba, 0x8aee, 0x8b23, 0x8b4a, + 0x8b6f, 0x8b95, 0x8baf, 0x8bcd, 0x8bec, 0x8bf9, 0x8c07, 0x8c14, + 0x8c22, 0x8c2f, 0x8c3d, 0x8c52, 0x8c68, 0x8c7d, 0x8c93, 0x8ca0, + 0x8cae, 0x8cbb, 0x8cc9, 0x8cd7, 0x8ce6, 0x8cf4, 0x8d03, 0x8d12, + // Entry 4D00 - 4D3F + 0x8d20, 0x8d2f, 0x8d3d, 0x8d4c, 0x8d5b, 0x8d6a, 0x8d7a, 0x8d89, + 0x8d99, 0x8da8, 0x8db6, 0x8dc5, 0x8dd3, 0x8de2, 0x8df0, 0x8dfe, + 0x8e0d, 0x8e1b, 0x8e2a, 0x8e38, 0x8e46, 0x8e54, 0x8e62, 0x8e70, + 0x8e7f, 0x8e8e, 0x8e9c, 0x8eaa, 0x8eb9, 0x8ecb, 0x8edc, 0x8eee, + 0x8eff, 0x8f11, 0x8f2a, 0x8f44, 0x8f5d, 0x8f77, 0x8f88, 0x8f9a, + 0x8fab, 0x8fbd, 0x8fcf, 0x8fe0, 0x8ff0, 0x9005, 0x900f, 0x9020, + 0x9036, 0x9044, 0x9053, 0x9061, 0x906f, 0x907f, 0x908e, 0x909d, + 0x90ab, 0x90bb, 0x90cb, 0x90da, 0x90f7, 0x910e, 0x9132, 0x9156, + // Entry 4D40 - 4D7F + 0x917a, 0x919f, 0x91cb, 0x91e3, 0x9210, 0x9225, 0x9248, 0x9272, + 0x92a3, 0x92b1, 0x92c0, 0x92ce, 0x92dd, 0x92eb, 0x92fa, 0x9308, + 0x9317, 0x9325, 0x9334, 0x9343, 0x9353, 0x9362, 0x9372, 0x9382, + 0x9391, 0x93a1, 0x93b0, 0x93c0, 0x93d0, 0x93e0, 0x93f1, 0x9401, + 0x9412, 0x9422, 0x9431, 0x9441, 0x9450, 0x9460, 0x946f, 0x947e, + 0x948e, 0x949d, 0x94ad, 0x94bc, 0x94cb, 0x94da, 0x94e9, 0x94f8, + 0x9508, 0x9517, 0x9526, 0x9536, 0x9549, 0x955b, 0x956e, 0x9580, + 0x9593, 0x95a5, 0x95b8, 0x95ca, 0x95dd, 0x95ef, 0x9602, 0x9613, + // Entry 4D80 - 4DBF + 0x9623, 0x9633, 0x9642, 0x9651, 0x9662, 0x9672, 0x9682, 0x9691, + 0x96a2, 0x96b3, 0x96c3, 0x96d1, 0x96e0, 0x96ef, 0x96fd, 0x970b, + 0x9723, 0x9731, 0x9740, 0x974e, 0x975c, 0x976a, 0x9779, 0x9788, + 0x9796, 0x97a4, 0x97b2, 0x97c1, 0x97cf, 0x97dc, 0x97ea, 0x97f9, + 0x9807, 0x981f, 0x982e, 0x983d, 0x984c, 0x9869, 0x9886, 0x98ac, + 0x98bd, 0x98cf, 0x98e0, 0x98f2, 0x9903, 0x9915, 0x9926, 0x9938, + 0x9949, 0x995b, 0x996d, 0x997d, 0x998c, 0x999a, 0x99a8, 0x99b8, + 0x99c7, 0x99d6, 0x99e4, 0x99f4, 0x9a04, 0x9a13, 0x9a22, 0x9a34, + // Entry 4DC0 - 4DFF + 0x9a4b, 0x9a5c, 0x9a6b, 0x9a79, 0x9a98, 0x9ab4, 0x9ad1, 0x9aee, + 0x9b0b, 0x9b28, 0x9b45, 0x9b62, 0x9b7e, 0x9b9a, 0x9bb8, 0x9bd5, + 0x9bf2, 0x9c10, 0x9c2e, 0x9c4b, 0x9c69, 0x9c87, 0x9ca5, 0x9cc4, + 0x9ce1, 0x9cfe, 0x9d1b, 0x9d38, 0x9d55, 0x9d74, 0x9d93, 0x9db2, + 0x9dd0, 0x9def, 0x9e0d, 0x9e2c, 0x9e49, 0x9e63, 0x9e7e, 0x9e99, + 0x9eb4, 0x9ecf, 0x9eea, 0x9f05, 0x9f1f, 0x9f39, 0x9f55, 0x9f70, + 0x9f8b, 0x9fa7, 0x9fc3, 0x9fde, 0x9ffa, 0xa016, 0xa032, 0xa04f, + 0xa06a, 0xa085, 0xa0a0, 0xa0bb, 0xa0d6, 0xa0f3, 0xa110, 0xa12d, + // Entry 4E00 - 4E3F + 0xa149, 0xa166, 0xa182, 0xa19f, 0xa1b5, 0xa1ca, 0xa1df, 0xa1f6, + 0xa20c, 0xa222, 0xa237, 0xa24e, 0xa265, 0xa27b, 0xa291, 0xa2aa, + 0xa2c3, 0xa2db, 0xa2f3, 0xa30b, 0xa325, 0xa33e, 0xa357, 0xa365, + 0xa37a, 0xa38f, 0xa3a4, 0xa3b9, 0xa3ce, 0xa3e3, 0xa3f8, 0xa40e, + 0xa423, 0xa438, 0xa44e, 0xa463, 0xa478, 0xa48d, 0xa4a2, 0xa4b8, + 0xa4cd, 0xa4e3, 0xa4f8, 0xa50d, 0xa523, 0xa537, 0xa54b, 0xa55f, + 0xa573, 0xa587, 0xa59c, 0xa5b1, 0xa5cb, 0xa5e5, 0xa5ff, 0xa619, + 0xa633, 0xa64d, 0xa667, 0xa682, 0xa69c, 0xa6b8, 0xa6cf, 0xa6ee, + // Entry 4E40 - 4E7F + 0xa710, 0xa72d, 0xa752, 0xa76e, 0xa785, 0xa7a7, 0xa7c4, 0xa7de, + 0xa7fe, 0xa823, 0xa843, 0xa864, 0xa880, 0xa898, 0xa8bf, 0xa8e1, + 0xa8ff, 0xa911, 0xa924, 0xa936, 0xa949, 0xa95b, 0xa96e, 0xa988, + 0xa9a3, 0xa9bd, 0xa9cf, 0xa9e2, 0xa9f4, 0xaa07, 0xaa1a, 0xaa2e, + 0xaa41, 0xaa55, 0xaa69, 0xaa7c, 0xaa90, 0xaaa3, 0xaab7, 0xaacb, + 0xaadf, 0xaaf4, 0xab08, 0xab1d, 0xab31, 0xab44, 0xab58, 0xab6b, + 0xab7f, 0xab92, 0xaba5, 0xabb9, 0xabcc, 0xabe0, 0xabf3, 0xac06, + 0xac19, 0xac2c, 0xac3f, 0xac53, 0xac67, 0xac7a, 0xac8d, 0xaca4, + // Entry 4E80 - 4EBF + 0xacba, 0xacd1, 0xace7, 0xacfe, 0xad1c, 0xad3b, 0xad59, 0xad6f, + 0xad86, 0xad9c, 0xadb3, 0xadcd, 0xade4, 0xadfa, 0xae0f, 0xae26, + 0xae35, 0xae4b, 0xae63, 0xae79, 0xae8f, 0xaea3, 0xaeb6, 0xaec9, + 0xaede, 0xaef2, 0xaf06, 0xaf19, 0xaf2e, 0xaf43, 0xaf57, 0xaf6b, + 0xaf7f, 0xaf95, 0xafaa, 0xafbf, 0xafd3, 0xafe9, 0xafff, 0xb014, + 0xb028, 0xb03f, 0xb056, 0xb06c, 0xb082, 0xb098, 0xb0b0, 0xb0c7, + 0xb0de, 0xb0fa, 0xb10b, 0xb11c, 0xb12d, 0xb13f, 0xb150, 0xb162, + 0xb173, 0xb185, 0xb196, 0xb1a8, 0xb1b9, 0xb1cb, 0xb1dc, 0xb1ed, + // Entry 4EC0 - 4EFF + 0xb1fe, 0xb210, 0xb221, 0xb232, 0xb244, 0xb257, 0xb269, 0xb27a, + 0xb28c, 0xb29d, 0xb2ae, 0xb2bf, 0xb2d0, 0xb2e1, 0xb2f3, 0xb304, + 0xb315, 0xb325, 0xb340, 0xb35c, 0xb377, 0xb393, 0xb3ae, 0xb3ca, + 0xb3e5, 0xb401, 0xb41c, 0xb438, 0xb453, 0xb46e, 0xb489, 0xb4a5, + 0xb4c0, 0xb4db, 0xb4f7, 0xb514, 0xb530, 0xb54b, 0xb567, 0xb582, + 0xb59d, 0xb5b8, 0xb5d3, 0xb5ef, 0xb60a, 0xb625, 0xb63f, 0xb654, + 0xb668, 0xb67c, 0xb690, 0xb6a4, 0xb6b9, 0xb6d1, 0xb6e1, 0xb6f9, + 0xb713, 0xb733, 0xb74c, 0xb766, 0xb787, 0xb7a2, 0xb7bc, 0xb7cd, + // Entry 4F00 - 4F3F + 0xb7de, 0xb7fa, 0xb81b, 0xb836, 0xb857, 0xb871, 0xb891, 0xb8ad, + 0xb8ca, 0xb8e7, 0xb90e, 0xb924, 0xb936, 0xb954, 0xb976, 0xb999, + 0xb9b6, 0xb9d3, 0xb9e4, 0xb9f5, 0xba12, 0xba39, 0xba4a, 0xba64, + 0xba80, 0xba9c, 0xbab6, 0xbad2, 0xbaec, 0xbb07, 0xbb22, 0xbb35, + 0xbb49, 0xbb5c, 0xbb79, 0xbb8a, 0xbba3, 0xbbc0, 0xbbf1, 0xbc14, + 0xbc28, 0xbc3b, 0xbc4e, 0xbc6b, 0xbc7f, 0xbc93, 0xbca5, 0xbcc1, + 0xbcdd, 0xbd1a, 0xbd3e, 0xbd81, 0xbd94, 0xbda9, 0xbdba, 0xbdcc, + 0xbddf, 0xbdf4, 0xbe06, 0xbe21, 0xbe35, 0xbe47, 0xbe5b, 0xbe6c, + // Entry 4F40 - 4F7F + 0xbe85, 0xbea0, 0xbec0, 0xbed1, 0xbeed, 0xbf09, 0xbf26, 0xbf3a, + 0xbf59, 0xbf6b, 0xbf7e, 0xbf8f, 0xbfa1, 0xbfcc, 0xbff0, 0xc015, + 0xc037, 0xc059, 0xc085, 0xc0a7, 0xc0cb, 0xc0ee, 0xc110, 0xc132, + 0xc15c, 0xc17f, 0xc1a1, 0xc1c3, 0xc1f0, 0xc213, 0xc235, 0xc261, + 0xc283, 0xc2a7, 0xc2d3, 0xc2f6, 0xc308, 0xc31a, 0xc32e, 0xc342, + 0xc353, 0xc365, 0xc377, 0xc393, 0xc3a6, 0xc3b8, 0xc3dd, 0xc3f0, + 0xc401, 0xc41a, 0xc430, 0xc449, 0xc45b, 0xc478, 0xc48b, 0xc49d, + 0xc4b1, 0xc4c3, 0xc4d5, 0xc4e8, 0xc500, 0xc51d, 0xc530, 0xc543, + // Entry 4F80 - 4FBF + 0xc553, 0xc56d, 0xc591, 0xc5a2, 0xc5cb, 0xc5e6, 0xc600, 0xc61b, + 0xc636, 0xc64f, 0xc662, 0xc675, 0xc686, 0xc697, 0xc6b3, 0xc6d4, + 0xc6ee, 0xc70b, 0xc728, 0xc741, 0xc754, 0xc768, 0xc77b, 0xc78e, + 0xc7a9, 0xc7cd, 0xc7fb, 0xc817, 0xc834, 0xc857, 0xc87f, 0xc89b, + 0xc8bc, 0xc8de, 0xc8fe, 0xc926, 0xc943, 0xc95f, 0xc986, 0xc9a2, + 0xc9be, 0xc9da, 0xc9f6, 0xca07, 0xca1d, 0xca2f, 0xca59, 0xca7b, + 0xca9e, 0xcac8, 0xcae3, 0xcaff, 0xcb25, 0xcb41, 0xcb65, 0xcb81, + 0xcba5, 0xcbc0, 0xcbdb, 0xcc01, 0xcc1d, 0xcc38, 0xcc5b, 0xcc76, + // Entry 4FC0 - 4FFF + 0xcca1, 0xccc3, 0xccdf, 0xccfa, 0xcd16, 0xcd39, 0xcd5e, 0xcd8b, + 0xcda7, 0xcdcb, 0xcdee, 0xce0b, 0xce2c, 0xce59, 0xce75, 0xce94, + 0xceb0, 0xced5, 0xcef9, 0xcf14, 0xcf37, 0xcf52, 0xcf6e, 0xcf93, + 0xcfae, 0xcfca, 0xcfe6, 0xd002, 0xd027, 0xd044, 0xd060, 0xd07d, + 0xd097, 0xd0b2, 0xd0d5, 0xd0f0, 0xd103, 0xd124, 0xd136, 0xd15e, + 0xd170, 0xd19c, 0xd1b0, 0xd1c2, 0xd1d4, 0xd1e7, 0xd1ff, 0xd21c, + 0xd23d, 0xd24f, 0xd262, 0xd277, 0xd28d, 0xd2ad, 0xd2be, 0xd2d7, + 0xd2f0, 0xd30d, 0xd31f, 0xd33a, 0xd359, 0xd36d, 0xd380, 0xd398, + // Entry 5000 - 503F + 0xd3ab, 0xd3cf, 0xd3f2, 0xd40f, 0xd434, 0xd450, 0xd464, 0xd477, + 0xd498, 0xd4b5, 0xd4d3, 0xd4eb, 0xd4fc, 0xd519, 0xd52b, 0xd547, + 0xd572, 0xd58e, 0xd5b4, 0xd5cb, 0xd5dd, 0xd600, 0xd61c, 0xd63d, + 0xd64f, 0xd661, 0xd67d, 0xd68f, 0xd6a2, 0xd6b6, 0xd6cb, 0xd6dc, + 0xd6f2, 0xd708, 0xd71a, 0xd72b, 0xd746, 0xd762, 0xd77d, 0xd799, + 0xd7b4, 0xd7cf, 0xd7ea, 0xd805, 0xd81e, 0xd82f, 0xd842, 0xd85e, + 0xd87b, 0xd89b, 0xd8b9, 0xd8d5, 0xd8e8, 0xd8f8, 0xd90a, 0xd91b, + 0xd92e, 0xd94f, 0xd974, 0xd985, 0xd997, 0xd9ad, 0xd9c2, 0xd9f7, + // Entry 5040 - 507F + 0xda0e, 0xda1f, 0xda40, 0xda52, 0xda63, 0xda7f, 0xda9c, 0xdab9, + 0xdad2, 0xdae5, 0xdaf6, 0xdb07, 0xdb19, 0xdb2a, 0xdb43, 0xdb5d, + 0xdb80, 0xdb9c, 0xdbb7, 0xdbd4, 0xdbef, 0xdc09, 0xdc26, 0xdc42, + 0xdc5c, 0xdc77, 0xdc98, 0xdcb3, 0xdcdf, 0xdcf9, 0xdd15, 0xdd3a, + 0xdd64, 0xdd7e, 0xdd9a, 0xddb5, 0xddcf, 0xddea, 0xde04, 0xde1f, + 0xde39, 0xde53, 0xde6d, 0xde8f, 0xdeb1, 0xded3, 0xdeed, 0xdf12, + 0xdf2c, 0xdf47, 0xdf61, 0xdf7b, 0xdf95, 0xdfb0, 0xdfcb, 0xdfe6, + 0xe002, 0xe01d, 0xe038, 0xe055, 0xe070, 0xe089, 0xe0a3, 0xe0bd, + // Entry 5080 - 50BF + 0xe0e2, 0xe0fd, 0xe117, 0xe129, 0xe148, 0xe15a, 0xe16d, 0xe180, + 0xe193, 0xe1a6, 0xe1c3, 0xe1d5, 0xe1f6, 0xe208, 0xe224, 0xe243, + 0xe256, 0xe269, 0xe27e, 0xe2b4, 0xe2f6, 0xe30a, 0xe31b, 0xe336, + 0xe34f, 0xe369, 0xe37b, 0xe38d, 0xe3a1, 0xe3b4, 0xe3c9, 0xe3ea, + 0xe3fb, 0xe435, 0xe447, 0xe459, 0xe478, 0xe48a, 0xe49c, 0xe4b3, + 0xe4c5, 0xe4d7, 0xe4f6, 0xe50b, 0xe520, 0xe531, 0xe545, 0xe561, + 0xe58d, 0xe5b2, 0xe5d7, 0xe5f4, 0xe611, 0xe639, 0xe657, 0xe674, + 0xe692, 0xe6af, 0xe6cc, 0xe6ea, 0xe708, 0xe72f, 0xe74c, 0xe76a, + // Entry 50C0 - 50FF + 0xe791, 0xe7b4, 0xe7d1, 0xe7f6, 0xe81b, 0xe838, 0xe856, 0xe874, + 0xe892, 0xe8bf, 0xe8df, 0xe8fe, 0xe91b, 0xe939, 0xe956, 0xe97b, + 0xe99a, 0xe9b7, 0xe9de, 0xea13, 0xea42, 0xea61, 0xea8a, 0xeaa8, + 0xeac6, 0xeae5, 0xeb19, 0xeb35, 0xeb58, 0xeb82, 0xeba8, 0xebc5, + 0xebe3, 0xebff, 0xec13, 0xec31, 0xec58, 0xec71, 0xec9e, 0xecb3, + 0xecc5, 0xece1, 0xecf3, 0xed0f, 0xed33, 0xed44, 0xed56, 0xed6b, + 0xed7e, 0xed8f, 0xedaa, 0xedbc, 0xedd7, 0xedf3, 0xee10, 0xee32, + 0xee54, 0xee79, 0xee94, 0xeeb1, 0xeece, 0xeef4, 0xef0f, 0xef33, + // Entry 5100 - 513F + 0xef51, 0xef74, 0xef8f, 0xefaa, 0xefce, 0xeff3, 0xf010, 0xf027, + 0xf046, 0xf065, 0xf07f, 0xf099, 0xf0ab, 0xf0bf, 0xf0de, 0xf101, + 0xf11d, 0xf12f, 0xf141, 0xf153, 0xf16e, 0xf196, 0xf1a7, 0xf1c3, + 0xf1d9, 0xf1eb, 0xf1fd, 0xf20f, 0xf222, 0xf236, 0xf247, 0xf259, + 0xf26a, 0xf27c, 0xf28d, 0xf2a6, 0xf2b8, 0xf2cf, 0xf2e4, 0xf2f9, + 0xf30c, 0xf327, 0xf344, 0xf360, 0xf37d, 0xf3aa, 0xf3cb, 0xf3df, + 0xf3fb, 0xf41f, 0xf43c, 0xf455, 0xf466, 0xf478, 0xf48b, 0xf4a7, + 0xf4c9, 0xf4ea, 0xf4fe, 0xf518, 0xf52a, 0xf53d, 0xf54e, 0xf567, + // Entry 5140 - 517F + 0xf581, 0xf59a, 0xf5ab, 0xf5c4, 0xf5d6, 0xf5e8, 0xf60a, 0xf635, + 0xf64a, 0xf668, 0xf687, 0xf6af, 0xf6ce, 0xf6fb, 0xf719, 0xf738, + 0xf757, 0xf780, 0xf7a8, 0xf7d9, 0xf800, 0xf81f, 0xf833, 0xf844, + 0xf857, 0xf869, 0xf88b, 0xf8ae, 0xf8d0, 0xf90b, 0xf92d, 0xf944, + 0xf95f, 0xf97e, 0xf9ae, 0xf9c2, 0xf9e7, 0xfa08, 0xfa2a, 0xfa4c, + 0xfa73, 0xfa96, 0xfab7, 0xfad8, 0xfafc, 0xfb1d, 0xfb41, 0xfb67, + 0xfb78, 0xfb8a, 0xfb9c, 0xfbae, 0xfbc2, 0xfbd3, 0xfbec, 0xfc06, + 0xfc20, 0xfc3a, 0xfc53, 0xfc6c, 0xfc86, 0xfc9f, 0xfcb9, 0xfcd6, + // Entry 5180 - 51BF + 0xfcea, 0xfd08, 0xfd25, 0xfd42, 0xfd65, 0xfd76, 0xfd88, 0xfd99, + 0xfdaa, 0xfdbb, 0xfdd5, 0xfde7, 0xfe01, 0xfe1c, 0xfe38, 0xfe53, + 0xfe6f, 0xfe8b, 0xfea7, 0xfec2, 0xfede, 0xfefa, 0xff17, 0xff33, + 0xff4e, 0xff69, 0xff84, 0xff9f, 0xffbb, 0xffd6, 0xffed, 0xffff, + 0x0022, 0x0037, 0x0049, 0x005b, 0x006e, 0x0089, 0x00a6, 0x00c4, + 0x00e0, 0x00fe, 0x011b, 0x0136, 0x0158, 0x016b, 0x017f, 0x0193, + 0x01a5, 0x01ba, 0x01ef, 0x0224, 0x0238, 0x024b, 0x025f, 0x0274, + 0x028b, 0x029e, 0x02b9, 0x02d5, 0x02e8, 0x0303, 0x0320, 0x033f, + // Entry 51C0 - 51FF + 0x035c, 0x0379, 0x0396, 0x03b8, 0x03d8, 0x03f5, 0x0412, 0x042f, + 0x0444, 0x0457, 0x046f, 0x0499, 0x04ad, 0x04bf, 0x04e3, 0x04f6, + 0x050b, 0x051c, 0x0532, 0x0544, 0x0557, 0x0579, 0x058c, 0x05a0, + 0x05b1, 0x05ca, 0x05dc, 0x05ef, 0x0603, 0x0615, 0x062a, 0x063c, + 0x064f, 0x0660, 0x067a, 0x0694, 0x06ae, 0x06c4, 0x06d6, 0x070b, + 0x0725, 0x0737, 0x0752, 0x076e, 0x078a, 0x07a6, 0x07c3, 0x07de, + 0x07f1, 0x0803, 0x0814, 0x082a, 0x083b, 0x0851, 0x0863, 0x0875, + 0x0892, 0x08ad, 0x08e2, 0x08f3, 0x0906, 0x0918, 0x092a, 0x093c, + // Entry 5200 - 523F + 0x0962, 0x0972, 0x0986, 0x099a, 0x09c9, 0x09ed, 0x0a1f, 0x0a30, + 0x0a41, 0x0a52, 0x0a6a, 0x0a85, 0x0a9f, 0x0ac6, 0x0af2, 0x0b08, + 0x0b21, 0x0b44, 0x0b57, 0x0b68, 0x0b85, 0x0ba7, 0x0bc3, 0x0bdc, + 0x0bf0, 0x0c03, 0x0c23, 0x0c3f, 0x0c50, 0x0c66, 0x0c77, 0x0c94, + 0x0cad, 0x0cbf, 0x0ce1, 0x0d03, 0x0d1e, 0x0d39, 0x0d55, 0x0d70, + 0x0d94, 0x0db7, 0x0dc9, 0x0ddb, 0x0dee, 0x0e00, 0x0e1a, 0x0e39, + 0x0e55, 0x0e71, 0x0e8c, 0x0ea8, 0x0eca, 0x0ee6, 0x0f01, 0x0f1c, + 0x0f38, 0x0f53, 0x0f6f, 0x0f8a, 0x0fa6, 0x0fc2, 0x0fdd, 0x0ff9, + // Entry 5240 - 527F + 0x1016, 0x1031, 0x1054, 0x106f, 0x108d, 0x10a1, 0x10bd, 0x10cf, + 0x10e9, 0x1104, 0x1120, 0x113d, 0x1150, 0x1163, 0x1178, 0x118c, + 0x119e, 0x11bd, 0x11cf, 0x11e0, 0x11f6, 0x1219, 0x122b, 0x123e, + 0x1250, 0x1261, 0x127a, 0x128c, 0x129e, 0x12ba, 0x12cc, 0x12df, + 0x12f0, 0x1302, 0x131c, 0x1330, 0x1342, 0x135c, 0x1377, 0x1391, + 0x13ae, 0x13da, 0x13ed, 0x1409, 0x1425, 0x1442, 0x145f, 0x148a, + 0x14a7, 0x14ba, 0x14cc, 0x14df, 0x14fc, 0x1518, 0x1534, 0x154f, + 0x1574, 0x158f, 0x15a9, 0x15c5, 0x15df, 0x15fa, 0x1617, 0x163b, + // Entry 5280 - 52BF + 0x1661, 0x167d, 0x1690, 0x16ad, 0x16bf, 0x16d1, 0x16e4, 0x1703, + 0x1721, 0x174b, 0x1768, 0x177b, 0x179c, 0x17ae, 0x17c8, 0x17da, + 0x17f8, 0x1818, 0x1837, 0x1856, 0x1874, 0x1894, 0x18b4, 0x18d3, + 0x18f4, 0x1914, 0x1934, 0x1953, 0x1974, 0x1995, 0x19b5, 0x19d2, + 0x19ef, 0x1a0b, 0x1a29, 0x1a47, 0x1a64, 0x1a84, 0x1aa4, 0x1ac6, + 0x1ae7, 0x1b08, 0x1b28, 0x1b4a, 0x1b6c, 0x1b8d, 0x1bad, 0x1bcd, + 0x1bef, 0x1c10, 0x1c31, 0x1c51, 0x1c73, 0x1ca2, 0x1cc3, 0x1ce4, + 0x1d04, 0x1d26, 0x1d48, 0x1d69, 0x1d89, 0x1da9, 0x1dcb, 0x1dfa, + // Entry 52C0 - 52FF + 0x1e1b, 0x1e3c, 0x1e6c, 0x1e9b, 0x1eba, 0x1ed9, 0x1efa, 0x1f28, + 0x1f48, 0x1f68, 0x1f97, 0x1fc6, 0x1ff4, 0x2023, 0x2053, 0x2083, + 0x20af, 0x20de, 0x210e, 0x213e, 0x216c, 0x219b, 0x21ca, 0x21fa, + 0x222a, 0x225b, 0x227e, 0x22a3, 0x22c7, 0x22eb, 0x230e, 0x232d, + 0x234c, 0x236d, 0x238d, 0x23ba, 0x23da, 0x2407, 0x2427, 0x2447, + 0x2467, 0x2487, 0x24ac, 0x24d2, 0x24f9, 0x2528, 0x2558, 0x257d, + 0x25a3, 0x25d0, 0x25ff, 0x2625, 0x2648, 0x2670, 0x2699, 0x26bd, + 0x26e1, 0x270b, 0x2735, 0x275e, 0x2789, 0x27b4, 0x27de, 0x2812, + // Entry 5300 - 533F + 0x283b, 0x2864, 0x2890, 0x28bd, 0x28dd, 0x28f9, 0x2915, 0x2937, + 0x2956, 0x2974, 0x2992, 0x29b5, 0x29d1, 0x29ed, 0x2a09, 0x2a27, + 0x2a43, 0x2a61, 0x2a7d, 0x2aa1, 0x2abd, 0x2ad9, 0x2af7, 0x2b12, + 0x2b2d, 0x2b4f, 0x2b6c, 0x2b87, 0x2ba2, 0x2bc3, 0x2be2, 0x2bfe, + 0x2c1d, 0x2c48, 0x2c68, 0x2c84, 0x2caa, 0x2cd0, 0x2ced, 0x2d09, + 0x2d24, 0x2d3f, 0x2d5a, 0x2d76, 0x2d96, 0x2db1, 0x2dcc, 0x2de2, + 0x2e03, 0x2e28, 0x2e4c, 0x2e76, 0x2e9a, 0x2ebf, 0x2ee3, 0x2f08, + 0x2f2c, 0x2f48, 0x2f67, 0x2f88, 0x2fb3, 0x2fdc, 0x2ff9, 0x3014, + // Entry 5340 - 537F + 0x3038, 0x305c, 0x307e, 0x30a9, 0x30c5, 0x30eb, 0x3107, 0x3124, + 0x313f, 0x3162, 0x3185, 0x31a2, 0x31bf, 0x31e9, 0x3207, 0x3233, + 0x3254, 0x327b, 0x3296, 0x32c3, 0x32dd, 0x32f7, 0x3314, 0x332e, + 0x3353, 0x3369, 0x337f, 0x3395, 0x33ab, 0x33c1, 0x33d7, 0x33ed, + 0x3415, 0x342b, 0x344e, 0x3464, 0x347a, 0x3490, 0x34a6, 0x34bc, + 0x34d2, 0x34e8, 0x34fe, 0x3514, 0x352a, 0x3540, 0x3556, 0x356c, + 0x3582, 0x3598, 0x35ae, 0x35c4, 0x35da, 0x35f0, 0x360f, 0x362f, + 0x3658, 0x368a, 0x36b1, 0x36c7, 0x36dd, 0x36f3, 0x3709, 0x371f, + // Entry 5380 - 53BF + 0x3735, 0x374b, 0x3761, 0x3777, 0x378d, 0x37a3, 0x37c3, 0x37e3, + 0x380e, 0x382e, 0x384d, 0x386d, 0x388c, 0x38ab, 0x38ca, 0x38ec, + 0x3902, 0x3918, 0x3938, 0x3957, 0x3977, 0x399c, 0x39bb, 0x39ed, + 0x3a17, 0x3a36, 0x3a58, 0x3a6e, 0x3a84, 0x3aa5, 0x3ac2, 0x3ade, + 0x3afa, 0x3b28, 0x3b45, 0x3b5f, 0x3b85, 0x3bac, 0x3bd0, 0x3bf0, + 0x3c0f, 0x3c2d, 0x3c4e, 0x3c71, 0x3c91, 0x3cb9, 0x3cd6, 0x3cfa, + 0x3d1b, 0x3d3b, 0x3d56, 0x3d7a, 0x3d97, 0x3daf, 0x3dca, 0x3de6, + 0x3e02, 0x3e1d, 0x3e42, 0x3e66, 0x3e82, 0x3e9e, 0x3ec0, 0x3ee3, + // Entry 53C0 - 53FF + 0x3efe, 0x3f19, 0x3f37, 0x3f57, 0x3f73, 0x3f85, 0x3fa7, 0x3fcf, + 0x3fe7, 0x3fff, 0x4017, 0x402f, 0x4047, 0x4060, 0x4078, 0x4091, + 0x40aa, 0x40c2, 0x40da, 0x40f2, 0x410a, 0x4122, 0x413a, 0x4152, + 0x416a, 0x4183, 0x419b, 0x41b3, 0x41cb, 0x41e4, 0x41fc, 0x4214, + 0x422c, 0x4244, 0x425c, 0x4274, 0x428c, 0x42a4, 0x42bc, 0x42d4, + 0x42ec, 0x4304, 0x431c, 0x4334, 0x434c, 0x4365, 0x437d, 0x4395, + 0x43ad, 0x43c5, 0x43dd, 0x43f5, 0x440d, 0x4425, 0x443e, 0x4456, + 0x446e, 0x4487, 0x449f, 0x44b8, 0x44d0, 0x44e8, 0x4501, 0x4519, + // Entry 5400 - 543F + 0x4531, 0x4549, 0x4561, 0x4579, 0x4591, 0x45a9, 0x45c1, 0x45d9, + 0x45f1, 0x4609, 0x4621, 0x4639, 0x4651, 0x4669, 0x4681, 0x4699, + 0x46b1, 0x46c9, 0x46e1, 0x46f9, 0x4711, 0x4729, 0x4741, 0x4759, + 0x4771, 0x4789, 0x47a1, 0x47b9, 0x47d1, 0x47ea, 0x4802, 0x481a, + 0x4832, 0x484a, 0x4862, 0x487a, 0x4893, 0x48ac, 0x48c5, 0x48dd, + 0x48f5, 0x490d, 0x4925, 0x493d, 0x4955, 0x496d, 0x4985, 0x499e, + 0x49b6, 0x49ce, 0x49e6, 0x49fe, 0x4a16, 0x4a2e, 0x4a46, 0x4a5e, + 0x4a76, 0x4a8e, 0x4aa6, 0x4abe, 0x4ad6, 0x4aee, 0x4b06, 0x4b1e, + // Entry 5440 - 547F + 0x4b36, 0x4b4e, 0x4b66, 0x4b7e, 0x4b96, 0x4bae, 0x4bc7, 0x4bdf, + 0x4bf7, 0x4c0f, 0x4c27, 0x4c3f, 0x4c57, 0x4c6f, 0x4c87, 0x4c9f, + 0x4cb7, 0x4ccf, 0x4ce7, 0x4cff, 0x4d17, 0x4d2f, 0x4d47, 0x4d5f, + 0x4d77, 0x4d8f, 0x4da8, 0x4dc0, 0x4dd8, 0x4df0, 0x4e08, 0x4e21, + 0x4e39, 0x4e51, 0x4e69, 0x4e82, 0x4e9a, 0x4eb2, 0x4eca, 0x4ee2, + 0x4efa, 0x4f12, 0x4f2a, 0x4f42, 0x4f5a, 0x4f72, 0x4f8a, 0x4fa2, + 0x4fbb, 0x4fd3, 0x4feb, 0x5004, 0x501c, 0x5034, 0x504d, 0x5066, + 0x507f, 0x5098, 0x50b1, 0x50ca, 0x50e3, 0x50fc, 0x5115, 0x512d, + // Entry 5480 - 54BF + 0x5145, 0x515e, 0x5176, 0x518e, 0x51a7, 0x51bf, 0x51d7, 0x51ef, + 0x5207, 0x521f, 0x5237, 0x524f, 0x5267, 0x527f, 0x5297, 0x52af, + 0x52c7, 0x52df, 0x52f8, 0x5311, 0x532a, 0x5343, 0x535c, 0x5375, + 0x538e, 0x53a7, 0x53bf, 0x53d7, 0x53ef, 0x5407, 0x541f, 0x5437, + 0x544f, 0x5467, 0x5480, 0x5498, 0x54b1, 0x54c9, 0x54e1, 0x54f9, + 0x5511, 0x5529, 0x5541, 0x5559, 0x5572, 0x558a, 0x55a3, 0x55bb, + 0x55d3, 0x55eb, 0x5604, 0x561c, 0x5634, 0x564c, 0x5664, 0x567c, + 0x5694, 0x56ac, 0x56c4, 0x56dd, 0x56f5, 0x570d, 0x5725, 0x573d, + // Entry 54C0 - 54FF + 0x5755, 0x576d, 0x5786, 0x579e, 0x57b6, 0x57ce, 0x57e6, 0x57ff, + 0x5817, 0x582f, 0x5847, 0x585f, 0x5877, 0x588f, 0x58a7, 0x58bf, + 0x58d7, 0x58ef, 0x5907, 0x591f, 0x5938, 0x5950, 0x5968, 0x5980, + 0x5998, 0x59b0, 0x59c8, 0x59e0, 0x59f8, 0x5a11, 0x5a29, 0x5a41, + 0x5a59, 0x5a71, 0x5a89, 0x5aa1, 0x5ab9, 0x5ad1, 0x5ae9, 0x5b01, + 0x5b1a, 0x5b32, 0x5b4a, 0x5b62, 0x5b7a, 0x5b92, 0x5baa, 0x5bc3, + 0x5bdb, 0x5bf4, 0x5c0c, 0x5c24, 0x5c3c, 0x5c54, 0x5c6c, 0x5c84, + 0x5c9c, 0x5cb5, 0x5ccd, 0x5ce6, 0x5cfe, 0x5d17, 0x5d2f, 0x5d47, + // Entry 5500 - 553F + 0x5d5f, 0x5d77, 0x5d90, 0x5da9, 0x5dc2, 0x5dda, 0x5df2, 0x5e0a, + 0x5e22, 0x5e3a, 0x5e52, 0x5e6a, 0x5e82, 0x5e9b, 0x5eb3, 0x5ecc, + 0x5ee5, 0x5efd, 0x5f15, 0x5f2d, 0x5f45, 0x5f5e, 0x5f76, 0x5f8e, + 0x5fa6, 0x5fbe, 0x5fd6, 0x5fee, 0x6006, 0x601e, 0x6036, 0x604f, + 0x6067, 0x607f, 0x6097, 0x60af, 0x60c7, 0x60df, 0x60f8, 0x6110, + 0x6128, 0x6140, 0x6158, 0x6170, 0x6188, 0x61a0, 0x61b8, 0x61d0, + 0x61e8, 0x6201, 0x6219, 0x6232, 0x624a, 0x6262, 0x627a, 0x6292, + 0x62aa, 0x62c2, 0x62db, 0x62f3, 0x630b, 0x6324, 0x633c, 0x6354, + // Entry 5540 - 557F + 0x636c, 0x6384, 0x639c, 0x63b4, 0x63cc, 0x63e4, 0x63fc, 0x6414, + 0x642c, 0x6444, 0x645c, 0x6474, 0x648c, 0x64a5, 0x64bd, 0x64d5, + 0x64ed, 0x6505, 0x651d, 0x6535, 0x654d, 0x6566, 0x657e, 0x6596, + 0x65ae, 0x65c6, 0x65df, 0x65f7, 0x6610, 0x6628, 0x6641, 0x6659, + 0x6671, 0x6689, 0x66a1, 0x66b9, 0x66d1, 0x66e9, 0x6701, 0x6719, + 0x6731, 0x6749, 0x6761, 0x6779, 0x6791, 0x67aa, 0x67c2, 0x67da, + 0x67f2, 0x680a, 0x6823, 0x683b, 0x6853, 0x686b, 0x6884, 0x689d, + 0x68b5, 0x68cd, 0x68e6, 0x68fe, 0x6916, 0x692e, 0x6946, 0x695e, + // Entry 5580 - 55BF + 0x6976, 0x698e, 0x69a7, 0x69bf, 0x69d7, 0x69f0, 0x6a09, 0x6a22, + 0x6a3b, 0x6a54, 0x6a6d, 0x6a86, 0x6a9f, 0x6ab7, 0x6acf, 0x6ae7, + 0x6b00, 0x6b18, 0x6b31, 0x6b49, 0x6b62, 0x6b7a, 0x6b92, 0x6baa, + 0x6bc2, 0x6bda, 0x6bf3, 0x6c0b, 0x6c23, 0x6c3c, 0x6c54, 0x6c6c, + 0x6c84, 0x6c9c, 0x6cb5, 0x6ccd, 0x6ce5, 0x6cfd, 0x6d16, 0x6d2e, + 0x6d46, 0x6d5f, 0x6d78, 0x6d90, 0x6da8, 0x6dc0, 0x6dd8, 0x6df0, + 0x6e08, 0x6e20, 0x6e39, 0x6e51, 0x6e69, 0x6e81, 0x6e99, 0x6eb1, + 0x6ec9, 0x6ee1, 0x6ef9, 0x6f11, 0x6f29, 0x6f41, 0x6f59, 0x6f71, + // Entry 55C0 - 55FF + 0x6f89, 0x6fa1, 0x6fb9, 0x6fd1, 0x6fe9, 0x7001, 0x7019, 0x7031, + 0x7049, 0x7062, 0x707b, 0x7093, 0x70ab, 0x70c3, 0x70db, 0x70f3, + 0x710b, 0x7123, 0x713c, 0x7154, 0x716c, 0x7184, 0x719c, 0x71b4, + 0x71cc, 0x71e4, 0x71fc, 0x7215, 0x722d, 0x7246, 0x725e, 0x7277, + 0x728f, 0x72a7, 0x72c0, 0x72d8, 0x72f0, 0x7308, 0x7320, 0x7338, + 0x7351, 0x736a, 0x7383, 0x739c, 0x73b5, 0x73cf, 0x73e8, 0x7401, + 0x741a, 0x7433, 0x744c, 0x7465, 0x747e, 0x7497, 0x74b0, 0x74c9, + 0x74e2, 0x74fb, 0x7515, 0x752e, 0x7547, 0x7560, 0x7579, 0x7592, + // Entry 5600 - 563F + 0x75ab, 0x75c4, 0x75dd, 0x75f6, 0x760f, 0x7628, 0x7641, 0x765a, + 0x7674, 0x768d, 0x76a7, 0x76c0, 0x76d9, 0x76f2, 0x770b, 0x7724, + 0x773d, 0x7756, 0x7770, 0x7789, 0x77a2, 0x77bb, 0x77d4, 0x77ee, + 0x7806, 0x781f, 0x7837, 0x784f, 0x7867, 0x787f, 0x7898, 0x78b0, + 0x78c9, 0x78e2, 0x78fb, 0x7914, 0x792d, 0x7946, 0x795e, 0x7976, + 0x798e, 0x79a6, 0x79bf, 0x79d8, 0x79f1, 0x7a09, 0x7a21, 0x7a39, + 0x7a51, 0x7a69, 0x7a81, 0x7a99, 0x7ab1, 0x7ac9, 0x7ae2, 0x7afa, + 0x7b13, 0x7b2b, 0x7b43, 0x7b5b, 0x7b73, 0x7b8c, 0x7ba4, 0x7bbd, + // Entry 5640 - 567F + 0x7bd5, 0x7bed, 0x7c05, 0x7c1d, 0x7c36, 0x7c4e, 0x7c67, 0x7c7f, + 0x7c97, 0x7caf, 0x7cc8, 0x7ce0, 0x7cf8, 0x7d10, 0x7d29, 0x7d42, + 0x7d5b, 0x7d74, 0x7d8c, 0x7da4, 0x7dbc, 0x7dd4, 0x7dec, 0x7e04, + 0x7e1c, 0x7e34, 0x7e4c, 0x7e64, 0x7e7c, 0x7e94, 0x7eac, 0x7ec4, + 0x7edd, 0x7ef6, 0x7f0e, 0x7f26, 0x7f3f, 0x7f57, 0x7f6f, 0x7f88, + 0x7fa0, 0x7fb8, 0x7fd0, 0x7fe8, 0x8000, 0x8018, 0x8030, 0x8048, + 0x8060, 0x8078, 0x8090, 0x80a8, 0x80c0, 0x80d8, 0x80f0, 0x8108, + 0x8120, 0x8139, 0x8151, 0x816a, 0x8183, 0x819b, 0x81b3, 0x81cb, + // Entry 5680 - 56BF + 0x81e3, 0x81fb, 0x8213, 0x822b, 0x8244, 0x825c, 0x8274, 0x828c, + 0x82a4, 0x82bc, 0x82d4, 0x82ed, 0x8305, 0x831d, 0x8335, 0x834d, + 0x8365, 0x837d, 0x8395, 0x83ad, 0x83c5, 0x83dd, 0x83f5, 0x840d, + 0x8425, 0x843d, 0x8455, 0x846e, 0x8486, 0x849e, 0x84b6, 0x84ce, + 0x84e7, 0x84ff, 0x8517, 0x852f, 0x8547, 0x855f, 0x8577, 0x858f, + 0x85a7, 0x85c0, 0x85d9, 0x85f1, 0x8609, 0x8621, 0x863a, 0x8652, + 0x866a, 0x8682, 0x869a, 0x86b2, 0x86ca, 0x86e2, 0x86fa, 0x8712, + 0x872b, 0x8744, 0x875c, 0x8774, 0x878c, 0x87a4, 0x87bc, 0x87d4, + // Entry 56C0 - 56FF + 0x87ec, 0x8804, 0x881c, 0x8835, 0x884d, 0x8865, 0x887d, 0x8895, + 0x88ad, 0x88c5, 0x88dd, 0x88f5, 0x890d, 0x8925, 0x893d, 0x8955, + 0x896d, 0x8985, 0x899e, 0x89b6, 0x89ce, 0x89e6, 0x89fe, 0x8a17, + 0x8a2f, 0x8a48, 0x8a60, 0x8a79, 0x8a91, 0x8aa9, 0x8ac2, 0x8ada, + 0x8af2, 0x8b0a, 0x8b22, 0x8b3a, 0x8b53, 0x8b6b, 0x8b83, 0x8b9b, + 0x8bb3, 0x8bcb, 0x8be3, 0x8bfb, 0x8c13, 0x8c2b, 0x8c43, 0x8c5b, + 0x8c73, 0x8c8b, 0x8ca3, 0x8cbb, 0x8cd3, 0x8cec, 0x8d04, 0x8d1d, + 0x8d35, 0x8d4d, 0x8d65, 0x8d7d, 0x8d95, 0x8dad, 0x8dc5, 0x8ddd, + // Entry 5700 - 573F + 0x8df5, 0x8e0e, 0x8e27, 0x8e3f, 0x8e57, 0x8e6f, 0x8e87, 0x8e9f, + 0x8eb7, 0x8ecf, 0x8ee7, 0x8eff, 0x8f17, 0x8f2f, 0x8f47, 0x8f5f, + 0x8f77, 0x8f8f, 0x8fa7, 0x8fbf, 0x8fd8, 0x8ff0, 0x9008, 0x9020, + 0x9038, 0x9050, 0x9068, 0x9081, 0x9099, 0x90b1, 0x90c9, 0x90e2, + 0x90fa, 0x9112, 0x912a, 0x9142, 0x915a, 0x9172, 0x918a, 0x91a2, + 0x91ba, 0x91d2, 0x91ea, 0x9203, 0x921c, 0x9235, 0x924e, 0x9267, + 0x9280, 0x9299, 0x92b2, 0x92cb, 0x92e3, 0x92fc, 0x9314, 0x932c, + 0x9344, 0x935c, 0x9374, 0x938d, 0x93a6, 0x93be, 0x93d6, 0x93ee, + // Entry 5740 - 577F + 0x9406, 0x941f, 0x9438, 0x9451, 0x9469, 0x9482, 0x949b, 0x94b3, + 0x94cb, 0x94e3, 0x94fb, 0x9513, 0x952b, 0x9543, 0x955b, 0x9574, + 0x958d, 0x95a6, 0x95bf, 0x95d8, 0x95f1, 0x960a, 0x9623, 0x963c, + 0x9655, 0x966e, 0x9687, 0x969f, 0x96b7, 0x96cf, 0x96e8, 0x9700, + 0x9718, 0x9730, 0x9748, 0x9760, 0x9779, 0x9791, 0x97aa, 0x97c2, + 0x97db, 0x97f3, 0x980c, 0x9824, 0x983c, 0x9855, 0x986d, 0x9885, + 0x989d, 0x98b5, 0x98ce, 0x98e6, 0x98fe, 0x9916, 0x992f, 0x9947, + 0x995f, 0x9977, 0x9990, 0x99a8, 0x99c0, 0x99d8, 0x99f0, 0x9a08, + // Entry 5780 - 57BF + 0x9a20, 0x9a39, 0x9a51, 0x9a6a, 0x9a82, 0x9a9a, 0x9ab2, 0x9aca, + 0x9ae3, 0x9afb, 0x9b13, 0x9b2b, 0x9b44, 0x9b5c, 0x9b75, 0x9b8d, + 0x9ba5, 0x9bbd, 0x9bd5, 0x9bed, 0x9c05, 0x9c1e, 0x9c36, 0x9c4e, + 0x9c66, 0x9c7e, 0x9c96, 0x9caf, 0x9cc8, 0x9ce0, 0x9cf8, 0x9d11, + 0x9d29, 0x9d41, 0x9d5a, 0x9d72, 0x9d8b, 0x9da3, 0x9dbb, 0x9dd3, + 0x9deb, 0x9e03, 0x9e1b, 0x9e33, 0x9e4b, 0x9e63, 0x9e7c, 0x9e95, + 0x9eae, 0x9ec7, 0x9edf, 0x9ef8, 0x9f11, 0x9f29, 0x9f42, 0x9f5a, + 0x9f73, 0x9f8b, 0x9fa3, 0x9fbb, 0x9fd3, 0x9feb, 0xa003, 0xa01b, + // Entry 57C0 - 57FF + 0xa033, 0xa04b, 0xa063, 0xa07c, 0xa095, 0xa0ae, 0xa0c7, 0xa0e0, + 0xa0f9, 0xa112, 0xa12b, 0xa144, 0xa15c, 0xa175, 0xa18e, 0xa1a7, + 0xa1c0, 0xa1d9, 0xa1f2, 0xa20b, 0xa224, 0xa23d, 0xa256, 0xa26f, + 0xa288, 0xa2a1, 0xa2ba, 0xa2d3, 0xa2ed, 0xa307, 0xa320, 0xa339, + 0xa352, 0xa36b, 0xa384, 0xa39d, 0xa3b6, 0xa3cf, 0xa3e8, 0xa401, + 0xa41a, 0xa433, 0xa44c, 0xa465, 0xa47e, 0xa497, 0xa4b0, 0xa4c9, + 0xa4e2, 0xa4fb, 0xa514, 0xa52d, 0xa546, 0xa55f, 0xa578, 0xa591, + 0xa5aa, 0xa5c3, 0xa5dc, 0xa5f5, 0xa60e, 0xa627, 0xa640, 0xa659, + // Entry 5800 - 583F + 0xa672, 0xa68c, 0xa6a5, 0xa6be, 0xa6d7, 0xa6f0, 0xa709, 0xa722, + 0xa73b, 0xa754, 0xa76d, 0xa786, 0xa79f, 0xa7b8, 0xa7d1, 0xa7ea, + 0xa803, 0xa81c, 0xa836, 0xa84f, 0xa868, 0xa881, 0xa89a, 0xa8b3, + 0xa8cc, 0xa8e5, 0xa8fe, 0xa917, 0xa930, 0xa949, 0xa962, 0xa97b, + 0xa995, 0xa9ae, 0xa9c7, 0xa9e1, 0xa9fa, 0xaa13, 0xaa2c, 0xaa45, + 0xaa5f, 0xaa78, 0xaa92, 0xaaac, 0xaac5, 0xaade, 0xaaf7, 0xab10, + 0xab29, 0xab42, 0xab5b, 0xab74, 0xab8d, 0xaba6, 0xabbf, 0xabd8, + 0xabf1, 0xac0a, 0xac23, 0xac3c, 0xac55, 0xac6e, 0xac87, 0xaca0, + // Entry 5840 - 587F + 0xacba, 0xacd4, 0xacee, 0xad07, 0xad20, 0xad39, 0xad52, 0xad6b, + 0xad84, 0xad9d, 0xadb6, 0xadcf, 0xade8, 0xae01, 0xae1a, 0xae33, + 0xae4c, 0xae65, 0xae7e, 0xae97, 0xaeb0, 0xaec9, 0xaee2, 0xaefb, + 0xaf14, 0xaf2d, 0xaf46, 0xaf5f, 0xaf78, 0xaf91, 0xafaa, 0xafc3, + 0xafdc, 0xaff5, 0xb00f, 0xb028, 0xb042, 0xb05b, 0xb074, 0xb08e, + 0xb0a7, 0xb0c1, 0xb0da, 0xb0f4, 0xb10d, 0xb126, 0xb140, 0xb15a, + 0xb174, 0xb18d, 0xb1a7, 0xb1c1, 0xb1da, 0xb1f3, 0xb20d, 0xb227, + 0xb241, 0xb25a, 0xb273, 0xb28c, 0xb2a6, 0xb2c0, 0xb2d9, 0xb2f2, + // Entry 5880 - 58BF + 0xb30b, 0xb324, 0xb33d, 0xb357, 0xb370, 0xb389, 0xb3a2, 0xb3bb, + 0xb3d4, 0xb3ed, 0xb406, 0xb41f, 0xb438, 0xb451, 0xb46b, 0xb484, + 0xb49d, 0xb4b6, 0xb4cf, 0xb4e8, 0xb501, 0xb51a, 0xb533, 0xb54c, + 0xb565, 0xb57f, 0xb598, 0xb5b1, 0xb5ca, 0xb5e3, 0xb5fc, 0xb615, + 0xb62e, 0xb647, 0xb660, 0xb679, 0xb692, 0xb6ab, 0xb6c4, 0xb6dd, + 0xb6f6, 0xb70f, 0xb728, 0xb741, 0xb75a, 0xb773, 0xb78c, 0xb7a5, + 0xb7be, 0xb7d7, 0xb7f0, 0xb809, 0xb822, 0xb83b, 0xb854, 0xb86d, + 0xb886, 0xb89f, 0xb8b8, 0xb8d1, 0xb8ea, 0xb903, 0xb91c, 0xb935, + // Entry 58C0 - 58FF + 0xb94e, 0xb967, 0xb980, 0xb999, 0xb9b2, 0xb9cb, 0xb9e4, 0xb9fd, + 0xba16, 0xba2f, 0xba48, 0xba61, 0xba7a, 0xba93, 0xbaac, 0xbac5, + 0xbade, 0xbaf7, 0xbb10, 0xbb29, 0xbb42, 0xbb5b, 0xbb74, 0xbb8d, + 0xbba6, 0xbbbf, 0xbbd8, 0xbbf1, 0xbc0a, 0xbc24, 0xbc3e, 0xbc57, + 0xbc70, 0xbc89, 0xbca2, 0xbcbb, 0xbcd5, 0xbcee, 0xbd07, 0xbd21, + 0xbd3a, 0xbd53, 0xbd6c, 0xbd85, 0xbd9e, 0xbdb7, 0xbdd1, 0xbdea, + 0xbe04, 0xbe1d, 0xbe36, 0xbe4f, 0xbe68, 0xbe81, 0xbe9a, 0xbeb3, + 0xbecc, 0xbee5, 0xbefe, 0xbf17, 0xbf31, 0xbf4a, 0xbf63, 0xbf7c, + // Entry 5900 - 593F + 0xbf95, 0xbfae, 0xbfc7, 0xbfe0, 0xbff9, 0xc012, 0xc02b, 0xc044, + 0xc05d, 0xc076, 0xc08f, 0xc0a8, 0xc0c1, 0xc0da, 0xc0f3, 0xc10c, + 0xc125, 0xc13e, 0xc157, 0xc170, 0xc189, 0xc1a2, 0xc1bb, 0xc1d4, + 0xc1ed, 0xc206, 0xc21f, 0xc238, 0xc251, 0xc26a, 0xc283, 0xc29c, + 0xc2b5, 0xc2ce, 0xc2e7, 0xc300, 0xc319, 0xc333, 0xc34c, 0xc365, + 0xc37e, 0xc397, 0xc3b0, 0xc3c9, 0xc3e2, 0xc3fb, 0xc414, 0xc42d, + 0xc446, 0xc45f, 0xc478, 0xc491, 0xc4aa, 0xc4c3, 0xc4dc, 0xc4f5, + 0xc50e, 0xc527, 0xc540, 0xc559, 0xc573, 0xc58c, 0xc5a5, 0xc5be, + // Entry 5940 - 597F + 0xc5d7, 0xc5f0, 0xc60a, 0xc623, 0xc63c, 0xc655, 0xc66e, 0xc687, + 0xc6a1, 0xc6ba, 0xc6d3, 0xc6ec, 0xc705, 0xc71e, 0xc737, 0xc750, + 0xc769, 0xc782, 0xc79b, 0xc7b5, 0xc7ce, 0xc7e7, 0xc800, 0xc819, + 0xc832, 0xc84b, 0xc864, 0xc87d, 0xc896, 0xc8af, 0xc8c8, 0xc8e1, + 0xc8fa, 0xc913, 0xc92c, 0xc945, 0xc95e, 0xc977, 0xc990, 0xc9a9, + 0xc9c3, 0xc9dc, 0xc9f5, 0xca0f, 0xca29, 0xca43, 0xca5c, 0xca75, + 0xca8e, 0xcaa7, 0xcac1, 0xcadb, 0xcaf5, 0xcb0e, 0xcb27, 0xcb40, + 0xcb59, 0xcb72, 0xcb8b, 0xcba4, 0xcbbd, 0xcbd6, 0xcbef, 0xcc08, + // Entry 5980 - 59BF + 0xcc21, 0xcc3a, 0xcc53, 0xcc6c, 0xcc85, 0xcc9e, 0xccb7, 0xccd0, + 0xcce9, 0xcd02, 0xcd1b, 0xcd34, 0xcd4e, 0xcd67, 0xcd80, 0xcd99, + 0xcdb2, 0xcdcb, 0xcde5, 0xcdfe, 0xce17, 0xce30, 0xce49, 0xce63, + 0xce7c, 0xce95, 0xceae, 0xcec8, 0xcee1, 0xcefa, 0xcf13, 0xcf2c, + 0xcf45, 0xcf5e, 0xcf77, 0xcf90, 0xcfa9, 0xcfc2, 0xcfdc, 0xcff5, + 0xd017, 0xd031, 0xd04a, 0xd063, 0xd07c, 0xd096, 0xd0af, 0xd0c8, + 0xd0e1, 0xd0fa, 0xd113, 0xd12c, 0xd14b, 0xd164, 0xd17d, 0xd196, + 0xd1af, 0xd1c8, 0xd1e1, 0xd1fa, 0xd213, 0xd22c, 0xd245, 0xd25e, + // Entry 59C0 - 59FF + 0xd277, 0xd290, 0xd2a9, 0xd2c2, 0xd2db, 0xd308, 0xd334, 0xd34d, + 0xd366, 0xd37f, 0xd398, 0xd3b1, 0xd3ca, 0xd3e3, 0xd3fc, 0xd415, + 0xd42e, 0xd447, 0xd460, 0xd479, 0xd492, 0xd4ab, 0xd4c4, 0xd4dd, + 0xd4f6, 0xd50f, 0xd528, 0xd541, 0xd55a, 0xd573, 0xd58c, 0xd5a5, + 0xd5be, 0xd5d7, 0xd5f0, 0xd609, 0xd622, 0xd63b, 0xd654, 0xd66d, + 0xd686, 0xd69f, 0xd6b8, 0xd6d1, 0xd6ea, 0xd703, 0xd71c, 0xd736, + 0xd74f, 0xd768, 0xd781, 0xd79a, 0xd7b3, 0xd7cc, 0xd7e5, 0xd7ff, + 0xd818, 0xd831, 0xd84a, 0xd863, 0xd87c, 0xd895, 0xd8ae, 0xd8c7, + // Entry 5A00 - 5A3F + 0xd8e0, 0xd8f9, 0xd912, 0xd92b, 0xd944, 0xd95d, 0xd976, 0xd98f, + 0xd9a8, 0xd9c1, 0xd9da, 0xd9f3, 0xda0c, 0xda25, 0xda3e, 0xda57, + 0xda70, 0xda89, 0xdaa2, 0xdabb, 0xdad4, 0xdaed, 0xdb06, 0xdb1f, + 0xdb38, 0xdb51, 0xdb6a, 0xdb83, 0xdb9c, 0xdbb5, 0xdbce, 0xdbe7, + 0xdc00, 0xdc19, 0xdc32, 0xdc4b, 0xdc64, 0xdc7d, 0xdc96, 0xdcaf, + 0xdcc8, 0xdce1, 0xdcfa, 0xdd13, 0xdd2c, 0xdd45, 0xdd5e, 0xdd77, + 0xdd90, 0xdda9, 0xddc2, 0xdddb, 0xddf4, 0xde0d, 0xde26, 0xde3f, + 0xde58, 0xde71, 0xde8a, 0xdea3, 0xdebc, 0xded5, 0xdef4, 0xdf12, + // Entry 5A40 - 5A7F + 0xdf3b, 0xdf61, 0xdf7e, 0xdf9d, 0xdfbb, 0xdfd8, 0xdffa, 0xe025, + 0xe04d, 0xe06c, 0xe08a, 0xe0a5, 0xe0c2, 0xe0de, 0xe0fd, 0xe119, + 0xe135, 0xe154, 0xe16f, 0xe187, 0xe1a6, 0xe1c0, 0xe1dc, 0xe1fa, + 0xe216, 0xe231, 0xe24f, 0xe26b, 0xe28c, 0xe2aa, 0xe2c8, 0xe2e9, + 0xe307, 0xe320, 0xe33b, 0xe35c, 0xe378, 0xe391, 0xe3b1, 0xe3d2, + 0xe3ea, 0xe407, 0xe420, 0xe438, 0xe452, 0xe46c, 0xe487, 0xe4a5, + 0xe4c0, 0xe4d8, 0xe4f9, 0xe512, 0xe52e, 0xe547, 0xe562, 0xe57b, + 0xe593, 0xe5ac, 0xe5c4, 0xe5e2, 0xe5fd, 0xe616, 0xe639, 0xe65d, + // Entry 5A80 - 5ABF + 0xe678, 0xe694, 0xe6b0, 0xe6ca, 0xe6e4, 0xe6fd, 0xe718, 0xe731, + 0xe74c, 0xe764, 0xe77d, 0xe798, 0xe7b1, 0xe7c9, 0xe7e1, 0xe7fa, + 0xe812, 0xe829, 0xe841, 0xe859, 0xe872, 0xe88d, 0xe8ae, 0xe8c7, + 0xe8e2, 0xe900, 0xe91f, 0xe939, 0xe954, 0xe970, 0xe988, 0xe9a3, + 0xe9c5, 0xe9e8, 0xea09, 0xea26, 0xea46, 0xea5e, 0xea7b, 0xea99, + 0xeab7, 0xead7, 0xeaf8, 0xeb16, 0xeb31, 0xeb4e, 0xeb6a, 0xeb85, + 0xeb9f, 0xebb8, 0xebd9, 0xebf7, 0xec11, 0xec2d, 0xec46, 0xec5f, + 0xec7a, 0xec9b, 0xecb6, 0xecce, 0xece9, 0xed06, 0xed22, 0xed3e, + // Entry 5AC0 - 5AFF + 0xed5e, 0xed77, 0xed91, 0xeda9, 0xedc4, 0xede4, 0xee01, 0xee19, + 0xee34, 0xee4d, 0xee64, 0xee7c, 0xee95, 0xeeb6, 0xeece, 0xeee6, + 0xef03, 0xef1d, 0xef3b, 0xef55, 0xef70, 0xef8d, 0xefa7, 0xefcd, + 0xefea, 0xf004, 0xf020, 0xf03b, 0xf061, 0xf080, 0xf099, 0xf0b4, + 0xf0d2, 0xf0ec, 0xf105, 0xf121, 0xf13a, 0xf153, 0xf16e, 0xf186, + 0xf19f, 0xf1b9, 0xf1d5, 0xf1ef, 0xf20c, 0xf226, 0xf247, 0xf260, + 0xf27d, 0xf29c, 0xf2b5, 0xf2d0, 0xf2e8, 0xf305, 0xf321, 0xf33e, + 0xf35a, 0xf374, 0xf38c, 0xf3a6, 0xf3be, 0xf3d8, 0xf3f1, 0xf40e, + // Entry 5B00 - 5B3F + 0xf429, 0xf440, 0xf45a, 0xf472, 0xf48e, 0xf4ad, 0xf4c8, 0xf4e0, + 0xf4f9, 0xf513, 0xf52e, 0xf545, 0xf55d, 0xf576, 0xf58f, 0xf5a7, + 0xf5c3, 0xf5dc, 0xf5f5, 0xf616, 0xf62f, 0xf648, 0xf665, 0xf67d, + 0xf696, 0xf6b0, 0xf6cb, 0xf6e3, 0xf6fe, 0xf719, 0xf735, 0xf74f, + 0xf768, 0xf788, 0xf7a2, 0xf7bc, 0xf7d5, 0xf7ee, 0xf807, 0xf823, + 0xf843, 0xf85c, 0xf874, 0xf88c, 0xf8a4, 0xf8bc, 0xf8d4, 0xf8ed, + 0xf905, 0xf91d, 0xf936, 0xf950, 0xf969, 0xf983, 0xf99d, 0xf9ba, + 0xf9d3, 0xf9ed, 0xfa07, 0xfa20, 0xfa3a, 0xfa59, 0xfa72, 0xfa8d, + // Entry 5B40 - 5B7F + 0xfaa6, 0xfabe, 0xfad6, 0xfaf2, 0xfb0b, 0xfb23, 0xfb3d, 0xfb57, + 0xfb73, 0xfb8c, 0xfba7, 0xfbbf, 0xfbdb, 0xfbfb, 0xfc17, 0xfc2e, + 0xfc47, 0xfc62, 0xfc80, 0xfc99, 0xfcb5, 0xfcd0, 0xfce9, 0xfd02, + 0xfd1d, 0xfd36, 0xfd51, 0xfd69, 0xfd81, 0xfd9c, 0xfdb5, 0xfdcf, + 0xfde8, 0xfe03, 0xfe1b, 0xfe35, 0xfe4e, 0xfe67, 0xfe81, 0xfe9e, + 0xfeb9, 0xfed4, 0xfeed, 0xff05, 0xff20, 0xff39, 0xff51, 0xff6c, + 0xff86, 0xffa2, 0xffbb, 0xffd3, 0xffec, 0x0005, 0x001f, 0x0038, + 0x0050, 0x006b, 0x0086, 0x009f, 0x00b8, 0x00d0, 0x00e9, 0x0102, + // Entry 5B80 - 5BBF + 0x011e, 0x0138, 0x0151, 0x016c, 0x0186, 0x01a0, 0x01bb, 0x01d2, + 0x01ee, 0x0206, 0x021e, 0x0236, 0x024e, 0x0268, 0x0282, 0x0298, + 0x02b0, 0x02c7, 0x02e0, 0x02fa, 0x0313, 0x032a, 0x0342, 0x035b, + 0x0373, 0x038a, 0x03a3, 0x03bb, 0x03d4, 0x03ec, 0x0409, 0x0420, + 0x0439, 0x0458, 0x0470, 0x0488, 0x04a1, 0x04ba, 0x04d4, 0x04ec, + 0x0504, 0x051d, 0x0535, 0x054d, 0x0565, 0x0580, 0x0599, 0x05b2, + 0x05ca, 0x05e3, 0x05fd, 0x0615, 0x062d, 0x064a, 0x0663, 0x067b, + 0x0694, 0x06ac, 0x06c7, 0x06e0, 0x06f9, 0x0714, 0x072d, 0x0747, + // Entry 5BC0 - 5BFF + 0x0762, 0x077c, 0x0795, 0x07ad, 0x07c9, 0x07e2, 0x07fc, 0x0819, + 0x0835, 0x084d, 0x0866, 0x0882, 0x089b, 0x08ba, 0x08d2, 0x08ea, + 0x090c, 0x0930, 0x0949, 0x0963, 0x097c, 0x0996, 0x09ad, 0x09c7, + 0x09e1, 0x09fb, 0x0a16, 0x0a30, 0x0a49, 0x0a62, 0x0a79, 0x0a92, + 0x0aae, 0x0acb, 0x0ae7, 0x0b01, 0x0b1a, 0x0b33, 0x0b4c, 0x0b65, + 0x0b7d, 0x0b96, 0x0bae, 0x0bce, 0x0be6, 0x0c00, 0x0c1a, 0x0c34, + 0x0c4d, 0x0c68, 0x0c80, 0x0c9a, 0x0cb4, 0x0ccc, 0x0ce4, 0x0d00, + 0x0d19, 0x0d30, 0x0d49, 0x0d62, 0x0d7b, 0x0d97, 0x0db7, 0x0dd0, + // Entry 5C00 - 5C3F + 0x0de9, 0x0e02, 0x0e1b, 0x0e33, 0x0e4c, 0x0e67, 0x0e80, 0x0e98, + 0x0eb1, 0x0ecb, 0x0ee3, 0x0efc, 0x0f15, 0x0f30, 0x0f4a, 0x0f68, + 0x0f84, 0x0f9c, 0x0fb5, 0x0fcb, 0x0fe3, 0x0ff9, 0x100f, 0x1027, + 0x1045, 0x105d, 0x1075, 0x1097, 0x10b0, 0x10c9, 0x10e3, 0x10fd, + 0x111e, 0x113c, 0x1154, 0x116c, 0x1185, 0x119e, 0x11bd, 0x11d5, + 0x11ed, 0x1205, 0x121d, 0x1234, 0x124b, 0x1264, 0x127c, 0x1297, + 0x12af, 0x12c7, 0x12e0, 0x12fe, 0x1315, 0x132c, 0x1344, 0x135b, + 0x1373, 0x138a, 0x13a2, 0x13ba, 0x13d1, 0x13e9, 0x1401, 0x1419, + // Entry 5C40 - 5C7F + 0x1432, 0x1449, 0x145f, 0x1476, 0x148d, 0x14a5, 0x14bd, 0x14d5, + 0x14ec, 0x1504, 0x151d, 0x1537, 0x154f, 0x1568, 0x1582, 0x1598, + 0x15b0, 0x15c9, 0x15e0, 0x15f9, 0x1612, 0x162a, 0x1643, 0x165a, + 0x1674, 0x168c, 0x16a4, 0x16bb, 0x16d4, 0x16ed, 0x1706, 0x171e, + 0x1736, 0x174d, 0x1764, 0x177d, 0x1795, 0x17b1, 0x17ca, 0x17e2, + 0x17fb, 0x1813, 0x182a, 0x1841, 0x1859, 0x1870, 0x1889, 0x18a1, + 0x18b8, 0x18cf, 0x18e8, 0x1900, 0x1918, 0x1932, 0x194b, 0x1958, + 0x1966, 0x1973, 0x1981, 0x198e, 0x199b, 0x19a7, 0x19b5, 0x19c4, + // Entry 5C80 - 5CBF + 0x19d2, 0x19e0, 0x19ee, 0x19fe, 0x1a0b, 0x1a1a, 0x1a28, 0x1a35, + 0x1a42, 0x1a4e, 0x1a5b, 0x1a69, 0x1a78, 0x1a85, 0x1a92, 0x1a9e, + 0x1aab, 0x1ab9, 0x1ac6, 0x1ad4, 0x1ae1, 0x1aef, 0x1afd, 0x1b0a, + 0x1b17, 0x1b26, 0x1b34, 0x1b42, 0x1b4f, 0x1b5e, 0x1b6d, 0x1b7b, + 0x1b84, 0x1b94, 0x1ba9, 0x1bbc, 0x1bcf, 0x1be2, 0x1bf6, 0x1c0a, + 0x1c1e, 0x1c33, 0x1c48, 0x1c5b, 0x1c70, 0x1c83, 0x1c96, 0x1caa, + 0x1cbd, 0x1cd0, 0x1ce4, 0x1cf7, 0x1d0a, 0x1d1d, 0x1d32, 0x1d45, + 0x1d5b, 0x1d6d, 0x1d7f, 0x1d92, 0x1da4, 0x1db7, 0x1dc9, 0x1ddb, + // Entry 5CC0 - 5CFF + 0x1df8, 0x1e14, 0x1e30, 0x1e50, 0x1e71, 0x1e84, 0x1e9b, 0x1eb2, + 0x1ec8, 0x1ede, 0x1ef5, 0x1f0c, 0x1f22, 0x1f38, 0x1f4e, 0x1f64, + 0x1f7b, 0x1f92, 0x1fa9, 0x1fc0, 0x1fd7, 0x1fee, 0x2005, 0x201c, + 0x2032, 0x2048, 0x205f, 0x2076, 0x208c, 0x20a2, 0x20b8, 0x20ce, + 0x20e5, 0x20fc, 0x2116, 0x2132, 0x214c, 0x2166, 0x2181, 0x219b, + 0x21b6, 0x21d1, 0x21eb, 0x2206, 0x2220, 0x223b, 0x2257, 0x2272, + 0x228e, 0x22aa, 0x22c4, 0x22dd, 0x22f7, 0x2311, 0x232a, 0x2342, + 0x235b, 0x2375, 0x238f, 0x23a8, 0x23c2, 0x23dc, 0x23fc, 0x2417, + // Entry 5D00 - 5D3F + 0x2432, 0x244c, 0x2469, 0x2484, 0x249f, 0x24bb, 0x24d5, 0x24f0, + 0x250a, 0x2522, 0x2538, 0x2556, 0x256d, 0x2583, 0x2599, 0x25b1, + 0x25c8, 0x25df, 0x25f5, 0x260d, 0x2625, 0x263c, 0x2654, 0x2670, + 0x2691, 0x26ad, 0x26d1, 0x26f1, 0x270e, 0x2727, 0x273d, 0x2752, + 0x2773, 0x278d, 0x27a3, 0x27b9, 0x27cf, 0x27e5, 0x27f9, 0x2816, + 0x2832, 0x2847, 0x285c, 0x2871, 0x2899, 0x28ba, 0x28d4, 0x28f3, + 0x2911, 0x292f, 0x294c, 0x2967, 0x2981, 0x299c, 0x29b8, 0x29d2, + 0x29ed, 0x2a08, 0x2a23, 0x2a3e, 0x2a59, 0x2a74, 0x2a8e, 0x2aa8, + // Entry 5D40 - 5D7F + 0x2ac2, 0x2adc, 0x2af7, 0x2b11, 0x2b2b, 0x2b39, 0x2b47, 0x2b58, + 0x2b67, 0x2b75, 0x2b84, 0x2b9a, 0x2ba8, 0x2bb6, 0x2bc5, 0x2bd3, + 0x2be1, 0x2bf3, 0x2c04, 0x2c13, 0x2c22, 0x2c30, 0x2c3f, 0x2c51, + 0x2c67, 0x2c76, 0x2c86, 0x2c94, 0x2ca3, 0x2cb2, 0x2cc2, 0x2cd2, + 0x2ce2, 0x2cf3, 0x2d04, 0x2d12, 0x2d20, 0x2d31, 0x2d3f, 0x2d4e, + 0x2d5d, 0x2d6d, 0x2d84, 0x2d92, 0x2da0, 0x2daf, 0x2dbf, 0x2dcf, + 0x2ddf, 0x2dee, 0x2dfe, 0x2e0e, 0x2e1e, 0x2e31, 0x2e44, 0x2e5d, + 0x2e6c, 0x2e7b, 0x2e8a, 0x2e9a, 0x2ea9, 0x2eb8, 0x2eca, 0x2ed8, + // Entry 5D80 - 5DBF + 0x2ee6, 0x2ef5, 0x2f04, 0x2f14, 0x2f2b, 0x2f3b, 0x2f4c, 0x2f5a, + 0x2f68, 0x2f77, 0x2f8f, 0x2fa3, 0x2fbd, 0x2fda, 0x2feb, 0x2ffd, + 0x3010, 0x3022, 0x3035, 0x3046, 0x3058, 0x306a, 0x307b, 0x308c, + 0x309e, 0x30b1, 0x30c4, 0x30d5, 0x30e7, 0x30fa, 0x310e, 0x3120, + 0x3132, 0x3144, 0x3156, 0x3169, 0x317a, 0x318c, 0x319f, 0x31b3, + 0x31c5, 0x31d8, 0x31eb, 0x31fc, 0x320e, 0x3220, 0x3233, 0x3246, + 0x3261, 0x3273, 0x328d, 0x329f, 0x32b1, 0x32c3, 0x32d5, 0x32e6, + 0x32f8, 0x3307, 0x331a, 0x3329, 0x3338, 0x334a, 0x335c, 0x336e, + // Entry 5DC0 - 5DFF + 0x3380, 0x3392, 0x33a4, 0x33b6, 0x33d1, 0x33ec, 0x3407, 0x3422, + 0x343d, 0x3458, 0x346d, 0x3481, 0x3495, 0x34a9, 0x34bd, 0x34d1, + 0x34e5, 0x34f9, 0x350d, 0x3521, 0x3535, 0x3549, 0x355d, 0x3571, + 0x3585, 0x3599, 0x35ad, 0x35c1, 0x35d5, 0x35e9, 0x35fd, 0x3611, + 0x3625, 0x3639, 0x364d, 0x3661, 0x3675, 0x3689, 0x369d, 0x36b1, + 0x36c5, 0x36d9, 0x36ed, 0x3701, 0x3715, 0x3729, 0x373d, 0x3751, + 0x3765, 0x3779, 0x378d, 0x37a1, 0x37b5, 0x37c9, 0x37dd, 0x37f1, + 0x3805, 0x3819, 0x382d, 0x3841, 0x3855, 0x3869, 0x387d, 0x3891, + // Entry 5E00 - 5E3F + 0x38a5, 0x38b9, 0x38cd, 0x38e1, 0x38f5, 0x3909, 0x391d, 0x3931, + 0x3945, 0x3959, 0x396d, 0x3981, 0x3995, 0x39a9, 0x39bd, 0x39d1, + 0x39e5, 0x39f9, 0x3a0d, 0x3a21, 0x3a35, 0x3a49, 0x3a5d, 0x3a71, + 0x3a85, 0x3a99, 0x3aad, 0x3ac1, 0x3ad5, 0x3ae9, 0x3afd, 0x3b11, + 0x3b25, 0x3b39, 0x3b4d, 0x3b61, 0x3b75, 0x3b89, 0x3b9d, 0x3bb1, + 0x3bc5, 0x3bd9, 0x3bed, 0x3c01, 0x3c15, 0x3c29, 0x3c3d, 0x3c51, + 0x3c65, 0x3c79, 0x3c8d, 0x3ca1, 0x3cb5, 0x3cc9, 0x3cdd, 0x3cf1, + 0x3d05, 0x3d19, 0x3d2d, 0x3d41, 0x3d55, 0x3d69, 0x3d7d, 0x3d91, + // Entry 5E40 - 5E7F + 0x3da5, 0x3db9, 0x3dcd, 0x3de1, 0x3df5, 0x3e09, 0x3e1d, 0x3e31, + 0x3e45, 0x3e59, 0x3e6d, 0x3e81, 0x3e95, 0x3ea9, 0x3ebd, 0x3ed1, + 0x3ee5, 0x3ef9, 0x3f0d, 0x3f21, 0x3f35, 0x3f49, 0x3f5d, 0x3f71, + 0x3f85, 0x3f99, 0x3fad, 0x3fc1, 0x3fd5, 0x3fe9, 0x3ffd, 0x4011, + 0x4025, 0x4039, 0x404d, 0x4061, 0x4075, 0x4089, 0x409d, 0x40b1, + 0x40c5, 0x40d9, 0x40ed, 0x4101, 0x4115, 0x4129, 0x413d, 0x4151, + 0x4165, 0x4179, 0x418d, 0x41a1, 0x41b5, 0x41c9, 0x41dd, 0x41f1, + 0x4205, 0x4219, 0x422d, 0x4241, 0x4255, 0x4269, 0x427d, 0x4291, + // Entry 5E80 - 5EBF + 0x42a5, 0x42b9, 0x42cd, 0x42e1, 0x42f5, 0x4309, 0x431d, 0x4331, + 0x4345, 0x4359, 0x436d, 0x4381, 0x4395, 0x43a9, 0x43bd, 0x43d1, + 0x43e5, 0x43f9, 0x440d, 0x4421, 0x4435, 0x4449, 0x445d, 0x4471, + 0x4485, 0x4499, 0x44ad, 0x44c1, 0x44d5, 0x44e9, 0x44fd, 0x4511, + 0x4525, 0x4539, 0x454d, 0x4561, 0x4575, 0x4589, 0x459d, 0x45b1, + 0x45c5, 0x45d9, 0x45ed, 0x4601, 0x4615, 0x4629, 0x463d, 0x4651, + 0x4665, 0x4679, 0x468d, 0x46a1, 0x46b5, 0x46c9, 0x46dd, 0x46f1, + 0x4705, 0x4719, 0x472d, 0x4741, 0x4755, 0x4769, 0x477d, 0x4791, + // Entry 5EC0 - 5EFF + 0x47a5, 0x47b9, 0x47cd, 0x47e1, 0x47f5, 0x4809, 0x481d, 0x4831, + 0x4845, 0x4859, 0x486d, 0x4881, 0x4895, 0x48a9, 0x48bd, 0x48d1, + 0x48e5, 0x48f9, 0x490d, 0x4921, 0x4935, 0x4949, 0x495d, 0x4971, + 0x4985, 0x4999, 0x49ad, 0x49c1, 0x49d5, 0x49e9, 0x49fd, 0x4a11, + 0x4a25, 0x4a39, 0x4a4d, 0x4a61, 0x4a75, 0x4a89, 0x4a9d, 0x4ab1, + 0x4ac5, 0x4ad9, 0x4aed, 0x4b01, 0x4b15, 0x4b29, 0x4b3d, 0x4b51, + 0x4b65, 0x4b79, 0x4b8d, 0x4ba1, 0x4bb5, 0x4bc9, 0x4bdd, 0x4bf1, + 0x4c05, 0x4c19, 0x4c2d, 0x4c41, 0x4c55, 0x4c69, 0x4c7d, 0x4c91, + // Entry 5F00 - 5F3F + 0x4ca5, 0x4cb9, 0x4ccd, 0x4ce1, 0x4cf5, 0x4d09, 0x4d1d, 0x4d31, + 0x4d45, 0x4d59, 0x4d6d, 0x4d81, 0x4d95, 0x4da9, 0x4dbd, 0x4dd1, + 0x4de5, 0x4df9, 0x4e0d, 0x4e21, 0x4e35, 0x4e49, 0x4e5d, 0x4e71, + 0x4e85, 0x4e99, 0x4ead, 0x4ec1, 0x4ed5, 0x4ee9, 0x4efd, 0x4f11, + 0x4f25, 0x4f39, 0x4f4d, 0x4f61, 0x4f75, 0x4f89, 0x4f9d, 0x4fb1, + 0x4fc5, 0x4fd9, 0x4fed, 0x5001, 0x5015, 0x5029, 0x503d, 0x5051, + 0x5065, 0x5079, 0x508d, 0x50a1, 0x50b5, 0x50c9, 0x50dd, 0x50f1, + 0x5105, 0x5119, 0x512d, 0x5141, 0x5155, 0x5169, 0x517d, 0x5191, + // Entry 5F40 - 5F7F + 0x51a5, 0x51b9, 0x51cd, 0x51e1, 0x51f5, 0x5209, 0x521d, 0x5231, + 0x5245, 0x5259, 0x526d, 0x5281, 0x5295, 0x52a9, 0x52bd, 0x52d1, + 0x52e5, 0x52f9, 0x530d, 0x5321, 0x5335, 0x5349, 0x535d, 0x5371, + 0x5385, 0x5399, 0x53ad, 0x53c1, 0x53d5, 0x53e9, 0x53fd, 0x5411, + 0x5425, 0x5439, 0x544d, 0x5461, 0x5475, 0x5489, 0x549d, 0x54b1, + 0x54c5, 0x54d9, 0x54ed, 0x5501, 0x5515, 0x5529, 0x553d, 0x5551, + 0x5565, 0x5579, 0x558d, 0x55a1, 0x55b5, 0x55c9, 0x55dd, 0x55f1, + 0x5605, 0x5619, 0x562d, 0x5641, 0x5655, 0x5669, 0x567d, 0x5691, + // Entry 5F80 - 5FBF + 0x56a5, 0x56b9, 0x56cd, 0x56e1, 0x56f5, 0x5709, 0x571d, 0x5731, + 0x5745, 0x5759, 0x576d, 0x5781, 0x5795, 0x57a9, 0x57bd, 0x57d1, + 0x57e5, 0x57f9, 0x580d, 0x5821, 0x5835, 0x5849, 0x585d, 0x5871, + 0x5885, 0x5899, 0x58ad, 0x58c1, 0x58d5, 0x58e9, 0x58fd, 0x5911, + 0x5925, 0x5939, 0x594d, 0x5961, 0x5975, 0x5989, 0x599d, 0x59b1, + 0x59c5, 0x59d9, 0x59ed, 0x5a01, 0x5a15, 0x5a29, 0x5a3d, 0x5a51, + 0x5a65, 0x5a79, 0x5a8d, 0x5aa1, 0x5ab5, 0x5ac9, 0x5add, 0x5af1, + 0x5b05, 0x5b19, 0x5b2d, 0x5b41, 0x5b55, 0x5b69, 0x5b7d, 0x5b91, + // Entry 5FC0 - 5FFF + 0x5ba5, 0x5bb9, 0x5bcd, 0x5be1, 0x5bf5, 0x5c09, 0x5c1d, 0x5c31, + 0x5c45, 0x5c59, 0x5c6d, 0x5c81, 0x5c95, 0x5ca9, 0x5cbd, 0x5cd1, + 0x5ce5, 0x5cf9, 0x5d0d, 0x5d21, 0x5d35, 0x5d49, 0x5d5d, 0x5d71, + 0x5d85, 0x5d99, 0x5dad, 0x5dc1, 0x5dd5, 0x5de9, 0x5dfd, 0x5e11, + 0x5e25, 0x5e39, 0x5e4d, 0x5e61, 0x5e75, 0x5e89, 0x5e9d, 0x5eb1, + 0x5ec5, 0x5ed9, 0x5eed, 0x5f01, 0x5f15, 0x5f29, 0x5f3d, 0x5f51, + 0x5f65, 0x5f79, 0x5f8d, 0x5fa1, 0x5fb5, 0x5fc9, 0x5fdd, 0x5ff1, + 0x6005, 0x6019, 0x602d, 0x6041, 0x6055, 0x6069, 0x607d, 0x6091, + // Entry 6000 - 603F + 0x60a5, 0x60b9, 0x60cd, 0x60e1, 0x60f5, 0x6109, 0x611d, 0x6131, + 0x6145, 0x6159, 0x616d, 0x6181, 0x6195, 0x61a9, 0x61bd, 0x61d1, + 0x61e5, 0x61f9, 0x620d, 0x6221, 0x6235, 0x6249, 0x625d, 0x6271, + 0x6285, 0x6299, 0x62ad, 0x62c1, 0x62d5, 0x62e9, 0x62fd, 0x6311, + 0x6325, 0x6339, 0x634d, 0x6361, 0x6375, 0x6389, 0x639d, 0x63b1, + 0x63c5, 0x63d9, 0x63ed, 0x6401, 0x6415, 0x6429, 0x643d, 0x6451, + 0x6465, 0x6479, 0x648d, 0x64a1, 0x64b5, 0x64c9, 0x64dd, 0x64f1, + 0x6505, 0x6519, 0x652d, 0x6541, 0x6555, 0x6569, 0x657d, 0x6591, + // Entry 6040 - 607F + 0x65a5, 0x65b9, 0x65cd, 0x65e1, 0x65f5, 0x6609, 0x661d, 0x6631, + 0x6645, 0x6659, 0x666d, 0x6681, 0x6695, 0x66a9, 0x66bd, 0x66d1, + 0x66e5, 0x66f9, 0x670d, 0x6721, 0x6735, 0x6749, 0x675d, 0x6771, + 0x6785, 0x6799, 0x67ad, 0x67c1, 0x67d5, 0x67e9, 0x67fd, 0x6811, + 0x6825, 0x6839, 0x684d, 0x6861, 0x6875, 0x6889, 0x689d, 0x68b1, + 0x68c5, 0x68d9, 0x68ed, 0x6901, 0x6915, 0x6929, 0x693d, 0x6951, + 0x6965, 0x6979, 0x698d, 0x69a1, 0x69b5, 0x69c9, 0x69dd, 0x69f1, + 0x6a05, 0x6a19, 0x6a2d, 0x6a41, 0x6a55, 0x6a69, 0x6a7d, 0x6a91, + // Entry 6080 - 60BF + 0x6aa5, 0x6ab9, 0x6acd, 0x6ae1, 0x6af5, 0x6b09, 0x6b1d, 0x6b31, + 0x6b45, 0x6b59, 0x6b6d, 0x6b81, 0x6b95, 0x6ba9, 0x6bbd, 0x6bd1, + 0x6be5, 0x6bf9, 0x6c0d, 0x6c21, 0x6c35, 0x6c49, 0x6c5d, 0x6c71, + 0x6c85, 0x6c99, 0x6cad, 0x6cc1, 0x6cd5, 0x6ce9, 0x6cfd, 0x6d11, + 0x6d25, 0x6d39, 0x6d4d, 0x6d61, 0x6d75, 0x6d89, 0x6d9d, 0x6db1, + 0x6dc5, 0x6dd9, 0x6ded, 0x6e01, 0x6e15, 0x6e29, 0x6e3d, 0x6e51, + 0x6e65, 0x6e79, 0x6e8d, 0x6ea1, 0x6eb5, 0x6ec9, 0x6edd, 0x6ef1, + 0x6f05, 0x6f19, 0x6f2d, 0x6f41, 0x6f55, 0x6f69, 0x6f82, 0x6f9c, + // Entry 60C0 - 60FF + 0x6fad, 0x6fbe, 0x6fcf, 0x6fe0, 0x6ff1, 0x7002, 0x7013, 0x7024, + 0x7035, 0x7046, 0x7057, 0x7068, 0x707b, 0x708e, 0x70a1, 0x70b4, + 0x70c7, 0x70d9, 0x70f1, 0x7103, 0x7115, 0x712c, 0x713e, 0x7150, + 0x7162, 0x7173, 0x7184, 0x7195, 0x71a6, 0x71b9, 0x71cc, 0x71df, + 0x71f2, 0x720c, 0x7226, 0x7240, 0x726c, 0x7286, 0x72a6, 0x72b9, + 0x72cc, 0x72df, 0x72f2, 0x7307, 0x731c, 0x7331, 0x7346, 0x7362, + 0x7375, 0x738a, 0x739d, 0x73b2, 0x73c5, 0x73da, 0x73ed, 0x7402, + 0x7413, 0x7425, 0x7438, 0x744b, 0x745e, 0x7473, 0x7488, 0x749b, + // Entry 6100 - 613F + 0x74b0, 0x74c1, 0x74d9, 0x74eb, 0x74fc, 0x750f, 0x7520, 0x7531, + 0x7543, 0x755a, 0x756c, 0x757e, 0x7596, 0x75b0, 0x75c8, 0x75de, + 0x75f0, 0x7601, 0x7613, 0x7625, 0x7638, 0x764e, 0x7668, 0x767a, + 0x7691, 0x76a4, 0x76b6, 0x76c8, 0x76da, 0x76ec, 0x76fe, 0x7711, + 0x7724, 0x773b, 0x7752, 0x7769, 0x7780, 0x7799, 0x77b2, 0x77ca, + 0x77e2, 0x77fa, 0x7813, 0x7838, 0x785c, 0x7882, 0x78a4, 0x78c6, + 0x78e9, 0x7907, 0x7933, 0x7952, 0x796e, 0x798c, 0x79aa, 0x79ce, + 0x79e7, 0x7a06, 0x7a1f, 0x7a3d, 0x7a54, 0x7a6e, 0x7a86, 0x7a9e, + // Entry 6140 - 617F + 0x7aba, 0x7ad2, 0x7af0, 0x7b08, 0x7b25, 0x7b3b, 0x7b54, 0x7b6b, + 0x7b82, 0x7b9d, 0x7bb5, 0x7bcf, 0x7bed, 0x7c01, 0x7c27, 0x7c46, + 0x7c69, 0x7c83, 0x7c9b, 0x7cb9, 0x7cd8, 0x7cfc, 0x7d26, 0x7d4a, + 0x7d75, 0x7d9a, 0x7dbb, 0x7ddd, 0x7e01, 0x7e23, 0x7e4b, 0x7e6c, + 0x7e96, 0x7ebe, 0x7edd, 0x7eff, 0x7f22, 0x7f4b, 0x7f6b, 0x7f89, + 0x7fb1, 0x7fd9, 0x7ff8, 0x8019, 0x8037, 0x805d, 0x8086, 0x80b1, + 0x80d2, 0x80f3, 0x811c, 0x8144, 0x816d, 0x8197, 0x81b8, 0x81d7, + 0x81f5, 0x821d, 0x823d, 0x8262, 0x8281, 0x82aa, 0x82d7, 0x8302, + // Entry 6180 - 61BF + 0x8320, 0x833e, 0x835a, 0x8377, 0x8397, 0x83b9, 0x83df, 0x8407, + 0x8429, 0x8453, 0x847b, 0x849c, 0x84be, 0x84df, 0x8509, 0x8529, + 0x8556, 0x8583, 0x85a3, 0x85c0, 0x85e0, 0x8606, 0x862c, 0x8651, + 0x8676, 0x8697, 0x86ba, 0x86dc, 0x86fc, 0x871d, 0x8745, 0x876d, + 0x8792, 0x87bc, 0x87e4, 0x8803, 0x882a, 0x885b, 0x887b, 0x88a3, + 0x88c3, 0x88e3, 0x8907, 0x892a, 0x894d, 0x8973, 0x8992, 0x89b5, + 0x89d5, 0x89fd, 0x8a25, 0x8a50, 0x8a70, 0x8a98, 0x8abd, 0x8ae0, + 0x8b04, 0x8b22, 0x8b47, 0x8b68, 0x8b8b, 0x8bb0, 0x8bd9, 0x8c01, + // Entry 61C0 - 61FF + 0x8c28, 0x8c53, 0x8c7f, 0x8ca6, 0x8cce, 0x8cf5, 0x8d1b, 0x8d48, + 0x8d6e, 0x8d96, 0x8dbe, 0x8de3, 0x8e0c, 0x8e2e, 0x8e50, 0x8e72, + 0x8e93, 0x8eb3, 0x8ed6, 0x8efd, 0x8f26, 0x8f4b, 0x8f6f, 0x8f94, + 0x8fb1, 0x8fcf, 0x8fee, 0x900f, 0x902f, 0x905b, 0x9086, 0x90b3, + 0x90e3, 0x9112, 0x9139, 0x916f, 0x91a2, 0x91c3, 0x9200, 0x923c, + 0x9271, 0x9293, 0x92b1, 0x92d4, 0x92f4, 0x931c, 0x9343, 0x9366, + 0x938b, 0x93ae, 0x93d2, 0x93fa, 0x9423, 0x9451, 0x9484, 0x94b4, + 0x94e9, 0x9517, 0x9542, 0x9572, 0x95aa, 0x95d9, 0x9608, 0x9638, + // Entry 6200 - 623F + 0x966c, 0x969a, 0x96c7, 0x96f2, 0x971f, 0x9751, 0x9789, 0x97b5, + 0x97e2, 0x9811, 0x9832, 0x9855, 0x988c, 0x98b8, 0x98e6, 0x9910, + 0x993c, 0x996f, 0x999b, 0x99c7, 0x99f8, 0x9a28, 0x9a5f, 0x9a98, + 0x9acc, 0x9b01, 0x9b27, 0x9b4b, 0x9b70, 0x9b95, 0x9bcb, 0x9bff, + 0x9c2a, 0x9c55, 0x9c82, 0x9cb3, 0x9cef, 0x9d24, 0x9d5c, 0x9d8d, + 0x9dc9, 0x9dfe, 0x9e36, 0x9e5c, 0x9e82, 0x9eae, 0x9edb, 0x9f02, + 0x9f2b, 0x9f54, 0x9f85, 0x9fb7, 0x9feb, 0xa013, 0xa043, 0xa074, + 0xa0a7, 0xa0cb, 0xa0f0, 0xa10f, 0xa132, 0xa156, 0xa179, 0xa19c, + // Entry 6240 - 627F + 0xa1bf, 0xa1e2, 0xa205, 0xa230, 0xa259, 0xa284, 0xa2ad, 0xa2d1, + 0xa2f9, 0xa316, 0xa333, 0xa34f, 0xa373, 0xa390, 0xa3ac, 0xa3cb, + 0xa3eb, 0xa405, 0xa41d, 0xa433, 0xa447, 0xa45a, 0xa47a, 0xa49a, + 0xa4ba, 0xa4d0, 0xa4ec, 0xa506, 0xa51c, 0xa530, 0xa546, 0xa563, + 0xa580, 0xa59f, 0xa5bd, 0xa5db, 0xa5f8, 0xa61b, 0xa63f, 0xa654, + 0xa675, 0xa697, 0xa6ac, 0xa6c1, 0xa6e2, 0xa704, 0xa71e, 0xa738, + 0xa75c, 0xa777, 0xa791, 0xa7a7, 0xa7bf, 0xa7d8, 0xa7f3, 0xa80a, + 0xa823, 0xa844, 0xa864, 0xa87e, 0xa895, 0xa8af, 0xa8ca, 0xa8ea, + // Entry 6280 - 62BF + 0xa90b, 0xa924, 0xa93d, 0xa955, 0xa970, 0xa98a, 0xa9a7, 0xa9c8, + 0xa9e8, 0xaa15, 0xaa2e, 0xaa4a, 0xaa6a, 0xaa8e, 0xaab2, 0xaadb, + 0xab04, 0xab2f, 0xab5a, 0xab86, 0xabb2, 0xabdd, 0xac08, 0xac37, + 0xac66, 0xac88, 0xacaa, 0xacdb, 0xad0c, 0xad2f, 0xad4b, 0xad68, + 0xad84, 0xada9, 0xadce, 0xade2, 0xadfb, 0xae13, 0xae2e, 0xae48, + 0xae65, 0xae86, 0xaea6, 0xaed3, 0xaef0, 0xaf1a, 0xaf3c, 0xaf5e, + 0xaf80, 0xafa1, 0xafc2, 0xafe3, 0xb00c, 0xb02b, 0xb04a, 0xb069, + 0xb088, 0xb0a7, 0xb0c0, 0xb0d7, 0xb0ef, 0xb105, 0xb11e, 0xb135, + // Entry 62C0 - 62FF + 0xb150, 0xb169, 0xb188, 0xb1a9, 0xb1c8, 0xb1ee, 0xb20e, 0xb237, + 0xb25f, 0xb27d, 0xb299, 0xb2b7, 0xb2d4, 0xb2f0, 0xb30d, 0xb32b, + 0xb348, 0xb36e, 0xb394, 0xb3ae, 0xb3c3, 0xb3d3, 0xb3e7, 0xb3fb, + 0xb40f, 0xb427, 0xb441, 0xb460, 0xb482, 0xb493, 0xb4a6, 0xb4c2, + 0xb4db, 0xb4f1, 0xb511, 0xb531, 0xb551, 0xb571, 0xb591, 0xb5b1, + 0xb5d1, 0xb5f1, 0xb611, 0xb632, 0xb653, 0xb66d, 0xb687, 0xb6a3, + 0xb6be, 0xb6df, 0xb6fe, 0xb71f, 0xb746, 0xb75f, 0xb77b, 0xb799, + 0xb7b4, 0xb7d1, 0xb7f0, 0xb803, 0xb81a, 0xb82f, 0xb843, 0xb858, + // Entry 6300 - 633F + 0xb877, 0xb896, 0xb8ab, 0xb8c6, 0xb8e5, 0xb904, 0xb91d, 0xb936, + 0xb958, 0xb97c, 0xb996, 0xb9b4, 0xb9ce, 0xb9ec, 0xba23, 0xba5c, + 0xbaa0, 0xbad9, 0xbb14, 0xbb5c, 0xbba4, 0xbbec, 0xbc00, 0xbc1f, + 0xbc3e, 0xbc55, 0xbc69, 0xbc7f, 0xbc94, 0xbcac, 0xbcc3, 0xbcda, + 0xbcf2, 0xbd11, 0xbd30, 0xbd51, 0xbd6e, 0xbd8a, 0xbdac, 0xbdcc, + 0xbdf1, 0xbe11, 0xbe30, 0xbe5c, 0xbe86, 0xbeb1, 0xbeda, 0xbef9, + 0xbf16, 0xbf33, 0xbf50, 0xbf6d, 0xbf8a, 0xbfa7, 0xbfc4, 0xbfe1, + 0xbffe, 0xc01c, 0xc03a, 0xc058, 0xc076, 0xc094, 0xc0b2, 0xc0d0, + // Entry 6340 - 637F + 0xc0ee, 0xc10c, 0xc12a, 0xc148, 0xc166, 0xc184, 0xc1a2, 0xc1c0, + 0xc1de, 0xc1fc, 0xc21a, 0xc238, 0xc256, 0xc27a, 0xc29e, 0xc2c2, + 0xc2e6, 0xc30a, 0xc32e, 0xc353, 0xc378, 0xc39d, 0xc3c2, 0xc3e7, + 0xc40c, 0xc431, 0xc456, 0xc47b, 0xc4a0, 0xc4c5, 0xc4ea, 0xc50f, + 0xc534, 0xc559, 0xc57e, 0xc5a3, 0xc5c8, 0xc5ed, 0xc612, 0xc637, + 0xc65c, 0xc681, 0xc6a6, 0xc6cb, 0xc6f0, 0xc715, 0xc73a, 0xc75f, + 0xc784, 0xc7a9, 0xc7c8, 0xc7e9, 0xc80a, 0xc81e, 0xc830, 0xc849, + 0xc85f, 0xc878, 0xc890, 0xc8a0, 0xc8b4, 0xc8cd, 0xc8e0, 0xc8f5, + // Entry 6380 - 63BF + 0xc910, 0xc929, 0xc93d, 0xc955, 0xc970, 0xc999, 0xc9b1, 0xc9cb, + 0xc9e1, 0xc9fa, 0xca0d, 0xca22, 0xca3c, 0xca51, 0xca68, 0xca7d, + 0xca92, 0xcaaa, 0xcabc, 0xcacd, 0xcae5, 0xcafc, 0xcb10, 0xcb24, + 0xcb3e, 0xcb5b, 0xcb70, 0xcb84, 0xcb9b, 0xcbb0, 0xcbc7, 0xcbdd, + 0xcbf1, 0xcc07, 0xcc1e, 0xcc38, 0xcc4e, 0xcc69, 0xcc81, 0xcc94, + 0xccab, 0xccc4, 0xccd9, 0xcced, 0xcd01, 0xcd22, 0xcd39, 0xcd4e, + 0xcd64, 0xcd77, 0xcd91, 0xcdab, 0xcdc4, 0xcdde, 0xcdf3, 0xce0d, + 0xce28, 0xce3b, 0xce4e, 0xce63, 0xce76, 0xce8d, 0xcea4, 0xceb9, + // Entry 63C0 - 63FF + 0xced1, 0xcee8, 0xcefe, 0xcf14, 0xcf2c, 0xcf41, 0xcf56, 0xcf6f, + 0xcf87, 0xcfa1, 0xcfbb, 0xcfd2, 0xcfe9, 0xd004, 0xd01f, 0xd03c, + 0xd058, 0xd074, 0xd08f, 0xd0ac, 0xd0c9, 0xd0e5, 0xd100, 0xd11b, + 0xd138, 0xd154, 0xd170, 0xd18b, 0xd1a8, 0xd1c5, 0xd1e1, 0xd1fc, + 0xd217, 0xd232, 0xd24d, 0xd268, 0xd283, 0xd29e, 0xd2b9, 0xd2d4, + 0xd2ef, 0xd30a, 0xd325, 0xd340, 0xd35b, 0xd376, 0xd391, 0xd3ac, + 0xd3c7, 0xd3e2, 0xd3fd, 0xd418, 0xd433, 0xd44e, 0xd469, 0xd484, + 0xd49f, 0xd4b8, 0xd4d1, 0xd4ea, 0xd503, 0xd51c, 0xd535, 0xd54e, + // Entry 6400 - 643F + 0xd567, 0xd580, 0xd599, 0xd5b2, 0xd5cb, 0xd5e4, 0xd5fd, 0xd616, + 0xd62f, 0xd648, 0xd661, 0xd67a, 0xd693, 0xd6ac, 0xd6c5, 0xd6de, + 0xd6f7, 0xd710, 0xd729, 0xd746, 0xd763, 0xd780, 0xd79d, 0xd7ba, + 0xd7d7, 0xd7f4, 0xd811, 0xd82e, 0xd84b, 0xd868, 0xd885, 0xd8a2, + 0xd8bf, 0xd8dc, 0xd8f9, 0xd916, 0xd933, 0xd950, 0xd96d, 0xd98a, + 0xd9a7, 0xd9c4, 0xd9e1, 0xd9fe, 0xda1b, 0xda36, 0xda51, 0xda6c, + 0xda87, 0xdaa2, 0xdabd, 0xdad8, 0xdaf3, 0xdb0e, 0xdb29, 0xdb44, + 0xdb5f, 0xdb7a, 0xdb95, 0xdbb0, 0xdbcb, 0xdbe6, 0xdc01, 0xdc1c, + // Entry 6440 - 647F + 0xdc37, 0xdc52, 0xdc6d, 0xdc88, 0xdca3, 0xdcbe, 0xdce0, 0xdd02, + 0xdd24, 0xdd46, 0xdd68, 0xdd8a, 0xddac, 0xddce, 0xddf0, 0xde12, + 0xde34, 0xde56, 0xde78, 0xde9a, 0xdebc, 0xdede, 0xdf00, 0xdf22, + 0xdf44, 0xdf66, 0xdf88, 0xdfaa, 0xdfcc, 0xdfee, 0xe010, 0xe032, + 0xe052, 0xe072, 0xe092, 0xe0b2, 0xe0d2, 0xe0f2, 0xe112, 0xe132, + 0xe152, 0xe172, 0xe192, 0xe1b2, 0xe1d2, 0xe1f2, 0xe212, 0xe232, + 0xe252, 0xe272, 0xe292, 0xe2b2, 0xe2d2, 0xe2f2, 0xe312, 0xe332, + 0xe352, 0xe372, 0xe38f, 0xe3ac, 0xe3c9, 0xe3e6, 0xe403, 0xe420, + // Entry 6480 - 64BF + 0xe43d, 0xe45a, 0xe477, 0xe494, 0xe4b1, 0xe4ce, 0xe4eb, 0xe508, + 0xe525, 0xe542, 0xe55f, 0xe57c, 0xe597, 0xe5b2, 0xe5cd, 0xe5e8, + 0xe603, 0xe61e, 0xe639, 0xe654, 0xe66f, 0xe68a, 0xe6a5, 0xe6c0, + 0xe6db, 0xe6f6, 0xe711, 0xe72c, 0xe747, 0xe762, 0xe77d, 0xe798, + 0xe7b3, 0xe7ce, 0xe7e9, 0xe80b, 0xe82d, 0xe84f, 0xe871, 0xe893, + 0xe8b5, 0xe8d7, 0xe8f9, 0xe91b, 0xe93d, 0xe95f, 0xe981, 0xe9a3, + 0xe9c5, 0xe9e7, 0xea09, 0xea2b, 0xea4d, 0xea6f, 0xea91, 0xeab3, + 0xead5, 0xeaf7, 0xeb19, 0xeb3b, 0xeb5d, 0xeb7d, 0xeb9d, 0xebbd, + // Entry 64C0 - 64FF + 0xebdd, 0xebfd, 0xec1d, 0xec3d, 0xec5d, 0xec7d, 0xec9d, 0xecbd, + 0xecdd, 0xecfd, 0xed1d, 0xed3d, 0xed5d, 0xed7d, 0xed9d, 0xedbd, + 0xeddd, 0xedfd, 0xee1d, 0xee3d, 0xee5d, 0xee7d, 0xee9d, 0xeebb, + 0xeed9, 0xeef7, 0xef15, 0xef33, 0xef51, 0xef6f, 0xef8d, 0xefab, + 0xefc9, 0xefe7, 0xf005, 0xf023, 0xf041, 0xf05f, 0xf07d, 0xf09b, + 0xf0b9, 0xf0d7, 0xf0f5, 0xf113, 0xf12f, 0xf14b, 0xf167, 0xf183, + 0xf19f, 0xf1bb, 0xf1d7, 0xf1f3, 0xf20f, 0xf22b, 0xf247, 0xf263, + 0xf27f, 0xf29b, 0xf2b7, 0xf2d3, 0xf2ef, 0xf30b, 0xf327, 0xf343, + // Entry 6500 - 653F + 0xf35f, 0xf37b, 0xf397, 0xf3b3, 0xf3cf, 0xf3eb, 0xf40f, 0xf433, + 0xf457, 0xf47b, 0xf49f, 0xf4c3, 0xf4e7, 0xf50b, 0xf52f, 0xf553, + 0xf577, 0xf59b, 0xf5bf, 0xf5e3, 0xf607, 0xf62b, 0xf64f, 0xf673, + 0xf697, 0xf6b9, 0xf6db, 0xf6fd, 0xf71f, 0xf741, 0xf763, 0xf785, + 0xf7a7, 0xf7c9, 0xf7eb, 0xf80d, 0xf82f, 0xf851, 0xf873, 0xf895, + 0xf8b7, 0xf8d9, 0xf8fb, 0xf91d, 0xf93f, 0xf961, 0xf983, 0xf9a5, + 0xf9c7, 0xf9e9, 0xfa0b, 0xfa2e, 0xfa51, 0xfa74, 0xfa97, 0xfaba, + 0xfadd, 0xfb00, 0xfb23, 0xfb46, 0xfb69, 0xfb8c, 0xfbaf, 0xfbd2, + // Entry 6540 - 657F + 0xfbf5, 0xfc18, 0xfc3b, 0xfc5e, 0xfc81, 0xfca4, 0xfcc7, 0xfcea, + 0xfd0d, 0xfd30, 0xfd53, 0xfd76, 0xfd99, 0xfdba, 0xfddb, 0xfdfc, + 0xfe1d, 0xfe3e, 0xfe5f, 0xfe80, 0xfea1, 0xfec2, 0xfee3, 0xff04, + 0xff25, 0xff46, 0xff67, 0xff88, 0xffa9, 0xffca, 0xffeb, 0x000c, + 0x002d, 0x004e, 0x006f, 0x0090, 0x00b1, 0x00d2, 0x00f3, 0x0114, + 0x0135, 0x0156, 0x0177, 0x0198, 0x01b9, 0x01da, 0x01fb, 0x021c, + 0x023d, 0x025e, 0x027f, 0x02a0, 0x02c1, 0x02e2, 0x0303, 0x0324, + 0x0345, 0x0366, 0x0387, 0x03a8, 0x03c9, 0x03ea, 0x040b, 0x042c, + // Entry 6580 - 65BF + 0x044d, 0x046c, 0x048b, 0x04aa, 0x04c9, 0x04e8, 0x0507, 0x0526, + 0x0545, 0x0564, 0x0583, 0x05a2, 0x05c1, 0x05e0, 0x05ff, 0x061e, + 0x063d, 0x065c, 0x067b, 0x069a, 0x06b9, 0x06d8, 0x06f7, 0x0716, + 0x0735, 0x0754, 0x0773, 0x0799, 0x07bf, 0x07e5, 0x080b, 0x0831, + 0x0857, 0x087d, 0x08a3, 0x08c9, 0x08ef, 0x0915, 0x093b, 0x0961, + 0x0987, 0x09ad, 0x09d3, 0x09f9, 0x0a1f, 0x0a45, 0x0a6b, 0x0a91, + 0x0ab7, 0x0add, 0x0b03, 0x0b29, 0x0b4f, 0x0b73, 0x0b97, 0x0bbb, + 0x0bdf, 0x0c03, 0x0c27, 0x0c4b, 0x0c6f, 0x0c93, 0x0cb7, 0x0cdb, + // Entry 65C0 - 65FF + 0x0cff, 0x0d23, 0x0d47, 0x0d6b, 0x0d8f, 0x0db3, 0x0dd7, 0x0dfb, + 0x0e1f, 0x0e43, 0x0e67, 0x0e8b, 0x0eaf, 0x0ed3, 0x0ef7, 0x0f1f, + 0x0f47, 0x0f6f, 0x0f97, 0x0fbf, 0x0fe7, 0x100f, 0x1037, 0x105f, + 0x1087, 0x10af, 0x10d7, 0x10ff, 0x1127, 0x114f, 0x1177, 0x119f, + 0x11c7, 0x11ef, 0x1217, 0x123f, 0x1267, 0x128f, 0x12b7, 0x12df, + 0x1307, 0x132d, 0x1353, 0x1379, 0x139f, 0x13c5, 0x13eb, 0x1411, + 0x1437, 0x145d, 0x1483, 0x14a9, 0x14cf, 0x14f5, 0x151b, 0x1541, + 0x1567, 0x158d, 0x15b3, 0x15d9, 0x15ff, 0x1625, 0x164b, 0x1671, + // Entry 6600 - 663F + 0x1697, 0x16bd, 0x16e3, 0x1710, 0x173d, 0x176a, 0x1797, 0x17c4, + 0x17f1, 0x181e, 0x184b, 0x1878, 0x18a5, 0x18d2, 0x18ff, 0x192c, + 0x1959, 0x1986, 0x19b3, 0x19e0, 0x1a0d, 0x1a3a, 0x1a67, 0x1a94, + 0x1ac1, 0x1aee, 0x1b1b, 0x1b48, 0x1b75, 0x1ba0, 0x1bcb, 0x1bf6, + 0x1c21, 0x1c4c, 0x1c77, 0x1ca2, 0x1ccd, 0x1cf8, 0x1d23, 0x1d4e, + 0x1d79, 0x1da4, 0x1dcf, 0x1dfa, 0x1e25, 0x1e50, 0x1e7b, 0x1ea6, + 0x1ed1, 0x1efc, 0x1f27, 0x1f52, 0x1f7d, 0x1fa8, 0x1fd3, 0x1ff3, + 0x2013, 0x2033, 0x2053, 0x2073, 0x2093, 0x20b3, 0x20d3, 0x20f3, + // Entry 6640 - 667F + 0x2113, 0x2133, 0x2153, 0x2173, 0x2193, 0x21b3, 0x21d3, 0x21f3, + 0x2213, 0x2233, 0x2253, 0x2273, 0x2293, 0x22b3, 0x22d3, 0x22f3, + 0x2313, 0x2331, 0x234f, 0x236d, 0x238b, 0x23a9, 0x23c7, 0x23e5, + 0x2403, 0x2421, 0x243f, 0x245d, 0x247b, 0x2499, 0x24b7, 0x24d5, + 0x24f3, 0x2511, 0x252f, 0x254d, 0x256b, 0x2589, 0x25a7, 0x25c5, + 0x25e3, 0x2601, 0x261f, 0x2642, 0x2665, 0x2684, 0x26a2, 0x26c1, + 0x26e0, 0x2701, 0x271f, 0x273c, 0x275b, 0x2779, 0x2798, 0x27b7, + 0x27d3, 0x27ef, 0x280b, 0x282c, 0x2848, 0x2865, 0x288b, 0x28aa, + // Entry 6680 - 66BF + 0x28c7, 0x28e8, 0x2905, 0x2922, 0x293f, 0x295e, 0x2975, 0x2992, + 0x29ae, 0x29cb, 0x29e8, 0x2a07, 0x2a23, 0x2a3e, 0x2a5b, 0x2a77, + 0x2a94, 0x2ab1, 0x2acb, 0x2ae5, 0x2aff, 0x2b1e, 0x2b38, 0x2b53, + 0x2b76, 0x2b93, 0x2bae, 0x2bcd, 0x2be8, 0x2c03, 0x2c1e, 0x2c3b, + 0x2c61, 0x2c81, 0x2c9f, 0x2cbd, 0x2cd9, 0x2cf5, 0x2d10, 0x2d31, + 0x2d51, 0x2d72, 0x2d93, 0x2db6, 0x2dd6, 0x2df5, 0x2e16, 0x2e36, + 0x2e57, 0x2e78, 0x2e96, 0x2eb4, 0x2ed2, 0x2ef5, 0x2f13, 0x2f32, + 0x2f5a, 0x2f7b, 0x2f9a, 0x2fbd, 0x2fdc, 0x2ffb, 0x301a, 0x303b, + // Entry 66C0 - 66FF + 0x3054, 0x3073, 0x3091, 0x30b0, 0x30cf, 0x30f0, 0x310e, 0x312b, + 0x314a, 0x3168, 0x3187, 0x31a6, 0x31c2, 0x31de, 0x31fa, 0x321b, + 0x3237, 0x3254, 0x3279, 0x3298, 0x32b5, 0x32d6, 0x32f3, 0x3310, + 0x332d, 0x334c, 0x3374, 0x3396, 0x33b6, 0x33d6, 0x33f4, 0x3412, + 0x342f, 0x3455, 0x347a, 0x34a0, 0x34c6, 0x34ee, 0x3513, 0x3537, + 0x355d, 0x3582, 0x35a8, 0x35ce, 0x35f1, 0x3614, 0x3637, 0x365f, + 0x3682, 0x36a6, 0x36d3, 0x36f9, 0x371d, 0x3745, 0x3769, 0x378d, + 0x37b1, 0x37d7, 0x37f5, 0x3819, 0x383c, 0x3860, 0x3884, 0x38aa, + // Entry 6700 - 673F + 0x38cd, 0x38ef, 0x3913, 0x3936, 0x395a, 0x397e, 0x399f, 0x39c0, + 0x39e1, 0x3a07, 0x3a28, 0x3a4a, 0x3a74, 0x3a98, 0x3aba, 0x3ae0, + 0x3b02, 0x3b24, 0x3b46, 0x3b6a, 0x3b97, 0x3bbe, 0x3be3, 0x3c08, + 0x3c2b, 0x3c4e, 0x3c70, 0x3c9a, 0x3cc3, 0x3ced, 0x3d17, 0x3d43, + 0x3d6c, 0x3d94, 0x3dbe, 0x3de7, 0x3e11, 0x3e3b, 0x3e62, 0x3e89, + 0x3eb0, 0x3edc, 0x3f03, 0x3f2b, 0x3f5c, 0x3f86, 0x3fae, 0x3fda, + 0x4002, 0x402a, 0x4052, 0x407c, 0x409e, 0x40c6, 0x40ed, 0x4115, + 0x413d, 0x4167, 0x418e, 0x41b4, 0x41dc, 0x4203, 0x422b, 0x4253, + // Entry 6740 - 677F + 0x4278, 0x429d, 0x42c2, 0x42ec, 0x4311, 0x4337, 0x4365, 0x438d, + 0x43b3, 0x43dd, 0x4403, 0x4429, 0x444f, 0x4477, 0x44a8, 0x44d3, + 0x44fc, 0x4525, 0x454c, 0x4573, 0x4599, 0x45ca, 0x45fa, 0x462b, + 0x465c, 0x468f, 0x46bf, 0x46ee, 0x471f, 0x474f, 0x4780, 0x47b1, + 0x47df, 0x480d, 0x483b, 0x486e, 0x489c, 0x48cb, 0x4903, 0x4934, + 0x4963, 0x4996, 0x49c5, 0x49f4, 0x4a23, 0x4a54, 0x4a7d, 0x4aac, + 0x4ada, 0x4b09, 0x4b38, 0x4b69, 0x4b97, 0x4bc4, 0x4bf3, 0x4c21, + 0x4c50, 0x4c7f, 0x4cab, 0x4cd7, 0x4d03, 0x4d34, 0x4d60, 0x4d8d, + // Entry 6780 - 67BF + 0x4dc2, 0x4df1, 0x4e1e, 0x4e4f, 0x4e7c, 0x4ea9, 0x4ed6, 0x4f05, + 0x4f3d, 0x4f6f, 0x4f9f, 0x4fcf, 0x4ffd, 0x502b, 0x5058, 0x5079, + 0x5098, 0x50b4, 0x50cf, 0x50ea, 0x5107, 0x5123, 0x513f, 0x515a, + 0x5177, 0x5194, 0x51b0, 0x51d5, 0x51f9, 0x521d, 0x5243, 0x5268, + 0x528d, 0x52b1, 0x52d7, 0x52fd, 0x5322, 0x5344, 0x5365, 0x5386, + 0x53a9, 0x53cb, 0x53ed, 0x540e, 0x5431, 0x5454, 0x5476, 0x549d, + 0x54c3, 0x54e9, 0x5511, 0x5538, 0x555f, 0x5585, 0x55ad, 0x55d5, + 0x55fc, 0x561d, 0x563d, 0x565d, 0x567f, 0x56a0, 0x56c1, 0x56e1, + // Entry 67C0 - 67FF + 0x5703, 0x5725, 0x5746, 0x5761, 0x577e, 0x5798, 0x57b3, 0x57cf, + 0x57eb, 0x580b, 0x582d, 0x5859, 0x5883, 0x58a5, 0x58c7, 0x58ed, + 0x5910, 0x5932, 0x5956, 0x597d, 0x59af, 0x59d8, 0x5a04, 0x5a30, + 0x5a5c, 0x5a93, 0x5acb, 0x5afe, 0x5b31, 0x5b5b, 0x5b87, 0x5bb3, + 0x5bdf, 0x5c07, 0x5c31, 0x5c67, 0x5c9d, 0x5cca, 0x5d05, 0x5d3c, + 0x5d78, 0x5daf, 0x5de9, 0x5e18, 0x5e48, 0x5e77, 0x5ea6, 0x5edf, + 0x5f16, 0x5f57, 0x5f93, 0x5fc5, 0x5ff7, 0x6035, 0x606a, 0x60a4, + 0x60e5, 0x6117, 0x6149, 0x617c, 0x61b3, 0x61e9, 0x621e, 0x6251, + // Entry 6800 - 683F + 0x628a, 0x62bd, 0x62ec, 0x6322, 0x635d, 0x638f, 0x63c5, 0x63e7, + 0x640e, 0x6437, 0x6463, 0x6495, 0x64c1, 0x64f2, 0x651f, 0x6548, + 0x6576, 0x65a9, 0x65e1, 0x660f, 0x6642, 0x6679, 0x66a1, 0x66ce, + 0x66fd, 0x6726, 0x6756, 0x6791, 0x67ca, 0x67df, 0x6809, 0x6823, + 0x6843, 0x6868, 0x6888, 0x68ab, 0x68d7, 0x68f9, 0x6926, 0x6958, + 0x697a, 0x698f, 0x69af, 0x69cd, 0x69f0, 0x6a0e, 0x6a23, 0x6a3c, + 0x6a50, 0x6a74, 0x6a93, 0x6ab5, 0x6ad2, 0x6af9, 0x6b1b, 0x6b39, + 0x6b52, 0x6b69, 0x6b7e, 0x6b9e, 0x6bbc, 0x6bdf, 0x6bfa, 0x6c23, + // Entry 6840 - 687F + 0x6c39, 0x6c55, 0x6c7b, 0x6c9c, 0x6cc0, 0x6cdf, 0x6d0f, 0x6d3f, + 0x6d55, 0x6d7c, 0x6da5, 0x6dcd, 0x6df5, 0x6e12, 0x6e3e, 0x6e6f, + 0x6ea1, 0x6ec2, 0x6ef3, 0x6f22, 0x6f52, 0x6f71, 0x6f9c, 0x6fbd, + 0x6fdc, 0x6ffc, 0x7027, 0x7048, 0x7072, 0x7094, 0x70b7, 0x70df, + 0x7108, 0x7141, 0x7176, 0x7198, 0x71bc, 0x71df, 0x7202, 0x722b, + 0x7256, 0x7280, 0x729b, 0x72c5, 0x72f4, 0x7325, 0x7344, 0x737c, + 0x73b5, 0x73d2, 0x73fb, 0x741c, 0x743f, 0x7460, 0x7482, 0x74a3, + 0x74ce, 0x74ff, 0x751f, 0x753f, 0x755f, 0x7586, 0x75af, 0x75dd, + // Entry 6880 - 68BF + 0x7608, 0x7632, 0x765f, 0x7685, 0x76ad, 0x76d9, 0x7701, 0x7722, + 0x773f, 0x775e, 0x777f, 0x77aa, 0x77d4, 0x77f6, 0x781f, 0x7842, + 0x786a, 0x7894, 0x78c3, 0x78ea, 0x7913, 0x7940, 0x796c, 0x7995, + 0x79c4, 0x79f6, 0x7a2d, 0x7a63, 0x7a98, 0x7aca, 0x7aed, 0x7b13, + 0x7b3a, 0x7b6f, 0x7ba5, 0x7bd6, 0x7c07, 0x7c37, 0x7c69, 0x7ca1, + 0x7cd5, 0x7cfb, 0x7d25, 0x7d59, 0x7d8d, 0x7dc0, 0x7de8, 0x7e08, + 0x7e2d, 0x7e54, 0x7e7c, 0x7e9e, 0x7ec6, 0x7eec, 0x7f11, 0x7f33, + 0x7f4e, 0x7f6e, 0x7f97, 0x7fc1, 0x7fe6, 0x8009, 0x8039, 0x8068, + // Entry 68C0 - 68FF + 0x8097, 0x80c4, 0x80f0, 0x811f, 0x814d, 0x8182, 0x8197, 0x81b1, + 0x81c9, 0x81e3, 0x81fc, 0x8214, 0x822e, 0x8247, 0x8260, 0x827b, + 0x8295, 0x82ad, 0x82c7, 0x82e0, 0x82f6, 0x830e, 0x8325, 0x8340, + 0x835b, 0x837b, 0x839b, 0x83bd, 0x83df, 0x83fd, 0x841b, 0x8439, + 0x8459, 0x8479, 0x8495, 0x84ba, 0x84e2, 0x850a, 0x8532, 0x855c, + 0x8590, 0x85c4, 0x85f4, 0x8621, 0x864f, 0x8683, 0x86b8, 0x86ec, + 0x8722, 0x8752, 0x8780, 0x87b0, 0x87e1, 0x881d, 0x8841, 0x8878, + 0x88a8, 0x88d9, 0x8915, 0x893e, 0x8968, 0x8991, 0x89bc, 0x89e8, + // Entry 6900 - 693F + 0x8a13, 0x8a41, 0x8a6b, 0x8a96, 0x8ac0, 0x8ae8, 0x8b11, 0x8b39, + 0x8b64, 0x8b90, 0x8bbb, 0x8be5, 0x8c10, 0x8c3a, 0x8c70, 0x8ca6, + 0x8ce1, 0x8d18, 0x8d4f, 0x8d8b, 0x8daf, 0x8ddd, 0x8e0b, 0x8e39, + 0x8e61, 0x8e8a, 0x8eb2, 0x8edc, 0x8f07, 0x8f33, 0x8f5e, 0x8f8b, + 0x8fbb, 0x8fec, 0x901c, 0x904e, 0x9081, 0x90b5, 0x90e8, 0x911d, + 0x9152, 0x9188, 0x91bd, 0x91f4, 0x9225, 0x9254, 0x9285, 0x92b7, + 0x92f4, 0x9319, 0x9351, 0x9382, 0x93bd, 0x93fa, 0x941e, 0x944a, + 0x9477, 0x94a3, 0x94c8, 0x94f1, 0x951b, 0x9544, 0x9570, 0x959d, + // Entry 6940 - 697F + 0x95c9, 0x95f4, 0x9620, 0x964b, 0x9683, 0x96bb, 0x96f8, 0x972f, + 0x9766, 0x97a2, 0x97c7, 0x97f9, 0x982c, 0x985e, 0x9892, 0x98c8, + 0x98ff, 0x9935, 0x996d, 0x99ac, 0x99ec, 0x9a15, 0x9a3f, 0x9a68, + 0x9a91, 0x9abb, 0x9ae4, 0x9b14, 0x9b4a, 0x9b81, 0x9bb7, 0x9bed, + 0x9c24, 0x9c5a, 0x9c8c, 0x9cbd, 0x9cef, 0x9d14, 0x9d39, 0x9d61, + 0x9d87, 0x9dbe, 0x9df4, 0x9e2a, 0x9e60, 0x9e98, 0x9ed0, 0x9f0d, + 0x9f3f, 0x9f70, 0x9fa1, 0x9fd2, 0xa005, 0xa038, 0xa070, 0xa0a7, + 0xa0df, 0xa116, 0xa151, 0xa18c, 0xa1cd, 0xa20e, 0xa24f, 0xa290, + // Entry 6980 - 69BF + 0xa2d1, 0xa312, 0xa353, 0xa394, 0xa3ce, 0xa408, 0xa43e, 0xa474, + 0xa4af, 0xa4e8, 0xa521, 0xa560, 0xa59f, 0xa5e5, 0xa62b, 0xa66a, + 0xa6a9, 0xa6e8, 0xa727, 0xa75f, 0xa797, 0xa7cb, 0xa7ff, 0xa838, + 0xa863, 0xa88f, 0xa8ba, 0xa8e7, 0xa915, 0xa93f, 0xa969, 0xa993, + 0xa9bd, 0xa9e7, 0xaa0d, 0xaa33, 0xaa5e, 0xaa8e, 0xaac4, 0xaafb, + 0xab31, 0xab68, 0xabac, 0xabf1, 0xac35, 0xac79, 0xacbe, 0xad02, + 0xad3a, 0xad72, 0xadb2, 0xadf2, 0xae26, 0xae5a, 0xae9c, 0xaede, + 0xaf01, 0xaf24, 0xaf3c, 0xaf54, 0xaf6d, 0xaf88, 0xafa8, 0xafd4, + // Entry 69C0 - 69FF + 0xaff8, 0xb013, 0xb023, 0xb037, 0xb063, 0xb08b, 0xb0b8, 0xb0e1, + 0xb10b, 0xb12b, 0xb163, 0xb196, 0xb1d1, 0xb1f1, 0xb216, 0xb238, + 0xb260, 0xb288, 0xb2ae, 0xb2d4, 0xb2f0, 0xb30c, 0xb329, 0xb33e, + 0xb357, 0xb36e, 0xb38a, 0xb3a8, 0xb3c2, 0xb3dc, 0xb3f8, 0xb41a, + 0xb42e, 0xb446, 0xb460, 0xb480, 0xb4a6, 0xb4d3, 0xb505, 0xb52c, + 0xb55a, 0xb58d, 0xb5b1, 0xb5d6, 0xb5fc, 0xb615, 0xb62f, 0xb648, + 0xb665, 0xb684, 0xb6a0, 0xb6b0, 0xb6c8, 0xb6e0, 0xb6f9, 0xb711, + 0xb72c, 0xb746, 0xb76a, 0xb78e, 0xb7a7, 0xb7c0, 0xb7e0, 0xb800, + // Entry 6A00 - 6A3F + 0xb820, 0xb837, 0xb857, 0xb873, 0xb88a, 0xb8aa, 0xb8c6, 0xb8e3, + 0xb901, 0xb920, 0xb93b, 0xb95f, 0xb97f, 0xb99f, 0xb9c8, 0xb9ed, + 0xba03, 0xba21, 0xba40, 0xba57, 0xba76, 0xba94, 0xbab5, 0xbad5, + 0xbaf5, 0xbb0e, 0xbb2f, 0xbb50, 0xbb73, 0xbb92, 0xbbb5, 0xbbe1, + 0xbc08, 0xbc2e, 0xbc54, 0xbc7a, 0xbc8b, 0xbca5, 0xbcc0, 0xbce4, + 0xbcfd, 0xbd1f, 0xbd3a, 0xbd5c, 0xbd7f, 0xbd8f, 0xbd9f, 0xbdb5, + 0xbdd3, 0xbdf5, 0xbe1c, 0xbe44, 0xbe6b, 0xbe97, 0xbebe, 0xbee3, + 0xbf11, 0xbf2d, 0xbf46, 0xbf5f, 0xbf78, 0xbf91, 0xbfaa, 0xbfc3, + // Entry 6A40 - 6A7F + 0xbfdc, 0xbfee, 0xc012, 0xc037, 0xc052, 0xc06c, 0xc086, 0xc0a4, + 0xc0be, 0xc0df, 0xc0f0, 0xc105, 0xc11a, 0xc12b, 0xc142, 0xc15d, + 0xc178, 0xc193, 0xc1ae, 0xc1c9, 0xc1e8, 0xc207, 0xc226, 0xc245, + 0xc264, 0xc283, 0xc2a2, 0xc2c1, 0xc2e1, 0xc301, 0xc321, 0xc341, + 0xc361, 0xc381, 0xc3a1, 0xc3c0, 0xc3e0, 0xc400, 0xc423, 0xc444, + 0xc465, 0xc488, 0xc4aa, 0xc4ca, 0xc4f2, 0xc50f, 0xc531, 0xc551, + 0xc574, 0xc597, 0xc5b8, 0xc5d7, 0xc5f9, 0xc61a, 0xc63b, 0xc65d, + 0xc67c, 0xc69d, 0xc6bd, 0xc6dd, 0xc6fc, 0xc71e, 0xc73d, 0xc75d, + // Entry 6A80 - 6ABF + 0xc77d, 0xc79d, 0xc7bb, 0xc7e0, 0xc7fe, 0xc82b, 0xc84e, 0xc879, + 0xc899, 0xc8b7, 0xc8d5, 0xc8f3, 0xc912, 0xc930, 0xc94f, 0xc96d, + 0xc98c, 0xc9aa, 0xc9c8, 0xc9e6, 0xca05, 0xca23, 0xca42, 0xca60, + 0xca7f, 0xca9e, 0xcabd, 0xcadc, 0xcafb, 0xcb1a, 0xcb39, 0xcb58, + 0xcb77, 0xcb96, 0xcbb6, 0xcbd6, 0xcbf4, 0xcc12, 0xcc30, 0xcc4f, + 0xcc6d, 0xcc8c, 0xccaa, 0xccc7, 0xcce4, 0xcd01, 0xcd1f, 0xcd3c, + 0xcd5a, 0xcd77, 0xcd95, 0xcdb3, 0xcdd1, 0xcdef, 0xce0d, 0xce2b, + 0xce49, 0xce67, 0xce86, 0xcea4, 0xcec3, 0xcee1, 0xcf00, 0xcf1e, + // Entry 6AC0 - 6AFF + 0xcf3c, 0xcf5a, 0xcf79, 0xcf97, 0xcfb6, 0xcfd4, 0xcff7, 0xd015, + 0xd033, 0xd051, 0xd070, 0xd08f, 0xd0ad, 0xd0cb, 0xd0e9, 0xd107, + 0xd126, 0xd144, 0xd163, 0xd181, 0xd19f, 0xd1bd, 0xd1db, 0xd1fa, + 0xd218, 0xd237, 0xd255, 0xd278, 0xd296, 0xd2b4, 0xd2d2, 0xd2f1, + 0xd30f, 0xd32e, 0xd34c, 0xd36a, 0xd388, 0xd3a6, 0xd3c5, 0xd3e3, + 0xd402, 0xd420, 0xd43f, 0xd45e, 0xd47d, 0xd49c, 0xd4bb, 0xd4da, + 0xd4f9, 0xd517, 0xd535, 0xd553, 0xd572, 0xd590, 0xd5af, 0xd5cd, + 0xd5ed, 0xd60d, 0xd62c, 0xd64b, 0xd66a, 0xd689, 0xd6a8, 0xd6c8, + // Entry 6B00 - 6B3F + 0xd6e8, 0xd708, 0xd728, 0xd749, 0xd769, 0xd78a, 0xd7aa, 0xd7cb, + 0xd7ec, 0xd811, 0xd837, 0xd85c, 0xd87a, 0xd898, 0xd8b6, 0xd8d5, + 0xd8f5, 0xd915, 0xd935, 0xd955, 0xd976, 0xd994, 0xd9b2, 0xd9d0, + 0xd9ef, 0xda0d, 0xda2c, 0xda4a, 0xda69, 0xda88, 0xdaa7, 0xdac7, + 0xdae7, 0xdb06, 0xdb26, 0xdb45, 0xdb65, 0xdb89, 0xdbae, 0xdbd2, + 0xdbf1, 0xdc10, 0xdc2f, 0xdc4f, 0xdc6e, 0xdc8e, 0xdcad, 0xdccc, + 0xdceb, 0xdd0a, 0xdd2a, 0xdd49, 0xdd69, 0xdd88, 0xdda6, 0xddc5, + 0xdde4, 0xde03, 0xde23, 0xde42, 0xde62, 0xde81, 0xdea0, 0xdebf, + // Entry 6B40 - 6B7F + 0xdedf, 0xdeff, 0xdf1d, 0xdf3b, 0xdf59, 0xdf78, 0xdf96, 0xdfb5, + 0xdfd3, 0xdff3, 0xe013, 0xe033, 0xe053, 0xe073, 0xe08a, 0xe0a1, + 0xe0ba, 0xe0d2, 0xe0ea, 0xe101, 0xe11a, 0xe133, 0xe14b, 0xe16f, + 0xe192, 0xe1b9, 0xe1e1, 0xe20d, 0xe23d, 0xe264, 0xe27d, 0xe297, + 0xe2b0, 0xe2c9, 0xe2e0, 0xe2ff, 0xe316, 0xe32e, 0xe345, 0xe35b, + 0xe372, 0xe388, 0xe39e, 0xe3b6, 0xe3ce, 0xe3e6, 0xe3fe, 0xe416, + 0xe42d, 0xe443, 0xe45c, 0xe474, 0xe48b, 0xe4a4, 0xe4bb, 0xe4d3, + 0xe4ea, 0xe502, 0xe519, 0xe531, 0xe549, 0xe561, 0xe579, 0xe591, + // Entry 6B80 - 6BBF + 0xe5a8, 0xe5c0, 0xe5d7, 0xe5ee, 0xe603, 0xe620, 0xe635, 0xe64b, + 0xe660, 0xe674, 0xe689, 0xe69d, 0xe6b1, 0xe6c7, 0xe6dd, 0xe6f3, + 0xe709, 0xe71f, 0xe734, 0xe748, 0xe75f, 0xe775, 0xe78a, 0xe7a1, + 0xe7b6, 0xe7cc, 0xe7e1, 0xe7f7, 0xe80c, 0xe822, 0xe838, 0xe84e, + 0xe864, 0xe87a, 0xe88f, 0xe8a5, 0xe8ba, 0xe8c5, 0xe8dd, 0xe8fe, + 0xe909, 0xe919, 0xe928, 0xe937, 0xe948, 0xe958, 0xe968, 0xe977, + 0xe988, 0xe999, 0xe9a9, 0xe9c7, 0xe9e2, 0xe9fa, 0xea11, 0xea29, + 0xea40, 0xea57, 0xea6f, 0xea86, 0xea9d, 0xeab4, 0xeacb, 0xeae2, + // Entry 6BC0 - 6BFF + 0xeafa, 0xeb12, 0xeb2a, 0xeb41, 0xeb58, 0xeb6f, 0xeb86, 0xeb9d, + 0xebb6, 0xebcd, 0xebe5, 0xebfd, 0xec15, 0xec2c, 0xec43, 0xec5c, + 0xec7b, 0xec9b, 0xecba, 0xecd9, 0xecf8, 0xed18, 0xed37, 0xed56, + 0xed75, 0xed94, 0xedb3, 0xedd3, 0xedf3, 0xee13, 0xee32, 0xee51, + 0xee70, 0xee8f, 0xeeb0, 0xeecf, 0xeeef, 0xef0f, 0xef2e, 0xef4f, + 0xef6e, 0xef8c, 0xefaa, 0xefc8, 0xefe7, 0xf006, 0xf024, 0xf042, + 0xf060, 0xf080, 0xf09f, 0xf0bd, 0xf0dd, 0xf104, 0xf12a, 0xf14b, + 0xf16d, 0xf18e, 0xf1af, 0xf1d0, 0xf1f1, 0xf212, 0xf234, 0xf256, + // Entry 6C00 - 6C3F + 0xf278, 0xf299, 0xf2ba, 0xf2db, 0xf2fc, 0xf31f, 0xf340, 0xf362, + 0xf384, 0xf3a5, 0xf3c6, 0xf3e9, 0xf412, 0xf43b, 0xf45a, 0xf478, + 0xf497, 0xf4b5, 0xf4d3, 0xf4f1, 0xf510, 0xf52e, 0xf54c, 0xf56a, + 0xf588, 0xf5a7, 0xf5c6, 0xf5e5, 0xf603, 0xf621, 0xf63f, 0xf65d, + 0xf67b, 0xf69b, 0xf6b9, 0xf6d8, 0xf6f7, 0xf716, 0xf734, 0xf752, + 0xf772, 0xf797, 0xf7bd, 0xf7e2, 0xf807, 0xf82d, 0xf852, 0xf877, + 0xf89c, 0xf8c1, 0xf8e7, 0xf90d, 0xf933, 0xf958, 0xf97d, 0xf9a2, + 0xf9c7, 0xf9ec, 0xfa13, 0xfa38, 0xfa5e, 0xfa84, 0xfaaa, 0xfacf, + // Entry 6C40 - 6C7F + 0xfaf4, 0xfb1b, 0xfb52, 0xfb7b, 0xfb91, 0xfba8, 0xfbbe, 0xfbd5, + 0xfbec, 0xfc05, 0xfc1e, 0xfc3c, 0xfc5a, 0xfc7a, 0xfc99, 0xfcb8, + 0xfcd6, 0xfcf6, 0xfd16, 0xfd35, 0xfd50, 0xfd6b, 0xfd88, 0xfda4, + 0xfdc0, 0xfddb, 0xfdf8, 0xfe15, 0xfe31, 0xfe4c, 0xfe67, 0xfe84, + 0xfea0, 0xfebc, 0xfed7, 0xfef4, 0xff11, 0xff2d, 0xff3e, 0xff51, + 0xff64, 0xff7e, 0xff91, 0xffa4, 0xffb7, 0xffca, 0xffdc, 0xffed, + 0x0008, 0x0024, 0x0040, 0x005c, 0x0078, 0x0094, 0x00b0, 0x00cc, + 0x00e8, 0x0104, 0x0120, 0x013c, 0x0158, 0x0174, 0x0190, 0x01ac, + // Entry 6C80 - 6CBF + 0x01c8, 0x01e4, 0x0200, 0x021c, 0x0238, 0x0254, 0x0270, 0x028c, + 0x02a8, 0x02c4, 0x02e0, 0x02fc, 0x0318, 0x0334, 0x0350, 0x036c, + 0x0388, 0x03a4, 0x03c0, 0x03dc, 0x03f8, 0x0414, 0x0430, 0x044c, + 0x0468, 0x0484, 0x04a0, 0x04bc, 0x04d8, 0x04f4, 0x0510, 0x052c, + 0x0548, 0x0564, 0x057d, 0x0597, 0x05b1, 0x05cb, 0x05e5, 0x05ff, + 0x0619, 0x0633, 0x064d, 0x0667, 0x0681, 0x069b, 0x06b5, 0x06cf, + 0x06e9, 0x0703, 0x071d, 0x0737, 0x0751, 0x076b, 0x0785, 0x079f, + 0x07b9, 0x07d3, 0x07ed, 0x0807, 0x0821, 0x083b, 0x0855, 0x086f, + // Entry 6CC0 - 6CFF + 0x0889, 0x08a3, 0x08bd, 0x08d7, 0x08f1, 0x090b, 0x0925, 0x093f, + 0x0959, 0x0973, 0x098d, 0x09a7, 0x09c1, 0x09db, 0x09f5, 0x0a0f, + 0x0a29, 0x0a43, 0x0a5d, 0x0a77, 0x0a88, 0x0aa2, 0x0abc, 0x0ad8, + 0x0af3, 0x0b0e, 0x0b28, 0x0b44, 0x0b60, 0x0b7b, 0x0b95, 0x0bb0, + 0x0bcd, 0x0be9, 0x0c04, 0x0c1e, 0x0c38, 0x0c54, 0x0c6f, 0x0c8a, + 0x0ca4, 0x0cc0, 0x0cdc, 0x0cf7, 0x0d11, 0x0d2c, 0x0d49, 0x0d65, + 0x0d80, 0x0d96, 0x0db2, 0x0dce, 0x0dec, 0x0e09, 0x0e26, 0x0e42, + 0x0e60, 0x0e7e, 0x0e9b, 0x0eb7, 0x0ed4, 0x0ef3, 0x0f11, 0x0f2e, + // Entry 6D00 - 6D3F + 0x0f46, 0x0f5f, 0x0f78, 0x0f93, 0x0fad, 0x0fc7, 0x0fe0, 0x0ffb, + 0x1016, 0x1030, 0x1049, 0x1063, 0x107f, 0x109a, 0x10b4, 0x10cc, + 0x10dd, 0x10f1, 0x1105, 0x1119, 0x112d, 0x1141, 0x1155, 0x1169, + 0x117d, 0x1191, 0x11a6, 0x11bb, 0x11d0, 0x11e5, 0x11fa, 0x120f, + 0x1224, 0x1239, 0x124e, 0x1263, 0x1278, 0x128d, 0x12a1, 0x12b1, + 0x12c0, 0x12cf, 0x12e0, 0x12f0, 0x1300, 0x130f, 0x1320, 0x1331, + 0x1341, 0x1366, 0x1394, 0x13b8, 0x13dc, 0x1400, 0x1424, 0x1448, + 0x146c, 0x1490, 0x14b4, 0x14d8, 0x14fc, 0x1520, 0x1544, 0x1568, + // Entry 6D40 - 6D7F + 0x158c, 0x15b0, 0x15d4, 0x15f8, 0x161c, 0x1640, 0x1664, 0x1688, + 0x16ac, 0x16d0, 0x16f4, 0x1718, 0x173c, 0x176b, 0x1790, 0x17b5, + 0x17bf, 0x17c9, 0x17e7, 0x1805, 0x1823, 0x1841, 0x185f, 0x187d, + 0x189b, 0x18b9, 0x18d7, 0x18f5, 0x1913, 0x1931, 0x194f, 0x196d, + 0x198b, 0x19a9, 0x19c7, 0x19e5, 0x1a03, 0x1a21, 0x1a3f, 0x1a5d, + 0x1a7b, 0x1a99, 0x1ab7, 0x1ad5, 0x1adf, 0x1ae9, 0x1af3, 0x1afd, + 0x1b08, 0x1b12, 0x1b39, 0x1b60, 0x1b87, 0x1bae, 0x1bd5, 0x1bfc, + 0x1c23, 0x1c4a, 0x1c71, 0x1c98, 0x1cbf, 0x1ce6, 0x1d0d, 0x1d34, + // Entry 6D80 - 6DBF + 0x1d5b, 0x1d82, 0x1da9, 0x1dd0, 0x1df7, 0x1e1e, 0x1e45, 0x1e6c, + 0x1e93, 0x1eba, 0x1ee1, 0x1f08, 0x1f16, 0x1f24, 0x1f4b, 0x1f72, + 0x1f99, 0x1fc0, 0x1fe7, 0x200e, 0x2035, 0x205c, 0x2083, 0x20aa, + 0x20d1, 0x20f8, 0x211f, 0x2146, 0x216d, 0x2194, 0x21bb, 0x21e2, + 0x2209, 0x2230, 0x2257, 0x227e, 0x22a5, 0x22cc, 0x22f3, 0x231a, + 0x2349, 0x235c, 0x236f, 0x2382, 0x2395, 0x23a8, 0x23b1, 0x23bb, + 0x23c7, 0x23d3, 0x23dd, 0x23e8, 0x23f2, 0x23fc, 0x2407, 0x2427, + 0x2431, 0x2440, 0x2455, 0x2462, 0x2470, 0x247f, 0x2495, 0x24ac, + // Entry 6DC0 - 6DFF + 0x24c8, 0x24d7, 0x24f3, 0x250f, 0x2519, 0x2524, 0x2532, 0x2542, + 0x254d, 0x2558, 0x2563, 0x2585, 0x25a7, 0x25c9, 0x25eb, 0x260d, + 0x262f, 0x2651, 0x2673, 0x2695, 0x26b7, 0x26d9, 0x26fb, 0x271d, + 0x273f, 0x2761, 0x2783, 0x27a5, 0x27c7, 0x27e9, 0x280b, 0x282d, + 0x284f, 0x2871, 0x2893, 0x28b5, 0x28d7, 0x28eb, 0x2900, 0x2913, + 0x2935, 0x2957, 0x2979, 0x298c, 0x29ae, 0x29d0, 0x29f2, 0x2a14, + 0x2a36, 0x2a58, 0x2a7a, 0x2a9c, 0x2abe, 0x2ae0, 0x2b02, 0x2b24, + 0x2b46, 0x2b68, 0x2b8a, 0x2bac, 0x2bce, 0x2bf0, 0x2c12, 0x2c34, + // Entry 6E00 - 6E3F + 0x2c56, 0x2c78, 0x2c9a, 0x2cbc, 0x2cde, 0x2d00, 0x2d22, 0x2d44, + 0x2d66, 0x2d88, 0x2daa, 0x2dcc, 0x2dee, 0x2e10, 0x2e32, 0x2e54, + 0x2e76, 0x2e98, 0x2eba, 0x2edc, 0x2f0f, 0x2f42, 0x2f75, 0x2fa8, + 0x2fdb, 0x300e, 0x3041, 0x3074, 0x30a7, 0x30c2, 0x30da, 0x30e1, + 0x30e6, 0x30f5, 0x3105, 0x311b, 0x3122, 0x3133, 0x3148, 0x314f, + 0x315e, 0x3168, 0x316f, 0x3178, 0x3191, 0x31a5, 0x31bf, 0x31d3, + 0x31e2, 0x31fd, 0x3216, 0x3230, 0x3240, 0x325a, 0x3272, 0x328d, + 0x329a, 0x32ac, 0x32c8, 0x32e3, 0x32f6, 0x3303, 0x330f, 0x331c, + // Entry 6E40 - 6E7F + 0x3327, 0x3334, 0x333d, 0x3357, 0x336d, 0x338d, 0x339c, 0x33ab, + 0x33bf, 0x33d1, 0x33d4, 0x33e5, 0x33ec, 0x33f0, 0x33f7, 0x33ff, + 0x3407, 0x3415, 0x3423, 0x342c, 0x3432, 0x343c, 0x3441, 0x344f, + 0x3453, 0x345b, 0x3464, 0x346b, 0x3477, 0x3482, 0x3486, 0x3496, + 0x34a0, 0x34ab, 0x34c2, 0x34ca, 0x34d0, 0x34d9, 0x34df, 0x34e4, + 0x34ee, 0x34f7, 0x34fc, 0x3502, 0x350b, 0x3514, 0x351f, 0x3523, + 0x3528, 0x3530, 0x353a, 0x3543, 0x3551, 0x355d, 0x3568, 0x3574, + 0x357d, 0x3588, 0x3596, 0x35a3, 0x35ac, 0x35b1, 0x35bd, 0x35d1, + // Entry 6E80 - 6EBF + 0x35d6, 0x35da, 0x35df, 0x35eb, 0x3606, 0x3614, 0x361e, 0x3627, + 0x362f, 0x3635, 0x3642, 0x3647, 0x364f, 0x3656, 0x365f, 0x3668, + 0x3671, 0x367c, 0x3683, 0x3691, 0x36a6, 0x36b9, 0x36c3, 0x36d1, + 0x36df, 0x36e7, 0x36f9, 0x3704, 0x371d, 0x3735, 0x373c, 0x3742, + 0x3751, 0x375e, 0x376c, 0x377a, 0x378a, 0x3793, 0x37a4, 0x37ab, + 0x37b7, 0x37c4, 0x37d1, 0x37de, 0x37ed, 0x37fb, 0x3808, 0x3812, + 0x3827, 0x3835, 0x3843, 0x385d, 0x386f, 0x387d, 0x388c, 0x38a7, + 0x38b8, 0x38c4, 0x38d1, 0x38ef, 0x390e, 0x3919, 0x392a, 0x3938, + // Entry 6EC0 - 6EFF + 0x3944, 0x3952, 0x3967, 0x3971, 0x397d, 0x3983, 0x398c, 0x399a, + 0x39a1, 0x39ac, 0x39b2, 0x39bf, 0x39ce, 0x39d8, 0x39e2, 0x39ee, + 0x39f7, 0x39ff, 0x3a06, 0x3a1a, 0x3a26, 0x3a3c, 0x3a45, 0x3a4b, + 0x3a5b, 0x3a62, 0x3a68, 0x3a75, 0x3a8c, 0x3aa3, 0x3ab3, 0x3ac6, + 0x3ad4, 0x3adf, 0x3ae5, 0x3aeb, 0x3af7, 0x3afd, 0x3b09, 0x3b1a, + 0x3b28, 0x3b2f, 0x3b3c, 0x3b42, 0x3b53, 0x3b5d, 0x3b71, 0x3b7b, + 0x3b96, 0x3baf, 0x3bcb, 0x3bdf, 0x3be6, 0x3bf9, 0x3c0e, 0x3c1d, + 0x3c26, 0x3c3d, 0x3c4f, 0x3c55, 0x3c62, 0x3c6f, 0x3c76, 0x3c84, + // Entry 6F00 - 6F3F + 0x3c95, 0x3ca4, 0x3cb8, 0x3ccc, 0x3cd4, 0x3cd8, 0x3cf0, 0x3cf5, + 0x3cff, 0x3d10, 0x3d16, 0x3d26, 0x3d2d, 0x3d3c, 0x3d4b, 0x3d5a, + 0x3d67, 0x3d74, 0x3d85, 0x3d96, 0x3d9d, 0x3daa, 0x3daf, 0x3dd0, + 0x3ddd, 0x3de4, 0x3e07, 0x3e28, 0x3e49, 0x3e6a, 0x3e8b, 0x3e8e, + 0x3e93, 0x3e95, 0x3ea2, 0x3ea5, 0x3eaa, 0x3eb1, 0x3eb7, 0x3eba, + 0x3ec0, 0x3ec9, 0x3ece, 0x3ed3, 0x3ed8, 0x3edd, 0x3ee0, 0x3ee4, + 0x3ee9, 0x3eef, 0x3ef6, 0x3efd, 0x3f00, 0x3f03, 0x3f07, 0x3f0f, + 0x3f16, 0x3f22, 0x3f25, 0x3f28, 0x3f30, 0x3f3b, 0x3f3f, 0x3f4c, + // Entry 6F40 - 6F7F + 0x3f54, 0x3f5a, 0x3f68, 0x3f72, 0x3f89, 0x3f8d, 0x3f94, 0x3f99, + 0x3f9f, 0x3fae, 0x3fbc, 0x3fc3, 0x3fcd, 0x3fd5, 0x3fdf, 0x3fea, + 0x3ff2, 0x3ffd, 0x400b, 0x4015, 0x4020, 0x4028, 0x4030, 0x4039, + 0x4045, 0x404e, 0x4057, 0x4061, 0x4069, 0x4073, 0x407b, 0x407f, + 0x4082, 0x4085, 0x4089, 0x408e, 0x4094, 0x40b4, 0x40d6, 0x40f8, + 0x411b, 0x412b, 0x413b, 0x4147, 0x4155, 0x4165, 0x4178, 0x4187, + 0x418c, 0x4196, 0x41a0, 0x41a7, 0x41ae, 0x41b3, 0x41b8, 0x41be, + 0x41c4, 0x41d2, 0x41d7, 0x41de, 0x41e3, 0x41ec, 0x41f9, 0x4209, + // Entry 6F80 - 6FBF + 0x4216, 0x4222, 0x422c, 0x423e, 0x4251, 0x4254, 0x4258, 0x425b, + 0x4260, 0x4266, 0x4281, 0x4296, 0x42ad, 0x42bb, 0x42d0, 0x42df, + 0x42f5, 0x4308, 0x4317, 0x4320, 0x432b, 0x432f, 0x4342, 0x434a, + 0x4357, 0x4366, 0x436b, 0x4375, 0x438b, 0x4398, 0x439b, 0x43a0, + 0x43b7, 0x43c0, 0x43c6, 0x43ce, 0x43d9, 0x43e5, 0x43ec, 0x43f7, + 0x43fe, 0x4402, 0x440b, 0x4416, 0x441a, 0x4423, 0x4427, 0x442e, + 0x443f, 0x4446, 0x4453, 0x445f, 0x4469, 0x4478, 0x4485, 0x4495, + 0x449f, 0x44aa, 0x44b6, 0x44c2, 0x44d3, 0x44e3, 0x44f3, 0x4512, + // Entry 6FC0 - 6FFF + 0x4525, 0x4531, 0x4535, 0x4544, 0x4554, 0x456a, 0x4571, 0x457c, + 0x4587, 0x4594, 0x45a0, 0x45ae, 0x45bd, 0x45c9, 0x45de, 0x45e7, + 0x45f8, 0x4609, 0x4614, 0x462a, 0x4643, 0x465a, 0x4672, 0x4682, + 0x46a7, 0x46ab, 0x46bc, 0x46c5, 0x46cd, 0x46d8, 0x46e4, 0x46e7, + 0x46f2, 0x4702, 0x4710, 0x471e, 0x4726, 0x4737, 0x4741, 0x4759, + 0x4773, 0x477c, 0x4785, 0x478c, 0x4799, 0x47a2, 0x47b0, 0x47c0, + 0x47cd, 0x47d3, 0x47db, 0x47f9, 0x4804, 0x480d, 0x4817, 0x4820, + 0x482b, 0x4830, 0x483a, 0x4840, 0x4844, 0x4856, 0x485b, 0x4866, + // Entry 7000 - 703F + 0x4877, 0x4891, 0x48a3, 0x48ae, 0x48b8, 0x48bf, 0x48cc, 0x48dd, + 0x4900, 0x4920, 0x493f, 0x495c, 0x497a, 0x4981, 0x498c, 0x4995, + 0x49a1, 0x49cb, 0x49d9, 0x49e9, 0x49f9, 0x4a0a, 0x4a10, 0x4a21, + 0x4a2d, 0x4a37, 0x4a3c, 0x4a49, 0x4a57, 0x4a66, 0x4a72, 0x4a8b, + 0x4ac0, 0x4b0e, 0x4b40, 0x4b76, 0x4b8b, 0x4ba1, 0x4bc1, 0x4bc8, + 0x4be3, 0x4c01, 0x4c08, 0x4c15, 0x4c33, 0x4c52, 0x4c63, 0x4c77, + 0x4c7a, 0x4c7e, 0x4c87, 0x4c8b, 0x4ca8, 0x4cb0, 0x4cbb, 0x4cc7, + 0x4ce6, 0x4d04, 0x4d38, 0x4d58, 0x4d74, 0x4d90, 0x4d9a, 0x4dc0, + // Entry 7040 - 707F + 0x4de4, 0x4dfc, 0x4e14, 0x4e32, 0x4e36, 0x4e44, 0x4e4a, 0x4e50, + 0x4e5c, 0x4e61, 0x4e67, 0x4e71, 0x4e7a, 0x4e86, 0x4ea6, 0x4ec2, + 0x4ed0, 0x4ee3, 0x4ef6, 0x4f06, 0x4f17, 0x4f2b, 0x4f3d, 0x4f51, + 0x4f63, 0x4f7b, 0x4f95, 0x4fb3, 0x4fd3, 0x4ff4, 0x5015, 0x5029, + 0x504c, 0x5058, 0x507f, 0x50a7, 0x50bf, 0x50d0, 0x50e1, 0x50ed, + 0x50f6, 0x5103, 0x5108, 0x510e, 0x5117, 0x5131, 0x5140, 0x5155, + 0x516a, 0x5181, 0x5197, 0x51ad, 0x51c2, 0x51d9, 0x51f0, 0x5206, + 0x521b, 0x5233, 0x524b, 0x5260, 0x5275, 0x528c, 0x52a2, 0x52b8, + // Entry 7080 - 70BF + 0x52cd, 0x52e4, 0x52fb, 0x5311, 0x5326, 0x533e, 0x5356, 0x5363, + 0x5384, 0x53a8, 0x53b0, 0x53c9, 0x53d5, 0x53d9, 0x53df, 0x53f0, + 0x540a, 0x5413, 0x5417, 0x5436, 0x5443, 0x5452, 0x5458, 0x5462, + 0x546a, 0x5475, 0x5491, 0x54ad, 0x54ca, 0x54e3, 0x54fc, 0x5515, + 0x552b, 0x553b, 0x554b, 0x5562, 0x5571, 0x558a, 0x559b, 0x55a8, + 0x55b9, 0x55d1, 0x55e8, 0x55fd, 0x560e, 0x561f, 0x5632, 0x5652, + 0x567b, 0x5692, 0x56ab, 0x56c0, 0x56e9, 0x571e, 0x5741, 0x5763, + 0x5786, 0x57a8, 0x57cb, 0x57ed, 0x5810, 0x5830, 0x5852, 0x5872, + // Entry 70C0 - 70FF + 0x5894, 0x58b4, 0x58d6, 0x58e1, 0x58f1, 0x5903, 0x591c, 0x5923, + 0x5934, 0x5950, 0x596c, 0x5982, 0x5990, 0x599e, 0x59ae, 0x59be, + 0x59d0, 0x59d9, 0x59ee, 0x59f7, 0x59fd, 0x5a09, 0x5a11, 0x5a22, + 0x5a34, 0x5a52, 0x5a67, 0x5a79, 0x5a89, 0x5a98, 0x5aa4, 0x5aaa, + 0x5ab5, 0x5ac8, 0x5ad5, 0x5ae1, 0x5aeb, 0x5afa, 0x5b08, 0x5b0c, + 0x5b15, 0x5b1d, 0x5b2b, 0x5b35, 0x5b40, 0x5b48, 0x5b4c, 0x5b51, + 0x5b5c, 0x5b6b, 0x5b7e, 0x5b8c, 0x5b94, 0x5b9c, 0x5ba3, 0x5bcd, + 0x5bdb, 0x5bf4, 0x5c0d, 0x5c18, 0x5c1f, 0x5c32, 0x5c48, 0x5c53, + // Entry 7100 - 713F + 0x5c5f, 0x5c63, 0x5c7e, 0x5c8e, 0x5c9e, 0x5cad, 0x5cbd, 0x5ccf, + 0x5ce2, 0x5cf4, 0x5d08, 0x5d1b, 0x5d2f, 0x5d40, 0x5d52, 0x5d5d, + 0x5d72, 0x5d80, 0x5d96, 0x5da5, 0x5dbd, 0x5dd1, 0x5dee, 0x5dfe, + 0x5e18, 0x5e21, 0x5e2b, 0x5e36, 0x5e47, 0x5e5a, 0x5e5f, 0x5e6c, + 0x5e8b, 0x5ea1, 0x5ebd, 0x5eea, 0x5f15, 0x5f49, 0x5f5f, 0x5f76, + 0x5f82, 0x5fa0, 0x5fbd, 0x5fca, 0x5fed, 0x6009, 0x6016, 0x6022, + 0x6035, 0x6042, 0x6056, 0x6062, 0x606f, 0x607e, 0x608a, 0x609e, + 0x60bc, 0x60d9, 0x60f3, 0x611d, 0x614f, 0x6160, 0x616c, 0x6176, + // Entry 7140 - 717F + 0x6182, 0x618d, 0x619d, 0x61b6, 0x61d4, 0x61f1, 0x61ff, 0x620b, + 0x6215, 0x6220, 0x622a, 0x6238, 0x624a, 0x625e, 0x6269, 0x628c, + 0x62a2, 0x62b1, 0x62bd, 0x62ca, 0x62d4, 0x62e6, 0x62fc, 0x631f, + 0x6339, 0x6359, 0x6380, 0x6397, 0x63b8, 0x63c8, 0x63d7, 0x63e5, + 0x63fb, 0x6410, 0x6420, 0x6436, 0x644f, 0x6463, 0x6477, 0x6489, + 0x649c, 0x64b0, 0x64cd, 0x64f5, 0x6504, 0x651c, 0x6534, 0x654c, + 0x6564, 0x657c, 0x6594, 0x65b3, 0x65d2, 0x65f1, 0x6610, 0x662d, + 0x664a, 0x6667, 0x6684, 0x66a7, 0x66ca, 0x66ed, 0x6710, 0x6727, + // Entry 7180 - 71BF + 0x673e, 0x6755, 0x676c, 0x6789, 0x67a6, 0x67c3, 0x67e0, 0x67fc, + 0x6828, 0x6843, 0x686e, 0x687e, 0x688c, 0x689d, 0x68ad, 0x68c8, + 0x68e9, 0x6902, 0x6921, 0x6939, 0x6951, 0x698d, 0x69c2, 0x69fb, + 0x6a15, 0x6a34, 0x6a59, 0x6a6b, 0x6a85, 0x6a92, 0x6aa7, 0x6aad, + 0x6ab7, 0x6ac7, 0x6ad2, 0x6ae2, 0x6b03, 0x6b08, 0x6b0d, 0x6b17, + 0x6b1e, 0x6b22, 0x6b2a, 0x6b2d, 0x6b39, 0x6b43, 0x6b4b, 0x6b52, + 0x6b5b, 0x6b66, 0x6b70, 0x6b83, 0x6b87, 0x6b94, 0x6b9e, 0x6bb1, + 0x6bc5, 0x6bd3, 0x6be4, 0x6beb, 0x6bf3, 0x6c03, 0x6c15, 0x6c26, + // Entry 71C0 - 71FF + 0x6c34, 0x6c38, 0x6c3f, 0x6c48, 0x6c60, 0x6c76, 0x6c87, 0x6ca2, + 0x6cb9, 0x6cbd, 0x6cca, 0x6cd8, 0x6ce9, 0x6d07, 0x6d1b, 0x6d2f, + 0x6d47, 0x6d4e, 0x6d59, 0x6d62, 0x6d74, 0x6d7e, 0x6d8c, 0x6d9d, + 0x6da8, 0x6db5, 0x6dbd, 0x6dc8, 0x6dce, 0x6dda, 0x6de0, 0x6de4, + 0x6deb, 0x6dfb, 0x6e02, 0x6e0f, 0x6e1b, 0x6e38, 0x6e47, 0x6e61, + 0x6e6c, 0x6e78, 0x6e86, 0x6e9c, 0x6ea9, 0x6eb5, 0x6eb8, 0x6ec8, + 0x6ed6, 0x6ee6, 0x6ef7, 0x6efd, 0x6f05, 0x6f0d, 0x6f1a, 0x6f24, + 0x6f41, 0x6f55, 0x6f6f, 0x6f7d, 0x6f98, 0x6faa, 0x6fbb, 0x6fc4, + // Entry 7200 - 723F + 0x6fd8, 0x6fe9, 0x6ff7, 0x6ffe, 0x700b, 0x7010, 0x7032, 0x704b, + 0x7065, 0x7080, 0x709b, 0x70bb, 0x70db, 0x70fd, 0x711d, 0x713f, + 0x715c, 0x717b, 0x719a, 0x71b6, 0x71df, 0x7201, 0x7228, 0x7251, + 0x727a, 0x7298, 0x72b2, 0x72cd, 0x72ea, 0x7309, 0x7328, 0x7349, + 0x7363, 0x737f, 0x739d, 0x73bd, 0x73e1, 0x7406, 0x7426, 0x744b, + 0x7474, 0x749a, 0x74c2, 0x74ea, 0x751a, 0x754b, 0x756a, 0x7587, + 0x75a5, 0x75c7, 0x75f2, 0x7618, 0x764b, 0x7674, 0x769d, 0x76c8, + 0x76e5, 0x7704, 0x7723, 0x7742, 0x775e, 0x777c, 0x779b, 0x77bd, + // Entry 7240 - 727F + 0x77da, 0x77f7, 0x7816, 0x7837, 0x7858, 0x7874, 0x7892, 0x78b2, + 0x78cd, 0x78ea, 0x7907, 0x7921, 0x793a, 0x7956, 0x7974, 0x798d, + 0x79a6, 0x79c2, 0x79dc, 0x79f7, 0x7a1a, 0x7a3f, 0x7a5d, 0x7a7a, + 0x7a9f, 0x7abe, 0x7ad8, 0x7af3, 0x7b13, 0x7b2e, 0x7b4d, 0x7b68, + 0x7b8c, 0x7ba9, 0x7bd4, 0x7c01, 0x7c22, 0x7c43, 0x7c60, 0x7c7e, + 0x7c9e, 0x7cba, 0x7cdc, 0x7cfa, 0x7d1a, 0x7d3a, 0x7d5a, 0x7d7a, + 0x7d97, 0x7db9, 0x7dde, 0x7dfa, 0x7e14, 0x7e2f, 0x7e4e, 0x7e69, + 0x7e88, 0x7ea8, 0x7ed4, 0x7efe, 0x7f2b, 0x7f57, 0x7f72, 0x7f8a, + // Entry 7280 - 72BF + 0x7f9b, 0x7fad, 0x7fc4, 0x7fe0, 0x800a, 0x8016, 0x8027, 0x8042, + 0x8054, 0x8067, 0x8078, 0x808a, 0x80a1, 0x80bd, 0x80ec, 0x8117, + 0x8124, 0x8136, 0x814e, 0x8168, 0x8199, 0x81c6, 0x81d4, 0x81e6, + 0x81fe, 0x8218, 0x8244, 0x8254, 0x8265, 0x8277, 0x8287, 0x829c, + 0x82b2, 0x82cd, 0x82d9, 0x82e6, 0x82f4, 0x8300, 0x830d, 0x831f, + 0x8336, 0x8350, 0x836b, 0x8384, 0x839e, 0x83bd, 0x83e1, 0x83fa, + 0x8414, 0x842c, 0x8445, 0x8463, 0x8486, 0x84a1, 0x84bd, 0x84d7, + 0x84f2, 0x8512, 0x8530, 0x854f, 0x8567, 0x8589, 0x85a6, 0x85c4, + // Entry 72C0 - 72FF + 0x85db, 0x85fc, 0x8624, 0x8641, 0x865e, 0x867b, 0x8697, 0x86b0, + 0x86cf, 0x86ed, 0x8710, 0x8731, 0x8750, 0x876f, 0x8791, 0x87be, + 0x87e9, 0x8817, 0x8844, 0x8872, 0x889e, 0x88cd, 0x88fb, 0x8928, + 0x8953, 0x8981, 0x89ae, 0x89de, 0x8a0c, 0x8a3d, 0x8a6d, 0x8a97, + 0x8abf, 0x8aea, 0x8b14, 0x8b44, 0x8b72, 0x8ba3, 0x8bd3, 0x8c09, + 0x8c3d, 0x8c74, 0x8caa, 0x8cdb, 0x8d0a, 0x8d3c, 0x8d6d, 0x8d9e, + 0x8dcd, 0x8dff, 0x8e30, 0x8e5f, 0x8e8c, 0x8ebc, 0x8eeb, 0x8f1b, + 0x8f49, 0x8f7a, 0x8faa, 0x8fdf, 0x9012, 0x9048, 0x907d, 0x9098, + // Entry 7300 - 733F + 0x90b1, 0x90cd, 0x90e8, 0x90ff, 0x9114, 0x912c, 0x9143, 0x915d, + 0x9175, 0x9190, 0x91aa, 0x91ca, 0x91e8, 0x9209, 0x9229, 0x923e, + 0x9251, 0x9267, 0x927c, 0x9296, 0x92ae, 0x92c9, 0x92e3, 0x92fe, + 0x9319, 0x9334, 0x934f, 0x936a, 0x9382, 0x93a8, 0x93cc, 0x93f3, + 0x9419, 0x9440, 0x9467, 0x948e, 0x94b5, 0x94d5, 0x94f3, 0x9514, + 0x9534, 0x9555, 0x9576, 0x9597, 0x95b8, 0x95df, 0x9604, 0x962c, + 0x9653, 0x967b, 0x96a3, 0x96cb, 0x96f3, 0x9719, 0x973d, 0x9764, + 0x978a, 0x97b1, 0x97d8, 0x97ff, 0x9826, 0x9851, 0x987a, 0x98a6, + // Entry 7340 - 737F + 0x98d1, 0x98fd, 0x9929, 0x9955, 0x9981, 0x999d, 0x99b7, 0x99d4, + 0x99f0, 0x9a1f, 0x9a4c, 0x9a7c, 0x9aab, 0x9acc, 0x9aeb, 0x9b0d, + 0x9b2e, 0x9b49, 0x9b6b, 0x9b8b, 0x9bac, 0x9bcf, 0x9bf3, 0x9c13, + 0x9c34, 0x9c55, 0x9c78, 0x9c9a, 0x9cbc, 0x9ce6, 0x9d11, 0x9d3c, + 0x9d68, 0x9d83, 0x9da5, 0x9db6, 0x9dc6, 0x9ddb, 0x9de4, 0x9df1, + 0x9e07, 0x9e11, 0x9e1d, 0x9e2e, 0x9e3a, 0x9e4d, 0x9e5d, 0x9e6e, + 0x9e77, 0x9ea1, 0x9eb5, 0x9ebf, 0x9ecd, 0x9eea, 0x9ef7, 0x9f01, + 0x9f0a, 0x9f17, 0x9f25, 0x9f2b, 0x9f31, 0x9f3e, 0x9f4e, 0x9f53, + // Entry 7380 - 73BF + 0x9f69, 0x9f71, 0x9f77, 0x9f88, 0x9f91, 0x9f9b, 0x9fa3, 0x9fb0, + 0x9fc4, 0x9fd4, 0x9fe1, 0x9fe6, 0x9fee, 0x9ff3, 0xa004, 0xa016, + 0xa027, 0xa033, 0xa047, 0xa050, 0xa057, 0xa05f, 0xa064, 0xa06a, + 0xa070, 0xa07e, 0xa089, 0xa09c, 0xa0ad, 0xa0b0, 0xa0bd, 0xa0c4, + 0xa0cd, 0xa0d5, 0xa0d9, 0xa0e2, 0xa0ea, 0xa0f0, 0xa0fc, 0xa101, + 0xa105, 0xa108, 0xa10d, 0xa110, 0xa118, 0xa121, 0xa125, 0xa12c, + 0xa132, 0xa13c, 0xa142, 0xa147, 0xa153, 0xa174, 0xa195, 0xa1b6, + 0xa1d7, 0xa1f8, 0xa219, 0xa23a, 0xa25b, 0xa27c, 0xa29d, 0xa2be, + // Entry 73C0 - 73FF + 0xa2df, 0xa300, 0xa321, 0xa342, 0xa363, 0xa384, 0xa3a5, 0xa3c6, + 0xa3e7, 0xa408, 0xa429, 0xa44a, 0xa46b, 0xa48c, 0xa4ad, 0xa4ce, + 0xa4ef, 0xa510, 0xa531, 0xa552, 0xa573, 0xa594, 0xa5b5, 0xa5d6, + 0xa5f7, 0xa618, 0xa639, 0xa65a, 0xa67b, 0xa69c, 0xa6bd, 0xa6de, + 0xa6ff, 0xa720, 0xa741, 0xa762, 0xa783, 0xa7a4, 0xa7c5, 0xa7e6, + 0xa807, 0xa828, 0xa849, 0xa86a, 0xa88b, 0xa8ac, 0xa8cd, 0xa8ee, + 0xa90f, 0xa930, 0xa951, 0xa972, 0xa993, 0xa9b4, 0xa9d5, 0xa9f6, + 0xaa17, 0xaa38, 0xaa59, 0xaa7a, 0xaa9b, 0xaabc, 0xaadd, 0xaafe, + // Entry 7400 - 743F + 0xab1f, 0xab40, 0xab61, 0xab82, 0xaba3, 0xabc4, 0xabe5, 0xac06, + 0xac27, 0xac48, 0xac69, 0xac8a, 0xacab, 0xaccc, 0xaced, 0xad0e, + 0xad2f, 0xad50, 0xad71, 0xad92, 0xadb3, 0xadd4, 0xadf5, 0xae16, + 0xae37, 0xae58, 0xae79, 0xae9a, 0xaebb, 0xaedc, 0xaefd, 0xaf1e, + 0xaf3f, 0xaf60, 0xaf81, 0xafa2, 0xafc3, 0xafe4, 0xb005, 0xb026, + 0xb047, 0xb068, 0xb089, 0xb0aa, 0xb0cb, 0xb0ec, 0xb10d, 0xb12e, + 0xb14f, 0xb170, 0xb191, 0xb1b2, 0xb1d3, 0xb1f4, 0xb215, 0xb236, + 0xb257, 0xb278, 0xb299, 0xb2ba, 0xb2db, 0xb2fc, 0xb31d, 0xb33e, + // Entry 7440 - 747F + 0xb35f, 0xb380, 0xb3a1, 0xb3c2, 0xb3e3, 0xb404, 0xb425, 0xb446, + 0xb467, 0xb488, 0xb4a9, 0xb4ca, 0xb4eb, 0xb50c, 0xb52d, 0xb54e, + 0xb56f, 0xb590, 0xb5b1, 0xb5d2, 0xb5f3, 0xb614, 0xb635, 0xb656, + 0xb677, 0xb698, 0xb6b9, 0xb6da, 0xb6fb, 0xb71c, 0xb73d, 0xb75e, + 0xb77f, 0xb7a0, 0xb7c1, 0xb7e2, 0xb803, 0xb824, 0xb845, 0xb866, + 0xb887, 0xb8a8, 0xb8c9, 0xb8ea, 0xb90b, 0xb92c, 0xb94d, 0xb96e, + 0xb98f, 0xb9b0, 0xb9d1, 0xb9f2, 0xba13, 0xba34, 0xba55, 0xba76, + 0xba97, 0xbab8, 0xbad9, 0xbafa, 0xbb1b, 0xbb3c, 0xbb5d, 0xbb7e, + // Entry 7480 - 74BF + 0xbb9f, 0xbbc0, 0xbbe1, 0xbc02, 0xbc23, 0xbc44, 0xbc65, 0xbc86, + 0xbca7, 0xbcc8, 0xbce9, 0xbd0a, 0xbd2b, 0xbd4c, 0xbd6d, 0xbd8e, + 0xbdaf, 0xbdd0, 0xbdf1, 0xbe12, 0xbe33, 0xbe54, 0xbe75, 0xbe96, + 0xbeb7, 0xbed8, 0xbef9, 0xbf1a, 0xbf3b, 0xbf5c, 0xbf7d, 0xbf9e, + 0xbfbf, 0xbfe0, 0xc001, 0xc022, 0xc043, 0xc064, 0xc085, 0xc0a6, + 0xc0c7, 0xc0e8, 0xc109, 0xc12a, 0xc14b, 0xc16c, 0xc18d, 0xc1ae, + 0xc1cf, 0xc1f0, 0xc211, 0xc232, 0xc253, 0xc274, 0xc295, 0xc2b6, + 0xc2d7, 0xc2f8, 0xc319, 0xc33a, 0xc35b, 0xc37c, 0xc39d, 0xc3be, + // Entry 74C0 - 74FF + 0xc3df, 0xc400, 0xc421, 0xc442, 0xc463, 0xc484, 0xc4a5, 0xc4c6, + 0xc4e7, 0xc508, 0xc529, 0xc54a, 0xc56b, 0xc58c, 0xc5ad, 0xc5ce, + 0xc5ef, 0xc610, 0xc631, 0xc652, 0xc673, 0xc694, 0xc6b5, 0xc6d6, + 0xc6f7, 0xc718, 0xc739, 0xc75a, 0xc77b, 0xc79c, 0xc7bd, 0xc7de, + 0xc7ff, 0xc820, 0xc841, 0xc862, 0xc883, 0xc8a4, 0xc8c5, 0xc8e6, + 0xc907, 0xc928, 0xc949, 0xc96a, 0xc98b, 0xc9ac, 0xc9cd, 0xc9ee, + 0xca0f, 0xca30, 0xca51, 0xca72, 0xca93, 0xcab4, 0xcad5, 0xcaf6, + 0xcb17, 0xcb38, 0xcb59, 0xcb7a, 0xcb9b, 0xcbbc, 0xcbdd, 0xcbfe, + // Entry 7500 - 753F + 0xcc1f, 0xcc40, 0xcc61, 0xcc82, 0xcca3, 0xccc4, 0xcce5, 0xcd06, + 0xcd27, 0xcd48, 0xcd69, 0xcd8a, 0xcdab, 0xcdcc, 0xcded, 0xce0e, + 0xce2f, 0xce50, 0xce71, 0xce92, 0xceb3, 0xced4, 0xcef5, 0xcf16, + 0xcf37, 0xcf58, 0xcf79, 0xcf9a, 0xcfbb, 0xcfdc, 0xcffd, 0xd01e, + 0xd03f, 0xd060, 0xd081, 0xd0a2, 0xd0c3, 0xd0e4, 0xd105, 0xd126, + 0xd147, 0xd168, 0xd189, 0xd1aa, 0xd1cb, 0xd1ec, 0xd20d, 0xd22e, + 0xd24f, 0xd270, 0xd291, 0xd2b2, 0xd2d3, 0xd2f4, 0xd315, 0xd336, + 0xd357, 0xd378, 0xd399, 0xd3ba, 0xd3db, 0xd3fc, 0xd41d, 0xd43e, + // Entry 7540 - 757F + 0xd45f, 0xd480, 0xd4a1, 0xd4c2, 0xd4e3, 0xd504, 0xd525, 0xd546, + 0xd567, 0xd588, 0xd5a9, 0xd5ca, 0xd5eb, 0xd60c, 0xd62d, 0xd64e, + 0xd66f, 0xd690, 0xd6b1, 0xd6d2, 0xd6f3, 0xd714, 0xd735, 0xd756, + 0xd777, 0xd798, 0xd7b9, 0xd7da, 0xd7fb, 0xd81c, 0xd83d, 0xd85e, + 0xd87f, 0xd8a0, 0xd8c1, 0xd8e2, 0xd903, 0xd924, 0xd945, 0xd966, + 0xd987, 0xd9a8, 0xd9c9, 0xd9ea, 0xda0b, 0xda2c, 0xda4d, 0xda6e, + 0xda8f, 0xdab0, 0xdad1, 0xdaf2, 0xdb13, 0xdb34, 0xdb55, 0xdb76, + 0xdb97, 0xdbb8, 0xdbd9, 0xdbfa, 0xdc1b, 0xdc3c, 0xdc5d, 0xdc7e, + // Entry 7580 - 75BF + 0xdc9f, 0xdcc0, 0xdce1, 0xdd02, 0xdd23, 0xdd44, 0xdd65, 0xdd86, + 0xdda7, 0xddc8, 0xdde9, 0xde0a, 0xde2b, 0xde4c, 0xde6d, 0xde8e, + 0xdeaf, 0xded0, 0xdef1, 0xdf12, 0xdf33, 0xdf54, 0xdf75, 0xdf96, + 0xdfb7, 0xdfd8, 0xdff9, 0xe01a, 0xe03b, 0xe05c, 0xe07d, 0xe09e, + 0xe0bf, 0xe0e0, 0xe101, 0xe122, 0xe143, 0xe164, 0xe185, 0xe1a6, + 0xe1c7, 0xe1e8, 0xe209, 0xe22a, 0xe24b, 0xe26c, 0xe28d, 0xe2ae, + 0xe2cf, 0xe2f0, 0xe311, 0xe332, 0xe353, 0xe374, 0xe395, 0xe3b6, + 0xe3d7, 0xe3f8, 0xe419, 0xe43a, 0xe45b, 0xe47c, 0xe49d, 0xe4be, + // Entry 75C0 - 75FF + 0xe4df, 0xe500, 0xe521, 0xe542, 0xe563, 0xe584, 0xe5a5, 0xe5c6, + 0xe5e7, 0xe608, 0xe629, 0xe64a, 0xe66b, 0xe68c, 0xe6ad, 0xe6ce, + 0xe6ef, 0xe710, 0xe731, 0xe73d, 0xe746, 0xe75a, 0xe76c, 0xe77b, + 0xe78a, 0xe79a, 0xe7a7, 0xe7b5, 0xe7c9, 0xe7de, 0xe7ea, 0xe7f7, + 0xe800, 0xe810, 0xe81d, 0xe828, 0xe836, 0xe843, 0xe850, 0xe85f, + 0xe86d, 0xe87b, 0xe888, 0xe897, 0xe8a6, 0xe8b4, 0xe8bd, 0xe8ca, + 0xe8dc, 0xe8eb, 0xe900, 0xe911, 0xe922, 0xe93c, 0xe956, 0xe970, + 0xe98a, 0xe9a4, 0xe9be, 0xe9d8, 0xe9f2, 0xea0c, 0xea26, 0xea40, + // Entry 7600 - 763F + 0xea5a, 0xea74, 0xea8e, 0xeaa8, 0xeac2, 0xeadc, 0xeaf6, 0xeb10, + 0xeb2a, 0xeb44, 0xeb5e, 0xeb78, 0xeb92, 0xebac, 0xebc6, 0xebdd, + 0xebf0, 0xec08, 0xec1d, 0xec29, 0xec39, 0xec51, 0xec69, 0xec81, + 0xec99, 0xecb1, 0xecc9, 0xece1, 0xecf9, 0xed11, 0xed29, 0xed41, + 0xed59, 0xed71, 0xed89, 0xeda1, 0xedb9, 0xedd1, 0xede9, 0xee01, + 0xee19, 0xee31, 0xee49, 0xee61, 0xee79, 0xee91, 0xeea9, 0xeebf, + 0xeed0, 0xeee7, 0xeef0, 0xeefa, 0xef0f, 0xef24, 0xef39, 0xef4e, + 0xef63, 0xef78, 0xef8d, 0xefa2, 0xefb7, 0xefcc, 0xefe1, 0xeff6, + // Entry 7640 - 767F + 0xf00b, 0xf020, 0xf035, 0xf04a, 0xf05f, 0xf074, 0xf089, 0xf09e, + 0xf0b3, 0xf0c8, 0xf0dd, 0xf0f2, 0xf107, 0xf11c, 0xf131, 0xf146, + 0xf15b, 0xf170, 0xf185, 0xf19a, 0xf1af, 0xf1c4, 0xf1d9, 0xf1ee, + 0xf203, 0xf218, 0xf22d, 0xf242, 0xf257, 0xf26c, 0xf281, 0xf296, + 0xf2ab, 0xf2c0, 0xf2d5, 0xf2ea, 0xf2ff, 0xf314, 0xf329, 0xf33e, + 0xf353, 0xf368, 0xf37d, 0xf392, 0xf3a7, 0xf3bc, 0xf3d1, 0xf3e6, + 0xf3fb, 0xf410, 0xf425, 0xf43a, 0xf44f, 0xf464, 0xf479, 0xf48e, + 0xf4a3, 0xf4b8, 0xf4cd, 0xf4e2, 0xf4f7, 0xf50c, 0xf521, 0xf536, + // Entry 7680 - 76BF + 0xf54b, 0xf560, 0xf575, 0xf58a, 0xf59f, 0xf5b4, 0xf5c9, 0xf5df, + 0xf5f5, 0xf60b, 0xf621, 0xf637, 0xf64d, 0xf663, 0xf679, 0xf68f, + 0xf6a5, 0xf6bb, 0xf6d1, 0xf6e7, 0xf6fd, 0xf713, 0xf729, 0xf73f, + 0xf755, 0xf76b, 0xf781, 0xf797, 0xf7ad, 0xf7c3, 0xf7d9, 0xf7ef, + 0xf805, 0xf81b, 0xf831, 0xf847, 0xf85d, 0xf873, 0xf889, 0xf89f, + 0xf8b5, 0xf8cb, 0xf8e1, 0xf8f7, 0xf90d, 0xf923, 0xf939, 0xf94f, + 0xf965, 0xf97b, 0xf991, 0xf9a7, 0xf9bd, 0xf9d3, 0xf9e9, 0xf9ff, + 0xfa15, 0xfa2b, 0xfa41, 0xfa57, 0xfa6d, 0xfa83, 0xfa99, 0xfaaf, + // Entry 76C0 - 76FF + 0xfac5, 0xfadb, 0xfaf1, 0xfb07, 0xfb1d, 0xfb33, 0xfb49, 0xfb5f, + 0xfb75, 0xfb8b, 0xfba1, 0xfbb7, 0xfbcd, 0xfbe3, 0xfbf9, 0xfc0f, + 0xfc25, 0xfc3b, 0xfc51, 0xfc67, 0xfc7d, 0xfc93, 0xfca9, 0xfcbf, + 0xfcd5, 0xfceb, 0xfd01, 0xfd17, 0xfd2d, 0xfd43, 0xfd59, 0xfd6f, + 0xfd85, 0xfd9b, 0xfdb1, 0xfdc7, 0xfddd, 0xfdf3, 0xfe09, 0xfe1f, + 0xfe35, 0xfe4b, 0xfe61, 0xfe77, 0xfe8d, 0xfea3, 0xfeb9, 0xfecf, + 0xfee5, 0xfefb, 0xff11, 0xff27, 0xff3d, 0xff53, 0xff69, 0xff7f, + 0xff95, 0xffab, 0xffc1, 0xffd7, 0xffed, 0x0003, 0x0019, 0x002f, + // Entry 7700 - 773F + 0x0045, 0x005b, 0x0071, 0x0087, 0x009d, 0x00b3, 0x00c9, 0x00df, + 0x00f5, 0x010b, 0x0121, 0x0137, 0x014d, 0x0163, 0x0179, 0x018f, + 0x01a5, 0x01bb, 0x01d1, 0x01e7, 0x01fd, 0x0213, 0x0229, 0x023f, + 0x0255, 0x026b, 0x0281, 0x0297, 0x02ad, 0x02c3, 0x02d9, 0x02ef, + 0x0305, 0x031b, 0x0331, 0x0347, +} // Size: 61024 bytes + +const directData string = "" + // Size: 326 bytes + "" + +const singleData string = ("" + // Size: 787271 bytes; the redundant, explicit parens are for https://golang.org/issue/18078 + "SPACEEXCLAMATION MARKQUOTATION MARKNUMBER SIGNDOLLAR SIGNPERCENT SIGNAMP" + + "ERSANDAPOSTROPHELEFT PARENTHESISRIGHT PARENTHESISASTERISKPLUS SIGNCOMMAH" + + "YPHEN-MINUSFULL STOPSOLIDUSDIGIT ZERODIGIT ONEDIGIT TWODIGIT THREEDIGIT " + + "FOURDIGIT FIVEDIGIT SIXDIGIT SEVENDIGIT EIGHTDIGIT NINECOLONSEMICOLONLES" + + "S-THAN SIGNEQUALS SIGNGREATER-THAN SIGNQUESTION MARKCOMMERCIAL ATLATIN C" + + "APITAL LETTER ALATIN CAPITAL LETTER BLATIN CAPITAL LETTER CLATIN CAPITAL" + + " LETTER DLATIN CAPITAL LETTER ELATIN CAPITAL LETTER FLATIN CAPITAL LETTE" + + "R GLATIN CAPITAL LETTER HLATIN CAPITAL LETTER ILATIN CAPITAL LETTER JLAT" + + "IN CAPITAL LETTER KLATIN CAPITAL LETTER LLATIN CAPITAL LETTER MLATIN CAP" + + "ITAL LETTER NLATIN CAPITAL LETTER OLATIN CAPITAL LETTER PLATIN CAPITAL L" + + "ETTER QLATIN CAPITAL LETTER RLATIN CAPITAL LETTER SLATIN CAPITAL LETTER " + + "TLATIN CAPITAL LETTER ULATIN CAPITAL LETTER VLATIN CAPITAL LETTER WLATIN" + + " CAPITAL LETTER XLATIN CAPITAL LETTER YLATIN CAPITAL LETTER ZLEFT SQUARE" + + " BRACKETREVERSE SOLIDUSRIGHT SQUARE BRACKETCIRCUMFLEX ACCENTLOW LINEGRAV" + + "E ACCENTLATIN SMALL LETTER ALATIN SMALL LETTER BLATIN SMALL LETTER CLATI" + + "N SMALL LETTER DLATIN SMALL LETTER ELATIN SMALL LETTER FLATIN SMALL LETT" + + "ER GLATIN SMALL LETTER HLATIN SMALL LETTER ILATIN SMALL LETTER JLATIN SM" + + "ALL LETTER KLATIN SMALL LETTER LLATIN SMALL LETTER MLATIN SMALL LETTER N" + + "LATIN SMALL LETTER OLATIN SMALL LETTER PLATIN SMALL LETTER QLATIN SMALL " + + "LETTER RLATIN SMALL LETTER SLATIN SMALL LETTER TLATIN SMALL LETTER ULATI" + + "N SMALL LETTER VLATIN SMALL LETTER WLATIN SMALL LETTER XLATIN SMALL LETT" + + "ER YLATIN SMALL LETTER ZLEFT CURLY BRACKETVERTICAL LINERIGHT CURLY BRACK" + + "ETTILDENO-BREAK SPACEINVERTED EXCLAMATION MARKCENT SIGNPOUND SIGNCURRENC" + + "Y SIGNYEN SIGNBROKEN BARSECTION SIGNDIAERESISCOPYRIGHT SIGNFEMININE ORDI" + + "NAL INDICATORLEFT-POINTING DOUBLE ANGLE QUOTATION MARKNOT SIGNSOFT HYPHE" + + "NREGISTERED SIGNMACRONDEGREE SIGNPLUS-MINUS SIGNSUPERSCRIPT TWOSUPERSCRI" + + "PT THREEACUTE ACCENTMICRO SIGNPILCROW SIGNMIDDLE DOTCEDILLASUPERSCRIPT O" + + "NEMASCULINE ORDINAL INDICATORRIGHT-POINTING DOUBLE ANGLE QUOTATION MARKV" + + "ULGAR FRACTION ONE QUARTERVULGAR FRACTION ONE HALFVULGAR FRACTION THREE " + + "QUARTERSINVERTED QUESTION MARKLATIN CAPITAL LETTER A WITH GRAVELATIN CAP" + + "ITAL LETTER A WITH ACUTELATIN CAPITAL LETTER A WITH CIRCUMFLEXLATIN CAPI" + + "TAL LETTER A WITH TILDELATIN CAPITAL LETTER A WITH DIAERESISLATIN CAPITA" + + "L LETTER A WITH RING ABOVELATIN CAPITAL LETTER AELATIN CAPITAL LETTER C " + + "WITH CEDILLALATIN CAPITAL LETTER E WITH GRAVELATIN CAPITAL LETTER E WITH" + + " ACUTELATIN CAPITAL LETTER E WITH CIRCUMFLEXLATIN CAPITAL LETTER E WITH " + + "DIAERESISLATIN CAPITAL LETTER I WITH GRAVELATIN CAPITAL LETTER I WITH AC" + + "UTELATIN CAPITAL LETTER I WITH CIRCUMFLEXLATIN CAPITAL LETTER I WITH DIA" + + "ERESISLATIN CAPITAL LETTER ETHLATIN CAPITAL LETTER N WITH TILDELATIN CAP" + + "ITAL LETTER O WITH GRAVELATIN CAPITAL LETTER O WITH ACUTELATIN CAPITAL L" + + "ETTER O WITH CIRCUMFLEXLATIN CAPITAL LETTER O WITH TILDELATIN CAPITAL LE" + + "TTER O WITH DIAERESISMULTIPLICATION SIGNLATIN CAPITAL LETTER O WITH STRO" + + "KELATIN CAPITAL LETTER U WITH GRAVELATIN CAPITAL LETTER U WITH ACUTELATI" + + "N CAPITAL LETTER U WITH CIRCUMFLEXLATIN CAPITAL LETTER U WITH DIAERESISL" + + "ATIN CAPITAL LETTER Y WITH ACUTELATIN CAPITAL LETTER THORNLATIN SMALL LE" + + "TTER SHARP SLATIN SMALL LETTER A WITH GRAVELATIN SMALL LETTER A WITH ACU" + + "TELATIN SMALL LETTER A WITH CIRCUMFLEXLATIN SMALL LETTER A WITH TILDELAT" + + "IN SMALL LETTER A WITH DIAERESISLATIN SMALL LETTER A WITH RING ABOVELATI" + + "N SMALL LETTER AELATIN SMALL LETTER C WITH CEDILLALATIN SMALL LETTER E W" + + "ITH GRAVELATIN SMALL LETTER E WITH ACUTELATIN SMALL LETTER E WITH CIRCUM" + + "FLEXLATIN SMALL LETTER E WITH DIAERESISLATIN SMALL LETTER I WITH GRAVELA" + + "TIN SMALL LETTER I WITH ACUTELATIN SMALL LETTER I WITH CIRCUMFLEXLATIN S" + + "MALL LETTER I WITH DIAERESISLATIN SMALL LETTER ETHLATIN SMALL LETTER N W" + + "ITH TILDELATIN SMALL LETTER O WITH GRAVELATIN SMALL LETTER O WITH ACUTEL" + + "ATIN SMALL LETTER O WITH CIRCUMFLEXLATIN SMALL LETTER O WITH TILDELATIN " + + "SMALL LETTER O WITH DIAERESISDIVISION SIGNLATIN SMALL LETTER O WITH STRO" + + "KELATIN SMALL LETTER U WITH GRAVELATIN SMALL LETTER U WITH ACUTELATIN SM" + + "ALL LETTER U WITH CIRCUMFLEXLATIN SMALL LETTER U WITH DIAERESISLATIN SMA" + + "LL LETTER Y WITH ACUTELATIN SMALL LETTER THORNLATIN SMALL LETTER Y WITH " + + "DIAERESISLATIN CAPITAL LETTER A WITH MACRONLATIN SMALL LETTER A WITH MAC" + + "RONLATIN CAPITAL LETTER A WITH BREVELATIN SMALL LETTER A WITH BREVELATIN" + + " CAPITAL LETTER A WITH OGONEKLATIN SMALL LETTER A WITH OGONEKLATIN CAPIT" + + "AL LETTER C WITH ACUTELATIN SMALL LETTER C WITH ACUTELATIN CAPITAL LETTE" + + "R C WITH CIRCUMFLEXLATIN SMALL LETTER C WITH CIRCUMFLEXLATIN CAPITAL LET") + ("" + + "TER C WITH DOT ABOVELATIN SMALL LETTER C WITH DOT ABOVELATIN CAPITAL LET" + + "TER C WITH CARONLATIN SMALL LETTER C WITH CARONLATIN CAPITAL LETTER D WI" + + "TH CARONLATIN SMALL LETTER D WITH CARONLATIN CAPITAL LETTER D WITH STROK" + + "ELATIN SMALL LETTER D WITH STROKELATIN CAPITAL LETTER E WITH MACRONLATIN" + + " SMALL LETTER E WITH MACRONLATIN CAPITAL LETTER E WITH BREVELATIN SMALL " + + "LETTER E WITH BREVELATIN CAPITAL LETTER E WITH DOT ABOVELATIN SMALL LETT" + + "ER E WITH DOT ABOVELATIN CAPITAL LETTER E WITH OGONEKLATIN SMALL LETTER " + + "E WITH OGONEKLATIN CAPITAL LETTER E WITH CARONLATIN SMALL LETTER E WITH " + + "CARONLATIN CAPITAL LETTER G WITH CIRCUMFLEXLATIN SMALL LETTER G WITH CIR" + + "CUMFLEXLATIN CAPITAL LETTER G WITH BREVELATIN SMALL LETTER G WITH BREVEL" + + "ATIN CAPITAL LETTER G WITH DOT ABOVELATIN SMALL LETTER G WITH DOT ABOVEL" + + "ATIN CAPITAL LETTER G WITH CEDILLALATIN SMALL LETTER G WITH CEDILLALATIN" + + " CAPITAL LETTER H WITH CIRCUMFLEXLATIN SMALL LETTER H WITH CIRCUMFLEXLAT" + + "IN CAPITAL LETTER H WITH STROKELATIN SMALL LETTER H WITH STROKELATIN CAP" + + "ITAL LETTER I WITH TILDELATIN SMALL LETTER I WITH TILDELATIN CAPITAL LET" + + "TER I WITH MACRONLATIN SMALL LETTER I WITH MACRONLATIN CAPITAL LETTER I " + + "WITH BREVELATIN SMALL LETTER I WITH BREVELATIN CAPITAL LETTER I WITH OGO" + + "NEKLATIN SMALL LETTER I WITH OGONEKLATIN CAPITAL LETTER I WITH DOT ABOVE" + + "LATIN SMALL LETTER DOTLESS ILATIN CAPITAL LIGATURE IJLATIN SMALL LIGATUR" + + "E IJLATIN CAPITAL LETTER J WITH CIRCUMFLEXLATIN SMALL LETTER J WITH CIRC" + + "UMFLEXLATIN CAPITAL LETTER K WITH CEDILLALATIN SMALL LETTER K WITH CEDIL" + + "LALATIN SMALL LETTER KRALATIN CAPITAL LETTER L WITH ACUTELATIN SMALL LET" + + "TER L WITH ACUTELATIN CAPITAL LETTER L WITH CEDILLALATIN SMALL LETTER L " + + "WITH CEDILLALATIN CAPITAL LETTER L WITH CARONLATIN SMALL LETTER L WITH C" + + "ARONLATIN CAPITAL LETTER L WITH MIDDLE DOTLATIN SMALL LETTER L WITH MIDD" + + "LE DOTLATIN CAPITAL LETTER L WITH STROKELATIN SMALL LETTER L WITH STROKE" + + "LATIN CAPITAL LETTER N WITH ACUTELATIN SMALL LETTER N WITH ACUTELATIN CA" + + "PITAL LETTER N WITH CEDILLALATIN SMALL LETTER N WITH CEDILLALATIN CAPITA" + + "L LETTER N WITH CARONLATIN SMALL LETTER N WITH CARONLATIN SMALL LETTER N" + + " PRECEDED BY APOSTROPHELATIN CAPITAL LETTER ENGLATIN SMALL LETTER ENGLAT" + + "IN CAPITAL LETTER O WITH MACRONLATIN SMALL LETTER O WITH MACRONLATIN CAP" + + "ITAL LETTER O WITH BREVELATIN SMALL LETTER O WITH BREVELATIN CAPITAL LET" + + "TER O WITH DOUBLE ACUTELATIN SMALL LETTER O WITH DOUBLE ACUTELATIN CAPIT" + + "AL LIGATURE OELATIN SMALL LIGATURE OELATIN CAPITAL LETTER R WITH ACUTELA" + + "TIN SMALL LETTER R WITH ACUTELATIN CAPITAL LETTER R WITH CEDILLALATIN SM" + + "ALL LETTER R WITH CEDILLALATIN CAPITAL LETTER R WITH CARONLATIN SMALL LE" + + "TTER R WITH CARONLATIN CAPITAL LETTER S WITH ACUTELATIN SMALL LETTER S W" + + "ITH ACUTELATIN CAPITAL LETTER S WITH CIRCUMFLEXLATIN SMALL LETTER S WITH" + + " CIRCUMFLEXLATIN CAPITAL LETTER S WITH CEDILLALATIN SMALL LETTER S WITH " + + "CEDILLALATIN CAPITAL LETTER S WITH CARONLATIN SMALL LETTER S WITH CARONL" + + "ATIN CAPITAL LETTER T WITH CEDILLALATIN SMALL LETTER T WITH CEDILLALATIN" + + " CAPITAL LETTER T WITH CARONLATIN SMALL LETTER T WITH CARONLATIN CAPITAL" + + " LETTER T WITH STROKELATIN SMALL LETTER T WITH STROKELATIN CAPITAL LETTE" + + "R U WITH TILDELATIN SMALL LETTER U WITH TILDELATIN CAPITAL LETTER U WITH" + + " MACRONLATIN SMALL LETTER U WITH MACRONLATIN CAPITAL LETTER U WITH BREVE" + + "LATIN SMALL LETTER U WITH BREVELATIN CAPITAL LETTER U WITH RING ABOVELAT" + + "IN SMALL LETTER U WITH RING ABOVELATIN CAPITAL LETTER U WITH DOUBLE ACUT" + + "ELATIN SMALL LETTER U WITH DOUBLE ACUTELATIN CAPITAL LETTER U WITH OGONE" + + "KLATIN SMALL LETTER U WITH OGONEKLATIN CAPITAL LETTER W WITH CIRCUMFLEXL" + + "ATIN SMALL LETTER W WITH CIRCUMFLEXLATIN CAPITAL LETTER Y WITH CIRCUMFLE" + + "XLATIN SMALL LETTER Y WITH CIRCUMFLEXLATIN CAPITAL LETTER Y WITH DIAERES" + + "ISLATIN CAPITAL LETTER Z WITH ACUTELATIN SMALL LETTER Z WITH ACUTELATIN " + + "CAPITAL LETTER Z WITH DOT ABOVELATIN SMALL LETTER Z WITH DOT ABOVELATIN " + + "CAPITAL LETTER Z WITH CARONLATIN SMALL LETTER Z WITH CARONLATIN SMALL LE" + + "TTER LONG SLATIN SMALL LETTER B WITH STROKELATIN CAPITAL LETTER B WITH H" + + "OOKLATIN CAPITAL LETTER B WITH TOPBARLATIN SMALL LETTER B WITH TOPBARLAT" + + "IN CAPITAL LETTER TONE SIXLATIN SMALL LETTER TONE SIXLATIN CAPITAL LETTE" + + "R OPEN OLATIN CAPITAL LETTER C WITH HOOKLATIN SMALL LETTER C WITH HOOKLA" + + "TIN CAPITAL LETTER AFRICAN DLATIN CAPITAL LETTER D WITH HOOKLATIN CAPITA" + + "L LETTER D WITH TOPBARLATIN SMALL LETTER D WITH TOPBARLATIN SMALL LETTER" + + " TURNED DELTALATIN CAPITAL LETTER REVERSED ELATIN CAPITAL LETTER SCHWALA" + + "TIN CAPITAL LETTER OPEN ELATIN CAPITAL LETTER F WITH HOOKLATIN SMALL LET" + + "TER F WITH HOOKLATIN CAPITAL LETTER G WITH HOOKLATIN CAPITAL LETTER GAMM" + + "ALATIN SMALL LETTER HVLATIN CAPITAL LETTER IOTALATIN CAPITAL LETTER I WI") + ("" + + "TH STROKELATIN CAPITAL LETTER K WITH HOOKLATIN SMALL LETTER K WITH HOOKL" + + "ATIN SMALL LETTER L WITH BARLATIN SMALL LETTER LAMBDA WITH STROKELATIN C" + + "APITAL LETTER TURNED MLATIN CAPITAL LETTER N WITH LEFT HOOKLATIN SMALL L" + + "ETTER N WITH LONG RIGHT LEGLATIN CAPITAL LETTER O WITH MIDDLE TILDELATIN" + + " CAPITAL LETTER O WITH HORNLATIN SMALL LETTER O WITH HORNLATIN CAPITAL L" + + "ETTER OILATIN SMALL LETTER OILATIN CAPITAL LETTER P WITH HOOKLATIN SMALL" + + " LETTER P WITH HOOKLATIN LETTER YRLATIN CAPITAL LETTER TONE TWOLATIN SMA" + + "LL LETTER TONE TWOLATIN CAPITAL LETTER ESHLATIN LETTER REVERSED ESH LOOP" + + "LATIN SMALL LETTER T WITH PALATAL HOOKLATIN CAPITAL LETTER T WITH HOOKLA" + + "TIN SMALL LETTER T WITH HOOKLATIN CAPITAL LETTER T WITH RETROFLEX HOOKLA" + + "TIN CAPITAL LETTER U WITH HORNLATIN SMALL LETTER U WITH HORNLATIN CAPITA" + + "L LETTER UPSILONLATIN CAPITAL LETTER V WITH HOOKLATIN CAPITAL LETTER Y W" + + "ITH HOOKLATIN SMALL LETTER Y WITH HOOKLATIN CAPITAL LETTER Z WITH STROKE" + + "LATIN SMALL LETTER Z WITH STROKELATIN CAPITAL LETTER EZHLATIN CAPITAL LE" + + "TTER EZH REVERSEDLATIN SMALL LETTER EZH REVERSEDLATIN SMALL LETTER EZH W" + + "ITH TAILLATIN LETTER TWO WITH STROKELATIN CAPITAL LETTER TONE FIVELATIN " + + "SMALL LETTER TONE FIVELATIN LETTER INVERTED GLOTTAL STOP WITH STROKELATI" + + "N LETTER WYNNLATIN LETTER DENTAL CLICKLATIN LETTER LATERAL CLICKLATIN LE" + + "TTER ALVEOLAR CLICKLATIN LETTER RETROFLEX CLICKLATIN CAPITAL LETTER DZ W" + + "ITH CARONLATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARONLATIN SMAL" + + "L LETTER DZ WITH CARONLATIN CAPITAL LETTER LJLATIN CAPITAL LETTER L WITH" + + " SMALL LETTER JLATIN SMALL LETTER LJLATIN CAPITAL LETTER NJLATIN CAPITAL" + + " LETTER N WITH SMALL LETTER JLATIN SMALL LETTER NJLATIN CAPITAL LETTER A" + + " WITH CARONLATIN SMALL LETTER A WITH CARONLATIN CAPITAL LETTER I WITH CA" + + "RONLATIN SMALL LETTER I WITH CARONLATIN CAPITAL LETTER O WITH CARONLATIN" + + " SMALL LETTER O WITH CARONLATIN CAPITAL LETTER U WITH CARONLATIN SMALL L" + + "ETTER U WITH CARONLATIN CAPITAL LETTER U WITH DIAERESIS AND MACRONLATIN " + + "SMALL LETTER U WITH DIAERESIS AND MACRONLATIN CAPITAL LETTER U WITH DIAE" + + "RESIS AND ACUTELATIN SMALL LETTER U WITH DIAERESIS AND ACUTELATIN CAPITA" + + "L LETTER U WITH DIAERESIS AND CARONLATIN SMALL LETTER U WITH DIAERESIS A" + + "ND CARONLATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVELATIN SMALL LETTE" + + "R U WITH DIAERESIS AND GRAVELATIN SMALL LETTER TURNED ELATIN CAPITAL LET" + + "TER A WITH DIAERESIS AND MACRONLATIN SMALL LETTER A WITH DIAERESIS AND M" + + "ACRONLATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRONLATIN SMALL LETTER " + + "A WITH DOT ABOVE AND MACRONLATIN CAPITAL LETTER AE WITH MACRONLATIN SMAL" + + "L LETTER AE WITH MACRONLATIN CAPITAL LETTER G WITH STROKELATIN SMALL LET" + + "TER G WITH STROKELATIN CAPITAL LETTER G WITH CARONLATIN SMALL LETTER G W" + + "ITH CARONLATIN CAPITAL LETTER K WITH CARONLATIN SMALL LETTER K WITH CARO" + + "NLATIN CAPITAL LETTER O WITH OGONEKLATIN SMALL LETTER O WITH OGONEKLATIN" + + " CAPITAL LETTER O WITH OGONEK AND MACRONLATIN SMALL LETTER O WITH OGONEK" + + " AND MACRONLATIN CAPITAL LETTER EZH WITH CARONLATIN SMALL LETTER EZH WIT" + + "H CARONLATIN SMALL LETTER J WITH CARONLATIN CAPITAL LETTER DZLATIN CAPIT" + + "AL LETTER D WITH SMALL LETTER ZLATIN SMALL LETTER DZLATIN CAPITAL LETTER" + + " G WITH ACUTELATIN SMALL LETTER G WITH ACUTELATIN CAPITAL LETTER HWAIRLA" + + "TIN CAPITAL LETTER WYNNLATIN CAPITAL LETTER N WITH GRAVELATIN SMALL LETT" + + "ER N WITH GRAVELATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTELATIN SMA" + + "LL LETTER A WITH RING ABOVE AND ACUTELATIN CAPITAL LETTER AE WITH ACUTEL" + + "ATIN SMALL LETTER AE WITH ACUTELATIN CAPITAL LETTER O WITH STROKE AND AC" + + "UTELATIN SMALL LETTER O WITH STROKE AND ACUTELATIN CAPITAL LETTER A WITH" + + " DOUBLE GRAVELATIN SMALL LETTER A WITH DOUBLE GRAVELATIN CAPITAL LETTER " + + "A WITH INVERTED BREVELATIN SMALL LETTER A WITH INVERTED BREVELATIN CAPIT" + + "AL LETTER E WITH DOUBLE GRAVELATIN SMALL LETTER E WITH DOUBLE GRAVELATIN" + + " CAPITAL LETTER E WITH INVERTED BREVELATIN SMALL LETTER E WITH INVERTED " + + "BREVELATIN CAPITAL LETTER I WITH DOUBLE GRAVELATIN SMALL LETTER I WITH D" + + "OUBLE GRAVELATIN CAPITAL LETTER I WITH INVERTED BREVELATIN SMALL LETTER " + + "I WITH INVERTED BREVELATIN CAPITAL LETTER O WITH DOUBLE GRAVELATIN SMALL" + + " LETTER O WITH DOUBLE GRAVELATIN CAPITAL LETTER O WITH INVERTED BREVELAT" + + "IN SMALL LETTER O WITH INVERTED BREVELATIN CAPITAL LETTER R WITH DOUBLE " + + "GRAVELATIN SMALL LETTER R WITH DOUBLE GRAVELATIN CAPITAL LETTER R WITH I" + + "NVERTED BREVELATIN SMALL LETTER R WITH INVERTED BREVELATIN CAPITAL LETTE" + + "R U WITH DOUBLE GRAVELATIN SMALL LETTER U WITH DOUBLE GRAVELATIN CAPITAL" + + " LETTER U WITH INVERTED BREVELATIN SMALL LETTER U WITH INVERTED BREVELAT" + + "IN CAPITAL LETTER S WITH COMMA BELOWLATIN SMALL LETTER S WITH COMMA BELO" + + "WLATIN CAPITAL LETTER T WITH COMMA BELOWLATIN SMALL LETTER T WITH COMMA ") + ("" + + "BELOWLATIN CAPITAL LETTER YOGHLATIN SMALL LETTER YOGHLATIN CAPITAL LETTE" + + "R H WITH CARONLATIN SMALL LETTER H WITH CARONLATIN CAPITAL LETTER N WITH" + + " LONG RIGHT LEGLATIN SMALL LETTER D WITH CURLLATIN CAPITAL LETTER OULATI" + + "N SMALL LETTER OULATIN CAPITAL LETTER Z WITH HOOKLATIN SMALL LETTER Z WI" + + "TH HOOKLATIN CAPITAL LETTER A WITH DOT ABOVELATIN SMALL LETTER A WITH DO" + + "T ABOVELATIN CAPITAL LETTER E WITH CEDILLALATIN SMALL LETTER E WITH CEDI" + + "LLALATIN CAPITAL LETTER O WITH DIAERESIS AND MACRONLATIN SMALL LETTER O " + + "WITH DIAERESIS AND MACRONLATIN CAPITAL LETTER O WITH TILDE AND MACRONLAT" + + "IN SMALL LETTER O WITH TILDE AND MACRONLATIN CAPITAL LETTER O WITH DOT A" + + "BOVELATIN SMALL LETTER O WITH DOT ABOVELATIN CAPITAL LETTER O WITH DOT A" + + "BOVE AND MACRONLATIN SMALL LETTER O WITH DOT ABOVE AND MACRONLATIN CAPIT" + + "AL LETTER Y WITH MACRONLATIN SMALL LETTER Y WITH MACRONLATIN SMALL LETTE" + + "R L WITH CURLLATIN SMALL LETTER N WITH CURLLATIN SMALL LETTER T WITH CUR" + + "LLATIN SMALL LETTER DOTLESS JLATIN SMALL LETTER DB DIGRAPHLATIN SMALL LE" + + "TTER QP DIGRAPHLATIN CAPITAL LETTER A WITH STROKELATIN CAPITAL LETTER C " + + "WITH STROKELATIN SMALL LETTER C WITH STROKELATIN CAPITAL LETTER L WITH B" + + "ARLATIN CAPITAL LETTER T WITH DIAGONAL STROKELATIN SMALL LETTER S WITH S" + + "WASH TAILLATIN SMALL LETTER Z WITH SWASH TAILLATIN CAPITAL LETTER GLOTTA" + + "L STOPLATIN SMALL LETTER GLOTTAL STOPLATIN CAPITAL LETTER B WITH STROKEL" + + "ATIN CAPITAL LETTER U BARLATIN CAPITAL LETTER TURNED VLATIN CAPITAL LETT" + + "ER E WITH STROKELATIN SMALL LETTER E WITH STROKELATIN CAPITAL LETTER J W" + + "ITH STROKELATIN SMALL LETTER J WITH STROKELATIN CAPITAL LETTER SMALL Q W" + + "ITH HOOK TAILLATIN SMALL LETTER Q WITH HOOK TAILLATIN CAPITAL LETTER R W" + + "ITH STROKELATIN SMALL LETTER R WITH STROKELATIN CAPITAL LETTER Y WITH ST" + + "ROKELATIN SMALL LETTER Y WITH STROKELATIN SMALL LETTER TURNED ALATIN SMA" + + "LL LETTER ALPHALATIN SMALL LETTER TURNED ALPHALATIN SMALL LETTER B WITH " + + "HOOKLATIN SMALL LETTER OPEN OLATIN SMALL LETTER C WITH CURLLATIN SMALL L" + + "ETTER D WITH TAILLATIN SMALL LETTER D WITH HOOKLATIN SMALL LETTER REVERS" + + "ED ELATIN SMALL LETTER SCHWALATIN SMALL LETTER SCHWA WITH HOOKLATIN SMAL" + + "L LETTER OPEN ELATIN SMALL LETTER REVERSED OPEN ELATIN SMALL LETTER REVE" + + "RSED OPEN E WITH HOOKLATIN SMALL LETTER CLOSED REVERSED OPEN ELATIN SMAL" + + "L LETTER DOTLESS J WITH STROKELATIN SMALL LETTER G WITH HOOKLATIN SMALL " + + "LETTER SCRIPT GLATIN LETTER SMALL CAPITAL GLATIN SMALL LETTER GAMMALATIN" + + " SMALL LETTER RAMS HORNLATIN SMALL LETTER TURNED HLATIN SMALL LETTER H W" + + "ITH HOOKLATIN SMALL LETTER HENG WITH HOOKLATIN SMALL LETTER I WITH STROK" + + "ELATIN SMALL LETTER IOTALATIN LETTER SMALL CAPITAL ILATIN SMALL LETTER L" + + " WITH MIDDLE TILDELATIN SMALL LETTER L WITH BELTLATIN SMALL LETTER L WIT" + + "H RETROFLEX HOOKLATIN SMALL LETTER LEZHLATIN SMALL LETTER TURNED MLATIN " + + "SMALL LETTER TURNED M WITH LONG LEGLATIN SMALL LETTER M WITH HOOKLATIN S" + + "MALL LETTER N WITH LEFT HOOKLATIN SMALL LETTER N WITH RETROFLEX HOOKLATI" + + "N LETTER SMALL CAPITAL NLATIN SMALL LETTER BARRED OLATIN LETTER SMALL CA" + + "PITAL OELATIN SMALL LETTER CLOSED OMEGALATIN SMALL LETTER PHILATIN SMALL" + + " LETTER TURNED RLATIN SMALL LETTER TURNED R WITH LONG LEGLATIN SMALL LET" + + "TER TURNED R WITH HOOKLATIN SMALL LETTER R WITH LONG LEGLATIN SMALL LETT" + + "ER R WITH TAILLATIN SMALL LETTER R WITH FISHHOOKLATIN SMALL LETTER REVER" + + "SED R WITH FISHHOOKLATIN LETTER SMALL CAPITAL RLATIN LETTER SMALL CAPITA" + + "L INVERTED RLATIN SMALL LETTER S WITH HOOKLATIN SMALL LETTER ESHLATIN SM" + + "ALL LETTER DOTLESS J WITH STROKE AND HOOKLATIN SMALL LETTER SQUAT REVERS" + + "ED ESHLATIN SMALL LETTER ESH WITH CURLLATIN SMALL LETTER TURNED TLATIN S" + + "MALL LETTER T WITH RETROFLEX HOOKLATIN SMALL LETTER U BARLATIN SMALL LET" + + "TER UPSILONLATIN SMALL LETTER V WITH HOOKLATIN SMALL LETTER TURNED VLATI" + + "N SMALL LETTER TURNED WLATIN SMALL LETTER TURNED YLATIN LETTER SMALL CAP" + + "ITAL YLATIN SMALL LETTER Z WITH RETROFLEX HOOKLATIN SMALL LETTER Z WITH " + + "CURLLATIN SMALL LETTER EZHLATIN SMALL LETTER EZH WITH CURLLATIN LETTER G" + + "LOTTAL STOPLATIN LETTER PHARYNGEAL VOICED FRICATIVELATIN LETTER INVERTED" + + " GLOTTAL STOPLATIN LETTER STRETCHED CLATIN LETTER BILABIAL CLICKLATIN LE" + + "TTER SMALL CAPITAL BLATIN SMALL LETTER CLOSED OPEN ELATIN LETTER SMALL C" + + "APITAL G WITH HOOKLATIN LETTER SMALL CAPITAL HLATIN SMALL LETTER J WITH " + + "CROSSED-TAILLATIN SMALL LETTER TURNED KLATIN LETTER SMALL CAPITAL LLATIN" + + " SMALL LETTER Q WITH HOOKLATIN LETTER GLOTTAL STOP WITH STROKELATIN LETT" + + "ER REVERSED GLOTTAL STOP WITH STROKELATIN SMALL LETTER DZ DIGRAPHLATIN S" + + "MALL LETTER DEZH DIGRAPHLATIN SMALL LETTER DZ DIGRAPH WITH CURLLATIN SMA" + + "LL LETTER TS DIGRAPHLATIN SMALL LETTER TESH DIGRAPHLATIN SMALL LETTER TC" + + " DIGRAPH WITH CURLLATIN SMALL LETTER FENG DIGRAPHLATIN SMALL LETTER LS D") + ("" + + "IGRAPHLATIN SMALL LETTER LZ DIGRAPHLATIN LETTER BILABIAL PERCUSSIVELATIN" + + " LETTER BIDENTAL PERCUSSIVELATIN SMALL LETTER TURNED H WITH FISHHOOKLATI" + + "N SMALL LETTER TURNED H WITH FISHHOOK AND TAILMODIFIER LETTER SMALL HMOD" + + "IFIER LETTER SMALL H WITH HOOKMODIFIER LETTER SMALL JMODIFIER LETTER SMA" + + "LL RMODIFIER LETTER SMALL TURNED RMODIFIER LETTER SMALL TURNED R WITH HO" + + "OKMODIFIER LETTER SMALL CAPITAL INVERTED RMODIFIER LETTER SMALL WMODIFIE" + + "R LETTER SMALL YMODIFIER LETTER PRIMEMODIFIER LETTER DOUBLE PRIMEMODIFIE" + + "R LETTER TURNED COMMAMODIFIER LETTER APOSTROPHEMODIFIER LETTER REVERSED " + + "COMMAMODIFIER LETTER RIGHT HALF RINGMODIFIER LETTER LEFT HALF RINGMODIFI" + + "ER LETTER GLOTTAL STOPMODIFIER LETTER REVERSED GLOTTAL STOPMODIFIER LETT" + + "ER LEFT ARROWHEADMODIFIER LETTER RIGHT ARROWHEADMODIFIER LETTER UP ARROW" + + "HEADMODIFIER LETTER DOWN ARROWHEADMODIFIER LETTER CIRCUMFLEX ACCENTCARON" + + "MODIFIER LETTER VERTICAL LINEMODIFIER LETTER MACRONMODIFIER LETTER ACUTE" + + " ACCENTMODIFIER LETTER GRAVE ACCENTMODIFIER LETTER LOW VERTICAL LINEMODI" + + "FIER LETTER LOW MACRONMODIFIER LETTER LOW GRAVE ACCENTMODIFIER LETTER LO" + + "W ACUTE ACCENTMODIFIER LETTER TRIANGULAR COLONMODIFIER LETTER HALF TRIAN" + + "GULAR COLONMODIFIER LETTER CENTRED RIGHT HALF RINGMODIFIER LETTER CENTRE" + + "D LEFT HALF RINGMODIFIER LETTER UP TACKMODIFIER LETTER DOWN TACKMODIFIER" + + " LETTER PLUS SIGNMODIFIER LETTER MINUS SIGNBREVEDOT ABOVERING ABOVEOGONE" + + "KSMALL TILDEDOUBLE ACUTE ACCENTMODIFIER LETTER RHOTIC HOOKMODIFIER LETTE" + + "R CROSS ACCENTMODIFIER LETTER SMALL GAMMAMODIFIER LETTER SMALL LMODIFIER" + + " LETTER SMALL SMODIFIER LETTER SMALL XMODIFIER LETTER SMALL REVERSED GLO" + + "TTAL STOPMODIFIER LETTER EXTRA-HIGH TONE BARMODIFIER LETTER HIGH TONE BA" + + "RMODIFIER LETTER MID TONE BARMODIFIER LETTER LOW TONE BARMODIFIER LETTER" + + " EXTRA-LOW TONE BARMODIFIER LETTER YIN DEPARTING TONE MARKMODIFIER LETTE" + + "R YANG DEPARTING TONE MARKMODIFIER LETTER VOICINGMODIFIER LETTER UNASPIR" + + "ATEDMODIFIER LETTER DOUBLE APOSTROPHEMODIFIER LETTER LOW DOWN ARROWHEADM" + + "ODIFIER LETTER LOW UP ARROWHEADMODIFIER LETTER LOW LEFT ARROWHEADMODIFIE" + + "R LETTER LOW RIGHT ARROWHEADMODIFIER LETTER LOW RINGMODIFIER LETTER MIDD" + + "LE GRAVE ACCENTMODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENTMODIFIER LETTER" + + " MIDDLE DOUBLE ACUTE ACCENTMODIFIER LETTER LOW TILDEMODIFIER LETTER RAIS" + + "ED COLONMODIFIER LETTER BEGIN HIGH TONEMODIFIER LETTER END HIGH TONEMODI" + + "FIER LETTER BEGIN LOW TONEMODIFIER LETTER END LOW TONEMODIFIER LETTER SH" + + "ELFMODIFIER LETTER OPEN SHELFMODIFIER LETTER LOW LEFT ARROWCOMBINING GRA" + + "VE ACCENTCOMBINING ACUTE ACCENTCOMBINING CIRCUMFLEX ACCENTCOMBINING TILD" + + "ECOMBINING MACRONCOMBINING OVERLINECOMBINING BREVECOMBINING DOT ABOVECOM" + + "BINING DIAERESISCOMBINING HOOK ABOVECOMBINING RING ABOVECOMBINING DOUBLE" + + " ACUTE ACCENTCOMBINING CARONCOMBINING VERTICAL LINE ABOVECOMBINING DOUBL" + + "E VERTICAL LINE ABOVECOMBINING DOUBLE GRAVE ACCENTCOMBINING CANDRABINDUC" + + "OMBINING INVERTED BREVECOMBINING TURNED COMMA ABOVECOMBINING COMMA ABOVE" + + "COMBINING REVERSED COMMA ABOVECOMBINING COMMA ABOVE RIGHTCOMBINING GRAVE" + + " ACCENT BELOWCOMBINING ACUTE ACCENT BELOWCOMBINING LEFT TACK BELOWCOMBIN" + + "ING RIGHT TACK BELOWCOMBINING LEFT ANGLE ABOVECOMBINING HORNCOMBINING LE" + + "FT HALF RING BELOWCOMBINING UP TACK BELOWCOMBINING DOWN TACK BELOWCOMBIN" + + "ING PLUS SIGN BELOWCOMBINING MINUS SIGN BELOWCOMBINING PALATALIZED HOOK " + + "BELOWCOMBINING RETROFLEX HOOK BELOWCOMBINING DOT BELOWCOMBINING DIAERESI" + + "S BELOWCOMBINING RING BELOWCOMBINING COMMA BELOWCOMBINING CEDILLACOMBINI" + + "NG OGONEKCOMBINING VERTICAL LINE BELOWCOMBINING BRIDGE BELOWCOMBINING IN" + + "VERTED DOUBLE ARCH BELOWCOMBINING CARON BELOWCOMBINING CIRCUMFLEX ACCENT" + + " BELOWCOMBINING BREVE BELOWCOMBINING INVERTED BREVE BELOWCOMBINING TILDE" + + " BELOWCOMBINING MACRON BELOWCOMBINING LOW LINECOMBINING DOUBLE LOW LINEC" + + "OMBINING TILDE OVERLAYCOMBINING SHORT STROKE OVERLAYCOMBINING LONG STROK" + + "E OVERLAYCOMBINING SHORT SOLIDUS OVERLAYCOMBINING LONG SOLIDUS OVERLAYCO" + + "MBINING RIGHT HALF RING BELOWCOMBINING INVERTED BRIDGE BELOWCOMBINING SQ" + + "UARE BELOWCOMBINING SEAGULL BELOWCOMBINING X ABOVECOMBINING VERTICAL TIL" + + "DECOMBINING DOUBLE OVERLINECOMBINING GRAVE TONE MARKCOMBINING ACUTE TONE" + + " MARKCOMBINING GREEK PERISPOMENICOMBINING GREEK KORONISCOMBINING GREEK D" + + "IALYTIKA TONOSCOMBINING GREEK YPOGEGRAMMENICOMBINING BRIDGE ABOVECOMBINI" + + "NG EQUALS SIGN BELOWCOMBINING DOUBLE VERTICAL LINE BELOWCOMBINING LEFT A" + + "NGLE BELOWCOMBINING NOT TILDE ABOVECOMBINING HOMOTHETIC ABOVECOMBINING A" + + "LMOST EQUAL TO ABOVECOMBINING LEFT RIGHT ARROW BELOWCOMBINING UPWARDS AR" + + "ROW BELOWCOMBINING GRAPHEME JOINERCOMBINING RIGHT ARROWHEAD ABOVECOMBINI" + + "NG LEFT HALF RING ABOVECOMBINING FERMATACOMBINING X BELOWCOMBINING LEFT " + + "ARROWHEAD BELOWCOMBINING RIGHT ARROWHEAD BELOWCOMBINING RIGHT ARROWHEAD ") + ("" + + "AND UP ARROWHEAD BELOWCOMBINING RIGHT HALF RING ABOVECOMBINING DOT ABOVE" + + " RIGHTCOMBINING ASTERISK BELOWCOMBINING DOUBLE RING BELOWCOMBINING ZIGZA" + + "G ABOVECOMBINING DOUBLE BREVE BELOWCOMBINING DOUBLE BREVECOMBINING DOUBL" + + "E MACRONCOMBINING DOUBLE MACRON BELOWCOMBINING DOUBLE TILDECOMBINING DOU" + + "BLE INVERTED BREVECOMBINING DOUBLE RIGHTWARDS ARROW BELOWCOMBINING LATIN" + + " SMALL LETTER ACOMBINING LATIN SMALL LETTER ECOMBINING LATIN SMALL LETTE" + + "R ICOMBINING LATIN SMALL LETTER OCOMBINING LATIN SMALL LETTER UCOMBINING" + + " LATIN SMALL LETTER CCOMBINING LATIN SMALL LETTER DCOMBINING LATIN SMALL" + + " LETTER HCOMBINING LATIN SMALL LETTER MCOMBINING LATIN SMALL LETTER RCOM" + + "BINING LATIN SMALL LETTER TCOMBINING LATIN SMALL LETTER VCOMBINING LATIN" + + " SMALL LETTER XGREEK CAPITAL LETTER HETAGREEK SMALL LETTER HETAGREEK CAP" + + "ITAL LETTER ARCHAIC SAMPIGREEK SMALL LETTER ARCHAIC SAMPIGREEK NUMERAL S" + + "IGNGREEK LOWER NUMERAL SIGNGREEK CAPITAL LETTER PAMPHYLIAN DIGAMMAGREEK " + + "SMALL LETTER PAMPHYLIAN DIGAMMAGREEK YPOGEGRAMMENIGREEK SMALL REVERSED L" + + "UNATE SIGMA SYMBOLGREEK SMALL DOTTED LUNATE SIGMA SYMBOLGREEK SMALL REVE" + + "RSED DOTTED LUNATE SIGMA SYMBOLGREEK QUESTION MARKGREEK CAPITAL LETTER Y" + + "OTGREEK TONOSGREEK DIALYTIKA TONOSGREEK CAPITAL LETTER ALPHA WITH TONOSG" + + "REEK ANO TELEIAGREEK CAPITAL LETTER EPSILON WITH TONOSGREEK CAPITAL LETT" + + "ER ETA WITH TONOSGREEK CAPITAL LETTER IOTA WITH TONOSGREEK CAPITAL LETTE" + + "R OMICRON WITH TONOSGREEK CAPITAL LETTER UPSILON WITH TONOSGREEK CAPITAL" + + " LETTER OMEGA WITH TONOSGREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS" + + "GREEK CAPITAL LETTER ALPHAGREEK CAPITAL LETTER BETAGREEK CAPITAL LETTER " + + "GAMMAGREEK CAPITAL LETTER DELTAGREEK CAPITAL LETTER EPSILONGREEK CAPITAL" + + " LETTER ZETAGREEK CAPITAL LETTER ETAGREEK CAPITAL LETTER THETAGREEK CAPI" + + "TAL LETTER IOTAGREEK CAPITAL LETTER KAPPAGREEK CAPITAL LETTER LAMDAGREEK" + + " CAPITAL LETTER MUGREEK CAPITAL LETTER NUGREEK CAPITAL LETTER XIGREEK CA" + + "PITAL LETTER OMICRONGREEK CAPITAL LETTER PIGREEK CAPITAL LETTER RHOGREEK" + + " CAPITAL LETTER SIGMAGREEK CAPITAL LETTER TAUGREEK CAPITAL LETTER UPSILO" + + "NGREEK CAPITAL LETTER PHIGREEK CAPITAL LETTER CHIGREEK CAPITAL LETTER PS" + + "IGREEK CAPITAL LETTER OMEGAGREEK CAPITAL LETTER IOTA WITH DIALYTIKAGREEK" + + " CAPITAL LETTER UPSILON WITH DIALYTIKAGREEK SMALL LETTER ALPHA WITH TONO" + + "SGREEK SMALL LETTER EPSILON WITH TONOSGREEK SMALL LETTER ETA WITH TONOSG" + + "REEK SMALL LETTER IOTA WITH TONOSGREEK SMALL LETTER UPSILON WITH DIALYTI" + + "KA AND TONOSGREEK SMALL LETTER ALPHAGREEK SMALL LETTER BETAGREEK SMALL L" + + "ETTER GAMMAGREEK SMALL LETTER DELTAGREEK SMALL LETTER EPSILONGREEK SMALL" + + " LETTER ZETAGREEK SMALL LETTER ETAGREEK SMALL LETTER THETAGREEK SMALL LE" + + "TTER IOTAGREEK SMALL LETTER KAPPAGREEK SMALL LETTER LAMDAGREEK SMALL LET" + + "TER MUGREEK SMALL LETTER NUGREEK SMALL LETTER XIGREEK SMALL LETTER OMICR" + + "ONGREEK SMALL LETTER PIGREEK SMALL LETTER RHOGREEK SMALL LETTER FINAL SI" + + "GMAGREEK SMALL LETTER SIGMAGREEK SMALL LETTER TAUGREEK SMALL LETTER UPSI" + + "LONGREEK SMALL LETTER PHIGREEK SMALL LETTER CHIGREEK SMALL LETTER PSIGRE" + + "EK SMALL LETTER OMEGAGREEK SMALL LETTER IOTA WITH DIALYTIKAGREEK SMALL L" + + "ETTER UPSILON WITH DIALYTIKAGREEK SMALL LETTER OMICRON WITH TONOSGREEK S" + + "MALL LETTER UPSILON WITH TONOSGREEK SMALL LETTER OMEGA WITH TONOSGREEK C" + + "APITAL KAI SYMBOLGREEK BETA SYMBOLGREEK THETA SYMBOLGREEK UPSILON WITH H" + + "OOK SYMBOLGREEK UPSILON WITH ACUTE AND HOOK SYMBOLGREEK UPSILON WITH DIA" + + "ERESIS AND HOOK SYMBOLGREEK PHI SYMBOLGREEK PI SYMBOLGREEK KAI SYMBOLGRE" + + "EK LETTER ARCHAIC KOPPAGREEK SMALL LETTER ARCHAIC KOPPAGREEK LETTER STIG" + + "MAGREEK SMALL LETTER STIGMAGREEK LETTER DIGAMMAGREEK SMALL LETTER DIGAMM" + + "AGREEK LETTER KOPPAGREEK SMALL LETTER KOPPAGREEK LETTER SAMPIGREEK SMALL" + + " LETTER SAMPICOPTIC CAPITAL LETTER SHEICOPTIC SMALL LETTER SHEICOPTIC CA" + + "PITAL LETTER FEICOPTIC SMALL LETTER FEICOPTIC CAPITAL LETTER KHEICOPTIC " + + "SMALL LETTER KHEICOPTIC CAPITAL LETTER HORICOPTIC SMALL LETTER HORICOPTI" + + "C CAPITAL LETTER GANGIACOPTIC SMALL LETTER GANGIACOPTIC CAPITAL LETTER S" + + "HIMACOPTIC SMALL LETTER SHIMACOPTIC CAPITAL LETTER DEICOPTIC SMALL LETTE" + + "R DEIGREEK KAPPA SYMBOLGREEK RHO SYMBOLGREEK LUNATE SIGMA SYMBOLGREEK LE" + + "TTER YOTGREEK CAPITAL THETA SYMBOLGREEK LUNATE EPSILON SYMBOLGREEK REVER" + + "SED LUNATE EPSILON SYMBOLGREEK CAPITAL LETTER SHOGREEK SMALL LETTER SHOG" + + "REEK CAPITAL LUNATE SIGMA SYMBOLGREEK CAPITAL LETTER SANGREEK SMALL LETT" + + "ER SANGREEK RHO WITH STROKE SYMBOLGREEK CAPITAL REVERSED LUNATE SIGMA SY" + + "MBOLGREEK CAPITAL DOTTED LUNATE SIGMA SYMBOLGREEK CAPITAL REVERSED DOTTE" + + "D LUNATE SIGMA SYMBOLCYRILLIC CAPITAL LETTER IE WITH GRAVECYRILLIC CAPIT" + + "AL LETTER IOCYRILLIC CAPITAL LETTER DJECYRILLIC CAPITAL LETTER GJECYRILL" + + "IC CAPITAL LETTER UKRAINIAN IECYRILLIC CAPITAL LETTER DZECYRILLIC CAPITA") + ("" + + "L LETTER BYELORUSSIAN-UKRAINIAN ICYRILLIC CAPITAL LETTER YICYRILLIC CAPI" + + "TAL LETTER JECYRILLIC CAPITAL LETTER LJECYRILLIC CAPITAL LETTER NJECYRIL" + + "LIC CAPITAL LETTER TSHECYRILLIC CAPITAL LETTER KJECYRILLIC CAPITAL LETTE" + + "R I WITH GRAVECYRILLIC CAPITAL LETTER SHORT UCYRILLIC CAPITAL LETTER DZH" + + "ECYRILLIC CAPITAL LETTER ACYRILLIC CAPITAL LETTER BECYRILLIC CAPITAL LET" + + "TER VECYRILLIC CAPITAL LETTER GHECYRILLIC CAPITAL LETTER DECYRILLIC CAPI" + + "TAL LETTER IECYRILLIC CAPITAL LETTER ZHECYRILLIC CAPITAL LETTER ZECYRILL" + + "IC CAPITAL LETTER ICYRILLIC CAPITAL LETTER SHORT ICYRILLIC CAPITAL LETTE" + + "R KACYRILLIC CAPITAL LETTER ELCYRILLIC CAPITAL LETTER EMCYRILLIC CAPITAL" + + " LETTER ENCYRILLIC CAPITAL LETTER OCYRILLIC CAPITAL LETTER PECYRILLIC CA" + + "PITAL LETTER ERCYRILLIC CAPITAL LETTER ESCYRILLIC CAPITAL LETTER TECYRIL" + + "LIC CAPITAL LETTER UCYRILLIC CAPITAL LETTER EFCYRILLIC CAPITAL LETTER HA" + + "CYRILLIC CAPITAL LETTER TSECYRILLIC CAPITAL LETTER CHECYRILLIC CAPITAL L" + + "ETTER SHACYRILLIC CAPITAL LETTER SHCHACYRILLIC CAPITAL LETTER HARD SIGNC" + + "YRILLIC CAPITAL LETTER YERUCYRILLIC CAPITAL LETTER SOFT SIGNCYRILLIC CAP" + + "ITAL LETTER ECYRILLIC CAPITAL LETTER YUCYRILLIC CAPITAL LETTER YACYRILLI" + + "C SMALL LETTER ACYRILLIC SMALL LETTER BECYRILLIC SMALL LETTER VECYRILLIC" + + " SMALL LETTER GHECYRILLIC SMALL LETTER DECYRILLIC SMALL LETTER IECYRILLI" + + "C SMALL LETTER ZHECYRILLIC SMALL LETTER ZECYRILLIC SMALL LETTER ICYRILLI" + + "C SMALL LETTER SHORT ICYRILLIC SMALL LETTER KACYRILLIC SMALL LETTER ELCY" + + "RILLIC SMALL LETTER EMCYRILLIC SMALL LETTER ENCYRILLIC SMALL LETTER OCYR" + + "ILLIC SMALL LETTER PECYRILLIC SMALL LETTER ERCYRILLIC SMALL LETTER ESCYR" + + "ILLIC SMALL LETTER TECYRILLIC SMALL LETTER UCYRILLIC SMALL LETTER EFCYRI" + + "LLIC SMALL LETTER HACYRILLIC SMALL LETTER TSECYRILLIC SMALL LETTER CHECY" + + "RILLIC SMALL LETTER SHACYRILLIC SMALL LETTER SHCHACYRILLIC SMALL LETTER " + + "HARD SIGNCYRILLIC SMALL LETTER YERUCYRILLIC SMALL LETTER SOFT SIGNCYRILL" + + "IC SMALL LETTER ECYRILLIC SMALL LETTER YUCYRILLIC SMALL LETTER YACYRILLI" + + "C SMALL LETTER IE WITH GRAVECYRILLIC SMALL LETTER IOCYRILLIC SMALL LETTE" + + "R DJECYRILLIC SMALL LETTER GJECYRILLIC SMALL LETTER UKRAINIAN IECYRILLIC" + + " SMALL LETTER DZECYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN ICYRILLIC " + + "SMALL LETTER YICYRILLIC SMALL LETTER JECYRILLIC SMALL LETTER LJECYRILLIC" + + " SMALL LETTER NJECYRILLIC SMALL LETTER TSHECYRILLIC SMALL LETTER KJECYRI" + + "LLIC SMALL LETTER I WITH GRAVECYRILLIC SMALL LETTER SHORT UCYRILLIC SMAL" + + "L LETTER DZHECYRILLIC CAPITAL LETTER OMEGACYRILLIC SMALL LETTER OMEGACYR" + + "ILLIC CAPITAL LETTER YATCYRILLIC SMALL LETTER YATCYRILLIC CAPITAL LETTER" + + " IOTIFIED ECYRILLIC SMALL LETTER IOTIFIED ECYRILLIC CAPITAL LETTER LITTL" + + "E YUSCYRILLIC SMALL LETTER LITTLE YUSCYRILLIC CAPITAL LETTER IOTIFIED LI" + + "TTLE YUSCYRILLIC SMALL LETTER IOTIFIED LITTLE YUSCYRILLIC CAPITAL LETTER" + + " BIG YUSCYRILLIC SMALL LETTER BIG YUSCYRILLIC CAPITAL LETTER IOTIFIED BI" + + "G YUSCYRILLIC SMALL LETTER IOTIFIED BIG YUSCYRILLIC CAPITAL LETTER KSICY" + + "RILLIC SMALL LETTER KSICYRILLIC CAPITAL LETTER PSICYRILLIC SMALL LETTER " + + "PSICYRILLIC CAPITAL LETTER FITACYRILLIC SMALL LETTER FITACYRILLIC CAPITA" + + "L LETTER IZHITSACYRILLIC SMALL LETTER IZHITSACYRILLIC CAPITAL LETTER IZH" + + "ITSA WITH DOUBLE GRAVE ACCENTCYRILLIC SMALL LETTER IZHITSA WITH DOUBLE G" + + "RAVE ACCENTCYRILLIC CAPITAL LETTER UKCYRILLIC SMALL LETTER UKCYRILLIC CA" + + "PITAL LETTER ROUND OMEGACYRILLIC SMALL LETTER ROUND OMEGACYRILLIC CAPITA" + + "L LETTER OMEGA WITH TITLOCYRILLIC SMALL LETTER OMEGA WITH TITLOCYRILLIC " + + "CAPITAL LETTER OTCYRILLIC SMALL LETTER OTCYRILLIC CAPITAL LETTER KOPPACY" + + "RILLIC SMALL LETTER KOPPACYRILLIC THOUSANDS SIGNCOMBINING CYRILLIC TITLO" + + "COMBINING CYRILLIC PALATALIZATIONCOMBINING CYRILLIC DASIA PNEUMATACOMBIN" + + "ING CYRILLIC PSILI PNEUMATACOMBINING CYRILLIC POKRYTIECOMBINING CYRILLIC" + + " HUNDRED THOUSANDS SIGNCOMBINING CYRILLIC MILLIONS SIGNCYRILLIC CAPITAL " + + "LETTER SHORT I WITH TAILCYRILLIC SMALL LETTER SHORT I WITH TAILCYRILLIC " + + "CAPITAL LETTER SEMISOFT SIGNCYRILLIC SMALL LETTER SEMISOFT SIGNCYRILLIC " + + "CAPITAL LETTER ER WITH TICKCYRILLIC SMALL LETTER ER WITH TICKCYRILLIC CA" + + "PITAL LETTER GHE WITH UPTURNCYRILLIC SMALL LETTER GHE WITH UPTURNCYRILLI" + + "C CAPITAL LETTER GHE WITH STROKECYRILLIC SMALL LETTER GHE WITH STROKECYR" + + "ILLIC CAPITAL LETTER GHE WITH MIDDLE HOOKCYRILLIC SMALL LETTER GHE WITH " + + "MIDDLE HOOKCYRILLIC CAPITAL LETTER ZHE WITH DESCENDERCYRILLIC SMALL LETT" + + "ER ZHE WITH DESCENDERCYRILLIC CAPITAL LETTER ZE WITH DESCENDERCYRILLIC S" + + "MALL LETTER ZE WITH DESCENDERCYRILLIC CAPITAL LETTER KA WITH DESCENDERCY" + + "RILLIC SMALL LETTER KA WITH DESCENDERCYRILLIC CAPITAL LETTER KA WITH VER" + + "TICAL STROKECYRILLIC SMALL LETTER KA WITH VERTICAL STROKECYRILLIC CAPITA" + + "L LETTER KA WITH STROKECYRILLIC SMALL LETTER KA WITH STROKECYRILLIC CAPI") + ("" + + "TAL LETTER BASHKIR KACYRILLIC SMALL LETTER BASHKIR KACYRILLIC CAPITAL LE" + + "TTER EN WITH DESCENDERCYRILLIC SMALL LETTER EN WITH DESCENDERCYRILLIC CA" + + "PITAL LIGATURE EN GHECYRILLIC SMALL LIGATURE EN GHECYRILLIC CAPITAL LETT" + + "ER PE WITH MIDDLE HOOKCYRILLIC SMALL LETTER PE WITH MIDDLE HOOKCYRILLIC " + + "CAPITAL LETTER ABKHASIAN HACYRILLIC SMALL LETTER ABKHASIAN HACYRILLIC CA" + + "PITAL LETTER ES WITH DESCENDERCYRILLIC SMALL LETTER ES WITH DESCENDERCYR" + + "ILLIC CAPITAL LETTER TE WITH DESCENDERCYRILLIC SMALL LETTER TE WITH DESC" + + "ENDERCYRILLIC CAPITAL LETTER STRAIGHT UCYRILLIC SMALL LETTER STRAIGHT UC" + + "YRILLIC CAPITAL LETTER STRAIGHT U WITH STROKECYRILLIC SMALL LETTER STRAI" + + "GHT U WITH STROKECYRILLIC CAPITAL LETTER HA WITH DESCENDERCYRILLIC SMALL" + + " LETTER HA WITH DESCENDERCYRILLIC CAPITAL LIGATURE TE TSECYRILLIC SMALL " + + "LIGATURE TE TSECYRILLIC CAPITAL LETTER CHE WITH DESCENDERCYRILLIC SMALL " + + "LETTER CHE WITH DESCENDERCYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROK" + + "ECYRILLIC SMALL LETTER CHE WITH VERTICAL STROKECYRILLIC CAPITAL LETTER S" + + "HHACYRILLIC SMALL LETTER SHHACYRILLIC CAPITAL LETTER ABKHASIAN CHECYRILL" + + "IC SMALL LETTER ABKHASIAN CHECYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH " + + "DESCENDERCYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDERCYRILLIC LETT" + + "ER PALOCHKACYRILLIC CAPITAL LETTER ZHE WITH BREVECYRILLIC SMALL LETTER Z" + + "HE WITH BREVECYRILLIC CAPITAL LETTER KA WITH HOOKCYRILLIC SMALL LETTER K" + + "A WITH HOOKCYRILLIC CAPITAL LETTER EL WITH TAILCYRILLIC SMALL LETTER EL " + + "WITH TAILCYRILLIC CAPITAL LETTER EN WITH HOOKCYRILLIC SMALL LETTER EN WI" + + "TH HOOKCYRILLIC CAPITAL LETTER EN WITH TAILCYRILLIC SMALL LETTER EN WITH" + + " TAILCYRILLIC CAPITAL LETTER KHAKASSIAN CHECYRILLIC SMALL LETTER KHAKASS" + + "IAN CHECYRILLIC CAPITAL LETTER EM WITH TAILCYRILLIC SMALL LETTER EM WITH" + + " TAILCYRILLIC SMALL LETTER PALOCHKACYRILLIC CAPITAL LETTER A WITH BREVEC" + + "YRILLIC SMALL LETTER A WITH BREVECYRILLIC CAPITAL LETTER A WITH DIAERESI" + + "SCYRILLIC SMALL LETTER A WITH DIAERESISCYRILLIC CAPITAL LIGATURE A IECYR" + + "ILLIC SMALL LIGATURE A IECYRILLIC CAPITAL LETTER IE WITH BREVECYRILLIC S" + + "MALL LETTER IE WITH BREVECYRILLIC CAPITAL LETTER SCHWACYRILLIC SMALL LET" + + "TER SCHWACYRILLIC CAPITAL LETTER SCHWA WITH DIAERESISCYRILLIC SMALL LETT" + + "ER SCHWA WITH DIAERESISCYRILLIC CAPITAL LETTER ZHE WITH DIAERESISCYRILLI" + + "C SMALL LETTER ZHE WITH DIAERESISCYRILLIC CAPITAL LETTER ZE WITH DIAERES" + + "ISCYRILLIC SMALL LETTER ZE WITH DIAERESISCYRILLIC CAPITAL LETTER ABKHASI" + + "AN DZECYRILLIC SMALL LETTER ABKHASIAN DZECYRILLIC CAPITAL LETTER I WITH " + + "MACRONCYRILLIC SMALL LETTER I WITH MACRONCYRILLIC CAPITAL LETTER I WITH " + + "DIAERESISCYRILLIC SMALL LETTER I WITH DIAERESISCYRILLIC CAPITAL LETTER O" + + " WITH DIAERESISCYRILLIC SMALL LETTER O WITH DIAERESISCYRILLIC CAPITAL LE" + + "TTER BARRED OCYRILLIC SMALL LETTER BARRED OCYRILLIC CAPITAL LETTER BARRE" + + "D O WITH DIAERESISCYRILLIC SMALL LETTER BARRED O WITH DIAERESISCYRILLIC " + + "CAPITAL LETTER E WITH DIAERESISCYRILLIC SMALL LETTER E WITH DIAERESISCYR" + + "ILLIC CAPITAL LETTER U WITH MACRONCYRILLIC SMALL LETTER U WITH MACRONCYR" + + "ILLIC CAPITAL LETTER U WITH DIAERESISCYRILLIC SMALL LETTER U WITH DIAERE" + + "SISCYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTECYRILLIC SMALL LETTER U WI" + + "TH DOUBLE ACUTECYRILLIC CAPITAL LETTER CHE WITH DIAERESISCYRILLIC SMALL " + + "LETTER CHE WITH DIAERESISCYRILLIC CAPITAL LETTER GHE WITH DESCENDERCYRIL" + + "LIC SMALL LETTER GHE WITH DESCENDERCYRILLIC CAPITAL LETTER YERU WITH DIA" + + "ERESISCYRILLIC SMALL LETTER YERU WITH DIAERESISCYRILLIC CAPITAL LETTER G" + + "HE WITH STROKE AND HOOKCYRILLIC SMALL LETTER GHE WITH STROKE AND HOOKCYR" + + "ILLIC CAPITAL LETTER HA WITH HOOKCYRILLIC SMALL LETTER HA WITH HOOKCYRIL" + + "LIC CAPITAL LETTER HA WITH STROKECYRILLIC SMALL LETTER HA WITH STROKECYR" + + "ILLIC CAPITAL LETTER KOMI DECYRILLIC SMALL LETTER KOMI DECYRILLIC CAPITA" + + "L LETTER KOMI DJECYRILLIC SMALL LETTER KOMI DJECYRILLIC CAPITAL LETTER K" + + "OMI ZJECYRILLIC SMALL LETTER KOMI ZJECYRILLIC CAPITAL LETTER KOMI DZJECY" + + "RILLIC SMALL LETTER KOMI DZJECYRILLIC CAPITAL LETTER KOMI LJECYRILLIC SM" + + "ALL LETTER KOMI LJECYRILLIC CAPITAL LETTER KOMI NJECYRILLIC SMALL LETTER" + + " KOMI NJECYRILLIC CAPITAL LETTER KOMI SJECYRILLIC SMALL LETTER KOMI SJEC" + + "YRILLIC CAPITAL LETTER KOMI TJECYRILLIC SMALL LETTER KOMI TJECYRILLIC CA" + + "PITAL LETTER REVERSED ZECYRILLIC SMALL LETTER REVERSED ZECYRILLIC CAPITA" + + "L LETTER EL WITH HOOKCYRILLIC SMALL LETTER EL WITH HOOKCYRILLIC CAPITAL " + + "LETTER LHACYRILLIC SMALL LETTER LHACYRILLIC CAPITAL LETTER RHACYRILLIC S" + + "MALL LETTER RHACYRILLIC CAPITAL LETTER YAECYRILLIC SMALL LETTER YAECYRIL" + + "LIC CAPITAL LETTER QACYRILLIC SMALL LETTER QACYRILLIC CAPITAL LETTER WEC" + + "YRILLIC SMALL LETTER WECYRILLIC CAPITAL LETTER ALEUT KACYRILLIC SMALL LE" + + "TTER ALEUT KACYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOKCYRILLIC SMALL L") + ("" + + "ETTER EL WITH MIDDLE HOOKCYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOKCYRI" + + "LLIC SMALL LETTER EN WITH MIDDLE HOOKCYRILLIC CAPITAL LETTER PE WITH DES" + + "CENDERCYRILLIC SMALL LETTER PE WITH DESCENDERCYRILLIC CAPITAL LETTER SHH" + + "A WITH DESCENDERCYRILLIC SMALL LETTER SHHA WITH DESCENDERCYRILLIC CAPITA" + + "L LETTER EN WITH LEFT HOOKCYRILLIC SMALL LETTER EN WITH LEFT HOOKCYRILLI" + + "C CAPITAL LETTER DZZHECYRILLIC SMALL LETTER DZZHECYRILLIC CAPITAL LETTER" + + " DCHECYRILLIC SMALL LETTER DCHECYRILLIC CAPITAL LETTER EL WITH DESCENDER" + + "CYRILLIC SMALL LETTER EL WITH DESCENDERARMENIAN CAPITAL LETTER AYBARMENI" + + "AN CAPITAL LETTER BENARMENIAN CAPITAL LETTER GIMARMENIAN CAPITAL LETTER " + + "DAARMENIAN CAPITAL LETTER ECHARMENIAN CAPITAL LETTER ZAARMENIAN CAPITAL " + + "LETTER EHARMENIAN CAPITAL LETTER ETARMENIAN CAPITAL LETTER TOARMENIAN CA" + + "PITAL LETTER ZHEARMENIAN CAPITAL LETTER INIARMENIAN CAPITAL LETTER LIWNA" + + "RMENIAN CAPITAL LETTER XEHARMENIAN CAPITAL LETTER CAARMENIAN CAPITAL LET" + + "TER KENARMENIAN CAPITAL LETTER HOARMENIAN CAPITAL LETTER JAARMENIAN CAPI" + + "TAL LETTER GHADARMENIAN CAPITAL LETTER CHEHARMENIAN CAPITAL LETTER MENAR" + + "MENIAN CAPITAL LETTER YIARMENIAN CAPITAL LETTER NOWARMENIAN CAPITAL LETT" + + "ER SHAARMENIAN CAPITAL LETTER VOARMENIAN CAPITAL LETTER CHAARMENIAN CAPI" + + "TAL LETTER PEHARMENIAN CAPITAL LETTER JHEHARMENIAN CAPITAL LETTER RAARME" + + "NIAN CAPITAL LETTER SEHARMENIAN CAPITAL LETTER VEWARMENIAN CAPITAL LETTE" + + "R TIWNARMENIAN CAPITAL LETTER REHARMENIAN CAPITAL LETTER COARMENIAN CAPI" + + "TAL LETTER YIWNARMENIAN CAPITAL LETTER PIWRARMENIAN CAPITAL LETTER KEHAR" + + "MENIAN CAPITAL LETTER OHARMENIAN CAPITAL LETTER FEHARMENIAN MODIFIER LET" + + "TER LEFT HALF RINGARMENIAN APOSTROPHEARMENIAN EMPHASIS MARKARMENIAN EXCL" + + "AMATION MARKARMENIAN COMMAARMENIAN QUESTION MARKARMENIAN ABBREVIATION MA" + + "RKARMENIAN SMALL LETTER AYBARMENIAN SMALL LETTER BENARMENIAN SMALL LETTE" + + "R GIMARMENIAN SMALL LETTER DAARMENIAN SMALL LETTER ECHARMENIAN SMALL LET" + + "TER ZAARMENIAN SMALL LETTER EHARMENIAN SMALL LETTER ETARMENIAN SMALL LET" + + "TER TOARMENIAN SMALL LETTER ZHEARMENIAN SMALL LETTER INIARMENIAN SMALL L" + + "ETTER LIWNARMENIAN SMALL LETTER XEHARMENIAN SMALL LETTER CAARMENIAN SMAL" + + "L LETTER KENARMENIAN SMALL LETTER HOARMENIAN SMALL LETTER JAARMENIAN SMA" + + "LL LETTER GHADARMENIAN SMALL LETTER CHEHARMENIAN SMALL LETTER MENARMENIA" + + "N SMALL LETTER YIARMENIAN SMALL LETTER NOWARMENIAN SMALL LETTER SHAARMEN" + + "IAN SMALL LETTER VOARMENIAN SMALL LETTER CHAARMENIAN SMALL LETTER PEHARM" + + "ENIAN SMALL LETTER JHEHARMENIAN SMALL LETTER RAARMENIAN SMALL LETTER SEH" + + "ARMENIAN SMALL LETTER VEWARMENIAN SMALL LETTER TIWNARMENIAN SMALL LETTER" + + " REHARMENIAN SMALL LETTER COARMENIAN SMALL LETTER YIWNARMENIAN SMALL LET" + + "TER PIWRARMENIAN SMALL LETTER KEHARMENIAN SMALL LETTER OHARMENIAN SMALL " + + "LETTER FEHARMENIAN SMALL LIGATURE ECH YIWNARMENIAN FULL STOPARMENIAN HYP" + + "HENRIGHT-FACING ARMENIAN ETERNITY SIGNLEFT-FACING ARMENIAN ETERNITY SIGN" + + "ARMENIAN DRAM SIGNHEBREW ACCENT ETNAHTAHEBREW ACCENT SEGOLHEBREW ACCENT " + + "SHALSHELETHEBREW ACCENT ZAQEF QATANHEBREW ACCENT ZAQEF GADOLHEBREW ACCEN" + + "T TIPEHAHEBREW ACCENT REVIAHEBREW ACCENT ZARQAHEBREW ACCENT PASHTAHEBREW" + + " ACCENT YETIVHEBREW ACCENT TEVIRHEBREW ACCENT GERESHHEBREW ACCENT GERESH" + + " MUQDAMHEBREW ACCENT GERSHAYIMHEBREW ACCENT QARNEY PARAHEBREW ACCENT TEL" + + "ISHA GEDOLAHEBREW ACCENT PAZERHEBREW ACCENT ATNAH HAFUKHHEBREW ACCENT MU" + + "NAHHEBREW ACCENT MAHAPAKHHEBREW ACCENT MERKHAHEBREW ACCENT MERKHA KEFULA" + + "HEBREW ACCENT DARGAHEBREW ACCENT QADMAHEBREW ACCENT TELISHA QETANAHEBREW" + + " ACCENT YERAH BEN YOMOHEBREW ACCENT OLEHEBREW ACCENT ILUYHEBREW ACCENT D" + + "EHIHEBREW ACCENT ZINORHEBREW MARK MASORA CIRCLEHEBREW POINT SHEVAHEBREW " + + "POINT HATAF SEGOLHEBREW POINT HATAF PATAHHEBREW POINT HATAF QAMATSHEBREW" + + " POINT HIRIQHEBREW POINT TSEREHEBREW POINT SEGOLHEBREW POINT PATAHHEBREW" + + " POINT QAMATSHEBREW POINT HOLAMHEBREW POINT HOLAM HASER FOR VAVHEBREW PO" + + "INT QUBUTSHEBREW POINT DAGESH OR MAPIQHEBREW POINT METEGHEBREW PUNCTUATI" + + "ON MAQAFHEBREW POINT RAFEHEBREW PUNCTUATION PASEQHEBREW POINT SHIN DOTHE" + + "BREW POINT SIN DOTHEBREW PUNCTUATION SOF PASUQHEBREW MARK UPPER DOTHEBRE" + + "W MARK LOWER DOTHEBREW PUNCTUATION NUN HAFUKHAHEBREW POINT QAMATS QATANH" + + "EBREW LETTER ALEFHEBREW LETTER BETHEBREW LETTER GIMELHEBREW LETTER DALET" + + "HEBREW LETTER HEHEBREW LETTER VAVHEBREW LETTER ZAYINHEBREW LETTER HETHEB" + + "REW LETTER TETHEBREW LETTER YODHEBREW LETTER FINAL KAFHEBREW LETTER KAFH" + + "EBREW LETTER LAMEDHEBREW LETTER FINAL MEMHEBREW LETTER MEMHEBREW LETTER " + + "FINAL NUNHEBREW LETTER NUNHEBREW LETTER SAMEKHHEBREW LETTER AYINHEBREW L" + + "ETTER FINAL PEHEBREW LETTER PEHEBREW LETTER FINAL TSADIHEBREW LETTER TSA" + + "DIHEBREW LETTER QOFHEBREW LETTER RESHHEBREW LETTER SHINHEBREW LETTER TAV" + + "HEBREW LIGATURE YIDDISH DOUBLE VAVHEBREW LIGATURE YIDDISH VAV YODHEBREW ") + ("" + + "LIGATURE YIDDISH DOUBLE YODHEBREW PUNCTUATION GERESHHEBREW PUNCTUATION G" + + "ERSHAYIMARABIC NUMBER SIGNARABIC SIGN SANAHARABIC FOOTNOTE MARKERARABIC " + + "SIGN SAFHAARABIC SIGN SAMVATARABIC NUMBER MARK ABOVEARABIC-INDIC CUBE RO" + + "OTARABIC-INDIC FOURTH ROOTARABIC RAYARABIC-INDIC PER MILLE SIGNARABIC-IN" + + "DIC PER TEN THOUSAND SIGNAFGHANI SIGNARABIC COMMAARABIC DATE SEPARATORAR" + + "ABIC POETIC VERSE SIGNARABIC SIGN MISRAARABIC SIGN SALLALLAHOU ALAYHE WA" + + "SSALLAMARABIC SIGN ALAYHE ASSALLAMARABIC SIGN RAHMATULLAH ALAYHEARABIC S" + + "IGN RADI ALLAHOU ANHUARABIC SIGN TAKHALLUSARABIC SMALL HIGH TAHARABIC SM" + + "ALL HIGH LIGATURE ALEF WITH LAM WITH YEHARABIC SMALL HIGH ZAINARABIC SMA" + + "LL FATHAARABIC SMALL DAMMAARABIC SMALL KASRAARABIC SEMICOLONARABIC LETTE" + + "R MARKARABIC TRIPLE DOT PUNCTUATION MARKARABIC QUESTION MARKARABIC LETTE" + + "R KASHMIRI YEHARABIC LETTER HAMZAARABIC LETTER ALEF WITH MADDA ABOVEARAB" + + "IC LETTER ALEF WITH HAMZA ABOVEARABIC LETTER WAW WITH HAMZA ABOVEARABIC " + + "LETTER ALEF WITH HAMZA BELOWARABIC LETTER YEH WITH HAMZA ABOVEARABIC LET" + + "TER ALEFARABIC LETTER BEHARABIC LETTER TEH MARBUTAARABIC LETTER TEHARABI" + + "C LETTER THEHARABIC LETTER JEEMARABIC LETTER HAHARABIC LETTER KHAHARABIC" + + " LETTER DALARABIC LETTER THALARABIC LETTER REHARABIC LETTER ZAINARABIC L" + + "ETTER SEENARABIC LETTER SHEENARABIC LETTER SADARABIC LETTER DADARABIC LE" + + "TTER TAHARABIC LETTER ZAHARABIC LETTER AINARABIC LETTER GHAINARABIC LETT" + + "ER KEHEH WITH TWO DOTS ABOVEARABIC LETTER KEHEH WITH THREE DOTS BELOWARA" + + "BIC LETTER FARSI YEH WITH INVERTED VARABIC LETTER FARSI YEH WITH TWO DOT" + + "S ABOVEARABIC LETTER FARSI YEH WITH THREE DOTS ABOVEARABIC TATWEELARABIC" + + " LETTER FEHARABIC LETTER QAFARABIC LETTER KAFARABIC LETTER LAMARABIC LET" + + "TER MEEMARABIC LETTER NOONARABIC LETTER HEHARABIC LETTER WAWARABIC LETTE" + + "R ALEF MAKSURAARABIC LETTER YEHARABIC FATHATANARABIC DAMMATANARABIC KASR" + + "ATANARABIC FATHAARABIC DAMMAARABIC KASRAARABIC SHADDAARABIC SUKUNARABIC " + + "MADDAH ABOVEARABIC HAMZA ABOVEARABIC HAMZA BELOWARABIC SUBSCRIPT ALEFARA" + + "BIC INVERTED DAMMAARABIC MARK NOON GHUNNAARABIC ZWARAKAYARABIC VOWEL SIG" + + "N SMALL V ABOVEARABIC VOWEL SIGN INVERTED SMALL V ABOVEARABIC VOWEL SIGN" + + " DOT BELOWARABIC REVERSED DAMMAARABIC FATHA WITH TWO DOTSARABIC WAVY HAM" + + "ZA BELOWARABIC-INDIC DIGIT ZEROARABIC-INDIC DIGIT ONEARABIC-INDIC DIGIT " + + "TWOARABIC-INDIC DIGIT THREEARABIC-INDIC DIGIT FOURARABIC-INDIC DIGIT FIV" + + "EARABIC-INDIC DIGIT SIXARABIC-INDIC DIGIT SEVENARABIC-INDIC DIGIT EIGHTA" + + "RABIC-INDIC DIGIT NINEARABIC PERCENT SIGNARABIC DECIMAL SEPARATORARABIC " + + "THOUSANDS SEPARATORARABIC FIVE POINTED STARARABIC LETTER DOTLESS BEHARAB" + + "IC LETTER DOTLESS QAFARABIC LETTER SUPERSCRIPT ALEFARABIC LETTER ALEF WA" + + "SLAARABIC LETTER ALEF WITH WAVY HAMZA ABOVEARABIC LETTER ALEF WITH WAVY " + + "HAMZA BELOWARABIC LETTER HIGH HAMZAARABIC LETTER HIGH HAMZA ALEFARABIC L" + + "ETTER HIGH HAMZA WAWARABIC LETTER U WITH HAMZA ABOVEARABIC LETTER HIGH H" + + "AMZA YEHARABIC LETTER TTEHARABIC LETTER TTEHEHARABIC LETTER BEEHARABIC L" + + "ETTER TEH WITH RINGARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDSARAB" + + "IC LETTER PEHARABIC LETTER TEHEHARABIC LETTER BEHEHARABIC LETTER HAH WIT" + + "H HAMZA ABOVEARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVEARABIC LETTER" + + " NYEHARABIC LETTER DYEHARABIC LETTER HAH WITH THREE DOTS ABOVEARABIC LET" + + "TER TCHEHARABIC LETTER TCHEHEHARABIC LETTER DDALARABIC LETTER DAL WITH R" + + "INGARABIC LETTER DAL WITH DOT BELOWARABIC LETTER DAL WITH DOT BELOW AND " + + "SMALL TAHARABIC LETTER DAHALARABIC LETTER DDAHALARABIC LETTER DULARABIC " + + "LETTER DAL WITH THREE DOTS ABOVE DOWNWARDSARABIC LETTER DAL WITH FOUR DO" + + "TS ABOVEARABIC LETTER RREHARABIC LETTER REH WITH SMALL VARABIC LETTER RE" + + "H WITH RINGARABIC LETTER REH WITH DOT BELOWARABIC LETTER REH WITH SMALL " + + "V BELOWARABIC LETTER REH WITH DOT BELOW AND DOT ABOVEARABIC LETTER REH W" + + "ITH TWO DOTS ABOVEARABIC LETTER JEHARABIC LETTER REH WITH FOUR DOTS ABOV" + + "EARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVEARABIC LETTER SEEN WITH " + + "THREE DOTS BELOWARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS " + + "ABOVEARABIC LETTER SAD WITH TWO DOTS BELOWARABIC LETTER SAD WITH THREE D" + + "OTS ABOVEARABIC LETTER TAH WITH THREE DOTS ABOVEARABIC LETTER AIN WITH T" + + "HREE DOTS ABOVEARABIC LETTER DOTLESS FEHARABIC LETTER FEH WITH DOT MOVED" + + " BELOWARABIC LETTER FEH WITH DOT BELOWARABIC LETTER VEHARABIC LETTER FEH" + + " WITH THREE DOTS BELOWARABIC LETTER PEHEHARABIC LETTER QAF WITH DOT ABOV" + + "EARABIC LETTER QAF WITH THREE DOTS ABOVEARABIC LETTER KEHEHARABIC LETTER" + + " SWASH KAFARABIC LETTER KAF WITH RINGARABIC LETTER KAF WITH DOT ABOVEARA" + + "BIC LETTER NGARABIC LETTER KAF WITH THREE DOTS BELOWARABIC LETTER GAFARA" + + "BIC LETTER GAF WITH RINGARABIC LETTER NGOEHARABIC LETTER GAF WITH TWO DO" + + "TS BELOWARABIC LETTER GUEHARABIC LETTER GAF WITH THREE DOTS ABOVEARABIC ") + ("" + + "LETTER LAM WITH SMALL VARABIC LETTER LAM WITH DOT ABOVEARABIC LETTER LAM" + + " WITH THREE DOTS ABOVEARABIC LETTER LAM WITH THREE DOTS BELOWARABIC LETT" + + "ER NOON WITH DOT BELOWARABIC LETTER NOON GHUNNAARABIC LETTER RNOONARABIC" + + " LETTER NOON WITH RINGARABIC LETTER NOON WITH THREE DOTS ABOVEARABIC LET" + + "TER HEH DOACHASHMEEARABIC LETTER TCHEH WITH DOT ABOVEARABIC LETTER HEH W" + + "ITH YEH ABOVEARABIC LETTER HEH GOALARABIC LETTER HEH GOAL WITH HAMZA ABO" + + "VEARABIC LETTER TEH MARBUTA GOALARABIC LETTER WAW WITH RINGARABIC LETTER" + + " KIRGHIZ OEARABIC LETTER OEARABIC LETTER UARABIC LETTER YUARABIC LETTER " + + "KIRGHIZ YUARABIC LETTER WAW WITH TWO DOTS ABOVEARABIC LETTER VEARABIC LE" + + "TTER FARSI YEHARABIC LETTER YEH WITH TAILARABIC LETTER YEH WITH SMALL VA" + + "RABIC LETTER WAW WITH DOT ABOVEARABIC LETTER EARABIC LETTER YEH WITH THR" + + "EE DOTS BELOWARABIC LETTER YEH BARREEARABIC LETTER YEH BARREE WITH HAMZA" + + " ABOVEARABIC FULL STOPARABIC LETTER AEARABIC SMALL HIGH LIGATURE SAD WIT" + + "H LAM WITH ALEF MAKSURAARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF" + + " MAKSURAARABIC SMALL HIGH MEEM INITIAL FORMARABIC SMALL HIGH LAM ALEFARA" + + "BIC SMALL HIGH JEEMARABIC SMALL HIGH THREE DOTSARABIC SMALL HIGH SEENARA" + + "BIC END OF AYAHARABIC START OF RUB EL HIZBARABIC SMALL HIGH ROUNDED ZERO" + + "ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZEROARABIC SMALL HIGH DOTLESS HEAD" + + " OF KHAHARABIC SMALL HIGH MEEM ISOLATED FORMARABIC SMALL LOW SEENARABIC " + + "SMALL HIGH MADDAARABIC SMALL WAWARABIC SMALL YEHARABIC SMALL HIGH YEHARA" + + "BIC SMALL HIGH NOONARABIC PLACE OF SAJDAHARABIC EMPTY CENTRE LOW STOPARA" + + "BIC EMPTY CENTRE HIGH STOPARABIC ROUNDED HIGH STOP WITH FILLED CENTREARA" + + "BIC SMALL LOW MEEMARABIC LETTER DAL WITH INVERTED VARABIC LETTER REH WIT" + + "H INVERTED VEXTENDED ARABIC-INDIC DIGIT ZEROEXTENDED ARABIC-INDIC DIGIT " + + "ONEEXTENDED ARABIC-INDIC DIGIT TWOEXTENDED ARABIC-INDIC DIGIT THREEEXTEN" + + "DED ARABIC-INDIC DIGIT FOUREXTENDED ARABIC-INDIC DIGIT FIVEEXTENDED ARAB" + + "IC-INDIC DIGIT SIXEXTENDED ARABIC-INDIC DIGIT SEVENEXTENDED ARABIC-INDIC" + + " DIGIT EIGHTEXTENDED ARABIC-INDIC DIGIT NINEARABIC LETTER SHEEN WITH DOT" + + " BELOWARABIC LETTER DAD WITH DOT BELOWARABIC LETTER GHAIN WITH DOT BELOW" + + "ARABIC SIGN SINDHI AMPERSANDARABIC SIGN SINDHI POSTPOSITION MENARABIC LE" + + "TTER HEH WITH INVERTED VSYRIAC END OF PARAGRAPHSYRIAC SUPRALINEAR FULL S" + + "TOPSYRIAC SUBLINEAR FULL STOPSYRIAC SUPRALINEAR COLONSYRIAC SUBLINEAR CO" + + "LONSYRIAC HORIZONTAL COLONSYRIAC COLON SKEWED LEFTSYRIAC COLON SKEWED RI" + + "GHTSYRIAC SUPRALINEAR COLON SKEWED LEFTSYRIAC SUBLINEAR COLON SKEWED RIG" + + "HTSYRIAC CONTRACTIONSYRIAC HARKLEAN OBELUSSYRIAC HARKLEAN METOBELUSSYRIA" + + "C HARKLEAN ASTERISCUSSYRIAC ABBREVIATION MARKSYRIAC LETTER ALAPHSYRIAC L" + + "ETTER SUPERSCRIPT ALAPHSYRIAC LETTER BETHSYRIAC LETTER GAMALSYRIAC LETTE" + + "R GAMAL GARSHUNISYRIAC LETTER DALATHSYRIAC LETTER DOTLESS DALATH RISHSYR" + + "IAC LETTER HESYRIAC LETTER WAWSYRIAC LETTER ZAINSYRIAC LETTER HETHSYRIAC" + + " LETTER TETHSYRIAC LETTER TETH GARSHUNISYRIAC LETTER YUDHSYRIAC LETTER Y" + + "UDH HESYRIAC LETTER KAPHSYRIAC LETTER LAMADHSYRIAC LETTER MIMSYRIAC LETT" + + "ER NUNSYRIAC LETTER SEMKATHSYRIAC LETTER FINAL SEMKATHSYRIAC LETTER ESYR" + + "IAC LETTER PESYRIAC LETTER REVERSED PESYRIAC LETTER SADHESYRIAC LETTER Q" + + "APHSYRIAC LETTER RISHSYRIAC LETTER SHINSYRIAC LETTER TAWSYRIAC LETTER PE" + + "RSIAN BHETHSYRIAC LETTER PERSIAN GHAMALSYRIAC LETTER PERSIAN DHALATHSYRI" + + "AC PTHAHA ABOVESYRIAC PTHAHA BELOWSYRIAC PTHAHA DOTTEDSYRIAC ZQAPHA ABOV" + + "ESYRIAC ZQAPHA BELOWSYRIAC ZQAPHA DOTTEDSYRIAC RBASA ABOVESYRIAC RBASA B" + + "ELOWSYRIAC DOTTED ZLAMA HORIZONTALSYRIAC DOTTED ZLAMA ANGULARSYRIAC HBAS" + + "A ABOVESYRIAC HBASA BELOWSYRIAC HBASA-ESASA DOTTEDSYRIAC ESASA ABOVESYRI" + + "AC ESASA BELOWSYRIAC RWAHASYRIAC FEMININE DOTSYRIAC QUSHSHAYASYRIAC RUKK" + + "AKHASYRIAC TWO VERTICAL DOTS ABOVESYRIAC TWO VERTICAL DOTS BELOWSYRIAC T" + + "HREE DOTS ABOVESYRIAC THREE DOTS BELOWSYRIAC OBLIQUE LINE ABOVESYRIAC OB" + + "LIQUE LINE BELOWSYRIAC MUSICSYRIAC BARREKHSYRIAC LETTER SOGDIAN ZHAINSYR" + + "IAC LETTER SOGDIAN KHAPHSYRIAC LETTER SOGDIAN FEARABIC LETTER BEH WITH T" + + "HREE DOTS HORIZONTALLY BELOWARABIC LETTER BEH WITH DOT BELOW AND THREE D" + + "OTS ABOVEARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOWARABIC " + + "LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVEARAB" + + "IC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVEARABIC LETTER BEH WITH IN" + + "VERTED SMALL V BELOWARABIC LETTER BEH WITH SMALL VARABIC LETTER HAH WITH" + + " TWO DOTS ABOVEARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOWA" + + "RABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAHARABIC LETT" + + "ER DAL WITH INVERTED SMALL V BELOWARABIC LETTER REH WITH STROKEARABIC LE" + + "TTER SEEN WITH FOUR DOTS ABOVEARABIC LETTER AIN WITH TWO DOTS ABOVEARABI" + + "C LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVEARABIC LETTER AIN W") + ("" + + "ITH TWO DOTS VERTICALLY ABOVEARABIC LETTER FEH WITH TWO DOTS BELOWARABIC" + + " LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOWARABIC LETTER KEHEH WI" + + "TH DOT ABOVEARABIC LETTER KEHEH WITH THREE DOTS ABOVEARABIC LETTER KEHEH" + + " WITH THREE DOTS POINTING UPWARDS BELOWARABIC LETTER MEEM WITH DOT ABOVE" + + "ARABIC LETTER MEEM WITH DOT BELOWARABIC LETTER NOON WITH TWO DOTS BELOWA" + + "RABIC LETTER NOON WITH SMALL TAHARABIC LETTER NOON WITH SMALL VARABIC LE" + + "TTER LAM WITH BARARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVEARABIC " + + "LETTER REH WITH HAMZA ABOVEARABIC LETTER SEEN WITH TWO DOTS VERTICALLY A" + + "BOVEARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH BELOWARABIC LETTER HA" + + "H WITH SMALL ARABIC LETTER TAH AND TWO DOTSARABIC LETTER SEEN WITH SMALL" + + " ARABIC LETTER TAH AND TWO DOTSARABIC LETTER REH WITH SMALL ARABIC LETTE" + + "R TAH AND TWO DOTSARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH ABOVEAR" + + "ABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVEARABIC LETTER" + + " ALEF WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVEARABIC LETTER FARSI YE" + + "H WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVEARABIC LETTER FARSI YEH WITH" + + " EXTENDED ARABIC-INDIC DIGIT THREE ABOVEARABIC LETTER FARSI YEH WITH EXT" + + "ENDED ARABIC-INDIC DIGIT FOUR BELOWARABIC LETTER WAW WITH EXTENDED ARABI" + + "C-INDIC DIGIT TWO ABOVEARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGI" + + "T THREE ABOVEARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT T" + + "WO ABOVEARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT THREE " + + "ABOVEARABIC LETTER HAH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOWARABIC" + + " LETTER SEEN WITH EXTENDED ARABIC-INDIC DIGIT FOUR ABOVEARABIC LETTER SE" + + "EN WITH INVERTED VARABIC LETTER KAF WITH TWO DOTS ABOVETHAANA LETTER HAA" + + "THAANA LETTER SHAVIYANITHAANA LETTER NOONUTHAANA LETTER RAATHAANA LETTER" + + " BAATHAANA LETTER LHAVIYANITHAANA LETTER KAAFUTHAANA LETTER ALIFUTHAANA " + + "LETTER VAAVUTHAANA LETTER MEEMUTHAANA LETTER FAAFUTHAANA LETTER DHAALUTH" + + "AANA LETTER THAATHAANA LETTER LAAMUTHAANA LETTER GAAFUTHAANA LETTER GNAV" + + "IYANITHAANA LETTER SEENUTHAANA LETTER DAVIYANITHAANA LETTER ZAVIYANITHAA" + + "NA LETTER TAVIYANITHAANA LETTER YAATHAANA LETTER PAVIYANITHAANA LETTER J" + + "AVIYANITHAANA LETTER CHAVIYANITHAANA LETTER TTAATHAANA LETTER HHAATHAANA" + + " LETTER KHAATHAANA LETTER THAALUTHAANA LETTER ZAATHAANA LETTER SHEENUTHA" + + "ANA LETTER SAADHUTHAANA LETTER DAADHUTHAANA LETTER TOTHAANA LETTER ZOTHA" + + "ANA LETTER AINUTHAANA LETTER GHAINUTHAANA LETTER QAAFUTHAANA LETTER WAAV" + + "UTHAANA ABAFILITHAANA AABAAFILITHAANA IBIFILITHAANA EEBEEFILITHAANA UBUF" + + "ILITHAANA OOBOOFILITHAANA EBEFILITHAANA EYBEYFILITHAANA OBOFILITHAANA OA" + + "BOAFILITHAANA SUKUNTHAANA LETTER NAANKO DIGIT ZERONKO DIGIT ONENKO DIGIT" + + " TWONKO DIGIT THREENKO DIGIT FOURNKO DIGIT FIVENKO DIGIT SIXNKO DIGIT SE" + + "VENNKO DIGIT EIGHTNKO DIGIT NINENKO LETTER ANKO LETTER EENKO LETTER INKO" + + " LETTER ENKO LETTER UNKO LETTER OONKO LETTER ONKO LETTER DAGBASINNANKO L" + + "ETTER NNKO LETTER BANKO LETTER PANKO LETTER TANKO LETTER JANKO LETTER CH" + + "ANKO LETTER DANKO LETTER RANKO LETTER RRANKO LETTER SANKO LETTER GBANKO " + + "LETTER FANKO LETTER KANKO LETTER LANKO LETTER NA WOLOSONKO LETTER MANKO " + + "LETTER NYANKO LETTER NANKO LETTER HANKO LETTER WANKO LETTER YANKO LETTER" + + " NYA WOLOSONKO LETTER JONA JANKO LETTER JONA CHANKO LETTER JONA RANKO CO" + + "MBINING SHORT HIGH TONENKO COMBINING SHORT LOW TONENKO COMBINING SHORT R" + + "ISING TONENKO COMBINING LONG DESCENDING TONENKO COMBINING LONG HIGH TONE" + + "NKO COMBINING LONG LOW TONENKO COMBINING LONG RISING TONENKO COMBINING N" + + "ASALIZATION MARKNKO COMBINING DOUBLE DOT ABOVENKO HIGH TONE APOSTROPHENK" + + "O LOW TONE APOSTROPHENKO SYMBOL OO DENNENNKO SYMBOL GBAKURUNENNKO COMMAN" + + "KO EXCLAMATION MARKNKO LAJANYALANSAMARITAN LETTER ALAFSAMARITAN LETTER B" + + "ITSAMARITAN LETTER GAMANSAMARITAN LETTER DALATSAMARITAN LETTER IYSAMARIT" + + "AN LETTER BAASAMARITAN LETTER ZENSAMARITAN LETTER ITSAMARITAN LETTER TIT" + + "SAMARITAN LETTER YUTSAMARITAN LETTER KAAFSAMARITAN LETTER LABATSAMARITAN" + + " LETTER MIMSAMARITAN LETTER NUNSAMARITAN LETTER SINGAATSAMARITAN LETTER " + + "INSAMARITAN LETTER FISAMARITAN LETTER TSAADIYSAMARITAN LETTER QUFSAMARIT" + + "AN LETTER RISHSAMARITAN LETTER SHANSAMARITAN LETTER TAAFSAMARITAN MARK I" + + "NSAMARITAN MARK IN-ALAFSAMARITAN MARK OCCLUSIONSAMARITAN MARK DAGESHSAMA" + + "RITAN MODIFIER LETTER EPENTHETIC YUTSAMARITAN MARK EPENTHETIC YUTSAMARIT" + + "AN VOWEL SIGN LONG ESAMARITAN VOWEL SIGN ESAMARITAN VOWEL SIGN OVERLONG " + + "AASAMARITAN VOWEL SIGN LONG AASAMARITAN VOWEL SIGN AASAMARITAN VOWEL SIG" + + "N OVERLONG ASAMARITAN VOWEL SIGN LONG ASAMARITAN VOWEL SIGN ASAMARITAN M" + + "ODIFIER LETTER SHORT ASAMARITAN VOWEL SIGN SHORT ASAMARITAN VOWEL SIGN L" + + "ONG USAMARITAN VOWEL SIGN USAMARITAN MODIFIER LETTER ISAMARITAN VOWEL SI" + + "GN LONG ISAMARITAN VOWEL SIGN ISAMARITAN VOWEL SIGN OSAMARITAN VOWEL SIG") + ("" + + "N SUKUNSAMARITAN MARK NEQUDAASAMARITAN PUNCTUATION NEQUDAASAMARITAN PUNC" + + "TUATION AFSAAQSAMARITAN PUNCTUATION ANGEDSAMARITAN PUNCTUATION BAUSAMARI" + + "TAN PUNCTUATION ATMAAUSAMARITAN PUNCTUATION SHIYYAALAASAMARITAN ABBREVIA" + + "TION MARKSAMARITAN PUNCTUATION MELODIC QITSASAMARITAN PUNCTUATION ZIQAAS" + + "AMARITAN PUNCTUATION QITSASAMARITAN PUNCTUATION ZAEFSAMARITAN PUNCTUATIO" + + "N TURUSAMARITAN PUNCTUATION ARKAANUSAMARITAN PUNCTUATION SOF MASHFAATSAM" + + "ARITAN PUNCTUATION ANNAAUMANDAIC LETTER HALQAMANDAIC LETTER ABMANDAIC LE" + + "TTER AGMANDAIC LETTER ADMANDAIC LETTER AHMANDAIC LETTER USHENNAMANDAIC L" + + "ETTER AZMANDAIC LETTER ITMANDAIC LETTER ATTMANDAIC LETTER AKSAMANDAIC LE" + + "TTER AKMANDAIC LETTER ALMANDAIC LETTER AMMANDAIC LETTER ANMANDAIC LETTER" + + " ASMANDAIC LETTER INMANDAIC LETTER APMANDAIC LETTER ASZMANDAIC LETTER AQ" + + "MANDAIC LETTER ARMANDAIC LETTER ASHMANDAIC LETTER ATMANDAIC LETTER DUSHE" + + "NNAMANDAIC LETTER KADMANDAIC LETTER AINMANDAIC AFFRICATION MARKMANDAIC V" + + "OCALIZATION MARKMANDAIC GEMINATION MARKMANDAIC PUNCTUATIONARABIC LETTER " + + "BEH WITH SMALL V BELOWARABIC LETTER BEH WITH HAMZA ABOVEARABIC LETTER JE" + + "EM WITH TWO DOTS ABOVEARABIC LETTER TAH WITH TWO DOTS ABOVEARABIC LETTER" + + " FEH WITH DOT BELOW AND THREE DOTS ABOVEARABIC LETTER QAF WITH DOT BELOW" + + "ARABIC LETTER LAM WITH DOUBLE BARARABIC LETTER MEEM WITH THREE DOTS ABOV" + + "EARABIC LETTER YEH WITH TWO DOTS BELOW AND HAMZA ABOVEARABIC LETTER YEH " + + "WITH TWO DOTS BELOW AND DOT ABOVEARABIC LETTER REH WITH LOOPARABIC LETTE" + + "R WAW WITH DOT WITHINARABIC LETTER ROHINGYA YEHARABIC LETTER LOW ALEFARA" + + "BIC LETTER DAL WITH THREE DOTS BELOWARABIC LETTER SAD WITH THREE DOTS BE" + + "LOWARABIC LETTER GAF WITH INVERTED STROKEARABIC LETTER STRAIGHT WAWARABI" + + "C LETTER ZAIN WITH INVERTED V ABOVEARABIC LETTER AIN WITH THREE DOTS BEL" + + "OWARABIC LETTER KAF WITH DOT BELOWARABIC LETTER BEH WITH SMALL MEEM ABOV" + + "EARABIC LETTER PEH WITH SMALL MEEM ABOVEARABIC LETTER TEH WITH SMALL TEH" + + " ABOVEARABIC LETTER REH WITH SMALL NOON ABOVEARABIC LETTER YEH WITH TWO " + + "DOTS BELOW AND SMALL NOON ABOVEARABIC LETTER AFRICAN FEHARABIC LETTER AF" + + "RICAN QAFARABIC LETTER AFRICAN NOONARABIC SMALL HIGH WORD AR-RUBARABIC S" + + "MALL HIGH SADARABIC SMALL HIGH AINARABIC SMALL HIGH QAFARABIC SMALL HIGH" + + " NOON WITH KASRAARABIC SMALL LOW NOON WITH KASRAARABIC SMALL HIGH WORD A" + + "TH-THALATHAARABIC SMALL HIGH WORD AS-SAJDAARABIC SMALL HIGH WORD AN-NISF" + + "ARABIC SMALL HIGH WORD SAKTAARABIC SMALL HIGH WORD QIFARABIC SMALL HIGH " + + "WORD WAQFAARABIC SMALL HIGH FOOTNOTE MARKERARABIC SMALL HIGH SIGN SAFHAA" + + "RABIC DISPUTED END OF AYAHARABIC TURNED DAMMA BELOWARABIC CURLY FATHAARA" + + "BIC CURLY DAMMAARABIC CURLY KASRAARABIC CURLY FATHATANARABIC CURLY DAMMA" + + "TANARABIC CURLY KASRATANARABIC TONE ONE DOT ABOVEARABIC TONE TWO DOTS AB" + + "OVEARABIC TONE LOOP ABOVEARABIC TONE ONE DOT BELOWARABIC TONE TWO DOTS B" + + "ELOWARABIC TONE LOOP BELOWARABIC OPEN FATHATANARABIC OPEN DAMMATANARABIC" + + " OPEN KASRATANARABIC SMALL HIGH WAWARABIC FATHA WITH RINGARABIC FATHA WI" + + "TH DOT ABOVEARABIC KASRA WITH DOT BELOWARABIC LEFT ARROWHEAD ABOVEARABIC" + + " RIGHT ARROWHEAD ABOVEARABIC LEFT ARROWHEAD BELOWARABIC RIGHT ARROWHEAD " + + "BELOWARABIC DOUBLE RIGHT ARROWHEAD ABOVEARABIC DOUBLE RIGHT ARROWHEAD AB" + + "OVE WITH DOTARABIC RIGHT ARROWHEAD ABOVE WITH DOTARABIC DAMMA WITH DOTAR" + + "ABIC MARK SIDEWAYS NOON GHUNNADEVANAGARI SIGN INVERTED CANDRABINDUDEVANA" + + "GARI SIGN CANDRABINDUDEVANAGARI SIGN ANUSVARADEVANAGARI SIGN VISARGADEVA" + + "NAGARI LETTER SHORT ADEVANAGARI LETTER ADEVANAGARI LETTER AADEVANAGARI L" + + "ETTER IDEVANAGARI LETTER IIDEVANAGARI LETTER UDEVANAGARI LETTER UUDEVANA" + + "GARI LETTER VOCALIC RDEVANAGARI LETTER VOCALIC LDEVANAGARI LETTER CANDRA" + + " EDEVANAGARI LETTER SHORT EDEVANAGARI LETTER EDEVANAGARI LETTER AIDEVANA" + + "GARI LETTER CANDRA ODEVANAGARI LETTER SHORT ODEVANAGARI LETTER ODEVANAGA" + + "RI LETTER AUDEVANAGARI LETTER KADEVANAGARI LETTER KHADEVANAGARI LETTER G" + + "ADEVANAGARI LETTER GHADEVANAGARI LETTER NGADEVANAGARI LETTER CADEVANAGAR" + + "I LETTER CHADEVANAGARI LETTER JADEVANAGARI LETTER JHADEVANAGARI LETTER N" + + "YADEVANAGARI LETTER TTADEVANAGARI LETTER TTHADEVANAGARI LETTER DDADEVANA" + + "GARI LETTER DDHADEVANAGARI LETTER NNADEVANAGARI LETTER TADEVANAGARI LETT" + + "ER THADEVANAGARI LETTER DADEVANAGARI LETTER DHADEVANAGARI LETTER NADEVAN" + + "AGARI LETTER NNNADEVANAGARI LETTER PADEVANAGARI LETTER PHADEVANAGARI LET" + + "TER BADEVANAGARI LETTER BHADEVANAGARI LETTER MADEVANAGARI LETTER YADEVAN" + + "AGARI LETTER RADEVANAGARI LETTER RRADEVANAGARI LETTER LADEVANAGARI LETTE" + + "R LLADEVANAGARI LETTER LLLADEVANAGARI LETTER VADEVANAGARI LETTER SHADEVA" + + "NAGARI LETTER SSADEVANAGARI LETTER SADEVANAGARI LETTER HADEVANAGARI VOWE" + + "L SIGN OEDEVANAGARI VOWEL SIGN OOEDEVANAGARI SIGN NUKTADEVANAGARI SIGN A" + + "VAGRAHADEVANAGARI VOWEL SIGN AADEVANAGARI VOWEL SIGN IDEVANAGARI VOWEL S") + ("" + + "IGN IIDEVANAGARI VOWEL SIGN UDEVANAGARI VOWEL SIGN UUDEVANAGARI VOWEL SI" + + "GN VOCALIC RDEVANAGARI VOWEL SIGN VOCALIC RRDEVANAGARI VOWEL SIGN CANDRA" + + " EDEVANAGARI VOWEL SIGN SHORT EDEVANAGARI VOWEL SIGN EDEVANAGARI VOWEL S" + + "IGN AIDEVANAGARI VOWEL SIGN CANDRA ODEVANAGARI VOWEL SIGN SHORT ODEVANAG" + + "ARI VOWEL SIGN ODEVANAGARI VOWEL SIGN AUDEVANAGARI SIGN VIRAMADEVANAGARI" + + " VOWEL SIGN PRISHTHAMATRA EDEVANAGARI VOWEL SIGN AWDEVANAGARI OMDEVANAGA" + + "RI STRESS SIGN UDATTADEVANAGARI STRESS SIGN ANUDATTADEVANAGARI GRAVE ACC" + + "ENTDEVANAGARI ACUTE ACCENTDEVANAGARI VOWEL SIGN CANDRA LONG EDEVANAGARI " + + "VOWEL SIGN UEDEVANAGARI VOWEL SIGN UUEDEVANAGARI LETTER QADEVANAGARI LET" + + "TER KHHADEVANAGARI LETTER GHHADEVANAGARI LETTER ZADEVANAGARI LETTER DDDH" + + "ADEVANAGARI LETTER RHADEVANAGARI LETTER FADEVANAGARI LETTER YYADEVANAGAR" + + "I LETTER VOCALIC RRDEVANAGARI LETTER VOCALIC LLDEVANAGARI VOWEL SIGN VOC" + + "ALIC LDEVANAGARI VOWEL SIGN VOCALIC LLDEVANAGARI DANDADEVANAGARI DOUBLE " + + "DANDADEVANAGARI DIGIT ZERODEVANAGARI DIGIT ONEDEVANAGARI DIGIT TWODEVANA" + + "GARI DIGIT THREEDEVANAGARI DIGIT FOURDEVANAGARI DIGIT FIVEDEVANAGARI DIG" + + "IT SIXDEVANAGARI DIGIT SEVENDEVANAGARI DIGIT EIGHTDEVANAGARI DIGIT NINED" + + "EVANAGARI ABBREVIATION SIGNDEVANAGARI SIGN HIGH SPACING DOTDEVANAGARI LE" + + "TTER CANDRA ADEVANAGARI LETTER OEDEVANAGARI LETTER OOEDEVANAGARI LETTER " + + "AWDEVANAGARI LETTER UEDEVANAGARI LETTER UUEDEVANAGARI LETTER MARWARI DDA" + + "DEVANAGARI LETTER ZHADEVANAGARI LETTER HEAVY YADEVANAGARI LETTER GGADEVA" + + "NAGARI LETTER JJADEVANAGARI LETTER GLOTTAL STOPDEVANAGARI LETTER DDDADEV" + + "ANAGARI LETTER BBABENGALI ANJIBENGALI SIGN CANDRABINDUBENGALI SIGN ANUSV" + + "ARABENGALI SIGN VISARGABENGALI LETTER ABENGALI LETTER AABENGALI LETTER I" + + "BENGALI LETTER IIBENGALI LETTER UBENGALI LETTER UUBENGALI LETTER VOCALIC" + + " RBENGALI LETTER VOCALIC LBENGALI LETTER EBENGALI LETTER AIBENGALI LETTE" + + "R OBENGALI LETTER AUBENGALI LETTER KABENGALI LETTER KHABENGALI LETTER GA" + + "BENGALI LETTER GHABENGALI LETTER NGABENGALI LETTER CABENGALI LETTER CHAB" + + "ENGALI LETTER JABENGALI LETTER JHABENGALI LETTER NYABENGALI LETTER TTABE" + + "NGALI LETTER TTHABENGALI LETTER DDABENGALI LETTER DDHABENGALI LETTER NNA" + + "BENGALI LETTER TABENGALI LETTER THABENGALI LETTER DABENGALI LETTER DHABE" + + "NGALI LETTER NABENGALI LETTER PABENGALI LETTER PHABENGALI LETTER BABENGA" + + "LI LETTER BHABENGALI LETTER MABENGALI LETTER YABENGALI LETTER RABENGALI " + + "LETTER LABENGALI LETTER SHABENGALI LETTER SSABENGALI LETTER SABENGALI LE" + + "TTER HABENGALI SIGN NUKTABENGALI SIGN AVAGRAHABENGALI VOWEL SIGN AABENGA" + + "LI VOWEL SIGN IBENGALI VOWEL SIGN IIBENGALI VOWEL SIGN UBENGALI VOWEL SI" + + "GN UUBENGALI VOWEL SIGN VOCALIC RBENGALI VOWEL SIGN VOCALIC RRBENGALI VO" + + "WEL SIGN EBENGALI VOWEL SIGN AIBENGALI VOWEL SIGN OBENGALI VOWEL SIGN AU" + + "BENGALI SIGN VIRAMABENGALI LETTER KHANDA TABENGALI AU LENGTH MARKBENGALI" + + " LETTER RRABENGALI LETTER RHABENGALI LETTER YYABENGALI LETTER VOCALIC RR" + + "BENGALI LETTER VOCALIC LLBENGALI VOWEL SIGN VOCALIC LBENGALI VOWEL SIGN " + + "VOCALIC LLBENGALI DIGIT ZEROBENGALI DIGIT ONEBENGALI DIGIT TWOBENGALI DI" + + "GIT THREEBENGALI DIGIT FOURBENGALI DIGIT FIVEBENGALI DIGIT SIXBENGALI DI" + + "GIT SEVENBENGALI DIGIT EIGHTBENGALI DIGIT NINEBENGALI LETTER RA WITH MID" + + "DLE DIAGONALBENGALI LETTER RA WITH LOWER DIAGONALBENGALI RUPEE MARKBENGA" + + "LI RUPEE SIGNBENGALI CURRENCY NUMERATOR ONEBENGALI CURRENCY NUMERATOR TW" + + "OBENGALI CURRENCY NUMERATOR THREEBENGALI CURRENCY NUMERATOR FOURBENGALI " + + "CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATORBENGALI CURRENCY DENOMIN" + + "ATOR SIXTEENBENGALI ISSHARBENGALI GANDA MARKGURMUKHI SIGN ADAK BINDIGURM" + + "UKHI SIGN BINDIGURMUKHI SIGN VISARGAGURMUKHI LETTER AGURMUKHI LETTER AAG" + + "URMUKHI LETTER IGURMUKHI LETTER IIGURMUKHI LETTER UGURMUKHI LETTER UUGUR" + + "MUKHI LETTER EEGURMUKHI LETTER AIGURMUKHI LETTER OOGURMUKHI LETTER AUGUR" + + "MUKHI LETTER KAGURMUKHI LETTER KHAGURMUKHI LETTER GAGURMUKHI LETTER GHAG" + + "URMUKHI LETTER NGAGURMUKHI LETTER CAGURMUKHI LETTER CHAGURMUKHI LETTER J" + + "AGURMUKHI LETTER JHAGURMUKHI LETTER NYAGURMUKHI LETTER TTAGURMUKHI LETTE" + + "R TTHAGURMUKHI LETTER DDAGURMUKHI LETTER DDHAGURMUKHI LETTER NNAGURMUKHI" + + " LETTER TAGURMUKHI LETTER THAGURMUKHI LETTER DAGURMUKHI LETTER DHAGURMUK" + + "HI LETTER NAGURMUKHI LETTER PAGURMUKHI LETTER PHAGURMUKHI LETTER BAGURMU" + + "KHI LETTER BHAGURMUKHI LETTER MAGURMUKHI LETTER YAGURMUKHI LETTER RAGURM" + + "UKHI LETTER LAGURMUKHI LETTER LLAGURMUKHI LETTER VAGURMUKHI LETTER SHAGU" + + "RMUKHI LETTER SAGURMUKHI LETTER HAGURMUKHI SIGN NUKTAGURMUKHI VOWEL SIGN" + + " AAGURMUKHI VOWEL SIGN IGURMUKHI VOWEL SIGN IIGURMUKHI VOWEL SIGN UGURMU" + + "KHI VOWEL SIGN UUGURMUKHI VOWEL SIGN EEGURMUKHI VOWEL SIGN AIGURMUKHI VO" + + "WEL SIGN OOGURMUKHI VOWEL SIGN AUGURMUKHI SIGN VIRAMAGURMUKHI SIGN UDAAT" + + "GURMUKHI LETTER KHHAGURMUKHI LETTER GHHAGURMUKHI LETTER ZAGURMUKHI LETTE") + ("" + + "R RRAGURMUKHI LETTER FAGURMUKHI DIGIT ZEROGURMUKHI DIGIT ONEGURMUKHI DIG" + + "IT TWOGURMUKHI DIGIT THREEGURMUKHI DIGIT FOURGURMUKHI DIGIT FIVEGURMUKHI" + + " DIGIT SIXGURMUKHI DIGIT SEVENGURMUKHI DIGIT EIGHTGURMUKHI DIGIT NINEGUR" + + "MUKHI TIPPIGURMUKHI ADDAKGURMUKHI IRIGURMUKHI URAGURMUKHI EK ONKARGURMUK" + + "HI SIGN YAKASHGUJARATI SIGN CANDRABINDUGUJARATI SIGN ANUSVARAGUJARATI SI" + + "GN VISARGAGUJARATI LETTER AGUJARATI LETTER AAGUJARATI LETTER IGUJARATI L" + + "ETTER IIGUJARATI LETTER UGUJARATI LETTER UUGUJARATI LETTER VOCALIC RGUJA" + + "RATI LETTER VOCALIC LGUJARATI VOWEL CANDRA EGUJARATI LETTER EGUJARATI LE" + + "TTER AIGUJARATI VOWEL CANDRA OGUJARATI LETTER OGUJARATI LETTER AUGUJARAT" + + "I LETTER KAGUJARATI LETTER KHAGUJARATI LETTER GAGUJARATI LETTER GHAGUJAR" + + "ATI LETTER NGAGUJARATI LETTER CAGUJARATI LETTER CHAGUJARATI LETTER JAGUJ" + + "ARATI LETTER JHAGUJARATI LETTER NYAGUJARATI LETTER TTAGUJARATI LETTER TT" + + "HAGUJARATI LETTER DDAGUJARATI LETTER DDHAGUJARATI LETTER NNAGUJARATI LET" + + "TER TAGUJARATI LETTER THAGUJARATI LETTER DAGUJARATI LETTER DHAGUJARATI L" + + "ETTER NAGUJARATI LETTER PAGUJARATI LETTER PHAGUJARATI LETTER BAGUJARATI " + + "LETTER BHAGUJARATI LETTER MAGUJARATI LETTER YAGUJARATI LETTER RAGUJARATI" + + " LETTER LAGUJARATI LETTER LLAGUJARATI LETTER VAGUJARATI LETTER SHAGUJARA" + + "TI LETTER SSAGUJARATI LETTER SAGUJARATI LETTER HAGUJARATI SIGN NUKTAGUJA" + + "RATI SIGN AVAGRAHAGUJARATI VOWEL SIGN AAGUJARATI VOWEL SIGN IGUJARATI VO" + + "WEL SIGN IIGUJARATI VOWEL SIGN UGUJARATI VOWEL SIGN UUGUJARATI VOWEL SIG" + + "N VOCALIC RGUJARATI VOWEL SIGN VOCALIC RRGUJARATI VOWEL SIGN CANDRA EGUJ" + + "ARATI VOWEL SIGN EGUJARATI VOWEL SIGN AIGUJARATI VOWEL SIGN CANDRA OGUJA" + + "RATI VOWEL SIGN OGUJARATI VOWEL SIGN AUGUJARATI SIGN VIRAMAGUJARATI OMGU" + + "JARATI LETTER VOCALIC RRGUJARATI LETTER VOCALIC LLGUJARATI VOWEL SIGN VO" + + "CALIC LGUJARATI VOWEL SIGN VOCALIC LLGUJARATI DIGIT ZEROGUJARATI DIGIT O" + + "NEGUJARATI DIGIT TWOGUJARATI DIGIT THREEGUJARATI DIGIT FOURGUJARATI DIGI" + + "T FIVEGUJARATI DIGIT SIXGUJARATI DIGIT SEVENGUJARATI DIGIT EIGHTGUJARATI" + + " DIGIT NINEGUJARATI ABBREVIATION SIGNGUJARATI RUPEE SIGNGUJARATI LETTER " + + "ZHAORIYA SIGN CANDRABINDUORIYA SIGN ANUSVARAORIYA SIGN VISARGAORIYA LETT" + + "ER AORIYA LETTER AAORIYA LETTER IORIYA LETTER IIORIYA LETTER UORIYA LETT" + + "ER UUORIYA LETTER VOCALIC RORIYA LETTER VOCALIC LORIYA LETTER EORIYA LET" + + "TER AIORIYA LETTER OORIYA LETTER AUORIYA LETTER KAORIYA LETTER KHAORIYA " + + "LETTER GAORIYA LETTER GHAORIYA LETTER NGAORIYA LETTER CAORIYA LETTER CHA" + + "ORIYA LETTER JAORIYA LETTER JHAORIYA LETTER NYAORIYA LETTER TTAORIYA LET" + + "TER TTHAORIYA LETTER DDAORIYA LETTER DDHAORIYA LETTER NNAORIYA LETTER TA" + + "ORIYA LETTER THAORIYA LETTER DAORIYA LETTER DHAORIYA LETTER NAORIYA LETT" + + "ER PAORIYA LETTER PHAORIYA LETTER BAORIYA LETTER BHAORIYA LETTER MAORIYA" + + " LETTER YAORIYA LETTER RAORIYA LETTER LAORIYA LETTER LLAORIYA LETTER VAO" + + "RIYA LETTER SHAORIYA LETTER SSAORIYA LETTER SAORIYA LETTER HAORIYA SIGN " + + "NUKTAORIYA SIGN AVAGRAHAORIYA VOWEL SIGN AAORIYA VOWEL SIGN IORIYA VOWEL" + + " SIGN IIORIYA VOWEL SIGN UORIYA VOWEL SIGN UUORIYA VOWEL SIGN VOCALIC RO" + + "RIYA VOWEL SIGN VOCALIC RRORIYA VOWEL SIGN EORIYA VOWEL SIGN AIORIYA VOW" + + "EL SIGN OORIYA VOWEL SIGN AUORIYA SIGN VIRAMAORIYA AI LENGTH MARKORIYA A" + + "U LENGTH MARKORIYA LETTER RRAORIYA LETTER RHAORIYA LETTER YYAORIYA LETTE" + + "R VOCALIC RRORIYA LETTER VOCALIC LLORIYA VOWEL SIGN VOCALIC LORIYA VOWEL" + + " SIGN VOCALIC LLORIYA DIGIT ZEROORIYA DIGIT ONEORIYA DIGIT TWOORIYA DIGI" + + "T THREEORIYA DIGIT FOURORIYA DIGIT FIVEORIYA DIGIT SIXORIYA DIGIT SEVENO" + + "RIYA DIGIT EIGHTORIYA DIGIT NINEORIYA ISSHARORIYA LETTER WAORIYA FRACTIO" + + "N ONE QUARTERORIYA FRACTION ONE HALFORIYA FRACTION THREE QUARTERSORIYA F" + + "RACTION ONE SIXTEENTHORIYA FRACTION ONE EIGHTHORIYA FRACTION THREE SIXTE" + + "ENTHSTAMIL SIGN ANUSVARATAMIL SIGN VISARGATAMIL LETTER ATAMIL LETTER AAT" + + "AMIL LETTER ITAMIL LETTER IITAMIL LETTER UTAMIL LETTER UUTAMIL LETTER ET" + + "AMIL LETTER EETAMIL LETTER AITAMIL LETTER OTAMIL LETTER OOTAMIL LETTER A" + + "UTAMIL LETTER KATAMIL LETTER NGATAMIL LETTER CATAMIL LETTER JATAMIL LETT" + + "ER NYATAMIL LETTER TTATAMIL LETTER NNATAMIL LETTER TATAMIL LETTER NATAMI" + + "L LETTER NNNATAMIL LETTER PATAMIL LETTER MATAMIL LETTER YATAMIL LETTER R" + + "ATAMIL LETTER RRATAMIL LETTER LATAMIL LETTER LLATAMIL LETTER LLLATAMIL L" + + "ETTER VATAMIL LETTER SHATAMIL LETTER SSATAMIL LETTER SATAMIL LETTER HATA" + + "MIL VOWEL SIGN AATAMIL VOWEL SIGN ITAMIL VOWEL SIGN IITAMIL VOWEL SIGN U" + + "TAMIL VOWEL SIGN UUTAMIL VOWEL SIGN ETAMIL VOWEL SIGN EETAMIL VOWEL SIGN" + + " AITAMIL VOWEL SIGN OTAMIL VOWEL SIGN OOTAMIL VOWEL SIGN AUTAMIL SIGN VI" + + "RAMATAMIL OMTAMIL AU LENGTH MARKTAMIL DIGIT ZEROTAMIL DIGIT ONETAMIL DIG" + + "IT TWOTAMIL DIGIT THREETAMIL DIGIT FOURTAMIL DIGIT FIVETAMIL DIGIT SIXTA" + + "MIL DIGIT SEVENTAMIL DIGIT EIGHTTAMIL DIGIT NINETAMIL NUMBER TENTAMIL NU") + ("" + + "MBER ONE HUNDREDTAMIL NUMBER ONE THOUSANDTAMIL DAY SIGNTAMIL MONTH SIGNT" + + "AMIL YEAR SIGNTAMIL DEBIT SIGNTAMIL CREDIT SIGNTAMIL AS ABOVE SIGNTAMIL " + + "RUPEE SIGNTAMIL NUMBER SIGNTELUGU SIGN COMBINING CANDRABINDU ABOVETELUGU" + + " SIGN CANDRABINDUTELUGU SIGN ANUSVARATELUGU SIGN VISARGATELUGU LETTER AT" + + "ELUGU LETTER AATELUGU LETTER ITELUGU LETTER IITELUGU LETTER UTELUGU LETT" + + "ER UUTELUGU LETTER VOCALIC RTELUGU LETTER VOCALIC LTELUGU LETTER ETELUGU" + + " LETTER EETELUGU LETTER AITELUGU LETTER OTELUGU LETTER OOTELUGU LETTER A" + + "UTELUGU LETTER KATELUGU LETTER KHATELUGU LETTER GATELUGU LETTER GHATELUG" + + "U LETTER NGATELUGU LETTER CATELUGU LETTER CHATELUGU LETTER JATELUGU LETT" + + "ER JHATELUGU LETTER NYATELUGU LETTER TTATELUGU LETTER TTHATELUGU LETTER " + + "DDATELUGU LETTER DDHATELUGU LETTER NNATELUGU LETTER TATELUGU LETTER THAT" + + "ELUGU LETTER DATELUGU LETTER DHATELUGU LETTER NATELUGU LETTER PATELUGU L" + + "ETTER PHATELUGU LETTER BATELUGU LETTER BHATELUGU LETTER MATELUGU LETTER " + + "YATELUGU LETTER RATELUGU LETTER RRATELUGU LETTER LATELUGU LETTER LLATELU" + + "GU LETTER LLLATELUGU LETTER VATELUGU LETTER SHATELUGU LETTER SSATELUGU L" + + "ETTER SATELUGU LETTER HATELUGU SIGN AVAGRAHATELUGU VOWEL SIGN AATELUGU V" + + "OWEL SIGN ITELUGU VOWEL SIGN IITELUGU VOWEL SIGN UTELUGU VOWEL SIGN UUTE" + + "LUGU VOWEL SIGN VOCALIC RTELUGU VOWEL SIGN VOCALIC RRTELUGU VOWEL SIGN E" + + "TELUGU VOWEL SIGN EETELUGU VOWEL SIGN AITELUGU VOWEL SIGN OTELUGU VOWEL " + + "SIGN OOTELUGU VOWEL SIGN AUTELUGU SIGN VIRAMATELUGU LENGTH MARKTELUGU AI" + + " LENGTH MARKTELUGU LETTER TSATELUGU LETTER DZATELUGU LETTER RRRATELUGU L" + + "ETTER VOCALIC RRTELUGU LETTER VOCALIC LLTELUGU VOWEL SIGN VOCALIC LTELUG" + + "U VOWEL SIGN VOCALIC LLTELUGU DIGIT ZEROTELUGU DIGIT ONETELUGU DIGIT TWO" + + "TELUGU DIGIT THREETELUGU DIGIT FOURTELUGU DIGIT FIVETELUGU DIGIT SIXTELU" + + "GU DIGIT SEVENTELUGU DIGIT EIGHTTELUGU DIGIT NINETELUGU FRACTION DIGIT Z" + + "ERO FOR ODD POWERS OF FOURTELUGU FRACTION DIGIT ONE FOR ODD POWERS OF FO" + + "URTELUGU FRACTION DIGIT TWO FOR ODD POWERS OF FOURTELUGU FRACTION DIGIT " + + "THREE FOR ODD POWERS OF FOURTELUGU FRACTION DIGIT ONE FOR EVEN POWERS OF" + + " FOURTELUGU FRACTION DIGIT TWO FOR EVEN POWERS OF FOURTELUGU FRACTION DI" + + "GIT THREE FOR EVEN POWERS OF FOURTELUGU SIGN TUUMUKANNADA SIGN SPACING C" + + "ANDRABINDUKANNADA SIGN CANDRABINDUKANNADA SIGN ANUSVARAKANNADA SIGN VISA" + + "RGAKANNADA LETTER AKANNADA LETTER AAKANNADA LETTER IKANNADA LETTER IIKAN" + + "NADA LETTER UKANNADA LETTER UUKANNADA LETTER VOCALIC RKANNADA LETTER VOC" + + "ALIC LKANNADA LETTER EKANNADA LETTER EEKANNADA LETTER AIKANNADA LETTER O" + + "KANNADA LETTER OOKANNADA LETTER AUKANNADA LETTER KAKANNADA LETTER KHAKAN" + + "NADA LETTER GAKANNADA LETTER GHAKANNADA LETTER NGAKANNADA LETTER CAKANNA" + + "DA LETTER CHAKANNADA LETTER JAKANNADA LETTER JHAKANNADA LETTER NYAKANNAD" + + "A LETTER TTAKANNADA LETTER TTHAKANNADA LETTER DDAKANNADA LETTER DDHAKANN" + + "ADA LETTER NNAKANNADA LETTER TAKANNADA LETTER THAKANNADA LETTER DAKANNAD" + + "A LETTER DHAKANNADA LETTER NAKANNADA LETTER PAKANNADA LETTER PHAKANNADA " + + "LETTER BAKANNADA LETTER BHAKANNADA LETTER MAKANNADA LETTER YAKANNADA LET" + + "TER RAKANNADA LETTER RRAKANNADA LETTER LAKANNADA LETTER LLAKANNADA LETTE" + + "R VAKANNADA LETTER SHAKANNADA LETTER SSAKANNADA LETTER SAKANNADA LETTER " + + "HAKANNADA SIGN NUKTAKANNADA SIGN AVAGRAHAKANNADA VOWEL SIGN AAKANNADA VO" + + "WEL SIGN IKANNADA VOWEL SIGN IIKANNADA VOWEL SIGN UKANNADA VOWEL SIGN UU" + + "KANNADA VOWEL SIGN VOCALIC RKANNADA VOWEL SIGN VOCALIC RRKANNADA VOWEL S" + + "IGN EKANNADA VOWEL SIGN EEKANNADA VOWEL SIGN AIKANNADA VOWEL SIGN OKANNA" + + "DA VOWEL SIGN OOKANNADA VOWEL SIGN AUKANNADA SIGN VIRAMAKANNADA LENGTH M" + + "ARKKANNADA AI LENGTH MARKKANNADA LETTER FAKANNADA LETTER VOCALIC RRKANNA" + + "DA LETTER VOCALIC LLKANNADA VOWEL SIGN VOCALIC LKANNADA VOWEL SIGN VOCAL" + + "IC LLKANNADA DIGIT ZEROKANNADA DIGIT ONEKANNADA DIGIT TWOKANNADA DIGIT T" + + "HREEKANNADA DIGIT FOURKANNADA DIGIT FIVEKANNADA DIGIT SIXKANNADA DIGIT S" + + "EVENKANNADA DIGIT EIGHTKANNADA DIGIT NINEKANNADA SIGN JIHVAMULIYAKANNADA" + + " SIGN UPADHMANIYAMALAYALAM SIGN CANDRABINDUMALAYALAM SIGN ANUSVARAMALAYA" + + "LAM SIGN VISARGAMALAYALAM LETTER AMALAYALAM LETTER AAMALAYALAM LETTER IM" + + "ALAYALAM LETTER IIMALAYALAM LETTER UMALAYALAM LETTER UUMALAYALAM LETTER " + + "VOCALIC RMALAYALAM LETTER VOCALIC LMALAYALAM LETTER EMALAYALAM LETTER EE" + + "MALAYALAM LETTER AIMALAYALAM LETTER OMALAYALAM LETTER OOMALAYALAM LETTER" + + " AUMALAYALAM LETTER KAMALAYALAM LETTER KHAMALAYALAM LETTER GAMALAYALAM L" + + "ETTER GHAMALAYALAM LETTER NGAMALAYALAM LETTER CAMALAYALAM LETTER CHAMALA" + + "YALAM LETTER JAMALAYALAM LETTER JHAMALAYALAM LETTER NYAMALAYALAM LETTER " + + "TTAMALAYALAM LETTER TTHAMALAYALAM LETTER DDAMALAYALAM LETTER DDHAMALAYAL" + + "AM LETTER NNAMALAYALAM LETTER TAMALAYALAM LETTER THAMALAYALAM LETTER DAM" + + "ALAYALAM LETTER DHAMALAYALAM LETTER NAMALAYALAM LETTER NNNAMALAYALAM LET") + ("" + + "TER PAMALAYALAM LETTER PHAMALAYALAM LETTER BAMALAYALAM LETTER BHAMALAYAL" + + "AM LETTER MAMALAYALAM LETTER YAMALAYALAM LETTER RAMALAYALAM LETTER RRAMA" + + "LAYALAM LETTER LAMALAYALAM LETTER LLAMALAYALAM LETTER LLLAMALAYALAM LETT" + + "ER VAMALAYALAM LETTER SHAMALAYALAM LETTER SSAMALAYALAM LETTER SAMALAYALA" + + "M LETTER HAMALAYALAM LETTER TTTAMALAYALAM SIGN AVAGRAHAMALAYALAM VOWEL S" + + "IGN AAMALAYALAM VOWEL SIGN IMALAYALAM VOWEL SIGN IIMALAYALAM VOWEL SIGN " + + "UMALAYALAM VOWEL SIGN UUMALAYALAM VOWEL SIGN VOCALIC RMALAYALAM VOWEL SI" + + "GN VOCALIC RRMALAYALAM VOWEL SIGN EMALAYALAM VOWEL SIGN EEMALAYALAM VOWE" + + "L SIGN AIMALAYALAM VOWEL SIGN OMALAYALAM VOWEL SIGN OOMALAYALAM VOWEL SI" + + "GN AUMALAYALAM SIGN VIRAMAMALAYALAM LETTER DOT REPHMALAYALAM SIGN PARAMA" + + "LAYALAM LETTER CHILLU MMALAYALAM LETTER CHILLU YMALAYALAM LETTER CHILLU " + + "LLLMALAYALAM AU LENGTH MARKMALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIE" + + "THMALAYALAM FRACTION ONE FORTIETHMALAYALAM FRACTION THREE EIGHTIETHSMALA" + + "YALAM FRACTION ONE TWENTIETHMALAYALAM FRACTION ONE TENTHMALAYALAM FRACTI" + + "ON THREE TWENTIETHSMALAYALAM FRACTION ONE FIFTHMALAYALAM LETTER ARCHAIC " + + "IIMALAYALAM LETTER VOCALIC RRMALAYALAM LETTER VOCALIC LLMALAYALAM VOWEL " + + "SIGN VOCALIC LMALAYALAM VOWEL SIGN VOCALIC LLMALAYALAM DIGIT ZEROMALAYAL" + + "AM DIGIT ONEMALAYALAM DIGIT TWOMALAYALAM DIGIT THREEMALAYALAM DIGIT FOUR" + + "MALAYALAM DIGIT FIVEMALAYALAM DIGIT SIXMALAYALAM DIGIT SEVENMALAYALAM DI" + + "GIT EIGHTMALAYALAM DIGIT NINEMALAYALAM NUMBER TENMALAYALAM NUMBER ONE HU" + + "NDREDMALAYALAM NUMBER ONE THOUSANDMALAYALAM FRACTION ONE QUARTERMALAYALA" + + "M FRACTION ONE HALFMALAYALAM FRACTION THREE QUARTERSMALAYALAM FRACTION O" + + "NE SIXTEENTHMALAYALAM FRACTION ONE EIGHTHMALAYALAM FRACTION THREE SIXTEE" + + "NTHSMALAYALAM DATE MARKMALAYALAM LETTER CHILLU NNMALAYALAM LETTER CHILLU" + + " NMALAYALAM LETTER CHILLU RRMALAYALAM LETTER CHILLU LMALAYALAM LETTER CH" + + "ILLU LLMALAYALAM LETTER CHILLU KSINHALA SIGN ANUSVARAYASINHALA SIGN VISA" + + "RGAYASINHALA LETTER AYANNASINHALA LETTER AAYANNASINHALA LETTER AEYANNASI" + + "NHALA LETTER AEEYANNASINHALA LETTER IYANNASINHALA LETTER IIYANNASINHALA " + + "LETTER UYANNASINHALA LETTER UUYANNASINHALA LETTER IRUYANNASINHALA LETTER" + + " IRUUYANNASINHALA LETTER ILUYANNASINHALA LETTER ILUUYANNASINHALA LETTER " + + "EYANNASINHALA LETTER EEYANNASINHALA LETTER AIYANNASINHALA LETTER OYANNAS" + + "INHALA LETTER OOYANNASINHALA LETTER AUYANNASINHALA LETTER ALPAPRAANA KAY" + + "ANNASINHALA LETTER MAHAAPRAANA KAYANNASINHALA LETTER ALPAPRAANA GAYANNAS" + + "INHALA LETTER MAHAAPRAANA GAYANNASINHALA LETTER KANTAJA NAASIKYAYASINHAL" + + "A LETTER SANYAKA GAYANNASINHALA LETTER ALPAPRAANA CAYANNASINHALA LETTER " + + "MAHAAPRAANA CAYANNASINHALA LETTER ALPAPRAANA JAYANNASINHALA LETTER MAHAA" + + "PRAANA JAYANNASINHALA LETTER TAALUJA NAASIKYAYASINHALA LETTER TAALUJA SA" + + "NYOOGA NAAKSIKYAYASINHALA LETTER SANYAKA JAYANNASINHALA LETTER ALPAPRAAN" + + "A TTAYANNASINHALA LETTER MAHAAPRAANA TTAYANNASINHALA LETTER ALPAPRAANA D" + + "DAYANNASINHALA LETTER MAHAAPRAANA DDAYANNASINHALA LETTER MUURDHAJA NAYAN" + + "NASINHALA LETTER SANYAKA DDAYANNASINHALA LETTER ALPAPRAANA TAYANNASINHAL" + + "A LETTER MAHAAPRAANA TAYANNASINHALA LETTER ALPAPRAANA DAYANNASINHALA LET" + + "TER MAHAAPRAANA DAYANNASINHALA LETTER DANTAJA NAYANNASINHALA LETTER SANY" + + "AKA DAYANNASINHALA LETTER ALPAPRAANA PAYANNASINHALA LETTER MAHAAPRAANA P" + + "AYANNASINHALA LETTER ALPAPRAANA BAYANNASINHALA LETTER MAHAAPRAANA BAYANN" + + "ASINHALA LETTER MAYANNASINHALA LETTER AMBA BAYANNASINHALA LETTER YAYANNA" + + "SINHALA LETTER RAYANNASINHALA LETTER DANTAJA LAYANNASINHALA LETTER VAYAN" + + "NASINHALA LETTER TAALUJA SAYANNASINHALA LETTER MUURDHAJA SAYANNASINHALA " + + "LETTER DANTAJA SAYANNASINHALA LETTER HAYANNASINHALA LETTER MUURDHAJA LAY" + + "ANNASINHALA LETTER FAYANNASINHALA SIGN AL-LAKUNASINHALA VOWEL SIGN AELA-" + + "PILLASINHALA VOWEL SIGN KETTI AEDA-PILLASINHALA VOWEL SIGN DIGA AEDA-PIL" + + "LASINHALA VOWEL SIGN KETTI IS-PILLASINHALA VOWEL SIGN DIGA IS-PILLASINHA" + + "LA VOWEL SIGN KETTI PAA-PILLASINHALA VOWEL SIGN DIGA PAA-PILLASINHALA VO" + + "WEL SIGN GAETTA-PILLASINHALA VOWEL SIGN KOMBUVASINHALA VOWEL SIGN DIGA K" + + "OMBUVASINHALA VOWEL SIGN KOMBU DEKASINHALA VOWEL SIGN KOMBUVA HAA AELA-P" + + "ILLASINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLASINHALA VOWEL SIGN KOM" + + "BUVA HAA GAYANUKITTASINHALA VOWEL SIGN GAYANUKITTASINHALA LITH DIGIT ZER" + + "OSINHALA LITH DIGIT ONESINHALA LITH DIGIT TWOSINHALA LITH DIGIT THREESIN" + + "HALA LITH DIGIT FOURSINHALA LITH DIGIT FIVESINHALA LITH DIGIT SIXSINHALA" + + " LITH DIGIT SEVENSINHALA LITH DIGIT EIGHTSINHALA LITH DIGIT NINESINHALA " + + "VOWEL SIGN DIGA GAETTA-PILLASINHALA VOWEL SIGN DIGA GAYANUKITTASINHALA P" + + "UNCTUATION KUNDDALIYATHAI CHARACTER KO KAITHAI CHARACTER KHO KHAITHAI CH" + + "ARACTER KHO KHUATTHAI CHARACTER KHO KHWAITHAI CHARACTER KHO KHONTHAI CHA" + + "RACTER KHO RAKHANGTHAI CHARACTER NGO NGUTHAI CHARACTER CHO CHANTHAI CHAR") + ("" + + "ACTER CHO CHINGTHAI CHARACTER CHO CHANGTHAI CHARACTER SO SOTHAI CHARACTE" + + "R CHO CHOETHAI CHARACTER YO YINGTHAI CHARACTER DO CHADATHAI CHARACTER TO" + + " PATAKTHAI CHARACTER THO THANTHAI CHARACTER THO NANGMONTHOTHAI CHARACTER" + + " THO PHUTHAOTHAI CHARACTER NO NENTHAI CHARACTER DO DEKTHAI CHARACTER TO " + + "TAOTHAI CHARACTER THO THUNGTHAI CHARACTER THO THAHANTHAI CHARACTER THO T" + + "HONGTHAI CHARACTER NO NUTHAI CHARACTER BO BAIMAITHAI CHARACTER PO PLATHA" + + "I CHARACTER PHO PHUNGTHAI CHARACTER FO FATHAI CHARACTER PHO PHANTHAI CHA" + + "RACTER FO FANTHAI CHARACTER PHO SAMPHAOTHAI CHARACTER MO MATHAI CHARACTE" + + "R YO YAKTHAI CHARACTER RO RUATHAI CHARACTER RUTHAI CHARACTER LO LINGTHAI" + + " CHARACTER LUTHAI CHARACTER WO WAENTHAI CHARACTER SO SALATHAI CHARACTER " + + "SO RUSITHAI CHARACTER SO SUATHAI CHARACTER HO HIPTHAI CHARACTER LO CHULA" + + "THAI CHARACTER O ANGTHAI CHARACTER HO NOKHUKTHAI CHARACTER PAIYANNOITHAI" + + " CHARACTER SARA ATHAI CHARACTER MAI HAN-AKATTHAI CHARACTER SARA AATHAI C" + + "HARACTER SARA AMTHAI CHARACTER SARA ITHAI CHARACTER SARA IITHAI CHARACTE" + + "R SARA UETHAI CHARACTER SARA UEETHAI CHARACTER SARA UTHAI CHARACTER SARA" + + " UUTHAI CHARACTER PHINTHUTHAI CURRENCY SYMBOL BAHTTHAI CHARACTER SARA ET" + + "HAI CHARACTER SARA AETHAI CHARACTER SARA OTHAI CHARACTER SARA AI MAIMUAN" + + "THAI CHARACTER SARA AI MAIMALAITHAI CHARACTER LAKKHANGYAOTHAI CHARACTER " + + "MAIYAMOKTHAI CHARACTER MAITAIKHUTHAI CHARACTER MAI EKTHAI CHARACTER MAI " + + "THOTHAI CHARACTER MAI TRITHAI CHARACTER MAI CHATTAWATHAI CHARACTER THANT" + + "HAKHATTHAI CHARACTER NIKHAHITTHAI CHARACTER YAMAKKANTHAI CHARACTER FONGM" + + "ANTHAI DIGIT ZEROTHAI DIGIT ONETHAI DIGIT TWOTHAI DIGIT THREETHAI DIGIT " + + "FOURTHAI DIGIT FIVETHAI DIGIT SIXTHAI DIGIT SEVENTHAI DIGIT EIGHTTHAI DI" + + "GIT NINETHAI CHARACTER ANGKHANKHUTHAI CHARACTER KHOMUTLAO LETTER KOLAO L" + + "ETTER KHO SUNGLAO LETTER KHO TAMLAO LETTER NGOLAO LETTER COLAO LETTER SO" + + " TAMLAO LETTER NYOLAO LETTER DOLAO LETTER TOLAO LETTER THO SUNGLAO LETTE" + + "R THO TAMLAO LETTER NOLAO LETTER BOLAO LETTER POLAO LETTER PHO SUNGLAO L" + + "ETTER FO TAMLAO LETTER PHO TAMLAO LETTER FO SUNGLAO LETTER MOLAO LETTER " + + "YOLAO LETTER LO LINGLAO LETTER LO LOOTLAO LETTER WOLAO LETTER SO SUNGLAO" + + " LETTER HO SUNGLAO LETTER OLAO LETTER HO TAMLAO ELLIPSISLAO VOWEL SIGN A" + + "LAO VOWEL SIGN MAI KANLAO VOWEL SIGN AALAO VOWEL SIGN AMLAO VOWEL SIGN I" + + "LAO VOWEL SIGN IILAO VOWEL SIGN YLAO VOWEL SIGN YYLAO VOWEL SIGN ULAO VO" + + "WEL SIGN UULAO VOWEL SIGN MAI KONLAO SEMIVOWEL SIGN LOLAO SEMIVOWEL SIGN" + + " NYOLAO VOWEL SIGN ELAO VOWEL SIGN EILAO VOWEL SIGN OLAO VOWEL SIGN AYLA" + + "O VOWEL SIGN AILAO KO LALAO TONE MAI EKLAO TONE MAI THOLAO TONE MAI TILA" + + "O TONE MAI CATAWALAO CANCELLATION MARKLAO NIGGAHITALAO DIGIT ZEROLAO DIG" + + "IT ONELAO DIGIT TWOLAO DIGIT THREELAO DIGIT FOURLAO DIGIT FIVELAO DIGIT " + + "SIXLAO DIGIT SEVENLAO DIGIT EIGHTLAO DIGIT NINELAO HO NOLAO HO MOLAO LET" + + "TER KHMU GOLAO LETTER KHMU NYOTIBETAN SYLLABLE OMTIBETAN MARK GTER YIG M" + + "GO TRUNCATED ATIBETAN MARK GTER YIG MGO -UM RNAM BCAD MATIBETAN MARK GTE" + + "R YIG MGO -UM GTER TSHEG MATIBETAN MARK INITIAL YIG MGO MDUN MATIBETAN M" + + "ARK CLOSING YIG MGO SGAB MATIBETAN MARK CARET YIG MGO PHUR SHAD MATIBETA" + + "N MARK YIG MGO TSHEG SHAD MATIBETAN MARK SBRUL SHADTIBETAN MARK BSKUR YI" + + "G MGOTIBETAN MARK BKA- SHOG YIG MGOTIBETAN MARK INTERSYLLABIC TSHEGTIBET" + + "AN MARK DELIMITER TSHEG BSTARTIBETAN MARK SHADTIBETAN MARK NYIS SHADTIBE" + + "TAN MARK TSHEG SHADTIBETAN MARK NYIS TSHEG SHADTIBETAN MARK RIN CHEN SPU" + + "NGS SHADTIBETAN MARK RGYA GRAM SHADTIBETAN MARK CARET -DZUD RTAGS ME LON" + + "G CANTIBETAN MARK GTER TSHEGTIBETAN LOGOTYPE SIGN CHAD RTAGSTIBETAN LOGO" + + "TYPE SIGN LHAG RTAGSTIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGSTIBET" + + "AN ASTROLOGICAL SIGN -KHYUD PATIBETAN ASTROLOGICAL SIGN SDONG TSHUGSTIBE" + + "TAN SIGN RDEL DKAR GCIGTIBETAN SIGN RDEL DKAR GNYISTIBETAN SIGN RDEL DKA" + + "R GSUMTIBETAN SIGN RDEL NAG GCIGTIBETAN SIGN RDEL NAG GNYISTIBETAN SIGN " + + "RDEL DKAR RDEL NAGTIBETAN DIGIT ZEROTIBETAN DIGIT ONETIBETAN DIGIT TWOTI" + + "BETAN DIGIT THREETIBETAN DIGIT FOURTIBETAN DIGIT FIVETIBETAN DIGIT SIXTI" + + "BETAN DIGIT SEVENTIBETAN DIGIT EIGHTTIBETAN DIGIT NINETIBETAN DIGIT HALF" + + " ONETIBETAN DIGIT HALF TWOTIBETAN DIGIT HALF THREETIBETAN DIGIT HALF FOU" + + "RTIBETAN DIGIT HALF FIVETIBETAN DIGIT HALF SIXTIBETAN DIGIT HALF SEVENTI" + + "BETAN DIGIT HALF EIGHTTIBETAN DIGIT HALF NINETIBETAN DIGIT HALF ZEROTIBE" + + "TAN MARK BSDUS RTAGSTIBETAN MARK NGAS BZUNG NYI ZLATIBETAN MARK CARET -D" + + "ZUD RTAGS BZHI MIG CANTIBETAN MARK NGAS BZUNG SGOR RTAGSTIBETAN MARK CHE" + + " MGOTIBETAN MARK TSA -PHRUTIBETAN MARK GUG RTAGS GYONTIBETAN MARK GUG RT" + + "AGS GYASTIBETAN MARK ANG KHANG GYONTIBETAN MARK ANG KHANG GYASTIBETAN SI" + + "GN YAR TSHESTIBETAN SIGN MAR TSHESTIBETAN LETTER KATIBETAN LETTER KHATIB" + + "ETAN LETTER GATIBETAN LETTER GHATIBETAN LETTER NGATIBETAN LETTER CATIBET") + ("" + + "AN LETTER CHATIBETAN LETTER JATIBETAN LETTER NYATIBETAN LETTER TTATIBETA" + + "N LETTER TTHATIBETAN LETTER DDATIBETAN LETTER DDHATIBETAN LETTER NNATIBE" + + "TAN LETTER TATIBETAN LETTER THATIBETAN LETTER DATIBETAN LETTER DHATIBETA" + + "N LETTER NATIBETAN LETTER PATIBETAN LETTER PHATIBETAN LETTER BATIBETAN L" + + "ETTER BHATIBETAN LETTER MATIBETAN LETTER TSATIBETAN LETTER TSHATIBETAN L" + + "ETTER DZATIBETAN LETTER DZHATIBETAN LETTER WATIBETAN LETTER ZHATIBETAN L" + + "ETTER ZATIBETAN LETTER -ATIBETAN LETTER YATIBETAN LETTER RATIBETAN LETTE" + + "R LATIBETAN LETTER SHATIBETAN LETTER SSATIBETAN LETTER SATIBETAN LETTER " + + "HATIBETAN LETTER ATIBETAN LETTER KSSATIBETAN LETTER FIXED-FORM RATIBETAN" + + " LETTER KKATIBETAN LETTER RRATIBETAN VOWEL SIGN AATIBETAN VOWEL SIGN ITI" + + "BETAN VOWEL SIGN IITIBETAN VOWEL SIGN UTIBETAN VOWEL SIGN UUTIBETAN VOWE" + + "L SIGN VOCALIC RTIBETAN VOWEL SIGN VOCALIC RRTIBETAN VOWEL SIGN VOCALIC " + + "LTIBETAN VOWEL SIGN VOCALIC LLTIBETAN VOWEL SIGN ETIBETAN VOWEL SIGN EET" + + "IBETAN VOWEL SIGN OTIBETAN VOWEL SIGN OOTIBETAN SIGN RJES SU NGA ROTIBET" + + "AN SIGN RNAM BCADTIBETAN VOWEL SIGN REVERSED ITIBETAN VOWEL SIGN REVERSE" + + "D IITIBETAN SIGN NYI ZLA NAA DATIBETAN SIGN SNA LDANTIBETAN MARK HALANTA" + + "TIBETAN MARK PALUTATIBETAN SIGN LCI RTAGSTIBETAN SIGN YANG RTAGSTIBETAN " + + "SIGN LCE TSA CANTIBETAN SIGN MCHU CANTIBETAN SIGN GRU CAN RGYINGSTIBETAN" + + " SIGN GRU MED RGYINGSTIBETAN SIGN INVERTED MCHU CANTIBETAN SUBJOINED SIG" + + "N LCE TSA CANTIBETAN SUBJOINED SIGN MCHU CANTIBETAN SUBJOINED SIGN INVER" + + "TED MCHU CANTIBETAN SUBJOINED LETTER KATIBETAN SUBJOINED LETTER KHATIBET" + + "AN SUBJOINED LETTER GATIBETAN SUBJOINED LETTER GHATIBETAN SUBJOINED LETT" + + "ER NGATIBETAN SUBJOINED LETTER CATIBETAN SUBJOINED LETTER CHATIBETAN SUB" + + "JOINED LETTER JATIBETAN SUBJOINED LETTER NYATIBETAN SUBJOINED LETTER TTA" + + "TIBETAN SUBJOINED LETTER TTHATIBETAN SUBJOINED LETTER DDATIBETAN SUBJOIN" + + "ED LETTER DDHATIBETAN SUBJOINED LETTER NNATIBETAN SUBJOINED LETTER TATIB" + + "ETAN SUBJOINED LETTER THATIBETAN SUBJOINED LETTER DATIBETAN SUBJOINED LE" + + "TTER DHATIBETAN SUBJOINED LETTER NATIBETAN SUBJOINED LETTER PATIBETAN SU" + + "BJOINED LETTER PHATIBETAN SUBJOINED LETTER BATIBETAN SUBJOINED LETTER BH" + + "ATIBETAN SUBJOINED LETTER MATIBETAN SUBJOINED LETTER TSATIBETAN SUBJOINE" + + "D LETTER TSHATIBETAN SUBJOINED LETTER DZATIBETAN SUBJOINED LETTER DZHATI" + + "BETAN SUBJOINED LETTER WATIBETAN SUBJOINED LETTER ZHATIBETAN SUBJOINED L" + + "ETTER ZATIBETAN SUBJOINED LETTER -ATIBETAN SUBJOINED LETTER YATIBETAN SU" + + "BJOINED LETTER RATIBETAN SUBJOINED LETTER LATIBETAN SUBJOINED LETTER SHA" + + "TIBETAN SUBJOINED LETTER SSATIBETAN SUBJOINED LETTER SATIBETAN SUBJOINED" + + " LETTER HATIBETAN SUBJOINED LETTER ATIBETAN SUBJOINED LETTER KSSATIBETAN" + + " SUBJOINED LETTER FIXED-FORM WATIBETAN SUBJOINED LETTER FIXED-FORM YATIB" + + "ETAN SUBJOINED LETTER FIXED-FORM RATIBETAN KU RU KHATIBETAN KU RU KHA BZ" + + "HI MIG CANTIBETAN CANTILLATION SIGN HEAVY BEATTIBETAN CANTILLATION SIGN " + + "LIGHT BEATTIBETAN CANTILLATION SIGN CANG TE-UTIBETAN CANTILLATION SIGN S" + + "BUB -CHALTIBETAN SYMBOL DRIL BUTIBETAN SYMBOL RDO RJETIBETAN SYMBOL PADM" + + "A GDANTIBETAN SYMBOL RDO RJE RGYA GRAMTIBETAN SYMBOL PHUR PATIBETAN SYMB" + + "OL NOR BUTIBETAN SYMBOL NOR BU NYIS -KHYILTIBETAN SYMBOL NOR BU GSUM -KH" + + "YILTIBETAN SYMBOL NOR BU BZHI -KHYILTIBETAN SIGN RDEL NAG RDEL DKARTIBET" + + "AN SIGN RDEL NAG GSUMTIBETAN MARK BSKA- SHOG GI MGO RGYANTIBETAN MARK MN" + + "YAM YIG GI MGO RGYANTIBETAN MARK NYIS TSHEGTIBETAN MARK INITIAL BRDA RNY" + + "ING YIG MGO MDUN MATIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MARIGHT" + + "-FACING SVASTI SIGNLEFT-FACING SVASTI SIGNRIGHT-FACING SVASTI SIGN WITH " + + "DOTSLEFT-FACING SVASTI SIGN WITH DOTSTIBETAN MARK LEADING MCHAN RTAGSTIB" + + "ETAN MARK TRAILING MCHAN RTAGSMYANMAR LETTER KAMYANMAR LETTER KHAMYANMAR" + + " LETTER GAMYANMAR LETTER GHAMYANMAR LETTER NGAMYANMAR LETTER CAMYANMAR L" + + "ETTER CHAMYANMAR LETTER JAMYANMAR LETTER JHAMYANMAR LETTER NYAMYANMAR LE" + + "TTER NNYAMYANMAR LETTER TTAMYANMAR LETTER TTHAMYANMAR LETTER DDAMYANMAR " + + "LETTER DDHAMYANMAR LETTER NNAMYANMAR LETTER TAMYANMAR LETTER THAMYANMAR " + + "LETTER DAMYANMAR LETTER DHAMYANMAR LETTER NAMYANMAR LETTER PAMYANMAR LET" + + "TER PHAMYANMAR LETTER BAMYANMAR LETTER BHAMYANMAR LETTER MAMYANMAR LETTE" + + "R YAMYANMAR LETTER RAMYANMAR LETTER LAMYANMAR LETTER WAMYANMAR LETTER SA" + + "MYANMAR LETTER HAMYANMAR LETTER LLAMYANMAR LETTER AMYANMAR LETTER SHAN A" + + "MYANMAR LETTER IMYANMAR LETTER IIMYANMAR LETTER UMYANMAR LETTER UUMYANMA" + + "R LETTER EMYANMAR LETTER MON EMYANMAR LETTER OMYANMAR LETTER AUMYANMAR V" + + "OWEL SIGN TALL AAMYANMAR VOWEL SIGN AAMYANMAR VOWEL SIGN IMYANMAR VOWEL " + + "SIGN IIMYANMAR VOWEL SIGN UMYANMAR VOWEL SIGN UUMYANMAR VOWEL SIGN EMYAN" + + "MAR VOWEL SIGN AIMYANMAR VOWEL SIGN MON IIMYANMAR VOWEL SIGN MON OMYANMA" + + "R VOWEL SIGN E ABOVEMYANMAR SIGN ANUSVARAMYANMAR SIGN DOT BELOWMYANMAR S") + ("" + + "IGN VISARGAMYANMAR SIGN VIRAMAMYANMAR SIGN ASATMYANMAR CONSONANT SIGN ME" + + "DIAL YAMYANMAR CONSONANT SIGN MEDIAL RAMYANMAR CONSONANT SIGN MEDIAL WAM" + + "YANMAR CONSONANT SIGN MEDIAL HAMYANMAR LETTER GREAT SAMYANMAR DIGIT ZERO" + + "MYANMAR DIGIT ONEMYANMAR DIGIT TWOMYANMAR DIGIT THREEMYANMAR DIGIT FOURM" + + "YANMAR DIGIT FIVEMYANMAR DIGIT SIXMYANMAR DIGIT SEVENMYANMAR DIGIT EIGHT" + + "MYANMAR DIGIT NINEMYANMAR SIGN LITTLE SECTIONMYANMAR SIGN SECTIONMYANMAR" + + " SYMBOL LOCATIVEMYANMAR SYMBOL COMPLETEDMYANMAR SYMBOL AFOREMENTIONEDMYA" + + "NMAR SYMBOL GENITIVEMYANMAR LETTER SHAMYANMAR LETTER SSAMYANMAR LETTER V" + + "OCALIC RMYANMAR LETTER VOCALIC RRMYANMAR LETTER VOCALIC LMYANMAR LETTER " + + "VOCALIC LLMYANMAR VOWEL SIGN VOCALIC RMYANMAR VOWEL SIGN VOCALIC RRMYANM" + + "AR VOWEL SIGN VOCALIC LMYANMAR VOWEL SIGN VOCALIC LLMYANMAR LETTER MON N" + + "GAMYANMAR LETTER MON JHAMYANMAR LETTER MON BBAMYANMAR LETTER MON BBEMYAN" + + "MAR CONSONANT SIGN MON MEDIAL NAMYANMAR CONSONANT SIGN MON MEDIAL MAMYAN" + + "MAR CONSONANT SIGN MON MEDIAL LAMYANMAR LETTER SGAW KAREN SHAMYANMAR VOW" + + "EL SIGN SGAW KAREN EUMYANMAR TONE MARK SGAW KAREN HATHIMYANMAR TONE MARK" + + " SGAW KAREN KE PHOMYANMAR LETTER WESTERN PWO KAREN THAMYANMAR LETTER WES" + + "TERN PWO KAREN PWAMYANMAR VOWEL SIGN WESTERN PWO KAREN EUMYANMAR VOWEL S" + + "IGN WESTERN PWO KAREN UEMYANMAR SIGN WESTERN PWO KAREN TONE-1MYANMAR SIG" + + "N WESTERN PWO KAREN TONE-2MYANMAR SIGN WESTERN PWO KAREN TONE-3MYANMAR S" + + "IGN WESTERN PWO KAREN TONE-4MYANMAR SIGN WESTERN PWO KAREN TONE-5MYANMAR" + + " LETTER EASTERN PWO KAREN NNAMYANMAR LETTER EASTERN PWO KAREN YWAMYANMAR" + + " LETTER EASTERN PWO KAREN GHWAMYANMAR VOWEL SIGN GEBA KAREN IMYANMAR VOW" + + "EL SIGN KAYAH OEMYANMAR VOWEL SIGN KAYAH UMYANMAR VOWEL SIGN KAYAH EEMYA" + + "NMAR LETTER SHAN KAMYANMAR LETTER SHAN KHAMYANMAR LETTER SHAN GAMYANMAR " + + "LETTER SHAN CAMYANMAR LETTER SHAN ZAMYANMAR LETTER SHAN NYAMYANMAR LETTE" + + "R SHAN DAMYANMAR LETTER SHAN NAMYANMAR LETTER SHAN PHAMYANMAR LETTER SHA" + + "N FAMYANMAR LETTER SHAN BAMYANMAR LETTER SHAN THAMYANMAR LETTER SHAN HAM" + + "YANMAR CONSONANT SIGN SHAN MEDIAL WAMYANMAR VOWEL SIGN SHAN AAMYANMAR VO" + + "WEL SIGN SHAN EMYANMAR VOWEL SIGN SHAN E ABOVEMYANMAR VOWEL SIGN SHAN FI" + + "NAL YMYANMAR SIGN SHAN TONE-2MYANMAR SIGN SHAN TONE-3MYANMAR SIGN SHAN T" + + "ONE-5MYANMAR SIGN SHAN TONE-6MYANMAR SIGN SHAN COUNCIL TONE-2MYANMAR SIG" + + "N SHAN COUNCIL TONE-3MYANMAR SIGN SHAN COUNCIL EMPHATIC TONEMYANMAR LETT" + + "ER RUMAI PALAUNG FAMYANMAR SIGN RUMAI PALAUNG TONE-5MYANMAR SHAN DIGIT Z" + + "EROMYANMAR SHAN DIGIT ONEMYANMAR SHAN DIGIT TWOMYANMAR SHAN DIGIT THREEM" + + "YANMAR SHAN DIGIT FOURMYANMAR SHAN DIGIT FIVEMYANMAR SHAN DIGIT SIXMYANM" + + "AR SHAN DIGIT SEVENMYANMAR SHAN DIGIT EIGHTMYANMAR SHAN DIGIT NINEMYANMA" + + "R SIGN KHAMTI TONE-1MYANMAR SIGN KHAMTI TONE-3MYANMAR VOWEL SIGN AITON A" + + "MYANMAR VOWEL SIGN AITON AIMYANMAR SYMBOL SHAN ONEMYANMAR SYMBOL SHAN EX" + + "CLAMATIONGEORGIAN CAPITAL LETTER ANGEORGIAN CAPITAL LETTER BANGEORGIAN C" + + "APITAL LETTER GANGEORGIAN CAPITAL LETTER DONGEORGIAN CAPITAL LETTER ENGE" + + "ORGIAN CAPITAL LETTER VINGEORGIAN CAPITAL LETTER ZENGEORGIAN CAPITAL LET" + + "TER TANGEORGIAN CAPITAL LETTER INGEORGIAN CAPITAL LETTER KANGEORGIAN CAP" + + "ITAL LETTER LASGEORGIAN CAPITAL LETTER MANGEORGIAN CAPITAL LETTER NARGEO" + + "RGIAN CAPITAL LETTER ONGEORGIAN CAPITAL LETTER PARGEORGIAN CAPITAL LETTE" + + "R ZHARGEORGIAN CAPITAL LETTER RAEGEORGIAN CAPITAL LETTER SANGEORGIAN CAP" + + "ITAL LETTER TARGEORGIAN CAPITAL LETTER UNGEORGIAN CAPITAL LETTER PHARGEO" + + "RGIAN CAPITAL LETTER KHARGEORGIAN CAPITAL LETTER GHANGEORGIAN CAPITAL LE" + + "TTER QARGEORGIAN CAPITAL LETTER SHINGEORGIAN CAPITAL LETTER CHINGEORGIAN" + + " CAPITAL LETTER CANGEORGIAN CAPITAL LETTER JILGEORGIAN CAPITAL LETTER CI" + + "LGEORGIAN CAPITAL LETTER CHARGEORGIAN CAPITAL LETTER XANGEORGIAN CAPITAL" + + " LETTER JHANGEORGIAN CAPITAL LETTER HAEGEORGIAN CAPITAL LETTER HEGEORGIA" + + "N CAPITAL LETTER HIEGEORGIAN CAPITAL LETTER WEGEORGIAN CAPITAL LETTER HA" + + "RGEORGIAN CAPITAL LETTER HOEGEORGIAN CAPITAL LETTER YNGEORGIAN CAPITAL L" + + "ETTER AENGEORGIAN LETTER ANGEORGIAN LETTER BANGEORGIAN LETTER GANGEORGIA" + + "N LETTER DONGEORGIAN LETTER ENGEORGIAN LETTER VINGEORGIAN LETTER ZENGEOR" + + "GIAN LETTER TANGEORGIAN LETTER INGEORGIAN LETTER KANGEORGIAN LETTER LASG" + + "EORGIAN LETTER MANGEORGIAN LETTER NARGEORGIAN LETTER ONGEORGIAN LETTER P" + + "ARGEORGIAN LETTER ZHARGEORGIAN LETTER RAEGEORGIAN LETTER SANGEORGIAN LET" + + "TER TARGEORGIAN LETTER UNGEORGIAN LETTER PHARGEORGIAN LETTER KHARGEORGIA" + + "N LETTER GHANGEORGIAN LETTER QARGEORGIAN LETTER SHINGEORGIAN LETTER CHIN" + + "GEORGIAN LETTER CANGEORGIAN LETTER JILGEORGIAN LETTER CILGEORGIAN LETTER" + + " CHARGEORGIAN LETTER XANGEORGIAN LETTER JHANGEORGIAN LETTER HAEGEORGIAN " + + "LETTER HEGEORGIAN LETTER HIEGEORGIAN LETTER WEGEORGIAN LETTER HARGEORGIA" + + "N LETTER HOEGEORGIAN LETTER FIGEORGIAN LETTER YNGEORGIAN LETTER ELIFIGEO") + ("" + + "RGIAN LETTER TURNED GANGEORGIAN LETTER AINGEORGIAN PARAGRAPH SEPARATORMO" + + "DIFIER LETTER GEORGIAN NARGEORGIAN LETTER AENGEORGIAN LETTER HARD SIGNGE" + + "ORGIAN LETTER LABIAL SIGNHANGUL CHOSEONG KIYEOKHANGUL CHOSEONG SSANGKIYE" + + "OKHANGUL CHOSEONG NIEUNHANGUL CHOSEONG TIKEUTHANGUL CHOSEONG SSANGTIKEUT" + + "HANGUL CHOSEONG RIEULHANGUL CHOSEONG MIEUMHANGUL CHOSEONG PIEUPHANGUL CH" + + "OSEONG SSANGPIEUPHANGUL CHOSEONG SIOSHANGUL CHOSEONG SSANGSIOSHANGUL CHO" + + "SEONG IEUNGHANGUL CHOSEONG CIEUCHANGUL CHOSEONG SSANGCIEUCHANGUL CHOSEON" + + "G CHIEUCHHANGUL CHOSEONG KHIEUKHHANGUL CHOSEONG THIEUTHHANGUL CHOSEONG P" + + "HIEUPHHANGUL CHOSEONG HIEUHHANGUL CHOSEONG NIEUN-KIYEOKHANGUL CHOSEONG S" + + "SANGNIEUNHANGUL CHOSEONG NIEUN-TIKEUTHANGUL CHOSEONG NIEUN-PIEUPHANGUL C" + + "HOSEONG TIKEUT-KIYEOKHANGUL CHOSEONG RIEUL-NIEUNHANGUL CHOSEONG SSANGRIE" + + "ULHANGUL CHOSEONG RIEUL-HIEUHHANGUL CHOSEONG KAPYEOUNRIEULHANGUL CHOSEON" + + "G MIEUM-PIEUPHANGUL CHOSEONG KAPYEOUNMIEUMHANGUL CHOSEONG PIEUP-KIYEOKHA" + + "NGUL CHOSEONG PIEUP-NIEUNHANGUL CHOSEONG PIEUP-TIKEUTHANGUL CHOSEONG PIE" + + "UP-SIOSHANGUL CHOSEONG PIEUP-SIOS-KIYEOKHANGUL CHOSEONG PIEUP-SIOS-TIKEU" + + "THANGUL CHOSEONG PIEUP-SIOS-PIEUPHANGUL CHOSEONG PIEUP-SSANGSIOSHANGUL C" + + "HOSEONG PIEUP-SIOS-CIEUCHANGUL CHOSEONG PIEUP-CIEUCHANGUL CHOSEONG PIEUP" + + "-CHIEUCHHANGUL CHOSEONG PIEUP-THIEUTHHANGUL CHOSEONG PIEUP-PHIEUPHHANGUL" + + " CHOSEONG KAPYEOUNPIEUPHANGUL CHOSEONG KAPYEOUNSSANGPIEUPHANGUL CHOSEONG" + + " SIOS-KIYEOKHANGUL CHOSEONG SIOS-NIEUNHANGUL CHOSEONG SIOS-TIKEUTHANGUL " + + "CHOSEONG SIOS-RIEULHANGUL CHOSEONG SIOS-MIEUMHANGUL CHOSEONG SIOS-PIEUPH" + + "ANGUL CHOSEONG SIOS-PIEUP-KIYEOKHANGUL CHOSEONG SIOS-SSANGSIOSHANGUL CHO" + + "SEONG SIOS-IEUNGHANGUL CHOSEONG SIOS-CIEUCHANGUL CHOSEONG SIOS-CHIEUCHHA" + + "NGUL CHOSEONG SIOS-KHIEUKHHANGUL CHOSEONG SIOS-THIEUTHHANGUL CHOSEONG SI" + + "OS-PHIEUPHHANGUL CHOSEONG SIOS-HIEUHHANGUL CHOSEONG CHITUEUMSIOSHANGUL C" + + "HOSEONG CHITUEUMSSANGSIOSHANGUL CHOSEONG CEONGCHIEUMSIOSHANGUL CHOSEONG " + + "CEONGCHIEUMSSANGSIOSHANGUL CHOSEONG PANSIOSHANGUL CHOSEONG IEUNG-KIYEOKH" + + "ANGUL CHOSEONG IEUNG-TIKEUTHANGUL CHOSEONG IEUNG-MIEUMHANGUL CHOSEONG IE" + + "UNG-PIEUPHANGUL CHOSEONG IEUNG-SIOSHANGUL CHOSEONG IEUNG-PANSIOSHANGUL C" + + "HOSEONG SSANGIEUNGHANGUL CHOSEONG IEUNG-CIEUCHANGUL CHOSEONG IEUNG-CHIEU" + + "CHHANGUL CHOSEONG IEUNG-THIEUTHHANGUL CHOSEONG IEUNG-PHIEUPHHANGUL CHOSE" + + "ONG YESIEUNGHANGUL CHOSEONG CIEUC-IEUNGHANGUL CHOSEONG CHITUEUMCIEUCHANG" + + "UL CHOSEONG CHITUEUMSSANGCIEUCHANGUL CHOSEONG CEONGCHIEUMCIEUCHANGUL CHO" + + "SEONG CEONGCHIEUMSSANGCIEUCHANGUL CHOSEONG CHIEUCH-KHIEUKHHANGUL CHOSEON" + + "G CHIEUCH-HIEUHHANGUL CHOSEONG CHITUEUMCHIEUCHHANGUL CHOSEONG CEONGCHIEU" + + "MCHIEUCHHANGUL CHOSEONG PHIEUPH-PIEUPHANGUL CHOSEONG KAPYEOUNPHIEUPHHANG" + + "UL CHOSEONG SSANGHIEUHHANGUL CHOSEONG YEORINHIEUHHANGUL CHOSEONG KIYEOK-" + + "TIKEUTHANGUL CHOSEONG NIEUN-SIOSHANGUL CHOSEONG NIEUN-CIEUCHANGUL CHOSEO" + + "NG NIEUN-HIEUHHANGUL CHOSEONG TIKEUT-RIEULHANGUL CHOSEONG FILLERHANGUL J" + + "UNGSEONG FILLERHANGUL JUNGSEONG AHANGUL JUNGSEONG AEHANGUL JUNGSEONG YAH" + + "ANGUL JUNGSEONG YAEHANGUL JUNGSEONG EOHANGUL JUNGSEONG EHANGUL JUNGSEONG" + + " YEOHANGUL JUNGSEONG YEHANGUL JUNGSEONG OHANGUL JUNGSEONG WAHANGUL JUNGS" + + "EONG WAEHANGUL JUNGSEONG OEHANGUL JUNGSEONG YOHANGUL JUNGSEONG UHANGUL J" + + "UNGSEONG WEOHANGUL JUNGSEONG WEHANGUL JUNGSEONG WIHANGUL JUNGSEONG YUHAN" + + "GUL JUNGSEONG EUHANGUL JUNGSEONG YIHANGUL JUNGSEONG IHANGUL JUNGSEONG A-" + + "OHANGUL JUNGSEONG A-UHANGUL JUNGSEONG YA-OHANGUL JUNGSEONG YA-YOHANGUL J" + + "UNGSEONG EO-OHANGUL JUNGSEONG EO-UHANGUL JUNGSEONG EO-EUHANGUL JUNGSEONG" + + " YEO-OHANGUL JUNGSEONG YEO-UHANGUL JUNGSEONG O-EOHANGUL JUNGSEONG O-EHAN" + + "GUL JUNGSEONG O-YEHANGUL JUNGSEONG O-OHANGUL JUNGSEONG O-UHANGUL JUNGSEO" + + "NG YO-YAHANGUL JUNGSEONG YO-YAEHANGUL JUNGSEONG YO-YEOHANGUL JUNGSEONG Y" + + "O-OHANGUL JUNGSEONG YO-IHANGUL JUNGSEONG U-AHANGUL JUNGSEONG U-AEHANGUL " + + "JUNGSEONG U-EO-EUHANGUL JUNGSEONG U-YEHANGUL JUNGSEONG U-UHANGUL JUNGSEO" + + "NG YU-AHANGUL JUNGSEONG YU-EOHANGUL JUNGSEONG YU-EHANGUL JUNGSEONG YU-YE" + + "OHANGUL JUNGSEONG YU-YEHANGUL JUNGSEONG YU-UHANGUL JUNGSEONG YU-IHANGUL " + + "JUNGSEONG EU-UHANGUL JUNGSEONG EU-EUHANGUL JUNGSEONG YI-UHANGUL JUNGSEON" + + "G I-AHANGUL JUNGSEONG I-YAHANGUL JUNGSEONG I-OHANGUL JUNGSEONG I-UHANGUL" + + " JUNGSEONG I-EUHANGUL JUNGSEONG I-ARAEAHANGUL JUNGSEONG ARAEAHANGUL JUNG" + + "SEONG ARAEA-EOHANGUL JUNGSEONG ARAEA-UHANGUL JUNGSEONG ARAEA-IHANGUL JUN" + + "GSEONG SSANGARAEAHANGUL JUNGSEONG A-EUHANGUL JUNGSEONG YA-UHANGUL JUNGSE" + + "ONG YEO-YAHANGUL JUNGSEONG O-YAHANGUL JUNGSEONG O-YAEHANGUL JONGSEONG KI" + + "YEOKHANGUL JONGSEONG SSANGKIYEOKHANGUL JONGSEONG KIYEOK-SIOSHANGUL JONGS" + + "EONG NIEUNHANGUL JONGSEONG NIEUN-CIEUCHANGUL JONGSEONG NIEUN-HIEUHHANGUL" + + " JONGSEONG TIKEUTHANGUL JONGSEONG RIEULHANGUL JONGSEONG RIEUL-KIYEOKHANG" + + "UL JONGSEONG RIEUL-MIEUMHANGUL JONGSEONG RIEUL-PIEUPHANGUL JONGSEONG RIE") + ("" + + "UL-SIOSHANGUL JONGSEONG RIEUL-THIEUTHHANGUL JONGSEONG RIEUL-PHIEUPHHANGU" + + "L JONGSEONG RIEUL-HIEUHHANGUL JONGSEONG MIEUMHANGUL JONGSEONG PIEUPHANGU" + + "L JONGSEONG PIEUP-SIOSHANGUL JONGSEONG SIOSHANGUL JONGSEONG SSANGSIOSHAN" + + "GUL JONGSEONG IEUNGHANGUL JONGSEONG CIEUCHANGUL JONGSEONG CHIEUCHHANGUL " + + "JONGSEONG KHIEUKHHANGUL JONGSEONG THIEUTHHANGUL JONGSEONG PHIEUPHHANGUL " + + "JONGSEONG HIEUHHANGUL JONGSEONG KIYEOK-RIEULHANGUL JONGSEONG KIYEOK-SIOS" + + "-KIYEOKHANGUL JONGSEONG NIEUN-KIYEOKHANGUL JONGSEONG NIEUN-TIKEUTHANGUL " + + "JONGSEONG NIEUN-SIOSHANGUL JONGSEONG NIEUN-PANSIOSHANGUL JONGSEONG NIEUN" + + "-THIEUTHHANGUL JONGSEONG TIKEUT-KIYEOKHANGUL JONGSEONG TIKEUT-RIEULHANGU" + + "L JONGSEONG RIEUL-KIYEOK-SIOSHANGUL JONGSEONG RIEUL-NIEUNHANGUL JONGSEON" + + "G RIEUL-TIKEUTHANGUL JONGSEONG RIEUL-TIKEUT-HIEUHHANGUL JONGSEONG SSANGR" + + "IEULHANGUL JONGSEONG RIEUL-MIEUM-KIYEOKHANGUL JONGSEONG RIEUL-MIEUM-SIOS" + + "HANGUL JONGSEONG RIEUL-PIEUP-SIOSHANGUL JONGSEONG RIEUL-PIEUP-HIEUHHANGU" + + "L JONGSEONG RIEUL-KAPYEOUNPIEUPHANGUL JONGSEONG RIEUL-SSANGSIOSHANGUL JO" + + "NGSEONG RIEUL-PANSIOSHANGUL JONGSEONG RIEUL-KHIEUKHHANGUL JONGSEONG RIEU" + + "L-YEORINHIEUHHANGUL JONGSEONG MIEUM-KIYEOKHANGUL JONGSEONG MIEUM-RIEULHA" + + "NGUL JONGSEONG MIEUM-PIEUPHANGUL JONGSEONG MIEUM-SIOSHANGUL JONGSEONG MI" + + "EUM-SSANGSIOSHANGUL JONGSEONG MIEUM-PANSIOSHANGUL JONGSEONG MIEUM-CHIEUC" + + "HHANGUL JONGSEONG MIEUM-HIEUHHANGUL JONGSEONG KAPYEOUNMIEUMHANGUL JONGSE" + + "ONG PIEUP-RIEULHANGUL JONGSEONG PIEUP-PHIEUPHHANGUL JONGSEONG PIEUP-HIEU" + + "HHANGUL JONGSEONG KAPYEOUNPIEUPHANGUL JONGSEONG SIOS-KIYEOKHANGUL JONGSE" + + "ONG SIOS-TIKEUTHANGUL JONGSEONG SIOS-RIEULHANGUL JONGSEONG SIOS-PIEUPHAN" + + "GUL JONGSEONG PANSIOSHANGUL JONGSEONG IEUNG-KIYEOKHANGUL JONGSEONG IEUNG" + + "-SSANGKIYEOKHANGUL JONGSEONG SSANGIEUNGHANGUL JONGSEONG IEUNG-KHIEUKHHAN" + + "GUL JONGSEONG YESIEUNGHANGUL JONGSEONG YESIEUNG-SIOSHANGUL JONGSEONG YES" + + "IEUNG-PANSIOSHANGUL JONGSEONG PHIEUPH-PIEUPHANGUL JONGSEONG KAPYEOUNPHIE" + + "UPHHANGUL JONGSEONG HIEUH-NIEUNHANGUL JONGSEONG HIEUH-RIEULHANGUL JONGSE" + + "ONG HIEUH-MIEUMHANGUL JONGSEONG HIEUH-PIEUPHANGUL JONGSEONG YEORINHIEUHH" + + "ANGUL JONGSEONG KIYEOK-NIEUNHANGUL JONGSEONG KIYEOK-PIEUPHANGUL JONGSEON" + + "G KIYEOK-CHIEUCHHANGUL JONGSEONG KIYEOK-KHIEUKHHANGUL JONGSEONG KIYEOK-H" + + "IEUHHANGUL JONGSEONG SSANGNIEUNETHIOPIC SYLLABLE HAETHIOPIC SYLLABLE HUE" + + "THIOPIC SYLLABLE HIETHIOPIC SYLLABLE HAAETHIOPIC SYLLABLE HEEETHIOPIC SY" + + "LLABLE HEETHIOPIC SYLLABLE HOETHIOPIC SYLLABLE HOAETHIOPIC SYLLABLE LAET" + + "HIOPIC SYLLABLE LUETHIOPIC SYLLABLE LIETHIOPIC SYLLABLE LAAETHIOPIC SYLL" + + "ABLE LEEETHIOPIC SYLLABLE LEETHIOPIC SYLLABLE LOETHIOPIC SYLLABLE LWAETH" + + "IOPIC SYLLABLE HHAETHIOPIC SYLLABLE HHUETHIOPIC SYLLABLE HHIETHIOPIC SYL" + + "LABLE HHAAETHIOPIC SYLLABLE HHEEETHIOPIC SYLLABLE HHEETHIOPIC SYLLABLE H" + + "HOETHIOPIC SYLLABLE HHWAETHIOPIC SYLLABLE MAETHIOPIC SYLLABLE MUETHIOPIC" + + " SYLLABLE MIETHIOPIC SYLLABLE MAAETHIOPIC SYLLABLE MEEETHIOPIC SYLLABLE " + + "MEETHIOPIC SYLLABLE MOETHIOPIC SYLLABLE MWAETHIOPIC SYLLABLE SZAETHIOPIC" + + " SYLLABLE SZUETHIOPIC SYLLABLE SZIETHIOPIC SYLLABLE SZAAETHIOPIC SYLLABL" + + "E SZEEETHIOPIC SYLLABLE SZEETHIOPIC SYLLABLE SZOETHIOPIC SYLLABLE SZWAET" + + "HIOPIC SYLLABLE RAETHIOPIC SYLLABLE RUETHIOPIC SYLLABLE RIETHIOPIC SYLLA" + + "BLE RAAETHIOPIC SYLLABLE REEETHIOPIC SYLLABLE REETHIOPIC SYLLABLE ROETHI" + + "OPIC SYLLABLE RWAETHIOPIC SYLLABLE SAETHIOPIC SYLLABLE SUETHIOPIC SYLLAB" + + "LE SIETHIOPIC SYLLABLE SAAETHIOPIC SYLLABLE SEEETHIOPIC SYLLABLE SEETHIO" + + "PIC SYLLABLE SOETHIOPIC SYLLABLE SWAETHIOPIC SYLLABLE SHAETHIOPIC SYLLAB" + + "LE SHUETHIOPIC SYLLABLE SHIETHIOPIC SYLLABLE SHAAETHIOPIC SYLLABLE SHEEE" + + "THIOPIC SYLLABLE SHEETHIOPIC SYLLABLE SHOETHIOPIC SYLLABLE SHWAETHIOPIC " + + "SYLLABLE QAETHIOPIC SYLLABLE QUETHIOPIC SYLLABLE QIETHIOPIC SYLLABLE QAA" + + "ETHIOPIC SYLLABLE QEEETHIOPIC SYLLABLE QEETHIOPIC SYLLABLE QOETHIOPIC SY" + + "LLABLE QOAETHIOPIC SYLLABLE QWAETHIOPIC SYLLABLE QWIETHIOPIC SYLLABLE QW" + + "AAETHIOPIC SYLLABLE QWEEETHIOPIC SYLLABLE QWEETHIOPIC SYLLABLE QHAETHIOP" + + "IC SYLLABLE QHUETHIOPIC SYLLABLE QHIETHIOPIC SYLLABLE QHAAETHIOPIC SYLLA" + + "BLE QHEEETHIOPIC SYLLABLE QHEETHIOPIC SYLLABLE QHOETHIOPIC SYLLABLE QHWA" + + "ETHIOPIC SYLLABLE QHWIETHIOPIC SYLLABLE QHWAAETHIOPIC SYLLABLE QHWEEETHI" + + "OPIC SYLLABLE QHWEETHIOPIC SYLLABLE BAETHIOPIC SYLLABLE BUETHIOPIC SYLLA" + + "BLE BIETHIOPIC SYLLABLE BAAETHIOPIC SYLLABLE BEEETHIOPIC SYLLABLE BEETHI" + + "OPIC SYLLABLE BOETHIOPIC SYLLABLE BWAETHIOPIC SYLLABLE VAETHIOPIC SYLLAB" + + "LE VUETHIOPIC SYLLABLE VIETHIOPIC SYLLABLE VAAETHIOPIC SYLLABLE VEEETHIO" + + "PIC SYLLABLE VEETHIOPIC SYLLABLE VOETHIOPIC SYLLABLE VWAETHIOPIC SYLLABL" + + "E TAETHIOPIC SYLLABLE TUETHIOPIC SYLLABLE TIETHIOPIC SYLLABLE TAAETHIOPI" + + "C SYLLABLE TEEETHIOPIC SYLLABLE TEETHIOPIC SYLLABLE TOETHIOPIC SYLLABLE " + + "TWAETHIOPIC SYLLABLE CAETHIOPIC SYLLABLE CUETHIOPIC SYLLABLE CIETHIOPIC ") + ("" + + "SYLLABLE CAAETHIOPIC SYLLABLE CEEETHIOPIC SYLLABLE CEETHIOPIC SYLLABLE C" + + "OETHIOPIC SYLLABLE CWAETHIOPIC SYLLABLE XAETHIOPIC SYLLABLE XUETHIOPIC S" + + "YLLABLE XIETHIOPIC SYLLABLE XAAETHIOPIC SYLLABLE XEEETHIOPIC SYLLABLE XE" + + "ETHIOPIC SYLLABLE XOETHIOPIC SYLLABLE XOAETHIOPIC SYLLABLE XWAETHIOPIC S" + + "YLLABLE XWIETHIOPIC SYLLABLE XWAAETHIOPIC SYLLABLE XWEEETHIOPIC SYLLABLE" + + " XWEETHIOPIC SYLLABLE NAETHIOPIC SYLLABLE NUETHIOPIC SYLLABLE NIETHIOPIC" + + " SYLLABLE NAAETHIOPIC SYLLABLE NEEETHIOPIC SYLLABLE NEETHIOPIC SYLLABLE " + + "NOETHIOPIC SYLLABLE NWAETHIOPIC SYLLABLE NYAETHIOPIC SYLLABLE NYUETHIOPI" + + "C SYLLABLE NYIETHIOPIC SYLLABLE NYAAETHIOPIC SYLLABLE NYEEETHIOPIC SYLLA" + + "BLE NYEETHIOPIC SYLLABLE NYOETHIOPIC SYLLABLE NYWAETHIOPIC SYLLABLE GLOT" + + "TAL AETHIOPIC SYLLABLE GLOTTAL UETHIOPIC SYLLABLE GLOTTAL IETHIOPIC SYLL" + + "ABLE GLOTTAL AAETHIOPIC SYLLABLE GLOTTAL EEETHIOPIC SYLLABLE GLOTTAL EET" + + "HIOPIC SYLLABLE GLOTTAL OETHIOPIC SYLLABLE GLOTTAL WAETHIOPIC SYLLABLE K" + + "AETHIOPIC SYLLABLE KUETHIOPIC SYLLABLE KIETHIOPIC SYLLABLE KAAETHIOPIC S" + + "YLLABLE KEEETHIOPIC SYLLABLE KEETHIOPIC SYLLABLE KOETHIOPIC SYLLABLE KOA" + + "ETHIOPIC SYLLABLE KWAETHIOPIC SYLLABLE KWIETHIOPIC SYLLABLE KWAAETHIOPIC" + + " SYLLABLE KWEEETHIOPIC SYLLABLE KWEETHIOPIC SYLLABLE KXAETHIOPIC SYLLABL" + + "E KXUETHIOPIC SYLLABLE KXIETHIOPIC SYLLABLE KXAAETHIOPIC SYLLABLE KXEEET" + + "HIOPIC SYLLABLE KXEETHIOPIC SYLLABLE KXOETHIOPIC SYLLABLE KXWAETHIOPIC S" + + "YLLABLE KXWIETHIOPIC SYLLABLE KXWAAETHIOPIC SYLLABLE KXWEEETHIOPIC SYLLA" + + "BLE KXWEETHIOPIC SYLLABLE WAETHIOPIC SYLLABLE WUETHIOPIC SYLLABLE WIETHI" + + "OPIC SYLLABLE WAAETHIOPIC SYLLABLE WEEETHIOPIC SYLLABLE WEETHIOPIC SYLLA" + + "BLE WOETHIOPIC SYLLABLE WOAETHIOPIC SYLLABLE PHARYNGEAL AETHIOPIC SYLLAB" + + "LE PHARYNGEAL UETHIOPIC SYLLABLE PHARYNGEAL IETHIOPIC SYLLABLE PHARYNGEA" + + "L AAETHIOPIC SYLLABLE PHARYNGEAL EEETHIOPIC SYLLABLE PHARYNGEAL EETHIOPI" + + "C SYLLABLE PHARYNGEAL OETHIOPIC SYLLABLE ZAETHIOPIC SYLLABLE ZUETHIOPIC " + + "SYLLABLE ZIETHIOPIC SYLLABLE ZAAETHIOPIC SYLLABLE ZEEETHIOPIC SYLLABLE Z" + + "EETHIOPIC SYLLABLE ZOETHIOPIC SYLLABLE ZWAETHIOPIC SYLLABLE ZHAETHIOPIC " + + "SYLLABLE ZHUETHIOPIC SYLLABLE ZHIETHIOPIC SYLLABLE ZHAAETHIOPIC SYLLABLE" + + " ZHEEETHIOPIC SYLLABLE ZHEETHIOPIC SYLLABLE ZHOETHIOPIC SYLLABLE ZHWAETH" + + "IOPIC SYLLABLE YAETHIOPIC SYLLABLE YUETHIOPIC SYLLABLE YIETHIOPIC SYLLAB" + + "LE YAAETHIOPIC SYLLABLE YEEETHIOPIC SYLLABLE YEETHIOPIC SYLLABLE YOETHIO" + + "PIC SYLLABLE YOAETHIOPIC SYLLABLE DAETHIOPIC SYLLABLE DUETHIOPIC SYLLABL" + + "E DIETHIOPIC SYLLABLE DAAETHIOPIC SYLLABLE DEEETHIOPIC SYLLABLE DEETHIOP" + + "IC SYLLABLE DOETHIOPIC SYLLABLE DWAETHIOPIC SYLLABLE DDAETHIOPIC SYLLABL" + + "E DDUETHIOPIC SYLLABLE DDIETHIOPIC SYLLABLE DDAAETHIOPIC SYLLABLE DDEEET" + + "HIOPIC SYLLABLE DDEETHIOPIC SYLLABLE DDOETHIOPIC SYLLABLE DDWAETHIOPIC S" + + "YLLABLE JAETHIOPIC SYLLABLE JUETHIOPIC SYLLABLE JIETHIOPIC SYLLABLE JAAE" + + "THIOPIC SYLLABLE JEEETHIOPIC SYLLABLE JEETHIOPIC SYLLABLE JOETHIOPIC SYL" + + "LABLE JWAETHIOPIC SYLLABLE GAETHIOPIC SYLLABLE GUETHIOPIC SYLLABLE GIETH" + + "IOPIC SYLLABLE GAAETHIOPIC SYLLABLE GEEETHIOPIC SYLLABLE GEETHIOPIC SYLL" + + "ABLE GOETHIOPIC SYLLABLE GOAETHIOPIC SYLLABLE GWAETHIOPIC SYLLABLE GWIET" + + "HIOPIC SYLLABLE GWAAETHIOPIC SYLLABLE GWEEETHIOPIC SYLLABLE GWEETHIOPIC " + + "SYLLABLE GGAETHIOPIC SYLLABLE GGUETHIOPIC SYLLABLE GGIETHIOPIC SYLLABLE " + + "GGAAETHIOPIC SYLLABLE GGEEETHIOPIC SYLLABLE GGEETHIOPIC SYLLABLE GGOETHI" + + "OPIC SYLLABLE GGWAAETHIOPIC SYLLABLE THAETHIOPIC SYLLABLE THUETHIOPIC SY" + + "LLABLE THIETHIOPIC SYLLABLE THAAETHIOPIC SYLLABLE THEEETHIOPIC SYLLABLE " + + "THEETHIOPIC SYLLABLE THOETHIOPIC SYLLABLE THWAETHIOPIC SYLLABLE CHAETHIO" + + "PIC SYLLABLE CHUETHIOPIC SYLLABLE CHIETHIOPIC SYLLABLE CHAAETHIOPIC SYLL" + + "ABLE CHEEETHIOPIC SYLLABLE CHEETHIOPIC SYLLABLE CHOETHIOPIC SYLLABLE CHW" + + "AETHIOPIC SYLLABLE PHAETHIOPIC SYLLABLE PHUETHIOPIC SYLLABLE PHIETHIOPIC" + + " SYLLABLE PHAAETHIOPIC SYLLABLE PHEEETHIOPIC SYLLABLE PHEETHIOPIC SYLLAB" + + "LE PHOETHIOPIC SYLLABLE PHWAETHIOPIC SYLLABLE TSAETHIOPIC SYLLABLE TSUET" + + "HIOPIC SYLLABLE TSIETHIOPIC SYLLABLE TSAAETHIOPIC SYLLABLE TSEEETHIOPIC " + + "SYLLABLE TSEETHIOPIC SYLLABLE TSOETHIOPIC SYLLABLE TSWAETHIOPIC SYLLABLE" + + " TZAETHIOPIC SYLLABLE TZUETHIOPIC SYLLABLE TZIETHIOPIC SYLLABLE TZAAETHI" + + "OPIC SYLLABLE TZEEETHIOPIC SYLLABLE TZEETHIOPIC SYLLABLE TZOETHIOPIC SYL" + + "LABLE TZOAETHIOPIC SYLLABLE FAETHIOPIC SYLLABLE FUETHIOPIC SYLLABLE FIET" + + "HIOPIC SYLLABLE FAAETHIOPIC SYLLABLE FEEETHIOPIC SYLLABLE FEETHIOPIC SYL" + + "LABLE FOETHIOPIC SYLLABLE FWAETHIOPIC SYLLABLE PAETHIOPIC SYLLABLE PUETH" + + "IOPIC SYLLABLE PIETHIOPIC SYLLABLE PAAETHIOPIC SYLLABLE PEEETHIOPIC SYLL" + + "ABLE PEETHIOPIC SYLLABLE POETHIOPIC SYLLABLE PWAETHIOPIC SYLLABLE RYAETH" + + "IOPIC SYLLABLE MYAETHIOPIC SYLLABLE FYAETHIOPIC COMBINING GEMINATION AND" + + " VOWEL LENGTH MARKETHIOPIC COMBINING VOWEL LENGTH MARKETHIOPIC COMBINING") + ("" + + " GEMINATION MARKETHIOPIC SECTION MARKETHIOPIC WORDSPACEETHIOPIC FULL STO" + + "PETHIOPIC COMMAETHIOPIC SEMICOLONETHIOPIC COLONETHIOPIC PREFACE COLONETH" + + "IOPIC QUESTION MARKETHIOPIC PARAGRAPH SEPARATORETHIOPIC DIGIT ONEETHIOPI" + + "C DIGIT TWOETHIOPIC DIGIT THREEETHIOPIC DIGIT FOURETHIOPIC DIGIT FIVEETH" + + "IOPIC DIGIT SIXETHIOPIC DIGIT SEVENETHIOPIC DIGIT EIGHTETHIOPIC DIGIT NI" + + "NEETHIOPIC NUMBER TENETHIOPIC NUMBER TWENTYETHIOPIC NUMBER THIRTYETHIOPI" + + "C NUMBER FORTYETHIOPIC NUMBER FIFTYETHIOPIC NUMBER SIXTYETHIOPIC NUMBER " + + "SEVENTYETHIOPIC NUMBER EIGHTYETHIOPIC NUMBER NINETYETHIOPIC NUMBER HUNDR" + + "EDETHIOPIC NUMBER TEN THOUSANDETHIOPIC SYLLABLE SEBATBEIT MWAETHIOPIC SY" + + "LLABLE MWIETHIOPIC SYLLABLE MWEEETHIOPIC SYLLABLE MWEETHIOPIC SYLLABLE S" + + "EBATBEIT BWAETHIOPIC SYLLABLE BWIETHIOPIC SYLLABLE BWEEETHIOPIC SYLLABLE" + + " BWEETHIOPIC SYLLABLE SEBATBEIT FWAETHIOPIC SYLLABLE FWIETHIOPIC SYLLABL" + + "E FWEEETHIOPIC SYLLABLE FWEETHIOPIC SYLLABLE SEBATBEIT PWAETHIOPIC SYLLA" + + "BLE PWIETHIOPIC SYLLABLE PWEEETHIOPIC SYLLABLE PWEETHIOPIC TONAL MARK YI" + + "ZETETHIOPIC TONAL MARK DERETETHIOPIC TONAL MARK RIKRIKETHIOPIC TONAL MAR" + + "K SHORT RIKRIKETHIOPIC TONAL MARK DIFATETHIOPIC TONAL MARK KENATETHIOPIC" + + " TONAL MARK CHIRETETHIOPIC TONAL MARK HIDETETHIOPIC TONAL MARK DERET-HID" + + "ETETHIOPIC TONAL MARK KURTCHEROKEE LETTER ACHEROKEE LETTER ECHEROKEE LET" + + "TER ICHEROKEE LETTER OCHEROKEE LETTER UCHEROKEE LETTER VCHEROKEE LETTER " + + "GACHEROKEE LETTER KACHEROKEE LETTER GECHEROKEE LETTER GICHEROKEE LETTER " + + "GOCHEROKEE LETTER GUCHEROKEE LETTER GVCHEROKEE LETTER HACHEROKEE LETTER " + + "HECHEROKEE LETTER HICHEROKEE LETTER HOCHEROKEE LETTER HUCHEROKEE LETTER " + + "HVCHEROKEE LETTER LACHEROKEE LETTER LECHEROKEE LETTER LICHEROKEE LETTER " + + "LOCHEROKEE LETTER LUCHEROKEE LETTER LVCHEROKEE LETTER MACHEROKEE LETTER " + + "MECHEROKEE LETTER MICHEROKEE LETTER MOCHEROKEE LETTER MUCHEROKEE LETTER " + + "NACHEROKEE LETTER HNACHEROKEE LETTER NAHCHEROKEE LETTER NECHEROKEE LETTE" + + "R NICHEROKEE LETTER NOCHEROKEE LETTER NUCHEROKEE LETTER NVCHEROKEE LETTE" + + "R QUACHEROKEE LETTER QUECHEROKEE LETTER QUICHEROKEE LETTER QUOCHEROKEE L" + + "ETTER QUUCHEROKEE LETTER QUVCHEROKEE LETTER SACHEROKEE LETTER SCHEROKEE " + + "LETTER SECHEROKEE LETTER SICHEROKEE LETTER SOCHEROKEE LETTER SUCHEROKEE " + + "LETTER SVCHEROKEE LETTER DACHEROKEE LETTER TACHEROKEE LETTER DECHEROKEE " + + "LETTER TECHEROKEE LETTER DICHEROKEE LETTER TICHEROKEE LETTER DOCHEROKEE " + + "LETTER DUCHEROKEE LETTER DVCHEROKEE LETTER DLACHEROKEE LETTER TLACHEROKE" + + "E LETTER TLECHEROKEE LETTER TLICHEROKEE LETTER TLOCHEROKEE LETTER TLUCHE" + + "ROKEE LETTER TLVCHEROKEE LETTER TSACHEROKEE LETTER TSECHEROKEE LETTER TS" + + "ICHEROKEE LETTER TSOCHEROKEE LETTER TSUCHEROKEE LETTER TSVCHEROKEE LETTE" + + "R WACHEROKEE LETTER WECHEROKEE LETTER WICHEROKEE LETTER WOCHEROKEE LETTE" + + "R WUCHEROKEE LETTER WVCHEROKEE LETTER YACHEROKEE LETTER YECHEROKEE LETTE" + + "R YICHEROKEE LETTER YOCHEROKEE LETTER YUCHEROKEE LETTER YVCHEROKEE LETTE" + + "R MVCHEROKEE SMALL LETTER YECHEROKEE SMALL LETTER YICHEROKEE SMALL LETTE" + + "R YOCHEROKEE SMALL LETTER YUCHEROKEE SMALL LETTER YVCHEROKEE SMALL LETTE" + + "R MVCANADIAN SYLLABICS HYPHENCANADIAN SYLLABICS ECANADIAN SYLLABICS AAIC" + + "ANADIAN SYLLABICS ICANADIAN SYLLABICS IICANADIAN SYLLABICS OCANADIAN SYL" + + "LABICS OOCANADIAN SYLLABICS Y-CREE OOCANADIAN SYLLABICS CARRIER EECANADI" + + "AN SYLLABICS CARRIER ICANADIAN SYLLABICS ACANADIAN SYLLABICS AACANADIAN " + + "SYLLABICS WECANADIAN SYLLABICS WEST-CREE WECANADIAN SYLLABICS WICANADIAN" + + " SYLLABICS WEST-CREE WICANADIAN SYLLABICS WIICANADIAN SYLLABICS WEST-CRE" + + "E WIICANADIAN SYLLABICS WOCANADIAN SYLLABICS WEST-CREE WOCANADIAN SYLLAB" + + "ICS WOOCANADIAN SYLLABICS WEST-CREE WOOCANADIAN SYLLABICS NASKAPI WOOCAN" + + "ADIAN SYLLABICS WACANADIAN SYLLABICS WEST-CREE WACANADIAN SYLLABICS WAAC" + + "ANADIAN SYLLABICS WEST-CREE WAACANADIAN SYLLABICS NASKAPI WAACANADIAN SY" + + "LLABICS AICANADIAN SYLLABICS Y-CREE WCANADIAN SYLLABICS GLOTTAL STOPCANA" + + "DIAN SYLLABICS FINAL ACUTECANADIAN SYLLABICS FINAL GRAVECANADIAN SYLLABI" + + "CS FINAL BOTTOM HALF RINGCANADIAN SYLLABICS FINAL TOP HALF RINGCANADIAN " + + "SYLLABICS FINAL RIGHT HALF RINGCANADIAN SYLLABICS FINAL RINGCANADIAN SYL" + + "LABICS FINAL DOUBLE ACUTECANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL " + + "STROKESCANADIAN SYLLABICS FINAL MIDDLE DOTCANADIAN SYLLABICS FINAL SHORT" + + " HORIZONTAL STROKECANADIAN SYLLABICS FINAL PLUSCANADIAN SYLLABICS FINAL " + + "DOWN TACKCANADIAN SYLLABICS ENCANADIAN SYLLABICS INCANADIAN SYLLABICS ON" + + "CANADIAN SYLLABICS ANCANADIAN SYLLABICS PECANADIAN SYLLABICS PAAICANADIA" + + "N SYLLABICS PICANADIAN SYLLABICS PIICANADIAN SYLLABICS POCANADIAN SYLLAB" + + "ICS POOCANADIAN SYLLABICS Y-CREE POOCANADIAN SYLLABICS CARRIER HEECANADI" + + "AN SYLLABICS CARRIER HICANADIAN SYLLABICS PACANADIAN SYLLABICS PAACANADI" + + "AN SYLLABICS PWECANADIAN SYLLABICS WEST-CREE PWECANADIAN SYLLABICS PWICA") + ("" + + "NADIAN SYLLABICS WEST-CREE PWICANADIAN SYLLABICS PWIICANADIAN SYLLABICS " + + "WEST-CREE PWIICANADIAN SYLLABICS PWOCANADIAN SYLLABICS WEST-CREE PWOCANA" + + "DIAN SYLLABICS PWOOCANADIAN SYLLABICS WEST-CREE PWOOCANADIAN SYLLABICS P" + + "WACANADIAN SYLLABICS WEST-CREE PWACANADIAN SYLLABICS PWAACANADIAN SYLLAB" + + "ICS WEST-CREE PWAACANADIAN SYLLABICS Y-CREE PWAACANADIAN SYLLABICS PCANA" + + "DIAN SYLLABICS WEST-CREE PCANADIAN SYLLABICS CARRIER HCANADIAN SYLLABICS" + + " TECANADIAN SYLLABICS TAAICANADIAN SYLLABICS TICANADIAN SYLLABICS TIICAN" + + "ADIAN SYLLABICS TOCANADIAN SYLLABICS TOOCANADIAN SYLLABICS Y-CREE TOOCAN" + + "ADIAN SYLLABICS CARRIER DEECANADIAN SYLLABICS CARRIER DICANADIAN SYLLABI" + + "CS TACANADIAN SYLLABICS TAACANADIAN SYLLABICS TWECANADIAN SYLLABICS WEST" + + "-CREE TWECANADIAN SYLLABICS TWICANADIAN SYLLABICS WEST-CREE TWICANADIAN " + + "SYLLABICS TWIICANADIAN SYLLABICS WEST-CREE TWIICANADIAN SYLLABICS TWOCAN" + + "ADIAN SYLLABICS WEST-CREE TWOCANADIAN SYLLABICS TWOOCANADIAN SYLLABICS W" + + "EST-CREE TWOOCANADIAN SYLLABICS TWACANADIAN SYLLABICS WEST-CREE TWACANAD" + + "IAN SYLLABICS TWAACANADIAN SYLLABICS WEST-CREE TWAACANADIAN SYLLABICS NA" + + "SKAPI TWAACANADIAN SYLLABICS TCANADIAN SYLLABICS TTECANADIAN SYLLABICS T" + + "TICANADIAN SYLLABICS TTOCANADIAN SYLLABICS TTACANADIAN SYLLABICS KECANAD" + + "IAN SYLLABICS KAAICANADIAN SYLLABICS KICANADIAN SYLLABICS KIICANADIAN SY" + + "LLABICS KOCANADIAN SYLLABICS KOOCANADIAN SYLLABICS Y-CREE KOOCANADIAN SY" + + "LLABICS KACANADIAN SYLLABICS KAACANADIAN SYLLABICS KWECANADIAN SYLLABICS" + + " WEST-CREE KWECANADIAN SYLLABICS KWICANADIAN SYLLABICS WEST-CREE KWICANA" + + "DIAN SYLLABICS KWIICANADIAN SYLLABICS WEST-CREE KWIICANADIAN SYLLABICS K" + + "WOCANADIAN SYLLABICS WEST-CREE KWOCANADIAN SYLLABICS KWOOCANADIAN SYLLAB" + + "ICS WEST-CREE KWOOCANADIAN SYLLABICS KWACANADIAN SYLLABICS WEST-CREE KWA" + + "CANADIAN SYLLABICS KWAACANADIAN SYLLABICS WEST-CREE KWAACANADIAN SYLLABI" + + "CS NASKAPI KWAACANADIAN SYLLABICS KCANADIAN SYLLABICS KWCANADIAN SYLLABI" + + "CS SOUTH-SLAVEY KEHCANADIAN SYLLABICS SOUTH-SLAVEY KIHCANADIAN SYLLABICS" + + " SOUTH-SLAVEY KOHCANADIAN SYLLABICS SOUTH-SLAVEY KAHCANADIAN SYLLABICS C" + + "ECANADIAN SYLLABICS CAAICANADIAN SYLLABICS CICANADIAN SYLLABICS CIICANAD" + + "IAN SYLLABICS COCANADIAN SYLLABICS COOCANADIAN SYLLABICS Y-CREE COOCANAD" + + "IAN SYLLABICS CACANADIAN SYLLABICS CAACANADIAN SYLLABICS CWECANADIAN SYL" + + "LABICS WEST-CREE CWECANADIAN SYLLABICS CWICANADIAN SYLLABICS WEST-CREE C" + + "WICANADIAN SYLLABICS CWIICANADIAN SYLLABICS WEST-CREE CWIICANADIAN SYLLA" + + "BICS CWOCANADIAN SYLLABICS WEST-CREE CWOCANADIAN SYLLABICS CWOOCANADIAN " + + "SYLLABICS WEST-CREE CWOOCANADIAN SYLLABICS CWACANADIAN SYLLABICS WEST-CR" + + "EE CWACANADIAN SYLLABICS CWAACANADIAN SYLLABICS WEST-CREE CWAACANADIAN S" + + "YLLABICS NASKAPI CWAACANADIAN SYLLABICS CCANADIAN SYLLABICS SAYISI THCAN" + + "ADIAN SYLLABICS MECANADIAN SYLLABICS MAAICANADIAN SYLLABICS MICANADIAN S" + + "YLLABICS MIICANADIAN SYLLABICS MOCANADIAN SYLLABICS MOOCANADIAN SYLLABIC" + + "S Y-CREE MOOCANADIAN SYLLABICS MACANADIAN SYLLABICS MAACANADIAN SYLLABIC" + + "S MWECANADIAN SYLLABICS WEST-CREE MWECANADIAN SYLLABICS MWICANADIAN SYLL" + + "ABICS WEST-CREE MWICANADIAN SYLLABICS MWIICANADIAN SYLLABICS WEST-CREE M" + + "WIICANADIAN SYLLABICS MWOCANADIAN SYLLABICS WEST-CREE MWOCANADIAN SYLLAB" + + "ICS MWOOCANADIAN SYLLABICS WEST-CREE MWOOCANADIAN SYLLABICS MWACANADIAN " + + "SYLLABICS WEST-CREE MWACANADIAN SYLLABICS MWAACANADIAN SYLLABICS WEST-CR" + + "EE MWAACANADIAN SYLLABICS NASKAPI MWAACANADIAN SYLLABICS MCANADIAN SYLLA" + + "BICS WEST-CREE MCANADIAN SYLLABICS MHCANADIAN SYLLABICS ATHAPASCAN MCANA" + + "DIAN SYLLABICS SAYISI MCANADIAN SYLLABICS NECANADIAN SYLLABICS NAAICANAD" + + "IAN SYLLABICS NICANADIAN SYLLABICS NIICANADIAN SYLLABICS NOCANADIAN SYLL" + + "ABICS NOOCANADIAN SYLLABICS Y-CREE NOOCANADIAN SYLLABICS NACANADIAN SYLL" + + "ABICS NAACANADIAN SYLLABICS NWECANADIAN SYLLABICS WEST-CREE NWECANADIAN " + + "SYLLABICS NWACANADIAN SYLLABICS WEST-CREE NWACANADIAN SYLLABICS NWAACANA" + + "DIAN SYLLABICS WEST-CREE NWAACANADIAN SYLLABICS NASKAPI NWAACANADIAN SYL" + + "LABICS NCANADIAN SYLLABICS CARRIER NGCANADIAN SYLLABICS NHCANADIAN SYLLA" + + "BICS LECANADIAN SYLLABICS LAAICANADIAN SYLLABICS LICANADIAN SYLLABICS LI" + + "ICANADIAN SYLLABICS LOCANADIAN SYLLABICS LOOCANADIAN SYLLABICS Y-CREE LO" + + "OCANADIAN SYLLABICS LACANADIAN SYLLABICS LAACANADIAN SYLLABICS LWECANADI" + + "AN SYLLABICS WEST-CREE LWECANADIAN SYLLABICS LWICANADIAN SYLLABICS WEST-" + + "CREE LWICANADIAN SYLLABICS LWIICANADIAN SYLLABICS WEST-CREE LWIICANADIAN" + + " SYLLABICS LWOCANADIAN SYLLABICS WEST-CREE LWOCANADIAN SYLLABICS LWOOCAN" + + "ADIAN SYLLABICS WEST-CREE LWOOCANADIAN SYLLABICS LWACANADIAN SYLLABICS W" + + "EST-CREE LWACANADIAN SYLLABICS LWAACANADIAN SYLLABICS WEST-CREE LWAACANA" + + "DIAN SYLLABICS LCANADIAN SYLLABICS WEST-CREE LCANADIAN SYLLABICS MEDIAL " + + "LCANADIAN SYLLABICS SECANADIAN SYLLABICS SAAICANADIAN SYLLABICS SICANADI") + ("" + + "AN SYLLABICS SIICANADIAN SYLLABICS SOCANADIAN SYLLABICS SOOCANADIAN SYLL" + + "ABICS Y-CREE SOOCANADIAN SYLLABICS SACANADIAN SYLLABICS SAACANADIAN SYLL" + + "ABICS SWECANADIAN SYLLABICS WEST-CREE SWECANADIAN SYLLABICS SWICANADIAN " + + "SYLLABICS WEST-CREE SWICANADIAN SYLLABICS SWIICANADIAN SYLLABICS WEST-CR" + + "EE SWIICANADIAN SYLLABICS SWOCANADIAN SYLLABICS WEST-CREE SWOCANADIAN SY" + + "LLABICS SWOOCANADIAN SYLLABICS WEST-CREE SWOOCANADIAN SYLLABICS SWACANAD" + + "IAN SYLLABICS WEST-CREE SWACANADIAN SYLLABICS SWAACANADIAN SYLLABICS WES" + + "T-CREE SWAACANADIAN SYLLABICS NASKAPI SWAACANADIAN SYLLABICS SCANADIAN S" + + "YLLABICS ATHAPASCAN SCANADIAN SYLLABICS SWCANADIAN SYLLABICS BLACKFOOT S" + + "CANADIAN SYLLABICS MOOSE-CREE SKCANADIAN SYLLABICS NASKAPI SKWCANADIAN S" + + "YLLABICS NASKAPI S-WCANADIAN SYLLABICS NASKAPI SPWACANADIAN SYLLABICS NA" + + "SKAPI STWACANADIAN SYLLABICS NASKAPI SKWACANADIAN SYLLABICS NASKAPI SCWA" + + "CANADIAN SYLLABICS SHECANADIAN SYLLABICS SHICANADIAN SYLLABICS SHIICANAD" + + "IAN SYLLABICS SHOCANADIAN SYLLABICS SHOOCANADIAN SYLLABICS SHACANADIAN S" + + "YLLABICS SHAACANADIAN SYLLABICS SHWECANADIAN SYLLABICS WEST-CREE SHWECAN" + + "ADIAN SYLLABICS SHWICANADIAN SYLLABICS WEST-CREE SHWICANADIAN SYLLABICS " + + "SHWIICANADIAN SYLLABICS WEST-CREE SHWIICANADIAN SYLLABICS SHWOCANADIAN S" + + "YLLABICS WEST-CREE SHWOCANADIAN SYLLABICS SHWOOCANADIAN SYLLABICS WEST-C" + + "REE SHWOOCANADIAN SYLLABICS SHWACANADIAN SYLLABICS WEST-CREE SHWACANADIA" + + "N SYLLABICS SHWAACANADIAN SYLLABICS WEST-CREE SHWAACANADIAN SYLLABICS SH" + + "CANADIAN SYLLABICS YECANADIAN SYLLABICS YAAICANADIAN SYLLABICS YICANADIA" + + "N SYLLABICS YIICANADIAN SYLLABICS YOCANADIAN SYLLABICS YOOCANADIAN SYLLA" + + "BICS Y-CREE YOOCANADIAN SYLLABICS YACANADIAN SYLLABICS YAACANADIAN SYLLA" + + "BICS YWECANADIAN SYLLABICS WEST-CREE YWECANADIAN SYLLABICS YWICANADIAN S" + + "YLLABICS WEST-CREE YWICANADIAN SYLLABICS YWIICANADIAN SYLLABICS WEST-CRE" + + "E YWIICANADIAN SYLLABICS YWOCANADIAN SYLLABICS WEST-CREE YWOCANADIAN SYL" + + "LABICS YWOOCANADIAN SYLLABICS WEST-CREE YWOOCANADIAN SYLLABICS YWACANADI" + + "AN SYLLABICS WEST-CREE YWACANADIAN SYLLABICS YWAACANADIAN SYLLABICS WEST" + + "-CREE YWAACANADIAN SYLLABICS NASKAPI YWAACANADIAN SYLLABICS YCANADIAN SY" + + "LLABICS BIBLE-CREE YCANADIAN SYLLABICS WEST-CREE YCANADIAN SYLLABICS SAY" + + "ISI YICANADIAN SYLLABICS RECANADIAN SYLLABICS R-CREE RECANADIAN SYLLABIC" + + "S WEST-CREE LECANADIAN SYLLABICS RAAICANADIAN SYLLABICS RICANADIAN SYLLA" + + "BICS RIICANADIAN SYLLABICS ROCANADIAN SYLLABICS ROOCANADIAN SYLLABICS WE" + + "ST-CREE LOCANADIAN SYLLABICS RACANADIAN SYLLABICS RAACANADIAN SYLLABICS " + + "WEST-CREE LACANADIAN SYLLABICS RWAACANADIAN SYLLABICS WEST-CREE RWAACANA" + + "DIAN SYLLABICS RCANADIAN SYLLABICS WEST-CREE RCANADIAN SYLLABICS MEDIAL " + + "RCANADIAN SYLLABICS FECANADIAN SYLLABICS FAAICANADIAN SYLLABICS FICANADI" + + "AN SYLLABICS FIICANADIAN SYLLABICS FOCANADIAN SYLLABICS FOOCANADIAN SYLL" + + "ABICS FACANADIAN SYLLABICS FAACANADIAN SYLLABICS FWAACANADIAN SYLLABICS " + + "WEST-CREE FWAACANADIAN SYLLABICS FCANADIAN SYLLABICS THECANADIAN SYLLABI" + + "CS N-CREE THECANADIAN SYLLABICS THICANADIAN SYLLABICS N-CREE THICANADIAN" + + " SYLLABICS THIICANADIAN SYLLABICS N-CREE THIICANADIAN SYLLABICS THOCANAD" + + "IAN SYLLABICS THOOCANADIAN SYLLABICS THACANADIAN SYLLABICS THAACANADIAN " + + "SYLLABICS THWAACANADIAN SYLLABICS WEST-CREE THWAACANADIAN SYLLABICS THCA" + + "NADIAN SYLLABICS TTHECANADIAN SYLLABICS TTHICANADIAN SYLLABICS TTHOCANAD" + + "IAN SYLLABICS TTHACANADIAN SYLLABICS TTHCANADIAN SYLLABICS TYECANADIAN S" + + "YLLABICS TYICANADIAN SYLLABICS TYOCANADIAN SYLLABICS TYACANADIAN SYLLABI" + + "CS NUNAVIK HECANADIAN SYLLABICS NUNAVIK HICANADIAN SYLLABICS NUNAVIK HII" + + "CANADIAN SYLLABICS NUNAVIK HOCANADIAN SYLLABICS NUNAVIK HOOCANADIAN SYLL" + + "ABICS NUNAVIK HACANADIAN SYLLABICS NUNAVIK HAACANADIAN SYLLABICS NUNAVIK" + + " HCANADIAN SYLLABICS NUNAVUT HCANADIAN SYLLABICS HKCANADIAN SYLLABICS QA" + + "AICANADIAN SYLLABICS QICANADIAN SYLLABICS QIICANADIAN SYLLABICS QOCANADI" + + "AN SYLLABICS QOOCANADIAN SYLLABICS QACANADIAN SYLLABICS QAACANADIAN SYLL" + + "ABICS QCANADIAN SYLLABICS TLHECANADIAN SYLLABICS TLHICANADIAN SYLLABICS " + + "TLHOCANADIAN SYLLABICS TLHACANADIAN SYLLABICS WEST-CREE RECANADIAN SYLLA" + + "BICS WEST-CREE RICANADIAN SYLLABICS WEST-CREE ROCANADIAN SYLLABICS WEST-" + + "CREE RACANADIAN SYLLABICS NGAAICANADIAN SYLLABICS NGICANADIAN SYLLABICS " + + "NGIICANADIAN SYLLABICS NGOCANADIAN SYLLABICS NGOOCANADIAN SYLLABICS NGAC" + + "ANADIAN SYLLABICS NGAACANADIAN SYLLABICS NGCANADIAN SYLLABICS NNGCANADIA" + + "N SYLLABICS SAYISI SHECANADIAN SYLLABICS SAYISI SHICANADIAN SYLLABICS SA" + + "YISI SHOCANADIAN SYLLABICS SAYISI SHACANADIAN SYLLABICS WOODS-CREE THECA" + + "NADIAN SYLLABICS WOODS-CREE THICANADIAN SYLLABICS WOODS-CREE THOCANADIAN" + + " SYLLABICS WOODS-CREE THACANADIAN SYLLABICS WOODS-CREE THCANADIAN SYLLAB" + + "ICS LHICANADIAN SYLLABICS LHIICANADIAN SYLLABICS LHOCANADIAN SYLLABICS L") + ("" + + "HOOCANADIAN SYLLABICS LHACANADIAN SYLLABICS LHAACANADIAN SYLLABICS LHCAN" + + "ADIAN SYLLABICS TH-CREE THECANADIAN SYLLABICS TH-CREE THICANADIAN SYLLAB" + + "ICS TH-CREE THIICANADIAN SYLLABICS TH-CREE THOCANADIAN SYLLABICS TH-CREE" + + " THOOCANADIAN SYLLABICS TH-CREE THACANADIAN SYLLABICS TH-CREE THAACANADI" + + "AN SYLLABICS TH-CREE THCANADIAN SYLLABICS AIVILIK BCANADIAN SYLLABICS BL" + + "ACKFOOT ECANADIAN SYLLABICS BLACKFOOT ICANADIAN SYLLABICS BLACKFOOT OCAN" + + "ADIAN SYLLABICS BLACKFOOT ACANADIAN SYLLABICS BLACKFOOT WECANADIAN SYLLA" + + "BICS BLACKFOOT WICANADIAN SYLLABICS BLACKFOOT WOCANADIAN SYLLABICS BLACK" + + "FOOT WACANADIAN SYLLABICS BLACKFOOT NECANADIAN SYLLABICS BLACKFOOT NICAN" + + "ADIAN SYLLABICS BLACKFOOT NOCANADIAN SYLLABICS BLACKFOOT NACANADIAN SYLL" + + "ABICS BLACKFOOT KECANADIAN SYLLABICS BLACKFOOT KICANADIAN SYLLABICS BLAC" + + "KFOOT KOCANADIAN SYLLABICS BLACKFOOT KACANADIAN SYLLABICS SAYISI HECANAD" + + "IAN SYLLABICS SAYISI HICANADIAN SYLLABICS SAYISI HOCANADIAN SYLLABICS SA" + + "YISI HACANADIAN SYLLABICS CARRIER GHUCANADIAN SYLLABICS CARRIER GHOCANAD" + + "IAN SYLLABICS CARRIER GHECANADIAN SYLLABICS CARRIER GHEECANADIAN SYLLABI" + + "CS CARRIER GHICANADIAN SYLLABICS CARRIER GHACANADIAN SYLLABICS CARRIER R" + + "UCANADIAN SYLLABICS CARRIER ROCANADIAN SYLLABICS CARRIER RECANADIAN SYLL" + + "ABICS CARRIER REECANADIAN SYLLABICS CARRIER RICANADIAN SYLLABICS CARRIER" + + " RACANADIAN SYLLABICS CARRIER WUCANADIAN SYLLABICS CARRIER WOCANADIAN SY" + + "LLABICS CARRIER WECANADIAN SYLLABICS CARRIER WEECANADIAN SYLLABICS CARRI" + + "ER WICANADIAN SYLLABICS CARRIER WACANADIAN SYLLABICS CARRIER HWUCANADIAN" + + " SYLLABICS CARRIER HWOCANADIAN SYLLABICS CARRIER HWECANADIAN SYLLABICS C" + + "ARRIER HWEECANADIAN SYLLABICS CARRIER HWICANADIAN SYLLABICS CARRIER HWAC" + + "ANADIAN SYLLABICS CARRIER THUCANADIAN SYLLABICS CARRIER THOCANADIAN SYLL" + + "ABICS CARRIER THECANADIAN SYLLABICS CARRIER THEECANADIAN SYLLABICS CARRI" + + "ER THICANADIAN SYLLABICS CARRIER THACANADIAN SYLLABICS CARRIER TTUCANADI" + + "AN SYLLABICS CARRIER TTOCANADIAN SYLLABICS CARRIER TTECANADIAN SYLLABICS" + + " CARRIER TTEECANADIAN SYLLABICS CARRIER TTICANADIAN SYLLABICS CARRIER TT" + + "ACANADIAN SYLLABICS CARRIER PUCANADIAN SYLLABICS CARRIER POCANADIAN SYLL" + + "ABICS CARRIER PECANADIAN SYLLABICS CARRIER PEECANADIAN SYLLABICS CARRIER" + + " PICANADIAN SYLLABICS CARRIER PACANADIAN SYLLABICS CARRIER PCANADIAN SYL" + + "LABICS CARRIER GUCANADIAN SYLLABICS CARRIER GOCANADIAN SYLLABICS CARRIER" + + " GECANADIAN SYLLABICS CARRIER GEECANADIAN SYLLABICS CARRIER GICANADIAN S" + + "YLLABICS CARRIER GACANADIAN SYLLABICS CARRIER KHUCANADIAN SYLLABICS CARR" + + "IER KHOCANADIAN SYLLABICS CARRIER KHECANADIAN SYLLABICS CARRIER KHEECANA" + + "DIAN SYLLABICS CARRIER KHICANADIAN SYLLABICS CARRIER KHACANADIAN SYLLABI" + + "CS CARRIER KKUCANADIAN SYLLABICS CARRIER KKOCANADIAN SYLLABICS CARRIER K" + + "KECANADIAN SYLLABICS CARRIER KKEECANADIAN SYLLABICS CARRIER KKICANADIAN " + + "SYLLABICS CARRIER KKACANADIAN SYLLABICS CARRIER KKCANADIAN SYLLABICS CAR" + + "RIER NUCANADIAN SYLLABICS CARRIER NOCANADIAN SYLLABICS CARRIER NECANADIA" + + "N SYLLABICS CARRIER NEECANADIAN SYLLABICS CARRIER NICANADIAN SYLLABICS C" + + "ARRIER NACANADIAN SYLLABICS CARRIER MUCANADIAN SYLLABICS CARRIER MOCANAD" + + "IAN SYLLABICS CARRIER MECANADIAN SYLLABICS CARRIER MEECANADIAN SYLLABICS" + + " CARRIER MICANADIAN SYLLABICS CARRIER MACANADIAN SYLLABICS CARRIER YUCAN" + + "ADIAN SYLLABICS CARRIER YOCANADIAN SYLLABICS CARRIER YECANADIAN SYLLABIC" + + "S CARRIER YEECANADIAN SYLLABICS CARRIER YICANADIAN SYLLABICS CARRIER YAC" + + "ANADIAN SYLLABICS CARRIER JUCANADIAN SYLLABICS SAYISI JUCANADIAN SYLLABI" + + "CS CARRIER JOCANADIAN SYLLABICS CARRIER JECANADIAN SYLLABICS CARRIER JEE" + + "CANADIAN SYLLABICS CARRIER JICANADIAN SYLLABICS SAYISI JICANADIAN SYLLAB" + + "ICS CARRIER JACANADIAN SYLLABICS CARRIER JJUCANADIAN SYLLABICS CARRIER J" + + "JOCANADIAN SYLLABICS CARRIER JJECANADIAN SYLLABICS CARRIER JJEECANADIAN " + + "SYLLABICS CARRIER JJICANADIAN SYLLABICS CARRIER JJACANADIAN SYLLABICS CA" + + "RRIER LUCANADIAN SYLLABICS CARRIER LOCANADIAN SYLLABICS CARRIER LECANADI" + + "AN SYLLABICS CARRIER LEECANADIAN SYLLABICS CARRIER LICANADIAN SYLLABICS " + + "CARRIER LACANADIAN SYLLABICS CARRIER DLUCANADIAN SYLLABICS CARRIER DLOCA" + + "NADIAN SYLLABICS CARRIER DLECANADIAN SYLLABICS CARRIER DLEECANADIAN SYLL" + + "ABICS CARRIER DLICANADIAN SYLLABICS CARRIER DLACANADIAN SYLLABICS CARRIE" + + "R LHUCANADIAN SYLLABICS CARRIER LHOCANADIAN SYLLABICS CARRIER LHECANADIA" + + "N SYLLABICS CARRIER LHEECANADIAN SYLLABICS CARRIER LHICANADIAN SYLLABICS" + + " CARRIER LHACANADIAN SYLLABICS CARRIER TLHUCANADIAN SYLLABICS CARRIER TL" + + "HOCANADIAN SYLLABICS CARRIER TLHECANADIAN SYLLABICS CARRIER TLHEECANADIA" + + "N SYLLABICS CARRIER TLHICANADIAN SYLLABICS CARRIER TLHACANADIAN SYLLABIC" + + "S CARRIER TLUCANADIAN SYLLABICS CARRIER TLOCANADIAN SYLLABICS CARRIER TL" + + "ECANADIAN SYLLABICS CARRIER TLEECANADIAN SYLLABICS CARRIER TLICANADIAN S") + ("" + + "YLLABICS CARRIER TLACANADIAN SYLLABICS CARRIER ZUCANADIAN SYLLABICS CARR" + + "IER ZOCANADIAN SYLLABICS CARRIER ZECANADIAN SYLLABICS CARRIER ZEECANADIA" + + "N SYLLABICS CARRIER ZICANADIAN SYLLABICS CARRIER ZACANADIAN SYLLABICS CA" + + "RRIER ZCANADIAN SYLLABICS CARRIER INITIAL ZCANADIAN SYLLABICS CARRIER DZ" + + "UCANADIAN SYLLABICS CARRIER DZOCANADIAN SYLLABICS CARRIER DZECANADIAN SY" + + "LLABICS CARRIER DZEECANADIAN SYLLABICS CARRIER DZICANADIAN SYLLABICS CAR" + + "RIER DZACANADIAN SYLLABICS CARRIER SUCANADIAN SYLLABICS CARRIER SOCANADI" + + "AN SYLLABICS CARRIER SECANADIAN SYLLABICS CARRIER SEECANADIAN SYLLABICS " + + "CARRIER SICANADIAN SYLLABICS CARRIER SACANADIAN SYLLABICS CARRIER SHUCAN" + + "ADIAN SYLLABICS CARRIER SHOCANADIAN SYLLABICS CARRIER SHECANADIAN SYLLAB" + + "ICS CARRIER SHEECANADIAN SYLLABICS CARRIER SHICANADIAN SYLLABICS CARRIER" + + " SHACANADIAN SYLLABICS CARRIER SHCANADIAN SYLLABICS CARRIER TSUCANADIAN " + + "SYLLABICS CARRIER TSOCANADIAN SYLLABICS CARRIER TSECANADIAN SYLLABICS CA" + + "RRIER TSEECANADIAN SYLLABICS CARRIER TSICANADIAN SYLLABICS CARRIER TSACA" + + "NADIAN SYLLABICS CARRIER CHUCANADIAN SYLLABICS CARRIER CHOCANADIAN SYLLA" + + "BICS CARRIER CHECANADIAN SYLLABICS CARRIER CHEECANADIAN SYLLABICS CARRIE" + + "R CHICANADIAN SYLLABICS CARRIER CHACANADIAN SYLLABICS CARRIER TTSUCANADI" + + "AN SYLLABICS CARRIER TTSOCANADIAN SYLLABICS CARRIER TTSECANADIAN SYLLABI" + + "CS CARRIER TTSEECANADIAN SYLLABICS CARRIER TTSICANADIAN SYLLABICS CARRIE" + + "R TTSACANADIAN SYLLABICS CHI SIGNCANADIAN SYLLABICS FULL STOPCANADIAN SY" + + "LLABICS QAICANADIAN SYLLABICS NGAICANADIAN SYLLABICS NNGICANADIAN SYLLAB" + + "ICS NNGIICANADIAN SYLLABICS NNGOCANADIAN SYLLABICS NNGOOCANADIAN SYLLABI" + + "CS NNGACANADIAN SYLLABICS NNGAACANADIAN SYLLABICS WOODS-CREE THWEECANADI" + + "AN SYLLABICS WOODS-CREE THWICANADIAN SYLLABICS WOODS-CREE THWIICANADIAN " + + "SYLLABICS WOODS-CREE THWOCANADIAN SYLLABICS WOODS-CREE THWOOCANADIAN SYL" + + "LABICS WOODS-CREE THWACANADIAN SYLLABICS WOODS-CREE THWAACANADIAN SYLLAB" + + "ICS WOODS-CREE FINAL THCANADIAN SYLLABICS BLACKFOOT WOGHAM SPACE MARKOGH" + + "AM LETTER BEITHOGHAM LETTER LUISOGHAM LETTER FEARNOGHAM LETTER SAILOGHAM" + + " LETTER NIONOGHAM LETTER UATHOGHAM LETTER DAIROGHAM LETTER TINNEOGHAM LE" + + "TTER COLLOGHAM LETTER CEIRTOGHAM LETTER MUINOGHAM LETTER GORTOGHAM LETTE" + + "R NGEADALOGHAM LETTER STRAIFOGHAM LETTER RUISOGHAM LETTER AILMOGHAM LETT" + + "ER ONNOGHAM LETTER UROGHAM LETTER EADHADHOGHAM LETTER IODHADHOGHAM LETTE" + + "R EABHADHOGHAM LETTER OROGHAM LETTER UILLEANNOGHAM LETTER IFINOGHAM LETT" + + "ER EAMHANCHOLLOGHAM LETTER PEITHOGHAM FEATHER MARKOGHAM REVERSED FEATHER" + + " MARKRUNIC LETTER FEHU FEOH FE FRUNIC LETTER VRUNIC LETTER URUZ UR URUNI" + + "C LETTER YRRUNIC LETTER YRUNIC LETTER WRUNIC LETTER THURISAZ THURS THORN" + + "RUNIC LETTER ETHRUNIC LETTER ANSUZ ARUNIC LETTER OS ORUNIC LETTER AC ARU" + + "NIC LETTER AESCRUNIC LETTER LONG-BRANCH-OSS ORUNIC LETTER SHORT-TWIG-OSS" + + " ORUNIC LETTER ORUNIC LETTER OERUNIC LETTER ONRUNIC LETTER RAIDO RAD REI" + + "D RRUNIC LETTER KAUNARUNIC LETTER CENRUNIC LETTER KAUN KRUNIC LETTER GRU" + + "NIC LETTER ENGRUNIC LETTER GEBO GYFU GRUNIC LETTER GARRUNIC LETTER WUNJO" + + " WYNN WRUNIC LETTER HAGLAZ HRUNIC LETTER HAEGL HRUNIC LETTER LONG-BRANCH" + + "-HAGALL HRUNIC LETTER SHORT-TWIG-HAGALL HRUNIC LETTER NAUDIZ NYD NAUD NR" + + "UNIC LETTER SHORT-TWIG-NAUD NRUNIC LETTER DOTTED-NRUNIC LETTER ISAZ IS I" + + "SS IRUNIC LETTER ERUNIC LETTER JERAN JRUNIC LETTER GERRUNIC LETTER LONG-" + + "BRANCH-AR AERUNIC LETTER SHORT-TWIG-AR ARUNIC LETTER IWAZ EOHRUNIC LETTE" + + "R PERTHO PEORTH PRUNIC LETTER ALGIZ EOLHXRUNIC LETTER SOWILO SRUNIC LETT" + + "ER SIGEL LONG-BRANCH-SOL SRUNIC LETTER SHORT-TWIG-SOL SRUNIC LETTER CRUN" + + "IC LETTER ZRUNIC LETTER TIWAZ TIR TYR TRUNIC LETTER SHORT-TWIG-TYR TRUNI" + + "C LETTER DRUNIC LETTER BERKANAN BEORC BJARKAN BRUNIC LETTER SHORT-TWIG-B" + + "JARKAN BRUNIC LETTER DOTTED-PRUNIC LETTER OPEN-PRUNIC LETTER EHWAZ EH ER" + + "UNIC LETTER MANNAZ MAN MRUNIC LETTER LONG-BRANCH-MADR MRUNIC LETTER SHOR" + + "T-TWIG-MADR MRUNIC LETTER LAUKAZ LAGU LOGR LRUNIC LETTER DOTTED-LRUNIC L" + + "ETTER INGWAZRUNIC LETTER INGRUNIC LETTER DAGAZ DAEG DRUNIC LETTER OTHALA" + + "N ETHEL ORUNIC LETTER EARRUNIC LETTER IORRUNIC LETTER CWEORTHRUNIC LETTE" + + "R CALCRUNIC LETTER CEALCRUNIC LETTER STANRUNIC LETTER LONG-BRANCH-YRRUNI" + + "C LETTER SHORT-TWIG-YRRUNIC LETTER ICELANDIC-YRRUNIC LETTER QRUNIC LETTE" + + "R XRUNIC SINGLE PUNCTUATIONRUNIC MULTIPLE PUNCTUATIONRUNIC CROSS PUNCTUA" + + "TIONRUNIC ARLAUG SYMBOLRUNIC TVIMADUR SYMBOLRUNIC BELGTHOR SYMBOLRUNIC L" + + "ETTER KRUNIC LETTER SHRUNIC LETTER OORUNIC LETTER FRANKS CASKET OSRUNIC " + + "LETTER FRANKS CASKET ISRUNIC LETTER FRANKS CASKET EHRUNIC LETTER FRANKS " + + "CASKET ACRUNIC LETTER FRANKS CASKET AESCTAGALOG LETTER ATAGALOG LETTER I" + + "TAGALOG LETTER UTAGALOG LETTER KATAGALOG LETTER GATAGALOG LETTER NGATAGA" + + "LOG LETTER TATAGALOG LETTER DATAGALOG LETTER NATAGALOG LETTER PATAGALOG ") + ("" + + "LETTER BATAGALOG LETTER MATAGALOG LETTER YATAGALOG LETTER LATAGALOG LETT" + + "ER WATAGALOG LETTER SATAGALOG LETTER HATAGALOG VOWEL SIGN ITAGALOG VOWEL" + + " SIGN UTAGALOG SIGN VIRAMAHANUNOO LETTER AHANUNOO LETTER IHANUNOO LETTER" + + " UHANUNOO LETTER KAHANUNOO LETTER GAHANUNOO LETTER NGAHANUNOO LETTER TAH" + + "ANUNOO LETTER DAHANUNOO LETTER NAHANUNOO LETTER PAHANUNOO LETTER BAHANUN" + + "OO LETTER MAHANUNOO LETTER YAHANUNOO LETTER RAHANUNOO LETTER LAHANUNOO L" + + "ETTER WAHANUNOO LETTER SAHANUNOO LETTER HAHANUNOO VOWEL SIGN IHANUNOO VO" + + "WEL SIGN UHANUNOO SIGN PAMUDPODPHILIPPINE SINGLE PUNCTUATIONPHILIPPINE D" + + "OUBLE PUNCTUATIONBUHID LETTER ABUHID LETTER IBUHID LETTER UBUHID LETTER " + + "KABUHID LETTER GABUHID LETTER NGABUHID LETTER TABUHID LETTER DABUHID LET" + + "TER NABUHID LETTER PABUHID LETTER BABUHID LETTER MABUHID LETTER YABUHID " + + "LETTER RABUHID LETTER LABUHID LETTER WABUHID LETTER SABUHID LETTER HABUH" + + "ID VOWEL SIGN IBUHID VOWEL SIGN UTAGBANWA LETTER ATAGBANWA LETTER ITAGBA" + + "NWA LETTER UTAGBANWA LETTER KATAGBANWA LETTER GATAGBANWA LETTER NGATAGBA" + + "NWA LETTER TATAGBANWA LETTER DATAGBANWA LETTER NATAGBANWA LETTER PATAGBA" + + "NWA LETTER BATAGBANWA LETTER MATAGBANWA LETTER YATAGBANWA LETTER LATAGBA" + + "NWA LETTER WATAGBANWA LETTER SATAGBANWA VOWEL SIGN ITAGBANWA VOWEL SIGN " + + "UKHMER LETTER KAKHMER LETTER KHAKHMER LETTER KOKHMER LETTER KHOKHMER LET" + + "TER NGOKHMER LETTER CAKHMER LETTER CHAKHMER LETTER COKHMER LETTER CHOKHM" + + "ER LETTER NYOKHMER LETTER DAKHMER LETTER TTHAKHMER LETTER DOKHMER LETTER" + + " TTHOKHMER LETTER NNOKHMER LETTER TAKHMER LETTER THAKHMER LETTER TOKHMER" + + " LETTER THOKHMER LETTER NOKHMER LETTER BAKHMER LETTER PHAKHMER LETTER PO" + + "KHMER LETTER PHOKHMER LETTER MOKHMER LETTER YOKHMER LETTER ROKHMER LETTE" + + "R LOKHMER LETTER VOKHMER LETTER SHAKHMER LETTER SSOKHMER LETTER SAKHMER " + + "LETTER HAKHMER LETTER LAKHMER LETTER QAKHMER INDEPENDENT VOWEL QAQKHMER " + + "INDEPENDENT VOWEL QAAKHMER INDEPENDENT VOWEL QIKHMER INDEPENDENT VOWEL Q" + + "IIKHMER INDEPENDENT VOWEL QUKHMER INDEPENDENT VOWEL QUKKHMER INDEPENDENT" + + " VOWEL QUUKHMER INDEPENDENT VOWEL QUUVKHMER INDEPENDENT VOWEL RYKHMER IN" + + "DEPENDENT VOWEL RYYKHMER INDEPENDENT VOWEL LYKHMER INDEPENDENT VOWEL LYY" + + "KHMER INDEPENDENT VOWEL QEKHMER INDEPENDENT VOWEL QAIKHMER INDEPENDENT V" + + "OWEL QOO TYPE ONEKHMER INDEPENDENT VOWEL QOO TYPE TWOKHMER INDEPENDENT V" + + "OWEL QAUKHMER VOWEL INHERENT AQKHMER VOWEL INHERENT AAKHMER VOWEL SIGN A" + + "AKHMER VOWEL SIGN IKHMER VOWEL SIGN IIKHMER VOWEL SIGN YKHMER VOWEL SIGN" + + " YYKHMER VOWEL SIGN UKHMER VOWEL SIGN UUKHMER VOWEL SIGN UAKHMER VOWEL S" + + "IGN OEKHMER VOWEL SIGN YAKHMER VOWEL SIGN IEKHMER VOWEL SIGN EKHMER VOWE" + + "L SIGN AEKHMER VOWEL SIGN AIKHMER VOWEL SIGN OOKHMER VOWEL SIGN AUKHMER " + + "SIGN NIKAHITKHMER SIGN REAHMUKKHMER SIGN YUUKALEAPINTUKHMER SIGN MUUSIKA" + + "TOANKHMER SIGN TRIISAPKHMER SIGN BANTOCKHMER SIGN ROBATKHMER SIGN TOANDA" + + "KHIATKHMER SIGN KAKABATKHMER SIGN AHSDAKHMER SIGN SAMYOK SANNYAKHMER SIG" + + "N VIRIAMKHMER SIGN COENGKHMER SIGN BATHAMASATKHMER SIGN KHANKHMER SIGN B" + + "ARIYOOSANKHMER SIGN CAMNUC PII KUUHKHMER SIGN LEK TOOKHMER SIGN BEYYALKH" + + "MER SIGN PHNAEK MUANKHMER SIGN KOOMUUTKHMER CURRENCY SYMBOL RIELKHMER SI" + + "GN AVAKRAHASANYAKHMER SIGN ATTHACANKHMER DIGIT ZEROKHMER DIGIT ONEKHMER " + + "DIGIT TWOKHMER DIGIT THREEKHMER DIGIT FOURKHMER DIGIT FIVEKHMER DIGIT SI" + + "XKHMER DIGIT SEVENKHMER DIGIT EIGHTKHMER DIGIT NINEKHMER SYMBOL LEK ATTA" + + "K SONKHMER SYMBOL LEK ATTAK MUOYKHMER SYMBOL LEK ATTAK PIIKHMER SYMBOL L" + + "EK ATTAK BEIKHMER SYMBOL LEK ATTAK BUONKHMER SYMBOL LEK ATTAK PRAMKHMER " + + "SYMBOL LEK ATTAK PRAM-MUOYKHMER SYMBOL LEK ATTAK PRAM-PIIKHMER SYMBOL LE" + + "K ATTAK PRAM-BEIKHMER SYMBOL LEK ATTAK PRAM-BUONMONGOLIAN BIRGAMONGOLIAN" + + " ELLIPSISMONGOLIAN COMMAMONGOLIAN FULL STOPMONGOLIAN COLONMONGOLIAN FOUR" + + " DOTSMONGOLIAN TODO SOFT HYPHENMONGOLIAN SIBE SYLLABLE BOUNDARY MARKERMO" + + "NGOLIAN MANCHU COMMAMONGOLIAN MANCHU FULL STOPMONGOLIAN NIRUGUMONGOLIAN " + + "FREE VARIATION SELECTOR ONEMONGOLIAN FREE VARIATION SELECTOR TWOMONGOLIA" + + "N FREE VARIATION SELECTOR THREEMONGOLIAN VOWEL SEPARATORMONGOLIAN DIGIT " + + "ZEROMONGOLIAN DIGIT ONEMONGOLIAN DIGIT TWOMONGOLIAN DIGIT THREEMONGOLIAN" + + " DIGIT FOURMONGOLIAN DIGIT FIVEMONGOLIAN DIGIT SIXMONGOLIAN DIGIT SEVENM" + + "ONGOLIAN DIGIT EIGHTMONGOLIAN DIGIT NINEMONGOLIAN LETTER AMONGOLIAN LETT" + + "ER EMONGOLIAN LETTER IMONGOLIAN LETTER OMONGOLIAN LETTER UMONGOLIAN LETT" + + "ER OEMONGOLIAN LETTER UEMONGOLIAN LETTER EEMONGOLIAN LETTER NAMONGOLIAN " + + "LETTER ANGMONGOLIAN LETTER BAMONGOLIAN LETTER PAMONGOLIAN LETTER QAMONGO" + + "LIAN LETTER GAMONGOLIAN LETTER MAMONGOLIAN LETTER LAMONGOLIAN LETTER SAM" + + "ONGOLIAN LETTER SHAMONGOLIAN LETTER TAMONGOLIAN LETTER DAMONGOLIAN LETTE" + + "R CHAMONGOLIAN LETTER JAMONGOLIAN LETTER YAMONGOLIAN LETTER RAMONGOLIAN " + + "LETTER WAMONGOLIAN LETTER FAMONGOLIAN LETTER KAMONGOLIAN LETTER KHAMONGO") + ("" + + "LIAN LETTER TSAMONGOLIAN LETTER ZAMONGOLIAN LETTER HAAMONGOLIAN LETTER Z" + + "RAMONGOLIAN LETTER LHAMONGOLIAN LETTER ZHIMONGOLIAN LETTER CHIMONGOLIAN " + + "LETTER TODO LONG VOWEL SIGNMONGOLIAN LETTER TODO EMONGOLIAN LETTER TODO " + + "IMONGOLIAN LETTER TODO OMONGOLIAN LETTER TODO UMONGOLIAN LETTER TODO OEM" + + "ONGOLIAN LETTER TODO UEMONGOLIAN LETTER TODO ANGMONGOLIAN LETTER TODO BA" + + "MONGOLIAN LETTER TODO PAMONGOLIAN LETTER TODO QAMONGOLIAN LETTER TODO GA" + + "MONGOLIAN LETTER TODO MAMONGOLIAN LETTER TODO TAMONGOLIAN LETTER TODO DA" + + "MONGOLIAN LETTER TODO CHAMONGOLIAN LETTER TODO JAMONGOLIAN LETTER TODO T" + + "SAMONGOLIAN LETTER TODO YAMONGOLIAN LETTER TODO WAMONGOLIAN LETTER TODO " + + "KAMONGOLIAN LETTER TODO GAAMONGOLIAN LETTER TODO HAAMONGOLIAN LETTER TOD" + + "O JIAMONGOLIAN LETTER TODO NIAMONGOLIAN LETTER TODO DZAMONGOLIAN LETTER " + + "SIBE EMONGOLIAN LETTER SIBE IMONGOLIAN LETTER SIBE IYMONGOLIAN LETTER SI" + + "BE UEMONGOLIAN LETTER SIBE UMONGOLIAN LETTER SIBE ANGMONGOLIAN LETTER SI" + + "BE KAMONGOLIAN LETTER SIBE GAMONGOLIAN LETTER SIBE HAMONGOLIAN LETTER SI" + + "BE PAMONGOLIAN LETTER SIBE SHAMONGOLIAN LETTER SIBE TAMONGOLIAN LETTER S" + + "IBE DAMONGOLIAN LETTER SIBE JAMONGOLIAN LETTER SIBE FAMONGOLIAN LETTER S" + + "IBE GAAMONGOLIAN LETTER SIBE HAAMONGOLIAN LETTER SIBE TSAMONGOLIAN LETTE" + + "R SIBE ZAMONGOLIAN LETTER SIBE RAAMONGOLIAN LETTER SIBE CHAMONGOLIAN LET" + + "TER SIBE ZHAMONGOLIAN LETTER MANCHU IMONGOLIAN LETTER MANCHU KAMONGOLIAN" + + " LETTER MANCHU RAMONGOLIAN LETTER MANCHU FAMONGOLIAN LETTER MANCHU ZHAMO" + + "NGOLIAN LETTER ALI GALI ANUSVARA ONEMONGOLIAN LETTER ALI GALI VISARGA ON" + + "EMONGOLIAN LETTER ALI GALI DAMARUMONGOLIAN LETTER ALI GALI UBADAMAMONGOL" + + "IAN LETTER ALI GALI INVERTED UBADAMAMONGOLIAN LETTER ALI GALI BALUDAMONG" + + "OLIAN LETTER ALI GALI THREE BALUDAMONGOLIAN LETTER ALI GALI AMONGOLIAN L" + + "ETTER ALI GALI IMONGOLIAN LETTER ALI GALI KAMONGOLIAN LETTER ALI GALI NG" + + "AMONGOLIAN LETTER ALI GALI CAMONGOLIAN LETTER ALI GALI TTAMONGOLIAN LETT" + + "ER ALI GALI TTHAMONGOLIAN LETTER ALI GALI DDAMONGOLIAN LETTER ALI GALI N" + + "NAMONGOLIAN LETTER ALI GALI TAMONGOLIAN LETTER ALI GALI DAMONGOLIAN LETT" + + "ER ALI GALI PAMONGOLIAN LETTER ALI GALI PHAMONGOLIAN LETTER ALI GALI SSA" + + "MONGOLIAN LETTER ALI GALI ZHAMONGOLIAN LETTER ALI GALI ZAMONGOLIAN LETTE" + + "R ALI GALI AHMONGOLIAN LETTER TODO ALI GALI TAMONGOLIAN LETTER TODO ALI " + + "GALI ZHAMONGOLIAN LETTER MANCHU ALI GALI GHAMONGOLIAN LETTER MANCHU ALI " + + "GALI NGAMONGOLIAN LETTER MANCHU ALI GALI CAMONGOLIAN LETTER MANCHU ALI G" + + "ALI JHAMONGOLIAN LETTER MANCHU ALI GALI TTAMONGOLIAN LETTER MANCHU ALI G" + + "ALI DDHAMONGOLIAN LETTER MANCHU ALI GALI TAMONGOLIAN LETTER MANCHU ALI G" + + "ALI DHAMONGOLIAN LETTER MANCHU ALI GALI SSAMONGOLIAN LETTER MANCHU ALI G" + + "ALI CYAMONGOLIAN LETTER MANCHU ALI GALI ZHAMONGOLIAN LETTER MANCHU ALI G" + + "ALI ZAMONGOLIAN LETTER ALI GALI HALF UMONGOLIAN LETTER ALI GALI HALF YAM" + + "ONGOLIAN LETTER MANCHU ALI GALI BHAMONGOLIAN LETTER ALI GALI DAGALGAMONG" + + "OLIAN LETTER MANCHU ALI GALI LHACANADIAN SYLLABICS OYCANADIAN SYLLABICS " + + "AYCANADIAN SYLLABICS AAYCANADIAN SYLLABICS WAYCANADIAN SYLLABICS POYCANA" + + "DIAN SYLLABICS PAYCANADIAN SYLLABICS PWOYCANADIAN SYLLABICS TAYCANADIAN " + + "SYLLABICS KAYCANADIAN SYLLABICS KWAYCANADIAN SYLLABICS MAYCANADIAN SYLLA" + + "BICS NOYCANADIAN SYLLABICS NAYCANADIAN SYLLABICS LAYCANADIAN SYLLABICS S" + + "OYCANADIAN SYLLABICS SAYCANADIAN SYLLABICS SHOYCANADIAN SYLLABICS SHAYCA" + + "NADIAN SYLLABICS SHWOYCANADIAN SYLLABICS YOYCANADIAN SYLLABICS YAYCANADI" + + "AN SYLLABICS RAYCANADIAN SYLLABICS NWICANADIAN SYLLABICS OJIBWAY NWICANA" + + "DIAN SYLLABICS NWIICANADIAN SYLLABICS OJIBWAY NWIICANADIAN SYLLABICS NWO" + + "CANADIAN SYLLABICS OJIBWAY NWOCANADIAN SYLLABICS NWOOCANADIAN SYLLABICS " + + "OJIBWAY NWOOCANADIAN SYLLABICS RWEECANADIAN SYLLABICS RWICANADIAN SYLLAB" + + "ICS RWIICANADIAN SYLLABICS RWOCANADIAN SYLLABICS RWOOCANADIAN SYLLABICS " + + "RWACANADIAN SYLLABICS OJIBWAY PCANADIAN SYLLABICS OJIBWAY TCANADIAN SYLL" + + "ABICS OJIBWAY KCANADIAN SYLLABICS OJIBWAY CCANADIAN SYLLABICS OJIBWAY MC" + + "ANADIAN SYLLABICS OJIBWAY NCANADIAN SYLLABICS OJIBWAY SCANADIAN SYLLABIC" + + "S OJIBWAY SHCANADIAN SYLLABICS EASTERN WCANADIAN SYLLABICS WESTERN WCANA" + + "DIAN SYLLABICS FINAL SMALL RINGCANADIAN SYLLABICS FINAL RAISED DOTCANADI" + + "AN SYLLABICS R-CREE RWECANADIAN SYLLABICS WEST-CREE LOOCANADIAN SYLLABIC" + + "S WEST-CREE LAACANADIAN SYLLABICS THWECANADIAN SYLLABICS THWACANADIAN SY" + + "LLABICS TTHWECANADIAN SYLLABICS TTHOOCANADIAN SYLLABICS TTHAACANADIAN SY" + + "LLABICS TLHWECANADIAN SYLLABICS TLHOOCANADIAN SYLLABICS SAYISI SHWECANAD" + + "IAN SYLLABICS SAYISI SHOOCANADIAN SYLLABICS SAYISI HOOCANADIAN SYLLABICS" + + " CARRIER GWUCANADIAN SYLLABICS CARRIER DENE GEECANADIAN SYLLABICS CARRIE" + + "R GAACANADIAN SYLLABICS CARRIER GWACANADIAN SYLLABICS SAYISI JUUCANADIAN" + + " SYLLABICS CARRIER JWACANADIAN SYLLABICS BEAVER DENE LCANADIAN SYLLABICS") + ("" + + " BEAVER DENE RCANADIAN SYLLABICS CARRIER DENTAL SLIMBU VOWEL-CARRIER LET" + + "TERLIMBU LETTER KALIMBU LETTER KHALIMBU LETTER GALIMBU LETTER GHALIMBU L" + + "ETTER NGALIMBU LETTER CALIMBU LETTER CHALIMBU LETTER JALIMBU LETTER JHAL" + + "IMBU LETTER YANLIMBU LETTER TALIMBU LETTER THALIMBU LETTER DALIMBU LETTE" + + "R DHALIMBU LETTER NALIMBU LETTER PALIMBU LETTER PHALIMBU LETTER BALIMBU " + + "LETTER BHALIMBU LETTER MALIMBU LETTER YALIMBU LETTER RALIMBU LETTER LALI" + + "MBU LETTER WALIMBU LETTER SHALIMBU LETTER SSALIMBU LETTER SALIMBU LETTER" + + " HALIMBU LETTER GYANLIMBU LETTER TRALIMBU VOWEL SIGN ALIMBU VOWEL SIGN I" + + "LIMBU VOWEL SIGN ULIMBU VOWEL SIGN EELIMBU VOWEL SIGN AILIMBU VOWEL SIGN" + + " OOLIMBU VOWEL SIGN AULIMBU VOWEL SIGN ELIMBU VOWEL SIGN OLIMBU SUBJOINE" + + "D LETTER YALIMBU SUBJOINED LETTER RALIMBU SUBJOINED LETTER WALIMBU SMALL" + + " LETTER KALIMBU SMALL LETTER NGALIMBU SMALL LETTER ANUSVARALIMBU SMALL L" + + "ETTER TALIMBU SMALL LETTER NALIMBU SMALL LETTER PALIMBU SMALL LETTER MAL" + + "IMBU SMALL LETTER RALIMBU SMALL LETTER LALIMBU SIGN MUKPHRENGLIMBU SIGN " + + "KEMPHRENGLIMBU SIGN SA-ILIMBU SIGN LOOLIMBU EXCLAMATION MARKLIMBU QUESTI" + + "ON MARKLIMBU DIGIT ZEROLIMBU DIGIT ONELIMBU DIGIT TWOLIMBU DIGIT THREELI" + + "MBU DIGIT FOURLIMBU DIGIT FIVELIMBU DIGIT SIXLIMBU DIGIT SEVENLIMBU DIGI" + + "T EIGHTLIMBU DIGIT NINETAI LE LETTER KATAI LE LETTER XATAI LE LETTER NGA" + + "TAI LE LETTER TSATAI LE LETTER SATAI LE LETTER YATAI LE LETTER TATAI LE " + + "LETTER THATAI LE LETTER LATAI LE LETTER PATAI LE LETTER PHATAI LE LETTER" + + " MATAI LE LETTER FATAI LE LETTER VATAI LE LETTER HATAI LE LETTER QATAI L" + + "E LETTER KHATAI LE LETTER TSHATAI LE LETTER NATAI LE LETTER ATAI LE LETT" + + "ER ITAI LE LETTER EETAI LE LETTER EHTAI LE LETTER UTAI LE LETTER OOTAI L" + + "E LETTER OTAI LE LETTER UETAI LE LETTER ETAI LE LETTER AUETAI LE LETTER " + + "AITAI LE LETTER TONE-2TAI LE LETTER TONE-3TAI LE LETTER TONE-4TAI LE LET" + + "TER TONE-5TAI LE LETTER TONE-6NEW TAI LUE LETTER HIGH QANEW TAI LUE LETT" + + "ER LOW QANEW TAI LUE LETTER HIGH KANEW TAI LUE LETTER HIGH XANEW TAI LUE" + + " LETTER HIGH NGANEW TAI LUE LETTER LOW KANEW TAI LUE LETTER LOW XANEW TA" + + "I LUE LETTER LOW NGANEW TAI LUE LETTER HIGH TSANEW TAI LUE LETTER HIGH S" + + "ANEW TAI LUE LETTER HIGH YANEW TAI LUE LETTER LOW TSANEW TAI LUE LETTER " + + "LOW SANEW TAI LUE LETTER LOW YANEW TAI LUE LETTER HIGH TANEW TAI LUE LET" + + "TER HIGH THANEW TAI LUE LETTER HIGH NANEW TAI LUE LETTER LOW TANEW TAI L" + + "UE LETTER LOW THANEW TAI LUE LETTER LOW NANEW TAI LUE LETTER HIGH PANEW " + + "TAI LUE LETTER HIGH PHANEW TAI LUE LETTER HIGH MANEW TAI LUE LETTER LOW " + + "PANEW TAI LUE LETTER LOW PHANEW TAI LUE LETTER LOW MANEW TAI LUE LETTER " + + "HIGH FANEW TAI LUE LETTER HIGH VANEW TAI LUE LETTER HIGH LANEW TAI LUE L" + + "ETTER LOW FANEW TAI LUE LETTER LOW VANEW TAI LUE LETTER LOW LANEW TAI LU" + + "E LETTER HIGH HANEW TAI LUE LETTER HIGH DANEW TAI LUE LETTER HIGH BANEW " + + "TAI LUE LETTER LOW HANEW TAI LUE LETTER LOW DANEW TAI LUE LETTER LOW BAN" + + "EW TAI LUE LETTER HIGH KVANEW TAI LUE LETTER HIGH XVANEW TAI LUE LETTER " + + "LOW KVANEW TAI LUE LETTER LOW XVANEW TAI LUE LETTER HIGH SUANEW TAI LUE " + + "LETTER LOW SUANEW TAI LUE VOWEL SIGN VOWEL SHORTENERNEW TAI LUE VOWEL SI" + + "GN AANEW TAI LUE VOWEL SIGN IINEW TAI LUE VOWEL SIGN UNEW TAI LUE VOWEL " + + "SIGN UUNEW TAI LUE VOWEL SIGN ENEW TAI LUE VOWEL SIGN AENEW TAI LUE VOWE" + + "L SIGN ONEW TAI LUE VOWEL SIGN OANEW TAI LUE VOWEL SIGN UENEW TAI LUE VO" + + "WEL SIGN AYNEW TAI LUE VOWEL SIGN AAYNEW TAI LUE VOWEL SIGN UYNEW TAI LU" + + "E VOWEL SIGN OYNEW TAI LUE VOWEL SIGN OAYNEW TAI LUE VOWEL SIGN UEYNEW T" + + "AI LUE VOWEL SIGN IYNEW TAI LUE LETTER FINAL VNEW TAI LUE LETTER FINAL N" + + "GNEW TAI LUE LETTER FINAL NNEW TAI LUE LETTER FINAL MNEW TAI LUE LETTER " + + "FINAL KNEW TAI LUE LETTER FINAL DNEW TAI LUE LETTER FINAL BNEW TAI LUE T" + + "ONE MARK-1NEW TAI LUE TONE MARK-2NEW TAI LUE DIGIT ZERONEW TAI LUE DIGIT" + + " ONENEW TAI LUE DIGIT TWONEW TAI LUE DIGIT THREENEW TAI LUE DIGIT FOURNE" + + "W TAI LUE DIGIT FIVENEW TAI LUE DIGIT SIXNEW TAI LUE DIGIT SEVENNEW TAI " + + "LUE DIGIT EIGHTNEW TAI LUE DIGIT NINENEW TAI LUE THAM DIGIT ONENEW TAI L" + + "UE SIGN LAENEW TAI LUE SIGN LAEVKHMER SYMBOL PATHAMASATKHMER SYMBOL MUOY" + + " KOETKHMER SYMBOL PII KOETKHMER SYMBOL BEI KOETKHMER SYMBOL BUON KOETKHM" + + "ER SYMBOL PRAM KOETKHMER SYMBOL PRAM-MUOY KOETKHMER SYMBOL PRAM-PII KOET" + + "KHMER SYMBOL PRAM-BEI KOETKHMER SYMBOL PRAM-BUON KOETKHMER SYMBOL DAP KO" + + "ETKHMER SYMBOL DAP-MUOY KOETKHMER SYMBOL DAP-PII KOETKHMER SYMBOL DAP-BE" + + "I KOETKHMER SYMBOL DAP-BUON KOETKHMER SYMBOL DAP-PRAM KOETKHMER SYMBOL T" + + "UTEYASATKHMER SYMBOL MUOY ROCKHMER SYMBOL PII ROCKHMER SYMBOL BEI ROCKHM" + + "ER SYMBOL BUON ROCKHMER SYMBOL PRAM ROCKHMER SYMBOL PRAM-MUOY ROCKHMER S" + + "YMBOL PRAM-PII ROCKHMER SYMBOL PRAM-BEI ROCKHMER SYMBOL PRAM-BUON ROCKHM" + + "ER SYMBOL DAP ROCKHMER SYMBOL DAP-MUOY ROCKHMER SYMBOL DAP-PII ROCKHMER ") + ("" + + "SYMBOL DAP-BEI ROCKHMER SYMBOL DAP-BUON ROCKHMER SYMBOL DAP-PRAM ROCBUGI" + + "NESE LETTER KABUGINESE LETTER GABUGINESE LETTER NGABUGINESE LETTER NGKAB" + + "UGINESE LETTER PABUGINESE LETTER BABUGINESE LETTER MABUGINESE LETTER MPA" + + "BUGINESE LETTER TABUGINESE LETTER DABUGINESE LETTER NABUGINESE LETTER NR" + + "ABUGINESE LETTER CABUGINESE LETTER JABUGINESE LETTER NYABUGINESE LETTER " + + "NYCABUGINESE LETTER YABUGINESE LETTER RABUGINESE LETTER LABUGINESE LETTE" + + "R VABUGINESE LETTER SABUGINESE LETTER ABUGINESE LETTER HABUGINESE VOWEL " + + "SIGN IBUGINESE VOWEL SIGN UBUGINESE VOWEL SIGN EBUGINESE VOWEL SIGN OBUG" + + "INESE VOWEL SIGN AEBUGINESE PALLAWABUGINESE END OF SECTIONTAI THAM LETTE" + + "R HIGH KATAI THAM LETTER HIGH KHATAI THAM LETTER HIGH KXATAI THAM LETTER" + + " LOW KATAI THAM LETTER LOW KXATAI THAM LETTER LOW KHATAI THAM LETTER NGA" + + "TAI THAM LETTER HIGH CATAI THAM LETTER HIGH CHATAI THAM LETTER LOW CATAI" + + " THAM LETTER LOW SATAI THAM LETTER LOW CHATAI THAM LETTER NYATAI THAM LE" + + "TTER RATATAI THAM LETTER HIGH RATHATAI THAM LETTER DATAI THAM LETTER LOW" + + " RATHATAI THAM LETTER RANATAI THAM LETTER HIGH TATAI THAM LETTER HIGH TH" + + "ATAI THAM LETTER LOW TATAI THAM LETTER LOW THATAI THAM LETTER NATAI THAM" + + " LETTER BATAI THAM LETTER HIGH PATAI THAM LETTER HIGH PHATAI THAM LETTER" + + " HIGH FATAI THAM LETTER LOW PATAI THAM LETTER LOW FATAI THAM LETTER LOW " + + "PHATAI THAM LETTER MATAI THAM LETTER LOW YATAI THAM LETTER HIGH YATAI TH" + + "AM LETTER RATAI THAM LETTER RUETAI THAM LETTER LATAI THAM LETTER LUETAI " + + "THAM LETTER WATAI THAM LETTER HIGH SHATAI THAM LETTER HIGH SSATAI THAM L" + + "ETTER HIGH SATAI THAM LETTER HIGH HATAI THAM LETTER LLATAI THAM LETTER A" + + "TAI THAM LETTER LOW HATAI THAM LETTER ITAI THAM LETTER IITAI THAM LETTER" + + " UTAI THAM LETTER UUTAI THAM LETTER EETAI THAM LETTER OOTAI THAM LETTER " + + "LAETAI THAM LETTER GREAT SATAI THAM CONSONANT SIGN MEDIAL RATAI THAM CON" + + "SONANT SIGN MEDIAL LATAI THAM CONSONANT SIGN LA TANG LAITAI THAM SIGN MA" + + "I KANG LAITAI THAM CONSONANT SIGN FINAL NGATAI THAM CONSONANT SIGN LOW P" + + "ATAI THAM CONSONANT SIGN HIGH RATHA OR LOW PATAI THAM CONSONANT SIGN MAT" + + "AI THAM CONSONANT SIGN BATAI THAM CONSONANT SIGN SATAI THAM SIGN SAKOTTA" + + "I THAM VOWEL SIGN ATAI THAM VOWEL SIGN MAI SATTAI THAM VOWEL SIGN AATAI " + + "THAM VOWEL SIGN TALL AATAI THAM VOWEL SIGN ITAI THAM VOWEL SIGN IITAI TH" + + "AM VOWEL SIGN UETAI THAM VOWEL SIGN UUETAI THAM VOWEL SIGN UTAI THAM VOW" + + "EL SIGN UUTAI THAM VOWEL SIGN OTAI THAM VOWEL SIGN OA BELOWTAI THAM VOWE" + + "L SIGN OYTAI THAM VOWEL SIGN ETAI THAM VOWEL SIGN AETAI THAM VOWEL SIGN " + + "OOTAI THAM VOWEL SIGN AITAI THAM VOWEL SIGN THAM AITAI THAM VOWEL SIGN O" + + "A ABOVETAI THAM SIGN MAI KANGTAI THAM SIGN TONE-1TAI THAM SIGN TONE-2TAI" + + " THAM SIGN KHUEN TONE-3TAI THAM SIGN KHUEN TONE-4TAI THAM SIGN KHUEN TON" + + "E-5TAI THAM SIGN RA HAAMTAI THAM SIGN MAI SAMTAI THAM SIGN KHUEN-LUE KAR" + + "ANTAI THAM COMBINING CRYPTOGRAMMIC DOTTAI THAM HORA DIGIT ZEROTAI THAM H" + + "ORA DIGIT ONETAI THAM HORA DIGIT TWOTAI THAM HORA DIGIT THREETAI THAM HO" + + "RA DIGIT FOURTAI THAM HORA DIGIT FIVETAI THAM HORA DIGIT SIXTAI THAM HOR" + + "A DIGIT SEVENTAI THAM HORA DIGIT EIGHTTAI THAM HORA DIGIT NINETAI THAM T" + + "HAM DIGIT ZEROTAI THAM THAM DIGIT ONETAI THAM THAM DIGIT TWOTAI THAM THA" + + "M DIGIT THREETAI THAM THAM DIGIT FOURTAI THAM THAM DIGIT FIVETAI THAM TH" + + "AM DIGIT SIXTAI THAM THAM DIGIT SEVENTAI THAM THAM DIGIT EIGHTTAI THAM T" + + "HAM DIGIT NINETAI THAM SIGN WIANGTAI THAM SIGN WIANGWAAKTAI THAM SIGN SA" + + "WANTAI THAM SIGN KEOWTAI THAM SIGN HOYTAI THAM SIGN DOKMAITAI THAM SIGN " + + "REVERSED ROTATED RANATAI THAM SIGN MAI YAMOKTAI THAM SIGN KAANTAI THAM S" + + "IGN KAANKUUTAI THAM SIGN SATKAANTAI THAM SIGN SATKAANKUUTAI THAM SIGN HA" + + "NGTAI THAM SIGN CAANGCOMBINING DOUBLED CIRCUMFLEX ACCENTCOMBINING DIAERE" + + "SIS-RINGCOMBINING INFINITYCOMBINING DOWNWARDS ARROWCOMBINING TRIPLE DOTC" + + "OMBINING X-X BELOWCOMBINING WIGGLY LINE BELOWCOMBINING OPEN MARK BELOWCO" + + "MBINING DOUBLE OPEN MARK BELOWCOMBINING LIGHT CENTRALIZATION STROKE BELO" + + "WCOMBINING STRONG CENTRALIZATION STROKE BELOWCOMBINING PARENTHESES ABOVE" + + "COMBINING DOUBLE PARENTHESES ABOVECOMBINING PARENTHESES BELOWCOMBINING P" + + "ARENTHESES OVERLAYBALINESE SIGN ULU RICEMBALINESE SIGN ULU CANDRABALINES" + + "E SIGN CECEKBALINESE SIGN SURANGBALINESE SIGN BISAHBALINESE LETTER AKARA" + + "BALINESE LETTER AKARA TEDUNGBALINESE LETTER IKARABALINESE LETTER IKARA T" + + "EDUNGBALINESE LETTER UKARABALINESE LETTER UKARA TEDUNGBALINESE LETTER RA" + + " REPABALINESE LETTER RA REPA TEDUNGBALINESE LETTER LA LENGABALINESE LETT" + + "ER LA LENGA TEDUNGBALINESE LETTER EKARABALINESE LETTER AIKARABALINESE LE" + + "TTER OKARABALINESE LETTER OKARA TEDUNGBALINESE LETTER KABALINESE LETTER " + + "KA MAHAPRANABALINESE LETTER GABALINESE LETTER GA GORABALINESE LETTER NGA" + + "BALINESE LETTER CABALINESE LETTER CA LACABALINESE LETTER JABALINESE LETT") + ("" + + "ER JA JERABALINESE LETTER NYABALINESE LETTER TA LATIKBALINESE LETTER TA " + + "MURDA MAHAPRANABALINESE LETTER DA MURDA ALPAPRANABALINESE LETTER DA MURD" + + "A MAHAPRANABALINESE LETTER NA RAMBATBALINESE LETTER TABALINESE LETTER TA" + + " TAWABALINESE LETTER DABALINESE LETTER DA MADUBALINESE LETTER NABALINESE" + + " LETTER PABALINESE LETTER PA KAPALBALINESE LETTER BABALINESE LETTER BA K" + + "EMBANGBALINESE LETTER MABALINESE LETTER YABALINESE LETTER RABALINESE LET" + + "TER LABALINESE LETTER WABALINESE LETTER SA SAGABALINESE LETTER SA SAPABA" + + "LINESE LETTER SABALINESE LETTER HABALINESE SIGN REREKANBALINESE VOWEL SI" + + "GN TEDUNGBALINESE VOWEL SIGN ULUBALINESE VOWEL SIGN ULU SARIBALINESE VOW" + + "EL SIGN SUKUBALINESE VOWEL SIGN SUKU ILUTBALINESE VOWEL SIGN RA REPABALI" + + "NESE VOWEL SIGN RA REPA TEDUNGBALINESE VOWEL SIGN LA LENGABALINESE VOWEL" + + " SIGN LA LENGA TEDUNGBALINESE VOWEL SIGN TALINGBALINESE VOWEL SIGN TALIN" + + "G REPABALINESE VOWEL SIGN TALING TEDUNGBALINESE VOWEL SIGN TALING REPA T" + + "EDUNGBALINESE VOWEL SIGN PEPETBALINESE VOWEL SIGN PEPET TEDUNGBALINESE A" + + "DEG ADEGBALINESE LETTER KAF SASAKBALINESE LETTER KHOT SASAKBALINESE LETT" + + "ER TZIR SASAKBALINESE LETTER EF SASAKBALINESE LETTER VE SASAKBALINESE LE" + + "TTER ZAL SASAKBALINESE LETTER ASYURA SASAKBALINESE DIGIT ZEROBALINESE DI" + + "GIT ONEBALINESE DIGIT TWOBALINESE DIGIT THREEBALINESE DIGIT FOURBALINESE" + + " DIGIT FIVEBALINESE DIGIT SIXBALINESE DIGIT SEVENBALINESE DIGIT EIGHTBAL" + + "INESE DIGIT NINEBALINESE PANTIBALINESE PAMADABALINESE WINDUBALINESE CARI" + + "K PAMUNGKAHBALINESE CARIK SIKIBALINESE CARIK PARERENBALINESE PAMENENGBAL" + + "INESE MUSICAL SYMBOL DONGBALINESE MUSICAL SYMBOL DENGBALINESE MUSICAL SY" + + "MBOL DUNGBALINESE MUSICAL SYMBOL DANGBALINESE MUSICAL SYMBOL DANG SURANG" + + "BALINESE MUSICAL SYMBOL DINGBALINESE MUSICAL SYMBOL DAENGBALINESE MUSICA" + + "L SYMBOL DEUNGBALINESE MUSICAL SYMBOL DAINGBALINESE MUSICAL SYMBOL DANG " + + "GEDEBALINESE MUSICAL SYMBOL COMBINING TEGEHBALINESE MUSICAL SYMBOL COMBI" + + "NING ENDEPBALINESE MUSICAL SYMBOL COMBINING KEMPULBALINESE MUSICAL SYMBO" + + "L COMBINING KEMPLIBALINESE MUSICAL SYMBOL COMBINING JEGOGANBALINESE MUSI" + + "CAL SYMBOL COMBINING KEMPUL WITH JEGOGANBALINESE MUSICAL SYMBOL COMBININ" + + "G KEMPLI WITH JEGOGANBALINESE MUSICAL SYMBOL COMBINING BENDEBALINESE MUS" + + "ICAL SYMBOL COMBINING GONGBALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUGBAL" + + "INESE MUSICAL SYMBOL RIGHT-HAND OPEN DAGBALINESE MUSICAL SYMBOL RIGHT-HA" + + "ND CLOSED TUKBALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TAKBALINESE MUSIC" + + "AL SYMBOL LEFT-HAND OPEN PANGBALINESE MUSICAL SYMBOL LEFT-HAND OPEN PUNG" + + "BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAKBALINESE MUSICAL SYMBOL LEF" + + "T-HAND CLOSED PLUKBALINESE MUSICAL SYMBOL LEFT-HAND OPEN PINGSUNDANESE S" + + "IGN PANYECEKSUNDANESE SIGN PANGLAYARSUNDANESE SIGN PANGWISADSUNDANESE LE" + + "TTER ASUNDANESE LETTER ISUNDANESE LETTER USUNDANESE LETTER AESUNDANESE L" + + "ETTER OSUNDANESE LETTER ESUNDANESE LETTER EUSUNDANESE LETTER KASUNDANESE" + + " LETTER QASUNDANESE LETTER GASUNDANESE LETTER NGASUNDANESE LETTER CASUND" + + "ANESE LETTER JASUNDANESE LETTER ZASUNDANESE LETTER NYASUNDANESE LETTER T" + + "ASUNDANESE LETTER DASUNDANESE LETTER NASUNDANESE LETTER PASUNDANESE LETT" + + "ER FASUNDANESE LETTER VASUNDANESE LETTER BASUNDANESE LETTER MASUNDANESE " + + "LETTER YASUNDANESE LETTER RASUNDANESE LETTER LASUNDANESE LETTER WASUNDAN" + + "ESE LETTER SASUNDANESE LETTER XASUNDANESE LETTER HASUNDANESE CONSONANT S" + + "IGN PAMINGKALSUNDANESE CONSONANT SIGN PANYAKRASUNDANESE CONSONANT SIGN P" + + "ANYIKUSUNDANESE VOWEL SIGN PANGHULUSUNDANESE VOWEL SIGN PANYUKUSUNDANESE" + + " VOWEL SIGN PANAELAENGSUNDANESE VOWEL SIGN PANOLONGSUNDANESE VOWEL SIGN " + + "PAMEPETSUNDANESE VOWEL SIGN PANEULEUNGSUNDANESE SIGN PAMAAEHSUNDANESE SI" + + "GN VIRAMASUNDANESE CONSONANT SIGN PASANGAN MASUNDANESE CONSONANT SIGN PA" + + "SANGAN WASUNDANESE LETTER KHASUNDANESE LETTER SYASUNDANESE DIGIT ZEROSUN" + + "DANESE DIGIT ONESUNDANESE DIGIT TWOSUNDANESE DIGIT THREESUNDANESE DIGIT " + + "FOURSUNDANESE DIGIT FIVESUNDANESE DIGIT SIXSUNDANESE DIGIT SEVENSUNDANES" + + "E DIGIT EIGHTSUNDANESE DIGIT NINESUNDANESE AVAGRAHASUNDANESE LETTER REUS" + + "UNDANESE LETTER LEUSUNDANESE LETTER BHASUNDANESE LETTER FINAL KSUNDANESE" + + " LETTER FINAL MBATAK LETTER ABATAK LETTER SIMALUNGUN ABATAK LETTER HABAT" + + "AK LETTER SIMALUNGUN HABATAK LETTER MANDAILING HABATAK LETTER BABATAK LE" + + "TTER KARO BABATAK LETTER PABATAK LETTER SIMALUNGUN PABATAK LETTER NABATA" + + "K LETTER MANDAILING NABATAK LETTER WABATAK LETTER SIMALUNGUN WABATAK LET" + + "TER PAKPAK WABATAK LETTER GABATAK LETTER SIMALUNGUN GABATAK LETTER JABAT" + + "AK LETTER DABATAK LETTER RABATAK LETTER SIMALUNGUN RABATAK LETTER MABATA" + + "K LETTER SIMALUNGUN MABATAK LETTER SOUTHERN TABATAK LETTER NORTHERN TABA" + + "TAK LETTER SABATAK LETTER SIMALUNGUN SABATAK LETTER MANDAILING SABATAK L" + + "ETTER YABATAK LETTER SIMALUNGUN YABATAK LETTER NGABATAK LETTER LABATAK L") + ("" + + "ETTER SIMALUNGUN LABATAK LETTER NYABATAK LETTER CABATAK LETTER NDABATAK " + + "LETTER MBABATAK LETTER IBATAK LETTER UBATAK SIGN TOMPIBATAK VOWEL SIGN E" + + "BATAK VOWEL SIGN PAKPAK EBATAK VOWEL SIGN EEBATAK VOWEL SIGN IBATAK VOWE" + + "L SIGN KARO IBATAK VOWEL SIGN OBATAK VOWEL SIGN KARO OBATAK VOWEL SIGN U" + + "BATAK VOWEL SIGN U FOR SIMALUNGUN SABATAK CONSONANT SIGN NGBATAK CONSONA" + + "NT SIGN HBATAK PANGOLATBATAK PANONGONANBATAK SYMBOL BINDU NA METEKBATAK " + + "SYMBOL BINDU PINARBORASBATAK SYMBOL BINDU JUDULBATAK SYMBOL BINDU PANGOL" + + "ATLEPCHA LETTER KALEPCHA LETTER KLALEPCHA LETTER KHALEPCHA LETTER GALEPC" + + "HA LETTER GLALEPCHA LETTER NGALEPCHA LETTER CALEPCHA LETTER CHALEPCHA LE" + + "TTER JALEPCHA LETTER NYALEPCHA LETTER TALEPCHA LETTER THALEPCHA LETTER D" + + "ALEPCHA LETTER NALEPCHA LETTER PALEPCHA LETTER PLALEPCHA LETTER PHALEPCH" + + "A LETTER FALEPCHA LETTER FLALEPCHA LETTER BALEPCHA LETTER BLALEPCHA LETT" + + "ER MALEPCHA LETTER MLALEPCHA LETTER TSALEPCHA LETTER TSHALEPCHA LETTER D" + + "ZALEPCHA LETTER YALEPCHA LETTER RALEPCHA LETTER LALEPCHA LETTER HALEPCHA" + + " LETTER HLALEPCHA LETTER VALEPCHA LETTER SALEPCHA LETTER SHALEPCHA LETTE" + + "R WALEPCHA LETTER ALEPCHA SUBJOINED LETTER YALEPCHA SUBJOINED LETTER RAL" + + "EPCHA VOWEL SIGN AALEPCHA VOWEL SIGN ILEPCHA VOWEL SIGN OLEPCHA VOWEL SI" + + "GN OOLEPCHA VOWEL SIGN ULEPCHA VOWEL SIGN UULEPCHA VOWEL SIGN ELEPCHA CO" + + "NSONANT SIGN KLEPCHA CONSONANT SIGN MLEPCHA CONSONANT SIGN LLEPCHA CONSO" + + "NANT SIGN NLEPCHA CONSONANT SIGN PLEPCHA CONSONANT SIGN RLEPCHA CONSONAN" + + "T SIGN TLEPCHA CONSONANT SIGN NYIN-DOLEPCHA CONSONANT SIGN KANGLEPCHA SI" + + "GN RANLEPCHA SIGN NUKTALEPCHA PUNCTUATION TA-ROLLEPCHA PUNCTUATION NYET " + + "THYOOM TA-ROLLEPCHA PUNCTUATION CER-WALEPCHA PUNCTUATION TSHOOK CER-WALE" + + "PCHA PUNCTUATION TSHOOKLEPCHA DIGIT ZEROLEPCHA DIGIT ONELEPCHA DIGIT TWO" + + "LEPCHA DIGIT THREELEPCHA DIGIT FOURLEPCHA DIGIT FIVELEPCHA DIGIT SIXLEPC" + + "HA DIGIT SEVENLEPCHA DIGIT EIGHTLEPCHA DIGIT NINELEPCHA LETTER TTALEPCHA" + + " LETTER TTHALEPCHA LETTER DDAOL CHIKI DIGIT ZEROOL CHIKI DIGIT ONEOL CHI" + + "KI DIGIT TWOOL CHIKI DIGIT THREEOL CHIKI DIGIT FOUROL CHIKI DIGIT FIVEOL" + + " CHIKI DIGIT SIXOL CHIKI DIGIT SEVENOL CHIKI DIGIT EIGHTOL CHIKI DIGIT N" + + "INEOL CHIKI LETTER LAOL CHIKI LETTER ATOL CHIKI LETTER AGOL CHIKI LETTER" + + " ANGOL CHIKI LETTER ALOL CHIKI LETTER LAAOL CHIKI LETTER AAKOL CHIKI LET" + + "TER AAJOL CHIKI LETTER AAMOL CHIKI LETTER AAWOL CHIKI LETTER LIOL CHIKI " + + "LETTER ISOL CHIKI LETTER IHOL CHIKI LETTER INYOL CHIKI LETTER IROL CHIKI" + + " LETTER LUOL CHIKI LETTER UCOL CHIKI LETTER UDOL CHIKI LETTER UNNOL CHIK" + + "I LETTER UYOL CHIKI LETTER LEOL CHIKI LETTER EPOL CHIKI LETTER EDDOL CHI" + + "KI LETTER ENOL CHIKI LETTER ERROL CHIKI LETTER LOOL CHIKI LETTER OTTOL C" + + "HIKI LETTER OBOL CHIKI LETTER OVOL CHIKI LETTER OHOL CHIKI MU TTUDDAGOL " + + "CHIKI GAAHLAA TTUDDAAGOL CHIKI MU-GAAHLAA TTUDDAAGOL CHIKI RELAAOL CHIKI" + + " PHAARKAAOL CHIKI AHADOL CHIKI PUNCTUATION MUCAADOL CHIKI PUNCTUATION DO" + + "UBLE MUCAADCYRILLIC SMALL LETTER ROUNDED VECYRILLIC SMALL LETTER LONG-LE" + + "GGED DECYRILLIC SMALL LETTER NARROW OCYRILLIC SMALL LETTER WIDE ESCYRILL" + + "IC SMALL LETTER TALL TECYRILLIC SMALL LETTER THREE-LEGGED TECYRILLIC SMA" + + "LL LETTER TALL HARD SIGNCYRILLIC SMALL LETTER TALL YATCYRILLIC SMALL LET" + + "TER UNBLENDED UKSUNDANESE PUNCTUATION BINDU SURYASUNDANESE PUNCTUATION B" + + "INDU PANGLONGSUNDANESE PUNCTUATION BINDU PURNAMASUNDANESE PUNCTUATION BI" + + "NDU CAKRASUNDANESE PUNCTUATION BINDU LEU SATANGASUNDANESE PUNCTUATION BI" + + "NDU KA SATANGASUNDANESE PUNCTUATION BINDU DA SATANGASUNDANESE PUNCTUATIO" + + "N BINDU BA SATANGAVEDIC TONE KARSHANAVEDIC TONE SHARAVEDIC TONE PRENKHAV" + + "EDIC SIGN NIHSHVASAVEDIC SIGN YAJURVEDIC MIDLINE SVARITAVEDIC TONE YAJUR" + + "VEDIC AGGRAVATED INDEPENDENT SVARITAVEDIC TONE YAJURVEDIC INDEPENDENT SV" + + "ARITAVEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITAVEDIC TONE CANDRA " + + "BELOWVEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDERVEDIC TO" + + "NE DOUBLE SVARITAVEDIC TONE TRIPLE SVARITAVEDIC TONE KATHAKA ANUDATTAVED" + + "IC TONE DOT BELOWVEDIC TONE TWO DOTS BELOWVEDIC TONE THREE DOTS BELOWVED" + + "IC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITAVEDIC TONE ATHARVAVEDIC IND" + + "EPENDENT SVARITAVEDIC SIGN VISARGA SVARITAVEDIC SIGN VISARGA UDATTAVEDIC" + + " SIGN REVERSED VISARGA UDATTAVEDIC SIGN VISARGA ANUDATTAVEDIC SIGN REVER" + + "SED VISARGA ANUDATTAVEDIC SIGN VISARGA UDATTA WITH TAILVEDIC SIGN VISARG" + + "A ANUDATTA WITH TAILVEDIC SIGN ANUSVARA ANTARGOMUKHAVEDIC SIGN ANUSVARA " + + "BAHIRGOMUKHAVEDIC SIGN ANUSVARA VAMAGOMUKHAVEDIC SIGN ANUSVARA VAMAGOMUK" + + "HA WITH TAILVEDIC SIGN TIRYAKVEDIC SIGN HEXIFORM LONG ANUSVARAVEDIC SIGN" + + " LONG ANUSVARAVEDIC SIGN RTHANG LONG ANUSVARAVEDIC SIGN ANUSVARA UBHAYAT" + + "O MUKHAVEDIC SIGN ARDHAVISARGAVEDIC SIGN ROTATED ARDHAVISARGAVEDIC TONE " + + "CANDRA ABOVEVEDIC SIGN JIHVAMULIYAVEDIC SIGN UPADHMANIYAVEDIC TONE RING ") + ("" + + "ABOVEVEDIC TONE DOUBLE RING ABOVELATIN LETTER SMALL CAPITAL ALATIN LETTE" + + "R SMALL CAPITAL AELATIN SMALL LETTER TURNED AELATIN LETTER SMALL CAPITAL" + + " BARRED BLATIN LETTER SMALL CAPITAL CLATIN LETTER SMALL CAPITAL DLATIN L" + + "ETTER SMALL CAPITAL ETHLATIN LETTER SMALL CAPITAL ELATIN SMALL LETTER TU" + + "RNED OPEN ELATIN SMALL LETTER TURNED ILATIN LETTER SMALL CAPITAL JLATIN " + + "LETTER SMALL CAPITAL KLATIN LETTER SMALL CAPITAL L WITH STROKELATIN LETT" + + "ER SMALL CAPITAL MLATIN LETTER SMALL CAPITAL REVERSED NLATIN LETTER SMAL" + + "L CAPITAL OLATIN LETTER SMALL CAPITAL OPEN OLATIN SMALL LETTER SIDEWAYS " + + "OLATIN SMALL LETTER SIDEWAYS OPEN OLATIN SMALL LETTER SIDEWAYS O WITH ST" + + "ROKELATIN SMALL LETTER TURNED OELATIN LETTER SMALL CAPITAL OULATIN SMALL" + + " LETTER TOP HALF OLATIN SMALL LETTER BOTTOM HALF OLATIN LETTER SMALL CAP" + + "ITAL PLATIN LETTER SMALL CAPITAL REVERSED RLATIN LETTER SMALL CAPITAL TU" + + "RNED RLATIN LETTER SMALL CAPITAL TLATIN LETTER SMALL CAPITAL ULATIN SMAL" + + "L LETTER SIDEWAYS ULATIN SMALL LETTER SIDEWAYS DIAERESIZED ULATIN SMALL " + + "LETTER SIDEWAYS TURNED MLATIN LETTER SMALL CAPITAL VLATIN LETTER SMALL C" + + "APITAL WLATIN LETTER SMALL CAPITAL ZLATIN LETTER SMALL CAPITAL EZHLATIN " + + "LETTER VOICED LARYNGEAL SPIRANTLATIN LETTER AINGREEK LETTER SMALL CAPITA" + + "L GAMMAGREEK LETTER SMALL CAPITAL LAMDAGREEK LETTER SMALL CAPITAL PIGREE" + + "K LETTER SMALL CAPITAL RHOGREEK LETTER SMALL CAPITAL PSICYRILLIC LETTER " + + "SMALL CAPITAL ELMODIFIER LETTER CAPITAL AMODIFIER LETTER CAPITAL AEMODIF" + + "IER LETTER CAPITAL BMODIFIER LETTER CAPITAL BARRED BMODIFIER LETTER CAPI" + + "TAL DMODIFIER LETTER CAPITAL EMODIFIER LETTER CAPITAL REVERSED EMODIFIER" + + " LETTER CAPITAL GMODIFIER LETTER CAPITAL HMODIFIER LETTER CAPITAL IMODIF" + + "IER LETTER CAPITAL JMODIFIER LETTER CAPITAL KMODIFIER LETTER CAPITAL LMO" + + "DIFIER LETTER CAPITAL MMODIFIER LETTER CAPITAL NMODIFIER LETTER CAPITAL " + + "REVERSED NMODIFIER LETTER CAPITAL OMODIFIER LETTER CAPITAL OUMODIFIER LE" + + "TTER CAPITAL PMODIFIER LETTER CAPITAL RMODIFIER LETTER CAPITAL TMODIFIER" + + " LETTER CAPITAL UMODIFIER LETTER CAPITAL WMODIFIER LETTER SMALL AMODIFIE" + + "R LETTER SMALL TURNED AMODIFIER LETTER SMALL ALPHAMODIFIER LETTER SMALL " + + "TURNED AEMODIFIER LETTER SMALL BMODIFIER LETTER SMALL DMODIFIER LETTER S" + + "MALL EMODIFIER LETTER SMALL SCHWAMODIFIER LETTER SMALL OPEN EMODIFIER LE" + + "TTER SMALL TURNED OPEN EMODIFIER LETTER SMALL GMODIFIER LETTER SMALL TUR" + + "NED IMODIFIER LETTER SMALL KMODIFIER LETTER SMALL MMODIFIER LETTER SMALL" + + " ENGMODIFIER LETTER SMALL OMODIFIER LETTER SMALL OPEN OMODIFIER LETTER S" + + "MALL TOP HALF OMODIFIER LETTER SMALL BOTTOM HALF OMODIFIER LETTER SMALL " + + "PMODIFIER LETTER SMALL TMODIFIER LETTER SMALL UMODIFIER LETTER SMALL SID" + + "EWAYS UMODIFIER LETTER SMALL TURNED MMODIFIER LETTER SMALL VMODIFIER LET" + + "TER SMALL AINMODIFIER LETTER SMALL BETAMODIFIER LETTER SMALL GREEK GAMMA" + + "MODIFIER LETTER SMALL DELTAMODIFIER LETTER SMALL GREEK PHIMODIFIER LETTE" + + "R SMALL CHILATIN SUBSCRIPT SMALL LETTER ILATIN SUBSCRIPT SMALL LETTER RL" + + "ATIN SUBSCRIPT SMALL LETTER ULATIN SUBSCRIPT SMALL LETTER VGREEK SUBSCRI" + + "PT SMALL LETTER BETAGREEK SUBSCRIPT SMALL LETTER GAMMAGREEK SUBSCRIPT SM" + + "ALL LETTER RHOGREEK SUBSCRIPT SMALL LETTER PHIGREEK SUBSCRIPT SMALL LETT" + + "ER CHILATIN SMALL LETTER UELATIN SMALL LETTER B WITH MIDDLE TILDELATIN S" + + "MALL LETTER D WITH MIDDLE TILDELATIN SMALL LETTER F WITH MIDDLE TILDELAT" + + "IN SMALL LETTER M WITH MIDDLE TILDELATIN SMALL LETTER N WITH MIDDLE TILD" + + "ELATIN SMALL LETTER P WITH MIDDLE TILDELATIN SMALL LETTER R WITH MIDDLE " + + "TILDELATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDELATIN SMALL LETT" + + "ER S WITH MIDDLE TILDELATIN SMALL LETTER T WITH MIDDLE TILDELATIN SMALL " + + "LETTER Z WITH MIDDLE TILDELATIN SMALL LETTER TURNED GMODIFIER LETTER CYR" + + "ILLIC ENLATIN SMALL LETTER INSULAR GLATIN SMALL LETTER TH WITH STRIKETHR" + + "OUGHLATIN SMALL CAPITAL LETTER I WITH STROKELATIN SMALL LETTER IOTA WITH" + + " STROKELATIN SMALL LETTER P WITH STROKELATIN SMALL CAPITAL LETTER U WITH" + + " STROKELATIN SMALL LETTER UPSILON WITH STROKELATIN SMALL LETTER B WITH P" + + "ALATAL HOOKLATIN SMALL LETTER D WITH PALATAL HOOKLATIN SMALL LETTER F WI" + + "TH PALATAL HOOKLATIN SMALL LETTER G WITH PALATAL HOOKLATIN SMALL LETTER " + + "K WITH PALATAL HOOKLATIN SMALL LETTER L WITH PALATAL HOOKLATIN SMALL LET" + + "TER M WITH PALATAL HOOKLATIN SMALL LETTER N WITH PALATAL HOOKLATIN SMALL" + + " LETTER P WITH PALATAL HOOKLATIN SMALL LETTER R WITH PALATAL HOOKLATIN S" + + "MALL LETTER S WITH PALATAL HOOKLATIN SMALL LETTER ESH WITH PALATAL HOOKL" + + "ATIN SMALL LETTER V WITH PALATAL HOOKLATIN SMALL LETTER X WITH PALATAL H" + + "OOKLATIN SMALL LETTER Z WITH PALATAL HOOKLATIN SMALL LETTER A WITH RETRO" + + "FLEX HOOKLATIN SMALL LETTER ALPHA WITH RETROFLEX HOOKLATIN SMALL LETTER " + + "D WITH HOOK AND TAILLATIN SMALL LETTER E WITH RETROFLEX HOOKLATIN SMALL ") + ("" + + "LETTER OPEN E WITH RETROFLEX HOOKLATIN SMALL LETTER REVERSED OPEN E WITH" + + " RETROFLEX HOOKLATIN SMALL LETTER SCHWA WITH RETROFLEX HOOKLATIN SMALL L" + + "ETTER I WITH RETROFLEX HOOKLATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK" + + "LATIN SMALL LETTER ESH WITH RETROFLEX HOOKLATIN SMALL LETTER U WITH RETR" + + "OFLEX HOOKLATIN SMALL LETTER EZH WITH RETROFLEX HOOKMODIFIER LETTER SMAL" + + "L TURNED ALPHAMODIFIER LETTER SMALL CMODIFIER LETTER SMALL C WITH CURLMO" + + "DIFIER LETTER SMALL ETHMODIFIER LETTER SMALL REVERSED OPEN EMODIFIER LET" + + "TER SMALL FMODIFIER LETTER SMALL DOTLESS J WITH STROKEMODIFIER LETTER SM" + + "ALL SCRIPT GMODIFIER LETTER SMALL TURNED HMODIFIER LETTER SMALL I WITH S" + + "TROKEMODIFIER LETTER SMALL IOTAMODIFIER LETTER SMALL CAPITAL IMODIFIER L" + + "ETTER SMALL CAPITAL I WITH STROKEMODIFIER LETTER SMALL J WITH CROSSED-TA" + + "ILMODIFIER LETTER SMALL L WITH RETROFLEX HOOKMODIFIER LETTER SMALL L WIT" + + "H PALATAL HOOKMODIFIER LETTER SMALL CAPITAL LMODIFIER LETTER SMALL M WIT" + + "H HOOKMODIFIER LETTER SMALL TURNED M WITH LONG LEGMODIFIER LETTER SMALL " + + "N WITH LEFT HOOKMODIFIER LETTER SMALL N WITH RETROFLEX HOOKMODIFIER LETT" + + "ER SMALL CAPITAL NMODIFIER LETTER SMALL BARRED OMODIFIER LETTER SMALL PH" + + "IMODIFIER LETTER SMALL S WITH HOOKMODIFIER LETTER SMALL ESHMODIFIER LETT" + + "ER SMALL T WITH PALATAL HOOKMODIFIER LETTER SMALL U BARMODIFIER LETTER S" + + "MALL UPSILONMODIFIER LETTER SMALL CAPITAL UMODIFIER LETTER SMALL V WITH " + + "HOOKMODIFIER LETTER SMALL TURNED VMODIFIER LETTER SMALL ZMODIFIER LETTER" + + " SMALL Z WITH RETROFLEX HOOKMODIFIER LETTER SMALL Z WITH CURLMODIFIER LE" + + "TTER SMALL EZHMODIFIER LETTER SMALL THETACOMBINING DOTTED GRAVE ACCENTCO" + + "MBINING DOTTED ACUTE ACCENTCOMBINING SNAKE BELOWCOMBINING SUSPENSION MAR" + + "KCOMBINING MACRON-ACUTECOMBINING GRAVE-MACRONCOMBINING MACRON-GRAVECOMBI" + + "NING ACUTE-MACRONCOMBINING GRAVE-ACUTE-GRAVECOMBINING ACUTE-GRAVE-ACUTEC" + + "OMBINING LATIN SMALL LETTER R BELOWCOMBINING BREVE-MACRONCOMBINING MACRO" + + "N-BREVECOMBINING DOUBLE CIRCUMFLEX ABOVECOMBINING OGONEK ABOVECOMBINING " + + "ZIGZAG BELOWCOMBINING IS BELOWCOMBINING UR ABOVECOMBINING US ABOVECOMBIN" + + "ING LATIN SMALL LETTER FLATTENED OPEN A ABOVECOMBINING LATIN SMALL LETTE" + + "R AECOMBINING LATIN SMALL LETTER AOCOMBINING LATIN SMALL LETTER AVCOMBIN" + + "ING LATIN SMALL LETTER C CEDILLACOMBINING LATIN SMALL LETTER INSULAR DCO" + + "MBINING LATIN SMALL LETTER ETHCOMBINING LATIN SMALL LETTER GCOMBINING LA" + + "TIN LETTER SMALL CAPITAL GCOMBINING LATIN SMALL LETTER KCOMBINING LATIN " + + "SMALL LETTER LCOMBINING LATIN LETTER SMALL CAPITAL LCOMBINING LATIN LETT" + + "ER SMALL CAPITAL MCOMBINING LATIN SMALL LETTER NCOMBINING LATIN LETTER S" + + "MALL CAPITAL NCOMBINING LATIN LETTER SMALL CAPITAL RCOMBINING LATIN SMAL" + + "L LETTER R ROTUNDACOMBINING LATIN SMALL LETTER SCOMBINING LATIN SMALL LE" + + "TTER LONG SCOMBINING LATIN SMALL LETTER ZCOMBINING LATIN SMALL LETTER AL" + + "PHACOMBINING LATIN SMALL LETTER BCOMBINING LATIN SMALL LETTER BETACOMBIN" + + "ING LATIN SMALL LETTER SCHWACOMBINING LATIN SMALL LETTER FCOMBINING LATI" + + "N SMALL LETTER L WITH DOUBLE MIDDLE TILDECOMBINING LATIN SMALL LETTER O " + + "WITH LIGHT CENTRALIZATION STROKECOMBINING LATIN SMALL LETTER PCOMBINING " + + "LATIN SMALL LETTER ESHCOMBINING LATIN SMALL LETTER U WITH LIGHT CENTRALI" + + "ZATION STROKECOMBINING LATIN SMALL LETTER WCOMBINING LATIN SMALL LETTER " + + "A WITH DIAERESISCOMBINING LATIN SMALL LETTER O WITH DIAERESISCOMBINING L" + + "ATIN SMALL LETTER U WITH DIAERESISCOMBINING UP TACK ABOVECOMBINING DELET" + + "ION MARKCOMBINING DOUBLE INVERTED BREVE BELOWCOMBINING ALMOST EQUAL TO B" + + "ELOWCOMBINING LEFT ARROWHEAD ABOVECOMBINING RIGHT ARROWHEAD AND DOWN ARR" + + "OWHEAD BELOWLATIN CAPITAL LETTER A WITH RING BELOWLATIN SMALL LETTER A W" + + "ITH RING BELOWLATIN CAPITAL LETTER B WITH DOT ABOVELATIN SMALL LETTER B " + + "WITH DOT ABOVELATIN CAPITAL LETTER B WITH DOT BELOWLATIN SMALL LETTER B " + + "WITH DOT BELOWLATIN CAPITAL LETTER B WITH LINE BELOWLATIN SMALL LETTER B" + + " WITH LINE BELOWLATIN CAPITAL LETTER C WITH CEDILLA AND ACUTELATIN SMALL" + + " LETTER C WITH CEDILLA AND ACUTELATIN CAPITAL LETTER D WITH DOT ABOVELAT" + + "IN SMALL LETTER D WITH DOT ABOVELATIN CAPITAL LETTER D WITH DOT BELOWLAT" + + "IN SMALL LETTER D WITH DOT BELOWLATIN CAPITAL LETTER D WITH LINE BELOWLA" + + "TIN SMALL LETTER D WITH LINE BELOWLATIN CAPITAL LETTER D WITH CEDILLALAT" + + "IN SMALL LETTER D WITH CEDILLALATIN CAPITAL LETTER D WITH CIRCUMFLEX BEL" + + "OWLATIN SMALL LETTER D WITH CIRCUMFLEX BELOWLATIN CAPITAL LETTER E WITH " + + "MACRON AND GRAVELATIN SMALL LETTER E WITH MACRON AND GRAVELATIN CAPITAL " + + "LETTER E WITH MACRON AND ACUTELATIN SMALL LETTER E WITH MACRON AND ACUTE" + + "LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOWLATIN SMALL LETTER E WITH CI" + + "RCUMFLEX BELOWLATIN CAPITAL LETTER E WITH TILDE BELOWLATIN SMALL LETTER " + + "E WITH TILDE BELOWLATIN CAPITAL LETTER E WITH CEDILLA AND BREVELATIN SMA") + ("" + + "LL LETTER E WITH CEDILLA AND BREVELATIN CAPITAL LETTER F WITH DOT ABOVEL" + + "ATIN SMALL LETTER F WITH DOT ABOVELATIN CAPITAL LETTER G WITH MACRONLATI" + + "N SMALL LETTER G WITH MACRONLATIN CAPITAL LETTER H WITH DOT ABOVELATIN S" + + "MALL LETTER H WITH DOT ABOVELATIN CAPITAL LETTER H WITH DOT BELOWLATIN S" + + "MALL LETTER H WITH DOT BELOWLATIN CAPITAL LETTER H WITH DIAERESISLATIN S" + + "MALL LETTER H WITH DIAERESISLATIN CAPITAL LETTER H WITH CEDILLALATIN SMA" + + "LL LETTER H WITH CEDILLALATIN CAPITAL LETTER H WITH BREVE BELOWLATIN SMA" + + "LL LETTER H WITH BREVE BELOWLATIN CAPITAL LETTER I WITH TILDE BELOWLATIN" + + " SMALL LETTER I WITH TILDE BELOWLATIN CAPITAL LETTER I WITH DIAERESIS AN" + + "D ACUTELATIN SMALL LETTER I WITH DIAERESIS AND ACUTELATIN CAPITAL LETTER" + + " K WITH ACUTELATIN SMALL LETTER K WITH ACUTELATIN CAPITAL LETTER K WITH " + + "DOT BELOWLATIN SMALL LETTER K WITH DOT BELOWLATIN CAPITAL LETTER K WITH " + + "LINE BELOWLATIN SMALL LETTER K WITH LINE BELOWLATIN CAPITAL LETTER L WIT" + + "H DOT BELOWLATIN SMALL LETTER L WITH DOT BELOWLATIN CAPITAL LETTER L WIT" + + "H DOT BELOW AND MACRONLATIN SMALL LETTER L WITH DOT BELOW AND MACRONLATI" + + "N CAPITAL LETTER L WITH LINE BELOWLATIN SMALL LETTER L WITH LINE BELOWLA" + + "TIN CAPITAL LETTER L WITH CIRCUMFLEX BELOWLATIN SMALL LETTER L WITH CIRC" + + "UMFLEX BELOWLATIN CAPITAL LETTER M WITH ACUTELATIN SMALL LETTER M WITH A" + + "CUTELATIN CAPITAL LETTER M WITH DOT ABOVELATIN SMALL LETTER M WITH DOT A" + + "BOVELATIN CAPITAL LETTER M WITH DOT BELOWLATIN SMALL LETTER M WITH DOT B" + + "ELOWLATIN CAPITAL LETTER N WITH DOT ABOVELATIN SMALL LETTER N WITH DOT A" + + "BOVELATIN CAPITAL LETTER N WITH DOT BELOWLATIN SMALL LETTER N WITH DOT B" + + "ELOWLATIN CAPITAL LETTER N WITH LINE BELOWLATIN SMALL LETTER N WITH LINE" + + " BELOWLATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOWLATIN SMALL LETTER N W" + + "ITH CIRCUMFLEX BELOWLATIN CAPITAL LETTER O WITH TILDE AND ACUTELATIN SMA" + + "LL LETTER O WITH TILDE AND ACUTELATIN CAPITAL LETTER O WITH TILDE AND DI" + + "AERESISLATIN SMALL LETTER O WITH TILDE AND DIAERESISLATIN CAPITAL LETTER" + + " O WITH MACRON AND GRAVELATIN SMALL LETTER O WITH MACRON AND GRAVELATIN " + + "CAPITAL LETTER O WITH MACRON AND ACUTELATIN SMALL LETTER O WITH MACRON A" + + "ND ACUTELATIN CAPITAL LETTER P WITH ACUTELATIN SMALL LETTER P WITH ACUTE" + + "LATIN CAPITAL LETTER P WITH DOT ABOVELATIN SMALL LETTER P WITH DOT ABOVE" + + "LATIN CAPITAL LETTER R WITH DOT ABOVELATIN SMALL LETTER R WITH DOT ABOVE" + + "LATIN CAPITAL LETTER R WITH DOT BELOWLATIN SMALL LETTER R WITH DOT BELOW" + + "LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRONLATIN SMALL LETTER R WIT" + + "H DOT BELOW AND MACRONLATIN CAPITAL LETTER R WITH LINE BELOWLATIN SMALL " + + "LETTER R WITH LINE BELOWLATIN CAPITAL LETTER S WITH DOT ABOVELATIN SMALL" + + " LETTER S WITH DOT ABOVELATIN CAPITAL LETTER S WITH DOT BELOWLATIN SMALL" + + " LETTER S WITH DOT BELOWLATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVEL" + + "ATIN SMALL LETTER S WITH ACUTE AND DOT ABOVELATIN CAPITAL LETTER S WITH " + + "CARON AND DOT ABOVELATIN SMALL LETTER S WITH CARON AND DOT ABOVELATIN CA" + + "PITAL LETTER S WITH DOT BELOW AND DOT ABOVELATIN SMALL LETTER S WITH DOT" + + " BELOW AND DOT ABOVELATIN CAPITAL LETTER T WITH DOT ABOVELATIN SMALL LET" + + "TER T WITH DOT ABOVELATIN CAPITAL LETTER T WITH DOT BELOWLATIN SMALL LET" + + "TER T WITH DOT BELOWLATIN CAPITAL LETTER T WITH LINE BELOWLATIN SMALL LE" + + "TTER T WITH LINE BELOWLATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOWLATIN " + + "SMALL LETTER T WITH CIRCUMFLEX BELOWLATIN CAPITAL LETTER U WITH DIAERESI" + + "S BELOWLATIN SMALL LETTER U WITH DIAERESIS BELOWLATIN CAPITAL LETTER U W" + + "ITH TILDE BELOWLATIN SMALL LETTER U WITH TILDE BELOWLATIN CAPITAL LETTER" + + " U WITH CIRCUMFLEX BELOWLATIN SMALL LETTER U WITH CIRCUMFLEX BELOWLATIN " + + "CAPITAL LETTER U WITH TILDE AND ACUTELATIN SMALL LETTER U WITH TILDE AND" + + " ACUTELATIN CAPITAL LETTER U WITH MACRON AND DIAERESISLATIN SMALL LETTER" + + " U WITH MACRON AND DIAERESISLATIN CAPITAL LETTER V WITH TILDELATIN SMALL" + + " LETTER V WITH TILDELATIN CAPITAL LETTER V WITH DOT BELOWLATIN SMALL LET" + + "TER V WITH DOT BELOWLATIN CAPITAL LETTER W WITH GRAVELATIN SMALL LETTER " + + "W WITH GRAVELATIN CAPITAL LETTER W WITH ACUTELATIN SMALL LETTER W WITH A" + + "CUTELATIN CAPITAL LETTER W WITH DIAERESISLATIN SMALL LETTER W WITH DIAER" + + "ESISLATIN CAPITAL LETTER W WITH DOT ABOVELATIN SMALL LETTER W WITH DOT A" + + "BOVELATIN CAPITAL LETTER W WITH DOT BELOWLATIN SMALL LETTER W WITH DOT B" + + "ELOWLATIN CAPITAL LETTER X WITH DOT ABOVELATIN SMALL LETTER X WITH DOT A" + + "BOVELATIN CAPITAL LETTER X WITH DIAERESISLATIN SMALL LETTER X WITH DIAER" + + "ESISLATIN CAPITAL LETTER Y WITH DOT ABOVELATIN SMALL LETTER Y WITH DOT A" + + "BOVELATIN CAPITAL LETTER Z WITH CIRCUMFLEXLATIN SMALL LETTER Z WITH CIRC" + + "UMFLEXLATIN CAPITAL LETTER Z WITH DOT BELOWLATIN SMALL LETTER Z WITH DOT" + + " BELOWLATIN CAPITAL LETTER Z WITH LINE BELOWLATIN SMALL LETTER Z WITH LI") + ("" + + "NE BELOWLATIN SMALL LETTER H WITH LINE BELOWLATIN SMALL LETTER T WITH DI" + + "AERESISLATIN SMALL LETTER W WITH RING ABOVELATIN SMALL LETTER Y WITH RIN" + + "G ABOVELATIN SMALL LETTER A WITH RIGHT HALF RINGLATIN SMALL LETTER LONG " + + "S WITH DOT ABOVELATIN SMALL LETTER LONG S WITH DIAGONAL STROKELATIN SMAL" + + "L LETTER LONG S WITH HIGH STROKELATIN CAPITAL LETTER SHARP SLATIN SMALL " + + "LETTER DELTALATIN CAPITAL LETTER A WITH DOT BELOWLATIN SMALL LETTER A WI" + + "TH DOT BELOWLATIN CAPITAL LETTER A WITH HOOK ABOVELATIN SMALL LETTER A W" + + "ITH HOOK ABOVELATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTELATIN SMAL" + + "L LETTER A WITH CIRCUMFLEX AND ACUTELATIN CAPITAL LETTER A WITH CIRCUMFL" + + "EX AND GRAVELATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVELATIN CAPITAL " + + "LETTER A WITH CIRCUMFLEX AND HOOK ABOVELATIN SMALL LETTER A WITH CIRCUMF" + + "LEX AND HOOK ABOVELATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDELATIN " + + "SMALL LETTER A WITH CIRCUMFLEX AND TILDELATIN CAPITAL LETTER A WITH CIRC" + + "UMFLEX AND DOT BELOWLATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOWLA" + + "TIN CAPITAL LETTER A WITH BREVE AND ACUTELATIN SMALL LETTER A WITH BREVE" + + " AND ACUTELATIN CAPITAL LETTER A WITH BREVE AND GRAVELATIN SMALL LETTER " + + "A WITH BREVE AND GRAVELATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVELA" + + "TIN SMALL LETTER A WITH BREVE AND HOOK ABOVELATIN CAPITAL LETTER A WITH " + + "BREVE AND TILDELATIN SMALL LETTER A WITH BREVE AND TILDELATIN CAPITAL LE" + + "TTER A WITH BREVE AND DOT BELOWLATIN SMALL LETTER A WITH BREVE AND DOT B" + + "ELOWLATIN CAPITAL LETTER E WITH DOT BELOWLATIN SMALL LETTER E WITH DOT B" + + "ELOWLATIN CAPITAL LETTER E WITH HOOK ABOVELATIN SMALL LETTER E WITH HOOK" + + " ABOVELATIN CAPITAL LETTER E WITH TILDELATIN SMALL LETTER E WITH TILDELA" + + "TIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTELATIN SMALL LETTER E WITH " + + "CIRCUMFLEX AND ACUTELATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVELATI" + + "N SMALL LETTER E WITH CIRCUMFLEX AND GRAVELATIN CAPITAL LETTER E WITH CI" + + "RCUMFLEX AND HOOK ABOVELATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABO" + + "VELATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDELATIN SMALL LETTER E W" + + "ITH CIRCUMFLEX AND TILDELATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT B" + + "ELOWLATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOWLATIN CAPITAL LETT" + + "ER I WITH HOOK ABOVELATIN SMALL LETTER I WITH HOOK ABOVELATIN CAPITAL LE" + + "TTER I WITH DOT BELOWLATIN SMALL LETTER I WITH DOT BELOWLATIN CAPITAL LE" + + "TTER O WITH DOT BELOWLATIN SMALL LETTER O WITH DOT BELOWLATIN CAPITAL LE" + + "TTER O WITH HOOK ABOVELATIN SMALL LETTER O WITH HOOK ABOVELATIN CAPITAL " + + "LETTER O WITH CIRCUMFLEX AND ACUTELATIN SMALL LETTER O WITH CIRCUMFLEX A" + + "ND ACUTELATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVELATIN SMALL LETT" + + "ER O WITH CIRCUMFLEX AND GRAVELATIN CAPITAL LETTER O WITH CIRCUMFLEX AND" + + " HOOK ABOVELATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVELATIN CAPI" + + "TAL LETTER O WITH CIRCUMFLEX AND TILDELATIN SMALL LETTER O WITH CIRCUMFL" + + "EX AND TILDELATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOWLATIN SM" + + "ALL LETTER O WITH CIRCUMFLEX AND DOT BELOWLATIN CAPITAL LETTER O WITH HO" + + "RN AND ACUTELATIN SMALL LETTER O WITH HORN AND ACUTELATIN CAPITAL LETTER" + + " O WITH HORN AND GRAVELATIN SMALL LETTER O WITH HORN AND GRAVELATIN CAPI" + + "TAL LETTER O WITH HORN AND HOOK ABOVELATIN SMALL LETTER O WITH HORN AND " + + "HOOK ABOVELATIN CAPITAL LETTER O WITH HORN AND TILDELATIN SMALL LETTER O" + + " WITH HORN AND TILDELATIN CAPITAL LETTER O WITH HORN AND DOT BELOWLATIN " + + "SMALL LETTER O WITH HORN AND DOT BELOWLATIN CAPITAL LETTER U WITH DOT BE" + + "LOWLATIN SMALL LETTER U WITH DOT BELOWLATIN CAPITAL LETTER U WITH HOOK A" + + "BOVELATIN SMALL LETTER U WITH HOOK ABOVELATIN CAPITAL LETTER U WITH HORN" + + " AND ACUTELATIN SMALL LETTER U WITH HORN AND ACUTELATIN CAPITAL LETTER U" + + " WITH HORN AND GRAVELATIN SMALL LETTER U WITH HORN AND GRAVELATIN CAPITA" + + "L LETTER U WITH HORN AND HOOK ABOVELATIN SMALL LETTER U WITH HORN AND HO" + + "OK ABOVELATIN CAPITAL LETTER U WITH HORN AND TILDELATIN SMALL LETTER U W" + + "ITH HORN AND TILDELATIN CAPITAL LETTER U WITH HORN AND DOT BELOWLATIN SM" + + "ALL LETTER U WITH HORN AND DOT BELOWLATIN CAPITAL LETTER Y WITH GRAVELAT" + + "IN SMALL LETTER Y WITH GRAVELATIN CAPITAL LETTER Y WITH DOT BELOWLATIN S" + + "MALL LETTER Y WITH DOT BELOWLATIN CAPITAL LETTER Y WITH HOOK ABOVELATIN " + + "SMALL LETTER Y WITH HOOK ABOVELATIN CAPITAL LETTER Y WITH TILDELATIN SMA" + + "LL LETTER Y WITH TILDELATIN CAPITAL LETTER MIDDLE-WELSH LLLATIN SMALL LE" + + "TTER MIDDLE-WELSH LLLATIN CAPITAL LETTER MIDDLE-WELSH VLATIN SMALL LETTE" + + "R MIDDLE-WELSH VLATIN CAPITAL LETTER Y WITH LOOPLATIN SMALL LETTER Y WIT" + + "H LOOPGREEK SMALL LETTER ALPHA WITH PSILIGREEK SMALL LETTER ALPHA WITH D" + + "ASIAGREEK SMALL LETTER ALPHA WITH PSILI AND VARIAGREEK SMALL LETTER ALPH" + + "A WITH DASIA AND VARIAGREEK SMALL LETTER ALPHA WITH PSILI AND OXIAGREEK ") + ("" + + "SMALL LETTER ALPHA WITH DASIA AND OXIAGREEK SMALL LETTER ALPHA WITH PSIL" + + "I AND PERISPOMENIGREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENIGREE" + + "K CAPITAL LETTER ALPHA WITH PSILIGREEK CAPITAL LETTER ALPHA WITH DASIAGR" + + "EEK CAPITAL LETTER ALPHA WITH PSILI AND VARIAGREEK CAPITAL LETTER ALPHA " + + "WITH DASIA AND VARIAGREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIAGREEK " + + "CAPITAL LETTER ALPHA WITH DASIA AND OXIAGREEK CAPITAL LETTER ALPHA WITH " + + "PSILI AND PERISPOMENIGREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOME" + + "NIGREEK SMALL LETTER EPSILON WITH PSILIGREEK SMALL LETTER EPSILON WITH D" + + "ASIAGREEK SMALL LETTER EPSILON WITH PSILI AND VARIAGREEK SMALL LETTER EP" + + "SILON WITH DASIA AND VARIAGREEK SMALL LETTER EPSILON WITH PSILI AND OXIA" + + "GREEK SMALL LETTER EPSILON WITH DASIA AND OXIAGREEK CAPITAL LETTER EPSIL" + + "ON WITH PSILIGREEK CAPITAL LETTER EPSILON WITH DASIAGREEK CAPITAL LETTER" + + " EPSILON WITH PSILI AND VARIAGREEK CAPITAL LETTER EPSILON WITH DASIA AND" + + " VARIAGREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIAGREEK CAPITAL LETT" + + "ER EPSILON WITH DASIA AND OXIAGREEK SMALL LETTER ETA WITH PSILIGREEK SMA" + + "LL LETTER ETA WITH DASIAGREEK SMALL LETTER ETA WITH PSILI AND VARIAGREEK" + + " SMALL LETTER ETA WITH DASIA AND VARIAGREEK SMALL LETTER ETA WITH PSILI " + + "AND OXIAGREEK SMALL LETTER ETA WITH DASIA AND OXIAGREEK SMALL LETTER ETA" + + " WITH PSILI AND PERISPOMENIGREEK SMALL LETTER ETA WITH DASIA AND PERISPO" + + "MENIGREEK CAPITAL LETTER ETA WITH PSILIGREEK CAPITAL LETTER ETA WITH DAS" + + "IAGREEK CAPITAL LETTER ETA WITH PSILI AND VARIAGREEK CAPITAL LETTER ETA " + + "WITH DASIA AND VARIAGREEK CAPITAL LETTER ETA WITH PSILI AND OXIAGREEK CA" + + "PITAL LETTER ETA WITH DASIA AND OXIAGREEK CAPITAL LETTER ETA WITH PSILI " + + "AND PERISPOMENIGREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENIGREEK " + + "SMALL LETTER IOTA WITH PSILIGREEK SMALL LETTER IOTA WITH DASIAGREEK SMAL" + + "L LETTER IOTA WITH PSILI AND VARIAGREEK SMALL LETTER IOTA WITH DASIA AND" + + " VARIAGREEK SMALL LETTER IOTA WITH PSILI AND OXIAGREEK SMALL LETTER IOTA" + + " WITH DASIA AND OXIAGREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENIGR" + + "EEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENIGREEK CAPITAL LETTER IOT" + + "A WITH PSILIGREEK CAPITAL LETTER IOTA WITH DASIAGREEK CAPITAL LETTER IOT" + + "A WITH PSILI AND VARIAGREEK CAPITAL LETTER IOTA WITH DASIA AND VARIAGREE" + + "K CAPITAL LETTER IOTA WITH PSILI AND OXIAGREEK CAPITAL LETTER IOTA WITH " + + "DASIA AND OXIAGREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENIGREEK " + + "CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENIGREEK SMALL LETTER OMICRON" + + " WITH PSILIGREEK SMALL LETTER OMICRON WITH DASIAGREEK SMALL LETTER OMICR" + + "ON WITH PSILI AND VARIAGREEK SMALL LETTER OMICRON WITH DASIA AND VARIAGR" + + "EEK SMALL LETTER OMICRON WITH PSILI AND OXIAGREEK SMALL LETTER OMICRON W" + + "ITH DASIA AND OXIAGREEK CAPITAL LETTER OMICRON WITH PSILIGREEK CAPITAL L" + + "ETTER OMICRON WITH DASIAGREEK CAPITAL LETTER OMICRON WITH PSILI AND VARI" + + "AGREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIAGREEK CAPITAL LETTER O" + + "MICRON WITH PSILI AND OXIAGREEK CAPITAL LETTER OMICRON WITH DASIA AND OX" + + "IAGREEK SMALL LETTER UPSILON WITH PSILIGREEK SMALL LETTER UPSILON WITH D" + + "ASIAGREEK SMALL LETTER UPSILON WITH PSILI AND VARIAGREEK SMALL LETTER UP" + + "SILON WITH DASIA AND VARIAGREEK SMALL LETTER UPSILON WITH PSILI AND OXIA" + + "GREEK SMALL LETTER UPSILON WITH DASIA AND OXIAGREEK SMALL LETTER UPSILON" + + " WITH PSILI AND PERISPOMENIGREEK SMALL LETTER UPSILON WITH DASIA AND PER" + + "ISPOMENIGREEK CAPITAL LETTER UPSILON WITH DASIAGREEK CAPITAL LETTER UPSI" + + "LON WITH DASIA AND VARIAGREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA" + + "GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENIGREEK SMALL LETTE" + + "R OMEGA WITH PSILIGREEK SMALL LETTER OMEGA WITH DASIAGREEK SMALL LETTER " + + "OMEGA WITH PSILI AND VARIAGREEK SMALL LETTER OMEGA WITH DASIA AND VARIAG" + + "REEK SMALL LETTER OMEGA WITH PSILI AND OXIAGREEK SMALL LETTER OMEGA WITH" + + " DASIA AND OXIAGREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENIGREEK " + + "SMALL LETTER OMEGA WITH DASIA AND PERISPOMENIGREEK CAPITAL LETTER OMEGA " + + "WITH PSILIGREEK CAPITAL LETTER OMEGA WITH DASIAGREEK CAPITAL LETTER OMEG" + + "A WITH PSILI AND VARIAGREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIAGRE" + + "EK CAPITAL LETTER OMEGA WITH PSILI AND OXIAGREEK CAPITAL LETTER OMEGA WI" + + "TH DASIA AND OXIAGREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENIGR" + + "EEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENIGREEK SMALL LETTER AL" + + "PHA WITH VARIAGREEK SMALL LETTER ALPHA WITH OXIAGREEK SMALL LETTER EPSIL" + + "ON WITH VARIAGREEK SMALL LETTER EPSILON WITH OXIAGREEK SMALL LETTER ETA " + + "WITH VARIAGREEK SMALL LETTER ETA WITH OXIAGREEK SMALL LETTER IOTA WITH V" + + "ARIAGREEK SMALL LETTER IOTA WITH OXIAGREEK SMALL LETTER OMICRON WITH VAR" + + "IAGREEK SMALL LETTER OMICRON WITH OXIAGREEK SMALL LETTER UPSILON WITH VA") + ("" + + "RIAGREEK SMALL LETTER UPSILON WITH OXIAGREEK SMALL LETTER OMEGA WITH VAR" + + "IAGREEK SMALL LETTER OMEGA WITH OXIAGREEK SMALL LETTER ALPHA WITH PSILI " + + "AND YPOGEGRAMMENIGREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENIGR" + + "EEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENIGREEK SMALL" + + " LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENIGREEK SMALL LETTER A" + + "LPHA WITH PSILI AND OXIA AND YPOGEGRAMMENIGREEK SMALL LETTER ALPHA WITH " + + "DASIA AND OXIA AND YPOGEGRAMMENIGREEK SMALL LETTER ALPHA WITH PSILI AND " + + "PERISPOMENI AND YPOGEGRAMMENIGREEK SMALL LETTER ALPHA WITH DASIA AND PER" + + "ISPOMENI AND YPOGEGRAMMENIGREEK CAPITAL LETTER ALPHA WITH PSILI AND PROS" + + "GEGRAMMENIGREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENIGREEK " + + "CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENIGREEK CAPITA" + + "L LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENIGREEK CAPITAL LETT" + + "ER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENIGREEK CAPITAL LETTER ALPH" + + "A WITH DASIA AND OXIA AND PROSGEGRAMMENIGREEK CAPITAL LETTER ALPHA WITH " + + "PSILI AND PERISPOMENI AND PROSGEGRAMMENIGREEK CAPITAL LETTER ALPHA WITH " + + "DASIA AND PERISPOMENI AND PROSGEGRAMMENIGREEK SMALL LETTER ETA WITH PSIL" + + "I AND YPOGEGRAMMENIGREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENIGR" + + "EEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENIGREEK SMALL L" + + "ETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENIGREEK SMALL LETTER ETA W" + + "ITH PSILI AND OXIA AND YPOGEGRAMMENIGREEK SMALL LETTER ETA WITH DASIA AN" + + "D OXIA AND YPOGEGRAMMENIGREEK SMALL LETTER ETA WITH PSILI AND PERISPOMEN" + + "I AND YPOGEGRAMMENIGREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND" + + " YPOGEGRAMMENIGREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENIGREE" + + "K CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENIGREEK CAPITAL LETTER E" + + "TA WITH PSILI AND VARIA AND PROSGEGRAMMENIGREEK CAPITAL LETTER ETA WITH " + + "DASIA AND VARIA AND PROSGEGRAMMENIGREEK CAPITAL LETTER ETA WITH PSILI AN" + + "D OXIA AND PROSGEGRAMMENIGREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AN" + + "D PROSGEGRAMMENIGREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND " + + "PROSGEGRAMMENIGREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PR" + + "OSGEGRAMMENIGREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENIGREEK S" + + "MALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENIGREEK SMALL LETTER OMEGA W" + + "ITH PSILI AND VARIA AND YPOGEGRAMMENIGREEK SMALL LETTER OMEGA WITH DASIA" + + " AND VARIA AND YPOGEGRAMMENIGREEK SMALL LETTER OMEGA WITH PSILI AND OXIA" + + " AND YPOGEGRAMMENIGREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGE" + + "GRAMMENIGREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRA" + + "MMENIGREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMME" + + "NIGREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENIGREEK CAPITAL " + + "LETTER OMEGA WITH DASIA AND PROSGEGRAMMENIGREEK CAPITAL LETTER OMEGA WIT" + + "H PSILI AND VARIA AND PROSGEGRAMMENIGREEK CAPITAL LETTER OMEGA WITH DASI" + + "A AND VARIA AND PROSGEGRAMMENIGREEK CAPITAL LETTER OMEGA WITH PSILI AND " + + "OXIA AND PROSGEGRAMMENIGREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AN" + + "D PROSGEGRAMMENIGREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AN" + + "D PROSGEGRAMMENIGREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AN" + + "D PROSGEGRAMMENIGREEK SMALL LETTER ALPHA WITH VRACHYGREEK SMALL LETTER A" + + "LPHA WITH MACRONGREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENIGRE" + + "EK SMALL LETTER ALPHA WITH YPOGEGRAMMENIGREEK SMALL LETTER ALPHA WITH OX" + + "IA AND YPOGEGRAMMENIGREEK SMALL LETTER ALPHA WITH PERISPOMENIGREEK SMALL" + + " LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENIGREEK CAPITAL LETTER ALP" + + "HA WITH VRACHYGREEK CAPITAL LETTER ALPHA WITH MACRONGREEK CAPITAL LETTER" + + " ALPHA WITH VARIAGREEK CAPITAL LETTER ALPHA WITH OXIAGREEK CAPITAL LETTE" + + "R ALPHA WITH PROSGEGRAMMENIGREEK KORONISGREEK PROSGEGRAMMENIGREEK PSILIG" + + "REEK PERISPOMENIGREEK DIALYTIKA AND PERISPOMENIGREEK SMALL LETTER ETA WI" + + "TH VARIA AND YPOGEGRAMMENIGREEK SMALL LETTER ETA WITH YPOGEGRAMMENIGREEK" + + " SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENIGREEK SMALL LETTER ETA WITH" + + " PERISPOMENIGREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENIGRE" + + "EK CAPITAL LETTER EPSILON WITH VARIAGREEK CAPITAL LETTER EPSILON WITH OX" + + "IAGREEK CAPITAL LETTER ETA WITH VARIAGREEK CAPITAL LETTER ETA WITH OXIAG" + + "REEK CAPITAL LETTER ETA WITH PROSGEGRAMMENIGREEK PSILI AND VARIAGREEK PS" + + "ILI AND OXIAGREEK PSILI AND PERISPOMENIGREEK SMALL LETTER IOTA WITH VRAC" + + "HYGREEK SMALL LETTER IOTA WITH MACRONGREEK SMALL LETTER IOTA WITH DIALYT" + + "IKA AND VARIAGREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIAGREEK SMALL " + + "LETTER IOTA WITH PERISPOMENIGREEK SMALL LETTER IOTA WITH DIALYTIKA AND P" + + "ERISPOMENIGREEK CAPITAL LETTER IOTA WITH VRACHYGREEK CAPITAL LETTER IOTA" + + " WITH MACRONGREEK CAPITAL LETTER IOTA WITH VARIAGREEK CAPITAL LETTER IOT") + ("" + + "A WITH OXIAGREEK DASIA AND VARIAGREEK DASIA AND OXIAGREEK DASIA AND PERI" + + "SPOMENIGREEK SMALL LETTER UPSILON WITH VRACHYGREEK SMALL LETTER UPSILON " + + "WITH MACRONGREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIAGREEK SMAL" + + "L LETTER UPSILON WITH DIALYTIKA AND OXIAGREEK SMALL LETTER RHO WITH PSIL" + + "IGREEK SMALL LETTER RHO WITH DASIAGREEK SMALL LETTER UPSILON WITH PERISP" + + "OMENIGREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENIGREEK CAPI" + + "TAL LETTER UPSILON WITH VRACHYGREEK CAPITAL LETTER UPSILON WITH MACRONGR" + + "EEK CAPITAL LETTER UPSILON WITH VARIAGREEK CAPITAL LETTER UPSILON WITH O" + + "XIAGREEK CAPITAL LETTER RHO WITH DASIAGREEK DIALYTIKA AND VARIAGREEK DIA" + + "LYTIKA AND OXIAGREEK VARIAGREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEG" + + "RAMMENIGREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENIGREEK SMALL LETTER OME" + + "GA WITH OXIA AND YPOGEGRAMMENIGREEK SMALL LETTER OMEGA WITH PERISPOMENIG" + + "REEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENIGREEK CAPITAL " + + "LETTER OMICRON WITH VARIAGREEK CAPITAL LETTER OMICRON WITH OXIAGREEK CAP" + + "ITAL LETTER OMEGA WITH VARIAGREEK CAPITAL LETTER OMEGA WITH OXIAGREEK CA" + + "PITAL LETTER OMEGA WITH PROSGEGRAMMENIGREEK OXIAGREEK DASIAEN QUADEM QUA" + + "DEN SPACEEM SPACETHREE-PER-EM SPACEFOUR-PER-EM SPACESIX-PER-EM SPACEFIGU" + + "RE SPACEPUNCTUATION SPACETHIN SPACEHAIR SPACEZERO WIDTH SPACEZERO WIDTH " + + "NON-JOINERZERO WIDTH JOINERLEFT-TO-RIGHT MARKRIGHT-TO-LEFT MARKHYPHENNON" + + "-BREAKING HYPHENFIGURE DASHEN DASHEM DASHHORIZONTAL BARDOUBLE VERTICAL L" + + "INEDOUBLE LOW LINELEFT SINGLE QUOTATION MARKRIGHT SINGLE QUOTATION MARKS" + + "INGLE LOW-9 QUOTATION MARKSINGLE HIGH-REVERSED-9 QUOTATION MARKLEFT DOUB" + + "LE QUOTATION MARKRIGHT DOUBLE QUOTATION MARKDOUBLE LOW-9 QUOTATION MARKD" + + "OUBLE HIGH-REVERSED-9 QUOTATION MARKDAGGERDOUBLE DAGGERBULLETTRIANGULAR " + + "BULLETONE DOT LEADERTWO DOT LEADERHORIZONTAL ELLIPSISHYPHENATION POINTLI" + + "NE SEPARATORPARAGRAPH SEPARATORLEFT-TO-RIGHT EMBEDDINGRIGHT-TO-LEFT EMBE" + + "DDINGPOP DIRECTIONAL FORMATTINGLEFT-TO-RIGHT OVERRIDERIGHT-TO-LEFT OVERR" + + "IDENARROW NO-BREAK SPACEPER MILLE SIGNPER TEN THOUSAND SIGNPRIMEDOUBLE P" + + "RIMETRIPLE PRIMEREVERSED PRIMEREVERSED DOUBLE PRIMEREVERSED TRIPLE PRIME" + + "CARETSINGLE LEFT-POINTING ANGLE QUOTATION MARKSINGLE RIGHT-POINTING ANGL" + + "E QUOTATION MARKREFERENCE MARKDOUBLE EXCLAMATION MARKINTERROBANGOVERLINE" + + "UNDERTIECHARACTER TIECARET INSERTION POINTASTERISMHYPHEN BULLETFRACTION " + + "SLASHLEFT SQUARE BRACKET WITH QUILLRIGHT SQUARE BRACKET WITH QUILLDOUBLE" + + " QUESTION MARKQUESTION EXCLAMATION MARKEXCLAMATION QUESTION MARKTIRONIAN" + + " SIGN ETREVERSED PILCROW SIGNBLACK LEFTWARDS BULLETBLACK RIGHTWARDS BULL" + + "ETLOW ASTERISKREVERSED SEMICOLONCLOSE UPTWO ASTERISKS ALIGNED VERTICALLY" + + "COMMERCIAL MINUS SIGNSWUNG DASHINVERTED UNDERTIEFLOWER PUNCTUATION MARKT" + + "HREE DOT PUNCTUATIONQUADRUPLE PRIMEFOUR DOT PUNCTUATIONFIVE DOT PUNCTUAT" + + "IONTWO DOT PUNCTUATIONFOUR DOT MARKDOTTED CROSSTRICOLONVERTICAL FOUR DOT" + + "SMEDIUM MATHEMATICAL SPACEWORD JOINERFUNCTION APPLICATIONINVISIBLE TIMES" + + "INVISIBLE SEPARATORINVISIBLE PLUSLEFT-TO-RIGHT ISOLATERIGHT-TO-LEFT ISOL" + + "ATEFIRST STRONG ISOLATEPOP DIRECTIONAL ISOLATEINHIBIT SYMMETRIC SWAPPING" + + "ACTIVATE SYMMETRIC SWAPPINGINHIBIT ARABIC FORM SHAPINGACTIVATE ARABIC FO" + + "RM SHAPINGNATIONAL DIGIT SHAPESNOMINAL DIGIT SHAPESSUPERSCRIPT ZEROSUPER" + + "SCRIPT LATIN SMALL LETTER ISUPERSCRIPT FOURSUPERSCRIPT FIVESUPERSCRIPT S" + + "IXSUPERSCRIPT SEVENSUPERSCRIPT EIGHTSUPERSCRIPT NINESUPERSCRIPT PLUS SIG" + + "NSUPERSCRIPT MINUSSUPERSCRIPT EQUALS SIGNSUPERSCRIPT LEFT PARENTHESISSUP" + + "ERSCRIPT RIGHT PARENTHESISSUPERSCRIPT LATIN SMALL LETTER NSUBSCRIPT ZERO" + + "SUBSCRIPT ONESUBSCRIPT TWOSUBSCRIPT THREESUBSCRIPT FOURSUBSCRIPT FIVESUB" + + "SCRIPT SIXSUBSCRIPT SEVENSUBSCRIPT EIGHTSUBSCRIPT NINESUBSCRIPT PLUS SIG" + + "NSUBSCRIPT MINUSSUBSCRIPT EQUALS SIGNSUBSCRIPT LEFT PARENTHESISSUBSCRIPT" + + " RIGHT PARENTHESISLATIN SUBSCRIPT SMALL LETTER ALATIN SUBSCRIPT SMALL LE" + + "TTER ELATIN SUBSCRIPT SMALL LETTER OLATIN SUBSCRIPT SMALL LETTER XLATIN " + + "SUBSCRIPT SMALL LETTER SCHWALATIN SUBSCRIPT SMALL LETTER HLATIN SUBSCRIP" + + "T SMALL LETTER KLATIN SUBSCRIPT SMALL LETTER LLATIN SUBSCRIPT SMALL LETT" + + "ER MLATIN SUBSCRIPT SMALL LETTER NLATIN SUBSCRIPT SMALL LETTER PLATIN SU" + + "BSCRIPT SMALL LETTER SLATIN SUBSCRIPT SMALL LETTER TEURO-CURRENCY SIGNCO" + + "LON SIGNCRUZEIRO SIGNFRENCH FRANC SIGNLIRA SIGNMILL SIGNNAIRA SIGNPESETA" + + " SIGNRUPEE SIGNWON SIGNNEW SHEQEL SIGNDONG SIGNEURO SIGNKIP SIGNTUGRIK S" + + "IGNDRACHMA SIGNGERMAN PENNY SIGNPESO SIGNGUARANI SIGNAUSTRAL SIGNHRYVNIA" + + " SIGNCEDI SIGNLIVRE TOURNOIS SIGNSPESMILO SIGNTENGE SIGNINDIAN RUPEE SIG" + + "NTURKISH LIRA SIGNNORDIC MARK SIGNMANAT SIGNRUBLE SIGNLARI SIGNCOMBINING" + + " LEFT HARPOON ABOVECOMBINING RIGHT HARPOON ABOVECOMBINING LONG VERTICAL " + + "LINE OVERLAYCOMBINING SHORT VERTICAL LINE OVERLAYCOMBINING ANTICLOCKWISE") + ("" + + " ARROW ABOVECOMBINING CLOCKWISE ARROW ABOVECOMBINING LEFT ARROW ABOVECOM" + + "BINING RIGHT ARROW ABOVECOMBINING RING OVERLAYCOMBINING CLOCKWISE RING O" + + "VERLAYCOMBINING ANTICLOCKWISE RING OVERLAYCOMBINING THREE DOTS ABOVECOMB" + + "INING FOUR DOTS ABOVECOMBINING ENCLOSING CIRCLECOMBINING ENCLOSING SQUAR" + + "ECOMBINING ENCLOSING DIAMONDCOMBINING ENCLOSING CIRCLE BACKSLASHCOMBININ" + + "G LEFT RIGHT ARROW ABOVECOMBINING ENCLOSING SCREENCOMBINING ENCLOSING KE" + + "YCAPCOMBINING ENCLOSING UPWARD POINTING TRIANGLECOMBINING REVERSE SOLIDU" + + "S OVERLAYCOMBINING DOUBLE VERTICAL STROKE OVERLAYCOMBINING ANNUITY SYMBO" + + "LCOMBINING TRIPLE UNDERDOTCOMBINING WIDE BRIDGE ABOVECOMBINING LEFTWARDS" + + " ARROW OVERLAYCOMBINING LONG DOUBLE SOLIDUS OVERLAYCOMBINING RIGHTWARDS " + + "HARPOON WITH BARB DOWNWARDSCOMBINING LEFTWARDS HARPOON WITH BARB DOWNWAR" + + "DSCOMBINING LEFT ARROW BELOWCOMBINING RIGHT ARROW BELOWCOMBINING ASTERIS" + + "K ABOVEACCOUNT OFADDRESSED TO THE SUBJECTDOUBLE-STRUCK CAPITAL CDEGREE C" + + "ELSIUSCENTRE LINE SYMBOLCARE OFCADA UNAEULER CONSTANTSCRUPLEDEGREE FAHRE" + + "NHEITSCRIPT SMALL GSCRIPT CAPITAL HBLACK-LETTER CAPITAL HDOUBLE-STRUCK C" + + "APITAL HPLANCK CONSTANTPLANCK CONSTANT OVER TWO PISCRIPT CAPITAL IBLACK-" + + "LETTER CAPITAL ISCRIPT CAPITAL LSCRIPT SMALL LL B BAR SYMBOLDOUBLE-STRUC" + + "K CAPITAL NNUMERO SIGNSOUND RECORDING COPYRIGHTSCRIPT CAPITAL PDOUBLE-ST" + + "RUCK CAPITAL PDOUBLE-STRUCK CAPITAL QSCRIPT CAPITAL RBLACK-LETTER CAPITA" + + "L RDOUBLE-STRUCK CAPITAL RPRESCRIPTION TAKERESPONSESERVICE MARKTELEPHONE" + + " SIGNTRADE MARK SIGNVERSICLEDOUBLE-STRUCK CAPITAL ZOUNCE SIGNOHM SIGNINV" + + "ERTED OHM SIGNBLACK-LETTER CAPITAL ZTURNED GREEK SMALL LETTER IOTAKELVIN" + + " SIGNANGSTROM SIGNSCRIPT CAPITAL BBLACK-LETTER CAPITAL CESTIMATED SYMBOL" + + "SCRIPT SMALL ESCRIPT CAPITAL ESCRIPT CAPITAL FTURNED CAPITAL FSCRIPT CAP" + + "ITAL MSCRIPT SMALL OALEF SYMBOLBET SYMBOLGIMEL SYMBOLDALET SYMBOLINFORMA" + + "TION SOURCEROTATED CAPITAL QFACSIMILE SIGNDOUBLE-STRUCK SMALL PIDOUBLE-S" + + "TRUCK SMALL GAMMADOUBLE-STRUCK CAPITAL GAMMADOUBLE-STRUCK CAPITAL PIDOUB" + + "LE-STRUCK N-ARY SUMMATIONTURNED SANS-SERIF CAPITAL GTURNED SANS-SERIF CA" + + "PITAL LREVERSED SANS-SERIF CAPITAL LTURNED SANS-SERIF CAPITAL YDOUBLE-ST" + + "RUCK ITALIC CAPITAL DDOUBLE-STRUCK ITALIC SMALL DDOUBLE-STRUCK ITALIC SM" + + "ALL EDOUBLE-STRUCK ITALIC SMALL IDOUBLE-STRUCK ITALIC SMALL JPROPERTY LI" + + "NETURNED AMPERSANDPER SIGNAKTIESELSKABTURNED SMALL FSYMBOL FOR SAMARITAN" + + " SOURCEVULGAR FRACTION ONE SEVENTHVULGAR FRACTION ONE NINTHVULGAR FRACTI" + + "ON ONE TENTHVULGAR FRACTION ONE THIRDVULGAR FRACTION TWO THIRDSVULGAR FR" + + "ACTION ONE FIFTHVULGAR FRACTION TWO FIFTHSVULGAR FRACTION THREE FIFTHSVU" + + "LGAR FRACTION FOUR FIFTHSVULGAR FRACTION ONE SIXTHVULGAR FRACTION FIVE S" + + "IXTHSVULGAR FRACTION ONE EIGHTHVULGAR FRACTION THREE EIGHTHSVULGAR FRACT" + + "ION FIVE EIGHTHSVULGAR FRACTION SEVEN EIGHTHSFRACTION NUMERATOR ONEROMAN" + + " NUMERAL ONEROMAN NUMERAL TWOROMAN NUMERAL THREEROMAN NUMERAL FOURROMAN " + + "NUMERAL FIVEROMAN NUMERAL SIXROMAN NUMERAL SEVENROMAN NUMERAL EIGHTROMAN" + + " NUMERAL NINEROMAN NUMERAL TENROMAN NUMERAL ELEVENROMAN NUMERAL TWELVERO" + + "MAN NUMERAL FIFTYROMAN NUMERAL ONE HUNDREDROMAN NUMERAL FIVE HUNDREDROMA" + + "N NUMERAL ONE THOUSANDSMALL ROMAN NUMERAL ONESMALL ROMAN NUMERAL TWOSMAL" + + "L ROMAN NUMERAL THREESMALL ROMAN NUMERAL FOURSMALL ROMAN NUMERAL FIVESMA" + + "LL ROMAN NUMERAL SIXSMALL ROMAN NUMERAL SEVENSMALL ROMAN NUMERAL EIGHTSM" + + "ALL ROMAN NUMERAL NINESMALL ROMAN NUMERAL TENSMALL ROMAN NUMERAL ELEVENS" + + "MALL ROMAN NUMERAL TWELVESMALL ROMAN NUMERAL FIFTYSMALL ROMAN NUMERAL ON" + + "E HUNDREDSMALL ROMAN NUMERAL FIVE HUNDREDSMALL ROMAN NUMERAL ONE THOUSAN" + + "DROMAN NUMERAL ONE THOUSAND C DROMAN NUMERAL FIVE THOUSANDROMAN NUMERAL " + + "TEN THOUSANDROMAN NUMERAL REVERSED ONE HUNDREDLATIN SMALL LETTER REVERSE" + + "D CROMAN NUMERAL SIX LATE FORMROMAN NUMERAL FIFTY EARLY FORMROMAN NUMERA" + + "L FIFTY THOUSANDROMAN NUMERAL ONE HUNDRED THOUSANDVULGAR FRACTION ZERO T" + + "HIRDSTURNED DIGIT TWOTURNED DIGIT THREELEFTWARDS ARROWUPWARDS ARROWRIGHT" + + "WARDS ARROWDOWNWARDS ARROWLEFT RIGHT ARROWUP DOWN ARROWNORTH WEST ARROWN" + + "ORTH EAST ARROWSOUTH EAST ARROWSOUTH WEST ARROWLEFTWARDS ARROW WITH STRO" + + "KERIGHTWARDS ARROW WITH STROKELEFTWARDS WAVE ARROWRIGHTWARDS WAVE ARROWL" + + "EFTWARDS TWO HEADED ARROWUPWARDS TWO HEADED ARROWRIGHTWARDS TWO HEADED A" + + "RROWDOWNWARDS TWO HEADED ARROWLEFTWARDS ARROW WITH TAILRIGHTWARDS ARROW " + + "WITH TAILLEFTWARDS ARROW FROM BARUPWARDS ARROW FROM BARRIGHTWARDS ARROW " + + "FROM BARDOWNWARDS ARROW FROM BARUP DOWN ARROW WITH BASELEFTWARDS ARROW W" + + "ITH HOOKRIGHTWARDS ARROW WITH HOOKLEFTWARDS ARROW WITH LOOPRIGHTWARDS AR" + + "ROW WITH LOOPLEFT RIGHT WAVE ARROWLEFT RIGHT ARROW WITH STROKEDOWNWARDS " + + "ZIGZAG ARROWUPWARDS ARROW WITH TIP LEFTWARDSUPWARDS ARROW WITH TIP RIGHT" + + "WARDSDOWNWARDS ARROW WITH TIP LEFTWARDSDOWNWARDS ARROW WITH TIP RIGHTWAR") + ("" + + "DSRIGHTWARDS ARROW WITH CORNER DOWNWARDSDOWNWARDS ARROW WITH CORNER LEFT" + + "WARDSANTICLOCKWISE TOP SEMICIRCLE ARROWCLOCKWISE TOP SEMICIRCLE ARROWNOR" + + "TH WEST ARROW TO LONG BARLEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO" + + " BARANTICLOCKWISE OPEN CIRCLE ARROWCLOCKWISE OPEN CIRCLE ARROWLEFTWARDS " + + "HARPOON WITH BARB UPWARDSLEFTWARDS HARPOON WITH BARB DOWNWARDSUPWARDS HA" + + "RPOON WITH BARB RIGHTWARDSUPWARDS HARPOON WITH BARB LEFTWARDSRIGHTWARDS " + + "HARPOON WITH BARB UPWARDSRIGHTWARDS HARPOON WITH BARB DOWNWARDSDOWNWARDS" + + " HARPOON WITH BARB RIGHTWARDSDOWNWARDS HARPOON WITH BARB LEFTWARDSRIGHTW" + + "ARDS ARROW OVER LEFTWARDS ARROWUPWARDS ARROW LEFTWARDS OF DOWNWARDS ARRO" + + "WLEFTWARDS ARROW OVER RIGHTWARDS ARROWLEFTWARDS PAIRED ARROWSUPWARDS PAI" + + "RED ARROWSRIGHTWARDS PAIRED ARROWSDOWNWARDS PAIRED ARROWSLEFTWARDS HARPO" + + "ON OVER RIGHTWARDS HARPOONRIGHTWARDS HARPOON OVER LEFTWARDS HARPOONLEFTW" + + "ARDS DOUBLE ARROW WITH STROKELEFT RIGHT DOUBLE ARROW WITH STROKERIGHTWAR" + + "DS DOUBLE ARROW WITH STROKELEFTWARDS DOUBLE ARROWUPWARDS DOUBLE ARROWRIG" + + "HTWARDS DOUBLE ARROWDOWNWARDS DOUBLE ARROWLEFT RIGHT DOUBLE ARROWUP DOWN" + + " DOUBLE ARROWNORTH WEST DOUBLE ARROWNORTH EAST DOUBLE ARROWSOUTH EAST DO" + + "UBLE ARROWSOUTH WEST DOUBLE ARROWLEFTWARDS TRIPLE ARROWRIGHTWARDS TRIPLE" + + " ARROWLEFTWARDS SQUIGGLE ARROWRIGHTWARDS SQUIGGLE ARROWUPWARDS ARROW WIT" + + "H DOUBLE STROKEDOWNWARDS ARROW WITH DOUBLE STROKELEFTWARDS DASHED ARROWU" + + "PWARDS DASHED ARROWRIGHTWARDS DASHED ARROWDOWNWARDS DASHED ARROWLEFTWARD" + + "S ARROW TO BARRIGHTWARDS ARROW TO BARLEFTWARDS WHITE ARROWUPWARDS WHITE " + + "ARROWRIGHTWARDS WHITE ARROWDOWNWARDS WHITE ARROWUPWARDS WHITE ARROW FROM" + + " BARUPWARDS WHITE ARROW ON PEDESTALUPWARDS WHITE ARROW ON PEDESTAL WITH " + + "HORIZONTAL BARUPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BARUPWARDS W" + + "HITE DOUBLE ARROWUPWARDS WHITE DOUBLE ARROW ON PEDESTALRIGHTWARDS WHITE " + + "ARROW FROM WALLNORTH WEST ARROW TO CORNERSOUTH EAST ARROW TO CORNERUP DO" + + "WN WHITE ARROWRIGHT ARROW WITH SMALL CIRCLEDOWNWARDS ARROW LEFTWARDS OF " + + "UPWARDS ARROWTHREE RIGHTWARDS ARROWSLEFTWARDS ARROW WITH VERTICAL STROKE" + + "RIGHTWARDS ARROW WITH VERTICAL STROKELEFT RIGHT ARROW WITH VERTICAL STRO" + + "KELEFTWARDS ARROW WITH DOUBLE VERTICAL STROKERIGHTWARDS ARROW WITH DOUBL" + + "E VERTICAL STROKELEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKELEFTWARDS O" + + "PEN-HEADED ARROWRIGHTWARDS OPEN-HEADED ARROWLEFT RIGHT OPEN-HEADED ARROW" + + "FOR ALLCOMPLEMENTPARTIAL DIFFERENTIALTHERE EXISTSTHERE DOES NOT EXISTEMP" + + "TY SETINCREMENTNABLAELEMENT OFNOT AN ELEMENT OFSMALL ELEMENT OFCONTAINS " + + "AS MEMBERDOES NOT CONTAIN AS MEMBERSMALL CONTAINS AS MEMBEREND OF PROOFN" + + "-ARY PRODUCTN-ARY COPRODUCTN-ARY SUMMATIONMINUS SIGNMINUS-OR-PLUS SIGNDO" + + "T PLUSDIVISION SLASHSET MINUSASTERISK OPERATORRING OPERATORBULLET OPERAT" + + "ORSQUARE ROOTCUBE ROOTFOURTH ROOTPROPORTIONAL TOINFINITYRIGHT ANGLEANGLE" + + "MEASURED ANGLESPHERICAL ANGLEDIVIDESDOES NOT DIVIDEPARALLEL TONOT PARALL" + + "EL TOLOGICAL ANDLOGICAL ORINTERSECTIONUNIONINTEGRALDOUBLE INTEGRALTRIPLE" + + " INTEGRALCONTOUR INTEGRALSURFACE INTEGRALVOLUME INTEGRALCLOCKWISE INTEGR" + + "ALCLOCKWISE CONTOUR INTEGRALANTICLOCKWISE CONTOUR INTEGRALTHEREFOREBECAU" + + "SERATIOPROPORTIONDOT MINUSEXCESSGEOMETRIC PROPORTIONHOMOTHETICTILDE OPER" + + "ATORREVERSED TILDEINVERTED LAZY SSINE WAVEWREATH PRODUCTNOT TILDEMINUS T" + + "ILDEASYMPTOTICALLY EQUAL TONOT ASYMPTOTICALLY EQUAL TOAPPROXIMATELY EQUA" + + "L TOAPPROXIMATELY BUT NOT ACTUALLY EQUAL TONEITHER APPROXIMATELY NOR ACT" + + "UALLY EQUAL TOALMOST EQUAL TONOT ALMOST EQUAL TOALMOST EQUAL OR EQUAL TO" + + "TRIPLE TILDEALL EQUAL TOEQUIVALENT TOGEOMETRICALLY EQUIVALENT TODIFFEREN" + + "CE BETWEENAPPROACHES THE LIMITGEOMETRICALLY EQUAL TOAPPROXIMATELY EQUAL " + + "TO OR THE IMAGE OFIMAGE OF OR APPROXIMATELY EQUAL TOCOLON EQUALSEQUALS C" + + "OLONRING IN EQUAL TORING EQUAL TOCORRESPONDS TOESTIMATESEQUIANGULAR TOST" + + "AR EQUALSDELTA EQUAL TOEQUAL TO BY DEFINITIONMEASURED BYQUESTIONED EQUAL" + + " TONOT EQUAL TOIDENTICAL TONOT IDENTICAL TOSTRICTLY EQUIVALENT TOLESS-TH" + + "AN OR EQUAL TOGREATER-THAN OR EQUAL TOLESS-THAN OVER EQUAL TOGREATER-THA" + + "N OVER EQUAL TOLESS-THAN BUT NOT EQUAL TOGREATER-THAN BUT NOT EQUAL TOMU" + + "CH LESS-THANMUCH GREATER-THANBETWEENNOT EQUIVALENT TONOT LESS-THANNOT GR" + + "EATER-THANNEITHER LESS-THAN NOR EQUAL TONEITHER GREATER-THAN NOR EQUAL T" + + "OLESS-THAN OR EQUIVALENT TOGREATER-THAN OR EQUIVALENT TONEITHER LESS-THA" + + "N NOR EQUIVALENT TONEITHER GREATER-THAN NOR EQUIVALENT TOLESS-THAN OR GR" + + "EATER-THANGREATER-THAN OR LESS-THANNEITHER LESS-THAN NOR GREATER-THANNEI" + + "THER GREATER-THAN NOR LESS-THANPRECEDESSUCCEEDSPRECEDES OR EQUAL TOSUCCE" + + "EDS OR EQUAL TOPRECEDES OR EQUIVALENT TOSUCCEEDS OR EQUIVALENT TODOES NO" + + "T PRECEDEDOES NOT SUCCEEDSUBSET OFSUPERSET OFNOT A SUBSET OFNOT A SUPERS" + + "ET OFSUBSET OF OR EQUAL TOSUPERSET OF OR EQUAL TONEITHER A SUBSET OF NOR") + ("" + + " EQUAL TONEITHER A SUPERSET OF NOR EQUAL TOSUBSET OF WITH NOT EQUAL TOSU" + + "PERSET OF WITH NOT EQUAL TOMULTISETMULTISET MULTIPLICATIONMULTISET UNION" + + "SQUARE IMAGE OFSQUARE ORIGINAL OFSQUARE IMAGE OF OR EQUAL TOSQUARE ORIGI" + + "NAL OF OR EQUAL TOSQUARE CAPSQUARE CUPCIRCLED PLUSCIRCLED MINUSCIRCLED T" + + "IMESCIRCLED DIVISION SLASHCIRCLED DOT OPERATORCIRCLED RING OPERATORCIRCL" + + "ED ASTERISK OPERATORCIRCLED EQUALSCIRCLED DASHSQUARED PLUSSQUARED MINUSS" + + "QUARED TIMESSQUARED DOT OPERATORRIGHT TACKLEFT TACKDOWN TACKUP TACKASSER" + + "TIONMODELSTRUEFORCESTRIPLE VERTICAL BAR RIGHT TURNSTILEDOUBLE VERTICAL B" + + "AR DOUBLE RIGHT TURNSTILEDOES NOT PROVENOT TRUEDOES NOT FORCENEGATED DOU" + + "BLE VERTICAL BAR DOUBLE RIGHT TURNSTILEPRECEDES UNDER RELATIONSUCCEEDS U" + + "NDER RELATIONNORMAL SUBGROUP OFCONTAINS AS NORMAL SUBGROUPNORMAL SUBGROU" + + "P OF OR EQUAL TOCONTAINS AS NORMAL SUBGROUP OR EQUAL TOORIGINAL OFIMAGE " + + "OFMULTIMAPHERMITIAN CONJUGATE MATRIXINTERCALATEXORNANDNORRIGHT ANGLE WIT" + + "H ARCRIGHT TRIANGLEN-ARY LOGICAL ANDN-ARY LOGICAL ORN-ARY INTERSECTIONN-" + + "ARY UNIONDIAMOND OPERATORDOT OPERATORSTAR OPERATORDIVISION TIMESBOWTIELE" + + "FT NORMAL FACTOR SEMIDIRECT PRODUCTRIGHT NORMAL FACTOR SEMIDIRECT PRODUC" + + "TLEFT SEMIDIRECT PRODUCTRIGHT SEMIDIRECT PRODUCTREVERSED TILDE EQUALSCUR" + + "LY LOGICAL ORCURLY LOGICAL ANDDOUBLE SUBSETDOUBLE SUPERSETDOUBLE INTERSE" + + "CTIONDOUBLE UNIONPITCHFORKEQUAL AND PARALLEL TOLESS-THAN WITH DOTGREATER" + + "-THAN WITH DOTVERY MUCH LESS-THANVERY MUCH GREATER-THANLESS-THAN EQUAL T" + + "O OR GREATER-THANGREATER-THAN EQUAL TO OR LESS-THANEQUAL TO OR LESS-THAN" + + "EQUAL TO OR GREATER-THANEQUAL TO OR PRECEDESEQUAL TO OR SUCCEEDSDOES NOT" + + " PRECEDE OR EQUALDOES NOT SUCCEED OR EQUALNOT SQUARE IMAGE OF OR EQUAL T" + + "ONOT SQUARE ORIGINAL OF OR EQUAL TOSQUARE IMAGE OF OR NOT EQUAL TOSQUARE" + + " ORIGINAL OF OR NOT EQUAL TOLESS-THAN BUT NOT EQUIVALENT TOGREATER-THAN " + + "BUT NOT EQUIVALENT TOPRECEDES BUT NOT EQUIVALENT TOSUCCEEDS BUT NOT EQUI" + + "VALENT TONOT NORMAL SUBGROUP OFDOES NOT CONTAIN AS NORMAL SUBGROUPNOT NO" + + "RMAL SUBGROUP OF OR EQUAL TODOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL" + + "VERTICAL ELLIPSISMIDLINE HORIZONTAL ELLIPSISUP RIGHT DIAGONAL ELLIPSISDO" + + "WN RIGHT DIAGONAL ELLIPSISELEMENT OF WITH LONG HORIZONTAL STROKEELEMENT " + + "OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKESMALL ELEMENT OF WITH VE" + + "RTICAL BAR AT END OF HORIZONTAL STROKEELEMENT OF WITH DOT ABOVEELEMENT O" + + "F WITH OVERBARSMALL ELEMENT OF WITH OVERBARELEMENT OF WITH UNDERBARELEME" + + "NT OF WITH TWO HORIZONTAL STROKESCONTAINS WITH LONG HORIZONTAL STROKECON" + + "TAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKESMALL CONTAINS WITH V" + + "ERTICAL BAR AT END OF HORIZONTAL STROKECONTAINS WITH OVERBARSMALL CONTAI" + + "NS WITH OVERBARZ NOTATION BAG MEMBERSHIPDIAMETER SIGNELECTRIC ARROWHOUSE" + + "UP ARROWHEADDOWN ARROWHEADPROJECTIVEPERSPECTIVEWAVY LINELEFT CEILINGRIGH" + + "T CEILINGLEFT FLOORRIGHT FLOORBOTTOM RIGHT CROPBOTTOM LEFT CROPTOP RIGHT" + + " CROPTOP LEFT CROPREVERSED NOT SIGNSQUARE LOZENGEARCSEGMENTSECTORTELEPHO" + + "NE RECORDERPOSITION INDICATORVIEWDATA SQUAREPLACE OF INTEREST SIGNTURNED" + + " NOT SIGNWATCHHOURGLASSTOP LEFT CORNERTOP RIGHT CORNERBOTTOM LEFT CORNER" + + "BOTTOM RIGHT CORNERTOP HALF INTEGRALBOTTOM HALF INTEGRALFROWNSMILEUP ARR" + + "OWHEAD BETWEEN TWO HORIZONTAL BARSOPTION KEYERASE TO THE RIGHTX IN A REC" + + "TANGLE BOXKEYBOARDLEFT-POINTING ANGLE BRACKETRIGHT-POINTING ANGLE BRACKE" + + "TERASE TO THE LEFTBENZENE RINGCYLINDRICITYALL AROUND-PROFILESYMMETRYTOTA" + + "L RUNOUTDIMENSION ORIGINCONICAL TAPERSLOPECOUNTERBORECOUNTERSINKAPL FUNC" + + "TIONAL SYMBOL I-BEAMAPL FUNCTIONAL SYMBOL SQUISH QUADAPL FUNCTIONAL SYMB" + + "OL QUAD EQUALAPL FUNCTIONAL SYMBOL QUAD DIVIDEAPL FUNCTIONAL SYMBOL QUAD" + + " DIAMONDAPL FUNCTIONAL SYMBOL QUAD JOTAPL FUNCTIONAL SYMBOL QUAD CIRCLEA" + + "PL FUNCTIONAL SYMBOL CIRCLE STILEAPL FUNCTIONAL SYMBOL CIRCLE JOTAPL FUN" + + "CTIONAL SYMBOL SLASH BARAPL FUNCTIONAL SYMBOL BACKSLASH BARAPL FUNCTIONA" + + "L SYMBOL QUAD SLASHAPL FUNCTIONAL SYMBOL QUAD BACKSLASHAPL FUNCTIONAL SY" + + "MBOL QUAD LESS-THANAPL FUNCTIONAL SYMBOL QUAD GREATER-THANAPL FUNCTIONAL" + + " SYMBOL LEFTWARDS VANEAPL FUNCTIONAL SYMBOL RIGHTWARDS VANEAPL FUNCTIONA" + + "L SYMBOL QUAD LEFTWARDS ARROWAPL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW" + + "APL FUNCTIONAL SYMBOL CIRCLE BACKSLASHAPL FUNCTIONAL SYMBOL DOWN TACK UN" + + "DERBARAPL FUNCTIONAL SYMBOL DELTA STILEAPL FUNCTIONAL SYMBOL QUAD DOWN C" + + "ARETAPL FUNCTIONAL SYMBOL QUAD DELTAAPL FUNCTIONAL SYMBOL DOWN TACK JOTA" + + "PL FUNCTIONAL SYMBOL UPWARDS VANEAPL FUNCTIONAL SYMBOL QUAD UPWARDS ARRO" + + "WAPL FUNCTIONAL SYMBOL UP TACK OVERBARAPL FUNCTIONAL SYMBOL DEL STILEAPL" + + " FUNCTIONAL SYMBOL QUAD UP CARETAPL FUNCTIONAL SYMBOL QUAD DELAPL FUNCTI" + + "ONAL SYMBOL UP TACK JOTAPL FUNCTIONAL SYMBOL DOWNWARDS VANEAPL FUNCTIONA" + + "L SYMBOL QUAD DOWNWARDS ARROWAPL FUNCTIONAL SYMBOL QUOTE UNDERBARAPL FUN") + ("" + + "CTIONAL SYMBOL DELTA UNDERBARAPL FUNCTIONAL SYMBOL DIAMOND UNDERBARAPL F" + + "UNCTIONAL SYMBOL JOT UNDERBARAPL FUNCTIONAL SYMBOL CIRCLE UNDERBARAPL FU" + + "NCTIONAL SYMBOL UP SHOE JOTAPL FUNCTIONAL SYMBOL QUOTE QUADAPL FUNCTIONA" + + "L SYMBOL CIRCLE STARAPL FUNCTIONAL SYMBOL QUAD COLONAPL FUNCTIONAL SYMBO" + + "L UP TACK DIAERESISAPL FUNCTIONAL SYMBOL DEL DIAERESISAPL FUNCTIONAL SYM" + + "BOL STAR DIAERESISAPL FUNCTIONAL SYMBOL JOT DIAERESISAPL FUNCTIONAL SYMB" + + "OL CIRCLE DIAERESISAPL FUNCTIONAL SYMBOL DOWN SHOE STILEAPL FUNCTIONAL S" + + "YMBOL LEFT SHOE STILEAPL FUNCTIONAL SYMBOL TILDE DIAERESISAPL FUNCTIONAL" + + " SYMBOL GREATER-THAN DIAERESISAPL FUNCTIONAL SYMBOL COMMA BARAPL FUNCTIO" + + "NAL SYMBOL DEL TILDEAPL FUNCTIONAL SYMBOL ZILDEAPL FUNCTIONAL SYMBOL STI" + + "LE TILDEAPL FUNCTIONAL SYMBOL SEMICOLON UNDERBARAPL FUNCTIONAL SYMBOL QU" + + "AD NOT EQUALAPL FUNCTIONAL SYMBOL QUAD QUESTIONAPL FUNCTIONAL SYMBOL DOW" + + "N CARET TILDEAPL FUNCTIONAL SYMBOL UP CARET TILDEAPL FUNCTIONAL SYMBOL I" + + "OTAAPL FUNCTIONAL SYMBOL RHOAPL FUNCTIONAL SYMBOL OMEGAAPL FUNCTIONAL SY" + + "MBOL ALPHA UNDERBARAPL FUNCTIONAL SYMBOL EPSILON UNDERBARAPL FUNCTIONAL " + + "SYMBOL IOTA UNDERBARAPL FUNCTIONAL SYMBOL OMEGA UNDERBARAPL FUNCTIONAL S" + + "YMBOL ALPHANOT CHECK MARKRIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROWSHOULDER" + + "ED OPEN BOXBELL SYMBOLVERTICAL LINE WITH MIDDLE DOTINSERTION SYMBOLCONTI" + + "NUOUS UNDERLINE SYMBOLDISCONTINUOUS UNDERLINE SYMBOLEMPHASIS SYMBOLCOMPO" + + "SITION SYMBOLWHITE SQUARE WITH CENTRE VERTICAL LINEENTER SYMBOLALTERNATI" + + "VE KEY SYMBOLHELM SYMBOLCIRCLED HORIZONTAL BAR WITH NOTCHCIRCLED TRIANGL" + + "E DOWNBROKEN CIRCLE WITH NORTHWEST ARROWUNDO SYMBOLMONOSTABLE SYMBOLHYST" + + "ERESIS SYMBOLOPEN-CIRCUIT-OUTPUT H-TYPE SYMBOLOPEN-CIRCUIT-OUTPUT L-TYPE" + + " SYMBOLPASSIVE-PULL-DOWN-OUTPUT SYMBOLPASSIVE-PULL-UP-OUTPUT SYMBOLDIREC" + + "T CURRENT SYMBOL FORM TWOSOFTWARE-FUNCTION SYMBOLAPL FUNCTIONAL SYMBOL Q" + + "UADDECIMAL SEPARATOR KEY SYMBOLPREVIOUS PAGENEXT PAGEPRINT SCREEN SYMBOL" + + "CLEAR SCREEN SYMBOLLEFT PARENTHESIS UPPER HOOKLEFT PARENTHESIS EXTENSION" + + "LEFT PARENTHESIS LOWER HOOKRIGHT PARENTHESIS UPPER HOOKRIGHT PARENTHESIS" + + " EXTENSIONRIGHT PARENTHESIS LOWER HOOKLEFT SQUARE BRACKET UPPER CORNERLE" + + "FT SQUARE BRACKET EXTENSIONLEFT SQUARE BRACKET LOWER CORNERRIGHT SQUARE " + + "BRACKET UPPER CORNERRIGHT SQUARE BRACKET EXTENSIONRIGHT SQUARE BRACKET L" + + "OWER CORNERLEFT CURLY BRACKET UPPER HOOKLEFT CURLY BRACKET MIDDLE PIECEL" + + "EFT CURLY BRACKET LOWER HOOKCURLY BRACKET EXTENSIONRIGHT CURLY BRACKET U" + + "PPER HOOKRIGHT CURLY BRACKET MIDDLE PIECERIGHT CURLY BRACKET LOWER HOOKI" + + "NTEGRAL EXTENSIONHORIZONTAL LINE EXTENSIONUPPER LEFT OR LOWER RIGHT CURL" + + "Y BRACKET SECTIONUPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTIONSUMMATIO" + + "N TOPSUMMATION BOTTOMTOP SQUARE BRACKETBOTTOM SQUARE BRACKETBOTTOM SQUAR" + + "E BRACKET OVER TOP SQUARE BRACKETRADICAL SYMBOL BOTTOMLEFT VERTICAL BOX " + + "LINERIGHT VERTICAL BOX LINEHORIZONTAL SCAN LINE-1HORIZONTAL SCAN LINE-3H" + + "ORIZONTAL SCAN LINE-7HORIZONTAL SCAN LINE-9DENTISTRY SYMBOL LIGHT VERTIC" + + "AL AND TOP RIGHTDENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHTDENTISTR" + + "Y SYMBOL LIGHT VERTICAL WITH CIRCLEDENTISTRY SYMBOL LIGHT DOWN AND HORIZ" + + "ONTAL WITH CIRCLEDENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLEDEN" + + "TISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLEDENTISTRY SYMBOL LIGHT DOWN AN" + + "D HORIZONTAL WITH TRIANGLEDENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH " + + "TRIANGLEDENTISTRY SYMBOL LIGHT VERTICAL AND WAVEDENTISTRY SYMBOL LIGHT D" + + "OWN AND HORIZONTAL WITH WAVEDENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WIT" + + "H WAVEDENTISTRY SYMBOL LIGHT DOWN AND HORIZONTALDENTISTRY SYMBOL LIGHT U" + + "P AND HORIZONTALDENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFTDENTISTRY SY" + + "MBOL LIGHT VERTICAL AND BOTTOM LEFTSQUARE FOOTRETURN SYMBOLEJECT SYMBOLV" + + "ERTICAL LINE EXTENSIONMETRICAL BREVEMETRICAL LONG OVER SHORTMETRICAL SHO" + + "RT OVER LONGMETRICAL LONG OVER TWO SHORTSMETRICAL TWO SHORTS OVER LONGME" + + "TRICAL TWO SHORTS JOINEDMETRICAL TRISEMEMETRICAL TETRASEMEMETRICAL PENTA" + + "SEMEEARTH GROUNDFUSETOP PARENTHESISBOTTOM PARENTHESISTOP CURLY BRACKETBO" + + "TTOM CURLY BRACKETTOP TORTOISE SHELL BRACKETBOTTOM TORTOISE SHELL BRACKE" + + "TWHITE TRAPEZIUMBENZENE RING WITH CIRCLESTRAIGHTNESSFLATNESSAC CURRENTEL" + + "ECTRICAL INTERSECTIONDECIMAL EXPONENT SYMBOLBLACK RIGHT-POINTING DOUBLE " + + "TRIANGLEBLACK LEFT-POINTING DOUBLE TRIANGLEBLACK UP-POINTING DOUBLE TRIA" + + "NGLEBLACK DOWN-POINTING DOUBLE TRIANGLEBLACK RIGHT-POINTING DOUBLE TRIAN" + + "GLE WITH VERTICAL BARBLACK LEFT-POINTING DOUBLE TRIANGLE WITH VERTICAL B" + + "ARBLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BARALARM CLOCKSTOPW" + + "ATCHTIMER CLOCKHOURGLASS WITH FLOWING SANDBLACK MEDIUM LEFT-POINTING TRI" + + "ANGLEBLACK MEDIUM RIGHT-POINTING TRIANGLEBLACK MEDIUM UP-POINTING TRIANG" + + "LEBLACK MEDIUM DOWN-POINTING TRIANGLEDOUBLE VERTICAL BARBLACK SQUARE FOR") + ("" + + " STOPBLACK CIRCLE FOR RECORDPOWER SYMBOLPOWER ON-OFF SYMBOLPOWER ON SYMB" + + "OLPOWER SLEEP SYMBOLSYMBOL FOR NULLSYMBOL FOR START OF HEADINGSYMBOL FOR" + + " START OF TEXTSYMBOL FOR END OF TEXTSYMBOL FOR END OF TRANSMISSIONSYMBOL" + + " FOR ENQUIRYSYMBOL FOR ACKNOWLEDGESYMBOL FOR BELLSYMBOL FOR BACKSPACESYM" + + "BOL FOR HORIZONTAL TABULATIONSYMBOL FOR LINE FEEDSYMBOL FOR VERTICAL TAB" + + "ULATIONSYMBOL FOR FORM FEEDSYMBOL FOR CARRIAGE RETURNSYMBOL FOR SHIFT OU" + + "TSYMBOL FOR SHIFT INSYMBOL FOR DATA LINK ESCAPESYMBOL FOR DEVICE CONTROL" + + " ONESYMBOL FOR DEVICE CONTROL TWOSYMBOL FOR DEVICE CONTROL THREESYMBOL F" + + "OR DEVICE CONTROL FOURSYMBOL FOR NEGATIVE ACKNOWLEDGESYMBOL FOR SYNCHRON" + + "OUS IDLESYMBOL FOR END OF TRANSMISSION BLOCKSYMBOL FOR CANCELSYMBOL FOR " + + "END OF MEDIUMSYMBOL FOR SUBSTITUTESYMBOL FOR ESCAPESYMBOL FOR FILE SEPAR" + + "ATORSYMBOL FOR GROUP SEPARATORSYMBOL FOR RECORD SEPARATORSYMBOL FOR UNIT" + + " SEPARATORSYMBOL FOR SPACESYMBOL FOR DELETEBLANK SYMBOLOPEN BOXSYMBOL FO" + + "R NEWLINESYMBOL FOR DELETE FORM TWOSYMBOL FOR SUBSTITUTE FORM TWOOCR HOO" + + "KOCR CHAIROCR FORKOCR INVERTED FORKOCR BELT BUCKLEOCR BOW TIEOCR BRANCH " + + "BANK IDENTIFICATIONOCR AMOUNT OF CHECKOCR DASHOCR CUSTOMER ACCOUNT NUMBE" + + "ROCR DOUBLE BACKSLASHCIRCLED DIGIT ONECIRCLED DIGIT TWOCIRCLED DIGIT THR" + + "EECIRCLED DIGIT FOURCIRCLED DIGIT FIVECIRCLED DIGIT SIXCIRCLED DIGIT SEV" + + "ENCIRCLED DIGIT EIGHTCIRCLED DIGIT NINECIRCLED NUMBER TENCIRCLED NUMBER " + + "ELEVENCIRCLED NUMBER TWELVECIRCLED NUMBER THIRTEENCIRCLED NUMBER FOURTEE" + + "NCIRCLED NUMBER FIFTEENCIRCLED NUMBER SIXTEENCIRCLED NUMBER SEVENTEENCIR" + + "CLED NUMBER EIGHTEENCIRCLED NUMBER NINETEENCIRCLED NUMBER TWENTYPARENTHE" + + "SIZED DIGIT ONEPARENTHESIZED DIGIT TWOPARENTHESIZED DIGIT THREEPARENTHES" + + "IZED DIGIT FOURPARENTHESIZED DIGIT FIVEPARENTHESIZED DIGIT SIXPARENTHESI" + + "ZED DIGIT SEVENPARENTHESIZED DIGIT EIGHTPARENTHESIZED DIGIT NINEPARENTHE" + + "SIZED NUMBER TENPARENTHESIZED NUMBER ELEVENPARENTHESIZED NUMBER TWELVEPA" + + "RENTHESIZED NUMBER THIRTEENPARENTHESIZED NUMBER FOURTEENPARENTHESIZED NU" + + "MBER FIFTEENPARENTHESIZED NUMBER SIXTEENPARENTHESIZED NUMBER SEVENTEENPA" + + "RENTHESIZED NUMBER EIGHTEENPARENTHESIZED NUMBER NINETEENPARENTHESIZED NU" + + "MBER TWENTYDIGIT ONE FULL STOPDIGIT TWO FULL STOPDIGIT THREE FULL STOPDI" + + "GIT FOUR FULL STOPDIGIT FIVE FULL STOPDIGIT SIX FULL STOPDIGIT SEVEN FUL" + + "L STOPDIGIT EIGHT FULL STOPDIGIT NINE FULL STOPNUMBER TEN FULL STOPNUMBE" + + "R ELEVEN FULL STOPNUMBER TWELVE FULL STOPNUMBER THIRTEEN FULL STOPNUMBER" + + " FOURTEEN FULL STOPNUMBER FIFTEEN FULL STOPNUMBER SIXTEEN FULL STOPNUMBE" + + "R SEVENTEEN FULL STOPNUMBER EIGHTEEN FULL STOPNUMBER NINETEEN FULL STOPN" + + "UMBER TWENTY FULL STOPPARENTHESIZED LATIN SMALL LETTER APARENTHESIZED LA" + + "TIN SMALL LETTER BPARENTHESIZED LATIN SMALL LETTER CPARENTHESIZED LATIN " + + "SMALL LETTER DPARENTHESIZED LATIN SMALL LETTER EPARENTHESIZED LATIN SMAL" + + "L LETTER FPARENTHESIZED LATIN SMALL LETTER GPARENTHESIZED LATIN SMALL LE" + + "TTER HPARENTHESIZED LATIN SMALL LETTER IPARENTHESIZED LATIN SMALL LETTER" + + " JPARENTHESIZED LATIN SMALL LETTER KPARENTHESIZED LATIN SMALL LETTER LPA" + + "RENTHESIZED LATIN SMALL LETTER MPARENTHESIZED LATIN SMALL LETTER NPARENT" + + "HESIZED LATIN SMALL LETTER OPARENTHESIZED LATIN SMALL LETTER PPARENTHESI" + + "ZED LATIN SMALL LETTER QPARENTHESIZED LATIN SMALL LETTER RPARENTHESIZED " + + "LATIN SMALL LETTER SPARENTHESIZED LATIN SMALL LETTER TPARENTHESIZED LATI" + + "N SMALL LETTER UPARENTHESIZED LATIN SMALL LETTER VPARENTHESIZED LATIN SM" + + "ALL LETTER WPARENTHESIZED LATIN SMALL LETTER XPARENTHESIZED LATIN SMALL " + + "LETTER YPARENTHESIZED LATIN SMALL LETTER ZCIRCLED LATIN CAPITAL LETTER A" + + "CIRCLED LATIN CAPITAL LETTER BCIRCLED LATIN CAPITAL LETTER CCIRCLED LATI" + + "N CAPITAL LETTER DCIRCLED LATIN CAPITAL LETTER ECIRCLED LATIN CAPITAL LE" + + "TTER FCIRCLED LATIN CAPITAL LETTER GCIRCLED LATIN CAPITAL LETTER HCIRCLE" + + "D LATIN CAPITAL LETTER ICIRCLED LATIN CAPITAL LETTER JCIRCLED LATIN CAPI" + + "TAL LETTER KCIRCLED LATIN CAPITAL LETTER LCIRCLED LATIN CAPITAL LETTER M" + + "CIRCLED LATIN CAPITAL LETTER NCIRCLED LATIN CAPITAL LETTER OCIRCLED LATI" + + "N CAPITAL LETTER PCIRCLED LATIN CAPITAL LETTER QCIRCLED LATIN CAPITAL LE" + + "TTER RCIRCLED LATIN CAPITAL LETTER SCIRCLED LATIN CAPITAL LETTER TCIRCLE" + + "D LATIN CAPITAL LETTER UCIRCLED LATIN CAPITAL LETTER VCIRCLED LATIN CAPI" + + "TAL LETTER WCIRCLED LATIN CAPITAL LETTER XCIRCLED LATIN CAPITAL LETTER Y" + + "CIRCLED LATIN CAPITAL LETTER ZCIRCLED LATIN SMALL LETTER ACIRCLED LATIN " + + "SMALL LETTER BCIRCLED LATIN SMALL LETTER CCIRCLED LATIN SMALL LETTER DCI" + + "RCLED LATIN SMALL LETTER ECIRCLED LATIN SMALL LETTER FCIRCLED LATIN SMAL" + + "L LETTER GCIRCLED LATIN SMALL LETTER HCIRCLED LATIN SMALL LETTER ICIRCLE" + + "D LATIN SMALL LETTER JCIRCLED LATIN SMALL LETTER KCIRCLED LATIN SMALL LE" + + "TTER LCIRCLED LATIN SMALL LETTER MCIRCLED LATIN SMALL LETTER NCIRCLED LA") + ("" + + "TIN SMALL LETTER OCIRCLED LATIN SMALL LETTER PCIRCLED LATIN SMALL LETTER" + + " QCIRCLED LATIN SMALL LETTER RCIRCLED LATIN SMALL LETTER SCIRCLED LATIN " + + "SMALL LETTER TCIRCLED LATIN SMALL LETTER UCIRCLED LATIN SMALL LETTER VCI" + + "RCLED LATIN SMALL LETTER WCIRCLED LATIN SMALL LETTER XCIRCLED LATIN SMAL" + + "L LETTER YCIRCLED LATIN SMALL LETTER ZCIRCLED DIGIT ZERONEGATIVE CIRCLED" + + " NUMBER ELEVENNEGATIVE CIRCLED NUMBER TWELVENEGATIVE CIRCLED NUMBER THIR" + + "TEENNEGATIVE CIRCLED NUMBER FOURTEENNEGATIVE CIRCLED NUMBER FIFTEENNEGAT" + + "IVE CIRCLED NUMBER SIXTEENNEGATIVE CIRCLED NUMBER SEVENTEENNEGATIVE CIRC" + + "LED NUMBER EIGHTEENNEGATIVE CIRCLED NUMBER NINETEENNEGATIVE CIRCLED NUMB" + + "ER TWENTYDOUBLE CIRCLED DIGIT ONEDOUBLE CIRCLED DIGIT TWODOUBLE CIRCLED " + + "DIGIT THREEDOUBLE CIRCLED DIGIT FOURDOUBLE CIRCLED DIGIT FIVEDOUBLE CIRC" + + "LED DIGIT SIXDOUBLE CIRCLED DIGIT SEVENDOUBLE CIRCLED DIGIT EIGHTDOUBLE " + + "CIRCLED DIGIT NINEDOUBLE CIRCLED NUMBER TENNEGATIVE CIRCLED DIGIT ZEROBO" + + "X DRAWINGS LIGHT HORIZONTALBOX DRAWINGS HEAVY HORIZONTALBOX DRAWINGS LIG" + + "HT VERTICALBOX DRAWINGS HEAVY VERTICALBOX DRAWINGS LIGHT TRIPLE DASH HOR" + + "IZONTALBOX DRAWINGS HEAVY TRIPLE DASH HORIZONTALBOX DRAWINGS LIGHT TRIPL" + + "E DASH VERTICALBOX DRAWINGS HEAVY TRIPLE DASH VERTICALBOX DRAWINGS LIGHT" + + " QUADRUPLE DASH HORIZONTALBOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTALBO" + + "X DRAWINGS LIGHT QUADRUPLE DASH VERTICALBOX DRAWINGS HEAVY QUADRUPLE DAS" + + "H VERTICALBOX DRAWINGS LIGHT DOWN AND RIGHTBOX DRAWINGS DOWN LIGHT AND R" + + "IGHT HEAVYBOX DRAWINGS DOWN HEAVY AND RIGHT LIGHTBOX DRAWINGS HEAVY DOWN" + + " AND RIGHTBOX DRAWINGS LIGHT DOWN AND LEFTBOX DRAWINGS DOWN LIGHT AND LE" + + "FT HEAVYBOX DRAWINGS DOWN HEAVY AND LEFT LIGHTBOX DRAWINGS HEAVY DOWN AN" + + "D LEFTBOX DRAWINGS LIGHT UP AND RIGHTBOX DRAWINGS UP LIGHT AND RIGHT HEA" + + "VYBOX DRAWINGS UP HEAVY AND RIGHT LIGHTBOX DRAWINGS HEAVY UP AND RIGHTBO" + + "X DRAWINGS LIGHT UP AND LEFTBOX DRAWINGS UP LIGHT AND LEFT HEAVYBOX DRAW" + + "INGS UP HEAVY AND LEFT LIGHTBOX DRAWINGS HEAVY UP AND LEFTBOX DRAWINGS L" + + "IGHT VERTICAL AND RIGHTBOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVYBOX DR" + + "AWINGS UP HEAVY AND RIGHT DOWN LIGHTBOX DRAWINGS DOWN HEAVY AND RIGHT UP" + + " LIGHTBOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHTBOX DRAWINGS DOWN LIGHT" + + " AND RIGHT UP HEAVYBOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVYBOX DRAWING" + + "S HEAVY VERTICAL AND RIGHTBOX DRAWINGS LIGHT VERTICAL AND LEFTBOX DRAWIN" + + "GS VERTICAL LIGHT AND LEFT HEAVYBOX DRAWINGS UP HEAVY AND LEFT DOWN LIGH" + + "TBOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHTBOX DRAWINGS VERTICAL HEAVY AN" + + "D LEFT LIGHTBOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVYBOX DRAWINGS UP LIG" + + "HT AND LEFT DOWN HEAVYBOX DRAWINGS HEAVY VERTICAL AND LEFTBOX DRAWINGS L" + + "IGHT DOWN AND HORIZONTALBOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHTBOX " + + "DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHTBOX DRAWINGS DOWN LIGHT AND HORI" + + "ZONTAL HEAVYBOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHTBOX DRAWINGS RIG" + + "HT LIGHT AND LEFT DOWN HEAVYBOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY" + + "BOX DRAWINGS HEAVY DOWN AND HORIZONTALBOX DRAWINGS LIGHT UP AND HORIZONT" + + "ALBOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHTBOX DRAWINGS RIGHT HEAVY AND" + + " LEFT UP LIGHTBOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVYBOX DRAWINGS UP " + + "HEAVY AND HORIZONTAL LIGHTBOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVYBOX " + + "DRAWINGS LEFT LIGHT AND RIGHT UP HEAVYBOX DRAWINGS HEAVY UP AND HORIZONT" + + "ALBOX DRAWINGS LIGHT VERTICAL AND HORIZONTALBOX DRAWINGS LEFT HEAVY AND " + + "RIGHT VERTICAL LIGHTBOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHTBOX " + + "DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVYBOX DRAWINGS UP HEAVY AND DO" + + "WN HORIZONTAL LIGHTBOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHTBOX DR" + + "AWINGS VERTICAL HEAVY AND HORIZONTAL LIGHTBOX DRAWINGS LEFT UP HEAVY AND" + + " RIGHT DOWN LIGHTBOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHTBOX DRAW" + + "INGS LEFT DOWN HEAVY AND RIGHT UP LIGHTBOX DRAWINGS RIGHT DOWN HEAVY AND" + + " LEFT UP LIGHTBOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVYBOX DRAWING" + + "S UP LIGHT AND DOWN HORIZONTAL HEAVYBOX DRAWINGS RIGHT LIGHT AND LEFT VE" + + "RTICAL HEAVYBOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVYBOX DRAWINGS" + + " HEAVY VERTICAL AND HORIZONTALBOX DRAWINGS LIGHT DOUBLE DASH HORIZONTALB" + + "OX DRAWINGS HEAVY DOUBLE DASH HORIZONTALBOX DRAWINGS LIGHT DOUBLE DASH V" + + "ERTICALBOX DRAWINGS HEAVY DOUBLE DASH VERTICALBOX DRAWINGS DOUBLE HORIZO" + + "NTALBOX DRAWINGS DOUBLE VERTICALBOX DRAWINGS DOWN SINGLE AND RIGHT DOUBL" + + "EBOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLEBOX DRAWINGS DOUBLE DOWN AND R" + + "IGHTBOX DRAWINGS DOWN SINGLE AND LEFT DOUBLEBOX DRAWINGS DOWN DOUBLE AND" + + " LEFT SINGLEBOX DRAWINGS DOUBLE DOWN AND LEFTBOX DRAWINGS UP SINGLE AND " + + "RIGHT DOUBLEBOX DRAWINGS UP DOUBLE AND RIGHT SINGLEBOX DRAWINGS DOUBLE U" + + "P AND RIGHTBOX DRAWINGS UP SINGLE AND LEFT DOUBLEBOX DRAWINGS UP DOUBLE ") + ("" + + "AND LEFT SINGLEBOX DRAWINGS DOUBLE UP AND LEFTBOX DRAWINGS VERTICAL SING" + + "LE AND RIGHT DOUBLEBOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLEBOX DRAW" + + "INGS DOUBLE VERTICAL AND RIGHTBOX DRAWINGS VERTICAL SINGLE AND LEFT DOUB" + + "LEBOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLEBOX DRAWINGS DOUBLE VERTIC" + + "AL AND LEFTBOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLEBOX DRAWINGS DO" + + "WN DOUBLE AND HORIZONTAL SINGLEBOX DRAWINGS DOUBLE DOWN AND HORIZONTALBO" + + "X DRAWINGS UP SINGLE AND HORIZONTAL DOUBLEBOX DRAWINGS UP DOUBLE AND HOR" + + "IZONTAL SINGLEBOX DRAWINGS DOUBLE UP AND HORIZONTALBOX DRAWINGS VERTICAL" + + " SINGLE AND HORIZONTAL DOUBLEBOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL" + + " SINGLEBOX DRAWINGS DOUBLE VERTICAL AND HORIZONTALBOX DRAWINGS LIGHT ARC" + + " DOWN AND RIGHTBOX DRAWINGS LIGHT ARC DOWN AND LEFTBOX DRAWINGS LIGHT AR" + + "C UP AND LEFTBOX DRAWINGS LIGHT ARC UP AND RIGHTBOX DRAWINGS LIGHT DIAGO" + + "NAL UPPER RIGHT TO LOWER LEFTBOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO L" + + "OWER RIGHTBOX DRAWINGS LIGHT DIAGONAL CROSSBOX DRAWINGS LIGHT LEFTBOX DR" + + "AWINGS LIGHT UPBOX DRAWINGS LIGHT RIGHTBOX DRAWINGS LIGHT DOWNBOX DRAWIN" + + "GS HEAVY LEFTBOX DRAWINGS HEAVY UPBOX DRAWINGS HEAVY RIGHTBOX DRAWINGS H" + + "EAVY DOWNBOX DRAWINGS LIGHT LEFT AND HEAVY RIGHTBOX DRAWINGS LIGHT UP AN" + + "D HEAVY DOWNBOX DRAWINGS HEAVY LEFT AND LIGHT RIGHTBOX DRAWINGS HEAVY UP" + + " AND LIGHT DOWNUPPER HALF BLOCKLOWER ONE EIGHTH BLOCKLOWER ONE QUARTER B" + + "LOCKLOWER THREE EIGHTHS BLOCKLOWER HALF BLOCKLOWER FIVE EIGHTHS BLOCKLOW" + + "ER THREE QUARTERS BLOCKLOWER SEVEN EIGHTHS BLOCKFULL BLOCKLEFT SEVEN EIG" + + "HTHS BLOCKLEFT THREE QUARTERS BLOCKLEFT FIVE EIGHTHS BLOCKLEFT HALF BLOC" + + "KLEFT THREE EIGHTHS BLOCKLEFT ONE QUARTER BLOCKLEFT ONE EIGHTH BLOCKRIGH" + + "T HALF BLOCKLIGHT SHADEMEDIUM SHADEDARK SHADEUPPER ONE EIGHTH BLOCKRIGHT" + + " ONE EIGHTH BLOCKQUADRANT LOWER LEFTQUADRANT LOWER RIGHTQUADRANT UPPER L" + + "EFTQUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHTQUADRANT UPPER LEFT" + + " AND LOWER RIGHTQUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFTQUADRA" + + "NT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHTQUADRANT UPPER RIGHTQUADRAN" + + "T UPPER RIGHT AND LOWER LEFTQUADRANT UPPER RIGHT AND LOWER LEFT AND LOWE" + + "R RIGHTBLACK SQUAREWHITE SQUAREWHITE SQUARE WITH ROUNDED CORNERSWHITE SQ" + + "UARE CONTAINING BLACK SMALL SQUARESQUARE WITH HORIZONTAL FILLSQUARE WITH" + + " VERTICAL FILLSQUARE WITH ORTHOGONAL CROSSHATCH FILLSQUARE WITH UPPER LE" + + "FT TO LOWER RIGHT FILLSQUARE WITH UPPER RIGHT TO LOWER LEFT FILLSQUARE W" + + "ITH DIAGONAL CROSSHATCH FILLBLACK SMALL SQUAREWHITE SMALL SQUAREBLACK RE" + + "CTANGLEWHITE RECTANGLEBLACK VERTICAL RECTANGLEWHITE VERTICAL RECTANGLEBL" + + "ACK PARALLELOGRAMWHITE PARALLELOGRAMBLACK UP-POINTING TRIANGLEWHITE UP-P" + + "OINTING TRIANGLEBLACK UP-POINTING SMALL TRIANGLEWHITE UP-POINTING SMALL " + + "TRIANGLEBLACK RIGHT-POINTING TRIANGLEWHITE RIGHT-POINTING TRIANGLEBLACK " + + "RIGHT-POINTING SMALL TRIANGLEWHITE RIGHT-POINTING SMALL TRIANGLEBLACK RI" + + "GHT-POINTING POINTERWHITE RIGHT-POINTING POINTERBLACK DOWN-POINTING TRIA" + + "NGLEWHITE DOWN-POINTING TRIANGLEBLACK DOWN-POINTING SMALL TRIANGLEWHITE " + + "DOWN-POINTING SMALL TRIANGLEBLACK LEFT-POINTING TRIANGLEWHITE LEFT-POINT" + + "ING TRIANGLEBLACK LEFT-POINTING SMALL TRIANGLEWHITE LEFT-POINTING SMALL " + + "TRIANGLEBLACK LEFT-POINTING POINTERWHITE LEFT-POINTING POINTERBLACK DIAM" + + "ONDWHITE DIAMONDWHITE DIAMOND CONTAINING BLACK SMALL DIAMONDFISHEYELOZEN" + + "GEWHITE CIRCLEDOTTED CIRCLECIRCLE WITH VERTICAL FILLBULLSEYEBLACK CIRCLE" + + "CIRCLE WITH LEFT HALF BLACKCIRCLE WITH RIGHT HALF BLACKCIRCLE WITH LOWER" + + " HALF BLACKCIRCLE WITH UPPER HALF BLACKCIRCLE WITH UPPER RIGHT QUADRANT " + + "BLACKCIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACKLEFT HALF BLACK CIRCLE" + + "RIGHT HALF BLACK CIRCLEINVERSE BULLETINVERSE WHITE CIRCLEUPPER HALF INVE" + + "RSE WHITE CIRCLELOWER HALF INVERSE WHITE CIRCLEUPPER LEFT QUADRANT CIRCU" + + "LAR ARCUPPER RIGHT QUADRANT CIRCULAR ARCLOWER RIGHT QUADRANT CIRCULAR AR" + + "CLOWER LEFT QUADRANT CIRCULAR ARCUPPER HALF CIRCLELOWER HALF CIRCLEBLACK" + + " LOWER RIGHT TRIANGLEBLACK LOWER LEFT TRIANGLEBLACK UPPER LEFT TRIANGLEB" + + "LACK UPPER RIGHT TRIANGLEWHITE BULLETSQUARE WITH LEFT HALF BLACKSQUARE W" + + "ITH RIGHT HALF BLACKSQUARE WITH UPPER LEFT DIAGONAL HALF BLACKSQUARE WIT" + + "H LOWER RIGHT DIAGONAL HALF BLACKWHITE SQUARE WITH VERTICAL BISECTING LI" + + "NEWHITE UP-POINTING TRIANGLE WITH DOTUP-POINTING TRIANGLE WITH LEFT HALF" + + " BLACKUP-POINTING TRIANGLE WITH RIGHT HALF BLACKLARGE CIRCLEWHITE SQUARE" + + " WITH UPPER LEFT QUADRANTWHITE SQUARE WITH LOWER LEFT QUADRANTWHITE SQUA" + + "RE WITH LOWER RIGHT QUADRANTWHITE SQUARE WITH UPPER RIGHT QUADRANTWHITE " + + "CIRCLE WITH UPPER LEFT QUADRANTWHITE CIRCLE WITH LOWER LEFT QUADRANTWHIT" + + "E CIRCLE WITH LOWER RIGHT QUADRANTWHITE CIRCLE WITH UPPER RIGHT QUADRANT" + + "UPPER LEFT TRIANGLEUPPER RIGHT TRIANGLELOWER LEFT TRIANGLEWHITE MEDIUM S") + ("" + + "QUAREBLACK MEDIUM SQUAREWHITE MEDIUM SMALL SQUAREBLACK MEDIUM SMALL SQUA" + + "RELOWER RIGHT TRIANGLEBLACK SUN WITH RAYSCLOUDUMBRELLASNOWMANCOMETBLACK " + + "STARWHITE STARLIGHTNINGTHUNDERSTORMSUNASCENDING NODEDESCENDING NODECONJU" + + "NCTIONOPPOSITIONBLACK TELEPHONEWHITE TELEPHONEBALLOT BOXBALLOT BOX WITH " + + "CHECKBALLOT BOX WITH XSALTIREUMBRELLA WITH RAIN DROPSHOT BEVERAGEWHITE S" + + "HOGI PIECEBLACK SHOGI PIECESHAMROCKREVERSED ROTATED FLORAL HEART BULLETB" + + "LACK LEFT POINTING INDEXBLACK RIGHT POINTING INDEXWHITE LEFT POINTING IN" + + "DEXWHITE UP POINTING INDEXWHITE RIGHT POINTING INDEXWHITE DOWN POINTING " + + "INDEXSKULL AND CROSSBONESCAUTION SIGNRADIOACTIVE SIGNBIOHAZARD SIGNCADUC" + + "EUSANKHORTHODOX CROSSCHI RHOCROSS OF LORRAINECROSS OF JERUSALEMSTAR AND " + + "CRESCENTFARSI SYMBOLADI SHAKTIHAMMER AND SICKLEPEACE SYMBOLYIN YANGTRIGR" + + "AM FOR HEAVENTRIGRAM FOR LAKETRIGRAM FOR FIRETRIGRAM FOR THUNDERTRIGRAM " + + "FOR WINDTRIGRAM FOR WATERTRIGRAM FOR MOUNTAINTRIGRAM FOR EARTHWHEEL OF D" + + "HARMAWHITE FROWNING FACEWHITE SMILING FACEBLACK SMILING FACEWHITE SUN WI" + + "TH RAYSFIRST QUARTER MOONLAST QUARTER MOONMERCURYFEMALE SIGNEARTHMALE SI" + + "GNJUPITERSATURNURANUSNEPTUNEPLUTOARIESTAURUSGEMINICANCERLEOVIRGOLIBRASCO" + + "RPIUSSAGITTARIUSCAPRICORNAQUARIUSPISCESWHITE CHESS KINGWHITE CHESS QUEEN" + + "WHITE CHESS ROOKWHITE CHESS BISHOPWHITE CHESS KNIGHTWHITE CHESS PAWNBLAC" + + "K CHESS KINGBLACK CHESS QUEENBLACK CHESS ROOKBLACK CHESS BISHOPBLACK CHE" + + "SS KNIGHTBLACK CHESS PAWNBLACK SPADE SUITWHITE HEART SUITWHITE DIAMOND S" + + "UITBLACK CLUB SUITWHITE SPADE SUITBLACK HEART SUITBLACK DIAMOND SUITWHIT" + + "E CLUB SUITHOT SPRINGSQUARTER NOTEEIGHTH NOTEBEAMED EIGHTH NOTESBEAMED S" + + "IXTEENTH NOTESMUSIC FLAT SIGNMUSIC NATURAL SIGNMUSIC SHARP SIGNWEST SYRI" + + "AC CROSSEAST SYRIAC CROSSUNIVERSAL RECYCLING SYMBOLRECYCLING SYMBOL FOR " + + "TYPE-1 PLASTICSRECYCLING SYMBOL FOR TYPE-2 PLASTICSRECYCLING SYMBOL FOR " + + "TYPE-3 PLASTICSRECYCLING SYMBOL FOR TYPE-4 PLASTICSRECYCLING SYMBOL FOR " + + "TYPE-5 PLASTICSRECYCLING SYMBOL FOR TYPE-6 PLASTICSRECYCLING SYMBOL FOR " + + "TYPE-7 PLASTICSRECYCLING SYMBOL FOR GENERIC MATERIALSBLACK UNIVERSAL REC" + + "YCLING SYMBOLRECYCLED PAPER SYMBOLPARTIALLY-RECYCLED PAPER SYMBOLPERMANE" + + "NT PAPER SIGNWHEELCHAIR SYMBOLDIE FACE-1DIE FACE-2DIE FACE-3DIE FACE-4DI" + + "E FACE-5DIE FACE-6WHITE CIRCLE WITH DOT RIGHTWHITE CIRCLE WITH TWO DOTSB" + + "LACK CIRCLE WITH WHITE DOT RIGHTBLACK CIRCLE WITH TWO WHITE DOTSMONOGRAM" + + " FOR YANGMONOGRAM FOR YINDIGRAM FOR GREATER YANGDIGRAM FOR LESSER YINDIG" + + "RAM FOR LESSER YANGDIGRAM FOR GREATER YINWHITE FLAGBLACK FLAGHAMMER AND " + + "PICKANCHORCROSSED SWORDSSTAFF OF AESCULAPIUSSCALESALEMBICFLOWERGEARSTAFF" + + " OF HERMESATOM SYMBOLFLEUR-DE-LISOUTLINED WHITE STARTHREE LINES CONVERGI" + + "NG RIGHTTHREE LINES CONVERGING LEFTWARNING SIGNHIGH VOLTAGE SIGNDOUBLED " + + "FEMALE SIGNDOUBLED MALE SIGNINTERLOCKED FEMALE AND MALE SIGNMALE AND FEM" + + "ALE SIGNMALE WITH STROKE SIGNMALE WITH STROKE AND MALE AND FEMALE SIGNVE" + + "RTICAL MALE WITH STROKE SIGNHORIZONTAL MALE WITH STROKE SIGNMEDIUM WHITE" + + " CIRCLEMEDIUM BLACK CIRCLEMEDIUM SMALL WHITE CIRCLEMARRIAGE SYMBOLDIVORC" + + "E SYMBOLUNMARRIED PARTNERSHIP SYMBOLCOFFINFUNERAL URNNEUTERCERESPALLASJU" + + "NOVESTACHIRONBLACK MOON LILITHSEXTILESEMISEXTILEQUINCUNXSESQUIQUADRATESO" + + "CCER BALLBASEBALLSQUARED KEYWHITE DRAUGHTS MANWHITE DRAUGHTS KINGBLACK D" + + "RAUGHTS MANBLACK DRAUGHTS KINGSNOWMAN WITHOUT SNOWSUN BEHIND CLOUDRAINBL" + + "ACK SNOWMANTHUNDER CLOUD AND RAINTURNED WHITE SHOGI PIECETURNED BLACK SH" + + "OGI PIECEWHITE DIAMOND IN SQUARECROSSING LANESDISABLED CAROPHIUCHUSPICKC" + + "AR SLIDINGHELMET WITH WHITE CROSSCIRCLED CROSSING LANESCHAINSNO ENTRYALT" + + "ERNATE ONE-WAY LEFT WAY TRAFFICBLACK TWO-WAY LEFT WAY TRAFFICWHITE TWO-W" + + "AY LEFT WAY TRAFFICBLACK LEFT LANE MERGEWHITE LEFT LANE MERGEDRIVE SLOW " + + "SIGNHEAVY WHITE DOWN-POINTING TRIANGLELEFT CLOSED ENTRYSQUARED SALTIREFA" + + "LLING DIAGONAL IN WHITE CIRCLE IN BLACK SQUAREBLACK TRUCKRESTRICTED LEFT" + + " ENTRY-1RESTRICTED LEFT ENTRY-2ASTRONOMICAL SYMBOL FOR URANUSHEAVY CIRCL" + + "E WITH STROKE AND TWO DOTS ABOVEPENTAGRAMRIGHT-HANDED INTERLACED PENTAGR" + + "AMLEFT-HANDED INTERLACED PENTAGRAMINVERTED PENTAGRAMBLACK CROSS ON SHIEL" + + "DSHINTO SHRINECHURCHCASTLEHISTORIC SITEGEAR WITHOUT HUBGEAR WITH HANDLES" + + "MAP SYMBOL FOR LIGHTHOUSEMOUNTAINUMBRELLA ON GROUNDFOUNTAINFLAG IN HOLEF" + + "ERRYSAILBOATSQUARE FOUR CORNERSSKIERICE SKATEPERSON WITH BALLTENTJAPANES" + + "E BANK SYMBOLHEADSTONE GRAVEYARD SYMBOLFUEL PUMPCUP ON BLACK SQUAREWHITE" + + " FLAG WITH HORIZONTAL MIDDLE BLACK STRIPEBLACK SAFETY SCISSORSUPPER BLAD" + + "E SCISSORSBLACK SCISSORSLOWER BLADE SCISSORSWHITE SCISSORSWHITE HEAVY CH" + + "ECK MARKTELEPHONE LOCATION SIGNTAPE DRIVEAIRPLANEENVELOPERAISED FISTRAIS" + + "ED HANDVICTORY HANDWRITING HANDLOWER RIGHT PENCILPENCILUPPER RIGHT PENCI" + + "LWHITE NIBBLACK NIBCHECK MARKHEAVY CHECK MARKMULTIPLICATION XHEAVY MULTI") + ("" + + "PLICATION XBALLOT XHEAVY BALLOT XOUTLINED GREEK CROSSHEAVY GREEK CROSSOP" + + "EN CENTRE CROSSHEAVY OPEN CENTRE CROSSLATIN CROSSSHADOWED WHITE LATIN CR" + + "OSSOUTLINED LATIN CROSSMALTESE CROSSSTAR OF DAVIDFOUR TEARDROP-SPOKED AS" + + "TERISKFOUR BALLOON-SPOKED ASTERISKHEAVY FOUR BALLOON-SPOKED ASTERISKFOUR" + + " CLUB-SPOKED ASTERISKBLACK FOUR POINTED STARWHITE FOUR POINTED STARSPARK" + + "LESSTRESS OUTLINED WHITE STARCIRCLED WHITE STAROPEN CENTRE BLACK STARBLA" + + "CK CENTRE WHITE STAROUTLINED BLACK STARHEAVY OUTLINED BLACK STARPINWHEEL" + + " STARSHADOWED WHITE STARHEAVY ASTERISKOPEN CENTRE ASTERISKEIGHT SPOKED A" + + "STERISKEIGHT POINTED BLACK STAREIGHT POINTED PINWHEEL STARSIX POINTED BL" + + "ACK STAREIGHT POINTED RECTILINEAR BLACK STARHEAVY EIGHT POINTED RECTILIN" + + "EAR BLACK STARTWELVE POINTED BLACK STARSIXTEEN POINTED ASTERISKTEARDROP-" + + "SPOKED ASTERISKOPEN CENTRE TEARDROP-SPOKED ASTERISKHEAVY TEARDROP-SPOKED" + + " ASTERISKSIX PETALLED BLACK AND WHITE FLORETTEBLACK FLORETTEWHITE FLORET" + + "TEEIGHT PETALLED OUTLINED BLACK FLORETTECIRCLED OPEN CENTRE EIGHT POINTE" + + "D STARHEAVY TEARDROP-SPOKED PINWHEEL ASTERISKSNOWFLAKETIGHT TRIFOLIATE S" + + "NOWFLAKEHEAVY CHEVRON SNOWFLAKESPARKLEHEAVY SPARKLEBALLOON-SPOKED ASTERI" + + "SKEIGHT TEARDROP-SPOKED PROPELLER ASTERISKHEAVY EIGHT TEARDROP-SPOKED PR" + + "OPELLER ASTERISKCROSS MARKSHADOWED WHITE CIRCLENEGATIVE SQUARED CROSS MA" + + "RKLOWER RIGHT DROP-SHADOWED WHITE SQUAREUPPER RIGHT DROP-SHADOWED WHITE " + + "SQUARELOWER RIGHT SHADOWED WHITE SQUAREUPPER RIGHT SHADOWED WHITE SQUARE" + + "BLACK QUESTION MARK ORNAMENTWHITE QUESTION MARK ORNAMENTWHITE EXCLAMATIO" + + "N MARK ORNAMENTBLACK DIAMOND MINUS WHITE XHEAVY EXCLAMATION MARK SYMBOLL" + + "IGHT VERTICAL BARMEDIUM VERTICAL BARHEAVY VERTICAL BARHEAVY SINGLE TURNE" + + "D COMMA QUOTATION MARK ORNAMENTHEAVY SINGLE COMMA QUOTATION MARK ORNAMEN" + + "THEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENTHEAVY DOUBLE COMMA QUO" + + "TATION MARK ORNAMENTHEAVY LOW SINGLE COMMA QUOTATION MARK ORNAMENTHEAVY " + + "LOW DOUBLE COMMA QUOTATION MARK ORNAMENTCURVED STEM PARAGRAPH SIGN ORNAM" + + "ENTHEAVY EXCLAMATION MARK ORNAMENTHEAVY HEART EXCLAMATION MARK ORNAMENTH" + + "EAVY BLACK HEARTROTATED HEAVY BLACK HEART BULLETFLORAL HEARTROTATED FLOR" + + "AL HEART BULLETMEDIUM LEFT PARENTHESIS ORNAMENTMEDIUM RIGHT PARENTHESIS " + + "ORNAMENTMEDIUM FLATTENED LEFT PARENTHESIS ORNAMENTMEDIUM FLATTENED RIGHT" + + " PARENTHESIS ORNAMENTMEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENTMEDIUM R" + + "IGHT-POINTING ANGLE BRACKET ORNAMENTHEAVY LEFT-POINTING ANGLE QUOTATION " + + "MARK ORNAMENTHEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENTHEAVY LEF" + + "T-POINTING ANGLE BRACKET ORNAMENTHEAVY RIGHT-POINTING ANGLE BRACKET ORNA" + + "MENTLIGHT LEFT TORTOISE SHELL BRACKET ORNAMENTLIGHT RIGHT TORTOISE SHELL" + + " BRACKET ORNAMENTMEDIUM LEFT CURLY BRACKET ORNAMENTMEDIUM RIGHT CURLY BR" + + "ACKET ORNAMENTDINGBAT NEGATIVE CIRCLED DIGIT ONEDINGBAT NEGATIVE CIRCLED" + + " DIGIT TWODINGBAT NEGATIVE CIRCLED DIGIT THREEDINGBAT NEGATIVE CIRCLED D" + + "IGIT FOURDINGBAT NEGATIVE CIRCLED DIGIT FIVEDINGBAT NEGATIVE CIRCLED DIG" + + "IT SIXDINGBAT NEGATIVE CIRCLED DIGIT SEVENDINGBAT NEGATIVE CIRCLED DIGIT" + + " EIGHTDINGBAT NEGATIVE CIRCLED DIGIT NINEDINGBAT NEGATIVE CIRCLED NUMBER" + + " TENDINGBAT CIRCLED SANS-SERIF DIGIT ONEDINGBAT CIRCLED SANS-SERIF DIGIT" + + " TWODINGBAT CIRCLED SANS-SERIF DIGIT THREEDINGBAT CIRCLED SANS-SERIF DIG" + + "IT FOURDINGBAT CIRCLED SANS-SERIF DIGIT FIVEDINGBAT CIRCLED SANS-SERIF D" + + "IGIT SIXDINGBAT CIRCLED SANS-SERIF DIGIT SEVENDINGBAT CIRCLED SANS-SERIF" + + " DIGIT EIGHTDINGBAT CIRCLED SANS-SERIF DIGIT NINEDINGBAT CIRCLED SANS-SE" + + "RIF NUMBER TENDINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONEDINGBAT NEGAT" + + "IVE CIRCLED SANS-SERIF DIGIT TWODINGBAT NEGATIVE CIRCLED SANS-SERIF DIGI" + + "T THREEDINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOURDINGBAT NEGATIVE CI" + + "RCLED SANS-SERIF DIGIT FIVEDINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX" + + "DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVENDINGBAT NEGATIVE CIRCLED " + + "SANS-SERIF DIGIT EIGHTDINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINEDING" + + "BAT NEGATIVE CIRCLED SANS-SERIF NUMBER TENHEAVY WIDE-HEADED RIGHTWARDS A" + + "RROWHEAVY PLUS SIGNHEAVY MINUS SIGNHEAVY DIVISION SIGNHEAVY SOUTH EAST A" + + "RROWHEAVY RIGHTWARDS ARROWHEAVY NORTH EAST ARROWDRAFTING POINT RIGHTWARD" + + "S ARROWHEAVY ROUND-TIPPED RIGHTWARDS ARROWTRIANGLE-HEADED RIGHTWARDS ARR" + + "OWHEAVY TRIANGLE-HEADED RIGHTWARDS ARROWDASHED TRIANGLE-HEADED RIGHTWARD" + + "S ARROWHEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROWBLACK RIGHTWARDS ARR" + + "OWTHREE-D TOP-LIGHTED RIGHTWARDS ARROWHEADTHREE-D BOTTOM-LIGHTED RIGHTWA" + + "RDS ARROWHEADBLACK RIGHTWARDS ARROWHEADHEAVY BLACK CURVED DOWNWARDS AND " + + "RIGHTWARDS ARROWHEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROWSQUAT BLA" + + "CK RIGHTWARDS ARROWHEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROWRIGHT-SHA" + + "DED WHITE RIGHTWARDS ARROWLEFT-SHADED WHITE RIGHTWARDS ARROWBACK-TILTED ") + ("" + + "SHADOWED WHITE RIGHTWARDS ARROWFRONT-TILTED SHADOWED WHITE RIGHTWARDS AR" + + "ROWHEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROWHEAVY UPPER RIGHT-SH" + + "ADOWED WHITE RIGHTWARDS ARROWNOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWAR" + + "DS ARROWCURLY LOOPNOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROWCIR" + + "CLED HEAVY WHITE RIGHTWARDS ARROWWHITE-FEATHERED RIGHTWARDS ARROWBLACK-F" + + "EATHERED SOUTH EAST ARROWBLACK-FEATHERED RIGHTWARDS ARROWBLACK-FEATHERED" + + " NORTH EAST ARROWHEAVY BLACK-FEATHERED SOUTH EAST ARROWHEAVY BLACK-FEATH" + + "ERED RIGHTWARDS ARROWHEAVY BLACK-FEATHERED NORTH EAST ARROWTEARDROP-BARB" + + "ED RIGHTWARDS ARROWHEAVY TEARDROP-SHANKED RIGHTWARDS ARROWWEDGE-TAILED R" + + "IGHTWARDS ARROWHEAVY WEDGE-TAILED RIGHTWARDS ARROWOPEN-OUTLINED RIGHTWAR" + + "DS ARROWDOUBLE CURLY LOOPTHREE DIMENSIONAL ANGLEWHITE TRIANGLE CONTAININ" + + "G SMALL WHITE TRIANGLEPERPENDICULAROPEN SUBSETOPEN SUPERSETLEFT S-SHAPED" + + " BAG DELIMITERRIGHT S-SHAPED BAG DELIMITEROR WITH DOT INSIDEREVERSE SOLI" + + "DUS PRECEDING SUBSETSUPERSET PRECEDING SOLIDUSVERTICAL BAR WITH HORIZONT" + + "AL STROKEMATHEMATICAL RISING DIAGONALLONG DIVISIONMATHEMATICAL FALLING D" + + "IAGONALSQUARED LOGICAL ANDSQUARED LOGICAL ORWHITE DIAMOND WITH CENTRED D" + + "OTAND WITH DOTELEMENT OF OPENING UPWARDSLOWER RIGHT CORNER WITH DOTUPPER" + + " LEFT CORNER WITH DOTLEFT OUTER JOINRIGHT OUTER JOINFULL OUTER JOINLARGE" + + " UP TACKLARGE DOWN TACKLEFT AND RIGHT DOUBLE TURNSTILELEFT AND RIGHT TAC" + + "KLEFT MULTIMAPLONG RIGHT TACKLONG LEFT TACKUP TACK WITH CIRCLE ABOVELOZE" + + "NGE DIVIDED BY HORIZONTAL RULEWHITE CONCAVE-SIDED DIAMONDWHITE CONCAVE-S" + + "IDED DIAMOND WITH LEFTWARDS TICKWHITE CONCAVE-SIDED DIAMOND WITH RIGHTWA" + + "RDS TICKWHITE SQUARE WITH LEFTWARDS TICKWHITE SQUARE WITH RIGHTWARDS TIC" + + "KMATHEMATICAL LEFT WHITE SQUARE BRACKETMATHEMATICAL RIGHT WHITE SQUARE B" + + "RACKETMATHEMATICAL LEFT ANGLE BRACKETMATHEMATICAL RIGHT ANGLE BRACKETMAT" + + "HEMATICAL LEFT DOUBLE ANGLE BRACKETMATHEMATICAL RIGHT DOUBLE ANGLE BRACK" + + "ETMATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKETMATHEMATICAL RIGHT WHITE" + + " TORTOISE SHELL BRACKETMATHEMATICAL LEFT FLATTENED PARENTHESISMATHEMATIC" + + "AL RIGHT FLATTENED PARENTHESISUPWARDS QUADRUPLE ARROWDOWNWARDS QUADRUPLE" + + " ARROWANTICLOCKWISE GAPPED CIRCLE ARROWCLOCKWISE GAPPED CIRCLE ARROWRIGH" + + "T ARROW WITH CIRCLED PLUSLONG LEFTWARDS ARROWLONG RIGHTWARDS ARROWLONG L" + + "EFT RIGHT ARROWLONG LEFTWARDS DOUBLE ARROWLONG RIGHTWARDS DOUBLE ARROWLO" + + "NG LEFT RIGHT DOUBLE ARROWLONG LEFTWARDS ARROW FROM BARLONG RIGHTWARDS A" + + "RROW FROM BARLONG LEFTWARDS DOUBLE ARROW FROM BARLONG RIGHTWARDS DOUBLE " + + "ARROW FROM BARLONG RIGHTWARDS SQUIGGLE ARROWBRAILLE PATTERN BLANKBRAILLE" + + " PATTERN DOTS-1BRAILLE PATTERN DOTS-2BRAILLE PATTERN DOTS-12BRAILLE PATT" + + "ERN DOTS-3BRAILLE PATTERN DOTS-13BRAILLE PATTERN DOTS-23BRAILLE PATTERN " + + "DOTS-123BRAILLE PATTERN DOTS-4BRAILLE PATTERN DOTS-14BRAILLE PATTERN DOT" + + "S-24BRAILLE PATTERN DOTS-124BRAILLE PATTERN DOTS-34BRAILLE PATTERN DOTS-" + + "134BRAILLE PATTERN DOTS-234BRAILLE PATTERN DOTS-1234BRAILLE PATTERN DOTS" + + "-5BRAILLE PATTERN DOTS-15BRAILLE PATTERN DOTS-25BRAILLE PATTERN DOTS-125" + + "BRAILLE PATTERN DOTS-35BRAILLE PATTERN DOTS-135BRAILLE PATTERN DOTS-235B" + + "RAILLE PATTERN DOTS-1235BRAILLE PATTERN DOTS-45BRAILLE PATTERN DOTS-145B" + + "RAILLE PATTERN DOTS-245BRAILLE PATTERN DOTS-1245BRAILLE PATTERN DOTS-345" + + "BRAILLE PATTERN DOTS-1345BRAILLE PATTERN DOTS-2345BRAILLE PATTERN DOTS-1" + + "2345BRAILLE PATTERN DOTS-6BRAILLE PATTERN DOTS-16BRAILLE PATTERN DOTS-26" + + "BRAILLE PATTERN DOTS-126BRAILLE PATTERN DOTS-36BRAILLE PATTERN DOTS-136B" + + "RAILLE PATTERN DOTS-236BRAILLE PATTERN DOTS-1236BRAILLE PATTERN DOTS-46B" + + "RAILLE PATTERN DOTS-146BRAILLE PATTERN DOTS-246BRAILLE PATTERN DOTS-1246" + + "BRAILLE PATTERN DOTS-346BRAILLE PATTERN DOTS-1346BRAILLE PATTERN DOTS-23" + + "46BRAILLE PATTERN DOTS-12346BRAILLE PATTERN DOTS-56BRAILLE PATTERN DOTS-" + + "156BRAILLE PATTERN DOTS-256BRAILLE PATTERN DOTS-1256BRAILLE PATTERN DOTS" + + "-356BRAILLE PATTERN DOTS-1356BRAILLE PATTERN DOTS-2356BRAILLE PATTERN DO" + + "TS-12356BRAILLE PATTERN DOTS-456BRAILLE PATTERN DOTS-1456BRAILLE PATTERN" + + " DOTS-2456BRAILLE PATTERN DOTS-12456BRAILLE PATTERN DOTS-3456BRAILLE PAT" + + "TERN DOTS-13456BRAILLE PATTERN DOTS-23456BRAILLE PATTERN DOTS-123456BRAI" + + "LLE PATTERN DOTS-7BRAILLE PATTERN DOTS-17BRAILLE PATTERN DOTS-27BRAILLE " + + "PATTERN DOTS-127BRAILLE PATTERN DOTS-37BRAILLE PATTERN DOTS-137BRAILLE P" + + "ATTERN DOTS-237BRAILLE PATTERN DOTS-1237BRAILLE PATTERN DOTS-47BRAILLE P" + + "ATTERN DOTS-147BRAILLE PATTERN DOTS-247BRAILLE PATTERN DOTS-1247BRAILLE " + + "PATTERN DOTS-347BRAILLE PATTERN DOTS-1347BRAILLE PATTERN DOTS-2347BRAILL" + + "E PATTERN DOTS-12347BRAILLE PATTERN DOTS-57BRAILLE PATTERN DOTS-157BRAIL" + + "LE PATTERN DOTS-257BRAILLE PATTERN DOTS-1257BRAILLE PATTERN DOTS-357BRAI" + + "LLE PATTERN DOTS-1357BRAILLE PATTERN DOTS-2357BRAILLE PATTERN DOTS-12357") + ("" + + "BRAILLE PATTERN DOTS-457BRAILLE PATTERN DOTS-1457BRAILLE PATTERN DOTS-24" + + "57BRAILLE PATTERN DOTS-12457BRAILLE PATTERN DOTS-3457BRAILLE PATTERN DOT" + + "S-13457BRAILLE PATTERN DOTS-23457BRAILLE PATTERN DOTS-123457BRAILLE PATT" + + "ERN DOTS-67BRAILLE PATTERN DOTS-167BRAILLE PATTERN DOTS-267BRAILLE PATTE" + + "RN DOTS-1267BRAILLE PATTERN DOTS-367BRAILLE PATTERN DOTS-1367BRAILLE PAT" + + "TERN DOTS-2367BRAILLE PATTERN DOTS-12367BRAILLE PATTERN DOTS-467BRAILLE " + + "PATTERN DOTS-1467BRAILLE PATTERN DOTS-2467BRAILLE PATTERN DOTS-12467BRAI" + + "LLE PATTERN DOTS-3467BRAILLE PATTERN DOTS-13467BRAILLE PATTERN DOTS-2346" + + "7BRAILLE PATTERN DOTS-123467BRAILLE PATTERN DOTS-567BRAILLE PATTERN DOTS" + + "-1567BRAILLE PATTERN DOTS-2567BRAILLE PATTERN DOTS-12567BRAILLE PATTERN " + + "DOTS-3567BRAILLE PATTERN DOTS-13567BRAILLE PATTERN DOTS-23567BRAILLE PAT" + + "TERN DOTS-123567BRAILLE PATTERN DOTS-4567BRAILLE PATTERN DOTS-14567BRAIL" + + "LE PATTERN DOTS-24567BRAILLE PATTERN DOTS-124567BRAILLE PATTERN DOTS-345" + + "67BRAILLE PATTERN DOTS-134567BRAILLE PATTERN DOTS-234567BRAILLE PATTERN " + + "DOTS-1234567BRAILLE PATTERN DOTS-8BRAILLE PATTERN DOTS-18BRAILLE PATTERN" + + " DOTS-28BRAILLE PATTERN DOTS-128BRAILLE PATTERN DOTS-38BRAILLE PATTERN D" + + "OTS-138BRAILLE PATTERN DOTS-238BRAILLE PATTERN DOTS-1238BRAILLE PATTERN " + + "DOTS-48BRAILLE PATTERN DOTS-148BRAILLE PATTERN DOTS-248BRAILLE PATTERN D" + + "OTS-1248BRAILLE PATTERN DOTS-348BRAILLE PATTERN DOTS-1348BRAILLE PATTERN" + + " DOTS-2348BRAILLE PATTERN DOTS-12348BRAILLE PATTERN DOTS-58BRAILLE PATTE" + + "RN DOTS-158BRAILLE PATTERN DOTS-258BRAILLE PATTERN DOTS-1258BRAILLE PATT" + + "ERN DOTS-358BRAILLE PATTERN DOTS-1358BRAILLE PATTERN DOTS-2358BRAILLE PA" + + "TTERN DOTS-12358BRAILLE PATTERN DOTS-458BRAILLE PATTERN DOTS-1458BRAILLE" + + " PATTERN DOTS-2458BRAILLE PATTERN DOTS-12458BRAILLE PATTERN DOTS-3458BRA" + + "ILLE PATTERN DOTS-13458BRAILLE PATTERN DOTS-23458BRAILLE PATTERN DOTS-12" + + "3458BRAILLE PATTERN DOTS-68BRAILLE PATTERN DOTS-168BRAILLE PATTERN DOTS-" + + "268BRAILLE PATTERN DOTS-1268BRAILLE PATTERN DOTS-368BRAILLE PATTERN DOTS" + + "-1368BRAILLE PATTERN DOTS-2368BRAILLE PATTERN DOTS-12368BRAILLE PATTERN " + + "DOTS-468BRAILLE PATTERN DOTS-1468BRAILLE PATTERN DOTS-2468BRAILLE PATTER" + + "N DOTS-12468BRAILLE PATTERN DOTS-3468BRAILLE PATTERN DOTS-13468BRAILLE P" + + "ATTERN DOTS-23468BRAILLE PATTERN DOTS-123468BRAILLE PATTERN DOTS-568BRAI" + + "LLE PATTERN DOTS-1568BRAILLE PATTERN DOTS-2568BRAILLE PATTERN DOTS-12568" + + "BRAILLE PATTERN DOTS-3568BRAILLE PATTERN DOTS-13568BRAILLE PATTERN DOTS-" + + "23568BRAILLE PATTERN DOTS-123568BRAILLE PATTERN DOTS-4568BRAILLE PATTERN" + + " DOTS-14568BRAILLE PATTERN DOTS-24568BRAILLE PATTERN DOTS-124568BRAILLE " + + "PATTERN DOTS-34568BRAILLE PATTERN DOTS-134568BRAILLE PATTERN DOTS-234568" + + "BRAILLE PATTERN DOTS-1234568BRAILLE PATTERN DOTS-78BRAILLE PATTERN DOTS-" + + "178BRAILLE PATTERN DOTS-278BRAILLE PATTERN DOTS-1278BRAILLE PATTERN DOTS" + + "-378BRAILLE PATTERN DOTS-1378BRAILLE PATTERN DOTS-2378BRAILLE PATTERN DO" + + "TS-12378BRAILLE PATTERN DOTS-478BRAILLE PATTERN DOTS-1478BRAILLE PATTERN" + + " DOTS-2478BRAILLE PATTERN DOTS-12478BRAILLE PATTERN DOTS-3478BRAILLE PAT" + + "TERN DOTS-13478BRAILLE PATTERN DOTS-23478BRAILLE PATTERN DOTS-123478BRAI" + + "LLE PATTERN DOTS-578BRAILLE PATTERN DOTS-1578BRAILLE PATTERN DOTS-2578BR" + + "AILLE PATTERN DOTS-12578BRAILLE PATTERN DOTS-3578BRAILLE PATTERN DOTS-13" + + "578BRAILLE PATTERN DOTS-23578BRAILLE PATTERN DOTS-123578BRAILLE PATTERN " + + "DOTS-4578BRAILLE PATTERN DOTS-14578BRAILLE PATTERN DOTS-24578BRAILLE PAT" + + "TERN DOTS-124578BRAILLE PATTERN DOTS-34578BRAILLE PATTERN DOTS-134578BRA" + + "ILLE PATTERN DOTS-234578BRAILLE PATTERN DOTS-1234578BRAILLE PATTERN DOTS" + + "-678BRAILLE PATTERN DOTS-1678BRAILLE PATTERN DOTS-2678BRAILLE PATTERN DO" + + "TS-12678BRAILLE PATTERN DOTS-3678BRAILLE PATTERN DOTS-13678BRAILLE PATTE" + + "RN DOTS-23678BRAILLE PATTERN DOTS-123678BRAILLE PATTERN DOTS-4678BRAILLE" + + " PATTERN DOTS-14678BRAILLE PATTERN DOTS-24678BRAILLE PATTERN DOTS-124678" + + "BRAILLE PATTERN DOTS-34678BRAILLE PATTERN DOTS-134678BRAILLE PATTERN DOT" + + "S-234678BRAILLE PATTERN DOTS-1234678BRAILLE PATTERN DOTS-5678BRAILLE PAT" + + "TERN DOTS-15678BRAILLE PATTERN DOTS-25678BRAILLE PATTERN DOTS-125678BRAI" + + "LLE PATTERN DOTS-35678BRAILLE PATTERN DOTS-135678BRAILLE PATTERN DOTS-23" + + "5678BRAILLE PATTERN DOTS-1235678BRAILLE PATTERN DOTS-45678BRAILLE PATTER" + + "N DOTS-145678BRAILLE PATTERN DOTS-245678BRAILLE PATTERN DOTS-1245678BRAI" + + "LLE PATTERN DOTS-345678BRAILLE PATTERN DOTS-1345678BRAILLE PATTERN DOTS-" + + "2345678BRAILLE PATTERN DOTS-12345678RIGHTWARDS TWO-HEADED ARROW WITH VER" + + "TICAL STROKERIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKELEFTW" + + "ARDS DOUBLE ARROW WITH VERTICAL STROKERIGHTWARDS DOUBLE ARROW WITH VERTI" + + "CAL STROKELEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKERIGHTWARDS TWO-HEA" + + "DED ARROW FROM BARLEFTWARDS DOUBLE ARROW FROM BARRIGHTWARDS DOUBLE ARROW") + ("" + + " FROM BARDOWNWARDS ARROW WITH HORIZONTAL STROKEUPWARDS ARROW WITH HORIZO" + + "NTAL STROKEUPWARDS TRIPLE ARROWDOWNWARDS TRIPLE ARROWLEFTWARDS DOUBLE DA" + + "SH ARROWRIGHTWARDS DOUBLE DASH ARROWLEFTWARDS TRIPLE DASH ARROWRIGHTWARD" + + "S TRIPLE DASH ARROWRIGHTWARDS TWO-HEADED TRIPLE DASH ARROWRIGHTWARDS ARR" + + "OW WITH DOTTED STEMUPWARDS ARROW TO BARDOWNWARDS ARROW TO BARRIGHTWARDS " + + "ARROW WITH TAIL WITH VERTICAL STROKERIGHTWARDS ARROW WITH TAIL WITH DOUB" + + "LE VERTICAL STROKERIGHTWARDS TWO-HEADED ARROW WITH TAILRIGHTWARDS TWO-HE" + + "ADED ARROW WITH TAIL WITH VERTICAL STROKERIGHTWARDS TWO-HEADED ARROW WIT" + + "H TAIL WITH DOUBLE VERTICAL STROKELEFTWARDS ARROW-TAILRIGHTWARDS ARROW-T" + + "AILLEFTWARDS DOUBLE ARROW-TAILRIGHTWARDS DOUBLE ARROW-TAILLEFTWARDS ARRO" + + "W TO BLACK DIAMONDRIGHTWARDS ARROW TO BLACK DIAMONDLEFTWARDS ARROW FROM " + + "BAR TO BLACK DIAMONDRIGHTWARDS ARROW FROM BAR TO BLACK DIAMONDNORTH WEST" + + " AND SOUTH EAST ARROWNORTH EAST AND SOUTH WEST ARROWNORTH WEST ARROW WIT" + + "H HOOKNORTH EAST ARROW WITH HOOKSOUTH EAST ARROW WITH HOOKSOUTH WEST ARR" + + "OW WITH HOOKNORTH WEST ARROW AND NORTH EAST ARROWNORTH EAST ARROW AND SO" + + "UTH EAST ARROWSOUTH EAST ARROW AND SOUTH WEST ARROWSOUTH WEST ARROW AND " + + "NORTH WEST ARROWRISING DIAGONAL CROSSING FALLING DIAGONALFALLING DIAGONA" + + "L CROSSING RISING DIAGONALSOUTH EAST ARROW CROSSING NORTH EAST ARROWNORT" + + "H EAST ARROW CROSSING SOUTH EAST ARROWFALLING DIAGONAL CROSSING NORTH EA" + + "ST ARROWRISING DIAGONAL CROSSING SOUTH EAST ARROWNORTH EAST ARROW CROSSI" + + "NG NORTH WEST ARROWNORTH WEST ARROW CROSSING NORTH EAST ARROWWAVE ARROW " + + "POINTING DIRECTLY RIGHTARROW POINTING RIGHTWARDS THEN CURVING UPWARDSARR" + + "OW POINTING RIGHTWARDS THEN CURVING DOWNWARDSARROW POINTING DOWNWARDS TH" + + "EN CURVING LEFTWARDSARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDSRIGH" + + "T-SIDE ARC CLOCKWISE ARROWLEFT-SIDE ARC ANTICLOCKWISE ARROWTOP ARC ANTIC" + + "LOCKWISE ARROWBOTTOM ARC ANTICLOCKWISE ARROWTOP ARC CLOCKWISE ARROW WITH" + + " MINUSTOP ARC ANTICLOCKWISE ARROW WITH PLUSLOWER RIGHT SEMICIRCULAR CLOC" + + "KWISE ARROWLOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROWANTICLOCKWISE CLOS" + + "ED CIRCLE ARROWCLOCKWISE CLOSED CIRCLE ARROWRIGHTWARDS ARROW ABOVE SHORT" + + " LEFTWARDS ARROWLEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROWSHORT RIGHTW" + + "ARDS ARROW ABOVE LEFTWARDS ARROWRIGHTWARDS ARROW WITH PLUS BELOWLEFTWARD" + + "S ARROW WITH PLUS BELOWRIGHTWARDS ARROW THROUGH XLEFT RIGHT ARROW THROUG" + + "H SMALL CIRCLEUPWARDS TWO-HEADED ARROW FROM SMALL CIRCLELEFT BARB UP RIG" + + "HT BARB DOWN HARPOONLEFT BARB DOWN RIGHT BARB UP HARPOONUP BARB RIGHT DO" + + "WN BARB LEFT HARPOONUP BARB LEFT DOWN BARB RIGHT HARPOONLEFT BARB UP RIG" + + "HT BARB UP HARPOONUP BARB RIGHT DOWN BARB RIGHT HARPOONLEFT BARB DOWN RI" + + "GHT BARB DOWN HARPOONUP BARB LEFT DOWN BARB LEFT HARPOONLEFTWARDS HARPOO" + + "N WITH BARB UP TO BARRIGHTWARDS HARPOON WITH BARB UP TO BARUPWARDS HARPO" + + "ON WITH BARB RIGHT TO BARDOWNWARDS HARPOON WITH BARB RIGHT TO BARLEFTWAR" + + "DS HARPOON WITH BARB DOWN TO BARRIGHTWARDS HARPOON WITH BARB DOWN TO BAR" + + "UPWARDS HARPOON WITH BARB LEFT TO BARDOWNWARDS HARPOON WITH BARB LEFT TO" + + " BARLEFTWARDS HARPOON WITH BARB UP FROM BARRIGHTWARDS HARPOON WITH BARB " + + "UP FROM BARUPWARDS HARPOON WITH BARB RIGHT FROM BARDOWNWARDS HARPOON WIT" + + "H BARB RIGHT FROM BARLEFTWARDS HARPOON WITH BARB DOWN FROM BARRIGHTWARDS" + + " HARPOON WITH BARB DOWN FROM BARUPWARDS HARPOON WITH BARB LEFT FROM BARD" + + "OWNWARDS HARPOON WITH BARB LEFT FROM BARLEFTWARDS HARPOON WITH BARB UP A" + + "BOVE LEFTWARDS HARPOON WITH BARB DOWNUPWARDS HARPOON WITH BARB LEFT BESI" + + "DE UPWARDS HARPOON WITH BARB RIGHTRIGHTWARDS HARPOON WITH BARB UP ABOVE " + + "RIGHTWARDS HARPOON WITH BARB DOWNDOWNWARDS HARPOON WITH BARB LEFT BESIDE" + + " DOWNWARDS HARPOON WITH BARB RIGHTLEFTWARDS HARPOON WITH BARB UP ABOVE R" + + "IGHTWARDS HARPOON WITH BARB UPLEFTWARDS HARPOON WITH BARB DOWN ABOVE RIG" + + "HTWARDS HARPOON WITH BARB DOWNRIGHTWARDS HARPOON WITH BARB UP ABOVE LEFT" + + "WARDS HARPOON WITH BARB UPRIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWA" + + "RDS HARPOON WITH BARB DOWNLEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH" + + "LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASHRIGHTWARDS HARPOON WITH " + + "BARB UP ABOVE LONG DASHRIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH" + + "UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHTD" + + "OWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHTRI" + + "GHT DOUBLE ARROW WITH ROUNDED HEADEQUALS SIGN ABOVE RIGHTWARDS ARROWTILD" + + "E OPERATOR ABOVE RIGHTWARDS ARROWLEFTWARDS ARROW ABOVE TILDE OPERATORRIG" + + "HTWARDS ARROW ABOVE TILDE OPERATORRIGHTWARDS ARROW ABOVE ALMOST EQUAL TO" + + "LESS-THAN ABOVE LEFTWARDS ARROWLEFTWARDS ARROW THROUGH LESS-THANGREATER-" + + "THAN ABOVE RIGHTWARDS ARROWSUBSET ABOVE RIGHTWARDS ARROWLEFTWARDS ARROW " + + "THROUGH SUBSETSUPERSET ABOVE LEFTWARDS ARROWLEFT FISH TAILRIGHT FISH TAI") + ("" + + "LUP FISH TAILDOWN FISH TAILTRIPLE VERTICAL BAR DELIMITERZ NOTATION SPOTZ" + + " NOTATION TYPE COLONLEFT WHITE CURLY BRACKETRIGHT WHITE CURLY BRACKETLEF" + + "T WHITE PARENTHESISRIGHT WHITE PARENTHESISZ NOTATION LEFT IMAGE BRACKETZ" + + " NOTATION RIGHT IMAGE BRACKETZ NOTATION LEFT BINDING BRACKETZ NOTATION R" + + "IGHT BINDING BRACKETLEFT SQUARE BRACKET WITH UNDERBARRIGHT SQUARE BRACKE" + + "T WITH UNDERBARLEFT SQUARE BRACKET WITH TICK IN TOP CORNERRIGHT SQUARE B" + + "RACKET WITH TICK IN BOTTOM CORNERLEFT SQUARE BRACKET WITH TICK IN BOTTOM" + + " CORNERRIGHT SQUARE BRACKET WITH TICK IN TOP CORNERLEFT ANGLE BRACKET WI" + + "TH DOTRIGHT ANGLE BRACKET WITH DOTLEFT ARC LESS-THAN BRACKETRIGHT ARC GR" + + "EATER-THAN BRACKETDOUBLE LEFT ARC GREATER-THAN BRACKETDOUBLE RIGHT ARC L" + + "ESS-THAN BRACKETLEFT BLACK TORTOISE SHELL BRACKETRIGHT BLACK TORTOISE SH" + + "ELL BRACKETDOTTED FENCEVERTICAL ZIGZAG LINEMEASURED ANGLE OPENING LEFTRI" + + "GHT ANGLE VARIANT WITH SQUAREMEASURED RIGHT ANGLE WITH DOTANGLE WITH S I" + + "NSIDEACUTE ANGLESPHERICAL ANGLE OPENING LEFTSPHERICAL ANGLE OPENING UPTU" + + "RNED ANGLEREVERSED ANGLEANGLE WITH UNDERBARREVERSED ANGLE WITH UNDERBARO" + + "BLIQUE ANGLE OPENING UPOBLIQUE ANGLE OPENING DOWNMEASURED ANGLE WITH OPE" + + "N ARM ENDING IN ARROW POINTING UP AND RIGHTMEASURED ANGLE WITH OPEN ARM " + + "ENDING IN ARROW POINTING UP AND LEFTMEASURED ANGLE WITH OPEN ARM ENDING " + + "IN ARROW POINTING DOWN AND RIGHTMEASURED ANGLE WITH OPEN ARM ENDING IN A" + + "RROW POINTING DOWN AND LEFTMEASURED ANGLE WITH OPEN ARM ENDING IN ARROW " + + "POINTING RIGHT AND UPMEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTI" + + "NG LEFT AND UPMEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGH" + + "T AND DOWNMEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND" + + " DOWNREVERSED EMPTY SETEMPTY SET WITH OVERBAREMPTY SET WITH SMALL CIRCLE" + + " ABOVEEMPTY SET WITH RIGHT ARROW ABOVEEMPTY SET WITH LEFT ARROW ABOVECIR" + + "CLE WITH HORIZONTAL BARCIRCLED VERTICAL BARCIRCLED PARALLELCIRCLED REVER" + + "SE SOLIDUSCIRCLED PERPENDICULARCIRCLE DIVIDED BY HORIZONTAL BAR AND TOP " + + "HALF DIVIDED BY VERTICAL BARCIRCLE WITH SUPERIMPOSED XCIRCLED ANTICLOCKW" + + "ISE-ROTATED DIVISION SIGNUP ARROW THROUGH CIRCLECIRCLED WHITE BULLETCIRC" + + "LED BULLETCIRCLED LESS-THANCIRCLED GREATER-THANCIRCLE WITH SMALL CIRCLE " + + "TO THE RIGHTCIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHTSQUARED RISIN" + + "G DIAGONAL SLASHSQUARED FALLING DIAGONAL SLASHSQUARED ASTERISKSQUARED SM" + + "ALL CIRCLESQUARED SQUARETWO JOINED SQUARESTRIANGLE WITH DOT ABOVETRIANGL" + + "E WITH UNDERBARS IN TRIANGLETRIANGLE WITH SERIFS AT BOTTOMRIGHT TRIANGLE" + + " ABOVE LEFT TRIANGLELEFT TRIANGLE BESIDE VERTICAL BARVERTICAL BAR BESIDE" + + " RIGHT TRIANGLEBOWTIE WITH LEFT HALF BLACKBOWTIE WITH RIGHT HALF BLACKBL" + + "ACK BOWTIETIMES WITH LEFT HALF BLACKTIMES WITH RIGHT HALF BLACKWHITE HOU" + + "RGLASSBLACK HOURGLASSLEFT WIGGLY FENCERIGHT WIGGLY FENCELEFT DOUBLE WIGG" + + "LY FENCERIGHT DOUBLE WIGGLY FENCEINCOMPLETE INFINITYTIE OVER INFINITYINF" + + "INITY NEGATED WITH VERTICAL BARDOUBLE-ENDED MULTIMAPSQUARE WITH CONTOURE" + + "D OUTLINEINCREASES ASSHUFFLE PRODUCTEQUALS SIGN AND SLANTED PARALLELEQUA" + + "LS SIGN AND SLANTED PARALLEL WITH TILDE ABOVEIDENTICAL TO AND SLANTED PA" + + "RALLELGLEICH STARKTHERMODYNAMICDOWN-POINTING TRIANGLE WITH LEFT HALF BLA" + + "CKDOWN-POINTING TRIANGLE WITH RIGHT HALF BLACKBLACK DIAMOND WITH DOWN AR" + + "ROWBLACK LOZENGEWHITE CIRCLE WITH DOWN ARROWBLACK CIRCLE WITH DOWN ARROW" + + "ERROR-BARRED WHITE SQUAREERROR-BARRED BLACK SQUAREERROR-BARRED WHITE DIA" + + "MONDERROR-BARRED BLACK DIAMONDERROR-BARRED WHITE CIRCLEERROR-BARRED BLAC" + + "K CIRCLERULE-DELAYEDREVERSE SOLIDUS OPERATORSOLIDUS WITH OVERBARREVERSE " + + "SOLIDUS WITH HORIZONTAL STROKEBIG SOLIDUSBIG REVERSE SOLIDUSDOUBLE PLUST" + + "RIPLE PLUSLEFT-POINTING CURVED ANGLE BRACKETRIGHT-POINTING CURVED ANGLE " + + "BRACKETTINYMINYN-ARY CIRCLED DOT OPERATORN-ARY CIRCLED PLUS OPERATORN-AR" + + "Y CIRCLED TIMES OPERATORN-ARY UNION OPERATOR WITH DOTN-ARY UNION OPERATO" + + "R WITH PLUSN-ARY SQUARE INTERSECTION OPERATORN-ARY SQUARE UNION OPERATOR" + + "TWO LOGICAL AND OPERATORTWO LOGICAL OR OPERATORN-ARY TIMES OPERATORMODUL" + + "O TWO SUMSUMMATION WITH INTEGRALQUADRUPLE INTEGRAL OPERATORFINITE PART I" + + "NTEGRALINTEGRAL WITH DOUBLE STROKEINTEGRAL AVERAGE WITH SLASHCIRCULATION" + + " FUNCTIONANTICLOCKWISE INTEGRATIONLINE INTEGRATION WITH RECTANGULAR PATH" + + " AROUND POLELINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLELINE INTE" + + "GRATION NOT INCLUDING THE POLEINTEGRAL AROUND A POINT OPERATORQUATERNION" + + " INTEGRAL OPERATORINTEGRAL WITH LEFTWARDS ARROW WITH HOOKINTEGRAL WITH T" + + "IMES SIGNINTEGRAL WITH INTERSECTIONINTEGRAL WITH UNIONINTEGRAL WITH OVER" + + "BARINTEGRAL WITH UNDERBARJOINLARGE LEFT TRIANGLE OPERATORZ NOTATION SCHE" + + "MA COMPOSITIONZ NOTATION SCHEMA PIPINGZ NOTATION SCHEMA PROJECTIONPLUS S" + + "IGN WITH SMALL CIRCLE ABOVEPLUS SIGN WITH CIRCUMFLEX ACCENT ABOVEPLUS SI") + ("" + + "GN WITH TILDE ABOVEPLUS SIGN WITH DOT BELOWPLUS SIGN WITH TILDE BELOWPLU" + + "S SIGN WITH SUBSCRIPT TWOPLUS SIGN WITH BLACK TRIANGLEMINUS SIGN WITH CO" + + "MMA ABOVEMINUS SIGN WITH DOT BELOWMINUS SIGN WITH FALLING DOTSMINUS SIGN" + + " WITH RISING DOTSPLUS SIGN IN LEFT HALF CIRCLEPLUS SIGN IN RIGHT HALF CI" + + "RCLEVECTOR OR CROSS PRODUCTMULTIPLICATION SIGN WITH DOT ABOVEMULTIPLICAT" + + "ION SIGN WITH UNDERBARSEMIDIRECT PRODUCT WITH BOTTOM CLOSEDSMASH PRODUCT" + + "MULTIPLICATION SIGN IN LEFT HALF CIRCLEMULTIPLICATION SIGN IN RIGHT HALF" + + " CIRCLECIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENTMULTIPLICATION " + + "SIGN IN DOUBLE CIRCLECIRCLED DIVISION SIGNPLUS SIGN IN TRIANGLEMINUS SIG" + + "N IN TRIANGLEMULTIPLICATION SIGN IN TRIANGLEINTERIOR PRODUCTRIGHTHAND IN" + + "TERIOR PRODUCTZ NOTATION RELATIONAL COMPOSITIONAMALGAMATION OR COPRODUCT" + + "INTERSECTION WITH DOTUNION WITH MINUS SIGNUNION WITH OVERBARINTERSECTION" + + " WITH OVERBARINTERSECTION WITH LOGICAL ANDUNION WITH LOGICAL ORUNION ABO" + + "VE INTERSECTIONINTERSECTION ABOVE UNIONUNION ABOVE BAR ABOVE INTERSECTIO" + + "NINTERSECTION ABOVE BAR ABOVE UNIONUNION BESIDE AND JOINED WITH UNIONINT" + + "ERSECTION BESIDE AND JOINED WITH INTERSECTIONCLOSED UNION WITH SERIFSCLO" + + "SED INTERSECTION WITH SERIFSDOUBLE SQUARE INTERSECTIONDOUBLE SQUARE UNIO" + + "NCLOSED UNION WITH SERIFS AND SMASH PRODUCTLOGICAL AND WITH DOT ABOVELOG" + + "ICAL OR WITH DOT ABOVEDOUBLE LOGICAL ANDDOUBLE LOGICAL ORTWO INTERSECTIN" + + "G LOGICAL ANDTWO INTERSECTING LOGICAL ORSLOPING LARGE ORSLOPING LARGE AN" + + "DLOGICAL OR OVERLAPPING LOGICAL ANDLOGICAL AND WITH MIDDLE STEMLOGICAL O" + + "R WITH MIDDLE STEMLOGICAL AND WITH HORIZONTAL DASHLOGICAL OR WITH HORIZO" + + "NTAL DASHLOGICAL AND WITH DOUBLE OVERBARLOGICAL AND WITH UNDERBARLOGICAL" + + " AND WITH DOUBLE UNDERBARSMALL VEE WITH UNDERBARLOGICAL OR WITH DOUBLE O" + + "VERBARLOGICAL OR WITH DOUBLE UNDERBARZ NOTATION DOMAIN ANTIRESTRICTIONZ " + + "NOTATION RANGE ANTIRESTRICTIONEQUALS SIGN WITH DOT BELOWIDENTICAL WITH D" + + "OT ABOVETRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKETRIPLE HORIZONT" + + "AL BAR WITH TRIPLE VERTICAL STROKETILDE OPERATOR WITH DOT ABOVETILDE OPE" + + "RATOR WITH RISING DOTSSIMILAR MINUS SIMILARCONGRUENT WITH DOT ABOVEEQUAL" + + "S WITH ASTERISKALMOST EQUAL TO WITH CIRCUMFLEX ACCENTAPPROXIMATELY EQUAL" + + " OR EQUAL TOEQUALS SIGN ABOVE PLUS SIGNPLUS SIGN ABOVE EQUALS SIGNEQUALS" + + " SIGN ABOVE TILDE OPERATORDOUBLE COLON EQUALTWO CONSECUTIVE EQUALS SIGNS" + + "THREE CONSECUTIVE EQUALS SIGNSEQUALS SIGN WITH TWO DOTS ABOVE AND TWO DO" + + "TS BELOWEQUIVALENT WITH FOUR DOTS ABOVELESS-THAN WITH CIRCLE INSIDEGREAT" + + "ER-THAN WITH CIRCLE INSIDELESS-THAN WITH QUESTION MARK ABOVEGREATER-THAN" + + " WITH QUESTION MARK ABOVELESS-THAN OR SLANTED EQUAL TOGREATER-THAN OR SL" + + "ANTED EQUAL TOLESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDEGREATER-THAN " + + "OR SLANTED EQUAL TO WITH DOT INSIDELESS-THAN OR SLANTED EQUAL TO WITH DO" + + "T ABOVEGREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVELESS-THAN OR SLANT" + + "ED EQUAL TO WITH DOT ABOVE RIGHTGREATER-THAN OR SLANTED EQUAL TO WITH DO" + + "T ABOVE LEFTLESS-THAN OR APPROXIMATEGREATER-THAN OR APPROXIMATELESS-THAN" + + " AND SINGLE-LINE NOT EQUAL TOGREATER-THAN AND SINGLE-LINE NOT EQUAL TOLE" + + "SS-THAN AND NOT APPROXIMATEGREATER-THAN AND NOT APPROXIMATELESS-THAN ABO" + + "VE DOUBLE-LINE EQUAL ABOVE GREATER-THANGREATER-THAN ABOVE DOUBLE-LINE EQ" + + "UAL ABOVE LESS-THANLESS-THAN ABOVE SIMILAR OR EQUALGREATER-THAN ABOVE SI" + + "MILAR OR EQUALLESS-THAN ABOVE SIMILAR ABOVE GREATER-THANGREATER-THAN ABO" + + "VE SIMILAR ABOVE LESS-THANLESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE" + + " EQUALGREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUALLESS-THAN ABOV" + + "E SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUALGREATER-THAN ABOVE" + + " SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUALSLANTED EQUAL TO OR LE" + + "SS-THANSLANTED EQUAL TO OR GREATER-THANSLANTED EQUAL TO OR LESS-THAN WIT" + + "H DOT INSIDESLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDEDOUBLE-LINE " + + "EQUAL TO OR LESS-THANDOUBLE-LINE EQUAL TO OR GREATER-THANDOUBLE-LINE SLA" + + "NTED EQUAL TO OR LESS-THANDOUBLE-LINE SLANTED EQUAL TO OR GREATER-THANSI" + + "MILAR OR LESS-THANSIMILAR OR GREATER-THANSIMILAR ABOVE LESS-THAN ABOVE E" + + "QUALS SIGNSIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGNDOUBLE NESTED LESS" + + "-THANDOUBLE NESTED GREATER-THANDOUBLE NESTED LESS-THAN WITH UNDERBARGREA" + + "TER-THAN OVERLAPPING LESS-THANGREATER-THAN BESIDE LESS-THANLESS-THAN CLO" + + "SED BY CURVEGREATER-THAN CLOSED BY CURVELESS-THAN CLOSED BY CURVE ABOVE " + + "SLANTED EQUALGREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUALSMALLER THA" + + "NLARGER THANSMALLER THAN OR EQUAL TOLARGER THAN OR EQUAL TOEQUALS SIGN W" + + "ITH BUMPY ABOVEPRECEDES ABOVE SINGLE-LINE EQUALS SIGNSUCCEEDS ABOVE SING" + + "LE-LINE EQUALS SIGNPRECEDES ABOVE SINGLE-LINE NOT EQUAL TOSUCCEEDS ABOVE" + + " SINGLE-LINE NOT EQUAL TOPRECEDES ABOVE EQUALS SIGNSUCCEEDS ABOVE EQUALS") + ("" + + " SIGNPRECEDES ABOVE NOT EQUAL TOSUCCEEDS ABOVE NOT EQUAL TOPRECEDES ABOV" + + "E ALMOST EQUAL TOSUCCEEDS ABOVE ALMOST EQUAL TOPRECEDES ABOVE NOT ALMOST" + + " EQUAL TOSUCCEEDS ABOVE NOT ALMOST EQUAL TODOUBLE PRECEDESDOUBLE SUCCEED" + + "SSUBSET WITH DOTSUPERSET WITH DOTSUBSET WITH PLUS SIGN BELOWSUPERSET WIT" + + "H PLUS SIGN BELOWSUBSET WITH MULTIPLICATION SIGN BELOWSUPERSET WITH MULT" + + "IPLICATION SIGN BELOWSUBSET OF OR EQUAL TO WITH DOT ABOVESUPERSET OF OR " + + "EQUAL TO WITH DOT ABOVESUBSET OF ABOVE EQUALS SIGNSUPERSET OF ABOVE EQUA" + + "LS SIGNSUBSET OF ABOVE TILDE OPERATORSUPERSET OF ABOVE TILDE OPERATORSUB" + + "SET OF ABOVE ALMOST EQUAL TOSUPERSET OF ABOVE ALMOST EQUAL TOSUBSET OF A" + + "BOVE NOT EQUAL TOSUPERSET OF ABOVE NOT EQUAL TOSQUARE LEFT OPEN BOX OPER" + + "ATORSQUARE RIGHT OPEN BOX OPERATORCLOSED SUBSETCLOSED SUPERSETCLOSED SUB" + + "SET OR EQUAL TOCLOSED SUPERSET OR EQUAL TOSUBSET ABOVE SUPERSETSUPERSET " + + "ABOVE SUBSETSUBSET ABOVE SUBSETSUPERSET ABOVE SUPERSETSUPERSET BESIDE SU" + + "BSETSUPERSET BESIDE AND JOINED BY DASH WITH SUBSETELEMENT OF OPENING DOW" + + "NWARDSPITCHFORK WITH TEE TOPTRANSVERSAL INTERSECTIONFORKINGNONFORKINGSHO" + + "RT LEFT TACKSHORT DOWN TACKSHORT UP TACKPERPENDICULAR WITH SVERTICAL BAR" + + " TRIPLE RIGHT TURNSTILEDOUBLE VERTICAL BAR LEFT TURNSTILEVERTICAL BAR DO" + + "UBLE LEFT TURNSTILEDOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILELONG DASH FR" + + "OM LEFT MEMBER OF DOUBLE VERTICALSHORT DOWN TACK WITH OVERBARSHORT UP TA" + + "CK WITH UNDERBARSHORT UP TACK ABOVE SHORT DOWN TACKDOUBLE DOWN TACKDOUBL" + + "E UP TACKDOUBLE STROKE NOT SIGNREVERSED DOUBLE STROKE NOT SIGNDOES NOT D" + + "IVIDE WITH REVERSED NEGATION SLASHVERTICAL LINE WITH CIRCLE ABOVEVERTICA" + + "L LINE WITH CIRCLE BELOWDOWN TACK WITH CIRCLE BELOWPARALLEL WITH HORIZON" + + "TAL STROKEPARALLEL WITH TILDE OPERATORTRIPLE VERTICAL BAR BINARY RELATIO" + + "NTRIPLE VERTICAL BAR WITH HORIZONTAL STROKETRIPLE COLON OPERATORTRIPLE N" + + "ESTED LESS-THANTRIPLE NESTED GREATER-THANDOUBLE-LINE SLANTED LESS-THAN O" + + "R EQUAL TODOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TOTRIPLE SOLIDUS BIN" + + "ARY RELATIONLARGE TRIPLE VERTICAL BAR OPERATORDOUBLE SOLIDUS OPERATORWHI" + + "TE VERTICAL BARN-ARY WHITE VERTICAL BARNORTH EAST WHITE ARROWNORTH WEST " + + "WHITE ARROWSOUTH EAST WHITE ARROWSOUTH WEST WHITE ARROWLEFT RIGHT WHITE " + + "ARROWLEFTWARDS BLACK ARROWUPWARDS BLACK ARROWDOWNWARDS BLACK ARROWNORTH " + + "EAST BLACK ARROWNORTH WEST BLACK ARROWSOUTH EAST BLACK ARROWSOUTH WEST B" + + "LACK ARROWLEFT RIGHT BLACK ARROWUP DOWN BLACK ARROWRIGHTWARDS ARROW WITH" + + " TIP DOWNWARDSRIGHTWARDS ARROW WITH TIP UPWARDSLEFTWARDS ARROW WITH TIP " + + "DOWNWARDSLEFTWARDS ARROW WITH TIP UPWARDSSQUARE WITH TOP HALF BLACKSQUAR" + + "E WITH BOTTOM HALF BLACKSQUARE WITH UPPER RIGHT DIAGONAL HALF BLACKSQUAR" + + "E WITH LOWER LEFT DIAGONAL HALF BLACKDIAMOND WITH LEFT HALF BLACKDIAMOND" + + " WITH RIGHT HALF BLACKDIAMOND WITH TOP HALF BLACKDIAMOND WITH BOTTOM HAL" + + "F BLACKDOTTED SQUAREBLACK LARGE SQUAREWHITE LARGE SQUAREBLACK VERY SMALL" + + " SQUAREWHITE VERY SMALL SQUAREBLACK PENTAGONWHITE PENTAGONWHITE HEXAGONB" + + "LACK HEXAGONHORIZONTAL BLACK HEXAGONBLACK LARGE CIRCLEBLACK MEDIUM DIAMO" + + "NDWHITE MEDIUM DIAMONDBLACK MEDIUM LOZENGEWHITE MEDIUM LOZENGEBLACK SMAL" + + "L DIAMONDBLACK SMALL LOZENGEWHITE SMALL LOZENGEBLACK HORIZONTAL ELLIPSEW" + + "HITE HORIZONTAL ELLIPSEBLACK VERTICAL ELLIPSEWHITE VERTICAL ELLIPSELEFT " + + "ARROW WITH SMALL CIRCLETHREE LEFTWARDS ARROWSLEFT ARROW WITH CIRCLED PLU" + + "SLONG LEFTWARDS SQUIGGLE ARROWLEFTWARDS TWO-HEADED ARROW WITH VERTICAL S" + + "TROKELEFTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKELEFTWARDS TWO" + + "-HEADED ARROW FROM BARLEFTWARDS TWO-HEADED TRIPLE DASH ARROWLEFTWARDS AR" + + "ROW WITH DOTTED STEMLEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKELEFTWA" + + "RDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKELEFTWARDS TWO-HEADED ARRO" + + "W WITH TAILLEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKELEFT" + + "WARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKELEFTWARDS AR" + + "ROW THROUGH XWAVE ARROW POINTING DIRECTLY LEFTEQUALS SIGN ABOVE LEFTWARD" + + "S ARROWREVERSE TILDE OPERATOR ABOVE LEFTWARDS ARROWLEFTWARDS ARROW ABOVE" + + " REVERSE ALMOST EQUAL TORIGHTWARDS ARROW THROUGH GREATER-THANRIGHTWARDS " + + "ARROW THROUGH SUPERSETLEFTWARDS QUADRUPLE ARROWRIGHTWARDS QUADRUPLE ARRO" + + "WREVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROWRIGHTWARDS ARROW ABOVE REV" + + "ERSE ALMOST EQUAL TOTILDE OPERATOR ABOVE LEFTWARDS ARROWLEFTWARDS ARROW " + + "ABOVE ALMOST EQUAL TOLEFTWARDS ARROW ABOVE REVERSE TILDE OPERATORRIGHTWA" + + "RDS ARROW ABOVE REVERSE TILDE OPERATORDOWNWARDS TRIANGLE-HEADED ZIGZAG A" + + "RROWSHORT SLANTED NORTH ARROWSHORT BACKSLANTED SOUTH ARROWWHITE MEDIUM S" + + "TARBLACK SMALL STARWHITE SMALL STARBLACK RIGHT-POINTING PENTAGONWHITE RI" + + "GHT-POINTING PENTAGONHEAVY LARGE CIRCLEHEAVY OVAL WITH OVAL INSIDEHEAVY " + + "CIRCLE WITH CIRCLE INSIDEHEAVY CIRCLEHEAVY CIRCLED SALTIRESLANTED NORTH ") + ("" + + "ARROW WITH HOOKED HEADBACKSLANTED SOUTH ARROW WITH HOOKED TAILSLANTED NO" + + "RTH ARROW WITH HORIZONTAL TAILBACKSLANTED SOUTH ARROW WITH HORIZONTAL TA" + + "ILBENT ARROW POINTING DOWNWARDS THEN NORTH EASTSHORT BENT ARROW POINTING" + + " DOWNWARDS THEN NORTH EASTLEFTWARDS TRIANGLE-HEADED ARROWUPWARDS TRIANGL" + + "E-HEADED ARROWRIGHTWARDS TRIANGLE-HEADED ARROWDOWNWARDS TRIANGLE-HEADED " + + "ARROWLEFT RIGHT TRIANGLE-HEADED ARROWUP DOWN TRIANGLE-HEADED ARROWNORTH " + + "WEST TRIANGLE-HEADED ARROWNORTH EAST TRIANGLE-HEADED ARROWSOUTH EAST TRI" + + "ANGLE-HEADED ARROWSOUTH WEST TRIANGLE-HEADED ARROWLEFTWARDS TRIANGLE-HEA" + + "DED DASHED ARROWUPWARDS TRIANGLE-HEADED DASHED ARROWRIGHTWARDS TRIANGLE-" + + "HEADED DASHED ARROWDOWNWARDS TRIANGLE-HEADED DASHED ARROWCLOCKWISE TRIAN" + + "GLE-HEADED OPEN CIRCLE ARROWANTICLOCKWISE TRIANGLE-HEADED OPEN CIRCLE AR" + + "ROWLEFTWARDS TRIANGLE-HEADED ARROW TO BARUPWARDS TRIANGLE-HEADED ARROW T" + + "O BARRIGHTWARDS TRIANGLE-HEADED ARROW TO BARDOWNWARDS TRIANGLE-HEADED AR" + + "ROW TO BARNORTH WEST TRIANGLE-HEADED ARROW TO BARNORTH EAST TRIANGLE-HEA" + + "DED ARROW TO BARSOUTH EAST TRIANGLE-HEADED ARROW TO BARSOUTH WEST TRIANG" + + "LE-HEADED ARROW TO BARLEFTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZO" + + "NTAL STROKEUPWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKERI" + + "GHTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKEDOWNWARDS TR" + + "IANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKEHORIZONTAL TAB KEYVERTI" + + "CAL TAB KEYLEFTWARDS TRIANGLE-HEADED ARROW OVER RIGHTWARDS TRIANGLE-HEAD" + + "ED ARROWUPWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF DOWNWARDS TRIANGLE-HE" + + "ADED ARROWRIGHTWARDS TRIANGLE-HEADED ARROW OVER LEFTWARDS TRIANGLE-HEADE" + + "D ARROWDOWNWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF UPWARDS TRIANGLE-HEA" + + "DED ARROWLEFTWARDS TRIANGLE-HEADED PAIRED ARROWSUPWARDS TRIANGLE-HEADED " + + "PAIRED ARROWSRIGHTWARDS TRIANGLE-HEADED PAIRED ARROWSDOWNWARDS TRIANGLE-" + + "HEADED PAIRED ARROWSLEFTWARDS BLACK CIRCLED WHITE ARROWUPWARDS BLACK CIR" + + "CLED WHITE ARROWRIGHTWARDS BLACK CIRCLED WHITE ARROWDOWNWARDS BLACK CIRC" + + "LED WHITE ARROWANTICLOCKWISE TRIANGLE-HEADED RIGHT U-SHAPED ARROWANTICLO" + + "CKWISE TRIANGLE-HEADED BOTTOM U-SHAPED ARROWANTICLOCKWISE TRIANGLE-HEADE" + + "D LEFT U-SHAPED ARROWANTICLOCKWISE TRIANGLE-HEADED TOP U-SHAPED ARROWRET" + + "URN LEFTRETURN RIGHTNEWLINE LEFTNEWLINE RIGHTFOUR CORNER ARROWS CIRCLING" + + " ANTICLOCKWISERIGHTWARDS BLACK ARROWTHREE-D TOP-LIGHTED LEFTWARDS EQUILA" + + "TERAL ARROWHEADTHREE-D RIGHT-LIGHTED UPWARDS EQUILATERAL ARROWHEADTHREE-" + + "D TOP-LIGHTED RIGHTWARDS EQUILATERAL ARROWHEADTHREE-D LEFT-LIGHTED DOWNW" + + "ARDS EQUILATERAL ARROWHEADBLACK LEFTWARDS EQUILATERAL ARROWHEADBLACK UPW" + + "ARDS EQUILATERAL ARROWHEADBLACK RIGHTWARDS EQUILATERAL ARROWHEADBLACK DO" + + "WNWARDS EQUILATERAL ARROWHEADDOWNWARDS TRIANGLE-HEADED ARROW WITH LONG T" + + "IP LEFTWARDSDOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDSUPWA" + + "RDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDSUPWARDS TRIANGLE-HEADED" + + " ARROW WITH LONG TIP RIGHTWARDSLEFTWARDS TRIANGLE-HEADED ARROW WITH LONG" + + " TIP UPWARDSRIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDSLEFTWA" + + "RDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDSRIGHTWARDS TRIANGLE-HEA" + + "DED ARROW WITH LONG TIP DOWNWARDSBLACK CURVED DOWNWARDS AND LEFTWARDS AR" + + "ROWBLACK CURVED DOWNWARDS AND RIGHTWARDS ARROWBLACK CURVED UPWARDS AND L" + + "EFTWARDS ARROWBLACK CURVED UPWARDS AND RIGHTWARDS ARROWBLACK CURVED LEFT" + + "WARDS AND UPWARDS ARROWBLACK CURVED RIGHTWARDS AND UPWARDS ARROWBLACK CU" + + "RVED LEFTWARDS AND DOWNWARDS ARROWBLACK CURVED RIGHTWARDS AND DOWNWARDS " + + "ARROWRIBBON ARROW DOWN LEFTRIBBON ARROW DOWN RIGHTRIBBON ARROW UP LEFTRI" + + "BBON ARROW UP RIGHTRIBBON ARROW LEFT UPRIBBON ARROW RIGHT UPRIBBON ARROW" + + " LEFT DOWNRIBBON ARROW RIGHT DOWNUPWARDS WHITE ARROW FROM BAR WITH HORIZ" + + "ONTAL BARUP ARROWHEAD IN A RECTANGLE BOXBALLOT BOX WITH LIGHT XCIRCLED X" + + "CIRCLED BOLD XBLACK SQUARE CENTREDBLACK DIAMOND CENTREDTURNED BLACK PENT" + + "AGONHORIZONTAL BLACK OCTAGONBLACK OCTAGONBLACK MEDIUM UP-POINTING TRIANG" + + "LE CENTREDBLACK MEDIUM DOWN-POINTING TRIANGLE CENTREDBLACK MEDIUM LEFT-P" + + "OINTING TRIANGLE CENTREDBLACK MEDIUM RIGHT-POINTING TRIANGLE CENTREDTOP " + + "HALF BLACK CIRCLEBOTTOM HALF BLACK CIRCLELIGHT FOUR POINTED BLACK CUSPRO" + + "TATED LIGHT FOUR POINTED BLACK CUSPWHITE FOUR POINTED CUSPROTATED WHITE " + + "FOUR POINTED CUSPSQUARE POSITION INDICATORUNCERTAINTY SIGNLEFTWARDS TWO-" + + "HEADED ARROW WITH TRIANGLE ARROWHEADSUPWARDS TWO-HEADED ARROW WITH TRIAN" + + "GLE ARROWHEADSRIGHTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADSDOWNWA" + + "RDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADSGLAGOLITIC CAPITAL LETTER A" + + "ZUGLAGOLITIC CAPITAL LETTER BUKYGLAGOLITIC CAPITAL LETTER VEDEGLAGOLITIC" + + " CAPITAL LETTER GLAGOLIGLAGOLITIC CAPITAL LETTER DOBROGLAGOLITIC CAPITAL" + + " LETTER YESTUGLAGOLITIC CAPITAL LETTER ZHIVETEGLAGOLITIC CAPITAL LETTER ") + ("" + + "DZELOGLAGOLITIC CAPITAL LETTER ZEMLJAGLAGOLITIC CAPITAL LETTER IZHEGLAGO" + + "LITIC CAPITAL LETTER INITIAL IZHEGLAGOLITIC CAPITAL LETTER IGLAGOLITIC C" + + "APITAL LETTER DJERVIGLAGOLITIC CAPITAL LETTER KAKOGLAGOLITIC CAPITAL LET" + + "TER LJUDIJEGLAGOLITIC CAPITAL LETTER MYSLITEGLAGOLITIC CAPITAL LETTER NA" + + "SHIGLAGOLITIC CAPITAL LETTER ONUGLAGOLITIC CAPITAL LETTER POKOJIGLAGOLIT" + + "IC CAPITAL LETTER RITSIGLAGOLITIC CAPITAL LETTER SLOVOGLAGOLITIC CAPITAL" + + " LETTER TVRIDOGLAGOLITIC CAPITAL LETTER UKUGLAGOLITIC CAPITAL LETTER FRI" + + "TUGLAGOLITIC CAPITAL LETTER HERUGLAGOLITIC CAPITAL LETTER OTUGLAGOLITIC " + + "CAPITAL LETTER PEGLAGOLITIC CAPITAL LETTER SHTAGLAGOLITIC CAPITAL LETTER" + + " TSIGLAGOLITIC CAPITAL LETTER CHRIVIGLAGOLITIC CAPITAL LETTER SHAGLAGOLI" + + "TIC CAPITAL LETTER YERUGLAGOLITIC CAPITAL LETTER YERIGLAGOLITIC CAPITAL " + + "LETTER YATIGLAGOLITIC CAPITAL LETTER SPIDERY HAGLAGOLITIC CAPITAL LETTER" + + " YUGLAGOLITIC CAPITAL LETTER SMALL YUSGLAGOLITIC CAPITAL LETTER SMALL YU" + + "S WITH TAILGLAGOLITIC CAPITAL LETTER YOGLAGOLITIC CAPITAL LETTER IOTATED" + + " SMALL YUSGLAGOLITIC CAPITAL LETTER BIG YUSGLAGOLITIC CAPITAL LETTER IOT" + + "ATED BIG YUSGLAGOLITIC CAPITAL LETTER FITAGLAGOLITIC CAPITAL LETTER IZHI" + + "TSAGLAGOLITIC CAPITAL LETTER SHTAPICGLAGOLITIC CAPITAL LETTER TROKUTASTI" + + " AGLAGOLITIC CAPITAL LETTER LATINATE MYSLITEGLAGOLITIC SMALL LETTER AZUG" + + "LAGOLITIC SMALL LETTER BUKYGLAGOLITIC SMALL LETTER VEDEGLAGOLITIC SMALL " + + "LETTER GLAGOLIGLAGOLITIC SMALL LETTER DOBROGLAGOLITIC SMALL LETTER YESTU" + + "GLAGOLITIC SMALL LETTER ZHIVETEGLAGOLITIC SMALL LETTER DZELOGLAGOLITIC S" + + "MALL LETTER ZEMLJAGLAGOLITIC SMALL LETTER IZHEGLAGOLITIC SMALL LETTER IN" + + "ITIAL IZHEGLAGOLITIC SMALL LETTER IGLAGOLITIC SMALL LETTER DJERVIGLAGOLI" + + "TIC SMALL LETTER KAKOGLAGOLITIC SMALL LETTER LJUDIJEGLAGOLITIC SMALL LET" + + "TER MYSLITEGLAGOLITIC SMALL LETTER NASHIGLAGOLITIC SMALL LETTER ONUGLAGO" + + "LITIC SMALL LETTER POKOJIGLAGOLITIC SMALL LETTER RITSIGLAGOLITIC SMALL L" + + "ETTER SLOVOGLAGOLITIC SMALL LETTER TVRIDOGLAGOLITIC SMALL LETTER UKUGLAG" + + "OLITIC SMALL LETTER FRITUGLAGOLITIC SMALL LETTER HERUGLAGOLITIC SMALL LE" + + "TTER OTUGLAGOLITIC SMALL LETTER PEGLAGOLITIC SMALL LETTER SHTAGLAGOLITIC" + + " SMALL LETTER TSIGLAGOLITIC SMALL LETTER CHRIVIGLAGOLITIC SMALL LETTER S" + + "HAGLAGOLITIC SMALL LETTER YERUGLAGOLITIC SMALL LETTER YERIGLAGOLITIC SMA" + + "LL LETTER YATIGLAGOLITIC SMALL LETTER SPIDERY HAGLAGOLITIC SMALL LETTER " + + "YUGLAGOLITIC SMALL LETTER SMALL YUSGLAGOLITIC SMALL LETTER SMALL YUS WIT" + + "H TAILGLAGOLITIC SMALL LETTER YOGLAGOLITIC SMALL LETTER IOTATED SMALL YU" + + "SGLAGOLITIC SMALL LETTER BIG YUSGLAGOLITIC SMALL LETTER IOTATED BIG YUSG" + + "LAGOLITIC SMALL LETTER FITAGLAGOLITIC SMALL LETTER IZHITSAGLAGOLITIC SMA" + + "LL LETTER SHTAPICGLAGOLITIC SMALL LETTER TROKUTASTI AGLAGOLITIC SMALL LE" + + "TTER LATINATE MYSLITELATIN CAPITAL LETTER L WITH DOUBLE BARLATIN SMALL L" + + "ETTER L WITH DOUBLE BARLATIN CAPITAL LETTER L WITH MIDDLE TILDELATIN CAP" + + "ITAL LETTER P WITH STROKELATIN CAPITAL LETTER R WITH TAILLATIN SMALL LET" + + "TER A WITH STROKELATIN SMALL LETTER T WITH DIAGONAL STROKELATIN CAPITAL " + + "LETTER H WITH DESCENDERLATIN SMALL LETTER H WITH DESCENDERLATIN CAPITAL " + + "LETTER K WITH DESCENDERLATIN SMALL LETTER K WITH DESCENDERLATIN CAPITAL " + + "LETTER Z WITH DESCENDERLATIN SMALL LETTER Z WITH DESCENDERLATIN CAPITAL " + + "LETTER ALPHALATIN CAPITAL LETTER M WITH HOOKLATIN CAPITAL LETTER TURNED " + + "ALATIN CAPITAL LETTER TURNED ALPHALATIN SMALL LETTER V WITH RIGHT HOOKLA" + + "TIN CAPITAL LETTER W WITH HOOKLATIN SMALL LETTER W WITH HOOKLATIN SMALL " + + "LETTER V WITH CURLLATIN CAPITAL LETTER HALF HLATIN SMALL LETTER HALF HLA" + + "TIN SMALL LETTER TAILLESS PHILATIN SMALL LETTER E WITH NOTCHLATIN SMALL " + + "LETTER TURNED R WITH TAILLATIN SMALL LETTER O WITH LOW RING INSIDELATIN " + + "LETTER SMALL CAPITAL TURNED ELATIN SUBSCRIPT SMALL LETTER JMODIFIER LETT" + + "ER CAPITAL VLATIN CAPITAL LETTER S WITH SWASH TAILLATIN CAPITAL LETTER Z" + + " WITH SWASH TAILCOPTIC CAPITAL LETTER ALFACOPTIC SMALL LETTER ALFACOPTIC" + + " CAPITAL LETTER VIDACOPTIC SMALL LETTER VIDACOPTIC CAPITAL LETTER GAMMAC" + + "OPTIC SMALL LETTER GAMMACOPTIC CAPITAL LETTER DALDACOPTIC SMALL LETTER D" + + "ALDACOPTIC CAPITAL LETTER EIECOPTIC SMALL LETTER EIECOPTIC CAPITAL LETTE" + + "R SOUCOPTIC SMALL LETTER SOUCOPTIC CAPITAL LETTER ZATACOPTIC SMALL LETTE" + + "R ZATACOPTIC CAPITAL LETTER HATECOPTIC SMALL LETTER HATECOPTIC CAPITAL L" + + "ETTER THETHECOPTIC SMALL LETTER THETHECOPTIC CAPITAL LETTER IAUDACOPTIC " + + "SMALL LETTER IAUDACOPTIC CAPITAL LETTER KAPACOPTIC SMALL LETTER KAPACOPT" + + "IC CAPITAL LETTER LAULACOPTIC SMALL LETTER LAULACOPTIC CAPITAL LETTER MI" + + "COPTIC SMALL LETTER MICOPTIC CAPITAL LETTER NICOPTIC SMALL LETTER NICOPT" + + "IC CAPITAL LETTER KSICOPTIC SMALL LETTER KSICOPTIC CAPITAL LETTER OCOPTI" + + "C SMALL LETTER OCOPTIC CAPITAL LETTER PICOPTIC SMALL LETTER PICOPTIC CAP") + ("" + + "ITAL LETTER ROCOPTIC SMALL LETTER ROCOPTIC CAPITAL LETTER SIMACOPTIC SMA" + + "LL LETTER SIMACOPTIC CAPITAL LETTER TAUCOPTIC SMALL LETTER TAUCOPTIC CAP" + + "ITAL LETTER UACOPTIC SMALL LETTER UACOPTIC CAPITAL LETTER FICOPTIC SMALL" + + " LETTER FICOPTIC CAPITAL LETTER KHICOPTIC SMALL LETTER KHICOPTIC CAPITAL" + + " LETTER PSICOPTIC SMALL LETTER PSICOPTIC CAPITAL LETTER OOUCOPTIC SMALL " + + "LETTER OOUCOPTIC CAPITAL LETTER DIALECT-P ALEFCOPTIC SMALL LETTER DIALEC" + + "T-P ALEFCOPTIC CAPITAL LETTER OLD COPTIC AINCOPTIC SMALL LETTER OLD COPT" + + "IC AINCOPTIC CAPITAL LETTER CRYPTOGRAMMIC EIECOPTIC SMALL LETTER CRYPTOG" + + "RAMMIC EIECOPTIC CAPITAL LETTER DIALECT-P KAPACOPTIC SMALL LETTER DIALEC" + + "T-P KAPACOPTIC CAPITAL LETTER DIALECT-P NICOPTIC SMALL LETTER DIALECT-P " + + "NICOPTIC CAPITAL LETTER CRYPTOGRAMMIC NICOPTIC SMALL LETTER CRYPTOGRAMMI" + + "C NICOPTIC CAPITAL LETTER OLD COPTIC OOUCOPTIC SMALL LETTER OLD COPTIC O" + + "OUCOPTIC CAPITAL LETTER SAMPICOPTIC SMALL LETTER SAMPICOPTIC CAPITAL LET" + + "TER CROSSED SHEICOPTIC SMALL LETTER CROSSED SHEICOPTIC CAPITAL LETTER OL" + + "D COPTIC SHEICOPTIC SMALL LETTER OLD COPTIC SHEICOPTIC CAPITAL LETTER OL" + + "D COPTIC ESHCOPTIC SMALL LETTER OLD COPTIC ESHCOPTIC CAPITAL LETTER AKHM" + + "IMIC KHEICOPTIC SMALL LETTER AKHMIMIC KHEICOPTIC CAPITAL LETTER DIALECT-" + + "P HORICOPTIC SMALL LETTER DIALECT-P HORICOPTIC CAPITAL LETTER OLD COPTIC" + + " HORICOPTIC SMALL LETTER OLD COPTIC HORICOPTIC CAPITAL LETTER OLD COPTIC" + + " HACOPTIC SMALL LETTER OLD COPTIC HACOPTIC CAPITAL LETTER L-SHAPED HACOP" + + "TIC SMALL LETTER L-SHAPED HACOPTIC CAPITAL LETTER OLD COPTIC HEICOPTIC S" + + "MALL LETTER OLD COPTIC HEICOPTIC CAPITAL LETTER OLD COPTIC HATCOPTIC SMA" + + "LL LETTER OLD COPTIC HATCOPTIC CAPITAL LETTER OLD COPTIC GANGIACOPTIC SM" + + "ALL LETTER OLD COPTIC GANGIACOPTIC CAPITAL LETTER OLD COPTIC DJACOPTIC S" + + "MALL LETTER OLD COPTIC DJACOPTIC CAPITAL LETTER OLD COPTIC SHIMACOPTIC S" + + "MALL LETTER OLD COPTIC SHIMACOPTIC CAPITAL LETTER OLD NUBIAN SHIMACOPTIC" + + " SMALL LETTER OLD NUBIAN SHIMACOPTIC CAPITAL LETTER OLD NUBIAN NGICOPTIC" + + " SMALL LETTER OLD NUBIAN NGICOPTIC CAPITAL LETTER OLD NUBIAN NYICOPTIC S" + + "MALL LETTER OLD NUBIAN NYICOPTIC CAPITAL LETTER OLD NUBIAN WAUCOPTIC SMA" + + "LL LETTER OLD NUBIAN WAUCOPTIC SYMBOL KAICOPTIC SYMBOL MI ROCOPTIC SYMBO" + + "L PI ROCOPTIC SYMBOL STAUROSCOPTIC SYMBOL TAU ROCOPTIC SYMBOL KHI ROCOPT" + + "IC SYMBOL SHIMA SIMACOPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEICOPTIC SMALL" + + " LETTER CRYPTOGRAMMIC SHEICOPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIACOPT" + + "IC SMALL LETTER CRYPTOGRAMMIC GANGIACOPTIC COMBINING NI ABOVECOPTIC COMB" + + "INING SPIRITUS ASPERCOPTIC COMBINING SPIRITUS LENISCOPTIC CAPITAL LETTER" + + " BOHAIRIC KHEICOPTIC SMALL LETTER BOHAIRIC KHEICOPTIC OLD NUBIAN FULL ST" + + "OPCOPTIC OLD NUBIAN DIRECT QUESTION MARKCOPTIC OLD NUBIAN INDIRECT QUEST" + + "ION MARKCOPTIC OLD NUBIAN VERSE DIVIDERCOPTIC FRACTION ONE HALFCOPTIC FU" + + "LL STOPCOPTIC MORPHOLOGICAL DIVIDERGEORGIAN SMALL LETTER ANGEORGIAN SMAL" + + "L LETTER BANGEORGIAN SMALL LETTER GANGEORGIAN SMALL LETTER DONGEORGIAN S" + + "MALL LETTER ENGEORGIAN SMALL LETTER VINGEORGIAN SMALL LETTER ZENGEORGIAN" + + " SMALL LETTER TANGEORGIAN SMALL LETTER INGEORGIAN SMALL LETTER KANGEORGI" + + "AN SMALL LETTER LASGEORGIAN SMALL LETTER MANGEORGIAN SMALL LETTER NARGEO" + + "RGIAN SMALL LETTER ONGEORGIAN SMALL LETTER PARGEORGIAN SMALL LETTER ZHAR" + + "GEORGIAN SMALL LETTER RAEGEORGIAN SMALL LETTER SANGEORGIAN SMALL LETTER " + + "TARGEORGIAN SMALL LETTER UNGEORGIAN SMALL LETTER PHARGEORGIAN SMALL LETT" + + "ER KHARGEORGIAN SMALL LETTER GHANGEORGIAN SMALL LETTER QARGEORGIAN SMALL" + + " LETTER SHINGEORGIAN SMALL LETTER CHINGEORGIAN SMALL LETTER CANGEORGIAN " + + "SMALL LETTER JILGEORGIAN SMALL LETTER CILGEORGIAN SMALL LETTER CHARGEORG" + + "IAN SMALL LETTER XANGEORGIAN SMALL LETTER JHANGEORGIAN SMALL LETTER HAEG" + + "EORGIAN SMALL LETTER HEGEORGIAN SMALL LETTER HIEGEORGIAN SMALL LETTER WE" + + "GEORGIAN SMALL LETTER HARGEORGIAN SMALL LETTER HOEGEORGIAN SMALL LETTER " + + "YNGEORGIAN SMALL LETTER AENTIFINAGH LETTER YATIFINAGH LETTER YABTIFINAGH" + + " LETTER YABHTIFINAGH LETTER YAGTIFINAGH LETTER YAGHHTIFINAGH LETTER BERB" + + "ER ACADEMY YAJTIFINAGH LETTER YAJTIFINAGH LETTER YADTIFINAGH LETTER YADH" + + "TIFINAGH LETTER YADDTIFINAGH LETTER YADDHTIFINAGH LETTER YEYTIFINAGH LET" + + "TER YAFTIFINAGH LETTER YAKTIFINAGH LETTER TUAREG YAKTIFINAGH LETTER YAKH" + + "HTIFINAGH LETTER YAHTIFINAGH LETTER BERBER ACADEMY YAHTIFINAGH LETTER TU" + + "AREG YAHTIFINAGH LETTER YAHHTIFINAGH LETTER YAATIFINAGH LETTER YAKHTIFIN" + + "AGH LETTER TUAREG YAKHTIFINAGH LETTER YAQTIFINAGH LETTER TUAREG YAQTIFIN" + + "AGH LETTER YITIFINAGH LETTER YAZHTIFINAGH LETTER AHAGGAR YAZHTIFINAGH LE" + + "TTER TUAREG YAZHTIFINAGH LETTER YALTIFINAGH LETTER YAMTIFINAGH LETTER YA" + + "NTIFINAGH LETTER TUAREG YAGNTIFINAGH LETTER TUAREG YANGTIFINAGH LETTER Y" + + "APTIFINAGH LETTER YUTIFINAGH LETTER YARTIFINAGH LETTER YARRTIFINAGH LETT") + ("" + + "ER YAGHTIFINAGH LETTER TUAREG YAGHTIFINAGH LETTER AYER YAGHTIFINAGH LETT" + + "ER YASTIFINAGH LETTER YASSTIFINAGH LETTER YASHTIFINAGH LETTER YATTIFINAG" + + "H LETTER YATHTIFINAGH LETTER YACHTIFINAGH LETTER YATTTIFINAGH LETTER YAV" + + "TIFINAGH LETTER YAWTIFINAGH LETTER YAYTIFINAGH LETTER YAZTIFINAGH LETTER" + + " TAWELLEMET YAZTIFINAGH LETTER YAZZTIFINAGH LETTER YETIFINAGH LETTER YOT" + + "IFINAGH MODIFIER LETTER LABIALIZATION MARKTIFINAGH SEPARATOR MARKTIFINAG" + + "H CONSONANT JOINERETHIOPIC SYLLABLE LOAETHIOPIC SYLLABLE MOAETHIOPIC SYL" + + "LABLE ROAETHIOPIC SYLLABLE SOAETHIOPIC SYLLABLE SHOAETHIOPIC SYLLABLE BO" + + "AETHIOPIC SYLLABLE TOAETHIOPIC SYLLABLE COAETHIOPIC SYLLABLE NOAETHIOPIC" + + " SYLLABLE NYOAETHIOPIC SYLLABLE GLOTTAL OAETHIOPIC SYLLABLE ZOAETHIOPIC " + + "SYLLABLE DOAETHIOPIC SYLLABLE DDOAETHIOPIC SYLLABLE JOAETHIOPIC SYLLABLE" + + " THOAETHIOPIC SYLLABLE CHOAETHIOPIC SYLLABLE PHOAETHIOPIC SYLLABLE POAET" + + "HIOPIC SYLLABLE GGWAETHIOPIC SYLLABLE GGWIETHIOPIC SYLLABLE GGWEEETHIOPI" + + "C SYLLABLE GGWEETHIOPIC SYLLABLE SSAETHIOPIC SYLLABLE SSUETHIOPIC SYLLAB" + + "LE SSIETHIOPIC SYLLABLE SSAAETHIOPIC SYLLABLE SSEEETHIOPIC SYLLABLE SSEE" + + "THIOPIC SYLLABLE SSOETHIOPIC SYLLABLE CCAETHIOPIC SYLLABLE CCUETHIOPIC S" + + "YLLABLE CCIETHIOPIC SYLLABLE CCAAETHIOPIC SYLLABLE CCEEETHIOPIC SYLLABLE" + + " CCEETHIOPIC SYLLABLE CCOETHIOPIC SYLLABLE ZZAETHIOPIC SYLLABLE ZZUETHIO" + + "PIC SYLLABLE ZZIETHIOPIC SYLLABLE ZZAAETHIOPIC SYLLABLE ZZEEETHIOPIC SYL" + + "LABLE ZZEETHIOPIC SYLLABLE ZZOETHIOPIC SYLLABLE CCHAETHIOPIC SYLLABLE CC" + + "HUETHIOPIC SYLLABLE CCHIETHIOPIC SYLLABLE CCHAAETHIOPIC SYLLABLE CCHEEET" + + "HIOPIC SYLLABLE CCHEETHIOPIC SYLLABLE CCHOETHIOPIC SYLLABLE QYAETHIOPIC " + + "SYLLABLE QYUETHIOPIC SYLLABLE QYIETHIOPIC SYLLABLE QYAAETHIOPIC SYLLABLE" + + " QYEEETHIOPIC SYLLABLE QYEETHIOPIC SYLLABLE QYOETHIOPIC SYLLABLE KYAETHI" + + "OPIC SYLLABLE KYUETHIOPIC SYLLABLE KYIETHIOPIC SYLLABLE KYAAETHIOPIC SYL" + + "LABLE KYEEETHIOPIC SYLLABLE KYEETHIOPIC SYLLABLE KYOETHIOPIC SYLLABLE XY" + + "AETHIOPIC SYLLABLE XYUETHIOPIC SYLLABLE XYIETHIOPIC SYLLABLE XYAAETHIOPI" + + "C SYLLABLE XYEEETHIOPIC SYLLABLE XYEETHIOPIC SYLLABLE XYOETHIOPIC SYLLAB" + + "LE GYAETHIOPIC SYLLABLE GYUETHIOPIC SYLLABLE GYIETHIOPIC SYLLABLE GYAAET" + + "HIOPIC SYLLABLE GYEEETHIOPIC SYLLABLE GYEETHIOPIC SYLLABLE GYOCOMBINING " + + "CYRILLIC LETTER BECOMBINING CYRILLIC LETTER VECOMBINING CYRILLIC LETTER " + + "GHECOMBINING CYRILLIC LETTER DECOMBINING CYRILLIC LETTER ZHECOMBINING CY" + + "RILLIC LETTER ZECOMBINING CYRILLIC LETTER KACOMBINING CYRILLIC LETTER EL" + + "COMBINING CYRILLIC LETTER EMCOMBINING CYRILLIC LETTER ENCOMBINING CYRILL" + + "IC LETTER OCOMBINING CYRILLIC LETTER PECOMBINING CYRILLIC LETTER ERCOMBI" + + "NING CYRILLIC LETTER ESCOMBINING CYRILLIC LETTER TECOMBINING CYRILLIC LE" + + "TTER HACOMBINING CYRILLIC LETTER TSECOMBINING CYRILLIC LETTER CHECOMBINI" + + "NG CYRILLIC LETTER SHACOMBINING CYRILLIC LETTER SHCHACOMBINING CYRILLIC " + + "LETTER FITACOMBINING CYRILLIC LETTER ES-TECOMBINING CYRILLIC LETTER ACOM" + + "BINING CYRILLIC LETTER IECOMBINING CYRILLIC LETTER DJERVCOMBINING CYRILL" + + "IC LETTER MONOGRAPH UKCOMBINING CYRILLIC LETTER YATCOMBINING CYRILLIC LE" + + "TTER YUCOMBINING CYRILLIC LETTER IOTIFIED ACOMBINING CYRILLIC LETTER LIT" + + "TLE YUSCOMBINING CYRILLIC LETTER BIG YUSCOMBINING CYRILLIC LETTER IOTIFI" + + "ED BIG YUSRIGHT ANGLE SUBSTITUTION MARKERRIGHT ANGLE DOTTED SUBSTITUTION" + + " MARKERLEFT SUBSTITUTION BRACKETRIGHT SUBSTITUTION BRACKETLEFT DOTTED SU" + + "BSTITUTION BRACKETRIGHT DOTTED SUBSTITUTION BRACKETRAISED INTERPOLATION " + + "MARKERRAISED DOTTED INTERPOLATION MARKERDOTTED TRANSPOSITION MARKERLEFT " + + "TRANSPOSITION BRACKETRIGHT TRANSPOSITION BRACKETRAISED SQUARELEFT RAISED" + + " OMISSION BRACKETRIGHT RAISED OMISSION BRACKETEDITORIAL CORONISPARAGRAPH" + + "OSFORKED PARAGRAPHOSREVERSED FORKED PARAGRAPHOSHYPODIASTOLEDOTTED OBELOS" + + "DOWNWARDS ANCORAUPWARDS ANCORADOTTED RIGHT-POINTING ANGLEDOUBLE OBLIQUE " + + "HYPHENINVERTED INTERROBANGPALM BRANCHHYPHEN WITH DIAERESISTILDE WITH RIN" + + "G ABOVELEFT LOW PARAPHRASE BRACKETRIGHT LOW PARAPHRASE BRACKETTILDE WITH" + + " DOT ABOVETILDE WITH DOT BELOWLEFT VERTICAL BAR WITH QUILLRIGHT VERTICAL" + + " BAR WITH QUILLTOP LEFT HALF BRACKETTOP RIGHT HALF BRACKETBOTTOM LEFT HA" + + "LF BRACKETBOTTOM RIGHT HALF BRACKETLEFT SIDEWAYS U BRACKETRIGHT SIDEWAYS" + + " U BRACKETLEFT DOUBLE PARENTHESISRIGHT DOUBLE PARENTHESISTWO DOTS OVER O" + + "NE DOT PUNCTUATIONONE DOT OVER TWO DOTS PUNCTUATIONSQUARED FOUR DOT PUNC" + + "TUATIONFIVE DOT MARKREVERSED QUESTION MARKVERTICAL TILDERING POINTWORD S" + + "EPARATOR MIDDLE DOTTURNED COMMARAISED DOTRAISED COMMATURNED SEMICOLONDAG" + + "GER WITH LEFT GUARDDAGGER WITH RIGHT GUARDTURNED DAGGERTOP HALF SECTION " + + "SIGNTWO-EM DASHTHREE-EM DASHSTENOGRAPHIC FULL STOPVERTICAL SIX DOTSWIGGL" + + "Y VERTICAL LINECAPITULUMDOUBLE HYPHENREVERSED COMMADOUBLE LOW-REVERSED-9" + + " QUOTATION MARKDASH WITH LEFT UPTURNDOUBLE SUSPENSION MARKCJK RADICAL RE") + ("" + + "PEATCJK RADICAL CLIFFCJK RADICAL SECOND ONECJK RADICAL SECOND TWOCJK RAD" + + "ICAL SECOND THREECJK RADICAL PERSONCJK RADICAL BOXCJK RADICAL TABLECJK R" + + "ADICAL KNIFE ONECJK RADICAL KNIFE TWOCJK RADICAL DIVINATIONCJK RADICAL S" + + "EALCJK RADICAL SMALL ONECJK RADICAL SMALL TWOCJK RADICAL LAME ONECJK RAD" + + "ICAL LAME TWOCJK RADICAL LAME THREECJK RADICAL LAME FOURCJK RADICAL SNAK" + + "ECJK RADICAL THREADCJK RADICAL SNOUT ONECJK RADICAL SNOUT TWOCJK RADICAL" + + " HEART ONECJK RADICAL HEART TWOCJK RADICAL HANDCJK RADICAL RAPCJK RADICA" + + "L CHOKECJK RADICAL SUNCJK RADICAL MOONCJK RADICAL DEATHCJK RADICAL MOTHE" + + "RCJK RADICAL CIVILIANCJK RADICAL WATER ONECJK RADICAL WATER TWOCJK RADIC" + + "AL FIRECJK RADICAL PAW ONECJK RADICAL PAW TWOCJK RADICAL SIMPLIFIED HALF" + + " TREE TRUNKCJK RADICAL COWCJK RADICAL DOGCJK RADICAL JADECJK RADICAL BOL" + + "T OF CLOTHCJK RADICAL EYECJK RADICAL SPIRIT ONECJK RADICAL SPIRIT TWOCJK" + + " RADICAL BAMBOOCJK RADICAL SILKCJK RADICAL C-SIMPLIFIED SILKCJK RADICAL " + + "NET ONECJK RADICAL NET TWOCJK RADICAL NET THREECJK RADICAL NET FOURCJK R" + + "ADICAL MESHCJK RADICAL SHEEPCJK RADICAL RAMCJK RADICAL EWECJK RADICAL OL" + + "DCJK RADICAL BRUSH ONECJK RADICAL BRUSH TWOCJK RADICAL MEATCJK RADICAL M" + + "ORTARCJK RADICAL GRASS ONECJK RADICAL GRASS TWOCJK RADICAL GRASS THREECJ" + + "K RADICAL TIGERCJK RADICAL CLOTHESCJK RADICAL WEST ONECJK RADICAL WEST T" + + "WOCJK RADICAL C-SIMPLIFIED SEECJK RADICAL SIMPLIFIED HORNCJK RADICAL HOR" + + "NCJK RADICAL C-SIMPLIFIED SPEECHCJK RADICAL C-SIMPLIFIED SHELLCJK RADICA" + + "L FOOTCJK RADICAL C-SIMPLIFIED CARTCJK RADICAL SIMPLIFIED WALKCJK RADICA" + + "L WALK ONECJK RADICAL WALK TWOCJK RADICAL CITYCJK RADICAL C-SIMPLIFIED G" + + "OLDCJK RADICAL LONG ONECJK RADICAL LONG TWOCJK RADICAL C-SIMPLIFIED LONG" + + "CJK RADICAL C-SIMPLIFIED GATECJK RADICAL MOUND ONECJK RADICAL MOUND TWOC" + + "JK RADICAL RAINCJK RADICAL BLUECJK RADICAL C-SIMPLIFIED TANNED LEATHERCJ" + + "K RADICAL C-SIMPLIFIED LEAFCJK RADICAL C-SIMPLIFIED WINDCJK RADICAL C-SI" + + "MPLIFIED FLYCJK RADICAL EAT ONECJK RADICAL EAT TWOCJK RADICAL EAT THREEC" + + "JK RADICAL C-SIMPLIFIED EATCJK RADICAL HEADCJK RADICAL C-SIMPLIFIED HORS" + + "ECJK RADICAL BONECJK RADICAL GHOSTCJK RADICAL C-SIMPLIFIED FISHCJK RADIC" + + "AL C-SIMPLIFIED BIRDCJK RADICAL C-SIMPLIFIED SALTCJK RADICAL SIMPLIFIED " + + "WHEATCJK RADICAL SIMPLIFIED YELLOWCJK RADICAL C-SIMPLIFIED FROGCJK RADIC" + + "AL J-SIMPLIFIED EVENCJK RADICAL C-SIMPLIFIED EVENCJK RADICAL J-SIMPLIFIE" + + "D TOOTHCJK RADICAL C-SIMPLIFIED TOOTHCJK RADICAL J-SIMPLIFIED DRAGONCJK " + + "RADICAL C-SIMPLIFIED DRAGONCJK RADICAL TURTLECJK RADICAL J-SIMPLIFIED TU" + + "RTLECJK RADICAL C-SIMPLIFIED TURTLEKANGXI RADICAL ONEKANGXI RADICAL LINE" + + "KANGXI RADICAL DOTKANGXI RADICAL SLASHKANGXI RADICAL SECONDKANGXI RADICA" + + "L HOOKKANGXI RADICAL TWOKANGXI RADICAL LIDKANGXI RADICAL MANKANGXI RADIC" + + "AL LEGSKANGXI RADICAL ENTERKANGXI RADICAL EIGHTKANGXI RADICAL DOWN BOXKA" + + "NGXI RADICAL COVERKANGXI RADICAL ICEKANGXI RADICAL TABLEKANGXI RADICAL O" + + "PEN BOXKANGXI RADICAL KNIFEKANGXI RADICAL POWERKANGXI RADICAL WRAPKANGXI" + + " RADICAL SPOONKANGXI RADICAL RIGHT OPEN BOXKANGXI RADICAL HIDING ENCLOSU" + + "REKANGXI RADICAL TENKANGXI RADICAL DIVINATIONKANGXI RADICAL SEALKANGXI R" + + "ADICAL CLIFFKANGXI RADICAL PRIVATEKANGXI RADICAL AGAINKANGXI RADICAL MOU" + + "THKANGXI RADICAL ENCLOSUREKANGXI RADICAL EARTHKANGXI RADICAL SCHOLARKANG" + + "XI RADICAL GOKANGXI RADICAL GO SLOWLYKANGXI RADICAL EVENINGKANGXI RADICA" + + "L BIGKANGXI RADICAL WOMANKANGXI RADICAL CHILDKANGXI RADICAL ROOFKANGXI R" + + "ADICAL INCHKANGXI RADICAL SMALLKANGXI RADICAL LAMEKANGXI RADICAL CORPSEK" + + "ANGXI RADICAL SPROUTKANGXI RADICAL MOUNTAINKANGXI RADICAL RIVERKANGXI RA" + + "DICAL WORKKANGXI RADICAL ONESELFKANGXI RADICAL TURBANKANGXI RADICAL DRYK" + + "ANGXI RADICAL SHORT THREADKANGXI RADICAL DOTTED CLIFFKANGXI RADICAL LONG" + + " STRIDEKANGXI RADICAL TWO HANDSKANGXI RADICAL SHOOTKANGXI RADICAL BOWKAN" + + "GXI RADICAL SNOUTKANGXI RADICAL BRISTLEKANGXI RADICAL STEPKANGXI RADICAL" + + " HEARTKANGXI RADICAL HALBERDKANGXI RADICAL DOORKANGXI RADICAL HANDKANGXI" + + " RADICAL BRANCHKANGXI RADICAL RAPKANGXI RADICAL SCRIPTKANGXI RADICAL DIP" + + "PERKANGXI RADICAL AXEKANGXI RADICAL SQUAREKANGXI RADICAL NOTKANGXI RADIC" + + "AL SUNKANGXI RADICAL SAYKANGXI RADICAL MOONKANGXI RADICAL TREEKANGXI RAD" + + "ICAL LACKKANGXI RADICAL STOPKANGXI RADICAL DEATHKANGXI RADICAL WEAPONKAN" + + "GXI RADICAL DO NOTKANGXI RADICAL COMPAREKANGXI RADICAL FURKANGXI RADICAL" + + " CLANKANGXI RADICAL STEAMKANGXI RADICAL WATERKANGXI RADICAL FIREKANGXI R" + + "ADICAL CLAWKANGXI RADICAL FATHERKANGXI RADICAL DOUBLE XKANGXI RADICAL HA" + + "LF TREE TRUNKKANGXI RADICAL SLICEKANGXI RADICAL FANGKANGXI RADICAL COWKA" + + "NGXI RADICAL DOGKANGXI RADICAL PROFOUNDKANGXI RADICAL JADEKANGXI RADICAL" + + " MELONKANGXI RADICAL TILEKANGXI RADICAL SWEETKANGXI RADICAL LIFEKANGXI R" + + "ADICAL USEKANGXI RADICAL FIELDKANGXI RADICAL BOLT OF CLOTHKANGXI RADICAL") + ("" + + " SICKNESSKANGXI RADICAL DOTTED TENTKANGXI RADICAL WHITEKANGXI RADICAL SK" + + "INKANGXI RADICAL DISHKANGXI RADICAL EYEKANGXI RADICAL SPEARKANGXI RADICA" + + "L ARROWKANGXI RADICAL STONEKANGXI RADICAL SPIRITKANGXI RADICAL TRACKKANG" + + "XI RADICAL GRAINKANGXI RADICAL CAVEKANGXI RADICAL STANDKANGXI RADICAL BA" + + "MBOOKANGXI RADICAL RICEKANGXI RADICAL SILKKANGXI RADICAL JARKANGXI RADIC" + + "AL NETKANGXI RADICAL SHEEPKANGXI RADICAL FEATHERKANGXI RADICAL OLDKANGXI" + + " RADICAL ANDKANGXI RADICAL PLOWKANGXI RADICAL EARKANGXI RADICAL BRUSHKAN" + + "GXI RADICAL MEATKANGXI RADICAL MINISTERKANGXI RADICAL SELFKANGXI RADICAL" + + " ARRIVEKANGXI RADICAL MORTARKANGXI RADICAL TONGUEKANGXI RADICAL OPPOSEKA" + + "NGXI RADICAL BOATKANGXI RADICAL STOPPINGKANGXI RADICAL COLORKANGXI RADIC" + + "AL GRASSKANGXI RADICAL TIGERKANGXI RADICAL INSECTKANGXI RADICAL BLOODKAN" + + "GXI RADICAL WALK ENCLOSUREKANGXI RADICAL CLOTHESKANGXI RADICAL WESTKANGX" + + "I RADICAL SEEKANGXI RADICAL HORNKANGXI RADICAL SPEECHKANGXI RADICAL VALL" + + "EYKANGXI RADICAL BEANKANGXI RADICAL PIGKANGXI RADICAL BADGERKANGXI RADIC" + + "AL SHELLKANGXI RADICAL REDKANGXI RADICAL RUNKANGXI RADICAL FOOTKANGXI RA" + + "DICAL BODYKANGXI RADICAL CARTKANGXI RADICAL BITTERKANGXI RADICAL MORNING" + + "KANGXI RADICAL WALKKANGXI RADICAL CITYKANGXI RADICAL WINEKANGXI RADICAL " + + "DISTINGUISHKANGXI RADICAL VILLAGEKANGXI RADICAL GOLDKANGXI RADICAL LONGK" + + "ANGXI RADICAL GATEKANGXI RADICAL MOUNDKANGXI RADICAL SLAVEKANGXI RADICAL" + + " SHORT TAILED BIRDKANGXI RADICAL RAINKANGXI RADICAL BLUEKANGXI RADICAL W" + + "RONGKANGXI RADICAL FACEKANGXI RADICAL LEATHERKANGXI RADICAL TANNED LEATH" + + "ERKANGXI RADICAL LEEKKANGXI RADICAL SOUNDKANGXI RADICAL LEAFKANGXI RADIC" + + "AL WINDKANGXI RADICAL FLYKANGXI RADICAL EATKANGXI RADICAL HEADKANGXI RAD" + + "ICAL FRAGRANTKANGXI RADICAL HORSEKANGXI RADICAL BONEKANGXI RADICAL TALLK" + + "ANGXI RADICAL HAIRKANGXI RADICAL FIGHTKANGXI RADICAL SACRIFICIAL WINEKAN" + + "GXI RADICAL CAULDRONKANGXI RADICAL GHOSTKANGXI RADICAL FISHKANGXI RADICA" + + "L BIRDKANGXI RADICAL SALTKANGXI RADICAL DEERKANGXI RADICAL WHEATKANGXI R" + + "ADICAL HEMPKANGXI RADICAL YELLOWKANGXI RADICAL MILLETKANGXI RADICAL BLAC" + + "KKANGXI RADICAL EMBROIDERYKANGXI RADICAL FROGKANGXI RADICAL TRIPODKANGXI" + + " RADICAL DRUMKANGXI RADICAL RATKANGXI RADICAL NOSEKANGXI RADICAL EVENKAN" + + "GXI RADICAL TOOTHKANGXI RADICAL DRAGONKANGXI RADICAL TURTLEKANGXI RADICA" + + "L FLUTEIDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHTIDEOGRAPHIC DESCRI" + + "PTION CHARACTER ABOVE TO BELOWIDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO " + + "MIDDLE AND RIGHTIDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BE" + + "LOWIDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUNDIDEOGRAPHIC DESCRIPTIO" + + "N CHARACTER SURROUND FROM ABOVEIDEOGRAPHIC DESCRIPTION CHARACTER SURROUN" + + "D FROM BELOWIDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFTIDEOGRAP" + + "HIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFTIDEOGRAPHIC DESCRIPTIO" + + "N CHARACTER SURROUND FROM UPPER RIGHTIDEOGRAPHIC DESCRIPTION CHARACTER S" + + "URROUND FROM LOWER LEFTIDEOGRAPHIC DESCRIPTION CHARACTER OVERLAIDIDEOGRA" + + "PHIC SPACEIDEOGRAPHIC COMMAIDEOGRAPHIC FULL STOPDITTO MARKJAPANESE INDUS" + + "TRIAL STANDARD SYMBOLIDEOGRAPHIC ITERATION MARKIDEOGRAPHIC CLOSING MARKI" + + "DEOGRAPHIC NUMBER ZEROLEFT ANGLE BRACKETRIGHT ANGLE BRACKETLEFT DOUBLE A" + + "NGLE BRACKETRIGHT DOUBLE ANGLE BRACKETLEFT CORNER BRACKETRIGHT CORNER BR" + + "ACKETLEFT WHITE CORNER BRACKETRIGHT WHITE CORNER BRACKETLEFT BLACK LENTI" + + "CULAR BRACKETRIGHT BLACK LENTICULAR BRACKETPOSTAL MARKGETA MARKLEFT TORT" + + "OISE SHELL BRACKETRIGHT TORTOISE SHELL BRACKETLEFT WHITE LENTICULAR BRAC" + + "KETRIGHT WHITE LENTICULAR BRACKETLEFT WHITE TORTOISE SHELL BRACKETRIGHT " + + "WHITE TORTOISE SHELL BRACKETLEFT WHITE SQUARE BRACKETRIGHT WHITE SQUARE " + + "BRACKETWAVE DASHREVERSED DOUBLE PRIME QUOTATION MARKDOUBLE PRIME QUOTATI" + + "ON MARKLOW DOUBLE PRIME QUOTATION MARKPOSTAL MARK FACEHANGZHOU NUMERAL O" + + "NEHANGZHOU NUMERAL TWOHANGZHOU NUMERAL THREEHANGZHOU NUMERAL FOURHANGZHO" + + "U NUMERAL FIVEHANGZHOU NUMERAL SIXHANGZHOU NUMERAL SEVENHANGZHOU NUMERAL" + + " EIGHTHANGZHOU NUMERAL NINEIDEOGRAPHIC LEVEL TONE MARKIDEOGRAPHIC RISING" + + " TONE MARKIDEOGRAPHIC DEPARTING TONE MARKIDEOGRAPHIC ENTERING TONE MARKH" + + "ANGUL SINGLE DOT TONE MARKHANGUL DOUBLE DOT TONE MARKWAVY DASHVERTICAL K" + + "ANA REPEAT MARKVERTICAL KANA REPEAT WITH VOICED SOUND MARKVERTICAL KANA " + + "REPEAT MARK UPPER HALFVERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER " + + "HALFVERTICAL KANA REPEAT MARK LOWER HALFCIRCLED POSTAL MARKIDEOGRAPHIC T" + + "ELEGRAPH LINE FEED SEPARATOR SYMBOLHANGZHOU NUMERAL TENHANGZHOU NUMERAL " + + "TWENTYHANGZHOU NUMERAL THIRTYVERTICAL IDEOGRAPHIC ITERATION MARKMASU MAR" + + "KPART ALTERNATION MARKIDEOGRAPHIC VARIATION INDICATORIDEOGRAPHIC HALF FI" + + "LL SPACEHIRAGANA LETTER SMALL AHIRAGANA LETTER AHIRAGANA LETTER SMALL IH" + + "IRAGANA LETTER IHIRAGANA LETTER SMALL UHIRAGANA LETTER UHIRAGANA LETTER ") + ("" + + "SMALL EHIRAGANA LETTER EHIRAGANA LETTER SMALL OHIRAGANA LETTER OHIRAGANA" + + " LETTER KAHIRAGANA LETTER GAHIRAGANA LETTER KIHIRAGANA LETTER GIHIRAGANA" + + " LETTER KUHIRAGANA LETTER GUHIRAGANA LETTER KEHIRAGANA LETTER GEHIRAGANA" + + " LETTER KOHIRAGANA LETTER GOHIRAGANA LETTER SAHIRAGANA LETTER ZAHIRAGANA" + + " LETTER SIHIRAGANA LETTER ZIHIRAGANA LETTER SUHIRAGANA LETTER ZUHIRAGANA" + + " LETTER SEHIRAGANA LETTER ZEHIRAGANA LETTER SOHIRAGANA LETTER ZOHIRAGANA" + + " LETTER TAHIRAGANA LETTER DAHIRAGANA LETTER TIHIRAGANA LETTER DIHIRAGANA" + + " LETTER SMALL TUHIRAGANA LETTER TUHIRAGANA LETTER DUHIRAGANA LETTER TEHI" + + "RAGANA LETTER DEHIRAGANA LETTER TOHIRAGANA LETTER DOHIRAGANA LETTER NAHI" + + "RAGANA LETTER NIHIRAGANA LETTER NUHIRAGANA LETTER NEHIRAGANA LETTER NOHI" + + "RAGANA LETTER HAHIRAGANA LETTER BAHIRAGANA LETTER PAHIRAGANA LETTER HIHI" + + "RAGANA LETTER BIHIRAGANA LETTER PIHIRAGANA LETTER HUHIRAGANA LETTER BUHI" + + "RAGANA LETTER PUHIRAGANA LETTER HEHIRAGANA LETTER BEHIRAGANA LETTER PEHI" + + "RAGANA LETTER HOHIRAGANA LETTER BOHIRAGANA LETTER POHIRAGANA LETTER MAHI" + + "RAGANA LETTER MIHIRAGANA LETTER MUHIRAGANA LETTER MEHIRAGANA LETTER MOHI" + + "RAGANA LETTER SMALL YAHIRAGANA LETTER YAHIRAGANA LETTER SMALL YUHIRAGANA" + + " LETTER YUHIRAGANA LETTER SMALL YOHIRAGANA LETTER YOHIRAGANA LETTER RAHI" + + "RAGANA LETTER RIHIRAGANA LETTER RUHIRAGANA LETTER REHIRAGANA LETTER ROHI" + + "RAGANA LETTER SMALL WAHIRAGANA LETTER WAHIRAGANA LETTER WIHIRAGANA LETTE" + + "R WEHIRAGANA LETTER WOHIRAGANA LETTER NHIRAGANA LETTER VUHIRAGANA LETTER" + + " SMALL KAHIRAGANA LETTER SMALL KECOMBINING KATAKANA-HIRAGANA VOICED SOUN" + + "D MARKCOMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARKKATAKANA-HIRAGAN" + + "A VOICED SOUND MARKKATAKANA-HIRAGANA SEMI-VOICED SOUND MARKHIRAGANA ITER" + + "ATION MARKHIRAGANA VOICED ITERATION MARKHIRAGANA DIGRAPH YORIKATAKANA-HI" + + "RAGANA DOUBLE HYPHENKATAKANA LETTER SMALL AKATAKANA LETTER AKATAKANA LET" + + "TER SMALL IKATAKANA LETTER IKATAKANA LETTER SMALL UKATAKANA LETTER UKATA" + + "KANA LETTER SMALL EKATAKANA LETTER EKATAKANA LETTER SMALL OKATAKANA LETT" + + "ER OKATAKANA LETTER KAKATAKANA LETTER GAKATAKANA LETTER KIKATAKANA LETTE" + + "R GIKATAKANA LETTER KUKATAKANA LETTER GUKATAKANA LETTER KEKATAKANA LETTE" + + "R GEKATAKANA LETTER KOKATAKANA LETTER GOKATAKANA LETTER SAKATAKANA LETTE" + + "R ZAKATAKANA LETTER SIKATAKANA LETTER ZIKATAKANA LETTER SUKATAKANA LETTE" + + "R ZUKATAKANA LETTER SEKATAKANA LETTER ZEKATAKANA LETTER SOKATAKANA LETTE" + + "R ZOKATAKANA LETTER TAKATAKANA LETTER DAKATAKANA LETTER TIKATAKANA LETTE" + + "R DIKATAKANA LETTER SMALL TUKATAKANA LETTER TUKATAKANA LETTER DUKATAKANA" + + " LETTER TEKATAKANA LETTER DEKATAKANA LETTER TOKATAKANA LETTER DOKATAKANA" + + " LETTER NAKATAKANA LETTER NIKATAKANA LETTER NUKATAKANA LETTER NEKATAKANA" + + " LETTER NOKATAKANA LETTER HAKATAKANA LETTER BAKATAKANA LETTER PAKATAKANA" + + " LETTER HIKATAKANA LETTER BIKATAKANA LETTER PIKATAKANA LETTER HUKATAKANA" + + " LETTER BUKATAKANA LETTER PUKATAKANA LETTER HEKATAKANA LETTER BEKATAKANA" + + " LETTER PEKATAKANA LETTER HOKATAKANA LETTER BOKATAKANA LETTER POKATAKANA" + + " LETTER MAKATAKANA LETTER MIKATAKANA LETTER MUKATAKANA LETTER MEKATAKANA" + + " LETTER MOKATAKANA LETTER SMALL YAKATAKANA LETTER YAKATAKANA LETTER SMAL" + + "L YUKATAKANA LETTER YUKATAKANA LETTER SMALL YOKATAKANA LETTER YOKATAKANA" + + " LETTER RAKATAKANA LETTER RIKATAKANA LETTER RUKATAKANA LETTER REKATAKANA" + + " LETTER ROKATAKANA LETTER SMALL WAKATAKANA LETTER WAKATAKANA LETTER WIKA" + + "TAKANA LETTER WEKATAKANA LETTER WOKATAKANA LETTER NKATAKANA LETTER VUKAT" + + "AKANA LETTER SMALL KAKATAKANA LETTER SMALL KEKATAKANA LETTER VAKATAKANA " + + "LETTER VIKATAKANA LETTER VEKATAKANA LETTER VOKATAKANA MIDDLE DOTKATAKANA" + + "-HIRAGANA PROLONGED SOUND MARKKATAKANA ITERATION MARKKATAKANA VOICED ITE" + + "RATION MARKKATAKANA DIGRAPH KOTOBOPOMOFO LETTER BBOPOMOFO LETTER PBOPOMO" + + "FO LETTER MBOPOMOFO LETTER FBOPOMOFO LETTER DBOPOMOFO LETTER TBOPOMOFO L" + + "ETTER NBOPOMOFO LETTER LBOPOMOFO LETTER GBOPOMOFO LETTER KBOPOMOFO LETTE" + + "R HBOPOMOFO LETTER JBOPOMOFO LETTER QBOPOMOFO LETTER XBOPOMOFO LETTER ZH" + + "BOPOMOFO LETTER CHBOPOMOFO LETTER SHBOPOMOFO LETTER RBOPOMOFO LETTER ZBO" + + "POMOFO LETTER CBOPOMOFO LETTER SBOPOMOFO LETTER ABOPOMOFO LETTER OBOPOMO" + + "FO LETTER EBOPOMOFO LETTER EHBOPOMOFO LETTER AIBOPOMOFO LETTER EIBOPOMOF" + + "O LETTER AUBOPOMOFO LETTER OUBOPOMOFO LETTER ANBOPOMOFO LETTER ENBOPOMOF" + + "O LETTER ANGBOPOMOFO LETTER ENGBOPOMOFO LETTER ERBOPOMOFO LETTER IBOPOMO" + + "FO LETTER UBOPOMOFO LETTER IUBOPOMOFO LETTER VBOPOMOFO LETTER NGBOPOMOFO" + + " LETTER GNBOPOMOFO LETTER IHHANGUL LETTER KIYEOKHANGUL LETTER SSANGKIYEO" + + "KHANGUL LETTER KIYEOK-SIOSHANGUL LETTER NIEUNHANGUL LETTER NIEUN-CIEUCHA" + + "NGUL LETTER NIEUN-HIEUHHANGUL LETTER TIKEUTHANGUL LETTER SSANGTIKEUTHANG" + + "UL LETTER RIEULHANGUL LETTER RIEUL-KIYEOKHANGUL LETTER RIEUL-MIEUMHANGUL" + + " LETTER RIEUL-PIEUPHANGUL LETTER RIEUL-SIOSHANGUL LETTER RIEUL-THIEUTHHA") + ("" + + "NGUL LETTER RIEUL-PHIEUPHHANGUL LETTER RIEUL-HIEUHHANGUL LETTER MIEUMHAN" + + "GUL LETTER PIEUPHANGUL LETTER SSANGPIEUPHANGUL LETTER PIEUP-SIOSHANGUL L" + + "ETTER SIOSHANGUL LETTER SSANGSIOSHANGUL LETTER IEUNGHANGUL LETTER CIEUCH" + + "ANGUL LETTER SSANGCIEUCHANGUL LETTER CHIEUCHHANGUL LETTER KHIEUKHHANGUL " + + "LETTER THIEUTHHANGUL LETTER PHIEUPHHANGUL LETTER HIEUHHANGUL LETTER AHAN" + + "GUL LETTER AEHANGUL LETTER YAHANGUL LETTER YAEHANGUL LETTER EOHANGUL LET" + + "TER EHANGUL LETTER YEOHANGUL LETTER YEHANGUL LETTER OHANGUL LETTER WAHAN" + + "GUL LETTER WAEHANGUL LETTER OEHANGUL LETTER YOHANGUL LETTER UHANGUL LETT" + + "ER WEOHANGUL LETTER WEHANGUL LETTER WIHANGUL LETTER YUHANGUL LETTER EUHA" + + "NGUL LETTER YIHANGUL LETTER IHANGUL FILLERHANGUL LETTER SSANGNIEUNHANGUL" + + " LETTER NIEUN-TIKEUTHANGUL LETTER NIEUN-SIOSHANGUL LETTER NIEUN-PANSIOSH" + + "ANGUL LETTER RIEUL-KIYEOK-SIOSHANGUL LETTER RIEUL-TIKEUTHANGUL LETTER RI" + + "EUL-PIEUP-SIOSHANGUL LETTER RIEUL-PANSIOSHANGUL LETTER RIEUL-YEORINHIEUH" + + "HANGUL LETTER MIEUM-PIEUPHANGUL LETTER MIEUM-SIOSHANGUL LETTER MIEUM-PAN" + + "SIOSHANGUL LETTER KAPYEOUNMIEUMHANGUL LETTER PIEUP-KIYEOKHANGUL LETTER P" + + "IEUP-TIKEUTHANGUL LETTER PIEUP-SIOS-KIYEOKHANGUL LETTER PIEUP-SIOS-TIKEU" + + "THANGUL LETTER PIEUP-CIEUCHANGUL LETTER PIEUP-THIEUTHHANGUL LETTER KAPYE" + + "OUNPIEUPHANGUL LETTER KAPYEOUNSSANGPIEUPHANGUL LETTER SIOS-KIYEOKHANGUL " + + "LETTER SIOS-NIEUNHANGUL LETTER SIOS-TIKEUTHANGUL LETTER SIOS-PIEUPHANGUL" + + " LETTER SIOS-CIEUCHANGUL LETTER PANSIOSHANGUL LETTER SSANGIEUNGHANGUL LE" + + "TTER YESIEUNGHANGUL LETTER YESIEUNG-SIOSHANGUL LETTER YESIEUNG-PANSIOSHA" + + "NGUL LETTER KAPYEOUNPHIEUPHHANGUL LETTER SSANGHIEUHHANGUL LETTER YEORINH" + + "IEUHHANGUL LETTER YO-YAHANGUL LETTER YO-YAEHANGUL LETTER YO-IHANGUL LETT" + + "ER YU-YEOHANGUL LETTER YU-YEHANGUL LETTER YU-IHANGUL LETTER ARAEAHANGUL " + + "LETTER ARAEAEIDEOGRAPHIC ANNOTATION LINKING MARKIDEOGRAPHIC ANNOTATION R" + + "EVERSE MARKIDEOGRAPHIC ANNOTATION ONE MARKIDEOGRAPHIC ANNOTATION TWO MAR" + + "KIDEOGRAPHIC ANNOTATION THREE MARKIDEOGRAPHIC ANNOTATION FOUR MARKIDEOGR" + + "APHIC ANNOTATION TOP MARKIDEOGRAPHIC ANNOTATION MIDDLE MARKIDEOGRAPHIC A" + + "NNOTATION BOTTOM MARKIDEOGRAPHIC ANNOTATION FIRST MARKIDEOGRAPHIC ANNOTA" + + "TION SECOND MARKIDEOGRAPHIC ANNOTATION THIRD MARKIDEOGRAPHIC ANNOTATION " + + "FOURTH MARKIDEOGRAPHIC ANNOTATION HEAVEN MARKIDEOGRAPHIC ANNOTATION EART" + + "H MARKIDEOGRAPHIC ANNOTATION MAN MARKBOPOMOFO LETTER BUBOPOMOFO LETTER Z" + + "IBOPOMOFO LETTER JIBOPOMOFO LETTER GUBOPOMOFO LETTER EEBOPOMOFO LETTER E" + + "NNBOPOMOFO LETTER OOBOPOMOFO LETTER ONNBOPOMOFO LETTER IRBOPOMOFO LETTER" + + " ANNBOPOMOFO LETTER INNBOPOMOFO LETTER UNNBOPOMOFO LETTER IMBOPOMOFO LET" + + "TER NGGBOPOMOFO LETTER AINNBOPOMOFO LETTER AUNNBOPOMOFO LETTER AMBOPOMOF" + + "O LETTER OMBOPOMOFO LETTER ONGBOPOMOFO LETTER INNNBOPOMOFO FINAL LETTER " + + "PBOPOMOFO FINAL LETTER TBOPOMOFO FINAL LETTER KBOPOMOFO FINAL LETTER HBO" + + "POMOFO LETTER GHBOPOMOFO LETTER LHBOPOMOFO LETTER ZYCJK STROKE TCJK STRO" + + "KE WGCJK STROKE XGCJK STROKE BXGCJK STROKE SWCJK STROKE HZZCJK STROKE HZ" + + "GCJK STROKE HPCJK STROKE HZWGCJK STROKE SZWGCJK STROKE HZTCJK STROKE HZZ" + + "PCJK STROKE HPWGCJK STROKE HZWCJK STROKE HZZZCJK STROKE NCJK STROKE HCJK" + + " STROKE SCJK STROKE PCJK STROKE SPCJK STROKE DCJK STROKE HZCJK STROKE HG" + + "CJK STROKE SZCJK STROKE SWZCJK STROKE STCJK STROKE SGCJK STROKE PDCJK ST" + + "ROKE PZCJK STROKE TNCJK STROKE SZZCJK STROKE SWGCJK STROKE HXWGCJK STROK" + + "E HZZZGCJK STROKE PGCJK STROKE QKATAKANA LETTER SMALL KUKATAKANA LETTER " + + "SMALL SIKATAKANA LETTER SMALL SUKATAKANA LETTER SMALL TOKATAKANA LETTER " + + "SMALL NUKATAKANA LETTER SMALL HAKATAKANA LETTER SMALL HIKATAKANA LETTER " + + "SMALL HUKATAKANA LETTER SMALL HEKATAKANA LETTER SMALL HOKATAKANA LETTER " + + "SMALL MUKATAKANA LETTER SMALL RAKATAKANA LETTER SMALL RIKATAKANA LETTER " + + "SMALL RUKATAKANA LETTER SMALL REKATAKANA LETTER SMALL ROPARENTHESIZED HA" + + "NGUL KIYEOKPARENTHESIZED HANGUL NIEUNPARENTHESIZED HANGUL TIKEUTPARENTHE" + + "SIZED HANGUL RIEULPARENTHESIZED HANGUL MIEUMPARENTHESIZED HANGUL PIEUPPA" + + "RENTHESIZED HANGUL SIOSPARENTHESIZED HANGUL IEUNGPARENTHESIZED HANGUL CI" + + "EUCPARENTHESIZED HANGUL CHIEUCHPARENTHESIZED HANGUL KHIEUKHPARENTHESIZED" + + " HANGUL THIEUTHPARENTHESIZED HANGUL PHIEUPHPARENTHESIZED HANGUL HIEUHPAR" + + "ENTHESIZED HANGUL KIYEOK APARENTHESIZED HANGUL NIEUN APARENTHESIZED HANG" + + "UL TIKEUT APARENTHESIZED HANGUL RIEUL APARENTHESIZED HANGUL MIEUM APAREN" + + "THESIZED HANGUL PIEUP APARENTHESIZED HANGUL SIOS APARENTHESIZED HANGUL I" + + "EUNG APARENTHESIZED HANGUL CIEUC APARENTHESIZED HANGUL CHIEUCH APARENTHE" + + "SIZED HANGUL KHIEUKH APARENTHESIZED HANGUL THIEUTH APARENTHESIZED HANGUL" + + " PHIEUPH APARENTHESIZED HANGUL HIEUH APARENTHESIZED HANGUL CIEUC UPARENT" + + "HESIZED KOREAN CHARACTER OJEONPARENTHESIZED KOREAN CHARACTER O HUPARENTH" + + "ESIZED IDEOGRAPH ONEPARENTHESIZED IDEOGRAPH TWOPARENTHESIZED IDEOGRAPH T") + ("" + + "HREEPARENTHESIZED IDEOGRAPH FOURPARENTHESIZED IDEOGRAPH FIVEPARENTHESIZE" + + "D IDEOGRAPH SIXPARENTHESIZED IDEOGRAPH SEVENPARENTHESIZED IDEOGRAPH EIGH" + + "TPARENTHESIZED IDEOGRAPH NINEPARENTHESIZED IDEOGRAPH TENPARENTHESIZED ID" + + "EOGRAPH MOONPARENTHESIZED IDEOGRAPH FIREPARENTHESIZED IDEOGRAPH WATERPAR" + + "ENTHESIZED IDEOGRAPH WOODPARENTHESIZED IDEOGRAPH METALPARENTHESIZED IDEO" + + "GRAPH EARTHPARENTHESIZED IDEOGRAPH SUNPARENTHESIZED IDEOGRAPH STOCKPAREN" + + "THESIZED IDEOGRAPH HAVEPARENTHESIZED IDEOGRAPH SOCIETYPARENTHESIZED IDEO" + + "GRAPH NAMEPARENTHESIZED IDEOGRAPH SPECIALPARENTHESIZED IDEOGRAPH FINANCI" + + "ALPARENTHESIZED IDEOGRAPH CONGRATULATIONPARENTHESIZED IDEOGRAPH LABORPAR" + + "ENTHESIZED IDEOGRAPH REPRESENTPARENTHESIZED IDEOGRAPH CALLPARENTHESIZED " + + "IDEOGRAPH STUDYPARENTHESIZED IDEOGRAPH SUPERVISEPARENTHESIZED IDEOGRAPH " + + "ENTERPRISEPARENTHESIZED IDEOGRAPH RESOURCEPARENTHESIZED IDEOGRAPH ALLIAN" + + "CEPARENTHESIZED IDEOGRAPH FESTIVALPARENTHESIZED IDEOGRAPH RESTPARENTHESI" + + "ZED IDEOGRAPH SELFPARENTHESIZED IDEOGRAPH REACHCIRCLED IDEOGRAPH QUESTIO" + + "NCIRCLED IDEOGRAPH KINDERGARTENCIRCLED IDEOGRAPH SCHOOLCIRCLED IDEOGRAPH" + + " KOTOCIRCLED NUMBER TEN ON BLACK SQUARECIRCLED NUMBER TWENTY ON BLACK SQ" + + "UARECIRCLED NUMBER THIRTY ON BLACK SQUARECIRCLED NUMBER FORTY ON BLACK S" + + "QUARECIRCLED NUMBER FIFTY ON BLACK SQUARECIRCLED NUMBER SIXTY ON BLACK S" + + "QUARECIRCLED NUMBER SEVENTY ON BLACK SQUARECIRCLED NUMBER EIGHTY ON BLAC" + + "K SQUAREPARTNERSHIP SIGNCIRCLED NUMBER TWENTY ONECIRCLED NUMBER TWENTY T" + + "WOCIRCLED NUMBER TWENTY THREECIRCLED NUMBER TWENTY FOURCIRCLED NUMBER TW" + + "ENTY FIVECIRCLED NUMBER TWENTY SIXCIRCLED NUMBER TWENTY SEVENCIRCLED NUM" + + "BER TWENTY EIGHTCIRCLED NUMBER TWENTY NINECIRCLED NUMBER THIRTYCIRCLED N" + + "UMBER THIRTY ONECIRCLED NUMBER THIRTY TWOCIRCLED NUMBER THIRTY THREECIRC" + + "LED NUMBER THIRTY FOURCIRCLED NUMBER THIRTY FIVECIRCLED HANGUL KIYEOKCIR" + + "CLED HANGUL NIEUNCIRCLED HANGUL TIKEUTCIRCLED HANGUL RIEULCIRCLED HANGUL" + + " MIEUMCIRCLED HANGUL PIEUPCIRCLED HANGUL SIOSCIRCLED HANGUL IEUNGCIRCLED" + + " HANGUL CIEUCCIRCLED HANGUL CHIEUCHCIRCLED HANGUL KHIEUKHCIRCLED HANGUL " + + "THIEUTHCIRCLED HANGUL PHIEUPHCIRCLED HANGUL HIEUHCIRCLED HANGUL KIYEOK A" + + "CIRCLED HANGUL NIEUN ACIRCLED HANGUL TIKEUT ACIRCLED HANGUL RIEUL ACIRCL" + + "ED HANGUL MIEUM ACIRCLED HANGUL PIEUP ACIRCLED HANGUL SIOS ACIRCLED HANG" + + "UL IEUNG ACIRCLED HANGUL CIEUC ACIRCLED HANGUL CHIEUCH ACIRCLED HANGUL K" + + "HIEUKH ACIRCLED HANGUL THIEUTH ACIRCLED HANGUL PHIEUPH ACIRCLED HANGUL H" + + "IEUH ACIRCLED KOREAN CHARACTER CHAMKOCIRCLED KOREAN CHARACTER JUEUICIRCL" + + "ED HANGUL IEUNG UKOREAN STANDARD SYMBOLCIRCLED IDEOGRAPH ONECIRCLED IDEO" + + "GRAPH TWOCIRCLED IDEOGRAPH THREECIRCLED IDEOGRAPH FOURCIRCLED IDEOGRAPH " + + "FIVECIRCLED IDEOGRAPH SIXCIRCLED IDEOGRAPH SEVENCIRCLED IDEOGRAPH EIGHTC" + + "IRCLED IDEOGRAPH NINECIRCLED IDEOGRAPH TENCIRCLED IDEOGRAPH MOONCIRCLED " + + "IDEOGRAPH FIRECIRCLED IDEOGRAPH WATERCIRCLED IDEOGRAPH WOODCIRCLED IDEOG" + + "RAPH METALCIRCLED IDEOGRAPH EARTHCIRCLED IDEOGRAPH SUNCIRCLED IDEOGRAPH " + + "STOCKCIRCLED IDEOGRAPH HAVECIRCLED IDEOGRAPH SOCIETYCIRCLED IDEOGRAPH NA" + + "MECIRCLED IDEOGRAPH SPECIALCIRCLED IDEOGRAPH FINANCIALCIRCLED IDEOGRAPH " + + "CONGRATULATIONCIRCLED IDEOGRAPH LABORCIRCLED IDEOGRAPH SECRETCIRCLED IDE" + + "OGRAPH MALECIRCLED IDEOGRAPH FEMALECIRCLED IDEOGRAPH SUITABLECIRCLED IDE" + + "OGRAPH EXCELLENTCIRCLED IDEOGRAPH PRINTCIRCLED IDEOGRAPH ATTENTIONCIRCLE" + + "D IDEOGRAPH ITEMCIRCLED IDEOGRAPH RESTCIRCLED IDEOGRAPH COPYCIRCLED IDEO" + + "GRAPH CORRECTCIRCLED IDEOGRAPH HIGHCIRCLED IDEOGRAPH CENTRECIRCLED IDEOG" + + "RAPH LOWCIRCLED IDEOGRAPH LEFTCIRCLED IDEOGRAPH RIGHTCIRCLED IDEOGRAPH M" + + "EDICINECIRCLED IDEOGRAPH RELIGIONCIRCLED IDEOGRAPH STUDYCIRCLED IDEOGRAP" + + "H SUPERVISECIRCLED IDEOGRAPH ENTERPRISECIRCLED IDEOGRAPH RESOURCECIRCLED" + + " IDEOGRAPH ALLIANCECIRCLED IDEOGRAPH NIGHTCIRCLED NUMBER THIRTY SIXCIRCL" + + "ED NUMBER THIRTY SEVENCIRCLED NUMBER THIRTY EIGHTCIRCLED NUMBER THIRTY N" + + "INECIRCLED NUMBER FORTYCIRCLED NUMBER FORTY ONECIRCLED NUMBER FORTY TWOC" + + "IRCLED NUMBER FORTY THREECIRCLED NUMBER FORTY FOURCIRCLED NUMBER FORTY F" + + "IVECIRCLED NUMBER FORTY SIXCIRCLED NUMBER FORTY SEVENCIRCLED NUMBER FORT" + + "Y EIGHTCIRCLED NUMBER FORTY NINECIRCLED NUMBER FIFTYIDEOGRAPHIC TELEGRAP" + + "H SYMBOL FOR JANUARYIDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARYIDEOGRAPHIC" + + " TELEGRAPH SYMBOL FOR MARCHIDEOGRAPHIC TELEGRAPH SYMBOL FOR APRILIDEOGRA" + + "PHIC TELEGRAPH SYMBOL FOR MAYIDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNEIDEOGR" + + "APHIC TELEGRAPH SYMBOL FOR JULYIDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUSTID" + + "EOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBERIDEOGRAPHIC TELEGRAPH SYMBOL FOR" + + " OCTOBERIDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBERIDEOGRAPHIC TELEGRAPH S" + + "YMBOL FOR DECEMBERSQUARE HGSQUARE ERGSQUARE EVLIMITED LIABILITY SIGNCIRC" + + "LED KATAKANA ACIRCLED KATAKANA ICIRCLED KATAKANA UCIRCLED KATAKANA ECIRC") + ("" + + "LED KATAKANA OCIRCLED KATAKANA KACIRCLED KATAKANA KICIRCLED KATAKANA KUC" + + "IRCLED KATAKANA KECIRCLED KATAKANA KOCIRCLED KATAKANA SACIRCLED KATAKANA" + + " SICIRCLED KATAKANA SUCIRCLED KATAKANA SECIRCLED KATAKANA SOCIRCLED KATA" + + "KANA TACIRCLED KATAKANA TICIRCLED KATAKANA TUCIRCLED KATAKANA TECIRCLED " + + "KATAKANA TOCIRCLED KATAKANA NACIRCLED KATAKANA NICIRCLED KATAKANA NUCIRC" + + "LED KATAKANA NECIRCLED KATAKANA NOCIRCLED KATAKANA HACIRCLED KATAKANA HI" + + "CIRCLED KATAKANA HUCIRCLED KATAKANA HECIRCLED KATAKANA HOCIRCLED KATAKAN" + + "A MACIRCLED KATAKANA MICIRCLED KATAKANA MUCIRCLED KATAKANA MECIRCLED KAT" + + "AKANA MOCIRCLED KATAKANA YACIRCLED KATAKANA YUCIRCLED KATAKANA YOCIRCLED" + + " KATAKANA RACIRCLED KATAKANA RICIRCLED KATAKANA RUCIRCLED KATAKANA RECIR" + + "CLED KATAKANA ROCIRCLED KATAKANA WACIRCLED KATAKANA WICIRCLED KATAKANA W" + + "ECIRCLED KATAKANA WOSQUARE APAATOSQUARE ARUHUASQUARE ANPEASQUARE AARUSQU" + + "ARE ININGUSQUARE INTISQUARE UONSQUARE ESUKUUDOSQUARE EEKAASQUARE ONSUSQU" + + "ARE OOMUSQUARE KAIRISQUARE KARATTOSQUARE KARORIISQUARE GARONSQUARE GANMA" + + "SQUARE GIGASQUARE GINIISQUARE KYURIISQUARE GIRUDAASQUARE KIROSQUARE KIRO" + + "GURAMUSQUARE KIROMEETORUSQUARE KIROWATTOSQUARE GURAMUSQUARE GURAMUTONSQU" + + "ARE KURUZEIROSQUARE KUROONESQUARE KEESUSQUARE KORUNASQUARE KOOPOSQUARE S" + + "AIKURUSQUARE SANTIIMUSQUARE SIRINGUSQUARE SENTISQUARE SENTOSQUARE DAASUS" + + "QUARE DESISQUARE DORUSQUARE TONSQUARE NANOSQUARE NOTTOSQUARE HAITUSQUARE" + + " PAASENTOSQUARE PAATUSQUARE BAARERUSQUARE PIASUTORUSQUARE PIKURUSQUARE P" + + "IKOSQUARE BIRUSQUARE HUARADDOSQUARE HUIITOSQUARE BUSSYERUSQUARE HURANSQU" + + "ARE HEKUTAARUSQUARE PESOSQUARE PENIHISQUARE HERUTUSQUARE PENSUSQUARE PEE" + + "ZISQUARE BEETASQUARE POINTOSQUARE BORUTOSQUARE HONSQUARE PONDOSQUARE HOO" + + "RUSQUARE HOONSQUARE MAIKUROSQUARE MAIRUSQUARE MAHHASQUARE MARUKUSQUARE M" + + "ANSYONSQUARE MIKURONSQUARE MIRISQUARE MIRIBAARUSQUARE MEGASQUARE MEGATON" + + "SQUARE MEETORUSQUARE YAADOSQUARE YAARUSQUARE YUANSQUARE RITTORUSQUARE RI" + + "RASQUARE RUPIISQUARE RUUBURUSQUARE REMUSQUARE RENTOGENSQUARE WATTOIDEOGR" + + "APHIC TELEGRAPH SYMBOL FOR HOUR ZEROIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOU" + + "R ONEIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWOIDEOGRAPHIC TELEGRAPH SYMB" + + "OL FOR HOUR THREEIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURIDEOGRAPHIC T" + + "ELEGRAPH SYMBOL FOR HOUR FIVEIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXID" + + "EOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENIDEOGRAPHIC TELEGRAPH SYMBOL FO" + + "R HOUR EIGHTIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINEIDEOGRAPHIC TELEGR" + + "APH SYMBOL FOR HOUR TENIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVENIDEOG" + + "RAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVEIDEOGRAPHIC TELEGRAPH SYMBOL FOR " + + "HOUR THIRTEENIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEENIDEOGRAPHIC T" + + "ELEGRAPH SYMBOL FOR HOUR FIFTEENIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SI" + + "XTEENIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEENIDEOGRAPHIC TELEGRAP" + + "H SYMBOL FOR HOUR EIGHTEENIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN" + + "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTYIDEOGRAPHIC TELEGRAPH SYMBOL" + + " FOR HOUR TWENTY-ONEIDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWOIDEO" + + "GRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREEIDEOGRAPHIC TELEGRAPH SYMB" + + "OL FOR HOUR TWENTY-FOURSQUARE HPASQUARE DASQUARE AUSQUARE BARSQUARE OVSQ" + + "UARE PCSQUARE DMSQUARE DM SQUAREDSQUARE DM CUBEDSQUARE IUSQUARE ERA NAME" + + " HEISEISQUARE ERA NAME SYOUWASQUARE ERA NAME TAISYOUSQUARE ERA NAME MEIZ" + + "ISQUARE CORPORATIONSQUARE PA AMPSSQUARE NASQUARE MU ASQUARE MASQUARE KAS" + + "QUARE KBSQUARE MBSQUARE GBSQUARE CALSQUARE KCALSQUARE PFSQUARE NFSQUARE " + + "MU FSQUARE MU GSQUARE MGSQUARE KGSQUARE HZSQUARE KHZSQUARE MHZSQUARE GHZ" + + "SQUARE THZSQUARE MU LSQUARE MLSQUARE DLSQUARE KLSQUARE FMSQUARE NMSQUARE" + + " MU MSQUARE MMSQUARE CMSQUARE KMSQUARE MM SQUAREDSQUARE CM SQUAREDSQUARE" + + " M SQUAREDSQUARE KM SQUAREDSQUARE MM CUBEDSQUARE CM CUBEDSQUARE M CUBEDS" + + "QUARE KM CUBEDSQUARE M OVER SSQUARE M OVER S SQUAREDSQUARE PASQUARE KPAS" + + "QUARE MPASQUARE GPASQUARE RADSQUARE RAD OVER SSQUARE RAD OVER S SQUAREDS" + + "QUARE PSSQUARE NSSQUARE MU SSQUARE MSSQUARE PVSQUARE NVSQUARE MU VSQUARE" + + " MVSQUARE KVSQUARE MV MEGASQUARE PWSQUARE NWSQUARE MU WSQUARE MWSQUARE K" + + "WSQUARE MW MEGASQUARE K OHMSQUARE M OHMSQUARE AMSQUARE BQSQUARE CCSQUARE" + + " CDSQUARE C OVER KGSQUARE COSQUARE DBSQUARE GYSQUARE HASQUARE HPSQUARE I" + + "NSQUARE KKSQUARE KM CAPITALSQUARE KTSQUARE LMSQUARE LNSQUARE LOGSQUARE L" + + "XSQUARE MB SMALLSQUARE MILSQUARE MOLSQUARE PHSQUARE PMSQUARE PPMSQUARE P" + + "RSQUARE SRSQUARE SVSQUARE WBSQUARE V OVER MSQUARE A OVER MIDEOGRAPHIC TE" + + "LEGRAPH SYMBOL FOR DAY ONEIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWOIDEOGR" + + "APHIC TELEGRAPH SYMBOL FOR DAY THREEIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY" + + " FOURIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVEIDEOGRAPHIC TELEGRAPH SYMB" + + "OL FOR DAY SIXIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENIDEOGRAPHIC TELE") + ("" + + "GRAPH SYMBOL FOR DAY EIGHTIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINEIDEOG" + + "RAPHIC TELEGRAPH SYMBOL FOR DAY TENIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY " + + "ELEVENIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVEIDEOGRAPHIC TELEGRAPH S" + + "YMBOL FOR DAY THIRTEENIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEENIDEOG" + + "RAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEENIDEOGRAPHIC TELEGRAPH SYMBOL FOR " + + "DAY SIXTEENIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEENIDEOGRAPHIC TEL" + + "EGRAPH SYMBOL FOR DAY EIGHTEENIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINET" + + "EENIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTYIDEOGRAPHIC TELEGRAPH SYMB" + + "OL FOR DAY TWENTY-ONEIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWOIDEO" + + "GRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREEIDEOGRAPHIC TELEGRAPH SYMBO" + + "L FOR DAY TWENTY-FOURIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVEIDE" + + "OGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIXIDEOGRAPHIC TELEGRAPH SYMBOL" + + " FOR DAY TWENTY-SEVENIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHTID" + + "EOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINEIDEOGRAPHIC TELEGRAPH SYMB" + + "OL FOR DAY THIRTYIDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONESQUARE G" + + "ALHEXAGRAM FOR THE CREATIVE HEAVENHEXAGRAM FOR THE RECEPTIVE EARTHHEXAGR" + + "AM FOR DIFFICULTY AT THE BEGINNINGHEXAGRAM FOR YOUTHFUL FOLLYHEXAGRAM FO" + + "R WAITINGHEXAGRAM FOR CONFLICTHEXAGRAM FOR THE ARMYHEXAGRAM FOR HOLDING " + + "TOGETHERHEXAGRAM FOR SMALL TAMINGHEXAGRAM FOR TREADINGHEXAGRAM FOR PEACE" + + "HEXAGRAM FOR STANDSTILLHEXAGRAM FOR FELLOWSHIPHEXAGRAM FOR GREAT POSSESS" + + "IONHEXAGRAM FOR MODESTYHEXAGRAM FOR ENTHUSIASMHEXAGRAM FOR FOLLOWINGHEXA" + + "GRAM FOR WORK ON THE DECAYEDHEXAGRAM FOR APPROACHHEXAGRAM FOR CONTEMPLAT" + + "IONHEXAGRAM FOR BITING THROUGHHEXAGRAM FOR GRACEHEXAGRAM FOR SPLITTING A" + + "PARTHEXAGRAM FOR RETURNHEXAGRAM FOR INNOCENCEHEXAGRAM FOR GREAT TAMINGHE" + + "XAGRAM FOR MOUTH CORNERSHEXAGRAM FOR GREAT PREPONDERANCEHEXAGRAM FOR THE" + + " ABYSMAL WATERHEXAGRAM FOR THE CLINGING FIREHEXAGRAM FOR INFLUENCEHEXAGR" + + "AM FOR DURATIONHEXAGRAM FOR RETREATHEXAGRAM FOR GREAT POWERHEXAGRAM FOR " + + "PROGRESSHEXAGRAM FOR DARKENING OF THE LIGHTHEXAGRAM FOR THE FAMILYHEXAGR" + + "AM FOR OPPOSITIONHEXAGRAM FOR OBSTRUCTIONHEXAGRAM FOR DELIVERANCEHEXAGRA" + + "M FOR DECREASEHEXAGRAM FOR INCREASEHEXAGRAM FOR BREAKTHROUGHHEXAGRAM FOR" + + " COMING TO MEETHEXAGRAM FOR GATHERING TOGETHERHEXAGRAM FOR PUSHING UPWAR" + + "DHEXAGRAM FOR OPPRESSIONHEXAGRAM FOR THE WELLHEXAGRAM FOR REVOLUTIONHEXA" + + "GRAM FOR THE CAULDRONHEXAGRAM FOR THE AROUSING THUNDERHEXAGRAM FOR THE K" + + "EEPING STILL MOUNTAINHEXAGRAM FOR DEVELOPMENTHEXAGRAM FOR THE MARRYING M" + + "AIDENHEXAGRAM FOR ABUNDANCEHEXAGRAM FOR THE WANDERERHEXAGRAM FOR THE GEN" + + "TLE WINDHEXAGRAM FOR THE JOYOUS LAKEHEXAGRAM FOR DISPERSIONHEXAGRAM FOR " + + "LIMITATIONHEXAGRAM FOR INNER TRUTHHEXAGRAM FOR SMALL PREPONDERANCEHEXAGR" + + "AM FOR AFTER COMPLETIONHEXAGRAM FOR BEFORE COMPLETIONYI SYLLABLE ITYI SY" + + "LLABLE IXYI SYLLABLE IYI SYLLABLE IPYI SYLLABLE IETYI SYLLABLE IEXYI SYL" + + "LABLE IEYI SYLLABLE IEPYI SYLLABLE ATYI SYLLABLE AXYI SYLLABLE AYI SYLLA" + + "BLE APYI SYLLABLE UOXYI SYLLABLE UOYI SYLLABLE UOPYI SYLLABLE OTYI SYLLA" + + "BLE OXYI SYLLABLE OYI SYLLABLE OPYI SYLLABLE EXYI SYLLABLE EYI SYLLABLE " + + "WUYI SYLLABLE BITYI SYLLABLE BIXYI SYLLABLE BIYI SYLLABLE BIPYI SYLLABLE" + + " BIETYI SYLLABLE BIEXYI SYLLABLE BIEYI SYLLABLE BIEPYI SYLLABLE BATYI SY" + + "LLABLE BAXYI SYLLABLE BAYI SYLLABLE BAPYI SYLLABLE BUOXYI SYLLABLE BUOYI" + + " SYLLABLE BUOPYI SYLLABLE BOTYI SYLLABLE BOXYI SYLLABLE BOYI SYLLABLE BO" + + "PYI SYLLABLE BEXYI SYLLABLE BEYI SYLLABLE BEPYI SYLLABLE BUTYI SYLLABLE " + + "BUXYI SYLLABLE BUYI SYLLABLE BUPYI SYLLABLE BURXYI SYLLABLE BURYI SYLLAB" + + "LE BYTYI SYLLABLE BYXYI SYLLABLE BYYI SYLLABLE BYPYI SYLLABLE BYRXYI SYL" + + "LABLE BYRYI SYLLABLE PITYI SYLLABLE PIXYI SYLLABLE PIYI SYLLABLE PIPYI S" + + "YLLABLE PIEXYI SYLLABLE PIEYI SYLLABLE PIEPYI SYLLABLE PATYI SYLLABLE PA" + + "XYI SYLLABLE PAYI SYLLABLE PAPYI SYLLABLE PUOXYI SYLLABLE PUOYI SYLLABLE" + + " PUOPYI SYLLABLE POTYI SYLLABLE POXYI SYLLABLE POYI SYLLABLE POPYI SYLLA" + + "BLE PUTYI SYLLABLE PUXYI SYLLABLE PUYI SYLLABLE PUPYI SYLLABLE PURXYI SY" + + "LLABLE PURYI SYLLABLE PYTYI SYLLABLE PYXYI SYLLABLE PYYI SYLLABLE PYPYI " + + "SYLLABLE PYRXYI SYLLABLE PYRYI SYLLABLE BBITYI SYLLABLE BBIXYI SYLLABLE " + + "BBIYI SYLLABLE BBIPYI SYLLABLE BBIETYI SYLLABLE BBIEXYI SYLLABLE BBIEYI " + + "SYLLABLE BBIEPYI SYLLABLE BBATYI SYLLABLE BBAXYI SYLLABLE BBAYI SYLLABLE" + + " BBAPYI SYLLABLE BBUOXYI SYLLABLE BBUOYI SYLLABLE BBUOPYI SYLLABLE BBOTY" + + "I SYLLABLE BBOXYI SYLLABLE BBOYI SYLLABLE BBOPYI SYLLABLE BBEXYI SYLLABL" + + "E BBEYI SYLLABLE BBEPYI SYLLABLE BBUTYI SYLLABLE BBUXYI SYLLABLE BBUYI S" + + "YLLABLE BBUPYI SYLLABLE BBURXYI SYLLABLE BBURYI SYLLABLE BBYTYI SYLLABLE" + + " BBYXYI SYLLABLE BBYYI SYLLABLE BBYPYI SYLLABLE NBITYI SYLLABLE NBIXYI S" + + "YLLABLE NBIYI SYLLABLE NBIPYI SYLLABLE NBIEXYI SYLLABLE NBIEYI SYLLABLE ") + ("" + + "NBIEPYI SYLLABLE NBATYI SYLLABLE NBAXYI SYLLABLE NBAYI SYLLABLE NBAPYI S" + + "YLLABLE NBOTYI SYLLABLE NBOXYI SYLLABLE NBOYI SYLLABLE NBOPYI SYLLABLE N" + + "BUTYI SYLLABLE NBUXYI SYLLABLE NBUYI SYLLABLE NBUPYI SYLLABLE NBURXYI SY" + + "LLABLE NBURYI SYLLABLE NBYTYI SYLLABLE NBYXYI SYLLABLE NBYYI SYLLABLE NB" + + "YPYI SYLLABLE NBYRXYI SYLLABLE NBYRYI SYLLABLE HMITYI SYLLABLE HMIXYI SY" + + "LLABLE HMIYI SYLLABLE HMIPYI SYLLABLE HMIEXYI SYLLABLE HMIEYI SYLLABLE H" + + "MIEPYI SYLLABLE HMATYI SYLLABLE HMAXYI SYLLABLE HMAYI SYLLABLE HMAPYI SY" + + "LLABLE HMUOXYI SYLLABLE HMUOYI SYLLABLE HMUOPYI SYLLABLE HMOTYI SYLLABLE" + + " HMOXYI SYLLABLE HMOYI SYLLABLE HMOPYI SYLLABLE HMUTYI SYLLABLE HMUXYI S" + + "YLLABLE HMUYI SYLLABLE HMUPYI SYLLABLE HMURXYI SYLLABLE HMURYI SYLLABLE " + + "HMYXYI SYLLABLE HMYYI SYLLABLE HMYPYI SYLLABLE HMYRXYI SYLLABLE HMYRYI S" + + "YLLABLE MITYI SYLLABLE MIXYI SYLLABLE MIYI SYLLABLE MIPYI SYLLABLE MIEXY" + + "I SYLLABLE MIEYI SYLLABLE MIEPYI SYLLABLE MATYI SYLLABLE MAXYI SYLLABLE " + + "MAYI SYLLABLE MAPYI SYLLABLE MUOTYI SYLLABLE MUOXYI SYLLABLE MUOYI SYLLA" + + "BLE MUOPYI SYLLABLE MOTYI SYLLABLE MOXYI SYLLABLE MOYI SYLLABLE MOPYI SY" + + "LLABLE MEXYI SYLLABLE MEYI SYLLABLE MUTYI SYLLABLE MUXYI SYLLABLE MUYI S" + + "YLLABLE MUPYI SYLLABLE MURXYI SYLLABLE MURYI SYLLABLE MYTYI SYLLABLE MYX" + + "YI SYLLABLE MYYI SYLLABLE MYPYI SYLLABLE FITYI SYLLABLE FIXYI SYLLABLE F" + + "IYI SYLLABLE FIPYI SYLLABLE FATYI SYLLABLE FAXYI SYLLABLE FAYI SYLLABLE " + + "FAPYI SYLLABLE FOXYI SYLLABLE FOYI SYLLABLE FOPYI SYLLABLE FUTYI SYLLABL" + + "E FUXYI SYLLABLE FUYI SYLLABLE FUPYI SYLLABLE FURXYI SYLLABLE FURYI SYLL" + + "ABLE FYTYI SYLLABLE FYXYI SYLLABLE FYYI SYLLABLE FYPYI SYLLABLE VITYI SY" + + "LLABLE VIXYI SYLLABLE VIYI SYLLABLE VIPYI SYLLABLE VIETYI SYLLABLE VIEXY" + + "I SYLLABLE VIEYI SYLLABLE VIEPYI SYLLABLE VATYI SYLLABLE VAXYI SYLLABLE " + + "VAYI SYLLABLE VAPYI SYLLABLE VOTYI SYLLABLE VOXYI SYLLABLE VOYI SYLLABLE" + + " VOPYI SYLLABLE VEXYI SYLLABLE VEPYI SYLLABLE VUTYI SYLLABLE VUXYI SYLLA" + + "BLE VUYI SYLLABLE VUPYI SYLLABLE VURXYI SYLLABLE VURYI SYLLABLE VYTYI SY" + + "LLABLE VYXYI SYLLABLE VYYI SYLLABLE VYPYI SYLLABLE VYRXYI SYLLABLE VYRYI" + + " SYLLABLE DITYI SYLLABLE DIXYI SYLLABLE DIYI SYLLABLE DIPYI SYLLABLE DIE" + + "XYI SYLLABLE DIEYI SYLLABLE DIEPYI SYLLABLE DATYI SYLLABLE DAXYI SYLLABL" + + "E DAYI SYLLABLE DAPYI SYLLABLE DUOXYI SYLLABLE DUOYI SYLLABLE DOTYI SYLL" + + "ABLE DOXYI SYLLABLE DOYI SYLLABLE DOPYI SYLLABLE DEXYI SYLLABLE DEYI SYL" + + "LABLE DEPYI SYLLABLE DUTYI SYLLABLE DUXYI SYLLABLE DUYI SYLLABLE DUPYI S" + + "YLLABLE DURXYI SYLLABLE DURYI SYLLABLE TITYI SYLLABLE TIXYI SYLLABLE TIY" + + "I SYLLABLE TIPYI SYLLABLE TIEXYI SYLLABLE TIEYI SYLLABLE TIEPYI SYLLABLE" + + " TATYI SYLLABLE TAXYI SYLLABLE TAYI SYLLABLE TAPYI SYLLABLE TUOTYI SYLLA" + + "BLE TUOXYI SYLLABLE TUOYI SYLLABLE TUOPYI SYLLABLE TOTYI SYLLABLE TOXYI " + + "SYLLABLE TOYI SYLLABLE TOPYI SYLLABLE TEXYI SYLLABLE TEYI SYLLABLE TEPYI" + + " SYLLABLE TUTYI SYLLABLE TUXYI SYLLABLE TUYI SYLLABLE TUPYI SYLLABLE TUR" + + "XYI SYLLABLE TURYI SYLLABLE DDITYI SYLLABLE DDIXYI SYLLABLE DDIYI SYLLAB" + + "LE DDIPYI SYLLABLE DDIEXYI SYLLABLE DDIEYI SYLLABLE DDIEPYI SYLLABLE DDA" + + "TYI SYLLABLE DDAXYI SYLLABLE DDAYI SYLLABLE DDAPYI SYLLABLE DDUOXYI SYLL" + + "ABLE DDUOYI SYLLABLE DDUOPYI SYLLABLE DDOTYI SYLLABLE DDOXYI SYLLABLE DD" + + "OYI SYLLABLE DDOPYI SYLLABLE DDEXYI SYLLABLE DDEYI SYLLABLE DDEPYI SYLLA" + + "BLE DDUTYI SYLLABLE DDUXYI SYLLABLE DDUYI SYLLABLE DDUPYI SYLLABLE DDURX" + + "YI SYLLABLE DDURYI SYLLABLE NDITYI SYLLABLE NDIXYI SYLLABLE NDIYI SYLLAB" + + "LE NDIPYI SYLLABLE NDIEXYI SYLLABLE NDIEYI SYLLABLE NDATYI SYLLABLE NDAX" + + "YI SYLLABLE NDAYI SYLLABLE NDAPYI SYLLABLE NDOTYI SYLLABLE NDOXYI SYLLAB" + + "LE NDOYI SYLLABLE NDOPYI SYLLABLE NDEXYI SYLLABLE NDEYI SYLLABLE NDEPYI " + + "SYLLABLE NDUTYI SYLLABLE NDUXYI SYLLABLE NDUYI SYLLABLE NDUPYI SYLLABLE " + + "NDURXYI SYLLABLE NDURYI SYLLABLE HNITYI SYLLABLE HNIXYI SYLLABLE HNIYI S" + + "YLLABLE HNIPYI SYLLABLE HNIETYI SYLLABLE HNIEXYI SYLLABLE HNIEYI SYLLABL" + + "E HNIEPYI SYLLABLE HNATYI SYLLABLE HNAXYI SYLLABLE HNAYI SYLLABLE HNAPYI" + + " SYLLABLE HNUOXYI SYLLABLE HNUOYI SYLLABLE HNOTYI SYLLABLE HNOXYI SYLLAB" + + "LE HNOPYI SYLLABLE HNEXYI SYLLABLE HNEYI SYLLABLE HNEPYI SYLLABLE HNUTYI" + + " SYLLABLE NITYI SYLLABLE NIXYI SYLLABLE NIYI SYLLABLE NIPYI SYLLABLE NIE" + + "XYI SYLLABLE NIEYI SYLLABLE NIEPYI SYLLABLE NAXYI SYLLABLE NAYI SYLLABLE" + + " NAPYI SYLLABLE NUOXYI SYLLABLE NUOYI SYLLABLE NUOPYI SYLLABLE NOTYI SYL" + + "LABLE NOXYI SYLLABLE NOYI SYLLABLE NOPYI SYLLABLE NEXYI SYLLABLE NEYI SY" + + "LLABLE NEPYI SYLLABLE NUTYI SYLLABLE NUXYI SYLLABLE NUYI SYLLABLE NUPYI " + + "SYLLABLE NURXYI SYLLABLE NURYI SYLLABLE HLITYI SYLLABLE HLIXYI SYLLABLE " + + "HLIYI SYLLABLE HLIPYI SYLLABLE HLIEXYI SYLLABLE HLIEYI SYLLABLE HLIEPYI " + + "SYLLABLE HLATYI SYLLABLE HLAXYI SYLLABLE HLAYI SYLLABLE HLAPYI SYLLABLE " + + "HLUOXYI SYLLABLE HLUOYI SYLLABLE HLUOPYI SYLLABLE HLOXYI SYLLABLE HLOYI ") + ("" + + "SYLLABLE HLOPYI SYLLABLE HLEXYI SYLLABLE HLEYI SYLLABLE HLEPYI SYLLABLE " + + "HLUTYI SYLLABLE HLUXYI SYLLABLE HLUYI SYLLABLE HLUPYI SYLLABLE HLURXYI S" + + "YLLABLE HLURYI SYLLABLE HLYTYI SYLLABLE HLYXYI SYLLABLE HLYYI SYLLABLE H" + + "LYPYI SYLLABLE HLYRXYI SYLLABLE HLYRYI SYLLABLE LITYI SYLLABLE LIXYI SYL" + + "LABLE LIYI SYLLABLE LIPYI SYLLABLE LIETYI SYLLABLE LIEXYI SYLLABLE LIEYI" + + " SYLLABLE LIEPYI SYLLABLE LATYI SYLLABLE LAXYI SYLLABLE LAYI SYLLABLE LA" + + "PYI SYLLABLE LUOTYI SYLLABLE LUOXYI SYLLABLE LUOYI SYLLABLE LUOPYI SYLLA" + + "BLE LOTYI SYLLABLE LOXYI SYLLABLE LOYI SYLLABLE LOPYI SYLLABLE LEXYI SYL" + + "LABLE LEYI SYLLABLE LEPYI SYLLABLE LUTYI SYLLABLE LUXYI SYLLABLE LUYI SY" + + "LLABLE LUPYI SYLLABLE LURXYI SYLLABLE LURYI SYLLABLE LYTYI SYLLABLE LYXY" + + "I SYLLABLE LYYI SYLLABLE LYPYI SYLLABLE LYRXYI SYLLABLE LYRYI SYLLABLE G" + + "ITYI SYLLABLE GIXYI SYLLABLE GIYI SYLLABLE GIPYI SYLLABLE GIETYI SYLLABL" + + "E GIEXYI SYLLABLE GIEYI SYLLABLE GIEPYI SYLLABLE GATYI SYLLABLE GAXYI SY" + + "LLABLE GAYI SYLLABLE GAPYI SYLLABLE GUOTYI SYLLABLE GUOXYI SYLLABLE GUOY" + + "I SYLLABLE GUOPYI SYLLABLE GOTYI SYLLABLE GOXYI SYLLABLE GOYI SYLLABLE G" + + "OPYI SYLLABLE GETYI SYLLABLE GEXYI SYLLABLE GEYI SYLLABLE GEPYI SYLLABLE" + + " GUTYI SYLLABLE GUXYI SYLLABLE GUYI SYLLABLE GUPYI SYLLABLE GURXYI SYLLA" + + "BLE GURYI SYLLABLE KITYI SYLLABLE KIXYI SYLLABLE KIYI SYLLABLE KIPYI SYL" + + "LABLE KIEXYI SYLLABLE KIEYI SYLLABLE KIEPYI SYLLABLE KATYI SYLLABLE KAXY" + + "I SYLLABLE KAYI SYLLABLE KAPYI SYLLABLE KUOXYI SYLLABLE KUOYI SYLLABLE K" + + "UOPYI SYLLABLE KOTYI SYLLABLE KOXYI SYLLABLE KOYI SYLLABLE KOPYI SYLLABL" + + "E KETYI SYLLABLE KEXYI SYLLABLE KEYI SYLLABLE KEPYI SYLLABLE KUTYI SYLLA" + + "BLE KUXYI SYLLABLE KUYI SYLLABLE KUPYI SYLLABLE KURXYI SYLLABLE KURYI SY" + + "LLABLE GGITYI SYLLABLE GGIXYI SYLLABLE GGIYI SYLLABLE GGIEXYI SYLLABLE G" + + "GIEYI SYLLABLE GGIEPYI SYLLABLE GGATYI SYLLABLE GGAXYI SYLLABLE GGAYI SY" + + "LLABLE GGAPYI SYLLABLE GGUOTYI SYLLABLE GGUOXYI SYLLABLE GGUOYI SYLLABLE" + + " GGUOPYI SYLLABLE GGOTYI SYLLABLE GGOXYI SYLLABLE GGOYI SYLLABLE GGOPYI " + + "SYLLABLE GGETYI SYLLABLE GGEXYI SYLLABLE GGEYI SYLLABLE GGEPYI SYLLABLE " + + "GGUTYI SYLLABLE GGUXYI SYLLABLE GGUYI SYLLABLE GGUPYI SYLLABLE GGURXYI S" + + "YLLABLE GGURYI SYLLABLE MGIEXYI SYLLABLE MGIEYI SYLLABLE MGATYI SYLLABLE" + + " MGAXYI SYLLABLE MGAYI SYLLABLE MGAPYI SYLLABLE MGUOXYI SYLLABLE MGUOYI " + + "SYLLABLE MGUOPYI SYLLABLE MGOTYI SYLLABLE MGOXYI SYLLABLE MGOYI SYLLABLE" + + " MGOPYI SYLLABLE MGEXYI SYLLABLE MGEYI SYLLABLE MGEPYI SYLLABLE MGUTYI S" + + "YLLABLE MGUXYI SYLLABLE MGUYI SYLLABLE MGUPYI SYLLABLE MGURXYI SYLLABLE " + + "MGURYI SYLLABLE HXITYI SYLLABLE HXIXYI SYLLABLE HXIYI SYLLABLE HXIPYI SY" + + "LLABLE HXIETYI SYLLABLE HXIEXYI SYLLABLE HXIEYI SYLLABLE HXIEPYI SYLLABL" + + "E HXATYI SYLLABLE HXAXYI SYLLABLE HXAYI SYLLABLE HXAPYI SYLLABLE HXUOTYI" + + " SYLLABLE HXUOXYI SYLLABLE HXUOYI SYLLABLE HXUOPYI SYLLABLE HXOTYI SYLLA" + + "BLE HXOXYI SYLLABLE HXOYI SYLLABLE HXOPYI SYLLABLE HXEXYI SYLLABLE HXEYI" + + " SYLLABLE HXEPYI SYLLABLE NGIEXYI SYLLABLE NGIEYI SYLLABLE NGIEPYI SYLLA" + + "BLE NGATYI SYLLABLE NGAXYI SYLLABLE NGAYI SYLLABLE NGAPYI SYLLABLE NGUOT" + + "YI SYLLABLE NGUOXYI SYLLABLE NGUOYI SYLLABLE NGOTYI SYLLABLE NGOXYI SYLL" + + "ABLE NGOYI SYLLABLE NGOPYI SYLLABLE NGEXYI SYLLABLE NGEYI SYLLABLE NGEPY" + + "I SYLLABLE HITYI SYLLABLE HIEXYI SYLLABLE HIEYI SYLLABLE HATYI SYLLABLE " + + "HAXYI SYLLABLE HAYI SYLLABLE HAPYI SYLLABLE HUOTYI SYLLABLE HUOXYI SYLLA" + + "BLE HUOYI SYLLABLE HUOPYI SYLLABLE HOTYI SYLLABLE HOXYI SYLLABLE HOYI SY" + + "LLABLE HOPYI SYLLABLE HEXYI SYLLABLE HEYI SYLLABLE HEPYI SYLLABLE WATYI " + + "SYLLABLE WAXYI SYLLABLE WAYI SYLLABLE WAPYI SYLLABLE WUOXYI SYLLABLE WUO" + + "YI SYLLABLE WUOPYI SYLLABLE WOXYI SYLLABLE WOYI SYLLABLE WOPYI SYLLABLE " + + "WEXYI SYLLABLE WEYI SYLLABLE WEPYI SYLLABLE ZITYI SYLLABLE ZIXYI SYLLABL" + + "E ZIYI SYLLABLE ZIPYI SYLLABLE ZIEXYI SYLLABLE ZIEYI SYLLABLE ZIEPYI SYL" + + "LABLE ZATYI SYLLABLE ZAXYI SYLLABLE ZAYI SYLLABLE ZAPYI SYLLABLE ZUOXYI " + + "SYLLABLE ZUOYI SYLLABLE ZUOPYI SYLLABLE ZOTYI SYLLABLE ZOXYI SYLLABLE ZO" + + "YI SYLLABLE ZOPYI SYLLABLE ZEXYI SYLLABLE ZEYI SYLLABLE ZEPYI SYLLABLE Z" + + "UTYI SYLLABLE ZUXYI SYLLABLE ZUYI SYLLABLE ZUPYI SYLLABLE ZURXYI SYLLABL" + + "E ZURYI SYLLABLE ZYTYI SYLLABLE ZYXYI SYLLABLE ZYYI SYLLABLE ZYPYI SYLLA" + + "BLE ZYRXYI SYLLABLE ZYRYI SYLLABLE CITYI SYLLABLE CIXYI SYLLABLE CIYI SY" + + "LLABLE CIPYI SYLLABLE CIETYI SYLLABLE CIEXYI SYLLABLE CIEYI SYLLABLE CIE" + + "PYI SYLLABLE CATYI SYLLABLE CAXYI SYLLABLE CAYI SYLLABLE CAPYI SYLLABLE " + + "CUOXYI SYLLABLE CUOYI SYLLABLE CUOPYI SYLLABLE COTYI SYLLABLE COXYI SYLL" + + "ABLE COYI SYLLABLE COPYI SYLLABLE CEXYI SYLLABLE CEYI SYLLABLE CEPYI SYL" + + "LABLE CUTYI SYLLABLE CUXYI SYLLABLE CUYI SYLLABLE CUPYI SYLLABLE CURXYI " + + "SYLLABLE CURYI SYLLABLE CYTYI SYLLABLE CYXYI SYLLABLE CYYI SYLLABLE CYPY" + + "I SYLLABLE CYRXYI SYLLABLE CYRYI SYLLABLE ZZITYI SYLLABLE ZZIXYI SYLLABL") + ("" + + "E ZZIYI SYLLABLE ZZIPYI SYLLABLE ZZIETYI SYLLABLE ZZIEXYI SYLLABLE ZZIEY" + + "I SYLLABLE ZZIEPYI SYLLABLE ZZATYI SYLLABLE ZZAXYI SYLLABLE ZZAYI SYLLAB" + + "LE ZZAPYI SYLLABLE ZZOXYI SYLLABLE ZZOYI SYLLABLE ZZOPYI SYLLABLE ZZEXYI" + + " SYLLABLE ZZEYI SYLLABLE ZZEPYI SYLLABLE ZZUXYI SYLLABLE ZZUYI SYLLABLE " + + "ZZUPYI SYLLABLE ZZURXYI SYLLABLE ZZURYI SYLLABLE ZZYTYI SYLLABLE ZZYXYI " + + "SYLLABLE ZZYYI SYLLABLE ZZYPYI SYLLABLE ZZYRXYI SYLLABLE ZZYRYI SYLLABLE" + + " NZITYI SYLLABLE NZIXYI SYLLABLE NZIYI SYLLABLE NZIPYI SYLLABLE NZIEXYI " + + "SYLLABLE NZIEYI SYLLABLE NZIEPYI SYLLABLE NZATYI SYLLABLE NZAXYI SYLLABL" + + "E NZAYI SYLLABLE NZAPYI SYLLABLE NZUOXYI SYLLABLE NZUOYI SYLLABLE NZOXYI" + + " SYLLABLE NZOPYI SYLLABLE NZEXYI SYLLABLE NZEYI SYLLABLE NZUXYI SYLLABLE" + + " NZUYI SYLLABLE NZUPYI SYLLABLE NZURXYI SYLLABLE NZURYI SYLLABLE NZYTYI " + + "SYLLABLE NZYXYI SYLLABLE NZYYI SYLLABLE NZYPYI SYLLABLE NZYRXYI SYLLABLE" + + " NZYRYI SYLLABLE SITYI SYLLABLE SIXYI SYLLABLE SIYI SYLLABLE SIPYI SYLLA" + + "BLE SIEXYI SYLLABLE SIEYI SYLLABLE SIEPYI SYLLABLE SATYI SYLLABLE SAXYI " + + "SYLLABLE SAYI SYLLABLE SAPYI SYLLABLE SUOXYI SYLLABLE SUOYI SYLLABLE SUO" + + "PYI SYLLABLE SOTYI SYLLABLE SOXYI SYLLABLE SOYI SYLLABLE SOPYI SYLLABLE " + + "SEXYI SYLLABLE SEYI SYLLABLE SEPYI SYLLABLE SUTYI SYLLABLE SUXYI SYLLABL" + + "E SUYI SYLLABLE SUPYI SYLLABLE SURXYI SYLLABLE SURYI SYLLABLE SYTYI SYLL" + + "ABLE SYXYI SYLLABLE SYYI SYLLABLE SYPYI SYLLABLE SYRXYI SYLLABLE SYRYI S" + + "YLLABLE SSITYI SYLLABLE SSIXYI SYLLABLE SSIYI SYLLABLE SSIPYI SYLLABLE S" + + "SIEXYI SYLLABLE SSIEYI SYLLABLE SSIEPYI SYLLABLE SSATYI SYLLABLE SSAXYI " + + "SYLLABLE SSAYI SYLLABLE SSAPYI SYLLABLE SSOTYI SYLLABLE SSOXYI SYLLABLE " + + "SSOYI SYLLABLE SSOPYI SYLLABLE SSEXYI SYLLABLE SSEYI SYLLABLE SSEPYI SYL" + + "LABLE SSUTYI SYLLABLE SSUXYI SYLLABLE SSUYI SYLLABLE SSUPYI SYLLABLE SSY" + + "TYI SYLLABLE SSYXYI SYLLABLE SSYYI SYLLABLE SSYPYI SYLLABLE SSYRXYI SYLL" + + "ABLE SSYRYI SYLLABLE ZHATYI SYLLABLE ZHAXYI SYLLABLE ZHAYI SYLLABLE ZHAP" + + "YI SYLLABLE ZHUOXYI SYLLABLE ZHUOYI SYLLABLE ZHUOPYI SYLLABLE ZHOTYI SYL" + + "LABLE ZHOXYI SYLLABLE ZHOYI SYLLABLE ZHOPYI SYLLABLE ZHETYI SYLLABLE ZHE" + + "XYI SYLLABLE ZHEYI SYLLABLE ZHEPYI SYLLABLE ZHUTYI SYLLABLE ZHUXYI SYLLA" + + "BLE ZHUYI SYLLABLE ZHUPYI SYLLABLE ZHURXYI SYLLABLE ZHURYI SYLLABLE ZHYT" + + "YI SYLLABLE ZHYXYI SYLLABLE ZHYYI SYLLABLE ZHYPYI SYLLABLE ZHYRXYI SYLLA" + + "BLE ZHYRYI SYLLABLE CHATYI SYLLABLE CHAXYI SYLLABLE CHAYI SYLLABLE CHAPY" + + "I SYLLABLE CHUOTYI SYLLABLE CHUOXYI SYLLABLE CHUOYI SYLLABLE CHUOPYI SYL" + + "LABLE CHOTYI SYLLABLE CHOXYI SYLLABLE CHOYI SYLLABLE CHOPYI SYLLABLE CHE" + + "TYI SYLLABLE CHEXYI SYLLABLE CHEYI SYLLABLE CHEPYI SYLLABLE CHUXYI SYLLA" + + "BLE CHUYI SYLLABLE CHUPYI SYLLABLE CHURXYI SYLLABLE CHURYI SYLLABLE CHYT" + + "YI SYLLABLE CHYXYI SYLLABLE CHYYI SYLLABLE CHYPYI SYLLABLE CHYRXYI SYLLA" + + "BLE CHYRYI SYLLABLE RRAXYI SYLLABLE RRAYI SYLLABLE RRUOXYI SYLLABLE RRUO" + + "YI SYLLABLE RROTYI SYLLABLE RROXYI SYLLABLE RROYI SYLLABLE RROPYI SYLLAB" + + "LE RRETYI SYLLABLE RREXYI SYLLABLE RREYI SYLLABLE RREPYI SYLLABLE RRUTYI" + + " SYLLABLE RRUXYI SYLLABLE RRUYI SYLLABLE RRUPYI SYLLABLE RRURXYI SYLLABL" + + "E RRURYI SYLLABLE RRYTYI SYLLABLE RRYXYI SYLLABLE RRYYI SYLLABLE RRYPYI " + + "SYLLABLE RRYRXYI SYLLABLE RRYRYI SYLLABLE NRATYI SYLLABLE NRAXYI SYLLABL" + + "E NRAYI SYLLABLE NRAPYI SYLLABLE NROXYI SYLLABLE NROYI SYLLABLE NROPYI S" + + "YLLABLE NRETYI SYLLABLE NREXYI SYLLABLE NREYI SYLLABLE NREPYI SYLLABLE N" + + "RUTYI SYLLABLE NRUXYI SYLLABLE NRUYI SYLLABLE NRUPYI SYLLABLE NRURXYI SY" + + "LLABLE NRURYI SYLLABLE NRYTYI SYLLABLE NRYXYI SYLLABLE NRYYI SYLLABLE NR" + + "YPYI SYLLABLE NRYRXYI SYLLABLE NRYRYI SYLLABLE SHATYI SYLLABLE SHAXYI SY" + + "LLABLE SHAYI SYLLABLE SHAPYI SYLLABLE SHUOXYI SYLLABLE SHUOYI SYLLABLE S" + + "HUOPYI SYLLABLE SHOTYI SYLLABLE SHOXYI SYLLABLE SHOYI SYLLABLE SHOPYI SY" + + "LLABLE SHETYI SYLLABLE SHEXYI SYLLABLE SHEYI SYLLABLE SHEPYI SYLLABLE SH" + + "UTYI SYLLABLE SHUXYI SYLLABLE SHUYI SYLLABLE SHUPYI SYLLABLE SHURXYI SYL" + + "LABLE SHURYI SYLLABLE SHYTYI SYLLABLE SHYXYI SYLLABLE SHYYI SYLLABLE SHY" + + "PYI SYLLABLE SHYRXYI SYLLABLE SHYRYI SYLLABLE RATYI SYLLABLE RAXYI SYLLA" + + "BLE RAYI SYLLABLE RAPYI SYLLABLE RUOXYI SYLLABLE RUOYI SYLLABLE RUOPYI S" + + "YLLABLE ROTYI SYLLABLE ROXYI SYLLABLE ROYI SYLLABLE ROPYI SYLLABLE REXYI" + + " SYLLABLE REYI SYLLABLE REPYI SYLLABLE RUTYI SYLLABLE RUXYI SYLLABLE RUY" + + "I SYLLABLE RUPYI SYLLABLE RURXYI SYLLABLE RURYI SYLLABLE RYTYI SYLLABLE " + + "RYXYI SYLLABLE RYYI SYLLABLE RYPYI SYLLABLE RYRXYI SYLLABLE RYRYI SYLLAB" + + "LE JITYI SYLLABLE JIXYI SYLLABLE JIYI SYLLABLE JIPYI SYLLABLE JIETYI SYL" + + "LABLE JIEXYI SYLLABLE JIEYI SYLLABLE JIEPYI SYLLABLE JUOTYI SYLLABLE JUO" + + "XYI SYLLABLE JUOYI SYLLABLE JUOPYI SYLLABLE JOTYI SYLLABLE JOXYI SYLLABL" + + "E JOYI SYLLABLE JOPYI SYLLABLE JUTYI SYLLABLE JUXYI SYLLABLE JUYI SYLLAB" + + "LE JUPYI SYLLABLE JURXYI SYLLABLE JURYI SYLLABLE JYTYI SYLLABLE JYXYI SY") + ("" + + "LLABLE JYYI SYLLABLE JYPYI SYLLABLE JYRXYI SYLLABLE JYRYI SYLLABLE QITYI" + + " SYLLABLE QIXYI SYLLABLE QIYI SYLLABLE QIPYI SYLLABLE QIETYI SYLLABLE QI" + + "EXYI SYLLABLE QIEYI SYLLABLE QIEPYI SYLLABLE QUOTYI SYLLABLE QUOXYI SYLL" + + "ABLE QUOYI SYLLABLE QUOPYI SYLLABLE QOTYI SYLLABLE QOXYI SYLLABLE QOYI S" + + "YLLABLE QOPYI SYLLABLE QUTYI SYLLABLE QUXYI SYLLABLE QUYI SYLLABLE QUPYI" + + " SYLLABLE QURXYI SYLLABLE QURYI SYLLABLE QYTYI SYLLABLE QYXYI SYLLABLE Q" + + "YYI SYLLABLE QYPYI SYLLABLE QYRXYI SYLLABLE QYRYI SYLLABLE JJITYI SYLLAB" + + "LE JJIXYI SYLLABLE JJIYI SYLLABLE JJIPYI SYLLABLE JJIETYI SYLLABLE JJIEX" + + "YI SYLLABLE JJIEYI SYLLABLE JJIEPYI SYLLABLE JJUOXYI SYLLABLE JJUOYI SYL" + + "LABLE JJUOPYI SYLLABLE JJOTYI SYLLABLE JJOXYI SYLLABLE JJOYI SYLLABLE JJ" + + "OPYI SYLLABLE JJUTYI SYLLABLE JJUXYI SYLLABLE JJUYI SYLLABLE JJUPYI SYLL" + + "ABLE JJURXYI SYLLABLE JJURYI SYLLABLE JJYTYI SYLLABLE JJYXYI SYLLABLE JJ" + + "YYI SYLLABLE JJYPYI SYLLABLE NJITYI SYLLABLE NJIXYI SYLLABLE NJIYI SYLLA" + + "BLE NJIPYI SYLLABLE NJIETYI SYLLABLE NJIEXYI SYLLABLE NJIEYI SYLLABLE NJ" + + "IEPYI SYLLABLE NJUOXYI SYLLABLE NJUOYI SYLLABLE NJOTYI SYLLABLE NJOXYI S" + + "YLLABLE NJOYI SYLLABLE NJOPYI SYLLABLE NJUXYI SYLLABLE NJUYI SYLLABLE NJ" + + "UPYI SYLLABLE NJURXYI SYLLABLE NJURYI SYLLABLE NJYTYI SYLLABLE NJYXYI SY" + + "LLABLE NJYYI SYLLABLE NJYPYI SYLLABLE NJYRXYI SYLLABLE NJYRYI SYLLABLE N" + + "YITYI SYLLABLE NYIXYI SYLLABLE NYIYI SYLLABLE NYIPYI SYLLABLE NYIETYI SY" + + "LLABLE NYIEXYI SYLLABLE NYIEYI SYLLABLE NYIEPYI SYLLABLE NYUOXYI SYLLABL" + + "E NYUOYI SYLLABLE NYUOPYI SYLLABLE NYOTYI SYLLABLE NYOXYI SYLLABLE NYOYI" + + " SYLLABLE NYOPYI SYLLABLE NYUTYI SYLLABLE NYUXYI SYLLABLE NYUYI SYLLABLE" + + " NYUPYI SYLLABLE XITYI SYLLABLE XIXYI SYLLABLE XIYI SYLLABLE XIPYI SYLLA" + + "BLE XIETYI SYLLABLE XIEXYI SYLLABLE XIEYI SYLLABLE XIEPYI SYLLABLE XUOXY" + + "I SYLLABLE XUOYI SYLLABLE XOTYI SYLLABLE XOXYI SYLLABLE XOYI SYLLABLE XO" + + "PYI SYLLABLE XYTYI SYLLABLE XYXYI SYLLABLE XYYI SYLLABLE XYPYI SYLLABLE " + + "XYRXYI SYLLABLE XYRYI SYLLABLE YITYI SYLLABLE YIXYI SYLLABLE YIYI SYLLAB" + + "LE YIPYI SYLLABLE YIETYI SYLLABLE YIEXYI SYLLABLE YIEYI SYLLABLE YIEPYI " + + "SYLLABLE YUOTYI SYLLABLE YUOXYI SYLLABLE YUOYI SYLLABLE YUOPYI SYLLABLE " + + "YOTYI SYLLABLE YOXYI SYLLABLE YOYI SYLLABLE YOPYI SYLLABLE YUTYI SYLLABL" + + "E YUXYI SYLLABLE YUYI SYLLABLE YUPYI SYLLABLE YURXYI SYLLABLE YURYI SYLL" + + "ABLE YYTYI SYLLABLE YYXYI SYLLABLE YYYI SYLLABLE YYPYI SYLLABLE YYRXYI S" + + "YLLABLE YYRYI RADICAL QOTYI RADICAL LIYI RADICAL KITYI RADICAL NYIPYI RA" + + "DICAL CYPYI RADICAL SSIYI RADICAL GGOPYI RADICAL GEPYI RADICAL MIYI RADI" + + "CAL HXITYI RADICAL LYRYI RADICAL BBUTYI RADICAL MOPYI RADICAL YOYI RADIC" + + "AL PUTYI RADICAL HXUOYI RADICAL TATYI RADICAL GAYI RADICAL ZUPYI RADICAL" + + " CYTYI RADICAL DDURYI RADICAL BURYI RADICAL GGUOYI RADICAL NYOPYI RADICA" + + "L TUYI RADICAL OPYI RADICAL JJUTYI RADICAL ZOTYI RADICAL PYTYI RADICAL H" + + "MOYI RADICAL YITYI RADICAL VURYI RADICAL SHYYI RADICAL VEPYI RADICAL ZAY" + + "I RADICAL JOYI RADICAL NZUPYI RADICAL JJYYI RADICAL GOTYI RADICAL JJIEYI" + + " RADICAL WOYI RADICAL DUYI RADICAL SHURYI RADICAL LIEYI RADICAL CYYI RAD" + + "ICAL CUOPYI RADICAL CIPYI RADICAL HXOPYI RADICAL SHATYI RADICAL ZURYI RA" + + "DICAL SHOPYI RADICAL CHEYI RADICAL ZZIETYI RADICAL NBIEYI RADICAL KELISU" + + " LETTER BALISU LETTER PALISU LETTER PHALISU LETTER DALISU LETTER TALISU " + + "LETTER THALISU LETTER GALISU LETTER KALISU LETTER KHALISU LETTER JALISU " + + "LETTER CALISU LETTER CHALISU LETTER DZALISU LETTER TSALISU LETTER TSHALI" + + "SU LETTER MALISU LETTER NALISU LETTER LALISU LETTER SALISU LETTER ZHALIS" + + "U LETTER ZALISU LETTER NGALISU LETTER HALISU LETTER XALISU LETTER HHALIS" + + "U LETTER FALISU LETTER WALISU LETTER SHALISU LETTER YALISU LETTER GHALIS" + + "U LETTER ALISU LETTER AELISU LETTER ELISU LETTER EULISU LETTER ILISU LET" + + "TER OLISU LETTER ULISU LETTER UELISU LETTER UHLISU LETTER OELISU LETTER " + + "TONE MYA TILISU LETTER TONE NA POLISU LETTER TONE MYA CYALISU LETTER TON" + + "E MYA BOLISU LETTER TONE MYA NALISU LETTER TONE MYA JEULISU PUNCTUATION " + + "COMMALISU PUNCTUATION FULL STOPVAI SYLLABLE EEVAI SYLLABLE EENVAI SYLLAB" + + "LE HEEVAI SYLLABLE WEEVAI SYLLABLE WEENVAI SYLLABLE PEEVAI SYLLABLE BHEE" + + "VAI SYLLABLE BEEVAI SYLLABLE MBEEVAI SYLLABLE KPEEVAI SYLLABLE MGBEEVAI " + + "SYLLABLE GBEEVAI SYLLABLE FEEVAI SYLLABLE VEEVAI SYLLABLE TEEVAI SYLLABL" + + "E THEEVAI SYLLABLE DHEEVAI SYLLABLE DHHEEVAI SYLLABLE LEEVAI SYLLABLE RE" + + "EVAI SYLLABLE DEEVAI SYLLABLE NDEEVAI SYLLABLE SEEVAI SYLLABLE SHEEVAI S" + + "YLLABLE ZEEVAI SYLLABLE ZHEEVAI SYLLABLE CEEVAI SYLLABLE JEEVAI SYLLABLE" + + " NJEEVAI SYLLABLE YEEVAI SYLLABLE KEEVAI SYLLABLE NGGEEVAI SYLLABLE GEEV" + + "AI SYLLABLE MEEVAI SYLLABLE NEEVAI SYLLABLE NYEEVAI SYLLABLE IVAI SYLLAB" + + "LE INVAI SYLLABLE HIVAI SYLLABLE HINVAI SYLLABLE WIVAI SYLLABLE WINVAI S" + + "YLLABLE PIVAI SYLLABLE BHIVAI SYLLABLE BIVAI SYLLABLE MBIVAI SYLLABLE KP") + ("" + + "IVAI SYLLABLE MGBIVAI SYLLABLE GBIVAI SYLLABLE FIVAI SYLLABLE VIVAI SYLL" + + "ABLE TIVAI SYLLABLE THIVAI SYLLABLE DHIVAI SYLLABLE DHHIVAI SYLLABLE LIV" + + "AI SYLLABLE RIVAI SYLLABLE DIVAI SYLLABLE NDIVAI SYLLABLE SIVAI SYLLABLE" + + " SHIVAI SYLLABLE ZIVAI SYLLABLE ZHIVAI SYLLABLE CIVAI SYLLABLE JIVAI SYL" + + "LABLE NJIVAI SYLLABLE YIVAI SYLLABLE KIVAI SYLLABLE NGGIVAI SYLLABLE GIV" + + "AI SYLLABLE MIVAI SYLLABLE NIVAI SYLLABLE NYIVAI SYLLABLE AVAI SYLLABLE " + + "ANVAI SYLLABLE NGANVAI SYLLABLE HAVAI SYLLABLE HANVAI SYLLABLE WAVAI SYL" + + "LABLE WANVAI SYLLABLE PAVAI SYLLABLE BHAVAI SYLLABLE BAVAI SYLLABLE MBAV" + + "AI SYLLABLE KPAVAI SYLLABLE KPANVAI SYLLABLE MGBAVAI SYLLABLE GBAVAI SYL" + + "LABLE FAVAI SYLLABLE VAVAI SYLLABLE TAVAI SYLLABLE THAVAI SYLLABLE DHAVA" + + "I SYLLABLE DHHAVAI SYLLABLE LAVAI SYLLABLE RAVAI SYLLABLE DAVAI SYLLABLE" + + " NDAVAI SYLLABLE SAVAI SYLLABLE SHAVAI SYLLABLE ZAVAI SYLLABLE ZHAVAI SY" + + "LLABLE CAVAI SYLLABLE JAVAI SYLLABLE NJAVAI SYLLABLE YAVAI SYLLABLE KAVA" + + "I SYLLABLE KANVAI SYLLABLE NGGAVAI SYLLABLE GAVAI SYLLABLE MAVAI SYLLABL" + + "E NAVAI SYLLABLE NYAVAI SYLLABLE OOVAI SYLLABLE OONVAI SYLLABLE HOOVAI S" + + "YLLABLE WOOVAI SYLLABLE WOONVAI SYLLABLE POOVAI SYLLABLE BHOOVAI SYLLABL" + + "E BOOVAI SYLLABLE MBOOVAI SYLLABLE KPOOVAI SYLLABLE MGBOOVAI SYLLABLE GB" + + "OOVAI SYLLABLE FOOVAI SYLLABLE VOOVAI SYLLABLE TOOVAI SYLLABLE THOOVAI S" + + "YLLABLE DHOOVAI SYLLABLE DHHOOVAI SYLLABLE LOOVAI SYLLABLE ROOVAI SYLLAB" + + "LE DOOVAI SYLLABLE NDOOVAI SYLLABLE SOOVAI SYLLABLE SHOOVAI SYLLABLE ZOO" + + "VAI SYLLABLE ZHOOVAI SYLLABLE COOVAI SYLLABLE JOOVAI SYLLABLE NJOOVAI SY" + + "LLABLE YOOVAI SYLLABLE KOOVAI SYLLABLE NGGOOVAI SYLLABLE GOOVAI SYLLABLE" + + " MOOVAI SYLLABLE NOOVAI SYLLABLE NYOOVAI SYLLABLE UVAI SYLLABLE UNVAI SY" + + "LLABLE HUVAI SYLLABLE HUNVAI SYLLABLE WUVAI SYLLABLE WUNVAI SYLLABLE PUV" + + "AI SYLLABLE BHUVAI SYLLABLE BUVAI SYLLABLE MBUVAI SYLLABLE KPUVAI SYLLAB" + + "LE MGBUVAI SYLLABLE GBUVAI SYLLABLE FUVAI SYLLABLE VUVAI SYLLABLE TUVAI " + + "SYLLABLE THUVAI SYLLABLE DHUVAI SYLLABLE DHHUVAI SYLLABLE LUVAI SYLLABLE" + + " RUVAI SYLLABLE DUVAI SYLLABLE NDUVAI SYLLABLE SUVAI SYLLABLE SHUVAI SYL" + + "LABLE ZUVAI SYLLABLE ZHUVAI SYLLABLE CUVAI SYLLABLE JUVAI SYLLABLE NJUVA" + + "I SYLLABLE YUVAI SYLLABLE KUVAI SYLLABLE NGGUVAI SYLLABLE GUVAI SYLLABLE" + + " MUVAI SYLLABLE NUVAI SYLLABLE NYUVAI SYLLABLE OVAI SYLLABLE ONVAI SYLLA" + + "BLE NGONVAI SYLLABLE HOVAI SYLLABLE HONVAI SYLLABLE WOVAI SYLLABLE WONVA" + + "I SYLLABLE POVAI SYLLABLE BHOVAI SYLLABLE BOVAI SYLLABLE MBOVAI SYLLABLE" + + " KPOVAI SYLLABLE MGBOVAI SYLLABLE GBOVAI SYLLABLE GBONVAI SYLLABLE FOVAI" + + " SYLLABLE VOVAI SYLLABLE TOVAI SYLLABLE THOVAI SYLLABLE DHOVAI SYLLABLE " + + "DHHOVAI SYLLABLE LOVAI SYLLABLE ROVAI SYLLABLE DOVAI SYLLABLE NDOVAI SYL" + + "LABLE SOVAI SYLLABLE SHOVAI SYLLABLE ZOVAI SYLLABLE ZHOVAI SYLLABLE COVA" + + "I SYLLABLE JOVAI SYLLABLE NJOVAI SYLLABLE YOVAI SYLLABLE KOVAI SYLLABLE " + + "NGGOVAI SYLLABLE GOVAI SYLLABLE MOVAI SYLLABLE NOVAI SYLLABLE NYOVAI SYL" + + "LABLE EVAI SYLLABLE ENVAI SYLLABLE NGENVAI SYLLABLE HEVAI SYLLABLE HENVA" + + "I SYLLABLE WEVAI SYLLABLE WENVAI SYLLABLE PEVAI SYLLABLE BHEVAI SYLLABLE" + + " BEVAI SYLLABLE MBEVAI SYLLABLE KPEVAI SYLLABLE KPENVAI SYLLABLE MGBEVAI" + + " SYLLABLE GBEVAI SYLLABLE GBENVAI SYLLABLE FEVAI SYLLABLE VEVAI SYLLABLE" + + " TEVAI SYLLABLE THEVAI SYLLABLE DHEVAI SYLLABLE DHHEVAI SYLLABLE LEVAI S" + + "YLLABLE REVAI SYLLABLE DEVAI SYLLABLE NDEVAI SYLLABLE SEVAI SYLLABLE SHE" + + "VAI SYLLABLE ZEVAI SYLLABLE ZHEVAI SYLLABLE CEVAI SYLLABLE JEVAI SYLLABL" + + "E NJEVAI SYLLABLE YEVAI SYLLABLE KEVAI SYLLABLE NGGEVAI SYLLABLE NGGENVA" + + "I SYLLABLE GEVAI SYLLABLE GENVAI SYLLABLE MEVAI SYLLABLE NEVAI SYLLABLE " + + "NYEVAI SYLLABLE NGVAI SYLLABLE LENGTHENERVAI COMMAVAI FULL STOPVAI QUEST" + + "ION MARKVAI SYLLABLE NDOLE FAVAI SYLLABLE NDOLE KAVAI SYLLABLE NDOLE SOO" + + "VAI SYMBOL FEENGVAI SYMBOL KEENGVAI SYMBOL TINGVAI SYMBOL NIIVAI SYMBOL " + + "BANGVAI SYMBOL FAAVAI SYMBOL TAAVAI SYMBOL DANGVAI SYMBOL DOONGVAI SYMBO" + + "L KUNGVAI SYMBOL TONGVAI SYMBOL DO-OVAI SYMBOL JONGVAI DIGIT ZEROVAI DIG" + + "IT ONEVAI DIGIT TWOVAI DIGIT THREEVAI DIGIT FOURVAI DIGIT FIVEVAI DIGIT " + + "SIXVAI DIGIT SEVENVAI DIGIT EIGHTVAI DIGIT NINEVAI SYLLABLE NDOLE MAVAI " + + "SYLLABLE NDOLE DOCYRILLIC CAPITAL LETTER ZEMLYACYRILLIC SMALL LETTER ZEM" + + "LYACYRILLIC CAPITAL LETTER DZELOCYRILLIC SMALL LETTER DZELOCYRILLIC CAPI" + + "TAL LETTER REVERSED DZECYRILLIC SMALL LETTER REVERSED DZECYRILLIC CAPITA" + + "L LETTER IOTACYRILLIC SMALL LETTER IOTACYRILLIC CAPITAL LETTER DJERVCYRI" + + "LLIC SMALL LETTER DJERVCYRILLIC CAPITAL LETTER MONOGRAPH UKCYRILLIC SMAL" + + "L LETTER MONOGRAPH UKCYRILLIC CAPITAL LETTER BROAD OMEGACYRILLIC SMALL L" + + "ETTER BROAD OMEGACYRILLIC CAPITAL LETTER NEUTRAL YERCYRILLIC SMALL LETTE" + + "R NEUTRAL YERCYRILLIC CAPITAL LETTER YERU WITH BACK YERCYRILLIC SMALL LE" + + "TTER YERU WITH BACK YERCYRILLIC CAPITAL LETTER IOTIFIED YATCYRILLIC SMAL") + ("" + + "L LETTER IOTIFIED YATCYRILLIC CAPITAL LETTER REVERSED YUCYRILLIC SMALL L" + + "ETTER REVERSED YUCYRILLIC CAPITAL LETTER IOTIFIED ACYRILLIC SMALL LETTER" + + " IOTIFIED ACYRILLIC CAPITAL LETTER CLOSED LITTLE YUSCYRILLIC SMALL LETTE" + + "R CLOSED LITTLE YUSCYRILLIC CAPITAL LETTER BLENDED YUSCYRILLIC SMALL LET" + + "TER BLENDED YUSCYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUSCYRILLI" + + "C SMALL LETTER IOTIFIED CLOSED LITTLE YUSCYRILLIC CAPITAL LETTER YNCYRIL" + + "LIC SMALL LETTER YNCYRILLIC CAPITAL LETTER REVERSED TSECYRILLIC SMALL LE" + + "TTER REVERSED TSECYRILLIC CAPITAL LETTER SOFT DECYRILLIC SMALL LETTER SO" + + "FT DECYRILLIC CAPITAL LETTER SOFT ELCYRILLIC SMALL LETTER SOFT ELCYRILLI" + + "C CAPITAL LETTER SOFT EMCYRILLIC SMALL LETTER SOFT EMCYRILLIC CAPITAL LE" + + "TTER MONOCULAR OCYRILLIC SMALL LETTER MONOCULAR OCYRILLIC CAPITAL LETTER" + + " BINOCULAR OCYRILLIC SMALL LETTER BINOCULAR OCYRILLIC CAPITAL LETTER DOU" + + "BLE MONOCULAR OCYRILLIC SMALL LETTER DOUBLE MONOCULAR OCYRILLIC LETTER M" + + "ULTIOCULAR OCOMBINING CYRILLIC VZMETCOMBINING CYRILLIC TEN MILLIONS SIGN" + + "COMBINING CYRILLIC HUNDRED MILLIONS SIGNCOMBINING CYRILLIC THOUSAND MILL" + + "IONS SIGNSLAVONIC ASTERISKCOMBINING CYRILLIC LETTER UKRAINIAN IECOMBININ" + + "G CYRILLIC LETTER ICOMBINING CYRILLIC LETTER YICOMBINING CYRILLIC LETTER" + + " UCOMBINING CYRILLIC LETTER HARD SIGNCOMBINING CYRILLIC LETTER YERUCOMBI" + + "NING CYRILLIC LETTER SOFT SIGNCOMBINING CYRILLIC LETTER OMEGACOMBINING C" + + "YRILLIC KAVYKACOMBINING CYRILLIC PAYEROKCYRILLIC KAVYKACYRILLIC PAYEROKC" + + "YRILLIC CAPITAL LETTER DWECYRILLIC SMALL LETTER DWECYRILLIC CAPITAL LETT" + + "ER DZWECYRILLIC SMALL LETTER DZWECYRILLIC CAPITAL LETTER ZHWECYRILLIC SM" + + "ALL LETTER ZHWECYRILLIC CAPITAL LETTER CCHECYRILLIC SMALL LETTER CCHECYR" + + "ILLIC CAPITAL LETTER DZZECYRILLIC SMALL LETTER DZZECYRILLIC CAPITAL LETT" + + "ER TE WITH MIDDLE HOOKCYRILLIC SMALL LETTER TE WITH MIDDLE HOOKCYRILLIC " + + "CAPITAL LETTER TWECYRILLIC SMALL LETTER TWECYRILLIC CAPITAL LETTER TSWEC" + + "YRILLIC SMALL LETTER TSWECYRILLIC CAPITAL LETTER TSSECYRILLIC SMALL LETT" + + "ER TSSECYRILLIC CAPITAL LETTER TCHECYRILLIC SMALL LETTER TCHECYRILLIC CA" + + "PITAL LETTER HWECYRILLIC SMALL LETTER HWECYRILLIC CAPITAL LETTER SHWECYR" + + "ILLIC SMALL LETTER SHWECYRILLIC CAPITAL LETTER DOUBLE OCYRILLIC SMALL LE" + + "TTER DOUBLE OCYRILLIC CAPITAL LETTER CROSSED OCYRILLIC SMALL LETTER CROS" + + "SED OMODIFIER LETTER CYRILLIC HARD SIGNMODIFIER LETTER CYRILLIC SOFT SIG" + + "NCOMBINING CYRILLIC LETTER EFCOMBINING CYRILLIC LETTER IOTIFIED EBAMUM L" + + "ETTER ABAMUM LETTER KABAMUM LETTER UBAMUM LETTER KUBAMUM LETTER EEBAMUM " + + "LETTER REEBAMUM LETTER TAEBAMUM LETTER OBAMUM LETTER NYIBAMUM LETTER IBA" + + "MUM LETTER LABAMUM LETTER PABAMUM LETTER RIIBAMUM LETTER RIEEBAMUM LETTE" + + "R LEEEEBAMUM LETTER MEEEEBAMUM LETTER TAABAMUM LETTER NDAABAMUM LETTER N" + + "JAEMBAMUM LETTER MBAMUM LETTER SUUBAMUM LETTER MUBAMUM LETTER SHIIBAMUM " + + "LETTER SIBAMUM LETTER SHEUXBAMUM LETTER SEUXBAMUM LETTER KYEEBAMUM LETTE" + + "R KETBAMUM LETTER NUAEBAMUM LETTER NUBAMUM LETTER NJUAEBAMUM LETTER YOQB" + + "AMUM LETTER SHUBAMUM LETTER YUQBAMUM LETTER YABAMUM LETTER NSHABAMUM LET" + + "TER KEUXBAMUM LETTER PEUXBAMUM LETTER NJEEBAMUM LETTER NTEEBAMUM LETTER " + + "PUEBAMUM LETTER WUEBAMUM LETTER PEEBAMUM LETTER FEEBAMUM LETTER RUBAMUM " + + "LETTER LUBAMUM LETTER MIBAMUM LETTER NIBAMUM LETTER REUXBAMUM LETTER RAE" + + "BAMUM LETTER KENBAMUM LETTER NGKWAENBAMUM LETTER NGGABAMUM LETTER NGABAM" + + "UM LETTER SHOBAMUM LETTER PUAEBAMUM LETTER FUBAMUM LETTER FOMBAMUM LETTE" + + "R WABAMUM LETTER NABAMUM LETTER LIBAMUM LETTER PIBAMUM LETTER LOQBAMUM L" + + "ETTER KOBAMUM LETTER MBENBAMUM LETTER RENBAMUM LETTER MENBAMUM LETTER MA" + + "BAMUM LETTER TIBAMUM LETTER KIBAMUM LETTER MOBAMUM LETTER MBAABAMUM LETT" + + "ER TETBAMUM LETTER KPABAMUM LETTER TENBAMUM LETTER NTUUBAMUM LETTER SAMB" + + "ABAMUM LETTER FAAMAEBAMUM LETTER KOVUUBAMUM LETTER KOGHOMBAMUM COMBINING" + + " MARK KOQNDONBAMUM COMBINING MARK TUKWENTISBAMUM NJAEMLIBAMUM FULL STOPB" + + "AMUM COLONBAMUM COMMABAMUM SEMICOLONBAMUM QUESTION MARKMODIFIER LETTER C" + + "HINESE TONE YIN PINGMODIFIER LETTER CHINESE TONE YANG PINGMODIFIER LETTE" + + "R CHINESE TONE YIN SHANGMODIFIER LETTER CHINESE TONE YANG SHANGMODIFIER " + + "LETTER CHINESE TONE YIN QUMODIFIER LETTER CHINESE TONE YANG QUMODIFIER L" + + "ETTER CHINESE TONE YIN RUMODIFIER LETTER CHINESE TONE YANG RUMODIFIER LE" + + "TTER EXTRA-HIGH DOTTED TONE BARMODIFIER LETTER HIGH DOTTED TONE BARMODIF" + + "IER LETTER MID DOTTED TONE BARMODIFIER LETTER LOW DOTTED TONE BARMODIFIE" + + "R LETTER EXTRA-LOW DOTTED TONE BARMODIFIER LETTER EXTRA-HIGH DOTTED LEFT" + + "-STEM TONE BARMODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BARMODIFIER LET" + + "TER MID DOTTED LEFT-STEM TONE BARMODIFIER LETTER LOW DOTTED LEFT-STEM TO" + + "NE BARMODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BARMODIFIER LETTER" + + " EXTRA-HIGH LEFT-STEM TONE BARMODIFIER LETTER HIGH LEFT-STEM TONE BARMOD") + ("" + + "IFIER LETTER MID LEFT-STEM TONE BARMODIFIER LETTER LOW LEFT-STEM TONE BA" + + "RMODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BARMODIFIER LETTER DOT VERTICA" + + "L BARMODIFIER LETTER DOT SLASHMODIFIER LETTER DOT HORIZONTAL BARMODIFIER" + + " LETTER LOWER RIGHT CORNER ANGLEMODIFIER LETTER RAISED UP ARROWMODIFIER " + + "LETTER RAISED DOWN ARROWMODIFIER LETTER RAISED EXCLAMATION MARKMODIFIER " + + "LETTER RAISED INVERTED EXCLAMATION MARKMODIFIER LETTER LOW INVERTED EXCL" + + "AMATION MARKMODIFIER LETTER STRESS AND HIGH TONEMODIFIER LETTER STRESS A" + + "ND LOW TONELATIN CAPITAL LETTER EGYPTOLOGICAL ALEFLATIN SMALL LETTER EGY" + + "PTOLOGICAL ALEFLATIN CAPITAL LETTER EGYPTOLOGICAL AINLATIN SMALL LETTER " + + "EGYPTOLOGICAL AINLATIN CAPITAL LETTER HENGLATIN SMALL LETTER HENGLATIN C" + + "APITAL LETTER TZLATIN SMALL LETTER TZLATIN CAPITAL LETTER TRESILLOLATIN " + + "SMALL LETTER TRESILLOLATIN CAPITAL LETTER CUATRILLOLATIN SMALL LETTER CU" + + "ATRILLOLATIN CAPITAL LETTER CUATRILLO WITH COMMALATIN SMALL LETTER CUATR" + + "ILLO WITH COMMALATIN LETTER SMALL CAPITAL FLATIN LETTER SMALL CAPITAL SL" + + "ATIN CAPITAL LETTER AALATIN SMALL LETTER AALATIN CAPITAL LETTER AOLATIN " + + "SMALL LETTER AOLATIN CAPITAL LETTER AULATIN SMALL LETTER AULATIN CAPITAL" + + " LETTER AVLATIN SMALL LETTER AVLATIN CAPITAL LETTER AV WITH HORIZONTAL B" + + "ARLATIN SMALL LETTER AV WITH HORIZONTAL BARLATIN CAPITAL LETTER AYLATIN " + + "SMALL LETTER AYLATIN CAPITAL LETTER REVERSED C WITH DOTLATIN SMALL LETTE" + + "R REVERSED C WITH DOTLATIN CAPITAL LETTER K WITH STROKELATIN SMALL LETTE" + + "R K WITH STROKELATIN CAPITAL LETTER K WITH DIAGONAL STROKELATIN SMALL LE" + + "TTER K WITH DIAGONAL STROKELATIN CAPITAL LETTER K WITH STROKE AND DIAGON" + + "AL STROKELATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKELATIN CAPIT" + + "AL LETTER BROKEN LLATIN SMALL LETTER BROKEN LLATIN CAPITAL LETTER L WITH" + + " HIGH STROKELATIN SMALL LETTER L WITH HIGH STROKELATIN CAPITAL LETTER O " + + "WITH LONG STROKE OVERLAYLATIN SMALL LETTER O WITH LONG STROKE OVERLAYLAT" + + "IN CAPITAL LETTER O WITH LOOPLATIN SMALL LETTER O WITH LOOPLATIN CAPITAL" + + " LETTER OOLATIN SMALL LETTER OOLATIN CAPITAL LETTER P WITH STROKE THROUG" + + "H DESCENDERLATIN SMALL LETTER P WITH STROKE THROUGH DESCENDERLATIN CAPIT" + + "AL LETTER P WITH FLOURISHLATIN SMALL LETTER P WITH FLOURISHLATIN CAPITAL" + + " LETTER P WITH SQUIRREL TAILLATIN SMALL LETTER P WITH SQUIRREL TAILLATIN" + + " CAPITAL LETTER Q WITH STROKE THROUGH DESCENDERLATIN SMALL LETTER Q WITH" + + " STROKE THROUGH DESCENDERLATIN CAPITAL LETTER Q WITH DIAGONAL STROKELATI" + + "N SMALL LETTER Q WITH DIAGONAL STROKELATIN CAPITAL LETTER R ROTUNDALATIN" + + " SMALL LETTER R ROTUNDALATIN CAPITAL LETTER RUM ROTUNDALATIN SMALL LETTE" + + "R RUM ROTUNDALATIN CAPITAL LETTER V WITH DIAGONAL STROKELATIN SMALL LETT" + + "ER V WITH DIAGONAL STROKELATIN CAPITAL LETTER VYLATIN SMALL LETTER VYLAT" + + "IN CAPITAL LETTER VISIGOTHIC ZLATIN SMALL LETTER VISIGOTHIC ZLATIN CAPIT" + + "AL LETTER THORN WITH STROKELATIN SMALL LETTER THORN WITH STROKELATIN CAP" + + "ITAL LETTER THORN WITH STROKE THROUGH DESCENDERLATIN SMALL LETTER THORN " + + "WITH STROKE THROUGH DESCENDERLATIN CAPITAL LETTER VENDLATIN SMALL LETTER" + + " VENDLATIN CAPITAL LETTER ETLATIN SMALL LETTER ETLATIN CAPITAL LETTER IS" + + "LATIN SMALL LETTER ISLATIN CAPITAL LETTER CONLATIN SMALL LETTER CONMODIF" + + "IER LETTER USLATIN SMALL LETTER DUMLATIN SMALL LETTER LUMLATIN SMALL LET" + + "TER MUMLATIN SMALL LETTER NUMLATIN SMALL LETTER RUMLATIN LETTER SMALL CA" + + "PITAL RUMLATIN SMALL LETTER TUMLATIN SMALL LETTER UMLATIN CAPITAL LETTER" + + " INSULAR DLATIN SMALL LETTER INSULAR DLATIN CAPITAL LETTER INSULAR FLATI" + + "N SMALL LETTER INSULAR FLATIN CAPITAL LETTER INSULAR GLATIN CAPITAL LETT" + + "ER TURNED INSULAR GLATIN SMALL LETTER TURNED INSULAR GLATIN CAPITAL LETT" + + "ER TURNED LLATIN SMALL LETTER TURNED LLATIN CAPITAL LETTER INSULAR RLATI" + + "N SMALL LETTER INSULAR RLATIN CAPITAL LETTER INSULAR SLATIN SMALL LETTER" + + " INSULAR SLATIN CAPITAL LETTER INSULAR TLATIN SMALL LETTER INSULAR TMODI" + + "FIER LETTER LOW CIRCUMFLEX ACCENTMODIFIER LETTER COLONMODIFIER LETTER SH" + + "ORT EQUALS SIGNLATIN CAPITAL LETTER SALTILLOLATIN SMALL LETTER SALTILLOL" + + "ATIN CAPITAL LETTER TURNED HLATIN SMALL LETTER L WITH RETROFLEX HOOK AND" + + " BELTLATIN LETTER SINOLOGICAL DOTLATIN CAPITAL LETTER N WITH DESCENDERLA" + + "TIN SMALL LETTER N WITH DESCENDERLATIN CAPITAL LETTER C WITH BARLATIN SM" + + "ALL LETTER C WITH BARLATIN SMALL LETTER C WITH PALATAL HOOKLATIN SMALL L" + + "ETTER H WITH PALATAL HOOKLATIN CAPITAL LETTER B WITH FLOURISHLATIN SMALL" + + " LETTER B WITH FLOURISHLATIN CAPITAL LETTER F WITH STROKELATIN SMALL LET" + + "TER F WITH STROKELATIN CAPITAL LETTER VOLAPUK AELATIN SMALL LETTER VOLAP" + + "UK AELATIN CAPITAL LETTER VOLAPUK OELATIN SMALL LETTER VOLAPUK OELATIN C" + + "APITAL LETTER VOLAPUK UELATIN SMALL LETTER VOLAPUK UELATIN CAPITAL LETTE" + + "R G WITH OBLIQUE STROKELATIN SMALL LETTER G WITH OBLIQUE STROKELATIN CAP") + ("" + + "ITAL LETTER K WITH OBLIQUE STROKELATIN SMALL LETTER K WITH OBLIQUE STROK" + + "ELATIN CAPITAL LETTER N WITH OBLIQUE STROKELATIN SMALL LETTER N WITH OBL" + + "IQUE STROKELATIN CAPITAL LETTER R WITH OBLIQUE STROKELATIN SMALL LETTER " + + "R WITH OBLIQUE STROKELATIN CAPITAL LETTER S WITH OBLIQUE STROKELATIN SMA" + + "LL LETTER S WITH OBLIQUE STROKELATIN CAPITAL LETTER H WITH HOOKLATIN CAP" + + "ITAL LETTER REVERSED OPEN ELATIN CAPITAL LETTER SCRIPT GLATIN CAPITAL LE" + + "TTER L WITH BELTLATIN CAPITAL LETTER SMALL CAPITAL ILATIN CAPITAL LETTER" + + " TURNED KLATIN CAPITAL LETTER TURNED TLATIN CAPITAL LETTER J WITH CROSSE" + + "D-TAILLATIN CAPITAL LETTER CHILATIN CAPITAL LETTER BETALATIN SMALL LETTE" + + "R BETALATIN CAPITAL LETTER OMEGALATIN SMALL LETTER OMEGALATIN EPIGRAPHIC" + + " LETTER SIDEWAYS IMODIFIER LETTER CAPITAL H WITH STROKEMODIFIER LETTER S" + + "MALL LIGATURE OELATIN LETTER SMALL CAPITAL TURNED MLATIN EPIGRAPHIC LETT" + + "ER REVERSED FLATIN EPIGRAPHIC LETTER REVERSED PLATIN EPIGRAPHIC LETTER I" + + "NVERTED MLATIN EPIGRAPHIC LETTER I LONGALATIN EPIGRAPHIC LETTER ARCHAIC " + + "MSYLOTI NAGRI LETTER ASYLOTI NAGRI LETTER ISYLOTI NAGRI SIGN DVISVARASYL" + + "OTI NAGRI LETTER USYLOTI NAGRI LETTER ESYLOTI NAGRI LETTER OSYLOTI NAGRI" + + " SIGN HASANTASYLOTI NAGRI LETTER KOSYLOTI NAGRI LETTER KHOSYLOTI NAGRI L" + + "ETTER GOSYLOTI NAGRI LETTER GHOSYLOTI NAGRI SIGN ANUSVARASYLOTI NAGRI LE" + + "TTER COSYLOTI NAGRI LETTER CHOSYLOTI NAGRI LETTER JOSYLOTI NAGRI LETTER " + + "JHOSYLOTI NAGRI LETTER TTOSYLOTI NAGRI LETTER TTHOSYLOTI NAGRI LETTER DD" + + "OSYLOTI NAGRI LETTER DDHOSYLOTI NAGRI LETTER TOSYLOTI NAGRI LETTER THOSY" + + "LOTI NAGRI LETTER DOSYLOTI NAGRI LETTER DHOSYLOTI NAGRI LETTER NOSYLOTI " + + "NAGRI LETTER POSYLOTI NAGRI LETTER PHOSYLOTI NAGRI LETTER BOSYLOTI NAGRI" + + " LETTER BHOSYLOTI NAGRI LETTER MOSYLOTI NAGRI LETTER ROSYLOTI NAGRI LETT" + + "ER LOSYLOTI NAGRI LETTER RROSYLOTI NAGRI LETTER SOSYLOTI NAGRI LETTER HO" + + "SYLOTI NAGRI VOWEL SIGN ASYLOTI NAGRI VOWEL SIGN ISYLOTI NAGRI VOWEL SIG" + + "N USYLOTI NAGRI VOWEL SIGN ESYLOTI NAGRI VOWEL SIGN OOSYLOTI NAGRI POETR" + + "Y MARK-1SYLOTI NAGRI POETRY MARK-2SYLOTI NAGRI POETRY MARK-3SYLOTI NAGRI" + + " POETRY MARK-4NORTH INDIC FRACTION ONE QUARTERNORTH INDIC FRACTION ONE H" + + "ALFNORTH INDIC FRACTION THREE QUARTERSNORTH INDIC FRACTION ONE SIXTEENTH" + + "NORTH INDIC FRACTION ONE EIGHTHNORTH INDIC FRACTION THREE SIXTEENTHSNORT" + + "H INDIC QUARTER MARKNORTH INDIC PLACEHOLDER MARKNORTH INDIC RUPEE MARKNO" + + "RTH INDIC QUANTITY MARKPHAGS-PA LETTER KAPHAGS-PA LETTER KHAPHAGS-PA LET" + + "TER GAPHAGS-PA LETTER NGAPHAGS-PA LETTER CAPHAGS-PA LETTER CHAPHAGS-PA L" + + "ETTER JAPHAGS-PA LETTER NYAPHAGS-PA LETTER TAPHAGS-PA LETTER THAPHAGS-PA" + + " LETTER DAPHAGS-PA LETTER NAPHAGS-PA LETTER PAPHAGS-PA LETTER PHAPHAGS-P" + + "A LETTER BAPHAGS-PA LETTER MAPHAGS-PA LETTER TSAPHAGS-PA LETTER TSHAPHAG" + + "S-PA LETTER DZAPHAGS-PA LETTER WAPHAGS-PA LETTER ZHAPHAGS-PA LETTER ZAPH" + + "AGS-PA LETTER SMALL APHAGS-PA LETTER YAPHAGS-PA LETTER RAPHAGS-PA LETTER" + + " LAPHAGS-PA LETTER SHAPHAGS-PA LETTER SAPHAGS-PA LETTER HAPHAGS-PA LETTE" + + "R APHAGS-PA LETTER IPHAGS-PA LETTER UPHAGS-PA LETTER EPHAGS-PA LETTER OP" + + "HAGS-PA LETTER QAPHAGS-PA LETTER XAPHAGS-PA LETTER FAPHAGS-PA LETTER GGA" + + "PHAGS-PA LETTER EEPHAGS-PA SUBJOINED LETTER WAPHAGS-PA SUBJOINED LETTER " + + "YAPHAGS-PA LETTER TTAPHAGS-PA LETTER TTHAPHAGS-PA LETTER DDAPHAGS-PA LET" + + "TER NNAPHAGS-PA LETTER ALTERNATE YAPHAGS-PA LETTER VOICELESS SHAPHAGS-PA" + + " LETTER VOICED HAPHAGS-PA LETTER ASPIRATED FAPHAGS-PA SUBJOINED LETTER R" + + "APHAGS-PA SUPERFIXED LETTER RAPHAGS-PA LETTER CANDRABINDUPHAGS-PA SINGLE" + + " HEAD MARKPHAGS-PA DOUBLE HEAD MARKPHAGS-PA MARK SHADPHAGS-PA MARK DOUBL" + + "E SHADSAURASHTRA SIGN ANUSVARASAURASHTRA SIGN VISARGASAURASHTRA LETTER A" + + "SAURASHTRA LETTER AASAURASHTRA LETTER ISAURASHTRA LETTER IISAURASHTRA LE" + + "TTER USAURASHTRA LETTER UUSAURASHTRA LETTER VOCALIC RSAURASHTRA LETTER V" + + "OCALIC RRSAURASHTRA LETTER VOCALIC LSAURASHTRA LETTER VOCALIC LLSAURASHT" + + "RA LETTER ESAURASHTRA LETTER EESAURASHTRA LETTER AISAURASHTRA LETTER OSA" + + "URASHTRA LETTER OOSAURASHTRA LETTER AUSAURASHTRA LETTER KASAURASHTRA LET" + + "TER KHASAURASHTRA LETTER GASAURASHTRA LETTER GHASAURASHTRA LETTER NGASAU" + + "RASHTRA LETTER CASAURASHTRA LETTER CHASAURASHTRA LETTER JASAURASHTRA LET" + + "TER JHASAURASHTRA LETTER NYASAURASHTRA LETTER TTASAURASHTRA LETTER TTHAS" + + "AURASHTRA LETTER DDASAURASHTRA LETTER DDHASAURASHTRA LETTER NNASAURASHTR" + + "A LETTER TASAURASHTRA LETTER THASAURASHTRA LETTER DASAURASHTRA LETTER DH" + + "ASAURASHTRA LETTER NASAURASHTRA LETTER PASAURASHTRA LETTER PHASAURASHTRA" + + " LETTER BASAURASHTRA LETTER BHASAURASHTRA LETTER MASAURASHTRA LETTER YAS" + + "AURASHTRA LETTER RASAURASHTRA LETTER LASAURASHTRA LETTER VASAURASHTRA LE" + + "TTER SHASAURASHTRA LETTER SSASAURASHTRA LETTER SASAURASHTRA LETTER HASAU" + + "RASHTRA LETTER LLASAURASHTRA CONSONANT SIGN HAARUSAURASHTRA VOWEL SIGN A") + ("" + + "ASAURASHTRA VOWEL SIGN ISAURASHTRA VOWEL SIGN IISAURASHTRA VOWEL SIGN US" + + "AURASHTRA VOWEL SIGN UUSAURASHTRA VOWEL SIGN VOCALIC RSAURASHTRA VOWEL S" + + "IGN VOCALIC RRSAURASHTRA VOWEL SIGN VOCALIC LSAURASHTRA VOWEL SIGN VOCAL" + + "IC LLSAURASHTRA VOWEL SIGN ESAURASHTRA VOWEL SIGN EESAURASHTRA VOWEL SIG" + + "N AISAURASHTRA VOWEL SIGN OSAURASHTRA VOWEL SIGN OOSAURASHTRA VOWEL SIGN" + + " AUSAURASHTRA SIGN VIRAMASAURASHTRA SIGN CANDRABINDUSAURASHTRA DANDASAUR" + + "ASHTRA DOUBLE DANDASAURASHTRA DIGIT ZEROSAURASHTRA DIGIT ONESAURASHTRA D" + + "IGIT TWOSAURASHTRA DIGIT THREESAURASHTRA DIGIT FOURSAURASHTRA DIGIT FIVE" + + "SAURASHTRA DIGIT SIXSAURASHTRA DIGIT SEVENSAURASHTRA DIGIT EIGHTSAURASHT" + + "RA DIGIT NINECOMBINING DEVANAGARI DIGIT ZEROCOMBINING DEVANAGARI DIGIT O" + + "NECOMBINING DEVANAGARI DIGIT TWOCOMBINING DEVANAGARI DIGIT THREECOMBININ" + + "G DEVANAGARI DIGIT FOURCOMBINING DEVANAGARI DIGIT FIVECOMBINING DEVANAGA" + + "RI DIGIT SIXCOMBINING DEVANAGARI DIGIT SEVENCOMBINING DEVANAGARI DIGIT E" + + "IGHTCOMBINING DEVANAGARI DIGIT NINECOMBINING DEVANAGARI LETTER ACOMBININ" + + "G DEVANAGARI LETTER UCOMBINING DEVANAGARI LETTER KACOMBINING DEVANAGARI " + + "LETTER NACOMBINING DEVANAGARI LETTER PACOMBINING DEVANAGARI LETTER RACOM" + + "BINING DEVANAGARI LETTER VICOMBINING DEVANAGARI SIGN AVAGRAHADEVANAGARI " + + "SIGN SPACING CANDRABINDUDEVANAGARI SIGN CANDRABINDU VIRAMADEVANAGARI SIG" + + "N DOUBLE CANDRABINDU VIRAMADEVANAGARI SIGN CANDRABINDU TWODEVANAGARI SIG" + + "N CANDRABINDU THREEDEVANAGARI SIGN CANDRABINDU AVAGRAHADEVANAGARI SIGN P" + + "USHPIKADEVANAGARI GAP FILLERDEVANAGARI CARETDEVANAGARI HEADSTROKEDEVANAG" + + "ARI SIGN SIDDHAMDEVANAGARI JAIN OMKAYAH LI DIGIT ZEROKAYAH LI DIGIT ONEK" + + "AYAH LI DIGIT TWOKAYAH LI DIGIT THREEKAYAH LI DIGIT FOURKAYAH LI DIGIT F" + + "IVEKAYAH LI DIGIT SIXKAYAH LI DIGIT SEVENKAYAH LI DIGIT EIGHTKAYAH LI DI" + + "GIT NINEKAYAH LI LETTER KAKAYAH LI LETTER KHAKAYAH LI LETTER GAKAYAH LI " + + "LETTER NGAKAYAH LI LETTER SAKAYAH LI LETTER SHAKAYAH LI LETTER ZAKAYAH L" + + "I LETTER NYAKAYAH LI LETTER TAKAYAH LI LETTER HTAKAYAH LI LETTER NAKAYAH" + + " LI LETTER PAKAYAH LI LETTER PHAKAYAH LI LETTER MAKAYAH LI LETTER DAKAYA" + + "H LI LETTER BAKAYAH LI LETTER RAKAYAH LI LETTER YAKAYAH LI LETTER LAKAYA" + + "H LI LETTER WAKAYAH LI LETTER THAKAYAH LI LETTER HAKAYAH LI LETTER VAKAY" + + "AH LI LETTER CAKAYAH LI LETTER AKAYAH LI LETTER OEKAYAH LI LETTER IKAYAH" + + " LI LETTER OOKAYAH LI VOWEL UEKAYAH LI VOWEL EKAYAH LI VOWEL UKAYAH LI V" + + "OWEL EEKAYAH LI VOWEL OKAYAH LI TONE PLOPHUKAYAH LI TONE CALYAKAYAH LI T" + + "ONE CALYA PLOPHUKAYAH LI SIGN CWIKAYAH LI SIGN SHYAREJANG LETTER KAREJAN" + + "G LETTER GAREJANG LETTER NGAREJANG LETTER TAREJANG LETTER DAREJANG LETTE" + + "R NAREJANG LETTER PAREJANG LETTER BAREJANG LETTER MAREJANG LETTER CAREJA" + + "NG LETTER JAREJANG LETTER NYAREJANG LETTER SAREJANG LETTER RAREJANG LETT" + + "ER LAREJANG LETTER YAREJANG LETTER WAREJANG LETTER HAREJANG LETTER MBARE" + + "JANG LETTER NGGAREJANG LETTER NDAREJANG LETTER NYJAREJANG LETTER AREJANG" + + " VOWEL SIGN IREJANG VOWEL SIGN UREJANG VOWEL SIGN EREJANG VOWEL SIGN AIR" + + "EJANG VOWEL SIGN OREJANG VOWEL SIGN AUREJANG VOWEL SIGN EUREJANG VOWEL S" + + "IGN EAREJANG CONSONANT SIGN NGREJANG CONSONANT SIGN NREJANG CONSONANT SI" + + "GN RREJANG CONSONANT SIGN HREJANG VIRAMAREJANG SECTION MARKHANGUL CHOSEO" + + "NG TIKEUT-MIEUMHANGUL CHOSEONG TIKEUT-PIEUPHANGUL CHOSEONG TIKEUT-SIOSHA" + + "NGUL CHOSEONG TIKEUT-CIEUCHANGUL CHOSEONG RIEUL-KIYEOKHANGUL CHOSEONG RI" + + "EUL-SSANGKIYEOKHANGUL CHOSEONG RIEUL-TIKEUTHANGUL CHOSEONG RIEUL-SSANGTI" + + "KEUTHANGUL CHOSEONG RIEUL-MIEUMHANGUL CHOSEONG RIEUL-PIEUPHANGUL CHOSEON" + + "G RIEUL-SSANGPIEUPHANGUL CHOSEONG RIEUL-KAPYEOUNPIEUPHANGUL CHOSEONG RIE" + + "UL-SIOSHANGUL CHOSEONG RIEUL-CIEUCHANGUL CHOSEONG RIEUL-KHIEUKHHANGUL CH" + + "OSEONG MIEUM-KIYEOKHANGUL CHOSEONG MIEUM-TIKEUTHANGUL CHOSEONG MIEUM-SIO" + + "SHANGUL CHOSEONG PIEUP-SIOS-THIEUTHHANGUL CHOSEONG PIEUP-KHIEUKHHANGUL C" + + "HOSEONG PIEUP-HIEUHHANGUL CHOSEONG SSANGSIOS-PIEUPHANGUL CHOSEONG IEUNG-" + + "RIEULHANGUL CHOSEONG IEUNG-HIEUHHANGUL CHOSEONG SSANGCIEUC-HIEUHHANGUL C" + + "HOSEONG SSANGTHIEUTHHANGUL CHOSEONG PHIEUPH-HIEUHHANGUL CHOSEONG HIEUH-S" + + "IOSHANGUL CHOSEONG SSANGYEORINHIEUHJAVANESE SIGN PANYANGGAJAVANESE SIGN " + + "CECAKJAVANESE SIGN LAYARJAVANESE SIGN WIGNYANJAVANESE LETTER AJAVANESE L" + + "ETTER I KAWIJAVANESE LETTER IJAVANESE LETTER IIJAVANESE LETTER UJAVANESE" + + " LETTER PA CEREKJAVANESE LETTER NGA LELETJAVANESE LETTER NGA LELET RASWA" + + "DIJAVANESE LETTER EJAVANESE LETTER AIJAVANESE LETTER OJAVANESE LETTER KA" + + "JAVANESE LETTER KA SASAKJAVANESE LETTER KA MURDAJAVANESE LETTER GAJAVANE" + + "SE LETTER GA MURDAJAVANESE LETTER NGAJAVANESE LETTER CAJAVANESE LETTER C" + + "A MURDAJAVANESE LETTER JAJAVANESE LETTER NYA MURDAJAVANESE LETTER JA MAH" + + "APRANAJAVANESE LETTER NYAJAVANESE LETTER TTAJAVANESE LETTER TTA MAHAPRAN" + + "AJAVANESE LETTER DDAJAVANESE LETTER DDA MAHAPRANAJAVANESE LETTER NA MURD") + ("" + + "AJAVANESE LETTER TAJAVANESE LETTER TA MURDAJAVANESE LETTER DAJAVANESE LE" + + "TTER DA MAHAPRANAJAVANESE LETTER NAJAVANESE LETTER PAJAVANESE LETTER PA " + + "MURDAJAVANESE LETTER BAJAVANESE LETTER BA MURDAJAVANESE LETTER MAJAVANES" + + "E LETTER YAJAVANESE LETTER RAJAVANESE LETTER RA AGUNGJAVANESE LETTER LAJ" + + "AVANESE LETTER WAJAVANESE LETTER SA MURDAJAVANESE LETTER SA MAHAPRANAJAV" + + "ANESE LETTER SAJAVANESE LETTER HAJAVANESE SIGN CECAK TELUJAVANESE VOWEL " + + "SIGN TARUNGJAVANESE VOWEL SIGN TOLONGJAVANESE VOWEL SIGN WULUJAVANESE VO" + + "WEL SIGN WULU MELIKJAVANESE VOWEL SIGN SUKUJAVANESE VOWEL SIGN SUKU MEND" + + "UTJAVANESE VOWEL SIGN TALINGJAVANESE VOWEL SIGN DIRGA MUREJAVANESE VOWEL" + + " SIGN PEPETJAVANESE CONSONANT SIGN KERETJAVANESE CONSONANT SIGN PENGKALJ" + + "AVANESE CONSONANT SIGN CAKRAJAVANESE PANGKONJAVANESE LEFT RERENGGANJAVAN" + + "ESE RIGHT RERENGGANJAVANESE PADA ANDAPJAVANESE PADA MADYAJAVANESE PADA L" + + "UHURJAVANESE PADA WINDUJAVANESE PADA PANGKATJAVANESE PADA LINGSAJAVANESE" + + " PADA LUNGSIJAVANESE PADA ADEGJAVANESE PADA ADEG ADEGJAVANESE PADA PISEL" + + "EHJAVANESE TURNED PADA PISELEHJAVANESE PANGRANGKEPJAVANESE DIGIT ZEROJAV" + + "ANESE DIGIT ONEJAVANESE DIGIT TWOJAVANESE DIGIT THREEJAVANESE DIGIT FOUR" + + "JAVANESE DIGIT FIVEJAVANESE DIGIT SIXJAVANESE DIGIT SEVENJAVANESE DIGIT " + + "EIGHTJAVANESE DIGIT NINEJAVANESE PADA TIRTA TUMETESJAVANESE PADA ISEN-IS" + + "ENMYANMAR LETTER SHAN GHAMYANMAR LETTER SHAN CHAMYANMAR LETTER SHAN JHAM" + + "YANMAR LETTER SHAN NNAMYANMAR LETTER SHAN BHAMYANMAR SIGN SHAN SAWMYANMA" + + "R MODIFIER LETTER SHAN REDUPLICATIONMYANMAR LETTER TAI LAING NYAMYANMAR " + + "LETTER TAI LAING FAMYANMAR LETTER TAI LAING GAMYANMAR LETTER TAI LAING G" + + "HAMYANMAR LETTER TAI LAING JAMYANMAR LETTER TAI LAING JHAMYANMAR LETTER " + + "TAI LAING DDAMYANMAR LETTER TAI LAING DDHAMYANMAR LETTER TAI LAING NNAMY" + + "ANMAR TAI LAING DIGIT ZEROMYANMAR TAI LAING DIGIT ONEMYANMAR TAI LAING D" + + "IGIT TWOMYANMAR TAI LAING DIGIT THREEMYANMAR TAI LAING DIGIT FOURMYANMAR" + + " TAI LAING DIGIT FIVEMYANMAR TAI LAING DIGIT SIXMYANMAR TAI LAING DIGIT " + + "SEVENMYANMAR TAI LAING DIGIT EIGHTMYANMAR TAI LAING DIGIT NINEMYANMAR LE" + + "TTER TAI LAING LLAMYANMAR LETTER TAI LAING DAMYANMAR LETTER TAI LAING DH" + + "AMYANMAR LETTER TAI LAING BAMYANMAR LETTER TAI LAING BHACHAM LETTER ACHA" + + "M LETTER ICHAM LETTER UCHAM LETTER ECHAM LETTER AICHAM LETTER OCHAM LETT" + + "ER KACHAM LETTER KHACHAM LETTER GACHAM LETTER GHACHAM LETTER NGUECHAM LE" + + "TTER NGACHAM LETTER CHACHAM LETTER CHHACHAM LETTER JACHAM LETTER JHACHAM" + + " LETTER NHUECHAM LETTER NHACHAM LETTER NHJACHAM LETTER TACHAM LETTER THA" + + "CHAM LETTER DACHAM LETTER DHACHAM LETTER NUECHAM LETTER NACHAM LETTER DD" + + "ACHAM LETTER PACHAM LETTER PPACHAM LETTER PHACHAM LETTER BACHAM LETTER B" + + "HACHAM LETTER MUECHAM LETTER MACHAM LETTER BBACHAM LETTER YACHAM LETTER " + + "RACHAM LETTER LACHAM LETTER VACHAM LETTER SSACHAM LETTER SACHAM LETTER H" + + "ACHAM VOWEL SIGN AACHAM VOWEL SIGN ICHAM VOWEL SIGN IICHAM VOWEL SIGN EI" + + "CHAM VOWEL SIGN UCHAM VOWEL SIGN OECHAM VOWEL SIGN OCHAM VOWEL SIGN AICH" + + "AM VOWEL SIGN AUCHAM VOWEL SIGN UECHAM CONSONANT SIGN YACHAM CONSONANT S" + + "IGN RACHAM CONSONANT SIGN LACHAM CONSONANT SIGN WACHAM LETTER FINAL KCHA" + + "M LETTER FINAL GCHAM LETTER FINAL NGCHAM CONSONANT SIGN FINAL NGCHAM LET" + + "TER FINAL CHCHAM LETTER FINAL TCHAM LETTER FINAL NCHAM LETTER FINAL PCHA" + + "M LETTER FINAL YCHAM LETTER FINAL RCHAM LETTER FINAL LCHAM LETTER FINAL " + + "SSCHAM CONSONANT SIGN FINAL MCHAM CONSONANT SIGN FINAL HCHAM DIGIT ZEROC" + + "HAM DIGIT ONECHAM DIGIT TWOCHAM DIGIT THREECHAM DIGIT FOURCHAM DIGIT FIV" + + "ECHAM DIGIT SIXCHAM DIGIT SEVENCHAM DIGIT EIGHTCHAM DIGIT NINECHAM PUNCT" + + "UATION SPIRALCHAM PUNCTUATION DANDACHAM PUNCTUATION DOUBLE DANDACHAM PUN" + + "CTUATION TRIPLE DANDAMYANMAR LETTER KHAMTI GAMYANMAR LETTER KHAMTI CAMYA" + + "NMAR LETTER KHAMTI CHAMYANMAR LETTER KHAMTI JAMYANMAR LETTER KHAMTI JHAM" + + "YANMAR LETTER KHAMTI NYAMYANMAR LETTER KHAMTI TTAMYANMAR LETTER KHAMTI T" + + "THAMYANMAR LETTER KHAMTI DDAMYANMAR LETTER KHAMTI DDHAMYANMAR LETTER KHA" + + "MTI DHAMYANMAR LETTER KHAMTI NAMYANMAR LETTER KHAMTI SAMYANMAR LETTER KH" + + "AMTI HAMYANMAR LETTER KHAMTI HHAMYANMAR LETTER KHAMTI FAMYANMAR MODIFIER" + + " LETTER KHAMTI REDUPLICATIONMYANMAR LETTER KHAMTI XAMYANMAR LETTER KHAMT" + + "I ZAMYANMAR LETTER KHAMTI RAMYANMAR LOGOGRAM KHAMTI OAYMYANMAR LOGOGRAM " + + "KHAMTI QNMYANMAR LOGOGRAM KHAMTI HMMYANMAR SYMBOL AITON EXCLAMATIONMYANM" + + "AR SYMBOL AITON ONEMYANMAR SYMBOL AITON TWOMYANMAR LETTER AITON RAMYANMA" + + "R SIGN PAO KAREN TONEMYANMAR SIGN TAI LAING TONE-2MYANMAR SIGN TAI LAING" + + " TONE-5MYANMAR LETTER SHWE PALAUNG CHAMYANMAR LETTER SHWE PALAUNG SHATAI" + + " VIET LETTER LOW KOTAI VIET LETTER HIGH KOTAI VIET LETTER LOW KHOTAI VIE" + + "T LETTER HIGH KHOTAI VIET LETTER LOW KHHOTAI VIET LETTER HIGH KHHOTAI VI" + + "ET LETTER LOW GOTAI VIET LETTER HIGH GOTAI VIET LETTER LOW NGOTAI VIET L") + ("" + + "ETTER HIGH NGOTAI VIET LETTER LOW COTAI VIET LETTER HIGH COTAI VIET LETT" + + "ER LOW CHOTAI VIET LETTER HIGH CHOTAI VIET LETTER LOW SOTAI VIET LETTER " + + "HIGH SOTAI VIET LETTER LOW NYOTAI VIET LETTER HIGH NYOTAI VIET LETTER LO" + + "W DOTAI VIET LETTER HIGH DOTAI VIET LETTER LOW TOTAI VIET LETTER HIGH TO" + + "TAI VIET LETTER LOW THOTAI VIET LETTER HIGH THOTAI VIET LETTER LOW NOTAI" + + " VIET LETTER HIGH NOTAI VIET LETTER LOW BOTAI VIET LETTER HIGH BOTAI VIE" + + "T LETTER LOW POTAI VIET LETTER HIGH POTAI VIET LETTER LOW PHOTAI VIET LE" + + "TTER HIGH PHOTAI VIET LETTER LOW FOTAI VIET LETTER HIGH FOTAI VIET LETTE" + + "R LOW MOTAI VIET LETTER HIGH MOTAI VIET LETTER LOW YOTAI VIET LETTER HIG" + + "H YOTAI VIET LETTER LOW ROTAI VIET LETTER HIGH ROTAI VIET LETTER LOW LOT" + + "AI VIET LETTER HIGH LOTAI VIET LETTER LOW VOTAI VIET LETTER HIGH VOTAI V" + + "IET LETTER LOW HOTAI VIET LETTER HIGH HOTAI VIET LETTER LOW OTAI VIET LE" + + "TTER HIGH OTAI VIET MAI KANGTAI VIET VOWEL AATAI VIET VOWEL ITAI VIET VO" + + "WEL UETAI VIET VOWEL UTAI VIET VOWEL ETAI VIET VOWEL OTAI VIET MAI KHITT" + + "AI VIET VOWEL IATAI VIET VOWEL UEATAI VIET VOWEL UATAI VIET VOWEL AUETAI" + + " VIET VOWEL AYTAI VIET VOWEL ANTAI VIET VOWEL AMTAI VIET TONE MAI EKTAI " + + "VIET TONE MAI NUENGTAI VIET TONE MAI THOTAI VIET TONE MAI SONGTAI VIET S" + + "YMBOL KONTAI VIET SYMBOL NUENGTAI VIET SYMBOL SAMTAI VIET SYMBOL HO HOIT" + + "AI VIET SYMBOL KOI KOIMEETEI MAYEK LETTER EMEETEI MAYEK LETTER OMEETEI M" + + "AYEK LETTER CHAMEETEI MAYEK LETTER NYAMEETEI MAYEK LETTER TTAMEETEI MAYE" + + "K LETTER TTHAMEETEI MAYEK LETTER DDAMEETEI MAYEK LETTER DDHAMEETEI MAYEK" + + " LETTER NNAMEETEI MAYEK LETTER SHAMEETEI MAYEK LETTER SSAMEETEI MAYEK VO" + + "WEL SIGN IIMEETEI MAYEK VOWEL SIGN UUMEETEI MAYEK VOWEL SIGN AAIMEETEI M" + + "AYEK VOWEL SIGN AUMEETEI MAYEK VOWEL SIGN AAUMEETEI MAYEK CHEIKHANMEETEI" + + " MAYEK AHANG KHUDAMMEETEI MAYEK ANJIMEETEI MAYEK SYLLABLE REPETITION MAR" + + "KMEETEI MAYEK WORD REPETITION MARKMEETEI MAYEK VOWEL SIGN VISARGAMEETEI " + + "MAYEK VIRAMAETHIOPIC SYLLABLE TTHUETHIOPIC SYLLABLE TTHIETHIOPIC SYLLABL" + + "E TTHAAETHIOPIC SYLLABLE TTHEEETHIOPIC SYLLABLE TTHEETHIOPIC SYLLABLE TT" + + "HOETHIOPIC SYLLABLE DDHUETHIOPIC SYLLABLE DDHIETHIOPIC SYLLABLE DDHAAETH" + + "IOPIC SYLLABLE DDHEEETHIOPIC SYLLABLE DDHEETHIOPIC SYLLABLE DDHOETHIOPIC" + + " SYLLABLE DZUETHIOPIC SYLLABLE DZIETHIOPIC SYLLABLE DZAAETHIOPIC SYLLABL" + + "E DZEEETHIOPIC SYLLABLE DZEETHIOPIC SYLLABLE DZOETHIOPIC SYLLABLE CCHHAE" + + "THIOPIC SYLLABLE CCHHUETHIOPIC SYLLABLE CCHHIETHIOPIC SYLLABLE CCHHAAETH" + + "IOPIC SYLLABLE CCHHEEETHIOPIC SYLLABLE CCHHEETHIOPIC SYLLABLE CCHHOETHIO" + + "PIC SYLLABLE BBAETHIOPIC SYLLABLE BBUETHIOPIC SYLLABLE BBIETHIOPIC SYLLA" + + "BLE BBAAETHIOPIC SYLLABLE BBEEETHIOPIC SYLLABLE BBEETHIOPIC SYLLABLE BBO" + + "LATIN SMALL LETTER BARRED ALPHALATIN SMALL LETTER A REVERSED-SCHWALATIN " + + "SMALL LETTER BLACKLETTER ELATIN SMALL LETTER BARRED ELATIN SMALL LETTER " + + "E WITH FLOURISHLATIN SMALL LETTER LENIS FLATIN SMALL LETTER SCRIPT G WIT" + + "H CROSSED-TAILLATIN SMALL LETTER L WITH INVERTED LAZY SLATIN SMALL LETTE" + + "R L WITH DOUBLE MIDDLE TILDELATIN SMALL LETTER L WITH MIDDLE RINGLATIN S" + + "MALL LETTER M WITH CROSSED-TAILLATIN SMALL LETTER N WITH CROSSED-TAILLAT" + + "IN SMALL LETTER ENG WITH CROSSED-TAILLATIN SMALL LETTER BLACKLETTER OLAT" + + "IN SMALL LETTER BLACKLETTER O WITH STROKELATIN SMALL LETTER OPEN O WITH " + + "STROKELATIN SMALL LETTER INVERTED OELATIN SMALL LETTER TURNED OE WITH ST" + + "ROKELATIN SMALL LETTER TURNED OE WITH HORIZONTAL STROKELATIN SMALL LETTE" + + "R TURNED O OPEN-OLATIN SMALL LETTER TURNED O OPEN-O WITH STROKELATIN SMA" + + "LL LETTER STIRRUP RLATIN LETTER SMALL CAPITAL R WITH RIGHT LEGLATIN SMAL" + + "L LETTER R WITHOUT HANDLELATIN SMALL LETTER DOUBLE RLATIN SMALL LETTER R" + + " WITH CROSSED-TAILLATIN SMALL LETTER DOUBLE R WITH CROSSED-TAILLATIN SMA" + + "LL LETTER SCRIPT RLATIN SMALL LETTER SCRIPT R WITH RINGLATIN SMALL LETTE" + + "R BASELINE ESHLATIN SMALL LETTER U WITH SHORT RIGHT LEGLATIN SMALL LETTE" + + "R U BAR WITH SHORT RIGHT LEGLATIN SMALL LETTER UILATIN SMALL LETTER TURN" + + "ED UILATIN SMALL LETTER U WITH LEFT HOOKLATIN SMALL LETTER CHILATIN SMAL" + + "L LETTER CHI WITH LOW RIGHT RINGLATIN SMALL LETTER CHI WITH LOW LEFT SER" + + "IFLATIN SMALL LETTER X WITH LOW RIGHT RINGLATIN SMALL LETTER X WITH LONG" + + " LEFT LEGLATIN SMALL LETTER X WITH LONG LEFT LEG AND LOW RIGHT RINGLATIN" + + " SMALL LETTER X WITH LONG LEFT LEG WITH SERIFLATIN SMALL LETTER Y WITH S" + + "HORT RIGHT LEGMODIFIER BREVE WITH INVERTED BREVEMODIFIER LETTER SMALL HE" + + "NGMODIFIER LETTER SMALL L WITH INVERTED LAZY SMODIFIER LETTER SMALL L WI" + + "TH MIDDLE TILDEMODIFIER LETTER SMALL U WITH LEFT HOOKLATIN SMALL LETTER " + + "SAKHA YATLATIN SMALL LETTER IOTIFIED ELATIN SMALL LETTER OPEN OELATIN SM" + + "ALL LETTER UOLATIN SMALL LETTER INVERTED ALPHAGREEK LETTER SMALL CAPITAL" + + " OMEGACHEROKEE SMALL LETTER ACHEROKEE SMALL LETTER ECHEROKEE SMALL LETTE") + ("" + + "R ICHEROKEE SMALL LETTER OCHEROKEE SMALL LETTER UCHEROKEE SMALL LETTER V" + + "CHEROKEE SMALL LETTER GACHEROKEE SMALL LETTER KACHEROKEE SMALL LETTER GE" + + "CHEROKEE SMALL LETTER GICHEROKEE SMALL LETTER GOCHEROKEE SMALL LETTER GU" + + "CHEROKEE SMALL LETTER GVCHEROKEE SMALL LETTER HACHEROKEE SMALL LETTER HE" + + "CHEROKEE SMALL LETTER HICHEROKEE SMALL LETTER HOCHEROKEE SMALL LETTER HU" + + "CHEROKEE SMALL LETTER HVCHEROKEE SMALL LETTER LACHEROKEE SMALL LETTER LE" + + "CHEROKEE SMALL LETTER LICHEROKEE SMALL LETTER LOCHEROKEE SMALL LETTER LU" + + "CHEROKEE SMALL LETTER LVCHEROKEE SMALL LETTER MACHEROKEE SMALL LETTER ME" + + "CHEROKEE SMALL LETTER MICHEROKEE SMALL LETTER MOCHEROKEE SMALL LETTER MU" + + "CHEROKEE SMALL LETTER NACHEROKEE SMALL LETTER HNACHEROKEE SMALL LETTER N" + + "AHCHEROKEE SMALL LETTER NECHEROKEE SMALL LETTER NICHEROKEE SMALL LETTER " + + "NOCHEROKEE SMALL LETTER NUCHEROKEE SMALL LETTER NVCHEROKEE SMALL LETTER " + + "QUACHEROKEE SMALL LETTER QUECHEROKEE SMALL LETTER QUICHEROKEE SMALL LETT" + + "ER QUOCHEROKEE SMALL LETTER QUUCHEROKEE SMALL LETTER QUVCHEROKEE SMALL L" + + "ETTER SACHEROKEE SMALL LETTER SCHEROKEE SMALL LETTER SECHEROKEE SMALL LE" + + "TTER SICHEROKEE SMALL LETTER SOCHEROKEE SMALL LETTER SUCHEROKEE SMALL LE" + + "TTER SVCHEROKEE SMALL LETTER DACHEROKEE SMALL LETTER TACHEROKEE SMALL LE" + + "TTER DECHEROKEE SMALL LETTER TECHEROKEE SMALL LETTER DICHEROKEE SMALL LE" + + "TTER TICHEROKEE SMALL LETTER DOCHEROKEE SMALL LETTER DUCHEROKEE SMALL LE" + + "TTER DVCHEROKEE SMALL LETTER DLACHEROKEE SMALL LETTER TLACHEROKEE SMALL " + + "LETTER TLECHEROKEE SMALL LETTER TLICHEROKEE SMALL LETTER TLOCHEROKEE SMA" + + "LL LETTER TLUCHEROKEE SMALL LETTER TLVCHEROKEE SMALL LETTER TSACHEROKEE " + + "SMALL LETTER TSECHEROKEE SMALL LETTER TSICHEROKEE SMALL LETTER TSOCHEROK" + + "EE SMALL LETTER TSUCHEROKEE SMALL LETTER TSVCHEROKEE SMALL LETTER WACHER" + + "OKEE SMALL LETTER WECHEROKEE SMALL LETTER WICHEROKEE SMALL LETTER WOCHER" + + "OKEE SMALL LETTER WUCHEROKEE SMALL LETTER WVCHEROKEE SMALL LETTER YAMEET" + + "EI MAYEK LETTER KOKMEETEI MAYEK LETTER SAMMEETEI MAYEK LETTER LAIMEETEI " + + "MAYEK LETTER MITMEETEI MAYEK LETTER PAMEETEI MAYEK LETTER NAMEETEI MAYEK" + + " LETTER CHILMEETEI MAYEK LETTER TILMEETEI MAYEK LETTER KHOUMEETEI MAYEK " + + "LETTER NGOUMEETEI MAYEK LETTER THOUMEETEI MAYEK LETTER WAIMEETEI MAYEK L" + + "ETTER YANGMEETEI MAYEK LETTER HUKMEETEI MAYEK LETTER UNMEETEI MAYEK LETT" + + "ER IMEETEI MAYEK LETTER PHAMMEETEI MAYEK LETTER ATIYAMEETEI MAYEK LETTER" + + " GOKMEETEI MAYEK LETTER JHAMMEETEI MAYEK LETTER RAIMEETEI MAYEK LETTER B" + + "AMEETEI MAYEK LETTER JILMEETEI MAYEK LETTER DILMEETEI MAYEK LETTER GHOUM" + + "EETEI MAYEK LETTER DHOUMEETEI MAYEK LETTER BHAMMEETEI MAYEK LETTER KOK L" + + "ONSUMMEETEI MAYEK LETTER LAI LONSUMMEETEI MAYEK LETTER MIT LONSUMMEETEI " + + "MAYEK LETTER PA LONSUMMEETEI MAYEK LETTER NA LONSUMMEETEI MAYEK LETTER T" + + "IL LONSUMMEETEI MAYEK LETTER NGOU LONSUMMEETEI MAYEK LETTER I LONSUMMEET" + + "EI MAYEK VOWEL SIGN ONAPMEETEI MAYEK VOWEL SIGN INAPMEETEI MAYEK VOWEL S" + + "IGN ANAPMEETEI MAYEK VOWEL SIGN YENAPMEETEI MAYEK VOWEL SIGN SOUNAPMEETE" + + "I MAYEK VOWEL SIGN UNAPMEETEI MAYEK VOWEL SIGN CHEINAPMEETEI MAYEK VOWEL" + + " SIGN NUNGMEETEI MAYEK CHEIKHEIMEETEI MAYEK LUM IYEKMEETEI MAYEK APUN IY" + + "EKMEETEI MAYEK DIGIT ZEROMEETEI MAYEK DIGIT ONEMEETEI MAYEK DIGIT TWOMEE" + + "TEI MAYEK DIGIT THREEMEETEI MAYEK DIGIT FOURMEETEI MAYEK DIGIT FIVEMEETE" + + "I MAYEK DIGIT SIXMEETEI MAYEK DIGIT SEVENMEETEI MAYEK DIGIT EIGHTMEETEI " + + "MAYEK DIGIT NINEHANGUL JUNGSEONG O-YEOHANGUL JUNGSEONG O-O-IHANGUL JUNGS" + + "EONG YO-AHANGUL JUNGSEONG YO-AEHANGUL JUNGSEONG YO-EOHANGUL JUNGSEONG U-" + + "YEOHANGUL JUNGSEONG U-I-IHANGUL JUNGSEONG YU-AEHANGUL JUNGSEONG YU-OHANG" + + "UL JUNGSEONG EU-AHANGUL JUNGSEONG EU-EOHANGUL JUNGSEONG EU-EHANGUL JUNGS" + + "EONG EU-OHANGUL JUNGSEONG I-YA-OHANGUL JUNGSEONG I-YAEHANGUL JUNGSEONG I" + + "-YEOHANGUL JUNGSEONG I-YEHANGUL JUNGSEONG I-O-IHANGUL JUNGSEONG I-YOHANG" + + "UL JUNGSEONG I-YUHANGUL JUNGSEONG I-IHANGUL JUNGSEONG ARAEA-AHANGUL JUNG" + + "SEONG ARAEA-EHANGUL JONGSEONG NIEUN-RIEULHANGUL JONGSEONG NIEUN-CHIEUCHH" + + "ANGUL JONGSEONG SSANGTIKEUTHANGUL JONGSEONG SSANGTIKEUT-PIEUPHANGUL JONG" + + "SEONG TIKEUT-PIEUPHANGUL JONGSEONG TIKEUT-SIOSHANGUL JONGSEONG TIKEUT-SI" + + "OS-KIYEOKHANGUL JONGSEONG TIKEUT-CIEUCHANGUL JONGSEONG TIKEUT-CHIEUCHHAN" + + "GUL JONGSEONG TIKEUT-THIEUTHHANGUL JONGSEONG RIEUL-SSANGKIYEOKHANGUL JON" + + "GSEONG RIEUL-KIYEOK-HIEUHHANGUL JONGSEONG SSANGRIEUL-KHIEUKHHANGUL JONGS" + + "EONG RIEUL-MIEUM-HIEUHHANGUL JONGSEONG RIEUL-PIEUP-TIKEUTHANGUL JONGSEON" + + "G RIEUL-PIEUP-PHIEUPHHANGUL JONGSEONG RIEUL-YESIEUNGHANGUL JONGSEONG RIE" + + "UL-YEORINHIEUH-HIEUHHANGUL JONGSEONG KAPYEOUNRIEULHANGUL JONGSEONG MIEUM" + + "-NIEUNHANGUL JONGSEONG MIEUM-SSANGNIEUNHANGUL JONGSEONG SSANGMIEUMHANGUL" + + " JONGSEONG MIEUM-PIEUP-SIOSHANGUL JONGSEONG MIEUM-CIEUCHANGUL JONGSEONG " + + "PIEUP-TIKEUTHANGUL JONGSEONG PIEUP-RIEUL-PHIEUPHHANGUL JONGSEONG PIEUP-M") + ("" + + "IEUMHANGUL JONGSEONG SSANGPIEUPHANGUL JONGSEONG PIEUP-SIOS-TIKEUTHANGUL " + + "JONGSEONG PIEUP-CIEUCHANGUL JONGSEONG PIEUP-CHIEUCHHANGUL JONGSEONG SIOS" + + "-MIEUMHANGUL JONGSEONG SIOS-KAPYEOUNPIEUPHANGUL JONGSEONG SSANGSIOS-KIYE" + + "OKHANGUL JONGSEONG SSANGSIOS-TIKEUTHANGUL JONGSEONG SIOS-PANSIOSHANGUL J" + + "ONGSEONG SIOS-CIEUCHANGUL JONGSEONG SIOS-CHIEUCHHANGUL JONGSEONG SIOS-TH" + + "IEUTHHANGUL JONGSEONG SIOS-HIEUHHANGUL JONGSEONG PANSIOS-PIEUPHANGUL JON" + + "GSEONG PANSIOS-KAPYEOUNPIEUPHANGUL JONGSEONG YESIEUNG-MIEUMHANGUL JONGSE" + + "ONG YESIEUNG-HIEUHHANGUL JONGSEONG CIEUC-PIEUPHANGUL JONGSEONG CIEUC-SSA" + + "NGPIEUPHANGUL JONGSEONG SSANGCIEUCHANGUL JONGSEONG PHIEUPH-SIOSHANGUL JO" + + "NGSEONG PHIEUPH-THIEUTHCJK COMPATIBILITY IDEOGRAPH-F900CJK COMPATIBILITY" + + " IDEOGRAPH-F901CJK COMPATIBILITY IDEOGRAPH-F902CJK COMPATIBILITY IDEOGRA" + + "PH-F903CJK COMPATIBILITY IDEOGRAPH-F904CJK COMPATIBILITY IDEOGRAPH-F905C" + + "JK COMPATIBILITY IDEOGRAPH-F906CJK COMPATIBILITY IDEOGRAPH-F907CJK COMPA" + + "TIBILITY IDEOGRAPH-F908CJK COMPATIBILITY IDEOGRAPH-F909CJK COMPATIBILITY" + + " IDEOGRAPH-F90ACJK COMPATIBILITY IDEOGRAPH-F90BCJK COMPATIBILITY IDEOGRA" + + "PH-F90CCJK COMPATIBILITY IDEOGRAPH-F90DCJK COMPATIBILITY IDEOGRAPH-F90EC" + + "JK COMPATIBILITY IDEOGRAPH-F90FCJK COMPATIBILITY IDEOGRAPH-F910CJK COMPA" + + "TIBILITY IDEOGRAPH-F911CJK COMPATIBILITY IDEOGRAPH-F912CJK COMPATIBILITY" + + " IDEOGRAPH-F913CJK COMPATIBILITY IDEOGRAPH-F914CJK COMPATIBILITY IDEOGRA" + + "PH-F915CJK COMPATIBILITY IDEOGRAPH-F916CJK COMPATIBILITY IDEOGRAPH-F917C" + + "JK COMPATIBILITY IDEOGRAPH-F918CJK COMPATIBILITY IDEOGRAPH-F919CJK COMPA" + + "TIBILITY IDEOGRAPH-F91ACJK COMPATIBILITY IDEOGRAPH-F91BCJK COMPATIBILITY" + + " IDEOGRAPH-F91CCJK COMPATIBILITY IDEOGRAPH-F91DCJK COMPATIBILITY IDEOGRA" + + "PH-F91ECJK COMPATIBILITY IDEOGRAPH-F91FCJK COMPATIBILITY IDEOGRAPH-F920C" + + "JK COMPATIBILITY IDEOGRAPH-F921CJK COMPATIBILITY IDEOGRAPH-F922CJK COMPA" + + "TIBILITY IDEOGRAPH-F923CJK COMPATIBILITY IDEOGRAPH-F924CJK COMPATIBILITY" + + " IDEOGRAPH-F925CJK COMPATIBILITY IDEOGRAPH-F926CJK COMPATIBILITY IDEOGRA" + + "PH-F927CJK COMPATIBILITY IDEOGRAPH-F928CJK COMPATIBILITY IDEOGRAPH-F929C" + + "JK COMPATIBILITY IDEOGRAPH-F92ACJK COMPATIBILITY IDEOGRAPH-F92BCJK COMPA" + + "TIBILITY IDEOGRAPH-F92CCJK COMPATIBILITY IDEOGRAPH-F92DCJK COMPATIBILITY" + + " IDEOGRAPH-F92ECJK COMPATIBILITY IDEOGRAPH-F92FCJK COMPATIBILITY IDEOGRA" + + "PH-F930CJK COMPATIBILITY IDEOGRAPH-F931CJK COMPATIBILITY IDEOGRAPH-F932C" + + "JK COMPATIBILITY IDEOGRAPH-F933CJK COMPATIBILITY IDEOGRAPH-F934CJK COMPA" + + "TIBILITY IDEOGRAPH-F935CJK COMPATIBILITY IDEOGRAPH-F936CJK COMPATIBILITY" + + " IDEOGRAPH-F937CJK COMPATIBILITY IDEOGRAPH-F938CJK COMPATIBILITY IDEOGRA" + + "PH-F939CJK COMPATIBILITY IDEOGRAPH-F93ACJK COMPATIBILITY IDEOGRAPH-F93BC" + + "JK COMPATIBILITY IDEOGRAPH-F93CCJK COMPATIBILITY IDEOGRAPH-F93DCJK COMPA" + + "TIBILITY IDEOGRAPH-F93ECJK COMPATIBILITY IDEOGRAPH-F93FCJK COMPATIBILITY" + + " IDEOGRAPH-F940CJK COMPATIBILITY IDEOGRAPH-F941CJK COMPATIBILITY IDEOGRA" + + "PH-F942CJK COMPATIBILITY IDEOGRAPH-F943CJK COMPATIBILITY IDEOGRAPH-F944C" + + "JK COMPATIBILITY IDEOGRAPH-F945CJK COMPATIBILITY IDEOGRAPH-F946CJK COMPA" + + "TIBILITY IDEOGRAPH-F947CJK COMPATIBILITY IDEOGRAPH-F948CJK COMPATIBILITY" + + " IDEOGRAPH-F949CJK COMPATIBILITY IDEOGRAPH-F94ACJK COMPATIBILITY IDEOGRA" + + "PH-F94BCJK COMPATIBILITY IDEOGRAPH-F94CCJK COMPATIBILITY IDEOGRAPH-F94DC" + + "JK COMPATIBILITY IDEOGRAPH-F94ECJK COMPATIBILITY IDEOGRAPH-F94FCJK COMPA" + + "TIBILITY IDEOGRAPH-F950CJK COMPATIBILITY IDEOGRAPH-F951CJK COMPATIBILITY" + + " IDEOGRAPH-F952CJK COMPATIBILITY IDEOGRAPH-F953CJK COMPATIBILITY IDEOGRA" + + "PH-F954CJK COMPATIBILITY IDEOGRAPH-F955CJK COMPATIBILITY IDEOGRAPH-F956C" + + "JK COMPATIBILITY IDEOGRAPH-F957CJK COMPATIBILITY IDEOGRAPH-F958CJK COMPA" + + "TIBILITY IDEOGRAPH-F959CJK COMPATIBILITY IDEOGRAPH-F95ACJK COMPATIBILITY" + + " IDEOGRAPH-F95BCJK COMPATIBILITY IDEOGRAPH-F95CCJK COMPATIBILITY IDEOGRA" + + "PH-F95DCJK COMPATIBILITY IDEOGRAPH-F95ECJK COMPATIBILITY IDEOGRAPH-F95FC" + + "JK COMPATIBILITY IDEOGRAPH-F960CJK COMPATIBILITY IDEOGRAPH-F961CJK COMPA" + + "TIBILITY IDEOGRAPH-F962CJK COMPATIBILITY IDEOGRAPH-F963CJK COMPATIBILITY" + + " IDEOGRAPH-F964CJK COMPATIBILITY IDEOGRAPH-F965CJK COMPATIBILITY IDEOGRA" + + "PH-F966CJK COMPATIBILITY IDEOGRAPH-F967CJK COMPATIBILITY IDEOGRAPH-F968C" + + "JK COMPATIBILITY IDEOGRAPH-F969CJK COMPATIBILITY IDEOGRAPH-F96ACJK COMPA" + + "TIBILITY IDEOGRAPH-F96BCJK COMPATIBILITY IDEOGRAPH-F96CCJK COMPATIBILITY" + + " IDEOGRAPH-F96DCJK COMPATIBILITY IDEOGRAPH-F96ECJK COMPATIBILITY IDEOGRA" + + "PH-F96FCJK COMPATIBILITY IDEOGRAPH-F970CJK COMPATIBILITY IDEOGRAPH-F971C" + + "JK COMPATIBILITY IDEOGRAPH-F972CJK COMPATIBILITY IDEOGRAPH-F973CJK COMPA" + + "TIBILITY IDEOGRAPH-F974CJK COMPATIBILITY IDEOGRAPH-F975CJK COMPATIBILITY" + + " IDEOGRAPH-F976CJK COMPATIBILITY IDEOGRAPH-F977CJK COMPATIBILITY IDEOGRA" + + "PH-F978CJK COMPATIBILITY IDEOGRAPH-F979CJK COMPATIBILITY IDEOGRAPH-F97AC") + ("" + + "JK COMPATIBILITY IDEOGRAPH-F97BCJK COMPATIBILITY IDEOGRAPH-F97CCJK COMPA" + + "TIBILITY IDEOGRAPH-F97DCJK COMPATIBILITY IDEOGRAPH-F97ECJK COMPATIBILITY" + + " IDEOGRAPH-F97FCJK COMPATIBILITY IDEOGRAPH-F980CJK COMPATIBILITY IDEOGRA" + + "PH-F981CJK COMPATIBILITY IDEOGRAPH-F982CJK COMPATIBILITY IDEOGRAPH-F983C" + + "JK COMPATIBILITY IDEOGRAPH-F984CJK COMPATIBILITY IDEOGRAPH-F985CJK COMPA" + + "TIBILITY IDEOGRAPH-F986CJK COMPATIBILITY IDEOGRAPH-F987CJK COMPATIBILITY" + + " IDEOGRAPH-F988CJK COMPATIBILITY IDEOGRAPH-F989CJK COMPATIBILITY IDEOGRA" + + "PH-F98ACJK COMPATIBILITY IDEOGRAPH-F98BCJK COMPATIBILITY IDEOGRAPH-F98CC" + + "JK COMPATIBILITY IDEOGRAPH-F98DCJK COMPATIBILITY IDEOGRAPH-F98ECJK COMPA" + + "TIBILITY IDEOGRAPH-F98FCJK COMPATIBILITY IDEOGRAPH-F990CJK COMPATIBILITY" + + " IDEOGRAPH-F991CJK COMPATIBILITY IDEOGRAPH-F992CJK COMPATIBILITY IDEOGRA" + + "PH-F993CJK COMPATIBILITY IDEOGRAPH-F994CJK COMPATIBILITY IDEOGRAPH-F995C" + + "JK COMPATIBILITY IDEOGRAPH-F996CJK COMPATIBILITY IDEOGRAPH-F997CJK COMPA" + + "TIBILITY IDEOGRAPH-F998CJK COMPATIBILITY IDEOGRAPH-F999CJK COMPATIBILITY" + + " IDEOGRAPH-F99ACJK COMPATIBILITY IDEOGRAPH-F99BCJK COMPATIBILITY IDEOGRA" + + "PH-F99CCJK COMPATIBILITY IDEOGRAPH-F99DCJK COMPATIBILITY IDEOGRAPH-F99EC" + + "JK COMPATIBILITY IDEOGRAPH-F99FCJK COMPATIBILITY IDEOGRAPH-F9A0CJK COMPA" + + "TIBILITY IDEOGRAPH-F9A1CJK COMPATIBILITY IDEOGRAPH-F9A2CJK COMPATIBILITY" + + " IDEOGRAPH-F9A3CJK COMPATIBILITY IDEOGRAPH-F9A4CJK COMPATIBILITY IDEOGRA" + + "PH-F9A5CJK COMPATIBILITY IDEOGRAPH-F9A6CJK COMPATIBILITY IDEOGRAPH-F9A7C" + + "JK COMPATIBILITY IDEOGRAPH-F9A8CJK COMPATIBILITY IDEOGRAPH-F9A9CJK COMPA" + + "TIBILITY IDEOGRAPH-F9AACJK COMPATIBILITY IDEOGRAPH-F9ABCJK COMPATIBILITY" + + " IDEOGRAPH-F9ACCJK COMPATIBILITY IDEOGRAPH-F9ADCJK COMPATIBILITY IDEOGRA" + + "PH-F9AECJK COMPATIBILITY IDEOGRAPH-F9AFCJK COMPATIBILITY IDEOGRAPH-F9B0C" + + "JK COMPATIBILITY IDEOGRAPH-F9B1CJK COMPATIBILITY IDEOGRAPH-F9B2CJK COMPA" + + "TIBILITY IDEOGRAPH-F9B3CJK COMPATIBILITY IDEOGRAPH-F9B4CJK COMPATIBILITY" + + " IDEOGRAPH-F9B5CJK COMPATIBILITY IDEOGRAPH-F9B6CJK COMPATIBILITY IDEOGRA" + + "PH-F9B7CJK COMPATIBILITY IDEOGRAPH-F9B8CJK COMPATIBILITY IDEOGRAPH-F9B9C" + + "JK COMPATIBILITY IDEOGRAPH-F9BACJK COMPATIBILITY IDEOGRAPH-F9BBCJK COMPA" + + "TIBILITY IDEOGRAPH-F9BCCJK COMPATIBILITY IDEOGRAPH-F9BDCJK COMPATIBILITY" + + " IDEOGRAPH-F9BECJK COMPATIBILITY IDEOGRAPH-F9BFCJK COMPATIBILITY IDEOGRA" + + "PH-F9C0CJK COMPATIBILITY IDEOGRAPH-F9C1CJK COMPATIBILITY IDEOGRAPH-F9C2C" + + "JK COMPATIBILITY IDEOGRAPH-F9C3CJK COMPATIBILITY IDEOGRAPH-F9C4CJK COMPA" + + "TIBILITY IDEOGRAPH-F9C5CJK COMPATIBILITY IDEOGRAPH-F9C6CJK COMPATIBILITY" + + " IDEOGRAPH-F9C7CJK COMPATIBILITY IDEOGRAPH-F9C8CJK COMPATIBILITY IDEOGRA" + + "PH-F9C9CJK COMPATIBILITY IDEOGRAPH-F9CACJK COMPATIBILITY IDEOGRAPH-F9CBC" + + "JK COMPATIBILITY IDEOGRAPH-F9CCCJK COMPATIBILITY IDEOGRAPH-F9CDCJK COMPA" + + "TIBILITY IDEOGRAPH-F9CECJK COMPATIBILITY IDEOGRAPH-F9CFCJK COMPATIBILITY" + + " IDEOGRAPH-F9D0CJK COMPATIBILITY IDEOGRAPH-F9D1CJK COMPATIBILITY IDEOGRA" + + "PH-F9D2CJK COMPATIBILITY IDEOGRAPH-F9D3CJK COMPATIBILITY IDEOGRAPH-F9D4C" + + "JK COMPATIBILITY IDEOGRAPH-F9D5CJK COMPATIBILITY IDEOGRAPH-F9D6CJK COMPA" + + "TIBILITY IDEOGRAPH-F9D7CJK COMPATIBILITY IDEOGRAPH-F9D8CJK COMPATIBILITY" + + " IDEOGRAPH-F9D9CJK COMPATIBILITY IDEOGRAPH-F9DACJK COMPATIBILITY IDEOGRA" + + "PH-F9DBCJK COMPATIBILITY IDEOGRAPH-F9DCCJK COMPATIBILITY IDEOGRAPH-F9DDC" + + "JK COMPATIBILITY IDEOGRAPH-F9DECJK COMPATIBILITY IDEOGRAPH-F9DFCJK COMPA" + + "TIBILITY IDEOGRAPH-F9E0CJK COMPATIBILITY IDEOGRAPH-F9E1CJK COMPATIBILITY" + + " IDEOGRAPH-F9E2CJK COMPATIBILITY IDEOGRAPH-F9E3CJK COMPATIBILITY IDEOGRA" + + "PH-F9E4CJK COMPATIBILITY IDEOGRAPH-F9E5CJK COMPATIBILITY IDEOGRAPH-F9E6C" + + "JK COMPATIBILITY IDEOGRAPH-F9E7CJK COMPATIBILITY IDEOGRAPH-F9E8CJK COMPA" + + "TIBILITY IDEOGRAPH-F9E9CJK COMPATIBILITY IDEOGRAPH-F9EACJK COMPATIBILITY" + + " IDEOGRAPH-F9EBCJK COMPATIBILITY IDEOGRAPH-F9ECCJK COMPATIBILITY IDEOGRA" + + "PH-F9EDCJK COMPATIBILITY IDEOGRAPH-F9EECJK COMPATIBILITY IDEOGRAPH-F9EFC" + + "JK COMPATIBILITY IDEOGRAPH-F9F0CJK COMPATIBILITY IDEOGRAPH-F9F1CJK COMPA" + + "TIBILITY IDEOGRAPH-F9F2CJK COMPATIBILITY IDEOGRAPH-F9F3CJK COMPATIBILITY" + + " IDEOGRAPH-F9F4CJK COMPATIBILITY IDEOGRAPH-F9F5CJK COMPATIBILITY IDEOGRA" + + "PH-F9F6CJK COMPATIBILITY IDEOGRAPH-F9F7CJK COMPATIBILITY IDEOGRAPH-F9F8C" + + "JK COMPATIBILITY IDEOGRAPH-F9F9CJK COMPATIBILITY IDEOGRAPH-F9FACJK COMPA" + + "TIBILITY IDEOGRAPH-F9FBCJK COMPATIBILITY IDEOGRAPH-F9FCCJK COMPATIBILITY" + + " IDEOGRAPH-F9FDCJK COMPATIBILITY IDEOGRAPH-F9FECJK COMPATIBILITY IDEOGRA" + + "PH-F9FFCJK COMPATIBILITY IDEOGRAPH-FA00CJK COMPATIBILITY IDEOGRAPH-FA01C" + + "JK COMPATIBILITY IDEOGRAPH-FA02CJK COMPATIBILITY IDEOGRAPH-FA03CJK COMPA" + + "TIBILITY IDEOGRAPH-FA04CJK COMPATIBILITY IDEOGRAPH-FA05CJK COMPATIBILITY" + + " IDEOGRAPH-FA06CJK COMPATIBILITY IDEOGRAPH-FA07CJK COMPATIBILITY IDEOGRA" + + "PH-FA08CJK COMPATIBILITY IDEOGRAPH-FA09CJK COMPATIBILITY IDEOGRAPH-FA0AC") + ("" + + "JK COMPATIBILITY IDEOGRAPH-FA0BCJK COMPATIBILITY IDEOGRAPH-FA0CCJK COMPA" + + "TIBILITY IDEOGRAPH-FA0DCJK COMPATIBILITY IDEOGRAPH-FA0ECJK COMPATIBILITY" + + " IDEOGRAPH-FA0FCJK COMPATIBILITY IDEOGRAPH-FA10CJK COMPATIBILITY IDEOGRA" + + "PH-FA11CJK COMPATIBILITY IDEOGRAPH-FA12CJK COMPATIBILITY IDEOGRAPH-FA13C" + + "JK COMPATIBILITY IDEOGRAPH-FA14CJK COMPATIBILITY IDEOGRAPH-FA15CJK COMPA" + + "TIBILITY IDEOGRAPH-FA16CJK COMPATIBILITY IDEOGRAPH-FA17CJK COMPATIBILITY" + + " IDEOGRAPH-FA18CJK COMPATIBILITY IDEOGRAPH-FA19CJK COMPATIBILITY IDEOGRA" + + "PH-FA1ACJK COMPATIBILITY IDEOGRAPH-FA1BCJK COMPATIBILITY IDEOGRAPH-FA1CC" + + "JK COMPATIBILITY IDEOGRAPH-FA1DCJK COMPATIBILITY IDEOGRAPH-FA1ECJK COMPA" + + "TIBILITY IDEOGRAPH-FA1FCJK COMPATIBILITY IDEOGRAPH-FA20CJK COMPATIBILITY" + + " IDEOGRAPH-FA21CJK COMPATIBILITY IDEOGRAPH-FA22CJK COMPATIBILITY IDEOGRA" + + "PH-FA23CJK COMPATIBILITY IDEOGRAPH-FA24CJK COMPATIBILITY IDEOGRAPH-FA25C" + + "JK COMPATIBILITY IDEOGRAPH-FA26CJK COMPATIBILITY IDEOGRAPH-FA27CJK COMPA" + + "TIBILITY IDEOGRAPH-FA28CJK COMPATIBILITY IDEOGRAPH-FA29CJK COMPATIBILITY" + + " IDEOGRAPH-FA2ACJK COMPATIBILITY IDEOGRAPH-FA2BCJK COMPATIBILITY IDEOGRA" + + "PH-FA2CCJK COMPATIBILITY IDEOGRAPH-FA2DCJK COMPATIBILITY IDEOGRAPH-FA2EC" + + "JK COMPATIBILITY IDEOGRAPH-FA2FCJK COMPATIBILITY IDEOGRAPH-FA30CJK COMPA" + + "TIBILITY IDEOGRAPH-FA31CJK COMPATIBILITY IDEOGRAPH-FA32CJK COMPATIBILITY" + + " IDEOGRAPH-FA33CJK COMPATIBILITY IDEOGRAPH-FA34CJK COMPATIBILITY IDEOGRA" + + "PH-FA35CJK COMPATIBILITY IDEOGRAPH-FA36CJK COMPATIBILITY IDEOGRAPH-FA37C" + + "JK COMPATIBILITY IDEOGRAPH-FA38CJK COMPATIBILITY IDEOGRAPH-FA39CJK COMPA" + + "TIBILITY IDEOGRAPH-FA3ACJK COMPATIBILITY IDEOGRAPH-FA3BCJK COMPATIBILITY" + + " IDEOGRAPH-FA3CCJK COMPATIBILITY IDEOGRAPH-FA3DCJK COMPATIBILITY IDEOGRA" + + "PH-FA3ECJK COMPATIBILITY IDEOGRAPH-FA3FCJK COMPATIBILITY IDEOGRAPH-FA40C" + + "JK COMPATIBILITY IDEOGRAPH-FA41CJK COMPATIBILITY IDEOGRAPH-FA42CJK COMPA" + + "TIBILITY IDEOGRAPH-FA43CJK COMPATIBILITY IDEOGRAPH-FA44CJK COMPATIBILITY" + + " IDEOGRAPH-FA45CJK COMPATIBILITY IDEOGRAPH-FA46CJK COMPATIBILITY IDEOGRA" + + "PH-FA47CJK COMPATIBILITY IDEOGRAPH-FA48CJK COMPATIBILITY IDEOGRAPH-FA49C" + + "JK COMPATIBILITY IDEOGRAPH-FA4ACJK COMPATIBILITY IDEOGRAPH-FA4BCJK COMPA" + + "TIBILITY IDEOGRAPH-FA4CCJK COMPATIBILITY IDEOGRAPH-FA4DCJK COMPATIBILITY" + + " IDEOGRAPH-FA4ECJK COMPATIBILITY IDEOGRAPH-FA4FCJK COMPATIBILITY IDEOGRA" + + "PH-FA50CJK COMPATIBILITY IDEOGRAPH-FA51CJK COMPATIBILITY IDEOGRAPH-FA52C" + + "JK COMPATIBILITY IDEOGRAPH-FA53CJK COMPATIBILITY IDEOGRAPH-FA54CJK COMPA" + + "TIBILITY IDEOGRAPH-FA55CJK COMPATIBILITY IDEOGRAPH-FA56CJK COMPATIBILITY" + + " IDEOGRAPH-FA57CJK COMPATIBILITY IDEOGRAPH-FA58CJK COMPATIBILITY IDEOGRA" + + "PH-FA59CJK COMPATIBILITY IDEOGRAPH-FA5ACJK COMPATIBILITY IDEOGRAPH-FA5BC" + + "JK COMPATIBILITY IDEOGRAPH-FA5CCJK COMPATIBILITY IDEOGRAPH-FA5DCJK COMPA" + + "TIBILITY IDEOGRAPH-FA5ECJK COMPATIBILITY IDEOGRAPH-FA5FCJK COMPATIBILITY" + + " IDEOGRAPH-FA60CJK COMPATIBILITY IDEOGRAPH-FA61CJK COMPATIBILITY IDEOGRA" + + "PH-FA62CJK COMPATIBILITY IDEOGRAPH-FA63CJK COMPATIBILITY IDEOGRAPH-FA64C" + + "JK COMPATIBILITY IDEOGRAPH-FA65CJK COMPATIBILITY IDEOGRAPH-FA66CJK COMPA" + + "TIBILITY IDEOGRAPH-FA67CJK COMPATIBILITY IDEOGRAPH-FA68CJK COMPATIBILITY" + + " IDEOGRAPH-FA69CJK COMPATIBILITY IDEOGRAPH-FA6ACJK COMPATIBILITY IDEOGRA" + + "PH-FA6BCJK COMPATIBILITY IDEOGRAPH-FA6CCJK COMPATIBILITY IDEOGRAPH-FA6DC" + + "JK COMPATIBILITY IDEOGRAPH-FA70CJK COMPATIBILITY IDEOGRAPH-FA71CJK COMPA" + + "TIBILITY IDEOGRAPH-FA72CJK COMPATIBILITY IDEOGRAPH-FA73CJK COMPATIBILITY" + + " IDEOGRAPH-FA74CJK COMPATIBILITY IDEOGRAPH-FA75CJK COMPATIBILITY IDEOGRA" + + "PH-FA76CJK COMPATIBILITY IDEOGRAPH-FA77CJK COMPATIBILITY IDEOGRAPH-FA78C" + + "JK COMPATIBILITY IDEOGRAPH-FA79CJK COMPATIBILITY IDEOGRAPH-FA7ACJK COMPA" + + "TIBILITY IDEOGRAPH-FA7BCJK COMPATIBILITY IDEOGRAPH-FA7CCJK COMPATIBILITY" + + " IDEOGRAPH-FA7DCJK COMPATIBILITY IDEOGRAPH-FA7ECJK COMPATIBILITY IDEOGRA" + + "PH-FA7FCJK COMPATIBILITY IDEOGRAPH-FA80CJK COMPATIBILITY IDEOGRAPH-FA81C" + + "JK COMPATIBILITY IDEOGRAPH-FA82CJK COMPATIBILITY IDEOGRAPH-FA83CJK COMPA" + + "TIBILITY IDEOGRAPH-FA84CJK COMPATIBILITY IDEOGRAPH-FA85CJK COMPATIBILITY" + + " IDEOGRAPH-FA86CJK COMPATIBILITY IDEOGRAPH-FA87CJK COMPATIBILITY IDEOGRA" + + "PH-FA88CJK COMPATIBILITY IDEOGRAPH-FA89CJK COMPATIBILITY IDEOGRAPH-FA8AC" + + "JK COMPATIBILITY IDEOGRAPH-FA8BCJK COMPATIBILITY IDEOGRAPH-FA8CCJK COMPA" + + "TIBILITY IDEOGRAPH-FA8DCJK COMPATIBILITY IDEOGRAPH-FA8ECJK COMPATIBILITY" + + " IDEOGRAPH-FA8FCJK COMPATIBILITY IDEOGRAPH-FA90CJK COMPATIBILITY IDEOGRA" + + "PH-FA91CJK COMPATIBILITY IDEOGRAPH-FA92CJK COMPATIBILITY IDEOGRAPH-FA93C" + + "JK COMPATIBILITY IDEOGRAPH-FA94CJK COMPATIBILITY IDEOGRAPH-FA95CJK COMPA" + + "TIBILITY IDEOGRAPH-FA96CJK COMPATIBILITY IDEOGRAPH-FA97CJK COMPATIBILITY" + + " IDEOGRAPH-FA98CJK COMPATIBILITY IDEOGRAPH-FA99CJK COMPATIBILITY IDEOGRA" + + "PH-FA9ACJK COMPATIBILITY IDEOGRAPH-FA9BCJK COMPATIBILITY IDEOGRAPH-FA9CC") + ("" + + "JK COMPATIBILITY IDEOGRAPH-FA9DCJK COMPATIBILITY IDEOGRAPH-FA9ECJK COMPA" + + "TIBILITY IDEOGRAPH-FA9FCJK COMPATIBILITY IDEOGRAPH-FAA0CJK COMPATIBILITY" + + " IDEOGRAPH-FAA1CJK COMPATIBILITY IDEOGRAPH-FAA2CJK COMPATIBILITY IDEOGRA" + + "PH-FAA3CJK COMPATIBILITY IDEOGRAPH-FAA4CJK COMPATIBILITY IDEOGRAPH-FAA5C" + + "JK COMPATIBILITY IDEOGRAPH-FAA6CJK COMPATIBILITY IDEOGRAPH-FAA7CJK COMPA" + + "TIBILITY IDEOGRAPH-FAA8CJK COMPATIBILITY IDEOGRAPH-FAA9CJK COMPATIBILITY" + + " IDEOGRAPH-FAAACJK COMPATIBILITY IDEOGRAPH-FAABCJK COMPATIBILITY IDEOGRA" + + "PH-FAACCJK COMPATIBILITY IDEOGRAPH-FAADCJK COMPATIBILITY IDEOGRAPH-FAAEC" + + "JK COMPATIBILITY IDEOGRAPH-FAAFCJK COMPATIBILITY IDEOGRAPH-FAB0CJK COMPA" + + "TIBILITY IDEOGRAPH-FAB1CJK COMPATIBILITY IDEOGRAPH-FAB2CJK COMPATIBILITY" + + " IDEOGRAPH-FAB3CJK COMPATIBILITY IDEOGRAPH-FAB4CJK COMPATIBILITY IDEOGRA" + + "PH-FAB5CJK COMPATIBILITY IDEOGRAPH-FAB6CJK COMPATIBILITY IDEOGRAPH-FAB7C" + + "JK COMPATIBILITY IDEOGRAPH-FAB8CJK COMPATIBILITY IDEOGRAPH-FAB9CJK COMPA" + + "TIBILITY IDEOGRAPH-FABACJK COMPATIBILITY IDEOGRAPH-FABBCJK COMPATIBILITY" + + " IDEOGRAPH-FABCCJK COMPATIBILITY IDEOGRAPH-FABDCJK COMPATIBILITY IDEOGRA" + + "PH-FABECJK COMPATIBILITY IDEOGRAPH-FABFCJK COMPATIBILITY IDEOGRAPH-FAC0C" + + "JK COMPATIBILITY IDEOGRAPH-FAC1CJK COMPATIBILITY IDEOGRAPH-FAC2CJK COMPA" + + "TIBILITY IDEOGRAPH-FAC3CJK COMPATIBILITY IDEOGRAPH-FAC4CJK COMPATIBILITY" + + " IDEOGRAPH-FAC5CJK COMPATIBILITY IDEOGRAPH-FAC6CJK COMPATIBILITY IDEOGRA" + + "PH-FAC7CJK COMPATIBILITY IDEOGRAPH-FAC8CJK COMPATIBILITY IDEOGRAPH-FAC9C" + + "JK COMPATIBILITY IDEOGRAPH-FACACJK COMPATIBILITY IDEOGRAPH-FACBCJK COMPA" + + "TIBILITY IDEOGRAPH-FACCCJK COMPATIBILITY IDEOGRAPH-FACDCJK COMPATIBILITY" + + " IDEOGRAPH-FACECJK COMPATIBILITY IDEOGRAPH-FACFCJK COMPATIBILITY IDEOGRA" + + "PH-FAD0CJK COMPATIBILITY IDEOGRAPH-FAD1CJK COMPATIBILITY IDEOGRAPH-FAD2C" + + "JK COMPATIBILITY IDEOGRAPH-FAD3CJK COMPATIBILITY IDEOGRAPH-FAD4CJK COMPA" + + "TIBILITY IDEOGRAPH-FAD5CJK COMPATIBILITY IDEOGRAPH-FAD6CJK COMPATIBILITY" + + " IDEOGRAPH-FAD7CJK COMPATIBILITY IDEOGRAPH-FAD8CJK COMPATIBILITY IDEOGRA" + + "PH-FAD9LATIN SMALL LIGATURE FFLATIN SMALL LIGATURE FILATIN SMALL LIGATUR" + + "E FLLATIN SMALL LIGATURE FFILATIN SMALL LIGATURE FFLLATIN SMALL LIGATURE" + + " LONG S TLATIN SMALL LIGATURE STARMENIAN SMALL LIGATURE MEN NOWARMENIAN " + + "SMALL LIGATURE MEN ECHARMENIAN SMALL LIGATURE MEN INIARMENIAN SMALL LIGA" + + "TURE VEW NOWARMENIAN SMALL LIGATURE MEN XEHHEBREW LETTER YOD WITH HIRIQH" + + "EBREW POINT JUDEO-SPANISH VARIKAHEBREW LIGATURE YIDDISH YOD YOD PATAHHEB" + + "REW LETTER ALTERNATIVE AYINHEBREW LETTER WIDE ALEFHEBREW LETTER WIDE DAL" + + "ETHEBREW LETTER WIDE HEHEBREW LETTER WIDE KAFHEBREW LETTER WIDE LAMEDHEB" + + "REW LETTER WIDE FINAL MEMHEBREW LETTER WIDE RESHHEBREW LETTER WIDE TAVHE" + + "BREW LETTER ALTERNATIVE PLUS SIGNHEBREW LETTER SHIN WITH SHIN DOTHEBREW " + + "LETTER SHIN WITH SIN DOTHEBREW LETTER SHIN WITH DAGESH AND SHIN DOTHEBRE" + + "W LETTER SHIN WITH DAGESH AND SIN DOTHEBREW LETTER ALEF WITH PATAHHEBREW" + + " LETTER ALEF WITH QAMATSHEBREW LETTER ALEF WITH MAPIQHEBREW LETTER BET W" + + "ITH DAGESHHEBREW LETTER GIMEL WITH DAGESHHEBREW LETTER DALET WITH DAGESH" + + "HEBREW LETTER HE WITH MAPIQHEBREW LETTER VAV WITH DAGESHHEBREW LETTER ZA" + + "YIN WITH DAGESHHEBREW LETTER TET WITH DAGESHHEBREW LETTER YOD WITH DAGES" + + "HHEBREW LETTER FINAL KAF WITH DAGESHHEBREW LETTER KAF WITH DAGESHHEBREW " + + "LETTER LAMED WITH DAGESHHEBREW LETTER MEM WITH DAGESHHEBREW LETTER NUN W" + + "ITH DAGESHHEBREW LETTER SAMEKH WITH DAGESHHEBREW LETTER FINAL PE WITH DA" + + "GESHHEBREW LETTER PE WITH DAGESHHEBREW LETTER TSADI WITH DAGESHHEBREW LE" + + "TTER QOF WITH DAGESHHEBREW LETTER RESH WITH DAGESHHEBREW LETTER SHIN WIT" + + "H DAGESHHEBREW LETTER TAV WITH DAGESHHEBREW LETTER VAV WITH HOLAMHEBREW " + + "LETTER BET WITH RAFEHEBREW LETTER KAF WITH RAFEHEBREW LETTER PE WITH RAF" + + "EHEBREW LIGATURE ALEF LAMEDARABIC LETTER ALEF WASLA ISOLATED FORMARABIC " + + "LETTER ALEF WASLA FINAL FORMARABIC LETTER BEEH ISOLATED FORMARABIC LETTE" + + "R BEEH FINAL FORMARABIC LETTER BEEH INITIAL FORMARABIC LETTER BEEH MEDIA" + + "L FORMARABIC LETTER PEH ISOLATED FORMARABIC LETTER PEH FINAL FORMARABIC " + + "LETTER PEH INITIAL FORMARABIC LETTER PEH MEDIAL FORMARABIC LETTER BEHEH " + + "ISOLATED FORMARABIC LETTER BEHEH FINAL FORMARABIC LETTER BEHEH INITIAL F" + + "ORMARABIC LETTER BEHEH MEDIAL FORMARABIC LETTER TTEHEH ISOLATED FORMARAB" + + "IC LETTER TTEHEH FINAL FORMARABIC LETTER TTEHEH INITIAL FORMARABIC LETTE" + + "R TTEHEH MEDIAL FORMARABIC LETTER TEHEH ISOLATED FORMARABIC LETTER TEHEH" + + " FINAL FORMARABIC LETTER TEHEH INITIAL FORMARABIC LETTER TEHEH MEDIAL FO" + + "RMARABIC LETTER TTEH ISOLATED FORMARABIC LETTER TTEH FINAL FORMARABIC LE" + + "TTER TTEH INITIAL FORMARABIC LETTER TTEH MEDIAL FORMARABIC LETTER VEH IS" + + "OLATED FORMARABIC LETTER VEH FINAL FORMARABIC LETTER VEH INITIAL FORMARA" + + "BIC LETTER VEH MEDIAL FORMARABIC LETTER PEHEH ISOLATED FORMARABIC LETTER") + ("" + + " PEHEH FINAL FORMARABIC LETTER PEHEH INITIAL FORMARABIC LETTER PEHEH MED" + + "IAL FORMARABIC LETTER DYEH ISOLATED FORMARABIC LETTER DYEH FINAL FORMARA" + + "BIC LETTER DYEH INITIAL FORMARABIC LETTER DYEH MEDIAL FORMARABIC LETTER " + + "NYEH ISOLATED FORMARABIC LETTER NYEH FINAL FORMARABIC LETTER NYEH INITIA" + + "L FORMARABIC LETTER NYEH MEDIAL FORMARABIC LETTER TCHEH ISOLATED FORMARA" + + "BIC LETTER TCHEH FINAL FORMARABIC LETTER TCHEH INITIAL FORMARABIC LETTER" + + " TCHEH MEDIAL FORMARABIC LETTER TCHEHEH ISOLATED FORMARABIC LETTER TCHEH" + + "EH FINAL FORMARABIC LETTER TCHEHEH INITIAL FORMARABIC LETTER TCHEHEH MED" + + "IAL FORMARABIC LETTER DDAHAL ISOLATED FORMARABIC LETTER DDAHAL FINAL FOR" + + "MARABIC LETTER DAHAL ISOLATED FORMARABIC LETTER DAHAL FINAL FORMARABIC L" + + "ETTER DUL ISOLATED FORMARABIC LETTER DUL FINAL FORMARABIC LETTER DDAL IS" + + "OLATED FORMARABIC LETTER DDAL FINAL FORMARABIC LETTER JEH ISOLATED FORMA" + + "RABIC LETTER JEH FINAL FORMARABIC LETTER RREH ISOLATED FORMARABIC LETTER" + + " RREH FINAL FORMARABIC LETTER KEHEH ISOLATED FORMARABIC LETTER KEHEH FIN" + + "AL FORMARABIC LETTER KEHEH INITIAL FORMARABIC LETTER KEHEH MEDIAL FORMAR" + + "ABIC LETTER GAF ISOLATED FORMARABIC LETTER GAF FINAL FORMARABIC LETTER G" + + "AF INITIAL FORMARABIC LETTER GAF MEDIAL FORMARABIC LETTER GUEH ISOLATED " + + "FORMARABIC LETTER GUEH FINAL FORMARABIC LETTER GUEH INITIAL FORMARABIC L" + + "ETTER GUEH MEDIAL FORMARABIC LETTER NGOEH ISOLATED FORMARABIC LETTER NGO" + + "EH FINAL FORMARABIC LETTER NGOEH INITIAL FORMARABIC LETTER NGOEH MEDIAL " + + "FORMARABIC LETTER NOON GHUNNA ISOLATED FORMARABIC LETTER NOON GHUNNA FIN" + + "AL FORMARABIC LETTER RNOON ISOLATED FORMARABIC LETTER RNOON FINAL FORMAR" + + "ABIC LETTER RNOON INITIAL FORMARABIC LETTER RNOON MEDIAL FORMARABIC LETT" + + "ER HEH WITH YEH ABOVE ISOLATED FORMARABIC LETTER HEH WITH YEH ABOVE FINA" + + "L FORMARABIC LETTER HEH GOAL ISOLATED FORMARABIC LETTER HEH GOAL FINAL F" + + "ORMARABIC LETTER HEH GOAL INITIAL FORMARABIC LETTER HEH GOAL MEDIAL FORM" + + "ARABIC LETTER HEH DOACHASHMEE ISOLATED FORMARABIC LETTER HEH DOACHASHMEE" + + " FINAL FORMARABIC LETTER HEH DOACHASHMEE INITIAL FORMARABIC LETTER HEH D" + + "OACHASHMEE MEDIAL FORMARABIC LETTER YEH BARREE ISOLATED FORMARABIC LETTE" + + "R YEH BARREE FINAL FORMARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATE" + + "D FORMARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORMARABIC SYMBOL " + + "DOT ABOVEARABIC SYMBOL DOT BELOWARABIC SYMBOL TWO DOTS ABOVEARABIC SYMBO" + + "L TWO DOTS BELOWARABIC SYMBOL THREE DOTS ABOVEARABIC SYMBOL THREE DOTS B" + + "ELOWARABIC SYMBOL THREE DOTS POINTING DOWNWARDS ABOVEARABIC SYMBOL THREE" + + " DOTS POINTING DOWNWARDS BELOWARABIC SYMBOL FOUR DOTS ABOVEARABIC SYMBOL" + + " FOUR DOTS BELOWARABIC SYMBOL DOUBLE VERTICAL BAR BELOWARABIC SYMBOL TWO" + + " DOTS VERTICALLY ABOVEARABIC SYMBOL TWO DOTS VERTICALLY BELOWARABIC SYMB" + + "OL RINGARABIC SYMBOL SMALL TAH ABOVEARABIC SYMBOL SMALL TAH BELOWARABIC " + + "LETTER NG ISOLATED FORMARABIC LETTER NG FINAL FORMARABIC LETTER NG INITI" + + "AL FORMARABIC LETTER NG MEDIAL FORMARABIC LETTER U ISOLATED FORMARABIC L" + + "ETTER U FINAL FORMARABIC LETTER OE ISOLATED FORMARABIC LETTER OE FINAL F" + + "ORMARABIC LETTER YU ISOLATED FORMARABIC LETTER YU FINAL FORMARABIC LETTE" + + "R U WITH HAMZA ABOVE ISOLATED FORMARABIC LETTER VE ISOLATED FORMARABIC L" + + "ETTER VE FINAL FORMARABIC LETTER KIRGHIZ OE ISOLATED FORMARABIC LETTER K" + + "IRGHIZ OE FINAL FORMARABIC LETTER KIRGHIZ YU ISOLATED FORMARABIC LETTER " + + "KIRGHIZ YU FINAL FORMARABIC LETTER E ISOLATED FORMARABIC LETTER E FINAL " + + "FORMARABIC LETTER E INITIAL FORMARABIC LETTER E MEDIAL FORMARABIC LETTER" + + " UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORMARABIC LETTER UIGHUR KAZ" + + "AKH KIRGHIZ ALEF MAKSURA MEDIAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE" + + " WITH ALEF ISOLATED FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF F" + + "INAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORMARABI" + + "C LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORMARABIC LIGATURE YEH WI" + + "TH HAMZA ABOVE WITH WAW ISOLATED FORMARABIC LIGATURE YEH WITH HAMZA ABOV" + + "E WITH WAW FINAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATE" + + "D FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORMARABIC LIGAT" + + "URE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORMARABIC LIGATURE YEH WITH H" + + "AMZA ABOVE WITH OE FINAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH Y" + + "U ISOLATED FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORMAR" + + "ABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORMARABIC LIGATURE Y" + + "EH WITH HAMZA ABOVE WITH E FINAL FORMARABIC LIGATURE YEH WITH HAMZA ABOV" + + "E WITH E INITIAL FORMARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE" + + " WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH " + + "HAMZA ABOVE WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE UIGHUR KIRGHIZ Y" + + "EH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORMARABIC LETTER FARSI YE") + ("" + + "H ISOLATED FORMARABIC LETTER FARSI YEH FINAL FORMARABIC LETTER FARSI YEH" + + " INITIAL FORMARABIC LETTER FARSI YEH MEDIAL FORMARABIC LIGATURE YEH WITH" + + " HAMZA ABOVE WITH JEEM ISOLATED FORMARABIC LIGATURE YEH WITH HAMZA ABOVE" + + " WITH HAH ISOLATED FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM IS" + + "OLATED FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLAT" + + "ED FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORMARABIC" + + " LIGATURE BEH WITH JEEM ISOLATED FORMARABIC LIGATURE BEH WITH HAH ISOLAT" + + "ED FORMARABIC LIGATURE BEH WITH KHAH ISOLATED FORMARABIC LIGATURE BEH WI" + + "TH MEEM ISOLATED FORMARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM" + + "ARABIC LIGATURE BEH WITH YEH ISOLATED FORMARABIC LIGATURE TEH WITH JEEM " + + "ISOLATED FORMARABIC LIGATURE TEH WITH HAH ISOLATED FORMARABIC LIGATURE T" + + "EH WITH KHAH ISOLATED FORMARABIC LIGATURE TEH WITH MEEM ISOLATED FORMARA" + + "BIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE TEH WITH" + + " YEH ISOLATED FORMARABIC LIGATURE THEH WITH JEEM ISOLATED FORMARABIC LIG" + + "ATURE THEH WITH MEEM ISOLATED FORMARABIC LIGATURE THEH WITH ALEF MAKSURA" + + " ISOLATED FORMARABIC LIGATURE THEH WITH YEH ISOLATED FORMARABIC LIGATURE" + + " JEEM WITH HAH ISOLATED FORMARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM" + + "ARABIC LIGATURE HAH WITH JEEM ISOLATED FORMARABIC LIGATURE HAH WITH MEEM" + + " ISOLATED FORMARABIC LIGATURE KHAH WITH JEEM ISOLATED FORMARABIC LIGATUR" + + "E KHAH WITH HAH ISOLATED FORMARABIC LIGATURE KHAH WITH MEEM ISOLATED FOR" + + "MARABIC LIGATURE SEEN WITH JEEM ISOLATED FORMARABIC LIGATURE SEEN WITH H" + + "AH ISOLATED FORMARABIC LIGATURE SEEN WITH KHAH ISOLATED FORMARABIC LIGAT" + + "URE SEEN WITH MEEM ISOLATED FORMARABIC LIGATURE SAD WITH HAH ISOLATED FO" + + "RMARABIC LIGATURE SAD WITH MEEM ISOLATED FORMARABIC LIGATURE DAD WITH JE" + + "EM ISOLATED FORMARABIC LIGATURE DAD WITH HAH ISOLATED FORMARABIC LIGATUR" + + "E DAD WITH KHAH ISOLATED FORMARABIC LIGATURE DAD WITH MEEM ISOLATED FORM" + + "ARABIC LIGATURE TAH WITH HAH ISOLATED FORMARABIC LIGATURE TAH WITH MEEM " + + "ISOLATED FORMARABIC LIGATURE ZAH WITH MEEM ISOLATED FORMARABIC LIGATURE " + + "AIN WITH JEEM ISOLATED FORMARABIC LIGATURE AIN WITH MEEM ISOLATED FORMAR" + + "ABIC LIGATURE GHAIN WITH JEEM ISOLATED FORMARABIC LIGATURE GHAIN WITH ME" + + "EM ISOLATED FORMARABIC LIGATURE FEH WITH JEEM ISOLATED FORMARABIC LIGATU" + + "RE FEH WITH HAH ISOLATED FORMARABIC LIGATURE FEH WITH KHAH ISOLATED FORM" + + "ARABIC LIGATURE FEH WITH MEEM ISOLATED FORMARABIC LIGATURE FEH WITH ALEF" + + " MAKSURA ISOLATED FORMARABIC LIGATURE FEH WITH YEH ISOLATED FORMARABIC L" + + "IGATURE QAF WITH HAH ISOLATED FORMARABIC LIGATURE QAF WITH MEEM ISOLATED" + + " FORMARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE " + + "QAF WITH YEH ISOLATED FORMARABIC LIGATURE KAF WITH ALEF ISOLATED FORMARA" + + "BIC LIGATURE KAF WITH JEEM ISOLATED FORMARABIC LIGATURE KAF WITH HAH ISO" + + "LATED FORMARABIC LIGATURE KAF WITH KHAH ISOLATED FORMARABIC LIGATURE KAF" + + " WITH LAM ISOLATED FORMARABIC LIGATURE KAF WITH MEEM ISOLATED FORMARABIC" + + " LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE KAF WITH YE" + + "H ISOLATED FORMARABIC LIGATURE LAM WITH JEEM ISOLATED FORMARABIC LIGATUR" + + "E LAM WITH HAH ISOLATED FORMARABIC LIGATURE LAM WITH KHAH ISOLATED FORMA" + + "RABIC LIGATURE LAM WITH MEEM ISOLATED FORMARABIC LIGATURE LAM WITH ALEF " + + "MAKSURA ISOLATED FORMARABIC LIGATURE LAM WITH YEH ISOLATED FORMARABIC LI" + + "GATURE MEEM WITH JEEM ISOLATED FORMARABIC LIGATURE MEEM WITH HAH ISOLATE" + + "D FORMARABIC LIGATURE MEEM WITH KHAH ISOLATED FORMARABIC LIGATURE MEEM W" + + "ITH MEEM ISOLATED FORMARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FO" + + "RMARABIC LIGATURE MEEM WITH YEH ISOLATED FORMARABIC LIGATURE NOON WITH J" + + "EEM ISOLATED FORMARABIC LIGATURE NOON WITH HAH ISOLATED FORMARABIC LIGAT" + + "URE NOON WITH KHAH ISOLATED FORMARABIC LIGATURE NOON WITH MEEM ISOLATED " + + "FORMARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE " + + "NOON WITH YEH ISOLATED FORMARABIC LIGATURE HEH WITH JEEM ISOLATED FORMAR" + + "ABIC LIGATURE HEH WITH MEEM ISOLATED FORMARABIC LIGATURE HEH WITH ALEF M" + + "AKSURA ISOLATED FORMARABIC LIGATURE HEH WITH YEH ISOLATED FORMARABIC LIG" + + "ATURE YEH WITH JEEM ISOLATED FORMARABIC LIGATURE YEH WITH HAH ISOLATED F" + + "ORMARABIC LIGATURE YEH WITH KHAH ISOLATED FORMARABIC LIGATURE YEH WITH M" + + "EEM ISOLATED FORMARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORMARAB" + + "IC LIGATURE YEH WITH YEH ISOLATED FORMARABIC LIGATURE THAL WITH SUPERSCR" + + "IPT ALEF ISOLATED FORMARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED" + + " FORMARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORMARA" + + "BIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORMARABIC LIGATURE SHADDA WI" + + "TH KASRATAN ISOLATED FORMARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM" + + "ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORMARABIC LIGATURE SHADDA WI") + ("" + + "TH KASRA ISOLATED FORMARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLA" + + "TED FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORMARABIC L" + + "IGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORMARABIC LIGATURE YEH WIT" + + "H HAMZA ABOVE WITH MEEM FINAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE W" + + "ITH NOON FINAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSUR" + + "A FINAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORMARAB" + + "IC LIGATURE BEH WITH REH FINAL FORMARABIC LIGATURE BEH WITH ZAIN FINAL F" + + "ORMARABIC LIGATURE BEH WITH MEEM FINAL FORMARABIC LIGATURE BEH WITH NOON" + + " FINAL FORMARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORMARABIC LIGATU" + + "RE BEH WITH YEH FINAL FORMARABIC LIGATURE TEH WITH REH FINAL FORMARABIC " + + "LIGATURE TEH WITH ZAIN FINAL FORMARABIC LIGATURE TEH WITH MEEM FINAL FOR" + + "MARABIC LIGATURE TEH WITH NOON FINAL FORMARABIC LIGATURE TEH WITH ALEF M" + + "AKSURA FINAL FORMARABIC LIGATURE TEH WITH YEH FINAL FORMARABIC LIGATURE " + + "THEH WITH REH FINAL FORMARABIC LIGATURE THEH WITH ZAIN FINAL FORMARABIC " + + "LIGATURE THEH WITH MEEM FINAL FORMARABIC LIGATURE THEH WITH NOON FINAL F" + + "ORMARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE THEH" + + " WITH YEH FINAL FORMARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORMARAB" + + "IC LIGATURE FEH WITH YEH FINAL FORMARABIC LIGATURE QAF WITH ALEF MAKSURA" + + " FINAL FORMARABIC LIGATURE QAF WITH YEH FINAL FORMARABIC LIGATURE KAF WI" + + "TH ALEF FINAL FORMARABIC LIGATURE KAF WITH LAM FINAL FORMARABIC LIGATURE" + + " KAF WITH MEEM FINAL FORMARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FOR" + + "MARABIC LIGATURE KAF WITH YEH FINAL FORMARABIC LIGATURE LAM WITH MEEM FI" + + "NAL FORMARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE " + + "LAM WITH YEH FINAL FORMARABIC LIGATURE MEEM WITH ALEF FINAL FORMARABIC L" + + "IGATURE MEEM WITH MEEM FINAL FORMARABIC LIGATURE NOON WITH REH FINAL FOR" + + "MARABIC LIGATURE NOON WITH ZAIN FINAL FORMARABIC LIGATURE NOON WITH MEEM" + + " FINAL FORMARABIC LIGATURE NOON WITH NOON FINAL FORMARABIC LIGATURE NOON" + + " WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE NOON WITH YEH FINAL FORMARA" + + "BIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORMARABIC LIGATUR" + + "E YEH WITH REH FINAL FORMARABIC LIGATURE YEH WITH ZAIN FINAL FORMARABIC " + + "LIGATURE YEH WITH MEEM FINAL FORMARABIC LIGATURE YEH WITH NOON FINAL FOR" + + "MARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE YEH WIT" + + "H YEH FINAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL F" + + "ORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORMARABIC LIGA" + + "TURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORMARABIC LIGATURE YEH WITH" + + " HAMZA ABOVE WITH MEEM INITIAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE " + + "WITH HEH INITIAL FORMARABIC LIGATURE BEH WITH JEEM INITIAL FORMARABIC LI" + + "GATURE BEH WITH HAH INITIAL FORMARABIC LIGATURE BEH WITH KHAH INITIAL FO" + + "RMARABIC LIGATURE BEH WITH MEEM INITIAL FORMARABIC LIGATURE BEH WITH HEH" + + " INITIAL FORMARABIC LIGATURE TEH WITH JEEM INITIAL FORMARABIC LIGATURE T" + + "EH WITH HAH INITIAL FORMARABIC LIGATURE TEH WITH KHAH INITIAL FORMARABIC" + + " LIGATURE TEH WITH MEEM INITIAL FORMARABIC LIGATURE TEH WITH HEH INITIAL" + + " FORMARABIC LIGATURE THEH WITH MEEM INITIAL FORMARABIC LIGATURE JEEM WIT" + + "H HAH INITIAL FORMARABIC LIGATURE JEEM WITH MEEM INITIAL FORMARABIC LIGA" + + "TURE HAH WITH JEEM INITIAL FORMARABIC LIGATURE HAH WITH MEEM INITIAL FOR" + + "MARABIC LIGATURE KHAH WITH JEEM INITIAL FORMARABIC LIGATURE KHAH WITH ME" + + "EM INITIAL FORMARABIC LIGATURE SEEN WITH JEEM INITIAL FORMARABIC LIGATUR" + + "E SEEN WITH HAH INITIAL FORMARABIC LIGATURE SEEN WITH KHAH INITIAL FORMA" + + "RABIC LIGATURE SEEN WITH MEEM INITIAL FORMARABIC LIGATURE SAD WITH HAH I" + + "NITIAL FORMARABIC LIGATURE SAD WITH KHAH INITIAL FORMARABIC LIGATURE SAD" + + " WITH MEEM INITIAL FORMARABIC LIGATURE DAD WITH JEEM INITIAL FORMARABIC " + + "LIGATURE DAD WITH HAH INITIAL FORMARABIC LIGATURE DAD WITH KHAH INITIAL " + + "FORMARABIC LIGATURE DAD WITH MEEM INITIAL FORMARABIC LIGATURE TAH WITH H" + + "AH INITIAL FORMARABIC LIGATURE ZAH WITH MEEM INITIAL FORMARABIC LIGATURE" + + " AIN WITH JEEM INITIAL FORMARABIC LIGATURE AIN WITH MEEM INITIAL FORMARA" + + "BIC LIGATURE GHAIN WITH JEEM INITIAL FORMARABIC LIGATURE GHAIN WITH MEEM" + + " INITIAL FORMARABIC LIGATURE FEH WITH JEEM INITIAL FORMARABIC LIGATURE F" + + "EH WITH HAH INITIAL FORMARABIC LIGATURE FEH WITH KHAH INITIAL FORMARABIC" + + " LIGATURE FEH WITH MEEM INITIAL FORMARABIC LIGATURE QAF WITH HAH INITIAL" + + " FORMARABIC LIGATURE QAF WITH MEEM INITIAL FORMARABIC LIGATURE KAF WITH " + + "JEEM INITIAL FORMARABIC LIGATURE KAF WITH HAH INITIAL FORMARABIC LIGATUR" + + "E KAF WITH KHAH INITIAL FORMARABIC LIGATURE KAF WITH LAM INITIAL FORMARA" + + "BIC LIGATURE KAF WITH MEEM INITIAL FORMARABIC LIGATURE LAM WITH JEEM INI" + + "TIAL FORMARABIC LIGATURE LAM WITH HAH INITIAL FORMARABIC LIGATURE LAM WI") + ("" + + "TH KHAH INITIAL FORMARABIC LIGATURE LAM WITH MEEM INITIAL FORMARABIC LIG" + + "ATURE LAM WITH HEH INITIAL FORMARABIC LIGATURE MEEM WITH JEEM INITIAL FO" + + "RMARABIC LIGATURE MEEM WITH HAH INITIAL FORMARABIC LIGATURE MEEM WITH KH" + + "AH INITIAL FORMARABIC LIGATURE MEEM WITH MEEM INITIAL FORMARABIC LIGATUR" + + "E NOON WITH JEEM INITIAL FORMARABIC LIGATURE NOON WITH HAH INITIAL FORMA" + + "RABIC LIGATURE NOON WITH KHAH INITIAL FORMARABIC LIGATURE NOON WITH MEEM" + + " INITIAL FORMARABIC LIGATURE NOON WITH HEH INITIAL FORMARABIC LIGATURE H" + + "EH WITH JEEM INITIAL FORMARABIC LIGATURE HEH WITH MEEM INITIAL FORMARABI" + + "C LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORMARABIC LIGATURE YEH WIT" + + "H JEEM INITIAL FORMARABIC LIGATURE YEH WITH HAH INITIAL FORMARABIC LIGAT" + + "URE YEH WITH KHAH INITIAL FORMARABIC LIGATURE YEH WITH MEEM INITIAL FORM" + + "ARABIC LIGATURE YEH WITH HEH INITIAL FORMARABIC LIGATURE YEH WITH HAMZA " + + "ABOVE WITH MEEM MEDIAL FORMARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH" + + " MEDIAL FORMARABIC LIGATURE BEH WITH MEEM MEDIAL FORMARABIC LIGATURE BEH" + + " WITH HEH MEDIAL FORMARABIC LIGATURE TEH WITH MEEM MEDIAL FORMARABIC LIG" + + "ATURE TEH WITH HEH MEDIAL FORMARABIC LIGATURE THEH WITH MEEM MEDIAL FORM" + + "ARABIC LIGATURE THEH WITH HEH MEDIAL FORMARABIC LIGATURE SEEN WITH MEEM " + + "MEDIAL FORMARABIC LIGATURE SEEN WITH HEH MEDIAL FORMARABIC LIGATURE SHEE" + + "N WITH MEEM MEDIAL FORMARABIC LIGATURE SHEEN WITH HEH MEDIAL FORMARABIC " + + "LIGATURE KAF WITH LAM MEDIAL FORMARABIC LIGATURE KAF WITH MEEM MEDIAL FO" + + "RMARABIC LIGATURE LAM WITH MEEM MEDIAL FORMARABIC LIGATURE NOON WITH MEE" + + "M MEDIAL FORMARABIC LIGATURE NOON WITH HEH MEDIAL FORMARABIC LIGATURE YE" + + "H WITH MEEM MEDIAL FORMARABIC LIGATURE YEH WITH HEH MEDIAL FORMARABIC LI" + + "GATURE SHADDA WITH FATHA MEDIAL FORMARABIC LIGATURE SHADDA WITH DAMMA ME" + + "DIAL FORMARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORMARABIC LIGATURE TA" + + "H WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE TAH WITH YEH ISOLATED F" + + "ORMARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE AI" + + "N WITH YEH ISOLATED FORMARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED" + + " FORMARABIC LIGATURE GHAIN WITH YEH ISOLATED FORMARABIC LIGATURE SEEN WI" + + "TH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE SEEN WITH YEH ISOLATED FORM" + + "ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE SHE" + + "EN WITH YEH ISOLATED FORMARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED " + + "FORMARABIC LIGATURE HAH WITH YEH ISOLATED FORMARABIC LIGATURE JEEM WITH " + + "ALEF MAKSURA ISOLATED FORMARABIC LIGATURE JEEM WITH YEH ISOLATED FORMARA" + + "BIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORMARABIC LIGATURE KHAH WI" + + "TH YEH ISOLATED FORMARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORMA" + + "RABIC LIGATURE SAD WITH YEH ISOLATED FORMARABIC LIGATURE DAD WITH ALEF M" + + "AKSURA ISOLATED FORMARABIC LIGATURE DAD WITH YEH ISOLATED FORMARABIC LIG" + + "ATURE SHEEN WITH JEEM ISOLATED FORMARABIC LIGATURE SHEEN WITH HAH ISOLAT" + + "ED FORMARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORMARABIC LIGATURE SHEE" + + "N WITH MEEM ISOLATED FORMARABIC LIGATURE SHEEN WITH REH ISOLATED FORMARA" + + "BIC LIGATURE SEEN WITH REH ISOLATED FORMARABIC LIGATURE SAD WITH REH ISO" + + "LATED FORMARABIC LIGATURE DAD WITH REH ISOLATED FORMARABIC LIGATURE TAH " + + "WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE TAH WITH YEH FINAL FORMARABI" + + "C LIGATURE AIN WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE AIN WITH YEH " + + "FINAL FORMARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORMARABIC LIGAT" + + "URE GHAIN WITH YEH FINAL FORMARABIC LIGATURE SEEN WITH ALEF MAKSURA FINA" + + "L FORMARABIC LIGATURE SEEN WITH YEH FINAL FORMARABIC LIGATURE SHEEN WITH" + + " ALEF MAKSURA FINAL FORMARABIC LIGATURE SHEEN WITH YEH FINAL FORMARABIC " + + "LIGATURE HAH WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE HAH WITH YEH FI" + + "NAL FORMARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE" + + " JEEM WITH YEH FINAL FORMARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FO" + + "RMARABIC LIGATURE KHAH WITH YEH FINAL FORMARABIC LIGATURE SAD WITH ALEF " + + "MAKSURA FINAL FORMARABIC LIGATURE SAD WITH YEH FINAL FORMARABIC LIGATURE" + + " DAD WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE DAD WITH YEH FINAL FORM" + + "ARABIC LIGATURE SHEEN WITH JEEM FINAL FORMARABIC LIGATURE SHEEN WITH HAH" + + " FINAL FORMARABIC LIGATURE SHEEN WITH KHAH FINAL FORMARABIC LIGATURE SHE" + + "EN WITH MEEM FINAL FORMARABIC LIGATURE SHEEN WITH REH FINAL FORMARABIC L" + + "IGATURE SEEN WITH REH FINAL FORMARABIC LIGATURE SAD WITH REH FINAL FORMA" + + "RABIC LIGATURE DAD WITH REH FINAL FORMARABIC LIGATURE SHEEN WITH JEEM IN" + + "ITIAL FORMARABIC LIGATURE SHEEN WITH HAH INITIAL FORMARABIC LIGATURE SHE" + + "EN WITH KHAH INITIAL FORMARABIC LIGATURE SHEEN WITH MEEM INITIAL FORMARA" + + "BIC LIGATURE SEEN WITH HEH INITIAL FORMARABIC LIGATURE SHEEN WITH HEH IN" + + "ITIAL FORMARABIC LIGATURE TAH WITH MEEM INITIAL FORMARABIC LIGATURE SEEN") + ("" + + " WITH JEEM MEDIAL FORMARABIC LIGATURE SEEN WITH HAH MEDIAL FORMARABIC LI" + + "GATURE SEEN WITH KHAH MEDIAL FORMARABIC LIGATURE SHEEN WITH JEEM MEDIAL " + + "FORMARABIC LIGATURE SHEEN WITH HAH MEDIAL FORMARABIC LIGATURE SHEEN WITH" + + " KHAH MEDIAL FORMARABIC LIGATURE TAH WITH MEEM MEDIAL FORMARABIC LIGATUR" + + "E ZAH WITH MEEM MEDIAL FORMARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM" + + "ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORMORNATE LEFT PARENTHESISO" + + "RNATE RIGHT PARENTHESISARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL F" + + "ORMARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORMARABIC LIGATURE TEH " + + "WITH HAH WITH JEEM INITIAL FORMARABIC LIGATURE TEH WITH HAH WITH MEEM IN" + + "ITIAL FORMARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORMARABIC LIG" + + "ATURE TEH WITH MEEM WITH JEEM INITIAL FORMARABIC LIGATURE TEH WITH MEEM " + + "WITH HAH INITIAL FORMARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FOR" + + "MARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORMARABIC LIGATURE JEEM " + + "WITH MEEM WITH HAH INITIAL FORMARABIC LIGATURE HAH WITH MEEM WITH YEH FI" + + "NAL FORMARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORMARABIC" + + " LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORMARABIC LIGATURE SEEN WITH " + + "JEEM WITH HAH INITIAL FORMARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSU" + + "RA FINAL FORMARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORMARABIC LI" + + "GATURE SEEN WITH MEEM WITH HAH INITIAL FORMARABIC LIGATURE SEEN WITH MEE" + + "M WITH JEEM INITIAL FORMARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL F" + + "ORMARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORMARABIC LIGATURE " + + "SAD WITH HAH WITH HAH FINAL FORMARABIC LIGATURE SAD WITH HAH WITH HAH IN" + + "ITIAL FORMARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORMARABIC LIGAT" + + "URE SHEEN WITH HAH WITH MEEM FINAL FORMARABIC LIGATURE SHEEN WITH HAH WI" + + "TH MEEM INITIAL FORMARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORMA" + + "RABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORMARABIC LIGATURE SHEEN" + + " WITH MEEM WITH KHAH INITIAL FORMARABIC LIGATURE SHEEN WITH MEEM WITH ME" + + "EM FINAL FORMARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORMARABI" + + "C LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE DAD " + + "WITH KHAH WITH MEEM FINAL FORMARABIC LIGATURE DAD WITH KHAH WITH MEEM IN" + + "ITIAL FORMARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORMARABIC LIGATU" + + "RE TAH WITH MEEM WITH HAH INITIAL FORMARABIC LIGATURE TAH WITH MEEM WITH" + + " MEEM INITIAL FORMARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORMARABI" + + "C LIGATURE AIN WITH JEEM WITH MEEM FINAL FORMARABIC LIGATURE AIN WITH ME" + + "EM WITH MEEM FINAL FORMARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL F" + + "ORMARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORMARABIC LIGA" + + "TURE GHAIN WITH MEEM WITH MEEM FINAL FORMARABIC LIGATURE GHAIN WITH MEEM" + + " WITH YEH FINAL FORMARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FI" + + "NAL FORMARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORMARABIC LIGATUR" + + "E FEH WITH KHAH WITH MEEM INITIAL FORMARABIC LIGATURE QAF WITH MEEM WITH" + + " HAH FINAL FORMARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORMARABIC " + + "LIGATURE LAM WITH HAH WITH MEEM FINAL FORMARABIC LIGATURE LAM WITH HAH W" + + "ITH YEH FINAL FORMARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL F" + + "ORMARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORMARABIC LIGATURE L" + + "AM WITH JEEM WITH JEEM FINAL FORMARABIC LIGATURE LAM WITH KHAH WITH MEEM" + + " FINAL FORMARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORMARABIC LI" + + "GATURE LAM WITH MEEM WITH HAH FINAL FORMARABIC LIGATURE LAM WITH MEEM WI" + + "TH HAH INITIAL FORMARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORMA" + + "RABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORMARABIC LIGATURE MEEM " + + "WITH HAH WITH YEH FINAL FORMARABIC LIGATURE MEEM WITH JEEM WITH HAH INIT" + + "IAL FORMARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORMARABIC LIGA" + + "TURE MEEM WITH KHAH WITH JEEM INITIAL FORMARABIC LIGATURE MEEM WITH KHAH" + + " WITH MEEM INITIAL FORMARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL " + + "FORMARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORMARABIC LIGATURE " + + "HEH WITH MEEM WITH MEEM INITIAL FORMARABIC LIGATURE NOON WITH HAH WITH M" + + "EEM INITIAL FORMARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FO" + + "RMARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORMARABIC LIGATURE NOO" + + "N WITH JEEM WITH MEEM INITIAL FORMARABIC LIGATURE NOON WITH JEEM WITH AL" + + "EF MAKSURA FINAL FORMARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORMA" + + "RABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORMARABIC LIGATUR" + + "E YEH WITH MEEM WITH MEEM FINAL FORMARABIC LIGATURE YEH WITH MEEM WITH M" + + "EEM INITIAL FORMARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORMARABIC " + + "LIGATURE TEH WITH JEEM WITH YEH FINAL FORMARABIC LIGATURE TEH WITH JEEM " + + "WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL") + ("" + + " FORMARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORMARABIC LI" + + "GATURE TEH WITH MEEM WITH YEH FINAL FORMARABIC LIGATURE TEH WITH MEEM WI" + + "TH ALEF MAKSURA FINAL FORMARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL " + + "FORMARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORMARABIC LIG" + + "ATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE SEEN WI" + + "TH KHAH WITH ALEF MAKSURA FINAL FORMARABIC LIGATURE SAD WITH HAH WITH YE" + + "H FINAL FORMARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORMARABIC LIG" + + "ATURE DAD WITH HAH WITH YEH FINAL FORMARABIC LIGATURE LAM WITH JEEM WITH" + + " YEH FINAL FORMARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORMARABIC L" + + "IGATURE YEH WITH HAH WITH YEH FINAL FORMARABIC LIGATURE YEH WITH JEEM WI" + + "TH YEH FINAL FORMARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORMARABIC" + + " LIGATURE MEEM WITH MEEM WITH YEH FINAL FORMARABIC LIGATURE QAF WITH MEE" + + "M WITH YEH FINAL FORMARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORMAR" + + "ABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORMARABIC LIGATURE LAM WIT" + + "H HAH WITH MEEM INITIAL FORMARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL" + + " FORMARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORMARABIC LIGATURE NO" + + "ON WITH JEEM WITH HAH INITIAL FORMARABIC LIGATURE MEEM WITH KHAH WITH YE" + + "H FINAL FORMARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORMARABIC L" + + "IGATURE KAF WITH MEEM WITH MEEM FINAL FORMARABIC LIGATURE LAM WITH JEEM " + + "WITH MEEM FINAL FORMARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORMAR" + + "ABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORMARABIC LIGATURE HAH WITH " + + "JEEM WITH YEH FINAL FORMARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FO" + + "RMARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORMARABIC LIGATURE BEH W" + + "ITH HAH WITH YEH FINAL FORMARABIC LIGATURE KAF WITH MEEM WITH MEEM INITI" + + "AL FORMARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORMARABIC LIGATU" + + "RE SAD WITH MEEM WITH MEEM INITIAL FORMARABIC LIGATURE SEEN WITH KHAH WI" + + "TH YEH FINAL FORMARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORMARABI" + + "C LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORMARABIC LIGATURE " + + "QALA USED AS KORANIC STOP SIGN ISOLATED FORMARABIC LIGATURE ALLAH ISOLAT" + + "ED FORMARABIC LIGATURE AKBAR ISOLATED FORMARABIC LIGATURE MOHAMMAD ISOLA" + + "TED FORMARABIC LIGATURE SALAM ISOLATED FORMARABIC LIGATURE RASOUL ISOLAT" + + "ED FORMARABIC LIGATURE ALAYHE ISOLATED FORMARABIC LIGATURE WASALLAM ISOL" + + "ATED FORMARABIC LIGATURE SALLA ISOLATED FORMARABIC LIGATURE SALLALLAHOU " + + "ALAYHE WASALLAMARABIC LIGATURE JALLAJALALOUHOURIAL SIGNARABIC LIGATURE B" + + "ISMILLAH AR-RAHMAN AR-RAHEEMVARIATION SELECTOR-1VARIATION SELECTOR-2VARI" + + "ATION SELECTOR-3VARIATION SELECTOR-4VARIATION SELECTOR-5VARIATION SELECT" + + "OR-6VARIATION SELECTOR-7VARIATION SELECTOR-8VARIATION SELECTOR-9VARIATIO" + + "N SELECTOR-10VARIATION SELECTOR-11VARIATION SELECTOR-12VARIATION SELECTO" + + "R-13VARIATION SELECTOR-14VARIATION SELECTOR-15VARIATION SELECTOR-16PRESE" + + "NTATION FORM FOR VERTICAL COMMAPRESENTATION FORM FOR VERTICAL IDEOGRAPHI" + + "C COMMAPRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOPPRESENTATION " + + "FORM FOR VERTICAL COLONPRESENTATION FORM FOR VERTICAL SEMICOLONPRESENTAT" + + "ION FORM FOR VERTICAL EXCLAMATION MARKPRESENTATION FORM FOR VERTICAL QUE" + + "STION MARKPRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKETPR" + + "ESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCETPRESENTATION " + + "FORM FOR VERTICAL HORIZONTAL ELLIPSISCOMBINING LIGATURE LEFT HALFCOMBINI" + + "NG LIGATURE RIGHT HALFCOMBINING DOUBLE TILDE LEFT HALFCOMBINING DOUBLE T" + + "ILDE RIGHT HALFCOMBINING MACRON LEFT HALFCOMBINING MACRON RIGHT HALFCOMB" + + "INING CONJOINING MACRONCOMBINING LIGATURE LEFT HALF BELOWCOMBINING LIGAT" + + "URE RIGHT HALF BELOWCOMBINING TILDE LEFT HALF BELOWCOMBINING TILDE RIGHT" + + " HALF BELOWCOMBINING MACRON LEFT HALF BELOWCOMBINING MACRON RIGHT HALF B" + + "ELOWCOMBINING CONJOINING MACRON BELOWCOMBINING CYRILLIC TITLO LEFT HALFC" + + "OMBINING CYRILLIC TITLO RIGHT HALFPRESENTATION FORM FOR VERTICAL TWO DOT" + + " LEADERPRESENTATION FORM FOR VERTICAL EM DASHPRESENTATION FORM FOR VERTI" + + "CAL EN DASHPRESENTATION FORM FOR VERTICAL LOW LINEPRESENTATION FORM FOR " + + "VERTICAL WAVY LOW LINEPRESENTATION FORM FOR VERTICAL LEFT PARENTHESISPRE" + + "SENTATION FORM FOR VERTICAL RIGHT PARENTHESISPRESENTATION FORM FOR VERTI" + + "CAL LEFT CURLY BRACKETPRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET" + + "PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKETPRESENTATION F" + + "ORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKETPRESENTATION FORM FOR VERTI" + + "CAL LEFT BLACK LENTICULAR BRACKETPRESENTATION FORM FOR VERTICAL RIGHT BL" + + "ACK LENTICULAR BRACKETPRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE B" + + "RACKETPRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKETPRESENTAT" + + "ION FORM FOR VERTICAL LEFT ANGLE BRACKETPRESENTATION FORM FOR VERTICAL R") + ("" + + "IGHT ANGLE BRACKETPRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKETPRES" + + "ENTATION FORM FOR VERTICAL RIGHT CORNER BRACKETPRESENTATION FORM FOR VER" + + "TICAL LEFT WHITE CORNER BRACKETPRESENTATION FORM FOR VERTICAL RIGHT WHIT" + + "E CORNER BRACKETSESAME DOTWHITE SESAME DOTPRESENTATION FORM FOR VERTICAL" + + " LEFT SQUARE BRACKETPRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKETD" + + "ASHED OVERLINECENTRELINE OVERLINEWAVY OVERLINEDOUBLE WAVY OVERLINEDASHED" + + " LOW LINECENTRELINE LOW LINEWAVY LOW LINESMALL COMMASMALL IDEOGRAPHIC CO" + + "MMASMALL FULL STOPSMALL SEMICOLONSMALL COLONSMALL QUESTION MARKSMALL EXC" + + "LAMATION MARKSMALL EM DASHSMALL LEFT PARENTHESISSMALL RIGHT PARENTHESISS" + + "MALL LEFT CURLY BRACKETSMALL RIGHT CURLY BRACKETSMALL LEFT TORTOISE SHEL" + + "L BRACKETSMALL RIGHT TORTOISE SHELL BRACKETSMALL NUMBER SIGNSMALL AMPERS" + + "ANDSMALL ASTERISKSMALL PLUS SIGNSMALL HYPHEN-MINUSSMALL LESS-THAN SIGNSM" + + "ALL GREATER-THAN SIGNSMALL EQUALS SIGNSMALL REVERSE SOLIDUSSMALL DOLLAR " + + "SIGNSMALL PERCENT SIGNSMALL COMMERCIAL ATARABIC FATHATAN ISOLATED FORMAR" + + "ABIC TATWEEL WITH FATHATAN ABOVEARABIC DAMMATAN ISOLATED FORMARABIC TAIL" + + " FRAGMENTARABIC KASRATAN ISOLATED FORMARABIC FATHA ISOLATED FORMARABIC F" + + "ATHA MEDIAL FORMARABIC DAMMA ISOLATED FORMARABIC DAMMA MEDIAL FORMARABIC" + + " KASRA ISOLATED FORMARABIC KASRA MEDIAL FORMARABIC SHADDA ISOLATED FORMA" + + "RABIC SHADDA MEDIAL FORMARABIC SUKUN ISOLATED FORMARABIC SUKUN MEDIAL FO" + + "RMARABIC LETTER HAMZA ISOLATED FORMARABIC LETTER ALEF WITH MADDA ABOVE I" + + "SOLATED FORMARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORMARABIC LETTER " + + "ALEF WITH HAMZA ABOVE ISOLATED FORMARABIC LETTER ALEF WITH HAMZA ABOVE F" + + "INAL FORMARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORMARABIC LETTER W" + + "AW WITH HAMZA ABOVE FINAL FORMARABIC LETTER ALEF WITH HAMZA BELOW ISOLAT" + + "ED FORMARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORMARABIC LETTER YEH W" + + "ITH HAMZA ABOVE ISOLATED FORMARABIC LETTER YEH WITH HAMZA ABOVE FINAL FO" + + "RMARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORMARABIC LETTER YEH WITH " + + "HAMZA ABOVE MEDIAL FORMARABIC LETTER ALEF ISOLATED FORMARABIC LETTER ALE" + + "F FINAL FORMARABIC LETTER BEH ISOLATED FORMARABIC LETTER BEH FINAL FORMA" + + "RABIC LETTER BEH INITIAL FORMARABIC LETTER BEH MEDIAL FORMARABIC LETTER " + + "TEH MARBUTA ISOLATED FORMARABIC LETTER TEH MARBUTA FINAL FORMARABIC LETT" + + "ER TEH ISOLATED FORMARABIC LETTER TEH FINAL FORMARABIC LETTER TEH INITIA" + + "L FORMARABIC LETTER TEH MEDIAL FORMARABIC LETTER THEH ISOLATED FORMARABI" + + "C LETTER THEH FINAL FORMARABIC LETTER THEH INITIAL FORMARABIC LETTER THE" + + "H MEDIAL FORMARABIC LETTER JEEM ISOLATED FORMARABIC LETTER JEEM FINAL FO" + + "RMARABIC LETTER JEEM INITIAL FORMARABIC LETTER JEEM MEDIAL FORMARABIC LE" + + "TTER HAH ISOLATED FORMARABIC LETTER HAH FINAL FORMARABIC LETTER HAH INIT" + + "IAL FORMARABIC LETTER HAH MEDIAL FORMARABIC LETTER KHAH ISOLATED FORMARA" + + "BIC LETTER KHAH FINAL FORMARABIC LETTER KHAH INITIAL FORMARABIC LETTER K" + + "HAH MEDIAL FORMARABIC LETTER DAL ISOLATED FORMARABIC LETTER DAL FINAL FO" + + "RMARABIC LETTER THAL ISOLATED FORMARABIC LETTER THAL FINAL FORMARABIC LE" + + "TTER REH ISOLATED FORMARABIC LETTER REH FINAL FORMARABIC LETTER ZAIN ISO" + + "LATED FORMARABIC LETTER ZAIN FINAL FORMARABIC LETTER SEEN ISOLATED FORMA" + + "RABIC LETTER SEEN FINAL FORMARABIC LETTER SEEN INITIAL FORMARABIC LETTER" + + " SEEN MEDIAL FORMARABIC LETTER SHEEN ISOLATED FORMARABIC LETTER SHEEN FI" + + "NAL FORMARABIC LETTER SHEEN INITIAL FORMARABIC LETTER SHEEN MEDIAL FORMA" + + "RABIC LETTER SAD ISOLATED FORMARABIC LETTER SAD FINAL FORMARABIC LETTER " + + "SAD INITIAL FORMARABIC LETTER SAD MEDIAL FORMARABIC LETTER DAD ISOLATED " + + "FORMARABIC LETTER DAD FINAL FORMARABIC LETTER DAD INITIAL FORMARABIC LET" + + "TER DAD MEDIAL FORMARABIC LETTER TAH ISOLATED FORMARABIC LETTER TAH FINA" + + "L FORMARABIC LETTER TAH INITIAL FORMARABIC LETTER TAH MEDIAL FORMARABIC " + + "LETTER ZAH ISOLATED FORMARABIC LETTER ZAH FINAL FORMARABIC LETTER ZAH IN" + + "ITIAL FORMARABIC LETTER ZAH MEDIAL FORMARABIC LETTER AIN ISOLATED FORMAR" + + "ABIC LETTER AIN FINAL FORMARABIC LETTER AIN INITIAL FORMARABIC LETTER AI" + + "N MEDIAL FORMARABIC LETTER GHAIN ISOLATED FORMARABIC LETTER GHAIN FINAL " + + "FORMARABIC LETTER GHAIN INITIAL FORMARABIC LETTER GHAIN MEDIAL FORMARABI" + + "C LETTER FEH ISOLATED FORMARABIC LETTER FEH FINAL FORMARABIC LETTER FEH " + + "INITIAL FORMARABIC LETTER FEH MEDIAL FORMARABIC LETTER QAF ISOLATED FORM" + + "ARABIC LETTER QAF FINAL FORMARABIC LETTER QAF INITIAL FORMARABIC LETTER " + + "QAF MEDIAL FORMARABIC LETTER KAF ISOLATED FORMARABIC LETTER KAF FINAL FO" + + "RMARABIC LETTER KAF INITIAL FORMARABIC LETTER KAF MEDIAL FORMARABIC LETT" + + "ER LAM ISOLATED FORMARABIC LETTER LAM FINAL FORMARABIC LETTER LAM INITIA" + + "L FORMARABIC LETTER LAM MEDIAL FORMARABIC LETTER MEEM ISOLATED FORMARABI" + + "C LETTER MEEM FINAL FORMARABIC LETTER MEEM INITIAL FORMARABIC LETTER MEE") + ("" + + "M MEDIAL FORMARABIC LETTER NOON ISOLATED FORMARABIC LETTER NOON FINAL FO" + + "RMARABIC LETTER NOON INITIAL FORMARABIC LETTER NOON MEDIAL FORMARABIC LE" + + "TTER HEH ISOLATED FORMARABIC LETTER HEH FINAL FORMARABIC LETTER HEH INIT" + + "IAL FORMARABIC LETTER HEH MEDIAL FORMARABIC LETTER WAW ISOLATED FORMARAB" + + "IC LETTER WAW FINAL FORMARABIC LETTER ALEF MAKSURA ISOLATED FORMARABIC L" + + "ETTER ALEF MAKSURA FINAL FORMARABIC LETTER YEH ISOLATED FORMARABIC LETTE" + + "R YEH FINAL FORMARABIC LETTER YEH INITIAL FORMARABIC LETTER YEH MEDIAL F" + + "ORMARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORMARABIC LI" + + "GATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORMARABIC LIGATURE LAM WITH" + + " ALEF WITH HAMZA ABOVE ISOLATED FORMARABIC LIGATURE LAM WITH ALEF WITH H" + + "AMZA ABOVE FINAL FORMARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOL" + + "ATED FORMARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORMARABIC" + + " LIGATURE LAM WITH ALEF ISOLATED FORMARABIC LIGATURE LAM WITH ALEF FINAL" + + " FORMZERO WIDTH NO-BREAK SPACEFULLWIDTH EXCLAMATION MARKFULLWIDTH QUOTAT" + + "ION MARKFULLWIDTH NUMBER SIGNFULLWIDTH DOLLAR SIGNFULLWIDTH PERCENT SIGN" + + "FULLWIDTH AMPERSANDFULLWIDTH APOSTROPHEFULLWIDTH LEFT PARENTHESISFULLWID" + + "TH RIGHT PARENTHESISFULLWIDTH ASTERISKFULLWIDTH PLUS SIGNFULLWIDTH COMMA" + + "FULLWIDTH HYPHEN-MINUSFULLWIDTH FULL STOPFULLWIDTH SOLIDUSFULLWIDTH DIGI" + + "T ZEROFULLWIDTH DIGIT ONEFULLWIDTH DIGIT TWOFULLWIDTH DIGIT THREEFULLWID" + + "TH DIGIT FOURFULLWIDTH DIGIT FIVEFULLWIDTH DIGIT SIXFULLWIDTH DIGIT SEVE" + + "NFULLWIDTH DIGIT EIGHTFULLWIDTH DIGIT NINEFULLWIDTH COLONFULLWIDTH SEMIC" + + "OLONFULLWIDTH LESS-THAN SIGNFULLWIDTH EQUALS SIGNFULLWIDTH GREATER-THAN " + + "SIGNFULLWIDTH QUESTION MARKFULLWIDTH COMMERCIAL ATFULLWIDTH LATIN CAPITA" + + "L LETTER AFULLWIDTH LATIN CAPITAL LETTER BFULLWIDTH LATIN CAPITAL LETTER" + + " CFULLWIDTH LATIN CAPITAL LETTER DFULLWIDTH LATIN CAPITAL LETTER EFULLWI" + + "DTH LATIN CAPITAL LETTER FFULLWIDTH LATIN CAPITAL LETTER GFULLWIDTH LATI" + + "N CAPITAL LETTER HFULLWIDTH LATIN CAPITAL LETTER IFULLWIDTH LATIN CAPITA" + + "L LETTER JFULLWIDTH LATIN CAPITAL LETTER KFULLWIDTH LATIN CAPITAL LETTER" + + " LFULLWIDTH LATIN CAPITAL LETTER MFULLWIDTH LATIN CAPITAL LETTER NFULLWI" + + "DTH LATIN CAPITAL LETTER OFULLWIDTH LATIN CAPITAL LETTER PFULLWIDTH LATI" + + "N CAPITAL LETTER QFULLWIDTH LATIN CAPITAL LETTER RFULLWIDTH LATIN CAPITA" + + "L LETTER SFULLWIDTH LATIN CAPITAL LETTER TFULLWIDTH LATIN CAPITAL LETTER" + + " UFULLWIDTH LATIN CAPITAL LETTER VFULLWIDTH LATIN CAPITAL LETTER WFULLWI" + + "DTH LATIN CAPITAL LETTER XFULLWIDTH LATIN CAPITAL LETTER YFULLWIDTH LATI" + + "N CAPITAL LETTER ZFULLWIDTH LEFT SQUARE BRACKETFULLWIDTH REVERSE SOLIDUS" + + "FULLWIDTH RIGHT SQUARE BRACKETFULLWIDTH CIRCUMFLEX ACCENTFULLWIDTH LOW L" + + "INEFULLWIDTH GRAVE ACCENTFULLWIDTH LATIN SMALL LETTER AFULLWIDTH LATIN S" + + "MALL LETTER BFULLWIDTH LATIN SMALL LETTER CFULLWIDTH LATIN SMALL LETTER " + + "DFULLWIDTH LATIN SMALL LETTER EFULLWIDTH LATIN SMALL LETTER FFULLWIDTH L" + + "ATIN SMALL LETTER GFULLWIDTH LATIN SMALL LETTER HFULLWIDTH LATIN SMALL L" + + "ETTER IFULLWIDTH LATIN SMALL LETTER JFULLWIDTH LATIN SMALL LETTER KFULLW" + + "IDTH LATIN SMALL LETTER LFULLWIDTH LATIN SMALL LETTER MFULLWIDTH LATIN S" + + "MALL LETTER NFULLWIDTH LATIN SMALL LETTER OFULLWIDTH LATIN SMALL LETTER " + + "PFULLWIDTH LATIN SMALL LETTER QFULLWIDTH LATIN SMALL LETTER RFULLWIDTH L" + + "ATIN SMALL LETTER SFULLWIDTH LATIN SMALL LETTER TFULLWIDTH LATIN SMALL L" + + "ETTER UFULLWIDTH LATIN SMALL LETTER VFULLWIDTH LATIN SMALL LETTER WFULLW" + + "IDTH LATIN SMALL LETTER XFULLWIDTH LATIN SMALL LETTER YFULLWIDTH LATIN S" + + "MALL LETTER ZFULLWIDTH LEFT CURLY BRACKETFULLWIDTH VERTICAL LINEFULLWIDT" + + "H RIGHT CURLY BRACKETFULLWIDTH TILDEFULLWIDTH LEFT WHITE PARENTHESISFULL" + + "WIDTH RIGHT WHITE PARENTHESISHALFWIDTH IDEOGRAPHIC FULL STOPHALFWIDTH LE" + + "FT CORNER BRACKETHALFWIDTH RIGHT CORNER BRACKETHALFWIDTH IDEOGRAPHIC COM" + + "MAHALFWIDTH KATAKANA MIDDLE DOTHALFWIDTH KATAKANA LETTER WOHALFWIDTH KAT" + + "AKANA LETTER SMALL AHALFWIDTH KATAKANA LETTER SMALL IHALFWIDTH KATAKANA " + + "LETTER SMALL UHALFWIDTH KATAKANA LETTER SMALL EHALFWIDTH KATAKANA LETTER" + + " SMALL OHALFWIDTH KATAKANA LETTER SMALL YAHALFWIDTH KATAKANA LETTER SMAL" + + "L YUHALFWIDTH KATAKANA LETTER SMALL YOHALFWIDTH KATAKANA LETTER SMALL TU" + + "HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARKHALFWIDTH KATAKANA LETTE" + + "R AHALFWIDTH KATAKANA LETTER IHALFWIDTH KATAKANA LETTER UHALFWIDTH KATAK" + + "ANA LETTER EHALFWIDTH KATAKANA LETTER OHALFWIDTH KATAKANA LETTER KAHALFW" + + "IDTH KATAKANA LETTER KIHALFWIDTH KATAKANA LETTER KUHALFWIDTH KATAKANA LE" + + "TTER KEHALFWIDTH KATAKANA LETTER KOHALFWIDTH KATAKANA LETTER SAHALFWIDTH" + + " KATAKANA LETTER SIHALFWIDTH KATAKANA LETTER SUHALFWIDTH KATAKANA LETTER" + + " SEHALFWIDTH KATAKANA LETTER SOHALFWIDTH KATAKANA LETTER TAHALFWIDTH KAT" + + "AKANA LETTER TIHALFWIDTH KATAKANA LETTER TUHALFWIDTH KATAKANA LETTER TEH") + ("" + + "ALFWIDTH KATAKANA LETTER TOHALFWIDTH KATAKANA LETTER NAHALFWIDTH KATAKAN" + + "A LETTER NIHALFWIDTH KATAKANA LETTER NUHALFWIDTH KATAKANA LETTER NEHALFW" + + "IDTH KATAKANA LETTER NOHALFWIDTH KATAKANA LETTER HAHALFWIDTH KATAKANA LE" + + "TTER HIHALFWIDTH KATAKANA LETTER HUHALFWIDTH KATAKANA LETTER HEHALFWIDTH" + + " KATAKANA LETTER HOHALFWIDTH KATAKANA LETTER MAHALFWIDTH KATAKANA LETTER" + + " MIHALFWIDTH KATAKANA LETTER MUHALFWIDTH KATAKANA LETTER MEHALFWIDTH KAT" + + "AKANA LETTER MOHALFWIDTH KATAKANA LETTER YAHALFWIDTH KATAKANA LETTER YUH" + + "ALFWIDTH KATAKANA LETTER YOHALFWIDTH KATAKANA LETTER RAHALFWIDTH KATAKAN" + + "A LETTER RIHALFWIDTH KATAKANA LETTER RUHALFWIDTH KATAKANA LETTER REHALFW" + + "IDTH KATAKANA LETTER ROHALFWIDTH KATAKANA LETTER WAHALFWIDTH KATAKANA LE" + + "TTER NHALFWIDTH KATAKANA VOICED SOUND MARKHALFWIDTH KATAKANA SEMI-VOICED" + + " SOUND MARKHALFWIDTH HANGUL FILLERHALFWIDTH HANGUL LETTER KIYEOKHALFWIDT" + + "H HANGUL LETTER SSANGKIYEOKHALFWIDTH HANGUL LETTER KIYEOK-SIOSHALFWIDTH " + + "HANGUL LETTER NIEUNHALFWIDTH HANGUL LETTER NIEUN-CIEUCHALFWIDTH HANGUL L" + + "ETTER NIEUN-HIEUHHALFWIDTH HANGUL LETTER TIKEUTHALFWIDTH HANGUL LETTER S" + + "SANGTIKEUTHALFWIDTH HANGUL LETTER RIEULHALFWIDTH HANGUL LETTER RIEUL-KIY" + + "EOKHALFWIDTH HANGUL LETTER RIEUL-MIEUMHALFWIDTH HANGUL LETTER RIEUL-PIEU" + + "PHALFWIDTH HANGUL LETTER RIEUL-SIOSHALFWIDTH HANGUL LETTER RIEUL-THIEUTH" + + "HALFWIDTH HANGUL LETTER RIEUL-PHIEUPHHALFWIDTH HANGUL LETTER RIEUL-HIEUH" + + "HALFWIDTH HANGUL LETTER MIEUMHALFWIDTH HANGUL LETTER PIEUPHALFWIDTH HANG" + + "UL LETTER SSANGPIEUPHALFWIDTH HANGUL LETTER PIEUP-SIOSHALFWIDTH HANGUL L" + + "ETTER SIOSHALFWIDTH HANGUL LETTER SSANGSIOSHALFWIDTH HANGUL LETTER IEUNG" + + "HALFWIDTH HANGUL LETTER CIEUCHALFWIDTH HANGUL LETTER SSANGCIEUCHALFWIDTH" + + " HANGUL LETTER CHIEUCHHALFWIDTH HANGUL LETTER KHIEUKHHALFWIDTH HANGUL LE" + + "TTER THIEUTHHALFWIDTH HANGUL LETTER PHIEUPHHALFWIDTH HANGUL LETTER HIEUH" + + "HALFWIDTH HANGUL LETTER AHALFWIDTH HANGUL LETTER AEHALFWIDTH HANGUL LETT" + + "ER YAHALFWIDTH HANGUL LETTER YAEHALFWIDTH HANGUL LETTER EOHALFWIDTH HANG" + + "UL LETTER EHALFWIDTH HANGUL LETTER YEOHALFWIDTH HANGUL LETTER YEHALFWIDT" + + "H HANGUL LETTER OHALFWIDTH HANGUL LETTER WAHALFWIDTH HANGUL LETTER WAEHA" + + "LFWIDTH HANGUL LETTER OEHALFWIDTH HANGUL LETTER YOHALFWIDTH HANGUL LETTE" + + "R UHALFWIDTH HANGUL LETTER WEOHALFWIDTH HANGUL LETTER WEHALFWIDTH HANGUL" + + " LETTER WIHALFWIDTH HANGUL LETTER YUHALFWIDTH HANGUL LETTER EUHALFWIDTH " + + "HANGUL LETTER YIHALFWIDTH HANGUL LETTER IFULLWIDTH CENT SIGNFULLWIDTH PO" + + "UND SIGNFULLWIDTH NOT SIGNFULLWIDTH MACRONFULLWIDTH BROKEN BARFULLWIDTH " + + "YEN SIGNFULLWIDTH WON SIGNHALFWIDTH FORMS LIGHT VERTICALHALFWIDTH LEFTWA" + + "RDS ARROWHALFWIDTH UPWARDS ARROWHALFWIDTH RIGHTWARDS ARROWHALFWIDTH DOWN" + + "WARDS ARROWHALFWIDTH BLACK SQUAREHALFWIDTH WHITE CIRCLEINTERLINEAR ANNOT" + + "ATION ANCHORINTERLINEAR ANNOTATION SEPARATORINTERLINEAR ANNOTATION TERMI" + + "NATOROBJECT REPLACEMENT CHARACTERREPLACEMENT CHARACTERLINEAR B SYLLABLE " + + "B008 ALINEAR B SYLLABLE B038 ELINEAR B SYLLABLE B028 ILINEAR B SYLLABLE " + + "B061 OLINEAR B SYLLABLE B010 ULINEAR B SYLLABLE B001 DALINEAR B SYLLABLE" + + " B045 DELINEAR B SYLLABLE B007 DILINEAR B SYLLABLE B014 DOLINEAR B SYLLA" + + "BLE B051 DULINEAR B SYLLABLE B057 JALINEAR B SYLLABLE B046 JELINEAR B SY" + + "LLABLE B036 JOLINEAR B SYLLABLE B065 JULINEAR B SYLLABLE B077 KALINEAR B" + + " SYLLABLE B044 KELINEAR B SYLLABLE B067 KILINEAR B SYLLABLE B070 KOLINEA" + + "R B SYLLABLE B081 KULINEAR B SYLLABLE B080 MALINEAR B SYLLABLE B013 MELI" + + "NEAR B SYLLABLE B073 MILINEAR B SYLLABLE B015 MOLINEAR B SYLLABLE B023 M" + + "ULINEAR B SYLLABLE B006 NALINEAR B SYLLABLE B024 NELINEAR B SYLLABLE B03" + + "0 NILINEAR B SYLLABLE B052 NOLINEAR B SYLLABLE B055 NULINEAR B SYLLABLE " + + "B003 PALINEAR B SYLLABLE B072 PELINEAR B SYLLABLE B039 PILINEAR B SYLLAB" + + "LE B011 POLINEAR B SYLLABLE B050 PULINEAR B SYLLABLE B016 QALINEAR B SYL" + + "LABLE B078 QELINEAR B SYLLABLE B021 QILINEAR B SYLLABLE B032 QOLINEAR B " + + "SYLLABLE B060 RALINEAR B SYLLABLE B027 RELINEAR B SYLLABLE B053 RILINEAR" + + " B SYLLABLE B002 ROLINEAR B SYLLABLE B026 RULINEAR B SYLLABLE B031 SALIN" + + "EAR B SYLLABLE B009 SELINEAR B SYLLABLE B041 SILINEAR B SYLLABLE B012 SO" + + "LINEAR B SYLLABLE B058 SULINEAR B SYLLABLE B059 TALINEAR B SYLLABLE B004" + + " TELINEAR B SYLLABLE B037 TILINEAR B SYLLABLE B005 TOLINEAR B SYLLABLE B" + + "069 TULINEAR B SYLLABLE B054 WALINEAR B SYLLABLE B075 WELINEAR B SYLLABL" + + "E B040 WILINEAR B SYLLABLE B042 WOLINEAR B SYLLABLE B017 ZALINEAR B SYLL" + + "ABLE B074 ZELINEAR B SYLLABLE B020 ZOLINEAR B SYLLABLE B025 A2LINEAR B S" + + "YLLABLE B043 A3LINEAR B SYLLABLE B085 AULINEAR B SYLLABLE B071 DWELINEAR" + + " B SYLLABLE B090 DWOLINEAR B SYLLABLE B048 NWALINEAR B SYLLABLE B029 PU2" + + "LINEAR B SYLLABLE B062 PTELINEAR B SYLLABLE B076 RA2LINEAR B SYLLABLE B0" + + "33 RA3LINEAR B SYLLABLE B068 RO2LINEAR B SYLLABLE B066 TA2LINEAR B SYLLA") + ("" + + "BLE B087 TWELINEAR B SYLLABLE B091 TWOLINEAR B SYMBOL B018LINEAR B SYMBO" + + "L B019LINEAR B SYMBOL B022LINEAR B SYMBOL B034LINEAR B SYMBOL B047LINEAR" + + " B SYMBOL B049LINEAR B SYMBOL B056LINEAR B SYMBOL B063LINEAR B SYMBOL B0" + + "64LINEAR B SYMBOL B079LINEAR B SYMBOL B082LINEAR B SYMBOL B083LINEAR B S" + + "YMBOL B086LINEAR B SYMBOL B089LINEAR B IDEOGRAM B100 MANLINEAR B IDEOGRA" + + "M B102 WOMANLINEAR B IDEOGRAM B104 DEERLINEAR B IDEOGRAM B105 EQUIDLINEA" + + "R B IDEOGRAM B105F MARELINEAR B IDEOGRAM B105M STALLIONLINEAR B IDEOGRAM" + + " B106F EWELINEAR B IDEOGRAM B106M RAMLINEAR B IDEOGRAM B107F SHE-GOATLIN" + + "EAR B IDEOGRAM B107M HE-GOATLINEAR B IDEOGRAM B108F SOWLINEAR B IDEOGRAM" + + " B108M BOARLINEAR B IDEOGRAM B109F COWLINEAR B IDEOGRAM B109M BULLLINEAR" + + " B IDEOGRAM B120 WHEATLINEAR B IDEOGRAM B121 BARLEYLINEAR B IDEOGRAM B12" + + "2 OLIVELINEAR B IDEOGRAM B123 SPICELINEAR B IDEOGRAM B125 CYPERUSLINEAR " + + "B MONOGRAM B127 KAPOLINEAR B MONOGRAM B128 KANAKOLINEAR B IDEOGRAM B130 " + + "OILLINEAR B IDEOGRAM B131 WINELINEAR B IDEOGRAM B132LINEAR B MONOGRAM B1" + + "33 AREPALINEAR B MONOGRAM B135 MERILINEAR B IDEOGRAM B140 BRONZELINEAR B" + + " IDEOGRAM B141 GOLDLINEAR B IDEOGRAM B142LINEAR B IDEOGRAM B145 WOOLLINE" + + "AR B IDEOGRAM B146LINEAR B IDEOGRAM B150LINEAR B IDEOGRAM B151 HORNLINEA" + + "R B IDEOGRAM B152LINEAR B IDEOGRAM B153LINEAR B IDEOGRAM B154LINEAR B MO" + + "NOGRAM B156 TURO2LINEAR B IDEOGRAM B157LINEAR B IDEOGRAM B158LINEAR B ID" + + "EOGRAM B159 CLOTHLINEAR B IDEOGRAM B160LINEAR B IDEOGRAM B161LINEAR B ID" + + "EOGRAM B162 GARMENTLINEAR B IDEOGRAM B163 ARMOURLINEAR B IDEOGRAM B164LI" + + "NEAR B IDEOGRAM B165LINEAR B IDEOGRAM B166LINEAR B IDEOGRAM B167LINEAR B" + + " IDEOGRAM B168LINEAR B IDEOGRAM B169LINEAR B IDEOGRAM B170LINEAR B IDEOG" + + "RAM B171LINEAR B IDEOGRAM B172LINEAR B IDEOGRAM B173 MONTHLINEAR B IDEOG" + + "RAM B174LINEAR B IDEOGRAM B176 TREELINEAR B IDEOGRAM B177LINEAR B IDEOGR" + + "AM B178LINEAR B IDEOGRAM B179LINEAR B IDEOGRAM B180LINEAR B IDEOGRAM B18" + + "1LINEAR B IDEOGRAM B182LINEAR B IDEOGRAM B183LINEAR B IDEOGRAM B184LINEA" + + "R B IDEOGRAM B185LINEAR B IDEOGRAM B189LINEAR B IDEOGRAM B190LINEAR B ID" + + "EOGRAM B191 HELMETLINEAR B IDEOGRAM B220 FOOTSTOOLLINEAR B IDEOGRAM B225" + + " BATHTUBLINEAR B IDEOGRAM B230 SPEARLINEAR B IDEOGRAM B231 ARROWLINEAR B" + + " IDEOGRAM B232LINEAR B IDEOGRAM B233 SWORDLINEAR B IDEOGRAM B234LINEAR B" + + " IDEOGRAM B236LINEAR B IDEOGRAM B240 WHEELED CHARIOTLINEAR B IDEOGRAM B2" + + "41 CHARIOTLINEAR B IDEOGRAM B242 CHARIOT FRAMELINEAR B IDEOGRAM B243 WHE" + + "ELLINEAR B IDEOGRAM B245LINEAR B IDEOGRAM B246LINEAR B MONOGRAM B247 DIP" + + "TELINEAR B IDEOGRAM B248LINEAR B IDEOGRAM B249LINEAR B IDEOGRAM B251LINE" + + "AR B IDEOGRAM B252LINEAR B IDEOGRAM B253LINEAR B IDEOGRAM B254 DARTLINEA" + + "R B IDEOGRAM B255LINEAR B IDEOGRAM B256LINEAR B IDEOGRAM B257LINEAR B ID" + + "EOGRAM B258LINEAR B IDEOGRAM B259LINEAR B IDEOGRAM VESSEL B155LINEAR B I" + + "DEOGRAM VESSEL B200LINEAR B IDEOGRAM VESSEL B201LINEAR B IDEOGRAM VESSEL" + + " B202LINEAR B IDEOGRAM VESSEL B203LINEAR B IDEOGRAM VESSEL B204LINEAR B " + + "IDEOGRAM VESSEL B205LINEAR B IDEOGRAM VESSEL B206LINEAR B IDEOGRAM VESSE" + + "L B207LINEAR B IDEOGRAM VESSEL B208LINEAR B IDEOGRAM VESSEL B209LINEAR B" + + " IDEOGRAM VESSEL B210LINEAR B IDEOGRAM VESSEL B211LINEAR B IDEOGRAM VESS" + + "EL B212LINEAR B IDEOGRAM VESSEL B213LINEAR B IDEOGRAM VESSEL B214LINEAR " + + "B IDEOGRAM VESSEL B215LINEAR B IDEOGRAM VESSEL B216LINEAR B IDEOGRAM VES" + + "SEL B217LINEAR B IDEOGRAM VESSEL B218LINEAR B IDEOGRAM VESSEL B219LINEAR" + + " B IDEOGRAM VESSEL B221LINEAR B IDEOGRAM VESSEL B222LINEAR B IDEOGRAM VE" + + "SSEL B226LINEAR B IDEOGRAM VESSEL B227LINEAR B IDEOGRAM VESSEL B228LINEA" + + "R B IDEOGRAM VESSEL B229LINEAR B IDEOGRAM VESSEL B250LINEAR B IDEOGRAM V" + + "ESSEL B305AEGEAN WORD SEPARATOR LINEAEGEAN WORD SEPARATOR DOTAEGEAN CHEC" + + "K MARKAEGEAN NUMBER ONEAEGEAN NUMBER TWOAEGEAN NUMBER THREEAEGEAN NUMBER" + + " FOURAEGEAN NUMBER FIVEAEGEAN NUMBER SIXAEGEAN NUMBER SEVENAEGEAN NUMBER" + + " EIGHTAEGEAN NUMBER NINEAEGEAN NUMBER TENAEGEAN NUMBER TWENTYAEGEAN NUMB" + + "ER THIRTYAEGEAN NUMBER FORTYAEGEAN NUMBER FIFTYAEGEAN NUMBER SIXTYAEGEAN" + + " NUMBER SEVENTYAEGEAN NUMBER EIGHTYAEGEAN NUMBER NINETYAEGEAN NUMBER ONE" + + " HUNDREDAEGEAN NUMBER TWO HUNDREDAEGEAN NUMBER THREE HUNDREDAEGEAN NUMBE" + + "R FOUR HUNDREDAEGEAN NUMBER FIVE HUNDREDAEGEAN NUMBER SIX HUNDREDAEGEAN " + + "NUMBER SEVEN HUNDREDAEGEAN NUMBER EIGHT HUNDREDAEGEAN NUMBER NINE HUNDRE" + + "DAEGEAN NUMBER ONE THOUSANDAEGEAN NUMBER TWO THOUSANDAEGEAN NUMBER THREE" + + " THOUSANDAEGEAN NUMBER FOUR THOUSANDAEGEAN NUMBER FIVE THOUSANDAEGEAN NU" + + "MBER SIX THOUSANDAEGEAN NUMBER SEVEN THOUSANDAEGEAN NUMBER EIGHT THOUSAN" + + "DAEGEAN NUMBER NINE THOUSANDAEGEAN NUMBER TEN THOUSANDAEGEAN NUMBER TWEN" + + "TY THOUSANDAEGEAN NUMBER THIRTY THOUSANDAEGEAN NUMBER FORTY THOUSANDAEGE" + + "AN NUMBER FIFTY THOUSANDAEGEAN NUMBER SIXTY THOUSANDAEGEAN NUMBER SEVENT") + ("" + + "Y THOUSANDAEGEAN NUMBER EIGHTY THOUSANDAEGEAN NUMBER NINETY THOUSANDAEGE" + + "AN WEIGHT BASE UNITAEGEAN WEIGHT FIRST SUBUNITAEGEAN WEIGHT SECOND SUBUN" + + "ITAEGEAN WEIGHT THIRD SUBUNITAEGEAN WEIGHT FOURTH SUBUNITAEGEAN DRY MEAS" + + "URE FIRST SUBUNITAEGEAN LIQUID MEASURE FIRST SUBUNITAEGEAN MEASURE SECON" + + "D SUBUNITAEGEAN MEASURE THIRD SUBUNITGREEK ACROPHONIC ATTIC ONE QUARTERG" + + "REEK ACROPHONIC ATTIC ONE HALFGREEK ACROPHONIC ATTIC ONE DRACHMAGREEK AC" + + "ROPHONIC ATTIC FIVEGREEK ACROPHONIC ATTIC FIFTYGREEK ACROPHONIC ATTIC FI" + + "VE HUNDREDGREEK ACROPHONIC ATTIC FIVE THOUSANDGREEK ACROPHONIC ATTIC FIF" + + "TY THOUSANDGREEK ACROPHONIC ATTIC FIVE TALENTSGREEK ACROPHONIC ATTIC TEN" + + " TALENTSGREEK ACROPHONIC ATTIC FIFTY TALENTSGREEK ACROPHONIC ATTIC ONE H" + + "UNDRED TALENTSGREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTSGREEK ACROPHONI" + + "C ATTIC ONE THOUSAND TALENTSGREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS" + + "GREEK ACROPHONIC ATTIC FIVE STATERSGREEK ACROPHONIC ATTIC TEN STATERSGRE" + + "EK ACROPHONIC ATTIC FIFTY STATERSGREEK ACROPHONIC ATTIC ONE HUNDRED STAT" + + "ERSGREEK ACROPHONIC ATTIC FIVE HUNDRED STATERSGREEK ACROPHONIC ATTIC ONE" + + " THOUSAND STATERSGREEK ACROPHONIC ATTIC TEN THOUSAND STATERSGREEK ACROPH" + + "ONIC ATTIC FIFTY THOUSAND STATERSGREEK ACROPHONIC ATTIC TEN MNASGREEK AC" + + "ROPHONIC HERAEUM ONE PLETHRONGREEK ACROPHONIC THESPIAN ONEGREEK ACROPHON" + + "IC HERMIONIAN ONEGREEK ACROPHONIC EPIDAUREAN TWOGREEK ACROPHONIC THESPIA" + + "N TWOGREEK ACROPHONIC CYRENAIC TWO DRACHMASGREEK ACROPHONIC EPIDAUREAN T" + + "WO DRACHMASGREEK ACROPHONIC TROEZENIAN FIVEGREEK ACROPHONIC TROEZENIAN T" + + "ENGREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORMGREEK ACROPHONIC HERMION" + + "IAN TENGREEK ACROPHONIC MESSENIAN TENGREEK ACROPHONIC THESPIAN TENGREEK " + + "ACROPHONIC THESPIAN THIRTYGREEK ACROPHONIC TROEZENIAN FIFTYGREEK ACROPHO" + + "NIC TROEZENIAN FIFTY ALTERNATE FORMGREEK ACROPHONIC HERMIONIAN FIFTYGREE" + + "K ACROPHONIC THESPIAN FIFTYGREEK ACROPHONIC THESPIAN ONE HUNDREDGREEK AC" + + "ROPHONIC THESPIAN THREE HUNDREDGREEK ACROPHONIC EPIDAUREAN FIVE HUNDREDG" + + "REEK ACROPHONIC TROEZENIAN FIVE HUNDREDGREEK ACROPHONIC THESPIAN FIVE HU" + + "NDREDGREEK ACROPHONIC CARYSTIAN FIVE HUNDREDGREEK ACROPHONIC NAXIAN FIVE" + + " HUNDREDGREEK ACROPHONIC THESPIAN ONE THOUSANDGREEK ACROPHONIC THESPIAN " + + "FIVE THOUSANDGREEK ACROPHONIC DELPHIC FIVE MNASGREEK ACROPHONIC STRATIAN" + + " FIFTY MNASGREEK ONE HALF SIGNGREEK ONE HALF SIGN ALTERNATE FORMGREEK TW" + + "O THIRDS SIGNGREEK THREE QUARTERS SIGNGREEK YEAR SIGNGREEK TALENT SIGNGR" + + "EEK DRACHMA SIGNGREEK OBOL SIGNGREEK TWO OBOLS SIGNGREEK THREE OBOLS SIG" + + "NGREEK FOUR OBOLS SIGNGREEK FIVE OBOLS SIGNGREEK METRETES SIGNGREEK KYAT" + + "HOS BASE SIGNGREEK LITRA SIGNGREEK OUNKIA SIGNGREEK XESTES SIGNGREEK ART" + + "ABE SIGNGREEK AROURA SIGNGREEK GRAMMA SIGNGREEK TRYBLION BASE SIGNGREEK " + + "ZERO SIGNGREEK ONE QUARTER SIGNGREEK SINUSOID SIGNGREEK INDICTION SIGNNO" + + "MISMA SIGNROMAN SEXTANS SIGNROMAN UNCIA SIGNROMAN SEMUNCIA SIGNROMAN SEX" + + "TULA SIGNROMAN DIMIDIA SEXTULA SIGNROMAN SILIQUA SIGNROMAN DENARIUS SIGN" + + "ROMAN QUINARIUS SIGNROMAN SESTERTIUS SIGNROMAN DUPONDIUS SIGNROMAN AS SI" + + "GNROMAN CENTURIAL SIGNGREEK SYMBOL TAU RHOPHAISTOS DISC SIGN PEDESTRIANP" + + "HAISTOS DISC SIGN PLUMED HEADPHAISTOS DISC SIGN TATTOOED HEADPHAISTOS DI" + + "SC SIGN CAPTIVEPHAISTOS DISC SIGN CHILDPHAISTOS DISC SIGN WOMANPHAISTOS " + + "DISC SIGN HELMETPHAISTOS DISC SIGN GAUNTLETPHAISTOS DISC SIGN TIARAPHAIS" + + "TOS DISC SIGN ARROWPHAISTOS DISC SIGN BOWPHAISTOS DISC SIGN SHIELDPHAIST" + + "OS DISC SIGN CLUBPHAISTOS DISC SIGN MANACLESPHAISTOS DISC SIGN MATTOCKPH" + + "AISTOS DISC SIGN SAWPHAISTOS DISC SIGN LIDPHAISTOS DISC SIGN BOOMERANGPH" + + "AISTOS DISC SIGN CARPENTRY PLANEPHAISTOS DISC SIGN DOLIUMPHAISTOS DISC S" + + "IGN COMBPHAISTOS DISC SIGN SLINGPHAISTOS DISC SIGN COLUMNPHAISTOS DISC S" + + "IGN BEEHIVEPHAISTOS DISC SIGN SHIPPHAISTOS DISC SIGN HORNPHAISTOS DISC S" + + "IGN HIDEPHAISTOS DISC SIGN BULLS LEGPHAISTOS DISC SIGN CATPHAISTOS DISC " + + "SIGN RAMPHAISTOS DISC SIGN EAGLEPHAISTOS DISC SIGN DOVEPHAISTOS DISC SIG" + + "N TUNNYPHAISTOS DISC SIGN BEEPHAISTOS DISC SIGN PLANE TREEPHAISTOS DISC " + + "SIGN VINEPHAISTOS DISC SIGN PAPYRUSPHAISTOS DISC SIGN ROSETTEPHAISTOS DI" + + "SC SIGN LILYPHAISTOS DISC SIGN OX BACKPHAISTOS DISC SIGN FLUTEPHAISTOS D" + + "ISC SIGN GRATERPHAISTOS DISC SIGN STRAINERPHAISTOS DISC SIGN SMALL AXEPH" + + "AISTOS DISC SIGN WAVY BANDPHAISTOS DISC SIGN COMBINING OBLIQUE STROKELYC" + + "IAN LETTER ALYCIAN LETTER ELYCIAN LETTER BLYCIAN LETTER BHLYCIAN LETTER " + + "GLYCIAN LETTER DLYCIAN LETTER ILYCIAN LETTER WLYCIAN LETTER ZLYCIAN LETT" + + "ER THLYCIAN LETTER JLYCIAN LETTER KLYCIAN LETTER QLYCIAN LETTER LLYCIAN " + + "LETTER MLYCIAN LETTER NLYCIAN LETTER MMLYCIAN LETTER NNLYCIAN LETTER ULY" + + "CIAN LETTER PLYCIAN LETTER KKLYCIAN LETTER RLYCIAN LETTER SLYCIAN LETTER" + + " TLYCIAN LETTER TTLYCIAN LETTER ANLYCIAN LETTER ENLYCIAN LETTER HLYCIAN ") + ("" + + "LETTER XCARIAN LETTER ACARIAN LETTER P2CARIAN LETTER DCARIAN LETTER LCAR" + + "IAN LETTER UUUCARIAN LETTER RCARIAN LETTER LDCARIAN LETTER A2CARIAN LETT" + + "ER QCARIAN LETTER BCARIAN LETTER MCARIAN LETTER OCARIAN LETTER D2CARIAN " + + "LETTER TCARIAN LETTER SHCARIAN LETTER SH2CARIAN LETTER SCARIAN LETTER C-" + + "18CARIAN LETTER UCARIAN LETTER NNCARIAN LETTER XCARIAN LETTER NCARIAN LE" + + "TTER TT2CARIAN LETTER PCARIAN LETTER SSCARIAN LETTER ICARIAN LETTER ECAR" + + "IAN LETTER UUUUCARIAN LETTER KCARIAN LETTER K2CARIAN LETTER NDCARIAN LET" + + "TER UUCARIAN LETTER GCARIAN LETTER G2CARIAN LETTER STCARIAN LETTER ST2CA" + + "RIAN LETTER NGCARIAN LETTER IICARIAN LETTER C-39CARIAN LETTER TTCARIAN L" + + "ETTER UUU2CARIAN LETTER RRCARIAN LETTER MBCARIAN LETTER MB2CARIAN LETTER" + + " MB3CARIAN LETTER MB4CARIAN LETTER LD2CARIAN LETTER E2CARIAN LETTER UUU3" + + "COPTIC EPACT THOUSANDS MARKCOPTIC EPACT DIGIT ONECOPTIC EPACT DIGIT TWOC" + + "OPTIC EPACT DIGIT THREECOPTIC EPACT DIGIT FOURCOPTIC EPACT DIGIT FIVECOP" + + "TIC EPACT DIGIT SIXCOPTIC EPACT DIGIT SEVENCOPTIC EPACT DIGIT EIGHTCOPTI" + + "C EPACT DIGIT NINECOPTIC EPACT NUMBER TENCOPTIC EPACT NUMBER TWENTYCOPTI" + + "C EPACT NUMBER THIRTYCOPTIC EPACT NUMBER FORTYCOPTIC EPACT NUMBER FIFTYC" + + "OPTIC EPACT NUMBER SIXTYCOPTIC EPACT NUMBER SEVENTYCOPTIC EPACT NUMBER E" + + "IGHTYCOPTIC EPACT NUMBER NINETYCOPTIC EPACT NUMBER ONE HUNDREDCOPTIC EPA" + + "CT NUMBER TWO HUNDREDCOPTIC EPACT NUMBER THREE HUNDREDCOPTIC EPACT NUMBE" + + "R FOUR HUNDREDCOPTIC EPACT NUMBER FIVE HUNDREDCOPTIC EPACT NUMBER SIX HU" + + "NDREDCOPTIC EPACT NUMBER SEVEN HUNDREDCOPTIC EPACT NUMBER EIGHT HUNDREDC" + + "OPTIC EPACT NUMBER NINE HUNDREDOLD ITALIC LETTER AOLD ITALIC LETTER BEOL" + + "D ITALIC LETTER KEOLD ITALIC LETTER DEOLD ITALIC LETTER EOLD ITALIC LETT" + + "ER VEOLD ITALIC LETTER ZEOLD ITALIC LETTER HEOLD ITALIC LETTER THEOLD IT" + + "ALIC LETTER IOLD ITALIC LETTER KAOLD ITALIC LETTER ELOLD ITALIC LETTER E" + + "MOLD ITALIC LETTER ENOLD ITALIC LETTER ESHOLD ITALIC LETTER OOLD ITALIC " + + "LETTER PEOLD ITALIC LETTER SHEOLD ITALIC LETTER KUOLD ITALIC LETTER EROL" + + "D ITALIC LETTER ESOLD ITALIC LETTER TEOLD ITALIC LETTER UOLD ITALIC LETT" + + "ER EKSOLD ITALIC LETTER PHEOLD ITALIC LETTER KHEOLD ITALIC LETTER EFOLD " + + "ITALIC LETTER ERSOLD ITALIC LETTER CHEOLD ITALIC LETTER IIOLD ITALIC LET" + + "TER UUOLD ITALIC LETTER ESSOLD ITALIC NUMERAL ONEOLD ITALIC NUMERAL FIVE" + + "OLD ITALIC NUMERAL TENOLD ITALIC NUMERAL FIFTYGOTHIC LETTER AHSAGOTHIC L" + + "ETTER BAIRKANGOTHIC LETTER GIBAGOTHIC LETTER DAGSGOTHIC LETTER AIHVUSGOT" + + "HIC LETTER QAIRTHRAGOTHIC LETTER IUJAGOTHIC LETTER HAGLGOTHIC LETTER THI" + + "UTHGOTHIC LETTER EISGOTHIC LETTER KUSMAGOTHIC LETTER LAGUSGOTHIC LETTER " + + "MANNAGOTHIC LETTER NAUTHSGOTHIC LETTER JERGOTHIC LETTER URUSGOTHIC LETTE" + + "R PAIRTHRAGOTHIC LETTER NINETYGOTHIC LETTER RAIDAGOTHIC LETTER SAUILGOTH" + + "IC LETTER TEIWSGOTHIC LETTER WINJAGOTHIC LETTER FAIHUGOTHIC LETTER IGGWS" + + "GOTHIC LETTER HWAIRGOTHIC LETTER OTHALGOTHIC LETTER NINE HUNDREDOLD PERM" + + "IC LETTER ANOLD PERMIC LETTER BUROLD PERMIC LETTER GAIOLD PERMIC LETTER " + + "DOIOLD PERMIC LETTER EOLD PERMIC LETTER ZHOIOLD PERMIC LETTER DZHOIOLD P" + + "ERMIC LETTER ZATAOLD PERMIC LETTER DZITAOLD PERMIC LETTER IOLD PERMIC LE" + + "TTER KOKEOLD PERMIC LETTER LEIOLD PERMIC LETTER MENOEOLD PERMIC LETTER N" + + "ENOEOLD PERMIC LETTER VOOIOLD PERMIC LETTER PEEIOLD PERMIC LETTER REIOLD" + + " PERMIC LETTER SIIOLD PERMIC LETTER TAIOLD PERMIC LETTER UOLD PERMIC LET" + + "TER CHERYOLD PERMIC LETTER SHOOIOLD PERMIC LETTER SHCHOOIOLD PERMIC LETT" + + "ER YRYOLD PERMIC LETTER YERUOLD PERMIC LETTER OOLD PERMIC LETTER OOOLD P" + + "ERMIC LETTER EFOLD PERMIC LETTER HAOLD PERMIC LETTER TSIUOLD PERMIC LETT" + + "ER VEROLD PERMIC LETTER YEROLD PERMIC LETTER YERIOLD PERMIC LETTER YATOL" + + "D PERMIC LETTER IEOLD PERMIC LETTER YUOLD PERMIC LETTER YAOLD PERMIC LET" + + "TER IACOMBINING OLD PERMIC LETTER ANCOMBINING OLD PERMIC LETTER DOICOMBI" + + "NING OLD PERMIC LETTER ZATACOMBINING OLD PERMIC LETTER NENOECOMBINING OL" + + "D PERMIC LETTER SIIUGARITIC LETTER ALPAUGARITIC LETTER BETAUGARITIC LETT" + + "ER GAMLAUGARITIC LETTER KHAUGARITIC LETTER DELTAUGARITIC LETTER HOUGARIT" + + "IC LETTER WOUGARITIC LETTER ZETAUGARITIC LETTER HOTAUGARITIC LETTER TETU" + + "GARITIC LETTER YODUGARITIC LETTER KAFUGARITIC LETTER SHINUGARITIC LETTER" + + " LAMDAUGARITIC LETTER MEMUGARITIC LETTER DHALUGARITIC LETTER NUNUGARITIC" + + " LETTER ZUUGARITIC LETTER SAMKAUGARITIC LETTER AINUGARITIC LETTER PUUGAR" + + "ITIC LETTER SADEUGARITIC LETTER QOPAUGARITIC LETTER RASHAUGARITIC LETTER" + + " THANNAUGARITIC LETTER GHAINUGARITIC LETTER TOUGARITIC LETTER IUGARITIC " + + "LETTER UUGARITIC LETTER SSUUGARITIC WORD DIVIDEROLD PERSIAN SIGN AOLD PE" + + "RSIAN SIGN IOLD PERSIAN SIGN UOLD PERSIAN SIGN KAOLD PERSIAN SIGN KUOLD " + + "PERSIAN SIGN GAOLD PERSIAN SIGN GUOLD PERSIAN SIGN XAOLD PERSIAN SIGN CA" + + "OLD PERSIAN SIGN JAOLD PERSIAN SIGN JIOLD PERSIAN SIGN TAOLD PERSIAN SIG") + ("" + + "N TUOLD PERSIAN SIGN DAOLD PERSIAN SIGN DIOLD PERSIAN SIGN DUOLD PERSIAN" + + " SIGN THAOLD PERSIAN SIGN PAOLD PERSIAN SIGN BAOLD PERSIAN SIGN FAOLD PE" + + "RSIAN SIGN NAOLD PERSIAN SIGN NUOLD PERSIAN SIGN MAOLD PERSIAN SIGN MIOL" + + "D PERSIAN SIGN MUOLD PERSIAN SIGN YAOLD PERSIAN SIGN VAOLD PERSIAN SIGN " + + "VIOLD PERSIAN SIGN RAOLD PERSIAN SIGN RUOLD PERSIAN SIGN LAOLD PERSIAN S" + + "IGN SAOLD PERSIAN SIGN ZAOLD PERSIAN SIGN SHAOLD PERSIAN SIGN SSAOLD PER" + + "SIAN SIGN HAOLD PERSIAN SIGN AURAMAZDAAOLD PERSIAN SIGN AURAMAZDAA-2OLD " + + "PERSIAN SIGN AURAMAZDAAHAOLD PERSIAN SIGN XSHAAYATHIYAOLD PERSIAN SIGN D" + + "AHYAAUSHOLD PERSIAN SIGN DAHYAAUSH-2OLD PERSIAN SIGN BAGAOLD PERSIAN SIG" + + "N BUUMISHOLD PERSIAN WORD DIVIDEROLD PERSIAN NUMBER ONEOLD PERSIAN NUMBE" + + "R TWOOLD PERSIAN NUMBER TENOLD PERSIAN NUMBER TWENTYOLD PERSIAN NUMBER H" + + "UNDREDDESERET CAPITAL LETTER LONG IDESERET CAPITAL LETTER LONG EDESERET " + + "CAPITAL LETTER LONG ADESERET CAPITAL LETTER LONG AHDESERET CAPITAL LETTE" + + "R LONG ODESERET CAPITAL LETTER LONG OODESERET CAPITAL LETTER SHORT IDESE" + + "RET CAPITAL LETTER SHORT EDESERET CAPITAL LETTER SHORT ADESERET CAPITAL " + + "LETTER SHORT AHDESERET CAPITAL LETTER SHORT ODESERET CAPITAL LETTER SHOR" + + "T OODESERET CAPITAL LETTER AYDESERET CAPITAL LETTER OWDESERET CAPITAL LE" + + "TTER WUDESERET CAPITAL LETTER YEEDESERET CAPITAL LETTER HDESERET CAPITAL" + + " LETTER PEEDESERET CAPITAL LETTER BEEDESERET CAPITAL LETTER TEEDESERET C" + + "APITAL LETTER DEEDESERET CAPITAL LETTER CHEEDESERET CAPITAL LETTER JEEDE" + + "SERET CAPITAL LETTER KAYDESERET CAPITAL LETTER GAYDESERET CAPITAL LETTER" + + " EFDESERET CAPITAL LETTER VEEDESERET CAPITAL LETTER ETHDESERET CAPITAL L" + + "ETTER THEEDESERET CAPITAL LETTER ESDESERET CAPITAL LETTER ZEEDESERET CAP" + + "ITAL LETTER ESHDESERET CAPITAL LETTER ZHEEDESERET CAPITAL LETTER ERDESER" + + "ET CAPITAL LETTER ELDESERET CAPITAL LETTER EMDESERET CAPITAL LETTER ENDE" + + "SERET CAPITAL LETTER ENGDESERET CAPITAL LETTER OIDESERET CAPITAL LETTER " + + "EWDESERET SMALL LETTER LONG IDESERET SMALL LETTER LONG EDESERET SMALL LE" + + "TTER LONG ADESERET SMALL LETTER LONG AHDESERET SMALL LETTER LONG ODESERE" + + "T SMALL LETTER LONG OODESERET SMALL LETTER SHORT IDESERET SMALL LETTER S" + + "HORT EDESERET SMALL LETTER SHORT ADESERET SMALL LETTER SHORT AHDESERET S" + + "MALL LETTER SHORT ODESERET SMALL LETTER SHORT OODESERET SMALL LETTER AYD" + + "ESERET SMALL LETTER OWDESERET SMALL LETTER WUDESERET SMALL LETTER YEEDES" + + "ERET SMALL LETTER HDESERET SMALL LETTER PEEDESERET SMALL LETTER BEEDESER" + + "ET SMALL LETTER TEEDESERET SMALL LETTER DEEDESERET SMALL LETTER CHEEDESE" + + "RET SMALL LETTER JEEDESERET SMALL LETTER KAYDESERET SMALL LETTER GAYDESE" + + "RET SMALL LETTER EFDESERET SMALL LETTER VEEDESERET SMALL LETTER ETHDESER" + + "ET SMALL LETTER THEEDESERET SMALL LETTER ESDESERET SMALL LETTER ZEEDESER" + + "ET SMALL LETTER ESHDESERET SMALL LETTER ZHEEDESERET SMALL LETTER ERDESER" + + "ET SMALL LETTER ELDESERET SMALL LETTER EMDESERET SMALL LETTER ENDESERET " + + "SMALL LETTER ENGDESERET SMALL LETTER OIDESERET SMALL LETTER EWSHAVIAN LE" + + "TTER PEEPSHAVIAN LETTER TOTSHAVIAN LETTER KICKSHAVIAN LETTER FEESHAVIAN " + + "LETTER THIGHSHAVIAN LETTER SOSHAVIAN LETTER SURESHAVIAN LETTER CHURCHSHA" + + "VIAN LETTER YEASHAVIAN LETTER HUNGSHAVIAN LETTER BIBSHAVIAN LETTER DEADS" + + "HAVIAN LETTER GAGSHAVIAN LETTER VOWSHAVIAN LETTER THEYSHAVIAN LETTER ZOO" + + "SHAVIAN LETTER MEASURESHAVIAN LETTER JUDGESHAVIAN LETTER WOESHAVIAN LETT" + + "ER HA-HASHAVIAN LETTER LOLLSHAVIAN LETTER MIMESHAVIAN LETTER IFSHAVIAN L" + + "ETTER EGGSHAVIAN LETTER ASHSHAVIAN LETTER ADOSHAVIAN LETTER ONSHAVIAN LE" + + "TTER WOOLSHAVIAN LETTER OUTSHAVIAN LETTER AHSHAVIAN LETTER ROARSHAVIAN L" + + "ETTER NUNSHAVIAN LETTER EATSHAVIAN LETTER AGESHAVIAN LETTER ICESHAVIAN L" + + "ETTER UPSHAVIAN LETTER OAKSHAVIAN LETTER OOZESHAVIAN LETTER OILSHAVIAN L" + + "ETTER AWESHAVIAN LETTER ARESHAVIAN LETTER ORSHAVIAN LETTER AIRSHAVIAN LE" + + "TTER ERRSHAVIAN LETTER ARRAYSHAVIAN LETTER EARSHAVIAN LETTER IANSHAVIAN " + + "LETTER YEWOSMANYA LETTER ALEFOSMANYA LETTER BAOSMANYA LETTER TAOSMANYA L" + + "ETTER JAOSMANYA LETTER XAOSMANYA LETTER KHAOSMANYA LETTER DEELOSMANYA LE" + + "TTER RAOSMANYA LETTER SAOSMANYA LETTER SHIINOSMANYA LETTER DHAOSMANYA LE" + + "TTER CAYNOSMANYA LETTER GAOSMANYA LETTER FAOSMANYA LETTER QAAFOSMANYA LE" + + "TTER KAAFOSMANYA LETTER LAANOSMANYA LETTER MIINOSMANYA LETTER NUUNOSMANY" + + "A LETTER WAWOSMANYA LETTER HAOSMANYA LETTER YAOSMANYA LETTER AOSMANYA LE" + + "TTER EOSMANYA LETTER IOSMANYA LETTER OOSMANYA LETTER UOSMANYA LETTER AAO" + + "SMANYA LETTER EEOSMANYA LETTER OOOSMANYA DIGIT ZEROOSMANYA DIGIT ONEOSMA" + + "NYA DIGIT TWOOSMANYA DIGIT THREEOSMANYA DIGIT FOUROSMANYA DIGIT FIVEOSMA" + + "NYA DIGIT SIXOSMANYA DIGIT SEVENOSMANYA DIGIT EIGHTOSMANYA DIGIT NINEOSA" + + "GE CAPITAL LETTER AOSAGE CAPITAL LETTER AIOSAGE CAPITAL LETTER AINOSAGE " + + "CAPITAL LETTER AHOSAGE CAPITAL LETTER BRAOSAGE CAPITAL LETTER CHAOSAGE C") + ("" + + "APITAL LETTER EHCHAOSAGE CAPITAL LETTER EOSAGE CAPITAL LETTER EINOSAGE C" + + "APITAL LETTER HAOSAGE CAPITAL LETTER HYAOSAGE CAPITAL LETTER IOSAGE CAPI" + + "TAL LETTER KAOSAGE CAPITAL LETTER EHKAOSAGE CAPITAL LETTER KYAOSAGE CAPI" + + "TAL LETTER LAOSAGE CAPITAL LETTER MAOSAGE CAPITAL LETTER NAOSAGE CAPITAL" + + " LETTER OOSAGE CAPITAL LETTER OINOSAGE CAPITAL LETTER PAOSAGE CAPITAL LE" + + "TTER EHPAOSAGE CAPITAL LETTER SAOSAGE CAPITAL LETTER SHAOSAGE CAPITAL LE" + + "TTER TAOSAGE CAPITAL LETTER EHTAOSAGE CAPITAL LETTER TSAOSAGE CAPITAL LE" + + "TTER EHTSAOSAGE CAPITAL LETTER TSHAOSAGE CAPITAL LETTER DHAOSAGE CAPITAL" + + " LETTER UOSAGE CAPITAL LETTER WAOSAGE CAPITAL LETTER KHAOSAGE CAPITAL LE" + + "TTER GHAOSAGE CAPITAL LETTER ZAOSAGE CAPITAL LETTER ZHAOSAGE SMALL LETTE" + + "R AOSAGE SMALL LETTER AIOSAGE SMALL LETTER AINOSAGE SMALL LETTER AHOSAGE" + + " SMALL LETTER BRAOSAGE SMALL LETTER CHAOSAGE SMALL LETTER EHCHAOSAGE SMA" + + "LL LETTER EOSAGE SMALL LETTER EINOSAGE SMALL LETTER HAOSAGE SMALL LETTER" + + " HYAOSAGE SMALL LETTER IOSAGE SMALL LETTER KAOSAGE SMALL LETTER EHKAOSAG" + + "E SMALL LETTER KYAOSAGE SMALL LETTER LAOSAGE SMALL LETTER MAOSAGE SMALL " + + "LETTER NAOSAGE SMALL LETTER OOSAGE SMALL LETTER OINOSAGE SMALL LETTER PA" + + "OSAGE SMALL LETTER EHPAOSAGE SMALL LETTER SAOSAGE SMALL LETTER SHAOSAGE " + + "SMALL LETTER TAOSAGE SMALL LETTER EHTAOSAGE SMALL LETTER TSAOSAGE SMALL " + + "LETTER EHTSAOSAGE SMALL LETTER TSHAOSAGE SMALL LETTER DHAOSAGE SMALL LET" + + "TER UOSAGE SMALL LETTER WAOSAGE SMALL LETTER KHAOSAGE SMALL LETTER GHAOS" + + "AGE SMALL LETTER ZAOSAGE SMALL LETTER ZHAELBASAN LETTER AELBASAN LETTER " + + "BEELBASAN LETTER CEELBASAN LETTER CHEELBASAN LETTER DEELBASAN LETTER NDE" + + "ELBASAN LETTER DHEELBASAN LETTER EIELBASAN LETTER EELBASAN LETTER FEELBA" + + "SAN LETTER GEELBASAN LETTER GJEELBASAN LETTER HEELBASAN LETTER IELBASAN " + + "LETTER JEELBASAN LETTER KEELBASAN LETTER LEELBASAN LETTER LLEELBASAN LET" + + "TER MEELBASAN LETTER NEELBASAN LETTER NAELBASAN LETTER NJEELBASAN LETTER" + + " OELBASAN LETTER PEELBASAN LETTER QEELBASAN LETTER REELBASAN LETTER RREE" + + "LBASAN LETTER SEELBASAN LETTER SHEELBASAN LETTER TEELBASAN LETTER THEELB" + + "ASAN LETTER UELBASAN LETTER VEELBASAN LETTER XEELBASAN LETTER YELBASAN L" + + "ETTER ZEELBASAN LETTER ZHEELBASAN LETTER GHEELBASAN LETTER GHAMMAELBASAN" + + " LETTER KHECAUCASIAN ALBANIAN LETTER ALTCAUCASIAN ALBANIAN LETTER BETCAU" + + "CASIAN ALBANIAN LETTER GIMCAUCASIAN ALBANIAN LETTER DATCAUCASIAN ALBANIA" + + "N LETTER EBCAUCASIAN ALBANIAN LETTER ZARLCAUCASIAN ALBANIAN LETTER EYNCA" + + "UCASIAN ALBANIAN LETTER ZHILCAUCASIAN ALBANIAN LETTER TASCAUCASIAN ALBAN" + + "IAN LETTER CHACAUCASIAN ALBANIAN LETTER YOWDCAUCASIAN ALBANIAN LETTER ZH" + + "ACAUCASIAN ALBANIAN LETTER IRBCAUCASIAN ALBANIAN LETTER SHACAUCASIAN ALB" + + "ANIAN LETTER LANCAUCASIAN ALBANIAN LETTER INYACAUCASIAN ALBANIAN LETTER " + + "XEYNCAUCASIAN ALBANIAN LETTER DYANCAUCASIAN ALBANIAN LETTER CARCAUCASIAN" + + " ALBANIAN LETTER JHOXCAUCASIAN ALBANIAN LETTER KARCAUCASIAN ALBANIAN LET" + + "TER LYITCAUCASIAN ALBANIAN LETTER HEYTCAUCASIAN ALBANIAN LETTER QAYCAUCA" + + "SIAN ALBANIAN LETTER AORCAUCASIAN ALBANIAN LETTER CHOYCAUCASIAN ALBANIAN" + + " LETTER CHICAUCASIAN ALBANIAN LETTER CYAYCAUCASIAN ALBANIAN LETTER MAQCA" + + "UCASIAN ALBANIAN LETTER QARCAUCASIAN ALBANIAN LETTER NOWCCAUCASIAN ALBAN" + + "IAN LETTER DZYAYCAUCASIAN ALBANIAN LETTER SHAKCAUCASIAN ALBANIAN LETTER " + + "JAYNCAUCASIAN ALBANIAN LETTER ONCAUCASIAN ALBANIAN LETTER TYAYCAUCASIAN " + + "ALBANIAN LETTER FAMCAUCASIAN ALBANIAN LETTER DZAYCAUCASIAN ALBANIAN LETT" + + "ER CHATCAUCASIAN ALBANIAN LETTER PENCAUCASIAN ALBANIAN LETTER GHEYSCAUCA" + + "SIAN ALBANIAN LETTER RATCAUCASIAN ALBANIAN LETTER SEYKCAUCASIAN ALBANIAN" + + " LETTER VEYZCAUCASIAN ALBANIAN LETTER TIWRCAUCASIAN ALBANIAN LETTER SHOY" + + "CAUCASIAN ALBANIAN LETTER IWNCAUCASIAN ALBANIAN LETTER CYAWCAUCASIAN ALB" + + "ANIAN LETTER CAYNCAUCASIAN ALBANIAN LETTER YAYDCAUCASIAN ALBANIAN LETTER" + + " PIWRCAUCASIAN ALBANIAN LETTER KIWCAUCASIAN ALBANIAN CITATION MARKLINEAR" + + " A SIGN AB001LINEAR A SIGN AB002LINEAR A SIGN AB003LINEAR A SIGN AB004LI" + + "NEAR A SIGN AB005LINEAR A SIGN AB006LINEAR A SIGN AB007LINEAR A SIGN AB0" + + "08LINEAR A SIGN AB009LINEAR A SIGN AB010LINEAR A SIGN AB011LINEAR A SIGN" + + " AB013LINEAR A SIGN AB016LINEAR A SIGN AB017LINEAR A SIGN AB020LINEAR A " + + "SIGN AB021LINEAR A SIGN AB021FLINEAR A SIGN AB021MLINEAR A SIGN AB022LIN" + + "EAR A SIGN AB022FLINEAR A SIGN AB022MLINEAR A SIGN AB023LINEAR A SIGN AB" + + "023MLINEAR A SIGN AB024LINEAR A SIGN AB026LINEAR A SIGN AB027LINEAR A SI" + + "GN AB028LINEAR A SIGN A028BLINEAR A SIGN AB029LINEAR A SIGN AB030LINEAR " + + "A SIGN AB031LINEAR A SIGN AB034LINEAR A SIGN AB037LINEAR A SIGN AB038LIN" + + "EAR A SIGN AB039LINEAR A SIGN AB040LINEAR A SIGN AB041LINEAR A SIGN AB04" + + "4LINEAR A SIGN AB045LINEAR A SIGN AB046LINEAR A SIGN AB047LINEAR A SIGN " + + "AB048LINEAR A SIGN AB049LINEAR A SIGN AB050LINEAR A SIGN AB051LINEAR A S") + ("" + + "IGN AB053LINEAR A SIGN AB054LINEAR A SIGN AB055LINEAR A SIGN AB056LINEAR" + + " A SIGN AB057LINEAR A SIGN AB058LINEAR A SIGN AB059LINEAR A SIGN AB060LI" + + "NEAR A SIGN AB061LINEAR A SIGN AB065LINEAR A SIGN AB066LINEAR A SIGN AB0" + + "67LINEAR A SIGN AB069LINEAR A SIGN AB070LINEAR A SIGN AB073LINEAR A SIGN" + + " AB074LINEAR A SIGN AB076LINEAR A SIGN AB077LINEAR A SIGN AB078LINEAR A " + + "SIGN AB079LINEAR A SIGN AB080LINEAR A SIGN AB081LINEAR A SIGN AB082LINEA" + + "R A SIGN AB085LINEAR A SIGN AB086LINEAR A SIGN AB087LINEAR A SIGN A100-1" + + "02LINEAR A SIGN AB118LINEAR A SIGN AB120LINEAR A SIGN A120BLINEAR A SIGN" + + " AB122LINEAR A SIGN AB123LINEAR A SIGN AB131ALINEAR A SIGN AB131BLINEAR " + + "A SIGN A131CLINEAR A SIGN AB164LINEAR A SIGN AB171LINEAR A SIGN AB180LIN" + + "EAR A SIGN AB188LINEAR A SIGN AB191LINEAR A SIGN A301LINEAR A SIGN A302L" + + "INEAR A SIGN A303LINEAR A SIGN A304LINEAR A SIGN A305LINEAR A SIGN A306L" + + "INEAR A SIGN A307LINEAR A SIGN A308LINEAR A SIGN A309ALINEAR A SIGN A309" + + "BLINEAR A SIGN A309CLINEAR A SIGN A310LINEAR A SIGN A311LINEAR A SIGN A3" + + "12LINEAR A SIGN A313ALINEAR A SIGN A313BLINEAR A SIGN A313CLINEAR A SIGN" + + " A314LINEAR A SIGN A315LINEAR A SIGN A316LINEAR A SIGN A317LINEAR A SIGN" + + " A318LINEAR A SIGN A319LINEAR A SIGN A320LINEAR A SIGN A321LINEAR A SIGN" + + " A322LINEAR A SIGN A323LINEAR A SIGN A324LINEAR A SIGN A325LINEAR A SIGN" + + " A326LINEAR A SIGN A327LINEAR A SIGN A328LINEAR A SIGN A329LINEAR A SIGN" + + " A330LINEAR A SIGN A331LINEAR A SIGN A332LINEAR A SIGN A333LINEAR A SIGN" + + " A334LINEAR A SIGN A335LINEAR A SIGN A336LINEAR A SIGN A337LINEAR A SIGN" + + " A338LINEAR A SIGN A339LINEAR A SIGN A340LINEAR A SIGN A341LINEAR A SIGN" + + " A342LINEAR A SIGN A343LINEAR A SIGN A344LINEAR A SIGN A345LINEAR A SIGN" + + " A346LINEAR A SIGN A347LINEAR A SIGN A348LINEAR A SIGN A349LINEAR A SIGN" + + " A350LINEAR A SIGN A351LINEAR A SIGN A352LINEAR A SIGN A353LINEAR A SIGN" + + " A354LINEAR A SIGN A355LINEAR A SIGN A356LINEAR A SIGN A357LINEAR A SIGN" + + " A358LINEAR A SIGN A359LINEAR A SIGN A360LINEAR A SIGN A361LINEAR A SIGN" + + " A362LINEAR A SIGN A363LINEAR A SIGN A364LINEAR A SIGN A365LINEAR A SIGN" + + " A366LINEAR A SIGN A367LINEAR A SIGN A368LINEAR A SIGN A369LINEAR A SIGN" + + " A370LINEAR A SIGN A371LINEAR A SIGN A400-VASLINEAR A SIGN A401-VASLINEA" + + "R A SIGN A402-VASLINEAR A SIGN A403-VASLINEAR A SIGN A404-VASLINEAR A SI" + + "GN A405-VASLINEAR A SIGN A406-VASLINEAR A SIGN A407-VASLINEAR A SIGN A40" + + "8-VASLINEAR A SIGN A409-VASLINEAR A SIGN A410-VASLINEAR A SIGN A411-VASL" + + "INEAR A SIGN A412-VASLINEAR A SIGN A413-VASLINEAR A SIGN A414-VASLINEAR " + + "A SIGN A415-VASLINEAR A SIGN A416-VASLINEAR A SIGN A417-VASLINEAR A SIGN" + + " A418-VASLINEAR A SIGN A501LINEAR A SIGN A502LINEAR A SIGN A503LINEAR A " + + "SIGN A504LINEAR A SIGN A505LINEAR A SIGN A506LINEAR A SIGN A508LINEAR A " + + "SIGN A509LINEAR A SIGN A510LINEAR A SIGN A511LINEAR A SIGN A512LINEAR A " + + "SIGN A513LINEAR A SIGN A515LINEAR A SIGN A516LINEAR A SIGN A520LINEAR A " + + "SIGN A521LINEAR A SIGN A523LINEAR A SIGN A524LINEAR A SIGN A525LINEAR A " + + "SIGN A526LINEAR A SIGN A527LINEAR A SIGN A528LINEAR A SIGN A529LINEAR A " + + "SIGN A530LINEAR A SIGN A531LINEAR A SIGN A532LINEAR A SIGN A534LINEAR A " + + "SIGN A535LINEAR A SIGN A536LINEAR A SIGN A537LINEAR A SIGN A538LINEAR A " + + "SIGN A539LINEAR A SIGN A540LINEAR A SIGN A541LINEAR A SIGN A542LINEAR A " + + "SIGN A545LINEAR A SIGN A547LINEAR A SIGN A548LINEAR A SIGN A549LINEAR A " + + "SIGN A550LINEAR A SIGN A551LINEAR A SIGN A552LINEAR A SIGN A553LINEAR A " + + "SIGN A554LINEAR A SIGN A555LINEAR A SIGN A556LINEAR A SIGN A557LINEAR A " + + "SIGN A559LINEAR A SIGN A563LINEAR A SIGN A564LINEAR A SIGN A565LINEAR A " + + "SIGN A566LINEAR A SIGN A568LINEAR A SIGN A569LINEAR A SIGN A570LINEAR A " + + "SIGN A571LINEAR A SIGN A572LINEAR A SIGN A573LINEAR A SIGN A574LINEAR A " + + "SIGN A575LINEAR A SIGN A576LINEAR A SIGN A577LINEAR A SIGN A578LINEAR A " + + "SIGN A579LINEAR A SIGN A580LINEAR A SIGN A581LINEAR A SIGN A582LINEAR A " + + "SIGN A583LINEAR A SIGN A584LINEAR A SIGN A585LINEAR A SIGN A586LINEAR A " + + "SIGN A587LINEAR A SIGN A588LINEAR A SIGN A589LINEAR A SIGN A591LINEAR A " + + "SIGN A592LINEAR A SIGN A594LINEAR A SIGN A595LINEAR A SIGN A596LINEAR A " + + "SIGN A598LINEAR A SIGN A600LINEAR A SIGN A601LINEAR A SIGN A602LINEAR A " + + "SIGN A603LINEAR A SIGN A604LINEAR A SIGN A606LINEAR A SIGN A608LINEAR A " + + "SIGN A609LINEAR A SIGN A610LINEAR A SIGN A611LINEAR A SIGN A612LINEAR A " + + "SIGN A613LINEAR A SIGN A614LINEAR A SIGN A615LINEAR A SIGN A616LINEAR A " + + "SIGN A617LINEAR A SIGN A618LINEAR A SIGN A619LINEAR A SIGN A620LINEAR A " + + "SIGN A621LINEAR A SIGN A622LINEAR A SIGN A623LINEAR A SIGN A624LINEAR A " + + "SIGN A626LINEAR A SIGN A627LINEAR A SIGN A628LINEAR A SIGN A629LINEAR A " + + "SIGN A634LINEAR A SIGN A637LINEAR A SIGN A638LINEAR A SIGN A640LINEAR A " + + "SIGN A642LINEAR A SIGN A643LINEAR A SIGN A644LINEAR A SIGN A645LINEAR A ") + ("" + + "SIGN A646LINEAR A SIGN A648LINEAR A SIGN A649LINEAR A SIGN A651LINEAR A " + + "SIGN A652LINEAR A SIGN A653LINEAR A SIGN A654LINEAR A SIGN A655LINEAR A " + + "SIGN A656LINEAR A SIGN A657LINEAR A SIGN A658LINEAR A SIGN A659LINEAR A " + + "SIGN A660LINEAR A SIGN A661LINEAR A SIGN A662LINEAR A SIGN A663LINEAR A " + + "SIGN A664LINEAR A SIGN A701 ALINEAR A SIGN A702 BLINEAR A SIGN A703 DLIN" + + "EAR A SIGN A704 ELINEAR A SIGN A705 FLINEAR A SIGN A706 HLINEAR A SIGN A" + + "707 JLINEAR A SIGN A708 KLINEAR A SIGN A709 LLINEAR A SIGN A709-2 L2LINE" + + "AR A SIGN A709-3 L3LINEAR A SIGN A709-4 L4LINEAR A SIGN A709-6 L6LINEAR " + + "A SIGN A710 WLINEAR A SIGN A711 XLINEAR A SIGN A712 YLINEAR A SIGN A713 " + + "OMEGALINEAR A SIGN A714 ABBLINEAR A SIGN A715 BBLINEAR A SIGN A717 DDLIN" + + "EAR A SIGN A726 EYYYLINEAR A SIGN A732 JELINEAR A SIGN A800LINEAR A SIGN" + + " A801LINEAR A SIGN A802LINEAR A SIGN A803LINEAR A SIGN A804LINEAR A SIGN" + + " A805LINEAR A SIGN A806LINEAR A SIGN A807CYPRIOT SYLLABLE ACYPRIOT SYLLA" + + "BLE ECYPRIOT SYLLABLE ICYPRIOT SYLLABLE OCYPRIOT SYLLABLE UCYPRIOT SYLLA" + + "BLE JACYPRIOT SYLLABLE JOCYPRIOT SYLLABLE KACYPRIOT SYLLABLE KECYPRIOT S" + + "YLLABLE KICYPRIOT SYLLABLE KOCYPRIOT SYLLABLE KUCYPRIOT SYLLABLE LACYPRI" + + "OT SYLLABLE LECYPRIOT SYLLABLE LICYPRIOT SYLLABLE LOCYPRIOT SYLLABLE LUC" + + "YPRIOT SYLLABLE MACYPRIOT SYLLABLE MECYPRIOT SYLLABLE MICYPRIOT SYLLABLE" + + " MOCYPRIOT SYLLABLE MUCYPRIOT SYLLABLE NACYPRIOT SYLLABLE NECYPRIOT SYLL" + + "ABLE NICYPRIOT SYLLABLE NOCYPRIOT SYLLABLE NUCYPRIOT SYLLABLE PACYPRIOT " + + "SYLLABLE PECYPRIOT SYLLABLE PICYPRIOT SYLLABLE POCYPRIOT SYLLABLE PUCYPR" + + "IOT SYLLABLE RACYPRIOT SYLLABLE RECYPRIOT SYLLABLE RICYPRIOT SYLLABLE RO" + + "CYPRIOT SYLLABLE RUCYPRIOT SYLLABLE SACYPRIOT SYLLABLE SECYPRIOT SYLLABL" + + "E SICYPRIOT SYLLABLE SOCYPRIOT SYLLABLE SUCYPRIOT SYLLABLE TACYPRIOT SYL" + + "LABLE TECYPRIOT SYLLABLE TICYPRIOT SYLLABLE TOCYPRIOT SYLLABLE TUCYPRIOT" + + " SYLLABLE WACYPRIOT SYLLABLE WECYPRIOT SYLLABLE WICYPRIOT SYLLABLE WOCYP" + + "RIOT SYLLABLE XACYPRIOT SYLLABLE XECYPRIOT SYLLABLE ZACYPRIOT SYLLABLE Z" + + "OIMPERIAL ARAMAIC LETTER ALEPHIMPERIAL ARAMAIC LETTER BETHIMPERIAL ARAMA" + + "IC LETTER GIMELIMPERIAL ARAMAIC LETTER DALETHIMPERIAL ARAMAIC LETTER HEI" + + "MPERIAL ARAMAIC LETTER WAWIMPERIAL ARAMAIC LETTER ZAYINIMPERIAL ARAMAIC " + + "LETTER HETHIMPERIAL ARAMAIC LETTER TETHIMPERIAL ARAMAIC LETTER YODHIMPER" + + "IAL ARAMAIC LETTER KAPHIMPERIAL ARAMAIC LETTER LAMEDHIMPERIAL ARAMAIC LE" + + "TTER MEMIMPERIAL ARAMAIC LETTER NUNIMPERIAL ARAMAIC LETTER SAMEKHIMPERIA" + + "L ARAMAIC LETTER AYINIMPERIAL ARAMAIC LETTER PEIMPERIAL ARAMAIC LETTER S" + + "ADHEIMPERIAL ARAMAIC LETTER QOPHIMPERIAL ARAMAIC LETTER RESHIMPERIAL ARA" + + "MAIC LETTER SHINIMPERIAL ARAMAIC LETTER TAWIMPERIAL ARAMAIC SECTION SIGN" + + "IMPERIAL ARAMAIC NUMBER ONEIMPERIAL ARAMAIC NUMBER TWOIMPERIAL ARAMAIC N" + + "UMBER THREEIMPERIAL ARAMAIC NUMBER TENIMPERIAL ARAMAIC NUMBER TWENTYIMPE" + + "RIAL ARAMAIC NUMBER ONE HUNDREDIMPERIAL ARAMAIC NUMBER ONE THOUSANDIMPER" + + "IAL ARAMAIC NUMBER TEN THOUSANDPALMYRENE LETTER ALEPHPALMYRENE LETTER BE" + + "THPALMYRENE LETTER GIMELPALMYRENE LETTER DALETHPALMYRENE LETTER HEPALMYR" + + "ENE LETTER WAWPALMYRENE LETTER ZAYINPALMYRENE LETTER HETHPALMYRENE LETTE" + + "R TETHPALMYRENE LETTER YODHPALMYRENE LETTER KAPHPALMYRENE LETTER LAMEDHP" + + "ALMYRENE LETTER MEMPALMYRENE LETTER FINAL NUNPALMYRENE LETTER NUNPALMYRE" + + "NE LETTER SAMEKHPALMYRENE LETTER AYINPALMYRENE LETTER PEPALMYRENE LETTER" + + " SADHEPALMYRENE LETTER QOPHPALMYRENE LETTER RESHPALMYRENE LETTER SHINPAL" + + "MYRENE LETTER TAWPALMYRENE LEFT-POINTING FLEURONPALMYRENE RIGHT-POINTING" + + " FLEURONPALMYRENE NUMBER ONEPALMYRENE NUMBER TWOPALMYRENE NUMBER THREEPA" + + "LMYRENE NUMBER FOURPALMYRENE NUMBER FIVEPALMYRENE NUMBER TENPALMYRENE NU" + + "MBER TWENTYNABATAEAN LETTER FINAL ALEPHNABATAEAN LETTER ALEPHNABATAEAN L" + + "ETTER FINAL BETHNABATAEAN LETTER BETHNABATAEAN LETTER GIMELNABATAEAN LET" + + "TER DALETHNABATAEAN LETTER FINAL HENABATAEAN LETTER HENABATAEAN LETTER W" + + "AWNABATAEAN LETTER ZAYINNABATAEAN LETTER HETHNABATAEAN LETTER TETHNABATA" + + "EAN LETTER FINAL YODHNABATAEAN LETTER YODHNABATAEAN LETTER FINAL KAPHNAB" + + "ATAEAN LETTER KAPHNABATAEAN LETTER FINAL LAMEDHNABATAEAN LETTER LAMEDHNA" + + "BATAEAN LETTER FINAL MEMNABATAEAN LETTER MEMNABATAEAN LETTER FINAL NUNNA" + + "BATAEAN LETTER NUNNABATAEAN LETTER SAMEKHNABATAEAN LETTER AYINNABATAEAN " + + "LETTER PENABATAEAN LETTER SADHENABATAEAN LETTER QOPHNABATAEAN LETTER RES" + + "HNABATAEAN LETTER FINAL SHINNABATAEAN LETTER SHINNABATAEAN LETTER TAWNAB" + + "ATAEAN NUMBER ONENABATAEAN NUMBER TWONABATAEAN NUMBER THREENABATAEAN NUM" + + "BER FOURNABATAEAN CRUCIFORM NUMBER FOURNABATAEAN NUMBER FIVENABATAEAN NU" + + "MBER TENNABATAEAN NUMBER TWENTYNABATAEAN NUMBER ONE HUNDREDHATRAN LETTER" + + " ALEPHHATRAN LETTER BETHHATRAN LETTER GIMELHATRAN LETTER DALETH-RESHHATR" + + "AN LETTER HEHATRAN LETTER WAWHATRAN LETTER ZAYNHATRAN LETTER HETHHATRAN ") + ("" + + "LETTER TETHHATRAN LETTER YODHHATRAN LETTER KAPHHATRAN LETTER LAMEDHHATRA" + + "N LETTER MEMHATRAN LETTER NUNHATRAN LETTER SAMEKHHATRAN LETTER AYNHATRAN" + + " LETTER PEHATRAN LETTER SADHEHATRAN LETTER QOPHHATRAN LETTER SHINHATRAN " + + "LETTER TAWHATRAN NUMBER ONEHATRAN NUMBER FIVEHATRAN NUMBER TENHATRAN NUM" + + "BER TWENTYHATRAN NUMBER ONE HUNDREDPHOENICIAN LETTER ALFPHOENICIAN LETTE" + + "R BETPHOENICIAN LETTER GAMLPHOENICIAN LETTER DELTPHOENICIAN LETTER HEPHO" + + "ENICIAN LETTER WAUPHOENICIAN LETTER ZAIPHOENICIAN LETTER HETPHOENICIAN L" + + "ETTER TETPHOENICIAN LETTER YODPHOENICIAN LETTER KAFPHOENICIAN LETTER LAM" + + "DPHOENICIAN LETTER MEMPHOENICIAN LETTER NUNPHOENICIAN LETTER SEMKPHOENIC" + + "IAN LETTER AINPHOENICIAN LETTER PEPHOENICIAN LETTER SADEPHOENICIAN LETTE" + + "R QOFPHOENICIAN LETTER ROSHPHOENICIAN LETTER SHINPHOENICIAN LETTER TAUPH" + + "OENICIAN NUMBER ONEPHOENICIAN NUMBER TENPHOENICIAN NUMBER TWENTYPHOENICI" + + "AN NUMBER ONE HUNDREDPHOENICIAN NUMBER TWOPHOENICIAN NUMBER THREEPHOENIC" + + "IAN WORD SEPARATORLYDIAN LETTER ALYDIAN LETTER BLYDIAN LETTER GLYDIAN LE" + + "TTER DLYDIAN LETTER ELYDIAN LETTER VLYDIAN LETTER ILYDIAN LETTER YLYDIAN" + + " LETTER KLYDIAN LETTER LLYDIAN LETTER MLYDIAN LETTER NLYDIAN LETTER OLYD" + + "IAN LETTER RLYDIAN LETTER SSLYDIAN LETTER TLYDIAN LETTER ULYDIAN LETTER " + + "FLYDIAN LETTER QLYDIAN LETTER SLYDIAN LETTER TTLYDIAN LETTER ANLYDIAN LE" + + "TTER ENLYDIAN LETTER LYLYDIAN LETTER NNLYDIAN LETTER CLYDIAN TRIANGULAR " + + "MARKMEROITIC HIEROGLYPHIC LETTER AMEROITIC HIEROGLYPHIC LETTER EMEROITIC" + + " HIEROGLYPHIC LETTER IMEROITIC HIEROGLYPHIC LETTER OMEROITIC HIEROGLYPHI" + + "C LETTER YAMEROITIC HIEROGLYPHIC LETTER WAMEROITIC HIEROGLYPHIC LETTER B" + + "AMEROITIC HIEROGLYPHIC LETTER BA-2MEROITIC HIEROGLYPHIC LETTER PAMEROITI" + + "C HIEROGLYPHIC LETTER MAMEROITIC HIEROGLYPHIC LETTER NAMEROITIC HIEROGLY" + + "PHIC LETTER NA-2MEROITIC HIEROGLYPHIC LETTER NEMEROITIC HIEROGLYPHIC LET" + + "TER NE-2MEROITIC HIEROGLYPHIC LETTER RAMEROITIC HIEROGLYPHIC LETTER RA-2" + + "MEROITIC HIEROGLYPHIC LETTER LAMEROITIC HIEROGLYPHIC LETTER KHAMEROITIC " + + "HIEROGLYPHIC LETTER HHAMEROITIC HIEROGLYPHIC LETTER SAMEROITIC HIEROGLYP" + + "HIC LETTER SA-2MEROITIC HIEROGLYPHIC LETTER SEMEROITIC HIEROGLYPHIC LETT" + + "ER KAMEROITIC HIEROGLYPHIC LETTER QAMEROITIC HIEROGLYPHIC LETTER TAMEROI" + + "TIC HIEROGLYPHIC LETTER TA-2MEROITIC HIEROGLYPHIC LETTER TEMEROITIC HIER" + + "OGLYPHIC LETTER TE-2MEROITIC HIEROGLYPHIC LETTER TOMEROITIC HIEROGLYPHIC" + + " LETTER DAMEROITIC HIEROGLYPHIC SYMBOL VIDJMEROITIC HIEROGLYPHIC SYMBOL " + + "VIDJ-2MEROITIC CURSIVE LETTER AMEROITIC CURSIVE LETTER EMEROITIC CURSIVE" + + " LETTER IMEROITIC CURSIVE LETTER OMEROITIC CURSIVE LETTER YAMEROITIC CUR" + + "SIVE LETTER WAMEROITIC CURSIVE LETTER BAMEROITIC CURSIVE LETTER PAMEROIT" + + "IC CURSIVE LETTER MAMEROITIC CURSIVE LETTER NAMEROITIC CURSIVE LETTER NE" + + "MEROITIC CURSIVE LETTER RAMEROITIC CURSIVE LETTER LAMEROITIC CURSIVE LET" + + "TER KHAMEROITIC CURSIVE LETTER HHAMEROITIC CURSIVE LETTER SAMEROITIC CUR" + + "SIVE LETTER ARCHAIC SAMEROITIC CURSIVE LETTER SEMEROITIC CURSIVE LETTER " + + "KAMEROITIC CURSIVE LETTER QAMEROITIC CURSIVE LETTER TAMEROITIC CURSIVE L" + + "ETTER TEMEROITIC CURSIVE LETTER TOMEROITIC CURSIVE LETTER DAMEROITIC CUR" + + "SIVE FRACTION ELEVEN TWELFTHSMEROITIC CURSIVE FRACTION ONE HALFMEROITIC " + + "CURSIVE LOGOGRAM RMTMEROITIC CURSIVE LOGOGRAM IMNMEROITIC CURSIVE NUMBER" + + " ONEMEROITIC CURSIVE NUMBER TWOMEROITIC CURSIVE NUMBER THREEMEROITIC CUR" + + "SIVE NUMBER FOURMEROITIC CURSIVE NUMBER FIVEMEROITIC CURSIVE NUMBER SIXM" + + "EROITIC CURSIVE NUMBER SEVENMEROITIC CURSIVE NUMBER EIGHTMEROITIC CURSIV" + + "E NUMBER NINEMEROITIC CURSIVE NUMBER TENMEROITIC CURSIVE NUMBER TWENTYME" + + "ROITIC CURSIVE NUMBER THIRTYMEROITIC CURSIVE NUMBER FORTYMEROITIC CURSIV" + + "E NUMBER FIFTYMEROITIC CURSIVE NUMBER SIXTYMEROITIC CURSIVE NUMBER SEVEN" + + "TYMEROITIC CURSIVE NUMBER ONE HUNDREDMEROITIC CURSIVE NUMBER TWO HUNDRED" + + "MEROITIC CURSIVE NUMBER THREE HUNDREDMEROITIC CURSIVE NUMBER FOUR HUNDRE" + + "DMEROITIC CURSIVE NUMBER FIVE HUNDREDMEROITIC CURSIVE NUMBER SIX HUNDRED" + + "MEROITIC CURSIVE NUMBER SEVEN HUNDREDMEROITIC CURSIVE NUMBER EIGHT HUNDR" + + "EDMEROITIC CURSIVE NUMBER NINE HUNDREDMEROITIC CURSIVE NUMBER ONE THOUSA" + + "NDMEROITIC CURSIVE NUMBER TWO THOUSANDMEROITIC CURSIVE NUMBER THREE THOU" + + "SANDMEROITIC CURSIVE NUMBER FOUR THOUSANDMEROITIC CURSIVE NUMBER FIVE TH" + + "OUSANDMEROITIC CURSIVE NUMBER SIX THOUSANDMEROITIC CURSIVE NUMBER SEVEN " + + "THOUSANDMEROITIC CURSIVE NUMBER EIGHT THOUSANDMEROITIC CURSIVE NUMBER NI" + + "NE THOUSANDMEROITIC CURSIVE NUMBER TEN THOUSANDMEROITIC CURSIVE NUMBER T" + + "WENTY THOUSANDMEROITIC CURSIVE NUMBER THIRTY THOUSANDMEROITIC CURSIVE NU" + + "MBER FORTY THOUSANDMEROITIC CURSIVE NUMBER FIFTY THOUSANDMEROITIC CURSIV" + + "E NUMBER SIXTY THOUSANDMEROITIC CURSIVE NUMBER SEVENTY THOUSANDMEROITIC " + + "CURSIVE NUMBER EIGHTY THOUSANDMEROITIC CURSIVE NUMBER NINETY THOUSANDMER") + ("" + + "OITIC CURSIVE NUMBER ONE HUNDRED THOUSANDMEROITIC CURSIVE NUMBER TWO HUN" + + "DRED THOUSANDMEROITIC CURSIVE NUMBER THREE HUNDRED THOUSANDMEROITIC CURS" + + "IVE NUMBER FOUR HUNDRED THOUSANDMEROITIC CURSIVE NUMBER FIVE HUNDRED THO" + + "USANDMEROITIC CURSIVE NUMBER SIX HUNDRED THOUSANDMEROITIC CURSIVE NUMBER" + + " SEVEN HUNDRED THOUSANDMEROITIC CURSIVE NUMBER EIGHT HUNDRED THOUSANDMER" + + "OITIC CURSIVE NUMBER NINE HUNDRED THOUSANDMEROITIC CURSIVE FRACTION ONE " + + "TWELFTHMEROITIC CURSIVE FRACTION TWO TWELFTHSMEROITIC CURSIVE FRACTION T" + + "HREE TWELFTHSMEROITIC CURSIVE FRACTION FOUR TWELFTHSMEROITIC CURSIVE FRA" + + "CTION FIVE TWELFTHSMEROITIC CURSIVE FRACTION SIX TWELFTHSMEROITIC CURSIV" + + "E FRACTION SEVEN TWELFTHSMEROITIC CURSIVE FRACTION EIGHT TWELFTHSMEROITI" + + "C CURSIVE FRACTION NINE TWELFTHSMEROITIC CURSIVE FRACTION TEN TWELFTHSKH" + + "AROSHTHI LETTER AKHAROSHTHI VOWEL SIGN IKHAROSHTHI VOWEL SIGN UKHAROSHTH" + + "I VOWEL SIGN VOCALIC RKHAROSHTHI VOWEL SIGN EKHAROSHTHI VOWEL SIGN OKHAR" + + "OSHTHI VOWEL LENGTH MARKKHAROSHTHI SIGN DOUBLE RING BELOWKHAROSHTHI SIGN" + + " ANUSVARAKHAROSHTHI SIGN VISARGAKHAROSHTHI LETTER KAKHAROSHTHI LETTER KH" + + "AKHAROSHTHI LETTER GAKHAROSHTHI LETTER GHAKHAROSHTHI LETTER CAKHAROSHTHI" + + " LETTER CHAKHAROSHTHI LETTER JAKHAROSHTHI LETTER NYAKHAROSHTHI LETTER TT" + + "AKHAROSHTHI LETTER TTHAKHAROSHTHI LETTER DDAKHAROSHTHI LETTER DDHAKHAROS" + + "HTHI LETTER NNAKHAROSHTHI LETTER TAKHAROSHTHI LETTER THAKHAROSHTHI LETTE" + + "R DAKHAROSHTHI LETTER DHAKHAROSHTHI LETTER NAKHAROSHTHI LETTER PAKHAROSH" + + "THI LETTER PHAKHAROSHTHI LETTER BAKHAROSHTHI LETTER BHAKHAROSHTHI LETTER" + + " MAKHAROSHTHI LETTER YAKHAROSHTHI LETTER RAKHAROSHTHI LETTER LAKHAROSHTH" + + "I LETTER VAKHAROSHTHI LETTER SHAKHAROSHTHI LETTER SSAKHAROSHTHI LETTER S" + + "AKHAROSHTHI LETTER ZAKHAROSHTHI LETTER HAKHAROSHTHI LETTER KKAKHAROSHTHI" + + " LETTER TTTHAKHAROSHTHI SIGN BAR ABOVEKHAROSHTHI SIGN CAUDAKHAROSHTHI SI" + + "GN DOT BELOWKHAROSHTHI VIRAMAKHAROSHTHI DIGIT ONEKHAROSHTHI DIGIT TWOKHA" + + "ROSHTHI DIGIT THREEKHAROSHTHI DIGIT FOURKHAROSHTHI NUMBER TENKHAROSHTHI " + + "NUMBER TWENTYKHAROSHTHI NUMBER ONE HUNDREDKHAROSHTHI NUMBER ONE THOUSAND" + + "KHAROSHTHI PUNCTUATION DOTKHAROSHTHI PUNCTUATION SMALL CIRCLEKHAROSHTHI " + + "PUNCTUATION CIRCLEKHAROSHTHI PUNCTUATION CRESCENT BARKHAROSHTHI PUNCTUAT" + + "ION MANGALAMKHAROSHTHI PUNCTUATION LOTUSKHAROSHTHI PUNCTUATION DANDAKHAR" + + "OSHTHI PUNCTUATION DOUBLE DANDAKHAROSHTHI PUNCTUATION LINESOLD SOUTH ARA" + + "BIAN LETTER HEOLD SOUTH ARABIAN LETTER LAMEDHOLD SOUTH ARABIAN LETTER HE" + + "THOLD SOUTH ARABIAN LETTER MEMOLD SOUTH ARABIAN LETTER QOPHOLD SOUTH ARA" + + "BIAN LETTER WAWOLD SOUTH ARABIAN LETTER SHINOLD SOUTH ARABIAN LETTER RES" + + "HOLD SOUTH ARABIAN LETTER BETHOLD SOUTH ARABIAN LETTER TAWOLD SOUTH ARAB" + + "IAN LETTER SATOLD SOUTH ARABIAN LETTER KAPHOLD SOUTH ARABIAN LETTER NUNO" + + "LD SOUTH ARABIAN LETTER KHETHOLD SOUTH ARABIAN LETTER SADHEOLD SOUTH ARA" + + "BIAN LETTER SAMEKHOLD SOUTH ARABIAN LETTER FEOLD SOUTH ARABIAN LETTER AL" + + "EFOLD SOUTH ARABIAN LETTER AYNOLD SOUTH ARABIAN LETTER DHADHEOLD SOUTH A" + + "RABIAN LETTER GIMELOLD SOUTH ARABIAN LETTER DALETHOLD SOUTH ARABIAN LETT" + + "ER GHAYNOLD SOUTH ARABIAN LETTER TETHOLD SOUTH ARABIAN LETTER ZAYNOLD SO" + + "UTH ARABIAN LETTER DHALETHOLD SOUTH ARABIAN LETTER YODHOLD SOUTH ARABIAN" + + " LETTER THAWOLD SOUTH ARABIAN LETTER THETHOLD SOUTH ARABIAN NUMBER ONEOL" + + "D SOUTH ARABIAN NUMBER FIFTYOLD SOUTH ARABIAN NUMERIC INDICATOROLD NORTH" + + " ARABIAN LETTER HEHOLD NORTH ARABIAN LETTER LAMOLD NORTH ARABIAN LETTER " + + "HAHOLD NORTH ARABIAN LETTER MEEMOLD NORTH ARABIAN LETTER QAFOLD NORTH AR" + + "ABIAN LETTER WAWOLD NORTH ARABIAN LETTER ES-2OLD NORTH ARABIAN LETTER RE" + + "HOLD NORTH ARABIAN LETTER BEHOLD NORTH ARABIAN LETTER TEHOLD NORTH ARABI" + + "AN LETTER ES-1OLD NORTH ARABIAN LETTER KAFOLD NORTH ARABIAN LETTER NOONO" + + "LD NORTH ARABIAN LETTER KHAHOLD NORTH ARABIAN LETTER SADOLD NORTH ARABIA" + + "N LETTER ES-3OLD NORTH ARABIAN LETTER FEHOLD NORTH ARABIAN LETTER ALEFOL" + + "D NORTH ARABIAN LETTER AINOLD NORTH ARABIAN LETTER DADOLD NORTH ARABIAN " + + "LETTER GEEMOLD NORTH ARABIAN LETTER DALOLD NORTH ARABIAN LETTER GHAINOLD" + + " NORTH ARABIAN LETTER TAHOLD NORTH ARABIAN LETTER ZAINOLD NORTH ARABIAN " + + "LETTER THALOLD NORTH ARABIAN LETTER YEHOLD NORTH ARABIAN LETTER THEHOLD " + + "NORTH ARABIAN LETTER ZAHOLD NORTH ARABIAN NUMBER ONEOLD NORTH ARABIAN NU" + + "MBER TENOLD NORTH ARABIAN NUMBER TWENTYMANICHAEAN LETTER ALEPHMANICHAEAN" + + " LETTER BETHMANICHAEAN LETTER BHETHMANICHAEAN LETTER GIMELMANICHAEAN LET" + + "TER GHIMELMANICHAEAN LETTER DALETHMANICHAEAN LETTER HEMANICHAEAN LETTER " + + "WAWMANICHAEAN SIGN UDMANICHAEAN LETTER ZAYINMANICHAEAN LETTER ZHAYINMANI" + + "CHAEAN LETTER JAYINMANICHAEAN LETTER JHAYINMANICHAEAN LETTER HETHMANICHA" + + "EAN LETTER TETHMANICHAEAN LETTER YODHMANICHAEAN LETTER KAPHMANICHAEAN LE" + + "TTER XAPHMANICHAEAN LETTER KHAPHMANICHAEAN LETTER LAMEDHMANICHAEAN LETTE") + ("" + + "R DHAMEDHMANICHAEAN LETTER THAMEDHMANICHAEAN LETTER MEMMANICHAEAN LETTER" + + " NUNMANICHAEAN LETTER SAMEKHMANICHAEAN LETTER AYINMANICHAEAN LETTER AAYI" + + "NMANICHAEAN LETTER PEMANICHAEAN LETTER FEMANICHAEAN LETTER SADHEMANICHAE" + + "AN LETTER QOPHMANICHAEAN LETTER XOPHMANICHAEAN LETTER QHOPHMANICHAEAN LE" + + "TTER RESHMANICHAEAN LETTER SHINMANICHAEAN LETTER SSHINMANICHAEAN LETTER " + + "TAWMANICHAEAN ABBREVIATION MARK ABOVEMANICHAEAN ABBREVIATION MARK BELOWM" + + "ANICHAEAN NUMBER ONEMANICHAEAN NUMBER FIVEMANICHAEAN NUMBER TENMANICHAEA" + + "N NUMBER TWENTYMANICHAEAN NUMBER ONE HUNDREDMANICHAEAN PUNCTUATION STARM" + + "ANICHAEAN PUNCTUATION FLEURONMANICHAEAN PUNCTUATION DOUBLE DOT WITHIN DO" + + "TMANICHAEAN PUNCTUATION DOT WITHIN DOTMANICHAEAN PUNCTUATION DOTMANICHAE" + + "AN PUNCTUATION TWO DOTSMANICHAEAN PUNCTUATION LINE FILLERAVESTAN LETTER " + + "AAVESTAN LETTER AAAVESTAN LETTER AOAVESTAN LETTER AAOAVESTAN LETTER ANAV" + + "ESTAN LETTER AANAVESTAN LETTER AEAVESTAN LETTER AEEAVESTAN LETTER EAVEST" + + "AN LETTER EEAVESTAN LETTER OAVESTAN LETTER OOAVESTAN LETTER IAVESTAN LET" + + "TER IIAVESTAN LETTER UAVESTAN LETTER UUAVESTAN LETTER KEAVESTAN LETTER X" + + "EAVESTAN LETTER XYEAVESTAN LETTER XVEAVESTAN LETTER GEAVESTAN LETTER GGE" + + "AVESTAN LETTER GHEAVESTAN LETTER CEAVESTAN LETTER JEAVESTAN LETTER TEAVE" + + "STAN LETTER THEAVESTAN LETTER DEAVESTAN LETTER DHEAVESTAN LETTER TTEAVES" + + "TAN LETTER PEAVESTAN LETTER FEAVESTAN LETTER BEAVESTAN LETTER BHEAVESTAN" + + " LETTER NGEAVESTAN LETTER NGYEAVESTAN LETTER NGVEAVESTAN LETTER NEAVESTA" + + "N LETTER NYEAVESTAN LETTER NNEAVESTAN LETTER MEAVESTAN LETTER HMEAVESTAN" + + " LETTER YYEAVESTAN LETTER YEAVESTAN LETTER VEAVESTAN LETTER REAVESTAN LE" + + "TTER LEAVESTAN LETTER SEAVESTAN LETTER ZEAVESTAN LETTER SHEAVESTAN LETTE" + + "R ZHEAVESTAN LETTER SHYEAVESTAN LETTER SSHEAVESTAN LETTER HEAVESTAN ABBR" + + "EVIATION MARKTINY TWO DOTS OVER ONE DOT PUNCTUATIONSMALL TWO DOTS OVER O" + + "NE DOT PUNCTUATIONLARGE TWO DOTS OVER ONE DOT PUNCTUATIONLARGE ONE DOT O" + + "VER TWO DOTS PUNCTUATIONLARGE TWO RINGS OVER ONE RING PUNCTUATIONLARGE O" + + "NE RING OVER TWO RINGS PUNCTUATIONINSCRIPTIONAL PARTHIAN LETTER ALEPHINS" + + "CRIPTIONAL PARTHIAN LETTER BETHINSCRIPTIONAL PARTHIAN LETTER GIMELINSCRI" + + "PTIONAL PARTHIAN LETTER DALETHINSCRIPTIONAL PARTHIAN LETTER HEINSCRIPTIO" + + "NAL PARTHIAN LETTER WAWINSCRIPTIONAL PARTHIAN LETTER ZAYININSCRIPTIONAL " + + "PARTHIAN LETTER HETHINSCRIPTIONAL PARTHIAN LETTER TETHINSCRIPTIONAL PART" + + "HIAN LETTER YODHINSCRIPTIONAL PARTHIAN LETTER KAPHINSCRIPTIONAL PARTHIAN" + + " LETTER LAMEDHINSCRIPTIONAL PARTHIAN LETTER MEMINSCRIPTIONAL PARTHIAN LE" + + "TTER NUNINSCRIPTIONAL PARTHIAN LETTER SAMEKHINSCRIPTIONAL PARTHIAN LETTE" + + "R AYININSCRIPTIONAL PARTHIAN LETTER PEINSCRIPTIONAL PARTHIAN LETTER SADH" + + "EINSCRIPTIONAL PARTHIAN LETTER QOPHINSCRIPTIONAL PARTHIAN LETTER RESHINS" + + "CRIPTIONAL PARTHIAN LETTER SHININSCRIPTIONAL PARTHIAN LETTER TAWINSCRIPT" + + "IONAL PARTHIAN NUMBER ONEINSCRIPTIONAL PARTHIAN NUMBER TWOINSCRIPTIONAL " + + "PARTHIAN NUMBER THREEINSCRIPTIONAL PARTHIAN NUMBER FOURINSCRIPTIONAL PAR" + + "THIAN NUMBER TENINSCRIPTIONAL PARTHIAN NUMBER TWENTYINSCRIPTIONAL PARTHI" + + "AN NUMBER ONE HUNDREDINSCRIPTIONAL PARTHIAN NUMBER ONE THOUSANDINSCRIPTI" + + "ONAL PAHLAVI LETTER ALEPHINSCRIPTIONAL PAHLAVI LETTER BETHINSCRIPTIONAL " + + "PAHLAVI LETTER GIMELINSCRIPTIONAL PAHLAVI LETTER DALETHINSCRIPTIONAL PAH" + + "LAVI LETTER HEINSCRIPTIONAL PAHLAVI LETTER WAW-AYIN-RESHINSCRIPTIONAL PA" + + "HLAVI LETTER ZAYININSCRIPTIONAL PAHLAVI LETTER HETHINSCRIPTIONAL PAHLAVI" + + " LETTER TETHINSCRIPTIONAL PAHLAVI LETTER YODHINSCRIPTIONAL PAHLAVI LETTE" + + "R KAPHINSCRIPTIONAL PAHLAVI LETTER LAMEDHINSCRIPTIONAL PAHLAVI LETTER ME" + + "M-QOPHINSCRIPTIONAL PAHLAVI LETTER NUNINSCRIPTIONAL PAHLAVI LETTER SAMEK" + + "HINSCRIPTIONAL PAHLAVI LETTER PEINSCRIPTIONAL PAHLAVI LETTER SADHEINSCRI" + + "PTIONAL PAHLAVI LETTER SHININSCRIPTIONAL PAHLAVI LETTER TAWINSCRIPTIONAL" + + " PAHLAVI NUMBER ONEINSCRIPTIONAL PAHLAVI NUMBER TWOINSCRIPTIONAL PAHLAVI" + + " NUMBER THREEINSCRIPTIONAL PAHLAVI NUMBER FOURINSCRIPTIONAL PAHLAVI NUMB" + + "ER TENINSCRIPTIONAL PAHLAVI NUMBER TWENTYINSCRIPTIONAL PAHLAVI NUMBER ON" + + "E HUNDREDINSCRIPTIONAL PAHLAVI NUMBER ONE THOUSANDPSALTER PAHLAVI LETTER" + + " ALEPHPSALTER PAHLAVI LETTER BETHPSALTER PAHLAVI LETTER GIMELPSALTER PAH" + + "LAVI LETTER DALETHPSALTER PAHLAVI LETTER HEPSALTER PAHLAVI LETTER WAW-AY" + + "IN-RESHPSALTER PAHLAVI LETTER ZAYINPSALTER PAHLAVI LETTER HETHPSALTER PA" + + "HLAVI LETTER YODHPSALTER PAHLAVI LETTER KAPHPSALTER PAHLAVI LETTER LAMED" + + "HPSALTER PAHLAVI LETTER MEM-QOPHPSALTER PAHLAVI LETTER NUNPSALTER PAHLAV" + + "I LETTER SAMEKHPSALTER PAHLAVI LETTER PEPSALTER PAHLAVI LETTER SADHEPSAL" + + "TER PAHLAVI LETTER SHINPSALTER PAHLAVI LETTER TAWPSALTER PAHLAVI SECTION" + + " MARKPSALTER PAHLAVI TURNED SECTION MARKPSALTER PAHLAVI FOUR DOTS WITH C" + + "ROSSPSALTER PAHLAVI FOUR DOTS WITH DOTPSALTER PAHLAVI NUMBER ONEPSALTER ") + ("" + + "PAHLAVI NUMBER TWOPSALTER PAHLAVI NUMBER THREEPSALTER PAHLAVI NUMBER FOU" + + "RPSALTER PAHLAVI NUMBER TENPSALTER PAHLAVI NUMBER TWENTYPSALTER PAHLAVI " + + "NUMBER ONE HUNDREDOLD TURKIC LETTER ORKHON AOLD TURKIC LETTER YENISEI AO" + + "LD TURKIC LETTER YENISEI AEOLD TURKIC LETTER ORKHON IOLD TURKIC LETTER Y" + + "ENISEI IOLD TURKIC LETTER YENISEI EOLD TURKIC LETTER ORKHON OOLD TURKIC " + + "LETTER ORKHON OEOLD TURKIC LETTER YENISEI OEOLD TURKIC LETTER ORKHON ABO" + + "LD TURKIC LETTER YENISEI ABOLD TURKIC LETTER ORKHON AEBOLD TURKIC LETTER" + + " YENISEI AEBOLD TURKIC LETTER ORKHON AGOLD TURKIC LETTER YENISEI AGOLD T" + + "URKIC LETTER ORKHON AEGOLD TURKIC LETTER YENISEI AEGOLD TURKIC LETTER OR" + + "KHON ADOLD TURKIC LETTER YENISEI ADOLD TURKIC LETTER ORKHON AEDOLD TURKI" + + "C LETTER ORKHON EZOLD TURKIC LETTER YENISEI EZOLD TURKIC LETTER ORKHON A" + + "YOLD TURKIC LETTER YENISEI AYOLD TURKIC LETTER ORKHON AEYOLD TURKIC LETT" + + "ER YENISEI AEYOLD TURKIC LETTER ORKHON AEKOLD TURKIC LETTER YENISEI AEKO" + + "LD TURKIC LETTER ORKHON OEKOLD TURKIC LETTER YENISEI OEKOLD TURKIC LETTE" + + "R ORKHON ALOLD TURKIC LETTER YENISEI ALOLD TURKIC LETTER ORKHON AELOLD T" + + "URKIC LETTER ORKHON ELTOLD TURKIC LETTER ORKHON EMOLD TURKIC LETTER ORKH" + + "ON ANOLD TURKIC LETTER ORKHON AENOLD TURKIC LETTER YENISEI AENOLD TURKIC" + + " LETTER ORKHON ENTOLD TURKIC LETTER YENISEI ENTOLD TURKIC LETTER ORKHON " + + "ENCOLD TURKIC LETTER YENISEI ENCOLD TURKIC LETTER ORKHON ENYOLD TURKIC L" + + "ETTER YENISEI ENYOLD TURKIC LETTER YENISEI ANGOLD TURKIC LETTER ORKHON E" + + "NGOLD TURKIC LETTER YENISEI AENGOLD TURKIC LETTER ORKHON EPOLD TURKIC LE" + + "TTER ORKHON OPOLD TURKIC LETTER ORKHON ICOLD TURKIC LETTER ORKHON ECOLD " + + "TURKIC LETTER YENISEI ECOLD TURKIC LETTER ORKHON AQOLD TURKIC LETTER YEN" + + "ISEI AQOLD TURKIC LETTER ORKHON IQOLD TURKIC LETTER YENISEI IQOLD TURKIC" + + " LETTER ORKHON OQOLD TURKIC LETTER YENISEI OQOLD TURKIC LETTER ORKHON AR" + + "OLD TURKIC LETTER YENISEI AROLD TURKIC LETTER ORKHON AEROLD TURKIC LETTE" + + "R ORKHON ASOLD TURKIC LETTER ORKHON AESOLD TURKIC LETTER ORKHON ASHOLD T" + + "URKIC LETTER YENISEI ASHOLD TURKIC LETTER ORKHON ESHOLD TURKIC LETTER YE" + + "NISEI ESHOLD TURKIC LETTER ORKHON ATOLD TURKIC LETTER YENISEI ATOLD TURK" + + "IC LETTER ORKHON AETOLD TURKIC LETTER YENISEI AETOLD TURKIC LETTER ORKHO" + + "N OTOLD TURKIC LETTER ORKHON BASHOLD HUNGARIAN CAPITAL LETTER AOLD HUNGA" + + "RIAN CAPITAL LETTER AAOLD HUNGARIAN CAPITAL LETTER EBOLD HUNGARIAN CAPIT" + + "AL LETTER AMBOLD HUNGARIAN CAPITAL LETTER ECOLD HUNGARIAN CAPITAL LETTER" + + " ENCOLD HUNGARIAN CAPITAL LETTER ECSOLD HUNGARIAN CAPITAL LETTER EDOLD H" + + "UNGARIAN CAPITAL LETTER ANDOLD HUNGARIAN CAPITAL LETTER EOLD HUNGARIAN C" + + "APITAL LETTER CLOSE EOLD HUNGARIAN CAPITAL LETTER EEOLD HUNGARIAN CAPITA" + + "L LETTER EFOLD HUNGARIAN CAPITAL LETTER EGOLD HUNGARIAN CAPITAL LETTER E" + + "GYOLD HUNGARIAN CAPITAL LETTER EHOLD HUNGARIAN CAPITAL LETTER IOLD HUNGA" + + "RIAN CAPITAL LETTER IIOLD HUNGARIAN CAPITAL LETTER EJOLD HUNGARIAN CAPIT" + + "AL LETTER EKOLD HUNGARIAN CAPITAL LETTER AKOLD HUNGARIAN CAPITAL LETTER " + + "UNKOLD HUNGARIAN CAPITAL LETTER ELOLD HUNGARIAN CAPITAL LETTER ELYOLD HU" + + "NGARIAN CAPITAL LETTER EMOLD HUNGARIAN CAPITAL LETTER ENOLD HUNGARIAN CA" + + "PITAL LETTER ENYOLD HUNGARIAN CAPITAL LETTER OOLD HUNGARIAN CAPITAL LETT" + + "ER OOOLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OEOLD HUNGARIAN CAPITAL LET" + + "TER RUDIMENTA OEOLD HUNGARIAN CAPITAL LETTER OEEOLD HUNGARIAN CAPITAL LE" + + "TTER EPOLD HUNGARIAN CAPITAL LETTER EMPOLD HUNGARIAN CAPITAL LETTER EROL" + + "D HUNGARIAN CAPITAL LETTER SHORT EROLD HUNGARIAN CAPITAL LETTER ESOLD HU" + + "NGARIAN CAPITAL LETTER ESZOLD HUNGARIAN CAPITAL LETTER ETOLD HUNGARIAN C" + + "APITAL LETTER ENTOLD HUNGARIAN CAPITAL LETTER ETYOLD HUNGARIAN CAPITAL L" + + "ETTER ECHOLD HUNGARIAN CAPITAL LETTER UOLD HUNGARIAN CAPITAL LETTER UUOL" + + "D HUNGARIAN CAPITAL LETTER NIKOLSBURG UEOLD HUNGARIAN CAPITAL LETTER RUD" + + "IMENTA UEOLD HUNGARIAN CAPITAL LETTER EVOLD HUNGARIAN CAPITAL LETTER EZO" + + "LD HUNGARIAN CAPITAL LETTER EZSOLD HUNGARIAN CAPITAL LETTER ENT-SHAPED S" + + "IGNOLD HUNGARIAN CAPITAL LETTER USOLD HUNGARIAN SMALL LETTER AOLD HUNGAR" + + "IAN SMALL LETTER AAOLD HUNGARIAN SMALL LETTER EBOLD HUNGARIAN SMALL LETT" + + "ER AMBOLD HUNGARIAN SMALL LETTER ECOLD HUNGARIAN SMALL LETTER ENCOLD HUN" + + "GARIAN SMALL LETTER ECSOLD HUNGARIAN SMALL LETTER EDOLD HUNGARIAN SMALL " + + "LETTER ANDOLD HUNGARIAN SMALL LETTER EOLD HUNGARIAN SMALL LETTER CLOSE E" + + "OLD HUNGARIAN SMALL LETTER EEOLD HUNGARIAN SMALL LETTER EFOLD HUNGARIAN " + + "SMALL LETTER EGOLD HUNGARIAN SMALL LETTER EGYOLD HUNGARIAN SMALL LETTER " + + "EHOLD HUNGARIAN SMALL LETTER IOLD HUNGARIAN SMALL LETTER IIOLD HUNGARIAN" + + " SMALL LETTER EJOLD HUNGARIAN SMALL LETTER EKOLD HUNGARIAN SMALL LETTER " + + "AKOLD HUNGARIAN SMALL LETTER UNKOLD HUNGARIAN SMALL LETTER ELOLD HUNGARI" + + "AN SMALL LETTER ELYOLD HUNGARIAN SMALL LETTER EMOLD HUNGARIAN SMALL LETT") + ("" + + "ER ENOLD HUNGARIAN SMALL LETTER ENYOLD HUNGARIAN SMALL LETTER OOLD HUNGA" + + "RIAN SMALL LETTER OOOLD HUNGARIAN SMALL LETTER NIKOLSBURG OEOLD HUNGARIA" + + "N SMALL LETTER RUDIMENTA OEOLD HUNGARIAN SMALL LETTER OEEOLD HUNGARIAN S" + + "MALL LETTER EPOLD HUNGARIAN SMALL LETTER EMPOLD HUNGARIAN SMALL LETTER E" + + "ROLD HUNGARIAN SMALL LETTER SHORT EROLD HUNGARIAN SMALL LETTER ESOLD HUN" + + "GARIAN SMALL LETTER ESZOLD HUNGARIAN SMALL LETTER ETOLD HUNGARIAN SMALL " + + "LETTER ENTOLD HUNGARIAN SMALL LETTER ETYOLD HUNGARIAN SMALL LETTER ECHOL" + + "D HUNGARIAN SMALL LETTER UOLD HUNGARIAN SMALL LETTER UUOLD HUNGARIAN SMA" + + "LL LETTER NIKOLSBURG UEOLD HUNGARIAN SMALL LETTER RUDIMENTA UEOLD HUNGAR" + + "IAN SMALL LETTER EVOLD HUNGARIAN SMALL LETTER EZOLD HUNGARIAN SMALL LETT" + + "ER EZSOLD HUNGARIAN SMALL LETTER ENT-SHAPED SIGNOLD HUNGARIAN SMALL LETT" + + "ER USOLD HUNGARIAN NUMBER ONEOLD HUNGARIAN NUMBER FIVEOLD HUNGARIAN NUMB" + + "ER TENOLD HUNGARIAN NUMBER FIFTYOLD HUNGARIAN NUMBER ONE HUNDREDOLD HUNG" + + "ARIAN NUMBER ONE THOUSANDRUMI DIGIT ONERUMI DIGIT TWORUMI DIGIT THREERUM" + + "I DIGIT FOURRUMI DIGIT FIVERUMI DIGIT SIXRUMI DIGIT SEVENRUMI DIGIT EIGH" + + "TRUMI DIGIT NINERUMI NUMBER TENRUMI NUMBER TWENTYRUMI NUMBER THIRTYRUMI " + + "NUMBER FORTYRUMI NUMBER FIFTYRUMI NUMBER SIXTYRUMI NUMBER SEVENTYRUMI NU" + + "MBER EIGHTYRUMI NUMBER NINETYRUMI NUMBER ONE HUNDREDRUMI NUMBER TWO HUND" + + "REDRUMI NUMBER THREE HUNDREDRUMI NUMBER FOUR HUNDREDRUMI NUMBER FIVE HUN" + + "DREDRUMI NUMBER SIX HUNDREDRUMI NUMBER SEVEN HUNDREDRUMI NUMBER EIGHT HU" + + "NDREDRUMI NUMBER NINE HUNDREDRUMI FRACTION ONE HALFRUMI FRACTION ONE QUA" + + "RTERRUMI FRACTION ONE THIRDRUMI FRACTION TWO THIRDSBRAHMI SIGN CANDRABIN" + + "DUBRAHMI SIGN ANUSVARABRAHMI SIGN VISARGABRAHMI SIGN JIHVAMULIYABRAHMI S" + + "IGN UPADHMANIYABRAHMI LETTER ABRAHMI LETTER AABRAHMI LETTER IBRAHMI LETT" + + "ER IIBRAHMI LETTER UBRAHMI LETTER UUBRAHMI LETTER VOCALIC RBRAHMI LETTER" + + " VOCALIC RRBRAHMI LETTER VOCALIC LBRAHMI LETTER VOCALIC LLBRAHMI LETTER " + + "EBRAHMI LETTER AIBRAHMI LETTER OBRAHMI LETTER AUBRAHMI LETTER KABRAHMI L" + + "ETTER KHABRAHMI LETTER GABRAHMI LETTER GHABRAHMI LETTER NGABRAHMI LETTER" + + " CABRAHMI LETTER CHABRAHMI LETTER JABRAHMI LETTER JHABRAHMI LETTER NYABR" + + "AHMI LETTER TTABRAHMI LETTER TTHABRAHMI LETTER DDABRAHMI LETTER DDHABRAH" + + "MI LETTER NNABRAHMI LETTER TABRAHMI LETTER THABRAHMI LETTER DABRAHMI LET" + + "TER DHABRAHMI LETTER NABRAHMI LETTER PABRAHMI LETTER PHABRAHMI LETTER BA" + + "BRAHMI LETTER BHABRAHMI LETTER MABRAHMI LETTER YABRAHMI LETTER RABRAHMI " + + "LETTER LABRAHMI LETTER VABRAHMI LETTER SHABRAHMI LETTER SSABRAHMI LETTER" + + " SABRAHMI LETTER HABRAHMI LETTER LLABRAHMI LETTER OLD TAMIL LLLABRAHMI L" + + "ETTER OLD TAMIL RRABRAHMI LETTER OLD TAMIL NNNABRAHMI VOWEL SIGN AABRAHM" + + "I VOWEL SIGN BHATTIPROLU AABRAHMI VOWEL SIGN IBRAHMI VOWEL SIGN IIBRAHMI" + + " VOWEL SIGN UBRAHMI VOWEL SIGN UUBRAHMI VOWEL SIGN VOCALIC RBRAHMI VOWEL" + + " SIGN VOCALIC RRBRAHMI VOWEL SIGN VOCALIC LBRAHMI VOWEL SIGN VOCALIC LLB" + + "RAHMI VOWEL SIGN EBRAHMI VOWEL SIGN AIBRAHMI VOWEL SIGN OBRAHMI VOWEL SI" + + "GN AUBRAHMI VIRAMABRAHMI DANDABRAHMI DOUBLE DANDABRAHMI PUNCTUATION DOTB" + + "RAHMI PUNCTUATION DOUBLE DOTBRAHMI PUNCTUATION LINEBRAHMI PUNCTUATION CR" + + "ESCENT BARBRAHMI PUNCTUATION LOTUSBRAHMI NUMBER ONEBRAHMI NUMBER TWOBRAH" + + "MI NUMBER THREEBRAHMI NUMBER FOURBRAHMI NUMBER FIVEBRAHMI NUMBER SIXBRAH" + + "MI NUMBER SEVENBRAHMI NUMBER EIGHTBRAHMI NUMBER NINEBRAHMI NUMBER TENBRA" + + "HMI NUMBER TWENTYBRAHMI NUMBER THIRTYBRAHMI NUMBER FORTYBRAHMI NUMBER FI" + + "FTYBRAHMI NUMBER SIXTYBRAHMI NUMBER SEVENTYBRAHMI NUMBER EIGHTYBRAHMI NU" + + "MBER NINETYBRAHMI NUMBER ONE HUNDREDBRAHMI NUMBER ONE THOUSANDBRAHMI DIG" + + "IT ZEROBRAHMI DIGIT ONEBRAHMI DIGIT TWOBRAHMI DIGIT THREEBRAHMI DIGIT FO" + + "URBRAHMI DIGIT FIVEBRAHMI DIGIT SIXBRAHMI DIGIT SEVENBRAHMI DIGIT EIGHTB" + + "RAHMI DIGIT NINEBRAHMI NUMBER JOINERKAITHI SIGN CANDRABINDUKAITHI SIGN A" + + "NUSVARAKAITHI SIGN VISARGAKAITHI LETTER AKAITHI LETTER AAKAITHI LETTER I" + + "KAITHI LETTER IIKAITHI LETTER UKAITHI LETTER UUKAITHI LETTER EKAITHI LET" + + "TER AIKAITHI LETTER OKAITHI LETTER AUKAITHI LETTER KAKAITHI LETTER KHAKA" + + "ITHI LETTER GAKAITHI LETTER GHAKAITHI LETTER NGAKAITHI LETTER CAKAITHI L" + + "ETTER CHAKAITHI LETTER JAKAITHI LETTER JHAKAITHI LETTER NYAKAITHI LETTER" + + " TTAKAITHI LETTER TTHAKAITHI LETTER DDAKAITHI LETTER DDDHAKAITHI LETTER " + + "DDHAKAITHI LETTER RHAKAITHI LETTER NNAKAITHI LETTER TAKAITHI LETTER THAK" + + "AITHI LETTER DAKAITHI LETTER DHAKAITHI LETTER NAKAITHI LETTER PAKAITHI L" + + "ETTER PHAKAITHI LETTER BAKAITHI LETTER BHAKAITHI LETTER MAKAITHI LETTER " + + "YAKAITHI LETTER RAKAITHI LETTER LAKAITHI LETTER VAKAITHI LETTER SHAKAITH" + + "I LETTER SSAKAITHI LETTER SAKAITHI LETTER HAKAITHI VOWEL SIGN AAKAITHI V" + + "OWEL SIGN IKAITHI VOWEL SIGN IIKAITHI VOWEL SIGN UKAITHI VOWEL SIGN UUKA" + + "ITHI VOWEL SIGN EKAITHI VOWEL SIGN AIKAITHI VOWEL SIGN OKAITHI VOWEL SIG") + ("" + + "N AUKAITHI SIGN VIRAMAKAITHI SIGN NUKTAKAITHI ABBREVIATION SIGNKAITHI EN" + + "UMERATION SIGNKAITHI NUMBER SIGNKAITHI SECTION MARKKAITHI DOUBLE SECTION" + + " MARKKAITHI DANDAKAITHI DOUBLE DANDASORA SOMPENG LETTER SAHSORA SOMPENG " + + "LETTER TAHSORA SOMPENG LETTER BAHSORA SOMPENG LETTER CAHSORA SOMPENG LET" + + "TER DAHSORA SOMPENG LETTER GAHSORA SOMPENG LETTER MAHSORA SOMPENG LETTER" + + " NGAHSORA SOMPENG LETTER LAHSORA SOMPENG LETTER NAHSORA SOMPENG LETTER V" + + "AHSORA SOMPENG LETTER PAHSORA SOMPENG LETTER YAHSORA SOMPENG LETTER RAHS" + + "ORA SOMPENG LETTER HAHSORA SOMPENG LETTER KAHSORA SOMPENG LETTER JAHSORA" + + " SOMPENG LETTER NYAHSORA SOMPENG LETTER AHSORA SOMPENG LETTER EEHSORA SO" + + "MPENG LETTER IHSORA SOMPENG LETTER UHSORA SOMPENG LETTER OHSORA SOMPENG " + + "LETTER EHSORA SOMPENG LETTER MAESORA SOMPENG DIGIT ZEROSORA SOMPENG DIGI" + + "T ONESORA SOMPENG DIGIT TWOSORA SOMPENG DIGIT THREESORA SOMPENG DIGIT FO" + + "URSORA SOMPENG DIGIT FIVESORA SOMPENG DIGIT SIXSORA SOMPENG DIGIT SEVENS" + + "ORA SOMPENG DIGIT EIGHTSORA SOMPENG DIGIT NINECHAKMA SIGN CANDRABINDUCHA" + + "KMA SIGN ANUSVARACHAKMA SIGN VISARGACHAKMA LETTER AACHAKMA LETTER ICHAKM" + + "A LETTER UCHAKMA LETTER ECHAKMA LETTER KAACHAKMA LETTER KHAACHAKMA LETTE" + + "R GAACHAKMA LETTER GHAACHAKMA LETTER NGAACHAKMA LETTER CAACHAKMA LETTER " + + "CHAACHAKMA LETTER JAACHAKMA LETTER JHAACHAKMA LETTER NYAACHAKMA LETTER T" + + "TAACHAKMA LETTER TTHAACHAKMA LETTER DDAACHAKMA LETTER DDHAACHAKMA LETTER" + + " NNAACHAKMA LETTER TAACHAKMA LETTER THAACHAKMA LETTER DAACHAKMA LETTER D" + + "HAACHAKMA LETTER NAACHAKMA LETTER PAACHAKMA LETTER PHAACHAKMA LETTER BAA" + + "CHAKMA LETTER BHAACHAKMA LETTER MAACHAKMA LETTER YYAACHAKMA LETTER YAACH" + + "AKMA LETTER RAACHAKMA LETTER LAACHAKMA LETTER WAACHAKMA LETTER SAACHAKMA" + + " LETTER HAACHAKMA VOWEL SIGN ACHAKMA VOWEL SIGN ICHAKMA VOWEL SIGN IICHA" + + "KMA VOWEL SIGN UCHAKMA VOWEL SIGN UUCHAKMA VOWEL SIGN ECHAKMA VOWEL SIGN" + + " AICHAKMA VOWEL SIGN OCHAKMA VOWEL SIGN AUCHAKMA VOWEL SIGN OICHAKMA O M" + + "ARKCHAKMA AU MARKCHAKMA VIRAMACHAKMA MAAYYAACHAKMA DIGIT ZEROCHAKMA DIGI" + + "T ONECHAKMA DIGIT TWOCHAKMA DIGIT THREECHAKMA DIGIT FOURCHAKMA DIGIT FIV" + + "ECHAKMA DIGIT SIXCHAKMA DIGIT SEVENCHAKMA DIGIT EIGHTCHAKMA DIGIT NINECH" + + "AKMA SECTION MARKCHAKMA DANDACHAKMA DOUBLE DANDACHAKMA QUESTION MARKMAHA" + + "JANI LETTER AMAHAJANI LETTER IMAHAJANI LETTER UMAHAJANI LETTER EMAHAJANI" + + " LETTER OMAHAJANI LETTER KAMAHAJANI LETTER KHAMAHAJANI LETTER GAMAHAJANI" + + " LETTER GHAMAHAJANI LETTER CAMAHAJANI LETTER CHAMAHAJANI LETTER JAMAHAJA" + + "NI LETTER JHAMAHAJANI LETTER NYAMAHAJANI LETTER TTAMAHAJANI LETTER TTHAM" + + "AHAJANI LETTER DDAMAHAJANI LETTER DDHAMAHAJANI LETTER NNAMAHAJANI LETTER" + + " TAMAHAJANI LETTER THAMAHAJANI LETTER DAMAHAJANI LETTER DHAMAHAJANI LETT" + + "ER NAMAHAJANI LETTER PAMAHAJANI LETTER PHAMAHAJANI LETTER BAMAHAJANI LET" + + "TER BHAMAHAJANI LETTER MAMAHAJANI LETTER RAMAHAJANI LETTER LAMAHAJANI LE" + + "TTER VAMAHAJANI LETTER SAMAHAJANI LETTER HAMAHAJANI LETTER RRAMAHAJANI S" + + "IGN NUKTAMAHAJANI ABBREVIATION SIGNMAHAJANI SECTION MARKMAHAJANI LIGATUR" + + "E SHRISHARADA SIGN CANDRABINDUSHARADA SIGN ANUSVARASHARADA SIGN VISARGAS" + + "HARADA LETTER ASHARADA LETTER AASHARADA LETTER ISHARADA LETTER IISHARADA" + + " LETTER USHARADA LETTER UUSHARADA LETTER VOCALIC RSHARADA LETTER VOCALIC" + + " RRSHARADA LETTER VOCALIC LSHARADA LETTER VOCALIC LLSHARADA LETTER ESHAR" + + "ADA LETTER AISHARADA LETTER OSHARADA LETTER AUSHARADA LETTER KASHARADA L" + + "ETTER KHASHARADA LETTER GASHARADA LETTER GHASHARADA LETTER NGASHARADA LE" + + "TTER CASHARADA LETTER CHASHARADA LETTER JASHARADA LETTER JHASHARADA LETT" + + "ER NYASHARADA LETTER TTASHARADA LETTER TTHASHARADA LETTER DDASHARADA LET" + + "TER DDHASHARADA LETTER NNASHARADA LETTER TASHARADA LETTER THASHARADA LET" + + "TER DASHARADA LETTER DHASHARADA LETTER NASHARADA LETTER PASHARADA LETTER" + + " PHASHARADA LETTER BASHARADA LETTER BHASHARADA LETTER MASHARADA LETTER Y" + + "ASHARADA LETTER RASHARADA LETTER LASHARADA LETTER LLASHARADA LETTER VASH" + + "ARADA LETTER SHASHARADA LETTER SSASHARADA LETTER SASHARADA LETTER HASHAR" + + "ADA VOWEL SIGN AASHARADA VOWEL SIGN ISHARADA VOWEL SIGN IISHARADA VOWEL " + + "SIGN USHARADA VOWEL SIGN UUSHARADA VOWEL SIGN VOCALIC RSHARADA VOWEL SIG" + + "N VOCALIC RRSHARADA VOWEL SIGN VOCALIC LSHARADA VOWEL SIGN VOCALIC LLSHA" + + "RADA VOWEL SIGN ESHARADA VOWEL SIGN AISHARADA VOWEL SIGN OSHARADA VOWEL " + + "SIGN AUSHARADA SIGN VIRAMASHARADA SIGN AVAGRAHASHARADA SIGN JIHVAMULIYAS" + + "HARADA SIGN UPADHMANIYASHARADA OMSHARADA DANDASHARADA DOUBLE DANDASHARAD" + + "A ABBREVIATION SIGNSHARADA SEPARATORSHARADA SANDHI MARKSHARADA SIGN NUKT" + + "ASHARADA VOWEL MODIFIER MARKSHARADA EXTRA SHORT VOWEL MARKSHARADA SUTRA " + + "MARKSHARADA DIGIT ZEROSHARADA DIGIT ONESHARADA DIGIT TWOSHARADA DIGIT TH" + + "REESHARADA DIGIT FOURSHARADA DIGIT FIVESHARADA DIGIT SIXSHARADA DIGIT SE" + + "VENSHARADA DIGIT EIGHTSHARADA DIGIT NINESHARADA EKAMSHARADA SIGN SIDDHAM") + ("" + + "SHARADA HEADSTROKESHARADA CONTINUATION SIGNSHARADA SECTION MARK-1SHARADA" + + " SECTION MARK-2SINHALA ARCHAIC DIGIT ONESINHALA ARCHAIC DIGIT TWOSINHALA" + + " ARCHAIC DIGIT THREESINHALA ARCHAIC DIGIT FOURSINHALA ARCHAIC DIGIT FIVE" + + "SINHALA ARCHAIC DIGIT SIXSINHALA ARCHAIC DIGIT SEVENSINHALA ARCHAIC DIGI" + + "T EIGHTSINHALA ARCHAIC DIGIT NINESINHALA ARCHAIC NUMBER TENSINHALA ARCHA" + + "IC NUMBER TWENTYSINHALA ARCHAIC NUMBER THIRTYSINHALA ARCHAIC NUMBER FORT" + + "YSINHALA ARCHAIC NUMBER FIFTYSINHALA ARCHAIC NUMBER SIXTYSINHALA ARCHAIC" + + " NUMBER SEVENTYSINHALA ARCHAIC NUMBER EIGHTYSINHALA ARCHAIC NUMBER NINET" + + "YSINHALA ARCHAIC NUMBER ONE HUNDREDSINHALA ARCHAIC NUMBER ONE THOUSANDKH" + + "OJKI LETTER AKHOJKI LETTER AAKHOJKI LETTER IKHOJKI LETTER UKHOJKI LETTER" + + " EKHOJKI LETTER AIKHOJKI LETTER OKHOJKI LETTER AUKHOJKI LETTER KAKHOJKI " + + "LETTER KHAKHOJKI LETTER GAKHOJKI LETTER GGAKHOJKI LETTER GHAKHOJKI LETTE" + + "R NGAKHOJKI LETTER CAKHOJKI LETTER CHAKHOJKI LETTER JAKHOJKI LETTER JJAK" + + "HOJKI LETTER NYAKHOJKI LETTER TTAKHOJKI LETTER TTHAKHOJKI LETTER DDAKHOJ" + + "KI LETTER DDHAKHOJKI LETTER NNAKHOJKI LETTER TAKHOJKI LETTER THAKHOJKI L" + + "ETTER DAKHOJKI LETTER DDDAKHOJKI LETTER DHAKHOJKI LETTER NAKHOJKI LETTER" + + " PAKHOJKI LETTER PHAKHOJKI LETTER BAKHOJKI LETTER BBAKHOJKI LETTER BHAKH" + + "OJKI LETTER MAKHOJKI LETTER YAKHOJKI LETTER RAKHOJKI LETTER LAKHOJKI LET" + + "TER VAKHOJKI LETTER SAKHOJKI LETTER HAKHOJKI LETTER LLAKHOJKI VOWEL SIGN" + + " AAKHOJKI VOWEL SIGN IKHOJKI VOWEL SIGN IIKHOJKI VOWEL SIGN UKHOJKI VOWE" + + "L SIGN EKHOJKI VOWEL SIGN AIKHOJKI VOWEL SIGN OKHOJKI VOWEL SIGN AUKHOJK" + + "I SIGN ANUSVARAKHOJKI SIGN VIRAMAKHOJKI SIGN NUKTAKHOJKI SIGN SHADDAKHOJ" + + "KI DANDAKHOJKI DOUBLE DANDAKHOJKI WORD SEPARATORKHOJKI SECTION MARKKHOJK" + + "I DOUBLE SECTION MARKKHOJKI ABBREVIATION SIGNKHOJKI SIGN SUKUNMULTANI LE" + + "TTER AMULTANI LETTER IMULTANI LETTER UMULTANI LETTER EMULTANI LETTER KAM" + + "ULTANI LETTER KHAMULTANI LETTER GAMULTANI LETTER GHAMULTANI LETTER CAMUL" + + "TANI LETTER CHAMULTANI LETTER JAMULTANI LETTER JJAMULTANI LETTER NYAMULT" + + "ANI LETTER TTAMULTANI LETTER TTHAMULTANI LETTER DDAMULTANI LETTER DDDAMU" + + "LTANI LETTER DDHAMULTANI LETTER NNAMULTANI LETTER TAMULTANI LETTER THAMU" + + "LTANI LETTER DAMULTANI LETTER DHAMULTANI LETTER NAMULTANI LETTER PAMULTA" + + "NI LETTER PHAMULTANI LETTER BAMULTANI LETTER BHAMULTANI LETTER MAMULTANI" + + " LETTER YAMULTANI LETTER RAMULTANI LETTER LAMULTANI LETTER VAMULTANI LET" + + "TER SAMULTANI LETTER HAMULTANI LETTER RRAMULTANI LETTER RHAMULTANI SECTI" + + "ON MARKKHUDAWADI LETTER AKHUDAWADI LETTER AAKHUDAWADI LETTER IKHUDAWADI " + + "LETTER IIKHUDAWADI LETTER UKHUDAWADI LETTER UUKHUDAWADI LETTER EKHUDAWAD" + + "I LETTER AIKHUDAWADI LETTER OKHUDAWADI LETTER AUKHUDAWADI LETTER KAKHUDA" + + "WADI LETTER KHAKHUDAWADI LETTER GAKHUDAWADI LETTER GGAKHUDAWADI LETTER G" + + "HAKHUDAWADI LETTER NGAKHUDAWADI LETTER CAKHUDAWADI LETTER CHAKHUDAWADI L" + + "ETTER JAKHUDAWADI LETTER JJAKHUDAWADI LETTER JHAKHUDAWADI LETTER NYAKHUD" + + "AWADI LETTER TTAKHUDAWADI LETTER TTHAKHUDAWADI LETTER DDAKHUDAWADI LETTE" + + "R DDDAKHUDAWADI LETTER RRAKHUDAWADI LETTER DDHAKHUDAWADI LETTER NNAKHUDA" + + "WADI LETTER TAKHUDAWADI LETTER THAKHUDAWADI LETTER DAKHUDAWADI LETTER DH" + + "AKHUDAWADI LETTER NAKHUDAWADI LETTER PAKHUDAWADI LETTER PHAKHUDAWADI LET" + + "TER BAKHUDAWADI LETTER BBAKHUDAWADI LETTER BHAKHUDAWADI LETTER MAKHUDAWA" + + "DI LETTER YAKHUDAWADI LETTER RAKHUDAWADI LETTER LAKHUDAWADI LETTER VAKHU" + + "DAWADI LETTER SHAKHUDAWADI LETTER SAKHUDAWADI LETTER HAKHUDAWADI SIGN AN" + + "USVARAKHUDAWADI VOWEL SIGN AAKHUDAWADI VOWEL SIGN IKHUDAWADI VOWEL SIGN " + + "IIKHUDAWADI VOWEL SIGN UKHUDAWADI VOWEL SIGN UUKHUDAWADI VOWEL SIGN EKHU" + + "DAWADI VOWEL SIGN AIKHUDAWADI VOWEL SIGN OKHUDAWADI VOWEL SIGN AUKHUDAWA" + + "DI SIGN NUKTAKHUDAWADI SIGN VIRAMAKHUDAWADI DIGIT ZEROKHUDAWADI DIGIT ON" + + "EKHUDAWADI DIGIT TWOKHUDAWADI DIGIT THREEKHUDAWADI DIGIT FOURKHUDAWADI D" + + "IGIT FIVEKHUDAWADI DIGIT SIXKHUDAWADI DIGIT SEVENKHUDAWADI DIGIT EIGHTKH" + + "UDAWADI DIGIT NINEGRANTHA SIGN COMBINING ANUSVARA ABOVEGRANTHA SIGN CAND" + + "RABINDUGRANTHA SIGN ANUSVARAGRANTHA SIGN VISARGAGRANTHA LETTER AGRANTHA " + + "LETTER AAGRANTHA LETTER IGRANTHA LETTER IIGRANTHA LETTER UGRANTHA LETTER" + + " UUGRANTHA LETTER VOCALIC RGRANTHA LETTER VOCALIC LGRANTHA LETTER EEGRAN" + + "THA LETTER AIGRANTHA LETTER OOGRANTHA LETTER AUGRANTHA LETTER KAGRANTHA " + + "LETTER KHAGRANTHA LETTER GAGRANTHA LETTER GHAGRANTHA LETTER NGAGRANTHA L" + + "ETTER CAGRANTHA LETTER CHAGRANTHA LETTER JAGRANTHA LETTER JHAGRANTHA LET" + + "TER NYAGRANTHA LETTER TTAGRANTHA LETTER TTHAGRANTHA LETTER DDAGRANTHA LE" + + "TTER DDHAGRANTHA LETTER NNAGRANTHA LETTER TAGRANTHA LETTER THAGRANTHA LE" + + "TTER DAGRANTHA LETTER DHAGRANTHA LETTER NAGRANTHA LETTER PAGRANTHA LETTE" + + "R PHAGRANTHA LETTER BAGRANTHA LETTER BHAGRANTHA LETTER MAGRANTHA LETTER " + + "YAGRANTHA LETTER RAGRANTHA LETTER LAGRANTHA LETTER LLAGRANTHA LETTER VAG") + ("" + + "RANTHA LETTER SHAGRANTHA LETTER SSAGRANTHA LETTER SAGRANTHA LETTER HAGRA" + + "NTHA SIGN NUKTAGRANTHA SIGN AVAGRAHAGRANTHA VOWEL SIGN AAGRANTHA VOWEL S" + + "IGN IGRANTHA VOWEL SIGN IIGRANTHA VOWEL SIGN UGRANTHA VOWEL SIGN UUGRANT" + + "HA VOWEL SIGN VOCALIC RGRANTHA VOWEL SIGN VOCALIC RRGRANTHA VOWEL SIGN E" + + "EGRANTHA VOWEL SIGN AIGRANTHA VOWEL SIGN OOGRANTHA VOWEL SIGN AUGRANTHA " + + "SIGN VIRAMAGRANTHA OMGRANTHA AU LENGTH MARKGRANTHA SIGN PLUTAGRANTHA LET" + + "TER VEDIC ANUSVARAGRANTHA LETTER VEDIC DOUBLE ANUSVARAGRANTHA LETTER VOC" + + "ALIC RRGRANTHA LETTER VOCALIC LLGRANTHA VOWEL SIGN VOCALIC LGRANTHA VOWE" + + "L SIGN VOCALIC LLCOMBINING GRANTHA DIGIT ZEROCOMBINING GRANTHA DIGIT ONE" + + "COMBINING GRANTHA DIGIT TWOCOMBINING GRANTHA DIGIT THREECOMBINING GRANTH" + + "A DIGIT FOURCOMBINING GRANTHA DIGIT FIVECOMBINING GRANTHA DIGIT SIXCOMBI" + + "NING GRANTHA LETTER ACOMBINING GRANTHA LETTER KACOMBINING GRANTHA LETTER" + + " NACOMBINING GRANTHA LETTER VICOMBINING GRANTHA LETTER PANEWA LETTER ANE" + + "WA LETTER AANEWA LETTER INEWA LETTER IINEWA LETTER UNEWA LETTER UUNEWA L" + + "ETTER VOCALIC RNEWA LETTER VOCALIC RRNEWA LETTER VOCALIC LNEWA LETTER VO" + + "CALIC LLNEWA LETTER ENEWA LETTER AINEWA LETTER ONEWA LETTER AUNEWA LETTE" + + "R KANEWA LETTER KHANEWA LETTER GANEWA LETTER GHANEWA LETTER NGANEWA LETT" + + "ER NGHANEWA LETTER CANEWA LETTER CHANEWA LETTER JANEWA LETTER JHANEWA LE" + + "TTER NYANEWA LETTER NYHANEWA LETTER TTANEWA LETTER TTHANEWA LETTER DDANE" + + "WA LETTER DDHANEWA LETTER NNANEWA LETTER TANEWA LETTER THANEWA LETTER DA" + + "NEWA LETTER DHANEWA LETTER NANEWA LETTER NHANEWA LETTER PANEWA LETTER PH" + + "ANEWA LETTER BANEWA LETTER BHANEWA LETTER MANEWA LETTER MHANEWA LETTER Y" + + "ANEWA LETTER RANEWA LETTER RHANEWA LETTER LANEWA LETTER LHANEWA LETTER W" + + "ANEWA LETTER SHANEWA LETTER SSANEWA LETTER SANEWA LETTER HANEWA VOWEL SI" + + "GN AANEWA VOWEL SIGN INEWA VOWEL SIGN IINEWA VOWEL SIGN UNEWA VOWEL SIGN" + + " UUNEWA VOWEL SIGN VOCALIC RNEWA VOWEL SIGN VOCALIC RRNEWA VOWEL SIGN VO" + + "CALIC LNEWA VOWEL SIGN VOCALIC LLNEWA VOWEL SIGN ENEWA VOWEL SIGN AINEWA" + + " VOWEL SIGN ONEWA VOWEL SIGN AUNEWA SIGN VIRAMANEWA SIGN CANDRABINDUNEWA" + + " SIGN ANUSVARANEWA SIGN VISARGANEWA SIGN NUKTANEWA SIGN AVAGRAHANEWA SIG" + + "N FINAL ANUSVARANEWA OMNEWA SIDDHINEWA DANDANEWA DOUBLE DANDANEWA COMMAN" + + "EWA GAP FILLERNEWA ABBREVIATION SIGNNEWA DIGIT ZERONEWA DIGIT ONENEWA DI" + + "GIT TWONEWA DIGIT THREENEWA DIGIT FOURNEWA DIGIT FIVENEWA DIGIT SIXNEWA " + + "DIGIT SEVENNEWA DIGIT EIGHTNEWA DIGIT NINENEWA PLACEHOLDER MARKNEWA INSE" + + "RTION SIGNTIRHUTA ANJITIRHUTA LETTER ATIRHUTA LETTER AATIRHUTA LETTER IT" + + "IRHUTA LETTER IITIRHUTA LETTER UTIRHUTA LETTER UUTIRHUTA LETTER VOCALIC " + + "RTIRHUTA LETTER VOCALIC RRTIRHUTA LETTER VOCALIC LTIRHUTA LETTER VOCALIC" + + " LLTIRHUTA LETTER ETIRHUTA LETTER AITIRHUTA LETTER OTIRHUTA LETTER AUTIR" + + "HUTA LETTER KATIRHUTA LETTER KHATIRHUTA LETTER GATIRHUTA LETTER GHATIRHU" + + "TA LETTER NGATIRHUTA LETTER CATIRHUTA LETTER CHATIRHUTA LETTER JATIRHUTA" + + " LETTER JHATIRHUTA LETTER NYATIRHUTA LETTER TTATIRHUTA LETTER TTHATIRHUT" + + "A LETTER DDATIRHUTA LETTER DDHATIRHUTA LETTER NNATIRHUTA LETTER TATIRHUT" + + "A LETTER THATIRHUTA LETTER DATIRHUTA LETTER DHATIRHUTA LETTER NATIRHUTA " + + "LETTER PATIRHUTA LETTER PHATIRHUTA LETTER BATIRHUTA LETTER BHATIRHUTA LE" + + "TTER MATIRHUTA LETTER YATIRHUTA LETTER RATIRHUTA LETTER LATIRHUTA LETTER" + + " VATIRHUTA LETTER SHATIRHUTA LETTER SSATIRHUTA LETTER SATIRHUTA LETTER H" + + "ATIRHUTA VOWEL SIGN AATIRHUTA VOWEL SIGN ITIRHUTA VOWEL SIGN IITIRHUTA V" + + "OWEL SIGN UTIRHUTA VOWEL SIGN UUTIRHUTA VOWEL SIGN VOCALIC RTIRHUTA VOWE" + + "L SIGN VOCALIC RRTIRHUTA VOWEL SIGN VOCALIC LTIRHUTA VOWEL SIGN VOCALIC " + + "LLTIRHUTA VOWEL SIGN ETIRHUTA VOWEL SIGN SHORT ETIRHUTA VOWEL SIGN AITIR" + + "HUTA VOWEL SIGN OTIRHUTA VOWEL SIGN SHORT OTIRHUTA VOWEL SIGN AUTIRHUTA " + + "SIGN CANDRABINDUTIRHUTA SIGN ANUSVARATIRHUTA SIGN VISARGATIRHUTA SIGN VI" + + "RAMATIRHUTA SIGN NUKTATIRHUTA SIGN AVAGRAHATIRHUTA GVANGTIRHUTA ABBREVIA" + + "TION SIGNTIRHUTA OMTIRHUTA DIGIT ZEROTIRHUTA DIGIT ONETIRHUTA DIGIT TWOT" + + "IRHUTA DIGIT THREETIRHUTA DIGIT FOURTIRHUTA DIGIT FIVETIRHUTA DIGIT SIXT" + + "IRHUTA DIGIT SEVENTIRHUTA DIGIT EIGHTTIRHUTA DIGIT NINESIDDHAM LETTER AS" + + "IDDHAM LETTER AASIDDHAM LETTER ISIDDHAM LETTER IISIDDHAM LETTER USIDDHAM" + + " LETTER UUSIDDHAM LETTER VOCALIC RSIDDHAM LETTER VOCALIC RRSIDDHAM LETTE" + + "R VOCALIC LSIDDHAM LETTER VOCALIC LLSIDDHAM LETTER ESIDDHAM LETTER AISID" + + "DHAM LETTER OSIDDHAM LETTER AUSIDDHAM LETTER KASIDDHAM LETTER KHASIDDHAM" + + " LETTER GASIDDHAM LETTER GHASIDDHAM LETTER NGASIDDHAM LETTER CASIDDHAM L" + + "ETTER CHASIDDHAM LETTER JASIDDHAM LETTER JHASIDDHAM LETTER NYASIDDHAM LE" + + "TTER TTASIDDHAM LETTER TTHASIDDHAM LETTER DDASIDDHAM LETTER DDHASIDDHAM " + + "LETTER NNASIDDHAM LETTER TASIDDHAM LETTER THASIDDHAM LETTER DASIDDHAM LE" + + "TTER DHASIDDHAM LETTER NASIDDHAM LETTER PASIDDHAM LETTER PHASIDDHAM LETT") + ("" + + "ER BASIDDHAM LETTER BHASIDDHAM LETTER MASIDDHAM LETTER YASIDDHAM LETTER " + + "RASIDDHAM LETTER LASIDDHAM LETTER VASIDDHAM LETTER SHASIDDHAM LETTER SSA" + + "SIDDHAM LETTER SASIDDHAM LETTER HASIDDHAM VOWEL SIGN AASIDDHAM VOWEL SIG" + + "N ISIDDHAM VOWEL SIGN IISIDDHAM VOWEL SIGN USIDDHAM VOWEL SIGN UUSIDDHAM" + + " VOWEL SIGN VOCALIC RSIDDHAM VOWEL SIGN VOCALIC RRSIDDHAM VOWEL SIGN ESI" + + "DDHAM VOWEL SIGN AISIDDHAM VOWEL SIGN OSIDDHAM VOWEL SIGN AUSIDDHAM SIGN" + + " CANDRABINDUSIDDHAM SIGN ANUSVARASIDDHAM SIGN VISARGASIDDHAM SIGN VIRAMA" + + "SIDDHAM SIGN NUKTASIDDHAM SIGN SIDDHAMSIDDHAM DANDASIDDHAM DOUBLE DANDAS" + + "IDDHAM SEPARATOR DOTSIDDHAM SEPARATOR BARSIDDHAM REPETITION MARK-1SIDDHA" + + "M REPETITION MARK-2SIDDHAM REPETITION MARK-3SIDDHAM END OF TEXT MARKSIDD" + + "HAM SECTION MARK WITH TRIDENT AND U-SHAPED ORNAMENTSSIDDHAM SECTION MARK" + + " WITH TRIDENT AND DOTTED CRESCENTSSIDDHAM SECTION MARK WITH RAYS AND DOT" + + "TED CRESCENTSSIDDHAM SECTION MARK WITH RAYS AND DOTTED DOUBLE CRESCENTSS" + + "IDDHAM SECTION MARK WITH RAYS AND DOTTED TRIPLE CRESCENTSSIDDHAM SECTION" + + " MARK DOUBLE RINGSIDDHAM SECTION MARK DOUBLE RING WITH RAYSSIDDHAM SECTI" + + "ON MARK WITH DOUBLE CRESCENTSSIDDHAM SECTION MARK WITH TRIPLE CRESCENTSS" + + "IDDHAM SECTION MARK WITH QUADRUPLE CRESCENTSSIDDHAM SECTION MARK WITH SE" + + "PTUPLE CRESCENTSSIDDHAM SECTION MARK WITH CIRCLES AND RAYSSIDDHAM SECTIO" + + "N MARK WITH CIRCLES AND TWO ENCLOSURESSIDDHAM SECTION MARK WITH CIRCLES " + + "AND FOUR ENCLOSURESSIDDHAM LETTER THREE-CIRCLE ALTERNATE ISIDDHAM LETTER" + + " TWO-CIRCLE ALTERNATE ISIDDHAM LETTER TWO-CIRCLE ALTERNATE IISIDDHAM LET" + + "TER ALTERNATE USIDDHAM VOWEL SIGN ALTERNATE USIDDHAM VOWEL SIGN ALTERNAT" + + "E UUMODI LETTER AMODI LETTER AAMODI LETTER IMODI LETTER IIMODI LETTER UM" + + "ODI LETTER UUMODI LETTER VOCALIC RMODI LETTER VOCALIC RRMODI LETTER VOCA" + + "LIC LMODI LETTER VOCALIC LLMODI LETTER EMODI LETTER AIMODI LETTER OMODI " + + "LETTER AUMODI LETTER KAMODI LETTER KHAMODI LETTER GAMODI LETTER GHAMODI " + + "LETTER NGAMODI LETTER CAMODI LETTER CHAMODI LETTER JAMODI LETTER JHAMODI" + + " LETTER NYAMODI LETTER TTAMODI LETTER TTHAMODI LETTER DDAMODI LETTER DDH" + + "AMODI LETTER NNAMODI LETTER TAMODI LETTER THAMODI LETTER DAMODI LETTER D" + + "HAMODI LETTER NAMODI LETTER PAMODI LETTER PHAMODI LETTER BAMODI LETTER B" + + "HAMODI LETTER MAMODI LETTER YAMODI LETTER RAMODI LETTER LAMODI LETTER VA" + + "MODI LETTER SHAMODI LETTER SSAMODI LETTER SAMODI LETTER HAMODI LETTER LL" + + "AMODI VOWEL SIGN AAMODI VOWEL SIGN IMODI VOWEL SIGN IIMODI VOWEL SIGN UM" + + "ODI VOWEL SIGN UUMODI VOWEL SIGN VOCALIC RMODI VOWEL SIGN VOCALIC RRMODI" + + " VOWEL SIGN VOCALIC LMODI VOWEL SIGN VOCALIC LLMODI VOWEL SIGN EMODI VOW" + + "EL SIGN AIMODI VOWEL SIGN OMODI VOWEL SIGN AUMODI SIGN ANUSVARAMODI SIGN" + + " VISARGAMODI SIGN VIRAMAMODI SIGN ARDHACANDRAMODI DANDAMODI DOUBLE DANDA" + + "MODI ABBREVIATION SIGNMODI SIGN HUVAMODI DIGIT ZEROMODI DIGIT ONEMODI DI" + + "GIT TWOMODI DIGIT THREEMODI DIGIT FOURMODI DIGIT FIVEMODI DIGIT SIXMODI " + + "DIGIT SEVENMODI DIGIT EIGHTMODI DIGIT NINEMONGOLIAN BIRGA WITH ORNAMENTM" + + "ONGOLIAN ROTATED BIRGAMONGOLIAN DOUBLE BIRGA WITH ORNAMENTMONGOLIAN TRIP" + + "LE BIRGA WITH ORNAMENTMONGOLIAN BIRGA WITH DOUBLE ORNAMENTMONGOLIAN ROTA" + + "TED BIRGA WITH ORNAMENTMONGOLIAN ROTATED BIRGA WITH DOUBLE ORNAMENTMONGO" + + "LIAN INVERTED BIRGAMONGOLIAN INVERTED BIRGA WITH DOUBLE ORNAMENTMONGOLIA" + + "N SWIRL BIRGAMONGOLIAN SWIRL BIRGA WITH ORNAMENTMONGOLIAN SWIRL BIRGA WI" + + "TH DOUBLE ORNAMENTMONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENTTAKRI" + + " LETTER ATAKRI LETTER AATAKRI LETTER ITAKRI LETTER IITAKRI LETTER UTAKRI" + + " LETTER UUTAKRI LETTER ETAKRI LETTER AITAKRI LETTER OTAKRI LETTER AUTAKR" + + "I LETTER KATAKRI LETTER KHATAKRI LETTER GATAKRI LETTER GHATAKRI LETTER N" + + "GATAKRI LETTER CATAKRI LETTER CHATAKRI LETTER JATAKRI LETTER JHATAKRI LE" + + "TTER NYATAKRI LETTER TTATAKRI LETTER TTHATAKRI LETTER DDATAKRI LETTER DD" + + "HATAKRI LETTER NNATAKRI LETTER TATAKRI LETTER THATAKRI LETTER DATAKRI LE" + + "TTER DHATAKRI LETTER NATAKRI LETTER PATAKRI LETTER PHATAKRI LETTER BATAK" + + "RI LETTER BHATAKRI LETTER MATAKRI LETTER YATAKRI LETTER RATAKRI LETTER L" + + "ATAKRI LETTER VATAKRI LETTER SHATAKRI LETTER SATAKRI LETTER HATAKRI LETT" + + "ER RRATAKRI SIGN ANUSVARATAKRI SIGN VISARGATAKRI VOWEL SIGN AATAKRI VOWE" + + "L SIGN ITAKRI VOWEL SIGN IITAKRI VOWEL SIGN UTAKRI VOWEL SIGN UUTAKRI VO" + + "WEL SIGN ETAKRI VOWEL SIGN AITAKRI VOWEL SIGN OTAKRI VOWEL SIGN AUTAKRI " + + "SIGN VIRAMATAKRI SIGN NUKTATAKRI DIGIT ZEROTAKRI DIGIT ONETAKRI DIGIT TW" + + "OTAKRI DIGIT THREETAKRI DIGIT FOURTAKRI DIGIT FIVETAKRI DIGIT SIXTAKRI D" + + "IGIT SEVENTAKRI DIGIT EIGHTTAKRI DIGIT NINEAHOM LETTER KAAHOM LETTER KHA" + + "AHOM LETTER NGAAHOM LETTER NAAHOM LETTER TAAHOM LETTER ALTERNATE TAAHOM " + + "LETTER PAAHOM LETTER PHAAHOM LETTER BAAHOM LETTER MAAHOM LETTER JAAHOM L" + + "ETTER CHAAHOM LETTER THAAHOM LETTER RAAHOM LETTER LAAHOM LETTER SAAHOM L") + ("" + + "ETTER NYAAHOM LETTER HAAHOM LETTER AAHOM LETTER DAAHOM LETTER DHAAHOM LE" + + "TTER GAAHOM LETTER ALTERNATE GAAHOM LETTER GHAAHOM LETTER BHAAHOM LETTER" + + " JHAAHOM CONSONANT SIGN MEDIAL LAAHOM CONSONANT SIGN MEDIAL RAAHOM CONSO" + + "NANT SIGN MEDIAL LIGATING RAAHOM VOWEL SIGN AAHOM VOWEL SIGN AAAHOM VOWE" + + "L SIGN IAHOM VOWEL SIGN IIAHOM VOWEL SIGN UAHOM VOWEL SIGN UUAHOM VOWEL " + + "SIGN EAHOM VOWEL SIGN AWAHOM VOWEL SIGN OAHOM VOWEL SIGN AIAHOM VOWEL SI" + + "GN AMAHOM SIGN KILLERAHOM DIGIT ZEROAHOM DIGIT ONEAHOM DIGIT TWOAHOM DIG" + + "IT THREEAHOM DIGIT FOURAHOM DIGIT FIVEAHOM DIGIT SIXAHOM DIGIT SEVENAHOM" + + " DIGIT EIGHTAHOM DIGIT NINEAHOM NUMBER TENAHOM NUMBER TWENTYAHOM SIGN SM" + + "ALL SECTIONAHOM SIGN SECTIONAHOM SIGN RULAIAHOM SYMBOL VIWARANG CITI CAP" + + "ITAL LETTER NGAAWARANG CITI CAPITAL LETTER AWARANG CITI CAPITAL LETTER W" + + "IWARANG CITI CAPITAL LETTER YUWARANG CITI CAPITAL LETTER YAWARANG CITI C" + + "APITAL LETTER YOWARANG CITI CAPITAL LETTER IIWARANG CITI CAPITAL LETTER " + + "UUWARANG CITI CAPITAL LETTER EWARANG CITI CAPITAL LETTER OWARANG CITI CA" + + "PITAL LETTER ANGWARANG CITI CAPITAL LETTER GAWARANG CITI CAPITAL LETTER " + + "KOWARANG CITI CAPITAL LETTER ENYWARANG CITI CAPITAL LETTER YUJWARANG CIT" + + "I CAPITAL LETTER UCWARANG CITI CAPITAL LETTER ENNWARANG CITI CAPITAL LET" + + "TER ODDWARANG CITI CAPITAL LETTER TTEWARANG CITI CAPITAL LETTER NUNGWARA" + + "NG CITI CAPITAL LETTER DAWARANG CITI CAPITAL LETTER ATWARANG CITI CAPITA" + + "L LETTER AMWARANG CITI CAPITAL LETTER BUWARANG CITI CAPITAL LETTER PUWAR" + + "ANG CITI CAPITAL LETTER HIYOWARANG CITI CAPITAL LETTER HOLOWARANG CITI C" + + "APITAL LETTER HORRWARANG CITI CAPITAL LETTER HARWARANG CITI CAPITAL LETT" + + "ER SSUUWARANG CITI CAPITAL LETTER SIIWARANG CITI CAPITAL LETTER VIYOWARA" + + "NG CITI SMALL LETTER NGAAWARANG CITI SMALL LETTER AWARANG CITI SMALL LET" + + "TER WIWARANG CITI SMALL LETTER YUWARANG CITI SMALL LETTER YAWARANG CITI " + + "SMALL LETTER YOWARANG CITI SMALL LETTER IIWARANG CITI SMALL LETTER UUWAR" + + "ANG CITI SMALL LETTER EWARANG CITI SMALL LETTER OWARANG CITI SMALL LETTE" + + "R ANGWARANG CITI SMALL LETTER GAWARANG CITI SMALL LETTER KOWARANG CITI S" + + "MALL LETTER ENYWARANG CITI SMALL LETTER YUJWARANG CITI SMALL LETTER UCWA" + + "RANG CITI SMALL LETTER ENNWARANG CITI SMALL LETTER ODDWARANG CITI SMALL " + + "LETTER TTEWARANG CITI SMALL LETTER NUNGWARANG CITI SMALL LETTER DAWARANG" + + " CITI SMALL LETTER ATWARANG CITI SMALL LETTER AMWARANG CITI SMALL LETTER" + + " BUWARANG CITI SMALL LETTER PUWARANG CITI SMALL LETTER HIYOWARANG CITI S" + + "MALL LETTER HOLOWARANG CITI SMALL LETTER HORRWARANG CITI SMALL LETTER HA" + + "RWARANG CITI SMALL LETTER SSUUWARANG CITI SMALL LETTER SIIWARANG CITI SM" + + "ALL LETTER VIYOWARANG CITI DIGIT ZEROWARANG CITI DIGIT ONEWARANG CITI DI" + + "GIT TWOWARANG CITI DIGIT THREEWARANG CITI DIGIT FOURWARANG CITI DIGIT FI" + + "VEWARANG CITI DIGIT SIXWARANG CITI DIGIT SEVENWARANG CITI DIGIT EIGHTWAR" + + "ANG CITI DIGIT NINEWARANG CITI NUMBER TENWARANG CITI NUMBER TWENTYWARANG" + + " CITI NUMBER THIRTYWARANG CITI NUMBER FORTYWARANG CITI NUMBER FIFTYWARAN" + + "G CITI NUMBER SIXTYWARANG CITI NUMBER SEVENTYWARANG CITI NUMBER EIGHTYWA" + + "RANG CITI NUMBER NINETYWARANG CITI OMPAU CIN HAU LETTER PAPAU CIN HAU LE" + + "TTER KAPAU CIN HAU LETTER LAPAU CIN HAU LETTER MAPAU CIN HAU LETTER DAPA" + + "U CIN HAU LETTER ZAPAU CIN HAU LETTER VAPAU CIN HAU LETTER NGAPAU CIN HA" + + "U LETTER HAPAU CIN HAU LETTER GAPAU CIN HAU LETTER KHAPAU CIN HAU LETTER" + + " SAPAU CIN HAU LETTER BAPAU CIN HAU LETTER CAPAU CIN HAU LETTER TAPAU CI" + + "N HAU LETTER THAPAU CIN HAU LETTER NAPAU CIN HAU LETTER PHAPAU CIN HAU L" + + "ETTER RAPAU CIN HAU LETTER FAPAU CIN HAU LETTER CHAPAU CIN HAU LETTER AP" + + "AU CIN HAU LETTER EPAU CIN HAU LETTER IPAU CIN HAU LETTER OPAU CIN HAU L" + + "ETTER UPAU CIN HAU LETTER UAPAU CIN HAU LETTER IAPAU CIN HAU LETTER FINA" + + "L PPAU CIN HAU LETTER FINAL KPAU CIN HAU LETTER FINAL TPAU CIN HAU LETTE" + + "R FINAL MPAU CIN HAU LETTER FINAL NPAU CIN HAU LETTER FINAL LPAU CIN HAU" + + " LETTER FINAL WPAU CIN HAU LETTER FINAL NGPAU CIN HAU LETTER FINAL YPAU " + + "CIN HAU RISING TONE LONGPAU CIN HAU RISING TONEPAU CIN HAU SANDHI GLOTTA" + + "L STOPPAU CIN HAU RISING TONE LONG FINALPAU CIN HAU RISING TONE FINALPAU" + + " CIN HAU SANDHI GLOTTAL STOP FINALPAU CIN HAU SANDHI TONE LONGPAU CIN HA" + + "U SANDHI TONEPAU CIN HAU SANDHI TONE LONG FINALPAU CIN HAU SANDHI TONE F" + + "INALPAU CIN HAU MID-LEVEL TONEPAU CIN HAU GLOTTAL STOP VARIANTPAU CIN HA" + + "U MID-LEVEL TONE LONG FINALPAU CIN HAU MID-LEVEL TONE FINALPAU CIN HAU L" + + "OW-FALLING TONE LONGPAU CIN HAU LOW-FALLING TONEPAU CIN HAU GLOTTAL STOP" + + "PAU CIN HAU LOW-FALLING TONE LONG FINALPAU CIN HAU LOW-FALLING TONE FINA" + + "LPAU CIN HAU GLOTTAL STOP FINALBHAIKSUKI LETTER ABHAIKSUKI LETTER AABHAI" + + "KSUKI LETTER IBHAIKSUKI LETTER IIBHAIKSUKI LETTER UBHAIKSUKI LETTER UUBH" + + "AIKSUKI LETTER VOCALIC RBHAIKSUKI LETTER VOCALIC RRBHAIKSUKI LETTER VOCA") + ("" + + "LIC LBHAIKSUKI LETTER EBHAIKSUKI LETTER AIBHAIKSUKI LETTER OBHAIKSUKI LE" + + "TTER AUBHAIKSUKI LETTER KABHAIKSUKI LETTER KHABHAIKSUKI LETTER GABHAIKSU" + + "KI LETTER GHABHAIKSUKI LETTER NGABHAIKSUKI LETTER CABHAIKSUKI LETTER CHA" + + "BHAIKSUKI LETTER JABHAIKSUKI LETTER JHABHAIKSUKI LETTER NYABHAIKSUKI LET" + + "TER TTABHAIKSUKI LETTER TTHABHAIKSUKI LETTER DDABHAIKSUKI LETTER DDHABHA" + + "IKSUKI LETTER NNABHAIKSUKI LETTER TABHAIKSUKI LETTER THABHAIKSUKI LETTER" + + " DABHAIKSUKI LETTER DHABHAIKSUKI LETTER NABHAIKSUKI LETTER PABHAIKSUKI L" + + "ETTER PHABHAIKSUKI LETTER BABHAIKSUKI LETTER BHABHAIKSUKI LETTER MABHAIK" + + "SUKI LETTER YABHAIKSUKI LETTER RABHAIKSUKI LETTER LABHAIKSUKI LETTER VAB" + + "HAIKSUKI LETTER SHABHAIKSUKI LETTER SSABHAIKSUKI LETTER SABHAIKSUKI LETT" + + "ER HABHAIKSUKI VOWEL SIGN AABHAIKSUKI VOWEL SIGN IBHAIKSUKI VOWEL SIGN I" + + "IBHAIKSUKI VOWEL SIGN UBHAIKSUKI VOWEL SIGN UUBHAIKSUKI VOWEL SIGN VOCAL" + + "IC RBHAIKSUKI VOWEL SIGN VOCALIC RRBHAIKSUKI VOWEL SIGN VOCALIC LBHAIKSU" + + "KI VOWEL SIGN EBHAIKSUKI VOWEL SIGN AIBHAIKSUKI VOWEL SIGN OBHAIKSUKI VO" + + "WEL SIGN AUBHAIKSUKI SIGN CANDRABINDUBHAIKSUKI SIGN ANUSVARABHAIKSUKI SI" + + "GN VISARGABHAIKSUKI SIGN VIRAMABHAIKSUKI SIGN AVAGRAHABHAIKSUKI DANDABHA" + + "IKSUKI DOUBLE DANDABHAIKSUKI WORD SEPARATORBHAIKSUKI GAP FILLER-1BHAIKSU" + + "KI GAP FILLER-2BHAIKSUKI DIGIT ZEROBHAIKSUKI DIGIT ONEBHAIKSUKI DIGIT TW" + + "OBHAIKSUKI DIGIT THREEBHAIKSUKI DIGIT FOURBHAIKSUKI DIGIT FIVEBHAIKSUKI " + + "DIGIT SIXBHAIKSUKI DIGIT SEVENBHAIKSUKI DIGIT EIGHTBHAIKSUKI DIGIT NINEB" + + "HAIKSUKI NUMBER ONEBHAIKSUKI NUMBER TWOBHAIKSUKI NUMBER THREEBHAIKSUKI N" + + "UMBER FOURBHAIKSUKI NUMBER FIVEBHAIKSUKI NUMBER SIXBHAIKSUKI NUMBER SEVE" + + "NBHAIKSUKI NUMBER EIGHTBHAIKSUKI NUMBER NINEBHAIKSUKI NUMBER TENBHAIKSUK" + + "I NUMBER TWENTYBHAIKSUKI NUMBER THIRTYBHAIKSUKI NUMBER FORTYBHAIKSUKI NU" + + "MBER FIFTYBHAIKSUKI NUMBER SIXTYBHAIKSUKI NUMBER SEVENTYBHAIKSUKI NUMBER" + + " EIGHTYBHAIKSUKI NUMBER NINETYBHAIKSUKI HUNDREDS UNIT MARKMARCHEN HEAD M" + + "ARKMARCHEN MARK SHADMARCHEN LETTER KAMARCHEN LETTER KHAMARCHEN LETTER GA" + + "MARCHEN LETTER NGAMARCHEN LETTER CAMARCHEN LETTER CHAMARCHEN LETTER JAMA" + + "RCHEN LETTER NYAMARCHEN LETTER TAMARCHEN LETTER THAMARCHEN LETTER DAMARC" + + "HEN LETTER NAMARCHEN LETTER PAMARCHEN LETTER PHAMARCHEN LETTER BAMARCHEN" + + " LETTER MAMARCHEN LETTER TSAMARCHEN LETTER TSHAMARCHEN LETTER DZAMARCHEN" + + " LETTER WAMARCHEN LETTER ZHAMARCHEN LETTER ZAMARCHEN LETTER -AMARCHEN LE" + + "TTER YAMARCHEN LETTER RAMARCHEN LETTER LAMARCHEN LETTER SHAMARCHEN LETTE" + + "R SAMARCHEN LETTER HAMARCHEN LETTER AMARCHEN SUBJOINED LETTER KAMARCHEN " + + "SUBJOINED LETTER KHAMARCHEN SUBJOINED LETTER GAMARCHEN SUBJOINED LETTER " + + "NGAMARCHEN SUBJOINED LETTER CAMARCHEN SUBJOINED LETTER CHAMARCHEN SUBJOI" + + "NED LETTER JAMARCHEN SUBJOINED LETTER NYAMARCHEN SUBJOINED LETTER TAMARC" + + "HEN SUBJOINED LETTER THAMARCHEN SUBJOINED LETTER DAMARCHEN SUBJOINED LET" + + "TER NAMARCHEN SUBJOINED LETTER PAMARCHEN SUBJOINED LETTER PHAMARCHEN SUB" + + "JOINED LETTER BAMARCHEN SUBJOINED LETTER MAMARCHEN SUBJOINED LETTER TSAM" + + "ARCHEN SUBJOINED LETTER TSHAMARCHEN SUBJOINED LETTER DZAMARCHEN SUBJOINE" + + "D LETTER WAMARCHEN SUBJOINED LETTER ZHAMARCHEN SUBJOINED LETTER ZAMARCHE" + + "N SUBJOINED LETTER YAMARCHEN SUBJOINED LETTER RAMARCHEN SUBJOINED LETTER" + + " LAMARCHEN SUBJOINED LETTER SHAMARCHEN SUBJOINED LETTER SAMARCHEN SUBJOI" + + "NED LETTER HAMARCHEN SUBJOINED LETTER AMARCHEN VOWEL SIGN AAMARCHEN VOWE" + + "L SIGN IMARCHEN VOWEL SIGN UMARCHEN VOWEL SIGN EMARCHEN VOWEL SIGN OMARC" + + "HEN SIGN ANUSVARAMARCHEN SIGN CANDRABINDUCUNEIFORM SIGN ACUNEIFORM SIGN " + + "A TIMES ACUNEIFORM SIGN A TIMES BADCUNEIFORM SIGN A TIMES GAN2 TENUCUNEI" + + "FORM SIGN A TIMES HACUNEIFORM SIGN A TIMES IGICUNEIFORM SIGN A TIMES LAG" + + "AR GUNUCUNEIFORM SIGN A TIMES MUSHCUNEIFORM SIGN A TIMES SAGCUNEIFORM SI" + + "GN A2CUNEIFORM SIGN ABCUNEIFORM SIGN AB TIMES ASH2CUNEIFORM SIGN AB TIME" + + "S DUN3 GUNUCUNEIFORM SIGN AB TIMES GALCUNEIFORM SIGN AB TIMES GAN2 TENUC" + + "UNEIFORM SIGN AB TIMES HACUNEIFORM SIGN AB TIMES IGI GUNUCUNEIFORM SIGN " + + "AB TIMES IMINCUNEIFORM SIGN AB TIMES LAGABCUNEIFORM SIGN AB TIMES SHESHC" + + "UNEIFORM SIGN AB TIMES U PLUS U PLUS UCUNEIFORM SIGN AB GUNUCUNEIFORM SI" + + "GN AB2CUNEIFORM SIGN AB2 TIMES BALAGCUNEIFORM SIGN AB2 TIMES GAN2 TENUCU" + + "NEIFORM SIGN AB2 TIMES ME PLUS ENCUNEIFORM SIGN AB2 TIMES SHA3CUNEIFORM " + + "SIGN AB2 TIMES TAK4CUNEIFORM SIGN ADCUNEIFORM SIGN AKCUNEIFORM SIGN AK T" + + "IMES ERIN2CUNEIFORM SIGN AK TIMES SHITA PLUS GISHCUNEIFORM SIGN ALCUNEIF" + + "ORM SIGN AL TIMES ALCUNEIFORM SIGN AL TIMES DIM2CUNEIFORM SIGN AL TIMES " + + "GISHCUNEIFORM SIGN AL TIMES HACUNEIFORM SIGN AL TIMES KAD3CUNEIFORM SIGN" + + " AL TIMES KICUNEIFORM SIGN AL TIMES SHECUNEIFORM SIGN AL TIMES USHCUNEIF" + + "ORM SIGN ALANCUNEIFORM SIGN ALEPHCUNEIFORM SIGN AMARCUNEIFORM SIGN AMAR " + + "TIMES SHECUNEIFORM SIGN ANCUNEIFORM SIGN AN OVER ANCUNEIFORM SIGN AN THR") + ("" + + "EE TIMESCUNEIFORM SIGN AN PLUS NAGA OPPOSING AN PLUS NAGACUNEIFORM SIGN " + + "AN PLUS NAGA SQUAREDCUNEIFORM SIGN ANSHECUNEIFORM SIGN APINCUNEIFORM SIG" + + "N ARADCUNEIFORM SIGN ARAD TIMES KURCUNEIFORM SIGN ARKABCUNEIFORM SIGN AS" + + "AL2CUNEIFORM SIGN ASHCUNEIFORM SIGN ASH ZIDA TENUCUNEIFORM SIGN ASH KABA" + + " TENUCUNEIFORM SIGN ASH OVER ASH TUG2 OVER TUG2 TUG2 OVER TUG2 PAPCUNEIF" + + "ORM SIGN ASH OVER ASH OVER ASHCUNEIFORM SIGN ASH OVER ASH OVER ASH CROSS" + + "ING ASH OVER ASH OVER ASHCUNEIFORM SIGN ASH2CUNEIFORM SIGN ASHGABCUNEIFO" + + "RM SIGN BACUNEIFORM SIGN BADCUNEIFORM SIGN BAG3CUNEIFORM SIGN BAHAR2CUNE" + + "IFORM SIGN BALCUNEIFORM SIGN BAL OVER BALCUNEIFORM SIGN BALAGCUNEIFORM S" + + "IGN BARCUNEIFORM SIGN BARA2CUNEIFORM SIGN BICUNEIFORM SIGN BI TIMES ACUN" + + "EIFORM SIGN BI TIMES GARCUNEIFORM SIGN BI TIMES IGI GUNUCUNEIFORM SIGN B" + + "UCUNEIFORM SIGN BU OVER BU ABCUNEIFORM SIGN BU OVER BU UNCUNEIFORM SIGN " + + "BU CROSSING BUCUNEIFORM SIGN BULUGCUNEIFORM SIGN BULUG OVER BULUGCUNEIFO" + + "RM SIGN BURCUNEIFORM SIGN BUR2CUNEIFORM SIGN DACUNEIFORM SIGN DAGCUNEIFO" + + "RM SIGN DAG KISIM5 TIMES A PLUS MASHCUNEIFORM SIGN DAG KISIM5 TIMES AMAR" + + "CUNEIFORM SIGN DAG KISIM5 TIMES BALAGCUNEIFORM SIGN DAG KISIM5 TIMES BIC" + + "UNEIFORM SIGN DAG KISIM5 TIMES GACUNEIFORM SIGN DAG KISIM5 TIMES GA PLUS" + + " MASHCUNEIFORM SIGN DAG KISIM5 TIMES GICUNEIFORM SIGN DAG KISIM5 TIMES G" + + "IR2CUNEIFORM SIGN DAG KISIM5 TIMES GUDCUNEIFORM SIGN DAG KISIM5 TIMES HA" + + "CUNEIFORM SIGN DAG KISIM5 TIMES IRCUNEIFORM SIGN DAG KISIM5 TIMES IR PLU" + + "S LUCUNEIFORM SIGN DAG KISIM5 TIMES KAKCUNEIFORM SIGN DAG KISIM5 TIMES L" + + "ACUNEIFORM SIGN DAG KISIM5 TIMES LUCUNEIFORM SIGN DAG KISIM5 TIMES LU PL" + + "US MASH2CUNEIFORM SIGN DAG KISIM5 TIMES LUMCUNEIFORM SIGN DAG KISIM5 TIM" + + "ES NECUNEIFORM SIGN DAG KISIM5 TIMES PAP PLUS PAPCUNEIFORM SIGN DAG KISI" + + "M5 TIMES SICUNEIFORM SIGN DAG KISIM5 TIMES TAK4CUNEIFORM SIGN DAG KISIM5" + + " TIMES U2 PLUS GIR2CUNEIFORM SIGN DAG KISIM5 TIMES USHCUNEIFORM SIGN DAM" + + "CUNEIFORM SIGN DARCUNEIFORM SIGN DARA3CUNEIFORM SIGN DARA4CUNEIFORM SIGN" + + " DICUNEIFORM SIGN DIBCUNEIFORM SIGN DIMCUNEIFORM SIGN DIM TIMES SHECUNEI" + + "FORM SIGN DIM2CUNEIFORM SIGN DINCUNEIFORM SIGN DIN KASKAL U GUNU DISHCUN" + + "EIFORM SIGN DISHCUNEIFORM SIGN DUCUNEIFORM SIGN DU OVER DUCUNEIFORM SIGN" + + " DU GUNUCUNEIFORM SIGN DU SHESHIGCUNEIFORM SIGN DUBCUNEIFORM SIGN DUB TI" + + "MES ESH2CUNEIFORM SIGN DUB2CUNEIFORM SIGN DUGCUNEIFORM SIGN DUGUDCUNEIFO" + + "RM SIGN DUHCUNEIFORM SIGN DUNCUNEIFORM SIGN DUN3CUNEIFORM SIGN DUN3 GUNU" + + "CUNEIFORM SIGN DUN3 GUNU GUNUCUNEIFORM SIGN DUN4CUNEIFORM SIGN DUR2CUNEI" + + "FORM SIGN ECUNEIFORM SIGN E TIMES PAPCUNEIFORM SIGN E OVER E NUN OVER NU" + + "NCUNEIFORM SIGN E2CUNEIFORM SIGN E2 TIMES A PLUS HA PLUS DACUNEIFORM SIG" + + "N E2 TIMES GARCUNEIFORM SIGN E2 TIMES MICUNEIFORM SIGN E2 TIMES SALCUNEI" + + "FORM SIGN E2 TIMES SHECUNEIFORM SIGN E2 TIMES UCUNEIFORM SIGN EDINCUNEIF" + + "ORM SIGN EGIRCUNEIFORM SIGN ELCUNEIFORM SIGN ENCUNEIFORM SIGN EN TIMES G" + + "AN2CUNEIFORM SIGN EN TIMES GAN2 TENUCUNEIFORM SIGN EN TIMES MECUNEIFORM " + + "SIGN EN CROSSING ENCUNEIFORM SIGN EN OPPOSING ENCUNEIFORM SIGN EN SQUARE" + + "DCUNEIFORM SIGN ERENCUNEIFORM SIGN ERIN2CUNEIFORM SIGN ESH2CUNEIFORM SIG" + + "N EZENCUNEIFORM SIGN EZEN TIMES ACUNEIFORM SIGN EZEN TIMES A PLUS LALCUN" + + "EIFORM SIGN EZEN TIMES A PLUS LAL TIMES LALCUNEIFORM SIGN EZEN TIMES ANC" + + "UNEIFORM SIGN EZEN TIMES BADCUNEIFORM SIGN EZEN TIMES DUN3 GUNUCUNEIFORM" + + " SIGN EZEN TIMES DUN3 GUNU GUNUCUNEIFORM SIGN EZEN TIMES HACUNEIFORM SIG" + + "N EZEN TIMES HA GUNUCUNEIFORM SIGN EZEN TIMES IGI GUNUCUNEIFORM SIGN EZE" + + "N TIMES KASKALCUNEIFORM SIGN EZEN TIMES KASKAL SQUAREDCUNEIFORM SIGN EZE" + + "N TIMES KU3CUNEIFORM SIGN EZEN TIMES LACUNEIFORM SIGN EZEN TIMES LAL TIM" + + "ES LALCUNEIFORM SIGN EZEN TIMES LICUNEIFORM SIGN EZEN TIMES LUCUNEIFORM " + + "SIGN EZEN TIMES U2CUNEIFORM SIGN EZEN TIMES UDCUNEIFORM SIGN GACUNEIFORM" + + " SIGN GA GUNUCUNEIFORM SIGN GA2CUNEIFORM SIGN GA2 TIMES A PLUS DA PLUS H" + + "ACUNEIFORM SIGN GA2 TIMES A PLUS HACUNEIFORM SIGN GA2 TIMES A PLUS IGICU" + + "NEIFORM SIGN GA2 TIMES AB2 TENU PLUS TABCUNEIFORM SIGN GA2 TIMES ANCUNEI" + + "FORM SIGN GA2 TIMES ASHCUNEIFORM SIGN GA2 TIMES ASH2 PLUS GALCUNEIFORM S" + + "IGN GA2 TIMES BADCUNEIFORM SIGN GA2 TIMES BAR PLUS RACUNEIFORM SIGN GA2 " + + "TIMES BURCUNEIFORM SIGN GA2 TIMES BUR PLUS RACUNEIFORM SIGN GA2 TIMES DA" + + "CUNEIFORM SIGN GA2 TIMES DICUNEIFORM SIGN GA2 TIMES DIM TIMES SHECUNEIFO" + + "RM SIGN GA2 TIMES DUBCUNEIFORM SIGN GA2 TIMES ELCUNEIFORM SIGN GA2 TIMES" + + " EL PLUS LACUNEIFORM SIGN GA2 TIMES ENCUNEIFORM SIGN GA2 TIMES EN TIMES " + + "GAN2 TENUCUNEIFORM SIGN GA2 TIMES GAN2 TENUCUNEIFORM SIGN GA2 TIMES GARC" + + "UNEIFORM SIGN GA2 TIMES GICUNEIFORM SIGN GA2 TIMES GI4CUNEIFORM SIGN GA2" + + " TIMES GI4 PLUS ACUNEIFORM SIGN GA2 TIMES GIR2 PLUS SUCUNEIFORM SIGN GA2" + + " TIMES HA PLUS LU PLUS ESH2CUNEIFORM SIGN GA2 TIMES HALCUNEIFORM SIGN GA") + ("" + + "2 TIMES HAL PLUS LACUNEIFORM SIGN GA2 TIMES HI PLUS LICUNEIFORM SIGN GA2" + + " TIMES HUB2CUNEIFORM SIGN GA2 TIMES IGI GUNUCUNEIFORM SIGN GA2 TIMES ISH" + + " PLUS HU PLUS ASHCUNEIFORM SIGN GA2 TIMES KAKCUNEIFORM SIGN GA2 TIMES KA" + + "SKALCUNEIFORM SIGN GA2 TIMES KIDCUNEIFORM SIGN GA2 TIMES KID PLUS LALCUN" + + "EIFORM SIGN GA2 TIMES KU3 PLUS ANCUNEIFORM SIGN GA2 TIMES LACUNEIFORM SI" + + "GN GA2 TIMES ME PLUS ENCUNEIFORM SIGN GA2 TIMES MICUNEIFORM SIGN GA2 TIM" + + "ES NUNCUNEIFORM SIGN GA2 TIMES NUN OVER NUNCUNEIFORM SIGN GA2 TIMES PACU" + + "NEIFORM SIGN GA2 TIMES SALCUNEIFORM SIGN GA2 TIMES SARCUNEIFORM SIGN GA2" + + " TIMES SHECUNEIFORM SIGN GA2 TIMES SHE PLUS TURCUNEIFORM SIGN GA2 TIMES " + + "SHIDCUNEIFORM SIGN GA2 TIMES SUMCUNEIFORM SIGN GA2 TIMES TAK4CUNEIFORM S" + + "IGN GA2 TIMES UCUNEIFORM SIGN GA2 TIMES UDCUNEIFORM SIGN GA2 TIMES UD PL" + + "US DUCUNEIFORM SIGN GA2 OVER GA2CUNEIFORM SIGN GABACUNEIFORM SIGN GABA C" + + "ROSSING GABACUNEIFORM SIGN GADCUNEIFORM SIGN GAD OVER GAD GAR OVER GARCU" + + "NEIFORM SIGN GALCUNEIFORM SIGN GAL GAD OVER GAD GAR OVER GARCUNEIFORM SI" + + "GN GALAMCUNEIFORM SIGN GAMCUNEIFORM SIGN GANCUNEIFORM SIGN GAN2CUNEIFORM" + + " SIGN GAN2 TENUCUNEIFORM SIGN GAN2 OVER GAN2CUNEIFORM SIGN GAN2 CROSSING" + + " GAN2CUNEIFORM SIGN GARCUNEIFORM SIGN GAR3CUNEIFORM SIGN GASHANCUNEIFORM" + + " SIGN GESHTINCUNEIFORM SIGN GESHTIN TIMES KURCUNEIFORM SIGN GICUNEIFORM " + + "SIGN GI TIMES ECUNEIFORM SIGN GI TIMES UCUNEIFORM SIGN GI CROSSING GICUN" + + "EIFORM SIGN GI4CUNEIFORM SIGN GI4 OVER GI4CUNEIFORM SIGN GI4 CROSSING GI" + + "4CUNEIFORM SIGN GIDIMCUNEIFORM SIGN GIR2CUNEIFORM SIGN GIR2 GUNUCUNEIFOR" + + "M SIGN GIR3CUNEIFORM SIGN GIR3 TIMES A PLUS IGICUNEIFORM SIGN GIR3 TIMES" + + " GAN2 TENUCUNEIFORM SIGN GIR3 TIMES IGICUNEIFORM SIGN GIR3 TIMES LU PLUS" + + " IGICUNEIFORM SIGN GIR3 TIMES PACUNEIFORM SIGN GISALCUNEIFORM SIGN GISHC" + + "UNEIFORM SIGN GISH CROSSING GISHCUNEIFORM SIGN GISH TIMES BADCUNEIFORM S" + + "IGN GISH TIMES TAK4CUNEIFORM SIGN GISH TENUCUNEIFORM SIGN GUCUNEIFORM SI" + + "GN GU CROSSING GUCUNEIFORM SIGN GU2CUNEIFORM SIGN GU2 TIMES KAKCUNEIFORM" + + " SIGN GU2 TIMES KAK TIMES IGI GUNUCUNEIFORM SIGN GU2 TIMES NUNCUNEIFORM " + + "SIGN GU2 TIMES SAL PLUS TUG2CUNEIFORM SIGN GU2 GUNUCUNEIFORM SIGN GUDCUN" + + "EIFORM SIGN GUD TIMES A PLUS KURCUNEIFORM SIGN GUD TIMES KURCUNEIFORM SI" + + "GN GUD OVER GUD LUGALCUNEIFORM SIGN GULCUNEIFORM SIGN GUMCUNEIFORM SIGN " + + "GUM TIMES SHECUNEIFORM SIGN GURCUNEIFORM SIGN GUR7CUNEIFORM SIGN GURUNCU" + + "NEIFORM SIGN GURUSHCUNEIFORM SIGN HACUNEIFORM SIGN HA TENUCUNEIFORM SIGN" + + " HA GUNUCUNEIFORM SIGN HALCUNEIFORM SIGN HICUNEIFORM SIGN HI TIMES ASHCU" + + "NEIFORM SIGN HI TIMES ASH2CUNEIFORM SIGN HI TIMES BADCUNEIFORM SIGN HI T" + + "IMES DISHCUNEIFORM SIGN HI TIMES GADCUNEIFORM SIGN HI TIMES KINCUNEIFORM" + + " SIGN HI TIMES NUNCUNEIFORM SIGN HI TIMES SHECUNEIFORM SIGN HI TIMES UCU" + + "NEIFORM SIGN HUCUNEIFORM SIGN HUB2CUNEIFORM SIGN HUB2 TIMES ANCUNEIFORM " + + "SIGN HUB2 TIMES HALCUNEIFORM SIGN HUB2 TIMES KASKALCUNEIFORM SIGN HUB2 T" + + "IMES LISHCUNEIFORM SIGN HUB2 TIMES UDCUNEIFORM SIGN HUL2CUNEIFORM SIGN I" + + "CUNEIFORM SIGN I ACUNEIFORM SIGN IBCUNEIFORM SIGN IDIMCUNEIFORM SIGN IDI" + + "M OVER IDIM BURCUNEIFORM SIGN IDIM OVER IDIM SQUAREDCUNEIFORM SIGN IGCUN" + + "EIFORM SIGN IGICUNEIFORM SIGN IGI DIBCUNEIFORM SIGN IGI RICUNEIFORM SIGN" + + " IGI OVER IGI SHIR OVER SHIR UD OVER UDCUNEIFORM SIGN IGI GUNUCUNEIFORM " + + "SIGN ILCUNEIFORM SIGN IL TIMES GAN2 TENUCUNEIFORM SIGN IL2CUNEIFORM SIGN" + + " IMCUNEIFORM SIGN IM TIMES TAK4CUNEIFORM SIGN IM CROSSING IMCUNEIFORM SI" + + "GN IM OPPOSING IMCUNEIFORM SIGN IM SQUAREDCUNEIFORM SIGN IMINCUNEIFORM S" + + "IGN INCUNEIFORM SIGN IRCUNEIFORM SIGN ISHCUNEIFORM SIGN KACUNEIFORM SIGN" + + " KA TIMES ACUNEIFORM SIGN KA TIMES ADCUNEIFORM SIGN KA TIMES AD PLUS KU3" + + "CUNEIFORM SIGN KA TIMES ASH2CUNEIFORM SIGN KA TIMES BADCUNEIFORM SIGN KA" + + " TIMES BALAGCUNEIFORM SIGN KA TIMES BARCUNEIFORM SIGN KA TIMES BICUNEIFO" + + "RM SIGN KA TIMES ERIN2CUNEIFORM SIGN KA TIMES ESH2CUNEIFORM SIGN KA TIME" + + "S GACUNEIFORM SIGN KA TIMES GALCUNEIFORM SIGN KA TIMES GAN2 TENUCUNEIFOR" + + "M SIGN KA TIMES GARCUNEIFORM SIGN KA TIMES GAR PLUS SHA3 PLUS ACUNEIFORM" + + " SIGN KA TIMES GICUNEIFORM SIGN KA TIMES GIR2CUNEIFORM SIGN KA TIMES GIS" + + "H PLUS SARCUNEIFORM SIGN KA TIMES GISH CROSSING GISHCUNEIFORM SIGN KA TI" + + "MES GUCUNEIFORM SIGN KA TIMES GUR7CUNEIFORM SIGN KA TIMES IGICUNEIFORM S" + + "IGN KA TIMES IMCUNEIFORM SIGN KA TIMES KAKCUNEIFORM SIGN KA TIMES KICUNE" + + "IFORM SIGN KA TIMES KIDCUNEIFORM SIGN KA TIMES LICUNEIFORM SIGN KA TIMES" + + " LUCUNEIFORM SIGN KA TIMES MECUNEIFORM SIGN KA TIMES ME PLUS DUCUNEIFORM" + + " SIGN KA TIMES ME PLUS GICUNEIFORM SIGN KA TIMES ME PLUS TECUNEIFORM SIG" + + "N KA TIMES MICUNEIFORM SIGN KA TIMES MI PLUS NUNUZCUNEIFORM SIGN KA TIME" + + "S NECUNEIFORM SIGN KA TIMES NUNCUNEIFORM SIGN KA TIMES PICUNEIFORM SIGN " + + "KA TIMES RUCUNEIFORM SIGN KA TIMES SACUNEIFORM SIGN KA TIMES SARCUNEIFOR") + ("" + + "M SIGN KA TIMES SHACUNEIFORM SIGN KA TIMES SHECUNEIFORM SIGN KA TIMES SH" + + "IDCUNEIFORM SIGN KA TIMES SHUCUNEIFORM SIGN KA TIMES SIGCUNEIFORM SIGN K" + + "A TIMES SUHURCUNEIFORM SIGN KA TIMES TARCUNEIFORM SIGN KA TIMES UCUNEIFO" + + "RM SIGN KA TIMES U2CUNEIFORM SIGN KA TIMES UDCUNEIFORM SIGN KA TIMES UMU" + + "M TIMES PACUNEIFORM SIGN KA TIMES USHCUNEIFORM SIGN KA TIMES ZICUNEIFORM" + + " SIGN KA2CUNEIFORM SIGN KA2 CROSSING KA2CUNEIFORM SIGN KABCUNEIFORM SIGN" + + " KAD2CUNEIFORM SIGN KAD3CUNEIFORM SIGN KAD4CUNEIFORM SIGN KAD5CUNEIFORM " + + "SIGN KAD5 OVER KAD5CUNEIFORM SIGN KAKCUNEIFORM SIGN KAK TIMES IGI GUNUCU" + + "NEIFORM SIGN KALCUNEIFORM SIGN KAL TIMES BADCUNEIFORM SIGN KAL CROSSING " + + "KALCUNEIFORM SIGN KAM2CUNEIFORM SIGN KAM4CUNEIFORM SIGN KASKALCUNEIFORM " + + "SIGN KASKAL LAGAB TIMES U OVER LAGAB TIMES UCUNEIFORM SIGN KASKAL OVER K" + + "ASKAL LAGAB TIMES U OVER LAGAB TIMES UCUNEIFORM SIGN KESH2CUNEIFORM SIGN" + + " KICUNEIFORM SIGN KI TIMES BADCUNEIFORM SIGN KI TIMES UCUNEIFORM SIGN KI" + + " TIMES UDCUNEIFORM SIGN KIDCUNEIFORM SIGN KINCUNEIFORM SIGN KISALCUNEIFO" + + "RM SIGN KISHCUNEIFORM SIGN KISIM5CUNEIFORM SIGN KISIM5 OVER KISIM5CUNEIF" + + "ORM SIGN KUCUNEIFORM SIGN KU OVER HI TIMES ASH2 KU OVER HI TIMES ASH2CUN" + + "EIFORM SIGN KU3CUNEIFORM SIGN KU4CUNEIFORM SIGN KU4 VARIANT FORMCUNEIFOR" + + "M SIGN KU7CUNEIFORM SIGN KULCUNEIFORM SIGN KUL GUNUCUNEIFORM SIGN KUNCUN" + + "EIFORM SIGN KURCUNEIFORM SIGN KUR OPPOSING KURCUNEIFORM SIGN KUSHU2CUNEI" + + "FORM SIGN KWU318CUNEIFORM SIGN LACUNEIFORM SIGN LAGABCUNEIFORM SIGN LAGA" + + "B TIMES ACUNEIFORM SIGN LAGAB TIMES A PLUS DA PLUS HACUNEIFORM SIGN LAGA" + + "B TIMES A PLUS GARCUNEIFORM SIGN LAGAB TIMES A PLUS LALCUNEIFORM SIGN LA" + + "GAB TIMES ALCUNEIFORM SIGN LAGAB TIMES ANCUNEIFORM SIGN LAGAB TIMES ASH " + + "ZIDA TENUCUNEIFORM SIGN LAGAB TIMES BADCUNEIFORM SIGN LAGAB TIMES BICUNE" + + "IFORM SIGN LAGAB TIMES DARCUNEIFORM SIGN LAGAB TIMES ENCUNEIFORM SIGN LA" + + "GAB TIMES GACUNEIFORM SIGN LAGAB TIMES GARCUNEIFORM SIGN LAGAB TIMES GUD" + + "CUNEIFORM SIGN LAGAB TIMES GUD PLUS GUDCUNEIFORM SIGN LAGAB TIMES HACUNE" + + "IFORM SIGN LAGAB TIMES HALCUNEIFORM SIGN LAGAB TIMES HI TIMES NUNCUNEIFO" + + "RM SIGN LAGAB TIMES IGI GUNUCUNEIFORM SIGN LAGAB TIMES IMCUNEIFORM SIGN " + + "LAGAB TIMES IM PLUS HACUNEIFORM SIGN LAGAB TIMES IM PLUS LUCUNEIFORM SIG" + + "N LAGAB TIMES KICUNEIFORM SIGN LAGAB TIMES KINCUNEIFORM SIGN LAGAB TIMES" + + " KU3CUNEIFORM SIGN LAGAB TIMES KULCUNEIFORM SIGN LAGAB TIMES KUL PLUS HI" + + " PLUS ACUNEIFORM SIGN LAGAB TIMES LAGABCUNEIFORM SIGN LAGAB TIMES LISHCU" + + "NEIFORM SIGN LAGAB TIMES LUCUNEIFORM SIGN LAGAB TIMES LULCUNEIFORM SIGN " + + "LAGAB TIMES MECUNEIFORM SIGN LAGAB TIMES ME PLUS ENCUNEIFORM SIGN LAGAB " + + "TIMES MUSHCUNEIFORM SIGN LAGAB TIMES NECUNEIFORM SIGN LAGAB TIMES SHE PL" + + "US SUMCUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH PLUS ERIN2CUNEIFORM SIG" + + "N LAGAB TIMES SHITA PLUS GISH TENUCUNEIFORM SIGN LAGAB TIMES SHU2CUNEIFO" + + "RM SIGN LAGAB TIMES SHU2 PLUS SHU2CUNEIFORM SIGN LAGAB TIMES SUMCUNEIFOR" + + "M SIGN LAGAB TIMES TAGCUNEIFORM SIGN LAGAB TIMES TAK4CUNEIFORM SIGN LAGA" + + "B TIMES TE PLUS A PLUS SU PLUS NACUNEIFORM SIGN LAGAB TIMES UCUNEIFORM S" + + "IGN LAGAB TIMES U PLUS ACUNEIFORM SIGN LAGAB TIMES U PLUS U PLUS UCUNEIF" + + "ORM SIGN LAGAB TIMES U2 PLUS ASHCUNEIFORM SIGN LAGAB TIMES UDCUNEIFORM S" + + "IGN LAGAB TIMES USHCUNEIFORM SIGN LAGAB SQUAREDCUNEIFORM SIGN LAGARCUNEI" + + "FORM SIGN LAGAR TIMES SHECUNEIFORM SIGN LAGAR TIMES SHE PLUS SUMCUNEIFOR" + + "M SIGN LAGAR GUNUCUNEIFORM SIGN LAGAR GUNU OVER LAGAR GUNU SHECUNEIFORM " + + "SIGN LAHSHUCUNEIFORM SIGN LALCUNEIFORM SIGN LAL TIMES LALCUNEIFORM SIGN " + + "LAMCUNEIFORM SIGN LAM TIMES KURCUNEIFORM SIGN LAM TIMES KUR PLUS RUCUNEI" + + "FORM SIGN LICUNEIFORM SIGN LILCUNEIFORM SIGN LIMMU2CUNEIFORM SIGN LISHCU" + + "NEIFORM SIGN LUCUNEIFORM SIGN LU TIMES BADCUNEIFORM SIGN LU2CUNEIFORM SI" + + "GN LU2 TIMES ALCUNEIFORM SIGN LU2 TIMES BADCUNEIFORM SIGN LU2 TIMES ESH2" + + "CUNEIFORM SIGN LU2 TIMES ESH2 TENUCUNEIFORM SIGN LU2 TIMES GAN2 TENUCUNE" + + "IFORM SIGN LU2 TIMES HI TIMES BADCUNEIFORM SIGN LU2 TIMES IMCUNEIFORM SI" + + "GN LU2 TIMES KAD2CUNEIFORM SIGN LU2 TIMES KAD3CUNEIFORM SIGN LU2 TIMES K" + + "AD3 PLUS ASHCUNEIFORM SIGN LU2 TIMES KICUNEIFORM SIGN LU2 TIMES LA PLUS " + + "ASHCUNEIFORM SIGN LU2 TIMES LAGABCUNEIFORM SIGN LU2 TIMES ME PLUS ENCUNE" + + "IFORM SIGN LU2 TIMES NECUNEIFORM SIGN LU2 TIMES NUCUNEIFORM SIGN LU2 TIM" + + "ES SI PLUS ASHCUNEIFORM SIGN LU2 TIMES SIK2 PLUS BUCUNEIFORM SIGN LU2 TI" + + "MES TUG2CUNEIFORM SIGN LU2 TENUCUNEIFORM SIGN LU2 CROSSING LU2CUNEIFORM " + + "SIGN LU2 OPPOSING LU2CUNEIFORM SIGN LU2 SQUAREDCUNEIFORM SIGN LU2 SHESHI" + + "GCUNEIFORM SIGN LU3CUNEIFORM SIGN LUGALCUNEIFORM SIGN LUGAL OVER LUGALCU" + + "NEIFORM SIGN LUGAL OPPOSING LUGALCUNEIFORM SIGN LUGAL SHESHIGCUNEIFORM S" + + "IGN LUHCUNEIFORM SIGN LULCUNEIFORM SIGN LUMCUNEIFORM SIGN LUM OVER LUMCU" + + "NEIFORM SIGN LUM OVER LUM GAR OVER GARCUNEIFORM SIGN MACUNEIFORM SIGN MA") + ("" + + " TIMES TAK4CUNEIFORM SIGN MA GUNUCUNEIFORM SIGN MA2CUNEIFORM SIGN MAHCUN" + + "EIFORM SIGN MARCUNEIFORM SIGN MASHCUNEIFORM SIGN MASH2CUNEIFORM SIGN MEC" + + "UNEIFORM SIGN MESCUNEIFORM SIGN MICUNEIFORM SIGN MINCUNEIFORM SIGN MUCUN" + + "EIFORM SIGN MU OVER MUCUNEIFORM SIGN MUGCUNEIFORM SIGN MUG GUNUCUNEIFORM" + + " SIGN MUNSUBCUNEIFORM SIGN MURGU2CUNEIFORM SIGN MUSHCUNEIFORM SIGN MUSH " + + "TIMES ACUNEIFORM SIGN MUSH TIMES KURCUNEIFORM SIGN MUSH TIMES ZACUNEIFOR" + + "M SIGN MUSH OVER MUSHCUNEIFORM SIGN MUSH OVER MUSH TIMES A PLUS NACUNEIF" + + "ORM SIGN MUSH CROSSING MUSHCUNEIFORM SIGN MUSH3CUNEIFORM SIGN MUSH3 TIME" + + "S ACUNEIFORM SIGN MUSH3 TIMES A PLUS DICUNEIFORM SIGN MUSH3 TIMES DICUNE" + + "IFORM SIGN MUSH3 GUNUCUNEIFORM SIGN NACUNEIFORM SIGN NA2CUNEIFORM SIGN N" + + "AGACUNEIFORM SIGN NAGA INVERTEDCUNEIFORM SIGN NAGA TIMES SHU TENUCUNEIFO" + + "RM SIGN NAGA OPPOSING NAGACUNEIFORM SIGN NAGARCUNEIFORM SIGN NAM NUTILLU" + + "CUNEIFORM SIGN NAMCUNEIFORM SIGN NAM2CUNEIFORM SIGN NECUNEIFORM SIGN NE " + + "TIMES ACUNEIFORM SIGN NE TIMES UDCUNEIFORM SIGN NE SHESHIGCUNEIFORM SIGN" + + " NICUNEIFORM SIGN NI TIMES ECUNEIFORM SIGN NI2CUNEIFORM SIGN NIMCUNEIFOR" + + "M SIGN NIM TIMES GAN2 TENUCUNEIFORM SIGN NIM TIMES GAR PLUS GAN2 TENUCUN" + + "EIFORM SIGN NINDA2CUNEIFORM SIGN NINDA2 TIMES ANCUNEIFORM SIGN NINDA2 TI" + + "MES ASHCUNEIFORM SIGN NINDA2 TIMES ASH PLUS ASHCUNEIFORM SIGN NINDA2 TIM" + + "ES GUDCUNEIFORM SIGN NINDA2 TIMES ME PLUS GAN2 TENUCUNEIFORM SIGN NINDA2" + + " TIMES NECUNEIFORM SIGN NINDA2 TIMES NUNCUNEIFORM SIGN NINDA2 TIMES SHEC" + + "UNEIFORM SIGN NINDA2 TIMES SHE PLUS A ANCUNEIFORM SIGN NINDA2 TIMES SHE " + + "PLUS ASHCUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH PLUS ASHCUNEIFORM SIGN " + + "NINDA2 TIMES U2 PLUS ASHCUNEIFORM SIGN NINDA2 TIMES USHCUNEIFORM SIGN NI" + + "SAGCUNEIFORM SIGN NUCUNEIFORM SIGN NU11CUNEIFORM SIGN NUNCUNEIFORM SIGN " + + "NUN LAGAR TIMES GARCUNEIFORM SIGN NUN LAGAR TIMES MASHCUNEIFORM SIGN NUN" + + " LAGAR TIMES SALCUNEIFORM SIGN NUN LAGAR TIMES SAL OVER NUN LAGAR TIMES " + + "SALCUNEIFORM SIGN NUN LAGAR TIMES USHCUNEIFORM SIGN NUN TENUCUNEIFORM SI" + + "GN NUN OVER NUNCUNEIFORM SIGN NUN CROSSING NUNCUNEIFORM SIGN NUN CROSSIN" + + "G NUN LAGAR OVER LAGARCUNEIFORM SIGN NUNUZCUNEIFORM SIGN NUNUZ AB2 TIMES" + + " ASHGABCUNEIFORM SIGN NUNUZ AB2 TIMES BICUNEIFORM SIGN NUNUZ AB2 TIMES D" + + "UGCUNEIFORM SIGN NUNUZ AB2 TIMES GUDCUNEIFORM SIGN NUNUZ AB2 TIMES IGI G" + + "UNUCUNEIFORM SIGN NUNUZ AB2 TIMES KAD3CUNEIFORM SIGN NUNUZ AB2 TIMES LAC" + + "UNEIFORM SIGN NUNUZ AB2 TIMES NECUNEIFORM SIGN NUNUZ AB2 TIMES SILA3CUNE" + + "IFORM SIGN NUNUZ AB2 TIMES U2CUNEIFORM SIGN NUNUZ KISIM5 TIMES BICUNEIFO" + + "RM SIGN NUNUZ KISIM5 TIMES BI UCUNEIFORM SIGN PACUNEIFORM SIGN PADCUNEIF" + + "ORM SIGN PANCUNEIFORM SIGN PAPCUNEIFORM SIGN PESH2CUNEIFORM SIGN PICUNEI" + + "FORM SIGN PI TIMES ACUNEIFORM SIGN PI TIMES ABCUNEIFORM SIGN PI TIMES BI" + + "CUNEIFORM SIGN PI TIMES BUCUNEIFORM SIGN PI TIMES ECUNEIFORM SIGN PI TIM" + + "ES ICUNEIFORM SIGN PI TIMES IBCUNEIFORM SIGN PI TIMES UCUNEIFORM SIGN PI" + + " TIMES U2CUNEIFORM SIGN PI CROSSING PICUNEIFORM SIGN PIRIGCUNEIFORM SIGN" + + " PIRIG TIMES KALCUNEIFORM SIGN PIRIG TIMES UDCUNEIFORM SIGN PIRIG TIMES " + + "ZACUNEIFORM SIGN PIRIG OPPOSING PIRIGCUNEIFORM SIGN RACUNEIFORM SIGN RAB" + + "CUNEIFORM SIGN RICUNEIFORM SIGN RUCUNEIFORM SIGN SACUNEIFORM SIGN SAG NU" + + "TILLUCUNEIFORM SIGN SAGCUNEIFORM SIGN SAG TIMES ACUNEIFORM SIGN SAG TIME" + + "S DUCUNEIFORM SIGN SAG TIMES DUBCUNEIFORM SIGN SAG TIMES HACUNEIFORM SIG" + + "N SAG TIMES KAKCUNEIFORM SIGN SAG TIMES KURCUNEIFORM SIGN SAG TIMES LUMC" + + "UNEIFORM SIGN SAG TIMES MICUNEIFORM SIGN SAG TIMES NUNCUNEIFORM SIGN SAG" + + " TIMES SALCUNEIFORM SIGN SAG TIMES SHIDCUNEIFORM SIGN SAG TIMES TABCUNEI" + + "FORM SIGN SAG TIMES U2CUNEIFORM SIGN SAG TIMES UBCUNEIFORM SIGN SAG TIME" + + "S UMCUNEIFORM SIGN SAG TIMES URCUNEIFORM SIGN SAG TIMES USHCUNEIFORM SIG" + + "N SAG OVER SAGCUNEIFORM SIGN SAG GUNUCUNEIFORM SIGN SALCUNEIFORM SIGN SA" + + "L LAGAB TIMES ASH2CUNEIFORM SIGN SANGA2CUNEIFORM SIGN SARCUNEIFORM SIGN " + + "SHACUNEIFORM SIGN SHA3CUNEIFORM SIGN SHA3 TIMES ACUNEIFORM SIGN SHA3 TIM" + + "ES BADCUNEIFORM SIGN SHA3 TIMES GISHCUNEIFORM SIGN SHA3 TIMES NECUNEIFOR" + + "M SIGN SHA3 TIMES SHU2CUNEIFORM SIGN SHA3 TIMES TURCUNEIFORM SIGN SHA3 T" + + "IMES UCUNEIFORM SIGN SHA3 TIMES U PLUS ACUNEIFORM SIGN SHA6CUNEIFORM SIG" + + "N SHAB6CUNEIFORM SIGN SHAR2CUNEIFORM SIGN SHECUNEIFORM SIGN SHE HUCUNEIF" + + "ORM SIGN SHE OVER SHE GAD OVER GAD GAR OVER GARCUNEIFORM SIGN SHE OVER S" + + "HE TAB OVER TAB GAR OVER GARCUNEIFORM SIGN SHEG9CUNEIFORM SIGN SHENCUNEI" + + "FORM SIGN SHESHCUNEIFORM SIGN SHESH2CUNEIFORM SIGN SHESHLAMCUNEIFORM SIG" + + "N SHIDCUNEIFORM SIGN SHID TIMES ACUNEIFORM SIGN SHID TIMES IMCUNEIFORM S" + + "IGN SHIMCUNEIFORM SIGN SHIM TIMES ACUNEIFORM SIGN SHIM TIMES BALCUNEIFOR" + + "M SIGN SHIM TIMES BULUGCUNEIFORM SIGN SHIM TIMES DINCUNEIFORM SIGN SHIM " + + "TIMES GARCUNEIFORM SIGN SHIM TIMES IGICUNEIFORM SIGN SHIM TIMES IGI GUNU") + ("" + + "CUNEIFORM SIGN SHIM TIMES KUSHU2CUNEIFORM SIGN SHIM TIMES LULCUNEIFORM S" + + "IGN SHIM TIMES MUGCUNEIFORM SIGN SHIM TIMES SALCUNEIFORM SIGN SHINIGCUNE" + + "IFORM SIGN SHIRCUNEIFORM SIGN SHIR TENUCUNEIFORM SIGN SHIR OVER SHIR BUR" + + " OVER BURCUNEIFORM SIGN SHITACUNEIFORM SIGN SHUCUNEIFORM SIGN SHU OVER I" + + "NVERTED SHUCUNEIFORM SIGN SHU2CUNEIFORM SIGN SHUBURCUNEIFORM SIGN SICUNE" + + "IFORM SIGN SI GUNUCUNEIFORM SIGN SIGCUNEIFORM SIGN SIG4CUNEIFORM SIGN SI" + + "G4 OVER SIG4 SHU2CUNEIFORM SIGN SIK2CUNEIFORM SIGN SILA3CUNEIFORM SIGN S" + + "UCUNEIFORM SIGN SU OVER SUCUNEIFORM SIGN SUDCUNEIFORM SIGN SUD2CUNEIFORM" + + " SIGN SUHURCUNEIFORM SIGN SUMCUNEIFORM SIGN SUMASHCUNEIFORM SIGN SURCUNE" + + "IFORM SIGN SUR9CUNEIFORM SIGN TACUNEIFORM SIGN TA ASTERISKCUNEIFORM SIGN" + + " TA TIMES HICUNEIFORM SIGN TA TIMES MICUNEIFORM SIGN TA GUNUCUNEIFORM SI" + + "GN TABCUNEIFORM SIGN TAB OVER TAB NI OVER NI DISH OVER DISHCUNEIFORM SIG" + + "N TAB SQUAREDCUNEIFORM SIGN TAGCUNEIFORM SIGN TAG TIMES BICUNEIFORM SIGN" + + " TAG TIMES GUDCUNEIFORM SIGN TAG TIMES SHECUNEIFORM SIGN TAG TIMES SHUCU" + + "NEIFORM SIGN TAG TIMES TUG2CUNEIFORM SIGN TAG TIMES UDCUNEIFORM SIGN TAK" + + "4CUNEIFORM SIGN TARCUNEIFORM SIGN TECUNEIFORM SIGN TE GUNUCUNEIFORM SIGN" + + " TICUNEIFORM SIGN TI TENUCUNEIFORM SIGN TILCUNEIFORM SIGN TIRCUNEIFORM S" + + "IGN TIR TIMES TAK4CUNEIFORM SIGN TIR OVER TIRCUNEIFORM SIGN TIR OVER TIR" + + " GAD OVER GAD GAR OVER GARCUNEIFORM SIGN TUCUNEIFORM SIGN TUG2CUNEIFORM " + + "SIGN TUKCUNEIFORM SIGN TUMCUNEIFORM SIGN TURCUNEIFORM SIGN TUR OVER TUR " + + "ZA OVER ZACUNEIFORM SIGN UCUNEIFORM SIGN U GUDCUNEIFORM SIGN U U UCUNEIF" + + "ORM SIGN U OVER U PA OVER PA GAR OVER GARCUNEIFORM SIGN U OVER U SUR OVE" + + "R SURCUNEIFORM SIGN U OVER U U REVERSED OVER U REVERSEDCUNEIFORM SIGN U2" + + "CUNEIFORM SIGN UBCUNEIFORM SIGN UDCUNEIFORM SIGN UD KUSHU2CUNEIFORM SIGN" + + " UD TIMES BADCUNEIFORM SIGN UD TIMES MICUNEIFORM SIGN UD TIMES U PLUS U " + + "PLUS UCUNEIFORM SIGN UD TIMES U PLUS U PLUS U GUNUCUNEIFORM SIGN UD GUNU" + + "CUNEIFORM SIGN UD SHESHIGCUNEIFORM SIGN UD SHESHIG TIMES BADCUNEIFORM SI" + + "GN UDUGCUNEIFORM SIGN UMCUNEIFORM SIGN UM TIMES LAGABCUNEIFORM SIGN UM T" + + "IMES ME PLUS DACUNEIFORM SIGN UM TIMES SHA3CUNEIFORM SIGN UM TIMES UCUNE" + + "IFORM SIGN UMBINCUNEIFORM SIGN UMUMCUNEIFORM SIGN UMUM TIMES KASKALCUNEI" + + "FORM SIGN UMUM TIMES PACUNEIFORM SIGN UNCUNEIFORM SIGN UN GUNUCUNEIFORM " + + "SIGN URCUNEIFORM SIGN UR CROSSING URCUNEIFORM SIGN UR SHESHIGCUNEIFORM S" + + "IGN UR2CUNEIFORM SIGN UR2 TIMES A PLUS HACUNEIFORM SIGN UR2 TIMES A PLUS" + + " NACUNEIFORM SIGN UR2 TIMES ALCUNEIFORM SIGN UR2 TIMES HACUNEIFORM SIGN " + + "UR2 TIMES NUNCUNEIFORM SIGN UR2 TIMES U2CUNEIFORM SIGN UR2 TIMES U2 PLUS" + + " ASHCUNEIFORM SIGN UR2 TIMES U2 PLUS BICUNEIFORM SIGN UR4CUNEIFORM SIGN " + + "URICUNEIFORM SIGN URI3CUNEIFORM SIGN URUCUNEIFORM SIGN URU TIMES ACUNEIF" + + "ORM SIGN URU TIMES ASHGABCUNEIFORM SIGN URU TIMES BARCUNEIFORM SIGN URU " + + "TIMES DUNCUNEIFORM SIGN URU TIMES GACUNEIFORM SIGN URU TIMES GALCUNEIFOR" + + "M SIGN URU TIMES GAN2 TENUCUNEIFORM SIGN URU TIMES GARCUNEIFORM SIGN URU" + + " TIMES GUCUNEIFORM SIGN URU TIMES HACUNEIFORM SIGN URU TIMES IGICUNEIFOR" + + "M SIGN URU TIMES IMCUNEIFORM SIGN URU TIMES ISHCUNEIFORM SIGN URU TIMES " + + "KICUNEIFORM SIGN URU TIMES LUMCUNEIFORM SIGN URU TIMES MINCUNEIFORM SIGN" + + " URU TIMES PACUNEIFORM SIGN URU TIMES SHECUNEIFORM SIGN URU TIMES SIG4CU" + + "NEIFORM SIGN URU TIMES TUCUNEIFORM SIGN URU TIMES U PLUS GUDCUNEIFORM SI" + + "GN URU TIMES UDCUNEIFORM SIGN URU TIMES URUDACUNEIFORM SIGN URUDACUNEIFO" + + "RM SIGN URUDA TIMES UCUNEIFORM SIGN USHCUNEIFORM SIGN USH TIMES ACUNEIFO" + + "RM SIGN USH TIMES KUCUNEIFORM SIGN USH TIMES KURCUNEIFORM SIGN USH TIMES" + + " TAK4CUNEIFORM SIGN USHXCUNEIFORM SIGN USH2CUNEIFORM SIGN USHUMXCUNEIFOR" + + "M SIGN UTUKICUNEIFORM SIGN UZ3CUNEIFORM SIGN UZ3 TIMES KASKALCUNEIFORM S" + + "IGN UZUCUNEIFORM SIGN ZACUNEIFORM SIGN ZA TENUCUNEIFORM SIGN ZA SQUARED " + + "TIMES KURCUNEIFORM SIGN ZAGCUNEIFORM SIGN ZAMXCUNEIFORM SIGN ZE2CUNEIFOR" + + "M SIGN ZICUNEIFORM SIGN ZI OVER ZICUNEIFORM SIGN ZI3CUNEIFORM SIGN ZIBCU" + + "NEIFORM SIGN ZIB KABA TENUCUNEIFORM SIGN ZIGCUNEIFORM SIGN ZIZ2CUNEIFORM" + + " SIGN ZUCUNEIFORM SIGN ZU5CUNEIFORM SIGN ZU5 TIMES ACUNEIFORM SIGN ZUBUR" + + "CUNEIFORM SIGN ZUMCUNEIFORM SIGN KAP ELAMITECUNEIFORM SIGN AB TIMES NUNC" + + "UNEIFORM SIGN AB2 TIMES ACUNEIFORM SIGN AMAR TIMES KUGCUNEIFORM SIGN DAG" + + " KISIM5 TIMES U2 PLUS MASHCUNEIFORM SIGN DAG3CUNEIFORM SIGN DISH PLUS SH" + + "UCUNEIFORM SIGN DUB TIMES SHECUNEIFORM SIGN EZEN TIMES GUDCUNEIFORM SIGN" + + " EZEN TIMES SHECUNEIFORM SIGN GA2 TIMES AN PLUS KAK PLUS ACUNEIFORM SIGN" + + " GA2 TIMES ASH2CUNEIFORM SIGN GE22CUNEIFORM SIGN GIGCUNEIFORM SIGN HUSHC" + + "UNEIFORM SIGN KA TIMES ANSHECUNEIFORM SIGN KA TIMES ASH3CUNEIFORM SIGN K" + + "A TIMES GISHCUNEIFORM SIGN KA TIMES GUDCUNEIFORM SIGN KA TIMES HI TIMES " + + "ASH2CUNEIFORM SIGN KA TIMES LUMCUNEIFORM SIGN KA TIMES PACUNEIFORM SIGN ") + ("" + + "KA TIMES SHULCUNEIFORM SIGN KA TIMES TUCUNEIFORM SIGN KA TIMES UR2CUNEIF" + + "ORM SIGN LAGAB TIMES GICUNEIFORM SIGN LU2 SHESHIG TIMES BADCUNEIFORM SIG" + + "N LU2 TIMES ESH2 PLUS LALCUNEIFORM SIGN LU2 TIMES SHUCUNEIFORM SIGN MESH" + + "CUNEIFORM SIGN MUSH3 TIMES ZACUNEIFORM SIGN NA4CUNEIFORM SIGN NINCUNEIFO" + + "RM SIGN NIN9CUNEIFORM SIGN NINDA2 TIMES BALCUNEIFORM SIGN NINDA2 TIMES G" + + "ICUNEIFORM SIGN NU11 ROTATED NINETY DEGREESCUNEIFORM SIGN PESH2 ASTERISK" + + "CUNEIFORM SIGN PIR2CUNEIFORM SIGN SAG TIMES IGI GUNUCUNEIFORM SIGN TI2CU" + + "NEIFORM SIGN UM TIMES MECUNEIFORM SIGN U UCUNEIFORM NUMERIC SIGN TWO ASH" + + "CUNEIFORM NUMERIC SIGN THREE ASHCUNEIFORM NUMERIC SIGN FOUR ASHCUNEIFORM" + + " NUMERIC SIGN FIVE ASHCUNEIFORM NUMERIC SIGN SIX ASHCUNEIFORM NUMERIC SI" + + "GN SEVEN ASHCUNEIFORM NUMERIC SIGN EIGHT ASHCUNEIFORM NUMERIC SIGN NINE " + + "ASHCUNEIFORM NUMERIC SIGN THREE DISHCUNEIFORM NUMERIC SIGN FOUR DISHCUNE" + + "IFORM NUMERIC SIGN FIVE DISHCUNEIFORM NUMERIC SIGN SIX DISHCUNEIFORM NUM" + + "ERIC SIGN SEVEN DISHCUNEIFORM NUMERIC SIGN EIGHT DISHCUNEIFORM NUMERIC S" + + "IGN NINE DISHCUNEIFORM NUMERIC SIGN FOUR UCUNEIFORM NUMERIC SIGN FIVE UC" + + "UNEIFORM NUMERIC SIGN SIX UCUNEIFORM NUMERIC SIGN SEVEN UCUNEIFORM NUMER" + + "IC SIGN EIGHT UCUNEIFORM NUMERIC SIGN NINE UCUNEIFORM NUMERIC SIGN ONE G" + + "ESH2CUNEIFORM NUMERIC SIGN TWO GESH2CUNEIFORM NUMERIC SIGN THREE GESH2CU" + + "NEIFORM NUMERIC SIGN FOUR GESH2CUNEIFORM NUMERIC SIGN FIVE GESH2CUNEIFOR" + + "M NUMERIC SIGN SIX GESH2CUNEIFORM NUMERIC SIGN SEVEN GESH2CUNEIFORM NUME" + + "RIC SIGN EIGHT GESH2CUNEIFORM NUMERIC SIGN NINE GESH2CUNEIFORM NUMERIC S" + + "IGN ONE GESHUCUNEIFORM NUMERIC SIGN TWO GESHUCUNEIFORM NUMERIC SIGN THRE" + + "E GESHUCUNEIFORM NUMERIC SIGN FOUR GESHUCUNEIFORM NUMERIC SIGN FIVE GESH" + + "UCUNEIFORM NUMERIC SIGN TWO SHAR2CUNEIFORM NUMERIC SIGN THREE SHAR2CUNEI" + + "FORM NUMERIC SIGN THREE SHAR2 VARIANT FORMCUNEIFORM NUMERIC SIGN FOUR SH" + + "AR2CUNEIFORM NUMERIC SIGN FIVE SHAR2CUNEIFORM NUMERIC SIGN SIX SHAR2CUNE" + + "IFORM NUMERIC SIGN SEVEN SHAR2CUNEIFORM NUMERIC SIGN EIGHT SHAR2CUNEIFOR" + + "M NUMERIC SIGN NINE SHAR2CUNEIFORM NUMERIC SIGN ONE SHARUCUNEIFORM NUMER" + + "IC SIGN TWO SHARUCUNEIFORM NUMERIC SIGN THREE SHARUCUNEIFORM NUMERIC SIG" + + "N THREE SHARU VARIANT FORMCUNEIFORM NUMERIC SIGN FOUR SHARUCUNEIFORM NUM" + + "ERIC SIGN FIVE SHARUCUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS DISHCUNE" + + "IFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS MINCUNEIFORM NUMERIC SIGN ONE BU" + + "RUCUNEIFORM NUMERIC SIGN TWO BURUCUNEIFORM NUMERIC SIGN THREE BURUCUNEIF" + + "ORM NUMERIC SIGN THREE BURU VARIANT FORMCUNEIFORM NUMERIC SIGN FOUR BURU" + + "CUNEIFORM NUMERIC SIGN FIVE BURUCUNEIFORM NUMERIC SIGN THREE VARIANT FOR" + + "M ESH16CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH21CUNEIFORM NUMERIC " + + "SIGN FOUR VARIANT FORM LIMMUCUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIM" + + "MU4CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU ACUNEIFORM NUMERIC SIG" + + "N FOUR VARIANT FORM LIMMU BCUNEIFORM NUMERIC SIGN SIX VARIANT FORM ASH9C" + + "UNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN3CUNEIFORM NUMERIC SIGN SEV" + + "EN VARIANT FORM IMIN ACUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN BCU" + + "NEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSUCUNEIFORM NUMERIC SIGN EIGHT" + + " VARIANT FORM USSU3CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMUCUNEIF" + + "ORM NUMERIC SIGN NINE VARIANT FORM ILIMMU3CUNEIFORM NUMERIC SIGN NINE VA" + + "RIANT FORM ILIMMU4CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU ACUNEI" + + "FORM NUMERIC SIGN TWO ASH TENUCUNEIFORM NUMERIC SIGN THREE ASH TENUCUNEI" + + "FORM NUMERIC SIGN FOUR ASH TENUCUNEIFORM NUMERIC SIGN FIVE ASH TENUCUNEI" + + "FORM NUMERIC SIGN SIX ASH TENUCUNEIFORM NUMERIC SIGN ONE BAN2CUNEIFORM N" + + "UMERIC SIGN TWO BAN2CUNEIFORM NUMERIC SIGN THREE BAN2CUNEIFORM NUMERIC S" + + "IGN FOUR BAN2CUNEIFORM NUMERIC SIGN FOUR BAN2 VARIANT FORMCUNEIFORM NUME" + + "RIC SIGN FIVE BAN2CUNEIFORM NUMERIC SIGN FIVE BAN2 VARIANT FORMCUNEIFORM" + + " NUMERIC SIGN NIGIDAMINCUNEIFORM NUMERIC SIGN NIGIDAESHCUNEIFORM NUMERIC" + + " SIGN ONE ESHE3CUNEIFORM NUMERIC SIGN TWO ESHE3CUNEIFORM NUMERIC SIGN ON" + + "E THIRD DISHCUNEIFORM NUMERIC SIGN TWO THIRDS DISHCUNEIFORM NUMERIC SIGN" + + " FIVE SIXTHS DISHCUNEIFORM NUMERIC SIGN ONE THIRD VARIANT FORM ACUNEIFOR" + + "M NUMERIC SIGN TWO THIRDS VARIANT FORM ACUNEIFORM NUMERIC SIGN ONE EIGHT" + + "H ASHCUNEIFORM NUMERIC SIGN ONE QUARTER ASHCUNEIFORM NUMERIC SIGN OLD AS" + + "SYRIAN ONE SIXTHCUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTERCUNEIFORM" + + " NUMERIC SIGN ONE QUARTER GURCUNEIFORM NUMERIC SIGN ONE HALF GURCUNEIFOR" + + "M NUMERIC SIGN ELAMITE ONE THIRDCUNEIFORM NUMERIC SIGN ELAMITE TWO THIRD" + + "SCUNEIFORM NUMERIC SIGN ELAMITE FORTYCUNEIFORM NUMERIC SIGN ELAMITE FIFT" + + "YCUNEIFORM NUMERIC SIGN FOUR U VARIANT FORMCUNEIFORM NUMERIC SIGN FIVE U" + + " VARIANT FORMCUNEIFORM NUMERIC SIGN SIX U VARIANT FORMCUNEIFORM NUMERIC " + + "SIGN SEVEN U VARIANT FORMCUNEIFORM NUMERIC SIGN EIGHT U VARIANT FORMCUNE") + ("" + + "IFORM NUMERIC SIGN NINE U VARIANT FORMCUNEIFORM PUNCTUATION SIGN OLD ASS" + + "YRIAN WORD DIVIDERCUNEIFORM PUNCTUATION SIGN VERTICAL COLONCUNEIFORM PUN" + + "CTUATION SIGN DIAGONAL COLONCUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON" + + "CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLONCUNEIFORM SIGN AB TIMES NUN" + + " TENUCUNEIFORM SIGN AB TIMES SHU2CUNEIFORM SIGN AD TIMES ESH2CUNEIFORM S" + + "IGN BAD TIMES DISH TENUCUNEIFORM SIGN BAHAR2 TIMES AB2CUNEIFORM SIGN BAH" + + "AR2 TIMES NICUNEIFORM SIGN BAHAR2 TIMES ZACUNEIFORM SIGN BU OVER BU TIME" + + "S NA2CUNEIFORM SIGN DA TIMES TAK4CUNEIFORM SIGN DAG TIMES KURCUNEIFORM S" + + "IGN DIM TIMES IGICUNEIFORM SIGN DIM TIMES U U UCUNEIFORM SIGN DIM2 TIMES" + + " UDCUNEIFORM SIGN DUG TIMES ANSHECUNEIFORM SIGN DUG TIMES ASHCUNEIFORM S" + + "IGN DUG TIMES ASH AT LEFTCUNEIFORM SIGN DUG TIMES DINCUNEIFORM SIGN DUG " + + "TIMES DUNCUNEIFORM SIGN DUG TIMES ERIN2CUNEIFORM SIGN DUG TIMES GACUNEIF" + + "ORM SIGN DUG TIMES GICUNEIFORM SIGN DUG TIMES GIR2 GUNUCUNEIFORM SIGN DU" + + "G TIMES GISHCUNEIFORM SIGN DUG TIMES HACUNEIFORM SIGN DUG TIMES HICUNEIF" + + "ORM SIGN DUG TIMES IGI GUNUCUNEIFORM SIGN DUG TIMES KASKALCUNEIFORM SIGN" + + " DUG TIMES KURCUNEIFORM SIGN DUG TIMES KUSHU2CUNEIFORM SIGN DUG TIMES KU" + + "SHU2 PLUS KASKALCUNEIFORM SIGN DUG TIMES LAK-020CUNEIFORM SIGN DUG TIMES" + + " LAMCUNEIFORM SIGN DUG TIMES LAM TIMES KURCUNEIFORM SIGN DUG TIMES LUH P" + + "LUS GISHCUNEIFORM SIGN DUG TIMES MASHCUNEIFORM SIGN DUG TIMES MESCUNEIFO" + + "RM SIGN DUG TIMES MICUNEIFORM SIGN DUG TIMES NICUNEIFORM SIGN DUG TIMES " + + "PICUNEIFORM SIGN DUG TIMES SHECUNEIFORM SIGN DUG TIMES SI GUNUCUNEIFORM " + + "SIGN E2 TIMES KURCUNEIFORM SIGN E2 TIMES PAPCUNEIFORM SIGN ERIN2 XCUNEIF" + + "ORM SIGN ESH2 CROSSING ESH2CUNEIFORM SIGN EZEN SHESHIG TIMES ASHCUNEIFOR" + + "M SIGN EZEN SHESHIG TIMES HICUNEIFORM SIGN EZEN SHESHIG TIMES IGI GUNUCU" + + "NEIFORM SIGN EZEN SHESHIG TIMES LACUNEIFORM SIGN EZEN SHESHIG TIMES LALC" + + "UNEIFORM SIGN EZEN SHESHIG TIMES MECUNEIFORM SIGN EZEN SHESHIG TIMES MES" + + "CUNEIFORM SIGN EZEN SHESHIG TIMES SUCUNEIFORM SIGN EZEN TIMES SUCUNEIFOR" + + "M SIGN GA2 TIMES BAHAR2CUNEIFORM SIGN GA2 TIMES DIM GUNUCUNEIFORM SIGN G" + + "A2 TIMES DUG TIMES IGI GUNUCUNEIFORM SIGN GA2 TIMES DUG TIMES KASKALCUNE" + + "IFORM SIGN GA2 TIMES ERENCUNEIFORM SIGN GA2 TIMES GACUNEIFORM SIGN GA2 T" + + "IMES GAR PLUS DICUNEIFORM SIGN GA2 TIMES GAR PLUS NECUNEIFORM SIGN GA2 T" + + "IMES HA PLUS ACUNEIFORM SIGN GA2 TIMES KUSHU2 PLUS KASKALCUNEIFORM SIGN " + + "GA2 TIMES LAMCUNEIFORM SIGN GA2 TIMES LAM TIMES KURCUNEIFORM SIGN GA2 TI" + + "MES LUHCUNEIFORM SIGN GA2 TIMES MUSHCUNEIFORM SIGN GA2 TIMES NECUNEIFORM" + + " SIGN GA2 TIMES NE PLUS E2CUNEIFORM SIGN GA2 TIMES NE PLUS GICUNEIFORM S" + + "IGN GA2 TIMES SHIMCUNEIFORM SIGN GA2 TIMES ZIZ2CUNEIFORM SIGN GABA ROTAT" + + "ED NINETY DEGREESCUNEIFORM SIGN GESHTIN TIMES UCUNEIFORM SIGN GISH TIMES" + + " GISH CROSSING GISHCUNEIFORM SIGN GU2 TIMES IGI GUNUCUNEIFORM SIGN GUD P" + + "LUS GISH TIMES TAK4CUNEIFORM SIGN HA TENU GUNUCUNEIFORM SIGN HI TIMES AS" + + "H OVER HI TIMES ASHCUNEIFORM SIGN KA TIMES BUCUNEIFORM SIGN KA TIMES KAC" + + "UNEIFORM SIGN KA TIMES U U UCUNEIFORM SIGN KA TIMES URCUNEIFORM SIGN LAG" + + "AB TIMES ZU OVER ZUCUNEIFORM SIGN LAK-003CUNEIFORM SIGN LAK-021CUNEIFORM" + + " SIGN LAK-025CUNEIFORM SIGN LAK-030CUNEIFORM SIGN LAK-050CUNEIFORM SIGN " + + "LAK-051CUNEIFORM SIGN LAK-062CUNEIFORM SIGN LAK-079 OVER LAK-079 GUNUCUN" + + "EIFORM SIGN LAK-080CUNEIFORM SIGN LAK-081 OVER LAK-081CUNEIFORM SIGN LAK" + + "-092CUNEIFORM SIGN LAK-130CUNEIFORM SIGN LAK-142CUNEIFORM SIGN LAK-210CU" + + "NEIFORM SIGN LAK-219CUNEIFORM SIGN LAK-220CUNEIFORM SIGN LAK-225CUNEIFOR" + + "M SIGN LAK-228CUNEIFORM SIGN LAK-238CUNEIFORM SIGN LAK-265CUNEIFORM SIGN" + + " LAK-266CUNEIFORM SIGN LAK-343CUNEIFORM SIGN LAK-347CUNEIFORM SIGN LAK-3" + + "48CUNEIFORM SIGN LAK-383CUNEIFORM SIGN LAK-384CUNEIFORM SIGN LAK-390CUNE" + + "IFORM SIGN LAK-441CUNEIFORM SIGN LAK-449CUNEIFORM SIGN LAK-449 TIMES GUC" + + "UNEIFORM SIGN LAK-449 TIMES IGICUNEIFORM SIGN LAK-449 TIMES PAP PLUS LU3" + + "CUNEIFORM SIGN LAK-449 TIMES PAP PLUS PAP PLUS LU3CUNEIFORM SIGN LAK-449" + + " TIMES U2 PLUS BACUNEIFORM SIGN LAK-450CUNEIFORM SIGN LAK-457CUNEIFORM S" + + "IGN LAK-470CUNEIFORM SIGN LAK-483CUNEIFORM SIGN LAK-490CUNEIFORM SIGN LA" + + "K-492CUNEIFORM SIGN LAK-493CUNEIFORM SIGN LAK-495CUNEIFORM SIGN LAK-550C" + + "UNEIFORM SIGN LAK-608CUNEIFORM SIGN LAK-617CUNEIFORM SIGN LAK-617 TIMES " + + "ASHCUNEIFORM SIGN LAK-617 TIMES BADCUNEIFORM SIGN LAK-617 TIMES DUN3 GUN" + + "U GUNUCUNEIFORM SIGN LAK-617 TIMES KU3CUNEIFORM SIGN LAK-617 TIMES LACUN" + + "EIFORM SIGN LAK-617 TIMES TARCUNEIFORM SIGN LAK-617 TIMES TECUNEIFORM SI" + + "GN LAK-617 TIMES U2CUNEIFORM SIGN LAK-617 TIMES UDCUNEIFORM SIGN LAK-617" + + " TIMES URUDACUNEIFORM SIGN LAK-636CUNEIFORM SIGN LAK-648CUNEIFORM SIGN L" + + "AK-648 TIMES DUBCUNEIFORM SIGN LAK-648 TIMES GACUNEIFORM SIGN LAK-648 TI" + + "MES IGICUNEIFORM SIGN LAK-648 TIMES IGI GUNUCUNEIFORM SIGN LAK-648 TIMES") + ("" + + " NICUNEIFORM SIGN LAK-648 TIMES PAP PLUS PAP PLUS LU3CUNEIFORM SIGN LAK-" + + "648 TIMES SHESH PLUS KICUNEIFORM SIGN LAK-648 TIMES UDCUNEIFORM SIGN LAK" + + "-648 TIMES URUDACUNEIFORM SIGN LAK-724CUNEIFORM SIGN LAK-749CUNEIFORM SI" + + "GN LU2 GUNU TIMES ASHCUNEIFORM SIGN LU2 TIMES DISHCUNEIFORM SIGN LU2 TIM" + + "ES HALCUNEIFORM SIGN LU2 TIMES PAPCUNEIFORM SIGN LU2 TIMES PAP PLUS PAP " + + "PLUS LU3CUNEIFORM SIGN LU2 TIMES TAK4CUNEIFORM SIGN MI PLUS ZA7CUNEIFORM" + + " SIGN MUSH OVER MUSH TIMES GACUNEIFORM SIGN MUSH OVER MUSH TIMES KAKCUNE" + + "IFORM SIGN NINDA2 TIMES DIM GUNUCUNEIFORM SIGN NINDA2 TIMES GISHCUNEIFOR" + + "M SIGN NINDA2 TIMES GULCUNEIFORM SIGN NINDA2 TIMES HICUNEIFORM SIGN NIND" + + "A2 TIMES KESH2CUNEIFORM SIGN NINDA2 TIMES LAK-050CUNEIFORM SIGN NINDA2 T" + + "IMES MASHCUNEIFORM SIGN NINDA2 TIMES PAP PLUS PAPCUNEIFORM SIGN NINDA2 T" + + "IMES UCUNEIFORM SIGN NINDA2 TIMES U PLUS UCUNEIFORM SIGN NINDA2 TIMES UR" + + "UDACUNEIFORM SIGN SAG GUNU TIMES HACUNEIFORM SIGN SAG TIMES ENCUNEIFORM " + + "SIGN SAG TIMES SHE AT LEFTCUNEIFORM SIGN SAG TIMES TAK4CUNEIFORM SIGN SH" + + "A6 TENUCUNEIFORM SIGN SHE OVER SHECUNEIFORM SIGN SHE PLUS HUB2CUNEIFORM " + + "SIGN SHE PLUS NAM2CUNEIFORM SIGN SHE PLUS SARCUNEIFORM SIGN SHU2 PLUS DU" + + "G TIMES NICUNEIFORM SIGN SHU2 PLUS E2 TIMES ANCUNEIFORM SIGN SI TIMES TA" + + "K4CUNEIFORM SIGN TAK4 PLUS SAGCUNEIFORM SIGN TUM TIMES GAN2 TENUCUNEIFOR" + + "M SIGN TUM TIMES THREE DISHCUNEIFORM SIGN UR2 INVERTEDCUNEIFORM SIGN UR2" + + " TIMES UDCUNEIFORM SIGN URU TIMES DARA3CUNEIFORM SIGN URU TIMES LAK-668C" + + "UNEIFORM SIGN URU TIMES LU3CUNEIFORM SIGN ZA7CUNEIFORM SIGN ZU OVER ZU P" + + "LUS SARCUNEIFORM SIGN ZU5 TIMES THREE DISH TENUEGYPTIAN HIEROGLYPH A001E" + + "GYPTIAN HIEROGLYPH A002EGYPTIAN HIEROGLYPH A003EGYPTIAN HIEROGLYPH A004E" + + "GYPTIAN HIEROGLYPH A005EGYPTIAN HIEROGLYPH A005AEGYPTIAN HIEROGLYPH A006" + + "EGYPTIAN HIEROGLYPH A006AEGYPTIAN HIEROGLYPH A006BEGYPTIAN HIEROGLYPH A0" + + "07EGYPTIAN HIEROGLYPH A008EGYPTIAN HIEROGLYPH A009EGYPTIAN HIEROGLYPH A0" + + "10EGYPTIAN HIEROGLYPH A011EGYPTIAN HIEROGLYPH A012EGYPTIAN HIEROGLYPH A0" + + "13EGYPTIAN HIEROGLYPH A014EGYPTIAN HIEROGLYPH A014AEGYPTIAN HIEROGLYPH A" + + "015EGYPTIAN HIEROGLYPH A016EGYPTIAN HIEROGLYPH A017EGYPTIAN HIEROGLYPH A" + + "017AEGYPTIAN HIEROGLYPH A018EGYPTIAN HIEROGLYPH A019EGYPTIAN HIEROGLYPH " + + "A020EGYPTIAN HIEROGLYPH A021EGYPTIAN HIEROGLYPH A022EGYPTIAN HIEROGLYPH " + + "A023EGYPTIAN HIEROGLYPH A024EGYPTIAN HIEROGLYPH A025EGYPTIAN HIEROGLYPH " + + "A026EGYPTIAN HIEROGLYPH A027EGYPTIAN HIEROGLYPH A028EGYPTIAN HIEROGLYPH " + + "A029EGYPTIAN HIEROGLYPH A030EGYPTIAN HIEROGLYPH A031EGYPTIAN HIEROGLYPH " + + "A032EGYPTIAN HIEROGLYPH A032AEGYPTIAN HIEROGLYPH A033EGYPTIAN HIEROGLYPH" + + " A034EGYPTIAN HIEROGLYPH A035EGYPTIAN HIEROGLYPH A036EGYPTIAN HIEROGLYPH" + + " A037EGYPTIAN HIEROGLYPH A038EGYPTIAN HIEROGLYPH A039EGYPTIAN HIEROGLYPH" + + " A040EGYPTIAN HIEROGLYPH A040AEGYPTIAN HIEROGLYPH A041EGYPTIAN HIEROGLYP" + + "H A042EGYPTIAN HIEROGLYPH A042AEGYPTIAN HIEROGLYPH A043EGYPTIAN HIEROGLY" + + "PH A043AEGYPTIAN HIEROGLYPH A044EGYPTIAN HIEROGLYPH A045EGYPTIAN HIEROGL" + + "YPH A045AEGYPTIAN HIEROGLYPH A046EGYPTIAN HIEROGLYPH A047EGYPTIAN HIEROG" + + "LYPH A048EGYPTIAN HIEROGLYPH A049EGYPTIAN HIEROGLYPH A050EGYPTIAN HIEROG" + + "LYPH A051EGYPTIAN HIEROGLYPH A052EGYPTIAN HIEROGLYPH A053EGYPTIAN HIEROG" + + "LYPH A054EGYPTIAN HIEROGLYPH A055EGYPTIAN HIEROGLYPH A056EGYPTIAN HIEROG" + + "LYPH A057EGYPTIAN HIEROGLYPH A058EGYPTIAN HIEROGLYPH A059EGYPTIAN HIEROG" + + "LYPH A060EGYPTIAN HIEROGLYPH A061EGYPTIAN HIEROGLYPH A062EGYPTIAN HIEROG" + + "LYPH A063EGYPTIAN HIEROGLYPH A064EGYPTIAN HIEROGLYPH A065EGYPTIAN HIEROG" + + "LYPH A066EGYPTIAN HIEROGLYPH A067EGYPTIAN HIEROGLYPH A068EGYPTIAN HIEROG" + + "LYPH A069EGYPTIAN HIEROGLYPH A070EGYPTIAN HIEROGLYPH B001EGYPTIAN HIEROG" + + "LYPH B002EGYPTIAN HIEROGLYPH B003EGYPTIAN HIEROGLYPH B004EGYPTIAN HIEROG" + + "LYPH B005EGYPTIAN HIEROGLYPH B005AEGYPTIAN HIEROGLYPH B006EGYPTIAN HIERO" + + "GLYPH B007EGYPTIAN HIEROGLYPH B008EGYPTIAN HIEROGLYPH B009EGYPTIAN HIERO" + + "GLYPH C001EGYPTIAN HIEROGLYPH C002EGYPTIAN HIEROGLYPH C002AEGYPTIAN HIER" + + "OGLYPH C002BEGYPTIAN HIEROGLYPH C002CEGYPTIAN HIEROGLYPH C003EGYPTIAN HI" + + "EROGLYPH C004EGYPTIAN HIEROGLYPH C005EGYPTIAN HIEROGLYPH C006EGYPTIAN HI" + + "EROGLYPH C007EGYPTIAN HIEROGLYPH C008EGYPTIAN HIEROGLYPH C009EGYPTIAN HI" + + "EROGLYPH C010EGYPTIAN HIEROGLYPH C010AEGYPTIAN HIEROGLYPH C011EGYPTIAN H" + + "IEROGLYPH C012EGYPTIAN HIEROGLYPH C013EGYPTIAN HIEROGLYPH C014EGYPTIAN H" + + "IEROGLYPH C015EGYPTIAN HIEROGLYPH C016EGYPTIAN HIEROGLYPH C017EGYPTIAN H" + + "IEROGLYPH C018EGYPTIAN HIEROGLYPH C019EGYPTIAN HIEROGLYPH C020EGYPTIAN H" + + "IEROGLYPH C021EGYPTIAN HIEROGLYPH C022EGYPTIAN HIEROGLYPH C023EGYPTIAN H" + + "IEROGLYPH C024EGYPTIAN HIEROGLYPH D001EGYPTIAN HIEROGLYPH D002EGYPTIAN H" + + "IEROGLYPH D003EGYPTIAN HIEROGLYPH D004EGYPTIAN HIEROGLYPH D005EGYPTIAN H" + + "IEROGLYPH D006EGYPTIAN HIEROGLYPH D007EGYPTIAN HIEROGLYPH D008EGYPTIAN H") + ("" + + "IEROGLYPH D008AEGYPTIAN HIEROGLYPH D009EGYPTIAN HIEROGLYPH D010EGYPTIAN " + + "HIEROGLYPH D011EGYPTIAN HIEROGLYPH D012EGYPTIAN HIEROGLYPH D013EGYPTIAN " + + "HIEROGLYPH D014EGYPTIAN HIEROGLYPH D015EGYPTIAN HIEROGLYPH D016EGYPTIAN " + + "HIEROGLYPH D017EGYPTIAN HIEROGLYPH D018EGYPTIAN HIEROGLYPH D019EGYPTIAN " + + "HIEROGLYPH D020EGYPTIAN HIEROGLYPH D021EGYPTIAN HIEROGLYPH D022EGYPTIAN " + + "HIEROGLYPH D023EGYPTIAN HIEROGLYPH D024EGYPTIAN HIEROGLYPH D025EGYPTIAN " + + "HIEROGLYPH D026EGYPTIAN HIEROGLYPH D027EGYPTIAN HIEROGLYPH D027AEGYPTIAN" + + " HIEROGLYPH D028EGYPTIAN HIEROGLYPH D029EGYPTIAN HIEROGLYPH D030EGYPTIAN" + + " HIEROGLYPH D031EGYPTIAN HIEROGLYPH D031AEGYPTIAN HIEROGLYPH D032EGYPTIA" + + "N HIEROGLYPH D033EGYPTIAN HIEROGLYPH D034EGYPTIAN HIEROGLYPH D034AEGYPTI" + + "AN HIEROGLYPH D035EGYPTIAN HIEROGLYPH D036EGYPTIAN HIEROGLYPH D037EGYPTI" + + "AN HIEROGLYPH D038EGYPTIAN HIEROGLYPH D039EGYPTIAN HIEROGLYPH D040EGYPTI" + + "AN HIEROGLYPH D041EGYPTIAN HIEROGLYPH D042EGYPTIAN HIEROGLYPH D043EGYPTI" + + "AN HIEROGLYPH D044EGYPTIAN HIEROGLYPH D045EGYPTIAN HIEROGLYPH D046EGYPTI" + + "AN HIEROGLYPH D046AEGYPTIAN HIEROGLYPH D047EGYPTIAN HIEROGLYPH D048EGYPT" + + "IAN HIEROGLYPH D048AEGYPTIAN HIEROGLYPH D049EGYPTIAN HIEROGLYPH D050EGYP" + + "TIAN HIEROGLYPH D050AEGYPTIAN HIEROGLYPH D050BEGYPTIAN HIEROGLYPH D050CE" + + "GYPTIAN HIEROGLYPH D050DEGYPTIAN HIEROGLYPH D050EEGYPTIAN HIEROGLYPH D05" + + "0FEGYPTIAN HIEROGLYPH D050GEGYPTIAN HIEROGLYPH D050HEGYPTIAN HIEROGLYPH " + + "D050IEGYPTIAN HIEROGLYPH D051EGYPTIAN HIEROGLYPH D052EGYPTIAN HIEROGLYPH" + + " D052AEGYPTIAN HIEROGLYPH D053EGYPTIAN HIEROGLYPH D054EGYPTIAN HIEROGLYP" + + "H D054AEGYPTIAN HIEROGLYPH D055EGYPTIAN HIEROGLYPH D056EGYPTIAN HIEROGLY" + + "PH D057EGYPTIAN HIEROGLYPH D058EGYPTIAN HIEROGLYPH D059EGYPTIAN HIEROGLY" + + "PH D060EGYPTIAN HIEROGLYPH D061EGYPTIAN HIEROGLYPH D062EGYPTIAN HIEROGLY" + + "PH D063EGYPTIAN HIEROGLYPH D064EGYPTIAN HIEROGLYPH D065EGYPTIAN HIEROGLY" + + "PH D066EGYPTIAN HIEROGLYPH D067EGYPTIAN HIEROGLYPH D067AEGYPTIAN HIEROGL" + + "YPH D067BEGYPTIAN HIEROGLYPH D067CEGYPTIAN HIEROGLYPH D067DEGYPTIAN HIER" + + "OGLYPH D067EEGYPTIAN HIEROGLYPH D067FEGYPTIAN HIEROGLYPH D067GEGYPTIAN H" + + "IEROGLYPH D067HEGYPTIAN HIEROGLYPH E001EGYPTIAN HIEROGLYPH E002EGYPTIAN " + + "HIEROGLYPH E003EGYPTIAN HIEROGLYPH E004EGYPTIAN HIEROGLYPH E005EGYPTIAN " + + "HIEROGLYPH E006EGYPTIAN HIEROGLYPH E007EGYPTIAN HIEROGLYPH E008EGYPTIAN " + + "HIEROGLYPH E008AEGYPTIAN HIEROGLYPH E009EGYPTIAN HIEROGLYPH E009AEGYPTIA" + + "N HIEROGLYPH E010EGYPTIAN HIEROGLYPH E011EGYPTIAN HIEROGLYPH E012EGYPTIA" + + "N HIEROGLYPH E013EGYPTIAN HIEROGLYPH E014EGYPTIAN HIEROGLYPH E015EGYPTIA" + + "N HIEROGLYPH E016EGYPTIAN HIEROGLYPH E016AEGYPTIAN HIEROGLYPH E017EGYPTI" + + "AN HIEROGLYPH E017AEGYPTIAN HIEROGLYPH E018EGYPTIAN HIEROGLYPH E019EGYPT" + + "IAN HIEROGLYPH E020EGYPTIAN HIEROGLYPH E020AEGYPTIAN HIEROGLYPH E021EGYP" + + "TIAN HIEROGLYPH E022EGYPTIAN HIEROGLYPH E023EGYPTIAN HIEROGLYPH E024EGYP" + + "TIAN HIEROGLYPH E025EGYPTIAN HIEROGLYPH E026EGYPTIAN HIEROGLYPH E027EGYP" + + "TIAN HIEROGLYPH E028EGYPTIAN HIEROGLYPH E028AEGYPTIAN HIEROGLYPH E029EGY" + + "PTIAN HIEROGLYPH E030EGYPTIAN HIEROGLYPH E031EGYPTIAN HIEROGLYPH E032EGY" + + "PTIAN HIEROGLYPH E033EGYPTIAN HIEROGLYPH E034EGYPTIAN HIEROGLYPH E034AEG" + + "YPTIAN HIEROGLYPH E036EGYPTIAN HIEROGLYPH E037EGYPTIAN HIEROGLYPH E038EG" + + "YPTIAN HIEROGLYPH F001EGYPTIAN HIEROGLYPH F001AEGYPTIAN HIEROGLYPH F002E" + + "GYPTIAN HIEROGLYPH F003EGYPTIAN HIEROGLYPH F004EGYPTIAN HIEROGLYPH F005E" + + "GYPTIAN HIEROGLYPH F006EGYPTIAN HIEROGLYPH F007EGYPTIAN HIEROGLYPH F008E" + + "GYPTIAN HIEROGLYPH F009EGYPTIAN HIEROGLYPH F010EGYPTIAN HIEROGLYPH F011E" + + "GYPTIAN HIEROGLYPH F012EGYPTIAN HIEROGLYPH F013EGYPTIAN HIEROGLYPH F013A" + + "EGYPTIAN HIEROGLYPH F014EGYPTIAN HIEROGLYPH F015EGYPTIAN HIEROGLYPH F016" + + "EGYPTIAN HIEROGLYPH F017EGYPTIAN HIEROGLYPH F018EGYPTIAN HIEROGLYPH F019" + + "EGYPTIAN HIEROGLYPH F020EGYPTIAN HIEROGLYPH F021EGYPTIAN HIEROGLYPH F021" + + "AEGYPTIAN HIEROGLYPH F022EGYPTIAN HIEROGLYPH F023EGYPTIAN HIEROGLYPH F02" + + "4EGYPTIAN HIEROGLYPH F025EGYPTIAN HIEROGLYPH F026EGYPTIAN HIEROGLYPH F02" + + "7EGYPTIAN HIEROGLYPH F028EGYPTIAN HIEROGLYPH F029EGYPTIAN HIEROGLYPH F03" + + "0EGYPTIAN HIEROGLYPH F031EGYPTIAN HIEROGLYPH F031AEGYPTIAN HIEROGLYPH F0" + + "32EGYPTIAN HIEROGLYPH F033EGYPTIAN HIEROGLYPH F034EGYPTIAN HIEROGLYPH F0" + + "35EGYPTIAN HIEROGLYPH F036EGYPTIAN HIEROGLYPH F037EGYPTIAN HIEROGLYPH F0" + + "37AEGYPTIAN HIEROGLYPH F038EGYPTIAN HIEROGLYPH F038AEGYPTIAN HIEROGLYPH " + + "F039EGYPTIAN HIEROGLYPH F040EGYPTIAN HIEROGLYPH F041EGYPTIAN HIEROGLYPH " + + "F042EGYPTIAN HIEROGLYPH F043EGYPTIAN HIEROGLYPH F044EGYPTIAN HIEROGLYPH " + + "F045EGYPTIAN HIEROGLYPH F045AEGYPTIAN HIEROGLYPH F046EGYPTIAN HIEROGLYPH" + + " F046AEGYPTIAN HIEROGLYPH F047EGYPTIAN HIEROGLYPH F047AEGYPTIAN HIEROGLY" + + "PH F048EGYPTIAN HIEROGLYPH F049EGYPTIAN HIEROGLYPH F050EGYPTIAN HIEROGLY" + + "PH F051EGYPTIAN HIEROGLYPH F051AEGYPTIAN HIEROGLYPH F051BEGYPTIAN HIEROG") + ("" + + "LYPH F051CEGYPTIAN HIEROGLYPH F052EGYPTIAN HIEROGLYPH F053EGYPTIAN HIERO" + + "GLYPH G001EGYPTIAN HIEROGLYPH G002EGYPTIAN HIEROGLYPH G003EGYPTIAN HIERO" + + "GLYPH G004EGYPTIAN HIEROGLYPH G005EGYPTIAN HIEROGLYPH G006EGYPTIAN HIERO" + + "GLYPH G006AEGYPTIAN HIEROGLYPH G007EGYPTIAN HIEROGLYPH G007AEGYPTIAN HIE" + + "ROGLYPH G007BEGYPTIAN HIEROGLYPH G008EGYPTIAN HIEROGLYPH G009EGYPTIAN HI" + + "EROGLYPH G010EGYPTIAN HIEROGLYPH G011EGYPTIAN HIEROGLYPH G011AEGYPTIAN H" + + "IEROGLYPH G012EGYPTIAN HIEROGLYPH G013EGYPTIAN HIEROGLYPH G014EGYPTIAN H" + + "IEROGLYPH G015EGYPTIAN HIEROGLYPH G016EGYPTIAN HIEROGLYPH G017EGYPTIAN H" + + "IEROGLYPH G018EGYPTIAN HIEROGLYPH G019EGYPTIAN HIEROGLYPH G020EGYPTIAN H" + + "IEROGLYPH G020AEGYPTIAN HIEROGLYPH G021EGYPTIAN HIEROGLYPH G022EGYPTIAN " + + "HIEROGLYPH G023EGYPTIAN HIEROGLYPH G024EGYPTIAN HIEROGLYPH G025EGYPTIAN " + + "HIEROGLYPH G026EGYPTIAN HIEROGLYPH G026AEGYPTIAN HIEROGLYPH G027EGYPTIAN" + + " HIEROGLYPH G028EGYPTIAN HIEROGLYPH G029EGYPTIAN HIEROGLYPH G030EGYPTIAN" + + " HIEROGLYPH G031EGYPTIAN HIEROGLYPH G032EGYPTIAN HIEROGLYPH G033EGYPTIAN" + + " HIEROGLYPH G034EGYPTIAN HIEROGLYPH G035EGYPTIAN HIEROGLYPH G036EGYPTIAN" + + " HIEROGLYPH G036AEGYPTIAN HIEROGLYPH G037EGYPTIAN HIEROGLYPH G037AEGYPTI" + + "AN HIEROGLYPH G038EGYPTIAN HIEROGLYPH G039EGYPTIAN HIEROGLYPH G040EGYPTI" + + "AN HIEROGLYPH G041EGYPTIAN HIEROGLYPH G042EGYPTIAN HIEROGLYPH G043EGYPTI" + + "AN HIEROGLYPH G043AEGYPTIAN HIEROGLYPH G044EGYPTIAN HIEROGLYPH G045EGYPT" + + "IAN HIEROGLYPH G045AEGYPTIAN HIEROGLYPH G046EGYPTIAN HIEROGLYPH G047EGYP" + + "TIAN HIEROGLYPH G048EGYPTIAN HIEROGLYPH G049EGYPTIAN HIEROGLYPH G050EGYP" + + "TIAN HIEROGLYPH G051EGYPTIAN HIEROGLYPH G052EGYPTIAN HIEROGLYPH G053EGYP" + + "TIAN HIEROGLYPH G054EGYPTIAN HIEROGLYPH H001EGYPTIAN HIEROGLYPH H002EGYP" + + "TIAN HIEROGLYPH H003EGYPTIAN HIEROGLYPH H004EGYPTIAN HIEROGLYPH H005EGYP" + + "TIAN HIEROGLYPH H006EGYPTIAN HIEROGLYPH H006AEGYPTIAN HIEROGLYPH H007EGY" + + "PTIAN HIEROGLYPH H008EGYPTIAN HIEROGLYPH I001EGYPTIAN HIEROGLYPH I002EGY" + + "PTIAN HIEROGLYPH I003EGYPTIAN HIEROGLYPH I004EGYPTIAN HIEROGLYPH I005EGY" + + "PTIAN HIEROGLYPH I005AEGYPTIAN HIEROGLYPH I006EGYPTIAN HIEROGLYPH I007EG" + + "YPTIAN HIEROGLYPH I008EGYPTIAN HIEROGLYPH I009EGYPTIAN HIEROGLYPH I009AE" + + "GYPTIAN HIEROGLYPH I010EGYPTIAN HIEROGLYPH I010AEGYPTIAN HIEROGLYPH I011" + + "EGYPTIAN HIEROGLYPH I011AEGYPTIAN HIEROGLYPH I012EGYPTIAN HIEROGLYPH I01" + + "3EGYPTIAN HIEROGLYPH I014EGYPTIAN HIEROGLYPH I015EGYPTIAN HIEROGLYPH K00" + + "1EGYPTIAN HIEROGLYPH K002EGYPTIAN HIEROGLYPH K003EGYPTIAN HIEROGLYPH K00" + + "4EGYPTIAN HIEROGLYPH K005EGYPTIAN HIEROGLYPH K006EGYPTIAN HIEROGLYPH K00" + + "7EGYPTIAN HIEROGLYPH K008EGYPTIAN HIEROGLYPH L001EGYPTIAN HIEROGLYPH L00" + + "2EGYPTIAN HIEROGLYPH L002AEGYPTIAN HIEROGLYPH L003EGYPTIAN HIEROGLYPH L0" + + "04EGYPTIAN HIEROGLYPH L005EGYPTIAN HIEROGLYPH L006EGYPTIAN HIEROGLYPH L0" + + "06AEGYPTIAN HIEROGLYPH L007EGYPTIAN HIEROGLYPH L008EGYPTIAN HIEROGLYPH M" + + "001EGYPTIAN HIEROGLYPH M001AEGYPTIAN HIEROGLYPH M001BEGYPTIAN HIEROGLYPH" + + " M002EGYPTIAN HIEROGLYPH M003EGYPTIAN HIEROGLYPH M003AEGYPTIAN HIEROGLYP" + + "H M004EGYPTIAN HIEROGLYPH M005EGYPTIAN HIEROGLYPH M006EGYPTIAN HIEROGLYP" + + "H M007EGYPTIAN HIEROGLYPH M008EGYPTIAN HIEROGLYPH M009EGYPTIAN HIEROGLYP" + + "H M010EGYPTIAN HIEROGLYPH M010AEGYPTIAN HIEROGLYPH M011EGYPTIAN HIEROGLY" + + "PH M012EGYPTIAN HIEROGLYPH M012AEGYPTIAN HIEROGLYPH M012BEGYPTIAN HIEROG" + + "LYPH M012CEGYPTIAN HIEROGLYPH M012DEGYPTIAN HIEROGLYPH M012EEGYPTIAN HIE" + + "ROGLYPH M012FEGYPTIAN HIEROGLYPH M012GEGYPTIAN HIEROGLYPH M012HEGYPTIAN " + + "HIEROGLYPH M013EGYPTIAN HIEROGLYPH M014EGYPTIAN HIEROGLYPH M015EGYPTIAN " + + "HIEROGLYPH M015AEGYPTIAN HIEROGLYPH M016EGYPTIAN HIEROGLYPH M016AEGYPTIA" + + "N HIEROGLYPH M017EGYPTIAN HIEROGLYPH M017AEGYPTIAN HIEROGLYPH M018EGYPTI" + + "AN HIEROGLYPH M019EGYPTIAN HIEROGLYPH M020EGYPTIAN HIEROGLYPH M021EGYPTI" + + "AN HIEROGLYPH M022EGYPTIAN HIEROGLYPH M022AEGYPTIAN HIEROGLYPH M023EGYPT" + + "IAN HIEROGLYPH M024EGYPTIAN HIEROGLYPH M024AEGYPTIAN HIEROGLYPH M025EGYP" + + "TIAN HIEROGLYPH M026EGYPTIAN HIEROGLYPH M027EGYPTIAN HIEROGLYPH M028EGYP" + + "TIAN HIEROGLYPH M028AEGYPTIAN HIEROGLYPH M029EGYPTIAN HIEROGLYPH M030EGY" + + "PTIAN HIEROGLYPH M031EGYPTIAN HIEROGLYPH M031AEGYPTIAN HIEROGLYPH M032EG" + + "YPTIAN HIEROGLYPH M033EGYPTIAN HIEROGLYPH M033AEGYPTIAN HIEROGLYPH M033B" + + "EGYPTIAN HIEROGLYPH M034EGYPTIAN HIEROGLYPH M035EGYPTIAN HIEROGLYPH M036" + + "EGYPTIAN HIEROGLYPH M037EGYPTIAN HIEROGLYPH M038EGYPTIAN HIEROGLYPH M039" + + "EGYPTIAN HIEROGLYPH M040EGYPTIAN HIEROGLYPH M040AEGYPTIAN HIEROGLYPH M04" + + "1EGYPTIAN HIEROGLYPH M042EGYPTIAN HIEROGLYPH M043EGYPTIAN HIEROGLYPH M04" + + "4EGYPTIAN HIEROGLYPH N001EGYPTIAN HIEROGLYPH N002EGYPTIAN HIEROGLYPH N00" + + "3EGYPTIAN HIEROGLYPH N004EGYPTIAN HIEROGLYPH N005EGYPTIAN HIEROGLYPH N00" + + "6EGYPTIAN HIEROGLYPH N007EGYPTIAN HIEROGLYPH N008EGYPTIAN HIEROGLYPH N00" + + "9EGYPTIAN HIEROGLYPH N010EGYPTIAN HIEROGLYPH N011EGYPTIAN HIEROGLYPH N01") + ("" + + "2EGYPTIAN HIEROGLYPH N013EGYPTIAN HIEROGLYPH N014EGYPTIAN HIEROGLYPH N01" + + "5EGYPTIAN HIEROGLYPH N016EGYPTIAN HIEROGLYPH N017EGYPTIAN HIEROGLYPH N01" + + "8EGYPTIAN HIEROGLYPH N018AEGYPTIAN HIEROGLYPH N018BEGYPTIAN HIEROGLYPH N" + + "019EGYPTIAN HIEROGLYPH N020EGYPTIAN HIEROGLYPH N021EGYPTIAN HIEROGLYPH N" + + "022EGYPTIAN HIEROGLYPH N023EGYPTIAN HIEROGLYPH N024EGYPTIAN HIEROGLYPH N" + + "025EGYPTIAN HIEROGLYPH N025AEGYPTIAN HIEROGLYPH N026EGYPTIAN HIEROGLYPH " + + "N027EGYPTIAN HIEROGLYPH N028EGYPTIAN HIEROGLYPH N029EGYPTIAN HIEROGLYPH " + + "N030EGYPTIAN HIEROGLYPH N031EGYPTIAN HIEROGLYPH N032EGYPTIAN HIEROGLYPH " + + "N033EGYPTIAN HIEROGLYPH N033AEGYPTIAN HIEROGLYPH N034EGYPTIAN HIEROGLYPH" + + " N034AEGYPTIAN HIEROGLYPH N035EGYPTIAN HIEROGLYPH N035AEGYPTIAN HIEROGLY" + + "PH N036EGYPTIAN HIEROGLYPH N037EGYPTIAN HIEROGLYPH N037AEGYPTIAN HIEROGL" + + "YPH N038EGYPTIAN HIEROGLYPH N039EGYPTIAN HIEROGLYPH N040EGYPTIAN HIEROGL" + + "YPH N041EGYPTIAN HIEROGLYPH N042EGYPTIAN HIEROGLYPH NL001EGYPTIAN HIEROG" + + "LYPH NL002EGYPTIAN HIEROGLYPH NL003EGYPTIAN HIEROGLYPH NL004EGYPTIAN HIE" + + "ROGLYPH NL005EGYPTIAN HIEROGLYPH NL005AEGYPTIAN HIEROGLYPH NL006EGYPTIAN" + + " HIEROGLYPH NL007EGYPTIAN HIEROGLYPH NL008EGYPTIAN HIEROGLYPH NL009EGYPT" + + "IAN HIEROGLYPH NL010EGYPTIAN HIEROGLYPH NL011EGYPTIAN HIEROGLYPH NL012EG" + + "YPTIAN HIEROGLYPH NL013EGYPTIAN HIEROGLYPH NL014EGYPTIAN HIEROGLYPH NL01" + + "5EGYPTIAN HIEROGLYPH NL016EGYPTIAN HIEROGLYPH NL017EGYPTIAN HIEROGLYPH N" + + "L017AEGYPTIAN HIEROGLYPH NL018EGYPTIAN HIEROGLYPH NL019EGYPTIAN HIEROGLY" + + "PH NL020EGYPTIAN HIEROGLYPH NU001EGYPTIAN HIEROGLYPH NU002EGYPTIAN HIERO" + + "GLYPH NU003EGYPTIAN HIEROGLYPH NU004EGYPTIAN HIEROGLYPH NU005EGYPTIAN HI" + + "EROGLYPH NU006EGYPTIAN HIEROGLYPH NU007EGYPTIAN HIEROGLYPH NU008EGYPTIAN" + + " HIEROGLYPH NU009EGYPTIAN HIEROGLYPH NU010EGYPTIAN HIEROGLYPH NU010AEGYP" + + "TIAN HIEROGLYPH NU011EGYPTIAN HIEROGLYPH NU011AEGYPTIAN HIEROGLYPH NU012" + + "EGYPTIAN HIEROGLYPH NU013EGYPTIAN HIEROGLYPH NU014EGYPTIAN HIEROGLYPH NU" + + "015EGYPTIAN HIEROGLYPH NU016EGYPTIAN HIEROGLYPH NU017EGYPTIAN HIEROGLYPH" + + " NU018EGYPTIAN HIEROGLYPH NU018AEGYPTIAN HIEROGLYPH NU019EGYPTIAN HIEROG" + + "LYPH NU020EGYPTIAN HIEROGLYPH NU021EGYPTIAN HIEROGLYPH NU022EGYPTIAN HIE" + + "ROGLYPH NU022AEGYPTIAN HIEROGLYPH O001EGYPTIAN HIEROGLYPH O001AEGYPTIAN " + + "HIEROGLYPH O002EGYPTIAN HIEROGLYPH O003EGYPTIAN HIEROGLYPH O004EGYPTIAN " + + "HIEROGLYPH O005EGYPTIAN HIEROGLYPH O005AEGYPTIAN HIEROGLYPH O006EGYPTIAN" + + " HIEROGLYPH O006AEGYPTIAN HIEROGLYPH O006BEGYPTIAN HIEROGLYPH O006CEGYPT" + + "IAN HIEROGLYPH O006DEGYPTIAN HIEROGLYPH O006EEGYPTIAN HIEROGLYPH O006FEG" + + "YPTIAN HIEROGLYPH O007EGYPTIAN HIEROGLYPH O008EGYPTIAN HIEROGLYPH O009EG" + + "YPTIAN HIEROGLYPH O010EGYPTIAN HIEROGLYPH O010AEGYPTIAN HIEROGLYPH O010B" + + "EGYPTIAN HIEROGLYPH O010CEGYPTIAN HIEROGLYPH O011EGYPTIAN HIEROGLYPH O01" + + "2EGYPTIAN HIEROGLYPH O013EGYPTIAN HIEROGLYPH O014EGYPTIAN HIEROGLYPH O01" + + "5EGYPTIAN HIEROGLYPH O016EGYPTIAN HIEROGLYPH O017EGYPTIAN HIEROGLYPH O01" + + "8EGYPTIAN HIEROGLYPH O019EGYPTIAN HIEROGLYPH O019AEGYPTIAN HIEROGLYPH O0" + + "20EGYPTIAN HIEROGLYPH O020AEGYPTIAN HIEROGLYPH O021EGYPTIAN HIEROGLYPH O" + + "022EGYPTIAN HIEROGLYPH O023EGYPTIAN HIEROGLYPH O024EGYPTIAN HIEROGLYPH O" + + "024AEGYPTIAN HIEROGLYPH O025EGYPTIAN HIEROGLYPH O025AEGYPTIAN HIEROGLYPH" + + " O026EGYPTIAN HIEROGLYPH O027EGYPTIAN HIEROGLYPH O028EGYPTIAN HIEROGLYPH" + + " O029EGYPTIAN HIEROGLYPH O029AEGYPTIAN HIEROGLYPH O030EGYPTIAN HIEROGLYP" + + "H O030AEGYPTIAN HIEROGLYPH O031EGYPTIAN HIEROGLYPH O032EGYPTIAN HIEROGLY" + + "PH O033EGYPTIAN HIEROGLYPH O033AEGYPTIAN HIEROGLYPH O034EGYPTIAN HIEROGL" + + "YPH O035EGYPTIAN HIEROGLYPH O036EGYPTIAN HIEROGLYPH O036AEGYPTIAN HIEROG" + + "LYPH O036BEGYPTIAN HIEROGLYPH O036CEGYPTIAN HIEROGLYPH O036DEGYPTIAN HIE" + + "ROGLYPH O037EGYPTIAN HIEROGLYPH O038EGYPTIAN HIEROGLYPH O039EGYPTIAN HIE" + + "ROGLYPH O040EGYPTIAN HIEROGLYPH O041EGYPTIAN HIEROGLYPH O042EGYPTIAN HIE" + + "ROGLYPH O043EGYPTIAN HIEROGLYPH O044EGYPTIAN HIEROGLYPH O045EGYPTIAN HIE" + + "ROGLYPH O046EGYPTIAN HIEROGLYPH O047EGYPTIAN HIEROGLYPH O048EGYPTIAN HIE" + + "ROGLYPH O049EGYPTIAN HIEROGLYPH O050EGYPTIAN HIEROGLYPH O050AEGYPTIAN HI" + + "EROGLYPH O050BEGYPTIAN HIEROGLYPH O051EGYPTIAN HIEROGLYPH P001EGYPTIAN H" + + "IEROGLYPH P001AEGYPTIAN HIEROGLYPH P002EGYPTIAN HIEROGLYPH P003EGYPTIAN " + + "HIEROGLYPH P003AEGYPTIAN HIEROGLYPH P004EGYPTIAN HIEROGLYPH P005EGYPTIAN" + + " HIEROGLYPH P006EGYPTIAN HIEROGLYPH P007EGYPTIAN HIEROGLYPH P008EGYPTIAN" + + " HIEROGLYPH P009EGYPTIAN HIEROGLYPH P010EGYPTIAN HIEROGLYPH P011EGYPTIAN" + + " HIEROGLYPH Q001EGYPTIAN HIEROGLYPH Q002EGYPTIAN HIEROGLYPH Q003EGYPTIAN" + + " HIEROGLYPH Q004EGYPTIAN HIEROGLYPH Q005EGYPTIAN HIEROGLYPH Q006EGYPTIAN" + + " HIEROGLYPH Q007EGYPTIAN HIEROGLYPH R001EGYPTIAN HIEROGLYPH R002EGYPTIAN" + + " HIEROGLYPH R002AEGYPTIAN HIEROGLYPH R003EGYPTIAN HIEROGLYPH R003AEGYPTI" + + "AN HIEROGLYPH R003BEGYPTIAN HIEROGLYPH R004EGYPTIAN HIEROGLYPH R005EGYPT") + ("" + + "IAN HIEROGLYPH R006EGYPTIAN HIEROGLYPH R007EGYPTIAN HIEROGLYPH R008EGYPT" + + "IAN HIEROGLYPH R009EGYPTIAN HIEROGLYPH R010EGYPTIAN HIEROGLYPH R010AEGYP" + + "TIAN HIEROGLYPH R011EGYPTIAN HIEROGLYPH R012EGYPTIAN HIEROGLYPH R013EGYP" + + "TIAN HIEROGLYPH R014EGYPTIAN HIEROGLYPH R015EGYPTIAN HIEROGLYPH R016EGYP" + + "TIAN HIEROGLYPH R016AEGYPTIAN HIEROGLYPH R017EGYPTIAN HIEROGLYPH R018EGY" + + "PTIAN HIEROGLYPH R019EGYPTIAN HIEROGLYPH R020EGYPTIAN HIEROGLYPH R021EGY" + + "PTIAN HIEROGLYPH R022EGYPTIAN HIEROGLYPH R023EGYPTIAN HIEROGLYPH R024EGY" + + "PTIAN HIEROGLYPH R025EGYPTIAN HIEROGLYPH R026EGYPTIAN HIEROGLYPH R027EGY" + + "PTIAN HIEROGLYPH R028EGYPTIAN HIEROGLYPH R029EGYPTIAN HIEROGLYPH S001EGY" + + "PTIAN HIEROGLYPH S002EGYPTIAN HIEROGLYPH S002AEGYPTIAN HIEROGLYPH S003EG" + + "YPTIAN HIEROGLYPH S004EGYPTIAN HIEROGLYPH S005EGYPTIAN HIEROGLYPH S006EG" + + "YPTIAN HIEROGLYPH S006AEGYPTIAN HIEROGLYPH S007EGYPTIAN HIEROGLYPH S008E" + + "GYPTIAN HIEROGLYPH S009EGYPTIAN HIEROGLYPH S010EGYPTIAN HIEROGLYPH S011E" + + "GYPTIAN HIEROGLYPH S012EGYPTIAN HIEROGLYPH S013EGYPTIAN HIEROGLYPH S014E" + + "GYPTIAN HIEROGLYPH S014AEGYPTIAN HIEROGLYPH S014BEGYPTIAN HIEROGLYPH S01" + + "5EGYPTIAN HIEROGLYPH S016EGYPTIAN HIEROGLYPH S017EGYPTIAN HIEROGLYPH S01" + + "7AEGYPTIAN HIEROGLYPH S018EGYPTIAN HIEROGLYPH S019EGYPTIAN HIEROGLYPH S0" + + "20EGYPTIAN HIEROGLYPH S021EGYPTIAN HIEROGLYPH S022EGYPTIAN HIEROGLYPH S0" + + "23EGYPTIAN HIEROGLYPH S024EGYPTIAN HIEROGLYPH S025EGYPTIAN HIEROGLYPH S0" + + "26EGYPTIAN HIEROGLYPH S026AEGYPTIAN HIEROGLYPH S026BEGYPTIAN HIEROGLYPH " + + "S027EGYPTIAN HIEROGLYPH S028EGYPTIAN HIEROGLYPH S029EGYPTIAN HIEROGLYPH " + + "S030EGYPTIAN HIEROGLYPH S031EGYPTIAN HIEROGLYPH S032EGYPTIAN HIEROGLYPH " + + "S033EGYPTIAN HIEROGLYPH S034EGYPTIAN HIEROGLYPH S035EGYPTIAN HIEROGLYPH " + + "S035AEGYPTIAN HIEROGLYPH S036EGYPTIAN HIEROGLYPH S037EGYPTIAN HIEROGLYPH" + + " S038EGYPTIAN HIEROGLYPH S039EGYPTIAN HIEROGLYPH S040EGYPTIAN HIEROGLYPH" + + " S041EGYPTIAN HIEROGLYPH S042EGYPTIAN HIEROGLYPH S043EGYPTIAN HIEROGLYPH" + + " S044EGYPTIAN HIEROGLYPH S045EGYPTIAN HIEROGLYPH S046EGYPTIAN HIEROGLYPH" + + " T001EGYPTIAN HIEROGLYPH T002EGYPTIAN HIEROGLYPH T003EGYPTIAN HIEROGLYPH" + + " T003AEGYPTIAN HIEROGLYPH T004EGYPTIAN HIEROGLYPH T005EGYPTIAN HIEROGLYP" + + "H T006EGYPTIAN HIEROGLYPH T007EGYPTIAN HIEROGLYPH T007AEGYPTIAN HIEROGLY" + + "PH T008EGYPTIAN HIEROGLYPH T008AEGYPTIAN HIEROGLYPH T009EGYPTIAN HIEROGL" + + "YPH T009AEGYPTIAN HIEROGLYPH T010EGYPTIAN HIEROGLYPH T011EGYPTIAN HIEROG" + + "LYPH T011AEGYPTIAN HIEROGLYPH T012EGYPTIAN HIEROGLYPH T013EGYPTIAN HIERO" + + "GLYPH T014EGYPTIAN HIEROGLYPH T015EGYPTIAN HIEROGLYPH T016EGYPTIAN HIERO" + + "GLYPH T016AEGYPTIAN HIEROGLYPH T017EGYPTIAN HIEROGLYPH T018EGYPTIAN HIER" + + "OGLYPH T019EGYPTIAN HIEROGLYPH T020EGYPTIAN HIEROGLYPH T021EGYPTIAN HIER" + + "OGLYPH T022EGYPTIAN HIEROGLYPH T023EGYPTIAN HIEROGLYPH T024EGYPTIAN HIER" + + "OGLYPH T025EGYPTIAN HIEROGLYPH T026EGYPTIAN HIEROGLYPH T027EGYPTIAN HIER" + + "OGLYPH T028EGYPTIAN HIEROGLYPH T029EGYPTIAN HIEROGLYPH T030EGYPTIAN HIER" + + "OGLYPH T031EGYPTIAN HIEROGLYPH T032EGYPTIAN HIEROGLYPH T032AEGYPTIAN HIE" + + "ROGLYPH T033EGYPTIAN HIEROGLYPH T033AEGYPTIAN HIEROGLYPH T034EGYPTIAN HI" + + "EROGLYPH T035EGYPTIAN HIEROGLYPH T036EGYPTIAN HIEROGLYPH U001EGYPTIAN HI" + + "EROGLYPH U002EGYPTIAN HIEROGLYPH U003EGYPTIAN HIEROGLYPH U004EGYPTIAN HI" + + "EROGLYPH U005EGYPTIAN HIEROGLYPH U006EGYPTIAN HIEROGLYPH U006AEGYPTIAN H" + + "IEROGLYPH U006BEGYPTIAN HIEROGLYPH U007EGYPTIAN HIEROGLYPH U008EGYPTIAN " + + "HIEROGLYPH U009EGYPTIAN HIEROGLYPH U010EGYPTIAN HIEROGLYPH U011EGYPTIAN " + + "HIEROGLYPH U012EGYPTIAN HIEROGLYPH U013EGYPTIAN HIEROGLYPH U014EGYPTIAN " + + "HIEROGLYPH U015EGYPTIAN HIEROGLYPH U016EGYPTIAN HIEROGLYPH U017EGYPTIAN " + + "HIEROGLYPH U018EGYPTIAN HIEROGLYPH U019EGYPTIAN HIEROGLYPH U020EGYPTIAN " + + "HIEROGLYPH U021EGYPTIAN HIEROGLYPH U022EGYPTIAN HIEROGLYPH U023EGYPTIAN " + + "HIEROGLYPH U023AEGYPTIAN HIEROGLYPH U024EGYPTIAN HIEROGLYPH U025EGYPTIAN" + + " HIEROGLYPH U026EGYPTIAN HIEROGLYPH U027EGYPTIAN HIEROGLYPH U028EGYPTIAN" + + " HIEROGLYPH U029EGYPTIAN HIEROGLYPH U029AEGYPTIAN HIEROGLYPH U030EGYPTIA" + + "N HIEROGLYPH U031EGYPTIAN HIEROGLYPH U032EGYPTIAN HIEROGLYPH U032AEGYPTI" + + "AN HIEROGLYPH U033EGYPTIAN HIEROGLYPH U034EGYPTIAN HIEROGLYPH U035EGYPTI" + + "AN HIEROGLYPH U036EGYPTIAN HIEROGLYPH U037EGYPTIAN HIEROGLYPH U038EGYPTI" + + "AN HIEROGLYPH U039EGYPTIAN HIEROGLYPH U040EGYPTIAN HIEROGLYPH U041EGYPTI" + + "AN HIEROGLYPH U042EGYPTIAN HIEROGLYPH V001EGYPTIAN HIEROGLYPH V001AEGYPT" + + "IAN HIEROGLYPH V001BEGYPTIAN HIEROGLYPH V001CEGYPTIAN HIEROGLYPH V001DEG" + + "YPTIAN HIEROGLYPH V001EEGYPTIAN HIEROGLYPH V001FEGYPTIAN HIEROGLYPH V001" + + "GEGYPTIAN HIEROGLYPH V001HEGYPTIAN HIEROGLYPH V001IEGYPTIAN HIEROGLYPH V" + + "002EGYPTIAN HIEROGLYPH V002AEGYPTIAN HIEROGLYPH V003EGYPTIAN HIEROGLYPH " + + "V004EGYPTIAN HIEROGLYPH V005EGYPTIAN HIEROGLYPH V006EGYPTIAN HIEROGLYPH " + + "V007EGYPTIAN HIEROGLYPH V007AEGYPTIAN HIEROGLYPH V007BEGYPTIAN HIEROGLYP") + ("" + + "H V008EGYPTIAN HIEROGLYPH V009EGYPTIAN HIEROGLYPH V010EGYPTIAN HIEROGLYP" + + "H V011EGYPTIAN HIEROGLYPH V011AEGYPTIAN HIEROGLYPH V011BEGYPTIAN HIEROGL" + + "YPH V011CEGYPTIAN HIEROGLYPH V012EGYPTIAN HIEROGLYPH V012AEGYPTIAN HIERO" + + "GLYPH V012BEGYPTIAN HIEROGLYPH V013EGYPTIAN HIEROGLYPH V014EGYPTIAN HIER" + + "OGLYPH V015EGYPTIAN HIEROGLYPH V016EGYPTIAN HIEROGLYPH V017EGYPTIAN HIER" + + "OGLYPH V018EGYPTIAN HIEROGLYPH V019EGYPTIAN HIEROGLYPH V020EGYPTIAN HIER" + + "OGLYPH V020AEGYPTIAN HIEROGLYPH V020BEGYPTIAN HIEROGLYPH V020CEGYPTIAN H" + + "IEROGLYPH V020DEGYPTIAN HIEROGLYPH V020EEGYPTIAN HIEROGLYPH V020FEGYPTIA" + + "N HIEROGLYPH V020GEGYPTIAN HIEROGLYPH V020HEGYPTIAN HIEROGLYPH V020IEGYP" + + "TIAN HIEROGLYPH V020JEGYPTIAN HIEROGLYPH V020KEGYPTIAN HIEROGLYPH V020LE" + + "GYPTIAN HIEROGLYPH V021EGYPTIAN HIEROGLYPH V022EGYPTIAN HIEROGLYPH V023E" + + "GYPTIAN HIEROGLYPH V023AEGYPTIAN HIEROGLYPH V024EGYPTIAN HIEROGLYPH V025" + + "EGYPTIAN HIEROGLYPH V026EGYPTIAN HIEROGLYPH V027EGYPTIAN HIEROGLYPH V028" + + "EGYPTIAN HIEROGLYPH V028AEGYPTIAN HIEROGLYPH V029EGYPTIAN HIEROGLYPH V02" + + "9AEGYPTIAN HIEROGLYPH V030EGYPTIAN HIEROGLYPH V030AEGYPTIAN HIEROGLYPH V" + + "031EGYPTIAN HIEROGLYPH V031AEGYPTIAN HIEROGLYPH V032EGYPTIAN HIEROGLYPH " + + "V033EGYPTIAN HIEROGLYPH V033AEGYPTIAN HIEROGLYPH V034EGYPTIAN HIEROGLYPH" + + " V035EGYPTIAN HIEROGLYPH V036EGYPTIAN HIEROGLYPH V037EGYPTIAN HIEROGLYPH" + + " V037AEGYPTIAN HIEROGLYPH V038EGYPTIAN HIEROGLYPH V039EGYPTIAN HIEROGLYP" + + "H V040EGYPTIAN HIEROGLYPH V040AEGYPTIAN HIEROGLYPH W001EGYPTIAN HIEROGLY" + + "PH W002EGYPTIAN HIEROGLYPH W003EGYPTIAN HIEROGLYPH W003AEGYPTIAN HIEROGL" + + "YPH W004EGYPTIAN HIEROGLYPH W005EGYPTIAN HIEROGLYPH W006EGYPTIAN HIEROGL" + + "YPH W007EGYPTIAN HIEROGLYPH W008EGYPTIAN HIEROGLYPH W009EGYPTIAN HIEROGL" + + "YPH W009AEGYPTIAN HIEROGLYPH W010EGYPTIAN HIEROGLYPH W010AEGYPTIAN HIERO" + + "GLYPH W011EGYPTIAN HIEROGLYPH W012EGYPTIAN HIEROGLYPH W013EGYPTIAN HIERO" + + "GLYPH W014EGYPTIAN HIEROGLYPH W014AEGYPTIAN HIEROGLYPH W015EGYPTIAN HIER" + + "OGLYPH W016EGYPTIAN HIEROGLYPH W017EGYPTIAN HIEROGLYPH W017AEGYPTIAN HIE" + + "ROGLYPH W018EGYPTIAN HIEROGLYPH W018AEGYPTIAN HIEROGLYPH W019EGYPTIAN HI" + + "EROGLYPH W020EGYPTIAN HIEROGLYPH W021EGYPTIAN HIEROGLYPH W022EGYPTIAN HI" + + "EROGLYPH W023EGYPTIAN HIEROGLYPH W024EGYPTIAN HIEROGLYPH W024AEGYPTIAN H" + + "IEROGLYPH W025EGYPTIAN HIEROGLYPH X001EGYPTIAN HIEROGLYPH X002EGYPTIAN H" + + "IEROGLYPH X003EGYPTIAN HIEROGLYPH X004EGYPTIAN HIEROGLYPH X004AEGYPTIAN " + + "HIEROGLYPH X004BEGYPTIAN HIEROGLYPH X005EGYPTIAN HIEROGLYPH X006EGYPTIAN" + + " HIEROGLYPH X006AEGYPTIAN HIEROGLYPH X007EGYPTIAN HIEROGLYPH X008EGYPTIA" + + "N HIEROGLYPH X008AEGYPTIAN HIEROGLYPH Y001EGYPTIAN HIEROGLYPH Y001AEGYPT" + + "IAN HIEROGLYPH Y002EGYPTIAN HIEROGLYPH Y003EGYPTIAN HIEROGLYPH Y004EGYPT" + + "IAN HIEROGLYPH Y005EGYPTIAN HIEROGLYPH Y006EGYPTIAN HIEROGLYPH Y007EGYPT" + + "IAN HIEROGLYPH Y008EGYPTIAN HIEROGLYPH Z001EGYPTIAN HIEROGLYPH Z002EGYPT" + + "IAN HIEROGLYPH Z002AEGYPTIAN HIEROGLYPH Z002BEGYPTIAN HIEROGLYPH Z002CEG" + + "YPTIAN HIEROGLYPH Z002DEGYPTIAN HIEROGLYPH Z003EGYPTIAN HIEROGLYPH Z003A" + + "EGYPTIAN HIEROGLYPH Z003BEGYPTIAN HIEROGLYPH Z004EGYPTIAN HIEROGLYPH Z00" + + "4AEGYPTIAN HIEROGLYPH Z005EGYPTIAN HIEROGLYPH Z005AEGYPTIAN HIEROGLYPH Z" + + "006EGYPTIAN HIEROGLYPH Z007EGYPTIAN HIEROGLYPH Z008EGYPTIAN HIEROGLYPH Z" + + "009EGYPTIAN HIEROGLYPH Z010EGYPTIAN HIEROGLYPH Z011EGYPTIAN HIEROGLYPH Z" + + "012EGYPTIAN HIEROGLYPH Z013EGYPTIAN HIEROGLYPH Z014EGYPTIAN HIEROGLYPH Z" + + "015EGYPTIAN HIEROGLYPH Z015AEGYPTIAN HIEROGLYPH Z015BEGYPTIAN HIEROGLYPH" + + " Z015CEGYPTIAN HIEROGLYPH Z015DEGYPTIAN HIEROGLYPH Z015EEGYPTIAN HIEROGL" + + "YPH Z015FEGYPTIAN HIEROGLYPH Z015GEGYPTIAN HIEROGLYPH Z015HEGYPTIAN HIER" + + "OGLYPH Z015IEGYPTIAN HIEROGLYPH Z016EGYPTIAN HIEROGLYPH Z016AEGYPTIAN HI" + + "EROGLYPH Z016BEGYPTIAN HIEROGLYPH Z016CEGYPTIAN HIEROGLYPH Z016DEGYPTIAN" + + " HIEROGLYPH Z016EEGYPTIAN HIEROGLYPH Z016FEGYPTIAN HIEROGLYPH Z016GEGYPT" + + "IAN HIEROGLYPH Z016HEGYPTIAN HIEROGLYPH AA001EGYPTIAN HIEROGLYPH AA002EG" + + "YPTIAN HIEROGLYPH AA003EGYPTIAN HIEROGLYPH AA004EGYPTIAN HIEROGLYPH AA00" + + "5EGYPTIAN HIEROGLYPH AA006EGYPTIAN HIEROGLYPH AA007EGYPTIAN HIEROGLYPH A" + + "A007AEGYPTIAN HIEROGLYPH AA007BEGYPTIAN HIEROGLYPH AA008EGYPTIAN HIEROGL" + + "YPH AA009EGYPTIAN HIEROGLYPH AA010EGYPTIAN HIEROGLYPH AA011EGYPTIAN HIER" + + "OGLYPH AA012EGYPTIAN HIEROGLYPH AA013EGYPTIAN HIEROGLYPH AA014EGYPTIAN H" + + "IEROGLYPH AA015EGYPTIAN HIEROGLYPH AA016EGYPTIAN HIEROGLYPH AA017EGYPTIA" + + "N HIEROGLYPH AA018EGYPTIAN HIEROGLYPH AA019EGYPTIAN HIEROGLYPH AA020EGYP" + + "TIAN HIEROGLYPH AA021EGYPTIAN HIEROGLYPH AA022EGYPTIAN HIEROGLYPH AA023E" + + "GYPTIAN HIEROGLYPH AA024EGYPTIAN HIEROGLYPH AA025EGYPTIAN HIEROGLYPH AA0" + + "26EGYPTIAN HIEROGLYPH AA027EGYPTIAN HIEROGLYPH AA028EGYPTIAN HIEROGLYPH " + + "AA029EGYPTIAN HIEROGLYPH AA030EGYPTIAN HIEROGLYPH AA031EGYPTIAN HIEROGLY" + + "PH AA032ANATOLIAN HIEROGLYPH A001ANATOLIAN HIEROGLYPH A002ANATOLIAN HIER") + ("" + + "OGLYPH A003ANATOLIAN HIEROGLYPH A004ANATOLIAN HIEROGLYPH A005ANATOLIAN H" + + "IEROGLYPH A006ANATOLIAN HIEROGLYPH A007ANATOLIAN HIEROGLYPH A008ANATOLIA" + + "N HIEROGLYPH A009ANATOLIAN HIEROGLYPH A010ANATOLIAN HIEROGLYPH A010AANAT" + + "OLIAN HIEROGLYPH A011ANATOLIAN HIEROGLYPH A012ANATOLIAN HIEROGLYPH A013A" + + "NATOLIAN HIEROGLYPH A014ANATOLIAN HIEROGLYPH A015ANATOLIAN HIEROGLYPH A0" + + "16ANATOLIAN HIEROGLYPH A017ANATOLIAN HIEROGLYPH A018ANATOLIAN HIEROGLYPH" + + " A019ANATOLIAN HIEROGLYPH A020ANATOLIAN HIEROGLYPH A021ANATOLIAN HIEROGL" + + "YPH A022ANATOLIAN HIEROGLYPH A023ANATOLIAN HIEROGLYPH A024ANATOLIAN HIER" + + "OGLYPH A025ANATOLIAN HIEROGLYPH A026ANATOLIAN HIEROGLYPH A026AANATOLIAN " + + "HIEROGLYPH A027ANATOLIAN HIEROGLYPH A028ANATOLIAN HIEROGLYPH A029ANATOLI" + + "AN HIEROGLYPH A030ANATOLIAN HIEROGLYPH A031ANATOLIAN HIEROGLYPH A032ANAT" + + "OLIAN HIEROGLYPH A033ANATOLIAN HIEROGLYPH A034ANATOLIAN HIEROGLYPH A035A" + + "NATOLIAN HIEROGLYPH A036ANATOLIAN HIEROGLYPH A037ANATOLIAN HIEROGLYPH A0" + + "38ANATOLIAN HIEROGLYPH A039ANATOLIAN HIEROGLYPH A039AANATOLIAN HIEROGLYP" + + "H A040ANATOLIAN HIEROGLYPH A041ANATOLIAN HIEROGLYPH A041AANATOLIAN HIERO" + + "GLYPH A042ANATOLIAN HIEROGLYPH A043ANATOLIAN HIEROGLYPH A044ANATOLIAN HI" + + "EROGLYPH A045ANATOLIAN HIEROGLYPH A045AANATOLIAN HIEROGLYPH A046ANATOLIA" + + "N HIEROGLYPH A046AANATOLIAN HIEROGLYPH A046BANATOLIAN HIEROGLYPH A047ANA" + + "TOLIAN HIEROGLYPH A048ANATOLIAN HIEROGLYPH A049ANATOLIAN HIEROGLYPH A050" + + "ANATOLIAN HIEROGLYPH A051ANATOLIAN HIEROGLYPH A052ANATOLIAN HIEROGLYPH A" + + "053ANATOLIAN HIEROGLYPH A054ANATOLIAN HIEROGLYPH A055ANATOLIAN HIEROGLYP" + + "H A056ANATOLIAN HIEROGLYPH A057ANATOLIAN HIEROGLYPH A058ANATOLIAN HIEROG" + + "LYPH A059ANATOLIAN HIEROGLYPH A060ANATOLIAN HIEROGLYPH A061ANATOLIAN HIE" + + "ROGLYPH A062ANATOLIAN HIEROGLYPH A063ANATOLIAN HIEROGLYPH A064ANATOLIAN " + + "HIEROGLYPH A065ANATOLIAN HIEROGLYPH A066ANATOLIAN HIEROGLYPH A066AANATOL" + + "IAN HIEROGLYPH A066BANATOLIAN HIEROGLYPH A066CANATOLIAN HIEROGLYPH A067A" + + "NATOLIAN HIEROGLYPH A068ANATOLIAN HIEROGLYPH A069ANATOLIAN HIEROGLYPH A0" + + "70ANATOLIAN HIEROGLYPH A071ANATOLIAN HIEROGLYPH A072ANATOLIAN HIEROGLYPH" + + " A073ANATOLIAN HIEROGLYPH A074ANATOLIAN HIEROGLYPH A075ANATOLIAN HIEROGL" + + "YPH A076ANATOLIAN HIEROGLYPH A077ANATOLIAN HIEROGLYPH A078ANATOLIAN HIER" + + "OGLYPH A079ANATOLIAN HIEROGLYPH A080ANATOLIAN HIEROGLYPH A081ANATOLIAN H" + + "IEROGLYPH A082ANATOLIAN HIEROGLYPH A083ANATOLIAN HIEROGLYPH A084ANATOLIA" + + "N HIEROGLYPH A085ANATOLIAN HIEROGLYPH A086ANATOLIAN HIEROGLYPH A087ANATO" + + "LIAN HIEROGLYPH A088ANATOLIAN HIEROGLYPH A089ANATOLIAN HIEROGLYPH A090AN" + + "ATOLIAN HIEROGLYPH A091ANATOLIAN HIEROGLYPH A092ANATOLIAN HIEROGLYPH A09" + + "3ANATOLIAN HIEROGLYPH A094ANATOLIAN HIEROGLYPH A095ANATOLIAN HIEROGLYPH " + + "A096ANATOLIAN HIEROGLYPH A097ANATOLIAN HIEROGLYPH A097AANATOLIAN HIEROGL" + + "YPH A098ANATOLIAN HIEROGLYPH A098AANATOLIAN HIEROGLYPH A099ANATOLIAN HIE" + + "ROGLYPH A100ANATOLIAN HIEROGLYPH A100AANATOLIAN HIEROGLYPH A101ANATOLIAN" + + " HIEROGLYPH A101AANATOLIAN HIEROGLYPH A102ANATOLIAN HIEROGLYPH A102AANAT" + + "OLIAN HIEROGLYPH A103ANATOLIAN HIEROGLYPH A104ANATOLIAN HIEROGLYPH A104A" + + "ANATOLIAN HIEROGLYPH A104BANATOLIAN HIEROGLYPH A104CANATOLIAN HIEROGLYPH" + + " A105ANATOLIAN HIEROGLYPH A105AANATOLIAN HIEROGLYPH A105BANATOLIAN HIERO" + + "GLYPH A106ANATOLIAN HIEROGLYPH A107ANATOLIAN HIEROGLYPH A107AANATOLIAN H" + + "IEROGLYPH A107BANATOLIAN HIEROGLYPH A107CANATOLIAN HIEROGLYPH A108ANATOL" + + "IAN HIEROGLYPH A109ANATOLIAN HIEROGLYPH A110ANATOLIAN HIEROGLYPH A110AAN" + + "ATOLIAN HIEROGLYPH A110BANATOLIAN HIEROGLYPH A111ANATOLIAN HIEROGLYPH A1" + + "12ANATOLIAN HIEROGLYPH A113ANATOLIAN HIEROGLYPH A114ANATOLIAN HIEROGLYPH" + + " A115ANATOLIAN HIEROGLYPH A115AANATOLIAN HIEROGLYPH A116ANATOLIAN HIEROG" + + "LYPH A117ANATOLIAN HIEROGLYPH A118ANATOLIAN HIEROGLYPH A119ANATOLIAN HIE" + + "ROGLYPH A120ANATOLIAN HIEROGLYPH A121ANATOLIAN HIEROGLYPH A122ANATOLIAN " + + "HIEROGLYPH A123ANATOLIAN HIEROGLYPH A124ANATOLIAN HIEROGLYPH A125ANATOLI" + + "AN HIEROGLYPH A125AANATOLIAN HIEROGLYPH A126ANATOLIAN HIEROGLYPH A127ANA" + + "TOLIAN HIEROGLYPH A128ANATOLIAN HIEROGLYPH A129ANATOLIAN HIEROGLYPH A130" + + "ANATOLIAN HIEROGLYPH A131ANATOLIAN HIEROGLYPH A132ANATOLIAN HIEROGLYPH A" + + "133ANATOLIAN HIEROGLYPH A134ANATOLIAN HIEROGLYPH A135ANATOLIAN HIEROGLYP" + + "H A135AANATOLIAN HIEROGLYPH A136ANATOLIAN HIEROGLYPH A137ANATOLIAN HIERO" + + "GLYPH A138ANATOLIAN HIEROGLYPH A139ANATOLIAN HIEROGLYPH A140ANATOLIAN HI" + + "EROGLYPH A141ANATOLIAN HIEROGLYPH A142ANATOLIAN HIEROGLYPH A143ANATOLIAN" + + " HIEROGLYPH A144ANATOLIAN HIEROGLYPH A145ANATOLIAN HIEROGLYPH A146ANATOL" + + "IAN HIEROGLYPH A147ANATOLIAN HIEROGLYPH A148ANATOLIAN HIEROGLYPH A149ANA" + + "TOLIAN HIEROGLYPH A150ANATOLIAN HIEROGLYPH A151ANATOLIAN HIEROGLYPH A152" + + "ANATOLIAN HIEROGLYPH A153ANATOLIAN HIEROGLYPH A154ANATOLIAN HIEROGLYPH A" + + "155ANATOLIAN HIEROGLYPH A156ANATOLIAN HIEROGLYPH A157ANATOLIAN HIEROGLYP") + ("" + + "H A158ANATOLIAN HIEROGLYPH A159ANATOLIAN HIEROGLYPH A160ANATOLIAN HIEROG" + + "LYPH A161ANATOLIAN HIEROGLYPH A162ANATOLIAN HIEROGLYPH A163ANATOLIAN HIE" + + "ROGLYPH A164ANATOLIAN HIEROGLYPH A165ANATOLIAN HIEROGLYPH A166ANATOLIAN " + + "HIEROGLYPH A167ANATOLIAN HIEROGLYPH A168ANATOLIAN HIEROGLYPH A169ANATOLI" + + "AN HIEROGLYPH A170ANATOLIAN HIEROGLYPH A171ANATOLIAN HIEROGLYPH A172ANAT" + + "OLIAN HIEROGLYPH A173ANATOLIAN HIEROGLYPH A174ANATOLIAN HIEROGLYPH A175A" + + "NATOLIAN HIEROGLYPH A176ANATOLIAN HIEROGLYPH A177ANATOLIAN HIEROGLYPH A1" + + "78ANATOLIAN HIEROGLYPH A179ANATOLIAN HIEROGLYPH A180ANATOLIAN HIEROGLYPH" + + " A181ANATOLIAN HIEROGLYPH A182ANATOLIAN HIEROGLYPH A183ANATOLIAN HIEROGL" + + "YPH A184ANATOLIAN HIEROGLYPH A185ANATOLIAN HIEROGLYPH A186ANATOLIAN HIER" + + "OGLYPH A187ANATOLIAN HIEROGLYPH A188ANATOLIAN HIEROGLYPH A189ANATOLIAN H" + + "IEROGLYPH A190ANATOLIAN HIEROGLYPH A191ANATOLIAN HIEROGLYPH A192ANATOLIA" + + "N HIEROGLYPH A193ANATOLIAN HIEROGLYPH A194ANATOLIAN HIEROGLYPH A195ANATO" + + "LIAN HIEROGLYPH A196ANATOLIAN HIEROGLYPH A197ANATOLIAN HIEROGLYPH A198AN" + + "ATOLIAN HIEROGLYPH A199ANATOLIAN HIEROGLYPH A200ANATOLIAN HIEROGLYPH A20" + + "1ANATOLIAN HIEROGLYPH A202ANATOLIAN HIEROGLYPH A202AANATOLIAN HIEROGLYPH" + + " A202BANATOLIAN HIEROGLYPH A203ANATOLIAN HIEROGLYPH A204ANATOLIAN HIEROG" + + "LYPH A205ANATOLIAN HIEROGLYPH A206ANATOLIAN HIEROGLYPH A207ANATOLIAN HIE" + + "ROGLYPH A207AANATOLIAN HIEROGLYPH A208ANATOLIAN HIEROGLYPH A209ANATOLIAN" + + " HIEROGLYPH A209AANATOLIAN HIEROGLYPH A210ANATOLIAN HIEROGLYPH A211ANATO" + + "LIAN HIEROGLYPH A212ANATOLIAN HIEROGLYPH A213ANATOLIAN HIEROGLYPH A214AN" + + "ATOLIAN HIEROGLYPH A215ANATOLIAN HIEROGLYPH A215AANATOLIAN HIEROGLYPH A2" + + "16ANATOLIAN HIEROGLYPH A216AANATOLIAN HIEROGLYPH A217ANATOLIAN HIEROGLYP" + + "H A218ANATOLIAN HIEROGLYPH A219ANATOLIAN HIEROGLYPH A220ANATOLIAN HIEROG" + + "LYPH A221ANATOLIAN HIEROGLYPH A222ANATOLIAN HIEROGLYPH A223ANATOLIAN HIE" + + "ROGLYPH A224ANATOLIAN HIEROGLYPH A225ANATOLIAN HIEROGLYPH A226ANATOLIAN " + + "HIEROGLYPH A227ANATOLIAN HIEROGLYPH A227AANATOLIAN HIEROGLYPH A228ANATOL" + + "IAN HIEROGLYPH A229ANATOLIAN HIEROGLYPH A230ANATOLIAN HIEROGLYPH A231ANA" + + "TOLIAN HIEROGLYPH A232ANATOLIAN HIEROGLYPH A233ANATOLIAN HIEROGLYPH A234" + + "ANATOLIAN HIEROGLYPH A235ANATOLIAN HIEROGLYPH A236ANATOLIAN HIEROGLYPH A" + + "237ANATOLIAN HIEROGLYPH A238ANATOLIAN HIEROGLYPH A239ANATOLIAN HIEROGLYP" + + "H A240ANATOLIAN HIEROGLYPH A241ANATOLIAN HIEROGLYPH A242ANATOLIAN HIEROG" + + "LYPH A243ANATOLIAN HIEROGLYPH A244ANATOLIAN HIEROGLYPH A245ANATOLIAN HIE" + + "ROGLYPH A246ANATOLIAN HIEROGLYPH A247ANATOLIAN HIEROGLYPH A248ANATOLIAN " + + "HIEROGLYPH A249ANATOLIAN HIEROGLYPH A250ANATOLIAN HIEROGLYPH A251ANATOLI" + + "AN HIEROGLYPH A252ANATOLIAN HIEROGLYPH A253ANATOLIAN HIEROGLYPH A254ANAT" + + "OLIAN HIEROGLYPH A255ANATOLIAN HIEROGLYPH A256ANATOLIAN HIEROGLYPH A257A" + + "NATOLIAN HIEROGLYPH A258ANATOLIAN HIEROGLYPH A259ANATOLIAN HIEROGLYPH A2" + + "60ANATOLIAN HIEROGLYPH A261ANATOLIAN HIEROGLYPH A262ANATOLIAN HIEROGLYPH" + + " A263ANATOLIAN HIEROGLYPH A264ANATOLIAN HIEROGLYPH A265ANATOLIAN HIEROGL" + + "YPH A266ANATOLIAN HIEROGLYPH A267ANATOLIAN HIEROGLYPH A267AANATOLIAN HIE" + + "ROGLYPH A268ANATOLIAN HIEROGLYPH A269ANATOLIAN HIEROGLYPH A270ANATOLIAN " + + "HIEROGLYPH A271ANATOLIAN HIEROGLYPH A272ANATOLIAN HIEROGLYPH A273ANATOLI" + + "AN HIEROGLYPH A274ANATOLIAN HIEROGLYPH A275ANATOLIAN HIEROGLYPH A276ANAT" + + "OLIAN HIEROGLYPH A277ANATOLIAN HIEROGLYPH A278ANATOLIAN HIEROGLYPH A279A" + + "NATOLIAN HIEROGLYPH A280ANATOLIAN HIEROGLYPH A281ANATOLIAN HIEROGLYPH A2" + + "82ANATOLIAN HIEROGLYPH A283ANATOLIAN HIEROGLYPH A284ANATOLIAN HIEROGLYPH" + + " A285ANATOLIAN HIEROGLYPH A286ANATOLIAN HIEROGLYPH A287ANATOLIAN HIEROGL" + + "YPH A288ANATOLIAN HIEROGLYPH A289ANATOLIAN HIEROGLYPH A289AANATOLIAN HIE" + + "ROGLYPH A290ANATOLIAN HIEROGLYPH A291ANATOLIAN HIEROGLYPH A292ANATOLIAN " + + "HIEROGLYPH A293ANATOLIAN HIEROGLYPH A294ANATOLIAN HIEROGLYPH A294AANATOL" + + "IAN HIEROGLYPH A295ANATOLIAN HIEROGLYPH A296ANATOLIAN HIEROGLYPH A297ANA" + + "TOLIAN HIEROGLYPH A298ANATOLIAN HIEROGLYPH A299ANATOLIAN HIEROGLYPH A299" + + "AANATOLIAN HIEROGLYPH A300ANATOLIAN HIEROGLYPH A301ANATOLIAN HIEROGLYPH " + + "A302ANATOLIAN HIEROGLYPH A303ANATOLIAN HIEROGLYPH A304ANATOLIAN HIEROGLY" + + "PH A305ANATOLIAN HIEROGLYPH A306ANATOLIAN HIEROGLYPH A307ANATOLIAN HIERO" + + "GLYPH A308ANATOLIAN HIEROGLYPH A309ANATOLIAN HIEROGLYPH A309AANATOLIAN H" + + "IEROGLYPH A310ANATOLIAN HIEROGLYPH A311ANATOLIAN HIEROGLYPH A312ANATOLIA" + + "N HIEROGLYPH A313ANATOLIAN HIEROGLYPH A314ANATOLIAN HIEROGLYPH A315ANATO" + + "LIAN HIEROGLYPH A316ANATOLIAN HIEROGLYPH A317ANATOLIAN HIEROGLYPH A318AN" + + "ATOLIAN HIEROGLYPH A319ANATOLIAN HIEROGLYPH A320ANATOLIAN HIEROGLYPH A32" + + "1ANATOLIAN HIEROGLYPH A322ANATOLIAN HIEROGLYPH A323ANATOLIAN HIEROGLYPH " + + "A324ANATOLIAN HIEROGLYPH A325ANATOLIAN HIEROGLYPH A326ANATOLIAN HIEROGLY" + + "PH A327ANATOLIAN HIEROGLYPH A328ANATOLIAN HIEROGLYPH A329ANATOLIAN HIERO") + ("" + + "GLYPH A329AANATOLIAN HIEROGLYPH A330ANATOLIAN HIEROGLYPH A331ANATOLIAN H" + + "IEROGLYPH A332AANATOLIAN HIEROGLYPH A332BANATOLIAN HIEROGLYPH A332CANATO" + + "LIAN HIEROGLYPH A333ANATOLIAN HIEROGLYPH A334ANATOLIAN HIEROGLYPH A335AN" + + "ATOLIAN HIEROGLYPH A336ANATOLIAN HIEROGLYPH A336AANATOLIAN HIEROGLYPH A3" + + "36BANATOLIAN HIEROGLYPH A336CANATOLIAN HIEROGLYPH A337ANATOLIAN HIEROGLY" + + "PH A338ANATOLIAN HIEROGLYPH A339ANATOLIAN HIEROGLYPH A340ANATOLIAN HIERO" + + "GLYPH A341ANATOLIAN HIEROGLYPH A342ANATOLIAN HIEROGLYPH A343ANATOLIAN HI" + + "EROGLYPH A344ANATOLIAN HIEROGLYPH A345ANATOLIAN HIEROGLYPH A346ANATOLIAN" + + " HIEROGLYPH A347ANATOLIAN HIEROGLYPH A348ANATOLIAN HIEROGLYPH A349ANATOL" + + "IAN HIEROGLYPH A350ANATOLIAN HIEROGLYPH A351ANATOLIAN HIEROGLYPH A352ANA" + + "TOLIAN HIEROGLYPH A353ANATOLIAN HIEROGLYPH A354ANATOLIAN HIEROGLYPH A355" + + "ANATOLIAN HIEROGLYPH A356ANATOLIAN HIEROGLYPH A357ANATOLIAN HIEROGLYPH A" + + "358ANATOLIAN HIEROGLYPH A359ANATOLIAN HIEROGLYPH A359AANATOLIAN HIEROGLY" + + "PH A360ANATOLIAN HIEROGLYPH A361ANATOLIAN HIEROGLYPH A362ANATOLIAN HIERO" + + "GLYPH A363ANATOLIAN HIEROGLYPH A364ANATOLIAN HIEROGLYPH A364AANATOLIAN H" + + "IEROGLYPH A365ANATOLIAN HIEROGLYPH A366ANATOLIAN HIEROGLYPH A367ANATOLIA" + + "N HIEROGLYPH A368ANATOLIAN HIEROGLYPH A368AANATOLIAN HIEROGLYPH A369ANAT" + + "OLIAN HIEROGLYPH A370ANATOLIAN HIEROGLYPH A371ANATOLIAN HIEROGLYPH A371A" + + "ANATOLIAN HIEROGLYPH A372ANATOLIAN HIEROGLYPH A373ANATOLIAN HIEROGLYPH A" + + "374ANATOLIAN HIEROGLYPH A375ANATOLIAN HIEROGLYPH A376ANATOLIAN HIEROGLYP" + + "H A377ANATOLIAN HIEROGLYPH A378ANATOLIAN HIEROGLYPH A379ANATOLIAN HIEROG" + + "LYPH A380ANATOLIAN HIEROGLYPH A381ANATOLIAN HIEROGLYPH A381AANATOLIAN HI" + + "EROGLYPH A382ANATOLIAN HIEROGLYPH A383 RA OR RIANATOLIAN HIEROGLYPH A383" + + "AANATOLIAN HIEROGLYPH A384ANATOLIAN HIEROGLYPH A385ANATOLIAN HIEROGLYPH " + + "A386ANATOLIAN HIEROGLYPH A386AANATOLIAN HIEROGLYPH A387ANATOLIAN HIEROGL" + + "YPH A388ANATOLIAN HIEROGLYPH A389ANATOLIAN HIEROGLYPH A390ANATOLIAN HIER" + + "OGLYPH A391ANATOLIAN HIEROGLYPH A392ANATOLIAN HIEROGLYPH A393 EIGHTANATO" + + "LIAN HIEROGLYPH A394ANATOLIAN HIEROGLYPH A395ANATOLIAN HIEROGLYPH A396AN" + + "ATOLIAN HIEROGLYPH A397ANATOLIAN HIEROGLYPH A398ANATOLIAN HIEROGLYPH A39" + + "9ANATOLIAN HIEROGLYPH A400ANATOLIAN HIEROGLYPH A401ANATOLIAN HIEROGLYPH " + + "A402ANATOLIAN HIEROGLYPH A403ANATOLIAN HIEROGLYPH A404ANATOLIAN HIEROGLY" + + "PH A405ANATOLIAN HIEROGLYPH A406ANATOLIAN HIEROGLYPH A407ANATOLIAN HIERO" + + "GLYPH A408ANATOLIAN HIEROGLYPH A409ANATOLIAN HIEROGLYPH A410 BEGIN LOGOG" + + "RAM MARKANATOLIAN HIEROGLYPH A410A END LOGOGRAM MARKANATOLIAN HIEROGLYPH" + + " A411ANATOLIAN HIEROGLYPH A412ANATOLIAN HIEROGLYPH A413ANATOLIAN HIEROGL" + + "YPH A414ANATOLIAN HIEROGLYPH A415ANATOLIAN HIEROGLYPH A416ANATOLIAN HIER" + + "OGLYPH A417ANATOLIAN HIEROGLYPH A418ANATOLIAN HIEROGLYPH A419ANATOLIAN H" + + "IEROGLYPH A420ANATOLIAN HIEROGLYPH A421ANATOLIAN HIEROGLYPH A422ANATOLIA" + + "N HIEROGLYPH A423ANATOLIAN HIEROGLYPH A424ANATOLIAN HIEROGLYPH A425ANATO" + + "LIAN HIEROGLYPH A426ANATOLIAN HIEROGLYPH A427ANATOLIAN HIEROGLYPH A428AN" + + "ATOLIAN HIEROGLYPH A429ANATOLIAN HIEROGLYPH A430ANATOLIAN HIEROGLYPH A43" + + "1ANATOLIAN HIEROGLYPH A432ANATOLIAN HIEROGLYPH A433ANATOLIAN HIEROGLYPH " + + "A434ANATOLIAN HIEROGLYPH A435ANATOLIAN HIEROGLYPH A436ANATOLIAN HIEROGLY" + + "PH A437ANATOLIAN HIEROGLYPH A438ANATOLIAN HIEROGLYPH A439ANATOLIAN HIERO" + + "GLYPH A440ANATOLIAN HIEROGLYPH A441ANATOLIAN HIEROGLYPH A442ANATOLIAN HI" + + "EROGLYPH A443ANATOLIAN HIEROGLYPH A444ANATOLIAN HIEROGLYPH A445ANATOLIAN" + + " HIEROGLYPH A446ANATOLIAN HIEROGLYPH A447ANATOLIAN HIEROGLYPH A448ANATOL" + + "IAN HIEROGLYPH A449ANATOLIAN HIEROGLYPH A450ANATOLIAN HIEROGLYPH A450AAN" + + "ATOLIAN HIEROGLYPH A451ANATOLIAN HIEROGLYPH A452ANATOLIAN HIEROGLYPH A45" + + "3ANATOLIAN HIEROGLYPH A454ANATOLIAN HIEROGLYPH A455ANATOLIAN HIEROGLYPH " + + "A456ANATOLIAN HIEROGLYPH A457ANATOLIAN HIEROGLYPH A457AANATOLIAN HIEROGL" + + "YPH A458ANATOLIAN HIEROGLYPH A459ANATOLIAN HIEROGLYPH A460ANATOLIAN HIER" + + "OGLYPH A461ANATOLIAN HIEROGLYPH A462ANATOLIAN HIEROGLYPH A463ANATOLIAN H" + + "IEROGLYPH A464ANATOLIAN HIEROGLYPH A465ANATOLIAN HIEROGLYPH A466ANATOLIA" + + "N HIEROGLYPH A467ANATOLIAN HIEROGLYPH A468ANATOLIAN HIEROGLYPH A469ANATO" + + "LIAN HIEROGLYPH A470ANATOLIAN HIEROGLYPH A471ANATOLIAN HIEROGLYPH A472AN" + + "ATOLIAN HIEROGLYPH A473ANATOLIAN HIEROGLYPH A474ANATOLIAN HIEROGLYPH A47" + + "5ANATOLIAN HIEROGLYPH A476ANATOLIAN HIEROGLYPH A477ANATOLIAN HIEROGLYPH " + + "A478ANATOLIAN HIEROGLYPH A479ANATOLIAN HIEROGLYPH A480ANATOLIAN HIEROGLY" + + "PH A481ANATOLIAN HIEROGLYPH A482ANATOLIAN HIEROGLYPH A483ANATOLIAN HIERO" + + "GLYPH A484ANATOLIAN HIEROGLYPH A485ANATOLIAN HIEROGLYPH A486ANATOLIAN HI" + + "EROGLYPH A487ANATOLIAN HIEROGLYPH A488ANATOLIAN HIEROGLYPH A489ANATOLIAN" + + " HIEROGLYPH A490ANATOLIAN HIEROGLYPH A491ANATOLIAN HIEROGLYPH A492ANATOL" + + "IAN HIEROGLYPH A493ANATOLIAN HIEROGLYPH A494ANATOLIAN HIEROGLYPH A495ANA") + ("" + + "TOLIAN HIEROGLYPH A496ANATOLIAN HIEROGLYPH A497ANATOLIAN HIEROGLYPH A501" + + "ANATOLIAN HIEROGLYPH A502ANATOLIAN HIEROGLYPH A503ANATOLIAN HIEROGLYPH A" + + "504ANATOLIAN HIEROGLYPH A505ANATOLIAN HIEROGLYPH A506ANATOLIAN HIEROGLYP" + + "H A507ANATOLIAN HIEROGLYPH A508ANATOLIAN HIEROGLYPH A509ANATOLIAN HIEROG" + + "LYPH A510ANATOLIAN HIEROGLYPH A511ANATOLIAN HIEROGLYPH A512ANATOLIAN HIE" + + "ROGLYPH A513ANATOLIAN HIEROGLYPH A514ANATOLIAN HIEROGLYPH A515ANATOLIAN " + + "HIEROGLYPH A516ANATOLIAN HIEROGLYPH A517ANATOLIAN HIEROGLYPH A518ANATOLI" + + "AN HIEROGLYPH A519ANATOLIAN HIEROGLYPH A520ANATOLIAN HIEROGLYPH A521ANAT" + + "OLIAN HIEROGLYPH A522ANATOLIAN HIEROGLYPH A523ANATOLIAN HIEROGLYPH A524A" + + "NATOLIAN HIEROGLYPH A525ANATOLIAN HIEROGLYPH A526ANATOLIAN HIEROGLYPH A5" + + "27ANATOLIAN HIEROGLYPH A528ANATOLIAN HIEROGLYPH A529ANATOLIAN HIEROGLYPH" + + " A530BAMUM LETTER PHASE-A NGKUE MFONBAMUM LETTER PHASE-A GBIEE FONBAMUM " + + "LETTER PHASE-A PON MFON PIPAEMGBIEEBAMUM LETTER PHASE-A PON MFON PIPAEMB" + + "ABAMUM LETTER PHASE-A NAA MFONBAMUM LETTER PHASE-A SHUENSHUETBAMUM LETTE" + + "R PHASE-A TITA MFONBAMUM LETTER PHASE-A NZA MFONBAMUM LETTER PHASE-A SHI" + + "NDA PA NJIBAMUM LETTER PHASE-A PON PA NJI PIPAEMGBIEEBAMUM LETTER PHASE-" + + "A PON PA NJI PIPAEMBABAMUM LETTER PHASE-A MAEMBGBIEEBAMUM LETTER PHASE-A" + + " TU MAEMBABAMUM LETTER PHASE-A NGANGUBAMUM LETTER PHASE-A MAEMVEUXBAMUM " + + "LETTER PHASE-A MANSUAEBAMUM LETTER PHASE-A MVEUAENGAMBAMUM LETTER PHASE-" + + "A SEUNYAMBAMUM LETTER PHASE-A NTOQPENBAMUM LETTER PHASE-A KEUKEUTNDABAMU" + + "M LETTER PHASE-A NKINDIBAMUM LETTER PHASE-A SUUBAMUM LETTER PHASE-A NGKU" + + "ENZEUMBAMUM LETTER PHASE-A LAPAQBAMUM LETTER PHASE-A LET KUTBAMUM LETTER" + + " PHASE-A NTAP MFAABAMUM LETTER PHASE-A MAEKEUPBAMUM LETTER PHASE-A PASHA" + + "EBAMUM LETTER PHASE-A GHEUAERAEBAMUM LETTER PHASE-A PAMSHAEBAMUM LETTER " + + "PHASE-A MON NGGEUAETBAMUM LETTER PHASE-A NZUN MEUTBAMUM LETTER PHASE-A U" + + " YUQ NAEBAMUM LETTER PHASE-A GHEUAEGHEUAEBAMUM LETTER PHASE-A NTAP NTAAB" + + "AMUM LETTER PHASE-A SISABAMUM LETTER PHASE-A MGBASABAMUM LETTER PHASE-A " + + "MEUNJOMNDEUQBAMUM LETTER PHASE-A MOOMPUQBAMUM LETTER PHASE-A KAFABAMUM L" + + "ETTER PHASE-A PA LEERAEWABAMUM LETTER PHASE-A NDA LEERAEWABAMUM LETTER P" + + "HASE-A PETBAMUM LETTER PHASE-A MAEMKPENBAMUM LETTER PHASE-A NIKABAMUM LE" + + "TTER PHASE-A PUPBAMUM LETTER PHASE-A TUAEPBAMUM LETTER PHASE-A LUAEPBAMU" + + "M LETTER PHASE-A SONJAMBAMUM LETTER PHASE-A TEUTEUWENBAMUM LETTER PHASE-" + + "A MAENYIBAMUM LETTER PHASE-A KETBAMUM LETTER PHASE-A NDAANGGEUAETBAMUM L" + + "ETTER PHASE-A KUOQBAMUM LETTER PHASE-A MOOMEUTBAMUM LETTER PHASE-A SHUMB" + + "AMUM LETTER PHASE-A LOMMAEBAMUM LETTER PHASE-A FIRIBAMUM LETTER PHASE-A " + + "ROMBAMUM LETTER PHASE-A KPOQBAMUM LETTER PHASE-A SOQBAMUM LETTER PHASE-A" + + " MAP PIEETBAMUM LETTER PHASE-A SHIRAEBAMUM LETTER PHASE-A NTAPBAMUM LETT" + + "ER PHASE-A SHOQ NSHUT YUMBAMUM LETTER PHASE-A NYIT MONGKEUAEQBAMUM LETTE" + + "R PHASE-A PAARAEBAMUM LETTER PHASE-A NKAARAEBAMUM LETTER PHASE-A UNKNOWN" + + "BAMUM LETTER PHASE-A NGGENBAMUM LETTER PHASE-A MAESIBAMUM LETTER PHASE-A" + + " NJAMBAMUM LETTER PHASE-A MBANYIBAMUM LETTER PHASE-A NYETBAMUM LETTER PH" + + "ASE-A TEUAENBAMUM LETTER PHASE-A SOTBAMUM LETTER PHASE-A PAAMBAMUM LETTE" + + "R PHASE-A NSHIEEBAMUM LETTER PHASE-A MAEMBAMUM LETTER PHASE-A NYIBAMUM L" + + "ETTER PHASE-A KAQBAMUM LETTER PHASE-A NSHABAMUM LETTER PHASE-A VEEBAMUM " + + "LETTER PHASE-A LUBAMUM LETTER PHASE-A NENBAMUM LETTER PHASE-A NAQBAMUM L" + + "ETTER PHASE-A MBAQBAMUM LETTER PHASE-B NSHUETBAMUM LETTER PHASE-B TU MAE" + + "MGBIEEBAMUM LETTER PHASE-B SIEEBAMUM LETTER PHASE-B SET TUBAMUM LETTER P" + + "HASE-B LOM NTEUMBAMUM LETTER PHASE-B MBA MAELEEBAMUM LETTER PHASE-B KIEE" + + "MBAMUM LETTER PHASE-B YEURAEBAMUM LETTER PHASE-B MBAARAEBAMUM LETTER PHA" + + "SE-B KAMBAMUM LETTER PHASE-B PEESHIBAMUM LETTER PHASE-B YAFU LEERAEWABAM" + + "UM LETTER PHASE-B LAM NSHUT NYAMBAMUM LETTER PHASE-B NTIEE SHEUOQBAMUM L" + + "ETTER PHASE-B NDU NJAABAMUM LETTER PHASE-B GHEUGHEUAEMBAMUM LETTER PHASE" + + "-B PITBAMUM LETTER PHASE-B TU NSIEEBAMUM LETTER PHASE-B SHET NJAQBAMUM L" + + "ETTER PHASE-B SHEUAEQTUBAMUM LETTER PHASE-B MFON TEUAEQBAMUM LETTER PHAS" + + "E-B MBIT MBAAKETBAMUM LETTER PHASE-B NYI NTEUMBAMUM LETTER PHASE-B KEUPU" + + "QBAMUM LETTER PHASE-B GHEUGHENBAMUM LETTER PHASE-B KEUYEUXBAMUM LETTER P" + + "HASE-B LAANAEBAMUM LETTER PHASE-B PARUMBAMUM LETTER PHASE-B VEUMBAMUM LE" + + "TTER PHASE-B NGKINDI MVOPBAMUM LETTER PHASE-B NGGEU MBUBAMUM LETTER PHAS" + + "E-B WUAETBAMUM LETTER PHASE-B SAKEUAEBAMUM LETTER PHASE-B TAAMBAMUM LETT" + + "ER PHASE-B MEUQBAMUM LETTER PHASE-B NGGUOQBAMUM LETTER PHASE-B NGGUOQ LA" + + "RGEBAMUM LETTER PHASE-B MFIYAQBAMUM LETTER PHASE-B SUEBAMUM LETTER PHASE" + + "-B MBEURIBAMUM LETTER PHASE-B MONTIEENBAMUM LETTER PHASE-B NYAEMAEBAMUM " + + "LETTER PHASE-B PUNGAAMBAMUM LETTER PHASE-B MEUT NGGEETBAMUM LETTER PHASE" + + "-B FEUXBAMUM LETTER PHASE-B MBUOQBAMUM LETTER PHASE-B FEEBAMUM LETTER PH") + ("" + + "ASE-B KEUAEMBAMUM LETTER PHASE-B MA NJEUAENABAMUM LETTER PHASE-B MA NJUQ" + + "ABAMUM LETTER PHASE-B LETBAMUM LETTER PHASE-B NGGAAMBAMUM LETTER PHASE-B" + + " NSENBAMUM LETTER PHASE-B MABAMUM LETTER PHASE-B KIQBAMUM LETTER PHASE-B" + + " NGOMBAMUM LETTER PHASE-C NGKUE MAEMBABAMUM LETTER PHASE-C NZABAMUM LETT" + + "ER PHASE-C YUMBAMUM LETTER PHASE-C WANGKUOQBAMUM LETTER PHASE-C NGGENBAM" + + "UM LETTER PHASE-C NDEUAEREEBAMUM LETTER PHASE-C NGKAQBAMUM LETTER PHASE-" + + "C GHARAEBAMUM LETTER PHASE-C MBEEKEETBAMUM LETTER PHASE-C GBAYIBAMUM LET" + + "TER PHASE-C NYIR MKPARAQ MEUNBAMUM LETTER PHASE-C NTU MBITBAMUM LETTER P" + + "HASE-C MBEUMBAMUM LETTER PHASE-C PIRIEENBAMUM LETTER PHASE-C NDOMBUBAMUM" + + " LETTER PHASE-C MBAA CABBAGE-TREEBAMUM LETTER PHASE-C KEUSHEUAEPBAMUM LE" + + "TTER PHASE-C GHAPBAMUM LETTER PHASE-C KEUKAQBAMUM LETTER PHASE-C YU MUOM" + + "AEBAMUM LETTER PHASE-C NZEUMBAMUM LETTER PHASE-C MBUEBAMUM LETTER PHASE-" + + "C NSEUAENBAMUM LETTER PHASE-C MBITBAMUM LETTER PHASE-C YEUQBAMUM LETTER " + + "PHASE-C KPARAQBAMUM LETTER PHASE-C KAABAMUM LETTER PHASE-C SEUXBAMUM LET" + + "TER PHASE-C NDIDABAMUM LETTER PHASE-C TAASHAEBAMUM LETTER PHASE-C NJUEQB" + + "AMUM LETTER PHASE-C TITA YUEBAMUM LETTER PHASE-C SUAETBAMUM LETTER PHASE" + + "-C NGGUAEN NYAMBAMUM LETTER PHASE-C VEUXBAMUM LETTER PHASE-C NANSANAQBAM" + + "UM LETTER PHASE-C MA KEUAERIBAMUM LETTER PHASE-C NTAABAMUM LETTER PHASE-" + + "C NGGUONBAMUM LETTER PHASE-C LAPBAMUM LETTER PHASE-C MBIRIEENBAMUM LETTE" + + "R PHASE-C MGBASAQBAMUM LETTER PHASE-C NTEUNGBABAMUM LETTER PHASE-C TEUTE" + + "UXBAMUM LETTER PHASE-C NGGUMBAMUM LETTER PHASE-C FUEBAMUM LETTER PHASE-C" + + " NDEUTBAMUM LETTER PHASE-C NSABAMUM LETTER PHASE-C NSHAQBAMUM LETTER PHA" + + "SE-C BUNGBAMUM LETTER PHASE-C VEUAEPENBAMUM LETTER PHASE-C MBERAEBAMUM L" + + "ETTER PHASE-C RUBAMUM LETTER PHASE-C NJAEMBAMUM LETTER PHASE-C LAMBAMUM " + + "LETTER PHASE-C TITUAEPBAMUM LETTER PHASE-C NSUOT NGOMBAMUM LETTER PHASE-" + + "C NJEEEEBAMUM LETTER PHASE-C KETBAMUM LETTER PHASE-C NGGUBAMUM LETTER PH" + + "ASE-C MAESIBAMUM LETTER PHASE-C MBUAEMBAMUM LETTER PHASE-C LUBAMUM LETTE" + + "R PHASE-C KUTBAMUM LETTER PHASE-C NJAMBAMUM LETTER PHASE-C NGOMBAMUM LET" + + "TER PHASE-C WUPBAMUM LETTER PHASE-C NGGUEETBAMUM LETTER PHASE-C NSOMBAMU" + + "M LETTER PHASE-C NTENBAMUM LETTER PHASE-C KUOP NKAARAEBAMUM LETTER PHASE" + + "-C NSUNBAMUM LETTER PHASE-C NDAMBAMUM LETTER PHASE-C MA NSIEEBAMUM LETTE" + + "R PHASE-C YAABAMUM LETTER PHASE-C NDAPBAMUM LETTER PHASE-C SHUEQBAMUM LE" + + "TTER PHASE-C SETFONBAMUM LETTER PHASE-C MBIBAMUM LETTER PHASE-C MAEMBABA" + + "MUM LETTER PHASE-C MBANYIBAMUM LETTER PHASE-C KEUSEUXBAMUM LETTER PHASE-" + + "C MBEUXBAMUM LETTER PHASE-C KEUMBAMUM LETTER PHASE-C MBAA PICKETBAMUM LE" + + "TTER PHASE-C YUWOQBAMUM LETTER PHASE-C NJEUXBAMUM LETTER PHASE-C MIEEBAM" + + "UM LETTER PHASE-C MUAEBAMUM LETTER PHASE-C SHIQBAMUM LETTER PHASE-C KEN " + + "LAWBAMUM LETTER PHASE-C KEN FATIGUEBAMUM LETTER PHASE-C NGAQBAMUM LETTER" + + " PHASE-C NAQBAMUM LETTER PHASE-C LIQBAMUM LETTER PHASE-C PINBAMUM LETTER" + + " PHASE-C PENBAMUM LETTER PHASE-C TETBAMUM LETTER PHASE-D MBUOBAMUM LETTE" + + "R PHASE-D WAPBAMUM LETTER PHASE-D NJIBAMUM LETTER PHASE-D MFONBAMUM LETT" + + "ER PHASE-D NJIEEBAMUM LETTER PHASE-D LIEEBAMUM LETTER PHASE-D NJEUTBAMUM" + + " LETTER PHASE-D NSHEEBAMUM LETTER PHASE-D NGGAAMAEBAMUM LETTER PHASE-D N" + + "YAMBAMUM LETTER PHASE-D WUAENBAMUM LETTER PHASE-D NGKUNBAMUM LETTER PHAS" + + "E-D SHEEBAMUM LETTER PHASE-D NGKAPBAMUM LETTER PHASE-D KEUAETMEUNBAMUM L" + + "ETTER PHASE-D TEUTBAMUM LETTER PHASE-D SHEUAEBAMUM LETTER PHASE-D NJAPBA" + + "MUM LETTER PHASE-D SUEBAMUM LETTER PHASE-D KETBAMUM LETTER PHASE-D YAEMM" + + "AEBAMUM LETTER PHASE-D KUOMBAMUM LETTER PHASE-D SAPBAMUM LETTER PHASE-D " + + "MFEUTBAMUM LETTER PHASE-D NDEUXBAMUM LETTER PHASE-D MALEERIBAMUM LETTER " + + "PHASE-D MEUTBAMUM LETTER PHASE-D SEUAEQBAMUM LETTER PHASE-D YENBAMUM LET" + + "TER PHASE-D NJEUAEMBAMUM LETTER PHASE-D KEUOT MBUAEBAMUM LETTER PHASE-D " + + "NGKEURIBAMUM LETTER PHASE-D TUBAMUM LETTER PHASE-D GHAABAMUM LETTER PHAS" + + "E-D NGKYEEBAMUM LETTER PHASE-D FEUFEUAETBAMUM LETTER PHASE-D NDEEBAMUM L" + + "ETTER PHASE-D MGBOFUMBAMUM LETTER PHASE-D LEUAEPBAMUM LETTER PHASE-D NDO" + + "NBAMUM LETTER PHASE-D MONIBAMUM LETTER PHASE-D MGBEUNBAMUM LETTER PHASE-" + + "D PUUTBAMUM LETTER PHASE-D MGBIEEBAMUM LETTER PHASE-D MFOBAMUM LETTER PH" + + "ASE-D LUMBAMUM LETTER PHASE-D NSIEEPBAMUM LETTER PHASE-D MBAABAMUM LETTE" + + "R PHASE-D KWAETBAMUM LETTER PHASE-D NYETBAMUM LETTER PHASE-D TEUAENBAMUM" + + " LETTER PHASE-D SOTBAMUM LETTER PHASE-D YUWOQBAMUM LETTER PHASE-D KEUMBA" + + "MUM LETTER PHASE-D RAEMBAMUM LETTER PHASE-D TEEEEBAMUM LETTER PHASE-D NG" + + "KEUAEQBAMUM LETTER PHASE-D MFEUAEBAMUM LETTER PHASE-D NSIEETBAMUM LETTER" + + " PHASE-D KEUPBAMUM LETTER PHASE-D PIPBAMUM LETTER PHASE-D PEUTAEBAMUM LE" + + "TTER PHASE-D NYUEBAMUM LETTER PHASE-D LETBAMUM LETTER PHASE-D NGGAAMBAMU" + + "M LETTER PHASE-D MFIEEBAMUM LETTER PHASE-D NGGWAENBAMUM LETTER PHASE-D Y") + ("" + + "UOMBAMUM LETTER PHASE-D PAPBAMUM LETTER PHASE-D YUOPBAMUM LETTER PHASE-D" + + " NDAMBAMUM LETTER PHASE-D NTEUMBAMUM LETTER PHASE-D SUAEBAMUM LETTER PHA" + + "SE-D KUNBAMUM LETTER PHASE-D NGGEUXBAMUM LETTER PHASE-D NGKIEEBAMUM LETT" + + "ER PHASE-D TUOTBAMUM LETTER PHASE-D MEUNBAMUM LETTER PHASE-D KUQBAMUM LE" + + "TTER PHASE-D NSUMBAMUM LETTER PHASE-D TEUNBAMUM LETTER PHASE-D MAENJETBA" + + "MUM LETTER PHASE-D NGGAPBAMUM LETTER PHASE-D LEUMBAMUM LETTER PHASE-D NG" + + "GUOMBAMUM LETTER PHASE-D NSHUTBAMUM LETTER PHASE-D NJUEQBAMUM LETTER PHA" + + "SE-D GHEUAEBAMUM LETTER PHASE-D KUBAMUM LETTER PHASE-D REN OLDBAMUM LETT" + + "ER PHASE-D TAEBAMUM LETTER PHASE-D TOQBAMUM LETTER PHASE-D NYIBAMUM LETT" + + "ER PHASE-D RIIBAMUM LETTER PHASE-D LEEEEBAMUM LETTER PHASE-D MEEEEBAMUM " + + "LETTER PHASE-D MBAMUM LETTER PHASE-D SUUBAMUM LETTER PHASE-D MUBAMUM LET" + + "TER PHASE-D SHIIBAMUM LETTER PHASE-D SHEUXBAMUM LETTER PHASE-D KYEEBAMUM" + + " LETTER PHASE-D NUBAMUM LETTER PHASE-D SHUBAMUM LETTER PHASE-D NTEEBAMUM" + + " LETTER PHASE-D PEEBAMUM LETTER PHASE-D NIBAMUM LETTER PHASE-D SHOQBAMUM" + + " LETTER PHASE-D PUQBAMUM LETTER PHASE-D MVOPBAMUM LETTER PHASE-D LOQBAMU" + + "M LETTER PHASE-D REN MUCHBAMUM LETTER PHASE-D TIBAMUM LETTER PHASE-D NTU" + + "UBAMUM LETTER PHASE-D MBAA SEVENBAMUM LETTER PHASE-D SAQBAMUM LETTER PHA" + + "SE-D FAABAMUM LETTER PHASE-E NDAPBAMUM LETTER PHASE-E TOONBAMUM LETTER P" + + "HASE-E MBEUMBAMUM LETTER PHASE-E LAPBAMUM LETTER PHASE-E VOMBAMUM LETTER" + + " PHASE-E LOONBAMUM LETTER PHASE-E PAABAMUM LETTER PHASE-E SOMBAMUM LETTE" + + "R PHASE-E RAQBAMUM LETTER PHASE-E NSHUOPBAMUM LETTER PHASE-E NDUNBAMUM L" + + "ETTER PHASE-E PUAEBAMUM LETTER PHASE-E TAMBAMUM LETTER PHASE-E NGKABAMUM" + + " LETTER PHASE-E KPEUXBAMUM LETTER PHASE-E WUOBAMUM LETTER PHASE-E SEEBAM" + + "UM LETTER PHASE-E NGGEUAETBAMUM LETTER PHASE-E PAAMBAMUM LETTER PHASE-E " + + "TOOBAMUM LETTER PHASE-E KUOPBAMUM LETTER PHASE-E LOMBAMUM LETTER PHASE-E" + + " NSHIEEBAMUM LETTER PHASE-E NGOPBAMUM LETTER PHASE-E MAEMBAMUM LETTER PH" + + "ASE-E NGKEUXBAMUM LETTER PHASE-E NGOQBAMUM LETTER PHASE-E NSHUEBAMUM LET" + + "TER PHASE-E RIMGBABAMUM LETTER PHASE-E NJEUXBAMUM LETTER PHASE-E PEEMBAM" + + "UM LETTER PHASE-E SAABAMUM LETTER PHASE-E NGGURAEBAMUM LETTER PHASE-E MG" + + "BABAMUM LETTER PHASE-E GHEUXBAMUM LETTER PHASE-E NGKEUAEMBAMUM LETTER PH" + + "ASE-E NJAEMLIBAMUM LETTER PHASE-E MAPBAMUM LETTER PHASE-E LOOTBAMUM LETT" + + "ER PHASE-E NGGEEEEBAMUM LETTER PHASE-E NDIQBAMUM LETTER PHASE-E TAEN NTE" + + "UMBAMUM LETTER PHASE-E SETBAMUM LETTER PHASE-E PUMBAMUM LETTER PHASE-E N" + + "DAA SOFTNESSBAMUM LETTER PHASE-E NGGUAESHAE NYAMBAMUM LETTER PHASE-E YIE" + + "EBAMUM LETTER PHASE-E GHEUNBAMUM LETTER PHASE-E TUAEBAMUM LETTER PHASE-E" + + " YEUAEBAMUM LETTER PHASE-E POBAMUM LETTER PHASE-E TUMAEBAMUM LETTER PHAS" + + "E-E KEUAEBAMUM LETTER PHASE-E SUAENBAMUM LETTER PHASE-E TEUAEQBAMUM LETT" + + "ER PHASE-E VEUAEBAMUM LETTER PHASE-E WEUXBAMUM LETTER PHASE-E LAAMBAMUM " + + "LETTER PHASE-E PUBAMUM LETTER PHASE-E TAAQBAMUM LETTER PHASE-E GHAAMAEBA" + + "MUM LETTER PHASE-E NGEUREUTBAMUM LETTER PHASE-E SHEUAEQBAMUM LETTER PHAS" + + "E-E MGBENBAMUM LETTER PHASE-E MBEEBAMUM LETTER PHASE-E NZAQBAMUM LETTER " + + "PHASE-E NKOMBAMUM LETTER PHASE-E GBETBAMUM LETTER PHASE-E TUMBAMUM LETTE" + + "R PHASE-E KUETBAMUM LETTER PHASE-E YAPBAMUM LETTER PHASE-E NYI CLEAVERBA" + + "MUM LETTER PHASE-E YITBAMUM LETTER PHASE-E MFEUQBAMUM LETTER PHASE-E NDI" + + "AQBAMUM LETTER PHASE-E PIEEQBAMUM LETTER PHASE-E YUEQBAMUM LETTER PHASE-" + + "E LEUAEMBAMUM LETTER PHASE-E FUEBAMUM LETTER PHASE-E GBEUXBAMUM LETTER P" + + "HASE-E NGKUPBAMUM LETTER PHASE-E KETBAMUM LETTER PHASE-E MAEBAMUM LETTER" + + " PHASE-E NGKAAMIBAMUM LETTER PHASE-E GHETBAMUM LETTER PHASE-E FABAMUM LE" + + "TTER PHASE-E NTUMBAMUM LETTER PHASE-E PEUTBAMUM LETTER PHASE-E YEUMBAMUM" + + " LETTER PHASE-E NGGEUAEBAMUM LETTER PHASE-E NYI BETWEENBAMUM LETTER PHAS" + + "E-E NZUQBAMUM LETTER PHASE-E POONBAMUM LETTER PHASE-E MIEEBAMUM LETTER P" + + "HASE-E FUETBAMUM LETTER PHASE-E NAEBAMUM LETTER PHASE-E MUAEBAMUM LETTER" + + " PHASE-E GHEUAEBAMUM LETTER PHASE-E FU IBAMUM LETTER PHASE-E MVIBAMUM LE" + + "TTER PHASE-E PUAQBAMUM LETTER PHASE-E NGKUMBAMUM LETTER PHASE-E KUTBAMUM" + + " LETTER PHASE-E PIETBAMUM LETTER PHASE-E NTAPBAMUM LETTER PHASE-E YEUAET" + + "BAMUM LETTER PHASE-E NGGUPBAMUM LETTER PHASE-E PA PEOPLEBAMUM LETTER PHA" + + "SE-E FU CALLBAMUM LETTER PHASE-E FOMBAMUM LETTER PHASE-E NJEEBAMUM LETTE" + + "R PHASE-E ABAMUM LETTER PHASE-E TOQBAMUM LETTER PHASE-E OBAMUM LETTER PH" + + "ASE-E IBAMUM LETTER PHASE-E LAQBAMUM LETTER PHASE-E PA PLURALBAMUM LETTE" + + "R PHASE-E TAABAMUM LETTER PHASE-E TAQBAMUM LETTER PHASE-E NDAA MY HOUSEB" + + "AMUM LETTER PHASE-E SHIQBAMUM LETTER PHASE-E YEUXBAMUM LETTER PHASE-E NG" + + "UAEBAMUM LETTER PHASE-E YUAENBAMUM LETTER PHASE-E YOQ SWIMMINGBAMUM LETT" + + "ER PHASE-E YOQ COVERBAMUM LETTER PHASE-E YUQBAMUM LETTER PHASE-E YUNBAMU" + + "M LETTER PHASE-E KEUXBAMUM LETTER PHASE-E PEUXBAMUM LETTER PHASE-E NJEE ") + ("" + + "EPOCHBAMUM LETTER PHASE-E PUEBAMUM LETTER PHASE-E WUEBAMUM LETTER PHASE-" + + "E FEEBAMUM LETTER PHASE-E VEEBAMUM LETTER PHASE-E LUBAMUM LETTER PHASE-E" + + " MIBAMUM LETTER PHASE-E REUXBAMUM LETTER PHASE-E RAEBAMUM LETTER PHASE-E" + + " NGUAETBAMUM LETTER PHASE-E NGABAMUM LETTER PHASE-E SHOBAMUM LETTER PHAS" + + "E-E SHOQBAMUM LETTER PHASE-E FU REMEDYBAMUM LETTER PHASE-E NABAMUM LETTE" + + "R PHASE-E PIBAMUM LETTER PHASE-E LOQBAMUM LETTER PHASE-E KOBAMUM LETTER " + + "PHASE-E MENBAMUM LETTER PHASE-E MABAMUM LETTER PHASE-E MAQBAMUM LETTER P" + + "HASE-E TEUBAMUM LETTER PHASE-E KIBAMUM LETTER PHASE-E MONBAMUM LETTER PH" + + "ASE-E TENBAMUM LETTER PHASE-E FAQBAMUM LETTER PHASE-E GHOMBAMUM LETTER P" + + "HASE-F KABAMUM LETTER PHASE-F UBAMUM LETTER PHASE-F KUBAMUM LETTER PHASE" + + "-F EEBAMUM LETTER PHASE-F REEBAMUM LETTER PHASE-F TAEBAMUM LETTER PHASE-" + + "F NYIBAMUM LETTER PHASE-F LABAMUM LETTER PHASE-F RIIBAMUM LETTER PHASE-F" + + " RIEEBAMUM LETTER PHASE-F MEEEEBAMUM LETTER PHASE-F TAABAMUM LETTER PHAS" + + "E-F NDAABAMUM LETTER PHASE-F NJAEMBAMUM LETTER PHASE-F MBAMUM LETTER PHA" + + "SE-F SUUBAMUM LETTER PHASE-F SHIIBAMUM LETTER PHASE-F SIBAMUM LETTER PHA" + + "SE-F SEUXBAMUM LETTER PHASE-F KYEEBAMUM LETTER PHASE-F KETBAMUM LETTER P" + + "HASE-F NUAEBAMUM LETTER PHASE-F NUBAMUM LETTER PHASE-F NJUAEBAMUM LETTER" + + " PHASE-F YOQBAMUM LETTER PHASE-F SHUBAMUM LETTER PHASE-F YABAMUM LETTER " + + "PHASE-F NSHABAMUM LETTER PHASE-F PEUXBAMUM LETTER PHASE-F NTEEBAMUM LETT" + + "ER PHASE-F WUEBAMUM LETTER PHASE-F PEEBAMUM LETTER PHASE-F RUBAMUM LETTE" + + "R PHASE-F NIBAMUM LETTER PHASE-F REUXBAMUM LETTER PHASE-F KENBAMUM LETTE" + + "R PHASE-F NGKWAENBAMUM LETTER PHASE-F NGGABAMUM LETTER PHASE-F SHOBAMUM " + + "LETTER PHASE-F PUAEBAMUM LETTER PHASE-F FOMBAMUM LETTER PHASE-F WABAMUM " + + "LETTER PHASE-F LIBAMUM LETTER PHASE-F LOQBAMUM LETTER PHASE-F KOBAMUM LE" + + "TTER PHASE-F MBENBAMUM LETTER PHASE-F RENBAMUM LETTER PHASE-F MABAMUM LE" + + "TTER PHASE-F MOBAMUM LETTER PHASE-F MBAABAMUM LETTER PHASE-F TETBAMUM LE" + + "TTER PHASE-F KPABAMUM LETTER PHASE-F SAMBABAMUM LETTER PHASE-F VUEQMRO L" + + "ETTER TAMRO LETTER NGIMRO LETTER YOMRO LETTER MIMMRO LETTER BAMRO LETTER" + + " DAMRO LETTER AMRO LETTER PHIMRO LETTER KHAIMRO LETTER HAOMRO LETTER DAI" + + "MRO LETTER CHUMRO LETTER KEAAEMRO LETTER OLMRO LETTER MAEMMRO LETTER NIN" + + "MRO LETTER PAMRO LETTER OOMRO LETTER OMRO LETTER ROMRO LETTER SHIMRO LET" + + "TER THEAMRO LETTER EAMRO LETTER WAMRO LETTER EMRO LETTER KOMRO LETTER LA" + + "NMRO LETTER LAMRO LETTER HAIMRO LETTER RIMRO LETTER TEKMRO DIGIT ZEROMRO" + + " DIGIT ONEMRO DIGIT TWOMRO DIGIT THREEMRO DIGIT FOURMRO DIGIT FIVEMRO DI" + + "GIT SIXMRO DIGIT SEVENMRO DIGIT EIGHTMRO DIGIT NINEMRO DANDAMRO DOUBLE D" + + "ANDABASSA VAH LETTER ENNIBASSA VAH LETTER KABASSA VAH LETTER SEBASSA VAH" + + " LETTER FABASSA VAH LETTER MBEBASSA VAH LETTER YIEBASSA VAH LETTER GAHBA" + + "SSA VAH LETTER DHIIBASSA VAH LETTER KPAHBASSA VAH LETTER JOBASSA VAH LET" + + "TER HWAHBASSA VAH LETTER WABASSA VAH LETTER ZOBASSA VAH LETTER GBUBASSA " + + "VAH LETTER DOBASSA VAH LETTER CEBASSA VAH LETTER UWUBASSA VAH LETTER TOB" + + "ASSA VAH LETTER BABASSA VAH LETTER VUBASSA VAH LETTER YEINBASSA VAH LETT" + + "ER PABASSA VAH LETTER WADDABASSA VAH LETTER ABASSA VAH LETTER OBASSA VAH" + + " LETTER OOBASSA VAH LETTER UBASSA VAH LETTER EEBASSA VAH LETTER EBASSA V" + + "AH LETTER IBASSA VAH COMBINING HIGH TONEBASSA VAH COMBINING LOW TONEBASS" + + "A VAH COMBINING MID TONEBASSA VAH COMBINING LOW-MID TONEBASSA VAH COMBIN" + + "ING HIGH-LOW TONEBASSA VAH FULL STOPPAHAWH HMONG VOWEL KEEBPAHAWH HMONG " + + "VOWEL KEEVPAHAWH HMONG VOWEL KIBPAHAWH HMONG VOWEL KIVPAHAWH HMONG VOWEL" + + " KAUBPAHAWH HMONG VOWEL KAUVPAHAWH HMONG VOWEL KUBPAHAWH HMONG VOWEL KUV" + + "PAHAWH HMONG VOWEL KEBPAHAWH HMONG VOWEL KEVPAHAWH HMONG VOWEL KAIBPAHAW" + + "H HMONG VOWEL KAIVPAHAWH HMONG VOWEL KOOBPAHAWH HMONG VOWEL KOOVPAHAWH H" + + "MONG VOWEL KAWBPAHAWH HMONG VOWEL KAWVPAHAWH HMONG VOWEL KUABPAHAWH HMON" + + "G VOWEL KUAVPAHAWH HMONG VOWEL KOBPAHAWH HMONG VOWEL KOVPAHAWH HMONG VOW" + + "EL KIABPAHAWH HMONG VOWEL KIAVPAHAWH HMONG VOWEL KABPAHAWH HMONG VOWEL K" + + "AVPAHAWH HMONG VOWEL KWBPAHAWH HMONG VOWEL KWVPAHAWH HMONG VOWEL KAABPAH" + + "AWH HMONG VOWEL KAAVPAHAWH HMONG CONSONANT VAUPAHAWH HMONG CONSONANT NTS" + + "AUPAHAWH HMONG CONSONANT LAUPAHAWH HMONG CONSONANT HAUPAHAWH HMONG CONSO" + + "NANT NLAUPAHAWH HMONG CONSONANT RAUPAHAWH HMONG CONSONANT NKAUPAHAWH HMO" + + "NG CONSONANT QHAUPAHAWH HMONG CONSONANT YAUPAHAWH HMONG CONSONANT HLAUPA" + + "HAWH HMONG CONSONANT MAUPAHAWH HMONG CONSONANT CHAUPAHAWH HMONG CONSONAN" + + "T NCHAUPAHAWH HMONG CONSONANT HNAUPAHAWH HMONG CONSONANT PLHAUPAHAWH HMO" + + "NG CONSONANT NTHAUPAHAWH HMONG CONSONANT NAUPAHAWH HMONG CONSONANT AUPAH" + + "AWH HMONG CONSONANT XAUPAHAWH HMONG CONSONANT CAUPAHAWH HMONG MARK CIM T" + + "UBPAHAWH HMONG MARK CIM SOPAHAWH HMONG MARK CIM KESPAHAWH HMONG MARK CIM" + + " KHAVPAHAWH HMONG MARK CIM SUAMPAHAWH HMONG MARK CIM HOMPAHAWH HMONG MAR") + ("" + + "K CIM TAUMPAHAWH HMONG SIGN VOS THOMPAHAWH HMONG SIGN VOS TSHAB CEEBPAHA" + + "WH HMONG SIGN CIM CHEEMPAHAWH HMONG SIGN VOS THIABPAHAWH HMONG SIGN VOS " + + "FEEMPAHAWH HMONG SIGN XYEEM NTXIVPAHAWH HMONG SIGN XYEEM RHOPAHAWH HMONG" + + " SIGN XYEEM TOVPAHAWH HMONG SIGN XYEEM FAIBPAHAWH HMONG SIGN VOS SEEVPAH" + + "AWH HMONG SIGN MEEJ SUABPAHAWH HMONG SIGN VOS NRUAPAHAWH HMONG SIGN IB Y" + + "AMPAHAWH HMONG SIGN XAUSPAHAWH HMONG SIGN CIM TSOV ROGPAHAWH HMONG DIGIT" + + " ZEROPAHAWH HMONG DIGIT ONEPAHAWH HMONG DIGIT TWOPAHAWH HMONG DIGIT THRE" + + "EPAHAWH HMONG DIGIT FOURPAHAWH HMONG DIGIT FIVEPAHAWH HMONG DIGIT SIXPAH" + + "AWH HMONG DIGIT SEVENPAHAWH HMONG DIGIT EIGHTPAHAWH HMONG DIGIT NINEPAHA" + + "WH HMONG NUMBER TENSPAHAWH HMONG NUMBER HUNDREDSPAHAWH HMONG NUMBER TEN " + + "THOUSANDSPAHAWH HMONG NUMBER MILLIONSPAHAWH HMONG NUMBER HUNDRED MILLION" + + "SPAHAWH HMONG NUMBER TEN BILLIONSPAHAWH HMONG NUMBER TRILLIONSPAHAWH HMO" + + "NG SIGN VOS LUBPAHAWH HMONG SIGN XYOOPAHAWH HMONG SIGN HLIPAHAWH HMONG S" + + "IGN THIRD-STAGE HLIPAHAWH HMONG SIGN ZWJ THAJPAHAWH HMONG SIGN HNUBPAHAW" + + "H HMONG SIGN NQIGPAHAWH HMONG SIGN XIABPAHAWH HMONG SIGN NTUJPAHAWH HMON" + + "G SIGN AVPAHAWH HMONG SIGN TXHEEJ CEEVPAHAWH HMONG SIGN MEEJ TSEEBPAHAWH" + + " HMONG SIGN TAUPAHAWH HMONG SIGN LOSPAHAWH HMONG SIGN MUSPAHAWH HMONG SI" + + "GN CIM HAIS LUS NTOG NTOGPAHAWH HMONG SIGN CIM CUAM TSHOOJPAHAWH HMONG S" + + "IGN CIM TXWVPAHAWH HMONG SIGN CIM TXWV CHWVPAHAWH HMONG SIGN CIM PUB DAW" + + "BPAHAWH HMONG SIGN CIM NRES TOSPAHAWH HMONG CLAN SIGN TSHEEJPAHAWH HMONG" + + " CLAN SIGN YEEGPAHAWH HMONG CLAN SIGN LISPAHAWH HMONG CLAN SIGN LAUJPAHA" + + "WH HMONG CLAN SIGN XYOOJPAHAWH HMONG CLAN SIGN KOOPAHAWH HMONG CLAN SIGN" + + " HAWJPAHAWH HMONG CLAN SIGN MUASPAHAWH HMONG CLAN SIGN THOJPAHAWH HMONG " + + "CLAN SIGN TSABPAHAWH HMONG CLAN SIGN PHABPAHAWH HMONG CLAN SIGN KHABPAHA" + + "WH HMONG CLAN SIGN HAMPAHAWH HMONG CLAN SIGN VAJPAHAWH HMONG CLAN SIGN F" + + "AJPAHAWH HMONG CLAN SIGN YAJPAHAWH HMONG CLAN SIGN TSWBPAHAWH HMONG CLAN" + + " SIGN KWMPAHAWH HMONG CLAN SIGN VWJMIAO LETTER PAMIAO LETTER BAMIAO LETT" + + "ER YI PAMIAO LETTER PLAMIAO LETTER MAMIAO LETTER MHAMIAO LETTER ARCHAIC " + + "MAMIAO LETTER FAMIAO LETTER VAMIAO LETTER VFAMIAO LETTER TAMIAO LETTER D" + + "AMIAO LETTER YI TTAMIAO LETTER YI TAMIAO LETTER TTAMIAO LETTER DDAMIAO L" + + "ETTER NAMIAO LETTER NHAMIAO LETTER YI NNAMIAO LETTER ARCHAIC NAMIAO LETT" + + "ER NNAMIAO LETTER NNHAMIAO LETTER LAMIAO LETTER LYAMIAO LETTER LHAMIAO L" + + "ETTER LHYAMIAO LETTER TLHAMIAO LETTER DLHAMIAO LETTER TLHYAMIAO LETTER D" + + "LHYAMIAO LETTER KAMIAO LETTER GAMIAO LETTER YI KAMIAO LETTER QAMIAO LETT" + + "ER QGAMIAO LETTER NGAMIAO LETTER NGHAMIAO LETTER ARCHAIC NGAMIAO LETTER " + + "HAMIAO LETTER XAMIAO LETTER GHAMIAO LETTER GHHAMIAO LETTER TSSAMIAO LETT" + + "ER DZZAMIAO LETTER NYAMIAO LETTER NYHAMIAO LETTER TSHAMIAO LETTER DZHAMI" + + "AO LETTER YI TSHAMIAO LETTER YI DZHAMIAO LETTER REFORMED TSHAMIAO LETTER" + + " SHAMIAO LETTER SSAMIAO LETTER ZHAMIAO LETTER ZSHAMIAO LETTER TSAMIAO LE" + + "TTER DZAMIAO LETTER YI TSAMIAO LETTER SAMIAO LETTER ZAMIAO LETTER ZSAMIA" + + "O LETTER ZZAMIAO LETTER ZZSAMIAO LETTER ARCHAIC ZZAMIAO LETTER ZZYAMIAO " + + "LETTER ZZSYAMIAO LETTER WAMIAO LETTER AHMIAO LETTER HHAMIAO LETTER NASAL" + + "IZATIONMIAO SIGN ASPIRATIONMIAO SIGN REFORMED VOICINGMIAO SIGN REFORMED " + + "ASPIRATIONMIAO VOWEL SIGN AMIAO VOWEL SIGN AAMIAO VOWEL SIGN AHHMIAO VOW" + + "EL SIGN ANMIAO VOWEL SIGN ANGMIAO VOWEL SIGN OMIAO VOWEL SIGN OOMIAO VOW" + + "EL SIGN WOMIAO VOWEL SIGN WMIAO VOWEL SIGN EMIAO VOWEL SIGN ENMIAO VOWEL" + + " SIGN ENGMIAO VOWEL SIGN OEYMIAO VOWEL SIGN IMIAO VOWEL SIGN IAMIAO VOWE" + + "L SIGN IANMIAO VOWEL SIGN IANGMIAO VOWEL SIGN IOMIAO VOWEL SIGN IEMIAO V" + + "OWEL SIGN IIMIAO VOWEL SIGN IUMIAO VOWEL SIGN INGMIAO VOWEL SIGN UMIAO V" + + "OWEL SIGN UAMIAO VOWEL SIGN UANMIAO VOWEL SIGN UANGMIAO VOWEL SIGN UUMIA" + + "O VOWEL SIGN UEIMIAO VOWEL SIGN UNGMIAO VOWEL SIGN YMIAO VOWEL SIGN YIMI" + + "AO VOWEL SIGN AEMIAO VOWEL SIGN AEEMIAO VOWEL SIGN ERRMIAO VOWEL SIGN RO" + + "UNDED ERRMIAO VOWEL SIGN ERMIAO VOWEL SIGN ROUNDED ERMIAO VOWEL SIGN AIM" + + "IAO VOWEL SIGN EIMIAO VOWEL SIGN AUMIAO VOWEL SIGN OUMIAO VOWEL SIGN NMI" + + "AO VOWEL SIGN NGMIAO TONE RIGHTMIAO TONE TOP RIGHTMIAO TONE ABOVEMIAO TO" + + "NE BELOWMIAO LETTER TONE-2MIAO LETTER TONE-3MIAO LETTER TONE-4MIAO LETTE" + + "R TONE-5MIAO LETTER TONE-6MIAO LETTER TONE-7MIAO LETTER TONE-8MIAO LETTE" + + "R REFORMED TONE-1MIAO LETTER REFORMED TONE-2MIAO LETTER REFORMED TONE-4M" + + "IAO LETTER REFORMED TONE-5MIAO LETTER REFORMED TONE-6MIAO LETTER REFORME" + + "D TONE-8TANGUT ITERATION MARKTANGUT COMPONENT-001TANGUT COMPONENT-002TAN" + + "GUT COMPONENT-003TANGUT COMPONENT-004TANGUT COMPONENT-005TANGUT COMPONEN" + + "T-006TANGUT COMPONENT-007TANGUT COMPONENT-008TANGUT COMPONENT-009TANGUT " + + "COMPONENT-010TANGUT COMPONENT-011TANGUT COMPONENT-012TANGUT COMPONENT-01" + + "3TANGUT COMPONENT-014TANGUT COMPONENT-015TANGUT COMPONENT-016TANGUT COMP") + ("" + + "ONENT-017TANGUT COMPONENT-018TANGUT COMPONENT-019TANGUT COMPONENT-020TAN" + + "GUT COMPONENT-021TANGUT COMPONENT-022TANGUT COMPONENT-023TANGUT COMPONEN" + + "T-024TANGUT COMPONENT-025TANGUT COMPONENT-026TANGUT COMPONENT-027TANGUT " + + "COMPONENT-028TANGUT COMPONENT-029TANGUT COMPONENT-030TANGUT COMPONENT-03" + + "1TANGUT COMPONENT-032TANGUT COMPONENT-033TANGUT COMPONENT-034TANGUT COMP" + + "ONENT-035TANGUT COMPONENT-036TANGUT COMPONENT-037TANGUT COMPONENT-038TAN" + + "GUT COMPONENT-039TANGUT COMPONENT-040TANGUT COMPONENT-041TANGUT COMPONEN" + + "T-042TANGUT COMPONENT-043TANGUT COMPONENT-044TANGUT COMPONENT-045TANGUT " + + "COMPONENT-046TANGUT COMPONENT-047TANGUT COMPONENT-048TANGUT COMPONENT-04" + + "9TANGUT COMPONENT-050TANGUT COMPONENT-051TANGUT COMPONENT-052TANGUT COMP" + + "ONENT-053TANGUT COMPONENT-054TANGUT COMPONENT-055TANGUT COMPONENT-056TAN" + + "GUT COMPONENT-057TANGUT COMPONENT-058TANGUT COMPONENT-059TANGUT COMPONEN" + + "T-060TANGUT COMPONENT-061TANGUT COMPONENT-062TANGUT COMPONENT-063TANGUT " + + "COMPONENT-064TANGUT COMPONENT-065TANGUT COMPONENT-066TANGUT COMPONENT-06" + + "7TANGUT COMPONENT-068TANGUT COMPONENT-069TANGUT COMPONENT-070TANGUT COMP" + + "ONENT-071TANGUT COMPONENT-072TANGUT COMPONENT-073TANGUT COMPONENT-074TAN" + + "GUT COMPONENT-075TANGUT COMPONENT-076TANGUT COMPONENT-077TANGUT COMPONEN" + + "T-078TANGUT COMPONENT-079TANGUT COMPONENT-080TANGUT COMPONENT-081TANGUT " + + "COMPONENT-082TANGUT COMPONENT-083TANGUT COMPONENT-084TANGUT COMPONENT-08" + + "5TANGUT COMPONENT-086TANGUT COMPONENT-087TANGUT COMPONENT-088TANGUT COMP" + + "ONENT-089TANGUT COMPONENT-090TANGUT COMPONENT-091TANGUT COMPONENT-092TAN" + + "GUT COMPONENT-093TANGUT COMPONENT-094TANGUT COMPONENT-095TANGUT COMPONEN" + + "T-096TANGUT COMPONENT-097TANGUT COMPONENT-098TANGUT COMPONENT-099TANGUT " + + "COMPONENT-100TANGUT COMPONENT-101TANGUT COMPONENT-102TANGUT COMPONENT-10" + + "3TANGUT COMPONENT-104TANGUT COMPONENT-105TANGUT COMPONENT-106TANGUT COMP" + + "ONENT-107TANGUT COMPONENT-108TANGUT COMPONENT-109TANGUT COMPONENT-110TAN" + + "GUT COMPONENT-111TANGUT COMPONENT-112TANGUT COMPONENT-113TANGUT COMPONEN" + + "T-114TANGUT COMPONENT-115TANGUT COMPONENT-116TANGUT COMPONENT-117TANGUT " + + "COMPONENT-118TANGUT COMPONENT-119TANGUT COMPONENT-120TANGUT COMPONENT-12" + + "1TANGUT COMPONENT-122TANGUT COMPONENT-123TANGUT COMPONENT-124TANGUT COMP" + + "ONENT-125TANGUT COMPONENT-126TANGUT COMPONENT-127TANGUT COMPONENT-128TAN" + + "GUT COMPONENT-129TANGUT COMPONENT-130TANGUT COMPONENT-131TANGUT COMPONEN" + + "T-132TANGUT COMPONENT-133TANGUT COMPONENT-134TANGUT COMPONENT-135TANGUT " + + "COMPONENT-136TANGUT COMPONENT-137TANGUT COMPONENT-138TANGUT COMPONENT-13" + + "9TANGUT COMPONENT-140TANGUT COMPONENT-141TANGUT COMPONENT-142TANGUT COMP" + + "ONENT-143TANGUT COMPONENT-144TANGUT COMPONENT-145TANGUT COMPONENT-146TAN" + + "GUT COMPONENT-147TANGUT COMPONENT-148TANGUT COMPONENT-149TANGUT COMPONEN" + + "T-150TANGUT COMPONENT-151TANGUT COMPONENT-152TANGUT COMPONENT-153TANGUT " + + "COMPONENT-154TANGUT COMPONENT-155TANGUT COMPONENT-156TANGUT COMPONENT-15" + + "7TANGUT COMPONENT-158TANGUT COMPONENT-159TANGUT COMPONENT-160TANGUT COMP" + + "ONENT-161TANGUT COMPONENT-162TANGUT COMPONENT-163TANGUT COMPONENT-164TAN" + + "GUT COMPONENT-165TANGUT COMPONENT-166TANGUT COMPONENT-167TANGUT COMPONEN" + + "T-168TANGUT COMPONENT-169TANGUT COMPONENT-170TANGUT COMPONENT-171TANGUT " + + "COMPONENT-172TANGUT COMPONENT-173TANGUT COMPONENT-174TANGUT COMPONENT-17" + + "5TANGUT COMPONENT-176TANGUT COMPONENT-177TANGUT COMPONENT-178TANGUT COMP" + + "ONENT-179TANGUT COMPONENT-180TANGUT COMPONENT-181TANGUT COMPONENT-182TAN" + + "GUT COMPONENT-183TANGUT COMPONENT-184TANGUT COMPONENT-185TANGUT COMPONEN" + + "T-186TANGUT COMPONENT-187TANGUT COMPONENT-188TANGUT COMPONENT-189TANGUT " + + "COMPONENT-190TANGUT COMPONENT-191TANGUT COMPONENT-192TANGUT COMPONENT-19" + + "3TANGUT COMPONENT-194TANGUT COMPONENT-195TANGUT COMPONENT-196TANGUT COMP" + + "ONENT-197TANGUT COMPONENT-198TANGUT COMPONENT-199TANGUT COMPONENT-200TAN" + + "GUT COMPONENT-201TANGUT COMPONENT-202TANGUT COMPONENT-203TANGUT COMPONEN" + + "T-204TANGUT COMPONENT-205TANGUT COMPONENT-206TANGUT COMPONENT-207TANGUT " + + "COMPONENT-208TANGUT COMPONENT-209TANGUT COMPONENT-210TANGUT COMPONENT-21" + + "1TANGUT COMPONENT-212TANGUT COMPONENT-213TANGUT COMPONENT-214TANGUT COMP" + + "ONENT-215TANGUT COMPONENT-216TANGUT COMPONENT-217TANGUT COMPONENT-218TAN" + + "GUT COMPONENT-219TANGUT COMPONENT-220TANGUT COMPONENT-221TANGUT COMPONEN" + + "T-222TANGUT COMPONENT-223TANGUT COMPONENT-224TANGUT COMPONENT-225TANGUT " + + "COMPONENT-226TANGUT COMPONENT-227TANGUT COMPONENT-228TANGUT COMPONENT-22" + + "9TANGUT COMPONENT-230TANGUT COMPONENT-231TANGUT COMPONENT-232TANGUT COMP" + + "ONENT-233TANGUT COMPONENT-234TANGUT COMPONENT-235TANGUT COMPONENT-236TAN" + + "GUT COMPONENT-237TANGUT COMPONENT-238TANGUT COMPONENT-239TANGUT COMPONEN" + + "T-240TANGUT COMPONENT-241TANGUT COMPONENT-242TANGUT COMPONENT-243TANGUT " + + "COMPONENT-244TANGUT COMPONENT-245TANGUT COMPONENT-246TANGUT COMPONENT-24") + ("" + + "7TANGUT COMPONENT-248TANGUT COMPONENT-249TANGUT COMPONENT-250TANGUT COMP" + + "ONENT-251TANGUT COMPONENT-252TANGUT COMPONENT-253TANGUT COMPONENT-254TAN" + + "GUT COMPONENT-255TANGUT COMPONENT-256TANGUT COMPONENT-257TANGUT COMPONEN" + + "T-258TANGUT COMPONENT-259TANGUT COMPONENT-260TANGUT COMPONENT-261TANGUT " + + "COMPONENT-262TANGUT COMPONENT-263TANGUT COMPONENT-264TANGUT COMPONENT-26" + + "5TANGUT COMPONENT-266TANGUT COMPONENT-267TANGUT COMPONENT-268TANGUT COMP" + + "ONENT-269TANGUT COMPONENT-270TANGUT COMPONENT-271TANGUT COMPONENT-272TAN" + + "GUT COMPONENT-273TANGUT COMPONENT-274TANGUT COMPONENT-275TANGUT COMPONEN" + + "T-276TANGUT COMPONENT-277TANGUT COMPONENT-278TANGUT COMPONENT-279TANGUT " + + "COMPONENT-280TANGUT COMPONENT-281TANGUT COMPONENT-282TANGUT COMPONENT-28" + + "3TANGUT COMPONENT-284TANGUT COMPONENT-285TANGUT COMPONENT-286TANGUT COMP" + + "ONENT-287TANGUT COMPONENT-288TANGUT COMPONENT-289TANGUT COMPONENT-290TAN" + + "GUT COMPONENT-291TANGUT COMPONENT-292TANGUT COMPONENT-293TANGUT COMPONEN" + + "T-294TANGUT COMPONENT-295TANGUT COMPONENT-296TANGUT COMPONENT-297TANGUT " + + "COMPONENT-298TANGUT COMPONENT-299TANGUT COMPONENT-300TANGUT COMPONENT-30" + + "1TANGUT COMPONENT-302TANGUT COMPONENT-303TANGUT COMPONENT-304TANGUT COMP" + + "ONENT-305TANGUT COMPONENT-306TANGUT COMPONENT-307TANGUT COMPONENT-308TAN" + + "GUT COMPONENT-309TANGUT COMPONENT-310TANGUT COMPONENT-311TANGUT COMPONEN" + + "T-312TANGUT COMPONENT-313TANGUT COMPONENT-314TANGUT COMPONENT-315TANGUT " + + "COMPONENT-316TANGUT COMPONENT-317TANGUT COMPONENT-318TANGUT COMPONENT-31" + + "9TANGUT COMPONENT-320TANGUT COMPONENT-321TANGUT COMPONENT-322TANGUT COMP" + + "ONENT-323TANGUT COMPONENT-324TANGUT COMPONENT-325TANGUT COMPONENT-326TAN" + + "GUT COMPONENT-327TANGUT COMPONENT-328TANGUT COMPONENT-329TANGUT COMPONEN" + + "T-330TANGUT COMPONENT-331TANGUT COMPONENT-332TANGUT COMPONENT-333TANGUT " + + "COMPONENT-334TANGUT COMPONENT-335TANGUT COMPONENT-336TANGUT COMPONENT-33" + + "7TANGUT COMPONENT-338TANGUT COMPONENT-339TANGUT COMPONENT-340TANGUT COMP" + + "ONENT-341TANGUT COMPONENT-342TANGUT COMPONENT-343TANGUT COMPONENT-344TAN" + + "GUT COMPONENT-345TANGUT COMPONENT-346TANGUT COMPONENT-347TANGUT COMPONEN" + + "T-348TANGUT COMPONENT-349TANGUT COMPONENT-350TANGUT COMPONENT-351TANGUT " + + "COMPONENT-352TANGUT COMPONENT-353TANGUT COMPONENT-354TANGUT COMPONENT-35" + + "5TANGUT COMPONENT-356TANGUT COMPONENT-357TANGUT COMPONENT-358TANGUT COMP" + + "ONENT-359TANGUT COMPONENT-360TANGUT COMPONENT-361TANGUT COMPONENT-362TAN" + + "GUT COMPONENT-363TANGUT COMPONENT-364TANGUT COMPONENT-365TANGUT COMPONEN" + + "T-366TANGUT COMPONENT-367TANGUT COMPONENT-368TANGUT COMPONENT-369TANGUT " + + "COMPONENT-370TANGUT COMPONENT-371TANGUT COMPONENT-372TANGUT COMPONENT-37" + + "3TANGUT COMPONENT-374TANGUT COMPONENT-375TANGUT COMPONENT-376TANGUT COMP" + + "ONENT-377TANGUT COMPONENT-378TANGUT COMPONENT-379TANGUT COMPONENT-380TAN" + + "GUT COMPONENT-381TANGUT COMPONENT-382TANGUT COMPONENT-383TANGUT COMPONEN" + + "T-384TANGUT COMPONENT-385TANGUT COMPONENT-386TANGUT COMPONENT-387TANGUT " + + "COMPONENT-388TANGUT COMPONENT-389TANGUT COMPONENT-390TANGUT COMPONENT-39" + + "1TANGUT COMPONENT-392TANGUT COMPONENT-393TANGUT COMPONENT-394TANGUT COMP" + + "ONENT-395TANGUT COMPONENT-396TANGUT COMPONENT-397TANGUT COMPONENT-398TAN" + + "GUT COMPONENT-399TANGUT COMPONENT-400TANGUT COMPONENT-401TANGUT COMPONEN" + + "T-402TANGUT COMPONENT-403TANGUT COMPONENT-404TANGUT COMPONENT-405TANGUT " + + "COMPONENT-406TANGUT COMPONENT-407TANGUT COMPONENT-408TANGUT COMPONENT-40" + + "9TANGUT COMPONENT-410TANGUT COMPONENT-411TANGUT COMPONENT-412TANGUT COMP" + + "ONENT-413TANGUT COMPONENT-414TANGUT COMPONENT-415TANGUT COMPONENT-416TAN" + + "GUT COMPONENT-417TANGUT COMPONENT-418TANGUT COMPONENT-419TANGUT COMPONEN" + + "T-420TANGUT COMPONENT-421TANGUT COMPONENT-422TANGUT COMPONENT-423TANGUT " + + "COMPONENT-424TANGUT COMPONENT-425TANGUT COMPONENT-426TANGUT COMPONENT-42" + + "7TANGUT COMPONENT-428TANGUT COMPONENT-429TANGUT COMPONENT-430TANGUT COMP" + + "ONENT-431TANGUT COMPONENT-432TANGUT COMPONENT-433TANGUT COMPONENT-434TAN" + + "GUT COMPONENT-435TANGUT COMPONENT-436TANGUT COMPONENT-437TANGUT COMPONEN" + + "T-438TANGUT COMPONENT-439TANGUT COMPONENT-440TANGUT COMPONENT-441TANGUT " + + "COMPONENT-442TANGUT COMPONENT-443TANGUT COMPONENT-444TANGUT COMPONENT-44" + + "5TANGUT COMPONENT-446TANGUT COMPONENT-447TANGUT COMPONENT-448TANGUT COMP" + + "ONENT-449TANGUT COMPONENT-450TANGUT COMPONENT-451TANGUT COMPONENT-452TAN" + + "GUT COMPONENT-453TANGUT COMPONENT-454TANGUT COMPONENT-455TANGUT COMPONEN" + + "T-456TANGUT COMPONENT-457TANGUT COMPONENT-458TANGUT COMPONENT-459TANGUT " + + "COMPONENT-460TANGUT COMPONENT-461TANGUT COMPONENT-462TANGUT COMPONENT-46" + + "3TANGUT COMPONENT-464TANGUT COMPONENT-465TANGUT COMPONENT-466TANGUT COMP" + + "ONENT-467TANGUT COMPONENT-468TANGUT COMPONENT-469TANGUT COMPONENT-470TAN" + + "GUT COMPONENT-471TANGUT COMPONENT-472TANGUT COMPONENT-473TANGUT COMPONEN" + + "T-474TANGUT COMPONENT-475TANGUT COMPONENT-476TANGUT COMPONENT-477TANGUT ") + ("" + + "COMPONENT-478TANGUT COMPONENT-479TANGUT COMPONENT-480TANGUT COMPONENT-48" + + "1TANGUT COMPONENT-482TANGUT COMPONENT-483TANGUT COMPONENT-484TANGUT COMP" + + "ONENT-485TANGUT COMPONENT-486TANGUT COMPONENT-487TANGUT COMPONENT-488TAN" + + "GUT COMPONENT-489TANGUT COMPONENT-490TANGUT COMPONENT-491TANGUT COMPONEN" + + "T-492TANGUT COMPONENT-493TANGUT COMPONENT-494TANGUT COMPONENT-495TANGUT " + + "COMPONENT-496TANGUT COMPONENT-497TANGUT COMPONENT-498TANGUT COMPONENT-49" + + "9TANGUT COMPONENT-500TANGUT COMPONENT-501TANGUT COMPONENT-502TANGUT COMP" + + "ONENT-503TANGUT COMPONENT-504TANGUT COMPONENT-505TANGUT COMPONENT-506TAN" + + "GUT COMPONENT-507TANGUT COMPONENT-508TANGUT COMPONENT-509TANGUT COMPONEN" + + "T-510TANGUT COMPONENT-511TANGUT COMPONENT-512TANGUT COMPONENT-513TANGUT " + + "COMPONENT-514TANGUT COMPONENT-515TANGUT COMPONENT-516TANGUT COMPONENT-51" + + "7TANGUT COMPONENT-518TANGUT COMPONENT-519TANGUT COMPONENT-520TANGUT COMP" + + "ONENT-521TANGUT COMPONENT-522TANGUT COMPONENT-523TANGUT COMPONENT-524TAN" + + "GUT COMPONENT-525TANGUT COMPONENT-526TANGUT COMPONENT-527TANGUT COMPONEN" + + "T-528TANGUT COMPONENT-529TANGUT COMPONENT-530TANGUT COMPONENT-531TANGUT " + + "COMPONENT-532TANGUT COMPONENT-533TANGUT COMPONENT-534TANGUT COMPONENT-53" + + "5TANGUT COMPONENT-536TANGUT COMPONENT-537TANGUT COMPONENT-538TANGUT COMP" + + "ONENT-539TANGUT COMPONENT-540TANGUT COMPONENT-541TANGUT COMPONENT-542TAN" + + "GUT COMPONENT-543TANGUT COMPONENT-544TANGUT COMPONENT-545TANGUT COMPONEN" + + "T-546TANGUT COMPONENT-547TANGUT COMPONENT-548TANGUT COMPONENT-549TANGUT " + + "COMPONENT-550TANGUT COMPONENT-551TANGUT COMPONENT-552TANGUT COMPONENT-55" + + "3TANGUT COMPONENT-554TANGUT COMPONENT-555TANGUT COMPONENT-556TANGUT COMP" + + "ONENT-557TANGUT COMPONENT-558TANGUT COMPONENT-559TANGUT COMPONENT-560TAN" + + "GUT COMPONENT-561TANGUT COMPONENT-562TANGUT COMPONENT-563TANGUT COMPONEN" + + "T-564TANGUT COMPONENT-565TANGUT COMPONENT-566TANGUT COMPONENT-567TANGUT " + + "COMPONENT-568TANGUT COMPONENT-569TANGUT COMPONENT-570TANGUT COMPONENT-57" + + "1TANGUT COMPONENT-572TANGUT COMPONENT-573TANGUT COMPONENT-574TANGUT COMP" + + "ONENT-575TANGUT COMPONENT-576TANGUT COMPONENT-577TANGUT COMPONENT-578TAN" + + "GUT COMPONENT-579TANGUT COMPONENT-580TANGUT COMPONENT-581TANGUT COMPONEN" + + "T-582TANGUT COMPONENT-583TANGUT COMPONENT-584TANGUT COMPONENT-585TANGUT " + + "COMPONENT-586TANGUT COMPONENT-587TANGUT COMPONENT-588TANGUT COMPONENT-58" + + "9TANGUT COMPONENT-590TANGUT COMPONENT-591TANGUT COMPONENT-592TANGUT COMP" + + "ONENT-593TANGUT COMPONENT-594TANGUT COMPONENT-595TANGUT COMPONENT-596TAN" + + "GUT COMPONENT-597TANGUT COMPONENT-598TANGUT COMPONENT-599TANGUT COMPONEN" + + "T-600TANGUT COMPONENT-601TANGUT COMPONENT-602TANGUT COMPONENT-603TANGUT " + + "COMPONENT-604TANGUT COMPONENT-605TANGUT COMPONENT-606TANGUT COMPONENT-60" + + "7TANGUT COMPONENT-608TANGUT COMPONENT-609TANGUT COMPONENT-610TANGUT COMP" + + "ONENT-611TANGUT COMPONENT-612TANGUT COMPONENT-613TANGUT COMPONENT-614TAN" + + "GUT COMPONENT-615TANGUT COMPONENT-616TANGUT COMPONENT-617TANGUT COMPONEN" + + "T-618TANGUT COMPONENT-619TANGUT COMPONENT-620TANGUT COMPONENT-621TANGUT " + + "COMPONENT-622TANGUT COMPONENT-623TANGUT COMPONENT-624TANGUT COMPONENT-62" + + "5TANGUT COMPONENT-626TANGUT COMPONENT-627TANGUT COMPONENT-628TANGUT COMP" + + "ONENT-629TANGUT COMPONENT-630TANGUT COMPONENT-631TANGUT COMPONENT-632TAN" + + "GUT COMPONENT-633TANGUT COMPONENT-634TANGUT COMPONENT-635TANGUT COMPONEN" + + "T-636TANGUT COMPONENT-637TANGUT COMPONENT-638TANGUT COMPONENT-639TANGUT " + + "COMPONENT-640TANGUT COMPONENT-641TANGUT COMPONENT-642TANGUT COMPONENT-64" + + "3TANGUT COMPONENT-644TANGUT COMPONENT-645TANGUT COMPONENT-646TANGUT COMP" + + "ONENT-647TANGUT COMPONENT-648TANGUT COMPONENT-649TANGUT COMPONENT-650TAN" + + "GUT COMPONENT-651TANGUT COMPONENT-652TANGUT COMPONENT-653TANGUT COMPONEN" + + "T-654TANGUT COMPONENT-655TANGUT COMPONENT-656TANGUT COMPONENT-657TANGUT " + + "COMPONENT-658TANGUT COMPONENT-659TANGUT COMPONENT-660TANGUT COMPONENT-66" + + "1TANGUT COMPONENT-662TANGUT COMPONENT-663TANGUT COMPONENT-664TANGUT COMP" + + "ONENT-665TANGUT COMPONENT-666TANGUT COMPONENT-667TANGUT COMPONENT-668TAN" + + "GUT COMPONENT-669TANGUT COMPONENT-670TANGUT COMPONENT-671TANGUT COMPONEN" + + "T-672TANGUT COMPONENT-673TANGUT COMPONENT-674TANGUT COMPONENT-675TANGUT " + + "COMPONENT-676TANGUT COMPONENT-677TANGUT COMPONENT-678TANGUT COMPONENT-67" + + "9TANGUT COMPONENT-680TANGUT COMPONENT-681TANGUT COMPONENT-682TANGUT COMP" + + "ONENT-683TANGUT COMPONENT-684TANGUT COMPONENT-685TANGUT COMPONENT-686TAN" + + "GUT COMPONENT-687TANGUT COMPONENT-688TANGUT COMPONENT-689TANGUT COMPONEN" + + "T-690TANGUT COMPONENT-691TANGUT COMPONENT-692TANGUT COMPONENT-693TANGUT " + + "COMPONENT-694TANGUT COMPONENT-695TANGUT COMPONENT-696TANGUT COMPONENT-69" + + "7TANGUT COMPONENT-698TANGUT COMPONENT-699TANGUT COMPONENT-700TANGUT COMP" + + "ONENT-701TANGUT COMPONENT-702TANGUT COMPONENT-703TANGUT COMPONENT-704TAN" + + "GUT COMPONENT-705TANGUT COMPONENT-706TANGUT COMPONENT-707TANGUT COMPONEN") + ("" + + "T-708TANGUT COMPONENT-709TANGUT COMPONENT-710TANGUT COMPONENT-711TANGUT " + + "COMPONENT-712TANGUT COMPONENT-713TANGUT COMPONENT-714TANGUT COMPONENT-71" + + "5TANGUT COMPONENT-716TANGUT COMPONENT-717TANGUT COMPONENT-718TANGUT COMP" + + "ONENT-719TANGUT COMPONENT-720TANGUT COMPONENT-721TANGUT COMPONENT-722TAN" + + "GUT COMPONENT-723TANGUT COMPONENT-724TANGUT COMPONENT-725TANGUT COMPONEN" + + "T-726TANGUT COMPONENT-727TANGUT COMPONENT-728TANGUT COMPONENT-729TANGUT " + + "COMPONENT-730TANGUT COMPONENT-731TANGUT COMPONENT-732TANGUT COMPONENT-73" + + "3TANGUT COMPONENT-734TANGUT COMPONENT-735TANGUT COMPONENT-736TANGUT COMP" + + "ONENT-737TANGUT COMPONENT-738TANGUT COMPONENT-739TANGUT COMPONENT-740TAN" + + "GUT COMPONENT-741TANGUT COMPONENT-742TANGUT COMPONENT-743TANGUT COMPONEN" + + "T-744TANGUT COMPONENT-745TANGUT COMPONENT-746TANGUT COMPONENT-747TANGUT " + + "COMPONENT-748TANGUT COMPONENT-749TANGUT COMPONENT-750TANGUT COMPONENT-75" + + "1TANGUT COMPONENT-752TANGUT COMPONENT-753TANGUT COMPONENT-754TANGUT COMP" + + "ONENT-755KATAKANA LETTER ARCHAIC EHIRAGANA LETTER ARCHAIC YEDUPLOYAN LET" + + "TER HDUPLOYAN LETTER XDUPLOYAN LETTER PDUPLOYAN LETTER TDUPLOYAN LETTER " + + "FDUPLOYAN LETTER KDUPLOYAN LETTER LDUPLOYAN LETTER BDUPLOYAN LETTER DDUP" + + "LOYAN LETTER VDUPLOYAN LETTER GDUPLOYAN LETTER RDUPLOYAN LETTER P NDUPLO" + + "YAN LETTER D SDUPLOYAN LETTER F NDUPLOYAN LETTER K MDUPLOYAN LETTER R SD" + + "UPLOYAN LETTER THDUPLOYAN LETTER SLOAN DHDUPLOYAN LETTER DHDUPLOYAN LETT" + + "ER KKDUPLOYAN LETTER SLOAN JDUPLOYAN LETTER HLDUPLOYAN LETTER LHDUPLOYAN" + + " LETTER RHDUPLOYAN LETTER MDUPLOYAN LETTER NDUPLOYAN LETTER JDUPLOYAN LE" + + "TTER SDUPLOYAN LETTER M NDUPLOYAN LETTER N MDUPLOYAN LETTER J MDUPLOYAN " + + "LETTER S JDUPLOYAN LETTER M WITH DOTDUPLOYAN LETTER N WITH DOTDUPLOYAN L" + + "ETTER J WITH DOTDUPLOYAN LETTER J WITH DOTS INSIDE AND ABOVEDUPLOYAN LET" + + "TER S WITH DOTDUPLOYAN LETTER S WITH DOT BELOWDUPLOYAN LETTER M SDUPLOYA" + + "N LETTER N SDUPLOYAN LETTER J SDUPLOYAN LETTER S SDUPLOYAN LETTER M N SD" + + "UPLOYAN LETTER N M SDUPLOYAN LETTER J M SDUPLOYAN LETTER S J SDUPLOYAN L" + + "ETTER J S WITH DOTDUPLOYAN LETTER J NDUPLOYAN LETTER J N SDUPLOYAN LETTE" + + "R S TDUPLOYAN LETTER S T RDUPLOYAN LETTER S PDUPLOYAN LETTER S P RDUPLOY" + + "AN LETTER T SDUPLOYAN LETTER T R SDUPLOYAN LETTER WDUPLOYAN LETTER WHDUP" + + "LOYAN LETTER W RDUPLOYAN LETTER S NDUPLOYAN LETTER S MDUPLOYAN LETTER K " + + "R SDUPLOYAN LETTER G R SDUPLOYAN LETTER S KDUPLOYAN LETTER S K RDUPLOYAN" + + " LETTER ADUPLOYAN LETTER SLOAN OWDUPLOYAN LETTER OADUPLOYAN LETTER ODUPL" + + "OYAN LETTER AOUDUPLOYAN LETTER IDUPLOYAN LETTER EDUPLOYAN LETTER IEDUPLO" + + "YAN LETTER SHORT IDUPLOYAN LETTER UIDUPLOYAN LETTER EEDUPLOYAN LETTER SL" + + "OAN EHDUPLOYAN LETTER ROMANIAN IDUPLOYAN LETTER SLOAN EEDUPLOYAN LETTER " + + "LONG IDUPLOYAN LETTER YEDUPLOYAN LETTER UDUPLOYAN LETTER EUDUPLOYAN LETT" + + "ER XWDUPLOYAN LETTER U NDUPLOYAN LETTER LONG UDUPLOYAN LETTER ROMANIAN U" + + "DUPLOYAN LETTER UHDUPLOYAN LETTER SLOAN UDUPLOYAN LETTER OOHDUPLOYAN LET" + + "TER OWDUPLOYAN LETTER OUDUPLOYAN LETTER WADUPLOYAN LETTER WODUPLOYAN LET" + + "TER WIDUPLOYAN LETTER WEIDUPLOYAN LETTER WOWDUPLOYAN LETTER NASAL UDUPLO" + + "YAN LETTER NASAL ODUPLOYAN LETTER NASAL IDUPLOYAN LETTER NASAL ADUPLOYAN" + + " LETTER PERNIN ANDUPLOYAN LETTER PERNIN AMDUPLOYAN LETTER SLOAN ENDUPLOY" + + "AN LETTER SLOAN ANDUPLOYAN LETTER SLOAN ONDUPLOYAN LETTER VOCALIC MDUPLO" + + "YAN AFFIX LEFT HORIZONTAL SECANTDUPLOYAN AFFIX MID HORIZONTAL SECANTDUPL" + + "OYAN AFFIX RIGHT HORIZONTAL SECANTDUPLOYAN AFFIX LOW VERTICAL SECANTDUPL" + + "OYAN AFFIX MID VERTICAL SECANTDUPLOYAN AFFIX HIGH VERTICAL SECANTDUPLOYA" + + "N AFFIX ATTACHED SECANTDUPLOYAN AFFIX ATTACHED LEFT-TO-RIGHT SECANTDUPLO" + + "YAN AFFIX ATTACHED TANGENTDUPLOYAN AFFIX ATTACHED TAILDUPLOYAN AFFIX ATT" + + "ACHED E HOOKDUPLOYAN AFFIX ATTACHED I HOOKDUPLOYAN AFFIX ATTACHED TANGEN" + + "T HOOKDUPLOYAN AFFIX HIGH ACUTEDUPLOYAN AFFIX HIGH TIGHT ACUTEDUPLOYAN A" + + "FFIX HIGH GRAVEDUPLOYAN AFFIX HIGH LONG GRAVEDUPLOYAN AFFIX HIGH DOTDUPL" + + "OYAN AFFIX HIGH CIRCLEDUPLOYAN AFFIX HIGH LINEDUPLOYAN AFFIX HIGH WAVEDU" + + "PLOYAN AFFIX HIGH VERTICALDUPLOYAN AFFIX LOW ACUTEDUPLOYAN AFFIX LOW TIG" + + "HT ACUTEDUPLOYAN AFFIX LOW GRAVEDUPLOYAN AFFIX LOW LONG GRAVEDUPLOYAN AF" + + "FIX LOW DOTDUPLOYAN AFFIX LOW CIRCLEDUPLOYAN AFFIX LOW LINEDUPLOYAN AFFI" + + "X LOW WAVEDUPLOYAN AFFIX LOW VERTICALDUPLOYAN AFFIX LOW ARROWDUPLOYAN SI" + + "GN O WITH CROSSDUPLOYAN THICK LETTER SELECTORDUPLOYAN DOUBLE MARKDUPLOYA" + + "N PUNCTUATION CHINOOK FULL STOPSHORTHAND FORMAT LETTER OVERLAPSHORTHAND " + + "FORMAT CONTINUING OVERLAPSHORTHAND FORMAT DOWN STEPSHORTHAND FORMAT UP S" + + "TEPBYZANTINE MUSICAL SYMBOL PSILIBYZANTINE MUSICAL SYMBOL DASEIABYZANTIN" + + "E MUSICAL SYMBOL PERISPOMENIBYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKONBY" + + "ZANTINE MUSICAL SYMBOL OXEIA DIPLIBYZANTINE MUSICAL SYMBOL VAREIA EKFONI" + + "TIKONBYZANTINE MUSICAL SYMBOL VAREIA DIPLIBYZANTINE MUSICAL SYMBOL KATHI") + ("" + + "STIBYZANTINE MUSICAL SYMBOL SYRMATIKIBYZANTINE MUSICAL SYMBOL PARAKLITIK" + + "IBYZANTINE MUSICAL SYMBOL YPOKRISISBYZANTINE MUSICAL SYMBOL YPOKRISIS DI" + + "PLIBYZANTINE MUSICAL SYMBOL KREMASTIBYZANTINE MUSICAL SYMBOL APESO EKFON" + + "ITIKONBYZANTINE MUSICAL SYMBOL EXO EKFONITIKONBYZANTINE MUSICAL SYMBOL T" + + "ELEIABYZANTINE MUSICAL SYMBOL KENTIMATABYZANTINE MUSICAL SYMBOL APOSTROF" + + "OSBYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLIBYZANTINE MUSICAL SYMBOL SYNE" + + "VMABYZANTINE MUSICAL SYMBOL THITABYZANTINE MUSICAL SYMBOL OLIGON ARCHAIO" + + "NBYZANTINE MUSICAL SYMBOL GORGON ARCHAIONBYZANTINE MUSICAL SYMBOL PSILON" + + "BYZANTINE MUSICAL SYMBOL CHAMILONBYZANTINE MUSICAL SYMBOL VATHYBYZANTINE" + + " MUSICAL SYMBOL ISON ARCHAIONBYZANTINE MUSICAL SYMBOL KENTIMA ARCHAIONBY" + + "ZANTINE MUSICAL SYMBOL KENTIMATA ARCHAIONBYZANTINE MUSICAL SYMBOL SAXIMA" + + "TABYZANTINE MUSICAL SYMBOL PARICHONBYZANTINE MUSICAL SYMBOL STAVROS APOD" + + "EXIABYZANTINE MUSICAL SYMBOL OXEIAI ARCHAIONBYZANTINE MUSICAL SYMBOL VAR" + + "EIAI ARCHAIONBYZANTINE MUSICAL SYMBOL APODERMA ARCHAIONBYZANTINE MUSICAL" + + " SYMBOL APOTHEMABYZANTINE MUSICAL SYMBOL KLASMABYZANTINE MUSICAL SYMBOL " + + "REVMABYZANTINE MUSICAL SYMBOL PIASMA ARCHAIONBYZANTINE MUSICAL SYMBOL TI" + + "NAGMABYZANTINE MUSICAL SYMBOL ANATRICHISMABYZANTINE MUSICAL SYMBOL SEISM" + + "ABYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAIONBYZANTINE MUSICAL SYMBOL SYNAG" + + "MA META STAVROUBYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAIONBYZANTINE MUSI" + + "CAL SYMBOL THEMABYZANTINE MUSICAL SYMBOL LEMOIBYZANTINE MUSICAL SYMBOL D" + + "YOBYZANTINE MUSICAL SYMBOL TRIABYZANTINE MUSICAL SYMBOL TESSERABYZANTINE" + + " MUSICAL SYMBOL KRATIMATABYZANTINE MUSICAL SYMBOL APESO EXO NEOBYZANTINE" + + " MUSICAL SYMBOL FTHORA ARCHAIONBYZANTINE MUSICAL SYMBOL IMIFTHORABYZANTI" + + "NE MUSICAL SYMBOL TROMIKON ARCHAIONBYZANTINE MUSICAL SYMBOL KATAVA TROMI" + + "KONBYZANTINE MUSICAL SYMBOL PELASTONBYZANTINE MUSICAL SYMBOL PSIFISTONBY" + + "ZANTINE MUSICAL SYMBOL KONTEVMABYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAIO" + + "NBYZANTINE MUSICAL SYMBOL RAPISMABYZANTINE MUSICAL SYMBOL PARAKALESMA AR" + + "CHAIONBYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAIONBYZANTINE MUSICAL SYM" + + "BOL ICHADINBYZANTINE MUSICAL SYMBOL NANABYZANTINE MUSICAL SYMBOL PETASMA" + + "BYZANTINE MUSICAL SYMBOL KONTEVMA ALLOBYZANTINE MUSICAL SYMBOL TROMIKON " + + "ALLOBYZANTINE MUSICAL SYMBOL STRAGGISMATABYZANTINE MUSICAL SYMBOL GRONTH" + + "ISMATABYZANTINE MUSICAL SYMBOL ISON NEOBYZANTINE MUSICAL SYMBOL OLIGON N" + + "EOBYZANTINE MUSICAL SYMBOL OXEIA NEOBYZANTINE MUSICAL SYMBOL PETASTIBYZA" + + "NTINE MUSICAL SYMBOL KOUFISMABYZANTINE MUSICAL SYMBOL PETASTOKOUFISMABYZ" + + "ANTINE MUSICAL SYMBOL KRATIMOKOUFISMABYZANTINE MUSICAL SYMBOL PELASTON N" + + "EOBYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANOBYZANTINE MUSICAL SYMBOL KEN" + + "TIMA NEO ANOBYZANTINE MUSICAL SYMBOL YPSILIBYZANTINE MUSICAL SYMBOL APOS" + + "TROFOS NEOBYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEOBYZANTINE MUS" + + "ICAL SYMBOL YPORROIBYZANTINE MUSICAL SYMBOL KRATIMOYPORROONBYZANTINE MUS" + + "ICAL SYMBOL ELAFRONBYZANTINE MUSICAL SYMBOL CHAMILIBYZANTINE MUSICAL SYM" + + "BOL MIKRON ISONBYZANTINE MUSICAL SYMBOL VAREIA NEOBYZANTINE MUSICAL SYMB" + + "OL PIASMA NEOBYZANTINE MUSICAL SYMBOL PSIFISTON NEOBYZANTINE MUSICAL SYM" + + "BOL OMALONBYZANTINE MUSICAL SYMBOL ANTIKENOMABYZANTINE MUSICAL SYMBOL LY" + + "GISMABYZANTINE MUSICAL SYMBOL PARAKLITIKI NEOBYZANTINE MUSICAL SYMBOL PA" + + "RAKALESMA NEOBYZANTINE MUSICAL SYMBOL ETERON PARAKALESMABYZANTINE MUSICA" + + "L SYMBOL KYLISMABYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMABYZANTINE MUSICA" + + "L SYMBOL TROMIKON NEOBYZANTINE MUSICAL SYMBOL EKSTREPTONBYZANTINE MUSICA" + + "L SYMBOL SYNAGMA NEOBYZANTINE MUSICAL SYMBOL SYRMABYZANTINE MUSICAL SYMB" + + "OL CHOREVMA NEOBYZANTINE MUSICAL SYMBOL EPEGERMABYZANTINE MUSICAL SYMBOL" + + " SEISMA NEOBYZANTINE MUSICAL SYMBOL XIRON KLASMABYZANTINE MUSICAL SYMBOL" + + " TROMIKOPSIFISTONBYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMABYZANTINE MUSIC" + + "AL SYMBOL TROMIKOLYGISMABYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMABYZAN" + + "TINE MUSICAL SYMBOL PSIFISTOPARAKALESMABYZANTINE MUSICAL SYMBOL TROMIKOS" + + "YNAGMABYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMABYZANTINE MUSICAL SYMBOL G" + + "ORGOSYNTHETONBYZANTINE MUSICAL SYMBOL ARGOSYNTHETONBYZANTINE MUSICAL SYM" + + "BOL ETERON ARGOSYNTHETONBYZANTINE MUSICAL SYMBOL OYRANISMA NEOBYZANTINE " + + "MUSICAL SYMBOL THEMATISMOS ESOBYZANTINE MUSICAL SYMBOL THEMATISMOS EXOBY" + + "ZANTINE MUSICAL SYMBOL THEMA APLOUNBYZANTINE MUSICAL SYMBOL THES KAI APO" + + "THESBYZANTINE MUSICAL SYMBOL KATAVASMABYZANTINE MUSICAL SYMBOL ENDOFONON" + + "BYZANTINE MUSICAL SYMBOL YFEN KATOBYZANTINE MUSICAL SYMBOL YFEN ANOBYZAN" + + "TINE MUSICAL SYMBOL STAVROSBYZANTINE MUSICAL SYMBOL KLASMA ANOBYZANTINE " + + "MUSICAL SYMBOL DIPLI ARCHAIONBYZANTINE MUSICAL SYMBOL KRATIMA ARCHAIONBY" + + "ZANTINE MUSICAL SYMBOL KRATIMA ALLOBYZANTINE MUSICAL SYMBOL KRATIMA NEOB" + + "YZANTINE MUSICAL SYMBOL APODERMA NEOBYZANTINE MUSICAL SYMBOL APLIBYZANTI") + ("" + + "NE MUSICAL SYMBOL DIPLIBYZANTINE MUSICAL SYMBOL TRIPLIBYZANTINE MUSICAL " + + "SYMBOL TETRAPLIBYZANTINE MUSICAL SYMBOL KORONISBYZANTINE MUSICAL SYMBOL " + + "LEIMMA ENOS CHRONOUBYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONONBYZANTINE " + + "MUSICAL SYMBOL LEIMMA TRION CHRONONBYZANTINE MUSICAL SYMBOL LEIMMA TESSA" + + "RON CHRONONBYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOUBYZANTINE MUSI" + + "CAL SYMBOL GORGON NEO ANOBYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON A" + + "RISTERABYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIABYZANTINE MUSI" + + "CAL SYMBOL DIGORGONBYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARIST" + + "ERA KATOBYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANOBYZA" + + "NTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIABYZANTINE MUSICAL SYMBO" + + "L TRIGORGONBYZANTINE MUSICAL SYMBOL ARGONBYZANTINE MUSICAL SYMBOL IMIDIA" + + "RGONBYZANTINE MUSICAL SYMBOL DIARGONBYZANTINE MUSICAL SYMBOL AGOGI POLI " + + "ARGIBYZANTINE MUSICAL SYMBOL AGOGI ARGOTERIBYZANTINE MUSICAL SYMBOL AGOG" + + "I ARGIBYZANTINE MUSICAL SYMBOL AGOGI METRIABYZANTINE MUSICAL SYMBOL AGOG" + + "I MESIBYZANTINE MUSICAL SYMBOL AGOGI GORGIBYZANTINE MUSICAL SYMBOL AGOGI" + + " GORGOTERIBYZANTINE MUSICAL SYMBOL AGOGI POLI GORGIBYZANTINE MUSICAL SYM" + + "BOL MARTYRIA PROTOS ICHOSBYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS I" + + "CHOSBYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOSBYZANTINE MUSICAL SY" + + "MBOL MARTYRIA ALLI DEYTEROS ICHOSBYZANTINE MUSICAL SYMBOL MARTYRIA TRITO" + + "S ICHOSBYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIASBYZANTINE MUSICAL SYMB" + + "OL MARTYRIA TETARTOS ICHOSBYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEG" + + "ETOS ICHOSBYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOSBYZANTINE MUSIC" + + "AL SYMBOL MARTYRIA PLAGIOS ICHOSBYZANTINE MUSICAL SYMBOL ISAKIA TELOUS I" + + "CHIMATOSBYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOSBYZANTINE MU" + + "SICAL SYMBOL FANEROSIS TETRAFONIASBYZANTINE MUSICAL SYMBOL FANEROSIS MON" + + "OFONIASBYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIASBYZANTINE MUSICAL SYMB" + + "OL MARTYRIA VARYS ICHOSBYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHO" + + "SBYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOSBYZANTINE MUSIC" + + "AL SYMBOL GORTHMIKON N APLOUNBYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLO" + + "UNBYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOUBYZANTINE MUSICAL SYMBO" + + "L IMIFONONBYZANTINE MUSICAL SYMBOL IMIFTHORONBYZANTINE MUSICAL SYMBOL FT" + + "HORA ARCHAION DEYTEROU ICHOUBYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA" + + "BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANABYZANTINE MUSICAL SYMBOL F" + + "THORA NAOS ICHOSBYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DIBYZANTINE MU" + + "SICAL SYMBOL FTHORA SKLIRON DIATONON DIBYZANTINE MUSICAL SYMBOL FTHORA D" + + "IATONIKI KEBYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZOBYZANTINE MUSICAL" + + " SYMBOL FTHORA DIATONIKI NI KATOBYZANTINE MUSICAL SYMBOL FTHORA DIATONIK" + + "I NI ANOBYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIASBYZANTINE" + + " MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIASBYZANTINE MUSICAL SYMBOL" + + " FHTORA SKLIRON CHROMA VASISBYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHRO" + + "MA SYNAFIBYZANTINE MUSICAL SYMBOL FTHORA NENANOBYZANTINE MUSICAL SYMBOL " + + "CHROA ZYGOSBYZANTINE MUSICAL SYMBOL CHROA KLITONBYZANTINE MUSICAL SYMBOL" + + " CHROA SPATHIBYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORIONBYZAN" + + "TINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIABYZANTINE MUSICAL SYMBOL " + + "YFESIS TRITIMORIONBYZANTINE MUSICAL SYMBOL DIESIS TRITIMORIONBYZANTINE M" + + "USICAL SYMBOL DIESIS TETARTIMORIONBYZANTINE MUSICAL SYMBOL DIESIS APLI D" + + "YO DODEKATABYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATAB" + + "YZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATABYZANTINE MUSICAL SY" + + "MBOL DIESIS TRIGRAMMOS OKTO DODEKATABYZANTINE MUSICAL SYMBOL YFESIS APLI" + + " DYO DODEKATABYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKAT" + + "ABYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATABYZANTINE MUSICAL " + + "SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATABYZANTINE MUSICAL SYMBOL GENIKI DI" + + "ESISBYZANTINE MUSICAL SYMBOL GENIKI YFESISBYZANTINE MUSICAL SYMBOL DIAST" + + "OLI APLI MIKRIBYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALIBYZANTINE MUS" + + "ICAL SYMBOL DIASTOLI DIPLIBYZANTINE MUSICAL SYMBOL DIASTOLI THESEOSBYZAN" + + "TINE MUSICAL SYMBOL SIMANSIS THESEOSBYZANTINE MUSICAL SYMBOL SIMANSIS TH" + + "ESEOS DISIMOUBYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOUBYZANTINE" + + " MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOUBYZANTINE MUSICAL SYMBOL SIMA" + + "NSIS ARSEOSBYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOUBYZANTINE MUS" + + "ICAL SYMBOL SIMANSIS ARSEOS TRISIMOUBYZANTINE MUSICAL SYMBOL SIMANSIS AR" + + "SEOS TETRASIMOUBYZANTINE MUSICAL SYMBOL DIGRAMMA GGBYZANTINE MUSICAL SYM" + + "BOL DIFTOGGOS OUBYZANTINE MUSICAL SYMBOL STIGMABYZANTINE MUSICAL SYMBOL " + + "ARKTIKO PABYZANTINE MUSICAL SYMBOL ARKTIKO VOUBYZANTINE MUSICAL SYMBOL A" + + "RKTIKO GABYZANTINE MUSICAL SYMBOL ARKTIKO DIBYZANTINE MUSICAL SYMBOL ARK") + ("" + + "TIKO KEBYZANTINE MUSICAL SYMBOL ARKTIKO ZOBYZANTINE MUSICAL SYMBOL ARKTI" + + "KO NIBYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESOBYZANTINE MUSICAL SYMBOL" + + " KENTIMA NEO MESOBYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATOBYZANTINE MU" + + "SICAL SYMBOL KENTIMA NEO KATOBYZANTINE MUSICAL SYMBOL KLASMA KATOBYZANTI" + + "NE MUSICAL SYMBOL GORGON NEO KATOMUSICAL SYMBOL SINGLE BARLINEMUSICAL SY" + + "MBOL DOUBLE BARLINEMUSICAL SYMBOL FINAL BARLINEMUSICAL SYMBOL REVERSE FI" + + "NAL BARLINEMUSICAL SYMBOL DASHED BARLINEMUSICAL SYMBOL SHORT BARLINEMUSI" + + "CAL SYMBOL LEFT REPEAT SIGNMUSICAL SYMBOL RIGHT REPEAT SIGNMUSICAL SYMBO" + + "L REPEAT DOTSMUSICAL SYMBOL DAL SEGNOMUSICAL SYMBOL DA CAPOMUSICAL SYMBO" + + "L SEGNOMUSICAL SYMBOL CODAMUSICAL SYMBOL REPEATED FIGURE-1MUSICAL SYMBOL" + + " REPEATED FIGURE-2MUSICAL SYMBOL REPEATED FIGURE-3MUSICAL SYMBOL FERMATA" + + "MUSICAL SYMBOL FERMATA BELOWMUSICAL SYMBOL BREATH MARKMUSICAL SYMBOL CAE" + + "SURAMUSICAL SYMBOL BRACEMUSICAL SYMBOL BRACKETMUSICAL SYMBOL ONE-LINE ST" + + "AFFMUSICAL SYMBOL TWO-LINE STAFFMUSICAL SYMBOL THREE-LINE STAFFMUSICAL S" + + "YMBOL FOUR-LINE STAFFMUSICAL SYMBOL FIVE-LINE STAFFMUSICAL SYMBOL SIX-LI" + + "NE STAFFMUSICAL SYMBOL SIX-STRING FRETBOARDMUSICAL SYMBOL FOUR-STRING FR" + + "ETBOARDMUSICAL SYMBOL G CLEFMUSICAL SYMBOL G CLEF OTTAVA ALTAMUSICAL SYM" + + "BOL G CLEF OTTAVA BASSAMUSICAL SYMBOL C CLEFMUSICAL SYMBOL F CLEFMUSICAL" + + " SYMBOL F CLEF OTTAVA ALTAMUSICAL SYMBOL F CLEF OTTAVA BASSAMUSICAL SYMB" + + "OL DRUM CLEF-1MUSICAL SYMBOL DRUM CLEF-2MUSICAL SYMBOL MULTIPLE MEASURE " + + "RESTMUSICAL SYMBOL DOUBLE SHARPMUSICAL SYMBOL DOUBLE FLATMUSICAL SYMBOL " + + "FLAT UPMUSICAL SYMBOL FLAT DOWNMUSICAL SYMBOL NATURAL UPMUSICAL SYMBOL N" + + "ATURAL DOWNMUSICAL SYMBOL SHARP UPMUSICAL SYMBOL SHARP DOWNMUSICAL SYMBO" + + "L QUARTER TONE SHARPMUSICAL SYMBOL QUARTER TONE FLATMUSICAL SYMBOL COMMO" + + "N TIMEMUSICAL SYMBOL CUT TIMEMUSICAL SYMBOL OTTAVA ALTAMUSICAL SYMBOL OT" + + "TAVA BASSAMUSICAL SYMBOL QUINDICESIMA ALTAMUSICAL SYMBOL QUINDICESIMA BA" + + "SSAMUSICAL SYMBOL MULTI RESTMUSICAL SYMBOL WHOLE RESTMUSICAL SYMBOL HALF" + + " RESTMUSICAL SYMBOL QUARTER RESTMUSICAL SYMBOL EIGHTH RESTMUSICAL SYMBOL" + + " SIXTEENTH RESTMUSICAL SYMBOL THIRTY-SECOND RESTMUSICAL SYMBOL SIXTY-FOU" + + "RTH RESTMUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH RESTMUSICAL SYMBOL X NO" + + "TEHEADMUSICAL SYMBOL PLUS NOTEHEADMUSICAL SYMBOL CIRCLE X NOTEHEADMUSICA" + + "L SYMBOL SQUARE NOTEHEAD WHITEMUSICAL SYMBOL SQUARE NOTEHEAD BLACKMUSICA" + + "L SYMBOL TRIANGLE NOTEHEAD UP WHITEMUSICAL SYMBOL TRIANGLE NOTEHEAD UP B" + + "LACKMUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITEMUSICAL SYMBOL TRIANGLE N" + + "OTEHEAD LEFT BLACKMUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITEMUSICAL SY" + + "MBOL TRIANGLE NOTEHEAD RIGHT BLACKMUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN " + + "WHITEMUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACKMUSICAL SYMBOL TRIANGLE " + + "NOTEHEAD UP RIGHT WHITEMUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACKMU" + + "SICAL SYMBOL MOON NOTEHEAD WHITEMUSICAL SYMBOL MOON NOTEHEAD BLACKMUSICA" + + "L SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITEMUSICAL SYMBOL TRIANGLE-ROUND" + + " NOTEHEAD DOWN BLACKMUSICAL SYMBOL PARENTHESIS NOTEHEADMUSICAL SYMBOL VO" + + "ID NOTEHEADMUSICAL SYMBOL NOTEHEAD BLACKMUSICAL SYMBOL NULL NOTEHEADMUSI" + + "CAL SYMBOL CLUSTER NOTEHEAD WHITEMUSICAL SYMBOL CLUSTER NOTEHEAD BLACKMU" + + "SICAL SYMBOL BREVEMUSICAL SYMBOL WHOLE NOTEMUSICAL SYMBOL HALF NOTEMUSIC" + + "AL SYMBOL QUARTER NOTEMUSICAL SYMBOL EIGHTH NOTEMUSICAL SYMBOL SIXTEENTH" + + " NOTEMUSICAL SYMBOL THIRTY-SECOND NOTEMUSICAL SYMBOL SIXTY-FOURTH NOTEMU" + + "SICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTEMUSICAL SYMBOL COMBINING STEM" + + "MUSICAL SYMBOL COMBINING SPRECHGESANG STEMMUSICAL SYMBOL COMBINING TREMO" + + "LO-1MUSICAL SYMBOL COMBINING TREMOLO-2MUSICAL SYMBOL COMBINING TREMOLO-3" + + "MUSICAL SYMBOL FINGERED TREMOLO-1MUSICAL SYMBOL FINGERED TREMOLO-2MUSICA" + + "L SYMBOL FINGERED TREMOLO-3MUSICAL SYMBOL COMBINING AUGMENTATION DOTMUSI" + + "CAL SYMBOL COMBINING FLAG-1MUSICAL SYMBOL COMBINING FLAG-2MUSICAL SYMBOL" + + " COMBINING FLAG-3MUSICAL SYMBOL COMBINING FLAG-4MUSICAL SYMBOL COMBINING" + + " FLAG-5MUSICAL SYMBOL BEGIN BEAMMUSICAL SYMBOL END BEAMMUSICAL SYMBOL BE" + + "GIN TIEMUSICAL SYMBOL END TIEMUSICAL SYMBOL BEGIN SLURMUSICAL SYMBOL END" + + " SLURMUSICAL SYMBOL BEGIN PHRASEMUSICAL SYMBOL END PHRASEMUSICAL SYMBOL " + + "COMBINING ACCENTMUSICAL SYMBOL COMBINING STACCATOMUSICAL SYMBOL COMBININ" + + "G TENUTOMUSICAL SYMBOL COMBINING STACCATISSIMOMUSICAL SYMBOL COMBINING M" + + "ARCATOMUSICAL SYMBOL COMBINING MARCATO-STACCATOMUSICAL SYMBOL COMBINING " + + "ACCENT-STACCATOMUSICAL SYMBOL COMBINING LOUREMUSICAL SYMBOL ARPEGGIATO U" + + "PMUSICAL SYMBOL ARPEGGIATO DOWNMUSICAL SYMBOL COMBINING DOITMUSICAL SYMB" + + "OL COMBINING RIPMUSICAL SYMBOL COMBINING FLIPMUSICAL SYMBOL COMBINING SM" + + "EARMUSICAL SYMBOL COMBINING BENDMUSICAL SYMBOL COMBINING DOUBLE TONGUEMU" + + "SICAL SYMBOL COMBINING TRIPLE TONGUEMUSICAL SYMBOL RINFORZANDOMUSICAL SY") + ("" + + "MBOL SUBITOMUSICAL SYMBOL ZMUSICAL SYMBOL PIANOMUSICAL SYMBOL MEZZOMUSIC" + + "AL SYMBOL FORTEMUSICAL SYMBOL CRESCENDOMUSICAL SYMBOL DECRESCENDOMUSICAL" + + " SYMBOL GRACE NOTE SLASHMUSICAL SYMBOL GRACE NOTE NO SLASHMUSICAL SYMBOL" + + " TRMUSICAL SYMBOL TURNMUSICAL SYMBOL INVERTED TURNMUSICAL SYMBOL TURN SL" + + "ASHMUSICAL SYMBOL TURN UPMUSICAL SYMBOL ORNAMENT STROKE-1MUSICAL SYMBOL " + + "ORNAMENT STROKE-2MUSICAL SYMBOL ORNAMENT STROKE-3MUSICAL SYMBOL ORNAMENT" + + " STROKE-4MUSICAL SYMBOL ORNAMENT STROKE-5MUSICAL SYMBOL ORNAMENT STROKE-" + + "6MUSICAL SYMBOL ORNAMENT STROKE-7MUSICAL SYMBOL ORNAMENT STROKE-8MUSICAL" + + " SYMBOL ORNAMENT STROKE-9MUSICAL SYMBOL ORNAMENT STROKE-10MUSICAL SYMBOL" + + " ORNAMENT STROKE-11MUSICAL SYMBOL HAUPTSTIMMEMUSICAL SYMBOL NEBENSTIMMEM" + + "USICAL SYMBOL END OF STIMMEMUSICAL SYMBOL DEGREE SLASHMUSICAL SYMBOL COM" + + "BINING DOWN BOWMUSICAL SYMBOL COMBINING UP BOWMUSICAL SYMBOL COMBINING H" + + "ARMONICMUSICAL SYMBOL COMBINING SNAP PIZZICATOMUSICAL SYMBOL PEDAL MARKM" + + "USICAL SYMBOL PEDAL UP MARKMUSICAL SYMBOL HALF PEDAL MARKMUSICAL SYMBOL " + + "GLISSANDO UPMUSICAL SYMBOL GLISSANDO DOWNMUSICAL SYMBOL WITH FINGERNAILS" + + "MUSICAL SYMBOL DAMPMUSICAL SYMBOL DAMP ALLMUSICAL SYMBOL MAXIMAMUSICAL S" + + "YMBOL LONGAMUSICAL SYMBOL BREVISMUSICAL SYMBOL SEMIBREVIS WHITEMUSICAL S" + + "YMBOL SEMIBREVIS BLACKMUSICAL SYMBOL MINIMAMUSICAL SYMBOL MINIMA BLACKMU" + + "SICAL SYMBOL SEMIMINIMA WHITEMUSICAL SYMBOL SEMIMINIMA BLACKMUSICAL SYMB" + + "OL FUSA WHITEMUSICAL SYMBOL FUSA BLACKMUSICAL SYMBOL LONGA PERFECTA REST" + + "MUSICAL SYMBOL LONGA IMPERFECTA RESTMUSICAL SYMBOL BREVIS RESTMUSICAL SY" + + "MBOL SEMIBREVIS RESTMUSICAL SYMBOL MINIMA RESTMUSICAL SYMBOL SEMIMINIMA " + + "RESTMUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTAMUSICAL SYMBO" + + "L TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTAMUSICAL SYMBOL TEMPUS PERFEC" + + "TUM CUM PROLATIONE PERFECTA DIMINUTION-1MUSICAL SYMBOL TEMPUS IMPERFECTU" + + "M CUM PROLATIONE PERFECTAMUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATION" + + "E IMPERFECTAMUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA " + + "DIMINUTION-1MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA " + + "DIMINUTION-2MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA " + + "DIMINUTION-3MUSICAL SYMBOL CROIXMUSICAL SYMBOL GREGORIAN C CLEFMUSICAL S" + + "YMBOL GREGORIAN F CLEFMUSICAL SYMBOL SQUARE BMUSICAL SYMBOL VIRGAMUSICAL" + + " SYMBOL PODATUSMUSICAL SYMBOL CLIVISMUSICAL SYMBOL SCANDICUSMUSICAL SYMB" + + "OL CLIMACUSMUSICAL SYMBOL TORCULUSMUSICAL SYMBOL PORRECTUSMUSICAL SYMBOL" + + " PORRECTUS FLEXUSMUSICAL SYMBOL SCANDICUS FLEXUSMUSICAL SYMBOL TORCULUS " + + "RESUPINUSMUSICAL SYMBOL PES SUBPUNCTISMUSICAL SYMBOL KIEVAN C CLEFMUSICA" + + "L SYMBOL KIEVAN END OF PIECEMUSICAL SYMBOL KIEVAN FINAL NOTEMUSICAL SYMB" + + "OL KIEVAN RECITATIVE MARKMUSICAL SYMBOL KIEVAN WHOLE NOTEMUSICAL SYMBOL " + + "KIEVAN HALF NOTEMUSICAL SYMBOL KIEVAN QUARTER NOTE STEM DOWNMUSICAL SYMB" + + "OL KIEVAN QUARTER NOTE STEM UPMUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM DOW" + + "NMUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM UPMUSICAL SYMBOL KIEVAN FLAT SIG" + + "NGREEK VOCAL NOTATION SYMBOL-1GREEK VOCAL NOTATION SYMBOL-2GREEK VOCAL N" + + "OTATION SYMBOL-3GREEK VOCAL NOTATION SYMBOL-4GREEK VOCAL NOTATION SYMBOL" + + "-5GREEK VOCAL NOTATION SYMBOL-6GREEK VOCAL NOTATION SYMBOL-7GREEK VOCAL " + + "NOTATION SYMBOL-8GREEK VOCAL NOTATION SYMBOL-9GREEK VOCAL NOTATION SYMBO" + + "L-10GREEK VOCAL NOTATION SYMBOL-11GREEK VOCAL NOTATION SYMBOL-12GREEK VO" + + "CAL NOTATION SYMBOL-13GREEK VOCAL NOTATION SYMBOL-14GREEK VOCAL NOTATION" + + " SYMBOL-15GREEK VOCAL NOTATION SYMBOL-16GREEK VOCAL NOTATION SYMBOL-17GR" + + "EEK VOCAL NOTATION SYMBOL-18GREEK VOCAL NOTATION SYMBOL-19GREEK VOCAL NO" + + "TATION SYMBOL-20GREEK VOCAL NOTATION SYMBOL-21GREEK VOCAL NOTATION SYMBO" + + "L-22GREEK VOCAL NOTATION SYMBOL-23GREEK VOCAL NOTATION SYMBOL-24GREEK VO" + + "CAL NOTATION SYMBOL-50GREEK VOCAL NOTATION SYMBOL-51GREEK VOCAL NOTATION" + + " SYMBOL-52GREEK VOCAL NOTATION SYMBOL-53GREEK VOCAL NOTATION SYMBOL-54GR" + + "EEK INSTRUMENTAL NOTATION SYMBOL-1GREEK INSTRUMENTAL NOTATION SYMBOL-2GR" + + "EEK INSTRUMENTAL NOTATION SYMBOL-4GREEK INSTRUMENTAL NOTATION SYMBOL-5GR" + + "EEK INSTRUMENTAL NOTATION SYMBOL-7GREEK INSTRUMENTAL NOTATION SYMBOL-8GR" + + "EEK INSTRUMENTAL NOTATION SYMBOL-11GREEK INSTRUMENTAL NOTATION SYMBOL-12" + + "GREEK INSTRUMENTAL NOTATION SYMBOL-13GREEK INSTRUMENTAL NOTATION SYMBOL-" + + "14GREEK INSTRUMENTAL NOTATION SYMBOL-17GREEK INSTRUMENTAL NOTATION SYMBO" + + "L-18GREEK INSTRUMENTAL NOTATION SYMBOL-19GREEK INSTRUMENTAL NOTATION SYM" + + "BOL-23GREEK INSTRUMENTAL NOTATION SYMBOL-24GREEK INSTRUMENTAL NOTATION S" + + "YMBOL-25GREEK INSTRUMENTAL NOTATION SYMBOL-26GREEK INSTRUMENTAL NOTATION" + + " SYMBOL-27GREEK INSTRUMENTAL NOTATION SYMBOL-29GREEK INSTRUMENTAL NOTATI" + + "ON SYMBOL-30GREEK INSTRUMENTAL NOTATION SYMBOL-32GREEK INSTRUMENTAL NOTA" + + "TION SYMBOL-36GREEK INSTRUMENTAL NOTATION SYMBOL-37GREEK INSTRUMENTAL NO") + ("" + + "TATION SYMBOL-38GREEK INSTRUMENTAL NOTATION SYMBOL-39GREEK INSTRUMENTAL " + + "NOTATION SYMBOL-40GREEK INSTRUMENTAL NOTATION SYMBOL-42GREEK INSTRUMENTA" + + "L NOTATION SYMBOL-43GREEK INSTRUMENTAL NOTATION SYMBOL-45GREEK INSTRUMEN" + + "TAL NOTATION SYMBOL-47GREEK INSTRUMENTAL NOTATION SYMBOL-48GREEK INSTRUM" + + "ENTAL NOTATION SYMBOL-49GREEK INSTRUMENTAL NOTATION SYMBOL-50GREEK INSTR" + + "UMENTAL NOTATION SYMBOL-51GREEK INSTRUMENTAL NOTATION SYMBOL-52GREEK INS" + + "TRUMENTAL NOTATION SYMBOL-53GREEK INSTRUMENTAL NOTATION SYMBOL-54COMBINI" + + "NG GREEK MUSICAL TRISEMECOMBINING GREEK MUSICAL TETRASEMECOMBINING GREEK" + + " MUSICAL PENTASEMEGREEK MUSICAL LEIMMAMONOGRAM FOR EARTHDIGRAM FOR HEAVE" + + "NLY EARTHDIGRAM FOR HUMAN EARTHDIGRAM FOR EARTHLY HEAVENDIGRAM FOR EARTH" + + "LY HUMANDIGRAM FOR EARTHTETRAGRAM FOR CENTRETETRAGRAM FOR FULL CIRCLETET" + + "RAGRAM FOR MIREDTETRAGRAM FOR BARRIERTETRAGRAM FOR KEEPING SMALLTETRAGRA" + + "M FOR CONTRARIETYTETRAGRAM FOR ASCENTTETRAGRAM FOR OPPOSITIONTETRAGRAM F" + + "OR BRANCHING OUTTETRAGRAM FOR DEFECTIVENESS OR DISTORTIONTETRAGRAM FOR D" + + "IVERGENCETETRAGRAM FOR YOUTHFULNESSTETRAGRAM FOR INCREASETETRAGRAM FOR P" + + "ENETRATIONTETRAGRAM FOR REACHTETRAGRAM FOR CONTACTTETRAGRAM FOR HOLDING " + + "BACKTETRAGRAM FOR WAITINGTETRAGRAM FOR FOLLOWINGTETRAGRAM FOR ADVANCETET" + + "RAGRAM FOR RELEASETETRAGRAM FOR RESISTANCETETRAGRAM FOR EASETETRAGRAM FO" + + "R JOYTETRAGRAM FOR CONTENTIONTETRAGRAM FOR ENDEAVOURTETRAGRAM FOR DUTIES" + + "TETRAGRAM FOR CHANGETETRAGRAM FOR DECISIVENESSTETRAGRAM FOR BOLD RESOLUT" + + "IONTETRAGRAM FOR PACKINGTETRAGRAM FOR LEGIONTETRAGRAM FOR CLOSENESSTETRA" + + "GRAM FOR KINSHIPTETRAGRAM FOR GATHERINGTETRAGRAM FOR STRENGTHTETRAGRAM F" + + "OR PURITYTETRAGRAM FOR FULLNESSTETRAGRAM FOR RESIDENCETETRAGRAM FOR LAW " + + "OR MODELTETRAGRAM FOR RESPONSETETRAGRAM FOR GOING TO MEETTETRAGRAM FOR E" + + "NCOUNTERSTETRAGRAM FOR STOVETETRAGRAM FOR GREATNESSTETRAGRAM FOR ENLARGE" + + "MENTTETRAGRAM FOR PATTERNTETRAGRAM FOR RITUALTETRAGRAM FOR FLIGHTTETRAGR" + + "AM FOR VASTNESS OR WASTINGTETRAGRAM FOR CONSTANCYTETRAGRAM FOR MEASURETE" + + "TRAGRAM FOR ETERNITYTETRAGRAM FOR UNITYTETRAGRAM FOR DIMINISHMENTTETRAGR" + + "AM FOR CLOSED MOUTHTETRAGRAM FOR GUARDEDNESSTETRAGRAM FOR GATHERING INTE" + + "TRAGRAM FOR MASSINGTETRAGRAM FOR ACCUMULATIONTETRAGRAM FOR EMBELLISHMENT" + + "TETRAGRAM FOR DOUBTTETRAGRAM FOR WATCHTETRAGRAM FOR SINKINGTETRAGRAM FOR" + + " INNERTETRAGRAM FOR DEPARTURETETRAGRAM FOR DARKENINGTETRAGRAM FOR DIMMIN" + + "GTETRAGRAM FOR EXHAUSTIONTETRAGRAM FOR SEVERANCETETRAGRAM FOR STOPPAGETE" + + "TRAGRAM FOR HARDNESSTETRAGRAM FOR COMPLETIONTETRAGRAM FOR CLOSURETETRAGR" + + "AM FOR FAILURETETRAGRAM FOR AGGRAVATIONTETRAGRAM FOR COMPLIANCETETRAGRAM" + + " FOR ON THE VERGETETRAGRAM FOR DIFFICULTIESTETRAGRAM FOR LABOURINGTETRAG" + + "RAM FOR FOSTERINGCOUNTING ROD UNIT DIGIT ONECOUNTING ROD UNIT DIGIT TWOC" + + "OUNTING ROD UNIT DIGIT THREECOUNTING ROD UNIT DIGIT FOURCOUNTING ROD UNI" + + "T DIGIT FIVECOUNTING ROD UNIT DIGIT SIXCOUNTING ROD UNIT DIGIT SEVENCOUN" + + "TING ROD UNIT DIGIT EIGHTCOUNTING ROD UNIT DIGIT NINECOUNTING ROD TENS D" + + "IGIT ONECOUNTING ROD TENS DIGIT TWOCOUNTING ROD TENS DIGIT THREECOUNTING" + + " ROD TENS DIGIT FOURCOUNTING ROD TENS DIGIT FIVECOUNTING ROD TENS DIGIT " + + "SIXCOUNTING ROD TENS DIGIT SEVENCOUNTING ROD TENS DIGIT EIGHTCOUNTING RO" + + "D TENS DIGIT NINEMATHEMATICAL BOLD CAPITAL AMATHEMATICAL BOLD CAPITAL BM" + + "ATHEMATICAL BOLD CAPITAL CMATHEMATICAL BOLD CAPITAL DMATHEMATICAL BOLD C" + + "APITAL EMATHEMATICAL BOLD CAPITAL FMATHEMATICAL BOLD CAPITAL GMATHEMATIC" + + "AL BOLD CAPITAL HMATHEMATICAL BOLD CAPITAL IMATHEMATICAL BOLD CAPITAL JM" + + "ATHEMATICAL BOLD CAPITAL KMATHEMATICAL BOLD CAPITAL LMATHEMATICAL BOLD C" + + "APITAL MMATHEMATICAL BOLD CAPITAL NMATHEMATICAL BOLD CAPITAL OMATHEMATIC" + + "AL BOLD CAPITAL PMATHEMATICAL BOLD CAPITAL QMATHEMATICAL BOLD CAPITAL RM" + + "ATHEMATICAL BOLD CAPITAL SMATHEMATICAL BOLD CAPITAL TMATHEMATICAL BOLD C" + + "APITAL UMATHEMATICAL BOLD CAPITAL VMATHEMATICAL BOLD CAPITAL WMATHEMATIC" + + "AL BOLD CAPITAL XMATHEMATICAL BOLD CAPITAL YMATHEMATICAL BOLD CAPITAL ZM" + + "ATHEMATICAL BOLD SMALL AMATHEMATICAL BOLD SMALL BMATHEMATICAL BOLD SMALL" + + " CMATHEMATICAL BOLD SMALL DMATHEMATICAL BOLD SMALL EMATHEMATICAL BOLD SM" + + "ALL FMATHEMATICAL BOLD SMALL GMATHEMATICAL BOLD SMALL HMATHEMATICAL BOLD" + + " SMALL IMATHEMATICAL BOLD SMALL JMATHEMATICAL BOLD SMALL KMATHEMATICAL B" + + "OLD SMALL LMATHEMATICAL BOLD SMALL MMATHEMATICAL BOLD SMALL NMATHEMATICA" + + "L BOLD SMALL OMATHEMATICAL BOLD SMALL PMATHEMATICAL BOLD SMALL QMATHEMAT" + + "ICAL BOLD SMALL RMATHEMATICAL BOLD SMALL SMATHEMATICAL BOLD SMALL TMATHE" + + "MATICAL BOLD SMALL UMATHEMATICAL BOLD SMALL VMATHEMATICAL BOLD SMALL WMA" + + "THEMATICAL BOLD SMALL XMATHEMATICAL BOLD SMALL YMATHEMATICAL BOLD SMALL " + + "ZMATHEMATICAL ITALIC CAPITAL AMATHEMATICAL ITALIC CAPITAL BMATHEMATICAL " + + "ITALIC CAPITAL CMATHEMATICAL ITALIC CAPITAL DMATHEMATICAL ITALIC CAPITAL") + ("" + + " EMATHEMATICAL ITALIC CAPITAL FMATHEMATICAL ITALIC CAPITAL GMATHEMATICAL" + + " ITALIC CAPITAL HMATHEMATICAL ITALIC CAPITAL IMATHEMATICAL ITALIC CAPITA" + + "L JMATHEMATICAL ITALIC CAPITAL KMATHEMATICAL ITALIC CAPITAL LMATHEMATICA" + + "L ITALIC CAPITAL MMATHEMATICAL ITALIC CAPITAL NMATHEMATICAL ITALIC CAPIT" + + "AL OMATHEMATICAL ITALIC CAPITAL PMATHEMATICAL ITALIC CAPITAL QMATHEMATIC" + + "AL ITALIC CAPITAL RMATHEMATICAL ITALIC CAPITAL SMATHEMATICAL ITALIC CAPI" + + "TAL TMATHEMATICAL ITALIC CAPITAL UMATHEMATICAL ITALIC CAPITAL VMATHEMATI" + + "CAL ITALIC CAPITAL WMATHEMATICAL ITALIC CAPITAL XMATHEMATICAL ITALIC CAP" + + "ITAL YMATHEMATICAL ITALIC CAPITAL ZMATHEMATICAL ITALIC SMALL AMATHEMATIC" + + "AL ITALIC SMALL BMATHEMATICAL ITALIC SMALL CMATHEMATICAL ITALIC SMALL DM" + + "ATHEMATICAL ITALIC SMALL EMATHEMATICAL ITALIC SMALL FMATHEMATICAL ITALIC" + + " SMALL GMATHEMATICAL ITALIC SMALL IMATHEMATICAL ITALIC SMALL JMATHEMATIC" + + "AL ITALIC SMALL KMATHEMATICAL ITALIC SMALL LMATHEMATICAL ITALIC SMALL MM" + + "ATHEMATICAL ITALIC SMALL NMATHEMATICAL ITALIC SMALL OMATHEMATICAL ITALIC" + + " SMALL PMATHEMATICAL ITALIC SMALL QMATHEMATICAL ITALIC SMALL RMATHEMATIC" + + "AL ITALIC SMALL SMATHEMATICAL ITALIC SMALL TMATHEMATICAL ITALIC SMALL UM" + + "ATHEMATICAL ITALIC SMALL VMATHEMATICAL ITALIC SMALL WMATHEMATICAL ITALIC" + + " SMALL XMATHEMATICAL ITALIC SMALL YMATHEMATICAL ITALIC SMALL ZMATHEMATIC" + + "AL BOLD ITALIC CAPITAL AMATHEMATICAL BOLD ITALIC CAPITAL BMATHEMATICAL B" + + "OLD ITALIC CAPITAL CMATHEMATICAL BOLD ITALIC CAPITAL DMATHEMATICAL BOLD " + + "ITALIC CAPITAL EMATHEMATICAL BOLD ITALIC CAPITAL FMATHEMATICAL BOLD ITAL" + + "IC CAPITAL GMATHEMATICAL BOLD ITALIC CAPITAL HMATHEMATICAL BOLD ITALIC C" + + "APITAL IMATHEMATICAL BOLD ITALIC CAPITAL JMATHEMATICAL BOLD ITALIC CAPIT" + + "AL KMATHEMATICAL BOLD ITALIC CAPITAL LMATHEMATICAL BOLD ITALIC CAPITAL M" + + "MATHEMATICAL BOLD ITALIC CAPITAL NMATHEMATICAL BOLD ITALIC CAPITAL OMATH" + + "EMATICAL BOLD ITALIC CAPITAL PMATHEMATICAL BOLD ITALIC CAPITAL QMATHEMAT" + + "ICAL BOLD ITALIC CAPITAL RMATHEMATICAL BOLD ITALIC CAPITAL SMATHEMATICAL" + + " BOLD ITALIC CAPITAL TMATHEMATICAL BOLD ITALIC CAPITAL UMATHEMATICAL BOL" + + "D ITALIC CAPITAL VMATHEMATICAL BOLD ITALIC CAPITAL WMATHEMATICAL BOLD IT" + + "ALIC CAPITAL XMATHEMATICAL BOLD ITALIC CAPITAL YMATHEMATICAL BOLD ITALIC" + + " CAPITAL ZMATHEMATICAL BOLD ITALIC SMALL AMATHEMATICAL BOLD ITALIC SMALL" + + " BMATHEMATICAL BOLD ITALIC SMALL CMATHEMATICAL BOLD ITALIC SMALL DMATHEM" + + "ATICAL BOLD ITALIC SMALL EMATHEMATICAL BOLD ITALIC SMALL FMATHEMATICAL B" + + "OLD ITALIC SMALL GMATHEMATICAL BOLD ITALIC SMALL HMATHEMATICAL BOLD ITAL" + + "IC SMALL IMATHEMATICAL BOLD ITALIC SMALL JMATHEMATICAL BOLD ITALIC SMALL" + + " KMATHEMATICAL BOLD ITALIC SMALL LMATHEMATICAL BOLD ITALIC SMALL MMATHEM" + + "ATICAL BOLD ITALIC SMALL NMATHEMATICAL BOLD ITALIC SMALL OMATHEMATICAL B" + + "OLD ITALIC SMALL PMATHEMATICAL BOLD ITALIC SMALL QMATHEMATICAL BOLD ITAL" + + "IC SMALL RMATHEMATICAL BOLD ITALIC SMALL SMATHEMATICAL BOLD ITALIC SMALL" + + " TMATHEMATICAL BOLD ITALIC SMALL UMATHEMATICAL BOLD ITALIC SMALL VMATHEM" + + "ATICAL BOLD ITALIC SMALL WMATHEMATICAL BOLD ITALIC SMALL XMATHEMATICAL B" + + "OLD ITALIC SMALL YMATHEMATICAL BOLD ITALIC SMALL ZMATHEMATICAL SCRIPT CA" + + "PITAL AMATHEMATICAL SCRIPT CAPITAL CMATHEMATICAL SCRIPT CAPITAL DMATHEMA" + + "TICAL SCRIPT CAPITAL GMATHEMATICAL SCRIPT CAPITAL JMATHEMATICAL SCRIPT C" + + "APITAL KMATHEMATICAL SCRIPT CAPITAL NMATHEMATICAL SCRIPT CAPITAL OMATHEM" + + "ATICAL SCRIPT CAPITAL PMATHEMATICAL SCRIPT CAPITAL QMATHEMATICAL SCRIPT " + + "CAPITAL SMATHEMATICAL SCRIPT CAPITAL TMATHEMATICAL SCRIPT CAPITAL UMATHE" + + "MATICAL SCRIPT CAPITAL VMATHEMATICAL SCRIPT CAPITAL WMATHEMATICAL SCRIPT" + + " CAPITAL XMATHEMATICAL SCRIPT CAPITAL YMATHEMATICAL SCRIPT CAPITAL ZMATH" + + "EMATICAL SCRIPT SMALL AMATHEMATICAL SCRIPT SMALL BMATHEMATICAL SCRIPT SM" + + "ALL CMATHEMATICAL SCRIPT SMALL DMATHEMATICAL SCRIPT SMALL FMATHEMATICAL " + + "SCRIPT SMALL HMATHEMATICAL SCRIPT SMALL IMATHEMATICAL SCRIPT SMALL JMATH" + + "EMATICAL SCRIPT SMALL KMATHEMATICAL SCRIPT SMALL LMATHEMATICAL SCRIPT SM" + + "ALL MMATHEMATICAL SCRIPT SMALL NMATHEMATICAL SCRIPT SMALL PMATHEMATICAL " + + "SCRIPT SMALL QMATHEMATICAL SCRIPT SMALL RMATHEMATICAL SCRIPT SMALL SMATH" + + "EMATICAL SCRIPT SMALL TMATHEMATICAL SCRIPT SMALL UMATHEMATICAL SCRIPT SM" + + "ALL VMATHEMATICAL SCRIPT SMALL WMATHEMATICAL SCRIPT SMALL XMATHEMATICAL " + + "SCRIPT SMALL YMATHEMATICAL SCRIPT SMALL ZMATHEMATICAL BOLD SCRIPT CAPITA" + + "L AMATHEMATICAL BOLD SCRIPT CAPITAL BMATHEMATICAL BOLD SCRIPT CAPITAL CM" + + "ATHEMATICAL BOLD SCRIPT CAPITAL DMATHEMATICAL BOLD SCRIPT CAPITAL EMATHE" + + "MATICAL BOLD SCRIPT CAPITAL FMATHEMATICAL BOLD SCRIPT CAPITAL GMATHEMATI" + + "CAL BOLD SCRIPT CAPITAL HMATHEMATICAL BOLD SCRIPT CAPITAL IMATHEMATICAL " + + "BOLD SCRIPT CAPITAL JMATHEMATICAL BOLD SCRIPT CAPITAL KMATHEMATICAL BOLD" + + " SCRIPT CAPITAL LMATHEMATICAL BOLD SCRIPT CAPITAL MMATHEMATICAL BOLD SCR") + ("" + + "IPT CAPITAL NMATHEMATICAL BOLD SCRIPT CAPITAL OMATHEMATICAL BOLD SCRIPT " + + "CAPITAL PMATHEMATICAL BOLD SCRIPT CAPITAL QMATHEMATICAL BOLD SCRIPT CAPI" + + "TAL RMATHEMATICAL BOLD SCRIPT CAPITAL SMATHEMATICAL BOLD SCRIPT CAPITAL " + + "TMATHEMATICAL BOLD SCRIPT CAPITAL UMATHEMATICAL BOLD SCRIPT CAPITAL VMAT" + + "HEMATICAL BOLD SCRIPT CAPITAL WMATHEMATICAL BOLD SCRIPT CAPITAL XMATHEMA" + + "TICAL BOLD SCRIPT CAPITAL YMATHEMATICAL BOLD SCRIPT CAPITAL ZMATHEMATICA" + + "L BOLD SCRIPT SMALL AMATHEMATICAL BOLD SCRIPT SMALL BMATHEMATICAL BOLD S" + + "CRIPT SMALL CMATHEMATICAL BOLD SCRIPT SMALL DMATHEMATICAL BOLD SCRIPT SM" + + "ALL EMATHEMATICAL BOLD SCRIPT SMALL FMATHEMATICAL BOLD SCRIPT SMALL GMAT" + + "HEMATICAL BOLD SCRIPT SMALL HMATHEMATICAL BOLD SCRIPT SMALL IMATHEMATICA" + + "L BOLD SCRIPT SMALL JMATHEMATICAL BOLD SCRIPT SMALL KMATHEMATICAL BOLD S" + + "CRIPT SMALL LMATHEMATICAL BOLD SCRIPT SMALL MMATHEMATICAL BOLD SCRIPT SM" + + "ALL NMATHEMATICAL BOLD SCRIPT SMALL OMATHEMATICAL BOLD SCRIPT SMALL PMAT" + + "HEMATICAL BOLD SCRIPT SMALL QMATHEMATICAL BOLD SCRIPT SMALL RMATHEMATICA" + + "L BOLD SCRIPT SMALL SMATHEMATICAL BOLD SCRIPT SMALL TMATHEMATICAL BOLD S" + + "CRIPT SMALL UMATHEMATICAL BOLD SCRIPT SMALL VMATHEMATICAL BOLD SCRIPT SM" + + "ALL WMATHEMATICAL BOLD SCRIPT SMALL XMATHEMATICAL BOLD SCRIPT SMALL YMAT" + + "HEMATICAL BOLD SCRIPT SMALL ZMATHEMATICAL FRAKTUR CAPITAL AMATHEMATICAL " + + "FRAKTUR CAPITAL BMATHEMATICAL FRAKTUR CAPITAL DMATHEMATICAL FRAKTUR CAPI" + + "TAL EMATHEMATICAL FRAKTUR CAPITAL FMATHEMATICAL FRAKTUR CAPITAL GMATHEMA" + + "TICAL FRAKTUR CAPITAL JMATHEMATICAL FRAKTUR CAPITAL KMATHEMATICAL FRAKTU" + + "R CAPITAL LMATHEMATICAL FRAKTUR CAPITAL MMATHEMATICAL FRAKTUR CAPITAL NM" + + "ATHEMATICAL FRAKTUR CAPITAL OMATHEMATICAL FRAKTUR CAPITAL PMATHEMATICAL " + + "FRAKTUR CAPITAL QMATHEMATICAL FRAKTUR CAPITAL SMATHEMATICAL FRAKTUR CAPI" + + "TAL TMATHEMATICAL FRAKTUR CAPITAL UMATHEMATICAL FRAKTUR CAPITAL VMATHEMA" + + "TICAL FRAKTUR CAPITAL WMATHEMATICAL FRAKTUR CAPITAL XMATHEMATICAL FRAKTU" + + "R CAPITAL YMATHEMATICAL FRAKTUR SMALL AMATHEMATICAL FRAKTUR SMALL BMATHE" + + "MATICAL FRAKTUR SMALL CMATHEMATICAL FRAKTUR SMALL DMATHEMATICAL FRAKTUR " + + "SMALL EMATHEMATICAL FRAKTUR SMALL FMATHEMATICAL FRAKTUR SMALL GMATHEMATI" + + "CAL FRAKTUR SMALL HMATHEMATICAL FRAKTUR SMALL IMATHEMATICAL FRAKTUR SMAL" + + "L JMATHEMATICAL FRAKTUR SMALL KMATHEMATICAL FRAKTUR SMALL LMATHEMATICAL " + + "FRAKTUR SMALL MMATHEMATICAL FRAKTUR SMALL NMATHEMATICAL FRAKTUR SMALL OM" + + "ATHEMATICAL FRAKTUR SMALL PMATHEMATICAL FRAKTUR SMALL QMATHEMATICAL FRAK" + + "TUR SMALL RMATHEMATICAL FRAKTUR SMALL SMATHEMATICAL FRAKTUR SMALL TMATHE" + + "MATICAL FRAKTUR SMALL UMATHEMATICAL FRAKTUR SMALL VMATHEMATICAL FRAKTUR " + + "SMALL WMATHEMATICAL FRAKTUR SMALL XMATHEMATICAL FRAKTUR SMALL YMATHEMATI" + + "CAL FRAKTUR SMALL ZMATHEMATICAL DOUBLE-STRUCK CAPITAL AMATHEMATICAL DOUB" + + "LE-STRUCK CAPITAL BMATHEMATICAL DOUBLE-STRUCK CAPITAL DMATHEMATICAL DOUB" + + "LE-STRUCK CAPITAL EMATHEMATICAL DOUBLE-STRUCK CAPITAL FMATHEMATICAL DOUB" + + "LE-STRUCK CAPITAL GMATHEMATICAL DOUBLE-STRUCK CAPITAL IMATHEMATICAL DOUB" + + "LE-STRUCK CAPITAL JMATHEMATICAL DOUBLE-STRUCK CAPITAL KMATHEMATICAL DOUB" + + "LE-STRUCK CAPITAL LMATHEMATICAL DOUBLE-STRUCK CAPITAL MMATHEMATICAL DOUB" + + "LE-STRUCK CAPITAL OMATHEMATICAL DOUBLE-STRUCK CAPITAL SMATHEMATICAL DOUB" + + "LE-STRUCK CAPITAL TMATHEMATICAL DOUBLE-STRUCK CAPITAL UMATHEMATICAL DOUB" + + "LE-STRUCK CAPITAL VMATHEMATICAL DOUBLE-STRUCK CAPITAL WMATHEMATICAL DOUB" + + "LE-STRUCK CAPITAL XMATHEMATICAL DOUBLE-STRUCK CAPITAL YMATHEMATICAL DOUB" + + "LE-STRUCK SMALL AMATHEMATICAL DOUBLE-STRUCK SMALL BMATHEMATICAL DOUBLE-S" + + "TRUCK SMALL CMATHEMATICAL DOUBLE-STRUCK SMALL DMATHEMATICAL DOUBLE-STRUC" + + "K SMALL EMATHEMATICAL DOUBLE-STRUCK SMALL FMATHEMATICAL DOUBLE-STRUCK SM" + + "ALL GMATHEMATICAL DOUBLE-STRUCK SMALL HMATHEMATICAL DOUBLE-STRUCK SMALL " + + "IMATHEMATICAL DOUBLE-STRUCK SMALL JMATHEMATICAL DOUBLE-STRUCK SMALL KMAT" + + "HEMATICAL DOUBLE-STRUCK SMALL LMATHEMATICAL DOUBLE-STRUCK SMALL MMATHEMA" + + "TICAL DOUBLE-STRUCK SMALL NMATHEMATICAL DOUBLE-STRUCK SMALL OMATHEMATICA" + + "L DOUBLE-STRUCK SMALL PMATHEMATICAL DOUBLE-STRUCK SMALL QMATHEMATICAL DO" + + "UBLE-STRUCK SMALL RMATHEMATICAL DOUBLE-STRUCK SMALL SMATHEMATICAL DOUBLE" + + "-STRUCK SMALL TMATHEMATICAL DOUBLE-STRUCK SMALL UMATHEMATICAL DOUBLE-STR" + + "UCK SMALL VMATHEMATICAL DOUBLE-STRUCK SMALL WMATHEMATICAL DOUBLE-STRUCK " + + "SMALL XMATHEMATICAL DOUBLE-STRUCK SMALL YMATHEMATICAL DOUBLE-STRUCK SMAL" + + "L ZMATHEMATICAL BOLD FRAKTUR CAPITAL AMATHEMATICAL BOLD FRAKTUR CAPITAL " + + "BMATHEMATICAL BOLD FRAKTUR CAPITAL CMATHEMATICAL BOLD FRAKTUR CAPITAL DM" + + "ATHEMATICAL BOLD FRAKTUR CAPITAL EMATHEMATICAL BOLD FRAKTUR CAPITAL FMAT" + + "HEMATICAL BOLD FRAKTUR CAPITAL GMATHEMATICAL BOLD FRAKTUR CAPITAL HMATHE" + + "MATICAL BOLD FRAKTUR CAPITAL IMATHEMATICAL BOLD FRAKTUR CAPITAL JMATHEMA" + + "TICAL BOLD FRAKTUR CAPITAL KMATHEMATICAL BOLD FRAKTUR CAPITAL LMATHEMATI") + ("" + + "CAL BOLD FRAKTUR CAPITAL MMATHEMATICAL BOLD FRAKTUR CAPITAL NMATHEMATICA" + + "L BOLD FRAKTUR CAPITAL OMATHEMATICAL BOLD FRAKTUR CAPITAL PMATHEMATICAL " + + "BOLD FRAKTUR CAPITAL QMATHEMATICAL BOLD FRAKTUR CAPITAL RMATHEMATICAL BO" + + "LD FRAKTUR CAPITAL SMATHEMATICAL BOLD FRAKTUR CAPITAL TMATHEMATICAL BOLD" + + " FRAKTUR CAPITAL UMATHEMATICAL BOLD FRAKTUR CAPITAL VMATHEMATICAL BOLD F" + + "RAKTUR CAPITAL WMATHEMATICAL BOLD FRAKTUR CAPITAL XMATHEMATICAL BOLD FRA" + + "KTUR CAPITAL YMATHEMATICAL BOLD FRAKTUR CAPITAL ZMATHEMATICAL BOLD FRAKT" + + "UR SMALL AMATHEMATICAL BOLD FRAKTUR SMALL BMATHEMATICAL BOLD FRAKTUR SMA" + + "LL CMATHEMATICAL BOLD FRAKTUR SMALL DMATHEMATICAL BOLD FRAKTUR SMALL EMA" + + "THEMATICAL BOLD FRAKTUR SMALL FMATHEMATICAL BOLD FRAKTUR SMALL GMATHEMAT" + + "ICAL BOLD FRAKTUR SMALL HMATHEMATICAL BOLD FRAKTUR SMALL IMATHEMATICAL B" + + "OLD FRAKTUR SMALL JMATHEMATICAL BOLD FRAKTUR SMALL KMATHEMATICAL BOLD FR" + + "AKTUR SMALL LMATHEMATICAL BOLD FRAKTUR SMALL MMATHEMATICAL BOLD FRAKTUR " + + "SMALL NMATHEMATICAL BOLD FRAKTUR SMALL OMATHEMATICAL BOLD FRAKTUR SMALL " + + "PMATHEMATICAL BOLD FRAKTUR SMALL QMATHEMATICAL BOLD FRAKTUR SMALL RMATHE" + + "MATICAL BOLD FRAKTUR SMALL SMATHEMATICAL BOLD FRAKTUR SMALL TMATHEMATICA" + + "L BOLD FRAKTUR SMALL UMATHEMATICAL BOLD FRAKTUR SMALL VMATHEMATICAL BOLD" + + " FRAKTUR SMALL WMATHEMATICAL BOLD FRAKTUR SMALL XMATHEMATICAL BOLD FRAKT" + + "UR SMALL YMATHEMATICAL BOLD FRAKTUR SMALL ZMATHEMATICAL SANS-SERIF CAPIT" + + "AL AMATHEMATICAL SANS-SERIF CAPITAL BMATHEMATICAL SANS-SERIF CAPITAL CMA" + + "THEMATICAL SANS-SERIF CAPITAL DMATHEMATICAL SANS-SERIF CAPITAL EMATHEMAT" + + "ICAL SANS-SERIF CAPITAL FMATHEMATICAL SANS-SERIF CAPITAL GMATHEMATICAL S" + + "ANS-SERIF CAPITAL HMATHEMATICAL SANS-SERIF CAPITAL IMATHEMATICAL SANS-SE" + + "RIF CAPITAL JMATHEMATICAL SANS-SERIF CAPITAL KMATHEMATICAL SANS-SERIF CA" + + "PITAL LMATHEMATICAL SANS-SERIF CAPITAL MMATHEMATICAL SANS-SERIF CAPITAL " + + "NMATHEMATICAL SANS-SERIF CAPITAL OMATHEMATICAL SANS-SERIF CAPITAL PMATHE" + + "MATICAL SANS-SERIF CAPITAL QMATHEMATICAL SANS-SERIF CAPITAL RMATHEMATICA" + + "L SANS-SERIF CAPITAL SMATHEMATICAL SANS-SERIF CAPITAL TMATHEMATICAL SANS" + + "-SERIF CAPITAL UMATHEMATICAL SANS-SERIF CAPITAL VMATHEMATICAL SANS-SERIF" + + " CAPITAL WMATHEMATICAL SANS-SERIF CAPITAL XMATHEMATICAL SANS-SERIF CAPIT" + + "AL YMATHEMATICAL SANS-SERIF CAPITAL ZMATHEMATICAL SANS-SERIF SMALL AMATH" + + "EMATICAL SANS-SERIF SMALL BMATHEMATICAL SANS-SERIF SMALL CMATHEMATICAL S" + + "ANS-SERIF SMALL DMATHEMATICAL SANS-SERIF SMALL EMATHEMATICAL SANS-SERIF " + + "SMALL FMATHEMATICAL SANS-SERIF SMALL GMATHEMATICAL SANS-SERIF SMALL HMAT" + + "HEMATICAL SANS-SERIF SMALL IMATHEMATICAL SANS-SERIF SMALL JMATHEMATICAL " + + "SANS-SERIF SMALL KMATHEMATICAL SANS-SERIF SMALL LMATHEMATICAL SANS-SERIF" + + " SMALL MMATHEMATICAL SANS-SERIF SMALL NMATHEMATICAL SANS-SERIF SMALL OMA" + + "THEMATICAL SANS-SERIF SMALL PMATHEMATICAL SANS-SERIF SMALL QMATHEMATICAL" + + " SANS-SERIF SMALL RMATHEMATICAL SANS-SERIF SMALL SMATHEMATICAL SANS-SERI" + + "F SMALL TMATHEMATICAL SANS-SERIF SMALL UMATHEMATICAL SANS-SERIF SMALL VM" + + "ATHEMATICAL SANS-SERIF SMALL WMATHEMATICAL SANS-SERIF SMALL XMATHEMATICA" + + "L SANS-SERIF SMALL YMATHEMATICAL SANS-SERIF SMALL ZMATHEMATICAL SANS-SER" + + "IF BOLD CAPITAL AMATHEMATICAL SANS-SERIF BOLD CAPITAL BMATHEMATICAL SANS" + + "-SERIF BOLD CAPITAL CMATHEMATICAL SANS-SERIF BOLD CAPITAL DMATHEMATICAL " + + "SANS-SERIF BOLD CAPITAL EMATHEMATICAL SANS-SERIF BOLD CAPITAL FMATHEMATI" + + "CAL SANS-SERIF BOLD CAPITAL GMATHEMATICAL SANS-SERIF BOLD CAPITAL HMATHE" + + "MATICAL SANS-SERIF BOLD CAPITAL IMATHEMATICAL SANS-SERIF BOLD CAPITAL JM" + + "ATHEMATICAL SANS-SERIF BOLD CAPITAL KMATHEMATICAL SANS-SERIF BOLD CAPITA" + + "L LMATHEMATICAL SANS-SERIF BOLD CAPITAL MMATHEMATICAL SANS-SERIF BOLD CA" + + "PITAL NMATHEMATICAL SANS-SERIF BOLD CAPITAL OMATHEMATICAL SANS-SERIF BOL" + + "D CAPITAL PMATHEMATICAL SANS-SERIF BOLD CAPITAL QMATHEMATICAL SANS-SERIF" + + " BOLD CAPITAL RMATHEMATICAL SANS-SERIF BOLD CAPITAL SMATHEMATICAL SANS-S" + + "ERIF BOLD CAPITAL TMATHEMATICAL SANS-SERIF BOLD CAPITAL UMATHEMATICAL SA" + + "NS-SERIF BOLD CAPITAL VMATHEMATICAL SANS-SERIF BOLD CAPITAL WMATHEMATICA" + + "L SANS-SERIF BOLD CAPITAL XMATHEMATICAL SANS-SERIF BOLD CAPITAL YMATHEMA" + + "TICAL SANS-SERIF BOLD CAPITAL ZMATHEMATICAL SANS-SERIF BOLD SMALL AMATHE" + + "MATICAL SANS-SERIF BOLD SMALL BMATHEMATICAL SANS-SERIF BOLD SMALL CMATHE" + + "MATICAL SANS-SERIF BOLD SMALL DMATHEMATICAL SANS-SERIF BOLD SMALL EMATHE" + + "MATICAL SANS-SERIF BOLD SMALL FMATHEMATICAL SANS-SERIF BOLD SMALL GMATHE" + + "MATICAL SANS-SERIF BOLD SMALL HMATHEMATICAL SANS-SERIF BOLD SMALL IMATHE" + + "MATICAL SANS-SERIF BOLD SMALL JMATHEMATICAL SANS-SERIF BOLD SMALL KMATHE" + + "MATICAL SANS-SERIF BOLD SMALL LMATHEMATICAL SANS-SERIF BOLD SMALL MMATHE" + + "MATICAL SANS-SERIF BOLD SMALL NMATHEMATICAL SANS-SERIF BOLD SMALL OMATHE" + + "MATICAL SANS-SERIF BOLD SMALL PMATHEMATICAL SANS-SERIF BOLD SMALL QMATHE") + ("" + + "MATICAL SANS-SERIF BOLD SMALL RMATHEMATICAL SANS-SERIF BOLD SMALL SMATHE" + + "MATICAL SANS-SERIF BOLD SMALL TMATHEMATICAL SANS-SERIF BOLD SMALL UMATHE" + + "MATICAL SANS-SERIF BOLD SMALL VMATHEMATICAL SANS-SERIF BOLD SMALL WMATHE" + + "MATICAL SANS-SERIF BOLD SMALL XMATHEMATICAL SANS-SERIF BOLD SMALL YMATHE" + + "MATICAL SANS-SERIF BOLD SMALL ZMATHEMATICAL SANS-SERIF ITALIC CAPITAL AM" + + "ATHEMATICAL SANS-SERIF ITALIC CAPITAL BMATHEMATICAL SANS-SERIF ITALIC CA" + + "PITAL CMATHEMATICAL SANS-SERIF ITALIC CAPITAL DMATHEMATICAL SANS-SERIF I" + + "TALIC CAPITAL EMATHEMATICAL SANS-SERIF ITALIC CAPITAL FMATHEMATICAL SANS" + + "-SERIF ITALIC CAPITAL GMATHEMATICAL SANS-SERIF ITALIC CAPITAL HMATHEMATI" + + "CAL SANS-SERIF ITALIC CAPITAL IMATHEMATICAL SANS-SERIF ITALIC CAPITAL JM" + + "ATHEMATICAL SANS-SERIF ITALIC CAPITAL KMATHEMATICAL SANS-SERIF ITALIC CA" + + "PITAL LMATHEMATICAL SANS-SERIF ITALIC CAPITAL MMATHEMATICAL SANS-SERIF I" + + "TALIC CAPITAL NMATHEMATICAL SANS-SERIF ITALIC CAPITAL OMATHEMATICAL SANS" + + "-SERIF ITALIC CAPITAL PMATHEMATICAL SANS-SERIF ITALIC CAPITAL QMATHEMATI" + + "CAL SANS-SERIF ITALIC CAPITAL RMATHEMATICAL SANS-SERIF ITALIC CAPITAL SM" + + "ATHEMATICAL SANS-SERIF ITALIC CAPITAL TMATHEMATICAL SANS-SERIF ITALIC CA" + + "PITAL UMATHEMATICAL SANS-SERIF ITALIC CAPITAL VMATHEMATICAL SANS-SERIF I" + + "TALIC CAPITAL WMATHEMATICAL SANS-SERIF ITALIC CAPITAL XMATHEMATICAL SANS" + + "-SERIF ITALIC CAPITAL YMATHEMATICAL SANS-SERIF ITALIC CAPITAL ZMATHEMATI" + + "CAL SANS-SERIF ITALIC SMALL AMATHEMATICAL SANS-SERIF ITALIC SMALL BMATHE" + + "MATICAL SANS-SERIF ITALIC SMALL CMATHEMATICAL SANS-SERIF ITALIC SMALL DM" + + "ATHEMATICAL SANS-SERIF ITALIC SMALL EMATHEMATICAL SANS-SERIF ITALIC SMAL" + + "L FMATHEMATICAL SANS-SERIF ITALIC SMALL GMATHEMATICAL SANS-SERIF ITALIC " + + "SMALL HMATHEMATICAL SANS-SERIF ITALIC SMALL IMATHEMATICAL SANS-SERIF ITA" + + "LIC SMALL JMATHEMATICAL SANS-SERIF ITALIC SMALL KMATHEMATICAL SANS-SERIF" + + " ITALIC SMALL LMATHEMATICAL SANS-SERIF ITALIC SMALL MMATHEMATICAL SANS-S" + + "ERIF ITALIC SMALL NMATHEMATICAL SANS-SERIF ITALIC SMALL OMATHEMATICAL SA" + + "NS-SERIF ITALIC SMALL PMATHEMATICAL SANS-SERIF ITALIC SMALL QMATHEMATICA" + + "L SANS-SERIF ITALIC SMALL RMATHEMATICAL SANS-SERIF ITALIC SMALL SMATHEMA" + + "TICAL SANS-SERIF ITALIC SMALL TMATHEMATICAL SANS-SERIF ITALIC SMALL UMAT" + + "HEMATICAL SANS-SERIF ITALIC SMALL VMATHEMATICAL SANS-SERIF ITALIC SMALL " + + "WMATHEMATICAL SANS-SERIF ITALIC SMALL XMATHEMATICAL SANS-SERIF ITALIC SM" + + "ALL YMATHEMATICAL SANS-SERIF ITALIC SMALL ZMATHEMATICAL SANS-SERIF BOLD " + + "ITALIC CAPITAL AMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BMATHEMATICA" + + "L SANS-SERIF BOLD ITALIC CAPITAL CMATHEMATICAL SANS-SERIF BOLD ITALIC CA" + + "PITAL DMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EMATHEMATICAL SANS-SE" + + "RIF BOLD ITALIC CAPITAL FMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GMA" + + "THEMATICAL SANS-SERIF BOLD ITALIC CAPITAL HMATHEMATICAL SANS-SERIF BOLD " + + "ITALIC CAPITAL IMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL JMATHEMATICA" + + "L SANS-SERIF BOLD ITALIC CAPITAL KMATHEMATICAL SANS-SERIF BOLD ITALIC CA" + + "PITAL LMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MMATHEMATICAL SANS-SE" + + "RIF BOLD ITALIC CAPITAL NMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMA" + + "THEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PMATHEMATICAL SANS-SERIF BOLD " + + "ITALIC CAPITAL QMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RMATHEMATICA" + + "L SANS-SERIF BOLD ITALIC CAPITAL SMATHEMATICAL SANS-SERIF BOLD ITALIC CA" + + "PITAL TMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UMATHEMATICAL SANS-SE" + + "RIF BOLD ITALIC CAPITAL VMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL WMA" + + "THEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XMATHEMATICAL SANS-SERIF BOLD " + + "ITALIC CAPITAL YMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZMATHEMATICA" + + "L SANS-SERIF BOLD ITALIC SMALL AMATHEMATICAL SANS-SERIF BOLD ITALIC SMAL" + + "L BMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CMATHEMATICAL SANS-SERIF BO" + + "LD ITALIC SMALL DMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EMATHEMATICAL" + + " SANS-SERIF BOLD ITALIC SMALL FMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL" + + " GMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL HMATHEMATICAL SANS-SERIF BOL" + + "D ITALIC SMALL IMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL JMATHEMATICAL " + + "SANS-SERIF BOLD ITALIC SMALL KMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL " + + "LMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MMATHEMATICAL SANS-SERIF BOLD" + + " ITALIC SMALL NMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMATHEMATICAL S" + + "ANS-SERIF BOLD ITALIC SMALL PMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q" + + "MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RMATHEMATICAL SANS-SERIF BOLD " + + "ITALIC SMALL SMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TMATHEMATICAL SA" + + "NS-SERIF BOLD ITALIC SMALL UMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL VM" + + "ATHEMATICAL SANS-SERIF BOLD ITALIC SMALL WMATHEMATICAL SANS-SERIF BOLD I" + + "TALIC SMALL XMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL YMATHEMATICAL SAN") + ("" + + "S-SERIF BOLD ITALIC SMALL ZMATHEMATICAL MONOSPACE CAPITAL AMATHEMATICAL " + + "MONOSPACE CAPITAL BMATHEMATICAL MONOSPACE CAPITAL CMATHEMATICAL MONOSPAC" + + "E CAPITAL DMATHEMATICAL MONOSPACE CAPITAL EMATHEMATICAL MONOSPACE CAPITA" + + "L FMATHEMATICAL MONOSPACE CAPITAL GMATHEMATICAL MONOSPACE CAPITAL HMATHE" + + "MATICAL MONOSPACE CAPITAL IMATHEMATICAL MONOSPACE CAPITAL JMATHEMATICAL " + + "MONOSPACE CAPITAL KMATHEMATICAL MONOSPACE CAPITAL LMATHEMATICAL MONOSPAC" + + "E CAPITAL MMATHEMATICAL MONOSPACE CAPITAL NMATHEMATICAL MONOSPACE CAPITA" + + "L OMATHEMATICAL MONOSPACE CAPITAL PMATHEMATICAL MONOSPACE CAPITAL QMATHE" + + "MATICAL MONOSPACE CAPITAL RMATHEMATICAL MONOSPACE CAPITAL SMATHEMATICAL " + + "MONOSPACE CAPITAL TMATHEMATICAL MONOSPACE CAPITAL UMATHEMATICAL MONOSPAC" + + "E CAPITAL VMATHEMATICAL MONOSPACE CAPITAL WMATHEMATICAL MONOSPACE CAPITA" + + "L XMATHEMATICAL MONOSPACE CAPITAL YMATHEMATICAL MONOSPACE CAPITAL ZMATHE" + + "MATICAL MONOSPACE SMALL AMATHEMATICAL MONOSPACE SMALL BMATHEMATICAL MONO" + + "SPACE SMALL CMATHEMATICAL MONOSPACE SMALL DMATHEMATICAL MONOSPACE SMALL " + + "EMATHEMATICAL MONOSPACE SMALL FMATHEMATICAL MONOSPACE SMALL GMATHEMATICA" + + "L MONOSPACE SMALL HMATHEMATICAL MONOSPACE SMALL IMATHEMATICAL MONOSPACE " + + "SMALL JMATHEMATICAL MONOSPACE SMALL KMATHEMATICAL MONOSPACE SMALL LMATHE" + + "MATICAL MONOSPACE SMALL MMATHEMATICAL MONOSPACE SMALL NMATHEMATICAL MONO" + + "SPACE SMALL OMATHEMATICAL MONOSPACE SMALL PMATHEMATICAL MONOSPACE SMALL " + + "QMATHEMATICAL MONOSPACE SMALL RMATHEMATICAL MONOSPACE SMALL SMATHEMATICA" + + "L MONOSPACE SMALL TMATHEMATICAL MONOSPACE SMALL UMATHEMATICAL MONOSPACE " + + "SMALL VMATHEMATICAL MONOSPACE SMALL WMATHEMATICAL MONOSPACE SMALL XMATHE" + + "MATICAL MONOSPACE SMALL YMATHEMATICAL MONOSPACE SMALL ZMATHEMATICAL ITAL" + + "IC SMALL DOTLESS IMATHEMATICAL ITALIC SMALL DOTLESS JMATHEMATICAL BOLD C" + + "APITAL ALPHAMATHEMATICAL BOLD CAPITAL BETAMATHEMATICAL BOLD CAPITAL GAMM" + + "AMATHEMATICAL BOLD CAPITAL DELTAMATHEMATICAL BOLD CAPITAL EPSILONMATHEMA" + + "TICAL BOLD CAPITAL ZETAMATHEMATICAL BOLD CAPITAL ETAMATHEMATICAL BOLD CA" + + "PITAL THETAMATHEMATICAL BOLD CAPITAL IOTAMATHEMATICAL BOLD CAPITAL KAPPA" + + "MATHEMATICAL BOLD CAPITAL LAMDAMATHEMATICAL BOLD CAPITAL MUMATHEMATICAL " + + "BOLD CAPITAL NUMATHEMATICAL BOLD CAPITAL XIMATHEMATICAL BOLD CAPITAL OMI" + + "CRONMATHEMATICAL BOLD CAPITAL PIMATHEMATICAL BOLD CAPITAL RHOMATHEMATICA" + + "L BOLD CAPITAL THETA SYMBOLMATHEMATICAL BOLD CAPITAL SIGMAMATHEMATICAL B" + + "OLD CAPITAL TAUMATHEMATICAL BOLD CAPITAL UPSILONMATHEMATICAL BOLD CAPITA" + + "L PHIMATHEMATICAL BOLD CAPITAL CHIMATHEMATICAL BOLD CAPITAL PSIMATHEMATI" + + "CAL BOLD CAPITAL OMEGAMATHEMATICAL BOLD NABLAMATHEMATICAL BOLD SMALL ALP" + + "HAMATHEMATICAL BOLD SMALL BETAMATHEMATICAL BOLD SMALL GAMMAMATHEMATICAL " + + "BOLD SMALL DELTAMATHEMATICAL BOLD SMALL EPSILONMATHEMATICAL BOLD SMALL Z" + + "ETAMATHEMATICAL BOLD SMALL ETAMATHEMATICAL BOLD SMALL THETAMATHEMATICAL " + + "BOLD SMALL IOTAMATHEMATICAL BOLD SMALL KAPPAMATHEMATICAL BOLD SMALL LAMD" + + "AMATHEMATICAL BOLD SMALL MUMATHEMATICAL BOLD SMALL NUMATHEMATICAL BOLD S" + + "MALL XIMATHEMATICAL BOLD SMALL OMICRONMATHEMATICAL BOLD SMALL PIMATHEMAT" + + "ICAL BOLD SMALL RHOMATHEMATICAL BOLD SMALL FINAL SIGMAMATHEMATICAL BOLD " + + "SMALL SIGMAMATHEMATICAL BOLD SMALL TAUMATHEMATICAL BOLD SMALL UPSILONMAT" + + "HEMATICAL BOLD SMALL PHIMATHEMATICAL BOLD SMALL CHIMATHEMATICAL BOLD SMA" + + "LL PSIMATHEMATICAL BOLD SMALL OMEGAMATHEMATICAL BOLD PARTIAL DIFFERENTIA" + + "LMATHEMATICAL BOLD EPSILON SYMBOLMATHEMATICAL BOLD THETA SYMBOLMATHEMATI" + + "CAL BOLD KAPPA SYMBOLMATHEMATICAL BOLD PHI SYMBOLMATHEMATICAL BOLD RHO S" + + "YMBOLMATHEMATICAL BOLD PI SYMBOLMATHEMATICAL ITALIC CAPITAL ALPHAMATHEMA" + + "TICAL ITALIC CAPITAL BETAMATHEMATICAL ITALIC CAPITAL GAMMAMATHEMATICAL I" + + "TALIC CAPITAL DELTAMATHEMATICAL ITALIC CAPITAL EPSILONMATHEMATICAL ITALI" + + "C CAPITAL ZETAMATHEMATICAL ITALIC CAPITAL ETAMATHEMATICAL ITALIC CAPITAL" + + " THETAMATHEMATICAL ITALIC CAPITAL IOTAMATHEMATICAL ITALIC CAPITAL KAPPAM" + + "ATHEMATICAL ITALIC CAPITAL LAMDAMATHEMATICAL ITALIC CAPITAL MUMATHEMATIC" + + "AL ITALIC CAPITAL NUMATHEMATICAL ITALIC CAPITAL XIMATHEMATICAL ITALIC CA" + + "PITAL OMICRONMATHEMATICAL ITALIC CAPITAL PIMATHEMATICAL ITALIC CAPITAL R" + + "HOMATHEMATICAL ITALIC CAPITAL THETA SYMBOLMATHEMATICAL ITALIC CAPITAL SI" + + "GMAMATHEMATICAL ITALIC CAPITAL TAUMATHEMATICAL ITALIC CAPITAL UPSILONMAT" + + "HEMATICAL ITALIC CAPITAL PHIMATHEMATICAL ITALIC CAPITAL CHIMATHEMATICAL " + + "ITALIC CAPITAL PSIMATHEMATICAL ITALIC CAPITAL OMEGAMATHEMATICAL ITALIC N" + + "ABLAMATHEMATICAL ITALIC SMALL ALPHAMATHEMATICAL ITALIC SMALL BETAMATHEMA" + + "TICAL ITALIC SMALL GAMMAMATHEMATICAL ITALIC SMALL DELTAMATHEMATICAL ITAL" + + "IC SMALL EPSILONMATHEMATICAL ITALIC SMALL ZETAMATHEMATICAL ITALIC SMALL " + + "ETAMATHEMATICAL ITALIC SMALL THETAMATHEMATICAL ITALIC SMALL IOTAMATHEMAT" + + "ICAL ITALIC SMALL KAPPAMATHEMATICAL ITALIC SMALL LAMDAMATHEMATICAL ITALI") + ("" + + "C SMALL MUMATHEMATICAL ITALIC SMALL NUMATHEMATICAL ITALIC SMALL XIMATHEM" + + "ATICAL ITALIC SMALL OMICRONMATHEMATICAL ITALIC SMALL PIMATHEMATICAL ITAL" + + "IC SMALL RHOMATHEMATICAL ITALIC SMALL FINAL SIGMAMATHEMATICAL ITALIC SMA" + + "LL SIGMAMATHEMATICAL ITALIC SMALL TAUMATHEMATICAL ITALIC SMALL UPSILONMA" + + "THEMATICAL ITALIC SMALL PHIMATHEMATICAL ITALIC SMALL CHIMATHEMATICAL ITA" + + "LIC SMALL PSIMATHEMATICAL ITALIC SMALL OMEGAMATHEMATICAL ITALIC PARTIAL " + + "DIFFERENTIALMATHEMATICAL ITALIC EPSILON SYMBOLMATHEMATICAL ITALIC THETA " + + "SYMBOLMATHEMATICAL ITALIC KAPPA SYMBOLMATHEMATICAL ITALIC PHI SYMBOLMATH" + + "EMATICAL ITALIC RHO SYMBOLMATHEMATICAL ITALIC PI SYMBOLMATHEMATICAL BOLD" + + " ITALIC CAPITAL ALPHAMATHEMATICAL BOLD ITALIC CAPITAL BETAMATHEMATICAL B" + + "OLD ITALIC CAPITAL GAMMAMATHEMATICAL BOLD ITALIC CAPITAL DELTAMATHEMATIC" + + "AL BOLD ITALIC CAPITAL EPSILONMATHEMATICAL BOLD ITALIC CAPITAL ZETAMATHE" + + "MATICAL BOLD ITALIC CAPITAL ETAMATHEMATICAL BOLD ITALIC CAPITAL THETAMAT" + + "HEMATICAL BOLD ITALIC CAPITAL IOTAMATHEMATICAL BOLD ITALIC CAPITAL KAPPA" + + "MATHEMATICAL BOLD ITALIC CAPITAL LAMDAMATHEMATICAL BOLD ITALIC CAPITAL M" + + "UMATHEMATICAL BOLD ITALIC CAPITAL NUMATHEMATICAL BOLD ITALIC CAPITAL XIM" + + "ATHEMATICAL BOLD ITALIC CAPITAL OMICRONMATHEMATICAL BOLD ITALIC CAPITAL " + + "PIMATHEMATICAL BOLD ITALIC CAPITAL RHOMATHEMATICAL BOLD ITALIC CAPITAL T" + + "HETA SYMBOLMATHEMATICAL BOLD ITALIC CAPITAL SIGMAMATHEMATICAL BOLD ITALI" + + "C CAPITAL TAUMATHEMATICAL BOLD ITALIC CAPITAL UPSILONMATHEMATICAL BOLD I" + + "TALIC CAPITAL PHIMATHEMATICAL BOLD ITALIC CAPITAL CHIMATHEMATICAL BOLD I" + + "TALIC CAPITAL PSIMATHEMATICAL BOLD ITALIC CAPITAL OMEGAMATHEMATICAL BOLD" + + " ITALIC NABLAMATHEMATICAL BOLD ITALIC SMALL ALPHAMATHEMATICAL BOLD ITALI" + + "C SMALL BETAMATHEMATICAL BOLD ITALIC SMALL GAMMAMATHEMATICAL BOLD ITALIC" + + " SMALL DELTAMATHEMATICAL BOLD ITALIC SMALL EPSILONMATHEMATICAL BOLD ITAL" + + "IC SMALL ZETAMATHEMATICAL BOLD ITALIC SMALL ETAMATHEMATICAL BOLD ITALIC " + + "SMALL THETAMATHEMATICAL BOLD ITALIC SMALL IOTAMATHEMATICAL BOLD ITALIC S" + + "MALL KAPPAMATHEMATICAL BOLD ITALIC SMALL LAMDAMATHEMATICAL BOLD ITALIC S" + + "MALL MUMATHEMATICAL BOLD ITALIC SMALL NUMATHEMATICAL BOLD ITALIC SMALL X" + + "IMATHEMATICAL BOLD ITALIC SMALL OMICRONMATHEMATICAL BOLD ITALIC SMALL PI" + + "MATHEMATICAL BOLD ITALIC SMALL RHOMATHEMATICAL BOLD ITALIC SMALL FINAL S" + + "IGMAMATHEMATICAL BOLD ITALIC SMALL SIGMAMATHEMATICAL BOLD ITALIC SMALL T" + + "AUMATHEMATICAL BOLD ITALIC SMALL UPSILONMATHEMATICAL BOLD ITALIC SMALL P" + + "HIMATHEMATICAL BOLD ITALIC SMALL CHIMATHEMATICAL BOLD ITALIC SMALL PSIMA" + + "THEMATICAL BOLD ITALIC SMALL OMEGAMATHEMATICAL BOLD ITALIC PARTIAL DIFFE" + + "RENTIALMATHEMATICAL BOLD ITALIC EPSILON SYMBOLMATHEMATICAL BOLD ITALIC T" + + "HETA SYMBOLMATHEMATICAL BOLD ITALIC KAPPA SYMBOLMATHEMATICAL BOLD ITALIC" + + " PHI SYMBOLMATHEMATICAL BOLD ITALIC RHO SYMBOLMATHEMATICAL BOLD ITALIC P" + + "I SYMBOLMATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHAMATHEMATICAL SANS-SERI" + + "F BOLD CAPITAL BETAMATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMAMATHEMATICA" + + "L SANS-SERIF BOLD CAPITAL DELTAMATHEMATICAL SANS-SERIF BOLD CAPITAL EPSI" + + "LONMATHEMATICAL SANS-SERIF BOLD CAPITAL ZETAMATHEMATICAL SANS-SERIF BOLD" + + " CAPITAL ETAMATHEMATICAL SANS-SERIF BOLD CAPITAL THETAMATHEMATICAL SANS-" + + "SERIF BOLD CAPITAL IOTAMATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPAMATHEMA" + + "TICAL SANS-SERIF BOLD CAPITAL LAMDAMATHEMATICAL SANS-SERIF BOLD CAPITAL " + + "MUMATHEMATICAL SANS-SERIF BOLD CAPITAL NUMATHEMATICAL SANS-SERIF BOLD CA" + + "PITAL XIMATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRONMATHEMATICAL SANS-SE" + + "RIF BOLD CAPITAL PIMATHEMATICAL SANS-SERIF BOLD CAPITAL RHOMATHEMATICAL " + + "SANS-SERIF BOLD CAPITAL THETA SYMBOLMATHEMATICAL SANS-SERIF BOLD CAPITAL" + + " SIGMAMATHEMATICAL SANS-SERIF BOLD CAPITAL TAUMATHEMATICAL SANS-SERIF BO" + + "LD CAPITAL UPSILONMATHEMATICAL SANS-SERIF BOLD CAPITAL PHIMATHEMATICAL S" + + "ANS-SERIF BOLD CAPITAL CHIMATHEMATICAL SANS-SERIF BOLD CAPITAL PSIMATHEM" + + "ATICAL SANS-SERIF BOLD CAPITAL OMEGAMATHEMATICAL SANS-SERIF BOLD NABLAMA" + + "THEMATICAL SANS-SERIF BOLD SMALL ALPHAMATHEMATICAL SANS-SERIF BOLD SMALL" + + " BETAMATHEMATICAL SANS-SERIF BOLD SMALL GAMMAMATHEMATICAL SANS-SERIF BOL" + + "D SMALL DELTAMATHEMATICAL SANS-SERIF BOLD SMALL EPSILONMATHEMATICAL SANS" + + "-SERIF BOLD SMALL ZETAMATHEMATICAL SANS-SERIF BOLD SMALL ETAMATHEMATICAL" + + " SANS-SERIF BOLD SMALL THETAMATHEMATICAL SANS-SERIF BOLD SMALL IOTAMATHE" + + "MATICAL SANS-SERIF BOLD SMALL KAPPAMATHEMATICAL SANS-SERIF BOLD SMALL LA" + + "MDAMATHEMATICAL SANS-SERIF BOLD SMALL MUMATHEMATICAL SANS-SERIF BOLD SMA" + + "LL NUMATHEMATICAL SANS-SERIF BOLD SMALL XIMATHEMATICAL SANS-SERIF BOLD S" + + "MALL OMICRONMATHEMATICAL SANS-SERIF BOLD SMALL PIMATHEMATICAL SANS-SERIF" + + " BOLD SMALL RHOMATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMAMATHEMATICA" + + "L SANS-SERIF BOLD SMALL SIGMAMATHEMATICAL SANS-SERIF BOLD SMALL TAUMATHE") + ("" + + "MATICAL SANS-SERIF BOLD SMALL UPSILONMATHEMATICAL SANS-SERIF BOLD SMALL " + + "PHIMATHEMATICAL SANS-SERIF BOLD SMALL CHIMATHEMATICAL SANS-SERIF BOLD SM" + + "ALL PSIMATHEMATICAL SANS-SERIF BOLD SMALL OMEGAMATHEMATICAL SANS-SERIF B" + + "OLD PARTIAL DIFFERENTIALMATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOLMATHE" + + "MATICAL SANS-SERIF BOLD THETA SYMBOLMATHEMATICAL SANS-SERIF BOLD KAPPA S" + + "YMBOLMATHEMATICAL SANS-SERIF BOLD PHI SYMBOLMATHEMATICAL SANS-SERIF BOLD" + + " RHO SYMBOLMATHEMATICAL SANS-SERIF BOLD PI SYMBOLMATHEMATICAL SANS-SERIF" + + " BOLD ITALIC CAPITAL ALPHAMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BE" + + "TAMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMAMATHEMATICAL SANS-SER" + + "IF BOLD ITALIC CAPITAL DELTAMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL " + + "EPSILONMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETAMATHEMATICAL SANS" + + "-SERIF BOLD ITALIC CAPITAL ETAMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITA" + + "L THETAMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTAMATHEMATICAL SANS" + + "-SERIF BOLD ITALIC CAPITAL KAPPAMATHEMATICAL SANS-SERIF BOLD ITALIC CAPI" + + "TAL LAMDAMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MUMATHEMATICAL SANS" + + "-SERIF BOLD ITALIC CAPITAL NUMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL" + + " XIMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRONMATHEMATICAL SANS-" + + "SERIF BOLD ITALIC CAPITAL PIMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL " + + "RHOMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOLMATHEMATICAL " + + "SANS-SERIF BOLD ITALIC CAPITAL SIGMAMATHEMATICAL SANS-SERIF BOLD ITALIC " + + "CAPITAL TAUMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILONMATHEMATIC" + + "AL SANS-SERIF BOLD ITALIC CAPITAL PHIMATHEMATICAL SANS-SERIF BOLD ITALIC" + + " CAPITAL CHIMATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSIMATHEMATICAL " + + "SANS-SERIF BOLD ITALIC CAPITAL OMEGAMATHEMATICAL SANS-SERIF BOLD ITALIC " + + "NABLAMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHAMATHEMATICAL SANS-SE" + + "RIF BOLD ITALIC SMALL BETAMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMM" + + "AMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTAMATHEMATICAL SANS-SERIF " + + "BOLD ITALIC SMALL EPSILONMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETAM" + + "ATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETAMATHEMATICAL SANS-SERIF BOLD" + + " ITALIC SMALL THETAMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTAMATHEMA" + + "TICAL SANS-SERIF BOLD ITALIC SMALL KAPPAMATHEMATICAL SANS-SERIF BOLD ITA" + + "LIC SMALL LAMDAMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MUMATHEMATICAL " + + "SANS-SERIF BOLD ITALIC SMALL NUMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL" + + " XIMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRONMATHEMATICAL SANS-SE" + + "RIF BOLD ITALIC SMALL PIMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHOMAT" + + "HEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMAMATHEMATICAL SANS-SERI" + + "F BOLD ITALIC SMALL SIGMAMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAUMA" + + "THEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILONMATHEMATICAL SANS-SERIF B" + + "OLD ITALIC SMALL PHIMATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHIMATHEMA" + + "TICAL SANS-SERIF BOLD ITALIC SMALL PSIMATHEMATICAL SANS-SERIF BOLD ITALI" + + "C SMALL OMEGAMATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIALMAT" + + "HEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOLMATHEMATICAL SANS-SERIF B" + + "OLD ITALIC THETA SYMBOLMATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOLM" + + "ATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOLMATHEMATICAL SANS-SERIF BOL" + + "D ITALIC RHO SYMBOLMATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOLMATHEMAT" + + "ICAL BOLD CAPITAL DIGAMMAMATHEMATICAL BOLD SMALL DIGAMMAMATHEMATICAL BOL" + + "D DIGIT ZEROMATHEMATICAL BOLD DIGIT ONEMATHEMATICAL BOLD DIGIT TWOMATHEM" + + "ATICAL BOLD DIGIT THREEMATHEMATICAL BOLD DIGIT FOURMATHEMATICAL BOLD DIG" + + "IT FIVEMATHEMATICAL BOLD DIGIT SIXMATHEMATICAL BOLD DIGIT SEVENMATHEMATI" + + "CAL BOLD DIGIT EIGHTMATHEMATICAL BOLD DIGIT NINEMATHEMATICAL DOUBLE-STRU" + + "CK DIGIT ZEROMATHEMATICAL DOUBLE-STRUCK DIGIT ONEMATHEMATICAL DOUBLE-STR" + + "UCK DIGIT TWOMATHEMATICAL DOUBLE-STRUCK DIGIT THREEMATHEMATICAL DOUBLE-S" + + "TRUCK DIGIT FOURMATHEMATICAL DOUBLE-STRUCK DIGIT FIVEMATHEMATICAL DOUBLE" + + "-STRUCK DIGIT SIXMATHEMATICAL DOUBLE-STRUCK DIGIT SEVENMATHEMATICAL DOUB" + + "LE-STRUCK DIGIT EIGHTMATHEMATICAL DOUBLE-STRUCK DIGIT NINEMATHEMATICAL S" + + "ANS-SERIF DIGIT ZEROMATHEMATICAL SANS-SERIF DIGIT ONEMATHEMATICAL SANS-S" + + "ERIF DIGIT TWOMATHEMATICAL SANS-SERIF DIGIT THREEMATHEMATICAL SANS-SERIF" + + " DIGIT FOURMATHEMATICAL SANS-SERIF DIGIT FIVEMATHEMATICAL SANS-SERIF DIG" + + "IT SIXMATHEMATICAL SANS-SERIF DIGIT SEVENMATHEMATICAL SANS-SERIF DIGIT E" + + "IGHTMATHEMATICAL SANS-SERIF DIGIT NINEMATHEMATICAL SANS-SERIF BOLD DIGIT" + + " ZEROMATHEMATICAL SANS-SERIF BOLD DIGIT ONEMATHEMATICAL SANS-SERIF BOLD " + + "DIGIT TWOMATHEMATICAL SANS-SERIF BOLD DIGIT THREEMATHEMATICAL SANS-SERIF" + + " BOLD DIGIT FOURMATHEMATICAL SANS-SERIF BOLD DIGIT FIVEMATHEMATICAL SANS" + + "-SERIF BOLD DIGIT SIXMATHEMATICAL SANS-SERIF BOLD DIGIT SEVENMATHEMATICA") + ("" + + "L SANS-SERIF BOLD DIGIT EIGHTMATHEMATICAL SANS-SERIF BOLD DIGIT NINEMATH" + + "EMATICAL MONOSPACE DIGIT ZEROMATHEMATICAL MONOSPACE DIGIT ONEMATHEMATICA" + + "L MONOSPACE DIGIT TWOMATHEMATICAL MONOSPACE DIGIT THREEMATHEMATICAL MONO" + + "SPACE DIGIT FOURMATHEMATICAL MONOSPACE DIGIT FIVEMATHEMATICAL MONOSPACE " + + "DIGIT SIXMATHEMATICAL MONOSPACE DIGIT SEVENMATHEMATICAL MONOSPACE DIGIT " + + "EIGHTMATHEMATICAL MONOSPACE DIGIT NINESIGNWRITING HAND-FIST INDEXSIGNWRI" + + "TING HAND-CIRCLE INDEXSIGNWRITING HAND-CUP INDEXSIGNWRITING HAND-OVAL IN" + + "DEXSIGNWRITING HAND-HINGE INDEXSIGNWRITING HAND-ANGLE INDEXSIGNWRITING H" + + "AND-FIST INDEX BENTSIGNWRITING HAND-CIRCLE INDEX BENTSIGNWRITING HAND-FI" + + "ST THUMB UNDER INDEX BENTSIGNWRITING HAND-FIST INDEX RAISED KNUCKLESIGNW" + + "RITING HAND-FIST INDEX CUPPEDSIGNWRITING HAND-FIST INDEX HINGEDSIGNWRITI" + + "NG HAND-FIST INDEX HINGED LOWSIGNWRITING HAND-CIRCLE INDEX HINGESIGNWRIT" + + "ING HAND-FIST INDEX MIDDLESIGNWRITING HAND-CIRCLE INDEX MIDDLESIGNWRITIN" + + "G HAND-FIST INDEX MIDDLE BENTSIGNWRITING HAND-FIST INDEX MIDDLE RAISED K" + + "NUCKLESSIGNWRITING HAND-FIST INDEX MIDDLE HINGEDSIGNWRITING HAND-FIST IN" + + "DEX UP MIDDLE HINGEDSIGNWRITING HAND-FIST INDEX HINGED MIDDLE UPSIGNWRIT" + + "ING HAND-FIST INDEX MIDDLE CONJOINEDSIGNWRITING HAND-FIST INDEX MIDDLE C" + + "ONJOINED INDEX BENTSIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED MIDDLE B" + + "ENTSIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED CUPPEDSIGNWRITING HAND-F" + + "IST INDEX MIDDLE CONJOINED HINGEDSIGNWRITING HAND-FIST INDEX MIDDLE CROS" + + "SEDSIGNWRITING HAND-CIRCLE INDEX MIDDLE CROSSEDSIGNWRITING HAND-FIST MID" + + "DLE BENT OVER INDEXSIGNWRITING HAND-FIST INDEX BENT OVER MIDDLESIGNWRITI" + + "NG HAND-FIST INDEX MIDDLE THUMBSIGNWRITING HAND-CIRCLE INDEX MIDDLE THUM" + + "BSIGNWRITING HAND-FIST INDEX MIDDLE STRAIGHT THUMB BENTSIGNWRITING HAND-" + + "FIST INDEX MIDDLE BENT THUMB STRAIGHTSIGNWRITING HAND-FIST INDEX MIDDLE " + + "THUMB BENTSIGNWRITING HAND-FIST INDEX MIDDLE HINGED SPREAD THUMB SIDESIG" + + "NWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB SIDESIGNWRITING HAND-FIS" + + "T INDEX UP MIDDLE HINGED THUMB CONJOINEDSIGNWRITING HAND-FIST INDEX HING" + + "ED MIDDLE UP THUMB SIDESIGNWRITING HAND-FIST INDEX MIDDLE UP SPREAD THUM" + + "B FORWARDSIGNWRITING HAND-FIST INDEX MIDDLE THUMB CUPPEDSIGNWRITING HAND" + + "-FIST INDEX MIDDLE THUMB CIRCLEDSIGNWRITING HAND-FIST INDEX MIDDLE THUMB" + + " HOOKEDSIGNWRITING HAND-FIST INDEX MIDDLE THUMB HINGEDSIGNWRITING HAND-F" + + "IST THUMB BETWEEN INDEX MIDDLE STRAIGHTSIGNWRITING HAND-FIST INDEX MIDDL" + + "E CONJOINED THUMB SIDESIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB" + + " SIDE CONJOINEDSIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE B" + + "ENTSIGNWRITING HAND-FIST MIDDLE THUMB HOOKED INDEX UPSIGNWRITING HAND-FI" + + "ST INDEX THUMB HOOKED MIDDLE UPSIGNWRITING HAND-FIST INDEX MIDDLE CONJOI" + + "NED HINGED THUMB SIDESIGNWRITING HAND-FIST INDEX MIDDLE CROSSED THUMB SI" + + "DESIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB FORWARDSIGNWRITING " + + "HAND-FIST INDEX MIDDLE CONJOINED CUPPED THUMB FORWARDSIGNWRITING HAND-FI" + + "ST MIDDLE THUMB CUPPED INDEX UPSIGNWRITING HAND-FIST INDEX THUMB CUPPED " + + "MIDDLE UPSIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED INDEX UPSIGNWRITING " + + "HAND-FIST MIDDLE THUMB CIRCLED INDEX HINGEDSIGNWRITING HAND-FIST INDEX T" + + "HUMB ANGLED OUT MIDDLE UPSIGNWRITING HAND-FIST INDEX THUMB ANGLED IN MID" + + "DLE UPSIGNWRITING HAND-FIST INDEX THUMB CIRCLED MIDDLE UPSIGNWRITING HAN" + + "D-FIST INDEX MIDDLE THUMB CONJOINED HINGEDSIGNWRITING HAND-FIST INDEX MI" + + "DDLE THUMB ANGLED OUTSIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLEDSIGN" + + "WRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX UPSIGNWRITING HAND-FIST " + + "MIDDLE THUMB ANGLED OUT INDEX CROSSEDSIGNWRITING HAND-FIST MIDDLE THUMB " + + "ANGLED INDEX UPSIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE HINGEDSIG" + + "NWRITING HAND-FLAT FOUR FINGERSSIGNWRITING HAND-FLAT FOUR FINGERS BENTSI" + + "GNWRITING HAND-FLAT FOUR FINGERS HINGEDSIGNWRITING HAND-FLAT FOUR FINGER" + + "S CONJOINEDSIGNWRITING HAND-FLAT FOUR FINGERS CONJOINED SPLITSIGNWRITING" + + " HAND-CLAW FOUR FINGERS CONJOINEDSIGNWRITING HAND-FIST FOUR FINGERS CONJ" + + "OINED BENTSIGNWRITING HAND-HINGE FOUR FINGERS CONJOINEDSIGNWRITING HAND-" + + "FLAT FIVE FINGERS SPREADSIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREADSI" + + "GNWRITING HAND-FLAT FIVE FINGERS SPREAD FOUR BENTSIGNWRITING HAND-FLAT H" + + "EEL FIVE FINGERS SPREAD FOUR BENTSIGNWRITING HAND-FLAT FIVE FINGERS SPRE" + + "AD BENTSIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD BENTSIGNWRITING HA" + + "ND-FLAT FIVE FINGERS SPREAD THUMB FORWARDSIGNWRITING HAND-CUP FIVE FINGE" + + "RS SPREADSIGNWRITING HAND-CUP FIVE FINGERS SPREAD OPENSIGNWRITING HAND-H" + + "INGE FIVE FINGERS SPREAD OPENSIGNWRITING HAND-OVAL FIVE FINGERS SPREADSI" + + "GNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGEDSIGNWRITING HAND-FLAT FIVE" + + " FINGERS SPREAD HINGED THUMB SIDESIGNWRITING HAND-FLAT FIVE FINGERS SPRE") + ("" + + "AD HINGED NO THUMBSIGNWRITING HAND-FLATSIGNWRITING HAND-FLAT BETWEEN PAL" + + "M FACINGSSIGNWRITING HAND-FLAT HEELSIGNWRITING HAND-FLAT THUMB SIDESIGNW" + + "RITING HAND-FLAT HEEL THUMB SIDESIGNWRITING HAND-FLAT THUMB BENTSIGNWRIT" + + "ING HAND-FLAT THUMB FORWARDSIGNWRITING HAND-FLAT SPLIT INDEX THUMB SIDES" + + "IGNWRITING HAND-FLAT SPLIT CENTRESIGNWRITING HAND-FLAT SPLIT CENTRE THUM" + + "B SIDESIGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDE BENTSIGNWRITING HAND" + + "-FLAT SPLIT LITTLESIGNWRITING HAND-CLAWSIGNWRITING HAND-CLAW THUMB SIDES" + + "IGNWRITING HAND-CLAW NO THUMBSIGNWRITING HAND-CLAW THUMB FORWARDSIGNWRIT" + + "ING HAND-HOOK CURLICUESIGNWRITING HAND-HOOKSIGNWRITING HAND-CUP OPENSIGN" + + "WRITING HAND-CUPSIGNWRITING HAND-CUP OPEN THUMB SIDESIGNWRITING HAND-CUP" + + " THUMB SIDESIGNWRITING HAND-CUP OPEN NO THUMBSIGNWRITING HAND-CUP NO THU" + + "MBSIGNWRITING HAND-CUP OPEN THUMB FORWARDSIGNWRITING HAND-CUP THUMB FORW" + + "ARDSIGNWRITING HAND-CURLICUE OPENSIGNWRITING HAND-CURLICUESIGNWRITING HA" + + "ND-CIRCLESIGNWRITING HAND-OVALSIGNWRITING HAND-OVAL THUMB SIDESIGNWRITIN" + + "G HAND-OVAL NO THUMBSIGNWRITING HAND-OVAL THUMB FORWARDSIGNWRITING HAND-" + + "HINGE OPENSIGNWRITING HAND-HINGE OPEN THUMB FORWARDSIGNWRITING HAND-HING" + + "ESIGNWRITING HAND-HINGE SMALLSIGNWRITING HAND-HINGE OPEN THUMB SIDESIGNW" + + "RITING HAND-HINGE THUMB SIDESIGNWRITING HAND-HINGE OPEN NO THUMBSIGNWRIT" + + "ING HAND-HINGE NO THUMBSIGNWRITING HAND-HINGE THUMB SIDE TOUCHING INDEXS" + + "IGNWRITING HAND-HINGE THUMB BETWEEN MIDDLE RINGSIGNWRITING HAND-ANGLESIG" + + "NWRITING HAND-FIST INDEX MIDDLE RINGSIGNWRITING HAND-CIRCLE INDEX MIDDLE" + + " RINGSIGNWRITING HAND-HINGE INDEX MIDDLE RINGSIGNWRITING HAND-ANGLE INDE" + + "X MIDDLE RINGSIGNWRITING HAND-HINGE LITTLESIGNWRITING HAND-FIST INDEX MI" + + "DDLE RING BENTSIGNWRITING HAND-FIST INDEX MIDDLE RING CONJOINEDSIGNWRITI" + + "NG HAND-HINGE INDEX MIDDLE RING CONJOINEDSIGNWRITING HAND-FIST LITTLE DO" + + "WNSIGNWRITING HAND-FIST LITTLE DOWN RIPPLE STRAIGHTSIGNWRITING HAND-FIST" + + " LITTLE DOWN RIPPLE CURVEDSIGNWRITING HAND-FIST LITTLE DOWN OTHERS CIRCL" + + "EDSIGNWRITING HAND-FIST LITTLE UPSIGNWRITING HAND-FIST THUMB UNDER LITTL" + + "E UPSIGNWRITING HAND-CIRCLE LITTLE UPSIGNWRITING HAND-OVAL LITTLE UPSIGN" + + "WRITING HAND-ANGLE LITTLE UPSIGNWRITING HAND-FIST LITTLE RAISED KNUCKLES" + + "IGNWRITING HAND-FIST LITTLE BENTSIGNWRITING HAND-FIST LITTLE TOUCHES THU" + + "MBSIGNWRITING HAND-FIST LITTLE THUMBSIGNWRITING HAND-HINGE LITTLE THUMBS" + + "IGNWRITING HAND-FIST LITTLE INDEX THUMBSIGNWRITING HAND-HINGE LITTLE IND" + + "EX THUMBSIGNWRITING HAND-ANGLE LITTLE INDEX THUMB INDEX THUMB OUTSIGNWRI" + + "TING HAND-ANGLE LITTLE INDEX THUMB INDEX THUMBSIGNWRITING HAND-FIST LITT" + + "LE INDEXSIGNWRITING HAND-CIRCLE LITTLE INDEXSIGNWRITING HAND-HINGE LITTL" + + "E INDEXSIGNWRITING HAND-ANGLE LITTLE INDEXSIGNWRITING HAND-FIST INDEX MI" + + "DDLE LITTLESIGNWRITING HAND-CIRCLE INDEX MIDDLE LITTLESIGNWRITING HAND-H" + + "INGE INDEX MIDDLE LITTLESIGNWRITING HAND-HINGE RINGSIGNWRITING HAND-ANGL" + + "E INDEX MIDDLE LITTLESIGNWRITING HAND-FIST INDEX MIDDLE CROSS LITTLESIGN" + + "WRITING HAND-CIRCLE INDEX MIDDLE CROSS LITTLESIGNWRITING HAND-FIST RING " + + "DOWNSIGNWRITING HAND-HINGE RING DOWN INDEX THUMB HOOK MIDDLESIGNWRITING " + + "HAND-ANGLE RING DOWN MIDDLE THUMB INDEX CROSSSIGNWRITING HAND-FIST RING " + + "UPSIGNWRITING HAND-FIST RING RAISED KNUCKLESIGNWRITING HAND-FIST RING LI" + + "TTLESIGNWRITING HAND-CIRCLE RING LITTLESIGNWRITING HAND-OVAL RING LITTLE" + + "SIGNWRITING HAND-ANGLE RING LITTLESIGNWRITING HAND-FIST RING MIDDLESIGNW" + + "RITING HAND-FIST RING MIDDLE CONJOINEDSIGNWRITING HAND-FIST RING MIDDLE " + + "RAISED KNUCKLESSIGNWRITING HAND-FIST RING INDEXSIGNWRITING HAND-FIST RIN" + + "G THUMBSIGNWRITING HAND-HOOK RING THUMBSIGNWRITING HAND-FIST INDEX RING " + + "LITTLESIGNWRITING HAND-CIRCLE INDEX RING LITTLESIGNWRITING HAND-CURLICUE" + + " INDEX RING LITTLE ONSIGNWRITING HAND-HOOK INDEX RING LITTLE OUTSIGNWRIT" + + "ING HAND-HOOK INDEX RING LITTLE INSIGNWRITING HAND-HOOK INDEX RING LITTL" + + "E UNDERSIGNWRITING HAND-CUP INDEX RING LITTLESIGNWRITING HAND-HINGE INDE" + + "X RING LITTLESIGNWRITING HAND-ANGLE INDEX RING LITTLE OUTSIGNWRITING HAN" + + "D-ANGLE INDEX RING LITTLESIGNWRITING HAND-FIST MIDDLE DOWNSIGNWRITING HA" + + "ND-HINGE MIDDLESIGNWRITING HAND-FIST MIDDLE UPSIGNWRITING HAND-CIRCLE MI" + + "DDLE UPSIGNWRITING HAND-FIST MIDDLE RAISED KNUCKLESIGNWRITING HAND-FIST " + + "MIDDLE UP THUMB SIDESIGNWRITING HAND-HOOK MIDDLE THUMBSIGNWRITING HAND-F" + + "IST MIDDLE THUMB LITTLESIGNWRITING HAND-FIST MIDDLE LITTLESIGNWRITING HA" + + "ND-FIST MIDDLE RING LITTLESIGNWRITING HAND-CIRCLE MIDDLE RING LITTLESIGN" + + "WRITING HAND-CURLICUE MIDDLE RING LITTLE ONSIGNWRITING HAND-CUP MIDDLE R" + + "ING LITTLESIGNWRITING HAND-HINGE MIDDLE RING LITTLESIGNWRITING HAND-ANGL" + + "E MIDDLE RING LITTLE OUTSIGNWRITING HAND-ANGLE MIDDLE RING LITTLE INSIGN" + + "WRITING HAND-ANGLE MIDDLE RING LITTLESIGNWRITING HAND-CIRCLE MIDDLE RING") + ("" + + " LITTLE BENTSIGNWRITING HAND-CLAW MIDDLE RING LITTLE CONJOINEDSIGNWRITIN" + + "G HAND-CLAW MIDDLE RING LITTLE CONJOINED SIDESIGNWRITING HAND-HOOK MIDDL" + + "E RING LITTLE CONJOINED OUTSIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJ" + + "OINED INSIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINEDSIGNWRITING HA" + + "ND-HINGE INDEX HINGEDSIGNWRITING HAND-FIST INDEX THUMB SIDESIGNWRITING H" + + "AND-HINGE INDEX THUMB SIDESIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB D" + + "IAGONALSIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB CONJOINEDSIGNWRITING" + + " HAND-FIST INDEX THUMB SIDE THUMB BENTSIGNWRITING HAND-FIST INDEX THUMB " + + "SIDE INDEX BENTSIGNWRITING HAND-FIST INDEX THUMB SIDE BOTH BENTSIGNWRITI" + + "NG HAND-FIST INDEX THUMB SIDE INDEX HINGESIGNWRITING HAND-FIST INDEX THU" + + "MB FORWARD INDEX STRAIGHTSIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX" + + " BENTSIGNWRITING HAND-FIST INDEX THUMB HOOKSIGNWRITING HAND-FIST INDEX T" + + "HUMB CURLICUESIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB INSIDESIGNWRI" + + "TING HAND-CLAW INDEX THUMB CURVE THUMB INSIDESIGNWRITING HAND-FIST INDEX" + + " THUMB CURVE THUMB UNDERSIGNWRITING HAND-FIST INDEX THUMB CIRCLESIGNWRIT" + + "ING HAND-CUP INDEX THUMBSIGNWRITING HAND-CUP INDEX THUMB OPENSIGNWRITING" + + " HAND-HINGE INDEX THUMB OPENSIGNWRITING HAND-HINGE INDEX THUMB LARGESIGN" + + "WRITING HAND-HINGE INDEX THUMBSIGNWRITING HAND-HINGE INDEX THUMB SMALLSI" + + "GNWRITING HAND-ANGLE INDEX THUMB OUTSIGNWRITING HAND-ANGLE INDEX THUMB I" + + "NSIGNWRITING HAND-ANGLE INDEX THUMBSIGNWRITING HAND-FIST THUMBSIGNWRITIN" + + "G HAND-FIST THUMB HEELSIGNWRITING HAND-FIST THUMB SIDE DIAGONALSIGNWRITI" + + "NG HAND-FIST THUMB SIDE CONJOINEDSIGNWRITING HAND-FIST THUMB SIDE BENTSI" + + "GNWRITING HAND-FIST THUMB FORWARDSIGNWRITING HAND-FIST THUMB BETWEEN IND" + + "EX MIDDLESIGNWRITING HAND-FIST THUMB BETWEEN MIDDLE RINGSIGNWRITING HAND" + + "-FIST THUMB BETWEEN RING LITTLESIGNWRITING HAND-FIST THUMB UNDER TWO FIN" + + "GERSSIGNWRITING HAND-FIST THUMB OVER TWO FINGERSSIGNWRITING HAND-FIST TH" + + "UMB UNDER THREE FINGERSSIGNWRITING HAND-FIST THUMB UNDER FOUR FINGERSSIG" + + "NWRITING HAND-FIST THUMB OVER FOUR RAISED KNUCKLESSIGNWRITING HAND-FISTS" + + "IGNWRITING HAND-FIST HEELSIGNWRITING TOUCH SINGLESIGNWRITING TOUCH MULTI" + + "PLESIGNWRITING TOUCH BETWEENSIGNWRITING GRASP SINGLESIGNWRITING GRASP MU" + + "LTIPLESIGNWRITING GRASP BETWEENSIGNWRITING STRIKE SINGLESIGNWRITING STRI" + + "KE MULTIPLESIGNWRITING STRIKE BETWEENSIGNWRITING BRUSH SINGLESIGNWRITING" + + " BRUSH MULTIPLESIGNWRITING BRUSH BETWEENSIGNWRITING RUB SINGLESIGNWRITIN" + + "G RUB MULTIPLESIGNWRITING RUB BETWEENSIGNWRITING SURFACE SYMBOLSSIGNWRIT" + + "ING SURFACE BETWEENSIGNWRITING SQUEEZE LARGE SINGLESIGNWRITING SQUEEZE S" + + "MALL SINGLESIGNWRITING SQUEEZE LARGE MULTIPLESIGNWRITING SQUEEZE SMALL M" + + "ULTIPLESIGNWRITING SQUEEZE SEQUENTIALSIGNWRITING FLICK LARGE SINGLESIGNW" + + "RITING FLICK SMALL SINGLESIGNWRITING FLICK LARGE MULTIPLESIGNWRITING FLI" + + "CK SMALL MULTIPLESIGNWRITING FLICK SEQUENTIALSIGNWRITING SQUEEZE FLICK A" + + "LTERNATINGSIGNWRITING MOVEMENT-HINGE UP DOWN LARGESIGNWRITING MOVEMENT-H" + + "INGE UP DOWN SMALLSIGNWRITING MOVEMENT-HINGE UP SEQUENTIALSIGNWRITING MO" + + "VEMENT-HINGE DOWN SEQUENTIALSIGNWRITING MOVEMENT-HINGE UP DOWN ALTERNATI" + + "NG LARGESIGNWRITING MOVEMENT-HINGE UP DOWN ALTERNATING SMALLSIGNWRITING " + + "MOVEMENT-HINGE SIDE TO SIDE SCISSORSSIGNWRITING MOVEMENT-WALLPLANE FINGE" + + "R CONTACTSIGNWRITING MOVEMENT-FLOORPLANE FINGER CONTACTSIGNWRITING MOVEM" + + "ENT-WALLPLANE SINGLE STRAIGHT SMALLSIGNWRITING MOVEMENT-WALLPLANE SINGLE" + + " STRAIGHT MEDIUMSIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT LARGESIGN" + + "WRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT LARGESTSIGNWRITING MOVEMENT-W" + + "ALLPLANE SINGLE WRIST FLEXSIGNWRITING MOVEMENT-WALLPLANE DOUBLE STRAIGHT" + + "SIGNWRITING MOVEMENT-WALLPLANE DOUBLE WRIST FLEXSIGNWRITING MOVEMENT-WAL" + + "LPLANE DOUBLE ALTERNATINGSIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATI" + + "NG WRIST FLEXSIGNWRITING MOVEMENT-WALLPLANE CROSSSIGNWRITING MOVEMENT-WA" + + "LLPLANE TRIPLE STRAIGHT MOVEMENTSIGNWRITING MOVEMENT-WALLPLANE TRIPLE WR" + + "IST FLEXSIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATINGSIGNWRITING MOV" + + "EMENT-WALLPLANE TRIPLE ALTERNATING WRIST FLEXSIGNWRITING MOVEMENT-WALLPL" + + "ANE BEND SMALLSIGNWRITING MOVEMENT-WALLPLANE BEND MEDIUMSIGNWRITING MOVE" + + "MENT-WALLPLANE BEND LARGESIGNWRITING MOVEMENT-WALLPLANE CORNER SMALLSIGN" + + "WRITING MOVEMENT-WALLPLANE CORNER MEDIUMSIGNWRITING MOVEMENT-WALLPLANE C" + + "ORNER LARGESIGNWRITING MOVEMENT-WALLPLANE CORNER ROTATIONSIGNWRITING MOV" + + "EMENT-WALLPLANE CHECK SMALLSIGNWRITING MOVEMENT-WALLPLANE CHECK MEDIUMSI" + + "GNWRITING MOVEMENT-WALLPLANE CHECK LARGESIGNWRITING MOVEMENT-WALLPLANE B" + + "OX SMALLSIGNWRITING MOVEMENT-WALLPLANE BOX MEDIUMSIGNWRITING MOVEMENT-WA" + + "LLPLANE BOX LARGESIGNWRITING MOVEMENT-WALLPLANE ZIGZAG SMALLSIGNWRITING " + + "MOVEMENT-WALLPLANE ZIGZAG MEDIUMSIGNWRITING MOVEMENT-WALLPLANE ZIGZAG LA") + ("" + + "RGESIGNWRITING MOVEMENT-WALLPLANE PEAKS SMALLSIGNWRITING MOVEMENT-WALLPL" + + "ANE PEAKS MEDIUMSIGNWRITING MOVEMENT-WALLPLANE PEAKS LARGESIGNWRITING TR" + + "AVEL-WALLPLANE ROTATION-WALLPLANE SINGLESIGNWRITING TRAVEL-WALLPLANE ROT" + + "ATION-WALLPLANE DOUBLESIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE AL" + + "TERNATINGSIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE SINGLESIGNWRIT" + + "ING TRAVEL-WALLPLANE ROTATION-FLOORPLANE DOUBLESIGNWRITING TRAVEL-WALLPL" + + "ANE ROTATION-FLOORPLANE ALTERNATINGSIGNWRITING TRAVEL-WALLPLANE SHAKINGS" + + "IGNWRITING TRAVEL-WALLPLANE ARM SPIRAL SINGLESIGNWRITING TRAVEL-WALLPLAN" + + "E ARM SPIRAL DOUBLESIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL TRIPLESIGNWRI" + + "TING MOVEMENT-DIAGONAL AWAY SMALLSIGNWRITING MOVEMENT-DIAGONAL AWAY MEDI" + + "UMSIGNWRITING MOVEMENT-DIAGONAL AWAY LARGESIGNWRITING MOVEMENT-DIAGONAL " + + "AWAY LARGESTSIGNWRITING MOVEMENT-DIAGONAL TOWARDS SMALLSIGNWRITING MOVEM" + + "ENT-DIAGONAL TOWARDS MEDIUMSIGNWRITING MOVEMENT-DIAGONAL TOWARDS LARGESI" + + "GNWRITING MOVEMENT-DIAGONAL TOWARDS LARGESTSIGNWRITING MOVEMENT-DIAGONAL" + + " BETWEEN AWAY SMALLSIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY MEDIUMSIGN" + + "WRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGESIGNWRITING MOVEMENT-DIAGONA" + + "L BETWEEN AWAY LARGESTSIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS SMAL" + + "LSIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS MEDIUMSIGNWRITING MOVEMEN" + + "T-DIAGONAL BETWEEN TOWARDS LARGESIGNWRITING MOVEMENT-DIAGONAL BETWEEN TO" + + "WARDS LARGESTSIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT SMALLSIGNWR" + + "ITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT MEDIUMSIGNWRITING MOVEMENT-FLO" + + "ORPLANE SINGLE STRAIGHT LARGESIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRA" + + "IGHT LARGESTSIGNWRITING MOVEMENT-FLOORPLANE SINGLE WRIST FLEXSIGNWRITING" + + " MOVEMENT-FLOORPLANE DOUBLE STRAIGHTSIGNWRITING MOVEMENT-FLOORPLANE DOUB" + + "LE WRIST FLEXSIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTERNATINGSIGNWRITI" + + "NG MOVEMENT-FLOORPLANE DOUBLE ALTERNATING WRIST FLEXSIGNWRITING MOVEMENT" + + "-FLOORPLANE CROSSSIGNWRITING MOVEMENT-FLOORPLANE TRIPLE STRAIGHT MOVEMEN" + + "TSIGNWRITING MOVEMENT-FLOORPLANE TRIPLE WRIST FLEXSIGNWRITING MOVEMENT-F" + + "LOORPLANE TRIPLE ALTERNATING MOVEMENTSIGNWRITING MOVEMENT-FLOORPLANE TRI" + + "PLE ALTERNATING WRIST FLEXSIGNWRITING MOVEMENT-FLOORPLANE BENDSIGNWRITIN" + + "G MOVEMENT-FLOORPLANE CORNER SMALLSIGNWRITING MOVEMENT-FLOORPLANE CORNER" + + " MEDIUMSIGNWRITING MOVEMENT-FLOORPLANE CORNER LARGESIGNWRITING MOVEMENT-" + + "FLOORPLANE CHECKSIGNWRITING MOVEMENT-FLOORPLANE BOX SMALLSIGNWRITING MOV" + + "EMENT-FLOORPLANE BOX MEDIUMSIGNWRITING MOVEMENT-FLOORPLANE BOX LARGESIGN" + + "WRITING MOVEMENT-FLOORPLANE ZIGZAG SMALLSIGNWRITING MOVEMENT-FLOORPLANE " + + "ZIGZAG MEDIUMSIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG LARGESIGNWRITING MOV" + + "EMENT-FLOORPLANE PEAKS SMALLSIGNWRITING MOVEMENT-FLOORPLANE PEAKS MEDIUM" + + "SIGNWRITING MOVEMENT-FLOORPLANE PEAKS LARGESIGNWRITING TRAVEL-FLOORPLANE" + + " ROTATION-FLOORPLANE SINGLESIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORP" + + "LANE DOUBLESIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE ALTERNATING" + + "SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE SINGLESIGNWRITING TRAVE" + + "L-FLOORPLANE ROTATION-WALLPLANE DOUBLESIGNWRITING TRAVEL-FLOORPLANE ROTA" + + "TION-WALLPLANE ALTERNATINGSIGNWRITING TRAVEL-FLOORPLANE SHAKINGSIGNWRITI" + + "NG MOVEMENT-WALLPLANE CURVE QUARTER SMALLSIGNWRITING MOVEMENT-WALLPLANE " + + "CURVE QUARTER MEDIUMSIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER LARGESI" + + "GNWRITING MOVEMENT-WALLPLANE CURVE QUARTER LARGESTSIGNWRITING MOVEMENT-W" + + "ALLPLANE CURVE HALF-CIRCLE SMALLSIGNWRITING MOVEMENT-WALLPLANE CURVE HAL" + + "F-CIRCLE MEDIUMSIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE LARGESIG" + + "NWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE LARGESTSIGNWRITING MOVEMEN" + + "T-WALLPLANE CURVE THREE-QUARTER CIRCLE SMALLSIGNWRITING MOVEMENT-WALLPLA" + + "NE CURVE THREE-QUARTER CIRCLE MEDIUMSIGNWRITING MOVEMENT-WALLPLANE HUMP " + + "SMALLSIGNWRITING MOVEMENT-WALLPLANE HUMP MEDIUMSIGNWRITING MOVEMENT-WALL" + + "PLANE HUMP LARGESIGNWRITING MOVEMENT-WALLPLANE LOOP SMALLSIGNWRITING MOV" + + "EMENT-WALLPLANE LOOP MEDIUMSIGNWRITING MOVEMENT-WALLPLANE LOOP LARGESIGN" + + "WRITING MOVEMENT-WALLPLANE LOOP SMALL DOUBLESIGNWRITING MOVEMENT-WALLPLA" + + "NE WAVE CURVE DOUBLE SMALLSIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUB" + + "LE MEDIUMSIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE LARGESIGNWRITI" + + "NG MOVEMENT-WALLPLANE WAVE CURVE TRIPLE SMALLSIGNWRITING MOVEMENT-WALLPL" + + "ANE WAVE CURVE TRIPLE MEDIUMSIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TR" + + "IPLE LARGESIGNWRITING MOVEMENT-WALLPLANE CURVE THEN STRAIGHTSIGNWRITING " + + "MOVEMENT-WALLPLANE CURVED CROSS SMALLSIGNWRITING MOVEMENT-WALLPLANE CURV" + + "ED CROSS MEDIUMSIGNWRITING ROTATION-WALLPLANE SINGLESIGNWRITING ROTATION" + + "-WALLPLANE DOUBLESIGNWRITING ROTATION-WALLPLANE ALTERNATESIGNWRITING MOV" + + "EMENT-WALLPLANE SHAKINGSIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING FRON") + ("" + + "T WALLSIGNWRITING MOVEMENT-WALLPLANE HUMP HITTING FRONT WALLSIGNWRITING " + + "MOVEMENT-WALLPLANE LOOP HITTING FRONT WALLSIGNWRITING MOVEMENT-WALLPLANE" + + " WAVE HITTING FRONT WALLSIGNWRITING ROTATION-WALLPLANE SINGLE HITTING FR" + + "ONT WALLSIGNWRITING ROTATION-WALLPLANE DOUBLE HITTING FRONT WALLSIGNWRIT" + + "ING ROTATION-WALLPLANE ALTERNATING HITTING FRONT WALLSIGNWRITING MOVEMEN" + + "T-WALLPLANE CURVE HITTING CHESTSIGNWRITING MOVEMENT-WALLPLANE HUMP HITTI" + + "NG CHESTSIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING CHESTSIGNWRITING MOV" + + "EMENT-WALLPLANE WAVE HITTING CHESTSIGNWRITING ROTATION-WALLPLANE SINGLE " + + "HITTING CHESTSIGNWRITING ROTATION-WALLPLANE DOUBLE HITTING CHESTSIGNWRIT" + + "ING ROTATION-WALLPLANE ALTERNATING HITTING CHESTSIGNWRITING MOVEMENT-WAL" + + "LPLANE WAVE DIAGONAL PATH SMALLSIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGO" + + "NAL PATH MEDIUMSIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH LARGESI" + + "GNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEILING SMALLSIGNWRITING MOV" + + "EMENT-FLOORPLANE CURVE HITTING CEILING LARGESIGNWRITING MOVEMENT-FLOORPL" + + "ANE HUMP HITTING CEILING SMALL DOUBLESIGNWRITING MOVEMENT-FLOORPLANE HUM" + + "P HITTING CEILING LARGE DOUBLESIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTI" + + "NG CEILING SMALL TRIPLESIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEIL" + + "ING LARGE TRIPLESIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING SMA" + + "LL SINGLESIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING LARGE SING" + + "LESIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING SMALL DOUBLESIGNW" + + "RITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING LARGE DOUBLESIGNWRITING " + + "MOVEMENT-FLOORPLANE WAVE HITTING CEILING SMALLSIGNWRITING MOVEMENT-FLOOR" + + "PLANE WAVE HITTING CEILING LARGESIGNWRITING ROTATION-FLOORPLANE SINGLE H" + + "ITTING CEILINGSIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING CEILINGSIGN" + + "WRITING ROTATION-FLOORPLANE ALTERNATING HITTING CEILINGSIGNWRITING MOVEM" + + "ENT-FLOORPLANE CURVE HITTING FLOOR SMALLSIGNWRITING MOVEMENT-FLOORPLANE " + + "CURVE HITTING FLOOR LARGESIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FL" + + "OOR SMALL DOUBLESIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR LARGE" + + " DOUBLESIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR TRIPLE SMALL T" + + "RIPLESIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR TRIPLE LARGE TRI" + + "PLESIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR SMALL SINGLESIGNWR" + + "ITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE SINGLESIGNWRITING MOV" + + "EMENT-FLOORPLANE LOOP HITTING FLOOR SMALL DOUBLESIGNWRITING MOVEMENT-FLO" + + "ORPLANE LOOP HITTING FLOOR LARGE DOUBLESIGNWRITING MOVEMENT-FLOORPLANE W" + + "AVE HITTING FLOOR SMALLSIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOO" + + "R LARGESIGNWRITING ROTATION-FLOORPLANE SINGLE HITTING FLOORSIGNWRITING R" + + "OTATION-FLOORPLANE DOUBLE HITTING FLOORSIGNWRITING ROTATION-FLOORPLANE A" + + "LTERNATING HITTING FLOORSIGNWRITING MOVEMENT-FLOORPLANE CURVE SMALLSIGNW" + + "RITING MOVEMENT-FLOORPLANE CURVE MEDIUMSIGNWRITING MOVEMENT-FLOORPLANE C" + + "URVE LARGESIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGESTSIGNWRITING MOVEM" + + "ENT-FLOORPLANE CURVE COMBINEDSIGNWRITING MOVEMENT-FLOORPLANE HUMP SMALLS" + + "IGNWRITING MOVEMENT-FLOORPLANE LOOP SMALLSIGNWRITING MOVEMENT-FLOORPLANE" + + " WAVE SNAKESIGNWRITING MOVEMENT-FLOORPLANE WAVE SMALLSIGNWRITING MOVEMEN" + + "T-FLOORPLANE WAVE LARGESIGNWRITING ROTATION-FLOORPLANE SINGLESIGNWRITING" + + " ROTATION-FLOORPLANE DOUBLESIGNWRITING ROTATION-FLOORPLANE ALTERNATINGSI" + + "GNWRITING MOVEMENT-FLOORPLANE SHAKING PARALLELSIGNWRITING MOVEMENT-WALLP" + + "LANE ARM CIRCLE SMALL SINGLESIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE ME" + + "DIUM SINGLESIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL DOUBLESIGNWRI" + + "TING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM DOUBLESIGNWRITING MOVEMENT-FLO" + + "ORPLANE ARM CIRCLE HITTING WALL SMALL SINGLESIGNWRITING MOVEMENT-FLOORPL" + + "ANE ARM CIRCLE HITTING WALL MEDIUM SINGLESIGNWRITING MOVEMENT-FLOORPLANE" + + " ARM CIRCLE HITTING WALL LARGE SINGLESIGNWRITING MOVEMENT-FLOORPLANE ARM" + + " CIRCLE HITTING WALL SMALL DOUBLESIGNWRITING MOVEMENT-FLOORPLANE ARM CIR" + + "CLE HITTING WALL MEDIUM DOUBLESIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE" + + " HITTING WALL LARGE DOUBLESIGNWRITING MOVEMENT-WALLPLANE WRIST CIRCLE FR" + + "ONT SINGLESIGNWRITING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT DOUBLESIGNWR" + + "ITING MOVEMENT-FLOORPLANE WRIST CIRCLE HITTING WALL SINGLESIGNWRITING MO" + + "VEMENT-FLOORPLANE WRIST CIRCLE HITTING WALL DOUBLESIGNWRITING MOVEMENT-W" + + "ALLPLANE FINGER CIRCLES SINGLESIGNWRITING MOVEMENT-WALLPLANE FINGER CIRC" + + "LES DOUBLESIGNWRITING MOVEMENT-FLOORPLANE FINGER CIRCLES HITTING WALL SI" + + "NGLESIGNWRITING MOVEMENT-FLOORPLANE FINGER CIRCLES HITTING WALL DOUBLESI" + + "GNWRITING DYNAMIC ARROWHEAD SMALLSIGNWRITING DYNAMIC ARROWHEAD LARGESIGN" + + "WRITING DYNAMIC FASTSIGNWRITING DYNAMIC SLOWSIGNWRITING DYNAMIC TENSESIG" + + "NWRITING DYNAMIC RELAXEDSIGNWRITING DYNAMIC SIMULTANEOUSSIGNWRITING DYNA") + ("" + + "MIC SIMULTANEOUS ALTERNATINGSIGNWRITING DYNAMIC EVERY OTHER TIMESIGNWRIT" + + "ING DYNAMIC GRADUALSIGNWRITING HEADSIGNWRITING HEAD RIMSIGNWRITING HEAD " + + "MOVEMENT-WALLPLANE STRAIGHTSIGNWRITING HEAD MOVEMENT-WALLPLANE TILTSIGNW" + + "RITING HEAD MOVEMENT-FLOORPLANE STRAIGHTSIGNWRITING HEAD MOVEMENT-WALLPL" + + "ANE CURVESIGNWRITING HEAD MOVEMENT-FLOORPLANE CURVESIGNWRITING HEAD MOVE" + + "MENT CIRCLESIGNWRITING FACE DIRECTION POSITION NOSE FORWARD TILTINGSIGNW" + + "RITING FACE DIRECTION POSITION NOSE UP OR DOWNSIGNWRITING FACE DIRECTION" + + " POSITION NOSE UP OR DOWN TILTINGSIGNWRITING EYEBROWS STRAIGHT UPSIGNWRI" + + "TING EYEBROWS STRAIGHT NEUTRALSIGNWRITING EYEBROWS STRAIGHT DOWNSIGNWRIT" + + "ING DREAMY EYEBROWS NEUTRAL DOWNSIGNWRITING DREAMY EYEBROWS DOWN NEUTRAL" + + "SIGNWRITING DREAMY EYEBROWS UP NEUTRALSIGNWRITING DREAMY EYEBROWS NEUTRA" + + "L UPSIGNWRITING FOREHEAD NEUTRALSIGNWRITING FOREHEAD CONTACTSIGNWRITING " + + "FOREHEAD WRINKLEDSIGNWRITING EYES OPENSIGNWRITING EYES SQUEEZEDSIGNWRITI" + + "NG EYES CLOSEDSIGNWRITING EYE BLINK SINGLESIGNWRITING EYE BLINK MULTIPLE" + + "SIGNWRITING EYES HALF OPENSIGNWRITING EYES WIDE OPENSIGNWRITING EYES HAL" + + "F CLOSEDSIGNWRITING EYES WIDENING MOVEMENTSIGNWRITING EYE WINKSIGNWRITIN" + + "G EYELASHES UPSIGNWRITING EYELASHES DOWNSIGNWRITING EYELASHES FLUTTERING" + + "SIGNWRITING EYEGAZE-WALLPLANE STRAIGHTSIGNWRITING EYEGAZE-WALLPLANE STRA" + + "IGHT DOUBLESIGNWRITING EYEGAZE-WALLPLANE STRAIGHT ALTERNATINGSIGNWRITING" + + " EYEGAZE-FLOORPLANE STRAIGHTSIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT DOUB" + + "LESIGNWRITING EYEGAZE-FLOORPLANE STRAIGHT ALTERNATINGSIGNWRITING EYEGAZE" + + "-WALLPLANE CURVEDSIGNWRITING EYEGAZE-FLOORPLANE CURVEDSIGNWRITING EYEGAZ" + + "E-WALLPLANE CIRCLINGSIGNWRITING CHEEKS PUFFEDSIGNWRITING CHEEKS NEUTRALS" + + "IGNWRITING CHEEKS SUCKEDSIGNWRITING TENSE CHEEKS HIGHSIGNWRITING TENSE C" + + "HEEKS MIDDLESIGNWRITING TENSE CHEEKS LOWSIGNWRITING EARSSIGNWRITING NOSE" + + " NEUTRALSIGNWRITING NOSE CONTACTSIGNWRITING NOSE WRINKLESSIGNWRITING NOS" + + "E WIGGLESSIGNWRITING AIR BLOWING OUTSIGNWRITING AIR SUCKING INSIGNWRITIN" + + "G AIR BLOW SMALL ROTATIONSSIGNWRITING AIR SUCK SMALL ROTATIONSSIGNWRITIN" + + "G BREATH INHALESIGNWRITING BREATH EXHALESIGNWRITING MOUTH CLOSED NEUTRAL" + + "SIGNWRITING MOUTH CLOSED FORWARDSIGNWRITING MOUTH CLOSED CONTACTSIGNWRIT" + + "ING MOUTH SMILESIGNWRITING MOUTH SMILE WRINKLEDSIGNWRITING MOUTH SMILE O" + + "PENSIGNWRITING MOUTH FROWNSIGNWRITING MOUTH FROWN WRINKLEDSIGNWRITING MO" + + "UTH FROWN OPENSIGNWRITING MOUTH OPEN CIRCLESIGNWRITING MOUTH OPEN FORWAR" + + "DSIGNWRITING MOUTH OPEN WRINKLEDSIGNWRITING MOUTH OPEN OVALSIGNWRITING M" + + "OUTH OPEN OVAL WRINKLEDSIGNWRITING MOUTH OPEN OVAL YAWNSIGNWRITING MOUTH" + + " OPEN RECTANGLESIGNWRITING MOUTH OPEN RECTANGLE WRINKLEDSIGNWRITING MOUT" + + "H OPEN RECTANGLE YAWNSIGNWRITING MOUTH KISSSIGNWRITING MOUTH KISS FORWAR" + + "DSIGNWRITING MOUTH KISS WRINKLEDSIGNWRITING MOUTH TENSESIGNWRITING MOUTH" + + " TENSE FORWARDSIGNWRITING MOUTH TENSE SUCKEDSIGNWRITING LIPS PRESSED TOG" + + "ETHERSIGNWRITING LIP LOWER OVER UPPERSIGNWRITING LIP UPPER OVER LOWERSIG" + + "NWRITING MOUTH CORNERSSIGNWRITING MOUTH WRINKLES SINGLESIGNWRITING MOUTH" + + " WRINKLES DOUBLESIGNWRITING TONGUE STICKING OUT FARSIGNWRITING TONGUE LI" + + "CKING LIPSSIGNWRITING TONGUE TIP BETWEEN LIPSSIGNWRITING TONGUE TIP TOUC" + + "HING INSIDE MOUTHSIGNWRITING TONGUE INSIDE MOUTH RELAXEDSIGNWRITING TONG" + + "UE MOVES AGAINST CHEEKSIGNWRITING TONGUE CENTRE STICKING OUTSIGNWRITING " + + "TONGUE CENTRE INSIDE MOUTHSIGNWRITING TEETHSIGNWRITING TEETH MOVEMENTSIG" + + "NWRITING TEETH ON TONGUESIGNWRITING TEETH ON TONGUE MOVEMENTSIGNWRITING " + + "TEETH ON LIPSSIGNWRITING TEETH ON LIPS MOVEMENTSIGNWRITING TEETH BITE LI" + + "PSSIGNWRITING MOVEMENT-WALLPLANE JAWSIGNWRITING MOVEMENT-FLOORPLANE JAWS" + + "IGNWRITING NECKSIGNWRITING HAIRSIGNWRITING EXCITEMENTSIGNWRITING SHOULDE" + + "R HIP SPINESIGNWRITING SHOULDER HIP POSITIONSSIGNWRITING WALLPLANE SHOUL" + + "DER HIP MOVESIGNWRITING FLOORPLANE SHOULDER HIP MOVESIGNWRITING SHOULDER" + + " TILTING FROM WAISTSIGNWRITING TORSO-WALLPLANE STRAIGHT STRETCHSIGNWRITI" + + "NG TORSO-WALLPLANE CURVED BENDSIGNWRITING TORSO-FLOORPLANE TWISTINGSIGNW" + + "RITING UPPER BODY TILTING FROM HIP JOINTSSIGNWRITING LIMB COMBINATIONSIG" + + "NWRITING LIMB LENGTH-1SIGNWRITING LIMB LENGTH-2SIGNWRITING LIMB LENGTH-3" + + "SIGNWRITING LIMB LENGTH-4SIGNWRITING LIMB LENGTH-5SIGNWRITING LIMB LENGT" + + "H-6SIGNWRITING LIMB LENGTH-7SIGNWRITING FINGERSIGNWRITING LOCATION-WALLP" + + "LANE SPACESIGNWRITING LOCATION-FLOORPLANE SPACESIGNWRITING LOCATION HEIG" + + "HTSIGNWRITING LOCATION WIDTHSIGNWRITING LOCATION DEPTHSIGNWRITING LOCATI" + + "ON HEAD NECKSIGNWRITING LOCATION TORSOSIGNWRITING LOCATION LIMBS DIGITSS" + + "IGNWRITING COMMASIGNWRITING FULL STOPSIGNWRITING SEMICOLONSIGNWRITING CO" + + "LONSIGNWRITING PARENTHESISSIGNWRITING FILL MODIFIER-2SIGNWRITING FILL MO" + + "DIFIER-3SIGNWRITING FILL MODIFIER-4SIGNWRITING FILL MODIFIER-5SIGNWRITIN") + ("" + + "G FILL MODIFIER-6SIGNWRITING ROTATION MODIFIER-2SIGNWRITING ROTATION MOD" + + "IFIER-3SIGNWRITING ROTATION MODIFIER-4SIGNWRITING ROTATION MODIFIER-5SIG" + + "NWRITING ROTATION MODIFIER-6SIGNWRITING ROTATION MODIFIER-7SIGNWRITING R" + + "OTATION MODIFIER-8SIGNWRITING ROTATION MODIFIER-9SIGNWRITING ROTATION MO" + + "DIFIER-10SIGNWRITING ROTATION MODIFIER-11SIGNWRITING ROTATION MODIFIER-1" + + "2SIGNWRITING ROTATION MODIFIER-13SIGNWRITING ROTATION MODIFIER-14SIGNWRI" + + "TING ROTATION MODIFIER-15SIGNWRITING ROTATION MODIFIER-16COMBINING GLAGO" + + "LITIC LETTER AZUCOMBINING GLAGOLITIC LETTER BUKYCOMBINING GLAGOLITIC LET" + + "TER VEDECOMBINING GLAGOLITIC LETTER GLAGOLICOMBINING GLAGOLITIC LETTER D" + + "OBROCOMBINING GLAGOLITIC LETTER YESTUCOMBINING GLAGOLITIC LETTER ZHIVETE" + + "COMBINING GLAGOLITIC LETTER ZEMLJACOMBINING GLAGOLITIC LETTER IZHECOMBIN" + + "ING GLAGOLITIC LETTER INITIAL IZHECOMBINING GLAGOLITIC LETTER ICOMBINING" + + " GLAGOLITIC LETTER DJERVICOMBINING GLAGOLITIC LETTER KAKOCOMBINING GLAGO" + + "LITIC LETTER LJUDIJECOMBINING GLAGOLITIC LETTER MYSLITECOMBINING GLAGOLI" + + "TIC LETTER NASHICOMBINING GLAGOLITIC LETTER ONUCOMBINING GLAGOLITIC LETT" + + "ER POKOJICOMBINING GLAGOLITIC LETTER RITSICOMBINING GLAGOLITIC LETTER SL" + + "OVOCOMBINING GLAGOLITIC LETTER TVRIDOCOMBINING GLAGOLITIC LETTER UKUCOMB" + + "INING GLAGOLITIC LETTER FRITUCOMBINING GLAGOLITIC LETTER HERUCOMBINING G" + + "LAGOLITIC LETTER SHTACOMBINING GLAGOLITIC LETTER TSICOMBINING GLAGOLITIC" + + " LETTER CHRIVICOMBINING GLAGOLITIC LETTER SHACOMBINING GLAGOLITIC LETTER" + + " YERUCOMBINING GLAGOLITIC LETTER YERICOMBINING GLAGOLITIC LETTER YATICOM" + + "BINING GLAGOLITIC LETTER YUCOMBINING GLAGOLITIC LETTER SMALL YUSCOMBININ" + + "G GLAGOLITIC LETTER YOCOMBINING GLAGOLITIC LETTER IOTATED SMALL YUSCOMBI" + + "NING GLAGOLITIC LETTER BIG YUSCOMBINING GLAGOLITIC LETTER IOTATED BIG YU" + + "SCOMBINING GLAGOLITIC LETTER FITAMENDE KIKAKUI SYLLABLE M001 KIMENDE KIK" + + "AKUI SYLLABLE M002 KAMENDE KIKAKUI SYLLABLE M003 KUMENDE KIKAKUI SYLLABL" + + "E M065 KEEMENDE KIKAKUI SYLLABLE M095 KEMENDE KIKAKUI SYLLABLE M076 KOOM" + + "ENDE KIKAKUI SYLLABLE M048 KOMENDE KIKAKUI SYLLABLE M179 KUAMENDE KIKAKU" + + "I SYLLABLE M004 WIMENDE KIKAKUI SYLLABLE M005 WAMENDE KIKAKUI SYLLABLE M" + + "006 WUMENDE KIKAKUI SYLLABLE M126 WEEMENDE KIKAKUI SYLLABLE M118 WEMENDE" + + " KIKAKUI SYLLABLE M114 WOOMENDE KIKAKUI SYLLABLE M045 WOMENDE KIKAKUI SY" + + "LLABLE M194 WUIMENDE KIKAKUI SYLLABLE M143 WEIMENDE KIKAKUI SYLLABLE M06" + + "1 WVIMENDE KIKAKUI SYLLABLE M049 WVAMENDE KIKAKUI SYLLABLE M139 WVEMENDE" + + " KIKAKUI SYLLABLE M007 MINMENDE KIKAKUI SYLLABLE M008 MANMENDE KIKAKUI S" + + "YLLABLE M009 MUNMENDE KIKAKUI SYLLABLE M059 MENMENDE KIKAKUI SYLLABLE M0" + + "94 MONMENDE KIKAKUI SYLLABLE M154 MUANMENDE KIKAKUI SYLLABLE M189 MUENME" + + "NDE KIKAKUI SYLLABLE M010 BIMENDE KIKAKUI SYLLABLE M011 BAMENDE KIKAKUI " + + "SYLLABLE M012 BUMENDE KIKAKUI SYLLABLE M150 BEEMENDE KIKAKUI SYLLABLE M0" + + "97 BEMENDE KIKAKUI SYLLABLE M103 BOOMENDE KIKAKUI SYLLABLE M138 BOMENDE " + + "KIKAKUI SYLLABLE M013 IMENDE KIKAKUI SYLLABLE M014 AMENDE KIKAKUI SYLLAB" + + "LE M015 UMENDE KIKAKUI SYLLABLE M163 EEMENDE KIKAKUI SYLLABLE M100 EMEND" + + "E KIKAKUI SYLLABLE M165 OOMENDE KIKAKUI SYLLABLE M147 OMENDE KIKAKUI SYL" + + "LABLE M137 EIMENDE KIKAKUI SYLLABLE M131 INMENDE KIKAKUI SYLLABLE M135 I" + + "NMENDE KIKAKUI SYLLABLE M195 ANMENDE KIKAKUI SYLLABLE M178 ENMENDE KIKAK" + + "UI SYLLABLE M019 SIMENDE KIKAKUI SYLLABLE M020 SAMENDE KIKAKUI SYLLABLE " + + "M021 SUMENDE KIKAKUI SYLLABLE M162 SEEMENDE KIKAKUI SYLLABLE M116 SEMEND" + + "E KIKAKUI SYLLABLE M136 SOOMENDE KIKAKUI SYLLABLE M079 SOMENDE KIKAKUI S" + + "YLLABLE M196 SIAMENDE KIKAKUI SYLLABLE M025 LIMENDE KIKAKUI SYLLABLE M02" + + "6 LAMENDE KIKAKUI SYLLABLE M027 LUMENDE KIKAKUI SYLLABLE M084 LEEMENDE K" + + "IKAKUI SYLLABLE M073 LEMENDE KIKAKUI SYLLABLE M054 LOOMENDE KIKAKUI SYLL" + + "ABLE M153 LOMENDE KIKAKUI SYLLABLE M110 LONG LEMENDE KIKAKUI SYLLABLE M0" + + "16 DIMENDE KIKAKUI SYLLABLE M017 DAMENDE KIKAKUI SYLLABLE M018 DUMENDE K" + + "IKAKUI SYLLABLE M089 DEEMENDE KIKAKUI SYLLABLE M180 DOOMENDE KIKAKUI SYL" + + "LABLE M181 DOMENDE KIKAKUI SYLLABLE M022 TIMENDE KIKAKUI SYLLABLE M023 T" + + "AMENDE KIKAKUI SYLLABLE M024 TUMENDE KIKAKUI SYLLABLE M091 TEEMENDE KIKA" + + "KUI SYLLABLE M055 TEMENDE KIKAKUI SYLLABLE M104 TOOMENDE KIKAKUI SYLLABL" + + "E M069 TOMENDE KIKAKUI SYLLABLE M028 JIMENDE KIKAKUI SYLLABLE M029 JAMEN" + + "DE KIKAKUI SYLLABLE M030 JUMENDE KIKAKUI SYLLABLE M157 JEEMENDE KIKAKUI " + + "SYLLABLE M113 JEMENDE KIKAKUI SYLLABLE M160 JOOMENDE KIKAKUI SYLLABLE M0" + + "63 JOMENDE KIKAKUI SYLLABLE M175 LONG JOMENDE KIKAKUI SYLLABLE M031 YIME" + + "NDE KIKAKUI SYLLABLE M032 YAMENDE KIKAKUI SYLLABLE M033 YUMENDE KIKAKUI " + + "SYLLABLE M109 YEEMENDE KIKAKUI SYLLABLE M080 YEMENDE KIKAKUI SYLLABLE M1" + + "41 YOOMENDE KIKAKUI SYLLABLE M121 YOMENDE KIKAKUI SYLLABLE M034 FIMENDE " + + "KIKAKUI SYLLABLE M035 FAMENDE KIKAKUI SYLLABLE M036 FUMENDE KIKAKUI SYLL") + ("" + + "ABLE M078 FEEMENDE KIKAKUI SYLLABLE M075 FEMENDE KIKAKUI SYLLABLE M133 F" + + "OOMENDE KIKAKUI SYLLABLE M088 FOMENDE KIKAKUI SYLLABLE M197 FUAMENDE KIK" + + "AKUI SYLLABLE M101 FANMENDE KIKAKUI SYLLABLE M037 NINMENDE KIKAKUI SYLLA" + + "BLE M038 NANMENDE KIKAKUI SYLLABLE M039 NUNMENDE KIKAKUI SYLLABLE M117 N" + + "ENMENDE KIKAKUI SYLLABLE M169 NONMENDE KIKAKUI SYLLABLE M176 HIMENDE KIK" + + "AKUI SYLLABLE M041 HAMENDE KIKAKUI SYLLABLE M186 HUMENDE KIKAKUI SYLLABL" + + "E M040 HEEMENDE KIKAKUI SYLLABLE M096 HEMENDE KIKAKUI SYLLABLE M042 HOOM" + + "ENDE KIKAKUI SYLLABLE M140 HOMENDE KIKAKUI SYLLABLE M083 HEEIMENDE KIKAK" + + "UI SYLLABLE M128 HOOUMENDE KIKAKUI SYLLABLE M053 HINMENDE KIKAKUI SYLLAB" + + "LE M130 HANMENDE KIKAKUI SYLLABLE M087 HUNMENDE KIKAKUI SYLLABLE M052 HE" + + "NMENDE KIKAKUI SYLLABLE M193 HONMENDE KIKAKUI SYLLABLE M046 HUANMENDE KI" + + "KAKUI SYLLABLE M090 NGGIMENDE KIKAKUI SYLLABLE M043 NGGAMENDE KIKAKUI SY" + + "LLABLE M082 NGGUMENDE KIKAKUI SYLLABLE M115 NGGEEMENDE KIKAKUI SYLLABLE " + + "M146 NGGEMENDE KIKAKUI SYLLABLE M156 NGGOOMENDE KIKAKUI SYLLABLE M120 NG" + + "GOMENDE KIKAKUI SYLLABLE M159 NGGAAMENDE KIKAKUI SYLLABLE M127 NGGUAMEND" + + "E KIKAKUI SYLLABLE M086 LONG NGGEMENDE KIKAKUI SYLLABLE M106 LONG NGGOOM" + + "ENDE KIKAKUI SYLLABLE M183 LONG NGGOMENDE KIKAKUI SYLLABLE M155 GIMENDE " + + "KIKAKUI SYLLABLE M111 GAMENDE KIKAKUI SYLLABLE M168 GUMENDE KIKAKUI SYLL" + + "ABLE M190 GEEMENDE KIKAKUI SYLLABLE M166 GUEIMENDE KIKAKUI SYLLABLE M167" + + " GUANMENDE KIKAKUI SYLLABLE M184 NGENMENDE KIKAKUI SYLLABLE M057 NGONMEN" + + "DE KIKAKUI SYLLABLE M177 NGUANMENDE KIKAKUI SYLLABLE M068 PIMENDE KIKAKU" + + "I SYLLABLE M099 PAMENDE KIKAKUI SYLLABLE M050 PUMENDE KIKAKUI SYLLABLE M" + + "081 PEEMENDE KIKAKUI SYLLABLE M051 PEMENDE KIKAKUI SYLLABLE M102 POOMEND" + + "E KIKAKUI SYLLABLE M066 POMENDE KIKAKUI SYLLABLE M145 MBIMENDE KIKAKUI S" + + "YLLABLE M062 MBAMENDE KIKAKUI SYLLABLE M122 MBUMENDE KIKAKUI SYLLABLE M0" + + "47 MBEEMENDE KIKAKUI SYLLABLE M188 MBEEMENDE KIKAKUI SYLLABLE M072 MBEME" + + "NDE KIKAKUI SYLLABLE M172 MBOOMENDE KIKAKUI SYLLABLE M174 MBOMENDE KIKAK" + + "UI SYLLABLE M187 MBUUMENDE KIKAKUI SYLLABLE M161 LONG MBEMENDE KIKAKUI S" + + "YLLABLE M105 LONG MBOOMENDE KIKAKUI SYLLABLE M142 LONG MBOMENDE KIKAKUI " + + "SYLLABLE M132 KPIMENDE KIKAKUI SYLLABLE M092 KPAMENDE KIKAKUI SYLLABLE M" + + "074 KPUMENDE KIKAKUI SYLLABLE M044 KPEEMENDE KIKAKUI SYLLABLE M108 KPEME" + + "NDE KIKAKUI SYLLABLE M112 KPOOMENDE KIKAKUI SYLLABLE M158 KPOMENDE KIKAK" + + "UI SYLLABLE M124 GBIMENDE KIKAKUI SYLLABLE M056 GBAMENDE KIKAKUI SYLLABL" + + "E M148 GBUMENDE KIKAKUI SYLLABLE M093 GBEEMENDE KIKAKUI SYLLABLE M107 GB" + + "EMENDE KIKAKUI SYLLABLE M071 GBOOMENDE KIKAKUI SYLLABLE M070 GBOMENDE KI" + + "KAKUI SYLLABLE M171 RAMENDE KIKAKUI SYLLABLE M123 NDIMENDE KIKAKUI SYLLA" + + "BLE M129 NDAMENDE KIKAKUI SYLLABLE M125 NDUMENDE KIKAKUI SYLLABLE M191 N" + + "DEEMENDE KIKAKUI SYLLABLE M119 NDEMENDE KIKAKUI SYLLABLE M067 NDOOMENDE " + + "KIKAKUI SYLLABLE M064 NDOMENDE KIKAKUI SYLLABLE M152 NJAMENDE KIKAKUI SY" + + "LLABLE M192 NJUMENDE KIKAKUI SYLLABLE M149 NJEEMENDE KIKAKUI SYLLABLE M1" + + "34 NJOOMENDE KIKAKUI SYLLABLE M182 VIMENDE KIKAKUI SYLLABLE M185 VAMENDE" + + " KIKAKUI SYLLABLE M151 VUMENDE KIKAKUI SYLLABLE M173 VEEMENDE KIKAKUI SY" + + "LLABLE M085 VEMENDE KIKAKUI SYLLABLE M144 VOOMENDE KIKAKUI SYLLABLE M077" + + " VOMENDE KIKAKUI SYLLABLE M164 NYINMENDE KIKAKUI SYLLABLE M058 NYANMENDE" + + " KIKAKUI SYLLABLE M170 NYUNMENDE KIKAKUI SYLLABLE M098 NYENMENDE KIKAKUI" + + " SYLLABLE M060 NYONMENDE KIKAKUI DIGIT ONEMENDE KIKAKUI DIGIT TWOMENDE K" + + "IKAKUI DIGIT THREEMENDE KIKAKUI DIGIT FOURMENDE KIKAKUI DIGIT FIVEMENDE " + + "KIKAKUI DIGIT SIXMENDE KIKAKUI DIGIT SEVENMENDE KIKAKUI DIGIT EIGHTMENDE" + + " KIKAKUI DIGIT NINEMENDE KIKAKUI COMBINING NUMBER TEENSMENDE KIKAKUI COM" + + "BINING NUMBER TENSMENDE KIKAKUI COMBINING NUMBER HUNDREDSMENDE KIKAKUI C" + + "OMBINING NUMBER THOUSANDSMENDE KIKAKUI COMBINING NUMBER TEN THOUSANDSMEN" + + "DE KIKAKUI COMBINING NUMBER HUNDRED THOUSANDSMENDE KIKAKUI COMBINING NUM" + + "BER MILLIONSADLAM CAPITAL LETTER ALIFADLAM CAPITAL LETTER DAALIADLAM CAP" + + "ITAL LETTER LAAMADLAM CAPITAL LETTER MIIMADLAM CAPITAL LETTER BAADLAM CA" + + "PITAL LETTER SINNYIIYHEADLAM CAPITAL LETTER PEADLAM CAPITAL LETTER BHEAD" + + "LAM CAPITAL LETTER RAADLAM CAPITAL LETTER EADLAM CAPITAL LETTER FAADLAM " + + "CAPITAL LETTER IADLAM CAPITAL LETTER OADLAM CAPITAL LETTER DHAADLAM CAPI" + + "TAL LETTER YHEADLAM CAPITAL LETTER WAWADLAM CAPITAL LETTER NUNADLAM CAPI" + + "TAL LETTER KAFADLAM CAPITAL LETTER YAADLAM CAPITAL LETTER UADLAM CAPITAL" + + " LETTER JIIMADLAM CAPITAL LETTER CHIADLAM CAPITAL LETTER HAADLAM CAPITAL" + + " LETTER QAAFADLAM CAPITAL LETTER GAADLAM CAPITAL LETTER NYAADLAM CAPITAL" + + " LETTER TUADLAM CAPITAL LETTER NHAADLAM CAPITAL LETTER VAADLAM CAPITAL L" + + "ETTER KHAADLAM CAPITAL LETTER GBEADLAM CAPITAL LETTER ZALADLAM CAPITAL L" + + "ETTER KPOADLAM CAPITAL LETTER SHAADLAM SMALL LETTER ALIFADLAM SMALL LETT") + ("" + + "ER DAALIADLAM SMALL LETTER LAAMADLAM SMALL LETTER MIIMADLAM SMALL LETTER" + + " BAADLAM SMALL LETTER SINNYIIYHEADLAM SMALL LETTER PEADLAM SMALL LETTER " + + "BHEADLAM SMALL LETTER RAADLAM SMALL LETTER EADLAM SMALL LETTER FAADLAM S" + + "MALL LETTER IADLAM SMALL LETTER OADLAM SMALL LETTER DHAADLAM SMALL LETTE" + + "R YHEADLAM SMALL LETTER WAWADLAM SMALL LETTER NUNADLAM SMALL LETTER KAFA" + + "DLAM SMALL LETTER YAADLAM SMALL LETTER UADLAM SMALL LETTER JIIMADLAM SMA" + + "LL LETTER CHIADLAM SMALL LETTER HAADLAM SMALL LETTER QAAFADLAM SMALL LET" + + "TER GAADLAM SMALL LETTER NYAADLAM SMALL LETTER TUADLAM SMALL LETTER NHAA" + + "DLAM SMALL LETTER VAADLAM SMALL LETTER KHAADLAM SMALL LETTER GBEADLAM SM" + + "ALL LETTER ZALADLAM SMALL LETTER KPOADLAM SMALL LETTER SHAADLAM ALIF LEN" + + "GTHENERADLAM VOWEL LENGTHENERADLAM GEMINATION MARKADLAM HAMZAADLAM CONSO" + + "NANT MODIFIERADLAM GEMINATE CONSONANT MODIFIERADLAM NUKTAADLAM DIGIT ZER" + + "OADLAM DIGIT ONEADLAM DIGIT TWOADLAM DIGIT THREEADLAM DIGIT FOURADLAM DI" + + "GIT FIVEADLAM DIGIT SIXADLAM DIGIT SEVENADLAM DIGIT EIGHTADLAM DIGIT NIN" + + "EADLAM INITIAL EXCLAMATION MARKADLAM INITIAL QUESTION MARKARABIC MATHEMA" + + "TICAL ALEFARABIC MATHEMATICAL BEHARABIC MATHEMATICAL JEEMARABIC MATHEMAT" + + "ICAL DALARABIC MATHEMATICAL WAWARABIC MATHEMATICAL ZAINARABIC MATHEMATIC" + + "AL HAHARABIC MATHEMATICAL TAHARABIC MATHEMATICAL YEHARABIC MATHEMATICAL " + + "KAFARABIC MATHEMATICAL LAMARABIC MATHEMATICAL MEEMARABIC MATHEMATICAL NO" + + "ONARABIC MATHEMATICAL SEENARABIC MATHEMATICAL AINARABIC MATHEMATICAL FEH" + + "ARABIC MATHEMATICAL SADARABIC MATHEMATICAL QAFARABIC MATHEMATICAL REHARA" + + "BIC MATHEMATICAL SHEENARABIC MATHEMATICAL TEHARABIC MATHEMATICAL THEHARA" + + "BIC MATHEMATICAL KHAHARABIC MATHEMATICAL THALARABIC MATHEMATICAL DADARAB" + + "IC MATHEMATICAL ZAHARABIC MATHEMATICAL GHAINARABIC MATHEMATICAL DOTLESS " + + "BEHARABIC MATHEMATICAL DOTLESS NOONARABIC MATHEMATICAL DOTLESS FEHARABIC" + + " MATHEMATICAL DOTLESS QAFARABIC MATHEMATICAL INITIAL BEHARABIC MATHEMATI" + + "CAL INITIAL JEEMARABIC MATHEMATICAL INITIAL HEHARABIC MATHEMATICAL INITI" + + "AL HAHARABIC MATHEMATICAL INITIAL YEHARABIC MATHEMATICAL INITIAL KAFARAB" + + "IC MATHEMATICAL INITIAL LAMARABIC MATHEMATICAL INITIAL MEEMARABIC MATHEM" + + "ATICAL INITIAL NOONARABIC MATHEMATICAL INITIAL SEENARABIC MATHEMATICAL I" + + "NITIAL AINARABIC MATHEMATICAL INITIAL FEHARABIC MATHEMATICAL INITIAL SAD" + + "ARABIC MATHEMATICAL INITIAL QAFARABIC MATHEMATICAL INITIAL SHEENARABIC M" + + "ATHEMATICAL INITIAL TEHARABIC MATHEMATICAL INITIAL THEHARABIC MATHEMATIC" + + "AL INITIAL KHAHARABIC MATHEMATICAL INITIAL DADARABIC MATHEMATICAL INITIA" + + "L GHAINARABIC MATHEMATICAL TAILED JEEMARABIC MATHEMATICAL TAILED HAHARAB" + + "IC MATHEMATICAL TAILED YEHARABIC MATHEMATICAL TAILED LAMARABIC MATHEMATI" + + "CAL TAILED NOONARABIC MATHEMATICAL TAILED SEENARABIC MATHEMATICAL TAILED" + + " AINARABIC MATHEMATICAL TAILED SADARABIC MATHEMATICAL TAILED QAFARABIC M" + + "ATHEMATICAL TAILED SHEENARABIC MATHEMATICAL TAILED KHAHARABIC MATHEMATIC" + + "AL TAILED DADARABIC MATHEMATICAL TAILED GHAINARABIC MATHEMATICAL TAILED " + + "DOTLESS NOONARABIC MATHEMATICAL TAILED DOTLESS QAFARABIC MATHEMATICAL ST" + + "RETCHED BEHARABIC MATHEMATICAL STRETCHED JEEMARABIC MATHEMATICAL STRETCH" + + "ED HEHARABIC MATHEMATICAL STRETCHED HAHARABIC MATHEMATICAL STRETCHED TAH" + + "ARABIC MATHEMATICAL STRETCHED YEHARABIC MATHEMATICAL STRETCHED KAFARABIC" + + " MATHEMATICAL STRETCHED MEEMARABIC MATHEMATICAL STRETCHED NOONARABIC MAT" + + "HEMATICAL STRETCHED SEENARABIC MATHEMATICAL STRETCHED AINARABIC MATHEMAT" + + "ICAL STRETCHED FEHARABIC MATHEMATICAL STRETCHED SADARABIC MATHEMATICAL S" + + "TRETCHED QAFARABIC MATHEMATICAL STRETCHED SHEENARABIC MATHEMATICAL STRET" + + "CHED TEHARABIC MATHEMATICAL STRETCHED THEHARABIC MATHEMATICAL STRETCHED " + + "KHAHARABIC MATHEMATICAL STRETCHED DADARABIC MATHEMATICAL STRETCHED ZAHAR" + + "ABIC MATHEMATICAL STRETCHED GHAINARABIC MATHEMATICAL STRETCHED DOTLESS B" + + "EHARABIC MATHEMATICAL STRETCHED DOTLESS FEHARABIC MATHEMATICAL LOOPED AL" + + "EFARABIC MATHEMATICAL LOOPED BEHARABIC MATHEMATICAL LOOPED JEEMARABIC MA" + + "THEMATICAL LOOPED DALARABIC MATHEMATICAL LOOPED HEHARABIC MATHEMATICAL L" + + "OOPED WAWARABIC MATHEMATICAL LOOPED ZAINARABIC MATHEMATICAL LOOPED HAHAR" + + "ABIC MATHEMATICAL LOOPED TAHARABIC MATHEMATICAL LOOPED YEHARABIC MATHEMA" + + "TICAL LOOPED LAMARABIC MATHEMATICAL LOOPED MEEMARABIC MATHEMATICAL LOOPE" + + "D NOONARABIC MATHEMATICAL LOOPED SEENARABIC MATHEMATICAL LOOPED AINARABI" + + "C MATHEMATICAL LOOPED FEHARABIC MATHEMATICAL LOOPED SADARABIC MATHEMATIC" + + "AL LOOPED QAFARABIC MATHEMATICAL LOOPED REHARABIC MATHEMATICAL LOOPED SH" + + "EENARABIC MATHEMATICAL LOOPED TEHARABIC MATHEMATICAL LOOPED THEHARABIC M" + + "ATHEMATICAL LOOPED KHAHARABIC MATHEMATICAL LOOPED THALARABIC MATHEMATICA" + + "L LOOPED DADARABIC MATHEMATICAL LOOPED ZAHARABIC MATHEMATICAL LOOPED GHA" + + "INARABIC MATHEMATICAL DOUBLE-STRUCK BEHARABIC MATHEMATICAL DOUBLE-STRUCK") + ("" + + " JEEMARABIC MATHEMATICAL DOUBLE-STRUCK DALARABIC MATHEMATICAL DOUBLE-STR" + + "UCK WAWARABIC MATHEMATICAL DOUBLE-STRUCK ZAINARABIC MATHEMATICAL DOUBLE-" + + "STRUCK HAHARABIC MATHEMATICAL DOUBLE-STRUCK TAHARABIC MATHEMATICAL DOUBL" + + "E-STRUCK YEHARABIC MATHEMATICAL DOUBLE-STRUCK LAMARABIC MATHEMATICAL DOU" + + "BLE-STRUCK MEEMARABIC MATHEMATICAL DOUBLE-STRUCK NOONARABIC MATHEMATICAL" + + " DOUBLE-STRUCK SEENARABIC MATHEMATICAL DOUBLE-STRUCK AINARABIC MATHEMATI" + + "CAL DOUBLE-STRUCK FEHARABIC MATHEMATICAL DOUBLE-STRUCK SADARABIC MATHEMA" + + "TICAL DOUBLE-STRUCK QAFARABIC MATHEMATICAL DOUBLE-STRUCK REHARABIC MATHE" + + "MATICAL DOUBLE-STRUCK SHEENARABIC MATHEMATICAL DOUBLE-STRUCK TEHARABIC M" + + "ATHEMATICAL DOUBLE-STRUCK THEHARABIC MATHEMATICAL DOUBLE-STRUCK KHAHARAB" + + "IC MATHEMATICAL DOUBLE-STRUCK THALARABIC MATHEMATICAL DOUBLE-STRUCK DADA" + + "RABIC MATHEMATICAL DOUBLE-STRUCK ZAHARABIC MATHEMATICAL DOUBLE-STRUCK GH" + + "AINARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEELARABIC MATHEMA" + + "TICAL OPERATOR HAH WITH DALMAHJONG TILE EAST WINDMAHJONG TILE SOUTH WIND" + + "MAHJONG TILE WEST WINDMAHJONG TILE NORTH WINDMAHJONG TILE RED DRAGONMAHJ" + + "ONG TILE GREEN DRAGONMAHJONG TILE WHITE DRAGONMAHJONG TILE ONE OF CHARAC" + + "TERSMAHJONG TILE TWO OF CHARACTERSMAHJONG TILE THREE OF CHARACTERSMAHJON" + + "G TILE FOUR OF CHARACTERSMAHJONG TILE FIVE OF CHARACTERSMAHJONG TILE SIX" + + " OF CHARACTERSMAHJONG TILE SEVEN OF CHARACTERSMAHJONG TILE EIGHT OF CHAR" + + "ACTERSMAHJONG TILE NINE OF CHARACTERSMAHJONG TILE ONE OF BAMBOOSMAHJONG " + + "TILE TWO OF BAMBOOSMAHJONG TILE THREE OF BAMBOOSMAHJONG TILE FOUR OF BAM" + + "BOOSMAHJONG TILE FIVE OF BAMBOOSMAHJONG TILE SIX OF BAMBOOSMAHJONG TILE " + + "SEVEN OF BAMBOOSMAHJONG TILE EIGHT OF BAMBOOSMAHJONG TILE NINE OF BAMBOO" + + "SMAHJONG TILE ONE OF CIRCLESMAHJONG TILE TWO OF CIRCLESMAHJONG TILE THRE" + + "E OF CIRCLESMAHJONG TILE FOUR OF CIRCLESMAHJONG TILE FIVE OF CIRCLESMAHJ" + + "ONG TILE SIX OF CIRCLESMAHJONG TILE SEVEN OF CIRCLESMAHJONG TILE EIGHT O" + + "F CIRCLESMAHJONG TILE NINE OF CIRCLESMAHJONG TILE PLUMMAHJONG TILE ORCHI" + + "DMAHJONG TILE BAMBOOMAHJONG TILE CHRYSANTHEMUMMAHJONG TILE SPRINGMAHJONG" + + " TILE SUMMERMAHJONG TILE AUTUMNMAHJONG TILE WINTERMAHJONG TILE JOKERMAHJ" + + "ONG TILE BACKDOMINO TILE HORIZONTAL BACKDOMINO TILE HORIZONTAL-00-00DOMI" + + "NO TILE HORIZONTAL-00-01DOMINO TILE HORIZONTAL-00-02DOMINO TILE HORIZONT" + + "AL-00-03DOMINO TILE HORIZONTAL-00-04DOMINO TILE HORIZONTAL-00-05DOMINO T" + + "ILE HORIZONTAL-00-06DOMINO TILE HORIZONTAL-01-00DOMINO TILE HORIZONTAL-0" + + "1-01DOMINO TILE HORIZONTAL-01-02DOMINO TILE HORIZONTAL-01-03DOMINO TILE " + + "HORIZONTAL-01-04DOMINO TILE HORIZONTAL-01-05DOMINO TILE HORIZONTAL-01-06" + + "DOMINO TILE HORIZONTAL-02-00DOMINO TILE HORIZONTAL-02-01DOMINO TILE HORI" + + "ZONTAL-02-02DOMINO TILE HORIZONTAL-02-03DOMINO TILE HORIZONTAL-02-04DOMI" + + "NO TILE HORIZONTAL-02-05DOMINO TILE HORIZONTAL-02-06DOMINO TILE HORIZONT" + + "AL-03-00DOMINO TILE HORIZONTAL-03-01DOMINO TILE HORIZONTAL-03-02DOMINO T" + + "ILE HORIZONTAL-03-03DOMINO TILE HORIZONTAL-03-04DOMINO TILE HORIZONTAL-0" + + "3-05DOMINO TILE HORIZONTAL-03-06DOMINO TILE HORIZONTAL-04-00DOMINO TILE " + + "HORIZONTAL-04-01DOMINO TILE HORIZONTAL-04-02DOMINO TILE HORIZONTAL-04-03" + + "DOMINO TILE HORIZONTAL-04-04DOMINO TILE HORIZONTAL-04-05DOMINO TILE HORI" + + "ZONTAL-04-06DOMINO TILE HORIZONTAL-05-00DOMINO TILE HORIZONTAL-05-01DOMI" + + "NO TILE HORIZONTAL-05-02DOMINO TILE HORIZONTAL-05-03DOMINO TILE HORIZONT" + + "AL-05-04DOMINO TILE HORIZONTAL-05-05DOMINO TILE HORIZONTAL-05-06DOMINO T" + + "ILE HORIZONTAL-06-00DOMINO TILE HORIZONTAL-06-01DOMINO TILE HORIZONTAL-0" + + "6-02DOMINO TILE HORIZONTAL-06-03DOMINO TILE HORIZONTAL-06-04DOMINO TILE " + + "HORIZONTAL-06-05DOMINO TILE HORIZONTAL-06-06DOMINO TILE VERTICAL BACKDOM" + + "INO TILE VERTICAL-00-00DOMINO TILE VERTICAL-00-01DOMINO TILE VERTICAL-00" + + "-02DOMINO TILE VERTICAL-00-03DOMINO TILE VERTICAL-00-04DOMINO TILE VERTI" + + "CAL-00-05DOMINO TILE VERTICAL-00-06DOMINO TILE VERTICAL-01-00DOMINO TILE" + + " VERTICAL-01-01DOMINO TILE VERTICAL-01-02DOMINO TILE VERTICAL-01-03DOMIN" + + "O TILE VERTICAL-01-04DOMINO TILE VERTICAL-01-05DOMINO TILE VERTICAL-01-0" + + "6DOMINO TILE VERTICAL-02-00DOMINO TILE VERTICAL-02-01DOMINO TILE VERTICA" + + "L-02-02DOMINO TILE VERTICAL-02-03DOMINO TILE VERTICAL-02-04DOMINO TILE V" + + "ERTICAL-02-05DOMINO TILE VERTICAL-02-06DOMINO TILE VERTICAL-03-00DOMINO " + + "TILE VERTICAL-03-01DOMINO TILE VERTICAL-03-02DOMINO TILE VERTICAL-03-03D" + + "OMINO TILE VERTICAL-03-04DOMINO TILE VERTICAL-03-05DOMINO TILE VERTICAL-" + + "03-06DOMINO TILE VERTICAL-04-00DOMINO TILE VERTICAL-04-01DOMINO TILE VER" + + "TICAL-04-02DOMINO TILE VERTICAL-04-03DOMINO TILE VERTICAL-04-04DOMINO TI" + + "LE VERTICAL-04-05DOMINO TILE VERTICAL-04-06DOMINO TILE VERTICAL-05-00DOM" + + "INO TILE VERTICAL-05-01DOMINO TILE VERTICAL-05-02DOMINO TILE VERTICAL-05" + + "-03DOMINO TILE VERTICAL-05-04DOMINO TILE VERTICAL-05-05DOMINO TILE VERTI") + ("" + + "CAL-05-06DOMINO TILE VERTICAL-06-00DOMINO TILE VERTICAL-06-01DOMINO TILE" + + " VERTICAL-06-02DOMINO TILE VERTICAL-06-03DOMINO TILE VERTICAL-06-04DOMIN" + + "O TILE VERTICAL-06-05DOMINO TILE VERTICAL-06-06PLAYING CARD BACKPLAYING " + + "CARD ACE OF SPADESPLAYING CARD TWO OF SPADESPLAYING CARD THREE OF SPADES" + + "PLAYING CARD FOUR OF SPADESPLAYING CARD FIVE OF SPADESPLAYING CARD SIX O" + + "F SPADESPLAYING CARD SEVEN OF SPADESPLAYING CARD EIGHT OF SPADESPLAYING " + + "CARD NINE OF SPADESPLAYING CARD TEN OF SPADESPLAYING CARD JACK OF SPADES" + + "PLAYING CARD KNIGHT OF SPADESPLAYING CARD QUEEN OF SPADESPLAYING CARD KI" + + "NG OF SPADESPLAYING CARD ACE OF HEARTSPLAYING CARD TWO OF HEARTSPLAYING " + + "CARD THREE OF HEARTSPLAYING CARD FOUR OF HEARTSPLAYING CARD FIVE OF HEAR" + + "TSPLAYING CARD SIX OF HEARTSPLAYING CARD SEVEN OF HEARTSPLAYING CARD EIG" + + "HT OF HEARTSPLAYING CARD NINE OF HEARTSPLAYING CARD TEN OF HEARTSPLAYING" + + " CARD JACK OF HEARTSPLAYING CARD KNIGHT OF HEARTSPLAYING CARD QUEEN OF H" + + "EARTSPLAYING CARD KING OF HEARTSPLAYING CARD RED JOKERPLAYING CARD ACE O" + + "F DIAMONDSPLAYING CARD TWO OF DIAMONDSPLAYING CARD THREE OF DIAMONDSPLAY" + + "ING CARD FOUR OF DIAMONDSPLAYING CARD FIVE OF DIAMONDSPLAYING CARD SIX O" + + "F DIAMONDSPLAYING CARD SEVEN OF DIAMONDSPLAYING CARD EIGHT OF DIAMONDSPL" + + "AYING CARD NINE OF DIAMONDSPLAYING CARD TEN OF DIAMONDSPLAYING CARD JACK" + + " OF DIAMONDSPLAYING CARD KNIGHT OF DIAMONDSPLAYING CARD QUEEN OF DIAMOND" + + "SPLAYING CARD KING OF DIAMONDSPLAYING CARD BLACK JOKERPLAYING CARD ACE O" + + "F CLUBSPLAYING CARD TWO OF CLUBSPLAYING CARD THREE OF CLUBSPLAYING CARD " + + "FOUR OF CLUBSPLAYING CARD FIVE OF CLUBSPLAYING CARD SIX OF CLUBSPLAYING " + + "CARD SEVEN OF CLUBSPLAYING CARD EIGHT OF CLUBSPLAYING CARD NINE OF CLUBS" + + "PLAYING CARD TEN OF CLUBSPLAYING CARD JACK OF CLUBSPLAYING CARD KNIGHT O" + + "F CLUBSPLAYING CARD QUEEN OF CLUBSPLAYING CARD KING OF CLUBSPLAYING CARD" + + " WHITE JOKERPLAYING CARD FOOLPLAYING CARD TRUMP-1PLAYING CARD TRUMP-2PLA" + + "YING CARD TRUMP-3PLAYING CARD TRUMP-4PLAYING CARD TRUMP-5PLAYING CARD TR" + + "UMP-6PLAYING CARD TRUMP-7PLAYING CARD TRUMP-8PLAYING CARD TRUMP-9PLAYING" + + " CARD TRUMP-10PLAYING CARD TRUMP-11PLAYING CARD TRUMP-12PLAYING CARD TRU" + + "MP-13PLAYING CARD TRUMP-14PLAYING CARD TRUMP-15PLAYING CARD TRUMP-16PLAY" + + "ING CARD TRUMP-17PLAYING CARD TRUMP-18PLAYING CARD TRUMP-19PLAYING CARD " + + "TRUMP-20PLAYING CARD TRUMP-21DIGIT ZERO FULL STOPDIGIT ZERO COMMADIGIT O" + + "NE COMMADIGIT TWO COMMADIGIT THREE COMMADIGIT FOUR COMMADIGIT FIVE COMMA" + + "DIGIT SIX COMMADIGIT SEVEN COMMADIGIT EIGHT COMMADIGIT NINE COMMADINGBAT" + + " CIRCLED SANS-SERIF DIGIT ZERODINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT " + + "ZEROPARENTHESIZED LATIN CAPITAL LETTER APARENTHESIZED LATIN CAPITAL LETT" + + "ER BPARENTHESIZED LATIN CAPITAL LETTER CPARENTHESIZED LATIN CAPITAL LETT" + + "ER DPARENTHESIZED LATIN CAPITAL LETTER EPARENTHESIZED LATIN CAPITAL LETT" + + "ER FPARENTHESIZED LATIN CAPITAL LETTER GPARENTHESIZED LATIN CAPITAL LETT" + + "ER HPARENTHESIZED LATIN CAPITAL LETTER IPARENTHESIZED LATIN CAPITAL LETT" + + "ER JPARENTHESIZED LATIN CAPITAL LETTER KPARENTHESIZED LATIN CAPITAL LETT" + + "ER LPARENTHESIZED LATIN CAPITAL LETTER MPARENTHESIZED LATIN CAPITAL LETT" + + "ER NPARENTHESIZED LATIN CAPITAL LETTER OPARENTHESIZED LATIN CAPITAL LETT" + + "ER PPARENTHESIZED LATIN CAPITAL LETTER QPARENTHESIZED LATIN CAPITAL LETT" + + "ER RPARENTHESIZED LATIN CAPITAL LETTER SPARENTHESIZED LATIN CAPITAL LETT" + + "ER TPARENTHESIZED LATIN CAPITAL LETTER UPARENTHESIZED LATIN CAPITAL LETT" + + "ER VPARENTHESIZED LATIN CAPITAL LETTER WPARENTHESIZED LATIN CAPITAL LETT" + + "ER XPARENTHESIZED LATIN CAPITAL LETTER YPARENTHESIZED LATIN CAPITAL LETT" + + "ER ZTORTOISE SHELL BRACKETED LATIN CAPITAL LETTER SCIRCLED ITALIC LATIN " + + "CAPITAL LETTER CCIRCLED ITALIC LATIN CAPITAL LETTER RCIRCLED CDCIRCLED W" + + "ZSQUARED LATIN CAPITAL LETTER ASQUARED LATIN CAPITAL LETTER BSQUARED LAT" + + "IN CAPITAL LETTER CSQUARED LATIN CAPITAL LETTER DSQUARED LATIN CAPITAL L" + + "ETTER ESQUARED LATIN CAPITAL LETTER FSQUARED LATIN CAPITAL LETTER GSQUAR" + + "ED LATIN CAPITAL LETTER HSQUARED LATIN CAPITAL LETTER ISQUARED LATIN CAP" + + "ITAL LETTER JSQUARED LATIN CAPITAL LETTER KSQUARED LATIN CAPITAL LETTER " + + "LSQUARED LATIN CAPITAL LETTER MSQUARED LATIN CAPITAL LETTER NSQUARED LAT" + + "IN CAPITAL LETTER OSQUARED LATIN CAPITAL LETTER PSQUARED LATIN CAPITAL L" + + "ETTER QSQUARED LATIN CAPITAL LETTER RSQUARED LATIN CAPITAL LETTER SSQUAR" + + "ED LATIN CAPITAL LETTER TSQUARED LATIN CAPITAL LETTER USQUARED LATIN CAP" + + "ITAL LETTER VSQUARED LATIN CAPITAL LETTER WSQUARED LATIN CAPITAL LETTER " + + "XSQUARED LATIN CAPITAL LETTER YSQUARED LATIN CAPITAL LETTER ZSQUARED HVS" + + "QUARED MVSQUARED SDSQUARED SSSQUARED PPVSQUARED WCNEGATIVE CIRCLED LATIN" + + " CAPITAL LETTER ANEGATIVE CIRCLED LATIN CAPITAL LETTER BNEGATIVE CIRCLED" + + " LATIN CAPITAL LETTER CNEGATIVE CIRCLED LATIN CAPITAL LETTER DNEGATIVE C") + ("" + + "IRCLED LATIN CAPITAL LETTER ENEGATIVE CIRCLED LATIN CAPITAL LETTER FNEGA" + + "TIVE CIRCLED LATIN CAPITAL LETTER GNEGATIVE CIRCLED LATIN CAPITAL LETTER" + + " HNEGATIVE CIRCLED LATIN CAPITAL LETTER INEGATIVE CIRCLED LATIN CAPITAL " + + "LETTER JNEGATIVE CIRCLED LATIN CAPITAL LETTER KNEGATIVE CIRCLED LATIN CA" + + "PITAL LETTER LNEGATIVE CIRCLED LATIN CAPITAL LETTER MNEGATIVE CIRCLED LA" + + "TIN CAPITAL LETTER NNEGATIVE CIRCLED LATIN CAPITAL LETTER ONEGATIVE CIRC" + + "LED LATIN CAPITAL LETTER PNEGATIVE CIRCLED LATIN CAPITAL LETTER QNEGATIV" + + "E CIRCLED LATIN CAPITAL LETTER RNEGATIVE CIRCLED LATIN CAPITAL LETTER SN" + + "EGATIVE CIRCLED LATIN CAPITAL LETTER TNEGATIVE CIRCLED LATIN CAPITAL LET" + + "TER UNEGATIVE CIRCLED LATIN CAPITAL LETTER VNEGATIVE CIRCLED LATIN CAPIT" + + "AL LETTER WNEGATIVE CIRCLED LATIN CAPITAL LETTER XNEGATIVE CIRCLED LATIN" + + " CAPITAL LETTER YNEGATIVE CIRCLED LATIN CAPITAL LETTER ZRAISED MC SIGNRA" + + "ISED MD SIGNNEGATIVE SQUARED LATIN CAPITAL LETTER ANEGATIVE SQUARED LATI" + + "N CAPITAL LETTER BNEGATIVE SQUARED LATIN CAPITAL LETTER CNEGATIVE SQUARE" + + "D LATIN CAPITAL LETTER DNEGATIVE SQUARED LATIN CAPITAL LETTER ENEGATIVE " + + "SQUARED LATIN CAPITAL LETTER FNEGATIVE SQUARED LATIN CAPITAL LETTER GNEG" + + "ATIVE SQUARED LATIN CAPITAL LETTER HNEGATIVE SQUARED LATIN CAPITAL LETTE" + + "R INEGATIVE SQUARED LATIN CAPITAL LETTER JNEGATIVE SQUARED LATIN CAPITAL" + + " LETTER KNEGATIVE SQUARED LATIN CAPITAL LETTER LNEGATIVE SQUARED LATIN C" + + "APITAL LETTER MNEGATIVE SQUARED LATIN CAPITAL LETTER NNEGATIVE SQUARED L" + + "ATIN CAPITAL LETTER ONEGATIVE SQUARED LATIN CAPITAL LETTER PNEGATIVE SQU" + + "ARED LATIN CAPITAL LETTER QNEGATIVE SQUARED LATIN CAPITAL LETTER RNEGATI" + + "VE SQUARED LATIN CAPITAL LETTER SNEGATIVE SQUARED LATIN CAPITAL LETTER T" + + "NEGATIVE SQUARED LATIN CAPITAL LETTER UNEGATIVE SQUARED LATIN CAPITAL LE" + + "TTER VNEGATIVE SQUARED LATIN CAPITAL LETTER WNEGATIVE SQUARED LATIN CAPI" + + "TAL LETTER XNEGATIVE SQUARED LATIN CAPITAL LETTER YNEGATIVE SQUARED LATI" + + "N CAPITAL LETTER ZCROSSED NEGATIVE SQUARED LATIN CAPITAL LETTER PNEGATIV" + + "E SQUARED ICNEGATIVE SQUARED PANEGATIVE SQUARED SANEGATIVE SQUARED ABNEG" + + "ATIVE SQUARED WCSQUARE DJSQUARED CLSQUARED COOLSQUARED FREESQUARED IDSQU" + + "ARED NEWSQUARED NGSQUARED OKSQUARED SOSSQUARED UP WITH EXCLAMATION MARKS" + + "QUARED VSSQUARED THREE DSQUARED SECOND SCREENSQUARED TWO KSQUARED FOUR K" + + "SQUARED EIGHT KSQUARED FIVE POINT ONESQUARED SEVEN POINT ONESQUARED TWEN" + + "TY-TWO POINT TWOSQUARED SIXTY PSQUARED ONE HUNDRED TWENTY PSQUARED LATIN" + + " SMALL LETTER DSQUARED HCSQUARED HDRSQUARED HI-RESSQUARED LOSSLESSSQUARE" + + "D SHVSQUARED UHDSQUARED VODREGIONAL INDICATOR SYMBOL LETTER AREGIONAL IN" + + "DICATOR SYMBOL LETTER BREGIONAL INDICATOR SYMBOL LETTER CREGIONAL INDICA" + + "TOR SYMBOL LETTER DREGIONAL INDICATOR SYMBOL LETTER EREGIONAL INDICATOR " + + "SYMBOL LETTER FREGIONAL INDICATOR SYMBOL LETTER GREGIONAL INDICATOR SYMB" + + "OL LETTER HREGIONAL INDICATOR SYMBOL LETTER IREGIONAL INDICATOR SYMBOL L" + + "ETTER JREGIONAL INDICATOR SYMBOL LETTER KREGIONAL INDICATOR SYMBOL LETTE" + + "R LREGIONAL INDICATOR SYMBOL LETTER MREGIONAL INDICATOR SYMBOL LETTER NR" + + "EGIONAL INDICATOR SYMBOL LETTER OREGIONAL INDICATOR SYMBOL LETTER PREGIO" + + "NAL INDICATOR SYMBOL LETTER QREGIONAL INDICATOR SYMBOL LETTER RREGIONAL " + + "INDICATOR SYMBOL LETTER SREGIONAL INDICATOR SYMBOL LETTER TREGIONAL INDI" + + "CATOR SYMBOL LETTER UREGIONAL INDICATOR SYMBOL LETTER VREGIONAL INDICATO" + + "R SYMBOL LETTER WREGIONAL INDICATOR SYMBOL LETTER XREGIONAL INDICATOR SY" + + "MBOL LETTER YREGIONAL INDICATOR SYMBOL LETTER ZSQUARE HIRAGANA HOKASQUAR" + + "ED KATAKANA KOKOSQUARED KATAKANA SASQUARED CJK UNIFIED IDEOGRAPH-624BSQU" + + "ARED CJK UNIFIED IDEOGRAPH-5B57SQUARED CJK UNIFIED IDEOGRAPH-53CCSQUARED" + + " KATAKANA DESQUARED CJK UNIFIED IDEOGRAPH-4E8CSQUARED CJK UNIFIED IDEOGR" + + "APH-591ASQUARED CJK UNIFIED IDEOGRAPH-89E3SQUARED CJK UNIFIED IDEOGRAPH-" + + "5929SQUARED CJK UNIFIED IDEOGRAPH-4EA4SQUARED CJK UNIFIED IDEOGRAPH-6620" + + "SQUARED CJK UNIFIED IDEOGRAPH-7121SQUARED CJK UNIFIED IDEOGRAPH-6599SQUA" + + "RED CJK UNIFIED IDEOGRAPH-524DSQUARED CJK UNIFIED IDEOGRAPH-5F8CSQUARED " + + "CJK UNIFIED IDEOGRAPH-518DSQUARED CJK UNIFIED IDEOGRAPH-65B0SQUARED CJK " + + "UNIFIED IDEOGRAPH-521DSQUARED CJK UNIFIED IDEOGRAPH-7D42SQUARED CJK UNIF" + + "IED IDEOGRAPH-751FSQUARED CJK UNIFIED IDEOGRAPH-8CA9SQUARED CJK UNIFIED " + + "IDEOGRAPH-58F0SQUARED CJK UNIFIED IDEOGRAPH-5439SQUARED CJK UNIFIED IDEO" + + "GRAPH-6F14SQUARED CJK UNIFIED IDEOGRAPH-6295SQUARED CJK UNIFIED IDEOGRAP" + + "H-6355SQUARED CJK UNIFIED IDEOGRAPH-4E00SQUARED CJK UNIFIED IDEOGRAPH-4E" + + "09SQUARED CJK UNIFIED IDEOGRAPH-904ASQUARED CJK UNIFIED IDEOGRAPH-5DE6SQ" + + "UARED CJK UNIFIED IDEOGRAPH-4E2DSQUARED CJK UNIFIED IDEOGRAPH-53F3SQUARE" + + "D CJK UNIFIED IDEOGRAPH-6307SQUARED CJK UNIFIED IDEOGRAPH-8D70SQUARED CJ" + + "K UNIFIED IDEOGRAPH-6253SQUARED CJK UNIFIED IDEOGRAPH-7981SQUARED CJK UN") + ("" + + "IFIED IDEOGRAPH-7A7ASQUARED CJK UNIFIED IDEOGRAPH-5408SQUARED CJK UNIFIE" + + "D IDEOGRAPH-6E80SQUARED CJK UNIFIED IDEOGRAPH-6709SQUARED CJK UNIFIED ID" + + "EOGRAPH-6708SQUARED CJK UNIFIED IDEOGRAPH-7533SQUARED CJK UNIFIED IDEOGR" + + "APH-5272SQUARED CJK UNIFIED IDEOGRAPH-55B6SQUARED CJK UNIFIED IDEOGRAPH-" + + "914DTORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672CTORTOISE SHELL BR" + + "ACKETED CJK UNIFIED IDEOGRAPH-4E09TORTOISE SHELL BRACKETED CJK UNIFIED I" + + "DEOGRAPH-4E8CTORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89TORTOISE" + + " SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9TORTOISE SHELL BRACKETED CJK " + + "UNIFIED IDEOGRAPH-6253TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D" + + "7TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DDTORTOISE SHELL BRACK" + + "ETED CJK UNIFIED IDEOGRAPH-6557CIRCLED IDEOGRAPH ADVANTAGECIRCLED IDEOGR" + + "APH ACCEPTCYCLONEFOGGYCLOSED UMBRELLANIGHT WITH STARSSUNRISE OVER MOUNTA" + + "INSSUNRISECITYSCAPE AT DUSKSUNSET OVER BUILDINGSRAINBOWBRIDGE AT NIGHTWA" + + "TER WAVEVOLCANOMILKY WAYEARTH GLOBE EUROPE-AFRICAEARTH GLOBE AMERICASEAR" + + "TH GLOBE ASIA-AUSTRALIAGLOBE WITH MERIDIANSNEW MOON SYMBOLWAXING CRESCEN" + + "T MOON SYMBOLFIRST QUARTER MOON SYMBOLWAXING GIBBOUS MOON SYMBOLFULL MOO" + + "N SYMBOLWANING GIBBOUS MOON SYMBOLLAST QUARTER MOON SYMBOLWANING CRESCEN" + + "T MOON SYMBOLCRESCENT MOONNEW MOON WITH FACEFIRST QUARTER MOON WITH FACE" + + "LAST QUARTER MOON WITH FACEFULL MOON WITH FACESUN WITH FACEGLOWING STARS" + + "HOOTING STARTHERMOMETERBLACK DROPLETWHITE SUNWHITE SUN WITH SMALL CLOUDW" + + "HITE SUN BEHIND CLOUDWHITE SUN BEHIND CLOUD WITH RAINCLOUD WITH RAINCLOU" + + "D WITH SNOWCLOUD WITH LIGHTNINGCLOUD WITH TORNADOFOGWIND BLOWING FACEHOT" + + " DOGTACOBURRITOCHESTNUTSEEDLINGEVERGREEN TREEDECIDUOUS TREEPALM TREECACT" + + "USHOT PEPPERTULIPCHERRY BLOSSOMROSEHIBISCUSSUNFLOWERBLOSSOMEAR OF MAIZEE" + + "AR OF RICEHERBFOUR LEAF CLOVERMAPLE LEAFFALLEN LEAFLEAF FLUTTERING IN WI" + + "NDMUSHROOMTOMATOAUBERGINEGRAPESMELONWATERMELONTANGERINELEMONBANANAPINEAP" + + "PLERED APPLEGREEN APPLEPEARPEACHCHERRIESSTRAWBERRYHAMBURGERSLICE OF PIZZ" + + "AMEAT ON BONEPOULTRY LEGRICE CRACKERRICE BALLCOOKED RICECURRY AND RICEST" + + "EAMING BOWLSPAGHETTIBREADFRENCH FRIESROASTED SWEET POTATODANGOODENSUSHIF" + + "RIED SHRIMPFISH CAKE WITH SWIRL DESIGNSOFT ICE CREAMSHAVED ICEICE CREAMD" + + "OUGHNUTCOOKIECHOCOLATE BARCANDYLOLLIPOPCUSTARDHONEY POTSHORTCAKEBENTO BO" + + "XPOT OF FOODCOOKINGFORK AND KNIFETEACUP WITHOUT HANDLESAKE BOTTLE AND CU" + + "PWINE GLASSCOCKTAIL GLASSTROPICAL DRINKBEER MUGCLINKING BEER MUGSBABY BO" + + "TTLEFORK AND KNIFE WITH PLATEBOTTLE WITH POPPING CORKPOPCORNRIBBONWRAPPE" + + "D PRESENTBIRTHDAY CAKEJACK-O-LANTERNCHRISTMAS TREEFATHER CHRISTMASFIREWO" + + "RKSFIREWORK SPARKLERBALLOONPARTY POPPERCONFETTI BALLTANABATA TREECROSSED" + + " FLAGSPINE DECORATIONJAPANESE DOLLSCARP STREAMERWIND CHIMEMOON VIEWING C" + + "EREMONYSCHOOL SATCHELGRADUATION CAPHEART WITH TIP ON THE LEFTBOUQUET OF " + + "FLOWERSMILITARY MEDALREMINDER RIBBONMUSICAL KEYBOARD WITH JACKSSTUDIO MI" + + "CROPHONELEVEL SLIDERCONTROL KNOBSBEAMED ASCENDING MUSICAL NOTESBEAMED DE" + + "SCENDING MUSICAL NOTESFILM FRAMESADMISSION TICKETSCAROUSEL HORSEFERRIS W" + + "HEELROLLER COASTERFISHING POLE AND FISHMICROPHONEMOVIE CAMERACINEMAHEADP" + + "HONEARTIST PALETTETOP HATCIRCUS TENTTICKETCLAPPER BOARDPERFORMING ARTSVI" + + "DEO GAMEDIRECT HITSLOT MACHINEBILLIARDSGAME DIEBOWLINGFLOWER PLAYING CAR" + + "DSMUSICAL NOTEMULTIPLE MUSICAL NOTESSAXOPHONEGUITARMUSICAL KEYBOARDTRUMP" + + "ETVIOLINMUSICAL SCORERUNNING SHIRT WITH SASHTENNIS RACQUET AND BALLSKI A" + + "ND SKI BOOTBASKETBALL AND HOOPCHEQUERED FLAGSNOWBOARDERRUNNERSURFERSPORT" + + "S MEDALTROPHYHORSE RACINGAMERICAN FOOTBALLRUGBY FOOTBALLSWIMMERWEIGHT LI" + + "FTERGOLFERRACING MOTORCYCLERACING CARCRICKET BAT AND BALLVOLLEYBALLFIELD" + + " HOCKEY STICK AND BALLICE HOCKEY STICK AND PUCKTABLE TENNIS PADDLE AND B" + + "ALLSNOW CAPPED MOUNTAINCAMPINGBEACH WITH UMBRELLABUILDING CONSTRUCTIONHO" + + "USE BUILDINGSCITYSCAPEDERELICT HOUSE BUILDINGCLASSICAL BUILDINGDESERTDES" + + "ERT ISLANDNATIONAL PARKSTADIUMHOUSE BUILDINGHOUSE WITH GARDENOFFICE BUIL" + + "DINGJAPANESE POST OFFICEEUROPEAN POST OFFICEHOSPITALBANKAUTOMATED TELLER" + + " MACHINEHOTELLOVE HOTELCONVENIENCE STORESCHOOLDEPARTMENT STOREFACTORYIZA" + + "KAYA LANTERNJAPANESE CASTLEEUROPEAN CASTLEWHITE PENNANTBLACK PENNANTWAVI" + + "NG WHITE FLAGWAVING BLACK FLAGROSETTEBLACK ROSETTELABELBADMINTON RACQUET" + + " AND SHUTTLECOCKBOW AND ARROWAMPHORAEMOJI MODIFIER FITZPATRICK TYPE-1-2E" + + "MOJI MODIFIER FITZPATRICK TYPE-3EMOJI MODIFIER FITZPATRICK TYPE-4EMOJI M" + + "ODIFIER FITZPATRICK TYPE-5EMOJI MODIFIER FITZPATRICK TYPE-6RATMOUSEOXWAT" + + "ER BUFFALOCOWTIGERLEOPARDRABBITCATDRAGONCROCODILEWHALESNAILSNAKEHORSERAM" + + "GOATSHEEPMONKEYROOSTERCHICKENDOGPIGBOARELEPHANTOCTOPUSSPIRAL SHELLBUGANT" + + "HONEYBEELADY BEETLEFISHTROPICAL FISHBLOWFISHTURTLEHATCHING CHICKBABY CHI" + + "CKFRONT-FACING BABY CHICKBIRDPENGUINKOALAPOODLEDROMEDARY CAMELBACTRIAN C") + ("" + + "AMELDOLPHINMOUSE FACECOW FACETIGER FACERABBIT FACECAT FACEDRAGON FACESPO" + + "UTING WHALEHORSE FACEMONKEY FACEDOG FACEPIG FACEFROG FACEHAMSTER FACEWOL" + + "F FACEBEAR FACEPANDA FACEPIG NOSEPAW PRINTSCHIPMUNKEYESEYEEARNOSEMOUTHTO" + + "NGUEWHITE UP POINTING BACKHAND INDEXWHITE DOWN POINTING BACKHAND INDEXWH" + + "ITE LEFT POINTING BACKHAND INDEXWHITE RIGHT POINTING BACKHAND INDEXFISTE" + + "D HAND SIGNWAVING HAND SIGNOK HAND SIGNTHUMBS UP SIGNTHUMBS DOWN SIGNCLA" + + "PPING HANDS SIGNOPEN HANDS SIGNCROWNWOMANS HATEYEGLASSESNECKTIET-SHIRTJE" + + "ANSDRESSKIMONOBIKINIWOMANS CLOTHESPURSEHANDBAGPOUCHMANS SHOEATHLETIC SHO" + + "EHIGH-HEELED SHOEWOMANS SANDALWOMANS BOOTSFOOTPRINTSBUST IN SILHOUETTEBU" + + "STS IN SILHOUETTEBOYGIRLMANWOMANFAMILYMAN AND WOMAN HOLDING HANDSTWO MEN" + + " HOLDING HANDSTWO WOMEN HOLDING HANDSPOLICE OFFICERWOMAN WITH BUNNY EARS" + + "BRIDE WITH VEILPERSON WITH BLOND HAIRMAN WITH GUA PI MAOMAN WITH TURBANO" + + "LDER MANOLDER WOMANBABYCONSTRUCTION WORKERPRINCESSJAPANESE OGREJAPANESE " + + "GOBLINGHOSTBABY ANGELEXTRATERRESTRIAL ALIENALIEN MONSTERIMPSKULLINFORMAT" + + "ION DESK PERSONGUARDSMANDANCERLIPSTICKNAIL POLISHFACE MASSAGEHAIRCUTBARB" + + "ER POLESYRINGEPILLKISS MARKLOVE LETTERRINGGEM STONEKISSBOUQUETCOUPLE WIT" + + "H HEARTWEDDINGBEATING HEARTBROKEN HEARTTWO HEARTSSPARKLING HEARTGROWING " + + "HEARTHEART WITH ARROWBLUE HEARTGREEN HEARTYELLOW HEARTPURPLE HEARTHEART " + + "WITH RIBBONREVOLVING HEARTSHEART DECORATIONDIAMOND SHAPE WITH A DOT INSI" + + "DEELECTRIC LIGHT BULBANGER SYMBOLBOMBSLEEPING SYMBOLCOLLISION SYMBOLSPLA" + + "SHING SWEAT SYMBOLDROPLETDASH SYMBOLPILE OF POOFLEXED BICEPSDIZZY SYMBOL" + + "SPEECH BALLOONTHOUGHT BALLOONWHITE FLOWERHUNDRED POINTS SYMBOLMONEY BAGC" + + "URRENCY EXCHANGEHEAVY DOLLAR SIGNCREDIT CARDBANKNOTE WITH YEN SIGNBANKNO" + + "TE WITH DOLLAR SIGNBANKNOTE WITH EURO SIGNBANKNOTE WITH POUND SIGNMONEY " + + "WITH WINGSCHART WITH UPWARDS TREND AND YEN SIGNSEATPERSONAL COMPUTERBRIE" + + "FCASEMINIDISCFLOPPY DISKOPTICAL DISCDVDFILE FOLDEROPEN FILE FOLDERPAGE W" + + "ITH CURLPAGE FACING UPCALENDARTEAR-OFF CALENDARCARD INDEXCHART WITH UPWA" + + "RDS TRENDCHART WITH DOWNWARDS TRENDBAR CHARTCLIPBOARDPUSHPINROUND PUSHPI" + + "NPAPERCLIPSTRAIGHT RULERTRIANGULAR RULERBOOKMARK TABSLEDGERNOTEBOOKNOTEB" + + "OOK WITH DECORATIVE COVERCLOSED BOOKOPEN BOOKGREEN BOOKBLUE BOOKORANGE B" + + "OOKBOOKSNAME BADGESCROLLMEMOTELEPHONE RECEIVERPAGERFAX MACHINESATELLITE " + + "ANTENNAPUBLIC ADDRESS LOUDSPEAKERCHEERING MEGAPHONEOUTBOX TRAYINBOX TRAY" + + "PACKAGEE-MAIL SYMBOLINCOMING ENVELOPEENVELOPE WITH DOWNWARDS ARROW ABOVE" + + "CLOSED MAILBOX WITH LOWERED FLAGCLOSED MAILBOX WITH RAISED FLAGOPEN MAIL" + + "BOX WITH RAISED FLAGOPEN MAILBOX WITH LOWERED FLAGPOSTBOXPOSTAL HORNNEWS" + + "PAPERMOBILE PHONEMOBILE PHONE WITH RIGHTWARDS ARROW AT LEFTVIBRATION MOD" + + "EMOBILE PHONE OFFNO MOBILE PHONESANTENNA WITH BARSCAMERACAMERA WITH FLAS" + + "HVIDEO CAMERATELEVISIONRADIOVIDEOCASSETTEFILM PROJECTORPORTABLE STEREOPR" + + "AYER BEADSTWISTED RIGHTWARDS ARROWSCLOCKWISE RIGHTWARDS AND LEFTWARDS OP" + + "EN CIRCLE ARROWSCLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS WI" + + "TH CIRCLED ONE OVERLAYCLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS" + + "ANTICLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWSLOW BRIGHTNESS SYM" + + "BOLHIGH BRIGHTNESS SYMBOLSPEAKER WITH CANCELLATION STROKESPEAKERSPEAKER " + + "WITH ONE SOUND WAVESPEAKER WITH THREE SOUND WAVESBATTERYELECTRIC PLUGLEF" + + "T-POINTING MAGNIFYING GLASSRIGHT-POINTING MAGNIFYING GLASSLOCK WITH INK " + + "PENCLOSED LOCK WITH KEYKEYLOCKOPEN LOCKBELLBELL WITH CANCELLATION STROKE" + + "BOOKMARKLINK SYMBOLRADIO BUTTONBACK WITH LEFTWARDS ARROW ABOVEEND WITH L" + + "EFTWARDS ARROW ABOVEON WITH EXCLAMATION MARK WITH LEFT RIGHT ARROW ABOVE" + + "SOON WITH RIGHTWARDS ARROW ABOVETOP WITH UPWARDS ARROW ABOVENO ONE UNDER" + + " EIGHTEEN SYMBOLKEYCAP TENINPUT SYMBOL FOR LATIN CAPITAL LETTERSINPUT SY" + + "MBOL FOR LATIN SMALL LETTERSINPUT SYMBOL FOR NUMBERSINPUT SYMBOL FOR SYM" + + "BOLSINPUT SYMBOL FOR LATIN LETTERSFIREELECTRIC TORCHWRENCHHAMMERNUT AND " + + "BOLTHOCHOPISTOLMICROSCOPETELESCOPECRYSTAL BALLSIX POINTED STAR WITH MIDD" + + "LE DOTJAPANESE SYMBOL FOR BEGINNERTRIDENT EMBLEMBLACK SQUARE BUTTONWHITE" + + " SQUARE BUTTONLARGE RED CIRCLELARGE BLUE CIRCLELARGE ORANGE DIAMONDLARGE" + + " BLUE DIAMONDSMALL ORANGE DIAMONDSMALL BLUE DIAMONDUP-POINTING RED TRIAN" + + "GLEDOWN-POINTING RED TRIANGLEUP-POINTING SMALL RED TRIANGLEDOWN-POINTING" + + " SMALL RED TRIANGLELOWER RIGHT SHADOWED WHITE CIRCLEUPPER RIGHT SHADOWED" + + " WHITE CIRCLECIRCLED CROSS POMMEECROSS POMMEE WITH HALF-CIRCLE BELOWCROS" + + "S POMMEENOTCHED LEFT SEMICIRCLE WITH THREE DOTSNOTCHED RIGHT SEMICIRCLE " + + "WITH THREE DOTSSYMBOL FOR MARKS CHAPTERWHITE LATIN CROSSHEAVY LATIN CROS" + + "SCELTIC CROSSOM SYMBOLDOVE OF PEACEKAABAMOSQUESYNAGOGUEMENORAH WITH NINE" + + " BRANCHESBOWL OF HYGIEIACLOCK FACE ONE OCLOCKCLOCK FACE TWO OCLOCKCLOCK " + + "FACE THREE OCLOCKCLOCK FACE FOUR OCLOCKCLOCK FACE FIVE OCLOCKCLOCK FACE ") + ("" + + "SIX OCLOCKCLOCK FACE SEVEN OCLOCKCLOCK FACE EIGHT OCLOCKCLOCK FACE NINE " + + "OCLOCKCLOCK FACE TEN OCLOCKCLOCK FACE ELEVEN OCLOCKCLOCK FACE TWELVE OCL" + + "OCKCLOCK FACE ONE-THIRTYCLOCK FACE TWO-THIRTYCLOCK FACE THREE-THIRTYCLOC" + + "K FACE FOUR-THIRTYCLOCK FACE FIVE-THIRTYCLOCK FACE SIX-THIRTYCLOCK FACE " + + "SEVEN-THIRTYCLOCK FACE EIGHT-THIRTYCLOCK FACE NINE-THIRTYCLOCK FACE TEN-" + + "THIRTYCLOCK FACE ELEVEN-THIRTYCLOCK FACE TWELVE-THIRTYRIGHT SPEAKERRIGHT" + + " SPEAKER WITH ONE SOUND WAVERIGHT SPEAKER WITH THREE SOUND WAVESBULLHORN" + + "BULLHORN WITH SOUND WAVESRINGING BELLBOOKCANDLEMANTELPIECE CLOCKBLACK SK" + + "ULL AND CROSSBONESNO PIRACYHOLEMAN IN BUSINESS SUIT LEVITATINGSLEUTH OR " + + "SPYDARK SUNGLASSESSPIDERSPIDER WEBJOYSTICKMAN DANCINGLEFT HAND TELEPHONE" + + " RECEIVERTELEPHONE RECEIVER WITH PAGERIGHT HAND TELEPHONE RECEIVERWHITE " + + "TOUCHTONE TELEPHONEBLACK TOUCHTONE TELEPHONETELEPHONE ON TOP OF MODEMCLA" + + "MSHELL MOBILE PHONEBACK OF ENVELOPESTAMPED ENVELOPEENVELOPE WITH LIGHTNI" + + "NGFLYING ENVELOPEPEN OVER STAMPED ENVELOPELINKED PAPERCLIPSBLACK PUSHPIN" + + "LOWER LEFT PENCILLOWER LEFT BALLPOINT PENLOWER LEFT FOUNTAIN PENLOWER LE" + + "FT PAINTBRUSHLOWER LEFT CRAYONLEFT WRITING HANDTURNED OK HAND SIGNRAISED" + + " HAND WITH FINGERS SPLAYEDREVERSED RAISED HAND WITH FINGERS SPLAYEDREVER" + + "SED THUMBS UP SIGNREVERSED THUMBS DOWN SIGNREVERSED VICTORY HANDREVERSED" + + " HAND WITH MIDDLE FINGER EXTENDEDRAISED HAND WITH PART BETWEEN MIDDLE AN" + + "D RING FINGERSWHITE DOWN POINTING LEFT HAND INDEXSIDEWAYS WHITE LEFT POI" + + "NTING INDEXSIDEWAYS WHITE RIGHT POINTING INDEXSIDEWAYS BLACK LEFT POINTI" + + "NG INDEXSIDEWAYS BLACK RIGHT POINTING INDEXBLACK LEFT POINTING BACKHAND " + + "INDEXBLACK RIGHT POINTING BACKHAND INDEXSIDEWAYS WHITE UP POINTING INDEX" + + "SIDEWAYS WHITE DOWN POINTING INDEXSIDEWAYS BLACK UP POINTING INDEXSIDEWA" + + "YS BLACK DOWN POINTING INDEXBLACK UP POINTING BACKHAND INDEXBLACK DOWN P" + + "OINTING BACKHAND INDEXBLACK HEARTDESKTOP COMPUTERKEYBOARD AND MOUSETHREE" + + " NETWORKED COMPUTERSPRINTERPOCKET CALCULATORBLACK HARD SHELL FLOPPY DISK" + + "WHITE HARD SHELL FLOPPY DISKSOFT SHELL FLOPPY DISKTAPE CARTRIDGEWIRED KE" + + "YBOARDONE BUTTON MOUSETWO BUTTON MOUSETHREE BUTTON MOUSETRACKBALLOLD PER" + + "SONAL COMPUTERHARD DISKSCREENPRINTER ICONFAX ICONOPTICAL DISC ICONDOCUME" + + "NT WITH TEXTDOCUMENT WITH TEXT AND PICTUREDOCUMENT WITH PICTUREFRAME WIT" + + "H PICTUREFRAME WITH TILESFRAME WITH AN XBLACK FOLDERFOLDEROPEN FOLDERCAR" + + "D INDEX DIVIDERSCARD FILE BOXFILE CABINETEMPTY NOTEEMPTY NOTE PAGEEMPTY " + + "NOTE PADNOTENOTE PAGENOTE PADEMPTY DOCUMENTEMPTY PAGEEMPTY PAGESDOCUMENT" + + "PAGEPAGESWASTEBASKETSPIRAL NOTE PADSPIRAL CALENDAR PADDESKTOP WINDOWMINI" + + "MIZEMAXIMIZEOVERLAPCLOCKWISE RIGHT AND LEFT SEMICIRCLE ARROWSCANCELLATIO" + + "N XINCREASE FONT SIZE SYMBOLDECREASE FONT SIZE SYMBOLCOMPRESSIONOLD KEYR" + + "OLLED-UP NEWSPAPERPAGE WITH CIRCLED TEXTSTOCK CHARTDAGGER KNIFELIPSSPEAK" + + "ING HEAD IN SILHOUETTETHREE RAYS ABOVETHREE RAYS BELOWTHREE RAYS LEFTTHR" + + "EE RAYS RIGHTLEFT SPEECH BUBBLERIGHT SPEECH BUBBLETWO SPEECH BUBBLESTHRE" + + "E SPEECH BUBBLESLEFT THOUGHT BUBBLERIGHT THOUGHT BUBBLELEFT ANGER BUBBLE" + + "RIGHT ANGER BUBBLEMOOD BUBBLELIGHTNING MOOD BUBBLELIGHTNING MOODBALLOT B" + + "OX WITH BALLOTBALLOT SCRIPT XBALLOT BOX WITH SCRIPT XBALLOT BOLD SCRIPT " + + "XBALLOT BOX WITH BOLD SCRIPT XLIGHT CHECK MARKBALLOT BOX WITH BOLD CHECK" + + "WORLD MAPMOUNT FUJITOKYO TOWERSTATUE OF LIBERTYSILHOUETTE OF JAPANMOYAIG" + + "RINNING FACEGRINNING FACE WITH SMILING EYESFACE WITH TEARS OF JOYSMILING" + + " FACE WITH OPEN MOUTHSMILING FACE WITH OPEN MOUTH AND SMILING EYESSMILIN" + + "G FACE WITH OPEN MOUTH AND COLD SWEATSMILING FACE WITH OPEN MOUTH AND TI" + + "GHTLY-CLOSED EYESSMILING FACE WITH HALOSMILING FACE WITH HORNSWINKING FA" + + "CESMILING FACE WITH SMILING EYESFACE SAVOURING DELICIOUS FOODRELIEVED FA" + + "CESMILING FACE WITH HEART-SHAPED EYESSMILING FACE WITH SUNGLASSESSMIRKIN" + + "G FACENEUTRAL FACEEXPRESSIONLESS FACEUNAMUSED FACEFACE WITH COLD SWEATPE" + + "NSIVE FACECONFUSED FACECONFOUNDED FACEKISSING FACEFACE THROWING A KISSKI" + + "SSING FACE WITH SMILING EYESKISSING FACE WITH CLOSED EYESFACE WITH STUCK" + + "-OUT TONGUEFACE WITH STUCK-OUT TONGUE AND WINKING EYEFACE WITH STUCK-OUT" + + " TONGUE AND TIGHTLY-CLOSED EYESDISAPPOINTED FACEWORRIED FACEANGRY FACEPO" + + "UTING FACECRYING FACEPERSEVERING FACEFACE WITH LOOK OF TRIUMPHDISAPPOINT" + + "ED BUT RELIEVED FACEFROWNING FACE WITH OPEN MOUTHANGUISHED FACEFEARFUL F" + + "ACEWEARY FACESLEEPY FACETIRED FACEGRIMACING FACELOUDLY CRYING FACEFACE W" + + "ITH OPEN MOUTHHUSHED FACEFACE WITH OPEN MOUTH AND COLD SWEATFACE SCREAMI" + + "NG IN FEARASTONISHED FACEFLUSHED FACESLEEPING FACEDIZZY FACEFACE WITHOUT" + + " MOUTHFACE WITH MEDICAL MASKGRINNING CAT FACE WITH SMILING EYESCAT FACE " + + "WITH TEARS OF JOYSMILING CAT FACE WITH OPEN MOUTHSMILING CAT FACE WITH H" + + "EART-SHAPED EYESCAT FACE WITH WRY SMILEKISSING CAT FACE WITH CLOSED EYES") + ("" + + "POUTING CAT FACECRYING CAT FACEWEARY CAT FACESLIGHTLY FROWNING FACESLIGH" + + "TLY SMILING FACEUPSIDE-DOWN FACEFACE WITH ROLLING EYESFACE WITH NO GOOD " + + "GESTUREFACE WITH OK GESTUREPERSON BOWING DEEPLYSEE-NO-EVIL MONKEYHEAR-NO" + + "-EVIL MONKEYSPEAK-NO-EVIL MONKEYHAPPY PERSON RAISING ONE HANDPERSON RAIS" + + "ING BOTH HANDS IN CELEBRATIONPERSON FROWNINGPERSON WITH POUTING FACEPERS" + + "ON WITH FOLDED HANDSNORTH WEST POINTING LEAFSOUTH WEST POINTING LEAFNORT" + + "H EAST POINTING LEAFSOUTH EAST POINTING LEAFTURNED NORTH WEST POINTING L" + + "EAFTURNED SOUTH WEST POINTING LEAFTURNED NORTH EAST POINTING LEAFTURNED " + + "SOUTH EAST POINTING LEAFNORTH WEST POINTING VINE LEAFSOUTH WEST POINTING" + + " VINE LEAFNORTH EAST POINTING VINE LEAFSOUTH EAST POINTING VINE LEAFHEAV" + + "Y NORTH WEST POINTING VINE LEAFHEAVY SOUTH WEST POINTING VINE LEAFHEAVY " + + "NORTH EAST POINTING VINE LEAFHEAVY SOUTH EAST POINTING VINE LEAFNORTH WE" + + "ST POINTING BUDSOUTH WEST POINTING BUDNORTH EAST POINTING BUDSOUTH EAST " + + "POINTING BUDHEAVY NORTH WEST POINTING BUDHEAVY SOUTH WEST POINTING BUDHE" + + "AVY NORTH EAST POINTING BUDHEAVY SOUTH EAST POINTING BUDHOLLOW QUILT SQU" + + "ARE ORNAMENTHOLLOW QUILT SQUARE ORNAMENT IN BLACK SQUARESOLID QUILT SQUA" + + "RE ORNAMENTSOLID QUILT SQUARE ORNAMENT IN BLACK SQUARELEFTWARDS ROCKETUP" + + "WARDS ROCKETRIGHTWARDS ROCKETDOWNWARDS ROCKETSCRIPT LIGATURE ET ORNAMENT" + + "HEAVY SCRIPT LIGATURE ET ORNAMENTLIGATURE OPEN ET ORNAMENTHEAVY LIGATURE" + + " OPEN ET ORNAMENTHEAVY AMPERSAND ORNAMENTSWASH AMPERSAND ORNAMENTSANS-SE" + + "RIF HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENTSANS-SERIF HEAVY DO" + + "UBLE COMMA QUOTATION MARK ORNAMENTSANS-SERIF HEAVY LOW DOUBLE COMMA QUOT" + + "ATION MARK ORNAMENTHEAVY INTERROBANG ORNAMENTSANS-SERIF INTERROBANG ORNA" + + "MENTHEAVY SANS-SERIF INTERROBANG ORNAMENTVERY HEAVY SOLIDUSVERY HEAVY RE" + + "VERSE SOLIDUSCHECKER BOARDREVERSE CHECKER BOARDROCKETHELICOPTERSTEAM LOC" + + "OMOTIVERAILWAY CARHIGH-SPEED TRAINHIGH-SPEED TRAIN WITH BULLET NOSETRAIN" + + "METROLIGHT RAILSTATIONTRAMTRAM CARBUSONCOMING BUSTROLLEYBUSBUS STOPMINIB" + + "USAMBULANCEFIRE ENGINEPOLICE CARONCOMING POLICE CARTAXIONCOMING TAXIAUTO" + + "MOBILEONCOMING AUTOMOBILERECREATIONAL VEHICLEDELIVERY TRUCKARTICULATED L" + + "ORRYTRACTORMONORAILMOUNTAIN RAILWAYSUSPENSION RAILWAYMOUNTAIN CABLEWAYAE" + + "RIAL TRAMWAYSHIPROWBOATSPEEDBOATHORIZONTAL TRAFFIC LIGHTVERTICAL TRAFFIC" + + " LIGHTCONSTRUCTION SIGNPOLICE CARS REVOLVING LIGHTTRIANGULAR FLAG ON POS" + + "TDOORNO ENTRY SIGNSMOKING SYMBOLNO SMOKING SYMBOLPUT LITTER IN ITS PLACE" + + " SYMBOLDO NOT LITTER SYMBOLPOTABLE WATER SYMBOLNON-POTABLE WATER SYMBOLB" + + "ICYCLENO BICYCLESBICYCLISTMOUNTAIN BICYCLISTPEDESTRIANNO PEDESTRIANSCHIL" + + "DREN CROSSINGMENS SYMBOLWOMENS SYMBOLRESTROOMBABY SYMBOLTOILETWATER CLOS" + + "ETSHOWERBATHBATHTUBPASSPORT CONTROLCUSTOMSBAGGAGE CLAIMLEFT LUGGAGETRIAN" + + "GLE WITH ROUNDED CORNERSPROHIBITED SIGNCIRCLED INFORMATION SOURCEBOYS SY" + + "MBOLGIRLS SYMBOLCOUCH AND LAMPSLEEPING ACCOMMODATIONSHOPPING BAGSBELLHOP" + + " BELLBEDPLACE OF WORSHIPOCTAGONAL SIGNSHOPPING TROLLEYHAMMER AND WRENCHS" + + "HIELDOIL DRUMMOTORWAYRAILWAY TRACKMOTOR BOATUP-POINTING MILITARY AIRPLAN" + + "EUP-POINTING AIRPLANEUP-POINTING SMALL AIRPLANESMALL AIRPLANENORTHEAST-P" + + "OINTING AIRPLANEAIRPLANE DEPARTUREAIRPLANE ARRIVINGSATELLITEONCOMING FIR" + + "E ENGINEDIESEL LOCOMOTIVEPASSENGER SHIPSCOOTERMOTOR SCOOTERCANOEALCHEMIC" + + "AL SYMBOL FOR QUINTESSENCEALCHEMICAL SYMBOL FOR AIRALCHEMICAL SYMBOL FOR" + + " FIREALCHEMICAL SYMBOL FOR EARTHALCHEMICAL SYMBOL FOR WATERALCHEMICAL SY" + + "MBOL FOR AQUAFORTISALCHEMICAL SYMBOL FOR AQUA REGIAALCHEMICAL SYMBOL FOR" + + " AQUA REGIA-2ALCHEMICAL SYMBOL FOR AQUA VITAEALCHEMICAL SYMBOL FOR AQUA " + + "VITAE-2ALCHEMICAL SYMBOL FOR VINEGARALCHEMICAL SYMBOL FOR VINEGAR-2ALCHE" + + "MICAL SYMBOL FOR VINEGAR-3ALCHEMICAL SYMBOL FOR SULFURALCHEMICAL SYMBOL " + + "FOR PHILOSOPHERS SULFURALCHEMICAL SYMBOL FOR BLACK SULFURALCHEMICAL SYMB" + + "OL FOR MERCURY SUBLIMATEALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-2ALCHEMI" + + "CAL SYMBOL FOR MERCURY SUBLIMATE-3ALCHEMICAL SYMBOL FOR CINNABARALCHEMIC" + + "AL SYMBOL FOR SALTALCHEMICAL SYMBOL FOR NITREALCHEMICAL SYMBOL FOR VITRI" + + "OLALCHEMICAL SYMBOL FOR VITRIOL-2ALCHEMICAL SYMBOL FOR ROCK SALTALCHEMIC" + + "AL SYMBOL FOR ROCK SALT-2ALCHEMICAL SYMBOL FOR GOLDALCHEMICAL SYMBOL FOR" + + " SILVERALCHEMICAL SYMBOL FOR IRON OREALCHEMICAL SYMBOL FOR IRON ORE-2ALC" + + "HEMICAL SYMBOL FOR CROCUS OF IRONALCHEMICAL SYMBOL FOR REGULUS OF IRONAL" + + "CHEMICAL SYMBOL FOR COPPER OREALCHEMICAL SYMBOL FOR IRON-COPPER OREALCHE" + + "MICAL SYMBOL FOR SUBLIMATE OF COPPERALCHEMICAL SYMBOL FOR CROCUS OF COPP" + + "ERALCHEMICAL SYMBOL FOR CROCUS OF COPPER-2ALCHEMICAL SYMBOL FOR COPPER A" + + "NTIMONIATEALCHEMICAL SYMBOL FOR SALT OF COPPER ANTIMONIATEALCHEMICAL SYM" + + "BOL FOR SUBLIMATE OF SALT OF COPPERALCHEMICAL SYMBOL FOR VERDIGRISALCHEM" + + "ICAL SYMBOL FOR TIN OREALCHEMICAL SYMBOL FOR LEAD OREALCHEMICAL SYMBOL F") + ("" + + "OR ANTIMONY OREALCHEMICAL SYMBOL FOR SUBLIMATE OF ANTIMONYALCHEMICAL SYM" + + "BOL FOR SALT OF ANTIMONYALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF ANTIM" + + "ONYALCHEMICAL SYMBOL FOR VINEGAR OF ANTIMONYALCHEMICAL SYMBOL FOR REGULU" + + "S OF ANTIMONYALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY-2ALCHEMICAL SYMBO" + + "L FOR REGULUSALCHEMICAL SYMBOL FOR REGULUS-2ALCHEMICAL SYMBOL FOR REGULU" + + "S-3ALCHEMICAL SYMBOL FOR REGULUS-4ALCHEMICAL SYMBOL FOR ALKALIALCHEMICAL" + + " SYMBOL FOR ALKALI-2ALCHEMICAL SYMBOL FOR MARCASITEALCHEMICAL SYMBOL FOR" + + " SAL-AMMONIACALCHEMICAL SYMBOL FOR ARSENICALCHEMICAL SYMBOL FOR REALGARA" + + "LCHEMICAL SYMBOL FOR REALGAR-2ALCHEMICAL SYMBOL FOR AURIPIGMENTALCHEMICA" + + "L SYMBOL FOR BISMUTH OREALCHEMICAL SYMBOL FOR TARTARALCHEMICAL SYMBOL FO" + + "R TARTAR-2ALCHEMICAL SYMBOL FOR QUICK LIMEALCHEMICAL SYMBOL FOR BORAXALC" + + "HEMICAL SYMBOL FOR BORAX-2ALCHEMICAL SYMBOL FOR BORAX-3ALCHEMICAL SYMBOL" + + " FOR ALUMALCHEMICAL SYMBOL FOR OILALCHEMICAL SYMBOL FOR SPIRITALCHEMICAL" + + " SYMBOL FOR TINCTUREALCHEMICAL SYMBOL FOR GUMALCHEMICAL SYMBOL FOR WAXAL" + + "CHEMICAL SYMBOL FOR POWDERALCHEMICAL SYMBOL FOR CALXALCHEMICAL SYMBOL FO" + + "R TUTTYALCHEMICAL SYMBOL FOR CAPUT MORTUUMALCHEMICAL SYMBOL FOR SCEPTER " + + "OF JOVEALCHEMICAL SYMBOL FOR CADUCEUSALCHEMICAL SYMBOL FOR TRIDENTALCHEM" + + "ICAL SYMBOL FOR STARRED TRIDENTALCHEMICAL SYMBOL FOR LODESTONEALCHEMICAL" + + " SYMBOL FOR SOAPALCHEMICAL SYMBOL FOR URINEALCHEMICAL SYMBOL FOR HORSE D" + + "UNGALCHEMICAL SYMBOL FOR ASHESALCHEMICAL SYMBOL FOR POT ASHESALCHEMICAL " + + "SYMBOL FOR BRICKALCHEMICAL SYMBOL FOR POWDERED BRICKALCHEMICAL SYMBOL FO" + + "R AMALGAMALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUMALCHEMICAL SYMBOL FO" + + "R STRATUM SUPER STRATUM-2ALCHEMICAL SYMBOL FOR SUBLIMATIONALCHEMICAL SYM" + + "BOL FOR PRECIPITATEALCHEMICAL SYMBOL FOR DISTILLALCHEMICAL SYMBOL FOR DI" + + "SSOLVEALCHEMICAL SYMBOL FOR DISSOLVE-2ALCHEMICAL SYMBOL FOR PURIFYALCHEM" + + "ICAL SYMBOL FOR PUTREFACTIONALCHEMICAL SYMBOL FOR CRUCIBLEALCHEMICAL SYM" + + "BOL FOR CRUCIBLE-2ALCHEMICAL SYMBOL FOR CRUCIBLE-3ALCHEMICAL SYMBOL FOR " + + "CRUCIBLE-4ALCHEMICAL SYMBOL FOR CRUCIBLE-5ALCHEMICAL SYMBOL FOR ALEMBICA" + + "LCHEMICAL SYMBOL FOR BATH OF MARYALCHEMICAL SYMBOL FOR BATH OF VAPOURSAL" + + "CHEMICAL SYMBOL FOR RETORTALCHEMICAL SYMBOL FOR HOURALCHEMICAL SYMBOL FO" + + "R NIGHTALCHEMICAL SYMBOL FOR DAY-NIGHTALCHEMICAL SYMBOL FOR MONTHALCHEMI" + + "CAL SYMBOL FOR HALF DRAMALCHEMICAL SYMBOL FOR HALF OUNCEBLACK LEFT-POINT" + + "ING ISOSCELES RIGHT TRIANGLEBLACK UP-POINTING ISOSCELES RIGHT TRIANGLEBL" + + "ACK RIGHT-POINTING ISOSCELES RIGHT TRIANGLEBLACK DOWN-POINTING ISOSCELES" + + " RIGHT TRIANGLEBLACK SLIGHTLY SMALL CIRCLEMEDIUM BOLD WHITE CIRCLEBOLD W" + + "HITE CIRCLEHEAVY WHITE CIRCLEVERY HEAVY WHITE CIRCLEEXTREMELY HEAVY WHIT" + + "E CIRCLEWHITE CIRCLE CONTAINING BLACK SMALL CIRCLEROUND TARGETBLACK TINY" + + " SQUAREBLACK SLIGHTLY SMALL SQUARELIGHT WHITE SQUAREMEDIUM WHITE SQUAREB" + + "OLD WHITE SQUAREHEAVY WHITE SQUAREVERY HEAVY WHITE SQUAREEXTREMELY HEAVY" + + " WHITE SQUAREWHITE SQUARE CONTAINING BLACK VERY SMALL SQUAREWHITE SQUARE" + + " CONTAINING BLACK MEDIUM SQUARESQUARE TARGETBLACK TINY DIAMONDBLACK VERY" + + " SMALL DIAMONDBLACK MEDIUM SMALL DIAMONDWHITE DIAMOND CONTAINING BLACK V" + + "ERY SMALL DIAMONDWHITE DIAMOND CONTAINING BLACK MEDIUM DIAMONDDIAMOND TA" + + "RGETBLACK TINY LOZENGEBLACK VERY SMALL LOZENGEBLACK MEDIUM SMALL LOZENGE" + + "WHITE LOZENGE CONTAINING BLACK SMALL LOZENGETHIN GREEK CROSSLIGHT GREEK " + + "CROSSMEDIUM GREEK CROSSBOLD GREEK CROSSVERY BOLD GREEK CROSSVERY HEAVY G" + + "REEK CROSSEXTREMELY HEAVY GREEK CROSSTHIN SALTIRELIGHT SALTIREMEDIUM SAL" + + "TIREBOLD SALTIREHEAVY SALTIREVERY HEAVY SALTIREEXTREMELY HEAVY SALTIRELI" + + "GHT FIVE SPOKED ASTERISKMEDIUM FIVE SPOKED ASTERISKBOLD FIVE SPOKED ASTE" + + "RISKHEAVY FIVE SPOKED ASTERISKVERY HEAVY FIVE SPOKED ASTERISKEXTREMELY H" + + "EAVY FIVE SPOKED ASTERISKLIGHT SIX SPOKED ASTERISKMEDIUM SIX SPOKED ASTE" + + "RISKBOLD SIX SPOKED ASTERISKHEAVY SIX SPOKED ASTERISKVERY HEAVY SIX SPOK" + + "ED ASTERISKEXTREMELY HEAVY SIX SPOKED ASTERISKLIGHT EIGHT SPOKED ASTERIS" + + "KMEDIUM EIGHT SPOKED ASTERISKBOLD EIGHT SPOKED ASTERISKHEAVY EIGHT SPOKE" + + "D ASTERISKVERY HEAVY EIGHT SPOKED ASTERISKLIGHT THREE POINTED BLACK STAR" + + "MEDIUM THREE POINTED BLACK STARTHREE POINTED BLACK STARMEDIUM THREE POIN" + + "TED PINWHEEL STARLIGHT FOUR POINTED BLACK STARMEDIUM FOUR POINTED BLACK " + + "STARFOUR POINTED BLACK STARMEDIUM FOUR POINTED PINWHEEL STARREVERSE LIGH" + + "T FOUR POINTED PINWHEEL STARLIGHT FIVE POINTED BLACK STARHEAVY FIVE POIN" + + "TED BLACK STARMEDIUM SIX POINTED BLACK STARHEAVY SIX POINTED BLACK STARS" + + "IX POINTED PINWHEEL STARMEDIUM EIGHT POINTED BLACK STARHEAVY EIGHT POINT" + + "ED BLACK STARVERY HEAVY EIGHT POINTED BLACK STARHEAVY EIGHT POINTED PINW" + + "HEEL STARLIGHT TWELVE POINTED BLACK STARHEAVY TWELVE POINTED BLACK STARH" + + "EAVY TWELVE POINTED PINWHEEL STARLEFTWARDS ARROW WITH SMALL TRIANGLE ARR") + ("" + + "OWHEADUPWARDS ARROW WITH SMALL TRIANGLE ARROWHEADRIGHTWARDS ARROW WITH S" + + "MALL TRIANGLE ARROWHEADDOWNWARDS ARROW WITH SMALL TRIANGLE ARROWHEADLEFT" + + "WARDS ARROW WITH MEDIUM TRIANGLE ARROWHEADUPWARDS ARROW WITH MEDIUM TRIA" + + "NGLE ARROWHEADRIGHTWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEADDOWNWARDS A" + + "RROW WITH MEDIUM TRIANGLE ARROWHEADLEFTWARDS ARROW WITH LARGE TRIANGLE A" + + "RROWHEADUPWARDS ARROW WITH LARGE TRIANGLE ARROWHEADRIGHTWARDS ARROW WITH" + + " LARGE TRIANGLE ARROWHEADDOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEADLE" + + "FTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEADUPWARDS ARROW WITH SMALL E" + + "QUILATERAL ARROWHEADRIGHTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEADDOW" + + "NWARDS ARROW WITH SMALL EQUILATERAL ARROWHEADLEFTWARDS ARROW WITH EQUILA" + + "TERAL ARROWHEADUPWARDS ARROW WITH EQUILATERAL ARROWHEADRIGHTWARDS ARROW " + + "WITH EQUILATERAL ARROWHEADDOWNWARDS ARROW WITH EQUILATERAL ARROWHEADHEAV" + + "Y LEFTWARDS ARROW WITH EQUILATERAL ARROWHEADHEAVY UPWARDS ARROW WITH EQU" + + "ILATERAL ARROWHEADHEAVY RIGHTWARDS ARROW WITH EQUILATERAL ARROWHEADHEAVY" + + " DOWNWARDS ARROW WITH EQUILATERAL ARROWHEADHEAVY LEFTWARDS ARROW WITH LA" + + "RGE EQUILATERAL ARROWHEADHEAVY UPWARDS ARROW WITH LARGE EQUILATERAL ARRO" + + "WHEADHEAVY RIGHTWARDS ARROW WITH LARGE EQUILATERAL ARROWHEADHEAVY DOWNWA" + + "RDS ARROW WITH LARGE EQUILATERAL ARROWHEADLEFTWARDS TRIANGLE-HEADED ARRO" + + "W WITH NARROW SHAFTUPWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFTRIGHTW" + + "ARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFTDOWNWARDS TRIANGLE-HEADED AR" + + "ROW WITH NARROW SHAFTLEFTWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFTUP" + + "WARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFTRIGHTWARDS TRIANGLE-HEADED " + + "ARROW WITH MEDIUM SHAFTDOWNWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT" + + "LEFTWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFTUPWARDS TRIANGLE-HEADED A" + + "RROW WITH BOLD SHAFTRIGHTWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFTDOWN" + + "WARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFTLEFTWARDS TRIANGLE-HEADED ARR" + + "OW WITH HEAVY SHAFTUPWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFTRIGHTWA" + + "RDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFTDOWNWARDS TRIANGLE-HEADED ARRO" + + "W WITH HEAVY SHAFTLEFTWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFTU" + + "PWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFTRIGHTWARDS TRIANGLE-HE" + + "ADED ARROW WITH VERY HEAVY SHAFTDOWNWARDS TRIANGLE-HEADED ARROW WITH VER" + + "Y HEAVY SHAFTLEFTWARDS FINGER-POST ARROWUPWARDS FINGER-POST ARROWRIGHTWA" + + "RDS FINGER-POST ARROWDOWNWARDS FINGER-POST ARROWLEFTWARDS SQUARED ARROWU" + + "PWARDS SQUARED ARROWRIGHTWARDS SQUARED ARROWDOWNWARDS SQUARED ARROWLEFTW" + + "ARDS COMPRESSED ARROWUPWARDS COMPRESSED ARROWRIGHTWARDS COMPRESSED ARROW" + + "DOWNWARDS COMPRESSED ARROWLEFTWARDS HEAVY COMPRESSED ARROWUPWARDS HEAVY " + + "COMPRESSED ARROWRIGHTWARDS HEAVY COMPRESSED ARROWDOWNWARDS HEAVY COMPRES" + + "SED ARROWLEFTWARDS HEAVY ARROWUPWARDS HEAVY ARROWRIGHTWARDS HEAVY ARROWD" + + "OWNWARDS HEAVY ARROWLEFTWARDS SANS-SERIF ARROWUPWARDS SANS-SERIF ARROWRI" + + "GHTWARDS SANS-SERIF ARROWDOWNWARDS SANS-SERIF ARROWNORTH WEST SANS-SERIF" + + " ARROWNORTH EAST SANS-SERIF ARROWSOUTH EAST SANS-SERIF ARROWSOUTH WEST S" + + "ANS-SERIF ARROWLEFT RIGHT SANS-SERIF ARROWUP DOWN SANS-SERIF ARROWWIDE-H" + + "EADED LEFTWARDS LIGHT BARB ARROWWIDE-HEADED UPWARDS LIGHT BARB ARROWWIDE" + + "-HEADED RIGHTWARDS LIGHT BARB ARROWWIDE-HEADED DOWNWARDS LIGHT BARB ARRO" + + "WWIDE-HEADED NORTH WEST LIGHT BARB ARROWWIDE-HEADED NORTH EAST LIGHT BAR" + + "B ARROWWIDE-HEADED SOUTH EAST LIGHT BARB ARROWWIDE-HEADED SOUTH WEST LIG" + + "HT BARB ARROWWIDE-HEADED LEFTWARDS BARB ARROWWIDE-HEADED UPWARDS BARB AR" + + "ROWWIDE-HEADED RIGHTWARDS BARB ARROWWIDE-HEADED DOWNWARDS BARB ARROWWIDE" + + "-HEADED NORTH WEST BARB ARROWWIDE-HEADED NORTH EAST BARB ARROWWIDE-HEADE" + + "D SOUTH EAST BARB ARROWWIDE-HEADED SOUTH WEST BARB ARROWWIDE-HEADED LEFT" + + "WARDS MEDIUM BARB ARROWWIDE-HEADED UPWARDS MEDIUM BARB ARROWWIDE-HEADED " + + "RIGHTWARDS MEDIUM BARB ARROWWIDE-HEADED DOWNWARDS MEDIUM BARB ARROWWIDE-" + + "HEADED NORTH WEST MEDIUM BARB ARROWWIDE-HEADED NORTH EAST MEDIUM BARB AR" + + "ROWWIDE-HEADED SOUTH EAST MEDIUM BARB ARROWWIDE-HEADED SOUTH WEST MEDIUM" + + " BARB ARROWWIDE-HEADED LEFTWARDS HEAVY BARB ARROWWIDE-HEADED UPWARDS HEA" + + "VY BARB ARROWWIDE-HEADED RIGHTWARDS HEAVY BARB ARROWWIDE-HEADED DOWNWARD" + + "S HEAVY BARB ARROWWIDE-HEADED NORTH WEST HEAVY BARB ARROWWIDE-HEADED NOR" + + "TH EAST HEAVY BARB ARROWWIDE-HEADED SOUTH EAST HEAVY BARB ARROWWIDE-HEAD" + + "ED SOUTH WEST HEAVY BARB ARROWWIDE-HEADED LEFTWARDS VERY HEAVY BARB ARRO" + + "WWIDE-HEADED UPWARDS VERY HEAVY BARB ARROWWIDE-HEADED RIGHTWARDS VERY HE" + + "AVY BARB ARROWWIDE-HEADED DOWNWARDS VERY HEAVY BARB ARROWWIDE-HEADED NOR" + + "TH WEST VERY HEAVY BARB ARROWWIDE-HEADED NORTH EAST VERY HEAVY BARB ARRO" + + "WWIDE-HEADED SOUTH EAST VERY HEAVY BARB ARROWWIDE-HEADED SOUTH WEST VERY" + + " HEAVY BARB ARROWLEFTWARDS TRIANGLE ARROWHEADUPWARDS TRIANGLE ARROWHEADR") + ("" + + "IGHTWARDS TRIANGLE ARROWHEADDOWNWARDS TRIANGLE ARROWHEADLEFTWARDS WHITE " + + "ARROW WITHIN TRIANGLE ARROWHEADUPWARDS WHITE ARROW WITHIN TRIANGLE ARROW" + + "HEADRIGHTWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEADDOWNWARDS WHITE ARRO" + + "W WITHIN TRIANGLE ARROWHEADLEFTWARDS ARROW WITH NOTCHED TAILUPWARDS ARRO" + + "W WITH NOTCHED TAILRIGHTWARDS ARROW WITH NOTCHED TAILDOWNWARDS ARROW WIT" + + "H NOTCHED TAILHEAVY ARROW SHAFT WIDTH ONEHEAVY ARROW SHAFT WIDTH TWO THI" + + "RDSHEAVY ARROW SHAFT WIDTH ONE HALFHEAVY ARROW SHAFT WIDTH ONE THIRDLEFT" + + "WARDS BOTTOM-SHADED WHITE ARROWRIGHTWARDS BOTTOM SHADED WHITE ARROWLEFTW" + + "ARDS TOP SHADED WHITE ARROWRIGHTWARDS TOP SHADED WHITE ARROWLEFTWARDS LE" + + "FT-SHADED WHITE ARROWRIGHTWARDS RIGHT-SHADED WHITE ARROWLEFTWARDS RIGHT-" + + "SHADED WHITE ARROWRIGHTWARDS LEFT-SHADED WHITE ARROWLEFTWARDS BACK-TILTE" + + "D SHADOWED WHITE ARROWRIGHTWARDS BACK-TILTED SHADOWED WHITE ARROWLEFTWAR" + + "DS FRONT-TILTED SHADOWED WHITE ARROWRIGHTWARDS FRONT-TILTED SHADOWED WHI" + + "TE ARROWWHITE ARROW SHAFT WIDTH ONEWHITE ARROW SHAFT WIDTH TWO THIRDSZIP" + + "PER-MOUTH FACEMONEY-MOUTH FACEFACE WITH THERMOMETERNERD FACETHINKING FAC" + + "EFACE WITH HEAD-BANDAGEROBOT FACEHUGGING FACESIGN OF THE HORNSCALL ME HA" + + "NDRAISED BACK OF HANDLEFT-FACING FISTRIGHT-FACING FISTHANDSHAKEHAND WITH" + + " INDEX AND MIDDLE FINGERS CROSSEDFACE WITH COWBOY HATCLOWN FACENAUSEATED" + + " FACEROLLING ON THE FLOOR LAUGHINGDROOLING FACELYING FACEFACE PALMSNEEZI" + + "NG FACEPREGNANT WOMANSELFIEPRINCEMAN IN TUXEDOMOTHER CHRISTMASSHRUGPERSO" + + "N DOING CARTWHEELJUGGLINGFENCERMODERN PENTATHLONWRESTLERSWATER POLOHANDB" + + "ALLWILTED FLOWERDRUM WITH DRUMSTICKSCLINKING GLASSESTUMBLER GLASSSPOONGO" + + "AL NETRIFLEFIRST PLACE MEDALSECOND PLACE MEDALTHIRD PLACE MEDALBOXING GL" + + "OVEMARTIAL ARTS UNIFORMCROISSANTAVOCADOCUCUMBERBACONPOTATOCARROTBAGUETTE" + + " BREADGREEN SALADSHALLOW PAN OF FOODSTUFFED FLATBREADEGGGLASS OF MILKPEA" + + "NUTSKIWIFRUITPANCAKESCRABLION FACESCORPIONTURKEYUNICORN FACEEAGLEDUCKBAT" + + "SHARKOWLFOX FACEBUTTERFLYDEERGORILLALIZARDRHINOCEROSSHRIMPSQUIDCHEESE WE" + + "DGECJK COMPATIBILITY IDEOGRAPH-2F800CJK COMPATIBILITY IDEOGRAPH-2F801CJK" + + " COMPATIBILITY IDEOGRAPH-2F802CJK COMPATIBILITY IDEOGRAPH-2F803CJK COMPA" + + "TIBILITY IDEOGRAPH-2F804CJK COMPATIBILITY IDEOGRAPH-2F805CJK COMPATIBILI" + + "TY IDEOGRAPH-2F806CJK COMPATIBILITY IDEOGRAPH-2F807CJK COMPATIBILITY IDE" + + "OGRAPH-2F808CJK COMPATIBILITY IDEOGRAPH-2F809CJK COMPATIBILITY IDEOGRAPH" + + "-2F80ACJK COMPATIBILITY IDEOGRAPH-2F80BCJK COMPATIBILITY IDEOGRAPH-2F80C" + + "CJK COMPATIBILITY IDEOGRAPH-2F80DCJK COMPATIBILITY IDEOGRAPH-2F80ECJK CO" + + "MPATIBILITY IDEOGRAPH-2F80FCJK COMPATIBILITY IDEOGRAPH-2F810CJK COMPATIB" + + "ILITY IDEOGRAPH-2F811CJK COMPATIBILITY IDEOGRAPH-2F812CJK COMPATIBILITY " + + "IDEOGRAPH-2F813CJK COMPATIBILITY IDEOGRAPH-2F814CJK COMPATIBILITY IDEOGR" + + "APH-2F815CJK COMPATIBILITY IDEOGRAPH-2F816CJK COMPATIBILITY IDEOGRAPH-2F" + + "817CJK COMPATIBILITY IDEOGRAPH-2F818CJK COMPATIBILITY IDEOGRAPH-2F819CJK" + + " COMPATIBILITY IDEOGRAPH-2F81ACJK COMPATIBILITY IDEOGRAPH-2F81BCJK COMPA" + + "TIBILITY IDEOGRAPH-2F81CCJK COMPATIBILITY IDEOGRAPH-2F81DCJK COMPATIBILI" + + "TY IDEOGRAPH-2F81ECJK COMPATIBILITY IDEOGRAPH-2F81FCJK COMPATIBILITY IDE" + + "OGRAPH-2F820CJK COMPATIBILITY IDEOGRAPH-2F821CJK COMPATIBILITY IDEOGRAPH" + + "-2F822CJK COMPATIBILITY IDEOGRAPH-2F823CJK COMPATIBILITY IDEOGRAPH-2F824" + + "CJK COMPATIBILITY IDEOGRAPH-2F825CJK COMPATIBILITY IDEOGRAPH-2F826CJK CO" + + "MPATIBILITY IDEOGRAPH-2F827CJK COMPATIBILITY IDEOGRAPH-2F828CJK COMPATIB" + + "ILITY IDEOGRAPH-2F829CJK COMPATIBILITY IDEOGRAPH-2F82ACJK COMPATIBILITY " + + "IDEOGRAPH-2F82BCJK COMPATIBILITY IDEOGRAPH-2F82CCJK COMPATIBILITY IDEOGR" + + "APH-2F82DCJK COMPATIBILITY IDEOGRAPH-2F82ECJK COMPATIBILITY IDEOGRAPH-2F" + + "82FCJK COMPATIBILITY IDEOGRAPH-2F830CJK COMPATIBILITY IDEOGRAPH-2F831CJK" + + " COMPATIBILITY IDEOGRAPH-2F832CJK COMPATIBILITY IDEOGRAPH-2F833CJK COMPA" + + "TIBILITY IDEOGRAPH-2F834CJK COMPATIBILITY IDEOGRAPH-2F835CJK COMPATIBILI" + + "TY IDEOGRAPH-2F836CJK COMPATIBILITY IDEOGRAPH-2F837CJK COMPATIBILITY IDE" + + "OGRAPH-2F838CJK COMPATIBILITY IDEOGRAPH-2F839CJK COMPATIBILITY IDEOGRAPH" + + "-2F83ACJK COMPATIBILITY IDEOGRAPH-2F83BCJK COMPATIBILITY IDEOGRAPH-2F83C" + + "CJK COMPATIBILITY IDEOGRAPH-2F83DCJK COMPATIBILITY IDEOGRAPH-2F83ECJK CO" + + "MPATIBILITY IDEOGRAPH-2F83FCJK COMPATIBILITY IDEOGRAPH-2F840CJK COMPATIB" + + "ILITY IDEOGRAPH-2F841CJK COMPATIBILITY IDEOGRAPH-2F842CJK COMPATIBILITY " + + "IDEOGRAPH-2F843CJK COMPATIBILITY IDEOGRAPH-2F844CJK COMPATIBILITY IDEOGR" + + "APH-2F845CJK COMPATIBILITY IDEOGRAPH-2F846CJK COMPATIBILITY IDEOGRAPH-2F" + + "847CJK COMPATIBILITY IDEOGRAPH-2F848CJK COMPATIBILITY IDEOGRAPH-2F849CJK" + + " COMPATIBILITY IDEOGRAPH-2F84ACJK COMPATIBILITY IDEOGRAPH-2F84BCJK COMPA" + + "TIBILITY IDEOGRAPH-2F84CCJK COMPATIBILITY IDEOGRAPH-2F84DCJK COMPATIBILI" + + "TY IDEOGRAPH-2F84ECJK COMPATIBILITY IDEOGRAPH-2F84FCJK COMPATIBILITY IDE") + ("" + + "OGRAPH-2F850CJK COMPATIBILITY IDEOGRAPH-2F851CJK COMPATIBILITY IDEOGRAPH" + + "-2F852CJK COMPATIBILITY IDEOGRAPH-2F853CJK COMPATIBILITY IDEOGRAPH-2F854" + + "CJK COMPATIBILITY IDEOGRAPH-2F855CJK COMPATIBILITY IDEOGRAPH-2F856CJK CO" + + "MPATIBILITY IDEOGRAPH-2F857CJK COMPATIBILITY IDEOGRAPH-2F858CJK COMPATIB" + + "ILITY IDEOGRAPH-2F859CJK COMPATIBILITY IDEOGRAPH-2F85ACJK COMPATIBILITY " + + "IDEOGRAPH-2F85BCJK COMPATIBILITY IDEOGRAPH-2F85CCJK COMPATIBILITY IDEOGR" + + "APH-2F85DCJK COMPATIBILITY IDEOGRAPH-2F85ECJK COMPATIBILITY IDEOGRAPH-2F" + + "85FCJK COMPATIBILITY IDEOGRAPH-2F860CJK COMPATIBILITY IDEOGRAPH-2F861CJK" + + " COMPATIBILITY IDEOGRAPH-2F862CJK COMPATIBILITY IDEOGRAPH-2F863CJK COMPA" + + "TIBILITY IDEOGRAPH-2F864CJK COMPATIBILITY IDEOGRAPH-2F865CJK COMPATIBILI" + + "TY IDEOGRAPH-2F866CJK COMPATIBILITY IDEOGRAPH-2F867CJK COMPATIBILITY IDE" + + "OGRAPH-2F868CJK COMPATIBILITY IDEOGRAPH-2F869CJK COMPATIBILITY IDEOGRAPH" + + "-2F86ACJK COMPATIBILITY IDEOGRAPH-2F86BCJK COMPATIBILITY IDEOGRAPH-2F86C" + + "CJK COMPATIBILITY IDEOGRAPH-2F86DCJK COMPATIBILITY IDEOGRAPH-2F86ECJK CO" + + "MPATIBILITY IDEOGRAPH-2F86FCJK COMPATIBILITY IDEOGRAPH-2F870CJK COMPATIB" + + "ILITY IDEOGRAPH-2F871CJK COMPATIBILITY IDEOGRAPH-2F872CJK COMPATIBILITY " + + "IDEOGRAPH-2F873CJK COMPATIBILITY IDEOGRAPH-2F874CJK COMPATIBILITY IDEOGR" + + "APH-2F875CJK COMPATIBILITY IDEOGRAPH-2F876CJK COMPATIBILITY IDEOGRAPH-2F" + + "877CJK COMPATIBILITY IDEOGRAPH-2F878CJK COMPATIBILITY IDEOGRAPH-2F879CJK" + + " COMPATIBILITY IDEOGRAPH-2F87ACJK COMPATIBILITY IDEOGRAPH-2F87BCJK COMPA" + + "TIBILITY IDEOGRAPH-2F87CCJK COMPATIBILITY IDEOGRAPH-2F87DCJK COMPATIBILI" + + "TY IDEOGRAPH-2F87ECJK COMPATIBILITY IDEOGRAPH-2F87FCJK COMPATIBILITY IDE" + + "OGRAPH-2F880CJK COMPATIBILITY IDEOGRAPH-2F881CJK COMPATIBILITY IDEOGRAPH" + + "-2F882CJK COMPATIBILITY IDEOGRAPH-2F883CJK COMPATIBILITY IDEOGRAPH-2F884" + + "CJK COMPATIBILITY IDEOGRAPH-2F885CJK COMPATIBILITY IDEOGRAPH-2F886CJK CO" + + "MPATIBILITY IDEOGRAPH-2F887CJK COMPATIBILITY IDEOGRAPH-2F888CJK COMPATIB" + + "ILITY IDEOGRAPH-2F889CJK COMPATIBILITY IDEOGRAPH-2F88ACJK COMPATIBILITY " + + "IDEOGRAPH-2F88BCJK COMPATIBILITY IDEOGRAPH-2F88CCJK COMPATIBILITY IDEOGR" + + "APH-2F88DCJK COMPATIBILITY IDEOGRAPH-2F88ECJK COMPATIBILITY IDEOGRAPH-2F" + + "88FCJK COMPATIBILITY IDEOGRAPH-2F890CJK COMPATIBILITY IDEOGRAPH-2F891CJK" + + " COMPATIBILITY IDEOGRAPH-2F892CJK COMPATIBILITY IDEOGRAPH-2F893CJK COMPA" + + "TIBILITY IDEOGRAPH-2F894CJK COMPATIBILITY IDEOGRAPH-2F895CJK COMPATIBILI" + + "TY IDEOGRAPH-2F896CJK COMPATIBILITY IDEOGRAPH-2F897CJK COMPATIBILITY IDE" + + "OGRAPH-2F898CJK COMPATIBILITY IDEOGRAPH-2F899CJK COMPATIBILITY IDEOGRAPH" + + "-2F89ACJK COMPATIBILITY IDEOGRAPH-2F89BCJK COMPATIBILITY IDEOGRAPH-2F89C" + + "CJK COMPATIBILITY IDEOGRAPH-2F89DCJK COMPATIBILITY IDEOGRAPH-2F89ECJK CO" + + "MPATIBILITY IDEOGRAPH-2F89FCJK COMPATIBILITY IDEOGRAPH-2F8A0CJK COMPATIB" + + "ILITY IDEOGRAPH-2F8A1CJK COMPATIBILITY IDEOGRAPH-2F8A2CJK COMPATIBILITY " + + "IDEOGRAPH-2F8A3CJK COMPATIBILITY IDEOGRAPH-2F8A4CJK COMPATIBILITY IDEOGR" + + "APH-2F8A5CJK COMPATIBILITY IDEOGRAPH-2F8A6CJK COMPATIBILITY IDEOGRAPH-2F" + + "8A7CJK COMPATIBILITY IDEOGRAPH-2F8A8CJK COMPATIBILITY IDEOGRAPH-2F8A9CJK" + + " COMPATIBILITY IDEOGRAPH-2F8AACJK COMPATIBILITY IDEOGRAPH-2F8ABCJK COMPA" + + "TIBILITY IDEOGRAPH-2F8ACCJK COMPATIBILITY IDEOGRAPH-2F8ADCJK COMPATIBILI" + + "TY IDEOGRAPH-2F8AECJK COMPATIBILITY IDEOGRAPH-2F8AFCJK COMPATIBILITY IDE" + + "OGRAPH-2F8B0CJK COMPATIBILITY IDEOGRAPH-2F8B1CJK COMPATIBILITY IDEOGRAPH" + + "-2F8B2CJK COMPATIBILITY IDEOGRAPH-2F8B3CJK COMPATIBILITY IDEOGRAPH-2F8B4" + + "CJK COMPATIBILITY IDEOGRAPH-2F8B5CJK COMPATIBILITY IDEOGRAPH-2F8B6CJK CO" + + "MPATIBILITY IDEOGRAPH-2F8B7CJK COMPATIBILITY IDEOGRAPH-2F8B8CJK COMPATIB" + + "ILITY IDEOGRAPH-2F8B9CJK COMPATIBILITY IDEOGRAPH-2F8BACJK COMPATIBILITY " + + "IDEOGRAPH-2F8BBCJK COMPATIBILITY IDEOGRAPH-2F8BCCJK COMPATIBILITY IDEOGR" + + "APH-2F8BDCJK COMPATIBILITY IDEOGRAPH-2F8BECJK COMPATIBILITY IDEOGRAPH-2F" + + "8BFCJK COMPATIBILITY IDEOGRAPH-2F8C0CJK COMPATIBILITY IDEOGRAPH-2F8C1CJK" + + " COMPATIBILITY IDEOGRAPH-2F8C2CJK COMPATIBILITY IDEOGRAPH-2F8C3CJK COMPA" + + "TIBILITY IDEOGRAPH-2F8C4CJK COMPATIBILITY IDEOGRAPH-2F8C5CJK COMPATIBILI" + + "TY IDEOGRAPH-2F8C6CJK COMPATIBILITY IDEOGRAPH-2F8C7CJK COMPATIBILITY IDE" + + "OGRAPH-2F8C8CJK COMPATIBILITY IDEOGRAPH-2F8C9CJK COMPATIBILITY IDEOGRAPH" + + "-2F8CACJK COMPATIBILITY IDEOGRAPH-2F8CBCJK COMPATIBILITY IDEOGRAPH-2F8CC" + + "CJK COMPATIBILITY IDEOGRAPH-2F8CDCJK COMPATIBILITY IDEOGRAPH-2F8CECJK CO" + + "MPATIBILITY IDEOGRAPH-2F8CFCJK COMPATIBILITY IDEOGRAPH-2F8D0CJK COMPATIB" + + "ILITY IDEOGRAPH-2F8D1CJK COMPATIBILITY IDEOGRAPH-2F8D2CJK COMPATIBILITY " + + "IDEOGRAPH-2F8D3CJK COMPATIBILITY IDEOGRAPH-2F8D4CJK COMPATIBILITY IDEOGR" + + "APH-2F8D5CJK COMPATIBILITY IDEOGRAPH-2F8D6CJK COMPATIBILITY IDEOGRAPH-2F" + + "8D7CJK COMPATIBILITY IDEOGRAPH-2F8D8CJK COMPATIBILITY IDEOGRAPH-2F8D9CJK" + + " COMPATIBILITY IDEOGRAPH-2F8DACJK COMPATIBILITY IDEOGRAPH-2F8DBCJK COMPA") + ("" + + "TIBILITY IDEOGRAPH-2F8DCCJK COMPATIBILITY IDEOGRAPH-2F8DDCJK COMPATIBILI" + + "TY IDEOGRAPH-2F8DECJK COMPATIBILITY IDEOGRAPH-2F8DFCJK COMPATIBILITY IDE" + + "OGRAPH-2F8E0CJK COMPATIBILITY IDEOGRAPH-2F8E1CJK COMPATIBILITY IDEOGRAPH" + + "-2F8E2CJK COMPATIBILITY IDEOGRAPH-2F8E3CJK COMPATIBILITY IDEOGRAPH-2F8E4" + + "CJK COMPATIBILITY IDEOGRAPH-2F8E5CJK COMPATIBILITY IDEOGRAPH-2F8E6CJK CO" + + "MPATIBILITY IDEOGRAPH-2F8E7CJK COMPATIBILITY IDEOGRAPH-2F8E8CJK COMPATIB" + + "ILITY IDEOGRAPH-2F8E9CJK COMPATIBILITY IDEOGRAPH-2F8EACJK COMPATIBILITY " + + "IDEOGRAPH-2F8EBCJK COMPATIBILITY IDEOGRAPH-2F8ECCJK COMPATIBILITY IDEOGR" + + "APH-2F8EDCJK COMPATIBILITY IDEOGRAPH-2F8EECJK COMPATIBILITY IDEOGRAPH-2F" + + "8EFCJK COMPATIBILITY IDEOGRAPH-2F8F0CJK COMPATIBILITY IDEOGRAPH-2F8F1CJK" + + " COMPATIBILITY IDEOGRAPH-2F8F2CJK COMPATIBILITY IDEOGRAPH-2F8F3CJK COMPA" + + "TIBILITY IDEOGRAPH-2F8F4CJK COMPATIBILITY IDEOGRAPH-2F8F5CJK COMPATIBILI" + + "TY IDEOGRAPH-2F8F6CJK COMPATIBILITY IDEOGRAPH-2F8F7CJK COMPATIBILITY IDE" + + "OGRAPH-2F8F8CJK COMPATIBILITY IDEOGRAPH-2F8F9CJK COMPATIBILITY IDEOGRAPH" + + "-2F8FACJK COMPATIBILITY IDEOGRAPH-2F8FBCJK COMPATIBILITY IDEOGRAPH-2F8FC" + + "CJK COMPATIBILITY IDEOGRAPH-2F8FDCJK COMPATIBILITY IDEOGRAPH-2F8FECJK CO" + + "MPATIBILITY IDEOGRAPH-2F8FFCJK COMPATIBILITY IDEOGRAPH-2F900CJK COMPATIB" + + "ILITY IDEOGRAPH-2F901CJK COMPATIBILITY IDEOGRAPH-2F902CJK COMPATIBILITY " + + "IDEOGRAPH-2F903CJK COMPATIBILITY IDEOGRAPH-2F904CJK COMPATIBILITY IDEOGR" + + "APH-2F905CJK COMPATIBILITY IDEOGRAPH-2F906CJK COMPATIBILITY IDEOGRAPH-2F" + + "907CJK COMPATIBILITY IDEOGRAPH-2F908CJK COMPATIBILITY IDEOGRAPH-2F909CJK" + + " COMPATIBILITY IDEOGRAPH-2F90ACJK COMPATIBILITY IDEOGRAPH-2F90BCJK COMPA" + + "TIBILITY IDEOGRAPH-2F90CCJK COMPATIBILITY IDEOGRAPH-2F90DCJK COMPATIBILI" + + "TY IDEOGRAPH-2F90ECJK COMPATIBILITY IDEOGRAPH-2F90FCJK COMPATIBILITY IDE" + + "OGRAPH-2F910CJK COMPATIBILITY IDEOGRAPH-2F911CJK COMPATIBILITY IDEOGRAPH" + + "-2F912CJK COMPATIBILITY IDEOGRAPH-2F913CJK COMPATIBILITY IDEOGRAPH-2F914" + + "CJK COMPATIBILITY IDEOGRAPH-2F915CJK COMPATIBILITY IDEOGRAPH-2F916CJK CO" + + "MPATIBILITY IDEOGRAPH-2F917CJK COMPATIBILITY IDEOGRAPH-2F918CJK COMPATIB" + + "ILITY IDEOGRAPH-2F919CJK COMPATIBILITY IDEOGRAPH-2F91ACJK COMPATIBILITY " + + "IDEOGRAPH-2F91BCJK COMPATIBILITY IDEOGRAPH-2F91CCJK COMPATIBILITY IDEOGR" + + "APH-2F91DCJK COMPATIBILITY IDEOGRAPH-2F91ECJK COMPATIBILITY IDEOGRAPH-2F" + + "91FCJK COMPATIBILITY IDEOGRAPH-2F920CJK COMPATIBILITY IDEOGRAPH-2F921CJK" + + " COMPATIBILITY IDEOGRAPH-2F922CJK COMPATIBILITY IDEOGRAPH-2F923CJK COMPA" + + "TIBILITY IDEOGRAPH-2F924CJK COMPATIBILITY IDEOGRAPH-2F925CJK COMPATIBILI" + + "TY IDEOGRAPH-2F926CJK COMPATIBILITY IDEOGRAPH-2F927CJK COMPATIBILITY IDE" + + "OGRAPH-2F928CJK COMPATIBILITY IDEOGRAPH-2F929CJK COMPATIBILITY IDEOGRAPH" + + "-2F92ACJK COMPATIBILITY IDEOGRAPH-2F92BCJK COMPATIBILITY IDEOGRAPH-2F92C" + + "CJK COMPATIBILITY IDEOGRAPH-2F92DCJK COMPATIBILITY IDEOGRAPH-2F92ECJK CO" + + "MPATIBILITY IDEOGRAPH-2F92FCJK COMPATIBILITY IDEOGRAPH-2F930CJK COMPATIB" + + "ILITY IDEOGRAPH-2F931CJK COMPATIBILITY IDEOGRAPH-2F932CJK COMPATIBILITY " + + "IDEOGRAPH-2F933CJK COMPATIBILITY IDEOGRAPH-2F934CJK COMPATIBILITY IDEOGR" + + "APH-2F935CJK COMPATIBILITY IDEOGRAPH-2F936CJK COMPATIBILITY IDEOGRAPH-2F" + + "937CJK COMPATIBILITY IDEOGRAPH-2F938CJK COMPATIBILITY IDEOGRAPH-2F939CJK" + + " COMPATIBILITY IDEOGRAPH-2F93ACJK COMPATIBILITY IDEOGRAPH-2F93BCJK COMPA" + + "TIBILITY IDEOGRAPH-2F93CCJK COMPATIBILITY IDEOGRAPH-2F93DCJK COMPATIBILI" + + "TY IDEOGRAPH-2F93ECJK COMPATIBILITY IDEOGRAPH-2F93FCJK COMPATIBILITY IDE" + + "OGRAPH-2F940CJK COMPATIBILITY IDEOGRAPH-2F941CJK COMPATIBILITY IDEOGRAPH" + + "-2F942CJK COMPATIBILITY IDEOGRAPH-2F943CJK COMPATIBILITY IDEOGRAPH-2F944" + + "CJK COMPATIBILITY IDEOGRAPH-2F945CJK COMPATIBILITY IDEOGRAPH-2F946CJK CO" + + "MPATIBILITY IDEOGRAPH-2F947CJK COMPATIBILITY IDEOGRAPH-2F948CJK COMPATIB" + + "ILITY IDEOGRAPH-2F949CJK COMPATIBILITY IDEOGRAPH-2F94ACJK COMPATIBILITY " + + "IDEOGRAPH-2F94BCJK COMPATIBILITY IDEOGRAPH-2F94CCJK COMPATIBILITY IDEOGR" + + "APH-2F94DCJK COMPATIBILITY IDEOGRAPH-2F94ECJK COMPATIBILITY IDEOGRAPH-2F" + + "94FCJK COMPATIBILITY IDEOGRAPH-2F950CJK COMPATIBILITY IDEOGRAPH-2F951CJK" + + " COMPATIBILITY IDEOGRAPH-2F952CJK COMPATIBILITY IDEOGRAPH-2F953CJK COMPA" + + "TIBILITY IDEOGRAPH-2F954CJK COMPATIBILITY IDEOGRAPH-2F955CJK COMPATIBILI" + + "TY IDEOGRAPH-2F956CJK COMPATIBILITY IDEOGRAPH-2F957CJK COMPATIBILITY IDE" + + "OGRAPH-2F958CJK COMPATIBILITY IDEOGRAPH-2F959CJK COMPATIBILITY IDEOGRAPH" + + "-2F95ACJK COMPATIBILITY IDEOGRAPH-2F95BCJK COMPATIBILITY IDEOGRAPH-2F95C" + + "CJK COMPATIBILITY IDEOGRAPH-2F95DCJK COMPATIBILITY IDEOGRAPH-2F95ECJK CO" + + "MPATIBILITY IDEOGRAPH-2F95FCJK COMPATIBILITY IDEOGRAPH-2F960CJK COMPATIB" + + "ILITY IDEOGRAPH-2F961CJK COMPATIBILITY IDEOGRAPH-2F962CJK COMPATIBILITY " + + "IDEOGRAPH-2F963CJK COMPATIBILITY IDEOGRAPH-2F964CJK COMPATIBILITY IDEOGR" + + "APH-2F965CJK COMPATIBILITY IDEOGRAPH-2F966CJK COMPATIBILITY IDEOGRAPH-2F") + ("" + + "967CJK COMPATIBILITY IDEOGRAPH-2F968CJK COMPATIBILITY IDEOGRAPH-2F969CJK" + + " COMPATIBILITY IDEOGRAPH-2F96ACJK COMPATIBILITY IDEOGRAPH-2F96BCJK COMPA" + + "TIBILITY IDEOGRAPH-2F96CCJK COMPATIBILITY IDEOGRAPH-2F96DCJK COMPATIBILI" + + "TY IDEOGRAPH-2F96ECJK COMPATIBILITY IDEOGRAPH-2F96FCJK COMPATIBILITY IDE" + + "OGRAPH-2F970CJK COMPATIBILITY IDEOGRAPH-2F971CJK COMPATIBILITY IDEOGRAPH" + + "-2F972CJK COMPATIBILITY IDEOGRAPH-2F973CJK COMPATIBILITY IDEOGRAPH-2F974" + + "CJK COMPATIBILITY IDEOGRAPH-2F975CJK COMPATIBILITY IDEOGRAPH-2F976CJK CO" + + "MPATIBILITY IDEOGRAPH-2F977CJK COMPATIBILITY IDEOGRAPH-2F978CJK COMPATIB" + + "ILITY IDEOGRAPH-2F979CJK COMPATIBILITY IDEOGRAPH-2F97ACJK COMPATIBILITY " + + "IDEOGRAPH-2F97BCJK COMPATIBILITY IDEOGRAPH-2F97CCJK COMPATIBILITY IDEOGR" + + "APH-2F97DCJK COMPATIBILITY IDEOGRAPH-2F97ECJK COMPATIBILITY IDEOGRAPH-2F" + + "97FCJK COMPATIBILITY IDEOGRAPH-2F980CJK COMPATIBILITY IDEOGRAPH-2F981CJK" + + " COMPATIBILITY IDEOGRAPH-2F982CJK COMPATIBILITY IDEOGRAPH-2F983CJK COMPA" + + "TIBILITY IDEOGRAPH-2F984CJK COMPATIBILITY IDEOGRAPH-2F985CJK COMPATIBILI" + + "TY IDEOGRAPH-2F986CJK COMPATIBILITY IDEOGRAPH-2F987CJK COMPATIBILITY IDE" + + "OGRAPH-2F988CJK COMPATIBILITY IDEOGRAPH-2F989CJK COMPATIBILITY IDEOGRAPH" + + "-2F98ACJK COMPATIBILITY IDEOGRAPH-2F98BCJK COMPATIBILITY IDEOGRAPH-2F98C" + + "CJK COMPATIBILITY IDEOGRAPH-2F98DCJK COMPATIBILITY IDEOGRAPH-2F98ECJK CO" + + "MPATIBILITY IDEOGRAPH-2F98FCJK COMPATIBILITY IDEOGRAPH-2F990CJK COMPATIB" + + "ILITY IDEOGRAPH-2F991CJK COMPATIBILITY IDEOGRAPH-2F992CJK COMPATIBILITY " + + "IDEOGRAPH-2F993CJK COMPATIBILITY IDEOGRAPH-2F994CJK COMPATIBILITY IDEOGR" + + "APH-2F995CJK COMPATIBILITY IDEOGRAPH-2F996CJK COMPATIBILITY IDEOGRAPH-2F" + + "997CJK COMPATIBILITY IDEOGRAPH-2F998CJK COMPATIBILITY IDEOGRAPH-2F999CJK" + + " COMPATIBILITY IDEOGRAPH-2F99ACJK COMPATIBILITY IDEOGRAPH-2F99BCJK COMPA" + + "TIBILITY IDEOGRAPH-2F99CCJK COMPATIBILITY IDEOGRAPH-2F99DCJK COMPATIBILI" + + "TY IDEOGRAPH-2F99ECJK COMPATIBILITY IDEOGRAPH-2F99FCJK COMPATIBILITY IDE" + + "OGRAPH-2F9A0CJK COMPATIBILITY IDEOGRAPH-2F9A1CJK COMPATIBILITY IDEOGRAPH" + + "-2F9A2CJK COMPATIBILITY IDEOGRAPH-2F9A3CJK COMPATIBILITY IDEOGRAPH-2F9A4" + + "CJK COMPATIBILITY IDEOGRAPH-2F9A5CJK COMPATIBILITY IDEOGRAPH-2F9A6CJK CO" + + "MPATIBILITY IDEOGRAPH-2F9A7CJK COMPATIBILITY IDEOGRAPH-2F9A8CJK COMPATIB" + + "ILITY IDEOGRAPH-2F9A9CJK COMPATIBILITY IDEOGRAPH-2F9AACJK COMPATIBILITY " + + "IDEOGRAPH-2F9ABCJK COMPATIBILITY IDEOGRAPH-2F9ACCJK COMPATIBILITY IDEOGR" + + "APH-2F9ADCJK COMPATIBILITY IDEOGRAPH-2F9AECJK COMPATIBILITY IDEOGRAPH-2F" + + "9AFCJK COMPATIBILITY IDEOGRAPH-2F9B0CJK COMPATIBILITY IDEOGRAPH-2F9B1CJK" + + " COMPATIBILITY IDEOGRAPH-2F9B2CJK COMPATIBILITY IDEOGRAPH-2F9B3CJK COMPA" + + "TIBILITY IDEOGRAPH-2F9B4CJK COMPATIBILITY IDEOGRAPH-2F9B5CJK COMPATIBILI" + + "TY IDEOGRAPH-2F9B6CJK COMPATIBILITY IDEOGRAPH-2F9B7CJK COMPATIBILITY IDE" + + "OGRAPH-2F9B8CJK COMPATIBILITY IDEOGRAPH-2F9B9CJK COMPATIBILITY IDEOGRAPH" + + "-2F9BACJK COMPATIBILITY IDEOGRAPH-2F9BBCJK COMPATIBILITY IDEOGRAPH-2F9BC" + + "CJK COMPATIBILITY IDEOGRAPH-2F9BDCJK COMPATIBILITY IDEOGRAPH-2F9BECJK CO" + + "MPATIBILITY IDEOGRAPH-2F9BFCJK COMPATIBILITY IDEOGRAPH-2F9C0CJK COMPATIB" + + "ILITY IDEOGRAPH-2F9C1CJK COMPATIBILITY IDEOGRAPH-2F9C2CJK COMPATIBILITY " + + "IDEOGRAPH-2F9C3CJK COMPATIBILITY IDEOGRAPH-2F9C4CJK COMPATIBILITY IDEOGR" + + "APH-2F9C5CJK COMPATIBILITY IDEOGRAPH-2F9C6CJK COMPATIBILITY IDEOGRAPH-2F" + + "9C7CJK COMPATIBILITY IDEOGRAPH-2F9C8CJK COMPATIBILITY IDEOGRAPH-2F9C9CJK" + + " COMPATIBILITY IDEOGRAPH-2F9CACJK COMPATIBILITY IDEOGRAPH-2F9CBCJK COMPA" + + "TIBILITY IDEOGRAPH-2F9CCCJK COMPATIBILITY IDEOGRAPH-2F9CDCJK COMPATIBILI" + + "TY IDEOGRAPH-2F9CECJK COMPATIBILITY IDEOGRAPH-2F9CFCJK COMPATIBILITY IDE" + + "OGRAPH-2F9D0CJK COMPATIBILITY IDEOGRAPH-2F9D1CJK COMPATIBILITY IDEOGRAPH" + + "-2F9D2CJK COMPATIBILITY IDEOGRAPH-2F9D3CJK COMPATIBILITY IDEOGRAPH-2F9D4" + + "CJK COMPATIBILITY IDEOGRAPH-2F9D5CJK COMPATIBILITY IDEOGRAPH-2F9D6CJK CO" + + "MPATIBILITY IDEOGRAPH-2F9D7CJK COMPATIBILITY IDEOGRAPH-2F9D8CJK COMPATIB" + + "ILITY IDEOGRAPH-2F9D9CJK COMPATIBILITY IDEOGRAPH-2F9DACJK COMPATIBILITY " + + "IDEOGRAPH-2F9DBCJK COMPATIBILITY IDEOGRAPH-2F9DCCJK COMPATIBILITY IDEOGR" + + "APH-2F9DDCJK COMPATIBILITY IDEOGRAPH-2F9DECJK COMPATIBILITY IDEOGRAPH-2F" + + "9DFCJK COMPATIBILITY IDEOGRAPH-2F9E0CJK COMPATIBILITY IDEOGRAPH-2F9E1CJK" + + " COMPATIBILITY IDEOGRAPH-2F9E2CJK COMPATIBILITY IDEOGRAPH-2F9E3CJK COMPA" + + "TIBILITY IDEOGRAPH-2F9E4CJK COMPATIBILITY IDEOGRAPH-2F9E5CJK COMPATIBILI" + + "TY IDEOGRAPH-2F9E6CJK COMPATIBILITY IDEOGRAPH-2F9E7CJK COMPATIBILITY IDE" + + "OGRAPH-2F9E8CJK COMPATIBILITY IDEOGRAPH-2F9E9CJK COMPATIBILITY IDEOGRAPH" + + "-2F9EACJK COMPATIBILITY IDEOGRAPH-2F9EBCJK COMPATIBILITY IDEOGRAPH-2F9EC" + + "CJK COMPATIBILITY IDEOGRAPH-2F9EDCJK COMPATIBILITY IDEOGRAPH-2F9EECJK CO" + + "MPATIBILITY IDEOGRAPH-2F9EFCJK COMPATIBILITY IDEOGRAPH-2F9F0CJK COMPATIB" + + "ILITY IDEOGRAPH-2F9F1CJK COMPATIBILITY IDEOGRAPH-2F9F2CJK COMPATIBILITY ") + ("" + + "IDEOGRAPH-2F9F3CJK COMPATIBILITY IDEOGRAPH-2F9F4CJK COMPATIBILITY IDEOGR" + + "APH-2F9F5CJK COMPATIBILITY IDEOGRAPH-2F9F6CJK COMPATIBILITY IDEOGRAPH-2F" + + "9F7CJK COMPATIBILITY IDEOGRAPH-2F9F8CJK COMPATIBILITY IDEOGRAPH-2F9F9CJK" + + " COMPATIBILITY IDEOGRAPH-2F9FACJK COMPATIBILITY IDEOGRAPH-2F9FBCJK COMPA" + + "TIBILITY IDEOGRAPH-2F9FCCJK COMPATIBILITY IDEOGRAPH-2F9FDCJK COMPATIBILI" + + "TY IDEOGRAPH-2F9FECJK COMPATIBILITY IDEOGRAPH-2F9FFCJK COMPATIBILITY IDE" + + "OGRAPH-2FA00CJK COMPATIBILITY IDEOGRAPH-2FA01CJK COMPATIBILITY IDEOGRAPH" + + "-2FA02CJK COMPATIBILITY IDEOGRAPH-2FA03CJK COMPATIBILITY IDEOGRAPH-2FA04" + + "CJK COMPATIBILITY IDEOGRAPH-2FA05CJK COMPATIBILITY IDEOGRAPH-2FA06CJK CO" + + "MPATIBILITY IDEOGRAPH-2FA07CJK COMPATIBILITY IDEOGRAPH-2FA08CJK COMPATIB" + + "ILITY IDEOGRAPH-2FA09CJK COMPATIBILITY IDEOGRAPH-2FA0ACJK COMPATIBILITY " + + "IDEOGRAPH-2FA0BCJK COMPATIBILITY IDEOGRAPH-2FA0CCJK COMPATIBILITY IDEOGR" + + "APH-2FA0DCJK COMPATIBILITY IDEOGRAPH-2FA0ECJK COMPATIBILITY IDEOGRAPH-2F" + + "A0FCJK COMPATIBILITY IDEOGRAPH-2FA10CJK COMPATIBILITY IDEOGRAPH-2FA11CJK" + + " COMPATIBILITY IDEOGRAPH-2FA12CJK COMPATIBILITY IDEOGRAPH-2FA13CJK COMPA" + + "TIBILITY IDEOGRAPH-2FA14CJK COMPATIBILITY IDEOGRAPH-2FA15CJK COMPATIBILI" + + "TY IDEOGRAPH-2FA16CJK COMPATIBILITY IDEOGRAPH-2FA17CJK COMPATIBILITY IDE" + + "OGRAPH-2FA18CJK COMPATIBILITY IDEOGRAPH-2FA19CJK COMPATIBILITY IDEOGRAPH" + + "-2FA1ACJK COMPATIBILITY IDEOGRAPH-2FA1BCJK COMPATIBILITY IDEOGRAPH-2FA1C" + + "CJK COMPATIBILITY IDEOGRAPH-2FA1DLANGUAGE TAGTAG SPACETAG EXCLAMATION MA" + + "RKTAG QUOTATION MARKTAG NUMBER SIGNTAG DOLLAR SIGNTAG PERCENT SIGNTAG AM" + + "PERSANDTAG APOSTROPHETAG LEFT PARENTHESISTAG RIGHT PARENTHESISTAG ASTERI" + + "SKTAG PLUS SIGNTAG COMMATAG HYPHEN-MINUSTAG FULL STOPTAG SOLIDUSTAG DIGI" + + "T ZEROTAG DIGIT ONETAG DIGIT TWOTAG DIGIT THREETAG DIGIT FOURTAG DIGIT F" + + "IVETAG DIGIT SIXTAG DIGIT SEVENTAG DIGIT EIGHTTAG DIGIT NINETAG COLONTAG" + + " SEMICOLONTAG LESS-THAN SIGNTAG EQUALS SIGNTAG GREATER-THAN SIGNTAG QUES" + + "TION MARKTAG COMMERCIAL ATTAG LATIN CAPITAL LETTER ATAG LATIN CAPITAL LE" + + "TTER BTAG LATIN CAPITAL LETTER CTAG LATIN CAPITAL LETTER DTAG LATIN CAPI" + + "TAL LETTER ETAG LATIN CAPITAL LETTER FTAG LATIN CAPITAL LETTER GTAG LATI" + + "N CAPITAL LETTER HTAG LATIN CAPITAL LETTER ITAG LATIN CAPITAL LETTER JTA" + + "G LATIN CAPITAL LETTER KTAG LATIN CAPITAL LETTER LTAG LATIN CAPITAL LETT" + + "ER MTAG LATIN CAPITAL LETTER NTAG LATIN CAPITAL LETTER OTAG LATIN CAPITA" + + "L LETTER PTAG LATIN CAPITAL LETTER QTAG LATIN CAPITAL LETTER RTAG LATIN " + + "CAPITAL LETTER STAG LATIN CAPITAL LETTER TTAG LATIN CAPITAL LETTER UTAG " + + "LATIN CAPITAL LETTER VTAG LATIN CAPITAL LETTER WTAG LATIN CAPITAL LETTER" + + " XTAG LATIN CAPITAL LETTER YTAG LATIN CAPITAL LETTER ZTAG LEFT SQUARE BR" + + "ACKETTAG REVERSE SOLIDUSTAG RIGHT SQUARE BRACKETTAG CIRCUMFLEX ACCENTTAG" + + " LOW LINETAG GRAVE ACCENTTAG LATIN SMALL LETTER ATAG LATIN SMALL LETTER " + + "BTAG LATIN SMALL LETTER CTAG LATIN SMALL LETTER DTAG LATIN SMALL LETTER " + + "ETAG LATIN SMALL LETTER FTAG LATIN SMALL LETTER GTAG LATIN SMALL LETTER " + + "HTAG LATIN SMALL LETTER ITAG LATIN SMALL LETTER JTAG LATIN SMALL LETTER " + + "KTAG LATIN SMALL LETTER LTAG LATIN SMALL LETTER MTAG LATIN SMALL LETTER " + + "NTAG LATIN SMALL LETTER OTAG LATIN SMALL LETTER PTAG LATIN SMALL LETTER " + + "QTAG LATIN SMALL LETTER RTAG LATIN SMALL LETTER STAG LATIN SMALL LETTER " + + "TTAG LATIN SMALL LETTER UTAG LATIN SMALL LETTER VTAG LATIN SMALL LETTER " + + "WTAG LATIN SMALL LETTER XTAG LATIN SMALL LETTER YTAG LATIN SMALL LETTER " + + "ZTAG LEFT CURLY BRACKETTAG VERTICAL LINETAG RIGHT CURLY BRACKETTAG TILDE" + + "CANCEL TAGVARIATION SELECTOR-17VARIATION SELECTOR-18VARIATION SELECTOR-1" + + "9VARIATION SELECTOR-20VARIATION SELECTOR-21VARIATION SELECTOR-22VARIATIO" + + "N SELECTOR-23VARIATION SELECTOR-24VARIATION SELECTOR-25VARIATION SELECTO" + + "R-26VARIATION SELECTOR-27VARIATION SELECTOR-28VARIATION SELECTOR-29VARIA" + + "TION SELECTOR-30VARIATION SELECTOR-31VARIATION SELECTOR-32VARIATION SELE" + + "CTOR-33VARIATION SELECTOR-34VARIATION SELECTOR-35VARIATION SELECTOR-36VA" + + "RIATION SELECTOR-37VARIATION SELECTOR-38VARIATION SELECTOR-39VARIATION S" + + "ELECTOR-40VARIATION SELECTOR-41VARIATION SELECTOR-42VARIATION SELECTOR-4" + + "3VARIATION SELECTOR-44VARIATION SELECTOR-45VARIATION SELECTOR-46VARIATIO" + + "N SELECTOR-47VARIATION SELECTOR-48VARIATION SELECTOR-49VARIATION SELECTO" + + "R-50VARIATION SELECTOR-51VARIATION SELECTOR-52VARIATION SELECTOR-53VARIA" + + "TION SELECTOR-54VARIATION SELECTOR-55VARIATION SELECTOR-56VARIATION SELE" + + "CTOR-57VARIATION SELECTOR-58VARIATION SELECTOR-59VARIATION SELECTOR-60VA" + + "RIATION SELECTOR-61VARIATION SELECTOR-62VARIATION SELECTOR-63VARIATION S" + + "ELECTOR-64VARIATION SELECTOR-65VARIATION SELECTOR-66VARIATION SELECTOR-6" + + "7VARIATION SELECTOR-68VARIATION SELECTOR-69VARIATION SELECTOR-70VARIATIO" + + "N SELECTOR-71VARIATION SELECTOR-72VARIATION SELECTOR-73VARIATION SELECTO") + ("" + + "R-74VARIATION SELECTOR-75VARIATION SELECTOR-76VARIATION SELECTOR-77VARIA" + + "TION SELECTOR-78VARIATION SELECTOR-79VARIATION SELECTOR-80VARIATION SELE" + + "CTOR-81VARIATION SELECTOR-82VARIATION SELECTOR-83VARIATION SELECTOR-84VA" + + "RIATION SELECTOR-85VARIATION SELECTOR-86VARIATION SELECTOR-87VARIATION S" + + "ELECTOR-88VARIATION SELECTOR-89VARIATION SELECTOR-90VARIATION SELECTOR-9" + + "1VARIATION SELECTOR-92VARIATION SELECTOR-93VARIATION SELECTOR-94VARIATIO" + + "N SELECTOR-95VARIATION SELECTOR-96VARIATION SELECTOR-97VARIATION SELECTO" + + "R-98VARIATION SELECTOR-99VARIATION SELECTOR-100VARIATION SELECTOR-101VAR" + + "IATION SELECTOR-102VARIATION SELECTOR-103VARIATION SELECTOR-104VARIATION" + + " SELECTOR-105VARIATION SELECTOR-106VARIATION SELECTOR-107VARIATION SELEC" + + "TOR-108VARIATION SELECTOR-109VARIATION SELECTOR-110VARIATION SELECTOR-11" + + "1VARIATION SELECTOR-112VARIATION SELECTOR-113VARIATION SELECTOR-114VARIA" + + "TION SELECTOR-115VARIATION SELECTOR-116VARIATION SELECTOR-117VARIATION S" + + "ELECTOR-118VARIATION SELECTOR-119VARIATION SELECTOR-120VARIATION SELECTO" + + "R-121VARIATION SELECTOR-122VARIATION SELECTOR-123VARIATION SELECTOR-124V" + + "ARIATION SELECTOR-125VARIATION SELECTOR-126VARIATION SELECTOR-127VARIATI" + + "ON SELECTOR-128VARIATION SELECTOR-129VARIATION SELECTOR-130VARIATION SEL" + + "ECTOR-131VARIATION SELECTOR-132VARIATION SELECTOR-133VARIATION SELECTOR-" + + "134VARIATION SELECTOR-135VARIATION SELECTOR-136VARIATION SELECTOR-137VAR" + + "IATION SELECTOR-138VARIATION SELECTOR-139VARIATION SELECTOR-140VARIATION" + + " SELECTOR-141VARIATION SELECTOR-142VARIATION SELECTOR-143VARIATION SELEC" + + "TOR-144VARIATION SELECTOR-145VARIATION SELECTOR-146VARIATION SELECTOR-14" + + "7VARIATION SELECTOR-148VARIATION SELECTOR-149VARIATION SELECTOR-150VARIA" + + "TION SELECTOR-151VARIATION SELECTOR-152VARIATION SELECTOR-153VARIATION S" + + "ELECTOR-154VARIATION SELECTOR-155VARIATION SELECTOR-156VARIATION SELECTO" + + "R-157VARIATION SELECTOR-158VARIATION SELECTOR-159VARIATION SELECTOR-160V" + + "ARIATION SELECTOR-161VARIATION SELECTOR-162VARIATION SELECTOR-163VARIATI" + + "ON SELECTOR-164VARIATION SELECTOR-165VARIATION SELECTOR-166VARIATION SEL" + + "ECTOR-167VARIATION SELECTOR-168VARIATION SELECTOR-169VARIATION SELECTOR-" + + "170VARIATION SELECTOR-171VARIATION SELECTOR-172VARIATION SELECTOR-173VAR" + + "IATION SELECTOR-174VARIATION SELECTOR-175VARIATION SELECTOR-176VARIATION" + + " SELECTOR-177VARIATION SELECTOR-178VARIATION SELECTOR-179VARIATION SELEC" + + "TOR-180VARIATION SELECTOR-181VARIATION SELECTOR-182VARIATION SELECTOR-18" + + "3VARIATION SELECTOR-184VARIATION SELECTOR-185VARIATION SELECTOR-186VARIA" + + "TION SELECTOR-187VARIATION SELECTOR-188VARIATION SELECTOR-189VARIATION S" + + "ELECTOR-190VARIATION SELECTOR-191VARIATION SELECTOR-192VARIATION SELECTO" + + "R-193VARIATION SELECTOR-194VARIATION SELECTOR-195VARIATION SELECTOR-196V" + + "ARIATION SELECTOR-197VARIATION SELECTOR-198VARIATION SELECTOR-199VARIATI" + + "ON SELECTOR-200VARIATION SELECTOR-201VARIATION SELECTOR-202VARIATION SEL" + + "ECTOR-203VARIATION SELECTOR-204VARIATION SELECTOR-205VARIATION SELECTOR-" + + "206VARIATION SELECTOR-207VARIATION SELECTOR-208VARIATION SELECTOR-209VAR" + + "IATION SELECTOR-210VARIATION SELECTOR-211VARIATION SELECTOR-212VARIATION" + + " SELECTOR-213VARIATION SELECTOR-214VARIATION SELECTOR-215VARIATION SELEC" + + "TOR-216VARIATION SELECTOR-217VARIATION SELECTOR-218VARIATION SELECTOR-21" + + "9VARIATION SELECTOR-220VARIATION SELECTOR-221VARIATION SELECTOR-222VARIA" + + "TION SELECTOR-223VARIATION SELECTOR-224VARIATION SELECTOR-225VARIATION S" + + "ELECTOR-226VARIATION SELECTOR-227VARIATION SELECTOR-228VARIATION SELECTO" + + "R-229VARIATION SELECTOR-230VARIATION SELECTOR-231VARIATION SELECTOR-232V" + + "ARIATION SELECTOR-233VARIATION SELECTOR-234VARIATION SELECTOR-235VARIATI" + + "ON SELECTOR-236VARIATION SELECTOR-237VARIATION SELECTOR-238VARIATION SEL" + + "ECTOR-239VARIATION SELECTOR-240VARIATION SELECTOR-241VARIATION SELECTOR-" + + "242VARIATION SELECTOR-243VARIATION SELECTOR-244VARIATION SELECTOR-245VAR" + + "IATION SELECTOR-246VARIATION SELECTOR-247VARIATION SELECTOR-248VARIATION" + + " SELECTOR-249VARIATION SELECTOR-250VARIATION SELECTOR-251VARIATION SELEC" + + "TOR-252VARIATION SELECTOR-253VARIATION SELECTOR-254VARIATION SELECTOR-25" + + "5VARIATION SELECTOR-256") + +// Total table size 853917 bytes (833KiB); checksum: 2AA2B4F0 diff --git a/vendor/golang.org/x/text/width/gen.go b/vendor/golang.org/x/text/width/gen.go index 03d9f99..092277e 100644 --- a/vendor/golang.org/x/text/width/gen.go +++ b/vendor/golang.org/x/text/width/gen.go @@ -69,7 +69,7 @@ func genTables() { fmt.Fprintf(w, "// Total table size %d bytes (%dKiB)\n", sz, sz/1024) - gen.WriteGoFile(*outputFile, "width", w.Bytes()) + gen.WriteVersionedGoFile(*outputFile, "width", w.Bytes()) } const inverseDataComment = ` diff --git a/vendor/golang.org/x/text/width/kind_string.go b/vendor/golang.org/x/text/width/kind_string.go index ab4fee5..49bfbf7 100644 --- a/vendor/golang.org/x/text/width/kind_string.go +++ b/vendor/golang.org/x/text/width/kind_string.go @@ -1,4 +1,4 @@ -// Code generated by "stringer -type=Kind"; DO NOT EDIT +// Code generated by "stringer -type=Kind"; DO NOT EDIT. package width diff --git a/vendor/golang.org/x/text/width/tables.go b/vendor/golang.org/x/text/width/tables.go deleted file mode 100644 index e21f0b8..0000000 --- a/vendor/golang.org/x/text/width/tables.go +++ /dev/null @@ -1,1284 +0,0 @@ -// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. - -package width - -// UnicodeVersion is the Unicode version from which the tables in this package are derived. -const UnicodeVersion = "9.0.0" - -// 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 *widthTrie) lookup(s []byte) (v uint16, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return widthValues[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 := widthIndex[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 := widthIndex[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 = widthIndex[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 := widthIndex[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 = widthIndex[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 = widthIndex[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 *widthTrie) lookupUnsafe(s []byte) uint16 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return widthValues[c0] - } - i := widthIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = widthIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = widthIndex[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 *widthTrie) lookupString(s string) (v uint16, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return widthValues[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 := widthIndex[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 := widthIndex[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 = widthIndex[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 := widthIndex[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 = widthIndex[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 = widthIndex[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 *widthTrie) lookupStringUnsafe(s string) uint16 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return widthValues[c0] - } - i := widthIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = widthIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = widthIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// widthTrie. Total size: 14080 bytes (13.75 KiB). Checksum: 3b8aeb3dc03667a3. -type widthTrie struct{} - -func newWidthTrie(i int) *widthTrie { - return &widthTrie{} -} - -// lookupValue determines the type of block n and looks up the value for b. -func (t *widthTrie) lookupValue(n uint32, b byte) uint16 { - switch { - default: - return uint16(widthValues[n<<6+uint32(b)]) - } -} - -// widthValues: 99 blocks, 6336 entries, 12672 bytes -// The third block is the zero block. -var widthValues = [6336]uint16{ - // Block 0x0, offset 0x0 - 0x20: 0x6001, 0x21: 0x6002, 0x22: 0x6002, 0x23: 0x6002, - 0x24: 0x6002, 0x25: 0x6002, 0x26: 0x6002, 0x27: 0x6002, 0x28: 0x6002, 0x29: 0x6002, - 0x2a: 0x6002, 0x2b: 0x6002, 0x2c: 0x6002, 0x2d: 0x6002, 0x2e: 0x6002, 0x2f: 0x6002, - 0x30: 0x6002, 0x31: 0x6002, 0x32: 0x6002, 0x33: 0x6002, 0x34: 0x6002, 0x35: 0x6002, - 0x36: 0x6002, 0x37: 0x6002, 0x38: 0x6002, 0x39: 0x6002, 0x3a: 0x6002, 0x3b: 0x6002, - 0x3c: 0x6002, 0x3d: 0x6002, 0x3e: 0x6002, 0x3f: 0x6002, - // Block 0x1, offset 0x40 - 0x40: 0x6003, 0x41: 0x6003, 0x42: 0x6003, 0x43: 0x6003, 0x44: 0x6003, 0x45: 0x6003, - 0x46: 0x6003, 0x47: 0x6003, 0x48: 0x6003, 0x49: 0x6003, 0x4a: 0x6003, 0x4b: 0x6003, - 0x4c: 0x6003, 0x4d: 0x6003, 0x4e: 0x6003, 0x4f: 0x6003, 0x50: 0x6003, 0x51: 0x6003, - 0x52: 0x6003, 0x53: 0x6003, 0x54: 0x6003, 0x55: 0x6003, 0x56: 0x6003, 0x57: 0x6003, - 0x58: 0x6003, 0x59: 0x6003, 0x5a: 0x6003, 0x5b: 0x6003, 0x5c: 0x6003, 0x5d: 0x6003, - 0x5e: 0x6003, 0x5f: 0x6003, 0x60: 0x6004, 0x61: 0x6004, 0x62: 0x6004, 0x63: 0x6004, - 0x64: 0x6004, 0x65: 0x6004, 0x66: 0x6004, 0x67: 0x6004, 0x68: 0x6004, 0x69: 0x6004, - 0x6a: 0x6004, 0x6b: 0x6004, 0x6c: 0x6004, 0x6d: 0x6004, 0x6e: 0x6004, 0x6f: 0x6004, - 0x70: 0x6004, 0x71: 0x6004, 0x72: 0x6004, 0x73: 0x6004, 0x74: 0x6004, 0x75: 0x6004, - 0x76: 0x6004, 0x77: 0x6004, 0x78: 0x6004, 0x79: 0x6004, 0x7a: 0x6004, 0x7b: 0x6004, - 0x7c: 0x6004, 0x7d: 0x6004, 0x7e: 0x6004, - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xe1: 0x2000, 0xe2: 0x6005, 0xe3: 0x6005, - 0xe4: 0x2000, 0xe5: 0x6006, 0xe6: 0x6005, 0xe7: 0x2000, 0xe8: 0x2000, - 0xea: 0x2000, 0xec: 0x6007, 0xed: 0x2000, 0xee: 0x2000, 0xef: 0x6008, - 0xf0: 0x2000, 0xf1: 0x2000, 0xf2: 0x2000, 0xf3: 0x2000, 0xf4: 0x2000, - 0xf6: 0x2000, 0xf7: 0x2000, 0xf8: 0x2000, 0xf9: 0x2000, 0xfa: 0x2000, - 0xfc: 0x2000, 0xfd: 0x2000, 0xfe: 0x2000, 0xff: 0x2000, - // Block 0x4, offset 0x100 - 0x106: 0x2000, - 0x110: 0x2000, - 0x117: 0x2000, - 0x118: 0x2000, - 0x11e: 0x2000, 0x11f: 0x2000, 0x120: 0x2000, 0x121: 0x2000, - 0x126: 0x2000, 0x128: 0x2000, 0x129: 0x2000, - 0x12a: 0x2000, 0x12c: 0x2000, 0x12d: 0x2000, - 0x130: 0x2000, 0x132: 0x2000, 0x133: 0x2000, - 0x137: 0x2000, 0x138: 0x2000, 0x139: 0x2000, 0x13a: 0x2000, - 0x13c: 0x2000, 0x13e: 0x2000, - // Block 0x5, offset 0x140 - 0x141: 0x2000, - 0x151: 0x2000, - 0x153: 0x2000, - 0x15b: 0x2000, - 0x166: 0x2000, 0x167: 0x2000, - 0x16b: 0x2000, - 0x171: 0x2000, 0x172: 0x2000, 0x173: 0x2000, - 0x178: 0x2000, - 0x17f: 0x2000, - // Block 0x6, offset 0x180 - 0x180: 0x2000, 0x181: 0x2000, 0x182: 0x2000, 0x184: 0x2000, - 0x188: 0x2000, 0x189: 0x2000, 0x18a: 0x2000, 0x18b: 0x2000, - 0x18d: 0x2000, - 0x192: 0x2000, 0x193: 0x2000, - 0x1a6: 0x2000, 0x1a7: 0x2000, - 0x1ab: 0x2000, - // Block 0x7, offset 0x1c0 - 0x1ce: 0x2000, 0x1d0: 0x2000, - 0x1d2: 0x2000, 0x1d4: 0x2000, 0x1d6: 0x2000, - 0x1d8: 0x2000, 0x1da: 0x2000, 0x1dc: 0x2000, - // Block 0x8, offset 0x200 - 0x211: 0x2000, - 0x221: 0x2000, - // Block 0x9, offset 0x240 - 0x244: 0x2000, - 0x247: 0x2000, 0x249: 0x2000, 0x24a: 0x2000, 0x24b: 0x2000, - 0x24d: 0x2000, 0x250: 0x2000, - 0x258: 0x2000, 0x259: 0x2000, 0x25a: 0x2000, 0x25b: 0x2000, 0x25d: 0x2000, - 0x25f: 0x2000, - // Block 0xa, offset 0x280 - 0x280: 0x2000, 0x281: 0x2000, 0x282: 0x2000, 0x283: 0x2000, 0x284: 0x2000, 0x285: 0x2000, - 0x286: 0x2000, 0x287: 0x2000, 0x288: 0x2000, 0x289: 0x2000, 0x28a: 0x2000, 0x28b: 0x2000, - 0x28c: 0x2000, 0x28d: 0x2000, 0x28e: 0x2000, 0x28f: 0x2000, 0x290: 0x2000, 0x291: 0x2000, - 0x292: 0x2000, 0x293: 0x2000, 0x294: 0x2000, 0x295: 0x2000, 0x296: 0x2000, 0x297: 0x2000, - 0x298: 0x2000, 0x299: 0x2000, 0x29a: 0x2000, 0x29b: 0x2000, 0x29c: 0x2000, 0x29d: 0x2000, - 0x29e: 0x2000, 0x29f: 0x2000, 0x2a0: 0x2000, 0x2a1: 0x2000, 0x2a2: 0x2000, 0x2a3: 0x2000, - 0x2a4: 0x2000, 0x2a5: 0x2000, 0x2a6: 0x2000, 0x2a7: 0x2000, 0x2a8: 0x2000, 0x2a9: 0x2000, - 0x2aa: 0x2000, 0x2ab: 0x2000, 0x2ac: 0x2000, 0x2ad: 0x2000, 0x2ae: 0x2000, 0x2af: 0x2000, - 0x2b0: 0x2000, 0x2b1: 0x2000, 0x2b2: 0x2000, 0x2b3: 0x2000, 0x2b4: 0x2000, 0x2b5: 0x2000, - 0x2b6: 0x2000, 0x2b7: 0x2000, 0x2b8: 0x2000, 0x2b9: 0x2000, 0x2ba: 0x2000, 0x2bb: 0x2000, - 0x2bc: 0x2000, 0x2bd: 0x2000, 0x2be: 0x2000, 0x2bf: 0x2000, - // Block 0xb, offset 0x2c0 - 0x2c0: 0x2000, 0x2c1: 0x2000, 0x2c2: 0x2000, 0x2c3: 0x2000, 0x2c4: 0x2000, 0x2c5: 0x2000, - 0x2c6: 0x2000, 0x2c7: 0x2000, 0x2c8: 0x2000, 0x2c9: 0x2000, 0x2ca: 0x2000, 0x2cb: 0x2000, - 0x2cc: 0x2000, 0x2cd: 0x2000, 0x2ce: 0x2000, 0x2cf: 0x2000, 0x2d0: 0x2000, 0x2d1: 0x2000, - 0x2d2: 0x2000, 0x2d3: 0x2000, 0x2d4: 0x2000, 0x2d5: 0x2000, 0x2d6: 0x2000, 0x2d7: 0x2000, - 0x2d8: 0x2000, 0x2d9: 0x2000, 0x2da: 0x2000, 0x2db: 0x2000, 0x2dc: 0x2000, 0x2dd: 0x2000, - 0x2de: 0x2000, 0x2df: 0x2000, 0x2e0: 0x2000, 0x2e1: 0x2000, 0x2e2: 0x2000, 0x2e3: 0x2000, - 0x2e4: 0x2000, 0x2e5: 0x2000, 0x2e6: 0x2000, 0x2e7: 0x2000, 0x2e8: 0x2000, 0x2e9: 0x2000, - 0x2ea: 0x2000, 0x2eb: 0x2000, 0x2ec: 0x2000, 0x2ed: 0x2000, 0x2ee: 0x2000, 0x2ef: 0x2000, - // Block 0xc, offset 0x300 - 0x311: 0x2000, - 0x312: 0x2000, 0x313: 0x2000, 0x314: 0x2000, 0x315: 0x2000, 0x316: 0x2000, 0x317: 0x2000, - 0x318: 0x2000, 0x319: 0x2000, 0x31a: 0x2000, 0x31b: 0x2000, 0x31c: 0x2000, 0x31d: 0x2000, - 0x31e: 0x2000, 0x31f: 0x2000, 0x320: 0x2000, 0x321: 0x2000, 0x323: 0x2000, - 0x324: 0x2000, 0x325: 0x2000, 0x326: 0x2000, 0x327: 0x2000, 0x328: 0x2000, 0x329: 0x2000, - 0x331: 0x2000, 0x332: 0x2000, 0x333: 0x2000, 0x334: 0x2000, 0x335: 0x2000, - 0x336: 0x2000, 0x337: 0x2000, 0x338: 0x2000, 0x339: 0x2000, 0x33a: 0x2000, 0x33b: 0x2000, - 0x33c: 0x2000, 0x33d: 0x2000, 0x33e: 0x2000, 0x33f: 0x2000, - // Block 0xd, offset 0x340 - 0x340: 0x2000, 0x341: 0x2000, 0x343: 0x2000, 0x344: 0x2000, 0x345: 0x2000, - 0x346: 0x2000, 0x347: 0x2000, 0x348: 0x2000, 0x349: 0x2000, - // Block 0xe, offset 0x380 - 0x381: 0x2000, - 0x390: 0x2000, 0x391: 0x2000, - 0x392: 0x2000, 0x393: 0x2000, 0x394: 0x2000, 0x395: 0x2000, 0x396: 0x2000, 0x397: 0x2000, - 0x398: 0x2000, 0x399: 0x2000, 0x39a: 0x2000, 0x39b: 0x2000, 0x39c: 0x2000, 0x39d: 0x2000, - 0x39e: 0x2000, 0x39f: 0x2000, 0x3a0: 0x2000, 0x3a1: 0x2000, 0x3a2: 0x2000, 0x3a3: 0x2000, - 0x3a4: 0x2000, 0x3a5: 0x2000, 0x3a6: 0x2000, 0x3a7: 0x2000, 0x3a8: 0x2000, 0x3a9: 0x2000, - 0x3aa: 0x2000, 0x3ab: 0x2000, 0x3ac: 0x2000, 0x3ad: 0x2000, 0x3ae: 0x2000, 0x3af: 0x2000, - 0x3b0: 0x2000, 0x3b1: 0x2000, 0x3b2: 0x2000, 0x3b3: 0x2000, 0x3b4: 0x2000, 0x3b5: 0x2000, - 0x3b6: 0x2000, 0x3b7: 0x2000, 0x3b8: 0x2000, 0x3b9: 0x2000, 0x3ba: 0x2000, 0x3bb: 0x2000, - 0x3bc: 0x2000, 0x3bd: 0x2000, 0x3be: 0x2000, 0x3bf: 0x2000, - // Block 0xf, offset 0x3c0 - 0x3c0: 0x2000, 0x3c1: 0x2000, 0x3c2: 0x2000, 0x3c3: 0x2000, 0x3c4: 0x2000, 0x3c5: 0x2000, - 0x3c6: 0x2000, 0x3c7: 0x2000, 0x3c8: 0x2000, 0x3c9: 0x2000, 0x3ca: 0x2000, 0x3cb: 0x2000, - 0x3cc: 0x2000, 0x3cd: 0x2000, 0x3ce: 0x2000, 0x3cf: 0x2000, 0x3d1: 0x2000, - // Block 0x10, offset 0x400 - 0x400: 0x4000, 0x401: 0x4000, 0x402: 0x4000, 0x403: 0x4000, 0x404: 0x4000, 0x405: 0x4000, - 0x406: 0x4000, 0x407: 0x4000, 0x408: 0x4000, 0x409: 0x4000, 0x40a: 0x4000, 0x40b: 0x4000, - 0x40c: 0x4000, 0x40d: 0x4000, 0x40e: 0x4000, 0x40f: 0x4000, 0x410: 0x4000, 0x411: 0x4000, - 0x412: 0x4000, 0x413: 0x4000, 0x414: 0x4000, 0x415: 0x4000, 0x416: 0x4000, 0x417: 0x4000, - 0x418: 0x4000, 0x419: 0x4000, 0x41a: 0x4000, 0x41b: 0x4000, 0x41c: 0x4000, 0x41d: 0x4000, - 0x41e: 0x4000, 0x41f: 0x4000, 0x420: 0x4000, 0x421: 0x4000, 0x422: 0x4000, 0x423: 0x4000, - 0x424: 0x4000, 0x425: 0x4000, 0x426: 0x4000, 0x427: 0x4000, 0x428: 0x4000, 0x429: 0x4000, - 0x42a: 0x4000, 0x42b: 0x4000, 0x42c: 0x4000, 0x42d: 0x4000, 0x42e: 0x4000, 0x42f: 0x4000, - 0x430: 0x4000, 0x431: 0x4000, 0x432: 0x4000, 0x433: 0x4000, 0x434: 0x4000, 0x435: 0x4000, - 0x436: 0x4000, 0x437: 0x4000, 0x438: 0x4000, 0x439: 0x4000, 0x43a: 0x4000, 0x43b: 0x4000, - 0x43c: 0x4000, 0x43d: 0x4000, 0x43e: 0x4000, 0x43f: 0x4000, - // Block 0x11, offset 0x440 - 0x440: 0x4000, 0x441: 0x4000, 0x442: 0x4000, 0x443: 0x4000, 0x444: 0x4000, 0x445: 0x4000, - 0x446: 0x4000, 0x447: 0x4000, 0x448: 0x4000, 0x449: 0x4000, 0x44a: 0x4000, 0x44b: 0x4000, - 0x44c: 0x4000, 0x44d: 0x4000, 0x44e: 0x4000, 0x44f: 0x4000, 0x450: 0x4000, 0x451: 0x4000, - 0x452: 0x4000, 0x453: 0x4000, 0x454: 0x4000, 0x455: 0x4000, 0x456: 0x4000, 0x457: 0x4000, - 0x458: 0x4000, 0x459: 0x4000, 0x45a: 0x4000, 0x45b: 0x4000, 0x45c: 0x4000, 0x45d: 0x4000, - 0x45e: 0x4000, 0x45f: 0x4000, - // Block 0x12, offset 0x480 - 0x490: 0x2000, - 0x493: 0x2000, 0x494: 0x2000, 0x495: 0x2000, 0x496: 0x2000, - 0x498: 0x2000, 0x499: 0x2000, 0x49c: 0x2000, 0x49d: 0x2000, - 0x4a0: 0x2000, 0x4a1: 0x2000, 0x4a2: 0x2000, - 0x4a4: 0x2000, 0x4a5: 0x2000, 0x4a6: 0x2000, 0x4a7: 0x2000, - 0x4b0: 0x2000, 0x4b2: 0x2000, 0x4b3: 0x2000, 0x4b5: 0x2000, - 0x4bb: 0x2000, - 0x4be: 0x2000, - // Block 0x13, offset 0x4c0 - 0x4f4: 0x2000, - 0x4ff: 0x2000, - // Block 0x14, offset 0x500 - 0x501: 0x2000, 0x502: 0x2000, 0x503: 0x2000, 0x504: 0x2000, - 0x529: 0xa009, - 0x52c: 0x2000, - // Block 0x15, offset 0x540 - 0x543: 0x2000, 0x545: 0x2000, - 0x549: 0x2000, - 0x553: 0x2000, 0x556: 0x2000, - 0x561: 0x2000, 0x562: 0x2000, - 0x566: 0x2000, - 0x56b: 0x2000, - // Block 0x16, offset 0x580 - 0x593: 0x2000, 0x594: 0x2000, - 0x59b: 0x2000, 0x59c: 0x2000, 0x59d: 0x2000, - 0x59e: 0x2000, 0x5a0: 0x2000, 0x5a1: 0x2000, 0x5a2: 0x2000, 0x5a3: 0x2000, - 0x5a4: 0x2000, 0x5a5: 0x2000, 0x5a6: 0x2000, 0x5a7: 0x2000, 0x5a8: 0x2000, 0x5a9: 0x2000, - 0x5aa: 0x2000, 0x5ab: 0x2000, - 0x5b0: 0x2000, 0x5b1: 0x2000, 0x5b2: 0x2000, 0x5b3: 0x2000, 0x5b4: 0x2000, 0x5b5: 0x2000, - 0x5b6: 0x2000, 0x5b7: 0x2000, 0x5b8: 0x2000, 0x5b9: 0x2000, - // Block 0x17, offset 0x5c0 - 0x5c9: 0x2000, - 0x5d0: 0x200a, 0x5d1: 0x200b, - 0x5d2: 0x200a, 0x5d3: 0x200c, 0x5d4: 0x2000, 0x5d5: 0x2000, 0x5d6: 0x2000, 0x5d7: 0x2000, - 0x5d8: 0x2000, 0x5d9: 0x2000, - 0x5f8: 0x2000, 0x5f9: 0x2000, - // Block 0x18, offset 0x600 - 0x612: 0x2000, 0x614: 0x2000, - 0x627: 0x2000, - // Block 0x19, offset 0x640 - 0x640: 0x2000, 0x642: 0x2000, 0x643: 0x2000, - 0x647: 0x2000, 0x648: 0x2000, 0x64b: 0x2000, - 0x64f: 0x2000, 0x651: 0x2000, - 0x655: 0x2000, - 0x65a: 0x2000, 0x65d: 0x2000, - 0x65e: 0x2000, 0x65f: 0x2000, 0x660: 0x2000, 0x663: 0x2000, - 0x665: 0x2000, 0x667: 0x2000, 0x668: 0x2000, 0x669: 0x2000, - 0x66a: 0x2000, 0x66b: 0x2000, 0x66c: 0x2000, 0x66e: 0x2000, - 0x674: 0x2000, 0x675: 0x2000, - 0x676: 0x2000, 0x677: 0x2000, - 0x67c: 0x2000, 0x67d: 0x2000, - // Block 0x1a, offset 0x680 - 0x688: 0x2000, - 0x68c: 0x2000, - 0x692: 0x2000, - 0x6a0: 0x2000, 0x6a1: 0x2000, - 0x6a4: 0x2000, 0x6a5: 0x2000, 0x6a6: 0x2000, 0x6a7: 0x2000, - 0x6aa: 0x2000, 0x6ab: 0x2000, 0x6ae: 0x2000, 0x6af: 0x2000, - // Block 0x1b, offset 0x6c0 - 0x6c2: 0x2000, 0x6c3: 0x2000, - 0x6c6: 0x2000, 0x6c7: 0x2000, - 0x6d5: 0x2000, - 0x6d9: 0x2000, - 0x6e5: 0x2000, - 0x6ff: 0x2000, - // Block 0x1c, offset 0x700 - 0x712: 0x2000, - 0x71a: 0x4000, 0x71b: 0x4000, - 0x729: 0x4000, - 0x72a: 0x4000, - // Block 0x1d, offset 0x740 - 0x769: 0x4000, - 0x76a: 0x4000, 0x76b: 0x4000, 0x76c: 0x4000, - 0x770: 0x4000, 0x773: 0x4000, - // Block 0x1e, offset 0x780 - 0x7a0: 0x2000, 0x7a1: 0x2000, 0x7a2: 0x2000, 0x7a3: 0x2000, - 0x7a4: 0x2000, 0x7a5: 0x2000, 0x7a6: 0x2000, 0x7a7: 0x2000, 0x7a8: 0x2000, 0x7a9: 0x2000, - 0x7aa: 0x2000, 0x7ab: 0x2000, 0x7ac: 0x2000, 0x7ad: 0x2000, 0x7ae: 0x2000, 0x7af: 0x2000, - 0x7b0: 0x2000, 0x7b1: 0x2000, 0x7b2: 0x2000, 0x7b3: 0x2000, 0x7b4: 0x2000, 0x7b5: 0x2000, - 0x7b6: 0x2000, 0x7b7: 0x2000, 0x7b8: 0x2000, 0x7b9: 0x2000, 0x7ba: 0x2000, 0x7bb: 0x2000, - 0x7bc: 0x2000, 0x7bd: 0x2000, 0x7be: 0x2000, 0x7bf: 0x2000, - // Block 0x1f, offset 0x7c0 - 0x7c0: 0x2000, 0x7c1: 0x2000, 0x7c2: 0x2000, 0x7c3: 0x2000, 0x7c4: 0x2000, 0x7c5: 0x2000, - 0x7c6: 0x2000, 0x7c7: 0x2000, 0x7c8: 0x2000, 0x7c9: 0x2000, 0x7ca: 0x2000, 0x7cb: 0x2000, - 0x7cc: 0x2000, 0x7cd: 0x2000, 0x7ce: 0x2000, 0x7cf: 0x2000, 0x7d0: 0x2000, 0x7d1: 0x2000, - 0x7d2: 0x2000, 0x7d3: 0x2000, 0x7d4: 0x2000, 0x7d5: 0x2000, 0x7d6: 0x2000, 0x7d7: 0x2000, - 0x7d8: 0x2000, 0x7d9: 0x2000, 0x7da: 0x2000, 0x7db: 0x2000, 0x7dc: 0x2000, 0x7dd: 0x2000, - 0x7de: 0x2000, 0x7df: 0x2000, 0x7e0: 0x2000, 0x7e1: 0x2000, 0x7e2: 0x2000, 0x7e3: 0x2000, - 0x7e4: 0x2000, 0x7e5: 0x2000, 0x7e6: 0x2000, 0x7e7: 0x2000, 0x7e8: 0x2000, 0x7e9: 0x2000, - 0x7eb: 0x2000, 0x7ec: 0x2000, 0x7ed: 0x2000, 0x7ee: 0x2000, 0x7ef: 0x2000, - 0x7f0: 0x2000, 0x7f1: 0x2000, 0x7f2: 0x2000, 0x7f3: 0x2000, 0x7f4: 0x2000, 0x7f5: 0x2000, - 0x7f6: 0x2000, 0x7f7: 0x2000, 0x7f8: 0x2000, 0x7f9: 0x2000, 0x7fa: 0x2000, 0x7fb: 0x2000, - 0x7fc: 0x2000, 0x7fd: 0x2000, 0x7fe: 0x2000, 0x7ff: 0x2000, - // Block 0x20, offset 0x800 - 0x800: 0x2000, 0x801: 0x2000, 0x802: 0x200d, 0x803: 0x2000, 0x804: 0x2000, 0x805: 0x2000, - 0x806: 0x2000, 0x807: 0x2000, 0x808: 0x2000, 0x809: 0x2000, 0x80a: 0x2000, 0x80b: 0x2000, - 0x80c: 0x2000, 0x80d: 0x2000, 0x80e: 0x2000, 0x80f: 0x2000, 0x810: 0x2000, 0x811: 0x2000, - 0x812: 0x2000, 0x813: 0x2000, 0x814: 0x2000, 0x815: 0x2000, 0x816: 0x2000, 0x817: 0x2000, - 0x818: 0x2000, 0x819: 0x2000, 0x81a: 0x2000, 0x81b: 0x2000, 0x81c: 0x2000, 0x81d: 0x2000, - 0x81e: 0x2000, 0x81f: 0x2000, 0x820: 0x2000, 0x821: 0x2000, 0x822: 0x2000, 0x823: 0x2000, - 0x824: 0x2000, 0x825: 0x2000, 0x826: 0x2000, 0x827: 0x2000, 0x828: 0x2000, 0x829: 0x2000, - 0x82a: 0x2000, 0x82b: 0x2000, 0x82c: 0x2000, 0x82d: 0x2000, 0x82e: 0x2000, 0x82f: 0x2000, - 0x830: 0x2000, 0x831: 0x2000, 0x832: 0x2000, 0x833: 0x2000, 0x834: 0x2000, 0x835: 0x2000, - 0x836: 0x2000, 0x837: 0x2000, 0x838: 0x2000, 0x839: 0x2000, 0x83a: 0x2000, 0x83b: 0x2000, - 0x83c: 0x2000, 0x83d: 0x2000, 0x83e: 0x2000, 0x83f: 0x2000, - // Block 0x21, offset 0x840 - 0x840: 0x2000, 0x841: 0x2000, 0x842: 0x2000, 0x843: 0x2000, 0x844: 0x2000, 0x845: 0x2000, - 0x846: 0x2000, 0x847: 0x2000, 0x848: 0x2000, 0x849: 0x2000, 0x84a: 0x2000, 0x84b: 0x2000, - 0x850: 0x2000, 0x851: 0x2000, - 0x852: 0x2000, 0x853: 0x2000, 0x854: 0x2000, 0x855: 0x2000, 0x856: 0x2000, 0x857: 0x2000, - 0x858: 0x2000, 0x859: 0x2000, 0x85a: 0x2000, 0x85b: 0x2000, 0x85c: 0x2000, 0x85d: 0x2000, - 0x85e: 0x2000, 0x85f: 0x2000, 0x860: 0x2000, 0x861: 0x2000, 0x862: 0x2000, 0x863: 0x2000, - 0x864: 0x2000, 0x865: 0x2000, 0x866: 0x2000, 0x867: 0x2000, 0x868: 0x2000, 0x869: 0x2000, - 0x86a: 0x2000, 0x86b: 0x2000, 0x86c: 0x2000, 0x86d: 0x2000, 0x86e: 0x2000, 0x86f: 0x2000, - 0x870: 0x2000, 0x871: 0x2000, 0x872: 0x2000, 0x873: 0x2000, - // Block 0x22, offset 0x880 - 0x880: 0x2000, 0x881: 0x2000, 0x882: 0x2000, 0x883: 0x2000, 0x884: 0x2000, 0x885: 0x2000, - 0x886: 0x2000, 0x887: 0x2000, 0x888: 0x2000, 0x889: 0x2000, 0x88a: 0x2000, 0x88b: 0x2000, - 0x88c: 0x2000, 0x88d: 0x2000, 0x88e: 0x2000, 0x88f: 0x2000, - 0x892: 0x2000, 0x893: 0x2000, 0x894: 0x2000, 0x895: 0x2000, - 0x8a0: 0x200e, 0x8a1: 0x2000, 0x8a3: 0x2000, - 0x8a4: 0x2000, 0x8a5: 0x2000, 0x8a6: 0x2000, 0x8a7: 0x2000, 0x8a8: 0x2000, 0x8a9: 0x2000, - 0x8b2: 0x2000, 0x8b3: 0x2000, - 0x8b6: 0x2000, 0x8b7: 0x2000, - 0x8bc: 0x2000, 0x8bd: 0x2000, - // Block 0x23, offset 0x8c0 - 0x8c0: 0x2000, 0x8c1: 0x2000, - 0x8c6: 0x2000, 0x8c7: 0x2000, 0x8c8: 0x2000, 0x8cb: 0x200f, - 0x8ce: 0x2000, 0x8cf: 0x2000, 0x8d0: 0x2000, 0x8d1: 0x2000, - 0x8e2: 0x2000, 0x8e3: 0x2000, - 0x8e4: 0x2000, 0x8e5: 0x2000, - 0x8ef: 0x2000, - 0x8fd: 0x4000, 0x8fe: 0x4000, - // Block 0x24, offset 0x900 - 0x905: 0x2000, - 0x906: 0x2000, 0x909: 0x2000, - 0x90e: 0x2000, 0x90f: 0x2000, - 0x914: 0x4000, 0x915: 0x4000, - 0x91c: 0x2000, - 0x91e: 0x2000, - // Block 0x25, offset 0x940 - 0x940: 0x2000, 0x942: 0x2000, - 0x948: 0x4000, 0x949: 0x4000, 0x94a: 0x4000, 0x94b: 0x4000, - 0x94c: 0x4000, 0x94d: 0x4000, 0x94e: 0x4000, 0x94f: 0x4000, 0x950: 0x4000, 0x951: 0x4000, - 0x952: 0x4000, 0x953: 0x4000, - 0x960: 0x2000, 0x961: 0x2000, 0x963: 0x2000, - 0x964: 0x2000, 0x965: 0x2000, 0x967: 0x2000, 0x968: 0x2000, 0x969: 0x2000, - 0x96a: 0x2000, 0x96c: 0x2000, 0x96d: 0x2000, 0x96f: 0x2000, - 0x97f: 0x4000, - // Block 0x26, offset 0x980 - 0x993: 0x4000, - 0x99e: 0x2000, 0x99f: 0x2000, 0x9a1: 0x4000, - 0x9aa: 0x4000, 0x9ab: 0x4000, - 0x9bd: 0x4000, 0x9be: 0x4000, 0x9bf: 0x2000, - // Block 0x27, offset 0x9c0 - 0x9c4: 0x4000, 0x9c5: 0x4000, - 0x9c6: 0x2000, 0x9c7: 0x2000, 0x9c8: 0x2000, 0x9c9: 0x2000, 0x9ca: 0x2000, 0x9cb: 0x2000, - 0x9cc: 0x2000, 0x9cd: 0x2000, 0x9ce: 0x4000, 0x9cf: 0x2000, 0x9d0: 0x2000, 0x9d1: 0x2000, - 0x9d2: 0x2000, 0x9d3: 0x2000, 0x9d4: 0x4000, 0x9d5: 0x2000, 0x9d6: 0x2000, 0x9d7: 0x2000, - 0x9d8: 0x2000, 0x9d9: 0x2000, 0x9da: 0x2000, 0x9db: 0x2000, 0x9dc: 0x2000, 0x9dd: 0x2000, - 0x9de: 0x2000, 0x9df: 0x2000, 0x9e0: 0x2000, 0x9e1: 0x2000, 0x9e3: 0x2000, - 0x9e8: 0x2000, 0x9e9: 0x2000, - 0x9ea: 0x4000, 0x9eb: 0x2000, 0x9ec: 0x2000, 0x9ed: 0x2000, 0x9ee: 0x2000, 0x9ef: 0x2000, - 0x9f0: 0x2000, 0x9f1: 0x2000, 0x9f2: 0x4000, 0x9f3: 0x4000, 0x9f4: 0x2000, 0x9f5: 0x4000, - 0x9f6: 0x2000, 0x9f7: 0x2000, 0x9f8: 0x2000, 0x9f9: 0x2000, 0x9fa: 0x4000, 0x9fb: 0x2000, - 0x9fc: 0x2000, 0x9fd: 0x4000, 0x9fe: 0x2000, 0x9ff: 0x2000, - // Block 0x28, offset 0xa00 - 0xa05: 0x4000, - 0xa0a: 0x4000, 0xa0b: 0x4000, - 0xa28: 0x4000, - 0xa3d: 0x2000, - // Block 0x29, offset 0xa40 - 0xa4c: 0x4000, 0xa4e: 0x4000, - 0xa53: 0x4000, 0xa54: 0x4000, 0xa55: 0x4000, 0xa57: 0x4000, - 0xa76: 0x2000, 0xa77: 0x2000, 0xa78: 0x2000, 0xa79: 0x2000, 0xa7a: 0x2000, 0xa7b: 0x2000, - 0xa7c: 0x2000, 0xa7d: 0x2000, 0xa7e: 0x2000, 0xa7f: 0x2000, - // Block 0x2a, offset 0xa80 - 0xa95: 0x4000, 0xa96: 0x4000, 0xa97: 0x4000, - 0xab0: 0x4000, - 0xabf: 0x4000, - // Block 0x2b, offset 0xac0 - 0xae6: 0x6000, 0xae7: 0x6000, 0xae8: 0x6000, 0xae9: 0x6000, - 0xaea: 0x6000, 0xaeb: 0x6000, 0xaec: 0x6000, 0xaed: 0x6000, - // Block 0x2c, offset 0xb00 - 0xb05: 0x6010, - 0xb06: 0x6011, - // Block 0x2d, offset 0xb40 - 0xb5b: 0x4000, 0xb5c: 0x4000, - // Block 0x2e, offset 0xb80 - 0xb90: 0x4000, - 0xb95: 0x4000, 0xb96: 0x2000, 0xb97: 0x2000, - 0xb98: 0x2000, 0xb99: 0x2000, - // Block 0x2f, offset 0xbc0 - 0xbc0: 0x4000, 0xbc1: 0x4000, 0xbc2: 0x4000, 0xbc3: 0x4000, 0xbc4: 0x4000, 0xbc5: 0x4000, - 0xbc6: 0x4000, 0xbc7: 0x4000, 0xbc8: 0x4000, 0xbc9: 0x4000, 0xbca: 0x4000, 0xbcb: 0x4000, - 0xbcc: 0x4000, 0xbcd: 0x4000, 0xbce: 0x4000, 0xbcf: 0x4000, 0xbd0: 0x4000, 0xbd1: 0x4000, - 0xbd2: 0x4000, 0xbd3: 0x4000, 0xbd4: 0x4000, 0xbd5: 0x4000, 0xbd6: 0x4000, 0xbd7: 0x4000, - 0xbd8: 0x4000, 0xbd9: 0x4000, 0xbdb: 0x4000, 0xbdc: 0x4000, 0xbdd: 0x4000, - 0xbde: 0x4000, 0xbdf: 0x4000, 0xbe0: 0x4000, 0xbe1: 0x4000, 0xbe2: 0x4000, 0xbe3: 0x4000, - 0xbe4: 0x4000, 0xbe5: 0x4000, 0xbe6: 0x4000, 0xbe7: 0x4000, 0xbe8: 0x4000, 0xbe9: 0x4000, - 0xbea: 0x4000, 0xbeb: 0x4000, 0xbec: 0x4000, 0xbed: 0x4000, 0xbee: 0x4000, 0xbef: 0x4000, - 0xbf0: 0x4000, 0xbf1: 0x4000, 0xbf2: 0x4000, 0xbf3: 0x4000, 0xbf4: 0x4000, 0xbf5: 0x4000, - 0xbf6: 0x4000, 0xbf7: 0x4000, 0xbf8: 0x4000, 0xbf9: 0x4000, 0xbfa: 0x4000, 0xbfb: 0x4000, - 0xbfc: 0x4000, 0xbfd: 0x4000, 0xbfe: 0x4000, 0xbff: 0x4000, - // Block 0x30, offset 0xc00 - 0xc00: 0x4000, 0xc01: 0x4000, 0xc02: 0x4000, 0xc03: 0x4000, 0xc04: 0x4000, 0xc05: 0x4000, - 0xc06: 0x4000, 0xc07: 0x4000, 0xc08: 0x4000, 0xc09: 0x4000, 0xc0a: 0x4000, 0xc0b: 0x4000, - 0xc0c: 0x4000, 0xc0d: 0x4000, 0xc0e: 0x4000, 0xc0f: 0x4000, 0xc10: 0x4000, 0xc11: 0x4000, - 0xc12: 0x4000, 0xc13: 0x4000, 0xc14: 0x4000, 0xc15: 0x4000, 0xc16: 0x4000, 0xc17: 0x4000, - 0xc18: 0x4000, 0xc19: 0x4000, 0xc1a: 0x4000, 0xc1b: 0x4000, 0xc1c: 0x4000, 0xc1d: 0x4000, - 0xc1e: 0x4000, 0xc1f: 0x4000, 0xc20: 0x4000, 0xc21: 0x4000, 0xc22: 0x4000, 0xc23: 0x4000, - 0xc24: 0x4000, 0xc25: 0x4000, 0xc26: 0x4000, 0xc27: 0x4000, 0xc28: 0x4000, 0xc29: 0x4000, - 0xc2a: 0x4000, 0xc2b: 0x4000, 0xc2c: 0x4000, 0xc2d: 0x4000, 0xc2e: 0x4000, 0xc2f: 0x4000, - 0xc30: 0x4000, 0xc31: 0x4000, 0xc32: 0x4000, 0xc33: 0x4000, - // Block 0x31, offset 0xc40 - 0xc40: 0x4000, 0xc41: 0x4000, 0xc42: 0x4000, 0xc43: 0x4000, 0xc44: 0x4000, 0xc45: 0x4000, - 0xc46: 0x4000, 0xc47: 0x4000, 0xc48: 0x4000, 0xc49: 0x4000, 0xc4a: 0x4000, 0xc4b: 0x4000, - 0xc4c: 0x4000, 0xc4d: 0x4000, 0xc4e: 0x4000, 0xc4f: 0x4000, 0xc50: 0x4000, 0xc51: 0x4000, - 0xc52: 0x4000, 0xc53: 0x4000, 0xc54: 0x4000, 0xc55: 0x4000, - 0xc70: 0x4000, 0xc71: 0x4000, 0xc72: 0x4000, 0xc73: 0x4000, 0xc74: 0x4000, 0xc75: 0x4000, - 0xc76: 0x4000, 0xc77: 0x4000, 0xc78: 0x4000, 0xc79: 0x4000, 0xc7a: 0x4000, 0xc7b: 0x4000, - // Block 0x32, offset 0xc80 - 0xc80: 0x9012, 0xc81: 0x4013, 0xc82: 0x4014, 0xc83: 0x4000, 0xc84: 0x4000, 0xc85: 0x4000, - 0xc86: 0x4000, 0xc87: 0x4000, 0xc88: 0x4000, 0xc89: 0x4000, 0xc8a: 0x4000, 0xc8b: 0x4000, - 0xc8c: 0x4015, 0xc8d: 0x4015, 0xc8e: 0x4000, 0xc8f: 0x4000, 0xc90: 0x4000, 0xc91: 0x4000, - 0xc92: 0x4000, 0xc93: 0x4000, 0xc94: 0x4000, 0xc95: 0x4000, 0xc96: 0x4000, 0xc97: 0x4000, - 0xc98: 0x4000, 0xc99: 0x4000, 0xc9a: 0x4000, 0xc9b: 0x4000, 0xc9c: 0x4000, 0xc9d: 0x4000, - 0xc9e: 0x4000, 0xc9f: 0x4000, 0xca0: 0x4000, 0xca1: 0x4000, 0xca2: 0x4000, 0xca3: 0x4000, - 0xca4: 0x4000, 0xca5: 0x4000, 0xca6: 0x4000, 0xca7: 0x4000, 0xca8: 0x4000, 0xca9: 0x4000, - 0xcaa: 0x4000, 0xcab: 0x4000, 0xcac: 0x4000, 0xcad: 0x4000, 0xcae: 0x4000, 0xcaf: 0x4000, - 0xcb0: 0x4000, 0xcb1: 0x4000, 0xcb2: 0x4000, 0xcb3: 0x4000, 0xcb4: 0x4000, 0xcb5: 0x4000, - 0xcb6: 0x4000, 0xcb7: 0x4000, 0xcb8: 0x4000, 0xcb9: 0x4000, 0xcba: 0x4000, 0xcbb: 0x4000, - 0xcbc: 0x4000, 0xcbd: 0x4000, 0xcbe: 0x4000, - // Block 0x33, offset 0xcc0 - 0xcc1: 0x4000, 0xcc2: 0x4000, 0xcc3: 0x4000, 0xcc4: 0x4000, 0xcc5: 0x4000, - 0xcc6: 0x4000, 0xcc7: 0x4000, 0xcc8: 0x4000, 0xcc9: 0x4000, 0xcca: 0x4000, 0xccb: 0x4000, - 0xccc: 0x4000, 0xccd: 0x4000, 0xcce: 0x4000, 0xccf: 0x4000, 0xcd0: 0x4000, 0xcd1: 0x4000, - 0xcd2: 0x4000, 0xcd3: 0x4000, 0xcd4: 0x4000, 0xcd5: 0x4000, 0xcd6: 0x4000, 0xcd7: 0x4000, - 0xcd8: 0x4000, 0xcd9: 0x4000, 0xcda: 0x4000, 0xcdb: 0x4000, 0xcdc: 0x4000, 0xcdd: 0x4000, - 0xcde: 0x4000, 0xcdf: 0x4000, 0xce0: 0x4000, 0xce1: 0x4000, 0xce2: 0x4000, 0xce3: 0x4000, - 0xce4: 0x4000, 0xce5: 0x4000, 0xce6: 0x4000, 0xce7: 0x4000, 0xce8: 0x4000, 0xce9: 0x4000, - 0xcea: 0x4000, 0xceb: 0x4000, 0xcec: 0x4000, 0xced: 0x4000, 0xcee: 0x4000, 0xcef: 0x4000, - 0xcf0: 0x4000, 0xcf1: 0x4000, 0xcf2: 0x4000, 0xcf3: 0x4000, 0xcf4: 0x4000, 0xcf5: 0x4000, - 0xcf6: 0x4000, 0xcf7: 0x4000, 0xcf8: 0x4000, 0xcf9: 0x4000, 0xcfa: 0x4000, 0xcfb: 0x4000, - 0xcfc: 0x4000, 0xcfd: 0x4000, 0xcfe: 0x4000, 0xcff: 0x4000, - // Block 0x34, offset 0xd00 - 0xd00: 0x4000, 0xd01: 0x4000, 0xd02: 0x4000, 0xd03: 0x4000, 0xd04: 0x4000, 0xd05: 0x4000, - 0xd06: 0x4000, 0xd07: 0x4000, 0xd08: 0x4000, 0xd09: 0x4000, 0xd0a: 0x4000, 0xd0b: 0x4000, - 0xd0c: 0x4000, 0xd0d: 0x4000, 0xd0e: 0x4000, 0xd0f: 0x4000, 0xd10: 0x4000, 0xd11: 0x4000, - 0xd12: 0x4000, 0xd13: 0x4000, 0xd14: 0x4000, 0xd15: 0x4000, 0xd16: 0x4000, - 0xd19: 0x4016, 0xd1a: 0x4017, 0xd1b: 0x4000, 0xd1c: 0x4000, 0xd1d: 0x4000, - 0xd1e: 0x4000, 0xd1f: 0x4000, 0xd20: 0x4000, 0xd21: 0x4018, 0xd22: 0x4019, 0xd23: 0x401a, - 0xd24: 0x401b, 0xd25: 0x401c, 0xd26: 0x401d, 0xd27: 0x401e, 0xd28: 0x401f, 0xd29: 0x4020, - 0xd2a: 0x4021, 0xd2b: 0x4022, 0xd2c: 0x4000, 0xd2d: 0x4010, 0xd2e: 0x4000, 0xd2f: 0x4023, - 0xd30: 0x4000, 0xd31: 0x4024, 0xd32: 0x4000, 0xd33: 0x4025, 0xd34: 0x4000, 0xd35: 0x4026, - 0xd36: 0x4000, 0xd37: 0x401a, 0xd38: 0x4000, 0xd39: 0x4027, 0xd3a: 0x4000, 0xd3b: 0x4028, - 0xd3c: 0x4000, 0xd3d: 0x4020, 0xd3e: 0x4000, 0xd3f: 0x4029, - // Block 0x35, offset 0xd40 - 0xd40: 0x4000, 0xd41: 0x402a, 0xd42: 0x4000, 0xd43: 0x402b, 0xd44: 0x402c, 0xd45: 0x4000, - 0xd46: 0x4017, 0xd47: 0x4000, 0xd48: 0x402d, 0xd49: 0x4000, 0xd4a: 0x402e, 0xd4b: 0x402f, - 0xd4c: 0x4030, 0xd4d: 0x4017, 0xd4e: 0x4016, 0xd4f: 0x4017, 0xd50: 0x4000, 0xd51: 0x4000, - 0xd52: 0x4031, 0xd53: 0x4000, 0xd54: 0x4000, 0xd55: 0x4031, 0xd56: 0x4000, 0xd57: 0x4000, - 0xd58: 0x4032, 0xd59: 0x4000, 0xd5a: 0x4000, 0xd5b: 0x4032, 0xd5c: 0x4000, 0xd5d: 0x4000, - 0xd5e: 0x4033, 0xd5f: 0x402e, 0xd60: 0x4034, 0xd61: 0x4035, 0xd62: 0x4034, 0xd63: 0x4036, - 0xd64: 0x4037, 0xd65: 0x4024, 0xd66: 0x4035, 0xd67: 0x4025, 0xd68: 0x4038, 0xd69: 0x4038, - 0xd6a: 0x4039, 0xd6b: 0x4039, 0xd6c: 0x403a, 0xd6d: 0x403a, 0xd6e: 0x4000, 0xd6f: 0x4035, - 0xd70: 0x4000, 0xd71: 0x4000, 0xd72: 0x403b, 0xd73: 0x403c, 0xd74: 0x4000, 0xd75: 0x4000, - 0xd76: 0x4000, 0xd77: 0x4000, 0xd78: 0x4000, 0xd79: 0x4000, 0xd7a: 0x4000, 0xd7b: 0x403d, - 0xd7c: 0x401c, 0xd7d: 0x4000, 0xd7e: 0x4000, 0xd7f: 0x4000, - // Block 0x36, offset 0xd80 - 0xd85: 0x4000, - 0xd86: 0x4000, 0xd87: 0x4000, 0xd88: 0x4000, 0xd89: 0x4000, 0xd8a: 0x4000, 0xd8b: 0x4000, - 0xd8c: 0x4000, 0xd8d: 0x4000, 0xd8e: 0x4000, 0xd8f: 0x4000, 0xd90: 0x4000, 0xd91: 0x4000, - 0xd92: 0x4000, 0xd93: 0x4000, 0xd94: 0x4000, 0xd95: 0x4000, 0xd96: 0x4000, 0xd97: 0x4000, - 0xd98: 0x4000, 0xd99: 0x4000, 0xd9a: 0x4000, 0xd9b: 0x4000, 0xd9c: 0x4000, 0xd9d: 0x4000, - 0xd9e: 0x4000, 0xd9f: 0x4000, 0xda0: 0x4000, 0xda1: 0x4000, 0xda2: 0x4000, 0xda3: 0x4000, - 0xda4: 0x4000, 0xda5: 0x4000, 0xda6: 0x4000, 0xda7: 0x4000, 0xda8: 0x4000, 0xda9: 0x4000, - 0xdaa: 0x4000, 0xdab: 0x4000, 0xdac: 0x4000, 0xdad: 0x4000, - 0xdb1: 0x403e, 0xdb2: 0x403e, 0xdb3: 0x403e, 0xdb4: 0x403e, 0xdb5: 0x403e, - 0xdb6: 0x403e, 0xdb7: 0x403e, 0xdb8: 0x403e, 0xdb9: 0x403e, 0xdba: 0x403e, 0xdbb: 0x403e, - 0xdbc: 0x403e, 0xdbd: 0x403e, 0xdbe: 0x403e, 0xdbf: 0x403e, - // Block 0x37, offset 0xdc0 - 0xdc0: 0x4037, 0xdc1: 0x4037, 0xdc2: 0x4037, 0xdc3: 0x4037, 0xdc4: 0x4037, 0xdc5: 0x4037, - 0xdc6: 0x4037, 0xdc7: 0x4037, 0xdc8: 0x4037, 0xdc9: 0x4037, 0xdca: 0x4037, 0xdcb: 0x4037, - 0xdcc: 0x4037, 0xdcd: 0x4037, 0xdce: 0x4037, 0xdcf: 0x400e, 0xdd0: 0x403f, 0xdd1: 0x4040, - 0xdd2: 0x4041, 0xdd3: 0x4040, 0xdd4: 0x403f, 0xdd5: 0x4042, 0xdd6: 0x4043, 0xdd7: 0x4044, - 0xdd8: 0x4040, 0xdd9: 0x4041, 0xdda: 0x4040, 0xddb: 0x4045, 0xddc: 0x4009, 0xddd: 0x4045, - 0xdde: 0x4046, 0xddf: 0x4045, 0xde0: 0x4047, 0xde1: 0x400b, 0xde2: 0x400a, 0xde3: 0x400c, - 0xde4: 0x4048, 0xde5: 0x4000, 0xde6: 0x4000, 0xde7: 0x4000, 0xde8: 0x4000, 0xde9: 0x4000, - 0xdea: 0x4000, 0xdeb: 0x4000, 0xdec: 0x4000, 0xded: 0x4000, 0xdee: 0x4000, 0xdef: 0x4000, - 0xdf0: 0x4000, 0xdf1: 0x4000, 0xdf2: 0x4000, 0xdf3: 0x4000, 0xdf4: 0x4000, 0xdf5: 0x4000, - 0xdf6: 0x4000, 0xdf7: 0x4000, 0xdf8: 0x4000, 0xdf9: 0x4000, 0xdfa: 0x4000, 0xdfb: 0x4000, - 0xdfc: 0x4000, 0xdfd: 0x4000, 0xdfe: 0x4000, 0xdff: 0x4000, - // Block 0x38, offset 0xe00 - 0xe00: 0x4000, 0xe01: 0x4000, 0xe02: 0x4000, 0xe03: 0x4000, 0xe04: 0x4000, 0xe05: 0x4000, - 0xe06: 0x4000, 0xe07: 0x4000, 0xe08: 0x4000, 0xe09: 0x4000, 0xe0a: 0x4000, 0xe0b: 0x4000, - 0xe0c: 0x4000, 0xe0d: 0x4000, 0xe0e: 0x4000, 0xe10: 0x4000, 0xe11: 0x4000, - 0xe12: 0x4000, 0xe13: 0x4000, 0xe14: 0x4000, 0xe15: 0x4000, 0xe16: 0x4000, 0xe17: 0x4000, - 0xe18: 0x4000, 0xe19: 0x4000, 0xe1a: 0x4000, 0xe1b: 0x4000, 0xe1c: 0x4000, 0xe1d: 0x4000, - 0xe1e: 0x4000, 0xe1f: 0x4000, 0xe20: 0x4000, 0xe21: 0x4000, 0xe22: 0x4000, 0xe23: 0x4000, - 0xe24: 0x4000, 0xe25: 0x4000, 0xe26: 0x4000, 0xe27: 0x4000, 0xe28: 0x4000, 0xe29: 0x4000, - 0xe2a: 0x4000, 0xe2b: 0x4000, 0xe2c: 0x4000, 0xe2d: 0x4000, 0xe2e: 0x4000, 0xe2f: 0x4000, - 0xe30: 0x4000, 0xe31: 0x4000, 0xe32: 0x4000, 0xe33: 0x4000, 0xe34: 0x4000, 0xe35: 0x4000, - 0xe36: 0x4000, 0xe37: 0x4000, 0xe38: 0x4000, 0xe39: 0x4000, 0xe3a: 0x4000, - // Block 0x39, offset 0xe40 - 0xe40: 0x4000, 0xe41: 0x4000, 0xe42: 0x4000, 0xe43: 0x4000, 0xe44: 0x4000, 0xe45: 0x4000, - 0xe46: 0x4000, 0xe47: 0x4000, 0xe48: 0x4000, 0xe49: 0x4000, 0xe4a: 0x4000, 0xe4b: 0x4000, - 0xe4c: 0x4000, 0xe4d: 0x4000, 0xe4e: 0x4000, 0xe4f: 0x4000, 0xe50: 0x4000, 0xe51: 0x4000, - 0xe52: 0x4000, 0xe53: 0x4000, 0xe54: 0x4000, 0xe55: 0x4000, 0xe56: 0x4000, 0xe57: 0x4000, - 0xe58: 0x4000, 0xe59: 0x4000, 0xe5a: 0x4000, 0xe5b: 0x4000, 0xe5c: 0x4000, 0xe5d: 0x4000, - 0xe5e: 0x4000, 0xe5f: 0x4000, 0xe60: 0x4000, 0xe61: 0x4000, 0xe62: 0x4000, 0xe63: 0x4000, - 0xe70: 0x4000, 0xe71: 0x4000, 0xe72: 0x4000, 0xe73: 0x4000, 0xe74: 0x4000, 0xe75: 0x4000, - 0xe76: 0x4000, 0xe77: 0x4000, 0xe78: 0x4000, 0xe79: 0x4000, 0xe7a: 0x4000, 0xe7b: 0x4000, - 0xe7c: 0x4000, 0xe7d: 0x4000, 0xe7e: 0x4000, 0xe7f: 0x4000, - // Block 0x3a, offset 0xe80 - 0xe80: 0x4000, 0xe81: 0x4000, 0xe82: 0x4000, 0xe83: 0x4000, 0xe84: 0x4000, 0xe85: 0x4000, - 0xe86: 0x4000, 0xe87: 0x4000, 0xe88: 0x4000, 0xe89: 0x4000, 0xe8a: 0x4000, 0xe8b: 0x4000, - 0xe8c: 0x4000, 0xe8d: 0x4000, 0xe8e: 0x4000, 0xe8f: 0x4000, 0xe90: 0x4000, 0xe91: 0x4000, - 0xe92: 0x4000, 0xe93: 0x4000, 0xe94: 0x4000, 0xe95: 0x4000, 0xe96: 0x4000, 0xe97: 0x4000, - 0xe98: 0x4000, 0xe99: 0x4000, 0xe9a: 0x4000, 0xe9b: 0x4000, 0xe9c: 0x4000, 0xe9d: 0x4000, - 0xe9e: 0x4000, 0xea0: 0x4000, 0xea1: 0x4000, 0xea2: 0x4000, 0xea3: 0x4000, - 0xea4: 0x4000, 0xea5: 0x4000, 0xea6: 0x4000, 0xea7: 0x4000, 0xea8: 0x4000, 0xea9: 0x4000, - 0xeaa: 0x4000, 0xeab: 0x4000, 0xeac: 0x4000, 0xead: 0x4000, 0xeae: 0x4000, 0xeaf: 0x4000, - 0xeb0: 0x4000, 0xeb1: 0x4000, 0xeb2: 0x4000, 0xeb3: 0x4000, 0xeb4: 0x4000, 0xeb5: 0x4000, - 0xeb6: 0x4000, 0xeb7: 0x4000, 0xeb8: 0x4000, 0xeb9: 0x4000, 0xeba: 0x4000, 0xebb: 0x4000, - 0xebc: 0x4000, 0xebd: 0x4000, 0xebe: 0x4000, 0xebf: 0x4000, - // Block 0x3b, offset 0xec0 - 0xec0: 0x4000, 0xec1: 0x4000, 0xec2: 0x4000, 0xec3: 0x4000, 0xec4: 0x4000, 0xec5: 0x4000, - 0xec6: 0x4000, 0xec7: 0x4000, 0xec8: 0x2000, 0xec9: 0x2000, 0xeca: 0x2000, 0xecb: 0x2000, - 0xecc: 0x2000, 0xecd: 0x2000, 0xece: 0x2000, 0xecf: 0x2000, 0xed0: 0x4000, 0xed1: 0x4000, - 0xed2: 0x4000, 0xed3: 0x4000, 0xed4: 0x4000, 0xed5: 0x4000, 0xed6: 0x4000, 0xed7: 0x4000, - 0xed8: 0x4000, 0xed9: 0x4000, 0xeda: 0x4000, 0xedb: 0x4000, 0xedc: 0x4000, 0xedd: 0x4000, - 0xede: 0x4000, 0xedf: 0x4000, 0xee0: 0x4000, 0xee1: 0x4000, 0xee2: 0x4000, 0xee3: 0x4000, - 0xee4: 0x4000, 0xee5: 0x4000, 0xee6: 0x4000, 0xee7: 0x4000, 0xee8: 0x4000, 0xee9: 0x4000, - 0xeea: 0x4000, 0xeeb: 0x4000, 0xeec: 0x4000, 0xeed: 0x4000, 0xeee: 0x4000, 0xeef: 0x4000, - 0xef0: 0x4000, 0xef1: 0x4000, 0xef2: 0x4000, 0xef3: 0x4000, 0xef4: 0x4000, 0xef5: 0x4000, - 0xef6: 0x4000, 0xef7: 0x4000, 0xef8: 0x4000, 0xef9: 0x4000, 0xefa: 0x4000, 0xefb: 0x4000, - 0xefc: 0x4000, 0xefd: 0x4000, 0xefe: 0x4000, 0xeff: 0x4000, - // Block 0x3c, offset 0xf00 - 0xf00: 0x4000, 0xf01: 0x4000, 0xf02: 0x4000, 0xf03: 0x4000, 0xf04: 0x4000, 0xf05: 0x4000, - 0xf06: 0x4000, 0xf07: 0x4000, 0xf08: 0x4000, 0xf09: 0x4000, 0xf0a: 0x4000, 0xf0b: 0x4000, - 0xf0c: 0x4000, 0xf0d: 0x4000, 0xf0e: 0x4000, 0xf0f: 0x4000, 0xf10: 0x4000, 0xf11: 0x4000, - 0xf12: 0x4000, 0xf13: 0x4000, 0xf14: 0x4000, 0xf15: 0x4000, 0xf16: 0x4000, 0xf17: 0x4000, - 0xf18: 0x4000, 0xf19: 0x4000, 0xf1a: 0x4000, 0xf1b: 0x4000, 0xf1c: 0x4000, 0xf1d: 0x4000, - 0xf1e: 0x4000, 0xf1f: 0x4000, 0xf20: 0x4000, 0xf21: 0x4000, 0xf22: 0x4000, 0xf23: 0x4000, - 0xf24: 0x4000, 0xf25: 0x4000, 0xf26: 0x4000, 0xf27: 0x4000, 0xf28: 0x4000, 0xf29: 0x4000, - 0xf2a: 0x4000, 0xf2b: 0x4000, 0xf2c: 0x4000, 0xf2d: 0x4000, 0xf2e: 0x4000, 0xf2f: 0x4000, - 0xf30: 0x4000, 0xf31: 0x4000, 0xf32: 0x4000, 0xf33: 0x4000, 0xf34: 0x4000, 0xf35: 0x4000, - 0xf36: 0x4000, 0xf37: 0x4000, 0xf38: 0x4000, 0xf39: 0x4000, 0xf3a: 0x4000, 0xf3b: 0x4000, - 0xf3c: 0x4000, 0xf3d: 0x4000, 0xf3e: 0x4000, - // Block 0x3d, offset 0xf40 - 0xf40: 0x4000, 0xf41: 0x4000, 0xf42: 0x4000, 0xf43: 0x4000, 0xf44: 0x4000, 0xf45: 0x4000, - 0xf46: 0x4000, 0xf47: 0x4000, 0xf48: 0x4000, 0xf49: 0x4000, 0xf4a: 0x4000, 0xf4b: 0x4000, - 0xf4c: 0x4000, 0xf50: 0x4000, 0xf51: 0x4000, - 0xf52: 0x4000, 0xf53: 0x4000, 0xf54: 0x4000, 0xf55: 0x4000, 0xf56: 0x4000, 0xf57: 0x4000, - 0xf58: 0x4000, 0xf59: 0x4000, 0xf5a: 0x4000, 0xf5b: 0x4000, 0xf5c: 0x4000, 0xf5d: 0x4000, - 0xf5e: 0x4000, 0xf5f: 0x4000, 0xf60: 0x4000, 0xf61: 0x4000, 0xf62: 0x4000, 0xf63: 0x4000, - 0xf64: 0x4000, 0xf65: 0x4000, 0xf66: 0x4000, 0xf67: 0x4000, 0xf68: 0x4000, 0xf69: 0x4000, - 0xf6a: 0x4000, 0xf6b: 0x4000, 0xf6c: 0x4000, 0xf6d: 0x4000, 0xf6e: 0x4000, 0xf6f: 0x4000, - 0xf70: 0x4000, 0xf71: 0x4000, 0xf72: 0x4000, 0xf73: 0x4000, 0xf74: 0x4000, 0xf75: 0x4000, - 0xf76: 0x4000, 0xf77: 0x4000, 0xf78: 0x4000, 0xf79: 0x4000, 0xf7a: 0x4000, 0xf7b: 0x4000, - 0xf7c: 0x4000, 0xf7d: 0x4000, 0xf7e: 0x4000, 0xf7f: 0x4000, - // Block 0x3e, offset 0xf80 - 0xf80: 0x4000, 0xf81: 0x4000, 0xf82: 0x4000, 0xf83: 0x4000, 0xf84: 0x4000, 0xf85: 0x4000, - 0xf86: 0x4000, - // Block 0x3f, offset 0xfc0 - 0xfe0: 0x4000, 0xfe1: 0x4000, 0xfe2: 0x4000, 0xfe3: 0x4000, - 0xfe4: 0x4000, 0xfe5: 0x4000, 0xfe6: 0x4000, 0xfe7: 0x4000, 0xfe8: 0x4000, 0xfe9: 0x4000, - 0xfea: 0x4000, 0xfeb: 0x4000, 0xfec: 0x4000, 0xfed: 0x4000, 0xfee: 0x4000, 0xfef: 0x4000, - 0xff0: 0x4000, 0xff1: 0x4000, 0xff2: 0x4000, 0xff3: 0x4000, 0xff4: 0x4000, 0xff5: 0x4000, - 0xff6: 0x4000, 0xff7: 0x4000, 0xff8: 0x4000, 0xff9: 0x4000, 0xffa: 0x4000, 0xffb: 0x4000, - 0xffc: 0x4000, - // Block 0x40, offset 0x1000 - 0x1000: 0x4000, 0x1001: 0x4000, 0x1002: 0x4000, 0x1003: 0x4000, 0x1004: 0x4000, 0x1005: 0x4000, - 0x1006: 0x4000, 0x1007: 0x4000, 0x1008: 0x4000, 0x1009: 0x4000, 0x100a: 0x4000, 0x100b: 0x4000, - 0x100c: 0x4000, 0x100d: 0x4000, 0x100e: 0x4000, 0x100f: 0x4000, 0x1010: 0x4000, 0x1011: 0x4000, - 0x1012: 0x4000, 0x1013: 0x4000, 0x1014: 0x4000, 0x1015: 0x4000, 0x1016: 0x4000, 0x1017: 0x4000, - 0x1018: 0x4000, 0x1019: 0x4000, 0x101a: 0x4000, 0x101b: 0x4000, 0x101c: 0x4000, 0x101d: 0x4000, - 0x101e: 0x4000, 0x101f: 0x4000, 0x1020: 0x4000, 0x1021: 0x4000, 0x1022: 0x4000, 0x1023: 0x4000, - // Block 0x41, offset 0x1040 - 0x1040: 0x2000, 0x1041: 0x2000, 0x1042: 0x2000, 0x1043: 0x2000, 0x1044: 0x2000, 0x1045: 0x2000, - 0x1046: 0x2000, 0x1047: 0x2000, 0x1048: 0x2000, 0x1049: 0x2000, 0x104a: 0x2000, 0x104b: 0x2000, - 0x104c: 0x2000, 0x104d: 0x2000, 0x104e: 0x2000, 0x104f: 0x2000, 0x1050: 0x4000, 0x1051: 0x4000, - 0x1052: 0x4000, 0x1053: 0x4000, 0x1054: 0x4000, 0x1055: 0x4000, 0x1056: 0x4000, 0x1057: 0x4000, - 0x1058: 0x4000, 0x1059: 0x4000, - 0x1070: 0x4000, 0x1071: 0x4000, 0x1072: 0x4000, 0x1073: 0x4000, 0x1074: 0x4000, 0x1075: 0x4000, - 0x1076: 0x4000, 0x1077: 0x4000, 0x1078: 0x4000, 0x1079: 0x4000, 0x107a: 0x4000, 0x107b: 0x4000, - 0x107c: 0x4000, 0x107d: 0x4000, 0x107e: 0x4000, 0x107f: 0x4000, - // Block 0x42, offset 0x1080 - 0x1080: 0x4000, 0x1081: 0x4000, 0x1082: 0x4000, 0x1083: 0x4000, 0x1084: 0x4000, 0x1085: 0x4000, - 0x1086: 0x4000, 0x1087: 0x4000, 0x1088: 0x4000, 0x1089: 0x4000, 0x108a: 0x4000, 0x108b: 0x4000, - 0x108c: 0x4000, 0x108d: 0x4000, 0x108e: 0x4000, 0x108f: 0x4000, 0x1090: 0x4000, 0x1091: 0x4000, - 0x1092: 0x4000, 0x1094: 0x4000, 0x1095: 0x4000, 0x1096: 0x4000, 0x1097: 0x4000, - 0x1098: 0x4000, 0x1099: 0x4000, 0x109a: 0x4000, 0x109b: 0x4000, 0x109c: 0x4000, 0x109d: 0x4000, - 0x109e: 0x4000, 0x109f: 0x4000, 0x10a0: 0x4000, 0x10a1: 0x4000, 0x10a2: 0x4000, 0x10a3: 0x4000, - 0x10a4: 0x4000, 0x10a5: 0x4000, 0x10a6: 0x4000, 0x10a8: 0x4000, 0x10a9: 0x4000, - 0x10aa: 0x4000, 0x10ab: 0x4000, - // Block 0x43, offset 0x10c0 - 0x10c1: 0x9012, 0x10c2: 0x9012, 0x10c3: 0x9012, 0x10c4: 0x9012, 0x10c5: 0x9012, - 0x10c6: 0x9012, 0x10c7: 0x9012, 0x10c8: 0x9012, 0x10c9: 0x9012, 0x10ca: 0x9012, 0x10cb: 0x9012, - 0x10cc: 0x9012, 0x10cd: 0x9012, 0x10ce: 0x9012, 0x10cf: 0x9012, 0x10d0: 0x9012, 0x10d1: 0x9012, - 0x10d2: 0x9012, 0x10d3: 0x9012, 0x10d4: 0x9012, 0x10d5: 0x9012, 0x10d6: 0x9012, 0x10d7: 0x9012, - 0x10d8: 0x9012, 0x10d9: 0x9012, 0x10da: 0x9012, 0x10db: 0x9012, 0x10dc: 0x9012, 0x10dd: 0x9012, - 0x10de: 0x9012, 0x10df: 0x9012, 0x10e0: 0x9049, 0x10e1: 0x9049, 0x10e2: 0x9049, 0x10e3: 0x9049, - 0x10e4: 0x9049, 0x10e5: 0x9049, 0x10e6: 0x9049, 0x10e7: 0x9049, 0x10e8: 0x9049, 0x10e9: 0x9049, - 0x10ea: 0x9049, 0x10eb: 0x9049, 0x10ec: 0x9049, 0x10ed: 0x9049, 0x10ee: 0x9049, 0x10ef: 0x9049, - 0x10f0: 0x9049, 0x10f1: 0x9049, 0x10f2: 0x9049, 0x10f3: 0x9049, 0x10f4: 0x9049, 0x10f5: 0x9049, - 0x10f6: 0x9049, 0x10f7: 0x9049, 0x10f8: 0x9049, 0x10f9: 0x9049, 0x10fa: 0x9049, 0x10fb: 0x9049, - 0x10fc: 0x9049, 0x10fd: 0x9049, 0x10fe: 0x9049, 0x10ff: 0x9049, - // Block 0x44, offset 0x1100 - 0x1100: 0x9049, 0x1101: 0x9049, 0x1102: 0x9049, 0x1103: 0x9049, 0x1104: 0x9049, 0x1105: 0x9049, - 0x1106: 0x9049, 0x1107: 0x9049, 0x1108: 0x9049, 0x1109: 0x9049, 0x110a: 0x9049, 0x110b: 0x9049, - 0x110c: 0x9049, 0x110d: 0x9049, 0x110e: 0x9049, 0x110f: 0x9049, 0x1110: 0x9049, 0x1111: 0x9049, - 0x1112: 0x9049, 0x1113: 0x9049, 0x1114: 0x9049, 0x1115: 0x9049, 0x1116: 0x9049, 0x1117: 0x9049, - 0x1118: 0x9049, 0x1119: 0x9049, 0x111a: 0x9049, 0x111b: 0x9049, 0x111c: 0x9049, 0x111d: 0x9049, - 0x111e: 0x9049, 0x111f: 0x904a, 0x1120: 0x904b, 0x1121: 0xb04c, 0x1122: 0xb04d, 0x1123: 0xb04d, - 0x1124: 0xb04e, 0x1125: 0xb04f, 0x1126: 0xb050, 0x1127: 0xb051, 0x1128: 0xb052, 0x1129: 0xb053, - 0x112a: 0xb054, 0x112b: 0xb055, 0x112c: 0xb056, 0x112d: 0xb057, 0x112e: 0xb058, 0x112f: 0xb059, - 0x1130: 0xb05a, 0x1131: 0xb05b, 0x1132: 0xb05c, 0x1133: 0xb05d, 0x1134: 0xb05e, 0x1135: 0xb05f, - 0x1136: 0xb060, 0x1137: 0xb061, 0x1138: 0xb062, 0x1139: 0xb063, 0x113a: 0xb064, 0x113b: 0xb065, - 0x113c: 0xb052, 0x113d: 0xb066, 0x113e: 0xb067, 0x113f: 0xb055, - // Block 0x45, offset 0x1140 - 0x1140: 0xb068, 0x1141: 0xb069, 0x1142: 0xb06a, 0x1143: 0xb06b, 0x1144: 0xb05a, 0x1145: 0xb056, - 0x1146: 0xb06c, 0x1147: 0xb06d, 0x1148: 0xb06b, 0x1149: 0xb06e, 0x114a: 0xb06b, 0x114b: 0xb06f, - 0x114c: 0xb06f, 0x114d: 0xb070, 0x114e: 0xb070, 0x114f: 0xb071, 0x1150: 0xb056, 0x1151: 0xb072, - 0x1152: 0xb073, 0x1153: 0xb072, 0x1154: 0xb074, 0x1155: 0xb073, 0x1156: 0xb075, 0x1157: 0xb075, - 0x1158: 0xb076, 0x1159: 0xb076, 0x115a: 0xb077, 0x115b: 0xb077, 0x115c: 0xb073, 0x115d: 0xb078, - 0x115e: 0xb079, 0x115f: 0xb067, 0x1160: 0xb07a, 0x1161: 0xb07b, 0x1162: 0xb07b, 0x1163: 0xb07b, - 0x1164: 0xb07b, 0x1165: 0xb07b, 0x1166: 0xb07b, 0x1167: 0xb07b, 0x1168: 0xb07b, 0x1169: 0xb07b, - 0x116a: 0xb07b, 0x116b: 0xb07b, 0x116c: 0xb07b, 0x116d: 0xb07b, 0x116e: 0xb07b, 0x116f: 0xb07b, - 0x1170: 0xb07c, 0x1171: 0xb07c, 0x1172: 0xb07c, 0x1173: 0xb07c, 0x1174: 0xb07c, 0x1175: 0xb07c, - 0x1176: 0xb07c, 0x1177: 0xb07c, 0x1178: 0xb07c, 0x1179: 0xb07c, 0x117a: 0xb07c, 0x117b: 0xb07c, - 0x117c: 0xb07c, 0x117d: 0xb07c, 0x117e: 0xb07c, - // Block 0x46, offset 0x1180 - 0x1182: 0xb07d, 0x1183: 0xb07e, 0x1184: 0xb07f, 0x1185: 0xb080, - 0x1186: 0xb07f, 0x1187: 0xb07e, 0x118a: 0xb081, 0x118b: 0xb082, - 0x118c: 0xb083, 0x118d: 0xb07f, 0x118e: 0xb080, 0x118f: 0xb07f, - 0x1192: 0xb084, 0x1193: 0xb085, 0x1194: 0xb084, 0x1195: 0xb086, 0x1196: 0xb084, 0x1197: 0xb087, - 0x119a: 0xb088, 0x119b: 0xb089, 0x119c: 0xb08a, - 0x11a0: 0x908b, 0x11a1: 0x908b, 0x11a2: 0x908c, 0x11a3: 0x908d, - 0x11a4: 0x908b, 0x11a5: 0x908e, 0x11a6: 0x908f, 0x11a8: 0xb090, 0x11a9: 0xb091, - 0x11aa: 0xb092, 0x11ab: 0xb091, 0x11ac: 0xb093, 0x11ad: 0xb094, 0x11ae: 0xb095, - 0x11bd: 0x2000, - // Block 0x47, offset 0x11c0 - 0x11e0: 0x4000, - // Block 0x48, offset 0x1200 - 0x1200: 0x4000, 0x1201: 0x4000, 0x1202: 0x4000, 0x1203: 0x4000, 0x1204: 0x4000, 0x1205: 0x4000, - 0x1206: 0x4000, 0x1207: 0x4000, 0x1208: 0x4000, 0x1209: 0x4000, 0x120a: 0x4000, 0x120b: 0x4000, - 0x120c: 0x4000, 0x120d: 0x4000, 0x120e: 0x4000, 0x120f: 0x4000, 0x1210: 0x4000, 0x1211: 0x4000, - 0x1212: 0x4000, 0x1213: 0x4000, 0x1214: 0x4000, 0x1215: 0x4000, 0x1216: 0x4000, 0x1217: 0x4000, - 0x1218: 0x4000, 0x1219: 0x4000, 0x121a: 0x4000, 0x121b: 0x4000, 0x121c: 0x4000, 0x121d: 0x4000, - 0x121e: 0x4000, 0x121f: 0x4000, 0x1220: 0x4000, 0x1221: 0x4000, 0x1222: 0x4000, 0x1223: 0x4000, - 0x1224: 0x4000, 0x1225: 0x4000, 0x1226: 0x4000, 0x1227: 0x4000, 0x1228: 0x4000, 0x1229: 0x4000, - 0x122a: 0x4000, 0x122b: 0x4000, 0x122c: 0x4000, - // Block 0x49, offset 0x1240 - 0x1240: 0x4000, 0x1241: 0x4000, 0x1242: 0x4000, 0x1243: 0x4000, 0x1244: 0x4000, 0x1245: 0x4000, - 0x1246: 0x4000, 0x1247: 0x4000, 0x1248: 0x4000, 0x1249: 0x4000, 0x124a: 0x4000, 0x124b: 0x4000, - 0x124c: 0x4000, 0x124d: 0x4000, 0x124e: 0x4000, 0x124f: 0x4000, 0x1250: 0x4000, 0x1251: 0x4000, - 0x1252: 0x4000, 0x1253: 0x4000, 0x1254: 0x4000, 0x1255: 0x4000, 0x1256: 0x4000, 0x1257: 0x4000, - 0x1258: 0x4000, 0x1259: 0x4000, 0x125a: 0x4000, 0x125b: 0x4000, 0x125c: 0x4000, 0x125d: 0x4000, - 0x125e: 0x4000, 0x125f: 0x4000, 0x1260: 0x4000, 0x1261: 0x4000, 0x1262: 0x4000, 0x1263: 0x4000, - 0x1264: 0x4000, 0x1265: 0x4000, 0x1266: 0x4000, 0x1267: 0x4000, 0x1268: 0x4000, 0x1269: 0x4000, - 0x126a: 0x4000, 0x126b: 0x4000, 0x126c: 0x4000, 0x126d: 0x4000, 0x126e: 0x4000, 0x126f: 0x4000, - 0x1270: 0x4000, 0x1271: 0x4000, 0x1272: 0x4000, - // Block 0x4a, offset 0x1280 - 0x1280: 0x4000, 0x1281: 0x4000, - // Block 0x4b, offset 0x12c0 - 0x12c4: 0x4000, - // Block 0x4c, offset 0x1300 - 0x130f: 0x4000, - // Block 0x4d, offset 0x1340 - 0x1340: 0x2000, 0x1341: 0x2000, 0x1342: 0x2000, 0x1343: 0x2000, 0x1344: 0x2000, 0x1345: 0x2000, - 0x1346: 0x2000, 0x1347: 0x2000, 0x1348: 0x2000, 0x1349: 0x2000, 0x134a: 0x2000, - 0x1350: 0x2000, 0x1351: 0x2000, - 0x1352: 0x2000, 0x1353: 0x2000, 0x1354: 0x2000, 0x1355: 0x2000, 0x1356: 0x2000, 0x1357: 0x2000, - 0x1358: 0x2000, 0x1359: 0x2000, 0x135a: 0x2000, 0x135b: 0x2000, 0x135c: 0x2000, 0x135d: 0x2000, - 0x135e: 0x2000, 0x135f: 0x2000, 0x1360: 0x2000, 0x1361: 0x2000, 0x1362: 0x2000, 0x1363: 0x2000, - 0x1364: 0x2000, 0x1365: 0x2000, 0x1366: 0x2000, 0x1367: 0x2000, 0x1368: 0x2000, 0x1369: 0x2000, - 0x136a: 0x2000, 0x136b: 0x2000, 0x136c: 0x2000, 0x136d: 0x2000, - 0x1370: 0x2000, 0x1371: 0x2000, 0x1372: 0x2000, 0x1373: 0x2000, 0x1374: 0x2000, 0x1375: 0x2000, - 0x1376: 0x2000, 0x1377: 0x2000, 0x1378: 0x2000, 0x1379: 0x2000, 0x137a: 0x2000, 0x137b: 0x2000, - 0x137c: 0x2000, 0x137d: 0x2000, 0x137e: 0x2000, 0x137f: 0x2000, - // Block 0x4e, offset 0x1380 - 0x1380: 0x2000, 0x1381: 0x2000, 0x1382: 0x2000, 0x1383: 0x2000, 0x1384: 0x2000, 0x1385: 0x2000, - 0x1386: 0x2000, 0x1387: 0x2000, 0x1388: 0x2000, 0x1389: 0x2000, 0x138a: 0x2000, 0x138b: 0x2000, - 0x138c: 0x2000, 0x138d: 0x2000, 0x138e: 0x2000, 0x138f: 0x2000, 0x1390: 0x2000, 0x1391: 0x2000, - 0x1392: 0x2000, 0x1393: 0x2000, 0x1394: 0x2000, 0x1395: 0x2000, 0x1396: 0x2000, 0x1397: 0x2000, - 0x1398: 0x2000, 0x1399: 0x2000, 0x139a: 0x2000, 0x139b: 0x2000, 0x139c: 0x2000, 0x139d: 0x2000, - 0x139e: 0x2000, 0x139f: 0x2000, 0x13a0: 0x2000, 0x13a1: 0x2000, 0x13a2: 0x2000, 0x13a3: 0x2000, - 0x13a4: 0x2000, 0x13a5: 0x2000, 0x13a6: 0x2000, 0x13a7: 0x2000, 0x13a8: 0x2000, 0x13a9: 0x2000, - 0x13b0: 0x2000, 0x13b1: 0x2000, 0x13b2: 0x2000, 0x13b3: 0x2000, 0x13b4: 0x2000, 0x13b5: 0x2000, - 0x13b6: 0x2000, 0x13b7: 0x2000, 0x13b8: 0x2000, 0x13b9: 0x2000, 0x13ba: 0x2000, 0x13bb: 0x2000, - 0x13bc: 0x2000, 0x13bd: 0x2000, 0x13be: 0x2000, 0x13bf: 0x2000, - // Block 0x4f, offset 0x13c0 - 0x13c0: 0x2000, 0x13c1: 0x2000, 0x13c2: 0x2000, 0x13c3: 0x2000, 0x13c4: 0x2000, 0x13c5: 0x2000, - 0x13c6: 0x2000, 0x13c7: 0x2000, 0x13c8: 0x2000, 0x13c9: 0x2000, 0x13ca: 0x2000, 0x13cb: 0x2000, - 0x13cc: 0x2000, 0x13cd: 0x2000, 0x13ce: 0x4000, 0x13cf: 0x2000, 0x13d0: 0x2000, 0x13d1: 0x4000, - 0x13d2: 0x4000, 0x13d3: 0x4000, 0x13d4: 0x4000, 0x13d5: 0x4000, 0x13d6: 0x4000, 0x13d7: 0x4000, - 0x13d8: 0x4000, 0x13d9: 0x4000, 0x13da: 0x4000, 0x13db: 0x2000, 0x13dc: 0x2000, 0x13dd: 0x2000, - 0x13de: 0x2000, 0x13df: 0x2000, 0x13e0: 0x2000, 0x13e1: 0x2000, 0x13e2: 0x2000, 0x13e3: 0x2000, - 0x13e4: 0x2000, 0x13e5: 0x2000, 0x13e6: 0x2000, 0x13e7: 0x2000, 0x13e8: 0x2000, 0x13e9: 0x2000, - 0x13ea: 0x2000, 0x13eb: 0x2000, 0x13ec: 0x2000, - // Block 0x50, offset 0x1400 - 0x1400: 0x4000, 0x1401: 0x4000, 0x1402: 0x4000, - 0x1410: 0x4000, 0x1411: 0x4000, - 0x1412: 0x4000, 0x1413: 0x4000, 0x1414: 0x4000, 0x1415: 0x4000, 0x1416: 0x4000, 0x1417: 0x4000, - 0x1418: 0x4000, 0x1419: 0x4000, 0x141a: 0x4000, 0x141b: 0x4000, 0x141c: 0x4000, 0x141d: 0x4000, - 0x141e: 0x4000, 0x141f: 0x4000, 0x1420: 0x4000, 0x1421: 0x4000, 0x1422: 0x4000, 0x1423: 0x4000, - 0x1424: 0x4000, 0x1425: 0x4000, 0x1426: 0x4000, 0x1427: 0x4000, 0x1428: 0x4000, 0x1429: 0x4000, - 0x142a: 0x4000, 0x142b: 0x4000, 0x142c: 0x4000, 0x142d: 0x4000, 0x142e: 0x4000, 0x142f: 0x4000, - 0x1430: 0x4000, 0x1431: 0x4000, 0x1432: 0x4000, 0x1433: 0x4000, 0x1434: 0x4000, 0x1435: 0x4000, - 0x1436: 0x4000, 0x1437: 0x4000, 0x1438: 0x4000, 0x1439: 0x4000, 0x143a: 0x4000, 0x143b: 0x4000, - // Block 0x51, offset 0x1440 - 0x1440: 0x4000, 0x1441: 0x4000, 0x1442: 0x4000, 0x1443: 0x4000, 0x1444: 0x4000, 0x1445: 0x4000, - 0x1446: 0x4000, 0x1447: 0x4000, 0x1448: 0x4000, - 0x1450: 0x4000, 0x1451: 0x4000, - // Block 0x52, offset 0x1480 - 0x1480: 0x4000, 0x1481: 0x4000, 0x1482: 0x4000, 0x1483: 0x4000, 0x1484: 0x4000, 0x1485: 0x4000, - 0x1486: 0x4000, 0x1487: 0x4000, 0x1488: 0x4000, 0x1489: 0x4000, 0x148a: 0x4000, 0x148b: 0x4000, - 0x148c: 0x4000, 0x148d: 0x4000, 0x148e: 0x4000, 0x148f: 0x4000, 0x1490: 0x4000, 0x1491: 0x4000, - 0x1492: 0x4000, 0x1493: 0x4000, 0x1494: 0x4000, 0x1495: 0x4000, 0x1496: 0x4000, 0x1497: 0x4000, - 0x1498: 0x4000, 0x1499: 0x4000, 0x149a: 0x4000, 0x149b: 0x4000, 0x149c: 0x4000, 0x149d: 0x4000, - 0x149e: 0x4000, 0x149f: 0x4000, 0x14a0: 0x4000, - 0x14ad: 0x4000, 0x14ae: 0x4000, 0x14af: 0x4000, - 0x14b0: 0x4000, 0x14b1: 0x4000, 0x14b2: 0x4000, 0x14b3: 0x4000, 0x14b4: 0x4000, 0x14b5: 0x4000, - 0x14b7: 0x4000, 0x14b8: 0x4000, 0x14b9: 0x4000, 0x14ba: 0x4000, 0x14bb: 0x4000, - 0x14bc: 0x4000, 0x14bd: 0x4000, 0x14be: 0x4000, 0x14bf: 0x4000, - // Block 0x53, offset 0x14c0 - 0x14c0: 0x4000, 0x14c1: 0x4000, 0x14c2: 0x4000, 0x14c3: 0x4000, 0x14c4: 0x4000, 0x14c5: 0x4000, - 0x14c6: 0x4000, 0x14c7: 0x4000, 0x14c8: 0x4000, 0x14c9: 0x4000, 0x14ca: 0x4000, 0x14cb: 0x4000, - 0x14cc: 0x4000, 0x14cd: 0x4000, 0x14ce: 0x4000, 0x14cf: 0x4000, 0x14d0: 0x4000, 0x14d1: 0x4000, - 0x14d2: 0x4000, 0x14d3: 0x4000, 0x14d4: 0x4000, 0x14d5: 0x4000, 0x14d6: 0x4000, 0x14d7: 0x4000, - 0x14d8: 0x4000, 0x14d9: 0x4000, 0x14da: 0x4000, 0x14db: 0x4000, 0x14dc: 0x4000, 0x14dd: 0x4000, - 0x14de: 0x4000, 0x14df: 0x4000, 0x14e0: 0x4000, 0x14e1: 0x4000, 0x14e2: 0x4000, 0x14e3: 0x4000, - 0x14e4: 0x4000, 0x14e5: 0x4000, 0x14e6: 0x4000, 0x14e7: 0x4000, 0x14e8: 0x4000, 0x14e9: 0x4000, - 0x14ea: 0x4000, 0x14eb: 0x4000, 0x14ec: 0x4000, 0x14ed: 0x4000, 0x14ee: 0x4000, 0x14ef: 0x4000, - 0x14f0: 0x4000, 0x14f1: 0x4000, 0x14f2: 0x4000, 0x14f3: 0x4000, 0x14f4: 0x4000, 0x14f5: 0x4000, - 0x14f6: 0x4000, 0x14f7: 0x4000, 0x14f8: 0x4000, 0x14f9: 0x4000, 0x14fa: 0x4000, 0x14fb: 0x4000, - 0x14fc: 0x4000, 0x14fe: 0x4000, 0x14ff: 0x4000, - // Block 0x54, offset 0x1500 - 0x1500: 0x4000, 0x1501: 0x4000, 0x1502: 0x4000, 0x1503: 0x4000, 0x1504: 0x4000, 0x1505: 0x4000, - 0x1506: 0x4000, 0x1507: 0x4000, 0x1508: 0x4000, 0x1509: 0x4000, 0x150a: 0x4000, 0x150b: 0x4000, - 0x150c: 0x4000, 0x150d: 0x4000, 0x150e: 0x4000, 0x150f: 0x4000, 0x1510: 0x4000, 0x1511: 0x4000, - 0x1512: 0x4000, 0x1513: 0x4000, - 0x1520: 0x4000, 0x1521: 0x4000, 0x1522: 0x4000, 0x1523: 0x4000, - 0x1524: 0x4000, 0x1525: 0x4000, 0x1526: 0x4000, 0x1527: 0x4000, 0x1528: 0x4000, 0x1529: 0x4000, - 0x152a: 0x4000, 0x152b: 0x4000, 0x152c: 0x4000, 0x152d: 0x4000, 0x152e: 0x4000, 0x152f: 0x4000, - 0x1530: 0x4000, 0x1531: 0x4000, 0x1532: 0x4000, 0x1533: 0x4000, 0x1534: 0x4000, 0x1535: 0x4000, - 0x1536: 0x4000, 0x1537: 0x4000, 0x1538: 0x4000, 0x1539: 0x4000, 0x153a: 0x4000, 0x153b: 0x4000, - 0x153c: 0x4000, 0x153d: 0x4000, 0x153e: 0x4000, 0x153f: 0x4000, - // Block 0x55, offset 0x1540 - 0x1540: 0x4000, 0x1541: 0x4000, 0x1542: 0x4000, 0x1543: 0x4000, 0x1544: 0x4000, 0x1545: 0x4000, - 0x1546: 0x4000, 0x1547: 0x4000, 0x1548: 0x4000, 0x1549: 0x4000, 0x154a: 0x4000, - 0x154f: 0x4000, 0x1550: 0x4000, 0x1551: 0x4000, - 0x1552: 0x4000, 0x1553: 0x4000, - 0x1560: 0x4000, 0x1561: 0x4000, 0x1562: 0x4000, 0x1563: 0x4000, - 0x1564: 0x4000, 0x1565: 0x4000, 0x1566: 0x4000, 0x1567: 0x4000, 0x1568: 0x4000, 0x1569: 0x4000, - 0x156a: 0x4000, 0x156b: 0x4000, 0x156c: 0x4000, 0x156d: 0x4000, 0x156e: 0x4000, 0x156f: 0x4000, - 0x1570: 0x4000, 0x1574: 0x4000, - 0x1578: 0x4000, 0x1579: 0x4000, 0x157a: 0x4000, 0x157b: 0x4000, - 0x157c: 0x4000, 0x157d: 0x4000, 0x157e: 0x4000, 0x157f: 0x4000, - // Block 0x56, offset 0x1580 - 0x1580: 0x4000, 0x1582: 0x4000, 0x1583: 0x4000, 0x1584: 0x4000, 0x1585: 0x4000, - 0x1586: 0x4000, 0x1587: 0x4000, 0x1588: 0x4000, 0x1589: 0x4000, 0x158a: 0x4000, 0x158b: 0x4000, - 0x158c: 0x4000, 0x158d: 0x4000, 0x158e: 0x4000, 0x158f: 0x4000, 0x1590: 0x4000, 0x1591: 0x4000, - 0x1592: 0x4000, 0x1593: 0x4000, 0x1594: 0x4000, 0x1595: 0x4000, 0x1596: 0x4000, 0x1597: 0x4000, - 0x1598: 0x4000, 0x1599: 0x4000, 0x159a: 0x4000, 0x159b: 0x4000, 0x159c: 0x4000, 0x159d: 0x4000, - 0x159e: 0x4000, 0x159f: 0x4000, 0x15a0: 0x4000, 0x15a1: 0x4000, 0x15a2: 0x4000, 0x15a3: 0x4000, - 0x15a4: 0x4000, 0x15a5: 0x4000, 0x15a6: 0x4000, 0x15a7: 0x4000, 0x15a8: 0x4000, 0x15a9: 0x4000, - 0x15aa: 0x4000, 0x15ab: 0x4000, 0x15ac: 0x4000, 0x15ad: 0x4000, 0x15ae: 0x4000, 0x15af: 0x4000, - 0x15b0: 0x4000, 0x15b1: 0x4000, 0x15b2: 0x4000, 0x15b3: 0x4000, 0x15b4: 0x4000, 0x15b5: 0x4000, - 0x15b6: 0x4000, 0x15b7: 0x4000, 0x15b8: 0x4000, 0x15b9: 0x4000, 0x15ba: 0x4000, 0x15bb: 0x4000, - 0x15bc: 0x4000, 0x15bd: 0x4000, 0x15be: 0x4000, 0x15bf: 0x4000, - // Block 0x57, offset 0x15c0 - 0x15c0: 0x4000, 0x15c1: 0x4000, 0x15c2: 0x4000, 0x15c3: 0x4000, 0x15c4: 0x4000, 0x15c5: 0x4000, - 0x15c6: 0x4000, 0x15c7: 0x4000, 0x15c8: 0x4000, 0x15c9: 0x4000, 0x15ca: 0x4000, 0x15cb: 0x4000, - 0x15cc: 0x4000, 0x15cd: 0x4000, 0x15ce: 0x4000, 0x15cf: 0x4000, 0x15d0: 0x4000, 0x15d1: 0x4000, - 0x15d2: 0x4000, 0x15d3: 0x4000, 0x15d4: 0x4000, 0x15d5: 0x4000, 0x15d6: 0x4000, 0x15d7: 0x4000, - 0x15d8: 0x4000, 0x15d9: 0x4000, 0x15da: 0x4000, 0x15db: 0x4000, 0x15dc: 0x4000, 0x15dd: 0x4000, - 0x15de: 0x4000, 0x15df: 0x4000, 0x15e0: 0x4000, 0x15e1: 0x4000, 0x15e2: 0x4000, 0x15e3: 0x4000, - 0x15e4: 0x4000, 0x15e5: 0x4000, 0x15e6: 0x4000, 0x15e7: 0x4000, 0x15e8: 0x4000, 0x15e9: 0x4000, - 0x15ea: 0x4000, 0x15eb: 0x4000, 0x15ec: 0x4000, 0x15ed: 0x4000, 0x15ee: 0x4000, 0x15ef: 0x4000, - 0x15f0: 0x4000, 0x15f1: 0x4000, 0x15f2: 0x4000, 0x15f3: 0x4000, 0x15f4: 0x4000, 0x15f5: 0x4000, - 0x15f6: 0x4000, 0x15f7: 0x4000, 0x15f8: 0x4000, 0x15f9: 0x4000, 0x15fa: 0x4000, 0x15fb: 0x4000, - 0x15fc: 0x4000, 0x15ff: 0x4000, - // Block 0x58, offset 0x1600 - 0x1600: 0x4000, 0x1601: 0x4000, 0x1602: 0x4000, 0x1603: 0x4000, 0x1604: 0x4000, 0x1605: 0x4000, - 0x1606: 0x4000, 0x1607: 0x4000, 0x1608: 0x4000, 0x1609: 0x4000, 0x160a: 0x4000, 0x160b: 0x4000, - 0x160c: 0x4000, 0x160d: 0x4000, 0x160e: 0x4000, 0x160f: 0x4000, 0x1610: 0x4000, 0x1611: 0x4000, - 0x1612: 0x4000, 0x1613: 0x4000, 0x1614: 0x4000, 0x1615: 0x4000, 0x1616: 0x4000, 0x1617: 0x4000, - 0x1618: 0x4000, 0x1619: 0x4000, 0x161a: 0x4000, 0x161b: 0x4000, 0x161c: 0x4000, 0x161d: 0x4000, - 0x161e: 0x4000, 0x161f: 0x4000, 0x1620: 0x4000, 0x1621: 0x4000, 0x1622: 0x4000, 0x1623: 0x4000, - 0x1624: 0x4000, 0x1625: 0x4000, 0x1626: 0x4000, 0x1627: 0x4000, 0x1628: 0x4000, 0x1629: 0x4000, - 0x162a: 0x4000, 0x162b: 0x4000, 0x162c: 0x4000, 0x162d: 0x4000, 0x162e: 0x4000, 0x162f: 0x4000, - 0x1630: 0x4000, 0x1631: 0x4000, 0x1632: 0x4000, 0x1633: 0x4000, 0x1634: 0x4000, 0x1635: 0x4000, - 0x1636: 0x4000, 0x1637: 0x4000, 0x1638: 0x4000, 0x1639: 0x4000, 0x163a: 0x4000, 0x163b: 0x4000, - 0x163c: 0x4000, 0x163d: 0x4000, - // Block 0x59, offset 0x1640 - 0x164b: 0x4000, - 0x164c: 0x4000, 0x164d: 0x4000, 0x164e: 0x4000, 0x1650: 0x4000, 0x1651: 0x4000, - 0x1652: 0x4000, 0x1653: 0x4000, 0x1654: 0x4000, 0x1655: 0x4000, 0x1656: 0x4000, 0x1657: 0x4000, - 0x1658: 0x4000, 0x1659: 0x4000, 0x165a: 0x4000, 0x165b: 0x4000, 0x165c: 0x4000, 0x165d: 0x4000, - 0x165e: 0x4000, 0x165f: 0x4000, 0x1660: 0x4000, 0x1661: 0x4000, 0x1662: 0x4000, 0x1663: 0x4000, - 0x1664: 0x4000, 0x1665: 0x4000, 0x1666: 0x4000, 0x1667: 0x4000, - 0x167a: 0x4000, - // Block 0x5a, offset 0x1680 - 0x1695: 0x4000, 0x1696: 0x4000, - 0x16a4: 0x4000, - // Block 0x5b, offset 0x16c0 - 0x16fb: 0x4000, - 0x16fc: 0x4000, 0x16fd: 0x4000, 0x16fe: 0x4000, 0x16ff: 0x4000, - // Block 0x5c, offset 0x1700 - 0x1700: 0x4000, 0x1701: 0x4000, 0x1702: 0x4000, 0x1703: 0x4000, 0x1704: 0x4000, 0x1705: 0x4000, - 0x1706: 0x4000, 0x1707: 0x4000, 0x1708: 0x4000, 0x1709: 0x4000, 0x170a: 0x4000, 0x170b: 0x4000, - 0x170c: 0x4000, 0x170d: 0x4000, 0x170e: 0x4000, 0x170f: 0x4000, - // Block 0x5d, offset 0x1740 - 0x1740: 0x4000, 0x1741: 0x4000, 0x1742: 0x4000, 0x1743: 0x4000, 0x1744: 0x4000, 0x1745: 0x4000, - 0x174c: 0x4000, 0x1750: 0x4000, 0x1751: 0x4000, - 0x1752: 0x4000, - 0x176b: 0x4000, 0x176c: 0x4000, - 0x1774: 0x4000, 0x1775: 0x4000, - 0x1776: 0x4000, - // Block 0x5e, offset 0x1780 - 0x1790: 0x4000, 0x1791: 0x4000, - 0x1792: 0x4000, 0x1793: 0x4000, 0x1794: 0x4000, 0x1795: 0x4000, 0x1796: 0x4000, 0x1797: 0x4000, - 0x1798: 0x4000, 0x1799: 0x4000, 0x179a: 0x4000, 0x179b: 0x4000, 0x179c: 0x4000, 0x179d: 0x4000, - 0x179e: 0x4000, 0x17a0: 0x4000, 0x17a1: 0x4000, 0x17a2: 0x4000, 0x17a3: 0x4000, - 0x17a4: 0x4000, 0x17a5: 0x4000, 0x17a6: 0x4000, 0x17a7: 0x4000, - 0x17b0: 0x4000, 0x17b3: 0x4000, 0x17b4: 0x4000, 0x17b5: 0x4000, - 0x17b6: 0x4000, 0x17b7: 0x4000, 0x17b8: 0x4000, 0x17b9: 0x4000, 0x17ba: 0x4000, 0x17bb: 0x4000, - 0x17bc: 0x4000, 0x17bd: 0x4000, 0x17be: 0x4000, - // Block 0x5f, offset 0x17c0 - 0x17c0: 0x4000, 0x17c1: 0x4000, 0x17c2: 0x4000, 0x17c3: 0x4000, 0x17c4: 0x4000, 0x17c5: 0x4000, - 0x17c6: 0x4000, 0x17c7: 0x4000, 0x17c8: 0x4000, 0x17c9: 0x4000, 0x17ca: 0x4000, 0x17cb: 0x4000, - 0x17d0: 0x4000, 0x17d1: 0x4000, - 0x17d2: 0x4000, 0x17d3: 0x4000, 0x17d4: 0x4000, 0x17d5: 0x4000, 0x17d6: 0x4000, 0x17d7: 0x4000, - 0x17d8: 0x4000, 0x17d9: 0x4000, 0x17da: 0x4000, 0x17db: 0x4000, 0x17dc: 0x4000, 0x17dd: 0x4000, - 0x17de: 0x4000, - // Block 0x60, offset 0x1800 - 0x1800: 0x4000, 0x1801: 0x4000, 0x1802: 0x4000, 0x1803: 0x4000, 0x1804: 0x4000, 0x1805: 0x4000, - 0x1806: 0x4000, 0x1807: 0x4000, 0x1808: 0x4000, 0x1809: 0x4000, 0x180a: 0x4000, 0x180b: 0x4000, - 0x180c: 0x4000, 0x180d: 0x4000, 0x180e: 0x4000, 0x180f: 0x4000, 0x1810: 0x4000, 0x1811: 0x4000, - // Block 0x61, offset 0x1840 - 0x1840: 0x4000, - // Block 0x62, offset 0x1880 - 0x1880: 0x2000, 0x1881: 0x2000, 0x1882: 0x2000, 0x1883: 0x2000, 0x1884: 0x2000, 0x1885: 0x2000, - 0x1886: 0x2000, 0x1887: 0x2000, 0x1888: 0x2000, 0x1889: 0x2000, 0x188a: 0x2000, 0x188b: 0x2000, - 0x188c: 0x2000, 0x188d: 0x2000, 0x188e: 0x2000, 0x188f: 0x2000, 0x1890: 0x2000, 0x1891: 0x2000, - 0x1892: 0x2000, 0x1893: 0x2000, 0x1894: 0x2000, 0x1895: 0x2000, 0x1896: 0x2000, 0x1897: 0x2000, - 0x1898: 0x2000, 0x1899: 0x2000, 0x189a: 0x2000, 0x189b: 0x2000, 0x189c: 0x2000, 0x189d: 0x2000, - 0x189e: 0x2000, 0x189f: 0x2000, 0x18a0: 0x2000, 0x18a1: 0x2000, 0x18a2: 0x2000, 0x18a3: 0x2000, - 0x18a4: 0x2000, 0x18a5: 0x2000, 0x18a6: 0x2000, 0x18a7: 0x2000, 0x18a8: 0x2000, 0x18a9: 0x2000, - 0x18aa: 0x2000, 0x18ab: 0x2000, 0x18ac: 0x2000, 0x18ad: 0x2000, 0x18ae: 0x2000, 0x18af: 0x2000, - 0x18b0: 0x2000, 0x18b1: 0x2000, 0x18b2: 0x2000, 0x18b3: 0x2000, 0x18b4: 0x2000, 0x18b5: 0x2000, - 0x18b6: 0x2000, 0x18b7: 0x2000, 0x18b8: 0x2000, 0x18b9: 0x2000, 0x18ba: 0x2000, 0x18bb: 0x2000, - 0x18bc: 0x2000, 0x18bd: 0x2000, -} - -// widthIndex: 22 blocks, 1408 entries, 1408 bytes -// Block 0 is the zero block. -var widthIndex = [1408]uint8{ - // Block 0x0, offset 0x0 - // Block 0x1, offset 0x40 - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc2: 0x01, 0xc3: 0x02, 0xc4: 0x03, 0xc5: 0x04, 0xc7: 0x05, - 0xc9: 0x06, 0xcb: 0x07, 0xcc: 0x08, 0xcd: 0x09, 0xce: 0x0a, 0xcf: 0x0b, - 0xd0: 0x0c, 0xd1: 0x0d, - 0xe1: 0x02, 0xe2: 0x03, 0xe3: 0x04, 0xe4: 0x05, 0xe5: 0x06, 0xe6: 0x06, 0xe7: 0x06, - 0xe8: 0x06, 0xe9: 0x06, 0xea: 0x07, 0xeb: 0x06, 0xec: 0x06, 0xed: 0x08, 0xee: 0x09, 0xef: 0x0a, - 0xf0: 0x0f, 0xf3: 0x12, 0xf4: 0x13, - // Block 0x4, offset 0x100 - 0x104: 0x0e, 0x105: 0x0f, - // Block 0x5, offset 0x140 - 0x140: 0x10, 0x141: 0x11, 0x142: 0x12, 0x144: 0x13, 0x145: 0x14, 0x146: 0x15, 0x147: 0x16, - 0x148: 0x17, 0x149: 0x18, 0x14a: 0x19, 0x14c: 0x1a, 0x14f: 0x1b, - 0x151: 0x1c, 0x152: 0x08, 0x153: 0x1d, 0x154: 0x1e, 0x155: 0x1f, 0x156: 0x20, 0x157: 0x21, - 0x158: 0x22, 0x159: 0x23, 0x15a: 0x24, 0x15b: 0x25, 0x15c: 0x26, 0x15d: 0x27, 0x15e: 0x28, 0x15f: 0x29, - 0x166: 0x2a, - 0x16c: 0x2b, 0x16d: 0x2c, - 0x17a: 0x2d, 0x17b: 0x2e, 0x17c: 0x0e, 0x17d: 0x0e, 0x17e: 0x0e, 0x17f: 0x2f, - // Block 0x6, offset 0x180 - 0x180: 0x30, 0x181: 0x31, 0x182: 0x32, 0x183: 0x33, 0x184: 0x34, 0x185: 0x35, 0x186: 0x36, 0x187: 0x37, - 0x188: 0x38, 0x189: 0x39, 0x18a: 0x0e, 0x18b: 0x3a, 0x18c: 0x0e, 0x18d: 0x0e, 0x18e: 0x0e, 0x18f: 0x0e, - 0x190: 0x0e, 0x191: 0x0e, 0x192: 0x0e, 0x193: 0x0e, 0x194: 0x0e, 0x195: 0x0e, 0x196: 0x0e, 0x197: 0x0e, - 0x198: 0x0e, 0x199: 0x0e, 0x19a: 0x0e, 0x19b: 0x0e, 0x19c: 0x0e, 0x19d: 0x0e, 0x19e: 0x0e, 0x19f: 0x0e, - 0x1a0: 0x0e, 0x1a1: 0x0e, 0x1a2: 0x0e, 0x1a3: 0x0e, 0x1a4: 0x0e, 0x1a5: 0x0e, 0x1a6: 0x0e, 0x1a7: 0x0e, - 0x1a8: 0x0e, 0x1a9: 0x0e, 0x1aa: 0x0e, 0x1ab: 0x0e, 0x1ac: 0x0e, 0x1ad: 0x0e, 0x1ae: 0x0e, 0x1af: 0x0e, - 0x1b0: 0x0e, 0x1b1: 0x0e, 0x1b2: 0x0e, 0x1b3: 0x0e, 0x1b4: 0x0e, 0x1b5: 0x0e, 0x1b6: 0x0e, 0x1b7: 0x0e, - 0x1b8: 0x0e, 0x1b9: 0x0e, 0x1ba: 0x0e, 0x1bb: 0x0e, 0x1bc: 0x0e, 0x1bd: 0x0e, 0x1be: 0x0e, 0x1bf: 0x0e, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x0e, 0x1c1: 0x0e, 0x1c2: 0x0e, 0x1c3: 0x0e, 0x1c4: 0x0e, 0x1c5: 0x0e, 0x1c6: 0x0e, 0x1c7: 0x0e, - 0x1c8: 0x0e, 0x1c9: 0x0e, 0x1ca: 0x0e, 0x1cb: 0x0e, 0x1cc: 0x0e, 0x1cd: 0x0e, 0x1ce: 0x0e, 0x1cf: 0x0e, - 0x1d0: 0x0e, 0x1d1: 0x0e, 0x1d2: 0x0e, 0x1d3: 0x0e, 0x1d4: 0x0e, 0x1d5: 0x0e, 0x1d6: 0x0e, 0x1d7: 0x0e, - 0x1d8: 0x0e, 0x1d9: 0x0e, 0x1da: 0x0e, 0x1db: 0x0e, 0x1dc: 0x0e, 0x1dd: 0x0e, 0x1de: 0x0e, 0x1df: 0x0e, - 0x1e0: 0x0e, 0x1e1: 0x0e, 0x1e2: 0x0e, 0x1e3: 0x0e, 0x1e4: 0x0e, 0x1e5: 0x0e, 0x1e6: 0x0e, 0x1e7: 0x0e, - 0x1e8: 0x0e, 0x1e9: 0x0e, 0x1ea: 0x0e, 0x1eb: 0x0e, 0x1ec: 0x0e, 0x1ed: 0x0e, 0x1ee: 0x0e, 0x1ef: 0x0e, - 0x1f0: 0x0e, 0x1f1: 0x0e, 0x1f2: 0x0e, 0x1f3: 0x0e, 0x1f4: 0x0e, 0x1f5: 0x0e, 0x1f6: 0x0e, - 0x1f8: 0x0e, 0x1f9: 0x0e, 0x1fa: 0x0e, 0x1fb: 0x0e, 0x1fc: 0x0e, 0x1fd: 0x0e, 0x1fe: 0x0e, 0x1ff: 0x0e, - // Block 0x8, offset 0x200 - 0x200: 0x0e, 0x201: 0x0e, 0x202: 0x0e, 0x203: 0x0e, 0x204: 0x0e, 0x205: 0x0e, 0x206: 0x0e, 0x207: 0x0e, - 0x208: 0x0e, 0x209: 0x0e, 0x20a: 0x0e, 0x20b: 0x0e, 0x20c: 0x0e, 0x20d: 0x0e, 0x20e: 0x0e, 0x20f: 0x0e, - 0x210: 0x0e, 0x211: 0x0e, 0x212: 0x0e, 0x213: 0x0e, 0x214: 0x0e, 0x215: 0x0e, 0x216: 0x0e, 0x217: 0x0e, - 0x218: 0x0e, 0x219: 0x0e, 0x21a: 0x0e, 0x21b: 0x0e, 0x21c: 0x0e, 0x21d: 0x0e, 0x21e: 0x0e, 0x21f: 0x0e, - 0x220: 0x0e, 0x221: 0x0e, 0x222: 0x0e, 0x223: 0x0e, 0x224: 0x0e, 0x225: 0x0e, 0x226: 0x0e, 0x227: 0x0e, - 0x228: 0x0e, 0x229: 0x0e, 0x22a: 0x0e, 0x22b: 0x0e, 0x22c: 0x0e, 0x22d: 0x0e, 0x22e: 0x0e, 0x22f: 0x0e, - 0x230: 0x0e, 0x231: 0x0e, 0x232: 0x0e, 0x233: 0x0e, 0x234: 0x0e, 0x235: 0x0e, 0x236: 0x0e, 0x237: 0x0e, - 0x238: 0x0e, 0x239: 0x0e, 0x23a: 0x0e, 0x23b: 0x0e, 0x23c: 0x0e, 0x23d: 0x0e, 0x23e: 0x0e, 0x23f: 0x0e, - // Block 0x9, offset 0x240 - 0x240: 0x0e, 0x241: 0x0e, 0x242: 0x0e, 0x243: 0x0e, 0x244: 0x0e, 0x245: 0x0e, 0x246: 0x0e, 0x247: 0x0e, - 0x248: 0x0e, 0x249: 0x0e, 0x24a: 0x0e, 0x24b: 0x0e, 0x24c: 0x0e, 0x24d: 0x0e, 0x24e: 0x0e, 0x24f: 0x0e, - 0x250: 0x0e, 0x251: 0x0e, 0x252: 0x3b, 0x253: 0x3c, - 0x265: 0x3d, - 0x270: 0x0e, 0x271: 0x0e, 0x272: 0x0e, 0x273: 0x0e, 0x274: 0x0e, 0x275: 0x0e, 0x276: 0x0e, 0x277: 0x0e, - 0x278: 0x0e, 0x279: 0x0e, 0x27a: 0x0e, 0x27b: 0x0e, 0x27c: 0x0e, 0x27d: 0x0e, 0x27e: 0x0e, 0x27f: 0x0e, - // Block 0xa, offset 0x280 - 0x280: 0x0e, 0x281: 0x0e, 0x282: 0x0e, 0x283: 0x0e, 0x284: 0x0e, 0x285: 0x0e, 0x286: 0x0e, 0x287: 0x0e, - 0x288: 0x0e, 0x289: 0x0e, 0x28a: 0x0e, 0x28b: 0x0e, 0x28c: 0x0e, 0x28d: 0x0e, 0x28e: 0x0e, 0x28f: 0x0e, - 0x290: 0x0e, 0x291: 0x0e, 0x292: 0x0e, 0x293: 0x0e, 0x294: 0x0e, 0x295: 0x0e, 0x296: 0x0e, 0x297: 0x0e, - 0x298: 0x0e, 0x299: 0x0e, 0x29a: 0x0e, 0x29b: 0x0e, 0x29c: 0x0e, 0x29d: 0x0e, 0x29e: 0x3e, - // Block 0xb, offset 0x2c0 - 0x2c0: 0x08, 0x2c1: 0x08, 0x2c2: 0x08, 0x2c3: 0x08, 0x2c4: 0x08, 0x2c5: 0x08, 0x2c6: 0x08, 0x2c7: 0x08, - 0x2c8: 0x08, 0x2c9: 0x08, 0x2ca: 0x08, 0x2cb: 0x08, 0x2cc: 0x08, 0x2cd: 0x08, 0x2ce: 0x08, 0x2cf: 0x08, - 0x2d0: 0x08, 0x2d1: 0x08, 0x2d2: 0x08, 0x2d3: 0x08, 0x2d4: 0x08, 0x2d5: 0x08, 0x2d6: 0x08, 0x2d7: 0x08, - 0x2d8: 0x08, 0x2d9: 0x08, 0x2da: 0x08, 0x2db: 0x08, 0x2dc: 0x08, 0x2dd: 0x08, 0x2de: 0x08, 0x2df: 0x08, - 0x2e0: 0x08, 0x2e1: 0x08, 0x2e2: 0x08, 0x2e3: 0x08, 0x2e4: 0x08, 0x2e5: 0x08, 0x2e6: 0x08, 0x2e7: 0x08, - 0x2e8: 0x08, 0x2e9: 0x08, 0x2ea: 0x08, 0x2eb: 0x08, 0x2ec: 0x08, 0x2ed: 0x08, 0x2ee: 0x08, 0x2ef: 0x08, - 0x2f0: 0x08, 0x2f1: 0x08, 0x2f2: 0x08, 0x2f3: 0x08, 0x2f4: 0x08, 0x2f5: 0x08, 0x2f6: 0x08, 0x2f7: 0x08, - 0x2f8: 0x08, 0x2f9: 0x08, 0x2fa: 0x08, 0x2fb: 0x08, 0x2fc: 0x08, 0x2fd: 0x08, 0x2fe: 0x08, 0x2ff: 0x08, - // Block 0xc, offset 0x300 - 0x300: 0x08, 0x301: 0x08, 0x302: 0x08, 0x303: 0x08, 0x304: 0x08, 0x305: 0x08, 0x306: 0x08, 0x307: 0x08, - 0x308: 0x08, 0x309: 0x08, 0x30a: 0x08, 0x30b: 0x08, 0x30c: 0x08, 0x30d: 0x08, 0x30e: 0x08, 0x30f: 0x08, - 0x310: 0x08, 0x311: 0x08, 0x312: 0x08, 0x313: 0x08, 0x314: 0x08, 0x315: 0x08, 0x316: 0x08, 0x317: 0x08, - 0x318: 0x08, 0x319: 0x08, 0x31a: 0x08, 0x31b: 0x08, 0x31c: 0x08, 0x31d: 0x08, 0x31e: 0x08, 0x31f: 0x08, - 0x320: 0x08, 0x321: 0x08, 0x322: 0x08, 0x323: 0x08, 0x324: 0x0e, 0x325: 0x0e, 0x326: 0x0e, 0x327: 0x0e, - 0x328: 0x0e, 0x329: 0x0e, 0x32a: 0x0e, 0x32b: 0x0e, - 0x338: 0x3f, 0x339: 0x40, 0x33c: 0x41, 0x33d: 0x42, 0x33e: 0x43, 0x33f: 0x44, - // Block 0xd, offset 0x340 - 0x37f: 0x45, - // Block 0xe, offset 0x380 - 0x380: 0x0e, 0x381: 0x0e, 0x382: 0x0e, 0x383: 0x0e, 0x384: 0x0e, 0x385: 0x0e, 0x386: 0x0e, 0x387: 0x0e, - 0x388: 0x0e, 0x389: 0x0e, 0x38a: 0x0e, 0x38b: 0x0e, 0x38c: 0x0e, 0x38d: 0x0e, 0x38e: 0x0e, 0x38f: 0x0e, - 0x390: 0x0e, 0x391: 0x0e, 0x392: 0x0e, 0x393: 0x0e, 0x394: 0x0e, 0x395: 0x0e, 0x396: 0x0e, 0x397: 0x0e, - 0x398: 0x0e, 0x399: 0x0e, 0x39a: 0x0e, 0x39b: 0x0e, 0x39c: 0x0e, 0x39d: 0x0e, 0x39e: 0x0e, 0x39f: 0x46, - 0x3a0: 0x0e, 0x3a1: 0x0e, 0x3a2: 0x0e, 0x3a3: 0x0e, 0x3a4: 0x0e, 0x3a5: 0x0e, 0x3a6: 0x0e, 0x3a7: 0x0e, - 0x3a8: 0x0e, 0x3a9: 0x0e, 0x3aa: 0x0e, 0x3ab: 0x47, - // Block 0xf, offset 0x3c0 - 0x3c0: 0x48, - // Block 0x10, offset 0x400 - 0x400: 0x49, 0x403: 0x4a, 0x404: 0x4b, 0x405: 0x4c, 0x406: 0x4d, - 0x408: 0x4e, 0x409: 0x4f, 0x40c: 0x50, 0x40d: 0x51, 0x40e: 0x52, 0x40f: 0x53, - 0x410: 0x3a, 0x411: 0x54, 0x412: 0x0e, 0x413: 0x55, 0x414: 0x56, 0x415: 0x57, 0x416: 0x58, 0x417: 0x59, - 0x418: 0x0e, 0x419: 0x5a, 0x41a: 0x0e, 0x41b: 0x5b, - 0x424: 0x5c, 0x425: 0x5d, 0x426: 0x5e, 0x427: 0x5f, - // Block 0x11, offset 0x440 - 0x456: 0x0b, 0x457: 0x06, - 0x458: 0x0c, 0x45b: 0x0d, 0x45f: 0x0e, - 0x460: 0x06, 0x461: 0x06, 0x462: 0x06, 0x463: 0x06, 0x464: 0x06, 0x465: 0x06, 0x466: 0x06, 0x467: 0x06, - 0x468: 0x06, 0x469: 0x06, 0x46a: 0x06, 0x46b: 0x06, 0x46c: 0x06, 0x46d: 0x06, 0x46e: 0x06, 0x46f: 0x06, - 0x470: 0x06, 0x471: 0x06, 0x472: 0x06, 0x473: 0x06, 0x474: 0x06, 0x475: 0x06, 0x476: 0x06, 0x477: 0x06, - 0x478: 0x06, 0x479: 0x06, 0x47a: 0x06, 0x47b: 0x06, 0x47c: 0x06, 0x47d: 0x06, 0x47e: 0x06, 0x47f: 0x06, - // Block 0x12, offset 0x480 - 0x484: 0x08, 0x485: 0x08, 0x486: 0x08, 0x487: 0x09, - // Block 0x13, offset 0x4c0 - 0x4c0: 0x08, 0x4c1: 0x08, 0x4c2: 0x08, 0x4c3: 0x08, 0x4c4: 0x08, 0x4c5: 0x08, 0x4c6: 0x08, 0x4c7: 0x08, - 0x4c8: 0x08, 0x4c9: 0x08, 0x4ca: 0x08, 0x4cb: 0x08, 0x4cc: 0x08, 0x4cd: 0x08, 0x4ce: 0x08, 0x4cf: 0x08, - 0x4d0: 0x08, 0x4d1: 0x08, 0x4d2: 0x08, 0x4d3: 0x08, 0x4d4: 0x08, 0x4d5: 0x08, 0x4d6: 0x08, 0x4d7: 0x08, - 0x4d8: 0x08, 0x4d9: 0x08, 0x4da: 0x08, 0x4db: 0x08, 0x4dc: 0x08, 0x4dd: 0x08, 0x4de: 0x08, 0x4df: 0x08, - 0x4e0: 0x08, 0x4e1: 0x08, 0x4e2: 0x08, 0x4e3: 0x08, 0x4e4: 0x08, 0x4e5: 0x08, 0x4e6: 0x08, 0x4e7: 0x08, - 0x4e8: 0x08, 0x4e9: 0x08, 0x4ea: 0x08, 0x4eb: 0x08, 0x4ec: 0x08, 0x4ed: 0x08, 0x4ee: 0x08, 0x4ef: 0x08, - 0x4f0: 0x08, 0x4f1: 0x08, 0x4f2: 0x08, 0x4f3: 0x08, 0x4f4: 0x08, 0x4f5: 0x08, 0x4f6: 0x08, 0x4f7: 0x08, - 0x4f8: 0x08, 0x4f9: 0x08, 0x4fa: 0x08, 0x4fb: 0x08, 0x4fc: 0x08, 0x4fd: 0x08, 0x4fe: 0x08, 0x4ff: 0x60, - // Block 0x14, offset 0x500 - 0x520: 0x10, - 0x530: 0x09, 0x531: 0x09, 0x532: 0x09, 0x533: 0x09, 0x534: 0x09, 0x535: 0x09, 0x536: 0x09, 0x537: 0x09, - 0x538: 0x09, 0x539: 0x09, 0x53a: 0x09, 0x53b: 0x09, 0x53c: 0x09, 0x53d: 0x09, 0x53e: 0x09, 0x53f: 0x11, - // Block 0x15, offset 0x540 - 0x540: 0x09, 0x541: 0x09, 0x542: 0x09, 0x543: 0x09, 0x544: 0x09, 0x545: 0x09, 0x546: 0x09, 0x547: 0x09, - 0x548: 0x09, 0x549: 0x09, 0x54a: 0x09, 0x54b: 0x09, 0x54c: 0x09, 0x54d: 0x09, 0x54e: 0x09, 0x54f: 0x11, -} - -// inverseData contains 4-byte entries of the following format: -// <0 padding> -// The last byte of the UTF-8-encoded rune is xor-ed with the last byte of the -// UTF-8 encoding of the original rune. Mappings often have the following -// pattern: -// A -> A (U+FF21 -> U+0041) -// B -> B (U+FF22 -> U+0042) -// ... -// By xor-ing the last byte the same entry can be shared by many mappings. This -// reduces the total number of distinct entries by about two thirds. -// The resulting entry for the aforementioned mappings is -// { 0x01, 0xE0, 0x00, 0x00 } -// Using this entry to map U+FF21 (UTF-8 [EF BC A1]), we get -// E0 ^ A1 = 41. -// Similarly, for U+FF22 (UTF-8 [EF BC A2]), we get -// E0 ^ A2 = 42. -// Note that because of the xor-ing, the byte sequence stored in the entry is -// not valid UTF-8. -var inverseData = [150][4]byte{ - {0x00, 0x00, 0x00, 0x00}, - {0x03, 0xe3, 0x80, 0xa0}, - {0x03, 0xef, 0xbc, 0xa0}, - {0x03, 0xef, 0xbc, 0xe0}, - {0x03, 0xef, 0xbd, 0xe0}, - {0x03, 0xef, 0xbf, 0x02}, - {0x03, 0xef, 0xbf, 0x00}, - {0x03, 0xef, 0xbf, 0x0e}, - {0x03, 0xef, 0xbf, 0x0c}, - {0x03, 0xef, 0xbf, 0x0f}, - {0x03, 0xef, 0xbf, 0x39}, - {0x03, 0xef, 0xbf, 0x3b}, - {0x03, 0xef, 0xbf, 0x3f}, - {0x03, 0xef, 0xbf, 0x2a}, - {0x03, 0xef, 0xbf, 0x0d}, - {0x03, 0xef, 0xbf, 0x25}, - {0x03, 0xef, 0xbd, 0x1a}, - {0x03, 0xef, 0xbd, 0x26}, - {0x01, 0xa0, 0x00, 0x00}, - {0x03, 0xef, 0xbd, 0x25}, - {0x03, 0xef, 0xbd, 0x23}, - {0x03, 0xef, 0xbd, 0x2e}, - {0x03, 0xef, 0xbe, 0x07}, - {0x03, 0xef, 0xbe, 0x05}, - {0x03, 0xef, 0xbd, 0x06}, - {0x03, 0xef, 0xbd, 0x13}, - {0x03, 0xef, 0xbd, 0x0b}, - {0x03, 0xef, 0xbd, 0x16}, - {0x03, 0xef, 0xbd, 0x0c}, - {0x03, 0xef, 0xbd, 0x15}, - {0x03, 0xef, 0xbd, 0x0d}, - {0x03, 0xef, 0xbd, 0x1c}, - {0x03, 0xef, 0xbd, 0x02}, - {0x03, 0xef, 0xbd, 0x1f}, - {0x03, 0xef, 0xbd, 0x1d}, - {0x03, 0xef, 0xbd, 0x17}, - {0x03, 0xef, 0xbd, 0x08}, - {0x03, 0xef, 0xbd, 0x09}, - {0x03, 0xef, 0xbd, 0x0e}, - {0x03, 0xef, 0xbd, 0x04}, - {0x03, 0xef, 0xbd, 0x05}, - {0x03, 0xef, 0xbe, 0x3f}, - {0x03, 0xef, 0xbe, 0x00}, - {0x03, 0xef, 0xbd, 0x2c}, - {0x03, 0xef, 0xbe, 0x06}, - {0x03, 0xef, 0xbe, 0x0c}, - {0x03, 0xef, 0xbe, 0x0f}, - {0x03, 0xef, 0xbe, 0x0d}, - {0x03, 0xef, 0xbe, 0x0b}, - {0x03, 0xef, 0xbe, 0x19}, - {0x03, 0xef, 0xbe, 0x15}, - {0x03, 0xef, 0xbe, 0x11}, - {0x03, 0xef, 0xbe, 0x31}, - {0x03, 0xef, 0xbe, 0x33}, - {0x03, 0xef, 0xbd, 0x0f}, - {0x03, 0xef, 0xbe, 0x30}, - {0x03, 0xef, 0xbe, 0x3e}, - {0x03, 0xef, 0xbe, 0x32}, - {0x03, 0xef, 0xbe, 0x36}, - {0x03, 0xef, 0xbd, 0x14}, - {0x03, 0xef, 0xbe, 0x2e}, - {0x03, 0xef, 0xbd, 0x1e}, - {0x03, 0xef, 0xbe, 0x10}, - {0x03, 0xef, 0xbf, 0x13}, - {0x03, 0xef, 0xbf, 0x15}, - {0x03, 0xef, 0xbf, 0x17}, - {0x03, 0xef, 0xbf, 0x1f}, - {0x03, 0xef, 0xbf, 0x1d}, - {0x03, 0xef, 0xbf, 0x1b}, - {0x03, 0xef, 0xbf, 0x09}, - {0x03, 0xef, 0xbf, 0x0b}, - {0x03, 0xef, 0xbf, 0x37}, - {0x03, 0xef, 0xbe, 0x04}, - {0x01, 0xe0, 0x00, 0x00}, - {0x03, 0xe2, 0xa6, 0x1a}, - {0x03, 0xe2, 0xa6, 0x26}, - {0x03, 0xe3, 0x80, 0x23}, - {0x03, 0xe3, 0x80, 0x2e}, - {0x03, 0xe3, 0x80, 0x25}, - {0x03, 0xe3, 0x83, 0x1e}, - {0x03, 0xe3, 0x83, 0x14}, - {0x03, 0xe3, 0x82, 0x06}, - {0x03, 0xe3, 0x82, 0x0b}, - {0x03, 0xe3, 0x82, 0x0c}, - {0x03, 0xe3, 0x82, 0x0d}, - {0x03, 0xe3, 0x82, 0x02}, - {0x03, 0xe3, 0x83, 0x0f}, - {0x03, 0xe3, 0x83, 0x08}, - {0x03, 0xe3, 0x83, 0x09}, - {0x03, 0xe3, 0x83, 0x2c}, - {0x03, 0xe3, 0x83, 0x0c}, - {0x03, 0xe3, 0x82, 0x13}, - {0x03, 0xe3, 0x82, 0x16}, - {0x03, 0xe3, 0x82, 0x15}, - {0x03, 0xe3, 0x82, 0x1c}, - {0x03, 0xe3, 0x82, 0x1f}, - {0x03, 0xe3, 0x82, 0x1d}, - {0x03, 0xe3, 0x82, 0x1a}, - {0x03, 0xe3, 0x82, 0x17}, - {0x03, 0xe3, 0x82, 0x08}, - {0x03, 0xe3, 0x82, 0x09}, - {0x03, 0xe3, 0x82, 0x0e}, - {0x03, 0xe3, 0x82, 0x04}, - {0x03, 0xe3, 0x82, 0x05}, - {0x03, 0xe3, 0x82, 0x3f}, - {0x03, 0xe3, 0x83, 0x00}, - {0x03, 0xe3, 0x83, 0x06}, - {0x03, 0xe3, 0x83, 0x05}, - {0x03, 0xe3, 0x83, 0x0d}, - {0x03, 0xe3, 0x83, 0x0b}, - {0x03, 0xe3, 0x83, 0x07}, - {0x03, 0xe3, 0x83, 0x19}, - {0x03, 0xe3, 0x83, 0x15}, - {0x03, 0xe3, 0x83, 0x11}, - {0x03, 0xe3, 0x83, 0x31}, - {0x03, 0xe3, 0x83, 0x33}, - {0x03, 0xe3, 0x83, 0x30}, - {0x03, 0xe3, 0x83, 0x3e}, - {0x03, 0xe3, 0x83, 0x32}, - {0x03, 0xe3, 0x83, 0x36}, - {0x03, 0xe3, 0x83, 0x2e}, - {0x03, 0xe3, 0x82, 0x07}, - {0x03, 0xe3, 0x85, 0x04}, - {0x03, 0xe3, 0x84, 0x10}, - {0x03, 0xe3, 0x85, 0x30}, - {0x03, 0xe3, 0x85, 0x0d}, - {0x03, 0xe3, 0x85, 0x13}, - {0x03, 0xe3, 0x85, 0x15}, - {0x03, 0xe3, 0x85, 0x17}, - {0x03, 0xe3, 0x85, 0x1f}, - {0x03, 0xe3, 0x85, 0x1d}, - {0x03, 0xe3, 0x85, 0x1b}, - {0x03, 0xe3, 0x85, 0x09}, - {0x03, 0xe3, 0x85, 0x0f}, - {0x03, 0xe3, 0x85, 0x0b}, - {0x03, 0xe3, 0x85, 0x37}, - {0x03, 0xe3, 0x85, 0x3b}, - {0x03, 0xe3, 0x85, 0x39}, - {0x03, 0xe3, 0x85, 0x3f}, - {0x02, 0xc2, 0x02, 0x00}, - {0x02, 0xc2, 0x0e, 0x00}, - {0x02, 0xc2, 0x0c, 0x00}, - {0x02, 0xc2, 0x00, 0x00}, - {0x03, 0xe2, 0x82, 0x0f}, - {0x03, 0xe2, 0x94, 0x2a}, - {0x03, 0xe2, 0x86, 0x39}, - {0x03, 0xe2, 0x86, 0x3b}, - {0x03, 0xe2, 0x86, 0x3f}, - {0x03, 0xe2, 0x96, 0x0d}, - {0x03, 0xe2, 0x97, 0x25}, -} - -// Total table size 14680 bytes (14KiB) diff --git a/vendor/golang.org/x/text/width/tables10.0.0.go b/vendor/golang.org/x/text/width/tables10.0.0.go new file mode 100644 index 0000000..f498862 --- /dev/null +++ b/vendor/golang.org/x/text/width/tables10.0.0.go @@ -0,0 +1,1318 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// +build go1.10 + +package width + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "10.0.0" + +// 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 *widthTrie) lookup(s []byte) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return widthValues[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 := widthIndex[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 := widthIndex[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 = widthIndex[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 := widthIndex[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 = widthIndex[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 = widthIndex[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 *widthTrie) lookupUnsafe(s []byte) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return widthValues[c0] + } + i := widthIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = widthIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = widthIndex[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 *widthTrie) lookupString(s string) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return widthValues[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 := widthIndex[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 := widthIndex[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 = widthIndex[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 := widthIndex[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 = widthIndex[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 = widthIndex[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 *widthTrie) lookupStringUnsafe(s string) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return widthValues[c0] + } + i := widthIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = widthIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = widthIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// widthTrie. Total size: 14336 bytes (14.00 KiB). Checksum: c59df54630d3dc4a. +type widthTrie struct{} + +func newWidthTrie(i int) *widthTrie { + return &widthTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *widthTrie) lookupValue(n uint32, b byte) uint16 { + switch { + default: + return uint16(widthValues[n<<6+uint32(b)]) + } +} + +// widthValues: 101 blocks, 6464 entries, 12928 bytes +// The third block is the zero block. +var widthValues = [6464]uint16{ + // Block 0x0, offset 0x0 + 0x20: 0x6001, 0x21: 0x6002, 0x22: 0x6002, 0x23: 0x6002, + 0x24: 0x6002, 0x25: 0x6002, 0x26: 0x6002, 0x27: 0x6002, 0x28: 0x6002, 0x29: 0x6002, + 0x2a: 0x6002, 0x2b: 0x6002, 0x2c: 0x6002, 0x2d: 0x6002, 0x2e: 0x6002, 0x2f: 0x6002, + 0x30: 0x6002, 0x31: 0x6002, 0x32: 0x6002, 0x33: 0x6002, 0x34: 0x6002, 0x35: 0x6002, + 0x36: 0x6002, 0x37: 0x6002, 0x38: 0x6002, 0x39: 0x6002, 0x3a: 0x6002, 0x3b: 0x6002, + 0x3c: 0x6002, 0x3d: 0x6002, 0x3e: 0x6002, 0x3f: 0x6002, + // Block 0x1, offset 0x40 + 0x40: 0x6003, 0x41: 0x6003, 0x42: 0x6003, 0x43: 0x6003, 0x44: 0x6003, 0x45: 0x6003, + 0x46: 0x6003, 0x47: 0x6003, 0x48: 0x6003, 0x49: 0x6003, 0x4a: 0x6003, 0x4b: 0x6003, + 0x4c: 0x6003, 0x4d: 0x6003, 0x4e: 0x6003, 0x4f: 0x6003, 0x50: 0x6003, 0x51: 0x6003, + 0x52: 0x6003, 0x53: 0x6003, 0x54: 0x6003, 0x55: 0x6003, 0x56: 0x6003, 0x57: 0x6003, + 0x58: 0x6003, 0x59: 0x6003, 0x5a: 0x6003, 0x5b: 0x6003, 0x5c: 0x6003, 0x5d: 0x6003, + 0x5e: 0x6003, 0x5f: 0x6003, 0x60: 0x6004, 0x61: 0x6004, 0x62: 0x6004, 0x63: 0x6004, + 0x64: 0x6004, 0x65: 0x6004, 0x66: 0x6004, 0x67: 0x6004, 0x68: 0x6004, 0x69: 0x6004, + 0x6a: 0x6004, 0x6b: 0x6004, 0x6c: 0x6004, 0x6d: 0x6004, 0x6e: 0x6004, 0x6f: 0x6004, + 0x70: 0x6004, 0x71: 0x6004, 0x72: 0x6004, 0x73: 0x6004, 0x74: 0x6004, 0x75: 0x6004, + 0x76: 0x6004, 0x77: 0x6004, 0x78: 0x6004, 0x79: 0x6004, 0x7a: 0x6004, 0x7b: 0x6004, + 0x7c: 0x6004, 0x7d: 0x6004, 0x7e: 0x6004, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xe1: 0x2000, 0xe2: 0x6005, 0xe3: 0x6005, + 0xe4: 0x2000, 0xe5: 0x6006, 0xe6: 0x6005, 0xe7: 0x2000, 0xe8: 0x2000, + 0xea: 0x2000, 0xec: 0x6007, 0xed: 0x2000, 0xee: 0x2000, 0xef: 0x6008, + 0xf0: 0x2000, 0xf1: 0x2000, 0xf2: 0x2000, 0xf3: 0x2000, 0xf4: 0x2000, + 0xf6: 0x2000, 0xf7: 0x2000, 0xf8: 0x2000, 0xf9: 0x2000, 0xfa: 0x2000, + 0xfc: 0x2000, 0xfd: 0x2000, 0xfe: 0x2000, 0xff: 0x2000, + // Block 0x4, offset 0x100 + 0x106: 0x2000, + 0x110: 0x2000, + 0x117: 0x2000, + 0x118: 0x2000, + 0x11e: 0x2000, 0x11f: 0x2000, 0x120: 0x2000, 0x121: 0x2000, + 0x126: 0x2000, 0x128: 0x2000, 0x129: 0x2000, + 0x12a: 0x2000, 0x12c: 0x2000, 0x12d: 0x2000, + 0x130: 0x2000, 0x132: 0x2000, 0x133: 0x2000, + 0x137: 0x2000, 0x138: 0x2000, 0x139: 0x2000, 0x13a: 0x2000, + 0x13c: 0x2000, 0x13e: 0x2000, + // Block 0x5, offset 0x140 + 0x141: 0x2000, + 0x151: 0x2000, + 0x153: 0x2000, + 0x15b: 0x2000, + 0x166: 0x2000, 0x167: 0x2000, + 0x16b: 0x2000, + 0x171: 0x2000, 0x172: 0x2000, 0x173: 0x2000, + 0x178: 0x2000, + 0x17f: 0x2000, + // Block 0x6, offset 0x180 + 0x180: 0x2000, 0x181: 0x2000, 0x182: 0x2000, 0x184: 0x2000, + 0x188: 0x2000, 0x189: 0x2000, 0x18a: 0x2000, 0x18b: 0x2000, + 0x18d: 0x2000, + 0x192: 0x2000, 0x193: 0x2000, + 0x1a6: 0x2000, 0x1a7: 0x2000, + 0x1ab: 0x2000, + // Block 0x7, offset 0x1c0 + 0x1ce: 0x2000, 0x1d0: 0x2000, + 0x1d2: 0x2000, 0x1d4: 0x2000, 0x1d6: 0x2000, + 0x1d8: 0x2000, 0x1da: 0x2000, 0x1dc: 0x2000, + // Block 0x8, offset 0x200 + 0x211: 0x2000, + 0x221: 0x2000, + // Block 0x9, offset 0x240 + 0x244: 0x2000, + 0x247: 0x2000, 0x249: 0x2000, 0x24a: 0x2000, 0x24b: 0x2000, + 0x24d: 0x2000, 0x250: 0x2000, + 0x258: 0x2000, 0x259: 0x2000, 0x25a: 0x2000, 0x25b: 0x2000, 0x25d: 0x2000, + 0x25f: 0x2000, + // Block 0xa, offset 0x280 + 0x280: 0x2000, 0x281: 0x2000, 0x282: 0x2000, 0x283: 0x2000, 0x284: 0x2000, 0x285: 0x2000, + 0x286: 0x2000, 0x287: 0x2000, 0x288: 0x2000, 0x289: 0x2000, 0x28a: 0x2000, 0x28b: 0x2000, + 0x28c: 0x2000, 0x28d: 0x2000, 0x28e: 0x2000, 0x28f: 0x2000, 0x290: 0x2000, 0x291: 0x2000, + 0x292: 0x2000, 0x293: 0x2000, 0x294: 0x2000, 0x295: 0x2000, 0x296: 0x2000, 0x297: 0x2000, + 0x298: 0x2000, 0x299: 0x2000, 0x29a: 0x2000, 0x29b: 0x2000, 0x29c: 0x2000, 0x29d: 0x2000, + 0x29e: 0x2000, 0x29f: 0x2000, 0x2a0: 0x2000, 0x2a1: 0x2000, 0x2a2: 0x2000, 0x2a3: 0x2000, + 0x2a4: 0x2000, 0x2a5: 0x2000, 0x2a6: 0x2000, 0x2a7: 0x2000, 0x2a8: 0x2000, 0x2a9: 0x2000, + 0x2aa: 0x2000, 0x2ab: 0x2000, 0x2ac: 0x2000, 0x2ad: 0x2000, 0x2ae: 0x2000, 0x2af: 0x2000, + 0x2b0: 0x2000, 0x2b1: 0x2000, 0x2b2: 0x2000, 0x2b3: 0x2000, 0x2b4: 0x2000, 0x2b5: 0x2000, + 0x2b6: 0x2000, 0x2b7: 0x2000, 0x2b8: 0x2000, 0x2b9: 0x2000, 0x2ba: 0x2000, 0x2bb: 0x2000, + 0x2bc: 0x2000, 0x2bd: 0x2000, 0x2be: 0x2000, 0x2bf: 0x2000, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x2000, 0x2c1: 0x2000, 0x2c2: 0x2000, 0x2c3: 0x2000, 0x2c4: 0x2000, 0x2c5: 0x2000, + 0x2c6: 0x2000, 0x2c7: 0x2000, 0x2c8: 0x2000, 0x2c9: 0x2000, 0x2ca: 0x2000, 0x2cb: 0x2000, + 0x2cc: 0x2000, 0x2cd: 0x2000, 0x2ce: 0x2000, 0x2cf: 0x2000, 0x2d0: 0x2000, 0x2d1: 0x2000, + 0x2d2: 0x2000, 0x2d3: 0x2000, 0x2d4: 0x2000, 0x2d5: 0x2000, 0x2d6: 0x2000, 0x2d7: 0x2000, + 0x2d8: 0x2000, 0x2d9: 0x2000, 0x2da: 0x2000, 0x2db: 0x2000, 0x2dc: 0x2000, 0x2dd: 0x2000, + 0x2de: 0x2000, 0x2df: 0x2000, 0x2e0: 0x2000, 0x2e1: 0x2000, 0x2e2: 0x2000, 0x2e3: 0x2000, + 0x2e4: 0x2000, 0x2e5: 0x2000, 0x2e6: 0x2000, 0x2e7: 0x2000, 0x2e8: 0x2000, 0x2e9: 0x2000, + 0x2ea: 0x2000, 0x2eb: 0x2000, 0x2ec: 0x2000, 0x2ed: 0x2000, 0x2ee: 0x2000, 0x2ef: 0x2000, + // Block 0xc, offset 0x300 + 0x311: 0x2000, + 0x312: 0x2000, 0x313: 0x2000, 0x314: 0x2000, 0x315: 0x2000, 0x316: 0x2000, 0x317: 0x2000, + 0x318: 0x2000, 0x319: 0x2000, 0x31a: 0x2000, 0x31b: 0x2000, 0x31c: 0x2000, 0x31d: 0x2000, + 0x31e: 0x2000, 0x31f: 0x2000, 0x320: 0x2000, 0x321: 0x2000, 0x323: 0x2000, + 0x324: 0x2000, 0x325: 0x2000, 0x326: 0x2000, 0x327: 0x2000, 0x328: 0x2000, 0x329: 0x2000, + 0x331: 0x2000, 0x332: 0x2000, 0x333: 0x2000, 0x334: 0x2000, 0x335: 0x2000, + 0x336: 0x2000, 0x337: 0x2000, 0x338: 0x2000, 0x339: 0x2000, 0x33a: 0x2000, 0x33b: 0x2000, + 0x33c: 0x2000, 0x33d: 0x2000, 0x33e: 0x2000, 0x33f: 0x2000, + // Block 0xd, offset 0x340 + 0x340: 0x2000, 0x341: 0x2000, 0x343: 0x2000, 0x344: 0x2000, 0x345: 0x2000, + 0x346: 0x2000, 0x347: 0x2000, 0x348: 0x2000, 0x349: 0x2000, + // Block 0xe, offset 0x380 + 0x381: 0x2000, + 0x390: 0x2000, 0x391: 0x2000, + 0x392: 0x2000, 0x393: 0x2000, 0x394: 0x2000, 0x395: 0x2000, 0x396: 0x2000, 0x397: 0x2000, + 0x398: 0x2000, 0x399: 0x2000, 0x39a: 0x2000, 0x39b: 0x2000, 0x39c: 0x2000, 0x39d: 0x2000, + 0x39e: 0x2000, 0x39f: 0x2000, 0x3a0: 0x2000, 0x3a1: 0x2000, 0x3a2: 0x2000, 0x3a3: 0x2000, + 0x3a4: 0x2000, 0x3a5: 0x2000, 0x3a6: 0x2000, 0x3a7: 0x2000, 0x3a8: 0x2000, 0x3a9: 0x2000, + 0x3aa: 0x2000, 0x3ab: 0x2000, 0x3ac: 0x2000, 0x3ad: 0x2000, 0x3ae: 0x2000, 0x3af: 0x2000, + 0x3b0: 0x2000, 0x3b1: 0x2000, 0x3b2: 0x2000, 0x3b3: 0x2000, 0x3b4: 0x2000, 0x3b5: 0x2000, + 0x3b6: 0x2000, 0x3b7: 0x2000, 0x3b8: 0x2000, 0x3b9: 0x2000, 0x3ba: 0x2000, 0x3bb: 0x2000, + 0x3bc: 0x2000, 0x3bd: 0x2000, 0x3be: 0x2000, 0x3bf: 0x2000, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x2000, 0x3c1: 0x2000, 0x3c2: 0x2000, 0x3c3: 0x2000, 0x3c4: 0x2000, 0x3c5: 0x2000, + 0x3c6: 0x2000, 0x3c7: 0x2000, 0x3c8: 0x2000, 0x3c9: 0x2000, 0x3ca: 0x2000, 0x3cb: 0x2000, + 0x3cc: 0x2000, 0x3cd: 0x2000, 0x3ce: 0x2000, 0x3cf: 0x2000, 0x3d1: 0x2000, + // Block 0x10, offset 0x400 + 0x400: 0x4000, 0x401: 0x4000, 0x402: 0x4000, 0x403: 0x4000, 0x404: 0x4000, 0x405: 0x4000, + 0x406: 0x4000, 0x407: 0x4000, 0x408: 0x4000, 0x409: 0x4000, 0x40a: 0x4000, 0x40b: 0x4000, + 0x40c: 0x4000, 0x40d: 0x4000, 0x40e: 0x4000, 0x40f: 0x4000, 0x410: 0x4000, 0x411: 0x4000, + 0x412: 0x4000, 0x413: 0x4000, 0x414: 0x4000, 0x415: 0x4000, 0x416: 0x4000, 0x417: 0x4000, + 0x418: 0x4000, 0x419: 0x4000, 0x41a: 0x4000, 0x41b: 0x4000, 0x41c: 0x4000, 0x41d: 0x4000, + 0x41e: 0x4000, 0x41f: 0x4000, 0x420: 0x4000, 0x421: 0x4000, 0x422: 0x4000, 0x423: 0x4000, + 0x424: 0x4000, 0x425: 0x4000, 0x426: 0x4000, 0x427: 0x4000, 0x428: 0x4000, 0x429: 0x4000, + 0x42a: 0x4000, 0x42b: 0x4000, 0x42c: 0x4000, 0x42d: 0x4000, 0x42e: 0x4000, 0x42f: 0x4000, + 0x430: 0x4000, 0x431: 0x4000, 0x432: 0x4000, 0x433: 0x4000, 0x434: 0x4000, 0x435: 0x4000, + 0x436: 0x4000, 0x437: 0x4000, 0x438: 0x4000, 0x439: 0x4000, 0x43a: 0x4000, 0x43b: 0x4000, + 0x43c: 0x4000, 0x43d: 0x4000, 0x43e: 0x4000, 0x43f: 0x4000, + // Block 0x11, offset 0x440 + 0x440: 0x4000, 0x441: 0x4000, 0x442: 0x4000, 0x443: 0x4000, 0x444: 0x4000, 0x445: 0x4000, + 0x446: 0x4000, 0x447: 0x4000, 0x448: 0x4000, 0x449: 0x4000, 0x44a: 0x4000, 0x44b: 0x4000, + 0x44c: 0x4000, 0x44d: 0x4000, 0x44e: 0x4000, 0x44f: 0x4000, 0x450: 0x4000, 0x451: 0x4000, + 0x452: 0x4000, 0x453: 0x4000, 0x454: 0x4000, 0x455: 0x4000, 0x456: 0x4000, 0x457: 0x4000, + 0x458: 0x4000, 0x459: 0x4000, 0x45a: 0x4000, 0x45b: 0x4000, 0x45c: 0x4000, 0x45d: 0x4000, + 0x45e: 0x4000, 0x45f: 0x4000, + // Block 0x12, offset 0x480 + 0x490: 0x2000, + 0x493: 0x2000, 0x494: 0x2000, 0x495: 0x2000, 0x496: 0x2000, + 0x498: 0x2000, 0x499: 0x2000, 0x49c: 0x2000, 0x49d: 0x2000, + 0x4a0: 0x2000, 0x4a1: 0x2000, 0x4a2: 0x2000, + 0x4a4: 0x2000, 0x4a5: 0x2000, 0x4a6: 0x2000, 0x4a7: 0x2000, + 0x4b0: 0x2000, 0x4b2: 0x2000, 0x4b3: 0x2000, 0x4b5: 0x2000, + 0x4bb: 0x2000, + 0x4be: 0x2000, + // Block 0x13, offset 0x4c0 + 0x4f4: 0x2000, + 0x4ff: 0x2000, + // Block 0x14, offset 0x500 + 0x501: 0x2000, 0x502: 0x2000, 0x503: 0x2000, 0x504: 0x2000, + 0x529: 0xa009, + 0x52c: 0x2000, + // Block 0x15, offset 0x540 + 0x543: 0x2000, 0x545: 0x2000, + 0x549: 0x2000, + 0x553: 0x2000, 0x556: 0x2000, + 0x561: 0x2000, 0x562: 0x2000, + 0x566: 0x2000, + 0x56b: 0x2000, + // Block 0x16, offset 0x580 + 0x593: 0x2000, 0x594: 0x2000, + 0x59b: 0x2000, 0x59c: 0x2000, 0x59d: 0x2000, + 0x59e: 0x2000, 0x5a0: 0x2000, 0x5a1: 0x2000, 0x5a2: 0x2000, 0x5a3: 0x2000, + 0x5a4: 0x2000, 0x5a5: 0x2000, 0x5a6: 0x2000, 0x5a7: 0x2000, 0x5a8: 0x2000, 0x5a9: 0x2000, + 0x5aa: 0x2000, 0x5ab: 0x2000, + 0x5b0: 0x2000, 0x5b1: 0x2000, 0x5b2: 0x2000, 0x5b3: 0x2000, 0x5b4: 0x2000, 0x5b5: 0x2000, + 0x5b6: 0x2000, 0x5b7: 0x2000, 0x5b8: 0x2000, 0x5b9: 0x2000, + // Block 0x17, offset 0x5c0 + 0x5c9: 0x2000, + 0x5d0: 0x200a, 0x5d1: 0x200b, + 0x5d2: 0x200a, 0x5d3: 0x200c, 0x5d4: 0x2000, 0x5d5: 0x2000, 0x5d6: 0x2000, 0x5d7: 0x2000, + 0x5d8: 0x2000, 0x5d9: 0x2000, + 0x5f8: 0x2000, 0x5f9: 0x2000, + // Block 0x18, offset 0x600 + 0x612: 0x2000, 0x614: 0x2000, + 0x627: 0x2000, + // Block 0x19, offset 0x640 + 0x640: 0x2000, 0x642: 0x2000, 0x643: 0x2000, + 0x647: 0x2000, 0x648: 0x2000, 0x64b: 0x2000, + 0x64f: 0x2000, 0x651: 0x2000, + 0x655: 0x2000, + 0x65a: 0x2000, 0x65d: 0x2000, + 0x65e: 0x2000, 0x65f: 0x2000, 0x660: 0x2000, 0x663: 0x2000, + 0x665: 0x2000, 0x667: 0x2000, 0x668: 0x2000, 0x669: 0x2000, + 0x66a: 0x2000, 0x66b: 0x2000, 0x66c: 0x2000, 0x66e: 0x2000, + 0x674: 0x2000, 0x675: 0x2000, + 0x676: 0x2000, 0x677: 0x2000, + 0x67c: 0x2000, 0x67d: 0x2000, + // Block 0x1a, offset 0x680 + 0x688: 0x2000, + 0x68c: 0x2000, + 0x692: 0x2000, + 0x6a0: 0x2000, 0x6a1: 0x2000, + 0x6a4: 0x2000, 0x6a5: 0x2000, 0x6a6: 0x2000, 0x6a7: 0x2000, + 0x6aa: 0x2000, 0x6ab: 0x2000, 0x6ae: 0x2000, 0x6af: 0x2000, + // Block 0x1b, offset 0x6c0 + 0x6c2: 0x2000, 0x6c3: 0x2000, + 0x6c6: 0x2000, 0x6c7: 0x2000, + 0x6d5: 0x2000, + 0x6d9: 0x2000, + 0x6e5: 0x2000, + 0x6ff: 0x2000, + // Block 0x1c, offset 0x700 + 0x712: 0x2000, + 0x71a: 0x4000, 0x71b: 0x4000, + 0x729: 0x4000, + 0x72a: 0x4000, + // Block 0x1d, offset 0x740 + 0x769: 0x4000, + 0x76a: 0x4000, 0x76b: 0x4000, 0x76c: 0x4000, + 0x770: 0x4000, 0x773: 0x4000, + // Block 0x1e, offset 0x780 + 0x7a0: 0x2000, 0x7a1: 0x2000, 0x7a2: 0x2000, 0x7a3: 0x2000, + 0x7a4: 0x2000, 0x7a5: 0x2000, 0x7a6: 0x2000, 0x7a7: 0x2000, 0x7a8: 0x2000, 0x7a9: 0x2000, + 0x7aa: 0x2000, 0x7ab: 0x2000, 0x7ac: 0x2000, 0x7ad: 0x2000, 0x7ae: 0x2000, 0x7af: 0x2000, + 0x7b0: 0x2000, 0x7b1: 0x2000, 0x7b2: 0x2000, 0x7b3: 0x2000, 0x7b4: 0x2000, 0x7b5: 0x2000, + 0x7b6: 0x2000, 0x7b7: 0x2000, 0x7b8: 0x2000, 0x7b9: 0x2000, 0x7ba: 0x2000, 0x7bb: 0x2000, + 0x7bc: 0x2000, 0x7bd: 0x2000, 0x7be: 0x2000, 0x7bf: 0x2000, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x2000, 0x7c1: 0x2000, 0x7c2: 0x2000, 0x7c3: 0x2000, 0x7c4: 0x2000, 0x7c5: 0x2000, + 0x7c6: 0x2000, 0x7c7: 0x2000, 0x7c8: 0x2000, 0x7c9: 0x2000, 0x7ca: 0x2000, 0x7cb: 0x2000, + 0x7cc: 0x2000, 0x7cd: 0x2000, 0x7ce: 0x2000, 0x7cf: 0x2000, 0x7d0: 0x2000, 0x7d1: 0x2000, + 0x7d2: 0x2000, 0x7d3: 0x2000, 0x7d4: 0x2000, 0x7d5: 0x2000, 0x7d6: 0x2000, 0x7d7: 0x2000, + 0x7d8: 0x2000, 0x7d9: 0x2000, 0x7da: 0x2000, 0x7db: 0x2000, 0x7dc: 0x2000, 0x7dd: 0x2000, + 0x7de: 0x2000, 0x7df: 0x2000, 0x7e0: 0x2000, 0x7e1: 0x2000, 0x7e2: 0x2000, 0x7e3: 0x2000, + 0x7e4: 0x2000, 0x7e5: 0x2000, 0x7e6: 0x2000, 0x7e7: 0x2000, 0x7e8: 0x2000, 0x7e9: 0x2000, + 0x7eb: 0x2000, 0x7ec: 0x2000, 0x7ed: 0x2000, 0x7ee: 0x2000, 0x7ef: 0x2000, + 0x7f0: 0x2000, 0x7f1: 0x2000, 0x7f2: 0x2000, 0x7f3: 0x2000, 0x7f4: 0x2000, 0x7f5: 0x2000, + 0x7f6: 0x2000, 0x7f7: 0x2000, 0x7f8: 0x2000, 0x7f9: 0x2000, 0x7fa: 0x2000, 0x7fb: 0x2000, + 0x7fc: 0x2000, 0x7fd: 0x2000, 0x7fe: 0x2000, 0x7ff: 0x2000, + // Block 0x20, offset 0x800 + 0x800: 0x2000, 0x801: 0x2000, 0x802: 0x200d, 0x803: 0x2000, 0x804: 0x2000, 0x805: 0x2000, + 0x806: 0x2000, 0x807: 0x2000, 0x808: 0x2000, 0x809: 0x2000, 0x80a: 0x2000, 0x80b: 0x2000, + 0x80c: 0x2000, 0x80d: 0x2000, 0x80e: 0x2000, 0x80f: 0x2000, 0x810: 0x2000, 0x811: 0x2000, + 0x812: 0x2000, 0x813: 0x2000, 0x814: 0x2000, 0x815: 0x2000, 0x816: 0x2000, 0x817: 0x2000, + 0x818: 0x2000, 0x819: 0x2000, 0x81a: 0x2000, 0x81b: 0x2000, 0x81c: 0x2000, 0x81d: 0x2000, + 0x81e: 0x2000, 0x81f: 0x2000, 0x820: 0x2000, 0x821: 0x2000, 0x822: 0x2000, 0x823: 0x2000, + 0x824: 0x2000, 0x825: 0x2000, 0x826: 0x2000, 0x827: 0x2000, 0x828: 0x2000, 0x829: 0x2000, + 0x82a: 0x2000, 0x82b: 0x2000, 0x82c: 0x2000, 0x82d: 0x2000, 0x82e: 0x2000, 0x82f: 0x2000, + 0x830: 0x2000, 0x831: 0x2000, 0x832: 0x2000, 0x833: 0x2000, 0x834: 0x2000, 0x835: 0x2000, + 0x836: 0x2000, 0x837: 0x2000, 0x838: 0x2000, 0x839: 0x2000, 0x83a: 0x2000, 0x83b: 0x2000, + 0x83c: 0x2000, 0x83d: 0x2000, 0x83e: 0x2000, 0x83f: 0x2000, + // Block 0x21, offset 0x840 + 0x840: 0x2000, 0x841: 0x2000, 0x842: 0x2000, 0x843: 0x2000, 0x844: 0x2000, 0x845: 0x2000, + 0x846: 0x2000, 0x847: 0x2000, 0x848: 0x2000, 0x849: 0x2000, 0x84a: 0x2000, 0x84b: 0x2000, + 0x850: 0x2000, 0x851: 0x2000, + 0x852: 0x2000, 0x853: 0x2000, 0x854: 0x2000, 0x855: 0x2000, 0x856: 0x2000, 0x857: 0x2000, + 0x858: 0x2000, 0x859: 0x2000, 0x85a: 0x2000, 0x85b: 0x2000, 0x85c: 0x2000, 0x85d: 0x2000, + 0x85e: 0x2000, 0x85f: 0x2000, 0x860: 0x2000, 0x861: 0x2000, 0x862: 0x2000, 0x863: 0x2000, + 0x864: 0x2000, 0x865: 0x2000, 0x866: 0x2000, 0x867: 0x2000, 0x868: 0x2000, 0x869: 0x2000, + 0x86a: 0x2000, 0x86b: 0x2000, 0x86c: 0x2000, 0x86d: 0x2000, 0x86e: 0x2000, 0x86f: 0x2000, + 0x870: 0x2000, 0x871: 0x2000, 0x872: 0x2000, 0x873: 0x2000, + // Block 0x22, offset 0x880 + 0x880: 0x2000, 0x881: 0x2000, 0x882: 0x2000, 0x883: 0x2000, 0x884: 0x2000, 0x885: 0x2000, + 0x886: 0x2000, 0x887: 0x2000, 0x888: 0x2000, 0x889: 0x2000, 0x88a: 0x2000, 0x88b: 0x2000, + 0x88c: 0x2000, 0x88d: 0x2000, 0x88e: 0x2000, 0x88f: 0x2000, + 0x892: 0x2000, 0x893: 0x2000, 0x894: 0x2000, 0x895: 0x2000, + 0x8a0: 0x200e, 0x8a1: 0x2000, 0x8a3: 0x2000, + 0x8a4: 0x2000, 0x8a5: 0x2000, 0x8a6: 0x2000, 0x8a7: 0x2000, 0x8a8: 0x2000, 0x8a9: 0x2000, + 0x8b2: 0x2000, 0x8b3: 0x2000, + 0x8b6: 0x2000, 0x8b7: 0x2000, + 0x8bc: 0x2000, 0x8bd: 0x2000, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x2000, 0x8c1: 0x2000, + 0x8c6: 0x2000, 0x8c7: 0x2000, 0x8c8: 0x2000, 0x8cb: 0x200f, + 0x8ce: 0x2000, 0x8cf: 0x2000, 0x8d0: 0x2000, 0x8d1: 0x2000, + 0x8e2: 0x2000, 0x8e3: 0x2000, + 0x8e4: 0x2000, 0x8e5: 0x2000, + 0x8ef: 0x2000, + 0x8fd: 0x4000, 0x8fe: 0x4000, + // Block 0x24, offset 0x900 + 0x905: 0x2000, + 0x906: 0x2000, 0x909: 0x2000, + 0x90e: 0x2000, 0x90f: 0x2000, + 0x914: 0x4000, 0x915: 0x4000, + 0x91c: 0x2000, + 0x91e: 0x2000, + // Block 0x25, offset 0x940 + 0x940: 0x2000, 0x942: 0x2000, + 0x948: 0x4000, 0x949: 0x4000, 0x94a: 0x4000, 0x94b: 0x4000, + 0x94c: 0x4000, 0x94d: 0x4000, 0x94e: 0x4000, 0x94f: 0x4000, 0x950: 0x4000, 0x951: 0x4000, + 0x952: 0x4000, 0x953: 0x4000, + 0x960: 0x2000, 0x961: 0x2000, 0x963: 0x2000, + 0x964: 0x2000, 0x965: 0x2000, 0x967: 0x2000, 0x968: 0x2000, 0x969: 0x2000, + 0x96a: 0x2000, 0x96c: 0x2000, 0x96d: 0x2000, 0x96f: 0x2000, + 0x97f: 0x4000, + // Block 0x26, offset 0x980 + 0x993: 0x4000, + 0x99e: 0x2000, 0x99f: 0x2000, 0x9a1: 0x4000, + 0x9aa: 0x4000, 0x9ab: 0x4000, + 0x9bd: 0x4000, 0x9be: 0x4000, 0x9bf: 0x2000, + // Block 0x27, offset 0x9c0 + 0x9c4: 0x4000, 0x9c5: 0x4000, + 0x9c6: 0x2000, 0x9c7: 0x2000, 0x9c8: 0x2000, 0x9c9: 0x2000, 0x9ca: 0x2000, 0x9cb: 0x2000, + 0x9cc: 0x2000, 0x9cd: 0x2000, 0x9ce: 0x4000, 0x9cf: 0x2000, 0x9d0: 0x2000, 0x9d1: 0x2000, + 0x9d2: 0x2000, 0x9d3: 0x2000, 0x9d4: 0x4000, 0x9d5: 0x2000, 0x9d6: 0x2000, 0x9d7: 0x2000, + 0x9d8: 0x2000, 0x9d9: 0x2000, 0x9da: 0x2000, 0x9db: 0x2000, 0x9dc: 0x2000, 0x9dd: 0x2000, + 0x9de: 0x2000, 0x9df: 0x2000, 0x9e0: 0x2000, 0x9e1: 0x2000, 0x9e3: 0x2000, + 0x9e8: 0x2000, 0x9e9: 0x2000, + 0x9ea: 0x4000, 0x9eb: 0x2000, 0x9ec: 0x2000, 0x9ed: 0x2000, 0x9ee: 0x2000, 0x9ef: 0x2000, + 0x9f0: 0x2000, 0x9f1: 0x2000, 0x9f2: 0x4000, 0x9f3: 0x4000, 0x9f4: 0x2000, 0x9f5: 0x4000, + 0x9f6: 0x2000, 0x9f7: 0x2000, 0x9f8: 0x2000, 0x9f9: 0x2000, 0x9fa: 0x4000, 0x9fb: 0x2000, + 0x9fc: 0x2000, 0x9fd: 0x4000, 0x9fe: 0x2000, 0x9ff: 0x2000, + // Block 0x28, offset 0xa00 + 0xa05: 0x4000, + 0xa0a: 0x4000, 0xa0b: 0x4000, + 0xa28: 0x4000, + 0xa3d: 0x2000, + // Block 0x29, offset 0xa40 + 0xa4c: 0x4000, 0xa4e: 0x4000, + 0xa53: 0x4000, 0xa54: 0x4000, 0xa55: 0x4000, 0xa57: 0x4000, + 0xa76: 0x2000, 0xa77: 0x2000, 0xa78: 0x2000, 0xa79: 0x2000, 0xa7a: 0x2000, 0xa7b: 0x2000, + 0xa7c: 0x2000, 0xa7d: 0x2000, 0xa7e: 0x2000, 0xa7f: 0x2000, + // Block 0x2a, offset 0xa80 + 0xa95: 0x4000, 0xa96: 0x4000, 0xa97: 0x4000, + 0xab0: 0x4000, + 0xabf: 0x4000, + // Block 0x2b, offset 0xac0 + 0xae6: 0x6000, 0xae7: 0x6000, 0xae8: 0x6000, 0xae9: 0x6000, + 0xaea: 0x6000, 0xaeb: 0x6000, 0xaec: 0x6000, 0xaed: 0x6000, + // Block 0x2c, offset 0xb00 + 0xb05: 0x6010, + 0xb06: 0x6011, + // Block 0x2d, offset 0xb40 + 0xb5b: 0x4000, 0xb5c: 0x4000, + // Block 0x2e, offset 0xb80 + 0xb90: 0x4000, + 0xb95: 0x4000, 0xb96: 0x2000, 0xb97: 0x2000, + 0xb98: 0x2000, 0xb99: 0x2000, + // Block 0x2f, offset 0xbc0 + 0xbc0: 0x4000, 0xbc1: 0x4000, 0xbc2: 0x4000, 0xbc3: 0x4000, 0xbc4: 0x4000, 0xbc5: 0x4000, + 0xbc6: 0x4000, 0xbc7: 0x4000, 0xbc8: 0x4000, 0xbc9: 0x4000, 0xbca: 0x4000, 0xbcb: 0x4000, + 0xbcc: 0x4000, 0xbcd: 0x4000, 0xbce: 0x4000, 0xbcf: 0x4000, 0xbd0: 0x4000, 0xbd1: 0x4000, + 0xbd2: 0x4000, 0xbd3: 0x4000, 0xbd4: 0x4000, 0xbd5: 0x4000, 0xbd6: 0x4000, 0xbd7: 0x4000, + 0xbd8: 0x4000, 0xbd9: 0x4000, 0xbdb: 0x4000, 0xbdc: 0x4000, 0xbdd: 0x4000, + 0xbde: 0x4000, 0xbdf: 0x4000, 0xbe0: 0x4000, 0xbe1: 0x4000, 0xbe2: 0x4000, 0xbe3: 0x4000, + 0xbe4: 0x4000, 0xbe5: 0x4000, 0xbe6: 0x4000, 0xbe7: 0x4000, 0xbe8: 0x4000, 0xbe9: 0x4000, + 0xbea: 0x4000, 0xbeb: 0x4000, 0xbec: 0x4000, 0xbed: 0x4000, 0xbee: 0x4000, 0xbef: 0x4000, + 0xbf0: 0x4000, 0xbf1: 0x4000, 0xbf2: 0x4000, 0xbf3: 0x4000, 0xbf4: 0x4000, 0xbf5: 0x4000, + 0xbf6: 0x4000, 0xbf7: 0x4000, 0xbf8: 0x4000, 0xbf9: 0x4000, 0xbfa: 0x4000, 0xbfb: 0x4000, + 0xbfc: 0x4000, 0xbfd: 0x4000, 0xbfe: 0x4000, 0xbff: 0x4000, + // Block 0x30, offset 0xc00 + 0xc00: 0x4000, 0xc01: 0x4000, 0xc02: 0x4000, 0xc03: 0x4000, 0xc04: 0x4000, 0xc05: 0x4000, + 0xc06: 0x4000, 0xc07: 0x4000, 0xc08: 0x4000, 0xc09: 0x4000, 0xc0a: 0x4000, 0xc0b: 0x4000, + 0xc0c: 0x4000, 0xc0d: 0x4000, 0xc0e: 0x4000, 0xc0f: 0x4000, 0xc10: 0x4000, 0xc11: 0x4000, + 0xc12: 0x4000, 0xc13: 0x4000, 0xc14: 0x4000, 0xc15: 0x4000, 0xc16: 0x4000, 0xc17: 0x4000, + 0xc18: 0x4000, 0xc19: 0x4000, 0xc1a: 0x4000, 0xc1b: 0x4000, 0xc1c: 0x4000, 0xc1d: 0x4000, + 0xc1e: 0x4000, 0xc1f: 0x4000, 0xc20: 0x4000, 0xc21: 0x4000, 0xc22: 0x4000, 0xc23: 0x4000, + 0xc24: 0x4000, 0xc25: 0x4000, 0xc26: 0x4000, 0xc27: 0x4000, 0xc28: 0x4000, 0xc29: 0x4000, + 0xc2a: 0x4000, 0xc2b: 0x4000, 0xc2c: 0x4000, 0xc2d: 0x4000, 0xc2e: 0x4000, 0xc2f: 0x4000, + 0xc30: 0x4000, 0xc31: 0x4000, 0xc32: 0x4000, 0xc33: 0x4000, + // Block 0x31, offset 0xc40 + 0xc40: 0x4000, 0xc41: 0x4000, 0xc42: 0x4000, 0xc43: 0x4000, 0xc44: 0x4000, 0xc45: 0x4000, + 0xc46: 0x4000, 0xc47: 0x4000, 0xc48: 0x4000, 0xc49: 0x4000, 0xc4a: 0x4000, 0xc4b: 0x4000, + 0xc4c: 0x4000, 0xc4d: 0x4000, 0xc4e: 0x4000, 0xc4f: 0x4000, 0xc50: 0x4000, 0xc51: 0x4000, + 0xc52: 0x4000, 0xc53: 0x4000, 0xc54: 0x4000, 0xc55: 0x4000, + 0xc70: 0x4000, 0xc71: 0x4000, 0xc72: 0x4000, 0xc73: 0x4000, 0xc74: 0x4000, 0xc75: 0x4000, + 0xc76: 0x4000, 0xc77: 0x4000, 0xc78: 0x4000, 0xc79: 0x4000, 0xc7a: 0x4000, 0xc7b: 0x4000, + // Block 0x32, offset 0xc80 + 0xc80: 0x9012, 0xc81: 0x4013, 0xc82: 0x4014, 0xc83: 0x4000, 0xc84: 0x4000, 0xc85: 0x4000, + 0xc86: 0x4000, 0xc87: 0x4000, 0xc88: 0x4000, 0xc89: 0x4000, 0xc8a: 0x4000, 0xc8b: 0x4000, + 0xc8c: 0x4015, 0xc8d: 0x4015, 0xc8e: 0x4000, 0xc8f: 0x4000, 0xc90: 0x4000, 0xc91: 0x4000, + 0xc92: 0x4000, 0xc93: 0x4000, 0xc94: 0x4000, 0xc95: 0x4000, 0xc96: 0x4000, 0xc97: 0x4000, + 0xc98: 0x4000, 0xc99: 0x4000, 0xc9a: 0x4000, 0xc9b: 0x4000, 0xc9c: 0x4000, 0xc9d: 0x4000, + 0xc9e: 0x4000, 0xc9f: 0x4000, 0xca0: 0x4000, 0xca1: 0x4000, 0xca2: 0x4000, 0xca3: 0x4000, + 0xca4: 0x4000, 0xca5: 0x4000, 0xca6: 0x4000, 0xca7: 0x4000, 0xca8: 0x4000, 0xca9: 0x4000, + 0xcaa: 0x4000, 0xcab: 0x4000, 0xcac: 0x4000, 0xcad: 0x4000, 0xcae: 0x4000, 0xcaf: 0x4000, + 0xcb0: 0x4000, 0xcb1: 0x4000, 0xcb2: 0x4000, 0xcb3: 0x4000, 0xcb4: 0x4000, 0xcb5: 0x4000, + 0xcb6: 0x4000, 0xcb7: 0x4000, 0xcb8: 0x4000, 0xcb9: 0x4000, 0xcba: 0x4000, 0xcbb: 0x4000, + 0xcbc: 0x4000, 0xcbd: 0x4000, 0xcbe: 0x4000, + // Block 0x33, offset 0xcc0 + 0xcc1: 0x4000, 0xcc2: 0x4000, 0xcc3: 0x4000, 0xcc4: 0x4000, 0xcc5: 0x4000, + 0xcc6: 0x4000, 0xcc7: 0x4000, 0xcc8: 0x4000, 0xcc9: 0x4000, 0xcca: 0x4000, 0xccb: 0x4000, + 0xccc: 0x4000, 0xccd: 0x4000, 0xcce: 0x4000, 0xccf: 0x4000, 0xcd0: 0x4000, 0xcd1: 0x4000, + 0xcd2: 0x4000, 0xcd3: 0x4000, 0xcd4: 0x4000, 0xcd5: 0x4000, 0xcd6: 0x4000, 0xcd7: 0x4000, + 0xcd8: 0x4000, 0xcd9: 0x4000, 0xcda: 0x4000, 0xcdb: 0x4000, 0xcdc: 0x4000, 0xcdd: 0x4000, + 0xcde: 0x4000, 0xcdf: 0x4000, 0xce0: 0x4000, 0xce1: 0x4000, 0xce2: 0x4000, 0xce3: 0x4000, + 0xce4: 0x4000, 0xce5: 0x4000, 0xce6: 0x4000, 0xce7: 0x4000, 0xce8: 0x4000, 0xce9: 0x4000, + 0xcea: 0x4000, 0xceb: 0x4000, 0xcec: 0x4000, 0xced: 0x4000, 0xcee: 0x4000, 0xcef: 0x4000, + 0xcf0: 0x4000, 0xcf1: 0x4000, 0xcf2: 0x4000, 0xcf3: 0x4000, 0xcf4: 0x4000, 0xcf5: 0x4000, + 0xcf6: 0x4000, 0xcf7: 0x4000, 0xcf8: 0x4000, 0xcf9: 0x4000, 0xcfa: 0x4000, 0xcfb: 0x4000, + 0xcfc: 0x4000, 0xcfd: 0x4000, 0xcfe: 0x4000, 0xcff: 0x4000, + // Block 0x34, offset 0xd00 + 0xd00: 0x4000, 0xd01: 0x4000, 0xd02: 0x4000, 0xd03: 0x4000, 0xd04: 0x4000, 0xd05: 0x4000, + 0xd06: 0x4000, 0xd07: 0x4000, 0xd08: 0x4000, 0xd09: 0x4000, 0xd0a: 0x4000, 0xd0b: 0x4000, + 0xd0c: 0x4000, 0xd0d: 0x4000, 0xd0e: 0x4000, 0xd0f: 0x4000, 0xd10: 0x4000, 0xd11: 0x4000, + 0xd12: 0x4000, 0xd13: 0x4000, 0xd14: 0x4000, 0xd15: 0x4000, 0xd16: 0x4000, + 0xd19: 0x4016, 0xd1a: 0x4017, 0xd1b: 0x4000, 0xd1c: 0x4000, 0xd1d: 0x4000, + 0xd1e: 0x4000, 0xd1f: 0x4000, 0xd20: 0x4000, 0xd21: 0x4018, 0xd22: 0x4019, 0xd23: 0x401a, + 0xd24: 0x401b, 0xd25: 0x401c, 0xd26: 0x401d, 0xd27: 0x401e, 0xd28: 0x401f, 0xd29: 0x4020, + 0xd2a: 0x4021, 0xd2b: 0x4022, 0xd2c: 0x4000, 0xd2d: 0x4010, 0xd2e: 0x4000, 0xd2f: 0x4023, + 0xd30: 0x4000, 0xd31: 0x4024, 0xd32: 0x4000, 0xd33: 0x4025, 0xd34: 0x4000, 0xd35: 0x4026, + 0xd36: 0x4000, 0xd37: 0x401a, 0xd38: 0x4000, 0xd39: 0x4027, 0xd3a: 0x4000, 0xd3b: 0x4028, + 0xd3c: 0x4000, 0xd3d: 0x4020, 0xd3e: 0x4000, 0xd3f: 0x4029, + // Block 0x35, offset 0xd40 + 0xd40: 0x4000, 0xd41: 0x402a, 0xd42: 0x4000, 0xd43: 0x402b, 0xd44: 0x402c, 0xd45: 0x4000, + 0xd46: 0x4017, 0xd47: 0x4000, 0xd48: 0x402d, 0xd49: 0x4000, 0xd4a: 0x402e, 0xd4b: 0x402f, + 0xd4c: 0x4030, 0xd4d: 0x4017, 0xd4e: 0x4016, 0xd4f: 0x4017, 0xd50: 0x4000, 0xd51: 0x4000, + 0xd52: 0x4031, 0xd53: 0x4000, 0xd54: 0x4000, 0xd55: 0x4031, 0xd56: 0x4000, 0xd57: 0x4000, + 0xd58: 0x4032, 0xd59: 0x4000, 0xd5a: 0x4000, 0xd5b: 0x4032, 0xd5c: 0x4000, 0xd5d: 0x4000, + 0xd5e: 0x4033, 0xd5f: 0x402e, 0xd60: 0x4034, 0xd61: 0x4035, 0xd62: 0x4034, 0xd63: 0x4036, + 0xd64: 0x4037, 0xd65: 0x4024, 0xd66: 0x4035, 0xd67: 0x4025, 0xd68: 0x4038, 0xd69: 0x4038, + 0xd6a: 0x4039, 0xd6b: 0x4039, 0xd6c: 0x403a, 0xd6d: 0x403a, 0xd6e: 0x4000, 0xd6f: 0x4035, + 0xd70: 0x4000, 0xd71: 0x4000, 0xd72: 0x403b, 0xd73: 0x403c, 0xd74: 0x4000, 0xd75: 0x4000, + 0xd76: 0x4000, 0xd77: 0x4000, 0xd78: 0x4000, 0xd79: 0x4000, 0xd7a: 0x4000, 0xd7b: 0x403d, + 0xd7c: 0x401c, 0xd7d: 0x4000, 0xd7e: 0x4000, 0xd7f: 0x4000, + // Block 0x36, offset 0xd80 + 0xd85: 0x4000, + 0xd86: 0x4000, 0xd87: 0x4000, 0xd88: 0x4000, 0xd89: 0x4000, 0xd8a: 0x4000, 0xd8b: 0x4000, + 0xd8c: 0x4000, 0xd8d: 0x4000, 0xd8e: 0x4000, 0xd8f: 0x4000, 0xd90: 0x4000, 0xd91: 0x4000, + 0xd92: 0x4000, 0xd93: 0x4000, 0xd94: 0x4000, 0xd95: 0x4000, 0xd96: 0x4000, 0xd97: 0x4000, + 0xd98: 0x4000, 0xd99: 0x4000, 0xd9a: 0x4000, 0xd9b: 0x4000, 0xd9c: 0x4000, 0xd9d: 0x4000, + 0xd9e: 0x4000, 0xd9f: 0x4000, 0xda0: 0x4000, 0xda1: 0x4000, 0xda2: 0x4000, 0xda3: 0x4000, + 0xda4: 0x4000, 0xda5: 0x4000, 0xda6: 0x4000, 0xda7: 0x4000, 0xda8: 0x4000, 0xda9: 0x4000, + 0xdaa: 0x4000, 0xdab: 0x4000, 0xdac: 0x4000, 0xdad: 0x4000, 0xdae: 0x4000, + 0xdb1: 0x403e, 0xdb2: 0x403e, 0xdb3: 0x403e, 0xdb4: 0x403e, 0xdb5: 0x403e, + 0xdb6: 0x403e, 0xdb7: 0x403e, 0xdb8: 0x403e, 0xdb9: 0x403e, 0xdba: 0x403e, 0xdbb: 0x403e, + 0xdbc: 0x403e, 0xdbd: 0x403e, 0xdbe: 0x403e, 0xdbf: 0x403e, + // Block 0x37, offset 0xdc0 + 0xdc0: 0x4037, 0xdc1: 0x4037, 0xdc2: 0x4037, 0xdc3: 0x4037, 0xdc4: 0x4037, 0xdc5: 0x4037, + 0xdc6: 0x4037, 0xdc7: 0x4037, 0xdc8: 0x4037, 0xdc9: 0x4037, 0xdca: 0x4037, 0xdcb: 0x4037, + 0xdcc: 0x4037, 0xdcd: 0x4037, 0xdce: 0x4037, 0xdcf: 0x400e, 0xdd0: 0x403f, 0xdd1: 0x4040, + 0xdd2: 0x4041, 0xdd3: 0x4040, 0xdd4: 0x403f, 0xdd5: 0x4042, 0xdd6: 0x4043, 0xdd7: 0x4044, + 0xdd8: 0x4040, 0xdd9: 0x4041, 0xdda: 0x4040, 0xddb: 0x4045, 0xddc: 0x4009, 0xddd: 0x4045, + 0xdde: 0x4046, 0xddf: 0x4045, 0xde0: 0x4047, 0xde1: 0x400b, 0xde2: 0x400a, 0xde3: 0x400c, + 0xde4: 0x4048, 0xde5: 0x4000, 0xde6: 0x4000, 0xde7: 0x4000, 0xde8: 0x4000, 0xde9: 0x4000, + 0xdea: 0x4000, 0xdeb: 0x4000, 0xdec: 0x4000, 0xded: 0x4000, 0xdee: 0x4000, 0xdef: 0x4000, + 0xdf0: 0x4000, 0xdf1: 0x4000, 0xdf2: 0x4000, 0xdf3: 0x4000, 0xdf4: 0x4000, 0xdf5: 0x4000, + 0xdf6: 0x4000, 0xdf7: 0x4000, 0xdf8: 0x4000, 0xdf9: 0x4000, 0xdfa: 0x4000, 0xdfb: 0x4000, + 0xdfc: 0x4000, 0xdfd: 0x4000, 0xdfe: 0x4000, 0xdff: 0x4000, + // Block 0x38, offset 0xe00 + 0xe00: 0x4000, 0xe01: 0x4000, 0xe02: 0x4000, 0xe03: 0x4000, 0xe04: 0x4000, 0xe05: 0x4000, + 0xe06: 0x4000, 0xe07: 0x4000, 0xe08: 0x4000, 0xe09: 0x4000, 0xe0a: 0x4000, 0xe0b: 0x4000, + 0xe0c: 0x4000, 0xe0d: 0x4000, 0xe0e: 0x4000, 0xe10: 0x4000, 0xe11: 0x4000, + 0xe12: 0x4000, 0xe13: 0x4000, 0xe14: 0x4000, 0xe15: 0x4000, 0xe16: 0x4000, 0xe17: 0x4000, + 0xe18: 0x4000, 0xe19: 0x4000, 0xe1a: 0x4000, 0xe1b: 0x4000, 0xe1c: 0x4000, 0xe1d: 0x4000, + 0xe1e: 0x4000, 0xe1f: 0x4000, 0xe20: 0x4000, 0xe21: 0x4000, 0xe22: 0x4000, 0xe23: 0x4000, + 0xe24: 0x4000, 0xe25: 0x4000, 0xe26: 0x4000, 0xe27: 0x4000, 0xe28: 0x4000, 0xe29: 0x4000, + 0xe2a: 0x4000, 0xe2b: 0x4000, 0xe2c: 0x4000, 0xe2d: 0x4000, 0xe2e: 0x4000, 0xe2f: 0x4000, + 0xe30: 0x4000, 0xe31: 0x4000, 0xe32: 0x4000, 0xe33: 0x4000, 0xe34: 0x4000, 0xe35: 0x4000, + 0xe36: 0x4000, 0xe37: 0x4000, 0xe38: 0x4000, 0xe39: 0x4000, 0xe3a: 0x4000, + // Block 0x39, offset 0xe40 + 0xe40: 0x4000, 0xe41: 0x4000, 0xe42: 0x4000, 0xe43: 0x4000, 0xe44: 0x4000, 0xe45: 0x4000, + 0xe46: 0x4000, 0xe47: 0x4000, 0xe48: 0x4000, 0xe49: 0x4000, 0xe4a: 0x4000, 0xe4b: 0x4000, + 0xe4c: 0x4000, 0xe4d: 0x4000, 0xe4e: 0x4000, 0xe4f: 0x4000, 0xe50: 0x4000, 0xe51: 0x4000, + 0xe52: 0x4000, 0xe53: 0x4000, 0xe54: 0x4000, 0xe55: 0x4000, 0xe56: 0x4000, 0xe57: 0x4000, + 0xe58: 0x4000, 0xe59: 0x4000, 0xe5a: 0x4000, 0xe5b: 0x4000, 0xe5c: 0x4000, 0xe5d: 0x4000, + 0xe5e: 0x4000, 0xe5f: 0x4000, 0xe60: 0x4000, 0xe61: 0x4000, 0xe62: 0x4000, 0xe63: 0x4000, + 0xe70: 0x4000, 0xe71: 0x4000, 0xe72: 0x4000, 0xe73: 0x4000, 0xe74: 0x4000, 0xe75: 0x4000, + 0xe76: 0x4000, 0xe77: 0x4000, 0xe78: 0x4000, 0xe79: 0x4000, 0xe7a: 0x4000, 0xe7b: 0x4000, + 0xe7c: 0x4000, 0xe7d: 0x4000, 0xe7e: 0x4000, 0xe7f: 0x4000, + // Block 0x3a, offset 0xe80 + 0xe80: 0x4000, 0xe81: 0x4000, 0xe82: 0x4000, 0xe83: 0x4000, 0xe84: 0x4000, 0xe85: 0x4000, + 0xe86: 0x4000, 0xe87: 0x4000, 0xe88: 0x4000, 0xe89: 0x4000, 0xe8a: 0x4000, 0xe8b: 0x4000, + 0xe8c: 0x4000, 0xe8d: 0x4000, 0xe8e: 0x4000, 0xe8f: 0x4000, 0xe90: 0x4000, 0xe91: 0x4000, + 0xe92: 0x4000, 0xe93: 0x4000, 0xe94: 0x4000, 0xe95: 0x4000, 0xe96: 0x4000, 0xe97: 0x4000, + 0xe98: 0x4000, 0xe99: 0x4000, 0xe9a: 0x4000, 0xe9b: 0x4000, 0xe9c: 0x4000, 0xe9d: 0x4000, + 0xe9e: 0x4000, 0xea0: 0x4000, 0xea1: 0x4000, 0xea2: 0x4000, 0xea3: 0x4000, + 0xea4: 0x4000, 0xea5: 0x4000, 0xea6: 0x4000, 0xea7: 0x4000, 0xea8: 0x4000, 0xea9: 0x4000, + 0xeaa: 0x4000, 0xeab: 0x4000, 0xeac: 0x4000, 0xead: 0x4000, 0xeae: 0x4000, 0xeaf: 0x4000, + 0xeb0: 0x4000, 0xeb1: 0x4000, 0xeb2: 0x4000, 0xeb3: 0x4000, 0xeb4: 0x4000, 0xeb5: 0x4000, + 0xeb6: 0x4000, 0xeb7: 0x4000, 0xeb8: 0x4000, 0xeb9: 0x4000, 0xeba: 0x4000, 0xebb: 0x4000, + 0xebc: 0x4000, 0xebd: 0x4000, 0xebe: 0x4000, 0xebf: 0x4000, + // Block 0x3b, offset 0xec0 + 0xec0: 0x4000, 0xec1: 0x4000, 0xec2: 0x4000, 0xec3: 0x4000, 0xec4: 0x4000, 0xec5: 0x4000, + 0xec6: 0x4000, 0xec7: 0x4000, 0xec8: 0x2000, 0xec9: 0x2000, 0xeca: 0x2000, 0xecb: 0x2000, + 0xecc: 0x2000, 0xecd: 0x2000, 0xece: 0x2000, 0xecf: 0x2000, 0xed0: 0x4000, 0xed1: 0x4000, + 0xed2: 0x4000, 0xed3: 0x4000, 0xed4: 0x4000, 0xed5: 0x4000, 0xed6: 0x4000, 0xed7: 0x4000, + 0xed8: 0x4000, 0xed9: 0x4000, 0xeda: 0x4000, 0xedb: 0x4000, 0xedc: 0x4000, 0xedd: 0x4000, + 0xede: 0x4000, 0xedf: 0x4000, 0xee0: 0x4000, 0xee1: 0x4000, 0xee2: 0x4000, 0xee3: 0x4000, + 0xee4: 0x4000, 0xee5: 0x4000, 0xee6: 0x4000, 0xee7: 0x4000, 0xee8: 0x4000, 0xee9: 0x4000, + 0xeea: 0x4000, 0xeeb: 0x4000, 0xeec: 0x4000, 0xeed: 0x4000, 0xeee: 0x4000, 0xeef: 0x4000, + 0xef0: 0x4000, 0xef1: 0x4000, 0xef2: 0x4000, 0xef3: 0x4000, 0xef4: 0x4000, 0xef5: 0x4000, + 0xef6: 0x4000, 0xef7: 0x4000, 0xef8: 0x4000, 0xef9: 0x4000, 0xefa: 0x4000, 0xefb: 0x4000, + 0xefc: 0x4000, 0xefd: 0x4000, 0xefe: 0x4000, 0xeff: 0x4000, + // Block 0x3c, offset 0xf00 + 0xf00: 0x4000, 0xf01: 0x4000, 0xf02: 0x4000, 0xf03: 0x4000, 0xf04: 0x4000, 0xf05: 0x4000, + 0xf06: 0x4000, 0xf07: 0x4000, 0xf08: 0x4000, 0xf09: 0x4000, 0xf0a: 0x4000, 0xf0b: 0x4000, + 0xf0c: 0x4000, 0xf0d: 0x4000, 0xf0e: 0x4000, 0xf0f: 0x4000, 0xf10: 0x4000, 0xf11: 0x4000, + 0xf12: 0x4000, 0xf13: 0x4000, 0xf14: 0x4000, 0xf15: 0x4000, 0xf16: 0x4000, 0xf17: 0x4000, + 0xf18: 0x4000, 0xf19: 0x4000, 0xf1a: 0x4000, 0xf1b: 0x4000, 0xf1c: 0x4000, 0xf1d: 0x4000, + 0xf1e: 0x4000, 0xf1f: 0x4000, 0xf20: 0x4000, 0xf21: 0x4000, 0xf22: 0x4000, 0xf23: 0x4000, + 0xf24: 0x4000, 0xf25: 0x4000, 0xf26: 0x4000, 0xf27: 0x4000, 0xf28: 0x4000, 0xf29: 0x4000, + 0xf2a: 0x4000, 0xf2b: 0x4000, 0xf2c: 0x4000, 0xf2d: 0x4000, 0xf2e: 0x4000, 0xf2f: 0x4000, + 0xf30: 0x4000, 0xf31: 0x4000, 0xf32: 0x4000, 0xf33: 0x4000, 0xf34: 0x4000, 0xf35: 0x4000, + 0xf36: 0x4000, 0xf37: 0x4000, 0xf38: 0x4000, 0xf39: 0x4000, 0xf3a: 0x4000, 0xf3b: 0x4000, + 0xf3c: 0x4000, 0xf3d: 0x4000, 0xf3e: 0x4000, + // Block 0x3d, offset 0xf40 + 0xf40: 0x4000, 0xf41: 0x4000, 0xf42: 0x4000, 0xf43: 0x4000, 0xf44: 0x4000, 0xf45: 0x4000, + 0xf46: 0x4000, 0xf47: 0x4000, 0xf48: 0x4000, 0xf49: 0x4000, 0xf4a: 0x4000, 0xf4b: 0x4000, + 0xf4c: 0x4000, 0xf50: 0x4000, 0xf51: 0x4000, + 0xf52: 0x4000, 0xf53: 0x4000, 0xf54: 0x4000, 0xf55: 0x4000, 0xf56: 0x4000, 0xf57: 0x4000, + 0xf58: 0x4000, 0xf59: 0x4000, 0xf5a: 0x4000, 0xf5b: 0x4000, 0xf5c: 0x4000, 0xf5d: 0x4000, + 0xf5e: 0x4000, 0xf5f: 0x4000, 0xf60: 0x4000, 0xf61: 0x4000, 0xf62: 0x4000, 0xf63: 0x4000, + 0xf64: 0x4000, 0xf65: 0x4000, 0xf66: 0x4000, 0xf67: 0x4000, 0xf68: 0x4000, 0xf69: 0x4000, + 0xf6a: 0x4000, 0xf6b: 0x4000, 0xf6c: 0x4000, 0xf6d: 0x4000, 0xf6e: 0x4000, 0xf6f: 0x4000, + 0xf70: 0x4000, 0xf71: 0x4000, 0xf72: 0x4000, 0xf73: 0x4000, 0xf74: 0x4000, 0xf75: 0x4000, + 0xf76: 0x4000, 0xf77: 0x4000, 0xf78: 0x4000, 0xf79: 0x4000, 0xf7a: 0x4000, 0xf7b: 0x4000, + 0xf7c: 0x4000, 0xf7d: 0x4000, 0xf7e: 0x4000, 0xf7f: 0x4000, + // Block 0x3e, offset 0xf80 + 0xf80: 0x4000, 0xf81: 0x4000, 0xf82: 0x4000, 0xf83: 0x4000, 0xf84: 0x4000, 0xf85: 0x4000, + 0xf86: 0x4000, + // Block 0x3f, offset 0xfc0 + 0xfe0: 0x4000, 0xfe1: 0x4000, 0xfe2: 0x4000, 0xfe3: 0x4000, + 0xfe4: 0x4000, 0xfe5: 0x4000, 0xfe6: 0x4000, 0xfe7: 0x4000, 0xfe8: 0x4000, 0xfe9: 0x4000, + 0xfea: 0x4000, 0xfeb: 0x4000, 0xfec: 0x4000, 0xfed: 0x4000, 0xfee: 0x4000, 0xfef: 0x4000, + 0xff0: 0x4000, 0xff1: 0x4000, 0xff2: 0x4000, 0xff3: 0x4000, 0xff4: 0x4000, 0xff5: 0x4000, + 0xff6: 0x4000, 0xff7: 0x4000, 0xff8: 0x4000, 0xff9: 0x4000, 0xffa: 0x4000, 0xffb: 0x4000, + 0xffc: 0x4000, + // Block 0x40, offset 0x1000 + 0x1000: 0x4000, 0x1001: 0x4000, 0x1002: 0x4000, 0x1003: 0x4000, 0x1004: 0x4000, 0x1005: 0x4000, + 0x1006: 0x4000, 0x1007: 0x4000, 0x1008: 0x4000, 0x1009: 0x4000, 0x100a: 0x4000, 0x100b: 0x4000, + 0x100c: 0x4000, 0x100d: 0x4000, 0x100e: 0x4000, 0x100f: 0x4000, 0x1010: 0x4000, 0x1011: 0x4000, + 0x1012: 0x4000, 0x1013: 0x4000, 0x1014: 0x4000, 0x1015: 0x4000, 0x1016: 0x4000, 0x1017: 0x4000, + 0x1018: 0x4000, 0x1019: 0x4000, 0x101a: 0x4000, 0x101b: 0x4000, 0x101c: 0x4000, 0x101d: 0x4000, + 0x101e: 0x4000, 0x101f: 0x4000, 0x1020: 0x4000, 0x1021: 0x4000, 0x1022: 0x4000, 0x1023: 0x4000, + // Block 0x41, offset 0x1040 + 0x1040: 0x2000, 0x1041: 0x2000, 0x1042: 0x2000, 0x1043: 0x2000, 0x1044: 0x2000, 0x1045: 0x2000, + 0x1046: 0x2000, 0x1047: 0x2000, 0x1048: 0x2000, 0x1049: 0x2000, 0x104a: 0x2000, 0x104b: 0x2000, + 0x104c: 0x2000, 0x104d: 0x2000, 0x104e: 0x2000, 0x104f: 0x2000, 0x1050: 0x4000, 0x1051: 0x4000, + 0x1052: 0x4000, 0x1053: 0x4000, 0x1054: 0x4000, 0x1055: 0x4000, 0x1056: 0x4000, 0x1057: 0x4000, + 0x1058: 0x4000, 0x1059: 0x4000, + 0x1070: 0x4000, 0x1071: 0x4000, 0x1072: 0x4000, 0x1073: 0x4000, 0x1074: 0x4000, 0x1075: 0x4000, + 0x1076: 0x4000, 0x1077: 0x4000, 0x1078: 0x4000, 0x1079: 0x4000, 0x107a: 0x4000, 0x107b: 0x4000, + 0x107c: 0x4000, 0x107d: 0x4000, 0x107e: 0x4000, 0x107f: 0x4000, + // Block 0x42, offset 0x1080 + 0x1080: 0x4000, 0x1081: 0x4000, 0x1082: 0x4000, 0x1083: 0x4000, 0x1084: 0x4000, 0x1085: 0x4000, + 0x1086: 0x4000, 0x1087: 0x4000, 0x1088: 0x4000, 0x1089: 0x4000, 0x108a: 0x4000, 0x108b: 0x4000, + 0x108c: 0x4000, 0x108d: 0x4000, 0x108e: 0x4000, 0x108f: 0x4000, 0x1090: 0x4000, 0x1091: 0x4000, + 0x1092: 0x4000, 0x1094: 0x4000, 0x1095: 0x4000, 0x1096: 0x4000, 0x1097: 0x4000, + 0x1098: 0x4000, 0x1099: 0x4000, 0x109a: 0x4000, 0x109b: 0x4000, 0x109c: 0x4000, 0x109d: 0x4000, + 0x109e: 0x4000, 0x109f: 0x4000, 0x10a0: 0x4000, 0x10a1: 0x4000, 0x10a2: 0x4000, 0x10a3: 0x4000, + 0x10a4: 0x4000, 0x10a5: 0x4000, 0x10a6: 0x4000, 0x10a8: 0x4000, 0x10a9: 0x4000, + 0x10aa: 0x4000, 0x10ab: 0x4000, + // Block 0x43, offset 0x10c0 + 0x10c1: 0x9012, 0x10c2: 0x9012, 0x10c3: 0x9012, 0x10c4: 0x9012, 0x10c5: 0x9012, + 0x10c6: 0x9012, 0x10c7: 0x9012, 0x10c8: 0x9012, 0x10c9: 0x9012, 0x10ca: 0x9012, 0x10cb: 0x9012, + 0x10cc: 0x9012, 0x10cd: 0x9012, 0x10ce: 0x9012, 0x10cf: 0x9012, 0x10d0: 0x9012, 0x10d1: 0x9012, + 0x10d2: 0x9012, 0x10d3: 0x9012, 0x10d4: 0x9012, 0x10d5: 0x9012, 0x10d6: 0x9012, 0x10d7: 0x9012, + 0x10d8: 0x9012, 0x10d9: 0x9012, 0x10da: 0x9012, 0x10db: 0x9012, 0x10dc: 0x9012, 0x10dd: 0x9012, + 0x10de: 0x9012, 0x10df: 0x9012, 0x10e0: 0x9049, 0x10e1: 0x9049, 0x10e2: 0x9049, 0x10e3: 0x9049, + 0x10e4: 0x9049, 0x10e5: 0x9049, 0x10e6: 0x9049, 0x10e7: 0x9049, 0x10e8: 0x9049, 0x10e9: 0x9049, + 0x10ea: 0x9049, 0x10eb: 0x9049, 0x10ec: 0x9049, 0x10ed: 0x9049, 0x10ee: 0x9049, 0x10ef: 0x9049, + 0x10f0: 0x9049, 0x10f1: 0x9049, 0x10f2: 0x9049, 0x10f3: 0x9049, 0x10f4: 0x9049, 0x10f5: 0x9049, + 0x10f6: 0x9049, 0x10f7: 0x9049, 0x10f8: 0x9049, 0x10f9: 0x9049, 0x10fa: 0x9049, 0x10fb: 0x9049, + 0x10fc: 0x9049, 0x10fd: 0x9049, 0x10fe: 0x9049, 0x10ff: 0x9049, + // Block 0x44, offset 0x1100 + 0x1100: 0x9049, 0x1101: 0x9049, 0x1102: 0x9049, 0x1103: 0x9049, 0x1104: 0x9049, 0x1105: 0x9049, + 0x1106: 0x9049, 0x1107: 0x9049, 0x1108: 0x9049, 0x1109: 0x9049, 0x110a: 0x9049, 0x110b: 0x9049, + 0x110c: 0x9049, 0x110d: 0x9049, 0x110e: 0x9049, 0x110f: 0x9049, 0x1110: 0x9049, 0x1111: 0x9049, + 0x1112: 0x9049, 0x1113: 0x9049, 0x1114: 0x9049, 0x1115: 0x9049, 0x1116: 0x9049, 0x1117: 0x9049, + 0x1118: 0x9049, 0x1119: 0x9049, 0x111a: 0x9049, 0x111b: 0x9049, 0x111c: 0x9049, 0x111d: 0x9049, + 0x111e: 0x9049, 0x111f: 0x904a, 0x1120: 0x904b, 0x1121: 0xb04c, 0x1122: 0xb04d, 0x1123: 0xb04d, + 0x1124: 0xb04e, 0x1125: 0xb04f, 0x1126: 0xb050, 0x1127: 0xb051, 0x1128: 0xb052, 0x1129: 0xb053, + 0x112a: 0xb054, 0x112b: 0xb055, 0x112c: 0xb056, 0x112d: 0xb057, 0x112e: 0xb058, 0x112f: 0xb059, + 0x1130: 0xb05a, 0x1131: 0xb05b, 0x1132: 0xb05c, 0x1133: 0xb05d, 0x1134: 0xb05e, 0x1135: 0xb05f, + 0x1136: 0xb060, 0x1137: 0xb061, 0x1138: 0xb062, 0x1139: 0xb063, 0x113a: 0xb064, 0x113b: 0xb065, + 0x113c: 0xb052, 0x113d: 0xb066, 0x113e: 0xb067, 0x113f: 0xb055, + // Block 0x45, offset 0x1140 + 0x1140: 0xb068, 0x1141: 0xb069, 0x1142: 0xb06a, 0x1143: 0xb06b, 0x1144: 0xb05a, 0x1145: 0xb056, + 0x1146: 0xb06c, 0x1147: 0xb06d, 0x1148: 0xb06b, 0x1149: 0xb06e, 0x114a: 0xb06b, 0x114b: 0xb06f, + 0x114c: 0xb06f, 0x114d: 0xb070, 0x114e: 0xb070, 0x114f: 0xb071, 0x1150: 0xb056, 0x1151: 0xb072, + 0x1152: 0xb073, 0x1153: 0xb072, 0x1154: 0xb074, 0x1155: 0xb073, 0x1156: 0xb075, 0x1157: 0xb075, + 0x1158: 0xb076, 0x1159: 0xb076, 0x115a: 0xb077, 0x115b: 0xb077, 0x115c: 0xb073, 0x115d: 0xb078, + 0x115e: 0xb079, 0x115f: 0xb067, 0x1160: 0xb07a, 0x1161: 0xb07b, 0x1162: 0xb07b, 0x1163: 0xb07b, + 0x1164: 0xb07b, 0x1165: 0xb07b, 0x1166: 0xb07b, 0x1167: 0xb07b, 0x1168: 0xb07b, 0x1169: 0xb07b, + 0x116a: 0xb07b, 0x116b: 0xb07b, 0x116c: 0xb07b, 0x116d: 0xb07b, 0x116e: 0xb07b, 0x116f: 0xb07b, + 0x1170: 0xb07c, 0x1171: 0xb07c, 0x1172: 0xb07c, 0x1173: 0xb07c, 0x1174: 0xb07c, 0x1175: 0xb07c, + 0x1176: 0xb07c, 0x1177: 0xb07c, 0x1178: 0xb07c, 0x1179: 0xb07c, 0x117a: 0xb07c, 0x117b: 0xb07c, + 0x117c: 0xb07c, 0x117d: 0xb07c, 0x117e: 0xb07c, + // Block 0x46, offset 0x1180 + 0x1182: 0xb07d, 0x1183: 0xb07e, 0x1184: 0xb07f, 0x1185: 0xb080, + 0x1186: 0xb07f, 0x1187: 0xb07e, 0x118a: 0xb081, 0x118b: 0xb082, + 0x118c: 0xb083, 0x118d: 0xb07f, 0x118e: 0xb080, 0x118f: 0xb07f, + 0x1192: 0xb084, 0x1193: 0xb085, 0x1194: 0xb084, 0x1195: 0xb086, 0x1196: 0xb084, 0x1197: 0xb087, + 0x119a: 0xb088, 0x119b: 0xb089, 0x119c: 0xb08a, + 0x11a0: 0x908b, 0x11a1: 0x908b, 0x11a2: 0x908c, 0x11a3: 0x908d, + 0x11a4: 0x908b, 0x11a5: 0x908e, 0x11a6: 0x908f, 0x11a8: 0xb090, 0x11a9: 0xb091, + 0x11aa: 0xb092, 0x11ab: 0xb091, 0x11ac: 0xb093, 0x11ad: 0xb094, 0x11ae: 0xb095, + 0x11bd: 0x2000, + // Block 0x47, offset 0x11c0 + 0x11e0: 0x4000, 0x11e1: 0x4000, + // Block 0x48, offset 0x1200 + 0x1200: 0x4000, 0x1201: 0x4000, 0x1202: 0x4000, 0x1203: 0x4000, 0x1204: 0x4000, 0x1205: 0x4000, + 0x1206: 0x4000, 0x1207: 0x4000, 0x1208: 0x4000, 0x1209: 0x4000, 0x120a: 0x4000, 0x120b: 0x4000, + 0x120c: 0x4000, 0x120d: 0x4000, 0x120e: 0x4000, 0x120f: 0x4000, 0x1210: 0x4000, 0x1211: 0x4000, + 0x1212: 0x4000, 0x1213: 0x4000, 0x1214: 0x4000, 0x1215: 0x4000, 0x1216: 0x4000, 0x1217: 0x4000, + 0x1218: 0x4000, 0x1219: 0x4000, 0x121a: 0x4000, 0x121b: 0x4000, 0x121c: 0x4000, 0x121d: 0x4000, + 0x121e: 0x4000, 0x121f: 0x4000, 0x1220: 0x4000, 0x1221: 0x4000, 0x1222: 0x4000, 0x1223: 0x4000, + 0x1224: 0x4000, 0x1225: 0x4000, 0x1226: 0x4000, 0x1227: 0x4000, 0x1228: 0x4000, 0x1229: 0x4000, + 0x122a: 0x4000, 0x122b: 0x4000, 0x122c: 0x4000, + // Block 0x49, offset 0x1240 + 0x1240: 0x4000, 0x1241: 0x4000, 0x1242: 0x4000, 0x1243: 0x4000, 0x1244: 0x4000, 0x1245: 0x4000, + 0x1246: 0x4000, 0x1247: 0x4000, 0x1248: 0x4000, 0x1249: 0x4000, 0x124a: 0x4000, 0x124b: 0x4000, + 0x124c: 0x4000, 0x124d: 0x4000, 0x124e: 0x4000, 0x124f: 0x4000, 0x1250: 0x4000, 0x1251: 0x4000, + 0x1252: 0x4000, 0x1253: 0x4000, 0x1254: 0x4000, 0x1255: 0x4000, 0x1256: 0x4000, 0x1257: 0x4000, + 0x1258: 0x4000, 0x1259: 0x4000, 0x125a: 0x4000, 0x125b: 0x4000, 0x125c: 0x4000, 0x125d: 0x4000, + 0x125e: 0x4000, 0x125f: 0x4000, 0x1260: 0x4000, 0x1261: 0x4000, 0x1262: 0x4000, 0x1263: 0x4000, + 0x1264: 0x4000, 0x1265: 0x4000, 0x1266: 0x4000, 0x1267: 0x4000, 0x1268: 0x4000, 0x1269: 0x4000, + 0x126a: 0x4000, 0x126b: 0x4000, 0x126c: 0x4000, 0x126d: 0x4000, 0x126e: 0x4000, 0x126f: 0x4000, + 0x1270: 0x4000, 0x1271: 0x4000, 0x1272: 0x4000, + // Block 0x4a, offset 0x1280 + 0x1280: 0x4000, 0x1281: 0x4000, 0x1282: 0x4000, 0x1283: 0x4000, 0x1284: 0x4000, 0x1285: 0x4000, + 0x1286: 0x4000, 0x1287: 0x4000, 0x1288: 0x4000, 0x1289: 0x4000, 0x128a: 0x4000, 0x128b: 0x4000, + 0x128c: 0x4000, 0x128d: 0x4000, 0x128e: 0x4000, 0x128f: 0x4000, 0x1290: 0x4000, 0x1291: 0x4000, + 0x1292: 0x4000, 0x1293: 0x4000, 0x1294: 0x4000, 0x1295: 0x4000, 0x1296: 0x4000, 0x1297: 0x4000, + 0x1298: 0x4000, 0x1299: 0x4000, 0x129a: 0x4000, 0x129b: 0x4000, 0x129c: 0x4000, 0x129d: 0x4000, + 0x129e: 0x4000, + // Block 0x4b, offset 0x12c0 + 0x12f0: 0x4000, 0x12f1: 0x4000, 0x12f2: 0x4000, 0x12f3: 0x4000, 0x12f4: 0x4000, 0x12f5: 0x4000, + 0x12f6: 0x4000, 0x12f7: 0x4000, 0x12f8: 0x4000, 0x12f9: 0x4000, 0x12fa: 0x4000, 0x12fb: 0x4000, + 0x12fc: 0x4000, 0x12fd: 0x4000, 0x12fe: 0x4000, 0x12ff: 0x4000, + // Block 0x4c, offset 0x1300 + 0x1300: 0x4000, 0x1301: 0x4000, 0x1302: 0x4000, 0x1303: 0x4000, 0x1304: 0x4000, 0x1305: 0x4000, + 0x1306: 0x4000, 0x1307: 0x4000, 0x1308: 0x4000, 0x1309: 0x4000, 0x130a: 0x4000, 0x130b: 0x4000, + 0x130c: 0x4000, 0x130d: 0x4000, 0x130e: 0x4000, 0x130f: 0x4000, 0x1310: 0x4000, 0x1311: 0x4000, + 0x1312: 0x4000, 0x1313: 0x4000, 0x1314: 0x4000, 0x1315: 0x4000, 0x1316: 0x4000, 0x1317: 0x4000, + 0x1318: 0x4000, 0x1319: 0x4000, 0x131a: 0x4000, 0x131b: 0x4000, 0x131c: 0x4000, 0x131d: 0x4000, + 0x131e: 0x4000, 0x131f: 0x4000, 0x1320: 0x4000, 0x1321: 0x4000, 0x1322: 0x4000, 0x1323: 0x4000, + 0x1324: 0x4000, 0x1325: 0x4000, 0x1326: 0x4000, 0x1327: 0x4000, 0x1328: 0x4000, 0x1329: 0x4000, + 0x132a: 0x4000, 0x132b: 0x4000, 0x132c: 0x4000, 0x132d: 0x4000, 0x132e: 0x4000, 0x132f: 0x4000, + 0x1330: 0x4000, 0x1331: 0x4000, 0x1332: 0x4000, 0x1333: 0x4000, 0x1334: 0x4000, 0x1335: 0x4000, + 0x1336: 0x4000, 0x1337: 0x4000, 0x1338: 0x4000, 0x1339: 0x4000, 0x133a: 0x4000, 0x133b: 0x4000, + // Block 0x4d, offset 0x1340 + 0x1344: 0x4000, + // Block 0x4e, offset 0x1380 + 0x138f: 0x4000, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x2000, 0x13c1: 0x2000, 0x13c2: 0x2000, 0x13c3: 0x2000, 0x13c4: 0x2000, 0x13c5: 0x2000, + 0x13c6: 0x2000, 0x13c7: 0x2000, 0x13c8: 0x2000, 0x13c9: 0x2000, 0x13ca: 0x2000, + 0x13d0: 0x2000, 0x13d1: 0x2000, + 0x13d2: 0x2000, 0x13d3: 0x2000, 0x13d4: 0x2000, 0x13d5: 0x2000, 0x13d6: 0x2000, 0x13d7: 0x2000, + 0x13d8: 0x2000, 0x13d9: 0x2000, 0x13da: 0x2000, 0x13db: 0x2000, 0x13dc: 0x2000, 0x13dd: 0x2000, + 0x13de: 0x2000, 0x13df: 0x2000, 0x13e0: 0x2000, 0x13e1: 0x2000, 0x13e2: 0x2000, 0x13e3: 0x2000, + 0x13e4: 0x2000, 0x13e5: 0x2000, 0x13e6: 0x2000, 0x13e7: 0x2000, 0x13e8: 0x2000, 0x13e9: 0x2000, + 0x13ea: 0x2000, 0x13eb: 0x2000, 0x13ec: 0x2000, 0x13ed: 0x2000, + 0x13f0: 0x2000, 0x13f1: 0x2000, 0x13f2: 0x2000, 0x13f3: 0x2000, 0x13f4: 0x2000, 0x13f5: 0x2000, + 0x13f6: 0x2000, 0x13f7: 0x2000, 0x13f8: 0x2000, 0x13f9: 0x2000, 0x13fa: 0x2000, 0x13fb: 0x2000, + 0x13fc: 0x2000, 0x13fd: 0x2000, 0x13fe: 0x2000, 0x13ff: 0x2000, + // Block 0x50, offset 0x1400 + 0x1400: 0x2000, 0x1401: 0x2000, 0x1402: 0x2000, 0x1403: 0x2000, 0x1404: 0x2000, 0x1405: 0x2000, + 0x1406: 0x2000, 0x1407: 0x2000, 0x1408: 0x2000, 0x1409: 0x2000, 0x140a: 0x2000, 0x140b: 0x2000, + 0x140c: 0x2000, 0x140d: 0x2000, 0x140e: 0x2000, 0x140f: 0x2000, 0x1410: 0x2000, 0x1411: 0x2000, + 0x1412: 0x2000, 0x1413: 0x2000, 0x1414: 0x2000, 0x1415: 0x2000, 0x1416: 0x2000, 0x1417: 0x2000, + 0x1418: 0x2000, 0x1419: 0x2000, 0x141a: 0x2000, 0x141b: 0x2000, 0x141c: 0x2000, 0x141d: 0x2000, + 0x141e: 0x2000, 0x141f: 0x2000, 0x1420: 0x2000, 0x1421: 0x2000, 0x1422: 0x2000, 0x1423: 0x2000, + 0x1424: 0x2000, 0x1425: 0x2000, 0x1426: 0x2000, 0x1427: 0x2000, 0x1428: 0x2000, 0x1429: 0x2000, + 0x1430: 0x2000, 0x1431: 0x2000, 0x1432: 0x2000, 0x1433: 0x2000, 0x1434: 0x2000, 0x1435: 0x2000, + 0x1436: 0x2000, 0x1437: 0x2000, 0x1438: 0x2000, 0x1439: 0x2000, 0x143a: 0x2000, 0x143b: 0x2000, + 0x143c: 0x2000, 0x143d: 0x2000, 0x143e: 0x2000, 0x143f: 0x2000, + // Block 0x51, offset 0x1440 + 0x1440: 0x2000, 0x1441: 0x2000, 0x1442: 0x2000, 0x1443: 0x2000, 0x1444: 0x2000, 0x1445: 0x2000, + 0x1446: 0x2000, 0x1447: 0x2000, 0x1448: 0x2000, 0x1449: 0x2000, 0x144a: 0x2000, 0x144b: 0x2000, + 0x144c: 0x2000, 0x144d: 0x2000, 0x144e: 0x4000, 0x144f: 0x2000, 0x1450: 0x2000, 0x1451: 0x4000, + 0x1452: 0x4000, 0x1453: 0x4000, 0x1454: 0x4000, 0x1455: 0x4000, 0x1456: 0x4000, 0x1457: 0x4000, + 0x1458: 0x4000, 0x1459: 0x4000, 0x145a: 0x4000, 0x145b: 0x2000, 0x145c: 0x2000, 0x145d: 0x2000, + 0x145e: 0x2000, 0x145f: 0x2000, 0x1460: 0x2000, 0x1461: 0x2000, 0x1462: 0x2000, 0x1463: 0x2000, + 0x1464: 0x2000, 0x1465: 0x2000, 0x1466: 0x2000, 0x1467: 0x2000, 0x1468: 0x2000, 0x1469: 0x2000, + 0x146a: 0x2000, 0x146b: 0x2000, 0x146c: 0x2000, + // Block 0x52, offset 0x1480 + 0x1480: 0x4000, 0x1481: 0x4000, 0x1482: 0x4000, + 0x1490: 0x4000, 0x1491: 0x4000, + 0x1492: 0x4000, 0x1493: 0x4000, 0x1494: 0x4000, 0x1495: 0x4000, 0x1496: 0x4000, 0x1497: 0x4000, + 0x1498: 0x4000, 0x1499: 0x4000, 0x149a: 0x4000, 0x149b: 0x4000, 0x149c: 0x4000, 0x149d: 0x4000, + 0x149e: 0x4000, 0x149f: 0x4000, 0x14a0: 0x4000, 0x14a1: 0x4000, 0x14a2: 0x4000, 0x14a3: 0x4000, + 0x14a4: 0x4000, 0x14a5: 0x4000, 0x14a6: 0x4000, 0x14a7: 0x4000, 0x14a8: 0x4000, 0x14a9: 0x4000, + 0x14aa: 0x4000, 0x14ab: 0x4000, 0x14ac: 0x4000, 0x14ad: 0x4000, 0x14ae: 0x4000, 0x14af: 0x4000, + 0x14b0: 0x4000, 0x14b1: 0x4000, 0x14b2: 0x4000, 0x14b3: 0x4000, 0x14b4: 0x4000, 0x14b5: 0x4000, + 0x14b6: 0x4000, 0x14b7: 0x4000, 0x14b8: 0x4000, 0x14b9: 0x4000, 0x14ba: 0x4000, 0x14bb: 0x4000, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x4000, 0x14c1: 0x4000, 0x14c2: 0x4000, 0x14c3: 0x4000, 0x14c4: 0x4000, 0x14c5: 0x4000, + 0x14c6: 0x4000, 0x14c7: 0x4000, 0x14c8: 0x4000, + 0x14d0: 0x4000, 0x14d1: 0x4000, + 0x14e0: 0x4000, 0x14e1: 0x4000, 0x14e2: 0x4000, 0x14e3: 0x4000, + 0x14e4: 0x4000, 0x14e5: 0x4000, + // Block 0x54, offset 0x1500 + 0x1500: 0x4000, 0x1501: 0x4000, 0x1502: 0x4000, 0x1503: 0x4000, 0x1504: 0x4000, 0x1505: 0x4000, + 0x1506: 0x4000, 0x1507: 0x4000, 0x1508: 0x4000, 0x1509: 0x4000, 0x150a: 0x4000, 0x150b: 0x4000, + 0x150c: 0x4000, 0x150d: 0x4000, 0x150e: 0x4000, 0x150f: 0x4000, 0x1510: 0x4000, 0x1511: 0x4000, + 0x1512: 0x4000, 0x1513: 0x4000, 0x1514: 0x4000, 0x1515: 0x4000, 0x1516: 0x4000, 0x1517: 0x4000, + 0x1518: 0x4000, 0x1519: 0x4000, 0x151a: 0x4000, 0x151b: 0x4000, 0x151c: 0x4000, 0x151d: 0x4000, + 0x151e: 0x4000, 0x151f: 0x4000, 0x1520: 0x4000, + 0x152d: 0x4000, 0x152e: 0x4000, 0x152f: 0x4000, + 0x1530: 0x4000, 0x1531: 0x4000, 0x1532: 0x4000, 0x1533: 0x4000, 0x1534: 0x4000, 0x1535: 0x4000, + 0x1537: 0x4000, 0x1538: 0x4000, 0x1539: 0x4000, 0x153a: 0x4000, 0x153b: 0x4000, + 0x153c: 0x4000, 0x153d: 0x4000, 0x153e: 0x4000, 0x153f: 0x4000, + // Block 0x55, offset 0x1540 + 0x1540: 0x4000, 0x1541: 0x4000, 0x1542: 0x4000, 0x1543: 0x4000, 0x1544: 0x4000, 0x1545: 0x4000, + 0x1546: 0x4000, 0x1547: 0x4000, 0x1548: 0x4000, 0x1549: 0x4000, 0x154a: 0x4000, 0x154b: 0x4000, + 0x154c: 0x4000, 0x154d: 0x4000, 0x154e: 0x4000, 0x154f: 0x4000, 0x1550: 0x4000, 0x1551: 0x4000, + 0x1552: 0x4000, 0x1553: 0x4000, 0x1554: 0x4000, 0x1555: 0x4000, 0x1556: 0x4000, 0x1557: 0x4000, + 0x1558: 0x4000, 0x1559: 0x4000, 0x155a: 0x4000, 0x155b: 0x4000, 0x155c: 0x4000, 0x155d: 0x4000, + 0x155e: 0x4000, 0x155f: 0x4000, 0x1560: 0x4000, 0x1561: 0x4000, 0x1562: 0x4000, 0x1563: 0x4000, + 0x1564: 0x4000, 0x1565: 0x4000, 0x1566: 0x4000, 0x1567: 0x4000, 0x1568: 0x4000, 0x1569: 0x4000, + 0x156a: 0x4000, 0x156b: 0x4000, 0x156c: 0x4000, 0x156d: 0x4000, 0x156e: 0x4000, 0x156f: 0x4000, + 0x1570: 0x4000, 0x1571: 0x4000, 0x1572: 0x4000, 0x1573: 0x4000, 0x1574: 0x4000, 0x1575: 0x4000, + 0x1576: 0x4000, 0x1577: 0x4000, 0x1578: 0x4000, 0x1579: 0x4000, 0x157a: 0x4000, 0x157b: 0x4000, + 0x157c: 0x4000, 0x157e: 0x4000, 0x157f: 0x4000, + // Block 0x56, offset 0x1580 + 0x1580: 0x4000, 0x1581: 0x4000, 0x1582: 0x4000, 0x1583: 0x4000, 0x1584: 0x4000, 0x1585: 0x4000, + 0x1586: 0x4000, 0x1587: 0x4000, 0x1588: 0x4000, 0x1589: 0x4000, 0x158a: 0x4000, 0x158b: 0x4000, + 0x158c: 0x4000, 0x158d: 0x4000, 0x158e: 0x4000, 0x158f: 0x4000, 0x1590: 0x4000, 0x1591: 0x4000, + 0x1592: 0x4000, 0x1593: 0x4000, + 0x15a0: 0x4000, 0x15a1: 0x4000, 0x15a2: 0x4000, 0x15a3: 0x4000, + 0x15a4: 0x4000, 0x15a5: 0x4000, 0x15a6: 0x4000, 0x15a7: 0x4000, 0x15a8: 0x4000, 0x15a9: 0x4000, + 0x15aa: 0x4000, 0x15ab: 0x4000, 0x15ac: 0x4000, 0x15ad: 0x4000, 0x15ae: 0x4000, 0x15af: 0x4000, + 0x15b0: 0x4000, 0x15b1: 0x4000, 0x15b2: 0x4000, 0x15b3: 0x4000, 0x15b4: 0x4000, 0x15b5: 0x4000, + 0x15b6: 0x4000, 0x15b7: 0x4000, 0x15b8: 0x4000, 0x15b9: 0x4000, 0x15ba: 0x4000, 0x15bb: 0x4000, + 0x15bc: 0x4000, 0x15bd: 0x4000, 0x15be: 0x4000, 0x15bf: 0x4000, + // Block 0x57, offset 0x15c0 + 0x15c0: 0x4000, 0x15c1: 0x4000, 0x15c2: 0x4000, 0x15c3: 0x4000, 0x15c4: 0x4000, 0x15c5: 0x4000, + 0x15c6: 0x4000, 0x15c7: 0x4000, 0x15c8: 0x4000, 0x15c9: 0x4000, 0x15ca: 0x4000, + 0x15cf: 0x4000, 0x15d0: 0x4000, 0x15d1: 0x4000, + 0x15d2: 0x4000, 0x15d3: 0x4000, + 0x15e0: 0x4000, 0x15e1: 0x4000, 0x15e2: 0x4000, 0x15e3: 0x4000, + 0x15e4: 0x4000, 0x15e5: 0x4000, 0x15e6: 0x4000, 0x15e7: 0x4000, 0x15e8: 0x4000, 0x15e9: 0x4000, + 0x15ea: 0x4000, 0x15eb: 0x4000, 0x15ec: 0x4000, 0x15ed: 0x4000, 0x15ee: 0x4000, 0x15ef: 0x4000, + 0x15f0: 0x4000, 0x15f4: 0x4000, + 0x15f8: 0x4000, 0x15f9: 0x4000, 0x15fa: 0x4000, 0x15fb: 0x4000, + 0x15fc: 0x4000, 0x15fd: 0x4000, 0x15fe: 0x4000, 0x15ff: 0x4000, + // Block 0x58, offset 0x1600 + 0x1600: 0x4000, 0x1602: 0x4000, 0x1603: 0x4000, 0x1604: 0x4000, 0x1605: 0x4000, + 0x1606: 0x4000, 0x1607: 0x4000, 0x1608: 0x4000, 0x1609: 0x4000, 0x160a: 0x4000, 0x160b: 0x4000, + 0x160c: 0x4000, 0x160d: 0x4000, 0x160e: 0x4000, 0x160f: 0x4000, 0x1610: 0x4000, 0x1611: 0x4000, + 0x1612: 0x4000, 0x1613: 0x4000, 0x1614: 0x4000, 0x1615: 0x4000, 0x1616: 0x4000, 0x1617: 0x4000, + 0x1618: 0x4000, 0x1619: 0x4000, 0x161a: 0x4000, 0x161b: 0x4000, 0x161c: 0x4000, 0x161d: 0x4000, + 0x161e: 0x4000, 0x161f: 0x4000, 0x1620: 0x4000, 0x1621: 0x4000, 0x1622: 0x4000, 0x1623: 0x4000, + 0x1624: 0x4000, 0x1625: 0x4000, 0x1626: 0x4000, 0x1627: 0x4000, 0x1628: 0x4000, 0x1629: 0x4000, + 0x162a: 0x4000, 0x162b: 0x4000, 0x162c: 0x4000, 0x162d: 0x4000, 0x162e: 0x4000, 0x162f: 0x4000, + 0x1630: 0x4000, 0x1631: 0x4000, 0x1632: 0x4000, 0x1633: 0x4000, 0x1634: 0x4000, 0x1635: 0x4000, + 0x1636: 0x4000, 0x1637: 0x4000, 0x1638: 0x4000, 0x1639: 0x4000, 0x163a: 0x4000, 0x163b: 0x4000, + 0x163c: 0x4000, 0x163d: 0x4000, 0x163e: 0x4000, 0x163f: 0x4000, + // Block 0x59, offset 0x1640 + 0x1640: 0x4000, 0x1641: 0x4000, 0x1642: 0x4000, 0x1643: 0x4000, 0x1644: 0x4000, 0x1645: 0x4000, + 0x1646: 0x4000, 0x1647: 0x4000, 0x1648: 0x4000, 0x1649: 0x4000, 0x164a: 0x4000, 0x164b: 0x4000, + 0x164c: 0x4000, 0x164d: 0x4000, 0x164e: 0x4000, 0x164f: 0x4000, 0x1650: 0x4000, 0x1651: 0x4000, + 0x1652: 0x4000, 0x1653: 0x4000, 0x1654: 0x4000, 0x1655: 0x4000, 0x1656: 0x4000, 0x1657: 0x4000, + 0x1658: 0x4000, 0x1659: 0x4000, 0x165a: 0x4000, 0x165b: 0x4000, 0x165c: 0x4000, 0x165d: 0x4000, + 0x165e: 0x4000, 0x165f: 0x4000, 0x1660: 0x4000, 0x1661: 0x4000, 0x1662: 0x4000, 0x1663: 0x4000, + 0x1664: 0x4000, 0x1665: 0x4000, 0x1666: 0x4000, 0x1667: 0x4000, 0x1668: 0x4000, 0x1669: 0x4000, + 0x166a: 0x4000, 0x166b: 0x4000, 0x166c: 0x4000, 0x166d: 0x4000, 0x166e: 0x4000, 0x166f: 0x4000, + 0x1670: 0x4000, 0x1671: 0x4000, 0x1672: 0x4000, 0x1673: 0x4000, 0x1674: 0x4000, 0x1675: 0x4000, + 0x1676: 0x4000, 0x1677: 0x4000, 0x1678: 0x4000, 0x1679: 0x4000, 0x167a: 0x4000, 0x167b: 0x4000, + 0x167c: 0x4000, 0x167f: 0x4000, + // Block 0x5a, offset 0x1680 + 0x1680: 0x4000, 0x1681: 0x4000, 0x1682: 0x4000, 0x1683: 0x4000, 0x1684: 0x4000, 0x1685: 0x4000, + 0x1686: 0x4000, 0x1687: 0x4000, 0x1688: 0x4000, 0x1689: 0x4000, 0x168a: 0x4000, 0x168b: 0x4000, + 0x168c: 0x4000, 0x168d: 0x4000, 0x168e: 0x4000, 0x168f: 0x4000, 0x1690: 0x4000, 0x1691: 0x4000, + 0x1692: 0x4000, 0x1693: 0x4000, 0x1694: 0x4000, 0x1695: 0x4000, 0x1696: 0x4000, 0x1697: 0x4000, + 0x1698: 0x4000, 0x1699: 0x4000, 0x169a: 0x4000, 0x169b: 0x4000, 0x169c: 0x4000, 0x169d: 0x4000, + 0x169e: 0x4000, 0x169f: 0x4000, 0x16a0: 0x4000, 0x16a1: 0x4000, 0x16a2: 0x4000, 0x16a3: 0x4000, + 0x16a4: 0x4000, 0x16a5: 0x4000, 0x16a6: 0x4000, 0x16a7: 0x4000, 0x16a8: 0x4000, 0x16a9: 0x4000, + 0x16aa: 0x4000, 0x16ab: 0x4000, 0x16ac: 0x4000, 0x16ad: 0x4000, 0x16ae: 0x4000, 0x16af: 0x4000, + 0x16b0: 0x4000, 0x16b1: 0x4000, 0x16b2: 0x4000, 0x16b3: 0x4000, 0x16b4: 0x4000, 0x16b5: 0x4000, + 0x16b6: 0x4000, 0x16b7: 0x4000, 0x16b8: 0x4000, 0x16b9: 0x4000, 0x16ba: 0x4000, 0x16bb: 0x4000, + 0x16bc: 0x4000, 0x16bd: 0x4000, + // Block 0x5b, offset 0x16c0 + 0x16cb: 0x4000, + 0x16cc: 0x4000, 0x16cd: 0x4000, 0x16ce: 0x4000, 0x16d0: 0x4000, 0x16d1: 0x4000, + 0x16d2: 0x4000, 0x16d3: 0x4000, 0x16d4: 0x4000, 0x16d5: 0x4000, 0x16d6: 0x4000, 0x16d7: 0x4000, + 0x16d8: 0x4000, 0x16d9: 0x4000, 0x16da: 0x4000, 0x16db: 0x4000, 0x16dc: 0x4000, 0x16dd: 0x4000, + 0x16de: 0x4000, 0x16df: 0x4000, 0x16e0: 0x4000, 0x16e1: 0x4000, 0x16e2: 0x4000, 0x16e3: 0x4000, + 0x16e4: 0x4000, 0x16e5: 0x4000, 0x16e6: 0x4000, 0x16e7: 0x4000, + 0x16fa: 0x4000, + // Block 0x5c, offset 0x1700 + 0x1715: 0x4000, 0x1716: 0x4000, + 0x1724: 0x4000, + // Block 0x5d, offset 0x1740 + 0x177b: 0x4000, + 0x177c: 0x4000, 0x177d: 0x4000, 0x177e: 0x4000, 0x177f: 0x4000, + // Block 0x5e, offset 0x1780 + 0x1780: 0x4000, 0x1781: 0x4000, 0x1782: 0x4000, 0x1783: 0x4000, 0x1784: 0x4000, 0x1785: 0x4000, + 0x1786: 0x4000, 0x1787: 0x4000, 0x1788: 0x4000, 0x1789: 0x4000, 0x178a: 0x4000, 0x178b: 0x4000, + 0x178c: 0x4000, 0x178d: 0x4000, 0x178e: 0x4000, 0x178f: 0x4000, + // Block 0x5f, offset 0x17c0 + 0x17c0: 0x4000, 0x17c1: 0x4000, 0x17c2: 0x4000, 0x17c3: 0x4000, 0x17c4: 0x4000, 0x17c5: 0x4000, + 0x17cc: 0x4000, 0x17d0: 0x4000, 0x17d1: 0x4000, + 0x17d2: 0x4000, + 0x17eb: 0x4000, 0x17ec: 0x4000, + 0x17f4: 0x4000, 0x17f5: 0x4000, + 0x17f6: 0x4000, 0x17f7: 0x4000, 0x17f8: 0x4000, + // Block 0x60, offset 0x1800 + 0x1810: 0x4000, 0x1811: 0x4000, + 0x1812: 0x4000, 0x1813: 0x4000, 0x1814: 0x4000, 0x1815: 0x4000, 0x1816: 0x4000, 0x1817: 0x4000, + 0x1818: 0x4000, 0x1819: 0x4000, 0x181a: 0x4000, 0x181b: 0x4000, 0x181c: 0x4000, 0x181d: 0x4000, + 0x181e: 0x4000, 0x181f: 0x4000, 0x1820: 0x4000, 0x1821: 0x4000, 0x1822: 0x4000, 0x1823: 0x4000, + 0x1824: 0x4000, 0x1825: 0x4000, 0x1826: 0x4000, 0x1827: 0x4000, 0x1828: 0x4000, 0x1829: 0x4000, + 0x182a: 0x4000, 0x182b: 0x4000, 0x182c: 0x4000, 0x182d: 0x4000, 0x182e: 0x4000, 0x182f: 0x4000, + 0x1830: 0x4000, 0x1831: 0x4000, 0x1832: 0x4000, 0x1833: 0x4000, 0x1834: 0x4000, 0x1835: 0x4000, + 0x1836: 0x4000, 0x1837: 0x4000, 0x1838: 0x4000, 0x1839: 0x4000, 0x183a: 0x4000, 0x183b: 0x4000, + 0x183c: 0x4000, 0x183d: 0x4000, 0x183e: 0x4000, + // Block 0x61, offset 0x1840 + 0x1840: 0x4000, 0x1841: 0x4000, 0x1842: 0x4000, 0x1843: 0x4000, 0x1844: 0x4000, 0x1845: 0x4000, + 0x1846: 0x4000, 0x1847: 0x4000, 0x1848: 0x4000, 0x1849: 0x4000, 0x184a: 0x4000, 0x184b: 0x4000, + 0x184c: 0x4000, 0x1850: 0x4000, 0x1851: 0x4000, + 0x1852: 0x4000, 0x1853: 0x4000, 0x1854: 0x4000, 0x1855: 0x4000, 0x1856: 0x4000, 0x1857: 0x4000, + 0x1858: 0x4000, 0x1859: 0x4000, 0x185a: 0x4000, 0x185b: 0x4000, 0x185c: 0x4000, 0x185d: 0x4000, + 0x185e: 0x4000, 0x185f: 0x4000, 0x1860: 0x4000, 0x1861: 0x4000, 0x1862: 0x4000, 0x1863: 0x4000, + 0x1864: 0x4000, 0x1865: 0x4000, 0x1866: 0x4000, 0x1867: 0x4000, 0x1868: 0x4000, 0x1869: 0x4000, + 0x186a: 0x4000, 0x186b: 0x4000, + // Block 0x62, offset 0x1880 + 0x1880: 0x4000, 0x1881: 0x4000, 0x1882: 0x4000, 0x1883: 0x4000, 0x1884: 0x4000, 0x1885: 0x4000, + 0x1886: 0x4000, 0x1887: 0x4000, 0x1888: 0x4000, 0x1889: 0x4000, 0x188a: 0x4000, 0x188b: 0x4000, + 0x188c: 0x4000, 0x188d: 0x4000, 0x188e: 0x4000, 0x188f: 0x4000, 0x1890: 0x4000, 0x1891: 0x4000, + 0x1892: 0x4000, 0x1893: 0x4000, 0x1894: 0x4000, 0x1895: 0x4000, 0x1896: 0x4000, 0x1897: 0x4000, + // Block 0x63, offset 0x18c0 + 0x18c0: 0x4000, + 0x18d0: 0x4000, 0x18d1: 0x4000, + 0x18d2: 0x4000, 0x18d3: 0x4000, 0x18d4: 0x4000, 0x18d5: 0x4000, 0x18d6: 0x4000, 0x18d7: 0x4000, + 0x18d8: 0x4000, 0x18d9: 0x4000, 0x18da: 0x4000, 0x18db: 0x4000, 0x18dc: 0x4000, 0x18dd: 0x4000, + 0x18de: 0x4000, 0x18df: 0x4000, 0x18e0: 0x4000, 0x18e1: 0x4000, 0x18e2: 0x4000, 0x18e3: 0x4000, + 0x18e4: 0x4000, 0x18e5: 0x4000, 0x18e6: 0x4000, + // Block 0x64, offset 0x1900 + 0x1900: 0x2000, 0x1901: 0x2000, 0x1902: 0x2000, 0x1903: 0x2000, 0x1904: 0x2000, 0x1905: 0x2000, + 0x1906: 0x2000, 0x1907: 0x2000, 0x1908: 0x2000, 0x1909: 0x2000, 0x190a: 0x2000, 0x190b: 0x2000, + 0x190c: 0x2000, 0x190d: 0x2000, 0x190e: 0x2000, 0x190f: 0x2000, 0x1910: 0x2000, 0x1911: 0x2000, + 0x1912: 0x2000, 0x1913: 0x2000, 0x1914: 0x2000, 0x1915: 0x2000, 0x1916: 0x2000, 0x1917: 0x2000, + 0x1918: 0x2000, 0x1919: 0x2000, 0x191a: 0x2000, 0x191b: 0x2000, 0x191c: 0x2000, 0x191d: 0x2000, + 0x191e: 0x2000, 0x191f: 0x2000, 0x1920: 0x2000, 0x1921: 0x2000, 0x1922: 0x2000, 0x1923: 0x2000, + 0x1924: 0x2000, 0x1925: 0x2000, 0x1926: 0x2000, 0x1927: 0x2000, 0x1928: 0x2000, 0x1929: 0x2000, + 0x192a: 0x2000, 0x192b: 0x2000, 0x192c: 0x2000, 0x192d: 0x2000, 0x192e: 0x2000, 0x192f: 0x2000, + 0x1930: 0x2000, 0x1931: 0x2000, 0x1932: 0x2000, 0x1933: 0x2000, 0x1934: 0x2000, 0x1935: 0x2000, + 0x1936: 0x2000, 0x1937: 0x2000, 0x1938: 0x2000, 0x1939: 0x2000, 0x193a: 0x2000, 0x193b: 0x2000, + 0x193c: 0x2000, 0x193d: 0x2000, +} + +// widthIndex: 22 blocks, 1408 entries, 1408 bytes +// Block 0 is the zero block. +var widthIndex = [1408]uint8{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x02, 0xc4: 0x03, 0xc5: 0x04, 0xc7: 0x05, + 0xc9: 0x06, 0xcb: 0x07, 0xcc: 0x08, 0xcd: 0x09, 0xce: 0x0a, 0xcf: 0x0b, + 0xd0: 0x0c, 0xd1: 0x0d, + 0xe1: 0x02, 0xe2: 0x03, 0xe3: 0x04, 0xe4: 0x05, 0xe5: 0x06, 0xe6: 0x06, 0xe7: 0x06, + 0xe8: 0x06, 0xe9: 0x06, 0xea: 0x07, 0xeb: 0x06, 0xec: 0x06, 0xed: 0x08, 0xee: 0x09, 0xef: 0x0a, + 0xf0: 0x0f, 0xf3: 0x12, 0xf4: 0x13, + // Block 0x4, offset 0x100 + 0x104: 0x0e, 0x105: 0x0f, + // Block 0x5, offset 0x140 + 0x140: 0x10, 0x141: 0x11, 0x142: 0x12, 0x144: 0x13, 0x145: 0x14, 0x146: 0x15, 0x147: 0x16, + 0x148: 0x17, 0x149: 0x18, 0x14a: 0x19, 0x14c: 0x1a, 0x14f: 0x1b, + 0x151: 0x1c, 0x152: 0x08, 0x153: 0x1d, 0x154: 0x1e, 0x155: 0x1f, 0x156: 0x20, 0x157: 0x21, + 0x158: 0x22, 0x159: 0x23, 0x15a: 0x24, 0x15b: 0x25, 0x15c: 0x26, 0x15d: 0x27, 0x15e: 0x28, 0x15f: 0x29, + 0x166: 0x2a, + 0x16c: 0x2b, 0x16d: 0x2c, + 0x17a: 0x2d, 0x17b: 0x2e, 0x17c: 0x0e, 0x17d: 0x0e, 0x17e: 0x0e, 0x17f: 0x2f, + // Block 0x6, offset 0x180 + 0x180: 0x30, 0x181: 0x31, 0x182: 0x32, 0x183: 0x33, 0x184: 0x34, 0x185: 0x35, 0x186: 0x36, 0x187: 0x37, + 0x188: 0x38, 0x189: 0x39, 0x18a: 0x0e, 0x18b: 0x3a, 0x18c: 0x0e, 0x18d: 0x0e, 0x18e: 0x0e, 0x18f: 0x0e, + 0x190: 0x0e, 0x191: 0x0e, 0x192: 0x0e, 0x193: 0x0e, 0x194: 0x0e, 0x195: 0x0e, 0x196: 0x0e, 0x197: 0x0e, + 0x198: 0x0e, 0x199: 0x0e, 0x19a: 0x0e, 0x19b: 0x0e, 0x19c: 0x0e, 0x19d: 0x0e, 0x19e: 0x0e, 0x19f: 0x0e, + 0x1a0: 0x0e, 0x1a1: 0x0e, 0x1a2: 0x0e, 0x1a3: 0x0e, 0x1a4: 0x0e, 0x1a5: 0x0e, 0x1a6: 0x0e, 0x1a7: 0x0e, + 0x1a8: 0x0e, 0x1a9: 0x0e, 0x1aa: 0x0e, 0x1ab: 0x0e, 0x1ac: 0x0e, 0x1ad: 0x0e, 0x1ae: 0x0e, 0x1af: 0x0e, + 0x1b0: 0x0e, 0x1b1: 0x0e, 0x1b2: 0x0e, 0x1b3: 0x0e, 0x1b4: 0x0e, 0x1b5: 0x0e, 0x1b6: 0x0e, 0x1b7: 0x0e, + 0x1b8: 0x0e, 0x1b9: 0x0e, 0x1ba: 0x0e, 0x1bb: 0x0e, 0x1bc: 0x0e, 0x1bd: 0x0e, 0x1be: 0x0e, 0x1bf: 0x0e, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x0e, 0x1c1: 0x0e, 0x1c2: 0x0e, 0x1c3: 0x0e, 0x1c4: 0x0e, 0x1c5: 0x0e, 0x1c6: 0x0e, 0x1c7: 0x0e, + 0x1c8: 0x0e, 0x1c9: 0x0e, 0x1ca: 0x0e, 0x1cb: 0x0e, 0x1cc: 0x0e, 0x1cd: 0x0e, 0x1ce: 0x0e, 0x1cf: 0x0e, + 0x1d0: 0x0e, 0x1d1: 0x0e, 0x1d2: 0x0e, 0x1d3: 0x0e, 0x1d4: 0x0e, 0x1d5: 0x0e, 0x1d6: 0x0e, 0x1d7: 0x0e, + 0x1d8: 0x0e, 0x1d9: 0x0e, 0x1da: 0x0e, 0x1db: 0x0e, 0x1dc: 0x0e, 0x1dd: 0x0e, 0x1de: 0x0e, 0x1df: 0x0e, + 0x1e0: 0x0e, 0x1e1: 0x0e, 0x1e2: 0x0e, 0x1e3: 0x0e, 0x1e4: 0x0e, 0x1e5: 0x0e, 0x1e6: 0x0e, 0x1e7: 0x0e, + 0x1e8: 0x0e, 0x1e9: 0x0e, 0x1ea: 0x0e, 0x1eb: 0x0e, 0x1ec: 0x0e, 0x1ed: 0x0e, 0x1ee: 0x0e, 0x1ef: 0x0e, + 0x1f0: 0x0e, 0x1f1: 0x0e, 0x1f2: 0x0e, 0x1f3: 0x0e, 0x1f4: 0x0e, 0x1f5: 0x0e, 0x1f6: 0x0e, + 0x1f8: 0x0e, 0x1f9: 0x0e, 0x1fa: 0x0e, 0x1fb: 0x0e, 0x1fc: 0x0e, 0x1fd: 0x0e, 0x1fe: 0x0e, 0x1ff: 0x0e, + // Block 0x8, offset 0x200 + 0x200: 0x0e, 0x201: 0x0e, 0x202: 0x0e, 0x203: 0x0e, 0x204: 0x0e, 0x205: 0x0e, 0x206: 0x0e, 0x207: 0x0e, + 0x208: 0x0e, 0x209: 0x0e, 0x20a: 0x0e, 0x20b: 0x0e, 0x20c: 0x0e, 0x20d: 0x0e, 0x20e: 0x0e, 0x20f: 0x0e, + 0x210: 0x0e, 0x211: 0x0e, 0x212: 0x0e, 0x213: 0x0e, 0x214: 0x0e, 0x215: 0x0e, 0x216: 0x0e, 0x217: 0x0e, + 0x218: 0x0e, 0x219: 0x0e, 0x21a: 0x0e, 0x21b: 0x0e, 0x21c: 0x0e, 0x21d: 0x0e, 0x21e: 0x0e, 0x21f: 0x0e, + 0x220: 0x0e, 0x221: 0x0e, 0x222: 0x0e, 0x223: 0x0e, 0x224: 0x0e, 0x225: 0x0e, 0x226: 0x0e, 0x227: 0x0e, + 0x228: 0x0e, 0x229: 0x0e, 0x22a: 0x0e, 0x22b: 0x0e, 0x22c: 0x0e, 0x22d: 0x0e, 0x22e: 0x0e, 0x22f: 0x0e, + 0x230: 0x0e, 0x231: 0x0e, 0x232: 0x0e, 0x233: 0x0e, 0x234: 0x0e, 0x235: 0x0e, 0x236: 0x0e, 0x237: 0x0e, + 0x238: 0x0e, 0x239: 0x0e, 0x23a: 0x0e, 0x23b: 0x0e, 0x23c: 0x0e, 0x23d: 0x0e, 0x23e: 0x0e, 0x23f: 0x0e, + // Block 0x9, offset 0x240 + 0x240: 0x0e, 0x241: 0x0e, 0x242: 0x0e, 0x243: 0x0e, 0x244: 0x0e, 0x245: 0x0e, 0x246: 0x0e, 0x247: 0x0e, + 0x248: 0x0e, 0x249: 0x0e, 0x24a: 0x0e, 0x24b: 0x0e, 0x24c: 0x0e, 0x24d: 0x0e, 0x24e: 0x0e, 0x24f: 0x0e, + 0x250: 0x0e, 0x251: 0x0e, 0x252: 0x3b, 0x253: 0x3c, + 0x265: 0x3d, + 0x270: 0x0e, 0x271: 0x0e, 0x272: 0x0e, 0x273: 0x0e, 0x274: 0x0e, 0x275: 0x0e, 0x276: 0x0e, 0x277: 0x0e, + 0x278: 0x0e, 0x279: 0x0e, 0x27a: 0x0e, 0x27b: 0x0e, 0x27c: 0x0e, 0x27d: 0x0e, 0x27e: 0x0e, 0x27f: 0x0e, + // Block 0xa, offset 0x280 + 0x280: 0x0e, 0x281: 0x0e, 0x282: 0x0e, 0x283: 0x0e, 0x284: 0x0e, 0x285: 0x0e, 0x286: 0x0e, 0x287: 0x0e, + 0x288: 0x0e, 0x289: 0x0e, 0x28a: 0x0e, 0x28b: 0x0e, 0x28c: 0x0e, 0x28d: 0x0e, 0x28e: 0x0e, 0x28f: 0x0e, + 0x290: 0x0e, 0x291: 0x0e, 0x292: 0x0e, 0x293: 0x0e, 0x294: 0x0e, 0x295: 0x0e, 0x296: 0x0e, 0x297: 0x0e, + 0x298: 0x0e, 0x299: 0x0e, 0x29a: 0x0e, 0x29b: 0x0e, 0x29c: 0x0e, 0x29d: 0x0e, 0x29e: 0x3e, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x08, 0x2c1: 0x08, 0x2c2: 0x08, 0x2c3: 0x08, 0x2c4: 0x08, 0x2c5: 0x08, 0x2c6: 0x08, 0x2c7: 0x08, + 0x2c8: 0x08, 0x2c9: 0x08, 0x2ca: 0x08, 0x2cb: 0x08, 0x2cc: 0x08, 0x2cd: 0x08, 0x2ce: 0x08, 0x2cf: 0x08, + 0x2d0: 0x08, 0x2d1: 0x08, 0x2d2: 0x08, 0x2d3: 0x08, 0x2d4: 0x08, 0x2d5: 0x08, 0x2d6: 0x08, 0x2d7: 0x08, + 0x2d8: 0x08, 0x2d9: 0x08, 0x2da: 0x08, 0x2db: 0x08, 0x2dc: 0x08, 0x2dd: 0x08, 0x2de: 0x08, 0x2df: 0x08, + 0x2e0: 0x08, 0x2e1: 0x08, 0x2e2: 0x08, 0x2e3: 0x08, 0x2e4: 0x08, 0x2e5: 0x08, 0x2e6: 0x08, 0x2e7: 0x08, + 0x2e8: 0x08, 0x2e9: 0x08, 0x2ea: 0x08, 0x2eb: 0x08, 0x2ec: 0x08, 0x2ed: 0x08, 0x2ee: 0x08, 0x2ef: 0x08, + 0x2f0: 0x08, 0x2f1: 0x08, 0x2f2: 0x08, 0x2f3: 0x08, 0x2f4: 0x08, 0x2f5: 0x08, 0x2f6: 0x08, 0x2f7: 0x08, + 0x2f8: 0x08, 0x2f9: 0x08, 0x2fa: 0x08, 0x2fb: 0x08, 0x2fc: 0x08, 0x2fd: 0x08, 0x2fe: 0x08, 0x2ff: 0x08, + // Block 0xc, offset 0x300 + 0x300: 0x08, 0x301: 0x08, 0x302: 0x08, 0x303: 0x08, 0x304: 0x08, 0x305: 0x08, 0x306: 0x08, 0x307: 0x08, + 0x308: 0x08, 0x309: 0x08, 0x30a: 0x08, 0x30b: 0x08, 0x30c: 0x08, 0x30d: 0x08, 0x30e: 0x08, 0x30f: 0x08, + 0x310: 0x08, 0x311: 0x08, 0x312: 0x08, 0x313: 0x08, 0x314: 0x08, 0x315: 0x08, 0x316: 0x08, 0x317: 0x08, + 0x318: 0x08, 0x319: 0x08, 0x31a: 0x08, 0x31b: 0x08, 0x31c: 0x08, 0x31d: 0x08, 0x31e: 0x08, 0x31f: 0x08, + 0x320: 0x08, 0x321: 0x08, 0x322: 0x08, 0x323: 0x08, 0x324: 0x0e, 0x325: 0x0e, 0x326: 0x0e, 0x327: 0x0e, + 0x328: 0x0e, 0x329: 0x0e, 0x32a: 0x0e, 0x32b: 0x0e, + 0x338: 0x3f, 0x339: 0x40, 0x33c: 0x41, 0x33d: 0x42, 0x33e: 0x43, 0x33f: 0x44, + // Block 0xd, offset 0x340 + 0x37f: 0x45, + // Block 0xe, offset 0x380 + 0x380: 0x0e, 0x381: 0x0e, 0x382: 0x0e, 0x383: 0x0e, 0x384: 0x0e, 0x385: 0x0e, 0x386: 0x0e, 0x387: 0x0e, + 0x388: 0x0e, 0x389: 0x0e, 0x38a: 0x0e, 0x38b: 0x0e, 0x38c: 0x0e, 0x38d: 0x0e, 0x38e: 0x0e, 0x38f: 0x0e, + 0x390: 0x0e, 0x391: 0x0e, 0x392: 0x0e, 0x393: 0x0e, 0x394: 0x0e, 0x395: 0x0e, 0x396: 0x0e, 0x397: 0x0e, + 0x398: 0x0e, 0x399: 0x0e, 0x39a: 0x0e, 0x39b: 0x0e, 0x39c: 0x0e, 0x39d: 0x0e, 0x39e: 0x0e, 0x39f: 0x46, + 0x3a0: 0x0e, 0x3a1: 0x0e, 0x3a2: 0x0e, 0x3a3: 0x0e, 0x3a4: 0x0e, 0x3a5: 0x0e, 0x3a6: 0x0e, 0x3a7: 0x0e, + 0x3a8: 0x0e, 0x3a9: 0x0e, 0x3aa: 0x0e, 0x3ab: 0x47, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x0e, 0x3c1: 0x0e, 0x3c2: 0x0e, 0x3c3: 0x0e, 0x3c4: 0x48, 0x3c5: 0x49, 0x3c6: 0x0e, 0x3c7: 0x0e, + 0x3c8: 0x0e, 0x3c9: 0x0e, 0x3ca: 0x0e, 0x3cb: 0x4a, + // Block 0x10, offset 0x400 + 0x400: 0x4b, 0x403: 0x4c, 0x404: 0x4d, 0x405: 0x4e, 0x406: 0x4f, + 0x408: 0x50, 0x409: 0x51, 0x40c: 0x52, 0x40d: 0x53, 0x40e: 0x54, 0x40f: 0x55, + 0x410: 0x3a, 0x411: 0x56, 0x412: 0x0e, 0x413: 0x57, 0x414: 0x58, 0x415: 0x59, 0x416: 0x5a, 0x417: 0x5b, + 0x418: 0x0e, 0x419: 0x5c, 0x41a: 0x0e, 0x41b: 0x5d, + 0x424: 0x5e, 0x425: 0x5f, 0x426: 0x60, 0x427: 0x61, + // Block 0x11, offset 0x440 + 0x456: 0x0b, 0x457: 0x06, + 0x458: 0x0c, 0x45b: 0x0d, 0x45f: 0x0e, + 0x460: 0x06, 0x461: 0x06, 0x462: 0x06, 0x463: 0x06, 0x464: 0x06, 0x465: 0x06, 0x466: 0x06, 0x467: 0x06, + 0x468: 0x06, 0x469: 0x06, 0x46a: 0x06, 0x46b: 0x06, 0x46c: 0x06, 0x46d: 0x06, 0x46e: 0x06, 0x46f: 0x06, + 0x470: 0x06, 0x471: 0x06, 0x472: 0x06, 0x473: 0x06, 0x474: 0x06, 0x475: 0x06, 0x476: 0x06, 0x477: 0x06, + 0x478: 0x06, 0x479: 0x06, 0x47a: 0x06, 0x47b: 0x06, 0x47c: 0x06, 0x47d: 0x06, 0x47e: 0x06, 0x47f: 0x06, + // Block 0x12, offset 0x480 + 0x484: 0x08, 0x485: 0x08, 0x486: 0x08, 0x487: 0x09, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x08, 0x4c1: 0x08, 0x4c2: 0x08, 0x4c3: 0x08, 0x4c4: 0x08, 0x4c5: 0x08, 0x4c6: 0x08, 0x4c7: 0x08, + 0x4c8: 0x08, 0x4c9: 0x08, 0x4ca: 0x08, 0x4cb: 0x08, 0x4cc: 0x08, 0x4cd: 0x08, 0x4ce: 0x08, 0x4cf: 0x08, + 0x4d0: 0x08, 0x4d1: 0x08, 0x4d2: 0x08, 0x4d3: 0x08, 0x4d4: 0x08, 0x4d5: 0x08, 0x4d6: 0x08, 0x4d7: 0x08, + 0x4d8: 0x08, 0x4d9: 0x08, 0x4da: 0x08, 0x4db: 0x08, 0x4dc: 0x08, 0x4dd: 0x08, 0x4de: 0x08, 0x4df: 0x08, + 0x4e0: 0x08, 0x4e1: 0x08, 0x4e2: 0x08, 0x4e3: 0x08, 0x4e4: 0x08, 0x4e5: 0x08, 0x4e6: 0x08, 0x4e7: 0x08, + 0x4e8: 0x08, 0x4e9: 0x08, 0x4ea: 0x08, 0x4eb: 0x08, 0x4ec: 0x08, 0x4ed: 0x08, 0x4ee: 0x08, 0x4ef: 0x08, + 0x4f0: 0x08, 0x4f1: 0x08, 0x4f2: 0x08, 0x4f3: 0x08, 0x4f4: 0x08, 0x4f5: 0x08, 0x4f6: 0x08, 0x4f7: 0x08, + 0x4f8: 0x08, 0x4f9: 0x08, 0x4fa: 0x08, 0x4fb: 0x08, 0x4fc: 0x08, 0x4fd: 0x08, 0x4fe: 0x08, 0x4ff: 0x62, + // Block 0x14, offset 0x500 + 0x520: 0x10, + 0x530: 0x09, 0x531: 0x09, 0x532: 0x09, 0x533: 0x09, 0x534: 0x09, 0x535: 0x09, 0x536: 0x09, 0x537: 0x09, + 0x538: 0x09, 0x539: 0x09, 0x53a: 0x09, 0x53b: 0x09, 0x53c: 0x09, 0x53d: 0x09, 0x53e: 0x09, 0x53f: 0x11, + // Block 0x15, offset 0x540 + 0x540: 0x09, 0x541: 0x09, 0x542: 0x09, 0x543: 0x09, 0x544: 0x09, 0x545: 0x09, 0x546: 0x09, 0x547: 0x09, + 0x548: 0x09, 0x549: 0x09, 0x54a: 0x09, 0x54b: 0x09, 0x54c: 0x09, 0x54d: 0x09, 0x54e: 0x09, 0x54f: 0x11, +} + +// inverseData contains 4-byte entries of the following format: +// <0 padding> +// The last byte of the UTF-8-encoded rune is xor-ed with the last byte of the +// UTF-8 encoding of the original rune. Mappings often have the following +// pattern: +// A -> A (U+FF21 -> U+0041) +// B -> B (U+FF22 -> U+0042) +// ... +// By xor-ing the last byte the same entry can be shared by many mappings. This +// reduces the total number of distinct entries by about two thirds. +// The resulting entry for the aforementioned mappings is +// { 0x01, 0xE0, 0x00, 0x00 } +// Using this entry to map U+FF21 (UTF-8 [EF BC A1]), we get +// E0 ^ A1 = 41. +// Similarly, for U+FF22 (UTF-8 [EF BC A2]), we get +// E0 ^ A2 = 42. +// Note that because of the xor-ing, the byte sequence stored in the entry is +// not valid UTF-8. +var inverseData = [150][4]byte{ + {0x00, 0x00, 0x00, 0x00}, + {0x03, 0xe3, 0x80, 0xa0}, + {0x03, 0xef, 0xbc, 0xa0}, + {0x03, 0xef, 0xbc, 0xe0}, + {0x03, 0xef, 0xbd, 0xe0}, + {0x03, 0xef, 0xbf, 0x02}, + {0x03, 0xef, 0xbf, 0x00}, + {0x03, 0xef, 0xbf, 0x0e}, + {0x03, 0xef, 0xbf, 0x0c}, + {0x03, 0xef, 0xbf, 0x0f}, + {0x03, 0xef, 0xbf, 0x39}, + {0x03, 0xef, 0xbf, 0x3b}, + {0x03, 0xef, 0xbf, 0x3f}, + {0x03, 0xef, 0xbf, 0x2a}, + {0x03, 0xef, 0xbf, 0x0d}, + {0x03, 0xef, 0xbf, 0x25}, + {0x03, 0xef, 0xbd, 0x1a}, + {0x03, 0xef, 0xbd, 0x26}, + {0x01, 0xa0, 0x00, 0x00}, + {0x03, 0xef, 0xbd, 0x25}, + {0x03, 0xef, 0xbd, 0x23}, + {0x03, 0xef, 0xbd, 0x2e}, + {0x03, 0xef, 0xbe, 0x07}, + {0x03, 0xef, 0xbe, 0x05}, + {0x03, 0xef, 0xbd, 0x06}, + {0x03, 0xef, 0xbd, 0x13}, + {0x03, 0xef, 0xbd, 0x0b}, + {0x03, 0xef, 0xbd, 0x16}, + {0x03, 0xef, 0xbd, 0x0c}, + {0x03, 0xef, 0xbd, 0x15}, + {0x03, 0xef, 0xbd, 0x0d}, + {0x03, 0xef, 0xbd, 0x1c}, + {0x03, 0xef, 0xbd, 0x02}, + {0x03, 0xef, 0xbd, 0x1f}, + {0x03, 0xef, 0xbd, 0x1d}, + {0x03, 0xef, 0xbd, 0x17}, + {0x03, 0xef, 0xbd, 0x08}, + {0x03, 0xef, 0xbd, 0x09}, + {0x03, 0xef, 0xbd, 0x0e}, + {0x03, 0xef, 0xbd, 0x04}, + {0x03, 0xef, 0xbd, 0x05}, + {0x03, 0xef, 0xbe, 0x3f}, + {0x03, 0xef, 0xbe, 0x00}, + {0x03, 0xef, 0xbd, 0x2c}, + {0x03, 0xef, 0xbe, 0x06}, + {0x03, 0xef, 0xbe, 0x0c}, + {0x03, 0xef, 0xbe, 0x0f}, + {0x03, 0xef, 0xbe, 0x0d}, + {0x03, 0xef, 0xbe, 0x0b}, + {0x03, 0xef, 0xbe, 0x19}, + {0x03, 0xef, 0xbe, 0x15}, + {0x03, 0xef, 0xbe, 0x11}, + {0x03, 0xef, 0xbe, 0x31}, + {0x03, 0xef, 0xbe, 0x33}, + {0x03, 0xef, 0xbd, 0x0f}, + {0x03, 0xef, 0xbe, 0x30}, + {0x03, 0xef, 0xbe, 0x3e}, + {0x03, 0xef, 0xbe, 0x32}, + {0x03, 0xef, 0xbe, 0x36}, + {0x03, 0xef, 0xbd, 0x14}, + {0x03, 0xef, 0xbe, 0x2e}, + {0x03, 0xef, 0xbd, 0x1e}, + {0x03, 0xef, 0xbe, 0x10}, + {0x03, 0xef, 0xbf, 0x13}, + {0x03, 0xef, 0xbf, 0x15}, + {0x03, 0xef, 0xbf, 0x17}, + {0x03, 0xef, 0xbf, 0x1f}, + {0x03, 0xef, 0xbf, 0x1d}, + {0x03, 0xef, 0xbf, 0x1b}, + {0x03, 0xef, 0xbf, 0x09}, + {0x03, 0xef, 0xbf, 0x0b}, + {0x03, 0xef, 0xbf, 0x37}, + {0x03, 0xef, 0xbe, 0x04}, + {0x01, 0xe0, 0x00, 0x00}, + {0x03, 0xe2, 0xa6, 0x1a}, + {0x03, 0xe2, 0xa6, 0x26}, + {0x03, 0xe3, 0x80, 0x23}, + {0x03, 0xe3, 0x80, 0x2e}, + {0x03, 0xe3, 0x80, 0x25}, + {0x03, 0xe3, 0x83, 0x1e}, + {0x03, 0xe3, 0x83, 0x14}, + {0x03, 0xe3, 0x82, 0x06}, + {0x03, 0xe3, 0x82, 0x0b}, + {0x03, 0xe3, 0x82, 0x0c}, + {0x03, 0xe3, 0x82, 0x0d}, + {0x03, 0xe3, 0x82, 0x02}, + {0x03, 0xe3, 0x83, 0x0f}, + {0x03, 0xe3, 0x83, 0x08}, + {0x03, 0xe3, 0x83, 0x09}, + {0x03, 0xe3, 0x83, 0x2c}, + {0x03, 0xe3, 0x83, 0x0c}, + {0x03, 0xe3, 0x82, 0x13}, + {0x03, 0xe3, 0x82, 0x16}, + {0x03, 0xe3, 0x82, 0x15}, + {0x03, 0xe3, 0x82, 0x1c}, + {0x03, 0xe3, 0x82, 0x1f}, + {0x03, 0xe3, 0x82, 0x1d}, + {0x03, 0xe3, 0x82, 0x1a}, + {0x03, 0xe3, 0x82, 0x17}, + {0x03, 0xe3, 0x82, 0x08}, + {0x03, 0xe3, 0x82, 0x09}, + {0x03, 0xe3, 0x82, 0x0e}, + {0x03, 0xe3, 0x82, 0x04}, + {0x03, 0xe3, 0x82, 0x05}, + {0x03, 0xe3, 0x82, 0x3f}, + {0x03, 0xe3, 0x83, 0x00}, + {0x03, 0xe3, 0x83, 0x06}, + {0x03, 0xe3, 0x83, 0x05}, + {0x03, 0xe3, 0x83, 0x0d}, + {0x03, 0xe3, 0x83, 0x0b}, + {0x03, 0xe3, 0x83, 0x07}, + {0x03, 0xe3, 0x83, 0x19}, + {0x03, 0xe3, 0x83, 0x15}, + {0x03, 0xe3, 0x83, 0x11}, + {0x03, 0xe3, 0x83, 0x31}, + {0x03, 0xe3, 0x83, 0x33}, + {0x03, 0xe3, 0x83, 0x30}, + {0x03, 0xe3, 0x83, 0x3e}, + {0x03, 0xe3, 0x83, 0x32}, + {0x03, 0xe3, 0x83, 0x36}, + {0x03, 0xe3, 0x83, 0x2e}, + {0x03, 0xe3, 0x82, 0x07}, + {0x03, 0xe3, 0x85, 0x04}, + {0x03, 0xe3, 0x84, 0x10}, + {0x03, 0xe3, 0x85, 0x30}, + {0x03, 0xe3, 0x85, 0x0d}, + {0x03, 0xe3, 0x85, 0x13}, + {0x03, 0xe3, 0x85, 0x15}, + {0x03, 0xe3, 0x85, 0x17}, + {0x03, 0xe3, 0x85, 0x1f}, + {0x03, 0xe3, 0x85, 0x1d}, + {0x03, 0xe3, 0x85, 0x1b}, + {0x03, 0xe3, 0x85, 0x09}, + {0x03, 0xe3, 0x85, 0x0f}, + {0x03, 0xe3, 0x85, 0x0b}, + {0x03, 0xe3, 0x85, 0x37}, + {0x03, 0xe3, 0x85, 0x3b}, + {0x03, 0xe3, 0x85, 0x39}, + {0x03, 0xe3, 0x85, 0x3f}, + {0x02, 0xc2, 0x02, 0x00}, + {0x02, 0xc2, 0x0e, 0x00}, + {0x02, 0xc2, 0x0c, 0x00}, + {0x02, 0xc2, 0x00, 0x00}, + {0x03, 0xe2, 0x82, 0x0f}, + {0x03, 0xe2, 0x94, 0x2a}, + {0x03, 0xe2, 0x86, 0x39}, + {0x03, 0xe2, 0x86, 0x3b}, + {0x03, 0xe2, 0x86, 0x3f}, + {0x03, 0xe2, 0x96, 0x0d}, + {0x03, 0xe2, 0x97, 0x25}, +} + +// Total table size 14936 bytes (14KiB) diff --git a/vendor/golang.org/x/text/width/tables9.0.0.go b/vendor/golang.org/x/text/width/tables9.0.0.go new file mode 100644 index 0000000..7069e26 --- /dev/null +++ b/vendor/golang.org/x/text/width/tables9.0.0.go @@ -0,0 +1,1286 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// +build !go1.10 + +package width + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "9.0.0" + +// 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 *widthTrie) lookup(s []byte) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return widthValues[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 := widthIndex[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 := widthIndex[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 = widthIndex[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 := widthIndex[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 = widthIndex[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 = widthIndex[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 *widthTrie) lookupUnsafe(s []byte) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return widthValues[c0] + } + i := widthIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = widthIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = widthIndex[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 *widthTrie) lookupString(s string) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return widthValues[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 := widthIndex[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 := widthIndex[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 = widthIndex[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 := widthIndex[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 = widthIndex[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 = widthIndex[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 *widthTrie) lookupStringUnsafe(s string) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return widthValues[c0] + } + i := widthIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = widthIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = widthIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// widthTrie. Total size: 14080 bytes (13.75 KiB). Checksum: 3b8aeb3dc03667a3. +type widthTrie struct{} + +func newWidthTrie(i int) *widthTrie { + return &widthTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *widthTrie) lookupValue(n uint32, b byte) uint16 { + switch { + default: + return uint16(widthValues[n<<6+uint32(b)]) + } +} + +// widthValues: 99 blocks, 6336 entries, 12672 bytes +// The third block is the zero block. +var widthValues = [6336]uint16{ + // Block 0x0, offset 0x0 + 0x20: 0x6001, 0x21: 0x6002, 0x22: 0x6002, 0x23: 0x6002, + 0x24: 0x6002, 0x25: 0x6002, 0x26: 0x6002, 0x27: 0x6002, 0x28: 0x6002, 0x29: 0x6002, + 0x2a: 0x6002, 0x2b: 0x6002, 0x2c: 0x6002, 0x2d: 0x6002, 0x2e: 0x6002, 0x2f: 0x6002, + 0x30: 0x6002, 0x31: 0x6002, 0x32: 0x6002, 0x33: 0x6002, 0x34: 0x6002, 0x35: 0x6002, + 0x36: 0x6002, 0x37: 0x6002, 0x38: 0x6002, 0x39: 0x6002, 0x3a: 0x6002, 0x3b: 0x6002, + 0x3c: 0x6002, 0x3d: 0x6002, 0x3e: 0x6002, 0x3f: 0x6002, + // Block 0x1, offset 0x40 + 0x40: 0x6003, 0x41: 0x6003, 0x42: 0x6003, 0x43: 0x6003, 0x44: 0x6003, 0x45: 0x6003, + 0x46: 0x6003, 0x47: 0x6003, 0x48: 0x6003, 0x49: 0x6003, 0x4a: 0x6003, 0x4b: 0x6003, + 0x4c: 0x6003, 0x4d: 0x6003, 0x4e: 0x6003, 0x4f: 0x6003, 0x50: 0x6003, 0x51: 0x6003, + 0x52: 0x6003, 0x53: 0x6003, 0x54: 0x6003, 0x55: 0x6003, 0x56: 0x6003, 0x57: 0x6003, + 0x58: 0x6003, 0x59: 0x6003, 0x5a: 0x6003, 0x5b: 0x6003, 0x5c: 0x6003, 0x5d: 0x6003, + 0x5e: 0x6003, 0x5f: 0x6003, 0x60: 0x6004, 0x61: 0x6004, 0x62: 0x6004, 0x63: 0x6004, + 0x64: 0x6004, 0x65: 0x6004, 0x66: 0x6004, 0x67: 0x6004, 0x68: 0x6004, 0x69: 0x6004, + 0x6a: 0x6004, 0x6b: 0x6004, 0x6c: 0x6004, 0x6d: 0x6004, 0x6e: 0x6004, 0x6f: 0x6004, + 0x70: 0x6004, 0x71: 0x6004, 0x72: 0x6004, 0x73: 0x6004, 0x74: 0x6004, 0x75: 0x6004, + 0x76: 0x6004, 0x77: 0x6004, 0x78: 0x6004, 0x79: 0x6004, 0x7a: 0x6004, 0x7b: 0x6004, + 0x7c: 0x6004, 0x7d: 0x6004, 0x7e: 0x6004, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xe1: 0x2000, 0xe2: 0x6005, 0xe3: 0x6005, + 0xe4: 0x2000, 0xe5: 0x6006, 0xe6: 0x6005, 0xe7: 0x2000, 0xe8: 0x2000, + 0xea: 0x2000, 0xec: 0x6007, 0xed: 0x2000, 0xee: 0x2000, 0xef: 0x6008, + 0xf0: 0x2000, 0xf1: 0x2000, 0xf2: 0x2000, 0xf3: 0x2000, 0xf4: 0x2000, + 0xf6: 0x2000, 0xf7: 0x2000, 0xf8: 0x2000, 0xf9: 0x2000, 0xfa: 0x2000, + 0xfc: 0x2000, 0xfd: 0x2000, 0xfe: 0x2000, 0xff: 0x2000, + // Block 0x4, offset 0x100 + 0x106: 0x2000, + 0x110: 0x2000, + 0x117: 0x2000, + 0x118: 0x2000, + 0x11e: 0x2000, 0x11f: 0x2000, 0x120: 0x2000, 0x121: 0x2000, + 0x126: 0x2000, 0x128: 0x2000, 0x129: 0x2000, + 0x12a: 0x2000, 0x12c: 0x2000, 0x12d: 0x2000, + 0x130: 0x2000, 0x132: 0x2000, 0x133: 0x2000, + 0x137: 0x2000, 0x138: 0x2000, 0x139: 0x2000, 0x13a: 0x2000, + 0x13c: 0x2000, 0x13e: 0x2000, + // Block 0x5, offset 0x140 + 0x141: 0x2000, + 0x151: 0x2000, + 0x153: 0x2000, + 0x15b: 0x2000, + 0x166: 0x2000, 0x167: 0x2000, + 0x16b: 0x2000, + 0x171: 0x2000, 0x172: 0x2000, 0x173: 0x2000, + 0x178: 0x2000, + 0x17f: 0x2000, + // Block 0x6, offset 0x180 + 0x180: 0x2000, 0x181: 0x2000, 0x182: 0x2000, 0x184: 0x2000, + 0x188: 0x2000, 0x189: 0x2000, 0x18a: 0x2000, 0x18b: 0x2000, + 0x18d: 0x2000, + 0x192: 0x2000, 0x193: 0x2000, + 0x1a6: 0x2000, 0x1a7: 0x2000, + 0x1ab: 0x2000, + // Block 0x7, offset 0x1c0 + 0x1ce: 0x2000, 0x1d0: 0x2000, + 0x1d2: 0x2000, 0x1d4: 0x2000, 0x1d6: 0x2000, + 0x1d8: 0x2000, 0x1da: 0x2000, 0x1dc: 0x2000, + // Block 0x8, offset 0x200 + 0x211: 0x2000, + 0x221: 0x2000, + // Block 0x9, offset 0x240 + 0x244: 0x2000, + 0x247: 0x2000, 0x249: 0x2000, 0x24a: 0x2000, 0x24b: 0x2000, + 0x24d: 0x2000, 0x250: 0x2000, + 0x258: 0x2000, 0x259: 0x2000, 0x25a: 0x2000, 0x25b: 0x2000, 0x25d: 0x2000, + 0x25f: 0x2000, + // Block 0xa, offset 0x280 + 0x280: 0x2000, 0x281: 0x2000, 0x282: 0x2000, 0x283: 0x2000, 0x284: 0x2000, 0x285: 0x2000, + 0x286: 0x2000, 0x287: 0x2000, 0x288: 0x2000, 0x289: 0x2000, 0x28a: 0x2000, 0x28b: 0x2000, + 0x28c: 0x2000, 0x28d: 0x2000, 0x28e: 0x2000, 0x28f: 0x2000, 0x290: 0x2000, 0x291: 0x2000, + 0x292: 0x2000, 0x293: 0x2000, 0x294: 0x2000, 0x295: 0x2000, 0x296: 0x2000, 0x297: 0x2000, + 0x298: 0x2000, 0x299: 0x2000, 0x29a: 0x2000, 0x29b: 0x2000, 0x29c: 0x2000, 0x29d: 0x2000, + 0x29e: 0x2000, 0x29f: 0x2000, 0x2a0: 0x2000, 0x2a1: 0x2000, 0x2a2: 0x2000, 0x2a3: 0x2000, + 0x2a4: 0x2000, 0x2a5: 0x2000, 0x2a6: 0x2000, 0x2a7: 0x2000, 0x2a8: 0x2000, 0x2a9: 0x2000, + 0x2aa: 0x2000, 0x2ab: 0x2000, 0x2ac: 0x2000, 0x2ad: 0x2000, 0x2ae: 0x2000, 0x2af: 0x2000, + 0x2b0: 0x2000, 0x2b1: 0x2000, 0x2b2: 0x2000, 0x2b3: 0x2000, 0x2b4: 0x2000, 0x2b5: 0x2000, + 0x2b6: 0x2000, 0x2b7: 0x2000, 0x2b8: 0x2000, 0x2b9: 0x2000, 0x2ba: 0x2000, 0x2bb: 0x2000, + 0x2bc: 0x2000, 0x2bd: 0x2000, 0x2be: 0x2000, 0x2bf: 0x2000, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x2000, 0x2c1: 0x2000, 0x2c2: 0x2000, 0x2c3: 0x2000, 0x2c4: 0x2000, 0x2c5: 0x2000, + 0x2c6: 0x2000, 0x2c7: 0x2000, 0x2c8: 0x2000, 0x2c9: 0x2000, 0x2ca: 0x2000, 0x2cb: 0x2000, + 0x2cc: 0x2000, 0x2cd: 0x2000, 0x2ce: 0x2000, 0x2cf: 0x2000, 0x2d0: 0x2000, 0x2d1: 0x2000, + 0x2d2: 0x2000, 0x2d3: 0x2000, 0x2d4: 0x2000, 0x2d5: 0x2000, 0x2d6: 0x2000, 0x2d7: 0x2000, + 0x2d8: 0x2000, 0x2d9: 0x2000, 0x2da: 0x2000, 0x2db: 0x2000, 0x2dc: 0x2000, 0x2dd: 0x2000, + 0x2de: 0x2000, 0x2df: 0x2000, 0x2e0: 0x2000, 0x2e1: 0x2000, 0x2e2: 0x2000, 0x2e3: 0x2000, + 0x2e4: 0x2000, 0x2e5: 0x2000, 0x2e6: 0x2000, 0x2e7: 0x2000, 0x2e8: 0x2000, 0x2e9: 0x2000, + 0x2ea: 0x2000, 0x2eb: 0x2000, 0x2ec: 0x2000, 0x2ed: 0x2000, 0x2ee: 0x2000, 0x2ef: 0x2000, + // Block 0xc, offset 0x300 + 0x311: 0x2000, + 0x312: 0x2000, 0x313: 0x2000, 0x314: 0x2000, 0x315: 0x2000, 0x316: 0x2000, 0x317: 0x2000, + 0x318: 0x2000, 0x319: 0x2000, 0x31a: 0x2000, 0x31b: 0x2000, 0x31c: 0x2000, 0x31d: 0x2000, + 0x31e: 0x2000, 0x31f: 0x2000, 0x320: 0x2000, 0x321: 0x2000, 0x323: 0x2000, + 0x324: 0x2000, 0x325: 0x2000, 0x326: 0x2000, 0x327: 0x2000, 0x328: 0x2000, 0x329: 0x2000, + 0x331: 0x2000, 0x332: 0x2000, 0x333: 0x2000, 0x334: 0x2000, 0x335: 0x2000, + 0x336: 0x2000, 0x337: 0x2000, 0x338: 0x2000, 0x339: 0x2000, 0x33a: 0x2000, 0x33b: 0x2000, + 0x33c: 0x2000, 0x33d: 0x2000, 0x33e: 0x2000, 0x33f: 0x2000, + // Block 0xd, offset 0x340 + 0x340: 0x2000, 0x341: 0x2000, 0x343: 0x2000, 0x344: 0x2000, 0x345: 0x2000, + 0x346: 0x2000, 0x347: 0x2000, 0x348: 0x2000, 0x349: 0x2000, + // Block 0xe, offset 0x380 + 0x381: 0x2000, + 0x390: 0x2000, 0x391: 0x2000, + 0x392: 0x2000, 0x393: 0x2000, 0x394: 0x2000, 0x395: 0x2000, 0x396: 0x2000, 0x397: 0x2000, + 0x398: 0x2000, 0x399: 0x2000, 0x39a: 0x2000, 0x39b: 0x2000, 0x39c: 0x2000, 0x39d: 0x2000, + 0x39e: 0x2000, 0x39f: 0x2000, 0x3a0: 0x2000, 0x3a1: 0x2000, 0x3a2: 0x2000, 0x3a3: 0x2000, + 0x3a4: 0x2000, 0x3a5: 0x2000, 0x3a6: 0x2000, 0x3a7: 0x2000, 0x3a8: 0x2000, 0x3a9: 0x2000, + 0x3aa: 0x2000, 0x3ab: 0x2000, 0x3ac: 0x2000, 0x3ad: 0x2000, 0x3ae: 0x2000, 0x3af: 0x2000, + 0x3b0: 0x2000, 0x3b1: 0x2000, 0x3b2: 0x2000, 0x3b3: 0x2000, 0x3b4: 0x2000, 0x3b5: 0x2000, + 0x3b6: 0x2000, 0x3b7: 0x2000, 0x3b8: 0x2000, 0x3b9: 0x2000, 0x3ba: 0x2000, 0x3bb: 0x2000, + 0x3bc: 0x2000, 0x3bd: 0x2000, 0x3be: 0x2000, 0x3bf: 0x2000, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x2000, 0x3c1: 0x2000, 0x3c2: 0x2000, 0x3c3: 0x2000, 0x3c4: 0x2000, 0x3c5: 0x2000, + 0x3c6: 0x2000, 0x3c7: 0x2000, 0x3c8: 0x2000, 0x3c9: 0x2000, 0x3ca: 0x2000, 0x3cb: 0x2000, + 0x3cc: 0x2000, 0x3cd: 0x2000, 0x3ce: 0x2000, 0x3cf: 0x2000, 0x3d1: 0x2000, + // Block 0x10, offset 0x400 + 0x400: 0x4000, 0x401: 0x4000, 0x402: 0x4000, 0x403: 0x4000, 0x404: 0x4000, 0x405: 0x4000, + 0x406: 0x4000, 0x407: 0x4000, 0x408: 0x4000, 0x409: 0x4000, 0x40a: 0x4000, 0x40b: 0x4000, + 0x40c: 0x4000, 0x40d: 0x4000, 0x40e: 0x4000, 0x40f: 0x4000, 0x410: 0x4000, 0x411: 0x4000, + 0x412: 0x4000, 0x413: 0x4000, 0x414: 0x4000, 0x415: 0x4000, 0x416: 0x4000, 0x417: 0x4000, + 0x418: 0x4000, 0x419: 0x4000, 0x41a: 0x4000, 0x41b: 0x4000, 0x41c: 0x4000, 0x41d: 0x4000, + 0x41e: 0x4000, 0x41f: 0x4000, 0x420: 0x4000, 0x421: 0x4000, 0x422: 0x4000, 0x423: 0x4000, + 0x424: 0x4000, 0x425: 0x4000, 0x426: 0x4000, 0x427: 0x4000, 0x428: 0x4000, 0x429: 0x4000, + 0x42a: 0x4000, 0x42b: 0x4000, 0x42c: 0x4000, 0x42d: 0x4000, 0x42e: 0x4000, 0x42f: 0x4000, + 0x430: 0x4000, 0x431: 0x4000, 0x432: 0x4000, 0x433: 0x4000, 0x434: 0x4000, 0x435: 0x4000, + 0x436: 0x4000, 0x437: 0x4000, 0x438: 0x4000, 0x439: 0x4000, 0x43a: 0x4000, 0x43b: 0x4000, + 0x43c: 0x4000, 0x43d: 0x4000, 0x43e: 0x4000, 0x43f: 0x4000, + // Block 0x11, offset 0x440 + 0x440: 0x4000, 0x441: 0x4000, 0x442: 0x4000, 0x443: 0x4000, 0x444: 0x4000, 0x445: 0x4000, + 0x446: 0x4000, 0x447: 0x4000, 0x448: 0x4000, 0x449: 0x4000, 0x44a: 0x4000, 0x44b: 0x4000, + 0x44c: 0x4000, 0x44d: 0x4000, 0x44e: 0x4000, 0x44f: 0x4000, 0x450: 0x4000, 0x451: 0x4000, + 0x452: 0x4000, 0x453: 0x4000, 0x454: 0x4000, 0x455: 0x4000, 0x456: 0x4000, 0x457: 0x4000, + 0x458: 0x4000, 0x459: 0x4000, 0x45a: 0x4000, 0x45b: 0x4000, 0x45c: 0x4000, 0x45d: 0x4000, + 0x45e: 0x4000, 0x45f: 0x4000, + // Block 0x12, offset 0x480 + 0x490: 0x2000, + 0x493: 0x2000, 0x494: 0x2000, 0x495: 0x2000, 0x496: 0x2000, + 0x498: 0x2000, 0x499: 0x2000, 0x49c: 0x2000, 0x49d: 0x2000, + 0x4a0: 0x2000, 0x4a1: 0x2000, 0x4a2: 0x2000, + 0x4a4: 0x2000, 0x4a5: 0x2000, 0x4a6: 0x2000, 0x4a7: 0x2000, + 0x4b0: 0x2000, 0x4b2: 0x2000, 0x4b3: 0x2000, 0x4b5: 0x2000, + 0x4bb: 0x2000, + 0x4be: 0x2000, + // Block 0x13, offset 0x4c0 + 0x4f4: 0x2000, + 0x4ff: 0x2000, + // Block 0x14, offset 0x500 + 0x501: 0x2000, 0x502: 0x2000, 0x503: 0x2000, 0x504: 0x2000, + 0x529: 0xa009, + 0x52c: 0x2000, + // Block 0x15, offset 0x540 + 0x543: 0x2000, 0x545: 0x2000, + 0x549: 0x2000, + 0x553: 0x2000, 0x556: 0x2000, + 0x561: 0x2000, 0x562: 0x2000, + 0x566: 0x2000, + 0x56b: 0x2000, + // Block 0x16, offset 0x580 + 0x593: 0x2000, 0x594: 0x2000, + 0x59b: 0x2000, 0x59c: 0x2000, 0x59d: 0x2000, + 0x59e: 0x2000, 0x5a0: 0x2000, 0x5a1: 0x2000, 0x5a2: 0x2000, 0x5a3: 0x2000, + 0x5a4: 0x2000, 0x5a5: 0x2000, 0x5a6: 0x2000, 0x5a7: 0x2000, 0x5a8: 0x2000, 0x5a9: 0x2000, + 0x5aa: 0x2000, 0x5ab: 0x2000, + 0x5b0: 0x2000, 0x5b1: 0x2000, 0x5b2: 0x2000, 0x5b3: 0x2000, 0x5b4: 0x2000, 0x5b5: 0x2000, + 0x5b6: 0x2000, 0x5b7: 0x2000, 0x5b8: 0x2000, 0x5b9: 0x2000, + // Block 0x17, offset 0x5c0 + 0x5c9: 0x2000, + 0x5d0: 0x200a, 0x5d1: 0x200b, + 0x5d2: 0x200a, 0x5d3: 0x200c, 0x5d4: 0x2000, 0x5d5: 0x2000, 0x5d6: 0x2000, 0x5d7: 0x2000, + 0x5d8: 0x2000, 0x5d9: 0x2000, + 0x5f8: 0x2000, 0x5f9: 0x2000, + // Block 0x18, offset 0x600 + 0x612: 0x2000, 0x614: 0x2000, + 0x627: 0x2000, + // Block 0x19, offset 0x640 + 0x640: 0x2000, 0x642: 0x2000, 0x643: 0x2000, + 0x647: 0x2000, 0x648: 0x2000, 0x64b: 0x2000, + 0x64f: 0x2000, 0x651: 0x2000, + 0x655: 0x2000, + 0x65a: 0x2000, 0x65d: 0x2000, + 0x65e: 0x2000, 0x65f: 0x2000, 0x660: 0x2000, 0x663: 0x2000, + 0x665: 0x2000, 0x667: 0x2000, 0x668: 0x2000, 0x669: 0x2000, + 0x66a: 0x2000, 0x66b: 0x2000, 0x66c: 0x2000, 0x66e: 0x2000, + 0x674: 0x2000, 0x675: 0x2000, + 0x676: 0x2000, 0x677: 0x2000, + 0x67c: 0x2000, 0x67d: 0x2000, + // Block 0x1a, offset 0x680 + 0x688: 0x2000, + 0x68c: 0x2000, + 0x692: 0x2000, + 0x6a0: 0x2000, 0x6a1: 0x2000, + 0x6a4: 0x2000, 0x6a5: 0x2000, 0x6a6: 0x2000, 0x6a7: 0x2000, + 0x6aa: 0x2000, 0x6ab: 0x2000, 0x6ae: 0x2000, 0x6af: 0x2000, + // Block 0x1b, offset 0x6c0 + 0x6c2: 0x2000, 0x6c3: 0x2000, + 0x6c6: 0x2000, 0x6c7: 0x2000, + 0x6d5: 0x2000, + 0x6d9: 0x2000, + 0x6e5: 0x2000, + 0x6ff: 0x2000, + // Block 0x1c, offset 0x700 + 0x712: 0x2000, + 0x71a: 0x4000, 0x71b: 0x4000, + 0x729: 0x4000, + 0x72a: 0x4000, + // Block 0x1d, offset 0x740 + 0x769: 0x4000, + 0x76a: 0x4000, 0x76b: 0x4000, 0x76c: 0x4000, + 0x770: 0x4000, 0x773: 0x4000, + // Block 0x1e, offset 0x780 + 0x7a0: 0x2000, 0x7a1: 0x2000, 0x7a2: 0x2000, 0x7a3: 0x2000, + 0x7a4: 0x2000, 0x7a5: 0x2000, 0x7a6: 0x2000, 0x7a7: 0x2000, 0x7a8: 0x2000, 0x7a9: 0x2000, + 0x7aa: 0x2000, 0x7ab: 0x2000, 0x7ac: 0x2000, 0x7ad: 0x2000, 0x7ae: 0x2000, 0x7af: 0x2000, + 0x7b0: 0x2000, 0x7b1: 0x2000, 0x7b2: 0x2000, 0x7b3: 0x2000, 0x7b4: 0x2000, 0x7b5: 0x2000, + 0x7b6: 0x2000, 0x7b7: 0x2000, 0x7b8: 0x2000, 0x7b9: 0x2000, 0x7ba: 0x2000, 0x7bb: 0x2000, + 0x7bc: 0x2000, 0x7bd: 0x2000, 0x7be: 0x2000, 0x7bf: 0x2000, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x2000, 0x7c1: 0x2000, 0x7c2: 0x2000, 0x7c3: 0x2000, 0x7c4: 0x2000, 0x7c5: 0x2000, + 0x7c6: 0x2000, 0x7c7: 0x2000, 0x7c8: 0x2000, 0x7c9: 0x2000, 0x7ca: 0x2000, 0x7cb: 0x2000, + 0x7cc: 0x2000, 0x7cd: 0x2000, 0x7ce: 0x2000, 0x7cf: 0x2000, 0x7d0: 0x2000, 0x7d1: 0x2000, + 0x7d2: 0x2000, 0x7d3: 0x2000, 0x7d4: 0x2000, 0x7d5: 0x2000, 0x7d6: 0x2000, 0x7d7: 0x2000, + 0x7d8: 0x2000, 0x7d9: 0x2000, 0x7da: 0x2000, 0x7db: 0x2000, 0x7dc: 0x2000, 0x7dd: 0x2000, + 0x7de: 0x2000, 0x7df: 0x2000, 0x7e0: 0x2000, 0x7e1: 0x2000, 0x7e2: 0x2000, 0x7e3: 0x2000, + 0x7e4: 0x2000, 0x7e5: 0x2000, 0x7e6: 0x2000, 0x7e7: 0x2000, 0x7e8: 0x2000, 0x7e9: 0x2000, + 0x7eb: 0x2000, 0x7ec: 0x2000, 0x7ed: 0x2000, 0x7ee: 0x2000, 0x7ef: 0x2000, + 0x7f0: 0x2000, 0x7f1: 0x2000, 0x7f2: 0x2000, 0x7f3: 0x2000, 0x7f4: 0x2000, 0x7f5: 0x2000, + 0x7f6: 0x2000, 0x7f7: 0x2000, 0x7f8: 0x2000, 0x7f9: 0x2000, 0x7fa: 0x2000, 0x7fb: 0x2000, + 0x7fc: 0x2000, 0x7fd: 0x2000, 0x7fe: 0x2000, 0x7ff: 0x2000, + // Block 0x20, offset 0x800 + 0x800: 0x2000, 0x801: 0x2000, 0x802: 0x200d, 0x803: 0x2000, 0x804: 0x2000, 0x805: 0x2000, + 0x806: 0x2000, 0x807: 0x2000, 0x808: 0x2000, 0x809: 0x2000, 0x80a: 0x2000, 0x80b: 0x2000, + 0x80c: 0x2000, 0x80d: 0x2000, 0x80e: 0x2000, 0x80f: 0x2000, 0x810: 0x2000, 0x811: 0x2000, + 0x812: 0x2000, 0x813: 0x2000, 0x814: 0x2000, 0x815: 0x2000, 0x816: 0x2000, 0x817: 0x2000, + 0x818: 0x2000, 0x819: 0x2000, 0x81a: 0x2000, 0x81b: 0x2000, 0x81c: 0x2000, 0x81d: 0x2000, + 0x81e: 0x2000, 0x81f: 0x2000, 0x820: 0x2000, 0x821: 0x2000, 0x822: 0x2000, 0x823: 0x2000, + 0x824: 0x2000, 0x825: 0x2000, 0x826: 0x2000, 0x827: 0x2000, 0x828: 0x2000, 0x829: 0x2000, + 0x82a: 0x2000, 0x82b: 0x2000, 0x82c: 0x2000, 0x82d: 0x2000, 0x82e: 0x2000, 0x82f: 0x2000, + 0x830: 0x2000, 0x831: 0x2000, 0x832: 0x2000, 0x833: 0x2000, 0x834: 0x2000, 0x835: 0x2000, + 0x836: 0x2000, 0x837: 0x2000, 0x838: 0x2000, 0x839: 0x2000, 0x83a: 0x2000, 0x83b: 0x2000, + 0x83c: 0x2000, 0x83d: 0x2000, 0x83e: 0x2000, 0x83f: 0x2000, + // Block 0x21, offset 0x840 + 0x840: 0x2000, 0x841: 0x2000, 0x842: 0x2000, 0x843: 0x2000, 0x844: 0x2000, 0x845: 0x2000, + 0x846: 0x2000, 0x847: 0x2000, 0x848: 0x2000, 0x849: 0x2000, 0x84a: 0x2000, 0x84b: 0x2000, + 0x850: 0x2000, 0x851: 0x2000, + 0x852: 0x2000, 0x853: 0x2000, 0x854: 0x2000, 0x855: 0x2000, 0x856: 0x2000, 0x857: 0x2000, + 0x858: 0x2000, 0x859: 0x2000, 0x85a: 0x2000, 0x85b: 0x2000, 0x85c: 0x2000, 0x85d: 0x2000, + 0x85e: 0x2000, 0x85f: 0x2000, 0x860: 0x2000, 0x861: 0x2000, 0x862: 0x2000, 0x863: 0x2000, + 0x864: 0x2000, 0x865: 0x2000, 0x866: 0x2000, 0x867: 0x2000, 0x868: 0x2000, 0x869: 0x2000, + 0x86a: 0x2000, 0x86b: 0x2000, 0x86c: 0x2000, 0x86d: 0x2000, 0x86e: 0x2000, 0x86f: 0x2000, + 0x870: 0x2000, 0x871: 0x2000, 0x872: 0x2000, 0x873: 0x2000, + // Block 0x22, offset 0x880 + 0x880: 0x2000, 0x881: 0x2000, 0x882: 0x2000, 0x883: 0x2000, 0x884: 0x2000, 0x885: 0x2000, + 0x886: 0x2000, 0x887: 0x2000, 0x888: 0x2000, 0x889: 0x2000, 0x88a: 0x2000, 0x88b: 0x2000, + 0x88c: 0x2000, 0x88d: 0x2000, 0x88e: 0x2000, 0x88f: 0x2000, + 0x892: 0x2000, 0x893: 0x2000, 0x894: 0x2000, 0x895: 0x2000, + 0x8a0: 0x200e, 0x8a1: 0x2000, 0x8a3: 0x2000, + 0x8a4: 0x2000, 0x8a5: 0x2000, 0x8a6: 0x2000, 0x8a7: 0x2000, 0x8a8: 0x2000, 0x8a9: 0x2000, + 0x8b2: 0x2000, 0x8b3: 0x2000, + 0x8b6: 0x2000, 0x8b7: 0x2000, + 0x8bc: 0x2000, 0x8bd: 0x2000, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x2000, 0x8c1: 0x2000, + 0x8c6: 0x2000, 0x8c7: 0x2000, 0x8c8: 0x2000, 0x8cb: 0x200f, + 0x8ce: 0x2000, 0x8cf: 0x2000, 0x8d0: 0x2000, 0x8d1: 0x2000, + 0x8e2: 0x2000, 0x8e3: 0x2000, + 0x8e4: 0x2000, 0x8e5: 0x2000, + 0x8ef: 0x2000, + 0x8fd: 0x4000, 0x8fe: 0x4000, + // Block 0x24, offset 0x900 + 0x905: 0x2000, + 0x906: 0x2000, 0x909: 0x2000, + 0x90e: 0x2000, 0x90f: 0x2000, + 0x914: 0x4000, 0x915: 0x4000, + 0x91c: 0x2000, + 0x91e: 0x2000, + // Block 0x25, offset 0x940 + 0x940: 0x2000, 0x942: 0x2000, + 0x948: 0x4000, 0x949: 0x4000, 0x94a: 0x4000, 0x94b: 0x4000, + 0x94c: 0x4000, 0x94d: 0x4000, 0x94e: 0x4000, 0x94f: 0x4000, 0x950: 0x4000, 0x951: 0x4000, + 0x952: 0x4000, 0x953: 0x4000, + 0x960: 0x2000, 0x961: 0x2000, 0x963: 0x2000, + 0x964: 0x2000, 0x965: 0x2000, 0x967: 0x2000, 0x968: 0x2000, 0x969: 0x2000, + 0x96a: 0x2000, 0x96c: 0x2000, 0x96d: 0x2000, 0x96f: 0x2000, + 0x97f: 0x4000, + // Block 0x26, offset 0x980 + 0x993: 0x4000, + 0x99e: 0x2000, 0x99f: 0x2000, 0x9a1: 0x4000, + 0x9aa: 0x4000, 0x9ab: 0x4000, + 0x9bd: 0x4000, 0x9be: 0x4000, 0x9bf: 0x2000, + // Block 0x27, offset 0x9c0 + 0x9c4: 0x4000, 0x9c5: 0x4000, + 0x9c6: 0x2000, 0x9c7: 0x2000, 0x9c8: 0x2000, 0x9c9: 0x2000, 0x9ca: 0x2000, 0x9cb: 0x2000, + 0x9cc: 0x2000, 0x9cd: 0x2000, 0x9ce: 0x4000, 0x9cf: 0x2000, 0x9d0: 0x2000, 0x9d1: 0x2000, + 0x9d2: 0x2000, 0x9d3: 0x2000, 0x9d4: 0x4000, 0x9d5: 0x2000, 0x9d6: 0x2000, 0x9d7: 0x2000, + 0x9d8: 0x2000, 0x9d9: 0x2000, 0x9da: 0x2000, 0x9db: 0x2000, 0x9dc: 0x2000, 0x9dd: 0x2000, + 0x9de: 0x2000, 0x9df: 0x2000, 0x9e0: 0x2000, 0x9e1: 0x2000, 0x9e3: 0x2000, + 0x9e8: 0x2000, 0x9e9: 0x2000, + 0x9ea: 0x4000, 0x9eb: 0x2000, 0x9ec: 0x2000, 0x9ed: 0x2000, 0x9ee: 0x2000, 0x9ef: 0x2000, + 0x9f0: 0x2000, 0x9f1: 0x2000, 0x9f2: 0x4000, 0x9f3: 0x4000, 0x9f4: 0x2000, 0x9f5: 0x4000, + 0x9f6: 0x2000, 0x9f7: 0x2000, 0x9f8: 0x2000, 0x9f9: 0x2000, 0x9fa: 0x4000, 0x9fb: 0x2000, + 0x9fc: 0x2000, 0x9fd: 0x4000, 0x9fe: 0x2000, 0x9ff: 0x2000, + // Block 0x28, offset 0xa00 + 0xa05: 0x4000, + 0xa0a: 0x4000, 0xa0b: 0x4000, + 0xa28: 0x4000, + 0xa3d: 0x2000, + // Block 0x29, offset 0xa40 + 0xa4c: 0x4000, 0xa4e: 0x4000, + 0xa53: 0x4000, 0xa54: 0x4000, 0xa55: 0x4000, 0xa57: 0x4000, + 0xa76: 0x2000, 0xa77: 0x2000, 0xa78: 0x2000, 0xa79: 0x2000, 0xa7a: 0x2000, 0xa7b: 0x2000, + 0xa7c: 0x2000, 0xa7d: 0x2000, 0xa7e: 0x2000, 0xa7f: 0x2000, + // Block 0x2a, offset 0xa80 + 0xa95: 0x4000, 0xa96: 0x4000, 0xa97: 0x4000, + 0xab0: 0x4000, + 0xabf: 0x4000, + // Block 0x2b, offset 0xac0 + 0xae6: 0x6000, 0xae7: 0x6000, 0xae8: 0x6000, 0xae9: 0x6000, + 0xaea: 0x6000, 0xaeb: 0x6000, 0xaec: 0x6000, 0xaed: 0x6000, + // Block 0x2c, offset 0xb00 + 0xb05: 0x6010, + 0xb06: 0x6011, + // Block 0x2d, offset 0xb40 + 0xb5b: 0x4000, 0xb5c: 0x4000, + // Block 0x2e, offset 0xb80 + 0xb90: 0x4000, + 0xb95: 0x4000, 0xb96: 0x2000, 0xb97: 0x2000, + 0xb98: 0x2000, 0xb99: 0x2000, + // Block 0x2f, offset 0xbc0 + 0xbc0: 0x4000, 0xbc1: 0x4000, 0xbc2: 0x4000, 0xbc3: 0x4000, 0xbc4: 0x4000, 0xbc5: 0x4000, + 0xbc6: 0x4000, 0xbc7: 0x4000, 0xbc8: 0x4000, 0xbc9: 0x4000, 0xbca: 0x4000, 0xbcb: 0x4000, + 0xbcc: 0x4000, 0xbcd: 0x4000, 0xbce: 0x4000, 0xbcf: 0x4000, 0xbd0: 0x4000, 0xbd1: 0x4000, + 0xbd2: 0x4000, 0xbd3: 0x4000, 0xbd4: 0x4000, 0xbd5: 0x4000, 0xbd6: 0x4000, 0xbd7: 0x4000, + 0xbd8: 0x4000, 0xbd9: 0x4000, 0xbdb: 0x4000, 0xbdc: 0x4000, 0xbdd: 0x4000, + 0xbde: 0x4000, 0xbdf: 0x4000, 0xbe0: 0x4000, 0xbe1: 0x4000, 0xbe2: 0x4000, 0xbe3: 0x4000, + 0xbe4: 0x4000, 0xbe5: 0x4000, 0xbe6: 0x4000, 0xbe7: 0x4000, 0xbe8: 0x4000, 0xbe9: 0x4000, + 0xbea: 0x4000, 0xbeb: 0x4000, 0xbec: 0x4000, 0xbed: 0x4000, 0xbee: 0x4000, 0xbef: 0x4000, + 0xbf0: 0x4000, 0xbf1: 0x4000, 0xbf2: 0x4000, 0xbf3: 0x4000, 0xbf4: 0x4000, 0xbf5: 0x4000, + 0xbf6: 0x4000, 0xbf7: 0x4000, 0xbf8: 0x4000, 0xbf9: 0x4000, 0xbfa: 0x4000, 0xbfb: 0x4000, + 0xbfc: 0x4000, 0xbfd: 0x4000, 0xbfe: 0x4000, 0xbff: 0x4000, + // Block 0x30, offset 0xc00 + 0xc00: 0x4000, 0xc01: 0x4000, 0xc02: 0x4000, 0xc03: 0x4000, 0xc04: 0x4000, 0xc05: 0x4000, + 0xc06: 0x4000, 0xc07: 0x4000, 0xc08: 0x4000, 0xc09: 0x4000, 0xc0a: 0x4000, 0xc0b: 0x4000, + 0xc0c: 0x4000, 0xc0d: 0x4000, 0xc0e: 0x4000, 0xc0f: 0x4000, 0xc10: 0x4000, 0xc11: 0x4000, + 0xc12: 0x4000, 0xc13: 0x4000, 0xc14: 0x4000, 0xc15: 0x4000, 0xc16: 0x4000, 0xc17: 0x4000, + 0xc18: 0x4000, 0xc19: 0x4000, 0xc1a: 0x4000, 0xc1b: 0x4000, 0xc1c: 0x4000, 0xc1d: 0x4000, + 0xc1e: 0x4000, 0xc1f: 0x4000, 0xc20: 0x4000, 0xc21: 0x4000, 0xc22: 0x4000, 0xc23: 0x4000, + 0xc24: 0x4000, 0xc25: 0x4000, 0xc26: 0x4000, 0xc27: 0x4000, 0xc28: 0x4000, 0xc29: 0x4000, + 0xc2a: 0x4000, 0xc2b: 0x4000, 0xc2c: 0x4000, 0xc2d: 0x4000, 0xc2e: 0x4000, 0xc2f: 0x4000, + 0xc30: 0x4000, 0xc31: 0x4000, 0xc32: 0x4000, 0xc33: 0x4000, + // Block 0x31, offset 0xc40 + 0xc40: 0x4000, 0xc41: 0x4000, 0xc42: 0x4000, 0xc43: 0x4000, 0xc44: 0x4000, 0xc45: 0x4000, + 0xc46: 0x4000, 0xc47: 0x4000, 0xc48: 0x4000, 0xc49: 0x4000, 0xc4a: 0x4000, 0xc4b: 0x4000, + 0xc4c: 0x4000, 0xc4d: 0x4000, 0xc4e: 0x4000, 0xc4f: 0x4000, 0xc50: 0x4000, 0xc51: 0x4000, + 0xc52: 0x4000, 0xc53: 0x4000, 0xc54: 0x4000, 0xc55: 0x4000, + 0xc70: 0x4000, 0xc71: 0x4000, 0xc72: 0x4000, 0xc73: 0x4000, 0xc74: 0x4000, 0xc75: 0x4000, + 0xc76: 0x4000, 0xc77: 0x4000, 0xc78: 0x4000, 0xc79: 0x4000, 0xc7a: 0x4000, 0xc7b: 0x4000, + // Block 0x32, offset 0xc80 + 0xc80: 0x9012, 0xc81: 0x4013, 0xc82: 0x4014, 0xc83: 0x4000, 0xc84: 0x4000, 0xc85: 0x4000, + 0xc86: 0x4000, 0xc87: 0x4000, 0xc88: 0x4000, 0xc89: 0x4000, 0xc8a: 0x4000, 0xc8b: 0x4000, + 0xc8c: 0x4015, 0xc8d: 0x4015, 0xc8e: 0x4000, 0xc8f: 0x4000, 0xc90: 0x4000, 0xc91: 0x4000, + 0xc92: 0x4000, 0xc93: 0x4000, 0xc94: 0x4000, 0xc95: 0x4000, 0xc96: 0x4000, 0xc97: 0x4000, + 0xc98: 0x4000, 0xc99: 0x4000, 0xc9a: 0x4000, 0xc9b: 0x4000, 0xc9c: 0x4000, 0xc9d: 0x4000, + 0xc9e: 0x4000, 0xc9f: 0x4000, 0xca0: 0x4000, 0xca1: 0x4000, 0xca2: 0x4000, 0xca3: 0x4000, + 0xca4: 0x4000, 0xca5: 0x4000, 0xca6: 0x4000, 0xca7: 0x4000, 0xca8: 0x4000, 0xca9: 0x4000, + 0xcaa: 0x4000, 0xcab: 0x4000, 0xcac: 0x4000, 0xcad: 0x4000, 0xcae: 0x4000, 0xcaf: 0x4000, + 0xcb0: 0x4000, 0xcb1: 0x4000, 0xcb2: 0x4000, 0xcb3: 0x4000, 0xcb4: 0x4000, 0xcb5: 0x4000, + 0xcb6: 0x4000, 0xcb7: 0x4000, 0xcb8: 0x4000, 0xcb9: 0x4000, 0xcba: 0x4000, 0xcbb: 0x4000, + 0xcbc: 0x4000, 0xcbd: 0x4000, 0xcbe: 0x4000, + // Block 0x33, offset 0xcc0 + 0xcc1: 0x4000, 0xcc2: 0x4000, 0xcc3: 0x4000, 0xcc4: 0x4000, 0xcc5: 0x4000, + 0xcc6: 0x4000, 0xcc7: 0x4000, 0xcc8: 0x4000, 0xcc9: 0x4000, 0xcca: 0x4000, 0xccb: 0x4000, + 0xccc: 0x4000, 0xccd: 0x4000, 0xcce: 0x4000, 0xccf: 0x4000, 0xcd0: 0x4000, 0xcd1: 0x4000, + 0xcd2: 0x4000, 0xcd3: 0x4000, 0xcd4: 0x4000, 0xcd5: 0x4000, 0xcd6: 0x4000, 0xcd7: 0x4000, + 0xcd8: 0x4000, 0xcd9: 0x4000, 0xcda: 0x4000, 0xcdb: 0x4000, 0xcdc: 0x4000, 0xcdd: 0x4000, + 0xcde: 0x4000, 0xcdf: 0x4000, 0xce0: 0x4000, 0xce1: 0x4000, 0xce2: 0x4000, 0xce3: 0x4000, + 0xce4: 0x4000, 0xce5: 0x4000, 0xce6: 0x4000, 0xce7: 0x4000, 0xce8: 0x4000, 0xce9: 0x4000, + 0xcea: 0x4000, 0xceb: 0x4000, 0xcec: 0x4000, 0xced: 0x4000, 0xcee: 0x4000, 0xcef: 0x4000, + 0xcf0: 0x4000, 0xcf1: 0x4000, 0xcf2: 0x4000, 0xcf3: 0x4000, 0xcf4: 0x4000, 0xcf5: 0x4000, + 0xcf6: 0x4000, 0xcf7: 0x4000, 0xcf8: 0x4000, 0xcf9: 0x4000, 0xcfa: 0x4000, 0xcfb: 0x4000, + 0xcfc: 0x4000, 0xcfd: 0x4000, 0xcfe: 0x4000, 0xcff: 0x4000, + // Block 0x34, offset 0xd00 + 0xd00: 0x4000, 0xd01: 0x4000, 0xd02: 0x4000, 0xd03: 0x4000, 0xd04: 0x4000, 0xd05: 0x4000, + 0xd06: 0x4000, 0xd07: 0x4000, 0xd08: 0x4000, 0xd09: 0x4000, 0xd0a: 0x4000, 0xd0b: 0x4000, + 0xd0c: 0x4000, 0xd0d: 0x4000, 0xd0e: 0x4000, 0xd0f: 0x4000, 0xd10: 0x4000, 0xd11: 0x4000, + 0xd12: 0x4000, 0xd13: 0x4000, 0xd14: 0x4000, 0xd15: 0x4000, 0xd16: 0x4000, + 0xd19: 0x4016, 0xd1a: 0x4017, 0xd1b: 0x4000, 0xd1c: 0x4000, 0xd1d: 0x4000, + 0xd1e: 0x4000, 0xd1f: 0x4000, 0xd20: 0x4000, 0xd21: 0x4018, 0xd22: 0x4019, 0xd23: 0x401a, + 0xd24: 0x401b, 0xd25: 0x401c, 0xd26: 0x401d, 0xd27: 0x401e, 0xd28: 0x401f, 0xd29: 0x4020, + 0xd2a: 0x4021, 0xd2b: 0x4022, 0xd2c: 0x4000, 0xd2d: 0x4010, 0xd2e: 0x4000, 0xd2f: 0x4023, + 0xd30: 0x4000, 0xd31: 0x4024, 0xd32: 0x4000, 0xd33: 0x4025, 0xd34: 0x4000, 0xd35: 0x4026, + 0xd36: 0x4000, 0xd37: 0x401a, 0xd38: 0x4000, 0xd39: 0x4027, 0xd3a: 0x4000, 0xd3b: 0x4028, + 0xd3c: 0x4000, 0xd3d: 0x4020, 0xd3e: 0x4000, 0xd3f: 0x4029, + // Block 0x35, offset 0xd40 + 0xd40: 0x4000, 0xd41: 0x402a, 0xd42: 0x4000, 0xd43: 0x402b, 0xd44: 0x402c, 0xd45: 0x4000, + 0xd46: 0x4017, 0xd47: 0x4000, 0xd48: 0x402d, 0xd49: 0x4000, 0xd4a: 0x402e, 0xd4b: 0x402f, + 0xd4c: 0x4030, 0xd4d: 0x4017, 0xd4e: 0x4016, 0xd4f: 0x4017, 0xd50: 0x4000, 0xd51: 0x4000, + 0xd52: 0x4031, 0xd53: 0x4000, 0xd54: 0x4000, 0xd55: 0x4031, 0xd56: 0x4000, 0xd57: 0x4000, + 0xd58: 0x4032, 0xd59: 0x4000, 0xd5a: 0x4000, 0xd5b: 0x4032, 0xd5c: 0x4000, 0xd5d: 0x4000, + 0xd5e: 0x4033, 0xd5f: 0x402e, 0xd60: 0x4034, 0xd61: 0x4035, 0xd62: 0x4034, 0xd63: 0x4036, + 0xd64: 0x4037, 0xd65: 0x4024, 0xd66: 0x4035, 0xd67: 0x4025, 0xd68: 0x4038, 0xd69: 0x4038, + 0xd6a: 0x4039, 0xd6b: 0x4039, 0xd6c: 0x403a, 0xd6d: 0x403a, 0xd6e: 0x4000, 0xd6f: 0x4035, + 0xd70: 0x4000, 0xd71: 0x4000, 0xd72: 0x403b, 0xd73: 0x403c, 0xd74: 0x4000, 0xd75: 0x4000, + 0xd76: 0x4000, 0xd77: 0x4000, 0xd78: 0x4000, 0xd79: 0x4000, 0xd7a: 0x4000, 0xd7b: 0x403d, + 0xd7c: 0x401c, 0xd7d: 0x4000, 0xd7e: 0x4000, 0xd7f: 0x4000, + // Block 0x36, offset 0xd80 + 0xd85: 0x4000, + 0xd86: 0x4000, 0xd87: 0x4000, 0xd88: 0x4000, 0xd89: 0x4000, 0xd8a: 0x4000, 0xd8b: 0x4000, + 0xd8c: 0x4000, 0xd8d: 0x4000, 0xd8e: 0x4000, 0xd8f: 0x4000, 0xd90: 0x4000, 0xd91: 0x4000, + 0xd92: 0x4000, 0xd93: 0x4000, 0xd94: 0x4000, 0xd95: 0x4000, 0xd96: 0x4000, 0xd97: 0x4000, + 0xd98: 0x4000, 0xd99: 0x4000, 0xd9a: 0x4000, 0xd9b: 0x4000, 0xd9c: 0x4000, 0xd9d: 0x4000, + 0xd9e: 0x4000, 0xd9f: 0x4000, 0xda0: 0x4000, 0xda1: 0x4000, 0xda2: 0x4000, 0xda3: 0x4000, + 0xda4: 0x4000, 0xda5: 0x4000, 0xda6: 0x4000, 0xda7: 0x4000, 0xda8: 0x4000, 0xda9: 0x4000, + 0xdaa: 0x4000, 0xdab: 0x4000, 0xdac: 0x4000, 0xdad: 0x4000, + 0xdb1: 0x403e, 0xdb2: 0x403e, 0xdb3: 0x403e, 0xdb4: 0x403e, 0xdb5: 0x403e, + 0xdb6: 0x403e, 0xdb7: 0x403e, 0xdb8: 0x403e, 0xdb9: 0x403e, 0xdba: 0x403e, 0xdbb: 0x403e, + 0xdbc: 0x403e, 0xdbd: 0x403e, 0xdbe: 0x403e, 0xdbf: 0x403e, + // Block 0x37, offset 0xdc0 + 0xdc0: 0x4037, 0xdc1: 0x4037, 0xdc2: 0x4037, 0xdc3: 0x4037, 0xdc4: 0x4037, 0xdc5: 0x4037, + 0xdc6: 0x4037, 0xdc7: 0x4037, 0xdc8: 0x4037, 0xdc9: 0x4037, 0xdca: 0x4037, 0xdcb: 0x4037, + 0xdcc: 0x4037, 0xdcd: 0x4037, 0xdce: 0x4037, 0xdcf: 0x400e, 0xdd0: 0x403f, 0xdd1: 0x4040, + 0xdd2: 0x4041, 0xdd3: 0x4040, 0xdd4: 0x403f, 0xdd5: 0x4042, 0xdd6: 0x4043, 0xdd7: 0x4044, + 0xdd8: 0x4040, 0xdd9: 0x4041, 0xdda: 0x4040, 0xddb: 0x4045, 0xddc: 0x4009, 0xddd: 0x4045, + 0xdde: 0x4046, 0xddf: 0x4045, 0xde0: 0x4047, 0xde1: 0x400b, 0xde2: 0x400a, 0xde3: 0x400c, + 0xde4: 0x4048, 0xde5: 0x4000, 0xde6: 0x4000, 0xde7: 0x4000, 0xde8: 0x4000, 0xde9: 0x4000, + 0xdea: 0x4000, 0xdeb: 0x4000, 0xdec: 0x4000, 0xded: 0x4000, 0xdee: 0x4000, 0xdef: 0x4000, + 0xdf0: 0x4000, 0xdf1: 0x4000, 0xdf2: 0x4000, 0xdf3: 0x4000, 0xdf4: 0x4000, 0xdf5: 0x4000, + 0xdf6: 0x4000, 0xdf7: 0x4000, 0xdf8: 0x4000, 0xdf9: 0x4000, 0xdfa: 0x4000, 0xdfb: 0x4000, + 0xdfc: 0x4000, 0xdfd: 0x4000, 0xdfe: 0x4000, 0xdff: 0x4000, + // Block 0x38, offset 0xe00 + 0xe00: 0x4000, 0xe01: 0x4000, 0xe02: 0x4000, 0xe03: 0x4000, 0xe04: 0x4000, 0xe05: 0x4000, + 0xe06: 0x4000, 0xe07: 0x4000, 0xe08: 0x4000, 0xe09: 0x4000, 0xe0a: 0x4000, 0xe0b: 0x4000, + 0xe0c: 0x4000, 0xe0d: 0x4000, 0xe0e: 0x4000, 0xe10: 0x4000, 0xe11: 0x4000, + 0xe12: 0x4000, 0xe13: 0x4000, 0xe14: 0x4000, 0xe15: 0x4000, 0xe16: 0x4000, 0xe17: 0x4000, + 0xe18: 0x4000, 0xe19: 0x4000, 0xe1a: 0x4000, 0xe1b: 0x4000, 0xe1c: 0x4000, 0xe1d: 0x4000, + 0xe1e: 0x4000, 0xe1f: 0x4000, 0xe20: 0x4000, 0xe21: 0x4000, 0xe22: 0x4000, 0xe23: 0x4000, + 0xe24: 0x4000, 0xe25: 0x4000, 0xe26: 0x4000, 0xe27: 0x4000, 0xe28: 0x4000, 0xe29: 0x4000, + 0xe2a: 0x4000, 0xe2b: 0x4000, 0xe2c: 0x4000, 0xe2d: 0x4000, 0xe2e: 0x4000, 0xe2f: 0x4000, + 0xe30: 0x4000, 0xe31: 0x4000, 0xe32: 0x4000, 0xe33: 0x4000, 0xe34: 0x4000, 0xe35: 0x4000, + 0xe36: 0x4000, 0xe37: 0x4000, 0xe38: 0x4000, 0xe39: 0x4000, 0xe3a: 0x4000, + // Block 0x39, offset 0xe40 + 0xe40: 0x4000, 0xe41: 0x4000, 0xe42: 0x4000, 0xe43: 0x4000, 0xe44: 0x4000, 0xe45: 0x4000, + 0xe46: 0x4000, 0xe47: 0x4000, 0xe48: 0x4000, 0xe49: 0x4000, 0xe4a: 0x4000, 0xe4b: 0x4000, + 0xe4c: 0x4000, 0xe4d: 0x4000, 0xe4e: 0x4000, 0xe4f: 0x4000, 0xe50: 0x4000, 0xe51: 0x4000, + 0xe52: 0x4000, 0xe53: 0x4000, 0xe54: 0x4000, 0xe55: 0x4000, 0xe56: 0x4000, 0xe57: 0x4000, + 0xe58: 0x4000, 0xe59: 0x4000, 0xe5a: 0x4000, 0xe5b: 0x4000, 0xe5c: 0x4000, 0xe5d: 0x4000, + 0xe5e: 0x4000, 0xe5f: 0x4000, 0xe60: 0x4000, 0xe61: 0x4000, 0xe62: 0x4000, 0xe63: 0x4000, + 0xe70: 0x4000, 0xe71: 0x4000, 0xe72: 0x4000, 0xe73: 0x4000, 0xe74: 0x4000, 0xe75: 0x4000, + 0xe76: 0x4000, 0xe77: 0x4000, 0xe78: 0x4000, 0xe79: 0x4000, 0xe7a: 0x4000, 0xe7b: 0x4000, + 0xe7c: 0x4000, 0xe7d: 0x4000, 0xe7e: 0x4000, 0xe7f: 0x4000, + // Block 0x3a, offset 0xe80 + 0xe80: 0x4000, 0xe81: 0x4000, 0xe82: 0x4000, 0xe83: 0x4000, 0xe84: 0x4000, 0xe85: 0x4000, + 0xe86: 0x4000, 0xe87: 0x4000, 0xe88: 0x4000, 0xe89: 0x4000, 0xe8a: 0x4000, 0xe8b: 0x4000, + 0xe8c: 0x4000, 0xe8d: 0x4000, 0xe8e: 0x4000, 0xe8f: 0x4000, 0xe90: 0x4000, 0xe91: 0x4000, + 0xe92: 0x4000, 0xe93: 0x4000, 0xe94: 0x4000, 0xe95: 0x4000, 0xe96: 0x4000, 0xe97: 0x4000, + 0xe98: 0x4000, 0xe99: 0x4000, 0xe9a: 0x4000, 0xe9b: 0x4000, 0xe9c: 0x4000, 0xe9d: 0x4000, + 0xe9e: 0x4000, 0xea0: 0x4000, 0xea1: 0x4000, 0xea2: 0x4000, 0xea3: 0x4000, + 0xea4: 0x4000, 0xea5: 0x4000, 0xea6: 0x4000, 0xea7: 0x4000, 0xea8: 0x4000, 0xea9: 0x4000, + 0xeaa: 0x4000, 0xeab: 0x4000, 0xeac: 0x4000, 0xead: 0x4000, 0xeae: 0x4000, 0xeaf: 0x4000, + 0xeb0: 0x4000, 0xeb1: 0x4000, 0xeb2: 0x4000, 0xeb3: 0x4000, 0xeb4: 0x4000, 0xeb5: 0x4000, + 0xeb6: 0x4000, 0xeb7: 0x4000, 0xeb8: 0x4000, 0xeb9: 0x4000, 0xeba: 0x4000, 0xebb: 0x4000, + 0xebc: 0x4000, 0xebd: 0x4000, 0xebe: 0x4000, 0xebf: 0x4000, + // Block 0x3b, offset 0xec0 + 0xec0: 0x4000, 0xec1: 0x4000, 0xec2: 0x4000, 0xec3: 0x4000, 0xec4: 0x4000, 0xec5: 0x4000, + 0xec6: 0x4000, 0xec7: 0x4000, 0xec8: 0x2000, 0xec9: 0x2000, 0xeca: 0x2000, 0xecb: 0x2000, + 0xecc: 0x2000, 0xecd: 0x2000, 0xece: 0x2000, 0xecf: 0x2000, 0xed0: 0x4000, 0xed1: 0x4000, + 0xed2: 0x4000, 0xed3: 0x4000, 0xed4: 0x4000, 0xed5: 0x4000, 0xed6: 0x4000, 0xed7: 0x4000, + 0xed8: 0x4000, 0xed9: 0x4000, 0xeda: 0x4000, 0xedb: 0x4000, 0xedc: 0x4000, 0xedd: 0x4000, + 0xede: 0x4000, 0xedf: 0x4000, 0xee0: 0x4000, 0xee1: 0x4000, 0xee2: 0x4000, 0xee3: 0x4000, + 0xee4: 0x4000, 0xee5: 0x4000, 0xee6: 0x4000, 0xee7: 0x4000, 0xee8: 0x4000, 0xee9: 0x4000, + 0xeea: 0x4000, 0xeeb: 0x4000, 0xeec: 0x4000, 0xeed: 0x4000, 0xeee: 0x4000, 0xeef: 0x4000, + 0xef0: 0x4000, 0xef1: 0x4000, 0xef2: 0x4000, 0xef3: 0x4000, 0xef4: 0x4000, 0xef5: 0x4000, + 0xef6: 0x4000, 0xef7: 0x4000, 0xef8: 0x4000, 0xef9: 0x4000, 0xefa: 0x4000, 0xefb: 0x4000, + 0xefc: 0x4000, 0xefd: 0x4000, 0xefe: 0x4000, 0xeff: 0x4000, + // Block 0x3c, offset 0xf00 + 0xf00: 0x4000, 0xf01: 0x4000, 0xf02: 0x4000, 0xf03: 0x4000, 0xf04: 0x4000, 0xf05: 0x4000, + 0xf06: 0x4000, 0xf07: 0x4000, 0xf08: 0x4000, 0xf09: 0x4000, 0xf0a: 0x4000, 0xf0b: 0x4000, + 0xf0c: 0x4000, 0xf0d: 0x4000, 0xf0e: 0x4000, 0xf0f: 0x4000, 0xf10: 0x4000, 0xf11: 0x4000, + 0xf12: 0x4000, 0xf13: 0x4000, 0xf14: 0x4000, 0xf15: 0x4000, 0xf16: 0x4000, 0xf17: 0x4000, + 0xf18: 0x4000, 0xf19: 0x4000, 0xf1a: 0x4000, 0xf1b: 0x4000, 0xf1c: 0x4000, 0xf1d: 0x4000, + 0xf1e: 0x4000, 0xf1f: 0x4000, 0xf20: 0x4000, 0xf21: 0x4000, 0xf22: 0x4000, 0xf23: 0x4000, + 0xf24: 0x4000, 0xf25: 0x4000, 0xf26: 0x4000, 0xf27: 0x4000, 0xf28: 0x4000, 0xf29: 0x4000, + 0xf2a: 0x4000, 0xf2b: 0x4000, 0xf2c: 0x4000, 0xf2d: 0x4000, 0xf2e: 0x4000, 0xf2f: 0x4000, + 0xf30: 0x4000, 0xf31: 0x4000, 0xf32: 0x4000, 0xf33: 0x4000, 0xf34: 0x4000, 0xf35: 0x4000, + 0xf36: 0x4000, 0xf37: 0x4000, 0xf38: 0x4000, 0xf39: 0x4000, 0xf3a: 0x4000, 0xf3b: 0x4000, + 0xf3c: 0x4000, 0xf3d: 0x4000, 0xf3e: 0x4000, + // Block 0x3d, offset 0xf40 + 0xf40: 0x4000, 0xf41: 0x4000, 0xf42: 0x4000, 0xf43: 0x4000, 0xf44: 0x4000, 0xf45: 0x4000, + 0xf46: 0x4000, 0xf47: 0x4000, 0xf48: 0x4000, 0xf49: 0x4000, 0xf4a: 0x4000, 0xf4b: 0x4000, + 0xf4c: 0x4000, 0xf50: 0x4000, 0xf51: 0x4000, + 0xf52: 0x4000, 0xf53: 0x4000, 0xf54: 0x4000, 0xf55: 0x4000, 0xf56: 0x4000, 0xf57: 0x4000, + 0xf58: 0x4000, 0xf59: 0x4000, 0xf5a: 0x4000, 0xf5b: 0x4000, 0xf5c: 0x4000, 0xf5d: 0x4000, + 0xf5e: 0x4000, 0xf5f: 0x4000, 0xf60: 0x4000, 0xf61: 0x4000, 0xf62: 0x4000, 0xf63: 0x4000, + 0xf64: 0x4000, 0xf65: 0x4000, 0xf66: 0x4000, 0xf67: 0x4000, 0xf68: 0x4000, 0xf69: 0x4000, + 0xf6a: 0x4000, 0xf6b: 0x4000, 0xf6c: 0x4000, 0xf6d: 0x4000, 0xf6e: 0x4000, 0xf6f: 0x4000, + 0xf70: 0x4000, 0xf71: 0x4000, 0xf72: 0x4000, 0xf73: 0x4000, 0xf74: 0x4000, 0xf75: 0x4000, + 0xf76: 0x4000, 0xf77: 0x4000, 0xf78: 0x4000, 0xf79: 0x4000, 0xf7a: 0x4000, 0xf7b: 0x4000, + 0xf7c: 0x4000, 0xf7d: 0x4000, 0xf7e: 0x4000, 0xf7f: 0x4000, + // Block 0x3e, offset 0xf80 + 0xf80: 0x4000, 0xf81: 0x4000, 0xf82: 0x4000, 0xf83: 0x4000, 0xf84: 0x4000, 0xf85: 0x4000, + 0xf86: 0x4000, + // Block 0x3f, offset 0xfc0 + 0xfe0: 0x4000, 0xfe1: 0x4000, 0xfe2: 0x4000, 0xfe3: 0x4000, + 0xfe4: 0x4000, 0xfe5: 0x4000, 0xfe6: 0x4000, 0xfe7: 0x4000, 0xfe8: 0x4000, 0xfe9: 0x4000, + 0xfea: 0x4000, 0xfeb: 0x4000, 0xfec: 0x4000, 0xfed: 0x4000, 0xfee: 0x4000, 0xfef: 0x4000, + 0xff0: 0x4000, 0xff1: 0x4000, 0xff2: 0x4000, 0xff3: 0x4000, 0xff4: 0x4000, 0xff5: 0x4000, + 0xff6: 0x4000, 0xff7: 0x4000, 0xff8: 0x4000, 0xff9: 0x4000, 0xffa: 0x4000, 0xffb: 0x4000, + 0xffc: 0x4000, + // Block 0x40, offset 0x1000 + 0x1000: 0x4000, 0x1001: 0x4000, 0x1002: 0x4000, 0x1003: 0x4000, 0x1004: 0x4000, 0x1005: 0x4000, + 0x1006: 0x4000, 0x1007: 0x4000, 0x1008: 0x4000, 0x1009: 0x4000, 0x100a: 0x4000, 0x100b: 0x4000, + 0x100c: 0x4000, 0x100d: 0x4000, 0x100e: 0x4000, 0x100f: 0x4000, 0x1010: 0x4000, 0x1011: 0x4000, + 0x1012: 0x4000, 0x1013: 0x4000, 0x1014: 0x4000, 0x1015: 0x4000, 0x1016: 0x4000, 0x1017: 0x4000, + 0x1018: 0x4000, 0x1019: 0x4000, 0x101a: 0x4000, 0x101b: 0x4000, 0x101c: 0x4000, 0x101d: 0x4000, + 0x101e: 0x4000, 0x101f: 0x4000, 0x1020: 0x4000, 0x1021: 0x4000, 0x1022: 0x4000, 0x1023: 0x4000, + // Block 0x41, offset 0x1040 + 0x1040: 0x2000, 0x1041: 0x2000, 0x1042: 0x2000, 0x1043: 0x2000, 0x1044: 0x2000, 0x1045: 0x2000, + 0x1046: 0x2000, 0x1047: 0x2000, 0x1048: 0x2000, 0x1049: 0x2000, 0x104a: 0x2000, 0x104b: 0x2000, + 0x104c: 0x2000, 0x104d: 0x2000, 0x104e: 0x2000, 0x104f: 0x2000, 0x1050: 0x4000, 0x1051: 0x4000, + 0x1052: 0x4000, 0x1053: 0x4000, 0x1054: 0x4000, 0x1055: 0x4000, 0x1056: 0x4000, 0x1057: 0x4000, + 0x1058: 0x4000, 0x1059: 0x4000, + 0x1070: 0x4000, 0x1071: 0x4000, 0x1072: 0x4000, 0x1073: 0x4000, 0x1074: 0x4000, 0x1075: 0x4000, + 0x1076: 0x4000, 0x1077: 0x4000, 0x1078: 0x4000, 0x1079: 0x4000, 0x107a: 0x4000, 0x107b: 0x4000, + 0x107c: 0x4000, 0x107d: 0x4000, 0x107e: 0x4000, 0x107f: 0x4000, + // Block 0x42, offset 0x1080 + 0x1080: 0x4000, 0x1081: 0x4000, 0x1082: 0x4000, 0x1083: 0x4000, 0x1084: 0x4000, 0x1085: 0x4000, + 0x1086: 0x4000, 0x1087: 0x4000, 0x1088: 0x4000, 0x1089: 0x4000, 0x108a: 0x4000, 0x108b: 0x4000, + 0x108c: 0x4000, 0x108d: 0x4000, 0x108e: 0x4000, 0x108f: 0x4000, 0x1090: 0x4000, 0x1091: 0x4000, + 0x1092: 0x4000, 0x1094: 0x4000, 0x1095: 0x4000, 0x1096: 0x4000, 0x1097: 0x4000, + 0x1098: 0x4000, 0x1099: 0x4000, 0x109a: 0x4000, 0x109b: 0x4000, 0x109c: 0x4000, 0x109d: 0x4000, + 0x109e: 0x4000, 0x109f: 0x4000, 0x10a0: 0x4000, 0x10a1: 0x4000, 0x10a2: 0x4000, 0x10a3: 0x4000, + 0x10a4: 0x4000, 0x10a5: 0x4000, 0x10a6: 0x4000, 0x10a8: 0x4000, 0x10a9: 0x4000, + 0x10aa: 0x4000, 0x10ab: 0x4000, + // Block 0x43, offset 0x10c0 + 0x10c1: 0x9012, 0x10c2: 0x9012, 0x10c3: 0x9012, 0x10c4: 0x9012, 0x10c5: 0x9012, + 0x10c6: 0x9012, 0x10c7: 0x9012, 0x10c8: 0x9012, 0x10c9: 0x9012, 0x10ca: 0x9012, 0x10cb: 0x9012, + 0x10cc: 0x9012, 0x10cd: 0x9012, 0x10ce: 0x9012, 0x10cf: 0x9012, 0x10d0: 0x9012, 0x10d1: 0x9012, + 0x10d2: 0x9012, 0x10d3: 0x9012, 0x10d4: 0x9012, 0x10d5: 0x9012, 0x10d6: 0x9012, 0x10d7: 0x9012, + 0x10d8: 0x9012, 0x10d9: 0x9012, 0x10da: 0x9012, 0x10db: 0x9012, 0x10dc: 0x9012, 0x10dd: 0x9012, + 0x10de: 0x9012, 0x10df: 0x9012, 0x10e0: 0x9049, 0x10e1: 0x9049, 0x10e2: 0x9049, 0x10e3: 0x9049, + 0x10e4: 0x9049, 0x10e5: 0x9049, 0x10e6: 0x9049, 0x10e7: 0x9049, 0x10e8: 0x9049, 0x10e9: 0x9049, + 0x10ea: 0x9049, 0x10eb: 0x9049, 0x10ec: 0x9049, 0x10ed: 0x9049, 0x10ee: 0x9049, 0x10ef: 0x9049, + 0x10f0: 0x9049, 0x10f1: 0x9049, 0x10f2: 0x9049, 0x10f3: 0x9049, 0x10f4: 0x9049, 0x10f5: 0x9049, + 0x10f6: 0x9049, 0x10f7: 0x9049, 0x10f8: 0x9049, 0x10f9: 0x9049, 0x10fa: 0x9049, 0x10fb: 0x9049, + 0x10fc: 0x9049, 0x10fd: 0x9049, 0x10fe: 0x9049, 0x10ff: 0x9049, + // Block 0x44, offset 0x1100 + 0x1100: 0x9049, 0x1101: 0x9049, 0x1102: 0x9049, 0x1103: 0x9049, 0x1104: 0x9049, 0x1105: 0x9049, + 0x1106: 0x9049, 0x1107: 0x9049, 0x1108: 0x9049, 0x1109: 0x9049, 0x110a: 0x9049, 0x110b: 0x9049, + 0x110c: 0x9049, 0x110d: 0x9049, 0x110e: 0x9049, 0x110f: 0x9049, 0x1110: 0x9049, 0x1111: 0x9049, + 0x1112: 0x9049, 0x1113: 0x9049, 0x1114: 0x9049, 0x1115: 0x9049, 0x1116: 0x9049, 0x1117: 0x9049, + 0x1118: 0x9049, 0x1119: 0x9049, 0x111a: 0x9049, 0x111b: 0x9049, 0x111c: 0x9049, 0x111d: 0x9049, + 0x111e: 0x9049, 0x111f: 0x904a, 0x1120: 0x904b, 0x1121: 0xb04c, 0x1122: 0xb04d, 0x1123: 0xb04d, + 0x1124: 0xb04e, 0x1125: 0xb04f, 0x1126: 0xb050, 0x1127: 0xb051, 0x1128: 0xb052, 0x1129: 0xb053, + 0x112a: 0xb054, 0x112b: 0xb055, 0x112c: 0xb056, 0x112d: 0xb057, 0x112e: 0xb058, 0x112f: 0xb059, + 0x1130: 0xb05a, 0x1131: 0xb05b, 0x1132: 0xb05c, 0x1133: 0xb05d, 0x1134: 0xb05e, 0x1135: 0xb05f, + 0x1136: 0xb060, 0x1137: 0xb061, 0x1138: 0xb062, 0x1139: 0xb063, 0x113a: 0xb064, 0x113b: 0xb065, + 0x113c: 0xb052, 0x113d: 0xb066, 0x113e: 0xb067, 0x113f: 0xb055, + // Block 0x45, offset 0x1140 + 0x1140: 0xb068, 0x1141: 0xb069, 0x1142: 0xb06a, 0x1143: 0xb06b, 0x1144: 0xb05a, 0x1145: 0xb056, + 0x1146: 0xb06c, 0x1147: 0xb06d, 0x1148: 0xb06b, 0x1149: 0xb06e, 0x114a: 0xb06b, 0x114b: 0xb06f, + 0x114c: 0xb06f, 0x114d: 0xb070, 0x114e: 0xb070, 0x114f: 0xb071, 0x1150: 0xb056, 0x1151: 0xb072, + 0x1152: 0xb073, 0x1153: 0xb072, 0x1154: 0xb074, 0x1155: 0xb073, 0x1156: 0xb075, 0x1157: 0xb075, + 0x1158: 0xb076, 0x1159: 0xb076, 0x115a: 0xb077, 0x115b: 0xb077, 0x115c: 0xb073, 0x115d: 0xb078, + 0x115e: 0xb079, 0x115f: 0xb067, 0x1160: 0xb07a, 0x1161: 0xb07b, 0x1162: 0xb07b, 0x1163: 0xb07b, + 0x1164: 0xb07b, 0x1165: 0xb07b, 0x1166: 0xb07b, 0x1167: 0xb07b, 0x1168: 0xb07b, 0x1169: 0xb07b, + 0x116a: 0xb07b, 0x116b: 0xb07b, 0x116c: 0xb07b, 0x116d: 0xb07b, 0x116e: 0xb07b, 0x116f: 0xb07b, + 0x1170: 0xb07c, 0x1171: 0xb07c, 0x1172: 0xb07c, 0x1173: 0xb07c, 0x1174: 0xb07c, 0x1175: 0xb07c, + 0x1176: 0xb07c, 0x1177: 0xb07c, 0x1178: 0xb07c, 0x1179: 0xb07c, 0x117a: 0xb07c, 0x117b: 0xb07c, + 0x117c: 0xb07c, 0x117d: 0xb07c, 0x117e: 0xb07c, + // Block 0x46, offset 0x1180 + 0x1182: 0xb07d, 0x1183: 0xb07e, 0x1184: 0xb07f, 0x1185: 0xb080, + 0x1186: 0xb07f, 0x1187: 0xb07e, 0x118a: 0xb081, 0x118b: 0xb082, + 0x118c: 0xb083, 0x118d: 0xb07f, 0x118e: 0xb080, 0x118f: 0xb07f, + 0x1192: 0xb084, 0x1193: 0xb085, 0x1194: 0xb084, 0x1195: 0xb086, 0x1196: 0xb084, 0x1197: 0xb087, + 0x119a: 0xb088, 0x119b: 0xb089, 0x119c: 0xb08a, + 0x11a0: 0x908b, 0x11a1: 0x908b, 0x11a2: 0x908c, 0x11a3: 0x908d, + 0x11a4: 0x908b, 0x11a5: 0x908e, 0x11a6: 0x908f, 0x11a8: 0xb090, 0x11a9: 0xb091, + 0x11aa: 0xb092, 0x11ab: 0xb091, 0x11ac: 0xb093, 0x11ad: 0xb094, 0x11ae: 0xb095, + 0x11bd: 0x2000, + // Block 0x47, offset 0x11c0 + 0x11e0: 0x4000, + // Block 0x48, offset 0x1200 + 0x1200: 0x4000, 0x1201: 0x4000, 0x1202: 0x4000, 0x1203: 0x4000, 0x1204: 0x4000, 0x1205: 0x4000, + 0x1206: 0x4000, 0x1207: 0x4000, 0x1208: 0x4000, 0x1209: 0x4000, 0x120a: 0x4000, 0x120b: 0x4000, + 0x120c: 0x4000, 0x120d: 0x4000, 0x120e: 0x4000, 0x120f: 0x4000, 0x1210: 0x4000, 0x1211: 0x4000, + 0x1212: 0x4000, 0x1213: 0x4000, 0x1214: 0x4000, 0x1215: 0x4000, 0x1216: 0x4000, 0x1217: 0x4000, + 0x1218: 0x4000, 0x1219: 0x4000, 0x121a: 0x4000, 0x121b: 0x4000, 0x121c: 0x4000, 0x121d: 0x4000, + 0x121e: 0x4000, 0x121f: 0x4000, 0x1220: 0x4000, 0x1221: 0x4000, 0x1222: 0x4000, 0x1223: 0x4000, + 0x1224: 0x4000, 0x1225: 0x4000, 0x1226: 0x4000, 0x1227: 0x4000, 0x1228: 0x4000, 0x1229: 0x4000, + 0x122a: 0x4000, 0x122b: 0x4000, 0x122c: 0x4000, + // Block 0x49, offset 0x1240 + 0x1240: 0x4000, 0x1241: 0x4000, 0x1242: 0x4000, 0x1243: 0x4000, 0x1244: 0x4000, 0x1245: 0x4000, + 0x1246: 0x4000, 0x1247: 0x4000, 0x1248: 0x4000, 0x1249: 0x4000, 0x124a: 0x4000, 0x124b: 0x4000, + 0x124c: 0x4000, 0x124d: 0x4000, 0x124e: 0x4000, 0x124f: 0x4000, 0x1250: 0x4000, 0x1251: 0x4000, + 0x1252: 0x4000, 0x1253: 0x4000, 0x1254: 0x4000, 0x1255: 0x4000, 0x1256: 0x4000, 0x1257: 0x4000, + 0x1258: 0x4000, 0x1259: 0x4000, 0x125a: 0x4000, 0x125b: 0x4000, 0x125c: 0x4000, 0x125d: 0x4000, + 0x125e: 0x4000, 0x125f: 0x4000, 0x1260: 0x4000, 0x1261: 0x4000, 0x1262: 0x4000, 0x1263: 0x4000, + 0x1264: 0x4000, 0x1265: 0x4000, 0x1266: 0x4000, 0x1267: 0x4000, 0x1268: 0x4000, 0x1269: 0x4000, + 0x126a: 0x4000, 0x126b: 0x4000, 0x126c: 0x4000, 0x126d: 0x4000, 0x126e: 0x4000, 0x126f: 0x4000, + 0x1270: 0x4000, 0x1271: 0x4000, 0x1272: 0x4000, + // Block 0x4a, offset 0x1280 + 0x1280: 0x4000, 0x1281: 0x4000, + // Block 0x4b, offset 0x12c0 + 0x12c4: 0x4000, + // Block 0x4c, offset 0x1300 + 0x130f: 0x4000, + // Block 0x4d, offset 0x1340 + 0x1340: 0x2000, 0x1341: 0x2000, 0x1342: 0x2000, 0x1343: 0x2000, 0x1344: 0x2000, 0x1345: 0x2000, + 0x1346: 0x2000, 0x1347: 0x2000, 0x1348: 0x2000, 0x1349: 0x2000, 0x134a: 0x2000, + 0x1350: 0x2000, 0x1351: 0x2000, + 0x1352: 0x2000, 0x1353: 0x2000, 0x1354: 0x2000, 0x1355: 0x2000, 0x1356: 0x2000, 0x1357: 0x2000, + 0x1358: 0x2000, 0x1359: 0x2000, 0x135a: 0x2000, 0x135b: 0x2000, 0x135c: 0x2000, 0x135d: 0x2000, + 0x135e: 0x2000, 0x135f: 0x2000, 0x1360: 0x2000, 0x1361: 0x2000, 0x1362: 0x2000, 0x1363: 0x2000, + 0x1364: 0x2000, 0x1365: 0x2000, 0x1366: 0x2000, 0x1367: 0x2000, 0x1368: 0x2000, 0x1369: 0x2000, + 0x136a: 0x2000, 0x136b: 0x2000, 0x136c: 0x2000, 0x136d: 0x2000, + 0x1370: 0x2000, 0x1371: 0x2000, 0x1372: 0x2000, 0x1373: 0x2000, 0x1374: 0x2000, 0x1375: 0x2000, + 0x1376: 0x2000, 0x1377: 0x2000, 0x1378: 0x2000, 0x1379: 0x2000, 0x137a: 0x2000, 0x137b: 0x2000, + 0x137c: 0x2000, 0x137d: 0x2000, 0x137e: 0x2000, 0x137f: 0x2000, + // Block 0x4e, offset 0x1380 + 0x1380: 0x2000, 0x1381: 0x2000, 0x1382: 0x2000, 0x1383: 0x2000, 0x1384: 0x2000, 0x1385: 0x2000, + 0x1386: 0x2000, 0x1387: 0x2000, 0x1388: 0x2000, 0x1389: 0x2000, 0x138a: 0x2000, 0x138b: 0x2000, + 0x138c: 0x2000, 0x138d: 0x2000, 0x138e: 0x2000, 0x138f: 0x2000, 0x1390: 0x2000, 0x1391: 0x2000, + 0x1392: 0x2000, 0x1393: 0x2000, 0x1394: 0x2000, 0x1395: 0x2000, 0x1396: 0x2000, 0x1397: 0x2000, + 0x1398: 0x2000, 0x1399: 0x2000, 0x139a: 0x2000, 0x139b: 0x2000, 0x139c: 0x2000, 0x139d: 0x2000, + 0x139e: 0x2000, 0x139f: 0x2000, 0x13a0: 0x2000, 0x13a1: 0x2000, 0x13a2: 0x2000, 0x13a3: 0x2000, + 0x13a4: 0x2000, 0x13a5: 0x2000, 0x13a6: 0x2000, 0x13a7: 0x2000, 0x13a8: 0x2000, 0x13a9: 0x2000, + 0x13b0: 0x2000, 0x13b1: 0x2000, 0x13b2: 0x2000, 0x13b3: 0x2000, 0x13b4: 0x2000, 0x13b5: 0x2000, + 0x13b6: 0x2000, 0x13b7: 0x2000, 0x13b8: 0x2000, 0x13b9: 0x2000, 0x13ba: 0x2000, 0x13bb: 0x2000, + 0x13bc: 0x2000, 0x13bd: 0x2000, 0x13be: 0x2000, 0x13bf: 0x2000, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x2000, 0x13c1: 0x2000, 0x13c2: 0x2000, 0x13c3: 0x2000, 0x13c4: 0x2000, 0x13c5: 0x2000, + 0x13c6: 0x2000, 0x13c7: 0x2000, 0x13c8: 0x2000, 0x13c9: 0x2000, 0x13ca: 0x2000, 0x13cb: 0x2000, + 0x13cc: 0x2000, 0x13cd: 0x2000, 0x13ce: 0x4000, 0x13cf: 0x2000, 0x13d0: 0x2000, 0x13d1: 0x4000, + 0x13d2: 0x4000, 0x13d3: 0x4000, 0x13d4: 0x4000, 0x13d5: 0x4000, 0x13d6: 0x4000, 0x13d7: 0x4000, + 0x13d8: 0x4000, 0x13d9: 0x4000, 0x13da: 0x4000, 0x13db: 0x2000, 0x13dc: 0x2000, 0x13dd: 0x2000, + 0x13de: 0x2000, 0x13df: 0x2000, 0x13e0: 0x2000, 0x13e1: 0x2000, 0x13e2: 0x2000, 0x13e3: 0x2000, + 0x13e4: 0x2000, 0x13e5: 0x2000, 0x13e6: 0x2000, 0x13e7: 0x2000, 0x13e8: 0x2000, 0x13e9: 0x2000, + 0x13ea: 0x2000, 0x13eb: 0x2000, 0x13ec: 0x2000, + // Block 0x50, offset 0x1400 + 0x1400: 0x4000, 0x1401: 0x4000, 0x1402: 0x4000, + 0x1410: 0x4000, 0x1411: 0x4000, + 0x1412: 0x4000, 0x1413: 0x4000, 0x1414: 0x4000, 0x1415: 0x4000, 0x1416: 0x4000, 0x1417: 0x4000, + 0x1418: 0x4000, 0x1419: 0x4000, 0x141a: 0x4000, 0x141b: 0x4000, 0x141c: 0x4000, 0x141d: 0x4000, + 0x141e: 0x4000, 0x141f: 0x4000, 0x1420: 0x4000, 0x1421: 0x4000, 0x1422: 0x4000, 0x1423: 0x4000, + 0x1424: 0x4000, 0x1425: 0x4000, 0x1426: 0x4000, 0x1427: 0x4000, 0x1428: 0x4000, 0x1429: 0x4000, + 0x142a: 0x4000, 0x142b: 0x4000, 0x142c: 0x4000, 0x142d: 0x4000, 0x142e: 0x4000, 0x142f: 0x4000, + 0x1430: 0x4000, 0x1431: 0x4000, 0x1432: 0x4000, 0x1433: 0x4000, 0x1434: 0x4000, 0x1435: 0x4000, + 0x1436: 0x4000, 0x1437: 0x4000, 0x1438: 0x4000, 0x1439: 0x4000, 0x143a: 0x4000, 0x143b: 0x4000, + // Block 0x51, offset 0x1440 + 0x1440: 0x4000, 0x1441: 0x4000, 0x1442: 0x4000, 0x1443: 0x4000, 0x1444: 0x4000, 0x1445: 0x4000, + 0x1446: 0x4000, 0x1447: 0x4000, 0x1448: 0x4000, + 0x1450: 0x4000, 0x1451: 0x4000, + // Block 0x52, offset 0x1480 + 0x1480: 0x4000, 0x1481: 0x4000, 0x1482: 0x4000, 0x1483: 0x4000, 0x1484: 0x4000, 0x1485: 0x4000, + 0x1486: 0x4000, 0x1487: 0x4000, 0x1488: 0x4000, 0x1489: 0x4000, 0x148a: 0x4000, 0x148b: 0x4000, + 0x148c: 0x4000, 0x148d: 0x4000, 0x148e: 0x4000, 0x148f: 0x4000, 0x1490: 0x4000, 0x1491: 0x4000, + 0x1492: 0x4000, 0x1493: 0x4000, 0x1494: 0x4000, 0x1495: 0x4000, 0x1496: 0x4000, 0x1497: 0x4000, + 0x1498: 0x4000, 0x1499: 0x4000, 0x149a: 0x4000, 0x149b: 0x4000, 0x149c: 0x4000, 0x149d: 0x4000, + 0x149e: 0x4000, 0x149f: 0x4000, 0x14a0: 0x4000, + 0x14ad: 0x4000, 0x14ae: 0x4000, 0x14af: 0x4000, + 0x14b0: 0x4000, 0x14b1: 0x4000, 0x14b2: 0x4000, 0x14b3: 0x4000, 0x14b4: 0x4000, 0x14b5: 0x4000, + 0x14b7: 0x4000, 0x14b8: 0x4000, 0x14b9: 0x4000, 0x14ba: 0x4000, 0x14bb: 0x4000, + 0x14bc: 0x4000, 0x14bd: 0x4000, 0x14be: 0x4000, 0x14bf: 0x4000, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x4000, 0x14c1: 0x4000, 0x14c2: 0x4000, 0x14c3: 0x4000, 0x14c4: 0x4000, 0x14c5: 0x4000, + 0x14c6: 0x4000, 0x14c7: 0x4000, 0x14c8: 0x4000, 0x14c9: 0x4000, 0x14ca: 0x4000, 0x14cb: 0x4000, + 0x14cc: 0x4000, 0x14cd: 0x4000, 0x14ce: 0x4000, 0x14cf: 0x4000, 0x14d0: 0x4000, 0x14d1: 0x4000, + 0x14d2: 0x4000, 0x14d3: 0x4000, 0x14d4: 0x4000, 0x14d5: 0x4000, 0x14d6: 0x4000, 0x14d7: 0x4000, + 0x14d8: 0x4000, 0x14d9: 0x4000, 0x14da: 0x4000, 0x14db: 0x4000, 0x14dc: 0x4000, 0x14dd: 0x4000, + 0x14de: 0x4000, 0x14df: 0x4000, 0x14e0: 0x4000, 0x14e1: 0x4000, 0x14e2: 0x4000, 0x14e3: 0x4000, + 0x14e4: 0x4000, 0x14e5: 0x4000, 0x14e6: 0x4000, 0x14e7: 0x4000, 0x14e8: 0x4000, 0x14e9: 0x4000, + 0x14ea: 0x4000, 0x14eb: 0x4000, 0x14ec: 0x4000, 0x14ed: 0x4000, 0x14ee: 0x4000, 0x14ef: 0x4000, + 0x14f0: 0x4000, 0x14f1: 0x4000, 0x14f2: 0x4000, 0x14f3: 0x4000, 0x14f4: 0x4000, 0x14f5: 0x4000, + 0x14f6: 0x4000, 0x14f7: 0x4000, 0x14f8: 0x4000, 0x14f9: 0x4000, 0x14fa: 0x4000, 0x14fb: 0x4000, + 0x14fc: 0x4000, 0x14fe: 0x4000, 0x14ff: 0x4000, + // Block 0x54, offset 0x1500 + 0x1500: 0x4000, 0x1501: 0x4000, 0x1502: 0x4000, 0x1503: 0x4000, 0x1504: 0x4000, 0x1505: 0x4000, + 0x1506: 0x4000, 0x1507: 0x4000, 0x1508: 0x4000, 0x1509: 0x4000, 0x150a: 0x4000, 0x150b: 0x4000, + 0x150c: 0x4000, 0x150d: 0x4000, 0x150e: 0x4000, 0x150f: 0x4000, 0x1510: 0x4000, 0x1511: 0x4000, + 0x1512: 0x4000, 0x1513: 0x4000, + 0x1520: 0x4000, 0x1521: 0x4000, 0x1522: 0x4000, 0x1523: 0x4000, + 0x1524: 0x4000, 0x1525: 0x4000, 0x1526: 0x4000, 0x1527: 0x4000, 0x1528: 0x4000, 0x1529: 0x4000, + 0x152a: 0x4000, 0x152b: 0x4000, 0x152c: 0x4000, 0x152d: 0x4000, 0x152e: 0x4000, 0x152f: 0x4000, + 0x1530: 0x4000, 0x1531: 0x4000, 0x1532: 0x4000, 0x1533: 0x4000, 0x1534: 0x4000, 0x1535: 0x4000, + 0x1536: 0x4000, 0x1537: 0x4000, 0x1538: 0x4000, 0x1539: 0x4000, 0x153a: 0x4000, 0x153b: 0x4000, + 0x153c: 0x4000, 0x153d: 0x4000, 0x153e: 0x4000, 0x153f: 0x4000, + // Block 0x55, offset 0x1540 + 0x1540: 0x4000, 0x1541: 0x4000, 0x1542: 0x4000, 0x1543: 0x4000, 0x1544: 0x4000, 0x1545: 0x4000, + 0x1546: 0x4000, 0x1547: 0x4000, 0x1548: 0x4000, 0x1549: 0x4000, 0x154a: 0x4000, + 0x154f: 0x4000, 0x1550: 0x4000, 0x1551: 0x4000, + 0x1552: 0x4000, 0x1553: 0x4000, + 0x1560: 0x4000, 0x1561: 0x4000, 0x1562: 0x4000, 0x1563: 0x4000, + 0x1564: 0x4000, 0x1565: 0x4000, 0x1566: 0x4000, 0x1567: 0x4000, 0x1568: 0x4000, 0x1569: 0x4000, + 0x156a: 0x4000, 0x156b: 0x4000, 0x156c: 0x4000, 0x156d: 0x4000, 0x156e: 0x4000, 0x156f: 0x4000, + 0x1570: 0x4000, 0x1574: 0x4000, + 0x1578: 0x4000, 0x1579: 0x4000, 0x157a: 0x4000, 0x157b: 0x4000, + 0x157c: 0x4000, 0x157d: 0x4000, 0x157e: 0x4000, 0x157f: 0x4000, + // Block 0x56, offset 0x1580 + 0x1580: 0x4000, 0x1582: 0x4000, 0x1583: 0x4000, 0x1584: 0x4000, 0x1585: 0x4000, + 0x1586: 0x4000, 0x1587: 0x4000, 0x1588: 0x4000, 0x1589: 0x4000, 0x158a: 0x4000, 0x158b: 0x4000, + 0x158c: 0x4000, 0x158d: 0x4000, 0x158e: 0x4000, 0x158f: 0x4000, 0x1590: 0x4000, 0x1591: 0x4000, + 0x1592: 0x4000, 0x1593: 0x4000, 0x1594: 0x4000, 0x1595: 0x4000, 0x1596: 0x4000, 0x1597: 0x4000, + 0x1598: 0x4000, 0x1599: 0x4000, 0x159a: 0x4000, 0x159b: 0x4000, 0x159c: 0x4000, 0x159d: 0x4000, + 0x159e: 0x4000, 0x159f: 0x4000, 0x15a0: 0x4000, 0x15a1: 0x4000, 0x15a2: 0x4000, 0x15a3: 0x4000, + 0x15a4: 0x4000, 0x15a5: 0x4000, 0x15a6: 0x4000, 0x15a7: 0x4000, 0x15a8: 0x4000, 0x15a9: 0x4000, + 0x15aa: 0x4000, 0x15ab: 0x4000, 0x15ac: 0x4000, 0x15ad: 0x4000, 0x15ae: 0x4000, 0x15af: 0x4000, + 0x15b0: 0x4000, 0x15b1: 0x4000, 0x15b2: 0x4000, 0x15b3: 0x4000, 0x15b4: 0x4000, 0x15b5: 0x4000, + 0x15b6: 0x4000, 0x15b7: 0x4000, 0x15b8: 0x4000, 0x15b9: 0x4000, 0x15ba: 0x4000, 0x15bb: 0x4000, + 0x15bc: 0x4000, 0x15bd: 0x4000, 0x15be: 0x4000, 0x15bf: 0x4000, + // Block 0x57, offset 0x15c0 + 0x15c0: 0x4000, 0x15c1: 0x4000, 0x15c2: 0x4000, 0x15c3: 0x4000, 0x15c4: 0x4000, 0x15c5: 0x4000, + 0x15c6: 0x4000, 0x15c7: 0x4000, 0x15c8: 0x4000, 0x15c9: 0x4000, 0x15ca: 0x4000, 0x15cb: 0x4000, + 0x15cc: 0x4000, 0x15cd: 0x4000, 0x15ce: 0x4000, 0x15cf: 0x4000, 0x15d0: 0x4000, 0x15d1: 0x4000, + 0x15d2: 0x4000, 0x15d3: 0x4000, 0x15d4: 0x4000, 0x15d5: 0x4000, 0x15d6: 0x4000, 0x15d7: 0x4000, + 0x15d8: 0x4000, 0x15d9: 0x4000, 0x15da: 0x4000, 0x15db: 0x4000, 0x15dc: 0x4000, 0x15dd: 0x4000, + 0x15de: 0x4000, 0x15df: 0x4000, 0x15e0: 0x4000, 0x15e1: 0x4000, 0x15e2: 0x4000, 0x15e3: 0x4000, + 0x15e4: 0x4000, 0x15e5: 0x4000, 0x15e6: 0x4000, 0x15e7: 0x4000, 0x15e8: 0x4000, 0x15e9: 0x4000, + 0x15ea: 0x4000, 0x15eb: 0x4000, 0x15ec: 0x4000, 0x15ed: 0x4000, 0x15ee: 0x4000, 0x15ef: 0x4000, + 0x15f0: 0x4000, 0x15f1: 0x4000, 0x15f2: 0x4000, 0x15f3: 0x4000, 0x15f4: 0x4000, 0x15f5: 0x4000, + 0x15f6: 0x4000, 0x15f7: 0x4000, 0x15f8: 0x4000, 0x15f9: 0x4000, 0x15fa: 0x4000, 0x15fb: 0x4000, + 0x15fc: 0x4000, 0x15ff: 0x4000, + // Block 0x58, offset 0x1600 + 0x1600: 0x4000, 0x1601: 0x4000, 0x1602: 0x4000, 0x1603: 0x4000, 0x1604: 0x4000, 0x1605: 0x4000, + 0x1606: 0x4000, 0x1607: 0x4000, 0x1608: 0x4000, 0x1609: 0x4000, 0x160a: 0x4000, 0x160b: 0x4000, + 0x160c: 0x4000, 0x160d: 0x4000, 0x160e: 0x4000, 0x160f: 0x4000, 0x1610: 0x4000, 0x1611: 0x4000, + 0x1612: 0x4000, 0x1613: 0x4000, 0x1614: 0x4000, 0x1615: 0x4000, 0x1616: 0x4000, 0x1617: 0x4000, + 0x1618: 0x4000, 0x1619: 0x4000, 0x161a: 0x4000, 0x161b: 0x4000, 0x161c: 0x4000, 0x161d: 0x4000, + 0x161e: 0x4000, 0x161f: 0x4000, 0x1620: 0x4000, 0x1621: 0x4000, 0x1622: 0x4000, 0x1623: 0x4000, + 0x1624: 0x4000, 0x1625: 0x4000, 0x1626: 0x4000, 0x1627: 0x4000, 0x1628: 0x4000, 0x1629: 0x4000, + 0x162a: 0x4000, 0x162b: 0x4000, 0x162c: 0x4000, 0x162d: 0x4000, 0x162e: 0x4000, 0x162f: 0x4000, + 0x1630: 0x4000, 0x1631: 0x4000, 0x1632: 0x4000, 0x1633: 0x4000, 0x1634: 0x4000, 0x1635: 0x4000, + 0x1636: 0x4000, 0x1637: 0x4000, 0x1638: 0x4000, 0x1639: 0x4000, 0x163a: 0x4000, 0x163b: 0x4000, + 0x163c: 0x4000, 0x163d: 0x4000, + // Block 0x59, offset 0x1640 + 0x164b: 0x4000, + 0x164c: 0x4000, 0x164d: 0x4000, 0x164e: 0x4000, 0x1650: 0x4000, 0x1651: 0x4000, + 0x1652: 0x4000, 0x1653: 0x4000, 0x1654: 0x4000, 0x1655: 0x4000, 0x1656: 0x4000, 0x1657: 0x4000, + 0x1658: 0x4000, 0x1659: 0x4000, 0x165a: 0x4000, 0x165b: 0x4000, 0x165c: 0x4000, 0x165d: 0x4000, + 0x165e: 0x4000, 0x165f: 0x4000, 0x1660: 0x4000, 0x1661: 0x4000, 0x1662: 0x4000, 0x1663: 0x4000, + 0x1664: 0x4000, 0x1665: 0x4000, 0x1666: 0x4000, 0x1667: 0x4000, + 0x167a: 0x4000, + // Block 0x5a, offset 0x1680 + 0x1695: 0x4000, 0x1696: 0x4000, + 0x16a4: 0x4000, + // Block 0x5b, offset 0x16c0 + 0x16fb: 0x4000, + 0x16fc: 0x4000, 0x16fd: 0x4000, 0x16fe: 0x4000, 0x16ff: 0x4000, + // Block 0x5c, offset 0x1700 + 0x1700: 0x4000, 0x1701: 0x4000, 0x1702: 0x4000, 0x1703: 0x4000, 0x1704: 0x4000, 0x1705: 0x4000, + 0x1706: 0x4000, 0x1707: 0x4000, 0x1708: 0x4000, 0x1709: 0x4000, 0x170a: 0x4000, 0x170b: 0x4000, + 0x170c: 0x4000, 0x170d: 0x4000, 0x170e: 0x4000, 0x170f: 0x4000, + // Block 0x5d, offset 0x1740 + 0x1740: 0x4000, 0x1741: 0x4000, 0x1742: 0x4000, 0x1743: 0x4000, 0x1744: 0x4000, 0x1745: 0x4000, + 0x174c: 0x4000, 0x1750: 0x4000, 0x1751: 0x4000, + 0x1752: 0x4000, + 0x176b: 0x4000, 0x176c: 0x4000, + 0x1774: 0x4000, 0x1775: 0x4000, + 0x1776: 0x4000, + // Block 0x5e, offset 0x1780 + 0x1790: 0x4000, 0x1791: 0x4000, + 0x1792: 0x4000, 0x1793: 0x4000, 0x1794: 0x4000, 0x1795: 0x4000, 0x1796: 0x4000, 0x1797: 0x4000, + 0x1798: 0x4000, 0x1799: 0x4000, 0x179a: 0x4000, 0x179b: 0x4000, 0x179c: 0x4000, 0x179d: 0x4000, + 0x179e: 0x4000, 0x17a0: 0x4000, 0x17a1: 0x4000, 0x17a2: 0x4000, 0x17a3: 0x4000, + 0x17a4: 0x4000, 0x17a5: 0x4000, 0x17a6: 0x4000, 0x17a7: 0x4000, + 0x17b0: 0x4000, 0x17b3: 0x4000, 0x17b4: 0x4000, 0x17b5: 0x4000, + 0x17b6: 0x4000, 0x17b7: 0x4000, 0x17b8: 0x4000, 0x17b9: 0x4000, 0x17ba: 0x4000, 0x17bb: 0x4000, + 0x17bc: 0x4000, 0x17bd: 0x4000, 0x17be: 0x4000, + // Block 0x5f, offset 0x17c0 + 0x17c0: 0x4000, 0x17c1: 0x4000, 0x17c2: 0x4000, 0x17c3: 0x4000, 0x17c4: 0x4000, 0x17c5: 0x4000, + 0x17c6: 0x4000, 0x17c7: 0x4000, 0x17c8: 0x4000, 0x17c9: 0x4000, 0x17ca: 0x4000, 0x17cb: 0x4000, + 0x17d0: 0x4000, 0x17d1: 0x4000, + 0x17d2: 0x4000, 0x17d3: 0x4000, 0x17d4: 0x4000, 0x17d5: 0x4000, 0x17d6: 0x4000, 0x17d7: 0x4000, + 0x17d8: 0x4000, 0x17d9: 0x4000, 0x17da: 0x4000, 0x17db: 0x4000, 0x17dc: 0x4000, 0x17dd: 0x4000, + 0x17de: 0x4000, + // Block 0x60, offset 0x1800 + 0x1800: 0x4000, 0x1801: 0x4000, 0x1802: 0x4000, 0x1803: 0x4000, 0x1804: 0x4000, 0x1805: 0x4000, + 0x1806: 0x4000, 0x1807: 0x4000, 0x1808: 0x4000, 0x1809: 0x4000, 0x180a: 0x4000, 0x180b: 0x4000, + 0x180c: 0x4000, 0x180d: 0x4000, 0x180e: 0x4000, 0x180f: 0x4000, 0x1810: 0x4000, 0x1811: 0x4000, + // Block 0x61, offset 0x1840 + 0x1840: 0x4000, + // Block 0x62, offset 0x1880 + 0x1880: 0x2000, 0x1881: 0x2000, 0x1882: 0x2000, 0x1883: 0x2000, 0x1884: 0x2000, 0x1885: 0x2000, + 0x1886: 0x2000, 0x1887: 0x2000, 0x1888: 0x2000, 0x1889: 0x2000, 0x188a: 0x2000, 0x188b: 0x2000, + 0x188c: 0x2000, 0x188d: 0x2000, 0x188e: 0x2000, 0x188f: 0x2000, 0x1890: 0x2000, 0x1891: 0x2000, + 0x1892: 0x2000, 0x1893: 0x2000, 0x1894: 0x2000, 0x1895: 0x2000, 0x1896: 0x2000, 0x1897: 0x2000, + 0x1898: 0x2000, 0x1899: 0x2000, 0x189a: 0x2000, 0x189b: 0x2000, 0x189c: 0x2000, 0x189d: 0x2000, + 0x189e: 0x2000, 0x189f: 0x2000, 0x18a0: 0x2000, 0x18a1: 0x2000, 0x18a2: 0x2000, 0x18a3: 0x2000, + 0x18a4: 0x2000, 0x18a5: 0x2000, 0x18a6: 0x2000, 0x18a7: 0x2000, 0x18a8: 0x2000, 0x18a9: 0x2000, + 0x18aa: 0x2000, 0x18ab: 0x2000, 0x18ac: 0x2000, 0x18ad: 0x2000, 0x18ae: 0x2000, 0x18af: 0x2000, + 0x18b0: 0x2000, 0x18b1: 0x2000, 0x18b2: 0x2000, 0x18b3: 0x2000, 0x18b4: 0x2000, 0x18b5: 0x2000, + 0x18b6: 0x2000, 0x18b7: 0x2000, 0x18b8: 0x2000, 0x18b9: 0x2000, 0x18ba: 0x2000, 0x18bb: 0x2000, + 0x18bc: 0x2000, 0x18bd: 0x2000, +} + +// widthIndex: 22 blocks, 1408 entries, 1408 bytes +// Block 0 is the zero block. +var widthIndex = [1408]uint8{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x02, 0xc4: 0x03, 0xc5: 0x04, 0xc7: 0x05, + 0xc9: 0x06, 0xcb: 0x07, 0xcc: 0x08, 0xcd: 0x09, 0xce: 0x0a, 0xcf: 0x0b, + 0xd0: 0x0c, 0xd1: 0x0d, + 0xe1: 0x02, 0xe2: 0x03, 0xe3: 0x04, 0xe4: 0x05, 0xe5: 0x06, 0xe6: 0x06, 0xe7: 0x06, + 0xe8: 0x06, 0xe9: 0x06, 0xea: 0x07, 0xeb: 0x06, 0xec: 0x06, 0xed: 0x08, 0xee: 0x09, 0xef: 0x0a, + 0xf0: 0x0f, 0xf3: 0x12, 0xf4: 0x13, + // Block 0x4, offset 0x100 + 0x104: 0x0e, 0x105: 0x0f, + // Block 0x5, offset 0x140 + 0x140: 0x10, 0x141: 0x11, 0x142: 0x12, 0x144: 0x13, 0x145: 0x14, 0x146: 0x15, 0x147: 0x16, + 0x148: 0x17, 0x149: 0x18, 0x14a: 0x19, 0x14c: 0x1a, 0x14f: 0x1b, + 0x151: 0x1c, 0x152: 0x08, 0x153: 0x1d, 0x154: 0x1e, 0x155: 0x1f, 0x156: 0x20, 0x157: 0x21, + 0x158: 0x22, 0x159: 0x23, 0x15a: 0x24, 0x15b: 0x25, 0x15c: 0x26, 0x15d: 0x27, 0x15e: 0x28, 0x15f: 0x29, + 0x166: 0x2a, + 0x16c: 0x2b, 0x16d: 0x2c, + 0x17a: 0x2d, 0x17b: 0x2e, 0x17c: 0x0e, 0x17d: 0x0e, 0x17e: 0x0e, 0x17f: 0x2f, + // Block 0x6, offset 0x180 + 0x180: 0x30, 0x181: 0x31, 0x182: 0x32, 0x183: 0x33, 0x184: 0x34, 0x185: 0x35, 0x186: 0x36, 0x187: 0x37, + 0x188: 0x38, 0x189: 0x39, 0x18a: 0x0e, 0x18b: 0x3a, 0x18c: 0x0e, 0x18d: 0x0e, 0x18e: 0x0e, 0x18f: 0x0e, + 0x190: 0x0e, 0x191: 0x0e, 0x192: 0x0e, 0x193: 0x0e, 0x194: 0x0e, 0x195: 0x0e, 0x196: 0x0e, 0x197: 0x0e, + 0x198: 0x0e, 0x199: 0x0e, 0x19a: 0x0e, 0x19b: 0x0e, 0x19c: 0x0e, 0x19d: 0x0e, 0x19e: 0x0e, 0x19f: 0x0e, + 0x1a0: 0x0e, 0x1a1: 0x0e, 0x1a2: 0x0e, 0x1a3: 0x0e, 0x1a4: 0x0e, 0x1a5: 0x0e, 0x1a6: 0x0e, 0x1a7: 0x0e, + 0x1a8: 0x0e, 0x1a9: 0x0e, 0x1aa: 0x0e, 0x1ab: 0x0e, 0x1ac: 0x0e, 0x1ad: 0x0e, 0x1ae: 0x0e, 0x1af: 0x0e, + 0x1b0: 0x0e, 0x1b1: 0x0e, 0x1b2: 0x0e, 0x1b3: 0x0e, 0x1b4: 0x0e, 0x1b5: 0x0e, 0x1b6: 0x0e, 0x1b7: 0x0e, + 0x1b8: 0x0e, 0x1b9: 0x0e, 0x1ba: 0x0e, 0x1bb: 0x0e, 0x1bc: 0x0e, 0x1bd: 0x0e, 0x1be: 0x0e, 0x1bf: 0x0e, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x0e, 0x1c1: 0x0e, 0x1c2: 0x0e, 0x1c3: 0x0e, 0x1c4: 0x0e, 0x1c5: 0x0e, 0x1c6: 0x0e, 0x1c7: 0x0e, + 0x1c8: 0x0e, 0x1c9: 0x0e, 0x1ca: 0x0e, 0x1cb: 0x0e, 0x1cc: 0x0e, 0x1cd: 0x0e, 0x1ce: 0x0e, 0x1cf: 0x0e, + 0x1d0: 0x0e, 0x1d1: 0x0e, 0x1d2: 0x0e, 0x1d3: 0x0e, 0x1d4: 0x0e, 0x1d5: 0x0e, 0x1d6: 0x0e, 0x1d7: 0x0e, + 0x1d8: 0x0e, 0x1d9: 0x0e, 0x1da: 0x0e, 0x1db: 0x0e, 0x1dc: 0x0e, 0x1dd: 0x0e, 0x1de: 0x0e, 0x1df: 0x0e, + 0x1e0: 0x0e, 0x1e1: 0x0e, 0x1e2: 0x0e, 0x1e3: 0x0e, 0x1e4: 0x0e, 0x1e5: 0x0e, 0x1e6: 0x0e, 0x1e7: 0x0e, + 0x1e8: 0x0e, 0x1e9: 0x0e, 0x1ea: 0x0e, 0x1eb: 0x0e, 0x1ec: 0x0e, 0x1ed: 0x0e, 0x1ee: 0x0e, 0x1ef: 0x0e, + 0x1f0: 0x0e, 0x1f1: 0x0e, 0x1f2: 0x0e, 0x1f3: 0x0e, 0x1f4: 0x0e, 0x1f5: 0x0e, 0x1f6: 0x0e, + 0x1f8: 0x0e, 0x1f9: 0x0e, 0x1fa: 0x0e, 0x1fb: 0x0e, 0x1fc: 0x0e, 0x1fd: 0x0e, 0x1fe: 0x0e, 0x1ff: 0x0e, + // Block 0x8, offset 0x200 + 0x200: 0x0e, 0x201: 0x0e, 0x202: 0x0e, 0x203: 0x0e, 0x204: 0x0e, 0x205: 0x0e, 0x206: 0x0e, 0x207: 0x0e, + 0x208: 0x0e, 0x209: 0x0e, 0x20a: 0x0e, 0x20b: 0x0e, 0x20c: 0x0e, 0x20d: 0x0e, 0x20e: 0x0e, 0x20f: 0x0e, + 0x210: 0x0e, 0x211: 0x0e, 0x212: 0x0e, 0x213: 0x0e, 0x214: 0x0e, 0x215: 0x0e, 0x216: 0x0e, 0x217: 0x0e, + 0x218: 0x0e, 0x219: 0x0e, 0x21a: 0x0e, 0x21b: 0x0e, 0x21c: 0x0e, 0x21d: 0x0e, 0x21e: 0x0e, 0x21f: 0x0e, + 0x220: 0x0e, 0x221: 0x0e, 0x222: 0x0e, 0x223: 0x0e, 0x224: 0x0e, 0x225: 0x0e, 0x226: 0x0e, 0x227: 0x0e, + 0x228: 0x0e, 0x229: 0x0e, 0x22a: 0x0e, 0x22b: 0x0e, 0x22c: 0x0e, 0x22d: 0x0e, 0x22e: 0x0e, 0x22f: 0x0e, + 0x230: 0x0e, 0x231: 0x0e, 0x232: 0x0e, 0x233: 0x0e, 0x234: 0x0e, 0x235: 0x0e, 0x236: 0x0e, 0x237: 0x0e, + 0x238: 0x0e, 0x239: 0x0e, 0x23a: 0x0e, 0x23b: 0x0e, 0x23c: 0x0e, 0x23d: 0x0e, 0x23e: 0x0e, 0x23f: 0x0e, + // Block 0x9, offset 0x240 + 0x240: 0x0e, 0x241: 0x0e, 0x242: 0x0e, 0x243: 0x0e, 0x244: 0x0e, 0x245: 0x0e, 0x246: 0x0e, 0x247: 0x0e, + 0x248: 0x0e, 0x249: 0x0e, 0x24a: 0x0e, 0x24b: 0x0e, 0x24c: 0x0e, 0x24d: 0x0e, 0x24e: 0x0e, 0x24f: 0x0e, + 0x250: 0x0e, 0x251: 0x0e, 0x252: 0x3b, 0x253: 0x3c, + 0x265: 0x3d, + 0x270: 0x0e, 0x271: 0x0e, 0x272: 0x0e, 0x273: 0x0e, 0x274: 0x0e, 0x275: 0x0e, 0x276: 0x0e, 0x277: 0x0e, + 0x278: 0x0e, 0x279: 0x0e, 0x27a: 0x0e, 0x27b: 0x0e, 0x27c: 0x0e, 0x27d: 0x0e, 0x27e: 0x0e, 0x27f: 0x0e, + // Block 0xa, offset 0x280 + 0x280: 0x0e, 0x281: 0x0e, 0x282: 0x0e, 0x283: 0x0e, 0x284: 0x0e, 0x285: 0x0e, 0x286: 0x0e, 0x287: 0x0e, + 0x288: 0x0e, 0x289: 0x0e, 0x28a: 0x0e, 0x28b: 0x0e, 0x28c: 0x0e, 0x28d: 0x0e, 0x28e: 0x0e, 0x28f: 0x0e, + 0x290: 0x0e, 0x291: 0x0e, 0x292: 0x0e, 0x293: 0x0e, 0x294: 0x0e, 0x295: 0x0e, 0x296: 0x0e, 0x297: 0x0e, + 0x298: 0x0e, 0x299: 0x0e, 0x29a: 0x0e, 0x29b: 0x0e, 0x29c: 0x0e, 0x29d: 0x0e, 0x29e: 0x3e, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x08, 0x2c1: 0x08, 0x2c2: 0x08, 0x2c3: 0x08, 0x2c4: 0x08, 0x2c5: 0x08, 0x2c6: 0x08, 0x2c7: 0x08, + 0x2c8: 0x08, 0x2c9: 0x08, 0x2ca: 0x08, 0x2cb: 0x08, 0x2cc: 0x08, 0x2cd: 0x08, 0x2ce: 0x08, 0x2cf: 0x08, + 0x2d0: 0x08, 0x2d1: 0x08, 0x2d2: 0x08, 0x2d3: 0x08, 0x2d4: 0x08, 0x2d5: 0x08, 0x2d6: 0x08, 0x2d7: 0x08, + 0x2d8: 0x08, 0x2d9: 0x08, 0x2da: 0x08, 0x2db: 0x08, 0x2dc: 0x08, 0x2dd: 0x08, 0x2de: 0x08, 0x2df: 0x08, + 0x2e0: 0x08, 0x2e1: 0x08, 0x2e2: 0x08, 0x2e3: 0x08, 0x2e4: 0x08, 0x2e5: 0x08, 0x2e6: 0x08, 0x2e7: 0x08, + 0x2e8: 0x08, 0x2e9: 0x08, 0x2ea: 0x08, 0x2eb: 0x08, 0x2ec: 0x08, 0x2ed: 0x08, 0x2ee: 0x08, 0x2ef: 0x08, + 0x2f0: 0x08, 0x2f1: 0x08, 0x2f2: 0x08, 0x2f3: 0x08, 0x2f4: 0x08, 0x2f5: 0x08, 0x2f6: 0x08, 0x2f7: 0x08, + 0x2f8: 0x08, 0x2f9: 0x08, 0x2fa: 0x08, 0x2fb: 0x08, 0x2fc: 0x08, 0x2fd: 0x08, 0x2fe: 0x08, 0x2ff: 0x08, + // Block 0xc, offset 0x300 + 0x300: 0x08, 0x301: 0x08, 0x302: 0x08, 0x303: 0x08, 0x304: 0x08, 0x305: 0x08, 0x306: 0x08, 0x307: 0x08, + 0x308: 0x08, 0x309: 0x08, 0x30a: 0x08, 0x30b: 0x08, 0x30c: 0x08, 0x30d: 0x08, 0x30e: 0x08, 0x30f: 0x08, + 0x310: 0x08, 0x311: 0x08, 0x312: 0x08, 0x313: 0x08, 0x314: 0x08, 0x315: 0x08, 0x316: 0x08, 0x317: 0x08, + 0x318: 0x08, 0x319: 0x08, 0x31a: 0x08, 0x31b: 0x08, 0x31c: 0x08, 0x31d: 0x08, 0x31e: 0x08, 0x31f: 0x08, + 0x320: 0x08, 0x321: 0x08, 0x322: 0x08, 0x323: 0x08, 0x324: 0x0e, 0x325: 0x0e, 0x326: 0x0e, 0x327: 0x0e, + 0x328: 0x0e, 0x329: 0x0e, 0x32a: 0x0e, 0x32b: 0x0e, + 0x338: 0x3f, 0x339: 0x40, 0x33c: 0x41, 0x33d: 0x42, 0x33e: 0x43, 0x33f: 0x44, + // Block 0xd, offset 0x340 + 0x37f: 0x45, + // Block 0xe, offset 0x380 + 0x380: 0x0e, 0x381: 0x0e, 0x382: 0x0e, 0x383: 0x0e, 0x384: 0x0e, 0x385: 0x0e, 0x386: 0x0e, 0x387: 0x0e, + 0x388: 0x0e, 0x389: 0x0e, 0x38a: 0x0e, 0x38b: 0x0e, 0x38c: 0x0e, 0x38d: 0x0e, 0x38e: 0x0e, 0x38f: 0x0e, + 0x390: 0x0e, 0x391: 0x0e, 0x392: 0x0e, 0x393: 0x0e, 0x394: 0x0e, 0x395: 0x0e, 0x396: 0x0e, 0x397: 0x0e, + 0x398: 0x0e, 0x399: 0x0e, 0x39a: 0x0e, 0x39b: 0x0e, 0x39c: 0x0e, 0x39d: 0x0e, 0x39e: 0x0e, 0x39f: 0x46, + 0x3a0: 0x0e, 0x3a1: 0x0e, 0x3a2: 0x0e, 0x3a3: 0x0e, 0x3a4: 0x0e, 0x3a5: 0x0e, 0x3a6: 0x0e, 0x3a7: 0x0e, + 0x3a8: 0x0e, 0x3a9: 0x0e, 0x3aa: 0x0e, 0x3ab: 0x47, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x48, + // Block 0x10, offset 0x400 + 0x400: 0x49, 0x403: 0x4a, 0x404: 0x4b, 0x405: 0x4c, 0x406: 0x4d, + 0x408: 0x4e, 0x409: 0x4f, 0x40c: 0x50, 0x40d: 0x51, 0x40e: 0x52, 0x40f: 0x53, + 0x410: 0x3a, 0x411: 0x54, 0x412: 0x0e, 0x413: 0x55, 0x414: 0x56, 0x415: 0x57, 0x416: 0x58, 0x417: 0x59, + 0x418: 0x0e, 0x419: 0x5a, 0x41a: 0x0e, 0x41b: 0x5b, + 0x424: 0x5c, 0x425: 0x5d, 0x426: 0x5e, 0x427: 0x5f, + // Block 0x11, offset 0x440 + 0x456: 0x0b, 0x457: 0x06, + 0x458: 0x0c, 0x45b: 0x0d, 0x45f: 0x0e, + 0x460: 0x06, 0x461: 0x06, 0x462: 0x06, 0x463: 0x06, 0x464: 0x06, 0x465: 0x06, 0x466: 0x06, 0x467: 0x06, + 0x468: 0x06, 0x469: 0x06, 0x46a: 0x06, 0x46b: 0x06, 0x46c: 0x06, 0x46d: 0x06, 0x46e: 0x06, 0x46f: 0x06, + 0x470: 0x06, 0x471: 0x06, 0x472: 0x06, 0x473: 0x06, 0x474: 0x06, 0x475: 0x06, 0x476: 0x06, 0x477: 0x06, + 0x478: 0x06, 0x479: 0x06, 0x47a: 0x06, 0x47b: 0x06, 0x47c: 0x06, 0x47d: 0x06, 0x47e: 0x06, 0x47f: 0x06, + // Block 0x12, offset 0x480 + 0x484: 0x08, 0x485: 0x08, 0x486: 0x08, 0x487: 0x09, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x08, 0x4c1: 0x08, 0x4c2: 0x08, 0x4c3: 0x08, 0x4c4: 0x08, 0x4c5: 0x08, 0x4c6: 0x08, 0x4c7: 0x08, + 0x4c8: 0x08, 0x4c9: 0x08, 0x4ca: 0x08, 0x4cb: 0x08, 0x4cc: 0x08, 0x4cd: 0x08, 0x4ce: 0x08, 0x4cf: 0x08, + 0x4d0: 0x08, 0x4d1: 0x08, 0x4d2: 0x08, 0x4d3: 0x08, 0x4d4: 0x08, 0x4d5: 0x08, 0x4d6: 0x08, 0x4d7: 0x08, + 0x4d8: 0x08, 0x4d9: 0x08, 0x4da: 0x08, 0x4db: 0x08, 0x4dc: 0x08, 0x4dd: 0x08, 0x4de: 0x08, 0x4df: 0x08, + 0x4e0: 0x08, 0x4e1: 0x08, 0x4e2: 0x08, 0x4e3: 0x08, 0x4e4: 0x08, 0x4e5: 0x08, 0x4e6: 0x08, 0x4e7: 0x08, + 0x4e8: 0x08, 0x4e9: 0x08, 0x4ea: 0x08, 0x4eb: 0x08, 0x4ec: 0x08, 0x4ed: 0x08, 0x4ee: 0x08, 0x4ef: 0x08, + 0x4f0: 0x08, 0x4f1: 0x08, 0x4f2: 0x08, 0x4f3: 0x08, 0x4f4: 0x08, 0x4f5: 0x08, 0x4f6: 0x08, 0x4f7: 0x08, + 0x4f8: 0x08, 0x4f9: 0x08, 0x4fa: 0x08, 0x4fb: 0x08, 0x4fc: 0x08, 0x4fd: 0x08, 0x4fe: 0x08, 0x4ff: 0x60, + // Block 0x14, offset 0x500 + 0x520: 0x10, + 0x530: 0x09, 0x531: 0x09, 0x532: 0x09, 0x533: 0x09, 0x534: 0x09, 0x535: 0x09, 0x536: 0x09, 0x537: 0x09, + 0x538: 0x09, 0x539: 0x09, 0x53a: 0x09, 0x53b: 0x09, 0x53c: 0x09, 0x53d: 0x09, 0x53e: 0x09, 0x53f: 0x11, + // Block 0x15, offset 0x540 + 0x540: 0x09, 0x541: 0x09, 0x542: 0x09, 0x543: 0x09, 0x544: 0x09, 0x545: 0x09, 0x546: 0x09, 0x547: 0x09, + 0x548: 0x09, 0x549: 0x09, 0x54a: 0x09, 0x54b: 0x09, 0x54c: 0x09, 0x54d: 0x09, 0x54e: 0x09, 0x54f: 0x11, +} + +// inverseData contains 4-byte entries of the following format: +// <0 padding> +// The last byte of the UTF-8-encoded rune is xor-ed with the last byte of the +// UTF-8 encoding of the original rune. Mappings often have the following +// pattern: +// A -> A (U+FF21 -> U+0041) +// B -> B (U+FF22 -> U+0042) +// ... +// By xor-ing the last byte the same entry can be shared by many mappings. This +// reduces the total number of distinct entries by about two thirds. +// The resulting entry for the aforementioned mappings is +// { 0x01, 0xE0, 0x00, 0x00 } +// Using this entry to map U+FF21 (UTF-8 [EF BC A1]), we get +// E0 ^ A1 = 41. +// Similarly, for U+FF22 (UTF-8 [EF BC A2]), we get +// E0 ^ A2 = 42. +// Note that because of the xor-ing, the byte sequence stored in the entry is +// not valid UTF-8. +var inverseData = [150][4]byte{ + {0x00, 0x00, 0x00, 0x00}, + {0x03, 0xe3, 0x80, 0xa0}, + {0x03, 0xef, 0xbc, 0xa0}, + {0x03, 0xef, 0xbc, 0xe0}, + {0x03, 0xef, 0xbd, 0xe0}, + {0x03, 0xef, 0xbf, 0x02}, + {0x03, 0xef, 0xbf, 0x00}, + {0x03, 0xef, 0xbf, 0x0e}, + {0x03, 0xef, 0xbf, 0x0c}, + {0x03, 0xef, 0xbf, 0x0f}, + {0x03, 0xef, 0xbf, 0x39}, + {0x03, 0xef, 0xbf, 0x3b}, + {0x03, 0xef, 0xbf, 0x3f}, + {0x03, 0xef, 0xbf, 0x2a}, + {0x03, 0xef, 0xbf, 0x0d}, + {0x03, 0xef, 0xbf, 0x25}, + {0x03, 0xef, 0xbd, 0x1a}, + {0x03, 0xef, 0xbd, 0x26}, + {0x01, 0xa0, 0x00, 0x00}, + {0x03, 0xef, 0xbd, 0x25}, + {0x03, 0xef, 0xbd, 0x23}, + {0x03, 0xef, 0xbd, 0x2e}, + {0x03, 0xef, 0xbe, 0x07}, + {0x03, 0xef, 0xbe, 0x05}, + {0x03, 0xef, 0xbd, 0x06}, + {0x03, 0xef, 0xbd, 0x13}, + {0x03, 0xef, 0xbd, 0x0b}, + {0x03, 0xef, 0xbd, 0x16}, + {0x03, 0xef, 0xbd, 0x0c}, + {0x03, 0xef, 0xbd, 0x15}, + {0x03, 0xef, 0xbd, 0x0d}, + {0x03, 0xef, 0xbd, 0x1c}, + {0x03, 0xef, 0xbd, 0x02}, + {0x03, 0xef, 0xbd, 0x1f}, + {0x03, 0xef, 0xbd, 0x1d}, + {0x03, 0xef, 0xbd, 0x17}, + {0x03, 0xef, 0xbd, 0x08}, + {0x03, 0xef, 0xbd, 0x09}, + {0x03, 0xef, 0xbd, 0x0e}, + {0x03, 0xef, 0xbd, 0x04}, + {0x03, 0xef, 0xbd, 0x05}, + {0x03, 0xef, 0xbe, 0x3f}, + {0x03, 0xef, 0xbe, 0x00}, + {0x03, 0xef, 0xbd, 0x2c}, + {0x03, 0xef, 0xbe, 0x06}, + {0x03, 0xef, 0xbe, 0x0c}, + {0x03, 0xef, 0xbe, 0x0f}, + {0x03, 0xef, 0xbe, 0x0d}, + {0x03, 0xef, 0xbe, 0x0b}, + {0x03, 0xef, 0xbe, 0x19}, + {0x03, 0xef, 0xbe, 0x15}, + {0x03, 0xef, 0xbe, 0x11}, + {0x03, 0xef, 0xbe, 0x31}, + {0x03, 0xef, 0xbe, 0x33}, + {0x03, 0xef, 0xbd, 0x0f}, + {0x03, 0xef, 0xbe, 0x30}, + {0x03, 0xef, 0xbe, 0x3e}, + {0x03, 0xef, 0xbe, 0x32}, + {0x03, 0xef, 0xbe, 0x36}, + {0x03, 0xef, 0xbd, 0x14}, + {0x03, 0xef, 0xbe, 0x2e}, + {0x03, 0xef, 0xbd, 0x1e}, + {0x03, 0xef, 0xbe, 0x10}, + {0x03, 0xef, 0xbf, 0x13}, + {0x03, 0xef, 0xbf, 0x15}, + {0x03, 0xef, 0xbf, 0x17}, + {0x03, 0xef, 0xbf, 0x1f}, + {0x03, 0xef, 0xbf, 0x1d}, + {0x03, 0xef, 0xbf, 0x1b}, + {0x03, 0xef, 0xbf, 0x09}, + {0x03, 0xef, 0xbf, 0x0b}, + {0x03, 0xef, 0xbf, 0x37}, + {0x03, 0xef, 0xbe, 0x04}, + {0x01, 0xe0, 0x00, 0x00}, + {0x03, 0xe2, 0xa6, 0x1a}, + {0x03, 0xe2, 0xa6, 0x26}, + {0x03, 0xe3, 0x80, 0x23}, + {0x03, 0xe3, 0x80, 0x2e}, + {0x03, 0xe3, 0x80, 0x25}, + {0x03, 0xe3, 0x83, 0x1e}, + {0x03, 0xe3, 0x83, 0x14}, + {0x03, 0xe3, 0x82, 0x06}, + {0x03, 0xe3, 0x82, 0x0b}, + {0x03, 0xe3, 0x82, 0x0c}, + {0x03, 0xe3, 0x82, 0x0d}, + {0x03, 0xe3, 0x82, 0x02}, + {0x03, 0xe3, 0x83, 0x0f}, + {0x03, 0xe3, 0x83, 0x08}, + {0x03, 0xe3, 0x83, 0x09}, + {0x03, 0xe3, 0x83, 0x2c}, + {0x03, 0xe3, 0x83, 0x0c}, + {0x03, 0xe3, 0x82, 0x13}, + {0x03, 0xe3, 0x82, 0x16}, + {0x03, 0xe3, 0x82, 0x15}, + {0x03, 0xe3, 0x82, 0x1c}, + {0x03, 0xe3, 0x82, 0x1f}, + {0x03, 0xe3, 0x82, 0x1d}, + {0x03, 0xe3, 0x82, 0x1a}, + {0x03, 0xe3, 0x82, 0x17}, + {0x03, 0xe3, 0x82, 0x08}, + {0x03, 0xe3, 0x82, 0x09}, + {0x03, 0xe3, 0x82, 0x0e}, + {0x03, 0xe3, 0x82, 0x04}, + {0x03, 0xe3, 0x82, 0x05}, + {0x03, 0xe3, 0x82, 0x3f}, + {0x03, 0xe3, 0x83, 0x00}, + {0x03, 0xe3, 0x83, 0x06}, + {0x03, 0xe3, 0x83, 0x05}, + {0x03, 0xe3, 0x83, 0x0d}, + {0x03, 0xe3, 0x83, 0x0b}, + {0x03, 0xe3, 0x83, 0x07}, + {0x03, 0xe3, 0x83, 0x19}, + {0x03, 0xe3, 0x83, 0x15}, + {0x03, 0xe3, 0x83, 0x11}, + {0x03, 0xe3, 0x83, 0x31}, + {0x03, 0xe3, 0x83, 0x33}, + {0x03, 0xe3, 0x83, 0x30}, + {0x03, 0xe3, 0x83, 0x3e}, + {0x03, 0xe3, 0x83, 0x32}, + {0x03, 0xe3, 0x83, 0x36}, + {0x03, 0xe3, 0x83, 0x2e}, + {0x03, 0xe3, 0x82, 0x07}, + {0x03, 0xe3, 0x85, 0x04}, + {0x03, 0xe3, 0x84, 0x10}, + {0x03, 0xe3, 0x85, 0x30}, + {0x03, 0xe3, 0x85, 0x0d}, + {0x03, 0xe3, 0x85, 0x13}, + {0x03, 0xe3, 0x85, 0x15}, + {0x03, 0xe3, 0x85, 0x17}, + {0x03, 0xe3, 0x85, 0x1f}, + {0x03, 0xe3, 0x85, 0x1d}, + {0x03, 0xe3, 0x85, 0x1b}, + {0x03, 0xe3, 0x85, 0x09}, + {0x03, 0xe3, 0x85, 0x0f}, + {0x03, 0xe3, 0x85, 0x0b}, + {0x03, 0xe3, 0x85, 0x37}, + {0x03, 0xe3, 0x85, 0x3b}, + {0x03, 0xe3, 0x85, 0x39}, + {0x03, 0xe3, 0x85, 0x3f}, + {0x02, 0xc2, 0x02, 0x00}, + {0x02, 0xc2, 0x0e, 0x00}, + {0x02, 0xc2, 0x0c, 0x00}, + {0x02, 0xc2, 0x00, 0x00}, + {0x03, 0xe2, 0x82, 0x0f}, + {0x03, 0xe2, 0x94, 0x2a}, + {0x03, 0xe2, 0x86, 0x39}, + {0x03, 0xe2, 0x86, 0x3b}, + {0x03, 0xe2, 0x86, 0x3f}, + {0x03, 0xe2, 0x96, 0x0d}, + {0x03, 0xe2, 0x97, 0x25}, +} + +// Total table size 14680 bytes (14KiB) diff --git a/vendor/google.golang.org/genproto/.github/CODEOWNERS b/vendor/google.golang.org/genproto/.github/CODEOWNERS new file mode 100644 index 0000000..7104b62 --- /dev/null +++ b/vendor/google.golang.org/genproto/.github/CODEOWNERS @@ -0,0 +1 @@ +* @pongad @jba diff --git a/vendor/google.golang.org/genproto/googleapis/api/annotations/annotations.pb.go b/vendor/google.golang.org/genproto/googleapis/api/annotations/annotations.pb.go index b37ccee..53d57f6 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/annotations/annotations.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/annotations/annotations.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/annotations.proto -// DO NOT EDIT! /* Package annotations is a generated protocol buffer package. diff --git a/vendor/google.golang.org/genproto/googleapis/api/annotations/http.pb.go b/vendor/google.golang.org/genproto/googleapis/api/annotations/http.pb.go index 583ecf6..73f050f 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/annotations/http.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/annotations/http.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/http.proto -// DO NOT EDIT! package annotations @@ -13,7 +12,7 @@ var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -// Defines the HTTP configuration for a service. It contains a list of +// Defines the HTTP configuration for an API service. It contains a list of // [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method // to one or more HTTP REST API methods. type Http struct { @@ -21,6 +20,13 @@ type Http struct { // // **NOTE:** All service configuration rules follow "last one wins" order. Rules []*HttpRule `protobuf:"bytes,1,rep,name=rules" json:"rules,omitempty"` + // When set to true, URL path parmeters will be fully URI-decoded except in + // cases of single segment matches in reserved expansion, where "%2F" will be + // left encoded. + // + // The default behavior is to not decode RFC 6570 reserved characters in multi + // segment matches. + FullyDecodeReservedExpansion bool `protobuf:"varint,2,opt,name=fully_decode_reserved_expansion,json=fullyDecodeReservedExpansion" json:"fully_decode_reserved_expansion,omitempty"` } func (m *Http) Reset() { *m = Http{} } @@ -35,12 +41,19 @@ func (m *Http) GetRules() []*HttpRule { return nil } +func (m *Http) GetFullyDecodeReservedExpansion() bool { + if m != nil { + return m.FullyDecodeReservedExpansion + } + return false +} + // `HttpRule` defines the mapping of an RPC method to one or more HTTP -// REST APIs. The mapping determines what portions of the request -// message are populated from the path, query parameters, or body of -// the HTTP request. The mapping is typically specified as an -// `google.api.http` annotation, see "google/api/annotations.proto" -// for details. +// REST API methods. The mapping specifies how different portions of the RPC +// request message are mapped to URL path, URL query parameters, and +// HTTP request body. The mapping is typically specified as an +// `google.api.http` annotation on the RPC method, +// see "google/api/annotations.proto" for details. // // The mapping consists of a field specifying the path template and // method kind. The path template can refer to fields in the request @@ -88,6 +101,11 @@ func (m *Http) GetRules() []*HttpRule { // parameters. Assume the following definition of the request message: // // +// service Messaging { +// rpc GetMessage(GetMessageRequest) returns (Message) { +// option (google.api.http).get = "/v1/messages/{message_id}"; +// } +// } // message GetMessageRequest { // message SubMessage { // string subfield = 1; @@ -200,7 +218,7 @@ func (m *Http) GetRules() []*HttpRule { // to the request message are as follows: // // 1. The `body` field specifies either `*` or a field path, or is -// omitted. If omitted, it assumes there is no HTTP body. +// omitted. If omitted, it indicates there is no HTTP request body. // 2. Leaf fields (recursive expansion of nested messages in the // request) can be classified into three types: // (a) Matched in the URL template. @@ -219,28 +237,34 @@ func (m *Http) GetRules() []*HttpRule { // FieldPath = IDENT { "." IDENT } ; // Verb = ":" LITERAL ; // -// The syntax `*` matches a single path segment. It follows the semantics of -// [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String -// Expansion. -// -// The syntax `**` matches zero or more path segments. It follows the semantics -// of [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.3 Reserved -// Expansion. NOTE: it must be the last segment in the path except the Verb. +// The syntax `*` matches a single path segment. The syntax `**` matches zero +// or more path segments, which must be the last part of the path except the +// `Verb`. The syntax `LITERAL` matches literal text in the path. // -// The syntax `LITERAL` matches literal text in the URL path. -// -// The syntax `Variable` matches the entire path as specified by its template; -// this nested template must not contain further variables. If a variable +// The syntax `Variable` matches part of the URL path as specified by its +// template. A variable template must not contain other variables. If a variable // matches a single path segment, its template may be omitted, e.g. `{var}` // is equivalent to `{var=*}`. // +// If a variable contains exactly one path segment, such as `"{var}"` or +// `"{var=*}"`, when such a variable is expanded into a URL path, all characters +// except `[-_.~0-9a-zA-Z]` are percent-encoded. Such variables show up in the +// Discovery Document as `{var}`. +// +// If a variable contains one or more path segments, such as `"{var=foo/*}"` +// or `"{var=**}"`, when such a variable is expanded into a URL path, all +// characters except `[-_.~/0-9a-zA-Z]` are percent-encoded. Such variables +// show up in the Discovery Document as `{+var}`. +// +// NOTE: While the single segment variable matches the semantics of +// [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 +// Simple String Expansion, the multi segment variable **does not** match +// RFC 6570 Reserved Expansion. The reason is that the Reserved Expansion +// does not expand special characters like `?` and `#`, which would lead +// to invalid URLs. +// // NOTE: the field paths in variables and in the `body` must not refer to // repeated fields or map fields. -// -// Use CustomHttpPattern to specify any HTTP method that is not included in the -// `pattern` field, such as HEAD, or "*" to leave the HTTP method unspecified for -// a given URL path rule. The wild-card rule is useful for services that provide -// content to Web (HTML) clients. type HttpRule struct { // Selects methods to which this rule applies. // @@ -540,28 +564,31 @@ func init() { func init() { proto.RegisterFile("google/api/http.proto", fileDescriptor1) } var fileDescriptor1 = []byte{ - // 359 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xcf, 0x6a, 0xe3, 0x30, - 0x10, 0xc6, 0xd7, 0x89, 0xe3, 0x24, 0x13, 0x58, 0x58, 0x6d, 0x76, 0x11, 0x85, 0x42, 0xc8, 0x29, - 0xf4, 0x60, 0x43, 0x7a, 0xe8, 0x21, 0xa7, 0xb8, 0x94, 0xa6, 0xb7, 0xe0, 0x63, 0x2f, 0x45, 0xb1, - 0x85, 0xa2, 0xd6, 0x91, 0x84, 0x3d, 0x3e, 0xf4, 0x75, 0xfa, 0x0e, 0x7d, 0xb7, 0x1e, 0x8b, 0xfe, - 0xa4, 0x09, 0x14, 0x7a, 0x9b, 0xef, 0x37, 0x9f, 0x34, 0xa3, 0x19, 0xc1, 0x3f, 0xa1, 0xb5, 0xa8, - 0x79, 0xc6, 0x8c, 0xcc, 0xf6, 0x88, 0x26, 0x35, 0x8d, 0x46, 0x4d, 0xc0, 0xe3, 0x94, 0x19, 0x39, - 0x5f, 0x42, 0xbc, 0x41, 0x34, 0xe4, 0x0a, 0x06, 0x4d, 0x57, 0xf3, 0x96, 0x46, 0xb3, 0xfe, 0x62, - 0xb2, 0x9c, 0xa6, 0x27, 0x4f, 0x6a, 0x0d, 0x45, 0x57, 0xf3, 0xc2, 0x5b, 0xe6, 0xef, 0x3d, 0x18, - 0x1d, 0x19, 0xb9, 0x80, 0x51, 0xcb, 0x6b, 0x5e, 0xa2, 0x6e, 0x68, 0x34, 0x8b, 0x16, 0xe3, 0xe2, - 0x4b, 0x13, 0x02, 0x7d, 0xc1, 0x91, 0xf6, 0x2c, 0xde, 0xfc, 0x2a, 0xac, 0xb0, 0xcc, 0x74, 0x48, - 0xfb, 0x47, 0x66, 0x3a, 0x24, 0x53, 0x88, 0x8d, 0x6e, 0x91, 0xc6, 0x01, 0x3a, 0x45, 0x28, 0x24, - 0x15, 0xaf, 0x39, 0x72, 0x3a, 0x08, 0x3c, 0x68, 0xf2, 0x1f, 0x06, 0x86, 0x61, 0xb9, 0xa7, 0x49, - 0x48, 0x78, 0x49, 0x6e, 0x20, 0x29, 0xbb, 0x16, 0xf5, 0x81, 0x8e, 0x66, 0xd1, 0x62, 0xb2, 0xbc, - 0x3c, 0x7f, 0xc5, 0xad, 0xcb, 0xd8, 0xbe, 0xb7, 0x0c, 0x91, 0x37, 0xca, 0x5e, 0xe8, 0xed, 0x84, - 0x40, 0xbc, 0xd3, 0xd5, 0x2b, 0x1d, 0xba, 0x07, 0xb8, 0x98, 0xdc, 0xc1, 0x5f, 0x56, 0x55, 0x12, - 0xa5, 0x56, 0xac, 0x7e, 0xda, 0x49, 0x55, 0x49, 0x25, 0x5a, 0x3a, 0xf9, 0x61, 0x3e, 0xe4, 0x74, - 0x20, 0x0f, 0xfe, 0x7c, 0x0c, 0x43, 0xe3, 0xeb, 0xcd, 0x57, 0xf0, 0xe7, 0x5b, 0x13, 0xb6, 0xf4, - 0x8b, 0x54, 0x55, 0x98, 0x9d, 0x8b, 0x2d, 0x33, 0x0c, 0xf7, 0x7e, 0x70, 0x85, 0x8b, 0xf3, 0x67, - 0xf8, 0x5d, 0xea, 0xc3, 0x59, 0xd9, 0x7c, 0xec, 0xae, 0xb1, 0x1b, 0xdd, 0x46, 0x8f, 0xeb, 0x90, - 0x10, 0xba, 0x66, 0x4a, 0xa4, 0xba, 0x11, 0x99, 0xe0, 0xca, 0xed, 0x3b, 0xf3, 0x29, 0x66, 0x64, - 0xeb, 0x7e, 0x02, 0x53, 0x4a, 0x23, 0xb3, 0x6d, 0xb6, 0xab, 0xb3, 0xf8, 0x23, 0x8a, 0xde, 0x7a, - 0xf1, 0xfd, 0x7a, 0xfb, 0xb0, 0x4b, 0xdc, 0xb9, 0xeb, 0xcf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x68, - 0x15, 0x60, 0x5b, 0x40, 0x02, 0x00, 0x00, + // 401 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x41, 0xab, 0x13, 0x31, + 0x10, 0xc7, 0xdd, 0x76, 0xdb, 0xd7, 0x4e, 0x41, 0x30, 0x3e, 0x25, 0x88, 0x62, 0xe9, 0xa9, 0x78, + 0xd8, 0xc2, 0xf3, 0xe0, 0xe1, 0x9d, 0x5e, 0xb5, 0xf8, 0xbc, 0x95, 0x3d, 0x7a, 0x29, 0xe9, 0x66, + 0x4c, 0xa3, 0x79, 0x49, 0xd8, 0xcc, 0x8a, 0xfd, 0x3a, 0x7e, 0x07, 0xbf, 0x9b, 0x47, 0x49, 0x36, + 0xb5, 0x05, 0xc1, 0xdb, 0xfc, 0xff, 0xf3, 0xcb, 0xcc, 0x64, 0x18, 0x78, 0xa6, 0x9c, 0x53, 0x06, + 0x57, 0xc2, 0xeb, 0xd5, 0x81, 0xc8, 0x57, 0xbe, 0x75, 0xe4, 0x18, 0xf4, 0x76, 0x25, 0xbc, 0x5e, + 0x1c, 0xa1, 0xbc, 0x27, 0xf2, 0xec, 0x0d, 0x8c, 0xda, 0xce, 0x60, 0xe0, 0xc5, 0x7c, 0xb8, 0x9c, + 0xdd, 0x5c, 0x57, 0x67, 0xa6, 0x8a, 0x40, 0xdd, 0x19, 0xac, 0x7b, 0x84, 0x6d, 0xe0, 0xf5, 0x97, + 0xce, 0x98, 0xe3, 0x4e, 0x62, 0xe3, 0x24, 0xee, 0x5a, 0x0c, 0xd8, 0x7e, 0x47, 0xb9, 0xc3, 0x1f, + 0x5e, 0xd8, 0xa0, 0x9d, 0xe5, 0x83, 0x79, 0xb1, 0x9c, 0xd4, 0x2f, 0x13, 0xf6, 0x21, 0x51, 0x75, + 0x86, 0x36, 0x27, 0x66, 0xf1, 0x6b, 0x00, 0x93, 0x53, 0x69, 0xf6, 0x02, 0x26, 0x01, 0x0d, 0x36, + 0xe4, 0x5a, 0x5e, 0xcc, 0x8b, 0xe5, 0xb4, 0xfe, 0xab, 0x19, 0x83, 0xa1, 0x42, 0x4a, 0x35, 0xa7, + 0xf7, 0x8f, 0xea, 0x28, 0xa2, 0xe7, 0x3b, 0xe2, 0xc3, 0x93, 0xe7, 0x3b, 0x62, 0xd7, 0x50, 0x7a, + 0x17, 0x88, 0x97, 0xd9, 0x4c, 0x8a, 0x71, 0x18, 0x4b, 0x34, 0x48, 0xc8, 0x47, 0xd9, 0xcf, 0x9a, + 0x3d, 0x87, 0x91, 0x17, 0xd4, 0x1c, 0xf8, 0x38, 0x27, 0x7a, 0xc9, 0xde, 0xc1, 0xb8, 0xe9, 0x02, + 0xb9, 0x07, 0x3e, 0x99, 0x17, 0xcb, 0xd9, 0xcd, 0xab, 0xcb, 0x65, 0xbc, 0x4f, 0x99, 0x38, 0xf7, + 0x56, 0x10, 0x61, 0x6b, 0x63, 0xc1, 0x1e, 0x67, 0x0c, 0xca, 0xbd, 0x93, 0x47, 0x7e, 0x95, 0x3e, + 0x90, 0x62, 0xb6, 0x81, 0xa7, 0x42, 0x4a, 0x4d, 0xda, 0x59, 0x61, 0x76, 0x7b, 0x6d, 0xa5, 0xb6, + 0x2a, 0xf0, 0xd9, 0x7f, 0xd6, 0xcc, 0xce, 0x0f, 0xd6, 0x99, 0x5f, 0x4f, 0xe1, 0xca, 0xf7, 0xfd, + 0x16, 0xb7, 0xf0, 0xe4, 0x9f, 0x21, 0x62, 0xeb, 0x6f, 0xda, 0xca, 0xbc, 0xbb, 0x14, 0x47, 0xcf, + 0x0b, 0x3a, 0xf4, 0x8b, 0xab, 0x53, 0xbc, 0xfe, 0x0a, 0x8f, 0x1b, 0xf7, 0x70, 0xd1, 0x76, 0x3d, + 0x4d, 0x65, 0xe2, 0x61, 0x6c, 0x8b, 0xcf, 0x77, 0x39, 0xa1, 0x9c, 0x11, 0x56, 0x55, 0xae, 0x55, + 0x2b, 0x85, 0x36, 0x9d, 0xcd, 0xaa, 0x4f, 0x09, 0xaf, 0x43, 0x3a, 0x28, 0x61, 0xad, 0x23, 0x11, + 0xc7, 0x0c, 0xb7, 0x17, 0xf1, 0xef, 0xa2, 0xf8, 0x39, 0x28, 0x3f, 0xde, 0x6d, 0x3f, 0xed, 0xc7, + 0xe9, 0xdd, 0xdb, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x73, 0x2c, 0xed, 0xfb, 0x87, 0x02, 0x00, + 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/api/authorization_config.pb.go b/vendor/google.golang.org/genproto/googleapis/api/authorization_config.pb.go index 410112b..8062b96 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/authorization_config.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/authorization_config.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/experimental/authorization_config.proto -// DO NOT EDIT! /* Package api is a generated protocol buffer package. diff --git a/vendor/google.golang.org/genproto/googleapis/api/configchange/config_change.pb.go b/vendor/google.golang.org/genproto/googleapis/api/configchange/config_change.pb.go index 65bc8da..cf41500 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/configchange/config_change.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/configchange/config_change.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/config_change.proto -// DO NOT EDIT! /* Package configchange is a generated protocol buffer package. diff --git a/vendor/google.golang.org/genproto/googleapis/api/distribution/distribution.pb.go b/vendor/google.golang.org/genproto/googleapis/api/distribution/distribution.pb.go index 1ff5823..68b702a 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/distribution/distribution.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/distribution/distribution.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/distribution.proto -// DO NOT EDIT! /* Package distribution is a generated protocol buffer package. diff --git a/vendor/google.golang.org/genproto/googleapis/api/experimental.pb.go b/vendor/google.golang.org/genproto/googleapis/api/experimental.pb.go index e3e02e4..a88df3d 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/experimental.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/experimental.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/experimental/experimental.proto -// DO NOT EDIT! package api diff --git a/vendor/google.golang.org/genproto/googleapis/api/httpbody/httpbody.pb.go b/vendor/google.golang.org/genproto/googleapis/api/httpbody/httpbody.pb.go index 96f998d..c3e12e5 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/httpbody/httpbody.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/httpbody/httpbody.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/httpbody.proto -// DO NOT EDIT! /* Package httpbody is a generated protocol buffer package. diff --git a/vendor/google.golang.org/genproto/googleapis/api/label/label.pb.go b/vendor/google.golang.org/genproto/googleapis/api/label/label.pb.go index d0327ab..790f6c0 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/label/label.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/label/label.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/label.proto -// DO NOT EDIT! /* Package label is a generated protocol buffer package. diff --git a/vendor/google.golang.org/genproto/googleapis/api/metric/metric.pb.go b/vendor/google.golang.org/genproto/googleapis/api/metric/metric.pb.go index 738ff43..df451ac 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/metric/metric.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/metric/metric.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/metric.proto -// DO NOT EDIT! /* Package metric is a generated protocol buffer package. diff --git a/vendor/google.golang.org/genproto/googleapis/api/monitoredres/monitored_resource.pb.go b/vendor/google.golang.org/genproto/googleapis/api/monitoredres/monitored_resource.pb.go index 9ceb24b..3ce7eb7 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/monitoredres/monitored_resource.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/monitoredres/monitored_resource.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/monitored_resource.proto -// DO NOT EDIT! /* Package monitoredres is a generated protocol buffer package. diff --git a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/auth.pb.go b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/auth.pb.go index f489929..f0b7e90 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/auth.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/auth.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/auth.proto -// DO NOT EDIT! /* Package serviceconfig is a generated protocol buffer package. @@ -32,7 +31,6 @@ It has these top-level messages: Backend BackendRule Billing - BillingStatusRule ProjectProperties Property Context @@ -216,6 +214,9 @@ type AuthProvider struct { // audiences: bookstore_android.apps.googleusercontent.com, // bookstore_web.apps.googleusercontent.com Audiences string `protobuf:"bytes,4,opt,name=audiences" json:"audiences,omitempty"` + // Redirect URL if JWT token is required but no present or is expired. + // Implement authorizationUrl of securityDefinitions in OpenAPI spec. + AuthorizationUrl string `protobuf:"bytes,5,opt,name=authorization_url,json=authorizationUrl" json:"authorization_url,omitempty"` } func (m *AuthProvider) Reset() { *m = AuthProvider{} } @@ -251,6 +252,13 @@ func (m *AuthProvider) GetAudiences() string { return "" } +func (m *AuthProvider) GetAuthorizationUrl() string { + if m != nil { + return m.AuthorizationUrl + } + return "" +} + // OAuth scopes are a way to define data and permissions on data. For example, // there are scopes defined for "Read-only access to Google Calendar" and // "Access to Cloud Platform". Users can consent to a scope for an application, @@ -350,33 +358,35 @@ func init() { func init() { proto.RegisterFile("google/api/auth.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 437 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x52, 0xcd, 0x6e, 0xd3, 0x40, - 0x10, 0x96, 0x9d, 0xa6, 0x8d, 0x27, 0x55, 0x0a, 0x2b, 0x51, 0x99, 0x52, 0x20, 0xf2, 0x29, 0x5c, - 0x1c, 0xa9, 0x45, 0x08, 0x09, 0x09, 0xd4, 0x22, 0x84, 0x7a, 0x22, 0x32, 0x42, 0x48, 0x5c, 0xac, - 0x65, 0x3d, 0x38, 0x4b, 0xdd, 0x1d, 0xb3, 0x3f, 0xcd, 0x8d, 0x87, 0xe1, 0xc9, 0x78, 0x94, 0xca, - 0x6b, 0x37, 0x71, 0xd2, 0xe3, 0x7c, 0x3f, 0x33, 0xf3, 0xcd, 0x2e, 0x3c, 0x29, 0x89, 0xca, 0x0a, - 0xe7, 0xbc, 0x96, 0x73, 0xee, 0xec, 0x32, 0xad, 0x35, 0x59, 0x62, 0xd0, 0xc2, 0x29, 0xaf, 0xe5, - 0xc9, 0x69, 0x5f, 0xa2, 0x14, 0x59, 0x6e, 0x25, 0x29, 0xd3, 0x2a, 0x93, 0xbf, 0x30, 0xb9, 0x70, - 0x76, 0x89, 0xca, 0x4a, 0xe1, 0x09, 0xf6, 0x1a, 0x86, 0xda, 0x55, 0x68, 0xe2, 0xc1, 0x74, 0x30, - 0x1b, 0x9f, 0xbd, 0x48, 0x37, 0xbd, 0xd2, 0x6d, 0x69, 0xe6, 0x2a, 0xcc, 0x5a, 0x31, 0x7b, 0x03, - 0x51, 0xad, 0xe9, 0x56, 0x16, 0xa8, 0x4d, 0xbc, 0xe7, 0x9d, 0xf1, 0xae, 0x73, 0xd1, 0x09, 0xb2, - 0x8d, 0x34, 0xf9, 0x1f, 0x00, 0x7b, 0xd8, 0x95, 0x9d, 0xc0, 0xc8, 0x60, 0x85, 0xc2, 0x92, 0x8e, - 0x83, 0x69, 0x30, 0x8b, 0xb2, 0x75, 0xcd, 0xce, 0x61, 0x48, 0x4d, 0xd6, 0x38, 0x9c, 0x06, 0xb3, - 0xf1, 0xd9, 0xf3, 0xfe, 0x98, 0x2f, 0x4d, 0xaf, 0x0c, 0xff, 0x38, 0xa9, 0xf1, 0x06, 0x95, 0x35, - 0x59, 0xab, 0x65, 0x6f, 0x21, 0xe6, 0x55, 0x45, 0xab, 0x7c, 0x25, 0xed, 0x92, 0x9c, 0xcd, 0x85, - 0xc6, 0xa2, 0x19, 0xca, 0xab, 0x78, 0x38, 0x0d, 0x66, 0xa3, 0xec, 0xd8, 0xf3, 0xdf, 0x5b, 0xfa, - 0xe3, 0x9a, 0x65, 0x1f, 0xe0, 0x50, 0xf7, 0x1a, 0xc6, 0x07, 0x3e, 0xdc, 0xb3, 0xdd, 0x70, 0xbd, - 0xa1, 0xd9, 0x96, 0x21, 0x21, 0x38, 0xec, 0xa7, 0x67, 0x13, 0x08, 0x65, 0xd1, 0xa5, 0x0a, 0x65, - 0xc1, 0x8e, 0x61, 0x5f, 0x1a, 0xe3, 0x50, 0xfb, 0x40, 0x51, 0xd6, 0x55, 0xec, 0x29, 0x8c, 0x7e, - 0xaf, 0xae, 0x4d, 0xee, 0xb4, 0x8c, 0x07, 0x9e, 0x39, 0x68, 0xea, 0x6f, 0x5a, 0xb2, 0x53, 0x88, - 0xb8, 0x2b, 0x24, 0x2a, 0x81, 0xcd, 0xb5, 0x1b, 0x6e, 0x03, 0x24, 0xef, 0xe1, 0xf1, 0x83, 0x3b, - 0xb0, 0x57, 0xf0, 0x48, 0x70, 0x45, 0x4a, 0x0a, 0x5e, 0xe5, 0x46, 0x50, 0x8d, 0xa6, 0xdb, 0xe1, - 0x68, 0x8d, 0x7f, 0xf5, 0x70, 0xb2, 0x80, 0xa3, 0x1d, 0x3b, 0x7b, 0x09, 0xe3, 0xfb, 0x37, 0xcb, - 0xd7, 0xcb, 0xc3, 0x3d, 0x74, 0x55, 0x6c, 0x6f, 0x14, 0xee, 0x6c, 0x74, 0x79, 0x0d, 0x13, 0x41, - 0x37, 0xbd, 0x93, 0x5d, 0x46, 0xdd, 0x49, 0x2c, 0x2d, 0x82, 0x1f, 0x9f, 0x3a, 0xa2, 0xa4, 0x8a, - 0xab, 0x32, 0x25, 0x5d, 0xce, 0x4b, 0x54, 0xfe, 0x83, 0xce, 0x5b, 0x8a, 0xd7, 0xd2, 0xf8, 0x1f, - 0x6c, 0x50, 0xdf, 0x4a, 0x81, 0x82, 0xd4, 0x2f, 0x59, 0xbe, 0xdb, 0xaa, 0xfe, 0x85, 0x7b, 0x9f, - 0x2f, 0x16, 0x57, 0x3f, 0xf7, 0xbd, 0xf1, 0xfc, 0x2e, 0x00, 0x00, 0xff, 0xff, 0xb9, 0x6d, 0xc6, - 0x5e, 0x1c, 0x03, 0x00, 0x00, + // 465 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x52, 0x5f, 0x6b, 0x13, 0x4f, + 0x14, 0x65, 0x93, 0xa6, 0xcd, 0xde, 0x94, 0xb4, 0x1d, 0xf8, 0x95, 0xfd, 0xd5, 0xaa, 0x21, 0x4f, + 0x11, 0x61, 0x03, 0xad, 0x88, 0x20, 0x28, 0xad, 0x88, 0xf4, 0xc9, 0x30, 0x52, 0x04, 0x5f, 0x96, + 0x71, 0x76, 0xdc, 0x8c, 0x9d, 0xce, 0x5d, 0xe7, 0x4f, 0x03, 0x3e, 0xf8, 0x49, 0x7c, 0xf2, 0x93, + 0xf9, 0x51, 0x64, 0x67, 0xb7, 0xc9, 0x6e, 0xfa, 0x78, 0xef, 0x39, 0xe7, 0xde, 0x7b, 0xce, 0x0c, + 0xfc, 0x57, 0x20, 0x16, 0x4a, 0xcc, 0x59, 0x29, 0xe7, 0xcc, 0xbb, 0x65, 0x5a, 0x1a, 0x74, 0x48, + 0xa0, 0x6e, 0xa7, 0xac, 0x94, 0x27, 0xa7, 0x6d, 0x8a, 0xd6, 0xe8, 0x98, 0x93, 0xa8, 0x6d, 0xcd, + 0x9c, 0xfe, 0x82, 0xf1, 0x85, 0x77, 0x4b, 0xa1, 0x9d, 0xe4, 0x01, 0x20, 0x2f, 0x60, 0x60, 0xbc, + 0x12, 0x36, 0xe9, 0x4f, 0xfa, 0xb3, 0xd1, 0xd9, 0x93, 0x74, 0x33, 0x2b, 0xed, 0x52, 0xa9, 0x57, + 0x82, 0xd6, 0x64, 0xf2, 0x12, 0xe2, 0xd2, 0xe0, 0x9d, 0xcc, 0x85, 0xb1, 0xc9, 0x4e, 0x50, 0x26, + 0xdb, 0xca, 0x45, 0x43, 0xa0, 0x1b, 0xea, 0xf4, 0x6f, 0x04, 0xe4, 0xe1, 0x54, 0x72, 0x02, 0x43, + 0x2b, 0x94, 0xe0, 0x0e, 0x4d, 0x12, 0x4d, 0xa2, 0x59, 0x4c, 0xd7, 0x35, 0x39, 0x87, 0x01, 0x56, + 0x5e, 0x93, 0xde, 0x24, 0x9a, 0x8d, 0xce, 0x1e, 0xb7, 0xd7, 0x7c, 0xac, 0x66, 0x51, 0xf1, 0xc3, + 0x4b, 0x23, 0x6e, 0x85, 0x76, 0x96, 0xd6, 0x5c, 0xf2, 0x0a, 0x12, 0xa6, 0x14, 0xae, 0xb2, 0x95, + 0x74, 0x4b, 0xf4, 0x2e, 0xe3, 0x46, 0xe4, 0xd5, 0x52, 0xa6, 0x92, 0xc1, 0x24, 0x9a, 0x0d, 0xe9, + 0x71, 0xc0, 0x3f, 0xd7, 0xf0, 0xbb, 0x35, 0x4a, 0xde, 0xc2, 0xbe, 0x69, 0x0d, 0x4c, 0xf6, 0x82, + 0xb9, 0x47, 0xdb, 0xe6, 0x5a, 0x4b, 0x69, 0x47, 0x30, 0xfd, 0x1d, 0xc1, 0x7e, 0xdb, 0x3e, 0x19, + 0x43, 0x4f, 0xe6, 0x8d, 0xad, 0x9e, 0xcc, 0xc9, 0x31, 0xec, 0x4a, 0x6b, 0xbd, 0x30, 0xc1, 0x51, + 0x4c, 0x9b, 0x8a, 0xfc, 0x0f, 0xc3, 0xef, 0xab, 0x1b, 0x9b, 0x79, 0x23, 0x93, 0x7e, 0x40, 0xf6, + 0xaa, 0xfa, 0xda, 0x48, 0x72, 0x0a, 0x31, 0xf3, 0xb9, 0x14, 0x9a, 0x8b, 0x2a, 0xee, 0x0a, 0xdb, + 0x34, 0xc8, 0x73, 0x38, 0xaa, 0x4c, 0xa3, 0x91, 0x3f, 0x43, 0xa4, 0x99, 0x37, 0xb5, 0xcb, 0x98, + 0x1e, 0x76, 0x80, 0x6b, 0xa3, 0xa6, 0x6f, 0xe0, 0xe8, 0x41, 0x6a, 0xe4, 0x19, 0x1c, 0x72, 0xa6, + 0x51, 0x4b, 0xce, 0x54, 0x66, 0x39, 0x96, 0xc2, 0x36, 0x07, 0x1f, 0xac, 0xfb, 0x9f, 0x42, 0x7b, + 0xba, 0x80, 0x83, 0x2d, 0x39, 0x79, 0x0a, 0xa3, 0xfb, 0x17, 0xce, 0xd6, 0x4e, 0xe1, 0xbe, 0x75, + 0x95, 0x77, 0xcf, 0xef, 0x6d, 0x9d, 0x7f, 0x79, 0x03, 0x63, 0x8e, 0xb7, 0xad, 0x80, 0x2f, 0xe3, + 0x26, 0x3f, 0x87, 0x8b, 0xe8, 0xcb, 0xfb, 0x06, 0x28, 0x50, 0x31, 0x5d, 0xa4, 0x68, 0x8a, 0x79, + 0x21, 0x74, 0xf8, 0xce, 0xf3, 0x1a, 0x62, 0xa5, 0xb4, 0xe1, 0xbf, 0x5b, 0x61, 0xee, 0x24, 0x17, + 0x1c, 0xf5, 0x37, 0x59, 0xbc, 0xee, 0x54, 0x7f, 0x7a, 0x3b, 0x1f, 0x2e, 0x16, 0x57, 0x5f, 0x77, + 0x83, 0xf0, 0xfc, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe5, 0xa3, 0x9d, 0xc6, 0x4a, 0x03, 0x00, + 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/backend.pb.go b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/backend.pb.go index 5054353..5704d9b 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/backend.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/backend.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/backend.proto -// DO NOT EDIT! package serviceconfig diff --git a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/billing.pb.go b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/billing.pb.go index 2c43eaf..81def6a 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/billing.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/billing.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/billing.proto -// DO NOT EDIT! package serviceconfig @@ -17,47 +16,30 @@ var _ = math.Inf // Billing related configuration of the service. // -// The following example shows how to configure metrics for billing: -// +// The following example shows how to configure monitored resources and metrics +// for billing: +// monitored_resources: +// - type: library.googleapis.com/branch +// labels: +// - key: /city +// description: The city where the library branch is located in. +// - key: /name +// description: The name of the branch. // metrics: -// - name: library.googleapis.com/read_calls -// metric_kind: DELTA -// value_type: INT64 -// - name: library.googleapis.com/write_calls +// - name: library.googleapis.com/book/borrowed_count // metric_kind: DELTA // value_type: INT64 // billing: -// metrics: -// - library.googleapis.com/read_calls -// - library.googleapis.com/write_calls -// -// The next example shows how to enable billing status check and customize the -// check behavior. It makes sure billing status check is included in the `Check` -// method of [Service Control API](https://cloud.google.com/service-control/). -// In the example, "google.storage.Get" method can be served when the billing -// status is either `current` or `delinquent`, while "google.storage.Write" -// method can only be served when the billing status is `current`: -// -// billing: -// rules: -// - selector: google.storage.Get -// allowed_statuses: -// - current -// - delinquent -// - selector: google.storage.Write -// allowed_statuses: current -// -// Mostly services should only allow `current` status when serving requests. -// In addition, services can choose to allow both `current` and `delinquent` -// statuses when serving read-only requests to resources. If there's no -// matching selector for operation, no billing status check will be performed. -// +// consumer_destinations: +// - monitored_resource: library.googleapis.com/branch +// metrics: +// - library.googleapis.com/book/borrowed_count type Billing struct { - // Names of the metrics to report to billing. Each name must - // be defined in [Service.metrics][google.api.Service.metrics] section. - Metrics []string `protobuf:"bytes,1,rep,name=metrics" json:"metrics,omitempty"` - // A list of billing status rules for configuring billing status check. - Rules []*BillingStatusRule `protobuf:"bytes,5,rep,name=rules" json:"rules,omitempty"` + // Billing configurations for sending metrics to the consumer project. + // There can be multiple consumer destinations per service, each one must have + // a different monitored resource type. A metric can be used in at most + // one consumer destination. + ConsumerDestinations []*Billing_BillingDestination `protobuf:"bytes,8,rep,name=consumer_destinations,json=consumerDestinations" json:"consumer_destinations,omitempty"` } func (m *Billing) Reset() { *m = Billing{} } @@ -65,87 +47,67 @@ func (m *Billing) String() string { return proto.CompactTextString(m) func (*Billing) ProtoMessage() {} func (*Billing) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } -func (m *Billing) GetMetrics() []string { +func (m *Billing) GetConsumerDestinations() []*Billing_BillingDestination { if m != nil { - return m.Metrics + return m.ConsumerDestinations } return nil } -func (m *Billing) GetRules() []*BillingStatusRule { - if m != nil { - return m.Rules - } - return nil +// Configuration of a specific billing destination (Currently only support +// bill against consumer project). +type Billing_BillingDestination struct { + // The monitored resource type. The type must be defined in + // [Service.monitored_resources][google.api.Service.monitored_resources] section. + MonitoredResource string `protobuf:"bytes,1,opt,name=monitored_resource,json=monitoredResource" json:"monitored_resource,omitempty"` + // Names of the metrics to report to this billing destination. + // Each name must be defined in [Service.metrics][google.api.Service.metrics] section. + Metrics []string `protobuf:"bytes,2,rep,name=metrics" json:"metrics,omitempty"` } -// Defines the billing status requirements for operations. -// -// When used with -// [Service Control API](https://cloud.google.com/service-control/), the -// following statuses are supported: -// -// - **current**: the associated billing account is up to date and capable of -// paying for resource usages. -// - **delinquent**: the associated billing account has a correctable problem, -// such as late payment. -// -// Mostly services should only allow `current` status when serving requests. -// In addition, services can choose to allow both `current` and `delinquent` -// statuses when serving read-only requests to resources. If the list of -// allowed_statuses is empty, it means no billing requirement. -// -type BillingStatusRule struct { - // Selects the operation names to which this rule applies. - // Refer to [selector][google.api.DocumentationRule.selector] for syntax details. - Selector string `protobuf:"bytes,1,opt,name=selector" json:"selector,omitempty"` - // Allowed billing statuses. The billing status check passes if the actual - // billing status matches any of the provided values here. - AllowedStatuses []string `protobuf:"bytes,2,rep,name=allowed_statuses,json=allowedStatuses" json:"allowed_statuses,omitempty"` -} +func (m *Billing_BillingDestination) Reset() { *m = Billing_BillingDestination{} } +func (m *Billing_BillingDestination) String() string { return proto.CompactTextString(m) } +func (*Billing_BillingDestination) ProtoMessage() {} +func (*Billing_BillingDestination) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0, 0} } -func (m *BillingStatusRule) Reset() { *m = BillingStatusRule{} } -func (m *BillingStatusRule) String() string { return proto.CompactTextString(m) } -func (*BillingStatusRule) ProtoMessage() {} -func (*BillingStatusRule) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{1} } - -func (m *BillingStatusRule) GetSelector() string { +func (m *Billing_BillingDestination) GetMonitoredResource() string { if m != nil { - return m.Selector + return m.MonitoredResource } return "" } -func (m *BillingStatusRule) GetAllowedStatuses() []string { +func (m *Billing_BillingDestination) GetMetrics() []string { if m != nil { - return m.AllowedStatuses + return m.Metrics } return nil } func init() { proto.RegisterType((*Billing)(nil), "google.api.Billing") - proto.RegisterType((*BillingStatusRule)(nil), "google.api.BillingStatusRule") + proto.RegisterType((*Billing_BillingDestination)(nil), "google.api.Billing.BillingDestination") } func init() { proto.RegisterFile("google/api/billing.proto", fileDescriptor2) } var fileDescriptor2 = []byte{ - // 253 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x90, 0x4f, 0x4b, 0x03, 0x31, - 0x10, 0xc5, 0x59, 0x4b, 0xad, 0x8d, 0xe2, 0x9f, 0xbd, 0x18, 0x16, 0x85, 0xa5, 0xa7, 0xf5, 0x92, - 0x05, 0x7b, 0xf4, 0xb6, 0xe0, 0xbd, 0x6c, 0x2f, 0xd2, 0x8b, 0xa4, 0x71, 0x0c, 0x81, 0x34, 0xb3, - 0x64, 0xb2, 0xfa, 0xf5, 0xc5, 0x24, 0xea, 0x4a, 0x8f, 0x6f, 0x7e, 0xef, 0x65, 0xe6, 0x85, 0x71, - 0x8d, 0xa8, 0x2d, 0xb4, 0x72, 0x30, 0xed, 0xde, 0x58, 0x6b, 0x9c, 0x16, 0x83, 0xc7, 0x80, 0x25, - 0x4b, 0x44, 0xc8, 0xc1, 0x54, 0x77, 0x13, 0x97, 0x74, 0x0e, 0x83, 0x0c, 0x06, 0x1d, 0x25, 0x67, - 0x75, 0x3b, 0xa1, 0x07, 0x08, 0xde, 0xa8, 0x04, 0x56, 0x2f, 0x6c, 0xd1, 0xa5, 0x37, 0x4b, 0xce, - 0x16, 0x09, 0x11, 0x2f, 0xea, 0x59, 0xb3, 0xec, 0x7f, 0x64, 0xb9, 0x66, 0x73, 0x3f, 0x5a, 0x20, - 0x3e, 0xaf, 0x67, 0xcd, 0xf9, 0xe3, 0xbd, 0xf8, 0xdb, 0x2b, 0x72, 0x7a, 0x1b, 0x64, 0x18, 0xa9, - 0x1f, 0x2d, 0xf4, 0xc9, 0xbb, 0xda, 0xb1, 0x9b, 0x23, 0x56, 0x56, 0xec, 0x8c, 0xc0, 0x82, 0x0a, - 0xe8, 0x79, 0x51, 0x17, 0xcd, 0xb2, 0xff, 0xd5, 0xe5, 0x03, 0xbb, 0x96, 0xd6, 0xe2, 0x27, 0xbc, - 0xbd, 0x52, 0x4c, 0x00, 0xf1, 0x93, 0x78, 0xc8, 0x55, 0x9e, 0x6f, 0xf3, 0xb8, 0xd3, 0xec, 0x52, - 0xe1, 0x61, 0x72, 0x46, 0x77, 0x91, 0x77, 0x6d, 0xbe, 0x5b, 0x6d, 0x8a, 0xdd, 0x73, 0x66, 0x1a, - 0xad, 0x74, 0x5a, 0xa0, 0xd7, 0xad, 0x06, 0x17, 0x3b, 0xb7, 0x09, 0xc9, 0xc1, 0x50, 0xfc, 0x0f, - 0x02, 0xff, 0x61, 0x14, 0x28, 0x74, 0xef, 0x46, 0x3f, 0xfd, 0x53, 0xfb, 0xd3, 0x98, 0x58, 0x7f, - 0x05, 0x00, 0x00, 0xff, 0xff, 0xd1, 0x90, 0x2d, 0x32, 0x84, 0x01, 0x00, 0x00, + // 265 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x90, 0xc1, 0x4a, 0xc4, 0x30, + 0x10, 0x86, 0xe9, 0xae, 0xb8, 0x6e, 0x14, 0xc1, 0xa0, 0x58, 0x8a, 0x87, 0xe2, 0x41, 0x7a, 0xb1, + 0x05, 0x3d, 0x7a, 0xb2, 0x28, 0xe2, 0xad, 0xf4, 0xa8, 0xc8, 0x92, 0xcd, 0x8e, 0x61, 0xa0, 0x9d, + 0x29, 0x49, 0xd6, 0x07, 0xf2, 0x5d, 0x7c, 0x2f, 0xb1, 0x69, 0xdd, 0x8a, 0xa7, 0x30, 0xf9, 0xfe, + 0xf9, 0x67, 0xe6, 0x17, 0xb1, 0x61, 0x36, 0x0d, 0x14, 0xaa, 0xc3, 0x62, 0x8d, 0x4d, 0x83, 0x64, + 0xf2, 0xce, 0xb2, 0x67, 0x29, 0x02, 0xc9, 0x55, 0x87, 0xc9, 0xc5, 0x44, 0xa5, 0x88, 0xd8, 0x2b, + 0x8f, 0x4c, 0x2e, 0x28, 0x93, 0xf3, 0x09, 0x6d, 0xc1, 0x5b, 0xd4, 0x01, 0x5c, 0x7e, 0x45, 0x62, + 0x51, 0x06, 0x53, 0xf9, 0x2a, 0xce, 0x34, 0x93, 0xdb, 0xb6, 0x60, 0x57, 0x1b, 0x70, 0x1e, 0x29, + 0x78, 0xc4, 0x07, 0xe9, 0x3c, 0x3b, 0xbc, 0xb9, 0xca, 0x77, 0xe3, 0xf2, 0xa1, 0x67, 0x7c, 0x1f, + 0x76, 0xf2, 0xfa, 0x74, 0x34, 0x99, 0x7c, 0xba, 0xe4, 0x4d, 0xc8, 0xff, 0x5a, 0x79, 0x2d, 0x64, + 0xcb, 0x84, 0x9e, 0x2d, 0x6c, 0x56, 0x16, 0x1c, 0x6f, 0xad, 0x86, 0x38, 0x4a, 0xa3, 0x6c, 0x59, + 0x9f, 0xfc, 0x92, 0x7a, 0x00, 0x32, 0x16, 0x8b, 0xb0, 0xbd, 0x8b, 0x67, 0xe9, 0x3c, 0x5b, 0xd6, + 0x63, 0x59, 0x92, 0x38, 0xd6, 0xdc, 0x4e, 0x36, 0x2c, 0x8f, 0x86, 0x71, 0xd5, 0xcf, 0x9d, 0x55, + 0xf4, 0xf2, 0x38, 0x30, 0xc3, 0x8d, 0x22, 0x93, 0xb3, 0x35, 0x85, 0x01, 0xea, 0x53, 0x28, 0x02, + 0x52, 0x1d, 0xba, 0x3e, 0x21, 0x07, 0xf6, 0x03, 0x35, 0x68, 0xa6, 0x77, 0x34, 0x77, 0x7f, 0xaa, + 0xcf, 0xd9, 0xde, 0xd3, 0x7d, 0xf5, 0xbc, 0xde, 0xef, 0x1b, 0x6f, 0xbf, 0x03, 0x00, 0x00, 0xff, + 0xff, 0xca, 0x8b, 0xb4, 0x63, 0x9d, 0x01, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/consumer.pb.go b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/consumer.pb.go index 00f94ca..3e92ac5 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/consumer.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/consumer.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/consumer.proto -// DO NOT EDIT! package serviceconfig diff --git a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/context.pb.go b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/context.pb.go index 692a037..f22859b 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/context.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/context.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/context.proto -// DO NOT EDIT! package serviceconfig diff --git a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/control.pb.go b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/control.pb.go index 36c6c81..1f4d867 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/control.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/control.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/control.proto -// DO NOT EDIT! package serviceconfig diff --git a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/documentation.pb.go b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/documentation.pb.go index 1885fd4..99a568c 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/documentation.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/documentation.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/documentation.proto -// DO NOT EDIT! package serviceconfig diff --git a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/endpoint.pb.go b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/endpoint.pb.go index d30d1ad..4bca182 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/endpoint.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/endpoint.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/endpoint.proto -// DO NOT EDIT! package serviceconfig diff --git a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/log.pb.go b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/log.pb.go index c1a959d..09ed8bd 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/log.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/log.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/log.proto -// DO NOT EDIT! package serviceconfig diff --git a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/logging.pb.go b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/logging.pb.go index 0eb15b2..b62778a 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/logging.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/logging.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/logging.proto -// DO NOT EDIT! package serviceconfig diff --git a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/monitoring.pb.go b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/monitoring.pb.go index 3dde768..3ebb6e1 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/monitoring.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/monitoring.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/monitoring.proto -// DO NOT EDIT! package serviceconfig diff --git a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/quota.pb.go b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/quota.pb.go index f5f18ed..ac5ab09 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/quota.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/quota.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/quota.proto -// DO NOT EDIT! package serviceconfig diff --git a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/service.pb.go b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/service.pb.go index 43c3777..cad0545 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/service.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/service.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/service.proto -// DO NOT EDIT! package serviceconfig @@ -47,10 +46,10 @@ var _ = math.Inf // requirements: // provider_id: google_calendar_auth type Service struct { - // The version of the service configuration. The config version may - // influence interpretation of the configuration, for example, to - // determine defaults. This is documented together with applicable - // options. The current default for the config version itself is `3`. + // The semantic version of the service configuration. The config version + // affects the interpretation of the service configuration. For example, + // certain features are enabled by default for certain config versions. + // The latest config version is `3`. ConfigVersion *google_protobuf5.UInt32Value `protobuf:"bytes,20,opt,name=config_version,json=configVersion" json:"config_version,omitempty"` // The DNS address at which this service is available, // e.g. `calendar.googleapis.com`. @@ -59,11 +58,9 @@ type Service struct { // by the client for tracking purpose. If empty, the server may choose to // generate one instead. Id string `protobuf:"bytes,33,opt,name=id" json:"id,omitempty"` - // The product title associated with this service. + // The product title for this service. Title string `protobuf:"bytes,2,opt,name=title" json:"title,omitempty"` - // The id of the Google developer project that owns the service. - // Members of this project can manage the service configuration, - // manage consumption of the service, etc. + // The Google project that owns this service. ProducerProjectId string `protobuf:"bytes,22,opt,name=producer_project_id,json=producerProjectId" json:"producer_project_id,omitempty"` // A list of API interfaces exported by this service. Only the `name` field // of the [google.protobuf.Api][google.protobuf.Api] needs to be provided by the configuration @@ -115,6 +112,8 @@ type Service struct { // Defines the monitored resources used by this service. This is required // by the [Service.monitoring][google.api.Service.monitoring] and [Service.logging][google.api.Service.logging] configurations. MonitoredResources []*google_api6.MonitoredResourceDescriptor `protobuf:"bytes,25,rep,name=monitored_resources,json=monitoredResources" json:"monitored_resources,omitempty"` + // Billing configuration. + Billing *Billing `protobuf:"bytes,26,opt,name=billing" json:"billing,omitempty"` // Logging configuration. Logging *Logging `protobuf:"bytes,27,opt,name=logging" json:"logging,omitempty"` // Monitoring configuration. @@ -272,6 +271,13 @@ func (m *Service) GetMonitoredResources() []*google_api6.MonitoredResourceDescri return nil } +func (m *Service) GetBilling() *Billing { + if m != nil { + return m.Billing + } + return nil +} + func (m *Service) GetLogging() *Logging { if m != nil { return m.Logging @@ -314,56 +320,57 @@ func init() { func init() { proto.RegisterFile("google/api/service.proto", fileDescriptor12) } var fileDescriptor12 = []byte{ - // 809 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x95, 0xdd, 0x6e, 0xdb, 0x36, - 0x14, 0x80, 0x61, 0xd7, 0x6e, 0x66, 0x3a, 0xcd, 0x1a, 0xc6, 0x49, 0x19, 0xd7, 0x1b, 0xd2, 0xfd, - 0xa0, 0xc6, 0x86, 0xca, 0x80, 0x0b, 0x74, 0x17, 0x1b, 0x30, 0xc4, 0x6d, 0xb0, 0x19, 0xe8, 0x00, - 0x8f, 0x59, 0x8b, 0x61, 0x37, 0x06, 0x2d, 0xd1, 0x0a, 0x37, 0x89, 0xe4, 0x48, 0x2a, 0x8b, 0x5f, - 0x67, 0xcf, 0xb6, 0x07, 0x19, 0x44, 0x52, 0x31, 0x65, 0x39, 0x77, 0xd6, 0xf9, 0xbe, 0x73, 0x7c, - 0x28, 0x92, 0x47, 0x00, 0xa5, 0x42, 0xa4, 0x19, 0x9d, 0x10, 0xc9, 0x26, 0x9a, 0xaa, 0x5b, 0x16, - 0xd3, 0x48, 0x2a, 0x61, 0x04, 0x04, 0x8e, 0x44, 0x44, 0xb2, 0xe1, 0x28, 0xb0, 0x08, 0xe7, 0xc2, - 0x10, 0xc3, 0x04, 0xd7, 0xce, 0x1c, 0x9e, 0x86, 0xb4, 0x30, 0x37, 0x3e, 0x1c, 0x96, 0x5e, 0x91, - 0xf8, 0x2f, 0xca, 0x93, 0x3d, 0x24, 0x16, 0xdc, 0xd0, 0x3b, 0xf3, 0x00, 0x51, 0x22, 0xf3, 0xe4, - 0xf3, 0x80, 0x24, 0x22, 0x2e, 0x72, 0xca, 0x5d, 0x17, 0x9e, 0x9f, 0x07, 0x9c, 0xf2, 0x44, 0x0a, - 0xc6, 0xab, 0xa2, 0xdf, 0x84, 0xe8, 0x4e, 0x52, 0xc5, 0x6c, 0x72, 0x56, 0x7b, 0xd8, 0xb3, 0x96, - 0x1b, 0x63, 0xa4, 0x0f, 0x9f, 0x05, 0xe1, 0x8c, 0xac, 0x68, 0xa5, 0x0f, 0xc2, 0xb8, 0x48, 0xf7, - 0xac, 0x22, 0x13, 0x69, 0xca, 0x78, 0x45, 0x9e, 0x05, 0x24, 0xa7, 0x46, 0xb1, 0xd8, 0x83, 0x2f, - 0x43, 0x20, 0x38, 0x33, 0x42, 0xd1, 0x64, 0xa9, 0xa8, 0x16, 0x85, 0xaa, 0xb6, 0x64, 0xf8, 0xbc, - 0x29, 0x6d, 0x4b, 0x87, 0x2d, 0xfe, 0x5d, 0x08, 0x43, 0x7c, 0x3c, 0xdc, 0x3b, 0x57, 0x6d, 0xc9, - 0xf8, 0x5a, 0x78, 0xfa, 0x22, 0xa4, 0x1b, 0x6d, 0x68, 0xbe, 0x94, 0x44, 0x91, 0x9c, 0x1a, 0xaa, - 0xf6, 0x14, 0x2e, 0x34, 0x49, 0xe9, 0xce, 0x1b, 0xb7, 0x4f, 0xab, 0x62, 0x3d, 0x21, 0x7c, 0xf3, - 0x20, 0x92, 0xcc, 0xa3, 0xe1, 0x2e, 0x32, 0x1b, 0x49, 0x77, 0xf6, 0xf8, 0x9e, 0xfd, 0xa3, 0x88, - 0x94, 0x54, 0xf9, 0x83, 0xf6, 0xc5, 0x7f, 0x3d, 0x70, 0x70, 0xed, 0x0e, 0x29, 0x7c, 0x0b, 0x8e, - 0x62, 0xc1, 0xd7, 0x2c, 0x5d, 0xde, 0x52, 0xa5, 0x99, 0xe0, 0x68, 0x70, 0xd1, 0x1a, 0xf7, 0xa7, - 0xa3, 0xc8, 0x9f, 0xdb, 0xaa, 0x48, 0xf4, 0x61, 0xce, 0xcd, 0xeb, 0xe9, 0x47, 0x92, 0x15, 0x14, - 0x3f, 0x71, 0x39, 0x1f, 0x5d, 0x0a, 0x84, 0xa0, 0xc3, 0x49, 0x4e, 0x51, 0xeb, 0xa2, 0x35, 0xee, - 0x61, 0xfb, 0x1b, 0x1e, 0x81, 0x36, 0x4b, 0xd0, 0x0b, 0x1b, 0x69, 0xb3, 0x04, 0x0e, 0x40, 0xd7, - 0x30, 0x93, 0x51, 0xd4, 0xb6, 0x21, 0xf7, 0x00, 0x23, 0x70, 0x22, 0x95, 0x48, 0x8a, 0x98, 0xaa, - 0xa5, 0x54, 0xe2, 0x4f, 0x1a, 0x9b, 0x25, 0x4b, 0xd0, 0x99, 0x75, 0x8e, 0x2b, 0xb4, 0x70, 0x64, - 0x9e, 0xc0, 0x31, 0xe8, 0x10, 0xc9, 0x34, 0x7a, 0x74, 0xf1, 0x68, 0xdc, 0x9f, 0x0e, 0x1a, 0x4d, - 0x5e, 0x4a, 0x86, 0xad, 0x01, 0xbf, 0x05, 0xdd, 0xf2, 0x95, 0x68, 0xd4, 0xb1, 0xea, 0x69, 0x43, - 0xfd, 0x6d, 0x23, 0x29, 0x76, 0x4e, 0x29, 0x53, 0x5e, 0xe4, 0x1a, 0x75, 0x1f, 0x90, 0xaf, 0x78, - 0x91, 0x63, 0xe7, 0xc0, 0x1f, 0xc1, 0x93, 0xda, 0xcd, 0x41, 0x8f, 0xed, 0x1b, 0x3b, 0x8f, 0xb6, - 0x37, 0x3d, 0x7a, 0x17, 0x0a, 0xb8, 0xee, 0xc3, 0x57, 0xe0, 0xc0, 0x5f, 0x64, 0xf4, 0x89, 0x4d, - 0x3d, 0x09, 0x53, 0x67, 0x0e, 0xe1, 0xca, 0x81, 0x5f, 0x81, 0x4e, 0x79, 0x85, 0x50, 0xcf, 0xba, - 0x4f, 0x43, 0xf7, 0x67, 0x63, 0x24, 0xb6, 0x14, 0xbe, 0x04, 0x5d, 0x7b, 0x5c, 0x11, 0xb0, 0xda, - 0x71, 0xa8, 0xfd, 0x5a, 0x02, 0xec, 0x38, 0x9c, 0x81, 0xa3, 0x72, 0xba, 0x50, 0x6e, 0x58, 0xec, - 0xfa, 0xef, 0xdb, 0x8c, 0x61, 0x98, 0x71, 0x59, 0x33, 0xf0, 0x4e, 0x46, 0xb9, 0x02, 0x3f, 0x70, - 0xd0, 0x61, 0x73, 0x05, 0x6f, 0x1d, 0xc2, 0x95, 0x53, 0xf6, 0x66, 0x4f, 0x3c, 0xfa, 0xb4, 0xd9, - 0xdb, 0x87, 0x12, 0x60, 0xc7, 0xe1, 0x14, 0xf4, 0xaa, 0xa1, 0xa3, 0x11, 0xac, 0xef, 0x71, 0x29, - 0x5f, 0x79, 0x88, 0xb7, 0x5a, 0xd5, 0x8b, 0x12, 0x19, 0x3a, 0xdd, 0xdf, 0x8b, 0x12, 0x19, 0xae, - 0x1c, 0xf8, 0x0a, 0x74, 0x32, 0x91, 0x6a, 0xf4, 0xcc, 0x56, 0xaf, 0x6d, 0xda, 0x7b, 0x91, 0xbe, - 0xa3, 0x3a, 0x56, 0x4c, 0x1a, 0xa1, 0xb0, 0xd5, 0xe0, 0x1b, 0x70, 0xe0, 0x06, 0x8c, 0x46, 0xc8, - 0x66, 0x8c, 0xc2, 0x8c, 0x5f, 0x2c, 0x0a, 0x92, 0x2a, 0x19, 0xfe, 0x0e, 0x4e, 0x9a, 0xf3, 0x47, - 0xa3, 0x73, 0x5b, 0xe3, 0x65, 0xad, 0x46, 0xa5, 0x61, 0x6f, 0x05, 0xe5, 0x60, 0xbe, 0x0b, 0xed, - 0x7a, 0xfd, 0x30, 0x44, 0xcf, 0x9b, 0xeb, 0x7d, 0xef, 0x10, 0xae, 0x1c, 0xf8, 0x06, 0x80, 0xed, - 0x8c, 0x43, 0x23, 0x9b, 0x71, 0xb6, 0xe7, 0xff, 0xcb, 0xa4, 0xc0, 0x84, 0x73, 0x70, 0xbc, 0x3b, - 0xc8, 0x34, 0xfa, 0xac, 0x3e, 0x1b, 0xca, 0xf4, 0x6b, 0x2b, 0x2d, 0xee, 0x1d, 0xfc, 0x54, 0xef, - 0x44, 0xe0, 0x77, 0xa0, 0x1f, 0x4c, 0x4c, 0xf4, 0x75, 0xb3, 0x87, 0x6b, 0x8b, 0xe7, 0x7c, 0x2d, - 0x30, 0xd0, 0xf7, 0xbf, 0xe1, 0x0f, 0xe0, 0x30, 0xfc, 0xb6, 0x20, 0x6a, 0x33, 0x51, 0xed, 0x44, - 0x04, 0x1c, 0xd7, 0xec, 0x19, 0x2f, 0x47, 0x5b, 0x1e, 0xc8, 0xb3, 0x43, 0x3f, 0xf5, 0x16, 0xe5, - 0xb5, 0x5e, 0xb4, 0xfe, 0xb8, 0xf2, 0x2c, 0x15, 0x19, 0xe1, 0x69, 0x24, 0x54, 0x3a, 0x49, 0x29, - 0xb7, 0x97, 0x7e, 0xe2, 0x50, 0x39, 0x4a, 0xc2, 0x8f, 0xba, 0x9b, 0x7b, 0xdf, 0xd7, 0x9e, 0xfe, - 0x6d, 0x77, 0x7e, 0xba, 0x5c, 0xcc, 0x57, 0x8f, 0x6d, 0xe2, 0xeb, 0xff, 0x03, 0x00, 0x00, 0xff, - 0xff, 0xcc, 0xae, 0xb3, 0x8f, 0x0c, 0x08, 0x00, 0x00, + // 825 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x96, 0xdf, 0x6e, 0xdb, 0x36, + 0x14, 0x87, 0x61, 0xd7, 0x6e, 0x16, 0x3a, 0xcd, 0x1a, 0xc6, 0x49, 0x19, 0xd7, 0x1b, 0xd2, 0xfd, + 0x41, 0x8d, 0x0d, 0x95, 0x01, 0x17, 0xe8, 0x2e, 0x36, 0x60, 0x88, 0xdb, 0x60, 0x33, 0xd0, 0x01, + 0x1e, 0xb3, 0x16, 0xc3, 0x6e, 0x0c, 0x5a, 0xa2, 0x55, 0x6e, 0x12, 0xc9, 0x91, 0x54, 0x17, 0x3f, + 0xc7, 0xde, 0x60, 0x4f, 0x3a, 0x88, 0xa4, 0x62, 0xca, 0x52, 0xee, 0x22, 0x7e, 0xdf, 0x39, 0x38, + 0x14, 0xa9, 0x9f, 0x03, 0x50, 0x2a, 0x44, 0x9a, 0xd1, 0x29, 0x91, 0x6c, 0xaa, 0xa9, 0xfa, 0xc8, + 0x62, 0x1a, 0x49, 0x25, 0x8c, 0x80, 0xc0, 0x91, 0x88, 0x48, 0x36, 0x1a, 0x07, 0x16, 0xe1, 0x5c, + 0x18, 0x62, 0x98, 0xe0, 0xda, 0x99, 0xa3, 0xb3, 0x90, 0x16, 0xe6, 0x83, 0x5f, 0x0e, 0x5b, 0xaf, + 0x49, 0xfc, 0x17, 0xe5, 0x49, 0x1b, 0x61, 0x59, 0xc6, 0x78, 0xda, 0x42, 0x62, 0xc1, 0x0d, 0xbd, + 0x35, 0xf7, 0x10, 0x25, 0x32, 0x4f, 0x3e, 0x0f, 0x48, 0x22, 0xe2, 0x22, 0xa7, 0xdc, 0xcd, 0xe7, + 0xf9, 0x45, 0xc0, 0x29, 0x4f, 0xa4, 0x60, 0xbc, 0x6a, 0xfa, 0x4d, 0x88, 0x6e, 0x25, 0x55, 0xcc, + 0x16, 0x67, 0xb5, 0x87, 0x96, 0x5d, 0x7e, 0x30, 0x46, 0xfa, 0xe5, 0xf3, 0x60, 0x39, 0x23, 0x6b, + 0x5a, 0xe9, 0xc3, 0x70, 0x5d, 0xb4, 0xed, 0x2f, 0x13, 0x69, 0xba, 0xdb, 0xf9, 0x93, 0x80, 0xe4, + 0xd4, 0x28, 0x16, 0x7b, 0xf0, 0x65, 0x08, 0x04, 0x67, 0x46, 0x28, 0x9a, 0xac, 0x14, 0xd5, 0xa2, + 0x50, 0xd5, 0x61, 0x8d, 0x9e, 0x36, 0xa5, 0x5d, 0xeb, 0x70, 0xc4, 0xbf, 0x0b, 0x61, 0x88, 0x5f, + 0x0f, 0x4f, 0xd5, 0x75, 0x5b, 0x31, 0xbe, 0x11, 0x9e, 0x3e, 0x0b, 0xe9, 0x56, 0x1b, 0x9a, 0xaf, + 0x24, 0x51, 0x24, 0xa7, 0x86, 0xaa, 0x96, 0xc6, 0x85, 0x26, 0x29, 0xdd, 0x7b, 0xe3, 0xf6, 0x69, + 0x5d, 0x6c, 0xa6, 0x84, 0x6f, 0xef, 0x45, 0x92, 0x79, 0x34, 0xda, 0x47, 0x66, 0x2b, 0xe9, 0xde, + 0x19, 0xdf, 0xb1, 0x7f, 0x14, 0x91, 0x92, 0x2a, 0x7f, 0x05, 0xbf, 0xf8, 0x17, 0x80, 0x83, 0x1b, + 0x77, 0x7d, 0xe1, 0x6b, 0x70, 0x1c, 0x0b, 0xbe, 0x61, 0xe9, 0xea, 0x23, 0x55, 0x9a, 0x09, 0x8e, + 0x86, 0x97, 0x9d, 0xc9, 0x60, 0x36, 0x8e, 0xfc, 0x8d, 0xae, 0x9a, 0x44, 0xef, 0x16, 0xdc, 0xbc, + 0x9c, 0xbd, 0x27, 0x59, 0x41, 0xf1, 0x23, 0x57, 0xf3, 0xde, 0x95, 0x40, 0x08, 0x7a, 0x9c, 0xe4, + 0x14, 0x75, 0x2e, 0x3b, 0x93, 0x43, 0x6c, 0xff, 0x86, 0xc7, 0xa0, 0xcb, 0x12, 0xf4, 0xcc, 0xae, + 0x74, 0x59, 0x02, 0x87, 0xa0, 0x6f, 0x98, 0xc9, 0x28, 0xea, 0xda, 0x25, 0xf7, 0x00, 0x23, 0x70, + 0x2a, 0x95, 0x48, 0x8a, 0x98, 0xaa, 0x95, 0x54, 0xe2, 0x4f, 0x1a, 0x9b, 0x15, 0x4b, 0xd0, 0xb9, + 0x75, 0x4e, 0x2a, 0xb4, 0x74, 0x64, 0x91, 0xc0, 0x09, 0xe8, 0x11, 0xc9, 0x34, 0x7a, 0x70, 0xf9, + 0x60, 0x32, 0x98, 0x0d, 0x1b, 0x43, 0x5e, 0x49, 0x86, 0xad, 0x01, 0xbf, 0x05, 0xfd, 0xf2, 0x95, + 0x68, 0xd4, 0xb3, 0xea, 0x59, 0x43, 0xfd, 0x6d, 0x2b, 0x29, 0x76, 0x4e, 0x29, 0x53, 0x5e, 0xe4, + 0x1a, 0xf5, 0xef, 0x91, 0xaf, 0x79, 0x91, 0x63, 0xe7, 0xc0, 0x1f, 0xc1, 0xa3, 0xda, 0x97, 0x83, + 0x1e, 0xda, 0x37, 0x76, 0x11, 0xed, 0x32, 0x20, 0x7a, 0x13, 0x0a, 0xb8, 0xee, 0xc3, 0x17, 0xe0, + 0xc0, 0x7f, 0xe2, 0xe8, 0x13, 0x5b, 0x7a, 0x1a, 0x96, 0xce, 0x1d, 0xc2, 0x95, 0x03, 0xbf, 0x02, + 0xbd, 0xf2, 0x13, 0x42, 0x87, 0xd6, 0x7d, 0x1c, 0xba, 0x3f, 0x1b, 0x23, 0xb1, 0xa5, 0xf0, 0x39, + 0xe8, 0xdb, 0xeb, 0x8a, 0x80, 0xd5, 0x4e, 0x42, 0xed, 0xd7, 0x12, 0x60, 0xc7, 0xe1, 0x1c, 0x1c, + 0x97, 0xb9, 0x43, 0xb9, 0x61, 0xb1, 0x9b, 0x7f, 0x60, 0x2b, 0x46, 0x61, 0xc5, 0x55, 0xcd, 0xc0, + 0x7b, 0x15, 0xe5, 0x0e, 0x7c, 0xe0, 0xa0, 0xa3, 0xe6, 0x0e, 0x5e, 0x3b, 0x84, 0x2b, 0xa7, 0x9c, + 0xcd, 0xde, 0x78, 0xf4, 0x69, 0x73, 0xb6, 0x77, 0x25, 0xc0, 0x8e, 0xc3, 0x19, 0x38, 0xac, 0x42, + 0x47, 0x23, 0x58, 0x3f, 0xe3, 0x52, 0xbe, 0xf6, 0x10, 0xef, 0xb4, 0x6a, 0x16, 0x25, 0x32, 0x74, + 0xd6, 0x3e, 0x8b, 0x12, 0x19, 0xae, 0x1c, 0xf8, 0x02, 0xf4, 0x32, 0x91, 0x6a, 0xf4, 0xc4, 0x76, + 0xaf, 0x1d, 0xda, 0x5b, 0x91, 0xbe, 0xa1, 0x3a, 0x56, 0x4c, 0x1a, 0xa1, 0xb0, 0xd5, 0xe0, 0x2b, + 0x70, 0xe0, 0x02, 0x46, 0x23, 0x64, 0x2b, 0xc6, 0x61, 0xc5, 0x2f, 0x16, 0x05, 0x45, 0x95, 0x0c, + 0x7f, 0x07, 0xa7, 0xcd, 0xfc, 0xd1, 0xe8, 0xc2, 0xf6, 0x78, 0x5e, 0xeb, 0x51, 0x69, 0xd8, 0x5b, + 0x41, 0x3b, 0x98, 0xef, 0x43, 0xbb, 0x5f, 0xff, 0x33, 0x80, 0x46, 0x2d, 0xb7, 0xc7, 0x21, 0x5c, + 0x39, 0xa5, 0xee, 0xb3, 0x13, 0x3d, 0x6d, 0xea, 0x6f, 0x1d, 0xc2, 0x95, 0x03, 0x5f, 0x01, 0xb0, + 0x8b, 0x44, 0x34, 0xb6, 0x15, 0xe7, 0x2d, 0xe3, 0x96, 0x45, 0x81, 0x09, 0x17, 0xe0, 0x64, 0x3f, + 0xf7, 0x34, 0xfa, 0xac, 0x1e, 0x25, 0x65, 0xf9, 0x8d, 0x95, 0x96, 0x77, 0x0e, 0x7e, 0xac, 0xf7, + 0x56, 0xe0, 0x77, 0x60, 0x10, 0x04, 0x2c, 0xfa, 0xba, 0x39, 0xc3, 0x8d, 0xc5, 0x0b, 0xbe, 0x11, + 0x18, 0xe8, 0xbb, 0xbf, 0xe1, 0x0f, 0xe0, 0x28, 0xfc, 0x29, 0x42, 0xd4, 0x56, 0xa2, 0xda, 0x05, + 0x0a, 0x38, 0xae, 0xd9, 0x73, 0x5e, 0x26, 0x61, 0x1e, 0xc8, 0xf3, 0x23, 0x1f, 0x92, 0xcb, 0x32, + 0x05, 0x96, 0x9d, 0x3f, 0xae, 0x3d, 0x4b, 0x45, 0x46, 0x78, 0x1a, 0x09, 0x95, 0x4e, 0x53, 0xca, + 0x6d, 0x46, 0x4c, 0x1d, 0x2a, 0x93, 0x27, 0xfc, 0xef, 0xc0, 0xc5, 0xe4, 0xf7, 0xb5, 0xa7, 0xff, + 0xba, 0xbd, 0x9f, 0xae, 0x96, 0x8b, 0xf5, 0x43, 0x5b, 0xf8, 0xf2, 0xff, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xfe, 0x6c, 0x4b, 0xf7, 0x55, 0x08, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/source_info.pb.go b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/source_info.pb.go index 7bcd3bc..1278084 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/source_info.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/source_info.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/source_info.proto -// DO NOT EDIT! package serviceconfig diff --git a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/system_parameter.pb.go b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/system_parameter.pb.go index 9f9366d..b3a5985 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/system_parameter.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/system_parameter.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/system_parameter.proto -// DO NOT EDIT! package serviceconfig diff --git a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/usage.pb.go b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/usage.pb.go index e09a7e7..1e7d710 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/usage.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/serviceconfig/usage.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/usage.proto -// DO NOT EDIT! package serviceconfig @@ -94,6 +93,9 @@ type UsageRule struct { Selector string `protobuf:"bytes,1,opt,name=selector" json:"selector,omitempty"` // True, if the method allows unregistered calls; false otherwise. AllowUnregisteredCalls bool `protobuf:"varint,2,opt,name=allow_unregistered_calls,json=allowUnregisteredCalls" json:"allow_unregistered_calls,omitempty"` + // True, if the method should skip service control. If so, no control plane + // feature (like quota and billing) will be enabled. + SkipServiceControl bool `protobuf:"varint,3,opt,name=skip_service_control,json=skipServiceControl" json:"skip_service_control,omitempty"` } func (m *UsageRule) Reset() { *m = UsageRule{} } @@ -115,6 +117,13 @@ func (m *UsageRule) GetAllowUnregisteredCalls() bool { return false } +func (m *UsageRule) GetSkipServiceControl() bool { + if m != nil { + return m.SkipServiceControl + } + return false +} + func init() { proto.RegisterType((*Usage)(nil), "google.api.Usage") proto.RegisterType((*UsageRule)(nil), "google.api.UsageRule") @@ -123,24 +132,26 @@ func init() { func init() { proto.RegisterFile("google/api/usage.proto", fileDescriptor15) } var fileDescriptor15 = []byte{ - // 303 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x90, 0xcf, 0x4b, 0x3b, 0x31, - 0x10, 0xc5, 0x49, 0xfb, 0x6d, 0xbf, 0x6d, 0x14, 0x0f, 0x01, 0x4b, 0xa8, 0x0a, 0x4b, 0x4f, 0x0b, - 0xc2, 0x2e, 0xe8, 0x45, 0xf0, 0x64, 0x8b, 0x88, 0x17, 0x29, 0x0b, 0xbd, 0x78, 0x59, 0x62, 0x3a, - 0x8d, 0x81, 0x34, 0xb3, 0xe6, 0x87, 0xfe, 0x33, 0x9e, 0xfc, 0x4b, 0xa5, 0x59, 0xad, 0xdb, 0xe3, - 0xcc, 0xfb, 0xbc, 0x79, 0xcc, 0xa3, 0x13, 0x85, 0xa8, 0x0c, 0x94, 0xa2, 0xd1, 0x65, 0xf4, 0x42, - 0x41, 0xd1, 0x38, 0x0c, 0xc8, 0x68, 0xbb, 0x2f, 0x44, 0xa3, 0xa7, 0xe7, 0x1d, 0x46, 0x58, 0x8b, - 0x41, 0x04, 0x8d, 0xd6, 0xb7, 0xe4, 0xec, 0x93, 0xd0, 0xc1, 0x6a, 0xe7, 0x64, 0x33, 0x7a, 0xec, - 0xe0, 0x2d, 0x6a, 0x07, 0x5b, 0xb0, 0xc1, 0x73, 0x92, 0xf5, 0xf3, 0x71, 0x75, 0xb0, 0x63, 0x97, - 0x74, 0xe0, 0xa2, 0x01, 0xcf, 0x87, 0x59, 0x3f, 0x3f, 0xba, 0x3a, 0x2d, 0xfe, 0x72, 0x8a, 0x74, - 0xa5, 0x8a, 0x06, 0xaa, 0x96, 0x61, 0x73, 0x7a, 0xd1, 0x38, 0x5c, 0x47, 0x09, 0xae, 0xb6, 0x18, - 0xf4, 0x46, 0xcb, 0x14, 0x5d, 0xcb, 0x57, 0x61, 0x2d, 0x18, 0xfe, 0x3f, 0x23, 0xf9, 0xb8, 0x3a, - 0xfb, 0x85, 0x9e, 0x3a, 0xcc, 0xa2, 0x45, 0x66, 0x82, 0x8e, 0xf7, 0x77, 0xd9, 0x94, 0x8e, 0x3c, - 0x18, 0x90, 0x01, 0x1d, 0x27, 0xc9, 0xbb, 0x9f, 0xd9, 0x0d, 0xe5, 0xc2, 0x18, 0xfc, 0xa8, 0xa3, - 0x75, 0xa0, 0xb4, 0x0f, 0xe0, 0x60, 0x5d, 0x4b, 0x61, 0x8c, 0xe7, 0xbd, 0x8c, 0xe4, 0xa3, 0x6a, - 0x92, 0xf4, 0x55, 0x47, 0x5e, 0xec, 0xd4, 0xb9, 0xa1, 0x27, 0x12, 0xb7, 0x9d, 0x4f, 0xe6, 0x34, - 0x45, 0x2e, 0x77, 0xfd, 0x2c, 0xc9, 0xf3, 0xfd, 0x8f, 0xa2, 0xd0, 0x08, 0xab, 0x0a, 0x74, 0xaa, - 0x54, 0x60, 0x53, 0x7b, 0x65, 0x2b, 0x89, 0x46, 0xfb, 0x54, 0xaf, 0x07, 0xf7, 0xae, 0x25, 0x48, - 0xb4, 0x1b, 0xad, 0x6e, 0x0f, 0xa6, 0xaf, 0xde, 0xbf, 0x87, 0xbb, 0xe5, 0xe3, 0xcb, 0x30, 0x19, - 0xaf, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x8d, 0xba, 0x6f, 0x72, 0xba, 0x01, 0x00, 0x00, + // 331 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x91, 0xc1, 0x4b, 0xfb, 0x30, + 0x14, 0xc7, 0xe9, 0xf6, 0xdb, 0x7e, 0x5b, 0x14, 0x0f, 0x41, 0x47, 0x99, 0x0a, 0x65, 0xa7, 0x82, + 0xd0, 0x8a, 0x5e, 0x04, 0x4f, 0x6e, 0x88, 0x78, 0x91, 0x51, 0xd9, 0xc5, 0x4b, 0x89, 0xd9, 0x5b, + 0x0c, 0x66, 0x79, 0x35, 0x49, 0xf5, 0x0f, 0xf1, 0xea, 0xc9, 0xbf, 0x54, 0x9a, 0xcc, 0xd9, 0x1d, + 0xdf, 0xfb, 0x7c, 0xbe, 0xef, 0xb5, 0x2f, 0x64, 0x24, 0x10, 0x85, 0x82, 0x9c, 0x55, 0x32, 0xaf, + 0x2d, 0x13, 0x90, 0x55, 0x06, 0x1d, 0x52, 0x12, 0xfa, 0x19, 0xab, 0xe4, 0xf8, 0xa4, 0xe5, 0x30, + 0xad, 0xd1, 0x31, 0x27, 0x51, 0xdb, 0x60, 0x4e, 0xbe, 0x22, 0xd2, 0x5b, 0x34, 0x49, 0x3a, 0x21, + 0xfb, 0x06, 0xde, 0x6a, 0x69, 0x60, 0x0d, 0xda, 0xd9, 0x38, 0x4a, 0xba, 0xe9, 0xb0, 0xd8, 0xe9, + 0xd1, 0x33, 0xd2, 0x33, 0xb5, 0x02, 0x1b, 0xf7, 0x93, 0x6e, 0xba, 0x77, 0x71, 0x94, 0xfd, 0xed, + 0xc9, 0xfc, 0x94, 0xa2, 0x56, 0x50, 0x04, 0x87, 0x4e, 0xc9, 0x69, 0x65, 0x70, 0x59, 0x73, 0x30, + 0xa5, 0x46, 0x27, 0x57, 0x92, 0xfb, 0xd5, 0x25, 0x7f, 0x61, 0x5a, 0x83, 0x8a, 0xff, 0x27, 0x51, + 0x3a, 0x2c, 0x8e, 0x7f, 0xa5, 0x87, 0x96, 0x33, 0x0b, 0xca, 0xe4, 0x33, 0x22, 0xc3, 0xed, 0x60, + 0x3a, 0x26, 0x03, 0x0b, 0x0a, 0xb8, 0x43, 0x13, 0x47, 0x3e, 0xbc, 0xad, 0xe9, 0x15, 0x89, 0x99, + 0x52, 0xf8, 0x51, 0xd6, 0xda, 0x80, 0x90, 0xd6, 0x81, 0x81, 0x65, 0xc9, 0x99, 0x52, 0x36, 0xee, + 0x24, 0x51, 0x3a, 0x28, 0x46, 0x9e, 0x2f, 0x5a, 0x78, 0xd6, 0x50, 0x7a, 0x4e, 0x0e, 0xed, 0xab, + 0xac, 0x4a, 0x0b, 0xe6, 0x5d, 0x72, 0x28, 0x39, 0x6a, 0x67, 0x50, 0xc5, 0x5d, 0x9f, 0xa2, 0x0d, + 0x7b, 0x0c, 0x68, 0x16, 0xc8, 0x54, 0x91, 0x03, 0x8e, 0xeb, 0xd6, 0xcf, 0x4f, 0x89, 0xff, 0xc8, + 0x79, 0x73, 0xd2, 0x79, 0xf4, 0x74, 0xbb, 0x21, 0x02, 0x15, 0xd3, 0x22, 0x43, 0x23, 0x72, 0x01, + 0xda, 0x1f, 0x3c, 0x0f, 0x88, 0x55, 0xd2, 0xfa, 0x17, 0xd9, 0x2c, 0xe5, 0xa8, 0x57, 0x52, 0x5c, + 0xef, 0x54, 0xdf, 0x9d, 0x7f, 0x77, 0x37, 0xf3, 0xfb, 0xe7, 0xbe, 0x0f, 0x5e, 0xfe, 0x04, 0x00, + 0x00, 0xff, 0xff, 0x9c, 0x4b, 0x8c, 0x57, 0xed, 0x01, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/check_error.pb.go b/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/check_error.pb.go index 3d493e1..cadea87 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/check_error.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/check_error.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/servicecontrol/v1/check_error.proto -// DO NOT EDIT! /* Package servicecontrol is a generated protocol buffer package. @@ -11,6 +10,7 @@ It is generated from these files: google/api/servicecontrol/v1/log_entry.proto google/api/servicecontrol/v1/metric_value.proto google/api/servicecontrol/v1/operation.proto + google/api/servicecontrol/v1/quota_controller.proto google/api/servicecontrol/v1/service_controller.proto It has these top-level messages: @@ -20,6 +20,10 @@ It has these top-level messages: MetricValue MetricValueSet Operation + AllocateQuotaRequest + QuotaOperation + AllocateQuotaResponse + QuotaError CheckRequest CheckResponse ReportRequest diff --git a/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/distribution.pb.go b/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/distribution.pb.go index 90c8682..a419318 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/distribution.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/distribution.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/servicecontrol/v1/distribution.proto -// DO NOT EDIT! package servicecontrol @@ -51,7 +50,7 @@ type Distribution struct { // Defines the buckets in the histogram. `bucket_option` and `bucket_counts` // must be both set, or both unset. // - // Buckets are numbered the the range of [0, N], with a total of N+1 buckets. + // Buckets are numbered in the range of [0, N], with a total of N+1 buckets. // There must be at least two buckets (a single-bucket histogram gives // no information that isn't already provided by `count`). // diff --git a/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/log_entry.pb.go b/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/log_entry.pb.go index 361302d..727a19b 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/log_entry.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/log_entry.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/servicecontrol/v1/log_entry.proto -// DO NOT EDIT! package servicecontrol diff --git a/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/metric_value.pb.go b/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/metric_value.pb.go index 0a2c593..ab7ccb1 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/metric_value.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/metric_value.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/servicecontrol/v1/metric_value.proto -// DO NOT EDIT! package servicecontrol diff --git a/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/operation.pb.go b/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/operation.pb.go index fa5449b..f94c2e7 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/operation.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/operation.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/servicecontrol/v1/operation.proto -// DO NOT EDIT! package servicecontrol diff --git a/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/quota_controller.pb.go b/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/quota_controller.pb.go new file mode 100644 index 0000000..70f9c50 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/quota_controller.pb.go @@ -0,0 +1,489 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/api/servicecontrol/v1/quota_controller.proto + +package servicecontrol + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Supported quota modes. +type QuotaOperation_QuotaMode int32 + +const ( + // Guard against implicit default. Must not be used. + QuotaOperation_UNSPECIFIED QuotaOperation_QuotaMode = 0 + // For AllocateQuota request, allocates quota for the amount specified in + // the service configuration or specified using the quota metrics. If the + // amount is higher than the available quota, allocation error will be + // returned and no quota will be allocated. + QuotaOperation_NORMAL QuotaOperation_QuotaMode = 1 + // The operation allocates quota for the amount specified in the service + // configuration or specified using the quota metrics. If the amount is + // higher than the available quota, request does not fail but all available + // quota will be allocated. + QuotaOperation_BEST_EFFORT QuotaOperation_QuotaMode = 2 + // For AllocateQuota request, only checks if there is enough quota + // available and does not change the available quota. No lock is placed on + // the available quota either. + QuotaOperation_CHECK_ONLY QuotaOperation_QuotaMode = 3 +) + +var QuotaOperation_QuotaMode_name = map[int32]string{ + 0: "UNSPECIFIED", + 1: "NORMAL", + 2: "BEST_EFFORT", + 3: "CHECK_ONLY", +} +var QuotaOperation_QuotaMode_value = map[string]int32{ + "UNSPECIFIED": 0, + "NORMAL": 1, + "BEST_EFFORT": 2, + "CHECK_ONLY": 3, +} + +func (x QuotaOperation_QuotaMode) String() string { + return proto.EnumName(QuotaOperation_QuotaMode_name, int32(x)) +} +func (QuotaOperation_QuotaMode) EnumDescriptor() ([]byte, []int) { return fileDescriptor5, []int{1, 0} } + +// Error codes related to project config validations are deprecated since the +// quota controller methods do not perform these validations. Instead services +// have to call the Check method, without quota_properties field, to perform +// these validations before calling the quota controller methods. These +// methods check only for project deletion to be wipe out compliant. +type QuotaError_Code int32 + +const ( + // This is never used. + QuotaError_UNSPECIFIED QuotaError_Code = 0 + // Quota allocation failed. + // Same as [google.rpc.Code.RESOURCE_EXHAUSTED][]. + QuotaError_RESOURCE_EXHAUSTED QuotaError_Code = 8 + // Consumer cannot access the service because the service requires active + // billing. + QuotaError_BILLING_NOT_ACTIVE QuotaError_Code = 107 + // Consumer's project has been marked as deleted (soft deletion). + QuotaError_PROJECT_DELETED QuotaError_Code = 108 + // Specified API key is invalid. + QuotaError_API_KEY_INVALID QuotaError_Code = 105 + // Specified API Key has expired. + QuotaError_API_KEY_EXPIRED QuotaError_Code = 112 +) + +var QuotaError_Code_name = map[int32]string{ + 0: "UNSPECIFIED", + 8: "RESOURCE_EXHAUSTED", + 107: "BILLING_NOT_ACTIVE", + 108: "PROJECT_DELETED", + 105: "API_KEY_INVALID", + 112: "API_KEY_EXPIRED", +} +var QuotaError_Code_value = map[string]int32{ + "UNSPECIFIED": 0, + "RESOURCE_EXHAUSTED": 8, + "BILLING_NOT_ACTIVE": 107, + "PROJECT_DELETED": 108, + "API_KEY_INVALID": 105, + "API_KEY_EXPIRED": 112, +} + +func (x QuotaError_Code) String() string { + return proto.EnumName(QuotaError_Code_name, int32(x)) +} +func (QuotaError_Code) EnumDescriptor() ([]byte, []int) { return fileDescriptor5, []int{3, 0} } + +// Request message for the AllocateQuota method. +type AllocateQuotaRequest struct { + // Name of the service as specified in the service configuration. For example, + // `"pubsub.googleapis.com"`. + // + // See [google.api.Service][google.api.Service] for the definition of a service name. + ServiceName string `protobuf:"bytes,1,opt,name=service_name,json=serviceName" json:"service_name,omitempty"` + // Operation that describes the quota allocation. + AllocateOperation *QuotaOperation `protobuf:"bytes,2,opt,name=allocate_operation,json=allocateOperation" json:"allocate_operation,omitempty"` + // Specifies which version of service configuration should be used to process + // the request. If unspecified or no matching version can be found, the latest + // one will be used. + ServiceConfigId string `protobuf:"bytes,4,opt,name=service_config_id,json=serviceConfigId" json:"service_config_id,omitempty"` +} + +func (m *AllocateQuotaRequest) Reset() { *m = AllocateQuotaRequest{} } +func (m *AllocateQuotaRequest) String() string { return proto.CompactTextString(m) } +func (*AllocateQuotaRequest) ProtoMessage() {} +func (*AllocateQuotaRequest) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{0} } + +func (m *AllocateQuotaRequest) GetServiceName() string { + if m != nil { + return m.ServiceName + } + return "" +} + +func (m *AllocateQuotaRequest) GetAllocateOperation() *QuotaOperation { + if m != nil { + return m.AllocateOperation + } + return nil +} + +func (m *AllocateQuotaRequest) GetServiceConfigId() string { + if m != nil { + return m.ServiceConfigId + } + return "" +} + +// Represents information regarding a quota operation. +type QuotaOperation struct { + // Identity of the operation. This is expected to be unique within the scope + // of the service that generated the operation, and guarantees idempotency in + // case of retries. + // + // UUID version 4 is recommended, though not required. In scenarios where an + // operation is computed from existing information and an idempotent id is + // desirable for deduplication purpose, UUID version 5 is recommended. See + // RFC 4122 for details. + OperationId string `protobuf:"bytes,1,opt,name=operation_id,json=operationId" json:"operation_id,omitempty"` + // Fully qualified name of the API method for which this quota operation is + // requested. This name is used for matching quota rules or metric rules and + // billing status rules defined in service configuration. This field is not + // required if the quota operation is performed on non-API resources. + // + // Example of an RPC method name: + // google.example.library.v1.LibraryService.CreateShelf + MethodName string `protobuf:"bytes,2,opt,name=method_name,json=methodName" json:"method_name,omitempty"` + // Identity of the consumer for whom this quota operation is being performed. + // + // This can be in one of the following formats: + // project:, + // project_number:, + // api_key:. + ConsumerId string `protobuf:"bytes,3,opt,name=consumer_id,json=consumerId" json:"consumer_id,omitempty"` + // Labels describing the operation. + Labels map[string]string `protobuf:"bytes,4,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Represents information about this operation. Each MetricValueSet + // corresponds to a metric defined in the service configuration. + // The data type used in the MetricValueSet must agree with + // the data type specified in the metric definition. + // + // Within a single operation, it is not allowed to have more than one + // MetricValue instances that have the same metric names and identical + // label value combinations. If a request has such duplicated MetricValue + // instances, the entire request is rejected with + // an invalid argument error. + QuotaMetrics []*MetricValueSet `protobuf:"bytes,5,rep,name=quota_metrics,json=quotaMetrics" json:"quota_metrics,omitempty"` + // Quota mode for this operation. + QuotaMode QuotaOperation_QuotaMode `protobuf:"varint,6,opt,name=quota_mode,json=quotaMode,enum=google.api.servicecontrol.v1.QuotaOperation_QuotaMode" json:"quota_mode,omitempty"` +} + +func (m *QuotaOperation) Reset() { *m = QuotaOperation{} } +func (m *QuotaOperation) String() string { return proto.CompactTextString(m) } +func (*QuotaOperation) ProtoMessage() {} +func (*QuotaOperation) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{1} } + +func (m *QuotaOperation) GetOperationId() string { + if m != nil { + return m.OperationId + } + return "" +} + +func (m *QuotaOperation) GetMethodName() string { + if m != nil { + return m.MethodName + } + return "" +} + +func (m *QuotaOperation) GetConsumerId() string { + if m != nil { + return m.ConsumerId + } + return "" +} + +func (m *QuotaOperation) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +func (m *QuotaOperation) GetQuotaMetrics() []*MetricValueSet { + if m != nil { + return m.QuotaMetrics + } + return nil +} + +func (m *QuotaOperation) GetQuotaMode() QuotaOperation_QuotaMode { + if m != nil { + return m.QuotaMode + } + return QuotaOperation_UNSPECIFIED +} + +// Response message for the AllocateQuota method. +type AllocateQuotaResponse struct { + // The same operation_id value used in the AllocateQuotaRequest. Used for + // logging and diagnostics purposes. + OperationId string `protobuf:"bytes,1,opt,name=operation_id,json=operationId" json:"operation_id,omitempty"` + // Indicates the decision of the allocate. + AllocateErrors []*QuotaError `protobuf:"bytes,2,rep,name=allocate_errors,json=allocateErrors" json:"allocate_errors,omitempty"` + // Quota metrics to indicate the result of allocation. Depending on the + // request, one or more of the following metrics will be included: + // + // 1. Per quota group or per quota metric incremental usage will be specified + // using the following delta metric : + // "serviceruntime.googleapis.com/api/consumer/quota_used_count" + // + // 2. The quota limit reached condition will be specified using the following + // boolean metric : + // "serviceruntime.googleapis.com/quota/exceeded" + QuotaMetrics []*MetricValueSet `protobuf:"bytes,3,rep,name=quota_metrics,json=quotaMetrics" json:"quota_metrics,omitempty"` + // ID of the actual config used to process the request. + ServiceConfigId string `protobuf:"bytes,4,opt,name=service_config_id,json=serviceConfigId" json:"service_config_id,omitempty"` +} + +func (m *AllocateQuotaResponse) Reset() { *m = AllocateQuotaResponse{} } +func (m *AllocateQuotaResponse) String() string { return proto.CompactTextString(m) } +func (*AllocateQuotaResponse) ProtoMessage() {} +func (*AllocateQuotaResponse) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{2} } + +func (m *AllocateQuotaResponse) GetOperationId() string { + if m != nil { + return m.OperationId + } + return "" +} + +func (m *AllocateQuotaResponse) GetAllocateErrors() []*QuotaError { + if m != nil { + return m.AllocateErrors + } + return nil +} + +func (m *AllocateQuotaResponse) GetQuotaMetrics() []*MetricValueSet { + if m != nil { + return m.QuotaMetrics + } + return nil +} + +func (m *AllocateQuotaResponse) GetServiceConfigId() string { + if m != nil { + return m.ServiceConfigId + } + return "" +} + +// Represents error information for [QuotaOperation][google.api.servicecontrol.v1.QuotaOperation]. +type QuotaError struct { + // Error code. + Code QuotaError_Code `protobuf:"varint,1,opt,name=code,enum=google.api.servicecontrol.v1.QuotaError_Code" json:"code,omitempty"` + // Subject to whom this error applies. See the specific enum for more details + // on this field. For example, "clientip:" or + // "project:". + Subject string `protobuf:"bytes,2,opt,name=subject" json:"subject,omitempty"` + // Free-form text that provides details on the cause of the error. + Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` +} + +func (m *QuotaError) Reset() { *m = QuotaError{} } +func (m *QuotaError) String() string { return proto.CompactTextString(m) } +func (*QuotaError) ProtoMessage() {} +func (*QuotaError) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{3} } + +func (m *QuotaError) GetCode() QuotaError_Code { + if m != nil { + return m.Code + } + return QuotaError_UNSPECIFIED +} + +func (m *QuotaError) GetSubject() string { + if m != nil { + return m.Subject + } + return "" +} + +func (m *QuotaError) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func init() { + proto.RegisterType((*AllocateQuotaRequest)(nil), "google.api.servicecontrol.v1.AllocateQuotaRequest") + proto.RegisterType((*QuotaOperation)(nil), "google.api.servicecontrol.v1.QuotaOperation") + proto.RegisterType((*AllocateQuotaResponse)(nil), "google.api.servicecontrol.v1.AllocateQuotaResponse") + proto.RegisterType((*QuotaError)(nil), "google.api.servicecontrol.v1.QuotaError") + proto.RegisterEnum("google.api.servicecontrol.v1.QuotaOperation_QuotaMode", QuotaOperation_QuotaMode_name, QuotaOperation_QuotaMode_value) + proto.RegisterEnum("google.api.servicecontrol.v1.QuotaError_Code", QuotaError_Code_name, QuotaError_Code_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for QuotaController service + +type QuotaControllerClient interface { + // Attempts to allocate quota for the specified consumer. It should be called + // before the operation is executed. + // + // This method requires the `servicemanagement.services.quota` + // permission on the specified service. For more information, see + // [Cloud IAM](https://cloud.google.com/iam). + // + // **NOTE:** The client **must** fail-open on server errors `INTERNAL`, + // `UNKNOWN`, `DEADLINE_EXCEEDED`, and `UNAVAILABLE`. To ensure system + // reliability, the server may inject these errors to prohibit any hard + // dependency on the quota functionality. + AllocateQuota(ctx context.Context, in *AllocateQuotaRequest, opts ...grpc.CallOption) (*AllocateQuotaResponse, error) +} + +type quotaControllerClient struct { + cc *grpc.ClientConn +} + +func NewQuotaControllerClient(cc *grpc.ClientConn) QuotaControllerClient { + return "aControllerClient{cc} +} + +func (c *quotaControllerClient) AllocateQuota(ctx context.Context, in *AllocateQuotaRequest, opts ...grpc.CallOption) (*AllocateQuotaResponse, error) { + out := new(AllocateQuotaResponse) + err := grpc.Invoke(ctx, "/google.api.servicecontrol.v1.QuotaController/AllocateQuota", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for QuotaController service + +type QuotaControllerServer interface { + // Attempts to allocate quota for the specified consumer. It should be called + // before the operation is executed. + // + // This method requires the `servicemanagement.services.quota` + // permission on the specified service. For more information, see + // [Cloud IAM](https://cloud.google.com/iam). + // + // **NOTE:** The client **must** fail-open on server errors `INTERNAL`, + // `UNKNOWN`, `DEADLINE_EXCEEDED`, and `UNAVAILABLE`. To ensure system + // reliability, the server may inject these errors to prohibit any hard + // dependency on the quota functionality. + AllocateQuota(context.Context, *AllocateQuotaRequest) (*AllocateQuotaResponse, error) +} + +func RegisterQuotaControllerServer(s *grpc.Server, srv QuotaControllerServer) { + s.RegisterService(&_QuotaController_serviceDesc, srv) +} + +func _QuotaController_AllocateQuota_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AllocateQuotaRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QuotaControllerServer).AllocateQuota(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.api.servicecontrol.v1.QuotaController/AllocateQuota", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QuotaControllerServer).AllocateQuota(ctx, req.(*AllocateQuotaRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _QuotaController_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.api.servicecontrol.v1.QuotaController", + HandlerType: (*QuotaControllerServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "AllocateQuota", + Handler: _QuotaController_AllocateQuota_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/api/servicecontrol/v1/quota_controller.proto", +} + +func init() { + proto.RegisterFile("google/api/servicecontrol/v1/quota_controller.proto", fileDescriptor5) +} + +var fileDescriptor5 = []byte{ + // 775 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0xc1, 0x6e, 0xea, 0x46, + 0x14, 0xed, 0x18, 0x42, 0x9b, 0xeb, 0x04, 0x9c, 0x69, 0x5a, 0x59, 0x28, 0x52, 0x28, 0x2b, 0x1a, + 0xb5, 0x46, 0x21, 0x55, 0x95, 0xa6, 0x2b, 0x30, 0x93, 0xc6, 0x09, 0x01, 0x62, 0x20, 0x4a, 0xda, + 0x85, 0xe5, 0xd8, 0x53, 0xea, 0xc6, 0x78, 0x1c, 0xdb, 0x20, 0x45, 0x55, 0x37, 0x5d, 0x54, 0xaa, + 0xd4, 0x5d, 0xfb, 0x1d, 0xfd, 0x88, 0xfc, 0x42, 0x7f, 0xe1, 0xfd, 0xc3, 0x7b, 0xcb, 0x27, 0x8f, + 0x0d, 0x0f, 0x22, 0xc4, 0x0b, 0x7a, 0x3b, 0xcf, 0xf1, 0x9c, 0x33, 0xf7, 0xde, 0x73, 0xe7, 0x0e, + 0x1c, 0x0d, 0x19, 0x1b, 0xba, 0xb4, 0x6a, 0xfa, 0x4e, 0x35, 0xa4, 0xc1, 0xc4, 0xb1, 0xa8, 0xc5, + 0xbc, 0x28, 0x60, 0x6e, 0x75, 0x72, 0x58, 0x7d, 0x18, 0xb3, 0xc8, 0x34, 0x52, 0xc0, 0xa5, 0x81, + 0xe2, 0x07, 0x2c, 0x62, 0x78, 0x2f, 0x21, 0x29, 0xa6, 0xef, 0x28, 0x8b, 0x24, 0x65, 0x72, 0x58, + 0xdc, 0x9b, 0x93, 0x34, 0x3d, 0x8f, 0x45, 0x66, 0xe4, 0x30, 0x2f, 0x4c, 0xb8, 0xc5, 0xea, 0xca, + 0x03, 0x47, 0x34, 0x0a, 0x1c, 0xcb, 0x98, 0x98, 0xee, 0x98, 0x26, 0x84, 0xf2, 0x13, 0x82, 0xdd, + 0xba, 0xeb, 0x32, 0xcb, 0x8c, 0xe8, 0x55, 0x1c, 0x8f, 0x4e, 0x1f, 0xc6, 0x34, 0x8c, 0xf0, 0x17, + 0xb0, 0x95, 0x0a, 0x18, 0x9e, 0x39, 0xa2, 0x32, 0x2a, 0xa1, 0xca, 0xa6, 0x2e, 0xa6, 0x58, 0xdb, + 0x1c, 0x51, 0xfc, 0x13, 0x60, 0x33, 0xa5, 0x1a, 0xcc, 0xa7, 0x01, 0x8f, 0x44, 0x16, 0x4a, 0xa8, + 0x22, 0xd6, 0xbe, 0x52, 0x56, 0x65, 0xa1, 0xf0, 0xa3, 0x3a, 0x53, 0x8e, 0xbe, 0x33, 0xd5, 0x99, + 0x41, 0xf8, 0x00, 0x76, 0xa6, 0xe7, 0x5b, 0xcc, 0xfb, 0xd9, 0x19, 0x1a, 0x8e, 0x2d, 0x67, 0x79, + 0x10, 0x85, 0xf4, 0x87, 0xca, 0x71, 0xcd, 0x2e, 0xbf, 0xce, 0x40, 0x7e, 0x51, 0x31, 0x0e, 0x7f, + 0x16, 0x52, 0xcc, 0x4c, 0xc3, 0x9f, 0x61, 0x9a, 0x8d, 0xf7, 0x41, 0x1c, 0xd1, 0xe8, 0x17, 0x66, + 0x27, 0x09, 0x0a, 0x7c, 0x07, 0x24, 0x10, 0xcf, 0x6f, 0x1f, 0x44, 0x8b, 0x79, 0xe1, 0x78, 0x44, + 0x83, 0x58, 0x22, 0x93, 0x6c, 0x98, 0x42, 0x9a, 0x8d, 0xbb, 0x90, 0x73, 0xcd, 0x3b, 0xea, 0x86, + 0x72, 0xb6, 0x94, 0xa9, 0x88, 0xb5, 0xe3, 0x75, 0x92, 0x56, 0x5a, 0x9c, 0x4a, 0xbc, 0x28, 0x78, + 0xd4, 0x53, 0x1d, 0x7c, 0x05, 0xdb, 0x49, 0x57, 0x24, 0x56, 0x85, 0xf2, 0x06, 0x17, 0x7e, 0x4f, + 0x35, 0x2f, 0xf9, 0xe6, 0xeb, 0xd8, 0xd6, 0x1e, 0x8d, 0xf4, 0x2d, 0x2e, 0x91, 0x80, 0x21, 0x1e, + 0x00, 0xa4, 0x92, 0xcc, 0xa6, 0x72, 0xae, 0x84, 0x2a, 0xf9, 0xda, 0xb7, 0x6b, 0x05, 0xca, 0x97, + 0x97, 0xcc, 0xa6, 0xfa, 0xe6, 0xc3, 0xf4, 0xb3, 0xf8, 0x1d, 0x88, 0x73, 0x09, 0x60, 0x09, 0x32, + 0xf7, 0xf4, 0x31, 0x2d, 0x73, 0xfc, 0x89, 0x77, 0x61, 0x83, 0x37, 0x5a, 0x5a, 0xd8, 0x64, 0x71, + 0x22, 0x1c, 0xa3, 0xb2, 0x06, 0x9b, 0x33, 0x49, 0x5c, 0x00, 0x71, 0xd0, 0xee, 0x75, 0x89, 0xaa, + 0x9d, 0x6a, 0xa4, 0x29, 0x7d, 0x84, 0x01, 0x72, 0xed, 0x8e, 0x7e, 0x59, 0x6f, 0x49, 0x28, 0xfe, + 0xd9, 0x20, 0xbd, 0xbe, 0x41, 0x4e, 0x4f, 0x3b, 0x7a, 0x5f, 0x12, 0x70, 0x1e, 0x40, 0x3d, 0x23, + 0xea, 0x85, 0xd1, 0x69, 0xb7, 0x6e, 0xa5, 0x4c, 0xf9, 0x6f, 0x01, 0x3e, 0x7b, 0xd6, 0xbe, 0xa1, + 0xcf, 0xbc, 0x90, 0xbe, 0xa4, 0x01, 0xae, 0xa0, 0x30, 0xeb, 0x5f, 0x1a, 0x04, 0x2c, 0x08, 0x65, + 0x81, 0x97, 0xbb, 0xf2, 0x82, 0xf2, 0x90, 0x98, 0xa0, 0xe7, 0xa7, 0x02, 0x7c, 0xb9, 0xc4, 0xbf, + 0xcc, 0x07, 0xfb, 0xb7, 0xce, 0x45, 0xf8, 0x57, 0x00, 0x78, 0x17, 0x1d, 0xae, 0x43, 0xd6, 0x8a, + 0x4d, 0x47, 0xdc, 0xf4, 0xaf, 0x5f, 0x9a, 0x95, 0xa2, 0xc6, 0x5e, 0x73, 0x2a, 0x96, 0xe1, 0xe3, + 0x70, 0x7c, 0xf7, 0x2b, 0xb5, 0xa2, 0xd4, 0xc7, 0xe9, 0x12, 0x97, 0x40, 0xb4, 0x69, 0x68, 0x05, + 0x8e, 0xcf, 0xaf, 0x7d, 0x72, 0x3b, 0xe6, 0xa1, 0xf2, 0x9f, 0x08, 0xb2, 0xea, 0x52, 0x8f, 0x3f, + 0x07, 0xac, 0x93, 0x5e, 0x67, 0xa0, 0xab, 0xc4, 0x20, 0x37, 0x67, 0xf5, 0x41, 0xaf, 0x4f, 0x9a, + 0xd2, 0x27, 0x31, 0xde, 0xd0, 0x5a, 0x2d, 0xad, 0xfd, 0x83, 0xd1, 0xee, 0xf4, 0x8d, 0xba, 0xda, + 0xd7, 0xae, 0x89, 0x74, 0x8f, 0x3f, 0x85, 0x42, 0x57, 0xef, 0x9c, 0x13, 0xb5, 0x6f, 0x34, 0x49, + 0x8b, 0xc4, 0x9b, 0xdd, 0x18, 0xac, 0x77, 0x35, 0xe3, 0x82, 0xdc, 0x1a, 0x5a, 0xfb, 0xba, 0xde, + 0xd2, 0x9a, 0x92, 0x33, 0x0f, 0x92, 0x9b, 0xae, 0xa6, 0x93, 0xa6, 0xe4, 0xd7, 0x9e, 0x10, 0x14, + 0x78, 0x7a, 0xea, 0x6c, 0xd6, 0xe2, 0xff, 0x10, 0x6c, 0x2f, 0x74, 0x0e, 0xae, 0xad, 0xae, 0xcf, + 0xb2, 0x29, 0x59, 0x3c, 0x5a, 0x8b, 0x93, 0xb4, 0x66, 0xf9, 0x9b, 0x3f, 0xfe, 0x7f, 0xf5, 0x8f, + 0xa0, 0x94, 0xbf, 0x8c, 0x67, 0x72, 0x4a, 0x0a, 0xab, 0xbf, 0xcd, 0x8f, 0xdb, 0xdf, 0x4f, 0xcc, + 0x79, 0xea, 0x09, 0x3a, 0x68, 0xfc, 0x85, 0xa0, 0x64, 0xb1, 0xd1, 0xca, 0x03, 0x1b, 0xbb, 0xcf, + 0xd2, 0xec, 0xc6, 0x43, 0xbe, 0x8b, 0x7e, 0x3c, 0x4f, 0x59, 0x43, 0xe6, 0x9a, 0xde, 0x50, 0x61, + 0xc1, 0xb0, 0x3a, 0xa4, 0x1e, 0x7f, 0x02, 0xd2, 0x27, 0xc3, 0xf4, 0x9d, 0x70, 0xf9, 0xb3, 0xf1, + 0xfd, 0x22, 0xf2, 0x06, 0xa1, 0xbb, 0x1c, 0x67, 0x1e, 0xbd, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xbb, + 0x98, 0x03, 0x4f, 0xe0, 0x06, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/service_controller.pb.go b/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/service_controller.pb.go index 2f34a99..e3ecc9c 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/service_controller.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1/service_controller.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/servicecontrol/v1/service_controller.proto -// DO NOT EDIT! package servicecontrol @@ -25,7 +24,9 @@ type CheckRequest struct { // The service name as specified in its service configuration. For example, // `"pubsub.googleapis.com"`. // - // See [google.api.Service][google.api.Service] for the definition of a service name. + // See + // [google.api.Service](https://cloud.google.com/service-management/reference/rpc/google.api#google.api.Service) + // for the definition of a service name. ServiceName string `protobuf:"bytes,1,opt,name=service_name,json=serviceName" json:"service_name,omitempty"` // The operation to be checked. Operation *Operation `protobuf:"bytes,2,opt,name=operation" json:"operation,omitempty"` @@ -40,7 +41,7 @@ type CheckRequest struct { func (m *CheckRequest) Reset() { *m = CheckRequest{} } func (m *CheckRequest) String() string { return proto.CompactTextString(m) } func (*CheckRequest) ProtoMessage() {} -func (*CheckRequest) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{0} } +func (*CheckRequest) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{0} } func (m *CheckRequest) GetServiceName() string { if m != nil { @@ -65,7 +66,7 @@ func (m *CheckRequest) GetServiceConfigId() string { // Response message for the Check method. type CheckResponse struct { - // The same operation_id value used in the CheckRequest. + // The same operation_id value used in the [CheckRequest][google.api.servicecontrol.v1.CheckRequest]. // Used for logging and diagnostics purposes. OperationId string `protobuf:"bytes,1,opt,name=operation_id,json=operationId" json:"operation_id,omitempty"` // Indicate the decision of the check. @@ -76,12 +77,14 @@ type CheckResponse struct { CheckErrors []*CheckError `protobuf:"bytes,2,rep,name=check_errors,json=checkErrors" json:"check_errors,omitempty"` // The actual config id used to process the request. ServiceConfigId string `protobuf:"bytes,5,opt,name=service_config_id,json=serviceConfigId" json:"service_config_id,omitempty"` + // Feedback data returned from the server during processing a Check request. + CheckInfo *CheckResponse_CheckInfo `protobuf:"bytes,6,opt,name=check_info,json=checkInfo" json:"check_info,omitempty"` } func (m *CheckResponse) Reset() { *m = CheckResponse{} } func (m *CheckResponse) String() string { return proto.CompactTextString(m) } func (*CheckResponse) ProtoMessage() {} -func (*CheckResponse) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{1} } +func (*CheckResponse) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{1} } func (m *CheckResponse) GetOperationId() string { if m != nil { @@ -104,12 +107,57 @@ func (m *CheckResponse) GetServiceConfigId() string { return "" } +func (m *CheckResponse) GetCheckInfo() *CheckResponse_CheckInfo { + if m != nil { + return m.CheckInfo + } + return nil +} + +type CheckResponse_CheckInfo struct { + // Consumer info of this check. + ConsumerInfo *CheckResponse_ConsumerInfo `protobuf:"bytes,2,opt,name=consumer_info,json=consumerInfo" json:"consumer_info,omitempty"` +} + +func (m *CheckResponse_CheckInfo) Reset() { *m = CheckResponse_CheckInfo{} } +func (m *CheckResponse_CheckInfo) String() string { return proto.CompactTextString(m) } +func (*CheckResponse_CheckInfo) ProtoMessage() {} +func (*CheckResponse_CheckInfo) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{1, 0} } + +func (m *CheckResponse_CheckInfo) GetConsumerInfo() *CheckResponse_ConsumerInfo { + if m != nil { + return m.ConsumerInfo + } + return nil +} + +// `ConsumerInfo` provides information about the consumer project. +type CheckResponse_ConsumerInfo struct { + // The Google cloud project number, e.g. 1234567890. A value of 0 indicates + // no project number is found. + ProjectNumber int64 `protobuf:"varint,1,opt,name=project_number,json=projectNumber" json:"project_number,omitempty"` +} + +func (m *CheckResponse_ConsumerInfo) Reset() { *m = CheckResponse_ConsumerInfo{} } +func (m *CheckResponse_ConsumerInfo) String() string { return proto.CompactTextString(m) } +func (*CheckResponse_ConsumerInfo) ProtoMessage() {} +func (*CheckResponse_ConsumerInfo) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{1, 1} } + +func (m *CheckResponse_ConsumerInfo) GetProjectNumber() int64 { + if m != nil { + return m.ProjectNumber + } + return 0 +} + // Request message for the Report method. type ReportRequest struct { // The service name as specified in its service configuration. For example, // `"pubsub.googleapis.com"`. // - // See [google.api.Service][google.api.Service] for the definition of a service name. + // See + // [google.api.Service](https://cloud.google.com/service-management/reference/rpc/google.api#google.api.Service) + // for the definition of a service name. ServiceName string `protobuf:"bytes,1,opt,name=service_name,json=serviceName" json:"service_name,omitempty"` // Operations to be reported. // @@ -133,7 +181,7 @@ type ReportRequest struct { func (m *ReportRequest) Reset() { *m = ReportRequest{} } func (m *ReportRequest) String() string { return proto.CompactTextString(m) } func (*ReportRequest) ProtoMessage() {} -func (*ReportRequest) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{2} } +func (*ReportRequest) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{2} } func (m *ReportRequest) GetServiceName() string { if m != nil { @@ -169,8 +217,9 @@ type ReportResponse struct { // `Operations` in the request succeeded. Each // `Operation` that failed processing has a corresponding item // in this list. - // 3. A failed RPC status indicates a complete failure where none of the - // `Operations` in the request succeeded. + // 3. A failed RPC status indicates a general non-deterministic failure. + // When this happens, it's impossible to know which of the + // 'Operations' in the request succeeded or failed. ReportErrors []*ReportResponse_ReportError `protobuf:"bytes,1,rep,name=report_errors,json=reportErrors" json:"report_errors,omitempty"` // The actual config id used to process the request. ServiceConfigId string `protobuf:"bytes,2,opt,name=service_config_id,json=serviceConfigId" json:"service_config_id,omitempty"` @@ -179,7 +228,7 @@ type ReportResponse struct { func (m *ReportResponse) Reset() { *m = ReportResponse{} } func (m *ReportResponse) String() string { return proto.CompactTextString(m) } func (*ReportResponse) ProtoMessage() {} -func (*ReportResponse) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{3} } +func (*ReportResponse) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{3} } func (m *ReportResponse) GetReportErrors() []*ReportResponse_ReportError { if m != nil { @@ -195,18 +244,18 @@ func (m *ReportResponse) GetServiceConfigId() string { return "" } -// Represents the processing error of one `Operation` in the request. +// Represents the processing error of one [Operation][google.api.servicecontrol.v1.Operation] in the request. type ReportResponse_ReportError struct { // The [Operation.operation_id][google.api.servicecontrol.v1.Operation.operation_id] value from the request. OperationId string `protobuf:"bytes,1,opt,name=operation_id,json=operationId" json:"operation_id,omitempty"` - // Details of the error when processing the `Operation`. + // Details of the error when processing the [Operation][google.api.servicecontrol.v1.Operation]. Status *google_rpc.Status `protobuf:"bytes,2,opt,name=status" json:"status,omitempty"` } func (m *ReportResponse_ReportError) Reset() { *m = ReportResponse_ReportError{} } func (m *ReportResponse_ReportError) String() string { return proto.CompactTextString(m) } func (*ReportResponse_ReportError) ProtoMessage() {} -func (*ReportResponse_ReportError) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{3, 0} } +func (*ReportResponse_ReportError) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{3, 0} } func (m *ReportResponse_ReportError) GetOperationId() string { if m != nil { @@ -225,6 +274,8 @@ func (m *ReportResponse_ReportError) GetStatus() *google_rpc.Status { func init() { proto.RegisterType((*CheckRequest)(nil), "google.api.servicecontrol.v1.CheckRequest") proto.RegisterType((*CheckResponse)(nil), "google.api.servicecontrol.v1.CheckResponse") + proto.RegisterType((*CheckResponse_CheckInfo)(nil), "google.api.servicecontrol.v1.CheckResponse.CheckInfo") + proto.RegisterType((*CheckResponse_ConsumerInfo)(nil), "google.api.servicecontrol.v1.CheckResponse.ConsumerInfo") proto.RegisterType((*ReportRequest)(nil), "google.api.servicecontrol.v1.ReportRequest") proto.RegisterType((*ReportResponse)(nil), "google.api.servicecontrol.v1.ReportResponse") proto.RegisterType((*ReportResponse_ReportError)(nil), "google.api.servicecontrol.v1.ReportResponse.ReportError") @@ -246,21 +297,25 @@ type ServiceControllerClient interface { // operation is executed. // // If feasible, the client should cache the check results and reuse them for - // up to 60s. In case of server errors, the client may rely on the cached + // 60 seconds. In case of server errors, the client can rely on the cached // results for longer time. // + // NOTE: the [CheckRequest][google.api.servicecontrol.v1.CheckRequest] has the size limit of 64KB. + // // This method requires the `servicemanagement.services.check` permission // on the specified service. For more information, see // [Google Cloud IAM](https://cloud.google.com/iam). Check(ctx context.Context, in *CheckRequest, opts ...grpc.CallOption) (*CheckResponse, error) - // Reports operations to Google Service Control. It should be called - // after the operation is completed. + // Reports operation results to Google Service Control, such as logs and + // metrics. It should be called after an operation is completed. + // + // If feasible, the client should aggregate reporting data for up to 5 + // seconds to reduce API traffic. Limiting aggregation to 5 seconds is to + // reduce data loss during client crashes. Clients should carefully choose + // the aggregation time window to avoid data loss risk more than 0.01% + // for business and compliance reasons. // - // If feasible, the client should aggregate reporting data for up to 5s to - // reduce API traffic. Limiting aggregation to 5s is to reduce data loss - // during client crashes. Clients should carefully choose the aggregation - // window to avoid data loss risk more than 0.01% for business and - // compliance reasons. + // NOTE: the [ReportRequest][google.api.servicecontrol.v1.ReportRequest] has the size limit of 1MB. // // This method requires the `servicemanagement.services.report` permission // on the specified service. For more information, see @@ -302,21 +357,25 @@ type ServiceControllerServer interface { // operation is executed. // // If feasible, the client should cache the check results and reuse them for - // up to 60s. In case of server errors, the client may rely on the cached + // 60 seconds. In case of server errors, the client can rely on the cached // results for longer time. // + // NOTE: the [CheckRequest][google.api.servicecontrol.v1.CheckRequest] has the size limit of 64KB. + // // This method requires the `servicemanagement.services.check` permission // on the specified service. For more information, see // [Google Cloud IAM](https://cloud.google.com/iam). Check(context.Context, *CheckRequest) (*CheckResponse, error) - // Reports operations to Google Service Control. It should be called - // after the operation is completed. + // Reports operation results to Google Service Control, such as logs and + // metrics. It should be called after an operation is completed. // - // If feasible, the client should aggregate reporting data for up to 5s to - // reduce API traffic. Limiting aggregation to 5s is to reduce data loss - // during client crashes. Clients should carefully choose the aggregation - // window to avoid data loss risk more than 0.01% for business and - // compliance reasons. + // If feasible, the client should aggregate reporting data for up to 5 + // seconds to reduce API traffic. Limiting aggregation to 5 seconds is to + // reduce data loss during client crashes. Clients should carefully choose + // the aggregation time window to avoid data loss risk more than 0.01% + // for business and compliance reasons. + // + // NOTE: the [ReportRequest][google.api.servicecontrol.v1.ReportRequest] has the size limit of 1MB. // // This method requires the `servicemanagement.services.report` permission // on the specified service. For more information, see @@ -382,43 +441,48 @@ var _ServiceController_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("google/api/servicecontrol/v1/service_controller.proto", fileDescriptor5) -} - -var fileDescriptor5 = []byte{ - // 537 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x94, 0xcf, 0x6e, 0xd3, 0x40, - 0x10, 0xc6, 0xb5, 0xee, 0x1f, 0xa9, 0xe3, 0x04, 0xd4, 0x3d, 0x40, 0x64, 0xf5, 0x90, 0xfa, 0x40, - 0x23, 0x37, 0xd8, 0x6a, 0x10, 0x12, 0x0a, 0x27, 0x1a, 0x55, 0x55, 0x41, 0x82, 0xca, 0xb9, 0x21, - 0x50, 0xb4, 0x38, 0x8b, 0xb1, 0x48, 0xbc, 0xcb, 0xae, 0x9b, 0x0b, 0xe2, 0xc2, 0x03, 0x70, 0x28, - 0x6f, 0x80, 0x90, 0x38, 0xf0, 0x04, 0x3c, 0x07, 0xaf, 0xc0, 0x43, 0xc0, 0x0d, 0x79, 0x77, 0xed, - 0x3a, 0xc2, 0x58, 0xee, 0x2d, 0x9e, 0x9d, 0xf9, 0xe6, 0xb7, 0xdf, 0x4c, 0x16, 0xee, 0xc7, 0x8c, - 0xc5, 0x0b, 0x1a, 0x10, 0x9e, 0x04, 0x92, 0x8a, 0x55, 0x12, 0xd1, 0x88, 0xa5, 0x99, 0x60, 0x8b, - 0x60, 0x75, 0x54, 0x44, 0x66, 0x26, 0xb4, 0xa0, 0xc2, 0xe7, 0x82, 0x65, 0x0c, 0xef, 0xe9, 0x32, - 0x9f, 0xf0, 0xc4, 0x5f, 0x2f, 0xf3, 0x57, 0x47, 0xce, 0x5e, 0x45, 0x94, 0xa4, 0x29, 0xcb, 0x48, - 0x96, 0xb0, 0x54, 0xea, 0x5a, 0xc7, 0x6f, 0x6c, 0x19, 0xbd, 0xa1, 0xd1, 0xdb, 0x19, 0x15, 0x82, - 0x99, 0x5e, 0xce, 0xb0, 0x31, 0x9f, 0x71, 0x2a, 0x94, 0xbc, 0xc9, 0xbe, 0x6d, 0xb2, 0x05, 0x8f, - 0x02, 0x99, 0x91, 0xec, 0xc2, 0xb4, 0x75, 0xbf, 0x22, 0xe8, 0x4c, 0x72, 0xf1, 0x90, 0xbe, 0xbb, - 0xa0, 0x32, 0xc3, 0xfb, 0xd0, 0x29, 0xee, 0x97, 0x92, 0x25, 0xed, 0xa1, 0x3e, 0x1a, 0xec, 0x84, - 0xb6, 0x89, 0x3d, 0x25, 0x4b, 0x8a, 0x4f, 0x60, 0xa7, 0xd4, 0xef, 0x59, 0x7d, 0x34, 0xb0, 0x47, - 0x07, 0x7e, 0xd3, 0xd5, 0xfd, 0x67, 0x45, 0x7a, 0x78, 0x55, 0x89, 0x3d, 0xd8, 0xad, 0x38, 0xf9, - 0x3a, 0x89, 0x67, 0xc9, 0xbc, 0xb7, 0xa9, 0xda, 0xdd, 0x34, 0x07, 0x13, 0x15, 0x3f, 0x9b, 0xbb, - 0xdf, 0x11, 0x74, 0x0d, 0xa6, 0xe4, 0x2c, 0x95, 0x34, 0xe7, 0x2c, 0xa5, 0xf2, 0x42, 0xc3, 0x59, - 0xc6, 0xce, 0xe6, 0xf8, 0x09, 0x74, 0x2a, 0xbe, 0xc9, 0x9e, 0xd5, 0xdf, 0x18, 0xd8, 0xa3, 0x41, - 0x33, 0xaa, 0xea, 0x72, 0x92, 0x17, 0x84, 0x76, 0x54, 0xfe, 0x96, 0xf5, 0xb4, 0x5b, 0xf5, 0xb4, - 0xdf, 0x10, 0x74, 0x43, 0xca, 0x99, 0xc8, 0xae, 0xe1, 0xea, 0x29, 0x40, 0x09, 0x5f, 0xb0, 0xb6, - 0xb6, 0xb5, 0x52, 0x5a, 0x4f, 0xba, 0x51, 0x4f, 0xfa, 0x07, 0xc1, 0x8d, 0x82, 0xd4, 0x18, 0xfb, - 0x12, 0xba, 0x42, 0x45, 0x0a, 0xdb, 0x90, 0x42, 0x79, 0xd0, 0x8c, 0xb2, 0x2e, 0x62, 0x3e, 0xb5, - 0x8d, 0x1d, 0x71, 0xf5, 0xf1, 0x1f, 0x3a, 0xab, 0x96, 0xce, 0x79, 0x01, 0x76, 0x45, 0xa8, 0xcd, - 0xc8, 0x3d, 0xd8, 0xd6, 0xeb, 0x6d, 0xf6, 0x12, 0x17, 0xd4, 0x82, 0x47, 0xfe, 0x54, 0x9d, 0x84, - 0x26, 0x63, 0xf4, 0xc3, 0x82, 0xdd, 0x69, 0xd9, 0xd1, 0xfc, 0x93, 0xf1, 0x27, 0x04, 0x5b, 0x6a, - 0x07, 0xb0, 0xd7, 0x62, 0x51, 0xcc, 0x7c, 0x9d, 0xc3, 0x56, 0xb9, 0xda, 0x1c, 0x77, 0xf8, 0xf1, - 0xe7, 0xaf, 0xcf, 0xd6, 0x1d, 0x77, 0xbf, 0xf2, 0x98, 0xc8, 0xe0, 0x7d, 0x75, 0x41, 0x3e, 0x8c, - 0xd5, 0xee, 0x8d, 0x91, 0x87, 0x2f, 0x11, 0x6c, 0x6b, 0x17, 0xf0, 0x61, 0xbb, 0x19, 0x68, 0xa4, - 0xe1, 0x75, 0x06, 0xe6, 0xde, 0x55, 0x4c, 0x07, 0xae, 0xdb, 0xc4, 0xa4, 0x07, 0x39, 0x46, 0xde, - 0xf1, 0x25, 0x82, 0x7e, 0xc4, 0x96, 0x8d, 0x2d, 0x8e, 0x6f, 0xfd, 0xe3, 0xee, 0x79, 0xfe, 0xe6, - 0x9c, 0xa3, 0xe7, 0x8f, 0x4d, 0x5d, 0xcc, 0x16, 0x24, 0x8d, 0x7d, 0x26, 0xe2, 0x20, 0xa6, 0xa9, - 0x7a, 0x91, 0x02, 0x7d, 0x44, 0x78, 0x22, 0xeb, 0xdf, 0xb6, 0x87, 0xeb, 0x91, 0xdf, 0x08, 0x7d, - 0xb1, 0x36, 0x4f, 0x1f, 0x4d, 0x27, 0xaf, 0xb6, 0x95, 0xc0, 0xbd, 0xbf, 0x01, 0x00, 0x00, 0xff, - 0xff, 0x6c, 0x58, 0x92, 0x07, 0xbe, 0x05, 0x00, 0x00, + proto.RegisterFile("google/api/servicecontrol/v1/service_controller.proto", fileDescriptor6) +} + +var fileDescriptor6 = []byte{ + // 619 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0xc1, 0x6e, 0xd3, 0x4c, + 0x10, 0xd6, 0x3a, 0x6d, 0xa4, 0x4c, 0x9c, 0xfe, 0xea, 0x1e, 0x7e, 0x22, 0xab, 0x87, 0xd4, 0x12, + 0x34, 0x4a, 0x8b, 0xad, 0x16, 0x55, 0x42, 0xe1, 0x44, 0xa3, 0xaa, 0x0a, 0x48, 0xa5, 0x72, 0x38, + 0x21, 0xaa, 0xc8, 0xdd, 0x6c, 0x8c, 0x4b, 0xb2, 0x6b, 0xd6, 0x4e, 0x2e, 0x88, 0x0b, 0x0f, 0xc0, + 0xa1, 0xbc, 0x01, 0xaa, 0xc4, 0x33, 0xf0, 0x1c, 0xbc, 0x02, 0x0f, 0x01, 0x37, 0x94, 0xdd, 0xb5, + 0xeb, 0x08, 0x63, 0x92, 0x9b, 0xf7, 0xdb, 0x99, 0xf9, 0xbe, 0x9d, 0xf9, 0x3c, 0x70, 0x1c, 0x70, + 0x1e, 0x4c, 0xa8, 0xeb, 0x47, 0xa1, 0x1b, 0x53, 0x31, 0x0f, 0x09, 0x25, 0x9c, 0x25, 0x82, 0x4f, + 0xdc, 0xf9, 0x61, 0x8a, 0x0c, 0x35, 0x34, 0xa1, 0xc2, 0x89, 0x04, 0x4f, 0x38, 0xde, 0x51, 0x69, + 0x8e, 0x1f, 0x85, 0xce, 0x72, 0x9a, 0x33, 0x3f, 0xb4, 0x76, 0x72, 0x45, 0x7d, 0xc6, 0x78, 0xe2, + 0x27, 0x21, 0x67, 0xb1, 0xca, 0xb5, 0x9c, 0x52, 0x4a, 0xf2, 0x86, 0x92, 0xb7, 0x43, 0x2a, 0x04, + 0xd7, 0x5c, 0xd6, 0x41, 0x69, 0x3c, 0x8f, 0xa8, 0x90, 0xe5, 0x75, 0xf4, 0x3d, 0x1d, 0x2d, 0x22, + 0xe2, 0xc6, 0x89, 0x9f, 0xcc, 0x34, 0xad, 0x7d, 0x8b, 0xc0, 0xec, 0x2d, 0x8a, 0x7b, 0xf4, 0xdd, + 0x8c, 0xc6, 0x09, 0xde, 0x05, 0x33, 0x7d, 0x1f, 0xf3, 0xa7, 0xb4, 0x89, 0x5a, 0xa8, 0x5d, 0xf3, + 0xea, 0x1a, 0x3b, 0xf7, 0xa7, 0x14, 0x9f, 0x42, 0x2d, 0xab, 0xdf, 0x34, 0x5a, 0xa8, 0x5d, 0x3f, + 0xda, 0x73, 0xca, 0x9e, 0xee, 0xbc, 0x48, 0xc3, 0xbd, 0xbb, 0x4c, 0xdc, 0x81, 0xed, 0x5c, 0x27, + 0xc7, 0x61, 0x30, 0x0c, 0x47, 0xcd, 0x0d, 0x49, 0xf7, 0x9f, 0xbe, 0xe8, 0x49, 0xbc, 0x3f, 0xb2, + 0x6f, 0x2b, 0xd0, 0xd0, 0x32, 0xe3, 0x88, 0xb3, 0x98, 0x2e, 0x74, 0x66, 0xa5, 0x16, 0x89, 0x5a, + 0x67, 0x86, 0xf5, 0x47, 0xf8, 0x39, 0x98, 0xb9, 0xbe, 0xc5, 0x4d, 0xa3, 0x55, 0x69, 0xd7, 0x8f, + 0xda, 0xe5, 0x52, 0x25, 0xcb, 0xe9, 0x22, 0xc1, 0xab, 0x93, 0xec, 0x3b, 0x2e, 0x56, 0xbb, 0x59, + 0xa8, 0x16, 0xbf, 0x04, 0x50, 0xc4, 0x21, 0x1b, 0xf3, 0x66, 0x55, 0x76, 0xe8, 0x78, 0x05, 0xda, + 0xf4, 0x71, 0xea, 0xd4, 0x67, 0x63, 0xee, 0xd5, 0x48, 0xfa, 0x69, 0x5d, 0x43, 0x2d, 0xc3, 0xf1, + 0x25, 0x34, 0x08, 0x67, 0xf1, 0x6c, 0x4a, 0x85, 0x62, 0x51, 0x73, 0x78, 0xbc, 0x16, 0x8b, 0x2e, + 0x20, 0x89, 0x4c, 0x92, 0x3b, 0x59, 0xc7, 0x60, 0xe6, 0x6f, 0xf1, 0x7d, 0xd8, 0x8a, 0x04, 0xbf, + 0xa6, 0x24, 0x19, 0xb2, 0xd9, 0xf4, 0x8a, 0x0a, 0xd9, 0xef, 0x8a, 0xd7, 0xd0, 0xe8, 0xb9, 0x04, + 0xed, 0xaf, 0x08, 0x1a, 0x1e, 0x8d, 0xb8, 0x48, 0xd6, 0xb0, 0xd3, 0x19, 0x40, 0x36, 0xb5, 0x74, + 0x48, 0x2b, 0xfb, 0x29, 0x97, 0x5a, 0x3c, 0xa2, 0x4a, 0xb1, 0xa1, 0x7e, 0x21, 0xd8, 0x4a, 0x95, + 0x6a, 0x47, 0x5d, 0x42, 0x43, 0x48, 0x24, 0xf5, 0x0b, 0x92, 0x52, 0xfe, 0xd1, 0xd2, 0xe5, 0x22, + 0xfa, 0xa8, 0xfc, 0x63, 0x8a, 0xbb, 0xc3, 0x5f, 0xd4, 0x19, 0x85, 0xea, 0xac, 0xd7, 0x50, 0xcf, + 0x15, 0x5a, 0xc5, 0xeb, 0x1d, 0xa8, 0xaa, 0xff, 0x5a, 0x1b, 0x01, 0xa7, 0xaa, 0x45, 0x44, 0x9c, + 0x81, 0xbc, 0xf1, 0x74, 0xc4, 0xd1, 0x37, 0x03, 0xb6, 0x07, 0x19, 0xa3, 0x5e, 0x61, 0xf8, 0x13, + 0x82, 0x4d, 0xe9, 0x0f, 0xdc, 0x59, 0xc9, 0x44, 0x72, 0xbe, 0xd6, 0xfe, 0x1a, 0x86, 0xb3, 0x0f, + 0x3e, 0x7e, 0xff, 0xf1, 0xd9, 0x78, 0x60, 0xef, 0xe6, 0xb6, 0x68, 0xec, 0xbe, 0xcf, 0x1b, 0xe4, + 0x43, 0x57, 0x1a, 0xbe, 0x8b, 0x3a, 0xf8, 0x06, 0x41, 0x55, 0x75, 0x01, 0xef, 0xaf, 0x36, 0x03, + 0x25, 0xe9, 0x60, 0x9d, 0x81, 0xd9, 0x0f, 0xa5, 0xa6, 0x3d, 0xdb, 0x2e, 0xd3, 0xa4, 0x06, 0xd9, + 0x45, 0x9d, 0x93, 0x1b, 0x04, 0x2d, 0xc2, 0xa7, 0xa5, 0x14, 0x27, 0xff, 0xff, 0xd1, 0xdd, 0x8b, + 0xc5, 0xb2, 0xbd, 0x40, 0xaf, 0x9e, 0xe9, 0xbc, 0x80, 0x4f, 0x7c, 0x16, 0x38, 0x5c, 0x04, 0x6e, + 0x40, 0x99, 0x5c, 0xc5, 0xae, 0xba, 0xf2, 0xa3, 0x30, 0x2e, 0x5e, 0xea, 0x4f, 0x96, 0x91, 0x9f, + 0x08, 0x7d, 0x31, 0x36, 0xce, 0x9e, 0x0e, 0x7a, 0x57, 0x55, 0x59, 0xe0, 0xd1, 0xef, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x5e, 0x28, 0x7b, 0xe6, 0xb7, 0x06, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/api/servicemanagement/v1/resources.pb.go b/vendor/google.golang.org/genproto/googleapis/api/servicemanagement/v1/resources.pb.go index d5bbcfa..8b30376 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/servicemanagement/v1/resources.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/servicemanagement/v1/resources.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/servicemanagement/v1/resources.proto -// DO NOT EDIT! /* Package servicemanagement is a generated protocol buffer package. @@ -47,6 +46,7 @@ import fmt "fmt" import math "math" import _ "google.golang.org/genproto/googleapis/api/annotations" import google_api2 "google.golang.org/genproto/googleapis/api/configchange" +import _ "google.golang.org/genproto/googleapis/api/metric" import _ "google.golang.org/genproto/googleapis/api/serviceconfig" import _ "google.golang.org/genproto/googleapis/longrunning" import _ "github.com/golang/protobuf/ptypes/any" @@ -66,21 +66,22 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package -// Code describes the status of one operation step. +// Code describes the status of the operation (or one of its steps). type OperationMetadata_Status int32 const ( // Unspecifed code. OperationMetadata_STATUS_UNSPECIFIED OperationMetadata_Status = 0 - // The step has completed without errors. + // The operation or step has completed without errors. OperationMetadata_DONE OperationMetadata_Status = 1 - // The step has not started yet. + // The operation or step has not started yet. OperationMetadata_NOT_STARTED OperationMetadata_Status = 2 - // The step is in progress. + // The operation or step is in progress. OperationMetadata_IN_PROGRESS OperationMetadata_Status = 3 - // The step has completed with errors. + // The operation or step has completed with errors. If the operation is + // rollbackable, the rollback completed with errors too. OperationMetadata_FAILED OperationMetadata_Status = 4 - // The step has completed with cancellation. + // The operation or step has completed with cancellation. OperationMetadata_CANCELLED OperationMetadata_Status = 5 ) @@ -149,6 +150,12 @@ const ( // // $protoc --include_imports --include_source_info test.proto -o out.pb ConfigFile_FILE_DESCRIPTOR_SET_PROTO ConfigFile_FileType = 4 + // Uncompiled Proto file. Used for storage and display purposes only, + // currently server-side compilation is not supported. Should match the + // inputs to 'protoc' command used to generated FILE_DESCRIPTOR_SET_PROTO. A + // file of this type can only be included if at least one file of type + // FILE_DESCRIPTOR_SET_PROTO is included. + ConfigFile_PROTO_FILE ConfigFile_FileType = 6 ) var ConfigFile_FileType_name = map[int32]string{ @@ -157,6 +164,7 @@ var ConfigFile_FileType_name = map[int32]string{ 2: "OPEN_API_JSON", 3: "OPEN_API_YAML", 4: "FILE_DESCRIPTOR_SET_PROTO", + 6: "PROTO_FILE", } var ConfigFile_FileType_value = map[string]int32{ "FILE_TYPE_UNSPECIFIED": 0, @@ -164,6 +172,7 @@ var ConfigFile_FileType_value = map[string]int32{ "OPEN_API_JSON": 2, "OPEN_API_YAML": 3, "FILE_DESCRIPTOR_SET_PROTO": 4, + "PROTO_FILE": 6, } func (x ConfigFile_FileType) String() string { @@ -184,10 +193,13 @@ const ( // The Rollout has been cancelled. This can happen if you have overlapping // Rollout pushes, and the previous ones will be cancelled. Rollout_CANCELLED Rollout_RolloutStatus = 3 - // The Rollout has failed. It is typically caused by configuration errors. + // The Rollout has failed and the rollback attempt has failed too. Rollout_FAILED Rollout_RolloutStatus = 4 // The Rollout has not started yet and is pending for execution. Rollout_PENDING Rollout_RolloutStatus = 5 + // The Rollout has failed and rolled back to the previous successful + // Rollout. + Rollout_FAILED_ROLLED_BACK Rollout_RolloutStatus = 6 ) var Rollout_RolloutStatus_name = map[int32]string{ @@ -197,6 +209,7 @@ var Rollout_RolloutStatus_name = map[int32]string{ 3: "CANCELLED", 4: "FAILED", 5: "PENDING", + 6: "FAILED_ROLLED_BACK", } var Rollout_RolloutStatus_value = map[string]int32{ "ROLLOUT_STATUS_UNSPECIFIED": 0, @@ -205,6 +218,7 @@ var Rollout_RolloutStatus_value = map[string]int32{ "CANCELLED": 3, "FAILED": 4, "PENDING": 5, + "FAILED_ROLLED_BACK": 6, } func (x Rollout_RolloutStatus) String() string { @@ -643,9 +657,10 @@ func _Rollout_OneofSizer(msg proto.Message) (n int) { return n } -// Strategy that specifies how Google Service Control should select -// different -// versions of service configurations based on traffic percentage. +// Strategy that specifies how clients of Google Service Controller want to +// send traffic to use different config versions. This is generally +// used by API proxy to split traffic based on your configured precentage for +// each config version. // // One example of how to gradually rollout a new service configuration using // this @@ -726,78 +741,81 @@ func init() { func init() { proto.RegisterFile("google/api/servicemanagement/v1/resources.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 1166 bytes of a gzipped FileDescriptorProto + // 1201 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0xef, 0x8e, 0xdb, 0x44, - 0x10, 0xaf, 0xf3, 0xe7, 0xee, 0x32, 0xb9, 0x0b, 0xee, 0x96, 0xf6, 0xd2, 0xd0, 0x3f, 0xc1, 0x15, - 0xd2, 0x49, 0x48, 0x0e, 0x0d, 0x08, 0x28, 0x95, 0x5a, 0xe5, 0x12, 0xdf, 0x61, 0xc8, 0xd9, 0xee, - 0xda, 0x07, 0x2a, 0x5f, 0xac, 0xad, 0xbd, 0x71, 0x4d, 0x13, 0xdb, 0xb2, 0x37, 0x27, 0x45, 0xfd, - 0xc8, 0x0b, 0xf0, 0x0c, 0x7c, 0x81, 0x47, 0xe1, 0x03, 0x4f, 0x00, 0x2f, 0x83, 0xbc, 0x5e, 0xdf, - 0xe5, 0xcf, 0xa1, 0x14, 0xf8, 0x92, 0xec, 0xfc, 0x66, 0xf6, 0x37, 0xb3, 0xb3, 0x33, 0xb3, 0x86, - 0x5e, 0x10, 0xc7, 0xc1, 0x94, 0xf6, 0x48, 0x12, 0xf6, 0x32, 0x9a, 0x5e, 0x84, 0x1e, 0x9d, 0x91, - 0x88, 0x04, 0x74, 0x46, 0x23, 0xd6, 0xbb, 0x78, 0xdc, 0x4b, 0x69, 0x16, 0xcf, 0x53, 0x8f, 0x66, - 0x6a, 0x92, 0xc6, 0x2c, 0x46, 0x0f, 0x8b, 0x0d, 0x2a, 0x49, 0x42, 0x75, 0x63, 0x83, 0x7a, 0xf1, - 0xb8, 0x73, 0x6f, 0x89, 0x91, 0x44, 0x51, 0xcc, 0x08, 0x0b, 0xe3, 0x48, 0x6c, 0xef, 0x3c, 0x58, - 0xd2, 0x7a, 0x71, 0x34, 0x09, 0x03, 0xd7, 0x7b, 0x4d, 0xa2, 0x80, 0x0a, 0x7d, 0x7b, 0x33, 0x1e, - 0xa1, 0x79, 0x24, 0x34, 0xd3, 0x38, 0x0a, 0xd2, 0x79, 0x14, 0x85, 0x51, 0xd0, 0x8b, 0x13, 0x9a, - 0xae, 0xd0, 0xdf, 0x15, 0x46, 0x5c, 0x7a, 0x35, 0x9f, 0xf4, 0x48, 0xb4, 0x10, 0xaa, 0xee, 0xba, - 0x6a, 0x12, 0xd2, 0xa9, 0xef, 0xce, 0x48, 0xf6, 0x46, 0x58, 0xdc, 0x5b, 0xb7, 0xc8, 0x58, 0x3a, - 0xf7, 0x98, 0xd0, 0x3e, 0x5c, 0xd7, 0xb2, 0x70, 0x46, 0x33, 0x46, 0x66, 0x89, 0x30, 0x38, 0x14, - 0x06, 0x69, 0xe2, 0xf5, 0x32, 0x46, 0xd8, 0x5c, 0x04, 0xa5, 0x78, 0xd0, 0x3a, 0xe3, 0x29, 0xf2, - 0xed, 0xe2, 0x44, 0xe8, 0x43, 0xd8, 0x17, 0x87, 0x73, 0x23, 0x32, 0xa3, 0xed, 0x4a, 0x57, 0x3a, - 0x6a, 0xe0, 0xa6, 0xc0, 0x0c, 0x32, 0xa3, 0x48, 0x85, 0x5b, 0x49, 0x1a, 0xfb, 0x73, 0x8f, 0xa6, - 0x6e, 0x92, 0xc6, 0x3f, 0x52, 0x8f, 0xb9, 0xa1, 0xdf, 0xae, 0x72, 0xcb, 0x9b, 0xa5, 0xca, 0x2a, - 0x34, 0xba, 0xaf, 0xfc, 0x55, 0x85, 0x9b, 0x66, 0x99, 0x8e, 0x33, 0xca, 0x88, 0x4f, 0x18, 0x41, - 0x1f, 0x41, 0xab, 0xbc, 0x40, 0xee, 0x29, 0x6b, 0x4b, 0xdd, 0xea, 0x51, 0x03, 0x1f, 0x94, 0x68, - 0xee, 0x2b, 0x43, 0x67, 0x50, 0xcf, 0x18, 0x4d, 0xb2, 0x76, 0xa5, 0x5b, 0x3d, 0x6a, 0xf6, 0xbf, - 0x50, 0xb7, 0x5c, 0xb2, 0xba, 0xe1, 0x49, 0xb5, 0x19, 0x4d, 0x70, 0xc1, 0x82, 0x7a, 0x3c, 0xf6, - 0x20, 0xa5, 0x59, 0xe6, 0x26, 0x34, 0xf5, 0x68, 0xc4, 0x48, 0x40, 0x79, 0xec, 0x75, 0x8c, 0x4a, - 0x95, 0x75, 0xa9, 0x41, 0x4f, 0x00, 0x32, 0x46, 0x52, 0xe6, 0xe6, 0x39, 0x6d, 0xd7, 0xba, 0xd2, - 0x51, 0xb3, 0xdf, 0x29, 0x83, 0x28, 0x13, 0xae, 0x3a, 0x65, 0xc2, 0x71, 0x83, 0x5b, 0xe7, 0x72, - 0xe7, 0x2d, 0xd4, 0x72, 0xd7, 0xa8, 0x0b, 0x4d, 0x9f, 0x66, 0x5e, 0x1a, 0x26, 0x79, 0x58, 0x65, - 0x46, 0x97, 0x20, 0xf4, 0x02, 0x76, 0x8a, 0x6b, 0xe1, 0x0e, 0x5a, 0xfd, 0x27, 0xff, 0xe9, 0x94, - 0x39, 0x01, 0x16, 0x44, 0x4a, 0x00, 0x3b, 0x05, 0x82, 0xee, 0x00, 0xb2, 0x9d, 0x81, 0x73, 0x6e, - 0xbb, 0xe7, 0x86, 0x6d, 0x69, 0x43, 0xfd, 0x44, 0xd7, 0x46, 0xf2, 0x0d, 0xb4, 0x07, 0xb5, 0x91, - 0x69, 0x68, 0xb2, 0x84, 0xde, 0x83, 0xa6, 0x61, 0x3a, 0xae, 0xed, 0x0c, 0xb0, 0xa3, 0x8d, 0xe4, - 0x4a, 0x0e, 0xe8, 0x86, 0x6b, 0x61, 0xf3, 0x14, 0x6b, 0xb6, 0x2d, 0x57, 0x11, 0xc0, 0xce, 0xc9, - 0x40, 0x1f, 0x6b, 0x23, 0xb9, 0x86, 0x0e, 0xa0, 0x31, 0x1c, 0x18, 0x43, 0x6d, 0x9c, 0x8b, 0x75, - 0xe5, 0x37, 0x09, 0x60, 0x14, 0x92, 0x20, 0x8a, 0x33, 0x16, 0x7a, 0xa8, 0x03, 0x7b, 0xd3, 0xd8, - 0xe3, 0xa1, 0xb5, 0x25, 0x7e, 0xd2, 0x4b, 0x19, 0x8d, 0xa0, 0xf6, 0x26, 0x8c, 0x7c, 0x9e, 0x81, - 0x56, 0xff, 0x93, 0xad, 0x87, 0xbc, 0xa2, 0x55, 0xbf, 0x0d, 0x23, 0x1f, 0xf3, 0xdd, 0xa8, 0x0d, - 0xbb, 0x33, 0x9a, 0x65, 0xe5, 0xb5, 0x35, 0x70, 0x29, 0x2a, 0x0f, 0xa0, 0x96, 0xdb, 0xa1, 0x26, - 0xec, 0x7e, 0x3f, 0xc0, 0x86, 0x6e, 0x9c, 0xca, 0x37, 0x50, 0x03, 0xea, 0x1a, 0xc6, 0x26, 0x96, - 0x25, 0x85, 0xc0, 0xfe, 0x90, 0x37, 0xb6, 0xcd, 0x0b, 0x0c, 0xb5, 0xa0, 0x12, 0xfa, 0xed, 0x3a, - 0x27, 0xa9, 0x84, 0x3e, 0x1a, 0x40, 0x7d, 0x12, 0x4e, 0x69, 0x59, 0x6b, 0x1f, 0x6f, 0x0d, 0xb0, - 0x60, 0x3b, 0x09, 0xa7, 0x14, 0x17, 0x3b, 0x95, 0x5f, 0x2b, 0x00, 0x57, 0x28, 0xfa, 0x00, 0x1a, - 0x39, 0xee, 0x26, 0x84, 0xbd, 0x2e, 0xd3, 0x91, 0x03, 0x16, 0x61, 0xaf, 0xd1, 0x23, 0x38, 0xe0, - 0x4a, 0x2f, 0x8e, 0x18, 0x8d, 0x58, 0xc6, 0x8f, 0xb3, 0x8f, 0xf7, 0x73, 0x70, 0x28, 0x30, 0xf4, - 0x42, 0x30, 0xb0, 0x45, 0x42, 0x45, 0x75, 0x7c, 0xf6, 0x2f, 0xe2, 0x52, 0xf3, 0x1f, 0x67, 0x91, - 0xd0, 0xc2, 0x6f, 0xbe, 0x52, 0x7e, 0x92, 0x60, 0xaf, 0x84, 0xd1, 0x5d, 0xb8, 0x7d, 0xa2, 0x8f, - 0x35, 0xd7, 0x79, 0x69, 0x69, 0x6b, 0x05, 0x72, 0x08, 0xb7, 0x6c, 0x0d, 0x7f, 0xa7, 0x0f, 0x35, - 0x77, 0x68, 0x1a, 0x27, 0xfa, 0xa9, 0xfb, 0x72, 0x70, 0x36, 0x96, 0x25, 0x74, 0x13, 0x0e, 0x4c, - 0x4b, 0x33, 0xdc, 0x81, 0xa5, 0xbb, 0xdf, 0xd8, 0xa6, 0x21, 0x57, 0x56, 0x20, 0x6e, 0x55, 0x45, - 0xf7, 0xe1, 0x2e, 0x67, 0x1e, 0x69, 0xf6, 0x10, 0xeb, 0x96, 0x63, 0x62, 0xd7, 0xd6, 0x9c, 0xbc, - 0xaa, 0x1c, 0x53, 0xae, 0x29, 0x0f, 0xa1, 0x51, 0x84, 0x89, 0xe9, 0x04, 0x21, 0xa8, 0xf1, 0x69, - 0x53, 0xa4, 0x88, 0xaf, 0x15, 0x13, 0xf6, 0x87, 0x7c, 0xfe, 0x62, 0x9a, 0xc4, 0x29, 0x43, 0xcf, - 0xa1, 0xb5, 0x32, 0x96, 0x8b, 0x81, 0xd1, 0xec, 0xb7, 0x97, 0xd3, 0x51, 0x50, 0x8a, 0x7d, 0x07, - 0xde, 0x92, 0x94, 0x29, 0x7f, 0xee, 0xc0, 0x2e, 0x8e, 0xa7, 0xd3, 0x78, 0xce, 0xd0, 0x7d, 0x80, - 0xb4, 0x58, 0xe6, 0xa3, 0xab, 0x70, 0xdb, 0x10, 0x88, 0xee, 0xa3, 0xa7, 0xd0, 0xf4, 0x52, 0x4a, - 0x18, 0x2d, 0xda, 0xbe, 0xb2, 0xb5, 0xed, 0xa1, 0x30, 0xcf, 0x81, 0x9c, 0xbb, 0x90, 0x7c, 0xf7, - 0xd5, 0x42, 0xd4, 0x68, 0x43, 0x20, 0xc7, 0x0b, 0x64, 0xac, 0x35, 0xfb, 0xe7, 0x5b, 0xaf, 0x53, - 0x04, 0x5d, 0xfe, 0xaf, 0x76, 0x3a, 0x7a, 0x0b, 0x6d, 0x96, 0x92, 0xc9, 0x24, 0xf4, 0xca, 0x89, - 0xe6, 0x66, 0x2c, 0x25, 0x8c, 0x06, 0x0b, 0x5e, 0xdb, 0xcd, 0xfe, 0xf3, 0x77, 0xf6, 0xe0, 0x14, - 0x44, 0x62, 0xfe, 0xd9, 0x82, 0xe6, 0xeb, 0x1b, 0xf8, 0x0e, 0xbb, 0x56, 0x83, 0x16, 0x70, 0xe8, - 0xd3, 0x29, 0x65, 0xd4, 0x2d, 0x5f, 0x8d, 0x4b, 0xdf, 0xbf, 0x4b, 0xdc, 0xf9, 0xb3, 0x77, 0x76, - 0x3e, 0xe2, 0x44, 0xe2, 0x21, 0x5a, 0xf2, 0x7d, 0xdb, 0xbf, 0x4e, 0xb1, 0xf1, 0x52, 0xed, 0x6d, - 0xbc, 0x54, 0x9d, 0x3f, 0x24, 0xb8, 0x73, 0xfd, 0x91, 0x50, 0x0a, 0xcd, 0xab, 0xf9, 0x5f, 0x96, - 0x92, 0xf5, 0x3f, 0x13, 0xa5, 0x5e, 0x3d, 0x1c, 0x99, 0x16, 0xb1, 0x74, 0x81, 0x97, 0x9d, 0x74, - 0x9e, 0x81, 0xbc, 0x6e, 0x80, 0x64, 0xa8, 0xbe, 0xa1, 0x0b, 0x51, 0x81, 0xf9, 0x12, 0xbd, 0x0f, - 0xf5, 0x0b, 0x32, 0x9d, 0x17, 0x55, 0x27, 0xe1, 0x42, 0xf8, 0xaa, 0xf2, 0xa5, 0xd4, 0x39, 0x84, - 0xdb, 0xd7, 0xe6, 0x48, 0x99, 0xc3, 0xc1, 0x4a, 0x6d, 0xa0, 0x07, 0xd0, 0xc1, 0xe6, 0x78, 0x6c, - 0x9e, 0xf3, 0xa9, 0xbe, 0x39, 0xfb, 0xd7, 0x06, 0xbc, 0x94, 0x8f, 0x4c, 0xfb, 0x7c, 0x38, 0xcc, - 0x85, 0xca, 0xea, 0x84, 0x5f, 0x1d, 0xfe, 0x4d, 0xd8, 0xb5, 0x34, 0x63, 0x94, 0x8f, 0xd6, 0xfa, - 0x31, 0xc0, 0x5e, 0x79, 0xdb, 0xc7, 0x3f, 0x4b, 0xf0, 0xc8, 0x8b, 0x67, 0xdb, 0x12, 0x78, 0xdc, - 0xc2, 0xe5, 0x57, 0x9b, 0x95, 0x77, 0x91, 0x25, 0xfd, 0x60, 0x89, 0x2d, 0x41, 0x3c, 0x25, 0x51, - 0xa0, 0xc6, 0x69, 0xd0, 0x0b, 0x68, 0xc4, 0x7b, 0x4c, 0x7c, 0x02, 0x92, 0x24, 0xcc, 0xfe, 0xf1, - 0x33, 0xf0, 0xe9, 0x06, 0xf8, 0x4b, 0xa5, 0x76, 0x3a, 0xb0, 0xcf, 0x5e, 0xed, 0x70, 0x8e, 0x4f, - 0xff, 0x0e, 0x00, 0x00, 0xff, 0xff, 0x2d, 0x64, 0x4d, 0x1e, 0x49, 0x0a, 0x00, 0x00, + 0x10, 0xaf, 0xf3, 0xef, 0x2e, 0x93, 0xbb, 0xe0, 0x6e, 0x69, 0x2f, 0x0d, 0xfd, 0x73, 0xa4, 0x42, + 0x3a, 0x09, 0xc9, 0xa1, 0x07, 0x02, 0x4a, 0xa5, 0x56, 0xb9, 0xc4, 0x77, 0x84, 0xde, 0xd9, 0xee, + 0x3a, 0x07, 0x2a, 0x5f, 0xac, 0xad, 0xbd, 0x71, 0x4d, 0x13, 0xdb, 0x5a, 0x6f, 0x4e, 0x8a, 0xfa, + 0x0c, 0x48, 0x48, 0xbc, 0x01, 0x9f, 0x78, 0x03, 0x5e, 0x81, 0x0f, 0xbc, 0x01, 0x8f, 0xc1, 0x0b, + 0xa0, 0x5d, 0xaf, 0x7b, 0xf9, 0x73, 0x28, 0x05, 0xbe, 0x24, 0x3b, 0xbf, 0xdf, 0xec, 0xcc, 0xec, + 0xec, 0xec, 0x8c, 0xa1, 0x1b, 0x26, 0x49, 0x38, 0xa1, 0x5d, 0x92, 0x46, 0xdd, 0x8c, 0xb2, 0x8b, + 0xc8, 0xa7, 0x53, 0x12, 0x93, 0x90, 0x4e, 0x69, 0xcc, 0xbb, 0x17, 0x0f, 0xbb, 0x8c, 0x66, 0xc9, + 0x8c, 0xf9, 0x34, 0x33, 0x52, 0x96, 0xf0, 0x04, 0xdd, 0xcf, 0x37, 0x18, 0x24, 0x8d, 0x8c, 0xb5, + 0x0d, 0xc6, 0xc5, 0xc3, 0xf6, 0x9d, 0x05, 0x8b, 0x24, 0x8e, 0x13, 0x4e, 0x78, 0x94, 0xc4, 0x6a, + 0x7b, 0xfb, 0xde, 0x02, 0xeb, 0x27, 0xf1, 0x38, 0x0a, 0x3d, 0xff, 0x15, 0x89, 0x43, 0xaa, 0xf8, + 0xbd, 0x05, 0x7e, 0x4a, 0x39, 0x8b, 0x7c, 0x45, 0xb4, 0xd6, 0x03, 0x55, 0xcc, 0x03, 0xc5, 0x4c, + 0x92, 0x38, 0x64, 0xb3, 0x38, 0x8e, 0xe2, 0xb0, 0x9b, 0xa4, 0x94, 0x2d, 0xf9, 0xbd, 0xad, 0x94, + 0xa4, 0xf4, 0x72, 0x36, 0xee, 0x92, 0x78, 0xae, 0xa8, 0xfd, 0x55, 0x6a, 0x1c, 0xd1, 0x49, 0xe0, + 0x4d, 0x49, 0xf6, 0x5a, 0x69, 0xdc, 0x59, 0xd5, 0xc8, 0x38, 0x9b, 0xf9, 0x5c, 0xb1, 0xf7, 0x57, + 0x59, 0x1e, 0x4d, 0x69, 0xc6, 0xc9, 0x34, 0x5d, 0x39, 0x13, 0x4b, 0xfd, 0x6e, 0xc6, 0x09, 0x9f, + 0xa9, 0xa0, 0x3a, 0x3e, 0x34, 0xcf, 0x64, 0xee, 0x02, 0x37, 0x3f, 0x11, 0xfa, 0x10, 0x76, 0xd4, + 0xe1, 0xbc, 0x98, 0x4c, 0x69, 0xab, 0xb4, 0xaf, 0x1d, 0xd4, 0x71, 0x43, 0x61, 0x16, 0x99, 0x52, + 0x64, 0xc0, 0x8d, 0x94, 0x25, 0xc1, 0xcc, 0xa7, 0xcc, 0x4b, 0x59, 0xf2, 0x03, 0xf5, 0xb9, 0x17, + 0x05, 0xad, 0xb2, 0xd4, 0xbc, 0x5e, 0x50, 0x4e, 0xce, 0x0c, 0x83, 0xce, 0x9f, 0x65, 0xb8, 0x6e, + 0x17, 0xe9, 0x38, 0xa3, 0x9c, 0x04, 0x84, 0x13, 0xf4, 0x11, 0x34, 0x8b, 0x9b, 0x95, 0x9e, 0xb2, + 0x96, 0xb6, 0x5f, 0x3e, 0xa8, 0xe3, 0xdd, 0x02, 0x15, 0xbe, 0x32, 0x74, 0x06, 0xd5, 0x8c, 0xd3, + 0x34, 0x6b, 0x95, 0xf6, 0xcb, 0x07, 0x8d, 0xc3, 0x2f, 0x8c, 0x0d, 0xb7, 0x6f, 0xac, 0x79, 0x32, + 0x5c, 0x4e, 0x53, 0x9c, 0x5b, 0x41, 0x5d, 0x19, 0x7b, 0xc8, 0x68, 0x96, 0x79, 0x29, 0x65, 0x3e, + 0x8d, 0x39, 0x09, 0xa9, 0x8c, 0xbd, 0x8a, 0x51, 0x41, 0x39, 0x6f, 0x19, 0xf4, 0x08, 0x20, 0xe3, + 0x84, 0x71, 0x4f, 0xe4, 0xb4, 0x55, 0xd9, 0xd7, 0x0e, 0x1a, 0x87, 0xed, 0x22, 0x88, 0x22, 0xe1, + 0xc6, 0xa8, 0x48, 0x38, 0xae, 0x4b, 0x6d, 0x21, 0xb7, 0xdf, 0x40, 0x45, 0xb8, 0x46, 0xfb, 0xd0, + 0x08, 0x68, 0xe6, 0xb3, 0x28, 0x15, 0x61, 0x15, 0x19, 0x5d, 0x80, 0xd0, 0x73, 0xa8, 0xe5, 0xd7, + 0x22, 0x1d, 0x34, 0x0f, 0x1f, 0xfd, 0xa7, 0x53, 0x0a, 0x03, 0x58, 0x19, 0xea, 0x84, 0x50, 0xcb, + 0x11, 0x74, 0x0b, 0x90, 0x3b, 0xea, 0x8d, 0xce, 0x5d, 0xef, 0xdc, 0x72, 0x1d, 0xb3, 0x3f, 0x3c, + 0x1e, 0x9a, 0x03, 0xfd, 0x1a, 0xda, 0x86, 0xca, 0xc0, 0xb6, 0x4c, 0x5d, 0x43, 0xef, 0x41, 0xc3, + 0xb2, 0x47, 0x9e, 0x3b, 0xea, 0xe1, 0x91, 0x39, 0xd0, 0x4b, 0x02, 0x18, 0x5a, 0x9e, 0x83, 0xed, + 0x13, 0x6c, 0xba, 0xae, 0x5e, 0x46, 0x00, 0xb5, 0xe3, 0xde, 0xf0, 0xd4, 0x1c, 0xe8, 0x15, 0xb4, + 0x0b, 0xf5, 0x7e, 0xcf, 0xea, 0x9b, 0xa7, 0x42, 0xac, 0x76, 0x7e, 0xd5, 0x00, 0x06, 0x11, 0x09, + 0xe3, 0x24, 0xe3, 0x91, 0x8f, 0xda, 0xb0, 0x3d, 0x49, 0x7c, 0x19, 0x5a, 0x4b, 0x93, 0x27, 0x7d, + 0x2b, 0xa3, 0x01, 0x54, 0x5e, 0x47, 0x71, 0x20, 0x33, 0xd0, 0x3c, 0xfc, 0x64, 0xe3, 0x21, 0x2f, + 0xcd, 0x1a, 0xcf, 0xa2, 0x38, 0xc0, 0x72, 0x37, 0x6a, 0xc1, 0xd6, 0x94, 0x66, 0x59, 0x71, 0x6d, + 0x75, 0x5c, 0x88, 0x9d, 0x7b, 0x50, 0x11, 0x7a, 0xa8, 0x01, 0x5b, 0xdf, 0xf5, 0xb0, 0x35, 0xb4, + 0x4e, 0xf4, 0x6b, 0xa8, 0x0e, 0x55, 0x13, 0x63, 0x1b, 0xeb, 0x5a, 0x87, 0xc0, 0x4e, 0x5f, 0xbe, + 0x78, 0x57, 0x16, 0x18, 0x6a, 0x42, 0x29, 0x0a, 0x5a, 0x55, 0x69, 0xa4, 0x14, 0x05, 0xa8, 0x07, + 0xd5, 0x71, 0x34, 0xa1, 0x45, 0xad, 0x7d, 0xbc, 0x31, 0xc0, 0xdc, 0xda, 0x71, 0x34, 0xa1, 0x38, + 0xdf, 0xd9, 0xf9, 0xad, 0x04, 0x70, 0x89, 0xa2, 0x0f, 0xa0, 0x2e, 0x70, 0x2f, 0x25, 0xfc, 0x55, + 0x91, 0x0e, 0x01, 0x38, 0x84, 0xbf, 0x42, 0x0f, 0x60, 0x57, 0x92, 0x7e, 0x12, 0x73, 0x1a, 0xf3, + 0x4c, 0x1e, 0x67, 0x07, 0xef, 0x08, 0xb0, 0xaf, 0x30, 0xf4, 0x5c, 0x59, 0xe0, 0xf3, 0x94, 0xaa, + 0xea, 0xf8, 0xec, 0x5f, 0xc4, 0x65, 0x88, 0x9f, 0xd1, 0x3c, 0xa5, 0xb9, 0x5f, 0xb1, 0xea, 0xfc, + 0xac, 0xc1, 0x76, 0x01, 0xa3, 0xdb, 0x70, 0xf3, 0x78, 0x78, 0x6a, 0x7a, 0xa3, 0x17, 0x8e, 0xb9, + 0x52, 0x20, 0x7b, 0x70, 0xc3, 0x35, 0xf1, 0xb7, 0xc3, 0xbe, 0xe9, 0xf5, 0x6d, 0xeb, 0x78, 0x78, + 0xe2, 0xbd, 0xe8, 0x9d, 0x9d, 0xea, 0x1a, 0xba, 0x0e, 0xbb, 0xb6, 0x63, 0x5a, 0x5e, 0xcf, 0x19, + 0x7a, 0xdf, 0xb8, 0xb6, 0xa5, 0x97, 0x96, 0x20, 0xa9, 0x55, 0x46, 0x77, 0xe1, 0xb6, 0xb4, 0x3c, + 0x30, 0xdd, 0x3e, 0x1e, 0x3a, 0x23, 0x1b, 0x7b, 0xae, 0x39, 0x12, 0x55, 0x35, 0xb2, 0xf5, 0x0a, + 0x6a, 0x02, 0xc8, 0xa5, 0x27, 0x94, 0xf4, 0x5a, 0xe7, 0x3e, 0xd4, 0xf3, 0xb0, 0x31, 0x1d, 0x23, + 0x04, 0x15, 0xd9, 0x7d, 0xf2, 0x94, 0xc9, 0x75, 0xc7, 0x86, 0x9d, 0xbe, 0x6c, 0xd4, 0x98, 0xa6, + 0x09, 0xe3, 0xe8, 0x29, 0x34, 0x97, 0xfa, 0x77, 0xde, 0x40, 0x1a, 0x87, 0xad, 0xc5, 0xf4, 0xe4, + 0x26, 0xd5, 0xbe, 0x5d, 0x7f, 0x41, 0xca, 0x3a, 0x7f, 0xd5, 0x60, 0x0b, 0x27, 0x93, 0x49, 0x32, + 0xe3, 0xe8, 0x2e, 0x00, 0xcb, 0x97, 0xa2, 0x95, 0xe5, 0x6e, 0xeb, 0x0a, 0x19, 0x06, 0xe8, 0x31, + 0x34, 0x7c, 0x46, 0x09, 0xa7, 0x79, 0x1b, 0x28, 0x6d, 0x6c, 0x03, 0x90, 0xab, 0x0b, 0x40, 0xd8, + 0xce, 0xa5, 0xc0, 0x7b, 0x39, 0x57, 0x35, 0x5b, 0x57, 0xc8, 0xd1, 0x1c, 0x59, 0x2b, 0x8f, 0xff, + 0xf3, 0x8d, 0xd7, 0xab, 0x82, 0x2e, 0xfe, 0x97, 0x5f, 0x3e, 0x7a, 0x03, 0x2d, 0xce, 0xc8, 0x78, + 0x1c, 0xf9, 0x45, 0x87, 0xf3, 0x32, 0xce, 0x08, 0xa7, 0xe1, 0x5c, 0xd6, 0x7a, 0xe3, 0xf0, 0xe9, + 0x3b, 0x7b, 0x18, 0xe5, 0x86, 0x54, 0x3f, 0x74, 0x95, 0x99, 0xaf, 0xaf, 0xe1, 0x5b, 0xfc, 0x4a, + 0x06, 0xcd, 0x61, 0x2f, 0xa0, 0x13, 0xca, 0xa9, 0x57, 0x4c, 0x91, 0xb7, 0xbe, 0x7f, 0xd7, 0xa4, + 0xf3, 0x27, 0xef, 0xec, 0x7c, 0x20, 0x0d, 0xa9, 0xc1, 0xb4, 0xe0, 0xfb, 0x66, 0x70, 0x15, 0xb1, + 0x36, 0xb9, 0xb6, 0xd7, 0x26, 0x57, 0xfb, 0x0f, 0x0d, 0x6e, 0x5d, 0x7d, 0x24, 0xc4, 0xa0, 0x71, + 0x39, 0x0f, 0x8a, 0x52, 0x72, 0xfe, 0x67, 0xa2, 0x8c, 0xcb, 0x41, 0x92, 0x99, 0x31, 0x67, 0x73, + 0xbc, 0xe8, 0xa4, 0xfd, 0x04, 0xf4, 0x55, 0x05, 0xa4, 0x43, 0xf9, 0x35, 0x9d, 0xab, 0x0a, 0x14, + 0x4b, 0xf4, 0x3e, 0x54, 0x2f, 0xc8, 0x64, 0x96, 0x57, 0x9d, 0x86, 0x73, 0xe1, 0xab, 0xd2, 0x97, + 0x5a, 0x7b, 0x0f, 0x6e, 0x5e, 0x99, 0xa3, 0xce, 0x8f, 0x1a, 0xec, 0x2e, 0x15, 0x07, 0xba, 0x07, + 0x6d, 0x6c, 0x9f, 0x9e, 0xda, 0xe7, 0xb2, 0xcd, 0xaf, 0x0f, 0x83, 0x95, 0x8e, 0xaf, 0x89, 0x1e, + 0xea, 0x9e, 0xf7, 0xfb, 0x42, 0x28, 0x2d, 0xb7, 0xfc, 0xe5, 0x69, 0xd0, 0x80, 0x2d, 0xc7, 0xb4, + 0x06, 0xa2, 0xd7, 0x56, 0xc5, 0xa8, 0xc9, 0x09, 0x4f, 0x38, 0x33, 0x07, 0xde, 0x51, 0xaf, 0xff, + 0x4c, 0xaf, 0x1d, 0x01, 0x6c, 0x17, 0x65, 0x70, 0xf4, 0x93, 0x06, 0x0f, 0xfc, 0x64, 0xba, 0x29, + 0xb3, 0x47, 0x4d, 0x5c, 0x7c, 0xf7, 0x39, 0xe2, 0x79, 0x39, 0xda, 0xf7, 0x8e, 0xda, 0x12, 0x26, + 0x13, 0x12, 0x87, 0x46, 0xc2, 0xc2, 0x6e, 0x48, 0x63, 0xf9, 0xf8, 0xd4, 0x47, 0x24, 0x49, 0xa3, + 0xec, 0x1f, 0x3f, 0x24, 0x1f, 0xaf, 0x81, 0xbf, 0x94, 0x2a, 0x27, 0x3d, 0xf7, 0xec, 0x65, 0x4d, + 0xda, 0xf8, 0xf4, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb4, 0xdd, 0x92, 0xf0, 0x8b, 0x0a, 0x00, + 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/api/servicemanagement/v1/servicemanager.pb.go b/vendor/google.golang.org/genproto/googleapis/api/servicemanagement/v1/servicemanager.pb.go index 0468128..b563287 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/servicemanagement/v1/servicemanager.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/servicemanagement/v1/servicemanager.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/api/servicemanagement/v1/servicemanager.proto -// DO NOT EDIT! package servicemanagement @@ -8,8 +7,7 @@ import proto "github.com/golang/protobuf/proto" import fmt "fmt" import math "math" import _ "google.golang.org/genproto/googleapis/api/annotations" -import _ "google.golang.org/genproto/googleapis/api/serviceconfig" -import google_api21 "google.golang.org/genproto/googleapis/api/serviceconfig" +import google_api22 "google.golang.org/genproto/googleapis/api/serviceconfig" import google_longrunning "google.golang.org/genproto/googleapis/longrunning" import google_protobuf1 "github.com/golang/protobuf/ptypes/any" import _ "google.golang.org/genproto/protobuf/field_mask" @@ -302,7 +300,7 @@ func (m *ListServiceConfigsRequest) GetPageSize() int32 { // Response message for ListServiceConfigs method. type ListServiceConfigsResponse struct { // The list of service configuration resources. - ServiceConfigs []*google_api21.Service `protobuf:"bytes,1,rep,name=service_configs,json=serviceConfigs" json:"service_configs,omitempty"` + ServiceConfigs []*google_api22.Service `protobuf:"bytes,1,rep,name=service_configs,json=serviceConfigs" json:"service_configs,omitempty"` // The token of the next page of results. NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` } @@ -312,7 +310,7 @@ func (m *ListServiceConfigsResponse) String() string { return proto.C func (*ListServiceConfigsResponse) ProtoMessage() {} func (*ListServiceConfigsResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{9} } -func (m *ListServiceConfigsResponse) GetServiceConfigs() []*google_api21.Service { +func (m *ListServiceConfigsResponse) GetServiceConfigs() []*google_api22.Service { if m != nil { return m.ServiceConfigs } @@ -332,7 +330,7 @@ type CreateServiceConfigRequest struct { // for naming requirements. For example: `example.googleapis.com`. ServiceName string `protobuf:"bytes,1,opt,name=service_name,json=serviceName" json:"service_name,omitempty"` // The service configuration resource. - ServiceConfig *google_api21.Service `protobuf:"bytes,2,opt,name=service_config,json=serviceConfig" json:"service_config,omitempty"` + ServiceConfig *google_api22.Service `protobuf:"bytes,2,opt,name=service_config,json=serviceConfig" json:"service_config,omitempty"` } func (m *CreateServiceConfigRequest) Reset() { *m = CreateServiceConfigRequest{} } @@ -347,7 +345,7 @@ func (m *CreateServiceConfigRequest) GetServiceName() string { return "" } -func (m *CreateServiceConfigRequest) GetServiceConfig() *google_api21.Service { +func (m *CreateServiceConfigRequest) GetServiceConfig() *google_api22.Service { if m != nil { return m.ServiceConfig } @@ -396,7 +394,7 @@ func (m *SubmitConfigSourceRequest) GetValidateOnly() bool { // Response message for SubmitConfigSource method. type SubmitConfigSourceResponse struct { // The generated service configuration. - ServiceConfig *google_api21.Service `protobuf:"bytes,1,opt,name=service_config,json=serviceConfig" json:"service_config,omitempty"` + ServiceConfig *google_api22.Service `protobuf:"bytes,1,opt,name=service_config,json=serviceConfig" json:"service_config,omitempty"` } func (m *SubmitConfigSourceResponse) Reset() { *m = SubmitConfigSourceResponse{} } @@ -404,7 +402,7 @@ func (m *SubmitConfigSourceResponse) String() string { return proto.C func (*SubmitConfigSourceResponse) ProtoMessage() {} func (*SubmitConfigSourceResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{12} } -func (m *SubmitConfigSourceResponse) GetServiceConfig() *google_api21.Service { +func (m *SubmitConfigSourceResponse) GetServiceConfig() *google_api22.Service { if m != nil { return m.ServiceConfig } @@ -774,12 +772,12 @@ type ServiceManagerClient interface { // from the newest to the oldest. ListServiceConfigs(ctx context.Context, in *ListServiceConfigsRequest, opts ...grpc.CallOption) (*ListServiceConfigsResponse, error) // Gets a service configuration (version) for a managed service. - GetServiceConfig(ctx context.Context, in *GetServiceConfigRequest, opts ...grpc.CallOption) (*google_api21.Service, error) + GetServiceConfig(ctx context.Context, in *GetServiceConfigRequest, opts ...grpc.CallOption) (*google_api22.Service, error) // Creates a new service configuration (version) for a managed service. // This method only stores the service configuration. To roll out the service // configuration to backend systems please call // [CreateServiceRollout][google.api.servicemanagement.v1.ServiceManager.CreateServiceRollout]. - CreateServiceConfig(ctx context.Context, in *CreateServiceConfigRequest, opts ...grpc.CallOption) (*google_api21.Service, error) + CreateServiceConfig(ctx context.Context, in *CreateServiceConfigRequest, opts ...grpc.CallOption) (*google_api22.Service, error) // Creates a new service configuration (version) for a managed service based // on // user-supplied configuration source files (for example: OpenAPI @@ -895,8 +893,8 @@ func (c *serviceManagerClient) ListServiceConfigs(ctx context.Context, in *ListS return out, nil } -func (c *serviceManagerClient) GetServiceConfig(ctx context.Context, in *GetServiceConfigRequest, opts ...grpc.CallOption) (*google_api21.Service, error) { - out := new(google_api21.Service) +func (c *serviceManagerClient) GetServiceConfig(ctx context.Context, in *GetServiceConfigRequest, opts ...grpc.CallOption) (*google_api22.Service, error) { + out := new(google_api22.Service) err := grpc.Invoke(ctx, "/google.api.servicemanagement.v1.ServiceManager/GetServiceConfig", in, out, c.cc, opts...) if err != nil { return nil, err @@ -904,8 +902,8 @@ func (c *serviceManagerClient) GetServiceConfig(ctx context.Context, in *GetServ return out, nil } -func (c *serviceManagerClient) CreateServiceConfig(ctx context.Context, in *CreateServiceConfigRequest, opts ...grpc.CallOption) (*google_api21.Service, error) { - out := new(google_api21.Service) +func (c *serviceManagerClient) CreateServiceConfig(ctx context.Context, in *CreateServiceConfigRequest, opts ...grpc.CallOption) (*google_api22.Service, error) { + out := new(google_api22.Service) err := grpc.Invoke(ctx, "/google.api.servicemanagement.v1.ServiceManager/CreateServiceConfig", in, out, c.cc, opts...) if err != nil { return nil, err @@ -1015,12 +1013,12 @@ type ServiceManagerServer interface { // from the newest to the oldest. ListServiceConfigs(context.Context, *ListServiceConfigsRequest) (*ListServiceConfigsResponse, error) // Gets a service configuration (version) for a managed service. - GetServiceConfig(context.Context, *GetServiceConfigRequest) (*google_api21.Service, error) + GetServiceConfig(context.Context, *GetServiceConfigRequest) (*google_api22.Service, error) // Creates a new service configuration (version) for a managed service. // This method only stores the service configuration. To roll out the service // configuration to backend systems please call // [CreateServiceRollout][google.api.servicemanagement.v1.ServiceManager.CreateServiceRollout]. - CreateServiceConfig(context.Context, *CreateServiceConfigRequest) (*google_api21.Service, error) + CreateServiceConfig(context.Context, *CreateServiceConfigRequest) (*google_api22.Service, error) // Creates a new service configuration (version) for a managed service based // on // user-supplied configuration source files (for example: OpenAPI @@ -1422,94 +1420,94 @@ func init() { } var fileDescriptor1 = []byte{ - // 1420 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0x4f, 0x6f, 0x1b, 0x45, - 0x14, 0x67, 0x9c, 0xb4, 0x4d, 0x5e, 0x62, 0xb7, 0x9d, 0xb8, 0x8d, 0xeb, 0x34, 0x6a, 0xba, 0x81, - 0x12, 0xa5, 0xd4, 0xab, 0xa4, 0xff, 0xa8, 0x53, 0x0e, 0x4d, 0x02, 0x55, 0x44, 0x4b, 0x23, 0xa7, - 0x05, 0x54, 0x90, 0xac, 0xcd, 0xee, 0x64, 0xbb, 0x74, 0x3d, 0x63, 0x76, 0xd6, 0x09, 0x69, 0x94, - 0x4b, 0x55, 0x09, 0x09, 0x4e, 0xa8, 0x40, 0x25, 0x8e, 0x15, 0xe2, 0xc0, 0x81, 0x0b, 0x07, 0x24, - 0x0e, 0x48, 0x7c, 0x06, 0xc4, 0x37, 0xe0, 0x33, 0x70, 0x46, 0x9e, 0x9d, 0x75, 0x76, 0xec, 0x8d, - 0x77, 0xd7, 0x02, 0x8e, 0xfb, 0x66, 0x7e, 0xef, 0xfd, 0xe6, 0xcd, 0x7b, 0x33, 0xbf, 0x59, 0xb8, - 0x62, 0x33, 0x66, 0xbb, 0x44, 0x37, 0x9a, 0x8e, 0xce, 0x89, 0xb7, 0xed, 0x98, 0xa4, 0x61, 0x50, - 0xc3, 0x26, 0x0d, 0x42, 0x7d, 0x7d, 0x7b, 0x41, 0x35, 0x7a, 0x95, 0xa6, 0xc7, 0x7c, 0x86, 0xcf, - 0x05, 0xa8, 0x8a, 0xd1, 0x74, 0x2a, 0x3d, 0xa8, 0xca, 0xf6, 0x42, 0xf9, 0x6c, 0xc4, 0xad, 0x41, - 0x29, 0xf3, 0x0d, 0xdf, 0x61, 0x94, 0x07, 0xf0, 0xf2, 0xa9, 0xe8, 0x68, 0xcb, 0x7f, 0x24, 0xcd, - 0xa5, 0x5e, 0x2e, 0x72, 0x44, 0x4f, 0x62, 0xe9, 0x11, 0xce, 0x5a, 0x9e, 0x49, 0xc2, 0x08, 0xb3, - 0x12, 0xe0, 0x32, 0x6a, 0x7b, 0x2d, 0x4a, 0x1d, 0x6a, 0xeb, 0xac, 0x49, 0x3c, 0x85, 0xc6, 0x19, - 0x39, 0x49, 0x7c, 0x6d, 0xb6, 0xb6, 0x74, 0x83, 0xee, 0xca, 0xa1, 0x99, 0xee, 0xa1, 0x2d, 0x87, - 0xb8, 0x56, 0xbd, 0x61, 0xf0, 0xc7, 0x72, 0xc6, 0xd9, 0xee, 0x19, 0xdc, 0xf7, 0x5a, 0xa6, 0x2f, - 0x47, 0x27, 0xe5, 0xa8, 0xd7, 0x34, 0x75, 0xee, 0x1b, 0x7e, 0x4b, 0xc6, 0xd4, 0x5e, 0x22, 0x98, - 0xb8, 0xe3, 0x70, 0x7f, 0x23, 0x58, 0x05, 0xaf, 0x91, 0x4f, 0x5b, 0x84, 0xfb, 0xb8, 0x02, 0x13, - 0x4d, 0x8f, 0x59, 0x2d, 0x93, 0x78, 0xf5, 0xa6, 0xc7, 0x3e, 0x21, 0xa6, 0x5f, 0x77, 0xac, 0x12, - 0x9a, 0x41, 0x73, 0xa3, 0xb5, 0x93, 0xe1, 0xd0, 0x7a, 0x30, 0xb2, 0x66, 0xe1, 0x29, 0x18, 0x6d, - 0x1a, 0x36, 0xa9, 0x73, 0xe7, 0x09, 0x29, 0x1d, 0x99, 0x41, 0x73, 0x47, 0x6a, 0x23, 0x6d, 0xc3, - 0x86, 0xf3, 0x84, 0xe0, 0x69, 0x00, 0x31, 0xe8, 0xb3, 0xc7, 0x84, 0x96, 0x8e, 0x0a, 0x1f, 0x62, - 0xfa, 0xfd, 0xb6, 0x01, 0x9f, 0x83, 0x31, 0x93, 0x51, 0xde, 0x6a, 0x10, 0xaf, 0x1d, 0xe3, 0x98, - 0x18, 0x87, 0xd0, 0xb4, 0x66, 0x69, 0x5f, 0x22, 0x28, 0xaa, 0x24, 0x79, 0x93, 0x51, 0x4e, 0xf0, - 0xbb, 0x30, 0x22, 0xd3, 0xcf, 0x4b, 0x68, 0x66, 0x68, 0x6e, 0x6c, 0x51, 0xaf, 0x24, 0x94, 0x42, - 0xe5, 0xae, 0xf8, 0xb2, 0xa4, 0xaf, 0x5a, 0xc7, 0x01, 0xbe, 0x00, 0xc7, 0x29, 0xf9, 0xcc, 0xaf, - 0x47, 0xa8, 0xe6, 0x04, 0x95, 0x7c, 0xdb, 0xbc, 0x1e, 0xd2, 0xd5, 0xae, 0xc1, 0xc9, 0xdb, 0x24, - 0xe4, 0x12, 0xe6, 0xeb, 0x3c, 0x8c, 0x4b, 0x47, 0x75, 0x6a, 0x34, 0x88, 0x4c, 0xd4, 0x98, 0xb4, - 0xbd, 0x67, 0x34, 0x88, 0x66, 0x40, 0x71, 0xc5, 0x23, 0x86, 0x4f, 0xba, 0xa0, 0x6b, 0x70, 0x4c, - 0x4e, 0x13, 0xa8, 0x01, 0xd6, 0x10, 0xe2, 0xb5, 0x1b, 0x50, 0x5c, 0x25, 0x2e, 0xe9, 0x09, 0x91, - 0x82, 0xdd, 0x12, 0x9c, 0x7e, 0x40, 0xad, 0x01, 0xc1, 0x16, 0x4c, 0xf6, 0x80, 0xe5, 0x16, 0xfd, - 0x8b, 0xab, 0xfb, 0x13, 0xc1, 0xe4, 0x41, 0xe6, 0x57, 0x18, 0xdd, 0x72, 0xec, 0xf4, 0x24, 0xdb, - 0x25, 0x6a, 0x0a, 0x4c, 0xbb, 0xc8, 0x82, 0x9d, 0x1d, 0x09, 0x0c, 0x6b, 0x16, 0xfe, 0x00, 0x86, - 0xb7, 0x1d, 0xb2, 0x53, 0x1a, 0x9a, 0x41, 0x73, 0x85, 0xc5, 0x95, 0x44, 0x8e, 0x87, 0xf0, 0xa8, - 0x04, 0x5f, 0xef, 0x3b, 0x64, 0xa7, 0x26, 0x1c, 0x6a, 0xe7, 0x01, 0x0e, 0x6c, 0x78, 0x14, 0x8e, - 0x2c, 0xdf, 0xda, 0x58, 0x5b, 0x39, 0xf1, 0x0a, 0x1e, 0x81, 0xe1, 0x77, 0x1e, 0xdc, 0xb9, 0x73, - 0x02, 0x69, 0x4f, 0xe0, 0x4c, 0xa4, 0xba, 0x83, 0xd9, 0x3c, 0xc3, 0xc2, 0xd4, 0xf6, 0xca, 0x75, - 0xb7, 0x97, 0xd2, 0x9a, 0x43, 0x6a, 0x6b, 0x6a, 0x4f, 0x11, 0x94, 0xe3, 0x82, 0xcb, 0xdd, 0xbb, - 0x09, 0xc7, 0xc3, 0xe8, 0x41, 0xaa, 0xc2, 0x3e, 0x9b, 0x88, 0x66, 0x28, 0xdc, 0xa9, 0x02, 0x57, - 0xbc, 0xa4, 0xee, 0xa8, 0x3d, 0x28, 0x2b, 0x9d, 0x91, 0x79, 0x6b, 0xab, 0x50, 0x50, 0x69, 0x8a, - 0x38, 0x87, 0xb0, 0xcc, 0x2b, 0x2c, 0xb5, 0x5f, 0x10, 0x9c, 0xd9, 0x68, 0x6d, 0x36, 0x1c, 0x3f, - 0x30, 0x6c, 0x88, 0x83, 0x3b, 0x43, 0xf0, 0x1a, 0xe4, 0x65, 0x5d, 0x05, 0x67, 0xbe, 0x8c, 0x7d, - 0x29, 0xb1, 0x86, 0x94, 0x78, 0xe3, 0x66, 0xe4, 0x0b, 0xcf, 0x42, 0x7e, 0xdb, 0x70, 0x1d, 0xcb, - 0xf0, 0x49, 0x9d, 0x51, 0x77, 0x57, 0xec, 0xdb, 0x48, 0x6d, 0x3c, 0x34, 0xde, 0xa3, 0xee, 0xae, - 0xf6, 0x21, 0x94, 0xe3, 0x88, 0xcb, 0xad, 0xeb, 0xcd, 0x09, 0x4a, 0x9d, 0x93, 0x67, 0x08, 0xa6, - 0xd4, 0xb3, 0x8a, 0xb9, 0x2e, 0x6b, 0xf9, 0x19, 0xb2, 0xb2, 0x0c, 0xc7, 0xbc, 0x00, 0x24, 0xf3, - 0x31, 0x97, 0x98, 0x8f, 0x30, 0x48, 0x08, 0xd4, 0x9e, 0xab, 0xc5, 0x29, 0xc7, 0xff, 0xa7, 0xd6, - 0xc0, 0xa7, 0xe1, 0xe8, 0x96, 0xe3, 0xfa, 0xc4, 0x2b, 0x0d, 0x0b, 0x9c, 0xfc, 0x6a, 0xdf, 0x46, - 0x53, 0xb1, 0xac, 0x64, 0xe2, 0x57, 0x61, 0x44, 0x2e, 0x20, 0x6c, 0x96, 0xf4, 0x4b, 0xef, 0x20, - 0x53, 0xf7, 0xce, 0xc7, 0x50, 0x8a, 0xdc, 0x46, 0x99, 0xb7, 0x69, 0x1a, 0x40, 0x86, 0x3c, 0x38, - 0x15, 0x47, 0xa5, 0x65, 0xcd, 0xd2, 0x1e, 0x42, 0xf1, 0x6d, 0x6a, 0x6c, 0xba, 0xd9, 0xef, 0x84, - 0xee, 0x5b, 0x3d, 0xd7, 0x73, 0xab, 0x7f, 0x04, 0xa7, 0x56, 0x1d, 0xfe, 0x1f, 0x39, 0xff, 0x1c, - 0xc1, 0xd4, 0x6d, 0x42, 0xdb, 0x0a, 0xab, 0x73, 0x9c, 0x34, 0x99, 0xd7, 0x49, 0xcd, 0x65, 0x00, - 0x4a, 0x76, 0xd4, 0xce, 0x28, 0x86, 0xdb, 0x14, 0x6a, 0xa8, 0xca, 0x2d, 0xba, 0x5b, 0x1b, 0xa5, - 0x64, 0x27, 0xf0, 0xd0, 0x06, 0x31, 0xd7, 0x52, 0x8f, 0x98, 0x43, 0x40, 0xcc, 0xb5, 0x64, 0x2f, - 0xfd, 0x8d, 0xe0, 0x6c, 0x3c, 0x13, 0x59, 0x2f, 0x29, 0x96, 0x5b, 0x80, 0x5c, 0x67, 0x95, 0x39, - 0xc7, 0xc2, 0xf7, 0xa1, 0x60, 0x3e, 0x32, 0xa8, 0x4d, 0xea, 0x9e, 0xf0, 0xc5, 0x4b, 0x43, 0xa2, - 0xd0, 0x52, 0x9c, 0x39, 0x02, 0x26, 0x19, 0xe4, 0xcd, 0xc8, 0x17, 0xc7, 0x77, 0x61, 0xcc, 0x72, - 0x0c, 0x9b, 0x32, 0xee, 0x3b, 0x26, 0x2f, 0x0d, 0x0b, 0x97, 0x17, 0x13, 0x5d, 0xae, 0x76, 0x30, - 0xb5, 0x28, 0x7e, 0xf1, 0xa7, 0x09, 0x28, 0xc8, 0x9d, 0x0d, 0x6e, 0x74, 0x0f, 0x7f, 0x85, 0x60, - 0x3c, 0x2a, 0xe4, 0xf0, 0x95, 0x44, 0xef, 0x31, 0xe2, 0xb4, 0x7c, 0x35, 0x23, 0x2a, 0x48, 0xb4, - 0x56, 0x7c, 0xfa, 0xc7, 0x5f, 0xcf, 0x73, 0x05, 0x3c, 0x1e, 0x79, 0x47, 0x70, 0xfc, 0x2d, 0x02, - 0x38, 0xe8, 0x20, 0xbc, 0x98, 0xe1, 0xea, 0x0f, 0xf9, 0x64, 0x95, 0x34, 0xda, 0xac, 0x60, 0x32, - 0x8d, 0xa7, 0xa2, 0x4c, 0xf4, 0xbd, 0x68, 0x19, 0xec, 0xe3, 0x67, 0x08, 0xf2, 0xca, 0x21, 0x8c, - 0x93, 0xd7, 0x1d, 0x27, 0x30, 0xcb, 0xd3, 0x21, 0x2c, 0xf2, 0xfa, 0xa8, 0xdc, 0x0b, 0x5f, 0x1f, - 0xda, 0xb4, 0x20, 0x33, 0xa9, 0x29, 0x69, 0xa9, 0x86, 0xaa, 0x0b, 0x7f, 0x81, 0x20, 0xaf, 0x88, - 0xca, 0x14, 0x34, 0xe2, 0x44, 0x68, 0x12, 0x0d, 0x99, 0x93, 0xf9, 0xbe, 0x39, 0x79, 0x81, 0xe0, - 0x78, 0x97, 0xd2, 0xc4, 0xd7, 0x13, 0xe9, 0xc4, 0x0b, 0xdb, 0x24, 0x42, 0x6f, 0x08, 0x42, 0x17, - 0xb4, 0x57, 0xfb, 0x10, 0xaa, 0xb6, 0xa4, 0x6b, 0xfc, 0x2b, 0x02, 0xdc, 0x2b, 0xa4, 0x70, 0x35, - 0x4b, 0xa9, 0xaa, 0xd2, 0xaf, 0xbc, 0x34, 0x10, 0x56, 0x16, 0xfb, 0x45, 0xc1, 0xfe, 0x35, 0x3c, - 0xdb, 0x87, 0xbd, 0x2e, 0x35, 0x1d, 0xfe, 0x0e, 0xc1, 0x89, 0x6e, 0x45, 0x8b, 0xdf, 0x1c, 0x54, - 0x04, 0x97, 0xe3, 0x24, 0x86, 0x76, 0x5d, 0x10, 0x5a, 0xc0, 0x7a, 0x0a, 0x42, 0xfa, 0x5e, 0x47, - 0xa9, 0xef, 0xe3, 0xef, 0x11, 0x4c, 0xc4, 0xc8, 0x43, 0xbc, 0x94, 0xad, 0x1b, 0x52, 0x50, 0x5c, - 0x12, 0x14, 0xaf, 0x6a, 0x69, 0x72, 0x56, 0xed, 0x52, 0x57, 0xf8, 0x07, 0x04, 0xb8, 0x57, 0x8e, - 0xa5, 0x28, 0x80, 0x43, 0xc5, 0x67, 0x52, 0x81, 0x5e, 0x15, 0x74, 0x75, 0x6d, 0x3e, 0x0d, 0x5d, - 0x2e, 0xa2, 0x54, 0xd1, 0x3c, 0xfe, 0x4d, 0x7d, 0xf2, 0x87, 0xfa, 0x05, 0x67, 0x2a, 0xb7, 0x2e, - 0x2d, 0x56, 0xbe, 0x39, 0x18, 0x58, 0x16, 0xab, 0x6c, 0x35, 0xdc, 0xaf, 0xd5, 0xf4, 0x8e, 0x34, - 0xfa, 0x19, 0x29, 0x2f, 0xf0, 0xc0, 0x8c, 0x6f, 0x64, 0x39, 0xb8, 0x15, 0x9d, 0x54, 0x4e, 0xad, - 0xcf, 0xb4, 0x1b, 0x82, 0xe8, 0x65, 0xbc, 0x90, 0x86, 0xa8, 0xbe, 0x77, 0x20, 0xad, 0xf6, 0xf1, - 0x8f, 0xa8, 0xfb, 0xfd, 0x2f, 0x89, 0xdf, 0xcc, 0x78, 0xaa, 0xab, 0xdc, 0x53, 0xd6, 0x48, 0xaa, - 0xcc, 0x56, 0x43, 0xe5, 0x8d, 0x7f, 0x47, 0x50, 0x8c, 0x13, 0x2d, 0x29, 0xc8, 0xf6, 0x51, 0x5d, - 0xe5, 0xb7, 0x06, 0x44, 0xab, 0x65, 0xa2, 0x9d, 0x57, 0x6e, 0x2a, 0x3b, 0x06, 0xd2, 0xae, 0xf3, - 0xaf, 0x11, 0xe4, 0x15, 0xf1, 0x9a, 0xe2, 0xe2, 0x8a, 0x13, 0xbb, 0x49, 0x29, 0xbe, 0x24, 0x58, - 0xbd, 0xae, 0x69, 0xfd, 0xee, 0x09, 0x22, 0x1c, 0xb7, 0x69, 0xbd, 0x40, 0x50, 0x50, 0x75, 0x2f, - 0xbe, 0x96, 0x42, 0x63, 0xf1, 0xec, 0xc4, 0x2a, 0x82, 0xd8, 0x5c, 0xdf, 0xe3, 0xac, 0x6a, 0x05, - 0x9e, 0xab, 0x68, 0x7e, 0xf9, 0x1b, 0x04, 0xb3, 0x26, 0x6b, 0x24, 0x91, 0x59, 0x9e, 0x50, 0x55, - 0xdd, 0x7a, 0x5b, 0xf8, 0xae, 0xa3, 0x87, 0xeb, 0x12, 0x67, 0x33, 0xd7, 0xa0, 0x76, 0x85, 0x79, - 0xb6, 0x6e, 0x13, 0x2a, 0x64, 0xb1, 0xfc, 0x5f, 0x6a, 0x34, 0x1d, 0x7e, 0xe8, 0x3f, 0xd3, 0xa5, - 0x1e, 0xe3, 0xcb, 0xdc, 0xf0, 0xed, 0x5b, 0x1b, 0x77, 0x37, 0x8f, 0x0a, 0x1f, 0x97, 0xff, 0x09, - 0x00, 0x00, 0xff, 0xff, 0x50, 0x43, 0x0b, 0xb9, 0x1c, 0x16, 0x00, 0x00, + // 1417 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0x4f, 0x6f, 0xdc, 0x44, + 0x14, 0x67, 0x36, 0x69, 0x9b, 0xbc, 0x64, 0xb7, 0xed, 0x64, 0x69, 0xb6, 0x9b, 0x46, 0x4d, 0x9d, + 0x52, 0xa2, 0x94, 0xae, 0xd5, 0xf4, 0x0f, 0x74, 0x53, 0x0e, 0x4d, 0x02, 0x55, 0x44, 0x4b, 0xa3, + 0x4d, 0x4b, 0x51, 0x01, 0xad, 0x1c, 0x7b, 0x62, 0x4c, 0xbd, 0x33, 0x8b, 0xc7, 0x9b, 0x90, 0x46, + 0xbd, 0x54, 0x95, 0x90, 0xe0, 0x84, 0x0a, 0xf4, 0x5e, 0x21, 0x0e, 0x5c, 0x39, 0x20, 0x71, 0x40, + 0xf0, 0x19, 0x80, 0x6f, 0xc0, 0x67, 0xe0, 0x8c, 0x3c, 0x1e, 0x6f, 0x3c, 0xbb, 0xce, 0xda, 0x8e, + 0x80, 0xa3, 0xdf, 0xf8, 0xf7, 0xde, 0x6f, 0xde, 0xbc, 0xf7, 0xe6, 0x67, 0xc3, 0x65, 0x9b, 0x31, + 0xdb, 0x25, 0xba, 0xd1, 0x76, 0x74, 0x4e, 0xbc, 0x2d, 0xc7, 0x24, 0x2d, 0x83, 0x1a, 0x36, 0x69, + 0x11, 0xea, 0xeb, 0x5b, 0x17, 0x55, 0xa3, 0x57, 0x6b, 0x7b, 0xcc, 0x67, 0xf8, 0x74, 0x88, 0xaa, + 0x19, 0x6d, 0xa7, 0xd6, 0x87, 0xaa, 0x6d, 0x5d, 0xac, 0x9e, 0x8a, 0xb9, 0x35, 0x28, 0x65, 0xbe, + 0xe1, 0x3b, 0x8c, 0xf2, 0x10, 0x5e, 0xad, 0xf4, 0x07, 0x95, 0x2b, 0x7a, 0x1a, 0x1d, 0x8f, 0x70, + 0xd6, 0xf1, 0x4c, 0x12, 0xb9, 0x9a, 0x95, 0x00, 0x97, 0x51, 0xdb, 0xeb, 0x50, 0xea, 0x50, 0x5b, + 0x67, 0x6d, 0xe2, 0x29, 0xf1, 0x4e, 0xca, 0x97, 0xc4, 0xd3, 0x46, 0x67, 0x53, 0x37, 0xe8, 0x8e, + 0x5c, 0x9a, 0xe9, 0x5d, 0xda, 0x74, 0x88, 0x6b, 0x35, 0x5b, 0x06, 0x7f, 0x28, 0xdf, 0x38, 0xd5, + 0xfb, 0x06, 0xf7, 0xbd, 0x8e, 0xe9, 0xcb, 0xd5, 0x49, 0xb9, 0xea, 0xb5, 0x4d, 0x9d, 0xfb, 0x86, + 0xdf, 0x91, 0x31, 0xb5, 0x17, 0x08, 0x26, 0x6e, 0x39, 0xdc, 0x5f, 0x0f, 0x77, 0xc1, 0x1b, 0xe4, + 0xd3, 0x0e, 0xe1, 0x3e, 0xae, 0xc1, 0x44, 0xdb, 0x63, 0x56, 0xc7, 0x24, 0x5e, 0xb3, 0xed, 0xb1, + 0x4f, 0x88, 0xe9, 0x37, 0x1d, 0xab, 0x82, 0x66, 0xd0, 0xdc, 0x68, 0xe3, 0x78, 0xb4, 0xb4, 0x16, + 0xae, 0xac, 0x5a, 0x78, 0x0a, 0x46, 0xdb, 0x86, 0x4d, 0x9a, 0xdc, 0x79, 0x44, 0x2a, 0x87, 0x66, + 0xd0, 0xdc, 0xa1, 0xc6, 0x48, 0x60, 0x58, 0x77, 0x1e, 0x11, 0x3c, 0x0d, 0x20, 0x16, 0x7d, 0xf6, + 0x90, 0xd0, 0xca, 0x61, 0xe1, 0x43, 0xbc, 0x7e, 0x37, 0x30, 0xe0, 0xd3, 0x30, 0x66, 0x32, 0xca, + 0x3b, 0x2d, 0xe2, 0x05, 0x31, 0x8e, 0x88, 0x75, 0x88, 0x4c, 0xab, 0x96, 0xf6, 0x25, 0x82, 0xb2, + 0x4a, 0x92, 0xb7, 0x19, 0xe5, 0x04, 0xbf, 0x03, 0x23, 0x32, 0xfd, 0xbc, 0x82, 0x66, 0x86, 0xe6, + 0xc6, 0x16, 0xf4, 0x5a, 0xca, 0x99, 0xd7, 0x6e, 0x8b, 0x27, 0x4b, 0xfa, 0x6a, 0x74, 0x1d, 0xe0, + 0x73, 0x70, 0x94, 0x92, 0xcf, 0xfc, 0x66, 0x8c, 0x6a, 0x41, 0x50, 0x29, 0x06, 0xe6, 0xb5, 0x88, + 0xae, 0x76, 0x15, 0x8e, 0xdf, 0x24, 0x11, 0x97, 0x28, 0x5f, 0x67, 0x60, 0x5c, 0x3a, 0x6a, 0x52, + 0xa3, 0x45, 0x64, 0xa2, 0xc6, 0xa4, 0xed, 0x5d, 0xa3, 0x45, 0x34, 0x03, 0xca, 0xcb, 0x1e, 0x31, + 0x7c, 0xd2, 0x03, 0x5d, 0x85, 0x23, 0xf2, 0x35, 0x81, 0x3a, 0xc0, 0x1e, 0x22, 0xbc, 0x76, 0x0d, + 0xca, 0x2b, 0xc4, 0x25, 0x7d, 0x21, 0x32, 0xb0, 0x5b, 0x84, 0x13, 0xf7, 0xa8, 0x75, 0x40, 0xb0, + 0x05, 0x93, 0x7d, 0x60, 0x79, 0x44, 0xff, 0xe2, 0xee, 0xfe, 0x44, 0x30, 0xb9, 0x97, 0xf9, 0x65, + 0x46, 0x37, 0x1d, 0x3b, 0x3b, 0xc9, 0xa0, 0x44, 0x4d, 0x81, 0x09, 0x8a, 0x2c, 0x3c, 0xd9, 0x91, + 0xd0, 0xb0, 0x6a, 0xe1, 0xfb, 0x30, 0xbc, 0xe5, 0x90, 0xed, 0xca, 0xd0, 0x0c, 0x9a, 0x2b, 0x2d, + 0x2c, 0xa7, 0x72, 0xdc, 0x87, 0x47, 0x2d, 0x7c, 0x7a, 0xcf, 0x21, 0xdb, 0x0d, 0xe1, 0x50, 0x3b, + 0x03, 0xb0, 0x67, 0xc3, 0xa3, 0x70, 0x68, 0xe9, 0xc6, 0xfa, 0xea, 0xf2, 0xb1, 0x97, 0xf0, 0x08, + 0x0c, 0xbf, 0x7d, 0xef, 0xd6, 0xad, 0x63, 0x48, 0x7b, 0x04, 0x27, 0x63, 0xd5, 0x1d, 0xbe, 0xcd, + 0x73, 0x6c, 0x4c, 0x6d, 0xaf, 0x42, 0x6f, 0x7b, 0x29, 0xad, 0x39, 0xa4, 0xb6, 0xa6, 0xf6, 0x04, + 0x41, 0x35, 0x29, 0xb8, 0x3c, 0xbd, 0xeb, 0x70, 0x34, 0x8a, 0x1e, 0xa6, 0x2a, 0xea, 0xb3, 0x89, + 0x78, 0x86, 0xa2, 0x93, 0x2a, 0x71, 0xc5, 0x4b, 0xe6, 0x8e, 0xda, 0x85, 0xaa, 0xd2, 0x19, 0xb9, + 0x8f, 0xb6, 0x0e, 0x25, 0x95, 0xa6, 0x88, 0xb3, 0x0f, 0xcb, 0xa2, 0xc2, 0x52, 0xfb, 0x09, 0xc1, + 0xc9, 0xf5, 0xce, 0x46, 0xcb, 0xf1, 0x43, 0xc3, 0xba, 0x18, 0xdc, 0x39, 0x82, 0x37, 0xa0, 0x28, + 0xeb, 0x2a, 0x9c, 0xf9, 0x32, 0xf6, 0x85, 0xd4, 0x1a, 0x52, 0xe2, 0x8d, 0x9b, 0xb1, 0x27, 0x3c, + 0x0b, 0xc5, 0x2d, 0xc3, 0x75, 0x2c, 0xc3, 0x27, 0x4d, 0x46, 0xdd, 0x1d, 0x71, 0x6e, 0x23, 0x8d, + 0xf1, 0xc8, 0x78, 0x87, 0xba, 0x3b, 0xda, 0xfb, 0x50, 0x4d, 0x22, 0x2e, 0x8f, 0xae, 0x3f, 0x27, + 0x28, 0x73, 0x4e, 0x9e, 0x22, 0x98, 0x52, 0x67, 0x15, 0x73, 0x5d, 0xd6, 0xf1, 0x73, 0x64, 0x65, + 0x09, 0x8e, 0x78, 0x21, 0x48, 0xe6, 0x63, 0x2e, 0x35, 0x1f, 0x51, 0x90, 0x08, 0xa8, 0x3d, 0x53, + 0x8b, 0x53, 0xae, 0xff, 0x4f, 0xad, 0x81, 0x4f, 0xc0, 0xe1, 0x4d, 0xc7, 0xf5, 0x89, 0x57, 0x19, + 0x16, 0x38, 0xf9, 0x14, 0xdc, 0x46, 0x53, 0x89, 0xac, 0x64, 0xe2, 0x57, 0x60, 0x44, 0x6e, 0x20, + 0x6a, 0x96, 0xec, 0x5b, 0xef, 0x22, 0x33, 0xf7, 0xce, 0x87, 0x50, 0x89, 0xdd, 0x46, 0xb9, 0x8f, + 0x69, 0x1a, 0x40, 0x86, 0xdc, 0x9b, 0x8a, 0xa3, 0xd2, 0xb2, 0x6a, 0x69, 0x0f, 0xa0, 0xfc, 0x16, + 0x35, 0x36, 0xdc, 0xfc, 0x77, 0x42, 0xef, 0xad, 0x5e, 0xe8, 0xbb, 0xd5, 0x3f, 0x80, 0x97, 0x57, + 0x1c, 0xfe, 0x1f, 0x39, 0xff, 0x1c, 0xc1, 0xd4, 0x4d, 0x42, 0x03, 0x85, 0xd5, 0x1d, 0x27, 0x6d, + 0xe6, 0x75, 0x53, 0x73, 0x09, 0x80, 0x92, 0x6d, 0xb5, 0x33, 0xca, 0xd1, 0x31, 0x45, 0x1a, 0xaa, + 0x76, 0x83, 0xee, 0x34, 0x46, 0x29, 0xd9, 0x0e, 0x3d, 0x04, 0x20, 0xe6, 0x5a, 0xea, 0x88, 0xd9, + 0x07, 0xc4, 0x5c, 0x4b, 0xf6, 0xd2, 0xdf, 0x08, 0x4e, 0x25, 0x33, 0x91, 0xf5, 0x92, 0x61, 0xbb, + 0x25, 0x28, 0x74, 0x77, 0x59, 0x70, 0x2c, 0x7c, 0x17, 0x4a, 0xe6, 0xc7, 0x06, 0xb5, 0x49, 0xd3, + 0x13, 0xbe, 0x78, 0x65, 0x48, 0x14, 0x5a, 0x86, 0x99, 0x23, 0x60, 0x92, 0x41, 0xd1, 0x8c, 0x3d, + 0x71, 0x7c, 0x1b, 0xc6, 0x2c, 0xc7, 0xb0, 0x29, 0xe3, 0xbe, 0x63, 0xf2, 0xca, 0xb0, 0x70, 0x79, + 0x3e, 0xd5, 0xe5, 0x4a, 0x17, 0xd3, 0x88, 0xe3, 0x17, 0xfe, 0x98, 0x80, 0x92, 0x3c, 0xd9, 0xf0, + 0x46, 0xf7, 0xf0, 0x57, 0x08, 0xc6, 0xe3, 0x42, 0x0e, 0x5f, 0x4e, 0xf5, 0x9e, 0x20, 0x4e, 0xab, + 0x57, 0x72, 0xa2, 0xc2, 0x44, 0x6b, 0xe5, 0x27, 0xbf, 0xff, 0xf5, 0xac, 0x50, 0xc2, 0xe3, 0xb1, + 0x0f, 0x06, 0x8e, 0xbf, 0x45, 0x00, 0x7b, 0x1d, 0x84, 0x17, 0x72, 0x5c, 0xfd, 0x11, 0x9f, 0xbc, + 0x92, 0x46, 0x9b, 0x15, 0x4c, 0xa6, 0xf1, 0x54, 0x9c, 0x89, 0xbe, 0x1b, 0x2f, 0x83, 0xc7, 0xf8, + 0x29, 0x82, 0xa2, 0x32, 0x84, 0x71, 0xfa, 0xbe, 0x93, 0x04, 0x66, 0x75, 0x3a, 0x82, 0xc5, 0xbe, + 0x3e, 0x6a, 0x77, 0xa2, 0xaf, 0x0f, 0x6d, 0x5a, 0x90, 0x99, 0xd4, 0x94, 0xb4, 0xd4, 0x23, 0xd5, + 0x85, 0xbf, 0x40, 0x50, 0x54, 0x44, 0x65, 0x06, 0x1a, 0x49, 0x22, 0x34, 0x8d, 0x86, 0xcc, 0xc9, + 0xfc, 0xc0, 0x9c, 0x3c, 0x47, 0x70, 0xb4, 0x47, 0x69, 0xe2, 0xd7, 0x53, 0xe9, 0x24, 0x0b, 0xdb, + 0x34, 0x42, 0xaf, 0x09, 0x42, 0xe7, 0xb4, 0xb3, 0x03, 0x08, 0xd5, 0x3b, 0xd2, 0x35, 0xfe, 0x19, + 0x01, 0xee, 0x17, 0x52, 0xb8, 0x9e, 0xa7, 0x54, 0x55, 0xe9, 0x57, 0x5d, 0x3c, 0x10, 0x56, 0x16, + 0xfb, 0x79, 0xc1, 0xfe, 0x15, 0x3c, 0x3b, 0x80, 0xbd, 0x2e, 0x35, 0x1d, 0xfe, 0x15, 0xc1, 0xb1, + 0x5e, 0x45, 0x8b, 0xdf, 0x38, 0xa8, 0x08, 0xae, 0x26, 0x49, 0x0c, 0xed, 0x23, 0x41, 0xe8, 0x3e, + 0xd6, 0x33, 0x10, 0xd2, 0x77, 0xbb, 0x4a, 0xfd, 0xf1, 0x83, 0xb3, 0x58, 0x4b, 0x87, 0xe0, 0xef, + 0x10, 0x4c, 0x24, 0x88, 0x48, 0xbc, 0x98, 0xaf, 0x67, 0x32, 0x6c, 0x64, 0x51, 0x6c, 0xe4, 0x8a, + 0x96, 0x25, 0xb3, 0xf5, 0x1e, 0x0d, 0x86, 0xbf, 0x47, 0x80, 0xfb, 0x45, 0x5b, 0x86, 0x32, 0xd9, + 0x57, 0xa2, 0xa6, 0x95, 0xf1, 0x15, 0x41, 0x57, 0xd7, 0xe6, 0xb3, 0xd0, 0xe5, 0x22, 0x4a, 0x1d, + 0xcd, 0xe3, 0x5f, 0xd4, 0x1f, 0x03, 0x91, 0xca, 0xc1, 0xb9, 0x8a, 0xb2, 0x47, 0xb1, 0x55, 0xaf, + 0x1f, 0x0c, 0x2c, 0x4b, 0x5a, 0x36, 0x24, 0x1e, 0xd4, 0x90, 0x7a, 0x57, 0x40, 0xfd, 0x88, 0x94, + 0xef, 0xf4, 0xd0, 0x8c, 0xaf, 0xe5, 0x19, 0xef, 0x8a, 0x9a, 0xaa, 0x66, 0x56, 0x71, 0xda, 0x35, + 0x41, 0xf4, 0x12, 0xbe, 0x98, 0x85, 0xa8, 0xbe, 0xbb, 0x27, 0xc0, 0x1e, 0xe3, 0x1f, 0x50, 0xef, + 0x5f, 0x02, 0x49, 0xfc, 0x7a, 0xce, 0xd9, 0xaf, 0x72, 0xcf, 0x58, 0x23, 0x99, 0x32, 0x5b, 0x8f, + 0xf4, 0x39, 0xfe, 0x0d, 0x41, 0x39, 0x49, 0xda, 0x64, 0x20, 0x3b, 0x40, 0x9b, 0x55, 0xdf, 0x3c, + 0x20, 0x5a, 0x2d, 0x13, 0xed, 0x8c, 0x72, 0x9f, 0xd9, 0x09, 0x90, 0xa0, 0xce, 0xbf, 0x46, 0x50, + 0x54, 0x24, 0x6e, 0x86, 0xeb, 0x2d, 0x49, 0x12, 0xa7, 0xa5, 0xf8, 0x82, 0x60, 0xf5, 0xaa, 0x36, + 0x68, 0x96, 0xd5, 0x89, 0x70, 0x1c, 0xd0, 0x7a, 0x8e, 0xa0, 0xa4, 0xaa, 0x63, 0x7c, 0x35, 0x83, + 0x12, 0xe3, 0xf9, 0x89, 0xd5, 0x04, 0xb1, 0xb9, 0x81, 0xe3, 0xac, 0x6e, 0x85, 0x9e, 0xeb, 0x68, + 0x7e, 0xe9, 0x1b, 0x04, 0xb3, 0x26, 0x6b, 0xa5, 0x91, 0x59, 0x9a, 0x50, 0xb5, 0xdf, 0x5a, 0x20, + 0x8f, 0xd7, 0xd0, 0x83, 0x35, 0x89, 0xb3, 0x99, 0x6b, 0x50, 0xbb, 0xc6, 0x3c, 0x5b, 0xb7, 0x09, + 0x15, 0xe2, 0x59, 0xfe, 0x55, 0x35, 0xda, 0x0e, 0xdf, 0xf7, 0xcf, 0xea, 0x62, 0x9f, 0xf1, 0x45, + 0x61, 0xf8, 0xe6, 0x8d, 0xf5, 0xdb, 0x1b, 0x87, 0x85, 0x8f, 0x4b, 0xff, 0x04, 0x00, 0x00, 0xff, + 0xff, 0xc1, 0x4b, 0xa8, 0xee, 0x2b, 0x16, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/appengine/legacy/audit_data.pb.go b/vendor/google.golang.org/genproto/googleapis/appengine/legacy/audit_data.pb.go index 0265460..48c409a 100644 --- a/vendor/google.golang.org/genproto/googleapis/appengine/legacy/audit_data.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/appengine/legacy/audit_data.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/appengine/legacy/audit_data.proto -// DO NOT EDIT! /* Package legacy is a generated protocol buffer package. diff --git a/vendor/google.golang.org/genproto/googleapis/appengine/logging/v1/request_log.pb.go b/vendor/google.golang.org/genproto/googleapis/appengine/logging/v1/request_log.pb.go index 4f285cc..7fb8990 100644 --- a/vendor/google.golang.org/genproto/googleapis/appengine/logging/v1/request_log.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/appengine/logging/v1/request_log.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/appengine/logging/v1/request_log.proto -// DO NOT EDIT! /* Package logging is a generated protocol buffer package. diff --git a/vendor/google.golang.org/genproto/googleapis/appengine/v1/app_yaml.pb.go b/vendor/google.golang.org/genproto/googleapis/appengine/v1/app_yaml.pb.go index 7d56552..af25606 100644 --- a/vendor/google.golang.org/genproto/googleapis/appengine/v1/app_yaml.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/appengine/v1/app_yaml.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/appengine/v1/app_yaml.proto -// DO NOT EDIT! /* Package appengine is a generated protocol buffer package. @@ -9,6 +8,7 @@ It is generated from these files: google/appengine/v1/app_yaml.proto google/appengine/v1/appengine.proto google/appengine/v1/application.proto + google/appengine/v1/audit_data.proto google/appengine/v1/deploy.proto google/appengine/v1/instance.proto google/appengine/v1/location.proto @@ -45,6 +45,9 @@ It has these top-level messages: DebugInstanceRequest Application UrlDispatchRule + AuditData + UpdateServiceMethod + CreateVersionMethod Deployment FileInfo ContainerInfo diff --git a/vendor/google.golang.org/genproto/googleapis/appengine/v1/appengine.pb.go b/vendor/google.golang.org/genproto/googleapis/appengine/v1/appengine.pb.go index 24d32d8..d4ce9ee 100644 --- a/vendor/google.golang.org/genproto/googleapis/appengine/v1/appengine.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/appengine/v1/appengine.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/appengine/v1/appengine.proto -// DO NOT EDIT! package appengine diff --git a/vendor/google.golang.org/genproto/googleapis/appengine/v1/application.pb.go b/vendor/google.golang.org/genproto/googleapis/appengine/v1/application.pb.go index 03c7822..e029d64 100644 --- a/vendor/google.golang.org/genproto/googleapis/appengine/v1/application.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/appengine/v1/application.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/appengine/v1/application.proto -// DO NOT EDIT! package appengine diff --git a/vendor/google.golang.org/genproto/googleapis/appengine/v1/audit_data.pb.go b/vendor/google.golang.org/genproto/googleapis/appengine/v1/audit_data.pb.go new file mode 100644 index 0000000..3bd16a7 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/appengine/v1/audit_data.pb.go @@ -0,0 +1,208 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/appengine/v1/audit_data.proto + +package appengine + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/iam/v1" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// App Engine admin service audit log. +type AuditData struct { + // Detailed information about methods that require it. Does not include + // simple Get, List or Delete methods because all significant information + // (resource name, number of returned elements for List operations) is already + // included in parent audit log message. + // + // Types that are valid to be assigned to Method: + // *AuditData_UpdateService + // *AuditData_CreateVersion + Method isAuditData_Method `protobuf_oneof:"method"` +} + +func (m *AuditData) Reset() { *m = AuditData{} } +func (m *AuditData) String() string { return proto.CompactTextString(m) } +func (*AuditData) ProtoMessage() {} +func (*AuditData) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0} } + +type isAuditData_Method interface { + isAuditData_Method() +} + +type AuditData_UpdateService struct { + UpdateService *UpdateServiceMethod `protobuf:"bytes,1,opt,name=update_service,json=updateService,oneof"` +} +type AuditData_CreateVersion struct { + CreateVersion *CreateVersionMethod `protobuf:"bytes,2,opt,name=create_version,json=createVersion,oneof"` +} + +func (*AuditData_UpdateService) isAuditData_Method() {} +func (*AuditData_CreateVersion) isAuditData_Method() {} + +func (m *AuditData) GetMethod() isAuditData_Method { + if m != nil { + return m.Method + } + return nil +} + +func (m *AuditData) GetUpdateService() *UpdateServiceMethod { + if x, ok := m.GetMethod().(*AuditData_UpdateService); ok { + return x.UpdateService + } + return nil +} + +func (m *AuditData) GetCreateVersion() *CreateVersionMethod { + if x, ok := m.GetMethod().(*AuditData_CreateVersion); ok { + return x.CreateVersion + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*AuditData) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _AuditData_OneofMarshaler, _AuditData_OneofUnmarshaler, _AuditData_OneofSizer, []interface{}{ + (*AuditData_UpdateService)(nil), + (*AuditData_CreateVersion)(nil), + } +} + +func _AuditData_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*AuditData) + // method + switch x := m.Method.(type) { + case *AuditData_UpdateService: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.UpdateService); err != nil { + return err + } + case *AuditData_CreateVersion: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.CreateVersion); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("AuditData.Method has unexpected type %T", x) + } + return nil +} + +func _AuditData_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*AuditData) + switch tag { + case 1: // method.update_service + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(UpdateServiceMethod) + err := b.DecodeMessage(msg) + m.Method = &AuditData_UpdateService{msg} + return true, err + case 2: // method.create_version + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CreateVersionMethod) + err := b.DecodeMessage(msg) + m.Method = &AuditData_CreateVersion{msg} + return true, err + default: + return false, nil + } +} + +func _AuditData_OneofSizer(msg proto.Message) (n int) { + m := msg.(*AuditData) + // method + switch x := m.Method.(type) { + case *AuditData_UpdateService: + s := proto.Size(x.UpdateService) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *AuditData_CreateVersion: + s := proto.Size(x.CreateVersion) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Detailed information about UpdateService call. +type UpdateServiceMethod struct { + // Update service request. + Request *UpdateServiceRequest `protobuf:"bytes,1,opt,name=request" json:"request,omitempty"` +} + +func (m *UpdateServiceMethod) Reset() { *m = UpdateServiceMethod{} } +func (m *UpdateServiceMethod) String() string { return proto.CompactTextString(m) } +func (*UpdateServiceMethod) ProtoMessage() {} +func (*UpdateServiceMethod) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{1} } + +func (m *UpdateServiceMethod) GetRequest() *UpdateServiceRequest { + if m != nil { + return m.Request + } + return nil +} + +// Detailed information about CreateVersion call. +type CreateVersionMethod struct { + // Create version request. + Request *CreateVersionRequest `protobuf:"bytes,1,opt,name=request" json:"request,omitempty"` +} + +func (m *CreateVersionMethod) Reset() { *m = CreateVersionMethod{} } +func (m *CreateVersionMethod) String() string { return proto.CompactTextString(m) } +func (*CreateVersionMethod) ProtoMessage() {} +func (*CreateVersionMethod) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{2} } + +func (m *CreateVersionMethod) GetRequest() *CreateVersionRequest { + if m != nil { + return m.Request + } + return nil +} + +func init() { + proto.RegisterType((*AuditData)(nil), "google.appengine.v1.AuditData") + proto.RegisterType((*UpdateServiceMethod)(nil), "google.appengine.v1.UpdateServiceMethod") + proto.RegisterType((*CreateVersionMethod)(nil), "google.appengine.v1.CreateVersionMethod") +} + +func init() { proto.RegisterFile("google/appengine/v1/audit_data.proto", fileDescriptor3) } + +var fileDescriptor3 = []byte{ + // 290 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xb1, 0x4e, 0xc3, 0x30, + 0x10, 0x86, 0x09, 0x43, 0x01, 0x23, 0x3a, 0xa4, 0x03, 0x55, 0x07, 0x84, 0x0a, 0x43, 0x59, 0x1c, + 0x15, 0x46, 0x58, 0x48, 0x19, 0x58, 0x90, 0x4a, 0x10, 0x0c, 0x5d, 0xa2, 0x23, 0x39, 0x19, 0x4b, + 0x49, 0x6c, 0x1c, 0x27, 0x12, 0xcf, 0xc6, 0xcb, 0x21, 0xdb, 0x21, 0xb4, 0xc8, 0x82, 0x8e, 0xb9, + 0xfb, 0xfe, 0x2f, 0xbf, 0x74, 0x26, 0xe7, 0x4c, 0x08, 0x56, 0x60, 0x04, 0x52, 0x62, 0xc5, 0x78, + 0x85, 0x51, 0x3b, 0x8f, 0xa0, 0xc9, 0xb9, 0x4e, 0x73, 0xd0, 0x40, 0xa5, 0x12, 0x5a, 0x84, 0x23, + 0x47, 0xd1, 0x9e, 0xa2, 0xed, 0x7c, 0x72, 0xe6, 0x8d, 0xf6, 0x84, 0x4d, 0x4e, 0x4e, 0x3a, 0x88, + 0x43, 0x69, 0xd6, 0x1c, 0xca, 0x54, 0x8a, 0x82, 0x67, 0x1f, 0x6e, 0x3f, 0xfd, 0x0c, 0xc8, 0xc1, + 0xad, 0xf9, 0xdd, 0x1d, 0x68, 0x08, 0x1f, 0xc9, 0xb0, 0x91, 0x39, 0x68, 0x4c, 0x6b, 0x54, 0x2d, + 0xcf, 0x70, 0x1c, 0x9c, 0x06, 0xb3, 0xc3, 0xcb, 0x19, 0xf5, 0x14, 0xa0, 0xcf, 0x16, 0x7d, 0x72, + 0xe4, 0x03, 0xea, 0x37, 0x91, 0xdf, 0xef, 0x24, 0x47, 0xcd, 0xfa, 0xd8, 0x28, 0x33, 0x85, 0x46, + 0xd9, 0xa2, 0xaa, 0xb9, 0xa8, 0xc6, 0xbb, 0x7f, 0x28, 0x17, 0x16, 0x7d, 0x71, 0xe4, 0x8f, 0x32, + 0x5b, 0x1f, 0xc7, 0xfb, 0x64, 0x50, 0xda, 0xd5, 0x74, 0x45, 0x46, 0x9e, 0x12, 0xe1, 0x82, 0xec, + 0x29, 0x7c, 0x6f, 0xb0, 0xd6, 0x5d, 0xff, 0x8b, 0xff, 0xfb, 0x27, 0x2e, 0x90, 0x7c, 0x27, 0x8d, + 0xdb, 0xd3, 0x66, 0x5b, 0xf7, 0x46, 0xf4, 0xb7, 0x3b, 0xe6, 0xe4, 0x38, 0x13, 0xa5, 0x2f, 0x18, + 0x0f, 0xfb, 0x6b, 0x2c, 0xcd, 0x81, 0x96, 0xc1, 0xea, 0xa6, 0xc3, 0x98, 0x28, 0xa0, 0x62, 0x54, + 0x28, 0x16, 0x31, 0xac, 0xec, 0xf9, 0x22, 0xb7, 0x02, 0xc9, 0xeb, 0x8d, 0x67, 0x70, 0xdd, 0x7f, + 0xbc, 0x0e, 0x2c, 0x78, 0xf5, 0x15, 0x00, 0x00, 0xff, 0xff, 0xdb, 0x56, 0x80, 0x49, 0x69, 0x02, + 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/appengine/v1/deploy.pb.go b/vendor/google.golang.org/genproto/googleapis/appengine/v1/deploy.pb.go index ffc4397..46ce408 100644 --- a/vendor/google.golang.org/genproto/googleapis/appengine/v1/deploy.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/appengine/v1/deploy.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/appengine/v1/deploy.proto -// DO NOT EDIT! package appengine @@ -30,7 +29,7 @@ type Deployment struct { func (m *Deployment) Reset() { *m = Deployment{} } func (m *Deployment) String() string { return proto.CompactTextString(m) } func (*Deployment) ProtoMessage() {} -func (*Deployment) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0} } +func (*Deployment) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{0} } func (m *Deployment) GetFiles() map[string]*FileInfo { if m != nil { @@ -71,7 +70,7 @@ type FileInfo struct { func (m *FileInfo) Reset() { *m = FileInfo{} } func (m *FileInfo) String() string { return proto.CompactTextString(m) } func (*FileInfo) ProtoMessage() {} -func (*FileInfo) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{1} } +func (*FileInfo) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{1} } func (m *FileInfo) GetSourceUrl() string { if m != nil { @@ -106,7 +105,7 @@ type ContainerInfo struct { func (m *ContainerInfo) Reset() { *m = ContainerInfo{} } func (m *ContainerInfo) String() string { return proto.CompactTextString(m) } func (*ContainerInfo) ProtoMessage() {} -func (*ContainerInfo) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{2} } +func (*ContainerInfo) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{2} } func (m *ContainerInfo) GetImage() string { if m != nil { @@ -129,7 +128,7 @@ type ZipInfo struct { func (m *ZipInfo) Reset() { *m = ZipInfo{} } func (m *ZipInfo) String() string { return proto.CompactTextString(m) } func (*ZipInfo) ProtoMessage() {} -func (*ZipInfo) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{3} } +func (*ZipInfo) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{3} } func (m *ZipInfo) GetSourceUrl() string { if m != nil { @@ -152,9 +151,9 @@ func init() { proto.RegisterType((*ZipInfo)(nil), "google.appengine.v1.ZipInfo") } -func init() { proto.RegisterFile("google/appengine/v1/deploy.proto", fileDescriptor3) } +func init() { proto.RegisterFile("google/appengine/v1/deploy.proto", fileDescriptor4) } -var fileDescriptor3 = []byte{ +var fileDescriptor4 = []byte{ // 394 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x92, 0xd1, 0xab, 0xd3, 0x30, 0x14, 0xc6, 0xe9, 0x6a, 0xbd, 0xeb, 0x29, 0x82, 0x44, 0xc1, 0x7a, 0xbd, 0x17, 0x4b, 0x41, 0x28, diff --git a/vendor/google.golang.org/genproto/googleapis/appengine/v1/instance.pb.go b/vendor/google.golang.org/genproto/googleapis/appengine/v1/instance.pb.go index 591da0d..d2948ac 100644 --- a/vendor/google.golang.org/genproto/googleapis/appengine/v1/instance.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/appengine/v1/instance.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/appengine/v1/instance.proto -// DO NOT EDIT! package appengine @@ -38,7 +37,7 @@ var Instance_Availability_value = map[string]int32{ func (x Instance_Availability) String() string { return proto.EnumName(Instance_Availability_name, int32(x)) } -func (Instance_Availability) EnumDescriptor() ([]byte, []int) { return fileDescriptor4, []int{0, 0} } +func (Instance_Availability) EnumDescriptor() ([]byte, []int) { return fileDescriptor5, []int{0, 0} } // An Instance resource is the computing unit that App Engine uses to // automatically scale an application. @@ -115,7 +114,7 @@ type Instance struct { func (m *Instance) Reset() { *m = Instance{} } func (m *Instance) String() string { return proto.CompactTextString(m) } func (*Instance) ProtoMessage() {} -func (*Instance) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{0} } +func (*Instance) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{0} } func (m *Instance) GetName() string { if m != nil { @@ -227,9 +226,9 @@ func init() { proto.RegisterEnum("google.appengine.v1.Instance_Availability", Instance_Availability_name, Instance_Availability_value) } -func init() { proto.RegisterFile("google/appengine/v1/instance.proto", fileDescriptor4) } +func init() { proto.RegisterFile("google/appengine/v1/instance.proto", fileDescriptor5) } -var fileDescriptor4 = []byte{ +var fileDescriptor5 = []byte{ // 521 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x53, 0x5d, 0x6b, 0xdb, 0x3c, 0x14, 0x7e, 0x9d, 0xb6, 0xa9, 0x73, 0xe2, 0x26, 0x46, 0x85, 0xb7, 0x22, 0x1b, 0xcc, 0xcb, 0xcd, diff --git a/vendor/google.golang.org/genproto/googleapis/appengine/v1/location.pb.go b/vendor/google.golang.org/genproto/googleapis/appengine/v1/location.pb.go index 9b2309a..83d2efd 100644 --- a/vendor/google.golang.org/genproto/googleapis/appengine/v1/location.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/appengine/v1/location.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/appengine/v1/location.proto -// DO NOT EDIT! package appengine @@ -30,7 +29,7 @@ type LocationMetadata struct { func (m *LocationMetadata) Reset() { *m = LocationMetadata{} } func (m *LocationMetadata) String() string { return proto.CompactTextString(m) } func (*LocationMetadata) ProtoMessage() {} -func (*LocationMetadata) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{0} } +func (*LocationMetadata) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{0} } func (m *LocationMetadata) GetStandardEnvironmentAvailable() bool { if m != nil { @@ -50,9 +49,9 @@ func init() { proto.RegisterType((*LocationMetadata)(nil), "google.appengine.v1.LocationMetadata") } -func init() { proto.RegisterFile("google/appengine/v1/location.proto", fileDescriptor5) } +func init() { proto.RegisterFile("google/appengine/v1/location.proto", fileDescriptor6) } -var fileDescriptor5 = []byte{ +var fileDescriptor6 = []byte{ // 236 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x90, 0x41, 0x4b, 0xc3, 0x40, 0x10, 0x85, 0x89, 0x88, 0x48, 0x40, 0x90, 0x7a, 0xb0, 0x94, 0x22, 0xd2, 0x93, 0xa7, 0x5d, 0x8a, diff --git a/vendor/google.golang.org/genproto/googleapis/appengine/v1/operation.pb.go b/vendor/google.golang.org/genproto/googleapis/appengine/v1/operation.pb.go index d5f5a00..2000f6f 100644 --- a/vendor/google.golang.org/genproto/googleapis/appengine/v1/operation.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/appengine/v1/operation.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/appengine/v1/operation.proto -// DO NOT EDIT! package appengine @@ -44,7 +43,7 @@ type OperationMetadataV1 struct { func (m *OperationMetadataV1) Reset() { *m = OperationMetadataV1{} } func (m *OperationMetadataV1) String() string { return proto.CompactTextString(m) } func (*OperationMetadataV1) ProtoMessage() {} -func (*OperationMetadataV1) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{0} } +func (*OperationMetadataV1) Descriptor() ([]byte, []int) { return fileDescriptor7, []int{0} } func (m *OperationMetadataV1) GetMethod() string { if m != nil { @@ -85,9 +84,9 @@ func init() { proto.RegisterType((*OperationMetadataV1)(nil), "google.appengine.v1.OperationMetadataV1") } -func init() { proto.RegisterFile("google/appengine/v1/operation.proto", fileDescriptor6) } +func init() { proto.RegisterFile("google/appengine/v1/operation.proto", fileDescriptor7) } -var fileDescriptor6 = []byte{ +var fileDescriptor7 = []byte{ // 271 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0x41, 0x4b, 0x03, 0x31, 0x10, 0x85, 0x59, 0xad, 0x55, 0x53, 0xf0, 0xb0, 0x05, 0x5d, 0x16, 0xc1, 0xa2, 0x97, 0x9e, 0x12, diff --git a/vendor/google.golang.org/genproto/googleapis/appengine/v1/service.pb.go b/vendor/google.golang.org/genproto/googleapis/appengine/v1/service.pb.go index 222cb13..0ccbde7 100644 --- a/vendor/google.golang.org/genproto/googleapis/appengine/v1/service.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/appengine/v1/service.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/appengine/v1/service.proto -// DO NOT EDIT! package appengine @@ -42,7 +41,7 @@ var TrafficSplit_ShardBy_value = map[string]int32{ func (x TrafficSplit_ShardBy) String() string { return proto.EnumName(TrafficSplit_ShardBy_name, int32(x)) } -func (TrafficSplit_ShardBy) EnumDescriptor() ([]byte, []int) { return fileDescriptor7, []int{1, 0} } +func (TrafficSplit_ShardBy) EnumDescriptor() ([]byte, []int) { return fileDescriptor8, []int{1, 0} } // A Service resource is a logical component of an application that can share // state and communicate in a secure fashion with other services. @@ -70,7 +69,7 @@ type Service struct { func (m *Service) Reset() { *m = Service{} } func (m *Service) String() string { return proto.CompactTextString(m) } func (*Service) ProtoMessage() {} -func (*Service) Descriptor() ([]byte, []int) { return fileDescriptor7, []int{0} } +func (*Service) Descriptor() ([]byte, []int) { return fileDescriptor8, []int{0} } func (m *Service) GetName() string { if m != nil { @@ -114,7 +113,7 @@ type TrafficSplit struct { func (m *TrafficSplit) Reset() { *m = TrafficSplit{} } func (m *TrafficSplit) String() string { return proto.CompactTextString(m) } func (*TrafficSplit) ProtoMessage() {} -func (*TrafficSplit) Descriptor() ([]byte, []int) { return fileDescriptor7, []int{1} } +func (*TrafficSplit) Descriptor() ([]byte, []int) { return fileDescriptor8, []int{1} } func (m *TrafficSplit) GetShardBy() TrafficSplit_ShardBy { if m != nil { @@ -136,9 +135,9 @@ func init() { proto.RegisterEnum("google.appengine.v1.TrafficSplit_ShardBy", TrafficSplit_ShardBy_name, TrafficSplit_ShardBy_value) } -func init() { proto.RegisterFile("google/appengine/v1/service.proto", fileDescriptor7) } +func init() { proto.RegisterFile("google/appengine/v1/service.proto", fileDescriptor8) } -var fileDescriptor7 = []byte{ +var fileDescriptor8 = []byte{ // 356 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0x51, 0x8b, 0xda, 0x40, 0x10, 0xc7, 0x9b, 0xb5, 0x6a, 0x3b, 0x11, 0x1b, 0xb6, 0x85, 0x06, 0xe9, 0x83, 0xfa, 0x64, 0x5f, diff --git a/vendor/google.golang.org/genproto/googleapis/appengine/v1/version.pb.go b/vendor/google.golang.org/genproto/googleapis/appengine/v1/version.pb.go index 331a9e5..21f86bf 100644 --- a/vendor/google.golang.org/genproto/googleapis/appengine/v1/version.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/appengine/v1/version.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/appengine/v1/version.proto -// DO NOT EDIT! package appengine @@ -67,7 +66,7 @@ var InboundServiceType_value = map[string]int32{ func (x InboundServiceType) String() string { return proto.EnumName(InboundServiceType_name, int32(x)) } -func (InboundServiceType) EnumDescriptor() ([]byte, []int) { return fileDescriptor8, []int{0} } +func (InboundServiceType) EnumDescriptor() ([]byte, []int) { return fileDescriptor9, []int{0} } // Run states of a version. type ServingStatus int32 @@ -98,7 +97,7 @@ var ServingStatus_value = map[string]int32{ func (x ServingStatus) String() string { return proto.EnumName(ServingStatus_name, int32(x)) } -func (ServingStatus) EnumDescriptor() ([]byte, []int) { return fileDescriptor8, []int{1} } +func (ServingStatus) EnumDescriptor() ([]byte, []int) { return fileDescriptor9, []int{1} } // A Version resource is a specific set of source code and configuration files // that are deployed into a service. @@ -222,7 +221,7 @@ type Version struct { func (m *Version) Reset() { *m = Version{} } func (m *Version) String() string { return proto.CompactTextString(m) } func (*Version) ProtoMessage() {} -func (*Version) Descriptor() ([]byte, []int) { return fileDescriptor8, []int{0} } +func (*Version) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{0} } type isVersion_Scaling interface { isVersion_Scaling() @@ -580,7 +579,7 @@ type AutomaticScaling struct { func (m *AutomaticScaling) Reset() { *m = AutomaticScaling{} } func (m *AutomaticScaling) String() string { return proto.CompactTextString(m) } func (*AutomaticScaling) ProtoMessage() {} -func (*AutomaticScaling) Descriptor() ([]byte, []int) { return fileDescriptor8, []int{1} } +func (*AutomaticScaling) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{1} } func (m *AutomaticScaling) GetCoolDownPeriod() *google_protobuf1.Duration { if m != nil { @@ -681,7 +680,7 @@ type BasicScaling struct { func (m *BasicScaling) Reset() { *m = BasicScaling{} } func (m *BasicScaling) String() string { return proto.CompactTextString(m) } func (*BasicScaling) ProtoMessage() {} -func (*BasicScaling) Descriptor() ([]byte, []int) { return fileDescriptor8, []int{2} } +func (*BasicScaling) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{2} } func (m *BasicScaling) GetIdleTimeout() *google_protobuf1.Duration { if m != nil { @@ -710,7 +709,7 @@ type ManualScaling struct { func (m *ManualScaling) Reset() { *m = ManualScaling{} } func (m *ManualScaling) String() string { return proto.CompactTextString(m) } func (*ManualScaling) ProtoMessage() {} -func (*ManualScaling) Descriptor() ([]byte, []int) { return fileDescriptor8, []int{3} } +func (*ManualScaling) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{3} } func (m *ManualScaling) GetInstances() int32 { if m != nil { @@ -731,7 +730,7 @@ type CpuUtilization struct { func (m *CpuUtilization) Reset() { *m = CpuUtilization{} } func (m *CpuUtilization) String() string { return proto.CompactTextString(m) } func (*CpuUtilization) ProtoMessage() {} -func (*CpuUtilization) Descriptor() ([]byte, []int) { return fileDescriptor8, []int{4} } +func (*CpuUtilization) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{4} } func (m *CpuUtilization) GetAggregationWindowLength() *google_protobuf1.Duration { if m != nil { @@ -758,7 +757,7 @@ type RequestUtilization struct { func (m *RequestUtilization) Reset() { *m = RequestUtilization{} } func (m *RequestUtilization) String() string { return proto.CompactTextString(m) } func (*RequestUtilization) ProtoMessage() {} -func (*RequestUtilization) Descriptor() ([]byte, []int) { return fileDescriptor8, []int{5} } +func (*RequestUtilization) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{5} } func (m *RequestUtilization) GetTargetRequestCountPerSecond() int32 { if m != nil { @@ -789,7 +788,7 @@ type DiskUtilization struct { func (m *DiskUtilization) Reset() { *m = DiskUtilization{} } func (m *DiskUtilization) String() string { return proto.CompactTextString(m) } func (*DiskUtilization) ProtoMessage() {} -func (*DiskUtilization) Descriptor() ([]byte, []int) { return fileDescriptor8, []int{6} } +func (*DiskUtilization) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{6} } func (m *DiskUtilization) GetTargetWriteBytesPerSecond() int32 { if m != nil { @@ -834,7 +833,7 @@ type NetworkUtilization struct { func (m *NetworkUtilization) Reset() { *m = NetworkUtilization{} } func (m *NetworkUtilization) String() string { return proto.CompactTextString(m) } func (*NetworkUtilization) ProtoMessage() {} -func (*NetworkUtilization) Descriptor() ([]byte, []int) { return fileDescriptor8, []int{7} } +func (*NetworkUtilization) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{7} } func (m *NetworkUtilization) GetTargetSentBytesPerSecond() int32 { if m != nil { @@ -881,7 +880,7 @@ type Network struct { func (m *Network) Reset() { *m = Network{} } func (m *Network) String() string { return proto.CompactTextString(m) } func (*Network) ProtoMessage() {} -func (*Network) Descriptor() ([]byte, []int) { return fileDescriptor8, []int{8} } +func (*Network) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{8} } func (m *Network) GetForwardedPorts() []string { if m != nil { @@ -917,7 +916,7 @@ type Resources struct { func (m *Resources) Reset() { *m = Resources{} } func (m *Resources) String() string { return proto.CompactTextString(m) } func (*Resources) ProtoMessage() {} -func (*Resources) Descriptor() ([]byte, []int) { return fileDescriptor8, []int{9} } +func (*Resources) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{9} } func (m *Resources) GetCpu() float64 { if m != nil { @@ -955,9 +954,9 @@ func init() { proto.RegisterEnum("google.appengine.v1.ServingStatus", ServingStatus_name, ServingStatus_value) } -func init() { proto.RegisterFile("google/appengine/v1/version.proto", fileDescriptor8) } +func init() { proto.RegisterFile("google/appengine/v1/version.proto", fileDescriptor9) } -var fileDescriptor8 = []byte{ +var fileDescriptor9 = []byte{ // 1767 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x58, 0x5d, 0x73, 0xdb, 0xc6, 0x15, 0x0d, 0x29, 0x4b, 0x14, 0x2f, 0x3f, 0x04, 0xad, 0xd3, 0x08, 0x96, 0x64, 0x89, 0x66, 0x92, diff --git a/vendor/google.golang.org/genproto/googleapis/assistant/embedded/v1alpha1/embedded_assistant.pb.go b/vendor/google.golang.org/genproto/googleapis/assistant/embedded/v1alpha1/embedded_assistant.pb.go index 94df28b..f3917fa 100644 --- a/vendor/google.golang.org/genproto/googleapis/assistant/embedded/v1alpha1/embedded_assistant.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/assistant/embedded/v1alpha1/embedded_assistant.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/assistant/embedded/v1alpha1/embedded_assistant.proto -// DO NOT EDIT! /* Package embedded is a generated protocol buffer package. @@ -216,7 +215,7 @@ func (m *ConverseConfig) GetConverseState() *ConverseState { // Specifies how to process the `audio_in` data that will be provided in // subsequent requests. For recommended settings, see the Google Assistant SDK -// [best practices](https://developers.google.com/assistant/best-practices). +// [best practices](https://developers.google.com/assistant/sdk/develop/grpc/best-practices/audio). type AudioInConfig struct { // *Required* Encoding of audio data sent in all `audio_in` messages. Encoding AudioInConfig_Encoding `protobuf:"varint,1,opt,name=encoding,enum=google.assistant.embedded.v1alpha1.AudioInConfig_Encoding" json:"encoding,omitempty"` diff --git a/vendor/google.golang.org/genproto/googleapis/assistant/embedded/v1alpha2/embedded_assistant.pb.go b/vendor/google.golang.org/genproto/googleapis/assistant/embedded/v1alpha2/embedded_assistant.pb.go new file mode 100644 index 0000000..b48a959 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/assistant/embedded/v1alpha2/embedded_assistant.pb.go @@ -0,0 +1,1196 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/assistant/embedded/v1alpha2/embedded_assistant.proto + +/* +Package embedded is a generated protocol buffer package. + +It is generated from these files: + google/assistant/embedded/v1alpha2/embedded_assistant.proto + +It has these top-level messages: + AssistConfig + AudioInConfig + AudioOutConfig + DialogStateIn + AudioOut + DialogStateOut + AssistRequest + AssistResponse + SpeechRecognitionResult + DeviceConfig + DeviceAction + DeviceLocation +*/ +package embedded + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_type "google.golang.org/genproto/googleapis/type/latlng" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Audio encoding of the data sent in the audio message. +// Audio must be one-channel (mono). The only language supported is "en-US". +type AudioInConfig_Encoding int32 + +const ( + // Not specified. Will return result [google.rpc.Code.INVALID_ARGUMENT][]. + AudioInConfig_ENCODING_UNSPECIFIED AudioInConfig_Encoding = 0 + // Uncompressed 16-bit signed little-endian samples (Linear PCM). + // This encoding includes no header, only the raw audio bytes. + AudioInConfig_LINEAR16 AudioInConfig_Encoding = 1 + // [`FLAC`](https://xiph.org/flac/documentation.html) (Free Lossless Audio + // Codec) is the recommended encoding because it is + // lossless--therefore recognition is not compromised--and + // requires only about half the bandwidth of `LINEAR16`. This encoding + // includes the `FLAC` stream header followed by audio data. It supports + // 16-bit and 24-bit samples, however, not all fields in `STREAMINFO` are + // supported. + AudioInConfig_FLAC AudioInConfig_Encoding = 2 +) + +var AudioInConfig_Encoding_name = map[int32]string{ + 0: "ENCODING_UNSPECIFIED", + 1: "LINEAR16", + 2: "FLAC", +} +var AudioInConfig_Encoding_value = map[string]int32{ + "ENCODING_UNSPECIFIED": 0, + "LINEAR16": 1, + "FLAC": 2, +} + +func (x AudioInConfig_Encoding) String() string { + return proto.EnumName(AudioInConfig_Encoding_name, int32(x)) +} +func (AudioInConfig_Encoding) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1, 0} } + +// Audio encoding of the data returned in the audio message. All encodings are +// raw audio bytes with no header, except as indicated below. +type AudioOutConfig_Encoding int32 + +const ( + // Not specified. Will return result [google.rpc.Code.INVALID_ARGUMENT][]. + AudioOutConfig_ENCODING_UNSPECIFIED AudioOutConfig_Encoding = 0 + // Uncompressed 16-bit signed little-endian samples (Linear PCM). + AudioOutConfig_LINEAR16 AudioOutConfig_Encoding = 1 + // MP3 audio encoding. The sample rate is encoded in the payload. + AudioOutConfig_MP3 AudioOutConfig_Encoding = 2 + // Opus-encoded audio wrapped in an ogg container. The result will be a + // file which can be played natively on Android and in some browsers (such + // as Chrome). The quality of the encoding is considerably higher than MP3 + // while using the same bitrate. The sample rate is encoded in the payload. + AudioOutConfig_OPUS_IN_OGG AudioOutConfig_Encoding = 3 +) + +var AudioOutConfig_Encoding_name = map[int32]string{ + 0: "ENCODING_UNSPECIFIED", + 1: "LINEAR16", + 2: "MP3", + 3: "OPUS_IN_OGG", +} +var AudioOutConfig_Encoding_value = map[string]int32{ + "ENCODING_UNSPECIFIED": 0, + "LINEAR16": 1, + "MP3": 2, + "OPUS_IN_OGG": 3, +} + +func (x AudioOutConfig_Encoding) String() string { + return proto.EnumName(AudioOutConfig_Encoding_name, int32(x)) +} +func (AudioOutConfig_Encoding) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} } + +// Possible states of the microphone after a `Assist` RPC completes. +type DialogStateOut_MicrophoneMode int32 + +const ( + // No mode specified. + DialogStateOut_MICROPHONE_MODE_UNSPECIFIED DialogStateOut_MicrophoneMode = 0 + // The service is not expecting a follow-on question from the user. + // The microphone should remain off until the user re-activates it. + DialogStateOut_CLOSE_MICROPHONE DialogStateOut_MicrophoneMode = 1 + // The service is expecting a follow-on question from the user. The + // microphone should be re-opened when the `AudioOut` playback completes + // (by starting a new `Assist` RPC call to send the new audio). + DialogStateOut_DIALOG_FOLLOW_ON DialogStateOut_MicrophoneMode = 2 +) + +var DialogStateOut_MicrophoneMode_name = map[int32]string{ + 0: "MICROPHONE_MODE_UNSPECIFIED", + 1: "CLOSE_MICROPHONE", + 2: "DIALOG_FOLLOW_ON", +} +var DialogStateOut_MicrophoneMode_value = map[string]int32{ + "MICROPHONE_MODE_UNSPECIFIED": 0, + "CLOSE_MICROPHONE": 1, + "DIALOG_FOLLOW_ON": 2, +} + +func (x DialogStateOut_MicrophoneMode) String() string { + return proto.EnumName(DialogStateOut_MicrophoneMode_name, int32(x)) +} +func (DialogStateOut_MicrophoneMode) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{5, 0} +} + +// Indicates the type of event. +type AssistResponse_EventType int32 + +const ( + // No event specified. + AssistResponse_EVENT_TYPE_UNSPECIFIED AssistResponse_EventType = 0 + // This event indicates that the server has detected the end of the user's + // speech utterance and expects no additional speech. Therefore, the server + // will not process additional audio (although it may subsequently return + // additional results). The client should stop sending additional audio + // data, half-close the gRPC connection, and wait for any additional results + // until the server closes the gRPC connection. + AssistResponse_END_OF_UTTERANCE AssistResponse_EventType = 1 +) + +var AssistResponse_EventType_name = map[int32]string{ + 0: "EVENT_TYPE_UNSPECIFIED", + 1: "END_OF_UTTERANCE", +} +var AssistResponse_EventType_value = map[string]int32{ + "EVENT_TYPE_UNSPECIFIED": 0, + "END_OF_UTTERANCE": 1, +} + +func (x AssistResponse_EventType) String() string { + return proto.EnumName(AssistResponse_EventType_name, int32(x)) +} +func (AssistResponse_EventType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{7, 0} } + +// Specifies how to process the `AssistRequest` messages. +type AssistConfig struct { + // Types that are valid to be assigned to Type: + // *AssistConfig_AudioInConfig + // *AssistConfig_TextQuery + Type isAssistConfig_Type `protobuf_oneof:"type"` + // *Required* Specifies how to format the audio that will be returned. + AudioOutConfig *AudioOutConfig `protobuf:"bytes,2,opt,name=audio_out_config,json=audioOutConfig" json:"audio_out_config,omitempty"` + // *Required* Represents the current dialog state. + DialogStateIn *DialogStateIn `protobuf:"bytes,3,opt,name=dialog_state_in,json=dialogStateIn" json:"dialog_state_in,omitempty"` + // Device configuration that uniquely identifies a specific device. + DeviceConfig *DeviceConfig `protobuf:"bytes,4,opt,name=device_config,json=deviceConfig" json:"device_config,omitempty"` +} + +func (m *AssistConfig) Reset() { *m = AssistConfig{} } +func (m *AssistConfig) String() string { return proto.CompactTextString(m) } +func (*AssistConfig) ProtoMessage() {} +func (*AssistConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +type isAssistConfig_Type interface { + isAssistConfig_Type() +} + +type AssistConfig_AudioInConfig struct { + AudioInConfig *AudioInConfig `protobuf:"bytes,1,opt,name=audio_in_config,json=audioInConfig,oneof"` +} +type AssistConfig_TextQuery struct { + TextQuery string `protobuf:"bytes,6,opt,name=text_query,json=textQuery,oneof"` +} + +func (*AssistConfig_AudioInConfig) isAssistConfig_Type() {} +func (*AssistConfig_TextQuery) isAssistConfig_Type() {} + +func (m *AssistConfig) GetType() isAssistConfig_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *AssistConfig) GetAudioInConfig() *AudioInConfig { + if x, ok := m.GetType().(*AssistConfig_AudioInConfig); ok { + return x.AudioInConfig + } + return nil +} + +func (m *AssistConfig) GetTextQuery() string { + if x, ok := m.GetType().(*AssistConfig_TextQuery); ok { + return x.TextQuery + } + return "" +} + +func (m *AssistConfig) GetAudioOutConfig() *AudioOutConfig { + if m != nil { + return m.AudioOutConfig + } + return nil +} + +func (m *AssistConfig) GetDialogStateIn() *DialogStateIn { + if m != nil { + return m.DialogStateIn + } + return nil +} + +func (m *AssistConfig) GetDeviceConfig() *DeviceConfig { + if m != nil { + return m.DeviceConfig + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*AssistConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _AssistConfig_OneofMarshaler, _AssistConfig_OneofUnmarshaler, _AssistConfig_OneofSizer, []interface{}{ + (*AssistConfig_AudioInConfig)(nil), + (*AssistConfig_TextQuery)(nil), + } +} + +func _AssistConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*AssistConfig) + // type + switch x := m.Type.(type) { + case *AssistConfig_AudioInConfig: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.AudioInConfig); err != nil { + return err + } + case *AssistConfig_TextQuery: + b.EncodeVarint(6<<3 | proto.WireBytes) + b.EncodeStringBytes(x.TextQuery) + case nil: + default: + return fmt.Errorf("AssistConfig.Type has unexpected type %T", x) + } + return nil +} + +func _AssistConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*AssistConfig) + switch tag { + case 1: // type.audio_in_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(AudioInConfig) + err := b.DecodeMessage(msg) + m.Type = &AssistConfig_AudioInConfig{msg} + return true, err + case 6: // type.text_query + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Type = &AssistConfig_TextQuery{x} + return true, err + default: + return false, nil + } +} + +func _AssistConfig_OneofSizer(msg proto.Message) (n int) { + m := msg.(*AssistConfig) + // type + switch x := m.Type.(type) { + case *AssistConfig_AudioInConfig: + s := proto.Size(x.AudioInConfig) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *AssistConfig_TextQuery: + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.TextQuery))) + n += len(x.TextQuery) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Specifies how to process the `audio_in` data that will be provided in +// subsequent requests. For recommended settings, see the Google Assistant SDK +// [best practices](https://developers.google.com/assistant/sdk/guides/service/python/best-practices/audio). +type AudioInConfig struct { + // *Required* Encoding of audio data sent in all `audio_in` messages. + Encoding AudioInConfig_Encoding `protobuf:"varint,1,opt,name=encoding,enum=google.assistant.embedded.v1alpha2.AudioInConfig_Encoding" json:"encoding,omitempty"` + // *Required* Sample rate (in Hertz) of the audio data sent in all `audio_in` + // messages. Valid values are from 16000-24000, but 16000 is optimal. + // For best results, set the sampling rate of the audio source to 16000 Hz. + // If that's not possible, use the native sample rate of the audio source + // (instead of re-sampling). + SampleRateHertz int32 `protobuf:"varint,2,opt,name=sample_rate_hertz,json=sampleRateHertz" json:"sample_rate_hertz,omitempty"` +} + +func (m *AudioInConfig) Reset() { *m = AudioInConfig{} } +func (m *AudioInConfig) String() string { return proto.CompactTextString(m) } +func (*AudioInConfig) ProtoMessage() {} +func (*AudioInConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *AudioInConfig) GetEncoding() AudioInConfig_Encoding { + if m != nil { + return m.Encoding + } + return AudioInConfig_ENCODING_UNSPECIFIED +} + +func (m *AudioInConfig) GetSampleRateHertz() int32 { + if m != nil { + return m.SampleRateHertz + } + return 0 +} + +// Specifies the desired format for the server to use when it returns +// `audio_out` messages. +type AudioOutConfig struct { + // *Required* The encoding of audio data to be returned in all `audio_out` + // messages. + Encoding AudioOutConfig_Encoding `protobuf:"varint,1,opt,name=encoding,enum=google.assistant.embedded.v1alpha2.AudioOutConfig_Encoding" json:"encoding,omitempty"` + // *Required* The sample rate in Hertz of the audio data returned in + // `audio_out` messages. Valid values are: 16000-24000. + SampleRateHertz int32 `protobuf:"varint,2,opt,name=sample_rate_hertz,json=sampleRateHertz" json:"sample_rate_hertz,omitempty"` + // *Required* Current volume setting of the device's audio output. + // Valid values are 1 to 100 (corresponding to 1% to 100%). + VolumePercentage int32 `protobuf:"varint,3,opt,name=volume_percentage,json=volumePercentage" json:"volume_percentage,omitempty"` +} + +func (m *AudioOutConfig) Reset() { *m = AudioOutConfig{} } +func (m *AudioOutConfig) String() string { return proto.CompactTextString(m) } +func (*AudioOutConfig) ProtoMessage() {} +func (*AudioOutConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *AudioOutConfig) GetEncoding() AudioOutConfig_Encoding { + if m != nil { + return m.Encoding + } + return AudioOutConfig_ENCODING_UNSPECIFIED +} + +func (m *AudioOutConfig) GetSampleRateHertz() int32 { + if m != nil { + return m.SampleRateHertz + } + return 0 +} + +func (m *AudioOutConfig) GetVolumePercentage() int32 { + if m != nil { + return m.VolumePercentage + } + return 0 +} + +// Provides information about the current dialog state. +type DialogStateIn struct { + // *Required* This field must always be set to the + // [DialogStateOut.conversation_state][google.assistant.embedded.v1alpha2.DialogStateOut.conversation_state] value that was returned in the prior + // `Assist` RPC. It should only be omitted (field not set) if there was no + // prior `Assist` RPC because this is the first `Assist` RPC made by this + // device after it was first setup and/or a factory-default reset. + ConversationState []byte `protobuf:"bytes,1,opt,name=conversation_state,json=conversationState,proto3" json:"conversation_state,omitempty"` + // *Required* Language of the request in + // [IETF BCP 47 syntax](https://tools.ietf.org/html/bcp47). For example: + // "en-US". If you have selected a language for this `device_id` using the + // [Settings](https://developers.google.com/assistant/sdk/guides/assistant-settings) + // menu in your phone's Google Assistant app, that selection will override + // this value. + LanguageCode string `protobuf:"bytes,2,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` + // *Optional* Location of the device where the query originated. + DeviceLocation *DeviceLocation `protobuf:"bytes,5,opt,name=device_location,json=deviceLocation" json:"device_location,omitempty"` +} + +func (m *DialogStateIn) Reset() { *m = DialogStateIn{} } +func (m *DialogStateIn) String() string { return proto.CompactTextString(m) } +func (*DialogStateIn) ProtoMessage() {} +func (*DialogStateIn) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *DialogStateIn) GetConversationState() []byte { + if m != nil { + return m.ConversationState + } + return nil +} + +func (m *DialogStateIn) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +func (m *DialogStateIn) GetDeviceLocation() *DeviceLocation { + if m != nil { + return m.DeviceLocation + } + return nil +} + +// The audio containing the Assistant's response to the query. Sequential chunks +// of audio data are received in sequential `AssistResponse` messages. +type AudioOut struct { + // *Output-only* The audio data containing the Assistant's response to the + // query. Sequential chunks of audio data are received in sequential + // `AssistResponse` messages. + AudioData []byte `protobuf:"bytes,1,opt,name=audio_data,json=audioData,proto3" json:"audio_data,omitempty"` +} + +func (m *AudioOut) Reset() { *m = AudioOut{} } +func (m *AudioOut) String() string { return proto.CompactTextString(m) } +func (*AudioOut) ProtoMessage() {} +func (*AudioOut) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *AudioOut) GetAudioData() []byte { + if m != nil { + return m.AudioData + } + return nil +} + +// The dialog state resulting from the user's query. Multiple of these messages +// may be received. +type DialogStateOut struct { + // *Output-only* Supplemental display text from the Assistant. This could be + // the same as the speech spoken in `AssistResponse.audio_out` or it could + // be some additional information which aids the user's understanding. + SupplementalDisplayText string `protobuf:"bytes,1,opt,name=supplemental_display_text,json=supplementalDisplayText" json:"supplemental_display_text,omitempty"` + // *Output-only* State information for the subsequent `Assist` RPC. This + // value should be saved in the client and returned in the + // [`DialogStateIn.conversation_state`](#dialogstatein) field with the next + // `Assist` RPC. (The client does not need to interpret or otherwise use this + // value.) This information should be saved across device reboots. However, + // this value should be cleared (not saved in the client) during a + // factory-default reset. + ConversationState []byte `protobuf:"bytes,2,opt,name=conversation_state,json=conversationState,proto3" json:"conversation_state,omitempty"` + // *Output-only* Specifies the mode of the microphone after this `Assist` + // RPC is processed. + MicrophoneMode DialogStateOut_MicrophoneMode `protobuf:"varint,3,opt,name=microphone_mode,json=microphoneMode,enum=google.assistant.embedded.v1alpha2.DialogStateOut_MicrophoneMode" json:"microphone_mode,omitempty"` + // *Output-only* Updated volume level. The value will be 0 or omitted + // (indicating no change) unless a voice command such as *Increase the volume* + // or *Set volume level 4* was recognized, in which case the value will be + // between 1 and 100 (corresponding to the new volume level of 1% to 100%). + // Typically, a client should use this volume level when playing the + // `audio_out` data, and retain this value as the current volume level and + // supply it in the `AudioOutConfig` of the next `AssistRequest`. (Some + // clients may also implement other ways to allow the current volume level to + // be changed, for example, by providing a knob that the user can turn.) + VolumePercentage int32 `protobuf:"varint,4,opt,name=volume_percentage,json=volumePercentage" json:"volume_percentage,omitempty"` +} + +func (m *DialogStateOut) Reset() { *m = DialogStateOut{} } +func (m *DialogStateOut) String() string { return proto.CompactTextString(m) } +func (*DialogStateOut) ProtoMessage() {} +func (*DialogStateOut) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *DialogStateOut) GetSupplementalDisplayText() string { + if m != nil { + return m.SupplementalDisplayText + } + return "" +} + +func (m *DialogStateOut) GetConversationState() []byte { + if m != nil { + return m.ConversationState + } + return nil +} + +func (m *DialogStateOut) GetMicrophoneMode() DialogStateOut_MicrophoneMode { + if m != nil { + return m.MicrophoneMode + } + return DialogStateOut_MICROPHONE_MODE_UNSPECIFIED +} + +func (m *DialogStateOut) GetVolumePercentage() int32 { + if m != nil { + return m.VolumePercentage + } + return 0 +} + +// The top-level message sent by the client. Clients must send at least two, and +// typically numerous `AssistRequest` messages. The first message must +// contain a `config` message and must not contain `audio_in` data. All +// subsequent messages must contain `audio_in` data and must not contain a +// `config` message. +type AssistRequest struct { + // Exactly one of these fields must be specified in each `AssistRequest`. + // + // Types that are valid to be assigned to Type: + // *AssistRequest_Config + // *AssistRequest_AudioIn + Type isAssistRequest_Type `protobuf_oneof:"type"` +} + +func (m *AssistRequest) Reset() { *m = AssistRequest{} } +func (m *AssistRequest) String() string { return proto.CompactTextString(m) } +func (*AssistRequest) ProtoMessage() {} +func (*AssistRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +type isAssistRequest_Type interface { + isAssistRequest_Type() +} + +type AssistRequest_Config struct { + Config *AssistConfig `protobuf:"bytes,1,opt,name=config,oneof"` +} +type AssistRequest_AudioIn struct { + AudioIn []byte `protobuf:"bytes,2,opt,name=audio_in,json=audioIn,proto3,oneof"` +} + +func (*AssistRequest_Config) isAssistRequest_Type() {} +func (*AssistRequest_AudioIn) isAssistRequest_Type() {} + +func (m *AssistRequest) GetType() isAssistRequest_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *AssistRequest) GetConfig() *AssistConfig { + if x, ok := m.GetType().(*AssistRequest_Config); ok { + return x.Config + } + return nil +} + +func (m *AssistRequest) GetAudioIn() []byte { + if x, ok := m.GetType().(*AssistRequest_AudioIn); ok { + return x.AudioIn + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*AssistRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _AssistRequest_OneofMarshaler, _AssistRequest_OneofUnmarshaler, _AssistRequest_OneofSizer, []interface{}{ + (*AssistRequest_Config)(nil), + (*AssistRequest_AudioIn)(nil), + } +} + +func _AssistRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*AssistRequest) + // type + switch x := m.Type.(type) { + case *AssistRequest_Config: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Config); err != nil { + return err + } + case *AssistRequest_AudioIn: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeRawBytes(x.AudioIn) + case nil: + default: + return fmt.Errorf("AssistRequest.Type has unexpected type %T", x) + } + return nil +} + +func _AssistRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*AssistRequest) + switch tag { + case 1: // type.config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(AssistConfig) + err := b.DecodeMessage(msg) + m.Type = &AssistRequest_Config{msg} + return true, err + case 2: // type.audio_in + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.Type = &AssistRequest_AudioIn{x} + return true, err + default: + return false, nil + } +} + +func _AssistRequest_OneofSizer(msg proto.Message) (n int) { + m := msg.(*AssistRequest) + // type + switch x := m.Type.(type) { + case *AssistRequest_Config: + s := proto.Size(x.Config) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *AssistRequest_AudioIn: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.AudioIn))) + n += len(x.AudioIn) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The top-level message received by the client. A series of one or more +// `AssistResponse` messages are streamed back to the client. +type AssistResponse struct { + // *Output-only* Indicates the type of event. + EventType AssistResponse_EventType `protobuf:"varint,1,opt,name=event_type,json=eventType,enum=google.assistant.embedded.v1alpha2.AssistResponse_EventType" json:"event_type,omitempty"` + // *Output-only* The audio containing the Assistant's response to the query. + AudioOut *AudioOut `protobuf:"bytes,3,opt,name=audio_out,json=audioOut" json:"audio_out,omitempty"` + // *Output-only* Contains the action triggered by the query with the + // appropriate payloads and semantic parsing. + DeviceAction *DeviceAction `protobuf:"bytes,6,opt,name=device_action,json=deviceAction" json:"device_action,omitempty"` + // *Output-only* This repeated list contains zero or more speech recognition + // results that correspond to consecutive portions of the audio currently + // being processed, starting with the portion corresponding to the earliest + // audio (and most stable portion) to the portion corresponding to the most + // recent audio. The strings can be concatenated to view the full + // in-progress response. When the speech recognition completes, this list + // will contain one item with `stability` of `1.0`. + SpeechResults []*SpeechRecognitionResult `protobuf:"bytes,2,rep,name=speech_results,json=speechResults" json:"speech_results,omitempty"` + // *Output-only* Contains output related to the user's query. + DialogStateOut *DialogStateOut `protobuf:"bytes,5,opt,name=dialog_state_out,json=dialogStateOut" json:"dialog_state_out,omitempty"` +} + +func (m *AssistResponse) Reset() { *m = AssistResponse{} } +func (m *AssistResponse) String() string { return proto.CompactTextString(m) } +func (*AssistResponse) ProtoMessage() {} +func (*AssistResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *AssistResponse) GetEventType() AssistResponse_EventType { + if m != nil { + return m.EventType + } + return AssistResponse_EVENT_TYPE_UNSPECIFIED +} + +func (m *AssistResponse) GetAudioOut() *AudioOut { + if m != nil { + return m.AudioOut + } + return nil +} + +func (m *AssistResponse) GetDeviceAction() *DeviceAction { + if m != nil { + return m.DeviceAction + } + return nil +} + +func (m *AssistResponse) GetSpeechResults() []*SpeechRecognitionResult { + if m != nil { + return m.SpeechResults + } + return nil +} + +func (m *AssistResponse) GetDialogStateOut() *DialogStateOut { + if m != nil { + return m.DialogStateOut + } + return nil +} + +// The estimated transcription of a phrase the user has spoken. This could be +// a single segment or the full guess of the user's spoken query. +type SpeechRecognitionResult struct { + // *Output-only* Transcript text representing the words that the user spoke. + Transcript string `protobuf:"bytes,1,opt,name=transcript" json:"transcript,omitempty"` + // *Output-only* An estimate of the likelihood that the Assistant will not + // change its guess about this result. Values range from 0.0 (completely + // unstable) to 1.0 (completely stable and final). The default of 0.0 is a + // sentinel value indicating `stability` was not set. + Stability float32 `protobuf:"fixed32,2,opt,name=stability" json:"stability,omitempty"` +} + +func (m *SpeechRecognitionResult) Reset() { *m = SpeechRecognitionResult{} } +func (m *SpeechRecognitionResult) String() string { return proto.CompactTextString(m) } +func (*SpeechRecognitionResult) ProtoMessage() {} +func (*SpeechRecognitionResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *SpeechRecognitionResult) GetTranscript() string { + if m != nil { + return m.Transcript + } + return "" +} + +func (m *SpeechRecognitionResult) GetStability() float32 { + if m != nil { + return m.Stability + } + return 0 +} + +// *Required* Fields that identify the device to the Assistant. +// +// See also: +// +// * [Register a Device - REST API](https://developers.google.com/assistant/sdk/reference/device-registration/register-device-manual) +// * [Device Model and Instance Schemas](https://developers.google.com/assistant/sdk/reference/device-registration/model-and-instance-schemas) +// * [Device Proto](https://developers.google.com/assistant/sdk/reference/rpc/google.assistant.devices.v1alpha2#device) +type DeviceConfig struct { + // *Required* Unique identifier for the device. The id length must be 128 + // characters or less. Example: DBCDW098234. This MUST match the device_id + // returned from device registration. This device_id is used to match against + // the user's registered devices to lookup the supported traits and + // capabilities of this device. This information should not change across + // device reboots. However, it should not be saved across + // factory-default resets. + DeviceId string `protobuf:"bytes,1,opt,name=device_id,json=deviceId" json:"device_id,omitempty"` + // *Required* Unique identifier for the device model. The combination of + // device_model_id and device_id must have been previously associated through + // device registration. + DeviceModelId string `protobuf:"bytes,3,opt,name=device_model_id,json=deviceModelId" json:"device_model_id,omitempty"` +} + +func (m *DeviceConfig) Reset() { *m = DeviceConfig{} } +func (m *DeviceConfig) String() string { return proto.CompactTextString(m) } +func (*DeviceConfig) ProtoMessage() {} +func (*DeviceConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *DeviceConfig) GetDeviceId() string { + if m != nil { + return m.DeviceId + } + return "" +} + +func (m *DeviceConfig) GetDeviceModelId() string { + if m != nil { + return m.DeviceModelId + } + return "" +} + +// The response returned to the device if the user has triggered a Device +// Action. For example, a device which supports the query *Turn on the light* +// would receive a `DeviceAction` with a JSON payload containing the semantics +// of the request. +type DeviceAction struct { + // JSON containing the device command response generated from the triggered + // Device Action grammar. The format is given by the + // `action.devices.EXECUTE` intent for a given + // [trait](https://developers.google.com/assistant/sdk/reference/traits/). + DeviceRequestJson string `protobuf:"bytes,1,opt,name=device_request_json,json=deviceRequestJson" json:"device_request_json,omitempty"` +} + +func (m *DeviceAction) Reset() { *m = DeviceAction{} } +func (m *DeviceAction) String() string { return proto.CompactTextString(m) } +func (*DeviceAction) ProtoMessage() {} +func (*DeviceAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *DeviceAction) GetDeviceRequestJson() string { + if m != nil { + return m.DeviceRequestJson + } + return "" +} + +// There are three sources of locations. They are used with this precedence: +// +// 1. This `DeviceLocation`, which is primarily used for mobile devices with +// GPS . +// 2. Location specified by the user during device setup; this is per-user, per +// device. This location is used if `DeviceLocation` is not specified. +// 3. Inferred location based on IP address. This is used only if neither of the +// above are specified. +type DeviceLocation struct { + // Types that are valid to be assigned to Type: + // *DeviceLocation_Coordinates + Type isDeviceLocation_Type `protobuf_oneof:"type"` +} + +func (m *DeviceLocation) Reset() { *m = DeviceLocation{} } +func (m *DeviceLocation) String() string { return proto.CompactTextString(m) } +func (*DeviceLocation) ProtoMessage() {} +func (*DeviceLocation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +type isDeviceLocation_Type interface { + isDeviceLocation_Type() +} + +type DeviceLocation_Coordinates struct { + Coordinates *google_type.LatLng `protobuf:"bytes,1,opt,name=coordinates,oneof"` +} + +func (*DeviceLocation_Coordinates) isDeviceLocation_Type() {} + +func (m *DeviceLocation) GetType() isDeviceLocation_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *DeviceLocation) GetCoordinates() *google_type.LatLng { + if x, ok := m.GetType().(*DeviceLocation_Coordinates); ok { + return x.Coordinates + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*DeviceLocation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _DeviceLocation_OneofMarshaler, _DeviceLocation_OneofUnmarshaler, _DeviceLocation_OneofSizer, []interface{}{ + (*DeviceLocation_Coordinates)(nil), + } +} + +func _DeviceLocation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*DeviceLocation) + // type + switch x := m.Type.(type) { + case *DeviceLocation_Coordinates: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Coordinates); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("DeviceLocation.Type has unexpected type %T", x) + } + return nil +} + +func _DeviceLocation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*DeviceLocation) + switch tag { + case 1: // type.coordinates + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_type.LatLng) + err := b.DecodeMessage(msg) + m.Type = &DeviceLocation_Coordinates{msg} + return true, err + default: + return false, nil + } +} + +func _DeviceLocation_OneofSizer(msg proto.Message) (n int) { + m := msg.(*DeviceLocation) + // type + switch x := m.Type.(type) { + case *DeviceLocation_Coordinates: + s := proto.Size(x.Coordinates) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +func init() { + proto.RegisterType((*AssistConfig)(nil), "google.assistant.embedded.v1alpha2.AssistConfig") + proto.RegisterType((*AudioInConfig)(nil), "google.assistant.embedded.v1alpha2.AudioInConfig") + proto.RegisterType((*AudioOutConfig)(nil), "google.assistant.embedded.v1alpha2.AudioOutConfig") + proto.RegisterType((*DialogStateIn)(nil), "google.assistant.embedded.v1alpha2.DialogStateIn") + proto.RegisterType((*AudioOut)(nil), "google.assistant.embedded.v1alpha2.AudioOut") + proto.RegisterType((*DialogStateOut)(nil), "google.assistant.embedded.v1alpha2.DialogStateOut") + proto.RegisterType((*AssistRequest)(nil), "google.assistant.embedded.v1alpha2.AssistRequest") + proto.RegisterType((*AssistResponse)(nil), "google.assistant.embedded.v1alpha2.AssistResponse") + proto.RegisterType((*SpeechRecognitionResult)(nil), "google.assistant.embedded.v1alpha2.SpeechRecognitionResult") + proto.RegisterType((*DeviceConfig)(nil), "google.assistant.embedded.v1alpha2.DeviceConfig") + proto.RegisterType((*DeviceAction)(nil), "google.assistant.embedded.v1alpha2.DeviceAction") + proto.RegisterType((*DeviceLocation)(nil), "google.assistant.embedded.v1alpha2.DeviceLocation") + proto.RegisterEnum("google.assistant.embedded.v1alpha2.AudioInConfig_Encoding", AudioInConfig_Encoding_name, AudioInConfig_Encoding_value) + proto.RegisterEnum("google.assistant.embedded.v1alpha2.AudioOutConfig_Encoding", AudioOutConfig_Encoding_name, AudioOutConfig_Encoding_value) + proto.RegisterEnum("google.assistant.embedded.v1alpha2.DialogStateOut_MicrophoneMode", DialogStateOut_MicrophoneMode_name, DialogStateOut_MicrophoneMode_value) + proto.RegisterEnum("google.assistant.embedded.v1alpha2.AssistResponse_EventType", AssistResponse_EventType_name, AssistResponse_EventType_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for EmbeddedAssistant service + +type EmbeddedAssistantClient interface { + // Initiates or continues a conversation with the embedded Assistant Service. + // Each call performs one round-trip, sending an audio request to the service + // and receiving the audio response. Uses bidirectional streaming to receive + // results, such as the `END_OF_UTTERANCE` event, while sending audio. + // + // A conversation is one or more gRPC connections, each consisting of several + // streamed requests and responses. + // For example, the user says *Add to my shopping list* and the Assistant + // responds *What do you want to add?*. The sequence of streamed requests and + // responses in the first gRPC message could be: + // + // * AssistRequest.config + // * AssistRequest.audio_in + // * AssistRequest.audio_in + // * AssistRequest.audio_in + // * AssistRequest.audio_in + // * AssistResponse.event_type.END_OF_UTTERANCE + // * AssistResponse.speech_results.transcript "add to my shopping list" + // * AssistResponse.dialog_state_out.microphone_mode.DIALOG_FOLLOW_ON + // * AssistResponse.audio_out + // * AssistResponse.audio_out + // * AssistResponse.audio_out + // + // + // The user then says *bagels* and the Assistant responds + // *OK, I've added bagels to your shopping list*. This is sent as another gRPC + // connection call to the `Assist` method, again with streamed requests and + // responses, such as: + // + // * AssistRequest.config + // * AssistRequest.audio_in + // * AssistRequest.audio_in + // * AssistRequest.audio_in + // * AssistResponse.event_type.END_OF_UTTERANCE + // * AssistResponse.dialog_state_out.microphone_mode.CLOSE_MICROPHONE + // * AssistResponse.audio_out + // * AssistResponse.audio_out + // * AssistResponse.audio_out + // * AssistResponse.audio_out + // + // Although the precise order of responses is not guaranteed, sequential + // `AssistResponse.audio_out` messages will always contain sequential portions + // of audio. + Assist(ctx context.Context, opts ...grpc.CallOption) (EmbeddedAssistant_AssistClient, error) +} + +type embeddedAssistantClient struct { + cc *grpc.ClientConn +} + +func NewEmbeddedAssistantClient(cc *grpc.ClientConn) EmbeddedAssistantClient { + return &embeddedAssistantClient{cc} +} + +func (c *embeddedAssistantClient) Assist(ctx context.Context, opts ...grpc.CallOption) (EmbeddedAssistant_AssistClient, error) { + stream, err := grpc.NewClientStream(ctx, &_EmbeddedAssistant_serviceDesc.Streams[0], c.cc, "/google.assistant.embedded.v1alpha2.EmbeddedAssistant/Assist", opts...) + if err != nil { + return nil, err + } + x := &embeddedAssistantAssistClient{stream} + return x, nil +} + +type EmbeddedAssistant_AssistClient interface { + Send(*AssistRequest) error + Recv() (*AssistResponse, error) + grpc.ClientStream +} + +type embeddedAssistantAssistClient struct { + grpc.ClientStream +} + +func (x *embeddedAssistantAssistClient) Send(m *AssistRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *embeddedAssistantAssistClient) Recv() (*AssistResponse, error) { + m := new(AssistResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// Server API for EmbeddedAssistant service + +type EmbeddedAssistantServer interface { + // Initiates or continues a conversation with the embedded Assistant Service. + // Each call performs one round-trip, sending an audio request to the service + // and receiving the audio response. Uses bidirectional streaming to receive + // results, such as the `END_OF_UTTERANCE` event, while sending audio. + // + // A conversation is one or more gRPC connections, each consisting of several + // streamed requests and responses. + // For example, the user says *Add to my shopping list* and the Assistant + // responds *What do you want to add?*. The sequence of streamed requests and + // responses in the first gRPC message could be: + // + // * AssistRequest.config + // * AssistRequest.audio_in + // * AssistRequest.audio_in + // * AssistRequest.audio_in + // * AssistRequest.audio_in + // * AssistResponse.event_type.END_OF_UTTERANCE + // * AssistResponse.speech_results.transcript "add to my shopping list" + // * AssistResponse.dialog_state_out.microphone_mode.DIALOG_FOLLOW_ON + // * AssistResponse.audio_out + // * AssistResponse.audio_out + // * AssistResponse.audio_out + // + // + // The user then says *bagels* and the Assistant responds + // *OK, I've added bagels to your shopping list*. This is sent as another gRPC + // connection call to the `Assist` method, again with streamed requests and + // responses, such as: + // + // * AssistRequest.config + // * AssistRequest.audio_in + // * AssistRequest.audio_in + // * AssistRequest.audio_in + // * AssistResponse.event_type.END_OF_UTTERANCE + // * AssistResponse.dialog_state_out.microphone_mode.CLOSE_MICROPHONE + // * AssistResponse.audio_out + // * AssistResponse.audio_out + // * AssistResponse.audio_out + // * AssistResponse.audio_out + // + // Although the precise order of responses is not guaranteed, sequential + // `AssistResponse.audio_out` messages will always contain sequential portions + // of audio. + Assist(EmbeddedAssistant_AssistServer) error +} + +func RegisterEmbeddedAssistantServer(s *grpc.Server, srv EmbeddedAssistantServer) { + s.RegisterService(&_EmbeddedAssistant_serviceDesc, srv) +} + +func _EmbeddedAssistant_Assist_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(EmbeddedAssistantServer).Assist(&embeddedAssistantAssistServer{stream}) +} + +type EmbeddedAssistant_AssistServer interface { + Send(*AssistResponse) error + Recv() (*AssistRequest, error) + grpc.ServerStream +} + +type embeddedAssistantAssistServer struct { + grpc.ServerStream +} + +func (x *embeddedAssistantAssistServer) Send(m *AssistResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *embeddedAssistantAssistServer) Recv() (*AssistRequest, error) { + m := new(AssistRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +var _EmbeddedAssistant_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.assistant.embedded.v1alpha2.EmbeddedAssistant", + HandlerType: (*EmbeddedAssistantServer)(nil), + Methods: []grpc.MethodDesc{}, + Streams: []grpc.StreamDesc{ + { + StreamName: "Assist", + Handler: _EmbeddedAssistant_Assist_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: "google/assistant/embedded/v1alpha2/embedded_assistant.proto", +} + +func init() { + proto.RegisterFile("google/assistant/embedded/v1alpha2/embedded_assistant.proto", fileDescriptor0) +} + +var fileDescriptor0 = []byte{ + // 1141 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0xdd, 0x6e, 0xdb, 0x36, + 0x14, 0x8e, 0xec, 0x34, 0xb5, 0x4f, 0x62, 0xc5, 0x61, 0x8b, 0xd5, 0x4b, 0xbb, 0xb5, 0xd0, 0x80, + 0x22, 0xfb, 0xb3, 0x9b, 0x14, 0xd8, 0x80, 0xb6, 0x1b, 0xe0, 0xda, 0x4a, 0xa2, 0xc2, 0xb1, 0x5c, + 0xc6, 0x69, 0xd1, 0xfd, 0x80, 0x60, 0x24, 0x4e, 0x51, 0x21, 0x93, 0xaa, 0x44, 0x07, 0xcd, 0xae, + 0x76, 0x35, 0xec, 0xb2, 0x0f, 0xb1, 0x07, 0xd9, 0x2b, 0xec, 0x59, 0xf6, 0x02, 0x03, 0x29, 0xc9, + 0xb5, 0xb6, 0x66, 0xb3, 0xb7, 0x3b, 0xf1, 0x1c, 0x9e, 0x8f, 0xe4, 0x39, 0xe7, 0xfb, 0x8e, 0xe0, + 0x61, 0x20, 0x44, 0x10, 0xb1, 0x0e, 0x4d, 0xd3, 0x30, 0x95, 0x94, 0xcb, 0x0e, 0x9b, 0x9c, 0x32, + 0xdf, 0x67, 0x7e, 0xe7, 0x7c, 0x97, 0x46, 0xf1, 0x19, 0xdd, 0x9b, 0x59, 0xc8, 0x6c, 0x53, 0x3b, + 0x4e, 0x84, 0x14, 0xc8, 0xca, 0x82, 0xdb, 0x6f, 0xed, 0xc5, 0xd6, 0x76, 0x11, 0xbc, 0x7d, 0xab, + 0x38, 0x20, 0x0e, 0x3b, 0x94, 0x73, 0x21, 0xa9, 0x0c, 0x05, 0x4f, 0x33, 0x84, 0xed, 0x56, 0xee, + 0x95, 0x17, 0x31, 0xeb, 0x44, 0x54, 0x46, 0x3c, 0xc8, 0x3c, 0xd6, 0xaf, 0x55, 0xd8, 0xe8, 0x6a, + 0xdc, 0x9e, 0xe0, 0x3f, 0x84, 0x01, 0xfa, 0x16, 0x36, 0xe9, 0xd4, 0x0f, 0x05, 0x09, 0x39, 0xf1, + 0xb4, 0xa9, 0x65, 0xdc, 0x31, 0x76, 0xd6, 0xf7, 0x76, 0xdb, 0xff, 0x7e, 0x8d, 0x76, 0x57, 0x85, + 0x3a, 0x3c, 0xc3, 0x3a, 0x5c, 0xc1, 0x0d, 0x3a, 0x6f, 0x40, 0xb7, 0x01, 0x24, 0x7b, 0x2d, 0xc9, + 0xab, 0x29, 0x4b, 0x2e, 0x5a, 0x6b, 0x77, 0x8c, 0x9d, 0xfa, 0xe1, 0x0a, 0xae, 0x2b, 0xdb, 0x53, + 0x65, 0x42, 0xdf, 0x41, 0x33, 0x3b, 0x5d, 0x4c, 0x65, 0x71, 0x7c, 0x45, 0x1f, 0xbf, 0xb7, 0xf0, + 0xf1, 0xee, 0x34, 0x7f, 0x0b, 0x36, 0x69, 0x69, 0x8d, 0x5e, 0xc0, 0xa6, 0x1f, 0xd2, 0x48, 0x04, + 0x24, 0x95, 0x54, 0x32, 0x12, 0xf2, 0x56, 0x75, 0xf1, 0xb7, 0xf5, 0x75, 0xe8, 0xb1, 0x8a, 0x74, + 0x38, 0x6e, 0xf8, 0xf3, 0x4b, 0x74, 0x02, 0x0d, 0x9f, 0x9d, 0x87, 0x1e, 0x2b, 0x6e, 0xbd, 0xaa, + 0x81, 0xef, 0x2d, 0x04, 0xac, 0x03, 0xf3, 0x3b, 0x6f, 0xf8, 0x73, 0xab, 0xc7, 0x6b, 0xb0, 0xaa, + 0x6a, 0x66, 0xfd, 0x6e, 0x40, 0xa3, 0x94, 0x5b, 0xf4, 0x0c, 0x6a, 0x8c, 0x7b, 0xc2, 0x0f, 0x79, + 0x56, 0x20, 0x73, 0xef, 0xc1, 0xd2, 0x05, 0x6a, 0xdb, 0x39, 0x02, 0x9e, 0x61, 0xa1, 0x4f, 0x60, + 0x2b, 0xa5, 0x93, 0x38, 0x62, 0x24, 0x51, 0x29, 0x3a, 0x63, 0x89, 0xfc, 0x51, 0x97, 0xe0, 0x0a, + 0xde, 0xcc, 0x1c, 0x98, 0x4a, 0x76, 0xa8, 0xcc, 0xd6, 0x23, 0xa8, 0x15, 0x08, 0xa8, 0x05, 0xd7, + 0xed, 0x61, 0xcf, 0xed, 0x3b, 0xc3, 0x03, 0x72, 0x32, 0x3c, 0x1e, 0xd9, 0x3d, 0x67, 0xdf, 0xb1, + 0xfb, 0xcd, 0x15, 0xb4, 0x01, 0xb5, 0x81, 0x33, 0xb4, 0xbb, 0x78, 0xf7, 0x8b, 0xa6, 0x81, 0x6a, + 0xb0, 0xba, 0x3f, 0xe8, 0xf6, 0x9a, 0x15, 0xeb, 0x4d, 0x05, 0xcc, 0x72, 0xc1, 0xd0, 0xf3, 0xbf, + 0x3d, 0xea, 0xe1, 0xf2, 0x65, 0xff, 0x9f, 0xaf, 0x42, 0x9f, 0xc2, 0xd6, 0xb9, 0x88, 0xa6, 0x13, + 0x46, 0x62, 0x96, 0x78, 0x8c, 0x4b, 0x1a, 0x30, 0xdd, 0x27, 0x57, 0x70, 0x33, 0x73, 0x8c, 0x66, + 0x76, 0x6b, 0xf0, 0x1f, 0x52, 0x70, 0x15, 0xaa, 0x47, 0xa3, 0xfb, 0xcd, 0x0a, 0xda, 0x84, 0x75, + 0x77, 0x74, 0x72, 0x4c, 0x9c, 0x21, 0x71, 0x0f, 0x0e, 0x9a, 0x55, 0xeb, 0x37, 0x03, 0x1a, 0xa5, + 0x36, 0x43, 0x9f, 0x03, 0xf2, 0x04, 0x3f, 0x67, 0x49, 0xaa, 0x09, 0x9d, 0x35, 0xae, 0xce, 0xcd, + 0x06, 0xde, 0x9a, 0xf7, 0xe8, 0x00, 0xf4, 0x11, 0x34, 0x22, 0xca, 0x83, 0x29, 0x0d, 0x54, 0x23, + 0xfa, 0x4c, 0xbf, 0xb1, 0x8e, 0x37, 0x0a, 0x63, 0x4f, 0xf8, 0x4c, 0x51, 0x3c, 0xef, 0xd5, 0x48, + 0x78, 0x3a, 0xb8, 0x75, 0x65, 0x71, 0x8e, 0x65, 0xdd, 0x3a, 0xc8, 0x23, 0xb1, 0xe9, 0x97, 0xd6, + 0xd6, 0xc7, 0x50, 0x2b, 0xca, 0x81, 0x3e, 0x00, 0xc8, 0xd8, 0xec, 0x53, 0x49, 0xf3, 0x4b, 0xd7, + 0xb5, 0xa5, 0x4f, 0x25, 0xb5, 0xfe, 0xa8, 0x80, 0x39, 0xf7, 0x5a, 0x15, 0xf1, 0x00, 0xde, 0x4f, + 0xa7, 0x71, 0x1c, 0xb1, 0x89, 0xca, 0x6f, 0x44, 0xfc, 0x30, 0x8d, 0x23, 0x7a, 0x41, 0x94, 0x42, + 0x68, 0x80, 0x3a, 0xbe, 0x31, 0xbf, 0xa1, 0x9f, 0xf9, 0xc7, 0xec, 0xb5, 0xbc, 0x24, 0x55, 0x95, + 0xcb, 0x52, 0xf5, 0x12, 0x36, 0x27, 0xa1, 0x97, 0x88, 0xf8, 0x4c, 0x70, 0x46, 0x26, 0x2a, 0x59, + 0x55, 0xdd, 0x72, 0xdd, 0x25, 0xc5, 0xc0, 0x9d, 0xca, 0xf6, 0xd1, 0x0c, 0xe9, 0x48, 0xf8, 0x0c, + 0x9b, 0x93, 0xd2, 0xfa, 0xdd, 0x2d, 0xb5, 0x7a, 0x49, 0x4b, 0x7d, 0x0f, 0x66, 0x19, 0x0e, 0xdd, + 0x86, 0x9b, 0x47, 0x4e, 0x0f, 0xbb, 0xa3, 0x43, 0x77, 0x68, 0x93, 0x23, 0xb7, 0x6f, 0xff, 0xa5, + 0xbf, 0xae, 0x43, 0xb3, 0x37, 0x70, 0x8f, 0x6d, 0xf2, 0x76, 0x5b, 0xd3, 0x50, 0xd6, 0xbe, 0xd3, + 0x1d, 0xb8, 0x07, 0x64, 0xdf, 0x1d, 0x0c, 0xdc, 0xe7, 0xc4, 0x1d, 0x36, 0x2b, 0xd6, 0x4f, 0x4a, + 0x4a, 0xf4, 0xcb, 0x30, 0x7b, 0x35, 0x65, 0xa9, 0x44, 0x4f, 0x60, 0xad, 0xa4, 0xf4, 0x0b, 0x89, + 0xd6, 0xfc, 0xd0, 0x38, 0x5c, 0xc1, 0x39, 0x02, 0xba, 0x09, 0xb5, 0x62, 0x7c, 0x64, 0xa9, 0x3f, + 0x5c, 0xc1, 0x57, 0xf3, 0x21, 0x30, 0x53, 0xb3, 0x37, 0xab, 0x60, 0x16, 0x57, 0x48, 0x63, 0xc1, + 0x53, 0xd5, 0x93, 0xc0, 0xce, 0x19, 0x97, 0x44, 0x6d, 0xc8, 0xb9, 0xff, 0x68, 0xf1, 0x7b, 0x14, + 0x38, 0x6d, 0x5b, 0x81, 0x8c, 0x2f, 0x62, 0x86, 0xeb, 0xac, 0xf8, 0x44, 0x0e, 0xd4, 0x67, 0x53, + 0x25, 0x57, 0xfc, 0xcf, 0x96, 0xd1, 0x15, 0x5c, 0x2b, 0x06, 0xc9, 0x9c, 0xce, 0x53, 0x4f, 0x33, + 0x67, 0x6d, 0x59, 0x9d, 0xef, 0xea, 0xb8, 0x42, 0xe7, 0xb3, 0x15, 0x3a, 0x05, 0x33, 0x8d, 0x19, + 0xf3, 0xce, 0x48, 0xc2, 0xd2, 0x69, 0x24, 0xd3, 0x56, 0xe5, 0x4e, 0x75, 0x67, 0x7d, 0x31, 0xf9, + 0x3b, 0xd6, 0x91, 0x98, 0x79, 0x22, 0xe0, 0xa1, 0x06, 0xd7, 0x18, 0xb8, 0x91, 0xe6, 0x0e, 0x8d, + 0xa8, 0x66, 0x6b, 0x69, 0xfa, 0xa9, 0x64, 0x2c, 0xc3, 0xfb, 0x52, 0xc7, 0x63, 0xd3, 0x2f, 0xad, + 0xad, 0xaf, 0xa0, 0x3e, 0xcb, 0x3d, 0xda, 0x86, 0xf7, 0xec, 0x67, 0xf6, 0x70, 0x4c, 0xc6, 0x2f, + 0x46, 0xef, 0xe8, 0x55, 0x7b, 0xd8, 0x27, 0xee, 0x3e, 0x39, 0x19, 0x8f, 0x6d, 0xdc, 0x1d, 0xf6, + 0xec, 0xa6, 0x61, 0x3d, 0x87, 0x1b, 0x97, 0x3c, 0x03, 0x7d, 0x08, 0x20, 0x13, 0xca, 0x53, 0x2f, + 0x09, 0xe3, 0x42, 0x04, 0xe6, 0x2c, 0xe8, 0x16, 0xd4, 0x53, 0x49, 0x4f, 0xc3, 0x28, 0x94, 0x17, + 0xba, 0xe7, 0x2a, 0xf8, 0xad, 0xc1, 0x3a, 0x86, 0x8d, 0xf9, 0xf9, 0x8a, 0x6e, 0x42, 0x3d, 0x2f, + 0x60, 0xe8, 0xe7, 0x60, 0xb5, 0xcc, 0xe0, 0xf8, 0xe8, 0xee, 0x4c, 0x19, 0x95, 0x1e, 0x44, 0x6a, + 0x4b, 0x55, 0x6f, 0xc9, 0x8b, 0xae, 0xd8, 0x18, 0x39, 0xbe, 0xf5, 0x75, 0x01, 0x9a, 0x97, 0xaf, + 0x0d, 0xd7, 0xf2, 0xb8, 0x24, 0xe3, 0x14, 0x79, 0x99, 0x0a, 0x9e, 0xc3, 0x6f, 0x65, 0xae, 0x9c, + 0x6d, 0x4f, 0x52, 0xc1, 0xad, 0xa7, 0x60, 0x96, 0x65, 0x14, 0x7d, 0x09, 0xeb, 0x9e, 0x10, 0x89, + 0x1f, 0x72, 0x2a, 0x59, 0x9a, 0x13, 0xf1, 0x5a, 0x51, 0x17, 0x45, 0x8a, 0xf6, 0x80, 0xca, 0x01, + 0x57, 0x5c, 0x9b, 0xdf, 0x59, 0x70, 0x6a, 0xef, 0x17, 0x03, 0xb6, 0xec, 0xbc, 0x68, 0xdd, 0xa2, + 0x8c, 0x28, 0x85, 0xb5, 0x6c, 0x81, 0x76, 0x97, 0x21, 0x93, 0xbe, 0xe9, 0xf6, 0xde, 0xf2, 0xfc, + 0xdb, 0x31, 0xee, 0x19, 0x8f, 0x7f, 0x36, 0xe0, 0xae, 0x27, 0x26, 0x0b, 0x44, 0x3f, 0x36, 0x67, + 0x57, 0x1d, 0xa9, 0xdf, 0xd1, 0x91, 0xf1, 0xcd, 0x93, 0x3c, 0x2a, 0x10, 0x6a, 0x66, 0xb5, 0x45, + 0x12, 0x74, 0x02, 0xc6, 0xf5, 0xcf, 0x6a, 0x27, 0x73, 0xd1, 0x38, 0x4c, 0xff, 0xe9, 0x47, 0xfa, + 0x61, 0x61, 0x39, 0x5d, 0xd3, 0x61, 0xf7, 0xff, 0x0c, 0x00, 0x00, 0xff, 0xff, 0x3d, 0x7a, 0x00, + 0x97, 0x7e, 0x0b, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/bigtable/admin/cluster/v1/bigtable_cluster_data.pb.go b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/cluster/v1/bigtable_cluster_data.pb.go new file mode 100644 index 0000000..90fbe30 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/cluster/v1/bigtable_cluster_data.pb.go @@ -0,0 +1,252 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/bigtable/admin/cluster/v1/bigtable_cluster_data.proto + +/* +Package cluster is a generated protocol buffer package. + +It is generated from these files: + google/bigtable/admin/cluster/v1/bigtable_cluster_data.proto + google/bigtable/admin/cluster/v1/bigtable_cluster_service.proto + google/bigtable/admin/cluster/v1/bigtable_cluster_service_messages.proto + +It has these top-level messages: + Zone + Cluster + ListZonesRequest + ListZonesResponse + GetClusterRequest + ListClustersRequest + ListClustersResponse + CreateClusterRequest + CreateClusterMetadata + UpdateClusterMetadata + DeleteClusterRequest + UndeleteClusterRequest + UndeleteClusterMetadata + V2OperationMetadata +*/ +package cluster + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import _ "github.com/golang/protobuf/ptypes/timestamp" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +type StorageType int32 + +const ( + // The storage type used is unspecified. + StorageType_STORAGE_UNSPECIFIED StorageType = 0 + // Data will be stored in SSD, providing low and consistent latencies. + StorageType_STORAGE_SSD StorageType = 1 + // Data will be stored in HDD, providing high and less predictable + // latencies. + StorageType_STORAGE_HDD StorageType = 2 +) + +var StorageType_name = map[int32]string{ + 0: "STORAGE_UNSPECIFIED", + 1: "STORAGE_SSD", + 2: "STORAGE_HDD", +} +var StorageType_value = map[string]int32{ + "STORAGE_UNSPECIFIED": 0, + "STORAGE_SSD": 1, + "STORAGE_HDD": 2, +} + +func (x StorageType) String() string { + return proto.EnumName(StorageType_name, int32(x)) +} +func (StorageType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +// Possible states of a zone. +type Zone_Status int32 + +const ( + // The state of the zone is unknown or unspecified. + Zone_UNKNOWN Zone_Status = 0 + // The zone is in a good state. + Zone_OK Zone_Status = 1 + // The zone is down for planned maintenance. + Zone_PLANNED_MAINTENANCE Zone_Status = 2 + // The zone is down for emergency or unplanned maintenance. + Zone_EMERGENCY_MAINENANCE Zone_Status = 3 +) + +var Zone_Status_name = map[int32]string{ + 0: "UNKNOWN", + 1: "OK", + 2: "PLANNED_MAINTENANCE", + 3: "EMERGENCY_MAINENANCE", +} +var Zone_Status_value = map[string]int32{ + "UNKNOWN": 0, + "OK": 1, + "PLANNED_MAINTENANCE": 2, + "EMERGENCY_MAINENANCE": 3, +} + +func (x Zone_Status) String() string { + return proto.EnumName(Zone_Status_name, int32(x)) +} +func (Zone_Status) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 0} } + +// A physical location in which a particular project can allocate Cloud BigTable +// resources. +type Zone struct { + // A permanent unique identifier for the zone. + // Values are of the form projects//zones/[a-z][-a-z0-9]* + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The name of this zone as it appears in UIs. + DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // The current state of this zone. + Status Zone_Status `protobuf:"varint,3,opt,name=status,enum=google.bigtable.admin.cluster.v1.Zone_Status" json:"status,omitempty"` +} + +func (m *Zone) Reset() { *m = Zone{} } +func (m *Zone) String() string { return proto.CompactTextString(m) } +func (*Zone) ProtoMessage() {} +func (*Zone) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *Zone) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Zone) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func (m *Zone) GetStatus() Zone_Status { + if m != nil { + return m.Status + } + return Zone_UNKNOWN +} + +// An isolated set of Cloud BigTable resources on which tables can be hosted. +type Cluster struct { + // A permanent unique identifier for the cluster. For technical reasons, the + // zone in which the cluster resides is included here. + // Values are of the form + // projects//zones//clusters/[a-z][-a-z0-9]* + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The operation currently running on the cluster, if any. + // This cannot be set directly, only through CreateCluster, UpdateCluster, + // or UndeleteCluster. Calls to these methods will be rejected if + // "current_operation" is already set. + CurrentOperation *google_longrunning.Operation `protobuf:"bytes,3,opt,name=current_operation,json=currentOperation" json:"current_operation,omitempty"` + // The descriptive name for this cluster as it appears in UIs. + // Must be unique per zone. + DisplayName string `protobuf:"bytes,4,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // The number of serve nodes allocated to this cluster. + ServeNodes int32 `protobuf:"varint,5,opt,name=serve_nodes,json=serveNodes" json:"serve_nodes,omitempty"` + // What storage type to use for tables in this cluster. Only configurable at + // cluster creation time. If unspecified, STORAGE_SSD will be used. + DefaultStorageType StorageType `protobuf:"varint,8,opt,name=default_storage_type,json=defaultStorageType,enum=google.bigtable.admin.cluster.v1.StorageType" json:"default_storage_type,omitempty"` +} + +func (m *Cluster) Reset() { *m = Cluster{} } +func (m *Cluster) String() string { return proto.CompactTextString(m) } +func (*Cluster) ProtoMessage() {} +func (*Cluster) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *Cluster) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Cluster) GetCurrentOperation() *google_longrunning.Operation { + if m != nil { + return m.CurrentOperation + } + return nil +} + +func (m *Cluster) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func (m *Cluster) GetServeNodes() int32 { + if m != nil { + return m.ServeNodes + } + return 0 +} + +func (m *Cluster) GetDefaultStorageType() StorageType { + if m != nil { + return m.DefaultStorageType + } + return StorageType_STORAGE_UNSPECIFIED +} + +func init() { + proto.RegisterType((*Zone)(nil), "google.bigtable.admin.cluster.v1.Zone") + proto.RegisterType((*Cluster)(nil), "google.bigtable.admin.cluster.v1.Cluster") + proto.RegisterEnum("google.bigtable.admin.cluster.v1.StorageType", StorageType_name, StorageType_value) + proto.RegisterEnum("google.bigtable.admin.cluster.v1.Zone_Status", Zone_Status_name, Zone_Status_value) +} + +func init() { + proto.RegisterFile("google/bigtable/admin/cluster/v1/bigtable_cluster_data.proto", fileDescriptor0) +} + +var fileDescriptor0 = []byte{ + // 493 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xd1, 0x6e, 0xd3, 0x3c, + 0x1c, 0xc5, 0x97, 0xae, 0xeb, 0xbe, 0xcf, 0x41, 0x10, 0xcc, 0x24, 0xa2, 0x09, 0xb4, 0x52, 0xb8, + 0xa8, 0x90, 0x70, 0xb4, 0x71, 0x09, 0x37, 0x6d, 0x63, 0xba, 0x32, 0xe6, 0x56, 0x49, 0x27, 0xc4, + 0x6e, 0x2c, 0xb7, 0xf5, 0xac, 0x48, 0xa9, 0x1d, 0xc5, 0x4e, 0xa5, 0x3e, 0x03, 0x12, 0x8f, 0xc7, + 0xf3, 0xa0, 0x3a, 0x6e, 0x55, 0x34, 0xd0, 0xb8, 0xb3, 0xcf, 0x39, 0x3f, 0xbb, 0xff, 0x53, 0x07, + 0x7c, 0x14, 0x4a, 0x89, 0x9c, 0x47, 0xb3, 0x4c, 0x18, 0x36, 0xcb, 0x79, 0xc4, 0x16, 0xcb, 0x4c, + 0x46, 0xf3, 0xbc, 0xd2, 0x86, 0x97, 0xd1, 0xea, 0x7c, 0xe7, 0x50, 0xa7, 0xd1, 0x05, 0x33, 0x0c, + 0x15, 0xa5, 0x32, 0x0a, 0xb6, 0x6b, 0x1a, 0x6d, 0x33, 0xc8, 0xd2, 0xc8, 0x25, 0xd1, 0xea, 0xfc, + 0xf4, 0x85, 0x3b, 0x9f, 0x15, 0x59, 0xc4, 0xa4, 0x54, 0x86, 0x99, 0x4c, 0x49, 0x5d, 0xf3, 0xa7, + 0xaf, 0x9d, 0x9b, 0x2b, 0x29, 0xca, 0x4a, 0xca, 0x4c, 0x8a, 0x48, 0x15, 0xbc, 0xfc, 0x2d, 0x74, + 0xe6, 0x42, 0x76, 0x37, 0xab, 0xee, 0x22, 0x93, 0x2d, 0xb9, 0x36, 0x6c, 0x59, 0xd4, 0x81, 0xce, + 0x4f, 0x0f, 0x34, 0x6f, 0x95, 0xe4, 0x10, 0x82, 0xa6, 0x64, 0x4b, 0x1e, 0x7a, 0x6d, 0xaf, 0xfb, + 0x7f, 0x62, 0xd7, 0xf0, 0x15, 0x78, 0xb4, 0xc8, 0x74, 0x91, 0xb3, 0x35, 0xb5, 0x5e, 0xc3, 0x7a, + 0xbe, 0xd3, 0xc8, 0x26, 0x82, 0x41, 0x4b, 0x1b, 0x66, 0x2a, 0x1d, 0x1e, 0xb6, 0xbd, 0xee, 0xe3, + 0x8b, 0x77, 0xe8, 0xa1, 0xb1, 0xd0, 0xe6, 0x3a, 0x94, 0x5a, 0x28, 0x71, 0x70, 0x67, 0x02, 0x5a, + 0xb5, 0x02, 0x7d, 0x70, 0x7c, 0x43, 0xae, 0xc8, 0xf8, 0x2b, 0x09, 0x0e, 0x60, 0x0b, 0x34, 0xc6, + 0x57, 0x81, 0x07, 0x9f, 0x83, 0x67, 0x93, 0x2f, 0x3d, 0x42, 0x70, 0x4c, 0xaf, 0x7b, 0x23, 0x32, + 0xc5, 0xa4, 0x47, 0x06, 0x38, 0x68, 0xc0, 0x10, 0x9c, 0xe0, 0x6b, 0x9c, 0x0c, 0x31, 0x19, 0x7c, + 0xb3, 0x96, 0x73, 0x0e, 0x3b, 0x3f, 0x1a, 0xe0, 0x78, 0x50, 0x5f, 0xfa, 0xc7, 0xd9, 0x3e, 0x83, + 0xa7, 0xf3, 0xaa, 0x2c, 0xb9, 0x34, 0x74, 0xd7, 0x9a, 0x9d, 0xc1, 0xbf, 0x78, 0xb9, 0x9d, 0x61, + 0xaf, 0x5a, 0x34, 0xde, 0x86, 0x92, 0xc0, 0x71, 0x3b, 0xe5, 0x5e, 0x4f, 0xcd, 0xfb, 0x3d, 0x9d, + 0x01, 0x5f, 0xf3, 0x72, 0xc5, 0xa9, 0x54, 0x0b, 0xae, 0xc3, 0xa3, 0xb6, 0xd7, 0x3d, 0x4a, 0x80, + 0x95, 0xc8, 0x46, 0x81, 0x14, 0x9c, 0x2c, 0xf8, 0x1d, 0xab, 0x72, 0x43, 0xb5, 0x51, 0x25, 0x13, + 0x9c, 0x9a, 0x75, 0xc1, 0xc3, 0xff, 0xfe, 0xb5, 0xd6, 0xb4, 0xa6, 0xa6, 0xeb, 0x82, 0x27, 0xd0, + 0x1d, 0xb5, 0xa7, 0xbd, 0xbd, 0x04, 0xfe, 0xde, 0x76, 0x53, 0x69, 0x3a, 0x1d, 0x27, 0xbd, 0x21, + 0xa6, 0x37, 0x24, 0x9d, 0xe0, 0xc1, 0xe8, 0xd3, 0x08, 0xc7, 0xc1, 0x01, 0x7c, 0x02, 0xfc, 0xad, + 0x91, 0xa6, 0x71, 0xe0, 0xed, 0x0b, 0x97, 0x71, 0x1c, 0x34, 0xfa, 0xdf, 0x3d, 0xf0, 0x66, 0xae, + 0x96, 0x0f, 0xfe, 0xa4, 0x7e, 0xd8, 0x77, 0x96, 0xfb, 0x23, 0x62, 0x66, 0xd8, 0x64, 0xf3, 0xec, + 0x26, 0xde, 0xed, 0xd0, 0xd1, 0x42, 0xe5, 0x4c, 0x0a, 0xa4, 0x4a, 0x11, 0x09, 0x2e, 0xed, 0xa3, + 0x8c, 0x6a, 0x8b, 0x15, 0x99, 0xfe, 0xfb, 0xb7, 0xf5, 0xc1, 0x2d, 0x67, 0x2d, 0xcb, 0xbc, 0xff, + 0x15, 0x00, 0x00, 0xff, 0xff, 0xc9, 0x27, 0x25, 0xa6, 0x8e, 0x03, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/bigtable/admin/cluster/v1/bigtable_cluster_service.pb.go b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/cluster/v1/bigtable_cluster_service.pb.go new file mode 100644 index 0000000..bfc7f2f --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/cluster/v1/bigtable_cluster_service.pb.go @@ -0,0 +1,472 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/bigtable/admin/cluster/v1/bigtable_cluster_service.proto + +package cluster + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import google_protobuf2 "github.com/golang/protobuf/ptypes/empty" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for BigtableClusterService service + +type BigtableClusterServiceClient interface { + // Lists the supported zones for the given project. + ListZones(ctx context.Context, in *ListZonesRequest, opts ...grpc.CallOption) (*ListZonesResponse, error) + // Gets information about a particular cluster. + GetCluster(ctx context.Context, in *GetClusterRequest, opts ...grpc.CallOption) (*Cluster, error) + // Lists all clusters in the given project, along with any zones for which + // cluster information could not be retrieved. + ListClusters(ctx context.Context, in *ListClustersRequest, opts ...grpc.CallOption) (*ListClustersResponse, error) + // Creates a cluster and begins preparing it to begin serving. The returned + // cluster embeds as its "current_operation" a long-running operation which + // can be used to track the progress of turning up the new cluster. + // Immediately upon completion of this request: + // * The cluster will be readable via the API, with all requested attributes + // but no allocated resources. + // Until completion of the embedded operation: + // * Cancelling the operation will render the cluster immediately unreadable + // via the API. + // * All other attempts to modify or delete the cluster will be rejected. + // Upon completion of the embedded operation: + // * Billing for all successfully-allocated resources will begin (some types + // may have lower than the requested levels). + // * New tables can be created in the cluster. + // * The cluster's allocated resource levels will be readable via the API. + // The embedded operation's "metadata" field type is + // [CreateClusterMetadata][google.bigtable.admin.cluster.v1.CreateClusterMetadata] The embedded operation's "response" field type is + // [Cluster][google.bigtable.admin.cluster.v1.Cluster], if successful. + CreateCluster(ctx context.Context, in *CreateClusterRequest, opts ...grpc.CallOption) (*Cluster, error) + // Updates a cluster, and begins allocating or releasing resources as + // requested. The returned cluster embeds as its "current_operation" a + // long-running operation which can be used to track the progress of updating + // the cluster. + // Immediately upon completion of this request: + // * For resource types where a decrease in the cluster's allocation has been + // requested, billing will be based on the newly-requested level. + // Until completion of the embedded operation: + // * Cancelling the operation will set its metadata's "cancelled_at_time", + // and begin restoring resources to their pre-request values. The operation + // is guaranteed to succeed at undoing all resource changes, after which + // point it will terminate with a CANCELLED status. + // * All other attempts to modify or delete the cluster will be rejected. + // * Reading the cluster via the API will continue to give the pre-request + // resource levels. + // Upon completion of the embedded operation: + // * Billing will begin for all successfully-allocated resources (some types + // may have lower than the requested levels). + // * All newly-reserved resources will be available for serving the cluster's + // tables. + // * The cluster's new resource levels will be readable via the API. + // [UpdateClusterMetadata][google.bigtable.admin.cluster.v1.UpdateClusterMetadata] The embedded operation's "response" field type is + // [Cluster][google.bigtable.admin.cluster.v1.Cluster], if successful. + UpdateCluster(ctx context.Context, in *Cluster, opts ...grpc.CallOption) (*Cluster, error) + // Marks a cluster and all of its tables for permanent deletion in 7 days. + // Immediately upon completion of the request: + // * Billing will cease for all of the cluster's reserved resources. + // * The cluster's "delete_time" field will be set 7 days in the future. + // Soon afterward: + // * All tables within the cluster will become unavailable. + // Prior to the cluster's "delete_time": + // * The cluster can be recovered with a call to UndeleteCluster. + // * All other attempts to modify or delete the cluster will be rejected. + // At the cluster's "delete_time": + // * The cluster and *all of its tables* will immediately and irrevocably + // disappear from the API, and their data will be permanently deleted. + DeleteCluster(ctx context.Context, in *DeleteClusterRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) + // Cancels the scheduled deletion of an cluster and begins preparing it to + // resume serving. The returned operation will also be embedded as the + // cluster's "current_operation". + // Immediately upon completion of this request: + // * The cluster's "delete_time" field will be unset, protecting it from + // automatic deletion. + // Until completion of the returned operation: + // * The operation cannot be cancelled. + // Upon completion of the returned operation: + // * Billing for the cluster's resources will resume. + // * All tables within the cluster will be available. + // [UndeleteClusterMetadata][google.bigtable.admin.cluster.v1.UndeleteClusterMetadata] The embedded operation's "response" field type is + // [Cluster][google.bigtable.admin.cluster.v1.Cluster], if successful. + UndeleteCluster(ctx context.Context, in *UndeleteClusterRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) +} + +type bigtableClusterServiceClient struct { + cc *grpc.ClientConn +} + +func NewBigtableClusterServiceClient(cc *grpc.ClientConn) BigtableClusterServiceClient { + return &bigtableClusterServiceClient{cc} +} + +func (c *bigtableClusterServiceClient) ListZones(ctx context.Context, in *ListZonesRequest, opts ...grpc.CallOption) (*ListZonesResponse, error) { + out := new(ListZonesResponse) + err := grpc.Invoke(ctx, "/google.bigtable.admin.cluster.v1.BigtableClusterService/ListZones", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableClusterServiceClient) GetCluster(ctx context.Context, in *GetClusterRequest, opts ...grpc.CallOption) (*Cluster, error) { + out := new(Cluster) + err := grpc.Invoke(ctx, "/google.bigtable.admin.cluster.v1.BigtableClusterService/GetCluster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableClusterServiceClient) ListClusters(ctx context.Context, in *ListClustersRequest, opts ...grpc.CallOption) (*ListClustersResponse, error) { + out := new(ListClustersResponse) + err := grpc.Invoke(ctx, "/google.bigtable.admin.cluster.v1.BigtableClusterService/ListClusters", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableClusterServiceClient) CreateCluster(ctx context.Context, in *CreateClusterRequest, opts ...grpc.CallOption) (*Cluster, error) { + out := new(Cluster) + err := grpc.Invoke(ctx, "/google.bigtable.admin.cluster.v1.BigtableClusterService/CreateCluster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableClusterServiceClient) UpdateCluster(ctx context.Context, in *Cluster, opts ...grpc.CallOption) (*Cluster, error) { + out := new(Cluster) + err := grpc.Invoke(ctx, "/google.bigtable.admin.cluster.v1.BigtableClusterService/UpdateCluster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableClusterServiceClient) DeleteCluster(ctx context.Context, in *DeleteClusterRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) { + out := new(google_protobuf2.Empty) + err := grpc.Invoke(ctx, "/google.bigtable.admin.cluster.v1.BigtableClusterService/DeleteCluster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableClusterServiceClient) UndeleteCluster(ctx context.Context, in *UndeleteClusterRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.bigtable.admin.cluster.v1.BigtableClusterService/UndeleteCluster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for BigtableClusterService service + +type BigtableClusterServiceServer interface { + // Lists the supported zones for the given project. + ListZones(context.Context, *ListZonesRequest) (*ListZonesResponse, error) + // Gets information about a particular cluster. + GetCluster(context.Context, *GetClusterRequest) (*Cluster, error) + // Lists all clusters in the given project, along with any zones for which + // cluster information could not be retrieved. + ListClusters(context.Context, *ListClustersRequest) (*ListClustersResponse, error) + // Creates a cluster and begins preparing it to begin serving. The returned + // cluster embeds as its "current_operation" a long-running operation which + // can be used to track the progress of turning up the new cluster. + // Immediately upon completion of this request: + // * The cluster will be readable via the API, with all requested attributes + // but no allocated resources. + // Until completion of the embedded operation: + // * Cancelling the operation will render the cluster immediately unreadable + // via the API. + // * All other attempts to modify or delete the cluster will be rejected. + // Upon completion of the embedded operation: + // * Billing for all successfully-allocated resources will begin (some types + // may have lower than the requested levels). + // * New tables can be created in the cluster. + // * The cluster's allocated resource levels will be readable via the API. + // The embedded operation's "metadata" field type is + // [CreateClusterMetadata][google.bigtable.admin.cluster.v1.CreateClusterMetadata] The embedded operation's "response" field type is + // [Cluster][google.bigtable.admin.cluster.v1.Cluster], if successful. + CreateCluster(context.Context, *CreateClusterRequest) (*Cluster, error) + // Updates a cluster, and begins allocating or releasing resources as + // requested. The returned cluster embeds as its "current_operation" a + // long-running operation which can be used to track the progress of updating + // the cluster. + // Immediately upon completion of this request: + // * For resource types where a decrease in the cluster's allocation has been + // requested, billing will be based on the newly-requested level. + // Until completion of the embedded operation: + // * Cancelling the operation will set its metadata's "cancelled_at_time", + // and begin restoring resources to their pre-request values. The operation + // is guaranteed to succeed at undoing all resource changes, after which + // point it will terminate with a CANCELLED status. + // * All other attempts to modify or delete the cluster will be rejected. + // * Reading the cluster via the API will continue to give the pre-request + // resource levels. + // Upon completion of the embedded operation: + // * Billing will begin for all successfully-allocated resources (some types + // may have lower than the requested levels). + // * All newly-reserved resources will be available for serving the cluster's + // tables. + // * The cluster's new resource levels will be readable via the API. + // [UpdateClusterMetadata][google.bigtable.admin.cluster.v1.UpdateClusterMetadata] The embedded operation's "response" field type is + // [Cluster][google.bigtable.admin.cluster.v1.Cluster], if successful. + UpdateCluster(context.Context, *Cluster) (*Cluster, error) + // Marks a cluster and all of its tables for permanent deletion in 7 days. + // Immediately upon completion of the request: + // * Billing will cease for all of the cluster's reserved resources. + // * The cluster's "delete_time" field will be set 7 days in the future. + // Soon afterward: + // * All tables within the cluster will become unavailable. + // Prior to the cluster's "delete_time": + // * The cluster can be recovered with a call to UndeleteCluster. + // * All other attempts to modify or delete the cluster will be rejected. + // At the cluster's "delete_time": + // * The cluster and *all of its tables* will immediately and irrevocably + // disappear from the API, and their data will be permanently deleted. + DeleteCluster(context.Context, *DeleteClusterRequest) (*google_protobuf2.Empty, error) + // Cancels the scheduled deletion of an cluster and begins preparing it to + // resume serving. The returned operation will also be embedded as the + // cluster's "current_operation". + // Immediately upon completion of this request: + // * The cluster's "delete_time" field will be unset, protecting it from + // automatic deletion. + // Until completion of the returned operation: + // * The operation cannot be cancelled. + // Upon completion of the returned operation: + // * Billing for the cluster's resources will resume. + // * All tables within the cluster will be available. + // [UndeleteClusterMetadata][google.bigtable.admin.cluster.v1.UndeleteClusterMetadata] The embedded operation's "response" field type is + // [Cluster][google.bigtable.admin.cluster.v1.Cluster], if successful. + UndeleteCluster(context.Context, *UndeleteClusterRequest) (*google_longrunning.Operation, error) +} + +func RegisterBigtableClusterServiceServer(s *grpc.Server, srv BigtableClusterServiceServer) { + s.RegisterService(&_BigtableClusterService_serviceDesc, srv) +} + +func _BigtableClusterService_ListZones_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListZonesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableClusterServiceServer).ListZones(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.cluster.v1.BigtableClusterService/ListZones", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableClusterServiceServer).ListZones(ctx, req.(*ListZonesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableClusterService_GetCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableClusterServiceServer).GetCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.cluster.v1.BigtableClusterService/GetCluster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableClusterServiceServer).GetCluster(ctx, req.(*GetClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableClusterService_ListClusters_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListClustersRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableClusterServiceServer).ListClusters(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.cluster.v1.BigtableClusterService/ListClusters", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableClusterServiceServer).ListClusters(ctx, req.(*ListClustersRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableClusterService_CreateCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableClusterServiceServer).CreateCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.cluster.v1.BigtableClusterService/CreateCluster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableClusterServiceServer).CreateCluster(ctx, req.(*CreateClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableClusterService_UpdateCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Cluster) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableClusterServiceServer).UpdateCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.cluster.v1.BigtableClusterService/UpdateCluster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableClusterServiceServer).UpdateCluster(ctx, req.(*Cluster)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableClusterService_DeleteCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableClusterServiceServer).DeleteCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.cluster.v1.BigtableClusterService/DeleteCluster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableClusterServiceServer).DeleteCluster(ctx, req.(*DeleteClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableClusterService_UndeleteCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UndeleteClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableClusterServiceServer).UndeleteCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.cluster.v1.BigtableClusterService/UndeleteCluster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableClusterServiceServer).UndeleteCluster(ctx, req.(*UndeleteClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _BigtableClusterService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.bigtable.admin.cluster.v1.BigtableClusterService", + HandlerType: (*BigtableClusterServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListZones", + Handler: _BigtableClusterService_ListZones_Handler, + }, + { + MethodName: "GetCluster", + Handler: _BigtableClusterService_GetCluster_Handler, + }, + { + MethodName: "ListClusters", + Handler: _BigtableClusterService_ListClusters_Handler, + }, + { + MethodName: "CreateCluster", + Handler: _BigtableClusterService_CreateCluster_Handler, + }, + { + MethodName: "UpdateCluster", + Handler: _BigtableClusterService_UpdateCluster_Handler, + }, + { + MethodName: "DeleteCluster", + Handler: _BigtableClusterService_DeleteCluster_Handler, + }, + { + MethodName: "UndeleteCluster", + Handler: _BigtableClusterService_UndeleteCluster_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/bigtable/admin/cluster/v1/bigtable_cluster_service.proto", +} + +func init() { + proto.RegisterFile("google/bigtable/admin/cluster/v1/bigtable_cluster_service.proto", fileDescriptor1) +} + +var fileDescriptor1 = []byte{ + // 515 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0x4f, 0x6b, 0x14, 0x31, + 0x18, 0xc6, 0x89, 0x07, 0xa1, 0xc1, 0x45, 0xc8, 0xa1, 0x87, 0x6d, 0x0b, 0x32, 0x15, 0xb1, 0x23, + 0x26, 0x6e, 0x17, 0xc5, 0xbf, 0x08, 0x5b, 0xa5, 0x1e, 0x04, 0x8b, 0xd2, 0x4b, 0x2f, 0x4b, 0x76, + 0xe7, 0x35, 0x8c, 0xcc, 0x24, 0x31, 0xc9, 0x2c, 0xa8, 0xf4, 0xe2, 0xcd, 0x93, 0x88, 0x27, 0x3d, + 0x78, 0xeb, 0xdd, 0xef, 0xe2, 0x57, 0xf0, 0x83, 0xc8, 0x64, 0x92, 0xb5, 0x2b, 0x6b, 0x77, 0xa6, + 0xb7, 0x99, 0xc9, 0xfb, 0xbc, 0xcf, 0x6f, 0x9e, 0x24, 0x2f, 0x7e, 0x2c, 0x94, 0x12, 0x05, 0xb0, + 0x49, 0x2e, 0x1c, 0x9f, 0x14, 0xc0, 0x78, 0x56, 0xe6, 0x92, 0x4d, 0x8b, 0xca, 0x3a, 0x30, 0x6c, + 0x36, 0x98, 0xaf, 0x8c, 0xc3, 0xb7, 0xb1, 0x05, 0x33, 0xcb, 0xa7, 0x40, 0xb5, 0x51, 0x4e, 0x91, + 0x2b, 0x4d, 0x03, 0x1a, 0xcb, 0xa8, 0x6f, 0x40, 0x43, 0x31, 0x9d, 0x0d, 0xfa, 0x9b, 0xc1, 0x82, + 0xeb, 0x9c, 0x71, 0x29, 0x95, 0xe3, 0x2e, 0x57, 0xd2, 0x36, 0xfa, 0xfe, 0xc3, 0xee, 0x00, 0x19, + 0x77, 0x3c, 0xa8, 0x9f, 0x9d, 0x1b, 0x7f, 0x5c, 0x82, 0xb5, 0x5c, 0x40, 0xe4, 0xd8, 0x0e, 0x9d, + 0x0a, 0x25, 0x85, 0xa9, 0xa4, 0xcc, 0xa5, 0x60, 0x4a, 0x83, 0x59, 0x80, 0xdd, 0x08, 0x45, 0xfe, + 0x6d, 0x52, 0xbd, 0x66, 0x50, 0x6a, 0xf7, 0xae, 0x59, 0xdc, 0xfd, 0xb4, 0x86, 0xd7, 0x47, 0xc1, + 0x6d, 0xaf, 0x31, 0x7b, 0xd5, 0x78, 0x91, 0x6f, 0x08, 0xaf, 0x3d, 0xcf, 0xad, 0x3b, 0x52, 0x12, + 0x2c, 0xd9, 0xa5, 0xab, 0x32, 0xa3, 0xf3, 0xe2, 0x97, 0xf0, 0xb6, 0x02, 0xeb, 0xfa, 0xc3, 0x4e, + 0x1a, 0xab, 0x95, 0xb4, 0x90, 0x6c, 0x7f, 0xfc, 0xf5, 0xfb, 0xeb, 0x85, 0x2d, 0xb2, 0x51, 0x07, + 0xf1, 0x41, 0xf2, 0x12, 0x1e, 0x69, 0xa3, 0xde, 0xc0, 0xd4, 0x59, 0x96, 0x1e, 0xb3, 0xf7, 0x9e, + 0xe6, 0x07, 0xc2, 0x78, 0x1f, 0x5c, 0x20, 0x26, 0x2d, 0x8c, 0xfe, 0x56, 0x47, 0xba, 0x9d, 0xd5, + 0xa2, 0xa0, 0x48, 0x6e, 0x79, 0xa6, 0x94, 0x5c, 0x5f, 0xc6, 0xd4, 0x20, 0xb1, 0x34, 0x6e, 0x60, + 0x8d, 0x49, 0x7e, 0x22, 0x7c, 0xa9, 0xfe, 0xb7, 0xd0, 0xc1, 0x92, 0xdb, 0xed, 0xb2, 0x88, 0xf5, + 0x11, 0xf2, 0x4e, 0x57, 0x59, 0x48, 0x71, 0xe0, 0x89, 0x6f, 0x90, 0x9d, 0xe5, 0x29, 0x72, 0x21, + 0x0c, 0x08, 0xee, 0x20, 0x9b, 0x53, 0x93, 0x13, 0x84, 0x7b, 0x7b, 0x06, 0xb8, 0x8b, 0x07, 0x81, + 0xb4, 0x30, 0x5f, 0x10, 0x9c, 0x23, 0xd9, 0xc0, 0x99, 0x5c, 0x3b, 0x2b, 0xd9, 0xe3, 0x39, 0xe4, + 0x7d, 0x94, 0x92, 0xef, 0x08, 0xf7, 0x0e, 0x75, 0x76, 0x8a, 0xb3, 0xbd, 0x5f, 0x17, 0xb4, 0xa1, + 0x47, 0xbb, 0xd9, 0x6f, 0xbd, 0xe9, 0x35, 0xdc, 0x17, 0x84, 0x7b, 0x4f, 0xa0, 0x80, 0x4e, 0x21, + 0x2e, 0x08, 0x62, 0x88, 0xeb, 0x51, 0x17, 0xef, 0x2d, 0x7d, 0x5a, 0xdf, 0xdb, 0x78, 0x16, 0xd3, + 0xf6, 0x67, 0xf1, 0x04, 0xe1, 0xcb, 0x87, 0x32, 0x5b, 0xa0, 0xba, 0xbb, 0x9a, 0xea, 0x1f, 0x49, + 0xe4, 0xda, 0x8a, 0xca, 0x53, 0x43, 0x87, 0xbe, 0x88, 0x43, 0x27, 0xb9, 0xe7, 0xf1, 0x86, 0xc9, + 0xa0, 0x75, 0x6a, 0x55, 0xf0, 0x19, 0x7d, 0x46, 0xf8, 0xea, 0x54, 0x95, 0x2b, 0xc9, 0x46, 0x9b, + 0xcb, 0x27, 0x96, 0x3d, 0xa8, 0x93, 0x3a, 0x40, 0x47, 0xfb, 0xa1, 0x83, 0x50, 0x05, 0x97, 0x82, + 0x2a, 0x23, 0x98, 0x00, 0xe9, 0x73, 0x64, 0xcd, 0x12, 0xd7, 0xb9, 0xfd, 0xff, 0xfc, 0x7d, 0x10, + 0x1e, 0x27, 0x17, 0xbd, 0x66, 0xf8, 0x27, 0x00, 0x00, 0xff, 0xff, 0x50, 0x92, 0x91, 0x86, 0x71, + 0x06, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/bigtable/admin/cluster/v1/bigtable_cluster_service_messages.pb.go b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/cluster/v1/bigtable_cluster_service_messages.pb.go new file mode 100644 index 0000000..1f993aa --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/cluster/v1/bigtable_cluster_service_messages.pb.go @@ -0,0 +1,376 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/bigtable/admin/cluster/v1/bigtable_cluster_service_messages.proto + +package cluster + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import google_protobuf3 "github.com/golang/protobuf/ptypes/timestamp" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Request message for BigtableClusterService.ListZones. +type ListZonesRequest struct { + // The unique name of the project for which a list of supported zones is + // requested. + // Values are of the form projects/ + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *ListZonesRequest) Reset() { *m = ListZonesRequest{} } +func (m *ListZonesRequest) String() string { return proto.CompactTextString(m) } +func (*ListZonesRequest) ProtoMessage() {} +func (*ListZonesRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } + +func (m *ListZonesRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Response message for BigtableClusterService.ListZones. +type ListZonesResponse struct { + // The list of requested zones. + Zones []*Zone `protobuf:"bytes,1,rep,name=zones" json:"zones,omitempty"` +} + +func (m *ListZonesResponse) Reset() { *m = ListZonesResponse{} } +func (m *ListZonesResponse) String() string { return proto.CompactTextString(m) } +func (*ListZonesResponse) ProtoMessage() {} +func (*ListZonesResponse) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{1} } + +func (m *ListZonesResponse) GetZones() []*Zone { + if m != nil { + return m.Zones + } + return nil +} + +// Request message for BigtableClusterService.GetCluster. +type GetClusterRequest struct { + // The unique name of the requested cluster. + // Values are of the form projects//zones//clusters/ + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetClusterRequest) Reset() { *m = GetClusterRequest{} } +func (m *GetClusterRequest) String() string { return proto.CompactTextString(m) } +func (*GetClusterRequest) ProtoMessage() {} +func (*GetClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{2} } + +func (m *GetClusterRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for BigtableClusterService.ListClusters. +type ListClustersRequest struct { + // The unique name of the project for which a list of clusters is requested. + // Values are of the form projects/ + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *ListClustersRequest) Reset() { *m = ListClustersRequest{} } +func (m *ListClustersRequest) String() string { return proto.CompactTextString(m) } +func (*ListClustersRequest) ProtoMessage() {} +func (*ListClustersRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{3} } + +func (m *ListClustersRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Response message for BigtableClusterService.ListClusters. +type ListClustersResponse struct { + // The list of requested Clusters. + Clusters []*Cluster `protobuf:"bytes,1,rep,name=clusters" json:"clusters,omitempty"` + // The zones for which clusters could not be retrieved. + FailedZones []*Zone `protobuf:"bytes,2,rep,name=failed_zones,json=failedZones" json:"failed_zones,omitempty"` +} + +func (m *ListClustersResponse) Reset() { *m = ListClustersResponse{} } +func (m *ListClustersResponse) String() string { return proto.CompactTextString(m) } +func (*ListClustersResponse) ProtoMessage() {} +func (*ListClustersResponse) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{4} } + +func (m *ListClustersResponse) GetClusters() []*Cluster { + if m != nil { + return m.Clusters + } + return nil +} + +func (m *ListClustersResponse) GetFailedZones() []*Zone { + if m != nil { + return m.FailedZones + } + return nil +} + +// Request message for BigtableClusterService.CreateCluster. +type CreateClusterRequest struct { + // The unique name of the zone in which to create the cluster. + // Values are of the form projects//zones/ + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The id to be used when referring to the new cluster within its zone, + // e.g. just the "test-cluster" section of the full name + // "projects//zones//clusters/test-cluster". + ClusterId string `protobuf:"bytes,2,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The cluster to create. + // The "name", "delete_time", and "current_operation" fields must be left + // blank. + Cluster *Cluster `protobuf:"bytes,3,opt,name=cluster" json:"cluster,omitempty"` +} + +func (m *CreateClusterRequest) Reset() { *m = CreateClusterRequest{} } +func (m *CreateClusterRequest) String() string { return proto.CompactTextString(m) } +func (*CreateClusterRequest) ProtoMessage() {} +func (*CreateClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{5} } + +func (m *CreateClusterRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *CreateClusterRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *CreateClusterRequest) GetCluster() *Cluster { + if m != nil { + return m.Cluster + } + return nil +} + +// Metadata type for the operation returned by +// BigtableClusterService.CreateCluster. +type CreateClusterMetadata struct { + // The request which prompted the creation of this operation. + OriginalRequest *CreateClusterRequest `protobuf:"bytes,1,opt,name=original_request,json=originalRequest" json:"original_request,omitempty"` + // The time at which original_request was received. + RequestTime *google_protobuf3.Timestamp `protobuf:"bytes,2,opt,name=request_time,json=requestTime" json:"request_time,omitempty"` + // The time at which this operation failed or was completed successfully. + FinishTime *google_protobuf3.Timestamp `protobuf:"bytes,3,opt,name=finish_time,json=finishTime" json:"finish_time,omitempty"` +} + +func (m *CreateClusterMetadata) Reset() { *m = CreateClusterMetadata{} } +func (m *CreateClusterMetadata) String() string { return proto.CompactTextString(m) } +func (*CreateClusterMetadata) ProtoMessage() {} +func (*CreateClusterMetadata) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{6} } + +func (m *CreateClusterMetadata) GetOriginalRequest() *CreateClusterRequest { + if m != nil { + return m.OriginalRequest + } + return nil +} + +func (m *CreateClusterMetadata) GetRequestTime() *google_protobuf3.Timestamp { + if m != nil { + return m.RequestTime + } + return nil +} + +func (m *CreateClusterMetadata) GetFinishTime() *google_protobuf3.Timestamp { + if m != nil { + return m.FinishTime + } + return nil +} + +// Metadata type for the operation returned by +// BigtableClusterService.UpdateCluster. +type UpdateClusterMetadata struct { + // The request which prompted the creation of this operation. + OriginalRequest *Cluster `protobuf:"bytes,1,opt,name=original_request,json=originalRequest" json:"original_request,omitempty"` + // The time at which original_request was received. + RequestTime *google_protobuf3.Timestamp `protobuf:"bytes,2,opt,name=request_time,json=requestTime" json:"request_time,omitempty"` + // The time at which this operation was cancelled. If set, this operation is + // in the process of undoing itself (which is guaranteed to succeed) and + // cannot be cancelled again. + CancelTime *google_protobuf3.Timestamp `protobuf:"bytes,3,opt,name=cancel_time,json=cancelTime" json:"cancel_time,omitempty"` + // The time at which this operation failed or was completed successfully. + FinishTime *google_protobuf3.Timestamp `protobuf:"bytes,4,opt,name=finish_time,json=finishTime" json:"finish_time,omitempty"` +} + +func (m *UpdateClusterMetadata) Reset() { *m = UpdateClusterMetadata{} } +func (m *UpdateClusterMetadata) String() string { return proto.CompactTextString(m) } +func (*UpdateClusterMetadata) ProtoMessage() {} +func (*UpdateClusterMetadata) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{7} } + +func (m *UpdateClusterMetadata) GetOriginalRequest() *Cluster { + if m != nil { + return m.OriginalRequest + } + return nil +} + +func (m *UpdateClusterMetadata) GetRequestTime() *google_protobuf3.Timestamp { + if m != nil { + return m.RequestTime + } + return nil +} + +func (m *UpdateClusterMetadata) GetCancelTime() *google_protobuf3.Timestamp { + if m != nil { + return m.CancelTime + } + return nil +} + +func (m *UpdateClusterMetadata) GetFinishTime() *google_protobuf3.Timestamp { + if m != nil { + return m.FinishTime + } + return nil +} + +// Request message for BigtableClusterService.DeleteCluster. +type DeleteClusterRequest struct { + // The unique name of the cluster to be deleted. + // Values are of the form projects//zones//clusters/ + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteClusterRequest) Reset() { *m = DeleteClusterRequest{} } +func (m *DeleteClusterRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteClusterRequest) ProtoMessage() {} +func (*DeleteClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{8} } + +func (m *DeleteClusterRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for BigtableClusterService.UndeleteCluster. +type UndeleteClusterRequest struct { + // The unique name of the cluster to be un-deleted. + // Values are of the form projects//zones//clusters/ + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *UndeleteClusterRequest) Reset() { *m = UndeleteClusterRequest{} } +func (m *UndeleteClusterRequest) String() string { return proto.CompactTextString(m) } +func (*UndeleteClusterRequest) ProtoMessage() {} +func (*UndeleteClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{9} } + +func (m *UndeleteClusterRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Metadata type for the operation returned by +// BigtableClusterService.UndeleteCluster. +type UndeleteClusterMetadata struct { + // The time at which the original request was received. + RequestTime *google_protobuf3.Timestamp `protobuf:"bytes,1,opt,name=request_time,json=requestTime" json:"request_time,omitempty"` + // The time at which this operation failed or was completed successfully. + FinishTime *google_protobuf3.Timestamp `protobuf:"bytes,2,opt,name=finish_time,json=finishTime" json:"finish_time,omitempty"` +} + +func (m *UndeleteClusterMetadata) Reset() { *m = UndeleteClusterMetadata{} } +func (m *UndeleteClusterMetadata) String() string { return proto.CompactTextString(m) } +func (*UndeleteClusterMetadata) ProtoMessage() {} +func (*UndeleteClusterMetadata) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{10} } + +func (m *UndeleteClusterMetadata) GetRequestTime() *google_protobuf3.Timestamp { + if m != nil { + return m.RequestTime + } + return nil +} + +func (m *UndeleteClusterMetadata) GetFinishTime() *google_protobuf3.Timestamp { + if m != nil { + return m.FinishTime + } + return nil +} + +// Metadata type for operations initiated by the V2 BigtableAdmin service. +// More complete information for such operations is available via the V2 API. +type V2OperationMetadata struct { +} + +func (m *V2OperationMetadata) Reset() { *m = V2OperationMetadata{} } +func (m *V2OperationMetadata) String() string { return proto.CompactTextString(m) } +func (*V2OperationMetadata) ProtoMessage() {} +func (*V2OperationMetadata) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{11} } + +func init() { + proto.RegisterType((*ListZonesRequest)(nil), "google.bigtable.admin.cluster.v1.ListZonesRequest") + proto.RegisterType((*ListZonesResponse)(nil), "google.bigtable.admin.cluster.v1.ListZonesResponse") + proto.RegisterType((*GetClusterRequest)(nil), "google.bigtable.admin.cluster.v1.GetClusterRequest") + proto.RegisterType((*ListClustersRequest)(nil), "google.bigtable.admin.cluster.v1.ListClustersRequest") + proto.RegisterType((*ListClustersResponse)(nil), "google.bigtable.admin.cluster.v1.ListClustersResponse") + proto.RegisterType((*CreateClusterRequest)(nil), "google.bigtable.admin.cluster.v1.CreateClusterRequest") + proto.RegisterType((*CreateClusterMetadata)(nil), "google.bigtable.admin.cluster.v1.CreateClusterMetadata") + proto.RegisterType((*UpdateClusterMetadata)(nil), "google.bigtable.admin.cluster.v1.UpdateClusterMetadata") + proto.RegisterType((*DeleteClusterRequest)(nil), "google.bigtable.admin.cluster.v1.DeleteClusterRequest") + proto.RegisterType((*UndeleteClusterRequest)(nil), "google.bigtable.admin.cluster.v1.UndeleteClusterRequest") + proto.RegisterType((*UndeleteClusterMetadata)(nil), "google.bigtable.admin.cluster.v1.UndeleteClusterMetadata") + proto.RegisterType((*V2OperationMetadata)(nil), "google.bigtable.admin.cluster.v1.V2OperationMetadata") +} + +func init() { + proto.RegisterFile("google/bigtable/admin/cluster/v1/bigtable_cluster_service_messages.proto", fileDescriptor2) +} + +var fileDescriptor2 = []byte{ + // 541 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0x4d, 0x6f, 0xd3, 0x40, + 0x10, 0xd5, 0x26, 0xe5, 0xa3, 0xe3, 0x4a, 0xb4, 0x6e, 0x02, 0x51, 0x24, 0x44, 0x64, 0x50, 0x69, + 0x11, 0xb2, 0xd5, 0x20, 0x71, 0x69, 0xb9, 0x24, 0xa0, 0x52, 0x89, 0x8a, 0x12, 0x5a, 0x0e, 0xbd, + 0x58, 0x9b, 0x78, 0x62, 0x56, 0xb2, 0x77, 0x8d, 0x77, 0x93, 0x03, 0x3f, 0x82, 0x1b, 0xfc, 0x04, + 0xc4, 0x2f, 0xe4, 0x8c, 0xec, 0xdd, 0x8d, 0x68, 0x95, 0xd6, 0xb1, 0x10, 0xb7, 0xdd, 0x99, 0xf7, + 0x66, 0xde, 0x9b, 0x1d, 0x69, 0xe1, 0x6d, 0x2c, 0x44, 0x9c, 0x60, 0x30, 0x66, 0xb1, 0xa2, 0xe3, + 0x04, 0x03, 0x1a, 0xa5, 0x8c, 0x07, 0x93, 0x64, 0x26, 0x15, 0xe6, 0xc1, 0x7c, 0x7f, 0x91, 0x09, + 0x4d, 0x2c, 0x94, 0x98, 0xcf, 0xd9, 0x04, 0xc3, 0x14, 0xa5, 0xa4, 0x31, 0x4a, 0x3f, 0xcb, 0x85, + 0x12, 0x6e, 0x4f, 0x57, 0xf2, 0x2d, 0xde, 0x2f, 0x2b, 0xf9, 0x86, 0xe5, 0xcf, 0xf7, 0xbb, 0x87, + 0xf5, 0x7b, 0x45, 0x54, 0x51, 0x5d, 0xbf, 0xfb, 0xc8, 0xb0, 0xcb, 0xdb, 0x78, 0x36, 0x0d, 0x14, + 0x4b, 0x51, 0x2a, 0x9a, 0x66, 0x1a, 0xe0, 0xed, 0xc0, 0xe6, 0x3b, 0x26, 0xd5, 0x85, 0xe0, 0x28, + 0x47, 0xf8, 0x65, 0x86, 0x52, 0xb9, 0x2e, 0xac, 0x71, 0x9a, 0x62, 0x87, 0xf4, 0xc8, 0xee, 0xfa, + 0xa8, 0x3c, 0x7b, 0x1f, 0x60, 0xeb, 0x2f, 0x9c, 0xcc, 0x04, 0x97, 0xe8, 0x1e, 0xc2, 0xad, 0xaf, + 0x45, 0xa0, 0x43, 0x7a, 0xcd, 0x5d, 0xa7, 0xbf, 0xe3, 0x57, 0xb9, 0xf1, 0x0b, 0xfe, 0x48, 0x93, + 0xbc, 0xa7, 0xb0, 0x75, 0x84, 0x6a, 0xa8, 0x93, 0x37, 0xf5, 0xde, 0x83, 0xed, 0xa2, 0xb7, 0x41, + 0xde, 0x28, 0xf3, 0x17, 0x81, 0xd6, 0x65, 0xac, 0x91, 0xfa, 0x06, 0xee, 0x1a, 0x19, 0x56, 0xed, + 0x5e, 0xb5, 0x5a, 0xab, 0x6d, 0x41, 0x75, 0x8f, 0x61, 0x63, 0x4a, 0x59, 0x82, 0x51, 0xa8, 0x8d, + 0x37, 0x6a, 0x19, 0x77, 0x34, 0xb7, 0x1c, 0xa2, 0xf7, 0x8d, 0x40, 0x6b, 0x98, 0x23, 0x55, 0x58, + 0x3d, 0x02, 0xf7, 0x21, 0x80, 0x7d, 0x5d, 0x16, 0x75, 0x1a, 0x65, 0x66, 0xdd, 0x44, 0x8e, 0x23, + 0x77, 0x08, 0x77, 0xcc, 0xa5, 0xd3, 0xec, 0x91, 0x7a, 0xe6, 0x2c, 0xd3, 0xfb, 0x4d, 0xa0, 0x7d, + 0x49, 0xd0, 0x09, 0x2a, 0x5a, 0xec, 0x92, 0x4b, 0x61, 0x53, 0xe4, 0x2c, 0x66, 0x9c, 0x26, 0x61, + 0xae, 0x55, 0x96, 0xea, 0x9c, 0xfe, 0xcb, 0x15, 0xfa, 0x2c, 0xf1, 0x38, 0xba, 0x67, 0xeb, 0x59, + 0xd3, 0xaf, 0x60, 0xc3, 0x54, 0x0e, 0x8b, 0x15, 0x2d, 0x2d, 0x3a, 0xfd, 0xae, 0x2d, 0x6f, 0xf7, + 0xd7, 0x3f, 0xb3, 0xfb, 0x3b, 0x72, 0x0c, 0xbe, 0x88, 0xb8, 0x07, 0xe0, 0x4c, 0x19, 0x67, 0xf2, + 0xb3, 0x66, 0x37, 0x2b, 0xd9, 0xa0, 0xe1, 0x45, 0xc0, 0xfb, 0xd9, 0x80, 0xf6, 0x79, 0x16, 0x2d, + 0x31, 0x7e, 0x76, 0xad, 0xf1, 0x1a, 0x03, 0xfe, 0x0f, 0x5e, 0x27, 0x94, 0x4f, 0x30, 0x59, 0xd9, + 0xab, 0x86, 0x2f, 0x1b, 0xd4, 0x5a, 0xad, 0x41, 0x3d, 0x83, 0xd6, 0x6b, 0x4c, 0x70, 0x95, 0x8d, + 0xf5, 0x9e, 0xc3, 0xfd, 0x73, 0x1e, 0xad, 0x8a, 0xfe, 0x4e, 0xe0, 0xc1, 0x15, 0xf8, 0xe2, 0x11, + 0xae, 0x8e, 0x8b, 0xfc, 0xd3, 0x6a, 0x34, 0x6a, 0x39, 0x6e, 0xc3, 0xf6, 0xa7, 0xfe, 0xfb, 0x0c, + 0x73, 0xaa, 0x98, 0xe0, 0x56, 0xd2, 0xe0, 0x07, 0x81, 0x27, 0x13, 0x91, 0x56, 0xee, 0xc0, 0xe0, + 0xf1, 0xc0, 0xa4, 0x8c, 0xa9, 0x8f, 0xfa, 0x1b, 0x38, 0x31, 0xbf, 0xc0, 0x69, 0xd1, 0xfd, 0x94, + 0x5c, 0x1c, 0x99, 0x42, 0xb1, 0x48, 0x28, 0x8f, 0x7d, 0x91, 0xc7, 0x41, 0x8c, 0xbc, 0xd4, 0x16, + 0xe8, 0x14, 0xcd, 0x98, 0xbc, 0xfe, 0x0f, 0x38, 0x30, 0xc7, 0xf1, 0xed, 0x92, 0xf3, 0xe2, 0x4f, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xc1, 0x75, 0x68, 0x13, 0xa2, 0x06, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/bigtable/admin/table/v1/bigtable_table_data.pb.go b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/table/v1/bigtable_table_data.pb.go index 24636a7..2c6183d 100644 --- a/vendor/google.golang.org/genproto/googleapis/bigtable/admin/table/v1/bigtable_table_data.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/table/v1/bigtable_table_data.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/bigtable/admin/table/v1/bigtable_table_data.proto -// DO NOT EDIT! /* Package table is a generated protocol buffer package. diff --git a/vendor/google.golang.org/genproto/googleapis/bigtable/admin/table/v1/bigtable_table_service.pb.go b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/table/v1/bigtable_table_service.pb.go index 342c076..3d5049a 100644 --- a/vendor/google.golang.org/genproto/googleapis/bigtable/admin/table/v1/bigtable_table_service.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/table/v1/bigtable_table_service.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/bigtable/admin/table/v1/bigtable_table_service.proto -// DO NOT EDIT! package table diff --git a/vendor/google.golang.org/genproto/googleapis/bigtable/admin/table/v1/bigtable_table_service_messages.pb.go b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/table/v1/bigtable_table_service_messages.pb.go index 3ac7d7f..9d9ad71 100644 --- a/vendor/google.golang.org/genproto/googleapis/bigtable/admin/table/v1/bigtable_table_service_messages.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/table/v1/bigtable_table_service_messages.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/bigtable/admin/table/v1/bigtable_table_service_messages.proto -// DO NOT EDIT! package table diff --git a/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/bigtable_instance_admin.pb.go b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/bigtable_instance_admin.pb.go index bf2f449..2c32e1e 100644 --- a/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/bigtable_instance_admin.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/bigtable_instance_admin.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/bigtable/admin/v2/bigtable_instance_admin.proto -// DO NOT EDIT! /* Package admin is a generated protocol buffer package. @@ -17,6 +16,7 @@ It has these top-level messages: GetInstanceRequest ListInstancesRequest ListInstancesResponse + PartialUpdateInstanceRequest DeleteInstanceRequest CreateClusterRequest GetClusterRequest @@ -24,19 +24,42 @@ It has these top-level messages: ListClustersResponse DeleteClusterRequest CreateInstanceMetadata + UpdateInstanceMetadata + CreateClusterMetadata UpdateClusterMetadata + CreateAppProfileRequest + GetAppProfileRequest + ListAppProfilesRequest + ListAppProfilesResponse + UpdateAppProfileRequest + DeleteAppProfileRequest + UpdateAppProfileMetadata CreateTableRequest + CreateTableFromSnapshotRequest DropRowRangeRequest ListTablesRequest ListTablesResponse GetTableRequest DeleteTableRequest ModifyColumnFamiliesRequest + GenerateConsistencyTokenRequest + GenerateConsistencyTokenResponse + CheckConsistencyRequest + CheckConsistencyResponse + SnapshotTableRequest + GetSnapshotRequest + ListSnapshotsRequest + ListSnapshotsResponse + DeleteSnapshotRequest + SnapshotTableMetadata + CreateTableFromSnapshotMetadata Instance Cluster + AppProfile Table ColumnFamily GcRule + Snapshot */ package admin @@ -44,8 +67,11 @@ import proto "github.com/golang/protobuf/proto" import fmt "fmt" import math "math" import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_iam_v11 "google.golang.org/genproto/googleapis/iam/v1" +import google_iam_v1 "google.golang.org/genproto/googleapis/iam/v1" import google_longrunning "google.golang.org/genproto/googleapis/longrunning" import google_protobuf3 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf4 "google.golang.org/genproto/protobuf/field_mask" import google_protobuf1 "github.com/golang/protobuf/ptypes/timestamp" import ( @@ -206,6 +232,34 @@ func (m *ListInstancesResponse) GetNextPageToken() string { return "" } +// Request message for BigtableInstanceAdmin.PartialUpdateInstance. +type PartialUpdateInstanceRequest struct { + // The Instance which will (partially) replace the current value. + Instance *Instance `protobuf:"bytes,1,opt,name=instance" json:"instance,omitempty"` + // The subset of Instance fields which should be replaced. + // Must be explicitly set. + UpdateMask *google_protobuf4.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *PartialUpdateInstanceRequest) Reset() { *m = PartialUpdateInstanceRequest{} } +func (m *PartialUpdateInstanceRequest) String() string { return proto.CompactTextString(m) } +func (*PartialUpdateInstanceRequest) ProtoMessage() {} +func (*PartialUpdateInstanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *PartialUpdateInstanceRequest) GetInstance() *Instance { + if m != nil { + return m.Instance + } + return nil +} + +func (m *PartialUpdateInstanceRequest) GetUpdateMask() *google_protobuf4.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + // Request message for BigtableInstanceAdmin.DeleteInstance. type DeleteInstanceRequest struct { // The unique name of the instance to be deleted. @@ -216,7 +270,7 @@ type DeleteInstanceRequest struct { func (m *DeleteInstanceRequest) Reset() { *m = DeleteInstanceRequest{} } func (m *DeleteInstanceRequest) String() string { return proto.CompactTextString(m) } func (*DeleteInstanceRequest) ProtoMessage() {} -func (*DeleteInstanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } +func (*DeleteInstanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } func (m *DeleteInstanceRequest) GetName() string { if m != nil { @@ -243,7 +297,7 @@ type CreateClusterRequest struct { func (m *CreateClusterRequest) Reset() { *m = CreateClusterRequest{} } func (m *CreateClusterRequest) String() string { return proto.CompactTextString(m) } func (*CreateClusterRequest) ProtoMessage() {} -func (*CreateClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } +func (*CreateClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } func (m *CreateClusterRequest) GetParent() string { if m != nil { @@ -276,7 +330,7 @@ type GetClusterRequest struct { func (m *GetClusterRequest) Reset() { *m = GetClusterRequest{} } func (m *GetClusterRequest) String() string { return proto.CompactTextString(m) } func (*GetClusterRequest) ProtoMessage() {} -func (*GetClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } +func (*GetClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } func (m *GetClusterRequest) GetName() string { if m != nil { @@ -299,7 +353,7 @@ type ListClustersRequest struct { func (m *ListClustersRequest) Reset() { *m = ListClustersRequest{} } func (m *ListClustersRequest) String() string { return proto.CompactTextString(m) } func (*ListClustersRequest) ProtoMessage() {} -func (*ListClustersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } +func (*ListClustersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } func (m *ListClustersRequest) GetParent() string { if m != nil { @@ -333,7 +387,7 @@ type ListClustersResponse struct { func (m *ListClustersResponse) Reset() { *m = ListClustersResponse{} } func (m *ListClustersResponse) String() string { return proto.CompactTextString(m) } func (*ListClustersResponse) ProtoMessage() {} -func (*ListClustersResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } +func (*ListClustersResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } func (m *ListClustersResponse) GetClusters() []*Cluster { if m != nil { @@ -366,7 +420,7 @@ type DeleteClusterRequest struct { func (m *DeleteClusterRequest) Reset() { *m = DeleteClusterRequest{} } func (m *DeleteClusterRequest) String() string { return proto.CompactTextString(m) } func (*DeleteClusterRequest) ProtoMessage() {} -func (*DeleteClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } +func (*DeleteClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } func (m *DeleteClusterRequest) GetName() string { if m != nil { @@ -388,7 +442,7 @@ type CreateInstanceMetadata struct { func (m *CreateInstanceMetadata) Reset() { *m = CreateInstanceMetadata{} } func (m *CreateInstanceMetadata) String() string { return proto.CompactTextString(m) } func (*CreateInstanceMetadata) ProtoMessage() {} -func (*CreateInstanceMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } +func (*CreateInstanceMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } func (m *CreateInstanceMetadata) GetOriginalRequest() *CreateInstanceRequest { if m != nil { @@ -411,6 +465,78 @@ func (m *CreateInstanceMetadata) GetFinishTime() *google_protobuf1.Timestamp { return nil } +// The metadata for the Operation returned by UpdateInstance. +type UpdateInstanceMetadata struct { + // The request that prompted the initiation of this UpdateInstance operation. + OriginalRequest *PartialUpdateInstanceRequest `protobuf:"bytes,1,opt,name=original_request,json=originalRequest" json:"original_request,omitempty"` + // The time at which the original request was received. + RequestTime *google_protobuf1.Timestamp `protobuf:"bytes,2,opt,name=request_time,json=requestTime" json:"request_time,omitempty"` + // The time at which the operation failed or was completed successfully. + FinishTime *google_protobuf1.Timestamp `protobuf:"bytes,3,opt,name=finish_time,json=finishTime" json:"finish_time,omitempty"` +} + +func (m *UpdateInstanceMetadata) Reset() { *m = UpdateInstanceMetadata{} } +func (m *UpdateInstanceMetadata) String() string { return proto.CompactTextString(m) } +func (*UpdateInstanceMetadata) ProtoMessage() {} +func (*UpdateInstanceMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *UpdateInstanceMetadata) GetOriginalRequest() *PartialUpdateInstanceRequest { + if m != nil { + return m.OriginalRequest + } + return nil +} + +func (m *UpdateInstanceMetadata) GetRequestTime() *google_protobuf1.Timestamp { + if m != nil { + return m.RequestTime + } + return nil +} + +func (m *UpdateInstanceMetadata) GetFinishTime() *google_protobuf1.Timestamp { + if m != nil { + return m.FinishTime + } + return nil +} + +// The metadata for the Operation returned by CreateCluster. +type CreateClusterMetadata struct { + // The request that prompted the initiation of this CreateCluster operation. + OriginalRequest *CreateClusterRequest `protobuf:"bytes,1,opt,name=original_request,json=originalRequest" json:"original_request,omitempty"` + // The time at which the original request was received. + RequestTime *google_protobuf1.Timestamp `protobuf:"bytes,2,opt,name=request_time,json=requestTime" json:"request_time,omitempty"` + // The time at which the operation failed or was completed successfully. + FinishTime *google_protobuf1.Timestamp `protobuf:"bytes,3,opt,name=finish_time,json=finishTime" json:"finish_time,omitempty"` +} + +func (m *CreateClusterMetadata) Reset() { *m = CreateClusterMetadata{} } +func (m *CreateClusterMetadata) String() string { return proto.CompactTextString(m) } +func (*CreateClusterMetadata) ProtoMessage() {} +func (*CreateClusterMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +func (m *CreateClusterMetadata) GetOriginalRequest() *CreateClusterRequest { + if m != nil { + return m.OriginalRequest + } + return nil +} + +func (m *CreateClusterMetadata) GetRequestTime() *google_protobuf1.Timestamp { + if m != nil { + return m.RequestTime + } + return nil +} + +func (m *CreateClusterMetadata) GetFinishTime() *google_protobuf1.Timestamp { + if m != nil { + return m.FinishTime + } + return nil +} + // The metadata for the Operation returned by UpdateCluster. type UpdateClusterMetadata struct { // The request that prompted the initiation of this UpdateCluster operation. @@ -424,7 +550,7 @@ type UpdateClusterMetadata struct { func (m *UpdateClusterMetadata) Reset() { *m = UpdateClusterMetadata{} } func (m *UpdateClusterMetadata) String() string { return proto.CompactTextString(m) } func (*UpdateClusterMetadata) ProtoMessage() {} -func (*UpdateClusterMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } +func (*UpdateClusterMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } func (m *UpdateClusterMetadata) GetOriginalRequest() *Cluster { if m != nil { @@ -447,11 +573,248 @@ func (m *UpdateClusterMetadata) GetFinishTime() *google_protobuf1.Timestamp { return nil } +// This is a private alpha release of Cloud Bigtable replication. This feature +// is not currently available to most Cloud Bigtable customers. This feature +// might be changed in backward-incompatible ways and is not recommended for +// production use. It is not subject to any SLA or deprecation policy. +// +// Request message for BigtableInstanceAdmin.CreateAppProfile. +type CreateAppProfileRequest struct { + // The unique name of the instance in which to create the new app profile. + // Values are of the form + // `projects//instances/`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The ID to be used when referring to the new app profile within its + // instance, e.g., just `myprofile` rather than + // `projects/myproject/instances/myinstance/appProfiles/myprofile`. + AppProfileId string `protobuf:"bytes,2,opt,name=app_profile_id,json=appProfileId" json:"app_profile_id,omitempty"` + // The app profile to be created. + // Fields marked `OutputOnly` will be ignored. + AppProfile *AppProfile `protobuf:"bytes,3,opt,name=app_profile,json=appProfile" json:"app_profile,omitempty"` + // If true, ignore safety checks when creating the app profile. + IgnoreWarnings bool `protobuf:"varint,4,opt,name=ignore_warnings,json=ignoreWarnings" json:"ignore_warnings,omitempty"` +} + +func (m *CreateAppProfileRequest) Reset() { *m = CreateAppProfileRequest{} } +func (m *CreateAppProfileRequest) String() string { return proto.CompactTextString(m) } +func (*CreateAppProfileRequest) ProtoMessage() {} +func (*CreateAppProfileRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +func (m *CreateAppProfileRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateAppProfileRequest) GetAppProfileId() string { + if m != nil { + return m.AppProfileId + } + return "" +} + +func (m *CreateAppProfileRequest) GetAppProfile() *AppProfile { + if m != nil { + return m.AppProfile + } + return nil +} + +func (m *CreateAppProfileRequest) GetIgnoreWarnings() bool { + if m != nil { + return m.IgnoreWarnings + } + return false +} + +// This is a private alpha release of Cloud Bigtable replication. This feature +// is not currently available to most Cloud Bigtable customers. This feature +// might be changed in backward-incompatible ways and is not recommended for +// production use. It is not subject to any SLA or deprecation policy. +// +// Request message for BigtableInstanceAdmin.GetAppProfile. +type GetAppProfileRequest struct { + // The unique name of the requested app profile. Values are of the form + // `projects//instances//appProfiles/`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetAppProfileRequest) Reset() { *m = GetAppProfileRequest{} } +func (m *GetAppProfileRequest) String() string { return proto.CompactTextString(m) } +func (*GetAppProfileRequest) ProtoMessage() {} +func (*GetAppProfileRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } + +func (m *GetAppProfileRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// This is a private alpha release of Cloud Bigtable replication. This feature +// is not currently available to most Cloud Bigtable customers. This feature +// might be changed in backward-incompatible ways and is not recommended for +// production use. It is not subject to any SLA or deprecation policy. +// +// Request message for BigtableInstanceAdmin.ListAppProfiles. +type ListAppProfilesRequest struct { + // The unique name of the instance for which a list of app profiles is + // requested. Values are of the form + // `projects//instances/`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The value of `next_page_token` returned by a previous call. + PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListAppProfilesRequest) Reset() { *m = ListAppProfilesRequest{} } +func (m *ListAppProfilesRequest) String() string { return proto.CompactTextString(m) } +func (*ListAppProfilesRequest) ProtoMessage() {} +func (*ListAppProfilesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } + +func (m *ListAppProfilesRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListAppProfilesRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// This is a private alpha release of Cloud Bigtable replication. This feature +// is not currently available to most Cloud Bigtable customers. This feature +// might be changed in backward-incompatible ways and is not recommended for +// production use. It is not subject to any SLA or deprecation policy. +// +// Response message for BigtableInstanceAdmin.ListAppProfiles. +type ListAppProfilesResponse struct { + // The list of requested app profiles. + AppProfiles []*AppProfile `protobuf:"bytes,1,rep,name=app_profiles,json=appProfiles" json:"app_profiles,omitempty"` + // Set if not all app profiles could be returned in a single response. + // Pass this value to `page_token` in another request to get the next + // page of results. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListAppProfilesResponse) Reset() { *m = ListAppProfilesResponse{} } +func (m *ListAppProfilesResponse) String() string { return proto.CompactTextString(m) } +func (*ListAppProfilesResponse) ProtoMessage() {} +func (*ListAppProfilesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } + +func (m *ListAppProfilesResponse) GetAppProfiles() []*AppProfile { + if m != nil { + return m.AppProfiles + } + return nil +} + +func (m *ListAppProfilesResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// This is a private alpha release of Cloud Bigtable replication. This feature +// is not currently available to most Cloud Bigtable customers. This feature +// might be changed in backward-incompatible ways and is not recommended for +// production use. It is not subject to any SLA or deprecation policy. +// +// Request message for BigtableInstanceAdmin.UpdateAppProfile. +type UpdateAppProfileRequest struct { + // The app profile which will (partially) replace the current value. + AppProfile *AppProfile `protobuf:"bytes,1,opt,name=app_profile,json=appProfile" json:"app_profile,omitempty"` + // The subset of app profile fields which should be replaced. + // If unset, all fields will be replaced. + UpdateMask *google_protobuf4.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` + // If true, ignore safety checks when updating the app profile. + IgnoreWarnings bool `protobuf:"varint,3,opt,name=ignore_warnings,json=ignoreWarnings" json:"ignore_warnings,omitempty"` +} + +func (m *UpdateAppProfileRequest) Reset() { *m = UpdateAppProfileRequest{} } +func (m *UpdateAppProfileRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateAppProfileRequest) ProtoMessage() {} +func (*UpdateAppProfileRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } + +func (m *UpdateAppProfileRequest) GetAppProfile() *AppProfile { + if m != nil { + return m.AppProfile + } + return nil +} + +func (m *UpdateAppProfileRequest) GetUpdateMask() *google_protobuf4.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +func (m *UpdateAppProfileRequest) GetIgnoreWarnings() bool { + if m != nil { + return m.IgnoreWarnings + } + return false +} + +// This is a private alpha release of Cloud Bigtable replication. This feature +// is not currently available to most Cloud Bigtable customers. This feature +// might be changed in backward-incompatible ways and is not recommended for +// production use. It is not subject to any SLA or deprecation policy. +// +// Request message for BigtableInstanceAdmin.DeleteAppProfile. +type DeleteAppProfileRequest struct { + // The unique name of the app profile to be deleted. Values are of the form + // `projects//instances//appProfiles/`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // If true, ignore safety checks when deleting the app profile. + IgnoreWarnings bool `protobuf:"varint,2,opt,name=ignore_warnings,json=ignoreWarnings" json:"ignore_warnings,omitempty"` +} + +func (m *DeleteAppProfileRequest) Reset() { *m = DeleteAppProfileRequest{} } +func (m *DeleteAppProfileRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteAppProfileRequest) ProtoMessage() {} +func (*DeleteAppProfileRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } + +func (m *DeleteAppProfileRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *DeleteAppProfileRequest) GetIgnoreWarnings() bool { + if m != nil { + return m.IgnoreWarnings + } + return false +} + +// This is a private alpha release of Cloud Bigtable replication. This feature +// is not currently available to most Cloud Bigtable customers. This feature +// might be changed in backward-incompatible ways and is not recommended for +// production use. It is not subject to any SLA or deprecation policy. +// +// The metadata for the Operation returned by UpdateAppProfile. +type UpdateAppProfileMetadata struct { +} + +func (m *UpdateAppProfileMetadata) Reset() { *m = UpdateAppProfileMetadata{} } +func (m *UpdateAppProfileMetadata) String() string { return proto.CompactTextString(m) } +func (*UpdateAppProfileMetadata) ProtoMessage() {} +func (*UpdateAppProfileMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } + func init() { proto.RegisterType((*CreateInstanceRequest)(nil), "google.bigtable.admin.v2.CreateInstanceRequest") proto.RegisterType((*GetInstanceRequest)(nil), "google.bigtable.admin.v2.GetInstanceRequest") proto.RegisterType((*ListInstancesRequest)(nil), "google.bigtable.admin.v2.ListInstancesRequest") proto.RegisterType((*ListInstancesResponse)(nil), "google.bigtable.admin.v2.ListInstancesResponse") + proto.RegisterType((*PartialUpdateInstanceRequest)(nil), "google.bigtable.admin.v2.PartialUpdateInstanceRequest") proto.RegisterType((*DeleteInstanceRequest)(nil), "google.bigtable.admin.v2.DeleteInstanceRequest") proto.RegisterType((*CreateClusterRequest)(nil), "google.bigtable.admin.v2.CreateClusterRequest") proto.RegisterType((*GetClusterRequest)(nil), "google.bigtable.admin.v2.GetClusterRequest") @@ -459,7 +822,16 @@ func init() { proto.RegisterType((*ListClustersResponse)(nil), "google.bigtable.admin.v2.ListClustersResponse") proto.RegisterType((*DeleteClusterRequest)(nil), "google.bigtable.admin.v2.DeleteClusterRequest") proto.RegisterType((*CreateInstanceMetadata)(nil), "google.bigtable.admin.v2.CreateInstanceMetadata") + proto.RegisterType((*UpdateInstanceMetadata)(nil), "google.bigtable.admin.v2.UpdateInstanceMetadata") + proto.RegisterType((*CreateClusterMetadata)(nil), "google.bigtable.admin.v2.CreateClusterMetadata") proto.RegisterType((*UpdateClusterMetadata)(nil), "google.bigtable.admin.v2.UpdateClusterMetadata") + proto.RegisterType((*CreateAppProfileRequest)(nil), "google.bigtable.admin.v2.CreateAppProfileRequest") + proto.RegisterType((*GetAppProfileRequest)(nil), "google.bigtable.admin.v2.GetAppProfileRequest") + proto.RegisterType((*ListAppProfilesRequest)(nil), "google.bigtable.admin.v2.ListAppProfilesRequest") + proto.RegisterType((*ListAppProfilesResponse)(nil), "google.bigtable.admin.v2.ListAppProfilesResponse") + proto.RegisterType((*UpdateAppProfileRequest)(nil), "google.bigtable.admin.v2.UpdateAppProfileRequest") + proto.RegisterType((*DeleteAppProfileRequest)(nil), "google.bigtable.admin.v2.DeleteAppProfileRequest") + proto.RegisterType((*UpdateAppProfileMetadata)(nil), "google.bigtable.admin.v2.UpdateAppProfileMetadata") } // Reference imports to suppress errors if they are not otherwise used. @@ -481,6 +853,8 @@ type BigtableInstanceAdminClient interface { ListInstances(ctx context.Context, in *ListInstancesRequest, opts ...grpc.CallOption) (*ListInstancesResponse, error) // Updates an instance within a project. UpdateInstance(ctx context.Context, in *Instance, opts ...grpc.CallOption) (*Instance, error) + // Partially updates an instance within a project. + PartialUpdateInstance(ctx context.Context, in *PartialUpdateInstanceRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) // Delete an instance from a project. DeleteInstance(ctx context.Context, in *DeleteInstanceRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) // Creates a cluster within an instance. @@ -493,6 +867,67 @@ type BigtableInstanceAdminClient interface { UpdateCluster(ctx context.Context, in *Cluster, opts ...grpc.CallOption) (*google_longrunning.Operation, error) // Deletes a cluster from an instance. DeleteCluster(ctx context.Context, in *DeleteClusterRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) + // This is a private alpha release of Cloud Bigtable replication. This feature + // is not currently available to most Cloud Bigtable customers. This feature + // might be changed in backward-incompatible ways and is not recommended for + // production use. It is not subject to any SLA or deprecation policy. + // + // Creates an app profile within an instance. + CreateAppProfile(ctx context.Context, in *CreateAppProfileRequest, opts ...grpc.CallOption) (*AppProfile, error) + // This is a private alpha release of Cloud Bigtable replication. This feature + // is not currently available to most Cloud Bigtable customers. This feature + // might be changed in backward-incompatible ways and is not recommended for + // production use. It is not subject to any SLA or deprecation policy. + // + // Gets information about an app profile. + GetAppProfile(ctx context.Context, in *GetAppProfileRequest, opts ...grpc.CallOption) (*AppProfile, error) + // This is a private alpha release of Cloud Bigtable replication. This feature + // is not currently available to most Cloud Bigtable customers. This feature + // might be changed in backward-incompatible ways and is not recommended for + // production use. It is not subject to any SLA or deprecation policy. + // + // Lists information about app profiles in an instance. + ListAppProfiles(ctx context.Context, in *ListAppProfilesRequest, opts ...grpc.CallOption) (*ListAppProfilesResponse, error) + // This is a private alpha release of Cloud Bigtable replication. This feature + // is not currently available to most Cloud Bigtable customers. This feature + // might be changed in backward-incompatible ways and is not recommended for + // production use. It is not subject to any SLA or deprecation policy. + // + // Updates an app profile within an instance. + UpdateAppProfile(ctx context.Context, in *UpdateAppProfileRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // This is a private alpha release of Cloud Bigtable replication. This feature + // is not currently available to most Cloud Bigtable customers. This feature + // might be changed in backward-incompatible ways and is not recommended for + // production use. It is not subject to any SLA or deprecation policy. + // + // Deletes an app profile from an instance. + DeleteAppProfile(ctx context.Context, in *DeleteAppProfileRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) + // This is a private alpha release of Cloud Bigtable instance level + // permissions. This feature is not currently available to most Cloud Bigtable + // customers. This feature might be changed in backward-incompatible ways and + // is not recommended for production use. It is not subject to any SLA or + // deprecation policy. + // + // Gets the access control policy for an instance resource. Returns an empty + // policy if an instance exists but does not have a policy set. + GetIamPolicy(ctx context.Context, in *google_iam_v11.GetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) + // This is a private alpha release of Cloud Bigtable instance level + // permissions. This feature is not currently available to most Cloud Bigtable + // customers. This feature might be changed in backward-incompatible ways and + // is not recommended for production use. It is not subject to any SLA or + // deprecation policy. + // + // Sets the access control policy on an instance resource. Replaces any + // existing policy. + SetIamPolicy(ctx context.Context, in *google_iam_v11.SetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) + // This is a private alpha release of Cloud Bigtable instance level + // permissions. This feature is not currently available to most Cloud Bigtable + // customers. This feature might be changed in backward-incompatible ways and + // is not recommended for production use. It is not subject to any SLA or + // deprecation policy. + // + // Returns permissions that the caller has on the specified instance resource. + TestIamPermissions(ctx context.Context, in *google_iam_v11.TestIamPermissionsRequest, opts ...grpc.CallOption) (*google_iam_v11.TestIamPermissionsResponse, error) } type bigtableInstanceAdminClient struct { @@ -539,6 +974,15 @@ func (c *bigtableInstanceAdminClient) UpdateInstance(ctx context.Context, in *In return out, nil } +func (c *bigtableInstanceAdminClient) PartialUpdateInstance(ctx context.Context, in *PartialUpdateInstanceRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableInstanceAdmin/PartialUpdateInstance", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *bigtableInstanceAdminClient) DeleteInstance(ctx context.Context, in *DeleteInstanceRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) { out := new(google_protobuf3.Empty) err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableInstanceAdmin/DeleteInstance", in, out, c.cc, opts...) @@ -593,6 +1037,78 @@ func (c *bigtableInstanceAdminClient) DeleteCluster(ctx context.Context, in *Del return out, nil } +func (c *bigtableInstanceAdminClient) CreateAppProfile(ctx context.Context, in *CreateAppProfileRequest, opts ...grpc.CallOption) (*AppProfile, error) { + out := new(AppProfile) + err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableInstanceAdmin/CreateAppProfile", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableInstanceAdminClient) GetAppProfile(ctx context.Context, in *GetAppProfileRequest, opts ...grpc.CallOption) (*AppProfile, error) { + out := new(AppProfile) + err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableInstanceAdmin/GetAppProfile", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableInstanceAdminClient) ListAppProfiles(ctx context.Context, in *ListAppProfilesRequest, opts ...grpc.CallOption) (*ListAppProfilesResponse, error) { + out := new(ListAppProfilesResponse) + err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableInstanceAdmin/ListAppProfiles", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableInstanceAdminClient) UpdateAppProfile(ctx context.Context, in *UpdateAppProfileRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableInstanceAdmin/UpdateAppProfile", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableInstanceAdminClient) DeleteAppProfile(ctx context.Context, in *DeleteAppProfileRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) { + out := new(google_protobuf3.Empty) + err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableInstanceAdmin/DeleteAppProfile", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableInstanceAdminClient) GetIamPolicy(ctx context.Context, in *google_iam_v11.GetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) { + out := new(google_iam_v1.Policy) + err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableInstanceAdmin/GetIamPolicy", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableInstanceAdminClient) SetIamPolicy(ctx context.Context, in *google_iam_v11.SetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) { + out := new(google_iam_v1.Policy) + err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableInstanceAdmin/SetIamPolicy", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableInstanceAdminClient) TestIamPermissions(ctx context.Context, in *google_iam_v11.TestIamPermissionsRequest, opts ...grpc.CallOption) (*google_iam_v11.TestIamPermissionsResponse, error) { + out := new(google_iam_v11.TestIamPermissionsResponse) + err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableInstanceAdmin/TestIamPermissions", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // Server API for BigtableInstanceAdmin service type BigtableInstanceAdminServer interface { @@ -604,6 +1120,8 @@ type BigtableInstanceAdminServer interface { ListInstances(context.Context, *ListInstancesRequest) (*ListInstancesResponse, error) // Updates an instance within a project. UpdateInstance(context.Context, *Instance) (*Instance, error) + // Partially updates an instance within a project. + PartialUpdateInstance(context.Context, *PartialUpdateInstanceRequest) (*google_longrunning.Operation, error) // Delete an instance from a project. DeleteInstance(context.Context, *DeleteInstanceRequest) (*google_protobuf3.Empty, error) // Creates a cluster within an instance. @@ -616,6 +1134,67 @@ type BigtableInstanceAdminServer interface { UpdateCluster(context.Context, *Cluster) (*google_longrunning.Operation, error) // Deletes a cluster from an instance. DeleteCluster(context.Context, *DeleteClusterRequest) (*google_protobuf3.Empty, error) + // This is a private alpha release of Cloud Bigtable replication. This feature + // is not currently available to most Cloud Bigtable customers. This feature + // might be changed in backward-incompatible ways and is not recommended for + // production use. It is not subject to any SLA or deprecation policy. + // + // Creates an app profile within an instance. + CreateAppProfile(context.Context, *CreateAppProfileRequest) (*AppProfile, error) + // This is a private alpha release of Cloud Bigtable replication. This feature + // is not currently available to most Cloud Bigtable customers. This feature + // might be changed in backward-incompatible ways and is not recommended for + // production use. It is not subject to any SLA or deprecation policy. + // + // Gets information about an app profile. + GetAppProfile(context.Context, *GetAppProfileRequest) (*AppProfile, error) + // This is a private alpha release of Cloud Bigtable replication. This feature + // is not currently available to most Cloud Bigtable customers. This feature + // might be changed in backward-incompatible ways and is not recommended for + // production use. It is not subject to any SLA or deprecation policy. + // + // Lists information about app profiles in an instance. + ListAppProfiles(context.Context, *ListAppProfilesRequest) (*ListAppProfilesResponse, error) + // This is a private alpha release of Cloud Bigtable replication. This feature + // is not currently available to most Cloud Bigtable customers. This feature + // might be changed in backward-incompatible ways and is not recommended for + // production use. It is not subject to any SLA or deprecation policy. + // + // Updates an app profile within an instance. + UpdateAppProfile(context.Context, *UpdateAppProfileRequest) (*google_longrunning.Operation, error) + // This is a private alpha release of Cloud Bigtable replication. This feature + // is not currently available to most Cloud Bigtable customers. This feature + // might be changed in backward-incompatible ways and is not recommended for + // production use. It is not subject to any SLA or deprecation policy. + // + // Deletes an app profile from an instance. + DeleteAppProfile(context.Context, *DeleteAppProfileRequest) (*google_protobuf3.Empty, error) + // This is a private alpha release of Cloud Bigtable instance level + // permissions. This feature is not currently available to most Cloud Bigtable + // customers. This feature might be changed in backward-incompatible ways and + // is not recommended for production use. It is not subject to any SLA or + // deprecation policy. + // + // Gets the access control policy for an instance resource. Returns an empty + // policy if an instance exists but does not have a policy set. + GetIamPolicy(context.Context, *google_iam_v11.GetIamPolicyRequest) (*google_iam_v1.Policy, error) + // This is a private alpha release of Cloud Bigtable instance level + // permissions. This feature is not currently available to most Cloud Bigtable + // customers. This feature might be changed in backward-incompatible ways and + // is not recommended for production use. It is not subject to any SLA or + // deprecation policy. + // + // Sets the access control policy on an instance resource. Replaces any + // existing policy. + SetIamPolicy(context.Context, *google_iam_v11.SetIamPolicyRequest) (*google_iam_v1.Policy, error) + // This is a private alpha release of Cloud Bigtable instance level + // permissions. This feature is not currently available to most Cloud Bigtable + // customers. This feature might be changed in backward-incompatible ways and + // is not recommended for production use. It is not subject to any SLA or + // deprecation policy. + // + // Returns permissions that the caller has on the specified instance resource. + TestIamPermissions(context.Context, *google_iam_v11.TestIamPermissionsRequest) (*google_iam_v11.TestIamPermissionsResponse, error) } func RegisterBigtableInstanceAdminServer(s *grpc.Server, srv BigtableInstanceAdminServer) { @@ -694,6 +1273,24 @@ func _BigtableInstanceAdmin_UpdateInstance_Handler(srv interface{}, ctx context. return interceptor(ctx, in, info, handler) } +func _BigtableInstanceAdmin_PartialUpdateInstance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PartialUpdateInstanceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableInstanceAdminServer).PartialUpdateInstance(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.v2.BigtableInstanceAdmin/PartialUpdateInstance", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableInstanceAdminServer).PartialUpdateInstance(ctx, req.(*PartialUpdateInstanceRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _BigtableInstanceAdmin_DeleteInstance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(DeleteInstanceRequest) if err := dec(in); err != nil { @@ -802,6 +1399,150 @@ func _BigtableInstanceAdmin_DeleteCluster_Handler(srv interface{}, ctx context.C return interceptor(ctx, in, info, handler) } +func _BigtableInstanceAdmin_CreateAppProfile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateAppProfileRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableInstanceAdminServer).CreateAppProfile(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.v2.BigtableInstanceAdmin/CreateAppProfile", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableInstanceAdminServer).CreateAppProfile(ctx, req.(*CreateAppProfileRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableInstanceAdmin_GetAppProfile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetAppProfileRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableInstanceAdminServer).GetAppProfile(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.v2.BigtableInstanceAdmin/GetAppProfile", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableInstanceAdminServer).GetAppProfile(ctx, req.(*GetAppProfileRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableInstanceAdmin_ListAppProfiles_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListAppProfilesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableInstanceAdminServer).ListAppProfiles(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.v2.BigtableInstanceAdmin/ListAppProfiles", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableInstanceAdminServer).ListAppProfiles(ctx, req.(*ListAppProfilesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableInstanceAdmin_UpdateAppProfile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateAppProfileRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableInstanceAdminServer).UpdateAppProfile(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.v2.BigtableInstanceAdmin/UpdateAppProfile", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableInstanceAdminServer).UpdateAppProfile(ctx, req.(*UpdateAppProfileRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableInstanceAdmin_DeleteAppProfile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteAppProfileRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableInstanceAdminServer).DeleteAppProfile(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.v2.BigtableInstanceAdmin/DeleteAppProfile", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableInstanceAdminServer).DeleteAppProfile(ctx, req.(*DeleteAppProfileRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableInstanceAdmin_GetIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(google_iam_v11.GetIamPolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableInstanceAdminServer).GetIamPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.v2.BigtableInstanceAdmin/GetIamPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableInstanceAdminServer).GetIamPolicy(ctx, req.(*google_iam_v11.GetIamPolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableInstanceAdmin_SetIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(google_iam_v11.SetIamPolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableInstanceAdminServer).SetIamPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.v2.BigtableInstanceAdmin/SetIamPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableInstanceAdminServer).SetIamPolicy(ctx, req.(*google_iam_v11.SetIamPolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableInstanceAdmin_TestIamPermissions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(google_iam_v11.TestIamPermissionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableInstanceAdminServer).TestIamPermissions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.v2.BigtableInstanceAdmin/TestIamPermissions", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableInstanceAdminServer).TestIamPermissions(ctx, req.(*google_iam_v11.TestIamPermissionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _BigtableInstanceAdmin_serviceDesc = grpc.ServiceDesc{ ServiceName: "google.bigtable.admin.v2.BigtableInstanceAdmin", HandlerType: (*BigtableInstanceAdminServer)(nil), @@ -822,6 +1563,10 @@ var _BigtableInstanceAdmin_serviceDesc = grpc.ServiceDesc{ MethodName: "UpdateInstance", Handler: _BigtableInstanceAdmin_UpdateInstance_Handler, }, + { + MethodName: "PartialUpdateInstance", + Handler: _BigtableInstanceAdmin_PartialUpdateInstance_Handler, + }, { MethodName: "DeleteInstance", Handler: _BigtableInstanceAdmin_DeleteInstance_Handler, @@ -846,6 +1591,38 @@ var _BigtableInstanceAdmin_serviceDesc = grpc.ServiceDesc{ MethodName: "DeleteCluster", Handler: _BigtableInstanceAdmin_DeleteCluster_Handler, }, + { + MethodName: "CreateAppProfile", + Handler: _BigtableInstanceAdmin_CreateAppProfile_Handler, + }, + { + MethodName: "GetAppProfile", + Handler: _BigtableInstanceAdmin_GetAppProfile_Handler, + }, + { + MethodName: "ListAppProfiles", + Handler: _BigtableInstanceAdmin_ListAppProfiles_Handler, + }, + { + MethodName: "UpdateAppProfile", + Handler: _BigtableInstanceAdmin_UpdateAppProfile_Handler, + }, + { + MethodName: "DeleteAppProfile", + Handler: _BigtableInstanceAdmin_DeleteAppProfile_Handler, + }, + { + MethodName: "GetIamPolicy", + Handler: _BigtableInstanceAdmin_GetIamPolicy_Handler, + }, + { + MethodName: "SetIamPolicy", + Handler: _BigtableInstanceAdmin_SetIamPolicy_Handler, + }, + { + MethodName: "TestIamPermissions", + Handler: _BigtableInstanceAdmin_TestIamPermissions_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "google/bigtable/admin/v2/bigtable_instance_admin.proto", @@ -856,67 +1633,103 @@ func init() { } var fileDescriptor0 = []byte{ - // 985 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x57, 0x41, 0x8f, 0xdb, 0x44, - 0x14, 0xd6, 0x24, 0xa5, 0x34, 0xcf, 0xcd, 0xee, 0x32, 0x6c, 0x56, 0x91, 0x69, 0xd5, 0xad, 0x2b, - 0xb5, 0x69, 0xba, 0xd8, 0x22, 0x20, 0x16, 0xed, 0x2a, 0x08, 0xb6, 0x54, 0xd5, 0x4a, 0x5b, 0xb1, - 0x8a, 0xca, 0x81, 0x1e, 0x88, 0x66, 0x93, 0x59, 0x63, 0xea, 0x8c, 0x8d, 0x3d, 0x59, 0xb1, 0xaa, - 0x7a, 0x41, 0x88, 0x43, 0x25, 0x38, 0xc0, 0x11, 0x71, 0xe2, 0xc2, 0x81, 0x7f, 0xc2, 0x91, 0x23, - 0x27, 0x24, 0x7e, 0x00, 0x3f, 0x01, 0x8d, 0x67, 0xc6, 0x89, 0xb3, 0x76, 0xec, 0x08, 0x21, 0xf5, - 0x66, 0xcf, 0xbc, 0xf7, 0xe6, 0x9b, 0xef, 0xfb, 0xfc, 0x5e, 0x02, 0xef, 0xba, 0x41, 0xe0, 0xfa, - 0xd4, 0x39, 0xf1, 0x5c, 0x4e, 0x4e, 0x7c, 0xea, 0x90, 0xf1, 0xc4, 0x63, 0xce, 0x59, 0x2f, 0x5d, - 0x19, 0x7a, 0x2c, 0xe6, 0x84, 0x8d, 0xe8, 0x30, 0xd9, 0xb2, 0xc3, 0x28, 0xe0, 0x01, 0x6e, 0xcb, - 0x3c, 0x5b, 0x47, 0xd9, 0x72, 0xf3, 0xac, 0x67, 0x5e, 0x53, 0x15, 0x49, 0xe8, 0x39, 0x84, 0xb1, - 0x80, 0x13, 0xee, 0x05, 0x2c, 0x96, 0x79, 0xe6, 0x9d, 0xc2, 0xf3, 0xf4, 0x31, 0x2a, 0xf0, 0x96, - 0x0a, 0xf4, 0x03, 0xe6, 0x46, 0x53, 0xc6, 0x3c, 0xe6, 0x3a, 0x41, 0x48, 0xa3, 0x4c, 0xb5, 0x37, - 0x54, 0x50, 0xf2, 0x76, 0x32, 0x3d, 0x75, 0xe8, 0x24, 0xe4, 0xe7, 0x6a, 0xf3, 0xc6, 0xe2, 0x26, - 0xf7, 0x26, 0x34, 0xe6, 0x64, 0x12, 0xca, 0x00, 0xeb, 0xf7, 0x1a, 0xb4, 0xee, 0x47, 0x94, 0x70, - 0x7a, 0xa8, 0xce, 0x1e, 0xd0, 0x2f, 0xa7, 0x34, 0xe6, 0x78, 0x0b, 0x2e, 0x87, 0x24, 0xa2, 0x8c, - 0xb7, 0xd1, 0x36, 0xea, 0x34, 0x06, 0xea, 0x0d, 0xdf, 0x00, 0x23, 0x65, 0xc3, 0x1b, 0xb7, 0x6b, - 0xc9, 0x26, 0xe8, 0xa5, 0xc3, 0x31, 0x7e, 0x1f, 0xae, 0xe8, 0xb7, 0x76, 0x7d, 0x1b, 0x75, 0x8c, - 0x9e, 0x65, 0x17, 0x31, 0x65, 0xa7, 0xa7, 0xa6, 0x39, 0xf8, 0x53, 0xb8, 0x32, 0xf2, 0xa7, 0x31, - 0xa7, 0x51, 0xdc, 0xbe, 0xb4, 0x5d, 0xef, 0x18, 0xbd, 0x7e, 0x71, 0x7e, 0x2e, 0x76, 0xfb, 0xbe, - 0xca, 0x7f, 0xc0, 0x78, 0x74, 0x3e, 0x48, 0xcb, 0x99, 0x9f, 0x41, 0x33, 0xb3, 0x85, 0x37, 0xa0, - 0xfe, 0x94, 0x9e, 0xab, 0x1b, 0x8a, 0x47, 0xbc, 0x0b, 0xaf, 0x9c, 0x11, 0x7f, 0x4a, 0x93, 0x8b, - 0x19, 0xbd, 0x9b, 0x4b, 0x8e, 0x96, 0x95, 0x06, 0x32, 0x7e, 0xaf, 0xf6, 0x1e, 0xb2, 0x3a, 0x80, - 0x1f, 0x52, 0xbe, 0xc8, 0x24, 0x86, 0x4b, 0x8c, 0x4c, 0xa8, 0x3a, 0x25, 0x79, 0xb6, 0x1e, 0xc1, - 0xe6, 0x91, 0x17, 0xa7, 0xa1, 0x71, 0x19, 0xeb, 0xd7, 0x01, 0x42, 0xe2, 0xd2, 0x21, 0x0f, 0x9e, - 0x52, 0xa6, 0x48, 0x6f, 0x88, 0x95, 0xc7, 0x62, 0xc1, 0xfa, 0x0d, 0x41, 0x6b, 0xa1, 0x5e, 0x1c, - 0x06, 0x2c, 0xa6, 0xf8, 0x03, 0x68, 0x68, 0x66, 0xe3, 0x36, 0x4a, 0xe8, 0xac, 0x22, 0xc7, 0x2c, - 0x09, 0xdf, 0x85, 0x8d, 0x53, 0xe2, 0xf9, 0x74, 0x3c, 0xf4, 0x83, 0x91, 0xb4, 0x5e, 0xbb, 0xb6, - 0x5d, 0xef, 0x34, 0x06, 0xeb, 0x72, 0xfd, 0x48, 0x2f, 0xe3, 0xdb, 0xb0, 0xce, 0xe8, 0x57, 0x7c, - 0x38, 0x07, 0xb5, 0x9e, 0x40, 0x6d, 0x8a, 0xe5, 0xe3, 0x14, 0xee, 0x3d, 0x68, 0x7d, 0x44, 0x7d, - 0x7a, 0xd1, 0x74, 0x79, 0x54, 0xbd, 0x40, 0xb0, 0x29, 0x65, 0xd6, 0x8c, 0x97, 0x73, 0xa5, 0x14, - 0x9f, 0x19, 0xb4, 0xa1, 0x56, 0x0e, 0xc7, 0x78, 0x1f, 0x5e, 0x55, 0x2f, 0xca, 0x9e, 0x15, 0x34, - 0xd6, 0x19, 0xd6, 0x1d, 0x78, 0xed, 0x21, 0xe5, 0x0b, 0x40, 0xf2, 0x50, 0x1f, 0xc1, 0xeb, 0x42, - 0x10, 0x6d, 0xb7, 0xff, 0xa8, 0xef, 0xaf, 0x48, 0xfa, 0x65, 0x56, 0x4e, 0xc9, 0xdb, 0x9f, 0xfb, - 0x58, 0xa4, 0xba, 0x15, 0x6e, 0x93, 0xa6, 0xfc, 0x1f, 0xda, 0x76, 0x61, 0x53, 0x6a, 0x5b, 0x81, - 0xa4, 0x7f, 0x10, 0x6c, 0x65, 0xbf, 0xe0, 0x47, 0x94, 0x93, 0x31, 0xe1, 0x04, 0x3f, 0x81, 0x8d, - 0x20, 0xf2, 0x5c, 0x8f, 0x11, 0x7f, 0x18, 0xc9, 0x12, 0x49, 0xaa, 0xd1, 0x73, 0x56, 0xec, 0x06, - 0x83, 0x75, 0x5d, 0x48, 0x43, 0xe9, 0xc3, 0x55, 0x55, 0x72, 0x28, 0xfa, 0xa1, 0xfa, 0xd4, 0x4d, - 0x5d, 0x57, 0x37, 0x4b, 0xfb, 0xb1, 0x6e, 0x96, 0x03, 0x43, 0xc5, 0x8b, 0x15, 0xbc, 0x0f, 0xc6, - 0xa9, 0xc7, 0xbc, 0xf8, 0x73, 0x99, 0x5d, 0x2f, 0xcd, 0x06, 0x19, 0x2e, 0x16, 0xac, 0xbf, 0x10, - 0xb4, 0x3e, 0x09, 0xc7, 0x33, 0x37, 0xa7, 0x37, 0x3e, 0x2a, 0xbc, 0x71, 0x05, 0x49, 0x5f, 0xa6, - 0x3b, 0xf6, 0xfe, 0x34, 0xa0, 0x75, 0xa0, 0xa0, 0x6a, 0x31, 0x3e, 0x14, 0x88, 0xf1, 0xf7, 0x08, - 0xd6, 0xb2, 0x22, 0xe1, 0x55, 0xe5, 0x34, 0xaf, 0xeb, 0x84, 0xb9, 0xb1, 0x68, 0x7f, 0xac, 0xc7, - 0xa2, 0xb5, 0xf3, 0xf5, 0x1f, 0x7f, 0xff, 0x58, 0xbb, 0x6d, 0xdd, 0x14, 0x03, 0xf5, 0x99, 0xfc, - 0xbc, 0xfa, 0x61, 0x14, 0x7c, 0x41, 0x47, 0x3c, 0x76, 0xba, 0xcf, 0xd3, 0x21, 0x1b, 0xef, 0xa1, - 0x2e, 0x7e, 0x81, 0xc0, 0x98, 0x6b, 0xd9, 0x78, 0xa7, 0x18, 0xcd, 0xc5, 0xce, 0x6e, 0x56, 0xe8, - 0xa4, 0xd6, 0xdd, 0x04, 0xcf, 0x2d, 0x2c, 0xf1, 0x08, 0xdb, 0xcf, 0xa1, 0x99, 0x81, 0x71, 0xba, - 0xcf, 0xf1, 0x4f, 0x08, 0x9a, 0x99, 0x2e, 0x8e, 0xed, 0xe2, 0x03, 0xf2, 0xc6, 0x87, 0xe9, 0x54, - 0x8e, 0x97, 0xfd, 0x63, 0x01, 0xdd, 0x32, 0xb6, 0xf0, 0xb7, 0x08, 0xd6, 0xa4, 0x73, 0x53, 0xb6, - 0x2a, 0xdc, 0xbf, 0x12, 0x47, 0x4a, 0x33, 0xb3, 0x9c, 0x23, 0xa1, 0xd9, 0x37, 0x08, 0xd6, 0xb2, - 0xe3, 0x63, 0x99, 0x89, 0x72, 0x07, 0x8d, 0xb9, 0x75, 0xc1, 0xca, 0x0f, 0xc4, 0xcf, 0x26, 0xcd, - 0x47, 0xb7, 0x82, 0x5a, 0x3f, 0x23, 0x68, 0x66, 0xe6, 0xd2, 0x32, 0xb5, 0xf2, 0x06, 0x58, 0x99, - 0x93, 0xfb, 0x09, 0x96, 0x5d, 0x6b, 0x27, 0x5f, 0x9b, 0x0c, 0x1a, 0x47, 0xb7, 0xf4, 0x3d, 0x3d, - 0xaa, 0xf0, 0x0f, 0x08, 0x60, 0x36, 0xab, 0xf0, 0xbd, 0xa5, 0xce, 0x5e, 0x40, 0x56, 0xde, 0x71, - 0xac, 0x77, 0x12, 0x74, 0x36, 0xde, 0x29, 0x63, 0x2a, 0x85, 0x26, 0x48, 0xfb, 0x05, 0xc1, 0xd5, - 0xf9, 0x41, 0x86, 0xdf, 0x5c, 0xee, 0xd8, 0x85, 0xf9, 0x69, 0xda, 0x55, 0xc3, 0x95, 0xbf, 0xb3, - 0x28, 0x2b, 0x72, 0x28, 0xba, 0x42, 0x33, 0xd3, 0xa4, 0x71, 0x39, 0x21, 0x65, 0x6a, 0xee, 0x26, - 0x48, 0xde, 0x32, 0x57, 0xe2, 0x4b, 0xd8, 0xfd, 0x3b, 0x04, 0xcd, 0xcc, 0x44, 0x5d, 0xe6, 0xb3, - 0xbc, 0xd1, 0x5b, 0x68, 0x76, 0x45, 0x4e, 0x77, 0x25, 0x48, 0x07, 0xcf, 0xe0, 0xda, 0x28, 0x98, - 0x14, 0x42, 0x38, 0x30, 0x73, 0x5b, 0xff, 0xb1, 0x38, 0xfa, 0x18, 0x3d, 0xe9, 0xab, 0x3c, 0x37, - 0xf0, 0x09, 0x73, 0xed, 0x20, 0x72, 0x1d, 0x97, 0xb2, 0x04, 0x98, 0x23, 0xb7, 0x48, 0xe8, 0xc5, - 0x17, 0xff, 0x1b, 0xed, 0x27, 0x0f, 0x27, 0x97, 0x93, 0xc8, 0xb7, 0xff, 0x0d, 0x00, 0x00, 0xff, - 0xff, 0xb8, 0x4b, 0x18, 0x4a, 0xb4, 0x0d, 0x00, 0x00, + // 1566 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x59, 0xcf, 0x6f, 0xdc, 0xc4, + 0x17, 0xd7, 0x6c, 0xfa, 0xed, 0xb7, 0x79, 0x9b, 0x5f, 0xdf, 0xf9, 0x36, 0xc9, 0xca, 0xf4, 0x47, + 0xea, 0x56, 0x6d, 0xba, 0x0d, 0x36, 0x59, 0x50, 0x5b, 0x25, 0xa4, 0xa2, 0x4d, 0x4b, 0x14, 0x94, + 0xaa, 0xd1, 0xb6, 0x14, 0xb5, 0x8a, 0x58, 0x4d, 0xb2, 0x93, 0xc5, 0xc4, 0x6b, 0x1b, 0xdb, 0x1b, + 0xa8, 0x50, 0x2f, 0x08, 0x21, 0x54, 0x09, 0x0e, 0x20, 0x71, 0xa9, 0xe0, 0xc2, 0x05, 0x55, 0x08, + 0xc4, 0x85, 0x1b, 0x57, 0x90, 0xe0, 0xc8, 0x5f, 0x80, 0xc4, 0x19, 0x71, 0xe3, 0x8a, 0x66, 0x3c, + 0xe3, 0xb5, 0xbd, 0xfe, 0xb5, 0xad, 0x2a, 0xf5, 0xd4, 0xf5, 0xcc, 0x9b, 0x37, 0x9f, 0xf9, 0xbc, + 0xcf, 0x7b, 0xf3, 0x26, 0x85, 0xf3, 0x1d, 0xdb, 0xee, 0x98, 0x54, 0xdf, 0x36, 0x3a, 0x3e, 0xd9, + 0x36, 0xa9, 0x4e, 0xda, 0x5d, 0xc3, 0xd2, 0xf7, 0x1b, 0xe1, 0x48, 0xcb, 0xb0, 0x3c, 0x9f, 0x58, + 0x3b, 0xb4, 0xc5, 0xa7, 0x34, 0xc7, 0xb5, 0x7d, 0x1b, 0xd7, 0x82, 0x75, 0x9a, 0xb4, 0xd2, 0x82, + 0xc9, 0xfd, 0x86, 0x72, 0x44, 0x78, 0x24, 0x8e, 0xa1, 0x13, 0xcb, 0xb2, 0x7d, 0xe2, 0x1b, 0xb6, + 0xe5, 0x05, 0xeb, 0x94, 0x33, 0x99, 0xfb, 0xc9, 0x6d, 0x84, 0xe1, 0x31, 0x61, 0x68, 0x90, 0xae, + 0xbe, 0xbf, 0xc8, 0xfe, 0x69, 0x39, 0xb6, 0x69, 0xec, 0xdc, 0x13, 0xf3, 0x4a, 0x7c, 0x3e, 0x36, + 0x77, 0x52, 0xcc, 0x99, 0xb6, 0xd5, 0x71, 0x7b, 0x96, 0x65, 0x58, 0x1d, 0xdd, 0x76, 0xa8, 0x1b, + 0x43, 0xf2, 0x9c, 0x30, 0xe2, 0x5f, 0xdb, 0xbd, 0x5d, 0x9d, 0x76, 0x1d, 0x5f, 0x7a, 0x98, 0x4b, + 0x4e, 0xee, 0x1a, 0xd4, 0x6c, 0xb7, 0xba, 0xc4, 0xdb, 0x13, 0x16, 0xc7, 0x93, 0x16, 0xbe, 0xd1, + 0xa5, 0x9e, 0x4f, 0xba, 0x4e, 0x60, 0xa0, 0xfe, 0x56, 0x81, 0xe9, 0x55, 0x97, 0x12, 0x9f, 0xae, + 0x8b, 0x93, 0x35, 0xe9, 0x3b, 0x3d, 0xea, 0xf9, 0x78, 0x06, 0x0e, 0x3a, 0xc4, 0xa5, 0x96, 0x5f, + 0x43, 0x73, 0x68, 0x7e, 0xb4, 0x29, 0xbe, 0xf0, 0x71, 0xa8, 0x86, 0x5c, 0x1b, 0xed, 0x5a, 0x85, + 0x4f, 0x82, 0x1c, 0x5a, 0x6f, 0xe3, 0x4b, 0x70, 0x48, 0x7e, 0xd5, 0x46, 0xe6, 0xd0, 0x7c, 0xb5, + 0xa1, 0x6a, 0x59, 0x71, 0xd0, 0xc2, 0x5d, 0xc3, 0x35, 0xf8, 0x0e, 0x1c, 0xda, 0x31, 0x7b, 0x9e, + 0x4f, 0x5d, 0xaf, 0x76, 0x60, 0x6e, 0x64, 0xbe, 0xda, 0x58, 0xc9, 0x5e, 0x9f, 0x8a, 0x5d, 0x5b, + 0x15, 0xeb, 0xaf, 0x59, 0xbe, 0x7b, 0xaf, 0x19, 0xba, 0x53, 0xde, 0x84, 0xf1, 0xd8, 0x14, 0x9e, + 0x82, 0x91, 0x3d, 0x7a, 0x4f, 0x9c, 0x90, 0xfd, 0xc4, 0x17, 0xe0, 0x3f, 0xfb, 0xc4, 0xec, 0x51, + 0x7e, 0xb0, 0x6a, 0xe3, 0x44, 0xce, 0xd6, 0x81, 0xa7, 0x66, 0x60, 0xbf, 0x54, 0xb9, 0x88, 0xd4, + 0x79, 0xc0, 0x6b, 0xd4, 0x4f, 0x32, 0x89, 0xe1, 0x80, 0x45, 0xba, 0x54, 0xec, 0xc2, 0x7f, 0xab, + 0xd7, 0xe1, 0xf0, 0x86, 0xe1, 0x85, 0xa6, 0x5e, 0x11, 0xeb, 0x47, 0x01, 0x1c, 0xd2, 0xa1, 0x2d, + 0xdf, 0xde, 0xa3, 0x96, 0x20, 0x7d, 0x94, 0x8d, 0xdc, 0x62, 0x03, 0xea, 0xb7, 0x08, 0xa6, 0x13, + 0xfe, 0x3c, 0xc7, 0xb6, 0x3c, 0x8a, 0x5f, 0x81, 0x51, 0xc9, 0xac, 0x57, 0x43, 0x9c, 0xce, 0x32, + 0xe1, 0xe8, 0x2f, 0xc2, 0x67, 0x61, 0x6a, 0x97, 0x18, 0x26, 0x6d, 0xb7, 0x4c, 0x7b, 0x27, 0x10, + 0x67, 0xad, 0x32, 0x37, 0x32, 0x3f, 0xda, 0x9c, 0x0c, 0xc6, 0x37, 0xe4, 0x30, 0x3e, 0x0d, 0x93, + 0x16, 0x7d, 0xcf, 0x6f, 0x45, 0xa0, 0x8e, 0x70, 0xa8, 0xe3, 0x6c, 0x78, 0x33, 0x84, 0xfb, 0x10, + 0xc1, 0x91, 0x4d, 0xe2, 0xfa, 0x06, 0x31, 0x5f, 0x77, 0xda, 0x29, 0xe2, 0x8b, 0x6a, 0x08, 0x3d, + 0x86, 0x86, 0x96, 0xa1, 0xda, 0xe3, 0x8e, 0x79, 0x32, 0x88, 0x58, 0x2a, 0xd2, 0x85, 0xcc, 0x06, + 0xed, 0x55, 0x96, 0x2f, 0xd7, 0x89, 0xb7, 0xd7, 0x84, 0xc0, 0x9c, 0xfd, 0x56, 0xcf, 0xc1, 0xf4, + 0x55, 0x6a, 0xd2, 0x41, 0x54, 0x69, 0x81, 0x7c, 0x80, 0xe0, 0x70, 0x20, 0x42, 0xa9, 0x87, 0xe2, + 0x48, 0x0a, 0x3d, 0xf6, 0xd3, 0x67, 0x54, 0x8c, 0xac, 0xb7, 0xf1, 0x32, 0xfc, 0x57, 0x7c, 0x88, + 0xe4, 0x29, 0xa1, 0x40, 0xb9, 0x42, 0x3d, 0x03, 0xff, 0x5b, 0xa3, 0x7e, 0x02, 0x48, 0x1a, 0xea, + 0x0d, 0xf8, 0x3f, 0x93, 0x8b, 0x4c, 0x86, 0x27, 0x54, 0xdf, 0x37, 0x28, 0x50, 0x73, 0xdf, 0x9d, + 0x10, 0xdf, 0x4a, 0x24, 0x95, 0x03, 0xed, 0x95, 0x38, 0x4d, 0xb8, 0xe4, 0x69, 0x28, 0xaf, 0x0e, + 0x87, 0x83, 0xd8, 0x96, 0x20, 0xe9, 0x6f, 0x04, 0x33, 0xf1, 0xfa, 0x72, 0x9d, 0xfa, 0xa4, 0x4d, + 0x7c, 0x82, 0xef, 0xc2, 0x94, 0xed, 0x1a, 0x1d, 0xc3, 0x22, 0x66, 0xcb, 0x0d, 0x5c, 0x08, 0x9d, + 0xea, 0x43, 0xd6, 0xaa, 0xe6, 0xa4, 0x74, 0x24, 0xa1, 0xac, 0xc0, 0x98, 0x70, 0xd9, 0x62, 0xd5, + 0x3a, 0x53, 0xbc, 0xb7, 0x64, 0x29, 0x6f, 0x56, 0x85, 0x3d, 0x1b, 0x61, 0xd2, 0xdf, 0x35, 0x2c, + 0xc3, 0x7b, 0x2b, 0x58, 0x3d, 0x52, 0xb8, 0x1a, 0x02, 0x73, 0x36, 0xa0, 0xfe, 0x83, 0x60, 0x26, + 0x9e, 0x91, 0xe1, 0x91, 0x49, 0xe6, 0x91, 0xcf, 0x67, 0x1f, 0x39, 0x2f, 0xc9, 0x9f, 0xad, 0x93, + 0xff, 0x85, 0xe4, 0x45, 0x28, 0x94, 0x11, 0x1e, 0xfc, 0x4e, 0xe6, 0xc1, 0xb5, 0xa2, 0x58, 0xc7, + 0x45, 0xf6, 0x6c, 0x1d, 0xf8, 0x0f, 0x04, 0xd3, 0x41, 0x5c, 0x92, 0x07, 0xde, 0xc8, 0x3c, 0x70, + 0x89, 0xec, 0x7d, 0xa6, 0xce, 0xf8, 0x0b, 0x82, 0xd9, 0x20, 0x12, 0x97, 0x1d, 0x67, 0xd3, 0xb5, + 0x77, 0x0d, 0xb3, 0xb0, 0xbf, 0x39, 0x05, 0x13, 0xc4, 0x71, 0x5a, 0x4e, 0x60, 0xdd, 0xaf, 0xd1, + 0x63, 0x24, 0x74, 0xb1, 0xde, 0xc6, 0xd7, 0xa0, 0x1a, 0xb1, 0x12, 0xb0, 0x4e, 0x65, 0xd3, 0x13, + 0xd9, 0x1f, 0xfa, 0x8e, 0xf0, 0x19, 0x98, 0x34, 0x3a, 0x96, 0xed, 0xd2, 0xd6, 0xbb, 0xc4, 0x65, + 0x1d, 0x20, 0x6b, 0x79, 0xd0, 0xfc, 0xa1, 0xe6, 0x44, 0x30, 0xfc, 0x86, 0x18, 0x65, 0x75, 0x6b, + 0x8d, 0xfa, 0x83, 0xa7, 0x48, 0xab, 0x5b, 0x37, 0x60, 0x86, 0x55, 0xe3, 0xbe, 0xf1, 0x93, 0xd6, + 0xf7, 0x07, 0x08, 0x66, 0x07, 0x3c, 0x8a, 0x12, 0xbf, 0x06, 0x63, 0x11, 0x22, 0x64, 0x99, 0x2f, + 0xc7, 0x44, 0xb5, 0xcf, 0x44, 0x6a, 0x05, 0xaf, 0xa4, 0x55, 0xf0, 0x9f, 0x11, 0xcc, 0x06, 0xba, + 0x1d, 0x64, 0x23, 0x11, 0x15, 0xf4, 0x98, 0x51, 0x79, 0x92, 0xee, 0x21, 0x2d, 0xa4, 0x23, 0xa9, + 0x21, 0xbd, 0x0d, 0xb3, 0xc1, 0x55, 0x54, 0x2a, 0xaa, 0x69, 0x7e, 0x2b, 0xa9, 0x7e, 0x15, 0xa8, + 0x25, 0xf9, 0x91, 0xa9, 0xdd, 0x78, 0x34, 0x0b, 0xd3, 0x57, 0x04, 0x0d, 0xb2, 0x1c, 0x5f, 0x66, + 0x6c, 0xe0, 0x4f, 0x11, 0x4c, 0xc4, 0x2f, 0x28, 0x3c, 0xec, 0x55, 0xa6, 0x1c, 0x95, 0x0b, 0x22, + 0x4f, 0x1a, 0xed, 0x86, 0x7c, 0xd2, 0xa8, 0x0b, 0x1f, 0xfc, 0xfe, 0xe7, 0xe7, 0x95, 0xd3, 0xea, + 0x09, 0xf6, 0x90, 0x7a, 0x3f, 0x90, 0xde, 0x8a, 0xe3, 0xda, 0x6f, 0xd3, 0x1d, 0xdf, 0xd3, 0xeb, + 0xf7, 0xc3, 0xc7, 0x95, 0xb7, 0x84, 0xea, 0xf8, 0x01, 0x82, 0x6a, 0xa4, 0x99, 0xc6, 0x0b, 0xd9, + 0x68, 0x06, 0x7b, 0x6e, 0xa5, 0x44, 0xbb, 0xa8, 0x9e, 0xe5, 0x78, 0x4e, 0xe2, 0x00, 0x0f, 0x23, + 0x39, 0x82, 0xa6, 0x0f, 0x46, 0xaf, 0xdf, 0xc7, 0x0f, 0x11, 0x8c, 0xc7, 0xfa, 0x6b, 0x9c, 0x53, + 0xfb, 0xd3, 0x1a, 0x7b, 0x45, 0x2f, 0x6d, 0x1f, 0x24, 0x56, 0x02, 0x5d, 0x1e, 0x5b, 0xf8, 0x23, + 0x04, 0x13, 0xf1, 0x2b, 0x16, 0x97, 0x38, 0x7f, 0x29, 0x8e, 0x44, 0xcc, 0x94, 0x62, 0x8e, 0x58, + 0xcc, 0xd8, 0x33, 0x24, 0xf5, 0xca, 0xc7, 0x8f, 0xd9, 0x23, 0x14, 0x49, 0xea, 0x65, 0x0e, 0xef, + 0x7c, 0xa3, 0xce, 0xe1, 0x85, 0x8f, 0xf3, 0x5c, 0x9c, 0xfd, 0x57, 0xc2, 0x87, 0x08, 0x26, 0xe2, + 0x9d, 0x7e, 0x9e, 0xe6, 0x53, 0xdf, 0x04, 0xca, 0xcc, 0x40, 0x59, 0xb8, 0xc6, 0x5e, 0xe8, 0x32, + 0x7c, 0xf5, 0x12, 0xe2, 0xfa, 0x12, 0xc1, 0x78, 0xac, 0x5f, 0xc0, 0x43, 0x36, 0x16, 0x45, 0x2c, + 0xad, 0x70, 0x2c, 0x17, 0xd4, 0x85, 0x74, 0x29, 0xc5, 0xd0, 0xe8, 0xb2, 0xfb, 0x5e, 0x92, 0xaf, + 0x0a, 0xfc, 0x19, 0x02, 0xe8, 0x3f, 0x2b, 0xf0, 0xb9, 0xdc, 0x44, 0x4c, 0x20, 0x2b, 0xee, 0x18, + 0xd4, 0x97, 0x38, 0x3a, 0x0d, 0x2f, 0x14, 0x31, 0x15, 0x42, 0x63, 0xa4, 0x7d, 0x8d, 0x60, 0x2c, + 0xfa, 0xe6, 0xc0, 0xcf, 0xe7, 0x27, 0x58, 0xe2, 0xa9, 0xa3, 0x68, 0x65, 0xcd, 0x45, 0x3a, 0xc6, + 0x51, 0x96, 0xe4, 0x90, 0x15, 0xb1, 0xf1, 0x58, 0x93, 0x85, 0x8b, 0x09, 0x29, 0x8a, 0xe6, 0x05, + 0x8e, 0x64, 0x51, 0x19, 0x8a, 0x2f, 0x96, 0x9d, 0x9f, 0x20, 0x18, 0x8f, 0x3d, 0x7e, 0xf2, 0x74, + 0x96, 0xf6, 0x4a, 0xca, 0x14, 0xbb, 0x20, 0xa7, 0x3e, 0x5c, 0x08, 0x7f, 0x40, 0x30, 0x95, 0xec, + 0xce, 0xf0, 0x62, 0x91, 0xf4, 0x07, 0x6e, 0x4b, 0xa5, 0xd4, 0x05, 0xaf, 0x5e, 0xe5, 0x18, 0x2f, + 0xa9, 0x7a, 0x99, 0x00, 0x46, 0x1a, 0x93, 0xa5, 0x68, 0x4b, 0x81, 0xbf, 0x42, 0x30, 0x1e, 0x6b, + 0xc4, 0xf2, 0x38, 0x4c, 0xeb, 0xd8, 0x4a, 0xa2, 0x15, 0x41, 0xc6, 0x7a, 0x21, 0xa3, 0x11, 0xa8, + 0x8c, 0xd4, 0xef, 0x11, 0x4c, 0x26, 0x7a, 0x35, 0xfc, 0x42, 0xbe, 0xd6, 0x07, 0x1b, 0x45, 0x65, + 0x71, 0x88, 0x15, 0x22, 0x41, 0xe2, 0x88, 0xcb, 0xf3, 0x8b, 0x7f, 0x44, 0x30, 0x95, 0x6c, 0x58, + 0xf2, 0x64, 0x90, 0xd1, 0xfc, 0x15, 0xa5, 0xcd, 0x26, 0xc7, 0xf7, 0x5a, 0x63, 0x99, 0xe3, 0x8b, + 0xc4, 0x54, 0x2b, 0xcf, 0x6e, 0x5c, 0x0b, 0x5f, 0x20, 0x98, 0x4a, 0x76, 0x70, 0x79, 0xc0, 0x33, + 0xba, 0xbd, 0xcc, 0xac, 0x12, 0x8c, 0xd6, 0x87, 0xd6, 0xc0, 0xc7, 0x08, 0xc6, 0x58, 0x4f, 0x44, + 0xba, 0x9b, 0xfc, 0x0f, 0xce, 0xfd, 0x6e, 0xc0, 0x20, 0x5d, 0x6d, 0x7f, 0x51, 0x8b, 0x4e, 0x4a, + 0x14, 0xd3, 0x09, 0x9b, 0x60, 0x36, 0xbc, 0x3b, 0x1a, 0x1c, 0x84, 0x4b, 0x3d, 0xbb, 0xe7, 0xee, + 0x64, 0x5f, 0xae, 0x9d, 0x88, 0x67, 0x56, 0x73, 0x18, 0x94, 0x9b, 0x79, 0x50, 0x6e, 0x3e, 0x35, + 0x28, 0x5e, 0x02, 0xca, 0x77, 0x08, 0xf0, 0x2d, 0xea, 0xf1, 0x41, 0xea, 0x76, 0x0d, 0xcf, 0xe3, + 0x7f, 0x39, 0x9a, 0x4f, 0x6c, 0x36, 0x68, 0x22, 0x61, 0x9d, 0x2d, 0x61, 0x29, 0x92, 0x61, 0x95, + 0x43, 0x5d, 0x51, 0x2f, 0x96, 0x83, 0xea, 0x0f, 0x78, 0x5a, 0x42, 0xf5, 0x2b, 0x3f, 0x21, 0x38, + 0xb2, 0x63, 0x77, 0x33, 0x05, 0x75, 0x45, 0x49, 0x6d, 0xe5, 0x37, 0x99, 0x8a, 0x36, 0xd1, 0xdd, + 0x15, 0xb1, 0xae, 0x63, 0x9b, 0xc4, 0xea, 0x68, 0xb6, 0xdb, 0xd1, 0x3b, 0xd4, 0xe2, 0x1a, 0xd3, + 0x83, 0x29, 0xe2, 0x18, 0xde, 0xe0, 0xff, 0x71, 0x2c, 0xf3, 0x1f, 0x8f, 0x2a, 0xc7, 0xd6, 0x82, + 0xf5, 0xab, 0xa6, 0xdd, 0x6b, 0x6b, 0x72, 0x2b, 0x8d, 0xef, 0xa1, 0xdd, 0x6e, 0xfc, 0x2a, 0x0d, + 0xb6, 0xb8, 0xc1, 0x96, 0x34, 0xd8, 0xe2, 0x06, 0x5b, 0xb7, 0x1b, 0xdb, 0x07, 0xf9, 0x5e, 0x2f, + 0xfe, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x1c, 0xa0, 0x3f, 0x27, 0xbe, 0x19, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/bigtable_table_admin.pb.go b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/bigtable_table_admin.pb.go index 36146a6..01ebaba 100644 --- a/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/bigtable_table_admin.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/bigtable_table_admin.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/bigtable/admin/v2/bigtable_table_admin.proto -// DO NOT EDIT! package admin @@ -8,11 +7,10 @@ import proto "github.com/golang/protobuf/proto" import fmt "fmt" import math "math" import _ "google.golang.org/genproto/googleapis/api/annotations" -import _ "google.golang.org/genproto/googleapis/api/serviceconfig" -import _ "google.golang.org/genproto/googleapis/longrunning" -import _ "github.com/golang/protobuf/ptypes/duration" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import google_protobuf5 "github.com/golang/protobuf/ptypes/duration" import google_protobuf3 "github.com/golang/protobuf/ptypes/empty" -import _ "github.com/golang/protobuf/ptypes/timestamp" +import google_protobuf1 "github.com/golang/protobuf/ptypes/timestamp" import ( context "golang.org/x/net/context" @@ -105,6 +103,53 @@ func (m *CreateTableRequest_Split) GetKey() []byte { return nil } +// This is a private alpha release of Cloud Bigtable snapshots. This feature +// is not currently available to most Cloud Bigtable customers. This feature +// might be changed in backward-incompatible ways and is not recommended for +// production use. It is not subject to any SLA or deprecation policy. +// +// Request message for +// [google.bigtable.admin.v2.BigtableTableAdmin.CreateTableFromSnapshot][google.bigtable.admin.v2.BigtableTableAdmin.CreateTableFromSnapshot] +type CreateTableFromSnapshotRequest struct { + // The unique name of the instance in which to create the table. + // Values are of the form `projects//instances/`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The name by which the new table should be referred to within the parent + // instance, e.g., `foobar` rather than `/tables/foobar`. + TableId string `protobuf:"bytes,2,opt,name=table_id,json=tableId" json:"table_id,omitempty"` + // The unique name of the snapshot from which to restore the table. The + // snapshot and the table must be in the same instance. + // Values are of the form + // `projects//instances//clusters//snapshots/`. + SourceSnapshot string `protobuf:"bytes,3,opt,name=source_snapshot,json=sourceSnapshot" json:"source_snapshot,omitempty"` +} + +func (m *CreateTableFromSnapshotRequest) Reset() { *m = CreateTableFromSnapshotRequest{} } +func (m *CreateTableFromSnapshotRequest) String() string { return proto.CompactTextString(m) } +func (*CreateTableFromSnapshotRequest) ProtoMessage() {} +func (*CreateTableFromSnapshotRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +func (m *CreateTableFromSnapshotRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateTableFromSnapshotRequest) GetTableId() string { + if m != nil { + return m.TableId + } + return "" +} + +func (m *CreateTableFromSnapshotRequest) GetSourceSnapshot() string { + if m != nil { + return m.SourceSnapshot + } + return "" +} + // Request message for // [google.bigtable.admin.v2.BigtableTableAdmin.DropRowRange][google.bigtable.admin.v2.BigtableTableAdmin.DropRowRange] type DropRowRangeRequest struct { @@ -123,7 +168,7 @@ type DropRowRangeRequest struct { func (m *DropRowRangeRequest) Reset() { *m = DropRowRangeRequest{} } func (m *DropRowRangeRequest) String() string { return proto.CompactTextString(m) } func (*DropRowRangeRequest) ProtoMessage() {} -func (*DropRowRangeRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } +func (*DropRowRangeRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } type isDropRowRangeRequest_Target interface { isDropRowRangeRequest_Target() @@ -252,7 +297,7 @@ type ListTablesRequest struct { func (m *ListTablesRequest) Reset() { *m = ListTablesRequest{} } func (m *ListTablesRequest) String() string { return proto.CompactTextString(m) } func (*ListTablesRequest) ProtoMessage() {} -func (*ListTablesRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } +func (*ListTablesRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } func (m *ListTablesRequest) GetParent() string { if m != nil { @@ -289,7 +334,7 @@ type ListTablesResponse struct { func (m *ListTablesResponse) Reset() { *m = ListTablesResponse{} } func (m *ListTablesResponse) String() string { return proto.CompactTextString(m) } func (*ListTablesResponse) ProtoMessage() {} -func (*ListTablesResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } +func (*ListTablesResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } func (m *ListTablesResponse) GetTables() []*Table { if m != nil { @@ -313,14 +358,14 @@ type GetTableRequest struct { // `projects//instances//tables/`. Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` // The view to be applied to the returned table's fields. - // Defaults to `SCHEMA_ONLY` if unspecified. + // Defaults to `SCHEMA_VIEW` if unspecified. View Table_View `protobuf:"varint,2,opt,name=view,enum=google.bigtable.admin.v2.Table_View" json:"view,omitempty"` } func (m *GetTableRequest) Reset() { *m = GetTableRequest{} } func (m *GetTableRequest) String() string { return proto.CompactTextString(m) } func (*GetTableRequest) ProtoMessage() {} -func (*GetTableRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } +func (*GetTableRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } func (m *GetTableRequest) GetName() string { if m != nil { @@ -348,7 +393,7 @@ type DeleteTableRequest struct { func (m *DeleteTableRequest) Reset() { *m = DeleteTableRequest{} } func (m *DeleteTableRequest) String() string { return proto.CompactTextString(m) } func (*DeleteTableRequest) ProtoMessage() {} -func (*DeleteTableRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } +func (*DeleteTableRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } func (m *DeleteTableRequest) GetName() string { if m != nil { @@ -374,7 +419,7 @@ type ModifyColumnFamiliesRequest struct { func (m *ModifyColumnFamiliesRequest) Reset() { *m = ModifyColumnFamiliesRequest{} } func (m *ModifyColumnFamiliesRequest) String() string { return proto.CompactTextString(m) } func (*ModifyColumnFamiliesRequest) ProtoMessage() {} -func (*ModifyColumnFamiliesRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } +func (*ModifyColumnFamiliesRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} } func (m *ModifyColumnFamiliesRequest) GetName() string { if m != nil { @@ -409,7 +454,7 @@ func (m *ModifyColumnFamiliesRequest_Modification) Reset() { func (m *ModifyColumnFamiliesRequest_Modification) String() string { return proto.CompactTextString(m) } func (*ModifyColumnFamiliesRequest_Modification) ProtoMessage() {} func (*ModifyColumnFamiliesRequest_Modification) Descriptor() ([]byte, []int) { - return fileDescriptor1, []int{6, 0} + return fileDescriptor1, []int{7, 0} } type isModifyColumnFamiliesRequest_Modification_Mod interface { @@ -560,9 +605,410 @@ func _ModifyColumnFamiliesRequest_Modification_OneofSizer(msg proto.Message) (n return n } +// This is a private alpha release of Cloud Bigtable replication. This feature +// is not currently available to most Cloud Bigtable customers. This feature +// might be changed in backward-incompatible ways and is not recommended for +// production use. It is not subject to any SLA or deprecation policy. +// +// Request message for +// [google.bigtable.admin.v2.BigtableTableAdmin.GenerateConsistencyToken][google.bigtable.admin.v2.BigtableTableAdmin.GenerateConsistencyToken] +type GenerateConsistencyTokenRequest struct { + // The unique name of the Table for which to create a consistency token. + // Values are of the form + // `projects//instances//tables/
`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GenerateConsistencyTokenRequest) Reset() { *m = GenerateConsistencyTokenRequest{} } +func (m *GenerateConsistencyTokenRequest) String() string { return proto.CompactTextString(m) } +func (*GenerateConsistencyTokenRequest) ProtoMessage() {} +func (*GenerateConsistencyTokenRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} } + +func (m *GenerateConsistencyTokenRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// This is a private alpha release of Cloud Bigtable replication. This feature +// is not currently available to most Cloud Bigtable customers. This feature +// might be changed in backward-incompatible ways and is not recommended for +// production use. It is not subject to any SLA or deprecation policy. +// +// Response message for +// [google.bigtable.admin.v2.BigtableTableAdmin.GenerateConsistencyToken][google.bigtable.admin.v2.BigtableTableAdmin.GenerateConsistencyToken] +type GenerateConsistencyTokenResponse struct { + // The generated consistency token. + ConsistencyToken string `protobuf:"bytes,1,opt,name=consistency_token,json=consistencyToken" json:"consistency_token,omitempty"` +} + +func (m *GenerateConsistencyTokenResponse) Reset() { *m = GenerateConsistencyTokenResponse{} } +func (m *GenerateConsistencyTokenResponse) String() string { return proto.CompactTextString(m) } +func (*GenerateConsistencyTokenResponse) ProtoMessage() {} +func (*GenerateConsistencyTokenResponse) Descriptor() ([]byte, []int) { + return fileDescriptor1, []int{9} +} + +func (m *GenerateConsistencyTokenResponse) GetConsistencyToken() string { + if m != nil { + return m.ConsistencyToken + } + return "" +} + +// This is a private alpha release of Cloud Bigtable replication. This feature +// is not currently available to most Cloud Bigtable customers. This feature +// might be changed in backward-incompatible ways and is not recommended for +// production use. It is not subject to any SLA or deprecation policy. +// +// Request message for +// [google.bigtable.admin.v2.BigtableTableAdmin.CheckConsistency][google.bigtable.admin.v2.BigtableTableAdmin.CheckConsistency] +type CheckConsistencyRequest struct { + // The unique name of the Table for which to check replication consistency. + // Values are of the form + // `projects//instances//tables/
`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The token created using GenerateConsistencyToken for the Table. + ConsistencyToken string `protobuf:"bytes,2,opt,name=consistency_token,json=consistencyToken" json:"consistency_token,omitempty"` +} + +func (m *CheckConsistencyRequest) Reset() { *m = CheckConsistencyRequest{} } +func (m *CheckConsistencyRequest) String() string { return proto.CompactTextString(m) } +func (*CheckConsistencyRequest) ProtoMessage() {} +func (*CheckConsistencyRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{10} } + +func (m *CheckConsistencyRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *CheckConsistencyRequest) GetConsistencyToken() string { + if m != nil { + return m.ConsistencyToken + } + return "" +} + +// This is a private alpha release of Cloud Bigtable replication. This feature +// is not currently available to most Cloud Bigtable customers. This feature +// might be changed in backward-incompatible ways and is not recommended for +// production use. It is not subject to any SLA or deprecation policy. +// +// Response message for +// [google.bigtable.admin.v2.BigtableTableAdmin.CheckConsistency][google.bigtable.admin.v2.BigtableTableAdmin.CheckConsistency] +type CheckConsistencyResponse struct { + // True only if the token is consistent. A token is consistent if replication + // has caught up with the restrictions specified in the request. + Consistent bool `protobuf:"varint,1,opt,name=consistent" json:"consistent,omitempty"` +} + +func (m *CheckConsistencyResponse) Reset() { *m = CheckConsistencyResponse{} } +func (m *CheckConsistencyResponse) String() string { return proto.CompactTextString(m) } +func (*CheckConsistencyResponse) ProtoMessage() {} +func (*CheckConsistencyResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{11} } + +func (m *CheckConsistencyResponse) GetConsistent() bool { + if m != nil { + return m.Consistent + } + return false +} + +// This is a private alpha release of Cloud Bigtable snapshots. This feature +// is not currently available to most Cloud Bigtable customers. This feature +// might be changed in backward-incompatible ways and is not recommended for +// production use. It is not subject to any SLA or deprecation policy. +// +// Request message for +// [google.bigtable.admin.v2.BigtableTableAdmin.SnapshotTable][google.bigtable.admin.v2.BigtableTableAdmin.SnapshotTable] +type SnapshotTableRequest struct { + // The unique name of the table to have the snapshot taken. + // Values are of the form + // `projects//instances//tables/
`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The name of the cluster where the snapshot will be created in. + // Values are of the form + // `projects//instances//clusters/`. + Cluster string `protobuf:"bytes,2,opt,name=cluster" json:"cluster,omitempty"` + // The ID by which the new snapshot should be referred to within the parent + // cluster, e.g., `mysnapshot` of the form: `[_a-zA-Z0-9][-_.a-zA-Z0-9]*` + // rather than + // `projects//instances//clusters//snapshots/mysnapshot`. + SnapshotId string `protobuf:"bytes,3,opt,name=snapshot_id,json=snapshotId" json:"snapshot_id,omitempty"` + // The amount of time that the new snapshot can stay active after it is + // created. Once 'ttl' expires, the snapshot will get deleted. The maximum + // amount of time a snapshot can stay active is 7 days. If 'ttl' is not + // specified, the default value of 24 hours will be used. + Ttl *google_protobuf5.Duration `protobuf:"bytes,4,opt,name=ttl" json:"ttl,omitempty"` + // Description of the snapshot. + Description string `protobuf:"bytes,5,opt,name=description" json:"description,omitempty"` +} + +func (m *SnapshotTableRequest) Reset() { *m = SnapshotTableRequest{} } +func (m *SnapshotTableRequest) String() string { return proto.CompactTextString(m) } +func (*SnapshotTableRequest) ProtoMessage() {} +func (*SnapshotTableRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{12} } + +func (m *SnapshotTableRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *SnapshotTableRequest) GetCluster() string { + if m != nil { + return m.Cluster + } + return "" +} + +func (m *SnapshotTableRequest) GetSnapshotId() string { + if m != nil { + return m.SnapshotId + } + return "" +} + +func (m *SnapshotTableRequest) GetTtl() *google_protobuf5.Duration { + if m != nil { + return m.Ttl + } + return nil +} + +func (m *SnapshotTableRequest) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +// This is a private alpha release of Cloud Bigtable snapshots. This feature +// is not currently available to most Cloud Bigtable customers. This feature +// might be changed in backward-incompatible ways and is not recommended for +// production use. It is not subject to any SLA or deprecation policy. +// +// Request message for +// [google.bigtable.admin.v2.BigtableTableAdmin.GetSnapshot][google.bigtable.admin.v2.BigtableTableAdmin.GetSnapshot] +type GetSnapshotRequest struct { + // The unique name of the requested snapshot. + // Values are of the form + // `projects//instances//clusters//snapshots/`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetSnapshotRequest) Reset() { *m = GetSnapshotRequest{} } +func (m *GetSnapshotRequest) String() string { return proto.CompactTextString(m) } +func (*GetSnapshotRequest) ProtoMessage() {} +func (*GetSnapshotRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{13} } + +func (m *GetSnapshotRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// This is a private alpha release of Cloud Bigtable snapshots. This feature +// is not currently available to most Cloud Bigtable customers. This feature +// might be changed in backward-incompatible ways and is not recommended for +// production use. It is not subject to any SLA or deprecation policy. +// +// Request message for +// [google.bigtable.admin.v2.BigtableTableAdmin.ListSnapshots][google.bigtable.admin.v2.BigtableTableAdmin.ListSnapshots] +type ListSnapshotsRequest struct { + // The unique name of the cluster for which snapshots should be listed. + // Values are of the form + // `projects//instances//clusters/`. + // Use ` = '-'` to list snapshots for all clusters in an instance, + // e.g., `projects//instances//clusters/-`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The maximum number of snapshots to return. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // The value of `next_page_token` returned by a previous call. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListSnapshotsRequest) Reset() { *m = ListSnapshotsRequest{} } +func (m *ListSnapshotsRequest) String() string { return proto.CompactTextString(m) } +func (*ListSnapshotsRequest) ProtoMessage() {} +func (*ListSnapshotsRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{14} } + +func (m *ListSnapshotsRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListSnapshotsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListSnapshotsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// This is a private alpha release of Cloud Bigtable snapshots. This feature +// is not currently available to most Cloud Bigtable customers. This feature +// might be changed in backward-incompatible ways and is not recommended for +// production use. It is not subject to any SLA or deprecation policy. +// +// Response message for +// [google.bigtable.admin.v2.BigtableTableAdmin.ListSnapshots][google.bigtable.admin.v2.BigtableTableAdmin.ListSnapshots] +type ListSnapshotsResponse struct { + // The snapshots present in the requested cluster. + Snapshots []*Snapshot `protobuf:"bytes,1,rep,name=snapshots" json:"snapshots,omitempty"` + // Set if not all snapshots could be returned in a single response. + // Pass this value to `page_token` in another request to get the next + // page of results. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListSnapshotsResponse) Reset() { *m = ListSnapshotsResponse{} } +func (m *ListSnapshotsResponse) String() string { return proto.CompactTextString(m) } +func (*ListSnapshotsResponse) ProtoMessage() {} +func (*ListSnapshotsResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{15} } + +func (m *ListSnapshotsResponse) GetSnapshots() []*Snapshot { + if m != nil { + return m.Snapshots + } + return nil +} + +func (m *ListSnapshotsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// This is a private alpha release of Cloud Bigtable snapshots. This feature +// is not currently available to most Cloud Bigtable customers. This feature +// might be changed in backward-incompatible ways and is not recommended for +// production use. It is not subject to any SLA or deprecation policy. +// +// Request message for +// [google.bigtable.admin.v2.BigtableTableAdmin.DeleteSnapshot][google.bigtable.admin.v2.BigtableTableAdmin.DeleteSnapshot] +type DeleteSnapshotRequest struct { + // The unique name of the snapshot to be deleted. + // Values are of the form + // `projects//instances//clusters//snapshots/`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteSnapshotRequest) Reset() { *m = DeleteSnapshotRequest{} } +func (m *DeleteSnapshotRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteSnapshotRequest) ProtoMessage() {} +func (*DeleteSnapshotRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{16} } + +func (m *DeleteSnapshotRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// This is a private alpha release of Cloud Bigtable snapshots. This feature +// is not currently available to most Cloud Bigtable customers. This feature +// might be changed in backward-incompatible ways and is not recommended for +// production use. It is not subject to any SLA or deprecation policy. +// +// The metadata for the Operation returned by SnapshotTable. +type SnapshotTableMetadata struct { + // The request that prompted the initiation of this SnapshotTable operation. + OriginalRequest *SnapshotTableRequest `protobuf:"bytes,1,opt,name=original_request,json=originalRequest" json:"original_request,omitempty"` + // The time at which the original request was received. + RequestTime *google_protobuf1.Timestamp `protobuf:"bytes,2,opt,name=request_time,json=requestTime" json:"request_time,omitempty"` + // The time at which the operation failed or was completed successfully. + FinishTime *google_protobuf1.Timestamp `protobuf:"bytes,3,opt,name=finish_time,json=finishTime" json:"finish_time,omitempty"` +} + +func (m *SnapshotTableMetadata) Reset() { *m = SnapshotTableMetadata{} } +func (m *SnapshotTableMetadata) String() string { return proto.CompactTextString(m) } +func (*SnapshotTableMetadata) ProtoMessage() {} +func (*SnapshotTableMetadata) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{17} } + +func (m *SnapshotTableMetadata) GetOriginalRequest() *SnapshotTableRequest { + if m != nil { + return m.OriginalRequest + } + return nil +} + +func (m *SnapshotTableMetadata) GetRequestTime() *google_protobuf1.Timestamp { + if m != nil { + return m.RequestTime + } + return nil +} + +func (m *SnapshotTableMetadata) GetFinishTime() *google_protobuf1.Timestamp { + if m != nil { + return m.FinishTime + } + return nil +} + +// This is a private alpha release of Cloud Bigtable snapshots. This feature +// is not currently available to most Cloud Bigtable customers. This feature +// might be changed in backward-incompatible ways and is not recommended for +// production use. It is not subject to any SLA or deprecation policy. +// +// The metadata for the Operation returned by CreateTableFromSnapshot. +type CreateTableFromSnapshotMetadata struct { + // The request that prompted the initiation of this CreateTableFromSnapshot + // operation. + OriginalRequest *CreateTableFromSnapshotRequest `protobuf:"bytes,1,opt,name=original_request,json=originalRequest" json:"original_request,omitempty"` + // The time at which the original request was received. + RequestTime *google_protobuf1.Timestamp `protobuf:"bytes,2,opt,name=request_time,json=requestTime" json:"request_time,omitempty"` + // The time at which the operation failed or was completed successfully. + FinishTime *google_protobuf1.Timestamp `protobuf:"bytes,3,opt,name=finish_time,json=finishTime" json:"finish_time,omitempty"` +} + +func (m *CreateTableFromSnapshotMetadata) Reset() { *m = CreateTableFromSnapshotMetadata{} } +func (m *CreateTableFromSnapshotMetadata) String() string { return proto.CompactTextString(m) } +func (*CreateTableFromSnapshotMetadata) ProtoMessage() {} +func (*CreateTableFromSnapshotMetadata) Descriptor() ([]byte, []int) { + return fileDescriptor1, []int{18} +} + +func (m *CreateTableFromSnapshotMetadata) GetOriginalRequest() *CreateTableFromSnapshotRequest { + if m != nil { + return m.OriginalRequest + } + return nil +} + +func (m *CreateTableFromSnapshotMetadata) GetRequestTime() *google_protobuf1.Timestamp { + if m != nil { + return m.RequestTime + } + return nil +} + +func (m *CreateTableFromSnapshotMetadata) GetFinishTime() *google_protobuf1.Timestamp { + if m != nil { + return m.FinishTime + } + return nil +} + func init() { proto.RegisterType((*CreateTableRequest)(nil), "google.bigtable.admin.v2.CreateTableRequest") proto.RegisterType((*CreateTableRequest_Split)(nil), "google.bigtable.admin.v2.CreateTableRequest.Split") + proto.RegisterType((*CreateTableFromSnapshotRequest)(nil), "google.bigtable.admin.v2.CreateTableFromSnapshotRequest") proto.RegisterType((*DropRowRangeRequest)(nil), "google.bigtable.admin.v2.DropRowRangeRequest") proto.RegisterType((*ListTablesRequest)(nil), "google.bigtable.admin.v2.ListTablesRequest") proto.RegisterType((*ListTablesResponse)(nil), "google.bigtable.admin.v2.ListTablesResponse") @@ -570,6 +1016,17 @@ func init() { proto.RegisterType((*DeleteTableRequest)(nil), "google.bigtable.admin.v2.DeleteTableRequest") proto.RegisterType((*ModifyColumnFamiliesRequest)(nil), "google.bigtable.admin.v2.ModifyColumnFamiliesRequest") proto.RegisterType((*ModifyColumnFamiliesRequest_Modification)(nil), "google.bigtable.admin.v2.ModifyColumnFamiliesRequest.Modification") + proto.RegisterType((*GenerateConsistencyTokenRequest)(nil), "google.bigtable.admin.v2.GenerateConsistencyTokenRequest") + proto.RegisterType((*GenerateConsistencyTokenResponse)(nil), "google.bigtable.admin.v2.GenerateConsistencyTokenResponse") + proto.RegisterType((*CheckConsistencyRequest)(nil), "google.bigtable.admin.v2.CheckConsistencyRequest") + proto.RegisterType((*CheckConsistencyResponse)(nil), "google.bigtable.admin.v2.CheckConsistencyResponse") + proto.RegisterType((*SnapshotTableRequest)(nil), "google.bigtable.admin.v2.SnapshotTableRequest") + proto.RegisterType((*GetSnapshotRequest)(nil), "google.bigtable.admin.v2.GetSnapshotRequest") + proto.RegisterType((*ListSnapshotsRequest)(nil), "google.bigtable.admin.v2.ListSnapshotsRequest") + proto.RegisterType((*ListSnapshotsResponse)(nil), "google.bigtable.admin.v2.ListSnapshotsResponse") + proto.RegisterType((*DeleteSnapshotRequest)(nil), "google.bigtable.admin.v2.DeleteSnapshotRequest") + proto.RegisterType((*SnapshotTableMetadata)(nil), "google.bigtable.admin.v2.SnapshotTableMetadata") + proto.RegisterType((*CreateTableFromSnapshotMetadata)(nil), "google.bigtable.admin.v2.CreateTableFromSnapshotMetadata") } // Reference imports to suppress errors if they are not otherwise used. @@ -587,19 +1044,77 @@ type BigtableTableAdminClient interface { // The table can be created with a full set of initial column families, // specified in the request. CreateTable(ctx context.Context, in *CreateTableRequest, opts ...grpc.CallOption) (*Table, error) + // This is a private alpha release of Cloud Bigtable snapshots. This feature + // is not currently available to most Cloud Bigtable customers. This feature + // might be changed in backward-incompatible ways and is not recommended for + // production use. It is not subject to any SLA or deprecation policy. + // + // Creates a new table from the specified snapshot. The target table must + // not exist. The snapshot and the table must be in the same instance. + CreateTableFromSnapshot(ctx context.Context, in *CreateTableFromSnapshotRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) // Lists all tables served from a specified instance. ListTables(ctx context.Context, in *ListTablesRequest, opts ...grpc.CallOption) (*ListTablesResponse, error) // Gets metadata information about the specified table. GetTable(ctx context.Context, in *GetTableRequest, opts ...grpc.CallOption) (*Table, error) // Permanently deletes a specified table and all of its data. DeleteTable(ctx context.Context, in *DeleteTableRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) - // Atomically performs a series of column family modifications - // on the specified table. + // Performs a series of column family modifications on the specified table. + // Either all or none of the modifications will occur before this method + // returns, but data requests received prior to that point may see a table + // where only some modifications have taken effect. ModifyColumnFamilies(ctx context.Context, in *ModifyColumnFamiliesRequest, opts ...grpc.CallOption) (*Table, error) // Permanently drop/delete a row range from a specified table. The request can // specify whether to delete all rows in a table, or only those that match a // particular prefix. DropRowRange(ctx context.Context, in *DropRowRangeRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) + // This is a private alpha release of Cloud Bigtable replication. This feature + // is not currently available to most Cloud Bigtable customers. This feature + // might be changed in backward-incompatible ways and is not recommended for + // production use. It is not subject to any SLA or deprecation policy. + // + // Generates a consistency token for a Table, which can be used in + // CheckConsistency to check whether mutations to the table that finished + // before this call started have been replicated. The tokens will be available + // for 90 days. + GenerateConsistencyToken(ctx context.Context, in *GenerateConsistencyTokenRequest, opts ...grpc.CallOption) (*GenerateConsistencyTokenResponse, error) + // This is a private alpha release of Cloud Bigtable replication. This feature + // is not currently available to most Cloud Bigtable customers. This feature + // might be changed in backward-incompatible ways and is not recommended for + // production use. It is not subject to any SLA or deprecation policy. + // + // Checks replication consistency based on a consistency token, that is, if + // replication has caught up based on the conditions specified in the token + // and the check request. + CheckConsistency(ctx context.Context, in *CheckConsistencyRequest, opts ...grpc.CallOption) (*CheckConsistencyResponse, error) + // This is a private alpha release of Cloud Bigtable snapshots. This feature + // is not currently available to most Cloud Bigtable customers. This feature + // might be changed in backward-incompatible ways and is not recommended for + // production use. It is not subject to any SLA or deprecation policy. + // + // Creates a new snapshot in the specified cluster from the specified + // source table. The cluster and the table must be in the same instance. + SnapshotTable(ctx context.Context, in *SnapshotTableRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // This is a private alpha release of Cloud Bigtable snapshots. This feature + // is not currently available to most Cloud Bigtable customers. This feature + // might be changed in backward-incompatible ways and is not recommended for + // production use. It is not subject to any SLA or deprecation policy. + // + // Gets metadata information about the specified snapshot. + GetSnapshot(ctx context.Context, in *GetSnapshotRequest, opts ...grpc.CallOption) (*Snapshot, error) + // This is a private alpha release of Cloud Bigtable snapshots. This feature + // is not currently available to most Cloud Bigtable customers. This feature + // might be changed in backward-incompatible ways and is not recommended for + // production use. It is not subject to any SLA or deprecation policy. + // + // Lists all snapshots associated with the specified cluster. + ListSnapshots(ctx context.Context, in *ListSnapshotsRequest, opts ...grpc.CallOption) (*ListSnapshotsResponse, error) + // This is a private alpha release of Cloud Bigtable snapshots. This feature + // is not currently available to most Cloud Bigtable customers. This feature + // might be changed in backward-incompatible ways and is not recommended for + // production use. It is not subject to any SLA or deprecation policy. + // + // Permanently deletes the specified snapshot. + DeleteSnapshot(ctx context.Context, in *DeleteSnapshotRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) } type bigtableTableAdminClient struct { @@ -619,6 +1134,15 @@ func (c *bigtableTableAdminClient) CreateTable(ctx context.Context, in *CreateTa return out, nil } +func (c *bigtableTableAdminClient) CreateTableFromSnapshot(ctx context.Context, in *CreateTableFromSnapshotRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableTableAdmin/CreateTableFromSnapshot", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *bigtableTableAdminClient) ListTables(ctx context.Context, in *ListTablesRequest, opts ...grpc.CallOption) (*ListTablesResponse, error) { out := new(ListTablesResponse) err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableTableAdmin/ListTables", in, out, c.cc, opts...) @@ -664,6 +1188,60 @@ func (c *bigtableTableAdminClient) DropRowRange(ctx context.Context, in *DropRow return out, nil } +func (c *bigtableTableAdminClient) GenerateConsistencyToken(ctx context.Context, in *GenerateConsistencyTokenRequest, opts ...grpc.CallOption) (*GenerateConsistencyTokenResponse, error) { + out := new(GenerateConsistencyTokenResponse) + err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableTableAdmin/GenerateConsistencyToken", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableTableAdminClient) CheckConsistency(ctx context.Context, in *CheckConsistencyRequest, opts ...grpc.CallOption) (*CheckConsistencyResponse, error) { + out := new(CheckConsistencyResponse) + err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableTableAdmin/CheckConsistency", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableTableAdminClient) SnapshotTable(ctx context.Context, in *SnapshotTableRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableTableAdmin/SnapshotTable", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableTableAdminClient) GetSnapshot(ctx context.Context, in *GetSnapshotRequest, opts ...grpc.CallOption) (*Snapshot, error) { + out := new(Snapshot) + err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableTableAdmin/GetSnapshot", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableTableAdminClient) ListSnapshots(ctx context.Context, in *ListSnapshotsRequest, opts ...grpc.CallOption) (*ListSnapshotsResponse, error) { + out := new(ListSnapshotsResponse) + err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableTableAdmin/ListSnapshots", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bigtableTableAdminClient) DeleteSnapshot(ctx context.Context, in *DeleteSnapshotRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) { + out := new(google_protobuf3.Empty) + err := grpc.Invoke(ctx, "/google.bigtable.admin.v2.BigtableTableAdmin/DeleteSnapshot", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // Server API for BigtableTableAdmin service type BigtableTableAdminServer interface { @@ -671,19 +1249,77 @@ type BigtableTableAdminServer interface { // The table can be created with a full set of initial column families, // specified in the request. CreateTable(context.Context, *CreateTableRequest) (*Table, error) + // This is a private alpha release of Cloud Bigtable snapshots. This feature + // is not currently available to most Cloud Bigtable customers. This feature + // might be changed in backward-incompatible ways and is not recommended for + // production use. It is not subject to any SLA or deprecation policy. + // + // Creates a new table from the specified snapshot. The target table must + // not exist. The snapshot and the table must be in the same instance. + CreateTableFromSnapshot(context.Context, *CreateTableFromSnapshotRequest) (*google_longrunning.Operation, error) // Lists all tables served from a specified instance. ListTables(context.Context, *ListTablesRequest) (*ListTablesResponse, error) // Gets metadata information about the specified table. GetTable(context.Context, *GetTableRequest) (*Table, error) // Permanently deletes a specified table and all of its data. DeleteTable(context.Context, *DeleteTableRequest) (*google_protobuf3.Empty, error) - // Atomically performs a series of column family modifications - // on the specified table. + // Performs a series of column family modifications on the specified table. + // Either all or none of the modifications will occur before this method + // returns, but data requests received prior to that point may see a table + // where only some modifications have taken effect. ModifyColumnFamilies(context.Context, *ModifyColumnFamiliesRequest) (*Table, error) // Permanently drop/delete a row range from a specified table. The request can // specify whether to delete all rows in a table, or only those that match a // particular prefix. DropRowRange(context.Context, *DropRowRangeRequest) (*google_protobuf3.Empty, error) + // This is a private alpha release of Cloud Bigtable replication. This feature + // is not currently available to most Cloud Bigtable customers. This feature + // might be changed in backward-incompatible ways and is not recommended for + // production use. It is not subject to any SLA or deprecation policy. + // + // Generates a consistency token for a Table, which can be used in + // CheckConsistency to check whether mutations to the table that finished + // before this call started have been replicated. The tokens will be available + // for 90 days. + GenerateConsistencyToken(context.Context, *GenerateConsistencyTokenRequest) (*GenerateConsistencyTokenResponse, error) + // This is a private alpha release of Cloud Bigtable replication. This feature + // is not currently available to most Cloud Bigtable customers. This feature + // might be changed in backward-incompatible ways and is not recommended for + // production use. It is not subject to any SLA or deprecation policy. + // + // Checks replication consistency based on a consistency token, that is, if + // replication has caught up based on the conditions specified in the token + // and the check request. + CheckConsistency(context.Context, *CheckConsistencyRequest) (*CheckConsistencyResponse, error) + // This is a private alpha release of Cloud Bigtable snapshots. This feature + // is not currently available to most Cloud Bigtable customers. This feature + // might be changed in backward-incompatible ways and is not recommended for + // production use. It is not subject to any SLA or deprecation policy. + // + // Creates a new snapshot in the specified cluster from the specified + // source table. The cluster and the table must be in the same instance. + SnapshotTable(context.Context, *SnapshotTableRequest) (*google_longrunning.Operation, error) + // This is a private alpha release of Cloud Bigtable snapshots. This feature + // is not currently available to most Cloud Bigtable customers. This feature + // might be changed in backward-incompatible ways and is not recommended for + // production use. It is not subject to any SLA or deprecation policy. + // + // Gets metadata information about the specified snapshot. + GetSnapshot(context.Context, *GetSnapshotRequest) (*Snapshot, error) + // This is a private alpha release of Cloud Bigtable snapshots. This feature + // is not currently available to most Cloud Bigtable customers. This feature + // might be changed in backward-incompatible ways and is not recommended for + // production use. It is not subject to any SLA or deprecation policy. + // + // Lists all snapshots associated with the specified cluster. + ListSnapshots(context.Context, *ListSnapshotsRequest) (*ListSnapshotsResponse, error) + // This is a private alpha release of Cloud Bigtable snapshots. This feature + // is not currently available to most Cloud Bigtable customers. This feature + // might be changed in backward-incompatible ways and is not recommended for + // production use. It is not subject to any SLA or deprecation policy. + // + // Permanently deletes the specified snapshot. + DeleteSnapshot(context.Context, *DeleteSnapshotRequest) (*google_protobuf3.Empty, error) } func RegisterBigtableTableAdminServer(s *grpc.Server, srv BigtableTableAdminServer) { @@ -708,6 +1344,24 @@ func _BigtableTableAdmin_CreateTable_Handler(srv interface{}, ctx context.Contex return interceptor(ctx, in, info, handler) } +func _BigtableTableAdmin_CreateTableFromSnapshot_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateTableFromSnapshotRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableTableAdminServer).CreateTableFromSnapshot(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.v2.BigtableTableAdmin/CreateTableFromSnapshot", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableTableAdminServer).CreateTableFromSnapshot(ctx, req.(*CreateTableFromSnapshotRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _BigtableTableAdmin_ListTables_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ListTablesRequest) if err := dec(in); err != nil { @@ -798,6 +1452,114 @@ func _BigtableTableAdmin_DropRowRange_Handler(srv interface{}, ctx context.Conte return interceptor(ctx, in, info, handler) } +func _BigtableTableAdmin_GenerateConsistencyToken_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GenerateConsistencyTokenRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableTableAdminServer).GenerateConsistencyToken(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.v2.BigtableTableAdmin/GenerateConsistencyToken", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableTableAdminServer).GenerateConsistencyToken(ctx, req.(*GenerateConsistencyTokenRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableTableAdmin_CheckConsistency_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CheckConsistencyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableTableAdminServer).CheckConsistency(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.v2.BigtableTableAdmin/CheckConsistency", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableTableAdminServer).CheckConsistency(ctx, req.(*CheckConsistencyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableTableAdmin_SnapshotTable_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SnapshotTableRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableTableAdminServer).SnapshotTable(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.v2.BigtableTableAdmin/SnapshotTable", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableTableAdminServer).SnapshotTable(ctx, req.(*SnapshotTableRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableTableAdmin_GetSnapshot_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetSnapshotRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableTableAdminServer).GetSnapshot(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.v2.BigtableTableAdmin/GetSnapshot", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableTableAdminServer).GetSnapshot(ctx, req.(*GetSnapshotRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableTableAdmin_ListSnapshots_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListSnapshotsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableTableAdminServer).ListSnapshots(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.v2.BigtableTableAdmin/ListSnapshots", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableTableAdminServer).ListSnapshots(ctx, req.(*ListSnapshotsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BigtableTableAdmin_DeleteSnapshot_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteSnapshotRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BigtableTableAdminServer).DeleteSnapshot(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.bigtable.admin.v2.BigtableTableAdmin/DeleteSnapshot", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BigtableTableAdminServer).DeleteSnapshot(ctx, req.(*DeleteSnapshotRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _BigtableTableAdmin_serviceDesc = grpc.ServiceDesc{ ServiceName: "google.bigtable.admin.v2.BigtableTableAdmin", HandlerType: (*BigtableTableAdminServer)(nil), @@ -806,6 +1568,10 @@ var _BigtableTableAdmin_serviceDesc = grpc.ServiceDesc{ MethodName: "CreateTable", Handler: _BigtableTableAdmin_CreateTable_Handler, }, + { + MethodName: "CreateTableFromSnapshot", + Handler: _BigtableTableAdmin_CreateTableFromSnapshot_Handler, + }, { MethodName: "ListTables", Handler: _BigtableTableAdmin_ListTables_Handler, @@ -826,6 +1592,30 @@ var _BigtableTableAdmin_serviceDesc = grpc.ServiceDesc{ MethodName: "DropRowRange", Handler: _BigtableTableAdmin_DropRowRange_Handler, }, + { + MethodName: "GenerateConsistencyToken", + Handler: _BigtableTableAdmin_GenerateConsistencyToken_Handler, + }, + { + MethodName: "CheckConsistency", + Handler: _BigtableTableAdmin_CheckConsistency_Handler, + }, + { + MethodName: "SnapshotTable", + Handler: _BigtableTableAdmin_SnapshotTable_Handler, + }, + { + MethodName: "GetSnapshot", + Handler: _BigtableTableAdmin_GetSnapshot_Handler, + }, + { + MethodName: "ListSnapshots", + Handler: _BigtableTableAdmin_ListSnapshots_Handler, + }, + { + MethodName: "DeleteSnapshot", + Handler: _BigtableTableAdmin_DeleteSnapshot_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "google/bigtable/admin/v2/bigtable_table_admin.proto", @@ -836,62 +1626,100 @@ func init() { } var fileDescriptor1 = []byte{ - // 910 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0xdd, 0x6e, 0x1b, 0x45, - 0x14, 0xce, 0xd8, 0x4e, 0x9a, 0x1c, 0x3b, 0x29, 0x0c, 0x25, 0xb8, 0x6e, 0xa1, 0xd1, 0x52, 0x45, - 0xc1, 0x84, 0x5d, 0x69, 0xab, 0xa8, 0x28, 0xb4, 0x82, 0xba, 0xa1, 0x84, 0x3f, 0x29, 0x5a, 0x2a, - 0x24, 0xb8, 0x59, 0x4d, 0xbc, 0x93, 0xed, 0x90, 0xdd, 0x99, 0x65, 0x77, 0x1c, 0xc7, 0x42, 0xbd, - 0x41, 0x48, 0x48, 0xdc, 0xf6, 0xaa, 0xe2, 0x45, 0x10, 0x37, 0x3c, 0x04, 0xd7, 0xdc, 0xf1, 0x08, - 0x3c, 0x00, 0x9a, 0x1f, 0x27, 0x9b, 0x38, 0x1b, 0xd7, 0xb9, 0xb1, 0x66, 0xce, 0xf9, 0xce, 0x39, - 0xdf, 0x9c, 0x33, 0xdf, 0x8e, 0xe1, 0x5e, 0x2c, 0x44, 0x9c, 0x50, 0x6f, 0x9f, 0xc5, 0x92, 0xec, - 0x27, 0xd4, 0x23, 0x51, 0xca, 0xb8, 0x77, 0xe4, 0x9f, 0x58, 0x42, 0xf3, 0xab, 0xed, 0x6e, 0x96, - 0x0b, 0x29, 0x70, 0xdb, 0x04, 0xb9, 0x63, 0x88, 0x6b, 0x9c, 0x47, 0x7e, 0xe7, 0xb6, 0x4d, 0x47, - 0x32, 0xe6, 0x11, 0xce, 0x85, 0x24, 0x92, 0x09, 0x5e, 0x98, 0xb8, 0xce, 0x9b, 0x65, 0xef, 0x40, - 0x3e, 0xb3, 0xe6, 0xbb, 0x95, 0x1c, 0x4c, 0x76, 0x83, 0x7a, 0xd7, 0xa2, 0x12, 0xc1, 0xe3, 0x7c, - 0xc0, 0x39, 0xe3, 0xb1, 0x27, 0x32, 0x9a, 0x9f, 0xa9, 0xf0, 0x8e, 0x05, 0xe9, 0xdd, 0xfe, 0xe0, - 0xc0, 0x8b, 0x06, 0x06, 0x60, 0xfd, 0xb7, 0xce, 0xfb, 0x69, 0x9a, 0xc9, 0x91, 0x75, 0xde, 0x39, - 0xef, 0x94, 0x2c, 0xa5, 0x85, 0x24, 0x69, 0x66, 0x00, 0xce, 0x7f, 0x08, 0xf0, 0xe3, 0x9c, 0x12, - 0x49, 0x9f, 0x2a, 0x62, 0x01, 0xfd, 0x71, 0x40, 0x0b, 0x89, 0x57, 0x61, 0x21, 0x23, 0x39, 0xe5, - 0xb2, 0x8d, 0xd6, 0xd0, 0xc6, 0x52, 0x60, 0x77, 0xf8, 0x26, 0x2c, 0x9a, 0xde, 0xb1, 0xa8, 0x5d, - 0xd3, 0x9e, 0x6b, 0x7a, 0xff, 0x79, 0x84, 0xb7, 0x60, 0x5e, 0x2f, 0xdb, 0xf5, 0x35, 0xb4, 0xd1, - 0xf4, 0xef, 0xb8, 0x55, 0x1d, 0x75, 0x4d, 0x25, 0x83, 0xc6, 0xdf, 0xc1, 0x0a, 0xe3, 0x4c, 0x32, - 0x92, 0x84, 0x45, 0x96, 0x30, 0x59, 0xb4, 0x1b, 0x6b, 0xf5, 0x8d, 0xa6, 0xef, 0x57, 0xc7, 0x4f, - 0xf2, 0x75, 0xbf, 0x51, 0xa1, 0xc1, 0xb2, 0xcd, 0xa4, 0x77, 0x45, 0xe7, 0x26, 0xcc, 0xeb, 0x15, - 0x7e, 0x0d, 0xea, 0x87, 0x74, 0xa4, 0x8f, 0xd2, 0x0a, 0xd4, 0xd2, 0x79, 0x89, 0xe0, 0x8d, 0x9d, - 0x5c, 0x64, 0x81, 0x18, 0x06, 0x84, 0xc7, 0x27, 0xe7, 0xc6, 0xd0, 0xe0, 0x24, 0xa5, 0xf6, 0xd4, - 0x7a, 0x8d, 0xd7, 0x61, 0x25, 0x17, 0xc3, 0xf0, 0x90, 0x8e, 0xc2, 0x2c, 0xa7, 0x07, 0xec, 0x58, - 0x9f, 0xbc, 0xb5, 0x3b, 0x17, 0xb4, 0x72, 0x31, 0xfc, 0x92, 0x8e, 0xf6, 0xb4, 0x15, 0x3f, 0x80, - 0x4e, 0x44, 0x13, 0x2a, 0x69, 0x48, 0x92, 0x24, 0x8c, 0x88, 0x24, 0xe1, 0x41, 0x2e, 0xd2, 0xf0, - 0xb4, 0x2b, 0x8b, 0xbb, 0x73, 0xc1, 0xaa, 0xc1, 0x3c, 0x4a, 0x92, 0x1d, 0x22, 0xc9, 0x93, 0x5c, - 0xa4, 0xfa, 0x20, 0xbd, 0x45, 0x58, 0x90, 0x24, 0x8f, 0xa9, 0x74, 0x7e, 0x41, 0xf0, 0xfa, 0x57, - 0xac, 0x90, 0xda, 0x5e, 0x4c, 0x9b, 0xc8, 0x87, 0xd0, 0x38, 0x62, 0x74, 0xa8, 0x39, 0xad, 0xf8, - 0x77, 0xa7, 0x74, 0xdd, 0xfd, 0x96, 0xd1, 0x61, 0xa0, 0x23, 0xf0, 0xdb, 0x00, 0x19, 0x89, 0x69, - 0x28, 0xc5, 0x21, 0xe5, 0x9a, 0xdf, 0x52, 0xb0, 0xa4, 0x2c, 0x4f, 0x95, 0xc1, 0x19, 0x00, 0x2e, - 0xb3, 0x28, 0x32, 0xc1, 0x0b, 0x8a, 0xef, 0x2b, 0x9a, 0xca, 0xd2, 0x46, 0x7a, 0x4c, 0x53, 0xc7, - 0x6c, 0xe1, 0x78, 0x1d, 0xae, 0x73, 0x7a, 0x2c, 0xc3, 0x52, 0x49, 0x73, 0x81, 0x96, 0x95, 0x79, - 0xef, 0xa4, 0x6c, 0x08, 0xd7, 0x3f, 0xa3, 0xf2, 0xcc, 0x65, 0xbc, 0x68, 0x28, 0x57, 0x3e, 0xb6, - 0xb3, 0x01, 0x78, 0x47, 0x8f, 0x60, 0x5a, 0x0d, 0xe7, 0x9f, 0x1a, 0xdc, 0xfa, 0x5a, 0x44, 0xec, - 0x60, 0xf4, 0x58, 0x24, 0x83, 0x94, 0x3f, 0x21, 0x29, 0x4b, 0xd8, 0xe9, 0x48, 0x2e, 0xe2, 0xf5, - 0x0c, 0x96, 0x53, 0x15, 0xc2, 0xfa, 0x46, 0xc4, 0xed, 0x9a, 0x6e, 0x53, 0xaf, 0x9a, 0xe0, 0x25, - 0x15, 0x8c, 0xcf, 0xa6, 0x0a, 0xce, 0x26, 0xee, 0xfc, 0x85, 0xa0, 0x55, 0xf6, 0xe3, 0x15, 0xa8, - 0xb1, 0xc8, 0x92, 0xa9, 0xb1, 0x08, 0x7f, 0x02, 0x0b, 0x7d, 0xad, 0x14, 0xdd, 0xa4, 0xa6, 0xbf, - 0x7e, 0x89, 0xa2, 0x4e, 0xab, 0x8f, 0x76, 0xe7, 0x02, 0x1b, 0xa7, 0x32, 0x0c, 0xb2, 0x48, 0x65, - 0xa8, 0xcf, 0x9a, 0xc1, 0xc4, 0xe1, 0x1b, 0xd0, 0x88, 0x72, 0x91, 0xb5, 0x1b, 0xf6, 0xf6, 0xeb, - 0x5d, 0x6f, 0x1e, 0xea, 0xa9, 0x88, 0xfc, 0x3f, 0xae, 0x01, 0xee, 0xd9, 0x4c, 0x7a, 0x18, 0x8f, - 0x54, 0x36, 0xfc, 0x02, 0x41, 0xb3, 0x24, 0x71, 0xbc, 0x39, 0xcb, 0x97, 0xa0, 0x33, 0xed, 0x42, - 0x3a, 0x5b, 0x3f, 0xff, 0xfd, 0xef, 0x8b, 0x9a, 0xe7, 0x74, 0xd5, 0xd7, 0xf8, 0x27, 0xa3, 0xa2, - 0x87, 0x59, 0x2e, 0x7e, 0xa0, 0x7d, 0x59, 0x78, 0x5d, 0x8f, 0xf1, 0x42, 0x12, 0xde, 0xa7, 0x85, - 0xd7, 0x7d, 0x6e, 0xbe, 0xd6, 0xc5, 0x36, 0xea, 0xe2, 0xdf, 0x11, 0xc0, 0xa9, 0x1e, 0xf0, 0xfb, - 0xd5, 0x65, 0x26, 0xb4, 0xdb, 0xd9, 0x7c, 0x35, 0xb0, 0x91, 0x98, 0xe3, 0x6b, 0x82, 0x9b, 0x78, - 0x06, 0x82, 0xf8, 0x37, 0x04, 0x8b, 0x63, 0xd9, 0xe0, 0xf7, 0xaa, 0xcb, 0x9d, 0x93, 0xd6, 0xf4, - 0x6e, 0x9d, 0x25, 0xa3, 0xae, 0x78, 0x05, 0x15, 0xcb, 0xc4, 0xeb, 0x3e, 0xc7, 0xbf, 0x22, 0x68, - 0x96, 0x24, 0x76, 0xd9, 0x00, 0x27, 0x95, 0xd8, 0x59, 0x1d, 0xa3, 0xc7, 0x6f, 0x96, 0xfb, 0xa9, - 0x7a, 0xd0, 0xc6, 0x4c, 0xba, 0xb3, 0x30, 0xf9, 0x13, 0xc1, 0x8d, 0x8b, 0xf4, 0x85, 0xb7, 0xae, - 0xa4, 0xc7, 0xe9, 0xed, 0xfa, 0x42, 0x93, 0xdc, 0x71, 0x3e, 0x7e, 0x75, 0x92, 0xdb, 0xe9, 0x05, - 0x05, 0xd5, 0x8d, 0x7b, 0x89, 0xa0, 0x55, 0x7e, 0xa3, 0xf0, 0x07, 0x97, 0xf4, 0x71, 0xf2, 0x2d, - 0xab, 0x6c, 0x64, 0x4f, 0x73, 0x7c, 0xe0, 0xdc, 0x9f, 0x81, 0x63, 0x54, 0xca, 0xbf, 0x8d, 0xba, - 0xbd, 0x63, 0xb8, 0xdd, 0x17, 0x69, 0x25, 0x9f, 0xde, 0x5b, 0x93, 0xba, 0xde, 0x53, 0x2c, 0xf6, - 0xd0, 0xf7, 0x0f, 0x6d, 0x50, 0x2c, 0x12, 0xc2, 0x63, 0x57, 0xe4, 0xb1, 0x17, 0x53, 0xae, 0x39, - 0x7a, 0xc6, 0x45, 0x32, 0x56, 0x4c, 0xfe, 0x73, 0xfa, 0x48, 0x2f, 0xf6, 0x17, 0x34, 0xf2, 0xde, - 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x2b, 0x5d, 0x18, 0x44, 0xe6, 0x09, 0x00, 0x00, + // 1514 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0xcb, 0x6f, 0xdc, 0x54, + 0x17, 0xaf, 0x27, 0x8f, 0x26, 0x67, 0xf2, 0xea, 0xfd, 0xd2, 0x76, 0x3a, 0x6d, 0x93, 0xc8, 0x5f, + 0x55, 0x42, 0x52, 0xc6, 0x62, 0xaa, 0xa8, 0x21, 0x6d, 0x20, 0x9d, 0x84, 0x26, 0x05, 0x4a, 0x23, + 0xb7, 0xaa, 0xd4, 0x2a, 0x92, 0xe5, 0x8c, 0x6f, 0x9c, 0xdb, 0x78, 0x7c, 0x8d, 0x7d, 0xa7, 0x69, + 0x0a, 0x5d, 0x50, 0x21, 0x21, 0xb1, 0xed, 0xaa, 0x42, 0x42, 0x62, 0xcb, 0x12, 0x21, 0x21, 0x55, + 0x48, 0x88, 0x2d, 0x5b, 0xd6, 0x2c, 0x90, 0x58, 0xb3, 0xe2, 0x0f, 0x40, 0xf7, 0xe1, 0xc4, 0xf3, + 0xf0, 0x78, 0x26, 0x6c, 0xd8, 0x44, 0xbe, 0xe7, 0x9e, 0xc7, 0xef, 0x9c, 0x73, 0xef, 0xb9, 0xbf, + 0x09, 0x5c, 0x75, 0x29, 0x75, 0x3d, 0x6c, 0x6c, 0x13, 0x97, 0xd9, 0xdb, 0x1e, 0x36, 0x6c, 0xa7, + 0x46, 0x7c, 0xe3, 0x49, 0xf9, 0x50, 0x62, 0xc9, 0xbf, 0x42, 0x5e, 0x0a, 0x42, 0xca, 0x28, 0x2a, + 0x48, 0xa3, 0x52, 0xac, 0x52, 0x92, 0x9b, 0x4f, 0xca, 0xc5, 0x0b, 0xca, 0x9d, 0x1d, 0x10, 0xc3, + 0xf6, 0x7d, 0xca, 0x6c, 0x46, 0xa8, 0x1f, 0x49, 0xbb, 0xe2, 0xa5, 0xd4, 0x60, 0xd2, 0x8d, 0xd4, + 0xfa, 0xbf, 0xd2, 0xf2, 0xa8, 0xef, 0x86, 0x75, 0xdf, 0x27, 0xbe, 0x6b, 0xd0, 0x00, 0x87, 0x0d, + 0xae, 0xa6, 0x94, 0x92, 0x58, 0x6d, 0xd7, 0x77, 0x0c, 0xa7, 0x2e, 0x15, 0xd4, 0xfe, 0xf9, 0xe6, + 0x7d, 0x5c, 0x0b, 0xd8, 0x81, 0xda, 0x9c, 0x6e, 0xde, 0x64, 0xa4, 0x86, 0x23, 0x66, 0xd7, 0x02, + 0xa9, 0xa0, 0xff, 0xad, 0x01, 0x5a, 0x0d, 0xb1, 0xcd, 0xf0, 0x7d, 0x0e, 0xcc, 0xc4, 0x9f, 0xd4, + 0x71, 0xc4, 0xd0, 0x19, 0x18, 0x0c, 0xec, 0x10, 0xfb, 0xac, 0xa0, 0xcd, 0x68, 0xb3, 0xc3, 0xa6, + 0x5a, 0xa1, 0x73, 0x30, 0x24, 0x8b, 0x44, 0x9c, 0x42, 0x4e, 0xec, 0x9c, 0x14, 0xeb, 0xdb, 0x0e, + 0x5a, 0x80, 0x01, 0xf1, 0x59, 0xe8, 0x9b, 0xd1, 0x66, 0xf3, 0xe5, 0xe9, 0x52, 0x5a, 0xe9, 0x4a, + 0x32, 0x92, 0xd4, 0x46, 0x0f, 0x61, 0x8c, 0xf8, 0x84, 0x11, 0xdb, 0xb3, 0xa2, 0xc0, 0x23, 0x2c, + 0x2a, 0xf4, 0xcf, 0xf4, 0xcd, 0xe6, 0xcb, 0xe5, 0x74, 0xfb, 0x56, 0xbc, 0xa5, 0x7b, 0xdc, 0xd4, + 0x1c, 0x55, 0x9e, 0xc4, 0x2a, 0x2a, 0x9e, 0x83, 0x01, 0xf1, 0x85, 0x26, 0xa0, 0x6f, 0x0f, 0x1f, + 0x88, 0x54, 0x46, 0x4c, 0xfe, 0xa9, 0x7f, 0x06, 0x53, 0x09, 0x2f, 0xb7, 0x42, 0x5a, 0xbb, 0xe7, + 0xdb, 0x41, 0xb4, 0x4b, 0xd9, 0xbf, 0xa8, 0xc0, 0x1b, 0x30, 0x1e, 0xd1, 0x7a, 0x58, 0xc5, 0x56, + 0xa4, 0x9c, 0x89, 0x5a, 0x0c, 0x9b, 0x63, 0x52, 0x1c, 0x87, 0xd0, 0x5f, 0x69, 0xf0, 0xbf, 0xb5, + 0x90, 0x06, 0x26, 0xdd, 0x37, 0x6d, 0xdf, 0x3d, 0xac, 0x3a, 0x82, 0x7e, 0xdf, 0xae, 0x61, 0x15, + 0x51, 0x7c, 0xa3, 0xcb, 0x30, 0x16, 0xd2, 0x7d, 0x6b, 0x0f, 0x1f, 0x58, 0x41, 0x88, 0x77, 0xc8, + 0x53, 0x11, 0x75, 0x64, 0xe3, 0x84, 0x39, 0x12, 0xd2, 0xfd, 0x0f, 0xf1, 0xc1, 0xa6, 0x90, 0xa2, + 0x1b, 0x50, 0x74, 0xb0, 0x87, 0x19, 0xb6, 0x6c, 0xcf, 0xb3, 0x1c, 0x9b, 0xd9, 0xd6, 0x4e, 0x48, + 0x6b, 0xd6, 0x51, 0x4f, 0x86, 0x36, 0x4e, 0x98, 0x67, 0xa4, 0xce, 0x4d, 0xcf, 0x5b, 0xb3, 0x99, + 0xcd, 0xf3, 0x16, 0x05, 0xa8, 0x0c, 0xc1, 0x20, 0xb3, 0x43, 0x17, 0x33, 0xfd, 0x0b, 0x0d, 0x4e, + 0x7d, 0x44, 0x22, 0x26, 0xe4, 0x51, 0x56, 0x35, 0x16, 0xa1, 0xff, 0x09, 0xc1, 0xfb, 0x02, 0xd3, + 0x58, 0xf9, 0x52, 0x46, 0xcf, 0x4b, 0x0f, 0x08, 0xde, 0x37, 0x85, 0x05, 0xba, 0x08, 0x10, 0xd8, + 0x2e, 0xb6, 0x18, 0xdd, 0xc3, 0xbe, 0xaa, 0xd3, 0x30, 0x97, 0xdc, 0xe7, 0x02, 0xbd, 0x0e, 0x28, + 0x89, 0x22, 0x0a, 0xa8, 0x1f, 0x61, 0x74, 0x8d, 0xc3, 0xe4, 0x92, 0x82, 0x26, 0x0e, 0x49, 0xe6, + 0x21, 0x53, 0xea, 0xe8, 0x32, 0x8c, 0xfb, 0xf8, 0x29, 0xb3, 0x12, 0x21, 0x65, 0xf3, 0x46, 0xb9, + 0x78, 0xf3, 0x30, 0xac, 0x05, 0xe3, 0xeb, 0x98, 0x35, 0x5c, 0x85, 0x76, 0x4d, 0x39, 0x76, 0xda, + 0xfa, 0x2c, 0xa0, 0x35, 0xd1, 0x82, 0xac, 0x18, 0xfa, 0xef, 0x39, 0x38, 0x7f, 0x87, 0x3a, 0x64, + 0xe7, 0x60, 0x95, 0x7a, 0xf5, 0x9a, 0x7f, 0xcb, 0xae, 0x11, 0x8f, 0x1c, 0xb5, 0xa4, 0x1d, 0xae, + 0x5d, 0x18, 0xad, 0x71, 0x13, 0x52, 0x95, 0x23, 0xa4, 0x90, 0x13, 0x65, 0xaa, 0xa4, 0x03, 0xec, + 0x10, 0x41, 0xee, 0x29, 0x57, 0x66, 0xa3, 0xe3, 0xe2, 0xcf, 0x1a, 0x8c, 0x24, 0xf7, 0xd1, 0x18, + 0xe4, 0x88, 0xa3, 0xc0, 0xe4, 0x88, 0x83, 0x56, 0x60, 0xb0, 0x2a, 0x6e, 0x98, 0x28, 0x52, 0xbe, + 0x7c, 0xb9, 0xc3, 0x7d, 0x3e, 0x8a, 0x7e, 0xb0, 0x71, 0xc2, 0x54, 0x76, 0xdc, 0x43, 0x3d, 0x70, + 0xb8, 0x87, 0xbe, 0x5e, 0x3d, 0x48, 0x3b, 0x34, 0x09, 0xfd, 0x4e, 0x48, 0x83, 0x42, 0xbf, 0x3a, + 0xfd, 0x62, 0x55, 0x19, 0x80, 0xbe, 0x1a, 0x75, 0xf4, 0x05, 0x98, 0x5e, 0xc7, 0x3e, 0x1f, 0xb6, + 0x78, 0x95, 0xfa, 0x11, 0x89, 0x18, 0xf6, 0xab, 0x07, 0xe2, 0x18, 0x74, 0x6a, 0xcb, 0x5d, 0x98, + 0x49, 0x37, 0x53, 0xc7, 0x74, 0x1e, 0x4e, 0x55, 0x8f, 0xf6, 0xd4, 0x79, 0x93, 0x4e, 0x26, 0xaa, + 0x4d, 0x46, 0xfa, 0x23, 0x38, 0xbb, 0xba, 0x8b, 0xab, 0x7b, 0x09, 0x6f, 0x9d, 0x5a, 0xdc, 0xd6, + 0x77, 0x2e, 0xc5, 0xf7, 0x12, 0x14, 0x5a, 0x7d, 0x2b, 0x90, 0x53, 0x00, 0x87, 0xfa, 0xf2, 0x5a, + 0x0f, 0x99, 0x09, 0x89, 0xfe, 0x83, 0x06, 0x93, 0xf1, 0xc4, 0xca, 0xbc, 0x10, 0x05, 0x38, 0x59, + 0xf5, 0xea, 0x11, 0xc3, 0x61, 0x3c, 0x14, 0xd5, 0x12, 0x4d, 0x43, 0x3e, 0x9e, 0x86, 0x7c, 0x64, + 0xca, 0x8b, 0x0e, 0xb1, 0xe8, 0xb6, 0x83, 0xe6, 0xa1, 0x8f, 0x31, 0x4f, 0xf4, 0x28, 0x5f, 0x3e, + 0x17, 0xf7, 0x38, 0x7e, 0xb0, 0x4a, 0x6b, 0xea, 0xb5, 0x33, 0xb9, 0x16, 0x9a, 0x81, 0xbc, 0x83, + 0xa3, 0x6a, 0x48, 0x02, 0x2e, 0x2b, 0x0c, 0x08, 0x6f, 0x49, 0x11, 0xbf, 0x60, 0xeb, 0x98, 0x35, + 0x4f, 0xf3, 0x76, 0x9d, 0x7c, 0x0c, 0x93, 0x7c, 0xc4, 0xc4, 0xaa, 0x99, 0xb3, 0xee, 0x3c, 0x88, + 0xf9, 0x64, 0x45, 0xe4, 0x99, 0x3c, 0xd4, 0x03, 0xe6, 0x10, 0x17, 0xdc, 0x23, 0xcf, 0x70, 0xd6, + 0x38, 0xfb, 0x5c, 0x83, 0xd3, 0x4d, 0xc1, 0x54, 0x1b, 0x56, 0x60, 0x38, 0x2e, 0x46, 0x3c, 0xd5, + 0xf4, 0xf4, 0x83, 0x7e, 0x98, 0xd7, 0x91, 0x51, 0xd7, 0xb3, 0x6d, 0x1e, 0x4e, 0xcb, 0xd1, 0xd3, + 0x4d, 0x71, 0xfe, 0xd2, 0xe0, 0x74, 0x43, 0xf7, 0xef, 0x60, 0x66, 0xf3, 0x57, 0x05, 0x3d, 0x84, + 0x09, 0x1a, 0x12, 0x97, 0xf8, 0xb6, 0x67, 0x85, 0xd2, 0x83, 0xb0, 0xcc, 0x97, 0x4b, 0xd9, 0xb8, + 0x93, 0x07, 0xc9, 0x1c, 0x8f, 0xfd, 0xc4, 0x40, 0x96, 0x61, 0x44, 0x79, 0xb4, 0x38, 0x4f, 0x51, + 0x93, 0xa3, 0xd8, 0x72, 0x26, 0xee, 0xc7, 0x24, 0xc6, 0xcc, 0x2b, 0x7d, 0x2e, 0x41, 0xd7, 0x21, + 0xbf, 0x43, 0x7c, 0x12, 0xed, 0x4a, 0xeb, 0xbe, 0x4c, 0x6b, 0x90, 0xea, 0x5c, 0xa0, 0xbf, 0xc8, + 0xc1, 0x74, 0x0a, 0x25, 0x38, 0x4c, 0xbd, 0x9a, 0x9a, 0xfa, 0x62, 0x57, 0x6c, 0xa5, 0x0d, 0xcf, + 0xf8, 0x4f, 0x15, 0xa1, 0xfc, 0xe3, 0x29, 0x40, 0x15, 0x95, 0x81, 0x40, 0x7c, 0x93, 0x67, 0x81, + 0x5e, 0x6a, 0x90, 0x4f, 0xa4, 0x81, 0xae, 0xf4, 0xc2, 0xcd, 0x8a, 0x59, 0x8f, 0xb4, 0xbe, 0xf0, + 0xe2, 0xb7, 0x3f, 0x5f, 0xe6, 0x0c, 0x7d, 0x8e, 0xf3, 0xe3, 0x4f, 0xe5, 0x6d, 0x5b, 0x0e, 0x42, + 0xfa, 0x18, 0x57, 0x59, 0x64, 0xcc, 0x19, 0xc4, 0x8f, 0x98, 0xed, 0x57, 0x71, 0x64, 0xcc, 0x3d, + 0x97, 0xfc, 0x39, 0x5a, 0xd2, 0xe6, 0xd0, 0x4f, 0x1a, 0x9c, 0x4d, 0x29, 0x2e, 0x3a, 0x76, 0x3f, + 0x8a, 0x17, 0x63, 0xcb, 0x04, 0x29, 0x2f, 0xdd, 0x8d, 0x49, 0xb9, 0xbe, 0x21, 0xb0, 0x56, 0xf4, + 0xe5, 0x1e, 0xb0, 0xca, 0xf7, 0x2c, 0x19, 0x8c, 0xc3, 0xff, 0x5a, 0x03, 0x38, 0xa2, 0x38, 0x68, + 0x3e, 0x1d, 0x71, 0x0b, 0x1d, 0x2b, 0x5e, 0xe9, 0x4e, 0x59, 0x8e, 0x18, 0xbd, 0x2c, 0x30, 0x5f, + 0x41, 0x3d, 0xd4, 0x17, 0x7d, 0xa5, 0xc1, 0x50, 0xcc, 0x84, 0xd0, 0x9b, 0xe9, 0xe1, 0x9a, 0xd8, + 0x52, 0x76, 0xb3, 0x1b, 0xc1, 0xf0, 0x59, 0x93, 0x02, 0x45, 0x21, 0x31, 0xe6, 0x9e, 0xa3, 0x2f, + 0x35, 0xc8, 0x27, 0x58, 0x53, 0xa7, 0xf3, 0xd7, 0x4a, 0xae, 0x8a, 0x67, 0x5a, 0x0e, 0xff, 0xfb, + 0xfc, 0x17, 0x52, 0x8c, 0x64, 0xae, 0x17, 0x24, 0xaf, 0x35, 0x98, 0x6c, 0x47, 0x99, 0xd0, 0xc2, + 0xb1, 0x28, 0x56, 0x76, 0xb9, 0x3e, 0x10, 0x20, 0xd7, 0xf4, 0xf7, 0xba, 0x07, 0xb9, 0x54, 0x6b, + 0x13, 0x90, 0x9f, 0xb8, 0x57, 0x1a, 0x8c, 0x24, 0x7f, 0x76, 0xa0, 0xb7, 0x3a, 0xd4, 0xb1, 0xf5, + 0xe7, 0x49, 0x6a, 0x21, 0x2b, 0x02, 0xe3, 0x0d, 0xfd, 0x5a, 0x0f, 0x18, 0x9d, 0x84, 0x7f, 0x8e, + 0xed, 0x0f, 0x0d, 0x0a, 0x69, 0xbc, 0x0a, 0xbd, 0xd3, 0xe9, 0xfc, 0x75, 0xa4, 0x70, 0xc5, 0xa5, + 0xe3, 0x98, 0xaa, 0x7b, 0xf3, 0xb1, 0xc8, 0x6b, 0x43, 0x5f, 0xed, 0x21, 0x2f, 0x37, 0xc5, 0x29, + 0xcf, 0xf1, 0x17, 0x0d, 0x26, 0x9a, 0xe9, 0x18, 0x7a, 0xbb, 0xc3, 0xa4, 0x6a, 0x4f, 0x0b, 0x8b, + 0xe5, 0x5e, 0x4c, 0x54, 0x2e, 0xb7, 0x44, 0x2e, 0x2b, 0xfa, 0xf5, 0x1e, 0x72, 0xa9, 0x36, 0x39, + 0xe3, 0x39, 0x7c, 0xa3, 0xc1, 0x68, 0xc3, 0x63, 0x8e, 0x7a, 0x7c, 0xf5, 0xb3, 0x06, 0xec, 0xbb, + 0x02, 0xe8, 0xa2, 0x7e, 0xb5, 0x07, 0xa0, 0x51, 0x62, 0xac, 0x7e, 0xab, 0x41, 0x3e, 0x41, 0x00, + 0x3b, 0xcd, 0x8a, 0x56, 0x9e, 0x58, 0xec, 0x82, 0x7a, 0xe9, 0x2b, 0x02, 0xe1, 0x12, 0x5a, 0xcc, + 0x44, 0xa8, 0x38, 0x30, 0xff, 0x3c, 0xa4, 0x6b, 0x7c, 0x8a, 0x7c, 0xaf, 0xc1, 0x68, 0x03, 0x1b, + 0xec, 0x54, 0xc4, 0x76, 0x1c, 0xb5, 0x68, 0x74, 0xad, 0xaf, 0xfa, 0xdf, 0x08, 0xba, 0xe3, 0x1b, + 0x90, 0x80, 0xfd, 0xfc, 0x08, 0x37, 0x7f, 0xaf, 0xc6, 0x1a, 0xf9, 0x23, 0x32, 0xb2, 0xe6, 0x70, + 0x73, 0x79, 0xd3, 0x26, 0x88, 0x42, 0x37, 0x77, 0xec, 0x92, 0x56, 0x5e, 0x6b, 0x70, 0xa1, 0x4a, + 0x6b, 0xa9, 0x80, 0x2a, 0x67, 0x5b, 0x79, 0xcd, 0x26, 0x07, 0xb1, 0xa9, 0x3d, 0x5a, 0x56, 0x46, + 0x2e, 0xf5, 0x6c, 0xdf, 0x2d, 0xd1, 0xd0, 0x35, 0x5c, 0xec, 0x0b, 0x88, 0x86, 0xdc, 0xb2, 0x03, + 0x12, 0xb5, 0xfe, 0x2f, 0xef, 0xba, 0xf8, 0xf8, 0x2e, 0x37, 0xb5, 0x2e, 0xed, 0x57, 0x3d, 0x5a, + 0x77, 0x4a, 0x71, 0x9c, 0x92, 0x88, 0x51, 0x7a, 0x50, 0xfe, 0x35, 0x56, 0xd8, 0x12, 0x0a, 0x5b, + 0xb1, 0xc2, 0x96, 0x50, 0xd8, 0x7a, 0x50, 0xde, 0x1e, 0x14, 0xb1, 0xae, 0xfe, 0x13, 0x00, 0x00, + 0xff, 0xff, 0xe3, 0x38, 0xa4, 0xfd, 0xa3, 0x14, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/common.pb.go b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/common.pb.go index d52196d..8abf0f5 100644 --- a/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/common.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/common.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/bigtable/admin/v2/common.proto -// DO NOT EDIT! package admin @@ -50,20 +49,22 @@ func init() { func init() { proto.RegisterFile("google/bigtable/admin/v2/common.proto", fileDescriptor2) } var fileDescriptor2 = []byte{ - // 234 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x90, 0x31, 0x4b, 0xc4, 0x40, - 0x10, 0x85, 0x3d, 0x05, 0x85, 0xbd, 0x26, 0xa4, 0x3a, 0x8e, 0x80, 0x95, 0x8d, 0xc5, 0x0e, 0x9c, - 0xa5, 0x5c, 0xe1, 0x5d, 0xa2, 0x5e, 0xa3, 0xc1, 0x8d, 0x85, 0x36, 0xc7, 0xe4, 0x5c, 0x87, 0x85, - 0xec, 0xce, 0x92, 0xac, 0x07, 0xfe, 0x7b, 0xc9, 0x6e, 0xac, 0xc4, 0xee, 0x0d, 0xef, 0x9b, 0x99, - 0x37, 0x23, 0xae, 0x88, 0x99, 0x3a, 0x0d, 0xad, 0xa1, 0x80, 0x6d, 0xa7, 0x01, 0x3f, 0xac, 0x71, - 0x70, 0x5c, 0xc1, 0x81, 0xad, 0x65, 0x27, 0x7d, 0xcf, 0x81, 0xf3, 0x45, 0xc2, 0xe4, 0x2f, 0x26, - 0x23, 0x26, 0x8f, 0xab, 0x65, 0x31, 0x0d, 0x40, 0x6f, 0x00, 0x9d, 0xe3, 0x80, 0xc1, 0xb0, 0x1b, - 0x52, 0xdf, 0xf2, 0x72, 0x72, 0x63, 0xd5, 0x7e, 0x7d, 0x42, 0x30, 0x56, 0x0f, 0x01, 0xad, 0x4f, - 0xc0, 0xf5, 0x5a, 0xcc, 0x55, 0xe0, 0x1e, 0x49, 0x37, 0xdf, 0x5e, 0xe7, 0x85, 0x58, 0xa8, 0xe6, - 0xf9, 0xe5, 0xee, 0xa1, 0xda, 0x37, 0x6f, 0x75, 0xb5, 0x7f, 0x7d, 0x52, 0x75, 0xb5, 0xdd, 0xdd, - 0xef, 0xaa, 0x32, 0x3b, 0xc9, 0x2f, 0xc4, 0x99, 0x52, 0x65, 0x36, 0x1b, 0xc5, 0x63, 0x59, 0x66, - 0xa7, 0x9b, 0x4e, 0x14, 0x07, 0xb6, 0xf2, 0xbf, 0x74, 0x9b, 0xf9, 0x36, 0x5e, 0x51, 0x8f, 0xbb, - 0xea, 0xd9, 0xfb, 0x7a, 0x02, 0x89, 0x3b, 0x74, 0x24, 0xb9, 0x27, 0x20, 0xed, 0x62, 0x12, 0x48, - 0x16, 0x7a, 0x33, 0xfc, 0x7d, 0xc6, 0x6d, 0x14, 0xed, 0x79, 0x24, 0x6f, 0x7e, 0x02, 0x00, 0x00, - 0xff, 0xff, 0x66, 0x13, 0x33, 0x8e, 0x35, 0x01, 0x00, 0x00, + // 270 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0xd0, 0xcf, 0x4b, 0xc3, 0x30, + 0x14, 0x07, 0x70, 0x3b, 0x41, 0x21, 0xbb, 0x94, 0x9e, 0xc6, 0x28, 0x7a, 0xf2, 0xe2, 0x21, 0x81, + 0x7a, 0x94, 0x1d, 0xd6, 0x1f, 0xce, 0x5d, 0xb4, 0x98, 0x3a, 0x50, 0x0a, 0x23, 0xdd, 0x62, 0x08, + 0x34, 0x79, 0xa1, 0xcd, 0x06, 0xfe, 0x4b, 0x1e, 0xfc, 0x43, 0xfc, 0xab, 0x64, 0x49, 0x7b, 0x12, + 0x6f, 0x2f, 0xbc, 0xcf, 0xcb, 0xf7, 0x25, 0xe8, 0x46, 0x00, 0x88, 0x96, 0x93, 0x46, 0x0a, 0xcb, + 0x9a, 0x96, 0x13, 0xb6, 0x57, 0x52, 0x93, 0x63, 0x42, 0x76, 0xa0, 0x14, 0x68, 0x6c, 0x3a, 0xb0, + 0x10, 0xcd, 0x3c, 0xc3, 0x23, 0xc3, 0x8e, 0xe1, 0x63, 0x32, 0x8f, 0x87, 0x0b, 0x98, 0x91, 0x84, + 0x69, 0x0d, 0x96, 0x59, 0x09, 0xba, 0xf7, 0x73, 0xf3, 0xeb, 0xa1, 0xeb, 0x4e, 0xcd, 0xe1, 0x83, + 0x58, 0xa9, 0x78, 0x6f, 0x99, 0x32, 0x1e, 0xdc, 0x2e, 0xd0, 0x94, 0x5a, 0xe8, 0x98, 0xe0, 0xd5, + 0xa7, 0xe1, 0x51, 0x8c, 0x66, 0xb4, 0x7a, 0x7e, 0x59, 0xae, 0x8a, 0x6d, 0xf5, 0x56, 0x16, 0xdb, + 0xd7, 0x27, 0x5a, 0x16, 0xd9, 0xfa, 0x61, 0x5d, 0xe4, 0xe1, 0x59, 0x74, 0x89, 0xce, 0x29, 0xcd, + 0xc3, 0xe0, 0x54, 0x3c, 0xe6, 0x79, 0x38, 0x49, 0xbf, 0x03, 0x14, 0xef, 0x40, 0xe1, 0xff, 0xd6, + 0x4b, 0xa7, 0x99, 0x7b, 0x46, 0x79, 0x0a, 0x2b, 0x83, 0xf7, 0xc5, 0x00, 0x05, 0xb4, 0x4c, 0x0b, + 0x0c, 0x9d, 0x20, 0x82, 0x6b, 0xb7, 0x0a, 0xf1, 0x2d, 0x66, 0x64, 0xff, 0xf7, 0x37, 0xee, 0x5d, + 0xf1, 0x35, 0xb9, 0x5a, 0xf9, 0xf9, 0xac, 0x85, 0xc3, 0x1e, 0xa7, 0x63, 0xdc, 0xd2, 0xc5, 0x6d, + 0x92, 0x9f, 0x11, 0xd4, 0x0e, 0xd4, 0x23, 0xa8, 0x1d, 0xa8, 0x37, 0x49, 0x73, 0xe1, 0xb2, 0xee, + 0x7e, 0x03, 0x00, 0x00, 0xff, 0xff, 0xaf, 0x9e, 0x61, 0x6a, 0x78, 0x01, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/instance.pb.go b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/instance.pb.go index 01b61e4..42c78ce 100644 --- a/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/instance.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/instance.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/bigtable/admin/v2/instance.proto -// DO NOT EDIT! package admin @@ -55,15 +54,25 @@ const ( // An instance meant for production use. `serve_nodes` must be set // on the cluster. Instance_PRODUCTION Instance_Type = 1 + // The instance is meant for development and testing purposes only; it has + // no performance or uptime guarantees and is not covered by SLA. + // After a development instance is created, it can be upgraded by + // updating the instance to type `PRODUCTION`. An instance created + // as a production instance cannot be changed to a development instance. + // When creating a development instance, `serve_nodes` on the cluster must + // not be set. + Instance_DEVELOPMENT Instance_Type = 2 ) var Instance_Type_name = map[int32]string{ 0: "TYPE_UNSPECIFIED", 1: "PRODUCTION", + 2: "DEVELOPMENT", } var Instance_Type_value = map[string]int32{ "TYPE_UNSPECIFIED": 0, "PRODUCTION": 1, + "DEVELOPMENT": 2, } func (x Instance_Type) String() string { @@ -132,6 +141,18 @@ type Instance struct { State Instance_State `protobuf:"varint,3,opt,name=state,enum=google.bigtable.admin.v2.Instance_State" json:"state,omitempty"` // The type of the instance. Defaults to `PRODUCTION`. Type Instance_Type `protobuf:"varint,4,opt,name=type,enum=google.bigtable.admin.v2.Instance_Type" json:"type,omitempty"` + // Labels are a flexible and lightweight mechanism for organizing cloud + // resources into groups that reflect a customer's organizational needs and + // deployment strategies. They can be used to filter resources and aggregate + // metrics. + // + // * Label keys must be between 1 and 63 characters long and must conform to + // the regular expression: `[\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62}`. + // * Label values must be between 0 and 63 characters long and must conform to + // the regular expression: `[\p{Ll}\p{Lo}\p{N}_-]{0,63}`. + // * No more than 64 labels can be associated with a given resource. + // * Keys and values must both be under 128 bytes. + Labels map[string]string `protobuf:"bytes,5,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` } func (m *Instance) Reset() { *m = Instance{} } @@ -167,6 +188,13 @@ func (m *Instance) GetType() Instance_Type { return Instance_TYPE_UNSPECIFIED } +func (m *Instance) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + // A resizable group of nodes in a particular cloud location, capable // of serving all [Tables][google.bigtable.admin.v2.Table] in the parent // [Instance][google.bigtable.admin.v2.Instance]. @@ -177,9 +205,9 @@ type Cluster struct { Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` // (`CreationOnly`) // The location where this cluster's nodes and storage reside. For best - // performance, clients should be located as close as possible to this cluster. - // Currently only zones are supported, so values should be of the form - // `projects//locations/`. + // performance, clients should be located as close as possible to this + // cluster. Currently only zones are supported, so values should be of the + // form `projects//locations/`. Location string `protobuf:"bytes,2,opt,name=location" json:"location,omitempty"` // (`OutputOnly`) // The current state of the cluster. @@ -233,9 +261,226 @@ func (m *Cluster) GetDefaultStorageType() StorageType { return StorageType_STORAGE_TYPE_UNSPECIFIED } +// This is a private alpha release of Cloud Bigtable replication. This feature +// is not currently available to most Cloud Bigtable customers. This feature +// might be changed in backward-incompatible ways and is not recommended for +// production use. It is not subject to any SLA or deprecation policy. +// +// A configuration object describing how Cloud Bigtable should treat traffic +// from a particular end user application. +type AppProfile struct { + // (`OutputOnly`) + // The unique name of the app profile. Values are of the form + // `projects//instances//appProfiles/[_a-zA-Z0-9][-_.a-zA-Z0-9]*`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Strongly validated etag for optimistic concurrency control. Preserve the + // value returned from `GetAppProfile` when calling `UpdateAppProfile` to + // fail the request if there has been a modification in the mean time. The + // `update_mask` of the request need not include `etag` for this protection + // to apply. + // See [Wikipedia](https://en.wikipedia.org/wiki/HTTP_ETag) and + // [RFC 7232](https://tools.ietf.org/html/rfc7232#section-2.3) for more + // details. + Etag string `protobuf:"bytes,2,opt,name=etag" json:"etag,omitempty"` + // Optional long form description of the use case for this AppProfile. + Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` + // The routing policy for all read/write requests which use this app profile. + // A value must be explicitly set. + // + // Types that are valid to be assigned to RoutingPolicy: + // *AppProfile_MultiClusterRoutingUseAny_ + // *AppProfile_SingleClusterRouting_ + RoutingPolicy isAppProfile_RoutingPolicy `protobuf_oneof:"routing_policy"` +} + +func (m *AppProfile) Reset() { *m = AppProfile{} } +func (m *AppProfile) String() string { return proto.CompactTextString(m) } +func (*AppProfile) ProtoMessage() {} +func (*AppProfile) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{2} } + +type isAppProfile_RoutingPolicy interface { + isAppProfile_RoutingPolicy() +} + +type AppProfile_MultiClusterRoutingUseAny_ struct { + MultiClusterRoutingUseAny *AppProfile_MultiClusterRoutingUseAny `protobuf:"bytes,5,opt,name=multi_cluster_routing_use_any,json=multiClusterRoutingUseAny,oneof"` +} +type AppProfile_SingleClusterRouting_ struct { + SingleClusterRouting *AppProfile_SingleClusterRouting `protobuf:"bytes,6,opt,name=single_cluster_routing,json=singleClusterRouting,oneof"` +} + +func (*AppProfile_MultiClusterRoutingUseAny_) isAppProfile_RoutingPolicy() {} +func (*AppProfile_SingleClusterRouting_) isAppProfile_RoutingPolicy() {} + +func (m *AppProfile) GetRoutingPolicy() isAppProfile_RoutingPolicy { + if m != nil { + return m.RoutingPolicy + } + return nil +} + +func (m *AppProfile) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *AppProfile) GetEtag() string { + if m != nil { + return m.Etag + } + return "" +} + +func (m *AppProfile) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *AppProfile) GetMultiClusterRoutingUseAny() *AppProfile_MultiClusterRoutingUseAny { + if x, ok := m.GetRoutingPolicy().(*AppProfile_MultiClusterRoutingUseAny_); ok { + return x.MultiClusterRoutingUseAny + } + return nil +} + +func (m *AppProfile) GetSingleClusterRouting() *AppProfile_SingleClusterRouting { + if x, ok := m.GetRoutingPolicy().(*AppProfile_SingleClusterRouting_); ok { + return x.SingleClusterRouting + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*AppProfile) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _AppProfile_OneofMarshaler, _AppProfile_OneofUnmarshaler, _AppProfile_OneofSizer, []interface{}{ + (*AppProfile_MultiClusterRoutingUseAny_)(nil), + (*AppProfile_SingleClusterRouting_)(nil), + } +} + +func _AppProfile_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*AppProfile) + // routing_policy + switch x := m.RoutingPolicy.(type) { + case *AppProfile_MultiClusterRoutingUseAny_: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.MultiClusterRoutingUseAny); err != nil { + return err + } + case *AppProfile_SingleClusterRouting_: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.SingleClusterRouting); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("AppProfile.RoutingPolicy has unexpected type %T", x) + } + return nil +} + +func _AppProfile_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*AppProfile) + switch tag { + case 5: // routing_policy.multi_cluster_routing_use_any + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(AppProfile_MultiClusterRoutingUseAny) + err := b.DecodeMessage(msg) + m.RoutingPolicy = &AppProfile_MultiClusterRoutingUseAny_{msg} + return true, err + case 6: // routing_policy.single_cluster_routing + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(AppProfile_SingleClusterRouting) + err := b.DecodeMessage(msg) + m.RoutingPolicy = &AppProfile_SingleClusterRouting_{msg} + return true, err + default: + return false, nil + } +} + +func _AppProfile_OneofSizer(msg proto.Message) (n int) { + m := msg.(*AppProfile) + // routing_policy + switch x := m.RoutingPolicy.(type) { + case *AppProfile_MultiClusterRoutingUseAny_: + s := proto.Size(x.MultiClusterRoutingUseAny) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *AppProfile_SingleClusterRouting_: + s := proto.Size(x.SingleClusterRouting) + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Read/write requests may be routed to any cluster in the instance, and will +// fail over to another cluster in the event of transient errors or delays. +// Choosing this option sacrifices read-your-writes consistency to improve +// availability. +type AppProfile_MultiClusterRoutingUseAny struct { +} + +func (m *AppProfile_MultiClusterRoutingUseAny) Reset() { *m = AppProfile_MultiClusterRoutingUseAny{} } +func (m *AppProfile_MultiClusterRoutingUseAny) String() string { return proto.CompactTextString(m) } +func (*AppProfile_MultiClusterRoutingUseAny) ProtoMessage() {} +func (*AppProfile_MultiClusterRoutingUseAny) Descriptor() ([]byte, []int) { + return fileDescriptor3, []int{2, 0} +} + +// Unconditionally routes all read/write requests to a specific cluster. +// This option preserves read-your-writes consistency, but does not improve +// availability. +type AppProfile_SingleClusterRouting struct { + // The cluster to which read/write requests should be routed. + ClusterId string `protobuf:"bytes,1,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // Whether or not `CheckAndMutateRow` and `ReadModifyWriteRow` requests are + // allowed by this app profile. It is unsafe to send these requests to + // the same table/row/column in multiple clusters. + AllowTransactionalWrites bool `protobuf:"varint,2,opt,name=allow_transactional_writes,json=allowTransactionalWrites" json:"allow_transactional_writes,omitempty"` +} + +func (m *AppProfile_SingleClusterRouting) Reset() { *m = AppProfile_SingleClusterRouting{} } +func (m *AppProfile_SingleClusterRouting) String() string { return proto.CompactTextString(m) } +func (*AppProfile_SingleClusterRouting) ProtoMessage() {} +func (*AppProfile_SingleClusterRouting) Descriptor() ([]byte, []int) { + return fileDescriptor3, []int{2, 1} +} + +func (m *AppProfile_SingleClusterRouting) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *AppProfile_SingleClusterRouting) GetAllowTransactionalWrites() bool { + if m != nil { + return m.AllowTransactionalWrites + } + return false +} + func init() { proto.RegisterType((*Instance)(nil), "google.bigtable.admin.v2.Instance") proto.RegisterType((*Cluster)(nil), "google.bigtable.admin.v2.Cluster") + proto.RegisterType((*AppProfile)(nil), "google.bigtable.admin.v2.AppProfile") + proto.RegisterType((*AppProfile_MultiClusterRoutingUseAny)(nil), "google.bigtable.admin.v2.AppProfile.MultiClusterRoutingUseAny") + proto.RegisterType((*AppProfile_SingleClusterRouting)(nil), "google.bigtable.admin.v2.AppProfile.SingleClusterRouting") proto.RegisterEnum("google.bigtable.admin.v2.Instance_State", Instance_State_name, Instance_State_value) proto.RegisterEnum("google.bigtable.admin.v2.Instance_Type", Instance_Type_name, Instance_Type_value) proto.RegisterEnum("google.bigtable.admin.v2.Cluster_State", Cluster_State_name, Cluster_State_value) @@ -244,34 +489,53 @@ func init() { func init() { proto.RegisterFile("google/bigtable/admin/v2/instance.proto", fileDescriptor3) } var fileDescriptor3 = []byte{ - // 463 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x92, 0xc1, 0x6a, 0xdb, 0x40, - 0x10, 0x86, 0x23, 0x47, 0x6a, 0x9d, 0x49, 0x9a, 0x8a, 0x6d, 0x0e, 0xc6, 0x04, 0x9a, 0x0a, 0x42, - 0x7c, 0x28, 0x12, 0xb8, 0xf4, 0x14, 0x52, 0xb0, 0x2d, 0xb5, 0x88, 0x16, 0x59, 0x95, 0x14, 0x42, - 0x72, 0x11, 0x6b, 0x7b, 0x2b, 0x04, 0xd2, 0xae, 0xd0, 0x6e, 0x0c, 0x7e, 0x9e, 0x3e, 0x4b, 0xdf, - 0xab, 0x68, 0x24, 0x97, 0x9a, 0xd6, 0xa5, 0xe4, 0xb6, 0x33, 0xfb, 0xff, 0xf3, 0xaf, 0x3e, 0x0d, - 0x5c, 0x65, 0x42, 0x64, 0x05, 0x73, 0x16, 0x79, 0xa6, 0xe8, 0xa2, 0x60, 0x0e, 0x5d, 0x95, 0x39, - 0x77, 0xd6, 0x63, 0x27, 0xe7, 0x52, 0x51, 0xbe, 0x64, 0x76, 0x55, 0x0b, 0x25, 0xc8, 0xa0, 0x15, - 0xda, 0x5b, 0xa1, 0x8d, 0x42, 0x7b, 0x3d, 0x1e, 0x9e, 0x77, 0x23, 0x68, 0x95, 0x3b, 0x94, 0x73, - 0xa1, 0xa8, 0xca, 0x05, 0x97, 0xad, 0x6f, 0x78, 0xb9, 0x37, 0x60, 0x29, 0xca, 0x52, 0xf0, 0x56, - 0x66, 0x7d, 0xef, 0x41, 0xdf, 0xef, 0x12, 0x09, 0x01, 0x9d, 0xd3, 0x92, 0x0d, 0xb4, 0x0b, 0x6d, - 0x74, 0x14, 0xe1, 0x99, 0xbc, 0x81, 0x93, 0x55, 0x2e, 0xab, 0x82, 0x6e, 0x52, 0xbc, 0xeb, 0xe1, - 0xdd, 0x71, 0xd7, 0x0b, 0x1a, 0xc9, 0x07, 0x30, 0xa4, 0xa2, 0x8a, 0x0d, 0x0e, 0x2f, 0xb4, 0xd1, - 0xe9, 0x78, 0x64, 0xef, 0x7b, 0xb2, 0xbd, 0x4d, 0xb2, 0xe3, 0x46, 0x1f, 0xb5, 0x36, 0x72, 0x0d, - 0xba, 0xda, 0x54, 0x6c, 0xa0, 0xa3, 0xfd, 0xea, 0x3f, 0xec, 0xc9, 0xa6, 0x62, 0x11, 0x9a, 0xac, - 0xf7, 0x60, 0xe0, 0x30, 0xf2, 0x0a, 0x5e, 0xc6, 0xc9, 0x24, 0xf1, 0xd2, 0x60, 0x9e, 0xa4, 0x9f, - 0x83, 0xf9, 0x5d, 0x60, 0x1e, 0x90, 0x23, 0x30, 0x22, 0x6f, 0xe2, 0xde, 0x9b, 0x1a, 0x39, 0x81, - 0xfe, 0x2c, 0xf2, 0x26, 0x89, 0x1f, 0x7c, 0x32, 0x7b, 0xd6, 0x5b, 0xd0, 0x9b, 0x21, 0xe4, 0x0c, - 0xcc, 0xe4, 0x3e, 0xf4, 0xd2, 0xdb, 0x20, 0x0e, 0xbd, 0x99, 0xff, 0xd1, 0xf7, 0x5c, 0xf3, 0x80, - 0x9c, 0x02, 0x84, 0xd1, 0xdc, 0xbd, 0x9d, 0x25, 0xfe, 0x3c, 0x30, 0x35, 0xeb, 0x47, 0x0f, 0x9e, - 0xcf, 0x8a, 0x47, 0xa9, 0x58, 0xfd, 0x57, 0x48, 0x43, 0xe8, 0x17, 0x62, 0x89, 0xfc, 0x3b, 0x40, - 0xbf, 0x6a, 0x72, 0xb3, 0x4b, 0xe7, 0x1f, 0x9f, 0xd7, 0x25, 0xec, 0xc2, 0x79, 0x0d, 0xc7, 0x92, - 0xd5, 0x6b, 0x96, 0x72, 0xb1, 0x62, 0x12, 0x19, 0x19, 0x11, 0x60, 0x2b, 0x68, 0x3a, 0xe4, 0x0e, - 0xce, 0x56, 0xec, 0x1b, 0x7d, 0x2c, 0x54, 0x2a, 0x95, 0xa8, 0x69, 0xc6, 0x52, 0xa4, 0x69, 0x60, - 0xdc, 0xe5, 0xfe, 0xb8, 0xb8, 0x55, 0x23, 0x4b, 0xd2, 0x8d, 0xf8, 0xad, 0x67, 0x7d, 0x7d, 0x12, - 0xd9, 0xa6, 0x8a, 0xbc, 0xd8, 0x7f, 0x68, 0xaa, 0xc3, 0xa6, 0x72, 0xfd, 0x78, 0x32, 0xfd, 0xe2, - 0xb9, 0xa6, 0x3e, 0xe5, 0x70, 0xbe, 0x14, 0xe5, 0xde, 0x27, 0x4d, 0x5f, 0x6c, 0xff, 0x70, 0xd8, - 0x2c, 0x67, 0xa8, 0x3d, 0xdc, 0x74, 0xd2, 0x4c, 0x14, 0x94, 0x67, 0xb6, 0xa8, 0x33, 0x27, 0x63, - 0x1c, 0x57, 0xd7, 0x69, 0xaf, 0x68, 0x95, 0xcb, 0x3f, 0x97, 0xfc, 0x1a, 0x0f, 0x8b, 0x67, 0xa8, - 0x7c, 0xf7, 0x33, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x10, 0x73, 0x5b, 0x6e, 0x03, 0x00, 0x00, + // 765 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0xdd, 0x8e, 0xdb, 0x44, + 0x14, 0x8e, 0xf3, 0xb3, 0x64, 0x4f, 0xca, 0xd6, 0x1a, 0x22, 0x94, 0x86, 0x16, 0x42, 0xa4, 0xaa, + 0xb9, 0x72, 0xa4, 0x20, 0x24, 0x4a, 0xd9, 0x4a, 0xf9, 0x71, 0x5b, 0x8b, 0xad, 0x13, 0x1c, 0xef, + 0xae, 0xba, 0x8a, 0x64, 0x4d, 0xec, 0x59, 0xcb, 0x62, 0x32, 0x63, 0x3c, 0x93, 0xac, 0x7c, 0xcb, + 0xe3, 0x70, 0xc5, 0x1d, 0x4f, 0xc0, 0x0d, 0x8f, 0xc3, 0x13, 0x20, 0x8f, 0x6d, 0x76, 0x17, 0x12, + 0xb4, 0xe2, 0x6e, 0xce, 0x39, 0xdf, 0x77, 0xbe, 0x33, 0xdf, 0xb1, 0x07, 0x5e, 0x84, 0x9c, 0x87, + 0x94, 0x0c, 0xd7, 0x51, 0x28, 0xf1, 0x9a, 0x92, 0x21, 0x0e, 0x36, 0x11, 0x1b, 0xee, 0x46, 0xc3, + 0x88, 0x09, 0x89, 0x99, 0x4f, 0x8c, 0x38, 0xe1, 0x92, 0xa3, 0x4e, 0x0e, 0x34, 0x4a, 0xa0, 0xa1, + 0x80, 0xc6, 0x6e, 0xd4, 0x7d, 0x5a, 0xb4, 0xc0, 0x71, 0x34, 0xc4, 0x8c, 0x71, 0x89, 0x65, 0xc4, + 0x99, 0xc8, 0x79, 0xdd, 0xe7, 0x07, 0x05, 0x7c, 0xbe, 0xd9, 0x70, 0x96, 0xc3, 0xfa, 0xbf, 0xd5, + 0xa0, 0x69, 0x15, 0x8a, 0x08, 0x41, 0x9d, 0xe1, 0x0d, 0xe9, 0x68, 0x3d, 0x6d, 0x70, 0xec, 0xa8, + 0x33, 0xfa, 0x12, 0x1e, 0x05, 0x91, 0x88, 0x29, 0x4e, 0x3d, 0x55, 0xab, 0xaa, 0x5a, 0xab, 0xc8, + 0xd9, 0x19, 0xe4, 0x35, 0x34, 0x84, 0xc4, 0x92, 0x74, 0x6a, 0x3d, 0x6d, 0x70, 0x32, 0x1a, 0x18, + 0x87, 0x46, 0x36, 0x4a, 0x25, 0x63, 0x99, 0xe1, 0x9d, 0x9c, 0x86, 0x5e, 0x41, 0x5d, 0xa6, 0x31, + 0xe9, 0xd4, 0x15, 0xfd, 0xc5, 0x03, 0xe8, 0x6e, 0x1a, 0x13, 0x47, 0x91, 0xd0, 0x1b, 0x38, 0xa2, + 0x78, 0x4d, 0xa8, 0xe8, 0x34, 0x7a, 0xb5, 0x41, 0x6b, 0x64, 0x3c, 0x80, 0x7e, 0xa6, 0x08, 0x26, + 0x93, 0x49, 0xea, 0x14, 0xec, 0xee, 0x4b, 0x68, 0xdd, 0x49, 0x23, 0x1d, 0x6a, 0x3f, 0x92, 0xb4, + 0x70, 0x22, 0x3b, 0xa2, 0x36, 0x34, 0x76, 0x98, 0x6e, 0x4b, 0x07, 0xf2, 0xe0, 0xdb, 0xea, 0x37, + 0x5a, 0xff, 0x6b, 0x68, 0xa8, 0xfb, 0xa0, 0x4f, 0xe0, 0xf1, 0xd2, 0x1d, 0xbb, 0xa6, 0x67, 0xcf, + 0x5d, 0xef, 0x7b, 0x7b, 0x7e, 0x69, 0xeb, 0x15, 0x74, 0x0c, 0x0d, 0xc7, 0x1c, 0xcf, 0x3e, 0xe8, + 0x1a, 0x7a, 0x04, 0xcd, 0xa9, 0x63, 0x8e, 0x5d, 0xcb, 0x7e, 0xab, 0x57, 0xfb, 0xa7, 0x50, 0xcf, + 0xee, 0x81, 0xda, 0xa0, 0xbb, 0x1f, 0x16, 0xa6, 0x77, 0x6e, 0x2f, 0x17, 0xe6, 0xd4, 0x7a, 0x63, + 0x99, 0x33, 0xbd, 0x82, 0x4e, 0x00, 0x16, 0xce, 0x7c, 0x76, 0x3e, 0x75, 0xad, 0xb9, 0xad, 0x6b, + 0xe8, 0x31, 0xb4, 0x66, 0xe6, 0x85, 0x79, 0x36, 0x5f, 0xbc, 0x37, 0x6d, 0x57, 0xaf, 0xf6, 0x7f, + 0xaf, 0xc2, 0x47, 0x53, 0xba, 0x15, 0x92, 0x24, 0x7b, 0x17, 0xd7, 0x85, 0x26, 0xe5, 0xbe, 0xfa, + 0x26, 0x8a, 0x91, 0xff, 0x8e, 0xd1, 0xe9, 0xfd, 0x8d, 0xfd, 0x87, 0xe5, 0x85, 0xc2, 0xfd, 0x85, + 0x7d, 0x01, 0x2d, 0x41, 0x92, 0x1d, 0xf1, 0x18, 0x0f, 0x88, 0x50, 0x7b, 0x6b, 0x38, 0xa0, 0x52, + 0x76, 0x96, 0x41, 0x97, 0xd0, 0x0e, 0xc8, 0x35, 0xde, 0x52, 0xe9, 0x09, 0xc9, 0x13, 0x1c, 0x12, + 0x4f, 0x6d, 0xb8, 0xa1, 0xe4, 0x9e, 0x1f, 0x96, 0x5b, 0xe6, 0x68, 0xb5, 0x5f, 0x54, 0xb4, 0xb8, + 0x93, 0xeb, 0xff, 0xf0, 0xbf, 0xac, 0xce, 0x22, 0xc7, 0x5c, 0x5a, 0x57, 0x59, 0x54, 0xcb, 0xa2, + 0x99, 0xb5, 0x1c, 0x4f, 0xce, 0xcc, 0x99, 0x5e, 0xef, 0xff, 0x59, 0x03, 0x18, 0xc7, 0xf1, 0x22, + 0xe1, 0xd7, 0x11, 0xdd, 0xff, 0x0f, 0x20, 0xa8, 0x13, 0x89, 0xc3, 0xc2, 0x46, 0x75, 0x46, 0x3d, + 0x68, 0x05, 0x44, 0xf8, 0x49, 0x14, 0x2b, 0x87, 0x6b, 0xc5, 0x6f, 0x71, 0x9b, 0x42, 0x3f, 0x6b, + 0xf0, 0x6c, 0xb3, 0xa5, 0x32, 0xf2, 0xfc, 0xdc, 0x44, 0x2f, 0xe1, 0x5b, 0x19, 0xb1, 0xd0, 0xdb, + 0x0a, 0xe2, 0x61, 0x96, 0x2a, 0x3b, 0x5a, 0xa3, 0xd7, 0x87, 0xed, 0xb8, 0x9d, 0xcb, 0x78, 0x9f, + 0x75, 0x2a, 0xb6, 0xe1, 0xe4, 0x7d, 0xce, 0x05, 0x19, 0xb3, 0xf4, 0x5d, 0xc5, 0x79, 0xb2, 0x39, + 0x54, 0x44, 0x3f, 0xc1, 0xa7, 0x22, 0x62, 0x21, 0x25, 0xff, 0x1c, 0xa2, 0x73, 0xa4, 0xc4, 0x5f, + 0x3e, 0x48, 0x7c, 0xa9, 0x5a, 0xdc, 0x17, 0x78, 0x57, 0x71, 0xda, 0x62, 0x4f, 0xbe, 0xfb, 0x19, + 0x3c, 0x39, 0x38, 0x6c, 0x57, 0x40, 0x7b, 0x5f, 0x33, 0xf4, 0x0c, 0xa0, 0x1c, 0x30, 0x0a, 0x0a, + 0xf3, 0x8f, 0x8b, 0x8c, 0x15, 0xa0, 0xef, 0xa0, 0x8b, 0x29, 0xe5, 0x37, 0x9e, 0x4c, 0x30, 0x13, + 0xd8, 0xcf, 0x0c, 0xc6, 0xd4, 0xbb, 0x49, 0x22, 0x49, 0x84, 0xda, 0x4b, 0xd3, 0xe9, 0x28, 0x84, + 0x7b, 0x17, 0x70, 0xa9, 0xea, 0x13, 0x1d, 0x4e, 0x4a, 0xeb, 0x63, 0x4e, 0x23, 0x3f, 0x9d, 0xfc, + 0xaa, 0xc1, 0x53, 0x9f, 0x6f, 0x0e, 0x5e, 0x7e, 0xf2, 0x71, 0xf9, 0x58, 0x2c, 0xb2, 0x67, 0x72, + 0xa1, 0x5d, 0x9d, 0x16, 0xd0, 0x90, 0x53, 0xcc, 0x42, 0x83, 0x27, 0xe1, 0x30, 0x24, 0x4c, 0x3d, + 0xa2, 0xc3, 0xbc, 0x84, 0xe3, 0x48, 0xfc, 0xfb, 0xb9, 0x7d, 0xa5, 0x0e, 0xbf, 0x54, 0x3f, 0x7f, + 0x9b, 0xf3, 0xa7, 0x94, 0x6f, 0x03, 0x63, 0x52, 0x0a, 0x8e, 0x95, 0xe0, 0xc5, 0xe8, 0x8f, 0x12, + 0xb0, 0x52, 0x80, 0x55, 0x09, 0x58, 0x29, 0xc0, 0xea, 0x62, 0xb4, 0x3e, 0x52, 0x5a, 0x5f, 0xfd, + 0x15, 0x00, 0x00, 0xff, 0xff, 0xd9, 0x04, 0x3d, 0xfc, 0x3a, 0x06, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/table.pb.go b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/table.pb.go index 24b715c..6ccb15d 100644 --- a/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/table.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/bigtable/admin/v2/table.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/bigtable/admin/v2/table.proto -// DO NOT EDIT! package admin @@ -8,8 +7,8 @@ import proto "github.com/golang/protobuf/proto" import fmt "fmt" import math "math" import _ "google.golang.org/genproto/googleapis/api/annotations" -import google_protobuf4 "github.com/golang/protobuf/ptypes/duration" -import _ "github.com/golang/protobuf/ptypes/timestamp" +import google_protobuf5 "github.com/golang/protobuf/ptypes/duration" +import google_protobuf1 "github.com/golang/protobuf/ptypes/timestamp" // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -54,6 +53,15 @@ const ( Table_NAME_ONLY Table_View = 1 // Only populates `name` and fields related to the table's schema. Table_SCHEMA_VIEW Table_View = 2 + // This is a private alpha release of Cloud Bigtable replication. This + // feature is not currently available to most Cloud Bigtable customers. This + // feature might be changed in backward-incompatible ways and is not + // recommended for production use. It is not subject to any SLA or + // deprecation policy. + // + // Only populates `name` and fields related to the table's + // replication state. + Table_REPLICATION_VIEW Table_View = 3 // Populates all fields. Table_FULL Table_View = 4 ) @@ -62,12 +70,14 @@ var Table_View_name = map[int32]string{ 0: "VIEW_UNSPECIFIED", 1: "NAME_ONLY", 2: "SCHEMA_VIEW", + 3: "REPLICATION_VIEW", 4: "FULL", } var Table_View_value = map[string]int32{ "VIEW_UNSPECIFIED": 0, "NAME_ONLY": 1, "SCHEMA_VIEW": 2, + "REPLICATION_VIEW": 3, "FULL": 4, } @@ -76,6 +86,84 @@ func (x Table_View) String() string { } func (Table_View) EnumDescriptor() ([]byte, []int) { return fileDescriptor4, []int{0, 1} } +// Table replication states. +type Table_ClusterState_ReplicationState int32 + +const ( + // The replication state of the table is unknown in this cluster. + Table_ClusterState_STATE_NOT_KNOWN Table_ClusterState_ReplicationState = 0 + // The cluster was recently created, and the table must finish copying + // over pre-existing data from other clusters before it can begin + // receiving live replication updates and serving + // [Data API][google.bigtable.v2.Bigtable] requests. + Table_ClusterState_INITIALIZING Table_ClusterState_ReplicationState = 1 + // The table is temporarily unable to serve + // [Data API][google.bigtable.v2.Bigtable] requests from this + // cluster due to planned internal maintenance. + Table_ClusterState_PLANNED_MAINTENANCE Table_ClusterState_ReplicationState = 2 + // The table is temporarily unable to serve + // [Data API][google.bigtable.v2.Bigtable] requests from this + // cluster due to unplanned or emergency maintenance. + Table_ClusterState_UNPLANNED_MAINTENANCE Table_ClusterState_ReplicationState = 3 + // The table can serve + // [Data API][google.bigtable.v2.Bigtable] requests from this + // cluster. Depending on replication delay, reads may not immediately + // reflect the state of the table in other clusters. + Table_ClusterState_READY Table_ClusterState_ReplicationState = 4 +) + +var Table_ClusterState_ReplicationState_name = map[int32]string{ + 0: "STATE_NOT_KNOWN", + 1: "INITIALIZING", + 2: "PLANNED_MAINTENANCE", + 3: "UNPLANNED_MAINTENANCE", + 4: "READY", +} +var Table_ClusterState_ReplicationState_value = map[string]int32{ + "STATE_NOT_KNOWN": 0, + "INITIALIZING": 1, + "PLANNED_MAINTENANCE": 2, + "UNPLANNED_MAINTENANCE": 3, + "READY": 4, +} + +func (x Table_ClusterState_ReplicationState) String() string { + return proto.EnumName(Table_ClusterState_ReplicationState_name, int32(x)) +} +func (Table_ClusterState_ReplicationState) EnumDescriptor() ([]byte, []int) { + return fileDescriptor4, []int{0, 0, 0} +} + +// Possible states of a snapshot. +type Snapshot_State int32 + +const ( + // The state of the snapshot could not be determined. + Snapshot_STATE_NOT_KNOWN Snapshot_State = 0 + // The snapshot has been successfully created and can serve all requests. + Snapshot_READY Snapshot_State = 1 + // The snapshot is currently being created, and may be destroyed if the + // creation process encounters an error. A snapshot may not be restored to a + // table while it is being created. + Snapshot_CREATING Snapshot_State = 2 +) + +var Snapshot_State_name = map[int32]string{ + 0: "STATE_NOT_KNOWN", + 1: "READY", + 2: "CREATING", +} +var Snapshot_State_value = map[string]int32{ + "STATE_NOT_KNOWN": 0, + "READY": 1, + "CREATING": 2, +} + +func (x Snapshot_State) String() string { + return proto.EnumName(Snapshot_State_name, int32(x)) +} +func (Snapshot_State) EnumDescriptor() ([]byte, []int) { return fileDescriptor4, []int{3, 0} } + // A collection of user data indexed by row, column, and timestamp. // Each table is served using the resources of its parent cluster. type Table struct { @@ -84,6 +172,18 @@ type Table struct { // `projects//instances//tables/[_a-zA-Z0-9][-_.a-zA-Z0-9]*`. // Views: `NAME_ONLY`, `SCHEMA_VIEW`, `FULL` Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // This is a private alpha release of Cloud Bigtable replication. This feature + // is not currently available to most Cloud Bigtable customers. This feature + // might be changed in backward-incompatible ways and is not recommended for + // production use. It is not subject to any SLA or deprecation policy. + // + // (`OutputOnly`) + // Map from cluster ID to per-cluster table state. + // If it could not be determined whether or not the table has data in a + // particular cluster (for example, if its zone is unavailable), then + // there will be an entry for the cluster with UNKNOWN `replication_status`. + // Views: `FULL` + ClusterStates map[string]*Table_ClusterState `protobuf:"bytes,2,rep,name=cluster_states,json=clusterStates" json:"cluster_states,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // (`CreationOnly`) // The column families configured for this table, mapped by column family ID. // Views: `SCHEMA_VIEW`, `FULL` @@ -108,6 +208,13 @@ func (m *Table) GetName() string { return "" } +func (m *Table) GetClusterStates() map[string]*Table_ClusterState { + if m != nil { + return m.ClusterStates + } + return nil +} + func (m *Table) GetColumnFamilies() map[string]*ColumnFamily { if m != nil { return m.ColumnFamilies @@ -122,6 +229,30 @@ func (m *Table) GetGranularity() Table_TimestampGranularity { return Table_TIMESTAMP_GRANULARITY_UNSPECIFIED } +// This is a private alpha release of Cloud Bigtable replication. This feature +// is not currently available to most Cloud Bigtable customers. This feature +// might be changed in backward-incompatible ways and is not recommended for +// production use. It is not subject to any SLA or deprecation policy. +// +// The state of a table's data in a particular cluster. +type Table_ClusterState struct { + // (`OutputOnly`) + // The state of replication for the table in this cluster. + ReplicationState Table_ClusterState_ReplicationState `protobuf:"varint,1,opt,name=replication_state,json=replicationState,enum=google.bigtable.admin.v2.Table_ClusterState_ReplicationState" json:"replication_state,omitempty"` +} + +func (m *Table_ClusterState) Reset() { *m = Table_ClusterState{} } +func (m *Table_ClusterState) String() string { return proto.CompactTextString(m) } +func (*Table_ClusterState) ProtoMessage() {} +func (*Table_ClusterState) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{0, 0} } + +func (m *Table_ClusterState) GetReplicationState() Table_ClusterState_ReplicationState { + if m != nil { + return m.ReplicationState + } + return Table_ClusterState_STATE_NOT_KNOWN +} + // A set of columns within a table which share a common configuration. type ColumnFamily struct { // Garbage collection rule specified as a protobuf. @@ -170,7 +301,7 @@ type GcRule_MaxNumVersions struct { MaxNumVersions int32 `protobuf:"varint,1,opt,name=max_num_versions,json=maxNumVersions,oneof"` } type GcRule_MaxAge struct { - MaxAge *google_protobuf4.Duration `protobuf:"bytes,2,opt,name=max_age,json=maxAge,oneof"` + MaxAge *google_protobuf5.Duration `protobuf:"bytes,2,opt,name=max_age,json=maxAge,oneof"` } type GcRule_Intersection_ struct { Intersection *GcRule_Intersection `protobuf:"bytes,3,opt,name=intersection,oneof"` @@ -198,7 +329,7 @@ func (m *GcRule) GetMaxNumVersions() int32 { return 0 } -func (m *GcRule) GetMaxAge() *google_protobuf4.Duration { +func (m *GcRule) GetMaxAge() *google_protobuf5.Duration { if x, ok := m.GetRule().(*GcRule_MaxAge); ok { return x.MaxAge } @@ -272,7 +403,7 @@ func _GcRule_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) if wire != proto.WireBytes { return true, proto.ErrInternalBadWireType } - msg := new(google_protobuf4.Duration) + msg := new(google_protobuf5.Duration) err := b.DecodeMessage(msg) m.Rule = &GcRule_MaxAge{msg} return true, err @@ -362,56 +493,174 @@ func (m *GcRule_Union) GetRules() []*GcRule { return nil } +// This is a private alpha release of Cloud Bigtable snapshots. This feature +// is not currently available to most Cloud Bigtable customers. This feature +// might be changed in backward-incompatible ways and is not recommended for +// production use. It is not subject to any SLA or deprecation policy. +// +// A snapshot of a table at a particular time. A snapshot can be used as a +// checkpoint for data restoration or a data source for a new table. +type Snapshot struct { + // (`OutputOnly`) + // The unique name of the snapshot. + // Values are of the form + // `projects//instances//clusters//snapshots/`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // (`OutputOnly`) + // The source table at the time the snapshot was taken. + SourceTable *Table `protobuf:"bytes,2,opt,name=source_table,json=sourceTable" json:"source_table,omitempty"` + // (`OutputOnly`) + // The size of the data in the source table at the time the snapshot was + // taken. In some cases, this value may be computed asynchronously via a + // background process and a placeholder of 0 will be used in the meantime. + DataSizeBytes int64 `protobuf:"varint,3,opt,name=data_size_bytes,json=dataSizeBytes" json:"data_size_bytes,omitempty"` + // (`OutputOnly`) + // The time when the snapshot is created. + CreateTime *google_protobuf1.Timestamp `protobuf:"bytes,4,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // (`OutputOnly`) + // The time when the snapshot will be deleted. The maximum amount of time a + // snapshot can stay active is 365 days. If 'ttl' is not specified, + // the default maximum of 365 days will be used. + DeleteTime *google_protobuf1.Timestamp `protobuf:"bytes,5,opt,name=delete_time,json=deleteTime" json:"delete_time,omitempty"` + // (`OutputOnly`) + // The current state of the snapshot. + State Snapshot_State `protobuf:"varint,6,opt,name=state,enum=google.bigtable.admin.v2.Snapshot_State" json:"state,omitempty"` + // (`OutputOnly`) + // Description of the snapshot. + Description string `protobuf:"bytes,7,opt,name=description" json:"description,omitempty"` +} + +func (m *Snapshot) Reset() { *m = Snapshot{} } +func (m *Snapshot) String() string { return proto.CompactTextString(m) } +func (*Snapshot) ProtoMessage() {} +func (*Snapshot) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{3} } + +func (m *Snapshot) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Snapshot) GetSourceTable() *Table { + if m != nil { + return m.SourceTable + } + return nil +} + +func (m *Snapshot) GetDataSizeBytes() int64 { + if m != nil { + return m.DataSizeBytes + } + return 0 +} + +func (m *Snapshot) GetCreateTime() *google_protobuf1.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *Snapshot) GetDeleteTime() *google_protobuf1.Timestamp { + if m != nil { + return m.DeleteTime + } + return nil +} + +func (m *Snapshot) GetState() Snapshot_State { + if m != nil { + return m.State + } + return Snapshot_STATE_NOT_KNOWN +} + +func (m *Snapshot) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + func init() { proto.RegisterType((*Table)(nil), "google.bigtable.admin.v2.Table") + proto.RegisterType((*Table_ClusterState)(nil), "google.bigtable.admin.v2.Table.ClusterState") proto.RegisterType((*ColumnFamily)(nil), "google.bigtable.admin.v2.ColumnFamily") proto.RegisterType((*GcRule)(nil), "google.bigtable.admin.v2.GcRule") proto.RegisterType((*GcRule_Intersection)(nil), "google.bigtable.admin.v2.GcRule.Intersection") proto.RegisterType((*GcRule_Union)(nil), "google.bigtable.admin.v2.GcRule.Union") + proto.RegisterType((*Snapshot)(nil), "google.bigtable.admin.v2.Snapshot") proto.RegisterEnum("google.bigtable.admin.v2.Table_TimestampGranularity", Table_TimestampGranularity_name, Table_TimestampGranularity_value) proto.RegisterEnum("google.bigtable.admin.v2.Table_View", Table_View_name, Table_View_value) + proto.RegisterEnum("google.bigtable.admin.v2.Table_ClusterState_ReplicationState", Table_ClusterState_ReplicationState_name, Table_ClusterState_ReplicationState_value) + proto.RegisterEnum("google.bigtable.admin.v2.Snapshot_State", Snapshot_State_name, Snapshot_State_value) } func init() { proto.RegisterFile("google/bigtable/admin/v2/table.proto", fileDescriptor4) } var fileDescriptor4 = []byte{ - // 598 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0x7d, 0x6b, 0xda, 0x5e, - 0x14, 0x36, 0x4d, 0xb4, 0xbf, 0x1e, 0xfb, 0x6b, 0xc3, 0x5d, 0xff, 0x70, 0x52, 0x36, 0x27, 0xdb, - 0x90, 0xc1, 0x12, 0xb0, 0x65, 0xec, 0x7d, 0xd8, 0x36, 0xd6, 0x80, 0x3a, 0x89, 0x2f, 0xa3, 0x63, - 0x10, 0xae, 0xe9, 0xed, 0xe5, 0xd2, 0xdc, 0x1b, 0xc9, 0x8b, 0xab, 0xdf, 0x62, 0xdf, 0x6c, 0x5f, - 0x69, 0xe4, 0x26, 0x32, 0xdb, 0x55, 0x1c, 0xfb, 0xcb, 0x73, 0xcf, 0x79, 0x9e, 0xe7, 0xbc, 0x1a, - 0x78, 0x4a, 0x83, 0x80, 0xfa, 0xc4, 0x9c, 0x32, 0x1a, 0xe3, 0xa9, 0x4f, 0x4c, 0x7c, 0xc9, 0x99, - 0x30, 0xe7, 0x4d, 0x53, 0x3e, 0x8d, 0x59, 0x18, 0xc4, 0x01, 0xaa, 0x64, 0x28, 0x63, 0x89, 0x32, - 0x24, 0xca, 0x98, 0x37, 0xab, 0x87, 0x39, 0x1f, 0xcf, 0x98, 0x89, 0x85, 0x08, 0x62, 0x1c, 0xb3, - 0x40, 0x44, 0x19, 0xaf, 0xfa, 0x28, 0x8f, 0xca, 0xd7, 0x34, 0xb9, 0x32, 0x2f, 0x93, 0x50, 0x02, - 0xf2, 0xf8, 0xe3, 0xbb, 0xf1, 0x98, 0x71, 0x12, 0xc5, 0x98, 0xcf, 0x32, 0x40, 0xfd, 0xa7, 0x0a, - 0xc5, 0x51, 0x9a, 0x11, 0x21, 0xd0, 0x04, 0xe6, 0xa4, 0xa2, 0xd4, 0x94, 0xc6, 0x8e, 0x23, 0x6d, - 0xf4, 0x0d, 0xf6, 0xbd, 0xc0, 0x4f, 0xb8, 0x70, 0xaf, 0x30, 0x67, 0x3e, 0x23, 0x51, 0x45, 0xad, - 0xa9, 0x8d, 0x72, 0xf3, 0xc8, 0x58, 0x57, 0xb0, 0x21, 0xd5, 0x8c, 0x53, 0x49, 0x6b, 0xe7, 0x2c, - 0x4b, 0xc4, 0xe1, 0xc2, 0xd9, 0xf3, 0x6e, 0x39, 0xd1, 0x04, 0xca, 0x34, 0xc4, 0x22, 0xf1, 0x71, - 0xc8, 0xe2, 0x45, 0x45, 0xab, 0x29, 0x8d, 0xbd, 0xe6, 0xf1, 0x26, 0xe5, 0xd1, 0xb2, 0x83, 0xf3, - 0xdf, 0x5c, 0x67, 0x55, 0xa8, 0xca, 0xe0, 0xc1, 0x3d, 0xe9, 0x91, 0x0e, 0xea, 0x35, 0x59, 0xe4, - 0xfd, 0xa5, 0x26, 0x7a, 0x0f, 0xc5, 0x39, 0xf6, 0x13, 0x52, 0xd9, 0xaa, 0x29, 0x8d, 0x72, 0xf3, - 0xf9, 0xfa, 0xd4, 0x2b, 0x7a, 0x0b, 0x27, 0x23, 0xbd, 0xdd, 0x7a, 0xad, 0xd4, 0x6d, 0x38, 0xb8, - 0xaf, 0x1e, 0xf4, 0x0c, 0x9e, 0x8c, 0xec, 0x9e, 0x35, 0x1c, 0xb5, 0x7a, 0x03, 0xf7, 0xdc, 0x69, - 0xf5, 0xc7, 0xdd, 0x96, 0x63, 0x8f, 0x2e, 0xdc, 0x71, 0x7f, 0x38, 0xb0, 0x4e, 0xed, 0xb6, 0x6d, - 0x9d, 0xe9, 0x05, 0x04, 0x50, 0xea, 0xd9, 0xdd, 0xae, 0x3d, 0xd4, 0x95, 0x7a, 0x1b, 0xb4, 0x09, - 0x23, 0xdf, 0xd1, 0x01, 0xe8, 0x13, 0xdb, 0xfa, 0x72, 0x07, 0xf9, 0x3f, 0xec, 0xf4, 0x5b, 0x3d, - 0xcb, 0xfd, 0xdc, 0xef, 0x5e, 0xe8, 0x0a, 0xda, 0x87, 0xf2, 0xf0, 0xb4, 0x63, 0xf5, 0x5a, 0x6e, - 0x8a, 0xd5, 0xb7, 0xd0, 0x7f, 0xa0, 0xb5, 0xc7, 0xdd, 0xae, 0xae, 0xd5, 0x6d, 0xd8, 0x5d, 0xad, - 0x16, 0xbd, 0x81, 0x6d, 0xea, 0xb9, 0x61, 0xe2, 0x67, 0xab, 0x2d, 0x37, 0x6b, 0xeb, 0xdb, 0x3c, - 0xf7, 0x9c, 0xc4, 0x27, 0x4e, 0x89, 0xca, 0xdf, 0xfa, 0x0f, 0x15, 0x4a, 0x99, 0x0b, 0xbd, 0x00, - 0x9d, 0xe3, 0x1b, 0x57, 0x24, 0xdc, 0x9d, 0x93, 0x30, 0x4a, 0x4f, 0x50, 0xca, 0x15, 0x3b, 0x05, - 0x67, 0x8f, 0xe3, 0x9b, 0x7e, 0xc2, 0x27, 0xb9, 0x1f, 0x1d, 0xc3, 0x76, 0x8a, 0xc5, 0x74, 0x39, - 0xd8, 0x87, 0xcb, 0x8c, 0xcb, 0x33, 0x34, 0xce, 0xf2, 0x33, 0xed, 0x14, 0x9c, 0x12, 0xc7, 0x37, - 0x2d, 0x4a, 0xd0, 0x10, 0x76, 0x99, 0x88, 0x49, 0x18, 0x11, 0x2f, 0x8d, 0x54, 0x54, 0x49, 0x7d, - 0xb9, 0xa9, 0x58, 0xc3, 0x5e, 0x21, 0x75, 0x0a, 0xce, 0x2d, 0x11, 0xf4, 0x11, 0x8a, 0x89, 0x48, - 0xd5, 0xb4, 0x4d, 0x1b, 0xce, 0xd5, 0xc6, 0x22, 0x93, 0xc9, 0x68, 0xd5, 0x36, 0xec, 0xae, 0xea, - 0xa3, 0x57, 0x50, 0x4c, 0x27, 0x99, 0xf6, 0xae, 0xfe, 0xd5, 0x28, 0x33, 0x78, 0xf5, 0x13, 0x14, - 0xa5, 0xf2, 0xbf, 0x0a, 0x9c, 0x94, 0x40, 0x4b, 0x8d, 0x93, 0x6b, 0x38, 0xf4, 0x02, 0xbe, 0x96, - 0x75, 0x02, 0xf2, 0x4f, 0x32, 0x48, 0xe7, 0x3c, 0x50, 0xbe, 0x7e, 0xc8, 0x71, 0x34, 0xf0, 0xb1, - 0xa0, 0x46, 0x10, 0x52, 0x93, 0x12, 0x21, 0xb7, 0x60, 0x66, 0x21, 0x3c, 0x63, 0xd1, 0x9f, 0xdf, - 0xa6, 0x77, 0xd2, 0x98, 0x96, 0x24, 0xf2, 0xe8, 0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0x68, 0xe3, - 0x1b, 0xd9, 0xc4, 0x04, 0x00, 0x00, + // 965 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0xff, 0x6e, 0xdb, 0x54, + 0x18, 0xad, 0xe3, 0x38, 0x6d, 0xbf, 0xa4, 0xad, 0xb9, 0x1d, 0x22, 0x8b, 0xa6, 0x2d, 0x44, 0x30, + 0x45, 0x08, 0x1c, 0xc9, 0x1b, 0x08, 0x18, 0x1b, 0x72, 0x52, 0xb7, 0xb5, 0x48, 0xdc, 0xc8, 0x71, + 0x32, 0x75, 0x8a, 0x64, 0xdd, 0x38, 0x77, 0xc6, 0xe0, 0x1f, 0x91, 0x7f, 0x94, 0x66, 0x4f, 0xc1, + 0x0b, 0xf0, 0x37, 0x12, 0x12, 0x2f, 0xc2, 0xf3, 0xf0, 0x00, 0xc8, 0xf7, 0xda, 0x5b, 0xda, 0x26, + 0x84, 0xf1, 0x57, 0xaf, 0xbf, 0x7b, 0xce, 0xf9, 0xfc, 0x9d, 0x7b, 0x7d, 0x1a, 0xf8, 0xc4, 0x09, + 0x43, 0xc7, 0x23, 0x9d, 0x99, 0xeb, 0x24, 0x78, 0xe6, 0x91, 0x0e, 0x9e, 0xfb, 0x6e, 0xd0, 0xb9, + 0x92, 0x3b, 0xf4, 0x51, 0x5a, 0x44, 0x61, 0x12, 0xa2, 0x3a, 0x43, 0x49, 0x05, 0x4a, 0xa2, 0x28, + 0xe9, 0x4a, 0x6e, 0x3c, 0xc8, 0xf9, 0x78, 0xe1, 0x76, 0x70, 0x10, 0x84, 0x09, 0x4e, 0xdc, 0x30, + 0x88, 0x19, 0xaf, 0xf1, 0x30, 0xdf, 0xa5, 0x4f, 0xb3, 0xf4, 0x75, 0x67, 0x9e, 0x46, 0x14, 0x90, + 0xef, 0x3f, 0xba, 0xbd, 0x9f, 0xb8, 0x3e, 0x89, 0x13, 0xec, 0x2f, 0x18, 0xa0, 0xf5, 0xfb, 0x2e, + 0x08, 0x66, 0xd6, 0x11, 0x21, 0x28, 0x07, 0xd8, 0x27, 0x75, 0xae, 0xc9, 0xb5, 0xf7, 0x0d, 0xba, + 0x46, 0x97, 0x70, 0x68, 0x7b, 0x69, 0x9c, 0x90, 0xc8, 0x8a, 0x13, 0x9c, 0x90, 0xb8, 0x5e, 0x6a, + 0xf2, 0xed, 0xaa, 0x2c, 0x4b, 0x9b, 0xde, 0x57, 0xa2, 0x62, 0x52, 0x8f, 0xb1, 0x46, 0x94, 0xa4, + 0x06, 0x49, 0xb4, 0x34, 0x0e, 0xec, 0xd5, 0x1a, 0x9a, 0xc2, 0x91, 0x1d, 0x7a, 0xa9, 0x1f, 0x58, + 0xaf, 0xb1, 0xef, 0x7a, 0x2e, 0x89, 0xeb, 0x3c, 0xd5, 0x7e, 0xb2, 0x55, 0x9b, 0xd2, 0x4e, 0x73, + 0x16, 0x13, 0x3f, 0xb4, 0x6f, 0x14, 0xd1, 0x04, 0xaa, 0x4e, 0x84, 0x83, 0xd4, 0xc3, 0x91, 0x9b, + 0x2c, 0xeb, 0xe5, 0x26, 0xd7, 0x3e, 0x94, 0x9f, 0x6e, 0x53, 0x36, 0x0b, 0x73, 0xce, 0xde, 0x71, + 0x8d, 0x55, 0xa1, 0xc6, 0xdf, 0x1c, 0xd4, 0x56, 0x67, 0x43, 0x3f, 0xc1, 0x07, 0x11, 0x59, 0x78, + 0xae, 0x4d, 0x5d, 0x67, 0x2e, 0x51, 0x0b, 0x0f, 0xe5, 0xe7, 0xef, 0x63, 0x92, 0x64, 0xbc, 0x53, + 0xa1, 0x05, 0x43, 0x8c, 0x6e, 0x55, 0x5a, 0xd7, 0x20, 0xde, 0x46, 0xa1, 0x63, 0x38, 0x1a, 0x99, + 0x8a, 0xa9, 0x5a, 0xfa, 0x85, 0x69, 0xfd, 0xa0, 0x5f, 0xbc, 0xd4, 0xc5, 0x1d, 0x24, 0x42, 0x4d, + 0xd3, 0x35, 0x53, 0x53, 0xfa, 0xda, 0x2b, 0x4d, 0x3f, 0x13, 0x39, 0xf4, 0x11, 0x1c, 0x0f, 0xfb, + 0x8a, 0xae, 0xab, 0x27, 0xd6, 0x40, 0xd1, 0x74, 0x53, 0xd5, 0x15, 0xbd, 0xa7, 0x8a, 0x25, 0x74, + 0x1f, 0x3e, 0x1c, 0xeb, 0xeb, 0xb6, 0x78, 0xb4, 0x0f, 0x82, 0xa1, 0x2a, 0x27, 0x97, 0x62, 0xb9, + 0x11, 0x00, 0xba, 0x7b, 0xa2, 0x48, 0x04, 0xfe, 0x67, 0xb2, 0xcc, 0x2f, 0x4c, 0xb6, 0x44, 0x5d, + 0x10, 0xae, 0xb0, 0x97, 0x92, 0x7a, 0xa9, 0xc9, 0xb5, 0xab, 0xf2, 0xe7, 0xef, 0xe3, 0x80, 0xc1, + 0xa8, 0xdf, 0x96, 0xbe, 0xe6, 0x1a, 0x2e, 0x1c, 0xaf, 0x39, 0xe5, 0x35, 0x0d, 0xbf, 0xbb, 0xd9, + 0xf0, 0xf1, 0xe6, 0x86, 0x2b, 0x7a, 0xcb, 0x95, 0x56, 0x2d, 0x0d, 0xee, 0xad, 0x3b, 0x76, 0xf4, + 0x29, 0x7c, 0x6c, 0x6a, 0x03, 0x75, 0x64, 0x2a, 0x83, 0xa1, 0x75, 0x66, 0x28, 0xfa, 0xb8, 0xaf, + 0x18, 0x9a, 0x79, 0x69, 0x8d, 0xf5, 0xd1, 0x50, 0xed, 0x69, 0xa7, 0x9a, 0x7a, 0x22, 0xee, 0x20, + 0x80, 0xca, 0x40, 0xeb, 0xf7, 0xb5, 0x91, 0xc8, 0xb5, 0xa6, 0x50, 0x9e, 0xb8, 0xe4, 0x17, 0x74, + 0x0f, 0xc4, 0x89, 0xa6, 0xbe, 0xbc, 0x85, 0x3c, 0x80, 0x7d, 0x5d, 0x19, 0xa8, 0xd6, 0x85, 0xde, + 0xbf, 0x14, 0x39, 0x74, 0x04, 0xd5, 0x51, 0xef, 0x5c, 0x1d, 0x28, 0x56, 0x86, 0x15, 0x4b, 0x19, + 0xcb, 0x50, 0x87, 0x7d, 0xad, 0xa7, 0x98, 0xda, 0x85, 0xce, 0xaa, 0x3c, 0xda, 0x83, 0xf2, 0xe9, + 0xb8, 0xdf, 0x17, 0xcb, 0x2d, 0x0d, 0x6a, 0xab, 0x33, 0xa0, 0x6f, 0x60, 0xd7, 0xb1, 0xad, 0x28, + 0xf5, 0xd8, 0x7d, 0xab, 0xca, 0xcd, 0xcd, 0xc3, 0x9f, 0xd9, 0x46, 0xea, 0x11, 0xa3, 0xe2, 0xd0, + 0xbf, 0xad, 0x5f, 0x79, 0xa8, 0xb0, 0x12, 0xfa, 0x0c, 0x44, 0x1f, 0x5f, 0x5b, 0x41, 0xea, 0x5b, + 0x57, 0x24, 0x8a, 0xb3, 0x68, 0xa1, 0x72, 0xc2, 0xf9, 0x8e, 0x71, 0xe8, 0xe3, 0x6b, 0x3d, 0xf5, + 0x27, 0x79, 0x1d, 0x3d, 0x85, 0xdd, 0x0c, 0x8b, 0x9d, 0xc2, 0xee, 0xfb, 0x45, 0xc7, 0x22, 0x5e, + 0xa4, 0x93, 0x3c, 0x7e, 0xce, 0x77, 0x8c, 0x8a, 0x8f, 0xaf, 0x15, 0x87, 0xa0, 0x11, 0xd4, 0xdc, + 0x20, 0x21, 0x51, 0x4c, 0xec, 0x6c, 0xa7, 0xce, 0x53, 0xea, 0x17, 0xdb, 0x5e, 0x56, 0xd2, 0x56, + 0x48, 0xe7, 0x3b, 0xc6, 0x0d, 0x11, 0xf4, 0x02, 0x84, 0x34, 0xc8, 0xd4, 0xca, 0xdb, 0xce, 0x3d, + 0x57, 0x1b, 0x07, 0x4c, 0x86, 0xd1, 0x1a, 0xa7, 0x50, 0x5b, 0xd5, 0x47, 0x5f, 0x81, 0x90, 0x39, + 0x99, 0xcd, 0xce, 0xff, 0x27, 0x2b, 0x19, 0xbc, 0xf1, 0x3d, 0x08, 0x54, 0xf9, 0xff, 0x0a, 0x74, + 0x2b, 0x50, 0xce, 0x16, 0xad, 0xdf, 0x78, 0xd8, 0x1b, 0x05, 0x78, 0x11, 0xff, 0x18, 0x26, 0x6b, + 0xa3, 0xb8, 0x0b, 0xb5, 0x38, 0x4c, 0x23, 0x9b, 0x58, 0x54, 0x2f, 0x3f, 0x81, 0x47, 0x5b, 0xbe, + 0x30, 0xa3, 0xca, 0x48, 0x2c, 0xe2, 0x1f, 0xc3, 0xd1, 0x1c, 0x27, 0xd8, 0x8a, 0xdd, 0x37, 0xc4, + 0x9a, 0x2d, 0x13, 0x9a, 0xb9, 0x5c, 0x9b, 0x37, 0x0e, 0xb2, 0xf2, 0xc8, 0x7d, 0x43, 0xba, 0x59, + 0x11, 0x3d, 0x83, 0xaa, 0x1d, 0x11, 0x9c, 0x10, 0x2b, 0xfb, 0x77, 0x91, 0x7b, 0xdc, 0xb8, 0x73, + 0xd8, 0x6f, 0xbf, 0x1b, 0x03, 0x18, 0x3c, 0x2b, 0x64, 0xe4, 0x39, 0xf1, 0x48, 0x41, 0x16, 0xb6, + 0x93, 0x19, 0x9c, 0x92, 0x5f, 0x80, 0xc0, 0x22, 0xb4, 0x42, 0x23, 0xb4, 0xbd, 0x79, 0xbc, 0xc2, + 0x2c, 0x29, 0x0f, 0x0f, 0x4a, 0x43, 0xcd, 0xac, 0x79, 0x6c, 0x47, 0xee, 0x82, 0xde, 0xb5, 0x5d, + 0x6a, 0xe0, 0x6a, 0xa9, 0xf5, 0x25, 0x08, 0xff, 0x92, 0x9c, 0x6f, 0x33, 0x8f, 0x43, 0x35, 0xd8, + 0xeb, 0x19, 0xaa, 0x62, 0x66, 0x01, 0x5a, 0xea, 0xfe, 0xc9, 0xc1, 0x03, 0x3b, 0xf4, 0x37, 0xbe, + 0x4f, 0x17, 0xa8, 0xc5, 0xc3, 0x6c, 0xbc, 0x21, 0xf7, 0xea, 0x79, 0x8e, 0x73, 0x42, 0x0f, 0x07, + 0x8e, 0x14, 0x46, 0x4e, 0xc7, 0x21, 0x01, 0x1d, 0xbe, 0xc3, 0xb6, 0xf0, 0xc2, 0x8d, 0xef, 0xfe, + 0x28, 0x78, 0x46, 0x17, 0x7f, 0x94, 0x1e, 0x9e, 0x31, 0x7e, 0xcf, 0x0b, 0xd3, 0xb9, 0xd4, 0x2d, + 0xba, 0x29, 0xb4, 0xdb, 0x44, 0xfe, 0xab, 0x00, 0x4c, 0x29, 0x60, 0x5a, 0x00, 0xa6, 0x14, 0x30, + 0x9d, 0xc8, 0xb3, 0x0a, 0xed, 0xf5, 0xe4, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x56, 0x59, 0xa7, + 0xc1, 0x7f, 0x08, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/bigtable/v1/bigtable_data.pb.go b/vendor/google.golang.org/genproto/googleapis/bigtable/v1/bigtable_data.pb.go index 2c530ff..51ece9f 100644 --- a/vendor/google.golang.org/genproto/googleapis/bigtable/v1/bigtable_data.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/bigtable/v1/bigtable_data.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/bigtable/v1/bigtable_data.proto -// DO NOT EDIT! /* Package bigtable is a generated protocol buffer package. diff --git a/vendor/google.golang.org/genproto/googleapis/bigtable/v1/bigtable_service.pb.go b/vendor/google.golang.org/genproto/googleapis/bigtable/v1/bigtable_service.pb.go index dac6f4a..bf22713 100644 --- a/vendor/google.golang.org/genproto/googleapis/bigtable/v1/bigtable_service.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/bigtable/v1/bigtable_service.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/bigtable/v1/bigtable_service.proto -// DO NOT EDIT! package bigtable diff --git a/vendor/google.golang.org/genproto/googleapis/bigtable/v1/bigtable_service_messages.pb.go b/vendor/google.golang.org/genproto/googleapis/bigtable/v1/bigtable_service_messages.pb.go index 1e7fad4..763b83c 100644 --- a/vendor/google.golang.org/genproto/googleapis/bigtable/v1/bigtable_service_messages.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/bigtable/v1/bigtable_service_messages.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/bigtable/v1/bigtable_service_messages.proto -// DO NOT EDIT! package bigtable diff --git a/vendor/google.golang.org/genproto/googleapis/bigtable/v2/bigtable.pb.go b/vendor/google.golang.org/genproto/googleapis/bigtable/v2/bigtable.pb.go index b41f14f..5db579f 100644 --- a/vendor/google.golang.org/genproto/googleapis/bigtable/v2/bigtable.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/bigtable/v2/bigtable.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/bigtable/v2/bigtable.proto -// DO NOT EDIT! /* Package bigtable is a generated protocol buffer package. @@ -66,6 +65,14 @@ type ReadRowsRequest struct { // Values are of the form // `projects//instances//tables/
`. TableName string `protobuf:"bytes,1,opt,name=table_name,json=tableName" json:"table_name,omitempty"` + // This is a private alpha release of Cloud Bigtable replication. This feature + // is not currently available to most Cloud Bigtable customers. This feature + // might be changed in backward-incompatible ways and is not recommended for + // production use. It is not subject to any SLA or deprecation policy. + // + // This value specifies routing for replication. If not specified, the + // "default" application profile will be used. + AppProfileId string `protobuf:"bytes,5,opt,name=app_profile_id,json=appProfileId" json:"app_profile_id,omitempty"` // The row keys and/or ranges to read. If not specified, reads from all rows. Rows *RowSet `protobuf:"bytes,2,opt,name=rows" json:"rows,omitempty"` // The filter to apply to the contents of the specified row(s). If unset, @@ -88,6 +95,13 @@ func (m *ReadRowsRequest) GetTableName() string { return "" } +func (m *ReadRowsRequest) GetAppProfileId() string { + if m != nil { + return m.AppProfileId + } + return "" +} + func (m *ReadRowsRequest) GetRows() *RowSet { if m != nil { return m.Rows @@ -359,6 +373,14 @@ type SampleRowKeysRequest struct { // Values are of the form // `projects//instances//tables/
`. TableName string `protobuf:"bytes,1,opt,name=table_name,json=tableName" json:"table_name,omitempty"` + // This is a private alpha release of Cloud Bigtable replication. This feature + // is not currently available to most Cloud Bigtable customers. This feature + // might be changed in backward-incompatible ways and is not recommended for + // production use. It is not subject to any SLA or deprecation policy. + // + // This value specifies routing for replication. If not specified, the + // "default" application profile will be used. + AppProfileId string `protobuf:"bytes,2,opt,name=app_profile_id,json=appProfileId" json:"app_profile_id,omitempty"` } func (m *SampleRowKeysRequest) Reset() { *m = SampleRowKeysRequest{} } @@ -373,6 +395,13 @@ func (m *SampleRowKeysRequest) GetTableName() string { return "" } +func (m *SampleRowKeysRequest) GetAppProfileId() string { + if m != nil { + return m.AppProfileId + } + return "" +} + // Response message for Bigtable.SampleRowKeys. type SampleRowKeysResponse struct { // Sorted streamed sequence of sample row keys in the table. The table might @@ -415,6 +444,14 @@ type MutateRowRequest struct { // Values are of the form // `projects//instances//tables/
`. TableName string `protobuf:"bytes,1,opt,name=table_name,json=tableName" json:"table_name,omitempty"` + // This is a private alpha release of Cloud Bigtable replication. This feature + // is not currently available to most Cloud Bigtable customers. This feature + // might be changed in backward-incompatible ways and is not recommended for + // production use. It is not subject to any SLA or deprecation policy. + // + // This value specifies routing for replication. If not specified, the + // "default" application profile will be used. + AppProfileId string `protobuf:"bytes,4,opt,name=app_profile_id,json=appProfileId" json:"app_profile_id,omitempty"` // The key of the row to which the mutation should be applied. RowKey []byte `protobuf:"bytes,2,opt,name=row_key,json=rowKey,proto3" json:"row_key,omitempty"` // Changes to be atomically applied to the specified row. Entries are applied @@ -435,6 +472,13 @@ func (m *MutateRowRequest) GetTableName() string { return "" } +func (m *MutateRowRequest) GetAppProfileId() string { + if m != nil { + return m.AppProfileId + } + return "" +} + func (m *MutateRowRequest) GetRowKey() []byte { if m != nil { return m.RowKey @@ -462,6 +506,14 @@ func (*MutateRowResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, type MutateRowsRequest struct { // The unique name of the table to which the mutations should be applied. TableName string `protobuf:"bytes,1,opt,name=table_name,json=tableName" json:"table_name,omitempty"` + // This is a private alpha release of Cloud Bigtable replication. This feature + // is not currently available to most Cloud Bigtable customers. This feature + // might be changed in backward-incompatible ways and is not recommended for + // production use. It is not subject to any SLA or deprecation policy. + // + // This value specifies routing for replication. If not specified, the + // "default" application profile will be used. + AppProfileId string `protobuf:"bytes,3,opt,name=app_profile_id,json=appProfileId" json:"app_profile_id,omitempty"` // The row keys and corresponding mutations to be applied in bulk. // Each entry is applied as an atomic mutation, but the entries may be // applied in arbitrary order (even between entries for the same row). @@ -482,6 +534,13 @@ func (m *MutateRowsRequest) GetTableName() string { return "" } +func (m *MutateRowsRequest) GetAppProfileId() string { + if m != nil { + return m.AppProfileId + } + return "" +} + func (m *MutateRowsRequest) GetEntries() []*MutateRowsRequest_Entry { if m != nil { return m.Entries @@ -573,6 +632,14 @@ type CheckAndMutateRowRequest struct { // Values are of the form // `projects//instances//tables/
`. TableName string `protobuf:"bytes,1,opt,name=table_name,json=tableName" json:"table_name,omitempty"` + // This is a private alpha release of Cloud Bigtable replication. This feature + // is not currently available to most Cloud Bigtable customers. This feature + // might be changed in backward-incompatible ways and is not recommended for + // production use. It is not subject to any SLA or deprecation policy. + // + // This value specifies routing for replication. If not specified, the + // "default" application profile will be used. + AppProfileId string `protobuf:"bytes,7,opt,name=app_profile_id,json=appProfileId" json:"app_profile_id,omitempty"` // The key of the row to which the conditional mutation should be applied. RowKey []byte `protobuf:"bytes,2,opt,name=row_key,json=rowKey,proto3" json:"row_key,omitempty"` // The filter to be applied to the contents of the specified row. Depending @@ -606,6 +673,13 @@ func (m *CheckAndMutateRowRequest) GetTableName() string { return "" } +func (m *CheckAndMutateRowRequest) GetAppProfileId() string { + if m != nil { + return m.AppProfileId + } + return "" +} + func (m *CheckAndMutateRowRequest) GetRowKey() []byte { if m != nil { return m.RowKey @@ -660,6 +734,14 @@ type ReadModifyWriteRowRequest struct { // Values are of the form // `projects//instances//tables/
`. TableName string `protobuf:"bytes,1,opt,name=table_name,json=tableName" json:"table_name,omitempty"` + // This is a private alpha release of Cloud Bigtable replication. This feature + // is not currently available to most Cloud Bigtable customers. This feature + // might be changed in backward-incompatible ways and is not recommended for + // production use. It is not subject to any SLA or deprecation policy. + // + // This value specifies routing for replication. If not specified, the + // "default" application profile will be used. + AppProfileId string `protobuf:"bytes,4,opt,name=app_profile_id,json=appProfileId" json:"app_profile_id,omitempty"` // The key of the row to which the read/modify/write rules should be applied. RowKey []byte `protobuf:"bytes,2,opt,name=row_key,json=rowKey,proto3" json:"row_key,omitempty"` // Rules specifying how the specified row's contents are to be transformed @@ -680,6 +762,13 @@ func (m *ReadModifyWriteRowRequest) GetTableName() string { return "" } +func (m *ReadModifyWriteRowRequest) GetAppProfileId() string { + if m != nil { + return m.AppProfileId + } + return "" +} + func (m *ReadModifyWriteRowRequest) GetRowKey() []byte { if m != nil { return m.RowKey @@ -741,7 +830,7 @@ const _ = grpc.SupportPackageIsVersion4 // Client API for Bigtable service type BigtableClient interface { - // Streams back the contents of all requested rows, optionally + // Streams back the contents of all requested rows in key order, optionally // applying the same Reader filter to each. Depending on their size, // rows and cells may be broken up across multiple responses, but // atomicity of each row will still be preserved. See the @@ -761,11 +850,11 @@ type BigtableClient interface { MutateRows(ctx context.Context, in *MutateRowsRequest, opts ...grpc.CallOption) (Bigtable_MutateRowsClient, error) // Mutates a row atomically based on the output of a predicate Reader filter. CheckAndMutateRow(ctx context.Context, in *CheckAndMutateRowRequest, opts ...grpc.CallOption) (*CheckAndMutateRowResponse, error) - // Modifies a row atomically. The method reads the latest existing timestamp - // and value from the specified columns and writes a new entry based on - // pre-defined read/modify/write rules. The new value for the timestamp is the - // greater of the existing timestamp or the current server time. The method - // returns the new contents of all modified cells. + // Modifies a row atomically on the server. The method reads the latest + // existing timestamp and value from the specified columns and writes a new + // entry based on pre-defined read/modify/write rules. The new value for the + // timestamp is the greater of the existing timestamp or the current server + // time. The method returns the new contents of all modified cells. ReadModifyWriteRow(ctx context.Context, in *ReadModifyWriteRowRequest, opts ...grpc.CallOption) (*ReadModifyWriteRowResponse, error) } @@ -903,7 +992,7 @@ func (c *bigtableClient) ReadModifyWriteRow(ctx context.Context, in *ReadModifyW // Server API for Bigtable service type BigtableServer interface { - // Streams back the contents of all requested rows, optionally + // Streams back the contents of all requested rows in key order, optionally // applying the same Reader filter to each. Depending on their size, // rows and cells may be broken up across multiple responses, but // atomicity of each row will still be preserved. See the @@ -923,11 +1012,11 @@ type BigtableServer interface { MutateRows(*MutateRowsRequest, Bigtable_MutateRowsServer) error // Mutates a row atomically based on the output of a predicate Reader filter. CheckAndMutateRow(context.Context, *CheckAndMutateRowRequest) (*CheckAndMutateRowResponse, error) - // Modifies a row atomically. The method reads the latest existing timestamp - // and value from the specified columns and writes a new entry based on - // pre-defined read/modify/write rules. The new value for the timestamp is the - // greater of the existing timestamp or the current server time. The method - // returns the new contents of all modified cells. + // Modifies a row atomically on the server. The method reads the latest + // existing timestamp and value from the specified columns and writes a new + // entry based on pre-defined read/modify/write rules. The new value for the + // timestamp is the greater of the existing timestamp or the current server + // time. The method returns the new contents of all modified cells. ReadModifyWriteRow(context.Context, *ReadModifyWriteRowRequest) (*ReadModifyWriteRowResponse, error) } @@ -1092,76 +1181,81 @@ var _Bigtable_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("google/bigtable/v2/bigtable.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 1135 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0x4f, 0x6f, 0x1b, 0x45, - 0x14, 0x67, 0xec, 0xda, 0xf1, 0xbe, 0x24, 0x4d, 0x32, 0x84, 0xc6, 0x35, 0x09, 0xb8, 0x4b, 0x0b, - 0x8e, 0x4b, 0xd7, 0x55, 0x50, 0x0f, 0x75, 0x95, 0x02, 0x0e, 0x49, 0x83, 0xc0, 0x55, 0x35, 0x96, - 0x40, 0x42, 0x48, 0xd6, 0x78, 0x3d, 0x76, 0x96, 0xec, 0xbf, 0xee, 0x8c, 0x63, 0x5c, 0xc4, 0x85, - 0x03, 0x1f, 0x00, 0xce, 0x88, 0x13, 0x82, 0x0b, 0x1c, 0xb9, 0x72, 0xe0, 0x23, 0x70, 0xe0, 0x0b, - 0xf4, 0x13, 0xf0, 0x09, 0xd0, 0xcc, 0xce, 0xda, 0x4e, 0x62, 0xb7, 0x9b, 0xaa, 0xb7, 0x9d, 0xf7, - 0xde, 0xef, 0xcd, 0xef, 0xfd, 0x1d, 0x1b, 0xae, 0xf5, 0x83, 0xa0, 0xef, 0xb2, 0x5a, 0xc7, 0xe9, - 0x0b, 0xda, 0x71, 0x59, 0xed, 0x64, 0x67, 0xfc, 0x6d, 0x85, 0x51, 0x20, 0x02, 0x8c, 0x63, 0x13, - 0x6b, 0x2c, 0x3e, 0xd9, 0x29, 0x6d, 0x6a, 0x18, 0x0d, 0x9d, 0x1a, 0xf5, 0xfd, 0x40, 0x50, 0xe1, - 0x04, 0x3e, 0x8f, 0x11, 0xa5, 0xad, 0x19, 0x4e, 0xbb, 0x54, 0x50, 0xad, 0x7e, 0x43, 0xab, 0xd5, - 0xa9, 0x33, 0xe8, 0xd5, 0x86, 0x11, 0x0d, 0x43, 0x16, 0x25, 0xf0, 0x0d, 0xad, 0x8f, 0x42, 0xbb, - 0xc6, 0x05, 0x15, 0x03, 0xad, 0x30, 0xff, 0x44, 0xb0, 0x42, 0x18, 0xed, 0x92, 0x60, 0xc8, 0x09, - 0x7b, 0x3c, 0x60, 0x5c, 0xe0, 0x2d, 0x00, 0x75, 0x47, 0xdb, 0xa7, 0x1e, 0x2b, 0xa2, 0x32, 0xaa, - 0x18, 0xc4, 0x50, 0x92, 0x87, 0xd4, 0x63, 0xd8, 0x82, 0x4b, 0x51, 0x30, 0xe4, 0xc5, 0x4c, 0x19, - 0x55, 0x16, 0x77, 0x4a, 0xd6, 0xf9, 0x58, 0x2c, 0x12, 0x0c, 0x5b, 0x4c, 0x10, 0x65, 0x87, 0xef, - 0x40, 0xbe, 0xe7, 0xb8, 0x82, 0x45, 0xc5, 0xac, 0x42, 0x6c, 0xcd, 0x41, 0x1c, 0x28, 0x23, 0xa2, - 0x8d, 0x25, 0x0b, 0x09, 0x6f, 0xbb, 0x8e, 0xe7, 0x88, 0xe2, 0xa5, 0x32, 0xaa, 0x64, 0x89, 0x21, - 0x25, 0x9f, 0x4a, 0x81, 0xf9, 0x5f, 0x16, 0x56, 0x27, 0xc4, 0x79, 0x18, 0xf8, 0x9c, 0xe1, 0x03, - 0xc8, 0xdb, 0x47, 0x03, 0xff, 0x98, 0x17, 0x51, 0x39, 0x5b, 0x59, 0xdc, 0xb1, 0x66, 0x5e, 0x75, - 0x06, 0x65, 0xed, 0x31, 0xd7, 0xdd, 0x93, 0x30, 0xa2, 0xd1, 0xb8, 0x06, 0xeb, 0x2e, 0xe5, 0xa2, - 0xcd, 0x6d, 0xea, 0xfb, 0xac, 0xdb, 0x8e, 0x82, 0x61, 0xfb, 0x98, 0x8d, 0x54, 0xc8, 0x4b, 0x64, - 0x4d, 0xea, 0x5a, 0xb1, 0x8a, 0x04, 0xc3, 0x4f, 0xd8, 0xa8, 0xf4, 0x34, 0x03, 0xc6, 0xd8, 0x0d, - 0xde, 0x80, 0x85, 0x04, 0x81, 0x14, 0x22, 0x1f, 0x29, 0x33, 0xbc, 0x0b, 0x8b, 0x3d, 0xea, 0x39, - 0xee, 0x28, 0x4e, 0x6d, 0x9c, 0xc1, 0xcd, 0x84, 0x64, 0x52, 0x3c, 0xab, 0x25, 0x22, 0xc7, 0xef, - 0x7f, 0x46, 0xdd, 0x01, 0x23, 0x10, 0x03, 0x54, 0xe6, 0xef, 0x82, 0xf1, 0x78, 0x40, 0x5d, 0xa7, - 0xe7, 0x8c, 0x93, 0xf9, 0xfa, 0x39, 0x70, 0x63, 0x24, 0x18, 0x8f, 0xb1, 0x13, 0x6b, 0xbc, 0x0d, - 0xab, 0xc2, 0xf1, 0x18, 0x17, 0xd4, 0x0b, 0xdb, 0x9e, 0x63, 0x47, 0x01, 0xd7, 0x39, 0x5d, 0x19, - 0xcb, 0x9b, 0x4a, 0x8c, 0xaf, 0x40, 0xde, 0xa5, 0x1d, 0xe6, 0xf2, 0x62, 0xae, 0x9c, 0xad, 0x18, - 0x44, 0x9f, 0xf0, 0x3a, 0xe4, 0x4e, 0xa4, 0xdb, 0x62, 0x5e, 0xc5, 0x14, 0x1f, 0x64, 0x99, 0xd4, - 0x47, 0x9b, 0x3b, 0x4f, 0x58, 0x71, 0xa1, 0x8c, 0x2a, 0x39, 0x62, 0x28, 0x49, 0xcb, 0x79, 0x22, - 0xd5, 0x46, 0xc4, 0x38, 0x13, 0x32, 0x85, 0xc5, 0x42, 0x19, 0x55, 0x0a, 0x87, 0xaf, 0x90, 0x82, - 0x12, 0x91, 0x60, 0x88, 0xdf, 0x04, 0xb0, 0x03, 0xcf, 0x73, 0x62, 0xbd, 0xa1, 0xf5, 0x46, 0x2c, - 0x23, 0xc1, 0xb0, 0xb1, 0xa4, 0xba, 0xa0, 0x1d, 0xf7, 0xac, 0x79, 0x07, 0xd6, 0x5b, 0xd4, 0x0b, - 0x5d, 0x16, 0xa7, 0x3d, 0x65, 0xc7, 0x9a, 0x2d, 0x78, 0xed, 0x0c, 0x4c, 0xf7, 0xcb, 0xdc, 0x42, - 0x5d, 0x83, 0xa5, 0xa0, 0xd7, 0x93, 0xbc, 0x3b, 0x32, 0x9d, 0xaa, 0x52, 0x59, 0xb2, 0x18, 0xcb, - 0x54, 0x86, 0xcd, 0xef, 0x11, 0xac, 0x36, 0x07, 0x82, 0x0a, 0xe9, 0x35, 0xe5, 0xe8, 0x4c, 0xdd, - 0x97, 0x39, 0x75, 0x5f, 0x1d, 0x0c, 0x6f, 0xa0, 0x27, 0xbe, 0x98, 0x55, 0xbd, 0xbb, 0x39, 0xab, - 0x77, 0x9b, 0xda, 0x88, 0x4c, 0xcc, 0xcd, 0x57, 0x61, 0x6d, 0x8a, 0x47, 0x1c, 0x99, 0xf9, 0x2f, - 0x9a, 0x92, 0xa6, 0x9d, 0xec, 0x7d, 0x58, 0x60, 0xbe, 0x88, 0x1c, 0x15, 0xb0, 0xe4, 0x70, 0x73, - 0x2e, 0x87, 0x69, 0xb7, 0xd6, 0xbe, 0x2f, 0xa2, 0x11, 0x49, 0xb0, 0xa5, 0x2f, 0x21, 0xa7, 0x24, - 0xf3, 0xd3, 0x7b, 0x2a, 0xdc, 0xcc, 0xc5, 0xc2, 0xfd, 0x15, 0x01, 0x9e, 0xa6, 0x30, 0x1e, 0xfd, - 0x31, 0xf7, 0x78, 0xf6, 0xdf, 0x7d, 0x1e, 0x77, 0x3d, 0xfd, 0x67, 0xc8, 0x7f, 0x9c, 0x90, 0x5f, - 0x87, 0x9c, 0xe3, 0x77, 0xd9, 0xd7, 0x8a, 0x7a, 0x96, 0xc4, 0x07, 0x5c, 0x85, 0x7c, 0xdc, 0x8b, - 0x7a, 0x78, 0x71, 0x72, 0x4b, 0x14, 0xda, 0x56, 0x4b, 0x69, 0x88, 0xb6, 0x30, 0x7f, 0xcb, 0x40, - 0x71, 0xef, 0x88, 0xd9, 0xc7, 0x1f, 0xfa, 0xdd, 0x97, 0xd6, 0x29, 0x87, 0xb0, 0x1a, 0x46, 0xac, - 0xeb, 0xd8, 0x54, 0xb0, 0xb6, 0xde, 0xab, 0xf9, 0x34, 0x7b, 0x75, 0x65, 0x0c, 0x8b, 0x05, 0x78, - 0x0f, 0x2e, 0x8b, 0x68, 0xc0, 0xda, 0x93, 0x4a, 0x5c, 0x4a, 0x51, 0x89, 0x65, 0x89, 0x49, 0x4e, - 0x1c, 0xef, 0xc3, 0x4a, 0x8f, 0xba, 0x7c, 0xda, 0x4b, 0x2e, 0x85, 0x97, 0xcb, 0x0a, 0x34, 0x76, - 0x63, 0x1e, 0xc2, 0xd5, 0x19, 0x99, 0xd2, 0xa5, 0xbd, 0x09, 0x6b, 0x93, 0x90, 0x3d, 0x2a, 0xec, - 0x23, 0xd6, 0x55, 0x19, 0x2b, 0x90, 0x49, 0x2e, 0x9a, 0xb1, 0xdc, 0xfc, 0x01, 0xc1, 0x55, 0xb9, - 0xe1, 0x9b, 0x41, 0xd7, 0xe9, 0x8d, 0x3e, 0x8f, 0x9c, 0x97, 0x92, 0xf5, 0x5d, 0xc8, 0x45, 0x03, - 0x97, 0x25, 0xb3, 0xf9, 0xce, 0xbc, 0x77, 0x65, 0xfa, 0xd6, 0x81, 0xcb, 0x48, 0x8c, 0x32, 0x1f, - 0x40, 0x69, 0x16, 0x27, 0x1d, 0xdf, 0x36, 0x64, 0xe5, 0xf6, 0x43, 0xaa, 0x8a, 0x1b, 0x73, 0xaa, - 0x48, 0xa4, 0xcd, 0xce, 0xef, 0x05, 0x28, 0x34, 0xb4, 0x02, 0xff, 0x84, 0xa0, 0x90, 0x3c, 0x66, - 0xf8, 0xad, 0x67, 0x3f, 0x75, 0x2a, 0xfc, 0xd2, 0xf5, 0x34, 0xef, 0xa1, 0xf9, 0xd1, 0x77, 0xff, - 0x3c, 0xfd, 0x31, 0x73, 0xdf, 0xbc, 0x2b, 0x7f, 0x64, 0x7c, 0x33, 0xc9, 0xd7, 0x6e, 0x18, 0x05, - 0x5f, 0x31, 0x5b, 0xf0, 0x5a, 0xb5, 0xe6, 0xf8, 0x5c, 0x50, 0xdf, 0x66, 0xf2, 0x5b, 0x59, 0xf0, - 0x5a, 0xf5, 0xdb, 0x7a, 0xa4, 0x5d, 0xd5, 0x51, 0xf5, 0x36, 0xc2, 0x7f, 0x20, 0x58, 0x3e, 0xb5, - 0x77, 0x71, 0x65, 0xd6, 0xfd, 0xb3, 0x36, 0x7a, 0x69, 0x3b, 0x85, 0xa5, 0xa6, 0x7b, 0xa0, 0xe8, - 0x7e, 0x80, 0xef, 0x5f, 0x98, 0x2e, 0x9f, 0xf6, 0x77, 0x1b, 0xe1, 0x9f, 0x11, 0x18, 0xe3, 0xf6, - 0xc3, 0xd7, 0x9f, 0xb9, 0x40, 0x12, 0xa2, 0x37, 0x9e, 0x63, 0xa5, 0x49, 0xee, 0x2b, 0x92, 0xef, - 0x9b, 0xf5, 0x0b, 0x93, 0xf4, 0x12, 0x5f, 0x75, 0x54, 0xc5, 0xbf, 0x20, 0x80, 0xc9, 0x0e, 0xc3, - 0x37, 0x52, 0xed, 0xe7, 0xd2, 0xdb, 0xe9, 0x56, 0x61, 0x92, 0x49, 0xf3, 0xde, 0x8b, 0x93, 0xd4, - 0xa5, 0xff, 0x0b, 0xc1, 0xda, 0xb9, 0x81, 0xc6, 0x33, 0x57, 0xf2, 0xbc, 0x0d, 0x59, 0xba, 0x95, - 0xd2, 0x5a, 0x93, 0x6f, 0x2a, 0xf2, 0x0f, 0xcc, 0xc6, 0x85, 0xc9, 0xdb, 0x67, 0x7d, 0xca, 0x4c, - 0xff, 0x8d, 0x00, 0x9f, 0x9f, 0x59, 0x7c, 0x2b, 0xcd, 0xe4, 0x4f, 0x62, 0xb0, 0xd2, 0x9a, 0xeb, - 0x20, 0x1e, 0xaa, 0x20, 0x0e, 0xcd, 0xbd, 0x17, 0x1a, 0xbd, 0xd3, 0x4e, 0xeb, 0xa8, 0xda, 0x60, - 0x70, 0xc5, 0x0e, 0xbc, 0x19, 0x24, 0x1a, 0xcb, 0xc9, 0x1a, 0x79, 0x24, 0x7f, 0x38, 0x3e, 0x42, - 0x5f, 0xd4, 0xb5, 0x51, 0x3f, 0x70, 0xa9, 0xdf, 0xb7, 0x82, 0xa8, 0x5f, 0xeb, 0x33, 0x5f, 0xfd, - 0xac, 0xac, 0xc5, 0x2a, 0x1a, 0x3a, 0x7c, 0xfa, 0x0f, 0xc8, 0xbd, 0xe4, 0xbb, 0x93, 0x57, 0x66, - 0xef, 0xfd, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x38, 0x8d, 0xf4, 0x91, 0xfb, 0x0c, 0x00, 0x00, + // 1210 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0x41, 0x6f, 0x1b, 0x45, + 0x14, 0x66, 0xec, 0xd8, 0xf1, 0xbe, 0xa4, 0x4d, 0x32, 0x84, 0x76, 0x6b, 0x5a, 0x70, 0x97, 0x16, + 0xdc, 0x94, 0xae, 0x2b, 0x23, 0x0e, 0x75, 0xd5, 0x02, 0x09, 0x69, 0x53, 0x41, 0xaa, 0x6a, 0x2c, + 0x15, 0x09, 0x22, 0xad, 0xc6, 0xeb, 0xb1, 0x3b, 0x74, 0x77, 0x67, 0xbb, 0x3b, 0x5b, 0xe3, 0x22, + 0x2e, 0xfc, 0x05, 0x8e, 0x08, 0x71, 0x42, 0x48, 0x08, 0x38, 0x73, 0xe3, 0xc0, 0x8d, 0x03, 0x17, + 0xae, 0x1c, 0xfb, 0x0b, 0xb8, 0x23, 0xa1, 0x9d, 0x9d, 0xb5, 0x9d, 0xc4, 0x6e, 0x9d, 0x20, 0x71, + 0xdb, 0x7d, 0xef, 0x7d, 0x6f, 0xbf, 0xf7, 0xbd, 0x37, 0x6f, 0x6c, 0x38, 0xdf, 0x17, 0xa2, 0xef, + 0xb1, 0x46, 0x87, 0xf7, 0x25, 0xed, 0x78, 0xac, 0xf1, 0xb8, 0x39, 0x7a, 0xb6, 0xc3, 0x48, 0x48, + 0x81, 0x71, 0x16, 0x62, 0x8f, 0xcc, 0x8f, 0x9b, 0xd5, 0xb3, 0x1a, 0x46, 0x43, 0xde, 0xa0, 0x41, + 0x20, 0x24, 0x95, 0x5c, 0x04, 0x71, 0x86, 0xa8, 0x9e, 0x9b, 0x92, 0xb4, 0x4b, 0x25, 0xd5, 0xee, + 0x57, 0xb4, 0x5b, 0xbd, 0x75, 0x92, 0x5e, 0x63, 0x10, 0xd1, 0x30, 0x64, 0x51, 0x0e, 0x3f, 0xad, + 0xfd, 0x51, 0xe8, 0x36, 0x62, 0x49, 0x65, 0xa2, 0x1d, 0xd6, 0x5f, 0x08, 0x56, 0x08, 0xa3, 0x5d, + 0x22, 0x06, 0x31, 0x61, 0x8f, 0x12, 0x16, 0x4b, 0x7c, 0x0e, 0x40, 0x7d, 0xc3, 0x09, 0xa8, 0xcf, + 0x4c, 0x54, 0x43, 0x75, 0x83, 0x18, 0xca, 0x72, 0x97, 0xfa, 0x0c, 0x5f, 0x80, 0x93, 0x34, 0x0c, + 0x9d, 0x30, 0x12, 0x3d, 0xee, 0x31, 0x87, 0x77, 0xcd, 0x92, 0x0a, 0x59, 0xa6, 0x61, 0x78, 0x2f, + 0x33, 0xde, 0xe9, 0x62, 0x1b, 0x16, 0x22, 0x31, 0x88, 0xcd, 0x42, 0x0d, 0xd5, 0x97, 0x9a, 0x55, + 0xfb, 0x70, 0xc5, 0x36, 0x11, 0x83, 0x36, 0x93, 0x44, 0xc5, 0xe1, 0xb7, 0xa1, 0xdc, 0xe3, 0x9e, + 0x64, 0x91, 0x59, 0x54, 0x88, 0x73, 0x33, 0x10, 0xb7, 0x54, 0x10, 0xd1, 0xc1, 0x29, 0xd7, 0x14, + 0xee, 0x78, 0xdc, 0xe7, 0xd2, 0x5c, 0xa8, 0xa1, 0x7a, 0x91, 0x18, 0xa9, 0xe5, 0xc3, 0xd4, 0x60, + 0xfd, 0x5d, 0x84, 0xd5, 0x71, 0x79, 0x71, 0x28, 0x82, 0x98, 0xe1, 0x5b, 0x50, 0x76, 0x1f, 0x24, + 0xc1, 0xc3, 0xd8, 0x44, 0xb5, 0x62, 0x7d, 0xa9, 0x69, 0x4f, 0xfd, 0xd4, 0x01, 0x94, 0xbd, 0xc5, + 0x3c, 0x6f, 0x2b, 0x85, 0x11, 0x8d, 0xc6, 0x0d, 0x58, 0xf7, 0x68, 0x2c, 0x9d, 0xd8, 0xa5, 0x41, + 0xc0, 0xba, 0x4e, 0x24, 0x06, 0xce, 0x43, 0x36, 0x54, 0x25, 0x2f, 0x93, 0xb5, 0xd4, 0xd7, 0xce, + 0x5c, 0x44, 0x0c, 0x3e, 0x60, 0xc3, 0xea, 0xd3, 0x02, 0x18, 0xa3, 0x34, 0xf8, 0x34, 0x2c, 0xe6, + 0x08, 0xa4, 0x10, 0xe5, 0x48, 0x85, 0xe1, 0x1b, 0xb0, 0xd4, 0xa3, 0x3e, 0xf7, 0x86, 0x59, 0x03, + 0x32, 0x05, 0xcf, 0xe6, 0x24, 0xf3, 0x16, 0xdb, 0x6d, 0x19, 0xf1, 0xa0, 0x7f, 0x9f, 0x7a, 0x09, + 0x23, 0x90, 0x01, 0x54, 0x7f, 0xae, 0x81, 0xf1, 0x28, 0xa1, 0x1e, 0xef, 0xf1, 0x91, 0x98, 0x2f, + 0x1f, 0x02, 0x6f, 0x0e, 0x25, 0x8b, 0x33, 0xec, 0x38, 0x1a, 0x5f, 0x82, 0x55, 0xc9, 0x7d, 0x16, + 0x4b, 0xea, 0x87, 0x8e, 0xcf, 0xdd, 0x48, 0xc4, 0x5a, 0xd3, 0x95, 0x91, 0x7d, 0x57, 0x99, 0xf1, + 0x29, 0x28, 0x7b, 0xb4, 0xc3, 0xbc, 0xd8, 0x2c, 0xd5, 0x8a, 0x75, 0x83, 0xe8, 0x37, 0xbc, 0x0e, + 0xa5, 0xc7, 0x69, 0x5a, 0xb3, 0xac, 0x6a, 0xca, 0x5e, 0xd2, 0x36, 0xa9, 0x07, 0x27, 0xe6, 0x4f, + 0x98, 0xb9, 0x58, 0x43, 0xf5, 0x12, 0x31, 0x94, 0xa5, 0xcd, 0x9f, 0xa4, 0x6e, 0x23, 0x62, 0x31, + 0x93, 0xa9, 0x84, 0x66, 0xa5, 0x86, 0xea, 0x95, 0x9d, 0x17, 0x48, 0x45, 0x99, 0x88, 0x18, 0xe0, + 0x57, 0x01, 0x5c, 0xe1, 0xfb, 0x3c, 0xf3, 0x1b, 0xda, 0x6f, 0x64, 0x36, 0x22, 0x06, 0x9b, 0xcb, + 0x6a, 0x0a, 0x9c, 0x6c, 0xb2, 0xad, 0x4f, 0x60, 0xbd, 0x4d, 0xfd, 0xd0, 0x63, 0x99, 0xec, 0xc7, + 0x9f, 0xeb, 0xc2, 0xe1, 0xb9, 0xb6, 0xda, 0xf0, 0xd2, 0x81, 0xe4, 0x7a, 0xaa, 0x66, 0xb6, 0xf3, + 0x3c, 0x2c, 0x8b, 0x5e, 0x2f, 0xad, 0xae, 0x93, 0x8a, 0xae, 0xb2, 0x16, 0xc9, 0x52, 0x66, 0x53, + 0x7d, 0xb0, 0x7e, 0x44, 0xb0, 0xba, 0x9b, 0x48, 0x2a, 0xd3, 0xac, 0xc7, 0xa6, 0xbb, 0x30, 0xe5, + 0x18, 0x4e, 0xb0, 0x2a, 0xec, 0x63, 0xd5, 0x02, 0xc3, 0x4f, 0xf4, 0x8e, 0x31, 0x8b, 0xea, 0x1c, + 0x9c, 0x9d, 0x76, 0x0e, 0x76, 0x75, 0x10, 0x19, 0x87, 0x5b, 0x2f, 0xc2, 0xda, 0x04, 0xdb, 0xac, + 0x7e, 0xeb, 0x1f, 0x34, 0x61, 0x3d, 0xbe, 0xe6, 0xc5, 0x29, 0x45, 0x6c, 0xc3, 0x22, 0x0b, 0x64, + 0xc4, 0x95, 0x78, 0x29, 0xd3, 0xcb, 0x33, 0x99, 0x4e, 0x7e, 0xdc, 0xde, 0x0e, 0x64, 0x34, 0x24, + 0x39, 0xb6, 0xba, 0x07, 0x25, 0x65, 0x99, 0xdd, 0xaa, 0x7d, 0xa2, 0x14, 0x8e, 0x26, 0xca, 0xf7, + 0x08, 0xf0, 0x24, 0x85, 0xd1, 0xb2, 0x19, 0x71, 0xcf, 0xb6, 0xcd, 0x9b, 0xcf, 0xe3, 0xae, 0xf7, + 0xcd, 0x01, 0xf2, 0x77, 0x72, 0xf2, 0xeb, 0x50, 0xe2, 0x41, 0x97, 0x7d, 0xa6, 0xa8, 0x17, 0x49, + 0xf6, 0x82, 0x37, 0xa0, 0x9c, 0x4d, 0xbf, 0x5e, 0x17, 0x38, 0xff, 0x4a, 0x14, 0xba, 0x76, 0x5b, + 0x79, 0x88, 0x8e, 0xb0, 0xfe, 0x28, 0x80, 0xb9, 0xf5, 0x80, 0xb9, 0x0f, 0xdf, 0x0b, 0xba, 0xff, + 0x7d, 0xea, 0x16, 0x8f, 0x32, 0x75, 0x3b, 0xb0, 0x1a, 0x46, 0xac, 0xcb, 0x5d, 0x2a, 0x99, 0xa3, + 0xf7, 0x7d, 0x79, 0x9e, 0x7d, 0xbf, 0x32, 0x82, 0x65, 0x06, 0xbc, 0x05, 0x27, 0x65, 0x94, 0x30, + 0x67, 0xdc, 0xaf, 0x85, 0x39, 0xfa, 0x75, 0x22, 0xc5, 0xe4, 0x6f, 0x31, 0xde, 0x86, 0x95, 0x1e, + 0xf5, 0xe2, 0xc9, 0x2c, 0xa5, 0x39, 0xb2, 0x9c, 0x54, 0xa0, 0x51, 0x1a, 0x6b, 0x07, 0xce, 0x4c, + 0xd1, 0x53, 0x0f, 0xc0, 0x65, 0x58, 0x1b, 0x97, 0xec, 0x53, 0xe9, 0x3e, 0x60, 0x5d, 0xa5, 0x6b, + 0x85, 0x8c, 0xb5, 0xd8, 0xcd, 0xec, 0xd6, 0x2f, 0x08, 0xce, 0xa4, 0x37, 0xcf, 0xae, 0xe8, 0xf2, + 0xde, 0xf0, 0xa3, 0x88, 0xff, 0x8f, 0x1b, 0xe1, 0x06, 0x94, 0xa2, 0xc4, 0x63, 0xf9, 0x36, 0x78, + 0x63, 0xd6, 0xad, 0x38, 0xc9, 0x2d, 0xf1, 0x18, 0xc9, 0x50, 0xd6, 0x6d, 0xa8, 0x4e, 0x63, 0xae, + 0x55, 0xb8, 0x04, 0xc5, 0x74, 0x77, 0x23, 0xd5, 0xeb, 0xd3, 0x33, 0x7a, 0x4d, 0xd2, 0x98, 0xe6, + 0x4f, 0x15, 0xa8, 0x6c, 0x6a, 0x07, 0xfe, 0x06, 0x41, 0x25, 0xbf, 0x8a, 0xf1, 0x6b, 0xcf, 0xbe, + 0xa8, 0x95, 0x48, 0xd5, 0x0b, 0xf3, 0xdc, 0xe6, 0xd6, 0xfb, 0x5f, 0xfe, 0xf9, 0xf4, 0xab, 0xc2, + 0x4d, 0xeb, 0x5a, 0xfa, 0x43, 0xea, 0xf3, 0xb1, 0xaa, 0x37, 0xc2, 0x48, 0x7c, 0xca, 0x5c, 0x19, + 0x37, 0x36, 0x1a, 0x3c, 0x88, 0x25, 0x0d, 0x5c, 0x96, 0x3e, 0xab, 0x88, 0xb8, 0xb1, 0xf1, 0x45, + 0x2b, 0xd2, 0xa9, 0x5a, 0x68, 0xe3, 0x2a, 0xc2, 0x3f, 0x23, 0x38, 0xb1, 0xef, 0x3e, 0xc0, 0xf5, + 0x69, 0xdf, 0x9f, 0x76, 0x1f, 0x55, 0x2f, 0xcd, 0x11, 0xa9, 0xe9, 0xde, 0x52, 0x74, 0xdf, 0xc5, + 0x37, 0x8f, 0x4c, 0x37, 0x9e, 0xcc, 0x77, 0x15, 0xe1, 0x6f, 0x11, 0x18, 0xa3, 0x21, 0xc5, 0x17, + 0x9e, 0xb9, 0x8c, 0x72, 0xa2, 0x17, 0x9f, 0x13, 0xa5, 0x49, 0x6e, 0x2b, 0x92, 0xef, 0x58, 0xad, + 0x23, 0x93, 0xf4, 0xf3, 0x5c, 0x2d, 0xb4, 0x81, 0xbf, 0x43, 0x00, 0xe3, 0x7d, 0x88, 0x2f, 0xce, + 0xb5, 0xeb, 0xab, 0xaf, 0xcf, 0xb7, 0x56, 0x73, 0x25, 0xad, 0xeb, 0xc7, 0x27, 0xa9, 0x5b, 0xff, + 0x2b, 0x82, 0xb5, 0x43, 0xc7, 0x1e, 0x4f, 0x5d, 0xef, 0xb3, 0xb6, 0x6d, 0xf5, 0xca, 0x9c, 0xd1, + 0x9a, 0xfc, 0xae, 0x22, 0x7f, 0xdb, 0xda, 0x3c, 0x32, 0x79, 0xf7, 0x60, 0xce, 0x54, 0xe9, 0xdf, + 0x10, 0xe0, 0xc3, 0x67, 0x16, 0x5f, 0x99, 0xe7, 0xe4, 0x8f, 0x6b, 0xb0, 0xe7, 0x0d, 0xd7, 0x45, + 0xdc, 0x55, 0x45, 0xec, 0x58, 0x5b, 0xc7, 0x3a, 0x7a, 0xfb, 0x93, 0xb6, 0xd0, 0xc6, 0xe6, 0xd7, + 0x08, 0x4e, 0xb9, 0xc2, 0x9f, 0xc2, 0x62, 0xf3, 0x44, 0xbe, 0x47, 0xee, 0xa5, 0xbf, 0x7b, 0xef, + 0xa1, 0x8f, 0x5b, 0x3a, 0xa8, 0x2f, 0x3c, 0x1a, 0xf4, 0x6d, 0x11, 0xf5, 0x1b, 0x7d, 0x16, 0xa8, + 0x5f, 0xc5, 0x8d, 0xcc, 0x45, 0x43, 0x1e, 0x4f, 0xfe, 0xcb, 0xba, 0x9e, 0x3f, 0xff, 0x50, 0x30, + 0x6f, 0x67, 0xe0, 0x2d, 0x4f, 0x24, 0x5d, 0x3b, 0x4f, 0x6d, 0xdf, 0x6f, 0xfe, 0x9e, 0xbb, 0xf6, + 0x94, 0x6b, 0x2f, 0x77, 0xed, 0xdd, 0x6f, 0x76, 0xca, 0x2a, 0xf9, 0x5b, 0xff, 0x06, 0x00, 0x00, + 0xff, 0xff, 0xd6, 0x35, 0xfc, 0x0e, 0x16, 0x0e, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/bigtable/v2/data.pb.go b/vendor/google.golang.org/genproto/googleapis/bigtable/v2/data.pb.go index 2a57566..a24ba5a 100644 --- a/vendor/google.golang.org/genproto/googleapis/bigtable/v2/data.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/bigtable/v2/data.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/bigtable/v2/data.proto -// DO NOT EDIT! package bigtable @@ -2025,94 +2024,96 @@ func init() { func init() { proto.RegisterFile("google/bigtable/v2/data.proto", fileDescriptor1) } var fileDescriptor1 = []byte{ - // 1412 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xdb, 0x6e, 0xdb, 0x46, - 0x13, 0x16, 0x2d, 0xeb, 0x34, 0x94, 0x25, 0x65, 0xe3, 0x38, 0x8a, 0xfe, 0xf8, 0x8f, 0xc1, 0x14, - 0xa9, 0xe2, 0xb6, 0x72, 0xab, 0x04, 0xe9, 0x21, 0x45, 0x11, 0xcb, 0x69, 0xaa, 0x36, 0xe7, 0x8d, - 0x91, 0x02, 0x01, 0x0a, 0x76, 0x2d, 0xad, 0x54, 0xc2, 0x4b, 0x2e, 0x4b, 0x52, 0x56, 0xf4, 0x22, - 0xbd, 0x6f, 0x5f, 0xa3, 0x77, 0x7d, 0x89, 0xf6, 0x31, 0xfa, 0x00, 0xbd, 0x28, 0xf6, 0xc0, 0x93, - 0xa2, 0xd8, 0x46, 0x91, 0x3b, 0x72, 0xe6, 0xfb, 0xbe, 0x99, 0x9d, 0x9d, 0x1d, 0x2e, 0x61, 0x7b, - 0xca, 0xf9, 0x94, 0xd1, 0xbd, 0x23, 0x67, 0x1a, 0x91, 0x23, 0x46, 0xf7, 0x4e, 0xfa, 0x7b, 0x63, - 0x12, 0x91, 0x9e, 0x1f, 0xf0, 0x88, 0x23, 0xa4, 0xdc, 0xbd, 0xd8, 0xdd, 0x3b, 0xe9, 0x5b, 0x4f, - 0xa1, 0x88, 0xf9, 0x1c, 0xb5, 0xa0, 0x78, 0x4c, 0x17, 0x6d, 0x63, 0xc7, 0xe8, 0xd6, 0xb1, 0x78, - 0x44, 0x77, 0xa0, 0x3a, 0x21, 0xae, 0xc3, 0x1c, 0x1a, 0xb6, 0xd7, 0x76, 0x8a, 0x5d, 0xb3, 0xdf, - 0xe9, 0xbd, 0xc9, 0xef, 0x3d, 0x10, 0x98, 0x05, 0x4e, 0xb0, 0x16, 0x86, 0xb2, 0xb2, 0x21, 0x04, - 0xeb, 0x1e, 0x71, 0xa9, 0x14, 0xad, 0x61, 0xf9, 0x8c, 0x6e, 0x43, 0x65, 0xc4, 0xd9, 0xcc, 0xf5, - 0x4e, 0x15, 0x3d, 0x90, 0x10, 0x1c, 0x43, 0xad, 0x97, 0x50, 0x56, 0x26, 0x74, 0x15, 0x6a, 0x3f, - 0xcf, 0x08, 0x73, 0x26, 0x0e, 0x0d, 0x74, 0xb6, 0xa9, 0x01, 0xf5, 0xa0, 0x34, 0xa2, 0x8c, 0xc5, - 0xda, 0xed, 0x95, 0xda, 0x94, 0x31, 0xac, 0x60, 0x96, 0x0d, 0xeb, 0xe2, 0x15, 0xdd, 0x84, 0x56, - 0xe4, 0xb8, 0x34, 0x8c, 0x88, 0xeb, 0xdb, 0xae, 0x33, 0x0a, 0x78, 0x28, 0xc5, 0x8b, 0xb8, 0x99, - 0xd8, 0x1f, 0x4b, 0x33, 0xda, 0x84, 0xd2, 0x09, 0x61, 0x33, 0xda, 0x5e, 0x93, 0xc1, 0xd5, 0x0b, - 0xda, 0x82, 0x32, 0x23, 0x47, 0x94, 0x85, 0xed, 0xe2, 0x4e, 0xb1, 0x5b, 0xc3, 0xfa, 0xcd, 0xfa, - 0xc3, 0x80, 0x2a, 0xe6, 0x73, 0x4c, 0xbc, 0x29, 0x45, 0xbb, 0xd0, 0x0a, 0x23, 0x12, 0x44, 0xf6, - 0x31, 0x5d, 0xd8, 0x23, 0xc6, 0x43, 0x3a, 0x56, 0x4b, 0x18, 0x16, 0x70, 0x43, 0x7a, 0x1e, 0xd2, - 0xc5, 0x81, 0xb4, 0xa3, 0x1b, 0xd0, 0x48, 0xb1, 0xdc, 0xa7, 0x9e, 0x8a, 0x37, 0x2c, 0xe0, 0x7a, - 0x8c, 0x7c, 0xea, 0x53, 0x0f, 0x59, 0x50, 0xa7, 0xde, 0x38, 0x45, 0x15, 0x25, 0xca, 0xc0, 0x40, - 0xbd, 0x71, 0x8c, 0xb9, 0x01, 0x8d, 0x18, 0xa3, 0xa3, 0xae, 0x6b, 0x54, 0x5d, 0xa1, 0x54, 0xcc, - 0x81, 0x09, 0xb5, 0x24, 0xe6, 0xa0, 0x06, 0x15, 0x4d, 0xb2, 0x7e, 0x84, 0x32, 0xe6, 0xf3, 0x17, - 0x34, 0x42, 0x57, 0xa0, 0x1a, 0xf0, 0xb9, 0x30, 0x8a, 0xfa, 0x14, 0xbb, 0x75, 0x5c, 0x09, 0xf8, - 0xfc, 0x21, 0x5d, 0x84, 0xe8, 0x2e, 0x80, 0x70, 0x05, 0x62, 0xa5, 0x71, 0xfd, 0xaf, 0xae, 0xaa, - 0x7f, 0x5c, 0x0e, 0x5c, 0x0b, 0xf4, 0x53, 0x68, 0xfd, 0xb6, 0x06, 0xa6, 0xde, 0x73, 0x59, 0xa9, - 0x6b, 0x60, 0xca, 0x7e, 0x5a, 0xd8, 0x99, 0x06, 0x02, 0x65, 0x7a, 0x22, 0xda, 0xe8, 0x0e, 0x6c, - 0xa9, 0x54, 0x93, 0xbd, 0x8f, 0x97, 0x16, 0x97, 0x69, 0x53, 0xfa, 0x9f, 0xc7, 0x6e, 0x5d, 0xd6, - 0x3e, 0x6c, 0x2e, 0xf3, 0x32, 0x65, 0x2b, 0x60, 0x94, 0x67, 0xc9, 0xf2, 0xf5, 0x61, 0x53, 0x54, - 0xe2, 0x8d, 0x48, 0x71, 0x11, 0x11, 0xf5, 0xc6, 0xcb, 0x71, 0x7a, 0x80, 0xf2, 0x1c, 0x19, 0xa5, - 0xa4, 0x19, 0xad, 0x2c, 0x43, 0xc4, 0x18, 0x5c, 0x80, 0xe6, 0x52, 0x5e, 0x83, 0x26, 0x6c, 0xe4, - 0x24, 0xac, 0xd7, 0xd0, 0x38, 0x8c, 0x9b, 0x51, 0x95, 0xe9, 0x76, 0x5c, 0x85, 0xb7, 0x34, 0xaf, - 0x5a, 0xeb, 0xe1, 0x52, 0x07, 0x7f, 0xac, 0xd6, 0xf3, 0x06, 0x67, 0x4d, 0x72, 0x44, 0xde, 0x4b, - 0x0c, 0xeb, 0x2f, 0x03, 0xe0, 0xa5, 0xe8, 0x73, 0x15, 0xb6, 0x07, 0xaa, 0x4c, 0xb6, 0xec, 0xfd, - 0xe5, 0x4e, 0x56, 0x3d, 0x2e, 0xe1, 0xba, 0x18, 0x49, 0xdf, 0x2b, 0x7c, 0xae, 0x9b, 0x1b, 0x29, - 0x5a, 0x16, 0x7b, 0x17, 0x44, 0x71, 0xf2, 0xca, 0x71, 0x4f, 0x8b, 0x2e, 0xce, 0xea, 0xea, 0xbe, - 0xce, 0xa8, 0x66, 0xfb, 0x3a, 0xd1, 0x1c, 0x6c, 0x80, 0x99, 0x89, 0x2f, 0xda, 0x3c, 0xa1, 0x59, - 0xff, 0x98, 0x50, 0xc3, 0x7c, 0xfe, 0xc0, 0x61, 0x11, 0x0d, 0xd0, 0x5d, 0x28, 0x8d, 0x7e, 0x22, - 0x8e, 0x27, 0x17, 0x63, 0xf6, 0xaf, 0xbf, 0xa5, 0x7f, 0x15, 0xba, 0x77, 0x20, 0xa0, 0xc3, 0x02, - 0x56, 0x1c, 0xf4, 0x1d, 0x80, 0xe3, 0x45, 0x34, 0x60, 0x94, 0x9c, 0xa8, 0xf1, 0x60, 0xf6, 0xbb, - 0xa7, 0x2b, 0x7c, 0x9b, 0xe0, 0x87, 0x05, 0x9c, 0x61, 0xa3, 0x6f, 0xa0, 0x36, 0xe2, 0xde, 0xd8, - 0x89, 0x1c, 0xae, 0x9a, 0xd3, 0xec, 0xbf, 0x7f, 0x46, 0x32, 0x31, 0x7c, 0x58, 0xc0, 0x29, 0x17, - 0x6d, 0xc2, 0x7a, 0xe8, 0x78, 0xc7, 0xed, 0xd6, 0x8e, 0xd1, 0xad, 0x0e, 0x0b, 0x58, 0xbe, 0xa1, - 0x2e, 0x34, 0x7d, 0x12, 0x86, 0x36, 0x61, 0xcc, 0x9e, 0x48, 0x7e, 0xfb, 0x82, 0x06, 0x6c, 0x08, - 0xc7, 0x3e, 0x63, 0xba, 0x22, 0xbb, 0xd0, 0x3a, 0x62, 0x7c, 0x74, 0x9c, 0x85, 0x22, 0x0d, 0x6d, - 0x48, 0x4f, 0x8a, 0xfd, 0x04, 0x36, 0xf5, 0x74, 0xb0, 0x03, 0x3a, 0xa5, 0xaf, 0x63, 0xfc, 0xba, - 0xde, 0xeb, 0x0b, 0x6a, 0x56, 0x60, 0xe1, 0xd3, 0x94, 0x0f, 0x41, 0x18, 0xed, 0x90, 0xb8, 0x3e, - 0xa3, 0x31, 0xbe, 0xb1, 0x63, 0x74, 0x8d, 0x61, 0x01, 0x37, 0x03, 0x3e, 0x7f, 0x21, 0x3d, 0x1a, - 0xfd, 0x39, 0xb4, 0x33, 0x63, 0x21, 0x1f, 0x44, 0x9c, 0xad, 0xda, 0xb0, 0x80, 0x2f, 0xa5, 0x53, - 0x22, 0x1b, 0xe8, 0x00, 0xb6, 0xd5, 0xc7, 0x24, 0x73, 0x26, 0x73, 0xfc, 0xb2, 0x4e, 0xb2, 0xa3, - 0x60, 0xc9, 0xf1, 0xcc, 0x8a, 0x3c, 0x87, 0x8b, 0x5a, 0x44, 0x8e, 0xb9, 0x98, 0x5a, 0x91, 0xfb, - 0x73, 0xed, 0x94, 0x0f, 0x99, 0x40, 0x8b, 0x02, 0x8c, 0xd2, 0x57, 0x2d, 0xf9, 0x0a, 0xb6, 0xd2, - 0x83, 0x98, 0x53, 0xad, 0x4a, 0x55, 0x6b, 0x95, 0x6a, 0x7e, 0x0c, 0x88, 0x61, 0x17, 0xe5, 0x2c, - 0x5a, 0xbb, 0x07, 0x48, 0x9d, 0x8d, 0xdc, 0x42, 0x6b, 0xf1, 0x39, 0x95, 0xbe, 0xec, 0xf2, 0x9e, - 0x24, 0xf8, 0x6c, 0x1e, 0x4d, 0x99, 0xc7, 0xff, 0x57, 0xe5, 0x91, 0xce, 0x84, 0x54, 0x2f, 0x13, - 0xff, 0x2b, 0xf8, 0x9f, 0xfc, 0xcc, 0xda, 0xbe, 0x28, 0x36, 0x9f, 0xdb, 0x7c, 0x32, 0x09, 0x69, - 0x14, 0x0b, 0xc3, 0x8e, 0xd1, 0x2d, 0x0d, 0x0b, 0xf8, 0xb2, 0x04, 0x3d, 0xa3, 0x01, 0xe6, 0xf3, - 0xa7, 0x12, 0xa1, 0xf9, 0x5f, 0x42, 0x27, 0xcf, 0x67, 0x8e, 0xeb, 0x24, 0x74, 0x53, 0xd3, 0xb7, - 0x32, 0xf4, 0x47, 0x02, 0xa0, 0xd9, 0x03, 0xd8, 0x4e, 0xd9, 0x7a, 0xdb, 0x72, 0x02, 0x75, 0x2d, - 0x70, 0x25, 0x16, 0x50, 0x9b, 0x95, 0xd5, 0xf8, 0x0c, 0x2e, 0x87, 0x51, 0xe0, 0xf8, 0x7a, 0xc6, - 0x44, 0x01, 0xf1, 0xc2, 0x09, 0x0f, 0x5c, 0x1a, 0xb4, 0x37, 0xf4, 0x21, 0xb8, 0x24, 0x01, 0xb2, - 0x12, 0x87, 0xa9, 0x5b, 0x30, 0x89, 0xef, 0xb3, 0x85, 0x2d, 0x2f, 0x02, 0x39, 0xe6, 0xc5, 0xb8, - 0x53, 0x25, 0xe0, 0x91, 0xf0, 0x67, 0x98, 0x9d, 0x7b, 0x50, 0x92, 0x83, 0x05, 0x7d, 0x0a, 0x15, - 0x95, 0xa9, 0xfa, 0xd6, 0x9a, 0xfd, 0xed, 0x53, 0x27, 0x00, 0x8e, 0xd1, 0x9d, 0xaf, 0x01, 0xd2, - 0xc1, 0xf2, 0xdf, 0x65, 0xfe, 0x34, 0xa0, 0x96, 0x4c, 0x15, 0x34, 0x84, 0x96, 0x1f, 0xd0, 0xb1, - 0x33, 0x22, 0x51, 0xd2, 0x1a, 0x6a, 0x4a, 0x9e, 0xa1, 0xd7, 0x4c, 0x68, 0x49, 0x5b, 0x98, 0x51, - 0x30, 0x4b, 0x44, 0xd6, 0xce, 0x23, 0x02, 0x82, 0xa1, 0xf9, 0xf7, 0xa0, 0x3e, 0x21, 0x2c, 0x4c, - 0x04, 0x8a, 0xe7, 0x11, 0x30, 0x25, 0x45, 0xbd, 0x0c, 0xaa, 0x50, 0x56, 0x5c, 0xeb, 0xef, 0x12, - 0x54, 0x1f, 0xcf, 0x22, 0x22, 0x97, 0xb8, 0x0f, 0x55, 0xd1, 0x9e, 0xa2, 0x1d, 0xf4, 0xd2, 0xde, - 0x5b, 0x25, 0x1a, 0xe3, 0x7b, 0x2f, 0x68, 0x24, 0x6e, 0x8f, 0xc3, 0x02, 0xae, 0x84, 0xea, 0x11, - 0xfd, 0x00, 0x68, 0x4c, 0x19, 0x15, 0x25, 0x0a, 0xb8, 0xab, 0xdb, 0x4e, 0x2f, 0xf1, 0xa3, 0x53, - 0xc5, 0xee, 0x4b, 0xda, 0x83, 0x80, 0xbb, 0xaa, 0x0d, 0xc5, 0x89, 0x1a, 0x2f, 0xd9, 0x96, 0xe5, - 0xd5, 0xa8, 0xd3, 0x05, 0x38, 0xaf, 0xbc, 0xba, 0x9c, 0xe7, 0xe5, 0xf5, 0x85, 0xfd, 0x10, 0x9a, - 0x59, 0xf9, 0x80, 0xcf, 0xe5, 0xec, 0x36, 0xfb, 0xbb, 0xe7, 0xd4, 0xc6, 0x7c, 0x2e, 0x3e, 0x21, - 0xe3, 0xac, 0xa1, 0xf3, 0x8b, 0x01, 0x15, 0x5d, 0xaa, 0xb3, 0x2f, 0x76, 0x37, 0xa1, 0xb5, 0x3c, - 0xa7, 0xf5, 0x4d, 0xbb, 0xb9, 0x34, 0x98, 0x57, 0x5e, 0xda, 0x8b, 0x67, 0x5c, 0xda, 0xd7, 0x33, - 0x97, 0xf6, 0xce, 0xaf, 0x06, 0xb4, 0x96, 0xcb, 0xfe, 0x4e, 0x33, 0xdc, 0x07, 0x10, 0x99, 0xa8, - 0x79, 0xaa, 0xb7, 0xe9, 0x1c, 0x03, 0x1d, 0xd7, 0x04, 0x4b, 0x3e, 0x76, 0x6e, 0x65, 0x53, 0xd4, - 0xdb, 0x74, 0x56, 0x8a, 0x9d, 0x26, 0x6c, 0xe4, 0xf6, 0x64, 0x00, 0x50, 0x75, 0xf5, 0x6e, 0x59, - 0xbf, 0x1b, 0x70, 0x11, 0x53, 0x32, 0x7e, 0xcc, 0xc7, 0xce, 0x64, 0xf1, 0x7d, 0xe0, 0x44, 0x14, - 0xcf, 0x18, 0x7d, 0xa7, 0x0b, 0xbf, 0x0e, 0x75, 0xe2, 0xfb, 0xc9, 0x2d, 0x2b, 0xb9, 0x5e, 0x9b, - 0xca, 0x2a, 0xa7, 0x25, 0xfa, 0x00, 0x5a, 0x8e, 0x37, 0x0a, 0xa8, 0x4b, 0xbd, 0xc8, 0x26, 0x2e, - 0x9f, 0x79, 0x91, 0xdc, 0x9f, 0xa2, 0xf8, 0xf4, 0x27, 0x9e, 0x7d, 0xe9, 0x18, 0x94, 0x61, 0x3d, - 0x98, 0x31, 0x3a, 0x20, 0xb0, 0x35, 0xe2, 0xee, 0x8a, 0x1a, 0x0e, 0x6a, 0xf7, 0x49, 0x44, 0x9e, - 0x89, 0xff, 0xdc, 0x67, 0xc6, 0xab, 0x2f, 0x34, 0x60, 0xca, 0x19, 0xf1, 0xa6, 0x3d, 0x1e, 0x4c, - 0xf7, 0xa6, 0xd4, 0x93, 0x7f, 0xc1, 0x7b, 0xca, 0x45, 0x7c, 0x27, 0xcc, 0xfe, 0x27, 0xdf, 0x8d, - 0x9f, 0x8f, 0xca, 0x12, 0x76, 0xeb, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd8, 0xbb, 0x74, 0x4d, - 0x4d, 0x0f, 0x00, 0x00, + // 1444 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xdb, 0x72, 0x1b, 0x45, + 0x13, 0xd6, 0x5a, 0xb6, 0x2c, 0xf5, 0xca, 0x96, 0x32, 0x71, 0x1c, 0x45, 0x7f, 0xfc, 0xc7, 0xa5, + 0x50, 0x41, 0x31, 0x20, 0x83, 0x92, 0x0a, 0x87, 0x50, 0x54, 0x2c, 0x87, 0x44, 0x90, 0xf3, 0xc4, + 0x65, 0xaa, 0x52, 0xa1, 0x96, 0xb1, 0x34, 0x12, 0x5b, 0x9e, 0xdd, 0x59, 0x76, 0x57, 0x56, 0xf4, + 0x22, 0x70, 0x0d, 0x97, 0xbc, 0x02, 0x77, 0x5c, 0xf2, 0x02, 0xf0, 0x18, 0x3c, 0x00, 0x17, 0xd4, + 0x9c, 0xf6, 0xa0, 0x38, 0xb6, 0x8b, 0xca, 0xdd, 0x6e, 0xf7, 0xf7, 0x7d, 0xdd, 0xd3, 0xd3, 0xd3, + 0x3b, 0x0b, 0x1b, 0x63, 0xce, 0xc7, 0x8c, 0x6e, 0x1f, 0xb8, 0xe3, 0x98, 0x1c, 0x30, 0xba, 0x7d, + 0xd4, 0xdd, 0x1e, 0x92, 0x98, 0x74, 0x82, 0x90, 0xc7, 0x1c, 0x21, 0xe5, 0xee, 0x18, 0x77, 0xe7, + 0xa8, 0xdb, 0x7a, 0x02, 0x45, 0xcc, 0xa7, 0xa8, 0x0e, 0xc5, 0x43, 0x3a, 0x6b, 0x58, 0x9b, 0x56, + 0xbb, 0x8a, 0xc5, 0x23, 0xba, 0x05, 0xe5, 0x11, 0xf1, 0x5c, 0xe6, 0xd2, 0xa8, 0xb1, 0xb0, 0x59, + 0x6c, 0xdb, 0xdd, 0x66, 0xe7, 0x75, 0x7e, 0xe7, 0x9e, 0xc0, 0xcc, 0x70, 0x82, 0x6d, 0x61, 0x28, + 0x29, 0x1b, 0x42, 0xb0, 0xe8, 0x13, 0x8f, 0x4a, 0xd1, 0x0a, 0x96, 0xcf, 0xe8, 0x26, 0x2c, 0x0f, + 0x38, 0x9b, 0x78, 0xfe, 0x89, 0xa2, 0xbb, 0x12, 0x82, 0x0d, 0xb4, 0xb5, 0x0f, 0x25, 0x65, 0x42, + 0x97, 0xa1, 0xf2, 0xc3, 0x84, 0x30, 0x77, 0xe4, 0xd2, 0x50, 0x67, 0x9b, 0x1a, 0x50, 0x07, 0x96, + 0x06, 0x94, 0x31, 0xa3, 0xdd, 0x38, 0x56, 0x9b, 0x32, 0x86, 0x15, 0xac, 0xe5, 0xc0, 0xa2, 0x78, + 0x45, 0xd7, 0xa1, 0x1e, 0xbb, 0x1e, 0x8d, 0x62, 0xe2, 0x05, 0x8e, 0xe7, 0x0e, 0x42, 0x1e, 0x49, + 0xf1, 0x22, 0xae, 0x25, 0xf6, 0x47, 0xd2, 0x8c, 0xd6, 0x60, 0xe9, 0x88, 0xb0, 0x09, 0x6d, 0x2c, + 0xc8, 0xe0, 0xea, 0x05, 0xad, 0x43, 0x89, 0x91, 0x03, 0xca, 0xa2, 0x46, 0x71, 0xb3, 0xd8, 0xae, + 0x60, 0xfd, 0xd6, 0xfa, 0xdd, 0x82, 0x32, 0xe6, 0x53, 0x4c, 0xfc, 0x31, 0x45, 0x5b, 0x50, 0x8f, + 0x62, 0x12, 0xc6, 0xce, 0x21, 0x9d, 0x39, 0x03, 0xc6, 0x23, 0x3a, 0x54, 0x4b, 0xe8, 0x17, 0xf0, + 0xaa, 0xf4, 0x3c, 0xa0, 0xb3, 0x5d, 0x69, 0x47, 0xd7, 0x60, 0x35, 0xc5, 0xf2, 0x80, 0xfa, 0x2a, + 0x5e, 0xbf, 0x80, 0xab, 0x06, 0xf9, 0x24, 0xa0, 0x3e, 0x6a, 0x41, 0x95, 0xfa, 0xc3, 0x14, 0x55, + 0x94, 0x28, 0x0b, 0x03, 0xf5, 0x87, 0x06, 0x73, 0x0d, 0x56, 0x0d, 0x46, 0x47, 0x5d, 0xd4, 0xa8, + 0xaa, 0x42, 0xa9, 0x98, 0x3d, 0x1b, 0x2a, 0x49, 0xcc, 0x5e, 0x05, 0x96, 0x35, 0xa9, 0xf5, 0x1d, + 0x94, 0x30, 0x9f, 0x3e, 0xa7, 0x31, 0xba, 0x04, 0xe5, 0x90, 0x4f, 0x85, 0x51, 0xd4, 0xa7, 0xd8, + 0xae, 0xe2, 0xe5, 0x90, 0x4f, 0x1f, 0xd0, 0x59, 0x84, 0x6e, 0x03, 0x08, 0x57, 0x28, 0x56, 0x6a, + 0xea, 0x7f, 0xf9, 0xb8, 0xfa, 0x9b, 0x72, 0xe0, 0x4a, 0xa8, 0x9f, 0xa2, 0xd6, 0x2f, 0x0b, 0x60, + 0xeb, 0x3d, 0x97, 0x95, 0xba, 0x02, 0xb6, 0xec, 0xa7, 0x99, 0x93, 0x69, 0x20, 0x50, 0xa6, 0xc7, + 0xa2, 0x8d, 0x6e, 0xc1, 0xba, 0x4a, 0x35, 0xd9, 0x7b, 0xb3, 0x34, 0x53, 0xa6, 0x35, 0xe9, 0x7f, + 0x66, 0xdc, 0xba, 0xac, 0x5d, 0x58, 0x9b, 0xe7, 0x65, 0xca, 0x56, 0xc0, 0x28, 0xcf, 0x92, 0xe5, + 0xeb, 0xc2, 0x9a, 0xa8, 0xc4, 0x6b, 0x91, 0x4c, 0x11, 0x11, 0xf5, 0x87, 0xf3, 0x71, 0x3a, 0x80, + 0xf2, 0x1c, 0x19, 0x65, 0x49, 0x33, 0xea, 0x59, 0x86, 0x88, 0xd1, 0x3b, 0x07, 0xb5, 0xb9, 0xbc, + 0x7a, 0x35, 0x58, 0xc9, 0x49, 0xb4, 0x5e, 0xc1, 0xea, 0x9e, 0x69, 0x46, 0x55, 0xa6, 0x9b, 0xa6, + 0x0a, 0x6f, 0x68, 0x5e, 0xb5, 0xd6, 0xbd, 0xb9, 0x0e, 0xfe, 0x50, 0xad, 0xe7, 0x35, 0xce, 0x82, + 0xe4, 0x88, 0xbc, 0xe7, 0x18, 0xad, 0xbf, 0x2c, 0x80, 0x7d, 0xd1, 0xe7, 0x2a, 0x6c, 0x07, 0x54, + 0x99, 0x1c, 0xd9, 0xfb, 0xf3, 0x9d, 0xac, 0x7a, 0x5c, 0xc2, 0x75, 0x31, 0x92, 0xbe, 0x57, 0xf8, + 0x5c, 0x37, 0xaf, 0xa6, 0x68, 0x59, 0xec, 0x2d, 0x10, 0xc5, 0xc9, 0x2b, 0x9b, 0x9e, 0x16, 0x5d, + 0x9c, 0xd5, 0xd5, 0x7d, 0x9d, 0x51, 0xcd, 0xf6, 0x75, 0xa2, 0xd9, 0x5b, 0x01, 0x3b, 0x13, 0x5f, + 0xb4, 0x79, 0x42, 0x6b, 0xfd, 0x63, 0x43, 0x05, 0xf3, 0xe9, 0x3d, 0x97, 0xc5, 0x34, 0x44, 0xb7, + 0x61, 0x69, 0xf0, 0x3d, 0x71, 0x7d, 0xb9, 0x18, 0xbb, 0x7b, 0xf5, 0x0d, 0xfd, 0xab, 0xd0, 0x9d, + 0x5d, 0x01, 0xed, 0x17, 0xb0, 0xe2, 0xa0, 0xaf, 0x01, 0x5c, 0x3f, 0xa6, 0x21, 0xa3, 0xe4, 0x48, + 0x8d, 0x07, 0xbb, 0xdb, 0x3e, 0x59, 0xe1, 0xab, 0x04, 0xdf, 0x2f, 0xe0, 0x0c, 0x1b, 0xdd, 0x87, + 0xca, 0x80, 0xfb, 0x43, 0x37, 0x76, 0xb9, 0x6a, 0x4e, 0xbb, 0xfb, 0xee, 0x29, 0xc9, 0x18, 0x78, + 0xbf, 0x80, 0x53, 0x2e, 0x5a, 0x83, 0xc5, 0xc8, 0xf5, 0x0f, 0x1b, 0xf5, 0x4d, 0xab, 0x5d, 0xee, + 0x17, 0xb0, 0x7c, 0x43, 0x6d, 0xa8, 0x05, 0x24, 0x8a, 0x1c, 0xc2, 0x98, 0x33, 0x92, 0xfc, 0xc6, + 0x39, 0x0d, 0x58, 0x11, 0x8e, 0x1d, 0xc6, 0x74, 0x45, 0xb6, 0xa0, 0x7e, 0xc0, 0xf8, 0xe0, 0x30, + 0x0b, 0x45, 0x1a, 0xba, 0x2a, 0x3d, 0x29, 0xf6, 0x23, 0x58, 0xd3, 0xd3, 0xc1, 0x09, 0xe9, 0x98, + 0xbe, 0x32, 0xf8, 0x45, 0xbd, 0xd7, 0xe7, 0xd4, 0xac, 0xc0, 0xc2, 0xa7, 0x29, 0xef, 0x83, 0x30, + 0x3a, 0x11, 0xf1, 0x02, 0x46, 0x0d, 0x7e, 0x75, 0xd3, 0x6a, 0x5b, 0xfd, 0x02, 0xae, 0x85, 0x7c, + 0xfa, 0x5c, 0x7a, 0x34, 0xfa, 0x53, 0x68, 0x64, 0xc6, 0x42, 0x3e, 0x88, 0x38, 0x5b, 0x95, 0x7e, + 0x01, 0x5f, 0x48, 0xa7, 0x44, 0x36, 0xd0, 0x2e, 0x6c, 0xa8, 0x8f, 0x49, 0xe6, 0x4c, 0xe6, 0xf8, + 0x25, 0x9d, 0x64, 0x53, 0xc1, 0x92, 0xe3, 0x99, 0x15, 0x79, 0x06, 0xe7, 0xb5, 0x88, 0x1c, 0x73, + 0x86, 0xba, 0x2c, 0xf7, 0xe7, 0xca, 0x09, 0x1f, 0x32, 0x81, 0x16, 0x05, 0x18, 0xa4, 0xaf, 0x5a, + 0xf2, 0x05, 0xac, 0xa7, 0x07, 0x31, 0xa7, 0x5a, 0x96, 0xaa, 0xad, 0xe3, 0x54, 0xf3, 0x63, 0x40, + 0x0c, 0xbb, 0x38, 0x67, 0xd1, 0xda, 0x1d, 0x40, 0xea, 0x6c, 0xe4, 0x16, 0x5a, 0x31, 0xe7, 0x54, + 0xfa, 0xb2, 0xcb, 0x7b, 0x9c, 0xe0, 0xb3, 0x79, 0xd4, 0x64, 0x1e, 0xff, 0x3f, 0x2e, 0x8f, 0x74, + 0x26, 0xa4, 0x7a, 0x99, 0xf8, 0x5f, 0xc0, 0xff, 0xe4, 0x67, 0xd6, 0x09, 0x44, 0xb1, 0xf9, 0xd4, + 0xe1, 0xa3, 0x51, 0x44, 0x63, 0x23, 0x0c, 0x9b, 0x56, 0x7b, 0xa9, 0x5f, 0xc0, 0x17, 0x25, 0xe8, + 0x29, 0x0d, 0x31, 0x9f, 0x3e, 0x91, 0x08, 0xcd, 0xff, 0x1c, 0x9a, 0x79, 0x3e, 0x73, 0x3d, 0x37, + 0xa1, 0xdb, 0x9a, 0xbe, 0x9e, 0xa1, 0x3f, 0x14, 0x00, 0xcd, 0xee, 0xc1, 0x46, 0xca, 0xd6, 0xdb, + 0x96, 0x13, 0xa8, 0x6a, 0x81, 0x4b, 0x46, 0x40, 0x6d, 0x56, 0x56, 0xe3, 0x13, 0xb8, 0x18, 0xc5, + 0xa1, 0x1b, 0xe8, 0x19, 0x13, 0x87, 0xc4, 0x8f, 0x46, 0x3c, 0xf4, 0x68, 0xd8, 0x58, 0xd1, 0x87, + 0xe0, 0x82, 0x04, 0xc8, 0x4a, 0xec, 0xa5, 0x6e, 0xc1, 0x24, 0x41, 0xc0, 0x66, 0x8e, 0xbc, 0x08, + 0xe4, 0x98, 0xe7, 0x4d, 0xa7, 0x4a, 0xc0, 0x43, 0xe1, 0xcf, 0x30, 0x9b, 0x77, 0x60, 0x49, 0x0e, + 0x16, 0xf4, 0x31, 0x2c, 0xab, 0x4c, 0xd5, 0xb7, 0xd6, 0xee, 0x6e, 0x9c, 0x38, 0x01, 0xb0, 0x41, + 0x37, 0xbf, 0x04, 0x48, 0x07, 0xcb, 0x7f, 0x97, 0xf9, 0xd3, 0x82, 0x4a, 0x32, 0x55, 0x50, 0x1f, + 0xea, 0x41, 0x48, 0x87, 0xee, 0x80, 0xc4, 0x49, 0x6b, 0xa8, 0x29, 0x79, 0x8a, 0x5e, 0x2d, 0xa1, + 0x25, 0x6d, 0x61, 0xc7, 0xe1, 0x24, 0x11, 0x59, 0x38, 0x8b, 0x08, 0x08, 0x86, 0xe6, 0xdf, 0x81, + 0xea, 0x88, 0xb0, 0x28, 0x11, 0x28, 0x9e, 0x45, 0xc0, 0x96, 0x14, 0xf5, 0xd2, 0x2b, 0x43, 0x49, + 0x71, 0x5b, 0x7f, 0x2f, 0x41, 0xf9, 0xd1, 0x24, 0x26, 0x72, 0x89, 0x3b, 0x50, 0x16, 0xed, 0x29, + 0xda, 0x41, 0x2f, 0xed, 0x9d, 0xe3, 0x44, 0x0d, 0xbe, 0xf3, 0x9c, 0xc6, 0xe2, 0xf6, 0xd8, 0x2f, + 0xe0, 0xe5, 0x48, 0x3d, 0xa2, 0x6f, 0x01, 0x0d, 0x29, 0xa3, 0xa2, 0x44, 0x21, 0xf7, 0x74, 0xdb, + 0xe9, 0x25, 0x7e, 0x70, 0xa2, 0xd8, 0x5d, 0x49, 0xbb, 0x17, 0x72, 0x4f, 0xb5, 0xa1, 0x38, 0x51, + 0xc3, 0x39, 0xdb, 0xbc, 0xbc, 0x1a, 0x75, 0xba, 0x00, 0x67, 0x95, 0x57, 0x97, 0xf3, 0xbc, 0xbc, + 0xbe, 0xb0, 0xef, 0x41, 0x2d, 0x2b, 0x1f, 0xf2, 0xa9, 0x9c, 0xdd, 0x76, 0x77, 0xeb, 0x8c, 0xda, + 0x98, 0x4f, 0xc5, 0x27, 0x64, 0x98, 0x35, 0x34, 0x7f, 0xb4, 0x60, 0x59, 0x97, 0xea, 0xf4, 0x8b, + 0xdd, 0x75, 0xa8, 0xcf, 0xcf, 0x69, 0x7d, 0xd3, 0xae, 0xcd, 0x0d, 0xe6, 0x63, 0x2f, 0xed, 0xc5, + 0x53, 0x2e, 0xed, 0x8b, 0x99, 0x4b, 0x7b, 0xf3, 0x67, 0x0b, 0xea, 0xf3, 0x65, 0x7f, 0xab, 0x19, + 0xee, 0x00, 0x88, 0x4c, 0xd4, 0x3c, 0xd5, 0xdb, 0x74, 0x86, 0x81, 0x8e, 0x2b, 0x82, 0x25, 0x1f, + 0x9b, 0x37, 0xb2, 0x29, 0xea, 0x6d, 0x3a, 0x2d, 0xc5, 0x66, 0x0d, 0x56, 0x72, 0x7b, 0xd2, 0x03, + 0x28, 0x7b, 0x7a, 0xb7, 0x5a, 0xbf, 0x59, 0x70, 0x1e, 0x53, 0x32, 0x7c, 0xc4, 0x87, 0xee, 0x68, + 0xf6, 0x4d, 0xe8, 0xc6, 0x14, 0x4f, 0x18, 0x7d, 0xab, 0x0b, 0xbf, 0x0a, 0x55, 0x12, 0x04, 0xc9, + 0x2d, 0x2b, 0xb9, 0x5e, 0xdb, 0xca, 0x2a, 0xa7, 0x25, 0x7a, 0x0f, 0xea, 0xae, 0x3f, 0x08, 0xa9, + 0x47, 0xfd, 0xd8, 0x21, 0x1e, 0x9f, 0xf8, 0xb1, 0xdc, 0x9f, 0xa2, 0xf8, 0xf4, 0x27, 0x9e, 0x1d, + 0xe9, 0xe8, 0x95, 0x60, 0x31, 0x9c, 0x30, 0xda, 0xfb, 0xc9, 0x82, 0xf5, 0x01, 0xf7, 0x8e, 0x29, + 0x62, 0xaf, 0x72, 0x97, 0xc4, 0xe4, 0xa9, 0xf8, 0xd1, 0x7d, 0x6a, 0xbd, 0xf8, 0x4c, 0x03, 0xc6, + 0x9c, 0x11, 0x7f, 0xdc, 0xe1, 0xe1, 0x78, 0x7b, 0x4c, 0x7d, 0xf9, 0x1b, 0xbc, 0xad, 0x5c, 0x24, + 0x70, 0xa3, 0xec, 0x8f, 0xf2, 0x6d, 0xf3, 0xfc, 0xeb, 0x42, 0xe3, 0xbe, 0x22, 0xef, 0x32, 0x3e, + 0x19, 0x76, 0x7a, 0x26, 0xc6, 0x7e, 0xf7, 0x0f, 0xe3, 0x7a, 0x29, 0x5d, 0x2f, 0x8d, 0xeb, 0xe5, + 0x7e, 0xf7, 0xa0, 0x24, 0xc5, 0x6f, 0xfc, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x05, 0xf7, 0x92, 0x43, + 0x84, 0x0f, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/bytestream/bytestream.pb.go b/vendor/google.golang.org/genproto/googleapis/bytestream/bytestream.pb.go index f52ab26..8014948 100644 --- a/vendor/google.golang.org/genproto/googleapis/bytestream/bytestream.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/bytestream/bytestream.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/bytestream/bytestream.proto -// DO NOT EDIT! /* Package bytestream is a generated protocol buffer package. diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/audit/audit_log.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/audit/audit_log.pb.go index 30b080d..33c48ea 100644 --- a/vendor/google.golang.org/genproto/googleapis/cloud/audit/audit_log.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/cloud/audit/audit_log.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/cloud/audit/audit_log.proto -// DO NOT EDIT! /* Package audit is a generated protocol buffer package. diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/bigquery/datatransfer/v1/datatransfer.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/bigquery/datatransfer/v1/datatransfer.pb.go new file mode 100644 index 0000000..2afc572 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/bigquery/datatransfer/v1/datatransfer.pb.go @@ -0,0 +1,1866 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/bigquery/datatransfer/v1/datatransfer.proto + +/* +Package datatransfer is a generated protocol buffer package. + +It is generated from these files: + google/cloud/bigquery/datatransfer/v1/datatransfer.proto + google/cloud/bigquery/datatransfer/v1/transfer.proto + +It has these top-level messages: + DataSourceParameter + DataSource + GetDataSourceRequest + ListDataSourcesRequest + ListDataSourcesResponse + CreateTransferConfigRequest + UpdateTransferConfigRequest + GetTransferConfigRequest + DeleteTransferConfigRequest + GetTransferRunRequest + DeleteTransferRunRequest + ListTransferConfigsRequest + ListTransferConfigsResponse + ListTransferRunsRequest + ListTransferRunsResponse + ListTransferLogsRequest + ListTransferLogsResponse + CheckValidCredsRequest + CheckValidCredsResponse + ScheduleTransferRunsRequest + ScheduleTransferRunsResponse + TransferConfig + TransferRun + TransferMessage +*/ +package datatransfer + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf4 "github.com/golang/protobuf/ptypes/duration" +import google_protobuf5 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf6 "google.golang.org/genproto/protobuf/field_mask" +import google_protobuf2 "github.com/golang/protobuf/ptypes/timestamp" +import google_protobuf7 "github.com/golang/protobuf/ptypes/wrappers" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Parameter type. +type DataSourceParameter_Type int32 + +const ( + // Type unspecified. + DataSourceParameter_TYPE_UNSPECIFIED DataSourceParameter_Type = 0 + // String parameter. + DataSourceParameter_STRING DataSourceParameter_Type = 1 + // Integer parameter (64-bits). + // Will be serialized to json as string. + DataSourceParameter_INTEGER DataSourceParameter_Type = 2 + // Double precision floating point parameter. + DataSourceParameter_DOUBLE DataSourceParameter_Type = 3 + // Boolean parameter. + DataSourceParameter_BOOLEAN DataSourceParameter_Type = 4 + // Record parameter. + DataSourceParameter_RECORD DataSourceParameter_Type = 5 + // Page ID for a Google+ Page. + DataSourceParameter_PLUS_PAGE DataSourceParameter_Type = 6 +) + +var DataSourceParameter_Type_name = map[int32]string{ + 0: "TYPE_UNSPECIFIED", + 1: "STRING", + 2: "INTEGER", + 3: "DOUBLE", + 4: "BOOLEAN", + 5: "RECORD", + 6: "PLUS_PAGE", +} +var DataSourceParameter_Type_value = map[string]int32{ + "TYPE_UNSPECIFIED": 0, + "STRING": 1, + "INTEGER": 2, + "DOUBLE": 3, + "BOOLEAN": 4, + "RECORD": 5, + "PLUS_PAGE": 6, +} + +func (x DataSourceParameter_Type) String() string { + return proto.EnumName(DataSourceParameter_Type_name, int32(x)) +} +func (DataSourceParameter_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 0} } + +// The type of authorization needed for this data source. +type DataSource_AuthorizationType int32 + +const ( + // Type unspecified. + DataSource_AUTHORIZATION_TYPE_UNSPECIFIED DataSource_AuthorizationType = 0 + // Use OAuth 2 authorization codes that can be exchanged + // for a refresh token on the backend. + DataSource_AUTHORIZATION_CODE DataSource_AuthorizationType = 1 + // Return an authorization code for a given Google+ page that can then be + // exchanged for a refresh token on the backend. + DataSource_GOOGLE_PLUS_AUTHORIZATION_CODE DataSource_AuthorizationType = 2 +) + +var DataSource_AuthorizationType_name = map[int32]string{ + 0: "AUTHORIZATION_TYPE_UNSPECIFIED", + 1: "AUTHORIZATION_CODE", + 2: "GOOGLE_PLUS_AUTHORIZATION_CODE", +} +var DataSource_AuthorizationType_value = map[string]int32{ + "AUTHORIZATION_TYPE_UNSPECIFIED": 0, + "AUTHORIZATION_CODE": 1, + "GOOGLE_PLUS_AUTHORIZATION_CODE": 2, +} + +func (x DataSource_AuthorizationType) String() string { + return proto.EnumName(DataSource_AuthorizationType_name, int32(x)) +} +func (DataSource_AuthorizationType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{1, 0} +} + +// Represents how the data source supports data auto refresh. +type DataSource_DataRefreshType int32 + +const ( + // The data source won't support data auto refresh, which is default value. + DataSource_DATA_REFRESH_TYPE_UNSPECIFIED DataSource_DataRefreshType = 0 + // The data source supports data auto refresh, and runs will be scheduled + // for the past few days. Does not allow custom values to be set for each + // transfer config. + DataSource_SLIDING_WINDOW DataSource_DataRefreshType = 1 + // The data source supports data auto refresh, and runs will be scheduled + // for the past few days. Allows custom values to be set for each transfer + // config. + DataSource_CUSTOM_SLIDING_WINDOW DataSource_DataRefreshType = 2 +) + +var DataSource_DataRefreshType_name = map[int32]string{ + 0: "DATA_REFRESH_TYPE_UNSPECIFIED", + 1: "SLIDING_WINDOW", + 2: "CUSTOM_SLIDING_WINDOW", +} +var DataSource_DataRefreshType_value = map[string]int32{ + "DATA_REFRESH_TYPE_UNSPECIFIED": 0, + "SLIDING_WINDOW": 1, + "CUSTOM_SLIDING_WINDOW": 2, +} + +func (x DataSource_DataRefreshType) String() string { + return proto.EnumName(DataSource_DataRefreshType_name, int32(x)) +} +func (DataSource_DataRefreshType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{1, 1} +} + +// Represents which runs should be pulled. +type ListTransferRunsRequest_RunAttempt int32 + +const ( + // All runs should be returned. + ListTransferRunsRequest_RUN_ATTEMPT_UNSPECIFIED ListTransferRunsRequest_RunAttempt = 0 + // Only latest run per day should be returned. + ListTransferRunsRequest_LATEST ListTransferRunsRequest_RunAttempt = 1 +) + +var ListTransferRunsRequest_RunAttempt_name = map[int32]string{ + 0: "RUN_ATTEMPT_UNSPECIFIED", + 1: "LATEST", +} +var ListTransferRunsRequest_RunAttempt_value = map[string]int32{ + "RUN_ATTEMPT_UNSPECIFIED": 0, + "LATEST": 1, +} + +func (x ListTransferRunsRequest_RunAttempt) String() string { + return proto.EnumName(ListTransferRunsRequest_RunAttempt_name, int32(x)) +} +func (ListTransferRunsRequest_RunAttempt) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{13, 0} +} + +// Represents a data source parameter with validation rules, so that +// parameters can be rendered in the UI. These parameters are given to us by +// supported data sources, and include all needed information for rendering +// and validation. +// Thus, whoever uses this api can decide to generate either generic ui, +// or custom data source specific forms. +type DataSourceParameter struct { + // Parameter identifier. + ParamId string `protobuf:"bytes,1,opt,name=param_id,json=paramId" json:"param_id,omitempty"` + // Parameter display name in the user interface. + DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // Parameter description. + Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` + // Parameter type. + Type DataSourceParameter_Type `protobuf:"varint,4,opt,name=type,enum=google.cloud.bigquery.datatransfer.v1.DataSourceParameter_Type" json:"type,omitempty"` + // Is parameter required. + Required bool `protobuf:"varint,5,opt,name=required" json:"required,omitempty"` + // Can parameter have multiple values. + Repeated bool `protobuf:"varint,6,opt,name=repeated" json:"repeated,omitempty"` + // Regular expression which can be used for parameter validation. + ValidationRegex string `protobuf:"bytes,7,opt,name=validation_regex,json=validationRegex" json:"validation_regex,omitempty"` + // All possible values for the parameter. + AllowedValues []string `protobuf:"bytes,8,rep,name=allowed_values,json=allowedValues" json:"allowed_values,omitempty"` + // For integer and double values specifies minimum allowed value. + MinValue *google_protobuf7.DoubleValue `protobuf:"bytes,9,opt,name=min_value,json=minValue" json:"min_value,omitempty"` + // For integer and double values specifies maxminum allowed value. + MaxValue *google_protobuf7.DoubleValue `protobuf:"bytes,10,opt,name=max_value,json=maxValue" json:"max_value,omitempty"` + // When parameter is a record, describes child fields. + Fields []*DataSourceParameter `protobuf:"bytes,11,rep,name=fields" json:"fields,omitempty"` + // Description of the requirements for this field, in case the user input does + // not fulfill the regex pattern or min/max values. + ValidationDescription string `protobuf:"bytes,12,opt,name=validation_description,json=validationDescription" json:"validation_description,omitempty"` + // URL to a help document to further explain the naming requirements. + ValidationHelpUrl string `protobuf:"bytes,13,opt,name=validation_help_url,json=validationHelpUrl" json:"validation_help_url,omitempty"` + // Cannot be changed after initial creation. + Immutable bool `protobuf:"varint,14,opt,name=immutable" json:"immutable,omitempty"` + // If set to true, schema should be taken from the parent with the same + // parameter_id. Only applicable when parameter type is RECORD. + Recurse bool `protobuf:"varint,15,opt,name=recurse" json:"recurse,omitempty"` +} + +func (m *DataSourceParameter) Reset() { *m = DataSourceParameter{} } +func (m *DataSourceParameter) String() string { return proto.CompactTextString(m) } +func (*DataSourceParameter) ProtoMessage() {} +func (*DataSourceParameter) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *DataSourceParameter) GetParamId() string { + if m != nil { + return m.ParamId + } + return "" +} + +func (m *DataSourceParameter) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func (m *DataSourceParameter) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *DataSourceParameter) GetType() DataSourceParameter_Type { + if m != nil { + return m.Type + } + return DataSourceParameter_TYPE_UNSPECIFIED +} + +func (m *DataSourceParameter) GetRequired() bool { + if m != nil { + return m.Required + } + return false +} + +func (m *DataSourceParameter) GetRepeated() bool { + if m != nil { + return m.Repeated + } + return false +} + +func (m *DataSourceParameter) GetValidationRegex() string { + if m != nil { + return m.ValidationRegex + } + return "" +} + +func (m *DataSourceParameter) GetAllowedValues() []string { + if m != nil { + return m.AllowedValues + } + return nil +} + +func (m *DataSourceParameter) GetMinValue() *google_protobuf7.DoubleValue { + if m != nil { + return m.MinValue + } + return nil +} + +func (m *DataSourceParameter) GetMaxValue() *google_protobuf7.DoubleValue { + if m != nil { + return m.MaxValue + } + return nil +} + +func (m *DataSourceParameter) GetFields() []*DataSourceParameter { + if m != nil { + return m.Fields + } + return nil +} + +func (m *DataSourceParameter) GetValidationDescription() string { + if m != nil { + return m.ValidationDescription + } + return "" +} + +func (m *DataSourceParameter) GetValidationHelpUrl() string { + if m != nil { + return m.ValidationHelpUrl + } + return "" +} + +func (m *DataSourceParameter) GetImmutable() bool { + if m != nil { + return m.Immutable + } + return false +} + +func (m *DataSourceParameter) GetRecurse() bool { + if m != nil { + return m.Recurse + } + return false +} + +// Represents data source metadata. Metadata is sufficient to +// render UI and request proper OAuth tokens. +type DataSource struct { + // Data source resource name. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Data source id. + DataSourceId string `protobuf:"bytes,2,opt,name=data_source_id,json=dataSourceId" json:"data_source_id,omitempty"` + // User friendly data source name. + DisplayName string `protobuf:"bytes,3,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // User friendly data source description string. + Description string `protobuf:"bytes,4,opt,name=description" json:"description,omitempty"` + // Data source client id which should be used to receive refresh token. + // When not supplied, no offline credentials are populated for data transfer. + ClientId string `protobuf:"bytes,5,opt,name=client_id,json=clientId" json:"client_id,omitempty"` + // Api auth scopes for which refresh token needs to be obtained. Only valid + // when `client_id` is specified. Ignored otherwise. These are scopes needed + // by a data source to prepare data and ingest them into BigQuery, + // e.g., https://www.googleapis.com/auth/bigquery + Scopes []string `protobuf:"bytes,6,rep,name=scopes" json:"scopes,omitempty"` + // Transfer type. Currently supports only batch transfers, + // which are transfers that use the BigQuery batch APIs (load or + // query) to ingest the data. + TransferType TransferType `protobuf:"varint,7,opt,name=transfer_type,json=transferType,enum=google.cloud.bigquery.datatransfer.v1.TransferType" json:"transfer_type,omitempty"` + // Indicates whether the data source supports multiple transfers + // to different BigQuery targets. + SupportsMultipleTransfers bool `protobuf:"varint,8,opt,name=supports_multiple_transfers,json=supportsMultipleTransfers" json:"supports_multiple_transfers,omitempty"` + // The number of seconds to wait for an update from the data source + // before BigQuery marks the transfer as failed. + UpdateDeadlineSeconds int32 `protobuf:"varint,9,opt,name=update_deadline_seconds,json=updateDeadlineSeconds" json:"update_deadline_seconds,omitempty"` + // Default data transfer schedule. + // Examples of valid schedules include: + // `1st,3rd monday of month 15:30`, + // `every wed,fri of jan,jun 13:15`, and + // `first sunday of quarter 00:00`. + DefaultSchedule string `protobuf:"bytes,10,opt,name=default_schedule,json=defaultSchedule" json:"default_schedule,omitempty"` + // Specifies whether the data source supports a user defined schedule, or + // operates on the default schedule. + // When set to `true`, user can override default schedule. + SupportsCustomSchedule bool `protobuf:"varint,11,opt,name=supports_custom_schedule,json=supportsCustomSchedule" json:"supports_custom_schedule,omitempty"` + // Data source parameters. + Parameters []*DataSourceParameter `protobuf:"bytes,12,rep,name=parameters" json:"parameters,omitempty"` + // Url for the help document for this data source. + HelpUrl string `protobuf:"bytes,13,opt,name=help_url,json=helpUrl" json:"help_url,omitempty"` + // Indicates the type of authorization. + AuthorizationType DataSource_AuthorizationType `protobuf:"varint,14,opt,name=authorization_type,json=authorizationType,enum=google.cloud.bigquery.datatransfer.v1.DataSource_AuthorizationType" json:"authorization_type,omitempty"` + // Specifies whether the data source supports automatic data refresh for the + // past few days, and how it's supported. + // For some data sources, data might not be complete until a few days later, + // so it's useful to refresh data automatically. + DataRefreshType DataSource_DataRefreshType `protobuf:"varint,15,opt,name=data_refresh_type,json=dataRefreshType,enum=google.cloud.bigquery.datatransfer.v1.DataSource_DataRefreshType" json:"data_refresh_type,omitempty"` + // Default data refresh window on days. + // Only meaningful when `data_refresh_type` = `SLIDING_WINDOW`. + DefaultDataRefreshWindowDays int32 `protobuf:"varint,16,opt,name=default_data_refresh_window_days,json=defaultDataRefreshWindowDays" json:"default_data_refresh_window_days,omitempty"` + // Disables backfilling and manual run scheduling + // for the data source. + ManualRunsDisabled bool `protobuf:"varint,17,opt,name=manual_runs_disabled,json=manualRunsDisabled" json:"manual_runs_disabled,omitempty"` + // The minimum interval for scheduler to schedule runs. + MinimumScheduleInterval *google_protobuf4.Duration `protobuf:"bytes,18,opt,name=minimum_schedule_interval,json=minimumScheduleInterval" json:"minimum_schedule_interval,omitempty"` +} + +func (m *DataSource) Reset() { *m = DataSource{} } +func (m *DataSource) String() string { return proto.CompactTextString(m) } +func (*DataSource) ProtoMessage() {} +func (*DataSource) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *DataSource) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *DataSource) GetDataSourceId() string { + if m != nil { + return m.DataSourceId + } + return "" +} + +func (m *DataSource) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func (m *DataSource) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *DataSource) GetClientId() string { + if m != nil { + return m.ClientId + } + return "" +} + +func (m *DataSource) GetScopes() []string { + if m != nil { + return m.Scopes + } + return nil +} + +func (m *DataSource) GetTransferType() TransferType { + if m != nil { + return m.TransferType + } + return TransferType_TRANSFER_TYPE_UNSPECIFIED +} + +func (m *DataSource) GetSupportsMultipleTransfers() bool { + if m != nil { + return m.SupportsMultipleTransfers + } + return false +} + +func (m *DataSource) GetUpdateDeadlineSeconds() int32 { + if m != nil { + return m.UpdateDeadlineSeconds + } + return 0 +} + +func (m *DataSource) GetDefaultSchedule() string { + if m != nil { + return m.DefaultSchedule + } + return "" +} + +func (m *DataSource) GetSupportsCustomSchedule() bool { + if m != nil { + return m.SupportsCustomSchedule + } + return false +} + +func (m *DataSource) GetParameters() []*DataSourceParameter { + if m != nil { + return m.Parameters + } + return nil +} + +func (m *DataSource) GetHelpUrl() string { + if m != nil { + return m.HelpUrl + } + return "" +} + +func (m *DataSource) GetAuthorizationType() DataSource_AuthorizationType { + if m != nil { + return m.AuthorizationType + } + return DataSource_AUTHORIZATION_TYPE_UNSPECIFIED +} + +func (m *DataSource) GetDataRefreshType() DataSource_DataRefreshType { + if m != nil { + return m.DataRefreshType + } + return DataSource_DATA_REFRESH_TYPE_UNSPECIFIED +} + +func (m *DataSource) GetDefaultDataRefreshWindowDays() int32 { + if m != nil { + return m.DefaultDataRefreshWindowDays + } + return 0 +} + +func (m *DataSource) GetManualRunsDisabled() bool { + if m != nil { + return m.ManualRunsDisabled + } + return false +} + +func (m *DataSource) GetMinimumScheduleInterval() *google_protobuf4.Duration { + if m != nil { + return m.MinimumScheduleInterval + } + return nil +} + +// A request to get data source info. +type GetDataSourceRequest struct { + // The field will contain name of the resource requested, for example: + // `projects/{project_id}/dataSources/{data_source_id}` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetDataSourceRequest) Reset() { *m = GetDataSourceRequest{} } +func (m *GetDataSourceRequest) String() string { return proto.CompactTextString(m) } +func (*GetDataSourceRequest) ProtoMessage() {} +func (*GetDataSourceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *GetDataSourceRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request to list supported data sources and their data transfer settings. +type ListDataSourcesRequest struct { + // The BigQuery project id for which data sources should be returned. + // Must be in the form: `projects/{project_id}` + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Pagination token, which can be used to request a specific page + // of `ListDataSourcesRequest` list results. For multiple-page + // results, `ListDataSourcesResponse` outputs + // a `next_page` token, which can be used as the + // `page_token` value to request the next page of list results. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // Page size. The default page size is the maximum value of 1000 results. + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` +} + +func (m *ListDataSourcesRequest) Reset() { *m = ListDataSourcesRequest{} } +func (m *ListDataSourcesRequest) String() string { return proto.CompactTextString(m) } +func (*ListDataSourcesRequest) ProtoMessage() {} +func (*ListDataSourcesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *ListDataSourcesRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListDataSourcesRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListDataSourcesRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +// Returns list of supported data sources and their metadata. +type ListDataSourcesResponse struct { + // List of supported data sources and their transfer settings. + DataSources []*DataSource `protobuf:"bytes,1,rep,name=data_sources,json=dataSources" json:"data_sources,omitempty"` + // Output only. The next-pagination token. For multiple-page list results, + // this token can be used as the + // `ListDataSourcesRequest.page_token` + // to request the next page of list results. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListDataSourcesResponse) Reset() { *m = ListDataSourcesResponse{} } +func (m *ListDataSourcesResponse) String() string { return proto.CompactTextString(m) } +func (*ListDataSourcesResponse) ProtoMessage() {} +func (*ListDataSourcesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *ListDataSourcesResponse) GetDataSources() []*DataSource { + if m != nil { + return m.DataSources + } + return nil +} + +func (m *ListDataSourcesResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// A request to create a data transfer configuration. If new credentials are +// needed for this transfer configuration, an authorization code must be +// provided. If an authorization code is provided, the transfer configuration +// will be associated with the user id corresponding to the +// authorization code. Otherwise, the transfer configuration will be associated +// with the calling user. +type CreateTransferConfigRequest struct { + // The BigQuery project id where the transfer configuration should be created. + // Must be in the format /projects/{project_id}/locations/{location_id} + // If specified location and location of the destination bigquery dataset + // do not match - the request will fail. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Data transfer configuration to create. + TransferConfig *TransferConfig `protobuf:"bytes,2,opt,name=transfer_config,json=transferConfig" json:"transfer_config,omitempty"` + // Optional OAuth2 authorization code to use with this transfer configuration. + // This is required if new credentials are needed, as indicated by + // `CheckValidCreds`. + // In order to obtain authorization_code, please make a + // request to + // https://www.gstatic.com/bigquerydatatransfer/oauthz/auth?client_id=&scope=&redirect_uri= + // + // * client_id should be OAuth client_id of BigQuery DTS API for the given + // data source returned by ListDataSources method. + // * data_source_scopes are the scopes returned by ListDataSources method. + // * redirect_uri is an optional parameter. If not specified, then + // authorization code is posted to the opener of authorization flow window. + // Otherwise it will be sent to the redirect uri. A special value of + // urn:ietf:wg:oauth:2.0:oob means that authorization code should be + // returned in the title bar of the browser, with the page text prompting + // the user to copy the code and paste it in the application. + AuthorizationCode string `protobuf:"bytes,3,opt,name=authorization_code,json=authorizationCode" json:"authorization_code,omitempty"` +} + +func (m *CreateTransferConfigRequest) Reset() { *m = CreateTransferConfigRequest{} } +func (m *CreateTransferConfigRequest) String() string { return proto.CompactTextString(m) } +func (*CreateTransferConfigRequest) ProtoMessage() {} +func (*CreateTransferConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *CreateTransferConfigRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateTransferConfigRequest) GetTransferConfig() *TransferConfig { + if m != nil { + return m.TransferConfig + } + return nil +} + +func (m *CreateTransferConfigRequest) GetAuthorizationCode() string { + if m != nil { + return m.AuthorizationCode + } + return "" +} + +// A request to update a transfer configuration. To update the user id of the +// transfer configuration, an authorization code needs to be provided. +type UpdateTransferConfigRequest struct { + // Data transfer configuration to create. + TransferConfig *TransferConfig `protobuf:"bytes,1,opt,name=transfer_config,json=transferConfig" json:"transfer_config,omitempty"` + // Optional OAuth2 authorization code to use with this transfer configuration. + // If it is provided, the transfer configuration will be associated with the + // authorizing user. + // In order to obtain authorization_code, please make a + // request to + // https://www.gstatic.com/bigquerydatatransfer/oauthz/auth?client_id=&scope=&redirect_uri= + // + // * client_id should be OAuth client_id of BigQuery DTS API for the given + // data source returned by ListDataSources method. + // * data_source_scopes are the scopes returned by ListDataSources method. + // * redirect_uri is an optional parameter. If not specified, then + // authorization code is posted to the opener of authorization flow window. + // Otherwise it will be sent to the redirect uri. A special value of + // urn:ietf:wg:oauth:2.0:oob means that authorization code should be + // returned in the title bar of the browser, with the page text prompting + // the user to copy the code and paste it in the application. + AuthorizationCode string `protobuf:"bytes,3,opt,name=authorization_code,json=authorizationCode" json:"authorization_code,omitempty"` + // Required list of fields to be updated in this request. + UpdateMask *google_protobuf6.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateTransferConfigRequest) Reset() { *m = UpdateTransferConfigRequest{} } +func (m *UpdateTransferConfigRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateTransferConfigRequest) ProtoMessage() {} +func (*UpdateTransferConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *UpdateTransferConfigRequest) GetTransferConfig() *TransferConfig { + if m != nil { + return m.TransferConfig + } + return nil +} + +func (m *UpdateTransferConfigRequest) GetAuthorizationCode() string { + if m != nil { + return m.AuthorizationCode + } + return "" +} + +func (m *UpdateTransferConfigRequest) GetUpdateMask() *google_protobuf6.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +// A request to get data transfer information. +type GetTransferConfigRequest struct { + // The field will contain name of the resource requested, for example: + // `projects/{project_id}/transferConfigs/{config_id}` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetTransferConfigRequest) Reset() { *m = GetTransferConfigRequest{} } +func (m *GetTransferConfigRequest) String() string { return proto.CompactTextString(m) } +func (*GetTransferConfigRequest) ProtoMessage() {} +func (*GetTransferConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *GetTransferConfigRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// A request to delete data transfer information. All associated transfer runs +// and log messages will be deleted as well. +type DeleteTransferConfigRequest struct { + // The field will contain name of the resource requested, for example: + // `projects/{project_id}/transferConfigs/{config_id}` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteTransferConfigRequest) Reset() { *m = DeleteTransferConfigRequest{} } +func (m *DeleteTransferConfigRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteTransferConfigRequest) ProtoMessage() {} +func (*DeleteTransferConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *DeleteTransferConfigRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// A request to get data transfer run information. +type GetTransferRunRequest struct { + // The field will contain name of the resource requested, for example: + // `projects/{project_id}/transferConfigs/{config_id}/runs/{run_id}` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetTransferRunRequest) Reset() { *m = GetTransferRunRequest{} } +func (m *GetTransferRunRequest) String() string { return proto.CompactTextString(m) } +func (*GetTransferRunRequest) ProtoMessage() {} +func (*GetTransferRunRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *GetTransferRunRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// A request to delete data transfer run information. +type DeleteTransferRunRequest struct { + // The field will contain name of the resource requested, for example: + // `projects/{project_id}/transferConfigs/{config_id}/runs/{run_id}` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteTransferRunRequest) Reset() { *m = DeleteTransferRunRequest{} } +func (m *DeleteTransferRunRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteTransferRunRequest) ProtoMessage() {} +func (*DeleteTransferRunRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *DeleteTransferRunRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// A request to list data transfers configured for a BigQuery project. +type ListTransferConfigsRequest struct { + // The BigQuery project id for which data sources + // should be returned: `projects/{project_id}`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // When specified, only configurations of requested data sources are returned. + DataSourceIds []string `protobuf:"bytes,2,rep,name=data_source_ids,json=dataSourceIds" json:"data_source_ids,omitempty"` + // Pagination token, which can be used to request a specific page + // of `ListTransfersRequest` list results. For multiple-page + // results, `ListTransfersResponse` outputs + // a `next_page` token, which can be used as the + // `page_token` value to request the next page of list results. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // Page size. The default page size is the maximum value of 1000 results. + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` +} + +func (m *ListTransferConfigsRequest) Reset() { *m = ListTransferConfigsRequest{} } +func (m *ListTransferConfigsRequest) String() string { return proto.CompactTextString(m) } +func (*ListTransferConfigsRequest) ProtoMessage() {} +func (*ListTransferConfigsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *ListTransferConfigsRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListTransferConfigsRequest) GetDataSourceIds() []string { + if m != nil { + return m.DataSourceIds + } + return nil +} + +func (m *ListTransferConfigsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListTransferConfigsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +// The returned list of pipelines in the project. +type ListTransferConfigsResponse struct { + // Output only. The stored pipeline transfer configurations. + TransferConfigs []*TransferConfig `protobuf:"bytes,1,rep,name=transfer_configs,json=transferConfigs" json:"transfer_configs,omitempty"` + // Output only. The next-pagination token. For multiple-page list results, + // this token can be used as the + // `ListTransferConfigsRequest.page_token` + // to request the next page of list results. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListTransferConfigsResponse) Reset() { *m = ListTransferConfigsResponse{} } +func (m *ListTransferConfigsResponse) String() string { return proto.CompactTextString(m) } +func (*ListTransferConfigsResponse) ProtoMessage() {} +func (*ListTransferConfigsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *ListTransferConfigsResponse) GetTransferConfigs() []*TransferConfig { + if m != nil { + return m.TransferConfigs + } + return nil +} + +func (m *ListTransferConfigsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// A request to list data transfer runs. UI can use this method to show/filter +// specific data transfer runs. The data source can use this method to request +// all scheduled transfer runs. +type ListTransferRunsRequest struct { + // Name of transfer configuration for which transfer runs should be retrieved. + // Format of transfer configuration resource name is: + // `projects/{project_id}/transferConfigs/{config_id}`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // When specified, only transfer runs with requested states are returned. + States []TransferState `protobuf:"varint,2,rep,packed,name=states,enum=google.cloud.bigquery.datatransfer.v1.TransferState" json:"states,omitempty"` + // Pagination token, which can be used to request a specific page + // of `ListTransferRunsRequest` list results. For multiple-page + // results, `ListTransferRunsResponse` outputs + // a `next_page` token, which can be used as the + // `page_token` value to request the next page of list results. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // Page size. The default page size is the maximum value of 1000 results. + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // Indicates how run attempts are to be pulled. + RunAttempt ListTransferRunsRequest_RunAttempt `protobuf:"varint,5,opt,name=run_attempt,json=runAttempt,enum=google.cloud.bigquery.datatransfer.v1.ListTransferRunsRequest_RunAttempt" json:"run_attempt,omitempty"` +} + +func (m *ListTransferRunsRequest) Reset() { *m = ListTransferRunsRequest{} } +func (m *ListTransferRunsRequest) String() string { return proto.CompactTextString(m) } +func (*ListTransferRunsRequest) ProtoMessage() {} +func (*ListTransferRunsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +func (m *ListTransferRunsRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListTransferRunsRequest) GetStates() []TransferState { + if m != nil { + return m.States + } + return nil +} + +func (m *ListTransferRunsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListTransferRunsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListTransferRunsRequest) GetRunAttempt() ListTransferRunsRequest_RunAttempt { + if m != nil { + return m.RunAttempt + } + return ListTransferRunsRequest_RUN_ATTEMPT_UNSPECIFIED +} + +// The returned list of pipelines in the project. +type ListTransferRunsResponse struct { + // Output only. The stored pipeline transfer runs. + TransferRuns []*TransferRun `protobuf:"bytes,1,rep,name=transfer_runs,json=transferRuns" json:"transfer_runs,omitempty"` + // Output only. The next-pagination token. For multiple-page list results, + // this token can be used as the + // `ListTransferRunsRequest.page_token` + // to request the next page of list results. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListTransferRunsResponse) Reset() { *m = ListTransferRunsResponse{} } +func (m *ListTransferRunsResponse) String() string { return proto.CompactTextString(m) } +func (*ListTransferRunsResponse) ProtoMessage() {} +func (*ListTransferRunsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +func (m *ListTransferRunsResponse) GetTransferRuns() []*TransferRun { + if m != nil { + return m.TransferRuns + } + return nil +} + +func (m *ListTransferRunsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// A request to get user facing log messages associated with data transfer run. +type ListTransferLogsRequest struct { + // Transfer run name in the form: + // `projects/{project_id}/transferConfigs/{config_Id}/runs/{run_id}`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Pagination token, which can be used to request a specific page + // of `ListTransferLogsRequest` list results. For multiple-page + // results, `ListTransferLogsResponse` outputs + // a `next_page` token, which can be used as the + // `page_token` value to request the next page of list results. + PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // Page size. The default page size is the maximum value of 1000 results. + PageSize int32 `protobuf:"varint,5,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // Message types to return. If not populated - INFO, WARNING and ERROR + // messages are returned. + MessageTypes []TransferMessage_MessageSeverity `protobuf:"varint,6,rep,packed,name=message_types,json=messageTypes,enum=google.cloud.bigquery.datatransfer.v1.TransferMessage_MessageSeverity" json:"message_types,omitempty"` +} + +func (m *ListTransferLogsRequest) Reset() { *m = ListTransferLogsRequest{} } +func (m *ListTransferLogsRequest) String() string { return proto.CompactTextString(m) } +func (*ListTransferLogsRequest) ProtoMessage() {} +func (*ListTransferLogsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +func (m *ListTransferLogsRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListTransferLogsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListTransferLogsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListTransferLogsRequest) GetMessageTypes() []TransferMessage_MessageSeverity { + if m != nil { + return m.MessageTypes + } + return nil +} + +// The returned list transfer run messages. +type ListTransferLogsResponse struct { + // Output only. The stored pipeline transfer messages. + TransferMessages []*TransferMessage `protobuf:"bytes,1,rep,name=transfer_messages,json=transferMessages" json:"transfer_messages,omitempty"` + // Output only. The next-pagination token. For multiple-page list results, + // this token can be used as the + // `GetTransferRunLogRequest.page_token` + // to request the next page of list results. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListTransferLogsResponse) Reset() { *m = ListTransferLogsResponse{} } +func (m *ListTransferLogsResponse) String() string { return proto.CompactTextString(m) } +func (*ListTransferLogsResponse) ProtoMessage() {} +func (*ListTransferLogsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } + +func (m *ListTransferLogsResponse) GetTransferMessages() []*TransferMessage { + if m != nil { + return m.TransferMessages + } + return nil +} + +func (m *ListTransferLogsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// A request to determine whether the user has valid credentials. This method +// is used to limit the number of OAuth popups in the user interface. The +// user id is inferred from the API call context. +// If the data source has the Google+ authorization type, this method +// returns false, as it cannot be determined whether the credentials are +// already valid merely based on the user id. +type CheckValidCredsRequest struct { + // The data source in the form: + // `projects/{project_id}/dataSources/{data_source_id}` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *CheckValidCredsRequest) Reset() { *m = CheckValidCredsRequest{} } +func (m *CheckValidCredsRequest) String() string { return proto.CompactTextString(m) } +func (*CheckValidCredsRequest) ProtoMessage() {} +func (*CheckValidCredsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } + +func (m *CheckValidCredsRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// A response indicating whether the credentials exist and are valid. +type CheckValidCredsResponse struct { + // If set to `true`, the credentials exist and are valid. + HasValidCreds bool `protobuf:"varint,1,opt,name=has_valid_creds,json=hasValidCreds" json:"has_valid_creds,omitempty"` +} + +func (m *CheckValidCredsResponse) Reset() { *m = CheckValidCredsResponse{} } +func (m *CheckValidCredsResponse) String() string { return proto.CompactTextString(m) } +func (*CheckValidCredsResponse) ProtoMessage() {} +func (*CheckValidCredsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } + +func (m *CheckValidCredsResponse) GetHasValidCreds() bool { + if m != nil { + return m.HasValidCreds + } + return false +} + +// A request to schedule transfer runs for a time range. +type ScheduleTransferRunsRequest struct { + // Transfer configuration name in the form: + // `projects/{project_id}/transferConfigs/{config_id}`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Start time of the range of transfer runs. For example, + // `"2017-05-25T00:00:00+00:00"`. + StartTime *google_protobuf2.Timestamp `protobuf:"bytes,2,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // End time of the range of transfer runs. For example, + // `"2017-05-30T00:00:00+00:00"`. + EndTime *google_protobuf2.Timestamp `protobuf:"bytes,3,opt,name=end_time,json=endTime" json:"end_time,omitempty"` +} + +func (m *ScheduleTransferRunsRequest) Reset() { *m = ScheduleTransferRunsRequest{} } +func (m *ScheduleTransferRunsRequest) String() string { return proto.CompactTextString(m) } +func (*ScheduleTransferRunsRequest) ProtoMessage() {} +func (*ScheduleTransferRunsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } + +func (m *ScheduleTransferRunsRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ScheduleTransferRunsRequest) GetStartTime() *google_protobuf2.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *ScheduleTransferRunsRequest) GetEndTime() *google_protobuf2.Timestamp { + if m != nil { + return m.EndTime + } + return nil +} + +// A response to schedule transfer runs for a time range. +type ScheduleTransferRunsResponse struct { + // The transfer runs that were scheduled. + Runs []*TransferRun `protobuf:"bytes,1,rep,name=runs" json:"runs,omitempty"` +} + +func (m *ScheduleTransferRunsResponse) Reset() { *m = ScheduleTransferRunsResponse{} } +func (m *ScheduleTransferRunsResponse) String() string { return proto.CompactTextString(m) } +func (*ScheduleTransferRunsResponse) ProtoMessage() {} +func (*ScheduleTransferRunsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } + +func (m *ScheduleTransferRunsResponse) GetRuns() []*TransferRun { + if m != nil { + return m.Runs + } + return nil +} + +func init() { + proto.RegisterType((*DataSourceParameter)(nil), "google.cloud.bigquery.datatransfer.v1.DataSourceParameter") + proto.RegisterType((*DataSource)(nil), "google.cloud.bigquery.datatransfer.v1.DataSource") + proto.RegisterType((*GetDataSourceRequest)(nil), "google.cloud.bigquery.datatransfer.v1.GetDataSourceRequest") + proto.RegisterType((*ListDataSourcesRequest)(nil), "google.cloud.bigquery.datatransfer.v1.ListDataSourcesRequest") + proto.RegisterType((*ListDataSourcesResponse)(nil), "google.cloud.bigquery.datatransfer.v1.ListDataSourcesResponse") + proto.RegisterType((*CreateTransferConfigRequest)(nil), "google.cloud.bigquery.datatransfer.v1.CreateTransferConfigRequest") + proto.RegisterType((*UpdateTransferConfigRequest)(nil), "google.cloud.bigquery.datatransfer.v1.UpdateTransferConfigRequest") + proto.RegisterType((*GetTransferConfigRequest)(nil), "google.cloud.bigquery.datatransfer.v1.GetTransferConfigRequest") + proto.RegisterType((*DeleteTransferConfigRequest)(nil), "google.cloud.bigquery.datatransfer.v1.DeleteTransferConfigRequest") + proto.RegisterType((*GetTransferRunRequest)(nil), "google.cloud.bigquery.datatransfer.v1.GetTransferRunRequest") + proto.RegisterType((*DeleteTransferRunRequest)(nil), "google.cloud.bigquery.datatransfer.v1.DeleteTransferRunRequest") + proto.RegisterType((*ListTransferConfigsRequest)(nil), "google.cloud.bigquery.datatransfer.v1.ListTransferConfigsRequest") + proto.RegisterType((*ListTransferConfigsResponse)(nil), "google.cloud.bigquery.datatransfer.v1.ListTransferConfigsResponse") + proto.RegisterType((*ListTransferRunsRequest)(nil), "google.cloud.bigquery.datatransfer.v1.ListTransferRunsRequest") + proto.RegisterType((*ListTransferRunsResponse)(nil), "google.cloud.bigquery.datatransfer.v1.ListTransferRunsResponse") + proto.RegisterType((*ListTransferLogsRequest)(nil), "google.cloud.bigquery.datatransfer.v1.ListTransferLogsRequest") + proto.RegisterType((*ListTransferLogsResponse)(nil), "google.cloud.bigquery.datatransfer.v1.ListTransferLogsResponse") + proto.RegisterType((*CheckValidCredsRequest)(nil), "google.cloud.bigquery.datatransfer.v1.CheckValidCredsRequest") + proto.RegisterType((*CheckValidCredsResponse)(nil), "google.cloud.bigquery.datatransfer.v1.CheckValidCredsResponse") + proto.RegisterType((*ScheduleTransferRunsRequest)(nil), "google.cloud.bigquery.datatransfer.v1.ScheduleTransferRunsRequest") + proto.RegisterType((*ScheduleTransferRunsResponse)(nil), "google.cloud.bigquery.datatransfer.v1.ScheduleTransferRunsResponse") + proto.RegisterEnum("google.cloud.bigquery.datatransfer.v1.DataSourceParameter_Type", DataSourceParameter_Type_name, DataSourceParameter_Type_value) + proto.RegisterEnum("google.cloud.bigquery.datatransfer.v1.DataSource_AuthorizationType", DataSource_AuthorizationType_name, DataSource_AuthorizationType_value) + proto.RegisterEnum("google.cloud.bigquery.datatransfer.v1.DataSource_DataRefreshType", DataSource_DataRefreshType_name, DataSource_DataRefreshType_value) + proto.RegisterEnum("google.cloud.bigquery.datatransfer.v1.ListTransferRunsRequest_RunAttempt", ListTransferRunsRequest_RunAttempt_name, ListTransferRunsRequest_RunAttempt_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for DataTransferService service + +type DataTransferServiceClient interface { + // Retrieves a supported data source and returns its settings, + // which can be used for UI rendering. + GetDataSource(ctx context.Context, in *GetDataSourceRequest, opts ...grpc.CallOption) (*DataSource, error) + // Lists supported data sources and returns their settings, + // which can be used for UI rendering. + ListDataSources(ctx context.Context, in *ListDataSourcesRequest, opts ...grpc.CallOption) (*ListDataSourcesResponse, error) + // Creates a new data transfer configuration. + CreateTransferConfig(ctx context.Context, in *CreateTransferConfigRequest, opts ...grpc.CallOption) (*TransferConfig, error) + // Updates a data transfer configuration. + // All fields must be set, even if they are not updated. + UpdateTransferConfig(ctx context.Context, in *UpdateTransferConfigRequest, opts ...grpc.CallOption) (*TransferConfig, error) + // Deletes a data transfer configuration, + // including any associated transfer runs and logs. + DeleteTransferConfig(ctx context.Context, in *DeleteTransferConfigRequest, opts ...grpc.CallOption) (*google_protobuf5.Empty, error) + // Returns information about a data transfer config. + GetTransferConfig(ctx context.Context, in *GetTransferConfigRequest, opts ...grpc.CallOption) (*TransferConfig, error) + // Returns information about all data transfers in the project. + ListTransferConfigs(ctx context.Context, in *ListTransferConfigsRequest, opts ...grpc.CallOption) (*ListTransferConfigsResponse, error) + // Creates transfer runs for a time range [start_time, end_time]. + // For each date - or whatever granularity the data source supports - in the + // range, one transfer run is created. + // Note that runs are created per UTC time in the time range. + ScheduleTransferRuns(ctx context.Context, in *ScheduleTransferRunsRequest, opts ...grpc.CallOption) (*ScheduleTransferRunsResponse, error) + // Returns information about the particular transfer run. + GetTransferRun(ctx context.Context, in *GetTransferRunRequest, opts ...grpc.CallOption) (*TransferRun, error) + // Deletes the specified transfer run. + DeleteTransferRun(ctx context.Context, in *DeleteTransferRunRequest, opts ...grpc.CallOption) (*google_protobuf5.Empty, error) + // Returns information about running and completed jobs. + ListTransferRuns(ctx context.Context, in *ListTransferRunsRequest, opts ...grpc.CallOption) (*ListTransferRunsResponse, error) + // Returns user facing log messages for the data transfer run. + ListTransferLogs(ctx context.Context, in *ListTransferLogsRequest, opts ...grpc.CallOption) (*ListTransferLogsResponse, error) + // Returns true if valid credentials exist for the given data source and + // requesting user. + // Some data sources doesn't support service account, so we need to talk to + // them on behalf of the end user. This API just checks whether we have OAuth + // token for the particular user, which is a pre-requisite before user can + // create a transfer config. + CheckValidCreds(ctx context.Context, in *CheckValidCredsRequest, opts ...grpc.CallOption) (*CheckValidCredsResponse, error) +} + +type dataTransferServiceClient struct { + cc *grpc.ClientConn +} + +func NewDataTransferServiceClient(cc *grpc.ClientConn) DataTransferServiceClient { + return &dataTransferServiceClient{cc} +} + +func (c *dataTransferServiceClient) GetDataSource(ctx context.Context, in *GetDataSourceRequest, opts ...grpc.CallOption) (*DataSource, error) { + out := new(DataSource) + err := grpc.Invoke(ctx, "/google.cloud.bigquery.datatransfer.v1.DataTransferService/GetDataSource", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dataTransferServiceClient) ListDataSources(ctx context.Context, in *ListDataSourcesRequest, opts ...grpc.CallOption) (*ListDataSourcesResponse, error) { + out := new(ListDataSourcesResponse) + err := grpc.Invoke(ctx, "/google.cloud.bigquery.datatransfer.v1.DataTransferService/ListDataSources", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dataTransferServiceClient) CreateTransferConfig(ctx context.Context, in *CreateTransferConfigRequest, opts ...grpc.CallOption) (*TransferConfig, error) { + out := new(TransferConfig) + err := grpc.Invoke(ctx, "/google.cloud.bigquery.datatransfer.v1.DataTransferService/CreateTransferConfig", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dataTransferServiceClient) UpdateTransferConfig(ctx context.Context, in *UpdateTransferConfigRequest, opts ...grpc.CallOption) (*TransferConfig, error) { + out := new(TransferConfig) + err := grpc.Invoke(ctx, "/google.cloud.bigquery.datatransfer.v1.DataTransferService/UpdateTransferConfig", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dataTransferServiceClient) DeleteTransferConfig(ctx context.Context, in *DeleteTransferConfigRequest, opts ...grpc.CallOption) (*google_protobuf5.Empty, error) { + out := new(google_protobuf5.Empty) + err := grpc.Invoke(ctx, "/google.cloud.bigquery.datatransfer.v1.DataTransferService/DeleteTransferConfig", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dataTransferServiceClient) GetTransferConfig(ctx context.Context, in *GetTransferConfigRequest, opts ...grpc.CallOption) (*TransferConfig, error) { + out := new(TransferConfig) + err := grpc.Invoke(ctx, "/google.cloud.bigquery.datatransfer.v1.DataTransferService/GetTransferConfig", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dataTransferServiceClient) ListTransferConfigs(ctx context.Context, in *ListTransferConfigsRequest, opts ...grpc.CallOption) (*ListTransferConfigsResponse, error) { + out := new(ListTransferConfigsResponse) + err := grpc.Invoke(ctx, "/google.cloud.bigquery.datatransfer.v1.DataTransferService/ListTransferConfigs", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dataTransferServiceClient) ScheduleTransferRuns(ctx context.Context, in *ScheduleTransferRunsRequest, opts ...grpc.CallOption) (*ScheduleTransferRunsResponse, error) { + out := new(ScheduleTransferRunsResponse) + err := grpc.Invoke(ctx, "/google.cloud.bigquery.datatransfer.v1.DataTransferService/ScheduleTransferRuns", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dataTransferServiceClient) GetTransferRun(ctx context.Context, in *GetTransferRunRequest, opts ...grpc.CallOption) (*TransferRun, error) { + out := new(TransferRun) + err := grpc.Invoke(ctx, "/google.cloud.bigquery.datatransfer.v1.DataTransferService/GetTransferRun", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dataTransferServiceClient) DeleteTransferRun(ctx context.Context, in *DeleteTransferRunRequest, opts ...grpc.CallOption) (*google_protobuf5.Empty, error) { + out := new(google_protobuf5.Empty) + err := grpc.Invoke(ctx, "/google.cloud.bigquery.datatransfer.v1.DataTransferService/DeleteTransferRun", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dataTransferServiceClient) ListTransferRuns(ctx context.Context, in *ListTransferRunsRequest, opts ...grpc.CallOption) (*ListTransferRunsResponse, error) { + out := new(ListTransferRunsResponse) + err := grpc.Invoke(ctx, "/google.cloud.bigquery.datatransfer.v1.DataTransferService/ListTransferRuns", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dataTransferServiceClient) ListTransferLogs(ctx context.Context, in *ListTransferLogsRequest, opts ...grpc.CallOption) (*ListTransferLogsResponse, error) { + out := new(ListTransferLogsResponse) + err := grpc.Invoke(ctx, "/google.cloud.bigquery.datatransfer.v1.DataTransferService/ListTransferLogs", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dataTransferServiceClient) CheckValidCreds(ctx context.Context, in *CheckValidCredsRequest, opts ...grpc.CallOption) (*CheckValidCredsResponse, error) { + out := new(CheckValidCredsResponse) + err := grpc.Invoke(ctx, "/google.cloud.bigquery.datatransfer.v1.DataTransferService/CheckValidCreds", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for DataTransferService service + +type DataTransferServiceServer interface { + // Retrieves a supported data source and returns its settings, + // which can be used for UI rendering. + GetDataSource(context.Context, *GetDataSourceRequest) (*DataSource, error) + // Lists supported data sources and returns their settings, + // which can be used for UI rendering. + ListDataSources(context.Context, *ListDataSourcesRequest) (*ListDataSourcesResponse, error) + // Creates a new data transfer configuration. + CreateTransferConfig(context.Context, *CreateTransferConfigRequest) (*TransferConfig, error) + // Updates a data transfer configuration. + // All fields must be set, even if they are not updated. + UpdateTransferConfig(context.Context, *UpdateTransferConfigRequest) (*TransferConfig, error) + // Deletes a data transfer configuration, + // including any associated transfer runs and logs. + DeleteTransferConfig(context.Context, *DeleteTransferConfigRequest) (*google_protobuf5.Empty, error) + // Returns information about a data transfer config. + GetTransferConfig(context.Context, *GetTransferConfigRequest) (*TransferConfig, error) + // Returns information about all data transfers in the project. + ListTransferConfigs(context.Context, *ListTransferConfigsRequest) (*ListTransferConfigsResponse, error) + // Creates transfer runs for a time range [start_time, end_time]. + // For each date - or whatever granularity the data source supports - in the + // range, one transfer run is created. + // Note that runs are created per UTC time in the time range. + ScheduleTransferRuns(context.Context, *ScheduleTransferRunsRequest) (*ScheduleTransferRunsResponse, error) + // Returns information about the particular transfer run. + GetTransferRun(context.Context, *GetTransferRunRequest) (*TransferRun, error) + // Deletes the specified transfer run. + DeleteTransferRun(context.Context, *DeleteTransferRunRequest) (*google_protobuf5.Empty, error) + // Returns information about running and completed jobs. + ListTransferRuns(context.Context, *ListTransferRunsRequest) (*ListTransferRunsResponse, error) + // Returns user facing log messages for the data transfer run. + ListTransferLogs(context.Context, *ListTransferLogsRequest) (*ListTransferLogsResponse, error) + // Returns true if valid credentials exist for the given data source and + // requesting user. + // Some data sources doesn't support service account, so we need to talk to + // them on behalf of the end user. This API just checks whether we have OAuth + // token for the particular user, which is a pre-requisite before user can + // create a transfer config. + CheckValidCreds(context.Context, *CheckValidCredsRequest) (*CheckValidCredsResponse, error) +} + +func RegisterDataTransferServiceServer(s *grpc.Server, srv DataTransferServiceServer) { + s.RegisterService(&_DataTransferService_serviceDesc, srv) +} + +func _DataTransferService_GetDataSource_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetDataSourceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DataTransferServiceServer).GetDataSource(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.bigquery.datatransfer.v1.DataTransferService/GetDataSource", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DataTransferServiceServer).GetDataSource(ctx, req.(*GetDataSourceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DataTransferService_ListDataSources_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListDataSourcesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DataTransferServiceServer).ListDataSources(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.bigquery.datatransfer.v1.DataTransferService/ListDataSources", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DataTransferServiceServer).ListDataSources(ctx, req.(*ListDataSourcesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DataTransferService_CreateTransferConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateTransferConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DataTransferServiceServer).CreateTransferConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.bigquery.datatransfer.v1.DataTransferService/CreateTransferConfig", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DataTransferServiceServer).CreateTransferConfig(ctx, req.(*CreateTransferConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DataTransferService_UpdateTransferConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateTransferConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DataTransferServiceServer).UpdateTransferConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.bigquery.datatransfer.v1.DataTransferService/UpdateTransferConfig", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DataTransferServiceServer).UpdateTransferConfig(ctx, req.(*UpdateTransferConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DataTransferService_DeleteTransferConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteTransferConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DataTransferServiceServer).DeleteTransferConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.bigquery.datatransfer.v1.DataTransferService/DeleteTransferConfig", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DataTransferServiceServer).DeleteTransferConfig(ctx, req.(*DeleteTransferConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DataTransferService_GetTransferConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetTransferConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DataTransferServiceServer).GetTransferConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.bigquery.datatransfer.v1.DataTransferService/GetTransferConfig", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DataTransferServiceServer).GetTransferConfig(ctx, req.(*GetTransferConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DataTransferService_ListTransferConfigs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListTransferConfigsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DataTransferServiceServer).ListTransferConfigs(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.bigquery.datatransfer.v1.DataTransferService/ListTransferConfigs", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DataTransferServiceServer).ListTransferConfigs(ctx, req.(*ListTransferConfigsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DataTransferService_ScheduleTransferRuns_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ScheduleTransferRunsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DataTransferServiceServer).ScheduleTransferRuns(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.bigquery.datatransfer.v1.DataTransferService/ScheduleTransferRuns", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DataTransferServiceServer).ScheduleTransferRuns(ctx, req.(*ScheduleTransferRunsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DataTransferService_GetTransferRun_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetTransferRunRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DataTransferServiceServer).GetTransferRun(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.bigquery.datatransfer.v1.DataTransferService/GetTransferRun", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DataTransferServiceServer).GetTransferRun(ctx, req.(*GetTransferRunRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DataTransferService_DeleteTransferRun_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteTransferRunRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DataTransferServiceServer).DeleteTransferRun(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.bigquery.datatransfer.v1.DataTransferService/DeleteTransferRun", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DataTransferServiceServer).DeleteTransferRun(ctx, req.(*DeleteTransferRunRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DataTransferService_ListTransferRuns_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListTransferRunsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DataTransferServiceServer).ListTransferRuns(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.bigquery.datatransfer.v1.DataTransferService/ListTransferRuns", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DataTransferServiceServer).ListTransferRuns(ctx, req.(*ListTransferRunsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DataTransferService_ListTransferLogs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListTransferLogsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DataTransferServiceServer).ListTransferLogs(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.bigquery.datatransfer.v1.DataTransferService/ListTransferLogs", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DataTransferServiceServer).ListTransferLogs(ctx, req.(*ListTransferLogsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DataTransferService_CheckValidCreds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CheckValidCredsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DataTransferServiceServer).CheckValidCreds(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.bigquery.datatransfer.v1.DataTransferService/CheckValidCreds", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DataTransferServiceServer).CheckValidCreds(ctx, req.(*CheckValidCredsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _DataTransferService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.bigquery.datatransfer.v1.DataTransferService", + HandlerType: (*DataTransferServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetDataSource", + Handler: _DataTransferService_GetDataSource_Handler, + }, + { + MethodName: "ListDataSources", + Handler: _DataTransferService_ListDataSources_Handler, + }, + { + MethodName: "CreateTransferConfig", + Handler: _DataTransferService_CreateTransferConfig_Handler, + }, + { + MethodName: "UpdateTransferConfig", + Handler: _DataTransferService_UpdateTransferConfig_Handler, + }, + { + MethodName: "DeleteTransferConfig", + Handler: _DataTransferService_DeleteTransferConfig_Handler, + }, + { + MethodName: "GetTransferConfig", + Handler: _DataTransferService_GetTransferConfig_Handler, + }, + { + MethodName: "ListTransferConfigs", + Handler: _DataTransferService_ListTransferConfigs_Handler, + }, + { + MethodName: "ScheduleTransferRuns", + Handler: _DataTransferService_ScheduleTransferRuns_Handler, + }, + { + MethodName: "GetTransferRun", + Handler: _DataTransferService_GetTransferRun_Handler, + }, + { + MethodName: "DeleteTransferRun", + Handler: _DataTransferService_DeleteTransferRun_Handler, + }, + { + MethodName: "ListTransferRuns", + Handler: _DataTransferService_ListTransferRuns_Handler, + }, + { + MethodName: "ListTransferLogs", + Handler: _DataTransferService_ListTransferLogs_Handler, + }, + { + MethodName: "CheckValidCreds", + Handler: _DataTransferService_CheckValidCreds_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/bigquery/datatransfer/v1/datatransfer.proto", +} + +func init() { + proto.RegisterFile("google/cloud/bigquery/datatransfer/v1/datatransfer.proto", fileDescriptor0) +} + +var fileDescriptor0 = []byte{ + // 2233 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0x4f, 0x73, 0x1b, 0x49, + 0x15, 0x67, 0xfc, 0x5f, 0x4f, 0xb6, 0x24, 0x77, 0x1c, 0x67, 0x22, 0x67, 0x17, 0xef, 0x14, 0x49, + 0x79, 0x0d, 0x48, 0x58, 0xd9, 0x2c, 0xbb, 0xce, 0x6e, 0x52, 0xb2, 0x24, 0x3b, 0x02, 0xdb, 0x72, + 0x46, 0x72, 0x02, 0xa9, 0x14, 0x43, 0x47, 0xd3, 0x96, 0x67, 0x3d, 0x9a, 0x99, 0x4c, 0xcf, 0x38, + 0x71, 0xa8, 0x5c, 0xf8, 0x0a, 0x1c, 0xa0, 0x8a, 0x0f, 0x00, 0xc5, 0x05, 0x8e, 0x7c, 0x00, 0x8a, + 0x02, 0xae, 0x1c, 0xf8, 0x53, 0x14, 0x1c, 0xa0, 0xa8, 0xe2, 0x02, 0x5f, 0x80, 0x03, 0xd5, 0x3d, + 0x3d, 0xd2, 0x48, 0x1a, 0xdb, 0x92, 0x4c, 0xd5, 0x9e, 0x3c, 0xdd, 0xef, 0xbd, 0xee, 0xf7, 0xeb, + 0xf7, 0xa7, 0x7f, 0x2d, 0xc3, 0x47, 0x2d, 0xdb, 0x6e, 0x99, 0x24, 0xdf, 0x34, 0x6d, 0x5f, 0xcf, + 0xbf, 0x30, 0x5a, 0x2f, 0x7d, 0xe2, 0x9e, 0xe5, 0x75, 0xec, 0x61, 0xcf, 0xc5, 0x16, 0x3d, 0x22, + 0x6e, 0xfe, 0x74, 0xa3, 0x67, 0x9c, 0x73, 0x5c, 0xdb, 0xb3, 0xd1, 0xed, 0xc0, 0x32, 0xc7, 0x2d, + 0x73, 0xa1, 0x65, 0xae, 0x47, 0xf3, 0x74, 0x23, 0x7b, 0x4b, 0x6c, 0x80, 0x1d, 0x23, 0x8f, 0x2d, + 0xcb, 0xf6, 0xb0, 0x67, 0xd8, 0x16, 0x0d, 0x16, 0xc9, 0x7e, 0x30, 0xdc, 0xf6, 0xbd, 0x5b, 0x67, + 0xdf, 0x15, 0x56, 0x7c, 0xf4, 0xc2, 0x3f, 0xca, 0xeb, 0xbe, 0xcb, 0x97, 0x15, 0xf2, 0x95, 0x7e, + 0x39, 0x69, 0x3b, 0xde, 0x99, 0x10, 0xae, 0xf6, 0x0b, 0x8f, 0x0c, 0x62, 0xea, 0x5a, 0x1b, 0xd3, + 0x13, 0xa1, 0xf1, 0xc5, 0x7e, 0x0d, 0xcf, 0x68, 0x13, 0xea, 0xe1, 0xb6, 0x73, 0xde, 0xfe, 0xaf, + 0x5c, 0xec, 0x38, 0xc4, 0x15, 0xa8, 0x94, 0x9f, 0xce, 0xc0, 0xb5, 0x32, 0xf6, 0x70, 0xdd, 0xf6, + 0xdd, 0x26, 0x39, 0xc0, 0x2e, 0x6e, 0x13, 0x8f, 0xb8, 0xe8, 0x26, 0xcc, 0x39, 0x6c, 0xa0, 0x19, + 0xba, 0x2c, 0xad, 0x4a, 0x6b, 0x09, 0x75, 0x96, 0x8f, 0xab, 0x3a, 0x7a, 0x0f, 0xe6, 0x75, 0x83, + 0x3a, 0x26, 0x3e, 0xd3, 0x2c, 0xdc, 0x26, 0xf2, 0x04, 0x17, 0x27, 0xc5, 0xdc, 0x3e, 0x6e, 0x13, + 0xb4, 0x0a, 0x49, 0x9d, 0xd0, 0xa6, 0x6b, 0x38, 0x0c, 0xaa, 0x3c, 0x29, 0x34, 0xba, 0x53, 0xa8, + 0x0e, 0x53, 0xde, 0x99, 0x43, 0xe4, 0xa9, 0x55, 0x69, 0x2d, 0x55, 0x78, 0x98, 0x1b, 0x2a, 0x42, + 0xb9, 0x18, 0x4f, 0x73, 0x8d, 0x33, 0x87, 0xa8, 0x7c, 0x31, 0x94, 0x85, 0x39, 0x97, 0xbc, 0xf4, + 0x0d, 0x97, 0xe8, 0xf2, 0xf4, 0xaa, 0xb4, 0x36, 0xa7, 0x76, 0xc6, 0x81, 0xcc, 0x21, 0xd8, 0x23, + 0xba, 0x3c, 0x13, 0xca, 0x82, 0x31, 0x7a, 0x1f, 0x32, 0xa7, 0xd8, 0x34, 0x74, 0x1e, 0x18, 0xcd, + 0x25, 0x2d, 0xf2, 0x5a, 0x9e, 0xe5, 0x3e, 0xa7, 0xbb, 0xf3, 0x2a, 0x9b, 0x46, 0xb7, 0x21, 0x85, + 0x4d, 0xd3, 0x7e, 0x45, 0x74, 0xed, 0x14, 0x9b, 0x3e, 0xa1, 0xf2, 0xdc, 0xea, 0xe4, 0x5a, 0x42, + 0x5d, 0x10, 0xb3, 0x4f, 0xf8, 0x24, 0xfa, 0x18, 0x12, 0x6d, 0xc3, 0x0a, 0x54, 0xe4, 0xc4, 0xaa, + 0xb4, 0x96, 0x2c, 0xdc, 0x0a, 0x31, 0x86, 0xa1, 0xc8, 0x95, 0x6d, 0xff, 0x85, 0x49, 0xb8, 0x85, + 0x3a, 0xd7, 0x36, 0x2c, 0xfe, 0xc5, 0x4d, 0xf1, 0x6b, 0x61, 0x0a, 0x43, 0x99, 0xe2, 0xd7, 0x81, + 0xa9, 0x0a, 0x33, 0x3c, 0x43, 0xa8, 0x9c, 0x5c, 0x9d, 0x5c, 0x4b, 0x16, 0x36, 0xc7, 0x3f, 0x56, + 0x55, 0xac, 0x84, 0xee, 0xc1, 0x72, 0xe4, 0x6c, 0xa2, 0x51, 0x9d, 0xe7, 0x27, 0x74, 0xbd, 0x2b, + 0x2d, 0x47, 0xe2, 0x9b, 0x83, 0x6b, 0x11, 0xb3, 0x63, 0x62, 0x3a, 0x9a, 0xef, 0x9a, 0xf2, 0x02, + 0xb7, 0x59, 0xec, 0x8a, 0x1e, 0x11, 0xd3, 0x39, 0x74, 0x4d, 0x74, 0x0b, 0x12, 0x46, 0xbb, 0xed, + 0x7b, 0xf8, 0x85, 0x49, 0xe4, 0x14, 0x8f, 0x4f, 0x77, 0x02, 0xc9, 0x30, 0xeb, 0x92, 0xa6, 0xef, + 0x52, 0x22, 0xa7, 0xb9, 0x2c, 0x1c, 0x2a, 0x06, 0x4c, 0xb1, 0x04, 0x40, 0x4b, 0x90, 0x69, 0x7c, + 0xfb, 0xa0, 0xa2, 0x1d, 0xee, 0xd7, 0x0f, 0x2a, 0xa5, 0xea, 0x76, 0xb5, 0x52, 0xce, 0x7c, 0x01, + 0x01, 0xcc, 0xd4, 0x1b, 0x6a, 0x75, 0x7f, 0x27, 0x23, 0xa1, 0x24, 0xcc, 0x56, 0xf7, 0x1b, 0x95, + 0x9d, 0x8a, 0x9a, 0x99, 0x60, 0x82, 0x72, 0xed, 0x70, 0x6b, 0xb7, 0x92, 0x99, 0x64, 0x82, 0xad, + 0x5a, 0x6d, 0xb7, 0x52, 0xdc, 0xcf, 0x4c, 0x31, 0x81, 0x5a, 0x29, 0xd5, 0xd4, 0x72, 0x66, 0x1a, + 0x2d, 0x40, 0xe2, 0x60, 0xf7, 0xb0, 0xae, 0x1d, 0x14, 0x77, 0x2a, 0x99, 0x19, 0xe5, 0xbf, 0x09, + 0x80, 0xee, 0x49, 0x21, 0x04, 0x53, 0x3c, 0xfd, 0x83, 0xea, 0xe0, 0xdf, 0xe8, 0x4b, 0x90, 0x62, + 0x67, 0xab, 0x51, 0xae, 0xc2, 0x6a, 0x27, 0x28, 0x8e, 0x79, 0xbd, 0x63, 0x17, 0x53, 0x40, 0x93, + 0x97, 0x16, 0xd0, 0xd4, 0x60, 0x01, 0xad, 0x40, 0xa2, 0x69, 0x1a, 0xc4, 0xf2, 0xd8, 0x2e, 0xd3, + 0x5c, 0x3e, 0x17, 0x4c, 0x54, 0x75, 0xb4, 0x0c, 0x33, 0xb4, 0x69, 0x3b, 0x84, 0xca, 0x33, 0x3c, + 0x3b, 0xc5, 0x08, 0x7d, 0x0b, 0x16, 0xc2, 0xb8, 0x6b, 0xbc, 0xfc, 0x66, 0x79, 0xf9, 0xdd, 0x1d, + 0x32, 0x4f, 0x1a, 0xe2, 0x9b, 0x97, 0xdc, 0xbc, 0x17, 0x19, 0xa1, 0x07, 0xb0, 0x42, 0x7d, 0xc7, + 0xb1, 0x5d, 0x8f, 0x6a, 0x6d, 0xdf, 0xf4, 0x0c, 0xc7, 0x24, 0x5a, 0xa8, 0xc1, 0x8a, 0x84, 0x45, + 0xed, 0x66, 0xa8, 0xb2, 0x27, 0x34, 0xc2, 0x05, 0x29, 0xfa, 0x10, 0x6e, 0xf8, 0x8e, 0x8e, 0x3d, + 0xa2, 0xe9, 0x04, 0xeb, 0xa6, 0x61, 0x11, 0x8d, 0x92, 0xa6, 0x6d, 0xe9, 0x94, 0x97, 0xcf, 0xb4, + 0x7a, 0x3d, 0x10, 0x97, 0x85, 0xb4, 0x1e, 0x08, 0x59, 0xe9, 0xea, 0xe4, 0x08, 0xfb, 0xa6, 0xa7, + 0xd1, 0xe6, 0x31, 0xd1, 0x7d, 0x33, 0x28, 0x9a, 0x84, 0x9a, 0x16, 0xf3, 0x75, 0x31, 0x8d, 0x3e, + 0x02, 0xb9, 0xe3, 0x62, 0xd3, 0xa7, 0x9e, 0xdd, 0xee, 0x9a, 0x24, 0xb9, 0x7f, 0xcb, 0xa1, 0xbc, + 0xc4, 0xc5, 0x1d, 0xcb, 0x67, 0x00, 0x4e, 0x58, 0x18, 0x54, 0x9e, 0xbf, 0x72, 0x6d, 0x45, 0x56, + 0x63, 0x8d, 0xb6, 0xaf, 0x3a, 0x66, 0x8f, 0x45, 0x4d, 0xb8, 0x80, 0xb0, 0xef, 0x1d, 0xdb, 0xae, + 0xf1, 0x26, 0x28, 0x23, 0x1e, 0xb2, 0x14, 0x0f, 0x59, 0x69, 0xe4, 0xed, 0x73, 0xc5, 0xe8, 0x5a, + 0x3c, 0x84, 0x8b, 0xb8, 0x7f, 0x0a, 0xb5, 0x61, 0x91, 0x67, 0xb0, 0x4b, 0x8e, 0x5c, 0x42, 0x8f, + 0x83, 0x2d, 0xd3, 0x7c, 0xcb, 0xe2, 0xe8, 0x5b, 0xb2, 0x4f, 0x35, 0x58, 0x89, 0x6f, 0x98, 0xd6, + 0x7b, 0x27, 0xd0, 0x36, 0xac, 0x86, 0xe1, 0xeb, 0xd9, 0xf6, 0x95, 0x61, 0xe9, 0xf6, 0x2b, 0x4d, + 0xc7, 0x67, 0x54, 0xce, 0xf0, 0xf8, 0xdf, 0x12, 0x7a, 0x91, 0x25, 0x9f, 0x72, 0xa5, 0x32, 0x3e, + 0xa3, 0xe8, 0x6b, 0xb0, 0xd4, 0xc6, 0x96, 0x8f, 0x4d, 0xcd, 0xf5, 0x2d, 0xaa, 0xe9, 0x06, 0x65, + 0x7d, 0x43, 0x97, 0x17, 0x79, 0x5c, 0x51, 0x20, 0x53, 0x7d, 0x8b, 0x96, 0x85, 0x04, 0x1d, 0xc2, + 0xcd, 0xb6, 0x61, 0x19, 0x6d, 0xbf, 0x9b, 0x05, 0x9a, 0x61, 0x79, 0xc4, 0x3d, 0xc5, 0xa6, 0x8c, + 0x78, 0xdb, 0xbd, 0x39, 0xd8, 0x76, 0xc5, 0xe5, 0xad, 0xde, 0x10, 0xb6, 0x61, 0x8a, 0x54, 0x85, + 0xa5, 0x42, 0x61, 0x71, 0xe0, 0x9c, 0x91, 0x02, 0xef, 0x16, 0x0f, 0x1b, 0x8f, 0x6a, 0x6a, 0xf5, + 0x59, 0xb1, 0x51, 0xad, 0xed, 0x6b, 0x31, 0xad, 0x6a, 0x19, 0x50, 0xaf, 0x4e, 0xa9, 0x56, 0xae, + 0x64, 0x24, 0x66, 0xbb, 0x53, 0xab, 0xed, 0xec, 0x56, 0x34, 0xde, 0x8b, 0x62, 0x74, 0x26, 0x94, + 0x26, 0xa4, 0xfb, 0x4e, 0x1a, 0xbd, 0x07, 0xef, 0x94, 0x8b, 0x8d, 0xa2, 0xa6, 0x56, 0xb6, 0xd5, + 0x4a, 0xfd, 0x51, 0xdc, 0x8e, 0x08, 0x52, 0xf5, 0xdd, 0x6a, 0xb9, 0xba, 0xbf, 0xa3, 0x3d, 0xad, + 0xee, 0x97, 0x6b, 0x4f, 0x33, 0x12, 0xba, 0x09, 0xd7, 0x4b, 0x87, 0xf5, 0x46, 0x6d, 0x4f, 0xeb, + 0x13, 0x4d, 0x28, 0xeb, 0xb0, 0xb4, 0x43, 0xbc, 0x6e, 0x70, 0x55, 0xf2, 0xd2, 0x27, 0xd4, 0x8b, + 0xeb, 0x83, 0x8a, 0x09, 0xcb, 0xbb, 0x06, 0x8d, 0x28, 0xd3, 0x50, 0x7b, 0x19, 0x66, 0x1c, 0xec, + 0x12, 0xcb, 0x13, 0xfa, 0x62, 0x84, 0xde, 0x61, 0x25, 0xd6, 0x22, 0x9a, 0x67, 0x9f, 0x90, 0x90, + 0x30, 0x24, 0xd8, 0x4c, 0x83, 0x4d, 0xb0, 0x6e, 0xc7, 0xc5, 0xd4, 0x78, 0x13, 0x70, 0x86, 0x69, + 0x75, 0x8e, 0x4d, 0xd4, 0x8d, 0x37, 0x44, 0xf9, 0xa1, 0x04, 0x37, 0x06, 0xb6, 0xa3, 0x8e, 0x6d, + 0x51, 0x82, 0x1a, 0x30, 0x1f, 0xe9, 0xc8, 0x54, 0x96, 0x78, 0xf1, 0x6e, 0x8c, 0x9c, 0xca, 0x6a, + 0xb2, 0xdb, 0xc2, 0x29, 0xba, 0x03, 0x69, 0x8b, 0xbc, 0xf6, 0xb4, 0x88, 0xcb, 0x41, 0xa3, 0x5f, + 0x60, 0xd3, 0x07, 0xa1, 0xdb, 0xca, 0xaf, 0x24, 0x58, 0x29, 0xb9, 0x8c, 0x64, 0x84, 0x9d, 0xae, + 0x64, 0x5b, 0x47, 0x46, 0xeb, 0xb2, 0xd3, 0xf8, 0x0e, 0xa4, 0x3b, 0x7d, 0xba, 0xc9, 0x2d, 0xf8, + 0xfa, 0xc9, 0xc2, 0xbd, 0x11, 0x3b, 0xb5, 0xd8, 0x2e, 0xe5, 0xf5, 0x8c, 0xd1, 0x57, 0xfb, 0x3b, + 0x4b, 0xd3, 0xd6, 0xc3, 0x7b, 0xa8, 0xb7, 0x29, 0x94, 0x6c, 0x9d, 0x28, 0xff, 0x92, 0x60, 0xe5, + 0x90, 0xb7, 0xdf, 0x78, 0x18, 0x31, 0xee, 0x4a, 0x9f, 0x9f, 0xbb, 0xe8, 0x3e, 0x24, 0xc5, 0x5d, + 0xc2, 0x98, 0x32, 0x4f, 0x97, 0x64, 0x21, 0x3b, 0x50, 0xcc, 0xdb, 0x8c, 0xe0, 0xec, 0x61, 0x7a, + 0xa2, 0x42, 0xa0, 0xce, 0xbe, 0x95, 0x1c, 0xc8, 0x3b, 0xc4, 0x8b, 0xc7, 0x19, 0x97, 0xea, 0x1b, + 0xb0, 0x52, 0x26, 0x26, 0x39, 0xef, 0x68, 0xe2, 0x4c, 0xbe, 0x0c, 0xd7, 0x23, 0x5b, 0xa8, 0xbe, + 0x75, 0x91, 0x72, 0x0e, 0xe4, 0xde, 0xf5, 0x2f, 0xd1, 0xff, 0x91, 0x04, 0x59, 0x56, 0x0c, 0xbd, + 0xee, 0x5c, 0x5a, 0x7f, 0x77, 0x20, 0xdd, 0xcb, 0x5c, 0xa8, 0x3c, 0x11, 0x10, 0xdb, 0x28, 0x75, + 0xa1, 0x57, 0xaa, 0xd3, 0x9f, 0x48, 0xb0, 0x12, 0xeb, 0x9a, 0xa8, 0xd5, 0xef, 0x42, 0xa6, 0x2f, + 0x8d, 0xc2, 0x7a, 0x1d, 0x33, 0x8f, 0xd2, 0xbd, 0x79, 0x34, 0x7c, 0xdd, 0xfe, 0x75, 0x22, 0xe8, + 0x28, 0x91, 0x33, 0xbf, 0xf4, 0x04, 0x77, 0x61, 0x86, 0x7a, 0xd8, 0x23, 0xc1, 0xc1, 0xa5, 0x0a, + 0x1f, 0x8c, 0xe8, 0x73, 0x9d, 0x19, 0xab, 0x62, 0x8d, 0xab, 0x9c, 0x33, 0xfa, 0x0c, 0x92, 0xae, + 0x6f, 0x69, 0xd8, 0xf3, 0xd8, 0x63, 0x92, 0x93, 0xc3, 0x54, 0xa1, 0x3a, 0xa4, 0x3b, 0xe7, 0xc0, + 0xce, 0xa9, 0xbe, 0x55, 0x0c, 0x16, 0x54, 0xc1, 0xed, 0x7c, 0x2b, 0xf7, 0x00, 0xba, 0x12, 0xb4, + 0x02, 0x37, 0xd4, 0xc3, 0x7d, 0xad, 0xd8, 0x68, 0x54, 0xf6, 0x0e, 0x1a, 0x83, 0x64, 0x7c, 0xb7, + 0xd8, 0xa8, 0xd4, 0x1b, 0x19, 0x49, 0xf9, 0xb1, 0x04, 0xf2, 0xe0, 0x4e, 0x22, 0x0f, 0x9e, 0x46, + 0x58, 0x2a, 0xbb, 0xce, 0x45, 0x12, 0x14, 0x46, 0x3c, 0x50, 0x56, 0x28, 0x1d, 0x92, 0xca, 0x36, + 0x18, 0x3a, 0xfc, 0x7f, 0x96, 0x7a, 0xc3, 0xbf, 0x6b, 0xb7, 0x46, 0xbc, 0xc0, 0xa6, 0x2e, 0x0c, + 0xd8, 0x74, 0x5f, 0xc0, 0x4e, 0x60, 0xa1, 0x4d, 0x28, 0xe5, 0xe6, 0x67, 0x21, 0x6b, 0x4f, 0x15, + 0xb6, 0x47, 0x04, 0xbc, 0x17, 0xac, 0x91, 0x13, 0x7f, 0xeb, 0xe4, 0x94, 0xb8, 0x86, 0x77, 0xa6, + 0xce, 0x8b, 0xc5, 0x19, 0x31, 0xa0, 0xac, 0x0a, 0xe5, 0x41, 0x70, 0xe2, 0xe8, 0x9b, 0xb0, 0xd8, + 0x39, 0x7a, 0x61, 0x15, 0x1e, 0xff, 0x87, 0xe3, 0x79, 0xa3, 0x76, 0x6a, 0x5a, 0x4c, 0x0c, 0x1f, + 0x86, 0xaf, 0xc0, 0x72, 0xe9, 0x98, 0x34, 0x4f, 0x9e, 0xb0, 0xd7, 0x62, 0xc9, 0x25, 0x3a, 0xbd, + 0xa8, 0xf1, 0x15, 0xe1, 0xc6, 0x80, 0xb6, 0x40, 0x75, 0x07, 0xd2, 0xc7, 0x98, 0x6a, 0xfc, 0xd5, + 0xa9, 0x35, 0x99, 0x88, 0x5b, 0xce, 0xa9, 0x0b, 0xc7, 0x98, 0x76, 0xf5, 0x79, 0x83, 0x0a, 0x19, + 0xdd, 0x28, 0xa5, 0xff, 0x31, 0x00, 0xf5, 0xb0, 0xeb, 0x69, 0x9e, 0x21, 0x7e, 0x0f, 0x89, 0xbb, + 0x6f, 0x1a, 0xe1, 0x4f, 0x33, 0x6a, 0x82, 0x6b, 0xb3, 0x31, 0xba, 0x07, 0x73, 0xc4, 0xd2, 0x03, + 0xc3, 0xc9, 0x4b, 0x0d, 0x67, 0x89, 0xa5, 0xb3, 0x91, 0x72, 0x04, 0xb7, 0xe2, 0x1d, 0x15, 0x88, + 0xb7, 0x61, 0xea, 0x8a, 0x95, 0xc3, 0xed, 0x0b, 0x7f, 0xbc, 0x1e, 0xfc, 0x3c, 0xd4, 0x69, 0x52, + 0xc4, 0x3d, 0x35, 0x9a, 0x04, 0xfd, 0x52, 0x82, 0x85, 0x1e, 0x36, 0x88, 0xee, 0x0f, 0xb9, 0x47, + 0x1c, 0x87, 0xcc, 0x8e, 0xce, 0xc7, 0x94, 0xaf, 0x7f, 0xff, 0xf7, 0xff, 0xf8, 0xc1, 0xc4, 0x06, + 0xca, 0xe7, 0x4f, 0x37, 0xf2, 0xdf, 0x63, 0x19, 0xf0, 0xa9, 0xe3, 0xda, 0x9f, 0x91, 0xa6, 0x47, + 0xf3, 0xeb, 0x79, 0xd3, 0x6e, 0x06, 0x3f, 0xde, 0xe5, 0xd7, 0xf3, 0x11, 0xe2, 0x96, 0x5f, 0x7f, + 0x8b, 0x7e, 0x2b, 0x41, 0xba, 0x8f, 0x2d, 0xa2, 0x4f, 0x47, 0x68, 0x8e, 0x83, 0xa4, 0x36, 0xfb, + 0x60, 0x5c, 0xf3, 0x20, 0x5a, 0x7d, 0x58, 0x82, 0xa4, 0x3a, 0x07, 0xcd, 0xdb, 0x28, 0x1c, 0xf4, + 0x37, 0x09, 0x96, 0xe2, 0xf8, 0x25, 0xda, 0x1a, 0xd2, 0xa3, 0x0b, 0xc8, 0x69, 0x76, 0xbc, 0x4b, + 0x57, 0xd9, 0xe5, 0x60, 0xb6, 0x95, 0xbb, 0xc3, 0x80, 0xe9, 0xbb, 0xa0, 0x37, 0xfb, 0x79, 0x24, + 0xfa, 0x8f, 0x04, 0x4b, 0x71, 0xd4, 0x73, 0x68, 0x84, 0x17, 0xf0, 0xd6, 0x71, 0x11, 0x3e, 0xe7, + 0x08, 0x9f, 0x14, 0x4a, 0x1c, 0x61, 0x9f, 0xc7, 0xb9, 0x8b, 0x52, 0xb1, 0x0f, 0x6e, 0x7e, 0xfd, + 0xed, 0x20, 0xe2, 0x9f, 0x4b, 0xb0, 0x14, 0xc7, 0x28, 0x87, 0x46, 0x7c, 0x01, 0x1d, 0xcd, 0x2e, + 0x0f, 0x34, 0x97, 0x4a, 0xdb, 0xf1, 0xce, 0x94, 0xfb, 0x1c, 0xd2, 0xbd, 0xf5, 0xbb, 0x97, 0x56, + 0xd3, 0x20, 0x04, 0xf4, 0x1b, 0x09, 0x16, 0x07, 0x38, 0x33, 0x7a, 0x38, 0x7c, 0x43, 0xf8, 0xbf, + 0x46, 0x47, 0x40, 0x41, 0x63, 0x41, 0xf9, 0x93, 0x04, 0xd7, 0x62, 0x28, 0x2a, 0x2a, 0x8e, 0xc1, + 0x9e, 0x7a, 0x99, 0x77, 0x76, 0xeb, 0x2a, 0x4b, 0x88, 0x46, 0xd1, 0x8b, 0x6d, 0xb4, 0xda, 0x42, + 0xff, 0x96, 0x60, 0x29, 0xee, 0xd2, 0x18, 0x3a, 0xb1, 0x2e, 0xb8, 0x1a, 0xb3, 0xa5, 0x2b, 0xad, + 0x21, 0xe0, 0xed, 0x71, 0x78, 0x3b, 0xca, 0xd6, 0xe5, 0xf0, 0xe2, 0x4a, 0x29, 0xfc, 0x1d, 0x87, + 0xad, 0xb9, 0x29, 0xad, 0xa3, 0x5f, 0x4b, 0x90, 0xea, 0x7d, 0x68, 0xa1, 0x4f, 0x46, 0x4f, 0xca, + 0xee, 0x7b, 0x2b, 0x3b, 0xc6, 0x3d, 0xaa, 0x6c, 0x71, 0x4c, 0x9f, 0xa0, 0xcd, 0xd1, 0xd3, 0x31, + 0xcf, 0xae, 0x60, 0x96, 0x95, 0xbf, 0x90, 0x60, 0x71, 0xe0, 0x11, 0x38, 0x74, 0x81, 0x9d, 0xf7, + 0x7c, 0x3c, 0xb7, 0x19, 0x08, 0x97, 0xd7, 0xaf, 0xe2, 0xf2, 0x1f, 0x24, 0xc8, 0xf4, 0x13, 0x7c, + 0xf4, 0xe0, 0x6a, 0x6f, 0x90, 0xec, 0xc3, 0xb1, 0xed, 0x45, 0x82, 0xf5, 0x06, 0x63, 0xd4, 0x04, + 0xe3, 0xe0, 0xd0, 0x3f, 0xfb, 0x90, 0x31, 0xfe, 0x3c, 0x16, 0xb2, 0xc8, 0xab, 0x62, 0x2c, 0x64, + 0x51, 0xe2, 0xae, 0x3c, 0xe6, 0xc8, 0xbe, 0x89, 0xaa, 0xe3, 0x20, 0x0b, 0xa3, 0xd6, 0x91, 0x70, + 0x4c, 0x7f, 0x91, 0x20, 0xdd, 0xc7, 0xa8, 0x87, 0x26, 0x4a, 0xf1, 0xbc, 0x7d, 0x68, 0xa2, 0x74, + 0x0e, 0x91, 0x57, 0xbe, 0xc1, 0x51, 0x96, 0x95, 0x87, 0x23, 0x92, 0xbe, 0xcd, 0x66, 0xef, 0x82, + 0x9b, 0xd2, 0xfa, 0xd6, 0xdf, 0x25, 0x78, 0xbf, 0x69, 0xb7, 0x87, 0xf3, 0x68, 0x6b, 0x31, 0xca, + 0x82, 0x0f, 0x58, 0xbd, 0x1c, 0x48, 0xcf, 0x1e, 0x0b, 0xdb, 0x96, 0x6d, 0x62, 0xab, 0x95, 0xb3, + 0xdd, 0x56, 0xbe, 0x45, 0x2c, 0x5e, 0x4d, 0xf9, 0x40, 0x84, 0x1d, 0x83, 0x5e, 0xf2, 0x1f, 0xe3, + 0xfb, 0xd1, 0xf1, 0xcf, 0x26, 0x6e, 0xef, 0x04, 0x6b, 0x96, 0xb8, 0x3f, 0x5b, 0x46, 0xeb, 0x31, + 0xf7, 0x27, 0xba, 0x7d, 0xee, 0xc9, 0xc6, 0xef, 0x42, 0xbd, 0xe7, 0x5c, 0xef, 0x79, 0xa8, 0xf7, + 0x3c, 0xaa, 0xf7, 0xfc, 0xc9, 0xc6, 0x8b, 0x19, 0xee, 0xcd, 0xdd, 0xff, 0x05, 0x00, 0x00, 0xff, + 0xff, 0xa8, 0x04, 0x35, 0x66, 0x3d, 0x1f, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/bigquery/datatransfer/v1/transfer.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/bigquery/datatransfer/v1/transfer.pb.go new file mode 100644 index 0000000..7d51fe9 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/bigquery/datatransfer/v1/transfer.pb.go @@ -0,0 +1,531 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/bigquery/datatransfer/v1/transfer.proto + +package datatransfer + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/struct" +import google_protobuf2 "github.com/golang/protobuf/ptypes/timestamp" +import google_rpc "google.golang.org/genproto/googleapis/rpc/status" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Represents data transfer type. +type TransferType int32 + +const ( + // Invalid or Unknown transfer type placeholder. + TransferType_TRANSFER_TYPE_UNSPECIFIED TransferType = 0 + // Batch data transfer. + TransferType_BATCH TransferType = 1 + // Streaming data transfer. Streaming data source currently doesn't + // support multiple transfer configs per project. + TransferType_STREAMING TransferType = 2 +) + +var TransferType_name = map[int32]string{ + 0: "TRANSFER_TYPE_UNSPECIFIED", + 1: "BATCH", + 2: "STREAMING", +} +var TransferType_value = map[string]int32{ + "TRANSFER_TYPE_UNSPECIFIED": 0, + "BATCH": 1, + "STREAMING": 2, +} + +func (x TransferType) String() string { + return proto.EnumName(TransferType_name, int32(x)) +} +func (TransferType) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +// Represents data transfer run state. +type TransferState int32 + +const ( + // State placeholder. + TransferState_TRANSFER_STATE_UNSPECIFIED TransferState = 0 + // Data transfer is scheduled and is waiting to be picked up by + // data transfer backend. + TransferState_PENDING TransferState = 2 + // Data transfer is in progress. + TransferState_RUNNING TransferState = 3 + // Data transfer completed successsfully. + TransferState_SUCCEEDED TransferState = 4 + // Data transfer failed. + TransferState_FAILED TransferState = 5 + // Data transfer is cancelled. + TransferState_CANCELLED TransferState = 6 +) + +var TransferState_name = map[int32]string{ + 0: "TRANSFER_STATE_UNSPECIFIED", + 2: "PENDING", + 3: "RUNNING", + 4: "SUCCEEDED", + 5: "FAILED", + 6: "CANCELLED", +} +var TransferState_value = map[string]int32{ + "TRANSFER_STATE_UNSPECIFIED": 0, + "PENDING": 2, + "RUNNING": 3, + "SUCCEEDED": 4, + "FAILED": 5, + "CANCELLED": 6, +} + +func (x TransferState) String() string { + return proto.EnumName(TransferState_name, int32(x)) +} +func (TransferState) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +// Represents data transfer user facing message severity. +type TransferMessage_MessageSeverity int32 + +const ( + // No severity specified. + TransferMessage_MESSAGE_SEVERITY_UNSPECIFIED TransferMessage_MessageSeverity = 0 + // Informational message. + TransferMessage_INFO TransferMessage_MessageSeverity = 1 + // Warning message. + TransferMessage_WARNING TransferMessage_MessageSeverity = 2 + // Error message. + TransferMessage_ERROR TransferMessage_MessageSeverity = 3 +) + +var TransferMessage_MessageSeverity_name = map[int32]string{ + 0: "MESSAGE_SEVERITY_UNSPECIFIED", + 1: "INFO", + 2: "WARNING", + 3: "ERROR", +} +var TransferMessage_MessageSeverity_value = map[string]int32{ + "MESSAGE_SEVERITY_UNSPECIFIED": 0, + "INFO": 1, + "WARNING": 2, + "ERROR": 3, +} + +func (x TransferMessage_MessageSeverity) String() string { + return proto.EnumName(TransferMessage_MessageSeverity_name, int32(x)) +} +func (TransferMessage_MessageSeverity) EnumDescriptor() ([]byte, []int) { + return fileDescriptor1, []int{2, 0} +} + +// Represents a data transfer configuration. A transfer configuration +// contains all metadata needed to perform a data transfer. For example, +// `destination_dataset_id` specifies where data should be stored. +// When a new transfer configuration is created, the specified +// `destination_dataset_id` is created when needed and shared with the +// appropriate data source service account. +// Next id: 20 +type TransferConfig struct { + // The resource name of the transfer config. + // Transfer config names have the form + // `projects/{project_id}/transferConfigs/{config_id}`. + // Where `config_id` is usually a uuid, even though it is not + // guaranteed or required. The name is ignored when creating a transfer + // config. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The BigQuery target dataset id. + DestinationDatasetId string `protobuf:"bytes,2,opt,name=destination_dataset_id,json=destinationDatasetId" json:"destination_dataset_id,omitempty"` + // User specified display name for the data transfer. + DisplayName string `protobuf:"bytes,3,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // Data source id. Cannot be changed once data transfer is created. + DataSourceId string `protobuf:"bytes,5,opt,name=data_source_id,json=dataSourceId" json:"data_source_id,omitempty"` + // Data transfer specific parameters. + Params *google_protobuf1.Struct `protobuf:"bytes,9,opt,name=params" json:"params,omitempty"` + // Data transfer schedule. + // If the data source does not support a custom schedule, this should be + // empty. If it is empty, the default value for the data source will be + // used. + // The specified times are in UTC. + // Examples of valid format: + // `1st,3rd monday of month 15:30`, + // `every wed,fri of jan,jun 13:15`, and + // `first sunday of quarter 00:00`. + // See more explanation about the format here: + // https://cloud.google.com/appengine/docs/flexible/python/scheduling-jobs-with-cron-yaml#the_schedule_format + // NOTE: the granularity should be at least 8 hours, or less frequent. + Schedule string `protobuf:"bytes,7,opt,name=schedule" json:"schedule,omitempty"` + // The number of days to look back to automatically refresh the data. + // For example, if `data_refresh_window_days = 10`, then every day + // BigQuery reingests data for [today-10, today-1], rather than ingesting data + // for just [today-1]. + // Only valid if the data source supports the feature. Set the value to 0 + // to use the default value. + DataRefreshWindowDays int32 `protobuf:"varint,12,opt,name=data_refresh_window_days,json=dataRefreshWindowDays" json:"data_refresh_window_days,omitempty"` + // Is this config disabled. When set to true, no runs are scheduled + // for a given transfer. + Disabled bool `protobuf:"varint,13,opt,name=disabled" json:"disabled,omitempty"` + // Output only. Data transfer modification time. Ignored by server on input. + UpdateTime *google_protobuf2.Timestamp `protobuf:"bytes,4,opt,name=update_time,json=updateTime" json:"update_time,omitempty"` + // Output only. Next time when data transfer will run. + NextRunTime *google_protobuf2.Timestamp `protobuf:"bytes,8,opt,name=next_run_time,json=nextRunTime" json:"next_run_time,omitempty"` + // Output only. State of the most recently updated transfer run. + State TransferState `protobuf:"varint,10,opt,name=state,enum=google.cloud.bigquery.datatransfer.v1.TransferState" json:"state,omitempty"` + // Output only. Unique ID of the user on whose behalf transfer is done. + // Applicable only to data sources that do not support service accounts. + // When set to 0, the data source service account credentials are used. + // May be negative. Note, that this identifier is not stable. + // It may change over time even for the same user. + UserId int64 `protobuf:"varint,11,opt,name=user_id,json=userId" json:"user_id,omitempty"` + // Output only. Region in which BigQuery dataset is located. + DatasetRegion string `protobuf:"bytes,14,opt,name=dataset_region,json=datasetRegion" json:"dataset_region,omitempty"` +} + +func (m *TransferConfig) Reset() { *m = TransferConfig{} } +func (m *TransferConfig) String() string { return proto.CompactTextString(m) } +func (*TransferConfig) ProtoMessage() {} +func (*TransferConfig) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *TransferConfig) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *TransferConfig) GetDestinationDatasetId() string { + if m != nil { + return m.DestinationDatasetId + } + return "" +} + +func (m *TransferConfig) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func (m *TransferConfig) GetDataSourceId() string { + if m != nil { + return m.DataSourceId + } + return "" +} + +func (m *TransferConfig) GetParams() *google_protobuf1.Struct { + if m != nil { + return m.Params + } + return nil +} + +func (m *TransferConfig) GetSchedule() string { + if m != nil { + return m.Schedule + } + return "" +} + +func (m *TransferConfig) GetDataRefreshWindowDays() int32 { + if m != nil { + return m.DataRefreshWindowDays + } + return 0 +} + +func (m *TransferConfig) GetDisabled() bool { + if m != nil { + return m.Disabled + } + return false +} + +func (m *TransferConfig) GetUpdateTime() *google_protobuf2.Timestamp { + if m != nil { + return m.UpdateTime + } + return nil +} + +func (m *TransferConfig) GetNextRunTime() *google_protobuf2.Timestamp { + if m != nil { + return m.NextRunTime + } + return nil +} + +func (m *TransferConfig) GetState() TransferState { + if m != nil { + return m.State + } + return TransferState_TRANSFER_STATE_UNSPECIFIED +} + +func (m *TransferConfig) GetUserId() int64 { + if m != nil { + return m.UserId + } + return 0 +} + +func (m *TransferConfig) GetDatasetRegion() string { + if m != nil { + return m.DatasetRegion + } + return "" +} + +// Represents a data transfer run. +// Next id: 27 +type TransferRun struct { + // The resource name of the transfer run. + // Transfer run names have the form + // `projects/{project_id}/locations/{location}/transferConfigs/{config_id}/runs/{run_id}`. + // The name is ignored when creating a transfer run. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Minimum time after which a transfer run can be started. + ScheduleTime *google_protobuf2.Timestamp `protobuf:"bytes,3,opt,name=schedule_time,json=scheduleTime" json:"schedule_time,omitempty"` + // For batch transfer runs, specifies the date and time that + // data should be ingested. + RunTime *google_protobuf2.Timestamp `protobuf:"bytes,10,opt,name=run_time,json=runTime" json:"run_time,omitempty"` + // Status of the transfer run. + ErrorStatus *google_rpc.Status `protobuf:"bytes,21,opt,name=error_status,json=errorStatus" json:"error_status,omitempty"` + // Output only. Time when transfer run was started. + // Parameter ignored by server for input requests. + StartTime *google_protobuf2.Timestamp `protobuf:"bytes,4,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // Output only. Time when transfer run ended. + // Parameter ignored by server for input requests. + EndTime *google_protobuf2.Timestamp `protobuf:"bytes,5,opt,name=end_time,json=endTime" json:"end_time,omitempty"` + // Output only. Last time the data transfer run state was updated. + UpdateTime *google_protobuf2.Timestamp `protobuf:"bytes,6,opt,name=update_time,json=updateTime" json:"update_time,omitempty"` + // Output only. Data transfer specific parameters. + Params *google_protobuf1.Struct `protobuf:"bytes,9,opt,name=params" json:"params,omitempty"` + // Output only. The BigQuery target dataset id. + DestinationDatasetId string `protobuf:"bytes,2,opt,name=destination_dataset_id,json=destinationDatasetId" json:"destination_dataset_id,omitempty"` + // Output only. Data source id. + DataSourceId string `protobuf:"bytes,7,opt,name=data_source_id,json=dataSourceId" json:"data_source_id,omitempty"` + // Data transfer run state. Ignored for input requests. + State TransferState `protobuf:"varint,8,opt,name=state,enum=google.cloud.bigquery.datatransfer.v1.TransferState" json:"state,omitempty"` + // Output only. Unique ID of the user on whose behalf transfer is done. + // Applicable only to data sources that do not support service accounts. + // When set to 0, the data source service account credentials are used. + // May be negative. Note, that this identifier is not stable. + // It may change over time even for the same user. + UserId int64 `protobuf:"varint,11,opt,name=user_id,json=userId" json:"user_id,omitempty"` + // Output only. Describes the schedule of this transfer run if it was + // created as part of a regular schedule. For batch transfer runs that are + // scheduled manually, this is empty. + // NOTE: the system might choose to delay the schedule depending on the + // current load, so `schedule_time` doesn't always matches this. + Schedule string `protobuf:"bytes,12,opt,name=schedule" json:"schedule,omitempty"` +} + +func (m *TransferRun) Reset() { *m = TransferRun{} } +func (m *TransferRun) String() string { return proto.CompactTextString(m) } +func (*TransferRun) ProtoMessage() {} +func (*TransferRun) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +func (m *TransferRun) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *TransferRun) GetScheduleTime() *google_protobuf2.Timestamp { + if m != nil { + return m.ScheduleTime + } + return nil +} + +func (m *TransferRun) GetRunTime() *google_protobuf2.Timestamp { + if m != nil { + return m.RunTime + } + return nil +} + +func (m *TransferRun) GetErrorStatus() *google_rpc.Status { + if m != nil { + return m.ErrorStatus + } + return nil +} + +func (m *TransferRun) GetStartTime() *google_protobuf2.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *TransferRun) GetEndTime() *google_protobuf2.Timestamp { + if m != nil { + return m.EndTime + } + return nil +} + +func (m *TransferRun) GetUpdateTime() *google_protobuf2.Timestamp { + if m != nil { + return m.UpdateTime + } + return nil +} + +func (m *TransferRun) GetParams() *google_protobuf1.Struct { + if m != nil { + return m.Params + } + return nil +} + +func (m *TransferRun) GetDestinationDatasetId() string { + if m != nil { + return m.DestinationDatasetId + } + return "" +} + +func (m *TransferRun) GetDataSourceId() string { + if m != nil { + return m.DataSourceId + } + return "" +} + +func (m *TransferRun) GetState() TransferState { + if m != nil { + return m.State + } + return TransferState_TRANSFER_STATE_UNSPECIFIED +} + +func (m *TransferRun) GetUserId() int64 { + if m != nil { + return m.UserId + } + return 0 +} + +func (m *TransferRun) GetSchedule() string { + if m != nil { + return m.Schedule + } + return "" +} + +// Represents a user facing message for a particular data transfer run. +type TransferMessage struct { + // Time when message was logged. + MessageTime *google_protobuf2.Timestamp `protobuf:"bytes,1,opt,name=message_time,json=messageTime" json:"message_time,omitempty"` + // Message severity. + Severity TransferMessage_MessageSeverity `protobuf:"varint,2,opt,name=severity,enum=google.cloud.bigquery.datatransfer.v1.TransferMessage_MessageSeverity" json:"severity,omitempty"` + // Message text. + MessageText string `protobuf:"bytes,3,opt,name=message_text,json=messageText" json:"message_text,omitempty"` +} + +func (m *TransferMessage) Reset() { *m = TransferMessage{} } +func (m *TransferMessage) String() string { return proto.CompactTextString(m) } +func (*TransferMessage) ProtoMessage() {} +func (*TransferMessage) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +func (m *TransferMessage) GetMessageTime() *google_protobuf2.Timestamp { + if m != nil { + return m.MessageTime + } + return nil +} + +func (m *TransferMessage) GetSeverity() TransferMessage_MessageSeverity { + if m != nil { + return m.Severity + } + return TransferMessage_MESSAGE_SEVERITY_UNSPECIFIED +} + +func (m *TransferMessage) GetMessageText() string { + if m != nil { + return m.MessageText + } + return "" +} + +func init() { + proto.RegisterType((*TransferConfig)(nil), "google.cloud.bigquery.datatransfer.v1.TransferConfig") + proto.RegisterType((*TransferRun)(nil), "google.cloud.bigquery.datatransfer.v1.TransferRun") + proto.RegisterType((*TransferMessage)(nil), "google.cloud.bigquery.datatransfer.v1.TransferMessage") + proto.RegisterEnum("google.cloud.bigquery.datatransfer.v1.TransferType", TransferType_name, TransferType_value) + proto.RegisterEnum("google.cloud.bigquery.datatransfer.v1.TransferState", TransferState_name, TransferState_value) + proto.RegisterEnum("google.cloud.bigquery.datatransfer.v1.TransferMessage_MessageSeverity", TransferMessage_MessageSeverity_name, TransferMessage_MessageSeverity_value) +} + +func init() { + proto.RegisterFile("google/cloud/bigquery/datatransfer/v1/transfer.proto", fileDescriptor1) +} + +var fileDescriptor1 = []byte{ + // 922 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xdd, 0x6e, 0xe3, 0x44, + 0x14, 0xc6, 0xf9, 0xcf, 0x71, 0x92, 0x8d, 0x46, 0x2c, 0x35, 0xd5, 0x02, 0xa1, 0xa2, 0x52, 0xd8, + 0x0b, 0x5b, 0x2d, 0x5d, 0x21, 0xb4, 0x02, 0x94, 0x1f, 0x27, 0x04, 0x6d, 0xb3, 0xd9, 0xb1, 0xdb, + 0xd5, 0xa2, 0x4a, 0xd6, 0x24, 0x9e, 0x7a, 0x2d, 0x25, 0xb6, 0x99, 0x19, 0x77, 0x9b, 0x87, 0xe0, + 0x25, 0xb8, 0xe4, 0x82, 0x07, 0xe1, 0x82, 0xd7, 0xe0, 0x35, 0x90, 0xc7, 0x76, 0x94, 0xcd, 0x56, + 0x4a, 0x8b, 0xc4, 0x55, 0xe7, 0xcc, 0xf9, 0xbe, 0xaf, 0xdf, 0x9c, 0x1f, 0x2b, 0x70, 0xe6, 0x85, + 0xa1, 0xb7, 0xa4, 0xc6, 0x62, 0x19, 0xc6, 0xae, 0x31, 0xf7, 0xbd, 0x5f, 0x63, 0xca, 0xd6, 0x86, + 0x4b, 0x04, 0x11, 0x8c, 0x04, 0xfc, 0x9a, 0x32, 0xe3, 0xe6, 0xc4, 0xc8, 0xcf, 0x7a, 0xc4, 0x42, + 0x11, 0xa2, 0xe3, 0x94, 0xa5, 0x4b, 0x96, 0x9e, 0xb3, 0xf4, 0x6d, 0x96, 0x7e, 0x73, 0x72, 0xf8, + 0x24, 0x13, 0x27, 0x91, 0x6f, 0x90, 0x20, 0x08, 0x05, 0x11, 0x7e, 0x18, 0xf0, 0x54, 0x64, 0x93, + 0x95, 0xd1, 0x3c, 0xbe, 0x36, 0xb8, 0x60, 0xf1, 0x42, 0x64, 0xd9, 0x2f, 0x76, 0xb3, 0xc2, 0x5f, + 0x51, 0x2e, 0xc8, 0x2a, 0xca, 0x00, 0x07, 0x19, 0x80, 0x45, 0x0b, 0x83, 0x0b, 0x22, 0xe2, 0x4c, + 0xf7, 0xe8, 0xef, 0x12, 0xb4, 0xec, 0xcc, 0xc5, 0x20, 0x0c, 0xae, 0x7d, 0x0f, 0x21, 0x28, 0x05, + 0x64, 0x45, 0x35, 0xa5, 0xa3, 0x74, 0xeb, 0x58, 0x9e, 0xd1, 0x19, 0x7c, 0xe2, 0x52, 0x2e, 0xfc, + 0x40, 0x9a, 0x72, 0x12, 0xef, 0x9c, 0x0a, 0xc7, 0x77, 0xb5, 0x82, 0x44, 0x7d, 0xbc, 0x95, 0x1d, + 0xa6, 0xc9, 0x89, 0x8b, 0xbe, 0x84, 0x86, 0xeb, 0xf3, 0x68, 0x49, 0xd6, 0x8e, 0x54, 0x2c, 0x4a, + 0xac, 0x9a, 0xdd, 0x4d, 0x13, 0xe1, 0xaf, 0xa0, 0x95, 0x88, 0x39, 0x3c, 0x8c, 0xd9, 0x82, 0x26, + 0x82, 0x65, 0x09, 0x6a, 0x24, 0xb7, 0x96, 0xbc, 0x9c, 0xb8, 0xc8, 0x80, 0x4a, 0x44, 0x18, 0x59, + 0x71, 0xad, 0xde, 0x51, 0xba, 0xea, 0xe9, 0x81, 0x9e, 0xd5, 0x34, 0x7f, 0xb0, 0x6e, 0xc9, 0x72, + 0xe0, 0x0c, 0x86, 0x0e, 0xa1, 0xc6, 0x17, 0x6f, 0xa9, 0x1b, 0x2f, 0xa9, 0x56, 0x95, 0x82, 0x9b, + 0x18, 0x7d, 0x0b, 0x9a, 0xfc, 0x97, 0x8c, 0x5e, 0x33, 0xca, 0xdf, 0x3a, 0xef, 0xfc, 0xc0, 0x0d, + 0xdf, 0x39, 0x2e, 0x59, 0x73, 0xad, 0xd1, 0x51, 0xba, 0x65, 0xfc, 0x38, 0xc9, 0xe3, 0x34, 0xfd, + 0x5a, 0x66, 0x87, 0x64, 0x2d, 0x45, 0x5d, 0x9f, 0x93, 0xf9, 0x92, 0xba, 0x5a, 0xb3, 0xa3, 0x74, + 0x6b, 0x78, 0x13, 0xa3, 0xe7, 0xa0, 0xc6, 0x91, 0x4b, 0x04, 0x75, 0x92, 0xd2, 0x6b, 0x25, 0x69, + 0xf3, 0xf0, 0x03, 0x9b, 0x76, 0xde, 0x17, 0x0c, 0x29, 0x3c, 0xb9, 0x40, 0x3f, 0x40, 0x33, 0xa0, + 0xb7, 0xc2, 0x61, 0x71, 0x90, 0xd2, 0x6b, 0x7b, 0xe9, 0x6a, 0x42, 0xc0, 0x71, 0x20, 0xf9, 0x3f, + 0x43, 0x39, 0x69, 0x2a, 0xd5, 0xa0, 0xa3, 0x74, 0x5b, 0xa7, 0x67, 0xfa, 0xbd, 0x26, 0x4e, 0xcf, + 0xfb, 0x6e, 0x25, 0x5c, 0x9c, 0x4a, 0xa0, 0x03, 0xa8, 0xc6, 0x9c, 0xb2, 0xa4, 0x13, 0x6a, 0x47, + 0xe9, 0x16, 0x71, 0x25, 0x09, 0x27, 0x2e, 0x3a, 0x4e, 0x3b, 0x95, 0xb4, 0x9d, 0x51, 0xcf, 0x0f, + 0x03, 0xad, 0x25, 0x0b, 0xdb, 0xcc, 0x6e, 0xb1, 0xbc, 0x3c, 0xfa, 0xad, 0x0c, 0x6a, 0x2e, 0x8c, + 0xe3, 0xe0, 0xce, 0x69, 0xfa, 0x11, 0x9a, 0x79, 0x37, 0xd2, 0xf7, 0x16, 0xf7, 0xbe, 0xb7, 0x91, + 0x13, 0xe4, 0x83, 0x9f, 0x41, 0x6d, 0x53, 0x2b, 0xd8, 0xcb, 0xad, 0xb2, 0xac, 0x4e, 0xcf, 0xa0, + 0x41, 0x19, 0x0b, 0x99, 0x93, 0xae, 0x80, 0xf6, 0x58, 0x52, 0x51, 0x4e, 0x65, 0xd1, 0x42, 0xb7, + 0x64, 0x06, 0xab, 0x12, 0x97, 0x06, 0xe8, 0x3b, 0x00, 0x2e, 0x08, 0x13, 0xf7, 0x6d, 0x6d, 0x5d, + 0xa2, 0x73, 0xa3, 0x34, 0x70, 0x53, 0x62, 0x79, 0xbf, 0x51, 0x1a, 0xb8, 0x92, 0xb6, 0x33, 0x4d, + 0x95, 0x07, 0x4d, 0xd3, 0x83, 0x97, 0xe5, 0xbf, 0x2d, 0xf7, 0x87, 0x9b, 0x5b, 0xbd, 0x63, 0x73, + 0x37, 0xa3, 0x59, 0xfb, 0x1f, 0x47, 0x73, 0x7b, 0xdb, 0x1b, 0xef, 0x6f, 0xfb, 0xd1, 0x9f, 0x05, + 0x78, 0x94, 0xab, 0x9d, 0x53, 0xce, 0x89, 0x47, 0xd1, 0xf7, 0xd0, 0x58, 0xa5, 0xc7, 0xb4, 0xbe, + 0xca, 0xfe, 0x75, 0xcb, 0xf0, 0xb2, 0xc0, 0x73, 0xa8, 0x71, 0x7a, 0x43, 0x99, 0x2f, 0xd6, 0xb2, + 0x42, 0xad, 0xd3, 0xd1, 0x03, 0x9f, 0x95, 0x19, 0xd1, 0xb3, 0xbf, 0x56, 0xa6, 0x86, 0x37, 0xba, + 0xc9, 0xa7, 0x73, 0x63, 0x91, 0xde, 0x8a, 0xfc, 0xd3, 0x99, 0xdb, 0xa0, 0xb7, 0xe2, 0xe8, 0x02, + 0x1e, 0xed, 0xf0, 0x51, 0x07, 0x9e, 0x9c, 0x9b, 0x96, 0xd5, 0x1b, 0x9b, 0x8e, 0x65, 0x5e, 0x9a, + 0x78, 0x62, 0xbf, 0x71, 0x2e, 0xa6, 0xd6, 0xcc, 0x1c, 0x4c, 0x46, 0x13, 0x73, 0xd8, 0xfe, 0x08, + 0xd5, 0xa0, 0x34, 0x99, 0x8e, 0x5e, 0xb6, 0x15, 0xa4, 0x42, 0xf5, 0x75, 0x0f, 0x4f, 0x27, 0xd3, + 0x71, 0xbb, 0x80, 0xea, 0x50, 0x36, 0x31, 0x7e, 0x89, 0xdb, 0xc5, 0xa7, 0x63, 0x68, 0xe4, 0x36, + 0xed, 0x75, 0x44, 0xd1, 0x67, 0xf0, 0xa9, 0x8d, 0x7b, 0x53, 0x6b, 0x64, 0x62, 0xc7, 0x7e, 0x33, + 0x33, 0x77, 0x04, 0xeb, 0x50, 0xee, 0xf7, 0xec, 0xc1, 0x4f, 0x6d, 0x05, 0x35, 0xa1, 0x6e, 0xd9, + 0xd8, 0xec, 0x9d, 0x4b, 0xcd, 0xa7, 0x1c, 0x9a, 0xef, 0xb5, 0x11, 0x7d, 0x0e, 0x87, 0x1b, 0x25, + 0xcb, 0xee, 0xd9, 0xbb, 0x52, 0x2a, 0x54, 0x67, 0xe6, 0x74, 0x98, 0x3a, 0x52, 0xa1, 0x8a, 0x2f, + 0xa6, 0xd2, 0x5e, 0x51, 0x2a, 0x5f, 0x0c, 0x06, 0xa6, 0x39, 0x34, 0x87, 0xed, 0x12, 0x02, 0xa8, + 0x8c, 0x7a, 0x93, 0x17, 0xe6, 0xb0, 0x5d, 0x4e, 0x52, 0x83, 0xde, 0x74, 0x60, 0xbe, 0x48, 0xc2, + 0x4a, 0xff, 0x1f, 0x05, 0xbe, 0x5e, 0x84, 0xab, 0xfb, 0xf5, 0xa3, 0xbf, 0x31, 0x38, 0x4b, 0x5a, + 0x3e, 0x53, 0x7e, 0x79, 0x95, 0xf1, 0xbc, 0x70, 0x49, 0x02, 0x4f, 0x0f, 0x99, 0x67, 0x78, 0x34, + 0x90, 0x03, 0x61, 0xa4, 0x29, 0x12, 0xf9, 0x7c, 0xcf, 0x0f, 0x80, 0xe7, 0xdb, 0xf1, 0xef, 0x85, + 0xf2, 0x78, 0xd0, 0x1f, 0xda, 0x7f, 0x14, 0x8e, 0xc7, 0xa9, 0xf6, 0x40, 0x7a, 0xea, 0xfb, 0xde, + 0x2b, 0xe9, 0x29, 0xd9, 0xa8, 0xdc, 0x86, 0x7e, 0x79, 0xf2, 0x57, 0x8e, 0xbb, 0x92, 0xb8, 0xab, + 0x1c, 0x77, 0xb5, 0x8d, 0xbb, 0xba, 0x3c, 0x99, 0x57, 0xa4, 0xab, 0x6f, 0xfe, 0x0d, 0x00, 0x00, + 0xff, 0xff, 0x0d, 0x74, 0xf0, 0x31, 0x95, 0x08, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/bigquery/logging/v1/audit_data.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/bigquery/logging/v1/audit_data.pb.go new file mode 100644 index 0000000..84044ac --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/bigquery/logging/v1/audit_data.pb.go @@ -0,0 +1,2225 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/bigquery/logging/v1/audit_data.proto + +/* +Package logging is a generated protocol buffer package. + +It is generated from these files: + google/cloud/bigquery/logging/v1/audit_data.proto + +It has these top-level messages: + AuditData + TableInsertRequest + TableUpdateRequest + TableInsertResponse + TableUpdateResponse + DatasetListRequest + DatasetInsertRequest + DatasetInsertResponse + DatasetUpdateRequest + DatasetUpdateResponse + JobInsertRequest + JobInsertResponse + JobQueryRequest + JobQueryResponse + JobGetQueryResultsRequest + JobGetQueryResultsResponse + JobQueryDoneResponse + JobCompletedEvent + TableDataListRequest + Table + TableInfo + TableViewDefinition + Dataset + DatasetInfo + BigQueryAcl + Job + JobConfiguration + TableDefinition + JobStatus + JobStatistics + DatasetName + TableName + JobName +*/ +package logging + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/duration" +import google_protobuf2 "github.com/golang/protobuf/ptypes/timestamp" +import google_rpc "google.golang.org/genproto/googleapis/rpc/status" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// BigQuery request and response messages for audit log. +// Note: `Table.schema` has been deprecated in favor of `Table.schemaJson`. +// `Table.schema` may continue to be present in your logs during this +// transition. +type AuditData struct { + // Request data for each BigQuery method. + // + // Types that are valid to be assigned to Request: + // *AuditData_TableInsertRequest + // *AuditData_TableUpdateRequest + // *AuditData_DatasetListRequest + // *AuditData_DatasetInsertRequest + // *AuditData_DatasetUpdateRequest + // *AuditData_JobInsertRequest + // *AuditData_JobQueryRequest + // *AuditData_JobGetQueryResultsRequest + // *AuditData_TableDataListRequest + Request isAuditData_Request `protobuf_oneof:"request"` + // Response data for each BigQuery method. + // + // Types that are valid to be assigned to Response: + // *AuditData_TableInsertResponse + // *AuditData_TableUpdateResponse + // *AuditData_DatasetInsertResponse + // *AuditData_DatasetUpdateResponse + // *AuditData_JobInsertResponse + // *AuditData_JobQueryResponse + // *AuditData_JobGetQueryResultsResponse + // *AuditData_JobQueryDoneResponse + Response isAuditData_Response `protobuf_oneof:"response"` + // A job completion event. + JobCompletedEvent *JobCompletedEvent `protobuf:"bytes,17,opt,name=job_completed_event,json=jobCompletedEvent" json:"job_completed_event,omitempty"` +} + +func (m *AuditData) Reset() { *m = AuditData{} } +func (m *AuditData) String() string { return proto.CompactTextString(m) } +func (*AuditData) ProtoMessage() {} +func (*AuditData) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +type isAuditData_Request interface { + isAuditData_Request() +} +type isAuditData_Response interface { + isAuditData_Response() +} + +type AuditData_TableInsertRequest struct { + TableInsertRequest *TableInsertRequest `protobuf:"bytes,1,opt,name=table_insert_request,json=tableInsertRequest,oneof"` +} +type AuditData_TableUpdateRequest struct { + TableUpdateRequest *TableUpdateRequest `protobuf:"bytes,16,opt,name=table_update_request,json=tableUpdateRequest,oneof"` +} +type AuditData_DatasetListRequest struct { + DatasetListRequest *DatasetListRequest `protobuf:"bytes,2,opt,name=dataset_list_request,json=datasetListRequest,oneof"` +} +type AuditData_DatasetInsertRequest struct { + DatasetInsertRequest *DatasetInsertRequest `protobuf:"bytes,3,opt,name=dataset_insert_request,json=datasetInsertRequest,oneof"` +} +type AuditData_DatasetUpdateRequest struct { + DatasetUpdateRequest *DatasetUpdateRequest `protobuf:"bytes,4,opt,name=dataset_update_request,json=datasetUpdateRequest,oneof"` +} +type AuditData_JobInsertRequest struct { + JobInsertRequest *JobInsertRequest `protobuf:"bytes,5,opt,name=job_insert_request,json=jobInsertRequest,oneof"` +} +type AuditData_JobQueryRequest struct { + JobQueryRequest *JobQueryRequest `protobuf:"bytes,6,opt,name=job_query_request,json=jobQueryRequest,oneof"` +} +type AuditData_JobGetQueryResultsRequest struct { + JobGetQueryResultsRequest *JobGetQueryResultsRequest `protobuf:"bytes,7,opt,name=job_get_query_results_request,json=jobGetQueryResultsRequest,oneof"` +} +type AuditData_TableDataListRequest struct { + TableDataListRequest *TableDataListRequest `protobuf:"bytes,8,opt,name=table_data_list_request,json=tableDataListRequest,oneof"` +} +type AuditData_TableInsertResponse struct { + TableInsertResponse *TableInsertResponse `protobuf:"bytes,9,opt,name=table_insert_response,json=tableInsertResponse,oneof"` +} +type AuditData_TableUpdateResponse struct { + TableUpdateResponse *TableUpdateResponse `protobuf:"bytes,10,opt,name=table_update_response,json=tableUpdateResponse,oneof"` +} +type AuditData_DatasetInsertResponse struct { + DatasetInsertResponse *DatasetInsertResponse `protobuf:"bytes,11,opt,name=dataset_insert_response,json=datasetInsertResponse,oneof"` +} +type AuditData_DatasetUpdateResponse struct { + DatasetUpdateResponse *DatasetUpdateResponse `protobuf:"bytes,12,opt,name=dataset_update_response,json=datasetUpdateResponse,oneof"` +} +type AuditData_JobInsertResponse struct { + JobInsertResponse *JobInsertResponse `protobuf:"bytes,18,opt,name=job_insert_response,json=jobInsertResponse,oneof"` +} +type AuditData_JobQueryResponse struct { + JobQueryResponse *JobQueryResponse `protobuf:"bytes,13,opt,name=job_query_response,json=jobQueryResponse,oneof"` +} +type AuditData_JobGetQueryResultsResponse struct { + JobGetQueryResultsResponse *JobGetQueryResultsResponse `protobuf:"bytes,14,opt,name=job_get_query_results_response,json=jobGetQueryResultsResponse,oneof"` +} +type AuditData_JobQueryDoneResponse struct { + JobQueryDoneResponse *JobQueryDoneResponse `protobuf:"bytes,15,opt,name=job_query_done_response,json=jobQueryDoneResponse,oneof"` +} + +func (*AuditData_TableInsertRequest) isAuditData_Request() {} +func (*AuditData_TableUpdateRequest) isAuditData_Request() {} +func (*AuditData_DatasetListRequest) isAuditData_Request() {} +func (*AuditData_DatasetInsertRequest) isAuditData_Request() {} +func (*AuditData_DatasetUpdateRequest) isAuditData_Request() {} +func (*AuditData_JobInsertRequest) isAuditData_Request() {} +func (*AuditData_JobQueryRequest) isAuditData_Request() {} +func (*AuditData_JobGetQueryResultsRequest) isAuditData_Request() {} +func (*AuditData_TableDataListRequest) isAuditData_Request() {} +func (*AuditData_TableInsertResponse) isAuditData_Response() {} +func (*AuditData_TableUpdateResponse) isAuditData_Response() {} +func (*AuditData_DatasetInsertResponse) isAuditData_Response() {} +func (*AuditData_DatasetUpdateResponse) isAuditData_Response() {} +func (*AuditData_JobInsertResponse) isAuditData_Response() {} +func (*AuditData_JobQueryResponse) isAuditData_Response() {} +func (*AuditData_JobGetQueryResultsResponse) isAuditData_Response() {} +func (*AuditData_JobQueryDoneResponse) isAuditData_Response() {} + +func (m *AuditData) GetRequest() isAuditData_Request { + if m != nil { + return m.Request + } + return nil +} +func (m *AuditData) GetResponse() isAuditData_Response { + if m != nil { + return m.Response + } + return nil +} + +func (m *AuditData) GetTableInsertRequest() *TableInsertRequest { + if x, ok := m.GetRequest().(*AuditData_TableInsertRequest); ok { + return x.TableInsertRequest + } + return nil +} + +func (m *AuditData) GetTableUpdateRequest() *TableUpdateRequest { + if x, ok := m.GetRequest().(*AuditData_TableUpdateRequest); ok { + return x.TableUpdateRequest + } + return nil +} + +func (m *AuditData) GetDatasetListRequest() *DatasetListRequest { + if x, ok := m.GetRequest().(*AuditData_DatasetListRequest); ok { + return x.DatasetListRequest + } + return nil +} + +func (m *AuditData) GetDatasetInsertRequest() *DatasetInsertRequest { + if x, ok := m.GetRequest().(*AuditData_DatasetInsertRequest); ok { + return x.DatasetInsertRequest + } + return nil +} + +func (m *AuditData) GetDatasetUpdateRequest() *DatasetUpdateRequest { + if x, ok := m.GetRequest().(*AuditData_DatasetUpdateRequest); ok { + return x.DatasetUpdateRequest + } + return nil +} + +func (m *AuditData) GetJobInsertRequest() *JobInsertRequest { + if x, ok := m.GetRequest().(*AuditData_JobInsertRequest); ok { + return x.JobInsertRequest + } + return nil +} + +func (m *AuditData) GetJobQueryRequest() *JobQueryRequest { + if x, ok := m.GetRequest().(*AuditData_JobQueryRequest); ok { + return x.JobQueryRequest + } + return nil +} + +func (m *AuditData) GetJobGetQueryResultsRequest() *JobGetQueryResultsRequest { + if x, ok := m.GetRequest().(*AuditData_JobGetQueryResultsRequest); ok { + return x.JobGetQueryResultsRequest + } + return nil +} + +func (m *AuditData) GetTableDataListRequest() *TableDataListRequest { + if x, ok := m.GetRequest().(*AuditData_TableDataListRequest); ok { + return x.TableDataListRequest + } + return nil +} + +func (m *AuditData) GetTableInsertResponse() *TableInsertResponse { + if x, ok := m.GetResponse().(*AuditData_TableInsertResponse); ok { + return x.TableInsertResponse + } + return nil +} + +func (m *AuditData) GetTableUpdateResponse() *TableUpdateResponse { + if x, ok := m.GetResponse().(*AuditData_TableUpdateResponse); ok { + return x.TableUpdateResponse + } + return nil +} + +func (m *AuditData) GetDatasetInsertResponse() *DatasetInsertResponse { + if x, ok := m.GetResponse().(*AuditData_DatasetInsertResponse); ok { + return x.DatasetInsertResponse + } + return nil +} + +func (m *AuditData) GetDatasetUpdateResponse() *DatasetUpdateResponse { + if x, ok := m.GetResponse().(*AuditData_DatasetUpdateResponse); ok { + return x.DatasetUpdateResponse + } + return nil +} + +func (m *AuditData) GetJobInsertResponse() *JobInsertResponse { + if x, ok := m.GetResponse().(*AuditData_JobInsertResponse); ok { + return x.JobInsertResponse + } + return nil +} + +func (m *AuditData) GetJobQueryResponse() *JobQueryResponse { + if x, ok := m.GetResponse().(*AuditData_JobQueryResponse); ok { + return x.JobQueryResponse + } + return nil +} + +func (m *AuditData) GetJobGetQueryResultsResponse() *JobGetQueryResultsResponse { + if x, ok := m.GetResponse().(*AuditData_JobGetQueryResultsResponse); ok { + return x.JobGetQueryResultsResponse + } + return nil +} + +func (m *AuditData) GetJobQueryDoneResponse() *JobQueryDoneResponse { + if x, ok := m.GetResponse().(*AuditData_JobQueryDoneResponse); ok { + return x.JobQueryDoneResponse + } + return nil +} + +func (m *AuditData) GetJobCompletedEvent() *JobCompletedEvent { + if m != nil { + return m.JobCompletedEvent + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*AuditData) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _AuditData_OneofMarshaler, _AuditData_OneofUnmarshaler, _AuditData_OneofSizer, []interface{}{ + (*AuditData_TableInsertRequest)(nil), + (*AuditData_TableUpdateRequest)(nil), + (*AuditData_DatasetListRequest)(nil), + (*AuditData_DatasetInsertRequest)(nil), + (*AuditData_DatasetUpdateRequest)(nil), + (*AuditData_JobInsertRequest)(nil), + (*AuditData_JobQueryRequest)(nil), + (*AuditData_JobGetQueryResultsRequest)(nil), + (*AuditData_TableDataListRequest)(nil), + (*AuditData_TableInsertResponse)(nil), + (*AuditData_TableUpdateResponse)(nil), + (*AuditData_DatasetInsertResponse)(nil), + (*AuditData_DatasetUpdateResponse)(nil), + (*AuditData_JobInsertResponse)(nil), + (*AuditData_JobQueryResponse)(nil), + (*AuditData_JobGetQueryResultsResponse)(nil), + (*AuditData_JobQueryDoneResponse)(nil), + } +} + +func _AuditData_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*AuditData) + // request + switch x := m.Request.(type) { + case *AuditData_TableInsertRequest: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.TableInsertRequest); err != nil { + return err + } + case *AuditData_TableUpdateRequest: + b.EncodeVarint(16<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.TableUpdateRequest); err != nil { + return err + } + case *AuditData_DatasetListRequest: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DatasetListRequest); err != nil { + return err + } + case *AuditData_DatasetInsertRequest: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DatasetInsertRequest); err != nil { + return err + } + case *AuditData_DatasetUpdateRequest: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DatasetUpdateRequest); err != nil { + return err + } + case *AuditData_JobInsertRequest: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.JobInsertRequest); err != nil { + return err + } + case *AuditData_JobQueryRequest: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.JobQueryRequest); err != nil { + return err + } + case *AuditData_JobGetQueryResultsRequest: + b.EncodeVarint(7<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.JobGetQueryResultsRequest); err != nil { + return err + } + case *AuditData_TableDataListRequest: + b.EncodeVarint(8<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.TableDataListRequest); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("AuditData.Request has unexpected type %T", x) + } + // response + switch x := m.Response.(type) { + case *AuditData_TableInsertResponse: + b.EncodeVarint(9<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.TableInsertResponse); err != nil { + return err + } + case *AuditData_TableUpdateResponse: + b.EncodeVarint(10<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.TableUpdateResponse); err != nil { + return err + } + case *AuditData_DatasetInsertResponse: + b.EncodeVarint(11<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DatasetInsertResponse); err != nil { + return err + } + case *AuditData_DatasetUpdateResponse: + b.EncodeVarint(12<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DatasetUpdateResponse); err != nil { + return err + } + case *AuditData_JobInsertResponse: + b.EncodeVarint(18<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.JobInsertResponse); err != nil { + return err + } + case *AuditData_JobQueryResponse: + b.EncodeVarint(13<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.JobQueryResponse); err != nil { + return err + } + case *AuditData_JobGetQueryResultsResponse: + b.EncodeVarint(14<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.JobGetQueryResultsResponse); err != nil { + return err + } + case *AuditData_JobQueryDoneResponse: + b.EncodeVarint(15<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.JobQueryDoneResponse); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("AuditData.Response has unexpected type %T", x) + } + return nil +} + +func _AuditData_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*AuditData) + switch tag { + case 1: // request.table_insert_request + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TableInsertRequest) + err := b.DecodeMessage(msg) + m.Request = &AuditData_TableInsertRequest{msg} + return true, err + case 16: // request.table_update_request + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TableUpdateRequest) + err := b.DecodeMessage(msg) + m.Request = &AuditData_TableUpdateRequest{msg} + return true, err + case 2: // request.dataset_list_request + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(DatasetListRequest) + err := b.DecodeMessage(msg) + m.Request = &AuditData_DatasetListRequest{msg} + return true, err + case 3: // request.dataset_insert_request + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(DatasetInsertRequest) + err := b.DecodeMessage(msg) + m.Request = &AuditData_DatasetInsertRequest{msg} + return true, err + case 4: // request.dataset_update_request + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(DatasetUpdateRequest) + err := b.DecodeMessage(msg) + m.Request = &AuditData_DatasetUpdateRequest{msg} + return true, err + case 5: // request.job_insert_request + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(JobInsertRequest) + err := b.DecodeMessage(msg) + m.Request = &AuditData_JobInsertRequest{msg} + return true, err + case 6: // request.job_query_request + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(JobQueryRequest) + err := b.DecodeMessage(msg) + m.Request = &AuditData_JobQueryRequest{msg} + return true, err + case 7: // request.job_get_query_results_request + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(JobGetQueryResultsRequest) + err := b.DecodeMessage(msg) + m.Request = &AuditData_JobGetQueryResultsRequest{msg} + return true, err + case 8: // request.table_data_list_request + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TableDataListRequest) + err := b.DecodeMessage(msg) + m.Request = &AuditData_TableDataListRequest{msg} + return true, err + case 9: // response.table_insert_response + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TableInsertResponse) + err := b.DecodeMessage(msg) + m.Response = &AuditData_TableInsertResponse{msg} + return true, err + case 10: // response.table_update_response + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TableUpdateResponse) + err := b.DecodeMessage(msg) + m.Response = &AuditData_TableUpdateResponse{msg} + return true, err + case 11: // response.dataset_insert_response + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(DatasetInsertResponse) + err := b.DecodeMessage(msg) + m.Response = &AuditData_DatasetInsertResponse{msg} + return true, err + case 12: // response.dataset_update_response + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(DatasetUpdateResponse) + err := b.DecodeMessage(msg) + m.Response = &AuditData_DatasetUpdateResponse{msg} + return true, err + case 18: // response.job_insert_response + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(JobInsertResponse) + err := b.DecodeMessage(msg) + m.Response = &AuditData_JobInsertResponse{msg} + return true, err + case 13: // response.job_query_response + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(JobQueryResponse) + err := b.DecodeMessage(msg) + m.Response = &AuditData_JobQueryResponse{msg} + return true, err + case 14: // response.job_get_query_results_response + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(JobGetQueryResultsResponse) + err := b.DecodeMessage(msg) + m.Response = &AuditData_JobGetQueryResultsResponse{msg} + return true, err + case 15: // response.job_query_done_response + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(JobQueryDoneResponse) + err := b.DecodeMessage(msg) + m.Response = &AuditData_JobQueryDoneResponse{msg} + return true, err + default: + return false, nil + } +} + +func _AuditData_OneofSizer(msg proto.Message) (n int) { + m := msg.(*AuditData) + // request + switch x := m.Request.(type) { + case *AuditData_TableInsertRequest: + s := proto.Size(x.TableInsertRequest) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *AuditData_TableUpdateRequest: + s := proto.Size(x.TableUpdateRequest) + n += proto.SizeVarint(16<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *AuditData_DatasetListRequest: + s := proto.Size(x.DatasetListRequest) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *AuditData_DatasetInsertRequest: + s := proto.Size(x.DatasetInsertRequest) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *AuditData_DatasetUpdateRequest: + s := proto.Size(x.DatasetUpdateRequest) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *AuditData_JobInsertRequest: + s := proto.Size(x.JobInsertRequest) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *AuditData_JobQueryRequest: + s := proto.Size(x.JobQueryRequest) + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *AuditData_JobGetQueryResultsRequest: + s := proto.Size(x.JobGetQueryResultsRequest) + n += proto.SizeVarint(7<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *AuditData_TableDataListRequest: + s := proto.Size(x.TableDataListRequest) + n += proto.SizeVarint(8<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + // response + switch x := m.Response.(type) { + case *AuditData_TableInsertResponse: + s := proto.Size(x.TableInsertResponse) + n += proto.SizeVarint(9<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *AuditData_TableUpdateResponse: + s := proto.Size(x.TableUpdateResponse) + n += proto.SizeVarint(10<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *AuditData_DatasetInsertResponse: + s := proto.Size(x.DatasetInsertResponse) + n += proto.SizeVarint(11<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *AuditData_DatasetUpdateResponse: + s := proto.Size(x.DatasetUpdateResponse) + n += proto.SizeVarint(12<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *AuditData_JobInsertResponse: + s := proto.Size(x.JobInsertResponse) + n += proto.SizeVarint(18<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *AuditData_JobQueryResponse: + s := proto.Size(x.JobQueryResponse) + n += proto.SizeVarint(13<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *AuditData_JobGetQueryResultsResponse: + s := proto.Size(x.JobGetQueryResultsResponse) + n += proto.SizeVarint(14<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *AuditData_JobQueryDoneResponse: + s := proto.Size(x.JobQueryDoneResponse) + n += proto.SizeVarint(15<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Table insert request. +type TableInsertRequest struct { + // The new table. + Resource *Table `protobuf:"bytes,1,opt,name=resource" json:"resource,omitempty"` +} + +func (m *TableInsertRequest) Reset() { *m = TableInsertRequest{} } +func (m *TableInsertRequest) String() string { return proto.CompactTextString(m) } +func (*TableInsertRequest) ProtoMessage() {} +func (*TableInsertRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *TableInsertRequest) GetResource() *Table { + if m != nil { + return m.Resource + } + return nil +} + +// Table update request. +type TableUpdateRequest struct { + // The table to be updated. + Resource *Table `protobuf:"bytes,1,opt,name=resource" json:"resource,omitempty"` +} + +func (m *TableUpdateRequest) Reset() { *m = TableUpdateRequest{} } +func (m *TableUpdateRequest) String() string { return proto.CompactTextString(m) } +func (*TableUpdateRequest) ProtoMessage() {} +func (*TableUpdateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *TableUpdateRequest) GetResource() *Table { + if m != nil { + return m.Resource + } + return nil +} + +// Table insert response. +type TableInsertResponse struct { + // Final state of the inserted table. + Resource *Table `protobuf:"bytes,1,opt,name=resource" json:"resource,omitempty"` +} + +func (m *TableInsertResponse) Reset() { *m = TableInsertResponse{} } +func (m *TableInsertResponse) String() string { return proto.CompactTextString(m) } +func (*TableInsertResponse) ProtoMessage() {} +func (*TableInsertResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *TableInsertResponse) GetResource() *Table { + if m != nil { + return m.Resource + } + return nil +} + +// Table update response. +type TableUpdateResponse struct { + // Final state of the updated table. + Resource *Table `protobuf:"bytes,1,opt,name=resource" json:"resource,omitempty"` +} + +func (m *TableUpdateResponse) Reset() { *m = TableUpdateResponse{} } +func (m *TableUpdateResponse) String() string { return proto.CompactTextString(m) } +func (*TableUpdateResponse) ProtoMessage() {} +func (*TableUpdateResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *TableUpdateResponse) GetResource() *Table { + if m != nil { + return m.Resource + } + return nil +} + +// Dataset list request. +type DatasetListRequest struct { + // Whether to list all datasets, including hidden ones. + ListAll bool `protobuf:"varint,1,opt,name=list_all,json=listAll" json:"list_all,omitempty"` +} + +func (m *DatasetListRequest) Reset() { *m = DatasetListRequest{} } +func (m *DatasetListRequest) String() string { return proto.CompactTextString(m) } +func (*DatasetListRequest) ProtoMessage() {} +func (*DatasetListRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *DatasetListRequest) GetListAll() bool { + if m != nil { + return m.ListAll + } + return false +} + +// Dataset insert request. +type DatasetInsertRequest struct { + // The dataset to be inserted. + Resource *Dataset `protobuf:"bytes,1,opt,name=resource" json:"resource,omitempty"` +} + +func (m *DatasetInsertRequest) Reset() { *m = DatasetInsertRequest{} } +func (m *DatasetInsertRequest) String() string { return proto.CompactTextString(m) } +func (*DatasetInsertRequest) ProtoMessage() {} +func (*DatasetInsertRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *DatasetInsertRequest) GetResource() *Dataset { + if m != nil { + return m.Resource + } + return nil +} + +// Dataset insert response. +type DatasetInsertResponse struct { + // Final state of the inserted dataset. + Resource *Dataset `protobuf:"bytes,1,opt,name=resource" json:"resource,omitempty"` +} + +func (m *DatasetInsertResponse) Reset() { *m = DatasetInsertResponse{} } +func (m *DatasetInsertResponse) String() string { return proto.CompactTextString(m) } +func (*DatasetInsertResponse) ProtoMessage() {} +func (*DatasetInsertResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *DatasetInsertResponse) GetResource() *Dataset { + if m != nil { + return m.Resource + } + return nil +} + +// Dataset update request. +type DatasetUpdateRequest struct { + // The dataset to be updated. + Resource *Dataset `protobuf:"bytes,1,opt,name=resource" json:"resource,omitempty"` +} + +func (m *DatasetUpdateRequest) Reset() { *m = DatasetUpdateRequest{} } +func (m *DatasetUpdateRequest) String() string { return proto.CompactTextString(m) } +func (*DatasetUpdateRequest) ProtoMessage() {} +func (*DatasetUpdateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *DatasetUpdateRequest) GetResource() *Dataset { + if m != nil { + return m.Resource + } + return nil +} + +// Dataset update response. +type DatasetUpdateResponse struct { + // Final state of the updated dataset. + Resource *Dataset `protobuf:"bytes,1,opt,name=resource" json:"resource,omitempty"` +} + +func (m *DatasetUpdateResponse) Reset() { *m = DatasetUpdateResponse{} } +func (m *DatasetUpdateResponse) String() string { return proto.CompactTextString(m) } +func (*DatasetUpdateResponse) ProtoMessage() {} +func (*DatasetUpdateResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *DatasetUpdateResponse) GetResource() *Dataset { + if m != nil { + return m.Resource + } + return nil +} + +// Job insert request. +type JobInsertRequest struct { + // Job insert request. + Resource *Job `protobuf:"bytes,1,opt,name=resource" json:"resource,omitempty"` +} + +func (m *JobInsertRequest) Reset() { *m = JobInsertRequest{} } +func (m *JobInsertRequest) String() string { return proto.CompactTextString(m) } +func (*JobInsertRequest) ProtoMessage() {} +func (*JobInsertRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *JobInsertRequest) GetResource() *Job { + if m != nil { + return m.Resource + } + return nil +} + +// Job insert response. +type JobInsertResponse struct { + // Job insert response. + Resource *Job `protobuf:"bytes,1,opt,name=resource" json:"resource,omitempty"` +} + +func (m *JobInsertResponse) Reset() { *m = JobInsertResponse{} } +func (m *JobInsertResponse) String() string { return proto.CompactTextString(m) } +func (*JobInsertResponse) ProtoMessage() {} +func (*JobInsertResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *JobInsertResponse) GetResource() *Job { + if m != nil { + return m.Resource + } + return nil +} + +// Job query request. +type JobQueryRequest struct { + // The query. + Query string `protobuf:"bytes,1,opt,name=query" json:"query,omitempty"` + // The maximum number of results. + MaxResults uint32 `protobuf:"varint,2,opt,name=max_results,json=maxResults" json:"max_results,omitempty"` + // The default dataset for tables that do not have a dataset specified. + DefaultDataset *DatasetName `protobuf:"bytes,3,opt,name=default_dataset,json=defaultDataset" json:"default_dataset,omitempty"` + // Project that the query should be charged to. + ProjectId string `protobuf:"bytes,4,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // If true, don't actually run the job. Just check that it would run. + DryRun bool `protobuf:"varint,5,opt,name=dry_run,json=dryRun" json:"dry_run,omitempty"` +} + +func (m *JobQueryRequest) Reset() { *m = JobQueryRequest{} } +func (m *JobQueryRequest) String() string { return proto.CompactTextString(m) } +func (*JobQueryRequest) ProtoMessage() {} +func (*JobQueryRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *JobQueryRequest) GetQuery() string { + if m != nil { + return m.Query + } + return "" +} + +func (m *JobQueryRequest) GetMaxResults() uint32 { + if m != nil { + return m.MaxResults + } + return 0 +} + +func (m *JobQueryRequest) GetDefaultDataset() *DatasetName { + if m != nil { + return m.DefaultDataset + } + return nil +} + +func (m *JobQueryRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *JobQueryRequest) GetDryRun() bool { + if m != nil { + return m.DryRun + } + return false +} + +// Job query response. +type JobQueryResponse struct { + // The total number of rows in the full query result set. + TotalResults uint64 `protobuf:"varint,1,opt,name=total_results,json=totalResults" json:"total_results,omitempty"` + // Information about the queried job. + Job *Job `protobuf:"bytes,2,opt,name=job" json:"job,omitempty"` +} + +func (m *JobQueryResponse) Reset() { *m = JobQueryResponse{} } +func (m *JobQueryResponse) String() string { return proto.CompactTextString(m) } +func (*JobQueryResponse) ProtoMessage() {} +func (*JobQueryResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +func (m *JobQueryResponse) GetTotalResults() uint64 { + if m != nil { + return m.TotalResults + } + return 0 +} + +func (m *JobQueryResponse) GetJob() *Job { + if m != nil { + return m.Job + } + return nil +} + +// Job getQueryResults request. +type JobGetQueryResultsRequest struct { + // Maximum number of results to return. + MaxResults uint32 `protobuf:"varint,1,opt,name=max_results,json=maxResults" json:"max_results,omitempty"` + // Zero-based row number at which to start. + StartRow uint64 `protobuf:"varint,2,opt,name=start_row,json=startRow" json:"start_row,omitempty"` +} + +func (m *JobGetQueryResultsRequest) Reset() { *m = JobGetQueryResultsRequest{} } +func (m *JobGetQueryResultsRequest) String() string { return proto.CompactTextString(m) } +func (*JobGetQueryResultsRequest) ProtoMessage() {} +func (*JobGetQueryResultsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +func (m *JobGetQueryResultsRequest) GetMaxResults() uint32 { + if m != nil { + return m.MaxResults + } + return 0 +} + +func (m *JobGetQueryResultsRequest) GetStartRow() uint64 { + if m != nil { + return m.StartRow + } + return 0 +} + +// Job getQueryResults response. +type JobGetQueryResultsResponse struct { + // Total number of results in query results. + TotalResults uint64 `protobuf:"varint,1,opt,name=total_results,json=totalResults" json:"total_results,omitempty"` + // The job that was created to run the query. + // It completed if `job.status.state` is `DONE`. + // It failed if `job.status.errorResult` is also present. + Job *Job `protobuf:"bytes,2,opt,name=job" json:"job,omitempty"` +} + +func (m *JobGetQueryResultsResponse) Reset() { *m = JobGetQueryResultsResponse{} } +func (m *JobGetQueryResultsResponse) String() string { return proto.CompactTextString(m) } +func (*JobGetQueryResultsResponse) ProtoMessage() {} +func (*JobGetQueryResultsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +func (m *JobGetQueryResultsResponse) GetTotalResults() uint64 { + if m != nil { + return m.TotalResults + } + return 0 +} + +func (m *JobGetQueryResultsResponse) GetJob() *Job { + if m != nil { + return m.Job + } + return nil +} + +// Job getQueryDone response. +type JobQueryDoneResponse struct { + // The job and status information. + // The job completed if `job.status.state` is `DONE`. + Job *Job `protobuf:"bytes,1,opt,name=job" json:"job,omitempty"` +} + +func (m *JobQueryDoneResponse) Reset() { *m = JobQueryDoneResponse{} } +func (m *JobQueryDoneResponse) String() string { return proto.CompactTextString(m) } +func (*JobQueryDoneResponse) ProtoMessage() {} +func (*JobQueryDoneResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } + +func (m *JobQueryDoneResponse) GetJob() *Job { + if m != nil { + return m.Job + } + return nil +} + +// Query job completed event. +type JobCompletedEvent struct { + // Name of the event. + EventName string `protobuf:"bytes,1,opt,name=event_name,json=eventName" json:"event_name,omitempty"` + // Job information. + Job *Job `protobuf:"bytes,2,opt,name=job" json:"job,omitempty"` +} + +func (m *JobCompletedEvent) Reset() { *m = JobCompletedEvent{} } +func (m *JobCompletedEvent) String() string { return proto.CompactTextString(m) } +func (*JobCompletedEvent) ProtoMessage() {} +func (*JobCompletedEvent) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } + +func (m *JobCompletedEvent) GetEventName() string { + if m != nil { + return m.EventName + } + return "" +} + +func (m *JobCompletedEvent) GetJob() *Job { + if m != nil { + return m.Job + } + return nil +} + +// Table data-list request. +type TableDataListRequest struct { + // Starting row offset. + StartRow uint64 `protobuf:"varint,1,opt,name=start_row,json=startRow" json:"start_row,omitempty"` + // Maximum number of results to return. + MaxResults uint32 `protobuf:"varint,2,opt,name=max_results,json=maxResults" json:"max_results,omitempty"` +} + +func (m *TableDataListRequest) Reset() { *m = TableDataListRequest{} } +func (m *TableDataListRequest) String() string { return proto.CompactTextString(m) } +func (*TableDataListRequest) ProtoMessage() {} +func (*TableDataListRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } + +func (m *TableDataListRequest) GetStartRow() uint64 { + if m != nil { + return m.StartRow + } + return 0 +} + +func (m *TableDataListRequest) GetMaxResults() uint32 { + if m != nil { + return m.MaxResults + } + return 0 +} + +// Describes a BigQuery table. +// See the [Table](/bigquery/docs/reference/v2/tables) API resource +// for more details on individual fields. +// Note: `Table.schema` has been deprecated in favor of `Table.schemaJson`. +// `Table.schema` may continue to be present in your logs during this +// transition. +type Table struct { + // The name of the table. + TableName *TableName `protobuf:"bytes,1,opt,name=table_name,json=tableName" json:"table_name,omitempty"` + // User-provided metadata for the table. + Info *TableInfo `protobuf:"bytes,2,opt,name=info" json:"info,omitempty"` + // A JSON representation of the table's schema. + SchemaJson string `protobuf:"bytes,8,opt,name=schema_json,json=schemaJson" json:"schema_json,omitempty"` + // If present, this is a virtual table defined by a SQL query. + View *TableViewDefinition `protobuf:"bytes,4,opt,name=view" json:"view,omitempty"` + // The expiration date for the table, after which the table + // is deleted and the storage reclaimed. + // If not present, the table persists indefinitely. + ExpireTime *google_protobuf2.Timestamp `protobuf:"bytes,5,opt,name=expire_time,json=expireTime" json:"expire_time,omitempty"` + // The time the table was created. + CreateTime *google_protobuf2.Timestamp `protobuf:"bytes,6,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // The time the table was last truncated + // by an operation with a `writeDisposition` of `WRITE_TRUNCATE`. + TruncateTime *google_protobuf2.Timestamp `protobuf:"bytes,7,opt,name=truncate_time,json=truncateTime" json:"truncate_time,omitempty"` +} + +func (m *Table) Reset() { *m = Table{} } +func (m *Table) String() string { return proto.CompactTextString(m) } +func (*Table) ProtoMessage() {} +func (*Table) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } + +func (m *Table) GetTableName() *TableName { + if m != nil { + return m.TableName + } + return nil +} + +func (m *Table) GetInfo() *TableInfo { + if m != nil { + return m.Info + } + return nil +} + +func (m *Table) GetSchemaJson() string { + if m != nil { + return m.SchemaJson + } + return "" +} + +func (m *Table) GetView() *TableViewDefinition { + if m != nil { + return m.View + } + return nil +} + +func (m *Table) GetExpireTime() *google_protobuf2.Timestamp { + if m != nil { + return m.ExpireTime + } + return nil +} + +func (m *Table) GetCreateTime() *google_protobuf2.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *Table) GetTruncateTime() *google_protobuf2.Timestamp { + if m != nil { + return m.TruncateTime + } + return nil +} + +// User-provided metadata for a table. +type TableInfo struct { + // A short name for the table, such as`"Analytics Data - Jan 2011"`. + FriendlyName string `protobuf:"bytes,1,opt,name=friendly_name,json=friendlyName" json:"friendly_name,omitempty"` + // A long description, perhaps several paragraphs, + // describing the table contents in detail. + Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` +} + +func (m *TableInfo) Reset() { *m = TableInfo{} } +func (m *TableInfo) String() string { return proto.CompactTextString(m) } +func (*TableInfo) ProtoMessage() {} +func (*TableInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } + +func (m *TableInfo) GetFriendlyName() string { + if m != nil { + return m.FriendlyName + } + return "" +} + +func (m *TableInfo) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +// Describes a virtual table defined by a SQL query. +type TableViewDefinition struct { + // SQL query defining the view. + Query string `protobuf:"bytes,1,opt,name=query" json:"query,omitempty"` +} + +func (m *TableViewDefinition) Reset() { *m = TableViewDefinition{} } +func (m *TableViewDefinition) String() string { return proto.CompactTextString(m) } +func (*TableViewDefinition) ProtoMessage() {} +func (*TableViewDefinition) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } + +func (m *TableViewDefinition) GetQuery() string { + if m != nil { + return m.Query + } + return "" +} + +// BigQuery dataset information. +// See the [Dataset](/bigquery/docs/reference/v2/datasets) API resource +// for more details on individual fields. +type Dataset struct { + // The name of the dataset. + DatasetName *DatasetName `protobuf:"bytes,1,opt,name=dataset_name,json=datasetName" json:"dataset_name,omitempty"` + // User-provided metadata for the dataset. + Info *DatasetInfo `protobuf:"bytes,2,opt,name=info" json:"info,omitempty"` + // The time the dataset was created. + CreateTime *google_protobuf2.Timestamp `protobuf:"bytes,4,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // The time the dataset was last modified. + UpdateTime *google_protobuf2.Timestamp `protobuf:"bytes,5,opt,name=update_time,json=updateTime" json:"update_time,omitempty"` + // The access control list for the dataset. + Acl *BigQueryAcl `protobuf:"bytes,6,opt,name=acl" json:"acl,omitempty"` + // If this field is present, each table that does not specify an + // expiration time is assigned an expiration time by adding this + // duration to the table's `createTime`. If this field is empty, + // there is no default table expiration time. + DefaultTableExpireDuration *google_protobuf1.Duration `protobuf:"bytes,8,opt,name=default_table_expire_duration,json=defaultTableExpireDuration" json:"default_table_expire_duration,omitempty"` +} + +func (m *Dataset) Reset() { *m = Dataset{} } +func (m *Dataset) String() string { return proto.CompactTextString(m) } +func (*Dataset) ProtoMessage() {} +func (*Dataset) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } + +func (m *Dataset) GetDatasetName() *DatasetName { + if m != nil { + return m.DatasetName + } + return nil +} + +func (m *Dataset) GetInfo() *DatasetInfo { + if m != nil { + return m.Info + } + return nil +} + +func (m *Dataset) GetCreateTime() *google_protobuf2.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *Dataset) GetUpdateTime() *google_protobuf2.Timestamp { + if m != nil { + return m.UpdateTime + } + return nil +} + +func (m *Dataset) GetAcl() *BigQueryAcl { + if m != nil { + return m.Acl + } + return nil +} + +func (m *Dataset) GetDefaultTableExpireDuration() *google_protobuf1.Duration { + if m != nil { + return m.DefaultTableExpireDuration + } + return nil +} + +// User-provided metadata for a dataset. +type DatasetInfo struct { + // A short name for the dataset, such as`"Analytics Data 2011"`. + FriendlyName string `protobuf:"bytes,1,opt,name=friendly_name,json=friendlyName" json:"friendly_name,omitempty"` + // A long description, perhaps several paragraphs, + // describing the dataset contents in detail. + Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` +} + +func (m *DatasetInfo) Reset() { *m = DatasetInfo{} } +func (m *DatasetInfo) String() string { return proto.CompactTextString(m) } +func (*DatasetInfo) ProtoMessage() {} +func (*DatasetInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } + +func (m *DatasetInfo) GetFriendlyName() string { + if m != nil { + return m.FriendlyName + } + return "" +} + +func (m *DatasetInfo) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +// An access control list. +type BigQueryAcl struct { + // Access control entry list. + Entries []*BigQueryAcl_Entry `protobuf:"bytes,1,rep,name=entries" json:"entries,omitempty"` +} + +func (m *BigQueryAcl) Reset() { *m = BigQueryAcl{} } +func (m *BigQueryAcl) String() string { return proto.CompactTextString(m) } +func (*BigQueryAcl) ProtoMessage() {} +func (*BigQueryAcl) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} } + +func (m *BigQueryAcl) GetEntries() []*BigQueryAcl_Entry { + if m != nil { + return m.Entries + } + return nil +} + +// Access control entry. +type BigQueryAcl_Entry struct { + // The granted role, which can be `READER`, `WRITER`, or `OWNER`. + Role string `protobuf:"bytes,1,opt,name=role" json:"role,omitempty"` + // Grants access to a group identified by an email address. + GroupEmail string `protobuf:"bytes,2,opt,name=group_email,json=groupEmail" json:"group_email,omitempty"` + // Grants access to a user identified by an email address. + UserEmail string `protobuf:"bytes,3,opt,name=user_email,json=userEmail" json:"user_email,omitempty"` + // Grants access to all members of a domain. + Domain string `protobuf:"bytes,4,opt,name=domain" json:"domain,omitempty"` + // Grants access to special groups. Valid groups are `PROJECT_OWNERS`, + // `PROJECT_READERS`, `PROJECT_WRITERS` and `ALL_AUTHENTICATED_USERS`. + SpecialGroup string `protobuf:"bytes,5,opt,name=special_group,json=specialGroup" json:"special_group,omitempty"` + // Grants access to a BigQuery View. + ViewName *TableName `protobuf:"bytes,6,opt,name=view_name,json=viewName" json:"view_name,omitempty"` +} + +func (m *BigQueryAcl_Entry) Reset() { *m = BigQueryAcl_Entry{} } +func (m *BigQueryAcl_Entry) String() string { return proto.CompactTextString(m) } +func (*BigQueryAcl_Entry) ProtoMessage() {} +func (*BigQueryAcl_Entry) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24, 0} } + +func (m *BigQueryAcl_Entry) GetRole() string { + if m != nil { + return m.Role + } + return "" +} + +func (m *BigQueryAcl_Entry) GetGroupEmail() string { + if m != nil { + return m.GroupEmail + } + return "" +} + +func (m *BigQueryAcl_Entry) GetUserEmail() string { + if m != nil { + return m.UserEmail + } + return "" +} + +func (m *BigQueryAcl_Entry) GetDomain() string { + if m != nil { + return m.Domain + } + return "" +} + +func (m *BigQueryAcl_Entry) GetSpecialGroup() string { + if m != nil { + return m.SpecialGroup + } + return "" +} + +func (m *BigQueryAcl_Entry) GetViewName() *TableName { + if m != nil { + return m.ViewName + } + return nil +} + +// Describes a job. +type Job struct { + // Job name. + JobName *JobName `protobuf:"bytes,1,opt,name=job_name,json=jobName" json:"job_name,omitempty"` + // Job configuration. + JobConfiguration *JobConfiguration `protobuf:"bytes,2,opt,name=job_configuration,json=jobConfiguration" json:"job_configuration,omitempty"` + // Job status. + JobStatus *JobStatus `protobuf:"bytes,3,opt,name=job_status,json=jobStatus" json:"job_status,omitempty"` + // Job statistics. + JobStatistics *JobStatistics `protobuf:"bytes,4,opt,name=job_statistics,json=jobStatistics" json:"job_statistics,omitempty"` +} + +func (m *Job) Reset() { *m = Job{} } +func (m *Job) String() string { return proto.CompactTextString(m) } +func (*Job) ProtoMessage() {} +func (*Job) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } + +func (m *Job) GetJobName() *JobName { + if m != nil { + return m.JobName + } + return nil +} + +func (m *Job) GetJobConfiguration() *JobConfiguration { + if m != nil { + return m.JobConfiguration + } + return nil +} + +func (m *Job) GetJobStatus() *JobStatus { + if m != nil { + return m.JobStatus + } + return nil +} + +func (m *Job) GetJobStatistics() *JobStatistics { + if m != nil { + return m.JobStatistics + } + return nil +} + +// Job configuration information. +// See the [Jobs](/bigquery/docs/reference/v2/jobs) API resource +// for more details on individual fields. +type JobConfiguration struct { + // Job configuration information. + // + // Types that are valid to be assigned to Configuration: + // *JobConfiguration_Query_ + // *JobConfiguration_Load_ + // *JobConfiguration_Extract_ + // *JobConfiguration_TableCopy_ + Configuration isJobConfiguration_Configuration `protobuf_oneof:"configuration"` + // If true, don't actually run the job. Just check that it would run. + DryRun bool `protobuf:"varint,9,opt,name=dry_run,json=dryRun" json:"dry_run,omitempty"` +} + +func (m *JobConfiguration) Reset() { *m = JobConfiguration{} } +func (m *JobConfiguration) String() string { return proto.CompactTextString(m) } +func (*JobConfiguration) ProtoMessage() {} +func (*JobConfiguration) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} } + +type isJobConfiguration_Configuration interface { + isJobConfiguration_Configuration() +} + +type JobConfiguration_Query_ struct { + Query *JobConfiguration_Query `protobuf:"bytes,5,opt,name=query,oneof"` +} +type JobConfiguration_Load_ struct { + Load *JobConfiguration_Load `protobuf:"bytes,6,opt,name=load,oneof"` +} +type JobConfiguration_Extract_ struct { + Extract *JobConfiguration_Extract `protobuf:"bytes,7,opt,name=extract,oneof"` +} +type JobConfiguration_TableCopy_ struct { + TableCopy *JobConfiguration_TableCopy `protobuf:"bytes,8,opt,name=table_copy,json=tableCopy,oneof"` +} + +func (*JobConfiguration_Query_) isJobConfiguration_Configuration() {} +func (*JobConfiguration_Load_) isJobConfiguration_Configuration() {} +func (*JobConfiguration_Extract_) isJobConfiguration_Configuration() {} +func (*JobConfiguration_TableCopy_) isJobConfiguration_Configuration() {} + +func (m *JobConfiguration) GetConfiguration() isJobConfiguration_Configuration { + if m != nil { + return m.Configuration + } + return nil +} + +func (m *JobConfiguration) GetQuery() *JobConfiguration_Query { + if x, ok := m.GetConfiguration().(*JobConfiguration_Query_); ok { + return x.Query + } + return nil +} + +func (m *JobConfiguration) GetLoad() *JobConfiguration_Load { + if x, ok := m.GetConfiguration().(*JobConfiguration_Load_); ok { + return x.Load + } + return nil +} + +func (m *JobConfiguration) GetExtract() *JobConfiguration_Extract { + if x, ok := m.GetConfiguration().(*JobConfiguration_Extract_); ok { + return x.Extract + } + return nil +} + +func (m *JobConfiguration) GetTableCopy() *JobConfiguration_TableCopy { + if x, ok := m.GetConfiguration().(*JobConfiguration_TableCopy_); ok { + return x.TableCopy + } + return nil +} + +func (m *JobConfiguration) GetDryRun() bool { + if m != nil { + return m.DryRun + } + return false +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*JobConfiguration) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _JobConfiguration_OneofMarshaler, _JobConfiguration_OneofUnmarshaler, _JobConfiguration_OneofSizer, []interface{}{ + (*JobConfiguration_Query_)(nil), + (*JobConfiguration_Load_)(nil), + (*JobConfiguration_Extract_)(nil), + (*JobConfiguration_TableCopy_)(nil), + } +} + +func _JobConfiguration_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*JobConfiguration) + // configuration + switch x := m.Configuration.(type) { + case *JobConfiguration_Query_: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Query); err != nil { + return err + } + case *JobConfiguration_Load_: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Load); err != nil { + return err + } + case *JobConfiguration_Extract_: + b.EncodeVarint(7<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Extract); err != nil { + return err + } + case *JobConfiguration_TableCopy_: + b.EncodeVarint(8<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.TableCopy); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("JobConfiguration.Configuration has unexpected type %T", x) + } + return nil +} + +func _JobConfiguration_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*JobConfiguration) + switch tag { + case 5: // configuration.query + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(JobConfiguration_Query) + err := b.DecodeMessage(msg) + m.Configuration = &JobConfiguration_Query_{msg} + return true, err + case 6: // configuration.load + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(JobConfiguration_Load) + err := b.DecodeMessage(msg) + m.Configuration = &JobConfiguration_Load_{msg} + return true, err + case 7: // configuration.extract + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(JobConfiguration_Extract) + err := b.DecodeMessage(msg) + m.Configuration = &JobConfiguration_Extract_{msg} + return true, err + case 8: // configuration.table_copy + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(JobConfiguration_TableCopy) + err := b.DecodeMessage(msg) + m.Configuration = &JobConfiguration_TableCopy_{msg} + return true, err + default: + return false, nil + } +} + +func _JobConfiguration_OneofSizer(msg proto.Message) (n int) { + m := msg.(*JobConfiguration) + // configuration + switch x := m.Configuration.(type) { + case *JobConfiguration_Query_: + s := proto.Size(x.Query) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *JobConfiguration_Load_: + s := proto.Size(x.Load) + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *JobConfiguration_Extract_: + s := proto.Size(x.Extract) + n += proto.SizeVarint(7<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *JobConfiguration_TableCopy_: + s := proto.Size(x.TableCopy) + n += proto.SizeVarint(8<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Describes a query job, which executes a SQL-like query. +type JobConfiguration_Query struct { + // The SQL query to run. + Query string `protobuf:"bytes,1,opt,name=query" json:"query,omitempty"` + // The table where results are written. + DestinationTable *TableName `protobuf:"bytes,2,opt,name=destination_table,json=destinationTable" json:"destination_table,omitempty"` + // Describes when a job is allowed to create a table: + // `CREATE_IF_NEEDED`, `CREATE_NEVER`. + CreateDisposition string `protobuf:"bytes,3,opt,name=create_disposition,json=createDisposition" json:"create_disposition,omitempty"` + // Describes how writes affect existing tables: + // `WRITE_TRUNCATE`, `WRITE_APPEND`, `WRITE_EMPTY`. + WriteDisposition string `protobuf:"bytes,4,opt,name=write_disposition,json=writeDisposition" json:"write_disposition,omitempty"` + // If a table name is specified without a dataset in a query, + // this dataset will be added to table name. + DefaultDataset *DatasetName `protobuf:"bytes,5,opt,name=default_dataset,json=defaultDataset" json:"default_dataset,omitempty"` + // Describes data sources outside BigQuery, if needed. + TableDefinitions []*TableDefinition `protobuf:"bytes,6,rep,name=table_definitions,json=tableDefinitions" json:"table_definitions,omitempty"` +} + +func (m *JobConfiguration_Query) Reset() { *m = JobConfiguration_Query{} } +func (m *JobConfiguration_Query) String() string { return proto.CompactTextString(m) } +func (*JobConfiguration_Query) ProtoMessage() {} +func (*JobConfiguration_Query) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26, 0} } + +func (m *JobConfiguration_Query) GetQuery() string { + if m != nil { + return m.Query + } + return "" +} + +func (m *JobConfiguration_Query) GetDestinationTable() *TableName { + if m != nil { + return m.DestinationTable + } + return nil +} + +func (m *JobConfiguration_Query) GetCreateDisposition() string { + if m != nil { + return m.CreateDisposition + } + return "" +} + +func (m *JobConfiguration_Query) GetWriteDisposition() string { + if m != nil { + return m.WriteDisposition + } + return "" +} + +func (m *JobConfiguration_Query) GetDefaultDataset() *DatasetName { + if m != nil { + return m.DefaultDataset + } + return nil +} + +func (m *JobConfiguration_Query) GetTableDefinitions() []*TableDefinition { + if m != nil { + return m.TableDefinitions + } + return nil +} + +// Describes a load job, which loads data from an external source via +// the import pipeline. +type JobConfiguration_Load struct { + // URIs for the data to be imported. Only Google Cloud Storage URIs are + // supported. + SourceUris []string `protobuf:"bytes,1,rep,name=source_uris,json=sourceUris" json:"source_uris,omitempty"` + // The table schema in JSON format representation of a TableSchema. + SchemaJson string `protobuf:"bytes,6,opt,name=schema_json,json=schemaJson" json:"schema_json,omitempty"` + // The table where the imported data is written. + DestinationTable *TableName `protobuf:"bytes,3,opt,name=destination_table,json=destinationTable" json:"destination_table,omitempty"` + // Describes when a job is allowed to create a table: + // `CREATE_IF_NEEDED`, `CREATE_NEVER`. + CreateDisposition string `protobuf:"bytes,4,opt,name=create_disposition,json=createDisposition" json:"create_disposition,omitempty"` + // Describes how writes affect existing tables: + // `WRITE_TRUNCATE`, `WRITE_APPEND`, `WRITE_EMPTY`. + WriteDisposition string `protobuf:"bytes,5,opt,name=write_disposition,json=writeDisposition" json:"write_disposition,omitempty"` +} + +func (m *JobConfiguration_Load) Reset() { *m = JobConfiguration_Load{} } +func (m *JobConfiguration_Load) String() string { return proto.CompactTextString(m) } +func (*JobConfiguration_Load) ProtoMessage() {} +func (*JobConfiguration_Load) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26, 1} } + +func (m *JobConfiguration_Load) GetSourceUris() []string { + if m != nil { + return m.SourceUris + } + return nil +} + +func (m *JobConfiguration_Load) GetSchemaJson() string { + if m != nil { + return m.SchemaJson + } + return "" +} + +func (m *JobConfiguration_Load) GetDestinationTable() *TableName { + if m != nil { + return m.DestinationTable + } + return nil +} + +func (m *JobConfiguration_Load) GetCreateDisposition() string { + if m != nil { + return m.CreateDisposition + } + return "" +} + +func (m *JobConfiguration_Load) GetWriteDisposition() string { + if m != nil { + return m.WriteDisposition + } + return "" +} + +// Describes an extract job, which exports data to an external source +// via the export pipeline. +type JobConfiguration_Extract struct { + // Google Cloud Storage URIs where extracted data should be written. + DestinationUris []string `protobuf:"bytes,1,rep,name=destination_uris,json=destinationUris" json:"destination_uris,omitempty"` + // The source table. + SourceTable *TableName `protobuf:"bytes,2,opt,name=source_table,json=sourceTable" json:"source_table,omitempty"` +} + +func (m *JobConfiguration_Extract) Reset() { *m = JobConfiguration_Extract{} } +func (m *JobConfiguration_Extract) String() string { return proto.CompactTextString(m) } +func (*JobConfiguration_Extract) ProtoMessage() {} +func (*JobConfiguration_Extract) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26, 2} } + +func (m *JobConfiguration_Extract) GetDestinationUris() []string { + if m != nil { + return m.DestinationUris + } + return nil +} + +func (m *JobConfiguration_Extract) GetSourceTable() *TableName { + if m != nil { + return m.SourceTable + } + return nil +} + +// Describes a copy job, which copies an existing table to another table. +type JobConfiguration_TableCopy struct { + // Source tables. + SourceTables []*TableName `protobuf:"bytes,1,rep,name=source_tables,json=sourceTables" json:"source_tables,omitempty"` + // Destination table. + DestinationTable *TableName `protobuf:"bytes,2,opt,name=destination_table,json=destinationTable" json:"destination_table,omitempty"` + // Describes when a job is allowed to create a table: + // `CREATE_IF_NEEDED`, `CREATE_NEVER`. + CreateDisposition string `protobuf:"bytes,3,opt,name=create_disposition,json=createDisposition" json:"create_disposition,omitempty"` + // Describes how writes affect existing tables: + // `WRITE_TRUNCATE`, `WRITE_APPEND`, `WRITE_EMPTY`. + WriteDisposition string `protobuf:"bytes,4,opt,name=write_disposition,json=writeDisposition" json:"write_disposition,omitempty"` +} + +func (m *JobConfiguration_TableCopy) Reset() { *m = JobConfiguration_TableCopy{} } +func (m *JobConfiguration_TableCopy) String() string { return proto.CompactTextString(m) } +func (*JobConfiguration_TableCopy) ProtoMessage() {} +func (*JobConfiguration_TableCopy) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26, 3} } + +func (m *JobConfiguration_TableCopy) GetSourceTables() []*TableName { + if m != nil { + return m.SourceTables + } + return nil +} + +func (m *JobConfiguration_TableCopy) GetDestinationTable() *TableName { + if m != nil { + return m.DestinationTable + } + return nil +} + +func (m *JobConfiguration_TableCopy) GetCreateDisposition() string { + if m != nil { + return m.CreateDisposition + } + return "" +} + +func (m *JobConfiguration_TableCopy) GetWriteDisposition() string { + if m != nil { + return m.WriteDisposition + } + return "" +} + +// Describes an external data source used in a query. +type TableDefinition struct { + // Name of the table, used in queries. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Google Cloud Storage URIs for the data to be imported. + SourceUris []string `protobuf:"bytes,2,rep,name=source_uris,json=sourceUris" json:"source_uris,omitempty"` +} + +func (m *TableDefinition) Reset() { *m = TableDefinition{} } +func (m *TableDefinition) String() string { return proto.CompactTextString(m) } +func (*TableDefinition) ProtoMessage() {} +func (*TableDefinition) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} } + +func (m *TableDefinition) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *TableDefinition) GetSourceUris() []string { + if m != nil { + return m.SourceUris + } + return nil +} + +// Running state of a job. +type JobStatus struct { + // State of a job: `PENDING`, `RUNNING`, or `DONE`. + State string `protobuf:"bytes,1,opt,name=state" json:"state,omitempty"` + // If the job did not complete successfully, this field describes why. + Error *google_rpc.Status `protobuf:"bytes,2,opt,name=error" json:"error,omitempty"` +} + +func (m *JobStatus) Reset() { *m = JobStatus{} } +func (m *JobStatus) String() string { return proto.CompactTextString(m) } +func (*JobStatus) ProtoMessage() {} +func (*JobStatus) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} } + +func (m *JobStatus) GetState() string { + if m != nil { + return m.State + } + return "" +} + +func (m *JobStatus) GetError() *google_rpc.Status { + if m != nil { + return m.Error + } + return nil +} + +// Job statistics that may change after a job starts. +type JobStatistics struct { + // Time when the job was created. + CreateTime *google_protobuf2.Timestamp `protobuf:"bytes,1,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // Time when the job started. + StartTime *google_protobuf2.Timestamp `protobuf:"bytes,2,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // Time when the job ended. + EndTime *google_protobuf2.Timestamp `protobuf:"bytes,3,opt,name=end_time,json=endTime" json:"end_time,omitempty"` + // Total bytes processed for a job. + TotalProcessedBytes int64 `protobuf:"varint,4,opt,name=total_processed_bytes,json=totalProcessedBytes" json:"total_processed_bytes,omitempty"` + // Processed bytes, adjusted by the job's CPU usage. + TotalBilledBytes int64 `protobuf:"varint,5,opt,name=total_billed_bytes,json=totalBilledBytes" json:"total_billed_bytes,omitempty"` + // The tier assigned by CPU-based billing. + BillingTier int32 `protobuf:"varint,7,opt,name=billing_tier,json=billingTier" json:"billing_tier,omitempty"` +} + +func (m *JobStatistics) Reset() { *m = JobStatistics{} } +func (m *JobStatistics) String() string { return proto.CompactTextString(m) } +func (*JobStatistics) ProtoMessage() {} +func (*JobStatistics) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} } + +func (m *JobStatistics) GetCreateTime() *google_protobuf2.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *JobStatistics) GetStartTime() *google_protobuf2.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *JobStatistics) GetEndTime() *google_protobuf2.Timestamp { + if m != nil { + return m.EndTime + } + return nil +} + +func (m *JobStatistics) GetTotalProcessedBytes() int64 { + if m != nil { + return m.TotalProcessedBytes + } + return 0 +} + +func (m *JobStatistics) GetTotalBilledBytes() int64 { + if m != nil { + return m.TotalBilledBytes + } + return 0 +} + +func (m *JobStatistics) GetBillingTier() int32 { + if m != nil { + return m.BillingTier + } + return 0 +} + +// The fully-qualified name for a dataset. +type DatasetName struct { + // The project ID. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The dataset ID within the project. + DatasetId string `protobuf:"bytes,2,opt,name=dataset_id,json=datasetId" json:"dataset_id,omitempty"` +} + +func (m *DatasetName) Reset() { *m = DatasetName{} } +func (m *DatasetName) String() string { return proto.CompactTextString(m) } +func (*DatasetName) ProtoMessage() {} +func (*DatasetName) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} } + +func (m *DatasetName) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *DatasetName) GetDatasetId() string { + if m != nil { + return m.DatasetId + } + return "" +} + +// The fully-qualified name for a table. +type TableName struct { + // The project ID. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The dataset ID within the project. + DatasetId string `protobuf:"bytes,2,opt,name=dataset_id,json=datasetId" json:"dataset_id,omitempty"` + // The table ID of the table within the dataset. + TableId string `protobuf:"bytes,3,opt,name=table_id,json=tableId" json:"table_id,omitempty"` +} + +func (m *TableName) Reset() { *m = TableName{} } +func (m *TableName) String() string { return proto.CompactTextString(m) } +func (*TableName) ProtoMessage() {} +func (*TableName) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} } + +func (m *TableName) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *TableName) GetDatasetId() string { + if m != nil { + return m.DatasetId + } + return "" +} + +func (m *TableName) GetTableId() string { + if m != nil { + return m.TableId + } + return "" +} + +// The fully-qualified name for a job. +type JobName struct { + // The project ID. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The job ID within the project. + JobId string `protobuf:"bytes,2,opt,name=job_id,json=jobId" json:"job_id,omitempty"` +} + +func (m *JobName) Reset() { *m = JobName{} } +func (m *JobName) String() string { return proto.CompactTextString(m) } +func (*JobName) ProtoMessage() {} +func (*JobName) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} } + +func (m *JobName) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *JobName) GetJobId() string { + if m != nil { + return m.JobId + } + return "" +} + +func init() { + proto.RegisterType((*AuditData)(nil), "google.cloud.bigquery.logging.v1.AuditData") + proto.RegisterType((*TableInsertRequest)(nil), "google.cloud.bigquery.logging.v1.TableInsertRequest") + proto.RegisterType((*TableUpdateRequest)(nil), "google.cloud.bigquery.logging.v1.TableUpdateRequest") + proto.RegisterType((*TableInsertResponse)(nil), "google.cloud.bigquery.logging.v1.TableInsertResponse") + proto.RegisterType((*TableUpdateResponse)(nil), "google.cloud.bigquery.logging.v1.TableUpdateResponse") + proto.RegisterType((*DatasetListRequest)(nil), "google.cloud.bigquery.logging.v1.DatasetListRequest") + proto.RegisterType((*DatasetInsertRequest)(nil), "google.cloud.bigquery.logging.v1.DatasetInsertRequest") + proto.RegisterType((*DatasetInsertResponse)(nil), "google.cloud.bigquery.logging.v1.DatasetInsertResponse") + proto.RegisterType((*DatasetUpdateRequest)(nil), "google.cloud.bigquery.logging.v1.DatasetUpdateRequest") + proto.RegisterType((*DatasetUpdateResponse)(nil), "google.cloud.bigquery.logging.v1.DatasetUpdateResponse") + proto.RegisterType((*JobInsertRequest)(nil), "google.cloud.bigquery.logging.v1.JobInsertRequest") + proto.RegisterType((*JobInsertResponse)(nil), "google.cloud.bigquery.logging.v1.JobInsertResponse") + proto.RegisterType((*JobQueryRequest)(nil), "google.cloud.bigquery.logging.v1.JobQueryRequest") + proto.RegisterType((*JobQueryResponse)(nil), "google.cloud.bigquery.logging.v1.JobQueryResponse") + proto.RegisterType((*JobGetQueryResultsRequest)(nil), "google.cloud.bigquery.logging.v1.JobGetQueryResultsRequest") + proto.RegisterType((*JobGetQueryResultsResponse)(nil), "google.cloud.bigquery.logging.v1.JobGetQueryResultsResponse") + proto.RegisterType((*JobQueryDoneResponse)(nil), "google.cloud.bigquery.logging.v1.JobQueryDoneResponse") + proto.RegisterType((*JobCompletedEvent)(nil), "google.cloud.bigquery.logging.v1.JobCompletedEvent") + proto.RegisterType((*TableDataListRequest)(nil), "google.cloud.bigquery.logging.v1.TableDataListRequest") + proto.RegisterType((*Table)(nil), "google.cloud.bigquery.logging.v1.Table") + proto.RegisterType((*TableInfo)(nil), "google.cloud.bigquery.logging.v1.TableInfo") + proto.RegisterType((*TableViewDefinition)(nil), "google.cloud.bigquery.logging.v1.TableViewDefinition") + proto.RegisterType((*Dataset)(nil), "google.cloud.bigquery.logging.v1.Dataset") + proto.RegisterType((*DatasetInfo)(nil), "google.cloud.bigquery.logging.v1.DatasetInfo") + proto.RegisterType((*BigQueryAcl)(nil), "google.cloud.bigquery.logging.v1.BigQueryAcl") + proto.RegisterType((*BigQueryAcl_Entry)(nil), "google.cloud.bigquery.logging.v1.BigQueryAcl.Entry") + proto.RegisterType((*Job)(nil), "google.cloud.bigquery.logging.v1.Job") + proto.RegisterType((*JobConfiguration)(nil), "google.cloud.bigquery.logging.v1.JobConfiguration") + proto.RegisterType((*JobConfiguration_Query)(nil), "google.cloud.bigquery.logging.v1.JobConfiguration.Query") + proto.RegisterType((*JobConfiguration_Load)(nil), "google.cloud.bigquery.logging.v1.JobConfiguration.Load") + proto.RegisterType((*JobConfiguration_Extract)(nil), "google.cloud.bigquery.logging.v1.JobConfiguration.Extract") + proto.RegisterType((*JobConfiguration_TableCopy)(nil), "google.cloud.bigquery.logging.v1.JobConfiguration.TableCopy") + proto.RegisterType((*TableDefinition)(nil), "google.cloud.bigquery.logging.v1.TableDefinition") + proto.RegisterType((*JobStatus)(nil), "google.cloud.bigquery.logging.v1.JobStatus") + proto.RegisterType((*JobStatistics)(nil), "google.cloud.bigquery.logging.v1.JobStatistics") + proto.RegisterType((*DatasetName)(nil), "google.cloud.bigquery.logging.v1.DatasetName") + proto.RegisterType((*TableName)(nil), "google.cloud.bigquery.logging.v1.TableName") + proto.RegisterType((*JobName)(nil), "google.cloud.bigquery.logging.v1.JobName") +} + +func init() { proto.RegisterFile("google/cloud/bigquery/logging/v1/audit_data.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 2036 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x59, 0x4f, 0x73, 0x1b, 0x49, + 0x15, 0x8f, 0x2c, 0xc9, 0x92, 0x9e, 0xec, 0xd8, 0xee, 0xd8, 0x9b, 0x58, 0x90, 0xdd, 0x30, 0x40, + 0xb1, 0x29, 0x13, 0xa9, 0x9c, 0x65, 0x09, 0x90, 0xad, 0x4a, 0xd9, 0xb1, 0x89, 0x93, 0xfd, 0x83, + 0x19, 0x1c, 0x17, 0xbb, 0xc5, 0xae, 0x6a, 0x34, 0xd3, 0xd6, 0xb6, 0x76, 0x34, 0x3d, 0x99, 0x69, + 0xc5, 0x31, 0x17, 0x0a, 0x8a, 0x1b, 0x47, 0x3e, 0x0c, 0x07, 0x2e, 0x50, 0x7c, 0x01, 0x8e, 0x5c, + 0xb8, 0xf0, 0x41, 0x28, 0xaa, 0x5f, 0x77, 0x8f, 0x66, 0x46, 0x72, 0x79, 0xc6, 0x68, 0x0f, 0x7b, + 0x9b, 0x79, 0xdd, 0xbf, 0xf7, 0xeb, 0x7e, 0xfd, 0xfe, 0xf5, 0x0c, 0xec, 0x0e, 0x39, 0x1f, 0xfa, + 0xb4, 0xe7, 0xfa, 0x7c, 0xe2, 0xf5, 0x06, 0x6c, 0xf8, 0x6a, 0x42, 0xa3, 0x8b, 0x9e, 0xcf, 0x87, + 0x43, 0x16, 0x0c, 0x7b, 0xaf, 0x77, 0x7b, 0xce, 0xc4, 0x63, 0xa2, 0xef, 0x39, 0xc2, 0xe9, 0x86, + 0x11, 0x17, 0x9c, 0xdc, 0x53, 0x90, 0x2e, 0x42, 0xba, 0x06, 0xd2, 0xd5, 0x90, 0xee, 0xeb, 0xdd, + 0xce, 0xb7, 0xb5, 0x52, 0x27, 0x64, 0x3d, 0x27, 0x08, 0xb8, 0x70, 0x04, 0xe3, 0x41, 0xac, 0xf0, + 0x9d, 0xb7, 0xf5, 0x28, 0xbe, 0x0d, 0x26, 0x67, 0x3d, 0x6f, 0x12, 0xe1, 0x04, 0x3d, 0xfe, 0x4e, + 0x7e, 0x5c, 0xb0, 0x31, 0x8d, 0x85, 0x33, 0x0e, 0xf5, 0x84, 0xdb, 0x7a, 0x42, 0x14, 0xba, 0xbd, + 0x58, 0x38, 0x62, 0xa2, 0x35, 0x5b, 0xff, 0x5e, 0x83, 0xd6, 0x9e, 0x5c, 0xee, 0x81, 0x23, 0x1c, + 0xf2, 0x25, 0x6c, 0x0a, 0x67, 0xe0, 0xd3, 0x3e, 0x0b, 0x62, 0x1a, 0x89, 0x7e, 0x44, 0x5f, 0x4d, + 0x68, 0x2c, 0xee, 0x54, 0xee, 0x55, 0xde, 0x6d, 0x3f, 0xfc, 0x51, 0xf7, 0xaa, 0x6d, 0x74, 0x4f, + 0x24, 0xfa, 0x39, 0x82, 0x6d, 0x85, 0x3d, 0xba, 0x61, 0x13, 0x31, 0x23, 0x9d, 0x32, 0x4d, 0x42, + 0xcf, 0x11, 0x34, 0x61, 0x5a, 0x2f, 0xc5, 0xf4, 0x12, 0xc1, 0x79, 0xa6, 0x8c, 0x54, 0x32, 0xc9, + 0x93, 0x88, 0xa9, 0xe8, 0xfb, 0x2c, 0x9e, 0xee, 0x69, 0xa9, 0x28, 0xd3, 0x81, 0x42, 0x7f, 0xc4, + 0xe2, 0xf4, 0x9e, 0xbc, 0x19, 0x29, 0x09, 0xe0, 0x2d, 0xc3, 0x94, 0xb3, 0x5f, 0x15, 0xb9, 0x7e, + 0x5c, 0x98, 0x2b, 0x6f, 0x41, 0xb3, 0x83, 0xac, 0x0d, 0x53, 0x7c, 0x39, 0x2b, 0xd6, 0x4a, 0xf2, + 0xe5, 0xed, 0x68, 0xf8, 0xb2, 0x96, 0x1c, 0x00, 0x19, 0xf1, 0x41, 0x7e, 0x6f, 0x75, 0xe4, 0x7a, + 0x78, 0x35, 0xd7, 0x0b, 0x3e, 0xc8, 0xef, 0x6b, 0x7d, 0x94, 0x93, 0x91, 0x3e, 0x6c, 0x48, 0x0e, + 0x04, 0x27, 0x14, 0xcb, 0x48, 0xb1, 0x5b, 0x88, 0xe2, 0x97, 0x52, 0x36, 0x65, 0x58, 0x1b, 0x65, + 0x45, 0xe4, 0x77, 0x70, 0x57, 0x12, 0x0c, 0xa9, 0x48, 0x48, 0xe2, 0x89, 0x2f, 0xe2, 0x84, 0xac, + 0x81, 0x64, 0x8f, 0x0b, 0x91, 0x3d, 0xa3, 0x42, 0x2b, 0x47, 0x1d, 0x53, 0xda, 0xed, 0xd1, 0x65, + 0x83, 0x84, 0xc3, 0x6d, 0xe5, 0xf9, 0xd2, 0xc6, 0x59, 0x97, 0x6c, 0x16, 0x3d, 0x36, 0x74, 0x7e, + 0x79, 0x76, 0x59, 0xa7, 0x54, 0x21, 0x95, 0x93, 0x93, 0xaf, 0x60, 0x2b, 0x17, 0xd4, 0x71, 0xc8, + 0x83, 0x98, 0xde, 0x69, 0x21, 0xdd, 0xfb, 0x25, 0xa3, 0x5a, 0x81, 0x8f, 0x2a, 0xf6, 0x2d, 0x31, + 0x2b, 0x9e, 0x92, 0x25, 0x1e, 0xa9, 0xc9, 0xa0, 0x14, 0x99, 0x71, 0xbc, 0x1c, 0x59, 0x56, 0x4c, + 0x5e, 0xc1, 0xed, 0x99, 0x80, 0xd3, 0x74, 0x6d, 0xa4, 0x7b, 0x54, 0x3a, 0xe2, 0x12, 0xc2, 0x2d, + 0x6f, 0xde, 0x40, 0x9a, 0x32, 0xbf, 0xc3, 0x95, 0x92, 0x94, 0x33, 0x7b, 0xdc, 0xf2, 0xe6, 0x0d, + 0x10, 0x0a, 0xb7, 0x32, 0x61, 0xa7, 0xe9, 0x08, 0xd2, 0xbd, 0x57, 0x2a, 0xee, 0x12, 0xaa, 0x8d, + 0x51, 0x5e, 0x68, 0xa2, 0x3b, 0x09, 0x0a, 0xc5, 0xb2, 0x5a, 0x22, 0xba, 0x8d, 0xb7, 0x1b, 0x92, + 0xf5, 0x51, 0x4e, 0x46, 0xfe, 0x50, 0x81, 0xb7, 0x2f, 0x8b, 0x3e, 0x4d, 0x78, 0x13, 0x09, 0x3f, + 0xb8, 0x5e, 0xf8, 0x25, 0xd4, 0x9d, 0xd1, 0xa5, 0xa3, 0x32, 0x00, 0xa7, 0x1b, 0xf5, 0x78, 0x90, + 0x3a, 0xc2, 0xb5, 0xa2, 0x01, 0x68, 0x76, 0x7b, 0xc0, 0x83, 0xf4, 0x09, 0x6e, 0x8e, 0xe6, 0xc8, + 0x89, 0xab, 0x0e, 0xd0, 0xe5, 0xe3, 0xd0, 0xa7, 0x82, 0x7a, 0x7d, 0xfa, 0x9a, 0x06, 0xe2, 0xce, + 0x46, 0x89, 0x03, 0x7c, 0x6a, 0xb0, 0x87, 0x12, 0x8a, 0xc7, 0x97, 0x15, 0xed, 0xb7, 0xa0, 0xa1, + 0xd3, 0xc8, 0x3e, 0x40, 0xd3, 0xec, 0xc8, 0xfa, 0x14, 0xc8, 0x6c, 0x4d, 0x26, 0x4f, 0x71, 0x06, + 0x9f, 0x44, 0x2e, 0xd5, 0xb5, 0xfd, 0x07, 0x05, 0x03, 0xd3, 0x4e, 0x80, 0x89, 0xea, 0x6c, 0x91, + 0x58, 0x88, 0xea, 0xcf, 0xe0, 0xd6, 0x9c, 0x9c, 0xb3, 0x58, 0xdd, 0xb9, 0x28, 0x5b, 0x88, 0xee, + 0x1e, 0x90, 0xd9, 0x6e, 0x81, 0x6c, 0x43, 0x13, 0xd3, 0xbc, 0xe3, 0xfb, 0xa8, 0xba, 0x69, 0x37, + 0xe4, 0xfb, 0x9e, 0xef, 0x5b, 0x9f, 0xc3, 0xe6, 0xbc, 0x92, 0x4f, 0x0e, 0x67, 0x56, 0x73, 0xbf, + 0x70, 0x5e, 0x49, 0xad, 0xe7, 0x0b, 0xd8, 0x9a, 0x9b, 0xdf, 0x16, 0xa5, 0x7f, 0xba, 0xfc, 0xac, + 0x13, 0x2c, 0x7c, 0xf9, 0xb9, 0xc3, 0x5a, 0x90, 0xfe, 0x97, 0xb0, 0x9e, 0x6f, 0x4a, 0xc8, 0xde, + 0x8c, 0xea, 0xef, 0x17, 0x8a, 0xd0, 0x94, 0xda, 0x53, 0xd8, 0x98, 0xc9, 0xb9, 0x8b, 0xd0, 0xfb, + 0xaf, 0x0a, 0xac, 0xe5, 0x3a, 0x1c, 0xb2, 0x09, 0x75, 0x44, 0xa1, 0xce, 0x96, 0xad, 0x5e, 0xc8, + 0x3b, 0xd0, 0x1e, 0x3b, 0x6f, 0x4c, 0x72, 0xc5, 0x56, 0x77, 0xd5, 0x86, 0xb1, 0xf3, 0x46, 0xe7, + 0x42, 0x72, 0x0a, 0x6b, 0x1e, 0x3d, 0x73, 0x26, 0xbe, 0xba, 0xa6, 0xc4, 0xd4, 0xf4, 0xa8, 0x0f, + 0x0a, 0xdb, 0xf1, 0x13, 0x67, 0x4c, 0xed, 0x9b, 0x5a, 0x8b, 0x96, 0x91, 0xbb, 0x00, 0x61, 0xc4, + 0x47, 0xd4, 0x15, 0x7d, 0xe6, 0x61, 0x1b, 0xda, 0xb2, 0x5b, 0x5a, 0xf2, 0xdc, 0x23, 0xb7, 0xa1, + 0xe1, 0xc9, 0xa4, 0x3f, 0x09, 0xb0, 0x6d, 0x6c, 0xda, 0xcb, 0x5e, 0x74, 0x61, 0x4f, 0x02, 0x2b, + 0xc4, 0x93, 0xc8, 0x16, 0x8b, 0xef, 0xc2, 0xaa, 0xe0, 0xc2, 0xf1, 0x93, 0x6d, 0xc8, 0x2d, 0xd6, + 0xec, 0x15, 0x14, 0x9a, 0x8d, 0x3c, 0x82, 0xea, 0x88, 0x0f, 0x74, 0x33, 0x5f, 0xd0, 0xa2, 0x12, + 0x61, 0x7d, 0x0a, 0xdb, 0x97, 0x36, 0x70, 0x79, 0xfb, 0x55, 0x66, 0xec, 0xf7, 0x2d, 0x68, 0xc5, + 0xc2, 0x91, 0xe5, 0x98, 0x9f, 0x23, 0x79, 0xcd, 0x6e, 0xa2, 0xc0, 0xe6, 0xe7, 0xd6, 0x6f, 0xa1, + 0x73, 0x79, 0x71, 0xfa, 0x9a, 0xb7, 0xf5, 0x0b, 0xd8, 0x9c, 0x57, 0x9b, 0x8c, 0xc2, 0x4a, 0x69, + 0x85, 0x5f, 0xa1, 0x33, 0x67, 0x8b, 0x8d, 0x3c, 0x66, 0xac, 0x61, 0xfd, 0xc0, 0x19, 0x53, 0xed, + 0x7a, 0x2d, 0x94, 0x48, 0xaf, 0xb8, 0xfe, 0xea, 0x4f, 0x60, 0x73, 0x5e, 0x6b, 0x9b, 0x35, 0x77, + 0x25, 0x6b, 0xee, 0x2b, 0x9d, 0xdd, 0xfa, 0x6b, 0x15, 0xea, 0xa8, 0x96, 0xbc, 0x00, 0x50, 0xdd, + 0x69, 0xb2, 0xee, 0xf6, 0xc3, 0x9d, 0x82, 0x69, 0x1e, 0xfd, 0xbd, 0x25, 0xcc, 0x23, 0x79, 0x02, + 0x35, 0x16, 0x9c, 0x71, 0xbd, 0xcb, 0x9d, 0xc2, 0x5d, 0xf4, 0x19, 0xb7, 0x11, 0x28, 0xd7, 0x1d, + 0xbb, 0x5f, 0xd2, 0xb1, 0xd3, 0x1f, 0xc5, 0x3c, 0xc0, 0xe6, 0xbf, 0x65, 0x83, 0x12, 0xbd, 0x88, + 0x79, 0x40, 0x9e, 0x43, 0xed, 0x35, 0xa3, 0xe7, 0xfa, 0x36, 0x57, 0xb4, 0x75, 0x3e, 0x65, 0xf4, + 0xfc, 0x80, 0x9e, 0xb1, 0x80, 0x09, 0xc6, 0x03, 0x1b, 0x55, 0x90, 0xc7, 0xd0, 0xa6, 0x6f, 0x42, + 0x16, 0xd1, 0xbe, 0x60, 0x63, 0xaa, 0xef, 0x6c, 0x1d, 0xa3, 0xd1, 0x7c, 0x36, 0xe8, 0x9e, 0x98, + 0xcf, 0x06, 0x36, 0xa8, 0xe9, 0x52, 0x20, 0xc1, 0x6e, 0x44, 0x65, 0xaf, 0x8b, 0xe0, 0xe5, 0xab, + 0xc1, 0x6a, 0x3a, 0x82, 0x9f, 0xc0, 0xaa, 0x88, 0x26, 0x81, 0x9b, 0xc0, 0x1b, 0x57, 0xc2, 0x57, + 0x0c, 0x40, 0x8a, 0x2c, 0x1b, 0x5a, 0x89, 0xe5, 0x64, 0xf0, 0x9c, 0x45, 0x8c, 0x06, 0x9e, 0x7f, + 0x91, 0xf6, 0xbd, 0x15, 0x23, 0xc4, 0x93, 0xb9, 0x07, 0x6d, 0x8f, 0xc6, 0x6e, 0xc4, 0x42, 0x69, + 0x01, 0x3c, 0xa0, 0x96, 0x9d, 0x16, 0x59, 0x3b, 0xba, 0x07, 0xc8, 0xda, 0x6a, 0x7e, 0x32, 0xb5, + 0xfe, 0x52, 0x85, 0x86, 0xc9, 0x6f, 0xc7, 0xb0, 0x62, 0xda, 0xff, 0x94, 0x0b, 0x95, 0x4c, 0x9a, + 0x6d, 0x6f, 0xfa, 0x42, 0xf6, 0x32, 0x6e, 0xf4, 0xa0, 0xc4, 0x85, 0x25, 0x71, 0xa4, 0xdc, 0xf9, + 0xd4, 0x4a, 0x9d, 0xcf, 0x63, 0x68, 0xeb, 0x8b, 0x4c, 0x51, 0xcf, 0x50, 0xd3, 0xf5, 0xe1, 0x56, + 0x1d, 0xd7, 0xd7, 0x1e, 0x51, 0x60, 0xed, 0xfb, 0x6c, 0x88, 0xa9, 0x69, 0xcf, 0xf5, 0x6d, 0x89, + 0x24, 0xbf, 0x81, 0xbb, 0xa6, 0x0e, 0xa9, 0xc0, 0xd4, 0x5e, 0x6a, 0xbe, 0x6f, 0xe9, 0x2b, 0xf1, + 0xf6, 0xcc, 0x7a, 0x0e, 0xf4, 0x04, 0xbb, 0xa3, 0xf1, 0x78, 0x9e, 0x87, 0x88, 0x36, 0x63, 0xd6, + 0x09, 0xb4, 0x53, 0xd6, 0x5a, 0x94, 0xf3, 0xfc, 0x7d, 0x09, 0xda, 0xa9, 0x8d, 0x90, 0x8f, 0xa1, + 0x41, 0x03, 0x11, 0x31, 0x2a, 0x53, 0x79, 0xb5, 0x58, 0x4b, 0x9f, 0xc2, 0x77, 0x0f, 0x03, 0x11, + 0x5d, 0xd8, 0x46, 0x47, 0xe7, 0x3f, 0x15, 0xa8, 0xa3, 0x88, 0x10, 0xa8, 0x45, 0xdc, 0x37, 0xcb, + 0xc4, 0x67, 0x99, 0x34, 0x86, 0x11, 0x9f, 0x84, 0x7d, 0x3a, 0x76, 0x98, 0xaf, 0x97, 0x07, 0x28, + 0x3a, 0x94, 0x12, 0x99, 0x9a, 0x27, 0x31, 0x8d, 0xf4, 0x78, 0x55, 0xa5, 0x66, 0x29, 0x51, 0xc3, + 0x6f, 0xc1, 0xb2, 0xc7, 0xc7, 0x0e, 0x0b, 0x74, 0x71, 0xd6, 0x6f, 0xd2, 0x36, 0x71, 0x48, 0x5d, + 0xe6, 0xf8, 0x7d, 0x54, 0x86, 0x8e, 0xd0, 0xb2, 0x57, 0xb4, 0xf0, 0x99, 0x94, 0x91, 0x23, 0x68, + 0xc9, 0x6c, 0xa2, 0x8c, 0xb7, 0x5c, 0x3e, 0x7b, 0x36, 0x25, 0x5a, 0x3e, 0x59, 0xff, 0x5c, 0x82, + 0xea, 0x0b, 0x3e, 0x20, 0x07, 0xd0, 0x94, 0x57, 0xa3, 0x54, 0x2c, 0xdd, 0x2f, 0x54, 0x2e, 0x50, + 0x5d, 0x63, 0xa4, 0x1e, 0xcc, 0x47, 0x23, 0x97, 0x07, 0x67, 0x6c, 0x68, 0x3c, 0x67, 0xa9, 0xc4, + 0xcd, 0xf5, 0x69, 0x1a, 0x89, 0xf7, 0xd6, 0x8c, 0x44, 0xd6, 0x0d, 0x49, 0xa0, 0xbe, 0x9c, 0xea, + 0x4e, 0x69, 0xa7, 0x90, 0xe6, 0x5f, 0x21, 0xc4, 0x6e, 0x8d, 0xcc, 0x23, 0x39, 0x85, 0x9b, 0x46, + 0x17, 0x8b, 0x05, 0x73, 0x63, 0x1d, 0xb0, 0xbd, 0xc2, 0xfa, 0x14, 0xcc, 0x5e, 0x1d, 0xa5, 0x5f, + 0xad, 0xbf, 0xb5, 0xb1, 0x87, 0xca, 0x2e, 0xfc, 0xd8, 0x64, 0x34, 0x15, 0xd7, 0x3f, 0x29, 0x6f, + 0x8d, 0x2e, 0xfa, 0xe9, 0xd1, 0x0d, 0xd3, 0x5a, 0x7e, 0x0c, 0x35, 0x9f, 0x3b, 0x9e, 0x3e, 0xfe, + 0x47, 0xd7, 0x50, 0xf8, 0x11, 0x77, 0xbc, 0xa3, 0x1b, 0x36, 0xaa, 0x21, 0xa7, 0xd0, 0xa0, 0x6f, + 0x44, 0xe4, 0xb8, 0xe6, 0xc3, 0xdb, 0xcf, 0xae, 0xa1, 0xf1, 0x50, 0x69, 0x38, 0xba, 0x61, 0x1b, + 0x65, 0xe4, 0x73, 0x53, 0xe9, 0x5d, 0x1e, 0x5e, 0xe8, 0x2c, 0xf2, 0xc1, 0x35, 0x54, 0xa3, 0xf3, + 0x3e, 0xe5, 0xa1, 0xb4, 0x80, 0x2a, 0xfe, 0xf2, 0x25, 0xdd, 0xc8, 0xb6, 0xd2, 0x8d, 0x6c, 0xe7, + 0x4f, 0x55, 0xa8, 0xa3, 0xc5, 0x2e, 0xe9, 0xcc, 0x7f, 0x0d, 0x1b, 0x1e, 0x8d, 0x05, 0x0b, 0x50, + 0xbd, 0x4a, 0x7a, 0x25, 0x5b, 0x08, 0xf4, 0xfd, 0xf5, 0x94, 0x16, 0xd5, 0xdb, 0x3c, 0x00, 0xa2, + 0xab, 0x80, 0xc7, 0xe2, 0x90, 0xc7, 0x58, 0xd2, 0x74, 0x02, 0xd8, 0x50, 0x23, 0x07, 0xd3, 0x01, + 0xb2, 0x03, 0x1b, 0xe7, 0x11, 0xcb, 0xcd, 0x56, 0x39, 0x61, 0x1d, 0x07, 0xd2, 0x93, 0xe7, 0x5c, + 0x17, 0xea, 0x8b, 0xb8, 0x2e, 0x7c, 0x01, 0x1b, 0xfa, 0x5b, 0x68, 0x52, 0x84, 0xe3, 0x3b, 0xcb, + 0x98, 0x44, 0x77, 0x8b, 0x7e, 0x05, 0x9d, 0xb6, 0x3a, 0xeb, 0x22, 0x2b, 0x88, 0x3b, 0xff, 0xad, + 0x40, 0x4d, 0xba, 0x1b, 0xf6, 0x5a, 0x78, 0x89, 0xea, 0x4f, 0x22, 0xa6, 0xf2, 0xb4, 0xec, 0xb5, + 0x50, 0xf4, 0x32, 0x62, 0x71, 0xbe, 0x19, 0x5b, 0x9e, 0x69, 0xc6, 0xe6, 0x1e, 0x5c, 0xf5, 0xeb, + 0x3b, 0xb8, 0x5a, 0xa9, 0x83, 0xab, 0xcf, 0x3f, 0xb8, 0xce, 0x1f, 0x2b, 0xd0, 0xd0, 0xd1, 0x41, + 0xee, 0x43, 0x9a, 0x3b, 0x6d, 0x88, 0xb5, 0x94, 0x1c, 0xad, 0xf1, 0x09, 0xac, 0x68, 0x73, 0x5d, + 0xdb, 0x41, 0xb5, 0xbd, 0x51, 0xd0, 0xf9, 0xf3, 0x92, 0x6e, 0xe2, 0x30, 0x78, 0x8e, 0x61, 0x35, + 0xad, 0xdd, 0x94, 0xcd, 0x52, 0xea, 0x57, 0x52, 0xea, 0xe3, 0x6f, 0x66, 0x54, 0xed, 0xaf, 0xc1, + 0x6a, 0xa6, 0x64, 0x59, 0x3f, 0x87, 0xb5, 0x9c, 0x4f, 0xcb, 0x1e, 0x20, 0xd5, 0xaa, 0xe0, 0x73, + 0xde, 0x99, 0x97, 0xf2, 0xce, 0x6c, 0x7d, 0x08, 0xad, 0xa4, 0xf4, 0xc8, 0x3c, 0x24, 0x6b, 0x8d, + 0x51, 0xa1, 0x5e, 0xc8, 0xbb, 0x50, 0xa7, 0x51, 0xc4, 0x23, 0x6d, 0x25, 0x62, 0xac, 0x14, 0x85, + 0x6e, 0x57, 0xd7, 0x2c, 0x35, 0xc1, 0xfa, 0xc7, 0x12, 0xac, 0x66, 0x0a, 0x4f, 0xbe, 0xdf, 0xac, + 0x94, 0xea, 0x37, 0x7f, 0x0a, 0xa0, 0xae, 0x72, 0x88, 0x5d, 0xba, 0x12, 0xab, 0x2e, 0x7e, 0x08, + 0x7d, 0x1f, 0x9a, 0x34, 0xf0, 0x14, 0xb0, 0x7a, 0x25, 0xb0, 0x41, 0x03, 0x0f, 0x61, 0x0f, 0x61, + 0x4b, 0x5d, 0xb8, 0xc3, 0x88, 0xbb, 0x34, 0x8e, 0xa9, 0xd7, 0x1f, 0x5c, 0x08, 0xaa, 0xea, 0x6e, + 0xd5, 0xbe, 0x85, 0x83, 0xc7, 0x66, 0x6c, 0x5f, 0x0e, 0x91, 0x1f, 0x02, 0x51, 0x98, 0x01, 0xf3, + 0xfd, 0x04, 0x50, 0x47, 0xc0, 0x3a, 0x8e, 0xec, 0xe3, 0x80, 0x9a, 0xfd, 0x1d, 0x58, 0x91, 0xf3, + 0x58, 0x30, 0xec, 0x0b, 0x46, 0x23, 0xac, 0x64, 0x75, 0xbb, 0xad, 0x65, 0x27, 0x8c, 0x46, 0xd6, + 0x87, 0x49, 0x2b, 0x8a, 0x1d, 0x4b, 0xf6, 0x3b, 0x49, 0x25, 0xff, 0x9d, 0xe4, 0x2e, 0x40, 0xf2, + 0x63, 0xc3, 0xd3, 0x4d, 0x5e, 0xcb, 0xfc, 0x90, 0xf0, 0x2c, 0x4f, 0x47, 0xd3, 0xff, 0xaf, 0x8a, + 0x6c, 0x43, 0x53, 0xff, 0x1c, 0xf2, 0xb4, 0x57, 0x37, 0xd4, 0x6f, 0x1d, 0xcf, 0x7a, 0x02, 0x0d, + 0xdd, 0x69, 0x5d, 0xc5, 0xb1, 0x05, 0xcb, 0xf8, 0x87, 0xc2, 0xe8, 0xaf, 0x8f, 0xf8, 0xe0, 0xb9, + 0xb7, 0xff, 0xfb, 0x0a, 0x7c, 0xcf, 0xe5, 0xe3, 0x2b, 0x03, 0x70, 0xff, 0x66, 0xf2, 0x07, 0xfa, + 0x58, 0x9e, 0xe3, 0x71, 0xe5, 0xb3, 0x67, 0x1a, 0x33, 0xe4, 0xbe, 0x13, 0x0c, 0xbb, 0x3c, 0x1a, + 0xf6, 0x86, 0x34, 0xc0, 0x53, 0xee, 0xa9, 0x21, 0x27, 0x64, 0xf1, 0xe5, 0xbf, 0xe0, 0x1f, 0xeb, + 0xc7, 0xc1, 0x32, 0x62, 0xde, 0xfb, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x76, 0x60, 0x19, 0x87, + 0xb5, 0x1f, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/billing/v1/cloud_billing.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/billing/v1/cloud_billing.pb.go index 67d476b..238193b 100644 --- a/vendor/google.golang.org/genproto/googleapis/cloud/billing/v1/cloud_billing.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/cloud/billing/v1/cloud_billing.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/cloud/billing/v1/cloud_billing.proto -// DO NOT EDIT! /* Package billing is a generated protocol buffer package. diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1/clusters.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1/clusters.pb.go index ff691c2..c3ef596 100644 --- a/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1/clusters.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1/clusters.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/cloud/dataproc/v1/clusters.proto -// DO NOT EDIT! /* Package dataproc is a generated protocol buffer package. @@ -16,10 +15,12 @@ It has these top-level messages: GceClusterConfig InstanceGroupConfig ManagedGroupConfig + AcceleratorConfig DiskConfig NodeInitializationAction ClusterStatus SoftwareConfig + ClusterMetrics CreateClusterRequest UpdateClusterRequest DeleteClusterRequest @@ -39,10 +40,13 @@ It has these top-level messages: JobPlacement JobStatus JobReference + YarnApplication Job + JobScheduling SubmitJobRequest GetJobRequest ListJobsRequest + UpdateJobRequest ListJobsResponse CancelJobRequest DeleteJobRequest @@ -114,26 +118,71 @@ var ClusterStatus_State_value = map[string]int32{ func (x ClusterStatus_State) String() string { return proto.EnumName(ClusterStatus_State_name, int32(x)) } -func (ClusterStatus_State) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{7, 0} } +func (ClusterStatus_State) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{8, 0} } + +type ClusterStatus_Substate int32 + +const ( + ClusterStatus_UNSPECIFIED ClusterStatus_Substate = 0 + // The cluster is known to be in an unhealthy state + // (for example, critical daemons are not running or HDFS capacity is + // exhausted). + // + // Applies to RUNNING state. + ClusterStatus_UNHEALTHY ClusterStatus_Substate = 1 + // The agent-reported status is out of date (may occur if + // Cloud Dataproc loses communication with Agent). + // + // Applies to RUNNING state. + ClusterStatus_STALE_STATUS ClusterStatus_Substate = 2 +) + +var ClusterStatus_Substate_name = map[int32]string{ + 0: "UNSPECIFIED", + 1: "UNHEALTHY", + 2: "STALE_STATUS", +} +var ClusterStatus_Substate_value = map[string]int32{ + "UNSPECIFIED": 0, + "UNHEALTHY": 1, + "STALE_STATUS": 2, +} + +func (x ClusterStatus_Substate) String() string { + return proto.EnumName(ClusterStatus_Substate_name, int32(x)) +} +func (ClusterStatus_Substate) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{8, 1} } // Describes the identifying information, config, and status of // a cluster of Google Compute Engine instances. type Cluster struct { - // [Required] The Google Cloud Platform project ID that the cluster belongs to. + // Required. The Google Cloud Platform project ID that the cluster belongs to. ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` - // [Required] The cluster name. Cluster names within a project must be + // Required. The cluster name. Cluster names within a project must be // unique. Names of deleted clusters can be reused. ClusterName string `protobuf:"bytes,2,opt,name=cluster_name,json=clusterName" json:"cluster_name,omitempty"` - // [Required] The cluster config. Note that Cloud Dataproc may set + // Required. The cluster config. Note that Cloud Dataproc may set // default values, and values may change when clusters are updated. Config *ClusterConfig `protobuf:"bytes,3,opt,name=config" json:"config,omitempty"` - // [Output-only] Cluster status. + // Optional. The labels to associate with this cluster. + // Label **keys** must contain 1 to 63 characters, and must conform to + // [RFC 1035](https://www.ietf.org/rfc/rfc1035.txt). + // Label **values** may be empty, but, if present, must contain 1 to 63 + // characters, and must conform to [RFC 1035](https://www.ietf.org/rfc/rfc1035.txt). + // No more than 32 labels can be associated with a cluster. + Labels map[string]string `protobuf:"bytes,8,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Output-only. Cluster status. Status *ClusterStatus `protobuf:"bytes,4,opt,name=status" json:"status,omitempty"` - // [Output-only] The previous cluster status. + // Output-only. The previous cluster status. StatusHistory []*ClusterStatus `protobuf:"bytes,7,rep,name=status_history,json=statusHistory" json:"status_history,omitempty"` - // [Output-only] A cluster UUID (Unique Universal Identifier). Cloud Dataproc + // Output-only. A cluster UUID (Unique Universal Identifier). Cloud Dataproc // generates this value when it creates the cluster. ClusterUuid string `protobuf:"bytes,6,opt,name=cluster_uuid,json=clusterUuid" json:"cluster_uuid,omitempty"` + // Contains cluster daemon metrics such as HDFS and YARN stats. + // + // **Beta Feature**: This report is available for testing purposes only. It may + // be changed before final release. + Metrics *ClusterMetrics `protobuf:"bytes,9,opt,name=metrics" json:"metrics,omitempty"` } func (m *Cluster) Reset() { *m = Cluster{} } @@ -162,6 +211,13 @@ func (m *Cluster) GetConfig() *ClusterConfig { return nil } +func (m *Cluster) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + func (m *Cluster) GetStatus() *ClusterStatus { if m != nil { return m.Status @@ -183,32 +239,39 @@ func (m *Cluster) GetClusterUuid() string { return "" } +func (m *Cluster) GetMetrics() *ClusterMetrics { + if m != nil { + return m.Metrics + } + return nil +} + // The cluster config. type ClusterConfig struct { - // [Optional] A Google Cloud Storage staging bucket used for sharing generated + // Optional. A Google Cloud Storage staging bucket used for sharing generated // SSH keys and config. If you do not specify a staging bucket, Cloud // Dataproc will determine an appropriate Cloud Storage location (US, // ASIA, or EU) for your cluster's staging bucket according to the Google // Compute Engine zone where your cluster is deployed, and then it will create // and manage this project-level, per-location bucket for you. ConfigBucket string `protobuf:"bytes,1,opt,name=config_bucket,json=configBucket" json:"config_bucket,omitempty"` - // [Required] The shared Google Compute Engine config settings for + // Required. The shared Google Compute Engine config settings for // all instances in a cluster. GceClusterConfig *GceClusterConfig `protobuf:"bytes,8,opt,name=gce_cluster_config,json=gceClusterConfig" json:"gce_cluster_config,omitempty"` - // [Optional] The Google Compute Engine config settings for + // Optional. The Google Compute Engine config settings for // the master instance in a cluster. MasterConfig *InstanceGroupConfig `protobuf:"bytes,9,opt,name=master_config,json=masterConfig" json:"master_config,omitempty"` - // [Optional] The Google Compute Engine config settings for + // Optional. The Google Compute Engine config settings for // worker instances in a cluster. WorkerConfig *InstanceGroupConfig `protobuf:"bytes,10,opt,name=worker_config,json=workerConfig" json:"worker_config,omitempty"` - // [Optional] The Google Compute Engine config settings for + // Optional. The Google Compute Engine config settings for // additional worker instances in a cluster. SecondaryWorkerConfig *InstanceGroupConfig `protobuf:"bytes,12,opt,name=secondary_worker_config,json=secondaryWorkerConfig" json:"secondary_worker_config,omitempty"` - // [Optional] The config settings for software inside the cluster. + // Optional. The config settings for software inside the cluster. SoftwareConfig *SoftwareConfig `protobuf:"bytes,13,opt,name=software_config,json=softwareConfig" json:"software_config,omitempty"` - // [Optional] Commands to execute on each node after config is + // Optional. Commands to execute on each node after config is // completed. By default, executables are run on master and all worker nodes. - // You can test a node's role metadata to run an executable on + // You can test a node's `role` metadata to run an executable on // a master or worker node, as shown below using `curl` (you can also use `wget`): // // ROLE=$(curl -H Metadata-Flavor:Google http://metadata/computeMetadata/v1/instance/attributes/dataproc-role) @@ -277,28 +340,58 @@ func (m *ClusterConfig) GetInitializationActions() []*NodeInitializationAction { // Common config settings for resources of Google Compute Engine cluster // instances, applicable to all instances in the cluster. type GceClusterConfig struct { - // [Required] The zone where the Google Compute Engine cluster will be located. - // Example: `https://www.googleapis.com/compute/v1/projects/[project_id]/zones/[zone]`. + // Optional. The zone where the Google Compute Engine cluster will be located. + // On a create request, it is required in the "global" region. If omitted + // in a non-global Cloud Dataproc region, the service will pick a zone in the + // corresponding Compute Engine region. On a get request, zone will + // always be present. + // + // A full URL, partial URI, or short name are valid. Examples: + // + // * `https://www.googleapis.com/compute/v1/projects/[project_id]/zones/[zone]` + // * `projects/[project_id]/zones/[zone]` + // * `us-central1-f` ZoneUri string `protobuf:"bytes,1,opt,name=zone_uri,json=zoneUri" json:"zone_uri,omitempty"` - // [Optional] The Google Compute Engine network to be used for machine + // Optional. The Google Compute Engine network to be used for machine // communications. Cannot be specified with subnetwork_uri. If neither // `network_uri` nor `subnetwork_uri` is specified, the "default" network of // the project is used, if it exists. Cannot be a "Custom Subnet Network" (see // [Using Subnetworks](/compute/docs/subnetworks) for more information). - // Example: `https://www.googleapis.com/compute/v1/projects/[project_id]/regions/global/default`. + // + // A full URL, partial URI, or short name are valid. Examples: + // + // * `https://www.googleapis.com/compute/v1/projects/[project_id]/regions/global/default` + // * `projects/[project_id]/regions/global/default` + // * `default` NetworkUri string `protobuf:"bytes,2,opt,name=network_uri,json=networkUri" json:"network_uri,omitempty"` - // [Optional] The Google Compute Engine subnetwork to be used for machine + // Optional. The Google Compute Engine subnetwork to be used for machine // communications. Cannot be specified with network_uri. - // Example: `https://www.googleapis.com/compute/v1/projects/[project_id]/regions/us-east1/sub0`. + // + // A full URL, partial URI, or short name are valid. Examples: + // + // * `https://www.googleapis.com/compute/v1/projects/[project_id]/regions/us-east1/sub0` + // * `projects/[project_id]/regions/us-east1/sub0` + // * `sub0` SubnetworkUri string `protobuf:"bytes,6,opt,name=subnetwork_uri,json=subnetworkUri" json:"subnetwork_uri,omitempty"` - // [Optional] If true, all instances in the cluster will only have internal IP + // Optional. If true, all instances in the cluster will only have internal IP // addresses. By default, clusters are not restricted to internal IP addresses, // and will have ephemeral external IP addresses assigned to each instance. // This `internal_ip_only` restriction can only be enabled for subnetwork // enabled networks, and all off-cluster dependencies must be configured to be // accessible without external IP addresses. InternalIpOnly bool `protobuf:"varint,7,opt,name=internal_ip_only,json=internalIpOnly" json:"internal_ip_only,omitempty"` - // [Optional] The URIs of service account scopes to be included in Google + // Optional. The service account of the instances. Defaults to the default + // Google Compute Engine service account. Custom service accounts need + // permissions equivalent to the folloing IAM roles: + // + // * roles/logging.logWriter + // * roles/storage.objectAdmin + // + // (see https://cloud.google.com/compute/docs/access/service-accounts#custom_service_accounts + // for more information). + // Example: `[account_id]@[project_id].iam.gserviceaccount.com` + ServiceAccount string `protobuf:"bytes,8,opt,name=service_account,json=serviceAccount" json:"service_account,omitempty"` + // Optional. The URIs of service account scopes to be included in Google // Compute Engine instances. The following base set of scopes is always // included: // @@ -314,7 +407,7 @@ type GceClusterConfig struct { // * https://www.googleapis.com/auth/devstorage.full_control ServiceAccountScopes []string `protobuf:"bytes,3,rep,name=service_account_scopes,json=serviceAccountScopes" json:"service_account_scopes,omitempty"` // The Google Compute Engine tags to add to all instances (see - // [Labeling instances](/compute/docs/label-or-tag-resources#labeling_instances)). + // [Tagging instances](/compute/docs/label-or-tag-resources#tags)). Tags []string `protobuf:"bytes,4,rep,name=tags" json:"tags,omitempty"` // The Google Compute Engine metadata entries to add to all instances (see // [Project and instance metadata](https://cloud.google.com/compute/docs/storing-retrieving-metadata#project_and_instance_metadata)). @@ -354,6 +447,13 @@ func (m *GceClusterConfig) GetInternalIpOnly() bool { return false } +func (m *GceClusterConfig) GetServiceAccount() string { + if m != nil { + return m.ServiceAccount + } + return "" +} + func (m *GceClusterConfig) GetServiceAccountScopes() []string { if m != nil { return m.ServiceAccountScopes @@ -375,30 +475,41 @@ func (m *GceClusterConfig) GetMetadata() map[string]string { return nil } -// [Optional] The config settings for Google Compute Engine resources in +// Optional. The config settings for Google Compute Engine resources in // an instance group, such as a master or worker group. type InstanceGroupConfig struct { - // [Required] The number of VM instances in the instance group. + // Optional. The number of VM instances in the instance group. // For master instance groups, must be set to 1. NumInstances int32 `protobuf:"varint,1,opt,name=num_instances,json=numInstances" json:"num_instances,omitempty"` - // [Optional] The list of instance names. Cloud Dataproc derives the names from + // Optional. The list of instance names. Cloud Dataproc derives the names from // `cluster_name`, `num_instances`, and the instance group if not set by user // (recommended practice is to let Cloud Dataproc derive the name). InstanceNames []string `protobuf:"bytes,2,rep,name=instance_names,json=instanceNames" json:"instance_names,omitempty"` - // [Output-only] The Google Compute Engine image resource used for cluster + // Output-only. The Google Compute Engine image resource used for cluster // instances. Inferred from `SoftwareConfig.image_version`. ImageUri string `protobuf:"bytes,3,opt,name=image_uri,json=imageUri" json:"image_uri,omitempty"` - // [Required] The Google Compute Engine machine type used for cluster instances. - // Example: `https://www.googleapis.com/compute/v1/projects/[project_id]/zones/us-east1-a/machineTypes/n1-standard-2`. + // Optional. The Google Compute Engine machine type used for cluster instances. + // + // A full URL, partial URI, or short name are valid. Examples: + // + // * `https://www.googleapis.com/compute/v1/projects/[project_id]/zones/us-east1-a/machineTypes/n1-standard-2` + // * `projects/[project_id]/zones/us-east1-a/machineTypes/n1-standard-2` + // * `n1-standard-2` MachineTypeUri string `protobuf:"bytes,4,opt,name=machine_type_uri,json=machineTypeUri" json:"machine_type_uri,omitempty"` - // [Optional] Disk option config settings. + // Optional. Disk option config settings. DiskConfig *DiskConfig `protobuf:"bytes,5,opt,name=disk_config,json=diskConfig" json:"disk_config,omitempty"` - // [Optional] Specifies that this instance group contains preemptible instances. + // Optional. Specifies that this instance group contains preemptible instances. IsPreemptible bool `protobuf:"varint,6,opt,name=is_preemptible,json=isPreemptible" json:"is_preemptible,omitempty"` - // [Output-only] The config for Google Compute Engine Instance Group + // Output-only. The config for Google Compute Engine Instance Group // Manager that manages this group. // This is only used for preemptible instance groups. ManagedGroupConfig *ManagedGroupConfig `protobuf:"bytes,7,opt,name=managed_group_config,json=managedGroupConfig" json:"managed_group_config,omitempty"` + // Optional. The Google Compute Engine accelerator configuration for these + // instances. + // + // **Beta Feature**: This feature is still under development. It may be + // changed before final release. + Accelerators []*AcceleratorConfig `protobuf:"bytes,8,rep,name=accelerators" json:"accelerators,omitempty"` } func (m *InstanceGroupConfig) Reset() { *m = InstanceGroupConfig{} } @@ -455,12 +566,19 @@ func (m *InstanceGroupConfig) GetManagedGroupConfig() *ManagedGroupConfig { return nil } +func (m *InstanceGroupConfig) GetAccelerators() []*AcceleratorConfig { + if m != nil { + return m.Accelerators + } + return nil +} + // Specifies the resources used to actively manage an instance group. type ManagedGroupConfig struct { - // [Output-only] The name of the Instance Template used for the Managed + // Output-only. The name of the Instance Template used for the Managed // Instance Group. InstanceTemplateName string `protobuf:"bytes,1,opt,name=instance_template_name,json=instanceTemplateName" json:"instance_template_name,omitempty"` - // [Output-only] The name of the Instance Group Manager for this group. + // Output-only. The name of the Instance Group Manager for this group. InstanceGroupManagerName string `protobuf:"bytes,2,opt,name=instance_group_manager_name,json=instanceGroupManagerName" json:"instance_group_manager_name,omitempty"` } @@ -483,11 +601,46 @@ func (m *ManagedGroupConfig) GetInstanceGroupManagerName() string { return "" } +// Specifies the type and number of accelerator cards attached to the instances +// of an instance group (see [GPUs on Compute Engine](/compute/docs/gpus/)). +type AcceleratorConfig struct { + // Full URL, partial URI, or short name of the accelerator type resource to + // expose to this instance. See [Google Compute Engine AcceleratorTypes]( + // /compute/docs/reference/beta/acceleratorTypes) + // + // Examples + // * `https://www.googleapis.com/compute/beta/projects/[project_id]/zones/us-east1-a/acceleratorTypes/nvidia-tesla-k80` + // * `projects/[project_id]/zones/us-east1-a/acceleratorTypes/nvidia-tesla-k80` + // * `nvidia-tesla-k80` + AcceleratorTypeUri string `protobuf:"bytes,1,opt,name=accelerator_type_uri,json=acceleratorTypeUri" json:"accelerator_type_uri,omitempty"` + // The number of the accelerator cards of this type exposed to this instance. + AcceleratorCount int32 `protobuf:"varint,2,opt,name=accelerator_count,json=acceleratorCount" json:"accelerator_count,omitempty"` +} + +func (m *AcceleratorConfig) Reset() { *m = AcceleratorConfig{} } +func (m *AcceleratorConfig) String() string { return proto.CompactTextString(m) } +func (*AcceleratorConfig) ProtoMessage() {} +func (*AcceleratorConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *AcceleratorConfig) GetAcceleratorTypeUri() string { + if m != nil { + return m.AcceleratorTypeUri + } + return "" +} + +func (m *AcceleratorConfig) GetAcceleratorCount() int32 { + if m != nil { + return m.AcceleratorCount + } + return 0 +} + // Specifies the config of disk options for a group of VM instances. type DiskConfig struct { - // [Optional] Size in GB of the boot disk (default is 500GB). + // Optional. Size in GB of the boot disk (default is 500GB). BootDiskSizeGb int32 `protobuf:"varint,1,opt,name=boot_disk_size_gb,json=bootDiskSizeGb" json:"boot_disk_size_gb,omitempty"` - // [Optional] Number of attached SSDs, from 0 to 4 (default is 0). + // Optional. Number of attached SSDs, from 0 to 4 (default is 0). // If SSDs are not attached, the boot disk is used to store runtime logs and // [HDFS](https://hadoop.apache.org/docs/r1.2.1/hdfs_user_guide.html) data. // If one or more SSDs are attached, this runtime bulk @@ -499,7 +652,7 @@ type DiskConfig struct { func (m *DiskConfig) Reset() { *m = DiskConfig{} } func (m *DiskConfig) String() string { return proto.CompactTextString(m) } func (*DiskConfig) ProtoMessage() {} -func (*DiskConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } +func (*DiskConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } func (m *DiskConfig) GetBootDiskSizeGb() int32 { if m != nil { @@ -518,9 +671,9 @@ func (m *DiskConfig) GetNumLocalSsds() int32 { // Specifies an executable to run on a fully configured node and a // timeout period for executable completion. type NodeInitializationAction struct { - // [Required] Google Cloud Storage URI of executable file. + // Required. Google Cloud Storage URI of executable file. ExecutableFile string `protobuf:"bytes,1,opt,name=executable_file,json=executableFile" json:"executable_file,omitempty"` - // [Optional] Amount of time executable has to complete. Default is + // Optional. Amount of time executable has to complete. Default is // 10 minutes. Cluster creation fails with an explanatory error message (the // name of the executable that caused the error and the exceeded timeout // period) if the executable is not completed at end of the timeout period. @@ -530,7 +683,7 @@ type NodeInitializationAction struct { func (m *NodeInitializationAction) Reset() { *m = NodeInitializationAction{} } func (m *NodeInitializationAction) String() string { return proto.CompactTextString(m) } func (*NodeInitializationAction) ProtoMessage() {} -func (*NodeInitializationAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } +func (*NodeInitializationAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } func (m *NodeInitializationAction) GetExecutableFile() string { if m != nil { @@ -548,18 +701,21 @@ func (m *NodeInitializationAction) GetExecutionTimeout() *google_protobuf4.Durat // The status of a cluster and its instances. type ClusterStatus struct { - // [Output-only] The cluster's state. + // Output-only. The cluster's state. State ClusterStatus_State `protobuf:"varint,1,opt,name=state,enum=google.cloud.dataproc.v1.ClusterStatus_State" json:"state,omitempty"` - // [Output-only] Optional details of cluster's state. + // Output-only. Optional details of cluster's state. Detail string `protobuf:"bytes,2,opt,name=detail" json:"detail,omitempty"` - // [Output-only] Time when this state was entered. + // Output-only. Time when this state was entered. StateStartTime *google_protobuf3.Timestamp `protobuf:"bytes,3,opt,name=state_start_time,json=stateStartTime" json:"state_start_time,omitempty"` + // Output-only. Additional state information that includes + // status reported by the agent. + Substate ClusterStatus_Substate `protobuf:"varint,4,opt,name=substate,enum=google.cloud.dataproc.v1.ClusterStatus_Substate" json:"substate,omitempty"` } func (m *ClusterStatus) Reset() { *m = ClusterStatus{} } func (m *ClusterStatus) String() string { return proto.CompactTextString(m) } func (*ClusterStatus) ProtoMessage() {} -func (*ClusterStatus) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } +func (*ClusterStatus) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } func (m *ClusterStatus) GetState() ClusterStatus_State { if m != nil { @@ -582,32 +738,44 @@ func (m *ClusterStatus) GetStateStartTime() *google_protobuf3.Timestamp { return nil } +func (m *ClusterStatus) GetSubstate() ClusterStatus_Substate { + if m != nil { + return m.Substate + } + return ClusterStatus_UNSPECIFIED +} + // Specifies the selection and config of software inside the cluster. type SoftwareConfig struct { - // [Optional] The version of software inside the cluster. It must match the + // Optional. The version of software inside the cluster. It must match the // regular expression `[0-9]+\.[0-9]+`. If unspecified, it defaults to the // latest version (see [Cloud Dataproc Versioning](/dataproc/versioning)). ImageVersion string `protobuf:"bytes,1,opt,name=image_version,json=imageVersion" json:"image_version,omitempty"` - // [Optional] The properties to set on daemon config files. + // Optional. The properties to set on daemon config files. // // Property keys are specified in `prefix:property` format, such as // `core:fs.defaultFS`. The following are supported prefixes // and their mappings: // + // * capacity-scheduler: `capacity-scheduler.xml` // * core: `core-site.xml` + // * distcp: `distcp-default.xml` // * hdfs: `hdfs-site.xml` - // * mapred: `mapred-site.xml` - // * yarn: `yarn-site.xml` // * hive: `hive-site.xml` + // * mapred: `mapred-site.xml` // * pig: `pig.properties` // * spark: `spark-defaults.conf` + // * yarn: `yarn-site.xml` + // + // For more information, see + // [Cluster properties](/dataproc/docs/concepts/cluster-properties). Properties map[string]string `protobuf:"bytes,2,rep,name=properties" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` } func (m *SoftwareConfig) Reset() { *m = SoftwareConfig{} } func (m *SoftwareConfig) String() string { return proto.CompactTextString(m) } func (*SoftwareConfig) ProtoMessage() {} -func (*SoftwareConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } +func (*SoftwareConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } func (m *SoftwareConfig) GetImageVersion() string { if m != nil { @@ -623,21 +791,51 @@ func (m *SoftwareConfig) GetProperties() map[string]string { return nil } +// Contains cluster daemon metrics, such as HDFS and YARN stats. +// +// **Beta Feature**: This report is available for testing purposes only. It may +// be changed before final release. +type ClusterMetrics struct { + // The HDFS metrics. + HdfsMetrics map[string]int64 `protobuf:"bytes,1,rep,name=hdfs_metrics,json=hdfsMetrics" json:"hdfs_metrics,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` + // The YARN metrics. + YarnMetrics map[string]int64 `protobuf:"bytes,2,rep,name=yarn_metrics,json=yarnMetrics" json:"yarn_metrics,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` +} + +func (m *ClusterMetrics) Reset() { *m = ClusterMetrics{} } +func (m *ClusterMetrics) String() string { return proto.CompactTextString(m) } +func (*ClusterMetrics) ProtoMessage() {} +func (*ClusterMetrics) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *ClusterMetrics) GetHdfsMetrics() map[string]int64 { + if m != nil { + return m.HdfsMetrics + } + return nil +} + +func (m *ClusterMetrics) GetYarnMetrics() map[string]int64 { + if m != nil { + return m.YarnMetrics + } + return nil +} + // A request to create a cluster. type CreateClusterRequest struct { - // [Required] The ID of the Google Cloud Platform project that the cluster + // Required. The ID of the Google Cloud Platform project that the cluster // belongs to. ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` - // [Required] The Cloud Dataproc region in which to handle the request. + // Required. The Cloud Dataproc region in which to handle the request. Region string `protobuf:"bytes,3,opt,name=region" json:"region,omitempty"` - // [Required] The cluster to create. + // Required. The cluster to create. Cluster *Cluster `protobuf:"bytes,2,opt,name=cluster" json:"cluster,omitempty"` } func (m *CreateClusterRequest) Reset() { *m = CreateClusterRequest{} } func (m *CreateClusterRequest) String() string { return proto.CompactTextString(m) } func (*CreateClusterRequest) ProtoMessage() {} -func (*CreateClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } +func (*CreateClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } func (m *CreateClusterRequest) GetProjectId() string { if m != nil { @@ -662,19 +860,19 @@ func (m *CreateClusterRequest) GetCluster() *Cluster { // A request to update a cluster. type UpdateClusterRequest struct { - // [Required] The ID of the Google Cloud Platform project the + // Required. The ID of the Google Cloud Platform project the // cluster belongs to. ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` - // [Required] The Cloud Dataproc region in which to handle the request. + // Required. The Cloud Dataproc region in which to handle the request. Region string `protobuf:"bytes,5,opt,name=region" json:"region,omitempty"` - // [Required] The cluster name. + // Required. The cluster name. ClusterName string `protobuf:"bytes,2,opt,name=cluster_name,json=clusterName" json:"cluster_name,omitempty"` - // [Required] The changes to the cluster. + // Required. The changes to the cluster. Cluster *Cluster `protobuf:"bytes,3,opt,name=cluster" json:"cluster,omitempty"` - // [Required] Specifies the path, relative to Cluster, of + // Required. Specifies the path, relative to `Cluster`, of // the field to update. For example, to change the number of workers - // in a cluster to 5, the update_mask parameter would be - // specified as config.worker_config.num_instances, + // in a cluster to 5, the `update_mask` parameter would be + // specified as `config.worker_config.num_instances`, // and the `PATCH` request body would specify the new value, as follows: // // { @@ -684,9 +882,10 @@ type UpdateClusterRequest struct { // } // } // } - // Similarly, to change the number of preemptible workers in a cluster to 5, the - // update_mask parameter would be config.secondary_worker_config.num_instances, - // and the `PATCH` request body would be set as follows: + // Similarly, to change the number of preemptible workers in a cluster to 5, + // the `update_mask` parameter would be + // `config.secondary_worker_config.num_instances`, and the `PATCH` request + // body would be set as follows: // // { // "config":{ @@ -695,16 +894,35 @@ type UpdateClusterRequest struct { // } // } // } - // Note: Currently, config.worker_config.num_instances - // and config.secondary_worker_config.num_instances are the only - // fields that can be updated. + // Note: Currently, only the following fields can be updated: + // + //
+ // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + //
MaskPurpose
labelsUpdate labels
config.worker_config.num_instancesResize primary worker group
config.secondary_worker_config.num_instancesResize secondary worker group
UpdateMask *google_protobuf5.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` } func (m *UpdateClusterRequest) Reset() { *m = UpdateClusterRequest{} } func (m *UpdateClusterRequest) String() string { return proto.CompactTextString(m) } func (*UpdateClusterRequest) ProtoMessage() {} -func (*UpdateClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } +func (*UpdateClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } func (m *UpdateClusterRequest) GetProjectId() string { if m != nil { @@ -743,19 +961,19 @@ func (m *UpdateClusterRequest) GetUpdateMask() *google_protobuf5.FieldMask { // A request to delete a cluster. type DeleteClusterRequest struct { - // [Required] The ID of the Google Cloud Platform project that the cluster + // Required. The ID of the Google Cloud Platform project that the cluster // belongs to. ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` - // [Required] The Cloud Dataproc region in which to handle the request. + // Required. The Cloud Dataproc region in which to handle the request. Region string `protobuf:"bytes,3,opt,name=region" json:"region,omitempty"` - // [Required] The cluster name. + // Required. The cluster name. ClusterName string `protobuf:"bytes,2,opt,name=cluster_name,json=clusterName" json:"cluster_name,omitempty"` } func (m *DeleteClusterRequest) Reset() { *m = DeleteClusterRequest{} } func (m *DeleteClusterRequest) String() string { return proto.CompactTextString(m) } func (*DeleteClusterRequest) ProtoMessage() {} -func (*DeleteClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } +func (*DeleteClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } func (m *DeleteClusterRequest) GetProjectId() string { if m != nil { @@ -780,19 +998,19 @@ func (m *DeleteClusterRequest) GetClusterName() string { // Request to get the resource representation for a cluster in a project. type GetClusterRequest struct { - // [Required] The ID of the Google Cloud Platform project that the cluster + // Required. The ID of the Google Cloud Platform project that the cluster // belongs to. ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` - // [Required] The Cloud Dataproc region in which to handle the request. + // Required. The Cloud Dataproc region in which to handle the request. Region string `protobuf:"bytes,3,opt,name=region" json:"region,omitempty"` - // [Required] The cluster name. + // Required. The cluster name. ClusterName string `protobuf:"bytes,2,opt,name=cluster_name,json=clusterName" json:"cluster_name,omitempty"` } func (m *GetClusterRequest) Reset() { *m = GetClusterRequest{} } func (m *GetClusterRequest) String() string { return proto.CompactTextString(m) } func (*GetClusterRequest) ProtoMessage() {} -func (*GetClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } +func (*GetClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } func (m *GetClusterRequest) GetProjectId() string { if m != nil { @@ -817,21 +1035,41 @@ func (m *GetClusterRequest) GetClusterName() string { // A request to list the clusters in a project. type ListClustersRequest struct { - // [Required] The ID of the Google Cloud Platform project that the cluster + // Required. The ID of the Google Cloud Platform project that the cluster // belongs to. ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` - // [Required] The Cloud Dataproc region in which to handle the request. + // Required. The Cloud Dataproc region in which to handle the request. Region string `protobuf:"bytes,4,opt,name=region" json:"region,omitempty"` - // [Optional] The standard List page size. + // Optional. A filter constraining the clusters to list. Filters are + // case-sensitive and have the following syntax: + // + // field = value [AND [field = value]] ... + // + // where **field** is one of `status.state`, `clusterName`, or `labels.[KEY]`, + // and `[KEY]` is a label key. **value** can be `*` to match all values. + // `status.state` can be one of the following: `ACTIVE`, `INACTIVE`, + // `CREATING`, `RUNNING`, `ERROR`, `DELETING`, or `UPDATING`. `ACTIVE` + // contains the `CREATING`, `UPDATING`, and `RUNNING` states. `INACTIVE` + // contains the `DELETING` and `ERROR` states. + // `clusterName` is the name of the cluster provided at creation time. + // Only the logical `AND` operator is supported; space-separated items are + // treated as having an implicit `AND` operator. + // + // Example filter: + // + // status.state = ACTIVE AND clusterName = mycluster + // AND labels.env = staging AND labels.starred = * + Filter string `protobuf:"bytes,5,opt,name=filter" json:"filter,omitempty"` + // Optional. The standard List page size. PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` - // [Optional] The standard List page token. + // Optional. The standard List page token. PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` } func (m *ListClustersRequest) Reset() { *m = ListClustersRequest{} } func (m *ListClustersRequest) String() string { return proto.CompactTextString(m) } func (*ListClustersRequest) ProtoMessage() {} -func (*ListClustersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } +func (*ListClustersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } func (m *ListClustersRequest) GetProjectId() string { if m != nil { @@ -847,6 +1085,13 @@ func (m *ListClustersRequest) GetRegion() string { return "" } +func (m *ListClustersRequest) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + func (m *ListClustersRequest) GetPageSize() int32 { if m != nil { return m.PageSize @@ -863,18 +1108,18 @@ func (m *ListClustersRequest) GetPageToken() string { // The list of all clusters in a project. type ListClustersResponse struct { - // [Output-only] The clusters in the project. + // Output-only. The clusters in the project. Clusters []*Cluster `protobuf:"bytes,1,rep,name=clusters" json:"clusters,omitempty"` - // [Output-only] This token is included in the response if there are more + // Output-only. This token is included in the response if there are more // results to fetch. To fetch additional results, provide this value as the - // `page_token` in a subsequent ListClustersRequest. + // `page_token` in a subsequent `ListClustersRequest`. NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` } func (m *ListClustersResponse) Reset() { *m = ListClustersResponse{} } func (m *ListClustersResponse) String() string { return proto.CompactTextString(m) } func (*ListClustersResponse) ProtoMessage() {} -func (*ListClustersResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } +func (*ListClustersResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } func (m *ListClustersResponse) GetClusters() []*Cluster { if m != nil { @@ -892,19 +1137,19 @@ func (m *ListClustersResponse) GetNextPageToken() string { // A request to collect cluster diagnostic information. type DiagnoseClusterRequest struct { - // [Required] The ID of the Google Cloud Platform project that the cluster + // Required. The ID of the Google Cloud Platform project that the cluster // belongs to. ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` - // [Required] The Cloud Dataproc region in which to handle the request. + // Required. The Cloud Dataproc region in which to handle the request. Region string `protobuf:"bytes,3,opt,name=region" json:"region,omitempty"` - // [Required] The cluster name. + // Required. The cluster name. ClusterName string `protobuf:"bytes,2,opt,name=cluster_name,json=clusterName" json:"cluster_name,omitempty"` } func (m *DiagnoseClusterRequest) Reset() { *m = DiagnoseClusterRequest{} } func (m *DiagnoseClusterRequest) String() string { return proto.CompactTextString(m) } func (*DiagnoseClusterRequest) ProtoMessage() {} -func (*DiagnoseClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } +func (*DiagnoseClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } func (m *DiagnoseClusterRequest) GetProjectId() string { if m != nil { @@ -929,7 +1174,7 @@ func (m *DiagnoseClusterRequest) GetClusterName() string { // The location of diagnostic output. type DiagnoseClusterResults struct { - // [Output-only] The Google Cloud Storage URI of the diagnostic output. + // Output-only. The Google Cloud Storage URI of the diagnostic output. // The output report is a plain text file with a summary of collected // diagnostics. OutputUri string `protobuf:"bytes,1,opt,name=output_uri,json=outputUri" json:"output_uri,omitempty"` @@ -938,7 +1183,7 @@ type DiagnoseClusterResults struct { func (m *DiagnoseClusterResults) Reset() { *m = DiagnoseClusterResults{} } func (m *DiagnoseClusterResults) String() string { return proto.CompactTextString(m) } func (*DiagnoseClusterResults) ProtoMessage() {} -func (*DiagnoseClusterResults) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } +func (*DiagnoseClusterResults) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } func (m *DiagnoseClusterResults) GetOutputUri() string { if m != nil { @@ -953,10 +1198,12 @@ func init() { proto.RegisterType((*GceClusterConfig)(nil), "google.cloud.dataproc.v1.GceClusterConfig") proto.RegisterType((*InstanceGroupConfig)(nil), "google.cloud.dataproc.v1.InstanceGroupConfig") proto.RegisterType((*ManagedGroupConfig)(nil), "google.cloud.dataproc.v1.ManagedGroupConfig") + proto.RegisterType((*AcceleratorConfig)(nil), "google.cloud.dataproc.v1.AcceleratorConfig") proto.RegisterType((*DiskConfig)(nil), "google.cloud.dataproc.v1.DiskConfig") proto.RegisterType((*NodeInitializationAction)(nil), "google.cloud.dataproc.v1.NodeInitializationAction") proto.RegisterType((*ClusterStatus)(nil), "google.cloud.dataproc.v1.ClusterStatus") proto.RegisterType((*SoftwareConfig)(nil), "google.cloud.dataproc.v1.SoftwareConfig") + proto.RegisterType((*ClusterMetrics)(nil), "google.cloud.dataproc.v1.ClusterMetrics") proto.RegisterType((*CreateClusterRequest)(nil), "google.cloud.dataproc.v1.CreateClusterRequest") proto.RegisterType((*UpdateClusterRequest)(nil), "google.cloud.dataproc.v1.UpdateClusterRequest") proto.RegisterType((*DeleteClusterRequest)(nil), "google.cloud.dataproc.v1.DeleteClusterRequest") @@ -966,6 +1213,7 @@ func init() { proto.RegisterType((*DiagnoseClusterRequest)(nil), "google.cloud.dataproc.v1.DiagnoseClusterRequest") proto.RegisterType((*DiagnoseClusterResults)(nil), "google.cloud.dataproc.v1.DiagnoseClusterResults") proto.RegisterEnum("google.cloud.dataproc.v1.ClusterStatus_State", ClusterStatus_State_name, ClusterStatus_State_value) + proto.RegisterEnum("google.cloud.dataproc.v1.ClusterStatus_Substate", ClusterStatus_Substate_name, ClusterStatus_Substate_value) } // Reference imports to suppress errors if they are not otherwise used. @@ -1224,110 +1472,127 @@ var _ClusterController_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("google/cloud/dataproc/v1/clusters.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 1667 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0x4f, 0x73, 0x23, 0x47, - 0x15, 0x67, 0x64, 0xcb, 0x96, 0x9f, 0x2c, 0x59, 0xdb, 0x51, 0x8c, 0xa2, 0x4d, 0x88, 0x33, 0x09, - 0xac, 0xb3, 0x80, 0x44, 0x1c, 0x28, 0x52, 0xeb, 0x0a, 0xb0, 0x6b, 0x79, 0x8d, 0xc9, 0xae, 0xd6, - 0x8c, 0xed, 0x4d, 0x8a, 0x2a, 0x98, 0x6a, 0xcd, 0xb4, 0x27, 0x8d, 0x66, 0xa6, 0x27, 0xd3, 0x3d, - 0x4e, 0xbc, 0x5b, 0x7b, 0xe1, 0x04, 0xe1, 0xc8, 0x57, 0xe0, 0x40, 0xe5, 0x08, 0x37, 0x4e, 0x7c, - 0x02, 0x2e, 0x1c, 0xb9, 0x72, 0xe2, 0x03, 0x70, 0xe2, 0x40, 0xf5, 0x9f, 0x91, 0x34, 0xb6, 0x24, - 0x7b, 0x17, 0xd7, 0x9e, 0xd4, 0xfd, 0xde, 0xef, 0xfd, 0xe9, 0xd7, 0xef, 0xbd, 0x7e, 0x23, 0xb8, - 0x15, 0x30, 0x16, 0x84, 0xa4, 0xeb, 0x85, 0x2c, 0xf3, 0xbb, 0x3e, 0x16, 0x38, 0x49, 0x99, 0xd7, - 0x3d, 0x7d, 0xaf, 0xeb, 0x85, 0x19, 0x17, 0x24, 0xe5, 0x9d, 0x24, 0x65, 0x82, 0xa1, 0x96, 0x06, - 0x76, 0x14, 0xb0, 0x93, 0x03, 0x3b, 0xa7, 0xef, 0xb5, 0x5f, 0x37, 0x2a, 0x70, 0x42, 0xbb, 0x38, - 0x8e, 0x99, 0xc0, 0x82, 0xb2, 0xd8, 0xc8, 0xb5, 0xdf, 0x9d, 0x69, 0x80, 0x25, 0x24, 0x2d, 0x40, - 0xdf, 0x36, 0xd0, 0x90, 0xc5, 0x41, 0x9a, 0xc5, 0x31, 0x8d, 0x83, 0x8b, 0xa0, 0x6f, 0x18, 0x90, - 0xda, 0x0d, 0xb2, 0x93, 0xae, 0x9f, 0x69, 0x80, 0xe1, 0x6f, 0x9c, 0xe7, 0x9f, 0x50, 0x12, 0xfa, - 0x6e, 0x84, 0xf9, 0xd0, 0x20, 0xde, 0x3c, 0x8f, 0x10, 0x34, 0x22, 0x5c, 0xe0, 0x28, 0xd1, 0x00, - 0xfb, 0x6f, 0x25, 0x58, 0xde, 0xd1, 0xa7, 0x47, 0x6f, 0x00, 0x24, 0x29, 0xfb, 0x35, 0xf1, 0x84, - 0x4b, 0xfd, 0x96, 0xb5, 0x61, 0x6d, 0xae, 0x38, 0x2b, 0x86, 0xb2, 0xef, 0xa3, 0xb7, 0x60, 0xd5, - 0xc4, 0xc9, 0x8d, 0x71, 0x44, 0x5a, 0x25, 0x05, 0xa8, 0x1a, 0x5a, 0x1f, 0x47, 0x04, 0xfd, 0x18, - 0x96, 0x3c, 0x16, 0x9f, 0xd0, 0xa0, 0xb5, 0xb0, 0x61, 0x6d, 0x56, 0xb7, 0x6e, 0x75, 0x66, 0x45, - 0xb2, 0x63, 0x8c, 0xee, 0x28, 0xb8, 0x63, 0xc4, 0xa4, 0x02, 0x2e, 0xb0, 0xc8, 0x78, 0x6b, 0xf1, - 0x8a, 0x0a, 0x0e, 0x15, 0xdc, 0x31, 0x62, 0xa8, 0x0f, 0x75, 0xbd, 0x72, 0x3f, 0xa5, 0x5c, 0xb0, - 0xf4, 0xac, 0xb5, 0xbc, 0xb1, 0xf0, 0x3c, 0x8a, 0x6a, 0x5a, 0xfc, 0xa7, 0x5a, 0x7a, 0xf2, 0xd0, - 0x59, 0x46, 0xfd, 0xd6, 0x52, 0xe1, 0xd0, 0xc7, 0x19, 0xf5, 0xed, 0x7f, 0x2e, 0x42, 0xad, 0x70, - 0x1a, 0xf4, 0x36, 0xd4, 0xf4, 0x79, 0xdc, 0x41, 0xe6, 0x0d, 0x89, 0x30, 0xb1, 0x5c, 0xd5, 0xc4, - 0x7b, 0x8a, 0x86, 0x3e, 0x01, 0x14, 0x78, 0xc4, 0xcd, 0xb5, 0x9b, 0xb8, 0x55, 0xd4, 0xb1, 0x6f, - 0xcf, 0xf6, 0x76, 0xcf, 0x23, 0xc5, 0xd0, 0x35, 0x82, 0x73, 0x14, 0xe4, 0x40, 0x2d, 0xc2, 0x93, - 0x4a, 0x57, 0x94, 0xd2, 0xef, 0xce, 0x56, 0xba, 0x1f, 0x73, 0x81, 0x63, 0x8f, 0xec, 0xa5, 0x2c, - 0x4b, 0x8c, 0xde, 0x55, 0xad, 0x63, 0xac, 0xf3, 0x73, 0x96, 0x0e, 0xc7, 0x3a, 0xe1, 0x85, 0x74, - 0x6a, 0x1d, 0x46, 0x27, 0x81, 0xaf, 0x73, 0xe2, 0xb1, 0xd8, 0xc7, 0xe9, 0x99, 0x5b, 0xd4, 0xbe, - 0xfa, 0x22, 0xda, 0x5f, 0x1d, 0x69, 0xfb, 0x78, 0xd2, 0xcc, 0xcf, 0x61, 0x8d, 0xb3, 0x13, 0xf1, - 0x39, 0x4e, 0x49, 0xae, 0xbe, 0xa6, 0xd4, 0x6f, 0xce, 0x56, 0x7f, 0x68, 0x04, 0x8c, 0xe6, 0x3a, - 0x2f, 0xec, 0x11, 0x85, 0x75, 0x1a, 0x53, 0x41, 0x71, 0x48, 0x9f, 0xa8, 0x82, 0x74, 0xb1, 0xa7, - 0x0a, 0xb7, 0x55, 0x55, 0xd9, 0xb6, 0x35, 0x5b, 0x73, 0x9f, 0xf9, 0x64, 0xbf, 0x20, 0x7b, 0x57, - 0x89, 0x3a, 0xaf, 0xd2, 0x29, 0x54, 0x6e, 0xff, 0xb7, 0x04, 0x8d, 0xf3, 0x77, 0x8e, 0x5e, 0x83, - 0xca, 0x13, 0x16, 0x13, 0x37, 0x4b, 0xa9, 0xc9, 0xad, 0x65, 0xb9, 0x3f, 0x4e, 0x29, 0x7a, 0x13, - 0xaa, 0x31, 0x11, 0x32, 0x9a, 0x8a, 0xab, 0x8b, 0x14, 0x0c, 0x49, 0x02, 0xbe, 0x09, 0x75, 0x9e, - 0x0d, 0x26, 0x31, 0x3a, 0xa7, 0x6b, 0x63, 0xaa, 0x84, 0x6d, 0x42, 0x83, 0xc6, 0x82, 0xa4, 0x31, - 0x0e, 0x5d, 0x9a, 0xb8, 0x2c, 0x0e, 0x65, 0x29, 0x59, 0x9b, 0x15, 0xa7, 0x9e, 0xd3, 0xf7, 0x93, - 0x47, 0x71, 0x78, 0x86, 0xbe, 0x0f, 0xeb, 0x9c, 0xa4, 0xa7, 0xd4, 0x23, 0x2e, 0xf6, 0x3c, 0x96, - 0xc5, 0xc2, 0xe5, 0x1e, 0x4b, 0x08, 0x6f, 0x2d, 0x6c, 0x2c, 0x6c, 0xae, 0x38, 0x4d, 0xc3, 0xbd, - 0xab, 0x99, 0x87, 0x8a, 0x87, 0x10, 0x2c, 0x0a, 0x1c, 0xc8, 0x3a, 0x97, 0x18, 0xb5, 0x46, 0x47, - 0x50, 0x89, 0x88, 0xc0, 0x32, 0x5c, 0xad, 0xb2, 0x0a, 0xe4, 0x07, 0x57, 0x2f, 0x84, 0xce, 0x43, - 0x23, 0xba, 0x1b, 0x8b, 0xf4, 0xcc, 0x19, 0x69, 0x6a, 0x6f, 0x43, 0xad, 0xc0, 0x42, 0x0d, 0x58, - 0x18, 0x92, 0x33, 0x13, 0x38, 0xb9, 0x44, 0x4d, 0x28, 0x9f, 0xe2, 0x30, 0xcb, 0x7b, 0x9a, 0xde, - 0xdc, 0x29, 0x7d, 0x60, 0xd9, 0xff, 0x29, 0xc1, 0x2b, 0x53, 0x72, 0x4d, 0x96, 0x78, 0x9c, 0x45, - 0x2e, 0x35, 0x2c, 0xae, 0xb4, 0x95, 0x9d, 0xd5, 0x38, 0x8b, 0x72, 0x38, 0x97, 0xa1, 0xce, 0x01, - 0xaa, 0x65, 0xf2, 0x56, 0x49, 0x9d, 0xb6, 0x96, 0x53, 0x65, 0xd3, 0xe4, 0xe8, 0x26, 0xac, 0xd0, - 0x08, 0x07, 0xfa, 0x3a, 0x17, 0x94, 0x07, 0x15, 0x45, 0x30, 0xf7, 0x10, 0x61, 0xef, 0x53, 0x1a, - 0x13, 0x57, 0x9c, 0x25, 0x1a, 0xb3, 0xa8, 0x30, 0x75, 0x43, 0x3f, 0x3a, 0x4b, 0x14, 0x72, 0x17, - 0xaa, 0x3e, 0xe5, 0xc3, 0x3c, 0xc7, 0xcb, 0x2a, 0xc7, 0xdf, 0x99, 0x1d, 0xc0, 0x1e, 0xe5, 0x43, - 0x93, 0xdf, 0xe0, 0x8f, 0xd6, 0xca, 0x69, 0xee, 0x26, 0x29, 0x21, 0x51, 0x22, 0xe8, 0x20, 0x24, - 0x2a, 0x3f, 0x2a, 0x4e, 0x8d, 0xf2, 0x83, 0x31, 0x11, 0xfd, 0x0a, 0x9a, 0x11, 0x8e, 0x71, 0x40, - 0x7c, 0x37, 0x90, 0x71, 0xc9, 0xcd, 0x2e, 0x2b, 0xb3, 0xdf, 0x99, 0x6d, 0xf6, 0xa1, 0x96, 0x9a, - 0x2c, 0x5c, 0x14, 0x5d, 0xa0, 0xd9, 0xbf, 0xb3, 0x00, 0x5d, 0x84, 0xca, 0x64, 0x1b, 0x85, 0x54, - 0x90, 0x28, 0x09, 0xb1, 0xd0, 0xb1, 0x35, 0xd7, 0xd9, 0xcc, 0xb9, 0x47, 0x86, 0xa9, 0xde, 0xa5, - 0x0f, 0xe1, 0xe6, 0x48, 0x4a, 0x7b, 0xab, 0x2d, 0x16, 0x5e, 0xb2, 0x16, 0x9d, 0xbc, 0x67, 0x6d, - 0x5b, 0x3d, 0x6b, 0xf6, 0x2f, 0x01, 0xc6, 0xc1, 0x42, 0xef, 0xc2, 0x8d, 0x01, 0x63, 0xc2, 0x55, - 0xc1, 0xe6, 0xf4, 0x09, 0x71, 0x83, 0x81, 0xb9, 0xfe, 0xba, 0x64, 0x48, 0xe8, 0x21, 0x7d, 0x42, - 0xf6, 0x06, 0xe8, 0x1d, 0xa8, 0xcb, 0x2c, 0x09, 0x99, 0x87, 0x43, 0x97, 0x73, 0x9f, 0x2b, 0x53, - 0x3a, 0x4d, 0x1e, 0x48, 0xe2, 0x21, 0xf7, 0xb9, 0xfd, 0x7b, 0x0b, 0x5a, 0xb3, 0xda, 0x02, 0xba, - 0x05, 0x6b, 0xe4, 0x0b, 0xe2, 0x65, 0x02, 0x0f, 0x42, 0xe2, 0x9e, 0xd0, 0x30, 0x3f, 0x69, 0x7d, - 0x4c, 0xbe, 0x4f, 0x43, 0x82, 0xee, 0xc3, 0x0d, 0x4d, 0x91, 0xed, 0x48, 0x3e, 0xf3, 0x2c, 0x13, - 0xca, 0x5c, 0x75, 0xeb, 0xb5, 0xfc, 0x36, 0xf2, 0x31, 0xa0, 0xd3, 0x33, 0x83, 0x84, 0xd3, 0x18, - 0xc9, 0x1c, 0x69, 0x11, 0xfb, 0xcb, 0xd2, 0xe8, 0x39, 0xd3, 0x4f, 0x22, 0xda, 0x81, 0xb2, 0x7c, - 0x14, 0xb5, 0xe1, 0xfa, 0xbc, 0xae, 0x5c, 0x90, 0xeb, 0xc8, 0x1f, 0xe2, 0x68, 0x59, 0xb4, 0x0e, - 0x4b, 0x3e, 0x11, 0x98, 0x86, 0x26, 0xda, 0x66, 0x87, 0x7a, 0xd0, 0x50, 0x00, 0x97, 0x0b, 0x9c, - 0x0a, 0xe5, 0xb8, 0x19, 0x1e, 0xda, 0x17, 0xbc, 0x3e, 0xca, 0x87, 0x17, 0x47, 0x3d, 0xf2, 0xe4, - 0x50, 0x8a, 0x48, 0xa2, 0xfd, 0x18, 0xca, 0xca, 0x1a, 0xaa, 0xc2, 0xf2, 0x71, 0xff, 0xa3, 0xfe, - 0xa3, 0x8f, 0xfb, 0x8d, 0xaf, 0xa1, 0x55, 0xa8, 0xec, 0x38, 0xbb, 0x77, 0x8f, 0xf6, 0xfb, 0x7b, - 0x0d, 0x4b, 0xb2, 0x9c, 0xe3, 0x7e, 0x5f, 0x6e, 0x4a, 0x68, 0x05, 0xca, 0xbb, 0x8e, 0xf3, 0xc8, - 0x69, 0x2c, 0x48, 0x54, 0x6f, 0xf7, 0xc1, 0xae, 0x42, 0x2d, 0xca, 0xdd, 0xf1, 0x41, 0x4f, 0xcb, - 0x94, 0xed, 0xbf, 0x5b, 0x50, 0x2f, 0xbe, 0x05, 0xb2, 0xf2, 0x75, 0xb5, 0x9e, 0x92, 0x94, 0x53, - 0x16, 0xe7, 0x8f, 0xbb, 0x22, 0x3e, 0xd6, 0x34, 0xf4, 0x89, 0x1a, 0xa5, 0x12, 0x92, 0x0a, 0x6a, - 0xaa, 0x7e, 0x6e, 0x2f, 0x2b, 0x9a, 0xe8, 0x1c, 0x8c, 0x44, 0x75, 0x2f, 0x9b, 0xd0, 0xd5, 0xfe, - 0x10, 0xd6, 0xce, 0xb1, 0x9f, 0xab, 0x9f, 0x7d, 0x69, 0x41, 0x73, 0x27, 0x25, 0x58, 0xe4, 0xcd, - 0xd3, 0x21, 0x9f, 0x65, 0x84, 0x8b, 0xcb, 0x86, 0xbf, 0x75, 0x58, 0x4a, 0x49, 0x20, 0x8f, 0xab, - 0x1b, 0x94, 0xd9, 0xa1, 0x6d, 0x58, 0x36, 0x13, 0x8c, 0xc9, 0xb5, 0xb7, 0x2e, 0xcd, 0x0e, 0x27, - 0x97, 0xb0, 0xff, 0x6d, 0x41, 0xf3, 0x38, 0xf1, 0xff, 0x0f, 0x67, 0xca, 0x05, 0x67, 0xae, 0x30, - 0xa1, 0x4e, 0xf8, 0xbb, 0xf0, 0xbc, 0xfe, 0xa2, 0x6d, 0xa8, 0x66, 0xca, 0x5d, 0x35, 0x62, 0x9b, - 0x11, 0xf5, 0x62, 0x9a, 0xde, 0x97, 0x53, 0xf8, 0x43, 0xcc, 0x87, 0x0e, 0x68, 0xb8, 0x5c, 0xdb, - 0x09, 0x34, 0x7b, 0x24, 0x24, 0xd7, 0x15, 0xf8, 0xcb, 0xcf, 0x6a, 0x47, 0x70, 0x63, 0x8f, 0x88, - 0x97, 0x66, 0xee, 0xb7, 0x16, 0xbc, 0xf2, 0x80, 0xf2, 0xdc, 0x20, 0x7f, 0x6e, 0x8b, 0x8b, 0x05, - 0x8b, 0x37, 0x61, 0x25, 0x91, 0x65, 0x26, 0x3b, 0xac, 0x69, 0x9b, 0x15, 0x49, 0x90, 0xad, 0x55, - 0xe9, 0x94, 0x4c, 0xc1, 0x86, 0x24, 0x77, 0x55, 0xc1, 0x8f, 0x24, 0xc1, 0x7e, 0x06, 0xcd, 0xa2, - 0x27, 0x3c, 0x61, 0x31, 0x97, 0xef, 0x40, 0x25, 0xff, 0xd4, 0x6b, 0x59, 0xaa, 0x28, 0xaf, 0x70, - 0xfd, 0x23, 0x11, 0xf4, 0x2d, 0x58, 0x8b, 0xc9, 0x17, 0xc2, 0x9d, 0x30, 0xad, 0xe3, 0x50, 0x93, - 0xe4, 0x83, 0x91, 0xf9, 0x14, 0xd6, 0x7b, 0x14, 0x07, 0x31, 0xe3, 0x2f, 0xef, 0xb2, 0x7f, 0x38, - 0xc5, 0x26, 0xcf, 0x42, 0xc1, 0xa5, 0x4d, 0x96, 0x89, 0x24, 0x13, 0x13, 0xe3, 0xe2, 0x8a, 0xa6, - 0x1c, 0xa7, 0x74, 0xeb, 0xcf, 0x15, 0xb8, 0x31, 0x1e, 0xa4, 0x44, 0xca, 0xc2, 0x90, 0xa4, 0xe8, - 0x8f, 0x16, 0xd4, 0x0a, 0x7d, 0x02, 0x75, 0xe6, 0x44, 0x6a, 0x4a, 0x43, 0x69, 0xbf, 0x91, 0xe3, - 0x27, 0x3e, 0x71, 0x3b, 0x8f, 0xf2, 0x4f, 0x5c, 0xbb, 0xf7, 0x9b, 0x7f, 0xfc, 0xeb, 0x0f, 0xa5, - 0x1f, 0xd9, 0xef, 0xcb, 0xcf, 0x63, 0x13, 0x01, 0xde, 0x7d, 0x3a, 0x8e, 0xce, 0xb3, 0xae, 0x3e, - 0x3c, 0xef, 0x3e, 0xd5, 0x8b, 0x67, 0xa3, 0xcf, 0xf4, 0x3b, 0xa3, 0x8a, 0xfc, 0x8b, 0x05, 0xb5, - 0x42, 0x07, 0x99, 0xe7, 0xe6, 0xb4, 0x56, 0x73, 0x99, 0x9b, 0x87, 0xca, 0xcd, 0x87, 0x5b, 0xf7, - 0x5e, 0xc0, 0xcd, 0xee, 0xd3, 0xc9, 0x4b, 0x7b, 0x36, 0xf6, 0xfa, 0x2b, 0x0b, 0x6a, 0x85, 0x5e, - 0x30, 0xcf, 0xeb, 0x69, 0x4d, 0xe3, 0x32, 0xaf, 0x7f, 0xa6, 0xbc, 0xee, 0xdd, 0xbe, 0x06, 0xaf, - 0xd1, 0x9f, 0x2c, 0x80, 0x71, 0x1b, 0x41, 0xdf, 0x9e, 0x33, 0x91, 0x9f, 0x6f, 0x36, 0xed, 0xcb, - 0xab, 0x2b, 0x77, 0x15, 0x5d, 0x87, 0xab, 0x5f, 0x59, 0xb0, 0x3a, 0x59, 0xf7, 0x68, 0xce, 0xa8, - 0x32, 0xa5, 0x53, 0xb5, 0x3b, 0x57, 0x85, 0xeb, 0x76, 0x62, 0x6f, 0x2b, 0xdf, 0x7f, 0x80, 0x5e, - 0x24, 0x87, 0xd1, 0x5f, 0x2d, 0x58, 0x3b, 0x57, 0xb1, 0xe8, 0x7b, 0xf3, 0xa6, 0xf5, 0x69, 0x0d, - 0xe5, 0xb2, 0x44, 0x78, 0xac, 0x3c, 0x3c, 0xb0, 0x3f, 0xba, 0x86, 0xf4, 0xf5, 0x8d, 0x07, 0x77, - 0xac, 0xdb, 0xf7, 0x3e, 0x83, 0xd7, 0x3d, 0x16, 0xcd, 0xf4, 0xf6, 0x5e, 0x3e, 0x41, 0xf2, 0x03, - 0xf9, 0x28, 0x1e, 0x58, 0xbf, 0xf8, 0x89, 0x81, 0x06, 0x2c, 0xc4, 0x71, 0xd0, 0x61, 0x69, 0xd0, - 0x0d, 0x48, 0xac, 0x9e, 0xcc, 0xae, 0x66, 0xe1, 0x84, 0xf2, 0x8b, 0xff, 0x9c, 0x6d, 0xe7, 0xeb, - 0xc1, 0x92, 0x02, 0xbf, 0xff, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x58, 0xab, 0x60, 0x26, 0xc6, - 0x13, 0x00, 0x00, + // 1944 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xcd, 0x73, 0x23, 0x47, + 0x15, 0xcf, 0x58, 0xfe, 0x90, 0x9f, 0x3e, 0x2c, 0x77, 0x1c, 0xa3, 0x28, 0x09, 0x71, 0x26, 0x81, + 0x75, 0x36, 0x20, 0xed, 0x3a, 0x50, 0x24, 0x6b, 0x12, 0xb0, 0x2d, 0xad, 0xd7, 0xc4, 0x96, 0xcd, + 0x48, 0xda, 0x24, 0x14, 0x30, 0xd5, 0x9a, 0x69, 0x6b, 0x1b, 0x8f, 0x66, 0x26, 0xd3, 0x3d, 0x4e, + 0xbc, 0x5b, 0x7b, 0xe1, 0x40, 0x15, 0x70, 0xa4, 0x8a, 0x33, 0x07, 0xa8, 0xa2, 0x72, 0x84, 0x1b, + 0xff, 0x00, 0x17, 0x8a, 0x0b, 0x47, 0xae, 0x9c, 0xf8, 0x2b, 0xa8, 0xfe, 0x18, 0x69, 0xc6, 0x5f, + 0x92, 0x97, 0xad, 0x9c, 0x34, 0xf3, 0xfa, 0xf7, 0xde, 0xfb, 0xf5, 0x7b, 0xaf, 0x5f, 0xbf, 0x11, + 0xdc, 0x1a, 0x04, 0xc1, 0xc0, 0x23, 0x0d, 0xc7, 0x0b, 0x62, 0xb7, 0xe1, 0x62, 0x8e, 0xc3, 0x28, + 0x70, 0x1a, 0xa7, 0x77, 0x1b, 0x8e, 0x17, 0x33, 0x4e, 0x22, 0x56, 0x0f, 0xa3, 0x80, 0x07, 0xa8, + 0xaa, 0x80, 0x75, 0x09, 0xac, 0x27, 0xc0, 0xfa, 0xe9, 0xdd, 0xda, 0xab, 0xda, 0x04, 0x0e, 0x69, + 0x03, 0xfb, 0x7e, 0xc0, 0x31, 0xa7, 0x81, 0xaf, 0xf5, 0x6a, 0x6f, 0x5f, 0xe9, 0x20, 0x08, 0x49, + 0x94, 0x81, 0xbe, 0xa9, 0xa1, 0x5e, 0xe0, 0x0f, 0xa2, 0xd8, 0xf7, 0xa9, 0x3f, 0xb8, 0x08, 0xfa, + 0xba, 0x06, 0xc9, 0xb7, 0x7e, 0x7c, 0xdc, 0x70, 0x63, 0x05, 0xd0, 0xeb, 0x6b, 0xe7, 0xd7, 0x8f, + 0x29, 0xf1, 0x5c, 0x7b, 0x88, 0xd9, 0x89, 0x46, 0xbc, 0x7e, 0x1e, 0xc1, 0xe9, 0x90, 0x30, 0x8e, + 0x87, 0xa1, 0x02, 0x98, 0xbf, 0x9a, 0x85, 0x85, 0x1d, 0xb5, 0x7b, 0xf4, 0x1a, 0x40, 0x18, 0x05, + 0xbf, 0x20, 0x0e, 0xb7, 0xa9, 0x5b, 0x35, 0xd6, 0x8c, 0xf5, 0x45, 0x6b, 0x51, 0x4b, 0xf6, 0x5c, + 0xf4, 0x06, 0x14, 0x75, 0x9c, 0x6c, 0x1f, 0x0f, 0x49, 0x75, 0x46, 0x02, 0x0a, 0x5a, 0xd6, 0xc6, + 0x43, 0x82, 0x7e, 0x00, 0xf3, 0x4e, 0xe0, 0x1f, 0xd3, 0x41, 0x35, 0xb7, 0x66, 0xac, 0x17, 0x36, + 0x6e, 0xd5, 0xaf, 0x8a, 0x64, 0x5d, 0x3b, 0xdd, 0x91, 0x70, 0x4b, 0xab, 0xa1, 0x16, 0xcc, 0x7b, + 0xb8, 0x4f, 0x3c, 0x56, 0xcd, 0xaf, 0xe5, 0xd6, 0x0b, 0x1b, 0xdf, 0x9e, 0x68, 0xa0, 0xbe, 0x2f, + 0xf1, 0x2d, 0x9f, 0x47, 0x67, 0x96, 0x56, 0x16, 0x3c, 0x18, 0xc7, 0x3c, 0x66, 0xd5, 0xd9, 0x29, + 0x79, 0x74, 0x24, 0xdc, 0xd2, 0x6a, 0xa8, 0x0d, 0x65, 0xf5, 0x64, 0x3f, 0xa2, 0x8c, 0x07, 0xd1, + 0x59, 0x75, 0x41, 0xf2, 0x99, 0xda, 0x50, 0x49, 0xa9, 0x3f, 0x50, 0xda, 0xe9, 0xd8, 0xc5, 0x31, + 0x75, 0xab, 0xf3, 0x99, 0xd8, 0xf5, 0x62, 0xea, 0xa2, 0x6d, 0x58, 0x18, 0x12, 0x1e, 0x51, 0x87, + 0x55, 0x17, 0x25, 0xe9, 0xf5, 0x89, 0xbe, 0x0e, 0x14, 0xde, 0x4a, 0x14, 0x6b, 0xef, 0x43, 0x21, + 0x15, 0x0e, 0x54, 0x81, 0xdc, 0x09, 0x39, 0xd3, 0x99, 0x14, 0x8f, 0x68, 0x05, 0xe6, 0x4e, 0xb1, + 0x17, 0x27, 0xc9, 0x53, 0x2f, 0xf7, 0x66, 0xde, 0x33, 0xcc, 0x7f, 0xcf, 0x42, 0x29, 0x93, 0x13, + 0xf4, 0x26, 0x94, 0x54, 0x56, 0xec, 0x7e, 0xec, 0x9c, 0x10, 0xae, 0xed, 0x14, 0x95, 0x70, 0x5b, + 0xca, 0xd0, 0x27, 0x80, 0x06, 0x0e, 0xb1, 0x93, 0xcd, 0xe9, 0xec, 0xe7, 0xe5, 0x06, 0x6e, 0x5f, + 0xbd, 0x81, 0x5d, 0x87, 0x64, 0x0b, 0xa0, 0x32, 0x38, 0x27, 0x41, 0x16, 0x94, 0x86, 0x38, 0x6d, + 0x54, 0x45, 0xe5, 0x9a, 0x8a, 0xd8, 0xf3, 0x19, 0xc7, 0xbe, 0x43, 0x76, 0xa3, 0x20, 0x0e, 0xb5, + 0xdd, 0xa2, 0xb2, 0x31, 0xb6, 0xf9, 0x79, 0x10, 0x9d, 0x8c, 0x6d, 0xc2, 0x33, 0xd9, 0x54, 0x36, + 0xb4, 0x4d, 0x02, 0x5f, 0x63, 0xc4, 0x09, 0x7c, 0x17, 0x47, 0x67, 0x76, 0xd6, 0x7a, 0xf1, 0x59, + 0xac, 0xbf, 0x34, 0xb2, 0xf6, 0x71, 0xda, 0xcd, 0x8f, 0x61, 0x89, 0x05, 0xc7, 0xfc, 0x73, 0x1c, + 0x91, 0xc4, 0x7c, 0x69, 0x52, 0x99, 0x74, 0xb4, 0x82, 0xb6, 0x5c, 0x66, 0x99, 0x77, 0x44, 0x61, + 0x95, 0xfa, 0x94, 0x53, 0xec, 0xd1, 0xc7, 0xb2, 0xad, 0xd8, 0xd8, 0x91, 0xed, 0xa7, 0x5a, 0x90, + 0xc5, 0xbe, 0x71, 0xb5, 0xe5, 0x76, 0xe0, 0x92, 0xbd, 0x8c, 0xee, 0x96, 0x54, 0xb5, 0x5e, 0xa2, + 0x97, 0x48, 0x99, 0xf9, 0xa7, 0x1c, 0x54, 0xce, 0xe7, 0x1c, 0xbd, 0x0c, 0xf9, 0xc7, 0x81, 0x4f, + 0xec, 0x38, 0xa2, 0xba, 0xb6, 0x16, 0xc4, 0x7b, 0x2f, 0xa2, 0xe8, 0x75, 0x28, 0xf8, 0x84, 0x8b, + 0x68, 0xca, 0x55, 0x55, 0xad, 0xa0, 0x45, 0x02, 0xf0, 0x0d, 0x28, 0xb3, 0xb8, 0x9f, 0xc6, 0xa8, + 0x23, 0x55, 0x1a, 0x4b, 0x05, 0x6c, 0x1d, 0x2a, 0xd4, 0xe7, 0x24, 0xf2, 0xb1, 0x67, 0xd3, 0xd0, + 0x0e, 0x7c, 0x4f, 0x9c, 0x64, 0x63, 0x3d, 0x6f, 0x95, 0x13, 0xf9, 0x5e, 0x78, 0xe8, 0x7b, 0x67, + 0xe8, 0x16, 0x2c, 0x31, 0x12, 0x9d, 0x52, 0x87, 0xd8, 0xd8, 0x71, 0x82, 0xd8, 0xe7, 0xb2, 0x8a, + 0x17, 0xad, 0xb2, 0x16, 0x6f, 0x29, 0x29, 0xfa, 0x0e, 0xac, 0x9e, 0x03, 0xda, 0xcc, 0x09, 0x42, + 0xc2, 0xaa, 0xb9, 0xb5, 0xdc, 0xfa, 0xa2, 0xb5, 0x92, 0xc5, 0x77, 0xe4, 0x1a, 0x42, 0x30, 0xcb, + 0xf1, 0x40, 0xf4, 0x23, 0x81, 0x91, 0xcf, 0xa8, 0x0b, 0xf9, 0x21, 0xe1, 0x58, 0xc4, 0xb5, 0x3a, + 0x27, 0x23, 0xfe, 0xde, 0xf4, 0x27, 0xa6, 0x7e, 0xa0, 0x55, 0x55, 0xe7, 0x1b, 0x59, 0xaa, 0x6d, + 0x42, 0x29, 0xb3, 0x74, 0xa3, 0x2e, 0xf0, 0xf7, 0x1c, 0xbc, 0x78, 0x49, 0x51, 0x8a, 0x5e, 0xe0, + 0xc7, 0x43, 0x9b, 0xea, 0x25, 0x26, 0xad, 0xcd, 0x59, 0x45, 0x3f, 0x1e, 0x26, 0x70, 0x26, 0x72, + 0x92, 0x00, 0xe4, 0x0d, 0xc1, 0xaa, 0x33, 0x72, 0xb7, 0xa5, 0x44, 0x2a, 0xee, 0x08, 0x86, 0x5e, + 0x81, 0x45, 0x3a, 0xc4, 0x03, 0x95, 0xf7, 0x9c, 0x64, 0x90, 0x97, 0x02, 0x9d, 0xb0, 0x21, 0x76, + 0x1e, 0x51, 0x9f, 0xd8, 0xfc, 0x2c, 0x54, 0x98, 0x59, 0x95, 0x07, 0x2d, 0xef, 0x9e, 0x85, 0x12, + 0xd9, 0x82, 0x82, 0x4b, 0xd9, 0x49, 0x72, 0x18, 0xe6, 0xe4, 0x61, 0x78, 0xeb, 0xea, 0x00, 0x36, + 0x29, 0x3b, 0xd1, 0x07, 0x01, 0xdc, 0xd1, 0xb3, 0x24, 0xcd, 0xec, 0x30, 0x22, 0x64, 0x18, 0x72, + 0xda, 0xf7, 0x88, 0x2c, 0xa4, 0xbc, 0x55, 0xa2, 0xec, 0x68, 0x2c, 0x44, 0x3f, 0x87, 0x95, 0x21, + 0xf6, 0xf1, 0x80, 0xb8, 0xf6, 0x40, 0xc4, 0x25, 0x71, 0xbb, 0x20, 0xdd, 0x7e, 0xeb, 0x6a, 0xb7, + 0x07, 0x4a, 0x2b, 0x7d, 0xc2, 0xd1, 0xf0, 0x82, 0x0c, 0x1d, 0x42, 0x11, 0x3b, 0x0e, 0xf1, 0xc4, + 0x04, 0x10, 0x44, 0xc9, 0xf5, 0xf7, 0xce, 0xd5, 0x76, 0xb7, 0xc6, 0xe8, 0xa4, 0x2d, 0xa5, 0x0d, + 0x98, 0xbf, 0x36, 0x00, 0x5d, 0xf4, 0x2d, 0xaa, 0x77, 0x94, 0x23, 0x4e, 0x86, 0xa1, 0x87, 0xb9, + 0x4a, 0x96, 0xae, 0x8f, 0x95, 0x64, 0xb5, 0xab, 0x17, 0xe5, 0xbd, 0xfe, 0x01, 0xbc, 0x32, 0xd2, + 0x52, 0xdb, 0x57, 0x5b, 0xc8, 0x4c, 0x02, 0x55, 0x9a, 0x2e, 0x1c, 0xe5, 0x5b, 0x8e, 0x05, 0x66, + 0x04, 0xcb, 0x17, 0xe8, 0xa2, 0x3b, 0xb0, 0x92, 0x22, 0x3c, 0xce, 0xb6, 0xe2, 0x81, 0x52, 0x6b, + 0x49, 0xc6, 0xdf, 0x81, 0xe5, 0xb4, 0x86, 0x3a, 0xa4, 0x33, 0xb2, 0x10, 0x2b, 0x38, 0x6d, 0x3f, + 0xf6, 0xb9, 0xf9, 0x33, 0x80, 0x71, 0xc6, 0xd1, 0xdb, 0xb0, 0xdc, 0x0f, 0x02, 0x6e, 0xcb, 0x8a, + 0x61, 0xf4, 0x31, 0xb1, 0x07, 0x7d, 0x5d, 0xc3, 0x65, 0xb1, 0x20, 0xa0, 0x1d, 0xfa, 0x98, 0xec, + 0xf6, 0xd1, 0x5b, 0x50, 0x16, 0xa5, 0xee, 0x05, 0x0e, 0xf6, 0x6c, 0xc6, 0x5c, 0xa6, 0x5d, 0x88, + 0x5a, 0xdf, 0x17, 0xc2, 0x0e, 0x73, 0x99, 0xf9, 0x5b, 0x03, 0xaa, 0x57, 0x35, 0x41, 0xd1, 0x4b, + 0xc8, 0x17, 0xc4, 0x89, 0x39, 0xee, 0x7b, 0xc4, 0x3e, 0xa6, 0x5e, 0x12, 0xdd, 0xf2, 0x58, 0x7c, + 0x9f, 0x7a, 0x04, 0xdd, 0x87, 0x65, 0x25, 0x11, 0xcd, 0x57, 0x8c, 0x66, 0x41, 0xac, 0x76, 0x54, + 0xd8, 0x78, 0x39, 0x49, 0x7d, 0x32, 0xba, 0xd5, 0x9b, 0x7a, 0xf8, 0xb3, 0x2a, 0x23, 0x9d, 0xae, + 0x52, 0x31, 0x7f, 0x9f, 0x1b, 0x5d, 0xde, 0x6a, 0xfe, 0x40, 0x3b, 0x30, 0x27, 0x26, 0x10, 0xe5, + 0xb8, 0x3c, 0xc5, 0x1c, 0xa5, 0xf4, 0xea, 0xe2, 0x87, 0x58, 0x4a, 0x17, 0xad, 0xc2, 0xbc, 0x4b, + 0x38, 0xa6, 0x9e, 0xce, 0xb0, 0x7e, 0x43, 0x4d, 0xa8, 0x48, 0x80, 0xcd, 0x38, 0x8e, 0xb8, 0x24, + 0xae, 0x07, 0xbe, 0xda, 0x05, 0xd6, 0xdd, 0x64, 0xe0, 0xb4, 0xe4, 0x44, 0x45, 0x3a, 0x42, 0x45, + 0x08, 0xd1, 0x3e, 0xe4, 0x59, 0xdc, 0x57, 0x2c, 0x67, 0x25, 0xcb, 0x3b, 0x53, 0xb3, 0xd4, 0x7a, + 0xd6, 0xc8, 0x82, 0xf9, 0x10, 0xe6, 0x24, 0x77, 0x54, 0x80, 0x85, 0x5e, 0xfb, 0xa3, 0xf6, 0xe1, + 0xc7, 0xed, 0xca, 0x0b, 0xa8, 0x08, 0xf9, 0x1d, 0xab, 0xb5, 0xd5, 0xdd, 0x6b, 0xef, 0x56, 0x0c, + 0xb1, 0x64, 0xf5, 0xda, 0x6d, 0xf1, 0x32, 0x83, 0x16, 0x61, 0xae, 0x65, 0x59, 0x87, 0x56, 0x25, + 0x27, 0x50, 0xcd, 0xd6, 0x7e, 0x4b, 0xa2, 0x66, 0xc5, 0x5b, 0xef, 0xa8, 0xa9, 0x74, 0xe6, 0xcc, + 0xef, 0x43, 0x3e, 0xf1, 0x86, 0x96, 0xa0, 0xd0, 0x6b, 0x77, 0x8e, 0x5a, 0x3b, 0x7b, 0xf7, 0xf7, + 0x5a, 0xcd, 0xca, 0x0b, 0xa8, 0x04, 0x8b, 0xbd, 0xf6, 0x83, 0xd6, 0xd6, 0x7e, 0xf7, 0xc1, 0xa7, + 0x15, 0x03, 0x55, 0xa0, 0xd8, 0xe9, 0x6e, 0xed, 0xb7, 0xec, 0x4e, 0x77, 0xab, 0xdb, 0xeb, 0x54, + 0x66, 0xcc, 0x7f, 0x1a, 0x50, 0xce, 0xde, 0xc2, 0xa2, 0x95, 0xaa, 0xf6, 0x77, 0x4a, 0x22, 0x46, + 0x03, 0x3f, 0x19, 0xab, 0xa4, 0xf0, 0xa1, 0x92, 0xa1, 0x4f, 0xe4, 0x28, 0x1e, 0x92, 0x88, 0x53, + 0xdd, 0x46, 0xaf, 0xbd, 0x1c, 0xb2, 0x2e, 0xea, 0x47, 0x23, 0x55, 0x75, 0x39, 0xa4, 0x6c, 0xd5, + 0x3e, 0x80, 0xa5, 0x73, 0xcb, 0x37, 0xba, 0x20, 0xfe, 0x31, 0x03, 0xe5, 0xec, 0xf4, 0x89, 0x7e, + 0x0a, 0xc5, 0x47, 0xee, 0x31, 0xb3, 0x93, 0xe9, 0xd5, 0x90, 0x6c, 0xdf, 0x9f, 0x76, 0x7a, 0xad, + 0x3f, 0x70, 0x8f, 0x99, 0x7e, 0x56, 0x74, 0x0b, 0x8f, 0xc6, 0x12, 0x61, 0xfd, 0x0c, 0x47, 0xfe, + 0xc8, 0xfa, 0xcc, 0x0d, 0xad, 0x7f, 0x8a, 0x23, 0x3f, 0x6b, 0xfd, 0x6c, 0x2c, 0xa9, 0x7d, 0x08, + 0x95, 0xf3, 0xee, 0x27, 0x85, 0x23, 0x97, 0x0a, 0x87, 0xd0, 0x3f, 0xef, 0xe0, 0x26, 0xfa, 0xe6, + 0x6f, 0x0c, 0x58, 0xd9, 0x89, 0x08, 0xe6, 0xc9, 0xe5, 0x6e, 0x91, 0xcf, 0x62, 0xc2, 0xf8, 0xa4, + 0x6f, 0xb1, 0x55, 0x98, 0x8f, 0xc8, 0x40, 0x54, 0x8f, 0xba, 0x40, 0xf5, 0x1b, 0xda, 0x84, 0x05, + 0x3d, 0x8a, 0xeb, 0x36, 0xf2, 0xc6, 0xc4, 0x40, 0x59, 0x89, 0x86, 0xf9, 0x5f, 0x03, 0x56, 0x7a, + 0xa1, 0xfb, 0x7f, 0x90, 0x99, 0xcb, 0x90, 0x99, 0xe2, 0x83, 0x31, 0xc5, 0x37, 0x77, 0x53, 0xbe, + 0x68, 0x13, 0x0a, 0xb1, 0xa4, 0x2b, 0xbf, 0x78, 0xf5, 0xa7, 0xde, 0xc5, 0x0e, 0x74, 0x5f, 0x7c, + 0x14, 0x1f, 0x60, 0x76, 0x62, 0x81, 0x82, 0x8b, 0x67, 0x33, 0x84, 0x95, 0x26, 0xf1, 0xc8, 0xf3, + 0x0a, 0xfc, 0xe4, 0xbd, 0x9a, 0x43, 0x58, 0xde, 0x25, 0xfc, 0x2b, 0x73, 0xf7, 0x07, 0x03, 0x5e, + 0xdc, 0xa7, 0x2c, 0x71, 0xc8, 0x6e, 0xec, 0x71, 0x36, 0xe3, 0x71, 0x15, 0xe6, 0x8f, 0xa9, 0x27, + 0x12, 0xa5, 0x93, 0xac, 0xde, 0xc4, 0x34, 0x17, 0x8a, 0x6e, 0x26, 0x2e, 0x55, 0x7d, 0x53, 0xe6, + 0x85, 0x40, 0xdc, 0xa6, 0xd2, 0x97, 0x58, 0xe4, 0xc1, 0x09, 0x49, 0xb6, 0x20, 0xe1, 0x5d, 0x21, + 0x30, 0x9f, 0xc2, 0x4a, 0x96, 0x21, 0x0b, 0x03, 0x9f, 0x89, 0x71, 0x23, 0x9f, 0xfc, 0x23, 0xa3, + 0xbb, 0xc9, 0x14, 0x65, 0x31, 0x52, 0x41, 0xdf, 0x84, 0x25, 0x9f, 0x7c, 0xc1, 0xed, 0x94, 0x6b, + 0x15, 0x9f, 0x92, 0x10, 0x1f, 0x8d, 0xdc, 0x47, 0xb0, 0xda, 0xa4, 0x78, 0xe0, 0x07, 0xec, 0xab, + 0x2b, 0x82, 0xef, 0x5d, 0xe2, 0x93, 0xc5, 0x1e, 0x67, 0xc2, 0x67, 0x10, 0xf3, 0x30, 0xe6, 0xa9, + 0x29, 0x68, 0x51, 0x49, 0x7a, 0x11, 0xdd, 0xf8, 0x4b, 0x1e, 0x96, 0xc7, 0x1f, 0x00, 0x3c, 0x0a, + 0x3c, 0x8f, 0x44, 0xe8, 0x8f, 0x06, 0x94, 0x32, 0xfd, 0x03, 0xd5, 0xaf, 0x89, 0xd4, 0x25, 0x8d, + 0xa6, 0xf6, 0x5a, 0x82, 0x4f, 0xfd, 0x13, 0x55, 0x3f, 0x4c, 0xfe, 0x89, 0x32, 0x9b, 0xbf, 0xfc, + 0xd7, 0x7f, 0x7e, 0x37, 0xf3, 0xa1, 0xf9, 0x6e, 0xe3, 0xf4, 0x6e, 0x43, 0x47, 0x80, 0x35, 0x9e, + 0x8c, 0xa3, 0xf3, 0xb4, 0xa1, 0x36, 0xcf, 0x1a, 0x4f, 0xd4, 0xc3, 0xd3, 0xd1, 0xbf, 0x69, 0xf7, + 0x46, 0x27, 0xf5, 0xaf, 0x06, 0x94, 0x32, 0x9d, 0xe5, 0x3a, 0x9a, 0x97, 0xb5, 0xa0, 0x49, 0x34, + 0x3b, 0x92, 0xe6, 0xc1, 0xc6, 0xf6, 0x33, 0xd0, 0x6c, 0x3c, 0x49, 0x27, 0xed, 0xe9, 0x98, 0xf5, + 0x97, 0x06, 0x94, 0x32, 0x3d, 0xe2, 0x3a, 0xd6, 0x97, 0x35, 0x93, 0x49, 0xac, 0x7f, 0x24, 0x59, + 0x37, 0x6f, 0x3f, 0x07, 0xd6, 0xe8, 0xcf, 0x06, 0xc0, 0xb8, 0xbd, 0xa0, 0x6b, 0xbe, 0x1c, 0x2e, + 0x34, 0xa1, 0xda, 0xe4, 0xd3, 0x95, 0x50, 0x45, 0xcf, 0x83, 0xea, 0x97, 0x06, 0x14, 0xd3, 0xe7, + 0x1e, 0x5d, 0x33, 0x9d, 0x5e, 0xd2, 0xc1, 0x6a, 0xf5, 0x69, 0xe1, 0xaa, 0x9d, 0x98, 0x9b, 0x92, + 0xfb, 0x77, 0xd1, 0xb3, 0xd4, 0x30, 0xfa, 0x9b, 0x01, 0x4b, 0xe7, 0x4e, 0x2c, 0xba, 0x73, 0xdd, + 0x57, 0xe6, 0x65, 0x0d, 0x65, 0x52, 0x21, 0x3c, 0x94, 0x0c, 0x8f, 0xcc, 0x8f, 0x9e, 0x43, 0xf9, + 0xba, 0x9a, 0xc1, 0x3d, 0xe3, 0xf6, 0xf6, 0x67, 0xf0, 0xaa, 0x13, 0x0c, 0xaf, 0x64, 0xbb, 0x9d, + 0x7c, 0x34, 0xb0, 0x23, 0x71, 0x59, 0x1e, 0x19, 0x3f, 0xf9, 0xa1, 0x86, 0x0e, 0x02, 0x0f, 0xfb, + 0x83, 0x7a, 0x10, 0x0d, 0x1a, 0x03, 0xe2, 0xcb, 0xab, 0xb4, 0xa1, 0x96, 0x70, 0x48, 0xd9, 0xc5, + 0x3f, 0xb8, 0x37, 0x93, 0xe7, 0xfe, 0xbc, 0x04, 0xbf, 0xfb, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xe5, 0xf5, 0x02, 0xd0, 0x6d, 0x17, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1/jobs.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1/jobs.pb.go index 5717e98..1b85f0d 100644 --- a/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1/jobs.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1/jobs.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/cloud/dataproc/v1/jobs.proto -// DO NOT EDIT! package dataproc @@ -9,6 +8,7 @@ import fmt "fmt" import math "math" import _ "google.golang.org/genproto/googleapis/api/annotations" import google_protobuf2 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf5 "google.golang.org/genproto/protobuf/field_mask" import google_protobuf3 "github.com/golang/protobuf/ptypes/timestamp" import ( @@ -99,6 +99,11 @@ const ( JobStatus_DONE JobStatus_State = 5 // The job has completed, but encountered an error. JobStatus_ERROR JobStatus_State = 6 + // Job attempt has failed. The detail field contains failure details for + // this attempt. + // + // Applies to restartable jobs only. + JobStatus_ATTEMPT_FAILURE JobStatus_State = 9 ) var JobStatus_State_name = map[int32]string{ @@ -111,6 +116,7 @@ var JobStatus_State_name = map[int32]string{ 4: "CANCELLED", 5: "DONE", 6: "ERROR", + 9: "ATTEMPT_FAILURE", } var JobStatus_State_value = map[string]int32{ "STATE_UNSPECIFIED": 0, @@ -122,6 +128,7 @@ var JobStatus_State_value = map[string]int32{ "CANCELLED": 4, "DONE": 5, "ERROR": 6, + "ATTEMPT_FAILURE": 9, } func (x JobStatus_State) String() string { @@ -129,6 +136,99 @@ func (x JobStatus_State) String() string { } func (JobStatus_State) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{9, 0} } +type JobStatus_Substate int32 + +const ( + JobStatus_UNSPECIFIED JobStatus_Substate = 0 + // The Job is submitted to the agent. + // + // Applies to RUNNING state. + JobStatus_SUBMITTED JobStatus_Substate = 1 + // The Job has been received and is awaiting execution (it may be waiting + // for a condition to be met). See the "details" field for the reason for + // the delay. + // + // Applies to RUNNING state. + JobStatus_QUEUED JobStatus_Substate = 2 + // The agent-reported status is out of date, which may be caused by a + // loss of communication between the agent and Cloud Dataproc. If the + // agent does not send a timely update, the job will fail. + // + // Applies to RUNNING state. + JobStatus_STALE_STATUS JobStatus_Substate = 3 +) + +var JobStatus_Substate_name = map[int32]string{ + 0: "UNSPECIFIED", + 1: "SUBMITTED", + 2: "QUEUED", + 3: "STALE_STATUS", +} +var JobStatus_Substate_value = map[string]int32{ + "UNSPECIFIED": 0, + "SUBMITTED": 1, + "QUEUED": 2, + "STALE_STATUS": 3, +} + +func (x JobStatus_Substate) String() string { + return proto.EnumName(JobStatus_Substate_name, int32(x)) +} +func (JobStatus_Substate) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{9, 1} } + +// The application state, corresponding to +// YarnProtos.YarnApplicationStateProto. +type YarnApplication_State int32 + +const ( + // Status is unspecified. + YarnApplication_STATE_UNSPECIFIED YarnApplication_State = 0 + // Status is NEW. + YarnApplication_NEW YarnApplication_State = 1 + // Status is NEW_SAVING. + YarnApplication_NEW_SAVING YarnApplication_State = 2 + // Status is SUBMITTED. + YarnApplication_SUBMITTED YarnApplication_State = 3 + // Status is ACCEPTED. + YarnApplication_ACCEPTED YarnApplication_State = 4 + // Status is RUNNING. + YarnApplication_RUNNING YarnApplication_State = 5 + // Status is FINISHED. + YarnApplication_FINISHED YarnApplication_State = 6 + // Status is FAILED. + YarnApplication_FAILED YarnApplication_State = 7 + // Status is KILLED. + YarnApplication_KILLED YarnApplication_State = 8 +) + +var YarnApplication_State_name = map[int32]string{ + 0: "STATE_UNSPECIFIED", + 1: "NEW", + 2: "NEW_SAVING", + 3: "SUBMITTED", + 4: "ACCEPTED", + 5: "RUNNING", + 6: "FINISHED", + 7: "FAILED", + 8: "KILLED", +} +var YarnApplication_State_value = map[string]int32{ + "STATE_UNSPECIFIED": 0, + "NEW": 1, + "NEW_SAVING": 2, + "SUBMITTED": 3, + "ACCEPTED": 4, + "RUNNING": 5, + "FINISHED": 6, + "FAILED": 7, + "KILLED": 8, +} + +func (x YarnApplication_State) String() string { + return proto.EnumName(YarnApplication_State_name, int32(x)) +} +func (YarnApplication_State) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{11, 0} } + // A matcher that specifies categories of job states. type ListJobsRequest_JobStateMatcher int32 @@ -157,7 +257,7 @@ func (x ListJobsRequest_JobStateMatcher) String() string { return proto.EnumName(ListJobsRequest_JobStateMatcher_name, int32(x)) } func (ListJobsRequest_JobStateMatcher) EnumDescriptor() ([]byte, []int) { - return fileDescriptor1, []int{14, 0} + return fileDescriptor1, []int{16, 0} } // The runtime logging config of the job. @@ -185,7 +285,7 @@ func (m *LoggingConfig) GetDriverLogLevels() map[string]LoggingConfig_Level { // [Apache Hadoop MapReduce](https://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html) // jobs on [Apache Hadoop YARN](https://hadoop.apache.org/docs/r2.7.1/hadoop-yarn/hadoop-yarn-site/YARN.html). type HadoopJob struct { - // [Required] Indicates the location of the driver's main class. Specify + // Required. Indicates the location of the driver's main class. Specify // either the jar file that contains the main class or the main class name. // To specify both, add the jar file to `jar_file_uris`, and then specify // the main class name in this property. @@ -194,28 +294,28 @@ type HadoopJob struct { // *HadoopJob_MainJarFileUri // *HadoopJob_MainClass Driver isHadoopJob_Driver `protobuf_oneof:"driver"` - // [Optional] The arguments to pass to the driver. Do not + // Optional. The arguments to pass to the driver. Do not // include arguments, such as `-libjars` or `-Dfoo=bar`, that can be set as job // properties, since a collision may occur that causes an incorrect job // submission. Args []string `protobuf:"bytes,3,rep,name=args" json:"args,omitempty"` - // [Optional] Jar file URIs to add to the CLASSPATHs of the + // Optional. Jar file URIs to add to the CLASSPATHs of the // Hadoop driver and tasks. JarFileUris []string `protobuf:"bytes,4,rep,name=jar_file_uris,json=jarFileUris" json:"jar_file_uris,omitempty"` - // [Optional] HCFS (Hadoop Compatible Filesystem) URIs of files to be copied + // Optional. HCFS (Hadoop Compatible Filesystem) URIs of files to be copied // to the working directory of Hadoop drivers and distributed tasks. Useful // for naively parallel tasks. FileUris []string `protobuf:"bytes,5,rep,name=file_uris,json=fileUris" json:"file_uris,omitempty"` - // [Optional] HCFS URIs of archives to be extracted in the working directory of + // Optional. HCFS URIs of archives to be extracted in the working directory of // Hadoop drivers and tasks. Supported file types: // .jar, .tar, .tar.gz, .tgz, or .zip. ArchiveUris []string `protobuf:"bytes,6,rep,name=archive_uris,json=archiveUris" json:"archive_uris,omitempty"` - // [Optional] A mapping of property names to values, used to configure Hadoop. + // Optional. A mapping of property names to values, used to configure Hadoop. // Properties that conflict with values set by the Cloud Dataproc API may be // overwritten. Can include properties set in /etc/hadoop/conf/*-site and // classes in user code. Properties map[string]string `protobuf:"bytes,7,rep,name=properties" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - // [Optional] The runtime log config for job execution. + // Optional. The runtime log config for job execution. LoggingConfig *LoggingConfig `protobuf:"bytes,8,opt,name=logging_config,json=loggingConfig" json:"logging_config,omitempty"` } @@ -370,7 +470,7 @@ func _HadoopJob_OneofSizer(msg proto.Message) (n int) { // A Cloud Dataproc job for running [Apache Spark](http://spark.apache.org/) // applications on YARN. type SparkJob struct { - // [Required] The specification of the main method to call to drive the job. + // Required. The specification of the main method to call to drive the job. // Specify either the jar file that contains the main class or the main class // name. To pass both a main jar and a main class in that jar, add the jar to // `CommonJob.jar_file_uris`, and then specify the main class name in `main_class`. @@ -379,26 +479,26 @@ type SparkJob struct { // *SparkJob_MainJarFileUri // *SparkJob_MainClass Driver isSparkJob_Driver `protobuf_oneof:"driver"` - // [Optional] The arguments to pass to the driver. Do not include arguments, + // Optional. The arguments to pass to the driver. Do not include arguments, // such as `--conf`, that can be set as job properties, since a collision may // occur that causes an incorrect job submission. Args []string `protobuf:"bytes,3,rep,name=args" json:"args,omitempty"` - // [Optional] HCFS URIs of jar files to add to the CLASSPATHs of the + // Optional. HCFS URIs of jar files to add to the CLASSPATHs of the // Spark driver and tasks. JarFileUris []string `protobuf:"bytes,4,rep,name=jar_file_uris,json=jarFileUris" json:"jar_file_uris,omitempty"` - // [Optional] HCFS URIs of files to be copied to the working directory of + // Optional. HCFS URIs of files to be copied to the working directory of // Spark drivers and distributed tasks. Useful for naively parallel tasks. FileUris []string `protobuf:"bytes,5,rep,name=file_uris,json=fileUris" json:"file_uris,omitempty"` - // [Optional] HCFS URIs of archives to be extracted in the working directory + // Optional. HCFS URIs of archives to be extracted in the working directory // of Spark drivers and tasks. Supported file types: // .jar, .tar, .tar.gz, .tgz, and .zip. ArchiveUris []string `protobuf:"bytes,6,rep,name=archive_uris,json=archiveUris" json:"archive_uris,omitempty"` - // [Optional] A mapping of property names to values, used to configure Spark. + // Optional. A mapping of property names to values, used to configure Spark. // Properties that conflict with values set by the Cloud Dataproc API may be // overwritten. Can include properties set in // /etc/spark/conf/spark-defaults.conf and classes in user code. Properties map[string]string `protobuf:"bytes,7,rep,name=properties" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - // [Optional] The runtime log config for job execution. + // Optional. The runtime log config for job execution. LoggingConfig *LoggingConfig `protobuf:"bytes,8,opt,name=logging_config,json=loggingConfig" json:"logging_config,omitempty"` } @@ -554,31 +654,31 @@ func _SparkJob_OneofSizer(msg proto.Message) (n int) { // [Apache PySpark](https://spark.apache.org/docs/0.9.0/python-programming-guide.html) // applications on YARN. type PySparkJob struct { - // [Required] The HCFS URI of the main Python file to use as the driver. Must + // Required. The HCFS URI of the main Python file to use as the driver. Must // be a .py file. MainPythonFileUri string `protobuf:"bytes,1,opt,name=main_python_file_uri,json=mainPythonFileUri" json:"main_python_file_uri,omitempty"` - // [Optional] The arguments to pass to the driver. Do not include arguments, + // Optional. The arguments to pass to the driver. Do not include arguments, // such as `--conf`, that can be set as job properties, since a collision may // occur that causes an incorrect job submission. Args []string `protobuf:"bytes,2,rep,name=args" json:"args,omitempty"` - // [Optional] HCFS file URIs of Python files to pass to the PySpark + // Optional. HCFS file URIs of Python files to pass to the PySpark // framework. Supported file types: .py, .egg, and .zip. PythonFileUris []string `protobuf:"bytes,3,rep,name=python_file_uris,json=pythonFileUris" json:"python_file_uris,omitempty"` - // [Optional] HCFS URIs of jar files to add to the CLASSPATHs of the + // Optional. HCFS URIs of jar files to add to the CLASSPATHs of the // Python driver and tasks. JarFileUris []string `protobuf:"bytes,4,rep,name=jar_file_uris,json=jarFileUris" json:"jar_file_uris,omitempty"` - // [Optional] HCFS URIs of files to be copied to the working directory of + // Optional. HCFS URIs of files to be copied to the working directory of // Python drivers and distributed tasks. Useful for naively parallel tasks. FileUris []string `protobuf:"bytes,5,rep,name=file_uris,json=fileUris" json:"file_uris,omitempty"` - // [Optional] HCFS URIs of archives to be extracted in the working directory of + // Optional. HCFS URIs of archives to be extracted in the working directory of // .jar, .tar, .tar.gz, .tgz, and .zip. ArchiveUris []string `protobuf:"bytes,6,rep,name=archive_uris,json=archiveUris" json:"archive_uris,omitempty"` - // [Optional] A mapping of property names to values, used to configure PySpark. + // Optional. A mapping of property names to values, used to configure PySpark. // Properties that conflict with values set by the Cloud Dataproc API may be // overwritten. Can include properties set in // /etc/spark/conf/spark-defaults.conf and classes in user code. Properties map[string]string `protobuf:"bytes,7,rep,name=properties" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - // [Optional] The runtime log config for job execution. + // Optional. The runtime log config for job execution. LoggingConfig *LoggingConfig `protobuf:"bytes,8,opt,name=logging_config,json=loggingConfig" json:"logging_config,omitempty"` } @@ -645,7 +745,7 @@ func (m *PySparkJob) GetLoggingConfig() *LoggingConfig { // A list of queries to run on a cluster. type QueryList struct { - // [Required] The queries to execute. You do not need to terminate a query + // Required. The queries to execute. You do not need to terminate a query // with a semicolon. Multiple queries can be specified in one string // by separating each with a semicolon. Here is an example of an Cloud // Dataproc API snippet that uses a QueryList to specify a HiveJob: @@ -677,26 +777,26 @@ func (m *QueryList) GetQueries() []string { // A Cloud Dataproc job for running [Apache Hive](https://hive.apache.org/) // queries on YARN. type HiveJob struct { - // [Required] The sequence of Hive queries to execute, specified as either + // Required. The sequence of Hive queries to execute, specified as either // an HCFS file URI or a list of queries. // // Types that are valid to be assigned to Queries: // *HiveJob_QueryFileUri // *HiveJob_QueryList Queries isHiveJob_Queries `protobuf_oneof:"queries"` - // [Optional] Whether to continue executing queries if a query fails. + // Optional. Whether to continue executing queries if a query fails. // The default value is `false`. Setting to `true` can be useful when executing // independent parallel queries. ContinueOnFailure bool `protobuf:"varint,3,opt,name=continue_on_failure,json=continueOnFailure" json:"continue_on_failure,omitempty"` - // [Optional] Mapping of query variable names to values (equivalent to the + // Optional. Mapping of query variable names to values (equivalent to the // Hive command: `SET name="value";`). ScriptVariables map[string]string `protobuf:"bytes,4,rep,name=script_variables,json=scriptVariables" json:"script_variables,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - // [Optional] A mapping of property names and values, used to configure Hive. + // Optional. A mapping of property names and values, used to configure Hive. // Properties that conflict with values set by the Cloud Dataproc API may be // overwritten. Can include properties set in /etc/hadoop/conf/*-site.xml, // /etc/hive/conf/hive-site.xml, and classes in user code. Properties map[string]string `protobuf:"bytes,5,rep,name=properties" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - // [Optional] HCFS URIs of jar files to add to the CLASSPATH of the + // Optional. HCFS URIs of jar files to add to the CLASSPATH of the // Hive server and Hadoop MapReduce (MR) tasks. Can contain Hive SerDes // and UDFs. JarFileUris []string `protobuf:"bytes,6,rep,name=jar_file_uris,json=jarFileUris" json:"jar_file_uris,omitempty"` @@ -843,23 +943,23 @@ func _HiveJob_OneofSizer(msg proto.Message) (n int) { // A Cloud Dataproc job for running [Apache Spark SQL](http://spark.apache.org/sql/) // queries. type SparkSqlJob struct { - // [Required] The sequence of Spark SQL queries to execute, specified as + // Required. The sequence of Spark SQL queries to execute, specified as // either an HCFS file URI or as a list of queries. // // Types that are valid to be assigned to Queries: // *SparkSqlJob_QueryFileUri // *SparkSqlJob_QueryList Queries isSparkSqlJob_Queries `protobuf_oneof:"queries"` - // [Optional] Mapping of query variable names to values (equivalent to the + // Optional. Mapping of query variable names to values (equivalent to the // Spark SQL command: SET `name="value";`). ScriptVariables map[string]string `protobuf:"bytes,3,rep,name=script_variables,json=scriptVariables" json:"script_variables,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - // [Optional] A mapping of property names to values, used to configure + // Optional. A mapping of property names to values, used to configure // Spark SQL's SparkConf. Properties that conflict with values set by the // Cloud Dataproc API may be overwritten. Properties map[string]string `protobuf:"bytes,4,rep,name=properties" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - // [Optional] HCFS URIs of jar files to be added to the Spark CLASSPATH. + // Optional. HCFS URIs of jar files to be added to the Spark CLASSPATH. JarFileUris []string `protobuf:"bytes,56,rep,name=jar_file_uris,json=jarFileUris" json:"jar_file_uris,omitempty"` - // [Optional] The runtime log config for job execution. + // Optional. The runtime log config for job execution. LoggingConfig *LoggingConfig `protobuf:"bytes,6,opt,name=logging_config,json=loggingConfig" json:"logging_config,omitempty"` } @@ -1004,29 +1104,29 @@ func _SparkSqlJob_OneofSizer(msg proto.Message) (n int) { // A Cloud Dataproc job for running [Apache Pig](https://pig.apache.org/) // queries on YARN. type PigJob struct { - // [Required] The sequence of Pig queries to execute, specified as an HCFS + // Required. The sequence of Pig queries to execute, specified as an HCFS // file URI or a list of queries. // // Types that are valid to be assigned to Queries: // *PigJob_QueryFileUri // *PigJob_QueryList Queries isPigJob_Queries `protobuf_oneof:"queries"` - // [Optional] Whether to continue executing queries if a query fails. + // Optional. Whether to continue executing queries if a query fails. // The default value is `false`. Setting to `true` can be useful when executing // independent parallel queries. ContinueOnFailure bool `protobuf:"varint,3,opt,name=continue_on_failure,json=continueOnFailure" json:"continue_on_failure,omitempty"` - // [Optional] Mapping of query variable names to values (equivalent to the Pig + // Optional. Mapping of query variable names to values (equivalent to the Pig // command: `name=[value]`). ScriptVariables map[string]string `protobuf:"bytes,4,rep,name=script_variables,json=scriptVariables" json:"script_variables,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - // [Optional] A mapping of property names to values, used to configure Pig. + // Optional. A mapping of property names to values, used to configure Pig. // Properties that conflict with values set by the Cloud Dataproc API may be // overwritten. Can include properties set in /etc/hadoop/conf/*-site.xml, // /etc/pig/conf/pig.properties, and classes in user code. Properties map[string]string `protobuf:"bytes,5,rep,name=properties" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - // [Optional] HCFS URIs of jar files to add to the CLASSPATH of + // Optional. HCFS URIs of jar files to add to the CLASSPATH of // the Pig Client and Hadoop MapReduce (MR) tasks. Can contain Pig UDFs. JarFileUris []string `protobuf:"bytes,6,rep,name=jar_file_uris,json=jarFileUris" json:"jar_file_uris,omitempty"` - // [Optional] The runtime log config for job execution. + // Optional. The runtime log config for job execution. LoggingConfig *LoggingConfig `protobuf:"bytes,7,opt,name=logging_config,json=loggingConfig" json:"logging_config,omitempty"` } @@ -1177,9 +1277,9 @@ func _PigJob_OneofSizer(msg proto.Message) (n int) { // Cloud Dataproc job config. type JobPlacement struct { - // [Required] The name of the cluster where the job will be submitted. + // Required. The name of the cluster where the job will be submitted. ClusterName string `protobuf:"bytes,1,opt,name=cluster_name,json=clusterName" json:"cluster_name,omitempty"` - // [Output-only] A cluster UUID generated by the Cloud Dataproc service when + // Output-only. A cluster UUID generated by the Cloud Dataproc service when // the job is submitted. ClusterUuid string `protobuf:"bytes,2,opt,name=cluster_uuid,json=clusterUuid" json:"cluster_uuid,omitempty"` } @@ -1205,13 +1305,16 @@ func (m *JobPlacement) GetClusterUuid() string { // Cloud Dataproc job status. type JobStatus struct { - // [Output-only] A state message specifying the overall job state. + // Output-only. A state message specifying the overall job state. State JobStatus_State `protobuf:"varint,1,opt,name=state,enum=google.cloud.dataproc.v1.JobStatus_State" json:"state,omitempty"` - // [Output-only] Optional job state details, such as an error + // Output-only. Optional job state details, such as an error // description if the state is ERROR. Details string `protobuf:"bytes,2,opt,name=details" json:"details,omitempty"` - // [Output-only] The time when this state was entered. + // Output-only. The time when this state was entered. StateStartTime *google_protobuf3.Timestamp `protobuf:"bytes,6,opt,name=state_start_time,json=stateStartTime" json:"state_start_time,omitempty"` + // Output-only. Additional state information, which includes + // status reported by the agent. + Substate JobStatus_Substate `protobuf:"varint,7,opt,name=substate,enum=google.cloud.dataproc.v1.JobStatus_Substate" json:"substate,omitempty"` } func (m *JobStatus) Reset() { *m = JobStatus{} } @@ -1240,16 +1343,23 @@ func (m *JobStatus) GetStateStartTime() *google_protobuf3.Timestamp { return nil } +func (m *JobStatus) GetSubstate() JobStatus_Substate { + if m != nil { + return m.Substate + } + return JobStatus_UNSPECIFIED +} + // Encapsulates the full scoping used to reference a job. type JobReference struct { - // [Required] The ID of the Google Cloud Platform project that the job + // Required. The ID of the Google Cloud Platform project that the job // belongs to. ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` - // [Optional] The job ID, which must be unique within the project. The job ID + // Optional. The job ID, which must be unique within the project. The job ID // is generated by the server upon job submission or provided by the user as a // means to perform retries without creating duplicate jobs. The ID must // contain only letters (a-z, A-Z), numbers (0-9), underscores (_), or - // hyphens (-). The maximum length is 512 characters. + // hyphens (-). The maximum length is 100 characters. JobId string `protobuf:"bytes,2,opt,name=job_id,json=jobId" json:"job_id,omitempty"` } @@ -1272,17 +1382,69 @@ func (m *JobReference) GetJobId() string { return "" } +// A YARN application created by a job. Application information is a subset of +// org.apache.hadoop.yarn.proto.YarnProtos.ApplicationReportProto. +// +// **Beta Feature**: This report is available for testing purposes only. It may +// be changed before final release. +type YarnApplication struct { + // Required. The application name. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Required. The application state. + State YarnApplication_State `protobuf:"varint,2,opt,name=state,enum=google.cloud.dataproc.v1.YarnApplication_State" json:"state,omitempty"` + // Required. The numerical progress of the application, from 1 to 100. + Progress float32 `protobuf:"fixed32,3,opt,name=progress" json:"progress,omitempty"` + // Optional. The HTTP URL of the ApplicationMaster, HistoryServer, or + // TimelineServer that provides application-specific information. The URL uses + // the internal hostname, and requires a proxy server for resolution and, + // possibly, access. + TrackingUrl string `protobuf:"bytes,4,opt,name=tracking_url,json=trackingUrl" json:"tracking_url,omitempty"` +} + +func (m *YarnApplication) Reset() { *m = YarnApplication{} } +func (m *YarnApplication) String() string { return proto.CompactTextString(m) } +func (*YarnApplication) ProtoMessage() {} +func (*YarnApplication) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{11} } + +func (m *YarnApplication) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *YarnApplication) GetState() YarnApplication_State { + if m != nil { + return m.State + } + return YarnApplication_STATE_UNSPECIFIED +} + +func (m *YarnApplication) GetProgress() float32 { + if m != nil { + return m.Progress + } + return 0 +} + +func (m *YarnApplication) GetTrackingUrl() string { + if m != nil { + return m.TrackingUrl + } + return "" +} + // A Cloud Dataproc job resource. type Job struct { - // [Optional] The fully qualified reference to the job, which can be used to + // Optional. The fully qualified reference to the job, which can be used to // obtain the equivalent REST path of the job resource. If this property // is not specified when a job is created, the server generates a // job_id. Reference *JobReference `protobuf:"bytes,1,opt,name=reference" json:"reference,omitempty"` - // [Required] Job information, including how, when, and where to + // Required. Job information, including how, when, and where to // run the job. Placement *JobPlacement `protobuf:"bytes,2,opt,name=placement" json:"placement,omitempty"` - // [Required] The application/framework-specific portion of the job. + // Required. The application/framework-specific portion of the job. // // Types that are valid to be assigned to TypeJob: // *Job_HadoopJob @@ -1292,25 +1454,39 @@ type Job struct { // *Job_PigJob // *Job_SparkSqlJob TypeJob isJob_TypeJob `protobuf_oneof:"type_job"` - // [Output-only] The job status. Additional application-specific + // Output-only. The job status. Additional application-specific // status information may be contained in the type_job // and yarn_applications fields. Status *JobStatus `protobuf:"bytes,8,opt,name=status" json:"status,omitempty"` - // [Output-only] The previous job status. + // Output-only. The previous job status. StatusHistory []*JobStatus `protobuf:"bytes,13,rep,name=status_history,json=statusHistory" json:"status_history,omitempty"` - // [Output-only] A URI pointing to the location of the stdout of the job's + // Output-only. The collection of YARN applications spun up by this job. + // + // **Beta** Feature: This report is available for testing purposes only. It may + // be changed before final release. + YarnApplications []*YarnApplication `protobuf:"bytes,9,rep,name=yarn_applications,json=yarnApplications" json:"yarn_applications,omitempty"` + // Output-only. A URI pointing to the location of the stdout of the job's // driver program. DriverOutputResourceUri string `protobuf:"bytes,17,opt,name=driver_output_resource_uri,json=driverOutputResourceUri" json:"driver_output_resource_uri,omitempty"` - // [Output-only] If present, the location of miscellaneous control files + // Output-only. If present, the location of miscellaneous control files // which may be used as part of job setup and handling. If not present, // control files may be placed in the same location as `driver_output_uri`. DriverControlFilesUri string `protobuf:"bytes,15,opt,name=driver_control_files_uri,json=driverControlFilesUri" json:"driver_control_files_uri,omitempty"` + // Optional. The labels to associate with this job. + // Label **keys** must contain 1 to 63 characters, and must conform to + // [RFC 1035](https://www.ietf.org/rfc/rfc1035.txt). + // Label **values** may be empty, but, if present, must contain 1 to 63 + // characters, and must conform to [RFC 1035](https://www.ietf.org/rfc/rfc1035.txt). + // No more than 32 labels can be associated with a job. + Labels map[string]string `protobuf:"bytes,18,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Optional. Job scheduling configuration. + Scheduling *JobScheduling `protobuf:"bytes,20,opt,name=scheduling" json:"scheduling,omitempty"` } func (m *Job) Reset() { *m = Job{} } func (m *Job) String() string { return proto.CompactTextString(m) } func (*Job) ProtoMessage() {} -func (*Job) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{11} } +func (*Job) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{12} } type isJob_TypeJob interface { isJob_TypeJob() @@ -1419,6 +1595,13 @@ func (m *Job) GetStatusHistory() []*JobStatus { return nil } +func (m *Job) GetYarnApplications() []*YarnApplication { + if m != nil { + return m.YarnApplications + } + return nil +} + func (m *Job) GetDriverOutputResourceUri() string { if m != nil { return m.DriverOutputResourceUri @@ -1433,6 +1616,20 @@ func (m *Job) GetDriverControlFilesUri() string { return "" } +func (m *Job) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +func (m *Job) GetScheduling() *JobScheduling { + if m != nil { + return m.Scheduling + } + return nil +} + // XXX_OneofFuncs is for the internal use of the proto package. func (*Job) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { return _Job_OneofMarshaler, _Job_OneofUnmarshaler, _Job_OneofSizer, []interface{}{ @@ -1583,21 +1780,49 @@ func _Job_OneofSizer(msg proto.Message) (n int) { return n } +// Job scheduling options. +// +// **Beta Feature**: These options are available for testing purposes only. +// They may be changed before final release. +type JobScheduling struct { + // Optional. Maximum number of times per hour a driver may be restarted as + // a result of driver terminating with non-zero code before job is + // reported failed. + // + // A job may be reported as thrashing if driver exits with non-zero code + // 4 times within 10 minute window. + // + // Maximum value is 10. + MaxFailuresPerHour int32 `protobuf:"varint,1,opt,name=max_failures_per_hour,json=maxFailuresPerHour" json:"max_failures_per_hour,omitempty"` +} + +func (m *JobScheduling) Reset() { *m = JobScheduling{} } +func (m *JobScheduling) String() string { return proto.CompactTextString(m) } +func (*JobScheduling) ProtoMessage() {} +func (*JobScheduling) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{13} } + +func (m *JobScheduling) GetMaxFailuresPerHour() int32 { + if m != nil { + return m.MaxFailuresPerHour + } + return 0 +} + // A request to submit a job. type SubmitJobRequest struct { - // [Required] The ID of the Google Cloud Platform project that the job + // Required. The ID of the Google Cloud Platform project that the job // belongs to. ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` - // [Required] The Cloud Dataproc region in which to handle the request. + // Required. The Cloud Dataproc region in which to handle the request. Region string `protobuf:"bytes,3,opt,name=region" json:"region,omitempty"` - // [Required] The job resource. + // Required. The job resource. Job *Job `protobuf:"bytes,2,opt,name=job" json:"job,omitempty"` } func (m *SubmitJobRequest) Reset() { *m = SubmitJobRequest{} } func (m *SubmitJobRequest) String() string { return proto.CompactTextString(m) } func (*SubmitJobRequest) ProtoMessage() {} -func (*SubmitJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{12} } +func (*SubmitJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{14} } func (m *SubmitJobRequest) GetProjectId() string { if m != nil { @@ -1622,19 +1847,19 @@ func (m *SubmitJobRequest) GetJob() *Job { // A request to get the resource representation for a job in a project. type GetJobRequest struct { - // [Required] The ID of the Google Cloud Platform project that the job + // Required. The ID of the Google Cloud Platform project that the job // belongs to. ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` - // [Required] The Cloud Dataproc region in which to handle the request. + // Required. The Cloud Dataproc region in which to handle the request. Region string `protobuf:"bytes,3,opt,name=region" json:"region,omitempty"` - // [Required] The job ID. + // Required. The job ID. JobId string `protobuf:"bytes,2,opt,name=job_id,json=jobId" json:"job_id,omitempty"` } func (m *GetJobRequest) Reset() { *m = GetJobRequest{} } func (m *GetJobRequest) String() string { return proto.CompactTextString(m) } func (*GetJobRequest) ProtoMessage() {} -func (*GetJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{13} } +func (*GetJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{15} } func (m *GetJobRequest) GetProjectId() string { if m != nil { @@ -1659,28 +1884,45 @@ func (m *GetJobRequest) GetJobId() string { // A request to list jobs in a project. type ListJobsRequest struct { - // [Required] The ID of the Google Cloud Platform project that the job + // Required. The ID of the Google Cloud Platform project that the job // belongs to. ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` - // [Required] The Cloud Dataproc region in which to handle the request. + // Required. The Cloud Dataproc region in which to handle the request. Region string `protobuf:"bytes,6,opt,name=region" json:"region,omitempty"` - // [Optional] The number of results to return in each response. + // Optional. The number of results to return in each response. PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` - // [Optional] The page token, returned by a previous call, to request the + // Optional. The page token, returned by a previous call, to request the // next page of results. PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` - // [Optional] If set, the returned jobs list includes only jobs that were + // Optional. If set, the returned jobs list includes only jobs that were // submitted to the named cluster. ClusterName string `protobuf:"bytes,4,opt,name=cluster_name,json=clusterName" json:"cluster_name,omitempty"` - // [Optional] Specifies enumerated categories of jobs to list + // Optional. Specifies enumerated categories of jobs to list. // (default = match ALL jobs). + // + // If `filter` is provided, `jobStateMatcher` will be ignored. JobStateMatcher ListJobsRequest_JobStateMatcher `protobuf:"varint,5,opt,name=job_state_matcher,json=jobStateMatcher,enum=google.cloud.dataproc.v1.ListJobsRequest_JobStateMatcher" json:"job_state_matcher,omitempty"` + // Optional. A filter constraining the jobs to list. Filters are + // case-sensitive and have the following syntax: + // + // [field = value] AND [field [= value]] ... + // + // where **field** is `status.state` or `labels.[KEY]`, and `[KEY]` is a label + // key. **value** can be `*` to match all values. + // `status.state` can be either `ACTIVE` or `NON_ACTIVE`. + // Only the logical `AND` operator is supported; space-separated items are + // treated as having an implicit `AND` operator. + // + // Example filter: + // + // status.state = ACTIVE AND labels.env = staging AND labels.starred = * + Filter string `protobuf:"bytes,7,opt,name=filter" json:"filter,omitempty"` } func (m *ListJobsRequest) Reset() { *m = ListJobsRequest{} } func (m *ListJobsRequest) String() string { return proto.CompactTextString(m) } func (*ListJobsRequest) ProtoMessage() {} -func (*ListJobsRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{14} } +func (*ListJobsRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{16} } func (m *ListJobsRequest) GetProjectId() string { if m != nil { @@ -1724,11 +1966,78 @@ func (m *ListJobsRequest) GetJobStateMatcher() ListJobsRequest_JobStateMatcher { return ListJobsRequest_ALL } +func (m *ListJobsRequest) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +// A request to update a job. +type UpdateJobRequest struct { + // Required. The ID of the Google Cloud Platform project that the job + // belongs to. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Required. The Cloud Dataproc region in which to handle the request. + Region string `protobuf:"bytes,2,opt,name=region" json:"region,omitempty"` + // Required. The job ID. + JobId string `protobuf:"bytes,3,opt,name=job_id,json=jobId" json:"job_id,omitempty"` + // Required. The changes to the job. + Job *Job `protobuf:"bytes,4,opt,name=job" json:"job,omitempty"` + // Required. Specifies the path, relative to Job, of + // the field to update. For example, to update the labels of a Job the + // update_mask parameter would be specified as + // labels, and the `PATCH` request body would specify the new + // value. Note: Currently, labels is the only + // field that can be updated. + UpdateMask *google_protobuf5.FieldMask `protobuf:"bytes,5,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateJobRequest) Reset() { *m = UpdateJobRequest{} } +func (m *UpdateJobRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateJobRequest) ProtoMessage() {} +func (*UpdateJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{17} } + +func (m *UpdateJobRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *UpdateJobRequest) GetRegion() string { + if m != nil { + return m.Region + } + return "" +} + +func (m *UpdateJobRequest) GetJobId() string { + if m != nil { + return m.JobId + } + return "" +} + +func (m *UpdateJobRequest) GetJob() *Job { + if m != nil { + return m.Job + } + return nil +} + +func (m *UpdateJobRequest) GetUpdateMask() *google_protobuf5.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + // A list of jobs in a project. type ListJobsResponse struct { - // [Output-only] Jobs list. + // Output-only. Jobs list. Jobs []*Job `protobuf:"bytes,1,rep,name=jobs" json:"jobs,omitempty"` - // [Optional] This token is included in the response if there are more results + // Optional. This token is included in the response if there are more results // to fetch. To fetch additional results, provide this value as the // `page_token` in a subsequent ListJobsRequest. NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` @@ -1737,7 +2046,7 @@ type ListJobsResponse struct { func (m *ListJobsResponse) Reset() { *m = ListJobsResponse{} } func (m *ListJobsResponse) String() string { return proto.CompactTextString(m) } func (*ListJobsResponse) ProtoMessage() {} -func (*ListJobsResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{15} } +func (*ListJobsResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{18} } func (m *ListJobsResponse) GetJobs() []*Job { if m != nil { @@ -1755,19 +2064,19 @@ func (m *ListJobsResponse) GetNextPageToken() string { // A request to cancel a job. type CancelJobRequest struct { - // [Required] The ID of the Google Cloud Platform project that the job + // Required. The ID of the Google Cloud Platform project that the job // belongs to. ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` - // [Required] The Cloud Dataproc region in which to handle the request. + // Required. The Cloud Dataproc region in which to handle the request. Region string `protobuf:"bytes,3,opt,name=region" json:"region,omitempty"` - // [Required] The job ID. + // Required. The job ID. JobId string `protobuf:"bytes,2,opt,name=job_id,json=jobId" json:"job_id,omitempty"` } func (m *CancelJobRequest) Reset() { *m = CancelJobRequest{} } func (m *CancelJobRequest) String() string { return proto.CompactTextString(m) } func (*CancelJobRequest) ProtoMessage() {} -func (*CancelJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{16} } +func (*CancelJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{19} } func (m *CancelJobRequest) GetProjectId() string { if m != nil { @@ -1792,19 +2101,19 @@ func (m *CancelJobRequest) GetJobId() string { // A request to delete a job. type DeleteJobRequest struct { - // [Required] The ID of the Google Cloud Platform project that the job + // Required. The ID of the Google Cloud Platform project that the job // belongs to. ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` - // [Required] The Cloud Dataproc region in which to handle the request. + // Required. The Cloud Dataproc region in which to handle the request. Region string `protobuf:"bytes,3,opt,name=region" json:"region,omitempty"` - // [Required] The job ID. + // Required. The job ID. JobId string `protobuf:"bytes,2,opt,name=job_id,json=jobId" json:"job_id,omitempty"` } func (m *DeleteJobRequest) Reset() { *m = DeleteJobRequest{} } func (m *DeleteJobRequest) String() string { return proto.CompactTextString(m) } func (*DeleteJobRequest) ProtoMessage() {} -func (*DeleteJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{17} } +func (*DeleteJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{20} } func (m *DeleteJobRequest) GetProjectId() string { if m != nil { @@ -1839,15 +2148,20 @@ func init() { proto.RegisterType((*JobPlacement)(nil), "google.cloud.dataproc.v1.JobPlacement") proto.RegisterType((*JobStatus)(nil), "google.cloud.dataproc.v1.JobStatus") proto.RegisterType((*JobReference)(nil), "google.cloud.dataproc.v1.JobReference") + proto.RegisterType((*YarnApplication)(nil), "google.cloud.dataproc.v1.YarnApplication") proto.RegisterType((*Job)(nil), "google.cloud.dataproc.v1.Job") + proto.RegisterType((*JobScheduling)(nil), "google.cloud.dataproc.v1.JobScheduling") proto.RegisterType((*SubmitJobRequest)(nil), "google.cloud.dataproc.v1.SubmitJobRequest") proto.RegisterType((*GetJobRequest)(nil), "google.cloud.dataproc.v1.GetJobRequest") proto.RegisterType((*ListJobsRequest)(nil), "google.cloud.dataproc.v1.ListJobsRequest") + proto.RegisterType((*UpdateJobRequest)(nil), "google.cloud.dataproc.v1.UpdateJobRequest") proto.RegisterType((*ListJobsResponse)(nil), "google.cloud.dataproc.v1.ListJobsResponse") proto.RegisterType((*CancelJobRequest)(nil), "google.cloud.dataproc.v1.CancelJobRequest") proto.RegisterType((*DeleteJobRequest)(nil), "google.cloud.dataproc.v1.DeleteJobRequest") proto.RegisterEnum("google.cloud.dataproc.v1.LoggingConfig_Level", LoggingConfig_Level_name, LoggingConfig_Level_value) proto.RegisterEnum("google.cloud.dataproc.v1.JobStatus_State", JobStatus_State_name, JobStatus_State_value) + proto.RegisterEnum("google.cloud.dataproc.v1.JobStatus_Substate", JobStatus_Substate_name, JobStatus_Substate_value) + proto.RegisterEnum("google.cloud.dataproc.v1.YarnApplication_State", YarnApplication_State_name, YarnApplication_State_value) proto.RegisterEnum("google.cloud.dataproc.v1.ListJobsRequest_JobStateMatcher", ListJobsRequest_JobStateMatcher_name, ListJobsRequest_JobStateMatcher_value) } @@ -1868,10 +2182,12 @@ type JobControllerClient interface { GetJob(ctx context.Context, in *GetJobRequest, opts ...grpc.CallOption) (*Job, error) // Lists regions/{region}/jobs in a project. ListJobs(ctx context.Context, in *ListJobsRequest, opts ...grpc.CallOption) (*ListJobsResponse, error) + // Updates a job in a project. + UpdateJob(ctx context.Context, in *UpdateJobRequest, opts ...grpc.CallOption) (*Job, error) // Starts a job cancellation request. To access the job resource // after cancellation, call - // [regions/{region}/jobs.list](/dataproc/reference/rest/v1/projects.regions.jobs/list) or - // [regions/{region}/jobs.get](/dataproc/reference/rest/v1/projects.regions.jobs/get). + // [regions/{region}/jobs.list](/dataproc/docs/reference/rest/v1/projects.regions.jobs/list) or + // [regions/{region}/jobs.get](/dataproc/docs/reference/rest/v1/projects.regions.jobs/get). CancelJob(ctx context.Context, in *CancelJobRequest, opts ...grpc.CallOption) (*Job, error) // Deletes the job from the project. If the job is active, the delete fails, // and the response returns `FAILED_PRECONDITION`. @@ -1913,6 +2229,15 @@ func (c *jobControllerClient) ListJobs(ctx context.Context, in *ListJobsRequest, return out, nil } +func (c *jobControllerClient) UpdateJob(ctx context.Context, in *UpdateJobRequest, opts ...grpc.CallOption) (*Job, error) { + out := new(Job) + err := grpc.Invoke(ctx, "/google.cloud.dataproc.v1.JobController/UpdateJob", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *jobControllerClient) CancelJob(ctx context.Context, in *CancelJobRequest, opts ...grpc.CallOption) (*Job, error) { out := new(Job) err := grpc.Invoke(ctx, "/google.cloud.dataproc.v1.JobController/CancelJob", in, out, c.cc, opts...) @@ -1940,10 +2265,12 @@ type JobControllerServer interface { GetJob(context.Context, *GetJobRequest) (*Job, error) // Lists regions/{region}/jobs in a project. ListJobs(context.Context, *ListJobsRequest) (*ListJobsResponse, error) + // Updates a job in a project. + UpdateJob(context.Context, *UpdateJobRequest) (*Job, error) // Starts a job cancellation request. To access the job resource // after cancellation, call - // [regions/{region}/jobs.list](/dataproc/reference/rest/v1/projects.regions.jobs/list) or - // [regions/{region}/jobs.get](/dataproc/reference/rest/v1/projects.regions.jobs/get). + // [regions/{region}/jobs.list](/dataproc/docs/reference/rest/v1/projects.regions.jobs/list) or + // [regions/{region}/jobs.get](/dataproc/docs/reference/rest/v1/projects.regions.jobs/get). CancelJob(context.Context, *CancelJobRequest) (*Job, error) // Deletes the job from the project. If the job is active, the delete fails, // and the response returns `FAILED_PRECONDITION`. @@ -2008,6 +2335,24 @@ func _JobController_ListJobs_Handler(srv interface{}, ctx context.Context, dec f return interceptor(ctx, in, info, handler) } +func _JobController_UpdateJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateJobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(JobControllerServer).UpdateJob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dataproc.v1.JobController/UpdateJob", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(JobControllerServer).UpdateJob(ctx, req.(*UpdateJobRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _JobController_CancelJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(CancelJobRequest) if err := dec(in); err != nil { @@ -2060,6 +2405,10 @@ var _JobController_serviceDesc = grpc.ServiceDesc{ MethodName: "ListJobs", Handler: _JobController_ListJobs_Handler, }, + { + MethodName: "UpdateJob", + Handler: _JobController_UpdateJob_Handler, + }, { MethodName: "CancelJob", Handler: _JobController_CancelJob_Handler, @@ -2076,122 +2425,149 @@ var _JobController_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("google/cloud/dataproc/v1/jobs.proto", fileDescriptor1) } var fileDescriptor1 = []byte{ - // 1862 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x59, 0x5b, 0x6f, 0x23, 0x49, - 0x15, 0x8e, 0xef, 0xee, 0xe3, 0xb1, 0xd3, 0x29, 0x66, 0x17, 0xcb, 0xb3, 0xab, 0xcd, 0xf6, 0xb0, - 0x43, 0x76, 0x10, 0x36, 0xf1, 0xc2, 0xec, 0x90, 0x00, 0xbb, 0x8e, 0xed, 0x8c, 0x13, 0x8c, 0xe3, - 0x6d, 0x3b, 0x83, 0x84, 0x84, 0x7a, 0xda, 0x76, 0xc5, 0x69, 0x4f, 0xbb, 0xab, 0xd3, 0xd5, 0x6d, - 0xe1, 0x19, 0xcd, 0x0b, 0x7f, 0x00, 0x71, 0x11, 0x12, 0x3c, 0xf2, 0x2b, 0x90, 0x10, 0xe2, 0x01, - 0xc4, 0x1f, 0xe0, 0x15, 0xf1, 0xc4, 0x0f, 0x41, 0x55, 0xd5, 0xed, 0xf8, 0x12, 0x5f, 0xb2, 0xc3, - 0xae, 0x76, 0xf7, 0x29, 0xd5, 0xe7, 0x56, 0xa7, 0xea, 0xfb, 0xce, 0xa9, 0x2a, 0x07, 0xee, 0xf7, - 0x09, 0xe9, 0x9b, 0xb8, 0xd0, 0x35, 0x89, 0xd7, 0x2b, 0xf4, 0x74, 0x57, 0xb7, 0x1d, 0xd2, 0x2d, - 0x8c, 0xf6, 0x0b, 0x03, 0xd2, 0xa1, 0x79, 0xdb, 0x21, 0x2e, 0x41, 0x59, 0x61, 0x94, 0xe7, 0x46, - 0xf9, 0xc0, 0x28, 0x3f, 0xda, 0xcf, 0xbd, 0xe5, 0xbb, 0xeb, 0xb6, 0x51, 0xd0, 0x2d, 0x8b, 0xb8, - 0xba, 0x6b, 0x10, 0xcb, 0xf7, 0xcb, 0xdd, 0xf3, 0xb5, 0xfc, 0xab, 0xe3, 0x5d, 0x14, 0xf0, 0xd0, - 0x76, 0xc7, 0xbe, 0xf2, 0x9d, 0x79, 0xa5, 0x6b, 0x0c, 0x31, 0x75, 0xf5, 0xa1, 0x2d, 0x0c, 0x94, - 0xff, 0x84, 0x21, 0x5d, 0x27, 0xfd, 0xbe, 0x61, 0xf5, 0xcb, 0xc4, 0xba, 0x30, 0xfa, 0xe8, 0x12, - 0x76, 0x7a, 0x8e, 0x31, 0xc2, 0x8e, 0x66, 0x92, 0xbe, 0x66, 0xe2, 0x11, 0x36, 0x69, 0x36, 0xbc, - 0x1b, 0xd9, 0x4b, 0x15, 0x7f, 0x90, 0x5f, 0x96, 0x63, 0x7e, 0x26, 0x46, 0xbe, 0xc2, 0x03, 0xd4, - 0x49, 0xbf, 0xce, 0xdd, 0xab, 0x96, 0xeb, 0x8c, 0xd5, 0xed, 0xde, 0xac, 0x34, 0x77, 0x05, 0x77, - 0x6f, 0x32, 0x44, 0x32, 0x44, 0x9e, 0xe3, 0x71, 0x36, 0xb4, 0x1b, 0xda, 0x93, 0x54, 0x36, 0x44, - 0x65, 0x88, 0x8d, 0x74, 0xd3, 0xc3, 0xd9, 0xf0, 0x6e, 0x68, 0x2f, 0x53, 0xfc, 0xf6, 0xa6, 0x79, - 0xf0, 0xa8, 0xaa, 0xf0, 0x3d, 0x08, 0x3f, 0x0e, 0x29, 0x36, 0xc4, 0xb8, 0x0c, 0xbd, 0x01, 0x3b, - 0xf5, 0xea, 0xd3, 0x6a, 0x5d, 0x3b, 0x6f, 0xb4, 0x9a, 0xd5, 0xf2, 0xc9, 0xf1, 0x49, 0xb5, 0x22, - 0x6f, 0xa1, 0x04, 0x44, 0x4a, 0xf5, 0xba, 0x1c, 0x42, 0x12, 0xc4, 0xda, 0x6a, 0xa9, 0x5c, 0x95, - 0xc3, 0x6c, 0x58, 0xa9, 0x1e, 0x9d, 0x3f, 0x91, 0x23, 0x28, 0x09, 0xd1, 0x93, 0xc6, 0xf1, 0x99, - 0x1c, 0x65, 0xa3, 0x9f, 0x96, 0xd4, 0x86, 0x1c, 0x63, 0xea, 0xaa, 0xaa, 0x9e, 0xa9, 0x72, 0x9c, - 0x0d, 0x8f, 0x4b, 0xed, 0x52, 0x5d, 0x4e, 0xb0, 0x40, 0x67, 0xc7, 0xc7, 0x72, 0x52, 0xf9, 0x5b, - 0x04, 0xa4, 0x9a, 0xde, 0x23, 0xc4, 0x3e, 0x25, 0x1d, 0xf4, 0x2d, 0xd8, 0x19, 0xea, 0x86, 0xa5, - 0x0d, 0x74, 0x47, 0xbb, 0x30, 0x4c, 0xac, 0x79, 0x8e, 0x21, 0x16, 0x5a, 0xdb, 0x52, 0x33, 0x4c, - 0x75, 0xaa, 0x3b, 0xc7, 0x86, 0x89, 0xcf, 0x1d, 0x03, 0xbd, 0x03, 0xc0, 0x8d, 0xbb, 0xa6, 0x4e, - 0x29, 0x5f, 0x3a, 0xb3, 0x92, 0x98, 0xac, 0xcc, 0x44, 0x08, 0x41, 0x54, 0x77, 0xfa, 0x34, 0x1b, - 0xd9, 0x8d, 0xec, 0x49, 0x2a, 0x1f, 0x23, 0x05, 0xd2, 0xd3, 0xc1, 0x69, 0x36, 0xca, 0x95, 0xa9, - 0xc1, 0x24, 0x2e, 0x45, 0xf7, 0x40, 0xba, 0xd6, 0xc7, 0xb8, 0x3e, 0x79, 0x11, 0x28, 0xdf, 0x85, - 0x3b, 0xba, 0xd3, 0xbd, 0x34, 0x46, 0xbe, 0x3e, 0x2e, 0xfc, 0x7d, 0x19, 0x37, 0x69, 0x01, 0xd8, - 0x0e, 0xb1, 0xb1, 0xe3, 0x1a, 0x98, 0x66, 0x13, 0x9c, 0x1b, 0x1f, 0x2c, 0xc7, 0x64, 0xb2, 0xfc, - 0x7c, 0x73, 0xe2, 0x25, 0x28, 0x31, 0x15, 0x06, 0x35, 0x20, 0x63, 0x0a, 0xf0, 0xb4, 0x2e, 0x47, - 0x2f, 0x9b, 0xdc, 0x0d, 0xed, 0xa5, 0x8a, 0xdf, 0xdc, 0x10, 0x6c, 0x35, 0x6d, 0x4e, 0x7f, 0xe6, - 0x7e, 0x08, 0xdb, 0x73, 0xd3, 0xdd, 0x40, 0xac, 0xbb, 0xd3, 0xc4, 0x92, 0xa6, 0x98, 0x72, 0x94, - 0x84, 0xb8, 0xe0, 0xab, 0xf2, 0xd7, 0x08, 0x24, 0x5b, 0xb6, 0xee, 0x3c, 0xff, 0xea, 0x00, 0xa8, - 0xde, 0x00, 0x60, 0x71, 0xf9, 0x3e, 0x07, 0xab, 0xff, 0x72, 0xe2, 0xf7, 0x8f, 0x08, 0x40, 0x73, - 0x3c, 0x41, 0xb0, 0x00, 0x77, 0x39, 0x28, 0xf6, 0xd8, 0xbd, 0x24, 0xd6, 0x1c, 0x88, 0x2a, 0x47, - 0xb7, 0xc9, 0x55, 0x01, 0x8a, 0x01, 0x48, 0xe1, 0x29, 0x90, 0xf6, 0x40, 0x9e, 0xf3, 0x0f, 0x40, - 0xcc, 0xd8, 0xd3, 0xce, 0x9f, 0x0f, 0x9c, 0xed, 0x1b, 0xe0, 0xfc, 0xee, 0xf2, 0x6d, 0xbf, 0xde, - 0x8c, 0x2f, 0x11, 0xa0, 0xca, 0x7b, 0x20, 0x7d, 0xe2, 0x61, 0x67, 0x5c, 0x37, 0xa8, 0x8b, 0xb2, - 0x90, 0xb8, 0xf2, 0xb0, 0xc3, 0x96, 0x1b, 0xe2, 0xfb, 0x11, 0x7c, 0x2a, 0xbf, 0x8a, 0x42, 0xa2, - 0x66, 0x8c, 0x30, 0x83, 0xfa, 0x01, 0x64, 0x98, 0x78, 0xbc, 0x58, 0xa9, 0x77, 0xb8, 0x3c, 0x40, - 0xb8, 0x02, 0x20, 0xec, 0x4c, 0x83, 0xba, 0x7c, 0xe6, 0x54, 0xf1, 0xfe, 0xf2, 0x55, 0x4e, 0xd2, - 0x60, 0xc5, 0x7c, 0x35, 0xc9, 0x29, 0x0f, 0x5f, 0xeb, 0x12, 0xcb, 0x35, 0x2c, 0x0f, 0x6b, 0x8c, - 0x18, 0xba, 0x61, 0x7a, 0x0e, 0xce, 0x46, 0x76, 0x43, 0x7b, 0x49, 0x75, 0x27, 0x50, 0x9d, 0x59, - 0xc7, 0x42, 0x81, 0x74, 0x90, 0x69, 0xd7, 0x31, 0x6c, 0x57, 0x1b, 0xe9, 0x8e, 0xa1, 0x77, 0x4c, - 0x2c, 0xc8, 0x91, 0x2a, 0x3e, 0x5a, 0xd1, 0x4b, 0xc5, 0xd2, 0xf2, 0x2d, 0xee, 0xf9, 0x34, 0x70, - 0xf4, 0x4f, 0x58, 0x3a, 0x2b, 0x45, 0x9f, 0xcc, 0x10, 0x23, 0xc6, 0x83, 0xef, 0xaf, 0x0f, 0xbe, - 0x8a, 0x15, 0x0b, 0x7c, 0x8e, 0x2f, 0xf0, 0x39, 0x77, 0x04, 0x77, 0x6f, 0xca, 0xef, 0x36, 0x70, - 0xbf, 0x6e, 0xf9, 0x4b, 0x13, 0x82, 0x28, 0x7f, 0x89, 0x42, 0x8a, 0x13, 0xbe, 0x75, 0x65, 0x7e, - 0xfe, 0xac, 0xc0, 0x37, 0xa0, 0x1c, 0xe1, 0x40, 0x1c, 0xac, 0x69, 0xb8, 0x22, 0xdd, 0x0d, 0x91, - 0x3e, 0x9f, 0x41, 0x5a, 0xd0, 0xe8, 0x7b, 0x9b, 0x4d, 0x70, 0x2b, 0xb4, 0x1f, 0x2f, 0x76, 0xaf, - 0xc5, 0x3e, 0x11, 0x7f, 0xad, 0x3e, 0xf1, 0xc5, 0x62, 0xcf, 0xbf, 0xa3, 0x10, 0x6f, 0x1a, 0xfd, - 0x2f, 0x7e, 0x3b, 0x79, 0xb6, 0xb4, 0x9d, 0xac, 0xe0, 0x81, 0x58, 0xd9, 0x86, 0x1c, 0x6b, 0xde, - 0xd0, 0x4d, 0xbe, 0xb3, 0x36, 0xf6, 0x6b, 0x36, 0x93, 0x1b, 0xe8, 0x95, 0xf8, 0x0a, 0xd1, 0xab, - 0x0d, 0x77, 0x4e, 0x49, 0xa7, 0x69, 0xea, 0x5d, 0x3c, 0xc4, 0x96, 0xcb, 0x4e, 0xfb, 0xae, 0xe9, - 0x51, 0x17, 0x3b, 0x9a, 0xa5, 0x0f, 0xb1, 0x1f, 0x2f, 0xe5, 0xcb, 0x1a, 0xfa, 0x10, 0x4f, 0x9b, - 0x78, 0x9e, 0xd1, 0xf3, 0xc3, 0x07, 0x26, 0xe7, 0x9e, 0xd1, 0x53, 0xfe, 0x1e, 0x06, 0xe9, 0x94, - 0x74, 0x5a, 0xae, 0xee, 0x7a, 0x14, 0x7d, 0x04, 0x31, 0xea, 0xea, 0xae, 0x08, 0x96, 0x29, 0xbe, - 0xbf, 0x7c, 0xe3, 0x26, 0x3e, 0x79, 0xf6, 0x07, 0xab, 0xc2, 0x8f, 0x9d, 0xb6, 0x3d, 0xec, 0xea, - 0x86, 0xe9, 0x5f, 0x62, 0xd5, 0xe0, 0x13, 0x55, 0x40, 0xe6, 0x26, 0x1a, 0x75, 0x75, 0xc7, 0xd5, - 0xd8, 0xeb, 0xd2, 0xaf, 0xfe, 0x5c, 0x30, 0x4b, 0xf0, 0xf4, 0xcc, 0xb7, 0x83, 0xa7, 0xa7, 0x9a, - 0xe1, 0x3e, 0x2d, 0xe6, 0xc2, 0x84, 0xca, 0xef, 0x42, 0x10, 0xe3, 0x13, 0xb2, 0x67, 0x59, 0xab, - 0x5d, 0x6a, 0x57, 0xe7, 0x9e, 0x65, 0x29, 0x48, 0x34, 0xab, 0x8d, 0xca, 0x49, 0xe3, 0x89, 0x1c, - 0x42, 0x19, 0x80, 0x56, 0xb5, 0x7d, 0xde, 0xd4, 0x2a, 0x67, 0x8d, 0xaa, 0x9c, 0x64, 0x4a, 0xf5, - 0xbc, 0xd1, 0x60, 0xca, 0x30, 0x42, 0x90, 0x29, 0x97, 0x1a, 0xe5, 0x6a, 0x5d, 0x0b, 0x1c, 0x22, - 0x53, 0xb2, 0x56, 0xbb, 0xa4, 0xb6, 0xab, 0x15, 0x39, 0x81, 0xd2, 0x20, 0x09, 0x59, 0xbd, 0x5a, - 0x11, 0xcf, 0x39, 0x1e, 0x6d, 0xfa, 0x39, 0xa7, 0x54, 0x38, 0x36, 0x2a, 0xbe, 0xc0, 0x0e, 0xb6, - 0xba, 0x18, 0xbd, 0xcd, 0xf9, 0x3f, 0xc0, 0x5d, 0x57, 0x33, 0x7a, 0x3e, 0x32, 0x92, 0x2f, 0x39, - 0xe9, 0xa1, 0x37, 0x20, 0x3e, 0x20, 0x1d, 0x6d, 0x82, 0x48, 0x6c, 0x40, 0x3a, 0x27, 0x3d, 0xe5, - 0xcf, 0x71, 0x88, 0xb0, 0xee, 0x51, 0x01, 0xc9, 0x09, 0x42, 0x71, 0xe7, 0x54, 0xf1, 0xc1, 0x4a, - 0x24, 0x26, 0x13, 0xab, 0xd7, 0x8e, 0x2c, 0x8a, 0x1d, 0x90, 0xc5, 0x6f, 0x2d, 0xab, 0xa3, 0x4c, - 0xa8, 0xa5, 0x5e, 0x3b, 0xb2, 0x0e, 0x75, 0xc9, 0x1f, 0x65, 0xda, 0x80, 0x74, 0x78, 0x4b, 0x59, - 0xd9, 0xa1, 0x26, 0x0f, 0x38, 0xd6, 0xa1, 0x2e, 0x27, 0x8f, 0xd9, 0x12, 0x48, 0x94, 0x9d, 0x23, - 0x3c, 0x48, 0x94, 0x07, 0x51, 0xd6, 0x3f, 0x22, 0x6a, 0x5b, 0x6a, 0x92, 0x06, 0x97, 0xf1, 0x27, - 0x90, 0xb2, 0xc7, 0xd7, 0x41, 0x62, 0x3c, 0xc8, 0x37, 0x36, 0xb9, 0xba, 0xd6, 0xb6, 0x54, 0xf0, - 0x5d, 0x59, 0xa0, 0x1f, 0x41, 0x92, 0x5f, 0x91, 0x59, 0x14, 0x41, 0xc0, 0x77, 0xd7, 0xde, 0x73, - 0x6a, 0x5b, 0x6a, 0xe2, 0xd2, 0xbf, 0x2a, 0x1e, 0x42, 0xc2, 0x36, 0xfa, 0xdc, 0x5d, 0xb4, 0x97, - 0xdd, 0x75, 0x8d, 0xad, 0xb6, 0xa5, 0xc6, 0x6d, 0x71, 0x30, 0xfc, 0x18, 0xd2, 0x62, 0x0d, 0xf4, - 0xca, 0xe4, 0x21, 0xee, 0xf0, 0x10, 0xef, 0x6d, 0x74, 0xfe, 0xd6, 0xb6, 0xd4, 0x14, 0x9d, 0xba, - 0x9e, 0x1c, 0x42, 0x9c, 0xf2, 0x1a, 0xf4, 0xaf, 0xdb, 0xf7, 0x37, 0x28, 0x57, 0xd5, 0x77, 0x41, - 0xa7, 0x90, 0x11, 0x23, 0xed, 0xd2, 0xa0, 0x2e, 0x71, 0xc6, 0xd9, 0x34, 0x6f, 0xd3, 0x1b, 0x05, - 0x49, 0x0b, 0xd7, 0x9a, 0xf0, 0x44, 0x87, 0x90, 0xf3, 0x7f, 0x08, 0x22, 0x9e, 0x6b, 0x7b, 0xae, - 0xe6, 0x60, 0x4a, 0x3c, 0xa7, 0x2b, 0x8e, 0xbe, 0x1d, 0xce, 0xf1, 0xaf, 0x0b, 0x8b, 0x33, 0x6e, - 0xa0, 0xfa, 0x7a, 0x76, 0x06, 0x7e, 0x08, 0x59, 0xdf, 0x99, 0x9d, 0x54, 0x0e, 0x31, 0x79, 0x93, - 0xa7, 0xdc, 0x75, 0x9b, 0xbb, 0xbe, 0x21, 0xf4, 0x65, 0xa1, 0x66, 0xed, 0x9e, 0x9e, 0x3b, 0xc6, - 0x11, 0x40, 0xd2, 0x1d, 0xdb, 0x1c, 0x48, 0xe5, 0x05, 0xc8, 0x2d, 0xaf, 0x33, 0x34, 0x5c, 0x5e, - 0x0d, 0x57, 0x1e, 0xa6, 0xee, 0xba, 0x22, 0x7c, 0x13, 0xe2, 0x0e, 0xee, 0x1b, 0xc4, 0xe2, 0xac, - 0x96, 0x54, 0xff, 0x0b, 0x15, 0x20, 0xc2, 0x80, 0x11, 0x15, 0xf3, 0xf6, 0xea, 0xba, 0x63, 0x96, - 0xca, 0xcf, 0x21, 0xfd, 0x04, 0xff, 0x1f, 0x26, 0x5e, 0xd2, 0x15, 0xfe, 0x19, 0x86, 0x6d, 0x76, - 0xcc, 0x9f, 0x92, 0x0e, 0xbd, 0xf5, 0x0c, 0xf1, 0x99, 0x19, 0xee, 0x81, 0x64, 0xeb, 0x7d, 0xac, - 0x51, 0xe3, 0x85, 0x38, 0x6b, 0x62, 0x6a, 0x92, 0x09, 0x5a, 0xc6, 0x0b, 0xd1, 0xb3, 0x98, 0xd2, - 0x25, 0xcf, 0x71, 0x90, 0x1a, 0x37, 0x6f, 0x33, 0xc1, 0xc2, 0x71, 0x13, 0x5d, 0x3c, 0x6e, 0x30, - 0xec, 0xb0, 0x05, 0x88, 0x36, 0x3f, 0xd4, 0xdd, 0xee, 0x25, 0x76, 0x78, 0xa1, 0x66, 0x8a, 0xdf, - 0x5f, 0x71, 0x04, 0xcf, 0xae, 0x2d, 0x60, 0x19, 0xfe, 0x89, 0x08, 0xa0, 0x6e, 0x0f, 0x66, 0x05, - 0xca, 0x23, 0xd8, 0x9e, 0xb3, 0x09, 0x7e, 0x8c, 0xdb, 0x42, 0x00, 0xf1, 0x52, 0xb9, 0x7d, 0xf2, - 0xb4, 0x2a, 0xba, 0x7f, 0xe3, 0xac, 0xa1, 0xf9, 0xdf, 0x61, 0x65, 0x08, 0xf2, 0xf5, 0x5c, 0xd4, - 0x26, 0x16, 0xc5, 0x68, 0x1f, 0xa2, 0x03, 0xd2, 0x11, 0x4f, 0xc3, 0xb5, 0x68, 0x73, 0x53, 0xf4, - 0x00, 0xb6, 0x2d, 0xfc, 0x0b, 0x57, 0x9b, 0xda, 0x2c, 0x81, 0x57, 0x9a, 0x89, 0x9b, 0xc1, 0x86, - 0x29, 0xcf, 0x40, 0x2e, 0xeb, 0x56, 0x17, 0x9b, 0x9f, 0x19, 0x33, 0x9e, 0x81, 0x5c, 0xc1, 0x26, - 0x76, 0xf1, 0x67, 0x35, 0x43, 0xf1, 0xf7, 0x71, 0x48, 0x9f, 0x92, 0x8e, 0x5f, 0x79, 0x26, 0x76, - 0xd0, 0x1f, 0x42, 0x20, 0x4d, 0x2a, 0x0d, 0x3d, 0x5c, 0xd1, 0xb7, 0xe6, 0xca, 0x31, 0xb7, 0x7a, - 0x73, 0x95, 0xd2, 0x2f, 0xff, 0xf5, 0xdf, 0xdf, 0x86, 0x0f, 0x95, 0x47, 0x85, 0xd1, 0x7e, 0xc1, - 0x4f, 0x98, 0x16, 0x5e, 0x5e, 0x2f, 0xe6, 0x55, 0x41, 0xe4, 0x4a, 0x0b, 0x2f, 0xc5, 0xe0, 0x15, - 0xff, 0x4d, 0xfc, 0x80, 0xf2, 0x89, 0x0e, 0x42, 0x0f, 0xd1, 0x6f, 0x42, 0x10, 0x17, 0x95, 0x88, - 0x56, 0x5c, 0xf9, 0x66, 0x6a, 0x75, 0x5d, 0x56, 0x1f, 0xf3, 0xac, 0x0e, 0xd0, 0xe3, 0x5b, 0x66, - 0x55, 0x78, 0x29, 0xb6, 0xf3, 0x15, 0xfa, 0x63, 0x08, 0x92, 0x01, 0xed, 0xd0, 0xfb, 0x1b, 0x97, - 0x41, 0xee, 0xe1, 0x26, 0xa6, 0x82, 0xc5, 0xca, 0x87, 0x3c, 0xcb, 0x7d, 0x54, 0xb8, 0x65, 0x96, - 0xe8, 0x4f, 0x21, 0x90, 0x26, 0x24, 0x5d, 0x85, 0xe6, 0x3c, 0x93, 0xd7, 0xed, 0xdb, 0x29, 0xcf, - 0xa8, 0xa2, 0x7c, 0xf4, 0x69, 0xf7, 0xed, 0xa0, 0xcb, 0x67, 0x64, 0xb0, 0xfe, 0x3a, 0x04, 0xd2, - 0x84, 0xe7, 0xab, 0x92, 0x9c, 0x2f, 0x86, 0xdc, 0x9b, 0x0b, 0x37, 0xcb, 0xea, 0xd0, 0x76, 0xc7, - 0x01, 0xaa, 0x0f, 0x3f, 0x35, 0xaa, 0x47, 0x43, 0x78, 0xab, 0x4b, 0x86, 0x4b, 0x53, 0x39, 0x62, - 0x77, 0x6a, 0xda, 0x64, 0xb3, 0x36, 0x43, 0x3f, 0xfb, 0xd8, 0x37, 0xeb, 0x13, 0x53, 0xb7, 0xfa, - 0x79, 0xe2, 0xf4, 0x0b, 0x7d, 0x6c, 0xf1, 0x9c, 0x0a, 0x42, 0xa5, 0xdb, 0x06, 0x5d, 0xfc, 0x9f, - 0xcf, 0x61, 0x30, 0xee, 0xc4, 0xb9, 0xf1, 0x07, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xaf, 0x59, - 0x9b, 0xa1, 0x1f, 0x1a, 0x00, 0x00, + // 2290 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x59, 0xcf, 0x73, 0x1b, 0x49, + 0xf5, 0xb7, 0x7e, 0x6b, 0x9e, 0x6c, 0x79, 0xdc, 0x9b, 0xec, 0x57, 0xa5, 0xdd, 0xad, 0xf5, 0x4e, + 0xbe, 0x1b, 0x9c, 0x00, 0x12, 0xd6, 0x42, 0x36, 0x6b, 0x03, 0x59, 0x59, 0x1a, 0x47, 0xf2, 0x2a, + 0xb2, 0x32, 0x92, 0x92, 0x82, 0x2a, 0x6a, 0x32, 0x92, 0xda, 0xf2, 0xd8, 0xa3, 0x99, 0xf1, 0xf4, + 0x8c, 0x2b, 0x4a, 0x2a, 0x17, 0x2e, 0x1c, 0x29, 0xe0, 0x04, 0x55, 0x5c, 0xb8, 0xf1, 0x07, 0xc0, + 0x85, 0xa2, 0xb8, 0x70, 0xe6, 0xc2, 0x81, 0x0b, 0xb5, 0x27, 0x8e, 0xfc, 0x11, 0x54, 0x77, 0xcf, + 0xc8, 0x92, 0x6c, 0xfd, 0x70, 0x02, 0x5b, 0xbb, 0x7b, 0x72, 0x4f, 0xbf, 0x1f, 0xfd, 0xba, 0x3f, + 0x9f, 0x7e, 0xef, 0xb5, 0x0c, 0xb7, 0xfa, 0x96, 0xd5, 0x37, 0x70, 0xbe, 0x6b, 0x58, 0x5e, 0x2f, + 0xdf, 0xd3, 0x5c, 0xcd, 0x76, 0xac, 0x6e, 0xfe, 0x7c, 0x3b, 0x7f, 0x62, 0x75, 0x48, 0xce, 0x76, + 0x2c, 0xd7, 0x42, 0x19, 0xae, 0x94, 0x63, 0x4a, 0xb9, 0x40, 0x29, 0x77, 0xbe, 0x9d, 0x7d, 0xd7, + 0x37, 0xd7, 0x6c, 0x3d, 0xaf, 0x99, 0xa6, 0xe5, 0x6a, 0xae, 0x6e, 0x99, 0xbe, 0x5d, 0xf6, 0x1d, + 0x5f, 0xca, 0xbe, 0x3a, 0xde, 0x51, 0x1e, 0x0f, 0x6c, 0x77, 0xe8, 0x0b, 0x37, 0xa7, 0x85, 0x47, + 0x3a, 0x36, 0x7a, 0xea, 0x40, 0x23, 0xa7, 0xbe, 0xc6, 0xfb, 0xd3, 0x1a, 0xae, 0x3e, 0xc0, 0xc4, + 0xd5, 0x06, 0x36, 0x57, 0x90, 0x3e, 0x0f, 0xc3, 0x5a, 0xcd, 0xea, 0xf7, 0x75, 0xb3, 0x5f, 0xb2, + 0xcc, 0x23, 0xbd, 0x8f, 0x8e, 0x61, 0xa3, 0xe7, 0xe8, 0xe7, 0xd8, 0x51, 0x0d, 0xab, 0xaf, 0x1a, + 0xf8, 0x1c, 0x1b, 0x24, 0x13, 0xde, 0x8c, 0x6c, 0xa5, 0x0a, 0xdf, 0xcf, 0xcd, 0xda, 0x45, 0x6e, + 0xc2, 0x47, 0xae, 0xcc, 0x1c, 0xd4, 0xac, 0x7e, 0x8d, 0x99, 0xcb, 0xa6, 0xeb, 0x0c, 0x95, 0xf5, + 0xde, 0xe4, 0x6c, 0xf6, 0x0c, 0x6e, 0x5c, 0xa5, 0x88, 0x44, 0x88, 0x9c, 0xe2, 0x61, 0x26, 0xb4, + 0x19, 0xda, 0x12, 0x14, 0x3a, 0x44, 0x25, 0x88, 0x9d, 0x6b, 0x86, 0x87, 0x33, 0xe1, 0xcd, 0xd0, + 0x56, 0xba, 0xf0, 0xed, 0x65, 0xe3, 0x60, 0x5e, 0x15, 0x6e, 0xbb, 0x13, 0xbe, 0x1f, 0x92, 0x6c, + 0x88, 0xb1, 0x39, 0x74, 0x13, 0x36, 0x6a, 0xf2, 0x13, 0xb9, 0xa6, 0xb6, 0xeb, 0xcd, 0x86, 0x5c, + 0xaa, 0xee, 0x57, 0xe5, 0xb2, 0xb8, 0x82, 0x12, 0x10, 0x29, 0xd6, 0x6a, 0x62, 0x08, 0x09, 0x10, + 0x6b, 0x29, 0xc5, 0x92, 0x2c, 0x86, 0xe9, 0xb0, 0x2c, 0xef, 0xb5, 0x1f, 0x8a, 0x11, 0x94, 0x84, + 0x68, 0xb5, 0xbe, 0x7f, 0x28, 0x46, 0xe9, 0xe8, 0x69, 0x51, 0xa9, 0x8b, 0x31, 0x2a, 0x96, 0x15, + 0xe5, 0x50, 0x11, 0xe3, 0x74, 0xb8, 0x5f, 0x6c, 0x15, 0x6b, 0x62, 0x82, 0x3a, 0x3a, 0xdc, 0xdf, + 0x17, 0x93, 0xd2, 0x5f, 0x22, 0x20, 0x54, 0xb4, 0x9e, 0x65, 0xd9, 0x07, 0x56, 0x07, 0x7d, 0x13, + 0x36, 0x06, 0x9a, 0x6e, 0xaa, 0x27, 0x9a, 0xa3, 0x1e, 0xe9, 0x06, 0x56, 0x3d, 0x47, 0xe7, 0x1b, + 0xad, 0xac, 0x28, 0x69, 0x2a, 0x3a, 0xd0, 0x9c, 0x7d, 0xdd, 0xc0, 0x6d, 0x47, 0x47, 0xef, 0x03, + 0x30, 0xe5, 0xae, 0xa1, 0x11, 0xc2, 0xb6, 0x4e, 0xb5, 0x04, 0x3a, 0x57, 0xa2, 0x53, 0x08, 0x41, + 0x54, 0x73, 0xfa, 0x24, 0x13, 0xd9, 0x8c, 0x6c, 0x09, 0x0a, 0x1b, 0x23, 0x09, 0xd6, 0xc6, 0x9d, + 0x93, 0x4c, 0x94, 0x09, 0x53, 0x27, 0x23, 0xbf, 0x04, 0xbd, 0x03, 0xc2, 0x85, 0x3c, 0xc6, 0xe4, + 0xc9, 0xa3, 0x40, 0xf8, 0x01, 0xac, 0x6a, 0x4e, 0xf7, 0x58, 0x3f, 0xf7, 0xe5, 0x71, 0x6e, 0xef, + 0xcf, 0x31, 0x95, 0x26, 0x80, 0xed, 0x58, 0x36, 0x76, 0x5c, 0x1d, 0x93, 0x4c, 0x82, 0x71, 0xe3, + 0xa3, 0xd9, 0x98, 0x8c, 0xb6, 0x9f, 0x6b, 0x8c, 0xac, 0x38, 0x25, 0xc6, 0xdc, 0xa0, 0x3a, 0xa4, + 0x0d, 0x0e, 0x9e, 0xda, 0x65, 0xe8, 0x65, 0x92, 0x9b, 0xa1, 0xad, 0x54, 0xe1, 0x1b, 0x4b, 0x82, + 0xad, 0xac, 0x19, 0xe3, 0x9f, 0xd9, 0x1f, 0xc0, 0xfa, 0xd4, 0x72, 0x57, 0x10, 0xeb, 0xc6, 0x38, + 0xb1, 0x84, 0x31, 0xa6, 0xec, 0x25, 0x21, 0xce, 0xf9, 0x2a, 0xfd, 0x39, 0x02, 0xc9, 0xa6, 0xad, + 0x39, 0xa7, 0x5f, 0x1f, 0x00, 0x95, 0x2b, 0x00, 0x2c, 0xcc, 0x3e, 0xe7, 0x60, 0xf7, 0x5f, 0x4d, + 0xfc, 0xfe, 0x1a, 0x01, 0x68, 0x0c, 0x47, 0x08, 0xe6, 0xe1, 0x06, 0x03, 0xc5, 0x1e, 0xba, 0xc7, + 0x96, 0x39, 0x05, 0xa2, 0xc2, 0xd0, 0x6d, 0x30, 0x51, 0x80, 0x62, 0x00, 0x52, 0x78, 0x0c, 0xa4, + 0x2d, 0x10, 0xa7, 0xec, 0x03, 0x10, 0xd3, 0xf6, 0xb8, 0xf1, 0x17, 0x03, 0x67, 0xeb, 0x0a, 0x38, + 0xbf, 0x3b, 0xfb, 0xd8, 0x2f, 0x0e, 0xe3, 0x2b, 0x04, 0xa8, 0xf4, 0x21, 0x08, 0x8f, 0x3d, 0xec, + 0x0c, 0x6b, 0x3a, 0x71, 0x51, 0x06, 0x12, 0x67, 0x1e, 0x76, 0xe8, 0x76, 0x43, 0xec, 0x3c, 0x82, + 0x4f, 0xe9, 0xe7, 0x51, 0x48, 0x54, 0xf4, 0x73, 0x4c, 0xa1, 0xbe, 0x0d, 0x69, 0x3a, 0x3d, 0xbc, + 0x7c, 0x53, 0x57, 0xd9, 0x7c, 0x80, 0x70, 0x19, 0x80, 0xeb, 0x19, 0x3a, 0x71, 0xd9, 0xca, 0xa9, + 0xc2, 0xad, 0xd9, 0xbb, 0x1c, 0x85, 0x41, 0x2f, 0xf3, 0xd9, 0x28, 0xa6, 0x1c, 0xbc, 0xd5, 0xb5, + 0x4c, 0x57, 0x37, 0x3d, 0xac, 0x52, 0x62, 0x68, 0xba, 0xe1, 0x39, 0x38, 0x13, 0xd9, 0x0c, 0x6d, + 0x25, 0x95, 0x8d, 0x40, 0x74, 0x68, 0xee, 0x73, 0x01, 0xd2, 0x40, 0x24, 0x5d, 0x47, 0xb7, 0x5d, + 0xf5, 0x5c, 0x73, 0x74, 0xad, 0x63, 0x60, 0x4e, 0x8e, 0x54, 0xe1, 0xde, 0x9c, 0x5c, 0xca, 0xb7, + 0x96, 0x6b, 0x32, 0xcb, 0x27, 0x81, 0xa1, 0x5f, 0x61, 0xc9, 0xe4, 0x2c, 0x7a, 0x3c, 0x41, 0x8c, + 0x18, 0x73, 0xbe, 0xbd, 0xd8, 0xf9, 0x3c, 0x56, 0x5c, 0xe2, 0x73, 0xfc, 0x12, 0x9f, 0xb3, 0x7b, + 0x70, 0xe3, 0xaa, 0xf8, 0xae, 0x03, 0xf7, 0x9b, 0x5e, 0x7f, 0x61, 0x44, 0x10, 0xe9, 0x4f, 0x51, + 0x48, 0x31, 0xc2, 0x37, 0xcf, 0x8c, 0x2f, 0x9e, 0x15, 0xf8, 0x0a, 0x94, 0x23, 0x0c, 0x88, 0x9d, + 0x05, 0x09, 0x97, 0x87, 0xbb, 0x24, 0xd2, 0xed, 0x09, 0xa4, 0x39, 0x8d, 0xbe, 0xb7, 0xdc, 0x02, + 0xd7, 0x42, 0xfb, 0xfe, 0xe5, 0xec, 0x75, 0x39, 0x4f, 0xc4, 0xdf, 0x28, 0x4f, 0x7c, 0xb9, 0xd8, + 0xf3, 0xcf, 0x28, 0xc4, 0x1b, 0x7a, 0xff, 0xcb, 0x9f, 0x4e, 0x9e, 0xcd, 0x4c, 0x27, 0x73, 0x78, + 0xc0, 0x77, 0xb6, 0x24, 0xc7, 0x1a, 0x57, 0x64, 0x93, 0xef, 0x2c, 0xf4, 0xfd, 0x86, 0xc9, 0xe4, + 0x0a, 0x7a, 0x25, 0xbe, 0x46, 0xf4, 0x6a, 0xc1, 0xea, 0x81, 0xd5, 0x69, 0x18, 0x5a, 0x17, 0x0f, + 0xb0, 0xe9, 0xd2, 0x6a, 0xdf, 0x35, 0x3c, 0xe2, 0x62, 0x47, 0x35, 0xb5, 0x01, 0xf6, 0xfd, 0xa5, + 0xfc, 0xb9, 0xba, 0x36, 0xc0, 0xe3, 0x2a, 0x9e, 0xa7, 0xf7, 0x7c, 0xf7, 0x81, 0x4a, 0xdb, 0xd3, + 0x7b, 0xd2, 0xbf, 0x23, 0x20, 0x1c, 0x58, 0x9d, 0xa6, 0xab, 0xb9, 0x1e, 0x41, 0x0f, 0x20, 0x46, + 0x5c, 0xcd, 0xe5, 0xce, 0xd2, 0x85, 0x3b, 0xb3, 0x0f, 0x6e, 0x64, 0x93, 0xa3, 0x7f, 0xb0, 0xc2, + 0xed, 0x68, 0xb5, 0xed, 0x61, 0x57, 0xd3, 0x0d, 0xbf, 0x89, 0x55, 0x82, 0x4f, 0x54, 0x06, 0x91, + 0xa9, 0xa8, 0xc4, 0xd5, 0x1c, 0x57, 0xa5, 0xaf, 0x4b, 0xff, 0xf6, 0x67, 0x83, 0x55, 0x82, 0xa7, + 0x67, 0xae, 0x15, 0x3c, 0x3d, 0x95, 0x34, 0xb3, 0x69, 0x52, 0x13, 0x3a, 0x89, 0x2a, 0x90, 0x24, + 0x5e, 0x87, 0xc7, 0x98, 0x60, 0x31, 0x7e, 0x6b, 0xa9, 0x18, 0x7d, 0x1b, 0x65, 0x64, 0x2d, 0xfd, + 0x3e, 0x04, 0x31, 0x16, 0x3a, 0x7d, 0xe0, 0x35, 0x5b, 0xc5, 0x96, 0x3c, 0xf5, 0xc0, 0x4b, 0x41, + 0xa2, 0x21, 0xd7, 0xcb, 0xd5, 0xfa, 0x43, 0x31, 0x84, 0xd2, 0x00, 0x4d, 0xb9, 0xd5, 0x6e, 0xa8, + 0xe5, 0xc3, 0xba, 0x2c, 0x26, 0xa9, 0x50, 0x69, 0xd7, 0xeb, 0x54, 0x18, 0x46, 0x08, 0xd2, 0xa5, + 0x62, 0xbd, 0x24, 0xd7, 0xd4, 0xc0, 0x20, 0x32, 0x36, 0xd7, 0x6c, 0x15, 0x95, 0x96, 0x5c, 0x16, + 0x13, 0x68, 0x0d, 0x04, 0x3e, 0x57, 0x93, 0xcb, 0xfc, 0x61, 0xc8, 0xbc, 0x4d, 0x3c, 0x0c, 0xdf, + 0x82, 0xf5, 0x62, 0xab, 0x25, 0x3f, 0x6a, 0xb4, 0xd4, 0xfd, 0x62, 0xb5, 0xd6, 0x56, 0x64, 0x51, + 0x90, 0x2a, 0x90, 0x0c, 0x76, 0x80, 0xd6, 0x21, 0x35, 0x19, 0xe7, 0x1a, 0x08, 0xcd, 0xf6, 0xde, + 0xa3, 0x6a, 0x8b, 0x2e, 0x12, 0x42, 0x00, 0xf1, 0xc7, 0x6d, 0xb9, 0x2d, 0x97, 0xc5, 0x30, 0x12, + 0x61, 0xb5, 0xd9, 0x2a, 0xd6, 0x64, 0x1a, 0x43, 0xab, 0xdd, 0x14, 0x23, 0x52, 0x99, 0x91, 0x48, + 0xc1, 0x47, 0xd8, 0xc1, 0x66, 0x17, 0xa3, 0xf7, 0xd8, 0x45, 0x3d, 0xc1, 0x5d, 0x57, 0xd5, 0x7b, + 0x3e, 0x85, 0x04, 0x7f, 0xa6, 0xda, 0x43, 0x37, 0x21, 0x7e, 0x62, 0x75, 0xd4, 0x11, 0x75, 0x62, + 0x27, 0x56, 0xa7, 0xda, 0x93, 0xfe, 0x10, 0x86, 0xf5, 0x1f, 0x69, 0x8e, 0x59, 0xb4, 0x6d, 0x43, + 0xef, 0xb2, 0x5f, 0x21, 0x68, 0xef, 0x3b, 0x46, 0x43, 0x36, 0x46, 0x72, 0x40, 0x27, 0xfe, 0x18, + 0xcf, 0xcf, 0x86, 0x6a, 0xca, 0xdb, 0x24, 0xa9, 0xb2, 0x90, 0xb4, 0x1d, 0xab, 0xef, 0x60, 0x42, + 0x58, 0x52, 0x0b, 0x2b, 0xa3, 0x6f, 0x4a, 0x71, 0xd7, 0xd1, 0xba, 0xa7, 0xf4, 0xd2, 0x7b, 0x8e, + 0x91, 0x89, 0x72, 0x8a, 0x07, 0x73, 0x6d, 0xc7, 0x90, 0x7e, 0xb6, 0x08, 0xe9, 0x04, 0x44, 0xea, + 0xf2, 0x53, 0x8e, 0x72, 0x5d, 0x7e, 0xaa, 0x36, 0x8b, 0x4f, 0x38, 0xb0, 0x13, 0x47, 0x1b, 0x41, + 0xab, 0x90, 0x2c, 0x96, 0x4a, 0x72, 0xa3, 0xc5, 0xe0, 0x1b, 0xa3, 0x40, 0x8c, 0x8a, 0xf6, 0xab, + 0xf5, 0x6a, 0xb3, 0x22, 0x97, 0xc5, 0x38, 0xc5, 0x80, 0x82, 0xc7, 0x40, 0x07, 0x88, 0x7f, 0x56, + 0x65, 0x88, 0x27, 0xa5, 0x7f, 0x24, 0x21, 0x42, 0xcb, 0x43, 0x19, 0x04, 0x27, 0x80, 0x80, 0x1d, + 0x58, 0xaa, 0x70, 0x7b, 0x2e, 0x8d, 0x47, 0x80, 0x29, 0x17, 0x86, 0xd4, 0x8b, 0x1d, 0x64, 0x03, + 0xbf, 0x76, 0xcc, 0xf7, 0x32, 0xca, 0x1d, 0xca, 0x85, 0x21, 0x2d, 0x41, 0xc7, 0xec, 0xd5, 0xad, + 0x9e, 0x58, 0x1d, 0x76, 0xbc, 0x73, 0x4b, 0xd0, 0xe8, 0x85, 0x4e, 0x4b, 0xd0, 0xf1, 0xe8, 0xd7, + 0x8a, 0x22, 0x08, 0x84, 0x36, 0x0a, 0xcc, 0x49, 0x94, 0x39, 0x91, 0x16, 0xbf, 0x12, 0x2b, 0x2b, + 0x4a, 0x92, 0x04, 0xaf, 0xad, 0x87, 0x90, 0xb2, 0x87, 0x17, 0x4e, 0x62, 0xcc, 0xc9, 0xff, 0x2f, + 0xf3, 0x36, 0xa9, 0xac, 0x28, 0xe0, 0x9b, 0x52, 0x47, 0x3f, 0x84, 0x24, 0x7b, 0x03, 0x51, 0x2f, + 0x3c, 0xc3, 0x7c, 0xb0, 0xb0, 0x91, 0xad, 0xac, 0x28, 0x89, 0x63, 0xff, 0x2d, 0xb0, 0x0b, 0x09, + 0x5b, 0xef, 0x33, 0x73, 0x5e, 0x3f, 0x36, 0x17, 0x55, 0xae, 0xca, 0x8a, 0x12, 0xb7, 0x79, 0xe5, + 0xff, 0x0c, 0xd6, 0xf8, 0x1e, 0xc8, 0x99, 0xc1, 0x5c, 0xac, 0x32, 0x17, 0x1f, 0x2e, 0xd5, 0x60, + 0x55, 0x56, 0x94, 0x14, 0x19, 0xeb, 0x3f, 0x77, 0x21, 0x4e, 0x58, 0x02, 0xf3, 0xdf, 0x53, 0xb7, + 0x96, 0xc8, 0x75, 0x8a, 0x6f, 0x82, 0x0e, 0x20, 0xcd, 0x47, 0xea, 0xb1, 0x4e, 0x5c, 0xcb, 0x19, + 0x66, 0xd6, 0x58, 0x1d, 0x5e, 0xca, 0xc9, 0x1a, 0x37, 0xad, 0x70, 0x4b, 0xf4, 0x04, 0x36, 0x86, + 0x9a, 0x63, 0xaa, 0xda, 0xc5, 0x15, 0x25, 0x19, 0x81, 0xb9, 0xbb, 0xb3, 0xf4, 0xa5, 0x56, 0xc4, + 0xe1, 0xe4, 0x04, 0x41, 0xbb, 0x90, 0xf5, 0x7f, 0x41, 0xb4, 0x3c, 0xd7, 0xf6, 0x5c, 0xd5, 0xc1, + 0xc4, 0xf2, 0x9c, 0x2e, 0xef, 0x99, 0x36, 0xd8, 0x5d, 0xfe, 0x3f, 0xae, 0x71, 0xc8, 0x14, 0x14, + 0x5f, 0x4e, 0x9b, 0xa7, 0x8f, 0x21, 0xe3, 0x1b, 0xd3, 0x16, 0xc7, 0xb1, 0x0c, 0xd6, 0x1d, 0x10, + 0x66, 0xba, 0xce, 0x4c, 0x6f, 0x72, 0x79, 0x89, 0x8b, 0x69, 0x9f, 0x40, 0xa8, 0x61, 0x11, 0xe2, + 0x86, 0xd6, 0xc1, 0x06, 0xc9, 0xa0, 0x45, 0x5b, 0xa0, 0x6d, 0x49, 0x8d, 0xe9, 0xf2, 0x96, 0xc4, + 0x37, 0x44, 0x0f, 0x01, 0x48, 0xf7, 0x18, 0xf7, 0x3c, 0x43, 0x37, 0xfb, 0x99, 0x1b, 0x8b, 0xda, + 0x0c, 0x7a, 0xb0, 0x23, 0x75, 0x65, 0xcc, 0x34, 0xfb, 0x09, 0xa4, 0xc6, 0xfc, 0x5f, 0xab, 0x37, + 0x00, 0x48, 0xba, 0x43, 0x9b, 0xf1, 0x5c, 0xda, 0x83, 0xb5, 0x89, 0x35, 0xd0, 0x36, 0xdc, 0x1c, + 0x68, 0xcf, 0x83, 0x5e, 0x90, 0xa8, 0x36, 0x76, 0xd4, 0x63, 0xcb, 0x73, 0x98, 0xeb, 0x98, 0x82, + 0x06, 0xda, 0x73, 0xbf, 0x1d, 0x24, 0x0d, 0xec, 0x54, 0x2c, 0xcf, 0x91, 0x5e, 0x80, 0xd8, 0xf4, + 0x3a, 0x03, 0xdd, 0x65, 0x09, 0xe7, 0xcc, 0xc3, 0xc4, 0x5d, 0x54, 0x1f, 0xde, 0x86, 0xb8, 0x83, + 0xfb, 0xba, 0x65, 0xb2, 0xc4, 0x21, 0x28, 0xfe, 0x17, 0xca, 0x43, 0x84, 0x72, 0x9f, 0x27, 0xa5, + 0xf7, 0xe6, 0xa7, 0x36, 0xaa, 0x29, 0xfd, 0x04, 0xd6, 0x1e, 0xe2, 0xff, 0xc2, 0xc2, 0x33, 0x0a, + 0xd6, 0xe7, 0x61, 0x58, 0xa7, 0xad, 0xf2, 0x81, 0xd5, 0x21, 0xd7, 0x5e, 0x21, 0x3e, 0xb1, 0xc2, + 0x3b, 0x20, 0xd8, 0x5a, 0x1f, 0xab, 0x44, 0x7f, 0xc1, 0x31, 0x89, 0x29, 0x49, 0x3a, 0xd1, 0xd4, + 0x5f, 0xf0, 0x72, 0x4a, 0x85, 0xae, 0x75, 0x8a, 0x83, 0xd0, 0x98, 0x7a, 0x8b, 0x4e, 0x5c, 0x6a, + 0xd9, 0xa2, 0x97, 0x5b, 0x36, 0x0c, 0x1b, 0x74, 0x03, 0xbc, 0x55, 0x1a, 0x68, 0x6e, 0xf7, 0x18, + 0x3b, 0x2c, 0x17, 0xa6, 0x0b, 0x9f, 0xcc, 0x69, 0x63, 0x27, 0xf7, 0x16, 0x5c, 0x64, 0xfc, 0x88, + 0x3b, 0x50, 0xd6, 0x4f, 0x26, 0x27, 0xe8, 0xee, 0x8e, 0x74, 0xc3, 0xc5, 0x0e, 0x4b, 0x71, 0x82, + 0xe2, 0x7f, 0x49, 0xf7, 0x60, 0x7d, 0xca, 0x36, 0xf8, 0xa1, 0x7b, 0x85, 0x56, 0xb2, 0x62, 0xa9, + 0x55, 0x7d, 0x22, 0xfb, 0x95, 0xf2, 0xb0, 0xae, 0xfa, 0xdf, 0x61, 0xe9, 0x6f, 0x21, 0x10, 0xdb, + 0x76, 0x4f, 0x73, 0xf1, 0xeb, 0x60, 0x18, 0x9e, 0x81, 0x61, 0x64, 0x0c, 0xc3, 0x80, 0x53, 0xd1, + 0x65, 0x39, 0x85, 0x76, 0x21, 0xe5, 0xb1, 0x90, 0xd8, 0xbf, 0x39, 0xfc, 0x82, 0x72, 0xb9, 0xd9, + 0xdc, 0xd7, 0xb1, 0xd1, 0x7b, 0xa4, 0x91, 0x53, 0x05, 0xb8, 0x3a, 0x1d, 0x4b, 0x03, 0x10, 0x2f, + 0x0e, 0x95, 0xd8, 0x96, 0x49, 0x30, 0xda, 0x86, 0xe8, 0x89, 0xd5, 0xe1, 0xbf, 0x23, 0x2d, 0x0c, + 0x81, 0xa9, 0xa2, 0xdb, 0xb0, 0x6e, 0xe2, 0xe7, 0xae, 0x3a, 0xc6, 0x0a, 0xbe, 0xd9, 0x35, 0x3a, + 0xdd, 0x08, 0x98, 0x21, 0x3d, 0x03, 0xb1, 0xa4, 0x99, 0x5d, 0x6c, 0xfc, 0xcf, 0xae, 0xc0, 0x33, + 0x10, 0xcb, 0xd8, 0xc0, 0xaf, 0x07, 0xd0, 0x32, 0x2b, 0x14, 0xfe, 0x98, 0x60, 0x49, 0xc8, 0xcf, + 0xb6, 0x06, 0x76, 0xd0, 0xaf, 0x43, 0x20, 0x8c, 0x52, 0x0a, 0xba, 0x3b, 0xa7, 0x06, 0x4e, 0xe5, + 0x9d, 0xec, 0xfc, 0xc3, 0x95, 0x8a, 0x3f, 0xfd, 0xfb, 0xbf, 0x7e, 0x15, 0xde, 0x95, 0xee, 0xe5, + 0xcf, 0xb7, 0xf3, 0x7e, 0xc0, 0x24, 0xff, 0xf2, 0x62, 0x33, 0xaf, 0xf2, 0x3c, 0x56, 0x92, 0x7f, + 0xc9, 0x07, 0xaf, 0xd8, 0xbf, 0xd8, 0x76, 0x08, 0x5b, 0x68, 0x27, 0x74, 0x17, 0xfd, 0x32, 0x04, + 0x71, 0x9e, 0x72, 0xd0, 0x9c, 0xc4, 0x3d, 0x91, 0x94, 0x16, 0x45, 0xf5, 0x29, 0x8b, 0x6a, 0x07, + 0xdd, 0xbf, 0x66, 0x54, 0xf9, 0x97, 0xfc, 0x38, 0x5f, 0xa1, 0xdf, 0x84, 0x20, 0x19, 0xd0, 0x0e, + 0xdd, 0x59, 0xfa, 0xbe, 0x67, 0xef, 0x2e, 0xa3, 0xca, 0x59, 0x2c, 0x7d, 0xcc, 0xa2, 0xdc, 0x46, + 0xf9, 0x6b, 0x46, 0x89, 0x7e, 0x1b, 0x02, 0x61, 0x74, 0xc7, 0xe7, 0xa1, 0x39, 0x9d, 0x08, 0x16, + 0x9d, 0x9b, 0xcc, 0x22, 0x7a, 0x50, 0x78, 0xed, 0x73, 0xdb, 0x61, 0xf7, 0xfd, 0x77, 0x21, 0x10, + 0x46, 0x97, 0x68, 0x5e, 0x7c, 0xd3, 0x37, 0x6d, 0x51, 0x7c, 0x07, 0x2c, 0xbe, 0xb2, 0xf4, 0xe0, + 0xb5, 0xe3, 0xeb, 0xb2, 0x15, 0x29, 0xed, 0x7e, 0x11, 0x02, 0x61, 0x74, 0x0f, 0xe7, 0x05, 0x39, + 0x7d, 0x59, 0xb3, 0x6f, 0x5f, 0xca, 0x5c, 0xf2, 0xc0, 0x76, 0x87, 0x01, 0xeb, 0xee, 0xbe, 0xf6, + 0xe9, 0xed, 0x0d, 0xe0, 0xdd, 0xae, 0x35, 0x98, 0x19, 0xca, 0x9e, 0x40, 0xf9, 0xd3, 0xa0, 0xab, + 0x36, 0x42, 0x3f, 0xfe, 0xd4, 0x57, 0xeb, 0x5b, 0x86, 0x66, 0xf6, 0x73, 0x96, 0xd3, 0xcf, 0xf7, + 0xb1, 0xc9, 0x62, 0xca, 0x73, 0x91, 0x66, 0xeb, 0xe4, 0xf2, 0xbf, 0xb8, 0x77, 0x83, 0x71, 0x27, + 0xce, 0x94, 0x3f, 0xfa, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x02, 0xa8, 0x72, 0x7c, 0x0e, 0x1f, + 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1/operations.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1/operations.pb.go index f29c49a..ecdbdeb 100644 --- a/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1/operations.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1/operations.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/cloud/dataproc/v1/operations.proto -// DO NOT EDIT! package dataproc @@ -53,13 +52,13 @@ func (ClusterOperationStatus_State) EnumDescriptor() ([]byte, []int) { // The status of the operation. type ClusterOperationStatus struct { - // [Output-only] A message containing the operation state. + // Output-only. A message containing the operation state. State ClusterOperationStatus_State `protobuf:"varint,1,opt,name=state,enum=google.cloud.dataproc.v1.ClusterOperationStatus_State" json:"state,omitempty"` - // [Output-only] A message containing the detailed operation state. + // Output-only. A message containing the detailed operation state. InnerState string `protobuf:"bytes,2,opt,name=inner_state,json=innerState" json:"inner_state,omitempty"` - // [Output-only]A message containing any operation metadata details. + // Output-only.A message containing any operation metadata details. Details string `protobuf:"bytes,3,opt,name=details" json:"details,omitempty"` - // [Output-only] The time this state was entered. + // Output-only. The time this state was entered. StateStartTime *google_protobuf3.Timestamp `protobuf:"bytes,4,opt,name=state_start_time,json=stateStartTime" json:"state_start_time,omitempty"` } @@ -98,18 +97,22 @@ func (m *ClusterOperationStatus) GetStateStartTime() *google_protobuf3.Timestamp // Metadata describing the operation. type ClusterOperationMetadata struct { - // [Output-only] Name of the cluster for the operation. + // Output-only. Name of the cluster for the operation. ClusterName string `protobuf:"bytes,7,opt,name=cluster_name,json=clusterName" json:"cluster_name,omitempty"` - // [Output-only] Cluster UUID for the operation. + // Output-only. Cluster UUID for the operation. ClusterUuid string `protobuf:"bytes,8,opt,name=cluster_uuid,json=clusterUuid" json:"cluster_uuid,omitempty"` - // [Output-only] Current operation status. + // Output-only. Current operation status. Status *ClusterOperationStatus `protobuf:"bytes,9,opt,name=status" json:"status,omitempty"` - // [Output-only] The previous operation status. + // Output-only. The previous operation status. StatusHistory []*ClusterOperationStatus `protobuf:"bytes,10,rep,name=status_history,json=statusHistory" json:"status_history,omitempty"` - // [Output-only] The operation type. + // Output-only. The operation type. OperationType string `protobuf:"bytes,11,opt,name=operation_type,json=operationType" json:"operation_type,omitempty"` - // [Output-only] Short description of operation. + // Output-only. Short description of operation. Description string `protobuf:"bytes,12,opt,name=description" json:"description,omitempty"` + // Output-only. Labels associated with the operation + Labels map[string]string `protobuf:"bytes,13,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Output-only. Errors encountered during operation execution. + Warnings []string `protobuf:"bytes,14,rep,name=warnings" json:"warnings,omitempty"` } func (m *ClusterOperationMetadata) Reset() { *m = ClusterOperationMetadata{} } @@ -159,6 +162,20 @@ func (m *ClusterOperationMetadata) GetDescription() string { return "" } +func (m *ClusterOperationMetadata) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +func (m *ClusterOperationMetadata) GetWarnings() []string { + if m != nil { + return m.Warnings + } + return nil +} + func init() { proto.RegisterType((*ClusterOperationStatus)(nil), "google.cloud.dataproc.v1.ClusterOperationStatus") proto.RegisterType((*ClusterOperationMetadata)(nil), "google.cloud.dataproc.v1.ClusterOperationMetadata") @@ -168,35 +185,40 @@ func init() { func init() { proto.RegisterFile("google/cloud/dataproc/v1/operations.proto", fileDescriptor2) } var fileDescriptor2 = []byte{ - // 479 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x53, 0x4f, 0x6f, 0xd3, 0x30, - 0x14, 0x27, 0xed, 0xb6, 0x6e, 0xce, 0x56, 0x2a, 0x1f, 0x90, 0x55, 0x26, 0x2d, 0x14, 0x21, 0x95, - 0x4b, 0xc2, 0x86, 0x84, 0x90, 0xb8, 0xa0, 0xd1, 0x89, 0x21, 0xc0, 0xad, 0xb2, 0x55, 0x93, 0xb8, - 0x44, 0x5e, 0x62, 0x82, 0xa5, 0xc4, 0xb6, 0x6c, 0x67, 0x52, 0x3f, 0x0e, 0xdf, 0x87, 0x0f, 0x85, - 0x6c, 0x27, 0x55, 0xd9, 0xe8, 0x01, 0x4e, 0xf1, 0x7b, 0xbf, 0x3f, 0x79, 0xbf, 0xe7, 0x04, 0xbc, - 0x2c, 0x85, 0x28, 0x2b, 0x9a, 0xe4, 0x95, 0x68, 0x8a, 0xa4, 0x20, 0x86, 0x48, 0x25, 0xf2, 0xe4, - 0xee, 0x34, 0x11, 0x92, 0x2a, 0x62, 0x98, 0xe0, 0x3a, 0x96, 0x4a, 0x18, 0x01, 0x91, 0xa7, 0xc6, - 0x8e, 0x1a, 0x77, 0xd4, 0xf8, 0xee, 0x74, 0x7c, 0xdc, 0x9a, 0x10, 0xc9, 0x12, 0xc2, 0xb9, 0x30, - 0x9b, 0xba, 0xf1, 0xf3, 0x16, 0xad, 0x04, 0x2f, 0x55, 0xc3, 0x39, 0xe3, 0xe5, 0x03, 0xf3, 0xf1, - 0xd3, 0x96, 0xe4, 0xaa, 0xdb, 0xe6, 0x7b, 0x42, 0x6b, 0x69, 0x56, 0x2d, 0x78, 0x72, 0x1f, 0x34, - 0xac, 0xa6, 0xda, 0x90, 0x5a, 0x7a, 0xc2, 0xe4, 0x67, 0x0f, 0x3c, 0xf9, 0x50, 0x35, 0xda, 0x50, - 0x35, 0xef, 0x9c, 0xaf, 0x0c, 0x31, 0x8d, 0x86, 0x5f, 0xc0, 0xae, 0x36, 0xc4, 0x50, 0x14, 0x44, - 0xc1, 0x74, 0x78, 0xf6, 0x26, 0xde, 0x96, 0x22, 0xfe, 0xbb, 0x41, 0x6c, 0x1f, 0x34, 0xf5, 0x26, - 0xf0, 0x04, 0x84, 0x8c, 0x73, 0xaa, 0x32, 0xef, 0xd9, 0x8b, 0x82, 0xe9, 0x41, 0x0a, 0x5c, 0xcb, - 0xf1, 0x20, 0x02, 0x83, 0x82, 0x1a, 0xc2, 0x2a, 0x8d, 0xfa, 0x0e, 0xec, 0x4a, 0x38, 0x03, 0x23, - 0x27, 0xb2, 0x52, 0x65, 0x32, 0x1b, 0x01, 0xed, 0x44, 0xc1, 0x34, 0x3c, 0x1b, 0x77, 0x33, 0x75, - 0xf9, 0xe2, 0xeb, 0x2e, 0x5f, 0x3a, 0x74, 0x9a, 0x2b, 0x2b, 0xb1, 0xcd, 0xc9, 0x5b, 0xb0, 0xeb, - 0x5f, 0x14, 0x82, 0xc1, 0x12, 0x7f, 0xc6, 0xf3, 0x1b, 0x3c, 0x7a, 0x64, 0x8b, 0xc5, 0x05, 0x9e, - 0x7d, 0xc2, 0x1f, 0x47, 0x81, 0x2d, 0xd2, 0x25, 0xc6, 0xb6, 0xe8, 0xc1, 0x7d, 0xb0, 0x33, 0x9b, - 0xe3, 0x8b, 0x51, 0x7f, 0xf2, 0xab, 0x07, 0xd0, 0xfd, 0x88, 0x5f, 0xa9, 0x21, 0x76, 0x05, 0xf0, - 0x19, 0x38, 0xcc, 0x3d, 0x96, 0x71, 0x52, 0x53, 0x34, 0x70, 0xb3, 0x87, 0x6d, 0x0f, 0x93, 0x9a, - 0x6e, 0x52, 0x9a, 0x86, 0x15, 0x68, 0xff, 0x0f, 0xca, 0xb2, 0x61, 0x05, 0xbc, 0x04, 0x7b, 0xda, - 0x2d, 0x0d, 0x1d, 0xb8, 0x60, 0xaf, 0xfe, 0x75, 0xd9, 0x69, 0xab, 0x87, 0x37, 0x60, 0xe8, 0x4f, - 0xd9, 0x0f, 0xa6, 0x8d, 0x50, 0x2b, 0x04, 0xa2, 0xfe, 0x7f, 0x39, 0x1e, 0x79, 0x9f, 0x4b, 0x6f, - 0x03, 0x5f, 0x80, 0xe1, 0xfa, 0xdb, 0xcb, 0xcc, 0x4a, 0x52, 0x14, 0xba, 0x1c, 0x47, 0xeb, 0xee, - 0xf5, 0x4a, 0x52, 0x18, 0x81, 0xb0, 0xa0, 0x3a, 0x57, 0x4c, 0xda, 0x16, 0x3a, 0xf4, 0x59, 0x37, - 0x5a, 0xe7, 0x1a, 0x1c, 0xe7, 0xa2, 0xde, 0x3a, 0xce, 0xf9, 0xe3, 0xf5, 0x20, 0x7a, 0x61, 0xaf, - 0x75, 0x11, 0x7c, 0x7b, 0xdf, 0x92, 0x4b, 0x51, 0x11, 0x5e, 0xc6, 0x42, 0x95, 0x49, 0x49, 0xb9, - 0xbb, 0xf4, 0xc4, 0x43, 0x44, 0x32, 0xfd, 0xf0, 0x57, 0x7c, 0xd7, 0x9d, 0x6f, 0xf7, 0x1c, 0xf9, - 0xf5, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x2c, 0x8c, 0x74, 0x3e, 0xb6, 0x03, 0x00, 0x00, + // 553 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0x61, 0x6b, 0xd3, 0x40, + 0x18, 0x36, 0xcd, 0xb6, 0xb6, 0x97, 0xb5, 0x96, 0x43, 0xe4, 0x88, 0x83, 0xc5, 0x8a, 0x50, 0xbf, + 0x24, 0x6e, 0x82, 0x4c, 0x05, 0x91, 0xd9, 0xe2, 0xc4, 0x99, 0x96, 0x6c, 0x75, 0xe0, 0x97, 0x72, + 0x6d, 0xce, 0x18, 0x4c, 0xee, 0xc2, 0xdd, 0xa5, 0x92, 0x9f, 0xe3, 0xef, 0xf4, 0x8b, 0xdc, 0x5d, + 0x52, 0xea, 0xe6, 0x40, 0xfd, 0xd4, 0x7b, 0xde, 0xf7, 0x79, 0x9e, 0xbe, 0xcf, 0xcb, 0xdb, 0x82, + 0x27, 0x09, 0x63, 0x49, 0x46, 0x82, 0x55, 0xc6, 0xca, 0x38, 0x88, 0xb1, 0xc4, 0x05, 0x67, 0xab, + 0x60, 0x7d, 0x14, 0xb0, 0x82, 0x70, 0x2c, 0x53, 0x46, 0x85, 0x5f, 0x70, 0x26, 0x19, 0x44, 0x86, + 0xea, 0x6b, 0xaa, 0xdf, 0x50, 0xfd, 0xf5, 0x91, 0x7b, 0x50, 0x9b, 0xe0, 0x22, 0x0d, 0x30, 0xa5, + 0x4c, 0x6e, 0xeb, 0xdc, 0x47, 0x75, 0x37, 0x63, 0x34, 0xe1, 0x25, 0xa5, 0x29, 0x4d, 0x6e, 0x98, + 0xbb, 0x0f, 0x6a, 0x92, 0x46, 0xcb, 0xf2, 0x4b, 0x40, 0xf2, 0x42, 0x56, 0x75, 0xf3, 0xf0, 0x7a, + 0x53, 0xa6, 0x39, 0x11, 0x12, 0xe7, 0x85, 0x21, 0x0c, 0x7f, 0xb4, 0xc0, 0xfd, 0xb7, 0x59, 0x29, + 0x24, 0xe1, 0xd3, 0xc6, 0xf9, 0x42, 0x62, 0x59, 0x0a, 0x78, 0x0e, 0x76, 0x85, 0xc4, 0x92, 0x20, + 0xcb, 0xb3, 0x46, 0xfd, 0xe3, 0xe7, 0xfe, 0x6d, 0x29, 0xfc, 0x3f, 0x1b, 0xf8, 0xea, 0x83, 0x44, + 0xc6, 0x04, 0x1e, 0x02, 0x27, 0xa5, 0x94, 0xf0, 0x85, 0xf1, 0x6c, 0x79, 0xd6, 0xa8, 0x1b, 0x01, + 0x5d, 0xd2, 0x3c, 0x88, 0x40, 0x3b, 0x26, 0x12, 0xa7, 0x99, 0x40, 0xb6, 0x6e, 0x36, 0x10, 0x8e, + 0xc1, 0x40, 0x8b, 0x94, 0x94, 0xcb, 0x85, 0x8a, 0x80, 0x76, 0x3c, 0x6b, 0xe4, 0x1c, 0xbb, 0xcd, + 0x4c, 0x4d, 0x3e, 0xff, 0xb2, 0xc9, 0x17, 0xf5, 0xb5, 0xe6, 0x42, 0x49, 0x54, 0x71, 0x78, 0x02, + 0x76, 0xcd, 0x17, 0x39, 0xa0, 0x3d, 0x0f, 0x3f, 0x84, 0xd3, 0xab, 0x70, 0x70, 0x47, 0x81, 0xd9, + 0x24, 0x1c, 0xbf, 0x0f, 0xdf, 0x0d, 0x2c, 0x05, 0xa2, 0x79, 0x18, 0x2a, 0xd0, 0x82, 0x1d, 0xb0, + 0x33, 0x9e, 0x86, 0x93, 0x81, 0x3d, 0xfc, 0x69, 0x03, 0x74, 0x3d, 0xe2, 0x47, 0x22, 0xb1, 0x5a, + 0x01, 0x7c, 0x08, 0xf6, 0x57, 0xa6, 0xb7, 0xa0, 0x38, 0x27, 0xa8, 0xad, 0x67, 0x77, 0xea, 0x5a, + 0x88, 0x73, 0xb2, 0x4d, 0x29, 0xcb, 0x34, 0x46, 0x9d, 0xdf, 0x28, 0xf3, 0x32, 0x8d, 0xe1, 0x19, + 0xd8, 0x13, 0x7a, 0x69, 0xa8, 0xab, 0x83, 0x3d, 0xfd, 0xd7, 0x65, 0x47, 0xb5, 0x1e, 0x5e, 0x81, + 0xbe, 0x79, 0x2d, 0xbe, 0xa6, 0x42, 0x32, 0x5e, 0x21, 0xe0, 0xd9, 0xff, 0xe5, 0xd8, 0x33, 0x3e, + 0x67, 0xc6, 0x06, 0x3e, 0x06, 0xfd, 0xcd, 0xed, 0x2d, 0x64, 0x55, 0x10, 0xe4, 0xe8, 0x1c, 0xbd, + 0x4d, 0xf5, 0xb2, 0x2a, 0x08, 0xf4, 0x80, 0x13, 0x13, 0xb1, 0xe2, 0x69, 0xa1, 0x4a, 0x68, 0xdf, + 0x64, 0xdd, 0x2a, 0xc1, 0x4f, 0x60, 0x2f, 0xc3, 0x4b, 0x92, 0x09, 0xd4, 0xd3, 0x93, 0xbd, 0xfe, + 0xfb, 0xc9, 0x9a, 0xad, 0xfb, 0xe7, 0xda, 0x60, 0x42, 0x25, 0xaf, 0xa2, 0xda, 0x0d, 0xba, 0xa0, + 0xf3, 0x1d, 0x73, 0xf5, 0x23, 0x11, 0xa8, 0xef, 0xd9, 0xa3, 0x6e, 0xb4, 0xc1, 0xee, 0x0b, 0xe0, + 0x6c, 0x49, 0xe0, 0x00, 0xd8, 0xdf, 0x48, 0xa5, 0x0f, 0xbb, 0x1b, 0xa9, 0x27, 0xbc, 0x07, 0x76, + 0xd7, 0x38, 0x2b, 0x9b, 0xc3, 0x34, 0xe0, 0x65, 0xeb, 0xc4, 0x3a, 0x15, 0xe0, 0x60, 0xc5, 0xf2, + 0x5b, 0x67, 0x3c, 0xbd, 0xbb, 0x99, 0x4e, 0xcc, 0xd4, 0x15, 0xce, 0xac, 0xcf, 0x6f, 0x6a, 0x72, + 0xc2, 0x32, 0x4c, 0x13, 0x9f, 0xf1, 0x24, 0x48, 0x08, 0xd5, 0x37, 0x1a, 0x98, 0x16, 0x2e, 0x52, + 0x71, 0xf3, 0x9f, 0xe3, 0x55, 0xf3, 0x5e, 0xee, 0x69, 0xf2, 0xb3, 0x5f, 0x01, 0x00, 0x00, 0xff, + 0xff, 0x09, 0x4c, 0x3d, 0x35, 0x65, 0x04, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1beta2/clusters.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1beta2/clusters.pb.go new file mode 100644 index 0000000..0ba92da --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1beta2/clusters.pb.go @@ -0,0 +1,1775 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/dataproc/v1beta2/clusters.proto + +/* +Package dataproc is a generated protocol buffer package. + +It is generated from these files: + google/cloud/dataproc/v1beta2/clusters.proto + google/cloud/dataproc/v1beta2/jobs.proto + google/cloud/dataproc/v1beta2/operations.proto + google/cloud/dataproc/v1beta2/workflow_templates.proto + +It has these top-level messages: + Cluster + ClusterConfig + GceClusterConfig + InstanceGroupConfig + ManagedGroupConfig + AcceleratorConfig + DiskConfig + LifecycleConfig + NodeInitializationAction + ClusterStatus + SoftwareConfig + ClusterMetrics + CreateClusterRequest + UpdateClusterRequest + DeleteClusterRequest + GetClusterRequest + ListClustersRequest + ListClustersResponse + DiagnoseClusterRequest + DiagnoseClusterResults + LoggingConfig + HadoopJob + SparkJob + PySparkJob + QueryList + HiveJob + SparkSqlJob + PigJob + JobPlacement + JobStatus + JobReference + YarnApplication + Job + JobScheduling + SubmitJobRequest + GetJobRequest + ListJobsRequest + UpdateJobRequest + ListJobsResponse + CancelJobRequest + DeleteJobRequest + ClusterOperationStatus + ClusterOperationMetadata + WorkflowTemplate + WorkflowTemplatePlacement + ManagedCluster + ClusterSelector + OrderedJob + WorkflowMetadata + ClusterOperation + WorkflowGraph + WorkflowNode + CreateWorkflowTemplateRequest + GetWorkflowTemplateRequest + InstantiateWorkflowTemplateRequest + UpdateWorkflowTemplateRequest + ListWorkflowTemplatesRequest + ListWorkflowTemplatesResponse + DeleteWorkflowTemplateRequest +*/ +package dataproc + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import google_protobuf3 "github.com/golang/protobuf/ptypes/duration" +import google_protobuf4 "google.golang.org/genproto/protobuf/field_mask" +import google_protobuf5 "github.com/golang/protobuf/ptypes/timestamp" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// The cluster state. +type ClusterStatus_State int32 + +const ( + // The cluster state is unknown. + ClusterStatus_UNKNOWN ClusterStatus_State = 0 + // The cluster is being created and set up. It is not ready for use. + ClusterStatus_CREATING ClusterStatus_State = 1 + // The cluster is currently running and healthy. It is ready for use. + ClusterStatus_RUNNING ClusterStatus_State = 2 + // The cluster encountered an error. It is not ready for use. + ClusterStatus_ERROR ClusterStatus_State = 3 + // The cluster is being deleted. It cannot be used. + ClusterStatus_DELETING ClusterStatus_State = 4 + // The cluster is being updated. It continues to accept and process jobs. + ClusterStatus_UPDATING ClusterStatus_State = 5 +) + +var ClusterStatus_State_name = map[int32]string{ + 0: "UNKNOWN", + 1: "CREATING", + 2: "RUNNING", + 3: "ERROR", + 4: "DELETING", + 5: "UPDATING", +} +var ClusterStatus_State_value = map[string]int32{ + "UNKNOWN": 0, + "CREATING": 1, + "RUNNING": 2, + "ERROR": 3, + "DELETING": 4, + "UPDATING": 5, +} + +func (x ClusterStatus_State) String() string { + return proto.EnumName(ClusterStatus_State_name, int32(x)) +} +func (ClusterStatus_State) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{9, 0} } + +type ClusterStatus_Substate int32 + +const ( + ClusterStatus_UNSPECIFIED ClusterStatus_Substate = 0 + // The cluster is known to be in an unhealthy state + // (for example, critical daemons are not running or HDFS capacity is + // exhausted). + // + // Applies to RUNNING state. + ClusterStatus_UNHEALTHY ClusterStatus_Substate = 1 + // The agent-reported status is out of date (may occur if + // Cloud Dataproc loses communication with Agent). + // + // Applies to RUNNING state. + ClusterStatus_STALE_STATUS ClusterStatus_Substate = 2 +) + +var ClusterStatus_Substate_name = map[int32]string{ + 0: "UNSPECIFIED", + 1: "UNHEALTHY", + 2: "STALE_STATUS", +} +var ClusterStatus_Substate_value = map[string]int32{ + "UNSPECIFIED": 0, + "UNHEALTHY": 1, + "STALE_STATUS": 2, +} + +func (x ClusterStatus_Substate) String() string { + return proto.EnumName(ClusterStatus_Substate_name, int32(x)) +} +func (ClusterStatus_Substate) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{9, 1} } + +// Describes the identifying information, config, and status of +// a cluster of Google Compute Engine instances. +type Cluster struct { + // Required. The Google Cloud Platform project ID that the cluster belongs to. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Required. The cluster name. Cluster names within a project must be + // unique. Names of deleted clusters can be reused. + ClusterName string `protobuf:"bytes,2,opt,name=cluster_name,json=clusterName" json:"cluster_name,omitempty"` + // Required. The cluster config. Note that Cloud Dataproc may set + // default values, and values may change when clusters are updated. + Config *ClusterConfig `protobuf:"bytes,3,opt,name=config" json:"config,omitempty"` + // Optional. The labels to associate with this cluster. + // Label **keys** must contain 1 to 63 characters, and must conform to + // [RFC 1035](https://www.ietf.org/rfc/rfc1035.txt). + // Label **values** may be empty, but, if present, must contain 1 to 63 + // characters, and must conform to [RFC 1035](https://www.ietf.org/rfc/rfc1035.txt). + // No more than 32 labels can be associated with a cluster. + Labels map[string]string `protobuf:"bytes,8,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Output-only. Cluster status. + Status *ClusterStatus `protobuf:"bytes,4,opt,name=status" json:"status,omitempty"` + // Output-only. The previous cluster status. + StatusHistory []*ClusterStatus `protobuf:"bytes,7,rep,name=status_history,json=statusHistory" json:"status_history,omitempty"` + // Output-only. A cluster UUID (Unique Universal Identifier). Cloud Dataproc + // generates this value when it creates the cluster. + ClusterUuid string `protobuf:"bytes,6,opt,name=cluster_uuid,json=clusterUuid" json:"cluster_uuid,omitempty"` + // Contains cluster daemon metrics such as HDFS and YARN stats. + // + // **Beta Feature**: This report is available for testing purposes only. It may + // be changed before final release. + Metrics *ClusterMetrics `protobuf:"bytes,9,opt,name=metrics" json:"metrics,omitempty"` +} + +func (m *Cluster) Reset() { *m = Cluster{} } +func (m *Cluster) String() string { return proto.CompactTextString(m) } +func (*Cluster) ProtoMessage() {} +func (*Cluster) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *Cluster) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *Cluster) GetClusterName() string { + if m != nil { + return m.ClusterName + } + return "" +} + +func (m *Cluster) GetConfig() *ClusterConfig { + if m != nil { + return m.Config + } + return nil +} + +func (m *Cluster) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +func (m *Cluster) GetStatus() *ClusterStatus { + if m != nil { + return m.Status + } + return nil +} + +func (m *Cluster) GetStatusHistory() []*ClusterStatus { + if m != nil { + return m.StatusHistory + } + return nil +} + +func (m *Cluster) GetClusterUuid() string { + if m != nil { + return m.ClusterUuid + } + return "" +} + +func (m *Cluster) GetMetrics() *ClusterMetrics { + if m != nil { + return m.Metrics + } + return nil +} + +// The cluster config. +type ClusterConfig struct { + // Optional. A Google Cloud Storage staging bucket used for sharing generated + // SSH keys and config. If you do not specify a staging bucket, Cloud + // Dataproc will determine an appropriate Cloud Storage location (US, + // ASIA, or EU) for your cluster's staging bucket according to the Google + // Compute Engine zone where your cluster is deployed, and then it will create + // and manage this project-level, per-location bucket for you. + ConfigBucket string `protobuf:"bytes,1,opt,name=config_bucket,json=configBucket" json:"config_bucket,omitempty"` + // Required. The shared Google Compute Engine config settings for + // all instances in a cluster. + GceClusterConfig *GceClusterConfig `protobuf:"bytes,8,opt,name=gce_cluster_config,json=gceClusterConfig" json:"gce_cluster_config,omitempty"` + // Optional. The Google Compute Engine config settings for + // the master instance in a cluster. + MasterConfig *InstanceGroupConfig `protobuf:"bytes,9,opt,name=master_config,json=masterConfig" json:"master_config,omitempty"` + // Optional. The Google Compute Engine config settings for + // worker instances in a cluster. + WorkerConfig *InstanceGroupConfig `protobuf:"bytes,10,opt,name=worker_config,json=workerConfig" json:"worker_config,omitempty"` + // Optional. The Google Compute Engine config settings for + // additional worker instances in a cluster. + SecondaryWorkerConfig *InstanceGroupConfig `protobuf:"bytes,12,opt,name=secondary_worker_config,json=secondaryWorkerConfig" json:"secondary_worker_config,omitempty"` + // Optional. The config settings for software inside the cluster. + SoftwareConfig *SoftwareConfig `protobuf:"bytes,13,opt,name=software_config,json=softwareConfig" json:"software_config,omitempty"` + // Optional. The config setting for auto delete cluster schedule. + LifecycleConfig *LifecycleConfig `protobuf:"bytes,14,opt,name=lifecycle_config,json=lifecycleConfig" json:"lifecycle_config,omitempty"` + // Optional. Commands to execute on each node after config is + // completed. By default, executables are run on master and all worker nodes. + // You can test a node's role metadata to run an executable on + // a master or worker node, as shown below using `curl` (you can also use `wget`): + // + // ROLE=$(curl -H Metadata-Flavor:Google http://metadata/computeMetadata/v1beta2/instance/attributes/dataproc-role) + // if [[ "${ROLE}" == 'Master' ]]; then + // ... master specific actions ... + // else + // ... worker specific actions ... + // fi + InitializationActions []*NodeInitializationAction `protobuf:"bytes,11,rep,name=initialization_actions,json=initializationActions" json:"initialization_actions,omitempty"` +} + +func (m *ClusterConfig) Reset() { *m = ClusterConfig{} } +func (m *ClusterConfig) String() string { return proto.CompactTextString(m) } +func (*ClusterConfig) ProtoMessage() {} +func (*ClusterConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *ClusterConfig) GetConfigBucket() string { + if m != nil { + return m.ConfigBucket + } + return "" +} + +func (m *ClusterConfig) GetGceClusterConfig() *GceClusterConfig { + if m != nil { + return m.GceClusterConfig + } + return nil +} + +func (m *ClusterConfig) GetMasterConfig() *InstanceGroupConfig { + if m != nil { + return m.MasterConfig + } + return nil +} + +func (m *ClusterConfig) GetWorkerConfig() *InstanceGroupConfig { + if m != nil { + return m.WorkerConfig + } + return nil +} + +func (m *ClusterConfig) GetSecondaryWorkerConfig() *InstanceGroupConfig { + if m != nil { + return m.SecondaryWorkerConfig + } + return nil +} + +func (m *ClusterConfig) GetSoftwareConfig() *SoftwareConfig { + if m != nil { + return m.SoftwareConfig + } + return nil +} + +func (m *ClusterConfig) GetLifecycleConfig() *LifecycleConfig { + if m != nil { + return m.LifecycleConfig + } + return nil +} + +func (m *ClusterConfig) GetInitializationActions() []*NodeInitializationAction { + if m != nil { + return m.InitializationActions + } + return nil +} + +// Common config settings for resources of Google Compute Engine cluster +// instances, applicable to all instances in the cluster. +type GceClusterConfig struct { + // Optional. The zone where the Google Compute Engine cluster will be located. + // On a create request, it is required in the "global" region. If omitted + // in a non-global Cloud Dataproc region, the service will pick a zone in the + // corresponding Compute Engine region. On a get request, zone will always be + // present. + // + // A full URL, partial URI, or short name are valid. Examples: + // + // * `https://www.googleapis.com/compute/v1/projects/[project_id]/zones/[zone]` + // * `projects/[project_id]/zones/[zone]` + // * `us-central1-f` + ZoneUri string `protobuf:"bytes,1,opt,name=zone_uri,json=zoneUri" json:"zone_uri,omitempty"` + // Optional. The Google Compute Engine network to be used for machine + // communications. Cannot be specified with subnetwork_uri. If neither + // `network_uri` nor `subnetwork_uri` is specified, the "default" network of + // the project is used, if it exists. Cannot be a "Custom Subnet Network" (see + // [Using Subnetworks](/compute/docs/subnetworks) for more information). + // + // A full URL, partial URI, or short name are valid. Examples: + // + // * `https://www.googleapis.com/compute/v1/projects/[project_id]/regions/global/default` + // * `projects/[project_id]/regions/global/default` + // * `default` + NetworkUri string `protobuf:"bytes,2,opt,name=network_uri,json=networkUri" json:"network_uri,omitempty"` + // Optional. The Google Compute Engine subnetwork to be used for machine + // communications. Cannot be specified with network_uri. + // + // A full URL, partial URI, or short name are valid. Examples: + // + // * `https://www.googleapis.com/compute/v1/projects/[project_id]/regions/us-east1/sub0` + // * `projects/[project_id]/regions/us-east1/sub0` + // * `sub0` + SubnetworkUri string `protobuf:"bytes,6,opt,name=subnetwork_uri,json=subnetworkUri" json:"subnetwork_uri,omitempty"` + // Optional. If true, all instances in the cluster will only have internal IP + // addresses. By default, clusters are not restricted to internal IP addresses, + // and will have ephemeral external IP addresses assigned to each instance. + // This `internal_ip_only` restriction can only be enabled for subnetwork + // enabled networks, and all off-cluster dependencies must be configured to be + // accessible without external IP addresses. + InternalIpOnly bool `protobuf:"varint,7,opt,name=internal_ip_only,json=internalIpOnly" json:"internal_ip_only,omitempty"` + // Optional. The service account of the instances. Defaults to the default + // Google Compute Engine service account. Custom service accounts need + // permissions equivalent to the folloing IAM roles: + // + // * roles/logging.logWriter + // * roles/storage.objectAdmin + // + // (see https://cloud.google.com/compute/docs/access/service-accounts#custom_service_accounts + // for more information). + // Example: `[account_id]@[project_id].iam.gserviceaccount.com` + ServiceAccount string `protobuf:"bytes,8,opt,name=service_account,json=serviceAccount" json:"service_account,omitempty"` + // Optional. The URIs of service account scopes to be included in Google + // Compute Engine instances. The following base set of scopes is always + // included: + // + // * https://www.googleapis.com/auth/cloud.useraccounts.readonly + // * https://www.googleapis.com/auth/devstorage.read_write + // * https://www.googleapis.com/auth/logging.write + // + // If no scopes are specified, the following defaults are also provided: + // + // * https://www.googleapis.com/auth/bigquery + // * https://www.googleapis.com/auth/bigtable.admin.table + // * https://www.googleapis.com/auth/bigtable.data + // * https://www.googleapis.com/auth/devstorage.full_control + ServiceAccountScopes []string `protobuf:"bytes,3,rep,name=service_account_scopes,json=serviceAccountScopes" json:"service_account_scopes,omitempty"` + // The Google Compute Engine tags to add to all instances (see + // [Tagging instances](/compute/docs/label-or-tag-resources#tags)). + Tags []string `protobuf:"bytes,4,rep,name=tags" json:"tags,omitempty"` + // The Google Compute Engine metadata entries to add to all instances (see + // [Project and instance metadata](https://cloud.google.com/compute/docs/storing-retrieving-metadata#project_and_instance_metadata)). + Metadata map[string]string `protobuf:"bytes,5,rep,name=metadata" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *GceClusterConfig) Reset() { *m = GceClusterConfig{} } +func (m *GceClusterConfig) String() string { return proto.CompactTextString(m) } +func (*GceClusterConfig) ProtoMessage() {} +func (*GceClusterConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *GceClusterConfig) GetZoneUri() string { + if m != nil { + return m.ZoneUri + } + return "" +} + +func (m *GceClusterConfig) GetNetworkUri() string { + if m != nil { + return m.NetworkUri + } + return "" +} + +func (m *GceClusterConfig) GetSubnetworkUri() string { + if m != nil { + return m.SubnetworkUri + } + return "" +} + +func (m *GceClusterConfig) GetInternalIpOnly() bool { + if m != nil { + return m.InternalIpOnly + } + return false +} + +func (m *GceClusterConfig) GetServiceAccount() string { + if m != nil { + return m.ServiceAccount + } + return "" +} + +func (m *GceClusterConfig) GetServiceAccountScopes() []string { + if m != nil { + return m.ServiceAccountScopes + } + return nil +} + +func (m *GceClusterConfig) GetTags() []string { + if m != nil { + return m.Tags + } + return nil +} + +func (m *GceClusterConfig) GetMetadata() map[string]string { + if m != nil { + return m.Metadata + } + return nil +} + +// Optional. The config settings for Google Compute Engine resources in +// an instance group, such as a master or worker group. +type InstanceGroupConfig struct { + // Optional. The number of VM instances in the instance group. + // For master instance groups, must be set to 1. + NumInstances int32 `protobuf:"varint,1,opt,name=num_instances,json=numInstances" json:"num_instances,omitempty"` + // Optional. The list of instance names. Cloud Dataproc derives the names from + // `cluster_name`, `num_instances`, and the instance group if not set by user + // (recommended practice is to let Cloud Dataproc derive the name). + InstanceNames []string `protobuf:"bytes,2,rep,name=instance_names,json=instanceNames" json:"instance_names,omitempty"` + // Output-only. The Google Compute Engine image resource used for cluster + // instances. Inferred from `SoftwareConfig.image_version`. + ImageUri string `protobuf:"bytes,3,opt,name=image_uri,json=imageUri" json:"image_uri,omitempty"` + // Optional. The Google Compute Engine machine type used for cluster instances. + // + // A full URL, partial URI, or short name are valid. Examples: + // + // * `https://www.googleapis.com/compute/v1/projects/[project_id]/zones/us-east1-a/machineTypes/n1-standard-2` + // * `projects/[project_id]/zones/us-east1-a/machineTypes/n1-standard-2` + // * `n1-standard-2` + MachineTypeUri string `protobuf:"bytes,4,opt,name=machine_type_uri,json=machineTypeUri" json:"machine_type_uri,omitempty"` + // Optional. Disk option config settings. + DiskConfig *DiskConfig `protobuf:"bytes,5,opt,name=disk_config,json=diskConfig" json:"disk_config,omitempty"` + // Optional. Specifies that this instance group contains preemptible instances. + IsPreemptible bool `protobuf:"varint,6,opt,name=is_preemptible,json=isPreemptible" json:"is_preemptible,omitempty"` + // Output-only. The config for Google Compute Engine Instance Group + // Manager that manages this group. + // This is only used for preemptible instance groups. + ManagedGroupConfig *ManagedGroupConfig `protobuf:"bytes,7,opt,name=managed_group_config,json=managedGroupConfig" json:"managed_group_config,omitempty"` + // Optional. The Google Compute Engine accelerator configuration for these + // instances. + // + // **Beta Feature**: This feature is still under development. It may be + // changed before final release. + Accelerators []*AcceleratorConfig `protobuf:"bytes,8,rep,name=accelerators" json:"accelerators,omitempty"` +} + +func (m *InstanceGroupConfig) Reset() { *m = InstanceGroupConfig{} } +func (m *InstanceGroupConfig) String() string { return proto.CompactTextString(m) } +func (*InstanceGroupConfig) ProtoMessage() {} +func (*InstanceGroupConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *InstanceGroupConfig) GetNumInstances() int32 { + if m != nil { + return m.NumInstances + } + return 0 +} + +func (m *InstanceGroupConfig) GetInstanceNames() []string { + if m != nil { + return m.InstanceNames + } + return nil +} + +func (m *InstanceGroupConfig) GetImageUri() string { + if m != nil { + return m.ImageUri + } + return "" +} + +func (m *InstanceGroupConfig) GetMachineTypeUri() string { + if m != nil { + return m.MachineTypeUri + } + return "" +} + +func (m *InstanceGroupConfig) GetDiskConfig() *DiskConfig { + if m != nil { + return m.DiskConfig + } + return nil +} + +func (m *InstanceGroupConfig) GetIsPreemptible() bool { + if m != nil { + return m.IsPreemptible + } + return false +} + +func (m *InstanceGroupConfig) GetManagedGroupConfig() *ManagedGroupConfig { + if m != nil { + return m.ManagedGroupConfig + } + return nil +} + +func (m *InstanceGroupConfig) GetAccelerators() []*AcceleratorConfig { + if m != nil { + return m.Accelerators + } + return nil +} + +// Specifies the resources used to actively manage an instance group. +type ManagedGroupConfig struct { + // Output-only. The name of the Instance Template used for the Managed + // Instance Group. + InstanceTemplateName string `protobuf:"bytes,1,opt,name=instance_template_name,json=instanceTemplateName" json:"instance_template_name,omitempty"` + // Output-only. The name of the Instance Group Manager for this group. + InstanceGroupManagerName string `protobuf:"bytes,2,opt,name=instance_group_manager_name,json=instanceGroupManagerName" json:"instance_group_manager_name,omitempty"` +} + +func (m *ManagedGroupConfig) Reset() { *m = ManagedGroupConfig{} } +func (m *ManagedGroupConfig) String() string { return proto.CompactTextString(m) } +func (*ManagedGroupConfig) ProtoMessage() {} +func (*ManagedGroupConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *ManagedGroupConfig) GetInstanceTemplateName() string { + if m != nil { + return m.InstanceTemplateName + } + return "" +} + +func (m *ManagedGroupConfig) GetInstanceGroupManagerName() string { + if m != nil { + return m.InstanceGroupManagerName + } + return "" +} + +// Specifies the type and number of accelerator cards attached to the instances +// of an instance group (see [GPUs on Compute Engine](/compute/docs/gpus/)). +type AcceleratorConfig struct { + // Full URL, partial URI, or short name of the accelerator type resource to + // expose to this instance. See [Google Compute Engine AcceleratorTypes]( + // /compute/docs/reference/beta/acceleratorTypes) + // + // Examples + // * `https://www.googleapis.com/compute/beta/projects/[project_id]/zones/us-east1-a/acceleratorTypes/nvidia-tesla-k80` + // * `projects/[project_id]/zones/us-east1-a/acceleratorTypes/nvidia-tesla-k80` + // * `nvidia-tesla-k80` + AcceleratorTypeUri string `protobuf:"bytes,1,opt,name=accelerator_type_uri,json=acceleratorTypeUri" json:"accelerator_type_uri,omitempty"` + // The number of the accelerator cards of this type exposed to this instance. + AcceleratorCount int32 `protobuf:"varint,2,opt,name=accelerator_count,json=acceleratorCount" json:"accelerator_count,omitempty"` +} + +func (m *AcceleratorConfig) Reset() { *m = AcceleratorConfig{} } +func (m *AcceleratorConfig) String() string { return proto.CompactTextString(m) } +func (*AcceleratorConfig) ProtoMessage() {} +func (*AcceleratorConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *AcceleratorConfig) GetAcceleratorTypeUri() string { + if m != nil { + return m.AcceleratorTypeUri + } + return "" +} + +func (m *AcceleratorConfig) GetAcceleratorCount() int32 { + if m != nil { + return m.AcceleratorCount + } + return 0 +} + +// Specifies the config of disk options for a group of VM instances. +type DiskConfig struct { + // Optional. Size in GB of the boot disk (default is 500GB). + BootDiskSizeGb int32 `protobuf:"varint,1,opt,name=boot_disk_size_gb,json=bootDiskSizeGb" json:"boot_disk_size_gb,omitempty"` + // Optional. Number of attached SSDs, from 0 to 4 (default is 0). + // If SSDs are not attached, the boot disk is used to store runtime logs and + // [HDFS](https://hadoop.apache.org/docs/r1.2.1/hdfs_user_guide.html) data. + // If one or more SSDs are attached, this runtime bulk + // data is spread across them, and the boot disk contains only basic + // config and installed binaries. + NumLocalSsds int32 `protobuf:"varint,2,opt,name=num_local_ssds,json=numLocalSsds" json:"num_local_ssds,omitempty"` +} + +func (m *DiskConfig) Reset() { *m = DiskConfig{} } +func (m *DiskConfig) String() string { return proto.CompactTextString(m) } +func (*DiskConfig) ProtoMessage() {} +func (*DiskConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *DiskConfig) GetBootDiskSizeGb() int32 { + if m != nil { + return m.BootDiskSizeGb + } + return 0 +} + +func (m *DiskConfig) GetNumLocalSsds() int32 { + if m != nil { + return m.NumLocalSsds + } + return 0 +} + +// Specifies the cluster auto delete related schedule configuration. +type LifecycleConfig struct { + // Optional. The longest duration that cluster would keep alive while staying + // idle; passing this threshold will cause cluster to be auto-deleted. + IdleDeleteTtl *google_protobuf3.Duration `protobuf:"bytes,1,opt,name=idle_delete_ttl,json=idleDeleteTtl" json:"idle_delete_ttl,omitempty"` + // Types that are valid to be assigned to Ttl: + // *LifecycleConfig_AutoDeleteTime + // *LifecycleConfig_AutoDeleteTtl + Ttl isLifecycleConfig_Ttl `protobuf_oneof:"ttl"` +} + +func (m *LifecycleConfig) Reset() { *m = LifecycleConfig{} } +func (m *LifecycleConfig) String() string { return proto.CompactTextString(m) } +func (*LifecycleConfig) ProtoMessage() {} +func (*LifecycleConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +type isLifecycleConfig_Ttl interface { + isLifecycleConfig_Ttl() +} + +type LifecycleConfig_AutoDeleteTime struct { + AutoDeleteTime *google_protobuf5.Timestamp `protobuf:"bytes,2,opt,name=auto_delete_time,json=autoDeleteTime,oneof"` +} +type LifecycleConfig_AutoDeleteTtl struct { + AutoDeleteTtl *google_protobuf3.Duration `protobuf:"bytes,3,opt,name=auto_delete_ttl,json=autoDeleteTtl,oneof"` +} + +func (*LifecycleConfig_AutoDeleteTime) isLifecycleConfig_Ttl() {} +func (*LifecycleConfig_AutoDeleteTtl) isLifecycleConfig_Ttl() {} + +func (m *LifecycleConfig) GetTtl() isLifecycleConfig_Ttl { + if m != nil { + return m.Ttl + } + return nil +} + +func (m *LifecycleConfig) GetIdleDeleteTtl() *google_protobuf3.Duration { + if m != nil { + return m.IdleDeleteTtl + } + return nil +} + +func (m *LifecycleConfig) GetAutoDeleteTime() *google_protobuf5.Timestamp { + if x, ok := m.GetTtl().(*LifecycleConfig_AutoDeleteTime); ok { + return x.AutoDeleteTime + } + return nil +} + +func (m *LifecycleConfig) GetAutoDeleteTtl() *google_protobuf3.Duration { + if x, ok := m.GetTtl().(*LifecycleConfig_AutoDeleteTtl); ok { + return x.AutoDeleteTtl + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*LifecycleConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _LifecycleConfig_OneofMarshaler, _LifecycleConfig_OneofUnmarshaler, _LifecycleConfig_OneofSizer, []interface{}{ + (*LifecycleConfig_AutoDeleteTime)(nil), + (*LifecycleConfig_AutoDeleteTtl)(nil), + } +} + +func _LifecycleConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*LifecycleConfig) + // ttl + switch x := m.Ttl.(type) { + case *LifecycleConfig_AutoDeleteTime: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.AutoDeleteTime); err != nil { + return err + } + case *LifecycleConfig_AutoDeleteTtl: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.AutoDeleteTtl); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("LifecycleConfig.Ttl has unexpected type %T", x) + } + return nil +} + +func _LifecycleConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*LifecycleConfig) + switch tag { + case 2: // ttl.auto_delete_time + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf5.Timestamp) + err := b.DecodeMessage(msg) + m.Ttl = &LifecycleConfig_AutoDeleteTime{msg} + return true, err + case 3: // ttl.auto_delete_ttl + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf3.Duration) + err := b.DecodeMessage(msg) + m.Ttl = &LifecycleConfig_AutoDeleteTtl{msg} + return true, err + default: + return false, nil + } +} + +func _LifecycleConfig_OneofSizer(msg proto.Message) (n int) { + m := msg.(*LifecycleConfig) + // ttl + switch x := m.Ttl.(type) { + case *LifecycleConfig_AutoDeleteTime: + s := proto.Size(x.AutoDeleteTime) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *LifecycleConfig_AutoDeleteTtl: + s := proto.Size(x.AutoDeleteTtl) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Specifies an executable to run on a fully configured node and a +// timeout period for executable completion. +type NodeInitializationAction struct { + // Required. Google Cloud Storage URI of executable file. + ExecutableFile string `protobuf:"bytes,1,opt,name=executable_file,json=executableFile" json:"executable_file,omitempty"` + // Optional. Amount of time executable has to complete. Default is + // 10 minutes. Cluster creation fails with an explanatory error message (the + // name of the executable that caused the error and the exceeded timeout + // period) if the executable is not completed at end of the timeout period. + ExecutionTimeout *google_protobuf3.Duration `protobuf:"bytes,2,opt,name=execution_timeout,json=executionTimeout" json:"execution_timeout,omitempty"` +} + +func (m *NodeInitializationAction) Reset() { *m = NodeInitializationAction{} } +func (m *NodeInitializationAction) String() string { return proto.CompactTextString(m) } +func (*NodeInitializationAction) ProtoMessage() {} +func (*NodeInitializationAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *NodeInitializationAction) GetExecutableFile() string { + if m != nil { + return m.ExecutableFile + } + return "" +} + +func (m *NodeInitializationAction) GetExecutionTimeout() *google_protobuf3.Duration { + if m != nil { + return m.ExecutionTimeout + } + return nil +} + +// The status of a cluster and its instances. +type ClusterStatus struct { + // Output-only. The cluster's state. + State ClusterStatus_State `protobuf:"varint,1,opt,name=state,enum=google.cloud.dataproc.v1beta2.ClusterStatus_State" json:"state,omitempty"` + // Output-only. Optional details of cluster's state. + Detail string `protobuf:"bytes,2,opt,name=detail" json:"detail,omitempty"` + // Output-only. Time when this state was entered. + StateStartTime *google_protobuf5.Timestamp `protobuf:"bytes,3,opt,name=state_start_time,json=stateStartTime" json:"state_start_time,omitempty"` + // Output-only. Additional state information that includes + // status reported by the agent. + Substate ClusterStatus_Substate `protobuf:"varint,4,opt,name=substate,enum=google.cloud.dataproc.v1beta2.ClusterStatus_Substate" json:"substate,omitempty"` +} + +func (m *ClusterStatus) Reset() { *m = ClusterStatus{} } +func (m *ClusterStatus) String() string { return proto.CompactTextString(m) } +func (*ClusterStatus) ProtoMessage() {} +func (*ClusterStatus) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *ClusterStatus) GetState() ClusterStatus_State { + if m != nil { + return m.State + } + return ClusterStatus_UNKNOWN +} + +func (m *ClusterStatus) GetDetail() string { + if m != nil { + return m.Detail + } + return "" +} + +func (m *ClusterStatus) GetStateStartTime() *google_protobuf5.Timestamp { + if m != nil { + return m.StateStartTime + } + return nil +} + +func (m *ClusterStatus) GetSubstate() ClusterStatus_Substate { + if m != nil { + return m.Substate + } + return ClusterStatus_UNSPECIFIED +} + +// Specifies the selection and config of software inside the cluster. +type SoftwareConfig struct { + // Optional. The version of software inside the cluster. It must match the + // regular expression `[0-9]+\.[0-9]+`. If unspecified, it defaults to the + // latest version (see [Cloud Dataproc Versioning](/dataproc/versioning)). + ImageVersion string `protobuf:"bytes,1,opt,name=image_version,json=imageVersion" json:"image_version,omitempty"` + // Optional. The properties to set on daemon config files. + // + // Property keys are specified in `prefix:property` format, such as + // `core:fs.defaultFS`. The following are supported prefixes + // and their mappings: + // + // * capacity-scheduler: `capacity-scheduler.xml` + // * core: `core-site.xml` + // * distcp: `distcp-default.xml` + // * hdfs: `hdfs-site.xml` + // * hive: `hive-site.xml` + // * mapred: `mapred-site.xml` + // * pig: `pig.properties` + // * spark: `spark-defaults.conf` + // * yarn: `yarn-site.xml` + // + // For more information, see + // [Cluster properties](/dataproc/docs/concepts/cluster-properties). + Properties map[string]string `protobuf:"bytes,2,rep,name=properties" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *SoftwareConfig) Reset() { *m = SoftwareConfig{} } +func (m *SoftwareConfig) String() string { return proto.CompactTextString(m) } +func (*SoftwareConfig) ProtoMessage() {} +func (*SoftwareConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *SoftwareConfig) GetImageVersion() string { + if m != nil { + return m.ImageVersion + } + return "" +} + +func (m *SoftwareConfig) GetProperties() map[string]string { + if m != nil { + return m.Properties + } + return nil +} + +// Contains cluster daemon metrics, such as HDFS and YARN stats. +// +// **Beta Feature**: This report is available for testing purposes only. It may +// be changed before final release. +type ClusterMetrics struct { + // The HDFS metrics. + HdfsMetrics map[string]int64 `protobuf:"bytes,1,rep,name=hdfs_metrics,json=hdfsMetrics" json:"hdfs_metrics,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` + // The YARN metrics. + YarnMetrics map[string]int64 `protobuf:"bytes,2,rep,name=yarn_metrics,json=yarnMetrics" json:"yarn_metrics,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` +} + +func (m *ClusterMetrics) Reset() { *m = ClusterMetrics{} } +func (m *ClusterMetrics) String() string { return proto.CompactTextString(m) } +func (*ClusterMetrics) ProtoMessage() {} +func (*ClusterMetrics) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *ClusterMetrics) GetHdfsMetrics() map[string]int64 { + if m != nil { + return m.HdfsMetrics + } + return nil +} + +func (m *ClusterMetrics) GetYarnMetrics() map[string]int64 { + if m != nil { + return m.YarnMetrics + } + return nil +} + +// A request to create a cluster. +type CreateClusterRequest struct { + // Required. The ID of the Google Cloud Platform project that the cluster + // belongs to. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Required. The Cloud Dataproc region in which to handle the request. + Region string `protobuf:"bytes,3,opt,name=region" json:"region,omitempty"` + // Required. The cluster to create. + Cluster *Cluster `protobuf:"bytes,2,opt,name=cluster" json:"cluster,omitempty"` +} + +func (m *CreateClusterRequest) Reset() { *m = CreateClusterRequest{} } +func (m *CreateClusterRequest) String() string { return proto.CompactTextString(m) } +func (*CreateClusterRequest) ProtoMessage() {} +func (*CreateClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *CreateClusterRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *CreateClusterRequest) GetRegion() string { + if m != nil { + return m.Region + } + return "" +} + +func (m *CreateClusterRequest) GetCluster() *Cluster { + if m != nil { + return m.Cluster + } + return nil +} + +// A request to update a cluster. +type UpdateClusterRequest struct { + // Required. The ID of the Google Cloud Platform project the + // cluster belongs to. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Required. The Cloud Dataproc region in which to handle the request. + Region string `protobuf:"bytes,5,opt,name=region" json:"region,omitempty"` + // Required. The cluster name. + ClusterName string `protobuf:"bytes,2,opt,name=cluster_name,json=clusterName" json:"cluster_name,omitempty"` + // Required. The changes to the cluster. + Cluster *Cluster `protobuf:"bytes,3,opt,name=cluster" json:"cluster,omitempty"` + // Optional. Timeout for graceful YARN decomissioning. Graceful + // decommissioning allows removing nodes from the cluster without + // interrupting jobs in progress. Timeout specifies how long to wait for jobs + // in progress to finish before forcefully removing nodes (and potentially + // interrupting jobs). Default timeout is 0 (for forceful decommission), and + // the maximum allowed timeout is 1 day. + // + // Only supported on Dataproc image versions 1.2 and higher. + GracefulDecommissionTimeout *google_protobuf3.Duration `protobuf:"bytes,6,opt,name=graceful_decommission_timeout,json=gracefulDecommissionTimeout" json:"graceful_decommission_timeout,omitempty"` + // Required. Specifies the path, relative to Cluster, of + // the field to update. For example, to change the number of workers + // in a cluster to 5, the update_mask parameter would be + // specified as config.worker_config.num_instances, + // and the `PATCH` request body would specify the new value, as follows: + // + // { + // "config":{ + // "workerConfig":{ + // "numInstances":"5" + // } + // } + // } + // Similarly, to change the number of preemptible workers in a cluster to 5, the + // update_mask parameter would be config.secondary_worker_config.num_instances, + // and the `PATCH` request body would be set as follows: + // + // { + // "config":{ + // "secondaryWorkerConfig":{ + // "numInstances":"5" + // } + // } + // } + // Note: currently only some fields can be updated: + // |Mask|Purpose| + // |`labels`|Updates labels| + // |`config.worker_config.num_instances`|Resize primary worker group| + // |`config.secondary_worker_config.num_instances`|Resize secondary worker group| + UpdateMask *google_protobuf4.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateClusterRequest) Reset() { *m = UpdateClusterRequest{} } +func (m *UpdateClusterRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateClusterRequest) ProtoMessage() {} +func (*UpdateClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +func (m *UpdateClusterRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *UpdateClusterRequest) GetRegion() string { + if m != nil { + return m.Region + } + return "" +} + +func (m *UpdateClusterRequest) GetClusterName() string { + if m != nil { + return m.ClusterName + } + return "" +} + +func (m *UpdateClusterRequest) GetCluster() *Cluster { + if m != nil { + return m.Cluster + } + return nil +} + +func (m *UpdateClusterRequest) GetGracefulDecommissionTimeout() *google_protobuf3.Duration { + if m != nil { + return m.GracefulDecommissionTimeout + } + return nil +} + +func (m *UpdateClusterRequest) GetUpdateMask() *google_protobuf4.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +// A request to delete a cluster. +type DeleteClusterRequest struct { + // Required. The ID of the Google Cloud Platform project that the cluster + // belongs to. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Required. The Cloud Dataproc region in which to handle the request. + Region string `protobuf:"bytes,3,opt,name=region" json:"region,omitempty"` + // Required. The cluster name. + ClusterName string `protobuf:"bytes,2,opt,name=cluster_name,json=clusterName" json:"cluster_name,omitempty"` + // Optional. Specifying the `cluster_uuid` means the RPC should fail + // (with error NOT_FOUND) if cluster with specified UUID does not exist. + ClusterUuid string `protobuf:"bytes,4,opt,name=cluster_uuid,json=clusterUuid" json:"cluster_uuid,omitempty"` +} + +func (m *DeleteClusterRequest) Reset() { *m = DeleteClusterRequest{} } +func (m *DeleteClusterRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteClusterRequest) ProtoMessage() {} +func (*DeleteClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +func (m *DeleteClusterRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *DeleteClusterRequest) GetRegion() string { + if m != nil { + return m.Region + } + return "" +} + +func (m *DeleteClusterRequest) GetClusterName() string { + if m != nil { + return m.ClusterName + } + return "" +} + +func (m *DeleteClusterRequest) GetClusterUuid() string { + if m != nil { + return m.ClusterUuid + } + return "" +} + +// Request to get the resource representation for a cluster in a project. +type GetClusterRequest struct { + // Required. The ID of the Google Cloud Platform project that the cluster + // belongs to. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Required. The Cloud Dataproc region in which to handle the request. + Region string `protobuf:"bytes,3,opt,name=region" json:"region,omitempty"` + // Required. The cluster name. + ClusterName string `protobuf:"bytes,2,opt,name=cluster_name,json=clusterName" json:"cluster_name,omitempty"` +} + +func (m *GetClusterRequest) Reset() { *m = GetClusterRequest{} } +func (m *GetClusterRequest) String() string { return proto.CompactTextString(m) } +func (*GetClusterRequest) ProtoMessage() {} +func (*GetClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +func (m *GetClusterRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *GetClusterRequest) GetRegion() string { + if m != nil { + return m.Region + } + return "" +} + +func (m *GetClusterRequest) GetClusterName() string { + if m != nil { + return m.ClusterName + } + return "" +} + +// A request to list the clusters in a project. +type ListClustersRequest struct { + // Required. The ID of the Google Cloud Platform project that the cluster + // belongs to. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Required. The Cloud Dataproc region in which to handle the request. + Region string `protobuf:"bytes,4,opt,name=region" json:"region,omitempty"` + // Optional. A filter constraining the clusters to list. Filters are + // case-sensitive and have the following syntax: + // + // field = value [AND [field = value]] ... + // + // where **field** is one of `status.state`, `clusterName`, or `labels.[KEY]`, + // and `[KEY]` is a label key. **value** can be `*` to match all values. + // `status.state` can be one of the following: `ACTIVE`, `INACTIVE`, + // `CREATING`, `RUNNING`, `ERROR`, `DELETING`, or `UPDATING`. `ACTIVE` + // contains the `CREATING`, `UPDATING`, and `RUNNING` states. `INACTIVE` + // contains the `DELETING` and `ERROR` states. + // `clusterName` is the name of the cluster provided at creation time. + // Only the logical `AND` operator is supported; space-separated items are + // treated as having an implicit `AND` operator. + // + // Example filter: + // + // status.state = ACTIVE AND clusterName = mycluster + // AND labels.env = staging AND labels.starred = * + Filter string `protobuf:"bytes,5,opt,name=filter" json:"filter,omitempty"` + // Optional. The standard List page size. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // Optional. The standard List page token. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListClustersRequest) Reset() { *m = ListClustersRequest{} } +func (m *ListClustersRequest) String() string { return proto.CompactTextString(m) } +func (*ListClustersRequest) ProtoMessage() {} +func (*ListClustersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } + +func (m *ListClustersRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *ListClustersRequest) GetRegion() string { + if m != nil { + return m.Region + } + return "" +} + +func (m *ListClustersRequest) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +func (m *ListClustersRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListClustersRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// The list of all clusters in a project. +type ListClustersResponse struct { + // Output-only. The clusters in the project. + Clusters []*Cluster `protobuf:"bytes,1,rep,name=clusters" json:"clusters,omitempty"` + // Output-only. This token is included in the response if there are more + // results to fetch. To fetch additional results, provide this value as the + // `page_token` in a subsequent ListClustersRequest. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListClustersResponse) Reset() { *m = ListClustersResponse{} } +func (m *ListClustersResponse) String() string { return proto.CompactTextString(m) } +func (*ListClustersResponse) ProtoMessage() {} +func (*ListClustersResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } + +func (m *ListClustersResponse) GetClusters() []*Cluster { + if m != nil { + return m.Clusters + } + return nil +} + +func (m *ListClustersResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// A request to collect cluster diagnostic information. +type DiagnoseClusterRequest struct { + // Required. The ID of the Google Cloud Platform project that the cluster + // belongs to. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Required. The Cloud Dataproc region in which to handle the request. + Region string `protobuf:"bytes,3,opt,name=region" json:"region,omitempty"` + // Required. The cluster name. + ClusterName string `protobuf:"bytes,2,opt,name=cluster_name,json=clusterName" json:"cluster_name,omitempty"` +} + +func (m *DiagnoseClusterRequest) Reset() { *m = DiagnoseClusterRequest{} } +func (m *DiagnoseClusterRequest) String() string { return proto.CompactTextString(m) } +func (*DiagnoseClusterRequest) ProtoMessage() {} +func (*DiagnoseClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } + +func (m *DiagnoseClusterRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *DiagnoseClusterRequest) GetRegion() string { + if m != nil { + return m.Region + } + return "" +} + +func (m *DiagnoseClusterRequest) GetClusterName() string { + if m != nil { + return m.ClusterName + } + return "" +} + +// The location of diagnostic output. +type DiagnoseClusterResults struct { + // Output-only. The Google Cloud Storage URI of the diagnostic output. + // The output report is a plain text file with a summary of collected + // diagnostics. + OutputUri string `protobuf:"bytes,1,opt,name=output_uri,json=outputUri" json:"output_uri,omitempty"` +} + +func (m *DiagnoseClusterResults) Reset() { *m = DiagnoseClusterResults{} } +func (m *DiagnoseClusterResults) String() string { return proto.CompactTextString(m) } +func (*DiagnoseClusterResults) ProtoMessage() {} +func (*DiagnoseClusterResults) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } + +func (m *DiagnoseClusterResults) GetOutputUri() string { + if m != nil { + return m.OutputUri + } + return "" +} + +func init() { + proto.RegisterType((*Cluster)(nil), "google.cloud.dataproc.v1beta2.Cluster") + proto.RegisterType((*ClusterConfig)(nil), "google.cloud.dataproc.v1beta2.ClusterConfig") + proto.RegisterType((*GceClusterConfig)(nil), "google.cloud.dataproc.v1beta2.GceClusterConfig") + proto.RegisterType((*InstanceGroupConfig)(nil), "google.cloud.dataproc.v1beta2.InstanceGroupConfig") + proto.RegisterType((*ManagedGroupConfig)(nil), "google.cloud.dataproc.v1beta2.ManagedGroupConfig") + proto.RegisterType((*AcceleratorConfig)(nil), "google.cloud.dataproc.v1beta2.AcceleratorConfig") + proto.RegisterType((*DiskConfig)(nil), "google.cloud.dataproc.v1beta2.DiskConfig") + proto.RegisterType((*LifecycleConfig)(nil), "google.cloud.dataproc.v1beta2.LifecycleConfig") + proto.RegisterType((*NodeInitializationAction)(nil), "google.cloud.dataproc.v1beta2.NodeInitializationAction") + proto.RegisterType((*ClusterStatus)(nil), "google.cloud.dataproc.v1beta2.ClusterStatus") + proto.RegisterType((*SoftwareConfig)(nil), "google.cloud.dataproc.v1beta2.SoftwareConfig") + proto.RegisterType((*ClusterMetrics)(nil), "google.cloud.dataproc.v1beta2.ClusterMetrics") + proto.RegisterType((*CreateClusterRequest)(nil), "google.cloud.dataproc.v1beta2.CreateClusterRequest") + proto.RegisterType((*UpdateClusterRequest)(nil), "google.cloud.dataproc.v1beta2.UpdateClusterRequest") + proto.RegisterType((*DeleteClusterRequest)(nil), "google.cloud.dataproc.v1beta2.DeleteClusterRequest") + proto.RegisterType((*GetClusterRequest)(nil), "google.cloud.dataproc.v1beta2.GetClusterRequest") + proto.RegisterType((*ListClustersRequest)(nil), "google.cloud.dataproc.v1beta2.ListClustersRequest") + proto.RegisterType((*ListClustersResponse)(nil), "google.cloud.dataproc.v1beta2.ListClustersResponse") + proto.RegisterType((*DiagnoseClusterRequest)(nil), "google.cloud.dataproc.v1beta2.DiagnoseClusterRequest") + proto.RegisterType((*DiagnoseClusterResults)(nil), "google.cloud.dataproc.v1beta2.DiagnoseClusterResults") + proto.RegisterEnum("google.cloud.dataproc.v1beta2.ClusterStatus_State", ClusterStatus_State_name, ClusterStatus_State_value) + proto.RegisterEnum("google.cloud.dataproc.v1beta2.ClusterStatus_Substate", ClusterStatus_Substate_name, ClusterStatus_Substate_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for ClusterController service + +type ClusterControllerClient interface { + // Creates a cluster in a project. + CreateCluster(ctx context.Context, in *CreateClusterRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Updates a cluster in a project. + UpdateCluster(ctx context.Context, in *UpdateClusterRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Deletes a cluster in a project. + DeleteCluster(ctx context.Context, in *DeleteClusterRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Gets the resource representation for a cluster in a project. + GetCluster(ctx context.Context, in *GetClusterRequest, opts ...grpc.CallOption) (*Cluster, error) + // Lists all regions/{region}/clusters in a project. + ListClusters(ctx context.Context, in *ListClustersRequest, opts ...grpc.CallOption) (*ListClustersResponse, error) + // Gets cluster diagnostic information. + // After the operation completes, the Operation.response field + // contains `DiagnoseClusterOutputLocation`. + DiagnoseCluster(ctx context.Context, in *DiagnoseClusterRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) +} + +type clusterControllerClient struct { + cc *grpc.ClientConn +} + +func NewClusterControllerClient(cc *grpc.ClientConn) ClusterControllerClient { + return &clusterControllerClient{cc} +} + +func (c *clusterControllerClient) CreateCluster(ctx context.Context, in *CreateClusterRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.dataproc.v1beta2.ClusterController/CreateCluster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterControllerClient) UpdateCluster(ctx context.Context, in *UpdateClusterRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.dataproc.v1beta2.ClusterController/UpdateCluster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterControllerClient) DeleteCluster(ctx context.Context, in *DeleteClusterRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.dataproc.v1beta2.ClusterController/DeleteCluster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterControllerClient) GetCluster(ctx context.Context, in *GetClusterRequest, opts ...grpc.CallOption) (*Cluster, error) { + out := new(Cluster) + err := grpc.Invoke(ctx, "/google.cloud.dataproc.v1beta2.ClusterController/GetCluster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterControllerClient) ListClusters(ctx context.Context, in *ListClustersRequest, opts ...grpc.CallOption) (*ListClustersResponse, error) { + out := new(ListClustersResponse) + err := grpc.Invoke(ctx, "/google.cloud.dataproc.v1beta2.ClusterController/ListClusters", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterControllerClient) DiagnoseCluster(ctx context.Context, in *DiagnoseClusterRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.dataproc.v1beta2.ClusterController/DiagnoseCluster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for ClusterController service + +type ClusterControllerServer interface { + // Creates a cluster in a project. + CreateCluster(context.Context, *CreateClusterRequest) (*google_longrunning.Operation, error) + // Updates a cluster in a project. + UpdateCluster(context.Context, *UpdateClusterRequest) (*google_longrunning.Operation, error) + // Deletes a cluster in a project. + DeleteCluster(context.Context, *DeleteClusterRequest) (*google_longrunning.Operation, error) + // Gets the resource representation for a cluster in a project. + GetCluster(context.Context, *GetClusterRequest) (*Cluster, error) + // Lists all regions/{region}/clusters in a project. + ListClusters(context.Context, *ListClustersRequest) (*ListClustersResponse, error) + // Gets cluster diagnostic information. + // After the operation completes, the Operation.response field + // contains `DiagnoseClusterOutputLocation`. + DiagnoseCluster(context.Context, *DiagnoseClusterRequest) (*google_longrunning.Operation, error) +} + +func RegisterClusterControllerServer(s *grpc.Server, srv ClusterControllerServer) { + s.RegisterService(&_ClusterController_serviceDesc, srv) +} + +func _ClusterController_CreateCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterControllerServer).CreateCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dataproc.v1beta2.ClusterController/CreateCluster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterControllerServer).CreateCluster(ctx, req.(*CreateClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterController_UpdateCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterControllerServer).UpdateCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dataproc.v1beta2.ClusterController/UpdateCluster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterControllerServer).UpdateCluster(ctx, req.(*UpdateClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterController_DeleteCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterControllerServer).DeleteCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dataproc.v1beta2.ClusterController/DeleteCluster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterControllerServer).DeleteCluster(ctx, req.(*DeleteClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterController_GetCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterControllerServer).GetCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dataproc.v1beta2.ClusterController/GetCluster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterControllerServer).GetCluster(ctx, req.(*GetClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterController_ListClusters_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListClustersRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterControllerServer).ListClusters(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dataproc.v1beta2.ClusterController/ListClusters", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterControllerServer).ListClusters(ctx, req.(*ListClustersRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterController_DiagnoseCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DiagnoseClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterControllerServer).DiagnoseCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dataproc.v1beta2.ClusterController/DiagnoseCluster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterControllerServer).DiagnoseCluster(ctx, req.(*DiagnoseClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _ClusterController_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.dataproc.v1beta2.ClusterController", + HandlerType: (*ClusterControllerServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateCluster", + Handler: _ClusterController_CreateCluster_Handler, + }, + { + MethodName: "UpdateCluster", + Handler: _ClusterController_UpdateCluster_Handler, + }, + { + MethodName: "DeleteCluster", + Handler: _ClusterController_DeleteCluster_Handler, + }, + { + MethodName: "GetCluster", + Handler: _ClusterController_GetCluster_Handler, + }, + { + MethodName: "ListClusters", + Handler: _ClusterController_ListClusters_Handler, + }, + { + MethodName: "DiagnoseCluster", + Handler: _ClusterController_DiagnoseCluster_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/dataproc/v1beta2/clusters.proto", +} + +func init() { proto.RegisterFile("google/cloud/dataproc/v1beta2/clusters.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 2093 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xcd, 0x72, 0x1b, 0xc7, + 0x11, 0xd6, 0x12, 0x04, 0x09, 0x36, 0x08, 0x10, 0x1c, 0xd3, 0x0c, 0x4c, 0x45, 0xb1, 0xbc, 0x4e, + 0x1c, 0xda, 0x71, 0x00, 0x9b, 0x8a, 0xcb, 0x8e, 0x14, 0xb9, 0x4c, 0x91, 0x14, 0x49, 0x87, 0xa2, + 0x98, 0x05, 0x20, 0x45, 0x49, 0xa9, 0xb6, 0x06, 0xbb, 0x43, 0x68, 0xcc, 0xfd, 0xcb, 0xce, 0xac, + 0x6c, 0x48, 0xa5, 0x8b, 0x6f, 0xa9, 0x1c, 0x72, 0xf0, 0x03, 0xc4, 0xe7, 0x1c, 0x72, 0x4a, 0x55, + 0x2a, 0x87, 0xdc, 0x72, 0xce, 0xc5, 0xa9, 0x3c, 0x41, 0x0e, 0x79, 0x84, 0x1c, 0x53, 0xf3, 0xb3, + 0xc0, 0x2e, 0x48, 0x69, 0x09, 0x46, 0xe5, 0x13, 0x76, 0x7a, 0xfa, 0xe7, 0x9b, 0xee, 0x9e, 0x9e, + 0x9e, 0x01, 0xbc, 0x3b, 0x08, 0xc3, 0x81, 0x47, 0xda, 0x8e, 0x17, 0x26, 0x6e, 0xdb, 0xc5, 0x1c, + 0x47, 0x71, 0xe8, 0xb4, 0x1f, 0xbf, 0xdf, 0x27, 0x1c, 0x6f, 0xb4, 0x1d, 0x2f, 0x61, 0x9c, 0xc4, + 0xac, 0x15, 0xc5, 0x21, 0x0f, 0xd1, 0x15, 0xc5, 0xdd, 0x92, 0xdc, 0xad, 0x94, 0xbb, 0xa5, 0xb9, + 0xd7, 0xbe, 0xab, 0x95, 0xe1, 0x88, 0xb6, 0x71, 0x10, 0x84, 0x1c, 0x73, 0x1a, 0x06, 0x5a, 0x78, + 0xed, 0x4d, 0x3d, 0xeb, 0x85, 0xc1, 0x20, 0x4e, 0x82, 0x80, 0x06, 0x83, 0x76, 0x18, 0x91, 0x38, + 0xc7, 0xf4, 0x3d, 0xcd, 0x24, 0x47, 0xfd, 0xe4, 0xb8, 0xed, 0x26, 0x8a, 0x41, 0xcf, 0x5f, 0x9d, + 0x9c, 0x3f, 0xa6, 0xc4, 0x73, 0x6d, 0x1f, 0xb3, 0x13, 0xcd, 0xf1, 0xfa, 0x24, 0x07, 0xa7, 0x3e, + 0x61, 0x1c, 0xfb, 0x91, 0x62, 0x30, 0xff, 0x30, 0x0b, 0xf3, 0x5b, 0x6a, 0x5d, 0xe8, 0x0a, 0x40, + 0x14, 0x87, 0x9f, 0x11, 0x87, 0xdb, 0xd4, 0x6d, 0x1a, 0x57, 0x8d, 0xf5, 0x05, 0x6b, 0x41, 0x53, + 0xf6, 0x5d, 0xf4, 0x06, 0x2c, 0x6a, 0x0f, 0xd8, 0x01, 0xf6, 0x49, 0x73, 0x46, 0x32, 0x54, 0x35, + 0xed, 0x10, 0xfb, 0x04, 0x6d, 0xc3, 0x9c, 0x13, 0x06, 0xc7, 0x74, 0xd0, 0x2c, 0x5d, 0x35, 0xd6, + 0xab, 0x1b, 0xef, 0xb6, 0x5e, 0xe8, 0xa3, 0x96, 0xb6, 0xbc, 0x25, 0x65, 0x2c, 0x2d, 0x8b, 0x3e, + 0x85, 0x39, 0x0f, 0xf7, 0x89, 0xc7, 0x9a, 0x95, 0xab, 0xa5, 0xf5, 0xea, 0xc6, 0xc6, 0xf9, 0xb4, + 0xb4, 0x0e, 0xa4, 0xd0, 0x4e, 0xc0, 0xe3, 0xa1, 0xa5, 0x35, 0x08, 0x44, 0x8c, 0x63, 0x9e, 0xb0, + 0xe6, 0xec, 0x34, 0x88, 0x3a, 0x52, 0xc6, 0xd2, 0xb2, 0xa8, 0x03, 0x75, 0xf5, 0x65, 0x3f, 0xa2, + 0x8c, 0x87, 0xf1, 0xb0, 0x39, 0x2f, 0x91, 0x4d, 0xa7, 0xad, 0xa6, 0x74, 0xec, 0x29, 0x15, 0x59, + 0x7f, 0x26, 0x09, 0x75, 0x9b, 0x73, 0x39, 0x7f, 0xf6, 0x12, 0xea, 0xa2, 0x5d, 0x98, 0xf7, 0x09, + 0x8f, 0xa9, 0xc3, 0x9a, 0x0b, 0x12, 0xfe, 0x8f, 0xcf, 0x67, 0xf0, 0x8e, 0x12, 0xb2, 0x52, 0xe9, + 0xb5, 0x9f, 0x42, 0x35, 0xe3, 0x1d, 0xd4, 0x80, 0xd2, 0x09, 0x19, 0xea, 0x10, 0x8b, 0x4f, 0xb4, + 0x02, 0xe5, 0xc7, 0xd8, 0x4b, 0xd2, 0xa8, 0xaa, 0xc1, 0xf5, 0x99, 0x8f, 0x0c, 0xf3, 0x9f, 0x65, + 0xa8, 0xe5, 0xe2, 0x84, 0xde, 0x84, 0x9a, 0x8a, 0x94, 0xdd, 0x4f, 0x9c, 0x13, 0xc2, 0xb5, 0x9e, + 0x45, 0x45, 0xbc, 0x25, 0x69, 0xe8, 0x21, 0xa0, 0x81, 0x43, 0xec, 0x74, 0x85, 0x3a, 0x2d, 0x2a, + 0x72, 0x15, 0xed, 0x82, 0x55, 0xec, 0x3a, 0x24, 0x9f, 0x19, 0x8d, 0xc1, 0x04, 0x05, 0xdd, 0x87, + 0x9a, 0x8f, 0xb3, 0x9a, 0x95, 0x7f, 0x8a, 0x52, 0x65, 0x3f, 0x60, 0x1c, 0x07, 0x0e, 0xd9, 0x8d, + 0xc3, 0x24, 0xd2, 0xca, 0x17, 0x95, 0xa2, 0xb1, 0xe2, 0xcf, 0xc3, 0xf8, 0x64, 0xac, 0x18, 0x2e, + 0xae, 0x58, 0x29, 0xd2, 0x8a, 0x3f, 0x83, 0xef, 0x30, 0xe2, 0x84, 0x81, 0x8b, 0xe3, 0xa1, 0x9d, + 0x37, 0xb1, 0x78, 0x61, 0x13, 0xaf, 0x8e, 0x54, 0xde, 0xcf, 0xda, 0xba, 0x07, 0x4b, 0x2c, 0x3c, + 0xe6, 0x9f, 0xe3, 0x98, 0xa4, 0x36, 0x6a, 0xe7, 0xca, 0x9f, 0x8e, 0x96, 0xd2, 0xea, 0xeb, 0x2c, + 0x37, 0x46, 0x0f, 0xa0, 0xe1, 0xd1, 0x63, 0xe2, 0x0c, 0x1d, 0x6f, 0xa4, 0xb8, 0x2e, 0x15, 0xb7, + 0x0a, 0x14, 0x1f, 0xa4, 0x62, 0x5a, 0xf3, 0x92, 0x97, 0x27, 0xa0, 0x00, 0x56, 0x69, 0x40, 0x39, + 0xc5, 0x1e, 0x7d, 0x22, 0x6b, 0x9c, 0x8d, 0x1d, 0x59, 0x0b, 0x9b, 0x55, 0xb9, 0xd5, 0x3e, 0x2c, + 0x30, 0x70, 0x18, 0xba, 0x64, 0x3f, 0xa7, 0x60, 0x53, 0xca, 0x5b, 0xaf, 0xd2, 0x33, 0xa8, 0xcc, + 0xfc, 0x63, 0x09, 0x1a, 0x93, 0x79, 0x86, 0x5e, 0x83, 0xca, 0x93, 0x30, 0x20, 0x76, 0x12, 0x53, + 0x9d, 0xd4, 0xf3, 0x62, 0xdc, 0x8b, 0x29, 0x7a, 0x1d, 0xaa, 0x01, 0xe1, 0x22, 0x6e, 0x72, 0x56, + 0x6d, 0x13, 0xd0, 0x24, 0xc1, 0xf0, 0x03, 0xa8, 0xb3, 0xa4, 0x9f, 0xe5, 0x51, 0x1b, 0xba, 0x36, + 0xa6, 0x0a, 0xb6, 0x75, 0x68, 0xd0, 0x80, 0x93, 0x38, 0xc0, 0x9e, 0x4d, 0x23, 0x3b, 0x0c, 0x3c, + 0x51, 0x4c, 0x8c, 0xf5, 0x8a, 0x55, 0x4f, 0xe9, 0xfb, 0xd1, 0xdd, 0xc0, 0x1b, 0xa2, 0x1f, 0xc2, + 0x12, 0x23, 0xf1, 0x63, 0xea, 0x10, 0x1b, 0x3b, 0x4e, 0x98, 0x04, 0x5c, 0x6e, 0x9f, 0x05, 0xab, + 0xae, 0xc9, 0x9b, 0x8a, 0x8a, 0x7e, 0x02, 0xab, 0x13, 0x8c, 0x36, 0x73, 0xc2, 0x88, 0xb0, 0x66, + 0xe9, 0x6a, 0x69, 0x7d, 0xc1, 0x5a, 0xc9, 0xf3, 0x77, 0xe4, 0x1c, 0x42, 0x30, 0xcb, 0xf1, 0x40, + 0xd4, 0x45, 0xc1, 0x23, 0xbf, 0xd1, 0x03, 0xa8, 0xf8, 0x84, 0x63, 0xe1, 0xdc, 0x66, 0x59, 0xba, + 0xfd, 0xe6, 0x94, 0x5b, 0xb5, 0x75, 0x47, 0xcb, 0xab, 0x32, 0x3c, 0x52, 0xb7, 0x76, 0x03, 0x6a, + 0xb9, 0xa9, 0xa9, 0x6a, 0xd0, 0xbf, 0x4a, 0xf0, 0xca, 0x19, 0xe9, 0x2f, 0x2a, 0x51, 0x90, 0xf8, + 0x36, 0xd5, 0x53, 0x4c, 0x6a, 0x2b, 0x5b, 0x8b, 0x41, 0xe2, 0xa7, 0xec, 0x4c, 0x04, 0x26, 0x65, + 0x90, 0x07, 0x17, 0x6b, 0xce, 0xc8, 0x25, 0xd7, 0x52, 0xaa, 0x38, 0xba, 0x18, 0xba, 0x0c, 0x0b, + 0xd4, 0xc7, 0x03, 0x15, 0xfc, 0x92, 0x44, 0x50, 0x91, 0x04, 0x1d, 0x35, 0x1f, 0x3b, 0x8f, 0x68, + 0x40, 0x6c, 0x3e, 0x8c, 0x14, 0xcf, 0xac, 0x0a, 0x86, 0xa6, 0x77, 0x87, 0x91, 0xe4, 0xfc, 0x14, + 0xaa, 0x2e, 0x65, 0x27, 0xe9, 0xee, 0x28, 0xcb, 0xdd, 0xf1, 0x76, 0x81, 0x17, 0xb7, 0x29, 0x3b, + 0xd1, 0x1b, 0x03, 0xdc, 0xd1, 0xb7, 0x44, 0xce, 0xec, 0x28, 0x26, 0xc4, 0x8f, 0x38, 0xed, 0x7b, + 0x44, 0xa6, 0x54, 0xc5, 0xaa, 0x51, 0x76, 0x34, 0x26, 0x22, 0x07, 0x56, 0x7c, 0x1c, 0xe0, 0x01, + 0x71, 0xed, 0x81, 0x70, 0x4e, 0x6a, 0x7b, 0x5e, 0xda, 0x7e, 0xbf, 0xc0, 0xf6, 0x1d, 0x25, 0x9a, + 0xad, 0x2a, 0xc8, 0x3f, 0x45, 0x43, 0x5d, 0x58, 0xc4, 0x8e, 0x43, 0x3c, 0xd1, 0xa2, 0x84, 0x71, + 0x7a, 0x34, 0xbf, 0x57, 0xa0, 0x7c, 0x73, 0x2c, 0x92, 0x16, 0xc5, 0xac, 0x16, 0xf3, 0xb7, 0x06, + 0xa0, 0xd3, 0x00, 0x44, 0x46, 0x8f, 0x42, 0xc6, 0x89, 0x1f, 0x79, 0x98, 0xab, 0xd8, 0xe9, 0x74, + 0x59, 0x49, 0x67, 0xbb, 0x7a, 0x52, 0x76, 0x1f, 0x37, 0xe1, 0xf2, 0x48, 0x4a, 0x39, 0x42, 0xad, + 0x23, 0xd7, 0xaf, 0x34, 0x69, 0x36, 0x8f, 0x94, 0x6d, 0xd9, 0xbc, 0x98, 0x31, 0x2c, 0x9f, 0x82, + 0x8b, 0xde, 0x83, 0x95, 0x0c, 0xe0, 0x71, 0xf0, 0x15, 0x0e, 0x94, 0x99, 0x4b, 0x13, 0xe0, 0x47, + 0xb0, 0x9c, 0x95, 0x50, 0x1b, 0x77, 0x46, 0xe6, 0x65, 0x03, 0x67, 0xf5, 0x27, 0x01, 0x37, 0x1f, + 0x02, 0x8c, 0x63, 0x8f, 0xde, 0x86, 0xe5, 0x7e, 0x18, 0x72, 0x5b, 0x26, 0x10, 0xa3, 0x4f, 0x88, + 0x3d, 0xe8, 0xeb, 0x94, 0xae, 0x8b, 0x09, 0xc1, 0xda, 0xa1, 0x4f, 0xc8, 0x6e, 0x1f, 0x7d, 0x1f, + 0xea, 0x22, 0xf3, 0xbd, 0xd0, 0xc1, 0x9e, 0xcd, 0x98, 0xcb, 0xb4, 0x09, 0x91, 0xfa, 0x07, 0x82, + 0xd8, 0x61, 0x2e, 0x33, 0xff, 0x63, 0xc0, 0xd2, 0x44, 0xe5, 0x45, 0x9b, 0xb0, 0x44, 0x5d, 0x8f, + 0xd8, 0x2e, 0xf1, 0x08, 0x27, 0x36, 0xe7, 0x9e, 0x34, 0x51, 0xdd, 0x78, 0x2d, 0x8d, 0x65, 0xda, + 0x2c, 0xb6, 0xb6, 0x75, 0xbb, 0x69, 0xd5, 0x84, 0xc4, 0xb6, 0x14, 0xe8, 0x72, 0x0f, 0xdd, 0x86, + 0x06, 0x4e, 0x78, 0x38, 0x52, 0x41, 0xb5, 0x77, 0xab, 0x1b, 0x6b, 0xa7, 0x74, 0x74, 0xd3, 0x86, + 0x73, 0xef, 0x92, 0x55, 0x17, 0x52, 0x5a, 0x0d, 0xf5, 0x09, 0xda, 0x82, 0xa5, 0x9c, 0x1e, 0xee, + 0xe9, 0xbe, 0xf1, 0xf9, 0x50, 0xf6, 0x2e, 0x59, 0xb5, 0x8c, 0x16, 0xee, 0xdd, 0x2a, 0x43, 0x89, + 0x73, 0xcf, 0xfc, 0x9d, 0x01, 0xcd, 0xe7, 0x9d, 0x01, 0xa2, 0x94, 0x92, 0x2f, 0x88, 0x93, 0x70, + 0xdc, 0xf7, 0x88, 0x7d, 0x4c, 0xbd, 0x34, 0x91, 0xea, 0x63, 0xf2, 0x6d, 0xea, 0x11, 0x74, 0x1b, + 0x96, 0x15, 0x45, 0x1c, 0x40, 0x62, 0x5d, 0x61, 0xc2, 0xf5, 0xd2, 0x5e, 0xe0, 0x9e, 0xc6, 0x48, + 0xa6, 0xab, 0x44, 0xcc, 0xaf, 0x4b, 0xa3, 0xa6, 0x49, 0x35, 0x7f, 0x68, 0x0f, 0xca, 0xa2, 0xfd, + 0x53, 0x86, 0xeb, 0xe7, 0xed, 0x69, 0x95, 0x70, 0x4b, 0xfc, 0x10, 0x4b, 0x29, 0x40, 0xab, 0x30, + 0xe7, 0x12, 0x8e, 0xa9, 0xa7, 0x33, 0x5a, 0x8f, 0xd0, 0x36, 0x34, 0x24, 0x83, 0xcd, 0x38, 0x8e, + 0xb9, 0x8a, 0x4a, 0xa9, 0x28, 0x2a, 0x96, 0x6c, 0x6c, 0x49, 0x47, 0x88, 0xc8, 0x98, 0xfc, 0x02, + 0x2a, 0x2c, 0xe9, 0x2b, 0xa8, 0xb3, 0x12, 0xea, 0x07, 0xd3, 0x41, 0xd5, 0xc2, 0xd6, 0x48, 0x8d, + 0x79, 0x0f, 0xca, 0x72, 0x01, 0xa8, 0x0a, 0xf3, 0xbd, 0xc3, 0x9f, 0x1f, 0xde, 0xbd, 0x7f, 0xd8, + 0xb8, 0x84, 0x16, 0xa1, 0xb2, 0x65, 0xed, 0x6c, 0x76, 0xf7, 0x0f, 0x77, 0x1b, 0x86, 0x98, 0xb2, + 0x7a, 0x87, 0x87, 0x62, 0x30, 0x83, 0x16, 0xa0, 0xbc, 0x63, 0x59, 0x77, 0xad, 0x46, 0x49, 0x70, + 0x6d, 0xef, 0x1c, 0xec, 0x48, 0xae, 0x59, 0x31, 0xea, 0x1d, 0x6d, 0x2b, 0x99, 0xb2, 0xf9, 0x33, + 0xa8, 0xa4, 0xd6, 0xd0, 0x12, 0x54, 0x7b, 0x87, 0x9d, 0xa3, 0x9d, 0xad, 0xfd, 0xdb, 0xfb, 0x3b, + 0xdb, 0x8d, 0x4b, 0xa8, 0x06, 0x0b, 0xbd, 0xc3, 0xbd, 0x9d, 0xcd, 0x83, 0xee, 0xde, 0x83, 0x86, + 0x81, 0x1a, 0xb0, 0xd8, 0xe9, 0x6e, 0x1e, 0xec, 0xd8, 0x9d, 0xee, 0x66, 0xb7, 0xd7, 0x69, 0xcc, + 0x98, 0xdf, 0x18, 0x50, 0xcf, 0xb7, 0x3b, 0xe2, 0x38, 0x51, 0x47, 0xc0, 0x63, 0x12, 0x33, 0x1a, + 0x06, 0x69, 0x63, 0x2b, 0x89, 0xf7, 0x14, 0x0d, 0x3d, 0x94, 0xb7, 0xa4, 0x88, 0xc4, 0x9c, 0xea, + 0xa3, 0xa4, 0xf8, 0x94, 0xcc, 0xdb, 0x69, 0x1d, 0x8d, 0xe4, 0xd5, 0x29, 0x99, 0x51, 0xb8, 0x76, + 0x13, 0x96, 0x26, 0xa6, 0xa7, 0x3b, 0x29, 0x67, 0xa0, 0x9e, 0xbf, 0x04, 0x20, 0x0c, 0x8b, 0x8f, + 0xdc, 0x63, 0x66, 0xa7, 0x37, 0x09, 0x43, 0x42, 0xfe, 0x78, 0xaa, 0x9b, 0x44, 0x6b, 0xcf, 0x3d, + 0x66, 0xfa, 0x5b, 0x61, 0xae, 0x3e, 0x1a, 0x53, 0x84, 0x89, 0x21, 0x8e, 0x83, 0x91, 0x89, 0x99, + 0x8b, 0x98, 0x78, 0x80, 0xe3, 0x20, 0x6f, 0x62, 0x38, 0xa6, 0xac, 0x7d, 0x0c, 0x8d, 0x49, 0x0c, + 0x45, 0x8e, 0x29, 0x65, 0x1c, 0x23, 0xe4, 0x27, 0x0d, 0x4c, 0x23, 0x6f, 0xfe, 0xde, 0x80, 0x95, + 0xad, 0x98, 0x60, 0x9e, 0xf6, 0x3b, 0x16, 0xf9, 0x4d, 0x42, 0x18, 0x2f, 0xba, 0x35, 0xaf, 0xc2, + 0x5c, 0x4c, 0x06, 0x22, 0x99, 0x54, 0x4f, 0xa1, 0x47, 0xe8, 0x13, 0x98, 0xd7, 0x77, 0x23, 0x5d, + 0x5f, 0xde, 0x3a, 0x9f, 0xb7, 0xac, 0x54, 0xcc, 0xfc, 0xc7, 0x0c, 0xac, 0xf4, 0x22, 0xf7, 0xff, + 0x40, 0x54, 0xce, 0x21, 0x3a, 0xc7, 0xfd, 0x3e, 0x03, 0xba, 0x74, 0x21, 0xd0, 0xe8, 0x21, 0x5c, + 0x19, 0xc4, 0xd8, 0x21, 0xc7, 0x89, 0x67, 0xbb, 0xc4, 0x09, 0x7d, 0x9f, 0x32, 0x96, 0x2d, 0xb6, + 0x73, 0x45, 0xc5, 0xf6, 0x72, 0x2a, 0xbf, 0x9d, 0x11, 0xd7, 0x75, 0x17, 0xdd, 0x80, 0x6a, 0x22, + 0x5d, 0x22, 0x1f, 0x41, 0xf4, 0x9d, 0xff, 0x74, 0xf9, 0xbb, 0x4d, 0x89, 0xe7, 0xde, 0xc1, 0xec, + 0xc4, 0x02, 0xc5, 0x2e, 0xbe, 0xcd, 0xaf, 0x0c, 0x58, 0x51, 0xe7, 0xca, 0xcb, 0x09, 0xf1, 0x39, + 0x1c, 0x3a, 0xf9, 0x06, 0x30, 0x7b, 0xea, 0x0d, 0xc0, 0xf4, 0x61, 0x79, 0x97, 0xf0, 0x6f, 0x0b, + 0x91, 0xf9, 0xb5, 0x01, 0xaf, 0x1c, 0x50, 0x96, 0x1a, 0x64, 0x53, 0x5b, 0x9c, 0xcd, 0x59, 0x5c, + 0x85, 0xb9, 0x63, 0xea, 0x89, 0x84, 0xd1, 0xc9, 0xa6, 0x46, 0xa2, 0xdb, 0x8e, 0x44, 0xa5, 0x15, + 0x5d, 0x8e, 0x6e, 0x5d, 0x2a, 0x82, 0x20, 0xda, 0x1b, 0x69, 0x4b, 0x4c, 0xf2, 0xf0, 0x84, 0xa4, + 0x4b, 0x90, 0xec, 0x5d, 0x41, 0x30, 0xbf, 0x34, 0x60, 0x25, 0x0f, 0x91, 0x45, 0x61, 0xc0, 0x08, + 0xba, 0x05, 0x95, 0xf4, 0x8d, 0x4e, 0x57, 0xb9, 0xf3, 0xe6, 0xe7, 0x48, 0x0e, 0xbd, 0x05, 0x4b, + 0x01, 0xf9, 0x82, 0xdb, 0x19, 0x00, 0xca, 0x4b, 0x35, 0x41, 0x3e, 0x1a, 0x81, 0x88, 0x61, 0x75, + 0x9b, 0xe2, 0x41, 0x10, 0xb2, 0x6f, 0x2d, 0x5b, 0xcc, 0x0f, 0xcf, 0xb0, 0xc9, 0x12, 0x8f, 0x33, + 0x61, 0x33, 0x4c, 0x78, 0x94, 0xf0, 0x4c, 0x73, 0xba, 0xa0, 0x28, 0xbd, 0x98, 0x6e, 0xfc, 0xb7, + 0x02, 0xcb, 0xe3, 0x6b, 0x1a, 0x8f, 0x43, 0xcf, 0x23, 0x31, 0xfa, 0x93, 0x01, 0xb5, 0x5c, 0x49, + 0x43, 0xd7, 0x8a, 0xdc, 0x75, 0x46, 0x01, 0x5c, 0xbb, 0x92, 0x0a, 0x65, 0xde, 0x32, 0x5b, 0x77, + 0xd3, 0xb7, 0x4c, 0x73, 0xff, 0xcb, 0x6f, 0xfe, 0xfd, 0xd5, 0xcc, 0x96, 0xf9, 0xd1, 0xe8, 0x1d, + 0x55, 0xfb, 0x82, 0xb5, 0x9f, 0x8e, 0xfd, 0xf4, 0xac, 0xad, 0xdc, 0xc0, 0xda, 0x4f, 0xd5, 0xc7, + 0xb3, 0xd1, 0x73, 0xeb, 0xf5, 0x51, 0xf1, 0xf8, 0x9b, 0x01, 0xb5, 0x5c, 0xc5, 0x2b, 0x04, 0x7c, + 0x56, 0x7d, 0x2c, 0x02, 0xfc, 0x4b, 0x09, 0xd8, 0xda, 0xd8, 0xbd, 0x28, 0xe0, 0xf6, 0xd3, 0x6c, + 0x20, 0x9f, 0x8d, 0xf1, 0xff, 0xd9, 0x80, 0x5a, 0xae, 0xc0, 0x14, 0xe2, 0x3f, 0xab, 0x1c, 0x15, + 0xe1, 0xbf, 0x2b, 0xf1, 0xef, 0xbf, 0xf3, 0xb2, 0xf0, 0xa3, 0xbf, 0x18, 0x00, 0xe3, 0x12, 0x84, + 0x8a, 0xee, 0x7c, 0xa7, 0xaa, 0xd5, 0xda, 0x39, 0x77, 0x61, 0x8a, 0x1c, 0xbd, 0x34, 0xe4, 0x7f, + 0x35, 0x60, 0x31, 0x5b, 0x29, 0xd0, 0x46, 0xe1, 0x33, 0xd5, 0xa9, 0xca, 0xb7, 0x76, 0x6d, 0x2a, + 0x19, 0x55, 0x8a, 0xcc, 0x4f, 0xe4, 0x52, 0xae, 0xa3, 0x0b, 0x67, 0x3d, 0xfa, 0xbb, 0x01, 0x4b, + 0x13, 0xbb, 0x1d, 0x7d, 0x50, 0xf8, 0x8e, 0x70, 0x56, 0x45, 0x2a, 0x4a, 0x98, 0x5f, 0x4b, 0xac, + 0x3d, 0xf3, 0xe8, 0x65, 0x25, 0xbc, 0xab, 0x61, 0x5c, 0x37, 0xde, 0xb9, 0xf5, 0x14, 0xde, 0x70, + 0x42, 0xff, 0xc5, 0xb8, 0x6f, 0xa5, 0x77, 0x25, 0x76, 0x24, 0x4e, 0xe8, 0x23, 0xe3, 0x57, 0x3b, + 0x9a, 0x7f, 0x10, 0x7a, 0x38, 0x18, 0xb4, 0xc2, 0x78, 0xd0, 0x1e, 0x90, 0x40, 0x9e, 0xdf, 0x6d, + 0x35, 0x85, 0x23, 0xca, 0x9e, 0xf3, 0x47, 0xcd, 0x8d, 0x94, 0xd0, 0x9f, 0x93, 0x12, 0xd7, 0xfe, + 0x17, 0x00, 0x00, 0xff, 0xff, 0x82, 0x2f, 0x0d, 0xbd, 0xd9, 0x19, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1beta2/jobs.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1beta2/jobs.pb.go new file mode 100644 index 0000000..2a2e294 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1beta2/jobs.pb.go @@ -0,0 +1,2573 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/dataproc/v1beta2/jobs.proto + +package dataproc + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf2 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf4 "google.golang.org/genproto/protobuf/field_mask" +import google_protobuf5 "github.com/golang/protobuf/ptypes/timestamp" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// The Log4j level for job execution. When running an +// [Apache Hive](http://hive.apache.org/) job, Cloud +// Dataproc configures the Hive client to an equivalent verbosity level. +type LoggingConfig_Level int32 + +const ( + // Level is unspecified. Use default level for log4j. + LoggingConfig_LEVEL_UNSPECIFIED LoggingConfig_Level = 0 + // Use ALL level for log4j. + LoggingConfig_ALL LoggingConfig_Level = 1 + // Use TRACE level for log4j. + LoggingConfig_TRACE LoggingConfig_Level = 2 + // Use DEBUG level for log4j. + LoggingConfig_DEBUG LoggingConfig_Level = 3 + // Use INFO level for log4j. + LoggingConfig_INFO LoggingConfig_Level = 4 + // Use WARN level for log4j. + LoggingConfig_WARN LoggingConfig_Level = 5 + // Use ERROR level for log4j. + LoggingConfig_ERROR LoggingConfig_Level = 6 + // Use FATAL level for log4j. + LoggingConfig_FATAL LoggingConfig_Level = 7 + // Turn off log4j. + LoggingConfig_OFF LoggingConfig_Level = 8 +) + +var LoggingConfig_Level_name = map[int32]string{ + 0: "LEVEL_UNSPECIFIED", + 1: "ALL", + 2: "TRACE", + 3: "DEBUG", + 4: "INFO", + 5: "WARN", + 6: "ERROR", + 7: "FATAL", + 8: "OFF", +} +var LoggingConfig_Level_value = map[string]int32{ + "LEVEL_UNSPECIFIED": 0, + "ALL": 1, + "TRACE": 2, + "DEBUG": 3, + "INFO": 4, + "WARN": 5, + "ERROR": 6, + "FATAL": 7, + "OFF": 8, +} + +func (x LoggingConfig_Level) String() string { + return proto.EnumName(LoggingConfig_Level_name, int32(x)) +} +func (LoggingConfig_Level) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{0, 0} } + +// The job state. +type JobStatus_State int32 + +const ( + // The job state is unknown. + JobStatus_STATE_UNSPECIFIED JobStatus_State = 0 + // The job is pending; it has been submitted, but is not yet running. + JobStatus_PENDING JobStatus_State = 1 + // Job has been received by the service and completed initial setup; + // it will soon be submitted to the cluster. + JobStatus_SETUP_DONE JobStatus_State = 8 + // The job is running on the cluster. + JobStatus_RUNNING JobStatus_State = 2 + // A CancelJob request has been received, but is pending. + JobStatus_CANCEL_PENDING JobStatus_State = 3 + // Transient in-flight resources have been canceled, and the request to + // cancel the running job has been issued to the cluster. + JobStatus_CANCEL_STARTED JobStatus_State = 7 + // The job cancellation was successful. + JobStatus_CANCELLED JobStatus_State = 4 + // The job has completed successfully. + JobStatus_DONE JobStatus_State = 5 + // The job has completed, but encountered an error. + JobStatus_ERROR JobStatus_State = 6 + // Job attempt has failed. The detail field contains failure details for + // this attempt. + // + // Applies to restartable jobs only. + JobStatus_ATTEMPT_FAILURE JobStatus_State = 9 +) + +var JobStatus_State_name = map[int32]string{ + 0: "STATE_UNSPECIFIED", + 1: "PENDING", + 8: "SETUP_DONE", + 2: "RUNNING", + 3: "CANCEL_PENDING", + 7: "CANCEL_STARTED", + 4: "CANCELLED", + 5: "DONE", + 6: "ERROR", + 9: "ATTEMPT_FAILURE", +} +var JobStatus_State_value = map[string]int32{ + "STATE_UNSPECIFIED": 0, + "PENDING": 1, + "SETUP_DONE": 8, + "RUNNING": 2, + "CANCEL_PENDING": 3, + "CANCEL_STARTED": 7, + "CANCELLED": 4, + "DONE": 5, + "ERROR": 6, + "ATTEMPT_FAILURE": 9, +} + +func (x JobStatus_State) String() string { + return proto.EnumName(JobStatus_State_name, int32(x)) +} +func (JobStatus_State) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{9, 0} } + +type JobStatus_Substate int32 + +const ( + JobStatus_UNSPECIFIED JobStatus_Substate = 0 + // The Job is submitted to the agent. + // + // Applies to RUNNING state. + JobStatus_SUBMITTED JobStatus_Substate = 1 + // The Job has been received and is awaiting execution (it may be waiting + // for a condition to be met). See the "details" field for the reason for + // the delay. + // + // Applies to RUNNING state. + JobStatus_QUEUED JobStatus_Substate = 2 + // The agent-reported status is out of date, which may be caused by a + // loss of communication between the agent and Cloud Dataproc. If the + // agent does not send a timely update, the job will fail. + // + // Applies to RUNNING state. + JobStatus_STALE_STATUS JobStatus_Substate = 3 +) + +var JobStatus_Substate_name = map[int32]string{ + 0: "UNSPECIFIED", + 1: "SUBMITTED", + 2: "QUEUED", + 3: "STALE_STATUS", +} +var JobStatus_Substate_value = map[string]int32{ + "UNSPECIFIED": 0, + "SUBMITTED": 1, + "QUEUED": 2, + "STALE_STATUS": 3, +} + +func (x JobStatus_Substate) String() string { + return proto.EnumName(JobStatus_Substate_name, int32(x)) +} +func (JobStatus_Substate) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{9, 1} } + +// The application state, corresponding to +// YarnProtos.YarnApplicationStateProto. +type YarnApplication_State int32 + +const ( + // Status is unspecified. + YarnApplication_STATE_UNSPECIFIED YarnApplication_State = 0 + // Status is NEW. + YarnApplication_NEW YarnApplication_State = 1 + // Status is NEW_SAVING. + YarnApplication_NEW_SAVING YarnApplication_State = 2 + // Status is SUBMITTED. + YarnApplication_SUBMITTED YarnApplication_State = 3 + // Status is ACCEPTED. + YarnApplication_ACCEPTED YarnApplication_State = 4 + // Status is RUNNING. + YarnApplication_RUNNING YarnApplication_State = 5 + // Status is FINISHED. + YarnApplication_FINISHED YarnApplication_State = 6 + // Status is FAILED. + YarnApplication_FAILED YarnApplication_State = 7 + // Status is KILLED. + YarnApplication_KILLED YarnApplication_State = 8 +) + +var YarnApplication_State_name = map[int32]string{ + 0: "STATE_UNSPECIFIED", + 1: "NEW", + 2: "NEW_SAVING", + 3: "SUBMITTED", + 4: "ACCEPTED", + 5: "RUNNING", + 6: "FINISHED", + 7: "FAILED", + 8: "KILLED", +} +var YarnApplication_State_value = map[string]int32{ + "STATE_UNSPECIFIED": 0, + "NEW": 1, + "NEW_SAVING": 2, + "SUBMITTED": 3, + "ACCEPTED": 4, + "RUNNING": 5, + "FINISHED": 6, + "FAILED": 7, + "KILLED": 8, +} + +func (x YarnApplication_State) String() string { + return proto.EnumName(YarnApplication_State_name, int32(x)) +} +func (YarnApplication_State) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{11, 0} } + +// A matcher that specifies categories of job states. +type ListJobsRequest_JobStateMatcher int32 + +const ( + // Match all jobs, regardless of state. + ListJobsRequest_ALL ListJobsRequest_JobStateMatcher = 0 + // Only match jobs in non-terminal states: PENDING, RUNNING, or + // CANCEL_PENDING. + ListJobsRequest_ACTIVE ListJobsRequest_JobStateMatcher = 1 + // Only match jobs in terminal states: CANCELLED, DONE, or ERROR. + ListJobsRequest_NON_ACTIVE ListJobsRequest_JobStateMatcher = 2 +) + +var ListJobsRequest_JobStateMatcher_name = map[int32]string{ + 0: "ALL", + 1: "ACTIVE", + 2: "NON_ACTIVE", +} +var ListJobsRequest_JobStateMatcher_value = map[string]int32{ + "ALL": 0, + "ACTIVE": 1, + "NON_ACTIVE": 2, +} + +func (x ListJobsRequest_JobStateMatcher) String() string { + return proto.EnumName(ListJobsRequest_JobStateMatcher_name, int32(x)) +} +func (ListJobsRequest_JobStateMatcher) EnumDescriptor() ([]byte, []int) { + return fileDescriptor1, []int{16, 0} +} + +// The runtime logging config of the job. +type LoggingConfig struct { + // The per-package log levels for the driver. This may include + // "root" package name to configure rootLogger. + // Examples: + // 'com.google = FATAL', 'root = INFO', 'org.apache = DEBUG' + DriverLogLevels map[string]LoggingConfig_Level `protobuf:"bytes,2,rep,name=driver_log_levels,json=driverLogLevels" json:"driver_log_levels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=google.cloud.dataproc.v1beta2.LoggingConfig_Level"` +} + +func (m *LoggingConfig) Reset() { *m = LoggingConfig{} } +func (m *LoggingConfig) String() string { return proto.CompactTextString(m) } +func (*LoggingConfig) ProtoMessage() {} +func (*LoggingConfig) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *LoggingConfig) GetDriverLogLevels() map[string]LoggingConfig_Level { + if m != nil { + return m.DriverLogLevels + } + return nil +} + +// A Cloud Dataproc job for running +// [Apache Hadoop MapReduce](https://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html) +// jobs on [Apache Hadoop YARN](https://hadoop.apache.org/docs/r2.7.1/hadoop-yarn/hadoop-yarn-site/YARN.html). +type HadoopJob struct { + // Required. Indicates the location of the driver's main class. Specify + // either the jar file that contains the main class or the main class name. + // To specify both, add the jar file to `jar_file_uris`, and then specify + // the main class name in this property. + // + // Types that are valid to be assigned to Driver: + // *HadoopJob_MainJarFileUri + // *HadoopJob_MainClass + Driver isHadoopJob_Driver `protobuf_oneof:"driver"` + // Optional. The arguments to pass to the driver. Do not + // include arguments, such as `-libjars` or `-Dfoo=bar`, that can be set as job + // properties, since a collision may occur that causes an incorrect job + // submission. + Args []string `protobuf:"bytes,3,rep,name=args" json:"args,omitempty"` + // Optional. Jar file URIs to add to the CLASSPATHs of the + // Hadoop driver and tasks. + JarFileUris []string `protobuf:"bytes,4,rep,name=jar_file_uris,json=jarFileUris" json:"jar_file_uris,omitempty"` + // Optional. HCFS (Hadoop Compatible Filesystem) URIs of files to be copied + // to the working directory of Hadoop drivers and distributed tasks. Useful + // for naively parallel tasks. + FileUris []string `protobuf:"bytes,5,rep,name=file_uris,json=fileUris" json:"file_uris,omitempty"` + // Optional. HCFS URIs of archives to be extracted in the working directory of + // Hadoop drivers and tasks. Supported file types: + // .jar, .tar, .tar.gz, .tgz, or .zip. + ArchiveUris []string `protobuf:"bytes,6,rep,name=archive_uris,json=archiveUris" json:"archive_uris,omitempty"` + // Optional. A mapping of property names to values, used to configure Hadoop. + // Properties that conflict with values set by the Cloud Dataproc API may be + // overwritten. Can include properties set in /etc/hadoop/conf/*-site and + // classes in user code. + Properties map[string]string `protobuf:"bytes,7,rep,name=properties" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Optional. The runtime log config for job execution. + LoggingConfig *LoggingConfig `protobuf:"bytes,8,opt,name=logging_config,json=loggingConfig" json:"logging_config,omitempty"` +} + +func (m *HadoopJob) Reset() { *m = HadoopJob{} } +func (m *HadoopJob) String() string { return proto.CompactTextString(m) } +func (*HadoopJob) ProtoMessage() {} +func (*HadoopJob) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +type isHadoopJob_Driver interface { + isHadoopJob_Driver() +} + +type HadoopJob_MainJarFileUri struct { + MainJarFileUri string `protobuf:"bytes,1,opt,name=main_jar_file_uri,json=mainJarFileUri,oneof"` +} +type HadoopJob_MainClass struct { + MainClass string `protobuf:"bytes,2,opt,name=main_class,json=mainClass,oneof"` +} + +func (*HadoopJob_MainJarFileUri) isHadoopJob_Driver() {} +func (*HadoopJob_MainClass) isHadoopJob_Driver() {} + +func (m *HadoopJob) GetDriver() isHadoopJob_Driver { + if m != nil { + return m.Driver + } + return nil +} + +func (m *HadoopJob) GetMainJarFileUri() string { + if x, ok := m.GetDriver().(*HadoopJob_MainJarFileUri); ok { + return x.MainJarFileUri + } + return "" +} + +func (m *HadoopJob) GetMainClass() string { + if x, ok := m.GetDriver().(*HadoopJob_MainClass); ok { + return x.MainClass + } + return "" +} + +func (m *HadoopJob) GetArgs() []string { + if m != nil { + return m.Args + } + return nil +} + +func (m *HadoopJob) GetJarFileUris() []string { + if m != nil { + return m.JarFileUris + } + return nil +} + +func (m *HadoopJob) GetFileUris() []string { + if m != nil { + return m.FileUris + } + return nil +} + +func (m *HadoopJob) GetArchiveUris() []string { + if m != nil { + return m.ArchiveUris + } + return nil +} + +func (m *HadoopJob) GetProperties() map[string]string { + if m != nil { + return m.Properties + } + return nil +} + +func (m *HadoopJob) GetLoggingConfig() *LoggingConfig { + if m != nil { + return m.LoggingConfig + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*HadoopJob) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _HadoopJob_OneofMarshaler, _HadoopJob_OneofUnmarshaler, _HadoopJob_OneofSizer, []interface{}{ + (*HadoopJob_MainJarFileUri)(nil), + (*HadoopJob_MainClass)(nil), + } +} + +func _HadoopJob_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*HadoopJob) + // driver + switch x := m.Driver.(type) { + case *HadoopJob_MainJarFileUri: + b.EncodeVarint(1<<3 | proto.WireBytes) + b.EncodeStringBytes(x.MainJarFileUri) + case *HadoopJob_MainClass: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeStringBytes(x.MainClass) + case nil: + default: + return fmt.Errorf("HadoopJob.Driver has unexpected type %T", x) + } + return nil +} + +func _HadoopJob_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*HadoopJob) + switch tag { + case 1: // driver.main_jar_file_uri + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Driver = &HadoopJob_MainJarFileUri{x} + return true, err + case 2: // driver.main_class + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Driver = &HadoopJob_MainClass{x} + return true, err + default: + return false, nil + } +} + +func _HadoopJob_OneofSizer(msg proto.Message) (n int) { + m := msg.(*HadoopJob) + // driver + switch x := m.Driver.(type) { + case *HadoopJob_MainJarFileUri: + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.MainJarFileUri))) + n += len(x.MainJarFileUri) + case *HadoopJob_MainClass: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.MainClass))) + n += len(x.MainClass) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A Cloud Dataproc job for running [Apache Spark](http://spark.apache.org/) +// applications on YARN. +type SparkJob struct { + // Required. The specification of the main method to call to drive the job. + // Specify either the jar file that contains the main class or the main class + // name. To pass both a main jar and a main class in that jar, add the jar to + // `CommonJob.jar_file_uris`, and then specify the main class name in `main_class`. + // + // Types that are valid to be assigned to Driver: + // *SparkJob_MainJarFileUri + // *SparkJob_MainClass + Driver isSparkJob_Driver `protobuf_oneof:"driver"` + // Optional. The arguments to pass to the driver. Do not include arguments, + // such as `--conf`, that can be set as job properties, since a collision may + // occur that causes an incorrect job submission. + Args []string `protobuf:"bytes,3,rep,name=args" json:"args,omitempty"` + // Optional. HCFS URIs of jar files to add to the CLASSPATHs of the + // Spark driver and tasks. + JarFileUris []string `protobuf:"bytes,4,rep,name=jar_file_uris,json=jarFileUris" json:"jar_file_uris,omitempty"` + // Optional. HCFS URIs of files to be copied to the working directory of + // Spark drivers and distributed tasks. Useful for naively parallel tasks. + FileUris []string `protobuf:"bytes,5,rep,name=file_uris,json=fileUris" json:"file_uris,omitempty"` + // Optional. HCFS URIs of archives to be extracted in the working directory + // of Spark drivers and tasks. Supported file types: + // .jar, .tar, .tar.gz, .tgz, and .zip. + ArchiveUris []string `protobuf:"bytes,6,rep,name=archive_uris,json=archiveUris" json:"archive_uris,omitempty"` + // Optional. A mapping of property names to values, used to configure Spark. + // Properties that conflict with values set by the Cloud Dataproc API may be + // overwritten. Can include properties set in + // /etc/spark/conf/spark-defaults.conf and classes in user code. + Properties map[string]string `protobuf:"bytes,7,rep,name=properties" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Optional. The runtime log config for job execution. + LoggingConfig *LoggingConfig `protobuf:"bytes,8,opt,name=logging_config,json=loggingConfig" json:"logging_config,omitempty"` +} + +func (m *SparkJob) Reset() { *m = SparkJob{} } +func (m *SparkJob) String() string { return proto.CompactTextString(m) } +func (*SparkJob) ProtoMessage() {} +func (*SparkJob) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +type isSparkJob_Driver interface { + isSparkJob_Driver() +} + +type SparkJob_MainJarFileUri struct { + MainJarFileUri string `protobuf:"bytes,1,opt,name=main_jar_file_uri,json=mainJarFileUri,oneof"` +} +type SparkJob_MainClass struct { + MainClass string `protobuf:"bytes,2,opt,name=main_class,json=mainClass,oneof"` +} + +func (*SparkJob_MainJarFileUri) isSparkJob_Driver() {} +func (*SparkJob_MainClass) isSparkJob_Driver() {} + +func (m *SparkJob) GetDriver() isSparkJob_Driver { + if m != nil { + return m.Driver + } + return nil +} + +func (m *SparkJob) GetMainJarFileUri() string { + if x, ok := m.GetDriver().(*SparkJob_MainJarFileUri); ok { + return x.MainJarFileUri + } + return "" +} + +func (m *SparkJob) GetMainClass() string { + if x, ok := m.GetDriver().(*SparkJob_MainClass); ok { + return x.MainClass + } + return "" +} + +func (m *SparkJob) GetArgs() []string { + if m != nil { + return m.Args + } + return nil +} + +func (m *SparkJob) GetJarFileUris() []string { + if m != nil { + return m.JarFileUris + } + return nil +} + +func (m *SparkJob) GetFileUris() []string { + if m != nil { + return m.FileUris + } + return nil +} + +func (m *SparkJob) GetArchiveUris() []string { + if m != nil { + return m.ArchiveUris + } + return nil +} + +func (m *SparkJob) GetProperties() map[string]string { + if m != nil { + return m.Properties + } + return nil +} + +func (m *SparkJob) GetLoggingConfig() *LoggingConfig { + if m != nil { + return m.LoggingConfig + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*SparkJob) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _SparkJob_OneofMarshaler, _SparkJob_OneofUnmarshaler, _SparkJob_OneofSizer, []interface{}{ + (*SparkJob_MainJarFileUri)(nil), + (*SparkJob_MainClass)(nil), + } +} + +func _SparkJob_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*SparkJob) + // driver + switch x := m.Driver.(type) { + case *SparkJob_MainJarFileUri: + b.EncodeVarint(1<<3 | proto.WireBytes) + b.EncodeStringBytes(x.MainJarFileUri) + case *SparkJob_MainClass: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeStringBytes(x.MainClass) + case nil: + default: + return fmt.Errorf("SparkJob.Driver has unexpected type %T", x) + } + return nil +} + +func _SparkJob_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*SparkJob) + switch tag { + case 1: // driver.main_jar_file_uri + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Driver = &SparkJob_MainJarFileUri{x} + return true, err + case 2: // driver.main_class + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Driver = &SparkJob_MainClass{x} + return true, err + default: + return false, nil + } +} + +func _SparkJob_OneofSizer(msg proto.Message) (n int) { + m := msg.(*SparkJob) + // driver + switch x := m.Driver.(type) { + case *SparkJob_MainJarFileUri: + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.MainJarFileUri))) + n += len(x.MainJarFileUri) + case *SparkJob_MainClass: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.MainClass))) + n += len(x.MainClass) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A Cloud Dataproc job for running +// [Apache PySpark](https://spark.apache.org/docs/0.9.0/python-programming-guide.html) +// applications on YARN. +type PySparkJob struct { + // Required. The HCFS URI of the main Python file to use as the driver. Must + // be a .py file. + MainPythonFileUri string `protobuf:"bytes,1,opt,name=main_python_file_uri,json=mainPythonFileUri" json:"main_python_file_uri,omitempty"` + // Optional. The arguments to pass to the driver. Do not include arguments, + // such as `--conf`, that can be set as job properties, since a collision may + // occur that causes an incorrect job submission. + Args []string `protobuf:"bytes,2,rep,name=args" json:"args,omitempty"` + // Optional. HCFS file URIs of Python files to pass to the PySpark + // framework. Supported file types: .py, .egg, and .zip. + PythonFileUris []string `protobuf:"bytes,3,rep,name=python_file_uris,json=pythonFileUris" json:"python_file_uris,omitempty"` + // Optional. HCFS URIs of jar files to add to the CLASSPATHs of the + // Python driver and tasks. + JarFileUris []string `protobuf:"bytes,4,rep,name=jar_file_uris,json=jarFileUris" json:"jar_file_uris,omitempty"` + // Optional. HCFS URIs of files to be copied to the working directory of + // Python drivers and distributed tasks. Useful for naively parallel tasks. + FileUris []string `protobuf:"bytes,5,rep,name=file_uris,json=fileUris" json:"file_uris,omitempty"` + // Optional. HCFS URIs of archives to be extracted in the working directory of + // .jar, .tar, .tar.gz, .tgz, and .zip. + ArchiveUris []string `protobuf:"bytes,6,rep,name=archive_uris,json=archiveUris" json:"archive_uris,omitempty"` + // Optional. A mapping of property names to values, used to configure PySpark. + // Properties that conflict with values set by the Cloud Dataproc API may be + // overwritten. Can include properties set in + // /etc/spark/conf/spark-defaults.conf and classes in user code. + Properties map[string]string `protobuf:"bytes,7,rep,name=properties" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Optional. The runtime log config for job execution. + LoggingConfig *LoggingConfig `protobuf:"bytes,8,opt,name=logging_config,json=loggingConfig" json:"logging_config,omitempty"` +} + +func (m *PySparkJob) Reset() { *m = PySparkJob{} } +func (m *PySparkJob) String() string { return proto.CompactTextString(m) } +func (*PySparkJob) ProtoMessage() {} +func (*PySparkJob) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } + +func (m *PySparkJob) GetMainPythonFileUri() string { + if m != nil { + return m.MainPythonFileUri + } + return "" +} + +func (m *PySparkJob) GetArgs() []string { + if m != nil { + return m.Args + } + return nil +} + +func (m *PySparkJob) GetPythonFileUris() []string { + if m != nil { + return m.PythonFileUris + } + return nil +} + +func (m *PySparkJob) GetJarFileUris() []string { + if m != nil { + return m.JarFileUris + } + return nil +} + +func (m *PySparkJob) GetFileUris() []string { + if m != nil { + return m.FileUris + } + return nil +} + +func (m *PySparkJob) GetArchiveUris() []string { + if m != nil { + return m.ArchiveUris + } + return nil +} + +func (m *PySparkJob) GetProperties() map[string]string { + if m != nil { + return m.Properties + } + return nil +} + +func (m *PySparkJob) GetLoggingConfig() *LoggingConfig { + if m != nil { + return m.LoggingConfig + } + return nil +} + +// A list of queries to run on a cluster. +type QueryList struct { + // Required. The queries to execute. You do not need to terminate a query + // with a semicolon. Multiple queries can be specified in one string + // by separating each with a semicolon. Here is an example of an Cloud + // Dataproc API snippet that uses a QueryList to specify a HiveJob: + // + // "hiveJob": { + // "queryList": { + // "queries": [ + // "query1", + // "query2", + // "query3;query4", + // ] + // } + // } + Queries []string `protobuf:"bytes,1,rep,name=queries" json:"queries,omitempty"` +} + +func (m *QueryList) Reset() { *m = QueryList{} } +func (m *QueryList) String() string { return proto.CompactTextString(m) } +func (*QueryList) ProtoMessage() {} +func (*QueryList) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } + +func (m *QueryList) GetQueries() []string { + if m != nil { + return m.Queries + } + return nil +} + +// A Cloud Dataproc job for running [Apache Hive](https://hive.apache.org/) +// queries on YARN. +type HiveJob struct { + // Required. The sequence of Hive queries to execute, specified as either + // an HCFS file URI or a list of queries. + // + // Types that are valid to be assigned to Queries: + // *HiveJob_QueryFileUri + // *HiveJob_QueryList + Queries isHiveJob_Queries `protobuf_oneof:"queries"` + // Optional. Whether to continue executing queries if a query fails. + // The default value is `false`. Setting to `true` can be useful when executing + // independent parallel queries. + ContinueOnFailure bool `protobuf:"varint,3,opt,name=continue_on_failure,json=continueOnFailure" json:"continue_on_failure,omitempty"` + // Optional. Mapping of query variable names to values (equivalent to the + // Hive command: `SET name="value";`). + ScriptVariables map[string]string `protobuf:"bytes,4,rep,name=script_variables,json=scriptVariables" json:"script_variables,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Optional. A mapping of property names and values, used to configure Hive. + // Properties that conflict with values set by the Cloud Dataproc API may be + // overwritten. Can include properties set in /etc/hadoop/conf/*-site.xml, + // /etc/hive/conf/hive-site.xml, and classes in user code. + Properties map[string]string `protobuf:"bytes,5,rep,name=properties" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Optional. HCFS URIs of jar files to add to the CLASSPATH of the + // Hive server and Hadoop MapReduce (MR) tasks. Can contain Hive SerDes + // and UDFs. + JarFileUris []string `protobuf:"bytes,6,rep,name=jar_file_uris,json=jarFileUris" json:"jar_file_uris,omitempty"` +} + +func (m *HiveJob) Reset() { *m = HiveJob{} } +func (m *HiveJob) String() string { return proto.CompactTextString(m) } +func (*HiveJob) ProtoMessage() {} +func (*HiveJob) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } + +type isHiveJob_Queries interface { + isHiveJob_Queries() +} + +type HiveJob_QueryFileUri struct { + QueryFileUri string `protobuf:"bytes,1,opt,name=query_file_uri,json=queryFileUri,oneof"` +} +type HiveJob_QueryList struct { + QueryList *QueryList `protobuf:"bytes,2,opt,name=query_list,json=queryList,oneof"` +} + +func (*HiveJob_QueryFileUri) isHiveJob_Queries() {} +func (*HiveJob_QueryList) isHiveJob_Queries() {} + +func (m *HiveJob) GetQueries() isHiveJob_Queries { + if m != nil { + return m.Queries + } + return nil +} + +func (m *HiveJob) GetQueryFileUri() string { + if x, ok := m.GetQueries().(*HiveJob_QueryFileUri); ok { + return x.QueryFileUri + } + return "" +} + +func (m *HiveJob) GetQueryList() *QueryList { + if x, ok := m.GetQueries().(*HiveJob_QueryList); ok { + return x.QueryList + } + return nil +} + +func (m *HiveJob) GetContinueOnFailure() bool { + if m != nil { + return m.ContinueOnFailure + } + return false +} + +func (m *HiveJob) GetScriptVariables() map[string]string { + if m != nil { + return m.ScriptVariables + } + return nil +} + +func (m *HiveJob) GetProperties() map[string]string { + if m != nil { + return m.Properties + } + return nil +} + +func (m *HiveJob) GetJarFileUris() []string { + if m != nil { + return m.JarFileUris + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*HiveJob) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _HiveJob_OneofMarshaler, _HiveJob_OneofUnmarshaler, _HiveJob_OneofSizer, []interface{}{ + (*HiveJob_QueryFileUri)(nil), + (*HiveJob_QueryList)(nil), + } +} + +func _HiveJob_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*HiveJob) + // queries + switch x := m.Queries.(type) { + case *HiveJob_QueryFileUri: + b.EncodeVarint(1<<3 | proto.WireBytes) + b.EncodeStringBytes(x.QueryFileUri) + case *HiveJob_QueryList: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.QueryList); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("HiveJob.Queries has unexpected type %T", x) + } + return nil +} + +func _HiveJob_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*HiveJob) + switch tag { + case 1: // queries.query_file_uri + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Queries = &HiveJob_QueryFileUri{x} + return true, err + case 2: // queries.query_list + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(QueryList) + err := b.DecodeMessage(msg) + m.Queries = &HiveJob_QueryList{msg} + return true, err + default: + return false, nil + } +} + +func _HiveJob_OneofSizer(msg proto.Message) (n int) { + m := msg.(*HiveJob) + // queries + switch x := m.Queries.(type) { + case *HiveJob_QueryFileUri: + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.QueryFileUri))) + n += len(x.QueryFileUri) + case *HiveJob_QueryList: + s := proto.Size(x.QueryList) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A Cloud Dataproc job for running [Apache Spark SQL](http://spark.apache.org/sql/) +// queries. +type SparkSqlJob struct { + // Required. The sequence of Spark SQL queries to execute, specified as + // either an HCFS file URI or as a list of queries. + // + // Types that are valid to be assigned to Queries: + // *SparkSqlJob_QueryFileUri + // *SparkSqlJob_QueryList + Queries isSparkSqlJob_Queries `protobuf_oneof:"queries"` + // Optional. Mapping of query variable names to values (equivalent to the + // Spark SQL command: SET `name="value";`). + ScriptVariables map[string]string `protobuf:"bytes,3,rep,name=script_variables,json=scriptVariables" json:"script_variables,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Optional. A mapping of property names to values, used to configure + // Spark SQL's SparkConf. Properties that conflict with values set by the + // Cloud Dataproc API may be overwritten. + Properties map[string]string `protobuf:"bytes,4,rep,name=properties" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Optional. HCFS URIs of jar files to be added to the Spark CLASSPATH. + JarFileUris []string `protobuf:"bytes,56,rep,name=jar_file_uris,json=jarFileUris" json:"jar_file_uris,omitempty"` + // Optional. The runtime log config for job execution. + LoggingConfig *LoggingConfig `protobuf:"bytes,6,opt,name=logging_config,json=loggingConfig" json:"logging_config,omitempty"` +} + +func (m *SparkSqlJob) Reset() { *m = SparkSqlJob{} } +func (m *SparkSqlJob) String() string { return proto.CompactTextString(m) } +func (*SparkSqlJob) ProtoMessage() {} +func (*SparkSqlJob) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } + +type isSparkSqlJob_Queries interface { + isSparkSqlJob_Queries() +} + +type SparkSqlJob_QueryFileUri struct { + QueryFileUri string `protobuf:"bytes,1,opt,name=query_file_uri,json=queryFileUri,oneof"` +} +type SparkSqlJob_QueryList struct { + QueryList *QueryList `protobuf:"bytes,2,opt,name=query_list,json=queryList,oneof"` +} + +func (*SparkSqlJob_QueryFileUri) isSparkSqlJob_Queries() {} +func (*SparkSqlJob_QueryList) isSparkSqlJob_Queries() {} + +func (m *SparkSqlJob) GetQueries() isSparkSqlJob_Queries { + if m != nil { + return m.Queries + } + return nil +} + +func (m *SparkSqlJob) GetQueryFileUri() string { + if x, ok := m.GetQueries().(*SparkSqlJob_QueryFileUri); ok { + return x.QueryFileUri + } + return "" +} + +func (m *SparkSqlJob) GetQueryList() *QueryList { + if x, ok := m.GetQueries().(*SparkSqlJob_QueryList); ok { + return x.QueryList + } + return nil +} + +func (m *SparkSqlJob) GetScriptVariables() map[string]string { + if m != nil { + return m.ScriptVariables + } + return nil +} + +func (m *SparkSqlJob) GetProperties() map[string]string { + if m != nil { + return m.Properties + } + return nil +} + +func (m *SparkSqlJob) GetJarFileUris() []string { + if m != nil { + return m.JarFileUris + } + return nil +} + +func (m *SparkSqlJob) GetLoggingConfig() *LoggingConfig { + if m != nil { + return m.LoggingConfig + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*SparkSqlJob) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _SparkSqlJob_OneofMarshaler, _SparkSqlJob_OneofUnmarshaler, _SparkSqlJob_OneofSizer, []interface{}{ + (*SparkSqlJob_QueryFileUri)(nil), + (*SparkSqlJob_QueryList)(nil), + } +} + +func _SparkSqlJob_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*SparkSqlJob) + // queries + switch x := m.Queries.(type) { + case *SparkSqlJob_QueryFileUri: + b.EncodeVarint(1<<3 | proto.WireBytes) + b.EncodeStringBytes(x.QueryFileUri) + case *SparkSqlJob_QueryList: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.QueryList); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("SparkSqlJob.Queries has unexpected type %T", x) + } + return nil +} + +func _SparkSqlJob_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*SparkSqlJob) + switch tag { + case 1: // queries.query_file_uri + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Queries = &SparkSqlJob_QueryFileUri{x} + return true, err + case 2: // queries.query_list + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(QueryList) + err := b.DecodeMessage(msg) + m.Queries = &SparkSqlJob_QueryList{msg} + return true, err + default: + return false, nil + } +} + +func _SparkSqlJob_OneofSizer(msg proto.Message) (n int) { + m := msg.(*SparkSqlJob) + // queries + switch x := m.Queries.(type) { + case *SparkSqlJob_QueryFileUri: + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.QueryFileUri))) + n += len(x.QueryFileUri) + case *SparkSqlJob_QueryList: + s := proto.Size(x.QueryList) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A Cloud Dataproc job for running [Apache Pig](https://pig.apache.org/) +// queries on YARN. +type PigJob struct { + // Required. The sequence of Pig queries to execute, specified as an HCFS + // file URI or a list of queries. + // + // Types that are valid to be assigned to Queries: + // *PigJob_QueryFileUri + // *PigJob_QueryList + Queries isPigJob_Queries `protobuf_oneof:"queries"` + // Optional. Whether to continue executing queries if a query fails. + // The default value is `false`. Setting to `true` can be useful when executing + // independent parallel queries. + ContinueOnFailure bool `protobuf:"varint,3,opt,name=continue_on_failure,json=continueOnFailure" json:"continue_on_failure,omitempty"` + // Optional. Mapping of query variable names to values (equivalent to the Pig + // command: `name=[value]`). + ScriptVariables map[string]string `protobuf:"bytes,4,rep,name=script_variables,json=scriptVariables" json:"script_variables,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Optional. A mapping of property names to values, used to configure Pig. + // Properties that conflict with values set by the Cloud Dataproc API may be + // overwritten. Can include properties set in /etc/hadoop/conf/*-site.xml, + // /etc/pig/conf/pig.properties, and classes in user code. + Properties map[string]string `protobuf:"bytes,5,rep,name=properties" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Optional. HCFS URIs of jar files to add to the CLASSPATH of + // the Pig Client and Hadoop MapReduce (MR) tasks. Can contain Pig UDFs. + JarFileUris []string `protobuf:"bytes,6,rep,name=jar_file_uris,json=jarFileUris" json:"jar_file_uris,omitempty"` + // Optional. The runtime log config for job execution. + LoggingConfig *LoggingConfig `protobuf:"bytes,7,opt,name=logging_config,json=loggingConfig" json:"logging_config,omitempty"` +} + +func (m *PigJob) Reset() { *m = PigJob{} } +func (m *PigJob) String() string { return proto.CompactTextString(m) } +func (*PigJob) ProtoMessage() {} +func (*PigJob) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} } + +type isPigJob_Queries interface { + isPigJob_Queries() +} + +type PigJob_QueryFileUri struct { + QueryFileUri string `protobuf:"bytes,1,opt,name=query_file_uri,json=queryFileUri,oneof"` +} +type PigJob_QueryList struct { + QueryList *QueryList `protobuf:"bytes,2,opt,name=query_list,json=queryList,oneof"` +} + +func (*PigJob_QueryFileUri) isPigJob_Queries() {} +func (*PigJob_QueryList) isPigJob_Queries() {} + +func (m *PigJob) GetQueries() isPigJob_Queries { + if m != nil { + return m.Queries + } + return nil +} + +func (m *PigJob) GetQueryFileUri() string { + if x, ok := m.GetQueries().(*PigJob_QueryFileUri); ok { + return x.QueryFileUri + } + return "" +} + +func (m *PigJob) GetQueryList() *QueryList { + if x, ok := m.GetQueries().(*PigJob_QueryList); ok { + return x.QueryList + } + return nil +} + +func (m *PigJob) GetContinueOnFailure() bool { + if m != nil { + return m.ContinueOnFailure + } + return false +} + +func (m *PigJob) GetScriptVariables() map[string]string { + if m != nil { + return m.ScriptVariables + } + return nil +} + +func (m *PigJob) GetProperties() map[string]string { + if m != nil { + return m.Properties + } + return nil +} + +func (m *PigJob) GetJarFileUris() []string { + if m != nil { + return m.JarFileUris + } + return nil +} + +func (m *PigJob) GetLoggingConfig() *LoggingConfig { + if m != nil { + return m.LoggingConfig + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*PigJob) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _PigJob_OneofMarshaler, _PigJob_OneofUnmarshaler, _PigJob_OneofSizer, []interface{}{ + (*PigJob_QueryFileUri)(nil), + (*PigJob_QueryList)(nil), + } +} + +func _PigJob_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*PigJob) + // queries + switch x := m.Queries.(type) { + case *PigJob_QueryFileUri: + b.EncodeVarint(1<<3 | proto.WireBytes) + b.EncodeStringBytes(x.QueryFileUri) + case *PigJob_QueryList: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.QueryList); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("PigJob.Queries has unexpected type %T", x) + } + return nil +} + +func _PigJob_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*PigJob) + switch tag { + case 1: // queries.query_file_uri + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Queries = &PigJob_QueryFileUri{x} + return true, err + case 2: // queries.query_list + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(QueryList) + err := b.DecodeMessage(msg) + m.Queries = &PigJob_QueryList{msg} + return true, err + default: + return false, nil + } +} + +func _PigJob_OneofSizer(msg proto.Message) (n int) { + m := msg.(*PigJob) + // queries + switch x := m.Queries.(type) { + case *PigJob_QueryFileUri: + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.QueryFileUri))) + n += len(x.QueryFileUri) + case *PigJob_QueryList: + s := proto.Size(x.QueryList) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Cloud Dataproc job config. +type JobPlacement struct { + // Required. The name of the cluster where the job will be submitted. + ClusterName string `protobuf:"bytes,1,opt,name=cluster_name,json=clusterName" json:"cluster_name,omitempty"` + // Output-only. A cluster UUID generated by the Cloud Dataproc service when + // the job is submitted. + ClusterUuid string `protobuf:"bytes,2,opt,name=cluster_uuid,json=clusterUuid" json:"cluster_uuid,omitempty"` +} + +func (m *JobPlacement) Reset() { *m = JobPlacement{} } +func (m *JobPlacement) String() string { return proto.CompactTextString(m) } +func (*JobPlacement) ProtoMessage() {} +func (*JobPlacement) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} } + +func (m *JobPlacement) GetClusterName() string { + if m != nil { + return m.ClusterName + } + return "" +} + +func (m *JobPlacement) GetClusterUuid() string { + if m != nil { + return m.ClusterUuid + } + return "" +} + +// Cloud Dataproc job status. +type JobStatus struct { + // Output-only. A state message specifying the overall job state. + State JobStatus_State `protobuf:"varint,1,opt,name=state,enum=google.cloud.dataproc.v1beta2.JobStatus_State" json:"state,omitempty"` + // Output-only. Optional job state details, such as an error + // description if the state is ERROR. + Details string `protobuf:"bytes,2,opt,name=details" json:"details,omitempty"` + // Output-only. The time when this state was entered. + StateStartTime *google_protobuf5.Timestamp `protobuf:"bytes,6,opt,name=state_start_time,json=stateStartTime" json:"state_start_time,omitempty"` + // Output-only. Additional state information, which includes + // status reported by the agent. + Substate JobStatus_Substate `protobuf:"varint,7,opt,name=substate,enum=google.cloud.dataproc.v1beta2.JobStatus_Substate" json:"substate,omitempty"` +} + +func (m *JobStatus) Reset() { *m = JobStatus{} } +func (m *JobStatus) String() string { return proto.CompactTextString(m) } +func (*JobStatus) ProtoMessage() {} +func (*JobStatus) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{9} } + +func (m *JobStatus) GetState() JobStatus_State { + if m != nil { + return m.State + } + return JobStatus_STATE_UNSPECIFIED +} + +func (m *JobStatus) GetDetails() string { + if m != nil { + return m.Details + } + return "" +} + +func (m *JobStatus) GetStateStartTime() *google_protobuf5.Timestamp { + if m != nil { + return m.StateStartTime + } + return nil +} + +func (m *JobStatus) GetSubstate() JobStatus_Substate { + if m != nil { + return m.Substate + } + return JobStatus_UNSPECIFIED +} + +// Encapsulates the full scoping used to reference a job. +type JobReference struct { + // Required. The ID of the Google Cloud Platform project that the job + // belongs to. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Optional. The job ID, which must be unique within the project. The job ID + // is generated by the server upon job submission or provided by the user as a + // means to perform retries without creating duplicate jobs. The ID must + // contain only letters (a-z, A-Z), numbers (0-9), underscores (_), or + // hyphens (-). The maximum length is 100 characters. + JobId string `protobuf:"bytes,2,opt,name=job_id,json=jobId" json:"job_id,omitempty"` +} + +func (m *JobReference) Reset() { *m = JobReference{} } +func (m *JobReference) String() string { return proto.CompactTextString(m) } +func (*JobReference) ProtoMessage() {} +func (*JobReference) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{10} } + +func (m *JobReference) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *JobReference) GetJobId() string { + if m != nil { + return m.JobId + } + return "" +} + +// A YARN application created by a job. Application information is a subset of +// org.apache.hadoop.yarn.proto.YarnProtos.ApplicationReportProto. +// +// **Beta Feature**: This report is available for testing purposes only. It may +// be changed before final release. +type YarnApplication struct { + // Required. The application name. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Required. The application state. + State YarnApplication_State `protobuf:"varint,2,opt,name=state,enum=google.cloud.dataproc.v1beta2.YarnApplication_State" json:"state,omitempty"` + // Required. The numerical progress of the application, from 1 to 100. + Progress float32 `protobuf:"fixed32,3,opt,name=progress" json:"progress,omitempty"` + // Optional. The HTTP URL of the ApplicationMaster, HistoryServer, or + // TimelineServer that provides application-specific information. The URL uses + // the internal hostname, and requires a proxy server for resolution and, + // possibly, access. + TrackingUrl string `protobuf:"bytes,4,opt,name=tracking_url,json=trackingUrl" json:"tracking_url,omitempty"` +} + +func (m *YarnApplication) Reset() { *m = YarnApplication{} } +func (m *YarnApplication) String() string { return proto.CompactTextString(m) } +func (*YarnApplication) ProtoMessage() {} +func (*YarnApplication) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{11} } + +func (m *YarnApplication) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *YarnApplication) GetState() YarnApplication_State { + if m != nil { + return m.State + } + return YarnApplication_STATE_UNSPECIFIED +} + +func (m *YarnApplication) GetProgress() float32 { + if m != nil { + return m.Progress + } + return 0 +} + +func (m *YarnApplication) GetTrackingUrl() string { + if m != nil { + return m.TrackingUrl + } + return "" +} + +// A Cloud Dataproc job resource. +type Job struct { + // Optional. The fully qualified reference to the job, which can be used to + // obtain the equivalent REST path of the job resource. If this property + // is not specified when a job is created, the server generates a + // job_id. + Reference *JobReference `protobuf:"bytes,1,opt,name=reference" json:"reference,omitempty"` + // Required. Job information, including how, when, and where to + // run the job. + Placement *JobPlacement `protobuf:"bytes,2,opt,name=placement" json:"placement,omitempty"` + // Required. The application/framework-specific portion of the job. + // + // Types that are valid to be assigned to TypeJob: + // *Job_HadoopJob + // *Job_SparkJob + // *Job_PysparkJob + // *Job_HiveJob + // *Job_PigJob + // *Job_SparkSqlJob + TypeJob isJob_TypeJob `protobuf_oneof:"type_job"` + // Output-only. The job status. Additional application-specific + // status information may be contained in the type_job + // and yarn_applications fields. + Status *JobStatus `protobuf:"bytes,8,opt,name=status" json:"status,omitempty"` + // Output-only. The previous job status. + StatusHistory []*JobStatus `protobuf:"bytes,13,rep,name=status_history,json=statusHistory" json:"status_history,omitempty"` + // Output-only. The collection of YARN applications spun up by this job. + // + // **Beta** Feature: This report is available for testing purposes only. It may + // be changed before final release. + YarnApplications []*YarnApplication `protobuf:"bytes,9,rep,name=yarn_applications,json=yarnApplications" json:"yarn_applications,omitempty"` + // Output-only. A URI pointing to the location of the stdout of the job's + // driver program. + DriverOutputResourceUri string `protobuf:"bytes,17,opt,name=driver_output_resource_uri,json=driverOutputResourceUri" json:"driver_output_resource_uri,omitempty"` + // Output-only. If present, the location of miscellaneous control files + // which may be used as part of job setup and handling. If not present, + // control files may be placed in the same location as `driver_output_uri`. + DriverControlFilesUri string `protobuf:"bytes,15,opt,name=driver_control_files_uri,json=driverControlFilesUri" json:"driver_control_files_uri,omitempty"` + // Optional. The labels to associate with this job. + // Label **keys** must contain 1 to 63 characters, and must conform to + // [RFC 1035](https://www.ietf.org/rfc/rfc1035.txt). + // Label **values** may be empty, but, if present, must contain 1 to 63 + // characters, and must conform to [RFC 1035](https://www.ietf.org/rfc/rfc1035.txt). + // No more than 32 labels can be associated with a job. + Labels map[string]string `protobuf:"bytes,18,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Optional. Job scheduling configuration. + Scheduling *JobScheduling `protobuf:"bytes,20,opt,name=scheduling" json:"scheduling,omitempty"` +} + +func (m *Job) Reset() { *m = Job{} } +func (m *Job) String() string { return proto.CompactTextString(m) } +func (*Job) ProtoMessage() {} +func (*Job) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{12} } + +type isJob_TypeJob interface { + isJob_TypeJob() +} + +type Job_HadoopJob struct { + HadoopJob *HadoopJob `protobuf:"bytes,3,opt,name=hadoop_job,json=hadoopJob,oneof"` +} +type Job_SparkJob struct { + SparkJob *SparkJob `protobuf:"bytes,4,opt,name=spark_job,json=sparkJob,oneof"` +} +type Job_PysparkJob struct { + PysparkJob *PySparkJob `protobuf:"bytes,5,opt,name=pyspark_job,json=pysparkJob,oneof"` +} +type Job_HiveJob struct { + HiveJob *HiveJob `protobuf:"bytes,6,opt,name=hive_job,json=hiveJob,oneof"` +} +type Job_PigJob struct { + PigJob *PigJob `protobuf:"bytes,7,opt,name=pig_job,json=pigJob,oneof"` +} +type Job_SparkSqlJob struct { + SparkSqlJob *SparkSqlJob `protobuf:"bytes,12,opt,name=spark_sql_job,json=sparkSqlJob,oneof"` +} + +func (*Job_HadoopJob) isJob_TypeJob() {} +func (*Job_SparkJob) isJob_TypeJob() {} +func (*Job_PysparkJob) isJob_TypeJob() {} +func (*Job_HiveJob) isJob_TypeJob() {} +func (*Job_PigJob) isJob_TypeJob() {} +func (*Job_SparkSqlJob) isJob_TypeJob() {} + +func (m *Job) GetTypeJob() isJob_TypeJob { + if m != nil { + return m.TypeJob + } + return nil +} + +func (m *Job) GetReference() *JobReference { + if m != nil { + return m.Reference + } + return nil +} + +func (m *Job) GetPlacement() *JobPlacement { + if m != nil { + return m.Placement + } + return nil +} + +func (m *Job) GetHadoopJob() *HadoopJob { + if x, ok := m.GetTypeJob().(*Job_HadoopJob); ok { + return x.HadoopJob + } + return nil +} + +func (m *Job) GetSparkJob() *SparkJob { + if x, ok := m.GetTypeJob().(*Job_SparkJob); ok { + return x.SparkJob + } + return nil +} + +func (m *Job) GetPysparkJob() *PySparkJob { + if x, ok := m.GetTypeJob().(*Job_PysparkJob); ok { + return x.PysparkJob + } + return nil +} + +func (m *Job) GetHiveJob() *HiveJob { + if x, ok := m.GetTypeJob().(*Job_HiveJob); ok { + return x.HiveJob + } + return nil +} + +func (m *Job) GetPigJob() *PigJob { + if x, ok := m.GetTypeJob().(*Job_PigJob); ok { + return x.PigJob + } + return nil +} + +func (m *Job) GetSparkSqlJob() *SparkSqlJob { + if x, ok := m.GetTypeJob().(*Job_SparkSqlJob); ok { + return x.SparkSqlJob + } + return nil +} + +func (m *Job) GetStatus() *JobStatus { + if m != nil { + return m.Status + } + return nil +} + +func (m *Job) GetStatusHistory() []*JobStatus { + if m != nil { + return m.StatusHistory + } + return nil +} + +func (m *Job) GetYarnApplications() []*YarnApplication { + if m != nil { + return m.YarnApplications + } + return nil +} + +func (m *Job) GetDriverOutputResourceUri() string { + if m != nil { + return m.DriverOutputResourceUri + } + return "" +} + +func (m *Job) GetDriverControlFilesUri() string { + if m != nil { + return m.DriverControlFilesUri + } + return "" +} + +func (m *Job) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +func (m *Job) GetScheduling() *JobScheduling { + if m != nil { + return m.Scheduling + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Job) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Job_OneofMarshaler, _Job_OneofUnmarshaler, _Job_OneofSizer, []interface{}{ + (*Job_HadoopJob)(nil), + (*Job_SparkJob)(nil), + (*Job_PysparkJob)(nil), + (*Job_HiveJob)(nil), + (*Job_PigJob)(nil), + (*Job_SparkSqlJob)(nil), + } +} + +func _Job_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Job) + // type_job + switch x := m.TypeJob.(type) { + case *Job_HadoopJob: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.HadoopJob); err != nil { + return err + } + case *Job_SparkJob: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.SparkJob); err != nil { + return err + } + case *Job_PysparkJob: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.PysparkJob); err != nil { + return err + } + case *Job_HiveJob: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.HiveJob); err != nil { + return err + } + case *Job_PigJob: + b.EncodeVarint(7<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.PigJob); err != nil { + return err + } + case *Job_SparkSqlJob: + b.EncodeVarint(12<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.SparkSqlJob); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Job.TypeJob has unexpected type %T", x) + } + return nil +} + +func _Job_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Job) + switch tag { + case 3: // type_job.hadoop_job + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(HadoopJob) + err := b.DecodeMessage(msg) + m.TypeJob = &Job_HadoopJob{msg} + return true, err + case 4: // type_job.spark_job + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(SparkJob) + err := b.DecodeMessage(msg) + m.TypeJob = &Job_SparkJob{msg} + return true, err + case 5: // type_job.pyspark_job + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PySparkJob) + err := b.DecodeMessage(msg) + m.TypeJob = &Job_PysparkJob{msg} + return true, err + case 6: // type_job.hive_job + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(HiveJob) + err := b.DecodeMessage(msg) + m.TypeJob = &Job_HiveJob{msg} + return true, err + case 7: // type_job.pig_job + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PigJob) + err := b.DecodeMessage(msg) + m.TypeJob = &Job_PigJob{msg} + return true, err + case 12: // type_job.spark_sql_job + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(SparkSqlJob) + err := b.DecodeMessage(msg) + m.TypeJob = &Job_SparkSqlJob{msg} + return true, err + default: + return false, nil + } +} + +func _Job_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Job) + // type_job + switch x := m.TypeJob.(type) { + case *Job_HadoopJob: + s := proto.Size(x.HadoopJob) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Job_SparkJob: + s := proto.Size(x.SparkJob) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Job_PysparkJob: + s := proto.Size(x.PysparkJob) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Job_HiveJob: + s := proto.Size(x.HiveJob) + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Job_PigJob: + s := proto.Size(x.PigJob) + n += proto.SizeVarint(7<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Job_SparkSqlJob: + s := proto.Size(x.SparkSqlJob) + n += proto.SizeVarint(12<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Job scheduling options. +// +// **Beta Feature**: These options are available for testing purposes only. +// They may be changed before final release. +type JobScheduling struct { + // Optional. Maximum number of times per hour a driver may be restarted as + // a result of driver terminating with non-zero code before job is + // reported failed. + // + // A job may be reported as thrashing if driver exits with non-zero code + // 4 times within 10 minute window. + // + // Maximum value is 10. + MaxFailuresPerHour int32 `protobuf:"varint,1,opt,name=max_failures_per_hour,json=maxFailuresPerHour" json:"max_failures_per_hour,omitempty"` +} + +func (m *JobScheduling) Reset() { *m = JobScheduling{} } +func (m *JobScheduling) String() string { return proto.CompactTextString(m) } +func (*JobScheduling) ProtoMessage() {} +func (*JobScheduling) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{13} } + +func (m *JobScheduling) GetMaxFailuresPerHour() int32 { + if m != nil { + return m.MaxFailuresPerHour + } + return 0 +} + +// A request to submit a job. +type SubmitJobRequest struct { + // Required. The ID of the Google Cloud Platform project that the job + // belongs to. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Required. The Cloud Dataproc region in which to handle the request. + Region string `protobuf:"bytes,3,opt,name=region" json:"region,omitempty"` + // Required. The job resource. + Job *Job `protobuf:"bytes,2,opt,name=job" json:"job,omitempty"` +} + +func (m *SubmitJobRequest) Reset() { *m = SubmitJobRequest{} } +func (m *SubmitJobRequest) String() string { return proto.CompactTextString(m) } +func (*SubmitJobRequest) ProtoMessage() {} +func (*SubmitJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{14} } + +func (m *SubmitJobRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *SubmitJobRequest) GetRegion() string { + if m != nil { + return m.Region + } + return "" +} + +func (m *SubmitJobRequest) GetJob() *Job { + if m != nil { + return m.Job + } + return nil +} + +// A request to get the resource representation for a job in a project. +type GetJobRequest struct { + // Required. The ID of the Google Cloud Platform project that the job + // belongs to. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Required. The Cloud Dataproc region in which to handle the request. + Region string `protobuf:"bytes,3,opt,name=region" json:"region,omitempty"` + // Required. The job ID. + JobId string `protobuf:"bytes,2,opt,name=job_id,json=jobId" json:"job_id,omitempty"` +} + +func (m *GetJobRequest) Reset() { *m = GetJobRequest{} } +func (m *GetJobRequest) String() string { return proto.CompactTextString(m) } +func (*GetJobRequest) ProtoMessage() {} +func (*GetJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{15} } + +func (m *GetJobRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *GetJobRequest) GetRegion() string { + if m != nil { + return m.Region + } + return "" +} + +func (m *GetJobRequest) GetJobId() string { + if m != nil { + return m.JobId + } + return "" +} + +// A request to list jobs in a project. +type ListJobsRequest struct { + // Required. The ID of the Google Cloud Platform project that the job + // belongs to. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Required. The Cloud Dataproc region in which to handle the request. + Region string `protobuf:"bytes,6,opt,name=region" json:"region,omitempty"` + // Optional. The number of results to return in each response. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // Optional. The page token, returned by a previous call, to request the + // next page of results. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // Optional. If set, the returned jobs list includes only jobs that were + // submitted to the named cluster. + ClusterName string `protobuf:"bytes,4,opt,name=cluster_name,json=clusterName" json:"cluster_name,omitempty"` + // Optional. Specifies enumerated categories of jobs to list. + // (default = match ALL jobs). + // + // If `filter` is provided, `jobStateMatcher` will be ignored. + JobStateMatcher ListJobsRequest_JobStateMatcher `protobuf:"varint,5,opt,name=job_state_matcher,json=jobStateMatcher,enum=google.cloud.dataproc.v1beta2.ListJobsRequest_JobStateMatcher" json:"job_state_matcher,omitempty"` + // Optional. A filter constraining the jobs to list. Filters are + // case-sensitive and have the following syntax: + // + // [field = value] AND [field [= value]] ... + // + // where **field** is `status.state` or `labels.[KEY]`, and `[KEY]` is a label + // key. **value** can be `*` to match all values. + // `status.state` can be either `ACTIVE` or `NON_ACTIVE`. + // Only the logical `AND` operator is supported; space-separated items are + // treated as having an implicit `AND` operator. + // + // Example filter: + // + // status.state = ACTIVE AND labels.env = staging AND labels.starred = * + Filter string `protobuf:"bytes,7,opt,name=filter" json:"filter,omitempty"` +} + +func (m *ListJobsRequest) Reset() { *m = ListJobsRequest{} } +func (m *ListJobsRequest) String() string { return proto.CompactTextString(m) } +func (*ListJobsRequest) ProtoMessage() {} +func (*ListJobsRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{16} } + +func (m *ListJobsRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *ListJobsRequest) GetRegion() string { + if m != nil { + return m.Region + } + return "" +} + +func (m *ListJobsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListJobsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListJobsRequest) GetClusterName() string { + if m != nil { + return m.ClusterName + } + return "" +} + +func (m *ListJobsRequest) GetJobStateMatcher() ListJobsRequest_JobStateMatcher { + if m != nil { + return m.JobStateMatcher + } + return ListJobsRequest_ALL +} + +func (m *ListJobsRequest) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +// A request to update a job. +type UpdateJobRequest struct { + // Required. The ID of the Google Cloud Platform project that the job + // belongs to. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Required. The Cloud Dataproc region in which to handle the request. + Region string `protobuf:"bytes,2,opt,name=region" json:"region,omitempty"` + // Required. The job ID. + JobId string `protobuf:"bytes,3,opt,name=job_id,json=jobId" json:"job_id,omitempty"` + // Required. The changes to the job. + Job *Job `protobuf:"bytes,4,opt,name=job" json:"job,omitempty"` + // Required. Specifies the path, relative to Job, of + // the field to update. For example, to update the labels of a Job the + // update_mask parameter would be specified as + // labels, and the `PATCH` request body would specify the new + // value. Note: Currently, labels is the only + // field that can be updated. + UpdateMask *google_protobuf4.FieldMask `protobuf:"bytes,5,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateJobRequest) Reset() { *m = UpdateJobRequest{} } +func (m *UpdateJobRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateJobRequest) ProtoMessage() {} +func (*UpdateJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{17} } + +func (m *UpdateJobRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *UpdateJobRequest) GetRegion() string { + if m != nil { + return m.Region + } + return "" +} + +func (m *UpdateJobRequest) GetJobId() string { + if m != nil { + return m.JobId + } + return "" +} + +func (m *UpdateJobRequest) GetJob() *Job { + if m != nil { + return m.Job + } + return nil +} + +func (m *UpdateJobRequest) GetUpdateMask() *google_protobuf4.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +// A list of jobs in a project. +type ListJobsResponse struct { + // Output-only. Jobs list. + Jobs []*Job `protobuf:"bytes,1,rep,name=jobs" json:"jobs,omitempty"` + // Optional. This token is included in the response if there are more results + // to fetch. To fetch additional results, provide this value as the + // `page_token` in a subsequent ListJobsRequest. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListJobsResponse) Reset() { *m = ListJobsResponse{} } +func (m *ListJobsResponse) String() string { return proto.CompactTextString(m) } +func (*ListJobsResponse) ProtoMessage() {} +func (*ListJobsResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{18} } + +func (m *ListJobsResponse) GetJobs() []*Job { + if m != nil { + return m.Jobs + } + return nil +} + +func (m *ListJobsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// A request to cancel a job. +type CancelJobRequest struct { + // Required. The ID of the Google Cloud Platform project that the job + // belongs to. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Required. The Cloud Dataproc region in which to handle the request. + Region string `protobuf:"bytes,3,opt,name=region" json:"region,omitempty"` + // Required. The job ID. + JobId string `protobuf:"bytes,2,opt,name=job_id,json=jobId" json:"job_id,omitempty"` +} + +func (m *CancelJobRequest) Reset() { *m = CancelJobRequest{} } +func (m *CancelJobRequest) String() string { return proto.CompactTextString(m) } +func (*CancelJobRequest) ProtoMessage() {} +func (*CancelJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{19} } + +func (m *CancelJobRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *CancelJobRequest) GetRegion() string { + if m != nil { + return m.Region + } + return "" +} + +func (m *CancelJobRequest) GetJobId() string { + if m != nil { + return m.JobId + } + return "" +} + +// A request to delete a job. +type DeleteJobRequest struct { + // Required. The ID of the Google Cloud Platform project that the job + // belongs to. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Required. The Cloud Dataproc region in which to handle the request. + Region string `protobuf:"bytes,3,opt,name=region" json:"region,omitempty"` + // Required. The job ID. + JobId string `protobuf:"bytes,2,opt,name=job_id,json=jobId" json:"job_id,omitempty"` +} + +func (m *DeleteJobRequest) Reset() { *m = DeleteJobRequest{} } +func (m *DeleteJobRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteJobRequest) ProtoMessage() {} +func (*DeleteJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{20} } + +func (m *DeleteJobRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *DeleteJobRequest) GetRegion() string { + if m != nil { + return m.Region + } + return "" +} + +func (m *DeleteJobRequest) GetJobId() string { + if m != nil { + return m.JobId + } + return "" +} + +func init() { + proto.RegisterType((*LoggingConfig)(nil), "google.cloud.dataproc.v1beta2.LoggingConfig") + proto.RegisterType((*HadoopJob)(nil), "google.cloud.dataproc.v1beta2.HadoopJob") + proto.RegisterType((*SparkJob)(nil), "google.cloud.dataproc.v1beta2.SparkJob") + proto.RegisterType((*PySparkJob)(nil), "google.cloud.dataproc.v1beta2.PySparkJob") + proto.RegisterType((*QueryList)(nil), "google.cloud.dataproc.v1beta2.QueryList") + proto.RegisterType((*HiveJob)(nil), "google.cloud.dataproc.v1beta2.HiveJob") + proto.RegisterType((*SparkSqlJob)(nil), "google.cloud.dataproc.v1beta2.SparkSqlJob") + proto.RegisterType((*PigJob)(nil), "google.cloud.dataproc.v1beta2.PigJob") + proto.RegisterType((*JobPlacement)(nil), "google.cloud.dataproc.v1beta2.JobPlacement") + proto.RegisterType((*JobStatus)(nil), "google.cloud.dataproc.v1beta2.JobStatus") + proto.RegisterType((*JobReference)(nil), "google.cloud.dataproc.v1beta2.JobReference") + proto.RegisterType((*YarnApplication)(nil), "google.cloud.dataproc.v1beta2.YarnApplication") + proto.RegisterType((*Job)(nil), "google.cloud.dataproc.v1beta2.Job") + proto.RegisterType((*JobScheduling)(nil), "google.cloud.dataproc.v1beta2.JobScheduling") + proto.RegisterType((*SubmitJobRequest)(nil), "google.cloud.dataproc.v1beta2.SubmitJobRequest") + proto.RegisterType((*GetJobRequest)(nil), "google.cloud.dataproc.v1beta2.GetJobRequest") + proto.RegisterType((*ListJobsRequest)(nil), "google.cloud.dataproc.v1beta2.ListJobsRequest") + proto.RegisterType((*UpdateJobRequest)(nil), "google.cloud.dataproc.v1beta2.UpdateJobRequest") + proto.RegisterType((*ListJobsResponse)(nil), "google.cloud.dataproc.v1beta2.ListJobsResponse") + proto.RegisterType((*CancelJobRequest)(nil), "google.cloud.dataproc.v1beta2.CancelJobRequest") + proto.RegisterType((*DeleteJobRequest)(nil), "google.cloud.dataproc.v1beta2.DeleteJobRequest") + proto.RegisterEnum("google.cloud.dataproc.v1beta2.LoggingConfig_Level", LoggingConfig_Level_name, LoggingConfig_Level_value) + proto.RegisterEnum("google.cloud.dataproc.v1beta2.JobStatus_State", JobStatus_State_name, JobStatus_State_value) + proto.RegisterEnum("google.cloud.dataproc.v1beta2.JobStatus_Substate", JobStatus_Substate_name, JobStatus_Substate_value) + proto.RegisterEnum("google.cloud.dataproc.v1beta2.YarnApplication_State", YarnApplication_State_name, YarnApplication_State_value) + proto.RegisterEnum("google.cloud.dataproc.v1beta2.ListJobsRequest_JobStateMatcher", ListJobsRequest_JobStateMatcher_name, ListJobsRequest_JobStateMatcher_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for JobController service + +type JobControllerClient interface { + // Submits a job to a cluster. + SubmitJob(ctx context.Context, in *SubmitJobRequest, opts ...grpc.CallOption) (*Job, error) + // Gets the resource representation for a job in a project. + GetJob(ctx context.Context, in *GetJobRequest, opts ...grpc.CallOption) (*Job, error) + // Lists regions/{region}/jobs in a project. + ListJobs(ctx context.Context, in *ListJobsRequest, opts ...grpc.CallOption) (*ListJobsResponse, error) + // Updates a job in a project. + UpdateJob(ctx context.Context, in *UpdateJobRequest, opts ...grpc.CallOption) (*Job, error) + // Starts a job cancellation request. To access the job resource + // after cancellation, call + // [regions/{region}/jobs.list](/dataproc/docs/reference/rest/v1beta2/projects.regions.jobs/list) or + // [regions/{region}/jobs.get](/dataproc/docs/reference/rest/v1beta2/projects.regions.jobs/get). + CancelJob(ctx context.Context, in *CancelJobRequest, opts ...grpc.CallOption) (*Job, error) + // Deletes the job from the project. If the job is active, the delete fails, + // and the response returns `FAILED_PRECONDITION`. + DeleteJob(ctx context.Context, in *DeleteJobRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) +} + +type jobControllerClient struct { + cc *grpc.ClientConn +} + +func NewJobControllerClient(cc *grpc.ClientConn) JobControllerClient { + return &jobControllerClient{cc} +} + +func (c *jobControllerClient) SubmitJob(ctx context.Context, in *SubmitJobRequest, opts ...grpc.CallOption) (*Job, error) { + out := new(Job) + err := grpc.Invoke(ctx, "/google.cloud.dataproc.v1beta2.JobController/SubmitJob", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *jobControllerClient) GetJob(ctx context.Context, in *GetJobRequest, opts ...grpc.CallOption) (*Job, error) { + out := new(Job) + err := grpc.Invoke(ctx, "/google.cloud.dataproc.v1beta2.JobController/GetJob", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *jobControllerClient) ListJobs(ctx context.Context, in *ListJobsRequest, opts ...grpc.CallOption) (*ListJobsResponse, error) { + out := new(ListJobsResponse) + err := grpc.Invoke(ctx, "/google.cloud.dataproc.v1beta2.JobController/ListJobs", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *jobControllerClient) UpdateJob(ctx context.Context, in *UpdateJobRequest, opts ...grpc.CallOption) (*Job, error) { + out := new(Job) + err := grpc.Invoke(ctx, "/google.cloud.dataproc.v1beta2.JobController/UpdateJob", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *jobControllerClient) CancelJob(ctx context.Context, in *CancelJobRequest, opts ...grpc.CallOption) (*Job, error) { + out := new(Job) + err := grpc.Invoke(ctx, "/google.cloud.dataproc.v1beta2.JobController/CancelJob", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *jobControllerClient) DeleteJob(ctx context.Context, in *DeleteJobRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) { + out := new(google_protobuf2.Empty) + err := grpc.Invoke(ctx, "/google.cloud.dataproc.v1beta2.JobController/DeleteJob", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for JobController service + +type JobControllerServer interface { + // Submits a job to a cluster. + SubmitJob(context.Context, *SubmitJobRequest) (*Job, error) + // Gets the resource representation for a job in a project. + GetJob(context.Context, *GetJobRequest) (*Job, error) + // Lists regions/{region}/jobs in a project. + ListJobs(context.Context, *ListJobsRequest) (*ListJobsResponse, error) + // Updates a job in a project. + UpdateJob(context.Context, *UpdateJobRequest) (*Job, error) + // Starts a job cancellation request. To access the job resource + // after cancellation, call + // [regions/{region}/jobs.list](/dataproc/docs/reference/rest/v1beta2/projects.regions.jobs/list) or + // [regions/{region}/jobs.get](/dataproc/docs/reference/rest/v1beta2/projects.regions.jobs/get). + CancelJob(context.Context, *CancelJobRequest) (*Job, error) + // Deletes the job from the project. If the job is active, the delete fails, + // and the response returns `FAILED_PRECONDITION`. + DeleteJob(context.Context, *DeleteJobRequest) (*google_protobuf2.Empty, error) +} + +func RegisterJobControllerServer(s *grpc.Server, srv JobControllerServer) { + s.RegisterService(&_JobController_serviceDesc, srv) +} + +func _JobController_SubmitJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SubmitJobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(JobControllerServer).SubmitJob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dataproc.v1beta2.JobController/SubmitJob", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(JobControllerServer).SubmitJob(ctx, req.(*SubmitJobRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _JobController_GetJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetJobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(JobControllerServer).GetJob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dataproc.v1beta2.JobController/GetJob", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(JobControllerServer).GetJob(ctx, req.(*GetJobRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _JobController_ListJobs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListJobsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(JobControllerServer).ListJobs(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dataproc.v1beta2.JobController/ListJobs", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(JobControllerServer).ListJobs(ctx, req.(*ListJobsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _JobController_UpdateJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateJobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(JobControllerServer).UpdateJob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dataproc.v1beta2.JobController/UpdateJob", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(JobControllerServer).UpdateJob(ctx, req.(*UpdateJobRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _JobController_CancelJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CancelJobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(JobControllerServer).CancelJob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dataproc.v1beta2.JobController/CancelJob", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(JobControllerServer).CancelJob(ctx, req.(*CancelJobRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _JobController_DeleteJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteJobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(JobControllerServer).DeleteJob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dataproc.v1beta2.JobController/DeleteJob", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(JobControllerServer).DeleteJob(ctx, req.(*DeleteJobRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _JobController_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.dataproc.v1beta2.JobController", + HandlerType: (*JobControllerServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "SubmitJob", + Handler: _JobController_SubmitJob_Handler, + }, + { + MethodName: "GetJob", + Handler: _JobController_GetJob_Handler, + }, + { + MethodName: "ListJobs", + Handler: _JobController_ListJobs_Handler, + }, + { + MethodName: "UpdateJob", + Handler: _JobController_UpdateJob_Handler, + }, + { + MethodName: "CancelJob", + Handler: _JobController_CancelJob_Handler, + }, + { + MethodName: "DeleteJob", + Handler: _JobController_DeleteJob_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/dataproc/v1beta2/jobs.proto", +} + +func init() { proto.RegisterFile("google/cloud/dataproc/v1beta2/jobs.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 2294 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x5a, 0xcd, 0x6f, 0xdb, 0xc8, + 0x15, 0xb7, 0xbe, 0xc5, 0x27, 0x4b, 0xa6, 0x67, 0x93, 0xad, 0xa0, 0x74, 0xb1, 0x5e, 0x02, 0x9b, + 0xba, 0xd9, 0x42, 0x42, 0xd4, 0x34, 0x9b, 0x4d, 0xba, 0xdd, 0xc8, 0x12, 0x15, 0xc9, 0x55, 0x64, + 0x2d, 0x25, 0x25, 0xdd, 0x2d, 0x0a, 0x2e, 0x25, 0x8d, 0x65, 0xca, 0x14, 0xc9, 0x70, 0x48, 0x37, + 0xda, 0x20, 0x28, 0xd0, 0x4b, 0x0f, 0x3d, 0xf6, 0x52, 0xa0, 0x40, 0x81, 0xde, 0xba, 0x40, 0x2f, + 0xbd, 0xf6, 0x1f, 0x28, 0x7a, 0x69, 0x0f, 0xfb, 0x27, 0xb4, 0x87, 0x1e, 0x7b, 0xea, 0xb9, 0x98, + 0x19, 0x52, 0x96, 0x64, 0x27, 0xa2, 0xe3, 0x7e, 0x65, 0x4f, 0x26, 0xdf, 0xd7, 0xbc, 0x99, 0xdf, + 0x6f, 0xde, 0xbc, 0xa1, 0x0c, 0xbb, 0x63, 0xcb, 0x1a, 0x1b, 0xb8, 0x34, 0x34, 0x2c, 0x6f, 0x54, + 0x1a, 0x69, 0xae, 0x66, 0x3b, 0xd6, 0xb0, 0x74, 0x72, 0x73, 0x80, 0x5d, 0xad, 0x5c, 0x9a, 0x58, + 0x03, 0x52, 0xb4, 0x1d, 0xcb, 0xb5, 0xd0, 0x5b, 0xdc, 0xb2, 0xc8, 0x2c, 0x8b, 0x81, 0x65, 0xd1, + 0xb7, 0x2c, 0x7c, 0xdd, 0x0f, 0xa4, 0xd9, 0x7a, 0x49, 0x33, 0x4d, 0xcb, 0xd5, 0x5c, 0xdd, 0x32, + 0x7d, 0xe7, 0xc2, 0x35, 0x5f, 0xcb, 0xde, 0x06, 0xde, 0x61, 0x09, 0x4f, 0x6d, 0x77, 0xe6, 0x2b, + 0x77, 0x56, 0x95, 0x87, 0x3a, 0x36, 0x46, 0xea, 0x54, 0x23, 0xc7, 0xbe, 0xc5, 0xdb, 0xab, 0x16, + 0xae, 0x3e, 0xc5, 0xc4, 0xd5, 0xa6, 0x36, 0x37, 0x90, 0xfe, 0x1e, 0x85, 0x6c, 0xcb, 0x1a, 0x8f, + 0x75, 0x73, 0x5c, 0xb5, 0xcc, 0x43, 0x7d, 0x8c, 0xa6, 0xb0, 0x3d, 0x72, 0xf4, 0x13, 0xec, 0xa8, + 0x86, 0x35, 0x56, 0x0d, 0x7c, 0x82, 0x0d, 0x92, 0x8f, 0xee, 0xc4, 0x76, 0x33, 0xe5, 0x4a, 0xf1, + 0xa5, 0x53, 0x29, 0x2e, 0x05, 0x2a, 0xd6, 0x58, 0x94, 0x96, 0x35, 0x6e, 0xb1, 0x18, 0xb2, 0xe9, + 0x3a, 0x33, 0x65, 0x6b, 0xb4, 0x2c, 0x2d, 0x9c, 0xc0, 0x95, 0xf3, 0x0c, 0x91, 0x08, 0xb1, 0x63, + 0x3c, 0xcb, 0x47, 0x76, 0x22, 0xbb, 0x82, 0x42, 0x1f, 0x51, 0x03, 0x12, 0x27, 0x9a, 0xe1, 0xe1, + 0x7c, 0x74, 0x27, 0xb2, 0x9b, 0x2b, 0x97, 0x2f, 0x94, 0x0c, 0x0b, 0xad, 0xf0, 0x00, 0x77, 0xa3, + 0x77, 0x22, 0x92, 0x0d, 0x09, 0x26, 0x43, 0x57, 0x61, 0xbb, 0x25, 0x3f, 0x92, 0x5b, 0x6a, 0xbf, + 0xdd, 0xed, 0xc8, 0xd5, 0x66, 0xbd, 0x29, 0xd7, 0xc4, 0x0d, 0x94, 0x82, 0x58, 0xa5, 0xd5, 0x12, + 0x23, 0x48, 0x80, 0x44, 0x4f, 0xa9, 0x54, 0x65, 0x31, 0x4a, 0x1f, 0x6b, 0xf2, 0x5e, 0xff, 0x81, + 0x18, 0x43, 0x69, 0x88, 0x37, 0xdb, 0xf5, 0x03, 0x31, 0x4e, 0x9f, 0x1e, 0x57, 0x94, 0xb6, 0x98, + 0xa0, 0x6a, 0x59, 0x51, 0x0e, 0x14, 0x31, 0x49, 0x1f, 0xeb, 0x95, 0x5e, 0xa5, 0x25, 0xa6, 0x68, + 0xa0, 0x83, 0x7a, 0x5d, 0x4c, 0x4b, 0x7f, 0x8a, 0x81, 0xd0, 0xd0, 0x46, 0x96, 0x65, 0xef, 0x5b, + 0x03, 0xf4, 0x1e, 0x6c, 0x4f, 0x35, 0xdd, 0x54, 0x27, 0x9a, 0xa3, 0x1e, 0xea, 0x06, 0x56, 0x3d, + 0x47, 0xe7, 0xb3, 0x6d, 0x6c, 0x28, 0x39, 0xaa, 0xda, 0xd7, 0x9c, 0xba, 0x6e, 0xe0, 0xbe, 0xa3, + 0xa3, 0xb7, 0x01, 0x98, 0xf1, 0xd0, 0xd0, 0x08, 0x61, 0xf3, 0xa7, 0x56, 0x02, 0x95, 0x55, 0xa9, + 0x08, 0x21, 0x88, 0x6b, 0xce, 0x98, 0xe4, 0x63, 0x3b, 0xb1, 0x5d, 0x41, 0x61, 0xcf, 0x48, 0x82, + 0xec, 0x62, 0x70, 0x92, 0x8f, 0x33, 0x65, 0x66, 0x32, 0x8f, 0x4b, 0xd0, 0x35, 0x10, 0x4e, 0xf5, + 0x09, 0xa6, 0x4f, 0x1f, 0x06, 0xca, 0x77, 0x60, 0x53, 0x73, 0x86, 0x47, 0xfa, 0x89, 0xaf, 0x4f, + 0x72, 0x7f, 0x5f, 0xc6, 0x4c, 0x7e, 0x00, 0x60, 0x3b, 0x96, 0x8d, 0x1d, 0x57, 0xc7, 0x24, 0x9f, + 0x62, 0x2c, 0xb9, 0xb3, 0x06, 0x98, 0xf9, 0x1a, 0x14, 0x3b, 0x73, 0x57, 0x4e, 0x8e, 0x85, 0x58, + 0xa8, 0x0b, 0x39, 0x83, 0x23, 0xa8, 0x0e, 0x19, 0x84, 0xf9, 0xf4, 0x4e, 0x64, 0x37, 0x53, 0xfe, + 0xd6, 0x45, 0x60, 0x57, 0xb2, 0xc6, 0xe2, 0x6b, 0xe1, 0x43, 0xd8, 0x5a, 0x19, 0xf3, 0x1c, 0x9e, + 0x5d, 0x59, 0xe4, 0x99, 0xb0, 0xc0, 0x99, 0xbd, 0x34, 0x24, 0x39, 0x7d, 0xa5, 0x3f, 0xc6, 0x20, + 0xdd, 0xb5, 0x35, 0xe7, 0xf8, 0xab, 0x03, 0xe5, 0xe3, 0x73, 0xa0, 0x7c, 0x7f, 0xcd, 0x62, 0x07, + 0x4b, 0xf0, 0x1a, 0x23, 0xf9, 0xe7, 0x18, 0x40, 0x67, 0x36, 0xc7, 0xb2, 0x04, 0x57, 0x18, 0x3c, + 0xf6, 0xcc, 0x3d, 0xb2, 0xcc, 0x15, 0x38, 0x15, 0x86, 0x73, 0x87, 0xa9, 0x02, 0x3c, 0x03, 0xb8, + 0xa2, 0x0b, 0x70, 0xed, 0x82, 0xb8, 0xe2, 0x1f, 0xc0, 0x99, 0xb3, 0x17, 0x9d, 0xff, 0x3b, 0xc0, + 0x7e, 0x72, 0x0e, 0xb0, 0x1f, 0xac, 0x59, 0xfb, 0xd3, 0x15, 0x79, 0xdd, 0xa0, 0x95, 0xde, 0x05, + 0xe1, 0x63, 0x0f, 0x3b, 0xb3, 0x96, 0x4e, 0x5c, 0x94, 0x87, 0xd4, 0x13, 0x0f, 0x3b, 0x74, 0xe2, + 0x11, 0xb6, 0x32, 0xc1, 0xab, 0xf4, 0xeb, 0x38, 0xa4, 0x1a, 0xfa, 0x09, 0xa6, 0xa0, 0x5f, 0x87, + 0x1c, 0x15, 0xcf, 0xce, 0xee, 0xde, 0x4d, 0x26, 0x0f, 0xb0, 0x6e, 0x02, 0x70, 0x3b, 0x43, 0x27, + 0x2e, 0x1b, 0x39, 0x53, 0xde, 0x5d, 0x33, 0xd5, 0x79, 0x2e, 0x74, 0x97, 0x3f, 0x99, 0x27, 0x56, + 0x84, 0x37, 0x86, 0x96, 0xe9, 0xea, 0xa6, 0x87, 0x55, 0xca, 0x13, 0x4d, 0x37, 0x3c, 0x07, 0xe7, + 0x63, 0x3b, 0x91, 0xdd, 0xb4, 0xb2, 0x1d, 0xa8, 0x0e, 0xcc, 0x3a, 0x57, 0xa0, 0x43, 0x10, 0xc9, + 0xd0, 0xd1, 0x6d, 0x57, 0x3d, 0xd1, 0x1c, 0x5d, 0x1b, 0x18, 0x98, 0x73, 0x25, 0x53, 0xbe, 0xb7, + 0xae, 0xdc, 0xf2, 0x49, 0x16, 0xbb, 0xcc, 0xfd, 0x51, 0xe0, 0xed, 0x1f, 0xc7, 0x64, 0x59, 0x8a, + 0x1e, 0x2d, 0x91, 0x25, 0xc1, 0x46, 0xb8, 0x1d, 0x72, 0x84, 0x97, 0x31, 0xe5, 0x0c, 0xd1, 0x93, + 0x67, 0x88, 0x5e, 0xd8, 0x83, 0x2b, 0xe7, 0x25, 0x79, 0x11, 0xf4, 0x2f, 0x5b, 0x17, 0x84, 0x39, + 0x5f, 0xa4, 0xbf, 0xc4, 0x21, 0xc3, 0x36, 0x41, 0xf7, 0x89, 0xf1, 0x3f, 0x22, 0xc9, 0xe4, 0x1c, + 0xd0, 0x63, 0x0c, 0x92, 0x8f, 0xc2, 0x14, 0x66, 0x9e, 0x78, 0x48, 0xe0, 0x3f, 0x5d, 0x02, 0x9e, + 0x53, 0xeb, 0xee, 0x05, 0x46, 0xb9, 0x10, 0xf8, 0x77, 0xce, 0x56, 0xb9, 0xb3, 0xa5, 0x24, 0x79, + 0xf9, 0x52, 0xf2, 0xff, 0xc5, 0xa8, 0x7f, 0xc4, 0x21, 0xd9, 0xd1, 0xc7, 0xaf, 0x49, 0xc5, 0xc1, + 0x2f, 0xac, 0x38, 0xeb, 0x68, 0xc1, 0xe7, 0x18, 0x92, 0x77, 0xfd, 0x73, 0x0a, 0xce, 0x77, 0xc2, + 0x0d, 0x70, 0xc9, 0x7a, 0x73, 0x0e, 0xe5, 0x52, 0x5f, 0x35, 0xca, 0xf5, 0x60, 0x73, 0xdf, 0x1a, + 0x74, 0x0c, 0x6d, 0x88, 0xa7, 0xd8, 0x74, 0x69, 0xbb, 0x30, 0x34, 0x3c, 0xe2, 0x62, 0x47, 0x35, + 0xb5, 0x29, 0xf6, 0xe3, 0x65, 0x7c, 0x59, 0x5b, 0x9b, 0xe2, 0x45, 0x13, 0xcf, 0xd3, 0x47, 0x7e, + 0xf8, 0xc0, 0xa4, 0xef, 0xe9, 0x23, 0xe9, 0x9f, 0x31, 0x10, 0xf6, 0xad, 0x41, 0xd7, 0xd5, 0x5c, + 0x8f, 0xa0, 0x1a, 0x24, 0x88, 0xab, 0xb9, 0x3c, 0x58, 0xae, 0x5c, 0x5c, 0xb3, 0x7a, 0x73, 0xc7, + 0x22, 0xfd, 0x83, 0x15, 0xee, 0x4c, 0x4f, 0xea, 0x11, 0x76, 0x35, 0xdd, 0xf0, 0x9b, 0x62, 0x25, + 0x78, 0x45, 0x35, 0x10, 0x99, 0x89, 0x4a, 0x5c, 0xcd, 0x71, 0x55, 0x7a, 0x83, 0xf5, 0x6b, 0x43, + 0x21, 0x18, 0x2a, 0xb8, 0xde, 0x16, 0x7b, 0xc1, 0xf5, 0x56, 0xc9, 0x31, 0x9f, 0x2e, 0x75, 0xa1, + 0x42, 0xf4, 0x10, 0xd2, 0xc4, 0x1b, 0xf0, 0x44, 0x53, 0x2c, 0xd1, 0x9b, 0xe1, 0x13, 0xf5, 0x1d, + 0x95, 0x79, 0x08, 0xe9, 0x8b, 0x08, 0x24, 0x58, 0xfe, 0xf4, 0xfe, 0xd8, 0xed, 0x55, 0x7a, 0xf2, + 0xca, 0xfd, 0x31, 0x03, 0xa9, 0x8e, 0xdc, 0xae, 0x35, 0xdb, 0x0f, 0xc4, 0x08, 0xca, 0x01, 0x74, + 0xe5, 0x5e, 0xbf, 0xa3, 0xd6, 0x0e, 0xda, 0xb2, 0x98, 0xa6, 0x4a, 0xa5, 0xdf, 0x6e, 0x53, 0x65, + 0x14, 0x21, 0xc8, 0x55, 0x2b, 0xed, 0xaa, 0xdc, 0x52, 0x03, 0x87, 0xd8, 0x82, 0xac, 0xdb, 0xab, + 0x28, 0x3d, 0xb9, 0x26, 0xa6, 0x50, 0x16, 0x04, 0x2e, 0x6b, 0xc9, 0x35, 0x7e, 0xef, 0x64, 0xd1, + 0x96, 0xee, 0x9d, 0x6f, 0xc0, 0x56, 0xa5, 0xd7, 0x93, 0x1f, 0x76, 0x7a, 0x6a, 0xbd, 0xd2, 0x6c, + 0xf5, 0x15, 0x59, 0x14, 0xa4, 0x06, 0xa4, 0x83, 0x19, 0xa0, 0x2d, 0xc8, 0x2c, 0xe7, 0x99, 0x05, + 0xa1, 0xdb, 0xdf, 0x7b, 0xd8, 0xec, 0xd1, 0x41, 0x22, 0x08, 0x20, 0xf9, 0x71, 0x5f, 0xee, 0xcb, + 0x35, 0x31, 0x8a, 0x44, 0xd8, 0xec, 0xf6, 0x2a, 0x2d, 0x99, 0xe6, 0xd0, 0xeb, 0x77, 0xc5, 0x98, + 0x54, 0x63, 0x74, 0x52, 0xf0, 0x21, 0x76, 0xb0, 0x39, 0xc4, 0xe8, 0x2d, 0xb6, 0x79, 0x27, 0x78, + 0xe8, 0xaa, 0xfa, 0xc8, 0x27, 0x93, 0xe0, 0x4b, 0x9a, 0x23, 0x74, 0x15, 0x92, 0x13, 0x6b, 0xa0, + 0xce, 0x49, 0x94, 0x98, 0x58, 0x83, 0xe6, 0x48, 0xfa, 0x43, 0x14, 0xb6, 0x3e, 0xd1, 0x1c, 0xb3, + 0x62, 0xdb, 0x86, 0x3e, 0x64, 0x9f, 0x3b, 0x68, 0x1b, 0xbd, 0x40, 0x48, 0xf6, 0x8c, 0xf6, 0x03, + 0x62, 0xf1, 0x0b, 0xff, 0xad, 0x35, 0x78, 0xad, 0x84, 0x5c, 0xa6, 0x57, 0x01, 0xd2, 0xb6, 0x63, + 0x8d, 0x1d, 0x4c, 0x08, 0x2b, 0x79, 0x51, 0x65, 0xfe, 0x4e, 0x19, 0xef, 0x3a, 0xda, 0xf0, 0x98, + 0x16, 0x02, 0xcf, 0x31, 0xf2, 0x71, 0xce, 0xf8, 0x40, 0xd6, 0x77, 0x0c, 0xe9, 0x67, 0xeb, 0xe0, + 0x4e, 0x41, 0xac, 0x2d, 0x3f, 0xe6, 0x50, 0xb7, 0xe5, 0xc7, 0x6a, 0xb7, 0xf2, 0x88, 0xa3, 0xbb, + 0xb4, 0xbe, 0x31, 0xb4, 0x09, 0xe9, 0x4a, 0xb5, 0x2a, 0x77, 0x7a, 0x0c, 0xc3, 0x05, 0x1e, 0x24, + 0xa8, 0xaa, 0xde, 0x6c, 0x37, 0xbb, 0x0d, 0xb9, 0x26, 0x26, 0x29, 0x10, 0x14, 0x41, 0x86, 0x3c, + 0x40, 0xf2, 0xfb, 0x4d, 0x06, 0x7b, 0x5a, 0xfa, 0xa5, 0x00, 0x31, 0x7a, 0x82, 0x34, 0x41, 0x70, + 0x02, 0x1c, 0xd8, 0xaa, 0x65, 0xca, 0xef, 0xad, 0x27, 0xf4, 0x1c, 0x3a, 0xe5, 0xd4, 0x9b, 0x86, + 0xb2, 0x83, 0x0a, 0xe1, 0x9f, 0x31, 0x21, 0x42, 0xcd, 0x8b, 0x8a, 0x72, 0xea, 0x4d, 0xcf, 0xab, + 0x23, 0x76, 0xbd, 0x57, 0x27, 0xd6, 0x80, 0x2d, 0xf4, 0xfa, 0xf3, 0x6a, 0xfe, 0x3d, 0x80, 0x9e, + 0x57, 0x47, 0xf3, 0x0f, 0x24, 0x75, 0x10, 0x08, 0xed, 0x2f, 0x58, 0xa4, 0x38, 0x8b, 0xf4, 0x8d, + 0x90, 0xd7, 0xd1, 0xc6, 0x86, 0x92, 0x26, 0xc1, 0x8d, 0xae, 0x05, 0x19, 0x7b, 0x76, 0x1a, 0x29, + 0xc1, 0x22, 0x7d, 0x33, 0xf4, 0xfd, 0xa7, 0xb1, 0xa1, 0x80, 0xef, 0x4f, 0xa3, 0x55, 0x21, 0xcd, + 0x2e, 0x5b, 0x34, 0x14, 0x2f, 0x42, 0xd7, 0xc3, 0x75, 0xc7, 0x8d, 0x0d, 0x25, 0x75, 0xe4, 0xdf, + 0x37, 0xee, 0x43, 0xca, 0xd6, 0xc7, 0x2c, 0x06, 0x3f, 0x71, 0xde, 0x0d, 0x75, 0xe0, 0x35, 0x36, + 0x94, 0xa4, 0xcd, 0xfb, 0x87, 0x0e, 0x64, 0xf9, 0x94, 0xc8, 0x13, 0x83, 0xc5, 0xd9, 0x64, 0x71, + 0x6e, 0x84, 0x6f, 0xd8, 0x1a, 0x1b, 0x4a, 0x86, 0x2c, 0xb4, 0xb7, 0xf7, 0x21, 0x49, 0x58, 0xb5, + 0xf3, 0xaf, 0x70, 0xbb, 0x61, 0xab, 0xa3, 0xe2, 0xfb, 0xa1, 0x03, 0xc8, 0xf1, 0x27, 0xf5, 0x48, + 0x27, 0xae, 0xe5, 0xcc, 0xf2, 0x59, 0x76, 0x9a, 0x87, 0x8f, 0x94, 0xe5, 0xfe, 0x0d, 0xee, 0x8e, + 0x7e, 0x08, 0xdb, 0x33, 0xcd, 0x31, 0x55, 0xed, 0x74, 0x53, 0x93, 0xbc, 0xc0, 0x62, 0x16, 0x2f, + 0x56, 0x0b, 0x14, 0x71, 0xb6, 0x2c, 0x20, 0xe8, 0x1e, 0x14, 0xfc, 0xcf, 0x9c, 0x96, 0xe7, 0xda, + 0x9e, 0xab, 0x3a, 0x98, 0x58, 0x9e, 0x33, 0xe4, 0xdd, 0xd8, 0x36, 0x2b, 0x01, 0x5f, 0xe3, 0x16, + 0x07, 0xcc, 0x40, 0xf1, 0xf5, 0xb4, 0x2d, 0x7b, 0x1f, 0xf2, 0xbe, 0x33, 0xed, 0x9b, 0x1c, 0xcb, + 0x60, 0x8d, 0x06, 0x61, 0xae, 0x5b, 0xcc, 0xf5, 0x2a, 0xd7, 0x57, 0xb9, 0x9a, 0xb6, 0x1c, 0x84, + 0x3a, 0xd6, 0x21, 0x69, 0x68, 0x03, 0x6c, 0x90, 0x3c, 0x0a, 0x35, 0x0f, 0xda, 0xe6, 0xb4, 0x98, + 0x03, 0x6f, 0x71, 0x7c, 0x6f, 0xd4, 0x02, 0x20, 0xc3, 0x23, 0x3c, 0xf2, 0x0c, 0xdd, 0x1c, 0xe7, + 0xaf, 0x84, 0x6a, 0x5b, 0xe8, 0x3a, 0xcf, 0x7d, 0x94, 0x05, 0xff, 0xc2, 0x07, 0x90, 0x59, 0x18, + 0xe4, 0x42, 0xbd, 0x06, 0x40, 0xda, 0x9d, 0xd9, 0x6c, 0x3f, 0x48, 0x7b, 0x90, 0x5d, 0x1a, 0x03, + 0xdd, 0x84, 0xab, 0x53, 0xed, 0x69, 0xd0, 0x6a, 0x12, 0xd5, 0xc6, 0x8e, 0x7a, 0x64, 0x79, 0x0e, + 0x0b, 0x9d, 0x50, 0xd0, 0x54, 0x7b, 0xea, 0x77, 0x9b, 0xa4, 0x83, 0x9d, 0x86, 0xe5, 0x39, 0xd2, + 0x4f, 0x40, 0xec, 0x7a, 0x83, 0xa9, 0xee, 0xb2, 0x62, 0xf5, 0xc4, 0xc3, 0xc4, 0x5d, 0x77, 0xca, + 0xbc, 0x09, 0x49, 0x07, 0x8f, 0x75, 0xcb, 0x64, 0xf5, 0x46, 0x50, 0xfc, 0x37, 0x74, 0x0b, 0x62, + 0x74, 0x67, 0xf0, 0x82, 0x26, 0x85, 0xa8, 0x8d, 0xd4, 0x5c, 0xfa, 0x11, 0x64, 0x1f, 0xe0, 0x7f, + 0xc3, 0xe8, 0x2f, 0x38, 0xfb, 0xfe, 0x1a, 0x85, 0x2d, 0xda, 0x8e, 0xef, 0x5b, 0x03, 0x72, 0xe1, + 0x11, 0x92, 0x4b, 0x23, 0x5c, 0x03, 0xc1, 0xd6, 0xc6, 0x58, 0x25, 0xfa, 0xe7, 0x1c, 0x98, 0x84, + 0x92, 0xa6, 0x82, 0xae, 0xfe, 0x39, 0x3f, 0x99, 0xa9, 0xd2, 0xb5, 0x8e, 0x71, 0x90, 0x1a, 0x33, + 0xef, 0x51, 0xc1, 0x99, 0x3e, 0x30, 0x7e, 0xb6, 0x0f, 0x9c, 0xc0, 0x36, 0x9d, 0x00, 0x6f, 0xbd, + 0xa6, 0x9a, 0x3b, 0x3c, 0xc2, 0x0e, 0xab, 0x9e, 0xb9, 0xf2, 0xf7, 0xd6, 0x35, 0xc8, 0xcb, 0x13, + 0x0c, 0x76, 0x38, 0x7e, 0xc8, 0xa3, 0x28, 0x5b, 0x93, 0x65, 0x01, 0x9d, 0xe2, 0xa1, 0x6e, 0xb8, + 0xd8, 0x61, 0xf5, 0x50, 0x50, 0xfc, 0x37, 0xe9, 0x36, 0x6c, 0xad, 0xf8, 0x06, 0xdf, 0xe5, 0x37, + 0xe8, 0xa1, 0x58, 0xa9, 0xf6, 0x9a, 0x8f, 0x64, 0xff, 0xd0, 0x3d, 0x68, 0xab, 0xfe, 0x7b, 0x54, + 0xfa, 0x32, 0x02, 0x62, 0xdf, 0x1e, 0x69, 0x2e, 0x7e, 0x15, 0x20, 0xa3, 0x2f, 0x00, 0x32, 0xb6, + 0x00, 0x64, 0xc0, 0xae, 0xf8, 0x85, 0xd8, 0x85, 0xee, 0x41, 0xc6, 0x63, 0x79, 0xb1, 0x1f, 0x69, + 0xfc, 0xc3, 0xe8, 0x6c, 0x1b, 0x5b, 0xd7, 0xb1, 0x31, 0x7a, 0xa8, 0x91, 0x63, 0x05, 0xb8, 0x39, + 0x7d, 0x96, 0x1c, 0x10, 0x4f, 0x57, 0x96, 0xd8, 0x96, 0x49, 0x30, 0xba, 0x0d, 0xf1, 0x89, 0x35, + 0xe0, 0x5f, 0xb7, 0xc2, 0xe5, 0xc1, 0xec, 0xd1, 0x75, 0xd8, 0x32, 0xf1, 0x53, 0x57, 0x5d, 0x20, + 0x09, 0x9f, 0x76, 0x96, 0x8a, 0x3b, 0x01, 0x51, 0xa4, 0xcf, 0x40, 0xac, 0x6a, 0xe6, 0x10, 0x1b, + 0xff, 0xb1, 0x1d, 0xf1, 0x19, 0x88, 0x35, 0x6c, 0xe0, 0x57, 0x83, 0x2a, 0xcc, 0x08, 0xe5, 0x9f, + 0xa7, 0x59, 0x61, 0xf2, 0x6b, 0xb1, 0x81, 0x1d, 0xf4, 0xdb, 0x08, 0x08, 0xf3, 0x32, 0x83, 0x4a, + 0xeb, 0x4e, 0xcd, 0x95, 0x82, 0x54, 0x08, 0xb1, 0xcc, 0x52, 0xfd, 0xa7, 0x5f, 0xfe, 0xed, 0x17, + 0xd1, 0xfb, 0xd2, 0xbd, 0xf9, 0x4f, 0x82, 0x7e, 0xfe, 0xa4, 0xf4, 0xec, 0x74, 0x6e, 0xcf, 0x4b, + 0x3c, 0x75, 0x52, 0x7a, 0xc6, 0x1f, 0x9e, 0xb3, 0x5f, 0x0e, 0xef, 0x12, 0x36, 0xe4, 0xdd, 0xc8, + 0x0d, 0xf4, 0x9b, 0x08, 0x24, 0x79, 0x41, 0x42, 0xeb, 0x0a, 0xfc, 0x52, 0xdd, 0x0a, 0x95, 0xa4, + 0xcc, 0x92, 0xfc, 0x08, 0x7d, 0xf8, 0x2a, 0x49, 0x96, 0x9e, 0xf1, 0xc5, 0x7e, 0x8e, 0xbe, 0x88, + 0x40, 0x3a, 0x60, 0x26, 0x2a, 0x5e, 0xac, 0x38, 0x14, 0x4a, 0xa1, 0xed, 0x39, 0xe5, 0xa5, 0xef, + 0xb2, 0xa4, 0x6f, 0xa3, 0x5b, 0xaf, 0x92, 0x34, 0xfa, 0x5d, 0x04, 0x84, 0x79, 0x69, 0x58, 0x0b, + 0xfd, 0x6a, 0x11, 0x09, 0xb5, 0xaa, 0xfb, 0x2c, 0xc1, 0x5a, 0xf9, 0x72, 0xab, 0x7a, 0x97, 0x15, + 0x8c, 0xdf, 0x47, 0x40, 0x98, 0x6f, 0xc0, 0xb5, 0xe9, 0xae, 0x6e, 0xd5, 0x50, 0xe9, 0x1e, 0xb0, + 0x74, 0x9b, 0x52, 0xed, 0x72, 0xe9, 0x0e, 0xd9, 0xd8, 0x94, 0xb2, 0xbf, 0x8a, 0x80, 0x30, 0xdf, + 0xd2, 0x6b, 0x73, 0x5e, 0xdd, 0xfc, 0x85, 0x37, 0xcf, 0x94, 0x43, 0x79, 0x6a, 0xbb, 0xb3, 0x80, + 0xac, 0x37, 0x2e, 0xb7, 0xac, 0x7b, 0x3f, 0x86, 0x77, 0x86, 0xd6, 0xf4, 0xe5, 0x49, 0xed, 0x09, + 0x94, 0x71, 0x1d, 0x3a, 0x7e, 0x27, 0xf2, 0xa9, 0xec, 0xdb, 0x8e, 0x2d, 0x43, 0x33, 0xc7, 0x45, + 0xcb, 0x19, 0x97, 0xc6, 0xd8, 0x64, 0xd9, 0x95, 0xb8, 0x4a, 0xb3, 0x75, 0xf2, 0x82, 0xff, 0x04, + 0xb8, 0x17, 0x08, 0x06, 0x49, 0xe6, 0xf1, 0xed, 0x7f, 0x05, 0x00, 0x00, 0xff, 0xff, 0xc8, 0x83, + 0x17, 0x31, 0x3a, 0x20, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1beta2/operations.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1beta2/operations.pb.go new file mode 100644 index 0000000..55d5a6f --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1beta2/operations.pb.go @@ -0,0 +1,221 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/dataproc/v1beta2/operations.proto + +package dataproc + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf5 "github.com/golang/protobuf/ptypes/timestamp" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// The operation state. +type ClusterOperationStatus_State int32 + +const ( + // Unused. + ClusterOperationStatus_UNKNOWN ClusterOperationStatus_State = 0 + // The operation has been created. + ClusterOperationStatus_PENDING ClusterOperationStatus_State = 1 + // The operation is running. + ClusterOperationStatus_RUNNING ClusterOperationStatus_State = 2 + // The operation is done; either cancelled or completed. + ClusterOperationStatus_DONE ClusterOperationStatus_State = 3 +) + +var ClusterOperationStatus_State_name = map[int32]string{ + 0: "UNKNOWN", + 1: "PENDING", + 2: "RUNNING", + 3: "DONE", +} +var ClusterOperationStatus_State_value = map[string]int32{ + "UNKNOWN": 0, + "PENDING": 1, + "RUNNING": 2, + "DONE": 3, +} + +func (x ClusterOperationStatus_State) String() string { + return proto.EnumName(ClusterOperationStatus_State_name, int32(x)) +} +func (ClusterOperationStatus_State) EnumDescriptor() ([]byte, []int) { + return fileDescriptor2, []int{0, 0} +} + +// The status of the operation. +type ClusterOperationStatus struct { + // Output-only. A message containing the operation state. + State ClusterOperationStatus_State `protobuf:"varint,1,opt,name=state,enum=google.cloud.dataproc.v1beta2.ClusterOperationStatus_State" json:"state,omitempty"` + // Output-only. A message containing the detailed operation state. + InnerState string `protobuf:"bytes,2,opt,name=inner_state,json=innerState" json:"inner_state,omitempty"` + // Output-only.A message containing any operation metadata details. + Details string `protobuf:"bytes,3,opt,name=details" json:"details,omitempty"` + // Output-only. The time this state was entered. + StateStartTime *google_protobuf5.Timestamp `protobuf:"bytes,4,opt,name=state_start_time,json=stateStartTime" json:"state_start_time,omitempty"` +} + +func (m *ClusterOperationStatus) Reset() { *m = ClusterOperationStatus{} } +func (m *ClusterOperationStatus) String() string { return proto.CompactTextString(m) } +func (*ClusterOperationStatus) ProtoMessage() {} +func (*ClusterOperationStatus) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } + +func (m *ClusterOperationStatus) GetState() ClusterOperationStatus_State { + if m != nil { + return m.State + } + return ClusterOperationStatus_UNKNOWN +} + +func (m *ClusterOperationStatus) GetInnerState() string { + if m != nil { + return m.InnerState + } + return "" +} + +func (m *ClusterOperationStatus) GetDetails() string { + if m != nil { + return m.Details + } + return "" +} + +func (m *ClusterOperationStatus) GetStateStartTime() *google_protobuf5.Timestamp { + if m != nil { + return m.StateStartTime + } + return nil +} + +// Metadata describing the operation. +type ClusterOperationMetadata struct { + // Output-only. Name of the cluster for the operation. + ClusterName string `protobuf:"bytes,7,opt,name=cluster_name,json=clusterName" json:"cluster_name,omitempty"` + // Output-only. Cluster UUID for the operation. + ClusterUuid string `protobuf:"bytes,8,opt,name=cluster_uuid,json=clusterUuid" json:"cluster_uuid,omitempty"` + // Output-only. Current operation status. + Status *ClusterOperationStatus `protobuf:"bytes,9,opt,name=status" json:"status,omitempty"` + // Output-only. The previous operation status. + StatusHistory []*ClusterOperationStatus `protobuf:"bytes,10,rep,name=status_history,json=statusHistory" json:"status_history,omitempty"` + // Output-only. The operation type. + OperationType string `protobuf:"bytes,11,opt,name=operation_type,json=operationType" json:"operation_type,omitempty"` + // Output-only. Short description of operation. + Description string `protobuf:"bytes,12,opt,name=description" json:"description,omitempty"` + // Output-only. Labels associated with the operation + Labels map[string]string `protobuf:"bytes,13,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Output-only. Errors encountered during operation execution. + Warnings []string `protobuf:"bytes,14,rep,name=warnings" json:"warnings,omitempty"` +} + +func (m *ClusterOperationMetadata) Reset() { *m = ClusterOperationMetadata{} } +func (m *ClusterOperationMetadata) String() string { return proto.CompactTextString(m) } +func (*ClusterOperationMetadata) ProtoMessage() {} +func (*ClusterOperationMetadata) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{1} } + +func (m *ClusterOperationMetadata) GetClusterName() string { + if m != nil { + return m.ClusterName + } + return "" +} + +func (m *ClusterOperationMetadata) GetClusterUuid() string { + if m != nil { + return m.ClusterUuid + } + return "" +} + +func (m *ClusterOperationMetadata) GetStatus() *ClusterOperationStatus { + if m != nil { + return m.Status + } + return nil +} + +func (m *ClusterOperationMetadata) GetStatusHistory() []*ClusterOperationStatus { + if m != nil { + return m.StatusHistory + } + return nil +} + +func (m *ClusterOperationMetadata) GetOperationType() string { + if m != nil { + return m.OperationType + } + return "" +} + +func (m *ClusterOperationMetadata) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *ClusterOperationMetadata) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +func (m *ClusterOperationMetadata) GetWarnings() []string { + if m != nil { + return m.Warnings + } + return nil +} + +func init() { + proto.RegisterType((*ClusterOperationStatus)(nil), "google.cloud.dataproc.v1beta2.ClusterOperationStatus") + proto.RegisterType((*ClusterOperationMetadata)(nil), "google.cloud.dataproc.v1beta2.ClusterOperationMetadata") + proto.RegisterEnum("google.cloud.dataproc.v1beta2.ClusterOperationStatus_State", ClusterOperationStatus_State_name, ClusterOperationStatus_State_value) +} + +func init() { proto.RegisterFile("google/cloud/dataproc/v1beta2/operations.proto", fileDescriptor2) } + +var fileDescriptor2 = []byte{ + // 537 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0x5f, 0x8b, 0xd3, 0x4e, + 0x14, 0xfd, 0xa5, 0xff, 0x7b, 0xb3, 0xed, 0xaf, 0x0c, 0x22, 0x43, 0x51, 0x36, 0x5b, 0x10, 0xfa, + 0x94, 0x60, 0x45, 0x58, 0xdd, 0xb7, 0xdd, 0x16, 0x15, 0xdd, 0xb4, 0x66, 0xb7, 0x08, 0x2a, 0x94, + 0x69, 0x33, 0xc6, 0x60, 0x3a, 0x13, 0x66, 0x26, 0x2b, 0x7d, 0xf0, 0x0b, 0xf8, 0x41, 0xfc, 0x9c, + 0x32, 0x33, 0x49, 0xa9, 0xa2, 0x0b, 0xee, 0x53, 0xe7, 0xde, 0x7b, 0xce, 0x99, 0x73, 0xa6, 0x97, + 0x80, 0x9f, 0x70, 0x9e, 0x64, 0x34, 0xd8, 0x64, 0xbc, 0x88, 0x83, 0x98, 0x28, 0x92, 0x0b, 0xbe, + 0x09, 0x6e, 0x1e, 0xaf, 0xa9, 0x22, 0x93, 0x80, 0xe7, 0x54, 0x10, 0x95, 0x72, 0x26, 0xfd, 0x5c, + 0x70, 0xc5, 0xd1, 0x43, 0x8b, 0xf7, 0x0d, 0xde, 0xaf, 0xf0, 0x7e, 0x89, 0x1f, 0x3e, 0x28, 0xe5, + 0x48, 0x9e, 0x06, 0x84, 0x31, 0xae, 0x0e, 0xc9, 0xc3, 0xe3, 0x72, 0x6a, 0xaa, 0x75, 0xf1, 0x29, + 0x50, 0xe9, 0x96, 0x4a, 0x45, 0xb6, 0xb9, 0x05, 0x8c, 0x7e, 0xd4, 0xe0, 0xfe, 0x45, 0x56, 0x48, + 0x45, 0xc5, 0xbc, 0xba, 0xf9, 0x4a, 0x11, 0x55, 0x48, 0xf4, 0x16, 0x9a, 0x52, 0x11, 0x45, 0xb1, + 0xe3, 0x39, 0xe3, 0xfe, 0xe4, 0xcc, 0xbf, 0xd5, 0x88, 0xff, 0x67, 0x15, 0x5f, 0xff, 0xd0, 0xc8, + 0x2a, 0xa1, 0x63, 0x70, 0x53, 0xc6, 0xa8, 0x58, 0x59, 0xe1, 0x9a, 0xe7, 0x8c, 0xbb, 0x11, 0x98, + 0x96, 0xc1, 0x21, 0x0c, 0xed, 0x98, 0x2a, 0x92, 0x66, 0x12, 0xd7, 0xcd, 0xb0, 0x2a, 0xd1, 0x14, + 0x06, 0x86, 0xa4, 0xa9, 0x42, 0xad, 0x74, 0x0e, 0xdc, 0xf0, 0x9c, 0xb1, 0x3b, 0x19, 0x56, 0xc6, + 0xaa, 0x90, 0xfe, 0x75, 0x15, 0x32, 0xea, 0x1b, 0xce, 0x95, 0xa6, 0xe8, 0xe6, 0xe8, 0x14, 0x9a, + 0xf6, 0x22, 0x17, 0xda, 0xcb, 0xf0, 0x75, 0x38, 0x7f, 0x17, 0x0e, 0xfe, 0xd3, 0xc5, 0x62, 0x16, + 0x4e, 0x5f, 0x85, 0x2f, 0x06, 0x8e, 0x2e, 0xa2, 0x65, 0x18, 0xea, 0xa2, 0x86, 0x3a, 0xd0, 0x98, + 0xce, 0xc3, 0xd9, 0xa0, 0x3e, 0xfa, 0xde, 0x00, 0xfc, 0x7b, 0xc4, 0x4b, 0xaa, 0x88, 0x7e, 0x07, + 0x74, 0x02, 0x47, 0x1b, 0x3b, 0x5b, 0x31, 0xb2, 0xa5, 0xb8, 0x6d, 0xbc, 0xbb, 0x65, 0x2f, 0x24, + 0x5b, 0x7a, 0x08, 0x29, 0x8a, 0x34, 0xc6, 0x9d, 0x5f, 0x20, 0xcb, 0x22, 0x8d, 0xd1, 0x25, 0xb4, + 0xa4, 0x79, 0x34, 0xdc, 0x35, 0xc1, 0x9e, 0xde, 0xe9, 0xc5, 0xa3, 0x52, 0x04, 0x7d, 0x84, 0xbe, + 0x3d, 0xad, 0x3e, 0xa7, 0x52, 0x71, 0xb1, 0xc3, 0xe0, 0xd5, 0xef, 0x2e, 0xdb, 0xb3, 0x62, 0x2f, + 0xad, 0x16, 0x7a, 0x04, 0xfd, 0xfd, 0xaa, 0xae, 0xd4, 0x2e, 0xa7, 0xd8, 0x35, 0x89, 0x7a, 0xfb, + 0xee, 0xf5, 0x2e, 0xa7, 0xc8, 0x03, 0x37, 0xa6, 0x72, 0x23, 0xd2, 0x5c, 0xb7, 0xf0, 0x91, 0x4d, + 0x7d, 0xd0, 0x42, 0x1f, 0xa0, 0x95, 0x91, 0x35, 0xcd, 0x24, 0xee, 0x19, 0x7b, 0x17, 0xff, 0x68, + 0xaf, 0xfa, 0x13, 0xfc, 0x37, 0x46, 0x65, 0xc6, 0x94, 0xd8, 0x45, 0xa5, 0x24, 0x1a, 0x42, 0xe7, + 0x2b, 0x11, 0x2c, 0x65, 0x89, 0xc4, 0x7d, 0xaf, 0x3e, 0xee, 0x46, 0xfb, 0x7a, 0xf8, 0x0c, 0xdc, + 0x03, 0x0a, 0x1a, 0x40, 0xfd, 0x0b, 0xdd, 0x99, 0x65, 0xef, 0x46, 0xfa, 0x88, 0xee, 0x41, 0xf3, + 0x86, 0x64, 0x45, 0xb5, 0xa7, 0xb6, 0x78, 0x5e, 0x3b, 0x75, 0xce, 0xbf, 0xc1, 0xc9, 0x86, 0x6f, + 0x6f, 0x37, 0x7a, 0xfe, 0xff, 0xde, 0xa2, 0x5c, 0xe8, 0xcd, 0x5c, 0x38, 0xef, 0x67, 0x25, 0x23, + 0xe1, 0x19, 0x61, 0x89, 0xcf, 0x45, 0x12, 0x24, 0x94, 0x99, 0xbd, 0x0d, 0xec, 0x88, 0xe4, 0xa9, + 0xfc, 0xcb, 0xa7, 0xe1, 0xac, 0x6a, 0xac, 0x5b, 0x86, 0xf1, 0xe4, 0x67, 0x00, 0x00, 0x00, 0xff, + 0xff, 0x83, 0x10, 0x95, 0x5e, 0x4b, 0x04, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1beta2/workflow_templates.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1beta2/workflow_templates.pb.go new file mode 100644 index 0000000..0ed6987 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/dataproc/v1beta2/workflow_templates.pb.go @@ -0,0 +1,1526 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/dataproc/v1beta2/workflow_templates.proto + +package dataproc + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import google_protobuf2 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf5 "github.com/golang/protobuf/ptypes/timestamp" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// The operation state. +type WorkflowMetadata_State int32 + +const ( + // Unused. + WorkflowMetadata_UNKNOWN WorkflowMetadata_State = 0 + // The operation has been created. + WorkflowMetadata_PENDING WorkflowMetadata_State = 1 + // The operation is running. + WorkflowMetadata_RUNNING WorkflowMetadata_State = 2 + // The operation is done; either cancelled or completed. + WorkflowMetadata_DONE WorkflowMetadata_State = 3 +) + +var WorkflowMetadata_State_name = map[int32]string{ + 0: "UNKNOWN", + 1: "PENDING", + 2: "RUNNING", + 3: "DONE", +} +var WorkflowMetadata_State_value = map[string]int32{ + "UNKNOWN": 0, + "PENDING": 1, + "RUNNING": 2, + "DONE": 3, +} + +func (x WorkflowMetadata_State) String() string { + return proto.EnumName(WorkflowMetadata_State_name, int32(x)) +} +func (WorkflowMetadata_State) EnumDescriptor() ([]byte, []int) { return fileDescriptor3, []int{5, 0} } + +type WorkflowNode_NodeState int32 + +const ( + WorkflowNode_NODE_STATUS_UNSPECIFIED WorkflowNode_NodeState = 0 + // The node is awaiting prerequisite node to finish. + WorkflowNode_BLOCKED WorkflowNode_NodeState = 1 + // The node is runnable but not running. + WorkflowNode_RUNNABLE WorkflowNode_NodeState = 2 + // The node is running. + WorkflowNode_RUNNING WorkflowNode_NodeState = 3 + // The node completed successfully. + WorkflowNode_COMPLETED WorkflowNode_NodeState = 4 + // The node failed. A node can be marked FAILED because + // its ancestor or peer failed. + WorkflowNode_FAILED WorkflowNode_NodeState = 5 +) + +var WorkflowNode_NodeState_name = map[int32]string{ + 0: "NODE_STATUS_UNSPECIFIED", + 1: "BLOCKED", + 2: "RUNNABLE", + 3: "RUNNING", + 4: "COMPLETED", + 5: "FAILED", +} +var WorkflowNode_NodeState_value = map[string]int32{ + "NODE_STATUS_UNSPECIFIED": 0, + "BLOCKED": 1, + "RUNNABLE": 2, + "RUNNING": 3, + "COMPLETED": 4, + "FAILED": 5, +} + +func (x WorkflowNode_NodeState) String() string { + return proto.EnumName(WorkflowNode_NodeState_name, int32(x)) +} +func (WorkflowNode_NodeState) EnumDescriptor() ([]byte, []int) { return fileDescriptor3, []int{8, 0} } + +// A Cloud Dataproc workflow template resource. +type WorkflowTemplate struct { + // Required. The template id. + Id string `protobuf:"bytes,2,opt,name=id" json:"id,omitempty"` + // Output only. The "resource name" of the template, as described + // in https://cloud.google.com/apis/design/resource_names of the form + // `projects/{project_id}/regions/{region}/workflowTemplates/{template_id}` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Optional. Used to perform a consistent read-modify-write. + // + // This field should be left blank for a `CreateWorkflowTemplate` request. It + // is required for an `UpdateWorkflowTemplate` request, and must match the + // current server version. A typical update template flow would fetch the + // current template with a `GetWorkflowTemplate` request, which will return + // the current template with the `version` field filled in with the + // current server version. The user updates other fields in the template, + // then returns it as part of the `UpdateWorkflowTemplate` request. + Version int32 `protobuf:"varint,3,opt,name=version" json:"version,omitempty"` + // Output only. The time template was created. + CreateTime *google_protobuf5.Timestamp `protobuf:"bytes,4,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // Output only. The time template was last updated. + UpdateTime *google_protobuf5.Timestamp `protobuf:"bytes,5,opt,name=update_time,json=updateTime" json:"update_time,omitempty"` + // Optional. The labels to associate with this template. These labels + // will be propagated to all jobs and clusters created by the workflow + // instance. + // + // Label **keys** must contain 1 to 63 characters, and must conform to + // [RFC 1035](https://www.ietf.org/rfc/rfc1035.txt). + // + // Label **values** may be empty, but, if present, must contain 1 to 63 + // characters, and must conform to + // [RFC 1035](https://www.ietf.org/rfc/rfc1035.txt). + // + // No more than 32 labels can be associated with a template. + Labels map[string]string `protobuf:"bytes,6,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Required. WorkflowTemplate scheduling information. + Placement *WorkflowTemplatePlacement `protobuf:"bytes,7,opt,name=placement" json:"placement,omitempty"` + // Required. The Directed Acyclic Graph of Jobs to submit. + Jobs []*OrderedJob `protobuf:"bytes,8,rep,name=jobs" json:"jobs,omitempty"` +} + +func (m *WorkflowTemplate) Reset() { *m = WorkflowTemplate{} } +func (m *WorkflowTemplate) String() string { return proto.CompactTextString(m) } +func (*WorkflowTemplate) ProtoMessage() {} +func (*WorkflowTemplate) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0} } + +func (m *WorkflowTemplate) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *WorkflowTemplate) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *WorkflowTemplate) GetVersion() int32 { + if m != nil { + return m.Version + } + return 0 +} + +func (m *WorkflowTemplate) GetCreateTime() *google_protobuf5.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *WorkflowTemplate) GetUpdateTime() *google_protobuf5.Timestamp { + if m != nil { + return m.UpdateTime + } + return nil +} + +func (m *WorkflowTemplate) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +func (m *WorkflowTemplate) GetPlacement() *WorkflowTemplatePlacement { + if m != nil { + return m.Placement + } + return nil +} + +func (m *WorkflowTemplate) GetJobs() []*OrderedJob { + if m != nil { + return m.Jobs + } + return nil +} + +// Specifies workflow execution target. +// +// Either `managed_cluster` or `cluster_selector` is required. +type WorkflowTemplatePlacement struct { + // Types that are valid to be assigned to Placement: + // *WorkflowTemplatePlacement_ManagedCluster + // *WorkflowTemplatePlacement_ClusterSelector + Placement isWorkflowTemplatePlacement_Placement `protobuf_oneof:"placement"` +} + +func (m *WorkflowTemplatePlacement) Reset() { *m = WorkflowTemplatePlacement{} } +func (m *WorkflowTemplatePlacement) String() string { return proto.CompactTextString(m) } +func (*WorkflowTemplatePlacement) ProtoMessage() {} +func (*WorkflowTemplatePlacement) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{1} } + +type isWorkflowTemplatePlacement_Placement interface { + isWorkflowTemplatePlacement_Placement() +} + +type WorkflowTemplatePlacement_ManagedCluster struct { + ManagedCluster *ManagedCluster `protobuf:"bytes,1,opt,name=managed_cluster,json=managedCluster,oneof"` +} +type WorkflowTemplatePlacement_ClusterSelector struct { + ClusterSelector *ClusterSelector `protobuf:"bytes,2,opt,name=cluster_selector,json=clusterSelector,oneof"` +} + +func (*WorkflowTemplatePlacement_ManagedCluster) isWorkflowTemplatePlacement_Placement() {} +func (*WorkflowTemplatePlacement_ClusterSelector) isWorkflowTemplatePlacement_Placement() {} + +func (m *WorkflowTemplatePlacement) GetPlacement() isWorkflowTemplatePlacement_Placement { + if m != nil { + return m.Placement + } + return nil +} + +func (m *WorkflowTemplatePlacement) GetManagedCluster() *ManagedCluster { + if x, ok := m.GetPlacement().(*WorkflowTemplatePlacement_ManagedCluster); ok { + return x.ManagedCluster + } + return nil +} + +func (m *WorkflowTemplatePlacement) GetClusterSelector() *ClusterSelector { + if x, ok := m.GetPlacement().(*WorkflowTemplatePlacement_ClusterSelector); ok { + return x.ClusterSelector + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*WorkflowTemplatePlacement) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _WorkflowTemplatePlacement_OneofMarshaler, _WorkflowTemplatePlacement_OneofUnmarshaler, _WorkflowTemplatePlacement_OneofSizer, []interface{}{ + (*WorkflowTemplatePlacement_ManagedCluster)(nil), + (*WorkflowTemplatePlacement_ClusterSelector)(nil), + } +} + +func _WorkflowTemplatePlacement_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*WorkflowTemplatePlacement) + // placement + switch x := m.Placement.(type) { + case *WorkflowTemplatePlacement_ManagedCluster: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ManagedCluster); err != nil { + return err + } + case *WorkflowTemplatePlacement_ClusterSelector: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ClusterSelector); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("WorkflowTemplatePlacement.Placement has unexpected type %T", x) + } + return nil +} + +func _WorkflowTemplatePlacement_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*WorkflowTemplatePlacement) + switch tag { + case 1: // placement.managed_cluster + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ManagedCluster) + err := b.DecodeMessage(msg) + m.Placement = &WorkflowTemplatePlacement_ManagedCluster{msg} + return true, err + case 2: // placement.cluster_selector + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ClusterSelector) + err := b.DecodeMessage(msg) + m.Placement = &WorkflowTemplatePlacement_ClusterSelector{msg} + return true, err + default: + return false, nil + } +} + +func _WorkflowTemplatePlacement_OneofSizer(msg proto.Message) (n int) { + m := msg.(*WorkflowTemplatePlacement) + // placement + switch x := m.Placement.(type) { + case *WorkflowTemplatePlacement_ManagedCluster: + s := proto.Size(x.ManagedCluster) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *WorkflowTemplatePlacement_ClusterSelector: + s := proto.Size(x.ClusterSelector) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Cluster that is managed by the workflow. +type ManagedCluster struct { + // Required. The cluster name. Cluster names within a project must be + // unique. Names from deleted clusters can be reused. + ClusterName string `protobuf:"bytes,2,opt,name=cluster_name,json=clusterName" json:"cluster_name,omitempty"` + // Required. The cluster configuration. + Config *ClusterConfig `protobuf:"bytes,3,opt,name=config" json:"config,omitempty"` + // Optional. The labels to associate with this cluster. + // + // Label keys must be between 1 and 63 characters long, and must conform to + // the following PCRE regular expression: + // [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + // + // Label values must be between 1 and 63 characters long, and must conform to + // the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + // + // No more than 64 labels can be associated with a given cluster. + Labels map[string]string `protobuf:"bytes,4,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *ManagedCluster) Reset() { *m = ManagedCluster{} } +func (m *ManagedCluster) String() string { return proto.CompactTextString(m) } +func (*ManagedCluster) ProtoMessage() {} +func (*ManagedCluster) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{2} } + +func (m *ManagedCluster) GetClusterName() string { + if m != nil { + return m.ClusterName + } + return "" +} + +func (m *ManagedCluster) GetConfig() *ClusterConfig { + if m != nil { + return m.Config + } + return nil +} + +func (m *ManagedCluster) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +// A selector that chooses target cluster for jobs based on metadata. +type ClusterSelector struct { + // Optional. The zone where workflow process executes. This parameter does not + // affect the selection of the cluster. + // + // If unspecified, the zone of the first cluster matching the selector + // is used. + Zone string `protobuf:"bytes,1,opt,name=zone" json:"zone,omitempty"` + // Required. The cluster labels. Cluster must have all labels + // to match. + ClusterLabels map[string]string `protobuf:"bytes,2,rep,name=cluster_labels,json=clusterLabels" json:"cluster_labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *ClusterSelector) Reset() { *m = ClusterSelector{} } +func (m *ClusterSelector) String() string { return proto.CompactTextString(m) } +func (*ClusterSelector) ProtoMessage() {} +func (*ClusterSelector) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{3} } + +func (m *ClusterSelector) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *ClusterSelector) GetClusterLabels() map[string]string { + if m != nil { + return m.ClusterLabels + } + return nil +} + +type OrderedJob struct { + // Required. The step id. The id must be unique among all jobs + // within the template. + // + // The step id is used as prefix for job id, as job `workflow-step-id` label, + // and in prerequisite_step_ids field from other steps. + StepId string `protobuf:"bytes,1,opt,name=step_id,json=stepId" json:"step_id,omitempty"` + // Required. The job definition. + // + // Types that are valid to be assigned to JobType: + // *OrderedJob_HadoopJob + // *OrderedJob_SparkJob + // *OrderedJob_PysparkJob + // *OrderedJob_HiveJob + // *OrderedJob_PigJob + // *OrderedJob_SparkSqlJob + JobType isOrderedJob_JobType `protobuf_oneof:"job_type"` + // Optional. The labels to associate with this job. + // + // Label keys must be between 1 and 63 characters long, and must conform to + // the following regular expression: + // [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + // + // Label values must be between 1 and 63 characters long, and must conform to + // the following regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + // + // No more than 64 labels can be associated with a given job. + Labels map[string]string `protobuf:"bytes,8,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Optional. Job scheduling configuration. + Scheduling *JobScheduling `protobuf:"bytes,9,opt,name=scheduling" json:"scheduling,omitempty"` + // Optional. The optional list of prerequisite job step_ids. + // If not specified, the job will start at the beginning of workflow. + PrerequisiteStepIds []string `protobuf:"bytes,10,rep,name=prerequisite_step_ids,json=prerequisiteStepIds" json:"prerequisite_step_ids,omitempty"` +} + +func (m *OrderedJob) Reset() { *m = OrderedJob{} } +func (m *OrderedJob) String() string { return proto.CompactTextString(m) } +func (*OrderedJob) ProtoMessage() {} +func (*OrderedJob) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{4} } + +type isOrderedJob_JobType interface { + isOrderedJob_JobType() +} + +type OrderedJob_HadoopJob struct { + HadoopJob *HadoopJob `protobuf:"bytes,2,opt,name=hadoop_job,json=hadoopJob,oneof"` +} +type OrderedJob_SparkJob struct { + SparkJob *SparkJob `protobuf:"bytes,3,opt,name=spark_job,json=sparkJob,oneof"` +} +type OrderedJob_PysparkJob struct { + PysparkJob *PySparkJob `protobuf:"bytes,4,opt,name=pyspark_job,json=pysparkJob,oneof"` +} +type OrderedJob_HiveJob struct { + HiveJob *HiveJob `protobuf:"bytes,5,opt,name=hive_job,json=hiveJob,oneof"` +} +type OrderedJob_PigJob struct { + PigJob *PigJob `protobuf:"bytes,6,opt,name=pig_job,json=pigJob,oneof"` +} +type OrderedJob_SparkSqlJob struct { + SparkSqlJob *SparkSqlJob `protobuf:"bytes,7,opt,name=spark_sql_job,json=sparkSqlJob,oneof"` +} + +func (*OrderedJob_HadoopJob) isOrderedJob_JobType() {} +func (*OrderedJob_SparkJob) isOrderedJob_JobType() {} +func (*OrderedJob_PysparkJob) isOrderedJob_JobType() {} +func (*OrderedJob_HiveJob) isOrderedJob_JobType() {} +func (*OrderedJob_PigJob) isOrderedJob_JobType() {} +func (*OrderedJob_SparkSqlJob) isOrderedJob_JobType() {} + +func (m *OrderedJob) GetJobType() isOrderedJob_JobType { + if m != nil { + return m.JobType + } + return nil +} + +func (m *OrderedJob) GetStepId() string { + if m != nil { + return m.StepId + } + return "" +} + +func (m *OrderedJob) GetHadoopJob() *HadoopJob { + if x, ok := m.GetJobType().(*OrderedJob_HadoopJob); ok { + return x.HadoopJob + } + return nil +} + +func (m *OrderedJob) GetSparkJob() *SparkJob { + if x, ok := m.GetJobType().(*OrderedJob_SparkJob); ok { + return x.SparkJob + } + return nil +} + +func (m *OrderedJob) GetPysparkJob() *PySparkJob { + if x, ok := m.GetJobType().(*OrderedJob_PysparkJob); ok { + return x.PysparkJob + } + return nil +} + +func (m *OrderedJob) GetHiveJob() *HiveJob { + if x, ok := m.GetJobType().(*OrderedJob_HiveJob); ok { + return x.HiveJob + } + return nil +} + +func (m *OrderedJob) GetPigJob() *PigJob { + if x, ok := m.GetJobType().(*OrderedJob_PigJob); ok { + return x.PigJob + } + return nil +} + +func (m *OrderedJob) GetSparkSqlJob() *SparkSqlJob { + if x, ok := m.GetJobType().(*OrderedJob_SparkSqlJob); ok { + return x.SparkSqlJob + } + return nil +} + +func (m *OrderedJob) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +func (m *OrderedJob) GetScheduling() *JobScheduling { + if m != nil { + return m.Scheduling + } + return nil +} + +func (m *OrderedJob) GetPrerequisiteStepIds() []string { + if m != nil { + return m.PrerequisiteStepIds + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*OrderedJob) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _OrderedJob_OneofMarshaler, _OrderedJob_OneofUnmarshaler, _OrderedJob_OneofSizer, []interface{}{ + (*OrderedJob_HadoopJob)(nil), + (*OrderedJob_SparkJob)(nil), + (*OrderedJob_PysparkJob)(nil), + (*OrderedJob_HiveJob)(nil), + (*OrderedJob_PigJob)(nil), + (*OrderedJob_SparkSqlJob)(nil), + } +} + +func _OrderedJob_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*OrderedJob) + // job_type + switch x := m.JobType.(type) { + case *OrderedJob_HadoopJob: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.HadoopJob); err != nil { + return err + } + case *OrderedJob_SparkJob: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.SparkJob); err != nil { + return err + } + case *OrderedJob_PysparkJob: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.PysparkJob); err != nil { + return err + } + case *OrderedJob_HiveJob: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.HiveJob); err != nil { + return err + } + case *OrderedJob_PigJob: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.PigJob); err != nil { + return err + } + case *OrderedJob_SparkSqlJob: + b.EncodeVarint(7<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.SparkSqlJob); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("OrderedJob.JobType has unexpected type %T", x) + } + return nil +} + +func _OrderedJob_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*OrderedJob) + switch tag { + case 2: // job_type.hadoop_job + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(HadoopJob) + err := b.DecodeMessage(msg) + m.JobType = &OrderedJob_HadoopJob{msg} + return true, err + case 3: // job_type.spark_job + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(SparkJob) + err := b.DecodeMessage(msg) + m.JobType = &OrderedJob_SparkJob{msg} + return true, err + case 4: // job_type.pyspark_job + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PySparkJob) + err := b.DecodeMessage(msg) + m.JobType = &OrderedJob_PysparkJob{msg} + return true, err + case 5: // job_type.hive_job + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(HiveJob) + err := b.DecodeMessage(msg) + m.JobType = &OrderedJob_HiveJob{msg} + return true, err + case 6: // job_type.pig_job + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PigJob) + err := b.DecodeMessage(msg) + m.JobType = &OrderedJob_PigJob{msg} + return true, err + case 7: // job_type.spark_sql_job + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(SparkSqlJob) + err := b.DecodeMessage(msg) + m.JobType = &OrderedJob_SparkSqlJob{msg} + return true, err + default: + return false, nil + } +} + +func _OrderedJob_OneofSizer(msg proto.Message) (n int) { + m := msg.(*OrderedJob) + // job_type + switch x := m.JobType.(type) { + case *OrderedJob_HadoopJob: + s := proto.Size(x.HadoopJob) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *OrderedJob_SparkJob: + s := proto.Size(x.SparkJob) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *OrderedJob_PysparkJob: + s := proto.Size(x.PysparkJob) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *OrderedJob_HiveJob: + s := proto.Size(x.HiveJob) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *OrderedJob_PigJob: + s := proto.Size(x.PigJob) + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *OrderedJob_SparkSqlJob: + s := proto.Size(x.SparkSqlJob) + n += proto.SizeVarint(7<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A Cloud Dataproc workflow template resource. +type WorkflowMetadata struct { + // Output only. The "resource name" of the template. + Template string `protobuf:"bytes,1,opt,name=template" json:"template,omitempty"` + // Output only. The version of template at the time of + // workflow instantiation. + Version int32 `protobuf:"varint,2,opt,name=version" json:"version,omitempty"` + // Output only. The create cluster operation metadata. + CreateCluster *ClusterOperation `protobuf:"bytes,3,opt,name=create_cluster,json=createCluster" json:"create_cluster,omitempty"` + // Output only. The workflow graph. + Graph *WorkflowGraph `protobuf:"bytes,4,opt,name=graph" json:"graph,omitempty"` + // Output only. The delete cluster operation metadata. + DeleteCluster *ClusterOperation `protobuf:"bytes,5,opt,name=delete_cluster,json=deleteCluster" json:"delete_cluster,omitempty"` + // Output only. The workflow state. + State WorkflowMetadata_State `protobuf:"varint,6,opt,name=state,enum=google.cloud.dataproc.v1beta2.WorkflowMetadata_State" json:"state,omitempty"` + // Output only. The name of the managed cluster. + ClusterName string `protobuf:"bytes,7,opt,name=cluster_name,json=clusterName" json:"cluster_name,omitempty"` +} + +func (m *WorkflowMetadata) Reset() { *m = WorkflowMetadata{} } +func (m *WorkflowMetadata) String() string { return proto.CompactTextString(m) } +func (*WorkflowMetadata) ProtoMessage() {} +func (*WorkflowMetadata) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{5} } + +func (m *WorkflowMetadata) GetTemplate() string { + if m != nil { + return m.Template + } + return "" +} + +func (m *WorkflowMetadata) GetVersion() int32 { + if m != nil { + return m.Version + } + return 0 +} + +func (m *WorkflowMetadata) GetCreateCluster() *ClusterOperation { + if m != nil { + return m.CreateCluster + } + return nil +} + +func (m *WorkflowMetadata) GetGraph() *WorkflowGraph { + if m != nil { + return m.Graph + } + return nil +} + +func (m *WorkflowMetadata) GetDeleteCluster() *ClusterOperation { + if m != nil { + return m.DeleteCluster + } + return nil +} + +func (m *WorkflowMetadata) GetState() WorkflowMetadata_State { + if m != nil { + return m.State + } + return WorkflowMetadata_UNKNOWN +} + +func (m *WorkflowMetadata) GetClusterName() string { + if m != nil { + return m.ClusterName + } + return "" +} + +type ClusterOperation struct { + // Output only. The id of the cluster operation. + OperationId string `protobuf:"bytes,1,opt,name=operation_id,json=operationId" json:"operation_id,omitempty"` + // Output only. Error, if operation failed. + Error string `protobuf:"bytes,2,opt,name=error" json:"error,omitempty"` + // Output only. Indicates the operation is done. + Done bool `protobuf:"varint,3,opt,name=done" json:"done,omitempty"` +} + +func (m *ClusterOperation) Reset() { *m = ClusterOperation{} } +func (m *ClusterOperation) String() string { return proto.CompactTextString(m) } +func (*ClusterOperation) ProtoMessage() {} +func (*ClusterOperation) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{6} } + +func (m *ClusterOperation) GetOperationId() string { + if m != nil { + return m.OperationId + } + return "" +} + +func (m *ClusterOperation) GetError() string { + if m != nil { + return m.Error + } + return "" +} + +func (m *ClusterOperation) GetDone() bool { + if m != nil { + return m.Done + } + return false +} + +// The workflow graph. +type WorkflowGraph struct { + // Output only. The workflow nodes. + Nodes []*WorkflowNode `protobuf:"bytes,1,rep,name=nodes" json:"nodes,omitempty"` +} + +func (m *WorkflowGraph) Reset() { *m = WorkflowGraph{} } +func (m *WorkflowGraph) String() string { return proto.CompactTextString(m) } +func (*WorkflowGraph) ProtoMessage() {} +func (*WorkflowGraph) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{7} } + +func (m *WorkflowGraph) GetNodes() []*WorkflowNode { + if m != nil { + return m.Nodes + } + return nil +} + +// The workflow node. +type WorkflowNode struct { + // Output only. The name of the node. + StepId string `protobuf:"bytes,1,opt,name=step_id,json=stepId" json:"step_id,omitempty"` + // Output only. Node's prerequisite nodes. + PrerequisiteStepIds []string `protobuf:"bytes,2,rep,name=prerequisite_step_ids,json=prerequisiteStepIds" json:"prerequisite_step_ids,omitempty"` + // Output only. The job id; populated after the node enters RUNNING state. + JobId string `protobuf:"bytes,3,opt,name=job_id,json=jobId" json:"job_id,omitempty"` + // Output only. The node state. + State WorkflowNode_NodeState `protobuf:"varint,5,opt,name=state,enum=google.cloud.dataproc.v1beta2.WorkflowNode_NodeState" json:"state,omitempty"` + // Output only. The error detail. + Error string `protobuf:"bytes,6,opt,name=error" json:"error,omitempty"` +} + +func (m *WorkflowNode) Reset() { *m = WorkflowNode{} } +func (m *WorkflowNode) String() string { return proto.CompactTextString(m) } +func (*WorkflowNode) ProtoMessage() {} +func (*WorkflowNode) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{8} } + +func (m *WorkflowNode) GetStepId() string { + if m != nil { + return m.StepId + } + return "" +} + +func (m *WorkflowNode) GetPrerequisiteStepIds() []string { + if m != nil { + return m.PrerequisiteStepIds + } + return nil +} + +func (m *WorkflowNode) GetJobId() string { + if m != nil { + return m.JobId + } + return "" +} + +func (m *WorkflowNode) GetState() WorkflowNode_NodeState { + if m != nil { + return m.State + } + return WorkflowNode_NODE_STATUS_UNSPECIFIED +} + +func (m *WorkflowNode) GetError() string { + if m != nil { + return m.Error + } + return "" +} + +// A request to create a workflow template. +type CreateWorkflowTemplateRequest struct { + // Required. The "resource name" of the region, as described + // in https://cloud.google.com/apis/design/resource_names of the form + // `projects/{project_id}/regions/{region}` + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Required. The Dataproc workflow template to create. + Template *WorkflowTemplate `protobuf:"bytes,2,opt,name=template" json:"template,omitempty"` +} + +func (m *CreateWorkflowTemplateRequest) Reset() { *m = CreateWorkflowTemplateRequest{} } +func (m *CreateWorkflowTemplateRequest) String() string { return proto.CompactTextString(m) } +func (*CreateWorkflowTemplateRequest) ProtoMessage() {} +func (*CreateWorkflowTemplateRequest) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{9} } + +func (m *CreateWorkflowTemplateRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateWorkflowTemplateRequest) GetTemplate() *WorkflowTemplate { + if m != nil { + return m.Template + } + return nil +} + +// A request to fetch a workflow template. +type GetWorkflowTemplateRequest struct { + // Required. The "resource name" of the workflow template, as described + // in https://cloud.google.com/apis/design/resource_names of the form + // `projects/{project_id}/regions/{region}/workflowTemplates/{template_id}` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Optional. The version of workflow template to retrieve. Only previously + // instatiated versions can be retrieved. + // + // If unspecified, retrieves the current version. + Version int32 `protobuf:"varint,2,opt,name=version" json:"version,omitempty"` +} + +func (m *GetWorkflowTemplateRequest) Reset() { *m = GetWorkflowTemplateRequest{} } +func (m *GetWorkflowTemplateRequest) String() string { return proto.CompactTextString(m) } +func (*GetWorkflowTemplateRequest) ProtoMessage() {} +func (*GetWorkflowTemplateRequest) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{10} } + +func (m *GetWorkflowTemplateRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *GetWorkflowTemplateRequest) GetVersion() int32 { + if m != nil { + return m.Version + } + return 0 +} + +// A request to instantiate a workflow template. +type InstantiateWorkflowTemplateRequest struct { + // Required. The "resource name" of the workflow template, as described + // in https://cloud.google.com/apis/design/resource_names of the form + // `projects/{project_id}/regions/{region}/workflowTemplates/{template_id}` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Optional. The version of workflow template to instantiate. If specified, + // the workflow will be instantiated only if the current version of + // the workflow template has the supplied version. + // + // This option cannot be used to instantiate a previous version of + // workflow template. + Version int32 `protobuf:"varint,2,opt,name=version" json:"version,omitempty"` + // Optional. A tag that prevents multiple concurrent workflow + // instances with the same tag from running. This mitigates risk of + // concurrent instances started due to retries. + // + // It is recommended to always set this value to a + // [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier). + // + // The tag must contain only letters (a-z, A-Z), numbers (0-9), + // underscores (_), and hyphens (-). The maximum length is 40 characters. + InstanceId string `protobuf:"bytes,3,opt,name=instance_id,json=instanceId" json:"instance_id,omitempty"` +} + +func (m *InstantiateWorkflowTemplateRequest) Reset() { *m = InstantiateWorkflowTemplateRequest{} } +func (m *InstantiateWorkflowTemplateRequest) String() string { return proto.CompactTextString(m) } +func (*InstantiateWorkflowTemplateRequest) ProtoMessage() {} +func (*InstantiateWorkflowTemplateRequest) Descriptor() ([]byte, []int) { + return fileDescriptor3, []int{11} +} + +func (m *InstantiateWorkflowTemplateRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *InstantiateWorkflowTemplateRequest) GetVersion() int32 { + if m != nil { + return m.Version + } + return 0 +} + +func (m *InstantiateWorkflowTemplateRequest) GetInstanceId() string { + if m != nil { + return m.InstanceId + } + return "" +} + +// A request to update a workflow template. +type UpdateWorkflowTemplateRequest struct { + // Required. The updated workflow template. + // + // The `template.version` field must match the current version. + Template *WorkflowTemplate `protobuf:"bytes,1,opt,name=template" json:"template,omitempty"` +} + +func (m *UpdateWorkflowTemplateRequest) Reset() { *m = UpdateWorkflowTemplateRequest{} } +func (m *UpdateWorkflowTemplateRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateWorkflowTemplateRequest) ProtoMessage() {} +func (*UpdateWorkflowTemplateRequest) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{12} } + +func (m *UpdateWorkflowTemplateRequest) GetTemplate() *WorkflowTemplate { + if m != nil { + return m.Template + } + return nil +} + +// A request to list workflow templates in a project. +type ListWorkflowTemplatesRequest struct { + // Required. The "resource name" of the region, as described + // in https://cloud.google.com/apis/design/resource_names of the form + // `projects/{project_id}/regions/{region}` + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Optional. The maximum number of results to return in each response. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // Optional. The page token, returned by a previous call, to request the + // next page of results. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListWorkflowTemplatesRequest) Reset() { *m = ListWorkflowTemplatesRequest{} } +func (m *ListWorkflowTemplatesRequest) String() string { return proto.CompactTextString(m) } +func (*ListWorkflowTemplatesRequest) ProtoMessage() {} +func (*ListWorkflowTemplatesRequest) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{13} } + +func (m *ListWorkflowTemplatesRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListWorkflowTemplatesRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListWorkflowTemplatesRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// A response to a request to list workflow templates in a project. +type ListWorkflowTemplatesResponse struct { + // Output only. WorkflowTemplates list. + Templates []*WorkflowTemplate `protobuf:"bytes,1,rep,name=templates" json:"templates,omitempty"` + // Output only. This token is included in the response if there are more results + // to fetch. To fetch additional results, provide this value as the + // page_token in a subsequent ListWorkflowTemplatesRequest. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListWorkflowTemplatesResponse) Reset() { *m = ListWorkflowTemplatesResponse{} } +func (m *ListWorkflowTemplatesResponse) String() string { return proto.CompactTextString(m) } +func (*ListWorkflowTemplatesResponse) ProtoMessage() {} +func (*ListWorkflowTemplatesResponse) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{14} } + +func (m *ListWorkflowTemplatesResponse) GetTemplates() []*WorkflowTemplate { + if m != nil { + return m.Templates + } + return nil +} + +func (m *ListWorkflowTemplatesResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// A request to delete a workflow template. +// +// Currently started workflows will remain running. +type DeleteWorkflowTemplateRequest struct { + // Required. The "resource name" of the workflow template, as described + // in https://cloud.google.com/apis/design/resource_names of the form + // `projects/{project_id}/regions/{region}/workflowTemplates/{template_id}` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Optional. The version of workflow template to delete. If specified, + // will only delete the template if the current server version matches + // specified version. + Version int32 `protobuf:"varint,2,opt,name=version" json:"version,omitempty"` +} + +func (m *DeleteWorkflowTemplateRequest) Reset() { *m = DeleteWorkflowTemplateRequest{} } +func (m *DeleteWorkflowTemplateRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteWorkflowTemplateRequest) ProtoMessage() {} +func (*DeleteWorkflowTemplateRequest) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{15} } + +func (m *DeleteWorkflowTemplateRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *DeleteWorkflowTemplateRequest) GetVersion() int32 { + if m != nil { + return m.Version + } + return 0 +} + +func init() { + proto.RegisterType((*WorkflowTemplate)(nil), "google.cloud.dataproc.v1beta2.WorkflowTemplate") + proto.RegisterType((*WorkflowTemplatePlacement)(nil), "google.cloud.dataproc.v1beta2.WorkflowTemplatePlacement") + proto.RegisterType((*ManagedCluster)(nil), "google.cloud.dataproc.v1beta2.ManagedCluster") + proto.RegisterType((*ClusterSelector)(nil), "google.cloud.dataproc.v1beta2.ClusterSelector") + proto.RegisterType((*OrderedJob)(nil), "google.cloud.dataproc.v1beta2.OrderedJob") + proto.RegisterType((*WorkflowMetadata)(nil), "google.cloud.dataproc.v1beta2.WorkflowMetadata") + proto.RegisterType((*ClusterOperation)(nil), "google.cloud.dataproc.v1beta2.ClusterOperation") + proto.RegisterType((*WorkflowGraph)(nil), "google.cloud.dataproc.v1beta2.WorkflowGraph") + proto.RegisterType((*WorkflowNode)(nil), "google.cloud.dataproc.v1beta2.WorkflowNode") + proto.RegisterType((*CreateWorkflowTemplateRequest)(nil), "google.cloud.dataproc.v1beta2.CreateWorkflowTemplateRequest") + proto.RegisterType((*GetWorkflowTemplateRequest)(nil), "google.cloud.dataproc.v1beta2.GetWorkflowTemplateRequest") + proto.RegisterType((*InstantiateWorkflowTemplateRequest)(nil), "google.cloud.dataproc.v1beta2.InstantiateWorkflowTemplateRequest") + proto.RegisterType((*UpdateWorkflowTemplateRequest)(nil), "google.cloud.dataproc.v1beta2.UpdateWorkflowTemplateRequest") + proto.RegisterType((*ListWorkflowTemplatesRequest)(nil), "google.cloud.dataproc.v1beta2.ListWorkflowTemplatesRequest") + proto.RegisterType((*ListWorkflowTemplatesResponse)(nil), "google.cloud.dataproc.v1beta2.ListWorkflowTemplatesResponse") + proto.RegisterType((*DeleteWorkflowTemplateRequest)(nil), "google.cloud.dataproc.v1beta2.DeleteWorkflowTemplateRequest") + proto.RegisterEnum("google.cloud.dataproc.v1beta2.WorkflowMetadata_State", WorkflowMetadata_State_name, WorkflowMetadata_State_value) + proto.RegisterEnum("google.cloud.dataproc.v1beta2.WorkflowNode_NodeState", WorkflowNode_NodeState_name, WorkflowNode_NodeState_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for WorkflowTemplateService service + +type WorkflowTemplateServiceClient interface { + // Creates new workflow template. + CreateWorkflowTemplate(ctx context.Context, in *CreateWorkflowTemplateRequest, opts ...grpc.CallOption) (*WorkflowTemplate, error) + // Retrieves the latest workflow template. + // + // Can retrieve previously instantiated template by specifying optional + // version parameter. + GetWorkflowTemplate(ctx context.Context, in *GetWorkflowTemplateRequest, opts ...grpc.CallOption) (*WorkflowTemplate, error) + // Instantiates a template and begins execution. + // + // The returned Operation can be used to track execution of + // workflow by polling + // [google.cloud.dataproc.v1beta2.OperationService.GetOperation][]. + // The Operation will complete when entire workflow is finished. + // + // The running workflow can be aborted via + // [google.cloud.dataproc.v1beta2.OperationService.CancelOperation][]. + // + // The [google.cloud.dataproc.v1beta2.Operation.metadata][] will always be + // [google.cloud.dataproc.v1beta2.WorkflowMetadata][google.cloud.dataproc.v1beta2.WorkflowMetadata]. + // + // The [google.cloud.dataproc.v1beta2.Operation.result][] will always be + // [google.protobuf.Empty][google.protobuf.Empty]. + InstantiateWorkflowTemplate(ctx context.Context, in *InstantiateWorkflowTemplateRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Updates (replaces) workflow template. The updated template + // must contain version that matches the current server version. + UpdateWorkflowTemplate(ctx context.Context, in *UpdateWorkflowTemplateRequest, opts ...grpc.CallOption) (*WorkflowTemplate, error) + // Lists workflows that match the specified filter in the request. + ListWorkflowTemplates(ctx context.Context, in *ListWorkflowTemplatesRequest, opts ...grpc.CallOption) (*ListWorkflowTemplatesResponse, error) + // Deletes a workflow template. It does not cancel in-progress workflows. + DeleteWorkflowTemplate(ctx context.Context, in *DeleteWorkflowTemplateRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) +} + +type workflowTemplateServiceClient struct { + cc *grpc.ClientConn +} + +func NewWorkflowTemplateServiceClient(cc *grpc.ClientConn) WorkflowTemplateServiceClient { + return &workflowTemplateServiceClient{cc} +} + +func (c *workflowTemplateServiceClient) CreateWorkflowTemplate(ctx context.Context, in *CreateWorkflowTemplateRequest, opts ...grpc.CallOption) (*WorkflowTemplate, error) { + out := new(WorkflowTemplate) + err := grpc.Invoke(ctx, "/google.cloud.dataproc.v1beta2.WorkflowTemplateService/CreateWorkflowTemplate", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *workflowTemplateServiceClient) GetWorkflowTemplate(ctx context.Context, in *GetWorkflowTemplateRequest, opts ...grpc.CallOption) (*WorkflowTemplate, error) { + out := new(WorkflowTemplate) + err := grpc.Invoke(ctx, "/google.cloud.dataproc.v1beta2.WorkflowTemplateService/GetWorkflowTemplate", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *workflowTemplateServiceClient) InstantiateWorkflowTemplate(ctx context.Context, in *InstantiateWorkflowTemplateRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.dataproc.v1beta2.WorkflowTemplateService/InstantiateWorkflowTemplate", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *workflowTemplateServiceClient) UpdateWorkflowTemplate(ctx context.Context, in *UpdateWorkflowTemplateRequest, opts ...grpc.CallOption) (*WorkflowTemplate, error) { + out := new(WorkflowTemplate) + err := grpc.Invoke(ctx, "/google.cloud.dataproc.v1beta2.WorkflowTemplateService/UpdateWorkflowTemplate", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *workflowTemplateServiceClient) ListWorkflowTemplates(ctx context.Context, in *ListWorkflowTemplatesRequest, opts ...grpc.CallOption) (*ListWorkflowTemplatesResponse, error) { + out := new(ListWorkflowTemplatesResponse) + err := grpc.Invoke(ctx, "/google.cloud.dataproc.v1beta2.WorkflowTemplateService/ListWorkflowTemplates", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *workflowTemplateServiceClient) DeleteWorkflowTemplate(ctx context.Context, in *DeleteWorkflowTemplateRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) { + out := new(google_protobuf2.Empty) + err := grpc.Invoke(ctx, "/google.cloud.dataproc.v1beta2.WorkflowTemplateService/DeleteWorkflowTemplate", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for WorkflowTemplateService service + +type WorkflowTemplateServiceServer interface { + // Creates new workflow template. + CreateWorkflowTemplate(context.Context, *CreateWorkflowTemplateRequest) (*WorkflowTemplate, error) + // Retrieves the latest workflow template. + // + // Can retrieve previously instantiated template by specifying optional + // version parameter. + GetWorkflowTemplate(context.Context, *GetWorkflowTemplateRequest) (*WorkflowTemplate, error) + // Instantiates a template and begins execution. + // + // The returned Operation can be used to track execution of + // workflow by polling + // [google.cloud.dataproc.v1beta2.OperationService.GetOperation][]. + // The Operation will complete when entire workflow is finished. + // + // The running workflow can be aborted via + // [google.cloud.dataproc.v1beta2.OperationService.CancelOperation][]. + // + // The [google.cloud.dataproc.v1beta2.Operation.metadata][] will always be + // [google.cloud.dataproc.v1beta2.WorkflowMetadata][google.cloud.dataproc.v1beta2.WorkflowMetadata]. + // + // The [google.cloud.dataproc.v1beta2.Operation.result][] will always be + // [google.protobuf.Empty][google.protobuf.Empty]. + InstantiateWorkflowTemplate(context.Context, *InstantiateWorkflowTemplateRequest) (*google_longrunning.Operation, error) + // Updates (replaces) workflow template. The updated template + // must contain version that matches the current server version. + UpdateWorkflowTemplate(context.Context, *UpdateWorkflowTemplateRequest) (*WorkflowTemplate, error) + // Lists workflows that match the specified filter in the request. + ListWorkflowTemplates(context.Context, *ListWorkflowTemplatesRequest) (*ListWorkflowTemplatesResponse, error) + // Deletes a workflow template. It does not cancel in-progress workflows. + DeleteWorkflowTemplate(context.Context, *DeleteWorkflowTemplateRequest) (*google_protobuf2.Empty, error) +} + +func RegisterWorkflowTemplateServiceServer(s *grpc.Server, srv WorkflowTemplateServiceServer) { + s.RegisterService(&_WorkflowTemplateService_serviceDesc, srv) +} + +func _WorkflowTemplateService_CreateWorkflowTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateWorkflowTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WorkflowTemplateServiceServer).CreateWorkflowTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dataproc.v1beta2.WorkflowTemplateService/CreateWorkflowTemplate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WorkflowTemplateServiceServer).CreateWorkflowTemplate(ctx, req.(*CreateWorkflowTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WorkflowTemplateService_GetWorkflowTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetWorkflowTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WorkflowTemplateServiceServer).GetWorkflowTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dataproc.v1beta2.WorkflowTemplateService/GetWorkflowTemplate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WorkflowTemplateServiceServer).GetWorkflowTemplate(ctx, req.(*GetWorkflowTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WorkflowTemplateService_InstantiateWorkflowTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(InstantiateWorkflowTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WorkflowTemplateServiceServer).InstantiateWorkflowTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dataproc.v1beta2.WorkflowTemplateService/InstantiateWorkflowTemplate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WorkflowTemplateServiceServer).InstantiateWorkflowTemplate(ctx, req.(*InstantiateWorkflowTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WorkflowTemplateService_UpdateWorkflowTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateWorkflowTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WorkflowTemplateServiceServer).UpdateWorkflowTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dataproc.v1beta2.WorkflowTemplateService/UpdateWorkflowTemplate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WorkflowTemplateServiceServer).UpdateWorkflowTemplate(ctx, req.(*UpdateWorkflowTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WorkflowTemplateService_ListWorkflowTemplates_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListWorkflowTemplatesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WorkflowTemplateServiceServer).ListWorkflowTemplates(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dataproc.v1beta2.WorkflowTemplateService/ListWorkflowTemplates", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WorkflowTemplateServiceServer).ListWorkflowTemplates(ctx, req.(*ListWorkflowTemplatesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _WorkflowTemplateService_DeleteWorkflowTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteWorkflowTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WorkflowTemplateServiceServer).DeleteWorkflowTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dataproc.v1beta2.WorkflowTemplateService/DeleteWorkflowTemplate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WorkflowTemplateServiceServer).DeleteWorkflowTemplate(ctx, req.(*DeleteWorkflowTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _WorkflowTemplateService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.dataproc.v1beta2.WorkflowTemplateService", + HandlerType: (*WorkflowTemplateServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateWorkflowTemplate", + Handler: _WorkflowTemplateService_CreateWorkflowTemplate_Handler, + }, + { + MethodName: "GetWorkflowTemplate", + Handler: _WorkflowTemplateService_GetWorkflowTemplate_Handler, + }, + { + MethodName: "InstantiateWorkflowTemplate", + Handler: _WorkflowTemplateService_InstantiateWorkflowTemplate_Handler, + }, + { + MethodName: "UpdateWorkflowTemplate", + Handler: _WorkflowTemplateService_UpdateWorkflowTemplate_Handler, + }, + { + MethodName: "ListWorkflowTemplates", + Handler: _WorkflowTemplateService_ListWorkflowTemplates_Handler, + }, + { + MethodName: "DeleteWorkflowTemplate", + Handler: _WorkflowTemplateService_DeleteWorkflowTemplate_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/dataproc/v1beta2/workflow_templates.proto", +} + +func init() { + proto.RegisterFile("google/cloud/dataproc/v1beta2/workflow_templates.proto", fileDescriptor3) +} + +var fileDescriptor3 = []byte{ + // 1634 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0x5d, 0x6f, 0xdb, 0x5c, + 0x1d, 0xaf, 0xd3, 0x26, 0x4d, 0xfe, 0x59, 0xdb, 0xe8, 0x3c, 0xac, 0x0b, 0xe9, 0x53, 0xad, 0x33, + 0x62, 0x94, 0x32, 0x12, 0x11, 0x04, 0xea, 0xba, 0x4d, 0x5a, 0xdb, 0x64, 0x6b, 0xda, 0x34, 0x09, + 0x4e, 0xbb, 0x21, 0xb8, 0x88, 0x9c, 0xf8, 0xcc, 0x75, 0xeb, 0xf8, 0xb8, 0xb6, 0xd3, 0xd1, 0xa1, + 0xdd, 0xa0, 0x49, 0x7c, 0x00, 0x24, 0x3e, 0x07, 0x9f, 0x01, 0xbe, 0x00, 0x68, 0x5c, 0x22, 0x71, + 0x83, 0xb8, 0xdf, 0x15, 0xb7, 0xe8, 0xbc, 0xd8, 0x71, 0x5e, 0x9d, 0x74, 0xcf, 0x4d, 0xe4, 0x73, + 0x72, 0x7e, 0xbf, 0xf3, 0xfb, 0xbf, 0x1e, 0x1f, 0xc3, 0x2f, 0x75, 0x42, 0x74, 0x13, 0x17, 0x3a, + 0x26, 0xe9, 0x69, 0x05, 0x4d, 0xf5, 0x54, 0xdb, 0x21, 0x9d, 0xc2, 0xcd, 0xcf, 0xda, 0xd8, 0x53, + 0x8b, 0x85, 0xf7, 0xc4, 0xb9, 0x7a, 0x67, 0x92, 0xf7, 0x2d, 0x0f, 0x77, 0x6d, 0x53, 0xf5, 0xb0, + 0x9b, 0xb7, 0x1d, 0xe2, 0x11, 0xb4, 0xc9, 0x71, 0x79, 0x86, 0xcb, 0xfb, 0xb8, 0xbc, 0xc0, 0xe5, + 0xbe, 0x15, 0xb4, 0xaa, 0x6d, 0x14, 0x54, 0xcb, 0x22, 0x9e, 0xea, 0x19, 0xc4, 0x12, 0xe0, 0xdc, + 0x93, 0xe9, 0x9b, 0x76, 0xcc, 0x9e, 0xeb, 0x61, 0xc7, 0x5f, 0xbd, 0x3d, 0x7d, 0xf5, 0x25, 0x69, + 0xfb, 0x2b, 0x7f, 0x20, 0x56, 0x9a, 0xc4, 0xd2, 0x9d, 0x9e, 0x65, 0x19, 0x96, 0x5e, 0x20, 0x36, + 0x76, 0x06, 0x36, 0xdf, 0x10, 0x8b, 0xd8, 0xa8, 0xdd, 0x7b, 0x57, 0xc0, 0x5d, 0xdb, 0xbb, 0x15, + 0x7f, 0x3e, 0x1c, 0xfe, 0xd3, 0x33, 0xba, 0xd8, 0xf5, 0xd4, 0xae, 0xcd, 0x17, 0xc8, 0x5f, 0x16, + 0x21, 0xf3, 0x56, 0x38, 0xe5, 0x4c, 0xf8, 0x04, 0xad, 0x42, 0xcc, 0xd0, 0xb2, 0xb1, 0x2d, 0x69, + 0x3b, 0xa5, 0xc4, 0x0c, 0x0d, 0x21, 0x58, 0xb2, 0xd4, 0x2e, 0xce, 0x4a, 0x6c, 0x86, 0x3d, 0xa3, + 0x2c, 0x2c, 0xdf, 0x60, 0xc7, 0x35, 0x88, 0x95, 0x5d, 0xdc, 0x92, 0xb6, 0xe3, 0x8a, 0x3f, 0x44, + 0xcf, 0x20, 0xdd, 0x71, 0xb0, 0xea, 0xe1, 0x16, 0xdd, 0x2c, 0xbb, 0xb4, 0x25, 0x6d, 0xa7, 0x8b, + 0xb9, 0xbc, 0x70, 0xb0, 0xaf, 0x24, 0x7f, 0xe6, 0x2b, 0x51, 0x80, 0x2f, 0xa7, 0x13, 0x14, 0xdc, + 0xb3, 0xb5, 0x00, 0x1c, 0x8f, 0x06, 0xf3, 0xe5, 0x0c, 0xdc, 0x84, 0x84, 0xa9, 0xb6, 0xb1, 0xe9, + 0x66, 0x13, 0x5b, 0x8b, 0xdb, 0xe9, 0xe2, 0xb3, 0xfc, 0xd4, 0xa8, 0xe6, 0x87, 0x0d, 0xcf, 0x57, + 0x19, 0xba, 0x6c, 0x79, 0xce, 0xad, 0x22, 0xa8, 0xd0, 0x1b, 0x48, 0xd9, 0xa6, 0xda, 0xc1, 0x5d, + 0x6c, 0x79, 0xd9, 0x65, 0xa6, 0x67, 0x77, 0x4e, 0xde, 0x86, 0x8f, 0x57, 0xfa, 0x54, 0xe8, 0x05, + 0x2c, 0xd1, 0x50, 0x67, 0x93, 0x4c, 0xea, 0x8f, 0x23, 0x28, 0xeb, 0x8e, 0x86, 0x1d, 0xac, 0x1d, + 0x93, 0xb6, 0xc2, 0x60, 0xb9, 0xa7, 0x90, 0x0e, 0xa9, 0x45, 0x19, 0x58, 0xbc, 0xc2, 0xb7, 0x22, + 0x42, 0xf4, 0x11, 0x7d, 0x0f, 0xe2, 0x37, 0xaa, 0xd9, 0xc3, 0x22, 0x8e, 0x7c, 0xb0, 0x17, 0xdb, + 0x95, 0xe4, 0x7f, 0x4b, 0xf0, 0xfd, 0x89, 0x12, 0xd1, 0xaf, 0x61, 0xad, 0xab, 0x5a, 0xaa, 0x8e, + 0xb5, 0x96, 0x48, 0x5c, 0xc6, 0x9a, 0x2e, 0xfe, 0x34, 0x42, 0xe2, 0x29, 0x47, 0x1d, 0x72, 0xd0, + 0xd1, 0x82, 0xb2, 0xda, 0x1d, 0x98, 0x41, 0xbf, 0x85, 0x8c, 0x60, 0x6c, 0xb9, 0xd8, 0xc4, 0x1d, + 0x8f, 0x38, 0x4c, 0x5c, 0xba, 0x98, 0x8f, 0xa0, 0x16, 0x0c, 0x4d, 0x81, 0x3a, 0x5a, 0x50, 0xd6, + 0x3a, 0x83, 0x53, 0x07, 0xe9, 0x50, 0x98, 0xe4, 0x3f, 0xc6, 0x60, 0x75, 0x50, 0x0e, 0x7a, 0x04, + 0xf7, 0xfc, 0xcd, 0x59, 0x2e, 0x73, 0xaf, 0xa4, 0xc5, 0x5c, 0x8d, 0xa6, 0x74, 0x09, 0x12, 0x1d, + 0x62, 0xbd, 0x33, 0x74, 0x96, 0xd1, 0xe9, 0xe2, 0x93, 0xd9, 0x54, 0x1d, 0x32, 0x8c, 0x22, 0xb0, + 0xe8, 0x57, 0x41, 0x12, 0x2e, 0xb1, 0xc8, 0x3e, 0x9d, 0xcb, 0x6d, 0xe3, 0x52, 0xf0, 0x6b, 0x62, + 0xfd, 0x0f, 0x09, 0xd6, 0x86, 0xbc, 0x47, 0xcb, 0xf9, 0x03, 0xb1, 0x82, 0x72, 0xa6, 0xcf, 0xe8, + 0x02, 0x56, 0x7d, 0xf7, 0x08, 0xf5, 0x31, 0xa6, 0x7e, 0x7f, 0xbe, 0xc8, 0xf8, 0xe3, 0xb0, 0x15, + 0x2b, 0x9d, 0xf0, 0x5c, 0xee, 0x25, 0xa0, 0xd1, 0x45, 0x73, 0xd9, 0xf4, 0xbf, 0x38, 0x40, 0xbf, + 0x1e, 0xd0, 0x03, 0x58, 0x76, 0x3d, 0x6c, 0xb7, 0x0c, 0x4d, 0xc0, 0x13, 0x74, 0x58, 0xd1, 0x50, + 0x05, 0xe0, 0x42, 0xd5, 0x08, 0xb1, 0x5b, 0x97, 0xa4, 0x2d, 0x32, 0x6d, 0x3b, 0xc2, 0x9e, 0x23, + 0x06, 0x38, 0x26, 0xed, 0xa3, 0x05, 0x25, 0x75, 0xe1, 0x0f, 0xd0, 0x2b, 0x48, 0xb9, 0xb6, 0xea, + 0x5c, 0x31, 0x26, 0x9e, 0x1d, 0x3f, 0x8a, 0x60, 0x6a, 0xd2, 0xf5, 0x9c, 0x28, 0xe9, 0x8a, 0x67, + 0x54, 0x85, 0xb4, 0x7d, 0xdb, 0x67, 0xe2, 0xbd, 0x31, 0xaa, 0xf6, 0x1b, 0xb7, 0x21, 0x2e, 0x10, + 0x78, 0xca, 0x76, 0x08, 0xc9, 0x0b, 0xe3, 0x06, 0x33, 0x2a, 0xde, 0x29, 0x1f, 0x47, 0x99, 0x67, + 0xdc, 0x60, 0xce, 0xb3, 0x7c, 0xc1, 0x1f, 0xd1, 0x4b, 0x58, 0xb6, 0x0d, 0x9d, 0x71, 0x24, 0x18, + 0xc7, 0x0f, 0xa3, 0xe4, 0x18, 0x3a, 0xa7, 0x48, 0xd8, 0xec, 0x09, 0x35, 0x60, 0x85, 0x9b, 0xe4, + 0x5e, 0x9b, 0x8c, 0x87, 0x77, 0xc9, 0x9d, 0x59, 0x1c, 0xd4, 0xbc, 0x36, 0x39, 0x59, 0xda, 0xed, + 0x0f, 0xd1, 0x69, 0x50, 0x43, 0xbc, 0x3b, 0xfe, 0x62, 0xe6, 0xee, 0x38, 0xb6, 0x85, 0x57, 0x01, + 0xdc, 0xce, 0x05, 0xd6, 0x7a, 0xa6, 0x61, 0xe9, 0xd9, 0xd4, 0x4c, 0xc5, 0x7d, 0x4c, 0xda, 0xcd, + 0x00, 0xa3, 0x84, 0xf0, 0xa8, 0x08, 0xf7, 0x6d, 0x07, 0x3b, 0xf8, 0xba, 0x67, 0xb8, 0x86, 0x87, + 0x5b, 0x22, 0xf9, 0xdc, 0x2c, 0x6c, 0x2d, 0x6e, 0xa7, 0x94, 0x6f, 0xc2, 0x7f, 0x36, 0x59, 0x26, + 0x7e, 0x4d, 0x05, 0x1f, 0x00, 0x24, 0x2f, 0x49, 0xbb, 0xe5, 0xdd, 0xda, 0x58, 0xfe, 0x6f, 0xe8, + 0xb4, 0x3e, 0xc5, 0x9e, 0x4a, 0x55, 0xa3, 0x1c, 0x24, 0xfd, 0xb7, 0x19, 0xc1, 0x18, 0x8c, 0xc3, + 0xa7, 0x74, 0x6c, 0xf0, 0x94, 0x7e, 0x03, 0xab, 0xe2, 0x94, 0xf6, 0xbb, 0x3c, 0x4f, 0xeb, 0xc2, + 0x6c, 0x05, 0x5f, 0xf7, 0x5f, 0x43, 0x94, 0x15, 0x4e, 0xe3, 0xf7, 0xd9, 0x03, 0x88, 0xeb, 0x8e, + 0x6a, 0x5f, 0x88, 0xdc, 0x7e, 0x32, 0xe3, 0x51, 0xf9, 0x9a, 0x62, 0x14, 0x0e, 0xa5, 0xda, 0x34, + 0x6c, 0xe2, 0x90, 0xb6, 0xf8, 0x1d, 0xb5, 0x71, 0x1a, 0x5f, 0xdb, 0x09, 0xc4, 0x5d, 0x8f, 0xba, + 0x89, 0x26, 0xfa, 0x6a, 0x64, 0x56, 0x0d, 0x7b, 0x3a, 0xdf, 0xa4, 0x60, 0x85, 0x73, 0x8c, 0x1c, + 0x28, 0xcb, 0x23, 0x07, 0x8a, 0xbc, 0x0b, 0x71, 0x06, 0x41, 0x69, 0x58, 0x3e, 0xaf, 0x9d, 0xd4, + 0xea, 0x6f, 0x6b, 0x99, 0x05, 0x3a, 0x68, 0x94, 0x6b, 0xa5, 0x4a, 0xed, 0x75, 0x46, 0xa2, 0x03, + 0xe5, 0xbc, 0x56, 0xa3, 0x83, 0x18, 0x4a, 0xc2, 0x52, 0xa9, 0x5e, 0x2b, 0x67, 0x16, 0xe5, 0x16, + 0x64, 0x86, 0x8d, 0xa1, 0x1b, 0x06, 0x2f, 0x7f, 0xfd, 0x66, 0x97, 0x0e, 0xe6, 0x2a, 0x1a, 0xcd, + 0x22, 0xec, 0x38, 0xe2, 0x58, 0x4d, 0x29, 0x7c, 0x40, 0xfb, 0xbd, 0x46, 0xfb, 0x3d, 0x0d, 0x70, + 0x52, 0x61, 0xcf, 0xb2, 0x02, 0x2b, 0x03, 0xae, 0x47, 0xfb, 0x10, 0xb7, 0x88, 0x86, 0xdd, 0xac, + 0xc4, 0x2a, 0xee, 0x27, 0x33, 0xfa, 0xa6, 0x46, 0x34, 0xac, 0x70, 0xa4, 0xfc, 0xd7, 0x18, 0xdc, + 0x0b, 0xcf, 0x4f, 0xee, 0xcc, 0x13, 0x4b, 0x28, 0x36, 0xb1, 0x84, 0xd0, 0x7d, 0x48, 0xd0, 0x3a, + 0x30, 0x34, 0x66, 0x47, 0x4a, 0x89, 0x5f, 0x92, 0x76, 0x45, 0xeb, 0xc7, 0x34, 0x3e, 0x57, 0x4c, + 0xa9, 0xbe, 0x3c, 0xfd, 0x19, 0x88, 0x69, 0xe0, 0xbf, 0x44, 0xc8, 0x7f, 0xf2, 0x15, 0xa4, 0x82, + 0x95, 0x68, 0x03, 0x1e, 0xd4, 0xea, 0xa5, 0x72, 0xab, 0x79, 0xb6, 0x7f, 0x76, 0xde, 0x6c, 0x9d, + 0xd7, 0x9a, 0x8d, 0xf2, 0x61, 0xe5, 0x55, 0xa5, 0x5c, 0xe2, 0xa1, 0x3d, 0xa8, 0xd6, 0x0f, 0x4f, + 0xca, 0xa5, 0x8c, 0x84, 0xee, 0x41, 0x92, 0x86, 0x76, 0xff, 0xa0, 0x5a, 0xce, 0xc4, 0xc2, 0x81, + 0x5e, 0x44, 0x2b, 0x90, 0x3a, 0xac, 0x9f, 0x36, 0xaa, 0xe5, 0xb3, 0x72, 0x29, 0xb3, 0x84, 0x00, + 0x12, 0xaf, 0xf6, 0x2b, 0xd5, 0x72, 0x29, 0x13, 0x97, 0x3f, 0x49, 0xb0, 0x79, 0xc8, 0x2a, 0x6a, + 0xf8, 0x15, 0x4d, 0xc1, 0xd7, 0x3d, 0xec, 0x7a, 0x68, 0x1d, 0x12, 0xb6, 0xea, 0xd0, 0xb7, 0x51, + 0xe1, 0x54, 0x3e, 0x42, 0x27, 0xa1, 0x3e, 0x10, 0x9b, 0xa9, 0x5e, 0x46, 0x76, 0x08, 0x08, 0xe4, + 0x63, 0xc8, 0xbd, 0xc6, 0xde, 0x24, 0x09, 0x11, 0x17, 0x82, 0xc1, 0x56, 0x23, 0xbb, 0x20, 0x57, + 0x2c, 0xd7, 0x53, 0x2d, 0xcf, 0x98, 0x62, 0xd6, 0x5c, 0x9c, 0xe8, 0x21, 0xa4, 0x0d, 0xc6, 0xd9, + 0xc1, 0xfd, 0x94, 0x00, 0x7f, 0xaa, 0xa2, 0xc9, 0x26, 0x6c, 0x9e, 0xb3, 0x9b, 0xc1, 0xa4, 0xfd, + 0x4e, 0x86, 0xda, 0xe6, 0x57, 0xb9, 0xcb, 0x81, 0x6f, 0xab, 0x86, 0x3b, 0xe2, 0x2f, 0x37, 0x2a, + 0x66, 0x1b, 0x90, 0xb2, 0x55, 0x1d, 0xb7, 0x5c, 0xe3, 0x03, 0x16, 0x26, 0x26, 0xe9, 0x44, 0xd3, + 0xf8, 0x80, 0xd1, 0x26, 0x00, 0xfb, 0xd3, 0x23, 0x57, 0xd8, 0x12, 0x26, 0xb2, 0xe5, 0x67, 0x74, + 0x42, 0xfe, 0xb3, 0x04, 0x9b, 0x13, 0x36, 0x75, 0x6d, 0x62, 0xb9, 0x18, 0x9d, 0x42, 0x2a, 0xb8, + 0xe7, 0x8a, 0xba, 0x9e, 0xdb, 0xc6, 0x3e, 0x03, 0x7a, 0x0c, 0x6b, 0x16, 0xfe, 0x9d, 0xd7, 0x0a, + 0x89, 0xe2, 0x7d, 0x66, 0x85, 0x4e, 0x37, 0x02, 0x61, 0xa7, 0xb0, 0x59, 0x62, 0x7d, 0xf7, 0x3b, + 0x09, 0x75, 0xf1, 0x4b, 0x0a, 0x1e, 0x0c, 0x33, 0x35, 0xb1, 0x73, 0x63, 0x74, 0x30, 0xfa, 0x2c, + 0xc1, 0xfa, 0xf8, 0x6a, 0x41, 0xcf, 0xa3, 0x0e, 0x8b, 0x69, 0x45, 0x96, 0x9b, 0xd7, 0x4f, 0xf2, + 0xf1, 0x1f, 0x3e, 0xff, 0xe7, 0x4f, 0xb1, 0x92, 0xbc, 0x1b, 0x5c, 0xe4, 0x7f, 0xcf, 0x63, 0xfc, + 0xc2, 0x76, 0xc8, 0x25, 0xee, 0x78, 0x6e, 0x61, 0xa7, 0xe0, 0x60, 0x9d, 0xde, 0xdc, 0x0b, 0x3b, + 0x1f, 0x83, 0x2f, 0x11, 0x41, 0xd4, 0xf6, 0xfa, 0xa7, 0xf6, 0xdf, 0x24, 0xf8, 0x66, 0x4c, 0xf5, + 0xa1, 0xa8, 0xab, 0xc4, 0xe4, 0x8a, 0x9d, 0xdf, 0x9e, 0x97, 0xcc, 0x9e, 0x3d, 0x14, 0xb2, 0x87, + 0xc6, 0x69, 0xac, 0x35, 0xa3, 0xc6, 0x14, 0x76, 0x3e, 0xa2, 0xbf, 0x4b, 0xb0, 0x31, 0xa5, 0xee, + 0x51, 0xd4, 0xd5, 0x22, 0xba, 0x67, 0xe4, 0x36, 0x7d, 0x8a, 0xd0, 0x17, 0x92, 0x7c, 0x70, 0x62, + 0xca, 0x75, 0x66, 0x43, 0x45, 0x2e, 0xdd, 0xd5, 0x86, 0x3d, 0xa3, 0xaf, 0x61, 0x4f, 0xda, 0x41, + 0xff, 0x92, 0x60, 0x7d, 0x7c, 0x57, 0x89, 0x4c, 0xb7, 0xa9, 0xcd, 0x68, 0xfe, 0xf0, 0x34, 0x99, + 0x69, 0xa7, 0xb9, 0xfd, 0xbe, 0x69, 0x7e, 0xfa, 0xe4, 0xe7, 0xb4, 0xb1, 0x9f, 0x77, 0xff, 0x94, + 0xe0, 0xfe, 0xd8, 0x8e, 0x82, 0xa2, 0xbe, 0xa4, 0x4c, 0x6b, 0x7e, 0xb9, 0xe7, 0x77, 0x03, 0xf3, + 0x26, 0x36, 0x2e, 0x11, 0xe7, 0x2b, 0x2c, 0xf4, 0x17, 0x09, 0xd6, 0xc7, 0x37, 0xa4, 0xc8, 0xa8, + 0x4d, 0xed, 0x63, 0xb9, 0xf5, 0x91, 0xef, 0x52, 0xe5, 0xae, 0xed, 0xdd, 0xfa, 0x92, 0x77, 0xee, + 0x5c, 0x3b, 0x07, 0x9f, 0x24, 0x78, 0xd4, 0x21, 0xdd, 0xe9, 0xea, 0x0e, 0xd6, 0x47, 0xbc, 0xd6, + 0xa0, 0x42, 0x1a, 0xd2, 0x6f, 0xca, 0x02, 0xa8, 0x13, 0x53, 0xb5, 0xf4, 0x3c, 0x71, 0xf4, 0x82, + 0x8e, 0x2d, 0x26, 0xb3, 0xc0, 0xff, 0x52, 0x6d, 0xc3, 0x9d, 0xf0, 0x09, 0xf2, 0x99, 0x3f, 0xd1, + 0x4e, 0x30, 0xc4, 0xcf, 0xff, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x4a, 0x21, 0xc2, 0x3b, 0x56, 0x15, + 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1/agent.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1/agent.pb.go new file mode 100644 index 0000000..de80668 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1/agent.pb.go @@ -0,0 +1,1141 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/dialogflow/v2beta1/agent.proto + +/* +Package dialogflow is a generated protocol buffer package. + +It is generated from these files: + google/cloud/dialogflow/v2beta1/agent.proto + google/cloud/dialogflow/v2beta1/context.proto + google/cloud/dialogflow/v2beta1/entity_type.proto + google/cloud/dialogflow/v2beta1/intent.proto + google/cloud/dialogflow/v2beta1/session.proto + google/cloud/dialogflow/v2beta1/session_entity_type.proto + google/cloud/dialogflow/v2beta1/webhook.proto + +It has these top-level messages: + Agent + GetAgentRequest + SearchAgentsRequest + SearchAgentsResponse + TrainAgentRequest + ExportAgentRequest + ExportAgentResponse + ImportAgentRequest + RestoreAgentRequest + Context + ListContextsRequest + ListContextsResponse + GetContextRequest + CreateContextRequest + UpdateContextRequest + DeleteContextRequest + DeleteAllContextsRequest + EntityType + ListEntityTypesRequest + ListEntityTypesResponse + GetEntityTypeRequest + CreateEntityTypeRequest + UpdateEntityTypeRequest + DeleteEntityTypeRequest + BatchUpdateEntityTypesRequest + BatchUpdateEntityTypesResponse + BatchDeleteEntityTypesRequest + BatchCreateEntitiesRequest + BatchUpdateEntitiesRequest + BatchDeleteEntitiesRequest + EntityTypeBatch + Intent + ListIntentsRequest + ListIntentsResponse + GetIntentRequest + CreateIntentRequest + UpdateIntentRequest + DeleteIntentRequest + BatchUpdateIntentsRequest + BatchUpdateIntentsResponse + BatchDeleteIntentsRequest + IntentBatch + DetectIntentRequest + DetectIntentResponse + QueryParameters + QueryInput + QueryResult + StreamingDetectIntentRequest + StreamingDetectIntentResponse + StreamingRecognitionResult + InputAudioConfig + TextInput + EventInput + SessionEntityType + ListSessionEntityTypesRequest + ListSessionEntityTypesResponse + GetSessionEntityTypeRequest + CreateSessionEntityTypeRequest + UpdateSessionEntityTypeRequest + DeleteSessionEntityTypeRequest + WebhookRequest + WebhookResponse + OriginalDetectIntentRequest +*/ +package dialogflow + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import _ "github.com/golang/protobuf/ptypes/empty" +import _ "google.golang.org/genproto/protobuf/field_mask" +import _ "github.com/golang/protobuf/ptypes/struct" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Match mode determines how intents are detected from user queries. +type Agent_MatchMode int32 + +const ( + // Not specified. + Agent_MATCH_MODE_UNSPECIFIED Agent_MatchMode = 0 + // Best for agents with a small number of examples in intents and/or wide + // use of templates syntax and composite entities. + Agent_MATCH_MODE_HYBRID Agent_MatchMode = 1 + // Can be used for agents with a large number of examples in intents, + // especially the ones using @sys.any or very large developer entities. + Agent_MATCH_MODE_ML_ONLY Agent_MatchMode = 2 +) + +var Agent_MatchMode_name = map[int32]string{ + 0: "MATCH_MODE_UNSPECIFIED", + 1: "MATCH_MODE_HYBRID", + 2: "MATCH_MODE_ML_ONLY", +} +var Agent_MatchMode_value = map[string]int32{ + "MATCH_MODE_UNSPECIFIED": 0, + "MATCH_MODE_HYBRID": 1, + "MATCH_MODE_ML_ONLY": 2, +} + +func (x Agent_MatchMode) String() string { + return proto.EnumName(Agent_MatchMode_name, int32(x)) +} +func (Agent_MatchMode) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 0} } + +// Represents a conversational agent. +type Agent struct { + // Required. The project of this agent. + // Format: `projects/`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Required. The name of this agent. + DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // Required. The default language of the agent as a language tag. See + // [Language Support](https://dialogflow.com/docs/reference/language) for a + // list of the currently supported language codes. + // This field cannot be set by the `Update` method. + DefaultLanguageCode string `protobuf:"bytes,3,opt,name=default_language_code,json=defaultLanguageCode" json:"default_language_code,omitempty"` + // Optional. The list of all languages supported by this agent (except for the + // `default_language_code`). + SupportedLanguageCodes []string `protobuf:"bytes,4,rep,name=supported_language_codes,json=supportedLanguageCodes" json:"supported_language_codes,omitempty"` + // Required. The time zone of this agent from the + // [time zone database](https://www.iana.org/time-zones), e.g., + // America/New_York, Europe/Paris. + TimeZone string `protobuf:"bytes,5,opt,name=time_zone,json=timeZone" json:"time_zone,omitempty"` + // Optional. The description of this agent. + // The maximum length is 500 characters. If exceeded, the request is rejected. + Description string `protobuf:"bytes,6,opt,name=description" json:"description,omitempty"` + // Optional. The URI of the agent's avatar. + // Avatars are used throughout API.AI console and in the self-hosted + // [Web Demo](https://dialogflow.com/docs/integrations/web-demo) integration. + AvatarUri string `protobuf:"bytes,7,opt,name=avatar_uri,json=avatarUri" json:"avatar_uri,omitempty"` + // Optional. Determines whether this agent should log conversation queries. + EnableLogging bool `protobuf:"varint,8,opt,name=enable_logging,json=enableLogging" json:"enable_logging,omitempty"` + // Optional. Determines how intents are detected from user queries. + MatchMode Agent_MatchMode `protobuf:"varint,9,opt,name=match_mode,json=matchMode,enum=google.cloud.dialogflow.v2beta1.Agent_MatchMode" json:"match_mode,omitempty"` + // Optional. To filter out false positive results and still get variety in + // matched natural language inputs for your agent, you can tune the machine + // learning classification threshold. If the returned score value is less than + // the threshold value, then a fallback intent is be triggered or, if there + // are no fallback intents defined, no intent will be triggered. The score + // values range from 0.0 (completely uncertain) to 1.0 (completely certain). + // If set to 0.0, the default of 0.3 is used. + ClassificationThreshold float32 `protobuf:"fixed32,10,opt,name=classification_threshold,json=classificationThreshold" json:"classification_threshold,omitempty"` +} + +func (m *Agent) Reset() { *m = Agent{} } +func (m *Agent) String() string { return proto.CompactTextString(m) } +func (*Agent) ProtoMessage() {} +func (*Agent) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *Agent) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *Agent) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func (m *Agent) GetDefaultLanguageCode() string { + if m != nil { + return m.DefaultLanguageCode + } + return "" +} + +func (m *Agent) GetSupportedLanguageCodes() []string { + if m != nil { + return m.SupportedLanguageCodes + } + return nil +} + +func (m *Agent) GetTimeZone() string { + if m != nil { + return m.TimeZone + } + return "" +} + +func (m *Agent) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *Agent) GetAvatarUri() string { + if m != nil { + return m.AvatarUri + } + return "" +} + +func (m *Agent) GetEnableLogging() bool { + if m != nil { + return m.EnableLogging + } + return false +} + +func (m *Agent) GetMatchMode() Agent_MatchMode { + if m != nil { + return m.MatchMode + } + return Agent_MATCH_MODE_UNSPECIFIED +} + +func (m *Agent) GetClassificationThreshold() float32 { + if m != nil { + return m.ClassificationThreshold + } + return 0 +} + +// The request message for [Agents.GetAgent][google.cloud.dialogflow.v2beta1.Agents.GetAgent]. +type GetAgentRequest struct { + // Required. The project that the agent to fetch is associated with. + // Format: `projects/`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` +} + +func (m *GetAgentRequest) Reset() { *m = GetAgentRequest{} } +func (m *GetAgentRequest) String() string { return proto.CompactTextString(m) } +func (*GetAgentRequest) ProtoMessage() {} +func (*GetAgentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *GetAgentRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +// The request message for [Agents.SearchAgents][google.cloud.dialogflow.v2beta1.Agents.SearchAgents]. +type SearchAgentsRequest struct { + // Required. The project to list agents from. + // Format: `projects/`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Optional. The maximum number of items to return in a single page. By + // default 100 and at most 1000. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // Optional. The next_page_token value returned from a previous list request. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *SearchAgentsRequest) Reset() { *m = SearchAgentsRequest{} } +func (m *SearchAgentsRequest) String() string { return proto.CompactTextString(m) } +func (*SearchAgentsRequest) ProtoMessage() {} +func (*SearchAgentsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *SearchAgentsRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *SearchAgentsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *SearchAgentsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// The response message for [Agents.SearchAgents][google.cloud.dialogflow.v2beta1.Agents.SearchAgents]. +type SearchAgentsResponse struct { + // The list of agents. There will be a maximum number of items returned based + // on the page_size field in the request. + Agents []*Agent `protobuf:"bytes,1,rep,name=agents" json:"agents,omitempty"` + // Token to retrieve the next page of results, or empty if there are no + // more results in the list. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *SearchAgentsResponse) Reset() { *m = SearchAgentsResponse{} } +func (m *SearchAgentsResponse) String() string { return proto.CompactTextString(m) } +func (*SearchAgentsResponse) ProtoMessage() {} +func (*SearchAgentsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *SearchAgentsResponse) GetAgents() []*Agent { + if m != nil { + return m.Agents + } + return nil +} + +func (m *SearchAgentsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The request message for [Agents.TrainAgent][google.cloud.dialogflow.v2beta1.Agents.TrainAgent]. +type TrainAgentRequest struct { + // Required. The project that the agent to train is associated with. + // Format: `projects/`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` +} + +func (m *TrainAgentRequest) Reset() { *m = TrainAgentRequest{} } +func (m *TrainAgentRequest) String() string { return proto.CompactTextString(m) } +func (*TrainAgentRequest) ProtoMessage() {} +func (*TrainAgentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *TrainAgentRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +// The request message for [Agents.ExportAgent][google.cloud.dialogflow.v2beta1.Agents.ExportAgent]. +type ExportAgentRequest struct { + // Required. The project that the agent to export is associated with. + // Format: `projects/`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Optional. The Google Cloud Storage URI to export the agent to. + // Note: The URI must start with + // "gs://". If left unspecified, the serialized agent is returned inline. + AgentUri string `protobuf:"bytes,2,opt,name=agent_uri,json=agentUri" json:"agent_uri,omitempty"` +} + +func (m *ExportAgentRequest) Reset() { *m = ExportAgentRequest{} } +func (m *ExportAgentRequest) String() string { return proto.CompactTextString(m) } +func (*ExportAgentRequest) ProtoMessage() {} +func (*ExportAgentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *ExportAgentRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ExportAgentRequest) GetAgentUri() string { + if m != nil { + return m.AgentUri + } + return "" +} + +// The response message for [Agents.ExportAgent][google.cloud.dialogflow.v2beta1.Agents.ExportAgent]. +type ExportAgentResponse struct { + // Required. The exported agent. + // + // Types that are valid to be assigned to Agent: + // *ExportAgentResponse_AgentUri + // *ExportAgentResponse_AgentContent + Agent isExportAgentResponse_Agent `protobuf_oneof:"agent"` +} + +func (m *ExportAgentResponse) Reset() { *m = ExportAgentResponse{} } +func (m *ExportAgentResponse) String() string { return proto.CompactTextString(m) } +func (*ExportAgentResponse) ProtoMessage() {} +func (*ExportAgentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +type isExportAgentResponse_Agent interface { + isExportAgentResponse_Agent() +} + +type ExportAgentResponse_AgentUri struct { + AgentUri string `protobuf:"bytes,1,opt,name=agent_uri,json=agentUri,oneof"` +} +type ExportAgentResponse_AgentContent struct { + AgentContent []byte `protobuf:"bytes,2,opt,name=agent_content,json=agentContent,proto3,oneof"` +} + +func (*ExportAgentResponse_AgentUri) isExportAgentResponse_Agent() {} +func (*ExportAgentResponse_AgentContent) isExportAgentResponse_Agent() {} + +func (m *ExportAgentResponse) GetAgent() isExportAgentResponse_Agent { + if m != nil { + return m.Agent + } + return nil +} + +func (m *ExportAgentResponse) GetAgentUri() string { + if x, ok := m.GetAgent().(*ExportAgentResponse_AgentUri); ok { + return x.AgentUri + } + return "" +} + +func (m *ExportAgentResponse) GetAgentContent() []byte { + if x, ok := m.GetAgent().(*ExportAgentResponse_AgentContent); ok { + return x.AgentContent + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ExportAgentResponse) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _ExportAgentResponse_OneofMarshaler, _ExportAgentResponse_OneofUnmarshaler, _ExportAgentResponse_OneofSizer, []interface{}{ + (*ExportAgentResponse_AgentUri)(nil), + (*ExportAgentResponse_AgentContent)(nil), + } +} + +func _ExportAgentResponse_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ExportAgentResponse) + // agent + switch x := m.Agent.(type) { + case *ExportAgentResponse_AgentUri: + b.EncodeVarint(1<<3 | proto.WireBytes) + b.EncodeStringBytes(x.AgentUri) + case *ExportAgentResponse_AgentContent: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeRawBytes(x.AgentContent) + case nil: + default: + return fmt.Errorf("ExportAgentResponse.Agent has unexpected type %T", x) + } + return nil +} + +func _ExportAgentResponse_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ExportAgentResponse) + switch tag { + case 1: // agent.agent_uri + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Agent = &ExportAgentResponse_AgentUri{x} + return true, err + case 2: // agent.agent_content + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.Agent = &ExportAgentResponse_AgentContent{x} + return true, err + default: + return false, nil + } +} + +func _ExportAgentResponse_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ExportAgentResponse) + // agent + switch x := m.Agent.(type) { + case *ExportAgentResponse_AgentUri: + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.AgentUri))) + n += len(x.AgentUri) + case *ExportAgentResponse_AgentContent: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.AgentContent))) + n += len(x.AgentContent) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The request message for [Agents.ImportAgent][google.cloud.dialogflow.v2beta1.Agents.ImportAgent]. +type ImportAgentRequest struct { + // Required. The project that the agent to import is associated with. + // Format: `projects/`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Required. The agent to import. + // + // Types that are valid to be assigned to Agent: + // *ImportAgentRequest_AgentUri + // *ImportAgentRequest_AgentContent + Agent isImportAgentRequest_Agent `protobuf_oneof:"agent"` +} + +func (m *ImportAgentRequest) Reset() { *m = ImportAgentRequest{} } +func (m *ImportAgentRequest) String() string { return proto.CompactTextString(m) } +func (*ImportAgentRequest) ProtoMessage() {} +func (*ImportAgentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +type isImportAgentRequest_Agent interface { + isImportAgentRequest_Agent() +} + +type ImportAgentRequest_AgentUri struct { + AgentUri string `protobuf:"bytes,2,opt,name=agent_uri,json=agentUri,oneof"` +} +type ImportAgentRequest_AgentContent struct { + AgentContent []byte `protobuf:"bytes,3,opt,name=agent_content,json=agentContent,proto3,oneof"` +} + +func (*ImportAgentRequest_AgentUri) isImportAgentRequest_Agent() {} +func (*ImportAgentRequest_AgentContent) isImportAgentRequest_Agent() {} + +func (m *ImportAgentRequest) GetAgent() isImportAgentRequest_Agent { + if m != nil { + return m.Agent + } + return nil +} + +func (m *ImportAgentRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ImportAgentRequest) GetAgentUri() string { + if x, ok := m.GetAgent().(*ImportAgentRequest_AgentUri); ok { + return x.AgentUri + } + return "" +} + +func (m *ImportAgentRequest) GetAgentContent() []byte { + if x, ok := m.GetAgent().(*ImportAgentRequest_AgentContent); ok { + return x.AgentContent + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ImportAgentRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _ImportAgentRequest_OneofMarshaler, _ImportAgentRequest_OneofUnmarshaler, _ImportAgentRequest_OneofSizer, []interface{}{ + (*ImportAgentRequest_AgentUri)(nil), + (*ImportAgentRequest_AgentContent)(nil), + } +} + +func _ImportAgentRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ImportAgentRequest) + // agent + switch x := m.Agent.(type) { + case *ImportAgentRequest_AgentUri: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeStringBytes(x.AgentUri) + case *ImportAgentRequest_AgentContent: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeRawBytes(x.AgentContent) + case nil: + default: + return fmt.Errorf("ImportAgentRequest.Agent has unexpected type %T", x) + } + return nil +} + +func _ImportAgentRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ImportAgentRequest) + switch tag { + case 2: // agent.agent_uri + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Agent = &ImportAgentRequest_AgentUri{x} + return true, err + case 3: // agent.agent_content + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.Agent = &ImportAgentRequest_AgentContent{x} + return true, err + default: + return false, nil + } +} + +func _ImportAgentRequest_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ImportAgentRequest) + // agent + switch x := m.Agent.(type) { + case *ImportAgentRequest_AgentUri: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.AgentUri))) + n += len(x.AgentUri) + case *ImportAgentRequest_AgentContent: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.AgentContent))) + n += len(x.AgentContent) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The request message for [Agents.RestoreAgent][google.cloud.dialogflow.v2beta1.Agents.RestoreAgent]. +type RestoreAgentRequest struct { + // Required. The project that the agent to restore is associated with. + // Format: `projects/`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Required. The agent to restore. + // + // Types that are valid to be assigned to Agent: + // *RestoreAgentRequest_AgentUri + // *RestoreAgentRequest_AgentContent + Agent isRestoreAgentRequest_Agent `protobuf_oneof:"agent"` +} + +func (m *RestoreAgentRequest) Reset() { *m = RestoreAgentRequest{} } +func (m *RestoreAgentRequest) String() string { return proto.CompactTextString(m) } +func (*RestoreAgentRequest) ProtoMessage() {} +func (*RestoreAgentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +type isRestoreAgentRequest_Agent interface { + isRestoreAgentRequest_Agent() +} + +type RestoreAgentRequest_AgentUri struct { + AgentUri string `protobuf:"bytes,2,opt,name=agent_uri,json=agentUri,oneof"` +} +type RestoreAgentRequest_AgentContent struct { + AgentContent []byte `protobuf:"bytes,3,opt,name=agent_content,json=agentContent,proto3,oneof"` +} + +func (*RestoreAgentRequest_AgentUri) isRestoreAgentRequest_Agent() {} +func (*RestoreAgentRequest_AgentContent) isRestoreAgentRequest_Agent() {} + +func (m *RestoreAgentRequest) GetAgent() isRestoreAgentRequest_Agent { + if m != nil { + return m.Agent + } + return nil +} + +func (m *RestoreAgentRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *RestoreAgentRequest) GetAgentUri() string { + if x, ok := m.GetAgent().(*RestoreAgentRequest_AgentUri); ok { + return x.AgentUri + } + return "" +} + +func (m *RestoreAgentRequest) GetAgentContent() []byte { + if x, ok := m.GetAgent().(*RestoreAgentRequest_AgentContent); ok { + return x.AgentContent + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*RestoreAgentRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _RestoreAgentRequest_OneofMarshaler, _RestoreAgentRequest_OneofUnmarshaler, _RestoreAgentRequest_OneofSizer, []interface{}{ + (*RestoreAgentRequest_AgentUri)(nil), + (*RestoreAgentRequest_AgentContent)(nil), + } +} + +func _RestoreAgentRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*RestoreAgentRequest) + // agent + switch x := m.Agent.(type) { + case *RestoreAgentRequest_AgentUri: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeStringBytes(x.AgentUri) + case *RestoreAgentRequest_AgentContent: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeRawBytes(x.AgentContent) + case nil: + default: + return fmt.Errorf("RestoreAgentRequest.Agent has unexpected type %T", x) + } + return nil +} + +func _RestoreAgentRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*RestoreAgentRequest) + switch tag { + case 2: // agent.agent_uri + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Agent = &RestoreAgentRequest_AgentUri{x} + return true, err + case 3: // agent.agent_content + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.Agent = &RestoreAgentRequest_AgentContent{x} + return true, err + default: + return false, nil + } +} + +func _RestoreAgentRequest_OneofSizer(msg proto.Message) (n int) { + m := msg.(*RestoreAgentRequest) + // agent + switch x := m.Agent.(type) { + case *RestoreAgentRequest_AgentUri: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.AgentUri))) + n += len(x.AgentUri) + case *RestoreAgentRequest_AgentContent: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.AgentContent))) + n += len(x.AgentContent) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +func init() { + proto.RegisterType((*Agent)(nil), "google.cloud.dialogflow.v2beta1.Agent") + proto.RegisterType((*GetAgentRequest)(nil), "google.cloud.dialogflow.v2beta1.GetAgentRequest") + proto.RegisterType((*SearchAgentsRequest)(nil), "google.cloud.dialogflow.v2beta1.SearchAgentsRequest") + proto.RegisterType((*SearchAgentsResponse)(nil), "google.cloud.dialogflow.v2beta1.SearchAgentsResponse") + proto.RegisterType((*TrainAgentRequest)(nil), "google.cloud.dialogflow.v2beta1.TrainAgentRequest") + proto.RegisterType((*ExportAgentRequest)(nil), "google.cloud.dialogflow.v2beta1.ExportAgentRequest") + proto.RegisterType((*ExportAgentResponse)(nil), "google.cloud.dialogflow.v2beta1.ExportAgentResponse") + proto.RegisterType((*ImportAgentRequest)(nil), "google.cloud.dialogflow.v2beta1.ImportAgentRequest") + proto.RegisterType((*RestoreAgentRequest)(nil), "google.cloud.dialogflow.v2beta1.RestoreAgentRequest") + proto.RegisterEnum("google.cloud.dialogflow.v2beta1.Agent_MatchMode", Agent_MatchMode_name, Agent_MatchMode_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for Agents service + +type AgentsClient interface { + // Retrieves the specified agent. + GetAgent(ctx context.Context, in *GetAgentRequest, opts ...grpc.CallOption) (*Agent, error) + // Returns the list of agents. + // + // Since there is at most one conversational agent per project, this method is + // useful primarily for listing all agents across projects the caller has + // access to. One can achieve that with a wildcard project collection id "-". + // Refer to [List + // Sub-Collections](https://cloud.google.com/apis/design/design_patterns#list_sub-collections). + SearchAgents(ctx context.Context, in *SearchAgentsRequest, opts ...grpc.CallOption) (*SearchAgentsResponse, error) + // Trains the specified agent. + // + // + // Operation + TrainAgent(ctx context.Context, in *TrainAgentRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Exports the specified agent to a ZIP file. + // + // + // Operation + ExportAgent(ctx context.Context, in *ExportAgentRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Imports the specified agent from a ZIP file. + // + // Uploads new intents and entity types without deleting the existing ones. + // Intents and entity types with the same name are replaced with the new + // versions from ImportAgentRequest. + // + // + // Operation + ImportAgent(ctx context.Context, in *ImportAgentRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Restores the specified agent from a ZIP file. + // + // Replaces the current agent version with a new one. All the intents and + // entity types in the older version are deleted. + // + // + // Operation + RestoreAgent(ctx context.Context, in *RestoreAgentRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) +} + +type agentsClient struct { + cc *grpc.ClientConn +} + +func NewAgentsClient(cc *grpc.ClientConn) AgentsClient { + return &agentsClient{cc} +} + +func (c *agentsClient) GetAgent(ctx context.Context, in *GetAgentRequest, opts ...grpc.CallOption) (*Agent, error) { + out := new(Agent) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.Agents/GetAgent", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *agentsClient) SearchAgents(ctx context.Context, in *SearchAgentsRequest, opts ...grpc.CallOption) (*SearchAgentsResponse, error) { + out := new(SearchAgentsResponse) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.Agents/SearchAgents", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *agentsClient) TrainAgent(ctx context.Context, in *TrainAgentRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.Agents/TrainAgent", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *agentsClient) ExportAgent(ctx context.Context, in *ExportAgentRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.Agents/ExportAgent", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *agentsClient) ImportAgent(ctx context.Context, in *ImportAgentRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.Agents/ImportAgent", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *agentsClient) RestoreAgent(ctx context.Context, in *RestoreAgentRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.Agents/RestoreAgent", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Agents service + +type AgentsServer interface { + // Retrieves the specified agent. + GetAgent(context.Context, *GetAgentRequest) (*Agent, error) + // Returns the list of agents. + // + // Since there is at most one conversational agent per project, this method is + // useful primarily for listing all agents across projects the caller has + // access to. One can achieve that with a wildcard project collection id "-". + // Refer to [List + // Sub-Collections](https://cloud.google.com/apis/design/design_patterns#list_sub-collections). + SearchAgents(context.Context, *SearchAgentsRequest) (*SearchAgentsResponse, error) + // Trains the specified agent. + // + // + // Operation + TrainAgent(context.Context, *TrainAgentRequest) (*google_longrunning.Operation, error) + // Exports the specified agent to a ZIP file. + // + // + // Operation + ExportAgent(context.Context, *ExportAgentRequest) (*google_longrunning.Operation, error) + // Imports the specified agent from a ZIP file. + // + // Uploads new intents and entity types without deleting the existing ones. + // Intents and entity types with the same name are replaced with the new + // versions from ImportAgentRequest. + // + // + // Operation + ImportAgent(context.Context, *ImportAgentRequest) (*google_longrunning.Operation, error) + // Restores the specified agent from a ZIP file. + // + // Replaces the current agent version with a new one. All the intents and + // entity types in the older version are deleted. + // + // + // Operation + RestoreAgent(context.Context, *RestoreAgentRequest) (*google_longrunning.Operation, error) +} + +func RegisterAgentsServer(s *grpc.Server, srv AgentsServer) { + s.RegisterService(&_Agents_serviceDesc, srv) +} + +func _Agents_GetAgent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetAgentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AgentsServer).GetAgent(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.Agents/GetAgent", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AgentsServer).GetAgent(ctx, req.(*GetAgentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Agents_SearchAgents_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SearchAgentsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AgentsServer).SearchAgents(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.Agents/SearchAgents", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AgentsServer).SearchAgents(ctx, req.(*SearchAgentsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Agents_TrainAgent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(TrainAgentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AgentsServer).TrainAgent(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.Agents/TrainAgent", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AgentsServer).TrainAgent(ctx, req.(*TrainAgentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Agents_ExportAgent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ExportAgentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AgentsServer).ExportAgent(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.Agents/ExportAgent", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AgentsServer).ExportAgent(ctx, req.(*ExportAgentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Agents_ImportAgent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ImportAgentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AgentsServer).ImportAgent(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.Agents/ImportAgent", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AgentsServer).ImportAgent(ctx, req.(*ImportAgentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Agents_RestoreAgent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RestoreAgentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AgentsServer).RestoreAgent(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.Agents/RestoreAgent", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AgentsServer).RestoreAgent(ctx, req.(*RestoreAgentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Agents_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.dialogflow.v2beta1.Agents", + HandlerType: (*AgentsServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetAgent", + Handler: _Agents_GetAgent_Handler, + }, + { + MethodName: "SearchAgents", + Handler: _Agents_SearchAgents_Handler, + }, + { + MethodName: "TrainAgent", + Handler: _Agents_TrainAgent_Handler, + }, + { + MethodName: "ExportAgent", + Handler: _Agents_ExportAgent_Handler, + }, + { + MethodName: "ImportAgent", + Handler: _Agents_ImportAgent_Handler, + }, + { + MethodName: "RestoreAgent", + Handler: _Agents_RestoreAgent_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/dialogflow/v2beta1/agent.proto", +} + +func init() { proto.RegisterFile("google/cloud/dialogflow/v2beta1/agent.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 975 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x56, 0x41, 0x6f, 0xdc, 0x44, + 0x14, 0xae, 0x37, 0x4d, 0xb2, 0xfb, 0x92, 0xb4, 0xe9, 0x84, 0x06, 0x6b, 0xdb, 0xa8, 0x8b, 0x4b, + 0xab, 0xed, 0x46, 0xd8, 0x74, 0xd3, 0x4a, 0x10, 0x04, 0x52, 0xb3, 0x9b, 0x36, 0x2b, 0x65, 0x93, + 0xc8, 0x49, 0x2a, 0xb5, 0x17, 0x6b, 0x62, 0xcf, 0x3a, 0x43, 0xed, 0x19, 0xe3, 0x99, 0x2d, 0x6d, + 0x0a, 0x1c, 0xf8, 0x05, 0x48, 0x20, 0x21, 0x38, 0x72, 0x42, 0x1c, 0x38, 0xf1, 0x4f, 0xf8, 0x0b, + 0xfc, 0x08, 0x8e, 0xc8, 0x63, 0x6f, 0xd6, 0x9b, 0xb4, 0xb5, 0x91, 0x90, 0xb8, 0xd9, 0xdf, 0xfb, + 0xde, 0x7b, 0xdf, 0xcc, 0x7c, 0x4f, 0x33, 0xb0, 0xea, 0x73, 0xee, 0x07, 0xc4, 0x72, 0x03, 0x3e, + 0xf4, 0x2c, 0x8f, 0xe2, 0x80, 0xfb, 0x83, 0x80, 0x7f, 0x69, 0x3d, 0x6f, 0x1f, 0x11, 0x89, 0xef, + 0x5a, 0xd8, 0x27, 0x4c, 0x9a, 0x51, 0xcc, 0x25, 0x47, 0x37, 0x52, 0xb2, 0xa9, 0xc8, 0xe6, 0x98, + 0x6c, 0x66, 0xe4, 0xfa, 0xf5, 0xac, 0x1a, 0x8e, 0xa8, 0x85, 0x19, 0xe3, 0x12, 0x4b, 0xca, 0x99, + 0x48, 0xd3, 0xeb, 0x37, 0xb3, 0x68, 0xc0, 0x99, 0x1f, 0x0f, 0x19, 0xa3, 0xcc, 0xb7, 0x78, 0x44, + 0xe2, 0x09, 0xd2, 0xb5, 0x8c, 0xa4, 0xfe, 0x8e, 0x86, 0x03, 0x8b, 0x84, 0x91, 0x7c, 0x99, 0x05, + 0x1b, 0x67, 0x83, 0x03, 0x4a, 0x02, 0xcf, 0x09, 0xb1, 0x78, 0x96, 0x31, 0xae, 0x9f, 0x65, 0x08, + 0x19, 0x0f, 0xdd, 0x6c, 0x01, 0xc6, 0x4f, 0x17, 0x61, 0xfa, 0x41, 0xb2, 0x20, 0xb4, 0x0c, 0x33, + 0x11, 0x8e, 0x09, 0x93, 0xba, 0xd6, 0xd0, 0x9a, 0x35, 0x3b, 0xfb, 0x43, 0xef, 0xc1, 0xbc, 0x47, + 0x45, 0x14, 0xe0, 0x97, 0x0e, 0xc3, 0x21, 0xd1, 0x2b, 0x2a, 0x3a, 0x97, 0x61, 0x3b, 0x38, 0x24, + 0xa8, 0x0d, 0x57, 0x3d, 0x32, 0xc0, 0xc3, 0x40, 0x3a, 0x01, 0x66, 0xfe, 0x10, 0xfb, 0xc4, 0x71, + 0xb9, 0x47, 0xf4, 0x29, 0xc5, 0x5d, 0xca, 0x82, 0xdb, 0x59, 0xac, 0xc3, 0x3d, 0x82, 0x3e, 0x02, + 0x5d, 0x0c, 0xa3, 0x88, 0xc7, 0x92, 0x78, 0x93, 0x59, 0x42, 0xbf, 0xd8, 0x98, 0x6a, 0xd6, 0xec, + 0xe5, 0xd3, 0x78, 0x3e, 0x51, 0xa0, 0x6b, 0x50, 0x93, 0x34, 0x24, 0xce, 0x09, 0x67, 0x44, 0x9f, + 0x56, 0x1d, 0xaa, 0x09, 0xf0, 0x94, 0x33, 0x82, 0x1a, 0x30, 0xe7, 0x11, 0xe1, 0xc6, 0x34, 0x4a, + 0xb6, 0x50, 0x9f, 0xc9, 0xc4, 0x8e, 0x21, 0xb4, 0x02, 0x80, 0x9f, 0x63, 0x89, 0x63, 0x67, 0x18, + 0x53, 0x7d, 0x56, 0x11, 0x6a, 0x29, 0x72, 0x18, 0x53, 0x74, 0x0b, 0x2e, 0x11, 0x86, 0x8f, 0x02, + 0xe2, 0x04, 0xdc, 0xf7, 0x29, 0xf3, 0xf5, 0x6a, 0x43, 0x6b, 0x56, 0xed, 0x85, 0x14, 0xdd, 0x4e, + 0x41, 0xb4, 0x0b, 0x10, 0x62, 0xe9, 0x1e, 0x3b, 0x61, 0xb2, 0xce, 0x5a, 0x43, 0x6b, 0x5e, 0x6a, + 0x7f, 0x68, 0x16, 0xb8, 0xc1, 0x54, 0x3b, 0x6d, 0xf6, 0x93, 0xc4, 0x3e, 0xf7, 0x88, 0x5d, 0x0b, + 0x47, 0x9f, 0xe8, 0x63, 0xd0, 0xdd, 0x00, 0x0b, 0x41, 0x07, 0xd4, 0x55, 0xc7, 0xef, 0xc8, 0xe3, + 0x98, 0x88, 0x63, 0x1e, 0x78, 0x3a, 0x34, 0xb4, 0x66, 0xc5, 0x7e, 0x77, 0x32, 0x7e, 0x30, 0x0a, + 0x1b, 0x8f, 0xa1, 0x76, 0x5a, 0x12, 0xd5, 0x61, 0xb9, 0xff, 0xe0, 0xa0, 0xb3, 0xe5, 0xf4, 0x77, + 0xbb, 0x9b, 0xce, 0xe1, 0xce, 0xfe, 0xde, 0x66, 0xa7, 0xf7, 0xb0, 0xb7, 0xd9, 0x5d, 0xbc, 0x80, + 0xae, 0xc2, 0x95, 0x5c, 0x6c, 0xeb, 0xc9, 0x86, 0xdd, 0xeb, 0x2e, 0x6a, 0x68, 0x19, 0x50, 0x0e, + 0xee, 0x6f, 0x3b, 0xbb, 0x3b, 0xdb, 0x4f, 0x16, 0x2b, 0xc6, 0x1d, 0xb8, 0xfc, 0x88, 0x48, 0xa5, + 0xd9, 0x26, 0x5f, 0x0c, 0x89, 0x78, 0xa3, 0x49, 0x0c, 0x0a, 0x4b, 0xfb, 0x04, 0xc7, 0xee, 0xb1, + 0x62, 0x8b, 0x02, 0x7a, 0x72, 0x84, 0x51, 0x72, 0xdc, 0x82, 0x9e, 0xa4, 0x86, 0x9a, 0xb6, 0xab, + 0x09, 0xb0, 0x4f, 0x4f, 0x48, 0x72, 0x40, 0x2a, 0x28, 0xf9, 0x33, 0xc2, 0x32, 0x0b, 0x29, 0xfa, + 0x41, 0x02, 0x18, 0xdf, 0xc0, 0x3b, 0x93, 0xad, 0x44, 0xc4, 0x99, 0x20, 0xe8, 0x33, 0x98, 0x51, + 0x93, 0x29, 0x74, 0xad, 0x31, 0xd5, 0x9c, 0x6b, 0xdf, 0x2e, 0x77, 0x1a, 0x76, 0x96, 0x85, 0x6e, + 0xc3, 0x65, 0x46, 0x5e, 0x48, 0x27, 0xd7, 0x3b, 0xb5, 0xfa, 0x42, 0x02, 0xef, 0x9d, 0xf6, 0x5f, + 0x85, 0x2b, 0x07, 0x31, 0xa6, 0xac, 0xd4, 0xbe, 0xf4, 0x00, 0x6d, 0xbe, 0x48, 0x4c, 0x5c, 0x86, + 0x9d, 0x6c, 0x8b, 0x12, 0xa3, 0x9c, 0x99, 0x36, 0xaf, 0x2a, 0xe0, 0x30, 0xa6, 0x86, 0x07, 0x4b, + 0x13, 0xa5, 0xb2, 0x65, 0xaf, 0xe4, 0x73, 0x54, 0xb9, 0xad, 0x0b, 0xe3, 0x2c, 0x74, 0x0b, 0x16, + 0xd2, 0xb0, 0xcb, 0x99, 0x4c, 0x3a, 0x26, 0x65, 0xe7, 0xb7, 0x2e, 0xd8, 0xf3, 0x0a, 0xee, 0xa4, + 0xe8, 0xc6, 0x2c, 0x4c, 0xab, 0x7f, 0xe3, 0x15, 0xa0, 0x5e, 0x58, 0x5a, 0xf0, 0xca, 0x39, 0xc1, + 0x6f, 0x6f, 0x3e, 0xf5, 0xf6, 0xe6, 0x5f, 0xc1, 0x92, 0x4d, 0x84, 0xe4, 0x31, 0xf9, 0x1f, 0xba, + 0xb7, 0xff, 0x98, 0x85, 0x99, 0xd4, 0x53, 0xe8, 0x3b, 0x0d, 0xaa, 0x23, 0xeb, 0xa3, 0xe2, 0xb1, + 0x3e, 0x33, 0x25, 0xf5, 0x92, 0xd6, 0x33, 0x5a, 0xdf, 0xfe, 0xf9, 0xd7, 0xf7, 0x95, 0xf7, 0x91, + 0x71, 0x7a, 0xb7, 0xbc, 0x4a, 0x97, 0xf6, 0x69, 0x14, 0xf3, 0xcf, 0x89, 0x2b, 0x85, 0xd5, 0xfa, + 0x3a, 0xbd, 0x6f, 0xd0, 0xef, 0x1a, 0xcc, 0xe7, 0x7d, 0x8f, 0xee, 0x15, 0x36, 0x79, 0xcd, 0x44, + 0xd6, 0xef, 0xff, 0xcb, 0xac, 0xd4, 0x65, 0xc6, 0x5d, 0xa5, 0x74, 0x15, 0xdd, 0x29, 0x56, 0xba, + 0x2e, 0x54, 0x01, 0xf4, 0x83, 0x06, 0x30, 0x1e, 0x14, 0xd4, 0x2e, 0x6c, 0x7c, 0x6e, 0xaa, 0xea, + 0x2b, 0xa3, 0x9c, 0xdc, 0xfd, 0x68, 0xee, 0x8e, 0xee, 0x47, 0x63, 0x4d, 0x89, 0xfa, 0xc0, 0x68, + 0x96, 0x10, 0x25, 0x93, 0xe2, 0xeb, 0x5a, 0x0b, 0xfd, 0xa8, 0xc1, 0x5c, 0x6e, 0x8e, 0xd0, 0x5a, + 0xa1, 0xae, 0xf3, 0x03, 0x5c, 0x24, 0xec, 0x9e, 0x12, 0x66, 0x1a, 0x65, 0x76, 0x8b, 0xa8, 0xea, + 0x23, 0x65, 0xb9, 0xd9, 0x2b, 0xa1, 0xec, 0xfc, 0xa4, 0xfe, 0x97, 0xca, 0x68, 0x38, 0x52, 0xf6, + 0xb3, 0x06, 0xf3, 0xf9, 0xc1, 0x2c, 0xe1, 0xbd, 0xd7, 0xcc, 0x71, 0x91, 0xb6, 0xfb, 0x4a, 0x9b, + 0x65, 0xb4, 0x4a, 0x68, 0x8b, 0xd3, 0xf2, 0xeb, 0x5a, 0x6b, 0xe3, 0x57, 0x0d, 0x6e, 0xba, 0x3c, + 0x2c, 0x52, 0xb4, 0x01, 0x4a, 0xcb, 0x5e, 0xf2, 0xea, 0xd9, 0xd3, 0x9e, 0xf6, 0x32, 0xba, 0xcf, + 0x93, 0xb7, 0x87, 0xc9, 0x63, 0xdf, 0xf2, 0x09, 0x53, 0x6f, 0x22, 0x2b, 0x0d, 0xe1, 0x88, 0x8a, + 0x37, 0x3e, 0x02, 0x3f, 0x19, 0x43, 0x7f, 0x6b, 0xda, 0x2f, 0x95, 0x4a, 0xf7, 0xe1, 0x6f, 0x95, + 0x1b, 0x8f, 0xd2, 0x9a, 0x1d, 0x25, 0xa1, 0x3b, 0x96, 0xf0, 0x38, 0x4d, 0x3a, 0x9a, 0x51, 0xf5, + 0xd7, 0xfe, 0x09, 0x00, 0x00, 0xff, 0xff, 0x35, 0x4d, 0xe2, 0x83, 0x63, 0x0a, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1/context.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1/context.pb.go new file mode 100644 index 0000000..63066cb --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1/context.pb.go @@ -0,0 +1,582 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/dialogflow/v2beta1/context.proto + +package dialogflow + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf2 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf3 "google.golang.org/genproto/protobuf/field_mask" +import google_protobuf4 "github.com/golang/protobuf/ptypes/struct" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Represents a context. +type Context struct { + // Required. The unique identifier of the context. Format: + // `projects//agent/sessions//contexts/`, + // or + // `projects//agent/runtimes//sessions//contexts/`. + // Note: Runtimes are under construction and will be available soon. + // The Context ID is always converted to lowercase. + // If is not specified, we assume default 'sandbox' runtime. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Optional. The number of conversational query requests after which the + // context expires. If set to `0` (the default) the context expires + // immediately. Contexts expire automatically after 10 minutes even if there + // are no matching queries. + LifespanCount int32 `protobuf:"varint,2,opt,name=lifespan_count,json=lifespanCount" json:"lifespan_count,omitempty"` + // Optional. The collection of parameters associated with this context. + // Refer to [this doc](https://dialogflow.com/docs/actions-and-parameters) for + // syntax. + Parameters *google_protobuf4.Struct `protobuf:"bytes,3,opt,name=parameters" json:"parameters,omitempty"` +} + +func (m *Context) Reset() { *m = Context{} } +func (m *Context) String() string { return proto.CompactTextString(m) } +func (*Context) ProtoMessage() {} +func (*Context) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *Context) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Context) GetLifespanCount() int32 { + if m != nil { + return m.LifespanCount + } + return 0 +} + +func (m *Context) GetParameters() *google_protobuf4.Struct { + if m != nil { + return m.Parameters + } + return nil +} + +// The request message for [Contexts.ListContexts][google.cloud.dialogflow.v2beta1.Contexts.ListContexts]. +type ListContextsRequest struct { + // Required. The session to list all contexts from. + // Format: `projects//agent/sessions/` or + // `projects//agent/runtimes//sessions/`. + // Note: Runtimes are under construction and will be available soon. + // If is not specified, we assume default 'sandbox' runtime. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Optional. The maximum number of items to return in a single page. By + // default 100 and at most 1000. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // Optional. The next_page_token value returned from a previous list request. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListContextsRequest) Reset() { *m = ListContextsRequest{} } +func (m *ListContextsRequest) String() string { return proto.CompactTextString(m) } +func (*ListContextsRequest) ProtoMessage() {} +func (*ListContextsRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +func (m *ListContextsRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListContextsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListContextsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// The response message for [Contexts.ListContexts][google.cloud.dialogflow.v2beta1.Contexts.ListContexts]. +type ListContextsResponse struct { + // The list of contexts. There will be a maximum number of items + // returned based on the page_size field in the request. + Contexts []*Context `protobuf:"bytes,1,rep,name=contexts" json:"contexts,omitempty"` + // Token to retrieve the next page of results, or empty if there are no + // more results in the list. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListContextsResponse) Reset() { *m = ListContextsResponse{} } +func (m *ListContextsResponse) String() string { return proto.CompactTextString(m) } +func (*ListContextsResponse) ProtoMessage() {} +func (*ListContextsResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +func (m *ListContextsResponse) GetContexts() []*Context { + if m != nil { + return m.Contexts + } + return nil +} + +func (m *ListContextsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The request message for [Contexts.GetContext][google.cloud.dialogflow.v2beta1.Contexts.GetContext]. +type GetContextRequest struct { + // Required. The name of the context. Format: + // `projects//agent/sessions//contexts/` + // or `projects//agent/runtimes//sessions//contexts/`. Note: Runtimes are under construction and will + // be available soon. If is not specified, we assume default + // 'sandbox' runtime. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetContextRequest) Reset() { *m = GetContextRequest{} } +func (m *GetContextRequest) String() string { return proto.CompactTextString(m) } +func (*GetContextRequest) ProtoMessage() {} +func (*GetContextRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } + +func (m *GetContextRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The request message for [Contexts.CreateContext][google.cloud.dialogflow.v2beta1.Contexts.CreateContext]. +type CreateContextRequest struct { + // Required. The session to create a context for. + // Format: `projects//agent/sessions/` or + // `projects//agent/runtimes//sessions/`. + // Note: Runtimes are under construction and will be available soon. + // If is not specified, we assume default 'sandbox' runtime. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Required. The context to create. + Context *Context `protobuf:"bytes,2,opt,name=context" json:"context,omitempty"` +} + +func (m *CreateContextRequest) Reset() { *m = CreateContextRequest{} } +func (m *CreateContextRequest) String() string { return proto.CompactTextString(m) } +func (*CreateContextRequest) ProtoMessage() {} +func (*CreateContextRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } + +func (m *CreateContextRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateContextRequest) GetContext() *Context { + if m != nil { + return m.Context + } + return nil +} + +// The request message for [Contexts.UpdateContext][google.cloud.dialogflow.v2beta1.Contexts.UpdateContext]. +type UpdateContextRequest struct { + // Required. The context to update. + Context *Context `protobuf:"bytes,1,opt,name=context" json:"context,omitempty"` + // Optional. The mask to control which fields get updated. + UpdateMask *google_protobuf3.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateContextRequest) Reset() { *m = UpdateContextRequest{} } +func (m *UpdateContextRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateContextRequest) ProtoMessage() {} +func (*UpdateContextRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } + +func (m *UpdateContextRequest) GetContext() *Context { + if m != nil { + return m.Context + } + return nil +} + +func (m *UpdateContextRequest) GetUpdateMask() *google_protobuf3.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +// The request message for [Contexts.DeleteContext][google.cloud.dialogflow.v2beta1.Contexts.DeleteContext]. +type DeleteContextRequest struct { + // Required. The name of the context to delete. Format: + // `projects//agent/sessions//contexts/` + // or `projects//agent/runtimes//sessions//contexts/`. Note: Runtimes are under construction and will + // be available soon. If is not specified, we assume default + // 'sandbox' runtime. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteContextRequest) Reset() { *m = DeleteContextRequest{} } +func (m *DeleteContextRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteContextRequest) ProtoMessage() {} +func (*DeleteContextRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } + +func (m *DeleteContextRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The request message for [Contexts.DeleteAllContexts][google.cloud.dialogflow.v2beta1.Contexts.DeleteAllContexts]. +type DeleteAllContextsRequest struct { + // Required. The name of the session to delete all contexts from. Format: + // `projects//agent/sessions/` or `projects//agent/runtimes//sessions/`. Note: Runtimes are + // under construction and will be available soon. If is not + // specified we assume default 'sandbox' runtime. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` +} + +func (m *DeleteAllContextsRequest) Reset() { *m = DeleteAllContextsRequest{} } +func (m *DeleteAllContextsRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteAllContextsRequest) ProtoMessage() {} +func (*DeleteAllContextsRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} } + +func (m *DeleteAllContextsRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func init() { + proto.RegisterType((*Context)(nil), "google.cloud.dialogflow.v2beta1.Context") + proto.RegisterType((*ListContextsRequest)(nil), "google.cloud.dialogflow.v2beta1.ListContextsRequest") + proto.RegisterType((*ListContextsResponse)(nil), "google.cloud.dialogflow.v2beta1.ListContextsResponse") + proto.RegisterType((*GetContextRequest)(nil), "google.cloud.dialogflow.v2beta1.GetContextRequest") + proto.RegisterType((*CreateContextRequest)(nil), "google.cloud.dialogflow.v2beta1.CreateContextRequest") + proto.RegisterType((*UpdateContextRequest)(nil), "google.cloud.dialogflow.v2beta1.UpdateContextRequest") + proto.RegisterType((*DeleteContextRequest)(nil), "google.cloud.dialogflow.v2beta1.DeleteContextRequest") + proto.RegisterType((*DeleteAllContextsRequest)(nil), "google.cloud.dialogflow.v2beta1.DeleteAllContextsRequest") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for Contexts service + +type ContextsClient interface { + // Returns the list of all contexts in the specified session. + ListContexts(ctx context.Context, in *ListContextsRequest, opts ...grpc.CallOption) (*ListContextsResponse, error) + // Retrieves the specified context. + GetContext(ctx context.Context, in *GetContextRequest, opts ...grpc.CallOption) (*Context, error) + // Creates a context. + CreateContext(ctx context.Context, in *CreateContextRequest, opts ...grpc.CallOption) (*Context, error) + // Updates the specified context. + UpdateContext(ctx context.Context, in *UpdateContextRequest, opts ...grpc.CallOption) (*Context, error) + // Deletes the specified context. + DeleteContext(ctx context.Context, in *DeleteContextRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) + // Deletes all active contexts in the specified session. + DeleteAllContexts(ctx context.Context, in *DeleteAllContextsRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) +} + +type contextsClient struct { + cc *grpc.ClientConn +} + +func NewContextsClient(cc *grpc.ClientConn) ContextsClient { + return &contextsClient{cc} +} + +func (c *contextsClient) ListContexts(ctx context.Context, in *ListContextsRequest, opts ...grpc.CallOption) (*ListContextsResponse, error) { + out := new(ListContextsResponse) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.Contexts/ListContexts", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *contextsClient) GetContext(ctx context.Context, in *GetContextRequest, opts ...grpc.CallOption) (*Context, error) { + out := new(Context) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.Contexts/GetContext", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *contextsClient) CreateContext(ctx context.Context, in *CreateContextRequest, opts ...grpc.CallOption) (*Context, error) { + out := new(Context) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.Contexts/CreateContext", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *contextsClient) UpdateContext(ctx context.Context, in *UpdateContextRequest, opts ...grpc.CallOption) (*Context, error) { + out := new(Context) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.Contexts/UpdateContext", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *contextsClient) DeleteContext(ctx context.Context, in *DeleteContextRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) { + out := new(google_protobuf2.Empty) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.Contexts/DeleteContext", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *contextsClient) DeleteAllContexts(ctx context.Context, in *DeleteAllContextsRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) { + out := new(google_protobuf2.Empty) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.Contexts/DeleteAllContexts", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Contexts service + +type ContextsServer interface { + // Returns the list of all contexts in the specified session. + ListContexts(context.Context, *ListContextsRequest) (*ListContextsResponse, error) + // Retrieves the specified context. + GetContext(context.Context, *GetContextRequest) (*Context, error) + // Creates a context. + CreateContext(context.Context, *CreateContextRequest) (*Context, error) + // Updates the specified context. + UpdateContext(context.Context, *UpdateContextRequest) (*Context, error) + // Deletes the specified context. + DeleteContext(context.Context, *DeleteContextRequest) (*google_protobuf2.Empty, error) + // Deletes all active contexts in the specified session. + DeleteAllContexts(context.Context, *DeleteAllContextsRequest) (*google_protobuf2.Empty, error) +} + +func RegisterContextsServer(s *grpc.Server, srv ContextsServer) { + s.RegisterService(&_Contexts_serviceDesc, srv) +} + +func _Contexts_ListContexts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListContextsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ContextsServer).ListContexts(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.Contexts/ListContexts", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ContextsServer).ListContexts(ctx, req.(*ListContextsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Contexts_GetContext_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetContextRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ContextsServer).GetContext(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.Contexts/GetContext", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ContextsServer).GetContext(ctx, req.(*GetContextRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Contexts_CreateContext_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateContextRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ContextsServer).CreateContext(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.Contexts/CreateContext", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ContextsServer).CreateContext(ctx, req.(*CreateContextRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Contexts_UpdateContext_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateContextRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ContextsServer).UpdateContext(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.Contexts/UpdateContext", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ContextsServer).UpdateContext(ctx, req.(*UpdateContextRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Contexts_DeleteContext_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteContextRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ContextsServer).DeleteContext(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.Contexts/DeleteContext", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ContextsServer).DeleteContext(ctx, req.(*DeleteContextRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Contexts_DeleteAllContexts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteAllContextsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ContextsServer).DeleteAllContexts(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.Contexts/DeleteAllContexts", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ContextsServer).DeleteAllContexts(ctx, req.(*DeleteAllContextsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Contexts_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.dialogflow.v2beta1.Contexts", + HandlerType: (*ContextsServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListContexts", + Handler: _Contexts_ListContexts_Handler, + }, + { + MethodName: "GetContext", + Handler: _Contexts_GetContext_Handler, + }, + { + MethodName: "CreateContext", + Handler: _Contexts_CreateContext_Handler, + }, + { + MethodName: "UpdateContext", + Handler: _Contexts_UpdateContext_Handler, + }, + { + MethodName: "DeleteContext", + Handler: _Contexts_DeleteContext_Handler, + }, + { + MethodName: "DeleteAllContexts", + Handler: _Contexts_DeleteAllContexts_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/dialogflow/v2beta1/context.proto", +} + +func init() { proto.RegisterFile("google/cloud/dialogflow/v2beta1/context.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 793 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0xcd, 0x6f, 0xd3, 0x48, + 0x14, 0xd7, 0xb8, 0xbb, 0xfd, 0x98, 0x34, 0xbb, 0xea, 0x6c, 0xd4, 0x8d, 0xd2, 0xae, 0x1a, 0x79, + 0xb5, 0x4b, 0x14, 0x09, 0x5b, 0x98, 0x2f, 0x41, 0x05, 0x52, 0x9b, 0xd0, 0xaa, 0x52, 0x91, 0xaa, + 0xb4, 0x70, 0xe8, 0x25, 0x9a, 0x26, 0x2f, 0x96, 0xa9, 0x33, 0x63, 0x3c, 0x13, 0x28, 0x45, 0x39, + 0xf0, 0x71, 0xe1, 0xc4, 0x01, 0x09, 0xc4, 0x09, 0x89, 0x03, 0x87, 0xfe, 0x3b, 0xfc, 0x0b, 0x3d, + 0x72, 0xe0, 0xc8, 0x0d, 0x64, 0x7b, 0x9c, 0x8f, 0xc6, 0x25, 0x49, 0xcb, 0xcd, 0x7e, 0xf3, 0x7b, + 0x6f, 0x7e, 0xbf, 0x37, 0xbf, 0x79, 0x36, 0xbe, 0x68, 0x73, 0x6e, 0xbb, 0x60, 0xd6, 0x5c, 0xde, + 0xaa, 0x9b, 0x75, 0x87, 0xba, 0xdc, 0x6e, 0xb8, 0xfc, 0xb1, 0xf9, 0xc8, 0xda, 0x03, 0x49, 0x2f, + 0x99, 0x35, 0xce, 0x24, 0x1c, 0x48, 0xc3, 0xf3, 0xb9, 0xe4, 0x64, 0x29, 0x82, 0x1b, 0x21, 0xdc, + 0xe8, 0xc2, 0x0d, 0x05, 0xcf, 0x2d, 0xaa, 0x7a, 0xd4, 0x73, 0x4c, 0xca, 0x18, 0x97, 0x54, 0x3a, + 0x9c, 0x89, 0x28, 0x3d, 0xb7, 0xa0, 0x56, 0xc3, 0xb7, 0xbd, 0x56, 0xc3, 0x84, 0xa6, 0x27, 0x9f, + 0xa8, 0xc5, 0xfc, 0xc9, 0xc5, 0x86, 0x03, 0x6e, 0xbd, 0xda, 0xa4, 0x62, 0x5f, 0x21, 0x16, 0x4f, + 0x22, 0x84, 0xf4, 0x5b, 0x35, 0xc5, 0x4d, 0x6f, 0xe3, 0xa9, 0x52, 0x44, 0x96, 0x10, 0xfc, 0x1b, + 0xa3, 0x4d, 0xc8, 0xa2, 0x3c, 0x2a, 0xcc, 0x54, 0xc2, 0x67, 0xf2, 0x1f, 0xfe, 0xc3, 0x75, 0x1a, + 0x20, 0x3c, 0xca, 0xaa, 0x35, 0xde, 0x62, 0x32, 0xab, 0xe5, 0x51, 0xe1, 0xf7, 0x4a, 0x3a, 0x8e, + 0x96, 0x82, 0x20, 0xb9, 0x8e, 0xb1, 0x47, 0x7d, 0xda, 0x04, 0x09, 0xbe, 0xc8, 0x4e, 0xe4, 0x51, + 0x21, 0x65, 0xfd, 0x6d, 0x28, 0xd9, 0xf1, 0xc6, 0xc6, 0x76, 0xb8, 0x71, 0xa5, 0x07, 0xaa, 0x3b, + 0xf8, 0xaf, 0x4d, 0x47, 0x48, 0x45, 0x41, 0x54, 0xe0, 0x61, 0x0b, 0x84, 0x24, 0xf3, 0x78, 0xd2, + 0xa3, 0x3e, 0x30, 0xa9, 0xc8, 0xa8, 0x37, 0xb2, 0x80, 0x67, 0x3c, 0x6a, 0x43, 0x55, 0x38, 0x87, + 0xa0, 0x98, 0x4c, 0x07, 0x81, 0x6d, 0xe7, 0x10, 0xc8, 0x3f, 0x01, 0x09, 0x1b, 0xaa, 0x92, 0xef, + 0x03, 0x0b, 0x49, 0xcc, 0x54, 0x42, 0xf8, 0x4e, 0x10, 0xd0, 0x5f, 0x22, 0x9c, 0xe9, 0xdf, 0x4b, + 0x78, 0x9c, 0x09, 0x20, 0x65, 0x3c, 0xad, 0xce, 0x4b, 0x64, 0x51, 0x7e, 0xa2, 0x90, 0xb2, 0x0a, + 0xc6, 0x90, 0x13, 0x33, 0x54, 0x91, 0x4a, 0x27, 0x93, 0xfc, 0x8f, 0xff, 0x64, 0x70, 0x20, 0xab, + 0x3d, 0x14, 0xb4, 0x90, 0x42, 0x3a, 0x08, 0x6f, 0x75, 0x68, 0x5c, 0xc0, 0x73, 0xeb, 0x10, 0x93, + 0x88, 0xf5, 0x26, 0xb4, 0x5e, 0xf7, 0x71, 0xa6, 0xe4, 0x03, 0x95, 0x70, 0x02, 0x7b, 0x5a, 0x6f, + 0x56, 0xf1, 0x94, 0x22, 0x13, 0x6e, 0x3c, 0x8e, 0x8a, 0x38, 0x51, 0x7f, 0x87, 0x70, 0xe6, 0x9e, + 0x57, 0x1f, 0xdc, 0xb4, 0xa7, 0x38, 0x3a, 0x63, 0x71, 0xb2, 0x8c, 0x53, 0xad, 0xb0, 0x76, 0xe8, + 0x4e, 0x45, 0x32, 0x37, 0xe0, 0x92, 0xb5, 0xc0, 0xc0, 0x77, 0xa9, 0xd8, 0xaf, 0xe0, 0x08, 0x1e, + 0x3c, 0xeb, 0x45, 0x9c, 0x29, 0x83, 0x0b, 0x03, 0xc4, 0x92, 0x3a, 0x67, 0xe1, 0x6c, 0x84, 0x5d, + 0x71, 0xdd, 0x11, 0x9d, 0x65, 0x7d, 0x4f, 0xe1, 0xe9, 0x18, 0x4b, 0x9e, 0x69, 0x78, 0xb6, 0xd7, + 0x2a, 0xe4, 0xca, 0x50, 0xb5, 0x09, 0x2e, 0xce, 0x5d, 0x1d, 0x33, 0x2b, 0xf2, 0xa3, 0xfe, 0x02, + 0x3d, 0xff, 0x7c, 0xfc, 0x46, 0x6b, 0x93, 0x6b, 0x9d, 0x79, 0xf2, 0x34, 0x62, 0x79, 0xcb, 0xf3, + 0xf9, 0x03, 0xa8, 0x49, 0x61, 0x16, 0x4d, 0x6a, 0x03, 0x93, 0xa6, 0x00, 0x21, 0x82, 0x51, 0x61, + 0x16, 0xdb, 0xf1, 0xd0, 0x11, 0xbb, 0x25, 0xb2, 0x32, 0x3c, 0xd3, 0x6f, 0x31, 0xe9, 0x34, 0x21, + 0x08, 0x24, 0x15, 0x21, 0x5f, 0x11, 0xc6, 0x5d, 0xa3, 0x12, 0x6b, 0xa8, 0x96, 0x01, 0x57, 0xe7, + 0x46, 0xf6, 0x48, 0xa2, 0xe4, 0xe0, 0x28, 0x7f, 0x26, 0xb8, 0x43, 0xd5, 0x2c, 0xb6, 0xfb, 0x25, + 0x27, 0x67, 0x26, 0x0a, 0xee, 0x2d, 0x42, 0x5e, 0x69, 0x38, 0xdd, 0x77, 0xe5, 0xc8, 0xf0, 0x13, + 0x4c, 0xba, 0xa2, 0x63, 0x08, 0x7f, 0x1b, 0x09, 0x7f, 0x8d, 0xf4, 0x33, 0x1e, 0xf6, 0xcd, 0xf8, + 0x7a, 0xed, 0x6e, 0xea, 0xe7, 0x3f, 0xf5, 0x4e, 0x35, 0xf2, 0x5e, 0xc3, 0xe9, 0xbe, 0x49, 0x30, + 0x42, 0x2f, 0x92, 0x26, 0xc7, 0x18, 0xbd, 0xf8, 0x14, 0xf5, 0xe2, 0x03, 0xb2, 0x6e, 0x77, 0x85, + 0xc4, 0x5f, 0xd2, 0x71, 0xdc, 0xd0, 0xed, 0xc9, 0x8e, 0xb5, 0x31, 0x6a, 0xa9, 0xa1, 0xf6, 0xe8, + 0xf6, 0xe6, 0x18, 0xe1, 0x74, 0xdf, 0x30, 0x1a, 0xa1, 0x37, 0x49, 0xc3, 0x2b, 0x37, 0x3f, 0x30, + 0xfc, 0xee, 0x04, 0x9f, 0xf6, 0xce, 0x75, 0x28, 0x9e, 0xf9, 0x3a, 0x14, 0x7f, 0xc1, 0x75, 0xf8, + 0x82, 0xf0, 0xdc, 0xc0, 0x1c, 0x25, 0x37, 0x46, 0x94, 0x3a, 0x38, 0x7b, 0xc7, 0x92, 0x3b, 0xde, + 0xc0, 0x2b, 0x9e, 0xdf, 0xfa, 0xab, 0x47, 0x08, 0xff, 0x5b, 0xe3, 0xcd, 0x61, 0xf2, 0x56, 0x67, + 0x95, 0xac, 0xad, 0x40, 0xc4, 0x16, 0xda, 0xdd, 0x50, 0x09, 0x36, 0x77, 0x29, 0xb3, 0x0d, 0xee, + 0xdb, 0xa6, 0x0d, 0x2c, 0x94, 0x68, 0x46, 0x4b, 0xd4, 0x73, 0xc4, 0xa9, 0xff, 0x8a, 0xcb, 0xdd, + 0xd0, 0x37, 0x84, 0x3e, 0x6a, 0x5a, 0x79, 0xed, 0x48, 0x5b, 0x5a, 0x8f, 0x6a, 0x96, 0x42, 0x12, + 0xe5, 0x2e, 0x89, 0xfb, 0x51, 0xd2, 0xde, 0x64, 0x58, 0xff, 0xf2, 0x8f, 0x00, 0x00, 0x00, 0xff, + 0xff, 0x61, 0xec, 0x01, 0x66, 0x8a, 0x0a, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1/entity_type.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1/entity_type.pb.go new file mode 100644 index 0000000..6364ec6 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1/entity_type.pb.go @@ -0,0 +1,1271 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/dialogflow/v2beta1/entity_type.proto + +package dialogflow + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import google_protobuf2 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf3 "google.golang.org/genproto/protobuf/field_mask" +import _ "github.com/golang/protobuf/ptypes/struct" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Represents kinds of entities. +type EntityType_Kind int32 + +const ( + // Not specified. This value should be never used. + EntityType_KIND_UNSPECIFIED EntityType_Kind = 0 + // Map entity types allow mapping of a group of synonyms to a canonical + // value. + EntityType_KIND_MAP EntityType_Kind = 1 + // List entity types contain a set of entries that do not map to canonical + // values. However, list entity types can contain references to other entity + // types (with or without aliases). + EntityType_KIND_LIST EntityType_Kind = 2 +) + +var EntityType_Kind_name = map[int32]string{ + 0: "KIND_UNSPECIFIED", + 1: "KIND_MAP", + 2: "KIND_LIST", +} +var EntityType_Kind_value = map[string]int32{ + "KIND_UNSPECIFIED": 0, + "KIND_MAP": 1, + "KIND_LIST": 2, +} + +func (x EntityType_Kind) String() string { + return proto.EnumName(EntityType_Kind_name, int32(x)) +} +func (EntityType_Kind) EnumDescriptor() ([]byte, []int) { return fileDescriptor2, []int{0, 0} } + +// Represents different entity type expansion modes. Automated expansion +// allows an agent to recognize values that have not been explicitly listed in +// the entity (for example, new kinds of shopping list items). +type EntityType_AutoExpansionMode int32 + +const ( + // Auto expansion disabled for the entity. + EntityType_AUTO_EXPANSION_MODE_UNSPECIFIED EntityType_AutoExpansionMode = 0 + // Allows an agent to recognize values that have not been explicitly + // listed in the entity. + EntityType_AUTO_EXPANSION_MODE_DEFAULT EntityType_AutoExpansionMode = 1 +) + +var EntityType_AutoExpansionMode_name = map[int32]string{ + 0: "AUTO_EXPANSION_MODE_UNSPECIFIED", + 1: "AUTO_EXPANSION_MODE_DEFAULT", +} +var EntityType_AutoExpansionMode_value = map[string]int32{ + "AUTO_EXPANSION_MODE_UNSPECIFIED": 0, + "AUTO_EXPANSION_MODE_DEFAULT": 1, +} + +func (x EntityType_AutoExpansionMode) String() string { + return proto.EnumName(EntityType_AutoExpansionMode_name, int32(x)) +} +func (EntityType_AutoExpansionMode) EnumDescriptor() ([]byte, []int) { + return fileDescriptor2, []int{0, 1} +} + +// Represents an entity type. +// Entity types serve as a tool for extracting parameter values from natural +// language queries. +type EntityType struct { + // Required for all methods except `create` (`create` populates the name + // automatically. + // The unique identifier of the entity type. Format: + // `projects//agent/entityTypes/`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Required. The name of the entity. + DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // Required. Indicates the kind of entity type. + Kind EntityType_Kind `protobuf:"varint,3,opt,name=kind,enum=google.cloud.dialogflow.v2beta1.EntityType_Kind" json:"kind,omitempty"` + // Optional. Indicates whether the entity type can be automatically + // expanded. + AutoExpansionMode EntityType_AutoExpansionMode `protobuf:"varint,4,opt,name=auto_expansion_mode,json=autoExpansionMode,enum=google.cloud.dialogflow.v2beta1.EntityType_AutoExpansionMode" json:"auto_expansion_mode,omitempty"` + // Optional. The collection of entities associated with the entity type. + Entities []*EntityType_Entity `protobuf:"bytes,6,rep,name=entities" json:"entities,omitempty"` +} + +func (m *EntityType) Reset() { *m = EntityType{} } +func (m *EntityType) String() string { return proto.CompactTextString(m) } +func (*EntityType) ProtoMessage() {} +func (*EntityType) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } + +func (m *EntityType) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *EntityType) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func (m *EntityType) GetKind() EntityType_Kind { + if m != nil { + return m.Kind + } + return EntityType_KIND_UNSPECIFIED +} + +func (m *EntityType) GetAutoExpansionMode() EntityType_AutoExpansionMode { + if m != nil { + return m.AutoExpansionMode + } + return EntityType_AUTO_EXPANSION_MODE_UNSPECIFIED +} + +func (m *EntityType) GetEntities() []*EntityType_Entity { + if m != nil { + return m.Entities + } + return nil +} + +// Optional. Represents an entity. +type EntityType_Entity struct { + // Required. + // For `KIND_MAP` entity types: + // A canonical name to be used in place of synonyms. + // For `KIND_LIST` entity types: + // A string that can contain references to other entity types (with or + // without aliases). + Value string `protobuf:"bytes,1,opt,name=value" json:"value,omitempty"` + // Required. A collection of synonyms. For `KIND_LIST` entity types this + // must contain exactly one synonym equal to `value`. + Synonyms []string `protobuf:"bytes,2,rep,name=synonyms" json:"synonyms,omitempty"` +} + +func (m *EntityType_Entity) Reset() { *m = EntityType_Entity{} } +func (m *EntityType_Entity) String() string { return proto.CompactTextString(m) } +func (*EntityType_Entity) ProtoMessage() {} +func (*EntityType_Entity) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0, 0} } + +func (m *EntityType_Entity) GetValue() string { + if m != nil { + return m.Value + } + return "" +} + +func (m *EntityType_Entity) GetSynonyms() []string { + if m != nil { + return m.Synonyms + } + return nil +} + +// The request message for [EntityTypes.ListEntityTypes][google.cloud.dialogflow.v2beta1.EntityTypes.ListEntityTypes]. +type ListEntityTypesRequest struct { + // Required. The agent to list all entity types from. + // Format: `projects//agent`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Optional. The language to list entity synonyms for. If not specified, + // the agent's default language is used. + // [More than a dozen + // languages](https://dialogflow.com/docs/reference/language) are supported. + // Note: languages must be enabled in the agent, before they can be used. + LanguageCode string `protobuf:"bytes,2,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` + // Optional. The maximum number of items to return in a single page. By + // default 100 and at most 1000. + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // Optional. The next_page_token value returned from a previous list request. + PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListEntityTypesRequest) Reset() { *m = ListEntityTypesRequest{} } +func (m *ListEntityTypesRequest) String() string { return proto.CompactTextString(m) } +func (*ListEntityTypesRequest) ProtoMessage() {} +func (*ListEntityTypesRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{1} } + +func (m *ListEntityTypesRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListEntityTypesRequest) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +func (m *ListEntityTypesRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListEntityTypesRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// The response message for [EntityTypes.ListEntityTypes][google.cloud.dialogflow.v2beta1.EntityTypes.ListEntityTypes]. +type ListEntityTypesResponse struct { + // The list of agent entity types. There will be a maximum number of items + // returned based on the page_size field in the request. + EntityTypes []*EntityType `protobuf:"bytes,1,rep,name=entity_types,json=entityTypes" json:"entity_types,omitempty"` + // Token to retrieve the next page of results, or empty if there are no + // more results in the list. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListEntityTypesResponse) Reset() { *m = ListEntityTypesResponse{} } +func (m *ListEntityTypesResponse) String() string { return proto.CompactTextString(m) } +func (*ListEntityTypesResponse) ProtoMessage() {} +func (*ListEntityTypesResponse) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{2} } + +func (m *ListEntityTypesResponse) GetEntityTypes() []*EntityType { + if m != nil { + return m.EntityTypes + } + return nil +} + +func (m *ListEntityTypesResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The request message for [EntityTypes.GetEntityType][google.cloud.dialogflow.v2beta1.EntityTypes.GetEntityType]. +type GetEntityTypeRequest struct { + // Required. The name of the entity type. + // Format: `projects//agent/entityTypes/`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Optional. The language to retrieve entity synonyms for. If not specified, + // the agent's default language is used. + // [More than a dozen + // languages](https://dialogflow.com/docs/reference/language) are supported. + // Note: languages must be enabled in the agent, before they can be used. + LanguageCode string `protobuf:"bytes,2,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` +} + +func (m *GetEntityTypeRequest) Reset() { *m = GetEntityTypeRequest{} } +func (m *GetEntityTypeRequest) String() string { return proto.CompactTextString(m) } +func (*GetEntityTypeRequest) ProtoMessage() {} +func (*GetEntityTypeRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{3} } + +func (m *GetEntityTypeRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *GetEntityTypeRequest) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +// The request message for [EntityTypes.CreateEntityType][google.cloud.dialogflow.v2beta1.EntityTypes.CreateEntityType]. +type CreateEntityTypeRequest struct { + // Required. The agent to create a entity type for. + // Format: `projects//agent`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Required. The entity type to create. + EntityType *EntityType `protobuf:"bytes,2,opt,name=entity_type,json=entityType" json:"entity_type,omitempty"` + // Optional. The language of entity synonyms defined in `entity_type`. If not + // specified, the agent's default language is used. + // [More than a dozen + // languages](https://dialogflow.com/docs/reference/language) are supported. + // Note: languages must be enabled in the agent, before they can be used. + LanguageCode string `protobuf:"bytes,3,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` +} + +func (m *CreateEntityTypeRequest) Reset() { *m = CreateEntityTypeRequest{} } +func (m *CreateEntityTypeRequest) String() string { return proto.CompactTextString(m) } +func (*CreateEntityTypeRequest) ProtoMessage() {} +func (*CreateEntityTypeRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{4} } + +func (m *CreateEntityTypeRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateEntityTypeRequest) GetEntityType() *EntityType { + if m != nil { + return m.EntityType + } + return nil +} + +func (m *CreateEntityTypeRequest) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +// The request message for [EntityTypes.UpdateEntityType][google.cloud.dialogflow.v2beta1.EntityTypes.UpdateEntityType]. +type UpdateEntityTypeRequest struct { + // Required. The entity type to update. + // Format: `projects//agent/entityTypes/`. + EntityType *EntityType `protobuf:"bytes,1,opt,name=entity_type,json=entityType" json:"entity_type,omitempty"` + // Optional. The language of entity synonyms defined in `entity_type`. If not + // specified, the agent's default language is used. + // [More than a dozen + // languages](https://dialogflow.com/docs/reference/language) are supported. + // Note: languages must be enabled in the agent, before they can be used. + LanguageCode string `protobuf:"bytes,2,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` + // Optional. The mask to control which fields get updated. + UpdateMask *google_protobuf3.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateEntityTypeRequest) Reset() { *m = UpdateEntityTypeRequest{} } +func (m *UpdateEntityTypeRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateEntityTypeRequest) ProtoMessage() {} +func (*UpdateEntityTypeRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{5} } + +func (m *UpdateEntityTypeRequest) GetEntityType() *EntityType { + if m != nil { + return m.EntityType + } + return nil +} + +func (m *UpdateEntityTypeRequest) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +func (m *UpdateEntityTypeRequest) GetUpdateMask() *google_protobuf3.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +// The request message for [EntityTypes.DeleteEntityType][google.cloud.dialogflow.v2beta1.EntityTypes.DeleteEntityType]. +type DeleteEntityTypeRequest struct { + // Required. The name of the entity type to delete. + // Format: `projects//agent/entityTypes/`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteEntityTypeRequest) Reset() { *m = DeleteEntityTypeRequest{} } +func (m *DeleteEntityTypeRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteEntityTypeRequest) ProtoMessage() {} +func (*DeleteEntityTypeRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{6} } + +func (m *DeleteEntityTypeRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The request message for [EntityTypes.BatchUpdateEntityTypes][google.cloud.dialogflow.v2beta1.EntityTypes.BatchUpdateEntityTypes]. +type BatchUpdateEntityTypesRequest struct { + // Required. The name of the agent to update or create entity types in. + // Format: `projects//agent`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Required. The source of the entity type batch. + // + // For each entity type in the batch: + // * If `name` is specified, we update an existing entity type. + // * If `name` is not specified, we create a new entity type. + // + // Types that are valid to be assigned to EntityTypeBatch: + // *BatchUpdateEntityTypesRequest_EntityTypeBatchUri + // *BatchUpdateEntityTypesRequest_EntityTypeBatchInline + EntityTypeBatch isBatchUpdateEntityTypesRequest_EntityTypeBatch `protobuf_oneof:"entity_type_batch"` + // Optional. The language of entity synonyms defined in `entity_types`. If not + // specified, the agent's default language is used. + // [More than a dozen + // languages](https://dialogflow.com/docs/reference/language) are supported. + // Note: languages must be enabled in the agent, before they can be used. + LanguageCode string `protobuf:"bytes,4,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` + // Optional. The mask to control which fields get updated. + UpdateMask *google_protobuf3.FieldMask `protobuf:"bytes,5,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *BatchUpdateEntityTypesRequest) Reset() { *m = BatchUpdateEntityTypesRequest{} } +func (m *BatchUpdateEntityTypesRequest) String() string { return proto.CompactTextString(m) } +func (*BatchUpdateEntityTypesRequest) ProtoMessage() {} +func (*BatchUpdateEntityTypesRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{7} } + +type isBatchUpdateEntityTypesRequest_EntityTypeBatch interface { + isBatchUpdateEntityTypesRequest_EntityTypeBatch() +} + +type BatchUpdateEntityTypesRequest_EntityTypeBatchUri struct { + EntityTypeBatchUri string `protobuf:"bytes,2,opt,name=entity_type_batch_uri,json=entityTypeBatchUri,oneof"` +} +type BatchUpdateEntityTypesRequest_EntityTypeBatchInline struct { + EntityTypeBatchInline *EntityTypeBatch `protobuf:"bytes,3,opt,name=entity_type_batch_inline,json=entityTypeBatchInline,oneof"` +} + +func (*BatchUpdateEntityTypesRequest_EntityTypeBatchUri) isBatchUpdateEntityTypesRequest_EntityTypeBatch() { +} +func (*BatchUpdateEntityTypesRequest_EntityTypeBatchInline) isBatchUpdateEntityTypesRequest_EntityTypeBatch() { +} + +func (m *BatchUpdateEntityTypesRequest) GetEntityTypeBatch() isBatchUpdateEntityTypesRequest_EntityTypeBatch { + if m != nil { + return m.EntityTypeBatch + } + return nil +} + +func (m *BatchUpdateEntityTypesRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *BatchUpdateEntityTypesRequest) GetEntityTypeBatchUri() string { + if x, ok := m.GetEntityTypeBatch().(*BatchUpdateEntityTypesRequest_EntityTypeBatchUri); ok { + return x.EntityTypeBatchUri + } + return "" +} + +func (m *BatchUpdateEntityTypesRequest) GetEntityTypeBatchInline() *EntityTypeBatch { + if x, ok := m.GetEntityTypeBatch().(*BatchUpdateEntityTypesRequest_EntityTypeBatchInline); ok { + return x.EntityTypeBatchInline + } + return nil +} + +func (m *BatchUpdateEntityTypesRequest) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +func (m *BatchUpdateEntityTypesRequest) GetUpdateMask() *google_protobuf3.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*BatchUpdateEntityTypesRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _BatchUpdateEntityTypesRequest_OneofMarshaler, _BatchUpdateEntityTypesRequest_OneofUnmarshaler, _BatchUpdateEntityTypesRequest_OneofSizer, []interface{}{ + (*BatchUpdateEntityTypesRequest_EntityTypeBatchUri)(nil), + (*BatchUpdateEntityTypesRequest_EntityTypeBatchInline)(nil), + } +} + +func _BatchUpdateEntityTypesRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*BatchUpdateEntityTypesRequest) + // entity_type_batch + switch x := m.EntityTypeBatch.(type) { + case *BatchUpdateEntityTypesRequest_EntityTypeBatchUri: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeStringBytes(x.EntityTypeBatchUri) + case *BatchUpdateEntityTypesRequest_EntityTypeBatchInline: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.EntityTypeBatchInline); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("BatchUpdateEntityTypesRequest.EntityTypeBatch has unexpected type %T", x) + } + return nil +} + +func _BatchUpdateEntityTypesRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*BatchUpdateEntityTypesRequest) + switch tag { + case 2: // entity_type_batch.entity_type_batch_uri + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.EntityTypeBatch = &BatchUpdateEntityTypesRequest_EntityTypeBatchUri{x} + return true, err + case 3: // entity_type_batch.entity_type_batch_inline + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(EntityTypeBatch) + err := b.DecodeMessage(msg) + m.EntityTypeBatch = &BatchUpdateEntityTypesRequest_EntityTypeBatchInline{msg} + return true, err + default: + return false, nil + } +} + +func _BatchUpdateEntityTypesRequest_OneofSizer(msg proto.Message) (n int) { + m := msg.(*BatchUpdateEntityTypesRequest) + // entity_type_batch + switch x := m.EntityTypeBatch.(type) { + case *BatchUpdateEntityTypesRequest_EntityTypeBatchUri: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.EntityTypeBatchUri))) + n += len(x.EntityTypeBatchUri) + case *BatchUpdateEntityTypesRequest_EntityTypeBatchInline: + s := proto.Size(x.EntityTypeBatchInline) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The response message for [EntityTypes.BatchUpdateEntityTypes][google.cloud.dialogflow.v2beta1.EntityTypes.BatchUpdateEntityTypes]. +type BatchUpdateEntityTypesResponse struct { + // The collection of updated or created entity types. + EntityTypes []*EntityType `protobuf:"bytes,1,rep,name=entity_types,json=entityTypes" json:"entity_types,omitempty"` +} + +func (m *BatchUpdateEntityTypesResponse) Reset() { *m = BatchUpdateEntityTypesResponse{} } +func (m *BatchUpdateEntityTypesResponse) String() string { return proto.CompactTextString(m) } +func (*BatchUpdateEntityTypesResponse) ProtoMessage() {} +func (*BatchUpdateEntityTypesResponse) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{8} } + +func (m *BatchUpdateEntityTypesResponse) GetEntityTypes() []*EntityType { + if m != nil { + return m.EntityTypes + } + return nil +} + +// The request message for [EntityTypes.BatchDeleteEntityTypes][google.cloud.dialogflow.v2beta1.EntityTypes.BatchDeleteEntityTypes]. +type BatchDeleteEntityTypesRequest struct { + // Required. The name of the agent to delete all entities types for. Format: + // `projects//agent`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Required. The names entity types to delete. All names must point to the + // same agent as `parent`. + EntityTypeNames []string `protobuf:"bytes,2,rep,name=entity_type_names,json=entityTypeNames" json:"entity_type_names,omitempty"` +} + +func (m *BatchDeleteEntityTypesRequest) Reset() { *m = BatchDeleteEntityTypesRequest{} } +func (m *BatchDeleteEntityTypesRequest) String() string { return proto.CompactTextString(m) } +func (*BatchDeleteEntityTypesRequest) ProtoMessage() {} +func (*BatchDeleteEntityTypesRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{9} } + +func (m *BatchDeleteEntityTypesRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *BatchDeleteEntityTypesRequest) GetEntityTypeNames() []string { + if m != nil { + return m.EntityTypeNames + } + return nil +} + +// The request message for [EntityTypes.BatchCreateEntities][google.cloud.dialogflow.v2beta1.EntityTypes.BatchCreateEntities]. +type BatchCreateEntitiesRequest struct { + // Required. The name of the entity type to create entities in. Format: + // `projects//agent/entityTypes/`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Required. The collection of entities to create. + Entities []*EntityType_Entity `protobuf:"bytes,2,rep,name=entities" json:"entities,omitempty"` + // Optional. The language of entity synonyms defined in `entities`. If not + // specified, the agent's default language is used. + // [More than a dozen + // languages](https://dialogflow.com/docs/reference/language) are supported. + // Note: languages must be enabled in the agent, before they can be used. + LanguageCode string `protobuf:"bytes,3,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` +} + +func (m *BatchCreateEntitiesRequest) Reset() { *m = BatchCreateEntitiesRequest{} } +func (m *BatchCreateEntitiesRequest) String() string { return proto.CompactTextString(m) } +func (*BatchCreateEntitiesRequest) ProtoMessage() {} +func (*BatchCreateEntitiesRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{10} } + +func (m *BatchCreateEntitiesRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *BatchCreateEntitiesRequest) GetEntities() []*EntityType_Entity { + if m != nil { + return m.Entities + } + return nil +} + +func (m *BatchCreateEntitiesRequest) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +// The response message for [EntityTypes.BatchCreateEntities][google.cloud.dialogflow.v2beta1.EntityTypes.BatchCreateEntities]. +type BatchUpdateEntitiesRequest struct { + // Required. The name of the entity type to update the entities in. Format: + // `projects//agent/entityTypes/`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Required. The collection of new entities to replace the existing entities. + Entities []*EntityType_Entity `protobuf:"bytes,2,rep,name=entities" json:"entities,omitempty"` + // Optional. The language of entity synonyms defined in `entities`. If not + // specified, the agent's default language is used. + // [More than a dozen + // languages](https://dialogflow.com/docs/reference/language) are supported. + // Note: languages must be enabled in the agent, before they can be used. + LanguageCode string `protobuf:"bytes,3,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` + // Optional. The mask to control which fields get updated. + UpdateMask *google_protobuf3.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *BatchUpdateEntitiesRequest) Reset() { *m = BatchUpdateEntitiesRequest{} } +func (m *BatchUpdateEntitiesRequest) String() string { return proto.CompactTextString(m) } +func (*BatchUpdateEntitiesRequest) ProtoMessage() {} +func (*BatchUpdateEntitiesRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{11} } + +func (m *BatchUpdateEntitiesRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *BatchUpdateEntitiesRequest) GetEntities() []*EntityType_Entity { + if m != nil { + return m.Entities + } + return nil +} + +func (m *BatchUpdateEntitiesRequest) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +func (m *BatchUpdateEntitiesRequest) GetUpdateMask() *google_protobuf3.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +// The request message for [EntityTypes.BatchDeleteEntities][google.cloud.dialogflow.v2beta1.EntityTypes.BatchDeleteEntities]. +type BatchDeleteEntitiesRequest struct { + // Required. The name of the entity type to delete entries for. Format: + // `projects//agent/entityTypes/`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Required. The canonical `values` of the entities to delete. Note that + // these are not fully-qualified names, i.e. they don't start with + // `projects/`. + EntityValues []string `protobuf:"bytes,2,rep,name=entity_values,json=entityValues" json:"entity_values,omitempty"` + // Optional. The language of entity synonyms defined in `entities`. If not + // specified, the agent's default language is used. + // [More than a dozen + // languages](https://dialogflow.com/docs/reference/language) are supported. + // Note: languages must be enabled in the agent, before they can be used. + LanguageCode string `protobuf:"bytes,3,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` +} + +func (m *BatchDeleteEntitiesRequest) Reset() { *m = BatchDeleteEntitiesRequest{} } +func (m *BatchDeleteEntitiesRequest) String() string { return proto.CompactTextString(m) } +func (*BatchDeleteEntitiesRequest) ProtoMessage() {} +func (*BatchDeleteEntitiesRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{12} } + +func (m *BatchDeleteEntitiesRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *BatchDeleteEntitiesRequest) GetEntityValues() []string { + if m != nil { + return m.EntityValues + } + return nil +} + +func (m *BatchDeleteEntitiesRequest) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +// This message is a wrapper around a collection of entity types. +type EntityTypeBatch struct { + // A collection of entity types. + EntityTypes []*EntityType `protobuf:"bytes,1,rep,name=entity_types,json=entityTypes" json:"entity_types,omitempty"` +} + +func (m *EntityTypeBatch) Reset() { *m = EntityTypeBatch{} } +func (m *EntityTypeBatch) String() string { return proto.CompactTextString(m) } +func (*EntityTypeBatch) ProtoMessage() {} +func (*EntityTypeBatch) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{13} } + +func (m *EntityTypeBatch) GetEntityTypes() []*EntityType { + if m != nil { + return m.EntityTypes + } + return nil +} + +func init() { + proto.RegisterType((*EntityType)(nil), "google.cloud.dialogflow.v2beta1.EntityType") + proto.RegisterType((*EntityType_Entity)(nil), "google.cloud.dialogflow.v2beta1.EntityType.Entity") + proto.RegisterType((*ListEntityTypesRequest)(nil), "google.cloud.dialogflow.v2beta1.ListEntityTypesRequest") + proto.RegisterType((*ListEntityTypesResponse)(nil), "google.cloud.dialogflow.v2beta1.ListEntityTypesResponse") + proto.RegisterType((*GetEntityTypeRequest)(nil), "google.cloud.dialogflow.v2beta1.GetEntityTypeRequest") + proto.RegisterType((*CreateEntityTypeRequest)(nil), "google.cloud.dialogflow.v2beta1.CreateEntityTypeRequest") + proto.RegisterType((*UpdateEntityTypeRequest)(nil), "google.cloud.dialogflow.v2beta1.UpdateEntityTypeRequest") + proto.RegisterType((*DeleteEntityTypeRequest)(nil), "google.cloud.dialogflow.v2beta1.DeleteEntityTypeRequest") + proto.RegisterType((*BatchUpdateEntityTypesRequest)(nil), "google.cloud.dialogflow.v2beta1.BatchUpdateEntityTypesRequest") + proto.RegisterType((*BatchUpdateEntityTypesResponse)(nil), "google.cloud.dialogflow.v2beta1.BatchUpdateEntityTypesResponse") + proto.RegisterType((*BatchDeleteEntityTypesRequest)(nil), "google.cloud.dialogflow.v2beta1.BatchDeleteEntityTypesRequest") + proto.RegisterType((*BatchCreateEntitiesRequest)(nil), "google.cloud.dialogflow.v2beta1.BatchCreateEntitiesRequest") + proto.RegisterType((*BatchUpdateEntitiesRequest)(nil), "google.cloud.dialogflow.v2beta1.BatchUpdateEntitiesRequest") + proto.RegisterType((*BatchDeleteEntitiesRequest)(nil), "google.cloud.dialogflow.v2beta1.BatchDeleteEntitiesRequest") + proto.RegisterType((*EntityTypeBatch)(nil), "google.cloud.dialogflow.v2beta1.EntityTypeBatch") + proto.RegisterEnum("google.cloud.dialogflow.v2beta1.EntityType_Kind", EntityType_Kind_name, EntityType_Kind_value) + proto.RegisterEnum("google.cloud.dialogflow.v2beta1.EntityType_AutoExpansionMode", EntityType_AutoExpansionMode_name, EntityType_AutoExpansionMode_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for EntityTypes service + +type EntityTypesClient interface { + // Returns the list of all entity types in the specified agent. + ListEntityTypes(ctx context.Context, in *ListEntityTypesRequest, opts ...grpc.CallOption) (*ListEntityTypesResponse, error) + // Retrieves the specified entity type. + GetEntityType(ctx context.Context, in *GetEntityTypeRequest, opts ...grpc.CallOption) (*EntityType, error) + // Creates an entity type in the specified agent. + CreateEntityType(ctx context.Context, in *CreateEntityTypeRequest, opts ...grpc.CallOption) (*EntityType, error) + // Updates the specified entity type. + UpdateEntityType(ctx context.Context, in *UpdateEntityTypeRequest, opts ...grpc.CallOption) (*EntityType, error) + // Deletes the specified entity type. + DeleteEntityType(ctx context.Context, in *DeleteEntityTypeRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) + // Updates/Creates multiple entity types in the specified agent. + // + // Operation + BatchUpdateEntityTypes(ctx context.Context, in *BatchUpdateEntityTypesRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Deletes entity types in the specified agent. + // + // Operation + BatchDeleteEntityTypes(ctx context.Context, in *BatchDeleteEntityTypesRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Creates multiple new entities in the specified entity type (extends the + // existing collection of entries). + // + // Operation + BatchCreateEntities(ctx context.Context, in *BatchCreateEntitiesRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Updates entities in the specified entity type (replaces the existing + // collection of entries). + // + // Operation + BatchUpdateEntities(ctx context.Context, in *BatchUpdateEntitiesRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Deletes entities in the specified entity type. + // + // Operation + BatchDeleteEntities(ctx context.Context, in *BatchDeleteEntitiesRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) +} + +type entityTypesClient struct { + cc *grpc.ClientConn +} + +func NewEntityTypesClient(cc *grpc.ClientConn) EntityTypesClient { + return &entityTypesClient{cc} +} + +func (c *entityTypesClient) ListEntityTypes(ctx context.Context, in *ListEntityTypesRequest, opts ...grpc.CallOption) (*ListEntityTypesResponse, error) { + out := new(ListEntityTypesResponse) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.EntityTypes/ListEntityTypes", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *entityTypesClient) GetEntityType(ctx context.Context, in *GetEntityTypeRequest, opts ...grpc.CallOption) (*EntityType, error) { + out := new(EntityType) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.EntityTypes/GetEntityType", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *entityTypesClient) CreateEntityType(ctx context.Context, in *CreateEntityTypeRequest, opts ...grpc.CallOption) (*EntityType, error) { + out := new(EntityType) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.EntityTypes/CreateEntityType", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *entityTypesClient) UpdateEntityType(ctx context.Context, in *UpdateEntityTypeRequest, opts ...grpc.CallOption) (*EntityType, error) { + out := new(EntityType) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.EntityTypes/UpdateEntityType", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *entityTypesClient) DeleteEntityType(ctx context.Context, in *DeleteEntityTypeRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) { + out := new(google_protobuf2.Empty) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.EntityTypes/DeleteEntityType", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *entityTypesClient) BatchUpdateEntityTypes(ctx context.Context, in *BatchUpdateEntityTypesRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.EntityTypes/BatchUpdateEntityTypes", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *entityTypesClient) BatchDeleteEntityTypes(ctx context.Context, in *BatchDeleteEntityTypesRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.EntityTypes/BatchDeleteEntityTypes", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *entityTypesClient) BatchCreateEntities(ctx context.Context, in *BatchCreateEntitiesRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.EntityTypes/BatchCreateEntities", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *entityTypesClient) BatchUpdateEntities(ctx context.Context, in *BatchUpdateEntitiesRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.EntityTypes/BatchUpdateEntities", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *entityTypesClient) BatchDeleteEntities(ctx context.Context, in *BatchDeleteEntitiesRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.EntityTypes/BatchDeleteEntities", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for EntityTypes service + +type EntityTypesServer interface { + // Returns the list of all entity types in the specified agent. + ListEntityTypes(context.Context, *ListEntityTypesRequest) (*ListEntityTypesResponse, error) + // Retrieves the specified entity type. + GetEntityType(context.Context, *GetEntityTypeRequest) (*EntityType, error) + // Creates an entity type in the specified agent. + CreateEntityType(context.Context, *CreateEntityTypeRequest) (*EntityType, error) + // Updates the specified entity type. + UpdateEntityType(context.Context, *UpdateEntityTypeRequest) (*EntityType, error) + // Deletes the specified entity type. + DeleteEntityType(context.Context, *DeleteEntityTypeRequest) (*google_protobuf2.Empty, error) + // Updates/Creates multiple entity types in the specified agent. + // + // Operation + BatchUpdateEntityTypes(context.Context, *BatchUpdateEntityTypesRequest) (*google_longrunning.Operation, error) + // Deletes entity types in the specified agent. + // + // Operation + BatchDeleteEntityTypes(context.Context, *BatchDeleteEntityTypesRequest) (*google_longrunning.Operation, error) + // Creates multiple new entities in the specified entity type (extends the + // existing collection of entries). + // + // Operation + BatchCreateEntities(context.Context, *BatchCreateEntitiesRequest) (*google_longrunning.Operation, error) + // Updates entities in the specified entity type (replaces the existing + // collection of entries). + // + // Operation + BatchUpdateEntities(context.Context, *BatchUpdateEntitiesRequest) (*google_longrunning.Operation, error) + // Deletes entities in the specified entity type. + // + // Operation + BatchDeleteEntities(context.Context, *BatchDeleteEntitiesRequest) (*google_longrunning.Operation, error) +} + +func RegisterEntityTypesServer(s *grpc.Server, srv EntityTypesServer) { + s.RegisterService(&_EntityTypes_serviceDesc, srv) +} + +func _EntityTypes_ListEntityTypes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListEntityTypesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EntityTypesServer).ListEntityTypes(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.EntityTypes/ListEntityTypes", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EntityTypesServer).ListEntityTypes(ctx, req.(*ListEntityTypesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _EntityTypes_GetEntityType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetEntityTypeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EntityTypesServer).GetEntityType(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.EntityTypes/GetEntityType", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EntityTypesServer).GetEntityType(ctx, req.(*GetEntityTypeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _EntityTypes_CreateEntityType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateEntityTypeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EntityTypesServer).CreateEntityType(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.EntityTypes/CreateEntityType", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EntityTypesServer).CreateEntityType(ctx, req.(*CreateEntityTypeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _EntityTypes_UpdateEntityType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateEntityTypeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EntityTypesServer).UpdateEntityType(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.EntityTypes/UpdateEntityType", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EntityTypesServer).UpdateEntityType(ctx, req.(*UpdateEntityTypeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _EntityTypes_DeleteEntityType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteEntityTypeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EntityTypesServer).DeleteEntityType(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.EntityTypes/DeleteEntityType", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EntityTypesServer).DeleteEntityType(ctx, req.(*DeleteEntityTypeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _EntityTypes_BatchUpdateEntityTypes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BatchUpdateEntityTypesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EntityTypesServer).BatchUpdateEntityTypes(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.EntityTypes/BatchUpdateEntityTypes", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EntityTypesServer).BatchUpdateEntityTypes(ctx, req.(*BatchUpdateEntityTypesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _EntityTypes_BatchDeleteEntityTypes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BatchDeleteEntityTypesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EntityTypesServer).BatchDeleteEntityTypes(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.EntityTypes/BatchDeleteEntityTypes", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EntityTypesServer).BatchDeleteEntityTypes(ctx, req.(*BatchDeleteEntityTypesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _EntityTypes_BatchCreateEntities_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BatchCreateEntitiesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EntityTypesServer).BatchCreateEntities(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.EntityTypes/BatchCreateEntities", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EntityTypesServer).BatchCreateEntities(ctx, req.(*BatchCreateEntitiesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _EntityTypes_BatchUpdateEntities_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BatchUpdateEntitiesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EntityTypesServer).BatchUpdateEntities(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.EntityTypes/BatchUpdateEntities", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EntityTypesServer).BatchUpdateEntities(ctx, req.(*BatchUpdateEntitiesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _EntityTypes_BatchDeleteEntities_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BatchDeleteEntitiesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EntityTypesServer).BatchDeleteEntities(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.EntityTypes/BatchDeleteEntities", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EntityTypesServer).BatchDeleteEntities(ctx, req.(*BatchDeleteEntitiesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _EntityTypes_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.dialogflow.v2beta1.EntityTypes", + HandlerType: (*EntityTypesServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListEntityTypes", + Handler: _EntityTypes_ListEntityTypes_Handler, + }, + { + MethodName: "GetEntityType", + Handler: _EntityTypes_GetEntityType_Handler, + }, + { + MethodName: "CreateEntityType", + Handler: _EntityTypes_CreateEntityType_Handler, + }, + { + MethodName: "UpdateEntityType", + Handler: _EntityTypes_UpdateEntityType_Handler, + }, + { + MethodName: "DeleteEntityType", + Handler: _EntityTypes_DeleteEntityType_Handler, + }, + { + MethodName: "BatchUpdateEntityTypes", + Handler: _EntityTypes_BatchUpdateEntityTypes_Handler, + }, + { + MethodName: "BatchDeleteEntityTypes", + Handler: _EntityTypes_BatchDeleteEntityTypes_Handler, + }, + { + MethodName: "BatchCreateEntities", + Handler: _EntityTypes_BatchCreateEntities_Handler, + }, + { + MethodName: "BatchUpdateEntities", + Handler: _EntityTypes_BatchUpdateEntities_Handler, + }, + { + MethodName: "BatchDeleteEntities", + Handler: _EntityTypes_BatchDeleteEntities_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/dialogflow/v2beta1/entity_type.proto", +} + +func init() { proto.RegisterFile("google/cloud/dialogflow/v2beta1/entity_type.proto", fileDescriptor2) } + +var fileDescriptor2 = []byte{ + // 1236 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0xcf, 0x6e, 0xe3, 0xd4, + 0x17, 0x9e, 0x9b, 0xa6, 0x55, 0x7b, 0xd2, 0x4e, 0xd3, 0xdb, 0x4e, 0x1b, 0xa5, 0xd3, 0x5f, 0xfb, + 0x73, 0x25, 0x54, 0x15, 0x11, 0xcf, 0x64, 0xc4, 0xbf, 0x56, 0x05, 0xb5, 0x4d, 0x3a, 0x13, 0xa6, + 0x4d, 0x22, 0xb7, 0x1d, 0x01, 0x1b, 0xcb, 0x4d, 0x6e, 0x83, 0xa9, 0x73, 0xaf, 0x89, 0xed, 0x61, + 0x32, 0x68, 0x58, 0xf0, 0x06, 0x88, 0x1d, 0x62, 0x85, 0xd8, 0x00, 0xe2, 0x0d, 0x10, 0x1b, 0x56, + 0xb0, 0x42, 0xe2, 0x15, 0x10, 0xcf, 0x80, 0xc4, 0x06, 0xf9, 0xda, 0x8e, 0x1d, 0xc7, 0xc1, 0x36, + 0xcc, 0x8c, 0xd8, 0xe5, 0xfe, 0x39, 0xe7, 0x7c, 0xdf, 0x39, 0xe7, 0xde, 0xef, 0x3a, 0x70, 0xbb, + 0xc3, 0x58, 0x47, 0x23, 0x62, 0x4b, 0x63, 0x56, 0x5b, 0x6c, 0xab, 0x8a, 0xc6, 0x3a, 0x97, 0x1a, + 0xfb, 0x50, 0x7c, 0x58, 0xbe, 0x20, 0xa6, 0x72, 0x5b, 0x24, 0xd4, 0x54, 0xcd, 0xbe, 0x6c, 0xf6, + 0x75, 0x52, 0xd2, 0x7b, 0xcc, 0x64, 0x78, 0xdd, 0x31, 0x29, 0x71, 0x93, 0x92, 0x6f, 0x52, 0x72, + 0x4d, 0x8a, 0x37, 0x5d, 0x9f, 0x8a, 0xae, 0x8a, 0x0a, 0xa5, 0xcc, 0x54, 0x4c, 0x95, 0x51, 0xc3, + 0x31, 0x2f, 0x6e, 0xba, 0xab, 0x1a, 0xa3, 0x9d, 0x9e, 0x45, 0xa9, 0x4a, 0x3b, 0x22, 0xd3, 0x49, + 0x6f, 0x68, 0xd3, 0xaa, 0xbb, 0x89, 0x8f, 0x2e, 0xac, 0x4b, 0x91, 0x74, 0x75, 0xb3, 0xef, 0x2e, + 0x6e, 0x84, 0x17, 0x2f, 0x55, 0xa2, 0xb5, 0xe5, 0xae, 0x62, 0x5c, 0xb9, 0x3b, 0x6e, 0x86, 0x77, + 0x18, 0x66, 0xcf, 0x6a, 0x99, 0xce, 0xaa, 0xf0, 0x79, 0x16, 0xa0, 0xca, 0x69, 0x9d, 0xf5, 0x75, + 0x82, 0x31, 0x64, 0xa9, 0xd2, 0x25, 0x05, 0xb4, 0x81, 0xb6, 0x66, 0x24, 0xfe, 0x1b, 0xff, 0x1f, + 0x66, 0xdb, 0xaa, 0xa1, 0x6b, 0x4a, 0x5f, 0xe6, 0x6b, 0x19, 0xbe, 0x96, 0x73, 0xe7, 0xea, 0xf6, + 0x96, 0x0a, 0x64, 0xaf, 0x54, 0xda, 0x2e, 0x4c, 0x6c, 0xa0, 0xad, 0xeb, 0xe5, 0x5b, 0xa5, 0x98, + 0xac, 0x94, 0xfc, 0x88, 0xa5, 0xfb, 0x2a, 0x6d, 0x4b, 0xdc, 0x1a, 0x77, 0x61, 0x51, 0xb1, 0x4c, + 0x26, 0x93, 0x47, 0xba, 0x42, 0x0d, 0x95, 0x51, 0xb9, 0xcb, 0xda, 0xa4, 0x90, 0xe5, 0x4e, 0xf7, + 0xd2, 0x38, 0xdd, 0xb7, 0x4c, 0x56, 0xf5, 0xbc, 0x9c, 0xb0, 0x36, 0x91, 0x16, 0x94, 0xf0, 0x14, + 0xae, 0xc3, 0x34, 0x2f, 0xa8, 0x4a, 0x8c, 0xc2, 0xd4, 0xc6, 0xc4, 0x56, 0xae, 0x5c, 0x4e, 0x13, + 0xc3, 0xf9, 0x29, 0x0d, 0x7c, 0x14, 0x77, 0x60, 0xca, 0x99, 0xc3, 0x4b, 0x30, 0xf9, 0x50, 0xd1, + 0x2c, 0x2f, 0x8d, 0xce, 0x00, 0x17, 0x61, 0xda, 0xe8, 0x53, 0x46, 0xfb, 0x5d, 0xa3, 0x90, 0xd9, + 0x98, 0xd8, 0x9a, 0x91, 0x06, 0x63, 0xe1, 0x75, 0xc8, 0xda, 0x89, 0xc0, 0x4b, 0x90, 0xbf, 0x5f, + 0xab, 0x57, 0xe4, 0xf3, 0xfa, 0x69, 0xb3, 0x7a, 0x58, 0x3b, 0xaa, 0x55, 0x2b, 0xf9, 0x6b, 0x78, + 0x16, 0xa6, 0xf9, 0xec, 0xc9, 0x7e, 0x33, 0x8f, 0xf0, 0x1c, 0xcc, 0xf0, 0xd1, 0x71, 0xed, 0xf4, + 0x2c, 0x9f, 0x11, 0xde, 0x81, 0x85, 0x11, 0xba, 0x78, 0x13, 0xd6, 0xf7, 0xcf, 0xcf, 0x1a, 0x72, + 0xf5, 0xed, 0xe6, 0x7e, 0xfd, 0xb4, 0xd6, 0xa8, 0xcb, 0x27, 0x8d, 0x4a, 0x35, 0xe4, 0x76, 0x1d, + 0x56, 0xa3, 0x36, 0x55, 0xaa, 0x47, 0xfb, 0xe7, 0xc7, 0x67, 0x79, 0x24, 0x7c, 0x8a, 0x60, 0xf9, + 0x58, 0x35, 0x4c, 0x9f, 0xb5, 0x21, 0x91, 0x0f, 0x2c, 0x62, 0x98, 0x78, 0x19, 0xa6, 0x74, 0xa5, + 0x47, 0xa8, 0xe9, 0x72, 0x74, 0x47, 0x78, 0x13, 0xe6, 0x34, 0x85, 0x76, 0x2c, 0xa5, 0x43, 0xe4, + 0x96, 0x5d, 0x3d, 0xa7, 0x5b, 0x66, 0xbd, 0xc9, 0x43, 0x1b, 0xdd, 0x2a, 0xcc, 0xe8, 0xf6, 0x06, + 0x43, 0x7d, 0x4c, 0x78, 0xcf, 0x4c, 0x4a, 0xd3, 0xf6, 0xc4, 0xa9, 0xfa, 0x98, 0xe0, 0x35, 0x00, + 0xbe, 0x68, 0xb2, 0x2b, 0x42, 0x79, 0xf1, 0x67, 0x24, 0xbe, 0xfd, 0xcc, 0x9e, 0xb0, 0x31, 0xad, + 0x8c, 0x60, 0x32, 0x74, 0x46, 0x0d, 0xbb, 0xa2, 0xb3, 0x81, 0x23, 0x6a, 0x14, 0x10, 0xaf, 0xea, + 0x8b, 0x29, 0xaa, 0x2a, 0xe5, 0x88, 0xef, 0x17, 0xbf, 0x00, 0xf3, 0x94, 0x3c, 0x32, 0xe5, 0x00, + 0x1e, 0x87, 0xce, 0x9c, 0x3d, 0xdd, 0x1c, 0x60, 0x6a, 0xc0, 0xd2, 0x5d, 0x12, 0x40, 0xe4, 0x25, + 0x29, 0xea, 0x34, 0x25, 0x49, 0x90, 0xf0, 0x15, 0x82, 0x95, 0xc3, 0x1e, 0x51, 0x4c, 0x32, 0xea, + 0x74, 0x5c, 0xe6, 0x8f, 0x21, 0x17, 0x20, 0xcf, 0xdd, 0xa6, 0xe4, 0x0e, 0x3e, 0xf7, 0x51, 0x98, + 0x13, 0x11, 0x30, 0x7f, 0x42, 0xb0, 0x72, 0xae, 0xb7, 0x23, 0x61, 0x86, 0xe0, 0xa0, 0xa7, 0x0c, + 0x27, 0xaa, 0xad, 0x76, 0x21, 0x67, 0x71, 0x34, 0xfc, 0xfa, 0xe3, 0x88, 0x73, 0xe5, 0xa2, 0x17, + 0xd2, 0xbb, 0xff, 0x4a, 0x47, 0xf6, 0x0d, 0x79, 0xa2, 0x18, 0x57, 0x12, 0x38, 0xdb, 0xed, 0xdf, + 0xc2, 0x4b, 0xb0, 0x52, 0x21, 0x1a, 0x89, 0xa2, 0x12, 0x51, 0x46, 0xe1, 0x97, 0x0c, 0xac, 0x1d, + 0x28, 0x66, 0xeb, 0xbd, 0x30, 0xff, 0xd8, 0x13, 0x72, 0x07, 0x6e, 0x04, 0x12, 0x23, 0x5f, 0xd8, + 0x4e, 0x64, 0xab, 0xa7, 0x3a, 0x94, 0xee, 0x5d, 0x93, 0xb0, 0xcf, 0xdb, 0x89, 0xd0, 0x53, 0xf1, + 0x15, 0x14, 0x46, 0x8d, 0x54, 0xaa, 0xa9, 0x94, 0xb8, 0x3c, 0xd3, 0x5c, 0xba, 0xdc, 0xed, 0xbd, + 0x6b, 0xd2, 0x8d, 0x50, 0xa4, 0x1a, 0x77, 0x38, 0x9a, 0xec, 0x6c, 0x7c, 0xb2, 0x27, 0xd3, 0x24, + 0xfb, 0x60, 0x11, 0x16, 0x46, 0xe8, 0x08, 0x3a, 0xfc, 0x6f, 0x5c, 0x46, 0x9f, 0xcd, 0xf9, 0x16, + 0x5a, 0x6e, 0x0d, 0xc3, 0x85, 0x8f, 0xad, 0xe1, 0xf6, 0x30, 0x7e, 0xbb, 0x23, 0xbc, 0x3b, 0x7d, + 0xde, 0x0f, 0x60, 0x4b, 0xa3, 0x21, 0x7c, 0x8d, 0xa0, 0xc8, 0xa3, 0x04, 0x0e, 0xb4, 0x1a, 0x1f, + 0x22, 0xa8, 0x4e, 0x99, 0x7f, 0xaf, 0x4e, 0xc9, 0x0e, 0xf4, 0xef, 0x1e, 0xd6, 0x40, 0x0d, 0xfe, + 0xa3, 0x58, 0xc3, 0x0d, 0x98, 0x4d, 0x75, 0xda, 0x3f, 0x76, 0x79, 0x06, 0x2a, 0xaf, 0x26, 0x12, + 0x37, 0xb7, 0xec, 0x5c, 0xd1, 0xbd, 0x92, 0xbb, 0x4d, 0xf9, 0x80, 0xcf, 0x25, 0x4b, 0xb4, 0x02, + 0xf3, 0xa1, 0xe3, 0xf8, 0xb4, 0x9b, 0xbb, 0xfc, 0xe7, 0x75, 0xc8, 0x05, 0x5a, 0x1a, 0x7f, 0x8f, + 0x60, 0x3e, 0x24, 0x9c, 0xf8, 0xd5, 0x58, 0xef, 0xd1, 0xf2, 0x5f, 0x7c, 0x2d, 0xbd, 0xa1, 0x73, + 0x86, 0x85, 0x57, 0x3e, 0xf9, 0xf5, 0xb7, 0xcf, 0x32, 0xb7, 0x70, 0x69, 0xf0, 0xaa, 0xfe, 0xc8, + 0xc9, 0xee, 0x9e, 0xde, 0x63, 0xef, 0x93, 0x96, 0x69, 0x88, 0xdb, 0xa2, 0xd2, 0x21, 0xd4, 0x7c, + 0x22, 0x06, 0xb5, 0xf8, 0x5b, 0x04, 0x73, 0x43, 0x22, 0x8b, 0x5f, 0x8e, 0xc5, 0x10, 0x25, 0xca, + 0xc5, 0x34, 0x19, 0x8d, 0x42, 0x6b, 0x1f, 0xf6, 0x11, 0xac, 0x41, 0xa8, 0xe2, 0xf6, 0x13, 0xfc, + 0x03, 0x82, 0x7c, 0x58, 0xc0, 0x71, 0x7c, 0xd2, 0xc6, 0x68, 0x7e, 0x3a, 0xcc, 0x87, 0x1c, 0xf3, + 0x9e, 0x90, 0x32, 0xc3, 0x3b, 0x41, 0xbd, 0xc6, 0x3f, 0x23, 0xc8, 0x87, 0x2f, 0xe2, 0x04, 0x04, + 0xc6, 0xbc, 0x06, 0xd2, 0x11, 0x68, 0x70, 0x02, 0xb5, 0xf2, 0x8e, 0x4f, 0x20, 0xf8, 0xe5, 0x95, + 0xa4, 0x00, 0xc3, 0x64, 0xbe, 0x40, 0x90, 0x0f, 0xdf, 0xf1, 0x09, 0xc8, 0x8c, 0x79, 0x0f, 0x14, + 0x97, 0x47, 0x2e, 0x99, 0xaa, 0xfd, 0x45, 0xe6, 0x35, 0xcb, 0xf6, 0x3f, 0x68, 0x96, 0xe5, 0x68, + 0xe5, 0xc3, 0x6f, 0xc4, 0x82, 0xfc, 0xdb, 0x47, 0x48, 0x71, 0xcd, 0xb3, 0x0f, 0x7c, 0x61, 0x96, + 0x1a, 0xde, 0x17, 0xa6, 0x50, 0xe5, 0x88, 0xdf, 0x14, 0x76, 0x52, 0xb6, 0xca, 0x85, 0x1f, 0x74, + 0x07, 0x6d, 0xfb, 0x04, 0x46, 0x84, 0x34, 0x29, 0x81, 0x71, 0x0a, 0xfc, 0x4c, 0x09, 0x38, 0x41, + 0x6d, 0x02, 0x3f, 0x22, 0x58, 0x8c, 0xd0, 0x68, 0xbc, 0x9b, 0x0c, 0x7d, 0xa4, 0xb2, 0xc7, 0x41, + 0x6f, 0x72, 0xe8, 0x6f, 0x09, 0xd5, 0x58, 0xe8, 0xa1, 0x7e, 0x11, 0x3d, 0x9d, 0x74, 0x58, 0x38, + 0xc1, 0x87, 0x58, 0x0c, 0xab, 0x77, 0x52, 0x16, 0x91, 0x9a, 0xff, 0xbc, 0x58, 0xf8, 0xcd, 0x34, + 0x60, 0x31, 0xac, 0xcd, 0x49, 0x59, 0x44, 0x2a, 0xfa, 0xf3, 0x62, 0x31, 0xe8, 0xa8, 0x83, 0xef, + 0x10, 0x6c, 0xb6, 0x58, 0x37, 0x0e, 0xf3, 0x41, 0xe0, 0x19, 0xd0, 0xb4, 0x6f, 0x93, 0x26, 0x7a, + 0xb7, 0xe6, 0xda, 0x74, 0x98, 0xfd, 0x64, 0x28, 0xb1, 0x5e, 0x47, 0xec, 0x10, 0xca, 0xef, 0x1a, + 0xd1, 0x59, 0x52, 0x74, 0xd5, 0x18, 0xfb, 0x2f, 0xd5, 0xae, 0x3f, 0xf5, 0x07, 0x42, 0x5f, 0x66, + 0x32, 0x95, 0xa3, 0x6f, 0x32, 0xeb, 0x77, 0x1d, 0x9f, 0x87, 0x1c, 0x47, 0xc5, 0xc7, 0xf1, 0xc0, + 0x31, 0xba, 0x98, 0xe2, 0xfe, 0xef, 0xfc, 0x15, 0x00, 0x00, 0xff, 0xff, 0x7d, 0x5f, 0x36, 0x09, + 0x04, 0x13, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1/intent.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1/intent.pb.go new file mode 100644 index 0000000..9184b14 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1/intent.pb.go @@ -0,0 +1,2560 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/dialogflow/v2beta1/intent.proto + +package dialogflow + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import google_protobuf2 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf3 "google.golang.org/genproto/protobuf/field_mask" +import google_protobuf4 "github.com/golang/protobuf/ptypes/struct" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Represents the options for views of an intent. +// An intent can be a sizable object. Therefore, we provide a resource view that +// does not return training phrases in the response by default. +type IntentView int32 + +const ( + // Training phrases field is not populated in the response. + IntentView_INTENT_VIEW_UNSPECIFIED IntentView = 0 + // All fields are populated. + IntentView_INTENT_VIEW_FULL IntentView = 1 +) + +var IntentView_name = map[int32]string{ + 0: "INTENT_VIEW_UNSPECIFIED", + 1: "INTENT_VIEW_FULL", +} +var IntentView_value = map[string]int32{ + "INTENT_VIEW_UNSPECIFIED": 0, + "INTENT_VIEW_FULL": 1, +} + +func (x IntentView) String() string { + return proto.EnumName(IntentView_name, int32(x)) +} +func (IntentView) EnumDescriptor() ([]byte, []int) { return fileDescriptor3, []int{0} } + +// Represents the different states that webhooks can be in. +type Intent_WebhookState int32 + +const ( + // Webhook is disabled in the agent and in the intent. + Intent_WEBHOOK_STATE_UNSPECIFIED Intent_WebhookState = 0 + // Webhook is enabled in the agent and in the intent. + Intent_WEBHOOK_STATE_ENABLED Intent_WebhookState = 1 + // Webhook is enabled in the agent and in the intent. Also, each slot + // filling prompt is forwarded to the webhook. + Intent_WEBHOOK_STATE_ENABLED_FOR_SLOT_FILLING Intent_WebhookState = 2 +) + +var Intent_WebhookState_name = map[int32]string{ + 0: "WEBHOOK_STATE_UNSPECIFIED", + 1: "WEBHOOK_STATE_ENABLED", + 2: "WEBHOOK_STATE_ENABLED_FOR_SLOT_FILLING", +} +var Intent_WebhookState_value = map[string]int32{ + "WEBHOOK_STATE_UNSPECIFIED": 0, + "WEBHOOK_STATE_ENABLED": 1, + "WEBHOOK_STATE_ENABLED_FOR_SLOT_FILLING": 2, +} + +func (x Intent_WebhookState) String() string { + return proto.EnumName(Intent_WebhookState_name, int32(x)) +} +func (Intent_WebhookState) EnumDescriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 0} } + +// Represents different types of training phrases. +type Intent_TrainingPhrase_Type int32 + +const ( + // Not specified. This value should never be used. + Intent_TrainingPhrase_TYPE_UNSPECIFIED Intent_TrainingPhrase_Type = 0 + // Examples do not contain @-prefixed entity type names, but example parts + // can be annotated with entity types. + Intent_TrainingPhrase_EXAMPLE Intent_TrainingPhrase_Type = 1 + // Templates are not annotated with entity types, but they can contain + // @-prefixed entity type names as substrings. + Intent_TrainingPhrase_TEMPLATE Intent_TrainingPhrase_Type = 2 +) + +var Intent_TrainingPhrase_Type_name = map[int32]string{ + 0: "TYPE_UNSPECIFIED", + 1: "EXAMPLE", + 2: "TEMPLATE", +} +var Intent_TrainingPhrase_Type_value = map[string]int32{ + "TYPE_UNSPECIFIED": 0, + "EXAMPLE": 1, + "TEMPLATE": 2, +} + +func (x Intent_TrainingPhrase_Type) String() string { + return proto.EnumName(Intent_TrainingPhrase_Type_name, int32(x)) +} +func (Intent_TrainingPhrase_Type) EnumDescriptor() ([]byte, []int) { + return fileDescriptor3, []int{0, 0, 0} +} + +// Represents different platforms that a rich message can be intended for. +type Intent_Message_Platform int32 + +const ( + // Not specified. + Intent_Message_PLATFORM_UNSPECIFIED Intent_Message_Platform = 0 + // Facebook. + Intent_Message_FACEBOOK Intent_Message_Platform = 1 + // Slack. + Intent_Message_SLACK Intent_Message_Platform = 2 + // Telegram. + Intent_Message_TELEGRAM Intent_Message_Platform = 3 + // Kik. + Intent_Message_KIK Intent_Message_Platform = 4 + // Skype. + Intent_Message_SKYPE Intent_Message_Platform = 5 + // Line. + Intent_Message_LINE Intent_Message_Platform = 6 + // Viber. + Intent_Message_VIBER Intent_Message_Platform = 7 + // Actions on Google. + Intent_Message_ACTIONS_ON_GOOGLE Intent_Message_Platform = 8 +) + +var Intent_Message_Platform_name = map[int32]string{ + 0: "PLATFORM_UNSPECIFIED", + 1: "FACEBOOK", + 2: "SLACK", + 3: "TELEGRAM", + 4: "KIK", + 5: "SKYPE", + 6: "LINE", + 7: "VIBER", + 8: "ACTIONS_ON_GOOGLE", +} +var Intent_Message_Platform_value = map[string]int32{ + "PLATFORM_UNSPECIFIED": 0, + "FACEBOOK": 1, + "SLACK": 2, + "TELEGRAM": 3, + "KIK": 4, + "SKYPE": 5, + "LINE": 6, + "VIBER": 7, + "ACTIONS_ON_GOOGLE": 8, +} + +func (x Intent_Message_Platform) String() string { + return proto.EnumName(Intent_Message_Platform_name, int32(x)) +} +func (Intent_Message_Platform) EnumDescriptor() ([]byte, []int) { + return fileDescriptor3, []int{0, 2, 0} +} + +// Represents an intent. +// Intents convert a number of user expressions or patterns into an action. An +// action is an extraction of a user command or sentence semantics. +type Intent struct { + // Required for all methods except `create` (`create` populates the name + // automatically. + // The unique identifier of this intent. + // Format: `projects//agent/intents/`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Required. The name of this intent. + DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // Required. Indicates whether webhooks are enabled for the intent. + WebhookState Intent_WebhookState `protobuf:"varint,6,opt,name=webhook_state,json=webhookState,enum=google.cloud.dialogflow.v2beta1.Intent_WebhookState" json:"webhook_state,omitempty"` + // Optional. The priority of this intent. Higher numbers represent higher + // priorities. Zero or negative numbers mean that the intent is disabled. + Priority int32 `protobuf:"varint,3,opt,name=priority" json:"priority,omitempty"` + // Optional. Indicates whether this is a fallback intent. + IsFallback bool `protobuf:"varint,4,opt,name=is_fallback,json=isFallback" json:"is_fallback,omitempty"` + // Optional. Indicates whether Machine Learning is enabled for the intent. + // Note: If `ml_enabled` setting is set to false, then this intent is not + // taken into account during inference in `ML ONLY` match mode. Also, + // auto-markup in the UI is turned off. + // DEPRECATED! Please use `ml_disabled` field instead. + // NOTE: If neither `ml_enabled` nor `ml_disabled` field is set, then the + // default value is determined as follows: + // - Before April 15th, 2018 the default is: + // ml_enabled = false / ml_disabled = true. + // - After April 15th, 2018 the default is: + // ml_enabled = true / ml_disabled = false. + MlEnabled bool `protobuf:"varint,5,opt,name=ml_enabled,json=mlEnabled" json:"ml_enabled,omitempty"` + // Optional. Indicates whether Machine Learning is disabled for the intent. + // Note: If `ml_disabled` setting is set to true, then this intent is not + // taken into account during inference in `ML ONLY` match mode. Also, + // auto-markup in the UI is turned off. + MlDisabled bool `protobuf:"varint,19,opt,name=ml_disabled,json=mlDisabled" json:"ml_disabled,omitempty"` + // Optional. The list of context names required for this intent to be + // triggered. + // Format: `projects//agent/sessions/-/contexts/`. + InputContextNames []string `protobuf:"bytes,7,rep,name=input_context_names,json=inputContextNames" json:"input_context_names,omitempty"` + // Optional. The collection of event names that trigger the intent. + // If the collection of input contexts is not empty, all of the contexts must + // be present in the active user session for an event to trigger this intent. + Events []string `protobuf:"bytes,8,rep,name=events" json:"events,omitempty"` + // Optional. The collection of examples/templates that the agent is + // trained on. + TrainingPhrases []*Intent_TrainingPhrase `protobuf:"bytes,9,rep,name=training_phrases,json=trainingPhrases" json:"training_phrases,omitempty"` + // Optional. The name of the action associated with the intent. + Action string `protobuf:"bytes,10,opt,name=action" json:"action,omitempty"` + // Optional. The collection of contexts that are activated when the intent + // is matched. Context messages in this collection should not set the + // parameters field. Setting the `lifespan_count` to 0 will reset the context + // when the intent is matched. + // Format: `projects//agent/sessions/-/contexts/`. + OutputContexts []*Context `protobuf:"bytes,11,rep,name=output_contexts,json=outputContexts" json:"output_contexts,omitempty"` + // Optional. Indicates whether to delete all contexts in the current + // session when this intent is matched. + ResetContexts bool `protobuf:"varint,12,opt,name=reset_contexts,json=resetContexts" json:"reset_contexts,omitempty"` + // Optional. The collection of parameters associated with the intent. + Parameters []*Intent_Parameter `protobuf:"bytes,13,rep,name=parameters" json:"parameters,omitempty"` + // Optional. The collection of rich messages corresponding to the + // `Response` field in API.AI console. + Messages []*Intent_Message `protobuf:"bytes,14,rep,name=messages" json:"messages,omitempty"` + // Optional. The list of platforms for which the first response will be + // taken from among the messages assigned to the DEFAULT_PLATFORM. + DefaultResponsePlatforms []Intent_Message_Platform `protobuf:"varint,15,rep,packed,name=default_response_platforms,json=defaultResponsePlatforms,enum=google.cloud.dialogflow.v2beta1.Intent_Message_Platform" json:"default_response_platforms,omitempty"` + // The unique identifier of the root intent in the chain of followup intents. + // It identifies the correct followup intents chain for this intent. + // Format: `projects//agent/intents/`. + RootFollowupIntentName string `protobuf:"bytes,16,opt,name=root_followup_intent_name,json=rootFollowupIntentName" json:"root_followup_intent_name,omitempty"` + // The unique identifier of the parent intent in the chain of followup + // intents. + // It identifies the parent followup intent. + // Format: `projects//agent/intents/`. + ParentFollowupIntentName string `protobuf:"bytes,17,opt,name=parent_followup_intent_name,json=parentFollowupIntentName" json:"parent_followup_intent_name,omitempty"` + // Optional. Collection of information about all followup intents that have + // name of this intent as a root_name. + FollowupIntentInfo []*Intent_FollowupIntentInfo `protobuf:"bytes,18,rep,name=followup_intent_info,json=followupIntentInfo" json:"followup_intent_info,omitempty"` +} + +func (m *Intent) Reset() { *m = Intent{} } +func (m *Intent) String() string { return proto.CompactTextString(m) } +func (*Intent) ProtoMessage() {} +func (*Intent) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0} } + +func (m *Intent) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Intent) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func (m *Intent) GetWebhookState() Intent_WebhookState { + if m != nil { + return m.WebhookState + } + return Intent_WEBHOOK_STATE_UNSPECIFIED +} + +func (m *Intent) GetPriority() int32 { + if m != nil { + return m.Priority + } + return 0 +} + +func (m *Intent) GetIsFallback() bool { + if m != nil { + return m.IsFallback + } + return false +} + +func (m *Intent) GetMlEnabled() bool { + if m != nil { + return m.MlEnabled + } + return false +} + +func (m *Intent) GetMlDisabled() bool { + if m != nil { + return m.MlDisabled + } + return false +} + +func (m *Intent) GetInputContextNames() []string { + if m != nil { + return m.InputContextNames + } + return nil +} + +func (m *Intent) GetEvents() []string { + if m != nil { + return m.Events + } + return nil +} + +func (m *Intent) GetTrainingPhrases() []*Intent_TrainingPhrase { + if m != nil { + return m.TrainingPhrases + } + return nil +} + +func (m *Intent) GetAction() string { + if m != nil { + return m.Action + } + return "" +} + +func (m *Intent) GetOutputContexts() []*Context { + if m != nil { + return m.OutputContexts + } + return nil +} + +func (m *Intent) GetResetContexts() bool { + if m != nil { + return m.ResetContexts + } + return false +} + +func (m *Intent) GetParameters() []*Intent_Parameter { + if m != nil { + return m.Parameters + } + return nil +} + +func (m *Intent) GetMessages() []*Intent_Message { + if m != nil { + return m.Messages + } + return nil +} + +func (m *Intent) GetDefaultResponsePlatforms() []Intent_Message_Platform { + if m != nil { + return m.DefaultResponsePlatforms + } + return nil +} + +func (m *Intent) GetRootFollowupIntentName() string { + if m != nil { + return m.RootFollowupIntentName + } + return "" +} + +func (m *Intent) GetParentFollowupIntentName() string { + if m != nil { + return m.ParentFollowupIntentName + } + return "" +} + +func (m *Intent) GetFollowupIntentInfo() []*Intent_FollowupIntentInfo { + if m != nil { + return m.FollowupIntentInfo + } + return nil +} + +// Represents an example or template that the agent is trained on. +type Intent_TrainingPhrase struct { + // Required. The unique identifier of this training phrase. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Required. The type of the training phrase. + Type Intent_TrainingPhrase_Type `protobuf:"varint,2,opt,name=type,enum=google.cloud.dialogflow.v2beta1.Intent_TrainingPhrase_Type" json:"type,omitempty"` + // Required. The collection of training phrase parts (can be annotated). + // Fields: `entity_type`, `alias` and `user_defined` should be populated + // only for the annotated parts of the training phrase. + Parts []*Intent_TrainingPhrase_Part `protobuf:"bytes,3,rep,name=parts" json:"parts,omitempty"` + // Optional. Indicates how many times this example or template was added to + // the intent. Each time a developer adds an existing sample by editing an + // intent or training, this counter is increased. + TimesAddedCount int32 `protobuf:"varint,4,opt,name=times_added_count,json=timesAddedCount" json:"times_added_count,omitempty"` +} + +func (m *Intent_TrainingPhrase) Reset() { *m = Intent_TrainingPhrase{} } +func (m *Intent_TrainingPhrase) String() string { return proto.CompactTextString(m) } +func (*Intent_TrainingPhrase) ProtoMessage() {} +func (*Intent_TrainingPhrase) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 0} } + +func (m *Intent_TrainingPhrase) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Intent_TrainingPhrase) GetType() Intent_TrainingPhrase_Type { + if m != nil { + return m.Type + } + return Intent_TrainingPhrase_TYPE_UNSPECIFIED +} + +func (m *Intent_TrainingPhrase) GetParts() []*Intent_TrainingPhrase_Part { + if m != nil { + return m.Parts + } + return nil +} + +func (m *Intent_TrainingPhrase) GetTimesAddedCount() int32 { + if m != nil { + return m.TimesAddedCount + } + return 0 +} + +// Represents a part of a training phrase. +type Intent_TrainingPhrase_Part struct { + // Required. The text corresponding to the example or template, + // if there are no annotations. For + // annotated examples, it is the text for one of the example's parts. + Text string `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"` + // Optional. The entity type name prefixed with `@`. This field is + // required for the annotated part of the text and applies only to + // examples. + EntityType string `protobuf:"bytes,2,opt,name=entity_type,json=entityType" json:"entity_type,omitempty"` + // Optional. The parameter name for the value extracted from the + // annotated part of the example. + Alias string `protobuf:"bytes,3,opt,name=alias" json:"alias,omitempty"` + // Optional. Indicates whether the text was manually annotated by the + // developer. + UserDefined bool `protobuf:"varint,4,opt,name=user_defined,json=userDefined" json:"user_defined,omitempty"` +} + +func (m *Intent_TrainingPhrase_Part) Reset() { *m = Intent_TrainingPhrase_Part{} } +func (m *Intent_TrainingPhrase_Part) String() string { return proto.CompactTextString(m) } +func (*Intent_TrainingPhrase_Part) ProtoMessage() {} +func (*Intent_TrainingPhrase_Part) Descriptor() ([]byte, []int) { + return fileDescriptor3, []int{0, 0, 0} +} + +func (m *Intent_TrainingPhrase_Part) GetText() string { + if m != nil { + return m.Text + } + return "" +} + +func (m *Intent_TrainingPhrase_Part) GetEntityType() string { + if m != nil { + return m.EntityType + } + return "" +} + +func (m *Intent_TrainingPhrase_Part) GetAlias() string { + if m != nil { + return m.Alias + } + return "" +} + +func (m *Intent_TrainingPhrase_Part) GetUserDefined() bool { + if m != nil { + return m.UserDefined + } + return false +} + +// Represents intent parameters. +type Intent_Parameter struct { + // The unique identifier of this parameter. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Required. The name of the parameter. + DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // Optional. The definition of the parameter value. It can be: + // - a constant string, + // - a parameter value defined as `$parameter_name`, + // - an original parameter value defined as `$parameter_name.original`, + // - a parameter value from some context defined as + // `#context_name.parameter_name`. + Value string `protobuf:"bytes,3,opt,name=value" json:"value,omitempty"` + // Optional. The default value to use when the `value` yields an empty + // result. + // Default values can be extracted from contexts by using the following + // syntax: `#context_name.parameter_name`. + DefaultValue string `protobuf:"bytes,4,opt,name=default_value,json=defaultValue" json:"default_value,omitempty"` + // Optional. The name of the entity type, prefixed with `@`, that + // describes values of the parameter. If the parameter is + // required, this must be provided. + EntityTypeDisplayName string `protobuf:"bytes,5,opt,name=entity_type_display_name,json=entityTypeDisplayName" json:"entity_type_display_name,omitempty"` + // Optional. Indicates whether the parameter is required. That is, + // whether the intent cannot be completed without collecting the parameter + // value. + Mandatory bool `protobuf:"varint,6,opt,name=mandatory" json:"mandatory,omitempty"` + // Optional. The collection of prompts that the agent can present to the + // user in order to collect value for the parameter. + Prompts []string `protobuf:"bytes,7,rep,name=prompts" json:"prompts,omitempty"` + // Optional. Indicates whether the parameter represents a list of values. + IsList bool `protobuf:"varint,8,opt,name=is_list,json=isList" json:"is_list,omitempty"` +} + +func (m *Intent_Parameter) Reset() { *m = Intent_Parameter{} } +func (m *Intent_Parameter) String() string { return proto.CompactTextString(m) } +func (*Intent_Parameter) ProtoMessage() {} +func (*Intent_Parameter) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 1} } + +func (m *Intent_Parameter) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Intent_Parameter) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func (m *Intent_Parameter) GetValue() string { + if m != nil { + return m.Value + } + return "" +} + +func (m *Intent_Parameter) GetDefaultValue() string { + if m != nil { + return m.DefaultValue + } + return "" +} + +func (m *Intent_Parameter) GetEntityTypeDisplayName() string { + if m != nil { + return m.EntityTypeDisplayName + } + return "" +} + +func (m *Intent_Parameter) GetMandatory() bool { + if m != nil { + return m.Mandatory + } + return false +} + +func (m *Intent_Parameter) GetPrompts() []string { + if m != nil { + return m.Prompts + } + return nil +} + +func (m *Intent_Parameter) GetIsList() bool { + if m != nil { + return m.IsList + } + return false +} + +// Corresponds to the `Response` field in API.AI console. +type Intent_Message struct { + // Required. The rich response message. + // + // Types that are valid to be assigned to Message: + // *Intent_Message_Text_ + // *Intent_Message_Image_ + // *Intent_Message_QuickReplies_ + // *Intent_Message_Card_ + // *Intent_Message_Payload + // *Intent_Message_SimpleResponses_ + // *Intent_Message_BasicCard_ + // *Intent_Message_Suggestions_ + // *Intent_Message_LinkOutSuggestion_ + // *Intent_Message_ListSelect_ + // *Intent_Message_CarouselSelect_ + Message isIntent_Message_Message `protobuf_oneof:"message"` + // Optional. The platform that this message is intended for. + Platform Intent_Message_Platform `protobuf:"varint,6,opt,name=platform,enum=google.cloud.dialogflow.v2beta1.Intent_Message_Platform" json:"platform,omitempty"` +} + +func (m *Intent_Message) Reset() { *m = Intent_Message{} } +func (m *Intent_Message) String() string { return proto.CompactTextString(m) } +func (*Intent_Message) ProtoMessage() {} +func (*Intent_Message) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 2} } + +type isIntent_Message_Message interface { + isIntent_Message_Message() +} + +type Intent_Message_Text_ struct { + Text *Intent_Message_Text `protobuf:"bytes,1,opt,name=text,oneof"` +} +type Intent_Message_Image_ struct { + Image *Intent_Message_Image `protobuf:"bytes,2,opt,name=image,oneof"` +} +type Intent_Message_QuickReplies_ struct { + QuickReplies *Intent_Message_QuickReplies `protobuf:"bytes,3,opt,name=quick_replies,json=quickReplies,oneof"` +} +type Intent_Message_Card_ struct { + Card *Intent_Message_Card `protobuf:"bytes,4,opt,name=card,oneof"` +} +type Intent_Message_Payload struct { + Payload *google_protobuf4.Struct `protobuf:"bytes,5,opt,name=payload,oneof"` +} +type Intent_Message_SimpleResponses_ struct { + SimpleResponses *Intent_Message_SimpleResponses `protobuf:"bytes,7,opt,name=simple_responses,json=simpleResponses,oneof"` +} +type Intent_Message_BasicCard_ struct { + BasicCard *Intent_Message_BasicCard `protobuf:"bytes,8,opt,name=basic_card,json=basicCard,oneof"` +} +type Intent_Message_Suggestions_ struct { + Suggestions *Intent_Message_Suggestions `protobuf:"bytes,9,opt,name=suggestions,oneof"` +} +type Intent_Message_LinkOutSuggestion_ struct { + LinkOutSuggestion *Intent_Message_LinkOutSuggestion `protobuf:"bytes,10,opt,name=link_out_suggestion,json=linkOutSuggestion,oneof"` +} +type Intent_Message_ListSelect_ struct { + ListSelect *Intent_Message_ListSelect `protobuf:"bytes,11,opt,name=list_select,json=listSelect,oneof"` +} +type Intent_Message_CarouselSelect_ struct { + CarouselSelect *Intent_Message_CarouselSelect `protobuf:"bytes,12,opt,name=carousel_select,json=carouselSelect,oneof"` +} + +func (*Intent_Message_Text_) isIntent_Message_Message() {} +func (*Intent_Message_Image_) isIntent_Message_Message() {} +func (*Intent_Message_QuickReplies_) isIntent_Message_Message() {} +func (*Intent_Message_Card_) isIntent_Message_Message() {} +func (*Intent_Message_Payload) isIntent_Message_Message() {} +func (*Intent_Message_SimpleResponses_) isIntent_Message_Message() {} +func (*Intent_Message_BasicCard_) isIntent_Message_Message() {} +func (*Intent_Message_Suggestions_) isIntent_Message_Message() {} +func (*Intent_Message_LinkOutSuggestion_) isIntent_Message_Message() {} +func (*Intent_Message_ListSelect_) isIntent_Message_Message() {} +func (*Intent_Message_CarouselSelect_) isIntent_Message_Message() {} + +func (m *Intent_Message) GetMessage() isIntent_Message_Message { + if m != nil { + return m.Message + } + return nil +} + +func (m *Intent_Message) GetText() *Intent_Message_Text { + if x, ok := m.GetMessage().(*Intent_Message_Text_); ok { + return x.Text + } + return nil +} + +func (m *Intent_Message) GetImage() *Intent_Message_Image { + if x, ok := m.GetMessage().(*Intent_Message_Image_); ok { + return x.Image + } + return nil +} + +func (m *Intent_Message) GetQuickReplies() *Intent_Message_QuickReplies { + if x, ok := m.GetMessage().(*Intent_Message_QuickReplies_); ok { + return x.QuickReplies + } + return nil +} + +func (m *Intent_Message) GetCard() *Intent_Message_Card { + if x, ok := m.GetMessage().(*Intent_Message_Card_); ok { + return x.Card + } + return nil +} + +func (m *Intent_Message) GetPayload() *google_protobuf4.Struct { + if x, ok := m.GetMessage().(*Intent_Message_Payload); ok { + return x.Payload + } + return nil +} + +func (m *Intent_Message) GetSimpleResponses() *Intent_Message_SimpleResponses { + if x, ok := m.GetMessage().(*Intent_Message_SimpleResponses_); ok { + return x.SimpleResponses + } + return nil +} + +func (m *Intent_Message) GetBasicCard() *Intent_Message_BasicCard { + if x, ok := m.GetMessage().(*Intent_Message_BasicCard_); ok { + return x.BasicCard + } + return nil +} + +func (m *Intent_Message) GetSuggestions() *Intent_Message_Suggestions { + if x, ok := m.GetMessage().(*Intent_Message_Suggestions_); ok { + return x.Suggestions + } + return nil +} + +func (m *Intent_Message) GetLinkOutSuggestion() *Intent_Message_LinkOutSuggestion { + if x, ok := m.GetMessage().(*Intent_Message_LinkOutSuggestion_); ok { + return x.LinkOutSuggestion + } + return nil +} + +func (m *Intent_Message) GetListSelect() *Intent_Message_ListSelect { + if x, ok := m.GetMessage().(*Intent_Message_ListSelect_); ok { + return x.ListSelect + } + return nil +} + +func (m *Intent_Message) GetCarouselSelect() *Intent_Message_CarouselSelect { + if x, ok := m.GetMessage().(*Intent_Message_CarouselSelect_); ok { + return x.CarouselSelect + } + return nil +} + +func (m *Intent_Message) GetPlatform() Intent_Message_Platform { + if m != nil { + return m.Platform + } + return Intent_Message_PLATFORM_UNSPECIFIED +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Intent_Message) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Intent_Message_OneofMarshaler, _Intent_Message_OneofUnmarshaler, _Intent_Message_OneofSizer, []interface{}{ + (*Intent_Message_Text_)(nil), + (*Intent_Message_Image_)(nil), + (*Intent_Message_QuickReplies_)(nil), + (*Intent_Message_Card_)(nil), + (*Intent_Message_Payload)(nil), + (*Intent_Message_SimpleResponses_)(nil), + (*Intent_Message_BasicCard_)(nil), + (*Intent_Message_Suggestions_)(nil), + (*Intent_Message_LinkOutSuggestion_)(nil), + (*Intent_Message_ListSelect_)(nil), + (*Intent_Message_CarouselSelect_)(nil), + } +} + +func _Intent_Message_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Intent_Message) + // message + switch x := m.Message.(type) { + case *Intent_Message_Text_: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Text); err != nil { + return err + } + case *Intent_Message_Image_: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Image); err != nil { + return err + } + case *Intent_Message_QuickReplies_: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.QuickReplies); err != nil { + return err + } + case *Intent_Message_Card_: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Card); err != nil { + return err + } + case *Intent_Message_Payload: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Payload); err != nil { + return err + } + case *Intent_Message_SimpleResponses_: + b.EncodeVarint(7<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.SimpleResponses); err != nil { + return err + } + case *Intent_Message_BasicCard_: + b.EncodeVarint(8<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.BasicCard); err != nil { + return err + } + case *Intent_Message_Suggestions_: + b.EncodeVarint(9<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Suggestions); err != nil { + return err + } + case *Intent_Message_LinkOutSuggestion_: + b.EncodeVarint(10<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.LinkOutSuggestion); err != nil { + return err + } + case *Intent_Message_ListSelect_: + b.EncodeVarint(11<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ListSelect); err != nil { + return err + } + case *Intent_Message_CarouselSelect_: + b.EncodeVarint(12<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.CarouselSelect); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Intent_Message.Message has unexpected type %T", x) + } + return nil +} + +func _Intent_Message_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Intent_Message) + switch tag { + case 1: // message.text + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Intent_Message_Text) + err := b.DecodeMessage(msg) + m.Message = &Intent_Message_Text_{msg} + return true, err + case 2: // message.image + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Intent_Message_Image) + err := b.DecodeMessage(msg) + m.Message = &Intent_Message_Image_{msg} + return true, err + case 3: // message.quick_replies + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Intent_Message_QuickReplies) + err := b.DecodeMessage(msg) + m.Message = &Intent_Message_QuickReplies_{msg} + return true, err + case 4: // message.card + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Intent_Message_Card) + err := b.DecodeMessage(msg) + m.Message = &Intent_Message_Card_{msg} + return true, err + case 5: // message.payload + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf4.Struct) + err := b.DecodeMessage(msg) + m.Message = &Intent_Message_Payload{msg} + return true, err + case 7: // message.simple_responses + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Intent_Message_SimpleResponses) + err := b.DecodeMessage(msg) + m.Message = &Intent_Message_SimpleResponses_{msg} + return true, err + case 8: // message.basic_card + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Intent_Message_BasicCard) + err := b.DecodeMessage(msg) + m.Message = &Intent_Message_BasicCard_{msg} + return true, err + case 9: // message.suggestions + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Intent_Message_Suggestions) + err := b.DecodeMessage(msg) + m.Message = &Intent_Message_Suggestions_{msg} + return true, err + case 10: // message.link_out_suggestion + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Intent_Message_LinkOutSuggestion) + err := b.DecodeMessage(msg) + m.Message = &Intent_Message_LinkOutSuggestion_{msg} + return true, err + case 11: // message.list_select + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Intent_Message_ListSelect) + err := b.DecodeMessage(msg) + m.Message = &Intent_Message_ListSelect_{msg} + return true, err + case 12: // message.carousel_select + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Intent_Message_CarouselSelect) + err := b.DecodeMessage(msg) + m.Message = &Intent_Message_CarouselSelect_{msg} + return true, err + default: + return false, nil + } +} + +func _Intent_Message_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Intent_Message) + // message + switch x := m.Message.(type) { + case *Intent_Message_Text_: + s := proto.Size(x.Text) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Intent_Message_Image_: + s := proto.Size(x.Image) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Intent_Message_QuickReplies_: + s := proto.Size(x.QuickReplies) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Intent_Message_Card_: + s := proto.Size(x.Card) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Intent_Message_Payload: + s := proto.Size(x.Payload) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Intent_Message_SimpleResponses_: + s := proto.Size(x.SimpleResponses) + n += proto.SizeVarint(7<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Intent_Message_BasicCard_: + s := proto.Size(x.BasicCard) + n += proto.SizeVarint(8<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Intent_Message_Suggestions_: + s := proto.Size(x.Suggestions) + n += proto.SizeVarint(9<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Intent_Message_LinkOutSuggestion_: + s := proto.Size(x.LinkOutSuggestion) + n += proto.SizeVarint(10<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Intent_Message_ListSelect_: + s := proto.Size(x.ListSelect) + n += proto.SizeVarint(11<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Intent_Message_CarouselSelect_: + s := proto.Size(x.CarouselSelect) + n += proto.SizeVarint(12<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The text response message. +type Intent_Message_Text struct { + // Optional. The collection of the agent's responses. + Text []string `protobuf:"bytes,1,rep,name=text" json:"text,omitempty"` +} + +func (m *Intent_Message_Text) Reset() { *m = Intent_Message_Text{} } +func (m *Intent_Message_Text) String() string { return proto.CompactTextString(m) } +func (*Intent_Message_Text) ProtoMessage() {} +func (*Intent_Message_Text) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 2, 0} } + +func (m *Intent_Message_Text) GetText() []string { + if m != nil { + return m.Text + } + return nil +} + +// The image response message. +type Intent_Message_Image struct { + // Optional. The public URI to an image file. + ImageUri string `protobuf:"bytes,1,opt,name=image_uri,json=imageUri" json:"image_uri,omitempty"` + // Optional. A text description of the image to be used for accessibility, + // e.g., screen readers. + AccessibilityText string `protobuf:"bytes,2,opt,name=accessibility_text,json=accessibilityText" json:"accessibility_text,omitempty"` +} + +func (m *Intent_Message_Image) Reset() { *m = Intent_Message_Image{} } +func (m *Intent_Message_Image) String() string { return proto.CompactTextString(m) } +func (*Intent_Message_Image) ProtoMessage() {} +func (*Intent_Message_Image) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 2, 1} } + +func (m *Intent_Message_Image) GetImageUri() string { + if m != nil { + return m.ImageUri + } + return "" +} + +func (m *Intent_Message_Image) GetAccessibilityText() string { + if m != nil { + return m.AccessibilityText + } + return "" +} + +// The quick replies response message. +type Intent_Message_QuickReplies struct { + // Optional. The title of the collection of quick replies. + Title string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` + // Optional. The collection of quick replies. + QuickReplies []string `protobuf:"bytes,2,rep,name=quick_replies,json=quickReplies" json:"quick_replies,omitempty"` +} + +func (m *Intent_Message_QuickReplies) Reset() { *m = Intent_Message_QuickReplies{} } +func (m *Intent_Message_QuickReplies) String() string { return proto.CompactTextString(m) } +func (*Intent_Message_QuickReplies) ProtoMessage() {} +func (*Intent_Message_QuickReplies) Descriptor() ([]byte, []int) { + return fileDescriptor3, []int{0, 2, 2} +} + +func (m *Intent_Message_QuickReplies) GetTitle() string { + if m != nil { + return m.Title + } + return "" +} + +func (m *Intent_Message_QuickReplies) GetQuickReplies() []string { + if m != nil { + return m.QuickReplies + } + return nil +} + +// The card response message. +type Intent_Message_Card struct { + // Optional. The title of the card. + Title string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` + // Optional. The subtitle of the card. + Subtitle string `protobuf:"bytes,2,opt,name=subtitle" json:"subtitle,omitempty"` + // Optional. The public URI to an image file for the card. + ImageUri string `protobuf:"bytes,3,opt,name=image_uri,json=imageUri" json:"image_uri,omitempty"` + // Optional. The collection of card buttons. + Buttons []*Intent_Message_Card_Button `protobuf:"bytes,4,rep,name=buttons" json:"buttons,omitempty"` +} + +func (m *Intent_Message_Card) Reset() { *m = Intent_Message_Card{} } +func (m *Intent_Message_Card) String() string { return proto.CompactTextString(m) } +func (*Intent_Message_Card) ProtoMessage() {} +func (*Intent_Message_Card) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 2, 3} } + +func (m *Intent_Message_Card) GetTitle() string { + if m != nil { + return m.Title + } + return "" +} + +func (m *Intent_Message_Card) GetSubtitle() string { + if m != nil { + return m.Subtitle + } + return "" +} + +func (m *Intent_Message_Card) GetImageUri() string { + if m != nil { + return m.ImageUri + } + return "" +} + +func (m *Intent_Message_Card) GetButtons() []*Intent_Message_Card_Button { + if m != nil { + return m.Buttons + } + return nil +} + +// Optional. Contains information about a button. +type Intent_Message_Card_Button struct { + // Optional. The text to show on the button. + Text string `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"` + // Optional. The text to send back to the Dialogflow API or a URI to + // open. + Postback string `protobuf:"bytes,2,opt,name=postback" json:"postback,omitempty"` +} + +func (m *Intent_Message_Card_Button) Reset() { *m = Intent_Message_Card_Button{} } +func (m *Intent_Message_Card_Button) String() string { return proto.CompactTextString(m) } +func (*Intent_Message_Card_Button) ProtoMessage() {} +func (*Intent_Message_Card_Button) Descriptor() ([]byte, []int) { + return fileDescriptor3, []int{0, 2, 3, 0} +} + +func (m *Intent_Message_Card_Button) GetText() string { + if m != nil { + return m.Text + } + return "" +} + +func (m *Intent_Message_Card_Button) GetPostback() string { + if m != nil { + return m.Postback + } + return "" +} + +// The simple response message containing speech or text. +type Intent_Message_SimpleResponse struct { + // One of text_to_speech or ssml must be provided. The plain text of the + // speech output. Mutually exclusive with ssml. + TextToSpeech string `protobuf:"bytes,1,opt,name=text_to_speech,json=textToSpeech" json:"text_to_speech,omitempty"` + // One of text_to_speech or ssml must be provided. Structured spoken + // response to the user in the SSML format. Mutually exclusive with + // text_to_speech. + Ssml string `protobuf:"bytes,2,opt,name=ssml" json:"ssml,omitempty"` + // Optional. The text to display. + DisplayText string `protobuf:"bytes,3,opt,name=display_text,json=displayText" json:"display_text,omitempty"` +} + +func (m *Intent_Message_SimpleResponse) Reset() { *m = Intent_Message_SimpleResponse{} } +func (m *Intent_Message_SimpleResponse) String() string { return proto.CompactTextString(m) } +func (*Intent_Message_SimpleResponse) ProtoMessage() {} +func (*Intent_Message_SimpleResponse) Descriptor() ([]byte, []int) { + return fileDescriptor3, []int{0, 2, 4} +} + +func (m *Intent_Message_SimpleResponse) GetTextToSpeech() string { + if m != nil { + return m.TextToSpeech + } + return "" +} + +func (m *Intent_Message_SimpleResponse) GetSsml() string { + if m != nil { + return m.Ssml + } + return "" +} + +func (m *Intent_Message_SimpleResponse) GetDisplayText() string { + if m != nil { + return m.DisplayText + } + return "" +} + +// The collection of simple response candidates. +// This message in `QueryResult.fulfillment_messages` and +// `WebhookResponse.fulfillment_messages` should contain only one +// `SimpleResponse`. +type Intent_Message_SimpleResponses struct { + // Required. The list of simple responses. + SimpleResponses []*Intent_Message_SimpleResponse `protobuf:"bytes,1,rep,name=simple_responses,json=simpleResponses" json:"simple_responses,omitempty"` +} + +func (m *Intent_Message_SimpleResponses) Reset() { *m = Intent_Message_SimpleResponses{} } +func (m *Intent_Message_SimpleResponses) String() string { return proto.CompactTextString(m) } +func (*Intent_Message_SimpleResponses) ProtoMessage() {} +func (*Intent_Message_SimpleResponses) Descriptor() ([]byte, []int) { + return fileDescriptor3, []int{0, 2, 5} +} + +func (m *Intent_Message_SimpleResponses) GetSimpleResponses() []*Intent_Message_SimpleResponse { + if m != nil { + return m.SimpleResponses + } + return nil +} + +// The basic card message. Useful for displaying information. +type Intent_Message_BasicCard struct { + // Optional. The title of the card. + Title string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` + // Optional. The subtitle of the card. + Subtitle string `protobuf:"bytes,2,opt,name=subtitle" json:"subtitle,omitempty"` + // Required, unless image is present. The body text of the card. + FormattedText string `protobuf:"bytes,3,opt,name=formatted_text,json=formattedText" json:"formatted_text,omitempty"` + // Optional. The image for the card. + Image *Intent_Message_Image `protobuf:"bytes,4,opt,name=image" json:"image,omitempty"` + // Optional. The collection of card buttons. + Buttons []*Intent_Message_BasicCard_Button `protobuf:"bytes,5,rep,name=buttons" json:"buttons,omitempty"` +} + +func (m *Intent_Message_BasicCard) Reset() { *m = Intent_Message_BasicCard{} } +func (m *Intent_Message_BasicCard) String() string { return proto.CompactTextString(m) } +func (*Intent_Message_BasicCard) ProtoMessage() {} +func (*Intent_Message_BasicCard) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 2, 6} } + +func (m *Intent_Message_BasicCard) GetTitle() string { + if m != nil { + return m.Title + } + return "" +} + +func (m *Intent_Message_BasicCard) GetSubtitle() string { + if m != nil { + return m.Subtitle + } + return "" +} + +func (m *Intent_Message_BasicCard) GetFormattedText() string { + if m != nil { + return m.FormattedText + } + return "" +} + +func (m *Intent_Message_BasicCard) GetImage() *Intent_Message_Image { + if m != nil { + return m.Image + } + return nil +} + +func (m *Intent_Message_BasicCard) GetButtons() []*Intent_Message_BasicCard_Button { + if m != nil { + return m.Buttons + } + return nil +} + +// The button object that appears at the bottom of a card. +type Intent_Message_BasicCard_Button struct { + // Required. The title of the button. + Title string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` + // Required. Action to take when a user taps on the button. + OpenUriAction *Intent_Message_BasicCard_Button_OpenUriAction `protobuf:"bytes,2,opt,name=open_uri_action,json=openUriAction" json:"open_uri_action,omitempty"` +} + +func (m *Intent_Message_BasicCard_Button) Reset() { *m = Intent_Message_BasicCard_Button{} } +func (m *Intent_Message_BasicCard_Button) String() string { return proto.CompactTextString(m) } +func (*Intent_Message_BasicCard_Button) ProtoMessage() {} +func (*Intent_Message_BasicCard_Button) Descriptor() ([]byte, []int) { + return fileDescriptor3, []int{0, 2, 6, 0} +} + +func (m *Intent_Message_BasicCard_Button) GetTitle() string { + if m != nil { + return m.Title + } + return "" +} + +func (m *Intent_Message_BasicCard_Button) GetOpenUriAction() *Intent_Message_BasicCard_Button_OpenUriAction { + if m != nil { + return m.OpenUriAction + } + return nil +} + +// Opens the given URI. +type Intent_Message_BasicCard_Button_OpenUriAction struct { + // Required. The HTTP or HTTPS scheme URI. + Uri string `protobuf:"bytes,1,opt,name=uri" json:"uri,omitempty"` +} + +func (m *Intent_Message_BasicCard_Button_OpenUriAction) Reset() { + *m = Intent_Message_BasicCard_Button_OpenUriAction{} +} +func (m *Intent_Message_BasicCard_Button_OpenUriAction) String() string { + return proto.CompactTextString(m) +} +func (*Intent_Message_BasicCard_Button_OpenUriAction) ProtoMessage() {} +func (*Intent_Message_BasicCard_Button_OpenUriAction) Descriptor() ([]byte, []int) { + return fileDescriptor3, []int{0, 2, 6, 0, 0} +} + +func (m *Intent_Message_BasicCard_Button_OpenUriAction) GetUri() string { + if m != nil { + return m.Uri + } + return "" +} + +// The suggestion chip message that the user can tap to quickly post a reply +// to the conversation. +type Intent_Message_Suggestion struct { + // Required. The text shown the in the suggestion chip. + Title string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` +} + +func (m *Intent_Message_Suggestion) Reset() { *m = Intent_Message_Suggestion{} } +func (m *Intent_Message_Suggestion) String() string { return proto.CompactTextString(m) } +func (*Intent_Message_Suggestion) ProtoMessage() {} +func (*Intent_Message_Suggestion) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 2, 7} } + +func (m *Intent_Message_Suggestion) GetTitle() string { + if m != nil { + return m.Title + } + return "" +} + +// The collection of suggestions. +type Intent_Message_Suggestions struct { + // Required. The list of suggested replies. + Suggestions []*Intent_Message_Suggestion `protobuf:"bytes,1,rep,name=suggestions" json:"suggestions,omitempty"` +} + +func (m *Intent_Message_Suggestions) Reset() { *m = Intent_Message_Suggestions{} } +func (m *Intent_Message_Suggestions) String() string { return proto.CompactTextString(m) } +func (*Intent_Message_Suggestions) ProtoMessage() {} +func (*Intent_Message_Suggestions) Descriptor() ([]byte, []int) { + return fileDescriptor3, []int{0, 2, 8} +} + +func (m *Intent_Message_Suggestions) GetSuggestions() []*Intent_Message_Suggestion { + if m != nil { + return m.Suggestions + } + return nil +} + +// The suggestion chip message that allows the user to jump out to the app +// or website associated with this agent. +type Intent_Message_LinkOutSuggestion struct { + // Required. The name of the app or site this chip is linking to. + DestinationName string `protobuf:"bytes,1,opt,name=destination_name,json=destinationName" json:"destination_name,omitempty"` + // Required. The URI of the app or site to open when the user taps the + // suggestion chip. + Uri string `protobuf:"bytes,2,opt,name=uri" json:"uri,omitempty"` +} + +func (m *Intent_Message_LinkOutSuggestion) Reset() { *m = Intent_Message_LinkOutSuggestion{} } +func (m *Intent_Message_LinkOutSuggestion) String() string { return proto.CompactTextString(m) } +func (*Intent_Message_LinkOutSuggestion) ProtoMessage() {} +func (*Intent_Message_LinkOutSuggestion) Descriptor() ([]byte, []int) { + return fileDescriptor3, []int{0, 2, 9} +} + +func (m *Intent_Message_LinkOutSuggestion) GetDestinationName() string { + if m != nil { + return m.DestinationName + } + return "" +} + +func (m *Intent_Message_LinkOutSuggestion) GetUri() string { + if m != nil { + return m.Uri + } + return "" +} + +// The card for presenting a list of options to select from. +type Intent_Message_ListSelect struct { + // Optional. The overall title of the list. + Title string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` + // Required. List items. + Items []*Intent_Message_ListSelect_Item `protobuf:"bytes,2,rep,name=items" json:"items,omitempty"` +} + +func (m *Intent_Message_ListSelect) Reset() { *m = Intent_Message_ListSelect{} } +func (m *Intent_Message_ListSelect) String() string { return proto.CompactTextString(m) } +func (*Intent_Message_ListSelect) ProtoMessage() {} +func (*Intent_Message_ListSelect) Descriptor() ([]byte, []int) { + return fileDescriptor3, []int{0, 2, 10} +} + +func (m *Intent_Message_ListSelect) GetTitle() string { + if m != nil { + return m.Title + } + return "" +} + +func (m *Intent_Message_ListSelect) GetItems() []*Intent_Message_ListSelect_Item { + if m != nil { + return m.Items + } + return nil +} + +// An item in the list. +type Intent_Message_ListSelect_Item struct { + // Required. Additional information about this option. + Info *Intent_Message_SelectItemInfo `protobuf:"bytes,1,opt,name=info" json:"info,omitempty"` + // Required. The title of the list item. + Title string `protobuf:"bytes,2,opt,name=title" json:"title,omitempty"` + // Optional. The main text describing the item. + Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` + // Optional. The image to display. + Image *Intent_Message_Image `protobuf:"bytes,4,opt,name=image" json:"image,omitempty"` +} + +func (m *Intent_Message_ListSelect_Item) Reset() { *m = Intent_Message_ListSelect_Item{} } +func (m *Intent_Message_ListSelect_Item) String() string { return proto.CompactTextString(m) } +func (*Intent_Message_ListSelect_Item) ProtoMessage() {} +func (*Intent_Message_ListSelect_Item) Descriptor() ([]byte, []int) { + return fileDescriptor3, []int{0, 2, 10, 0} +} + +func (m *Intent_Message_ListSelect_Item) GetInfo() *Intent_Message_SelectItemInfo { + if m != nil { + return m.Info + } + return nil +} + +func (m *Intent_Message_ListSelect_Item) GetTitle() string { + if m != nil { + return m.Title + } + return "" +} + +func (m *Intent_Message_ListSelect_Item) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *Intent_Message_ListSelect_Item) GetImage() *Intent_Message_Image { + if m != nil { + return m.Image + } + return nil +} + +// The card for presenting a carousel of options to select from. +type Intent_Message_CarouselSelect struct { + // Required. Carousel items. + Items []*Intent_Message_CarouselSelect_Item `protobuf:"bytes,1,rep,name=items" json:"items,omitempty"` +} + +func (m *Intent_Message_CarouselSelect) Reset() { *m = Intent_Message_CarouselSelect{} } +func (m *Intent_Message_CarouselSelect) String() string { return proto.CompactTextString(m) } +func (*Intent_Message_CarouselSelect) ProtoMessage() {} +func (*Intent_Message_CarouselSelect) Descriptor() ([]byte, []int) { + return fileDescriptor3, []int{0, 2, 11} +} + +func (m *Intent_Message_CarouselSelect) GetItems() []*Intent_Message_CarouselSelect_Item { + if m != nil { + return m.Items + } + return nil +} + +// An item in the carousel. +type Intent_Message_CarouselSelect_Item struct { + // Required. Additional info about the option item. + Info *Intent_Message_SelectItemInfo `protobuf:"bytes,1,opt,name=info" json:"info,omitempty"` + // Required. Title of the carousel item. + Title string `protobuf:"bytes,2,opt,name=title" json:"title,omitempty"` + // Optional. The body text of the card. + Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` + // Optional. The image to display. + Image *Intent_Message_Image `protobuf:"bytes,4,opt,name=image" json:"image,omitempty"` +} + +func (m *Intent_Message_CarouselSelect_Item) Reset() { *m = Intent_Message_CarouselSelect_Item{} } +func (m *Intent_Message_CarouselSelect_Item) String() string { return proto.CompactTextString(m) } +func (*Intent_Message_CarouselSelect_Item) ProtoMessage() {} +func (*Intent_Message_CarouselSelect_Item) Descriptor() ([]byte, []int) { + return fileDescriptor3, []int{0, 2, 11, 0} +} + +func (m *Intent_Message_CarouselSelect_Item) GetInfo() *Intent_Message_SelectItemInfo { + if m != nil { + return m.Info + } + return nil +} + +func (m *Intent_Message_CarouselSelect_Item) GetTitle() string { + if m != nil { + return m.Title + } + return "" +} + +func (m *Intent_Message_CarouselSelect_Item) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *Intent_Message_CarouselSelect_Item) GetImage() *Intent_Message_Image { + if m != nil { + return m.Image + } + return nil +} + +// Additional info about the select item for when it is triggered in a +// dialog. +type Intent_Message_SelectItemInfo struct { + // Required. A unique key that will be sent back to the agent if this + // response is given. + Key string `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + // Optional. A list of synonyms that can also be used to trigger this + // item in dialog. + Synonyms []string `protobuf:"bytes,2,rep,name=synonyms" json:"synonyms,omitempty"` +} + +func (m *Intent_Message_SelectItemInfo) Reset() { *m = Intent_Message_SelectItemInfo{} } +func (m *Intent_Message_SelectItemInfo) String() string { return proto.CompactTextString(m) } +func (*Intent_Message_SelectItemInfo) ProtoMessage() {} +func (*Intent_Message_SelectItemInfo) Descriptor() ([]byte, []int) { + return fileDescriptor3, []int{0, 2, 12} +} + +func (m *Intent_Message_SelectItemInfo) GetKey() string { + if m != nil { + return m.Key + } + return "" +} + +func (m *Intent_Message_SelectItemInfo) GetSynonyms() []string { + if m != nil { + return m.Synonyms + } + return nil +} + +// Represents a single followup intent in the chain. +type Intent_FollowupIntentInfo struct { + // The unique identifier of the followup intent. + // Format: `projects//agent/intents/`. + FollowupIntentName string `protobuf:"bytes,1,opt,name=followup_intent_name,json=followupIntentName" json:"followup_intent_name,omitempty"` + // The unique identifier of the followup intent parent. + // Format: `projects//agent/intents/`. + ParentFollowupIntentName string `protobuf:"bytes,2,opt,name=parent_followup_intent_name,json=parentFollowupIntentName" json:"parent_followup_intent_name,omitempty"` +} + +func (m *Intent_FollowupIntentInfo) Reset() { *m = Intent_FollowupIntentInfo{} } +func (m *Intent_FollowupIntentInfo) String() string { return proto.CompactTextString(m) } +func (*Intent_FollowupIntentInfo) ProtoMessage() {} +func (*Intent_FollowupIntentInfo) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 3} } + +func (m *Intent_FollowupIntentInfo) GetFollowupIntentName() string { + if m != nil { + return m.FollowupIntentName + } + return "" +} + +func (m *Intent_FollowupIntentInfo) GetParentFollowupIntentName() string { + if m != nil { + return m.ParentFollowupIntentName + } + return "" +} + +// The request message for [Intents.ListIntents][google.cloud.dialogflow.v2beta1.Intents.ListIntents]. +type ListIntentsRequest struct { + // Required. The agent to list all intents from. + // Format: `projects//agent`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Optional. The language to list training phrases, parameters and rich + // messages for. If not specified, the agent's default language is used. + // [More than a dozen + // languages](https://dialogflow.com/docs/reference/language) are supported. + // Note: languages must be enabled in the agent before they can be used. + LanguageCode string `protobuf:"bytes,2,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` + // Optional. The resource view to apply to the returned intent. + IntentView IntentView `protobuf:"varint,3,opt,name=intent_view,json=intentView,enum=google.cloud.dialogflow.v2beta1.IntentView" json:"intent_view,omitempty"` + // Optional. The maximum number of items to return in a single page. By + // default 100 and at most 1000. + PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // Optional. The next_page_token value returned from a previous list request. + PageToken string `protobuf:"bytes,5,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListIntentsRequest) Reset() { *m = ListIntentsRequest{} } +func (m *ListIntentsRequest) String() string { return proto.CompactTextString(m) } +func (*ListIntentsRequest) ProtoMessage() {} +func (*ListIntentsRequest) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{1} } + +func (m *ListIntentsRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListIntentsRequest) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +func (m *ListIntentsRequest) GetIntentView() IntentView { + if m != nil { + return m.IntentView + } + return IntentView_INTENT_VIEW_UNSPECIFIED +} + +func (m *ListIntentsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListIntentsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// The response message for [Intents.ListIntents][google.cloud.dialogflow.v2beta1.Intents.ListIntents]. +type ListIntentsResponse struct { + // The list of agent intents. There will be a maximum number of items + // returned based on the page_size field in the request. + Intents []*Intent `protobuf:"bytes,1,rep,name=intents" json:"intents,omitempty"` + // Token to retrieve the next page of results, or empty if there are no + // more results in the list. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListIntentsResponse) Reset() { *m = ListIntentsResponse{} } +func (m *ListIntentsResponse) String() string { return proto.CompactTextString(m) } +func (*ListIntentsResponse) ProtoMessage() {} +func (*ListIntentsResponse) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{2} } + +func (m *ListIntentsResponse) GetIntents() []*Intent { + if m != nil { + return m.Intents + } + return nil +} + +func (m *ListIntentsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The request message for [Intents.GetIntent][google.cloud.dialogflow.v2beta1.Intents.GetIntent]. +type GetIntentRequest struct { + // Required. The name of the intent. + // Format: `projects//agent/intents/`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Optional. The language to retrieve training phrases, parameters and rich + // messages for. If not specified, the agent's default language is used. + // [More than a dozen + // languages](https://dialogflow.com/docs/reference/language) are supported. + // Note: languages must be enabled in the agent, before they can be used. + LanguageCode string `protobuf:"bytes,2,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` + // Optional. The resource view to apply to the returned intent. + IntentView IntentView `protobuf:"varint,3,opt,name=intent_view,json=intentView,enum=google.cloud.dialogflow.v2beta1.IntentView" json:"intent_view,omitempty"` +} + +func (m *GetIntentRequest) Reset() { *m = GetIntentRequest{} } +func (m *GetIntentRequest) String() string { return proto.CompactTextString(m) } +func (*GetIntentRequest) ProtoMessage() {} +func (*GetIntentRequest) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{3} } + +func (m *GetIntentRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *GetIntentRequest) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +func (m *GetIntentRequest) GetIntentView() IntentView { + if m != nil { + return m.IntentView + } + return IntentView_INTENT_VIEW_UNSPECIFIED +} + +// The request message for [Intents.CreateIntent][google.cloud.dialogflow.v2beta1.Intents.CreateIntent]. +type CreateIntentRequest struct { + // Required. The agent to create a intent for. + // Format: `projects//agent`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Required. The intent to create. + Intent *Intent `protobuf:"bytes,2,opt,name=intent" json:"intent,omitempty"` + // Optional. The language of training phrases, parameters and rich messages + // defined in `intent`. If not specified, the agent's default language is + // used. [More than a dozen + // languages](https://dialogflow.com/docs/reference/language) are supported. + // Note: languages must be enabled in the agent, before they can be used. + LanguageCode string `protobuf:"bytes,3,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` + // Optional. The resource view to apply to the returned intent. + IntentView IntentView `protobuf:"varint,4,opt,name=intent_view,json=intentView,enum=google.cloud.dialogflow.v2beta1.IntentView" json:"intent_view,omitempty"` +} + +func (m *CreateIntentRequest) Reset() { *m = CreateIntentRequest{} } +func (m *CreateIntentRequest) String() string { return proto.CompactTextString(m) } +func (*CreateIntentRequest) ProtoMessage() {} +func (*CreateIntentRequest) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{4} } + +func (m *CreateIntentRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateIntentRequest) GetIntent() *Intent { + if m != nil { + return m.Intent + } + return nil +} + +func (m *CreateIntentRequest) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +func (m *CreateIntentRequest) GetIntentView() IntentView { + if m != nil { + return m.IntentView + } + return IntentView_INTENT_VIEW_UNSPECIFIED +} + +// The request message for [Intents.UpdateIntent][google.cloud.dialogflow.v2beta1.Intents.UpdateIntent]. +type UpdateIntentRequest struct { + // Required. The intent to update. + // Format: `projects//agent/intents/`. + Intent *Intent `protobuf:"bytes,1,opt,name=intent" json:"intent,omitempty"` + // Optional. The language of training phrases, parameters and rich messages + // defined in `intent`. If not specified, the agent's default language is + // used. [More than a dozen + // languages](https://dialogflow.com/docs/reference/language) are supported. + // Note: languages must be enabled in the agent, before they can be used. + LanguageCode string `protobuf:"bytes,2,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` + // Optional. The mask to control which fields get updated. + UpdateMask *google_protobuf3.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` + // Optional. The resource view to apply to the returned intent. + IntentView IntentView `protobuf:"varint,4,opt,name=intent_view,json=intentView,enum=google.cloud.dialogflow.v2beta1.IntentView" json:"intent_view,omitempty"` +} + +func (m *UpdateIntentRequest) Reset() { *m = UpdateIntentRequest{} } +func (m *UpdateIntentRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateIntentRequest) ProtoMessage() {} +func (*UpdateIntentRequest) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{5} } + +func (m *UpdateIntentRequest) GetIntent() *Intent { + if m != nil { + return m.Intent + } + return nil +} + +func (m *UpdateIntentRequest) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +func (m *UpdateIntentRequest) GetUpdateMask() *google_protobuf3.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +func (m *UpdateIntentRequest) GetIntentView() IntentView { + if m != nil { + return m.IntentView + } + return IntentView_INTENT_VIEW_UNSPECIFIED +} + +// The request message for [Intents.DeleteIntent][google.cloud.dialogflow.v2beta1.Intents.DeleteIntent]. +type DeleteIntentRequest struct { + // Required. The name of the intent to delete. + // Format: `projects//agent/intents/`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteIntentRequest) Reset() { *m = DeleteIntentRequest{} } +func (m *DeleteIntentRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteIntentRequest) ProtoMessage() {} +func (*DeleteIntentRequest) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{6} } + +func (m *DeleteIntentRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The request message for [Intents.BatchUpdateIntents][google.cloud.dialogflow.v2beta1.Intents.BatchUpdateIntents]. +type BatchUpdateIntentsRequest struct { + // Required. The name of the agent to update or create intents in. + // Format: `projects//agent`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Required. The source of the intent batch. + // + // Types that are valid to be assigned to IntentBatch: + // *BatchUpdateIntentsRequest_IntentBatchUri + // *BatchUpdateIntentsRequest_IntentBatchInline + IntentBatch isBatchUpdateIntentsRequest_IntentBatch `protobuf_oneof:"intent_batch"` + // Optional. The language of training phrases, parameters and rich messages + // defined in `intents`. If not specified, the agent's default language is + // used. [More than a dozen + // languages](https://dialogflow.com/docs/reference/language) are supported. + // Note: languages must be enabled in the agent, before they can be used. + LanguageCode string `protobuf:"bytes,4,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` + // Optional. The mask to control which fields get updated. + UpdateMask *google_protobuf3.FieldMask `protobuf:"bytes,5,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` + // Optional. The resource view to apply to the returned intent. + IntentView IntentView `protobuf:"varint,6,opt,name=intent_view,json=intentView,enum=google.cloud.dialogflow.v2beta1.IntentView" json:"intent_view,omitempty"` +} + +func (m *BatchUpdateIntentsRequest) Reset() { *m = BatchUpdateIntentsRequest{} } +func (m *BatchUpdateIntentsRequest) String() string { return proto.CompactTextString(m) } +func (*BatchUpdateIntentsRequest) ProtoMessage() {} +func (*BatchUpdateIntentsRequest) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{7} } + +type isBatchUpdateIntentsRequest_IntentBatch interface { + isBatchUpdateIntentsRequest_IntentBatch() +} + +type BatchUpdateIntentsRequest_IntentBatchUri struct { + IntentBatchUri string `protobuf:"bytes,2,opt,name=intent_batch_uri,json=intentBatchUri,oneof"` +} +type BatchUpdateIntentsRequest_IntentBatchInline struct { + IntentBatchInline *IntentBatch `protobuf:"bytes,3,opt,name=intent_batch_inline,json=intentBatchInline,oneof"` +} + +func (*BatchUpdateIntentsRequest_IntentBatchUri) isBatchUpdateIntentsRequest_IntentBatch() {} +func (*BatchUpdateIntentsRequest_IntentBatchInline) isBatchUpdateIntentsRequest_IntentBatch() {} + +func (m *BatchUpdateIntentsRequest) GetIntentBatch() isBatchUpdateIntentsRequest_IntentBatch { + if m != nil { + return m.IntentBatch + } + return nil +} + +func (m *BatchUpdateIntentsRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *BatchUpdateIntentsRequest) GetIntentBatchUri() string { + if x, ok := m.GetIntentBatch().(*BatchUpdateIntentsRequest_IntentBatchUri); ok { + return x.IntentBatchUri + } + return "" +} + +func (m *BatchUpdateIntentsRequest) GetIntentBatchInline() *IntentBatch { + if x, ok := m.GetIntentBatch().(*BatchUpdateIntentsRequest_IntentBatchInline); ok { + return x.IntentBatchInline + } + return nil +} + +func (m *BatchUpdateIntentsRequest) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +func (m *BatchUpdateIntentsRequest) GetUpdateMask() *google_protobuf3.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +func (m *BatchUpdateIntentsRequest) GetIntentView() IntentView { + if m != nil { + return m.IntentView + } + return IntentView_INTENT_VIEW_UNSPECIFIED +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*BatchUpdateIntentsRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _BatchUpdateIntentsRequest_OneofMarshaler, _BatchUpdateIntentsRequest_OneofUnmarshaler, _BatchUpdateIntentsRequest_OneofSizer, []interface{}{ + (*BatchUpdateIntentsRequest_IntentBatchUri)(nil), + (*BatchUpdateIntentsRequest_IntentBatchInline)(nil), + } +} + +func _BatchUpdateIntentsRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*BatchUpdateIntentsRequest) + // intent_batch + switch x := m.IntentBatch.(type) { + case *BatchUpdateIntentsRequest_IntentBatchUri: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeStringBytes(x.IntentBatchUri) + case *BatchUpdateIntentsRequest_IntentBatchInline: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.IntentBatchInline); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("BatchUpdateIntentsRequest.IntentBatch has unexpected type %T", x) + } + return nil +} + +func _BatchUpdateIntentsRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*BatchUpdateIntentsRequest) + switch tag { + case 2: // intent_batch.intent_batch_uri + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.IntentBatch = &BatchUpdateIntentsRequest_IntentBatchUri{x} + return true, err + case 3: // intent_batch.intent_batch_inline + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(IntentBatch) + err := b.DecodeMessage(msg) + m.IntentBatch = &BatchUpdateIntentsRequest_IntentBatchInline{msg} + return true, err + default: + return false, nil + } +} + +func _BatchUpdateIntentsRequest_OneofSizer(msg proto.Message) (n int) { + m := msg.(*BatchUpdateIntentsRequest) + // intent_batch + switch x := m.IntentBatch.(type) { + case *BatchUpdateIntentsRequest_IntentBatchUri: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.IntentBatchUri))) + n += len(x.IntentBatchUri) + case *BatchUpdateIntentsRequest_IntentBatchInline: + s := proto.Size(x.IntentBatchInline) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The response message for [Intents.BatchUpdateIntents][google.cloud.dialogflow.v2beta1.Intents.BatchUpdateIntents]. +type BatchUpdateIntentsResponse struct { + // The collection of updated or created intents. + Intents []*Intent `protobuf:"bytes,1,rep,name=intents" json:"intents,omitempty"` +} + +func (m *BatchUpdateIntentsResponse) Reset() { *m = BatchUpdateIntentsResponse{} } +func (m *BatchUpdateIntentsResponse) String() string { return proto.CompactTextString(m) } +func (*BatchUpdateIntentsResponse) ProtoMessage() {} +func (*BatchUpdateIntentsResponse) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{8} } + +func (m *BatchUpdateIntentsResponse) GetIntents() []*Intent { + if m != nil { + return m.Intents + } + return nil +} + +// The request message for [Intents.BatchDeleteIntents][google.cloud.dialogflow.v2beta1.Intents.BatchDeleteIntents]. +type BatchDeleteIntentsRequest struct { + // Required. The name of the agent to delete all entities types for. Format: + // `projects//agent`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Required. The collection of intents to delete. Only intent `name` must be + // filled in. + Intents []*Intent `protobuf:"bytes,2,rep,name=intents" json:"intents,omitempty"` +} + +func (m *BatchDeleteIntentsRequest) Reset() { *m = BatchDeleteIntentsRequest{} } +func (m *BatchDeleteIntentsRequest) String() string { return proto.CompactTextString(m) } +func (*BatchDeleteIntentsRequest) ProtoMessage() {} +func (*BatchDeleteIntentsRequest) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{9} } + +func (m *BatchDeleteIntentsRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *BatchDeleteIntentsRequest) GetIntents() []*Intent { + if m != nil { + return m.Intents + } + return nil +} + +// This message is a wrapper around a collection of intents. +type IntentBatch struct { + // A collection of intents. + Intents []*Intent `protobuf:"bytes,1,rep,name=intents" json:"intents,omitempty"` +} + +func (m *IntentBatch) Reset() { *m = IntentBatch{} } +func (m *IntentBatch) String() string { return proto.CompactTextString(m) } +func (*IntentBatch) ProtoMessage() {} +func (*IntentBatch) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{10} } + +func (m *IntentBatch) GetIntents() []*Intent { + if m != nil { + return m.Intents + } + return nil +} + +func init() { + proto.RegisterType((*Intent)(nil), "google.cloud.dialogflow.v2beta1.Intent") + proto.RegisterType((*Intent_TrainingPhrase)(nil), "google.cloud.dialogflow.v2beta1.Intent.TrainingPhrase") + proto.RegisterType((*Intent_TrainingPhrase_Part)(nil), "google.cloud.dialogflow.v2beta1.Intent.TrainingPhrase.Part") + proto.RegisterType((*Intent_Parameter)(nil), "google.cloud.dialogflow.v2beta1.Intent.Parameter") + proto.RegisterType((*Intent_Message)(nil), "google.cloud.dialogflow.v2beta1.Intent.Message") + proto.RegisterType((*Intent_Message_Text)(nil), "google.cloud.dialogflow.v2beta1.Intent.Message.Text") + proto.RegisterType((*Intent_Message_Image)(nil), "google.cloud.dialogflow.v2beta1.Intent.Message.Image") + proto.RegisterType((*Intent_Message_QuickReplies)(nil), "google.cloud.dialogflow.v2beta1.Intent.Message.QuickReplies") + proto.RegisterType((*Intent_Message_Card)(nil), "google.cloud.dialogflow.v2beta1.Intent.Message.Card") + proto.RegisterType((*Intent_Message_Card_Button)(nil), "google.cloud.dialogflow.v2beta1.Intent.Message.Card.Button") + proto.RegisterType((*Intent_Message_SimpleResponse)(nil), "google.cloud.dialogflow.v2beta1.Intent.Message.SimpleResponse") + proto.RegisterType((*Intent_Message_SimpleResponses)(nil), "google.cloud.dialogflow.v2beta1.Intent.Message.SimpleResponses") + proto.RegisterType((*Intent_Message_BasicCard)(nil), "google.cloud.dialogflow.v2beta1.Intent.Message.BasicCard") + proto.RegisterType((*Intent_Message_BasicCard_Button)(nil), "google.cloud.dialogflow.v2beta1.Intent.Message.BasicCard.Button") + proto.RegisterType((*Intent_Message_BasicCard_Button_OpenUriAction)(nil), "google.cloud.dialogflow.v2beta1.Intent.Message.BasicCard.Button.OpenUriAction") + proto.RegisterType((*Intent_Message_Suggestion)(nil), "google.cloud.dialogflow.v2beta1.Intent.Message.Suggestion") + proto.RegisterType((*Intent_Message_Suggestions)(nil), "google.cloud.dialogflow.v2beta1.Intent.Message.Suggestions") + proto.RegisterType((*Intent_Message_LinkOutSuggestion)(nil), "google.cloud.dialogflow.v2beta1.Intent.Message.LinkOutSuggestion") + proto.RegisterType((*Intent_Message_ListSelect)(nil), "google.cloud.dialogflow.v2beta1.Intent.Message.ListSelect") + proto.RegisterType((*Intent_Message_ListSelect_Item)(nil), "google.cloud.dialogflow.v2beta1.Intent.Message.ListSelect.Item") + proto.RegisterType((*Intent_Message_CarouselSelect)(nil), "google.cloud.dialogflow.v2beta1.Intent.Message.CarouselSelect") + proto.RegisterType((*Intent_Message_CarouselSelect_Item)(nil), "google.cloud.dialogflow.v2beta1.Intent.Message.CarouselSelect.Item") + proto.RegisterType((*Intent_Message_SelectItemInfo)(nil), "google.cloud.dialogflow.v2beta1.Intent.Message.SelectItemInfo") + proto.RegisterType((*Intent_FollowupIntentInfo)(nil), "google.cloud.dialogflow.v2beta1.Intent.FollowupIntentInfo") + proto.RegisterType((*ListIntentsRequest)(nil), "google.cloud.dialogflow.v2beta1.ListIntentsRequest") + proto.RegisterType((*ListIntentsResponse)(nil), "google.cloud.dialogflow.v2beta1.ListIntentsResponse") + proto.RegisterType((*GetIntentRequest)(nil), "google.cloud.dialogflow.v2beta1.GetIntentRequest") + proto.RegisterType((*CreateIntentRequest)(nil), "google.cloud.dialogflow.v2beta1.CreateIntentRequest") + proto.RegisterType((*UpdateIntentRequest)(nil), "google.cloud.dialogflow.v2beta1.UpdateIntentRequest") + proto.RegisterType((*DeleteIntentRequest)(nil), "google.cloud.dialogflow.v2beta1.DeleteIntentRequest") + proto.RegisterType((*BatchUpdateIntentsRequest)(nil), "google.cloud.dialogflow.v2beta1.BatchUpdateIntentsRequest") + proto.RegisterType((*BatchUpdateIntentsResponse)(nil), "google.cloud.dialogflow.v2beta1.BatchUpdateIntentsResponse") + proto.RegisterType((*BatchDeleteIntentsRequest)(nil), "google.cloud.dialogflow.v2beta1.BatchDeleteIntentsRequest") + proto.RegisterType((*IntentBatch)(nil), "google.cloud.dialogflow.v2beta1.IntentBatch") + proto.RegisterEnum("google.cloud.dialogflow.v2beta1.IntentView", IntentView_name, IntentView_value) + proto.RegisterEnum("google.cloud.dialogflow.v2beta1.Intent_WebhookState", Intent_WebhookState_name, Intent_WebhookState_value) + proto.RegisterEnum("google.cloud.dialogflow.v2beta1.Intent_TrainingPhrase_Type", Intent_TrainingPhrase_Type_name, Intent_TrainingPhrase_Type_value) + proto.RegisterEnum("google.cloud.dialogflow.v2beta1.Intent_Message_Platform", Intent_Message_Platform_name, Intent_Message_Platform_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for Intents service + +type IntentsClient interface { + // Returns the list of all intents in the specified agent. + ListIntents(ctx context.Context, in *ListIntentsRequest, opts ...grpc.CallOption) (*ListIntentsResponse, error) + // Retrieves the specified intent. + GetIntent(ctx context.Context, in *GetIntentRequest, opts ...grpc.CallOption) (*Intent, error) + // Creates an intent in the specified agent. + CreateIntent(ctx context.Context, in *CreateIntentRequest, opts ...grpc.CallOption) (*Intent, error) + // Updates the specified intent. + UpdateIntent(ctx context.Context, in *UpdateIntentRequest, opts ...grpc.CallOption) (*Intent, error) + // Deletes the specified intent. + DeleteIntent(ctx context.Context, in *DeleteIntentRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) + // Updates/Creates multiple intents in the specified agent. + // + // Operation + BatchUpdateIntents(ctx context.Context, in *BatchUpdateIntentsRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Deletes intents in the specified agent. + // + // Operation + BatchDeleteIntents(ctx context.Context, in *BatchDeleteIntentsRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) +} + +type intentsClient struct { + cc *grpc.ClientConn +} + +func NewIntentsClient(cc *grpc.ClientConn) IntentsClient { + return &intentsClient{cc} +} + +func (c *intentsClient) ListIntents(ctx context.Context, in *ListIntentsRequest, opts ...grpc.CallOption) (*ListIntentsResponse, error) { + out := new(ListIntentsResponse) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.Intents/ListIntents", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *intentsClient) GetIntent(ctx context.Context, in *GetIntentRequest, opts ...grpc.CallOption) (*Intent, error) { + out := new(Intent) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.Intents/GetIntent", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *intentsClient) CreateIntent(ctx context.Context, in *CreateIntentRequest, opts ...grpc.CallOption) (*Intent, error) { + out := new(Intent) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.Intents/CreateIntent", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *intentsClient) UpdateIntent(ctx context.Context, in *UpdateIntentRequest, opts ...grpc.CallOption) (*Intent, error) { + out := new(Intent) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.Intents/UpdateIntent", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *intentsClient) DeleteIntent(ctx context.Context, in *DeleteIntentRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) { + out := new(google_protobuf2.Empty) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.Intents/DeleteIntent", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *intentsClient) BatchUpdateIntents(ctx context.Context, in *BatchUpdateIntentsRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.Intents/BatchUpdateIntents", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *intentsClient) BatchDeleteIntents(ctx context.Context, in *BatchDeleteIntentsRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.Intents/BatchDeleteIntents", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Intents service + +type IntentsServer interface { + // Returns the list of all intents in the specified agent. + ListIntents(context.Context, *ListIntentsRequest) (*ListIntentsResponse, error) + // Retrieves the specified intent. + GetIntent(context.Context, *GetIntentRequest) (*Intent, error) + // Creates an intent in the specified agent. + CreateIntent(context.Context, *CreateIntentRequest) (*Intent, error) + // Updates the specified intent. + UpdateIntent(context.Context, *UpdateIntentRequest) (*Intent, error) + // Deletes the specified intent. + DeleteIntent(context.Context, *DeleteIntentRequest) (*google_protobuf2.Empty, error) + // Updates/Creates multiple intents in the specified agent. + // + // Operation + BatchUpdateIntents(context.Context, *BatchUpdateIntentsRequest) (*google_longrunning.Operation, error) + // Deletes intents in the specified agent. + // + // Operation + BatchDeleteIntents(context.Context, *BatchDeleteIntentsRequest) (*google_longrunning.Operation, error) +} + +func RegisterIntentsServer(s *grpc.Server, srv IntentsServer) { + s.RegisterService(&_Intents_serviceDesc, srv) +} + +func _Intents_ListIntents_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListIntentsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IntentsServer).ListIntents(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.Intents/ListIntents", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IntentsServer).ListIntents(ctx, req.(*ListIntentsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Intents_GetIntent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetIntentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IntentsServer).GetIntent(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.Intents/GetIntent", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IntentsServer).GetIntent(ctx, req.(*GetIntentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Intents_CreateIntent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateIntentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IntentsServer).CreateIntent(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.Intents/CreateIntent", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IntentsServer).CreateIntent(ctx, req.(*CreateIntentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Intents_UpdateIntent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateIntentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IntentsServer).UpdateIntent(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.Intents/UpdateIntent", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IntentsServer).UpdateIntent(ctx, req.(*UpdateIntentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Intents_DeleteIntent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteIntentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IntentsServer).DeleteIntent(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.Intents/DeleteIntent", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IntentsServer).DeleteIntent(ctx, req.(*DeleteIntentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Intents_BatchUpdateIntents_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BatchUpdateIntentsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IntentsServer).BatchUpdateIntents(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.Intents/BatchUpdateIntents", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IntentsServer).BatchUpdateIntents(ctx, req.(*BatchUpdateIntentsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Intents_BatchDeleteIntents_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BatchDeleteIntentsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IntentsServer).BatchDeleteIntents(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.Intents/BatchDeleteIntents", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IntentsServer).BatchDeleteIntents(ctx, req.(*BatchDeleteIntentsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Intents_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.dialogflow.v2beta1.Intents", + HandlerType: (*IntentsServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListIntents", + Handler: _Intents_ListIntents_Handler, + }, + { + MethodName: "GetIntent", + Handler: _Intents_GetIntent_Handler, + }, + { + MethodName: "CreateIntent", + Handler: _Intents_CreateIntent_Handler, + }, + { + MethodName: "UpdateIntent", + Handler: _Intents_UpdateIntent_Handler, + }, + { + MethodName: "DeleteIntent", + Handler: _Intents_DeleteIntent_Handler, + }, + { + MethodName: "BatchUpdateIntents", + Handler: _Intents_BatchUpdateIntents_Handler, + }, + { + MethodName: "BatchDeleteIntents", + Handler: _Intents_BatchDeleteIntents_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/dialogflow/v2beta1/intent.proto", +} + +func init() { proto.RegisterFile("google/cloud/dialogflow/v2beta1/intent.proto", fileDescriptor3) } + +var fileDescriptor3 = []byte{ + // 2592 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0xcd, 0x73, 0x23, 0x47, + 0xd9, 0xf7, 0xe8, 0xc3, 0x96, 0x1e, 0xc9, 0xb2, 0xdc, 0xde, 0x6c, 0xb4, 0x93, 0xa4, 0xe2, 0x28, + 0x6f, 0xf2, 0x3a, 0x7e, 0x13, 0xe9, 0x8d, 0x92, 0x37, 0x1f, 0xbb, 0x6f, 0x12, 0x64, 0x5b, 0x5e, + 0x0b, 0xcb, 0x96, 0x76, 0x2c, 0x6f, 0xd8, 0x14, 0x30, 0x35, 0x92, 0xda, 0xda, 0xc6, 0xa3, 0x99, + 0xc9, 0x74, 0xcb, 0x1b, 0x05, 0x52, 0x45, 0x51, 0x05, 0x1c, 0xb8, 0x50, 0x70, 0xa0, 0x28, 0x6e, + 0x70, 0x0a, 0xc5, 0x81, 0xca, 0x8d, 0x3f, 0x81, 0x03, 0x27, 0x8e, 0x39, 0x50, 0x54, 0x51, 0xfc, + 0x0d, 0xdc, 0xa0, 0xfa, 0x63, 0xa4, 0x91, 0xa5, 0x45, 0x92, 0xbd, 0x70, 0xe1, 0x36, 0xfd, 0x74, + 0xf7, 0xef, 0xf9, 0xea, 0xfe, 0x3d, 0xdd, 0x2d, 0xc1, 0xab, 0x5d, 0xd7, 0xed, 0xda, 0xb8, 0xd8, + 0xb6, 0xdd, 0x7e, 0xa7, 0xd8, 0x21, 0x96, 0xed, 0x76, 0xcf, 0x6c, 0xf7, 0x51, 0xf1, 0xa2, 0xd4, + 0xc2, 0xcc, 0x7a, 0xbd, 0x48, 0x1c, 0x86, 0x1d, 0x56, 0xf0, 0x7c, 0x97, 0xb9, 0xe8, 0x79, 0x39, + 0xba, 0x20, 0x46, 0x17, 0x46, 0xa3, 0x0b, 0x6a, 0xb4, 0xfe, 0xac, 0x82, 0xb3, 0x3c, 0x52, 0xb4, + 0x1c, 0xc7, 0x65, 0x16, 0x23, 0xae, 0x43, 0xe5, 0x74, 0xfd, 0xb5, 0x59, 0xca, 0xda, 0xae, 0xc3, + 0xf0, 0x27, 0x4a, 0x9b, 0xfe, 0xa2, 0x1a, 0x6e, 0xbb, 0x4e, 0xd7, 0xef, 0x3b, 0x0e, 0x71, 0xba, + 0x45, 0xd7, 0xc3, 0xfe, 0x18, 0xe6, 0x33, 0x6a, 0x90, 0x68, 0xb5, 0xfa, 0x67, 0x45, 0xdc, 0xf3, + 0xd8, 0x40, 0x75, 0x6e, 0x5e, 0xee, 0x3c, 0x23, 0xd8, 0xee, 0x98, 0x3d, 0x8b, 0x9e, 0xab, 0x11, + 0xcf, 0x5e, 0x1e, 0x41, 0x99, 0xdf, 0x6f, 0x2b, 0x0b, 0xf2, 0x3f, 0xdb, 0x86, 0xe5, 0xaa, 0x08, + 0x00, 0x42, 0x10, 0x73, 0xac, 0x1e, 0xce, 0x69, 0x9b, 0xda, 0x56, 0xd2, 0x10, 0xdf, 0xe8, 0x05, + 0x48, 0x77, 0x08, 0xf5, 0x6c, 0x6b, 0x60, 0x8a, 0xbe, 0x88, 0xe8, 0x4b, 0x29, 0xd9, 0x31, 0x1f, + 0xf2, 0x00, 0x56, 0x1f, 0xe1, 0xd6, 0x43, 0xd7, 0x3d, 0x37, 0x29, 0xb3, 0x18, 0xce, 0x2d, 0x6f, + 0x6a, 0x5b, 0x99, 0xd2, 0x9b, 0x85, 0x19, 0x91, 0x2c, 0x48, 0xb5, 0x85, 0x0f, 0xe5, 0xe4, 0x13, + 0x3e, 0xd7, 0x48, 0x3f, 0x0a, 0xb5, 0x90, 0x0e, 0x09, 0xcf, 0x27, 0xae, 0x4f, 0xd8, 0x20, 0x17, + 0xdd, 0xd4, 0xb6, 0xe2, 0xc6, 0xb0, 0x8d, 0x9e, 0x87, 0x14, 0xa1, 0xe6, 0x99, 0x65, 0xdb, 0x2d, + 0xab, 0x7d, 0x9e, 0x8b, 0x6d, 0x6a, 0x5b, 0x09, 0x03, 0x08, 0xdd, 0x57, 0x12, 0xf4, 0x1c, 0x40, + 0xcf, 0x36, 0xb1, 0x63, 0xb5, 0x6c, 0xdc, 0xc9, 0xc5, 0x45, 0x7f, 0xb2, 0x67, 0x57, 0xa4, 0x80, + 0xcf, 0xef, 0xd9, 0x66, 0x87, 0x50, 0xd9, 0xbf, 0x21, 0xe7, 0xf7, 0xec, 0x3d, 0x25, 0x41, 0x05, + 0xd8, 0x20, 0x8e, 0xd7, 0x67, 0xa6, 0x4a, 0x99, 0x08, 0x00, 0xcd, 0xad, 0x6c, 0x46, 0xb7, 0x92, + 0xc6, 0xba, 0xe8, 0xda, 0x95, 0x3d, 0x3c, 0x0c, 0x14, 0xdd, 0x84, 0x65, 0x7c, 0x81, 0x1d, 0x46, + 0x73, 0x09, 0x31, 0x44, 0xb5, 0x90, 0x05, 0x59, 0xe6, 0x5b, 0x84, 0xe7, 0xd6, 0xf4, 0x1e, 0xfa, + 0x16, 0xc5, 0x34, 0x97, 0xdc, 0x8c, 0x6e, 0xa5, 0x4a, 0x6f, 0xcd, 0x1b, 0xa2, 0xa6, 0x9a, 0xdf, + 0x10, 0xd3, 0x8d, 0x35, 0x36, 0xd6, 0x16, 0xaa, 0xad, 0x36, 0x5f, 0x32, 0x39, 0x10, 0xf9, 0x51, + 0x2d, 0x74, 0x0f, 0xd6, 0xdc, 0x3e, 0x0b, 0xf9, 0x40, 0x73, 0x29, 0xa1, 0x79, 0x6b, 0xa6, 0x66, + 0xe5, 0x9a, 0x91, 0x91, 0x00, 0xaa, 0x49, 0xd1, 0x4b, 0x90, 0xf1, 0x31, 0xc5, 0x21, 0xc4, 0xb4, + 0x88, 0xdc, 0xaa, 0x90, 0x0e, 0x87, 0xdd, 0x03, 0xf0, 0x2c, 0xdf, 0xea, 0x61, 0x86, 0x7d, 0x9a, + 0x5b, 0x15, 0x4a, 0x5f, 0x9f, 0xd7, 0xdd, 0x46, 0x30, 0xd3, 0x08, 0x81, 0xa0, 0x43, 0x48, 0xf4, + 0x30, 0xa5, 0x56, 0x17, 0xd3, 0x5c, 0x46, 0x00, 0x16, 0xe7, 0x05, 0x3c, 0x92, 0xf3, 0x8c, 0x21, + 0x00, 0xba, 0x00, 0xbd, 0x83, 0xcf, 0xac, 0xbe, 0xcd, 0x4c, 0x1f, 0x53, 0xcf, 0x75, 0x28, 0x36, + 0x3d, 0xdb, 0x62, 0x67, 0xae, 0xdf, 0xa3, 0xb9, 0xb5, 0xcd, 0xe8, 0x56, 0xa6, 0xf4, 0xce, 0x82, + 0xf0, 0x85, 0x86, 0x02, 0x30, 0x72, 0x0a, 0xdb, 0x50, 0xd0, 0x41, 0x07, 0x45, 0xef, 0xc2, 0x2d, + 0xdf, 0x75, 0x99, 0x79, 0xe6, 0xda, 0xb6, 0xfb, 0xa8, 0xef, 0x99, 0x92, 0x7c, 0xe4, 0xe6, 0xca, + 0x8a, 0xe4, 0xdd, 0xe4, 0x03, 0xf6, 0x55, 0xbf, 0xd4, 0x20, 0xf6, 0xd9, 0x7b, 0xf0, 0x8c, 0x67, + 0xf9, 0x7c, 0xf0, 0xd4, 0xc9, 0xeb, 0x62, 0x72, 0x4e, 0x0e, 0x99, 0x32, 0xdd, 0x86, 0x1b, 0x97, + 0xe7, 0x11, 0xe7, 0xcc, 0xcd, 0x21, 0x11, 0xca, 0xdb, 0xf3, 0xfa, 0x3a, 0x8e, 0x5c, 0x75, 0xce, + 0x5c, 0x03, 0x9d, 0x4d, 0xc8, 0xf4, 0x5f, 0x45, 0x21, 0x33, 0xbe, 0x6a, 0xa7, 0xd2, 0x4b, 0x1d, + 0x62, 0x6c, 0xe0, 0x49, 0x5a, 0xc9, 0x94, 0xee, 0x5c, 0x6d, 0x3f, 0x14, 0x9a, 0x03, 0x0f, 0x1b, + 0x02, 0x08, 0xdd, 0x83, 0xb8, 0x67, 0xf9, 0x8c, 0xe6, 0xa2, 0xc2, 0xad, 0xab, 0x22, 0x36, 0x2c, + 0x9f, 0x19, 0x12, 0x09, 0x6d, 0xc3, 0x3a, 0x23, 0x3d, 0x4c, 0x4d, 0xab, 0xd3, 0xc1, 0x1d, 0xb3, + 0xed, 0xf6, 0x1d, 0x26, 0xe8, 0x26, 0x6e, 0xac, 0x89, 0x8e, 0x32, 0x97, 0xef, 0x72, 0xb1, 0xce, + 0x20, 0xc6, 0xa7, 0x72, 0x5f, 0xf9, 0x3e, 0x08, 0x7c, 0xe5, 0xdf, 0x9c, 0x70, 0xb0, 0xc3, 0x08, + 0x1b, 0x98, 0x43, 0x97, 0x93, 0x06, 0x48, 0x11, 0xf7, 0x00, 0xdd, 0x80, 0xb8, 0x65, 0x13, 0x8b, + 0x0a, 0xaa, 0x4b, 0x1a, 0xb2, 0xc1, 0x19, 0xb8, 0x4f, 0xb1, 0x6f, 0x76, 0xf0, 0x19, 0x71, 0x70, + 0x47, 0x11, 0x5d, 0x8a, 0xcb, 0xf6, 0xa4, 0x28, 0xff, 0x36, 0xc4, 0x14, 0x40, 0xb6, 0xf9, 0xa0, + 0x51, 0x31, 0x4f, 0x8f, 0x4f, 0x1a, 0x95, 0xdd, 0xea, 0x7e, 0xb5, 0xb2, 0x97, 0x5d, 0x42, 0x29, + 0x58, 0xa9, 0x7c, 0xad, 0x7c, 0xd4, 0xa8, 0x55, 0xb2, 0x1a, 0x4a, 0x43, 0xa2, 0x59, 0x39, 0x6a, + 0xd4, 0xca, 0xcd, 0x4a, 0x36, 0xa2, 0xff, 0x30, 0x02, 0xc9, 0xe1, 0x66, 0xbb, 0x2a, 0xff, 0xdf, + 0x80, 0xf8, 0x85, 0x65, 0xf7, 0x71, 0x60, 0xb6, 0x68, 0xa0, 0x17, 0x61, 0x35, 0xd8, 0x60, 0xb2, + 0x37, 0x26, 0x7a, 0xd3, 0x4a, 0x78, 0x5f, 0x0c, 0x7a, 0x1b, 0x72, 0xa1, 0x90, 0x98, 0x63, 0x9a, + 0xe2, 0x62, 0xfc, 0x53, 0xa3, 0xf8, 0xec, 0x85, 0x74, 0x3e, 0x0b, 0xc9, 0x9e, 0xe5, 0x74, 0x2c, + 0xe6, 0xfa, 0x03, 0x51, 0x6f, 0x38, 0xb5, 0x07, 0x02, 0x94, 0x83, 0x15, 0xcf, 0x77, 0x7b, 0x1e, + 0x0b, 0xd8, 0x3a, 0x68, 0xa2, 0xa7, 0x61, 0x85, 0x50, 0xd3, 0x26, 0x94, 0xe5, 0x12, 0x62, 0xd6, + 0x32, 0xa1, 0x35, 0x42, 0x99, 0xfe, 0x13, 0x1d, 0x56, 0xd4, 0x36, 0x46, 0x5f, 0x0d, 0x25, 0x2f, + 0x35, 0x7f, 0x1d, 0x0b, 0x58, 0xa0, 0x89, 0x3f, 0x61, 0x07, 0x4b, 0x2a, 0xe9, 0x47, 0x10, 0x27, + 0x3d, 0xab, 0x2b, 0x03, 0x97, 0x2a, 0xfd, 0xdf, 0xa2, 0x60, 0x55, 0x3e, 0xf9, 0x60, 0xc9, 0x90, + 0x28, 0xa8, 0x0d, 0xab, 0x1f, 0xf7, 0x49, 0xfb, 0xdc, 0xf4, 0xb1, 0x67, 0x13, 0x2c, 0x97, 0x4a, + 0xaa, 0xf4, 0xff, 0x8b, 0xc2, 0xde, 0xe3, 0x20, 0x86, 0xc4, 0x38, 0x58, 0x32, 0xd2, 0x1f, 0x87, + 0xda, 0xdc, 0xff, 0xb6, 0xe5, 0xcb, 0x95, 0x76, 0x05, 0xff, 0x77, 0x2d, 0xbf, 0xc3, 0xfd, 0xe7, + 0x18, 0xe8, 0x0d, 0x58, 0xf1, 0xac, 0x81, 0xed, 0x5a, 0xb2, 0x02, 0xa7, 0x4a, 0x4f, 0x07, 0x70, + 0xc1, 0x71, 0xa4, 0x70, 0x22, 0x8e, 0x23, 0x07, 0x4b, 0x46, 0x30, 0x12, 0xd9, 0x90, 0xa5, 0xa4, + 0xe7, 0xd9, 0x78, 0xc8, 0xcd, 0x3c, 0x91, 0x7c, 0xf6, 0x07, 0x8b, 0x1a, 0x73, 0x22, 0x70, 0x02, + 0x1e, 0xe6, 0xbe, 0xae, 0xd1, 0x71, 0x11, 0xfa, 0x08, 0xa0, 0x65, 0x51, 0xd2, 0x36, 0x85, 0xd3, + 0x09, 0xa1, 0xe7, 0xdd, 0x45, 0xf5, 0xec, 0x70, 0x04, 0xe5, 0x79, 0xb2, 0x15, 0x34, 0x90, 0x09, + 0x29, 0xda, 0xef, 0x76, 0x31, 0x15, 0xe7, 0xb9, 0x5c, 0x52, 0x80, 0xdf, 0x59, 0xd8, 0x89, 0x11, + 0xc4, 0xc1, 0x92, 0x11, 0x46, 0x44, 0x14, 0x36, 0x6c, 0xe2, 0x9c, 0x9b, 0x6e, 0x9f, 0x99, 0x23, + 0xb9, 0x38, 0x06, 0xa4, 0x4a, 0xe5, 0x45, 0x15, 0xd5, 0x88, 0x73, 0x5e, 0xef, 0xb3, 0x91, 0xbe, + 0x83, 0x25, 0x63, 0xdd, 0xbe, 0x2c, 0x44, 0xdf, 0x80, 0x14, 0xdf, 0x42, 0x26, 0xc5, 0x36, 0x6e, + 0xb3, 0x5c, 0x4a, 0x28, 0xbb, 0xbd, 0xb8, 0x32, 0xca, 0x4e, 0x04, 0xc2, 0xc1, 0x92, 0x01, 0xf6, + 0xb0, 0x85, 0x08, 0xac, 0xb5, 0x2d, 0xdf, 0xed, 0x53, 0x6c, 0x07, 0x2a, 0xd2, 0x42, 0xc5, 0xfb, + 0x57, 0x58, 0x8a, 0x02, 0x66, 0xa8, 0x26, 0xd3, 0x1e, 0x93, 0xa0, 0x26, 0x24, 0x82, 0xaa, 0xaf, + 0x8e, 0xad, 0x57, 0x2f, 0xfa, 0x43, 0x24, 0x5d, 0x87, 0x18, 0x27, 0x81, 0x50, 0x15, 0x88, 0x06, + 0x55, 0x40, 0x3f, 0x81, 0xb8, 0xd8, 0xd3, 0xe8, 0x19, 0x48, 0x8a, 0x3d, 0x6d, 0xf6, 0x7d, 0xa2, + 0x28, 0x37, 0x21, 0x04, 0xa7, 0x3e, 0x41, 0xaf, 0x01, 0xb2, 0xda, 0x6d, 0x4c, 0x29, 0x69, 0x11, + 0x5b, 0xf0, 0x23, 0xc7, 0x91, 0xe4, 0xbb, 0x3e, 0xd6, 0xc3, 0x15, 0xe9, 0x55, 0x48, 0x87, 0x77, + 0x34, 0xa7, 0x64, 0x46, 0x98, 0x1d, 0x50, 0xb9, 0x6c, 0x70, 0x4a, 0x1e, 0x27, 0x8f, 0x88, 0xb0, + 0x6b, 0x6c, 0xf3, 0xeb, 0x7f, 0xd5, 0x20, 0x26, 0x96, 0xee, 0x74, 0x0c, 0x1d, 0x12, 0xb4, 0xdf, + 0x92, 0x1d, 0xd2, 0x9c, 0x61, 0x7b, 0xdc, 0xa3, 0xe8, 0x25, 0x8f, 0x4e, 0x61, 0xa5, 0xd5, 0x67, + 0x8c, 0xef, 0x82, 0xd8, 0x62, 0xa5, 0x39, 0xcc, 0x2b, 0x85, 0x1d, 0x81, 0x61, 0x04, 0x58, 0xfa, + 0x3b, 0xb0, 0x2c, 0x45, 0x53, 0x4b, 0x2e, 0xbf, 0x3f, 0xb8, 0x94, 0x89, 0x0b, 0x82, 0xb2, 0x36, + 0x68, 0xeb, 0x3d, 0xc8, 0x8c, 0x93, 0x03, 0xfa, 0x2f, 0xc8, 0x88, 0x73, 0x3e, 0x73, 0x4d, 0xea, + 0x61, 0xdc, 0x7e, 0xa8, 0xb0, 0xd2, 0x5c, 0xda, 0x74, 0x4f, 0x84, 0x8c, 0xeb, 0xa1, 0xb4, 0x67, + 0x2b, 0x3c, 0xf1, 0x1d, 0xae, 0x92, 0xc2, 0x86, 0xe8, 0x58, 0x95, 0x14, 0x29, 0xfa, 0x0e, 0xac, + 0x5d, 0xe2, 0x22, 0x44, 0xa6, 0xd0, 0x9c, 0x26, 0x62, 0xf3, 0xfe, 0xf5, 0x68, 0x6e, 0x82, 0xe3, + 0xf4, 0xdf, 0x47, 0x21, 0x39, 0xa4, 0xa8, 0x2b, 0xa4, 0xf6, 0x25, 0xc8, 0xf0, 0x95, 0x6d, 0x31, + 0x86, 0x3b, 0x61, 0x17, 0x57, 0x87, 0x52, 0xb1, 0xe0, 0x0f, 0x83, 0x6a, 0x17, 0xbb, 0x46, 0xb5, + 0x0b, 0x6a, 0xdd, 0x47, 0xa3, 0x15, 0x13, 0x17, 0x51, 0xf9, 0xca, 0x95, 0x49, 0x79, 0x62, 0xd9, + 0xfc, 0x4e, 0x1b, 0xae, 0x9b, 0xe9, 0xc1, 0xb8, 0x80, 0x35, 0xd7, 0xc3, 0x0e, 0x5f, 0xca, 0xa6, + 0xba, 0x5a, 0xc9, 0x0a, 0x7e, 0x7c, 0x5d, 0x23, 0x0a, 0x75, 0x0f, 0x3b, 0xa7, 0x3e, 0x29, 0x0b, + 0x54, 0x63, 0xd5, 0x0d, 0x37, 0xf5, 0x17, 0x60, 0x75, 0xac, 0x1f, 0x65, 0x21, 0x3a, 0x22, 0x08, + 0xfe, 0xa9, 0xe7, 0x01, 0x42, 0x5c, 0x3c, 0xd5, 0x7c, 0xfd, 0x1c, 0x52, 0xa1, 0xa2, 0x81, 0xbe, + 0x3e, 0x5e, 0x86, 0xb4, 0xc5, 0x8e, 0xfc, 0x93, 0x65, 0x68, 0xac, 0x06, 0xe9, 0x0d, 0x58, 0x9f, + 0x28, 0x1c, 0xe8, 0x15, 0xc8, 0x76, 0xf8, 0xa7, 0x23, 0x9e, 0x32, 0xcc, 0xd0, 0xc1, 0x72, 0x2d, + 0x24, 0x17, 0x87, 0x39, 0xe5, 0x62, 0x64, 0xe4, 0xe2, 0x97, 0x11, 0x80, 0x51, 0x79, 0x78, 0x4c, + 0x8a, 0x4e, 0x21, 0x4e, 0x18, 0xee, 0x49, 0x1a, 0xbb, 0xc2, 0xd1, 0x60, 0xa4, 0xa0, 0x50, 0x65, + 0xb8, 0x67, 0x48, 0x34, 0xfd, 0x4f, 0x1a, 0xc4, 0x78, 0x1b, 0x19, 0x10, 0x13, 0x17, 0x24, 0xed, + 0x6a, 0xb5, 0x47, 0x42, 0x73, 0x24, 0x71, 0x49, 0x12, 0x58, 0x23, 0x4f, 0x22, 0x61, 0x4f, 0x36, + 0x21, 0xd5, 0xc1, 0xb4, 0xed, 0x13, 0x4f, 0x2c, 0xb4, 0x80, 0x3d, 0x46, 0xa2, 0x27, 0xba, 0xb1, + 0xf4, 0x3f, 0x44, 0x20, 0x33, 0x5e, 0x19, 0xd1, 0x83, 0x20, 0x96, 0x72, 0x69, 0xec, 0x5e, 0xaf, + 0xd0, 0xfe, 0x87, 0xc5, 0xf3, 0x7d, 0xc8, 0x8c, 0x1b, 0xc7, 0x57, 0xf4, 0x39, 0x1e, 0x04, 0x9b, + 0xf6, 0x1c, 0x0f, 0x04, 0xb9, 0x0e, 0x1c, 0xd7, 0x19, 0xf4, 0x82, 0xb2, 0x3b, 0x6c, 0xe7, 0x7f, + 0xa4, 0x41, 0x22, 0x38, 0x45, 0xa0, 0x1c, 0xdc, 0xe0, 0xb7, 0xb3, 0xfd, 0xba, 0x71, 0x74, 0xe9, + 0x1e, 0x97, 0x86, 0xc4, 0x7e, 0x79, 0xb7, 0xb2, 0x53, 0xaf, 0x1f, 0x66, 0x35, 0x94, 0x84, 0xf8, + 0x49, 0xad, 0xbc, 0x7b, 0x98, 0x8d, 0xc8, 0x3b, 0x5d, 0xad, 0x72, 0xd7, 0x28, 0x1f, 0x65, 0xa3, + 0x68, 0x05, 0xa2, 0x87, 0xd5, 0xc3, 0x6c, 0x4c, 0x8c, 0x38, 0x7c, 0xd0, 0xa8, 0x64, 0xe3, 0x28, + 0x01, 0xb1, 0x5a, 0xf5, 0xb8, 0x92, 0x5d, 0xe6, 0xc2, 0xfb, 0xd5, 0x9d, 0x8a, 0x91, 0x5d, 0x41, + 0x4f, 0xc1, 0x7a, 0x79, 0xb7, 0x59, 0xad, 0x1f, 0x9f, 0x98, 0xf5, 0x63, 0xf3, 0x6e, 0xbd, 0x7e, + 0xb7, 0x56, 0xc9, 0x26, 0x76, 0x92, 0xb0, 0xa2, 0x5e, 0x49, 0xf4, 0xef, 0x6b, 0x80, 0x26, 0xef, + 0xfb, 0xe8, 0x7f, 0x27, 0x5f, 0x12, 0x42, 0xdb, 0xfb, 0xd2, 0x6b, 0xc0, 0x3c, 0x4f, 0x17, 0x91, + 0x7f, 0xfe, 0x74, 0x91, 0x67, 0x90, 0x0e, 0x3f, 0x12, 0xa2, 0xe7, 0xe0, 0xd6, 0x87, 0x95, 0x9d, + 0x83, 0x7a, 0xfd, 0xd0, 0x3c, 0x69, 0x96, 0x9b, 0x97, 0x2f, 0xbc, 0xb7, 0xe0, 0xa9, 0xf1, 0xee, + 0xca, 0x71, 0x79, 0xa7, 0x56, 0xd9, 0xcb, 0x6a, 0x68, 0x1b, 0x5e, 0x9e, 0xda, 0x65, 0xee, 0xd7, + 0x0d, 0xf3, 0xa4, 0x56, 0x6f, 0x9a, 0xfb, 0xd5, 0x5a, 0xad, 0x7a, 0x7c, 0x37, 0x1b, 0xc9, 0x7f, + 0xa9, 0x01, 0xe2, 0x1c, 0x21, 0x0d, 0xa1, 0x06, 0xfe, 0xb8, 0x8f, 0x29, 0x43, 0x37, 0x61, 0x59, + 0x1a, 0xaa, 0xfc, 0x55, 0x2d, 0x7e, 0xba, 0xb2, 0x2d, 0xa7, 0xdb, 0xe7, 0x07, 0xa0, 0xb6, 0xdb, + 0x09, 0xbc, 0x4a, 0x07, 0xc2, 0x5d, 0xb7, 0x83, 0x51, 0x0d, 0x52, 0xca, 0xf1, 0x0b, 0x82, 0x1f, + 0x89, 0x95, 0x99, 0x29, 0xfd, 0xcf, 0x9c, 0xab, 0xef, 0x3e, 0xc1, 0x8f, 0x0c, 0x20, 0xc3, 0x6f, + 0x7e, 0xe0, 0xf2, 0xb8, 0x3a, 0x4a, 0x3e, 0xc5, 0xea, 0x45, 0x22, 0xc1, 0x05, 0x27, 0xe4, 0x53, + 0x1e, 0x24, 0x10, 0x9d, 0xcc, 0x3d, 0xc7, 0x8e, 0xba, 0x4d, 0x8b, 0xe1, 0x4d, 0x2e, 0xc8, 0x7f, + 0x57, 0x83, 0x8d, 0x31, 0xef, 0xd4, 0x21, 0xa8, 0x0c, 0x2b, 0x52, 0x43, 0xc0, 0x05, 0xff, 0x3d, + 0xa7, 0x75, 0x46, 0x30, 0x0f, 0xbd, 0x0c, 0x6b, 0x0e, 0x3f, 0x47, 0x85, 0xd4, 0xcb, 0x58, 0xac, + 0x72, 0x71, 0x63, 0x68, 0xc2, 0xcf, 0x35, 0xc8, 0xde, 0xc5, 0xca, 0x82, 0x20, 0xbc, 0xd3, 0x1e, + 0x21, 0xfe, 0xfd, 0xa1, 0xcd, 0xff, 0x59, 0x83, 0x8d, 0x5d, 0x1f, 0x5b, 0x0c, 0x8f, 0x9b, 0xf7, + 0xb8, 0xec, 0x7f, 0x00, 0xcb, 0x72, 0xb6, 0x3a, 0x26, 0xcc, 0x1d, 0x35, 0x35, 0x6d, 0xd2, 0xc7, + 0xe8, 0x6c, 0x1f, 0x63, 0xd7, 0xf3, 0xf1, 0x07, 0x11, 0xd8, 0x38, 0xf5, 0x3a, 0x13, 0x3e, 0x8e, + 0x7c, 0xd1, 0x9e, 0x90, 0x2f, 0xd3, 0xf2, 0x75, 0x07, 0x52, 0x7d, 0xa1, 0x5c, 0xfc, 0x56, 0xa1, + 0x1e, 0x32, 0xf4, 0x89, 0xd7, 0x81, 0x7d, 0x82, 0xed, 0xce, 0x91, 0x45, 0xcf, 0x0d, 0x90, 0xc3, + 0xf9, 0xf7, 0x13, 0x0e, 0xc4, 0x2b, 0xb0, 0xb1, 0x87, 0x6d, 0x7c, 0x39, 0x0e, 0x53, 0x96, 0x62, + 0xfe, 0xef, 0x11, 0xb8, 0xb5, 0x63, 0xb1, 0xf6, 0xc3, 0x70, 0xe0, 0x66, 0x72, 0xc3, 0x36, 0x64, + 0x95, 0xb9, 0x2d, 0x3e, 0xd7, 0x1c, 0x1e, 0x77, 0xf8, 0x95, 0x54, 0xf6, 0x48, 0x50, 0x9f, 0xa0, + 0x6f, 0xc2, 0xc6, 0xd8, 0x58, 0xe2, 0xd8, 0xc4, 0xc1, 0x2a, 0x3e, 0xaf, 0xce, 0xe9, 0xa2, 0x40, + 0xe3, 0x97, 0xf7, 0x10, 0x78, 0x55, 0x00, 0x4d, 0x26, 0x27, 0x36, 0x3b, 0x39, 0xf1, 0xeb, 0x24, + 0x67, 0xf9, 0x5a, 0xc9, 0xd9, 0xc9, 0x40, 0x3a, 0x1c, 0x8f, 0xbc, 0x09, 0xfa, 0xb4, 0x04, 0x3c, + 0x31, 0xfa, 0xca, 0x5f, 0xa8, 0x0c, 0x87, 0x97, 0xc4, 0xcc, 0x0c, 0x87, 0xf4, 0x46, 0xae, 0xa8, + 0xb7, 0x01, 0xa9, 0x50, 0xf2, 0x9e, 0x80, 0x27, 0xdb, 0x1f, 0x00, 0x54, 0xc3, 0xd5, 0xe2, 0xe9, + 0xea, 0x71, 0xb3, 0x72, 0xdc, 0x34, 0xef, 0x57, 0x2b, 0x1f, 0x5e, 0xaa, 0x99, 0x37, 0x20, 0x1b, + 0xee, 0xdc, 0x3f, 0xad, 0xd5, 0xb2, 0x5a, 0xe9, 0x8b, 0x24, 0xac, 0xa8, 0x00, 0xa0, 0xdf, 0x68, + 0x90, 0x0a, 0x15, 0x0c, 0xf4, 0xc6, 0x4c, 0x73, 0x26, 0x8b, 0xa7, 0xfe, 0xe6, 0x62, 0x93, 0x64, + 0x52, 0xf3, 0xa5, 0xef, 0xfd, 0xf1, 0x2f, 0x3f, 0x8d, 0xbc, 0x8a, 0xb6, 0x87, 0xbf, 0xa2, 0x7e, + 0x5b, 0x86, 0xfd, 0x3d, 0xcf, 0x77, 0xbf, 0x85, 0xdb, 0x8c, 0x16, 0xb7, 0x8b, 0x56, 0x17, 0x3b, + 0xec, 0xb3, 0x62, 0x50, 0x84, 0x7e, 0xa1, 0x41, 0x72, 0x58, 0x5c, 0xd0, 0xec, 0x9f, 0x9e, 0x2e, + 0x17, 0x22, 0x7d, 0xde, 0x70, 0x4f, 0xb3, 0x8e, 0x53, 0xc5, 0x84, 0x6d, 0x81, 0x69, 0xc5, 0xed, + 0xcf, 0xd0, 0xe7, 0x1a, 0xa4, 0xc3, 0xe5, 0x05, 0xcd, 0x0e, 0xcc, 0x94, 0x6a, 0x34, 0xbf, 0x8d, + 0xb7, 0x85, 0x8d, 0x6f, 0xe6, 0x17, 0x88, 0xe0, 0xed, 0x80, 0xcd, 0x7f, 0xab, 0x41, 0x3a, 0xbc, + 0xd9, 0xe6, 0xb0, 0x75, 0x4a, 0x55, 0x99, 0xdf, 0xd6, 0xb2, 0xb0, 0xf5, 0x4e, 0xe9, 0xf5, 0x91, + 0xad, 0xea, 0x17, 0xfa, 0x59, 0x61, 0x1d, 0x9a, 0xfc, 0x63, 0x0d, 0xd2, 0xe1, 0xed, 0x3b, 0x87, + 0xc9, 0x53, 0x0a, 0x80, 0x7e, 0x73, 0x82, 0xf0, 0x2a, 0x3d, 0x8f, 0x0d, 0x82, 0x8c, 0x6f, 0x2f, + 0x92, 0xf1, 0x2f, 0x34, 0x40, 0x93, 0xbc, 0x85, 0x66, 0x5f, 0xc2, 0x1f, 0x5b, 0x6d, 0xf4, 0xe7, + 0x82, 0xb9, 0xa1, 0x7f, 0x0f, 0x14, 0xea, 0xc1, 0xbf, 0x07, 0x82, 0x38, 0xe6, 0xdf, 0x5a, 0x20, + 0xe7, 0xad, 0x91, 0xb2, 0xdb, 0xda, 0xf6, 0xc8, 0xe8, 0x31, 0x2e, 0x9c, 0xd7, 0xe8, 0x69, 0x04, + 0xfa, 0x2f, 0x33, 0x5a, 0x2a, 0xbb, 0xad, 0x6d, 0xef, 0x7c, 0xae, 0xc1, 0x8b, 0x6d, 0xb7, 0x37, + 0xcb, 0xc6, 0x1d, 0xc5, 0xb6, 0x0d, 0x9e, 0xdb, 0x86, 0xf6, 0x51, 0x55, 0x8d, 0xef, 0xba, 0xbc, + 0x12, 0x16, 0x5c, 0xbf, 0x5b, 0xec, 0x62, 0x47, 0x64, 0xbe, 0x28, 0xbb, 0x2c, 0x8f, 0xd0, 0xc7, + 0xfe, 0xb1, 0xe3, 0xce, 0x48, 0xf4, 0x37, 0x4d, 0xfb, 0x65, 0x24, 0xb2, 0xb7, 0xff, 0xeb, 0xc8, + 0xf3, 0x77, 0x25, 0xe6, 0xae, 0xb0, 0x61, 0x6f, 0x64, 0xc3, 0x7d, 0x39, 0xa9, 0xb5, 0x2c, 0xf0, + 0xdf, 0xf8, 0x47, 0x00, 0x00, 0x00, 0xff, 0xff, 0x39, 0x20, 0xe1, 0xfe, 0xa4, 0x22, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1/session.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1/session.pb.go new file mode 100644 index 0000000..28e66c5 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1/session.pb.go @@ -0,0 +1,1258 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/dialogflow/v2beta1/session.proto + +package dialogflow + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf4 "github.com/golang/protobuf/ptypes/struct" +import google_rpc "google.golang.org/genproto/googleapis/rpc/status" +import google_type "google.golang.org/genproto/googleapis/type/latlng" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Audio encoding of the audio content sent in the conversational query request. +// Refer to the [Cloud Speech API documentation](/speech/docs/basics) for more +// details. +type AudioEncoding int32 + +const ( + // Not specified. + AudioEncoding_AUDIO_ENCODING_UNSPECIFIED AudioEncoding = 0 + // Uncompressed 16-bit signed little-endian samples (Linear PCM). + AudioEncoding_AUDIO_ENCODING_LINEAR_16 AudioEncoding = 1 + // [`FLAC`](https://xiph.org/flac/documentation.html) (Free Lossless Audio + // Codec) is the recommended encoding because it is lossless (therefore + // recognition is not compromised) and requires only about half the + // bandwidth of `LINEAR16`. `FLAC` stream encoding supports 16-bit and + // 24-bit samples, however, not all fields in `STREAMINFO` are supported. + AudioEncoding_AUDIO_ENCODING_FLAC AudioEncoding = 2 + // 8-bit samples that compand 14-bit audio samples using G.711 PCMU/mu-law. + AudioEncoding_AUDIO_ENCODING_MULAW AudioEncoding = 3 + // Adaptive Multi-Rate Narrowband codec. `sample_rate_hertz` must be 8000. + AudioEncoding_AUDIO_ENCODING_AMR AudioEncoding = 4 + // Adaptive Multi-Rate Wideband codec. `sample_rate_hertz` must be 16000. + AudioEncoding_AUDIO_ENCODING_AMR_WB AudioEncoding = 5 + // Opus encoded audio frames in Ogg container + // ([OggOpus](https://wiki.xiph.org/OggOpus)). + // `sample_rate_hertz` must be 16000. + AudioEncoding_AUDIO_ENCODING_OGG_OPUS AudioEncoding = 6 + // Although the use of lossy encodings is not recommended, if a very low + // bitrate encoding is required, `OGG_OPUS` is highly preferred over + // Speex encoding. The [Speex](https://speex.org/) encoding supported by + // Dialogflow API has a header byte in each block, as in MIME type + // `audio/x-speex-with-header-byte`. + // It is a variant of the RTP Speex encoding defined in + // [RFC 5574](https://tools.ietf.org/html/rfc5574). + // The stream is a sequence of blocks, one block per RTP packet. Each block + // starts with a byte containing the length of the block, in bytes, followed + // by one or more frames of Speex data, padded to an integral number of + // bytes (octets) as specified in RFC 5574. In other words, each RTP header + // is replaced with a single byte containing the block length. Only Speex + // wideband is supported. `sample_rate_hertz` must be 16000. + AudioEncoding_AUDIO_ENCODING_SPEEX_WITH_HEADER_BYTE AudioEncoding = 7 +) + +var AudioEncoding_name = map[int32]string{ + 0: "AUDIO_ENCODING_UNSPECIFIED", + 1: "AUDIO_ENCODING_LINEAR_16", + 2: "AUDIO_ENCODING_FLAC", + 3: "AUDIO_ENCODING_MULAW", + 4: "AUDIO_ENCODING_AMR", + 5: "AUDIO_ENCODING_AMR_WB", + 6: "AUDIO_ENCODING_OGG_OPUS", + 7: "AUDIO_ENCODING_SPEEX_WITH_HEADER_BYTE", +} +var AudioEncoding_value = map[string]int32{ + "AUDIO_ENCODING_UNSPECIFIED": 0, + "AUDIO_ENCODING_LINEAR_16": 1, + "AUDIO_ENCODING_FLAC": 2, + "AUDIO_ENCODING_MULAW": 3, + "AUDIO_ENCODING_AMR": 4, + "AUDIO_ENCODING_AMR_WB": 5, + "AUDIO_ENCODING_OGG_OPUS": 6, + "AUDIO_ENCODING_SPEEX_WITH_HEADER_BYTE": 7, +} + +func (x AudioEncoding) String() string { + return proto.EnumName(AudioEncoding_name, int32(x)) +} +func (AudioEncoding) EnumDescriptor() ([]byte, []int) { return fileDescriptor4, []int{0} } + +// Type of the response message. +type StreamingRecognitionResult_MessageType int32 + +const ( + // Not specified. Should never be used. + StreamingRecognitionResult_MESSAGE_TYPE_UNSPECIFIED StreamingRecognitionResult_MessageType = 0 + // Message contains a (possibly partial) transcript. + StreamingRecognitionResult_TRANSCRIPT StreamingRecognitionResult_MessageType = 1 + // Event indicates that the server has detected the end of the user's speech + // utterance and expects no additional speech. Therefore, the server will + // not process additional audio (although it may subsequently return + // additional results). The client should stop sending additional audio + // data, half-close the gRPC connection, and wait for any additional results + // until the server closes the gRPC connection. This message is only sent if + // `single_utterance` was set to `true`, and is not used otherwise. + StreamingRecognitionResult_END_OF_SINGLE_UTTERANCE StreamingRecognitionResult_MessageType = 2 +) + +var StreamingRecognitionResult_MessageType_name = map[int32]string{ + 0: "MESSAGE_TYPE_UNSPECIFIED", + 1: "TRANSCRIPT", + 2: "END_OF_SINGLE_UTTERANCE", +} +var StreamingRecognitionResult_MessageType_value = map[string]int32{ + "MESSAGE_TYPE_UNSPECIFIED": 0, + "TRANSCRIPT": 1, + "END_OF_SINGLE_UTTERANCE": 2, +} + +func (x StreamingRecognitionResult_MessageType) String() string { + return proto.EnumName(StreamingRecognitionResult_MessageType_name, int32(x)) +} +func (StreamingRecognitionResult_MessageType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor4, []int{7, 0} +} + +// The request to detect user's intent. +type DetectIntentRequest struct { + // Required. The name of the session this query is sent to. Format: + // `projects//agent/sessions/`, or + // `projects//agent/runtimes//sessions/`. + // Note: Runtimes are under construction and will be available soon. + // If is not specified, we assume default 'sandbox' runtime. + // It's up to the API caller to choose an appropriate session ID. It can be + // a random number or some type of user identifier (preferably hashed). + // The length of the session ID must not exceed 36 bytes. + Session string `protobuf:"bytes,1,opt,name=session" json:"session,omitempty"` + // Optional. The parameters of this query. + QueryParams *QueryParameters `protobuf:"bytes,2,opt,name=query_params,json=queryParams" json:"query_params,omitempty"` + // Required. The input specification. It can be set to: + // + // 1. an audio config + // which instructs the speech recognizer how to process the speech audio, + // + // 2. a conversational query in the form of text, or + // + // 3. an event that specifies which intent to trigger. + QueryInput *QueryInput `protobuf:"bytes,3,opt,name=query_input,json=queryInput" json:"query_input,omitempty"` + // Optional. The natural language speech audio to be processed. This field + // should be populated iff `query_input` is set to an input audio config. + // A single request can contain up to 1 minute of speech audio data. + InputAudio []byte `protobuf:"bytes,5,opt,name=input_audio,json=inputAudio,proto3" json:"input_audio,omitempty"` +} + +func (m *DetectIntentRequest) Reset() { *m = DetectIntentRequest{} } +func (m *DetectIntentRequest) String() string { return proto.CompactTextString(m) } +func (*DetectIntentRequest) ProtoMessage() {} +func (*DetectIntentRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{0} } + +func (m *DetectIntentRequest) GetSession() string { + if m != nil { + return m.Session + } + return "" +} + +func (m *DetectIntentRequest) GetQueryParams() *QueryParameters { + if m != nil { + return m.QueryParams + } + return nil +} + +func (m *DetectIntentRequest) GetQueryInput() *QueryInput { + if m != nil { + return m.QueryInput + } + return nil +} + +func (m *DetectIntentRequest) GetInputAudio() []byte { + if m != nil { + return m.InputAudio + } + return nil +} + +// The message returned from the DetectIntent method. +type DetectIntentResponse struct { + // The unique identifier of the response. It can be used to + // locate a response in the training example set or for reporting issues. + ResponseId string `protobuf:"bytes,1,opt,name=response_id,json=responseId" json:"response_id,omitempty"` + // The results of the conversational query or event processing. + QueryResult *QueryResult `protobuf:"bytes,2,opt,name=query_result,json=queryResult" json:"query_result,omitempty"` + // Specifies the status of the webhook request. `webhook_status` + // is never populated in webhook requests. + WebhookStatus *google_rpc.Status `protobuf:"bytes,3,opt,name=webhook_status,json=webhookStatus" json:"webhook_status,omitempty"` +} + +func (m *DetectIntentResponse) Reset() { *m = DetectIntentResponse{} } +func (m *DetectIntentResponse) String() string { return proto.CompactTextString(m) } +func (*DetectIntentResponse) ProtoMessage() {} +func (*DetectIntentResponse) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{1} } + +func (m *DetectIntentResponse) GetResponseId() string { + if m != nil { + return m.ResponseId + } + return "" +} + +func (m *DetectIntentResponse) GetQueryResult() *QueryResult { + if m != nil { + return m.QueryResult + } + return nil +} + +func (m *DetectIntentResponse) GetWebhookStatus() *google_rpc.Status { + if m != nil { + return m.WebhookStatus + } + return nil +} + +// Represents the parameters of the conversational query. +type QueryParameters struct { + // Optional. The time zone of this conversational query from the + // [time zone database](https://www.iana.org/time-zones), e.g., + // America/New_York, Europe/Paris. If not provided, the time zone specified in + // agent settings is used. + TimeZone string `protobuf:"bytes,1,opt,name=time_zone,json=timeZone" json:"time_zone,omitempty"` + // Optional. The geo location of this conversational query. + GeoLocation *google_type.LatLng `protobuf:"bytes,2,opt,name=geo_location,json=geoLocation" json:"geo_location,omitempty"` + // Optional. The collection of contexts to be activated before this query is + // executed. + Contexts []*Context `protobuf:"bytes,3,rep,name=contexts" json:"contexts,omitempty"` + // Optional. Specifies whether to delete all contexts in the current session + // before the new ones are activated. + ResetContexts bool `protobuf:"varint,4,opt,name=reset_contexts,json=resetContexts" json:"reset_contexts,omitempty"` + // Optional. The collection of session entity types to replace or extend + // developer entities with for this query only. The entity synonyms apply + // to all languages. + SessionEntityTypes []*SessionEntityType `protobuf:"bytes,5,rep,name=session_entity_types,json=sessionEntityTypes" json:"session_entity_types,omitempty"` + // Optional. This field can be used to pass custom data into the webhook + // associated with the agent. Arbitrary JSON objects are supported. + Payload *google_protobuf4.Struct `protobuf:"bytes,6,opt,name=payload" json:"payload,omitempty"` +} + +func (m *QueryParameters) Reset() { *m = QueryParameters{} } +func (m *QueryParameters) String() string { return proto.CompactTextString(m) } +func (*QueryParameters) ProtoMessage() {} +func (*QueryParameters) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{2} } + +func (m *QueryParameters) GetTimeZone() string { + if m != nil { + return m.TimeZone + } + return "" +} + +func (m *QueryParameters) GetGeoLocation() *google_type.LatLng { + if m != nil { + return m.GeoLocation + } + return nil +} + +func (m *QueryParameters) GetContexts() []*Context { + if m != nil { + return m.Contexts + } + return nil +} + +func (m *QueryParameters) GetResetContexts() bool { + if m != nil { + return m.ResetContexts + } + return false +} + +func (m *QueryParameters) GetSessionEntityTypes() []*SessionEntityType { + if m != nil { + return m.SessionEntityTypes + } + return nil +} + +func (m *QueryParameters) GetPayload() *google_protobuf4.Struct { + if m != nil { + return m.Payload + } + return nil +} + +// Represents the query input. It can contain either: +// +// 1. An audio config which +// instructs the speech recognizer how to process the speech audio. +// +// 2. A conversational query in the form of text,. +// +// 3. An event that specifies which intent to trigger. +type QueryInput struct { + // Required. The input specification. + // + // Types that are valid to be assigned to Input: + // *QueryInput_AudioConfig + // *QueryInput_Text + // *QueryInput_Event + Input isQueryInput_Input `protobuf_oneof:"input"` +} + +func (m *QueryInput) Reset() { *m = QueryInput{} } +func (m *QueryInput) String() string { return proto.CompactTextString(m) } +func (*QueryInput) ProtoMessage() {} +func (*QueryInput) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{3} } + +type isQueryInput_Input interface { + isQueryInput_Input() +} + +type QueryInput_AudioConfig struct { + AudioConfig *InputAudioConfig `protobuf:"bytes,1,opt,name=audio_config,json=audioConfig,oneof"` +} +type QueryInput_Text struct { + Text *TextInput `protobuf:"bytes,2,opt,name=text,oneof"` +} +type QueryInput_Event struct { + Event *EventInput `protobuf:"bytes,3,opt,name=event,oneof"` +} + +func (*QueryInput_AudioConfig) isQueryInput_Input() {} +func (*QueryInput_Text) isQueryInput_Input() {} +func (*QueryInput_Event) isQueryInput_Input() {} + +func (m *QueryInput) GetInput() isQueryInput_Input { + if m != nil { + return m.Input + } + return nil +} + +func (m *QueryInput) GetAudioConfig() *InputAudioConfig { + if x, ok := m.GetInput().(*QueryInput_AudioConfig); ok { + return x.AudioConfig + } + return nil +} + +func (m *QueryInput) GetText() *TextInput { + if x, ok := m.GetInput().(*QueryInput_Text); ok { + return x.Text + } + return nil +} + +func (m *QueryInput) GetEvent() *EventInput { + if x, ok := m.GetInput().(*QueryInput_Event); ok { + return x.Event + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*QueryInput) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _QueryInput_OneofMarshaler, _QueryInput_OneofUnmarshaler, _QueryInput_OneofSizer, []interface{}{ + (*QueryInput_AudioConfig)(nil), + (*QueryInput_Text)(nil), + (*QueryInput_Event)(nil), + } +} + +func _QueryInput_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*QueryInput) + // input + switch x := m.Input.(type) { + case *QueryInput_AudioConfig: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.AudioConfig); err != nil { + return err + } + case *QueryInput_Text: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Text); err != nil { + return err + } + case *QueryInput_Event: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Event); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("QueryInput.Input has unexpected type %T", x) + } + return nil +} + +func _QueryInput_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*QueryInput) + switch tag { + case 1: // input.audio_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(InputAudioConfig) + err := b.DecodeMessage(msg) + m.Input = &QueryInput_AudioConfig{msg} + return true, err + case 2: // input.text + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TextInput) + err := b.DecodeMessage(msg) + m.Input = &QueryInput_Text{msg} + return true, err + case 3: // input.event + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(EventInput) + err := b.DecodeMessage(msg) + m.Input = &QueryInput_Event{msg} + return true, err + default: + return false, nil + } +} + +func _QueryInput_OneofSizer(msg proto.Message) (n int) { + m := msg.(*QueryInput) + // input + switch x := m.Input.(type) { + case *QueryInput_AudioConfig: + s := proto.Size(x.AudioConfig) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *QueryInput_Text: + s := proto.Size(x.Text) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *QueryInput_Event: + s := proto.Size(x.Event) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Represents the result of conversational query or event processing. +type QueryResult struct { + // The original conversational query text: + // - If natural language text was provided as input, `query_text` contains + // a copy of the input. + // - If natural language speech audio was provided as input, `query_text` + // contains the speech recognition result. If speech recognizer produced + // multiple alternatives, a particular one is picked. + // - If an event was provided as input, `query_text` is not set. + QueryText string `protobuf:"bytes,1,opt,name=query_text,json=queryText" json:"query_text,omitempty"` + // The language that was triggered during intent detection. + // See [Language Support](https://dialogflow.com/docs/reference/language) + // for a list of the currently supported language codes. + LanguageCode string `protobuf:"bytes,15,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` + // The Speech recognition confidence between 0.0 and 1.0. A higher number + // indicates an estimated greater likelihood that the recognized words are + // correct. The default of 0.0 is a sentinel value indicating that confidence + // was not set. + // + // You should not rely on this field as it isn't guaranteed to be accurate, or + // even set. In particular this field isn't set in Webhook calls and for + // StreamingDetectIntent since the streaming endpoint has separate confidence + // estimates per portion of the audio in StreamingRecognitionResult. + SpeechRecognitionConfidence float32 `protobuf:"fixed32,2,opt,name=speech_recognition_confidence,json=speechRecognitionConfidence" json:"speech_recognition_confidence,omitempty"` + // The action name from the matched intent. + Action string `protobuf:"bytes,3,opt,name=action" json:"action,omitempty"` + // The collection of extracted parameters. + Parameters *google_protobuf4.Struct `protobuf:"bytes,4,opt,name=parameters" json:"parameters,omitempty"` + // This field is set to: + // - `false` if the matched intent has required parameters and not all of + // the required parameter values have been collected. + // - `true` if all required parameter values have been collected, or if the + // matched intent doesn't contain any required parameters. + AllRequiredParamsPresent bool `protobuf:"varint,5,opt,name=all_required_params_present,json=allRequiredParamsPresent" json:"all_required_params_present,omitempty"` + // The text to be pronounced to the user or shown on the screen. + FulfillmentText string `protobuf:"bytes,6,opt,name=fulfillment_text,json=fulfillmentText" json:"fulfillment_text,omitempty"` + // The collection of rich messages to present to the user. + FulfillmentMessages []*Intent_Message `protobuf:"bytes,7,rep,name=fulfillment_messages,json=fulfillmentMessages" json:"fulfillment_messages,omitempty"` + // If the query was fulfilled by a webhook call, this field is set to the + // value of the `source` field returned in the webhook response. + WebhookSource string `protobuf:"bytes,8,opt,name=webhook_source,json=webhookSource" json:"webhook_source,omitempty"` + // If the query was fulfilled by a webhook call, this field is set to the + // value of the `payload` field returned in the webhook response. + WebhookPayload *google_protobuf4.Struct `protobuf:"bytes,9,opt,name=webhook_payload,json=webhookPayload" json:"webhook_payload,omitempty"` + // The collection of output contexts. If applicable, + // `output_contexts.parameters` contains entries with name + // `.original` containing the original parameter values + // before the query. + OutputContexts []*Context `protobuf:"bytes,10,rep,name=output_contexts,json=outputContexts" json:"output_contexts,omitempty"` + // The intent that matched the conversational query. Some, not + // all fields are filled in this message, including but not limited to: + // `name`, `display_name` and `webhook_state`. + Intent *Intent `protobuf:"bytes,11,opt,name=intent" json:"intent,omitempty"` + // The intent detection confidence. Values range from 0.0 + // (completely uncertain) to 1.0 (completely certain). + IntentDetectionConfidence float32 `protobuf:"fixed32,12,opt,name=intent_detection_confidence,json=intentDetectionConfidence" json:"intent_detection_confidence,omitempty"` + // The free-form diagnostic info. For example, this field + // could contain webhook call latency. + DiagnosticInfo *google_protobuf4.Struct `protobuf:"bytes,14,opt,name=diagnostic_info,json=diagnosticInfo" json:"diagnostic_info,omitempty"` +} + +func (m *QueryResult) Reset() { *m = QueryResult{} } +func (m *QueryResult) String() string { return proto.CompactTextString(m) } +func (*QueryResult) ProtoMessage() {} +func (*QueryResult) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{4} } + +func (m *QueryResult) GetQueryText() string { + if m != nil { + return m.QueryText + } + return "" +} + +func (m *QueryResult) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +func (m *QueryResult) GetSpeechRecognitionConfidence() float32 { + if m != nil { + return m.SpeechRecognitionConfidence + } + return 0 +} + +func (m *QueryResult) GetAction() string { + if m != nil { + return m.Action + } + return "" +} + +func (m *QueryResult) GetParameters() *google_protobuf4.Struct { + if m != nil { + return m.Parameters + } + return nil +} + +func (m *QueryResult) GetAllRequiredParamsPresent() bool { + if m != nil { + return m.AllRequiredParamsPresent + } + return false +} + +func (m *QueryResult) GetFulfillmentText() string { + if m != nil { + return m.FulfillmentText + } + return "" +} + +func (m *QueryResult) GetFulfillmentMessages() []*Intent_Message { + if m != nil { + return m.FulfillmentMessages + } + return nil +} + +func (m *QueryResult) GetWebhookSource() string { + if m != nil { + return m.WebhookSource + } + return "" +} + +func (m *QueryResult) GetWebhookPayload() *google_protobuf4.Struct { + if m != nil { + return m.WebhookPayload + } + return nil +} + +func (m *QueryResult) GetOutputContexts() []*Context { + if m != nil { + return m.OutputContexts + } + return nil +} + +func (m *QueryResult) GetIntent() *Intent { + if m != nil { + return m.Intent + } + return nil +} + +func (m *QueryResult) GetIntentDetectionConfidence() float32 { + if m != nil { + return m.IntentDetectionConfidence + } + return 0 +} + +func (m *QueryResult) GetDiagnosticInfo() *google_protobuf4.Struct { + if m != nil { + return m.DiagnosticInfo + } + return nil +} + +// The top-level message sent by the client to the +// `StreamingDetectIntent` method. +// +// Multiple request messages should be sent in order: +// +// 1. The first message must contain `session`, `query_input` plus optionally +// `query_params` and/or `single_utterance`. The message must not contain `input_audio`. +// +// 2. If `query_input` was set to a streaming input audio config, +// all subsequent messages must contain only `input_audio`. +// Otherwise, finish the request stream. +type StreamingDetectIntentRequest struct { + // Required. The name of the session the query is sent to. + // Format of the session name: + // `projects//agent/sessions/`, or + // `projects//agent/runtimes//sessions/`. + // Note: Runtimes are under construction and will be available soon. + // If is not specified, we assume default 'sandbox' runtime. + // It’s up to the API caller to choose an appropriate . It can be + // a random number or some type of user identifier (preferably hashed). + // The length of the session ID must not exceed 36 characters. + Session string `protobuf:"bytes,1,opt,name=session" json:"session,omitempty"` + // Optional. The parameters of this query. + QueryParams *QueryParameters `protobuf:"bytes,2,opt,name=query_params,json=queryParams" json:"query_params,omitempty"` + // Required. The input specification. It can be set to: + // + // 1. an audio config which instructs the speech recognizer how to process + // the speech audio, + // + // 2. a conversational query in the form of text, or + // + // 3. an event that specifies which intent to trigger. + QueryInput *QueryInput `protobuf:"bytes,3,opt,name=query_input,json=queryInput" json:"query_input,omitempty"` + // Optional. If `false` (default), recognition does not cease until the + // client closes the stream. + // If `true`, the recognizer will detect a single spoken utterance in input + // audio. Recognition ceases when it detects the audio's voice has + // stopped or paused. In this case, once a detected intent is received, the + // client should close the stream and start a new request with a new stream as + // needed. + // This setting is ignored when `query_input` is a piece of text or an event. + SingleUtterance bool `protobuf:"varint,4,opt,name=single_utterance,json=singleUtterance" json:"single_utterance,omitempty"` + // Optional. The input audio content to be recognized. Must be sent if + // `query_input` was set to a streaming input audio config. The complete audio + // over all streaming messages must not exceed 1 minute. + InputAudio []byte `protobuf:"bytes,6,opt,name=input_audio,json=inputAudio,proto3" json:"input_audio,omitempty"` +} + +func (m *StreamingDetectIntentRequest) Reset() { *m = StreamingDetectIntentRequest{} } +func (m *StreamingDetectIntentRequest) String() string { return proto.CompactTextString(m) } +func (*StreamingDetectIntentRequest) ProtoMessage() {} +func (*StreamingDetectIntentRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{5} } + +func (m *StreamingDetectIntentRequest) GetSession() string { + if m != nil { + return m.Session + } + return "" +} + +func (m *StreamingDetectIntentRequest) GetQueryParams() *QueryParameters { + if m != nil { + return m.QueryParams + } + return nil +} + +func (m *StreamingDetectIntentRequest) GetQueryInput() *QueryInput { + if m != nil { + return m.QueryInput + } + return nil +} + +func (m *StreamingDetectIntentRequest) GetSingleUtterance() bool { + if m != nil { + return m.SingleUtterance + } + return false +} + +func (m *StreamingDetectIntentRequest) GetInputAudio() []byte { + if m != nil { + return m.InputAudio + } + return nil +} + +// The top-level message returned from the +// `StreamingDetectIntent` method. +// +// Multiple response messages can be returned in order: +// +// 1. If the input was set to streaming audio, the first one or more messages +// contain `recognition_result`. Each `recognition_result` represents a more +// complete transcript of what the user said. The last `recognition_result` +// has `is_final` set to `true`. +// +// 2. The next message contains `response_id`, `query_result` +// and optionally `webhook_status` if a WebHook was called. +type StreamingDetectIntentResponse struct { + // The unique identifier of the response. It can be used to + // locate a response in the training example set or for reporting issues. + ResponseId string `protobuf:"bytes,1,opt,name=response_id,json=responseId" json:"response_id,omitempty"` + // The result of speech recognition. + RecognitionResult *StreamingRecognitionResult `protobuf:"bytes,2,opt,name=recognition_result,json=recognitionResult" json:"recognition_result,omitempty"` + // The result of the conversational query or event processing. + QueryResult *QueryResult `protobuf:"bytes,3,opt,name=query_result,json=queryResult" json:"query_result,omitempty"` + // Specifies the status of the webhook request. + WebhookStatus *google_rpc.Status `protobuf:"bytes,4,opt,name=webhook_status,json=webhookStatus" json:"webhook_status,omitempty"` +} + +func (m *StreamingDetectIntentResponse) Reset() { *m = StreamingDetectIntentResponse{} } +func (m *StreamingDetectIntentResponse) String() string { return proto.CompactTextString(m) } +func (*StreamingDetectIntentResponse) ProtoMessage() {} +func (*StreamingDetectIntentResponse) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{6} } + +func (m *StreamingDetectIntentResponse) GetResponseId() string { + if m != nil { + return m.ResponseId + } + return "" +} + +func (m *StreamingDetectIntentResponse) GetRecognitionResult() *StreamingRecognitionResult { + if m != nil { + return m.RecognitionResult + } + return nil +} + +func (m *StreamingDetectIntentResponse) GetQueryResult() *QueryResult { + if m != nil { + return m.QueryResult + } + return nil +} + +func (m *StreamingDetectIntentResponse) GetWebhookStatus() *google_rpc.Status { + if m != nil { + return m.WebhookStatus + } + return nil +} + +// Contains a speech recognition result corresponding to a portion of the audio +// that is currently being processed or an indication that this is the end +// of the single requested utterance. +// +// Example: +// +// 1. transcript: "tube" +// +// 2. transcript: "to be a" +// +// 3. transcript: "to be" +// +// 4. transcript: "to be or not to be" +// is_final: true +// +// 5. transcript: " that's" +// +// 6. transcript: " that is" +// +// 7. recognition_event_type: `RECOGNITION_EVENT_END_OF_SINGLE_UTTERANCE` +// +// 8. transcript: " that is the question" +// is_final: true +// +// Only two of the responses contain final results (#4 and #8 indicated by +// `is_final: true`). Concatenating these generates the full transcript: "to be +// or not to be that is the question". +// +// In each response we populate: +// +// * for `MESSAGE_TYPE_TRANSCRIPT`: `transcript` and possibly `is_final`. +// +// * for `MESSAGE_TYPE_END_OF_SINGLE_UTTERANCE`: only `event_type`. +type StreamingRecognitionResult struct { + // Type of the result message. + MessageType StreamingRecognitionResult_MessageType `protobuf:"varint,1,opt,name=message_type,json=messageType,enum=google.cloud.dialogflow.v2beta1.StreamingRecognitionResult_MessageType" json:"message_type,omitempty"` + // Transcript text representing the words that the user spoke. + // Populated if and only if `event_type` = `RECOGNITION_EVENT_TRANSCRIPT`. + Transcript string `protobuf:"bytes,2,opt,name=transcript" json:"transcript,omitempty"` + // The default of 0.0 is a sentinel value indicating `confidence` was not set. + // If `false`, the `StreamingRecognitionResult` represents an + // interim result that may change. If `true`, the recognizer will not return + // any further hypotheses about this piece of the audio. May only be populated + // for `event_type` = `RECOGNITION_EVENT_TRANSCRIPT`. + IsFinal bool `protobuf:"varint,3,opt,name=is_final,json=isFinal" json:"is_final,omitempty"` + // The Speech confidence between 0.0 and 1.0 for the current portion of audio. + // A higher number indicates an estimated greater likelihood that the + // recognized words are correct. The default of 0.0 is a sentinel value + // indicating that confidence was not set. + // + // This field is typically only provided if `is_final` is true and you should + // not rely on it being accurate or even set. + Confidence float32 `protobuf:"fixed32,4,opt,name=confidence" json:"confidence,omitempty"` +} + +func (m *StreamingRecognitionResult) Reset() { *m = StreamingRecognitionResult{} } +func (m *StreamingRecognitionResult) String() string { return proto.CompactTextString(m) } +func (*StreamingRecognitionResult) ProtoMessage() {} +func (*StreamingRecognitionResult) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{7} } + +func (m *StreamingRecognitionResult) GetMessageType() StreamingRecognitionResult_MessageType { + if m != nil { + return m.MessageType + } + return StreamingRecognitionResult_MESSAGE_TYPE_UNSPECIFIED +} + +func (m *StreamingRecognitionResult) GetTranscript() string { + if m != nil { + return m.Transcript + } + return "" +} + +func (m *StreamingRecognitionResult) GetIsFinal() bool { + if m != nil { + return m.IsFinal + } + return false +} + +func (m *StreamingRecognitionResult) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + +// Instructs the speech recognizer how to process the audio content. +type InputAudioConfig struct { + // Required. Audio encoding of the audio content to process. + AudioEncoding AudioEncoding `protobuf:"varint,1,opt,name=audio_encoding,json=audioEncoding,enum=google.cloud.dialogflow.v2beta1.AudioEncoding" json:"audio_encoding,omitempty"` + // Required. Sample rate (in Hertz) of the audio content sent in the query. + // Refer to [Cloud Speech API documentation](/speech/docs/basics) for more + // details. + SampleRateHertz int32 `protobuf:"varint,2,opt,name=sample_rate_hertz,json=sampleRateHertz" json:"sample_rate_hertz,omitempty"` + // Required. The language of the supplied audio. Dialogflow does not do + // translations. See [Language + // Support](https://dialogflow.com/docs/languages) for a list of the + // currently supported language codes. Note that queries in the same session + // do not necessarily need to specify the same language. + LanguageCode string `protobuf:"bytes,3,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` + // Optional. The collection of phrase hints which are used to boost accuracy + // of speech recognition. + // Refer to [Cloud Speech API documentation](/speech/docs/basics#phrase-hints) + // for more details. + PhraseHints []string `protobuf:"bytes,4,rep,name=phrase_hints,json=phraseHints" json:"phrase_hints,omitempty"` +} + +func (m *InputAudioConfig) Reset() { *m = InputAudioConfig{} } +func (m *InputAudioConfig) String() string { return proto.CompactTextString(m) } +func (*InputAudioConfig) ProtoMessage() {} +func (*InputAudioConfig) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{8} } + +func (m *InputAudioConfig) GetAudioEncoding() AudioEncoding { + if m != nil { + return m.AudioEncoding + } + return AudioEncoding_AUDIO_ENCODING_UNSPECIFIED +} + +func (m *InputAudioConfig) GetSampleRateHertz() int32 { + if m != nil { + return m.SampleRateHertz + } + return 0 +} + +func (m *InputAudioConfig) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +func (m *InputAudioConfig) GetPhraseHints() []string { + if m != nil { + return m.PhraseHints + } + return nil +} + +// Represents the natural language text to be processed. +type TextInput struct { + // Required. The UTF-8 encoded natural language text to be processed. + // Text length must not exceed 256 bytes. + Text string `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"` + // Required. The language of this conversational query. See [Language + // Support](https://dialogflow.com/docs/languages) for a list of the + // currently supported language codes. Note that queries in the same session + // do not necessarily need to specify the same language. + LanguageCode string `protobuf:"bytes,2,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` +} + +func (m *TextInput) Reset() { *m = TextInput{} } +func (m *TextInput) String() string { return proto.CompactTextString(m) } +func (*TextInput) ProtoMessage() {} +func (*TextInput) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{9} } + +func (m *TextInput) GetText() string { + if m != nil { + return m.Text + } + return "" +} + +func (m *TextInput) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +// Events allow for matching intents by event name instead of the natural +// language input. For instance, input `` can trigger a personalized welcome response. +// The parameter `name` may be used by the agent in the response: +// `“Hello #welcome_event.name! What can I do for you today?”`. +type EventInput struct { + // Required. The unique identifier of the event. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Optional. The collection of parameters associated with the event. + Parameters *google_protobuf4.Struct `protobuf:"bytes,2,opt,name=parameters" json:"parameters,omitempty"` + // Required. The language of this query. See [Language + // Support](https://dialogflow.com/docs/languages) for a list of the + // currently supported language codes. Note that queries in the same session + // do not necessarily need to specify the same language. + LanguageCode string `protobuf:"bytes,3,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` +} + +func (m *EventInput) Reset() { *m = EventInput{} } +func (m *EventInput) String() string { return proto.CompactTextString(m) } +func (*EventInput) ProtoMessage() {} +func (*EventInput) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{10} } + +func (m *EventInput) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *EventInput) GetParameters() *google_protobuf4.Struct { + if m != nil { + return m.Parameters + } + return nil +} + +func (m *EventInput) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +func init() { + proto.RegisterType((*DetectIntentRequest)(nil), "google.cloud.dialogflow.v2beta1.DetectIntentRequest") + proto.RegisterType((*DetectIntentResponse)(nil), "google.cloud.dialogflow.v2beta1.DetectIntentResponse") + proto.RegisterType((*QueryParameters)(nil), "google.cloud.dialogflow.v2beta1.QueryParameters") + proto.RegisterType((*QueryInput)(nil), "google.cloud.dialogflow.v2beta1.QueryInput") + proto.RegisterType((*QueryResult)(nil), "google.cloud.dialogflow.v2beta1.QueryResult") + proto.RegisterType((*StreamingDetectIntentRequest)(nil), "google.cloud.dialogflow.v2beta1.StreamingDetectIntentRequest") + proto.RegisterType((*StreamingDetectIntentResponse)(nil), "google.cloud.dialogflow.v2beta1.StreamingDetectIntentResponse") + proto.RegisterType((*StreamingRecognitionResult)(nil), "google.cloud.dialogflow.v2beta1.StreamingRecognitionResult") + proto.RegisterType((*InputAudioConfig)(nil), "google.cloud.dialogflow.v2beta1.InputAudioConfig") + proto.RegisterType((*TextInput)(nil), "google.cloud.dialogflow.v2beta1.TextInput") + proto.RegisterType((*EventInput)(nil), "google.cloud.dialogflow.v2beta1.EventInput") + proto.RegisterEnum("google.cloud.dialogflow.v2beta1.AudioEncoding", AudioEncoding_name, AudioEncoding_value) + proto.RegisterEnum("google.cloud.dialogflow.v2beta1.StreamingRecognitionResult_MessageType", StreamingRecognitionResult_MessageType_name, StreamingRecognitionResult_MessageType_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for Sessions service + +type SessionsClient interface { + // Processes a natural language query and returns structured, actionable data + // as a result. This method is not idempotent, because it may cause contexts + // and session entity types to be updated, which in turn might affect + // results of future queries. + DetectIntent(ctx context.Context, in *DetectIntentRequest, opts ...grpc.CallOption) (*DetectIntentResponse, error) + // Processes a natural language query in audio format in a streaming fashion + // and returns structured, actionable data as a result. This method is only + // available via the gRPC API (not REST). + StreamingDetectIntent(ctx context.Context, opts ...grpc.CallOption) (Sessions_StreamingDetectIntentClient, error) +} + +type sessionsClient struct { + cc *grpc.ClientConn +} + +func NewSessionsClient(cc *grpc.ClientConn) SessionsClient { + return &sessionsClient{cc} +} + +func (c *sessionsClient) DetectIntent(ctx context.Context, in *DetectIntentRequest, opts ...grpc.CallOption) (*DetectIntentResponse, error) { + out := new(DetectIntentResponse) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.Sessions/DetectIntent", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sessionsClient) StreamingDetectIntent(ctx context.Context, opts ...grpc.CallOption) (Sessions_StreamingDetectIntentClient, error) { + stream, err := grpc.NewClientStream(ctx, &_Sessions_serviceDesc.Streams[0], c.cc, "/google.cloud.dialogflow.v2beta1.Sessions/StreamingDetectIntent", opts...) + if err != nil { + return nil, err + } + x := &sessionsStreamingDetectIntentClient{stream} + return x, nil +} + +type Sessions_StreamingDetectIntentClient interface { + Send(*StreamingDetectIntentRequest) error + Recv() (*StreamingDetectIntentResponse, error) + grpc.ClientStream +} + +type sessionsStreamingDetectIntentClient struct { + grpc.ClientStream +} + +func (x *sessionsStreamingDetectIntentClient) Send(m *StreamingDetectIntentRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *sessionsStreamingDetectIntentClient) Recv() (*StreamingDetectIntentResponse, error) { + m := new(StreamingDetectIntentResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// Server API for Sessions service + +type SessionsServer interface { + // Processes a natural language query and returns structured, actionable data + // as a result. This method is not idempotent, because it may cause contexts + // and session entity types to be updated, which in turn might affect + // results of future queries. + DetectIntent(context.Context, *DetectIntentRequest) (*DetectIntentResponse, error) + // Processes a natural language query in audio format in a streaming fashion + // and returns structured, actionable data as a result. This method is only + // available via the gRPC API (not REST). + StreamingDetectIntent(Sessions_StreamingDetectIntentServer) error +} + +func RegisterSessionsServer(s *grpc.Server, srv SessionsServer) { + s.RegisterService(&_Sessions_serviceDesc, srv) +} + +func _Sessions_DetectIntent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DetectIntentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SessionsServer).DetectIntent(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.Sessions/DetectIntent", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SessionsServer).DetectIntent(ctx, req.(*DetectIntentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Sessions_StreamingDetectIntent_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(SessionsServer).StreamingDetectIntent(&sessionsStreamingDetectIntentServer{stream}) +} + +type Sessions_StreamingDetectIntentServer interface { + Send(*StreamingDetectIntentResponse) error + Recv() (*StreamingDetectIntentRequest, error) + grpc.ServerStream +} + +type sessionsStreamingDetectIntentServer struct { + grpc.ServerStream +} + +func (x *sessionsStreamingDetectIntentServer) Send(m *StreamingDetectIntentResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *sessionsStreamingDetectIntentServer) Recv() (*StreamingDetectIntentRequest, error) { + m := new(StreamingDetectIntentRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +var _Sessions_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.dialogflow.v2beta1.Sessions", + HandlerType: (*SessionsServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "DetectIntent", + Handler: _Sessions_DetectIntent_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "StreamingDetectIntent", + Handler: _Sessions_StreamingDetectIntent_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: "google/cloud/dialogflow/v2beta1/session.proto", +} + +func init() { proto.RegisterFile("google/cloud/dialogflow/v2beta1/session.proto", fileDescriptor4) } + +var fileDescriptor4 = []byte{ + // 1601 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x58, 0xcd, 0x73, 0x23, 0x47, + 0x15, 0xdf, 0x91, 0xbf, 0x9f, 0x64, 0x5b, 0xe9, 0xdd, 0x64, 0x67, 0xed, 0xdd, 0xec, 0xa2, 0x54, + 0x0a, 0xaf, 0x09, 0x52, 0xd6, 0x40, 0xa8, 0x64, 0x6b, 0xc3, 0xca, 0xd2, 0xd8, 0x56, 0xe1, 0xb5, + 0x95, 0x96, 0x9c, 0x4d, 0xf6, 0xd2, 0xd5, 0x1e, 0xb5, 0xc6, 0xb3, 0x8c, 0xba, 0xc7, 0xd3, 0x3d, + 0x49, 0x1c, 0x0a, 0x0e, 0xdc, 0xb9, 0x00, 0x27, 0x8e, 0x5c, 0xa8, 0xca, 0x95, 0x0b, 0x07, 0x38, + 0xf1, 0x27, 0x70, 0xe6, 0xc6, 0x91, 0x1b, 0x1c, 0xa8, 0xe2, 0x42, 0x4d, 0x77, 0x8f, 0xa4, 0x95, + 0xbd, 0x2b, 0x05, 0x38, 0x71, 0x53, 0xbf, 0xf7, 0x7b, 0xaf, 0xdf, 0xfb, 0xcd, 0xfb, 0x68, 0x1b, + 0xbe, 0x1d, 0x08, 0x11, 0x44, 0xac, 0xe6, 0x47, 0x22, 0xed, 0xd5, 0x7a, 0x21, 0x8d, 0x44, 0xd0, + 0x8f, 0xc4, 0xe7, 0xb5, 0xcf, 0x76, 0x4e, 0x99, 0xa2, 0x0f, 0x6a, 0x92, 0x49, 0x19, 0x0a, 0x5e, + 0x8d, 0x13, 0xa1, 0x04, 0xba, 0x6b, 0xe0, 0x55, 0x0d, 0xaf, 0x8e, 0xe0, 0x55, 0x0b, 0xdf, 0xb8, + 0x6d, 0xfd, 0xd1, 0x38, 0xac, 0x51, 0xce, 0x85, 0xa2, 0x2a, 0x14, 0x5c, 0x1a, 0xf3, 0x8d, 0xa9, + 0xb7, 0xf9, 0x82, 0x2b, 0xf6, 0x85, 0xb2, 0xf0, 0x77, 0xa6, 0xc1, 0x43, 0xae, 0x18, 0xcf, 0xd1, + 0xef, 0xcf, 0x98, 0x0a, 0x61, 0x5c, 0x85, 0xea, 0x82, 0xa8, 0x8b, 0x98, 0x59, 0xd3, 0x3c, 0x6a, + 0x7d, 0x3a, 0x4d, 0xfb, 0x35, 0xa9, 0x92, 0xd4, 0xcf, 0x1d, 0xdf, 0xb4, 0xda, 0x24, 0xf6, 0x6b, + 0x52, 0x51, 0x95, 0xe6, 0xe9, 0xb8, 0x56, 0x91, 0x79, 0xaa, 0x45, 0x54, 0x45, 0x3c, 0x30, 0x9a, + 0xca, 0xdf, 0x1d, 0xb8, 0xde, 0x64, 0x8a, 0xf9, 0xaa, 0xa5, 0x43, 0xc4, 0xec, 0x3c, 0x65, 0x52, + 0x21, 0x17, 0x96, 0x6c, 0x14, 0xae, 0x73, 0xcf, 0xd9, 0x5a, 0xc1, 0xf9, 0x11, 0x75, 0xa0, 0x74, + 0x9e, 0xb2, 0xe4, 0x82, 0xc4, 0x34, 0xa1, 0x03, 0xe9, 0x16, 0xee, 0x39, 0x5b, 0xc5, 0x9d, 0x77, + 0xab, 0x53, 0x08, 0xaf, 0x7e, 0x94, 0x19, 0xb5, 0x33, 0x1b, 0xa6, 0x58, 0x22, 0x71, 0xf1, 0x7c, + 0x28, 0x90, 0xe8, 0x10, 0xcc, 0x91, 0x84, 0x3c, 0x4e, 0x95, 0x3b, 0xa7, 0x7d, 0x7e, 0x6b, 0x36, + 0x9f, 0xad, 0xcc, 0x04, 0xc3, 0xf9, 0xf0, 0x37, 0xba, 0x0b, 0x45, 0xed, 0x87, 0xd0, 0xb4, 0x17, + 0x0a, 0x77, 0xe1, 0x9e, 0xb3, 0x55, 0xc2, 0xa0, 0x45, 0xf5, 0x4c, 0x52, 0xf9, 0x93, 0x03, 0x37, + 0x5e, 0xcc, 0x5a, 0xc6, 0x82, 0x4b, 0x96, 0x59, 0x26, 0xf6, 0x37, 0x09, 0x7b, 0x36, 0x75, 0xc8, + 0x45, 0xad, 0x1e, 0x3a, 0xce, 0xb3, 0x4f, 0x98, 0x4c, 0x23, 0x65, 0xb3, 0x7f, 0x67, 0xb6, 0x48, + 0xb1, 0xb6, 0xb1, 0x99, 0x9b, 0x03, 0x7a, 0x1f, 0xd6, 0x3e, 0x67, 0xa7, 0x67, 0x42, 0xfc, 0x88, + 0x98, 0x4f, 0x66, 0x93, 0x47, 0xb9, 0xcb, 0x24, 0xf6, 0xab, 0x1d, 0xad, 0xc1, 0xab, 0x16, 0x69, + 0x8e, 0x95, 0xbf, 0x15, 0x60, 0x7d, 0x82, 0x55, 0xb4, 0x09, 0x2b, 0x2a, 0x1c, 0x30, 0xf2, 0xa5, + 0xe0, 0xcc, 0x86, 0xbf, 0x9c, 0x09, 0x9e, 0x09, 0xce, 0xd0, 0x7b, 0x50, 0x0a, 0x98, 0x20, 0x91, + 0xf0, 0x75, 0xb1, 0xdb, 0xe0, 0xaf, 0xe7, 0x37, 0xe9, 0x3a, 0x3b, 0xa4, 0xea, 0x90, 0x07, 0xb8, + 0x18, 0x30, 0x71, 0x68, 0x71, 0xa8, 0x09, 0xcb, 0xb6, 0xde, 0xb3, 0xe8, 0xe6, 0xb6, 0x8a, 0x3b, + 0x5b, 0x53, 0x13, 0x6e, 0x18, 0x03, 0x3c, 0xb4, 0x44, 0x6f, 0xc3, 0x5a, 0xc2, 0x24, 0x53, 0x64, + 0xe8, 0x6b, 0xfe, 0x9e, 0xb3, 0xb5, 0x8c, 0x57, 0xb5, 0xb4, 0x91, 0xc3, 0x7a, 0x70, 0xe3, 0x8a, + 0xfa, 0x97, 0xee, 0x82, 0xbe, 0x78, 0x67, 0xea, 0xc5, 0x1d, 0x63, 0xec, 0x69, 0xdb, 0xee, 0x45, + 0xcc, 0x30, 0x92, 0x93, 0x22, 0x89, 0x1e, 0xc0, 0x52, 0x4c, 0x2f, 0x22, 0x41, 0x7b, 0xee, 0xa2, + 0x66, 0xe1, 0x66, 0xee, 0x38, 0x6f, 0xad, 0x6a, 0x47, 0xb7, 0x16, 0xce, 0x71, 0x95, 0x7f, 0x38, + 0x00, 0xa3, 0x82, 0x43, 0x1f, 0x43, 0x49, 0x97, 0x57, 0x96, 0x4e, 0x3f, 0x0c, 0x34, 0xd9, 0xc5, + 0x9d, 0x07, 0x53, 0xe3, 0x6b, 0x0d, 0xcb, 0xb0, 0xa1, 0x0d, 0x0f, 0xae, 0xe1, 0x22, 0x1d, 0x1d, + 0xd1, 0x63, 0x98, 0xcf, 0x88, 0xb0, 0x1f, 0x67, 0x7b, 0xaa, 0xbf, 0x2e, 0xfb, 0x42, 0x69, 0x9f, + 0x07, 0xd7, 0xb0, 0xb6, 0x44, 0x0d, 0x58, 0x60, 0x9f, 0x31, 0x3e, 0x7b, 0x1b, 0x79, 0x19, 0x3a, + 0xf7, 0x61, 0x6c, 0x77, 0x97, 0x60, 0x41, 0x37, 0x4c, 0xe5, 0x77, 0x8b, 0x50, 0x1c, 0xab, 0x5e, + 0x74, 0x07, 0x4c, 0xab, 0x11, 0x1d, 0xa5, 0x29, 0xb1, 0x15, 0x2d, 0xc9, 0x22, 0x41, 0x6f, 0xc1, + 0x6a, 0x44, 0x79, 0x90, 0xd2, 0x80, 0x11, 0x5f, 0xf4, 0x98, 0xbb, 0xae, 0x11, 0xa5, 0x5c, 0xd8, + 0x10, 0x3d, 0x86, 0x76, 0xe1, 0x8e, 0x8c, 0x19, 0xf3, 0xcf, 0x48, 0xc2, 0x7c, 0x11, 0xf0, 0x30, + 0x2b, 0x33, 0x43, 0x64, 0x8f, 0x71, 0x9f, 0xe9, 0xe4, 0x0b, 0x78, 0xd3, 0x80, 0xf0, 0x08, 0xd3, + 0x18, 0x42, 0xd0, 0x1b, 0xb0, 0x48, 0x7d, 0x5d, 0xc6, 0x73, 0xfa, 0x06, 0x7b, 0x42, 0xdf, 0x07, + 0x88, 0x87, 0xfd, 0xa0, 0x4b, 0xec, 0x15, 0x1f, 0x77, 0x0c, 0x8a, 0x1e, 0xc1, 0x26, 0x8d, 0x22, + 0x92, 0xb0, 0xf3, 0x34, 0x4c, 0x58, 0xcf, 0xce, 0x37, 0x12, 0x67, 0xe5, 0xc9, 0x95, 0x9e, 0x22, + 0xcb, 0xd8, 0xa5, 0x51, 0x84, 0x2d, 0xc2, 0xcc, 0xae, 0xb6, 0xd1, 0xa3, 0xfb, 0x50, 0xee, 0xa7, + 0x51, 0x3f, 0x8c, 0xa2, 0x01, 0xe3, 0xca, 0xb0, 0xb3, 0xa8, 0x23, 0x5b, 0x1f, 0x93, 0x6b, 0x8e, + 0x4e, 0xe1, 0xc6, 0x38, 0x74, 0xc0, 0xa4, 0xa4, 0x01, 0x93, 0xee, 0x92, 0x2e, 0xf1, 0xda, 0x0c, + 0x25, 0xa4, 0xb7, 0xc9, 0x13, 0x63, 0x87, 0xaf, 0x8f, 0x39, 0xb3, 0x32, 0xdd, 0x6d, 0xc3, 0xb9, + 0x22, 0xd2, 0xc4, 0x67, 0xee, 0xb2, 0x0e, 0x66, 0x38, 0x43, 0xb4, 0x10, 0x3d, 0x86, 0xf5, 0x1c, + 0x96, 0xf7, 0xc3, 0xca, 0xab, 0x29, 0xcb, 0xdd, 0xb6, 0x0d, 0x1c, 0x7d, 0x04, 0xeb, 0x22, 0x55, + 0xd9, 0xb4, 0x1d, 0xf6, 0x35, 0x7c, 0xcd, 0x19, 0xb1, 0x66, 0x1c, 0x0c, 0x47, 0xc0, 0x0f, 0x60, + 0xd1, 0x2c, 0x4c, 0xb7, 0xa8, 0x63, 0xf9, 0xe6, 0x8c, 0x8c, 0x60, 0x6b, 0x86, 0x3e, 0x84, 0x4d, + 0xf3, 0x8b, 0xf4, 0xf4, 0x94, 0x9f, 0xa8, 0xae, 0x92, 0xae, 0xae, 0x5b, 0x06, 0xd2, 0xcc, 0x11, + 0x63, 0xb5, 0xf5, 0x18, 0xd6, 0x7b, 0x21, 0x0d, 0xb8, 0x90, 0x2a, 0xf4, 0x49, 0xc8, 0xfb, 0xc2, + 0x5d, 0x9b, 0xc2, 0xca, 0x08, 0xdf, 0xe2, 0x7d, 0x51, 0xf9, 0x6d, 0x01, 0x6e, 0x77, 0x54, 0xc2, + 0xe8, 0x20, 0xe4, 0xc1, 0xff, 0xdd, 0x82, 0xbd, 0x0f, 0x65, 0x19, 0xf2, 0x20, 0x62, 0x24, 0x55, + 0x8a, 0x25, 0x34, 0x23, 0xd5, 0x0c, 0xf3, 0x75, 0x23, 0x3f, 0xc9, 0xc5, 0x93, 0xbb, 0x78, 0xf1, + 0xd2, 0x2e, 0xfe, 0x7d, 0x01, 0xee, 0xbc, 0x84, 0xa9, 0x59, 0x97, 0xf2, 0x73, 0x40, 0xe3, 0x73, + 0xe4, 0x85, 0xd5, 0xfc, 0x70, 0xfa, 0xc2, 0xc8, 0x2f, 0x1f, 0x9b, 0x33, 0x76, 0x53, 0xbf, 0x96, + 0x4c, 0x8a, 0x2e, 0x3d, 0x00, 0xe6, 0xfe, 0xf7, 0x0f, 0x80, 0xf9, 0x59, 0x1f, 0x00, 0x7f, 0x2c, + 0xc0, 0xc6, 0xcb, 0xa3, 0x47, 0xcf, 0xa1, 0x64, 0x47, 0x8b, 0x5e, 0xa1, 0x9a, 0xb8, 0xb5, 0x9d, + 0xfd, 0xff, 0x82, 0x90, 0x7c, 0xe4, 0xe8, 0xb5, 0x5a, 0x1c, 0x8c, 0x0e, 0xe8, 0x4d, 0x00, 0x95, + 0x50, 0x2e, 0xfd, 0x24, 0x8c, 0x0d, 0xf5, 0x2b, 0x78, 0x4c, 0x82, 0x6e, 0xc1, 0x72, 0x28, 0x49, + 0x3f, 0xe4, 0x34, 0xd2, 0x94, 0x2d, 0xe3, 0xa5, 0x50, 0xee, 0x65, 0xc7, 0xcc, 0x74, 0xac, 0x37, + 0xe7, 0x75, 0x6f, 0x8e, 0x49, 0x2a, 0x9f, 0x40, 0x71, 0xec, 0x5a, 0x74, 0x1b, 0xdc, 0x27, 0x5e, + 0xa7, 0x53, 0xdf, 0xf7, 0x48, 0xf7, 0xd3, 0xb6, 0x47, 0x4e, 0x8e, 0x3a, 0x6d, 0xaf, 0xd1, 0xda, + 0x6b, 0x79, 0xcd, 0xf2, 0x35, 0xb4, 0x06, 0xd0, 0xc5, 0xf5, 0xa3, 0x4e, 0x03, 0xb7, 0xda, 0xdd, + 0xb2, 0x83, 0x36, 0xe1, 0xa6, 0x77, 0xd4, 0x24, 0xc7, 0x7b, 0xa4, 0xd3, 0x3a, 0xda, 0x3f, 0xf4, + 0xc8, 0x49, 0xb7, 0xeb, 0xe1, 0xfa, 0x51, 0xc3, 0x2b, 0x17, 0x2a, 0x7f, 0x71, 0xa0, 0x3c, 0xb9, + 0x8e, 0xd1, 0x09, 0xac, 0x99, 0xbd, 0xce, 0xb8, 0x2f, 0x7a, 0x21, 0x0f, 0x2c, 0x6f, 0xd5, 0xa9, + 0xbc, 0x69, 0x2f, 0x9e, 0xb5, 0xc2, 0xab, 0x74, 0xfc, 0x88, 0xb6, 0xe1, 0x35, 0x49, 0x07, 0x71, + 0xc4, 0x48, 0x42, 0x15, 0x23, 0x67, 0x2c, 0x51, 0x5f, 0x6a, 0x9e, 0x16, 0xf0, 0xba, 0x51, 0x60, + 0xaa, 0xd8, 0x41, 0x26, 0xbe, 0xbc, 0x43, 0xe7, 0xae, 0xd8, 0xa1, 0xdf, 0x80, 0x52, 0x7c, 0x96, + 0x50, 0xc9, 0xc8, 0x59, 0xc8, 0xf5, 0x63, 0x6a, 0x6e, 0x6b, 0x05, 0x17, 0x8d, 0xec, 0x20, 0x13, + 0x55, 0x9a, 0xb0, 0x32, 0x7c, 0x1d, 0x20, 0x64, 0xdf, 0x15, 0xa6, 0x7d, 0xcc, 0x4b, 0xe1, 0xd2, + 0x45, 0x85, 0xcb, 0x17, 0x55, 0x7e, 0x0a, 0x30, 0x7a, 0x20, 0x64, 0x6e, 0x38, 0x1d, 0xe4, 0x6f, + 0x4b, 0xfd, 0x7b, 0x62, 0xe5, 0x16, 0x66, 0x5f, 0xb9, 0xb3, 0x24, 0xba, 0xfd, 0x2f, 0x07, 0x56, + 0x5f, 0xa0, 0x16, 0xbd, 0x09, 0x1b, 0xf5, 0x93, 0x66, 0xeb, 0x98, 0x78, 0x47, 0x8d, 0xe3, 0x66, + 0xeb, 0x68, 0x7f, 0xa2, 0x08, 0x6e, 0x83, 0x3b, 0xa1, 0x3f, 0x6c, 0x1d, 0x79, 0x75, 0x4c, 0x1e, + 0xbc, 0x57, 0x76, 0xd0, 0x4d, 0xb8, 0x3e, 0xa1, 0xdd, 0x3b, 0xac, 0x37, 0xca, 0x05, 0xe4, 0xc2, + 0x8d, 0x09, 0xc5, 0x93, 0x93, 0xc3, 0xfa, 0xd3, 0xf2, 0x1c, 0x7a, 0x03, 0xd0, 0x84, 0xa6, 0xfe, + 0x04, 0x97, 0xe7, 0xd1, 0x2d, 0x78, 0xfd, 0xb2, 0x9c, 0x3c, 0xdd, 0x2d, 0x2f, 0x64, 0x85, 0x37, + 0xa1, 0x3a, 0xde, 0xdf, 0x27, 0xc7, 0xed, 0x93, 0x4e, 0x79, 0x11, 0xdd, 0x87, 0xb7, 0x27, 0x94, + 0x9d, 0xb6, 0xe7, 0x7d, 0x42, 0x9e, 0xb6, 0xba, 0x07, 0xe4, 0xc0, 0xab, 0x37, 0x3d, 0x4c, 0x76, + 0x3f, 0xed, 0x7a, 0xe5, 0xa5, 0x9d, 0x3f, 0xcc, 0xc1, 0xb2, 0x7d, 0xd2, 0x4a, 0xf4, 0x8b, 0x02, + 0x94, 0xc6, 0x47, 0x24, 0xfa, 0xee, 0xd4, 0xa2, 0xbc, 0x62, 0xf7, 0x6c, 0x7c, 0xef, 0x6b, 0x5a, + 0x99, 0x41, 0x5b, 0xf9, 0x95, 0xf3, 0xb3, 0x3f, 0xff, 0xf5, 0x97, 0x85, 0x9f, 0x3b, 0x95, 0x87, + 0xc3, 0x3f, 0x55, 0x7f, 0x6c, 0xb7, 0xd6, 0xa3, 0x38, 0x11, 0xcf, 0x99, 0xaf, 0x64, 0x6d, 0xbb, + 0x46, 0x03, 0xc6, 0x55, 0xfe, 0x47, 0xac, 0xac, 0x6d, 0xff, 0xe4, 0x83, 0xde, 0x98, 0xbb, 0x0f, + 0x9c, 0xed, 0x67, 0x3f, 0xac, 0xec, 0xcd, 0xe0, 0x21, 0x49, 0x79, 0xf6, 0xa7, 0x4b, 0x26, 0x78, + 0x85, 0x33, 0xf4, 0x6b, 0x07, 0x5e, 0xbf, 0x72, 0x81, 0xa0, 0x47, 0xb3, 0x8f, 0xba, 0xab, 0x68, + 0xfa, 0xf0, 0x3f, 0x35, 0x37, 0x7c, 0x6d, 0x39, 0xef, 0x3a, 0xbb, 0x5f, 0x39, 0xf0, 0x96, 0x2f, + 0x06, 0xd3, 0x3c, 0xed, 0x96, 0xec, 0x37, 0x6e, 0x67, 0xdd, 0xd2, 0x76, 0x9e, 0xb5, 0xac, 0x41, + 0x20, 0xb2, 0x5e, 0xa8, 0x8a, 0x24, 0xa8, 0x05, 0x8c, 0xeb, 0x5e, 0xaa, 0x19, 0x15, 0x8d, 0x43, + 0xf9, 0xd2, 0x7f, 0x21, 0x3c, 0x1c, 0x89, 0xfe, 0xe9, 0x38, 0xbf, 0x29, 0x14, 0x9a, 0x7b, 0x5f, + 0x15, 0xee, 0xee, 0x1b, 0x9f, 0x0d, 0x1d, 0x44, 0x73, 0x14, 0xc4, 0xc7, 0xc6, 0xe8, 0x74, 0x51, + 0xfb, 0xff, 0xce, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x93, 0x54, 0x90, 0x52, 0x6c, 0x11, 0x00, + 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1/session_entity_type.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1/session_entity_type.pb.go new file mode 100644 index 0000000..19eb590 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1/session_entity_type.pb.go @@ -0,0 +1,573 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/dialogflow/v2beta1/session_entity_type.proto + +package dialogflow + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf2 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf3 "google.golang.org/genproto/protobuf/field_mask" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// The types of modifications for a session entity type. +type SessionEntityType_EntityOverrideMode int32 + +const ( + // Not specified. This value should be never used. + SessionEntityType_ENTITY_OVERRIDE_MODE_UNSPECIFIED SessionEntityType_EntityOverrideMode = 0 + // The collection of session entities overrides the collection of entities + // in the corresponding developer entity type. + SessionEntityType_ENTITY_OVERRIDE_MODE_OVERRIDE SessionEntityType_EntityOverrideMode = 1 + // The collection of session entities extends the collection of entities in + // the corresponding developer entity type. + // Calls to `ListSessionEntityTypes`, `GetSessionEntityType`, + // `CreateSessionEntityType` and `UpdateSessionEntityType` return the full + // collection of entities from the developer entity type in the agent's + // default language and the session entity type. + SessionEntityType_ENTITY_OVERRIDE_MODE_SUPPLEMENT SessionEntityType_EntityOverrideMode = 2 +) + +var SessionEntityType_EntityOverrideMode_name = map[int32]string{ + 0: "ENTITY_OVERRIDE_MODE_UNSPECIFIED", + 1: "ENTITY_OVERRIDE_MODE_OVERRIDE", + 2: "ENTITY_OVERRIDE_MODE_SUPPLEMENT", +} +var SessionEntityType_EntityOverrideMode_value = map[string]int32{ + "ENTITY_OVERRIDE_MODE_UNSPECIFIED": 0, + "ENTITY_OVERRIDE_MODE_OVERRIDE": 1, + "ENTITY_OVERRIDE_MODE_SUPPLEMENT": 2, +} + +func (x SessionEntityType_EntityOverrideMode) String() string { + return proto.EnumName(SessionEntityType_EntityOverrideMode_name, int32(x)) +} +func (SessionEntityType_EntityOverrideMode) EnumDescriptor() ([]byte, []int) { + return fileDescriptor5, []int{0, 0} +} + +// Represents a session entity type. +// +// Extends or replaces a developer entity type at the user session level (we +// refer to the entity types defined at the agent level as "developer entity +// types"). +// +// Note: session entity types apply to all queries, regardless of the language. +type SessionEntityType struct { + // Required. The unique identifier of this session entity type. Format: + // `projects//agent/sessions//entityTypes/`, or + // `projects//agent/runtimes/sessions//entityTypes/`. + // Note: Runtimes are under construction and will be available soon. + // If is not specified, we assume default 'sandbox' runtime. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Required. Indicates whether the additional data should override or + // supplement the developer entity type definition. + EntityOverrideMode SessionEntityType_EntityOverrideMode `protobuf:"varint,2,opt,name=entity_override_mode,json=entityOverrideMode,enum=google.cloud.dialogflow.v2beta1.SessionEntityType_EntityOverrideMode" json:"entity_override_mode,omitempty"` + // Required. The collection of entities associated with this session entity + // type. + Entities []*EntityType_Entity `protobuf:"bytes,3,rep,name=entities" json:"entities,omitempty"` +} + +func (m *SessionEntityType) Reset() { *m = SessionEntityType{} } +func (m *SessionEntityType) String() string { return proto.CompactTextString(m) } +func (*SessionEntityType) ProtoMessage() {} +func (*SessionEntityType) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{0} } + +func (m *SessionEntityType) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *SessionEntityType) GetEntityOverrideMode() SessionEntityType_EntityOverrideMode { + if m != nil { + return m.EntityOverrideMode + } + return SessionEntityType_ENTITY_OVERRIDE_MODE_UNSPECIFIED +} + +func (m *SessionEntityType) GetEntities() []*EntityType_Entity { + if m != nil { + return m.Entities + } + return nil +} + +// The request message for [SessionEntityTypes.ListSessionEntityTypes][google.cloud.dialogflow.v2beta1.SessionEntityTypes.ListSessionEntityTypes]. +type ListSessionEntityTypesRequest struct { + // Required. The session to list all session entity types from. + // Format: `projects//agent/sessions/` or + // `projects//agent/runtimes//sessions/`. + // Note: Runtimes are under construction and will be available soon. + // If is not specified, we assume default 'sandbox' runtime. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Optional. The maximum number of items to return in a single page. By + // default 100 and at most 1000. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // Optional. The next_page_token value returned from a previous list request. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListSessionEntityTypesRequest) Reset() { *m = ListSessionEntityTypesRequest{} } +func (m *ListSessionEntityTypesRequest) String() string { return proto.CompactTextString(m) } +func (*ListSessionEntityTypesRequest) ProtoMessage() {} +func (*ListSessionEntityTypesRequest) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{1} } + +func (m *ListSessionEntityTypesRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListSessionEntityTypesRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListSessionEntityTypesRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// The response message for [SessionEntityTypes.ListSessionEntityTypes][google.cloud.dialogflow.v2beta1.SessionEntityTypes.ListSessionEntityTypes]. +type ListSessionEntityTypesResponse struct { + // The list of session entity types. There will be a maximum number of items + // returned based on the page_size field in the request. + SessionEntityTypes []*SessionEntityType `protobuf:"bytes,1,rep,name=session_entity_types,json=sessionEntityTypes" json:"session_entity_types,omitempty"` + // Token to retrieve the next page of results, or empty if there are no + // more results in the list. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListSessionEntityTypesResponse) Reset() { *m = ListSessionEntityTypesResponse{} } +func (m *ListSessionEntityTypesResponse) String() string { return proto.CompactTextString(m) } +func (*ListSessionEntityTypesResponse) ProtoMessage() {} +func (*ListSessionEntityTypesResponse) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{2} } + +func (m *ListSessionEntityTypesResponse) GetSessionEntityTypes() []*SessionEntityType { + if m != nil { + return m.SessionEntityTypes + } + return nil +} + +func (m *ListSessionEntityTypesResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The request message for [SessionEntityTypes.GetSessionEntityType][google.cloud.dialogflow.v2beta1.SessionEntityTypes.GetSessionEntityType]. +type GetSessionEntityTypeRequest struct { + // Required. The name of the session entity type. Format: + // `projects//agent/sessions//entityTypes/` or `projects//agent/runtimes//sessions//entityTypes/`. Note: + // Runtimes are under construction and will be available soon. If + // is not specified, we assume default 'sandbox' runtime. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetSessionEntityTypeRequest) Reset() { *m = GetSessionEntityTypeRequest{} } +func (m *GetSessionEntityTypeRequest) String() string { return proto.CompactTextString(m) } +func (*GetSessionEntityTypeRequest) ProtoMessage() {} +func (*GetSessionEntityTypeRequest) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{3} } + +func (m *GetSessionEntityTypeRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The request message for [SessionEntityTypes.CreateSessionEntityType][google.cloud.dialogflow.v2beta1.SessionEntityTypes.CreateSessionEntityType]. +type CreateSessionEntityTypeRequest struct { + // Required. The session to create a session entity type for. + // Format: `projects//agent/sessions/` or + // `projects//agent/runtimes//sessions/`. + // Note: Runtimes are under construction and will be available soon. + // If is not specified, we assume default 'sandbox' runtime. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Required. The session entity type to create. + SessionEntityType *SessionEntityType `protobuf:"bytes,2,opt,name=session_entity_type,json=sessionEntityType" json:"session_entity_type,omitempty"` +} + +func (m *CreateSessionEntityTypeRequest) Reset() { *m = CreateSessionEntityTypeRequest{} } +func (m *CreateSessionEntityTypeRequest) String() string { return proto.CompactTextString(m) } +func (*CreateSessionEntityTypeRequest) ProtoMessage() {} +func (*CreateSessionEntityTypeRequest) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{4} } + +func (m *CreateSessionEntityTypeRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateSessionEntityTypeRequest) GetSessionEntityType() *SessionEntityType { + if m != nil { + return m.SessionEntityType + } + return nil +} + +// The request message for [SessionEntityTypes.UpdateSessionEntityType][google.cloud.dialogflow.v2beta1.SessionEntityTypes.UpdateSessionEntityType]. +type UpdateSessionEntityTypeRequest struct { + // Required. The entity type to update. Format: + // `projects//agent/sessions//entityTypes/` or `projects//agent/runtimes//sessions//entityTypes/`. Note: + // Runtimes are under construction and will be available soon. If + // is not specified, we assume default 'sandbox' runtime. + SessionEntityType *SessionEntityType `protobuf:"bytes,1,opt,name=session_entity_type,json=sessionEntityType" json:"session_entity_type,omitempty"` + // Optional. The mask to control which fields get updated. + UpdateMask *google_protobuf3.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateSessionEntityTypeRequest) Reset() { *m = UpdateSessionEntityTypeRequest{} } +func (m *UpdateSessionEntityTypeRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateSessionEntityTypeRequest) ProtoMessage() {} +func (*UpdateSessionEntityTypeRequest) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{5} } + +func (m *UpdateSessionEntityTypeRequest) GetSessionEntityType() *SessionEntityType { + if m != nil { + return m.SessionEntityType + } + return nil +} + +func (m *UpdateSessionEntityTypeRequest) GetUpdateMask() *google_protobuf3.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +// The request message for [SessionEntityTypes.DeleteSessionEntityType][google.cloud.dialogflow.v2beta1.SessionEntityTypes.DeleteSessionEntityType]. +type DeleteSessionEntityTypeRequest struct { + // Required. The name of the entity type to delete. Format: + // `projects//agent/sessions//entityTypes/` or `projects//agent/runtimes//sessions//entityTypes/`. Note: + // Runtimes are under construction and will be available soon. If + // is not specified, we assume default 'sandbox' runtime. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteSessionEntityTypeRequest) Reset() { *m = DeleteSessionEntityTypeRequest{} } +func (m *DeleteSessionEntityTypeRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteSessionEntityTypeRequest) ProtoMessage() {} +func (*DeleteSessionEntityTypeRequest) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{6} } + +func (m *DeleteSessionEntityTypeRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func init() { + proto.RegisterType((*SessionEntityType)(nil), "google.cloud.dialogflow.v2beta1.SessionEntityType") + proto.RegisterType((*ListSessionEntityTypesRequest)(nil), "google.cloud.dialogflow.v2beta1.ListSessionEntityTypesRequest") + proto.RegisterType((*ListSessionEntityTypesResponse)(nil), "google.cloud.dialogflow.v2beta1.ListSessionEntityTypesResponse") + proto.RegisterType((*GetSessionEntityTypeRequest)(nil), "google.cloud.dialogflow.v2beta1.GetSessionEntityTypeRequest") + proto.RegisterType((*CreateSessionEntityTypeRequest)(nil), "google.cloud.dialogflow.v2beta1.CreateSessionEntityTypeRequest") + proto.RegisterType((*UpdateSessionEntityTypeRequest)(nil), "google.cloud.dialogflow.v2beta1.UpdateSessionEntityTypeRequest") + proto.RegisterType((*DeleteSessionEntityTypeRequest)(nil), "google.cloud.dialogflow.v2beta1.DeleteSessionEntityTypeRequest") + proto.RegisterEnum("google.cloud.dialogflow.v2beta1.SessionEntityType_EntityOverrideMode", SessionEntityType_EntityOverrideMode_name, SessionEntityType_EntityOverrideMode_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for SessionEntityTypes service + +type SessionEntityTypesClient interface { + // Returns the list of all session entity types in the specified session. + ListSessionEntityTypes(ctx context.Context, in *ListSessionEntityTypesRequest, opts ...grpc.CallOption) (*ListSessionEntityTypesResponse, error) + // Retrieves the specified session entity type. + GetSessionEntityType(ctx context.Context, in *GetSessionEntityTypeRequest, opts ...grpc.CallOption) (*SessionEntityType, error) + // Creates a session entity type. + CreateSessionEntityType(ctx context.Context, in *CreateSessionEntityTypeRequest, opts ...grpc.CallOption) (*SessionEntityType, error) + // Updates the specified session entity type. + UpdateSessionEntityType(ctx context.Context, in *UpdateSessionEntityTypeRequest, opts ...grpc.CallOption) (*SessionEntityType, error) + // Deletes the specified session entity type. + DeleteSessionEntityType(ctx context.Context, in *DeleteSessionEntityTypeRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) +} + +type sessionEntityTypesClient struct { + cc *grpc.ClientConn +} + +func NewSessionEntityTypesClient(cc *grpc.ClientConn) SessionEntityTypesClient { + return &sessionEntityTypesClient{cc} +} + +func (c *sessionEntityTypesClient) ListSessionEntityTypes(ctx context.Context, in *ListSessionEntityTypesRequest, opts ...grpc.CallOption) (*ListSessionEntityTypesResponse, error) { + out := new(ListSessionEntityTypesResponse) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.SessionEntityTypes/ListSessionEntityTypes", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sessionEntityTypesClient) GetSessionEntityType(ctx context.Context, in *GetSessionEntityTypeRequest, opts ...grpc.CallOption) (*SessionEntityType, error) { + out := new(SessionEntityType) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.SessionEntityTypes/GetSessionEntityType", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sessionEntityTypesClient) CreateSessionEntityType(ctx context.Context, in *CreateSessionEntityTypeRequest, opts ...grpc.CallOption) (*SessionEntityType, error) { + out := new(SessionEntityType) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.SessionEntityTypes/CreateSessionEntityType", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sessionEntityTypesClient) UpdateSessionEntityType(ctx context.Context, in *UpdateSessionEntityTypeRequest, opts ...grpc.CallOption) (*SessionEntityType, error) { + out := new(SessionEntityType) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.SessionEntityTypes/UpdateSessionEntityType", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sessionEntityTypesClient) DeleteSessionEntityType(ctx context.Context, in *DeleteSessionEntityTypeRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) { + out := new(google_protobuf2.Empty) + err := grpc.Invoke(ctx, "/google.cloud.dialogflow.v2beta1.SessionEntityTypes/DeleteSessionEntityType", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for SessionEntityTypes service + +type SessionEntityTypesServer interface { + // Returns the list of all session entity types in the specified session. + ListSessionEntityTypes(context.Context, *ListSessionEntityTypesRequest) (*ListSessionEntityTypesResponse, error) + // Retrieves the specified session entity type. + GetSessionEntityType(context.Context, *GetSessionEntityTypeRequest) (*SessionEntityType, error) + // Creates a session entity type. + CreateSessionEntityType(context.Context, *CreateSessionEntityTypeRequest) (*SessionEntityType, error) + // Updates the specified session entity type. + UpdateSessionEntityType(context.Context, *UpdateSessionEntityTypeRequest) (*SessionEntityType, error) + // Deletes the specified session entity type. + DeleteSessionEntityType(context.Context, *DeleteSessionEntityTypeRequest) (*google_protobuf2.Empty, error) +} + +func RegisterSessionEntityTypesServer(s *grpc.Server, srv SessionEntityTypesServer) { + s.RegisterService(&_SessionEntityTypes_serviceDesc, srv) +} + +func _SessionEntityTypes_ListSessionEntityTypes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListSessionEntityTypesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SessionEntityTypesServer).ListSessionEntityTypes(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.SessionEntityTypes/ListSessionEntityTypes", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SessionEntityTypesServer).ListSessionEntityTypes(ctx, req.(*ListSessionEntityTypesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SessionEntityTypes_GetSessionEntityType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetSessionEntityTypeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SessionEntityTypesServer).GetSessionEntityType(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.SessionEntityTypes/GetSessionEntityType", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SessionEntityTypesServer).GetSessionEntityType(ctx, req.(*GetSessionEntityTypeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SessionEntityTypes_CreateSessionEntityType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateSessionEntityTypeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SessionEntityTypesServer).CreateSessionEntityType(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.SessionEntityTypes/CreateSessionEntityType", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SessionEntityTypesServer).CreateSessionEntityType(ctx, req.(*CreateSessionEntityTypeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SessionEntityTypes_UpdateSessionEntityType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateSessionEntityTypeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SessionEntityTypesServer).UpdateSessionEntityType(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.SessionEntityTypes/UpdateSessionEntityType", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SessionEntityTypesServer).UpdateSessionEntityType(ctx, req.(*UpdateSessionEntityTypeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SessionEntityTypes_DeleteSessionEntityType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteSessionEntityTypeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SessionEntityTypesServer).DeleteSessionEntityType(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.dialogflow.v2beta1.SessionEntityTypes/DeleteSessionEntityType", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SessionEntityTypesServer).DeleteSessionEntityType(ctx, req.(*DeleteSessionEntityTypeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _SessionEntityTypes_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.dialogflow.v2beta1.SessionEntityTypes", + HandlerType: (*SessionEntityTypesServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListSessionEntityTypes", + Handler: _SessionEntityTypes_ListSessionEntityTypes_Handler, + }, + { + MethodName: "GetSessionEntityType", + Handler: _SessionEntityTypes_GetSessionEntityType_Handler, + }, + { + MethodName: "CreateSessionEntityType", + Handler: _SessionEntityTypes_CreateSessionEntityType_Handler, + }, + { + MethodName: "UpdateSessionEntityType", + Handler: _SessionEntityTypes_UpdateSessionEntityType_Handler, + }, + { + MethodName: "DeleteSessionEntityType", + Handler: _SessionEntityTypes_DeleteSessionEntityType_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/dialogflow/v2beta1/session_entity_type.proto", +} + +func init() { + proto.RegisterFile("google/cloud/dialogflow/v2beta1/session_entity_type.proto", fileDescriptor5) +} + +var fileDescriptor5 = []byte{ + // 863 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0xcf, 0x6f, 0xe3, 0x44, + 0x14, 0x66, 0x5c, 0x58, 0xed, 0xce, 0xf2, 0xa3, 0x3b, 0x54, 0x69, 0x94, 0xd2, 0x34, 0x78, 0x11, + 0xaa, 0x72, 0xb0, 0xd5, 0xc0, 0x65, 0x59, 0x7e, 0x48, 0xdb, 0x38, 0xab, 0x48, 0x9b, 0x34, 0x72, + 0xd2, 0x15, 0x94, 0x83, 0xe5, 0xd4, 0xaf, 0x96, 0x69, 0xe2, 0x31, 0x9e, 0xc9, 0x2e, 0x29, 0xea, + 0xa5, 0xdc, 0xb8, 0x70, 0x40, 0xdc, 0x38, 0x71, 0xe0, 0x80, 0x04, 0xa7, 0xfe, 0x03, 0x1c, 0xf8, + 0x0b, 0x10, 0x37, 0x8e, 0x5c, 0x39, 0x22, 0x71, 0x03, 0x79, 0xec, 0x34, 0xa5, 0x1e, 0xdb, 0x21, + 0xdb, 0x9b, 0xe7, 0xcd, 0x7c, 0xef, 0xbd, 0xef, 0x9b, 0xf7, 0x9e, 0x07, 0xdf, 0x73, 0x29, 0x75, + 0x47, 0xa0, 0x1f, 0x8e, 0xe8, 0xc4, 0xd1, 0x1d, 0xcf, 0x1e, 0x51, 0xf7, 0x68, 0x44, 0x9f, 0xea, + 0x4f, 0x1a, 0x43, 0xe0, 0xf6, 0x8e, 0xce, 0x80, 0x31, 0x8f, 0xfa, 0x16, 0xf8, 0xdc, 0xe3, 0x53, + 0x8b, 0x4f, 0x03, 0xd0, 0x82, 0x90, 0x72, 0x4a, 0xb6, 0x62, 0xa8, 0x26, 0xa0, 0xda, 0x1c, 0xaa, + 0x25, 0xd0, 0xca, 0x6b, 0x89, 0x6f, 0x3b, 0xf0, 0x74, 0xdb, 0xf7, 0x29, 0xb7, 0xb9, 0x47, 0x7d, + 0x16, 0xc3, 0x2b, 0x3b, 0x45, 0x91, 0x53, 0x11, 0x2b, 0x1b, 0x09, 0x44, 0xac, 0x86, 0x93, 0x23, + 0x1d, 0xc6, 0x01, 0x9f, 0x26, 0x9b, 0xb5, 0xab, 0x9b, 0x47, 0x1e, 0x8c, 0x1c, 0x6b, 0x6c, 0xb3, + 0xe3, 0xf8, 0x84, 0xfa, 0x97, 0x82, 0xef, 0xf4, 0x63, 0x3a, 0x86, 0xf0, 0x3d, 0x98, 0x06, 0x40, + 0x08, 0x7e, 0xde, 0xb7, 0xc7, 0x50, 0x46, 0x35, 0xb4, 0x7d, 0xcb, 0x14, 0xdf, 0xe4, 0x29, 0x5e, + 0x4b, 0xa2, 0xd3, 0x27, 0x10, 0x86, 0x9e, 0x03, 0xd6, 0x98, 0x3a, 0x50, 0x56, 0x6a, 0x68, 0xfb, + 0xe5, 0x86, 0xa1, 0x15, 0x30, 0xd7, 0x52, 0x51, 0xb4, 0xf8, 0x73, 0x2f, 0xf1, 0xd6, 0xa1, 0x0e, + 0x98, 0x04, 0x52, 0x36, 0xd2, 0xc5, 0x37, 0x85, 0xd5, 0x03, 0x56, 0x5e, 0xa9, 0xad, 0x6c, 0xdf, + 0x6e, 0x34, 0x0a, 0x83, 0xa5, 0xa2, 0x98, 0x17, 0x3e, 0xd4, 0x33, 0x84, 0x49, 0x3a, 0x34, 0x79, + 0x03, 0xd7, 0x8c, 0xee, 0xa0, 0x3d, 0xf8, 0xc8, 0xda, 0x7b, 0x6c, 0x98, 0x66, 0xbb, 0x69, 0x58, + 0x9d, 0xbd, 0xa6, 0x61, 0xed, 0x77, 0xfb, 0x3d, 0x63, 0xb7, 0xdd, 0x6a, 0x1b, 0xcd, 0xd5, 0xe7, + 0xc8, 0xeb, 0x78, 0x53, 0x7a, 0x6a, 0xb6, 0x5a, 0x45, 0xe4, 0x2e, 0xde, 0x92, 0x1e, 0xe9, 0xef, + 0xf7, 0x7a, 0x8f, 0x8c, 0x8e, 0xd1, 0x1d, 0xac, 0x2a, 0x2a, 0xc3, 0x9b, 0x8f, 0x3c, 0xc6, 0x53, + 0xa2, 0x30, 0x13, 0x3e, 0x9d, 0x00, 0xe3, 0xa4, 0x84, 0x6f, 0x04, 0x76, 0x08, 0x3e, 0x4f, 0x2e, + 0x21, 0x59, 0x91, 0x0d, 0x7c, 0x2b, 0xb0, 0x5d, 0xb0, 0x98, 0x77, 0x12, 0x6b, 0xff, 0x82, 0x79, + 0x33, 0x32, 0xf4, 0xbd, 0x13, 0x20, 0x9b, 0x18, 0x8b, 0x4d, 0x4e, 0x8f, 0xc1, 0x2f, 0xaf, 0x08, + 0xa0, 0x38, 0x3e, 0x88, 0x0c, 0xea, 0x4f, 0x08, 0x57, 0xb3, 0xa2, 0xb2, 0x80, 0xfa, 0x0c, 0x88, + 0x83, 0xd7, 0x24, 0xd5, 0xcd, 0xca, 0x68, 0x41, 0xe1, 0x53, 0xae, 0x4d, 0xc2, 0x52, 0xd1, 0xc8, + 0x9b, 0xf8, 0x15, 0x1f, 0x3e, 0xe3, 0xd6, 0xa5, 0x64, 0x15, 0x91, 0xec, 0x4b, 0x91, 0xb9, 0x77, + 0x91, 0xf0, 0x0e, 0xde, 0x78, 0x08, 0xe9, 0x74, 0x67, 0x1a, 0x49, 0xca, 0x54, 0xfd, 0x16, 0xe1, + 0xea, 0x6e, 0x08, 0x36, 0x87, 0x4c, 0x58, 0x96, 0xb4, 0x43, 0xfc, 0xaa, 0x84, 0xbb, 0xc8, 0x6c, + 0x39, 0xea, 0x77, 0x52, 0xd4, 0xd5, 0x9f, 0x11, 0xae, 0xee, 0x07, 0x4e, 0x5e, 0x7a, 0x19, 0x69, + 0xa0, 0x6b, 0x4c, 0x83, 0xdc, 0xc7, 0xb7, 0x27, 0x22, 0x0b, 0x31, 0x0b, 0x12, 0x8a, 0x95, 0x99, + 0xef, 0xd9, 0xb8, 0xd0, 0x5a, 0xd1, 0xb8, 0xe8, 0xd8, 0xec, 0xd8, 0xc4, 0xf1, 0xf1, 0xe8, 0x5b, + 0x7d, 0x1b, 0x57, 0x9b, 0x30, 0x82, 0x1c, 0x0a, 0x92, 0x8b, 0x69, 0x7c, 0xf5, 0x22, 0x26, 0xe9, + 0xc2, 0x23, 0xdf, 0x2b, 0xb8, 0x24, 0xaf, 0x49, 0xf2, 0x7e, 0x21, 0xd7, 0xdc, 0x16, 0xaa, 0x7c, + 0xb0, 0x34, 0x3e, 0x6e, 0x06, 0xf5, 0x4b, 0x74, 0xf6, 0xeb, 0x1f, 0x5f, 0x2b, 0x5f, 0x20, 0x72, + 0xef, 0x62, 0x02, 0x7f, 0x1e, 0x17, 0xcb, 0x7b, 0x41, 0x48, 0x3f, 0x81, 0x43, 0xce, 0xf4, 0xba, + 0x6e, 0xbb, 0xe0, 0xf3, 0xd9, 0x4f, 0x81, 0xe9, 0xf5, 0xd3, 0x64, 0x4c, 0x0b, 0x67, 0x07, 0x2d, + 0xd2, 0x2c, 0x06, 0x87, 0x13, 0x9f, 0x7b, 0x63, 0x88, 0x0c, 0x19, 0x7e, 0xc8, 0x37, 0x0a, 0x5e, + 0x93, 0x35, 0x03, 0x79, 0xb7, 0x90, 0x66, 0x4e, 0x0f, 0x55, 0x96, 0x28, 0x28, 0xb9, 0x2e, 0xd1, + 0x25, 0xe7, 0xa9, 0x72, 0x99, 0x8c, 0x5e, 0x3f, 0xfd, 0xaf, 0x2e, 0x72, 0xb0, 0x54, 0x95, 0x2b, + 0x7e, 0xc8, 0x2f, 0x0a, 0x5e, 0xcf, 0x68, 0x78, 0x52, 0x5c, 0x01, 0xf9, 0xa3, 0x62, 0x29, 0x75, + 0xce, 0x63, 0x75, 0x7e, 0x44, 0xea, 0xf2, 0x55, 0xf3, 0x8e, 0x6c, 0x04, 0x1c, 0x7c, 0xac, 0x5e, + 0x4b, 0x29, 0x49, 0x9d, 0x93, 0x3f, 0x15, 0xbc, 0x9e, 0x31, 0x99, 0x16, 0xd0, 0x31, 0x7f, 0xa6, + 0x2d, 0xa5, 0xe3, 0xef, 0xb1, 0x8e, 0xbf, 0xa1, 0x46, 0x67, 0xce, 0x5a, 0xf6, 0xf4, 0xfa, 0x9f, + 0x95, 0x27, 0xd7, 0x96, 0x36, 0x3e, 0x5c, 0x26, 0xca, 0x22, 0x25, 0x2a, 0xd7, 0xfb, 0x1f, 0x84, + 0xd7, 0x33, 0xc6, 0xe8, 0x02, 0x7a, 0xe7, 0x0f, 0xe0, 0x4a, 0x29, 0x35, 0xca, 0x8d, 0xe8, 0x59, + 0x38, 0xef, 0xdc, 0xfa, 0xb3, 0x74, 0x6e, 0xfd, 0x5a, 0x3a, 0xf7, 0xc1, 0x39, 0xc2, 0x77, 0x0f, + 0xe9, 0xb8, 0x88, 0xeb, 0x83, 0x52, 0x8a, 0x66, 0x2f, 0x62, 0xd5, 0x43, 0x07, 0xed, 0x04, 0xea, + 0xd2, 0x91, 0xed, 0xbb, 0x1a, 0x0d, 0x5d, 0xdd, 0x05, 0x5f, 0x70, 0xd6, 0xe3, 0x2d, 0x3b, 0xf0, + 0x58, 0xe6, 0x73, 0xfa, 0xfe, 0xdc, 0xf4, 0x37, 0x42, 0xdf, 0x29, 0x4a, 0xb3, 0xf5, 0x83, 0xb2, + 0xf5, 0x30, 0xf6, 0xb9, 0x2b, 0xd2, 0x69, 0xce, 0xd3, 0x79, 0x1c, 0x83, 0x86, 0x37, 0x84, 0xff, + 0xb7, 0xfe, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x65, 0x3a, 0xa2, 0x54, 0x27, 0x0c, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1/webhook.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1/webhook.pb.go new file mode 100644 index 0000000..80e59ea --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/dialogflow/v2beta1/webhook.pb.go @@ -0,0 +1,209 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/dialogflow/v2beta1/webhook.proto + +package dialogflow + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf4 "github.com/golang/protobuf/ptypes/struct" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// The request message for a webhook call. +type WebhookRequest struct { + // The unique identifier of detectIntent request session. + // Can be used to identify end-user inside webhook implementation. + // Format: `projects//agent/sessions/`. + Session string `protobuf:"bytes,4,opt,name=session" json:"session,omitempty"` + // The unique identifier of the response. Contains the same value as + // `[Streaming]DetectIntentResponse.response_id`. + ResponseId string `protobuf:"bytes,1,opt,name=response_id,json=responseId" json:"response_id,omitempty"` + // The result of the conversational query or event processing. Contains the + // same value as `[Streaming]DetectIntentResponse.query_result`. + QueryResult *QueryResult `protobuf:"bytes,2,opt,name=query_result,json=queryResult" json:"query_result,omitempty"` + // Optional. The contents of the original request that was passed to + // `[Streaming]DetectIntent` call. + OriginalDetectIntentRequest *OriginalDetectIntentRequest `protobuf:"bytes,3,opt,name=original_detect_intent_request,json=originalDetectIntentRequest" json:"original_detect_intent_request,omitempty"` +} + +func (m *WebhookRequest) Reset() { *m = WebhookRequest{} } +func (m *WebhookRequest) String() string { return proto.CompactTextString(m) } +func (*WebhookRequest) ProtoMessage() {} +func (*WebhookRequest) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{0} } + +func (m *WebhookRequest) GetSession() string { + if m != nil { + return m.Session + } + return "" +} + +func (m *WebhookRequest) GetResponseId() string { + if m != nil { + return m.ResponseId + } + return "" +} + +func (m *WebhookRequest) GetQueryResult() *QueryResult { + if m != nil { + return m.QueryResult + } + return nil +} + +func (m *WebhookRequest) GetOriginalDetectIntentRequest() *OriginalDetectIntentRequest { + if m != nil { + return m.OriginalDetectIntentRequest + } + return nil +} + +// The response message for a webhook call. +type WebhookResponse struct { + // Optional. The text to be shown on the screen. This value is passed directly + // to `QueryResult.fulfillment_text`. + FulfillmentText string `protobuf:"bytes,1,opt,name=fulfillment_text,json=fulfillmentText" json:"fulfillment_text,omitempty"` + // Optional. The collection of rich messages to present to the user. This + // value is passed directly to `QueryResult.fulfillment_messages`. + FulfillmentMessages []*Intent_Message `protobuf:"bytes,2,rep,name=fulfillment_messages,json=fulfillmentMessages" json:"fulfillment_messages,omitempty"` + // Optional. This value is passed directly to `QueryResult.webhook_source`. + Source string `protobuf:"bytes,3,opt,name=source" json:"source,omitempty"` + // Optional. This value is passed directly to `QueryResult.webhook_payload`. + Payload *google_protobuf4.Struct `protobuf:"bytes,4,opt,name=payload" json:"payload,omitempty"` + // Optional. The collection of output contexts. This value is passed directly + // to `QueryResult.output_contexts`. + OutputContexts []*Context `protobuf:"bytes,5,rep,name=output_contexts,json=outputContexts" json:"output_contexts,omitempty"` + // Optional. Makes the platform immediately invoke another `DetectIntent` call + // internally with the specified event as input. + FollowupEventInput *EventInput `protobuf:"bytes,6,opt,name=followup_event_input,json=followupEventInput" json:"followup_event_input,omitempty"` +} + +func (m *WebhookResponse) Reset() { *m = WebhookResponse{} } +func (m *WebhookResponse) String() string { return proto.CompactTextString(m) } +func (*WebhookResponse) ProtoMessage() {} +func (*WebhookResponse) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{1} } + +func (m *WebhookResponse) GetFulfillmentText() string { + if m != nil { + return m.FulfillmentText + } + return "" +} + +func (m *WebhookResponse) GetFulfillmentMessages() []*Intent_Message { + if m != nil { + return m.FulfillmentMessages + } + return nil +} + +func (m *WebhookResponse) GetSource() string { + if m != nil { + return m.Source + } + return "" +} + +func (m *WebhookResponse) GetPayload() *google_protobuf4.Struct { + if m != nil { + return m.Payload + } + return nil +} + +func (m *WebhookResponse) GetOutputContexts() []*Context { + if m != nil { + return m.OutputContexts + } + return nil +} + +func (m *WebhookResponse) GetFollowupEventInput() *EventInput { + if m != nil { + return m.FollowupEventInput + } + return nil +} + +// Represents the contents of the original request that was passed to +// the `[Streaming]DetectIntent` call. +type OriginalDetectIntentRequest struct { + // The source of this request, e.g., `google`, `facebook`, `slack`. It is set + // by Dialogflow-owned servers. Possible values of this field correspond to + // [Intent.Message.Platform][google.cloud.dialogflow.v2beta1.Intent.Message.Platform]. + Source string `protobuf:"bytes,1,opt,name=source" json:"source,omitempty"` + // Optional. This field is set to the value of `QueryParameters.payload` field + // passed in the request. + Payload *google_protobuf4.Struct `protobuf:"bytes,3,opt,name=payload" json:"payload,omitempty"` +} + +func (m *OriginalDetectIntentRequest) Reset() { *m = OriginalDetectIntentRequest{} } +func (m *OriginalDetectIntentRequest) String() string { return proto.CompactTextString(m) } +func (*OriginalDetectIntentRequest) ProtoMessage() {} +func (*OriginalDetectIntentRequest) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{2} } + +func (m *OriginalDetectIntentRequest) GetSource() string { + if m != nil { + return m.Source + } + return "" +} + +func (m *OriginalDetectIntentRequest) GetPayload() *google_protobuf4.Struct { + if m != nil { + return m.Payload + } + return nil +} + +func init() { + proto.RegisterType((*WebhookRequest)(nil), "google.cloud.dialogflow.v2beta1.WebhookRequest") + proto.RegisterType((*WebhookResponse)(nil), "google.cloud.dialogflow.v2beta1.WebhookResponse") + proto.RegisterType((*OriginalDetectIntentRequest)(nil), "google.cloud.dialogflow.v2beta1.OriginalDetectIntentRequest") +} + +func init() { proto.RegisterFile("google/cloud/dialogflow/v2beta1/webhook.proto", fileDescriptor6) } + +var fileDescriptor6 = []byte{ + // 538 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x53, 0x41, 0x6f, 0xd3, 0x30, + 0x14, 0x56, 0x52, 0xd8, 0x34, 0x77, 0x5a, 0x91, 0x99, 0x20, 0xda, 0x10, 0xad, 0xca, 0xa5, 0x88, + 0x91, 0x68, 0xe5, 0x08, 0xa7, 0xad, 0x80, 0x7a, 0x40, 0xdb, 0x02, 0x02, 0x09, 0x09, 0x45, 0x6e, + 0xe2, 0x66, 0x16, 0xae, 0x5f, 0x1a, 0xdb, 0xeb, 0x76, 0xe4, 0x87, 0x20, 0x21, 0x8e, 0xfb, 0x85, + 0x1c, 0x51, 0x6c, 0x87, 0xf4, 0x52, 0xb2, 0xe3, 0x7b, 0xfe, 0xbe, 0xef, 0x7d, 0xfe, 0xfc, 0x8c, + 0x5e, 0xe6, 0x00, 0x39, 0xa7, 0x51, 0xca, 0x41, 0x67, 0x51, 0xc6, 0x08, 0x87, 0x7c, 0xce, 0x61, + 0x15, 0x5d, 0x8d, 0x67, 0x54, 0x91, 0xe3, 0x68, 0x45, 0x67, 0x97, 0x00, 0xdf, 0xc3, 0xa2, 0x04, + 0x05, 0xb8, 0x6f, 0xe1, 0xa1, 0x81, 0x87, 0x0d, 0x3c, 0x74, 0xf0, 0x83, 0x27, 0x4e, 0x8f, 0x14, + 0x2c, 0x22, 0x42, 0x80, 0x22, 0x8a, 0x81, 0x90, 0x96, 0x7e, 0xd0, 0x3a, 0x2d, 0x05, 0xa1, 0xe8, + 0xb5, 0x72, 0xf0, 0xa3, 0x36, 0x38, 0x13, 0x8a, 0x0a, 0x75, 0x57, 0x71, 0x49, 0xa5, 0x64, 0x20, + 0x1c, 0xbc, 0x76, 0x6a, 0xaa, 0x99, 0x9e, 0x47, 0x52, 0x95, 0x3a, 0x75, 0x62, 0xc3, 0x5f, 0x3e, + 0xda, 0xfb, 0x62, 0xaf, 0x1e, 0xd3, 0xa5, 0xa6, 0x52, 0xe1, 0x00, 0x6d, 0x3b, 0x85, 0xe0, 0xde, + 0xc0, 0x1b, 0xed, 0xc4, 0x75, 0x89, 0xfb, 0xa8, 0x5b, 0x52, 0x59, 0x80, 0x90, 0x34, 0x61, 0x59, + 0xe0, 0x99, 0x53, 0x54, 0xb7, 0xa6, 0x19, 0x3e, 0x43, 0xbb, 0x4b, 0x4d, 0xcb, 0x9b, 0xa4, 0xa4, + 0x52, 0x73, 0x15, 0xf8, 0x03, 0x6f, 0xd4, 0x1d, 0x1f, 0x85, 0x2d, 0x69, 0x86, 0x17, 0x15, 0x29, + 0x36, 0x9c, 0xb8, 0xbb, 0x6c, 0x0a, 0xfc, 0xc3, 0x43, 0x4f, 0xa1, 0x64, 0x39, 0x13, 0x84, 0x27, + 0x19, 0x55, 0x34, 0x55, 0x89, 0x0d, 0x23, 0x29, 0xad, 0xdd, 0xa0, 0x63, 0x66, 0xbc, 0x69, 0x9d, + 0x71, 0xe6, 0x64, 0x26, 0x46, 0x65, 0x6a, 0x44, 0xdc, 0x95, 0xe3, 0x43, 0xd8, 0x7c, 0x38, 0xfc, + 0xd9, 0x41, 0xbd, 0x7f, 0x11, 0xd9, 0xab, 0xe2, 0xe7, 0xe8, 0xc1, 0x5c, 0xf3, 0x39, 0xe3, 0x7c, + 0x51, 0x79, 0xa9, 0xde, 0xd2, 0xc5, 0xd1, 0x5b, 0xeb, 0x7f, 0xa2, 0xd7, 0x0a, 0xcf, 0xd0, 0xfe, + 0x3a, 0x74, 0x41, 0xa5, 0x24, 0x39, 0x95, 0x81, 0x3f, 0xe8, 0x8c, 0xba, 0xe3, 0xa8, 0xd5, 0xb7, + 0x35, 0x13, 0x7e, 0xb0, 0xbc, 0xf8, 0xe1, 0x9a, 0x98, 0xeb, 0x49, 0xfc, 0x08, 0x6d, 0x49, 0xd0, + 0x65, 0x4a, 0x4d, 0x1a, 0x3b, 0xb1, 0xab, 0xf0, 0x31, 0xda, 0x2e, 0xc8, 0x0d, 0x07, 0x92, 0x99, + 0xa7, 0xec, 0x8e, 0x1f, 0xd7, 0xe3, 0xea, 0x6d, 0x08, 0x3f, 0x9a, 0x6d, 0x88, 0x6b, 0x1c, 0xbe, + 0x40, 0x3d, 0xd0, 0xaa, 0xd0, 0x2a, 0x71, 0x3b, 0x2a, 0x83, 0xfb, 0xc6, 0xe9, 0xa8, 0xd5, 0xe9, + 0xa9, 0x25, 0xc4, 0x7b, 0x56, 0xc0, 0x95, 0x12, 0x7f, 0x43, 0xfb, 0x73, 0xe0, 0x1c, 0x56, 0xba, + 0x48, 0xe8, 0x55, 0x15, 0x02, 0x13, 0x85, 0x56, 0xc1, 0x96, 0xb1, 0xf4, 0xa2, 0x55, 0xf7, 0x6d, + 0xc5, 0x99, 0x56, 0x94, 0x18, 0xd7, 0x42, 0x4d, 0x6f, 0x78, 0x89, 0x0e, 0xff, 0xf3, 0xb6, 0x6b, + 0xd9, 0x78, 0x9b, 0xb2, 0xe9, 0xdc, 0x2d, 0x9b, 0x93, 0x5b, 0x0f, 0x3d, 0x4b, 0x61, 0xd1, 0x66, + 0xf8, 0x64, 0xd7, 0xad, 0xcb, 0x79, 0x25, 0x74, 0xee, 0x7d, 0x9d, 0x3a, 0x42, 0x0e, 0x9c, 0x88, + 0x3c, 0x84, 0x32, 0x8f, 0x72, 0x2a, 0xcc, 0x98, 0xc8, 0x1e, 0x91, 0x82, 0xc9, 0x8d, 0x1f, 0xfa, + 0x75, 0xd3, 0xfa, 0xe3, 0x79, 0xbf, 0x7d, 0x7f, 0xf2, 0xee, 0xd6, 0xef, 0xbf, 0xb7, 0x9a, 0xa7, + 0xc6, 0xc4, 0xa4, 0x31, 0xf1, 0xd9, 0x92, 0x66, 0x5b, 0x46, 0xff, 0xd5, 0xdf, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x52, 0x6e, 0x3d, 0x85, 0xfa, 0x04, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/functions/v1beta2/functions.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/functions/v1beta2/functions.pb.go index f853a77..53a9f56 100644 --- a/vendor/google.golang.org/genproto/googleapis/cloud/functions/v1beta2/functions.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/cloud/functions/v1beta2/functions.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/cloud/functions/v1beta2/functions.proto -// DO NOT EDIT! /* Package functions is a generated protocol buffer package. diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/functions/v1beta2/operations.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/functions/v1beta2/operations.pb.go index 33658f6..dee76e0 100644 --- a/vendor/google.golang.org/genproto/googleapis/cloud/functions/v1beta2/operations.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/cloud/functions/v1beta2/operations.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/cloud/functions/v1beta2/operations.proto -// DO NOT EDIT! package functions diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/iot/v1/device_manager.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/iot/v1/device_manager.pb.go new file mode 100644 index 0000000..6fc7116 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/iot/v1/device_manager.pb.go @@ -0,0 +1,1327 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/iot/v1/device_manager.proto + +/* +Package iot is a generated protocol buffer package. + +It is generated from these files: + google/cloud/iot/v1/device_manager.proto + google/cloud/iot/v1/resources.proto + +It has these top-level messages: + CreateDeviceRegistryRequest + GetDeviceRegistryRequest + DeleteDeviceRegistryRequest + UpdateDeviceRegistryRequest + ListDeviceRegistriesRequest + ListDeviceRegistriesResponse + CreateDeviceRequest + GetDeviceRequest + UpdateDeviceRequest + DeleteDeviceRequest + ListDevicesRequest + ListDevicesResponse + ModifyCloudToDeviceConfigRequest + ListDeviceConfigVersionsRequest + ListDeviceConfigVersionsResponse + ListDeviceStatesRequest + ListDeviceStatesResponse + Device + DeviceRegistry + MqttConfig + HttpConfig + EventNotificationConfig + StateNotificationConfig + RegistryCredential + X509CertificateDetails + PublicKeyCertificate + DeviceCredential + PublicKeyCredential + DeviceConfig + DeviceState +*/ +package iot + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_iam_v11 "google.golang.org/genproto/googleapis/iam/v1" +import google_iam_v1 "google.golang.org/genproto/googleapis/iam/v1" +import google_protobuf3 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf4 "google.golang.org/genproto/protobuf/field_mask" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Request for `CreateDeviceRegistry`. +type CreateDeviceRegistryRequest struct { + // The project and cloud region where this device registry must be created. + // For example, `projects/example-project/locations/us-central1`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The device registry. The field `name` must be empty. The server will + // generate that field from the device registry `id` provided and the + // `parent` field. + DeviceRegistry *DeviceRegistry `protobuf:"bytes,2,opt,name=device_registry,json=deviceRegistry" json:"device_registry,omitempty"` +} + +func (m *CreateDeviceRegistryRequest) Reset() { *m = CreateDeviceRegistryRequest{} } +func (m *CreateDeviceRegistryRequest) String() string { return proto.CompactTextString(m) } +func (*CreateDeviceRegistryRequest) ProtoMessage() {} +func (*CreateDeviceRegistryRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *CreateDeviceRegistryRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateDeviceRegistryRequest) GetDeviceRegistry() *DeviceRegistry { + if m != nil { + return m.DeviceRegistry + } + return nil +} + +// Request for `GetDeviceRegistry`. +type GetDeviceRegistryRequest struct { + // The name of the device registry. For example, + // `projects/example-project/locations/us-central1/registries/my-registry`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetDeviceRegistryRequest) Reset() { *m = GetDeviceRegistryRequest{} } +func (m *GetDeviceRegistryRequest) String() string { return proto.CompactTextString(m) } +func (*GetDeviceRegistryRequest) ProtoMessage() {} +func (*GetDeviceRegistryRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *GetDeviceRegistryRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request for `DeleteDeviceRegistry`. +type DeleteDeviceRegistryRequest struct { + // The name of the device registry. For example, + // `projects/example-project/locations/us-central1/registries/my-registry`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteDeviceRegistryRequest) Reset() { *m = DeleteDeviceRegistryRequest{} } +func (m *DeleteDeviceRegistryRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteDeviceRegistryRequest) ProtoMessage() {} +func (*DeleteDeviceRegistryRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *DeleteDeviceRegistryRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request for `UpdateDeviceRegistry`. +type UpdateDeviceRegistryRequest struct { + // The new values for the device registry. The `id` field must be empty, and + // the `name` field must indicate the path of the resource. For example, + // `projects/example-project/locations/us-central1/registries/my-registry`. + DeviceRegistry *DeviceRegistry `protobuf:"bytes,1,opt,name=device_registry,json=deviceRegistry" json:"device_registry,omitempty"` + // Only updates the `device_registry` fields indicated by this mask. + // The field mask must not be empty, and it must not contain fields that + // are immutable or only set by the server. + // Mutable top-level fields: `event_notification_config`, `http_config`, + // `mqtt_config`, and `state_notification_config`. + UpdateMask *google_protobuf4.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateDeviceRegistryRequest) Reset() { *m = UpdateDeviceRegistryRequest{} } +func (m *UpdateDeviceRegistryRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateDeviceRegistryRequest) ProtoMessage() {} +func (*UpdateDeviceRegistryRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *UpdateDeviceRegistryRequest) GetDeviceRegistry() *DeviceRegistry { + if m != nil { + return m.DeviceRegistry + } + return nil +} + +func (m *UpdateDeviceRegistryRequest) GetUpdateMask() *google_protobuf4.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +// Request for `ListDeviceRegistries`. +type ListDeviceRegistriesRequest struct { + // The project and cloud region path. For example, + // `projects/example-project/locations/us-central1`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The maximum number of registries to return in the response. If this value + // is zero, the service will select a default size. A call may return fewer + // objects than requested, but if there is a non-empty `page_token`, it + // indicates that more entries are available. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // The value returned by the last `ListDeviceRegistriesResponse`; indicates + // that this is a continuation of a prior `ListDeviceRegistries` call, and + // that the system should return the next page of data. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListDeviceRegistriesRequest) Reset() { *m = ListDeviceRegistriesRequest{} } +func (m *ListDeviceRegistriesRequest) String() string { return proto.CompactTextString(m) } +func (*ListDeviceRegistriesRequest) ProtoMessage() {} +func (*ListDeviceRegistriesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *ListDeviceRegistriesRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListDeviceRegistriesRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListDeviceRegistriesRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// Response for `ListDeviceRegistries`. +type ListDeviceRegistriesResponse struct { + // The registries that matched the query. + DeviceRegistries []*DeviceRegistry `protobuf:"bytes,1,rep,name=device_registries,json=deviceRegistries" json:"device_registries,omitempty"` + // If not empty, indicates that there may be more registries that match the + // request; this value should be passed in a new + // `ListDeviceRegistriesRequest`. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListDeviceRegistriesResponse) Reset() { *m = ListDeviceRegistriesResponse{} } +func (m *ListDeviceRegistriesResponse) String() string { return proto.CompactTextString(m) } +func (*ListDeviceRegistriesResponse) ProtoMessage() {} +func (*ListDeviceRegistriesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *ListDeviceRegistriesResponse) GetDeviceRegistries() []*DeviceRegistry { + if m != nil { + return m.DeviceRegistries + } + return nil +} + +func (m *ListDeviceRegistriesResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request for `CreateDevice`. +type CreateDeviceRequest struct { + // The name of the device registry where this device should be created. + // For example, + // `projects/example-project/locations/us-central1/registries/my-registry`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The device registration details. + Device *Device `protobuf:"bytes,2,opt,name=device" json:"device,omitempty"` +} + +func (m *CreateDeviceRequest) Reset() { *m = CreateDeviceRequest{} } +func (m *CreateDeviceRequest) String() string { return proto.CompactTextString(m) } +func (*CreateDeviceRequest) ProtoMessage() {} +func (*CreateDeviceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *CreateDeviceRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateDeviceRequest) GetDevice() *Device { + if m != nil { + return m.Device + } + return nil +} + +// Request for `GetDevice`. +type GetDeviceRequest struct { + // The name of the device. For example, + // `projects/p0/locations/us-central1/registries/registry0/devices/device0` or + // `projects/p0/locations/us-central1/registries/registry0/devices/{num_id}`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The fields of the `Device` resource to be returned in the response. If the + // field mask is unset or empty, all fields are returned. + FieldMask *google_protobuf4.FieldMask `protobuf:"bytes,2,opt,name=field_mask,json=fieldMask" json:"field_mask,omitempty"` +} + +func (m *GetDeviceRequest) Reset() { *m = GetDeviceRequest{} } +func (m *GetDeviceRequest) String() string { return proto.CompactTextString(m) } +func (*GetDeviceRequest) ProtoMessage() {} +func (*GetDeviceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *GetDeviceRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *GetDeviceRequest) GetFieldMask() *google_protobuf4.FieldMask { + if m != nil { + return m.FieldMask + } + return nil +} + +// Request for `UpdateDevice`. +type UpdateDeviceRequest struct { + // The new values for the device registry. The `id` and `num_id` fields must + // be empty, and the field `name` must specify the name path. For example, + // `projects/p0/locations/us-central1/registries/registry0/devices/device0`or + // `projects/p0/locations/us-central1/registries/registry0/devices/{num_id}`. + Device *Device `protobuf:"bytes,2,opt,name=device" json:"device,omitempty"` + // Only updates the `device` fields indicated by this mask. + // The field mask must not be empty, and it must not contain fields that + // are immutable or only set by the server. + // Mutable top-level fields: `credentials`, `enabled_state`, and `metadata` + UpdateMask *google_protobuf4.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateDeviceRequest) Reset() { *m = UpdateDeviceRequest{} } +func (m *UpdateDeviceRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateDeviceRequest) ProtoMessage() {} +func (*UpdateDeviceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *UpdateDeviceRequest) GetDevice() *Device { + if m != nil { + return m.Device + } + return nil +} + +func (m *UpdateDeviceRequest) GetUpdateMask() *google_protobuf4.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +// Request for `DeleteDevice`. +type DeleteDeviceRequest struct { + // The name of the device. For example, + // `projects/p0/locations/us-central1/registries/registry0/devices/device0` or + // `projects/p0/locations/us-central1/registries/registry0/devices/{num_id}`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteDeviceRequest) Reset() { *m = DeleteDeviceRequest{} } +func (m *DeleteDeviceRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteDeviceRequest) ProtoMessage() {} +func (*DeleteDeviceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *DeleteDeviceRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request for `ListDevices`. +type ListDevicesRequest struct { + // The device registry path. Required. For example, + // `projects/my-project/locations/us-central1/registries/my-registry`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // A list of device numerical ids. If empty, it will ignore this field. This + // field cannot hold more than 10,000 entries. + DeviceNumIds []uint64 `protobuf:"varint,2,rep,packed,name=device_num_ids,json=deviceNumIds" json:"device_num_ids,omitempty"` + // A list of device string identifiers. If empty, it will ignore this field. + // For example, `['device0', 'device12']`. This field cannot hold more than + // 10,000 entries. + DeviceIds []string `protobuf:"bytes,3,rep,name=device_ids,json=deviceIds" json:"device_ids,omitempty"` + // The fields of the `Device` resource to be returned in the response. The + // fields `id`, and `num_id` are always returned by default, along with any + // other fields specified. + FieldMask *google_protobuf4.FieldMask `protobuf:"bytes,4,opt,name=field_mask,json=fieldMask" json:"field_mask,omitempty"` + // The maximum number of devices to return in the response. If this value + // is zero, the service will select a default size. A call may return fewer + // objects than requested, but if there is a non-empty `page_token`, it + // indicates that more entries are available. + PageSize int32 `protobuf:"varint,100,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // The value returned by the last `ListDevicesResponse`; indicates + // that this is a continuation of a prior `ListDevices` call, and + // that the system should return the next page of data. + PageToken string `protobuf:"bytes,101,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListDevicesRequest) Reset() { *m = ListDevicesRequest{} } +func (m *ListDevicesRequest) String() string { return proto.CompactTextString(m) } +func (*ListDevicesRequest) ProtoMessage() {} +func (*ListDevicesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *ListDevicesRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListDevicesRequest) GetDeviceNumIds() []uint64 { + if m != nil { + return m.DeviceNumIds + } + return nil +} + +func (m *ListDevicesRequest) GetDeviceIds() []string { + if m != nil { + return m.DeviceIds + } + return nil +} + +func (m *ListDevicesRequest) GetFieldMask() *google_protobuf4.FieldMask { + if m != nil { + return m.FieldMask + } + return nil +} + +func (m *ListDevicesRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListDevicesRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// Response for `ListDevices`. +type ListDevicesResponse struct { + // The devices that match the request. + Devices []*Device `protobuf:"bytes,1,rep,name=devices" json:"devices,omitempty"` + // If not empty, indicates that there may be more devices that match the + // request; this value should be passed in a new `ListDevicesRequest`. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListDevicesResponse) Reset() { *m = ListDevicesResponse{} } +func (m *ListDevicesResponse) String() string { return proto.CompactTextString(m) } +func (*ListDevicesResponse) ProtoMessage() {} +func (*ListDevicesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *ListDevicesResponse) GetDevices() []*Device { + if m != nil { + return m.Devices + } + return nil +} + +func (m *ListDevicesResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request for `ModifyCloudToDeviceConfig`. +type ModifyCloudToDeviceConfigRequest struct { + // The name of the device. For example, + // `projects/p0/locations/us-central1/registries/registry0/devices/device0` or + // `projects/p0/locations/us-central1/registries/registry0/devices/{num_id}`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The version number to update. If this value is zero, it will not check the + // version number of the server and will always update the current version; + // otherwise, this update will fail if the version number found on the server + // does not match this version number. This is used to support multiple + // simultaneous updates without losing data. + VersionToUpdate int64 `protobuf:"varint,2,opt,name=version_to_update,json=versionToUpdate" json:"version_to_update,omitempty"` + // The configuration data for the device. + BinaryData []byte `protobuf:"bytes,3,opt,name=binary_data,json=binaryData,proto3" json:"binary_data,omitempty"` +} + +func (m *ModifyCloudToDeviceConfigRequest) Reset() { *m = ModifyCloudToDeviceConfigRequest{} } +func (m *ModifyCloudToDeviceConfigRequest) String() string { return proto.CompactTextString(m) } +func (*ModifyCloudToDeviceConfigRequest) ProtoMessage() {} +func (*ModifyCloudToDeviceConfigRequest) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{12} +} + +func (m *ModifyCloudToDeviceConfigRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ModifyCloudToDeviceConfigRequest) GetVersionToUpdate() int64 { + if m != nil { + return m.VersionToUpdate + } + return 0 +} + +func (m *ModifyCloudToDeviceConfigRequest) GetBinaryData() []byte { + if m != nil { + return m.BinaryData + } + return nil +} + +// Request for `ListDeviceConfigVersions`. +type ListDeviceConfigVersionsRequest struct { + // The name of the device. For example, + // `projects/p0/locations/us-central1/registries/registry0/devices/device0` or + // `projects/p0/locations/us-central1/registries/registry0/devices/{num_id}`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The number of versions to list. Versions are listed in decreasing order of + // the version number. The maximum number of versions retained is 10. If this + // value is zero, it will return all the versions available. + NumVersions int32 `protobuf:"varint,2,opt,name=num_versions,json=numVersions" json:"num_versions,omitempty"` +} + +func (m *ListDeviceConfigVersionsRequest) Reset() { *m = ListDeviceConfigVersionsRequest{} } +func (m *ListDeviceConfigVersionsRequest) String() string { return proto.CompactTextString(m) } +func (*ListDeviceConfigVersionsRequest) ProtoMessage() {} +func (*ListDeviceConfigVersionsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{13} +} + +func (m *ListDeviceConfigVersionsRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ListDeviceConfigVersionsRequest) GetNumVersions() int32 { + if m != nil { + return m.NumVersions + } + return 0 +} + +// Response for `ListDeviceConfigVersions`. +type ListDeviceConfigVersionsResponse struct { + // The device configuration for the last few versions. Versions are listed + // in decreasing order, starting from the most recent one. + DeviceConfigs []*DeviceConfig `protobuf:"bytes,1,rep,name=device_configs,json=deviceConfigs" json:"device_configs,omitempty"` +} + +func (m *ListDeviceConfigVersionsResponse) Reset() { *m = ListDeviceConfigVersionsResponse{} } +func (m *ListDeviceConfigVersionsResponse) String() string { return proto.CompactTextString(m) } +func (*ListDeviceConfigVersionsResponse) ProtoMessage() {} +func (*ListDeviceConfigVersionsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{14} +} + +func (m *ListDeviceConfigVersionsResponse) GetDeviceConfigs() []*DeviceConfig { + if m != nil { + return m.DeviceConfigs + } + return nil +} + +// Request for `ListDeviceStates`. +type ListDeviceStatesRequest struct { + // The name of the device. For example, + // `projects/p0/locations/us-central1/registries/registry0/devices/device0` or + // `projects/p0/locations/us-central1/registries/registry0/devices/{num_id}`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The number of states to list. States are listed in descending order of + // update time. The maximum number of states retained is 10. If this + // value is zero, it will return all the states available. + NumStates int32 `protobuf:"varint,2,opt,name=num_states,json=numStates" json:"num_states,omitempty"` +} + +func (m *ListDeviceStatesRequest) Reset() { *m = ListDeviceStatesRequest{} } +func (m *ListDeviceStatesRequest) String() string { return proto.CompactTextString(m) } +func (*ListDeviceStatesRequest) ProtoMessage() {} +func (*ListDeviceStatesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +func (m *ListDeviceStatesRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ListDeviceStatesRequest) GetNumStates() int32 { + if m != nil { + return m.NumStates + } + return 0 +} + +// Response for `ListDeviceStates`. +type ListDeviceStatesResponse struct { + // The last few device states. States are listed in descending order of server + // update time, starting from the most recent one. + DeviceStates []*DeviceState `protobuf:"bytes,1,rep,name=device_states,json=deviceStates" json:"device_states,omitempty"` +} + +func (m *ListDeviceStatesResponse) Reset() { *m = ListDeviceStatesResponse{} } +func (m *ListDeviceStatesResponse) String() string { return proto.CompactTextString(m) } +func (*ListDeviceStatesResponse) ProtoMessage() {} +func (*ListDeviceStatesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } + +func (m *ListDeviceStatesResponse) GetDeviceStates() []*DeviceState { + if m != nil { + return m.DeviceStates + } + return nil +} + +func init() { + proto.RegisterType((*CreateDeviceRegistryRequest)(nil), "google.cloud.iot.v1.CreateDeviceRegistryRequest") + proto.RegisterType((*GetDeviceRegistryRequest)(nil), "google.cloud.iot.v1.GetDeviceRegistryRequest") + proto.RegisterType((*DeleteDeviceRegistryRequest)(nil), "google.cloud.iot.v1.DeleteDeviceRegistryRequest") + proto.RegisterType((*UpdateDeviceRegistryRequest)(nil), "google.cloud.iot.v1.UpdateDeviceRegistryRequest") + proto.RegisterType((*ListDeviceRegistriesRequest)(nil), "google.cloud.iot.v1.ListDeviceRegistriesRequest") + proto.RegisterType((*ListDeviceRegistriesResponse)(nil), "google.cloud.iot.v1.ListDeviceRegistriesResponse") + proto.RegisterType((*CreateDeviceRequest)(nil), "google.cloud.iot.v1.CreateDeviceRequest") + proto.RegisterType((*GetDeviceRequest)(nil), "google.cloud.iot.v1.GetDeviceRequest") + proto.RegisterType((*UpdateDeviceRequest)(nil), "google.cloud.iot.v1.UpdateDeviceRequest") + proto.RegisterType((*DeleteDeviceRequest)(nil), "google.cloud.iot.v1.DeleteDeviceRequest") + proto.RegisterType((*ListDevicesRequest)(nil), "google.cloud.iot.v1.ListDevicesRequest") + proto.RegisterType((*ListDevicesResponse)(nil), "google.cloud.iot.v1.ListDevicesResponse") + proto.RegisterType((*ModifyCloudToDeviceConfigRequest)(nil), "google.cloud.iot.v1.ModifyCloudToDeviceConfigRequest") + proto.RegisterType((*ListDeviceConfigVersionsRequest)(nil), "google.cloud.iot.v1.ListDeviceConfigVersionsRequest") + proto.RegisterType((*ListDeviceConfigVersionsResponse)(nil), "google.cloud.iot.v1.ListDeviceConfigVersionsResponse") + proto.RegisterType((*ListDeviceStatesRequest)(nil), "google.cloud.iot.v1.ListDeviceStatesRequest") + proto.RegisterType((*ListDeviceStatesResponse)(nil), "google.cloud.iot.v1.ListDeviceStatesResponse") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for DeviceManager service + +type DeviceManagerClient interface { + // Creates a device registry that contains devices. + CreateDeviceRegistry(ctx context.Context, in *CreateDeviceRegistryRequest, opts ...grpc.CallOption) (*DeviceRegistry, error) + // Gets a device registry configuration. + GetDeviceRegistry(ctx context.Context, in *GetDeviceRegistryRequest, opts ...grpc.CallOption) (*DeviceRegistry, error) + // Updates a device registry configuration. + UpdateDeviceRegistry(ctx context.Context, in *UpdateDeviceRegistryRequest, opts ...grpc.CallOption) (*DeviceRegistry, error) + // Deletes a device registry configuration. + DeleteDeviceRegistry(ctx context.Context, in *DeleteDeviceRegistryRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) + // Lists device registries. + ListDeviceRegistries(ctx context.Context, in *ListDeviceRegistriesRequest, opts ...grpc.CallOption) (*ListDeviceRegistriesResponse, error) + // Creates a device in a device registry. + CreateDevice(ctx context.Context, in *CreateDeviceRequest, opts ...grpc.CallOption) (*Device, error) + // Gets details about a device. + GetDevice(ctx context.Context, in *GetDeviceRequest, opts ...grpc.CallOption) (*Device, error) + // Updates a device. + UpdateDevice(ctx context.Context, in *UpdateDeviceRequest, opts ...grpc.CallOption) (*Device, error) + // Deletes a device. + DeleteDevice(ctx context.Context, in *DeleteDeviceRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) + // List devices in a device registry. + ListDevices(ctx context.Context, in *ListDevicesRequest, opts ...grpc.CallOption) (*ListDevicesResponse, error) + // Modifies the configuration for the device, which is eventually sent from + // the Cloud IoT Core servers. Returns the modified configuration version and + // its metadata. + ModifyCloudToDeviceConfig(ctx context.Context, in *ModifyCloudToDeviceConfigRequest, opts ...grpc.CallOption) (*DeviceConfig, error) + // Lists the last few versions of the device configuration in descending + // order (i.e.: newest first). + ListDeviceConfigVersions(ctx context.Context, in *ListDeviceConfigVersionsRequest, opts ...grpc.CallOption) (*ListDeviceConfigVersionsResponse, error) + // Lists the last few versions of the device state in descending order (i.e.: + // newest first). + ListDeviceStates(ctx context.Context, in *ListDeviceStatesRequest, opts ...grpc.CallOption) (*ListDeviceStatesResponse, error) + // Sets the access control policy on the specified resource. Replaces any + // existing policy. + SetIamPolicy(ctx context.Context, in *google_iam_v11.SetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) + // Gets the access control policy for a resource. + // Returns an empty policy if the resource exists and does not have a policy + // set. + GetIamPolicy(ctx context.Context, in *google_iam_v11.GetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) + // Returns permissions that a caller has on the specified resource. + // If the resource does not exist, this will return an empty set of + // permissions, not a NOT_FOUND error. + TestIamPermissions(ctx context.Context, in *google_iam_v11.TestIamPermissionsRequest, opts ...grpc.CallOption) (*google_iam_v11.TestIamPermissionsResponse, error) +} + +type deviceManagerClient struct { + cc *grpc.ClientConn +} + +func NewDeviceManagerClient(cc *grpc.ClientConn) DeviceManagerClient { + return &deviceManagerClient{cc} +} + +func (c *deviceManagerClient) CreateDeviceRegistry(ctx context.Context, in *CreateDeviceRegistryRequest, opts ...grpc.CallOption) (*DeviceRegistry, error) { + out := new(DeviceRegistry) + err := grpc.Invoke(ctx, "/google.cloud.iot.v1.DeviceManager/CreateDeviceRegistry", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *deviceManagerClient) GetDeviceRegistry(ctx context.Context, in *GetDeviceRegistryRequest, opts ...grpc.CallOption) (*DeviceRegistry, error) { + out := new(DeviceRegistry) + err := grpc.Invoke(ctx, "/google.cloud.iot.v1.DeviceManager/GetDeviceRegistry", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *deviceManagerClient) UpdateDeviceRegistry(ctx context.Context, in *UpdateDeviceRegistryRequest, opts ...grpc.CallOption) (*DeviceRegistry, error) { + out := new(DeviceRegistry) + err := grpc.Invoke(ctx, "/google.cloud.iot.v1.DeviceManager/UpdateDeviceRegistry", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *deviceManagerClient) DeleteDeviceRegistry(ctx context.Context, in *DeleteDeviceRegistryRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) { + out := new(google_protobuf3.Empty) + err := grpc.Invoke(ctx, "/google.cloud.iot.v1.DeviceManager/DeleteDeviceRegistry", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *deviceManagerClient) ListDeviceRegistries(ctx context.Context, in *ListDeviceRegistriesRequest, opts ...grpc.CallOption) (*ListDeviceRegistriesResponse, error) { + out := new(ListDeviceRegistriesResponse) + err := grpc.Invoke(ctx, "/google.cloud.iot.v1.DeviceManager/ListDeviceRegistries", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *deviceManagerClient) CreateDevice(ctx context.Context, in *CreateDeviceRequest, opts ...grpc.CallOption) (*Device, error) { + out := new(Device) + err := grpc.Invoke(ctx, "/google.cloud.iot.v1.DeviceManager/CreateDevice", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *deviceManagerClient) GetDevice(ctx context.Context, in *GetDeviceRequest, opts ...grpc.CallOption) (*Device, error) { + out := new(Device) + err := grpc.Invoke(ctx, "/google.cloud.iot.v1.DeviceManager/GetDevice", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *deviceManagerClient) UpdateDevice(ctx context.Context, in *UpdateDeviceRequest, opts ...grpc.CallOption) (*Device, error) { + out := new(Device) + err := grpc.Invoke(ctx, "/google.cloud.iot.v1.DeviceManager/UpdateDevice", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *deviceManagerClient) DeleteDevice(ctx context.Context, in *DeleteDeviceRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) { + out := new(google_protobuf3.Empty) + err := grpc.Invoke(ctx, "/google.cloud.iot.v1.DeviceManager/DeleteDevice", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *deviceManagerClient) ListDevices(ctx context.Context, in *ListDevicesRequest, opts ...grpc.CallOption) (*ListDevicesResponse, error) { + out := new(ListDevicesResponse) + err := grpc.Invoke(ctx, "/google.cloud.iot.v1.DeviceManager/ListDevices", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *deviceManagerClient) ModifyCloudToDeviceConfig(ctx context.Context, in *ModifyCloudToDeviceConfigRequest, opts ...grpc.CallOption) (*DeviceConfig, error) { + out := new(DeviceConfig) + err := grpc.Invoke(ctx, "/google.cloud.iot.v1.DeviceManager/ModifyCloudToDeviceConfig", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *deviceManagerClient) ListDeviceConfigVersions(ctx context.Context, in *ListDeviceConfigVersionsRequest, opts ...grpc.CallOption) (*ListDeviceConfigVersionsResponse, error) { + out := new(ListDeviceConfigVersionsResponse) + err := grpc.Invoke(ctx, "/google.cloud.iot.v1.DeviceManager/ListDeviceConfigVersions", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *deviceManagerClient) ListDeviceStates(ctx context.Context, in *ListDeviceStatesRequest, opts ...grpc.CallOption) (*ListDeviceStatesResponse, error) { + out := new(ListDeviceStatesResponse) + err := grpc.Invoke(ctx, "/google.cloud.iot.v1.DeviceManager/ListDeviceStates", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *deviceManagerClient) SetIamPolicy(ctx context.Context, in *google_iam_v11.SetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) { + out := new(google_iam_v1.Policy) + err := grpc.Invoke(ctx, "/google.cloud.iot.v1.DeviceManager/SetIamPolicy", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *deviceManagerClient) GetIamPolicy(ctx context.Context, in *google_iam_v11.GetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) { + out := new(google_iam_v1.Policy) + err := grpc.Invoke(ctx, "/google.cloud.iot.v1.DeviceManager/GetIamPolicy", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *deviceManagerClient) TestIamPermissions(ctx context.Context, in *google_iam_v11.TestIamPermissionsRequest, opts ...grpc.CallOption) (*google_iam_v11.TestIamPermissionsResponse, error) { + out := new(google_iam_v11.TestIamPermissionsResponse) + err := grpc.Invoke(ctx, "/google.cloud.iot.v1.DeviceManager/TestIamPermissions", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for DeviceManager service + +type DeviceManagerServer interface { + // Creates a device registry that contains devices. + CreateDeviceRegistry(context.Context, *CreateDeviceRegistryRequest) (*DeviceRegistry, error) + // Gets a device registry configuration. + GetDeviceRegistry(context.Context, *GetDeviceRegistryRequest) (*DeviceRegistry, error) + // Updates a device registry configuration. + UpdateDeviceRegistry(context.Context, *UpdateDeviceRegistryRequest) (*DeviceRegistry, error) + // Deletes a device registry configuration. + DeleteDeviceRegistry(context.Context, *DeleteDeviceRegistryRequest) (*google_protobuf3.Empty, error) + // Lists device registries. + ListDeviceRegistries(context.Context, *ListDeviceRegistriesRequest) (*ListDeviceRegistriesResponse, error) + // Creates a device in a device registry. + CreateDevice(context.Context, *CreateDeviceRequest) (*Device, error) + // Gets details about a device. + GetDevice(context.Context, *GetDeviceRequest) (*Device, error) + // Updates a device. + UpdateDevice(context.Context, *UpdateDeviceRequest) (*Device, error) + // Deletes a device. + DeleteDevice(context.Context, *DeleteDeviceRequest) (*google_protobuf3.Empty, error) + // List devices in a device registry. + ListDevices(context.Context, *ListDevicesRequest) (*ListDevicesResponse, error) + // Modifies the configuration for the device, which is eventually sent from + // the Cloud IoT Core servers. Returns the modified configuration version and + // its metadata. + ModifyCloudToDeviceConfig(context.Context, *ModifyCloudToDeviceConfigRequest) (*DeviceConfig, error) + // Lists the last few versions of the device configuration in descending + // order (i.e.: newest first). + ListDeviceConfigVersions(context.Context, *ListDeviceConfigVersionsRequest) (*ListDeviceConfigVersionsResponse, error) + // Lists the last few versions of the device state in descending order (i.e.: + // newest first). + ListDeviceStates(context.Context, *ListDeviceStatesRequest) (*ListDeviceStatesResponse, error) + // Sets the access control policy on the specified resource. Replaces any + // existing policy. + SetIamPolicy(context.Context, *google_iam_v11.SetIamPolicyRequest) (*google_iam_v1.Policy, error) + // Gets the access control policy for a resource. + // Returns an empty policy if the resource exists and does not have a policy + // set. + GetIamPolicy(context.Context, *google_iam_v11.GetIamPolicyRequest) (*google_iam_v1.Policy, error) + // Returns permissions that a caller has on the specified resource. + // If the resource does not exist, this will return an empty set of + // permissions, not a NOT_FOUND error. + TestIamPermissions(context.Context, *google_iam_v11.TestIamPermissionsRequest) (*google_iam_v11.TestIamPermissionsResponse, error) +} + +func RegisterDeviceManagerServer(s *grpc.Server, srv DeviceManagerServer) { + s.RegisterService(&_DeviceManager_serviceDesc, srv) +} + +func _DeviceManager_CreateDeviceRegistry_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateDeviceRegistryRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DeviceManagerServer).CreateDeviceRegistry(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.iot.v1.DeviceManager/CreateDeviceRegistry", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DeviceManagerServer).CreateDeviceRegistry(ctx, req.(*CreateDeviceRegistryRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DeviceManager_GetDeviceRegistry_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetDeviceRegistryRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DeviceManagerServer).GetDeviceRegistry(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.iot.v1.DeviceManager/GetDeviceRegistry", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DeviceManagerServer).GetDeviceRegistry(ctx, req.(*GetDeviceRegistryRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DeviceManager_UpdateDeviceRegistry_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateDeviceRegistryRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DeviceManagerServer).UpdateDeviceRegistry(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.iot.v1.DeviceManager/UpdateDeviceRegistry", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DeviceManagerServer).UpdateDeviceRegistry(ctx, req.(*UpdateDeviceRegistryRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DeviceManager_DeleteDeviceRegistry_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteDeviceRegistryRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DeviceManagerServer).DeleteDeviceRegistry(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.iot.v1.DeviceManager/DeleteDeviceRegistry", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DeviceManagerServer).DeleteDeviceRegistry(ctx, req.(*DeleteDeviceRegistryRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DeviceManager_ListDeviceRegistries_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListDeviceRegistriesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DeviceManagerServer).ListDeviceRegistries(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.iot.v1.DeviceManager/ListDeviceRegistries", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DeviceManagerServer).ListDeviceRegistries(ctx, req.(*ListDeviceRegistriesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DeviceManager_CreateDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateDeviceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DeviceManagerServer).CreateDevice(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.iot.v1.DeviceManager/CreateDevice", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DeviceManagerServer).CreateDevice(ctx, req.(*CreateDeviceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DeviceManager_GetDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetDeviceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DeviceManagerServer).GetDevice(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.iot.v1.DeviceManager/GetDevice", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DeviceManagerServer).GetDevice(ctx, req.(*GetDeviceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DeviceManager_UpdateDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateDeviceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DeviceManagerServer).UpdateDevice(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.iot.v1.DeviceManager/UpdateDevice", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DeviceManagerServer).UpdateDevice(ctx, req.(*UpdateDeviceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DeviceManager_DeleteDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteDeviceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DeviceManagerServer).DeleteDevice(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.iot.v1.DeviceManager/DeleteDevice", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DeviceManagerServer).DeleteDevice(ctx, req.(*DeleteDeviceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DeviceManager_ListDevices_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListDevicesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DeviceManagerServer).ListDevices(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.iot.v1.DeviceManager/ListDevices", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DeviceManagerServer).ListDevices(ctx, req.(*ListDevicesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DeviceManager_ModifyCloudToDeviceConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ModifyCloudToDeviceConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DeviceManagerServer).ModifyCloudToDeviceConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.iot.v1.DeviceManager/ModifyCloudToDeviceConfig", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DeviceManagerServer).ModifyCloudToDeviceConfig(ctx, req.(*ModifyCloudToDeviceConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DeviceManager_ListDeviceConfigVersions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListDeviceConfigVersionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DeviceManagerServer).ListDeviceConfigVersions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.iot.v1.DeviceManager/ListDeviceConfigVersions", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DeviceManagerServer).ListDeviceConfigVersions(ctx, req.(*ListDeviceConfigVersionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DeviceManager_ListDeviceStates_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListDeviceStatesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DeviceManagerServer).ListDeviceStates(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.iot.v1.DeviceManager/ListDeviceStates", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DeviceManagerServer).ListDeviceStates(ctx, req.(*ListDeviceStatesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DeviceManager_SetIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(google_iam_v11.SetIamPolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DeviceManagerServer).SetIamPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.iot.v1.DeviceManager/SetIamPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DeviceManagerServer).SetIamPolicy(ctx, req.(*google_iam_v11.SetIamPolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DeviceManager_GetIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(google_iam_v11.GetIamPolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DeviceManagerServer).GetIamPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.iot.v1.DeviceManager/GetIamPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DeviceManagerServer).GetIamPolicy(ctx, req.(*google_iam_v11.GetIamPolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DeviceManager_TestIamPermissions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(google_iam_v11.TestIamPermissionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DeviceManagerServer).TestIamPermissions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.iot.v1.DeviceManager/TestIamPermissions", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DeviceManagerServer).TestIamPermissions(ctx, req.(*google_iam_v11.TestIamPermissionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _DeviceManager_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.iot.v1.DeviceManager", + HandlerType: (*DeviceManagerServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateDeviceRegistry", + Handler: _DeviceManager_CreateDeviceRegistry_Handler, + }, + { + MethodName: "GetDeviceRegistry", + Handler: _DeviceManager_GetDeviceRegistry_Handler, + }, + { + MethodName: "UpdateDeviceRegistry", + Handler: _DeviceManager_UpdateDeviceRegistry_Handler, + }, + { + MethodName: "DeleteDeviceRegistry", + Handler: _DeviceManager_DeleteDeviceRegistry_Handler, + }, + { + MethodName: "ListDeviceRegistries", + Handler: _DeviceManager_ListDeviceRegistries_Handler, + }, + { + MethodName: "CreateDevice", + Handler: _DeviceManager_CreateDevice_Handler, + }, + { + MethodName: "GetDevice", + Handler: _DeviceManager_GetDevice_Handler, + }, + { + MethodName: "UpdateDevice", + Handler: _DeviceManager_UpdateDevice_Handler, + }, + { + MethodName: "DeleteDevice", + Handler: _DeviceManager_DeleteDevice_Handler, + }, + { + MethodName: "ListDevices", + Handler: _DeviceManager_ListDevices_Handler, + }, + { + MethodName: "ModifyCloudToDeviceConfig", + Handler: _DeviceManager_ModifyCloudToDeviceConfig_Handler, + }, + { + MethodName: "ListDeviceConfigVersions", + Handler: _DeviceManager_ListDeviceConfigVersions_Handler, + }, + { + MethodName: "ListDeviceStates", + Handler: _DeviceManager_ListDeviceStates_Handler, + }, + { + MethodName: "SetIamPolicy", + Handler: _DeviceManager_SetIamPolicy_Handler, + }, + { + MethodName: "GetIamPolicy", + Handler: _DeviceManager_GetIamPolicy_Handler, + }, + { + MethodName: "TestIamPermissions", + Handler: _DeviceManager_TestIamPermissions_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/iot/v1/device_manager.proto", +} + +func init() { proto.RegisterFile("google/cloud/iot/v1/device_manager.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 1307 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x98, 0xcf, 0x8f, 0xdb, 0x44, + 0x14, 0xc7, 0x35, 0x9b, 0x52, 0xd8, 0xb7, 0x29, 0x6d, 0x67, 0xb7, 0x6d, 0x48, 0x5a, 0x9a, 0xba, + 0xfc, 0x48, 0x23, 0x6a, 0x77, 0xb7, 0xb4, 0x2a, 0xa9, 0xa0, 0xd0, 0x6e, 0xd9, 0xb6, 0x6a, 0x21, + 0x64, 0x17, 0x8a, 0x90, 0x50, 0x34, 0x1b, 0xcf, 0x46, 0xd3, 0x8d, 0x3d, 0xa9, 0xc7, 0x59, 0xb1, + 0x45, 0xbd, 0xd0, 0x03, 0x67, 0x40, 0x48, 0xbd, 0x21, 0x71, 0x40, 0xdc, 0x91, 0x10, 0x12, 0x77, + 0xfe, 0x01, 0x38, 0xf0, 0x07, 0x70, 0xe0, 0x4f, 0xe8, 0x11, 0x79, 0x66, 0xbc, 0x6b, 0x3b, 0xb6, + 0xe3, 0xe4, 0xc0, 0x2d, 0x9e, 0xf7, 0x66, 0xe6, 0x33, 0xdf, 0xf7, 0x9e, 0xe7, 0xc5, 0xd0, 0xe8, + 0x73, 0xde, 0x1f, 0x50, 0xab, 0x37, 0xe0, 0x23, 0xdb, 0x62, 0xdc, 0xb7, 0x76, 0x96, 0x2d, 0x9b, + 0xee, 0xb0, 0x1e, 0xed, 0x3a, 0xc4, 0x25, 0x7d, 0xea, 0x99, 0x43, 0x8f, 0xfb, 0x1c, 0x2f, 0x2a, + 0x4f, 0x53, 0x7a, 0x9a, 0x8c, 0xfb, 0xe6, 0xce, 0x72, 0xf5, 0xa4, 0x9e, 0x4e, 0x86, 0xcc, 0x22, + 0xae, 0xcb, 0x7d, 0xe2, 0x33, 0xee, 0x0a, 0x35, 0xa5, 0x7a, 0x36, 0x6d, 0x71, 0x8f, 0x0a, 0x3e, + 0xf2, 0x7a, 0x34, 0x74, 0x7a, 0x59, 0x3b, 0x31, 0xe2, 0x04, 0x66, 0x46, 0x9c, 0xee, 0x90, 0x0f, + 0x58, 0x6f, 0x57, 0xdb, 0xab, 0x71, 0x7b, 0xcc, 0x56, 0xd3, 0x36, 0xf9, 0xb4, 0x39, 0xda, 0xb2, + 0xa8, 0x33, 0xf4, 0x43, 0x63, 0x3d, 0x69, 0xdc, 0x62, 0x74, 0x60, 0x77, 0x1d, 0x22, 0xb6, 0x95, + 0x87, 0xf1, 0x04, 0x41, 0xed, 0x86, 0x47, 0x89, 0x4f, 0x57, 0xe5, 0x89, 0x3b, 0xb4, 0xcf, 0x84, + 0xef, 0xed, 0x76, 0xe8, 0xc3, 0x11, 0x15, 0x3e, 0x3e, 0x0e, 0x07, 0x87, 0xc4, 0xa3, 0xae, 0x5f, + 0x41, 0x75, 0xd4, 0x98, 0xef, 0xe8, 0x27, 0x7c, 0x17, 0x0e, 0x6b, 0x89, 0x3c, 0x3d, 0xa3, 0x32, + 0x57, 0x47, 0x8d, 0x85, 0x95, 0xb3, 0x66, 0x8a, 0x48, 0x66, 0x62, 0xf1, 0x17, 0xed, 0xd8, 0xb3, + 0x61, 0x42, 0x65, 0x8d, 0xfa, 0xe9, 0x04, 0x18, 0x0e, 0xb8, 0xc4, 0xa1, 0x7a, 0x7f, 0xf9, 0xdb, + 0x58, 0x86, 0xda, 0x2a, 0x1d, 0xd0, 0x2c, 0xe8, 0xb4, 0x29, 0x3f, 0x23, 0xa8, 0x7d, 0x3c, 0xb4, + 0x33, 0x0f, 0x9a, 0x72, 0x20, 0x34, 0xf3, 0x81, 0xf0, 0x55, 0x58, 0x18, 0xc9, 0xcd, 0xa4, 0xd6, + 0x5a, 0x9a, 0x6a, 0xb8, 0x52, 0x18, 0x0e, 0xf3, 0xfd, 0x20, 0x1c, 0xf7, 0x88, 0xd8, 0xee, 0x80, + 0x72, 0x0f, 0x7e, 0x1b, 0x0f, 0xa1, 0x76, 0x97, 0x89, 0xb8, 0x1c, 0x8c, 0x8a, 0x49, 0x21, 0xa9, + 0xc1, 0xfc, 0x90, 0xf4, 0x69, 0x57, 0xb0, 0x47, 0x54, 0xee, 0xf8, 0x5c, 0xe7, 0x85, 0x60, 0x60, + 0x9d, 0x3d, 0xa2, 0xf8, 0x14, 0x80, 0x34, 0xfa, 0x7c, 0x9b, 0xba, 0x95, 0x92, 0x9c, 0x28, 0xdd, + 0x37, 0x82, 0x01, 0xe3, 0x29, 0x82, 0x93, 0xe9, 0x7b, 0x8a, 0x21, 0x77, 0x05, 0xc5, 0x6d, 0x38, + 0x1a, 0x97, 0x87, 0x51, 0x51, 0x41, 0xf5, 0x52, 0x51, 0x81, 0x8e, 0xd8, 0x89, 0x95, 0xf1, 0x6b, + 0x70, 0xd8, 0xa5, 0x5f, 0xf8, 0xdd, 0x08, 0xd6, 0x9c, 0xc4, 0x3a, 0x14, 0x0c, 0xb7, 0xf7, 0xd0, + 0x36, 0x61, 0x31, 0x9e, 0xa0, 0xf9, 0x2a, 0x5c, 0x84, 0x83, 0x6a, 0x2b, 0x2d, 0x7a, 0x2d, 0x8f, + 0x4e, 0xbb, 0x1a, 0x04, 0x8e, 0x44, 0xf2, 0x2f, 0x33, 0x89, 0xf0, 0x5b, 0x00, 0xfb, 0x15, 0x54, + 0x20, 0xaa, 0xf3, 0x5b, 0xe1, 0x4f, 0xe3, 0x6b, 0x04, 0x8b, 0xf1, 0xfc, 0x53, 0xdb, 0xcc, 0xc2, + 0x9b, 0x4c, 0xaf, 0xd2, 0x54, 0xe9, 0x75, 0x0e, 0x16, 0xe3, 0xc5, 0x93, 0x5d, 0x34, 0xff, 0x22, + 0xc0, 0xfb, 0x69, 0x31, 0x31, 0x03, 0x5f, 0x01, 0x5d, 0x07, 0x5d, 0x77, 0xe4, 0x74, 0x99, 0x2d, + 0x2a, 0x73, 0xf5, 0x52, 0xe3, 0x40, 0xa7, 0xac, 0x46, 0x3f, 0x18, 0x39, 0xb7, 0x6d, 0x11, 0xa4, + 0xa2, 0xf6, 0x0a, 0x3c, 0x4a, 0xf5, 0x52, 0x90, 0x8a, 0x6a, 0x24, 0x30, 0xc7, 0x35, 0x3e, 0x30, + 0x85, 0xc6, 0xf1, 0x0a, 0xb0, 0x73, 0x2b, 0x80, 0x26, 0x2b, 0xc0, 0x87, 0xc5, 0xd8, 0x49, 0x75, + 0xde, 0x5f, 0x82, 0xe7, 0x15, 0x5a, 0x98, 0xed, 0xb9, 0xf1, 0x09, 0x7d, 0x0b, 0x27, 0xf7, 0x13, + 0x04, 0xf5, 0x7b, 0xdc, 0x66, 0x5b, 0xbb, 0x37, 0x82, 0xe5, 0x36, 0xb8, 0x5a, 0xe8, 0x06, 0x77, + 0xb7, 0x58, 0x3f, 0x2f, 0x13, 0x9b, 0x70, 0x74, 0x87, 0x7a, 0x82, 0x71, 0xb7, 0xeb, 0xf3, 0xae, + 0x8a, 0xae, 0xdc, 0xa2, 0xd4, 0x39, 0xac, 0x0d, 0x1b, 0x5c, 0xe5, 0x1b, 0x3e, 0x0d, 0x0b, 0x9b, + 0xcc, 0x25, 0xde, 0x6e, 0xd7, 0x26, 0x3e, 0x91, 0xd9, 0x52, 0xee, 0x80, 0x1a, 0x5a, 0x25, 0x3e, + 0x31, 0x3e, 0x85, 0xd3, 0xfb, 0x67, 0x57, 0x7b, 0x7f, 0xa2, 0xd6, 0x10, 0x79, 0x0c, 0x67, 0xa0, + 0x1c, 0xc4, 0x59, 0x6f, 0x27, 0xf4, 0x3b, 0x67, 0xc1, 0x1d, 0x39, 0xe1, 0x6c, 0x63, 0x00, 0xf5, + 0xec, 0x95, 0xb5, 0xc4, 0xb7, 0xf6, 0xb2, 0xa6, 0x27, 0x1d, 0x42, 0xa5, 0xcf, 0xe4, 0x28, 0xad, + 0x05, 0x3a, 0x64, 0x47, 0x9e, 0x84, 0x71, 0x17, 0x4e, 0xec, 0xef, 0xb6, 0xee, 0x13, 0x9f, 0xe6, + 0xf2, 0x9f, 0x02, 0x08, 0xf8, 0x85, 0x74, 0xd4, 0xf4, 0xf3, 0xee, 0xc8, 0x51, 0x33, 0x0d, 0x02, + 0x95, 0xf1, 0xd5, 0x34, 0xf3, 0x4d, 0xd0, 0x5b, 0x87, 0xb3, 0x15, 0x72, 0x3d, 0x07, 0x59, 0xae, + 0x10, 0x96, 0x82, 0x5a, 0x6e, 0xe5, 0xd9, 0x31, 0x38, 0xa4, 0xac, 0xf7, 0x54, 0xa3, 0x81, 0x7f, + 0x45, 0xb0, 0x94, 0x76, 0x1f, 0xe3, 0x0b, 0xa9, 0x4b, 0xe7, 0x5c, 0xdd, 0xd5, 0x22, 0xef, 0x65, + 0x63, 0xed, 0xab, 0x3f, 0xff, 0xf9, 0x6e, 0xee, 0x3d, 0xc3, 0x0c, 0x1a, 0x8b, 0x2f, 0x55, 0x1d, + 0xbf, 0x3d, 0xf4, 0xf8, 0x03, 0xda, 0xf3, 0x85, 0xd5, 0xb4, 0x06, 0xbc, 0xa7, 0xfa, 0x19, 0xab, + 0xf9, 0xd8, 0xda, 0x7f, 0xf5, 0xb7, 0x92, 0x97, 0x25, 0xfe, 0x01, 0xc1, 0xd1, 0xb1, 0x3b, 0x1c, + 0x9f, 0x4f, 0x65, 0xc8, 0xba, 0xeb, 0x8b, 0x21, 0x5f, 0x96, 0xc8, 0x17, 0xb0, 0x42, 0x0e, 0x22, + 0x99, 0x01, 0x1c, 0xe1, 0xb5, 0x9a, 0x8f, 0xf1, 0x1f, 0x08, 0x96, 0xd2, 0x3a, 0x80, 0x0c, 0x69, + 0x73, 0x9a, 0x85, 0x62, 0x9c, 0xf7, 0x25, 0xe7, 0x47, 0x2b, 0xef, 0x48, 0xce, 0x84, 0x5e, 0x66, + 0x61, 0xee, 0x71, 0xa9, 0x9f, 0x22, 0x58, 0x4a, 0x6b, 0x7f, 0x32, 0x0e, 0x92, 0xd3, 0x29, 0x55, + 0x8f, 0x8f, 0xbd, 0x58, 0x6f, 0x06, 0xed, 0x63, 0xa8, 0x71, 0x73, 0x5a, 0x8d, 0x7f, 0x41, 0xb0, + 0x94, 0xd6, 0x47, 0x64, 0xa0, 0xe5, 0xb4, 0x39, 0xd5, 0xe5, 0x29, 0x66, 0xa8, 0xaa, 0x4c, 0x64, + 0x46, 0xe1, 0x64, 0x0e, 0x72, 0xb7, 0x1c, 0xad, 0x24, 0xdc, 0x28, 0x50, 0x6c, 0x8a, 0x32, 0xef, + 0x3a, 0x30, 0x6e, 0x49, 0x9e, 0xeb, 0xc6, 0x95, 0xc9, 0x3c, 0x71, 0x1d, 0xf5, 0xdf, 0x0f, 0xd1, + 0x0a, 0x2f, 0xfc, 0x6f, 0x10, 0xcc, 0xef, 0x55, 0x0d, 0x7e, 0x75, 0x52, 0x55, 0x15, 0x60, 0x7b, + 0x57, 0xb2, 0xb5, 0xf0, 0x95, 0xa9, 0x22, 0x1c, 0x82, 0x05, 0xb1, 0xfe, 0x09, 0x41, 0x39, 0x5a, + 0x24, 0x19, 0xaa, 0xa5, 0x34, 0x3d, 0xf9, 0x64, 0x1f, 0x4a, 0xb2, 0xdb, 0x2b, 0xd7, 0x22, 0x75, + 0x63, 0xce, 0x00, 0xb8, 0x27, 0xde, 0xb7, 0x08, 0xca, 0xd1, 0x22, 0xc8, 0x00, 0x4d, 0x69, 0x8a, + 0x32, 0xeb, 0x43, 0xab, 0xd7, 0x9c, 0x5d, 0xbd, 0x1f, 0x11, 0x2c, 0x44, 0x1a, 0x0e, 0xfc, 0xfa, + 0x84, 0x74, 0xdf, 0xab, 0x8b, 0xc6, 0x64, 0x47, 0x5d, 0x0e, 0xf1, 0x10, 0xcf, 0x90, 0x7e, 0xf8, + 0x2f, 0x04, 0x2f, 0x65, 0xb6, 0x27, 0xf8, 0x52, 0x2a, 0xc9, 0xa4, 0x76, 0xa6, 0x3a, 0xf9, 0x5e, + 0x37, 0x3e, 0x97, 0xe4, 0xf7, 0x8d, 0xce, 0xac, 0xf2, 0xb6, 0x9c, 0x2c, 0x8a, 0x16, 0x6a, 0xe2, + 0xbf, 0x51, 0xf4, 0x6a, 0x8f, 0xb7, 0x25, 0xf8, 0xcd, 0x09, 0xfa, 0xa6, 0xf6, 0x47, 0xd5, 0x4b, + 0x53, 0xce, 0xd2, 0x21, 0xd2, 0xb9, 0x8e, 0xd7, 0x66, 0x3d, 0xa8, 0xd5, 0x8b, 0xd3, 0xff, 0x86, + 0xe0, 0x48, 0xb2, 0x6b, 0xc1, 0x6f, 0x4c, 0x80, 0x8b, 0xb5, 0x4a, 0xd5, 0xf3, 0x05, 0xbd, 0xf5, + 0x11, 0x74, 0x07, 0x81, 0xaf, 0xcd, 0x7c, 0x04, 0xd5, 0x42, 0xe1, 0xef, 0x11, 0x94, 0xd7, 0xa9, + 0x7f, 0x9b, 0x38, 0x6d, 0xf9, 0x81, 0x03, 0x1b, 0x21, 0x08, 0x23, 0x4e, 0x80, 0x10, 0x35, 0x86, + 0xb0, 0xc7, 0x12, 0x3e, 0xca, 0x6a, 0xdc, 0x91, 0x50, 0xab, 0x86, 0x82, 0x0a, 0xbf, 0xb7, 0x14, + 0xbb, 0x6f, 0x45, 0x64, 0x9b, 0x20, 0x5b, 0x02, 0xae, 0xb5, 0x3c, 0xae, 0xb5, 0xff, 0x87, 0xab, + 0x9f, 0xe0, 0xfa, 0x1d, 0x01, 0xde, 0xa0, 0x42, 0x0e, 0x52, 0xcf, 0x61, 0x42, 0x65, 0x40, 0x23, + 0xb1, 0xf3, 0xb8, 0x4b, 0xc8, 0x78, 0xae, 0x80, 0xa7, 0x0e, 0x72, 0x5b, 0x72, 0xdf, 0x31, 0x6e, + 0xce, 0xc0, 0xed, 0x8f, 0x2d, 0xdb, 0x42, 0xcd, 0xeb, 0x0f, 0xe0, 0x44, 0x8f, 0x3b, 0x69, 0xa9, + 0x76, 0x1d, 0xc7, 0x5a, 0xe2, 0x76, 0xf0, 0xe6, 0x6d, 0xa3, 0xcf, 0x2e, 0x6b, 0xd7, 0x3e, 0x1f, + 0x10, 0xb7, 0x6f, 0x72, 0xaf, 0x6f, 0xf5, 0xa9, 0x2b, 0xdf, 0xcb, 0x96, 0x32, 0x91, 0x21, 0x13, + 0xb1, 0x0f, 0x6d, 0x57, 0x19, 0xf7, 0x9f, 0x21, 0xb4, 0x79, 0x50, 0x7a, 0x5d, 0xfc, 0x2f, 0x00, + 0x00, 0xff, 0xff, 0xe6, 0xf2, 0xe0, 0x78, 0xea, 0x13, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/iot/v1/resources.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/iot/v1/resources.pb.go new file mode 100644 index 0000000..4533c77 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/iot/v1/resources.pb.go @@ -0,0 +1,1026 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/iot/v1/resources.proto + +package iot + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/timestamp" +import google_rpc "google.golang.org/genproto/googleapis/rpc/status" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Indicates whether an MQTT connection is enabled or disabled. See the field +// description for details. +type MqttState int32 + +const ( + // No MQTT state specified. If not specified, MQTT will be enabled by default. + MqttState_MQTT_STATE_UNSPECIFIED MqttState = 0 + // Enables a MQTT connection. + MqttState_MQTT_ENABLED MqttState = 1 + // Disables a MQTT connection. + MqttState_MQTT_DISABLED MqttState = 2 +) + +var MqttState_name = map[int32]string{ + 0: "MQTT_STATE_UNSPECIFIED", + 1: "MQTT_ENABLED", + 2: "MQTT_DISABLED", +} +var MqttState_value = map[string]int32{ + "MQTT_STATE_UNSPECIFIED": 0, + "MQTT_ENABLED": 1, + "MQTT_DISABLED": 2, +} + +func (x MqttState) String() string { + return proto.EnumName(MqttState_name, int32(x)) +} +func (MqttState) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +// Indicates whether DeviceService (HTTP) is enabled or disabled for the +// registry. See the field description for details. +type HttpState int32 + +const ( + // No HTTP state specified. If not specified, DeviceService will be + // enabled by default. + HttpState_HTTP_STATE_UNSPECIFIED HttpState = 0 + // Enables DeviceService (HTTP) service for the registry. + HttpState_HTTP_ENABLED HttpState = 1 + // Disables DeviceService (HTTP) service for the registry. + HttpState_HTTP_DISABLED HttpState = 2 +) + +var HttpState_name = map[int32]string{ + 0: "HTTP_STATE_UNSPECIFIED", + 1: "HTTP_ENABLED", + 2: "HTTP_DISABLED", +} +var HttpState_value = map[string]int32{ + "HTTP_STATE_UNSPECIFIED": 0, + "HTTP_ENABLED": 1, + "HTTP_DISABLED": 2, +} + +func (x HttpState) String() string { + return proto.EnumName(HttpState_name, int32(x)) +} +func (HttpState) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +// The supported formats for the public key. +type PublicKeyCertificateFormat int32 + +const ( + // The format has not been specified. This is an invalid default value and + // must not be used. + PublicKeyCertificateFormat_UNSPECIFIED_PUBLIC_KEY_CERTIFICATE_FORMAT PublicKeyCertificateFormat = 0 + // An X.509v3 certificate ([RFC5280](https://www.ietf.org/rfc/rfc5280.txt)), + // encoded in base64, and wrapped by `-----BEGIN CERTIFICATE-----` and + // `-----END CERTIFICATE-----`. + PublicKeyCertificateFormat_X509_CERTIFICATE_PEM PublicKeyCertificateFormat = 1 +) + +var PublicKeyCertificateFormat_name = map[int32]string{ + 0: "UNSPECIFIED_PUBLIC_KEY_CERTIFICATE_FORMAT", + 1: "X509_CERTIFICATE_PEM", +} +var PublicKeyCertificateFormat_value = map[string]int32{ + "UNSPECIFIED_PUBLIC_KEY_CERTIFICATE_FORMAT": 0, + "X509_CERTIFICATE_PEM": 1, +} + +func (x PublicKeyCertificateFormat) String() string { + return proto.EnumName(PublicKeyCertificateFormat_name, int32(x)) +} +func (PublicKeyCertificateFormat) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +// The supported formats for the public key. +type PublicKeyFormat int32 + +const ( + // The format has not been specified. This is an invalid default value and + // must not be used. + PublicKeyFormat_UNSPECIFIED_PUBLIC_KEY_FORMAT PublicKeyFormat = 0 + // An RSA public key encoded in base64, and wrapped by + // `-----BEGIN PUBLIC KEY-----` and `-----END PUBLIC KEY-----`. This can be + // used to verify `RS256` signatures in JWT tokens ([RFC7518]( + // https://www.ietf.org/rfc/rfc7518.txt)). + PublicKeyFormat_RSA_PEM PublicKeyFormat = 3 + // As RSA_PEM, but wrapped in an X.509v3 certificate ([RFC5280]( + // https://www.ietf.org/rfc/rfc5280.txt)), encoded in base64, and wrapped by + // `-----BEGIN CERTIFICATE-----` and `-----END CERTIFICATE-----`. + PublicKeyFormat_RSA_X509_PEM PublicKeyFormat = 1 + // Public key for the ECDSA algorithm using P-256 and SHA-256, encoded in + // base64, and wrapped by `-----BEGIN PUBLIC KEY-----` and `-----END + // PUBLIC KEY-----`. This can be used to verify JWT tokens with the `ES256` + // algorithm ([RFC7518](https://www.ietf.org/rfc/rfc7518.txt)). This curve is + // defined in [OpenSSL](https://www.openssl.org/) as the `prime256v1` curve. + PublicKeyFormat_ES256_PEM PublicKeyFormat = 2 + // As ES256_PEM, but wrapped in an X.509v3 certificate ([RFC5280]( + // https://www.ietf.org/rfc/rfc5280.txt)), encoded in base64, and wrapped by + // `-----BEGIN CERTIFICATE-----` and `-----END CERTIFICATE-----`. + PublicKeyFormat_ES256_X509_PEM PublicKeyFormat = 4 +) + +var PublicKeyFormat_name = map[int32]string{ + 0: "UNSPECIFIED_PUBLIC_KEY_FORMAT", + 3: "RSA_PEM", + 1: "RSA_X509_PEM", + 2: "ES256_PEM", + 4: "ES256_X509_PEM", +} +var PublicKeyFormat_value = map[string]int32{ + "UNSPECIFIED_PUBLIC_KEY_FORMAT": 0, + "RSA_PEM": 3, + "RSA_X509_PEM": 1, + "ES256_PEM": 2, + "ES256_X509_PEM": 4, +} + +func (x PublicKeyFormat) String() string { + return proto.EnumName(PublicKeyFormat_name, int32(x)) +} +func (PublicKeyFormat) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } + +// The device resource. +type Device struct { + // The user-defined device identifier. The device ID must be unique + // within a device registry. + Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` + // The resource path name. For example, + // `projects/p1/locations/us-central1/registries/registry0/devices/dev0` or + // `projects/p1/locations/us-central1/registries/registry0/devices/{num_id}`. + // When `name` is populated as a response from the service, it always ends + // in the device numeric ID. + Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` + // [Output only] A server-defined unique numeric ID for the device. This is a + // more compact way to identify devices, and it is globally unique. + NumId uint64 `protobuf:"varint,3,opt,name=num_id,json=numId" json:"num_id,omitempty"` + // The credentials used to authenticate this device. To allow credential + // rotation without interruption, multiple device credentials can be bound to + // this device. No more than 3 credentials can be bound to a single device at + // a time. When new credentials are added to a device, they are verified + // against the registry credentials. For details, see the description of the + // `DeviceRegistry.credentials` field. + Credentials []*DeviceCredential `protobuf:"bytes,12,rep,name=credentials" json:"credentials,omitempty"` + // [Output only] The last time a heartbeat was received. Timestamps are + // periodically collected and written to storage; they may be stale by a few + // minutes. This field is only for devices connecting through MQTT. + LastHeartbeatTime *google_protobuf1.Timestamp `protobuf:"bytes,7,opt,name=last_heartbeat_time,json=lastHeartbeatTime" json:"last_heartbeat_time,omitempty"` + // [Output only] The last time a telemetry event was received. Timestamps are + // periodically collected and written to storage; they may be stale by a few + // minutes. + LastEventTime *google_protobuf1.Timestamp `protobuf:"bytes,8,opt,name=last_event_time,json=lastEventTime" json:"last_event_time,omitempty"` + // [Output only] The last time a state event was received. Timestamps are + // periodically collected and written to storage; they may be stale by a few + // minutes. + LastStateTime *google_protobuf1.Timestamp `protobuf:"bytes,20,opt,name=last_state_time,json=lastStateTime" json:"last_state_time,omitempty"` + // [Output only] The last time a cloud-to-device config version acknowledgment + // was received from the device. This field is only for configurations + // sent through MQTT. + LastConfigAckTime *google_protobuf1.Timestamp `protobuf:"bytes,14,opt,name=last_config_ack_time,json=lastConfigAckTime" json:"last_config_ack_time,omitempty"` + // [Output only] The last time a cloud-to-device config version was sent to + // the device. + LastConfigSendTime *google_protobuf1.Timestamp `protobuf:"bytes,18,opt,name=last_config_send_time,json=lastConfigSendTime" json:"last_config_send_time,omitempty"` + // If a device is blocked, connections or requests from this device will fail. + // Can be used to temporarily prevent the device from connecting if, for + // example, the sensor is generating bad data and needs maintenance. + Blocked bool `protobuf:"varint,19,opt,name=blocked" json:"blocked,omitempty"` + // [Output only] The time the most recent error occurred, such as a failure to + // publish to Cloud Pub/Sub. This field is the timestamp of + // 'last_error_status'. + LastErrorTime *google_protobuf1.Timestamp `protobuf:"bytes,10,opt,name=last_error_time,json=lastErrorTime" json:"last_error_time,omitempty"` + // [Output only] The error message of the most recent error, such as a failure + // to publish to Cloud Pub/Sub. 'last_error_time' is the timestamp of this + // field. If no errors have occurred, this field has an empty message + // and the status code 0 == OK. Otherwise, this field is expected to have a + // status code other than OK. + LastErrorStatus *google_rpc.Status `protobuf:"bytes,11,opt,name=last_error_status,json=lastErrorStatus" json:"last_error_status,omitempty"` + // The most recent device configuration, which is eventually sent from + // Cloud IoT Core to the device. If not present on creation, the + // configuration will be initialized with an empty payload and version value + // of `1`. To update this field after creation, use the + // `DeviceManager.ModifyCloudToDeviceConfig` method. + Config *DeviceConfig `protobuf:"bytes,13,opt,name=config" json:"config,omitempty"` + // [Output only] The state most recently received from the device. If no state + // has been reported, this field is not present. + State *DeviceState `protobuf:"bytes,16,opt,name=state" json:"state,omitempty"` + // The metadata key-value pairs assigned to the device. This metadata is not + // interpreted or indexed by Cloud IoT Core. It can be used to add contextual + // information for the device. + // + // Keys must conform to the regular expression [a-zA-Z0-9-_]+ and be less than + // 128 bytes in length. + // + // Values are free-form strings. Each value must be less than or equal to 32 + // KB in size. + // + // The total size of all keys and values must be less than 256 KB, and the + // maximum number of key-value pairs is 500. + Metadata map[string]string `protobuf:"bytes,17,rep,name=metadata" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *Device) Reset() { *m = Device{} } +func (m *Device) String() string { return proto.CompactTextString(m) } +func (*Device) ProtoMessage() {} +func (*Device) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *Device) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *Device) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Device) GetNumId() uint64 { + if m != nil { + return m.NumId + } + return 0 +} + +func (m *Device) GetCredentials() []*DeviceCredential { + if m != nil { + return m.Credentials + } + return nil +} + +func (m *Device) GetLastHeartbeatTime() *google_protobuf1.Timestamp { + if m != nil { + return m.LastHeartbeatTime + } + return nil +} + +func (m *Device) GetLastEventTime() *google_protobuf1.Timestamp { + if m != nil { + return m.LastEventTime + } + return nil +} + +func (m *Device) GetLastStateTime() *google_protobuf1.Timestamp { + if m != nil { + return m.LastStateTime + } + return nil +} + +func (m *Device) GetLastConfigAckTime() *google_protobuf1.Timestamp { + if m != nil { + return m.LastConfigAckTime + } + return nil +} + +func (m *Device) GetLastConfigSendTime() *google_protobuf1.Timestamp { + if m != nil { + return m.LastConfigSendTime + } + return nil +} + +func (m *Device) GetBlocked() bool { + if m != nil { + return m.Blocked + } + return false +} + +func (m *Device) GetLastErrorTime() *google_protobuf1.Timestamp { + if m != nil { + return m.LastErrorTime + } + return nil +} + +func (m *Device) GetLastErrorStatus() *google_rpc.Status { + if m != nil { + return m.LastErrorStatus + } + return nil +} + +func (m *Device) GetConfig() *DeviceConfig { + if m != nil { + return m.Config + } + return nil +} + +func (m *Device) GetState() *DeviceState { + if m != nil { + return m.State + } + return nil +} + +func (m *Device) GetMetadata() map[string]string { + if m != nil { + return m.Metadata + } + return nil +} + +// A container for a group of devices. +type DeviceRegistry struct { + // The identifier of this device registry. For example, `myRegistry`. + Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` + // The resource path name. For example, + // `projects/example-project/locations/us-central1/registries/my-registry`. + Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` + // The configuration for notification of telemetry events received from the + // device. All telemetry events that were successfully published by the + // device and acknowledged by Cloud IoT Core are guaranteed to be + // delivered to Cloud Pub/Sub. Only the first configuration is used. If you + // try to publish a device telemetry event using MQTT without specifying a + // Cloud Pub/Sub topic for the device's registry, the connection closes + // automatically. If you try to do so using an HTTP connection, an error + // is returned. + EventNotificationConfigs []*EventNotificationConfig `protobuf:"bytes,10,rep,name=event_notification_configs,json=eventNotificationConfigs" json:"event_notification_configs,omitempty"` + // The configuration for notification of new states received from the device. + // State updates are guaranteed to be stored in the state history, but + // notifications to Cloud Pub/Sub are not guaranteed. For example, if + // permissions are misconfigured or the specified topic doesn't exist, no + // notification will be published but the state will still be stored in Cloud + // IoT Core. + StateNotificationConfig *StateNotificationConfig `protobuf:"bytes,7,opt,name=state_notification_config,json=stateNotificationConfig" json:"state_notification_config,omitempty"` + // The MQTT configuration for this device registry. + MqttConfig *MqttConfig `protobuf:"bytes,4,opt,name=mqtt_config,json=mqttConfig" json:"mqtt_config,omitempty"` + // The DeviceService (HTTP) configuration for this device registry. + HttpConfig *HttpConfig `protobuf:"bytes,9,opt,name=http_config,json=httpConfig" json:"http_config,omitempty"` + // The credentials used to verify the device credentials. No more than 10 + // credentials can be bound to a single registry at a time. The verification + // process occurs at the time of device creation or update. If this field is + // empty, no verification is performed. Otherwise, the credentials of a newly + // created device or added credentials of an updated device should be signed + // with one of these registry credentials. + // + // Note, however, that existing devices will never be affected by + // modifications to this list of credentials: after a device has been + // successfully created in a registry, it should be able to connect even if + // its registry credentials are revoked, deleted, or modified. + Credentials []*RegistryCredential `protobuf:"bytes,8,rep,name=credentials" json:"credentials,omitempty"` +} + +func (m *DeviceRegistry) Reset() { *m = DeviceRegistry{} } +func (m *DeviceRegistry) String() string { return proto.CompactTextString(m) } +func (*DeviceRegistry) ProtoMessage() {} +func (*DeviceRegistry) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +func (m *DeviceRegistry) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *DeviceRegistry) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *DeviceRegistry) GetEventNotificationConfigs() []*EventNotificationConfig { + if m != nil { + return m.EventNotificationConfigs + } + return nil +} + +func (m *DeviceRegistry) GetStateNotificationConfig() *StateNotificationConfig { + if m != nil { + return m.StateNotificationConfig + } + return nil +} + +func (m *DeviceRegistry) GetMqttConfig() *MqttConfig { + if m != nil { + return m.MqttConfig + } + return nil +} + +func (m *DeviceRegistry) GetHttpConfig() *HttpConfig { + if m != nil { + return m.HttpConfig + } + return nil +} + +func (m *DeviceRegistry) GetCredentials() []*RegistryCredential { + if m != nil { + return m.Credentials + } + return nil +} + +// The configuration of MQTT for a device registry. +type MqttConfig struct { + // If enabled, allows connections using the MQTT protocol. Otherwise, MQTT + // connections to this registry will fail. + MqttEnabledState MqttState `protobuf:"varint,1,opt,name=mqtt_enabled_state,json=mqttEnabledState,enum=google.cloud.iot.v1.MqttState" json:"mqtt_enabled_state,omitempty"` +} + +func (m *MqttConfig) Reset() { *m = MqttConfig{} } +func (m *MqttConfig) String() string { return proto.CompactTextString(m) } +func (*MqttConfig) ProtoMessage() {} +func (*MqttConfig) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +func (m *MqttConfig) GetMqttEnabledState() MqttState { + if m != nil { + return m.MqttEnabledState + } + return MqttState_MQTT_STATE_UNSPECIFIED +} + +// The configuration of the HTTP bridge for a device registry. +type HttpConfig struct { + // If enabled, allows devices to use DeviceService via the HTTP protocol. + // Otherwise, any requests to DeviceService will fail for this registry. + HttpEnabledState HttpState `protobuf:"varint,1,opt,name=http_enabled_state,json=httpEnabledState,enum=google.cloud.iot.v1.HttpState" json:"http_enabled_state,omitempty"` +} + +func (m *HttpConfig) Reset() { *m = HttpConfig{} } +func (m *HttpConfig) String() string { return proto.CompactTextString(m) } +func (*HttpConfig) ProtoMessage() {} +func (*HttpConfig) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } + +func (m *HttpConfig) GetHttpEnabledState() HttpState { + if m != nil { + return m.HttpEnabledState + } + return HttpState_HTTP_STATE_UNSPECIFIED +} + +// The configuration to forward telemetry events. +type EventNotificationConfig struct { + // A Cloud Pub/Sub topic name. For example, + // `projects/myProject/topics/deviceEvents`. + PubsubTopicName string `protobuf:"bytes,1,opt,name=pubsub_topic_name,json=pubsubTopicName" json:"pubsub_topic_name,omitempty"` +} + +func (m *EventNotificationConfig) Reset() { *m = EventNotificationConfig{} } +func (m *EventNotificationConfig) String() string { return proto.CompactTextString(m) } +func (*EventNotificationConfig) ProtoMessage() {} +func (*EventNotificationConfig) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } + +func (m *EventNotificationConfig) GetPubsubTopicName() string { + if m != nil { + return m.PubsubTopicName + } + return "" +} + +// The configuration for notification of new states received from the device. +type StateNotificationConfig struct { + // A Cloud Pub/Sub topic name. For example, + // `projects/myProject/topics/deviceEvents`. + PubsubTopicName string `protobuf:"bytes,1,opt,name=pubsub_topic_name,json=pubsubTopicName" json:"pubsub_topic_name,omitempty"` +} + +func (m *StateNotificationConfig) Reset() { *m = StateNotificationConfig{} } +func (m *StateNotificationConfig) String() string { return proto.CompactTextString(m) } +func (*StateNotificationConfig) ProtoMessage() {} +func (*StateNotificationConfig) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } + +func (m *StateNotificationConfig) GetPubsubTopicName() string { + if m != nil { + return m.PubsubTopicName + } + return "" +} + +// A server-stored registry credential used to validate device credentials. +type RegistryCredential struct { + // The credential data. Reserved for expansion in the future. + // + // Types that are valid to be assigned to Credential: + // *RegistryCredential_PublicKeyCertificate + Credential isRegistryCredential_Credential `protobuf_oneof:"credential"` +} + +func (m *RegistryCredential) Reset() { *m = RegistryCredential{} } +func (m *RegistryCredential) String() string { return proto.CompactTextString(m) } +func (*RegistryCredential) ProtoMessage() {} +func (*RegistryCredential) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } + +type isRegistryCredential_Credential interface { + isRegistryCredential_Credential() +} + +type RegistryCredential_PublicKeyCertificate struct { + PublicKeyCertificate *PublicKeyCertificate `protobuf:"bytes,1,opt,name=public_key_certificate,json=publicKeyCertificate,oneof"` +} + +func (*RegistryCredential_PublicKeyCertificate) isRegistryCredential_Credential() {} + +func (m *RegistryCredential) GetCredential() isRegistryCredential_Credential { + if m != nil { + return m.Credential + } + return nil +} + +func (m *RegistryCredential) GetPublicKeyCertificate() *PublicKeyCertificate { + if x, ok := m.GetCredential().(*RegistryCredential_PublicKeyCertificate); ok { + return x.PublicKeyCertificate + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*RegistryCredential) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _RegistryCredential_OneofMarshaler, _RegistryCredential_OneofUnmarshaler, _RegistryCredential_OneofSizer, []interface{}{ + (*RegistryCredential_PublicKeyCertificate)(nil), + } +} + +func _RegistryCredential_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*RegistryCredential) + // credential + switch x := m.Credential.(type) { + case *RegistryCredential_PublicKeyCertificate: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.PublicKeyCertificate); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("RegistryCredential.Credential has unexpected type %T", x) + } + return nil +} + +func _RegistryCredential_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*RegistryCredential) + switch tag { + case 1: // credential.public_key_certificate + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PublicKeyCertificate) + err := b.DecodeMessage(msg) + m.Credential = &RegistryCredential_PublicKeyCertificate{msg} + return true, err + default: + return false, nil + } +} + +func _RegistryCredential_OneofSizer(msg proto.Message) (n int) { + m := msg.(*RegistryCredential) + // credential + switch x := m.Credential.(type) { + case *RegistryCredential_PublicKeyCertificate: + s := proto.Size(x.PublicKeyCertificate) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Details of an X.509 certificate. For informational purposes only. +type X509CertificateDetails struct { + // The entity that signed the certificate. + Issuer string `protobuf:"bytes,1,opt,name=issuer" json:"issuer,omitempty"` + // The entity the certificate and public key belong to. + Subject string `protobuf:"bytes,2,opt,name=subject" json:"subject,omitempty"` + // The time the certificate becomes valid. + StartTime *google_protobuf1.Timestamp `protobuf:"bytes,3,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // The time the certificate becomes invalid. + ExpiryTime *google_protobuf1.Timestamp `protobuf:"bytes,4,opt,name=expiry_time,json=expiryTime" json:"expiry_time,omitempty"` + // The algorithm used to sign the certificate. + SignatureAlgorithm string `protobuf:"bytes,5,opt,name=signature_algorithm,json=signatureAlgorithm" json:"signature_algorithm,omitempty"` + // The type of public key in the certificate. + PublicKeyType string `protobuf:"bytes,6,opt,name=public_key_type,json=publicKeyType" json:"public_key_type,omitempty"` +} + +func (m *X509CertificateDetails) Reset() { *m = X509CertificateDetails{} } +func (m *X509CertificateDetails) String() string { return proto.CompactTextString(m) } +func (*X509CertificateDetails) ProtoMessage() {} +func (*X509CertificateDetails) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} } + +func (m *X509CertificateDetails) GetIssuer() string { + if m != nil { + return m.Issuer + } + return "" +} + +func (m *X509CertificateDetails) GetSubject() string { + if m != nil { + return m.Subject + } + return "" +} + +func (m *X509CertificateDetails) GetStartTime() *google_protobuf1.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *X509CertificateDetails) GetExpiryTime() *google_protobuf1.Timestamp { + if m != nil { + return m.ExpiryTime + } + return nil +} + +func (m *X509CertificateDetails) GetSignatureAlgorithm() string { + if m != nil { + return m.SignatureAlgorithm + } + return "" +} + +func (m *X509CertificateDetails) GetPublicKeyType() string { + if m != nil { + return m.PublicKeyType + } + return "" +} + +// A public key certificate format and data. +type PublicKeyCertificate struct { + // The certificate format. + Format PublicKeyCertificateFormat `protobuf:"varint,1,opt,name=format,enum=google.cloud.iot.v1.PublicKeyCertificateFormat" json:"format,omitempty"` + // The certificate data. + Certificate string `protobuf:"bytes,2,opt,name=certificate" json:"certificate,omitempty"` + // [Output only] The certificate details. Used only for X.509 certificates. + X509Details *X509CertificateDetails `protobuf:"bytes,3,opt,name=x509_details,json=x509Details" json:"x509_details,omitempty"` +} + +func (m *PublicKeyCertificate) Reset() { *m = PublicKeyCertificate{} } +func (m *PublicKeyCertificate) String() string { return proto.CompactTextString(m) } +func (*PublicKeyCertificate) ProtoMessage() {} +func (*PublicKeyCertificate) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} } + +func (m *PublicKeyCertificate) GetFormat() PublicKeyCertificateFormat { + if m != nil { + return m.Format + } + return PublicKeyCertificateFormat_UNSPECIFIED_PUBLIC_KEY_CERTIFICATE_FORMAT +} + +func (m *PublicKeyCertificate) GetCertificate() string { + if m != nil { + return m.Certificate + } + return "" +} + +func (m *PublicKeyCertificate) GetX509Details() *X509CertificateDetails { + if m != nil { + return m.X509Details + } + return nil +} + +// A server-stored device credential used for authentication. +type DeviceCredential struct { + // The credential data. Reserved for expansion in the future. + // + // Types that are valid to be assigned to Credential: + // *DeviceCredential_PublicKey + Credential isDeviceCredential_Credential `protobuf_oneof:"credential"` + // [Optional] The time at which this credential becomes invalid. This + // credential will be ignored for new client authentication requests after + // this timestamp; however, it will not be automatically deleted. + ExpirationTime *google_protobuf1.Timestamp `protobuf:"bytes,6,opt,name=expiration_time,json=expirationTime" json:"expiration_time,omitempty"` +} + +func (m *DeviceCredential) Reset() { *m = DeviceCredential{} } +func (m *DeviceCredential) String() string { return proto.CompactTextString(m) } +func (*DeviceCredential) ProtoMessage() {} +func (*DeviceCredential) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{9} } + +type isDeviceCredential_Credential interface { + isDeviceCredential_Credential() +} + +type DeviceCredential_PublicKey struct { + PublicKey *PublicKeyCredential `protobuf:"bytes,2,opt,name=public_key,json=publicKey,oneof"` +} + +func (*DeviceCredential_PublicKey) isDeviceCredential_Credential() {} + +func (m *DeviceCredential) GetCredential() isDeviceCredential_Credential { + if m != nil { + return m.Credential + } + return nil +} + +func (m *DeviceCredential) GetPublicKey() *PublicKeyCredential { + if x, ok := m.GetCredential().(*DeviceCredential_PublicKey); ok { + return x.PublicKey + } + return nil +} + +func (m *DeviceCredential) GetExpirationTime() *google_protobuf1.Timestamp { + if m != nil { + return m.ExpirationTime + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*DeviceCredential) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _DeviceCredential_OneofMarshaler, _DeviceCredential_OneofUnmarshaler, _DeviceCredential_OneofSizer, []interface{}{ + (*DeviceCredential_PublicKey)(nil), + } +} + +func _DeviceCredential_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*DeviceCredential) + // credential + switch x := m.Credential.(type) { + case *DeviceCredential_PublicKey: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.PublicKey); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("DeviceCredential.Credential has unexpected type %T", x) + } + return nil +} + +func _DeviceCredential_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*DeviceCredential) + switch tag { + case 2: // credential.public_key + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PublicKeyCredential) + err := b.DecodeMessage(msg) + m.Credential = &DeviceCredential_PublicKey{msg} + return true, err + default: + return false, nil + } +} + +func _DeviceCredential_OneofSizer(msg proto.Message) (n int) { + m := msg.(*DeviceCredential) + // credential + switch x := m.Credential.(type) { + case *DeviceCredential_PublicKey: + s := proto.Size(x.PublicKey) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A public key format and data. +type PublicKeyCredential struct { + // The format of the key. + Format PublicKeyFormat `protobuf:"varint,1,opt,name=format,enum=google.cloud.iot.v1.PublicKeyFormat" json:"format,omitempty"` + // The key data. + Key string `protobuf:"bytes,2,opt,name=key" json:"key,omitempty"` +} + +func (m *PublicKeyCredential) Reset() { *m = PublicKeyCredential{} } +func (m *PublicKeyCredential) String() string { return proto.CompactTextString(m) } +func (*PublicKeyCredential) ProtoMessage() {} +func (*PublicKeyCredential) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{10} } + +func (m *PublicKeyCredential) GetFormat() PublicKeyFormat { + if m != nil { + return m.Format + } + return PublicKeyFormat_UNSPECIFIED_PUBLIC_KEY_FORMAT +} + +func (m *PublicKeyCredential) GetKey() string { + if m != nil { + return m.Key + } + return "" +} + +// The device configuration. Eventually delivered to devices. +type DeviceConfig struct { + // [Output only] The version of this update. The version number is assigned by + // the server, and is always greater than 0 after device creation. The + // version must be 0 on the `CreateDevice` request if a `config` is + // specified; the response of `CreateDevice` will always have a value of 1. + Version int64 `protobuf:"varint,1,opt,name=version" json:"version,omitempty"` + // [Output only] The time at which this configuration version was updated in + // Cloud IoT Core. This timestamp is set by the server. + CloudUpdateTime *google_protobuf1.Timestamp `protobuf:"bytes,2,opt,name=cloud_update_time,json=cloudUpdateTime" json:"cloud_update_time,omitempty"` + // [Output only] The time at which Cloud IoT Core received the + // acknowledgment from the device, indicating that the device has received + // this configuration version. If this field is not present, the device has + // not yet acknowledged that it received this version. Note that when + // the config was sent to the device, many config versions may have been + // available in Cloud IoT Core while the device was disconnected, and on + // connection, only the latest version is sent to the device. Some + // versions may never be sent to the device, and therefore are never + // acknowledged. This timestamp is set by Cloud IoT Core. + DeviceAckTime *google_protobuf1.Timestamp `protobuf:"bytes,3,opt,name=device_ack_time,json=deviceAckTime" json:"device_ack_time,omitempty"` + // The device configuration data. + BinaryData []byte `protobuf:"bytes,4,opt,name=binary_data,json=binaryData,proto3" json:"binary_data,omitempty"` +} + +func (m *DeviceConfig) Reset() { *m = DeviceConfig{} } +func (m *DeviceConfig) String() string { return proto.CompactTextString(m) } +func (*DeviceConfig) ProtoMessage() {} +func (*DeviceConfig) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{11} } + +func (m *DeviceConfig) GetVersion() int64 { + if m != nil { + return m.Version + } + return 0 +} + +func (m *DeviceConfig) GetCloudUpdateTime() *google_protobuf1.Timestamp { + if m != nil { + return m.CloudUpdateTime + } + return nil +} + +func (m *DeviceConfig) GetDeviceAckTime() *google_protobuf1.Timestamp { + if m != nil { + return m.DeviceAckTime + } + return nil +} + +func (m *DeviceConfig) GetBinaryData() []byte { + if m != nil { + return m.BinaryData + } + return nil +} + +// The device state, as reported by the device. +type DeviceState struct { + // [Output only] The time at which this state version was updated in Cloud + // IoT Core. + UpdateTime *google_protobuf1.Timestamp `protobuf:"bytes,1,opt,name=update_time,json=updateTime" json:"update_time,omitempty"` + // The device state data. + BinaryData []byte `protobuf:"bytes,2,opt,name=binary_data,json=binaryData,proto3" json:"binary_data,omitempty"` +} + +func (m *DeviceState) Reset() { *m = DeviceState{} } +func (m *DeviceState) String() string { return proto.CompactTextString(m) } +func (*DeviceState) ProtoMessage() {} +func (*DeviceState) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{12} } + +func (m *DeviceState) GetUpdateTime() *google_protobuf1.Timestamp { + if m != nil { + return m.UpdateTime + } + return nil +} + +func (m *DeviceState) GetBinaryData() []byte { + if m != nil { + return m.BinaryData + } + return nil +} + +func init() { + proto.RegisterType((*Device)(nil), "google.cloud.iot.v1.Device") + proto.RegisterType((*DeviceRegistry)(nil), "google.cloud.iot.v1.DeviceRegistry") + proto.RegisterType((*MqttConfig)(nil), "google.cloud.iot.v1.MqttConfig") + proto.RegisterType((*HttpConfig)(nil), "google.cloud.iot.v1.HttpConfig") + proto.RegisterType((*EventNotificationConfig)(nil), "google.cloud.iot.v1.EventNotificationConfig") + proto.RegisterType((*StateNotificationConfig)(nil), "google.cloud.iot.v1.StateNotificationConfig") + proto.RegisterType((*RegistryCredential)(nil), "google.cloud.iot.v1.RegistryCredential") + proto.RegisterType((*X509CertificateDetails)(nil), "google.cloud.iot.v1.X509CertificateDetails") + proto.RegisterType((*PublicKeyCertificate)(nil), "google.cloud.iot.v1.PublicKeyCertificate") + proto.RegisterType((*DeviceCredential)(nil), "google.cloud.iot.v1.DeviceCredential") + proto.RegisterType((*PublicKeyCredential)(nil), "google.cloud.iot.v1.PublicKeyCredential") + proto.RegisterType((*DeviceConfig)(nil), "google.cloud.iot.v1.DeviceConfig") + proto.RegisterType((*DeviceState)(nil), "google.cloud.iot.v1.DeviceState") + proto.RegisterEnum("google.cloud.iot.v1.MqttState", MqttState_name, MqttState_value) + proto.RegisterEnum("google.cloud.iot.v1.HttpState", HttpState_name, HttpState_value) + proto.RegisterEnum("google.cloud.iot.v1.PublicKeyCertificateFormat", PublicKeyCertificateFormat_name, PublicKeyCertificateFormat_value) + proto.RegisterEnum("google.cloud.iot.v1.PublicKeyFormat", PublicKeyFormat_name, PublicKeyFormat_value) +} + +func init() { proto.RegisterFile("google/cloud/iot/v1/resources.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 1320 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x97, 0xdd, 0x72, 0xdb, 0x44, + 0x14, 0xc7, 0x23, 0x27, 0x71, 0x92, 0xe3, 0xf8, 0x23, 0x9b, 0x34, 0x11, 0x1e, 0xa0, 0xae, 0xf9, + 0x4a, 0x0b, 0xd8, 0x6d, 0x98, 0x76, 0x08, 0x65, 0x18, 0x12, 0x47, 0x69, 0x4c, 0x93, 0x60, 0x64, + 0x77, 0x06, 0x7a, 0xa3, 0x59, 0x4b, 0x1b, 0x47, 0x8d, 0x2d, 0xa9, 0xd2, 0xca, 0x53, 0x3f, 0x00, + 0x0f, 0xc0, 0x35, 0x2f, 0xc1, 0xab, 0x70, 0xc1, 0x05, 0x6f, 0xc2, 0x25, 0xb3, 0x67, 0x25, 0xf9, + 0x03, 0x39, 0x0e, 0x77, 0xde, 0xdd, 0xf3, 0xff, 0x1d, 0x9d, 0xaf, 0x95, 0x0c, 0x1f, 0xf5, 0x5c, + 0xb7, 0xd7, 0x67, 0x75, 0xb3, 0xef, 0x86, 0x56, 0xdd, 0x76, 0x79, 0x7d, 0xf8, 0xa4, 0xee, 0xb3, + 0xc0, 0x0d, 0x7d, 0x93, 0x05, 0x35, 0xcf, 0x77, 0xb9, 0x4b, 0xb6, 0xa5, 0x51, 0x0d, 0x8d, 0x6a, + 0xb6, 0xcb, 0x6b, 0xc3, 0x27, 0xe5, 0xf7, 0x23, 0x25, 0xf5, 0xec, 0x3a, 0x75, 0x1c, 0x97, 0x53, + 0x6e, 0xbb, 0x4e, 0x24, 0x29, 0xdf, 0x8f, 0x4e, 0x71, 0xd5, 0x0d, 0xaf, 0xea, 0xdc, 0x1e, 0xb0, + 0x80, 0xd3, 0x81, 0x17, 0x19, 0xec, 0x45, 0x06, 0xbe, 0x67, 0xd6, 0x03, 0x4e, 0x79, 0x18, 0x29, + 0xab, 0xbf, 0xad, 0x41, 0xf6, 0x84, 0x0d, 0x6d, 0x93, 0x91, 0x02, 0x64, 0x6c, 0x4b, 0x55, 0x2a, + 0xca, 0xfe, 0x86, 0x9e, 0xb1, 0x2d, 0x42, 0x60, 0xc5, 0xa1, 0x03, 0xa6, 0x66, 0x70, 0x07, 0x7f, + 0x93, 0x7b, 0x90, 0x75, 0xc2, 0x81, 0x61, 0x5b, 0xea, 0x72, 0x45, 0xd9, 0x5f, 0xd1, 0x57, 0x9d, + 0x70, 0xd0, 0xb4, 0xc8, 0x0b, 0xc8, 0x99, 0x3e, 0xb3, 0x98, 0xc3, 0x6d, 0xda, 0x0f, 0xd4, 0xcd, + 0xca, 0xf2, 0x7e, 0xee, 0xe0, 0x93, 0x5a, 0x4a, 0x20, 0x35, 0xe9, 0xac, 0x91, 0x58, 0xeb, 0x93, + 0x4a, 0xf2, 0x03, 0x6c, 0xf7, 0x69, 0xc0, 0x8d, 0x6b, 0x46, 0x7d, 0xde, 0x65, 0x94, 0x1b, 0x22, + 0x12, 0x75, 0xad, 0xa2, 0xec, 0xe7, 0x0e, 0xca, 0x31, 0x30, 0x0e, 0xb3, 0xd6, 0x89, 0xc3, 0xd4, + 0xb7, 0x84, 0xec, 0x2c, 0x56, 0x89, 0x7d, 0x72, 0x0c, 0x45, 0x64, 0xb1, 0x21, 0x73, 0x22, 0xce, + 0xfa, 0x42, 0x4e, 0x5e, 0x48, 0x34, 0xa1, 0x98, 0x62, 0x88, 0x9c, 0x31, 0xc9, 0xd8, 0xb9, 0x1b, + 0xa3, 0x2d, 0x14, 0xc8, 0x78, 0x09, 0x3b, 0xc8, 0x30, 0x5d, 0xe7, 0xca, 0xee, 0x19, 0xd4, 0xbc, + 0x91, 0xa0, 0xc2, 0xdd, 0x82, 0x6a, 0xa0, 0xec, 0xc8, 0xbc, 0x41, 0xd8, 0x05, 0xdc, 0x9b, 0x84, + 0x05, 0xcc, 0xb1, 0x24, 0x8d, 0x2c, 0xa4, 0x91, 0x31, 0xad, 0xcd, 0x1c, 0x0b, 0x71, 0x2a, 0xac, + 0x75, 0xfb, 0xae, 0x79, 0xc3, 0x2c, 0x75, 0xbb, 0xa2, 0xec, 0xaf, 0xeb, 0xf1, 0x72, 0x9c, 0x3d, + 0xdf, 0x77, 0x7d, 0xe9, 0x02, 0xee, 0x98, 0x3d, 0xa1, 0x40, 0xfa, 0x77, 0xb0, 0x35, 0xc1, 0x90, + 0x7d, 0xa7, 0xe6, 0x90, 0x42, 0x62, 0x8a, 0xef, 0x99, 0xb5, 0x36, 0x9e, 0xe8, 0xc5, 0x44, 0x2d, + 0x37, 0xc8, 0x21, 0x64, 0x65, 0x9c, 0x6a, 0x1e, 0x45, 0x0f, 0x6e, 0xeb, 0x28, 0x34, 0xd4, 0x23, + 0x01, 0x79, 0x06, 0xab, 0x58, 0x33, 0xb5, 0x84, 0xca, 0xca, 0x2d, 0x4a, 0xac, 0x94, 0x2e, 0xcd, + 0x89, 0x06, 0xeb, 0x03, 0xc6, 0xa9, 0x45, 0x39, 0x55, 0xb7, 0xb0, 0x8d, 0x1f, 0xde, 0x22, 0xad, + 0x5d, 0x44, 0xb6, 0x9a, 0xc3, 0xfd, 0x91, 0x9e, 0x48, 0xcb, 0xcf, 0x21, 0x3f, 0x75, 0x44, 0x4a, + 0xb0, 0x7c, 0xc3, 0x46, 0xd1, 0x74, 0x89, 0x9f, 0x64, 0x07, 0x56, 0x87, 0xb4, 0x1f, 0xc6, 0xf3, + 0x25, 0x17, 0xdf, 0x64, 0xbe, 0x56, 0xaa, 0x7f, 0x2f, 0x43, 0x41, 0xf2, 0x75, 0xd6, 0xb3, 0x03, + 0x21, 0xbf, 0xcb, 0x6c, 0xbe, 0x81, 0xb2, 0x6c, 0x75, 0xc7, 0xe5, 0xf6, 0x95, 0x6d, 0xe2, 0x0d, + 0x11, 0x35, 0x4a, 0xa0, 0x02, 0x06, 0xf3, 0x45, 0x6a, 0x30, 0xd8, 0xef, 0x97, 0x13, 0xaa, 0x28, + 0x99, 0x2a, 0x4b, 0x3f, 0x08, 0xc8, 0x35, 0xbc, 0x27, 0x47, 0x22, 0xc5, 0x57, 0x34, 0xad, 0xe9, + 0xae, 0x30, 0xd9, 0x29, 0xae, 0xf6, 0x82, 0xf4, 0x03, 0xf2, 0x3d, 0xe4, 0x06, 0x6f, 0x79, 0xdc, + 0xf0, 0xea, 0x0a, 0xb2, 0xef, 0xa7, 0xb2, 0x2f, 0xde, 0xf2, 0xa8, 0xbf, 0x75, 0x18, 0x24, 0xbf, + 0x05, 0xe1, 0x9a, 0x73, 0x2f, 0x26, 0x6c, 0xdc, 0x42, 0x38, 0xe3, 0xdc, 0x8b, 0x09, 0xd7, 0xc9, + 0x6f, 0xd2, 0x9c, 0xbe, 0xde, 0xd6, 0x31, 0x95, 0x9f, 0xa5, 0x12, 0xe2, 0x8a, 0xcd, 0xb9, 0xe0, + 0xaa, 0xaf, 0x01, 0xc6, 0x8f, 0x49, 0xce, 0x81, 0x60, 0x70, 0xcc, 0xa1, 0xdd, 0x3e, 0xb3, 0xe4, + 0x35, 0x83, 0x65, 0x2e, 0x1c, 0x7c, 0x38, 0x37, 0x46, 0xd9, 0xb0, 0x25, 0xa1, 0xd4, 0xa4, 0x10, + 0x77, 0x04, 0x7b, 0x1c, 0x80, 0x60, 0x63, 0xd8, 0x77, 0x67, 0x0b, 0x71, 0xc4, 0x16, 0xca, 0x29, + 0xb6, 0x06, 0x7b, 0x73, 0xba, 0x84, 0x3c, 0x82, 0x2d, 0x2f, 0xec, 0x06, 0x61, 0xd7, 0xe0, 0xae, + 0x67, 0x9b, 0x06, 0x36, 0xa6, 0x6c, 0xd5, 0xa2, 0x3c, 0xe8, 0x88, 0xfd, 0x4b, 0x3a, 0x40, 0xcc, + 0x9c, 0x0e, 0xf8, 0x5f, 0x98, 0x5f, 0x15, 0x20, 0xff, 0xcd, 0x34, 0xa1, 0xb0, 0xeb, 0x85, 0xdd, + 0xbe, 0x6d, 0x1a, 0x37, 0x6c, 0x64, 0x98, 0xcc, 0x8f, 0x9c, 0x48, 0xce, 0xbc, 0x51, 0x6e, 0xa1, + 0xe4, 0x25, 0x1b, 0x35, 0xc6, 0x82, 0xb3, 0x25, 0x7d, 0xc7, 0x4b, 0xd9, 0x3f, 0xde, 0x04, 0x18, + 0x97, 0xb3, 0xfa, 0x7b, 0x06, 0x76, 0x7f, 0x7e, 0xfa, 0xf8, 0x70, 0xc2, 0xe2, 0x84, 0x71, 0x6a, + 0xf7, 0x03, 0xb2, 0x0b, 0x59, 0x3b, 0x08, 0x42, 0xe6, 0x47, 0x31, 0x44, 0x2b, 0x71, 0xe3, 0x06, + 0x61, 0xf7, 0x0d, 0x33, 0x79, 0x34, 0xbc, 0xf1, 0x92, 0x1c, 0x02, 0x04, 0x9c, 0xfa, 0xd1, 0xab, + 0x6a, 0x79, 0xe1, 0x65, 0xbb, 0x81, 0xd6, 0x78, 0xd1, 0x3e, 0x87, 0x1c, 0x7b, 0xe7, 0xd9, 0xfe, + 0x48, 0x6a, 0x57, 0x16, 0x6a, 0x41, 0x9a, 0xa3, 0xb8, 0x0e, 0xdb, 0x81, 0xdd, 0x73, 0x28, 0x0f, + 0x7d, 0x66, 0xd0, 0x7e, 0xcf, 0xf5, 0x6d, 0x7e, 0x3d, 0x50, 0x57, 0xf1, 0xe9, 0x48, 0x72, 0x74, + 0x14, 0x9f, 0x90, 0x4f, 0xa1, 0x38, 0x91, 0x66, 0x3e, 0xf2, 0x98, 0x9a, 0x45, 0xe3, 0x7c, 0x92, + 0xb2, 0xce, 0xc8, 0x63, 0xd5, 0x3f, 0x15, 0xd8, 0x49, 0x4b, 0x2e, 0x79, 0x01, 0xd9, 0x2b, 0xd7, + 0x1f, 0x50, 0x1e, 0xb5, 0x63, 0xfd, 0xce, 0x75, 0x39, 0x45, 0x99, 0x1e, 0xc9, 0x49, 0x05, 0x72, + 0x93, 0x55, 0x96, 0x09, 0x9d, 0xdc, 0x22, 0x97, 0xb0, 0xf9, 0xee, 0xe9, 0xe3, 0x43, 0xc3, 0x92, + 0x65, 0x89, 0xd2, 0xfa, 0x79, 0xaa, 0xc3, 0xf4, 0x4a, 0xea, 0x39, 0x01, 0x88, 0x16, 0xd5, 0x3f, + 0x14, 0x28, 0xcd, 0x7e, 0xc2, 0x90, 0x26, 0xc0, 0x38, 0x21, 0xf8, 0x14, 0xb9, 0x83, 0xfd, 0x05, + 0x31, 0x25, 0xea, 0xb3, 0x25, 0x7d, 0x23, 0xc9, 0x1b, 0x69, 0x40, 0x11, 0x4b, 0x23, 0x2f, 0x54, + 0xac, 0x66, 0x76, 0x61, 0x35, 0x0b, 0x63, 0x89, 0xd8, 0x9c, 0x69, 0x52, 0x06, 0xdb, 0x29, 0x6e, + 0xc9, 0xb7, 0x33, 0x45, 0xf8, 0xf8, 0xf6, 0x07, 0x9e, 0xc9, 0x7c, 0xf4, 0x3e, 0xcb, 0x24, 0xef, + 0xb3, 0xea, 0x5f, 0x0a, 0x6c, 0x4e, 0xbe, 0x8a, 0x45, 0xa7, 0x0f, 0x99, 0x1f, 0xd8, 0xae, 0x83, + 0x1e, 0x96, 0xf5, 0x78, 0x49, 0x4e, 0x61, 0x0b, 0x9d, 0x18, 0xa1, 0x67, 0x25, 0xdf, 0x55, 0x99, + 0x85, 0x61, 0x16, 0x51, 0xf4, 0x0a, 0x35, 0xf1, 0xd7, 0x99, 0x85, 0x1e, 0xc7, 0x1f, 0x55, 0x8b, + 0xc7, 0x26, 0x2f, 0x25, 0xf1, 0x07, 0xd5, 0x7d, 0xc8, 0x75, 0x6d, 0x87, 0xfa, 0x23, 0x03, 0xdf, + 0xf9, 0x62, 0x74, 0x36, 0x75, 0x90, 0x5b, 0x27, 0x94, 0xd3, 0xea, 0x0d, 0xe4, 0x26, 0xbe, 0x13, + 0xc4, 0xa8, 0x4d, 0x3e, 0xb5, 0xb2, 0x78, 0xd4, 0xc2, 0xf1, 0x03, 0xcf, 0x38, 0xcb, 0xcc, 0x3a, + 0x7b, 0x74, 0x0e, 0x1b, 0xc9, 0x0d, 0x4f, 0xca, 0xb0, 0x7b, 0xf1, 0x53, 0xa7, 0x63, 0xb4, 0x3b, + 0x47, 0x1d, 0xcd, 0x78, 0x75, 0xd9, 0x6e, 0x69, 0x8d, 0xe6, 0x69, 0x53, 0x3b, 0x29, 0x2d, 0x91, + 0x12, 0x6c, 0xe2, 0x99, 0x76, 0x79, 0x74, 0x7c, 0xae, 0x9d, 0x94, 0x14, 0xb2, 0x05, 0x79, 0xdc, + 0x39, 0x69, 0xb6, 0xe5, 0x56, 0x46, 0xd0, 0x92, 0x3b, 0x5d, 0xd0, 0xce, 0x3a, 0x9d, 0xd6, 0x3c, + 0x1a, 0x9e, 0x4d, 0xd1, 0x70, 0x67, 0x82, 0xc6, 0xa0, 0x3c, 0x7f, 0x24, 0xc9, 0x97, 0xf0, 0x70, + 0x82, 0x69, 0xb4, 0x5e, 0x1d, 0x9f, 0x37, 0x1b, 0xc6, 0x4b, 0xed, 0x17, 0xa3, 0xa1, 0xe9, 0x9d, + 0xe6, 0x69, 0xb3, 0x21, 0xdc, 0x9e, 0xfe, 0xa8, 0x5f, 0x1c, 0x75, 0x4a, 0x4b, 0x44, 0x85, 0x1d, + 0x31, 0x6e, 0x53, 0x87, 0x2d, 0xed, 0xa2, 0xa4, 0x3c, 0x1a, 0x42, 0x71, 0xa6, 0xe9, 0xc8, 0x03, + 0xf8, 0x60, 0x0e, 0x3b, 0xe1, 0xe5, 0x60, 0x4d, 0x6f, 0x1f, 0x21, 0x62, 0x59, 0x84, 0x23, 0x16, + 0xe8, 0x00, 0xa1, 0x24, 0x0f, 0x1b, 0x5a, 0xfb, 0xe0, 0xe9, 0x33, 0x5c, 0x66, 0x08, 0x81, 0x82, + 0x5c, 0x26, 0x26, 0x2b, 0xc7, 0x57, 0xb0, 0x67, 0xba, 0x83, 0xb4, 0x21, 0x38, 0x2e, 0xe8, 0xf1, + 0x5f, 0xb4, 0x96, 0xa8, 0x6f, 0x4b, 0x79, 0xfd, 0x2c, 0x32, 0xeb, 0xb9, 0x7d, 0xea, 0xf4, 0x6a, + 0xae, 0xdf, 0xab, 0xf7, 0x98, 0x83, 0xd5, 0xaf, 0xcb, 0x23, 0xea, 0xd9, 0xc1, 0xd4, 0xff, 0xbc, + 0xe7, 0xb6, 0xcb, 0xff, 0x51, 0x94, 0x6e, 0x16, 0xad, 0xbe, 0xfa, 0x37, 0x00, 0x00, 0xff, 0xff, + 0x19, 0x85, 0xa9, 0x71, 0x0c, 0x0e, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/language/v1/language_service.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/language/v1/language_service.pb.go index c3c62bf..126175f 100644 --- a/vendor/google.golang.org/genproto/googleapis/cloud/language/v1/language_service.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/cloud/language/v1/language_service.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/cloud/language/v1/language_service.proto -// DO NOT EDIT! /* Package language is a generated protocol buffer package. @@ -18,12 +17,17 @@ It has these top-level messages: DependencyEdge EntityMention TextSpan + ClassificationCategory AnalyzeSentimentRequest AnalyzeSentimentResponse + AnalyzeEntitySentimentRequest + AnalyzeEntitySentimentResponse AnalyzeEntitiesRequest AnalyzeEntitiesResponse AnalyzeSyntaxRequest AnalyzeSyntaxResponse + ClassifyTextRequest + ClassifyTextResponse AnnotateTextRequest AnnotateTextResponse */ @@ -854,6 +858,18 @@ const ( DependencyEdge_COP DependencyEdge_Label = 75 // Dislocated relation (for fronted/topicalized elements) DependencyEdge_DISLOCATED DependencyEdge_Label = 76 + // Aspect marker + DependencyEdge_ASP DependencyEdge_Label = 77 + // Genitive modifier + DependencyEdge_GMOD DependencyEdge_Label = 78 + // Genitive object + DependencyEdge_GOBJ DependencyEdge_Label = 79 + // Infinitival modifier + DependencyEdge_INFMOD DependencyEdge_Label = 80 + // Measure + DependencyEdge_MES DependencyEdge_Label = 81 + // Nominal complement of a noun + DependencyEdge_NCOMP DependencyEdge_Label = 82 ) var DependencyEdge_Label_name = map[int32]string{ @@ -934,6 +950,12 @@ var DependencyEdge_Label_name = map[int32]string{ 74: "NUMC", 75: "COP", 76: "DISLOCATED", + 77: "ASP", + 78: "GMOD", + 79: "GOBJ", + 80: "INFMOD", + 81: "MES", + 82: "NCOMP", } var DependencyEdge_Label_value = map[string]int32{ "UNKNOWN": 0, @@ -1013,6 +1035,12 @@ var DependencyEdge_Label_value = map[string]int32{ "NUMC": 74, "COP": 75, "DISLOCATED": 76, + "ASP": 77, + "GMOD": 78, + "GOBJ": 79, + "INFMOD": 80, + "MES": 81, + "NCOMP": 82, } func (x DependencyEdge_Label) String() string { @@ -1065,7 +1093,7 @@ type Document struct { // The language of the document (if not specified, the language is // automatically detected). Both ISO and BCP-47 language codes are // accepted.
- // [Language Support](https://cloud.google.com/natural-language/docs/languages) + // [Language Support](/natural-language/docs/languages) // lists currently supported languages for each API method. // If the language (either specified by the caller or automatically detected) // is not supported by the called API method, an `INVALID_ARGUMENT` error @@ -1245,6 +1273,11 @@ type Entity struct { // The mentions of this entity in the input document. The API currently // supports proper noun mentions. Mentions []*EntityMention `protobuf:"bytes,5,rep,name=mentions" json:"mentions,omitempty"` + // For calls to [AnalyzeEntitySentiment][] or if + // [AnnotateTextRequest.Features.extract_entity_sentiment][google.cloud.language.v1.AnnotateTextRequest.Features.extract_entity_sentiment] is set to + // true, this field will contain the aggregate sentiment expressed for this + // entity in the provided document. + Sentiment *Sentiment `protobuf:"bytes,6,opt,name=sentiment" json:"sentiment,omitempty"` } func (m *Entity) Reset() { *m = Entity{} } @@ -1287,6 +1320,13 @@ func (m *Entity) GetMentions() []*EntityMention { return nil } +func (m *Entity) GetSentiment() *Sentiment { + if m != nil { + return m.Sentiment + } + return nil +} + // Represents the smallest syntactic building block of the text. type Token struct { // The token text. @@ -1522,6 +1562,11 @@ type EntityMention struct { Text *TextSpan `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"` // The type of the entity mention. Type EntityMention_Type `protobuf:"varint,2,opt,name=type,enum=google.cloud.language.v1.EntityMention_Type" json:"type,omitempty"` + // For calls to [AnalyzeEntitySentiment][] or if + // [AnnotateTextRequest.Features.extract_entity_sentiment][google.cloud.language.v1.AnnotateTextRequest.Features.extract_entity_sentiment] is set to + // true, this field will contain the sentiment expressed for this mention of + // the entity in the provided document. + Sentiment *Sentiment `protobuf:"bytes,3,opt,name=sentiment" json:"sentiment,omitempty"` } func (m *EntityMention) Reset() { *m = EntityMention{} } @@ -1543,6 +1588,13 @@ func (m *EntityMention) GetType() EntityMention_Type { return EntityMention_TYPE_UNKNOWN } +func (m *EntityMention) GetSentiment() *Sentiment { + if m != nil { + return m.Sentiment + } + return nil +} + // Represents an output piece of text. type TextSpan struct { // The content of the output text. @@ -1571,6 +1623,34 @@ func (m *TextSpan) GetBeginOffset() int32 { return 0 } +// Represents a category returned from the text classifier. +type ClassificationCategory struct { + // The name of the category representing the document. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The classifier's confidence of the category. Number represents how certain + // the classifier is that this category represents the given text. + Confidence float32 `protobuf:"fixed32,2,opt,name=confidence" json:"confidence,omitempty"` +} + +func (m *ClassificationCategory) Reset() { *m = ClassificationCategory{} } +func (m *ClassificationCategory) String() string { return proto.CompactTextString(m) } +func (*ClassificationCategory) ProtoMessage() {} +func (*ClassificationCategory) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *ClassificationCategory) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ClassificationCategory) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + // The sentiment analysis request message. type AnalyzeSentimentRequest struct { // Input document. @@ -1582,7 +1662,7 @@ type AnalyzeSentimentRequest struct { func (m *AnalyzeSentimentRequest) Reset() { *m = AnalyzeSentimentRequest{} } func (m *AnalyzeSentimentRequest) String() string { return proto.CompactTextString(m) } func (*AnalyzeSentimentRequest) ProtoMessage() {} -func (*AnalyzeSentimentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } +func (*AnalyzeSentimentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } func (m *AnalyzeSentimentRequest) GetDocument() *Document { if m != nil { @@ -1613,7 +1693,7 @@ type AnalyzeSentimentResponse struct { func (m *AnalyzeSentimentResponse) Reset() { *m = AnalyzeSentimentResponse{} } func (m *AnalyzeSentimentResponse) String() string { return proto.CompactTextString(m) } func (*AnalyzeSentimentResponse) ProtoMessage() {} -func (*AnalyzeSentimentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } +func (*AnalyzeSentimentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } func (m *AnalyzeSentimentResponse) GetDocumentSentiment() *Sentiment { if m != nil { @@ -1636,6 +1716,62 @@ func (m *AnalyzeSentimentResponse) GetSentences() []*Sentence { return nil } +// The entity-level sentiment analysis request message. +type AnalyzeEntitySentimentRequest struct { + // Input document. + Document *Document `protobuf:"bytes,1,opt,name=document" json:"document,omitempty"` + // The encoding type used by the API to calculate offsets. + EncodingType EncodingType `protobuf:"varint,2,opt,name=encoding_type,json=encodingType,enum=google.cloud.language.v1.EncodingType" json:"encoding_type,omitempty"` +} + +func (m *AnalyzeEntitySentimentRequest) Reset() { *m = AnalyzeEntitySentimentRequest{} } +func (m *AnalyzeEntitySentimentRequest) String() string { return proto.CompactTextString(m) } +func (*AnalyzeEntitySentimentRequest) ProtoMessage() {} +func (*AnalyzeEntitySentimentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *AnalyzeEntitySentimentRequest) GetDocument() *Document { + if m != nil { + return m.Document + } + return nil +} + +func (m *AnalyzeEntitySentimentRequest) GetEncodingType() EncodingType { + if m != nil { + return m.EncodingType + } + return EncodingType_NONE +} + +// The entity-level sentiment analysis response message. +type AnalyzeEntitySentimentResponse struct { + // The recognized entities in the input document with associated sentiments. + Entities []*Entity `protobuf:"bytes,1,rep,name=entities" json:"entities,omitempty"` + // The language of the text, which will be the same as the language specified + // in the request or, if not specified, the automatically-detected language. + // See [Document.language][google.cloud.language.v1.Document.language] field for more details. + Language string `protobuf:"bytes,2,opt,name=language" json:"language,omitempty"` +} + +func (m *AnalyzeEntitySentimentResponse) Reset() { *m = AnalyzeEntitySentimentResponse{} } +func (m *AnalyzeEntitySentimentResponse) String() string { return proto.CompactTextString(m) } +func (*AnalyzeEntitySentimentResponse) ProtoMessage() {} +func (*AnalyzeEntitySentimentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +func (m *AnalyzeEntitySentimentResponse) GetEntities() []*Entity { + if m != nil { + return m.Entities + } + return nil +} + +func (m *AnalyzeEntitySentimentResponse) GetLanguage() string { + if m != nil { + return m.Language + } + return "" +} + // The entity analysis request message. type AnalyzeEntitiesRequest struct { // Input document. @@ -1647,7 +1783,7 @@ type AnalyzeEntitiesRequest struct { func (m *AnalyzeEntitiesRequest) Reset() { *m = AnalyzeEntitiesRequest{} } func (m *AnalyzeEntitiesRequest) String() string { return proto.CompactTextString(m) } func (*AnalyzeEntitiesRequest) ProtoMessage() {} -func (*AnalyzeEntitiesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } +func (*AnalyzeEntitiesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } func (m *AnalyzeEntitiesRequest) GetDocument() *Document { if m != nil { @@ -1676,7 +1812,7 @@ type AnalyzeEntitiesResponse struct { func (m *AnalyzeEntitiesResponse) Reset() { *m = AnalyzeEntitiesResponse{} } func (m *AnalyzeEntitiesResponse) String() string { return proto.CompactTextString(m) } func (*AnalyzeEntitiesResponse) ProtoMessage() {} -func (*AnalyzeEntitiesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } +func (*AnalyzeEntitiesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } func (m *AnalyzeEntitiesResponse) GetEntities() []*Entity { if m != nil { @@ -1703,7 +1839,7 @@ type AnalyzeSyntaxRequest struct { func (m *AnalyzeSyntaxRequest) Reset() { *m = AnalyzeSyntaxRequest{} } func (m *AnalyzeSyntaxRequest) String() string { return proto.CompactTextString(m) } func (*AnalyzeSyntaxRequest) ProtoMessage() {} -func (*AnalyzeSyntaxRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } +func (*AnalyzeSyntaxRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } func (m *AnalyzeSyntaxRequest) GetDocument() *Document { if m != nil { @@ -1734,7 +1870,7 @@ type AnalyzeSyntaxResponse struct { func (m *AnalyzeSyntaxResponse) Reset() { *m = AnalyzeSyntaxResponse{} } func (m *AnalyzeSyntaxResponse) String() string { return proto.CompactTextString(m) } func (*AnalyzeSyntaxResponse) ProtoMessage() {} -func (*AnalyzeSyntaxResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } +func (*AnalyzeSyntaxResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } func (m *AnalyzeSyntaxResponse) GetSentences() []*Sentence { if m != nil { @@ -1757,6 +1893,42 @@ func (m *AnalyzeSyntaxResponse) GetLanguage() string { return "" } +// The document classification request message. +type ClassifyTextRequest struct { + // Input document. + Document *Document `protobuf:"bytes,1,opt,name=document" json:"document,omitempty"` +} + +func (m *ClassifyTextRequest) Reset() { *m = ClassifyTextRequest{} } +func (m *ClassifyTextRequest) String() string { return proto.CompactTextString(m) } +func (*ClassifyTextRequest) ProtoMessage() {} +func (*ClassifyTextRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } + +func (m *ClassifyTextRequest) GetDocument() *Document { + if m != nil { + return m.Document + } + return nil +} + +// The document classification response message. +type ClassifyTextResponse struct { + // Categories representing the input document. + Categories []*ClassificationCategory `protobuf:"bytes,1,rep,name=categories" json:"categories,omitempty"` +} + +func (m *ClassifyTextResponse) Reset() { *m = ClassifyTextResponse{} } +func (m *ClassifyTextResponse) String() string { return proto.CompactTextString(m) } +func (*ClassifyTextResponse) ProtoMessage() {} +func (*ClassifyTextResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } + +func (m *ClassifyTextResponse) GetCategories() []*ClassificationCategory { + if m != nil { + return m.Categories + } + return nil +} + // The request message for the text annotation API, which can perform multiple // analysis types (sentiment, entities, and syntax) in one call. type AnnotateTextRequest struct { @@ -1771,7 +1943,7 @@ type AnnotateTextRequest struct { func (m *AnnotateTextRequest) Reset() { *m = AnnotateTextRequest{} } func (m *AnnotateTextRequest) String() string { return proto.CompactTextString(m) } func (*AnnotateTextRequest) ProtoMessage() {} -func (*AnnotateTextRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } +func (*AnnotateTextRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } func (m *AnnotateTextRequest) GetDocument() *Document { if m != nil { @@ -1803,13 +1975,17 @@ type AnnotateTextRequest_Features struct { ExtractEntities bool `protobuf:"varint,2,opt,name=extract_entities,json=extractEntities" json:"extract_entities,omitempty"` // Extract document-level sentiment. ExtractDocumentSentiment bool `protobuf:"varint,3,opt,name=extract_document_sentiment,json=extractDocumentSentiment" json:"extract_document_sentiment,omitempty"` + // Extract entities and their associated sentiment. + ExtractEntitySentiment bool `protobuf:"varint,4,opt,name=extract_entity_sentiment,json=extractEntitySentiment" json:"extract_entity_sentiment,omitempty"` + // Classify the full document into categories. + ClassifyText bool `protobuf:"varint,6,opt,name=classify_text,json=classifyText" json:"classify_text,omitempty"` } func (m *AnnotateTextRequest_Features) Reset() { *m = AnnotateTextRequest_Features{} } func (m *AnnotateTextRequest_Features) String() string { return proto.CompactTextString(m) } func (*AnnotateTextRequest_Features) ProtoMessage() {} func (*AnnotateTextRequest_Features) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{15, 0} + return fileDescriptor0, []int{20, 0} } func (m *AnnotateTextRequest_Features) GetExtractSyntax() bool { @@ -1833,6 +2009,20 @@ func (m *AnnotateTextRequest_Features) GetExtractDocumentSentiment() bool { return false } +func (m *AnnotateTextRequest_Features) GetExtractEntitySentiment() bool { + if m != nil { + return m.ExtractEntitySentiment + } + return false +} + +func (m *AnnotateTextRequest_Features) GetClassifyText() bool { + if m != nil { + return m.ClassifyText + } + return false +} + // The text annotations response message. type AnnotateTextResponse struct { // Sentences in the input document. Populated if the user enables @@ -1853,12 +2043,14 @@ type AnnotateTextResponse struct { // in the request or, if not specified, the automatically-detected language. // See [Document.language][google.cloud.language.v1.Document.language] field for more details. Language string `protobuf:"bytes,5,opt,name=language" json:"language,omitempty"` + // Categories identified in the input document. + Categories []*ClassificationCategory `protobuf:"bytes,6,rep,name=categories" json:"categories,omitempty"` } func (m *AnnotateTextResponse) Reset() { *m = AnnotateTextResponse{} } func (m *AnnotateTextResponse) String() string { return proto.CompactTextString(m) } func (*AnnotateTextResponse) ProtoMessage() {} -func (*AnnotateTextResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } +func (*AnnotateTextResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } func (m *AnnotateTextResponse) GetSentences() []*Sentence { if m != nil { @@ -1895,6 +2087,13 @@ func (m *AnnotateTextResponse) GetLanguage() string { return "" } +func (m *AnnotateTextResponse) GetCategories() []*ClassificationCategory { + if m != nil { + return m.Categories + } + return nil +} + func init() { proto.RegisterType((*Document)(nil), "google.cloud.language.v1.Document") proto.RegisterType((*Sentence)(nil), "google.cloud.language.v1.Sentence") @@ -1905,12 +2104,17 @@ func init() { proto.RegisterType((*DependencyEdge)(nil), "google.cloud.language.v1.DependencyEdge") proto.RegisterType((*EntityMention)(nil), "google.cloud.language.v1.EntityMention") proto.RegisterType((*TextSpan)(nil), "google.cloud.language.v1.TextSpan") + proto.RegisterType((*ClassificationCategory)(nil), "google.cloud.language.v1.ClassificationCategory") proto.RegisterType((*AnalyzeSentimentRequest)(nil), "google.cloud.language.v1.AnalyzeSentimentRequest") proto.RegisterType((*AnalyzeSentimentResponse)(nil), "google.cloud.language.v1.AnalyzeSentimentResponse") + proto.RegisterType((*AnalyzeEntitySentimentRequest)(nil), "google.cloud.language.v1.AnalyzeEntitySentimentRequest") + proto.RegisterType((*AnalyzeEntitySentimentResponse)(nil), "google.cloud.language.v1.AnalyzeEntitySentimentResponse") proto.RegisterType((*AnalyzeEntitiesRequest)(nil), "google.cloud.language.v1.AnalyzeEntitiesRequest") proto.RegisterType((*AnalyzeEntitiesResponse)(nil), "google.cloud.language.v1.AnalyzeEntitiesResponse") proto.RegisterType((*AnalyzeSyntaxRequest)(nil), "google.cloud.language.v1.AnalyzeSyntaxRequest") proto.RegisterType((*AnalyzeSyntaxResponse)(nil), "google.cloud.language.v1.AnalyzeSyntaxResponse") + proto.RegisterType((*ClassifyTextRequest)(nil), "google.cloud.language.v1.ClassifyTextRequest") + proto.RegisterType((*ClassifyTextResponse)(nil), "google.cloud.language.v1.ClassifyTextResponse") proto.RegisterType((*AnnotateTextRequest)(nil), "google.cloud.language.v1.AnnotateTextRequest") proto.RegisterType((*AnnotateTextRequest_Features)(nil), "google.cloud.language.v1.AnnotateTextRequest.Features") proto.RegisterType((*AnnotateTextResponse)(nil), "google.cloud.language.v1.AnnotateTextResponse") @@ -1950,10 +2154,15 @@ type LanguageServiceClient interface { // along with entity types, salience, mentions for each entity, and // other properties. AnalyzeEntities(ctx context.Context, in *AnalyzeEntitiesRequest, opts ...grpc.CallOption) (*AnalyzeEntitiesResponse, error) + // Finds entities, similar to [AnalyzeEntities][google.cloud.language.v1.LanguageService.AnalyzeEntities] in the text and analyzes + // sentiment associated with each entity and its mentions. + AnalyzeEntitySentiment(ctx context.Context, in *AnalyzeEntitySentimentRequest, opts ...grpc.CallOption) (*AnalyzeEntitySentimentResponse, error) // Analyzes the syntax of the text and provides sentence boundaries and // tokenization along with part of speech tags, dependency trees, and other // properties. AnalyzeSyntax(ctx context.Context, in *AnalyzeSyntaxRequest, opts ...grpc.CallOption) (*AnalyzeSyntaxResponse, error) + // Classifies a document into categories. + ClassifyText(ctx context.Context, in *ClassifyTextRequest, opts ...grpc.CallOption) (*ClassifyTextResponse, error) // A convenience method that provides all the features that analyzeSentiment, // analyzeEntities, and analyzeSyntax provide in one call. AnnotateText(ctx context.Context, in *AnnotateTextRequest, opts ...grpc.CallOption) (*AnnotateTextResponse, error) @@ -1985,6 +2194,15 @@ func (c *languageServiceClient) AnalyzeEntities(ctx context.Context, in *Analyze return out, nil } +func (c *languageServiceClient) AnalyzeEntitySentiment(ctx context.Context, in *AnalyzeEntitySentimentRequest, opts ...grpc.CallOption) (*AnalyzeEntitySentimentResponse, error) { + out := new(AnalyzeEntitySentimentResponse) + err := grpc.Invoke(ctx, "/google.cloud.language.v1.LanguageService/AnalyzeEntitySentiment", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *languageServiceClient) AnalyzeSyntax(ctx context.Context, in *AnalyzeSyntaxRequest, opts ...grpc.CallOption) (*AnalyzeSyntaxResponse, error) { out := new(AnalyzeSyntaxResponse) err := grpc.Invoke(ctx, "/google.cloud.language.v1.LanguageService/AnalyzeSyntax", in, out, c.cc, opts...) @@ -1994,6 +2212,15 @@ func (c *languageServiceClient) AnalyzeSyntax(ctx context.Context, in *AnalyzeSy return out, nil } +func (c *languageServiceClient) ClassifyText(ctx context.Context, in *ClassifyTextRequest, opts ...grpc.CallOption) (*ClassifyTextResponse, error) { + out := new(ClassifyTextResponse) + err := grpc.Invoke(ctx, "/google.cloud.language.v1.LanguageService/ClassifyText", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *languageServiceClient) AnnotateText(ctx context.Context, in *AnnotateTextRequest, opts ...grpc.CallOption) (*AnnotateTextResponse, error) { out := new(AnnotateTextResponse) err := grpc.Invoke(ctx, "/google.cloud.language.v1.LanguageService/AnnotateText", in, out, c.cc, opts...) @@ -2012,10 +2239,15 @@ type LanguageServiceServer interface { // along with entity types, salience, mentions for each entity, and // other properties. AnalyzeEntities(context.Context, *AnalyzeEntitiesRequest) (*AnalyzeEntitiesResponse, error) + // Finds entities, similar to [AnalyzeEntities][google.cloud.language.v1.LanguageService.AnalyzeEntities] in the text and analyzes + // sentiment associated with each entity and its mentions. + AnalyzeEntitySentiment(context.Context, *AnalyzeEntitySentimentRequest) (*AnalyzeEntitySentimentResponse, error) // Analyzes the syntax of the text and provides sentence boundaries and // tokenization along with part of speech tags, dependency trees, and other // properties. AnalyzeSyntax(context.Context, *AnalyzeSyntaxRequest) (*AnalyzeSyntaxResponse, error) + // Classifies a document into categories. + ClassifyText(context.Context, *ClassifyTextRequest) (*ClassifyTextResponse, error) // A convenience method that provides all the features that analyzeSentiment, // analyzeEntities, and analyzeSyntax provide in one call. AnnotateText(context.Context, *AnnotateTextRequest) (*AnnotateTextResponse, error) @@ -2061,6 +2293,24 @@ func _LanguageService_AnalyzeEntities_Handler(srv interface{}, ctx context.Conte return interceptor(ctx, in, info, handler) } +func _LanguageService_AnalyzeEntitySentiment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AnalyzeEntitySentimentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LanguageServiceServer).AnalyzeEntitySentiment(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.language.v1.LanguageService/AnalyzeEntitySentiment", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LanguageServiceServer).AnalyzeEntitySentiment(ctx, req.(*AnalyzeEntitySentimentRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _LanguageService_AnalyzeSyntax_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(AnalyzeSyntaxRequest) if err := dec(in); err != nil { @@ -2079,6 +2329,24 @@ func _LanguageService_AnalyzeSyntax_Handler(srv interface{}, ctx context.Context return interceptor(ctx, in, info, handler) } +func _LanguageService_ClassifyText_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ClassifyTextRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LanguageServiceServer).ClassifyText(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.language.v1.LanguageService/ClassifyText", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LanguageServiceServer).ClassifyText(ctx, req.(*ClassifyTextRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _LanguageService_AnnotateText_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(AnnotateTextRequest) if err := dec(in); err != nil { @@ -2109,10 +2377,18 @@ var _LanguageService_serviceDesc = grpc.ServiceDesc{ MethodName: "AnalyzeEntities", Handler: _LanguageService_AnalyzeEntities_Handler, }, + { + MethodName: "AnalyzeEntitySentiment", + Handler: _LanguageService_AnalyzeEntitySentiment_Handler, + }, { MethodName: "AnalyzeSyntax", Handler: _LanguageService_AnalyzeSyntax_Handler, }, + { + MethodName: "ClassifyText", + Handler: _LanguageService_ClassifyText_Handler, + }, { MethodName: "AnnotateText", Handler: _LanguageService_AnnotateText_Handler, @@ -2125,176 +2401,191 @@ var _LanguageService_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("google/cloud/language/v1/language_service.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 2732 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x59, 0xcd, 0x8f, 0xdb, 0xc6, - 0x15, 0x37, 0xf5, 0xb5, 0xd2, 0x68, 0x3f, 0xc6, 0x8c, 0x93, 0xa8, 0x1b, 0x27, 0x71, 0x98, 0xda, - 0xd9, 0x38, 0x89, 0x36, 0xbb, 0x69, 0x1d, 0xc7, 0x76, 0x13, 0x53, 0xe4, 0x48, 0xcb, 0x35, 0x45, - 0x32, 0x43, 0x52, 0xde, 0xf8, 0x22, 0xd0, 0xd2, 0x58, 0x11, 0xb2, 0x4b, 0xaa, 0x12, 0xd7, 0xf0, - 0xf6, 0x52, 0xa0, 0x40, 0x8f, 0x39, 0xa5, 0x87, 0xa2, 0xa7, 0x02, 0xfd, 0x38, 0xb6, 0x7f, 0x40, - 0x0b, 0xf4, 0x1f, 0xe8, 0xad, 0xff, 0x42, 0x6f, 0x2d, 0xd0, 0x5b, 0xd1, 0x4b, 0x81, 0xe2, 0xcd, - 0x0c, 0xf5, 0xb1, 0xde, 0xb5, 0x77, 0x8d, 0x00, 0xcd, 0x6d, 0xe6, 0xe9, 0xfd, 0xde, 0xf7, 0xbc, - 0x37, 0x1c, 0xa1, 0xcd, 0x41, 0x92, 0x0c, 0xf6, 0xd9, 0x66, 0x6f, 0x3f, 0x39, 0xec, 0x6f, 0xee, - 0x47, 0xf1, 0xe0, 0x30, 0x1a, 0xb0, 0xcd, 0xc7, 0x5b, 0xd3, 0x75, 0x77, 0xc2, 0xc6, 0x8f, 0x87, - 0x3d, 0x56, 0x1f, 0x8d, 0x93, 0x34, 0x51, 0x6b, 0x02, 0x50, 0xe7, 0x80, 0x7a, 0xc6, 0x54, 0x7f, - 0xbc, 0xb5, 0x7e, 0x59, 0x8a, 0x8a, 0x46, 0xc3, 0xcd, 0x28, 0x8e, 0x93, 0x34, 0x4a, 0x87, 0x49, - 0x3c, 0x11, 0x38, 0xed, 0x1f, 0x0a, 0x2a, 0x9b, 0x49, 0xef, 0xf0, 0x80, 0xc5, 0xa9, 0x7a, 0x1b, - 0x15, 0xd2, 0xa3, 0x11, 0xab, 0x29, 0x57, 0x94, 0x8d, 0xd5, 0xed, 0x77, 0xea, 0xa7, 0xc9, 0xac, - 0x67, 0x88, 0x7a, 0x70, 0x34, 0x62, 0x94, 0x83, 0xd4, 0x75, 0xb4, 0xd4, 0x4b, 0xe2, 0x94, 0xc5, - 0x69, 0x2d, 0x77, 0x45, 0xd9, 0xa8, 0xec, 0x5c, 0xa0, 0x19, 0x41, 0xdd, 0x40, 0x6b, 0x83, 0xde, - 0xa4, 0x2b, 0xb7, 0xdd, 0xc3, 0xf1, 0xb0, 0x96, 0x97, 0x3c, 0x2b, 0x83, 0xde, 0xc4, 0x10, 0xf4, - 0x70, 0x3c, 0x54, 0xd7, 0x51, 0x39, 0x53, 0x54, 0x2b, 0x00, 0x0b, 0x9d, 0xee, 0xb5, 0x1b, 0xa8, - 0x00, 0xfa, 0xd4, 0x4b, 0x08, 0x07, 0x5f, 0x78, 0xa4, 0x1b, 0x3a, 0xbe, 0x47, 0x0c, 0xab, 0x69, - 0x11, 0x13, 0x5f, 0x50, 0x57, 0x11, 0xf2, 0x6c, 0xdd, 0x72, 0xba, 0x01, 0xd9, 0x0b, 0xb0, 0xa2, - 0x96, 0x51, 0x61, 0x27, 0x68, 0xdb, 0x38, 0xd7, 0x28, 0xa3, 0xd2, 0x24, 0x39, 0x1c, 0xf7, 0x98, - 0xf6, 0x73, 0x05, 0x95, 0x7d, 0x06, 0xca, 0x7a, 0x4c, 0xbd, 0x81, 0x0a, 0x29, 0x7b, 0x92, 0x72, - 0x6f, 0xab, 0xdb, 0xda, 0xe9, 0xde, 0x06, 0xec, 0x49, 0xea, 0x8f, 0xa2, 0x98, 0x72, 0x7e, 0x55, - 0x47, 0x95, 0x09, 0x8b, 0xd3, 0xe1, 0x41, 0xe6, 0x6a, 0x75, 0xfb, 0xed, 0xd3, 0xc1, 0x7e, 0xc6, - 0x4a, 0x67, 0x28, 0xed, 0xcf, 0x79, 0x54, 0x22, 0x71, 0x3a, 0x4c, 0x8f, 0x54, 0x15, 0x15, 0xe2, - 0xe8, 0x40, 0xc4, 0xbc, 0x42, 0xf9, 0x5a, 0xfd, 0x44, 0xe6, 0x21, 0xc7, 0xf3, 0x70, 0xf5, 0x74, - 0xe1, 0x42, 0xc6, 0x7c, 0x16, 0x76, 0x51, 0xf9, 0x80, 0xa5, 0x51, 0x3f, 0x4a, 0xa3, 0x5a, 0xfe, - 0x4a, 0x7e, 0xa3, 0xba, 0x5d, 0x7f, 0x2e, 0xbc, 0x2d, 0x01, 0x24, 0x4e, 0xc7, 0x47, 0x74, 0x8a, - 0x87, 0x5c, 0x4c, 0xa2, 0xfd, 0x21, 0x04, 0x8b, 0xe7, 0x22, 0x47, 0xa7, 0x7b, 0xd5, 0x00, 0x3d, - 0x31, 0xaf, 0xa4, 0x5a, 0x91, 0xeb, 0x79, 0xe7, 0x79, 0x7a, 0xda, 0x82, 0x9f, 0x4e, 0x81, 0xeb, - 0xb7, 0xd1, 0xca, 0x82, 0x6e, 0x15, 0xa3, 0xfc, 0x57, 0xec, 0x48, 0xc6, 0x02, 0x96, 0xea, 0x25, - 0x54, 0x7c, 0x1c, 0xed, 0x1f, 0x8a, 0x58, 0x54, 0xa8, 0xd8, 0xdc, 0xca, 0xdd, 0x54, 0xb4, 0x23, - 0x59, 0x0d, 0x55, 0xb4, 0x14, 0x3a, 0xf7, 0x1c, 0xf7, 0xbe, 0x83, 0x2f, 0xa8, 0x08, 0x95, 0x3c, - 0x42, 0x7d, 0xd7, 0xc1, 0x8a, 0xba, 0x8c, 0xca, 0xb6, 0x6b, 0xe8, 0x81, 0xe5, 0x3a, 0x38, 0xa7, - 0x62, 0xb4, 0xec, 0xd2, 0x96, 0xee, 0x58, 0x0f, 0x04, 0x25, 0xaf, 0x56, 0x50, 0x91, 0x74, 0x88, - 0x13, 0xe0, 0x82, 0xba, 0x86, 0xaa, 0xf7, 0x5d, 0x7a, 0xaf, 0xeb, 0x36, 0xbb, 0x3a, 0x0d, 0x70, - 0x51, 0xbd, 0x88, 0x56, 0x0c, 0xd7, 0xf1, 0xc3, 0x36, 0xa1, 0xdd, 0x96, 0xeb, 0x9a, 0xb8, 0x04, - 0xec, 0x6e, 0xb0, 0x43, 0x28, 0x5e, 0xd2, 0xfe, 0xad, 0xa0, 0x62, 0x90, 0x7c, 0xc5, 0xe2, 0x17, - 0xae, 0x21, 0x1b, 0xad, 0x8e, 0xa2, 0x71, 0xda, 0x4d, 0x1e, 0x75, 0x27, 0x23, 0xc6, 0x7a, 0x5f, - 0xca, 0x42, 0xba, 0x76, 0xba, 0x04, 0x2f, 0x1a, 0xa7, 0xee, 0x23, 0x9f, 0x73, 0xd3, 0xe5, 0xd1, - 0xdc, 0x4e, 0xfd, 0x1c, 0xad, 0xf5, 0xd9, 0x88, 0xc5, 0x7d, 0x16, 0xf7, 0x8e, 0xba, 0xac, 0x3f, - 0x60, 0xfc, 0x78, 0x55, 0xb7, 0x37, 0x9e, 0x71, 0x84, 0xa7, 0x00, 0xd2, 0x1f, 0x30, 0xba, 0xda, - 0x5f, 0xd8, 0x43, 0xdc, 0xf7, 0xd9, 0xc1, 0x41, 0x24, 0x0f, 0xa1, 0xd8, 0x68, 0x9f, 0xa1, 0xca, - 0xb4, 0x9e, 0xd5, 0xcb, 0xa8, 0x72, 0x10, 0x0d, 0xe2, 0x61, 0x7a, 0xd8, 0x17, 0xe9, 0xc9, 0xd1, - 0x19, 0x01, 0x04, 0x4c, 0x7a, 0xc9, 0x58, 0x58, 0x92, 0xa3, 0x62, 0xa3, 0xfd, 0x17, 0xa3, 0xe5, - 0x79, 0x47, 0xd4, 0x3b, 0x28, 0x9f, 0x46, 0x03, 0xd9, 0x71, 0xae, 0x9f, 0xcd, 0xfb, 0x7a, 0x10, - 0x0d, 0x28, 0xc0, 0x54, 0x82, 0x4a, 0xd1, 0x64, 0xc4, 0x7a, 0xa9, 0x3c, 0x2a, 0x1f, 0x9c, 0x51, - 0x80, 0xce, 0x41, 0x54, 0x82, 0xd5, 0xcf, 0x50, 0xa1, 0x17, 0x4d, 0x84, 0xa9, 0xab, 0xdb, 0xef, - 0x9d, 0x51, 0x88, 0x11, 0x4d, 0x18, 0xe5, 0x40, 0x10, 0xf0, 0x28, 0x19, 0x1f, 0xf0, 0x60, 0x9d, - 0x5d, 0x40, 0x33, 0x19, 0x1f, 0x50, 0x0e, 0x04, 0x47, 0x06, 0x10, 0xfe, 0x71, 0xad, 0x78, 0x2e, - 0x47, 0x5a, 0x1c, 0x44, 0x25, 0x18, 0xec, 0x38, 0x48, 0x92, 0x7e, 0xad, 0x74, 0x2e, 0x3b, 0xda, - 0x49, 0xd2, 0xa7, 0x1c, 0x08, 0x76, 0xc4, 0x87, 0x07, 0x0f, 0xd9, 0xb8, 0xb6, 0x74, 0x2e, 0x3b, - 0x1c, 0x0e, 0xa2, 0x12, 0x0c, 0x62, 0x46, 0x6c, 0x3c, 0x49, 0xe2, 0x5a, 0xf9, 0x5c, 0x62, 0x3c, - 0x0e, 0xa2, 0x12, 0xcc, 0xc5, 0x8c, 0x93, 0x11, 0x1b, 0xd7, 0x2a, 0xe7, 0x13, 0xc3, 0x41, 0x54, - 0x82, 0xd5, 0x00, 0x55, 0xc7, 0xac, 0x37, 0x1c, 0x8d, 0x93, 0xde, 0x30, 0x3d, 0xaa, 0x21, 0x2e, - 0x6b, 0xfb, 0x8c, 0xb2, 0xe8, 0x0c, 0x49, 0xe7, 0xc5, 0xa8, 0x0d, 0x54, 0x4c, 0x59, 0x3c, 0x61, - 0xb5, 0x2a, 0x97, 0xf7, 0xfe, 0x59, 0x6b, 0x17, 0x30, 0x54, 0x40, 0x41, 0xc6, 0xe3, 0x64, 0xd8, - 0x63, 0xb5, 0xe5, 0x73, 0xc9, 0xe8, 0x00, 0x86, 0x0a, 0xa8, 0xf6, 0xb5, 0x82, 0xf2, 0x41, 0x34, - 0x58, 0xec, 0x83, 0x4b, 0x28, 0xaf, 0x9b, 0xbb, 0x58, 0x11, 0x0b, 0x0f, 0xe7, 0xc4, 0xa2, 0x83, - 0xf3, 0x30, 0x17, 0x0d, 0xd7, 0xd9, 0xc5, 0x05, 0x20, 0x99, 0x04, 0xba, 0x5d, 0x19, 0x15, 0x1c, - 0x37, 0x74, 0x70, 0x09, 0x48, 0x4e, 0xd8, 0xc6, 0x4b, 0x40, 0xf2, 0xa8, 0xeb, 0xe0, 0x32, 0x90, - 0x3c, 0x1a, 0xe0, 0x0a, 0x34, 0x40, 0x2f, 0x74, 0x8c, 0x00, 0x23, 0xf8, 0xb5, 0x43, 0x68, 0x03, - 0x57, 0xd5, 0x22, 0x52, 0xf6, 0xf0, 0x32, 0xfc, 0xa6, 0x37, 0x9b, 0xd6, 0x1e, 0x5e, 0xd1, 0x5c, - 0x54, 0x12, 0xc7, 0x4b, 0x55, 0xd1, 0xaa, 0x0e, 0x13, 0x3a, 0xe8, 0xce, 0x0c, 0x83, 0x29, 0x4d, - 0x68, 0x93, 0x18, 0x81, 0xd5, 0x21, 0x58, 0x81, 0xb6, 0x6c, 0xb5, 0xe7, 0x28, 0x39, 0xe8, 0xc5, - 0x1e, 0x75, 0x5b, 0x94, 0xf8, 0x3e, 0x10, 0xf2, 0xda, 0x7f, 0x14, 0x54, 0x80, 0xb3, 0x06, 0xbc, - 0x86, 0xee, 0x93, 0x45, 0x69, 0xba, 0x61, 0x84, 0xbe, 0x2e, 0xa5, 0xad, 0xa0, 0x8a, 0x6e, 0x82, - 0x65, 0x96, 0x6e, 0xe3, 0x9c, 0xe8, 0xe2, 0x6d, 0xcf, 0x26, 0x6d, 0xe2, 0x70, 0x8e, 0x3c, 0x0c, - 0x08, 0x53, 0x70, 0x17, 0x60, 0x40, 0xb4, 0x88, 0x63, 0xf1, 0x5d, 0x91, 0x5b, 0xe2, 0xf8, 0x01, - 0x0d, 0x81, 0x59, 0xb7, 0x71, 0x69, 0x36, 0x40, 0x3a, 0x04, 0x2f, 0x81, 0x2e, 0xc7, 0x6d, 0x5b, - 0x8e, 0xd8, 0x97, 0x21, 0xde, 0x6e, 0xc3, 0xb6, 0x3e, 0x0f, 0x09, 0xae, 0x80, 0x62, 0x4f, 0xa7, - 0x81, 0x90, 0x85, 0x40, 0xb1, 0x47, 0x89, 0xe7, 0xfa, 0x16, 0xcc, 0x1a, 0xdd, 0xc6, 0x55, 0x08, - 0x06, 0x25, 0x4d, 0x9b, 0xec, 0x59, 0x1d, 0xd2, 0x05, 0x37, 0xf0, 0x32, 0xb0, 0x51, 0x62, 0x73, - 0x81, 0x82, 0xb4, 0x02, 0x3a, 0x3b, 0x99, 0xce, 0x55, 0xed, 0x8f, 0x0a, 0x2a, 0x40, 0x97, 0x00, - 0xe3, 0x9a, 0x2e, 0x6d, 0xcf, 0xb9, 0xbe, 0x8c, 0xca, 0xba, 0x09, 0x06, 0xe9, 0xb6, 0x74, 0x3c, - 0xdc, 0xb3, 0x6c, 0x4b, 0xa7, 0x5f, 0xe0, 0x1c, 0x28, 0x9b, 0x73, 0xfc, 0x01, 0xa1, 0x38, 0xcf, - 0x45, 0x58, 0x8e, 0x6e, 0x77, 0x89, 0x63, 0x5a, 0x4e, 0x0b, 0x17, 0x20, 0x16, 0x2d, 0x42, 0x43, - 0xc7, 0xc4, 0x45, 0x58, 0x53, 0xa2, 0xdb, 0x96, 0x2f, 0xfc, 0xb6, 0xa8, 0xdc, 0x2d, 0x41, 0x6a, - 0xfd, 0x1d, 0x97, 0x06, 0xb8, 0x0c, 0x69, 0xb7, 0x5d, 0xa7, 0x25, 0x6a, 0xc1, 0xa5, 0x26, 0xa1, - 0x18, 0x01, 0xb7, 0xbc, 0x86, 0x19, 0xb8, 0xaa, 0x11, 0x54, 0x12, 0x3d, 0x09, 0x6c, 0x68, 0x11, - 0xc7, 0x24, 0x74, 0xd1, 0xe8, 0x26, 0x69, 0x5b, 0x8e, 0xe5, 0xc8, 0x6c, 0xb5, 0x75, 0xdf, 0x08, - 0x6d, 0xd8, 0xe6, 0xc0, 0x04, 0x87, 0x84, 0x01, 0x18, 0xab, 0xfd, 0x14, 0x15, 0xa0, 0x2b, 0x81, - 0xd1, 0x6d, 0xd7, 0x35, 0xe7, 0x44, 0x5c, 0x42, 0xd8, 0x70, 0x1d, 0x53, 0x06, 0xb6, 0x0b, 0xbf, - 0x62, 0x05, 0x92, 0xc3, 0xcb, 0x48, 0x97, 0x45, 0x04, 0x7b, 0xc7, 0xb4, 0x64, 0x20, 0xf3, 0x10, - 0x69, 0xcb, 0x09, 0x08, 0xa5, 0x6e, 0x2b, 0xcb, 0x7e, 0x15, 0x2d, 0xed, 0x86, 0xa2, 0xc6, 0x8a, - 0x50, 0x74, 0x7e, 0xd8, 0xd8, 0x85, 0xf2, 0x06, 0x42, 0x49, 0xbb, 0x8b, 0x4a, 0xa2, 0xa7, 0x81, - 0x1f, 0x4e, 0xd8, 0x6e, 0x1c, 0xf7, 0xc3, 0xb7, 0x9c, 0x56, 0x68, 0xeb, 0x14, 0x2b, 0xfc, 0xd2, - 0x61, 0x87, 0x94, 0x97, 0x5c, 0x19, 0x15, 0xcc, 0x50, 0xb7, 0x71, 0x5e, 0x0b, 0x50, 0x49, 0xb4, - 0x33, 0x90, 0x20, 0x2e, 0x25, 0x73, 0x12, 0x2a, 0xa8, 0xd8, 0xb4, 0xa8, 0x1f, 0x08, 0xb8, 0x4f, - 0xc0, 0x27, 0x9c, 0x03, 0x72, 0xb0, 0x63, 0x51, 0x13, 0xe7, 0xc1, 0xd1, 0x59, 0xc1, 0xc8, 0x4b, - 0x4d, 0x41, 0xbb, 0x89, 0x4a, 0xa2, 0xbb, 0x71, 0xa9, 0xd4, 0xf5, 0x16, 0xec, 0x02, 0x4b, 0x38, - 0x4d, 0x84, 0xc4, 0x71, 0x83, 0xae, 0xdc, 0xe7, 0xb4, 0x5d, 0x54, 0x9d, 0xeb, 0x65, 0xea, 0xab, - 0xe8, 0x25, 0x4a, 0x0c, 0xcb, 0xa3, 0xae, 0x61, 0x05, 0x5f, 0x2c, 0x9e, 0xa9, 0xec, 0x07, 0x5e, - 0x5a, 0xe0, 0xbf, 0xeb, 0x74, 0xe7, 0x68, 0x39, 0x6d, 0x82, 0x8a, 0xbc, 0x8f, 0x41, 0x5c, 0x03, - 0xe2, 0x2c, 0x9c, 0xc9, 0x97, 0xd1, 0xc5, 0xf9, 0x04, 0xf1, 0x9f, 0x85, 0x97, 0xcd, 0x30, 0x08, - 0x29, 0x11, 0x41, 0xf2, 0x74, 0x3f, 0xc0, 0x79, 0x48, 0x82, 0x47, 0x89, 0x2f, 0x6e, 0x61, 0x2b, - 0xa8, 0x32, 0xed, 0x05, 0xb8, 0x28, 0x2e, 0xf4, 0x61, 0xb6, 0x2f, 0x69, 0x0d, 0x54, 0xe4, 0x8d, - 0x0f, 0x94, 0x76, 0x5c, 0xcb, 0x20, 0x8b, 0x8e, 0xeb, 0xc6, 0xac, 0x09, 0x18, 0x7a, 0xd6, 0x13, - 0x72, 0x5c, 0x85, 0x9e, 0xf5, 0x92, 0x7f, 0x2d, 0xa1, 0xd5, 0xc5, 0x9b, 0x8f, 0xba, 0x81, 0xf0, - 0x97, 0x2c, 0xea, 0x77, 0x53, 0xb8, 0xd0, 0x75, 0x87, 0x71, 0x9f, 0x3d, 0xe1, 0xd7, 0x91, 0x22, - 0x5d, 0x05, 0x3a, 0xbf, 0xe7, 0x59, 0x40, 0x55, 0x4d, 0x54, 0xdc, 0x8f, 0x1e, 0xb2, 0x7d, 0x79, - 0xd9, 0xa8, 0x9f, 0xf5, 0x72, 0x55, 0xb7, 0x01, 0x45, 0x05, 0x58, 0xfb, 0x67, 0x09, 0x15, 0x39, - 0xe1, 0xa9, 0x9b, 0xab, 0xde, 0x68, 0x50, 0xd2, 0xc1, 0x0a, 0xef, 0xa6, 0x70, 0x7e, 0x45, 0x41, - 0xe8, 0x66, 0xc7, 0xb0, 0x45, 0xeb, 0xd2, 0xcd, 0x4e, 0xdb, 0x35, 0x71, 0x01, 0x22, 0xa8, 0xc3, - 0xaa, 0xc8, 0x19, 0x3c, 0xcf, 0x85, 0x73, 0x0b, 0xc4, 0x20, 0xa0, 0x78, 0x89, 0x37, 0xfb, 0x70, - 0x4f, 0x34, 0x29, 0x3d, 0xdc, 0x03, 0xff, 0x71, 0x45, 0x2d, 0xa1, 0x9c, 0x61, 0x60, 0x04, 0x10, - 0x83, 0x8b, 0xaf, 0x4e, 0x87, 0x01, 0xef, 0xe0, 0x06, 0x1c, 0x01, 0xbc, 0xc2, 0x03, 0x08, 0x4b, - 0x0e, 0x5b, 0x15, 0x63, 0xc2, 0xc3, 0x6b, 0xd9, 0xbc, 0xc0, 0xc0, 0x60, 0x5a, 0xbe, 0xe1, 0x86, - 0xd4, 0x27, 0xf8, 0x22, 0xaf, 0x79, 0xb7, 0xb1, 0x8b, 0x55, 0x58, 0x91, 0x3d, 0xcf, 0xc6, 0x2f, - 0xf1, 0xde, 0xea, 0x12, 0xff, 0xbe, 0x15, 0xec, 0xe0, 0x4b, 0x40, 0xb7, 0x80, 0xe3, 0x65, 0x58, - 0xb5, 0x75, 0x7a, 0x0f, 0xbf, 0x02, 0xd2, 0xda, 0xf7, 0x09, 0x7e, 0x55, 0x2c, 0x3a, 0xb8, 0xc6, - 0x87, 0x0f, 0x69, 0xe1, 0xef, 0x81, 0xa1, 0x8e, 0x83, 0xd7, 0x41, 0x88, 0xe3, 0x49, 0x9f, 0x5f, - 0x03, 0x0b, 0x1d, 0x6e, 0xe1, 0x65, 0x30, 0xc0, 0x99, 0x5a, 0xf8, 0x7a, 0x36, 0xb5, 0xde, 0xe0, - 0x2d, 0x84, 0x9f, 0x55, 0xfc, 0x26, 0x4c, 0x26, 0x0f, 0x5f, 0x91, 0x9d, 0x59, 0x0f, 0xf4, 0x3d, - 0xcb, 0xc7, 0x6f, 0x89, 0x6a, 0xa0, 0x01, 0x48, 0xd4, 0xf8, 0x44, 0xe3, 0x81, 0x78, 0x9b, 0x97, - 0x24, 0x58, 0xf8, 0x7d, 0xb1, 0xf2, 0x7d, 0x7c, 0x95, 0xf3, 0xba, 0x7e, 0x00, 0x36, 0x5d, 0x93, - 0x95, 0xca, 0xb9, 0xdf, 0x99, 0x6e, 0x9c, 0x5d, 0xbc, 0x21, 0x0e, 0x1d, 0x81, 0xc8, 0xbc, 0x2b, - 0xc6, 0x26, 0x69, 0xe2, 0xeb, 0x72, 0xe5, 0xe1, 0xf7, 0xb8, 0x16, 0xea, 0x3a, 0x36, 0x7e, 0x3f, - 0x9b, 0xa5, 0x1f, 0x80, 0x87, 0x9e, 0x8f, 0xeb, 0xe0, 0xe1, 0xe7, 0xa1, 0xee, 0x70, 0x7b, 0x36, - 0x81, 0x93, 0x1a, 0xb0, 0xfc, 0x10, 0x7e, 0xe0, 0x4b, 0x4a, 0x6c, 0xbc, 0xc5, 0x7f, 0x30, 0xa9, - 0xeb, 0xe1, 0x6d, 0x10, 0x01, 0x0a, 0x3e, 0x02, 0x1b, 0x28, 0x69, 0x3b, 0xba, 0x13, 0xe0, 0x1f, - 0x88, 0x43, 0x0b, 0x7e, 0x3a, 0x66, 0xd8, 0xc6, 0x3f, 0x04, 0xed, 0xd4, 0x75, 0x03, 0x7c, 0x03, - 0x56, 0x3e, 0x04, 0xe7, 0x63, 0xbe, 0x0a, 0x9b, 0x4d, 0x7c, 0x13, 0x56, 0x5c, 0xe3, 0x27, 0xbc, - 0xdf, 0xb8, 0x9e, 0x65, 0xe0, 0x5b, 0x7c, 0xa6, 0x03, 0xf1, 0xf6, 0xc2, 0x0c, 0xba, 0x03, 0x2c, - 0x7b, 0xdc, 0xed, 0x1f, 0xf1, 0x4e, 0x15, 0xf2, 0x31, 0xff, 0x29, 0x47, 0x5a, 0x81, 0x4d, 0xf0, - 0x67, 0x62, 0x14, 0x75, 0xbc, 0x1d, 0x40, 0xdf, 0x95, 0x25, 0x07, 0x27, 0x10, 0xeb, 0xbc, 0x3a, - 0xc3, 0xbd, 0x4e, 0x07, 0x37, 0x60, 0x69, 0x72, 0xad, 0x06, 0xb0, 0x34, 0x5d, 0x4a, 0xac, 0x96, - 0x83, 0x4d, 0x08, 0xc5, 0xbd, 0xfb, 0x98, 0xf0, 0xe1, 0x62, 0xf9, 0x01, 0x6e, 0x8a, 0xeb, 0x48, - 0xdb, 0xc0, 0x2d, 0x5e, 0x00, 0x6e, 0x5b, 0xd4, 0xe5, 0x0e, 0x0c, 0x83, 0x6c, 0xc7, 0x13, 0x6f, - 0x71, 0xce, 0xb0, 0x6d, 0xe0, 0x5d, 0x08, 0x8b, 0xe1, 0x7a, 0xf8, 0x1e, 0x44, 0xc2, 0xb4, 0x7c, - 0x3e, 0xb7, 0x89, 0x89, 0x6d, 0xed, 0x4f, 0x0a, 0x5a, 0x59, 0xf8, 0xfe, 0x7c, 0xe1, 0x6f, 0xb6, - 0xbb, 0x0b, 0x5f, 0xe5, 0xef, 0x9f, 0xf1, 0x73, 0x77, 0xee, 0xe3, 0x5c, 0xfb, 0x50, 0x7e, 0xb2, - 0x62, 0xb4, 0x2c, 0x1f, 0x30, 0x4e, 0x6a, 0xdc, 0x08, 0x95, 0x0c, 0xb7, 0xdd, 0x86, 0xaf, 0x56, - 0xad, 0x85, 0xca, 0x99, 0x15, 0x6a, 0x6d, 0xf6, 0xc0, 0x22, 0x3e, 0x90, 0xa7, 0xcf, 0x2b, 0x6f, - 0xa1, 0xe5, 0x87, 0x6c, 0x30, 0x8c, 0xbb, 0xc9, 0xa3, 0x47, 0x13, 0x26, 0x3e, 0x86, 0x8a, 0xb4, - 0xca, 0x69, 0x2e, 0x27, 0x69, 0xbf, 0x57, 0xd0, 0xab, 0x7a, 0x1c, 0xed, 0x1f, 0xfd, 0x84, 0xcd, - 0x5e, 0x24, 0xd8, 0x8f, 0x0f, 0xd9, 0x24, 0x55, 0x3f, 0x45, 0xe5, 0xbe, 0x7c, 0xd0, 0x79, 0x7e, - 0x50, 0xb2, 0xa7, 0x1f, 0x3a, 0xc5, 0xa8, 0xf7, 0xd0, 0x0a, 0x8b, 0x7b, 0x49, 0x7f, 0x18, 0x0f, - 0xba, 0x73, 0x11, 0xba, 0xf6, 0xac, 0x08, 0x09, 0x76, 0x1e, 0x9b, 0x65, 0x36, 0xb7, 0xd3, 0xfe, - 0xaa, 0xa0, 0xda, 0xd3, 0x86, 0x4e, 0x46, 0x09, 0x8c, 0x1b, 0x8a, 0xd4, 0x4c, 0x6b, 0x77, 0xf6, - 0x06, 0xa3, 0x9c, 0xfd, 0x0d, 0xe6, 0x62, 0x06, 0x9f, 0x7d, 0xc6, 0xce, 0xbf, 0x38, 0xe5, 0x16, - 0x5f, 0x9c, 0xd4, 0xbb, 0xe2, 0xa9, 0x87, 0xc5, 0x3d, 0x36, 0x91, 0xcf, 0x29, 0xda, 0xb3, 0xd5, - 0x00, 0x2b, 0x9d, 0x81, 0xb4, 0xdf, 0x29, 0xe8, 0x15, 0xe9, 0x0e, 0x2f, 0x8b, 0x21, 0x9b, 0x7c, - 0x27, 0xc3, 0x3e, 0x99, 0x96, 0xc7, 0xcc, 0x4c, 0x19, 0xf4, 0x3b, 0xa8, 0xcc, 0x24, 0xad, 0xa6, - 0xf0, 0x18, 0x5c, 0x79, 0x5e, 0xed, 0xd3, 0x29, 0xe2, 0x59, 0xe1, 0xd5, 0x7e, 0xa3, 0xa0, 0x4b, - 0x59, 0xae, 0x8f, 0xe2, 0x34, 0x7a, 0xf2, 0x9d, 0x0c, 0xcd, 0x1f, 0x14, 0xf4, 0xf2, 0x31, 0x2b, - 0x65, 0x64, 0x16, 0xca, 0x43, 0x79, 0x81, 0xf2, 0x50, 0x3f, 0x46, 0x25, 0x7e, 0xef, 0x98, 0xd4, - 0x72, 0x1c, 0xfe, 0xe6, 0x33, 0xba, 0x11, 0xf0, 0x51, 0xc9, 0xbe, 0x10, 0xd6, 0xfc, 0xb1, 0xb0, - 0x7e, 0x93, 0x47, 0x2f, 0xe9, 0xe2, 0xa5, 0x97, 0x41, 0xf7, 0xf8, 0xb6, 0xa2, 0x4a, 0x51, 0xf9, - 0x11, 0x8b, 0xd2, 0xc3, 0x31, 0x9b, 0xc8, 0xe7, 0xaa, 0x1b, 0xa7, 0xe3, 0x4f, 0x30, 0xa0, 0xde, - 0x94, 0x68, 0x3a, 0x95, 0xf3, 0x74, 0xa6, 0xf2, 0x2f, 0x9e, 0xa9, 0xf5, 0x5f, 0x29, 0xa8, 0x9c, - 0xe9, 0x50, 0xaf, 0xa2, 0x55, 0xf6, 0x24, 0x1d, 0x47, 0xbd, 0xb4, 0x3b, 0xe1, 0x69, 0xe3, 0x3e, - 0x97, 0xe9, 0x8a, 0xa4, 0x8a, 0x5c, 0xaa, 0xef, 0x22, 0x9c, 0xb1, 0x4d, 0xab, 0x3c, 0xc7, 0x19, - 0xd7, 0x24, 0x3d, 0x3b, 0x10, 0xea, 0x1d, 0xb4, 0x9e, 0xb1, 0x9e, 0xd0, 0x85, 0xf2, 0x1c, 0x54, - 0x93, 0x1c, 0xe6, 0xf1, 0x3e, 0xa3, 0xfd, 0x25, 0x07, 0xc5, 0x3e, 0x1f, 0x94, 0xff, 0x7f, 0x15, - 0xcd, 0x1f, 0xed, 0xfc, 0xb9, 0x8f, 0xf6, 0xc9, 0xdd, 0xb8, 0xf0, 0xad, 0x75, 0xe3, 0xe2, 0x62, - 0x5d, 0x5f, 0xbf, 0x89, 0x96, 0xe7, 0x93, 0x2f, 0xee, 0x09, 0x0e, 0xc1, 0x17, 0x60, 0x15, 0x06, - 0xcd, 0x9b, 0xe2, 0xea, 0x1c, 0x06, 0xcd, 0xad, 0x1b, 0xe2, 0xea, 0x1c, 0x06, 0xcd, 0x8f, 0xb6, - 0x71, 0x7e, 0xfb, 0xeb, 0x22, 0x5a, 0xb3, 0xa5, 0x18, 0x5f, 0xfc, 0x6f, 0xa2, 0xfe, 0x56, 0x41, - 0xf8, 0xf8, 0xa0, 0x51, 0xb7, 0x9e, 0x55, 0xd0, 0x27, 0x4e, 0xcf, 0xf5, 0xed, 0xf3, 0x40, 0x44, - 0xca, 0xb5, 0x77, 0x7f, 0xf6, 0xb7, 0xbf, 0x7f, 0x93, 0x7b, 0x5b, 0x7b, 0x63, 0xf3, 0xf1, 0xd6, - 0x66, 0x16, 0x84, 0xc9, 0xad, 0xe8, 0x18, 0xff, 0x2d, 0xe5, 0xba, 0xfa, 0x6b, 0x05, 0xad, 0x1d, - 0xeb, 0xcc, 0xea, 0x87, 0xcf, 0x55, 0x79, 0x6c, 0xd6, 0xac, 0x6f, 0x9d, 0x03, 0x21, 0x6d, 0xdc, - 0xe0, 0x36, 0x6a, 0xda, 0xeb, 0x27, 0xda, 0x98, 0xb1, 0x83, 0x89, 0xbf, 0x54, 0xd0, 0xca, 0x42, - 0x83, 0x54, 0xeb, 0xcf, 0x8f, 0xc9, 0x7c, 0xbf, 0x5f, 0xdf, 0x3c, 0x33, 0xbf, 0x34, 0xee, 0x1a, - 0x37, 0xee, 0x8a, 0xf6, 0xda, 0xc9, 0x01, 0xe4, 0xcc, 0x60, 0xda, 0x2f, 0x14, 0xb4, 0x3c, 0x7f, - 0xe8, 0xd4, 0x0f, 0xce, 0xd5, 0xb1, 0xd6, 0xeb, 0x67, 0x65, 0x97, 0x76, 0x5d, 0xe5, 0x76, 0xbd, - 0xa9, 0xad, 0x1f, 0xb7, 0x6b, 0xc6, 0x7b, 0x4b, 0xb9, 0xde, 0x78, 0x82, 0x2e, 0xf7, 0x92, 0x83, - 0x53, 0x65, 0x37, 0x2e, 0x1d, 0x2b, 0x56, 0x6f, 0x9c, 0xa4, 0x89, 0xa7, 0x3c, 0xb8, 0x2b, 0x11, - 0x83, 0x04, 0xb8, 0xeb, 0xc9, 0x78, 0xb0, 0x39, 0x60, 0x31, 0xff, 0x27, 0x4f, 0xfe, 0x63, 0x18, - 0x8d, 0x86, 0x93, 0xa7, 0xff, 0x35, 0xbc, 0x9d, 0xad, 0x1f, 0x96, 0x38, 0xf3, 0x47, 0xff, 0x0b, - 0x00, 0x00, 0xff, 0xff, 0x3c, 0x3f, 0xd7, 0x9e, 0x61, 0x1c, 0x00, 0x00, + // 2967 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0xcb, 0x73, 0xdb, 0xd6, + 0xd5, 0x37, 0xf8, 0x12, 0x75, 0x28, 0xc9, 0xd7, 0xb0, 0xe3, 0xf0, 0x53, 0x1c, 0xc7, 0x81, 0x63, + 0x47, 0x76, 0x12, 0xca, 0x56, 0xbe, 0xcf, 0x71, 0x6c, 0x7f, 0x89, 0x21, 0xf0, 0x92, 0x82, 0x0c, + 0x02, 0xf0, 0x05, 0x40, 0x2b, 0xd9, 0x70, 0x60, 0x12, 0x62, 0x38, 0x91, 0x08, 0x96, 0x80, 0x3c, + 0x56, 0x36, 0x9d, 0xe9, 0x4c, 0x97, 0x5d, 0x74, 0xda, 0x45, 0x97, 0x9d, 0xe9, 0x63, 0xa6, 0x33, + 0x99, 0xf6, 0x1f, 0xe8, 0x9f, 0xd0, 0x5d, 0xff, 0x84, 0x76, 0xd7, 0x5d, 0x17, 0x9d, 0x76, 0xd1, + 0xc7, 0x9c, 0x7b, 0x01, 0x12, 0x94, 0x25, 0x59, 0x72, 0xd3, 0x69, 0x76, 0xf7, 0x1e, 0x9e, 0xdf, + 0x79, 0xdd, 0xf3, 0xb8, 0xb8, 0x12, 0xac, 0xf6, 0xc3, 0xb0, 0xbf, 0x13, 0xac, 0x76, 0x77, 0xc2, + 0xbd, 0xde, 0xea, 0x8e, 0x3f, 0xec, 0xef, 0xf9, 0xfd, 0x60, 0xf5, 0xd9, 0xed, 0xc9, 0xba, 0x13, + 0x05, 0xe3, 0x67, 0x83, 0x6e, 0x50, 0x1b, 0x8d, 0xc3, 0x38, 0x94, 0xab, 0x02, 0x50, 0xe3, 0x80, + 0x5a, 0xca, 0x54, 0x7b, 0x76, 0x7b, 0xf9, 0x52, 0x22, 0xca, 0x1f, 0x0d, 0x56, 0xfd, 0xe1, 0x30, + 0x8c, 0xfd, 0x78, 0x10, 0x0e, 0x23, 0x81, 0x53, 0xfe, 0x24, 0x41, 0xb9, 0x1e, 0x76, 0xf7, 0x76, + 0x83, 0x61, 0x2c, 0xdf, 0x87, 0x42, 0xbc, 0x3f, 0x0a, 0xaa, 0xd2, 0x15, 0x69, 0x65, 0x69, 0xed, + 0xdd, 0xda, 0x51, 0x32, 0x6b, 0x29, 0xa2, 0xe6, 0xee, 0x8f, 0x02, 0xc6, 0x41, 0xf2, 0x32, 0xcc, + 0x75, 0xc3, 0x61, 0x1c, 0x0c, 0xe3, 0x6a, 0xee, 0x8a, 0xb4, 0x32, 0xbf, 0x71, 0x86, 0xa5, 0x04, + 0x79, 0x05, 0xce, 0xf6, 0xbb, 0x51, 0x27, 0xd9, 0x76, 0xf6, 0xc6, 0x83, 0x6a, 0x3e, 0xe1, 0x59, + 0xec, 0x77, 0x23, 0x4d, 0xd0, 0xbd, 0xf1, 0x40, 0x5e, 0x86, 0x72, 0xaa, 0xa8, 0x5a, 0x40, 0x16, + 0x36, 0xd9, 0x2b, 0x77, 0xa0, 0x80, 0xfa, 0xe4, 0x0b, 0x40, 0xdc, 0xcf, 0x6c, 0xda, 0xf1, 0x4c, + 0xc7, 0xa6, 0x9a, 0xde, 0xd0, 0x69, 0x9d, 0x9c, 0x91, 0x97, 0x00, 0x6c, 0x43, 0xd5, 0xcd, 0x8e, + 0x4b, 0xb7, 0x5c, 0x22, 0xc9, 0x65, 0x28, 0x6c, 0xb8, 0x2d, 0x83, 0xe4, 0xd6, 0xcb, 0x50, 0x8a, + 0xc2, 0xbd, 0x71, 0x37, 0x50, 0xbe, 0x2f, 0x41, 0xd9, 0x09, 0x50, 0x59, 0x37, 0x90, 0xef, 0x40, + 0x21, 0x0e, 0x9e, 0xc7, 0xdc, 0xdb, 0xca, 0x9a, 0x72, 0xb4, 0xb7, 0x6e, 0xf0, 0x3c, 0x76, 0x46, + 0xfe, 0x90, 0x71, 0x7e, 0x59, 0x85, 0xf9, 0x28, 0x18, 0xc6, 0x83, 0xdd, 0xd4, 0xd5, 0xca, 0xda, + 0xd5, 0xa3, 0xc1, 0x4e, 0xca, 0xca, 0xa6, 0x28, 0xe5, 0x9f, 0x79, 0x28, 0xd1, 0x61, 0x3c, 0x88, + 0xf7, 0x65, 0x19, 0x0a, 0x43, 0x7f, 0x57, 0xc4, 0x7c, 0x9e, 0xf1, 0xb5, 0xfc, 0x71, 0x72, 0x0e, + 0x39, 0x7e, 0x0e, 0xd7, 0x8e, 0x16, 0x2e, 0x64, 0x64, 0x4f, 0x61, 0x13, 0xca, 0xbb, 0x41, 0xec, + 0xf7, 0xfc, 0xd8, 0xaf, 0xe6, 0xaf, 0xe4, 0x57, 0x2a, 0x6b, 0xb5, 0x97, 0xc2, 0x5b, 0x09, 0x80, + 0x0e, 0xe3, 0xf1, 0x3e, 0x9b, 0xe0, 0xf1, 0x2c, 0x22, 0x7f, 0x67, 0x80, 0xc1, 0xe2, 0x67, 0x91, + 0x63, 0x93, 0xbd, 0xac, 0xa1, 0x9e, 0x21, 0xcf, 0xa4, 0x6a, 0x91, 0xeb, 0x79, 0xf7, 0x65, 0x7a, + 0x5a, 0x82, 0x9f, 0x4d, 0x80, 0xb3, 0x91, 0x2c, 0xbd, 0x4a, 0x24, 0x97, 0xef, 0xc3, 0xe2, 0x8c, + 0xf9, 0x32, 0x81, 0xfc, 0x97, 0xc1, 0x7e, 0x12, 0x4e, 0x5c, 0xca, 0x17, 0xa0, 0xf8, 0xcc, 0xdf, + 0xd9, 0x13, 0xe1, 0x9c, 0x67, 0x62, 0x73, 0x2f, 0x77, 0x57, 0x52, 0xf6, 0x93, 0x84, 0xaa, 0xc0, + 0x9c, 0x67, 0x3e, 0x32, 0xad, 0x27, 0x26, 0x39, 0x23, 0x03, 0x94, 0x6c, 0xca, 0x1c, 0xcb, 0x24, + 0x92, 0xbc, 0x00, 0x65, 0xc3, 0xd2, 0x54, 0x57, 0xb7, 0x4c, 0x92, 0x93, 0x09, 0x2c, 0x58, 0xac, + 0xa9, 0x9a, 0xfa, 0xe7, 0x82, 0x92, 0x97, 0xe7, 0xa1, 0x48, 0xdb, 0xd4, 0x74, 0x49, 0x41, 0x3e, + 0x0b, 0x95, 0x27, 0x16, 0x7b, 0xd4, 0xb1, 0x1a, 0x1d, 0x95, 0xb9, 0xa4, 0x28, 0x9f, 0x83, 0x45, + 0xcd, 0x32, 0x1d, 0xaf, 0x45, 0x59, 0xa7, 0x69, 0x59, 0x75, 0x52, 0x42, 0x76, 0xcb, 0xdd, 0xa0, + 0x8c, 0xcc, 0x29, 0x7f, 0x91, 0xa0, 0xe8, 0x86, 0x5f, 0x06, 0xc3, 0x57, 0x4e, 0x43, 0x03, 0x96, + 0x46, 0xfe, 0x38, 0xee, 0x84, 0xdb, 0x9d, 0x68, 0x14, 0x04, 0xdd, 0x2f, 0x92, 0x5c, 0xbc, 0x7e, + 0xb4, 0x04, 0xdb, 0x1f, 0xc7, 0xd6, 0xb6, 0xc3, 0xb9, 0xd9, 0xc2, 0x28, 0xb3, 0x93, 0x1f, 0xc3, + 0xd9, 0x5e, 0x30, 0x0a, 0x86, 0xbd, 0x60, 0xd8, 0xdd, 0xef, 0x04, 0xbd, 0x7e, 0xc0, 0x2b, 0xb4, + 0xb2, 0xb6, 0x72, 0x4c, 0x17, 0x98, 0x00, 0x68, 0xaf, 0x1f, 0xb0, 0xa5, 0xde, 0xcc, 0x1e, 0xe3, + 0xbe, 0x13, 0xec, 0xee, 0xfa, 0x49, 0x1d, 0x8b, 0x8d, 0xf2, 0x29, 0xcc, 0x4f, 0x0e, 0x52, 0xbe, + 0x04, 0xf3, 0xbb, 0x7e, 0x7f, 0x38, 0x88, 0xf7, 0x7a, 0xe2, 0x78, 0x72, 0x6c, 0x4a, 0x40, 0x01, + 0x51, 0x37, 0x1c, 0x0b, 0x4b, 0x72, 0x4c, 0x6c, 0x94, 0xbf, 0x13, 0x58, 0xc8, 0x3a, 0x22, 0x3f, + 0x80, 0x7c, 0xec, 0xf7, 0x93, 0xa6, 0x75, 0xf3, 0x64, 0xde, 0xd7, 0x5c, 0xbf, 0xcf, 0x10, 0x26, + 0x53, 0x28, 0xf9, 0xd1, 0x28, 0xe8, 0xc6, 0x49, 0xb5, 0x7d, 0x70, 0x42, 0x01, 0x2a, 0x07, 0xb1, + 0x04, 0x2c, 0x7f, 0x0a, 0x85, 0xae, 0x1f, 0x09, 0x53, 0x97, 0xd6, 0xde, 0x3b, 0xa1, 0x10, 0xcd, + 0x8f, 0x02, 0xc6, 0x81, 0x28, 0x60, 0x3b, 0x1c, 0xef, 0xf2, 0x60, 0x9d, 0x5c, 0x40, 0x23, 0x1c, + 0xef, 0x32, 0x0e, 0x44, 0x47, 0xfa, 0x18, 0xfe, 0x71, 0xb5, 0x78, 0x2a, 0x47, 0x9a, 0x1c, 0xc4, + 0x12, 0x30, 0xda, 0xb1, 0x1b, 0x86, 0x3d, 0x5e, 0x8e, 0x27, 0xb7, 0xa3, 0x15, 0x86, 0x3d, 0xc6, + 0x81, 0x68, 0xc7, 0x70, 0x6f, 0xf7, 0x69, 0x30, 0xae, 0xce, 0x9d, 0xca, 0x0e, 0x93, 0x83, 0x58, + 0x02, 0x46, 0x31, 0xa3, 0x60, 0x1c, 0x85, 0xc3, 0x6a, 0xf9, 0x54, 0x62, 0x6c, 0x0e, 0x62, 0x09, + 0x98, 0x8b, 0x19, 0x87, 0xa3, 0x60, 0x5c, 0x9d, 0x3f, 0x9d, 0x18, 0x0e, 0x62, 0x09, 0x58, 0x76, + 0xa1, 0x32, 0x0e, 0xba, 0x83, 0xd1, 0x38, 0xec, 0x0e, 0xe2, 0xfd, 0x2a, 0x70, 0x59, 0x6b, 0x27, + 0x94, 0xc5, 0xa6, 0x48, 0x96, 0x15, 0x23, 0xaf, 0x43, 0x31, 0x0e, 0x86, 0x51, 0x50, 0xad, 0x70, + 0x79, 0xef, 0x9f, 0x34, 0x77, 0x11, 0xc3, 0x04, 0x14, 0x65, 0x3c, 0x0b, 0x07, 0xdd, 0xa0, 0xba, + 0x70, 0x2a, 0x19, 0x6d, 0xc4, 0x30, 0x01, 0x55, 0x7e, 0x20, 0x41, 0xde, 0xf5, 0xfb, 0xb3, 0x7d, + 0x70, 0x0e, 0xf2, 0x6a, 0x7d, 0x93, 0x48, 0x62, 0x61, 0x93, 0x9c, 0x58, 0xb4, 0x49, 0x1e, 0x47, + 0xab, 0x66, 0x99, 0x9b, 0xa4, 0x80, 0xa4, 0x3a, 0xc5, 0x6e, 0x57, 0x86, 0x82, 0x69, 0x79, 0x26, + 0x29, 0x21, 0xc9, 0xf4, 0x5a, 0x64, 0x0e, 0x49, 0x36, 0xb3, 0x4c, 0x52, 0x46, 0x92, 0xcd, 0x5c, + 0x32, 0x8f, 0x0d, 0xd0, 0xf6, 0x4c, 0xcd, 0x25, 0x80, 0xbf, 0xb6, 0x29, 0x5b, 0x27, 0x15, 0xb9, + 0x08, 0xd2, 0x16, 0x59, 0xc0, 0xdf, 0xd4, 0x46, 0x43, 0xdf, 0x22, 0x8b, 0x8a, 0x05, 0x25, 0x51, + 0x5e, 0xb2, 0x0c, 0x4b, 0x2a, 0x0e, 0x79, 0xb7, 0x33, 0x35, 0x0c, 0x07, 0x3d, 0x65, 0x0d, 0xaa, + 0xb9, 0x7a, 0x9b, 0x12, 0x09, 0xdb, 0xb2, 0xde, 0xca, 0x50, 0x72, 0xd8, 0x8b, 0x6d, 0x66, 0x35, + 0x19, 0x75, 0x1c, 0x24, 0xe4, 0x95, 0xbf, 0x4a, 0x50, 0xc0, 0x5a, 0x43, 0x5e, 0x4d, 0x75, 0xe8, + 0xac, 0x34, 0x55, 0xd3, 0x3c, 0x47, 0x4d, 0xa4, 0x2d, 0xc2, 0xbc, 0x5a, 0x47, 0xcb, 0x74, 0xd5, + 0x20, 0x39, 0xd1, 0xc5, 0x5b, 0xb6, 0x41, 0x5b, 0xd4, 0xe4, 0x1c, 0x79, 0x1c, 0x10, 0x75, 0xc1, + 0x5d, 0xc0, 0x01, 0xd1, 0xa4, 0xa6, 0xce, 0x77, 0x45, 0x6e, 0x89, 0xe9, 0xb8, 0xcc, 0x43, 0x66, + 0xd5, 0x20, 0xa5, 0xe9, 0x00, 0x69, 0x53, 0x32, 0x87, 0xba, 0x4c, 0xab, 0xa5, 0x9b, 0x62, 0x5f, + 0xc6, 0x78, 0x5b, 0xeb, 0x86, 0xfe, 0xd8, 0xa3, 0x64, 0x1e, 0x15, 0xdb, 0x2a, 0x73, 0x85, 0x2c, + 0x40, 0xc5, 0x36, 0xa3, 0xb6, 0xe5, 0xe8, 0x38, 0x6b, 0x54, 0x83, 0x54, 0x30, 0x18, 0x8c, 0x36, + 0x0c, 0xba, 0xa5, 0xb7, 0x69, 0x07, 0xdd, 0x20, 0x0b, 0xc8, 0xc6, 0xa8, 0xc1, 0x05, 0x0a, 0xd2, + 0x22, 0xea, 0x6c, 0xa7, 0x3a, 0x97, 0x94, 0xdf, 0x48, 0x50, 0xc0, 0x2e, 0x81, 0xc6, 0x35, 0x2c, + 0xd6, 0xca, 0xb8, 0xbe, 0x00, 0x65, 0xb5, 0x8e, 0x06, 0xa9, 0x46, 0xe2, 0xb8, 0xb7, 0xa5, 0x1b, + 0xba, 0xca, 0x3e, 0x23, 0x39, 0x54, 0x96, 0x71, 0xfc, 0x73, 0xca, 0x48, 0x9e, 0x8b, 0xd0, 0x4d, + 0xd5, 0xe8, 0x50, 0xb3, 0xae, 0x9b, 0x4d, 0x52, 0xc0, 0x58, 0x34, 0x29, 0xf3, 0xcc, 0x3a, 0x29, + 0xe2, 0x9a, 0x51, 0xd5, 0xd0, 0x1d, 0xe1, 0xb7, 0xce, 0x92, 0xdd, 0x1c, 0x1e, 0xad, 0xb3, 0x61, + 0x31, 0x97, 0x94, 0xf1, 0xd8, 0x0d, 0xcb, 0x6c, 0x8a, 0x5c, 0xb0, 0x58, 0x9d, 0x32, 0x02, 0xc8, + 0x9d, 0xdc, 0xe4, 0x34, 0x52, 0x51, 0x28, 0x94, 0x44, 0x4f, 0x42, 0x1b, 0x9a, 0xd4, 0xac, 0x53, + 0x36, 0x6b, 0x74, 0x83, 0xb6, 0x74, 0x53, 0x37, 0x93, 0xd3, 0x6a, 0xa9, 0x8e, 0xe6, 0x19, 0xb8, + 0xcd, 0xa1, 0x09, 0x26, 0xf5, 0x5c, 0x34, 0x56, 0xf9, 0x2e, 0x14, 0xb0, 0x2b, 0xa1, 0xd1, 0x2d, + 0xcb, 0xaa, 0x67, 0x44, 0x5c, 0x00, 0xa2, 0x59, 0x66, 0x3d, 0x09, 0x6c, 0x07, 0x7f, 0x25, 0x12, + 0x1e, 0x0e, 0x4f, 0x23, 0x35, 0x49, 0x22, 0xdc, 0x9b, 0x75, 0x3d, 0x09, 0x64, 0x1e, 0x23, 0xad, + 0x9b, 0x2e, 0x65, 0xcc, 0x6a, 0xa6, 0xa7, 0x5f, 0x81, 0xb9, 0x4d, 0x4f, 0xe4, 0x58, 0x11, 0x93, + 0xce, 0xf1, 0xd6, 0x37, 0x31, 0xbd, 0x91, 0x50, 0x52, 0x1e, 0x42, 0x49, 0xf4, 0x34, 0xf4, 0xc3, + 0xf4, 0x5a, 0xeb, 0x07, 0xfd, 0x70, 0x74, 0xb3, 0xe9, 0x19, 0x2a, 0x23, 0x12, 0xbf, 0x74, 0x18, + 0x1e, 0xe3, 0x29, 0x57, 0x86, 0x42, 0xdd, 0x53, 0x0d, 0x92, 0x57, 0x5c, 0x28, 0x89, 0x76, 0x86, + 0x12, 0xc4, 0xa5, 0x24, 0x23, 0x61, 0x1e, 0x8a, 0x0d, 0x9d, 0x39, 0xae, 0x80, 0x3b, 0x14, 0x7d, + 0x22, 0x39, 0x24, 0xbb, 0x1b, 0x3a, 0xab, 0x93, 0x3c, 0x3a, 0x3a, 0x4d, 0x98, 0xe4, 0x52, 0x53, + 0x50, 0xee, 0x42, 0x49, 0x74, 0x37, 0x2e, 0x95, 0x59, 0xf6, 0x8c, 0x5d, 0x68, 0x09, 0xa7, 0x89, + 0x90, 0x98, 0x96, 0xdb, 0x49, 0xf6, 0x39, 0x65, 0x13, 0x2a, 0x99, 0x5e, 0x26, 0xbf, 0x0e, 0xe7, + 0x19, 0xd5, 0x74, 0x9b, 0x59, 0x9a, 0xee, 0x7e, 0x36, 0x5b, 0x53, 0xe9, 0x0f, 0x3c, 0xb5, 0xd0, + 0x7f, 0xcb, 0xec, 0x64, 0x68, 0x39, 0x25, 0x82, 0x22, 0xef, 0x63, 0x18, 0x57, 0x97, 0x9a, 0x33, + 0x35, 0xf9, 0x1a, 0x9c, 0xcb, 0x1e, 0x10, 0xff, 0x59, 0x78, 0xd9, 0xf0, 0x5c, 0x8f, 0x51, 0x11, + 0x24, 0x5b, 0x75, 0x5c, 0x92, 0xc7, 0x43, 0xb0, 0x19, 0x75, 0xc4, 0x2d, 0x6c, 0x11, 0xe6, 0x27, + 0xbd, 0x80, 0x14, 0xc5, 0x37, 0x81, 0x97, 0xee, 0x4b, 0xca, 0x3a, 0x14, 0x79, 0xe3, 0x43, 0xa5, + 0x6d, 0x4b, 0xd7, 0xe8, 0xac, 0xe3, 0xaa, 0x36, 0x6d, 0x02, 0x9a, 0x9a, 0xf6, 0x84, 0x1c, 0x57, + 0xa1, 0xa6, 0xbd, 0xe4, 0xeb, 0x32, 0x2c, 0xcd, 0xde, 0x7c, 0xe4, 0x15, 0x20, 0x5f, 0x04, 0x7e, + 0xaf, 0x13, 0xe3, 0x85, 0xae, 0x33, 0x18, 0xf6, 0x82, 0xe7, 0xfc, 0x3a, 0x52, 0x64, 0x4b, 0x48, + 0xe7, 0xf7, 0x3c, 0x1d, 0xa9, 0x72, 0x1d, 0x8a, 0x3b, 0xfe, 0xd3, 0x60, 0x27, 0xb9, 0x6c, 0xd4, + 0x4e, 0x7a, 0xb9, 0xaa, 0x19, 0x88, 0x62, 0x02, 0xac, 0xfc, 0x6a, 0x0e, 0x8a, 0x9c, 0xf0, 0xc2, + 0xcd, 0x55, 0x5d, 0x5f, 0x67, 0xb4, 0x4d, 0x24, 0xde, 0x4d, 0xb1, 0x7e, 0x45, 0x42, 0xa8, 0xf5, + 0xb6, 0x66, 0x88, 0xd6, 0xa5, 0xd6, 0xdb, 0x2d, 0xab, 0x4e, 0x0a, 0x18, 0x41, 0x15, 0x57, 0x45, + 0xce, 0x60, 0xdb, 0x16, 0xd6, 0x2d, 0x12, 0x5d, 0x97, 0x91, 0x39, 0xde, 0xec, 0xbd, 0x2d, 0xd1, + 0xa4, 0x54, 0x6f, 0x0b, 0xfd, 0x27, 0xf3, 0x72, 0x09, 0x72, 0x9a, 0x46, 0x00, 0x21, 0x1a, 0x17, + 0x5f, 0x99, 0x0c, 0x03, 0xde, 0xc1, 0x35, 0x2c, 0x01, 0xb2, 0xc8, 0x03, 0x88, 0x4b, 0x0e, 0x5b, + 0x12, 0x63, 0xc2, 0x26, 0x67, 0xd3, 0x79, 0x41, 0x90, 0xa1, 0xae, 0x3b, 0x9a, 0xe5, 0x31, 0x87, + 0x92, 0x73, 0x3c, 0xe7, 0xad, 0xf5, 0x4d, 0x22, 0xe3, 0x8a, 0x6e, 0xd9, 0x06, 0x39, 0xcf, 0x7b, + 0xab, 0x45, 0x9d, 0x27, 0xba, 0xbb, 0x41, 0x2e, 0x20, 0x5d, 0x47, 0x8e, 0xd7, 0x70, 0xd5, 0x52, + 0xd9, 0x23, 0x72, 0x11, 0xa5, 0xb5, 0x9e, 0x50, 0xf2, 0xba, 0x58, 0xb4, 0x49, 0x95, 0x0f, 0x1f, + 0xda, 0x24, 0xff, 0x83, 0x86, 0x9a, 0x26, 0x59, 0x46, 0x21, 0xa6, 0x9d, 0xf8, 0xfc, 0x06, 0x5a, + 0x68, 0x72, 0x0b, 0x2f, 0xa1, 0x01, 0xe6, 0xc4, 0xc2, 0x37, 0xd3, 0xa9, 0x75, 0x99, 0xb7, 0x10, + 0x5e, 0xab, 0xe4, 0x2d, 0x9c, 0x4c, 0x36, 0xb9, 0x92, 0x74, 0x66, 0xd5, 0x55, 0xb7, 0x74, 0x87, + 0xbc, 0x2d, 0xb2, 0x81, 0xb9, 0x28, 0x51, 0xe1, 0x13, 0x8d, 0x07, 0xe2, 0x2a, 0x4f, 0x49, 0xb4, + 0xf0, 0x1d, 0xb1, 0x72, 0x1c, 0x72, 0x8d, 0xf3, 0x5a, 0x8e, 0x8b, 0x36, 0x5d, 0x4f, 0x32, 0x95, + 0x73, 0xbf, 0x3b, 0xd9, 0x98, 0x9b, 0x64, 0x45, 0x14, 0x1d, 0xc5, 0xc8, 0xdc, 0x10, 0x63, 0x93, + 0x36, 0xc8, 0xcd, 0x64, 0x65, 0x93, 0xf7, 0xb8, 0x16, 0x66, 0x99, 0x06, 0x79, 0x3f, 0x9d, 0xa5, + 0x1f, 0xa0, 0x87, 0xb6, 0x43, 0x6a, 0xe8, 0xe1, 0x63, 0x4f, 0x35, 0xb9, 0x3d, 0xab, 0xc8, 0xc9, + 0x34, 0x5c, 0xde, 0xc2, 0x1f, 0xf8, 0x92, 0x51, 0x83, 0xdc, 0xe6, 0x3f, 0xd4, 0x99, 0x65, 0x93, + 0x35, 0x14, 0x81, 0x0a, 0x3e, 0x44, 0x1b, 0x18, 0x6d, 0x99, 0xaa, 0xe9, 0x92, 0xff, 0x15, 0x45, + 0x8b, 0x7e, 0x9a, 0x75, 0xaf, 0x45, 0xfe, 0x0f, 0xb5, 0x33, 0xcb, 0x72, 0xc9, 0x1d, 0x5c, 0x39, + 0x18, 0x9c, 0x8f, 0xf8, 0xca, 0x6b, 0x34, 0xc8, 0x5d, 0x5c, 0x71, 0x8d, 0x1f, 0xf3, 0x7e, 0x63, + 0xd9, 0xba, 0x46, 0xee, 0xf1, 0x99, 0x8e, 0xc4, 0xfb, 0x33, 0x33, 0xe8, 0x01, 0xb2, 0x6c, 0x71, + 0xb7, 0xff, 0x9f, 0x77, 0x2a, 0x8f, 0x8f, 0xf9, 0x4f, 0x38, 0x52, 0x77, 0x0d, 0x4a, 0x3e, 0x15, + 0xa3, 0xa8, 0x6d, 0x6f, 0x20, 0xfa, 0x61, 0x92, 0x72, 0x58, 0x81, 0x44, 0xe5, 0xd9, 0xe9, 0x6d, + 0xb5, 0xdb, 0x64, 0x1d, 0x97, 0x75, 0xae, 0x55, 0x43, 0x96, 0x86, 0xc5, 0xa8, 0xde, 0x34, 0x49, + 0x1d, 0x43, 0xf1, 0xe8, 0x09, 0xa1, 0x7c, 0xb8, 0xe8, 0x8e, 0x4b, 0x1a, 0xe2, 0x3a, 0xd2, 0xd2, + 0x48, 0x93, 0x27, 0x80, 0xd5, 0x12, 0x79, 0xb9, 0x81, 0xc3, 0x20, 0xdd, 0xf1, 0x83, 0xd7, 0x39, + 0xa7, 0xd7, 0xd2, 0xc8, 0x26, 0x86, 0x45, 0xb3, 0x6c, 0xf2, 0x08, 0x23, 0x51, 0xd7, 0x1d, 0x3e, + 0xb7, 0x69, 0x9d, 0x18, 0xbc, 0x14, 0x1c, 0x9b, 0xb4, 0x90, 0xb7, 0x89, 0xea, 0x4d, 0xbe, 0xc2, + 0xb3, 0xb6, 0xd0, 0x21, 0xdd, 0x6c, 0x20, 0xd5, 0xe6, 0x69, 0x48, 0x1d, 0xf2, 0x98, 0xe7, 0x19, + 0x77, 0x98, 0x29, 0xff, 0x90, 0x60, 0x71, 0xe6, 0xfb, 0xf7, 0x95, 0x3f, 0xf8, 0x1e, 0xce, 0xbc, + 0x0a, 0xbc, 0x7f, 0xc2, 0xcf, 0xed, 0xec, 0xe3, 0xc0, 0xcc, 0xf7, 0x76, 0xfe, 0x95, 0x5e, 0x2e, + 0x6e, 0x25, 0x9f, 0xcc, 0x04, 0x16, 0x92, 0x37, 0x98, 0xc3, 0x06, 0x07, 0x40, 0x49, 0xb3, 0x5a, + 0x2d, 0xfc, 0x6a, 0x56, 0x9a, 0x50, 0x4e, 0x1d, 0x91, 0xab, 0xd3, 0x37, 0x22, 0xf1, 0x81, 0x3e, + 0x79, 0x21, 0x7a, 0x1b, 0x16, 0x9e, 0x06, 0xfd, 0xc1, 0xb0, 0x13, 0x6e, 0x6f, 0x47, 0x81, 0xf8, + 0x18, 0x2b, 0xb2, 0x0a, 0xa7, 0x59, 0x9c, 0xa4, 0x18, 0x70, 0x51, 0xdb, 0xf1, 0xa3, 0x68, 0xb0, + 0x3d, 0xe8, 0xf2, 0x37, 0x2c, 0xcd, 0x8f, 0x83, 0x7e, 0x38, 0x3e, 0xfc, 0x0d, 0xe5, 0x32, 0x40, + 0x37, 0x1c, 0x6e, 0x0f, 0x7a, 0xfc, 0xf9, 0x42, 0x7c, 0x5b, 0x66, 0x28, 0xca, 0x2f, 0x25, 0x78, + 0x5d, 0x1d, 0xfa, 0x3b, 0xfb, 0x5f, 0x05, 0x53, 0x47, 0x83, 0xef, 0xec, 0x05, 0x51, 0x2c, 0x7f, + 0x02, 0xe5, 0x5e, 0xf2, 0xc2, 0xf5, 0xf2, 0x53, 0x4a, 0xdf, 0xc2, 0xd8, 0x04, 0x23, 0x3f, 0x82, + 0xc5, 0x60, 0xd8, 0x0d, 0x7b, 0x83, 0x61, 0xbf, 0x93, 0x39, 0xb2, 0xeb, 0xc7, 0x1d, 0x99, 0x60, + 0xe7, 0x87, 0xb5, 0x10, 0x64, 0x76, 0xca, 0xef, 0x24, 0xa8, 0xbe, 0x68, 0x68, 0x34, 0x0a, 0x71, + 0x78, 0x32, 0x90, 0x53, 0xad, 0x9d, 0xe9, 0xd1, 0x4a, 0x27, 0x3f, 0xda, 0x73, 0x29, 0x7c, 0xfa, + 0x51, 0x9e, 0x7d, 0x82, 0xcb, 0xcd, 0x3e, 0xc1, 0xc9, 0x0f, 0x45, 0x06, 0x61, 0x04, 0xa3, 0xe4, + 0x7d, 0x49, 0x39, 0x5e, 0x0d, 0xb2, 0xb2, 0x29, 0x48, 0xf9, 0x5a, 0x82, 0x37, 0x13, 0x77, 0x44, + 0x9e, 0x7e, 0xbb, 0xa3, 0xff, 0x15, 0x5c, 0x3e, 0xca, 0xda, 0xe4, 0x08, 0x1e, 0x40, 0x19, 0x69, + 0xf1, 0x20, 0x88, 0xaa, 0x12, 0x8f, 0xc8, 0x95, 0x97, 0x95, 0x26, 0x9b, 0x20, 0x8e, 0x0b, 0xb6, + 0xf2, 0x0b, 0x09, 0x2e, 0x66, 0x95, 0x0f, 0x82, 0xe8, 0x5b, 0x19, 0xa3, 0x68, 0x52, 0x49, 0x53, + 0x33, 0xff, 0xe3, 0xc1, 0xf9, 0x99, 0x04, 0x17, 0xd2, 0xb2, 0xd8, 0x1f, 0xc6, 0xfe, 0xf3, 0x6f, + 0x65, 0x68, 0x7e, 0x2d, 0xc1, 0x6b, 0x07, 0xac, 0x4c, 0x22, 0x33, 0x53, 0x49, 0xd2, 0x2b, 0x54, + 0x92, 0xfc, 0x11, 0x94, 0xf8, 0x85, 0x33, 0xaa, 0xe6, 0x38, 0xfc, 0xad, 0x63, 0x26, 0x09, 0xf2, + 0xb1, 0x84, 0x7d, 0x26, 0xac, 0xf9, 0x03, 0x61, 0xf5, 0xe0, 0x7c, 0xd2, 0x64, 0xf7, 0xb1, 0x6b, + 0x7f, 0x43, 0x41, 0x55, 0xbe, 0x80, 0x0b, 0xb3, 0x62, 0x93, 0x28, 0xd8, 0x00, 0x5d, 0xd1, 0xc5, + 0xa7, 0x19, 0x72, 0xeb, 0x68, 0xc9, 0x87, 0xf7, 0x7f, 0x96, 0x91, 0xa1, 0xfc, 0x39, 0x0f, 0xe7, + 0x55, 0xf1, 0x67, 0x8e, 0xe0, 0x1b, 0xf4, 0x40, 0x66, 0x50, 0xde, 0x0e, 0xfc, 0x78, 0x6f, 0x1c, + 0x44, 0xc9, 0x43, 0xeb, 0x9d, 0xa3, 0xf1, 0x87, 0x18, 0x50, 0x6b, 0x24, 0x68, 0x36, 0x91, 0xf3, + 0x62, 0xaa, 0xe5, 0x5f, 0x3d, 0xd5, 0x96, 0xff, 0x26, 0x41, 0x39, 0xd5, 0x21, 0x5f, 0x83, 0xa5, + 0xe0, 0x79, 0x3c, 0xf6, 0xbb, 0x71, 0x27, 0xe2, 0x79, 0xc7, 0x7d, 0x2e, 0xb3, 0xc5, 0x84, 0x2a, + 0x92, 0x51, 0xbe, 0x01, 0x24, 0x65, 0x9b, 0x94, 0x69, 0x8e, 0x33, 0x9e, 0x4d, 0xe8, 0x69, 0x45, + 0xcb, 0x0f, 0x60, 0x39, 0x65, 0x3d, 0x64, 0xe2, 0xe4, 0x39, 0xa8, 0x9a, 0x70, 0xd4, 0x5f, 0x98, + 0x29, 0x77, 0xa1, 0x3a, 0xa3, 0x68, 0x3f, 0x83, 0x2d, 0x70, 0xec, 0xc5, 0xac, 0xc2, 0x69, 0x9b, + 0x95, 0xaf, 0xc2, 0x62, 0x37, 0xc9, 0x9c, 0x0e, 0xbf, 0x36, 0x95, 0x38, 0xfb, 0x42, 0x37, 0x93, + 0x4e, 0xca, 0x0f, 0xf3, 0xd8, 0x0c, 0xb2, 0x31, 0xff, 0xef, 0x57, 0x59, 0xb6, 0xf5, 0xe5, 0x4f, + 0xdd, 0xfa, 0x0e, 0x1f, 0xec, 0x85, 0x6f, 0x6c, 0xb0, 0x17, 0x0f, 0x0c, 0xf6, 0xd9, 0x42, 0x2c, + 0xfd, 0xfb, 0x85, 0x78, 0xf3, 0x2e, 0x2c, 0x64, 0xb3, 0x55, 0x5c, 0xc9, 0x4d, 0x4a, 0xce, 0xe0, + 0xca, 0x73, 0x1b, 0x77, 0xc5, 0x57, 0xaa, 0xe7, 0x36, 0x6e, 0xdf, 0x11, 0x5f, 0xa9, 0x9e, 0xdb, + 0xf8, 0x70, 0x8d, 0xe4, 0xd7, 0xfe, 0x30, 0x07, 0x67, 0x8d, 0x44, 0x99, 0x23, 0xfe, 0xca, 0x29, + 0xff, 0x5c, 0x02, 0x72, 0xf0, 0x16, 0x24, 0xdf, 0x3e, 0xae, 0x02, 0x0f, 0xbd, 0xda, 0x2d, 0xaf, + 0x9d, 0x06, 0x22, 0x92, 0x48, 0xb9, 0xf1, 0xbd, 0xdf, 0xff, 0xf1, 0x47, 0xb9, 0xab, 0xca, 0xe5, + 0xd5, 0x67, 0xb7, 0x57, 0xd3, 0xb0, 0x46, 0xf7, 0xfc, 0x03, 0xfc, 0xf7, 0xa4, 0x9b, 0xf2, 0x4f, + 0x25, 0x38, 0x7b, 0x60, 0x16, 0xca, 0xb7, 0x5e, 0xaa, 0xf2, 0xc0, 0x74, 0x5f, 0xbe, 0x7d, 0x0a, + 0x44, 0x62, 0xe3, 0x0a, 0xb7, 0x51, 0x51, 0xde, 0x3c, 0xd4, 0xc6, 0x94, 0x1d, 0x4d, 0xfc, 0xed, + 0x81, 0x5b, 0x45, 0xa6, 0xd6, 0x3e, 0x3a, 0x99, 0xde, 0x17, 0xae, 0x6c, 0xcb, 0x77, 0x4f, 0x0f, + 0x4c, 0xec, 0x5e, 0xe5, 0x76, 0xdf, 0x50, 0xde, 0x39, 0xda, 0xee, 0xfd, 0x99, 0x08, 0xff, 0x44, + 0x82, 0xc5, 0x99, 0x89, 0x2a, 0xd7, 0x5e, 0x7e, 0xa4, 0xd9, 0x0b, 0xc2, 0xf2, 0xea, 0x89, 0xf9, + 0x13, 0x1b, 0xaf, 0x73, 0x1b, 0xaf, 0x28, 0x6f, 0x1c, 0x7e, 0xfe, 0x9c, 0x19, 0x4d, 0xfb, 0xb1, + 0x04, 0x0b, 0xd9, 0x29, 0x27, 0x7f, 0xf0, 0xd2, 0x02, 0xca, 0x0e, 0xd9, 0xe5, 0xda, 0x49, 0xd9, + 0x13, 0xbb, 0xae, 0x71, 0xbb, 0xde, 0x52, 0x96, 0x67, 0xed, 0xca, 0x76, 0xc6, 0xd4, 0xac, 0x6c, + 0x73, 0x3c, 0xce, 0xac, 0x43, 0x06, 0xd7, 0x72, 0xed, 0xa4, 0xec, 0xc7, 0x9b, 0xe5, 0x67, 0x78, + 0xef, 0x49, 0x37, 0xd7, 0x9f, 0xc3, 0xa5, 0x6e, 0xb8, 0x7b, 0xa4, 0xec, 0xf5, 0x0b, 0x07, 0x5a, + 0x80, 0x3d, 0x0e, 0xe3, 0xd0, 0x96, 0x3e, 0x7f, 0x98, 0x20, 0xfa, 0x21, 0x72, 0xd7, 0xc2, 0x71, + 0x7f, 0xb5, 0x1f, 0x0c, 0xf9, 0x7f, 0x33, 0x24, 0xff, 0x35, 0xe1, 0x8f, 0x06, 0xd1, 0x8b, 0xff, + 0x39, 0x71, 0x3f, 0x5d, 0x3f, 0x2d, 0x71, 0xe6, 0x0f, 0xff, 0x15, 0x00, 0x00, 0xff, 0xff, 0x5f, + 0x87, 0x12, 0xb1, 0x65, 0x21, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/language/v1beta1/language_service.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/language/v1beta1/language_service.pb.go index 55156d4..4eba895 100644 --- a/vendor/google.golang.org/genproto/googleapis/cloud/language/v1beta1/language_service.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/cloud/language/v1beta1/language_service.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/cloud/language/v1beta1/language_service.proto -// DO NOT EDIT! /* Package language is a generated protocol buffer package. diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/language/v1beta2/language_service.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/language/v1beta2/language_service.pb.go index 3239e06..a1fea06 100644 --- a/vendor/google.golang.org/genproto/googleapis/cloud/language/v1beta2/language_service.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/cloud/language/v1beta2/language_service.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/cloud/language/v1beta2/language_service.proto -// DO NOT EDIT! /* Package language is a generated protocol buffer package. @@ -18,6 +17,7 @@ It has these top-level messages: DependencyEdge EntityMention TextSpan + ClassificationCategory AnalyzeSentimentRequest AnalyzeSentimentResponse AnalyzeEntitySentimentRequest @@ -26,6 +26,8 @@ It has these top-level messages: AnalyzeEntitiesResponse AnalyzeSyntaxRequest AnalyzeSyntaxResponse + ClassifyTextRequest + ClassifyTextResponse AnnotateTextRequest AnnotateTextResponse */ @@ -859,6 +861,18 @@ const ( DependencyEdge_COP DependencyEdge_Label = 75 // Dislocated relation (for fronted/topicalized elements) DependencyEdge_DISLOCATED DependencyEdge_Label = 76 + // Aspect marker + DependencyEdge_ASP DependencyEdge_Label = 77 + // Genitive modifier + DependencyEdge_GMOD DependencyEdge_Label = 78 + // Genitive object + DependencyEdge_GOBJ DependencyEdge_Label = 79 + // Infinitival modifier + DependencyEdge_INFMOD DependencyEdge_Label = 80 + // Measure + DependencyEdge_MES DependencyEdge_Label = 81 + // Nominal complement of a noun + DependencyEdge_NCOMP DependencyEdge_Label = 82 ) var DependencyEdge_Label_name = map[int32]string{ @@ -939,6 +953,12 @@ var DependencyEdge_Label_name = map[int32]string{ 74: "NUMC", 75: "COP", 76: "DISLOCATED", + 77: "ASP", + 78: "GMOD", + 79: "GOBJ", + 80: "INFMOD", + 81: "MES", + 82: "NCOMP", } var DependencyEdge_Label_value = map[string]int32{ "UNKNOWN": 0, @@ -1018,6 +1038,12 @@ var DependencyEdge_Label_value = map[string]int32{ "NUMC": 74, "COP": 75, "DISLOCATED": 76, + "ASP": 77, + "GMOD": 78, + "GOBJ": 79, + "INFMOD": 80, + "MES": 81, + "NCOMP": 82, } func (x DependencyEdge_Label) String() string { @@ -1070,7 +1096,7 @@ type Document struct { // The language of the document (if not specified, the language is // automatically detected). Both ISO and BCP-47 language codes are // accepted.
- // [Language Support](https://cloud.google.com/natural-language/docs/languages) + // [Language Support](/natural-language/docs/languages) // lists currently supported languages for each API method. // If the language (either specified by the caller or automatically detected) // is not supported by the called API method, an `INVALID_ARGUMENT` error @@ -1596,6 +1622,34 @@ func (m *TextSpan) GetBeginOffset() int32 { return 0 } +// Represents a category returned from the text classifier. +type ClassificationCategory struct { + // The name of the category representing the document. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The classifier's confidence of the category. Number represents how certain + // the classifier is that this category represents the given text. + Confidence float32 `protobuf:"fixed32,2,opt,name=confidence" json:"confidence,omitempty"` +} + +func (m *ClassificationCategory) Reset() { *m = ClassificationCategory{} } +func (m *ClassificationCategory) String() string { return proto.CompactTextString(m) } +func (*ClassificationCategory) ProtoMessage() {} +func (*ClassificationCategory) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *ClassificationCategory) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ClassificationCategory) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + // The sentiment analysis request message. type AnalyzeSentimentRequest struct { // Input document. @@ -1608,7 +1662,7 @@ type AnalyzeSentimentRequest struct { func (m *AnalyzeSentimentRequest) Reset() { *m = AnalyzeSentimentRequest{} } func (m *AnalyzeSentimentRequest) String() string { return proto.CompactTextString(m) } func (*AnalyzeSentimentRequest) ProtoMessage() {} -func (*AnalyzeSentimentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } +func (*AnalyzeSentimentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } func (m *AnalyzeSentimentRequest) GetDocument() *Document { if m != nil { @@ -1639,7 +1693,7 @@ type AnalyzeSentimentResponse struct { func (m *AnalyzeSentimentResponse) Reset() { *m = AnalyzeSentimentResponse{} } func (m *AnalyzeSentimentResponse) String() string { return proto.CompactTextString(m) } func (*AnalyzeSentimentResponse) ProtoMessage() {} -func (*AnalyzeSentimentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } +func (*AnalyzeSentimentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } func (m *AnalyzeSentimentResponse) GetDocumentSentiment() *Sentiment { if m != nil { @@ -1673,7 +1727,7 @@ type AnalyzeEntitySentimentRequest struct { func (m *AnalyzeEntitySentimentRequest) Reset() { *m = AnalyzeEntitySentimentRequest{} } func (m *AnalyzeEntitySentimentRequest) String() string { return proto.CompactTextString(m) } func (*AnalyzeEntitySentimentRequest) ProtoMessage() {} -func (*AnalyzeEntitySentimentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } +func (*AnalyzeEntitySentimentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } func (m *AnalyzeEntitySentimentRequest) GetDocument() *Document { if m != nil { @@ -1702,7 +1756,7 @@ type AnalyzeEntitySentimentResponse struct { func (m *AnalyzeEntitySentimentResponse) Reset() { *m = AnalyzeEntitySentimentResponse{} } func (m *AnalyzeEntitySentimentResponse) String() string { return proto.CompactTextString(m) } func (*AnalyzeEntitySentimentResponse) ProtoMessage() {} -func (*AnalyzeEntitySentimentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } +func (*AnalyzeEntitySentimentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } func (m *AnalyzeEntitySentimentResponse) GetEntities() []*Entity { if m != nil { @@ -1729,7 +1783,7 @@ type AnalyzeEntitiesRequest struct { func (m *AnalyzeEntitiesRequest) Reset() { *m = AnalyzeEntitiesRequest{} } func (m *AnalyzeEntitiesRequest) String() string { return proto.CompactTextString(m) } func (*AnalyzeEntitiesRequest) ProtoMessage() {} -func (*AnalyzeEntitiesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } +func (*AnalyzeEntitiesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } func (m *AnalyzeEntitiesRequest) GetDocument() *Document { if m != nil { @@ -1758,7 +1812,7 @@ type AnalyzeEntitiesResponse struct { func (m *AnalyzeEntitiesResponse) Reset() { *m = AnalyzeEntitiesResponse{} } func (m *AnalyzeEntitiesResponse) String() string { return proto.CompactTextString(m) } func (*AnalyzeEntitiesResponse) ProtoMessage() {} -func (*AnalyzeEntitiesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } +func (*AnalyzeEntitiesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } func (m *AnalyzeEntitiesResponse) GetEntities() []*Entity { if m != nil { @@ -1785,7 +1839,7 @@ type AnalyzeSyntaxRequest struct { func (m *AnalyzeSyntaxRequest) Reset() { *m = AnalyzeSyntaxRequest{} } func (m *AnalyzeSyntaxRequest) String() string { return proto.CompactTextString(m) } func (*AnalyzeSyntaxRequest) ProtoMessage() {} -func (*AnalyzeSyntaxRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } +func (*AnalyzeSyntaxRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } func (m *AnalyzeSyntaxRequest) GetDocument() *Document { if m != nil { @@ -1816,7 +1870,7 @@ type AnalyzeSyntaxResponse struct { func (m *AnalyzeSyntaxResponse) Reset() { *m = AnalyzeSyntaxResponse{} } func (m *AnalyzeSyntaxResponse) String() string { return proto.CompactTextString(m) } func (*AnalyzeSyntaxResponse) ProtoMessage() {} -func (*AnalyzeSyntaxResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } +func (*AnalyzeSyntaxResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } func (m *AnalyzeSyntaxResponse) GetSentences() []*Sentence { if m != nil { @@ -1839,6 +1893,42 @@ func (m *AnalyzeSyntaxResponse) GetLanguage() string { return "" } +// The document classification request message. +type ClassifyTextRequest struct { + // Input document. + Document *Document `protobuf:"bytes,1,opt,name=document" json:"document,omitempty"` +} + +func (m *ClassifyTextRequest) Reset() { *m = ClassifyTextRequest{} } +func (m *ClassifyTextRequest) String() string { return proto.CompactTextString(m) } +func (*ClassifyTextRequest) ProtoMessage() {} +func (*ClassifyTextRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } + +func (m *ClassifyTextRequest) GetDocument() *Document { + if m != nil { + return m.Document + } + return nil +} + +// The document classification response message. +type ClassifyTextResponse struct { + // Categories representing the input document. + Categories []*ClassificationCategory `protobuf:"bytes,1,rep,name=categories" json:"categories,omitempty"` +} + +func (m *ClassifyTextResponse) Reset() { *m = ClassifyTextResponse{} } +func (m *ClassifyTextResponse) String() string { return proto.CompactTextString(m) } +func (*ClassifyTextResponse) ProtoMessage() {} +func (*ClassifyTextResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } + +func (m *ClassifyTextResponse) GetCategories() []*ClassificationCategory { + if m != nil { + return m.Categories + } + return nil +} + // The request message for the text annotation API, which can perform multiple // analysis types (sentiment, entities, and syntax) in one call. type AnnotateTextRequest struct { @@ -1853,7 +1943,7 @@ type AnnotateTextRequest struct { func (m *AnnotateTextRequest) Reset() { *m = AnnotateTextRequest{} } func (m *AnnotateTextRequest) String() string { return proto.CompactTextString(m) } func (*AnnotateTextRequest) ProtoMessage() {} -func (*AnnotateTextRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } +func (*AnnotateTextRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } func (m *AnnotateTextRequest) GetDocument() *Document { if m != nil { @@ -1887,13 +1977,15 @@ type AnnotateTextRequest_Features struct { ExtractDocumentSentiment bool `protobuf:"varint,3,opt,name=extract_document_sentiment,json=extractDocumentSentiment" json:"extract_document_sentiment,omitempty"` // Extract entities and their associated sentiment. ExtractEntitySentiment bool `protobuf:"varint,4,opt,name=extract_entity_sentiment,json=extractEntitySentiment" json:"extract_entity_sentiment,omitempty"` + // Classify the full document into categories. + ClassifyText bool `protobuf:"varint,6,opt,name=classify_text,json=classifyText" json:"classify_text,omitempty"` } func (m *AnnotateTextRequest_Features) Reset() { *m = AnnotateTextRequest_Features{} } func (m *AnnotateTextRequest_Features) String() string { return proto.CompactTextString(m) } func (*AnnotateTextRequest_Features) ProtoMessage() {} func (*AnnotateTextRequest_Features) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{17, 0} + return fileDescriptor0, []int{20, 0} } func (m *AnnotateTextRequest_Features) GetExtractSyntax() bool { @@ -1924,6 +2016,13 @@ func (m *AnnotateTextRequest_Features) GetExtractEntitySentiment() bool { return false } +func (m *AnnotateTextRequest_Features) GetClassifyText() bool { + if m != nil { + return m.ClassifyText + } + return false +} + // The text annotations response message. type AnnotateTextResponse struct { // Sentences in the input document. Populated if the user enables @@ -1944,12 +2043,14 @@ type AnnotateTextResponse struct { // in the request or, if not specified, the automatically-detected language. // See [Document.language][google.cloud.language.v1beta2.Document.language] field for more details. Language string `protobuf:"bytes,5,opt,name=language" json:"language,omitempty"` + // Categories identified in the input document. + Categories []*ClassificationCategory `protobuf:"bytes,6,rep,name=categories" json:"categories,omitempty"` } func (m *AnnotateTextResponse) Reset() { *m = AnnotateTextResponse{} } func (m *AnnotateTextResponse) String() string { return proto.CompactTextString(m) } func (*AnnotateTextResponse) ProtoMessage() {} -func (*AnnotateTextResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } +func (*AnnotateTextResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } func (m *AnnotateTextResponse) GetSentences() []*Sentence { if m != nil { @@ -1986,6 +2087,13 @@ func (m *AnnotateTextResponse) GetLanguage() string { return "" } +func (m *AnnotateTextResponse) GetCategories() []*ClassificationCategory { + if m != nil { + return m.Categories + } + return nil +} + func init() { proto.RegisterType((*Document)(nil), "google.cloud.language.v1beta2.Document") proto.RegisterType((*Sentence)(nil), "google.cloud.language.v1beta2.Sentence") @@ -1996,6 +2104,7 @@ func init() { proto.RegisterType((*DependencyEdge)(nil), "google.cloud.language.v1beta2.DependencyEdge") proto.RegisterType((*EntityMention)(nil), "google.cloud.language.v1beta2.EntityMention") proto.RegisterType((*TextSpan)(nil), "google.cloud.language.v1beta2.TextSpan") + proto.RegisterType((*ClassificationCategory)(nil), "google.cloud.language.v1beta2.ClassificationCategory") proto.RegisterType((*AnalyzeSentimentRequest)(nil), "google.cloud.language.v1beta2.AnalyzeSentimentRequest") proto.RegisterType((*AnalyzeSentimentResponse)(nil), "google.cloud.language.v1beta2.AnalyzeSentimentResponse") proto.RegisterType((*AnalyzeEntitySentimentRequest)(nil), "google.cloud.language.v1beta2.AnalyzeEntitySentimentRequest") @@ -2004,6 +2113,8 @@ func init() { proto.RegisterType((*AnalyzeEntitiesResponse)(nil), "google.cloud.language.v1beta2.AnalyzeEntitiesResponse") proto.RegisterType((*AnalyzeSyntaxRequest)(nil), "google.cloud.language.v1beta2.AnalyzeSyntaxRequest") proto.RegisterType((*AnalyzeSyntaxResponse)(nil), "google.cloud.language.v1beta2.AnalyzeSyntaxResponse") + proto.RegisterType((*ClassifyTextRequest)(nil), "google.cloud.language.v1beta2.ClassifyTextRequest") + proto.RegisterType((*ClassifyTextResponse)(nil), "google.cloud.language.v1beta2.ClassifyTextResponse") proto.RegisterType((*AnnotateTextRequest)(nil), "google.cloud.language.v1beta2.AnnotateTextRequest") proto.RegisterType((*AnnotateTextRequest_Features)(nil), "google.cloud.language.v1beta2.AnnotateTextRequest.Features") proto.RegisterType((*AnnotateTextResponse)(nil), "google.cloud.language.v1beta2.AnnotateTextResponse") @@ -2050,8 +2161,10 @@ type LanguageServiceClient interface { // tokenization along with part of speech tags, dependency trees, and other // properties. AnalyzeSyntax(ctx context.Context, in *AnalyzeSyntaxRequest, opts ...grpc.CallOption) (*AnalyzeSyntaxResponse, error) - // A convenience method that provides all syntax, sentiment, and entity - // features in one call. + // Classifies a document into categories. + ClassifyText(ctx context.Context, in *ClassifyTextRequest, opts ...grpc.CallOption) (*ClassifyTextResponse, error) + // A convenience method that provides all syntax, sentiment, entity, and + // classification features in one call. AnnotateText(ctx context.Context, in *AnnotateTextRequest, opts ...grpc.CallOption) (*AnnotateTextResponse, error) } @@ -2099,6 +2212,15 @@ func (c *languageServiceClient) AnalyzeSyntax(ctx context.Context, in *AnalyzeSy return out, nil } +func (c *languageServiceClient) ClassifyText(ctx context.Context, in *ClassifyTextRequest, opts ...grpc.CallOption) (*ClassifyTextResponse, error) { + out := new(ClassifyTextResponse) + err := grpc.Invoke(ctx, "/google.cloud.language.v1beta2.LanguageService/ClassifyText", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *languageServiceClient) AnnotateText(ctx context.Context, in *AnnotateTextRequest, opts ...grpc.CallOption) (*AnnotateTextResponse, error) { out := new(AnnotateTextResponse) err := grpc.Invoke(ctx, "/google.cloud.language.v1beta2.LanguageService/AnnotateText", in, out, c.cc, opts...) @@ -2124,8 +2246,10 @@ type LanguageServiceServer interface { // tokenization along with part of speech tags, dependency trees, and other // properties. AnalyzeSyntax(context.Context, *AnalyzeSyntaxRequest) (*AnalyzeSyntaxResponse, error) - // A convenience method that provides all syntax, sentiment, and entity - // features in one call. + // Classifies a document into categories. + ClassifyText(context.Context, *ClassifyTextRequest) (*ClassifyTextResponse, error) + // A convenience method that provides all syntax, sentiment, entity, and + // classification features in one call. AnnotateText(context.Context, *AnnotateTextRequest) (*AnnotateTextResponse, error) } @@ -2205,6 +2329,24 @@ func _LanguageService_AnalyzeSyntax_Handler(srv interface{}, ctx context.Context return interceptor(ctx, in, info, handler) } +func _LanguageService_ClassifyText_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ClassifyTextRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LanguageServiceServer).ClassifyText(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.language.v1beta2.LanguageService/ClassifyText", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LanguageServiceServer).ClassifyText(ctx, req.(*ClassifyTextRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _LanguageService_AnnotateText_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(AnnotateTextRequest) if err := dec(in); err != nil { @@ -2243,6 +2385,10 @@ var _LanguageService_serviceDesc = grpc.ServiceDesc{ MethodName: "AnalyzeSyntax", Handler: _LanguageService_AnalyzeSyntax_Handler, }, + { + MethodName: "ClassifyText", + Handler: _LanguageService_ClassifyText_Handler, + }, { MethodName: "AnnotateText", Handler: _LanguageService_AnnotateText_Handler, @@ -2257,185 +2403,194 @@ func init() { } var fileDescriptor0 = []byte{ - // 2873 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x5a, 0x4d, 0x73, 0xdb, 0xc6, - 0xf9, 0x37, 0xf8, 0x26, 0x72, 0x29, 0xc9, 0x6b, 0xc4, 0x89, 0xf9, 0xd7, 0x3f, 0x2f, 0x0e, 0x12, - 0xd7, 0x8a, 0x9d, 0x50, 0xb1, 0xec, 0x38, 0xae, 0xed, 0xbc, 0x40, 0xc0, 0x92, 0x82, 0x4c, 0x02, - 0xc8, 0x02, 0xa0, 0xe5, 0x5c, 0x38, 0x30, 0xb9, 0x62, 0x38, 0x91, 0x00, 0x96, 0x80, 0x3c, 0x56, - 0x2f, 0x99, 0xc9, 0x4c, 0x8f, 0x99, 0x1e, 0x72, 0xe8, 0x07, 0xe8, 0xa1, 0xa7, 0x4e, 0x3a, 0xd3, - 0x99, 0x4e, 0xfb, 0x19, 0x7a, 0x4c, 0xa7, 0xa7, 0x1e, 0x7b, 0xec, 0xa1, 0x87, 0x1e, 0x7a, 0xec, - 0x3c, 0xbb, 0x0b, 0xbe, 0xc8, 0x8e, 0x25, 0x3a, 0x99, 0x4e, 0x7a, 0xdb, 0x7d, 0xf0, 0xfc, 0x9e, - 0x7d, 0xde, 0x9f, 0x05, 0x48, 0x74, 0x63, 0x10, 0xc7, 0x83, 0x7d, 0xb6, 0xd1, 0xdb, 0x8f, 0x0f, - 0xfb, 0x1b, 0xfb, 0x61, 0x34, 0x38, 0x0c, 0x07, 0x6c, 0xe3, 0xd1, 0xb5, 0x87, 0x2c, 0x0d, 0x37, - 0x27, 0x84, 0x6e, 0xc2, 0xc6, 0x8f, 0x86, 0x3d, 0x56, 0x1f, 0x8d, 0xe3, 0x34, 0x56, 0x5f, 0x11, - 0xa8, 0x3a, 0x47, 0xd5, 0x33, 0xa6, 0xba, 0x44, 0xad, 0xbd, 0x2c, 0x85, 0x86, 0xa3, 0xe1, 0x46, - 0x18, 0x45, 0x71, 0x1a, 0xa6, 0xc3, 0x38, 0x4a, 0x04, 0x78, 0xed, 0x0d, 0xf9, 0x74, 0x3f, 0x8e, - 0x06, 0xe3, 0xc3, 0x28, 0x1a, 0x46, 0x83, 0x8d, 0x78, 0xc4, 0xc6, 0x73, 0x4c, 0xaf, 0x49, 0x26, - 0xbe, 0x7b, 0x78, 0xb8, 0xb7, 0x91, 0x0e, 0x0f, 0x58, 0x92, 0x86, 0x07, 0x23, 0xc9, 0x70, 0x41, - 0x32, 0x8c, 0x47, 0xbd, 0x8d, 0x24, 0x0d, 0xd3, 0x43, 0x89, 0xd4, 0xfe, 0xa9, 0xa0, 0xb2, 0x19, - 0xf7, 0x0e, 0x0f, 0x58, 0x94, 0xaa, 0x1f, 0xa3, 0x42, 0x7a, 0x34, 0x62, 0x35, 0xe5, 0xa2, 0xb2, - 0xbe, 0xba, 0xf9, 0x76, 0xfd, 0x99, 0x7a, 0xd7, 0x33, 0x58, 0xdd, 0x3f, 0x1a, 0x31, 0xca, 0x91, - 0xea, 0x1a, 0x5a, 0xea, 0xc5, 0x51, 0xca, 0xa2, 0xb4, 0x96, 0xbb, 0xa8, 0xac, 0x57, 0xb6, 0xcf, - 0xd0, 0x8c, 0xa0, 0xae, 0xa3, 0xb3, 0x83, 0x5e, 0xd2, 0x95, 0xdb, 0xee, 0xe1, 0x78, 0x58, 0xcb, - 0x4b, 0x9e, 0x95, 0x41, 0x2f, 0x31, 0x04, 0x3d, 0x18, 0x0f, 0xd5, 0x35, 0x54, 0xce, 0x4e, 0xab, - 0x15, 0x80, 0x85, 0x4e, 0xf6, 0xda, 0x4d, 0x54, 0x80, 0xf3, 0xd4, 0xf3, 0x08, 0xfb, 0x0f, 0x5c, - 0xd2, 0x0d, 0x6c, 0xcf, 0x25, 0x86, 0xd5, 0xb0, 0x88, 0x89, 0xcf, 0xa8, 0xab, 0x08, 0xb9, 0x2d, - 0xdd, 0xb2, 0xbb, 0x3e, 0xd9, 0xf5, 0xb1, 0xa2, 0x96, 0x51, 0x61, 0xdb, 0x6f, 0xb7, 0x70, 0x6e, - 0xab, 0x8c, 0x4a, 0x49, 0x7c, 0x38, 0xee, 0x31, 0xed, 0x97, 0x0a, 0x2a, 0x7b, 0x0c, 0x0e, 0xeb, - 0x31, 0xf5, 0x0e, 0x2a, 0xa4, 0xec, 0x71, 0xca, 0x4d, 0xae, 0x6e, 0x5e, 0x3e, 0xc1, 0x64, 0x9f, - 0x3d, 0x4e, 0xbd, 0x51, 0x18, 0x51, 0x0e, 0x52, 0x1b, 0xa8, 0x92, 0xb0, 0x08, 0x7c, 0x2d, 0xed, - 0xad, 0x6e, 0xae, 0x9f, 0x20, 0xc1, 0xcb, 0xf8, 0xe9, 0x14, 0xaa, 0x7d, 0x5d, 0x40, 0x25, 0x12, - 0xa5, 0xc3, 0xf4, 0x48, 0x55, 0x51, 0x21, 0x0a, 0x0f, 0x44, 0x08, 0x2a, 0x94, 0xaf, 0xd5, 0x0f, - 0x65, 0x58, 0x72, 0x3c, 0x2c, 0x57, 0x4e, 0x38, 0x41, 0x08, 0x9a, 0x0d, 0x8a, 0x83, 0xca, 0x07, - 0x2c, 0x0d, 0xfb, 0x61, 0x1a, 0xd6, 0xf2, 0x17, 0xf3, 0xeb, 0xd5, 0xcd, 0xeb, 0xa7, 0x93, 0xd1, - 0x96, 0x28, 0x12, 0xa5, 0xe3, 0x23, 0x3a, 0x11, 0x02, 0xf1, 0x49, 0xc2, 0xfd, 0x21, 0x38, 0x90, - 0xc7, 0x27, 0x47, 0x27, 0x7b, 0x75, 0x1b, 0x0e, 0x8b, 0x78, 0x72, 0xd6, 0x8a, 0xfc, 0xb0, 0xb7, - 0x4f, 0x75, 0x58, 0x5b, 0x80, 0xe8, 0x04, 0x3d, 0xef, 0xdd, 0xd2, 0x73, 0x7b, 0x77, 0xed, 0x0e, - 0x5a, 0x99, 0x33, 0x44, 0xc5, 0x28, 0xff, 0x39, 0x3b, 0x92, 0x2e, 0x86, 0xa5, 0x7a, 0x1e, 0x15, - 0x1f, 0x85, 0xfb, 0x87, 0xc2, 0xc5, 0x15, 0x2a, 0x36, 0xb7, 0x73, 0xb7, 0x14, 0xed, 0x48, 0xa6, - 0x5b, 0x15, 0x2d, 0x05, 0xf6, 0x3d, 0xdb, 0xb9, 0x6f, 0xe3, 0x33, 0x2a, 0x42, 0x25, 0x97, 0x50, - 0xcf, 0xb1, 0xb1, 0xa2, 0x2e, 0xa3, 0x72, 0xcb, 0x31, 0x74, 0xdf, 0x72, 0x6c, 0x9c, 0x53, 0x31, - 0x5a, 0x76, 0x68, 0x53, 0xb7, 0xad, 0x4f, 0x05, 0x25, 0xaf, 0x56, 0x50, 0x91, 0x74, 0x88, 0xed, - 0xe3, 0x82, 0x7a, 0x16, 0x55, 0xef, 0x3b, 0xf4, 0x5e, 0xd7, 0x69, 0x74, 0x75, 0xea, 0xe3, 0xa2, - 0x7a, 0x0e, 0xad, 0x18, 0x8e, 0xed, 0x05, 0x6d, 0x42, 0xbb, 0x4d, 0xc7, 0x31, 0x71, 0x09, 0xd8, - 0x1d, 0x7f, 0x9b, 0x50, 0xbc, 0xa4, 0xfd, 0x22, 0x87, 0x8a, 0x7e, 0xfc, 0x39, 0x8b, 0xbe, 0x5f, - 0x92, 0x7e, 0x82, 0x56, 0x47, 0xe1, 0x38, 0xed, 0xc6, 0x7b, 0xdd, 0x64, 0xc4, 0x58, 0xef, 0x33, - 0x99, 0xa9, 0x57, 0x4f, 0x10, 0xe3, 0x86, 0xe3, 0xd4, 0xd9, 0xf3, 0x38, 0x84, 0x2e, 0x8f, 0x66, - 0x76, 0x6a, 0x07, 0x9d, 0xed, 0xb3, 0x11, 0x8b, 0xfa, 0x2c, 0xea, 0x1d, 0x75, 0x59, 0x7f, 0xc0, - 0x78, 0x25, 0x57, 0x37, 0xdf, 0x39, 0xa9, 0x65, 0x4c, 0x50, 0xa4, 0x3f, 0x60, 0x74, 0xb5, 0x3f, - 0xb7, 0x87, 0x30, 0xec, 0xb3, 0x83, 0x83, 0x50, 0x16, 0xbd, 0xd8, 0x68, 0x1f, 0xa1, 0xca, 0x24, - 0xae, 0xea, 0xcb, 0xa8, 0x72, 0x10, 0x0e, 0xa2, 0x61, 0x7a, 0xd8, 0x17, 0xd1, 0xca, 0xd1, 0x29, - 0x01, 0x04, 0x24, 0xbd, 0x78, 0x2c, 0xd4, 0xc9, 0x51, 0xb1, 0xd1, 0xfe, 0x74, 0x0e, 0x2d, 0xcf, - 0x5a, 0xa3, 0xea, 0x28, 0x9f, 0x86, 0x03, 0xd9, 0xe6, 0x36, 0x16, 0xf0, 0x43, 0xdd, 0x0f, 0x07, - 0x14, 0xb0, 0xea, 0x0e, 0x2a, 0x85, 0xc9, 0x88, 0xf5, 0x52, 0x59, 0x95, 0x9b, 0x8b, 0x48, 0xd1, - 0x39, 0x92, 0x4a, 0x09, 0xaa, 0x89, 0x0a, 0xbd, 0x30, 0x11, 0x4a, 0xaf, 0x6e, 0xbe, 0xbb, 0x88, - 0x24, 0x23, 0x4c, 0x18, 0xe5, 0x68, 0x90, 0xb2, 0x17, 0x8f, 0x0f, 0xb8, 0xef, 0x16, 0x94, 0xd2, - 0x88, 0xc7, 0x07, 0x94, 0xa3, 0xc1, 0xae, 0x01, 0x84, 0x64, 0x5c, 0x2b, 0x2e, 0x6e, 0x57, 0x93, - 0x23, 0xa9, 0x94, 0x00, 0x1a, 0x1d, 0xc4, 0x71, 0x9f, 0xd7, 0xee, 0x82, 0x1a, 0xb5, 0xe3, 0xb8, - 0x4f, 0x39, 0x1a, 0x34, 0x8a, 0x0e, 0x0f, 0x1e, 0xb2, 0x71, 0x6d, 0x69, 0x71, 0x8d, 0x6c, 0x8e, - 0xa4, 0x52, 0x02, 0xc8, 0x1a, 0xb1, 0x71, 0x12, 0x47, 0xb5, 0xf2, 0xe2, 0xb2, 0x5c, 0x8e, 0xa4, - 0x52, 0x02, 0x97, 0x35, 0x86, 0x49, 0x5c, 0xab, 0x3c, 0x87, 0x2c, 0x8e, 0xa4, 0x52, 0x82, 0xfa, - 0x00, 0x55, 0xc7, 0xac, 0x37, 0x1c, 0x8d, 0xe3, 0xde, 0x30, 0x3d, 0xaa, 0x21, 0x2e, 0xf0, 0xfd, - 0x45, 0x04, 0xd2, 0x29, 0x9c, 0xce, 0xca, 0x52, 0x9b, 0xa8, 0x98, 0xb2, 0x28, 0x61, 0xb5, 0x2a, - 0x17, 0x7a, 0x6d, 0xa1, 0x6c, 0x07, 0x20, 0x15, 0x78, 0x10, 0xf4, 0x28, 0x1e, 0xf6, 0x58, 0x6d, - 0x79, 0x71, 0x41, 0x1d, 0x00, 0x52, 0x81, 0xd7, 0xbe, 0x52, 0x50, 0xde, 0x0f, 0x07, 0xf3, 0x2d, - 0x75, 0x09, 0xe5, 0x75, 0x73, 0x07, 0x2b, 0x62, 0xe1, 0xe2, 0x9c, 0x58, 0x74, 0x70, 0x1e, 0x66, - 0xb8, 0xe1, 0xd8, 0x3b, 0xb8, 0x00, 0x24, 0x93, 0x40, 0xe3, 0x2c, 0xa3, 0x82, 0xed, 0x04, 0x36, - 0x2e, 0x01, 0xc9, 0x0e, 0xda, 0x78, 0x09, 0x48, 0x2e, 0x75, 0x6c, 0x5c, 0x06, 0x92, 0x4b, 0x7d, - 0x5c, 0x81, 0x5e, 0xea, 0x06, 0xb6, 0xe1, 0x63, 0x04, 0x4f, 0x3b, 0x84, 0x6e, 0xe1, 0xaa, 0x5a, - 0x44, 0xca, 0x2e, 0x5e, 0x86, 0x67, 0x7a, 0xa3, 0x61, 0xed, 0xe2, 0x15, 0xcd, 0x41, 0x25, 0x51, - 0x90, 0xaa, 0x8a, 0x56, 0x75, 0xb8, 0x4d, 0xf8, 0xdd, 0xa9, 0x62, 0x70, 0xa3, 0x20, 0xb4, 0x41, - 0x0c, 0xdf, 0xea, 0x10, 0xac, 0x40, 0x87, 0xb7, 0xda, 0x33, 0x94, 0x1c, 0xb4, 0x75, 0x97, 0x3a, - 0x4d, 0x4a, 0x3c, 0x0f, 0x08, 0x79, 0xed, 0xdf, 0x0a, 0x2a, 0x40, 0x61, 0x02, 0xaf, 0xa1, 0x7b, - 0x64, 0x5e, 0x9a, 0x6e, 0x18, 0x81, 0xa7, 0x4b, 0x69, 0x2b, 0xa8, 0xa2, 0x9b, 0xa0, 0x99, 0xa5, - 0xb7, 0x70, 0x4e, 0x0c, 0x84, 0xb6, 0xdb, 0x22, 0x6d, 0x62, 0x73, 0x8e, 0x3c, 0xcc, 0x1a, 0x53, - 0x70, 0x17, 0x60, 0xd6, 0x34, 0x89, 0x6d, 0xf1, 0x5d, 0x91, 0x6b, 0x62, 0x7b, 0x3e, 0x0d, 0x80, - 0x59, 0x6f, 0xe1, 0xd2, 0x74, 0x16, 0x75, 0x08, 0x5e, 0x82, 0xb3, 0x6c, 0xa7, 0x6d, 0xd9, 0x62, - 0x5f, 0x06, 0x7f, 0x3b, 0x5b, 0x2d, 0xeb, 0x93, 0x80, 0xe0, 0x0a, 0x1c, 0xec, 0xea, 0xd4, 0x17, - 0xb2, 0x10, 0x1c, 0xec, 0x52, 0xe2, 0x3a, 0x9e, 0x05, 0x63, 0x4b, 0x6f, 0xe1, 0x2a, 0x38, 0x83, - 0x92, 0x46, 0x8b, 0xec, 0x5a, 0x1d, 0xd2, 0x05, 0x33, 0xf0, 0x32, 0xb0, 0x51, 0xd2, 0xe2, 0x02, - 0x05, 0x69, 0x05, 0xce, 0xec, 0x64, 0x67, 0xae, 0x6a, 0xdf, 0x28, 0xa8, 0x00, 0xdd, 0x04, 0x94, - 0x6b, 0x38, 0xb4, 0x3d, 0x63, 0xfa, 0x32, 0x2a, 0xeb, 0x26, 0x28, 0xa4, 0xb7, 0xa4, 0xe1, 0xc1, - 0xae, 0xd5, 0xb2, 0x74, 0xfa, 0x00, 0xe7, 0xe0, 0xb0, 0x19, 0xc3, 0x3f, 0x25, 0x14, 0xe7, 0xb9, - 0x08, 0xcb, 0xd6, 0x5b, 0x5d, 0x62, 0x9b, 0x96, 0xdd, 0xc4, 0x05, 0xf0, 0x45, 0x93, 0xd0, 0xc0, - 0x36, 0x71, 0x11, 0xd6, 0x94, 0xe8, 0x2d, 0xcb, 0x13, 0x76, 0x5b, 0x54, 0xee, 0x96, 0x20, 0xb4, - 0xde, 0xb6, 0x43, 0x7d, 0x5c, 0x86, 0xb0, 0xb7, 0x1c, 0xbb, 0x29, 0x72, 0xc1, 0xa1, 0x26, 0xa1, - 0x18, 0x01, 0xb7, 0xbc, 0x32, 0x1a, 0xb8, 0xaa, 0x11, 0x54, 0x12, 0x6d, 0x0b, 0x74, 0x68, 0x12, - 0xdb, 0x24, 0x74, 0x5e, 0xe9, 0x06, 0x69, 0x5b, 0xb6, 0x65, 0xcb, 0x68, 0xb5, 0x75, 0xcf, 0x08, - 0x5a, 0xb0, 0xcd, 0x81, 0x0a, 0x36, 0x09, 0x7c, 0x50, 0x56, 0xfb, 0x02, 0x15, 0xa0, 0x67, 0x81, - 0xd2, 0x6d, 0xc7, 0x31, 0x67, 0x44, 0x9c, 0x47, 0xd8, 0x70, 0x6c, 0x53, 0x3a, 0xb6, 0x0b, 0x4f, - 0xb1, 0x02, 0xc1, 0xe1, 0x69, 0xa4, 0xcb, 0x24, 0x82, 0xbd, 0x6d, 0x5a, 0xd2, 0x91, 0x79, 0xf0, - 0xb4, 0x65, 0xfb, 0x84, 0x52, 0xa7, 0x99, 0x45, 0xbf, 0x8a, 0x96, 0x76, 0x02, 0x91, 0x63, 0x45, - 0x48, 0x3a, 0x2f, 0xd8, 0xda, 0x81, 0xf4, 0x06, 0x42, 0x49, 0xfb, 0x18, 0x95, 0x44, 0xb3, 0x03, - 0x3b, 0xec, 0xa0, 0xbd, 0x75, 0xdc, 0x0e, 0xcf, 0xb2, 0x9b, 0x41, 0x4b, 0xa7, 0x58, 0xe1, 0xf7, - 0x97, 0x56, 0x40, 0x79, 0xca, 0x95, 0x51, 0xc1, 0x0c, 0xf4, 0x16, 0xce, 0x6b, 0x3e, 0x2a, 0x89, - 0x16, 0x07, 0x12, 0xc4, 0xfd, 0x66, 0x46, 0x42, 0x05, 0x15, 0x1b, 0x16, 0xf5, 0x7c, 0x01, 0xf7, - 0x08, 0xd8, 0x84, 0x73, 0x40, 0xf6, 0xb7, 0x2d, 0x6a, 0xe2, 0x3c, 0x18, 0x3a, 0x4d, 0x18, 0x79, - 0x3f, 0x2a, 0x68, 0xb7, 0x50, 0x49, 0x34, 0x3b, 0x2e, 0x95, 0x3a, 0xee, 0x9c, 0x5e, 0xa0, 0x09, - 0xa7, 0x09, 0x97, 0xd8, 0x8e, 0xdf, 0x95, 0xfb, 0x9c, 0xb6, 0x83, 0xaa, 0x33, 0x5d, 0x4d, 0xbd, - 0x80, 0x5e, 0xa0, 0xc4, 0xb0, 0x5c, 0xea, 0x18, 0x96, 0xff, 0x60, 0xbe, 0xa6, 0xb2, 0x07, 0x3c, - 0xb5, 0xc0, 0x7e, 0xc7, 0xee, 0xce, 0xd0, 0x72, 0x5a, 0x82, 0x8a, 0xbc, 0x99, 0x81, 0x5f, 0x7d, - 0x62, 0xcf, 0xd5, 0xe4, 0x8b, 0xe8, 0xdc, 0x6c, 0x80, 0xf8, 0x63, 0x61, 0x65, 0x23, 0xf0, 0x03, - 0x4a, 0x84, 0x93, 0x5c, 0xdd, 0xf3, 0x71, 0x1e, 0x82, 0xe0, 0x52, 0xe2, 0x89, 0x0b, 0xdd, 0x0a, - 0xaa, 0x4c, 0x7a, 0x01, 0x2e, 0x8a, 0x97, 0x8f, 0x20, 0xdb, 0x97, 0xb4, 0x2d, 0x54, 0xe4, 0x8d, - 0x0f, 0x0e, 0xed, 0x38, 0x96, 0x41, 0xe6, 0x0d, 0xd7, 0x8d, 0x69, 0x13, 0x30, 0xf4, 0xac, 0x27, - 0xe4, 0xf8, 0x11, 0x7a, 0xd6, 0x4b, 0xfe, 0xb5, 0x84, 0x56, 0xe7, 0x6f, 0x4d, 0xea, 0x3a, 0xc2, - 0x9f, 0xb1, 0xb0, 0xdf, 0x4d, 0xe1, 0x6e, 0xd8, 0x1d, 0x46, 0x7d, 0xf6, 0x98, 0x5f, 0x65, 0x8a, - 0x74, 0x15, 0xe8, 0xfc, 0xca, 0x68, 0x01, 0x55, 0xb5, 0x50, 0x71, 0x3f, 0x7c, 0xc8, 0xf6, 0xe5, - 0x1d, 0xe5, 0xfa, 0x42, 0xb7, 0xb3, 0x7a, 0x0b, 0xa0, 0x54, 0x48, 0xd0, 0xfe, 0x51, 0x42, 0x45, - 0x4e, 0x78, 0xe2, 0x26, 0xac, 0x6f, 0x6d, 0x51, 0xd2, 0xc1, 0x0a, 0x6f, 0xa9, 0x50, 0xc4, 0x22, - 0x2b, 0x74, 0xb3, 0x63, 0xb4, 0x44, 0xff, 0xd2, 0xcd, 0x4e, 0xdb, 0x31, 0x71, 0x01, 0xdc, 0xa8, - 0xc3, 0xaa, 0xc8, 0x19, 0x5c, 0xd7, 0x81, 0xe2, 0x05, 0xa2, 0xef, 0x53, 0xbc, 0xc4, 0x3b, 0x7e, - 0xb0, 0x2b, 0x3a, 0x95, 0x1e, 0xec, 0x82, 0x13, 0x70, 0x45, 0x2d, 0xa1, 0x9c, 0x61, 0x60, 0x04, - 0x10, 0x83, 0x8b, 0xaf, 0x4e, 0x26, 0x02, 0x6f, 0xe3, 0x06, 0xd4, 0x01, 0x5e, 0xe1, 0x5e, 0x84, - 0x25, 0x87, 0xad, 0x8a, 0x59, 0xe1, 0xe2, 0xb3, 0xd9, 0xd0, 0xc0, 0xc0, 0x60, 0x5a, 0x9e, 0xe1, - 0x04, 0xd4, 0x23, 0xf8, 0x1c, 0x4f, 0x7c, 0x67, 0x6b, 0x07, 0xab, 0xb0, 0x22, 0xbb, 0x6e, 0x0b, - 0xbf, 0xc0, 0x1b, 0xac, 0x43, 0xbc, 0xfb, 0x96, 0xbf, 0x8d, 0xcf, 0x03, 0xdd, 0x02, 0x8e, 0x17, - 0x61, 0xd5, 0xd6, 0xe9, 0x3d, 0xfc, 0x12, 0x48, 0x6b, 0xdf, 0x27, 0xf8, 0x82, 0x58, 0x74, 0x70, - 0x8d, 0x4f, 0x20, 0xd2, 0xc4, 0xff, 0x07, 0x8a, 0xda, 0x36, 0x5e, 0x03, 0x21, 0xb6, 0x2b, 0x6d, - 0xfe, 0x7f, 0xd0, 0xd0, 0xe6, 0x1a, 0xbe, 0x0c, 0x0a, 0xd8, 0x13, 0x0d, 0x5f, 0xc9, 0x46, 0xd7, - 0xab, 0xbc, 0x8f, 0xf0, 0x82, 0xc5, 0xaf, 0xc1, 0x78, 0x72, 0xf1, 0x45, 0xd9, 0x9e, 0x75, 0x5f, - 0xdf, 0xb5, 0x3c, 0xfc, 0xba, 0x48, 0x09, 0xea, 0x83, 0x44, 0x8d, 0x8f, 0x35, 0xee, 0x88, 0x37, - 0x78, 0x5e, 0x82, 0x86, 0x6f, 0x8a, 0x95, 0xe7, 0xe1, 0x4b, 0x9c, 0xd7, 0xf1, 0x7c, 0xd0, 0xe9, - 0x27, 0x32, 0x5d, 0x39, 0xf7, 0xe5, 0xc9, 0xc6, 0xde, 0xc1, 0xeb, 0xa2, 0xf2, 0x08, 0x78, 0xe6, - 0x2d, 0x31, 0x3b, 0x49, 0x03, 0x5f, 0x91, 0x2b, 0x17, 0x5f, 0xe5, 0xa7, 0x50, 0xc7, 0x6e, 0xe1, - 0xb7, 0xb3, 0x81, 0xfa, 0x0e, 0x58, 0xe8, 0x7a, 0xb8, 0x0e, 0x16, 0x7e, 0x12, 0xe8, 0x36, 0xd7, - 0x67, 0x03, 0x38, 0xa9, 0x01, 0xcb, 0x77, 0xe1, 0x01, 0x5f, 0x52, 0xd2, 0xc2, 0xd7, 0xf8, 0x03, - 0x93, 0x3a, 0x2e, 0xde, 0x04, 0x11, 0x70, 0xc0, 0x75, 0xd0, 0x81, 0x92, 0xb6, 0xad, 0xdb, 0x3e, - 0xbe, 0x21, 0x2a, 0x17, 0xec, 0xb4, 0xcd, 0xa0, 0x8d, 0xdf, 0x83, 0xd3, 0xa9, 0xe3, 0xf8, 0xf8, - 0x26, 0xac, 0x3c, 0x70, 0xce, 0xfb, 0x7c, 0x15, 0x34, 0x1a, 0xf8, 0x16, 0xac, 0xf8, 0x89, 0x3f, - 0xe5, 0x4d, 0xc7, 0x71, 0x2d, 0x03, 0xdf, 0xe6, 0x83, 0x1d, 0x88, 0x77, 0xe6, 0x06, 0xd1, 0x5d, - 0x60, 0xd9, 0xe5, 0x66, 0x7f, 0xc0, 0xdb, 0x55, 0xc0, 0x67, 0xfd, 0x87, 0x1c, 0x69, 0xf9, 0x2d, - 0x82, 0x3f, 0x12, 0xf3, 0xa8, 0xe3, 0x6e, 0x03, 0xfa, 0x63, 0x99, 0x72, 0x50, 0x86, 0x58, 0xe7, - 0xd9, 0x19, 0xec, 0x76, 0x3a, 0x78, 0x0b, 0x96, 0x26, 0x3f, 0xd5, 0x00, 0x96, 0x86, 0x43, 0x89, - 0xd5, 0xb4, 0xb1, 0x09, 0xae, 0xb8, 0x77, 0x1f, 0x13, 0x3e, 0x61, 0x2c, 0xcf, 0xc7, 0x0d, 0x71, - 0x27, 0x69, 0x1b, 0xb8, 0xc9, 0x13, 0xc0, 0x69, 0x8b, 0xbc, 0xdc, 0x86, 0x89, 0x90, 0xed, 0x78, - 0xe0, 0x2d, 0xce, 0x19, 0xb4, 0x0d, 0xbc, 0x03, 0x6e, 0x31, 0x1c, 0x17, 0xdf, 0x03, 0x4f, 0x98, - 0x96, 0xc7, 0x87, 0x37, 0x31, 0x71, 0x4b, 0xfb, 0x2a, 0x87, 0x56, 0xe6, 0xde, 0x8b, 0xbf, 0xdf, - 0x3b, 0x20, 0x99, 0xfb, 0x82, 0x70, 0x6d, 0x91, 0x17, 0xf2, 0xd9, 0x0f, 0x09, 0x73, 0x6f, 0xe4, - 0xf9, 0xe7, 0xff, 0xde, 0xf1, 0xae, 0x7c, 0xa9, 0xc6, 0x68, 0x59, 0x7e, 0xc3, 0x79, 0xda, 0x3c, - 0x40, 0xa8, 0x64, 0x38, 0xed, 0x36, 0xbc, 0x57, 0x6b, 0x4d, 0x54, 0xce, 0x4c, 0x52, 0x6b, 0xd3, - 0x6f, 0x4c, 0xe2, 0x15, 0x7e, 0xf2, 0x85, 0xe9, 0x75, 0xb4, 0xfc, 0x90, 0x0d, 0x86, 0x51, 0x37, - 0xde, 0xdb, 0x4b, 0x98, 0x78, 0x35, 0x2b, 0xd2, 0x2a, 0xa7, 0x39, 0x9c, 0xa4, 0xfd, 0x4e, 0x41, - 0x17, 0xf4, 0x28, 0xdc, 0x3f, 0xfa, 0x39, 0x9b, 0xaa, 0xc6, 0x7e, 0x76, 0xc8, 0x92, 0x54, 0x35, - 0x50, 0xb9, 0x2f, 0xbf, 0x69, 0x9d, 0xd2, 0xcd, 0xd9, 0x27, 0x30, 0x3a, 0x01, 0xaa, 0x2e, 0x5a, - 0x61, 0x51, 0x2f, 0xee, 0x0f, 0xa3, 0x41, 0x77, 0xc6, 0xe7, 0x57, 0x4f, 0xf4, 0xb9, 0xc0, 0x70, - 0x6f, 0x2f, 0xb3, 0x99, 0x9d, 0xf6, 0x57, 0x05, 0xd5, 0x9e, 0x54, 0x39, 0x19, 0xc5, 0x30, 0xcf, - 0xee, 0x23, 0x35, 0x3b, 0xba, 0x3b, 0x8d, 0x8d, 0xb2, 0x60, 0x6c, 0xce, 0x65, 0x32, 0xa6, 0x2f, - 0xda, 0xb3, 0xdf, 0xe0, 0x72, 0xf3, 0xdf, 0xe0, 0x54, 0x22, 0xf2, 0x80, 0x45, 0x3d, 0x96, 0xc8, - 0x2f, 0x4a, 0x97, 0x4f, 0x71, 0x16, 0xf0, 0xd3, 0x29, 0x52, 0xfb, 0x83, 0x82, 0x5e, 0x91, 0x86, - 0x89, 0x94, 0xfb, 0x5f, 0x89, 0xc8, 0x17, 0xe8, 0xd5, 0xef, 0xd2, 0x5b, 0x86, 0x45, 0x47, 0x65, - 0xa0, 0xa5, 0x43, 0x96, 0xd4, 0x14, 0xee, 0xa0, 0x4b, 0xa7, 0x2a, 0x3a, 0x3a, 0x81, 0x3d, 0x2b, - 0x00, 0x70, 0xcd, 0x7e, 0x69, 0x56, 0x83, 0x21, 0x4b, 0x7e, 0xe4, 0x2e, 0x7b, 0x3c, 0x29, 0xbb, - 0xa9, 0xc2, 0xff, 0x1d, 0x5f, 0xfd, 0x56, 0x41, 0xe7, 0xb3, 0xf2, 0x39, 0x8a, 0xd2, 0xf0, 0xf1, - 0x8f, 0xdc, 0x53, 0x7f, 0x54, 0xd0, 0x8b, 0xc7, 0xf4, 0x95, 0x8e, 0x9a, 0x2b, 0x3b, 0xe5, 0x79, - 0xcb, 0x4e, 0xbd, 0x8b, 0x4a, 0xfc, 0xea, 0x98, 0xd4, 0x72, 0x5c, 0xc6, 0x9b, 0x27, 0xcd, 0x12, - 0x60, 0xa6, 0x12, 0x33, 0xe7, 0xea, 0xfc, 0x31, 0x57, 0xff, 0x2d, 0x8f, 0x5e, 0xd0, 0xc5, 0x2f, - 0x18, 0x0c, 0xda, 0xf5, 0x0f, 0xea, 0xe9, 0xfb, 0xa8, 0xbc, 0xc7, 0xc2, 0xf4, 0x70, 0xcc, 0x12, - 0xf9, 0x05, 0xf3, 0xce, 0x09, 0x42, 0x9e, 0xa2, 0x4a, 0xbd, 0x21, 0x45, 0xd0, 0x89, 0xb0, 0x27, - 0x43, 0x98, 0xff, 0x9e, 0x21, 0x5c, 0xfb, 0x8b, 0x82, 0xca, 0xd9, 0x41, 0xea, 0x25, 0xb4, 0xca, - 0x1e, 0xa7, 0xe3, 0xb0, 0x97, 0x76, 0x13, 0x1e, 0x4f, 0xee, 0x82, 0x32, 0x5d, 0x91, 0x54, 0x11, - 0x64, 0xf5, 0x2d, 0x84, 0x33, 0xb6, 0x49, 0x35, 0xe4, 0x38, 0xe3, 0x59, 0x49, 0xcf, 0x0a, 0x47, - 0xbd, 0x8b, 0xd6, 0x32, 0xd6, 0xa7, 0xf4, 0xfe, 0x3c, 0x07, 0xd5, 0x24, 0x87, 0xf9, 0x44, 0x63, - 0xbf, 0x85, 0x6a, 0x73, 0x07, 0x1d, 0xcd, 0x60, 0x0b, 0x1c, 0xfb, 0xd2, 0xec, 0x81, 0xd3, 0xe6, - 0xa6, 0x7d, 0x9b, 0x83, 0x4a, 0x9a, 0xf5, 0xe9, 0x8f, 0x29, 0x31, 0x67, 0xdb, 0x48, 0xfe, 0xf9, - 0xda, 0xc8, 0xd3, 0x87, 0x69, 0xe1, 0x87, 0x1d, 0xa6, 0xc5, 0xf9, 0xa2, 0xb9, 0x72, 0x0b, 0x2d, - 0xcf, 0xa6, 0x92, 0xb8, 0x47, 0xda, 0x04, 0x9f, 0x81, 0x55, 0xe0, 0x37, 0x6e, 0x89, 0x57, 0xab, - 0xc0, 0x6f, 0x5c, 0xbb, 0x29, 0x5e, 0xad, 0x02, 0xbf, 0x71, 0x7d, 0x13, 0xe7, 0x37, 0x7f, 0xb5, - 0x84, 0xce, 0xb6, 0xa4, 0x18, 0x4f, 0xfc, 0xe2, 0xa8, 0xfe, 0x5e, 0x41, 0xf8, 0xf8, 0x65, 0x41, - 0xbd, 0x79, 0x62, 0xa1, 0x3c, 0xf5, 0x42, 0xb4, 0xf6, 0xfe, 0xc2, 0x38, 0x91, 0x10, 0x5a, 0xfd, - 0xcb, 0x6f, 0xff, 0xfe, 0x75, 0x6e, 0x5d, 0x7b, 0x63, 0xf2, 0xd3, 0x68, 0xe6, 0x93, 0xe4, 0x76, - 0x78, 0x0c, 0x74, 0x5b, 0xb9, 0xa2, 0x7e, 0xa3, 0xa0, 0xb3, 0xc7, 0xc6, 0x83, 0xfa, 0xde, 0xe9, - 0x0e, 0x3f, 0x36, 0xff, 0xd6, 0x6e, 0x2e, 0x0a, 0x93, 0x2a, 0xbf, 0xc3, 0x55, 0xbe, 0xac, 0x69, - 0xdf, 0xad, 0x72, 0x86, 0x01, 0x8d, 0xff, 0x7c, 0x6c, 0x02, 0x4f, 0xcb, 0x44, 0xbd, 0xbb, 0x80, - 0x06, 0x4f, 0x5c, 0x79, 0xd6, 0x3e, 0x78, 0x4e, 0xb4, 0x34, 0xe3, 0x06, 0x37, 0xa3, 0xae, 0xbd, - 0x75, 0x82, 0x19, 0x47, 0x73, 0xfe, 0xff, 0x8d, 0x82, 0x56, 0xe6, 0x66, 0x8e, 0x7a, 0xfd, 0x94, - 0xa1, 0x9f, 0x9d, 0xa8, 0x6b, 0x37, 0x16, 0x03, 0x49, 0x95, 0xaf, 0x72, 0x95, 0x2f, 0x69, 0x17, - 0x9f, 0x91, 0x2c, 0x1c, 0x01, 0x9a, 0xfe, 0x5a, 0x41, 0xcb, 0xb3, 0x3d, 0x48, 0xdd, 0x5c, 0x7c, - 0x08, 0xac, 0x5d, 0x5f, 0x08, 0x23, 0xd5, 0xbc, 0xc2, 0xd5, 0x7c, 0x53, 0x7b, 0xed, 0xa9, 0x6a, - 0x4e, 0x01, 0xb7, 0x95, 0x2b, 0x5b, 0x5f, 0x2a, 0xe8, 0xf5, 0x5e, 0x7c, 0xf0, 0xec, 0x63, 0xb6, - 0xce, 0x1f, 0x2b, 0x5e, 0x77, 0x1c, 0xa7, 0xb1, 0xab, 0x7c, 0x4a, 0x24, 0x6c, 0x10, 0x03, 0xa4, - 0x1e, 0x8f, 0x07, 0x1b, 0x03, 0x16, 0xf1, 0xdf, 0xeb, 0x37, 0xc4, 0xa3, 0x70, 0x34, 0x4c, 0xbe, - 0xe3, 0x4f, 0x08, 0x77, 0x32, 0xc2, 0xc3, 0x12, 0x47, 0x5c, 0xff, 0x4f, 0x00, 0x00, 0x00, 0xff, - 0xff, 0x55, 0xc3, 0xe3, 0x00, 0xb5, 0x20, 0x00, 0x00, + // 3019 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x3a, 0x4b, 0x73, 0xdb, 0xc6, + 0xfd, 0x06, 0x5f, 0xa2, 0x96, 0x92, 0xbc, 0x86, 0x1d, 0x9b, 0x7f, 0xfd, 0xf3, 0x70, 0xe0, 0xb8, + 0x56, 0xec, 0x44, 0x8a, 0x25, 0xc7, 0x71, 0x6d, 0xe7, 0x01, 0x01, 0x4b, 0x0a, 0x32, 0x09, 0xc0, + 0x0b, 0x80, 0x92, 0x7d, 0xe1, 0xc0, 0x24, 0xc4, 0x70, 0x22, 0x02, 0x2c, 0x01, 0x79, 0xac, 0x5e, + 0x32, 0xcd, 0x4c, 0x8f, 0x99, 0x1e, 0xf2, 0x11, 0x7a, 0xe8, 0xb4, 0x33, 0x9d, 0xb4, 0xd3, 0x99, + 0x4e, 0x7b, 0xe8, 0x27, 0xe8, 0xb1, 0x33, 0xfd, 0x04, 0xfd, 0x00, 0x3d, 0xb6, 0xb7, 0xce, 0x6f, + 0x77, 0x41, 0x82, 0xb2, 0x62, 0x89, 0x8e, 0xa7, 0x93, 0xde, 0x76, 0x7f, 0xf8, 0xbd, 0x9f, 0xbb, + 0x4b, 0xa2, 0x5b, 0xbd, 0x28, 0xea, 0xed, 0x07, 0x6b, 0x9d, 0xfd, 0xe8, 0xa0, 0xbb, 0xb6, 0xef, + 0x87, 0xbd, 0x03, 0xbf, 0x17, 0xac, 0x3d, 0xbd, 0xf9, 0x24, 0x48, 0xfc, 0xf5, 0x31, 0xa0, 0x1d, + 0x07, 0xa3, 0xa7, 0xfd, 0x4e, 0xb0, 0x3a, 0x1c, 0x45, 0x49, 0x24, 0xbf, 0xc1, 0xa9, 0x56, 0x19, + 0xd5, 0x6a, 0x8a, 0xb4, 0x2a, 0xa8, 0x96, 0x5f, 0x17, 0x4c, 0xfd, 0x61, 0x7f, 0xcd, 0x0f, 0xc3, + 0x28, 0xf1, 0x93, 0x7e, 0x14, 0xc6, 0x9c, 0x78, 0xf9, 0x8a, 0xf8, 0xba, 0x1f, 0x85, 0xbd, 0xd1, + 0x41, 0x18, 0xf6, 0xc3, 0xde, 0x5a, 0x34, 0x0c, 0x46, 0x53, 0x48, 0x6f, 0x09, 0x24, 0xb6, 0x7b, + 0x72, 0xb0, 0xb7, 0x96, 0xf4, 0x07, 0x41, 0x9c, 0xf8, 0x83, 0xa1, 0x40, 0xb8, 0x24, 0x10, 0x46, + 0xc3, 0xce, 0x5a, 0x9c, 0xf8, 0xc9, 0x81, 0xa0, 0x54, 0xfe, 0x29, 0xa1, 0xb2, 0x1e, 0x75, 0x0e, + 0x06, 0x41, 0x98, 0xc8, 0x9f, 0xa1, 0x42, 0x72, 0x38, 0x0c, 0xaa, 0xd2, 0x65, 0x69, 0x65, 0x69, + 0xfd, 0xbd, 0xd5, 0x17, 0xea, 0xbd, 0x9a, 0x92, 0xad, 0xba, 0x87, 0xc3, 0x80, 0x32, 0x4a, 0x79, + 0x19, 0xcd, 0x75, 0xa2, 0x30, 0x09, 0xc2, 0xa4, 0x9a, 0xbb, 0x2c, 0xad, 0xcc, 0x6f, 0x9d, 0xa1, + 0x29, 0x40, 0x5e, 0x41, 0x67, 0x7b, 0x9d, 0xb8, 0x2d, 0xb6, 0xed, 0x83, 0x51, 0xbf, 0x9a, 0x17, + 0x38, 0x8b, 0xbd, 0x4e, 0xac, 0x71, 0xb8, 0x37, 0xea, 0xcb, 0xcb, 0xa8, 0x9c, 0x4a, 0xab, 0x16, + 0x00, 0x85, 0x8e, 0xf7, 0xca, 0x6d, 0x54, 0x00, 0x79, 0xf2, 0x05, 0x84, 0xdd, 0x47, 0x36, 0x69, + 0x7b, 0xa6, 0x63, 0x13, 0xcd, 0xa8, 0x19, 0x44, 0xc7, 0x67, 0xe4, 0x25, 0x84, 0xec, 0x86, 0x6a, + 0x98, 0x6d, 0x97, 0xec, 0xba, 0x58, 0x92, 0xcb, 0xa8, 0xb0, 0xe5, 0x36, 0x1b, 0x38, 0xb7, 0x59, + 0x46, 0xa5, 0x38, 0x3a, 0x18, 0x75, 0x02, 0xe5, 0x17, 0x12, 0x2a, 0x3b, 0x01, 0x08, 0xeb, 0x04, + 0xf2, 0x3d, 0x54, 0x48, 0x82, 0x67, 0x09, 0x33, 0xb9, 0xb2, 0x7e, 0xed, 0x04, 0x93, 0xdd, 0xe0, + 0x59, 0xe2, 0x0c, 0xfd, 0x90, 0x32, 0x22, 0xb9, 0x86, 0xe6, 0xe3, 0x20, 0x04, 0x5f, 0x0b, 0x7b, + 0x2b, 0xeb, 0x2b, 0x27, 0x70, 0x70, 0x52, 0x7c, 0x3a, 0x21, 0x55, 0xbe, 0x29, 0xa0, 0x12, 0x09, + 0x93, 0x7e, 0x72, 0x28, 0xcb, 0xa8, 0x10, 0xfa, 0x03, 0x1e, 0x82, 0x79, 0xca, 0xd6, 0xf2, 0x27, + 0x22, 0x2c, 0x39, 0x16, 0x96, 0xeb, 0x27, 0x48, 0xe0, 0x8c, 0xb2, 0x41, 0xb1, 0x50, 0x79, 0x10, + 0x24, 0x7e, 0xd7, 0x4f, 0xfc, 0x6a, 0xfe, 0x72, 0x7e, 0xa5, 0xb2, 0xbe, 0x71, 0x3a, 0x1e, 0x4d, + 0x41, 0x45, 0xc2, 0x64, 0x74, 0x48, 0xc7, 0x4c, 0x20, 0x3e, 0xb1, 0xbf, 0xdf, 0x07, 0x07, 0xb2, + 0xf8, 0xe4, 0xe8, 0x78, 0x2f, 0x6f, 0x81, 0xb0, 0x90, 0x25, 0x67, 0xb5, 0xc8, 0x84, 0xbd, 0x77, + 0x2a, 0x61, 0x4d, 0x4e, 0x44, 0xc7, 0xd4, 0xd3, 0xde, 0x2d, 0xbd, 0xb4, 0x77, 0x97, 0xef, 0xa1, + 0xc5, 0x29, 0x43, 0x64, 0x8c, 0xf2, 0x5f, 0x04, 0x87, 0xc2, 0xc5, 0xb0, 0x94, 0x2f, 0xa0, 0xe2, + 0x53, 0x7f, 0xff, 0x80, 0xbb, 0x78, 0x9e, 0xf2, 0xcd, 0xdd, 0xdc, 0x1d, 0x49, 0x39, 0x14, 0xe9, + 0x56, 0x41, 0x73, 0x9e, 0xf9, 0xc0, 0xb4, 0x76, 0x4c, 0x7c, 0x46, 0x46, 0xa8, 0x64, 0x13, 0xea, + 0x58, 0x26, 0x96, 0xe4, 0x05, 0x54, 0x6e, 0x58, 0x9a, 0xea, 0x1a, 0x96, 0x89, 0x73, 0x32, 0x46, + 0x0b, 0x16, 0xad, 0xab, 0xa6, 0xf1, 0x98, 0x43, 0xf2, 0xf2, 0x3c, 0x2a, 0x92, 0x16, 0x31, 0x5d, + 0x5c, 0x90, 0xcf, 0xa2, 0xca, 0x8e, 0x45, 0x1f, 0xb4, 0xad, 0x5a, 0x5b, 0xa5, 0x2e, 0x2e, 0xca, + 0xe7, 0xd0, 0xa2, 0x66, 0x99, 0x8e, 0xd7, 0x24, 0xb4, 0x5d, 0xb7, 0x2c, 0x1d, 0x97, 0x00, 0xdd, + 0x72, 0xb7, 0x08, 0xc5, 0x73, 0xca, 0xcf, 0x73, 0xa8, 0xe8, 0x46, 0x5f, 0x04, 0xe1, 0xf7, 0x4b, + 0xd2, 0x87, 0x68, 0x69, 0xe8, 0x8f, 0x92, 0x76, 0xb4, 0xd7, 0x8e, 0x87, 0x41, 0xd0, 0xf9, 0x5c, + 0x64, 0xea, 0x8d, 0x13, 0xd8, 0xd8, 0xfe, 0x28, 0xb1, 0xf6, 0x1c, 0x46, 0x42, 0x17, 0x86, 0x99, + 0x9d, 0xdc, 0x42, 0x67, 0xbb, 0xc1, 0x30, 0x08, 0xbb, 0x41, 0xd8, 0x39, 0x6c, 0x07, 0xdd, 0x5e, + 0xc0, 0x2a, 0xb9, 0xb2, 0xfe, 0xfe, 0x49, 0x2d, 0x63, 0x4c, 0x45, 0xba, 0xbd, 0x80, 0x2e, 0x75, + 0xa7, 0xf6, 0x10, 0x86, 0xfd, 0x60, 0x30, 0xf0, 0x45, 0xd1, 0xf3, 0x8d, 0xf2, 0x29, 0x9a, 0x1f, + 0xc7, 0x55, 0x7e, 0x1d, 0xcd, 0x0f, 0xfc, 0x5e, 0xd8, 0x4f, 0x0e, 0xba, 0x3c, 0x5a, 0x39, 0x3a, + 0x01, 0x00, 0x83, 0xb8, 0x13, 0x8d, 0xb8, 0x3a, 0x39, 0xca, 0x37, 0xca, 0x9f, 0xcf, 0xa1, 0x85, + 0xac, 0x35, 0xb2, 0x8a, 0xf2, 0x89, 0xdf, 0x13, 0x6d, 0x6e, 0x6d, 0x06, 0x3f, 0xac, 0xba, 0x7e, + 0x8f, 0x02, 0xad, 0xbc, 0x8d, 0x4a, 0x7e, 0x3c, 0x0c, 0x3a, 0x89, 0xa8, 0xca, 0xf5, 0x59, 0xb8, + 0xa8, 0x8c, 0x92, 0x0a, 0x0e, 0xb2, 0x8e, 0x0a, 0x1d, 0x3f, 0xe6, 0x4a, 0x2f, 0xad, 0x7f, 0x30, + 0x0b, 0x27, 0xcd, 0x8f, 0x03, 0xca, 0xa8, 0x81, 0xcb, 0x5e, 0x34, 0x1a, 0x30, 0xdf, 0xcd, 0xc8, + 0xa5, 0x16, 0x8d, 0x06, 0x94, 0x51, 0x83, 0x5d, 0x3d, 0x08, 0xc9, 0xa8, 0x5a, 0x9c, 0xdd, 0xae, + 0x3a, 0xa3, 0xa4, 0x82, 0x03, 0x68, 0x34, 0x88, 0xa2, 0x2e, 0xab, 0xdd, 0x19, 0x35, 0x6a, 0x46, + 0x51, 0x97, 0x32, 0x6a, 0xd0, 0x28, 0x3c, 0x18, 0x3c, 0x09, 0x46, 0xd5, 0xb9, 0xd9, 0x35, 0x32, + 0x19, 0x25, 0x15, 0x1c, 0x80, 0xd7, 0x30, 0x18, 0xc5, 0x51, 0x58, 0x2d, 0xcf, 0xce, 0xcb, 0x66, + 0x94, 0x54, 0x70, 0x60, 0xbc, 0x46, 0x30, 0x89, 0xab, 0xf3, 0x2f, 0xc1, 0x8b, 0x51, 0x52, 0xc1, + 0x41, 0x7e, 0x84, 0x2a, 0xa3, 0xa0, 0xd3, 0x1f, 0x8e, 0xa2, 0x4e, 0x3f, 0x39, 0xac, 0x22, 0xc6, + 0xf0, 0xa3, 0x59, 0x18, 0xd2, 0x09, 0x39, 0xcd, 0xf2, 0x92, 0xeb, 0xa8, 0x98, 0x04, 0x61, 0x1c, + 0x54, 0x2b, 0x8c, 0xe9, 0xcd, 0x99, 0xb2, 0x1d, 0x08, 0x29, 0xa7, 0x07, 0x46, 0x4f, 0xa3, 0x7e, + 0x27, 0xa8, 0x2e, 0xcc, 0xce, 0xa8, 0x05, 0x84, 0x94, 0xd3, 0x2b, 0x5f, 0x4b, 0x28, 0xef, 0xfa, + 0xbd, 0xe9, 0x96, 0x3a, 0x87, 0xf2, 0xaa, 0xbe, 0x8d, 0x25, 0xbe, 0xb0, 0x71, 0x8e, 0x2f, 0x5a, + 0x38, 0x0f, 0x33, 0x5c, 0xb3, 0xcc, 0x6d, 0x5c, 0x00, 0x90, 0x4e, 0xa0, 0x71, 0x96, 0x51, 0xc1, + 0xb4, 0x3c, 0x13, 0x97, 0x00, 0x64, 0x7a, 0x4d, 0x3c, 0x07, 0x20, 0x9b, 0x5a, 0x26, 0x2e, 0x03, + 0xc8, 0xa6, 0x2e, 0x9e, 0x87, 0x5e, 0x6a, 0x7b, 0xa6, 0xe6, 0x62, 0x04, 0x5f, 0x5b, 0x84, 0x6e, + 0xe2, 0x8a, 0x5c, 0x44, 0xd2, 0x2e, 0x5e, 0x80, 0x6f, 0x6a, 0xad, 0x66, 0xec, 0xe2, 0x45, 0xc5, + 0x42, 0x25, 0x5e, 0x90, 0xb2, 0x8c, 0x96, 0x54, 0x38, 0x4d, 0xb8, 0xed, 0x89, 0x62, 0x70, 0xa2, + 0x20, 0xb4, 0x46, 0x34, 0xd7, 0x68, 0x11, 0x2c, 0x41, 0x87, 0x37, 0x9a, 0x19, 0x48, 0x0e, 0xda, + 0xba, 0x4d, 0xad, 0x3a, 0x25, 0x8e, 0x03, 0x80, 0xbc, 0xf2, 0x2f, 0x09, 0x15, 0xa0, 0x30, 0x01, + 0x57, 0x53, 0x1d, 0x32, 0xcd, 0x4d, 0xd5, 0x34, 0xcf, 0x51, 0x05, 0xb7, 0x45, 0x34, 0xaf, 0xea, + 0xa0, 0x99, 0xa1, 0x36, 0x70, 0x8e, 0x0f, 0x84, 0xa6, 0xdd, 0x20, 0x4d, 0x62, 0x32, 0x8c, 0x3c, + 0xcc, 0x1a, 0x9d, 0x63, 0x17, 0x60, 0xd6, 0xd4, 0x89, 0x69, 0xb0, 0x5d, 0x91, 0x69, 0x62, 0x3a, + 0x2e, 0xf5, 0x00, 0x59, 0x6d, 0xe0, 0xd2, 0x64, 0x16, 0xb5, 0x08, 0x9e, 0x03, 0x59, 0xa6, 0xd5, + 0x34, 0x4c, 0xbe, 0x2f, 0x83, 0xbf, 0xad, 0xcd, 0x86, 0xf1, 0xd0, 0x23, 0x78, 0x1e, 0x04, 0xdb, + 0x2a, 0x75, 0x39, 0x2f, 0x04, 0x82, 0x6d, 0x4a, 0x6c, 0xcb, 0x31, 0x60, 0x6c, 0xa9, 0x0d, 0x5c, + 0x01, 0x67, 0x50, 0x52, 0x6b, 0x90, 0x5d, 0xa3, 0x45, 0xda, 0x60, 0x06, 0x5e, 0x00, 0x34, 0x4a, + 0x1a, 0x8c, 0x21, 0x07, 0x2d, 0x82, 0xcc, 0x56, 0x2a, 0x73, 0x49, 0xf9, 0x56, 0x42, 0x05, 0xe8, + 0x26, 0xa0, 0x5c, 0xcd, 0xa2, 0xcd, 0x8c, 0xe9, 0x0b, 0xa8, 0xac, 0xea, 0xa0, 0x90, 0xda, 0x10, + 0x86, 0x7b, 0xbb, 0x46, 0xc3, 0x50, 0xe9, 0x23, 0x9c, 0x03, 0x61, 0x19, 0xc3, 0x1f, 0x13, 0x8a, + 0xf3, 0x8c, 0x85, 0x61, 0xaa, 0x8d, 0x36, 0x31, 0x75, 0xc3, 0xac, 0xe3, 0x02, 0xf8, 0xa2, 0x4e, + 0xa8, 0x67, 0xea, 0xb8, 0x08, 0x6b, 0x4a, 0xd4, 0x86, 0xe1, 0x70, 0xbb, 0x0d, 0x2a, 0x76, 0x73, + 0x10, 0x5a, 0x67, 0xcb, 0xa2, 0x2e, 0x2e, 0x43, 0xd8, 0x1b, 0x96, 0x59, 0xe7, 0xb9, 0x60, 0x51, + 0x9d, 0x50, 0x8c, 0x00, 0x5b, 0x1c, 0x19, 0x35, 0x5c, 0x51, 0x08, 0x2a, 0xf1, 0xb6, 0x05, 0x3a, + 0xd4, 0x89, 0xa9, 0x13, 0x3a, 0xad, 0x74, 0x8d, 0x34, 0x0d, 0xd3, 0x30, 0x45, 0xb4, 0x9a, 0xaa, + 0xa3, 0x79, 0x0d, 0xd8, 0xe6, 0x40, 0x05, 0x93, 0x78, 0x2e, 0x28, 0xab, 0x7c, 0x89, 0x0a, 0xd0, + 0xb3, 0x40, 0xe9, 0xa6, 0x65, 0xe9, 0x19, 0x16, 0x17, 0x10, 0xd6, 0x2c, 0x53, 0x17, 0x8e, 0x6d, + 0xc3, 0x57, 0x2c, 0x41, 0x70, 0x58, 0x1a, 0xa9, 0x22, 0x89, 0x60, 0x6f, 0xea, 0x86, 0x70, 0x64, + 0x1e, 0x3c, 0x6d, 0x98, 0x2e, 0xa1, 0xd4, 0xaa, 0xa7, 0xd1, 0xaf, 0xa0, 0xb9, 0x6d, 0x8f, 0xe7, + 0x58, 0x11, 0x92, 0xce, 0xf1, 0x36, 0xb7, 0x21, 0xbd, 0x01, 0x50, 0x52, 0x3e, 0x43, 0x25, 0xde, + 0xec, 0xc0, 0x0e, 0xd3, 0x6b, 0x6e, 0x1e, 0xb5, 0xc3, 0x31, 0xcc, 0xba, 0xd7, 0x50, 0x29, 0x96, + 0xd8, 0xf9, 0xa5, 0xe1, 0x51, 0x96, 0x72, 0x65, 0x54, 0xd0, 0x3d, 0xb5, 0x81, 0xf3, 0x8a, 0x8b, + 0x4a, 0xbc, 0xc5, 0x01, 0x07, 0x7e, 0xbe, 0xc9, 0x70, 0x98, 0x47, 0xc5, 0x9a, 0x41, 0x1d, 0x97, + 0x93, 0x3b, 0x04, 0x6c, 0xc2, 0x39, 0x00, 0xbb, 0x5b, 0x06, 0xd5, 0x71, 0x1e, 0x0c, 0x9d, 0x24, + 0x8c, 0x38, 0x1f, 0x15, 0x94, 0x3b, 0xa8, 0xc4, 0x9b, 0x1d, 0xe3, 0x4a, 0x2d, 0x7b, 0x4a, 0x2f, + 0xd0, 0x84, 0xc1, 0xb8, 0x4b, 0x4c, 0xcb, 0x6d, 0x8b, 0x7d, 0x4e, 0xd9, 0x46, 0x95, 0x4c, 0x57, + 0x93, 0x2f, 0xa1, 0xf3, 0x94, 0x68, 0x86, 0x4d, 0x2d, 0xcd, 0x70, 0x1f, 0x4d, 0xd7, 0x54, 0xfa, + 0x81, 0xa5, 0x16, 0xd8, 0x6f, 0x99, 0xed, 0x0c, 0x2c, 0xa7, 0xc4, 0xa8, 0xc8, 0x9a, 0x19, 0xf8, + 0xd5, 0x25, 0xe6, 0x54, 0x4d, 0xbe, 0x86, 0xce, 0x65, 0x03, 0xc4, 0x3e, 0x73, 0x2b, 0x6b, 0x9e, + 0xeb, 0x51, 0xc2, 0x9d, 0x64, 0xab, 0x8e, 0x8b, 0xf3, 0x10, 0x04, 0x9b, 0x12, 0x87, 0x1f, 0xe8, + 0x16, 0xd1, 0xfc, 0xb8, 0x17, 0xe0, 0x22, 0xbf, 0x7c, 0x78, 0xe9, 0xbe, 0xa4, 0x6c, 0xa2, 0x22, + 0x6b, 0x7c, 0x20, 0xb4, 0x65, 0x19, 0x1a, 0x99, 0x36, 0x5c, 0xd5, 0x26, 0x4d, 0x40, 0x53, 0xd3, + 0x9e, 0x90, 0x63, 0x22, 0xd4, 0xb4, 0x97, 0xfc, 0xbe, 0x8c, 0x96, 0xa6, 0x4f, 0x4d, 0xf2, 0x0a, + 0xc2, 0x9f, 0x07, 0x7e, 0xb7, 0x9d, 0xc0, 0xd9, 0xb0, 0xdd, 0x0f, 0xbb, 0xc1, 0x33, 0x76, 0x94, + 0x29, 0xd2, 0x25, 0x80, 0xb3, 0x23, 0xa3, 0x01, 0x50, 0xd9, 0x40, 0xc5, 0x7d, 0xff, 0x49, 0xb0, + 0x2f, 0xce, 0x28, 0x1b, 0x33, 0x9d, 0xce, 0x56, 0x1b, 0x40, 0x4a, 0x39, 0x07, 0xe5, 0xd7, 0x73, + 0xa8, 0xc8, 0x00, 0xcf, 0x9d, 0x84, 0xd5, 0xcd, 0x4d, 0x4a, 0x5a, 0x58, 0x62, 0x2d, 0x15, 0x8a, + 0x98, 0x67, 0x85, 0xaa, 0xb7, 0xb4, 0x06, 0xef, 0x5f, 0xaa, 0xde, 0x6a, 0x5a, 0x3a, 0x2e, 0x80, + 0x1b, 0x55, 0x58, 0x15, 0x19, 0x82, 0x6d, 0x5b, 0x50, 0xbc, 0x00, 0x74, 0x5d, 0x8a, 0xe7, 0x58, + 0xc7, 0xf7, 0x76, 0x79, 0xa7, 0x52, 0xbd, 0x5d, 0x70, 0x02, 0x9e, 0x97, 0x4b, 0x28, 0xa7, 0x69, + 0x18, 0x01, 0x89, 0xc6, 0xd8, 0x57, 0xc6, 0x13, 0x81, 0xb5, 0x71, 0x0d, 0xea, 0x00, 0x2f, 0x32, + 0x2f, 0xc2, 0x92, 0x91, 0x2d, 0xf1, 0x59, 0x61, 0xe3, 0xb3, 0xe9, 0xd0, 0xc0, 0x80, 0xa0, 0x1b, + 0x8e, 0x66, 0x79, 0xd4, 0x21, 0xf8, 0x1c, 0x4b, 0x7c, 0x6b, 0x73, 0x1b, 0xcb, 0xb0, 0x22, 0xbb, + 0x76, 0x03, 0x9f, 0x67, 0x0d, 0xd6, 0x22, 0xce, 0x8e, 0xe1, 0x6e, 0xe1, 0x0b, 0x00, 0x37, 0x00, + 0xe3, 0x35, 0x58, 0x35, 0x55, 0xfa, 0x00, 0x5f, 0x04, 0x6e, 0xcd, 0x1d, 0x82, 0x2f, 0xf1, 0x45, + 0x0b, 0x57, 0xd9, 0x04, 0x22, 0x75, 0xfc, 0x7f, 0xa0, 0xa8, 0x69, 0xe2, 0x65, 0x60, 0x62, 0xda, + 0xc2, 0xe6, 0xff, 0x07, 0x0d, 0x4d, 0xa6, 0xe1, 0xeb, 0xa0, 0x80, 0x39, 0xd6, 0xf0, 0x8d, 0x74, + 0x74, 0xbd, 0xc9, 0xfa, 0x08, 0x2b, 0x58, 0xfc, 0x16, 0x8c, 0x27, 0x1b, 0x5f, 0x16, 0xed, 0x59, + 0x75, 0xd5, 0x5d, 0xc3, 0xc1, 0x6f, 0xf3, 0x94, 0xa0, 0x2e, 0x70, 0x54, 0xd8, 0x58, 0x63, 0x8e, + 0xb8, 0xc2, 0xf2, 0x12, 0x34, 0x7c, 0x87, 0xaf, 0x1c, 0x07, 0x5f, 0x65, 0xb8, 0x96, 0xe3, 0x82, + 0x4e, 0x3f, 0x12, 0xe9, 0xca, 0xb0, 0xaf, 0x8d, 0x37, 0xe6, 0x36, 0x5e, 0xe1, 0x95, 0x47, 0xc0, + 0x33, 0xef, 0xf2, 0xd9, 0x49, 0x6a, 0xf8, 0xba, 0x58, 0xd9, 0xf8, 0x06, 0x93, 0x42, 0x2d, 0xb3, + 0x81, 0xdf, 0x4b, 0x07, 0xea, 0xfb, 0x60, 0xa1, 0xed, 0xe0, 0x55, 0xb0, 0xf0, 0xa1, 0xa7, 0x9a, + 0x4c, 0x9f, 0x35, 0xc0, 0xa4, 0x1a, 0x2c, 0x3f, 0x80, 0x0f, 0x6c, 0x49, 0x49, 0x03, 0xdf, 0x64, + 0x1f, 0x74, 0x6a, 0xd9, 0x78, 0x1d, 0x58, 0x80, 0x80, 0x0d, 0xd0, 0x81, 0x92, 0xa6, 0xa9, 0x9a, + 0x2e, 0xbe, 0xc5, 0x2b, 0x17, 0xec, 0x34, 0x75, 0xaf, 0x89, 0x3f, 0x04, 0xe9, 0xd4, 0xb2, 0x5c, + 0x7c, 0x1b, 0x56, 0x0e, 0x38, 0xe7, 0x23, 0xb6, 0xf2, 0x6a, 0x35, 0x7c, 0x07, 0x56, 0x4c, 0xe2, + 0x8f, 0x59, 0xd3, 0xb1, 0x6c, 0x43, 0xc3, 0x77, 0xd9, 0x60, 0x07, 0xe0, 0xbd, 0xa9, 0x41, 0x74, + 0x1f, 0x50, 0x76, 0x99, 0xd9, 0x1f, 0xb3, 0x76, 0xe5, 0xb1, 0x59, 0xff, 0x09, 0xa3, 0x34, 0xdc, + 0x06, 0xc1, 0x9f, 0xf2, 0x79, 0xd4, 0xb2, 0xb7, 0x80, 0xfa, 0x33, 0x91, 0x72, 0x50, 0x86, 0x58, + 0x65, 0xd9, 0xe9, 0xed, 0xb6, 0x5a, 0x78, 0x13, 0x96, 0x3a, 0x93, 0xaa, 0x01, 0x4a, 0xcd, 0xa2, + 0xc4, 0xa8, 0x9b, 0x58, 0x07, 0x57, 0x3c, 0xd8, 0xc1, 0x84, 0x4d, 0x18, 0xc3, 0x71, 0x71, 0x8d, + 0x9f, 0x49, 0x9a, 0x1a, 0xae, 0xb3, 0x04, 0xb0, 0x9a, 0x3c, 0x2f, 0xb7, 0x60, 0x22, 0xa4, 0x3b, + 0x16, 0x78, 0x83, 0x61, 0x7a, 0x4d, 0x0d, 0x6f, 0x83, 0x5b, 0x34, 0xcb, 0xc6, 0x0f, 0xc0, 0x13, + 0xba, 0xe1, 0xb0, 0xe1, 0x4d, 0x74, 0xdc, 0x60, 0xa5, 0xe0, 0xd8, 0xb8, 0x09, 0xb8, 0x75, 0x10, + 0x6f, 0xb2, 0x15, 0xc4, 0xda, 0x02, 0x83, 0x0c, 0xb3, 0x06, 0x50, 0x9b, 0xa5, 0x21, 0x71, 0xf0, + 0x43, 0x96, 0x67, 0xcc, 0x60, 0xaa, 0x7c, 0x9d, 0x43, 0x8b, 0x53, 0x97, 0xea, 0xef, 0x77, 0x81, + 0x24, 0x53, 0xcf, 0x0f, 0x37, 0x67, 0xb9, 0xcd, 0x67, 0x5f, 0x21, 0xa6, 0xae, 0xf3, 0xf9, 0x97, + 0x7f, 0x2c, 0xf9, 0x40, 0xdc, 0xc8, 0x31, 0x5a, 0x10, 0x0f, 0x40, 0xc7, 0x0d, 0x13, 0x84, 0x4a, + 0x9a, 0xd5, 0x6c, 0xc2, 0xa5, 0x5c, 0xa9, 0xa3, 0x72, 0x6a, 0x92, 0x5c, 0x9d, 0x3c, 0x50, 0xf1, + 0xfb, 0xff, 0xf8, 0x79, 0xea, 0x6d, 0xb4, 0xf0, 0x24, 0xe8, 0xf5, 0xc3, 0x76, 0xb4, 0xb7, 0x17, + 0x07, 0xfc, 0x5e, 0x57, 0xa4, 0x15, 0x06, 0xb3, 0x18, 0x48, 0x69, 0xa0, 0x8b, 0xda, 0xbe, 0x1f, + 0xc7, 0xfd, 0xbd, 0x7e, 0x87, 0xbd, 0xbf, 0x69, 0x7e, 0x12, 0xf4, 0xa2, 0xd1, 0xf1, 0xcf, 0x36, + 0x6f, 0x22, 0xd4, 0x89, 0xc2, 0xbd, 0x7e, 0x97, 0xbd, 0x93, 0xf0, 0xbb, 0x6a, 0x06, 0xa2, 0xfc, + 0x4e, 0x42, 0x97, 0xd4, 0xd0, 0xdf, 0x3f, 0xfc, 0x69, 0x30, 0x31, 0x34, 0xf8, 0xc9, 0x41, 0x10, + 0x27, 0xb2, 0x86, 0xca, 0x5d, 0xf1, 0xbc, 0x76, 0xca, 0xa0, 0xa5, 0xaf, 0x71, 0x74, 0x4c, 0x28, + 0xdb, 0x68, 0x31, 0x08, 0x3b, 0x51, 0xb7, 0x1f, 0xf6, 0xda, 0x99, 0x08, 0xde, 0x38, 0x31, 0x82, + 0x9c, 0x86, 0xc5, 0x6e, 0x21, 0xc8, 0xec, 0x94, 0xbf, 0x4b, 0xa8, 0xfa, 0xbc, 0xca, 0xf1, 0x30, + 0x82, 0xd1, 0xba, 0x83, 0xe4, 0x54, 0x74, 0x7b, 0x12, 0x69, 0x69, 0xc6, 0x48, 0x9f, 0x4b, 0x79, + 0x4c, 0xee, 0xfc, 0xd9, 0xe7, 0xc0, 0xdc, 0xf4, 0x73, 0xa0, 0x4c, 0x78, 0x56, 0x81, 0x43, 0x63, + 0xf1, 0xb8, 0x75, 0xed, 0x14, 0xb2, 0x00, 0x9f, 0x4e, 0x28, 0x95, 0x3f, 0x4a, 0xe8, 0x0d, 0x61, + 0x18, 0x4f, 0xe0, 0xff, 0x95, 0x88, 0x7c, 0x89, 0xde, 0xfc, 0x2e, 0xbd, 0x45, 0x58, 0x54, 0x54, + 0x06, 0x58, 0xd2, 0x0f, 0xe2, 0xaa, 0xc4, 0x1c, 0x74, 0xf5, 0x54, 0x25, 0x4c, 0xc7, 0x64, 0x2f, + 0x0a, 0x00, 0x9c, 0xf8, 0x2f, 0x66, 0x35, 0xe8, 0x07, 0xf1, 0x0f, 0xdc, 0x65, 0xcf, 0xc6, 0x65, + 0x37, 0x51, 0xf8, 0xbf, 0xe3, 0xab, 0xdf, 0x4a, 0xe8, 0x42, 0x5a, 0x3e, 0x87, 0x61, 0xe2, 0x3f, + 0xfb, 0x81, 0x7b, 0xea, 0x4f, 0x12, 0x7a, 0xed, 0x88, 0xbe, 0xc2, 0x51, 0x53, 0x65, 0x27, 0xbd, + 0x6c, 0xd9, 0xc9, 0xf7, 0x51, 0x89, 0x9d, 0x62, 0xe3, 0x6a, 0x8e, 0xf1, 0x78, 0xe7, 0xa4, 0xc9, + 0x04, 0xc8, 0x54, 0xd0, 0x4c, 0xb9, 0x3a, 0x7f, 0xc4, 0xd5, 0x8f, 0xd1, 0x79, 0xd1, 0xaa, 0x0f, + 0xa1, 0xf7, 0xbf, 0x4a, 0x47, 0x2b, 0x03, 0x74, 0x61, 0x9a, 0xb7, 0x70, 0x8a, 0x87, 0x50, 0x87, + 0x0f, 0x84, 0x49, 0xfe, 0x7c, 0x78, 0x02, 0xfb, 0xe3, 0xe7, 0x09, 0xcd, 0x30, 0x52, 0x7e, 0x56, + 0x40, 0xe7, 0x55, 0xfe, 0xbb, 0x50, 0xf0, 0xaa, 0x6d, 0x91, 0x77, 0x50, 0x79, 0x2f, 0xf0, 0x93, + 0x83, 0x51, 0x10, 0x8b, 0x77, 0xe1, 0x7b, 0x27, 0x30, 0x39, 0x46, 0x95, 0xd5, 0x9a, 0x60, 0x41, + 0xc7, 0xcc, 0x9e, 0xcf, 0xc6, 0xfc, 0xf7, 0xcc, 0xc6, 0xe5, 0x7f, 0x4b, 0xa8, 0x9c, 0x0a, 0x92, + 0xaf, 0xa2, 0xa5, 0xe0, 0x59, 0x32, 0xf2, 0x3b, 0x49, 0x3b, 0x66, 0xa9, 0xc9, 0x5c, 0x50, 0xa6, + 0x8b, 0x02, 0xca, 0xf3, 0x55, 0x7e, 0x17, 0xe1, 0x14, 0x6d, 0x5c, 0xd8, 0x39, 0x86, 0x78, 0x56, + 0xc0, 0xd3, 0x1e, 0x20, 0xdf, 0x47, 0xcb, 0x29, 0xea, 0x31, 0x63, 0x2c, 0xcf, 0x88, 0xaa, 0x02, + 0x43, 0x7f, 0x6e, 0x46, 0xdd, 0x41, 0xd5, 0x29, 0x41, 0x87, 0x19, 0xda, 0x02, 0xa3, 0xbd, 0x98, + 0x15, 0x38, 0xe9, 0xd3, 0xf2, 0x15, 0xb4, 0xd8, 0x11, 0xd9, 0xd4, 0x66, 0x87, 0xb4, 0x12, 0x43, + 0x5f, 0xe8, 0x64, 0x52, 0x4c, 0xf9, 0x4d, 0x1e, 0x3a, 0x47, 0xd6, 0xf1, 0x3f, 0xa4, 0x42, 0xcc, + 0xb6, 0xcd, 0xfc, 0xcb, 0xb5, 0xcd, 0xe3, 0x0f, 0x0f, 0x85, 0x57, 0x7b, 0x78, 0x28, 0x1e, 0x39, + 0x3c, 0x4c, 0x17, 0x6c, 0xe9, 0x15, 0x15, 0xec, 0xf5, 0x3b, 0x68, 0x21, 0x9b, 0xc6, 0xfc, 0x66, + 0x60, 0x12, 0x7c, 0x06, 0x56, 0x9e, 0x5b, 0xbb, 0xc3, 0x2f, 0xcb, 0x9e, 0x5b, 0xbb, 0x79, 0x9b, + 0x5f, 0x96, 0x3d, 0xb7, 0xb6, 0xb1, 0x8e, 0xf3, 0xeb, 0x7f, 0x29, 0xa3, 0xb3, 0x0d, 0x21, 0xd1, + 0xe1, 0xbf, 0x21, 0xcb, 0x7f, 0x90, 0x10, 0x3e, 0x7a, 0xe6, 0x92, 0x6f, 0x9f, 0x58, 0xa4, 0xc7, + 0x9e, 0x2b, 0x97, 0x3f, 0x9a, 0x99, 0x8e, 0xe7, 0x99, 0xb2, 0xfa, 0xd5, 0xdf, 0xfe, 0xf1, 0x4d, + 0x6e, 0x45, 0xb9, 0x32, 0xfe, 0xb1, 0x3b, 0x75, 0x75, 0x7c, 0xd7, 0x3f, 0x42, 0x74, 0x57, 0xba, + 0x2e, 0x7f, 0x2b, 0xa1, 0xb3, 0x47, 0xa6, 0xac, 0xfc, 0xe1, 0xe9, 0x84, 0x1f, 0x39, 0x46, 0x2c, + 0xdf, 0x9e, 0x95, 0x4c, 0xa8, 0xfc, 0x3e, 0x53, 0xf9, 0x9a, 0xa2, 0x7c, 0xb7, 0xca, 0x29, 0x0d, + 0x68, 0xfc, 0xd7, 0x23, 0x07, 0x99, 0x4c, 0x89, 0xde, 0x9f, 0x41, 0x83, 0xe7, 0x4e, 0x8e, 0xcb, + 0x1f, 0xbf, 0x24, 0xb5, 0x30, 0xe3, 0x16, 0x33, 0x63, 0x55, 0x79, 0xf7, 0x04, 0x33, 0x0e, 0xa7, + 0xfc, 0xff, 0x2b, 0x09, 0x2d, 0x4e, 0x8d, 0x6e, 0x79, 0xe3, 0x94, 0xa1, 0xcf, 0x1e, 0x4c, 0x96, + 0x6f, 0xcd, 0x46, 0x24, 0x54, 0xbe, 0xc1, 0x54, 0xbe, 0xaa, 0x5c, 0x7e, 0x41, 0xb2, 0x30, 0x0a, + 0xd0, 0xf4, 0x97, 0x12, 0x5a, 0xc8, 0x8e, 0x53, 0x79, 0xfd, 0x74, 0x15, 0x98, 0x9d, 0xeb, 0xcb, + 0x1b, 0x33, 0xd1, 0x08, 0x35, 0xaf, 0x33, 0x35, 0xdf, 0x51, 0xde, 0x3a, 0x46, 0xcd, 0x6c, 0xf7, + 0x4d, 0xb5, 0xcc, 0x36, 0xe0, 0x13, 0xb5, 0x3c, 0x66, 0x4c, 0x2e, 0x6f, 0xcc, 0x44, 0x73, 0x0a, + 0x2d, 0xfd, 0x0c, 0xc1, 0x5d, 0xe9, 0xfa, 0xe6, 0x57, 0x12, 0x7a, 0xbb, 0x13, 0x0d, 0x5e, 0x2c, + 0x66, 0xf3, 0xc2, 0x91, 0x16, 0x63, 0x8f, 0xa2, 0x24, 0xb2, 0xa5, 0xc7, 0x44, 0x90, 0xf5, 0x22, + 0x20, 0x59, 0x8d, 0x46, 0xbd, 0xb5, 0x5e, 0x10, 0xb2, 0xff, 0x89, 0xac, 0xf1, 0x4f, 0xfe, 0xb0, + 0x1f, 0x7f, 0xc7, 0x9f, 0x5f, 0xee, 0xa5, 0x80, 0x27, 0x25, 0x46, 0xb1, 0xf1, 0x9f, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xcc, 0x93, 0x36, 0x44, 0x2d, 0x23, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/location/locations.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/location/locations.pb.go new file mode 100644 index 0000000..2b9f9f5 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/location/locations.pb.go @@ -0,0 +1,331 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/location/locations.proto + +/* +Package location is a generated protocol buffer package. + +It is generated from these files: + google/cloud/location/locations.proto + +It has these top-level messages: + ListLocationsRequest + ListLocationsResponse + GetLocationRequest + Location +*/ +package location + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/any" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// The request message for [Locations.ListLocations][google.cloud.location.Locations.ListLocations]. +type ListLocationsRequest struct { + // The resource that owns the locations collection, if applicable. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The standard list filter. + Filter string `protobuf:"bytes,2,opt,name=filter" json:"filter,omitempty"` + // The standard list page size. + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // The standard list page token. + PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListLocationsRequest) Reset() { *m = ListLocationsRequest{} } +func (m *ListLocationsRequest) String() string { return proto.CompactTextString(m) } +func (*ListLocationsRequest) ProtoMessage() {} +func (*ListLocationsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *ListLocationsRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ListLocationsRequest) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +func (m *ListLocationsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListLocationsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// The response message for [Locations.ListLocations][google.cloud.location.Locations.ListLocations]. +type ListLocationsResponse struct { + // A list of locations that matches the specified filter in the request. + Locations []*Location `protobuf:"bytes,1,rep,name=locations" json:"locations,omitempty"` + // The standard List next-page token. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListLocationsResponse) Reset() { *m = ListLocationsResponse{} } +func (m *ListLocationsResponse) String() string { return proto.CompactTextString(m) } +func (*ListLocationsResponse) ProtoMessage() {} +func (*ListLocationsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *ListLocationsResponse) GetLocations() []*Location { + if m != nil { + return m.Locations + } + return nil +} + +func (m *ListLocationsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The request message for [Locations.GetLocation][google.cloud.location.Locations.GetLocation]. +type GetLocationRequest struct { + // Resource name for the location. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetLocationRequest) Reset() { *m = GetLocationRequest{} } +func (m *GetLocationRequest) String() string { return proto.CompactTextString(m) } +func (*GetLocationRequest) ProtoMessage() {} +func (*GetLocationRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *GetLocationRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// A resource that represents Google Cloud Platform location. +type Location struct { + // Resource name for the location, which may vary between implementations. + // For example: `"projects/example-project/locations/us-east1"` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The canonical id for this location. For example: `"us-east1"`. + LocationId string `protobuf:"bytes,4,opt,name=location_id,json=locationId" json:"location_id,omitempty"` + // Cross-service attributes for the location. For example + // + // {"cloud.googleapis.com/region": "us-east1"} + Labels map[string]string `protobuf:"bytes,2,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Service-specific metadata. For example the available capacity at the given + // location. + Metadata *google_protobuf1.Any `protobuf:"bytes,3,opt,name=metadata" json:"metadata,omitempty"` +} + +func (m *Location) Reset() { *m = Location{} } +func (m *Location) String() string { return proto.CompactTextString(m) } +func (*Location) ProtoMessage() {} +func (*Location) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *Location) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Location) GetLocationId() string { + if m != nil { + return m.LocationId + } + return "" +} + +func (m *Location) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +func (m *Location) GetMetadata() *google_protobuf1.Any { + if m != nil { + return m.Metadata + } + return nil +} + +func init() { + proto.RegisterType((*ListLocationsRequest)(nil), "google.cloud.location.ListLocationsRequest") + proto.RegisterType((*ListLocationsResponse)(nil), "google.cloud.location.ListLocationsResponse") + proto.RegisterType((*GetLocationRequest)(nil), "google.cloud.location.GetLocationRequest") + proto.RegisterType((*Location)(nil), "google.cloud.location.Location") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for Locations service + +type LocationsClient interface { + // Lists information about the supported locations for this service. + ListLocations(ctx context.Context, in *ListLocationsRequest, opts ...grpc.CallOption) (*ListLocationsResponse, error) + // Get information about a location. + GetLocation(ctx context.Context, in *GetLocationRequest, opts ...grpc.CallOption) (*Location, error) +} + +type locationsClient struct { + cc *grpc.ClientConn +} + +func NewLocationsClient(cc *grpc.ClientConn) LocationsClient { + return &locationsClient{cc} +} + +func (c *locationsClient) ListLocations(ctx context.Context, in *ListLocationsRequest, opts ...grpc.CallOption) (*ListLocationsResponse, error) { + out := new(ListLocationsResponse) + err := grpc.Invoke(ctx, "/google.cloud.location.Locations/ListLocations", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *locationsClient) GetLocation(ctx context.Context, in *GetLocationRequest, opts ...grpc.CallOption) (*Location, error) { + out := new(Location) + err := grpc.Invoke(ctx, "/google.cloud.location.Locations/GetLocation", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Locations service + +type LocationsServer interface { + // Lists information about the supported locations for this service. + ListLocations(context.Context, *ListLocationsRequest) (*ListLocationsResponse, error) + // Get information about a location. + GetLocation(context.Context, *GetLocationRequest) (*Location, error) +} + +func RegisterLocationsServer(s *grpc.Server, srv LocationsServer) { + s.RegisterService(&_Locations_serviceDesc, srv) +} + +func _Locations_ListLocations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListLocationsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LocationsServer).ListLocations(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.location.Locations/ListLocations", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LocationsServer).ListLocations(ctx, req.(*ListLocationsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Locations_GetLocation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetLocationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LocationsServer).GetLocation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.location.Locations/GetLocation", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LocationsServer).GetLocation(ctx, req.(*GetLocationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Locations_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.location.Locations", + HandlerType: (*LocationsServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListLocations", + Handler: _Locations_ListLocations_Handler, + }, + { + MethodName: "GetLocation", + Handler: _Locations_GetLocation_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/location/locations.proto", +} + +func init() { proto.RegisterFile("google/cloud/location/locations.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 508 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xcd, 0x6e, 0xd3, 0x40, + 0x10, 0xd6, 0x3a, 0x6d, 0x94, 0x8c, 0x55, 0x40, 0xa3, 0x14, 0xb9, 0x06, 0x94, 0xd4, 0x08, 0x48, + 0x0b, 0xf2, 0x42, 0xb8, 0xf0, 0xa3, 0x1c, 0x28, 0x42, 0x08, 0x29, 0x87, 0xc8, 0x70, 0xe2, 0x12, + 0x6d, 0x92, 0xad, 0x65, 0xea, 0xec, 0x1a, 0x7b, 0x53, 0x91, 0xa2, 0xf6, 0x80, 0x78, 0x83, 0xbe, + 0x04, 0xef, 0xc3, 0x2b, 0xf0, 0x02, 0xdc, 0x38, 0x22, 0xaf, 0x7f, 0x12, 0x8a, 0x4b, 0xb8, 0xcd, + 0xce, 0x7c, 0xb3, 0xdf, 0x7c, 0xf3, 0xad, 0x0d, 0x77, 0x7c, 0x29, 0xfd, 0x90, 0xd3, 0x49, 0x28, + 0xe7, 0x53, 0x1a, 0xca, 0x09, 0x53, 0x81, 0x14, 0x65, 0x90, 0xb8, 0x51, 0x2c, 0x95, 0xc4, 0xed, + 0x0c, 0xe6, 0x6a, 0x98, 0x5b, 0x54, 0xed, 0x9b, 0x79, 0x37, 0x8b, 0x02, 0xca, 0x84, 0x90, 0x6a, + 0xb5, 0xc9, 0xde, 0xc9, 0xab, 0xfa, 0x34, 0x9e, 0x1f, 0x52, 0x26, 0x16, 0x59, 0xc9, 0x39, 0x83, + 0xd6, 0x20, 0x48, 0xd4, 0xa0, 0xa0, 0xf1, 0xf8, 0xc7, 0x39, 0x4f, 0x14, 0x22, 0x6c, 0x08, 0x36, + 0xe3, 0x16, 0xe9, 0x90, 0x6e, 0xd3, 0xd3, 0x31, 0x5e, 0x87, 0xfa, 0x61, 0x10, 0x2a, 0x1e, 0x5b, + 0x86, 0xce, 0xe6, 0x27, 0xbc, 0x01, 0xcd, 0x88, 0xf9, 0x7c, 0x94, 0x04, 0x27, 0xdc, 0xaa, 0x75, + 0x48, 0x77, 0xd3, 0x6b, 0xa4, 0x89, 0xb7, 0xc1, 0x09, 0xc7, 0x5b, 0x00, 0xba, 0xa8, 0xe4, 0x11, + 0x17, 0xd6, 0x86, 0x6e, 0xd4, 0xf0, 0x77, 0x69, 0xc2, 0x39, 0x83, 0xed, 0x0b, 0xfc, 0x49, 0x24, + 0x45, 0xc2, 0xb1, 0x0f, 0xcd, 0x52, 0xbb, 0x45, 0x3a, 0xb5, 0xae, 0xd9, 0x6b, 0xbb, 0x95, 0xe2, + 0xdd, 0xa2, 0xd9, 0x5b, 0x76, 0xe0, 0x5d, 0xb8, 0x2a, 0xf8, 0x27, 0x35, 0x5a, 0xe1, 0xce, 0x86, + 0xde, 0x4a, 0xd3, 0xc3, 0x92, 0xbf, 0x0b, 0xf8, 0x9a, 0x97, 0xf4, 0xff, 0x50, 0xef, 0xfc, 0x24, + 0xd0, 0x28, 0x70, 0x95, 0xeb, 0x69, 0x83, 0x59, 0xf0, 0x8f, 0x82, 0x69, 0x2e, 0x15, 0x8a, 0xd4, + 0x9b, 0x29, 0xbe, 0x84, 0x7a, 0xc8, 0xc6, 0x3c, 0x4c, 0x2c, 0x43, 0xeb, 0xb9, 0xbf, 0x46, 0x8f, + 0x3b, 0xd0, 0xe8, 0x57, 0x42, 0xc5, 0x0b, 0x2f, 0x6f, 0xc5, 0x87, 0xd0, 0x98, 0x71, 0xc5, 0xa6, + 0x4c, 0x31, 0xbd, 0x6b, 0xb3, 0xd7, 0x2a, 0xae, 0x29, 0xec, 0x75, 0x5f, 0x88, 0x85, 0x57, 0xa2, + 0xec, 0xa7, 0x60, 0xae, 0x5c, 0x84, 0xd7, 0xa0, 0x76, 0xc4, 0x17, 0xf9, 0xe4, 0x69, 0x88, 0x2d, + 0xd8, 0x3c, 0x66, 0xe1, 0x9c, 0xe7, 0x1b, 0xca, 0x0e, 0xcf, 0x8c, 0x27, 0xa4, 0xf7, 0xcd, 0x80, + 0x66, 0x69, 0x0d, 0x9e, 0x13, 0xd8, 0xfa, 0xc3, 0x2c, 0xbc, 0x54, 0x41, 0xc5, 0x93, 0xb2, 0x1f, + 0xfc, 0x1f, 0x38, 0xf3, 0xdf, 0xb9, 0xf7, 0xe5, 0xfb, 0x8f, 0x73, 0x63, 0x17, 0xdb, 0xf4, 0xf8, + 0x11, 0xfd, 0x9c, 0x2e, 0xb8, 0x1f, 0xc5, 0xf2, 0x03, 0x9f, 0xa8, 0x84, 0xee, 0x9f, 0x2e, 0xbf, + 0x0b, 0xfc, 0x4a, 0xc0, 0x5c, 0xb1, 0x10, 0xf7, 0x2e, 0xa1, 0xf9, 0xdb, 0x66, 0x7b, 0xdd, 0x83, + 0x72, 0xf6, 0xf4, 0x10, 0xb7, 0x71, 0xb7, 0x6a, 0x88, 0xe5, 0x0c, 0x74, 0xff, 0xf4, 0x40, 0xc2, + 0xce, 0x44, 0xce, 0xaa, 0x2f, 0x3c, 0xb8, 0x52, 0xea, 0x1b, 0xa6, 0x1e, 0x0d, 0xc9, 0xfb, 0x7e, + 0x0e, 0xf4, 0x65, 0xc8, 0x84, 0xef, 0xca, 0xd8, 0xa7, 0x3e, 0x17, 0xda, 0x41, 0x9a, 0x95, 0x58, + 0x14, 0x24, 0x17, 0xfe, 0x06, 0xcf, 0x8b, 0xe0, 0x17, 0x21, 0xe3, 0xba, 0x06, 0x3f, 0xfe, 0x1d, + 0x00, 0x00, 0xff, 0xff, 0x0d, 0x57, 0x9e, 0xa7, 0x39, 0x04, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/job_service.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/job_service.pb.go index f88feba..b99add0 100644 --- a/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/job_service.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/job_service.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/cloud/ml/v1/job_service.proto -// DO NOT EDIT! /* Package ml is a generated protocol buffer package. diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/model_service.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/model_service.pb.go index 7caaf42..c05f8ad 100644 --- a/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/model_service.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/model_service.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/cloud/ml/v1/model_service.proto -// DO NOT EDIT! package ml diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/operation_metadata.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/operation_metadata.pb.go index aad0e67..a41117d 100644 --- a/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/operation_metadata.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/operation_metadata.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/cloud/ml/v1/operation_metadata.proto -// DO NOT EDIT! package ml diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/prediction_service.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/prediction_service.pb.go index 724f90f..9d27c9c 100644 --- a/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/prediction_service.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/prediction_service.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/cloud/ml/v1/prediction_service.proto -// DO NOT EDIT! package ml diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/project_service.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/project_service.pb.go index e4be4e1..751bce7 100644 --- a/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/project_service.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1/project_service.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/cloud/ml/v1/project_service.proto -// DO NOT EDIT! package ml diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1beta1/job_service.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1beta1/job_service.pb.go deleted file mode 100644 index 9aff1c7..0000000 --- a/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1beta1/job_service.pb.go +++ /dev/null @@ -1,1824 +0,0 @@ -// Code generated by protoc-gen-go. -// source: google/cloud/ml/v1beta1/job_service.proto -// DO NOT EDIT! - -/* -Package ml is a generated protocol buffer package. - -It is generated from these files: - google/cloud/ml/v1beta1/job_service.proto - google/cloud/ml/v1beta1/model_service.proto - google/cloud/ml/v1beta1/operation_metadata.proto - google/cloud/ml/v1beta1/prediction_service.proto - google/cloud/ml/v1beta1/project_service.proto - -It has these top-level messages: - TrainingInput - HyperparameterSpec - ParameterSpec - HyperparameterOutput - TrainingOutput - PredictionInput - PredictionOutput - Job - CreateJobRequest - ListJobsRequest - ListJobsResponse - GetJobRequest - CancelJobRequest - Model - Version - ManualScaling - CreateModelRequest - ListModelsRequest - ListModelsResponse - GetModelRequest - DeleteModelRequest - CreateVersionRequest - ListVersionsRequest - ListVersionsResponse - GetVersionRequest - DeleteVersionRequest - SetDefaultVersionRequest - OperationMetadata - PredictRequest - GetConfigRequest - GetConfigResponse -*/ -package ml - -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" -import _ "google.golang.org/genproto/googleapis/api/annotations" -import _ "google.golang.org/genproto/googleapis/api/serviceconfig" -import google_protobuf1 "github.com/golang/protobuf/ptypes/empty" -import google_protobuf2 "github.com/golang/protobuf/ptypes/timestamp" - -import ( - context "golang.org/x/net/context" - grpc "google.golang.org/grpc" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package - -// A scale tier is an abstract representation of the resources Cloud ML -// will allocate to a training job. When selecting a scale tier for your -// training job, you should consider the size of your training dataset and -// the complexity of your model. As the tiers increase, virtual machines are -// added to handle your job, and the individual machines in the cluster -// generally have more memory and greater processing power than they do at -// lower tiers. The number of training units charged per hour of processing -// increases as tiers get more advanced. Refer to the -// [pricing guide](/ml/pricing) for more details. Note that in addition to -// incurring costs, your use of training resources is constrained by the -// [quota policy](/ml/quota). -type TrainingInput_ScaleTier int32 - -const ( - // A single worker instance. This tier is suitable for learning how to use - // Cloud ML, and for experimenting with new models using small datasets. - TrainingInput_BASIC TrainingInput_ScaleTier = 0 - // Many workers and a few parameter servers. - TrainingInput_STANDARD_1 TrainingInput_ScaleTier = 1 - // A large number of workers with many parameter servers. - TrainingInput_PREMIUM_1 TrainingInput_ScaleTier = 3 - // A single worker instance [with a GPU](ml/docs/how-tos/using-gpus). - TrainingInput_BASIC_GPU TrainingInput_ScaleTier = 6 - // The CUSTOM tier is not a set tier, but rather enables you to use your - // own cluster specification. When you use this tier, set values to - // configure your processing cluster according to these guidelines: - // - // * You _must_ set `TrainingInput.masterType` to specify the type - // of machine to use for your master node. This is the only required - // setting. - // - // * You _may_ set `TrainingInput.workerCount` to specify the number of - // workers to use. If you specify one or more workers, you _must_ also - // set `TrainingInput.workerType` to specify the type of machine to use - // for your worker nodes. - // - // * You _may_ set `TrainingInput.parameterServerCount` to specify the - // number of parameter servers to use. If you specify one or more - // parameter servers, you _must_ also set - // `TrainingInput.parameterServerType` to specify the type of machine to - // use for your parameter servers. - // - // Note that all of your workers must use the same machine type, which can - // be different from your parameter server type and master type. Your - // parameter servers must likewise use the same machine type, which can be - // different from your worker type and master type. - TrainingInput_CUSTOM TrainingInput_ScaleTier = 5 -) - -var TrainingInput_ScaleTier_name = map[int32]string{ - 0: "BASIC", - 1: "STANDARD_1", - 3: "PREMIUM_1", - 6: "BASIC_GPU", - 5: "CUSTOM", -} -var TrainingInput_ScaleTier_value = map[string]int32{ - "BASIC": 0, - "STANDARD_1": 1, - "PREMIUM_1": 3, - "BASIC_GPU": 6, - "CUSTOM": 5, -} - -func (x TrainingInput_ScaleTier) String() string { - return proto.EnumName(TrainingInput_ScaleTier_name, int32(x)) -} -func (TrainingInput_ScaleTier) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 0} } - -// The available types of optimization goals. -type HyperparameterSpec_GoalType int32 - -const ( - // Goal Type will default to maximize. - HyperparameterSpec_GOAL_TYPE_UNSPECIFIED HyperparameterSpec_GoalType = 0 - // Maximize the goal metric. - HyperparameterSpec_MAXIMIZE HyperparameterSpec_GoalType = 1 - // Minimize the goal metric. - HyperparameterSpec_MINIMIZE HyperparameterSpec_GoalType = 2 -) - -var HyperparameterSpec_GoalType_name = map[int32]string{ - 0: "GOAL_TYPE_UNSPECIFIED", - 1: "MAXIMIZE", - 2: "MINIMIZE", -} -var HyperparameterSpec_GoalType_value = map[string]int32{ - "GOAL_TYPE_UNSPECIFIED": 0, - "MAXIMIZE": 1, - "MINIMIZE": 2, -} - -func (x HyperparameterSpec_GoalType) String() string { - return proto.EnumName(HyperparameterSpec_GoalType_name, int32(x)) -} -func (HyperparameterSpec_GoalType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{1, 0} -} - -// The type of the parameter. -type ParameterSpec_ParameterType int32 - -const ( - // You must specify a valid type. Using this unspecified type will result in - // an error. - ParameterSpec_PARAMETER_TYPE_UNSPECIFIED ParameterSpec_ParameterType = 0 - // Type for real-valued parameters. - ParameterSpec_DOUBLE ParameterSpec_ParameterType = 1 - // Type for integral parameters. - ParameterSpec_INTEGER ParameterSpec_ParameterType = 2 - // The parameter is categorical, with a value chosen from the categories - // field. - ParameterSpec_CATEGORICAL ParameterSpec_ParameterType = 3 - // The parameter is real valued, with a fixed set of feasible points. If - // `type==DISCRETE`, feasible_points must be provided, and - // {`min_value`, `max_value`} will be ignored. - ParameterSpec_DISCRETE ParameterSpec_ParameterType = 4 -) - -var ParameterSpec_ParameterType_name = map[int32]string{ - 0: "PARAMETER_TYPE_UNSPECIFIED", - 1: "DOUBLE", - 2: "INTEGER", - 3: "CATEGORICAL", - 4: "DISCRETE", -} -var ParameterSpec_ParameterType_value = map[string]int32{ - "PARAMETER_TYPE_UNSPECIFIED": 0, - "DOUBLE": 1, - "INTEGER": 2, - "CATEGORICAL": 3, - "DISCRETE": 4, -} - -func (x ParameterSpec_ParameterType) String() string { - return proto.EnumName(ParameterSpec_ParameterType_name, int32(x)) -} -func (ParameterSpec_ParameterType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{2, 0} -} - -// The type of scaling that should be applied to this parameter. -type ParameterSpec_ScaleType int32 - -const ( - // By default, no scaling is applied. - ParameterSpec_NONE ParameterSpec_ScaleType = 0 - // Scales the feasible space to (0, 1) linearly. - ParameterSpec_UNIT_LINEAR_SCALE ParameterSpec_ScaleType = 1 - // Scales the feasible space logarithmically to (0, 1). The entire feasible - // space must be strictly positive. - ParameterSpec_UNIT_LOG_SCALE ParameterSpec_ScaleType = 2 - // Scales the feasible space "reverse" logarithmically to (0, 1). The result - // is that values close to the top of the feasible space are spread out more - // than points near the bottom. The entire feasible space must be strictly - // positive. - ParameterSpec_UNIT_REVERSE_LOG_SCALE ParameterSpec_ScaleType = 3 -) - -var ParameterSpec_ScaleType_name = map[int32]string{ - 0: "NONE", - 1: "UNIT_LINEAR_SCALE", - 2: "UNIT_LOG_SCALE", - 3: "UNIT_REVERSE_LOG_SCALE", -} -var ParameterSpec_ScaleType_value = map[string]int32{ - "NONE": 0, - "UNIT_LINEAR_SCALE": 1, - "UNIT_LOG_SCALE": 2, - "UNIT_REVERSE_LOG_SCALE": 3, -} - -func (x ParameterSpec_ScaleType) String() string { - return proto.EnumName(ParameterSpec_ScaleType_name, int32(x)) -} -func (ParameterSpec_ScaleType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 1} } - -// The format used to separate data instances in the source files. -type PredictionInput_DataFormat int32 - -const ( - // Unspecified format. - PredictionInput_DATA_FORMAT_UNSPECIFIED PredictionInput_DataFormat = 0 - // The source file is a text file with instances separated by the - // new-line character. - PredictionInput_TEXT PredictionInput_DataFormat = 1 - // The source file is a TFRecord file. - PredictionInput_TF_RECORD PredictionInput_DataFormat = 2 - // The source file is a GZIP-compressed TFRecord file. - PredictionInput_TF_RECORD_GZIP PredictionInput_DataFormat = 3 -) - -var PredictionInput_DataFormat_name = map[int32]string{ - 0: "DATA_FORMAT_UNSPECIFIED", - 1: "TEXT", - 2: "TF_RECORD", - 3: "TF_RECORD_GZIP", -} -var PredictionInput_DataFormat_value = map[string]int32{ - "DATA_FORMAT_UNSPECIFIED": 0, - "TEXT": 1, - "TF_RECORD": 2, - "TF_RECORD_GZIP": 3, -} - -func (x PredictionInput_DataFormat) String() string { - return proto.EnumName(PredictionInput_DataFormat_name, int32(x)) -} -func (PredictionInput_DataFormat) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{5, 0} -} - -// Describes the job state. -type Job_State int32 - -const ( - // The job state is unspecified. - Job_STATE_UNSPECIFIED Job_State = 0 - // The job has been just created and processing has not yet begun. - Job_QUEUED Job_State = 1 - // The service is preparing to run the job. - Job_PREPARING Job_State = 2 - // The job is in progress. - Job_RUNNING Job_State = 3 - // The job completed successfully. - Job_SUCCEEDED Job_State = 4 - // The job failed. - // `error_message` should contain the details of the failure. - Job_FAILED Job_State = 5 - // The job is being cancelled. - // `error_message` should describe the reason for the cancellation. - Job_CANCELLING Job_State = 6 - // The job has been cancelled. - // `error_message` should describe the reason for the cancellation. - Job_CANCELLED Job_State = 7 -) - -var Job_State_name = map[int32]string{ - 0: "STATE_UNSPECIFIED", - 1: "QUEUED", - 2: "PREPARING", - 3: "RUNNING", - 4: "SUCCEEDED", - 5: "FAILED", - 6: "CANCELLING", - 7: "CANCELLED", -} -var Job_State_value = map[string]int32{ - "STATE_UNSPECIFIED": 0, - "QUEUED": 1, - "PREPARING": 2, - "RUNNING": 3, - "SUCCEEDED": 4, - "FAILED": 5, - "CANCELLING": 6, - "CANCELLED": 7, -} - -func (x Job_State) String() string { - return proto.EnumName(Job_State_name, int32(x)) -} -func (Job_State) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{7, 0} } - -// Represents input parameters for a training job. -type TrainingInput struct { - // Required. Specifies the machine types, the number of replicas for workers - // and parameter servers. - ScaleTier TrainingInput_ScaleTier `protobuf:"varint,1,opt,name=scale_tier,json=scaleTier,enum=google.cloud.ml.v1beta1.TrainingInput_ScaleTier" json:"scale_tier,omitempty"` - // Optional. Specifies the type of virtual machine to use for your training - // job's master worker. - // - // The following types are supported: - // - //
- //
standard
- //
- // A basic machine configuration suitable for training simple models with - // small to moderate datasets. - //
- //
large_model
- //
- // A machine with a lot of memory, specially suited for parameter servers - // when your model is large (having many hidden layers or layers with very - // large numbers of nodes). - //
- //
complex_model_s
- //
- // A machine suitable for the master and workers of the cluster when your - // model requires more computation than the standard machine can handle - // satisfactorily. - //
- //
complex_model_m
- //
- // A machine with roughly twice the number of cores and roughly double the - // memory of complex_model_s. - //
- //
complex_model_l
- //
- // A machine with roughly twice the number of cores and roughly double the - // memory of complex_model_m. - //
- //
standard_gpu
- //
- // A machine equivalent to standard that - // also includes a - // - // GPU that you can use in your trainer. - //
- //
complex_model_m_gpu
- //
- // A machine equivalent to - // coplex_model_m that also includes - // four GPUs. - //
- //
- // - // You must set this value when `scaleTier` is set to `CUSTOM`. - MasterType string `protobuf:"bytes,2,opt,name=master_type,json=masterType" json:"master_type,omitempty"` - // Optional. Specifies the type of virtual machine to use for your training - // job's worker nodes. - // - // The supported values are the same as those described in the entry for - // `masterType`. - // - // This value must be present when `scaleTier` is set to `CUSTOM` and - // `workerCount` is greater than zero. - WorkerType string `protobuf:"bytes,3,opt,name=worker_type,json=workerType" json:"worker_type,omitempty"` - // Optional. Specifies the type of virtual machine to use for your training - // job's parameter server. - // - // The supported values are the same as those described in the entry for - // `master_type`. - // - // This value must be present when `scaleTier` is set to `CUSTOM` and - // `parameter_server_count` is greater than zero. - ParameterServerType string `protobuf:"bytes,4,opt,name=parameter_server_type,json=parameterServerType" json:"parameter_server_type,omitempty"` - // Optional. The number of worker replicas to use for the training job. Each - // replica in the cluster will be of the type specified in `worker_type`. - // - // This value can only be used when `scale_tier` is set to `CUSTOM`. If you - // set this value, you must also set `worker_type`. - WorkerCount int64 `protobuf:"varint,5,opt,name=worker_count,json=workerCount" json:"worker_count,omitempty"` - // Optional. The number of parameter server replicas to use for the training - // job. Each replica in the cluster will be of the type specified in - // `parameter_server_type`. - // - // This value can only be used when `scale_tier` is set to `CUSTOM`.If you - // set this value, you must also set `parameter_server_type`. - ParameterServerCount int64 `protobuf:"varint,6,opt,name=parameter_server_count,json=parameterServerCount" json:"parameter_server_count,omitempty"` - // Required. The Google Cloud Storage location of the packages with - // the training program and any additional dependencies. - PackageUris []string `protobuf:"bytes,7,rep,name=package_uris,json=packageUris" json:"package_uris,omitempty"` - // Required. The Python module name to run after installing the packages. - PythonModule string `protobuf:"bytes,8,opt,name=python_module,json=pythonModule" json:"python_module,omitempty"` - // Optional. Command line arguments to pass to the program. - Args []string `protobuf:"bytes,10,rep,name=args" json:"args,omitempty"` - // Optional. The set of Hyperparameters to tune. - Hyperparameters *HyperparameterSpec `protobuf:"bytes,12,opt,name=hyperparameters" json:"hyperparameters,omitempty"` - // Required. The Google Compute Engine region to run the training job in. - Region string `protobuf:"bytes,14,opt,name=region" json:"region,omitempty"` - // Optional. A Google Cloud Storage path in which to store training outputs - // and other data needed for training. This path is passed to your TensorFlow - // program as the 'job_dir' command-line argument. The benefit of specifying - // this field is that Cloud ML validates the path for use in training. - JobDir string `protobuf:"bytes,16,opt,name=job_dir,json=jobDir" json:"job_dir,omitempty"` - // Optional. The Google Cloud ML runtime version to use for training. If not - // set, Google Cloud ML will choose the latest stable version. - RuntimeVersion string `protobuf:"bytes,15,opt,name=runtime_version,json=runtimeVersion" json:"runtime_version,omitempty"` -} - -func (m *TrainingInput) Reset() { *m = TrainingInput{} } -func (m *TrainingInput) String() string { return proto.CompactTextString(m) } -func (*TrainingInput) ProtoMessage() {} -func (*TrainingInput) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } - -func (m *TrainingInput) GetScaleTier() TrainingInput_ScaleTier { - if m != nil { - return m.ScaleTier - } - return TrainingInput_BASIC -} - -func (m *TrainingInput) GetMasterType() string { - if m != nil { - return m.MasterType - } - return "" -} - -func (m *TrainingInput) GetWorkerType() string { - if m != nil { - return m.WorkerType - } - return "" -} - -func (m *TrainingInput) GetParameterServerType() string { - if m != nil { - return m.ParameterServerType - } - return "" -} - -func (m *TrainingInput) GetWorkerCount() int64 { - if m != nil { - return m.WorkerCount - } - return 0 -} - -func (m *TrainingInput) GetParameterServerCount() int64 { - if m != nil { - return m.ParameterServerCount - } - return 0 -} - -func (m *TrainingInput) GetPackageUris() []string { - if m != nil { - return m.PackageUris - } - return nil -} - -func (m *TrainingInput) GetPythonModule() string { - if m != nil { - return m.PythonModule - } - return "" -} - -func (m *TrainingInput) GetArgs() []string { - if m != nil { - return m.Args - } - return nil -} - -func (m *TrainingInput) GetHyperparameters() *HyperparameterSpec { - if m != nil { - return m.Hyperparameters - } - return nil -} - -func (m *TrainingInput) GetRegion() string { - if m != nil { - return m.Region - } - return "" -} - -func (m *TrainingInput) GetJobDir() string { - if m != nil { - return m.JobDir - } - return "" -} - -func (m *TrainingInput) GetRuntimeVersion() string { - if m != nil { - return m.RuntimeVersion - } - return "" -} - -// Represents a set of hyperparameters to optimize. -type HyperparameterSpec struct { - // Required. The type of goal to use for tuning. Available types are - // `MAXIMIZE` and `MINIMIZE`. - // - // Defaults to `MAXIMIZE`. - Goal HyperparameterSpec_GoalType `protobuf:"varint,1,opt,name=goal,enum=google.cloud.ml.v1beta1.HyperparameterSpec_GoalType" json:"goal,omitempty"` - // Required. The set of parameters to tune. - Params []*ParameterSpec `protobuf:"bytes,2,rep,name=params" json:"params,omitempty"` - // Optional. How many training trials should be attempted to optimize - // the specified hyperparameters. - // - // Defaults to one. - MaxTrials int32 `protobuf:"varint,3,opt,name=max_trials,json=maxTrials" json:"max_trials,omitempty"` - // Optional. The number of training trials to run concurrently. - // You can reduce the time it takes to perform hyperparameter tuning by adding - // trials in parallel. However, each trail only benefits from the information - // gained in completed trials. That means that a trial does not get access to - // the results of trials running at the same time, which could reduce the - // quality of the overall optimization. - // - // Each trial will use the same scale tier and machine types. - // - // Defaults to one. - MaxParallelTrials int32 `protobuf:"varint,4,opt,name=max_parallel_trials,json=maxParallelTrials" json:"max_parallel_trials,omitempty"` - // Optional. The Tensorflow summary tag name to use for optimizing trials. For - // current versions of Tensorflow, this tag name should exactly match what is - // shown in Tensorboard, including all scopes. For versions of Tensorflow - // prior to 0.12, this should be only the tag passed to tf.Summary. - // By default, "training/hptuning/metric" will be used. - HyperparameterMetricTag string `protobuf:"bytes,5,opt,name=hyperparameter_metric_tag,json=hyperparameterMetricTag" json:"hyperparameter_metric_tag,omitempty"` -} - -func (m *HyperparameterSpec) Reset() { *m = HyperparameterSpec{} } -func (m *HyperparameterSpec) String() string { return proto.CompactTextString(m) } -func (*HyperparameterSpec) ProtoMessage() {} -func (*HyperparameterSpec) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } - -func (m *HyperparameterSpec) GetGoal() HyperparameterSpec_GoalType { - if m != nil { - return m.Goal - } - return HyperparameterSpec_GOAL_TYPE_UNSPECIFIED -} - -func (m *HyperparameterSpec) GetParams() []*ParameterSpec { - if m != nil { - return m.Params - } - return nil -} - -func (m *HyperparameterSpec) GetMaxTrials() int32 { - if m != nil { - return m.MaxTrials - } - return 0 -} - -func (m *HyperparameterSpec) GetMaxParallelTrials() int32 { - if m != nil { - return m.MaxParallelTrials - } - return 0 -} - -func (m *HyperparameterSpec) GetHyperparameterMetricTag() string { - if m != nil { - return m.HyperparameterMetricTag - } - return "" -} - -// Represents a single hyperparameter to optimize. -type ParameterSpec struct { - // Required. The parameter name must be unique amongst all ParameterConfigs in - // a HyperparameterSpec message. E.g., "learning_rate". - ParameterName string `protobuf:"bytes,1,opt,name=parameter_name,json=parameterName" json:"parameter_name,omitempty"` - // Required. The type of the parameter. - Type ParameterSpec_ParameterType `protobuf:"varint,4,opt,name=type,enum=google.cloud.ml.v1beta1.ParameterSpec_ParameterType" json:"type,omitempty"` - // Required if type is `DOUBLE` or `INTEGER`. This field - // should be unset if type is `CATEGORICAL`. This value should be integers if - // type is INTEGER. - MinValue float64 `protobuf:"fixed64,2,opt,name=min_value,json=minValue" json:"min_value,omitempty"` - // Required if typeis `DOUBLE` or `INTEGER`. This field - // should be unset if type is `CATEGORICAL`. This value should be integers if - // type is `INTEGER`. - MaxValue float64 `protobuf:"fixed64,3,opt,name=max_value,json=maxValue" json:"max_value,omitempty"` - // Required if type is `CATEGORICAL`. The list of possible categories. - CategoricalValues []string `protobuf:"bytes,5,rep,name=categorical_values,json=categoricalValues" json:"categorical_values,omitempty"` - // Required if type is `DISCRETE`. - // A list of feasible points. - // The list should be in strictly increasing order. For instance, this - // parameter might have possible settings of 1.5, 2.5, and 4.0. This list - // should not contain more than 1,000 values. - DiscreteValues []float64 `protobuf:"fixed64,6,rep,packed,name=discrete_values,json=discreteValues" json:"discrete_values,omitempty"` - // Optional. How the parameter should be scaled to the hypercube. - // Leave unset for categorical parameters. - // Some kind of scaling is strongly recommended for real or integral - // parameters (e.g., `UNIT_LINEAR_SCALE`). - ScaleType ParameterSpec_ScaleType `protobuf:"varint,7,opt,name=scale_type,json=scaleType,enum=google.cloud.ml.v1beta1.ParameterSpec_ScaleType" json:"scale_type,omitempty"` -} - -func (m *ParameterSpec) Reset() { *m = ParameterSpec{} } -func (m *ParameterSpec) String() string { return proto.CompactTextString(m) } -func (*ParameterSpec) ProtoMessage() {} -func (*ParameterSpec) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } - -func (m *ParameterSpec) GetParameterName() string { - if m != nil { - return m.ParameterName - } - return "" -} - -func (m *ParameterSpec) GetType() ParameterSpec_ParameterType { - if m != nil { - return m.Type - } - return ParameterSpec_PARAMETER_TYPE_UNSPECIFIED -} - -func (m *ParameterSpec) GetMinValue() float64 { - if m != nil { - return m.MinValue - } - return 0 -} - -func (m *ParameterSpec) GetMaxValue() float64 { - if m != nil { - return m.MaxValue - } - return 0 -} - -func (m *ParameterSpec) GetCategoricalValues() []string { - if m != nil { - return m.CategoricalValues - } - return nil -} - -func (m *ParameterSpec) GetDiscreteValues() []float64 { - if m != nil { - return m.DiscreteValues - } - return nil -} - -func (m *ParameterSpec) GetScaleType() ParameterSpec_ScaleType { - if m != nil { - return m.ScaleType - } - return ParameterSpec_NONE -} - -// Represents the result of a single hyperparameter tuning trial from a -// training job. The TrainingOutput object that is returned on successful -// completion of a training job with hyperparameter tuning includes a list -// of HyperparameterOutput objects, one for each successful trial. -type HyperparameterOutput struct { - // The trial id for these results. - TrialId string `protobuf:"bytes,1,opt,name=trial_id,json=trialId" json:"trial_id,omitempty"` - // The hyperparameters given to this trial. - Hyperparameters map[string]string `protobuf:"bytes,2,rep,name=hyperparameters" json:"hyperparameters,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - // The final objective metric seen for this trial. - FinalMetric *HyperparameterOutput_HyperparameterMetric `protobuf:"bytes,3,opt,name=final_metric,json=finalMetric" json:"final_metric,omitempty"` - // All recorded object metrics for this trial. - AllMetrics []*HyperparameterOutput_HyperparameterMetric `protobuf:"bytes,4,rep,name=all_metrics,json=allMetrics" json:"all_metrics,omitempty"` -} - -func (m *HyperparameterOutput) Reset() { *m = HyperparameterOutput{} } -func (m *HyperparameterOutput) String() string { return proto.CompactTextString(m) } -func (*HyperparameterOutput) ProtoMessage() {} -func (*HyperparameterOutput) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } - -func (m *HyperparameterOutput) GetTrialId() string { - if m != nil { - return m.TrialId - } - return "" -} - -func (m *HyperparameterOutput) GetHyperparameters() map[string]string { - if m != nil { - return m.Hyperparameters - } - return nil -} - -func (m *HyperparameterOutput) GetFinalMetric() *HyperparameterOutput_HyperparameterMetric { - if m != nil { - return m.FinalMetric - } - return nil -} - -func (m *HyperparameterOutput) GetAllMetrics() []*HyperparameterOutput_HyperparameterMetric { - if m != nil { - return m.AllMetrics - } - return nil -} - -// An observed value of a metric. -type HyperparameterOutput_HyperparameterMetric struct { - // The global training step for this metric. - TrainingStep int64 `protobuf:"varint,1,opt,name=training_step,json=trainingStep" json:"training_step,omitempty"` - // The objective value at this training step. - ObjectiveValue float64 `protobuf:"fixed64,2,opt,name=objective_value,json=objectiveValue" json:"objective_value,omitempty"` -} - -func (m *HyperparameterOutput_HyperparameterMetric) Reset() { - *m = HyperparameterOutput_HyperparameterMetric{} -} -func (m *HyperparameterOutput_HyperparameterMetric) String() string { return proto.CompactTextString(m) } -func (*HyperparameterOutput_HyperparameterMetric) ProtoMessage() {} -func (*HyperparameterOutput_HyperparameterMetric) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{3, 0} -} - -func (m *HyperparameterOutput_HyperparameterMetric) GetTrainingStep() int64 { - if m != nil { - return m.TrainingStep - } - return 0 -} - -func (m *HyperparameterOutput_HyperparameterMetric) GetObjectiveValue() float64 { - if m != nil { - return m.ObjectiveValue - } - return 0 -} - -// Represents results of a training job. Output only. -type TrainingOutput struct { - // The number of hyperparameter tuning trials that completed successfully. - // Only set for hyperparameter tuning jobs. - CompletedTrialCount int64 `protobuf:"varint,1,opt,name=completed_trial_count,json=completedTrialCount" json:"completed_trial_count,omitempty"` - // Results for individual Hyperparameter trials. - // Only set for hyperparameter tuning jobs. - Trials []*HyperparameterOutput `protobuf:"bytes,2,rep,name=trials" json:"trials,omitempty"` - // The amount of ML units consumed by the job. - ConsumedMlUnits float64 `protobuf:"fixed64,3,opt,name=consumed_ml_units,json=consumedMlUnits" json:"consumed_ml_units,omitempty"` - // Whether this job is a hyperparameter tuning job. - IsHyperparameterTuningJob bool `protobuf:"varint,4,opt,name=is_hyperparameter_tuning_job,json=isHyperparameterTuningJob" json:"is_hyperparameter_tuning_job,omitempty"` -} - -func (m *TrainingOutput) Reset() { *m = TrainingOutput{} } -func (m *TrainingOutput) String() string { return proto.CompactTextString(m) } -func (*TrainingOutput) ProtoMessage() {} -func (*TrainingOutput) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } - -func (m *TrainingOutput) GetCompletedTrialCount() int64 { - if m != nil { - return m.CompletedTrialCount - } - return 0 -} - -func (m *TrainingOutput) GetTrials() []*HyperparameterOutput { - if m != nil { - return m.Trials - } - return nil -} - -func (m *TrainingOutput) GetConsumedMlUnits() float64 { - if m != nil { - return m.ConsumedMlUnits - } - return 0 -} - -func (m *TrainingOutput) GetIsHyperparameterTuningJob() bool { - if m != nil { - return m.IsHyperparameterTuningJob - } - return false -} - -// Represents input parameters for a prediction job. -type PredictionInput struct { - // Required. The model or the version to use for prediction. - // - // Types that are valid to be assigned to ModelVersion: - // *PredictionInput_ModelName - // *PredictionInput_VersionName - // *PredictionInput_Uri - ModelVersion isPredictionInput_ModelVersion `protobuf_oneof:"model_version"` - // Required. The format of the input data files. - DataFormat PredictionInput_DataFormat `protobuf:"varint,3,opt,name=data_format,json=dataFormat,enum=google.cloud.ml.v1beta1.PredictionInput_DataFormat" json:"data_format,omitempty"` - // Required. The Google Cloud Storage location of the input data files. - // May contain wildcards. - InputPaths []string `protobuf:"bytes,4,rep,name=input_paths,json=inputPaths" json:"input_paths,omitempty"` - // Required. The output Google Cloud Storage location. - OutputPath string `protobuf:"bytes,5,opt,name=output_path,json=outputPath" json:"output_path,omitempty"` - // Optional. The maximum number of workers to be used for parallel processing. - // Defaults to 10 if not specified. - MaxWorkerCount int64 `protobuf:"varint,6,opt,name=max_worker_count,json=maxWorkerCount" json:"max_worker_count,omitempty"` - // Required. The Google Compute Engine region to run the prediction job in. - Region string `protobuf:"bytes,7,opt,name=region" json:"region,omitempty"` - // Optional. The Google Cloud ML runtime version to use for this batch - // prediction. If not set, Google Cloud ML will pick the runtime version used - // during the CreateVersion request for this model version, or choose the - // latest stable version when model version information is not available - // such as when the model is specified by uri. - RuntimeVersion string `protobuf:"bytes,8,opt,name=runtime_version,json=runtimeVersion" json:"runtime_version,omitempty"` -} - -func (m *PredictionInput) Reset() { *m = PredictionInput{} } -func (m *PredictionInput) String() string { return proto.CompactTextString(m) } -func (*PredictionInput) ProtoMessage() {} -func (*PredictionInput) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } - -type isPredictionInput_ModelVersion interface { - isPredictionInput_ModelVersion() -} - -type PredictionInput_ModelName struct { - ModelName string `protobuf:"bytes,1,opt,name=model_name,json=modelName,oneof"` -} -type PredictionInput_VersionName struct { - VersionName string `protobuf:"bytes,2,opt,name=version_name,json=versionName,oneof"` -} -type PredictionInput_Uri struct { - Uri string `protobuf:"bytes,9,opt,name=uri,oneof"` -} - -func (*PredictionInput_ModelName) isPredictionInput_ModelVersion() {} -func (*PredictionInput_VersionName) isPredictionInput_ModelVersion() {} -func (*PredictionInput_Uri) isPredictionInput_ModelVersion() {} - -func (m *PredictionInput) GetModelVersion() isPredictionInput_ModelVersion { - if m != nil { - return m.ModelVersion - } - return nil -} - -func (m *PredictionInput) GetModelName() string { - if x, ok := m.GetModelVersion().(*PredictionInput_ModelName); ok { - return x.ModelName - } - return "" -} - -func (m *PredictionInput) GetVersionName() string { - if x, ok := m.GetModelVersion().(*PredictionInput_VersionName); ok { - return x.VersionName - } - return "" -} - -func (m *PredictionInput) GetUri() string { - if x, ok := m.GetModelVersion().(*PredictionInput_Uri); ok { - return x.Uri - } - return "" -} - -func (m *PredictionInput) GetDataFormat() PredictionInput_DataFormat { - if m != nil { - return m.DataFormat - } - return PredictionInput_DATA_FORMAT_UNSPECIFIED -} - -func (m *PredictionInput) GetInputPaths() []string { - if m != nil { - return m.InputPaths - } - return nil -} - -func (m *PredictionInput) GetOutputPath() string { - if m != nil { - return m.OutputPath - } - return "" -} - -func (m *PredictionInput) GetMaxWorkerCount() int64 { - if m != nil { - return m.MaxWorkerCount - } - return 0 -} - -func (m *PredictionInput) GetRegion() string { - if m != nil { - return m.Region - } - return "" -} - -func (m *PredictionInput) GetRuntimeVersion() string { - if m != nil { - return m.RuntimeVersion - } - return "" -} - -// XXX_OneofFuncs is for the internal use of the proto package. -func (*PredictionInput) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _PredictionInput_OneofMarshaler, _PredictionInput_OneofUnmarshaler, _PredictionInput_OneofSizer, []interface{}{ - (*PredictionInput_ModelName)(nil), - (*PredictionInput_VersionName)(nil), - (*PredictionInput_Uri)(nil), - } -} - -func _PredictionInput_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*PredictionInput) - // model_version - switch x := m.ModelVersion.(type) { - case *PredictionInput_ModelName: - b.EncodeVarint(1<<3 | proto.WireBytes) - b.EncodeStringBytes(x.ModelName) - case *PredictionInput_VersionName: - b.EncodeVarint(2<<3 | proto.WireBytes) - b.EncodeStringBytes(x.VersionName) - case *PredictionInput_Uri: - b.EncodeVarint(9<<3 | proto.WireBytes) - b.EncodeStringBytes(x.Uri) - case nil: - default: - return fmt.Errorf("PredictionInput.ModelVersion has unexpected type %T", x) - } - return nil -} - -func _PredictionInput_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*PredictionInput) - switch tag { - case 1: // model_version.model_name - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.ModelVersion = &PredictionInput_ModelName{x} - return true, err - case 2: // model_version.version_name - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.ModelVersion = &PredictionInput_VersionName{x} - return true, err - case 9: // model_version.uri - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.ModelVersion = &PredictionInput_Uri{x} - return true, err - default: - return false, nil - } -} - -func _PredictionInput_OneofSizer(msg proto.Message) (n int) { - m := msg.(*PredictionInput) - // model_version - switch x := m.ModelVersion.(type) { - case *PredictionInput_ModelName: - n += proto.SizeVarint(1<<3 | proto.WireBytes) - n += proto.SizeVarint(uint64(len(x.ModelName))) - n += len(x.ModelName) - case *PredictionInput_VersionName: - n += proto.SizeVarint(2<<3 | proto.WireBytes) - n += proto.SizeVarint(uint64(len(x.VersionName))) - n += len(x.VersionName) - case *PredictionInput_Uri: - n += proto.SizeVarint(9<<3 | proto.WireBytes) - n += proto.SizeVarint(uint64(len(x.Uri))) - n += len(x.Uri) - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -// Represents results of a prediction job. -type PredictionOutput struct { - // The output Google Cloud Storage location provided at the job creation time. - OutputPath string `protobuf:"bytes,1,opt,name=output_path,json=outputPath" json:"output_path,omitempty"` - // The number of generated predictions. - PredictionCount int64 `protobuf:"varint,2,opt,name=prediction_count,json=predictionCount" json:"prediction_count,omitempty"` - // The number of data instances which resulted in errors. - ErrorCount int64 `protobuf:"varint,3,opt,name=error_count,json=errorCount" json:"error_count,omitempty"` - // Node hours used by the batch prediction job. - NodeHours float64 `protobuf:"fixed64,4,opt,name=node_hours,json=nodeHours" json:"node_hours,omitempty"` -} - -func (m *PredictionOutput) Reset() { *m = PredictionOutput{} } -func (m *PredictionOutput) String() string { return proto.CompactTextString(m) } -func (*PredictionOutput) ProtoMessage() {} -func (*PredictionOutput) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } - -func (m *PredictionOutput) GetOutputPath() string { - if m != nil { - return m.OutputPath - } - return "" -} - -func (m *PredictionOutput) GetPredictionCount() int64 { - if m != nil { - return m.PredictionCount - } - return 0 -} - -func (m *PredictionOutput) GetErrorCount() int64 { - if m != nil { - return m.ErrorCount - } - return 0 -} - -func (m *PredictionOutput) GetNodeHours() float64 { - if m != nil { - return m.NodeHours - } - return 0 -} - -// Represents a training or prediction job. -type Job struct { - // Required. The user-specified id of the job. - JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId" json:"job_id,omitempty"` - // Required. Parameters to create a job. - // - // Types that are valid to be assigned to Input: - // *Job_TrainingInput - // *Job_PredictionInput - Input isJob_Input `protobuf_oneof:"input"` - // Output only. When the job was created. - CreateTime *google_protobuf2.Timestamp `protobuf:"bytes,4,opt,name=create_time,json=createTime" json:"create_time,omitempty"` - // Output only. When the job processing was started. - StartTime *google_protobuf2.Timestamp `protobuf:"bytes,5,opt,name=start_time,json=startTime" json:"start_time,omitempty"` - // Output only. When the job processing was completed. - EndTime *google_protobuf2.Timestamp `protobuf:"bytes,6,opt,name=end_time,json=endTime" json:"end_time,omitempty"` - // Output only. The detailed state of a job. - State Job_State `protobuf:"varint,7,opt,name=state,enum=google.cloud.ml.v1beta1.Job_State" json:"state,omitempty"` - // Output only. The details of a failure or a cancellation. - ErrorMessage string `protobuf:"bytes,8,opt,name=error_message,json=errorMessage" json:"error_message,omitempty"` - // Output only. The current result of the job. - // - // Types that are valid to be assigned to Output: - // *Job_TrainingOutput - // *Job_PredictionOutput - Output isJob_Output `protobuf_oneof:"output"` -} - -func (m *Job) Reset() { *m = Job{} } -func (m *Job) String() string { return proto.CompactTextString(m) } -func (*Job) ProtoMessage() {} -func (*Job) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } - -type isJob_Input interface { - isJob_Input() -} -type isJob_Output interface { - isJob_Output() -} - -type Job_TrainingInput struct { - TrainingInput *TrainingInput `protobuf:"bytes,2,opt,name=training_input,json=trainingInput,oneof"` -} -type Job_PredictionInput struct { - PredictionInput *PredictionInput `protobuf:"bytes,3,opt,name=prediction_input,json=predictionInput,oneof"` -} -type Job_TrainingOutput struct { - TrainingOutput *TrainingOutput `protobuf:"bytes,9,opt,name=training_output,json=trainingOutput,oneof"` -} -type Job_PredictionOutput struct { - PredictionOutput *PredictionOutput `protobuf:"bytes,10,opt,name=prediction_output,json=predictionOutput,oneof"` -} - -func (*Job_TrainingInput) isJob_Input() {} -func (*Job_PredictionInput) isJob_Input() {} -func (*Job_TrainingOutput) isJob_Output() {} -func (*Job_PredictionOutput) isJob_Output() {} - -func (m *Job) GetInput() isJob_Input { - if m != nil { - return m.Input - } - return nil -} -func (m *Job) GetOutput() isJob_Output { - if m != nil { - return m.Output - } - return nil -} - -func (m *Job) GetJobId() string { - if m != nil { - return m.JobId - } - return "" -} - -func (m *Job) GetTrainingInput() *TrainingInput { - if x, ok := m.GetInput().(*Job_TrainingInput); ok { - return x.TrainingInput - } - return nil -} - -func (m *Job) GetPredictionInput() *PredictionInput { - if x, ok := m.GetInput().(*Job_PredictionInput); ok { - return x.PredictionInput - } - return nil -} - -func (m *Job) GetCreateTime() *google_protobuf2.Timestamp { - if m != nil { - return m.CreateTime - } - return nil -} - -func (m *Job) GetStartTime() *google_protobuf2.Timestamp { - if m != nil { - return m.StartTime - } - return nil -} - -func (m *Job) GetEndTime() *google_protobuf2.Timestamp { - if m != nil { - return m.EndTime - } - return nil -} - -func (m *Job) GetState() Job_State { - if m != nil { - return m.State - } - return Job_STATE_UNSPECIFIED -} - -func (m *Job) GetErrorMessage() string { - if m != nil { - return m.ErrorMessage - } - return "" -} - -func (m *Job) GetTrainingOutput() *TrainingOutput { - if x, ok := m.GetOutput().(*Job_TrainingOutput); ok { - return x.TrainingOutput - } - return nil -} - -func (m *Job) GetPredictionOutput() *PredictionOutput { - if x, ok := m.GetOutput().(*Job_PredictionOutput); ok { - return x.PredictionOutput - } - return nil -} - -// XXX_OneofFuncs is for the internal use of the proto package. -func (*Job) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _Job_OneofMarshaler, _Job_OneofUnmarshaler, _Job_OneofSizer, []interface{}{ - (*Job_TrainingInput)(nil), - (*Job_PredictionInput)(nil), - (*Job_TrainingOutput)(nil), - (*Job_PredictionOutput)(nil), - } -} - -func _Job_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*Job) - // input - switch x := m.Input.(type) { - case *Job_TrainingInput: - b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.TrainingInput); err != nil { - return err - } - case *Job_PredictionInput: - b.EncodeVarint(3<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.PredictionInput); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("Job.Input has unexpected type %T", x) - } - // output - switch x := m.Output.(type) { - case *Job_TrainingOutput: - b.EncodeVarint(9<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.TrainingOutput); err != nil { - return err - } - case *Job_PredictionOutput: - b.EncodeVarint(10<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.PredictionOutput); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("Job.Output has unexpected type %T", x) - } - return nil -} - -func _Job_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*Job) - switch tag { - case 2: // input.training_input - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(TrainingInput) - err := b.DecodeMessage(msg) - m.Input = &Job_TrainingInput{msg} - return true, err - case 3: // input.prediction_input - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(PredictionInput) - err := b.DecodeMessage(msg) - m.Input = &Job_PredictionInput{msg} - return true, err - case 9: // output.training_output - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(TrainingOutput) - err := b.DecodeMessage(msg) - m.Output = &Job_TrainingOutput{msg} - return true, err - case 10: // output.prediction_output - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(PredictionOutput) - err := b.DecodeMessage(msg) - m.Output = &Job_PredictionOutput{msg} - return true, err - default: - return false, nil - } -} - -func _Job_OneofSizer(msg proto.Message) (n int) { - m := msg.(*Job) - // input - switch x := m.Input.(type) { - case *Job_TrainingInput: - s := proto.Size(x.TrainingInput) - n += proto.SizeVarint(2<<3 | proto.WireBytes) - n += proto.SizeVarint(uint64(s)) - n += s - case *Job_PredictionInput: - s := proto.Size(x.PredictionInput) - n += proto.SizeVarint(3<<3 | proto.WireBytes) - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - // output - switch x := m.Output.(type) { - case *Job_TrainingOutput: - s := proto.Size(x.TrainingOutput) - n += proto.SizeVarint(9<<3 | proto.WireBytes) - n += proto.SizeVarint(uint64(s)) - n += s - case *Job_PredictionOutput: - s := proto.Size(x.PredictionOutput) - n += proto.SizeVarint(10<<3 | proto.WireBytes) - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -// Request message for the CreateJob method. -type CreateJobRequest struct { - // Required. The project name. - // - // Authorization: requires `Editor` role on the specified project. - Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` - // Required. The job to create. - Job *Job `protobuf:"bytes,2,opt,name=job" json:"job,omitempty"` -} - -func (m *CreateJobRequest) Reset() { *m = CreateJobRequest{} } -func (m *CreateJobRequest) String() string { return proto.CompactTextString(m) } -func (*CreateJobRequest) ProtoMessage() {} -func (*CreateJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } - -func (m *CreateJobRequest) GetParent() string { - if m != nil { - return m.Parent - } - return "" -} - -func (m *CreateJobRequest) GetJob() *Job { - if m != nil { - return m.Job - } - return nil -} - -// Request message for the ListJobs method. -type ListJobsRequest struct { - // Required. The name of the project for which to list jobs. - // - // Authorization: requires `Viewer` role on the specified project. - Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` - // Optional. Specifies the subset of jobs to retrieve. - Filter string `protobuf:"bytes,2,opt,name=filter" json:"filter,omitempty"` - // Optional. A page token to request the next page of results. - // - // You get the token from the `next_page_token` field of the response from - // the previous call. - PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` - // Optional. The number of jobs to retrieve per "page" of results. If there - // are more remaining results than this number, the response message will - // contain a valid value in the `next_page_token` field. - // - // The default value is 20, and the maximum page size is 100. - PageSize int32 `protobuf:"varint,5,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` -} - -func (m *ListJobsRequest) Reset() { *m = ListJobsRequest{} } -func (m *ListJobsRequest) String() string { return proto.CompactTextString(m) } -func (*ListJobsRequest) ProtoMessage() {} -func (*ListJobsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } - -func (m *ListJobsRequest) GetParent() string { - if m != nil { - return m.Parent - } - return "" -} - -func (m *ListJobsRequest) GetFilter() string { - if m != nil { - return m.Filter - } - return "" -} - -func (m *ListJobsRequest) GetPageToken() string { - if m != nil { - return m.PageToken - } - return "" -} - -func (m *ListJobsRequest) GetPageSize() int32 { - if m != nil { - return m.PageSize - } - return 0 -} - -// Response message for the ListJobs method. -type ListJobsResponse struct { - // The list of jobs. - Jobs []*Job `protobuf:"bytes,1,rep,name=jobs" json:"jobs,omitempty"` - // Optional. Pass this token as the `page_token` field of the request for a - // subsequent call. - NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` -} - -func (m *ListJobsResponse) Reset() { *m = ListJobsResponse{} } -func (m *ListJobsResponse) String() string { return proto.CompactTextString(m) } -func (*ListJobsResponse) ProtoMessage() {} -func (*ListJobsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } - -func (m *ListJobsResponse) GetJobs() []*Job { - if m != nil { - return m.Jobs - } - return nil -} - -func (m *ListJobsResponse) GetNextPageToken() string { - if m != nil { - return m.NextPageToken - } - return "" -} - -// Request message for the GetJob method. -type GetJobRequest struct { - // Required. The name of the job to get the description of. - // - // Authorization: requires `Viewer` role on the parent project. - Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` -} - -func (m *GetJobRequest) Reset() { *m = GetJobRequest{} } -func (m *GetJobRequest) String() string { return proto.CompactTextString(m) } -func (*GetJobRequest) ProtoMessage() {} -func (*GetJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } - -func (m *GetJobRequest) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -// Request message for the CancelJob method. -type CancelJobRequest struct { - // Required. The name of the job to cancel. - // - // Authorization: requires `Editor` role on the parent project. - Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` -} - -func (m *CancelJobRequest) Reset() { *m = CancelJobRequest{} } -func (m *CancelJobRequest) String() string { return proto.CompactTextString(m) } -func (*CancelJobRequest) ProtoMessage() {} -func (*CancelJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } - -func (m *CancelJobRequest) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func init() { - proto.RegisterType((*TrainingInput)(nil), "google.cloud.ml.v1beta1.TrainingInput") - proto.RegisterType((*HyperparameterSpec)(nil), "google.cloud.ml.v1beta1.HyperparameterSpec") - proto.RegisterType((*ParameterSpec)(nil), "google.cloud.ml.v1beta1.ParameterSpec") - proto.RegisterType((*HyperparameterOutput)(nil), "google.cloud.ml.v1beta1.HyperparameterOutput") - proto.RegisterType((*HyperparameterOutput_HyperparameterMetric)(nil), "google.cloud.ml.v1beta1.HyperparameterOutput.HyperparameterMetric") - proto.RegisterType((*TrainingOutput)(nil), "google.cloud.ml.v1beta1.TrainingOutput") - proto.RegisterType((*PredictionInput)(nil), "google.cloud.ml.v1beta1.PredictionInput") - proto.RegisterType((*PredictionOutput)(nil), "google.cloud.ml.v1beta1.PredictionOutput") - proto.RegisterType((*Job)(nil), "google.cloud.ml.v1beta1.Job") - proto.RegisterType((*CreateJobRequest)(nil), "google.cloud.ml.v1beta1.CreateJobRequest") - proto.RegisterType((*ListJobsRequest)(nil), "google.cloud.ml.v1beta1.ListJobsRequest") - proto.RegisterType((*ListJobsResponse)(nil), "google.cloud.ml.v1beta1.ListJobsResponse") - proto.RegisterType((*GetJobRequest)(nil), "google.cloud.ml.v1beta1.GetJobRequest") - proto.RegisterType((*CancelJobRequest)(nil), "google.cloud.ml.v1beta1.CancelJobRequest") - proto.RegisterEnum("google.cloud.ml.v1beta1.TrainingInput_ScaleTier", TrainingInput_ScaleTier_name, TrainingInput_ScaleTier_value) - proto.RegisterEnum("google.cloud.ml.v1beta1.HyperparameterSpec_GoalType", HyperparameterSpec_GoalType_name, HyperparameterSpec_GoalType_value) - proto.RegisterEnum("google.cloud.ml.v1beta1.ParameterSpec_ParameterType", ParameterSpec_ParameterType_name, ParameterSpec_ParameterType_value) - proto.RegisterEnum("google.cloud.ml.v1beta1.ParameterSpec_ScaleType", ParameterSpec_ScaleType_name, ParameterSpec_ScaleType_value) - proto.RegisterEnum("google.cloud.ml.v1beta1.PredictionInput_DataFormat", PredictionInput_DataFormat_name, PredictionInput_DataFormat_value) - proto.RegisterEnum("google.cloud.ml.v1beta1.Job_State", Job_State_name, Job_State_value) -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 - -// Client API for JobService service - -type JobServiceClient interface { - // Creates a training or a batch prediction job. - CreateJob(ctx context.Context, in *CreateJobRequest, opts ...grpc.CallOption) (*Job, error) - // Lists the jobs in the project. - ListJobs(ctx context.Context, in *ListJobsRequest, opts ...grpc.CallOption) (*ListJobsResponse, error) - // Describes a job. - GetJob(ctx context.Context, in *GetJobRequest, opts ...grpc.CallOption) (*Job, error) - // Cancels a running job. - CancelJob(ctx context.Context, in *CancelJobRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) -} - -type jobServiceClient struct { - cc *grpc.ClientConn -} - -func NewJobServiceClient(cc *grpc.ClientConn) JobServiceClient { - return &jobServiceClient{cc} -} - -func (c *jobServiceClient) CreateJob(ctx context.Context, in *CreateJobRequest, opts ...grpc.CallOption) (*Job, error) { - out := new(Job) - err := grpc.Invoke(ctx, "/google.cloud.ml.v1beta1.JobService/CreateJob", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *jobServiceClient) ListJobs(ctx context.Context, in *ListJobsRequest, opts ...grpc.CallOption) (*ListJobsResponse, error) { - out := new(ListJobsResponse) - err := grpc.Invoke(ctx, "/google.cloud.ml.v1beta1.JobService/ListJobs", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *jobServiceClient) GetJob(ctx context.Context, in *GetJobRequest, opts ...grpc.CallOption) (*Job, error) { - out := new(Job) - err := grpc.Invoke(ctx, "/google.cloud.ml.v1beta1.JobService/GetJob", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *jobServiceClient) CancelJob(ctx context.Context, in *CancelJobRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) { - out := new(google_protobuf1.Empty) - err := grpc.Invoke(ctx, "/google.cloud.ml.v1beta1.JobService/CancelJob", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// Server API for JobService service - -type JobServiceServer interface { - // Creates a training or a batch prediction job. - CreateJob(context.Context, *CreateJobRequest) (*Job, error) - // Lists the jobs in the project. - ListJobs(context.Context, *ListJobsRequest) (*ListJobsResponse, error) - // Describes a job. - GetJob(context.Context, *GetJobRequest) (*Job, error) - // Cancels a running job. - CancelJob(context.Context, *CancelJobRequest) (*google_protobuf1.Empty, error) -} - -func RegisterJobServiceServer(s *grpc.Server, srv JobServiceServer) { - s.RegisterService(&_JobService_serviceDesc, srv) -} - -func _JobService_CreateJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CreateJobRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(JobServiceServer).CreateJob(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/google.cloud.ml.v1beta1.JobService/CreateJob", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(JobServiceServer).CreateJob(ctx, req.(*CreateJobRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _JobService_ListJobs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ListJobsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(JobServiceServer).ListJobs(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/google.cloud.ml.v1beta1.JobService/ListJobs", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(JobServiceServer).ListJobs(ctx, req.(*ListJobsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _JobService_GetJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetJobRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(JobServiceServer).GetJob(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/google.cloud.ml.v1beta1.JobService/GetJob", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(JobServiceServer).GetJob(ctx, req.(*GetJobRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _JobService_CancelJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CancelJobRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(JobServiceServer).CancelJob(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/google.cloud.ml.v1beta1.JobService/CancelJob", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(JobServiceServer).CancelJob(ctx, req.(*CancelJobRequest)) - } - return interceptor(ctx, in, info, handler) -} - -var _JobService_serviceDesc = grpc.ServiceDesc{ - ServiceName: "google.cloud.ml.v1beta1.JobService", - HandlerType: (*JobServiceServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "CreateJob", - Handler: _JobService_CreateJob_Handler, - }, - { - MethodName: "ListJobs", - Handler: _JobService_ListJobs_Handler, - }, - { - MethodName: "GetJob", - Handler: _JobService_GetJob_Handler, - }, - { - MethodName: "CancelJob", - Handler: _JobService_CancelJob_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "google/cloud/ml/v1beta1/job_service.proto", -} - -func init() { proto.RegisterFile("google/cloud/ml/v1beta1/job_service.proto", fileDescriptor0) } - -var fileDescriptor0 = []byte{ - // 2082 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0x4b, 0x6f, 0x1b, 0xc9, - 0x11, 0x16, 0x9f, 0x22, 0x8b, 0x12, 0x39, 0x6e, 0x5b, 0x36, 0x2d, 0x7b, 0x63, 0x79, 0x8c, 0x78, - 0x65, 0x07, 0x26, 0xd7, 0xf2, 0x06, 0xd8, 0xf5, 0x22, 0x09, 0x28, 0x72, 0x2c, 0x51, 0x10, 0x1f, - 0x69, 0x0e, 0x1d, 0xc7, 0x08, 0x30, 0x68, 0x92, 0x6d, 0x7a, 0xe4, 0x99, 0xe9, 0xc9, 0x4c, 0xd3, - 0x91, 0x36, 0x30, 0x10, 0x24, 0x39, 0xe5, 0x90, 0x4b, 0x90, 0x1c, 0x03, 0xe4, 0x9a, 0xbf, 0x93, - 0x43, 0xfe, 0x40, 0x8e, 0xf9, 0x01, 0x39, 0x06, 0xfd, 0xe0, 0x53, 0x96, 0xe4, 0x45, 0x72, 0x63, - 0x7f, 0xf5, 0x55, 0x55, 0x77, 0x55, 0x75, 0x4d, 0x35, 0xe1, 0xd1, 0x98, 0xb1, 0xb1, 0x47, 0xab, - 0x43, 0x8f, 0x4d, 0x46, 0x55, 0xdf, 0xab, 0xbe, 0x7f, 0x3a, 0xa0, 0x9c, 0x3c, 0xad, 0x9e, 0xb0, - 0x81, 0x13, 0xd3, 0xe8, 0xbd, 0x3b, 0xa4, 0x95, 0x30, 0x62, 0x9c, 0xa1, 0x5b, 0x8a, 0x5a, 0x91, - 0xd4, 0x8a, 0xef, 0x55, 0x34, 0x75, 0xfb, 0xae, 0xb6, 0x41, 0x42, 0xb7, 0x4a, 0x82, 0x80, 0x71, - 0xc2, 0x5d, 0x16, 0xc4, 0x4a, 0x6d, 0x7b, 0x6b, 0x51, 0x3a, 0xe1, 0x6f, 0x35, 0x7c, 0x47, 0xc3, - 0x72, 0x35, 0x98, 0xbc, 0xa9, 0x52, 0x3f, 0xe4, 0x67, 0x5a, 0x78, 0x6f, 0x55, 0xc8, 0x5d, 0x9f, - 0xc6, 0x9c, 0xf8, 0xa1, 0x22, 0x98, 0x7f, 0xcc, 0xc0, 0xa6, 0x1d, 0x11, 0x37, 0x70, 0x83, 0x71, - 0x33, 0x08, 0x27, 0x1c, 0x75, 0x00, 0xe2, 0x21, 0xf1, 0xa8, 0xc3, 0x5d, 0x1a, 0x95, 0x13, 0x3b, - 0x89, 0xdd, 0xe2, 0xde, 0x17, 0x95, 0x0b, 0xb6, 0x5c, 0x59, 0xd2, 0xad, 0xf4, 0x84, 0xa2, 0xed, - 0xd2, 0x08, 0xe7, 0xe3, 0xe9, 0x4f, 0x74, 0x0f, 0x0a, 0x3e, 0x89, 0x39, 0x8d, 0x1c, 0x7e, 0x16, - 0xd2, 0x72, 0x72, 0x27, 0xb1, 0x9b, 0xc7, 0xa0, 0x20, 0xfb, 0x2c, 0xa4, 0x82, 0xf0, 0x2b, 0x16, - 0xbd, 0x9b, 0x12, 0x52, 0x8a, 0xa0, 0x20, 0x49, 0xd8, 0x83, 0xad, 0x90, 0x44, 0xc4, 0xa7, 0xc2, - 0x88, 0x88, 0xe5, 0x94, 0x9a, 0x96, 0xd4, 0xeb, 0x33, 0x61, 0x4f, 0xca, 0xa4, 0xce, 0x7d, 0xd8, - 0xd0, 0x46, 0x87, 0x6c, 0x12, 0xf0, 0x72, 0x66, 0x27, 0xb1, 0x9b, 0xc2, 0xda, 0x51, 0x5d, 0x40, - 0xe8, 0x4b, 0xb8, 0x79, 0xce, 0xac, 0x22, 0x67, 0x25, 0xf9, 0xc6, 0x8a, 0x5d, 0xa5, 0x75, 0x1f, - 0x36, 0x42, 0x32, 0x7c, 0x47, 0xc6, 0xd4, 0x99, 0x44, 0x6e, 0x5c, 0x5e, 0xdf, 0x49, 0xed, 0xe6, - 0x71, 0x41, 0x63, 0xfd, 0xc8, 0x8d, 0xd1, 0x03, 0xd8, 0x0c, 0xcf, 0xf8, 0x5b, 0x16, 0x38, 0x3e, - 0x1b, 0x4d, 0x3c, 0x5a, 0xce, 0xc9, 0x7d, 0x6e, 0x28, 0xb0, 0x25, 0x31, 0x84, 0x20, 0x4d, 0xa2, - 0x71, 0x5c, 0x06, 0xa9, 0x2f, 0x7f, 0xa3, 0x3e, 0x94, 0xde, 0x9e, 0x85, 0x34, 0x9a, 0x39, 0x8e, - 0xcb, 0x1b, 0x3b, 0x89, 0xdd, 0xc2, 0xde, 0x0f, 0x2e, 0x4c, 0xc0, 0xe1, 0x12, 0xbf, 0x17, 0xd2, - 0x21, 0x5e, 0xb5, 0x81, 0x6e, 0x42, 0x36, 0xa2, 0x63, 0x97, 0x05, 0xe5, 0xa2, 0xdc, 0x88, 0x5e, - 0xa1, 0x5b, 0xb0, 0x2e, 0xaa, 0x73, 0xe4, 0x46, 0x65, 0x43, 0x09, 0x4e, 0xd8, 0xa0, 0xe1, 0x46, - 0xe8, 0x73, 0x28, 0x45, 0x93, 0x40, 0xd4, 0x8a, 0xf3, 0x9e, 0x46, 0xb1, 0xd0, 0x2c, 0x49, 0x42, - 0x51, 0xc3, 0x2f, 0x15, 0x6a, 0x76, 0x21, 0x3f, 0xcb, 0x39, 0xca, 0x43, 0x66, 0xbf, 0xd6, 0x6b, - 0xd6, 0x8d, 0x35, 0x54, 0x04, 0xe8, 0xd9, 0xb5, 0x76, 0xa3, 0x86, 0x1b, 0xce, 0x53, 0x23, 0x81, - 0x36, 0x21, 0xdf, 0xc5, 0x56, 0xab, 0xd9, 0x6f, 0x39, 0x4f, 0x8d, 0x94, 0x58, 0x4a, 0xa6, 0x73, - 0xd0, 0xed, 0x1b, 0x59, 0x04, 0x90, 0xad, 0xf7, 0x7b, 0x76, 0xa7, 0x65, 0x64, 0xcc, 0x7f, 0x27, - 0x01, 0x9d, 0x3f, 0x13, 0x3a, 0x84, 0xf4, 0x98, 0x11, 0x4f, 0xd7, 0xe3, 0x97, 0xdf, 0x21, 0x1c, - 0x95, 0x03, 0x46, 0x3c, 0x51, 0x12, 0x58, 0x5a, 0x40, 0x3f, 0x86, 0xac, 0x94, 0xc7, 0xe5, 0xe4, - 0x4e, 0x6a, 0xb7, 0xb0, 0xf7, 0xf0, 0x42, 0x5b, 0xdd, 0xa5, 0xa8, 0x6a, 0x2d, 0xf4, 0x19, 0x80, - 0x4f, 0x4e, 0x1d, 0x1e, 0xb9, 0xc4, 0x8b, 0x65, 0xb1, 0x66, 0x70, 0xde, 0x27, 0xa7, 0xb6, 0x04, - 0x50, 0x05, 0xae, 0x0b, 0xb1, 0x20, 0x7b, 0x1e, 0xf5, 0xa6, 0xbc, 0xb4, 0xe4, 0x5d, 0xf3, 0xc9, - 0x69, 0x57, 0x4b, 0x34, 0xff, 0x39, 0xdc, 0x5e, 0x4e, 0x97, 0xe3, 0x53, 0x1e, 0xb9, 0x43, 0x87, - 0x93, 0xb1, 0x2c, 0xda, 0x3c, 0xbe, 0xb5, 0x4c, 0x68, 0x49, 0xb9, 0x4d, 0xc6, 0x66, 0x0d, 0x72, - 0xd3, 0xc3, 0xa1, 0xdb, 0xb0, 0x75, 0xd0, 0xa9, 0x1d, 0x3b, 0xf6, 0xcf, 0xbb, 0x96, 0xd3, 0x6f, - 0xf7, 0xba, 0x56, 0xbd, 0xf9, 0xa2, 0x69, 0x35, 0x8c, 0x35, 0xb4, 0x01, 0xb9, 0x56, 0xed, 0x55, - 0xb3, 0xd5, 0x7c, 0x6d, 0x19, 0x09, 0xb9, 0x6a, 0xb6, 0xd5, 0x2a, 0x69, 0xfe, 0x3d, 0x0d, 0x9b, - 0x4b, 0xe7, 0x44, 0xdf, 0x87, 0xe2, 0x7c, 0x2f, 0x01, 0xf1, 0xa9, 0x8c, 0x79, 0x1e, 0x6f, 0xce, - 0xd0, 0x36, 0xf1, 0xa9, 0x48, 0xc8, 0xec, 0x0a, 0x5e, 0x96, 0x90, 0x25, 0xe3, 0xf3, 0x95, 0x4a, - 0x88, 0xb0, 0x80, 0xee, 0x40, 0xde, 0x77, 0x03, 0xe7, 0x3d, 0xf1, 0x26, 0xaa, 0x3b, 0x24, 0x70, - 0xce, 0x77, 0x83, 0x97, 0x62, 0x2d, 0x85, 0xe4, 0x54, 0x0b, 0x53, 0x5a, 0x48, 0x4e, 0x95, 0xf0, - 0x09, 0xa0, 0x21, 0xe1, 0x74, 0xcc, 0x22, 0x77, 0x48, 0x3c, 0x45, 0x8a, 0xcb, 0x19, 0x79, 0xa1, - 0xae, 0x2d, 0x48, 0x24, 0x3b, 0x16, 0x55, 0x3d, 0x72, 0xe3, 0x61, 0x44, 0x39, 0x9d, 0x72, 0xb3, - 0x3b, 0xa9, 0xdd, 0x04, 0x2e, 0x4e, 0x61, 0x4d, 0x9c, 0xb7, 0x40, 0x71, 0xc2, 0xf5, 0x2b, 0x5a, - 0xe0, 0xf2, 0x09, 0xd5, 0x75, 0x10, 0xa7, 0xd3, 0x2d, 0xf0, 0x2c, 0xa4, 0xe6, 0x78, 0x21, 0xc8, - 0x32, 0x5b, 0xdf, 0x83, 0xed, 0x6e, 0x0d, 0xd7, 0x5a, 0x96, 0x6d, 0xe1, 0x8f, 0xa5, 0x0c, 0x20, - 0xdb, 0xe8, 0xf4, 0xf7, 0x8f, 0x45, 0xc2, 0x0a, 0xb0, 0xde, 0x6c, 0xdb, 0xd6, 0x81, 0x85, 0x8d, - 0x24, 0x2a, 0x41, 0xa1, 0x5e, 0xb3, 0xad, 0x83, 0x0e, 0x6e, 0xd6, 0x6b, 0xc7, 0x46, 0x4a, 0xa4, - 0xb3, 0xd1, 0xec, 0xd5, 0xb1, 0x65, 0x5b, 0x46, 0xda, 0xfc, 0xc5, 0xf4, 0x3e, 0x0a, 0x27, 0x39, - 0x48, 0xb7, 0x3b, 0x6d, 0xcb, 0x58, 0x43, 0x5b, 0x70, 0xad, 0xdf, 0x6e, 0xda, 0xce, 0x71, 0xb3, - 0x6d, 0xd5, 0xb0, 0xd3, 0xab, 0xd7, 0xa4, 0x65, 0x04, 0x45, 0x05, 0x77, 0x0e, 0x34, 0x96, 0x44, - 0xdb, 0x70, 0x53, 0x62, 0xd8, 0x7a, 0x69, 0xe1, 0x9e, 0xb5, 0x20, 0x4b, 0x99, 0x7f, 0x4e, 0xc3, - 0x8d, 0xe5, 0x0b, 0xd6, 0x99, 0x70, 0xf1, 0xcd, 0xb8, 0x0d, 0x39, 0x59, 0xe7, 0x8e, 0x3b, 0xd2, - 0xd5, 0xb2, 0x2e, 0xd7, 0xcd, 0x11, 0xf2, 0xce, 0xb7, 0x34, 0x75, 0xef, 0xf6, 0x3f, 0xf1, 0x0e, - 0x2b, 0x17, 0x2b, 0x60, 0x6c, 0x05, 0x3c, 0x3a, 0x3b, 0xdf, 0xe9, 0x28, 0x6c, 0xbc, 0x71, 0x03, - 0xe2, 0xe9, 0x4b, 0x24, 0x2b, 0xe6, 0x7f, 0x74, 0xa5, 0xae, 0x1b, 0x2e, 0x48, 0xbb, 0x6a, 0x81, - 0x86, 0x50, 0x20, 0xde, 0xd4, 0x89, 0xb8, 0xdc, 0xa9, 0xff, 0x93, 0x17, 0x20, 0x9e, 0xf6, 0x11, - 0x6f, 0x8f, 0x56, 0x83, 0xad, 0x9d, 0x3f, 0x80, 0x4d, 0xae, 0xbf, 0xba, 0x4e, 0xcc, 0x69, 0x28, - 0x23, 0x9e, 0xc2, 0x1b, 0x53, 0xb0, 0xc7, 0x69, 0x28, 0x6a, 0x9d, 0x0d, 0x4e, 0xe8, 0x90, 0xbb, - 0xef, 0xe9, 0xd2, 0xd5, 0x2a, 0xce, 0x60, 0x59, 0xec, 0xdb, 0xfb, 0xab, 0x5e, 0x54, 0x68, 0x91, - 0x01, 0xa9, 0x77, 0xf4, 0x4c, 0x67, 0x53, 0xfc, 0x44, 0x37, 0x20, 0x33, 0x37, 0x94, 0xc7, 0x6a, - 0xf1, 0x3c, 0xf9, 0x55, 0xc2, 0xfc, 0x4f, 0x02, 0x8a, 0xd3, 0x41, 0x40, 0x57, 0xc4, 0x1e, 0x6c, - 0x0d, 0x99, 0x1f, 0x7a, 0x94, 0xd3, 0x91, 0xea, 0x81, 0xfa, 0xd3, 0xaa, 0x36, 0x7b, 0x7d, 0x26, - 0x94, 0x6d, 0x50, 0x7d, 0x59, 0x2d, 0xc8, 0xea, 0x6e, 0xa9, 0x2a, 0xe4, 0xc9, 0x77, 0x0a, 0x28, - 0xd6, 0xca, 0xe8, 0x31, 0x5c, 0x1b, 0xb2, 0x20, 0x9e, 0xf8, 0x74, 0xe4, 0xf8, 0x9e, 0x33, 0x09, - 0x5c, 0x1e, 0xeb, 0xd6, 0x51, 0x9a, 0x0a, 0x5a, 0x5e, 0x5f, 0xc0, 0xe8, 0x27, 0x70, 0xd7, 0x8d, - 0x9d, 0x95, 0x06, 0xcc, 0x27, 0x32, 0xb6, 0x27, 0x6c, 0x20, 0xbb, 0x5b, 0x0e, 0xdf, 0x76, 0xe3, - 0x65, 0x8f, 0xb6, 0x64, 0x1c, 0xb1, 0x81, 0xf9, 0xcf, 0x14, 0x94, 0xba, 0x11, 0x1d, 0xb9, 0x43, - 0x31, 0xaa, 0xa9, 0x09, 0xea, 0x1e, 0x80, 0xcf, 0x46, 0xd4, 0x5b, 0xe8, 0x9e, 0x87, 0x6b, 0x38, - 0x2f, 0x31, 0xd9, 0x3b, 0x1f, 0xc0, 0x86, 0xfe, 0xac, 0x2a, 0x4a, 0x52, 0x53, 0x0a, 0x1a, 0x95, - 0x24, 0x04, 0xa9, 0x49, 0xe4, 0x96, 0xf3, 0x5a, 0x26, 0x16, 0xc8, 0x86, 0xc2, 0x88, 0x70, 0xe2, - 0xbc, 0x61, 0x91, 0x4f, 0xb8, 0x3c, 0x54, 0x71, 0xef, 0xd9, 0xc5, 0x9d, 0x69, 0x79, 0x63, 0x95, - 0x06, 0xe1, 0xe4, 0x85, 0x54, 0xc5, 0x30, 0x9a, 0xfd, 0x16, 0xf3, 0x97, 0x2b, 0xe4, 0x4e, 0x48, - 0xf8, 0x5b, 0x55, 0xcd, 0x79, 0x0c, 0x12, 0xea, 0x0a, 0x44, 0x10, 0x98, 0x8c, 0xb1, 0x64, 0xe8, - 0xaf, 0x12, 0x28, 0x48, 0x30, 0xd0, 0x2e, 0x18, 0xa2, 0x4b, 0x2f, 0x0d, 0x5c, 0x6a, 0x86, 0x2a, - 0xfa, 0xe4, 0xf4, 0x67, 0x0b, 0x33, 0xd7, 0x7c, 0x14, 0x59, 0x5f, 0x1a, 0x45, 0x3e, 0x32, 0x71, - 0xe4, 0x3e, 0x3a, 0x71, 0xbc, 0x04, 0x98, 0x1f, 0x03, 0xdd, 0x81, 0x5b, 0x8d, 0x9a, 0x5d, 0x73, - 0x5e, 0x74, 0x70, 0xab, 0x66, 0xaf, 0x34, 0xd1, 0x1c, 0xa4, 0x6d, 0xeb, 0x95, 0xad, 0xc6, 0x0f, - 0xfb, 0x85, 0x83, 0xad, 0x7a, 0x07, 0x37, 0x8c, 0xa4, 0xe8, 0x7b, 0xb3, 0xa5, 0x73, 0xf0, 0xba, - 0xd9, 0x35, 0x52, 0xfb, 0x25, 0xd8, 0x54, 0x49, 0xd3, 0xee, 0xcd, 0xbf, 0x26, 0xc0, 0x98, 0x07, - 0x50, 0x97, 0xf5, 0x4a, 0x24, 0x12, 0xe7, 0x22, 0xf1, 0x08, 0x8c, 0x70, 0xa6, 0xa4, 0x23, 0x91, - 0x94, 0x91, 0x28, 0xcd, 0x71, 0x15, 0x8a, 0x7b, 0x50, 0xa0, 0x51, 0xc4, 0xa6, 0xf1, 0x4a, 0x49, - 0x16, 0x48, 0x48, 0x11, 0x3e, 0x03, 0x08, 0xd8, 0x88, 0x3a, 0x6f, 0xd9, 0x24, 0x52, 0x13, 0x44, - 0x02, 0xe7, 0x05, 0x72, 0x28, 0x00, 0xf3, 0x2f, 0x59, 0x48, 0x1d, 0xb1, 0x01, 0xda, 0x02, 0x31, - 0xb6, 0xcd, 0x5b, 0x6f, 0xe6, 0x84, 0x0d, 0x9a, 0x23, 0xd4, 0x81, 0xe2, 0xac, 0x4d, 0xc8, 0x5c, - 0xca, 0x7d, 0x5c, 0x36, 0xef, 0x2c, 0xcd, 0xf2, 0x87, 0x6b, 0x78, 0xd6, 0x66, 0x54, 0x59, 0xf7, - 0x97, 0x8e, 0xa6, 0x4c, 0xaa, 0xfe, 0xba, 0xfb, 0xa9, 0x15, 0x78, 0xb8, 0xb6, 0x18, 0x06, 0x65, - 0xf6, 0x1b, 0x28, 0x0c, 0x23, 0x4a, 0xb8, 0x78, 0x70, 0xf8, 0x6a, 0x9e, 0x28, 0xec, 0x6d, 0x4f, - 0x2d, 0x4e, 0x1f, 0x2e, 0x15, 0x7b, 0xfa, 0x70, 0xc1, 0xa0, 0xe8, 0x02, 0x40, 0x5f, 0x03, 0xc4, - 0x9c, 0x44, 0x5c, 0xe9, 0x66, 0xae, 0xd4, 0xcd, 0x4b, 0xb6, 0x54, 0xfd, 0x21, 0xe4, 0x68, 0x30, - 0x52, 0x8a, 0xd9, 0x2b, 0x15, 0xd7, 0x69, 0x30, 0x92, 0x6a, 0x5f, 0x41, 0x26, 0xe6, 0x84, 0x4f, - 0xc7, 0x02, 0xf3, 0xc2, 0xa3, 0x1f, 0xb1, 0x41, 0xa5, 0x27, 0x98, 0x58, 0x29, 0x88, 0xbe, 0xad, - 0xf2, 0xed, 0xd3, 0x38, 0x26, 0xe3, 0xd9, 0xab, 0x40, 0x82, 0x2d, 0x85, 0x21, 0x0c, 0xa5, 0x59, - 0xd6, 0x54, 0x59, 0xc9, 0x0e, 0x50, 0xd8, 0xfb, 0xfc, 0xca, 0xb4, 0xa9, 0x12, 0x3d, 0x4c, 0xe0, - 0x59, 0xde, 0x75, 0xd1, 0xbe, 0x82, 0x6b, 0x0b, 0x89, 0xd3, 0x56, 0x41, 0x5a, 0x7d, 0xf4, 0x09, - 0x99, 0x9b, 0xd9, 0x5d, 0x48, 0xbf, 0xc2, 0xcc, 0xdf, 0x24, 0x20, 0x23, 0xcf, 0x28, 0x26, 0x8c, - 0x9e, 0x5d, 0xb3, 0x3f, 0x32, 0xc7, 0xfc, 0xb4, 0x6f, 0xf5, 0xad, 0xc6, 0xec, 0x0d, 0xd0, 0xad, - 0xe1, 0x66, 0xfb, 0xc0, 0x48, 0x8a, 0xb1, 0x06, 0xf7, 0xdb, 0x6d, 0xb1, 0x90, 0x0f, 0x82, 0x5e, - 0xbf, 0x5e, 0xb7, 0xac, 0x86, 0xd5, 0x30, 0xd2, 0x42, 0xed, 0x45, 0xad, 0x79, 0x6c, 0x35, 0x8c, - 0x8c, 0x78, 0x4a, 0xd4, 0x6b, 0xed, 0xba, 0x75, 0x7c, 0x2c, 0xa8, 0x59, 0x41, 0xd5, 0x6b, 0xab, - 0x61, 0xac, 0xef, 0xaf, 0x43, 0x46, 0x96, 0xe2, 0x7e, 0x0e, 0xb2, 0xea, 0x68, 0xe6, 0x6b, 0x30, - 0xea, 0xb2, 0x44, 0x8e, 0xd8, 0x00, 0xd3, 0x5f, 0x4e, 0x68, 0x2c, 0xfb, 0x4e, 0x48, 0x22, 0xaa, - 0x3f, 0x40, 0x79, 0xac, 0x57, 0xa8, 0x02, 0x29, 0xd1, 0xe7, 0xd5, 0xd5, 0xb8, 0x7b, 0x59, 0x32, - 0xb1, 0x20, 0x9a, 0x1f, 0xa0, 0x74, 0xec, 0xc6, 0xfc, 0x88, 0x0d, 0xe2, 0xab, 0x4c, 0xdf, 0x84, - 0xec, 0x1b, 0xd7, 0xe3, 0x34, 0xd2, 0x1f, 0x4c, 0xbd, 0x12, 0xd7, 0x3a, 0x14, 0xaf, 0x47, 0xce, - 0xde, 0xd1, 0x40, 0x3f, 0x61, 0xf3, 0x02, 0xb1, 0x05, 0x20, 0x26, 0x5e, 0x29, 0x8e, 0xdd, 0x6f, - 0x55, 0x45, 0x67, 0x70, 0x4e, 0x00, 0x3d, 0xf7, 0x5b, 0x6a, 0x7a, 0x60, 0xcc, 0xdd, 0xc7, 0x21, - 0x0b, 0x62, 0x8a, 0xbe, 0x80, 0xf4, 0x09, 0x1b, 0xc4, 0xe5, 0x84, 0xfc, 0x68, 0x5e, 0x7e, 0x06, - 0xc9, 0x44, 0x0f, 0xa1, 0x14, 0xd0, 0x53, 0xd1, 0xc3, 0x66, 0xdb, 0x50, 0x5b, 0xdc, 0x14, 0x70, - 0x77, 0xba, 0x15, 0xf3, 0x01, 0x6c, 0x1e, 0x50, 0xbe, 0x10, 0x45, 0x04, 0xe9, 0x85, 0x17, 0x81, - 0xfc, 0x6d, 0x3e, 0x04, 0xa3, 0x4e, 0x82, 0x21, 0xf5, 0x2e, 0xe7, 0xed, 0xfd, 0x2d, 0x0d, 0x70, - 0xc4, 0x06, 0x3d, 0xf5, 0x57, 0x08, 0xfa, 0x7d, 0x02, 0xf2, 0xb3, 0x2c, 0xa1, 0x8b, 0xeb, 0x70, - 0x35, 0x93, 0xdb, 0x97, 0x1e, 0xd0, 0xac, 0xfc, 0xf6, 0x1f, 0xff, 0xfa, 0x53, 0x72, 0xd7, 0xbc, - 0x3f, 0xfb, 0xff, 0xe5, 0xd7, 0x2a, 0x1d, 0x3f, 0x0a, 0x23, 0x26, 0x06, 0x9f, 0xb8, 0xfa, 0xf8, - 0x43, 0x55, 0x44, 0xe1, 0xb9, 0xc8, 0x27, 0xfa, 0x43, 0x02, 0x72, 0xd3, 0x88, 0xa2, 0x8b, 0xfb, - 0xd8, 0x4a, 0xce, 0xb7, 0x1f, 0x7d, 0x02, 0x53, 0xa5, 0xc7, 0x7c, 0x24, 0x77, 0xf4, 0x00, 0x5d, - 0xbd, 0x23, 0x74, 0x06, 0x59, 0x15, 0x6f, 0x74, 0x71, 0x93, 0x5e, 0x4a, 0xc8, 0x15, 0xc1, 0xf8, - 0x88, 0x6b, 0x91, 0x8a, 0x05, 0xc7, 0xd2, 0x6f, 0xf5, 0xf1, 0x07, 0xf4, 0x3b, 0x91, 0x8e, 0x69, - 0x1a, 0x2f, 0x4b, 0xc7, 0x4a, 0xaa, 0xb7, 0x6f, 0x9e, 0x6b, 0x9a, 0x96, 0x1f, 0xf2, 0x33, 0xf3, - 0x99, 0xf4, 0xfd, 0xc4, 0xdc, 0xbd, 0xd2, 0xf7, 0xf3, 0xa1, 0xb4, 0xf9, 0x3c, 0xf1, 0x78, 0x9f, - 0xc1, 0xbd, 0x21, 0xf3, 0xcf, 0x39, 0x27, 0xa1, 0x3b, 0xdd, 0xc0, 0x7e, 0x69, 0x5e, 0x43, 0x5d, - 0xe1, 0xb1, 0x9b, 0x78, 0xfd, 0xb5, 0xe6, 0x8f, 0x99, 0x47, 0x82, 0x71, 0x85, 0x45, 0xe3, 0xea, - 0x98, 0x06, 0x72, 0x3f, 0x55, 0x25, 0x22, 0xa1, 0x1b, 0x9f, 0xfb, 0x67, 0xee, 0x1b, 0xdf, 0x1b, - 0x64, 0x25, 0xeb, 0xd9, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xaf, 0x10, 0x62, 0xa8, 0xbe, 0x13, - 0x00, 0x00, -} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1beta1/model_service.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1beta1/model_service.pb.go deleted file mode 100644 index 4b44357..0000000 --- a/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1beta1/model_service.pb.go +++ /dev/null @@ -1,1051 +0,0 @@ -// Code generated by protoc-gen-go. -// source: google/cloud/ml/v1beta1/model_service.proto -// DO NOT EDIT! - -package ml - -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" -import _ "google.golang.org/genproto/googleapis/api/annotations" -import _ "google.golang.org/genproto/googleapis/api/serviceconfig" -import google_longrunning "google.golang.org/genproto/googleapis/longrunning" -import google_protobuf2 "github.com/golang/protobuf/ptypes/timestamp" - -import ( - context "golang.org/x/net/context" - grpc "google.golang.org/grpc" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// Represents a machine learning solution. -// -// A model can have multiple versions, each of which is a deployed, trained -// model ready to receive prediction requests. The model itself is just a -// container. -type Model struct { - // Required. The name specified for the model when it was created. - // - // The model name must be unique within the project it is created in. - Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - // Optional. The description specified for the model when it was created. - Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` - // Output only. The default version of the model. This version will be used to - // handle prediction requests that do not specify a version. - // - // You can change the default version by calling - // [projects.methods.versions.setDefault](/ml/reference/rest/v1beta1/projects.models.versions/setDefault). - DefaultVersion *Version `protobuf:"bytes,3,opt,name=default_version,json=defaultVersion" json:"default_version,omitempty"` - // Optional. The list of regions where the model is going to be deployed. - // Currently only one region per model is supported. - // Defaults to 'us-central1' if nothing is set. - Regions []string `protobuf:"bytes,4,rep,name=regions" json:"regions,omitempty"` - // Optional. If true, enables StackDriver Logging for online prediction. - // Default is false. - OnlinePredictionLogging bool `protobuf:"varint,5,opt,name=online_prediction_logging,json=onlinePredictionLogging" json:"online_prediction_logging,omitempty"` -} - -func (m *Model) Reset() { *m = Model{} } -func (m *Model) String() string { return proto.CompactTextString(m) } -func (*Model) ProtoMessage() {} -func (*Model) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } - -func (m *Model) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *Model) GetDescription() string { - if m != nil { - return m.Description - } - return "" -} - -func (m *Model) GetDefaultVersion() *Version { - if m != nil { - return m.DefaultVersion - } - return nil -} - -func (m *Model) GetRegions() []string { - if m != nil { - return m.Regions - } - return nil -} - -func (m *Model) GetOnlinePredictionLogging() bool { - if m != nil { - return m.OnlinePredictionLogging - } - return false -} - -// Represents a version of the model. -// -// Each version is a trained model deployed in the cloud, ready to handle -// prediction requests. A model can have multiple versions. You can get -// information about all of the versions of a given model by calling -// [projects.models.versions.list](/ml/reference/rest/v1beta1/projects.models.versions/list). -type Version struct { - // Required.The name specified for the version when it was created. - // - // The version name must be unique within the model it is created in. - Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - // Optional. The description specified for the version when it was created. - Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` - // Output only. If true, this version will be used to handle prediction - // requests that do not specify a version. - // - // You can change the default version by calling - // [projects.methods.versions.setDefault](/ml/reference/rest/v1beta1/projects.models.versions/setDefault). - IsDefault bool `protobuf:"varint,3,opt,name=is_default,json=isDefault" json:"is_default,omitempty"` - // Required. The Google Cloud Storage location of the trained model used to - // create the version. See the - // [overview of model deployment](/ml/docs/concepts/deployment-overview) for - // more informaiton. - // - // When passing Version to - // [projects.models.versions.create](/ml/reference/rest/v1beta1/projects.models.versions/create) - // the model service uses the specified location as the source of the model. - // Once deployed, the model version is hosted by the prediction service, so - // this location is useful only as a historical record. - DeploymentUri string `protobuf:"bytes,4,opt,name=deployment_uri,json=deploymentUri" json:"deployment_uri,omitempty"` - // Output only. The time the version was created. - CreateTime *google_protobuf2.Timestamp `protobuf:"bytes,5,opt,name=create_time,json=createTime" json:"create_time,omitempty"` - // Output only. The time the version was last used for prediction. - LastUseTime *google_protobuf2.Timestamp `protobuf:"bytes,6,opt,name=last_use_time,json=lastUseTime" json:"last_use_time,omitempty"` - // Optional. The Google Cloud ML runtime version to use for this deployment. - // If not set, Google Cloud ML will choose a version. - RuntimeVersion string `protobuf:"bytes,8,opt,name=runtime_version,json=runtimeVersion" json:"runtime_version,omitempty"` - // Optional. Manually select the number of nodes to use for serving the - // model. If unset (i.e., by default), the number of nodes used to serve - // the model automatically scales with traffic. However, care should be - // taken to ramp up traffic according to the model's ability to scale. If - // your model needs to handle bursts of traffic beyond it's ability to - // scale, it is recommended you set this field appropriately. - ManualScaling *ManualScaling `protobuf:"bytes,9,opt,name=manual_scaling,json=manualScaling" json:"manual_scaling,omitempty"` -} - -func (m *Version) Reset() { *m = Version{} } -func (m *Version) String() string { return proto.CompactTextString(m) } -func (*Version) ProtoMessage() {} -func (*Version) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } - -func (m *Version) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *Version) GetDescription() string { - if m != nil { - return m.Description - } - return "" -} - -func (m *Version) GetIsDefault() bool { - if m != nil { - return m.IsDefault - } - return false -} - -func (m *Version) GetDeploymentUri() string { - if m != nil { - return m.DeploymentUri - } - return "" -} - -func (m *Version) GetCreateTime() *google_protobuf2.Timestamp { - if m != nil { - return m.CreateTime - } - return nil -} - -func (m *Version) GetLastUseTime() *google_protobuf2.Timestamp { - if m != nil { - return m.LastUseTime - } - return nil -} - -func (m *Version) GetRuntimeVersion() string { - if m != nil { - return m.RuntimeVersion - } - return "" -} - -func (m *Version) GetManualScaling() *ManualScaling { - if m != nil { - return m.ManualScaling - } - return nil -} - -// Options for manually scaling a model. -type ManualScaling struct { - // The number of nodes to allocate for this model. These nodes are always up, - // starting from the time the model is deployed, so the cost of operating - // this model will be proportional to nodes * number of hours since - // deployment. - Nodes int32 `protobuf:"varint,1,opt,name=nodes" json:"nodes,omitempty"` -} - -func (m *ManualScaling) Reset() { *m = ManualScaling{} } -func (m *ManualScaling) String() string { return proto.CompactTextString(m) } -func (*ManualScaling) ProtoMessage() {} -func (*ManualScaling) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } - -func (m *ManualScaling) GetNodes() int32 { - if m != nil { - return m.Nodes - } - return 0 -} - -// Request message for the CreateModel method. -type CreateModelRequest struct { - // Required. The project name. - // - // Authorization: requires `Editor` role on the specified project. - Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` - // Required. The model to create. - Model *Model `protobuf:"bytes,2,opt,name=model" json:"model,omitempty"` -} - -func (m *CreateModelRequest) Reset() { *m = CreateModelRequest{} } -func (m *CreateModelRequest) String() string { return proto.CompactTextString(m) } -func (*CreateModelRequest) ProtoMessage() {} -func (*CreateModelRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } - -func (m *CreateModelRequest) GetParent() string { - if m != nil { - return m.Parent - } - return "" -} - -func (m *CreateModelRequest) GetModel() *Model { - if m != nil { - return m.Model - } - return nil -} - -// Request message for the ListModels method. -type ListModelsRequest struct { - // Required. The name of the project whose models are to be listed. - // - // Authorization: requires `Viewer` role on the specified project. - Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` - // Optional. A page token to request the next page of results. - // - // You get the token from the `next_page_token` field of the response from - // the previous call. - PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` - // Optional. The number of models to retrieve per "page" of results. If there - // are more remaining results than this number, the response message will - // contain a valid value in the `next_page_token` field. - // - // The default value is 20, and the maximum page size is 100. - PageSize int32 `protobuf:"varint,5,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` -} - -func (m *ListModelsRequest) Reset() { *m = ListModelsRequest{} } -func (m *ListModelsRequest) String() string { return proto.CompactTextString(m) } -func (*ListModelsRequest) ProtoMessage() {} -func (*ListModelsRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } - -func (m *ListModelsRequest) GetParent() string { - if m != nil { - return m.Parent - } - return "" -} - -func (m *ListModelsRequest) GetPageToken() string { - if m != nil { - return m.PageToken - } - return "" -} - -func (m *ListModelsRequest) GetPageSize() int32 { - if m != nil { - return m.PageSize - } - return 0 -} - -// Response message for the ListModels method. -type ListModelsResponse struct { - // The list of models. - Models []*Model `protobuf:"bytes,1,rep,name=models" json:"models,omitempty"` - // Optional. Pass this token as the `page_token` field of the request for a - // subsequent call. - NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` -} - -func (m *ListModelsResponse) Reset() { *m = ListModelsResponse{} } -func (m *ListModelsResponse) String() string { return proto.CompactTextString(m) } -func (*ListModelsResponse) ProtoMessage() {} -func (*ListModelsResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } - -func (m *ListModelsResponse) GetModels() []*Model { - if m != nil { - return m.Models - } - return nil -} - -func (m *ListModelsResponse) GetNextPageToken() string { - if m != nil { - return m.NextPageToken - } - return "" -} - -// Request message for the GetModel method. -type GetModelRequest struct { - // Required. The name of the model. - // - // Authorization: requires `Viewer` role on the parent project. - Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` -} - -func (m *GetModelRequest) Reset() { *m = GetModelRequest{} } -func (m *GetModelRequest) String() string { return proto.CompactTextString(m) } -func (*GetModelRequest) ProtoMessage() {} -func (*GetModelRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } - -func (m *GetModelRequest) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -// Request message for the DeleteModel method. -type DeleteModelRequest struct { - // Required. The name of the model. - // - // Authorization: requires `Editor` role on the parent project. - Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` -} - -func (m *DeleteModelRequest) Reset() { *m = DeleteModelRequest{} } -func (m *DeleteModelRequest) String() string { return proto.CompactTextString(m) } -func (*DeleteModelRequest) ProtoMessage() {} -func (*DeleteModelRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} } - -func (m *DeleteModelRequest) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -// Uploads the provided trained model version to Cloud Machine Learning. -type CreateVersionRequest struct { - // Required. The name of the model. - // - // Authorization: requires `Editor` role on the parent project. - Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` - // Required. The version details. - Version *Version `protobuf:"bytes,2,opt,name=version" json:"version,omitempty"` -} - -func (m *CreateVersionRequest) Reset() { *m = CreateVersionRequest{} } -func (m *CreateVersionRequest) String() string { return proto.CompactTextString(m) } -func (*CreateVersionRequest) ProtoMessage() {} -func (*CreateVersionRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} } - -func (m *CreateVersionRequest) GetParent() string { - if m != nil { - return m.Parent - } - return "" -} - -func (m *CreateVersionRequest) GetVersion() *Version { - if m != nil { - return m.Version - } - return nil -} - -// Request message for the ListVersions method. -type ListVersionsRequest struct { - // Required. The name of the model for which to list the version. - // - // Authorization: requires `Viewer` role on the parent project. - Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` - // Optional. A page token to request the next page of results. - // - // You get the token from the `next_page_token` field of the response from - // the previous call. - PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` - // Optional. The number of versions to retrieve per "page" of results. If - // there are more remaining results than this number, the response message - // will contain a valid value in the `next_page_token` field. - // - // The default value is 20, and the maximum page size is 100. - PageSize int32 `protobuf:"varint,5,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` -} - -func (m *ListVersionsRequest) Reset() { *m = ListVersionsRequest{} } -func (m *ListVersionsRequest) String() string { return proto.CompactTextString(m) } -func (*ListVersionsRequest) ProtoMessage() {} -func (*ListVersionsRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{9} } - -func (m *ListVersionsRequest) GetParent() string { - if m != nil { - return m.Parent - } - return "" -} - -func (m *ListVersionsRequest) GetPageToken() string { - if m != nil { - return m.PageToken - } - return "" -} - -func (m *ListVersionsRequest) GetPageSize() int32 { - if m != nil { - return m.PageSize - } - return 0 -} - -// Response message for the ListVersions method. -type ListVersionsResponse struct { - // The list of versions. - Versions []*Version `protobuf:"bytes,1,rep,name=versions" json:"versions,omitempty"` - // Optional. Pass this token as the `page_token` field of the request for a - // subsequent call. - NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` -} - -func (m *ListVersionsResponse) Reset() { *m = ListVersionsResponse{} } -func (m *ListVersionsResponse) String() string { return proto.CompactTextString(m) } -func (*ListVersionsResponse) ProtoMessage() {} -func (*ListVersionsResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{10} } - -func (m *ListVersionsResponse) GetVersions() []*Version { - if m != nil { - return m.Versions - } - return nil -} - -func (m *ListVersionsResponse) GetNextPageToken() string { - if m != nil { - return m.NextPageToken - } - return "" -} - -// Request message for the GetVersion method. -type GetVersionRequest struct { - // Required. The name of the version. - // - // Authorization: requires `Viewer` role on the parent project. - Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` -} - -func (m *GetVersionRequest) Reset() { *m = GetVersionRequest{} } -func (m *GetVersionRequest) String() string { return proto.CompactTextString(m) } -func (*GetVersionRequest) ProtoMessage() {} -func (*GetVersionRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{11} } - -func (m *GetVersionRequest) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -// Request message for the DeleteVerionRequest method. -type DeleteVersionRequest struct { - // Required. The name of the version. You can get the names of all the - // versions of a model by calling - // [projects.models.versions.list](/ml/reference/rest/v1beta1/projects.models.versions/list). - // - // Authorization: requires `Editor` role on the parent project. - Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` -} - -func (m *DeleteVersionRequest) Reset() { *m = DeleteVersionRequest{} } -func (m *DeleteVersionRequest) String() string { return proto.CompactTextString(m) } -func (*DeleteVersionRequest) ProtoMessage() {} -func (*DeleteVersionRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{12} } - -func (m *DeleteVersionRequest) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -// Request message for the SetDefaultVersion request. -type SetDefaultVersionRequest struct { - // Required. The name of the version to make the default for the model. You - // can get the names of all the versions of a model by calling - // [projects.models.versions.list](/ml/reference/rest/v1beta1/projects.models.versions/list). - // - // Authorization: requires `Editor` role on the parent project. - Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` -} - -func (m *SetDefaultVersionRequest) Reset() { *m = SetDefaultVersionRequest{} } -func (m *SetDefaultVersionRequest) String() string { return proto.CompactTextString(m) } -func (*SetDefaultVersionRequest) ProtoMessage() {} -func (*SetDefaultVersionRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{13} } - -func (m *SetDefaultVersionRequest) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func init() { - proto.RegisterType((*Model)(nil), "google.cloud.ml.v1beta1.Model") - proto.RegisterType((*Version)(nil), "google.cloud.ml.v1beta1.Version") - proto.RegisterType((*ManualScaling)(nil), "google.cloud.ml.v1beta1.ManualScaling") - proto.RegisterType((*CreateModelRequest)(nil), "google.cloud.ml.v1beta1.CreateModelRequest") - proto.RegisterType((*ListModelsRequest)(nil), "google.cloud.ml.v1beta1.ListModelsRequest") - proto.RegisterType((*ListModelsResponse)(nil), "google.cloud.ml.v1beta1.ListModelsResponse") - proto.RegisterType((*GetModelRequest)(nil), "google.cloud.ml.v1beta1.GetModelRequest") - proto.RegisterType((*DeleteModelRequest)(nil), "google.cloud.ml.v1beta1.DeleteModelRequest") - proto.RegisterType((*CreateVersionRequest)(nil), "google.cloud.ml.v1beta1.CreateVersionRequest") - proto.RegisterType((*ListVersionsRequest)(nil), "google.cloud.ml.v1beta1.ListVersionsRequest") - proto.RegisterType((*ListVersionsResponse)(nil), "google.cloud.ml.v1beta1.ListVersionsResponse") - proto.RegisterType((*GetVersionRequest)(nil), "google.cloud.ml.v1beta1.GetVersionRequest") - proto.RegisterType((*DeleteVersionRequest)(nil), "google.cloud.ml.v1beta1.DeleteVersionRequest") - proto.RegisterType((*SetDefaultVersionRequest)(nil), "google.cloud.ml.v1beta1.SetDefaultVersionRequest") -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 - -// Client API for ModelService service - -type ModelServiceClient interface { - // Creates a model which will later contain one or more versions. - // - // You must add at least one version before you can request predictions from - // the model. Add versions by calling - // [projects.models.versions.create](/ml/reference/rest/v1beta1/projects.models.versions/create). - CreateModel(ctx context.Context, in *CreateModelRequest, opts ...grpc.CallOption) (*Model, error) - // Lists the models in a project. - // - // Each project can contain multiple models, and each model can have multiple - // versions. - ListModels(ctx context.Context, in *ListModelsRequest, opts ...grpc.CallOption) (*ListModelsResponse, error) - // Gets information about a model, including its name, the description (if - // set), and the default version (if at least one version of the model has - // been deployed). - GetModel(ctx context.Context, in *GetModelRequest, opts ...grpc.CallOption) (*Model, error) - // Deletes a model. - // - // You can only delete a model if there are no versions in it. You can delete - // versions by calling - // [projects.models.versions.delete](/ml/reference/rest/v1beta1/projects.models.versions/delete). - DeleteModel(ctx context.Context, in *DeleteModelRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) - // Creates a new version of a model from a trained TensorFlow model. - // - // If the version created in the cloud by this call is the first deployed - // version of the specified model, it will be made the default version of the - // model. When you add a version to a model that already has one or more - // versions, the default version does not automatically change. If you want a - // new version to be the default, you must call - // [projects.models.versions.setDefault](/ml/reference/rest/v1beta1/projects.models.versions/setDefault). - CreateVersion(ctx context.Context, in *CreateVersionRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) - // Gets basic information about all the versions of a model. - // - // If you expect that a model has a lot of versions, or if you need to handle - // only a limited number of results at a time, you can request that the list - // be retrieved in batches (called pages): - ListVersions(ctx context.Context, in *ListVersionsRequest, opts ...grpc.CallOption) (*ListVersionsResponse, error) - // Gets information about a model version. - // - // Models can have multiple versions. You can call - // [projects.models.versions.list](/ml/reference/rest/v1beta1/projects.models.versions/list) - // to get the same information that this method returns for all of the - // versions of a model. - GetVersion(ctx context.Context, in *GetVersionRequest, opts ...grpc.CallOption) (*Version, error) - // Deletes a model version. - // - // Each model can have multiple versions deployed and in use at any given - // time. Use this method to remove a single version. - // - // Note: You cannot delete the version that is set as the default version - // of the model unless it is the only remaining version. - DeleteVersion(ctx context.Context, in *DeleteVersionRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) - // Designates a version to be the default for the model. - // - // The default version is used for prediction requests made against the model - // that don't specify a version. - // - // The first version to be created for a model is automatically set as the - // default. You must make any subsequent changes to the default version - // setting manually using this method. - SetDefaultVersion(ctx context.Context, in *SetDefaultVersionRequest, opts ...grpc.CallOption) (*Version, error) -} - -type modelServiceClient struct { - cc *grpc.ClientConn -} - -func NewModelServiceClient(cc *grpc.ClientConn) ModelServiceClient { - return &modelServiceClient{cc} -} - -func (c *modelServiceClient) CreateModel(ctx context.Context, in *CreateModelRequest, opts ...grpc.CallOption) (*Model, error) { - out := new(Model) - err := grpc.Invoke(ctx, "/google.cloud.ml.v1beta1.ModelService/CreateModel", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *modelServiceClient) ListModels(ctx context.Context, in *ListModelsRequest, opts ...grpc.CallOption) (*ListModelsResponse, error) { - out := new(ListModelsResponse) - err := grpc.Invoke(ctx, "/google.cloud.ml.v1beta1.ModelService/ListModels", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *modelServiceClient) GetModel(ctx context.Context, in *GetModelRequest, opts ...grpc.CallOption) (*Model, error) { - out := new(Model) - err := grpc.Invoke(ctx, "/google.cloud.ml.v1beta1.ModelService/GetModel", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *modelServiceClient) DeleteModel(ctx context.Context, in *DeleteModelRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { - out := new(google_longrunning.Operation) - err := grpc.Invoke(ctx, "/google.cloud.ml.v1beta1.ModelService/DeleteModel", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *modelServiceClient) CreateVersion(ctx context.Context, in *CreateVersionRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { - out := new(google_longrunning.Operation) - err := grpc.Invoke(ctx, "/google.cloud.ml.v1beta1.ModelService/CreateVersion", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *modelServiceClient) ListVersions(ctx context.Context, in *ListVersionsRequest, opts ...grpc.CallOption) (*ListVersionsResponse, error) { - out := new(ListVersionsResponse) - err := grpc.Invoke(ctx, "/google.cloud.ml.v1beta1.ModelService/ListVersions", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *modelServiceClient) GetVersion(ctx context.Context, in *GetVersionRequest, opts ...grpc.CallOption) (*Version, error) { - out := new(Version) - err := grpc.Invoke(ctx, "/google.cloud.ml.v1beta1.ModelService/GetVersion", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *modelServiceClient) DeleteVersion(ctx context.Context, in *DeleteVersionRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { - out := new(google_longrunning.Operation) - err := grpc.Invoke(ctx, "/google.cloud.ml.v1beta1.ModelService/DeleteVersion", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *modelServiceClient) SetDefaultVersion(ctx context.Context, in *SetDefaultVersionRequest, opts ...grpc.CallOption) (*Version, error) { - out := new(Version) - err := grpc.Invoke(ctx, "/google.cloud.ml.v1beta1.ModelService/SetDefaultVersion", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// Server API for ModelService service - -type ModelServiceServer interface { - // Creates a model which will later contain one or more versions. - // - // You must add at least one version before you can request predictions from - // the model. Add versions by calling - // [projects.models.versions.create](/ml/reference/rest/v1beta1/projects.models.versions/create). - CreateModel(context.Context, *CreateModelRequest) (*Model, error) - // Lists the models in a project. - // - // Each project can contain multiple models, and each model can have multiple - // versions. - ListModels(context.Context, *ListModelsRequest) (*ListModelsResponse, error) - // Gets information about a model, including its name, the description (if - // set), and the default version (if at least one version of the model has - // been deployed). - GetModel(context.Context, *GetModelRequest) (*Model, error) - // Deletes a model. - // - // You can only delete a model if there are no versions in it. You can delete - // versions by calling - // [projects.models.versions.delete](/ml/reference/rest/v1beta1/projects.models.versions/delete). - DeleteModel(context.Context, *DeleteModelRequest) (*google_longrunning.Operation, error) - // Creates a new version of a model from a trained TensorFlow model. - // - // If the version created in the cloud by this call is the first deployed - // version of the specified model, it will be made the default version of the - // model. When you add a version to a model that already has one or more - // versions, the default version does not automatically change. If you want a - // new version to be the default, you must call - // [projects.models.versions.setDefault](/ml/reference/rest/v1beta1/projects.models.versions/setDefault). - CreateVersion(context.Context, *CreateVersionRequest) (*google_longrunning.Operation, error) - // Gets basic information about all the versions of a model. - // - // If you expect that a model has a lot of versions, or if you need to handle - // only a limited number of results at a time, you can request that the list - // be retrieved in batches (called pages): - ListVersions(context.Context, *ListVersionsRequest) (*ListVersionsResponse, error) - // Gets information about a model version. - // - // Models can have multiple versions. You can call - // [projects.models.versions.list](/ml/reference/rest/v1beta1/projects.models.versions/list) - // to get the same information that this method returns for all of the - // versions of a model. - GetVersion(context.Context, *GetVersionRequest) (*Version, error) - // Deletes a model version. - // - // Each model can have multiple versions deployed and in use at any given - // time. Use this method to remove a single version. - // - // Note: You cannot delete the version that is set as the default version - // of the model unless it is the only remaining version. - DeleteVersion(context.Context, *DeleteVersionRequest) (*google_longrunning.Operation, error) - // Designates a version to be the default for the model. - // - // The default version is used for prediction requests made against the model - // that don't specify a version. - // - // The first version to be created for a model is automatically set as the - // default. You must make any subsequent changes to the default version - // setting manually using this method. - SetDefaultVersion(context.Context, *SetDefaultVersionRequest) (*Version, error) -} - -func RegisterModelServiceServer(s *grpc.Server, srv ModelServiceServer) { - s.RegisterService(&_ModelService_serviceDesc, srv) -} - -func _ModelService_CreateModel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CreateModelRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ModelServiceServer).CreateModel(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/google.cloud.ml.v1beta1.ModelService/CreateModel", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ModelServiceServer).CreateModel(ctx, req.(*CreateModelRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ModelService_ListModels_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ListModelsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ModelServiceServer).ListModels(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/google.cloud.ml.v1beta1.ModelService/ListModels", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ModelServiceServer).ListModels(ctx, req.(*ListModelsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ModelService_GetModel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetModelRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ModelServiceServer).GetModel(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/google.cloud.ml.v1beta1.ModelService/GetModel", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ModelServiceServer).GetModel(ctx, req.(*GetModelRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ModelService_DeleteModel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeleteModelRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ModelServiceServer).DeleteModel(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/google.cloud.ml.v1beta1.ModelService/DeleteModel", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ModelServiceServer).DeleteModel(ctx, req.(*DeleteModelRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ModelService_CreateVersion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CreateVersionRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ModelServiceServer).CreateVersion(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/google.cloud.ml.v1beta1.ModelService/CreateVersion", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ModelServiceServer).CreateVersion(ctx, req.(*CreateVersionRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ModelService_ListVersions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ListVersionsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ModelServiceServer).ListVersions(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/google.cloud.ml.v1beta1.ModelService/ListVersions", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ModelServiceServer).ListVersions(ctx, req.(*ListVersionsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ModelService_GetVersion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetVersionRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ModelServiceServer).GetVersion(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/google.cloud.ml.v1beta1.ModelService/GetVersion", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ModelServiceServer).GetVersion(ctx, req.(*GetVersionRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ModelService_DeleteVersion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeleteVersionRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ModelServiceServer).DeleteVersion(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/google.cloud.ml.v1beta1.ModelService/DeleteVersion", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ModelServiceServer).DeleteVersion(ctx, req.(*DeleteVersionRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ModelService_SetDefaultVersion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(SetDefaultVersionRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ModelServiceServer).SetDefaultVersion(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/google.cloud.ml.v1beta1.ModelService/SetDefaultVersion", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ModelServiceServer).SetDefaultVersion(ctx, req.(*SetDefaultVersionRequest)) - } - return interceptor(ctx, in, info, handler) -} - -var _ModelService_serviceDesc = grpc.ServiceDesc{ - ServiceName: "google.cloud.ml.v1beta1.ModelService", - HandlerType: (*ModelServiceServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "CreateModel", - Handler: _ModelService_CreateModel_Handler, - }, - { - MethodName: "ListModels", - Handler: _ModelService_ListModels_Handler, - }, - { - MethodName: "GetModel", - Handler: _ModelService_GetModel_Handler, - }, - { - MethodName: "DeleteModel", - Handler: _ModelService_DeleteModel_Handler, - }, - { - MethodName: "CreateVersion", - Handler: _ModelService_CreateVersion_Handler, - }, - { - MethodName: "ListVersions", - Handler: _ModelService_ListVersions_Handler, - }, - { - MethodName: "GetVersion", - Handler: _ModelService_GetVersion_Handler, - }, - { - MethodName: "DeleteVersion", - Handler: _ModelService_DeleteVersion_Handler, - }, - { - MethodName: "SetDefaultVersion", - Handler: _ModelService_SetDefaultVersion_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "google/cloud/ml/v1beta1/model_service.proto", -} - -func init() { proto.RegisterFile("google/cloud/ml/v1beta1/model_service.proto", fileDescriptor1) } - -var fileDescriptor1 = []byte{ - // 1013 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x57, 0xcf, 0x6f, 0x1b, 0x45, - 0x14, 0xd6, 0x26, 0x71, 0x62, 0x3f, 0xd7, 0x89, 0x32, 0x04, 0x6a, 0x0c, 0xa1, 0xd6, 0x56, 0x69, - 0x2d, 0xa7, 0xdd, 0x25, 0x06, 0x55, 0x8a, 0x0b, 0x45, 0x2a, 0x91, 0x2a, 0xa4, 0x46, 0x44, 0x9b, - 0x96, 0x03, 0x97, 0xd5, 0xc6, 0x9e, 0x2e, 0x53, 0x76, 0x67, 0xb6, 0x3b, 0xb3, 0x11, 0x14, 0x7a, - 0x80, 0x03, 0x47, 0x0e, 0x20, 0xae, 0x5c, 0xb8, 0xf3, 0xcf, 0x70, 0xe7, 0x84, 0xf8, 0x23, 0x38, - 0xa1, 0xf9, 0xb1, 0xce, 0x3a, 0xfe, 0xb1, 0x1b, 0x24, 0x6e, 0x9e, 0x37, 0xdf, 0x9b, 0xf7, 0xcd, - 0xfb, 0xde, 0x7b, 0x3b, 0x86, 0xfd, 0x90, 0xb1, 0x30, 0xc2, 0xee, 0x28, 0x62, 0xd9, 0xd8, 0x8d, - 0x23, 0xf7, 0xfc, 0xe0, 0x0c, 0x8b, 0xe0, 0xc0, 0x8d, 0xd9, 0x18, 0x47, 0x3e, 0xc7, 0xe9, 0x39, - 0x19, 0x61, 0x27, 0x49, 0x99, 0x60, 0xe8, 0xba, 0x06, 0x3b, 0x0a, 0xec, 0xc4, 0x91, 0x63, 0xc0, - 0x9d, 0xb7, 0xcd, 0x29, 0x41, 0x42, 0xdc, 0x80, 0x52, 0x26, 0x02, 0x41, 0x18, 0xe5, 0xda, 0xad, - 0xf3, 0x7a, 0x71, 0x37, 0x13, 0x5f, 0x18, 0xf3, 0x4d, 0x63, 0x8e, 0x18, 0x0d, 0xd3, 0x8c, 0x52, - 0x42, 0x43, 0x97, 0x25, 0x38, 0x9d, 0xf2, 0xbd, 0x61, 0x40, 0x6a, 0x75, 0x96, 0x3d, 0x73, 0x05, - 0x89, 0x31, 0x17, 0x41, 0x9c, 0x68, 0x80, 0xfd, 0xa7, 0x05, 0xb5, 0x63, 0xc9, 0x15, 0x21, 0x58, - 0xa3, 0x41, 0x8c, 0xdb, 0x56, 0xd7, 0xea, 0x35, 0x3c, 0xf5, 0x1b, 0x75, 0xa1, 0x39, 0xc6, 0x7c, - 0x94, 0x92, 0x44, 0x1e, 0xda, 0x5e, 0x51, 0x5b, 0x45, 0x13, 0xfa, 0x04, 0xb6, 0xc6, 0xf8, 0x59, - 0x90, 0x45, 0xc2, 0x3f, 0xc7, 0x29, 0x97, 0xa8, 0xd5, 0xae, 0xd5, 0x6b, 0x0e, 0xba, 0xce, 0x82, - 0xdb, 0x3a, 0x9f, 0x69, 0x9c, 0xb7, 0x69, 0x1c, 0xcd, 0x1a, 0xb5, 0x61, 0x23, 0xc5, 0xa1, 0x24, - 0xdf, 0x5e, 0xeb, 0xae, 0xf6, 0x1a, 0x5e, 0xbe, 0x44, 0x43, 0x78, 0x93, 0xd1, 0x88, 0x50, 0xec, - 0x27, 0x29, 0x1e, 0x93, 0x91, 0x8c, 0xec, 0x47, 0x2c, 0x0c, 0x09, 0x0d, 0xdb, 0xb5, 0xae, 0xd5, - 0xab, 0x7b, 0xd7, 0x35, 0xe0, 0x64, 0xb2, 0xff, 0x58, 0x6f, 0xdb, 0xff, 0xac, 0xc0, 0x46, 0x1e, - 0xe1, 0xbf, 0x5d, 0x71, 0x17, 0x80, 0x70, 0xdf, 0x90, 0x55, 0xb7, 0xab, 0x7b, 0x0d, 0xc2, 0x8f, - 0xb4, 0x01, 0xed, 0xc1, 0xe6, 0x18, 0x27, 0x11, 0xfb, 0x3a, 0xc6, 0x54, 0xf8, 0x59, 0x4a, 0xda, - 0x6b, 0xea, 0x8c, 0xd6, 0x85, 0xf5, 0x69, 0x4a, 0xd0, 0x7d, 0x68, 0x8e, 0x52, 0x1c, 0x08, 0xec, - 0x4b, 0x09, 0x14, 0xeb, 0xe6, 0xa0, 0x93, 0x27, 0x29, 0xd7, 0xc7, 0x79, 0x92, 0xeb, 0xe3, 0x81, - 0x86, 0x4b, 0x03, 0x7a, 0x00, 0xad, 0x28, 0xe0, 0xc2, 0xcf, 0xb8, 0x71, 0x5f, 0x2f, 0x75, 0x6f, - 0x4a, 0x87, 0xa7, 0x5c, 0xfb, 0xdf, 0x86, 0xad, 0x34, 0xa3, 0xd2, 0x73, 0xa2, 0x52, 0x5d, 0x91, - 0xdc, 0x34, 0xe6, 0x3c, 0x43, 0xc7, 0xb0, 0x19, 0x07, 0x34, 0x0b, 0x22, 0x9f, 0x8f, 0x82, 0x48, - 0xa6, 0xb7, 0xa1, 0x22, 0xdd, 0x5a, 0xa8, 0xe6, 0xb1, 0x82, 0x9f, 0x6a, 0xb4, 0xd7, 0x8a, 0x8b, - 0x4b, 0x7b, 0x0f, 0x5a, 0x53, 0xfb, 0x68, 0x07, 0x6a, 0x94, 0x8d, 0x31, 0x57, 0x12, 0xd4, 0x3c, - 0xbd, 0xb0, 0xcf, 0x00, 0x7d, 0xac, 0x2e, 0xab, 0x2a, 0xd1, 0xc3, 0x2f, 0x32, 0xcc, 0x05, 0x7a, - 0x03, 0xd6, 0x93, 0x20, 0xc5, 0x54, 0x18, 0xbd, 0xcc, 0x0a, 0xbd, 0x0f, 0x35, 0xd5, 0x5d, 0x4a, - 0xab, 0xe6, 0xe0, 0x9d, 0xc5, 0xd4, 0xd4, 0x69, 0x1a, 0x6c, 0x87, 0xb0, 0xfd, 0x98, 0x70, 0xa1, - 0x6c, 0xbc, 0x2c, 0xc4, 0x2e, 0x40, 0x12, 0x84, 0xd8, 0x17, 0xec, 0x4b, 0x4c, 0x8d, 0x9e, 0x0d, - 0x69, 0x79, 0x22, 0x0d, 0xe8, 0x2d, 0x50, 0x0b, 0x9f, 0x93, 0x97, 0x5a, 0xc9, 0x9a, 0x57, 0x97, - 0x86, 0x53, 0xf2, 0x12, 0xdb, 0x02, 0x50, 0x31, 0x10, 0x4f, 0x18, 0xe5, 0x18, 0xdd, 0x83, 0x75, - 0xc5, 0x43, 0xde, 0x7c, 0xb5, 0x02, 0x6b, 0x83, 0x46, 0xb7, 0x60, 0x8b, 0xe2, 0xaf, 0x84, 0x5f, - 0xa0, 0xa3, 0x4b, 0xb4, 0x25, 0xcd, 0x27, 0x39, 0x25, 0x7b, 0x0f, 0xb6, 0x1e, 0x61, 0x31, 0x95, - 0xbf, 0x39, 0xd5, 0x6e, 0xf7, 0x00, 0x1d, 0xe1, 0x08, 0x5f, 0xca, 0xf4, 0x3c, 0xe4, 0x73, 0xd8, - 0xd1, 0x9a, 0xe4, 0xed, 0x5a, 0x92, 0xb2, 0x21, 0x6c, 0xe4, 0xa5, 0xb5, 0x52, 0x71, 0x00, 0xe4, - 0x0e, 0x36, 0x81, 0xd7, 0x64, 0xca, 0x8c, 0xfd, 0x7f, 0x55, 0xe7, 0x5b, 0xd8, 0x99, 0x0e, 0x65, - 0xf4, 0xf9, 0x00, 0xea, 0x86, 0x4d, 0xae, 0x50, 0x39, 0xff, 0x89, 0x47, 0x65, 0x95, 0x6e, 0xc3, - 0xf6, 0x23, 0x2c, 0x2e, 0x65, 0x74, 0x5e, 0xf6, 0xfb, 0xb0, 0xa3, 0x75, 0xaa, 0x80, 0x75, 0xa0, - 0x7d, 0x8a, 0xc5, 0xd1, 0xd4, 0x30, 0x5d, 0x82, 0x1f, 0xfc, 0x0d, 0x70, 0x4d, 0xc9, 0x7f, 0xaa, - 0xbf, 0x4e, 0xe8, 0x47, 0x0b, 0x9a, 0x85, 0xfe, 0x43, 0xfb, 0x0b, 0x6f, 0x3e, 0xdb, 0xa5, 0x9d, - 0x92, 0x42, 0xb6, 0x07, 0xdf, 0xff, 0xf1, 0xd7, 0xcf, 0x2b, 0x77, 0xec, 0x9b, 0x93, 0x4f, 0xe3, - 0x37, 0x5a, 0xc6, 0x0f, 0x93, 0x94, 0x3d, 0xc7, 0x23, 0xc1, 0xdd, 0xfe, 0x2b, 0xfd, 0xb9, 0xe4, - 0x43, 0xdd, 0xab, 0xe8, 0x27, 0x0b, 0xe0, 0xa2, 0x87, 0x50, 0x7f, 0x61, 0x88, 0x99, 0x8e, 0xee, - 0xec, 0x57, 0xc2, 0x6a, 0xd1, 0xed, 0x7d, 0xc5, 0x6d, 0x0f, 0x55, 0xe1, 0x86, 0xbe, 0xb3, 0xa0, - 0x9e, 0xb7, 0x18, 0xea, 0x2d, 0x0c, 0x73, 0xa9, 0x0b, 0x4b, 0xf3, 0x33, 0x87, 0x83, 0x54, 0xa9, - 0xc0, 0xc0, 0x10, 0x70, 0xfb, 0xaf, 0xd0, 0x0f, 0x16, 0x34, 0x0b, 0xfd, 0xbb, 0x44, 0xa9, 0xd9, - 0x2e, 0xef, 0xec, 0xe6, 0xe0, 0xc2, 0x8b, 0xc1, 0xf9, 0x34, 0x7f, 0x31, 0xe4, 0x44, 0xfa, 0x95, - 0x88, 0xfc, 0x6a, 0x41, 0x6b, 0x6a, 0x3c, 0xa0, 0xbb, 0x25, 0x45, 0x33, 0x5d, 0x98, 0x65, 0x64, - 0x3e, 0x52, 0x64, 0x0e, 0x6d, 0x67, 0x89, 0x32, 0x17, 0x74, 0xdc, 0xbc, 0x11, 0x87, 0xf9, 0x48, - 0x41, 0xbf, 0x59, 0x70, 0xad, 0xd8, 0xe8, 0xe8, 0xce, 0xd2, 0xc2, 0xb8, 0x34, 0x7a, 0x3a, 0x77, - 0x2b, 0xa2, 0x4d, 0x21, 0xdd, 0x53, 0x74, 0xdf, 0x45, 0x57, 0xa4, 0xab, 0x0a, 0xfd, 0x62, 0x20, - 0x2c, 0x29, 0xf4, 0x99, 0xa9, 0xd1, 0x29, 0x1d, 0x4f, 0xf3, 0x48, 0x2d, 0x12, 0x74, 0xc2, 0x48, - 0x6a, 0xfb, 0x8b, 0x05, 0xad, 0xa9, 0xe1, 0xb3, 0x44, 0xdb, 0x79, 0x43, 0xaa, 0x4c, 0x5b, 0xc3, - 0xab, 0x7f, 0x55, 0x5e, 0xbf, 0x5b, 0xb0, 0x3d, 0x33, 0xe8, 0xd0, 0xc1, 0x42, 0x6e, 0x8b, 0x86, - 0x62, 0x85, 0xd4, 0x1d, 0x29, 0x8a, 0x0f, 0xec, 0xc3, 0xab, 0x51, 0x1c, 0xf2, 0x49, 0xc8, 0xa1, - 0xd5, 0x7f, 0xf8, 0x02, 0x6e, 0x8c, 0x58, 0x3c, 0x13, 0x2c, 0x48, 0x48, 0x1e, 0xf0, 0xe1, 0x76, - 0x71, 0x10, 0x9f, 0xc8, 0x57, 0xdc, 0x89, 0xf5, 0xf9, 0xa1, 0xf1, 0x08, 0x59, 0x14, 0xd0, 0xd0, - 0x61, 0x69, 0xe8, 0x86, 0x98, 0xaa, 0x37, 0x9e, 0xab, 0xb7, 0x82, 0x84, 0xf0, 0x99, 0xff, 0x1c, - 0xf7, 0xe3, 0xe8, 0x6c, 0x5d, 0xa1, 0xde, 0xfb, 0x37, 0x00, 0x00, 0xff, 0xff, 0x04, 0x39, 0xff, - 0x08, 0x98, 0x0c, 0x00, 0x00, -} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1beta1/operation_metadata.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1beta1/operation_metadata.pb.go deleted file mode 100644 index 4987c67..0000000 --- a/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1beta1/operation_metadata.pb.go +++ /dev/null @@ -1,162 +0,0 @@ -// Code generated by protoc-gen-go. -// source: google/cloud/ml/v1beta1/operation_metadata.proto -// DO NOT EDIT! - -package ml - -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" -import _ "google.golang.org/genproto/googleapis/api/annotations" -import google_protobuf2 "github.com/golang/protobuf/ptypes/timestamp" - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// The operation type. -type OperationMetadata_OperationType int32 - -const ( - // Unspecified operation type. - OperationMetadata_OPERATION_TYPE_UNSPECIFIED OperationMetadata_OperationType = 0 - // An operation to create a new version. - OperationMetadata_CREATE_VERSION OperationMetadata_OperationType = 1 - // An operation to delete an existing version. - OperationMetadata_DELETE_VERSION OperationMetadata_OperationType = 2 - // An operation to delete an existing model. - OperationMetadata_DELETE_MODEL OperationMetadata_OperationType = 3 -) - -var OperationMetadata_OperationType_name = map[int32]string{ - 0: "OPERATION_TYPE_UNSPECIFIED", - 1: "CREATE_VERSION", - 2: "DELETE_VERSION", - 3: "DELETE_MODEL", -} -var OperationMetadata_OperationType_value = map[string]int32{ - "OPERATION_TYPE_UNSPECIFIED": 0, - "CREATE_VERSION": 1, - "DELETE_VERSION": 2, - "DELETE_MODEL": 3, -} - -func (x OperationMetadata_OperationType) String() string { - return proto.EnumName(OperationMetadata_OperationType_name, int32(x)) -} -func (OperationMetadata_OperationType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor2, []int{0, 0} -} - -// Represents the metadata of the long-running operation. -type OperationMetadata struct { - // The time the operation was submitted. - CreateTime *google_protobuf2.Timestamp `protobuf:"bytes,1,opt,name=create_time,json=createTime" json:"create_time,omitempty"` - // The time operation processing started. - StartTime *google_protobuf2.Timestamp `protobuf:"bytes,2,opt,name=start_time,json=startTime" json:"start_time,omitempty"` - // The time operation processing completed. - EndTime *google_protobuf2.Timestamp `protobuf:"bytes,3,opt,name=end_time,json=endTime" json:"end_time,omitempty"` - // Indicates whether a request to cancel this operation has been made. - IsCancellationRequested bool `protobuf:"varint,4,opt,name=is_cancellation_requested,json=isCancellationRequested" json:"is_cancellation_requested,omitempty"` - // The operation type. - OperationType OperationMetadata_OperationType `protobuf:"varint,5,opt,name=operation_type,json=operationType,enum=google.cloud.ml.v1beta1.OperationMetadata_OperationType" json:"operation_type,omitempty"` - // Contains the name of the model associated with the operation. - ModelName string `protobuf:"bytes,6,opt,name=model_name,json=modelName" json:"model_name,omitempty"` - // Contains the version associated with the operation. - Version *Version `protobuf:"bytes,7,opt,name=version" json:"version,omitempty"` -} - -func (m *OperationMetadata) Reset() { *m = OperationMetadata{} } -func (m *OperationMetadata) String() string { return proto.CompactTextString(m) } -func (*OperationMetadata) ProtoMessage() {} -func (*OperationMetadata) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } - -func (m *OperationMetadata) GetCreateTime() *google_protobuf2.Timestamp { - if m != nil { - return m.CreateTime - } - return nil -} - -func (m *OperationMetadata) GetStartTime() *google_protobuf2.Timestamp { - if m != nil { - return m.StartTime - } - return nil -} - -func (m *OperationMetadata) GetEndTime() *google_protobuf2.Timestamp { - if m != nil { - return m.EndTime - } - return nil -} - -func (m *OperationMetadata) GetIsCancellationRequested() bool { - if m != nil { - return m.IsCancellationRequested - } - return false -} - -func (m *OperationMetadata) GetOperationType() OperationMetadata_OperationType { - if m != nil { - return m.OperationType - } - return OperationMetadata_OPERATION_TYPE_UNSPECIFIED -} - -func (m *OperationMetadata) GetModelName() string { - if m != nil { - return m.ModelName - } - return "" -} - -func (m *OperationMetadata) GetVersion() *Version { - if m != nil { - return m.Version - } - return nil -} - -func init() { - proto.RegisterType((*OperationMetadata)(nil), "google.cloud.ml.v1beta1.OperationMetadata") - proto.RegisterEnum("google.cloud.ml.v1beta1.OperationMetadata_OperationType", OperationMetadata_OperationType_name, OperationMetadata_OperationType_value) -} - -func init() { proto.RegisterFile("google/cloud/ml/v1beta1/operation_metadata.proto", fileDescriptor2) } - -var fileDescriptor2 = []byte{ - // 457 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0x5f, 0x6b, 0xdb, 0x30, - 0x14, 0xc5, 0xe7, 0xb6, 0x6b, 0x1b, 0x75, 0x0d, 0x99, 0x1f, 0x56, 0x2f, 0x6c, 0xab, 0xe9, 0x53, - 0x60, 0x60, 0xaf, 0x1d, 0x83, 0x75, 0x7d, 0x6a, 0x13, 0x0d, 0x02, 0x6d, 0x6c, 0x54, 0xaf, 0xb0, - 0xbd, 0x18, 0xc5, 0xbe, 0x33, 0x02, 0xfd, 0xf1, 0x2c, 0x25, 0xd0, 0x0f, 0xb4, 0xef, 0x39, 0x22, - 0xd9, 0x34, 0x23, 0x84, 0x3e, 0xea, 0xdc, 0xf3, 0xbb, 0xf7, 0xf8, 0x5e, 0xa3, 0x4f, 0x95, 0x52, - 0x15, 0x87, 0xb8, 0xe0, 0x6a, 0x51, 0xc6, 0x82, 0xc7, 0xcb, 0xf3, 0x39, 0x18, 0x7a, 0x1e, 0xab, - 0x1a, 0x1a, 0x6a, 0x98, 0x92, 0xb9, 0x00, 0x43, 0x4b, 0x6a, 0x68, 0x54, 0x37, 0xca, 0x28, 0xff, - 0xc4, 0x11, 0x91, 0x25, 0x22, 0xc1, 0xa3, 0x96, 0x18, 0xbe, 0x6b, 0x5b, 0xd1, 0x9a, 0xc5, 0x54, - 0x4a, 0x65, 0x2c, 0xae, 0x1d, 0x36, 0xfc, 0xb8, 0x6d, 0x90, 0x50, 0x25, 0xf0, 0x5c, 0x43, 0xb3, - 0x64, 0x05, 0xb4, 0xe6, 0xd3, 0xd6, 0x6c, 0x5f, 0xf3, 0xc5, 0xef, 0xd8, 0x30, 0x01, 0xda, 0x50, - 0x51, 0x3b, 0xc3, 0xd9, 0xdf, 0x3d, 0xf4, 0x3a, 0xe9, 0x12, 0xde, 0xb5, 0x01, 0xfd, 0x2b, 0x74, - 0x54, 0x34, 0x40, 0x0d, 0xe4, 0x2b, 0x7f, 0xe0, 0x85, 0xde, 0xe8, 0xe8, 0x62, 0x18, 0xb5, 0x81, - 0xbb, 0x66, 0x51, 0xd6, 0x35, 0x23, 0xc8, 0xd9, 0x57, 0x82, 0x7f, 0x89, 0x90, 0x36, 0xb4, 0x31, - 0x8e, 0xdd, 0x79, 0x96, 0xed, 0x59, 0xb7, 0x45, 0xbf, 0xa0, 0x43, 0x90, 0xa5, 0x03, 0x77, 0x9f, - 0x05, 0x0f, 0x40, 0x96, 0x16, 0xfb, 0x86, 0xde, 0x32, 0x9d, 0x17, 0x54, 0x16, 0xc0, 0xb9, 0xdb, - 0x75, 0x03, 0x7f, 0x16, 0xa0, 0x0d, 0x94, 0xc1, 0x5e, 0xe8, 0x8d, 0x0e, 0xc9, 0x09, 0xd3, 0xe3, - 0xb5, 0x3a, 0xe9, 0xca, 0x7e, 0x8e, 0xfa, 0x4f, 0x17, 0x32, 0x8f, 0x35, 0x04, 0x2f, 0x43, 0x6f, - 0xd4, 0xbf, 0xf8, 0x1a, 0x6d, 0x39, 0x4f, 0xb4, 0xb1, 0xae, 0x27, 0x25, 0x7b, 0xac, 0x81, 0x1c, - 0xab, 0xf5, 0xa7, 0xff, 0x1e, 0x21, 0x77, 0x19, 0x49, 0x05, 0x04, 0xfb, 0xa1, 0x37, 0xea, 0x91, - 0x9e, 0x55, 0x66, 0xd4, 0x66, 0x3f, 0x58, 0x42, 0xa3, 0x99, 0x92, 0xc1, 0x81, 0xfd, 0xe2, 0x70, - 0xeb, 0xe0, 0x07, 0xe7, 0x23, 0x1d, 0x70, 0xc6, 0xd0, 0xf1, 0x7f, 0xa3, 0xfd, 0x0f, 0x68, 0x98, - 0xa4, 0x98, 0x5c, 0x67, 0xd3, 0x64, 0x96, 0x67, 0x3f, 0x53, 0x9c, 0xff, 0x98, 0xdd, 0xa7, 0x78, - 0x3c, 0xfd, 0x3e, 0xc5, 0x93, 0xc1, 0x0b, 0xdf, 0x47, 0xfd, 0x31, 0xc1, 0xd7, 0x19, 0xce, 0x1f, - 0x30, 0xb9, 0x9f, 0x26, 0xb3, 0x81, 0xb7, 0xd2, 0x26, 0xf8, 0x16, 0xaf, 0x69, 0x3b, 0xfe, 0x00, - 0xbd, 0x6a, 0xb5, 0xbb, 0x64, 0x82, 0x6f, 0x07, 0xbb, 0x37, 0x4b, 0x74, 0x5a, 0x28, 0xb1, 0x11, - 0x8d, 0xd6, 0xac, 0x8b, 0x77, 0xf3, 0x66, 0x63, 0x31, 0xe9, 0xea, 0x66, 0xa9, 0xf7, 0xeb, 0xb2, - 0xc5, 0x2a, 0xc5, 0xa9, 0xac, 0x22, 0xd5, 0x54, 0x71, 0x05, 0xd2, 0x5e, 0x34, 0x76, 0x25, 0x5a, - 0x33, 0xbd, 0xf1, 0x47, 0x5f, 0x09, 0x3e, 0xdf, 0xb7, 0xae, 0xcf, 0xff, 0x02, 0x00, 0x00, 0xff, - 0xff, 0x89, 0xf8, 0x21, 0xa7, 0x5f, 0x03, 0x00, 0x00, -} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1beta1/prediction_service.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1beta1/prediction_service.pb.go deleted file mode 100644 index 2e96b2b..0000000 --- a/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1beta1/prediction_service.pb.go +++ /dev/null @@ -1,344 +0,0 @@ -// Code generated by protoc-gen-go. -// source: google/cloud/ml/v1beta1/prediction_service.proto -// DO NOT EDIT! - -package ml - -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" -import _ "google.golang.org/genproto/googleapis/api/annotations" -import google_api3 "google.golang.org/genproto/googleapis/api/httpbody" - -import ( - context "golang.org/x/net/context" - grpc "google.golang.org/grpc" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// Request for predictions to be issued against a trained model. -// -// The body of the request is a single JSON object with a single top-level -// field: -// -//
-//
instances
-//
A JSON array containing values representing the instances to use for -// prediction.
-//
-// -// The structure of each element of the instances list is determined by your -// model's input definition. Instances can include named inputs or can contain -// only unlabeled values. -// -// Not all data includes named inputs. Some instances will be simple -// JSON values (boolean, number, or string). However, instances are often lists -// of simple values, or complex nested lists. Here are some examples of request -// bodies: -// -// CSV data with each row encoded as a string value: -//
-// {"instances": ["1.0,true,\\"x\\"", "-2.0,false,\\"y\\""]}
-// 
-// Plain text: -//
-// {"instances": ["the quick brown fox", "la bruja le dio"]}
-// 
-// Sentences encoded as lists of words (vectors of strings): -//
-// {
-//   "instances": [
-//     ["the","quick","brown"],
-//     ["la","bruja","le"],
-//     ...
-//   ]
-// }
-// 
-// Floating point scalar values: -//
-// {"instances": [0.0, 1.1, 2.2]}
-// 
-// Vectors of integers: -//
-// {
-//   "instances": [
-//     [0, 1, 2],
-//     [3, 4, 5],
-//     ...
-//   ]
-// }
-// 
-// Tensors (in this case, two-dimensional tensors): -//
-// {
-//   "instances": [
-//     [
-//       [0, 1, 2],
-//       [3, 4, 5]
-//     ],
-//     ...
-//   ]
-// }
-// 
-// Images can be represented different ways. In this encoding scheme the first -// two dimensions represent the rows and columns of the image, and the third -// contains lists (vectors) of the R, G, and B values for each pixel. -//
-// {
-//   "instances": [
-//     [
-//       [
-//         [138, 30, 66],
-//         [130, 20, 56],
-//         ...
-//       ],
-//       [
-//         [126, 38, 61],
-//         [122, 24, 57],
-//         ...
-//       ],
-//       ...
-//     ],
-//     ...
-//   ]
-// }
-// 
-// JSON strings must be encoded as UTF-8. To send binary data, you must -// base64-encode the data and mark it as binary. To mark a JSON string -// as binary, replace it with a JSON object with a single attribute named `b64`: -//
{"b64": "..."} 
-// For example: -// -// Two Serialized tf.Examples (fake data, for illustrative purposes only): -//
-// {"instances": [{"b64": "X5ad6u"}, {"b64": "IA9j4nx"}]}
-// 
-// Two JPEG image byte strings (fake data, for illustrative purposes only): -//
-// {"instances": [{"b64": "ASa8asdf"}, {"b64": "JLK7ljk3"}]}
-// 
-// If your data includes named references, format each instance as a JSON object -// with the named references as the keys: -// -// JSON input data to be preprocessed: -//
-// {
-//   "instances": [
-//     {
-//       "a": 1.0,
-//       "b": true,
-//       "c": "x"
-//     },
-//     {
-//       "a": -2.0,
-//       "b": false,
-//       "c": "y"
-//     }
-//   ]
-// }
-// 
-// Some models have an underlying TensorFlow graph that accepts multiple input -// tensors. In this case, you should use the names of JSON name/value pairs to -// identify the input tensors, as shown in the following exmaples: -// -// For a graph with input tensor aliases "tag" (string) and "image" -// (base64-encoded string): -//
-// {
-//   "instances": [
-//     {
-//       "tag": "beach",
-//       "image": {"b64": "ASa8asdf"}
-//     },
-//     {
-//       "tag": "car",
-//       "image": {"b64": "JLK7ljk3"}
-//     }
-//   ]
-// }
-// 
-// For a graph with input tensor aliases "tag" (string) and "image" -// (3-dimensional array of 8-bit ints): -//
-// {
-//   "instances": [
-//     {
-//       "tag": "beach",
-//       "image": [
-//         [
-//           [138, 30, 66],
-//           [130, 20, 56],
-//           ...
-//         ],
-//         [
-//           [126, 38, 61],
-//           [122, 24, 57],
-//           ...
-//         ],
-//         ...
-//       ]
-//     },
-//     {
-//       "tag": "car",
-//       "image": [
-//         [
-//           [255, 0, 102],
-//           [255, 0, 97],
-//           ...
-//         ],
-//         [
-//           [254, 1, 101],
-//           [254, 2, 93],
-//           ...
-//         ],
-//         ...
-//       ]
-//     },
-//     ...
-//   ]
-// }
-// 
-// If the call is successful, the response body will contain one prediction -// entry per instance in the request body. If prediction fails for any -// instance, the response body will contain no predictions and will contian -// a single error entry instead. -type PredictRequest struct { - // Required. The resource name of a model or a version. - // - // Authorization: requires `Viewer` role on the parent project. - Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - // - // Required. The prediction request body. - HttpBody *google_api3.HttpBody `protobuf:"bytes,2,opt,name=http_body,json=httpBody" json:"http_body,omitempty"` -} - -func (m *PredictRequest) Reset() { *m = PredictRequest{} } -func (m *PredictRequest) String() string { return proto.CompactTextString(m) } -func (*PredictRequest) ProtoMessage() {} -func (*PredictRequest) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0} } - -func (m *PredictRequest) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *PredictRequest) GetHttpBody() *google_api3.HttpBody { - if m != nil { - return m.HttpBody - } - return nil -} - -func init() { - proto.RegisterType((*PredictRequest)(nil), "google.cloud.ml.v1beta1.PredictRequest") -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 - -// Client API for OnlinePredictionService service - -type OnlinePredictionServiceClient interface { - // Performs prediction on the data in the request. - // - // **** REMOVE FROM GENERATED DOCUMENTATION - Predict(ctx context.Context, in *PredictRequest, opts ...grpc.CallOption) (*google_api3.HttpBody, error) -} - -type onlinePredictionServiceClient struct { - cc *grpc.ClientConn -} - -func NewOnlinePredictionServiceClient(cc *grpc.ClientConn) OnlinePredictionServiceClient { - return &onlinePredictionServiceClient{cc} -} - -func (c *onlinePredictionServiceClient) Predict(ctx context.Context, in *PredictRequest, opts ...grpc.CallOption) (*google_api3.HttpBody, error) { - out := new(google_api3.HttpBody) - err := grpc.Invoke(ctx, "/google.cloud.ml.v1beta1.OnlinePredictionService/Predict", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// Server API for OnlinePredictionService service - -type OnlinePredictionServiceServer interface { - // Performs prediction on the data in the request. - // - // **** REMOVE FROM GENERATED DOCUMENTATION - Predict(context.Context, *PredictRequest) (*google_api3.HttpBody, error) -} - -func RegisterOnlinePredictionServiceServer(s *grpc.Server, srv OnlinePredictionServiceServer) { - s.RegisterService(&_OnlinePredictionService_serviceDesc, srv) -} - -func _OnlinePredictionService_Predict_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PredictRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(OnlinePredictionServiceServer).Predict(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/google.cloud.ml.v1beta1.OnlinePredictionService/Predict", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(OnlinePredictionServiceServer).Predict(ctx, req.(*PredictRequest)) - } - return interceptor(ctx, in, info, handler) -} - -var _OnlinePredictionService_serviceDesc = grpc.ServiceDesc{ - ServiceName: "google.cloud.ml.v1beta1.OnlinePredictionService", - HandlerType: (*OnlinePredictionServiceServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Predict", - Handler: _OnlinePredictionService_Predict_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "google/cloud/ml/v1beta1/prediction_service.proto", -} - -func init() { proto.RegisterFile("google/cloud/ml/v1beta1/prediction_service.proto", fileDescriptor3) } - -var fileDescriptor3 = []byte{ - // 312 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x91, 0x4d, 0x4a, 0x03, 0x31, - 0x14, 0xc7, 0x49, 0x11, 0xb5, 0x11, 0x5c, 0x04, 0xb1, 0xb5, 0x08, 0x96, 0xba, 0xb0, 0x74, 0x91, - 0xd8, 0xba, 0xb2, 0xe2, 0xa6, 0x2b, 0x77, 0x0e, 0x75, 0x21, 0xb8, 0x29, 0xe9, 0x4c, 0x48, 0x23, - 0x99, 0xbc, 0x38, 0x93, 0x16, 0x8b, 0xb8, 0xf1, 0x0a, 0x3d, 0x9a, 0x57, 0xf0, 0x20, 0x92, 0x49, - 0x28, 0xca, 0xe8, 0xee, 0x31, 0x6f, 0x7e, 0xef, 0xff, 0x11, 0x7c, 0x29, 0x01, 0xa4, 0x16, 0x2c, - 0xd5, 0xb0, 0xcc, 0x58, 0xae, 0xd9, 0x6a, 0x38, 0x17, 0x8e, 0x0f, 0x99, 0x2d, 0x44, 0xa6, 0x52, - 0xa7, 0xc0, 0xcc, 0x4a, 0x51, 0xac, 0x54, 0x2a, 0xa8, 0x2d, 0xc0, 0x01, 0x69, 0x05, 0x82, 0x56, - 0x04, 0xcd, 0x35, 0x8d, 0x44, 0xe7, 0x34, 0x9e, 0xe2, 0x56, 0x31, 0x6e, 0x0c, 0x38, 0xee, 0xe9, - 0x32, 0x60, 0x9d, 0x93, 0x1f, 0xdb, 0x85, 0x73, 0x76, 0x0e, 0xd9, 0x3a, 0xac, 0x7a, 0x8f, 0xf8, - 0x30, 0x09, 0x6a, 0x53, 0xf1, 0xb2, 0x14, 0xa5, 0x23, 0x04, 0xef, 0x18, 0x9e, 0x8b, 0x36, 0xea, - 0xa2, 0x7e, 0x73, 0x5a, 0xcd, 0x64, 0x88, 0x9b, 0x9e, 0x9b, 0x79, 0xb0, 0xdd, 0xe8, 0xa2, 0xfe, - 0xc1, 0xe8, 0x88, 0x46, 0x2f, 0xdc, 0x2a, 0x7a, 0xe7, 0x9c, 0x9d, 0x40, 0xb6, 0x9e, 0xee, 0x2f, - 0xe2, 0x34, 0xda, 0x20, 0xdc, 0xba, 0x37, 0x5a, 0x19, 0x91, 0x6c, 0xd3, 0x3c, 0x84, 0x30, 0xe4, - 0x15, 0xef, 0xc5, 0x8f, 0xe4, 0x82, 0xfe, 0x13, 0x89, 0xfe, 0xb6, 0xd5, 0xf9, 0x53, 0xaf, 0x47, - 0x3f, 0x3e, 0xbf, 0x36, 0x8d, 0x7e, 0xef, 0x7c, 0xdb, 0xdd, 0x9b, 0x37, 0x7c, 0x6b, 0x0b, 0x78, - 0x16, 0xa9, 0x2b, 0xd9, 0x60, 0xf0, 0x3e, 0x8e, 0x75, 0x8e, 0xd1, 0x60, 0xb2, 0xc2, 0x67, 0x29, - 0xe4, 0x35, 0x4d, 0x7f, 0x33, 0x1e, 0x98, 0x1c, 0xd7, 0xfc, 0x26, 0xbe, 0xa9, 0x04, 0x3d, 0x5d, - 0x47, 0x4c, 0x82, 0xe6, 0x46, 0x52, 0x28, 0x24, 0x93, 0xc2, 0x54, 0x3d, 0xb2, 0xb0, 0xe2, 0x56, - 0x95, 0xb5, 0xe7, 0xbc, 0xc9, 0xf5, 0x7c, 0xb7, 0xfa, 0xeb, 0xea, 0x3b, 0x00, 0x00, 0xff, 0xff, - 0x00, 0x26, 0x25, 0x67, 0xf3, 0x01, 0x00, 0x00, -} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1beta1/project_service.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1beta1/project_service.pb.go deleted file mode 100644 index adfda7e..0000000 --- a/vendor/google.golang.org/genproto/googleapis/cloud/ml/v1beta1/project_service.pb.go +++ /dev/null @@ -1,179 +0,0 @@ -// Code generated by protoc-gen-go. -// source: google/cloud/ml/v1beta1/project_service.proto -// DO NOT EDIT! - -package ml - -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" -import _ "google.golang.org/genproto/googleapis/api/annotations" - -import ( - context "golang.org/x/net/context" - grpc "google.golang.org/grpc" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// Requests service account information associated with a project. -type GetConfigRequest struct { - // Required. The project name. - // - // Authorization: requires `Viewer` role on the specified project. - Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` -} - -func (m *GetConfigRequest) Reset() { *m = GetConfigRequest{} } -func (m *GetConfigRequest) String() string { return proto.CompactTextString(m) } -func (*GetConfigRequest) ProtoMessage() {} -func (*GetConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{0} } - -func (m *GetConfigRequest) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -// Returns service account information associated with a project. -type GetConfigResponse struct { - // The service account Cloud ML uses to access resources in the project. - ServiceAccount string `protobuf:"bytes,1,opt,name=service_account,json=serviceAccount" json:"service_account,omitempty"` - // The project number for `service_account`. - ServiceAccountProject int64 `protobuf:"varint,2,opt,name=service_account_project,json=serviceAccountProject" json:"service_account_project,omitempty"` -} - -func (m *GetConfigResponse) Reset() { *m = GetConfigResponse{} } -func (m *GetConfigResponse) String() string { return proto.CompactTextString(m) } -func (*GetConfigResponse) ProtoMessage() {} -func (*GetConfigResponse) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{1} } - -func (m *GetConfigResponse) GetServiceAccount() string { - if m != nil { - return m.ServiceAccount - } - return "" -} - -func (m *GetConfigResponse) GetServiceAccountProject() int64 { - if m != nil { - return m.ServiceAccountProject - } - return 0 -} - -func init() { - proto.RegisterType((*GetConfigRequest)(nil), "google.cloud.ml.v1beta1.GetConfigRequest") - proto.RegisterType((*GetConfigResponse)(nil), "google.cloud.ml.v1beta1.GetConfigResponse") -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 - -// Client API for ProjectManagementService service - -type ProjectManagementServiceClient interface { - // Get the service account information associated with your project. You need - // this information in order to grant the service account persmissions for - // the Google Cloud Storage location where you put your model training code - // for training the model with Google Cloud Machine Learning. - GetConfig(ctx context.Context, in *GetConfigRequest, opts ...grpc.CallOption) (*GetConfigResponse, error) -} - -type projectManagementServiceClient struct { - cc *grpc.ClientConn -} - -func NewProjectManagementServiceClient(cc *grpc.ClientConn) ProjectManagementServiceClient { - return &projectManagementServiceClient{cc} -} - -func (c *projectManagementServiceClient) GetConfig(ctx context.Context, in *GetConfigRequest, opts ...grpc.CallOption) (*GetConfigResponse, error) { - out := new(GetConfigResponse) - err := grpc.Invoke(ctx, "/google.cloud.ml.v1beta1.ProjectManagementService/GetConfig", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// Server API for ProjectManagementService service - -type ProjectManagementServiceServer interface { - // Get the service account information associated with your project. You need - // this information in order to grant the service account persmissions for - // the Google Cloud Storage location where you put your model training code - // for training the model with Google Cloud Machine Learning. - GetConfig(context.Context, *GetConfigRequest) (*GetConfigResponse, error) -} - -func RegisterProjectManagementServiceServer(s *grpc.Server, srv ProjectManagementServiceServer) { - s.RegisterService(&_ProjectManagementService_serviceDesc, srv) -} - -func _ProjectManagementService_GetConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetConfigRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ProjectManagementServiceServer).GetConfig(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/google.cloud.ml.v1beta1.ProjectManagementService/GetConfig", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ProjectManagementServiceServer).GetConfig(ctx, req.(*GetConfigRequest)) - } - return interceptor(ctx, in, info, handler) -} - -var _ProjectManagementService_serviceDesc = grpc.ServiceDesc{ - ServiceName: "google.cloud.ml.v1beta1.ProjectManagementService", - HandlerType: (*ProjectManagementServiceServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "GetConfig", - Handler: _ProjectManagementService_GetConfig_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "google/cloud/ml/v1beta1/project_service.proto", -} - -func init() { proto.RegisterFile("google/cloud/ml/v1beta1/project_service.proto", fileDescriptor4) } - -var fileDescriptor4 = []byte{ - // 327 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x4f, 0x4a, 0x43, 0x31, - 0x10, 0xc6, 0x79, 0x55, 0x84, 0x66, 0xe1, 0x9f, 0x88, 0xb4, 0x14, 0xc1, 0x52, 0xa4, 0xd6, 0xa2, - 0x09, 0x55, 0x10, 0x54, 0x5c, 0x58, 0x17, 0xae, 0x84, 0x52, 0x77, 0x6e, 0x4a, 0xfa, 0x1c, 0xc3, - 0x93, 0x24, 0x13, 0x5f, 0xd2, 0x6e, 0xc4, 0x8d, 0x27, 0x10, 0x3c, 0x87, 0xa7, 0xf1, 0x0a, 0x1e, - 0x44, 0xfa, 0x92, 0x16, 0x6d, 0x11, 0xdc, 0x0d, 0x33, 0xbf, 0x6f, 0x32, 0xdf, 0x4c, 0xc8, 0xa1, - 0x44, 0x94, 0x0a, 0x78, 0xaa, 0x70, 0x74, 0xcf, 0xb5, 0xe2, 0xe3, 0xce, 0x10, 0xbc, 0xe8, 0x70, - 0x9b, 0xe3, 0x23, 0xa4, 0x7e, 0xe0, 0x20, 0x1f, 0x67, 0x29, 0x30, 0x9b, 0xa3, 0x47, 0x5a, 0x09, - 0x38, 0x2b, 0x70, 0xa6, 0x15, 0x8b, 0x78, 0x6d, 0x3b, 0xf6, 0x11, 0x36, 0xe3, 0xc2, 0x18, 0xf4, - 0xc2, 0x67, 0x68, 0x5c, 0x90, 0x35, 0x9a, 0x64, 0xfd, 0x1a, 0xfc, 0x15, 0x9a, 0x87, 0x4c, 0xf6, - 0xe1, 0x69, 0x04, 0xce, 0x53, 0x4a, 0x96, 0x8d, 0xd0, 0x50, 0x4d, 0xea, 0x49, 0xab, 0xdc, 0x2f, - 0xe2, 0x86, 0x27, 0x1b, 0x3f, 0x38, 0x67, 0xd1, 0x38, 0xa0, 0x7b, 0x64, 0x2d, 0x0e, 0x31, 0x10, - 0x69, 0x8a, 0x23, 0xe3, 0xa3, 0x66, 0x35, 0xa6, 0x2f, 0x43, 0x96, 0x9e, 0x90, 0xca, 0x1c, 0x38, - 0x88, 0x2e, 0xaa, 0xa5, 0x7a, 0xd2, 0x5a, 0xea, 0x6f, 0xfd, 0x16, 0xf4, 0x42, 0xf1, 0xe8, 0x23, - 0x21, 0xd5, 0x18, 0xdf, 0x08, 0x23, 0x24, 0x68, 0x30, 0xfe, 0x36, 0xa0, 0xf4, 0x2d, 0x21, 0xe5, - 0xd9, 0x4c, 0x74, 0x9f, 0xfd, 0xb1, 0x00, 0x36, 0xef, 0xaf, 0xd6, 0xfe, 0x0f, 0x1a, 0x2c, 0x36, - 0x0e, 0x5e, 0x3f, 0xbf, 0xde, 0x4b, 0x4d, 0xba, 0x3b, 0x5b, 0xff, 0xf3, 0x64, 0x1f, 0x17, 0x71, - 0x7c, 0xc7, 0xdb, 0x2f, 0x67, 0x72, 0xaa, 0xea, 0x3a, 0xb2, 0x93, 0xa2, 0x5e, 0x68, 0x2f, 0x6c, - 0x36, 0x7d, 0xa2, 0xbb, 0x19, 0xfd, 0x44, 0x17, 0xbd, 0xc9, 0x15, 0x7a, 0xc9, 0xdd, 0x69, 0xd4, - 0x48, 0x54, 0xc2, 0x48, 0x86, 0xb9, 0xe4, 0x12, 0x4c, 0x71, 0x23, 0x1e, 0x4a, 0xc2, 0x66, 0x6e, - 0xe1, 0x33, 0x9c, 0x6b, 0x35, 0x5c, 0x29, 0xa8, 0xe3, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x76, - 0x59, 0xc4, 0x91, 0x31, 0x02, 0x00, 0x00, -} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/oslogin/common/common.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/oslogin/common/common.pb.go new file mode 100644 index 0000000..28d6948 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/oslogin/common/common.pb.go @@ -0,0 +1,196 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/oslogin/common/common.proto + +/* +Package common is a generated protocol buffer package. + +It is generated from these files: + google/cloud/oslogin/common/common.proto + +It has these top-level messages: + PosixAccount + SshPublicKey +*/ +package common + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// The POSIX account information associated with a Google account. +type PosixAccount struct { + // Only one POSIX account can be marked as primary. + Primary bool `protobuf:"varint,1,opt,name=primary" json:"primary,omitempty"` + // The username of the POSIX account. + Username string `protobuf:"bytes,2,opt,name=username" json:"username,omitempty"` + // The user ID. + Uid int64 `protobuf:"varint,3,opt,name=uid" json:"uid,omitempty"` + // The default group ID. + Gid int64 `protobuf:"varint,4,opt,name=gid" json:"gid,omitempty"` + // The path to the home directory for this account. + HomeDirectory string `protobuf:"bytes,5,opt,name=home_directory,json=homeDirectory" json:"home_directory,omitempty"` + // The path to the logic shell for this account. + Shell string `protobuf:"bytes,6,opt,name=shell" json:"shell,omitempty"` + // The GECOS (user information) entry for this account. + Gecos string `protobuf:"bytes,7,opt,name=gecos" json:"gecos,omitempty"` + // System identifier for which account the username or uid applies to. + // By default, the empty value is used. + SystemId string `protobuf:"bytes,8,opt,name=system_id,json=systemId" json:"system_id,omitempty"` + // Output only. A POSIX account identifier. + AccountId string `protobuf:"bytes,9,opt,name=account_id,json=accountId" json:"account_id,omitempty"` +} + +func (m *PosixAccount) Reset() { *m = PosixAccount{} } +func (m *PosixAccount) String() string { return proto.CompactTextString(m) } +func (*PosixAccount) ProtoMessage() {} +func (*PosixAccount) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *PosixAccount) GetPrimary() bool { + if m != nil { + return m.Primary + } + return false +} + +func (m *PosixAccount) GetUsername() string { + if m != nil { + return m.Username + } + return "" +} + +func (m *PosixAccount) GetUid() int64 { + if m != nil { + return m.Uid + } + return 0 +} + +func (m *PosixAccount) GetGid() int64 { + if m != nil { + return m.Gid + } + return 0 +} + +func (m *PosixAccount) GetHomeDirectory() string { + if m != nil { + return m.HomeDirectory + } + return "" +} + +func (m *PosixAccount) GetShell() string { + if m != nil { + return m.Shell + } + return "" +} + +func (m *PosixAccount) GetGecos() string { + if m != nil { + return m.Gecos + } + return "" +} + +func (m *PosixAccount) GetSystemId() string { + if m != nil { + return m.SystemId + } + return "" +} + +func (m *PosixAccount) GetAccountId() string { + if m != nil { + return m.AccountId + } + return "" +} + +// The SSH public key information associated with a Google account. +type SshPublicKey struct { + // Public key text in SSH format, defined by + // RFC4253 + // section 6.6. + Key string `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + // An expiration time in microseconds since epoch. + ExpirationTimeUsec int64 `protobuf:"varint,2,opt,name=expiration_time_usec,json=expirationTimeUsec" json:"expiration_time_usec,omitempty"` + // Output only. The SHA-256 fingerprint of the SSH public key. + Fingerprint string `protobuf:"bytes,3,opt,name=fingerprint" json:"fingerprint,omitempty"` +} + +func (m *SshPublicKey) Reset() { *m = SshPublicKey{} } +func (m *SshPublicKey) String() string { return proto.CompactTextString(m) } +func (*SshPublicKey) ProtoMessage() {} +func (*SshPublicKey) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *SshPublicKey) GetKey() string { + if m != nil { + return m.Key + } + return "" +} + +func (m *SshPublicKey) GetExpirationTimeUsec() int64 { + if m != nil { + return m.ExpirationTimeUsec + } + return 0 +} + +func (m *SshPublicKey) GetFingerprint() string { + if m != nil { + return m.Fingerprint + } + return "" +} + +func init() { + proto.RegisterType((*PosixAccount)(nil), "google.cloud.oslogin.common.PosixAccount") + proto.RegisterType((*SshPublicKey)(nil), "google.cloud.oslogin.common.SshPublicKey") +} + +func init() { proto.RegisterFile("google/cloud/oslogin/common/common.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 406 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x41, 0x6b, 0x14, 0x31, + 0x14, 0xc7, 0x99, 0xae, 0x6d, 0x77, 0xe2, 0x2a, 0x12, 0x7a, 0x08, 0x5d, 0xc5, 0xa5, 0x20, 0xec, + 0x69, 0x46, 0xf0, 0xe8, 0xa9, 0xad, 0x20, 0x45, 0xc1, 0x65, 0xd4, 0x8b, 0x2c, 0x2c, 0xd3, 0xe4, + 0x99, 0x7d, 0x38, 0xc9, 0x1b, 0x92, 0x0c, 0x74, 0xbf, 0x92, 0x07, 0x3f, 0x88, 0x5f, 0xc8, 0xab, + 0x24, 0x99, 0x51, 0x0f, 0xd2, 0x53, 0xf2, 0xff, 0xff, 0xfe, 0xf3, 0x92, 0x97, 0x37, 0x6c, 0xad, + 0x89, 0x74, 0x07, 0xb5, 0xec, 0x68, 0x50, 0x35, 0xf9, 0x8e, 0x34, 0xda, 0x5a, 0x92, 0x31, 0x34, + 0x2d, 0x55, 0xef, 0x28, 0x10, 0x5f, 0xe6, 0x64, 0x95, 0x92, 0xd5, 0x98, 0xac, 0x72, 0xe4, 0xfc, + 0xe9, 0x58, 0xa6, 0xed, 0xb1, 0x6e, 0xad, 0xa5, 0xd0, 0x06, 0x24, 0xeb, 0xf3, 0xa7, 0x17, 0xbf, + 0x0a, 0xb6, 0xd8, 0x90, 0xc7, 0xbb, 0x4b, 0x29, 0x69, 0xb0, 0x81, 0x0b, 0x76, 0xda, 0x3b, 0x34, + 0xad, 0x3b, 0x88, 0x62, 0x55, 0xac, 0xe7, 0xcd, 0x24, 0xf9, 0x39, 0x9b, 0x0f, 0x1e, 0x9c, 0x6d, + 0x0d, 0x88, 0xa3, 0x55, 0xb1, 0x2e, 0x9b, 0x3f, 0x9a, 0x3f, 0x61, 0xb3, 0x01, 0x95, 0x98, 0xad, + 0x8a, 0xf5, 0xac, 0x89, 0xdb, 0xe8, 0x68, 0x54, 0xe2, 0x41, 0x76, 0x34, 0x2a, 0xfe, 0x82, 0x3d, + 0xde, 0x93, 0x81, 0x9d, 0x42, 0x07, 0x32, 0x90, 0x3b, 0x88, 0xe3, 0x54, 0xe5, 0x51, 0x74, 0xdf, + 0x4c, 0x26, 0x3f, 0x63, 0xc7, 0x7e, 0x0f, 0x5d, 0x27, 0x4e, 0x12, 0xcd, 0x22, 0xba, 0x1a, 0x24, + 0x79, 0x71, 0x9a, 0xdd, 0x24, 0xf8, 0x92, 0x95, 0xfe, 0xe0, 0x03, 0x98, 0x1d, 0x2a, 0x31, 0xcf, + 0x77, 0xca, 0xc6, 0x8d, 0xe2, 0xcf, 0x18, 0x6b, 0x73, 0x53, 0x91, 0x96, 0x89, 0x96, 0xa3, 0x73, + 0xa3, 0x2e, 0x02, 0x5b, 0x7c, 0xf4, 0xfb, 0xcd, 0x70, 0xdb, 0xa1, 0x7c, 0x07, 0x87, 0x78, 0xe1, + 0x6f, 0x90, 0x9b, 0x2e, 0x9b, 0xb8, 0xe5, 0x2f, 0xd9, 0x19, 0xdc, 0xf5, 0xe8, 0xd2, 0x83, 0xed, + 0x02, 0x1a, 0xd8, 0x0d, 0x1e, 0x64, 0x6a, 0x7e, 0xd6, 0xf0, 0xbf, 0xec, 0x13, 0x1a, 0xf8, 0xec, + 0x41, 0xf2, 0x15, 0x7b, 0xf8, 0x15, 0xad, 0x06, 0xd7, 0x3b, 0xb4, 0x21, 0x3d, 0x47, 0xd9, 0xfc, + 0x6b, 0x5d, 0xfd, 0x28, 0xd8, 0x73, 0x49, 0xa6, 0xba, 0x67, 0x62, 0x57, 0x8b, 0x0f, 0xfe, 0x7d, + 0xd4, 0x9b, 0x38, 0xa1, 0x2f, 0x97, 0x63, 0x54, 0x53, 0xd7, 0x5a, 0x5d, 0x91, 0xd3, 0xb5, 0x06, + 0x9b, 0xa6, 0x57, 0x67, 0xd4, 0xf6, 0xe8, 0xff, 0xfb, 0x97, 0xbc, 0xce, 0xcb, 0xf7, 0xa3, 0xe5, + 0xdb, 0x5c, 0xe3, 0x3a, 0x1d, 0x37, 0x96, 0xaf, 0xae, 0x13, 0xfd, 0x39, 0xd1, 0x6d, 0xa2, 0xdb, + 0x91, 0x6e, 0x33, 0xbd, 0x3d, 0x49, 0x27, 0xbd, 0xfa, 0x1d, 0x00, 0x00, 0xff, 0xff, 0xdc, 0x30, + 0xf7, 0x5b, 0x8e, 0x02, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/oslogin/v1/oslogin.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/oslogin/v1/oslogin.pb.go new file mode 100644 index 0000000..9ebcb38 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/oslogin/v1/oslogin.pb.go @@ -0,0 +1,584 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/oslogin/v1/oslogin.proto + +/* +Package oslogin is a generated protocol buffer package. + +It is generated from these files: + google/cloud/oslogin/v1/oslogin.proto + +It has these top-level messages: + LoginProfile + DeletePosixAccountRequest + DeleteSshPublicKeyRequest + GetLoginProfileRequest + GetSshPublicKeyRequest + ImportSshPublicKeyRequest + ImportSshPublicKeyResponse + UpdateSshPublicKeyRequest +*/ +package oslogin + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_cloud_oslogin_common "google.golang.org/genproto/googleapis/cloud/oslogin/common" +import google_protobuf1 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf2 "google.golang.org/genproto/protobuf/field_mask" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// The user profile information used for logging in to a virtual machine on +// Google Compute Engine. +type LoginProfile struct { + // The primary email address that uniquely identifies the user. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The list of POSIX accounts associated with the user. + PosixAccounts []*google_cloud_oslogin_common.PosixAccount `protobuf:"bytes,2,rep,name=posix_accounts,json=posixAccounts" json:"posix_accounts,omitempty"` + // A map from SSH public key fingerprint to the associated key object. + SshPublicKeys map[string]*google_cloud_oslogin_common.SshPublicKey `protobuf:"bytes,3,rep,name=ssh_public_keys,json=sshPublicKeys" json:"ssh_public_keys,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Indicates if the user is suspended. A suspended user cannot log in but + // their profile information is retained. + Suspended bool `protobuf:"varint,4,opt,name=suspended" json:"suspended,omitempty"` +} + +func (m *LoginProfile) Reset() { *m = LoginProfile{} } +func (m *LoginProfile) String() string { return proto.CompactTextString(m) } +func (*LoginProfile) ProtoMessage() {} +func (*LoginProfile) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *LoginProfile) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *LoginProfile) GetPosixAccounts() []*google_cloud_oslogin_common.PosixAccount { + if m != nil { + return m.PosixAccounts + } + return nil +} + +func (m *LoginProfile) GetSshPublicKeys() map[string]*google_cloud_oslogin_common.SshPublicKey { + if m != nil { + return m.SshPublicKeys + } + return nil +} + +func (m *LoginProfile) GetSuspended() bool { + if m != nil { + return m.Suspended + } + return false +} + +// A request message for deleting a POSIX account entry. +type DeletePosixAccountRequest struct { + // A reference to the POSIX account to update. POSIX accounts are identified + // by the project ID they are associated with. A reference to the POSIX + // account is in format `users/{user}/projects/{project}`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeletePosixAccountRequest) Reset() { *m = DeletePosixAccountRequest{} } +func (m *DeletePosixAccountRequest) String() string { return proto.CompactTextString(m) } +func (*DeletePosixAccountRequest) ProtoMessage() {} +func (*DeletePosixAccountRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *DeletePosixAccountRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// A request message for deleting an SSH public key. +type DeleteSshPublicKeyRequest struct { + // The fingerprint of the public key to update. Public keys are identified by + // their SHA-256 fingerprint. The fingerprint of the public key is in format + // `users/{user}/sshPublicKeys/{fingerprint}`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteSshPublicKeyRequest) Reset() { *m = DeleteSshPublicKeyRequest{} } +func (m *DeleteSshPublicKeyRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteSshPublicKeyRequest) ProtoMessage() {} +func (*DeleteSshPublicKeyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *DeleteSshPublicKeyRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// A request message for retrieving the login profile information for a user. +type GetLoginProfileRequest struct { + // The unique ID for the user in format `users/{user}`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetLoginProfileRequest) Reset() { *m = GetLoginProfileRequest{} } +func (m *GetLoginProfileRequest) String() string { return proto.CompactTextString(m) } +func (*GetLoginProfileRequest) ProtoMessage() {} +func (*GetLoginProfileRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *GetLoginProfileRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// A request message for retrieving an SSH public key. +type GetSshPublicKeyRequest struct { + // The fingerprint of the public key to retrieve. Public keys are identified + // by their SHA-256 fingerprint. The fingerprint of the public key is in + // format `users/{user}/sshPublicKeys/{fingerprint}`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetSshPublicKeyRequest) Reset() { *m = GetSshPublicKeyRequest{} } +func (m *GetSshPublicKeyRequest) String() string { return proto.CompactTextString(m) } +func (*GetSshPublicKeyRequest) ProtoMessage() {} +func (*GetSshPublicKeyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *GetSshPublicKeyRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// A request message for importing an SSH public key. +type ImportSshPublicKeyRequest struct { + // The unique ID for the user in format `users/{user}`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The SSH public key and expiration time. + SshPublicKey *google_cloud_oslogin_common.SshPublicKey `protobuf:"bytes,2,opt,name=ssh_public_key,json=sshPublicKey" json:"ssh_public_key,omitempty"` + // The project ID of the Google Cloud Platform project. + ProjectId string `protobuf:"bytes,3,opt,name=project_id,json=projectId" json:"project_id,omitempty"` +} + +func (m *ImportSshPublicKeyRequest) Reset() { *m = ImportSshPublicKeyRequest{} } +func (m *ImportSshPublicKeyRequest) String() string { return proto.CompactTextString(m) } +func (*ImportSshPublicKeyRequest) ProtoMessage() {} +func (*ImportSshPublicKeyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *ImportSshPublicKeyRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ImportSshPublicKeyRequest) GetSshPublicKey() *google_cloud_oslogin_common.SshPublicKey { + if m != nil { + return m.SshPublicKey + } + return nil +} + +func (m *ImportSshPublicKeyRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +// A response message for importing an SSH public key. +type ImportSshPublicKeyResponse struct { + // The login profile information for the user. + LoginProfile *LoginProfile `protobuf:"bytes,1,opt,name=login_profile,json=loginProfile" json:"login_profile,omitempty"` +} + +func (m *ImportSshPublicKeyResponse) Reset() { *m = ImportSshPublicKeyResponse{} } +func (m *ImportSshPublicKeyResponse) String() string { return proto.CompactTextString(m) } +func (*ImportSshPublicKeyResponse) ProtoMessage() {} +func (*ImportSshPublicKeyResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *ImportSshPublicKeyResponse) GetLoginProfile() *LoginProfile { + if m != nil { + return m.LoginProfile + } + return nil +} + +// A request message for updating an SSH public key. +type UpdateSshPublicKeyRequest struct { + // The fingerprint of the public key to update. Public keys are identified by + // their SHA-256 fingerprint. The fingerprint of the public key is in format + // `users/{user}/sshPublicKeys/{fingerprint}`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The SSH public key and expiration time. + SshPublicKey *google_cloud_oslogin_common.SshPublicKey `protobuf:"bytes,2,opt,name=ssh_public_key,json=sshPublicKey" json:"ssh_public_key,omitempty"` + // Mask to control which fields get updated. Updates all if not present. + UpdateMask *google_protobuf2.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateSshPublicKeyRequest) Reset() { *m = UpdateSshPublicKeyRequest{} } +func (m *UpdateSshPublicKeyRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateSshPublicKeyRequest) ProtoMessage() {} +func (*UpdateSshPublicKeyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *UpdateSshPublicKeyRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *UpdateSshPublicKeyRequest) GetSshPublicKey() *google_cloud_oslogin_common.SshPublicKey { + if m != nil { + return m.SshPublicKey + } + return nil +} + +func (m *UpdateSshPublicKeyRequest) GetUpdateMask() *google_protobuf2.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +func init() { + proto.RegisterType((*LoginProfile)(nil), "google.cloud.oslogin.v1.LoginProfile") + proto.RegisterType((*DeletePosixAccountRequest)(nil), "google.cloud.oslogin.v1.DeletePosixAccountRequest") + proto.RegisterType((*DeleteSshPublicKeyRequest)(nil), "google.cloud.oslogin.v1.DeleteSshPublicKeyRequest") + proto.RegisterType((*GetLoginProfileRequest)(nil), "google.cloud.oslogin.v1.GetLoginProfileRequest") + proto.RegisterType((*GetSshPublicKeyRequest)(nil), "google.cloud.oslogin.v1.GetSshPublicKeyRequest") + proto.RegisterType((*ImportSshPublicKeyRequest)(nil), "google.cloud.oslogin.v1.ImportSshPublicKeyRequest") + proto.RegisterType((*ImportSshPublicKeyResponse)(nil), "google.cloud.oslogin.v1.ImportSshPublicKeyResponse") + proto.RegisterType((*UpdateSshPublicKeyRequest)(nil), "google.cloud.oslogin.v1.UpdateSshPublicKeyRequest") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for OsLoginService service + +type OsLoginServiceClient interface { + // Deletes a POSIX account. + DeletePosixAccount(ctx context.Context, in *DeletePosixAccountRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) + // Deletes an SSH public key. + DeleteSshPublicKey(ctx context.Context, in *DeleteSshPublicKeyRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) + // Retrieves the profile information used for logging in to a virtual machine + // on Google Compute Engine. + GetLoginProfile(ctx context.Context, in *GetLoginProfileRequest, opts ...grpc.CallOption) (*LoginProfile, error) + // Retrieves an SSH public key. + GetSshPublicKey(ctx context.Context, in *GetSshPublicKeyRequest, opts ...grpc.CallOption) (*google_cloud_oslogin_common.SshPublicKey, error) + // Adds an SSH public key and returns the profile information. Default POSIX + // account information is set when no username and UID exist as part of the + // login profile. + ImportSshPublicKey(ctx context.Context, in *ImportSshPublicKeyRequest, opts ...grpc.CallOption) (*ImportSshPublicKeyResponse, error) + // Updates an SSH public key and returns the profile information. This method + // supports patch semantics. + UpdateSshPublicKey(ctx context.Context, in *UpdateSshPublicKeyRequest, opts ...grpc.CallOption) (*google_cloud_oslogin_common.SshPublicKey, error) +} + +type osLoginServiceClient struct { + cc *grpc.ClientConn +} + +func NewOsLoginServiceClient(cc *grpc.ClientConn) OsLoginServiceClient { + return &osLoginServiceClient{cc} +} + +func (c *osLoginServiceClient) DeletePosixAccount(ctx context.Context, in *DeletePosixAccountRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) { + out := new(google_protobuf1.Empty) + err := grpc.Invoke(ctx, "/google.cloud.oslogin.v1.OsLoginService/DeletePosixAccount", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *osLoginServiceClient) DeleteSshPublicKey(ctx context.Context, in *DeleteSshPublicKeyRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) { + out := new(google_protobuf1.Empty) + err := grpc.Invoke(ctx, "/google.cloud.oslogin.v1.OsLoginService/DeleteSshPublicKey", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *osLoginServiceClient) GetLoginProfile(ctx context.Context, in *GetLoginProfileRequest, opts ...grpc.CallOption) (*LoginProfile, error) { + out := new(LoginProfile) + err := grpc.Invoke(ctx, "/google.cloud.oslogin.v1.OsLoginService/GetLoginProfile", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *osLoginServiceClient) GetSshPublicKey(ctx context.Context, in *GetSshPublicKeyRequest, opts ...grpc.CallOption) (*google_cloud_oslogin_common.SshPublicKey, error) { + out := new(google_cloud_oslogin_common.SshPublicKey) + err := grpc.Invoke(ctx, "/google.cloud.oslogin.v1.OsLoginService/GetSshPublicKey", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *osLoginServiceClient) ImportSshPublicKey(ctx context.Context, in *ImportSshPublicKeyRequest, opts ...grpc.CallOption) (*ImportSshPublicKeyResponse, error) { + out := new(ImportSshPublicKeyResponse) + err := grpc.Invoke(ctx, "/google.cloud.oslogin.v1.OsLoginService/ImportSshPublicKey", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *osLoginServiceClient) UpdateSshPublicKey(ctx context.Context, in *UpdateSshPublicKeyRequest, opts ...grpc.CallOption) (*google_cloud_oslogin_common.SshPublicKey, error) { + out := new(google_cloud_oslogin_common.SshPublicKey) + err := grpc.Invoke(ctx, "/google.cloud.oslogin.v1.OsLoginService/UpdateSshPublicKey", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for OsLoginService service + +type OsLoginServiceServer interface { + // Deletes a POSIX account. + DeletePosixAccount(context.Context, *DeletePosixAccountRequest) (*google_protobuf1.Empty, error) + // Deletes an SSH public key. + DeleteSshPublicKey(context.Context, *DeleteSshPublicKeyRequest) (*google_protobuf1.Empty, error) + // Retrieves the profile information used for logging in to a virtual machine + // on Google Compute Engine. + GetLoginProfile(context.Context, *GetLoginProfileRequest) (*LoginProfile, error) + // Retrieves an SSH public key. + GetSshPublicKey(context.Context, *GetSshPublicKeyRequest) (*google_cloud_oslogin_common.SshPublicKey, error) + // Adds an SSH public key and returns the profile information. Default POSIX + // account information is set when no username and UID exist as part of the + // login profile. + ImportSshPublicKey(context.Context, *ImportSshPublicKeyRequest) (*ImportSshPublicKeyResponse, error) + // Updates an SSH public key and returns the profile information. This method + // supports patch semantics. + UpdateSshPublicKey(context.Context, *UpdateSshPublicKeyRequest) (*google_cloud_oslogin_common.SshPublicKey, error) +} + +func RegisterOsLoginServiceServer(s *grpc.Server, srv OsLoginServiceServer) { + s.RegisterService(&_OsLoginService_serviceDesc, srv) +} + +func _OsLoginService_DeletePosixAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeletePosixAccountRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OsLoginServiceServer).DeletePosixAccount(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.oslogin.v1.OsLoginService/DeletePosixAccount", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OsLoginServiceServer).DeletePosixAccount(ctx, req.(*DeletePosixAccountRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _OsLoginService_DeleteSshPublicKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteSshPublicKeyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OsLoginServiceServer).DeleteSshPublicKey(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.oslogin.v1.OsLoginService/DeleteSshPublicKey", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OsLoginServiceServer).DeleteSshPublicKey(ctx, req.(*DeleteSshPublicKeyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _OsLoginService_GetLoginProfile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetLoginProfileRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OsLoginServiceServer).GetLoginProfile(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.oslogin.v1.OsLoginService/GetLoginProfile", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OsLoginServiceServer).GetLoginProfile(ctx, req.(*GetLoginProfileRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _OsLoginService_GetSshPublicKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetSshPublicKeyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OsLoginServiceServer).GetSshPublicKey(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.oslogin.v1.OsLoginService/GetSshPublicKey", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OsLoginServiceServer).GetSshPublicKey(ctx, req.(*GetSshPublicKeyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _OsLoginService_ImportSshPublicKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ImportSshPublicKeyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OsLoginServiceServer).ImportSshPublicKey(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.oslogin.v1.OsLoginService/ImportSshPublicKey", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OsLoginServiceServer).ImportSshPublicKey(ctx, req.(*ImportSshPublicKeyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _OsLoginService_UpdateSshPublicKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateSshPublicKeyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OsLoginServiceServer).UpdateSshPublicKey(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.oslogin.v1.OsLoginService/UpdateSshPublicKey", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OsLoginServiceServer).UpdateSshPublicKey(ctx, req.(*UpdateSshPublicKeyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _OsLoginService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.oslogin.v1.OsLoginService", + HandlerType: (*OsLoginServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "DeletePosixAccount", + Handler: _OsLoginService_DeletePosixAccount_Handler, + }, + { + MethodName: "DeleteSshPublicKey", + Handler: _OsLoginService_DeleteSshPublicKey_Handler, + }, + { + MethodName: "GetLoginProfile", + Handler: _OsLoginService_GetLoginProfile_Handler, + }, + { + MethodName: "GetSshPublicKey", + Handler: _OsLoginService_GetSshPublicKey_Handler, + }, + { + MethodName: "ImportSshPublicKey", + Handler: _OsLoginService_ImportSshPublicKey_Handler, + }, + { + MethodName: "UpdateSshPublicKey", + Handler: _OsLoginService_UpdateSshPublicKey_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/oslogin/v1/oslogin.proto", +} + +func init() { proto.RegisterFile("google/cloud/oslogin/v1/oslogin.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 774 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0xcd, 0x6e, 0xd3, 0x40, + 0x10, 0x96, 0x93, 0x52, 0xe8, 0x26, 0x6d, 0xd1, 0x1e, 0xda, 0xd4, 0x6d, 0xd5, 0x60, 0x51, 0x35, + 0x44, 0xc8, 0x56, 0x52, 0x0e, 0x25, 0x15, 0x54, 0x14, 0x4a, 0x55, 0x7e, 0xd4, 0x28, 0x15, 0x3d, + 0xa0, 0x4a, 0xc1, 0x75, 0xb6, 0xae, 0x89, 0xed, 0x5d, 0xbc, 0x76, 0x44, 0x84, 0x7a, 0xe1, 0xc2, + 0x85, 0x13, 0x9c, 0x38, 0x22, 0x6e, 0x5c, 0x78, 0x02, 0x78, 0x00, 0x24, 0x4e, 0x3c, 0x01, 0x12, + 0x0f, 0x82, 0xbc, 0x5e, 0xb7, 0x4e, 0x6c, 0xa7, 0xae, 0xc4, 0x29, 0xbb, 0x9e, 0xf9, 0x66, 0xbf, + 0xfd, 0x76, 0xbe, 0x51, 0xc0, 0xb2, 0x8e, 0xb1, 0x6e, 0x22, 0x45, 0x33, 0xb1, 0xd7, 0x51, 0x30, + 0x35, 0xb1, 0x6e, 0xd8, 0x4a, 0xaf, 0x16, 0x2e, 0x65, 0xe2, 0x60, 0x17, 0xc3, 0xd9, 0x20, 0x4d, + 0x66, 0x69, 0x72, 0x18, 0xeb, 0xd5, 0xc4, 0x05, 0x8e, 0x57, 0x89, 0xa1, 0xa8, 0xb6, 0x8d, 0x5d, + 0xd5, 0x35, 0xb0, 0x4d, 0x03, 0x98, 0x58, 0x49, 0xac, 0xae, 0x61, 0xcb, 0xc2, 0xe1, 0x0f, 0xcf, + 0x9c, 0xe7, 0x99, 0x6c, 0x77, 0xe8, 0x1d, 0x29, 0xc8, 0x22, 0x6e, 0x9f, 0x07, 0xcb, 0xc3, 0xc1, + 0x23, 0x03, 0x99, 0x9d, 0xb6, 0xa5, 0xd2, 0x6e, 0x90, 0x21, 0xfd, 0xc9, 0x81, 0xe2, 0x13, 0xbf, + 0x78, 0xd3, 0xc1, 0x47, 0x86, 0x89, 0x20, 0x04, 0x63, 0xb6, 0x6a, 0xa1, 0x92, 0x50, 0x16, 0x2a, + 0x13, 0x2d, 0xb6, 0x86, 0x4d, 0x30, 0x45, 0x30, 0x35, 0x5e, 0xb7, 0x55, 0x4d, 0xc3, 0x9e, 0xed, + 0xd2, 0x52, 0xae, 0x9c, 0xaf, 0x14, 0xea, 0x37, 0xe4, 0xc4, 0xdb, 0x71, 0x7e, 0x4d, 0x1f, 0x72, + 0x2f, 0x40, 0xb4, 0x26, 0x49, 0x64, 0x47, 0xe1, 0x0b, 0x30, 0x4d, 0xe9, 0x71, 0x9b, 0x78, 0x87, + 0xa6, 0xa1, 0xb5, 0xbb, 0xa8, 0x4f, 0x4b, 0x79, 0x56, 0x72, 0x4d, 0x4e, 0x11, 0x4c, 0x8e, 0xb2, + 0x94, 0xf7, 0xe8, 0x71, 0x93, 0x61, 0x1f, 0xa3, 0x3e, 0xdd, 0xb2, 0x5d, 0xa7, 0xdf, 0x9a, 0xa4, + 0xd1, 0x6f, 0x70, 0x01, 0x4c, 0x50, 0x8f, 0x12, 0x64, 0x77, 0x50, 0xa7, 0x34, 0x56, 0x16, 0x2a, + 0x57, 0x5a, 0x67, 0x1f, 0xc4, 0x2e, 0x80, 0xf1, 0x12, 0xf0, 0x2a, 0xc8, 0x77, 0x51, 0x9f, 0x5f, + 0xdd, 0x5f, 0xc2, 0x0d, 0x70, 0xa9, 0xa7, 0x9a, 0x1e, 0x2a, 0xe5, 0xca, 0xc2, 0xb9, 0x17, 0x8e, + 0x56, 0x6c, 0x05, 0xb8, 0x46, 0x6e, 0x4d, 0x90, 0x14, 0x30, 0xf7, 0x00, 0x99, 0xc8, 0x45, 0x03, + 0x8a, 0xa0, 0x57, 0x1e, 0xa2, 0x6e, 0x92, 0xde, 0x67, 0x80, 0x81, 0x8a, 0x23, 0x00, 0x37, 0xc1, + 0xcc, 0x36, 0x72, 0xa3, 0x0a, 0x9d, 0x9f, 0x9d, 0xb5, 0xf6, 0x17, 0x01, 0xcc, 0xed, 0x58, 0x04, + 0x3b, 0x89, 0x88, 0x19, 0x30, 0x4e, 0x54, 0x07, 0xd9, 0x2e, 0xc7, 0xf0, 0x1d, 0xdc, 0x05, 0x53, + 0x83, 0x0f, 0x7c, 0x71, 0x05, 0x8b, 0xd1, 0x07, 0x85, 0x8b, 0x00, 0x10, 0x07, 0xbf, 0x44, 0x9a, + 0xdb, 0x36, 0x3a, 0xa5, 0x3c, 0x3b, 0x6c, 0x82, 0x7f, 0xd9, 0xe9, 0x48, 0xc7, 0x40, 0x4c, 0x22, + 0x49, 0x09, 0xb6, 0x29, 0x82, 0x8f, 0xc0, 0x24, 0x3b, 0xa7, 0x4d, 0x02, 0x75, 0x18, 0xd9, 0x42, + 0x7d, 0x39, 0x53, 0xb3, 0xb5, 0x8a, 0x66, 0x64, 0x27, 0x7d, 0x17, 0xc0, 0xdc, 0x33, 0xd2, 0x51, + 0x33, 0xbf, 0xce, 0xff, 0xd7, 0x62, 0x1d, 0x14, 0x3c, 0xc6, 0x80, 0x39, 0x99, 0x89, 0x51, 0xa8, + 0x8b, 0x61, 0xb5, 0xd0, 0xec, 0xf2, 0x43, 0xdf, 0xec, 0x4f, 0x55, 0xda, 0x6d, 0x81, 0x20, 0xdd, + 0x5f, 0xd7, 0x7f, 0x5d, 0x06, 0x53, 0xbb, 0x94, 0x5d, 0x70, 0x0f, 0x39, 0x3d, 0x43, 0x43, 0xf0, + 0x9d, 0x00, 0x60, 0xbc, 0x43, 0x61, 0x3d, 0x55, 0x9e, 0xd4, 0x76, 0x16, 0x67, 0x62, 0x2c, 0xb6, + 0xfc, 0x79, 0x24, 0x2d, 0xbf, 0xfd, 0xfd, 0xf7, 0x63, 0x6e, 0xa9, 0xba, 0xe8, 0x8f, 0xc8, 0x37, + 0xbe, 0x2c, 0x77, 0x3c, 0x8a, 0x1c, 0xaa, 0x54, 0x15, 0xfe, 0x88, 0x54, 0xa9, 0x9e, 0xc0, 0xf7, + 0xa7, 0x4c, 0xa2, 0xd7, 0x3f, 0x97, 0x49, 0xc2, 0x4b, 0xa4, 0x32, 0xa9, 0x32, 0x26, 0xd7, 0xab, + 0x52, 0x9c, 0xc9, 0xc0, 0x04, 0xf1, 0xe9, 0x7c, 0x10, 0xc0, 0xf4, 0x90, 0xb1, 0xa0, 0x92, 0xca, + 0x25, 0xd9, 0x82, 0x62, 0xb6, 0x2e, 0x93, 0x56, 0x18, 0xaf, 0x6b, 0x70, 0x29, 0xc6, 0xeb, 0x44, + 0x89, 0x36, 0x20, 0xfc, 0x14, 0x90, 0x1a, 0x10, 0x68, 0x24, 0xa9, 0x24, 0x75, 0xb2, 0xf7, 0x5e, + 0x28, 0x18, 0xcc, 0x22, 0xd8, 0x0f, 0x01, 0xc0, 0xb8, 0x0f, 0x47, 0xbc, 0x5f, 0xea, 0x64, 0x11, + 0x57, 0x2f, 0x84, 0x09, 0x8c, 0x2e, 0x6d, 0x30, 0xae, 0xb7, 0xa5, 0x15, 0xc6, 0x35, 0x98, 0x45, + 0xa7, 0x32, 0x36, 0x8c, 0x18, 0xb0, 0x31, 0xe4, 0x4c, 0xf8, 0x4d, 0x00, 0x30, 0xee, 0xee, 0x11, + 0x17, 0x48, 0x1d, 0x05, 0x17, 0x91, 0xb8, 0xc1, 0x68, 0xdf, 0xaa, 0x67, 0x90, 0x78, 0x98, 0xf1, + 0xe6, 0x67, 0x01, 0xcc, 0x6b, 0xd8, 0x4a, 0x23, 0xb8, 0x59, 0xe4, 0x66, 0x6f, 0xfa, 0x36, 0x68, + 0x0a, 0xcf, 0xef, 0xf2, 0x44, 0x1d, 0x9b, 0xaa, 0xad, 0xcb, 0xd8, 0xd1, 0x15, 0x1d, 0xd9, 0xcc, + 0x24, 0x4a, 0x10, 0x52, 0x89, 0x41, 0x63, 0xff, 0x6b, 0xd6, 0xf9, 0xf2, 0x6b, 0x6e, 0x76, 0x3b, + 0x28, 0x70, 0x9f, 0x9d, 0xc4, 0xab, 0xcb, 0xfb, 0xb5, 0x9f, 0x61, 0xe4, 0x80, 0x45, 0x0e, 0x78, + 0xe4, 0x60, 0xbf, 0x76, 0x38, 0xce, 0xca, 0xaf, 0xfe, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x8e, 0x79, + 0x9f, 0xd6, 0x35, 0x09, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/oslogin/v1alpha/oslogin.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/oslogin/v1alpha/oslogin.pb.go new file mode 100644 index 0000000..5fbc3b3 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/oslogin/v1alpha/oslogin.pb.go @@ -0,0 +1,583 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/oslogin/v1alpha/oslogin.proto + +/* +Package oslogin is a generated protocol buffer package. + +It is generated from these files: + google/cloud/oslogin/v1alpha/oslogin.proto + +It has these top-level messages: + LoginProfile + DeletePosixAccountRequest + DeleteSshPublicKeyRequest + GetLoginProfileRequest + GetSshPublicKeyRequest + ImportSshPublicKeyRequest + ImportSshPublicKeyResponse + UpdateSshPublicKeyRequest +*/ +package oslogin + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_cloud_oslogin_common "google.golang.org/genproto/googleapis/cloud/oslogin/common" +import google_protobuf1 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf2 "google.golang.org/genproto/protobuf/field_mask" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// The user profile information used for logging in to a virtual machine on +// Google Compute Engine. +type LoginProfile struct { + // A unique user ID for identifying the user. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The list of POSIX accounts associated with the Directory API user. + PosixAccounts []*google_cloud_oslogin_common.PosixAccount `protobuf:"bytes,2,rep,name=posix_accounts,json=posixAccounts" json:"posix_accounts,omitempty"` + // A map from SSH public key fingerprint to the associated key object. + SshPublicKeys map[string]*google_cloud_oslogin_common.SshPublicKey `protobuf:"bytes,3,rep,name=ssh_public_keys,json=sshPublicKeys" json:"ssh_public_keys,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Indicates if the user is suspended. + Suspended bool `protobuf:"varint,4,opt,name=suspended" json:"suspended,omitempty"` +} + +func (m *LoginProfile) Reset() { *m = LoginProfile{} } +func (m *LoginProfile) String() string { return proto.CompactTextString(m) } +func (*LoginProfile) ProtoMessage() {} +func (*LoginProfile) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *LoginProfile) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *LoginProfile) GetPosixAccounts() []*google_cloud_oslogin_common.PosixAccount { + if m != nil { + return m.PosixAccounts + } + return nil +} + +func (m *LoginProfile) GetSshPublicKeys() map[string]*google_cloud_oslogin_common.SshPublicKey { + if m != nil { + return m.SshPublicKeys + } + return nil +} + +func (m *LoginProfile) GetSuspended() bool { + if m != nil { + return m.Suspended + } + return false +} + +// A request message for deleting a POSIX account entry. +type DeletePosixAccountRequest struct { + // A reference to the POSIX account to update. POSIX accounts are identified + // by the project ID they are associated with. A reference to the POSIX + // account is in format `users/{user}/projects/{project}`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeletePosixAccountRequest) Reset() { *m = DeletePosixAccountRequest{} } +func (m *DeletePosixAccountRequest) String() string { return proto.CompactTextString(m) } +func (*DeletePosixAccountRequest) ProtoMessage() {} +func (*DeletePosixAccountRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *DeletePosixAccountRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// A request message for deleting an SSH public key. +type DeleteSshPublicKeyRequest struct { + // The fingerprint of the public key to update. Public keys are identified by + // their SHA-256 fingerprint. The fingerprint of the public key is in format + // `users/{user}/sshPublicKeys/{fingerprint}`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteSshPublicKeyRequest) Reset() { *m = DeleteSshPublicKeyRequest{} } +func (m *DeleteSshPublicKeyRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteSshPublicKeyRequest) ProtoMessage() {} +func (*DeleteSshPublicKeyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *DeleteSshPublicKeyRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// A request message for retrieving the login profile information for a user. +type GetLoginProfileRequest struct { + // The unique ID for the user in format `users/{user}`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetLoginProfileRequest) Reset() { *m = GetLoginProfileRequest{} } +func (m *GetLoginProfileRequest) String() string { return proto.CompactTextString(m) } +func (*GetLoginProfileRequest) ProtoMessage() {} +func (*GetLoginProfileRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *GetLoginProfileRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// A request message for retrieving an SSH public key. +type GetSshPublicKeyRequest struct { + // The fingerprint of the public key to retrieve. Public keys are identified + // by their SHA-256 fingerprint. The fingerprint of the public key is in + // format `users/{user}/sshPublicKeys/{fingerprint}`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetSshPublicKeyRequest) Reset() { *m = GetSshPublicKeyRequest{} } +func (m *GetSshPublicKeyRequest) String() string { return proto.CompactTextString(m) } +func (*GetSshPublicKeyRequest) ProtoMessage() {} +func (*GetSshPublicKeyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *GetSshPublicKeyRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// A request message for importing an SSH public key. +type ImportSshPublicKeyRequest struct { + // The unique ID for the user in format `users/{user}`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The SSH public key and expiration time. + SshPublicKey *google_cloud_oslogin_common.SshPublicKey `protobuf:"bytes,2,opt,name=ssh_public_key,json=sshPublicKey" json:"ssh_public_key,omitempty"` + // The project ID of the Google Cloud Platform project. + ProjectId string `protobuf:"bytes,3,opt,name=project_id,json=projectId" json:"project_id,omitempty"` +} + +func (m *ImportSshPublicKeyRequest) Reset() { *m = ImportSshPublicKeyRequest{} } +func (m *ImportSshPublicKeyRequest) String() string { return proto.CompactTextString(m) } +func (*ImportSshPublicKeyRequest) ProtoMessage() {} +func (*ImportSshPublicKeyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *ImportSshPublicKeyRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ImportSshPublicKeyRequest) GetSshPublicKey() *google_cloud_oslogin_common.SshPublicKey { + if m != nil { + return m.SshPublicKey + } + return nil +} + +func (m *ImportSshPublicKeyRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +// A response message for importing an SSH public key. +type ImportSshPublicKeyResponse struct { + // The login profile information for the user. + LoginProfile *LoginProfile `protobuf:"bytes,1,opt,name=login_profile,json=loginProfile" json:"login_profile,omitempty"` +} + +func (m *ImportSshPublicKeyResponse) Reset() { *m = ImportSshPublicKeyResponse{} } +func (m *ImportSshPublicKeyResponse) String() string { return proto.CompactTextString(m) } +func (*ImportSshPublicKeyResponse) ProtoMessage() {} +func (*ImportSshPublicKeyResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *ImportSshPublicKeyResponse) GetLoginProfile() *LoginProfile { + if m != nil { + return m.LoginProfile + } + return nil +} + +// A request message for updating an SSH public key. +type UpdateSshPublicKeyRequest struct { + // The fingerprint of the public key to update. Public keys are identified by + // their SHA-256 fingerprint. The fingerprint of the public key is in format + // `users/{user}/sshPublicKeys/{fingerprint}`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The SSH public key and expiration time. + SshPublicKey *google_cloud_oslogin_common.SshPublicKey `protobuf:"bytes,2,opt,name=ssh_public_key,json=sshPublicKey" json:"ssh_public_key,omitempty"` + // Mask to control which fields get updated. Updates all if not present. + UpdateMask *google_protobuf2.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateSshPublicKeyRequest) Reset() { *m = UpdateSshPublicKeyRequest{} } +func (m *UpdateSshPublicKeyRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateSshPublicKeyRequest) ProtoMessage() {} +func (*UpdateSshPublicKeyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *UpdateSshPublicKeyRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *UpdateSshPublicKeyRequest) GetSshPublicKey() *google_cloud_oslogin_common.SshPublicKey { + if m != nil { + return m.SshPublicKey + } + return nil +} + +func (m *UpdateSshPublicKeyRequest) GetUpdateMask() *google_protobuf2.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +func init() { + proto.RegisterType((*LoginProfile)(nil), "google.cloud.oslogin.v1alpha.LoginProfile") + proto.RegisterType((*DeletePosixAccountRequest)(nil), "google.cloud.oslogin.v1alpha.DeletePosixAccountRequest") + proto.RegisterType((*DeleteSshPublicKeyRequest)(nil), "google.cloud.oslogin.v1alpha.DeleteSshPublicKeyRequest") + proto.RegisterType((*GetLoginProfileRequest)(nil), "google.cloud.oslogin.v1alpha.GetLoginProfileRequest") + proto.RegisterType((*GetSshPublicKeyRequest)(nil), "google.cloud.oslogin.v1alpha.GetSshPublicKeyRequest") + proto.RegisterType((*ImportSshPublicKeyRequest)(nil), "google.cloud.oslogin.v1alpha.ImportSshPublicKeyRequest") + proto.RegisterType((*ImportSshPublicKeyResponse)(nil), "google.cloud.oslogin.v1alpha.ImportSshPublicKeyResponse") + proto.RegisterType((*UpdateSshPublicKeyRequest)(nil), "google.cloud.oslogin.v1alpha.UpdateSshPublicKeyRequest") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for OsLoginService service + +type OsLoginServiceClient interface { + // Deletes a POSIX account. + DeletePosixAccount(ctx context.Context, in *DeletePosixAccountRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) + // Deletes an SSH public key. + DeleteSshPublicKey(ctx context.Context, in *DeleteSshPublicKeyRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) + // Retrieves the profile information used for logging in to a virtual machine + // on Google Compute Engine. + GetLoginProfile(ctx context.Context, in *GetLoginProfileRequest, opts ...grpc.CallOption) (*LoginProfile, error) + // Retrieves an SSH public key. + GetSshPublicKey(ctx context.Context, in *GetSshPublicKeyRequest, opts ...grpc.CallOption) (*google_cloud_oslogin_common.SshPublicKey, error) + // Adds an SSH public key and returns the profile information. Default POSIX + // account information is set when no username and UID exist as part of the + // login profile. + ImportSshPublicKey(ctx context.Context, in *ImportSshPublicKeyRequest, opts ...grpc.CallOption) (*ImportSshPublicKeyResponse, error) + // Updates an SSH public key and returns the profile information. This method + // supports patch semantics. + UpdateSshPublicKey(ctx context.Context, in *UpdateSshPublicKeyRequest, opts ...grpc.CallOption) (*google_cloud_oslogin_common.SshPublicKey, error) +} + +type osLoginServiceClient struct { + cc *grpc.ClientConn +} + +func NewOsLoginServiceClient(cc *grpc.ClientConn) OsLoginServiceClient { + return &osLoginServiceClient{cc} +} + +func (c *osLoginServiceClient) DeletePosixAccount(ctx context.Context, in *DeletePosixAccountRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) { + out := new(google_protobuf1.Empty) + err := grpc.Invoke(ctx, "/google.cloud.oslogin.v1alpha.OsLoginService/DeletePosixAccount", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *osLoginServiceClient) DeleteSshPublicKey(ctx context.Context, in *DeleteSshPublicKeyRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) { + out := new(google_protobuf1.Empty) + err := grpc.Invoke(ctx, "/google.cloud.oslogin.v1alpha.OsLoginService/DeleteSshPublicKey", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *osLoginServiceClient) GetLoginProfile(ctx context.Context, in *GetLoginProfileRequest, opts ...grpc.CallOption) (*LoginProfile, error) { + out := new(LoginProfile) + err := grpc.Invoke(ctx, "/google.cloud.oslogin.v1alpha.OsLoginService/GetLoginProfile", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *osLoginServiceClient) GetSshPublicKey(ctx context.Context, in *GetSshPublicKeyRequest, opts ...grpc.CallOption) (*google_cloud_oslogin_common.SshPublicKey, error) { + out := new(google_cloud_oslogin_common.SshPublicKey) + err := grpc.Invoke(ctx, "/google.cloud.oslogin.v1alpha.OsLoginService/GetSshPublicKey", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *osLoginServiceClient) ImportSshPublicKey(ctx context.Context, in *ImportSshPublicKeyRequest, opts ...grpc.CallOption) (*ImportSshPublicKeyResponse, error) { + out := new(ImportSshPublicKeyResponse) + err := grpc.Invoke(ctx, "/google.cloud.oslogin.v1alpha.OsLoginService/ImportSshPublicKey", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *osLoginServiceClient) UpdateSshPublicKey(ctx context.Context, in *UpdateSshPublicKeyRequest, opts ...grpc.CallOption) (*google_cloud_oslogin_common.SshPublicKey, error) { + out := new(google_cloud_oslogin_common.SshPublicKey) + err := grpc.Invoke(ctx, "/google.cloud.oslogin.v1alpha.OsLoginService/UpdateSshPublicKey", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for OsLoginService service + +type OsLoginServiceServer interface { + // Deletes a POSIX account. + DeletePosixAccount(context.Context, *DeletePosixAccountRequest) (*google_protobuf1.Empty, error) + // Deletes an SSH public key. + DeleteSshPublicKey(context.Context, *DeleteSshPublicKeyRequest) (*google_protobuf1.Empty, error) + // Retrieves the profile information used for logging in to a virtual machine + // on Google Compute Engine. + GetLoginProfile(context.Context, *GetLoginProfileRequest) (*LoginProfile, error) + // Retrieves an SSH public key. + GetSshPublicKey(context.Context, *GetSshPublicKeyRequest) (*google_cloud_oslogin_common.SshPublicKey, error) + // Adds an SSH public key and returns the profile information. Default POSIX + // account information is set when no username and UID exist as part of the + // login profile. + ImportSshPublicKey(context.Context, *ImportSshPublicKeyRequest) (*ImportSshPublicKeyResponse, error) + // Updates an SSH public key and returns the profile information. This method + // supports patch semantics. + UpdateSshPublicKey(context.Context, *UpdateSshPublicKeyRequest) (*google_cloud_oslogin_common.SshPublicKey, error) +} + +func RegisterOsLoginServiceServer(s *grpc.Server, srv OsLoginServiceServer) { + s.RegisterService(&_OsLoginService_serviceDesc, srv) +} + +func _OsLoginService_DeletePosixAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeletePosixAccountRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OsLoginServiceServer).DeletePosixAccount(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.oslogin.v1alpha.OsLoginService/DeletePosixAccount", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OsLoginServiceServer).DeletePosixAccount(ctx, req.(*DeletePosixAccountRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _OsLoginService_DeleteSshPublicKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteSshPublicKeyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OsLoginServiceServer).DeleteSshPublicKey(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.oslogin.v1alpha.OsLoginService/DeleteSshPublicKey", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OsLoginServiceServer).DeleteSshPublicKey(ctx, req.(*DeleteSshPublicKeyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _OsLoginService_GetLoginProfile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetLoginProfileRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OsLoginServiceServer).GetLoginProfile(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.oslogin.v1alpha.OsLoginService/GetLoginProfile", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OsLoginServiceServer).GetLoginProfile(ctx, req.(*GetLoginProfileRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _OsLoginService_GetSshPublicKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetSshPublicKeyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OsLoginServiceServer).GetSshPublicKey(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.oslogin.v1alpha.OsLoginService/GetSshPublicKey", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OsLoginServiceServer).GetSshPublicKey(ctx, req.(*GetSshPublicKeyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _OsLoginService_ImportSshPublicKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ImportSshPublicKeyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OsLoginServiceServer).ImportSshPublicKey(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.oslogin.v1alpha.OsLoginService/ImportSshPublicKey", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OsLoginServiceServer).ImportSshPublicKey(ctx, req.(*ImportSshPublicKeyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _OsLoginService_UpdateSshPublicKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateSshPublicKeyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OsLoginServiceServer).UpdateSshPublicKey(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.oslogin.v1alpha.OsLoginService/UpdateSshPublicKey", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OsLoginServiceServer).UpdateSshPublicKey(ctx, req.(*UpdateSshPublicKeyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _OsLoginService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.oslogin.v1alpha.OsLoginService", + HandlerType: (*OsLoginServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "DeletePosixAccount", + Handler: _OsLoginService_DeletePosixAccount_Handler, + }, + { + MethodName: "DeleteSshPublicKey", + Handler: _OsLoginService_DeleteSshPublicKey_Handler, + }, + { + MethodName: "GetLoginProfile", + Handler: _OsLoginService_GetLoginProfile_Handler, + }, + { + MethodName: "GetSshPublicKey", + Handler: _OsLoginService_GetSshPublicKey_Handler, + }, + { + MethodName: "ImportSshPublicKey", + Handler: _OsLoginService_ImportSshPublicKey_Handler, + }, + { + MethodName: "UpdateSshPublicKey", + Handler: _OsLoginService_UpdateSshPublicKey_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/oslogin/v1alpha/oslogin.proto", +} + +func init() { proto.RegisterFile("google/cloud/oslogin/v1alpha/oslogin.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 779 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0xcd, 0x6a, 0xdb, 0x4a, + 0x14, 0x46, 0x76, 0x6e, 0x48, 0xc6, 0x4e, 0x72, 0x99, 0x45, 0x70, 0x74, 0x73, 0xc1, 0x88, 0xd0, + 0x3a, 0x26, 0x68, 0x88, 0x5b, 0x68, 0x9a, 0x90, 0x86, 0xfc, 0x35, 0x84, 0xb6, 0xc4, 0x38, 0x34, + 0x8b, 0x12, 0x30, 0x13, 0x79, 0xa2, 0xa8, 0x96, 0x34, 0x53, 0x8d, 0x14, 0x6a, 0x4a, 0x36, 0x7d, + 0x83, 0x12, 0xe8, 0xbe, 0x64, 0xd7, 0x7d, 0x17, 0x5d, 0xf4, 0x05, 0x0a, 0x5d, 0xf5, 0x15, 0x4a, + 0x9f, 0xa3, 0x68, 0x34, 0x4a, 0x64, 0x5b, 0xb6, 0x65, 0xe8, 0xca, 0x3a, 0x73, 0xfe, 0xbe, 0xf3, + 0x9d, 0x1f, 0x0c, 0xaa, 0x26, 0xa5, 0xa6, 0x4d, 0x90, 0x61, 0xd3, 0xa0, 0x85, 0x28, 0xb7, 0xa9, + 0x69, 0xb9, 0xe8, 0x72, 0x15, 0xdb, 0xec, 0x02, 0xc7, 0xb2, 0xce, 0x3c, 0xea, 0x53, 0xb8, 0x18, + 0xd9, 0xea, 0xc2, 0x56, 0x8f, 0x75, 0xd2, 0x56, 0x95, 0x5a, 0x84, 0x99, 0x85, 0xb0, 0xeb, 0x52, + 0x1f, 0xfb, 0x16, 0x75, 0x79, 0xe4, 0xab, 0x56, 0x52, 0xf3, 0x18, 0xd4, 0x71, 0x68, 0xfc, 0x23, + 0x2d, 0xff, 0x93, 0x96, 0x42, 0x3a, 0x0b, 0xce, 0x11, 0x71, 0x98, 0xdf, 0x91, 0xca, 0x72, 0xaf, + 0xf2, 0xdc, 0x22, 0x76, 0xab, 0xe9, 0x60, 0xde, 0x8e, 0x2c, 0xb4, 0xdf, 0x39, 0x50, 0x7c, 0x1e, + 0x06, 0xaf, 0x7b, 0xf4, 0xdc, 0xb2, 0x09, 0x84, 0x60, 0xc2, 0xc5, 0x0e, 0x29, 0x29, 0x65, 0xa5, + 0x32, 0xdd, 0x10, 0xdf, 0xb0, 0x0e, 0x66, 0x19, 0xe5, 0xd6, 0xdb, 0x26, 0x36, 0x0c, 0x1a, 0xb8, + 0x3e, 0x2f, 0xe5, 0xca, 0xf9, 0x4a, 0xa1, 0xb6, 0xac, 0xa7, 0x96, 0x28, 0xf1, 0xd5, 0x43, 0x97, + 0xed, 0xc8, 0xa3, 0x31, 0xc3, 0x12, 0x12, 0x87, 0x04, 0xcc, 0x71, 0x7e, 0xd1, 0x64, 0xc1, 0x99, + 0x6d, 0x19, 0xcd, 0x36, 0xe9, 0xf0, 0x52, 0x5e, 0x84, 0xdc, 0xd4, 0x87, 0xb1, 0xa6, 0x27, 0xa1, + 0xea, 0xc7, 0xfc, 0xa2, 0x2e, 0x02, 0x3c, 0x23, 0x1d, 0xbe, 0xef, 0xfa, 0x5e, 0xa7, 0x31, 0xc3, + 0x93, 0x6f, 0x70, 0x11, 0x4c, 0xf3, 0x80, 0x33, 0xe2, 0xb6, 0x48, 0xab, 0x34, 0x51, 0x56, 0x2a, + 0x53, 0x8d, 0xbb, 0x07, 0xb5, 0x0d, 0x60, 0x7f, 0x08, 0xf8, 0x2f, 0xc8, 0xb7, 0x49, 0x47, 0xd6, + 0x1f, 0x7e, 0xc2, 0x2d, 0xf0, 0xcf, 0x25, 0xb6, 0x03, 0x52, 0xca, 0x95, 0x95, 0x91, 0x55, 0x27, + 0x23, 0x36, 0x22, 0xbf, 0xf5, 0xdc, 0x9a, 0xa2, 0x21, 0xb0, 0xb0, 0x47, 0x6c, 0xe2, 0x93, 0x2e, + 0x5a, 0xc8, 0x9b, 0x80, 0x70, 0x3f, 0x8d, 0xf4, 0x3b, 0x87, 0xae, 0x88, 0x43, 0x1c, 0x56, 0xc0, + 0xfc, 0x01, 0xf1, 0x93, 0x0c, 0x8d, 0xb6, 0xce, 0x1a, 0xfb, 0x46, 0x01, 0x0b, 0x87, 0x0e, 0xa3, + 0x5e, 0xaa, 0xc7, 0x3c, 0x98, 0x64, 0xd8, 0x23, 0xae, 0x2f, 0x7d, 0xa4, 0x04, 0x8f, 0xc0, 0x6c, + 0x77, 0x97, 0xc7, 0x67, 0xb0, 0x98, 0x6c, 0x28, 0xfc, 0x1f, 0x00, 0xe6, 0xd1, 0xd7, 0xc4, 0xf0, + 0x9b, 0x56, 0xab, 0x94, 0x17, 0xc9, 0xa6, 0xe5, 0xcb, 0x61, 0x4b, 0x73, 0x80, 0x9a, 0x06, 0x92, + 0x33, 0xea, 0x72, 0x02, 0x8f, 0xc0, 0x8c, 0xc8, 0xd3, 0x64, 0x11, 0x3b, 0x02, 0x6c, 0xa1, 0x56, + 0xcd, 0x3e, 0x71, 0x8d, 0xa2, 0x9d, 0x90, 0xb4, 0x6f, 0x0a, 0x58, 0x78, 0xc9, 0x5a, 0x38, 0x73, + 0x8b, 0xfe, 0x3e, 0x21, 0x1b, 0xa0, 0x10, 0x08, 0x04, 0x62, 0xa7, 0x05, 0x23, 0x85, 0x9a, 0x1a, + 0x47, 0x8b, 0xd7, 0x5e, 0x7f, 0x1a, 0xae, 0xfd, 0x0b, 0xcc, 0xdb, 0x0d, 0x10, 0x99, 0x87, 0xdf, + 0xb5, 0xeb, 0x29, 0x30, 0x7b, 0xc4, 0x45, 0x81, 0xc7, 0xc4, 0xbb, 0xb4, 0x0c, 0x02, 0x3f, 0x28, + 0x00, 0xf6, 0x8f, 0x29, 0x7c, 0x34, 0x9c, 0xa3, 0x81, 0x83, 0xad, 0xce, 0xf7, 0x41, 0xd9, 0x0f, + 0xcf, 0x93, 0x56, 0x7d, 0xff, 0xf3, 0xd7, 0x75, 0x6e, 0xa9, 0xaa, 0xdd, 0xde, 0xce, 0x77, 0x21, + 0x41, 0x9b, 0x01, 0x27, 0x1e, 0x47, 0x55, 0x24, 0x7b, 0xca, 0x51, 0xf5, 0x0a, 0x7e, 0xbc, 0xc5, + 0x94, 0x24, 0x22, 0x1b, 0xa6, 0x94, 0xc6, 0x0c, 0xc4, 0x84, 0x04, 0xa6, 0xe5, 0xea, 0xfd, 0x01, + 0x98, 0xba, 0x4e, 0x4b, 0x08, 0xec, 0x93, 0x02, 0xe6, 0x7a, 0x36, 0x0e, 0x3e, 0x1c, 0x8e, 0x2a, + 0x7d, 0x41, 0xd5, 0x31, 0x66, 0x50, 0x5b, 0x11, 0x30, 0xef, 0xc1, 0xa5, 0x74, 0x98, 0x57, 0x28, + 0x39, 0xa3, 0xf0, 0x26, 0xc2, 0xd8, 0xc5, 0xdc, 0x68, 0x8c, 0x69, 0xb4, 0x65, 0x9f, 0xd1, 0x98, + 0x49, 0x98, 0x99, 0xc9, 0x1f, 0x0a, 0x80, 0xfd, 0x9b, 0x3b, 0xaa, 0xc5, 0x03, 0x0f, 0x92, 0xba, + 0x36, 0xbe, 0x63, 0x74, 0x24, 0xb4, 0x3d, 0x01, 0xfd, 0x89, 0xb6, 0x72, 0x07, 0x3d, 0x3a, 0x66, + 0xb7, 0xfc, 0xae, 0x5b, 0x7d, 0xde, 0xeb, 0x3d, 0x5b, 0x0d, 0xbf, 0x2a, 0x00, 0xf6, 0x5f, 0x86, + 0x51, 0xf5, 0x0c, 0xbc, 0x25, 0xe3, 0x70, 0xbf, 0x25, 0x0a, 0x78, 0x5c, 0xcb, 0xca, 0x7d, 0x2f, + 0xf6, 0x9d, 0x2f, 0x0a, 0x28, 0x1b, 0xd4, 0x19, 0x0a, 0x75, 0xa7, 0x28, 0xef, 0x46, 0x3d, 0x5c, + 0xa1, 0xba, 0xf2, 0x6a, 0x57, 0x5a, 0x9b, 0xd4, 0xc6, 0xae, 0xa9, 0x53, 0xcf, 0x44, 0x26, 0x71, + 0xc5, 0x82, 0xa1, 0x48, 0x85, 0x99, 0xc5, 0xd3, 0xff, 0x36, 0x6d, 0x48, 0xf9, 0x73, 0x6e, 0xf1, + 0x20, 0x8a, 0xb2, 0x2b, 0x72, 0xca, 0x14, 0xfa, 0xc9, 0xea, 0x76, 0x68, 0xf6, 0x3d, 0x56, 0x9f, + 0x0a, 0xf5, 0xa9, 0x54, 0x9f, 0x9e, 0x44, 0x51, 0xce, 0x26, 0x45, 0xb6, 0x07, 0x7f, 0x02, 0x00, + 0x00, 0xff, 0xff, 0xf8, 0xf2, 0xe5, 0x19, 0xa3, 0x09, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/oslogin/v1beta/oslogin.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/oslogin/v1beta/oslogin.pb.go new file mode 100644 index 0000000..9171c69 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/oslogin/v1beta/oslogin.pb.go @@ -0,0 +1,584 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/oslogin/v1beta/oslogin.proto + +/* +Package oslogin is a generated protocol buffer package. + +It is generated from these files: + google/cloud/oslogin/v1beta/oslogin.proto + +It has these top-level messages: + LoginProfile + DeletePosixAccountRequest + DeleteSshPublicKeyRequest + GetLoginProfileRequest + GetSshPublicKeyRequest + ImportSshPublicKeyRequest + ImportSshPublicKeyResponse + UpdateSshPublicKeyRequest +*/ +package oslogin + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_cloud_oslogin_common "google.golang.org/genproto/googleapis/cloud/oslogin/common" +import google_protobuf1 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf2 "google.golang.org/genproto/protobuf/field_mask" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// The user profile information used for logging in to a virtual machine on +// Google Compute Engine. +type LoginProfile struct { + // The primary email address that uniquely identifies the user. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The list of POSIX accounts associated with the user. + PosixAccounts []*google_cloud_oslogin_common.PosixAccount `protobuf:"bytes,2,rep,name=posix_accounts,json=posixAccounts" json:"posix_accounts,omitempty"` + // A map from SSH public key fingerprint to the associated key object. + SshPublicKeys map[string]*google_cloud_oslogin_common.SshPublicKey `protobuf:"bytes,3,rep,name=ssh_public_keys,json=sshPublicKeys" json:"ssh_public_keys,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Indicates if the user is suspended. A suspended user cannot log in but + // their profile information is retained. + Suspended bool `protobuf:"varint,4,opt,name=suspended" json:"suspended,omitempty"` +} + +func (m *LoginProfile) Reset() { *m = LoginProfile{} } +func (m *LoginProfile) String() string { return proto.CompactTextString(m) } +func (*LoginProfile) ProtoMessage() {} +func (*LoginProfile) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *LoginProfile) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *LoginProfile) GetPosixAccounts() []*google_cloud_oslogin_common.PosixAccount { + if m != nil { + return m.PosixAccounts + } + return nil +} + +func (m *LoginProfile) GetSshPublicKeys() map[string]*google_cloud_oslogin_common.SshPublicKey { + if m != nil { + return m.SshPublicKeys + } + return nil +} + +func (m *LoginProfile) GetSuspended() bool { + if m != nil { + return m.Suspended + } + return false +} + +// A request message for deleting a POSIX account entry. +type DeletePosixAccountRequest struct { + // A reference to the POSIX account to update. POSIX accounts are identified + // by the project ID they are associated with. A reference to the POSIX + // account is in format `users/{user}/projects/{project}`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeletePosixAccountRequest) Reset() { *m = DeletePosixAccountRequest{} } +func (m *DeletePosixAccountRequest) String() string { return proto.CompactTextString(m) } +func (*DeletePosixAccountRequest) ProtoMessage() {} +func (*DeletePosixAccountRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *DeletePosixAccountRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// A request message for deleting an SSH public key. +type DeleteSshPublicKeyRequest struct { + // The fingerprint of the public key to update. Public keys are identified by + // their SHA-256 fingerprint. The fingerprint of the public key is in format + // `users/{user}/sshPublicKeys/{fingerprint}`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteSshPublicKeyRequest) Reset() { *m = DeleteSshPublicKeyRequest{} } +func (m *DeleteSshPublicKeyRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteSshPublicKeyRequest) ProtoMessage() {} +func (*DeleteSshPublicKeyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *DeleteSshPublicKeyRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// A request message for retrieving the login profile information for a user. +type GetLoginProfileRequest struct { + // The unique ID for the user in format `users/{user}`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetLoginProfileRequest) Reset() { *m = GetLoginProfileRequest{} } +func (m *GetLoginProfileRequest) String() string { return proto.CompactTextString(m) } +func (*GetLoginProfileRequest) ProtoMessage() {} +func (*GetLoginProfileRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *GetLoginProfileRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// A request message for retrieving an SSH public key. +type GetSshPublicKeyRequest struct { + // The fingerprint of the public key to retrieve. Public keys are identified + // by their SHA-256 fingerprint. The fingerprint of the public key is in + // format `users/{user}/sshPublicKeys/{fingerprint}`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetSshPublicKeyRequest) Reset() { *m = GetSshPublicKeyRequest{} } +func (m *GetSshPublicKeyRequest) String() string { return proto.CompactTextString(m) } +func (*GetSshPublicKeyRequest) ProtoMessage() {} +func (*GetSshPublicKeyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *GetSshPublicKeyRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// A request message for importing an SSH public key. +type ImportSshPublicKeyRequest struct { + // The unique ID for the user in format `users/{user}`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The SSH public key and expiration time. + SshPublicKey *google_cloud_oslogin_common.SshPublicKey `protobuf:"bytes,2,opt,name=ssh_public_key,json=sshPublicKey" json:"ssh_public_key,omitempty"` + // The project ID of the Google Cloud Platform project. + ProjectId string `protobuf:"bytes,3,opt,name=project_id,json=projectId" json:"project_id,omitempty"` +} + +func (m *ImportSshPublicKeyRequest) Reset() { *m = ImportSshPublicKeyRequest{} } +func (m *ImportSshPublicKeyRequest) String() string { return proto.CompactTextString(m) } +func (*ImportSshPublicKeyRequest) ProtoMessage() {} +func (*ImportSshPublicKeyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *ImportSshPublicKeyRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ImportSshPublicKeyRequest) GetSshPublicKey() *google_cloud_oslogin_common.SshPublicKey { + if m != nil { + return m.SshPublicKey + } + return nil +} + +func (m *ImportSshPublicKeyRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +// A response message for importing an SSH public key. +type ImportSshPublicKeyResponse struct { + // The login profile information for the user. + LoginProfile *LoginProfile `protobuf:"bytes,1,opt,name=login_profile,json=loginProfile" json:"login_profile,omitempty"` +} + +func (m *ImportSshPublicKeyResponse) Reset() { *m = ImportSshPublicKeyResponse{} } +func (m *ImportSshPublicKeyResponse) String() string { return proto.CompactTextString(m) } +func (*ImportSshPublicKeyResponse) ProtoMessage() {} +func (*ImportSshPublicKeyResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *ImportSshPublicKeyResponse) GetLoginProfile() *LoginProfile { + if m != nil { + return m.LoginProfile + } + return nil +} + +// A request message for updating an SSH public key. +type UpdateSshPublicKeyRequest struct { + // The fingerprint of the public key to update. Public keys are identified by + // their SHA-256 fingerprint. The fingerprint of the public key is in format + // `users/{user}/sshPublicKeys/{fingerprint}`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The SSH public key and expiration time. + SshPublicKey *google_cloud_oslogin_common.SshPublicKey `protobuf:"bytes,2,opt,name=ssh_public_key,json=sshPublicKey" json:"ssh_public_key,omitempty"` + // Mask to control which fields get updated. Updates all if not present. + UpdateMask *google_protobuf2.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateSshPublicKeyRequest) Reset() { *m = UpdateSshPublicKeyRequest{} } +func (m *UpdateSshPublicKeyRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateSshPublicKeyRequest) ProtoMessage() {} +func (*UpdateSshPublicKeyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *UpdateSshPublicKeyRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *UpdateSshPublicKeyRequest) GetSshPublicKey() *google_cloud_oslogin_common.SshPublicKey { + if m != nil { + return m.SshPublicKey + } + return nil +} + +func (m *UpdateSshPublicKeyRequest) GetUpdateMask() *google_protobuf2.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +func init() { + proto.RegisterType((*LoginProfile)(nil), "google.cloud.oslogin.v1beta.LoginProfile") + proto.RegisterType((*DeletePosixAccountRequest)(nil), "google.cloud.oslogin.v1beta.DeletePosixAccountRequest") + proto.RegisterType((*DeleteSshPublicKeyRequest)(nil), "google.cloud.oslogin.v1beta.DeleteSshPublicKeyRequest") + proto.RegisterType((*GetLoginProfileRequest)(nil), "google.cloud.oslogin.v1beta.GetLoginProfileRequest") + proto.RegisterType((*GetSshPublicKeyRequest)(nil), "google.cloud.oslogin.v1beta.GetSshPublicKeyRequest") + proto.RegisterType((*ImportSshPublicKeyRequest)(nil), "google.cloud.oslogin.v1beta.ImportSshPublicKeyRequest") + proto.RegisterType((*ImportSshPublicKeyResponse)(nil), "google.cloud.oslogin.v1beta.ImportSshPublicKeyResponse") + proto.RegisterType((*UpdateSshPublicKeyRequest)(nil), "google.cloud.oslogin.v1beta.UpdateSshPublicKeyRequest") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for OsLoginService service + +type OsLoginServiceClient interface { + // Deletes a POSIX account. + DeletePosixAccount(ctx context.Context, in *DeletePosixAccountRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) + // Deletes an SSH public key. + DeleteSshPublicKey(ctx context.Context, in *DeleteSshPublicKeyRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) + // Retrieves the profile information used for logging in to a virtual machine + // on Google Compute Engine. + GetLoginProfile(ctx context.Context, in *GetLoginProfileRequest, opts ...grpc.CallOption) (*LoginProfile, error) + // Retrieves an SSH public key. + GetSshPublicKey(ctx context.Context, in *GetSshPublicKeyRequest, opts ...grpc.CallOption) (*google_cloud_oslogin_common.SshPublicKey, error) + // Adds an SSH public key and returns the profile information. Default POSIX + // account information is set when no username and UID exist as part of the + // login profile. + ImportSshPublicKey(ctx context.Context, in *ImportSshPublicKeyRequest, opts ...grpc.CallOption) (*ImportSshPublicKeyResponse, error) + // Updates an SSH public key and returns the profile information. This method + // supports patch semantics. + UpdateSshPublicKey(ctx context.Context, in *UpdateSshPublicKeyRequest, opts ...grpc.CallOption) (*google_cloud_oslogin_common.SshPublicKey, error) +} + +type osLoginServiceClient struct { + cc *grpc.ClientConn +} + +func NewOsLoginServiceClient(cc *grpc.ClientConn) OsLoginServiceClient { + return &osLoginServiceClient{cc} +} + +func (c *osLoginServiceClient) DeletePosixAccount(ctx context.Context, in *DeletePosixAccountRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) { + out := new(google_protobuf1.Empty) + err := grpc.Invoke(ctx, "/google.cloud.oslogin.v1beta.OsLoginService/DeletePosixAccount", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *osLoginServiceClient) DeleteSshPublicKey(ctx context.Context, in *DeleteSshPublicKeyRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) { + out := new(google_protobuf1.Empty) + err := grpc.Invoke(ctx, "/google.cloud.oslogin.v1beta.OsLoginService/DeleteSshPublicKey", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *osLoginServiceClient) GetLoginProfile(ctx context.Context, in *GetLoginProfileRequest, opts ...grpc.CallOption) (*LoginProfile, error) { + out := new(LoginProfile) + err := grpc.Invoke(ctx, "/google.cloud.oslogin.v1beta.OsLoginService/GetLoginProfile", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *osLoginServiceClient) GetSshPublicKey(ctx context.Context, in *GetSshPublicKeyRequest, opts ...grpc.CallOption) (*google_cloud_oslogin_common.SshPublicKey, error) { + out := new(google_cloud_oslogin_common.SshPublicKey) + err := grpc.Invoke(ctx, "/google.cloud.oslogin.v1beta.OsLoginService/GetSshPublicKey", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *osLoginServiceClient) ImportSshPublicKey(ctx context.Context, in *ImportSshPublicKeyRequest, opts ...grpc.CallOption) (*ImportSshPublicKeyResponse, error) { + out := new(ImportSshPublicKeyResponse) + err := grpc.Invoke(ctx, "/google.cloud.oslogin.v1beta.OsLoginService/ImportSshPublicKey", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *osLoginServiceClient) UpdateSshPublicKey(ctx context.Context, in *UpdateSshPublicKeyRequest, opts ...grpc.CallOption) (*google_cloud_oslogin_common.SshPublicKey, error) { + out := new(google_cloud_oslogin_common.SshPublicKey) + err := grpc.Invoke(ctx, "/google.cloud.oslogin.v1beta.OsLoginService/UpdateSshPublicKey", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for OsLoginService service + +type OsLoginServiceServer interface { + // Deletes a POSIX account. + DeletePosixAccount(context.Context, *DeletePosixAccountRequest) (*google_protobuf1.Empty, error) + // Deletes an SSH public key. + DeleteSshPublicKey(context.Context, *DeleteSshPublicKeyRequest) (*google_protobuf1.Empty, error) + // Retrieves the profile information used for logging in to a virtual machine + // on Google Compute Engine. + GetLoginProfile(context.Context, *GetLoginProfileRequest) (*LoginProfile, error) + // Retrieves an SSH public key. + GetSshPublicKey(context.Context, *GetSshPublicKeyRequest) (*google_cloud_oslogin_common.SshPublicKey, error) + // Adds an SSH public key and returns the profile information. Default POSIX + // account information is set when no username and UID exist as part of the + // login profile. + ImportSshPublicKey(context.Context, *ImportSshPublicKeyRequest) (*ImportSshPublicKeyResponse, error) + // Updates an SSH public key and returns the profile information. This method + // supports patch semantics. + UpdateSshPublicKey(context.Context, *UpdateSshPublicKeyRequest) (*google_cloud_oslogin_common.SshPublicKey, error) +} + +func RegisterOsLoginServiceServer(s *grpc.Server, srv OsLoginServiceServer) { + s.RegisterService(&_OsLoginService_serviceDesc, srv) +} + +func _OsLoginService_DeletePosixAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeletePosixAccountRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OsLoginServiceServer).DeletePosixAccount(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.oslogin.v1beta.OsLoginService/DeletePosixAccount", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OsLoginServiceServer).DeletePosixAccount(ctx, req.(*DeletePosixAccountRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _OsLoginService_DeleteSshPublicKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteSshPublicKeyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OsLoginServiceServer).DeleteSshPublicKey(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.oslogin.v1beta.OsLoginService/DeleteSshPublicKey", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OsLoginServiceServer).DeleteSshPublicKey(ctx, req.(*DeleteSshPublicKeyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _OsLoginService_GetLoginProfile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetLoginProfileRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OsLoginServiceServer).GetLoginProfile(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.oslogin.v1beta.OsLoginService/GetLoginProfile", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OsLoginServiceServer).GetLoginProfile(ctx, req.(*GetLoginProfileRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _OsLoginService_GetSshPublicKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetSshPublicKeyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OsLoginServiceServer).GetSshPublicKey(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.oslogin.v1beta.OsLoginService/GetSshPublicKey", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OsLoginServiceServer).GetSshPublicKey(ctx, req.(*GetSshPublicKeyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _OsLoginService_ImportSshPublicKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ImportSshPublicKeyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OsLoginServiceServer).ImportSshPublicKey(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.oslogin.v1beta.OsLoginService/ImportSshPublicKey", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OsLoginServiceServer).ImportSshPublicKey(ctx, req.(*ImportSshPublicKeyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _OsLoginService_UpdateSshPublicKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateSshPublicKeyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OsLoginServiceServer).UpdateSshPublicKey(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.oslogin.v1beta.OsLoginService/UpdateSshPublicKey", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OsLoginServiceServer).UpdateSshPublicKey(ctx, req.(*UpdateSshPublicKeyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _OsLoginService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.oslogin.v1beta.OsLoginService", + HandlerType: (*OsLoginServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "DeletePosixAccount", + Handler: _OsLoginService_DeletePosixAccount_Handler, + }, + { + MethodName: "DeleteSshPublicKey", + Handler: _OsLoginService_DeleteSshPublicKey_Handler, + }, + { + MethodName: "GetLoginProfile", + Handler: _OsLoginService_GetLoginProfile_Handler, + }, + { + MethodName: "GetSshPublicKey", + Handler: _OsLoginService_GetSshPublicKey_Handler, + }, + { + MethodName: "ImportSshPublicKey", + Handler: _OsLoginService_ImportSshPublicKey_Handler, + }, + { + MethodName: "UpdateSshPublicKey", + Handler: _OsLoginService_UpdateSshPublicKey_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/oslogin/v1beta/oslogin.proto", +} + +func init() { proto.RegisterFile("google/cloud/oslogin/v1beta/oslogin.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 780 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x96, 0x4f, 0x4f, 0x13, 0x4f, + 0x18, 0xc7, 0xb3, 0x2d, 0x3f, 0x02, 0x43, 0x81, 0x5f, 0xe6, 0x40, 0xca, 0x82, 0xb1, 0x2e, 0xd1, + 0x94, 0x62, 0x76, 0x43, 0x49, 0x94, 0x80, 0x68, 0x2c, 0x22, 0x21, 0xfe, 0xa1, 0x29, 0x91, 0x83, + 0x21, 0x69, 0xa6, 0xbb, 0xc3, 0xb2, 0x76, 0x77, 0x67, 0xdc, 0xd9, 0x25, 0x36, 0x86, 0x8b, 0x89, + 0x67, 0x0f, 0x7a, 0x36, 0x31, 0xde, 0xbc, 0x79, 0xf2, 0xe4, 0x1b, 0xe0, 0xea, 0x5b, 0xd0, 0xf7, + 0x61, 0x76, 0x76, 0x16, 0xb6, 0xed, 0xb6, 0x5d, 0x12, 0x4f, 0xdd, 0x99, 0xe7, 0xdf, 0x67, 0xbe, + 0x33, 0xcf, 0x93, 0x82, 0x65, 0x93, 0x10, 0xd3, 0xc6, 0x9a, 0x6e, 0x93, 0xc0, 0xd0, 0x08, 0xb3, + 0x89, 0x69, 0xb9, 0xda, 0xe9, 0x6a, 0x0b, 0xfb, 0x28, 0x5e, 0xaa, 0xd4, 0x23, 0x3e, 0x81, 0x0b, + 0x91, 0xab, 0xca, 0x5d, 0xd5, 0xd8, 0x16, 0xb9, 0xca, 0x8b, 0x22, 0x0f, 0xa2, 0x96, 0x86, 0x5c, + 0x97, 0xf8, 0xc8, 0xb7, 0x88, 0xcb, 0xa2, 0x50, 0xb9, 0x9c, 0x5a, 0x45, 0x27, 0x8e, 0x43, 0xe2, + 0x1f, 0xe1, 0x29, 0x8a, 0x68, 0x7c, 0xd5, 0x0a, 0x8e, 0x35, 0xec, 0x50, 0xbf, 0x23, 0x8c, 0xa5, + 0x5e, 0xe3, 0xb1, 0x85, 0x6d, 0xa3, 0xe9, 0x20, 0xd6, 0x8e, 0x3c, 0x94, 0x3f, 0x39, 0x50, 0x78, + 0x1a, 0x26, 0xaf, 0x7b, 0xe4, 0xd8, 0xb2, 0x31, 0x84, 0x60, 0xcc, 0x45, 0x0e, 0x2e, 0x4a, 0x25, + 0xa9, 0x3c, 0xd9, 0xe0, 0xdf, 0xb0, 0x0e, 0x66, 0x28, 0x61, 0xd6, 0x9b, 0x26, 0xd2, 0x75, 0x12, + 0xb8, 0x3e, 0x2b, 0xe6, 0x4a, 0xf9, 0xf2, 0x54, 0x75, 0x59, 0x4d, 0x3d, 0xa1, 0xe0, 0xab, 0x87, + 0x21, 0x0f, 0xa3, 0x88, 0xc6, 0x34, 0x4d, 0xac, 0x18, 0x34, 0xc0, 0x2c, 0x63, 0x27, 0x4d, 0x1a, + 0xb4, 0x6c, 0x4b, 0x6f, 0xb6, 0x71, 0x87, 0x15, 0xf3, 0x3c, 0xe5, 0x3d, 0x75, 0x88, 0x68, 0x6a, + 0x92, 0x54, 0x3d, 0x60, 0x27, 0x75, 0x1e, 0xff, 0x04, 0x77, 0xd8, 0x8e, 0xeb, 0x7b, 0x9d, 0xc6, + 0x34, 0x4b, 0xee, 0xc1, 0x45, 0x30, 0xc9, 0x02, 0x46, 0xb1, 0x6b, 0x60, 0xa3, 0x38, 0x56, 0x92, + 0xca, 0x13, 0x8d, 0xcb, 0x0d, 0xb9, 0x0d, 0x60, 0x7f, 0x0a, 0xf8, 0x3f, 0xc8, 0xb7, 0x71, 0x47, + 0x1c, 0x3f, 0xfc, 0x84, 0x0f, 0xc0, 0x7f, 0xa7, 0xc8, 0x0e, 0x70, 0x31, 0x57, 0x92, 0x46, 0x1e, + 0x3a, 0x99, 0xb1, 0x11, 0xc5, 0x6d, 0xe4, 0xd6, 0x25, 0x45, 0x03, 0xf3, 0x8f, 0xb0, 0x8d, 0x7d, + 0xdc, 0xa5, 0x0a, 0x7e, 0x1d, 0x60, 0xe6, 0xa7, 0x69, 0x7e, 0x19, 0xd0, 0x95, 0x71, 0x48, 0xc0, + 0x6d, 0x30, 0xb7, 0x8b, 0xfd, 0xa4, 0x42, 0xa3, 0xbd, 0xb3, 0xe6, 0xfe, 0x2a, 0x81, 0xf9, 0x3d, + 0x87, 0x12, 0x2f, 0x35, 0x62, 0x0e, 0x8c, 0x53, 0xe4, 0x61, 0xd7, 0x17, 0x31, 0x62, 0x05, 0xf7, + 0xc1, 0x4c, 0xf7, 0x25, 0x5f, 0x5d, 0xc1, 0x42, 0xf2, 0x42, 0xe1, 0x35, 0x00, 0xa8, 0x47, 0x5e, + 0x61, 0xdd, 0x6f, 0x5a, 0x46, 0x31, 0xcf, 0x8b, 0x4d, 0x8a, 0x9d, 0x3d, 0x43, 0xb1, 0x81, 0x9c, + 0x06, 0xc9, 0x28, 0x71, 0x19, 0x86, 0xcf, 0xc1, 0x34, 0xaf, 0xd3, 0xa4, 0x91, 0x3a, 0x1c, 0x76, + 0x20, 0x4c, 0xca, 0x83, 0x6b, 0x14, 0xec, 0xc4, 0x4a, 0xf9, 0x29, 0x81, 0xf9, 0x17, 0xd4, 0x40, + 0x99, 0x6f, 0xe8, 0xdf, 0xeb, 0xb1, 0x09, 0xa6, 0x02, 0x4e, 0xc0, 0x3b, 0x9a, 0x0b, 0x32, 0x55, + 0x95, 0xe3, 0x6c, 0x71, 0xd3, 0xab, 0x8f, 0xc3, 0xa6, 0x7f, 0x86, 0x58, 0xbb, 0x01, 0x22, 0xf7, + 0xf0, 0xbb, 0xfa, 0x7e, 0x02, 0xcc, 0xec, 0x33, 0x7e, 0xc0, 0x03, 0xec, 0x9d, 0x5a, 0x3a, 0x86, + 0x1f, 0x24, 0x00, 0xfb, 0x5f, 0x29, 0xbc, 0x33, 0x54, 0xa2, 0x81, 0xcf, 0x5a, 0x9e, 0xeb, 0x23, + 0xd9, 0x09, 0x67, 0x93, 0xb2, 0xfc, 0xee, 0xd7, 0xef, 0x8f, 0xb9, 0xa5, 0xca, 0x8d, 0x78, 0x6c, + 0xbe, 0x0d, 0xe5, 0xd9, 0x0a, 0x18, 0xf6, 0x98, 0x56, 0xd1, 0xc4, 0x85, 0x32, 0xad, 0x72, 0x06, + 0x3f, 0x5d, 0x10, 0x25, 0x65, 0xc8, 0x44, 0x94, 0x72, 0x2b, 0x03, 0x89, 0x54, 0x4e, 0x54, 0xae, + 0xdc, 0x4a, 0x27, 0xea, 0x9a, 0x2a, 0x21, 0xd6, 0x67, 0x09, 0xcc, 0xf6, 0x34, 0x1b, 0x5c, 0x1b, + 0xca, 0x94, 0xde, 0x9a, 0x72, 0xf6, 0xd7, 0xa7, 0xac, 0x70, 0xc6, 0x9b, 0x70, 0x29, 0x95, 0xf1, + 0x4c, 0x4b, 0x3e, 0x4e, 0xf8, 0x25, 0x02, 0xec, 0x12, 0x6d, 0x24, 0x60, 0x9a, 0x62, 0xd9, 0xdf, + 0x66, 0x2c, 0x22, 0xcc, 0x2a, 0xe2, 0xb9, 0x04, 0x60, 0x7f, 0xbf, 0x8e, 0xb8, 0xdb, 0x81, 0x53, + 0x48, 0xbe, 0x7b, 0xe5, 0xb8, 0x68, 0x30, 0x28, 0xdb, 0x9c, 0x7b, 0x4b, 0x59, 0xb9, 0xe0, 0x8e, + 0xe6, 0xd7, 0x85, 0xb4, 0x1b, 0x56, 0x5f, 0xf0, 0x46, 0x4f, 0x27, 0xc3, 0x1f, 0x12, 0x80, 0xfd, + 0xd3, 0x60, 0xc4, 0x61, 0x06, 0x8e, 0x8f, 0xab, 0xc8, 0x7e, 0x9f, 0xe3, 0xaf, 0x57, 0x33, 0xca, + 0xde, 0x4b, 0x5e, 0xfb, 0x2e, 0x81, 0xeb, 0x3a, 0x71, 0x86, 0x81, 0xd6, 0x0a, 0x62, 0x50, 0xd4, + 0xc3, 0xb6, 0xa9, 0x4b, 0x2f, 0x6b, 0xc2, 0xd9, 0x24, 0x36, 0x72, 0x4d, 0x95, 0x78, 0xa6, 0x66, + 0x62, 0x97, 0x37, 0x95, 0x16, 0x99, 0x10, 0xb5, 0x58, 0xea, 0x7f, 0xa4, 0x4d, 0xb1, 0xfc, 0x96, + 0x5b, 0xd8, 0x8d, 0x92, 0x6c, 0xf3, 0x8a, 0xa2, 0x82, 0x7a, 0xb8, 0x5a, 0xc3, 0x3e, 0x3a, 0x8f, + 0xad, 0x47, 0xdc, 0x7a, 0x24, 0xac, 0x47, 0x87, 0x3c, 0x47, 0x6b, 0x9c, 0x97, 0x5a, 0xfb, 0x1b, + 0x00, 0x00, 0xff, 0xff, 0xc7, 0x96, 0xd9, 0xc2, 0x8d, 0x09, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/resourcemanager/v2/folders.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/resourcemanager/v2/folders.pb.go new file mode 100644 index 0000000..6f360bb --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/resourcemanager/v2/folders.pb.go @@ -0,0 +1,1263 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/resourcemanager/v2/folders.proto + +/* +Package resourcemanager is a generated protocol buffer package. + +It is generated from these files: + google/cloud/resourcemanager/v2/folders.proto + +It has these top-level messages: + Folder + ListFoldersRequest + ListFoldersResponse + SearchFoldersRequest + SearchFoldersResponse + GetFolderRequest + CreateFolderRequest + MoveFolderRequest + UpdateFolderRequest + DeleteFolderRequest + UndeleteFolderRequest + FolderOperation +*/ +package resourcemanager + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_iam_v11 "google.golang.org/genproto/googleapis/iam/v1" +import google_iam_v1 "google.golang.org/genproto/googleapis/iam/v1" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import google_protobuf3 "google.golang.org/genproto/protobuf/field_mask" +import google_protobuf4 "github.com/golang/protobuf/ptypes/timestamp" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Folder lifecycle states. +type Folder_LifecycleState int32 + +const ( + // Unspecified state. + Folder_LIFECYCLE_STATE_UNSPECIFIED Folder_LifecycleState = 0 + // The normal and active state. + Folder_ACTIVE Folder_LifecycleState = 1 + // The folder has been marked for deletion by the user. + Folder_DELETE_REQUESTED Folder_LifecycleState = 2 +) + +var Folder_LifecycleState_name = map[int32]string{ + 0: "LIFECYCLE_STATE_UNSPECIFIED", + 1: "ACTIVE", + 2: "DELETE_REQUESTED", +} +var Folder_LifecycleState_value = map[string]int32{ + "LIFECYCLE_STATE_UNSPECIFIED": 0, + "ACTIVE": 1, + "DELETE_REQUESTED": 2, +} + +func (x Folder_LifecycleState) String() string { + return proto.EnumName(Folder_LifecycleState_name, int32(x)) +} +func (Folder_LifecycleState) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 0} } + +// The type of operation that failed. +type FolderOperation_OperationType int32 + +const ( + // Operation type not specified. + FolderOperation_OPERATION_TYPE_UNSPECIFIED FolderOperation_OperationType = 0 + // A create folder operation. + FolderOperation_CREATE FolderOperation_OperationType = 1 + // A move folder operation. + FolderOperation_MOVE FolderOperation_OperationType = 2 +) + +var FolderOperation_OperationType_name = map[int32]string{ + 0: "OPERATION_TYPE_UNSPECIFIED", + 1: "CREATE", + 2: "MOVE", +} +var FolderOperation_OperationType_value = map[string]int32{ + "OPERATION_TYPE_UNSPECIFIED": 0, + "CREATE": 1, + "MOVE": 2, +} + +func (x FolderOperation_OperationType) String() string { + return proto.EnumName(FolderOperation_OperationType_name, int32(x)) +} +func (FolderOperation_OperationType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{11, 0} +} + +// A Folder in an Organization's resource hierarchy, used to +// organize that Organization's resources. +type Folder struct { + // Output only. The resource name of the Folder. + // Its format is `folders/{folder_id}`, for example: "folders/1234". + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The Folder’s parent's resource name. + // Updates to the folder's parent must be performed via [MoveFolders]. + Parent string `protobuf:"bytes,2,opt,name=parent" json:"parent,omitempty"` + // The folder’s display name. + // A folder’s display name must be unique amongst its siblings, e.g. + // no two folders with the same parent can share the same display name. + // The display name must start and end with a letter or digit, may contain + // letters, digits, spaces, hyphens and underscores and can be no longer + // than 30 characters. This is captured by the regular expression: + // [\p{L}\p{N}]({\p{L}\p{N}_- ]{0,28}[\p{L}\p{N}])?. + DisplayName string `protobuf:"bytes,3,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // Output only. The lifecycle state of the folder. + // Updates to the lifecycle_state must be performed via + // [DeleteFolder] and [UndeleteFolder]. + LifecycleState Folder_LifecycleState `protobuf:"varint,4,opt,name=lifecycle_state,json=lifecycleState,enum=google.cloud.resourcemanager.v2.Folder_LifecycleState" json:"lifecycle_state,omitempty"` + // Output only. Timestamp when the Folder was created. Assigned by the server. + CreateTime *google_protobuf4.Timestamp `protobuf:"bytes,5,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // Output only. Timestamp when the Folder was last modified. + UpdateTime *google_protobuf4.Timestamp `protobuf:"bytes,6,opt,name=update_time,json=updateTime" json:"update_time,omitempty"` +} + +func (m *Folder) Reset() { *m = Folder{} } +func (m *Folder) String() string { return proto.CompactTextString(m) } +func (*Folder) ProtoMessage() {} +func (*Folder) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *Folder) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Folder) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *Folder) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func (m *Folder) GetLifecycleState() Folder_LifecycleState { + if m != nil { + return m.LifecycleState + } + return Folder_LIFECYCLE_STATE_UNSPECIFIED +} + +func (m *Folder) GetCreateTime() *google_protobuf4.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *Folder) GetUpdateTime() *google_protobuf4.Timestamp { + if m != nil { + return m.UpdateTime + } + return nil +} + +// The ListFolders request message. +type ListFoldersRequest struct { + // The resource name of the Organization or Folder whose Folders are + // being listed. + // Must be of the form `folders/{folder_id}` or `organizations/{org_id}`. + // Access to this method is controlled by checking the + // `resourcemanager.folders.list` permission on the `parent`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The maximum number of Folders to return in the response. + // This field is optional. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // A pagination token returned from a previous call to `ListFolders` + // that indicates where this listing should continue from. + // This field is optional. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // Controls whether Folders in the [DELETE_REQUESTED} state should + // be returned. + ShowDeleted bool `protobuf:"varint,4,opt,name=show_deleted,json=showDeleted" json:"show_deleted,omitempty"` +} + +func (m *ListFoldersRequest) Reset() { *m = ListFoldersRequest{} } +func (m *ListFoldersRequest) String() string { return proto.CompactTextString(m) } +func (*ListFoldersRequest) ProtoMessage() {} +func (*ListFoldersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *ListFoldersRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListFoldersRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListFoldersRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListFoldersRequest) GetShowDeleted() bool { + if m != nil { + return m.ShowDeleted + } + return false +} + +// The ListFolders response message. +type ListFoldersResponse struct { + // A possibly paginated list of Folders that are direct descendants of + // the specified parent resource. + Folders []*Folder `protobuf:"bytes,1,rep,name=folders" json:"folders,omitempty"` + // A pagination token returned from a previous call to `ListFolders` + // that indicates from where listing should continue. + // This field is optional. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListFoldersResponse) Reset() { *m = ListFoldersResponse{} } +func (m *ListFoldersResponse) String() string { return proto.CompactTextString(m) } +func (*ListFoldersResponse) ProtoMessage() {} +func (*ListFoldersResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *ListFoldersResponse) GetFolders() []*Folder { + if m != nil { + return m.Folders + } + return nil +} + +func (m *ListFoldersResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The request message for searching folders. +type SearchFoldersRequest struct { + // The maximum number of folders to return in the response. + // This field is optional. + PageSize int32 `protobuf:"varint,1,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // A pagination token returned from a previous call to `SearchFolders` + // that indicates from where search should continue. + // This field is optional. + PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // Search criteria used to select the Folders to return. + // If no search criteria is specified then all accessible folders will be + // returned. + // + // Query expressions can be used to restrict results based upon displayName, + // lifecycleState and parent, where the operators `=`, `NOT`, `AND` and `OR` + // can be used along with the suffix wildcard symbol `*`. + // + // Some example queries are: + // |Query|Description| + // |------|-----------| + // |displayName=Test*|Folders whose display name starts with "Test".| + // |lifecycleState=ACTIVE|Folders whose lifecycleState is ACTIVE.| + // |parent=folders/123|Folders whose parent is "folders/123".| + // |parent=folders/123 AND lifecycleState=ACTIVE|Active folders whose + // parent is "folders/123".| + Query string `protobuf:"bytes,3,opt,name=query" json:"query,omitempty"` +} + +func (m *SearchFoldersRequest) Reset() { *m = SearchFoldersRequest{} } +func (m *SearchFoldersRequest) String() string { return proto.CompactTextString(m) } +func (*SearchFoldersRequest) ProtoMessage() {} +func (*SearchFoldersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *SearchFoldersRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *SearchFoldersRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *SearchFoldersRequest) GetQuery() string { + if m != nil { + return m.Query + } + return "" +} + +// The response message for searching folders. +type SearchFoldersResponse struct { + // A possibly paginated folder search results. + // the specified parent resource. + Folders []*Folder `protobuf:"bytes,1,rep,name=folders" json:"folders,omitempty"` + // A pagination token returned from a previous call to `SearchFolders` + // that indicates from where searching should continue. + // This field is optional. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *SearchFoldersResponse) Reset() { *m = SearchFoldersResponse{} } +func (m *SearchFoldersResponse) String() string { return proto.CompactTextString(m) } +func (*SearchFoldersResponse) ProtoMessage() {} +func (*SearchFoldersResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *SearchFoldersResponse) GetFolders() []*Folder { + if m != nil { + return m.Folders + } + return nil +} + +func (m *SearchFoldersResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The GetFolder request message. +type GetFolderRequest struct { + // The resource name of the Folder to retrieve. + // Must be of the form `folders/{folder_id}`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetFolderRequest) Reset() { *m = GetFolderRequest{} } +func (m *GetFolderRequest) String() string { return proto.CompactTextString(m) } +func (*GetFolderRequest) ProtoMessage() {} +func (*GetFolderRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *GetFolderRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The CreateFolder request message. +type CreateFolderRequest struct { + // The resource name of the new Folder's parent. + // Must be of the form `folders/{folder_id}` or `organizations/{org_id}`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The Folder being created, only the display name will be consulted. + // All other fields will be ignored. + Folder *Folder `protobuf:"bytes,2,opt,name=folder" json:"folder,omitempty"` +} + +func (m *CreateFolderRequest) Reset() { *m = CreateFolderRequest{} } +func (m *CreateFolderRequest) String() string { return proto.CompactTextString(m) } +func (*CreateFolderRequest) ProtoMessage() {} +func (*CreateFolderRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *CreateFolderRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateFolderRequest) GetFolder() *Folder { + if m != nil { + return m.Folder + } + return nil +} + +// The MoveFolder request message. +type MoveFolderRequest struct { + // The resource name of the Folder to move. + // Must be of the form folders/{folder_id} + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The resource name of the Folder or Organization to reparent + // the folder under. + // Must be of the form `folders/{folder_id}` or `organizations/{org_id}`. + DestinationParent string `protobuf:"bytes,2,opt,name=destination_parent,json=destinationParent" json:"destination_parent,omitempty"` +} + +func (m *MoveFolderRequest) Reset() { *m = MoveFolderRequest{} } +func (m *MoveFolderRequest) String() string { return proto.CompactTextString(m) } +func (*MoveFolderRequest) ProtoMessage() {} +func (*MoveFolderRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *MoveFolderRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *MoveFolderRequest) GetDestinationParent() string { + if m != nil { + return m.DestinationParent + } + return "" +} + +// The request message for updating a folder's display name. +type UpdateFolderRequest struct { + // The new definition of the Folder. It must include a + // a `name` and `display_name` field. The other fields + // will be ignored. + Folder *Folder `protobuf:"bytes,1,opt,name=folder" json:"folder,omitempty"` + // Fields to be updated. + // Only the `display_name` can be updated. + UpdateMask *google_protobuf3.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateFolderRequest) Reset() { *m = UpdateFolderRequest{} } +func (m *UpdateFolderRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateFolderRequest) ProtoMessage() {} +func (*UpdateFolderRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *UpdateFolderRequest) GetFolder() *Folder { + if m != nil { + return m.Folder + } + return nil +} + +func (m *UpdateFolderRequest) GetUpdateMask() *google_protobuf3.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +// The DeleteFolder request message. +type DeleteFolderRequest struct { + // the resource name of the Folder to be deleted. + // Must be of the form `folders/{folder_id}`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Instructs DeleteFolderAction to delete a folder even when the folder is not + // empty. + RecursiveDelete bool `protobuf:"varint,2,opt,name=recursive_delete,json=recursiveDelete" json:"recursive_delete,omitempty"` +} + +func (m *DeleteFolderRequest) Reset() { *m = DeleteFolderRequest{} } +func (m *DeleteFolderRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteFolderRequest) ProtoMessage() {} +func (*DeleteFolderRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *DeleteFolderRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *DeleteFolderRequest) GetRecursiveDelete() bool { + if m != nil { + return m.RecursiveDelete + } + return false +} + +// The UndeleteFolder request message. +type UndeleteFolderRequest struct { + // The resource name of the Folder to undelete. + // Must be of the form `folders/{folder_id}`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *UndeleteFolderRequest) Reset() { *m = UndeleteFolderRequest{} } +func (m *UndeleteFolderRequest) String() string { return proto.CompactTextString(m) } +func (*UndeleteFolderRequest) ProtoMessage() {} +func (*UndeleteFolderRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *UndeleteFolderRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Metadata describing a long running folder operation +type FolderOperation struct { + // The display name of the folder. + DisplayName string `protobuf:"bytes,1,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // The type of this operation. + OperationType FolderOperation_OperationType `protobuf:"varint,2,opt,name=operation_type,json=operationType,enum=google.cloud.resourcemanager.v2.FolderOperation_OperationType" json:"operation_type,omitempty"` + // The resource name of the folder's parent. + // Only applicable when the operation_type is MOVE. + SourceParent string `protobuf:"bytes,3,opt,name=source_parent,json=sourceParent" json:"source_parent,omitempty"` + // The resource name of the folder or organization we are either creating + // the folder under or moving the folder to. + DestinationParent string `protobuf:"bytes,4,opt,name=destination_parent,json=destinationParent" json:"destination_parent,omitempty"` +} + +func (m *FolderOperation) Reset() { *m = FolderOperation{} } +func (m *FolderOperation) String() string { return proto.CompactTextString(m) } +func (*FolderOperation) ProtoMessage() {} +func (*FolderOperation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *FolderOperation) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func (m *FolderOperation) GetOperationType() FolderOperation_OperationType { + if m != nil { + return m.OperationType + } + return FolderOperation_OPERATION_TYPE_UNSPECIFIED +} + +func (m *FolderOperation) GetSourceParent() string { + if m != nil { + return m.SourceParent + } + return "" +} + +func (m *FolderOperation) GetDestinationParent() string { + if m != nil { + return m.DestinationParent + } + return "" +} + +func init() { + proto.RegisterType((*Folder)(nil), "google.cloud.resourcemanager.v2.Folder") + proto.RegisterType((*ListFoldersRequest)(nil), "google.cloud.resourcemanager.v2.ListFoldersRequest") + proto.RegisterType((*ListFoldersResponse)(nil), "google.cloud.resourcemanager.v2.ListFoldersResponse") + proto.RegisterType((*SearchFoldersRequest)(nil), "google.cloud.resourcemanager.v2.SearchFoldersRequest") + proto.RegisterType((*SearchFoldersResponse)(nil), "google.cloud.resourcemanager.v2.SearchFoldersResponse") + proto.RegisterType((*GetFolderRequest)(nil), "google.cloud.resourcemanager.v2.GetFolderRequest") + proto.RegisterType((*CreateFolderRequest)(nil), "google.cloud.resourcemanager.v2.CreateFolderRequest") + proto.RegisterType((*MoveFolderRequest)(nil), "google.cloud.resourcemanager.v2.MoveFolderRequest") + proto.RegisterType((*UpdateFolderRequest)(nil), "google.cloud.resourcemanager.v2.UpdateFolderRequest") + proto.RegisterType((*DeleteFolderRequest)(nil), "google.cloud.resourcemanager.v2.DeleteFolderRequest") + proto.RegisterType((*UndeleteFolderRequest)(nil), "google.cloud.resourcemanager.v2.UndeleteFolderRequest") + proto.RegisterType((*FolderOperation)(nil), "google.cloud.resourcemanager.v2.FolderOperation") + proto.RegisterEnum("google.cloud.resourcemanager.v2.Folder_LifecycleState", Folder_LifecycleState_name, Folder_LifecycleState_value) + proto.RegisterEnum("google.cloud.resourcemanager.v2.FolderOperation_OperationType", FolderOperation_OperationType_name, FolderOperation_OperationType_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for Folders service + +type FoldersClient interface { + // Lists the Folders that are direct descendants of supplied parent resource. + // List provides a strongly consistent view of the Folders underneath + // the specified parent resource. + // List returns Folders sorted based upon the (ascending) lexical ordering + // of their display_name. + // The caller must have `resourcemanager.folders.list` permission on the + // identified parent. + ListFolders(ctx context.Context, in *ListFoldersRequest, opts ...grpc.CallOption) (*ListFoldersResponse, error) + // Search for folders that match specific filter criteria. + // Search provides an eventually consistent view of the folders a user has + // access to which meet the specified filter criteria. + // + // This will only return folders on which the caller has the + // permission `resourcemanager.folders.get`. + SearchFolders(ctx context.Context, in *SearchFoldersRequest, opts ...grpc.CallOption) (*SearchFoldersResponse, error) + // Retrieves a Folder identified by the supplied resource name. + // Valid Folder resource names have the format `folders/{folder_id}` + // (for example, `folders/1234`). + // The caller must have `resourcemanager.folders.get` permission on the + // identified folder. + GetFolder(ctx context.Context, in *GetFolderRequest, opts ...grpc.CallOption) (*Folder, error) + // Creates a Folder in the resource hierarchy. + // Returns an Operation which can be used to track the progress of the + // folder creation workflow. + // Upon success the Operation.response field will be populated with the + // created Folder. + // + // In order to succeed, the addition of this new Folder must not violate + // the Folder naming, height or fanout constraints. + // + The Folder's display_name must be distinct from all other Folder's that + // share its parent. + // + The addition of the Folder must not cause the active Folder hierarchy + // to exceed a height of 4. Note, the full active + deleted Folder hierarchy + // is allowed to reach a height of 8; this provides additional headroom when + // moving folders that contain deleted folders. + // + The addition of the Folder must not cause the total number of Folders + // under its parent to exceed 100. + // + // If the operation fails due to a folder constraint violation, + // a PreconditionFailure explaining the violation will be returned. + // If the failure occurs synchronously then the PreconditionFailure + // will be returned via the Status.details field and if it occurs + // asynchronously then the PreconditionFailure will be returned + // via the the Operation.error field. + // + // The caller must have `resourcemanager.folders.create` permission on the + // identified parent. + CreateFolder(ctx context.Context, in *CreateFolderRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Updates a Folder, changing its display_name. + // Changes to the folder display_name will be rejected if they violate either + // the display_name formatting rules or naming constraints described in + // the [CreateFolder] documentation. + // + The Folder's display name must start and end with a letter or digit, + // may contain letters, digits, spaces, hyphens and underscores and can be + // no longer than 30 characters. This is captured by the regular expression: + // [\p{L}\p{N}]({\p{L}\p{N}_- ]{0,28}[\p{L}\p{N}])?. + // The caller must have `resourcemanager.folders.update` permission on the + // identified folder. + // + // If the update fails due to the unique name constraint then a + // PreconditionFailure explaining this violation will be returned + // in the Status.details field. + UpdateFolder(ctx context.Context, in *UpdateFolderRequest, opts ...grpc.CallOption) (*Folder, error) + // Moves a Folder under a new resource parent. + // Returns an Operation which can be used to track the progress of the + // folder move workflow. + // Upon success the Operation.response field will be populated with the + // moved Folder. + // Upon failure, a FolderOperationError categorizing the failure cause will + // be returned - if the failure occurs synchronously then the + // FolderOperationError will be returned via the Status.details field + // and if it occurs asynchronously then the FolderOperation will be returned + // via the the Operation.error field. + // In addition, the Operation.metadata field will be populated with a + // FolderOperation message as an aid to stateless clients. + // Folder moves will be rejected if they violate either the naming, height + // or fanout constraints described in the [CreateFolder] documentation. + // The caller must have `resourcemanager.folders.move` permission on the + // folder's current and proposed new parent. + MoveFolder(ctx context.Context, in *MoveFolderRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Requests deletion of a Folder. The Folder is moved into the + // [DELETE_REQUESTED] state immediately, and is deleted approximately 30 days + // later. This method may only be called on an empty Folder in the [ACTIVE] + // state, where a Folder is empty if it doesn't contain any Folders or + // Projects in the [ACTIVE] state. + // The caller must have `resourcemanager.folders.delete` permission on the + // identified folder. + DeleteFolder(ctx context.Context, in *DeleteFolderRequest, opts ...grpc.CallOption) (*Folder, error) + // Cancels the deletion request for a Folder. This method may only be + // called on a Folder in the [DELETE_REQUESTED] state. + // In order to succeed, the Folder's parent must be in the [ACTIVE] state. + // In addition, reintroducing the folder into the tree must not violate + // folder naming, height and fanout constraints described in the + // [CreateFolder] documentation. + // The caller must have `resourcemanager.folders.undelete` permission on the + // identified folder. + UndeleteFolder(ctx context.Context, in *UndeleteFolderRequest, opts ...grpc.CallOption) (*Folder, error) + // Gets the access control policy for a Folder. The returned policy may be + // empty if no such policy or resource exists. The `resource` field should + // be the Folder's resource name, e.g. "folders/1234". + // The caller must have `resourcemanager.folders.getIamPolicy` permission + // on the identified folder. + GetIamPolicy(ctx context.Context, in *google_iam_v11.GetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) + // Sets the access control policy on a Folder, replacing any existing policy. + // The `resource` field should be the Folder's resource name, e.g. + // "folders/1234". + // The caller must have `resourcemanager.folders.setIamPolicy` permission + // on the identified folder. + SetIamPolicy(ctx context.Context, in *google_iam_v11.SetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) + // Returns permissions that a caller has on the specified Folder. + // The `resource` field should be the Folder's resource name, + // e.g. "folders/1234". + // + // There are no permissions required for making this API call. + TestIamPermissions(ctx context.Context, in *google_iam_v11.TestIamPermissionsRequest, opts ...grpc.CallOption) (*google_iam_v11.TestIamPermissionsResponse, error) +} + +type foldersClient struct { + cc *grpc.ClientConn +} + +func NewFoldersClient(cc *grpc.ClientConn) FoldersClient { + return &foldersClient{cc} +} + +func (c *foldersClient) ListFolders(ctx context.Context, in *ListFoldersRequest, opts ...grpc.CallOption) (*ListFoldersResponse, error) { + out := new(ListFoldersResponse) + err := grpc.Invoke(ctx, "/google.cloud.resourcemanager.v2.Folders/ListFolders", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *foldersClient) SearchFolders(ctx context.Context, in *SearchFoldersRequest, opts ...grpc.CallOption) (*SearchFoldersResponse, error) { + out := new(SearchFoldersResponse) + err := grpc.Invoke(ctx, "/google.cloud.resourcemanager.v2.Folders/SearchFolders", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *foldersClient) GetFolder(ctx context.Context, in *GetFolderRequest, opts ...grpc.CallOption) (*Folder, error) { + out := new(Folder) + err := grpc.Invoke(ctx, "/google.cloud.resourcemanager.v2.Folders/GetFolder", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *foldersClient) CreateFolder(ctx context.Context, in *CreateFolderRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.resourcemanager.v2.Folders/CreateFolder", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *foldersClient) UpdateFolder(ctx context.Context, in *UpdateFolderRequest, opts ...grpc.CallOption) (*Folder, error) { + out := new(Folder) + err := grpc.Invoke(ctx, "/google.cloud.resourcemanager.v2.Folders/UpdateFolder", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *foldersClient) MoveFolder(ctx context.Context, in *MoveFolderRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.resourcemanager.v2.Folders/MoveFolder", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *foldersClient) DeleteFolder(ctx context.Context, in *DeleteFolderRequest, opts ...grpc.CallOption) (*Folder, error) { + out := new(Folder) + err := grpc.Invoke(ctx, "/google.cloud.resourcemanager.v2.Folders/DeleteFolder", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *foldersClient) UndeleteFolder(ctx context.Context, in *UndeleteFolderRequest, opts ...grpc.CallOption) (*Folder, error) { + out := new(Folder) + err := grpc.Invoke(ctx, "/google.cloud.resourcemanager.v2.Folders/UndeleteFolder", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *foldersClient) GetIamPolicy(ctx context.Context, in *google_iam_v11.GetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) { + out := new(google_iam_v1.Policy) + err := grpc.Invoke(ctx, "/google.cloud.resourcemanager.v2.Folders/GetIamPolicy", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *foldersClient) SetIamPolicy(ctx context.Context, in *google_iam_v11.SetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) { + out := new(google_iam_v1.Policy) + err := grpc.Invoke(ctx, "/google.cloud.resourcemanager.v2.Folders/SetIamPolicy", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *foldersClient) TestIamPermissions(ctx context.Context, in *google_iam_v11.TestIamPermissionsRequest, opts ...grpc.CallOption) (*google_iam_v11.TestIamPermissionsResponse, error) { + out := new(google_iam_v11.TestIamPermissionsResponse) + err := grpc.Invoke(ctx, "/google.cloud.resourcemanager.v2.Folders/TestIamPermissions", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Folders service + +type FoldersServer interface { + // Lists the Folders that are direct descendants of supplied parent resource. + // List provides a strongly consistent view of the Folders underneath + // the specified parent resource. + // List returns Folders sorted based upon the (ascending) lexical ordering + // of their display_name. + // The caller must have `resourcemanager.folders.list` permission on the + // identified parent. + ListFolders(context.Context, *ListFoldersRequest) (*ListFoldersResponse, error) + // Search for folders that match specific filter criteria. + // Search provides an eventually consistent view of the folders a user has + // access to which meet the specified filter criteria. + // + // This will only return folders on which the caller has the + // permission `resourcemanager.folders.get`. + SearchFolders(context.Context, *SearchFoldersRequest) (*SearchFoldersResponse, error) + // Retrieves a Folder identified by the supplied resource name. + // Valid Folder resource names have the format `folders/{folder_id}` + // (for example, `folders/1234`). + // The caller must have `resourcemanager.folders.get` permission on the + // identified folder. + GetFolder(context.Context, *GetFolderRequest) (*Folder, error) + // Creates a Folder in the resource hierarchy. + // Returns an Operation which can be used to track the progress of the + // folder creation workflow. + // Upon success the Operation.response field will be populated with the + // created Folder. + // + // In order to succeed, the addition of this new Folder must not violate + // the Folder naming, height or fanout constraints. + // + The Folder's display_name must be distinct from all other Folder's that + // share its parent. + // + The addition of the Folder must not cause the active Folder hierarchy + // to exceed a height of 4. Note, the full active + deleted Folder hierarchy + // is allowed to reach a height of 8; this provides additional headroom when + // moving folders that contain deleted folders. + // + The addition of the Folder must not cause the total number of Folders + // under its parent to exceed 100. + // + // If the operation fails due to a folder constraint violation, + // a PreconditionFailure explaining the violation will be returned. + // If the failure occurs synchronously then the PreconditionFailure + // will be returned via the Status.details field and if it occurs + // asynchronously then the PreconditionFailure will be returned + // via the the Operation.error field. + // + // The caller must have `resourcemanager.folders.create` permission on the + // identified parent. + CreateFolder(context.Context, *CreateFolderRequest) (*google_longrunning.Operation, error) + // Updates a Folder, changing its display_name. + // Changes to the folder display_name will be rejected if they violate either + // the display_name formatting rules or naming constraints described in + // the [CreateFolder] documentation. + // + The Folder's display name must start and end with a letter or digit, + // may contain letters, digits, spaces, hyphens and underscores and can be + // no longer than 30 characters. This is captured by the regular expression: + // [\p{L}\p{N}]({\p{L}\p{N}_- ]{0,28}[\p{L}\p{N}])?. + // The caller must have `resourcemanager.folders.update` permission on the + // identified folder. + // + // If the update fails due to the unique name constraint then a + // PreconditionFailure explaining this violation will be returned + // in the Status.details field. + UpdateFolder(context.Context, *UpdateFolderRequest) (*Folder, error) + // Moves a Folder under a new resource parent. + // Returns an Operation which can be used to track the progress of the + // folder move workflow. + // Upon success the Operation.response field will be populated with the + // moved Folder. + // Upon failure, a FolderOperationError categorizing the failure cause will + // be returned - if the failure occurs synchronously then the + // FolderOperationError will be returned via the Status.details field + // and if it occurs asynchronously then the FolderOperation will be returned + // via the the Operation.error field. + // In addition, the Operation.metadata field will be populated with a + // FolderOperation message as an aid to stateless clients. + // Folder moves will be rejected if they violate either the naming, height + // or fanout constraints described in the [CreateFolder] documentation. + // The caller must have `resourcemanager.folders.move` permission on the + // folder's current and proposed new parent. + MoveFolder(context.Context, *MoveFolderRequest) (*google_longrunning.Operation, error) + // Requests deletion of a Folder. The Folder is moved into the + // [DELETE_REQUESTED] state immediately, and is deleted approximately 30 days + // later. This method may only be called on an empty Folder in the [ACTIVE] + // state, where a Folder is empty if it doesn't contain any Folders or + // Projects in the [ACTIVE] state. + // The caller must have `resourcemanager.folders.delete` permission on the + // identified folder. + DeleteFolder(context.Context, *DeleteFolderRequest) (*Folder, error) + // Cancels the deletion request for a Folder. This method may only be + // called on a Folder in the [DELETE_REQUESTED] state. + // In order to succeed, the Folder's parent must be in the [ACTIVE] state. + // In addition, reintroducing the folder into the tree must not violate + // folder naming, height and fanout constraints described in the + // [CreateFolder] documentation. + // The caller must have `resourcemanager.folders.undelete` permission on the + // identified folder. + UndeleteFolder(context.Context, *UndeleteFolderRequest) (*Folder, error) + // Gets the access control policy for a Folder. The returned policy may be + // empty if no such policy or resource exists. The `resource` field should + // be the Folder's resource name, e.g. "folders/1234". + // The caller must have `resourcemanager.folders.getIamPolicy` permission + // on the identified folder. + GetIamPolicy(context.Context, *google_iam_v11.GetIamPolicyRequest) (*google_iam_v1.Policy, error) + // Sets the access control policy on a Folder, replacing any existing policy. + // The `resource` field should be the Folder's resource name, e.g. + // "folders/1234". + // The caller must have `resourcemanager.folders.setIamPolicy` permission + // on the identified folder. + SetIamPolicy(context.Context, *google_iam_v11.SetIamPolicyRequest) (*google_iam_v1.Policy, error) + // Returns permissions that a caller has on the specified Folder. + // The `resource` field should be the Folder's resource name, + // e.g. "folders/1234". + // + // There are no permissions required for making this API call. + TestIamPermissions(context.Context, *google_iam_v11.TestIamPermissionsRequest) (*google_iam_v11.TestIamPermissionsResponse, error) +} + +func RegisterFoldersServer(s *grpc.Server, srv FoldersServer) { + s.RegisterService(&_Folders_serviceDesc, srv) +} + +func _Folders_ListFolders_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListFoldersRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FoldersServer).ListFolders(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.resourcemanager.v2.Folders/ListFolders", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FoldersServer).ListFolders(ctx, req.(*ListFoldersRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Folders_SearchFolders_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SearchFoldersRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FoldersServer).SearchFolders(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.resourcemanager.v2.Folders/SearchFolders", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FoldersServer).SearchFolders(ctx, req.(*SearchFoldersRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Folders_GetFolder_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetFolderRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FoldersServer).GetFolder(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.resourcemanager.v2.Folders/GetFolder", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FoldersServer).GetFolder(ctx, req.(*GetFolderRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Folders_CreateFolder_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateFolderRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FoldersServer).CreateFolder(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.resourcemanager.v2.Folders/CreateFolder", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FoldersServer).CreateFolder(ctx, req.(*CreateFolderRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Folders_UpdateFolder_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateFolderRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FoldersServer).UpdateFolder(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.resourcemanager.v2.Folders/UpdateFolder", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FoldersServer).UpdateFolder(ctx, req.(*UpdateFolderRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Folders_MoveFolder_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MoveFolderRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FoldersServer).MoveFolder(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.resourcemanager.v2.Folders/MoveFolder", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FoldersServer).MoveFolder(ctx, req.(*MoveFolderRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Folders_DeleteFolder_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteFolderRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FoldersServer).DeleteFolder(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.resourcemanager.v2.Folders/DeleteFolder", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FoldersServer).DeleteFolder(ctx, req.(*DeleteFolderRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Folders_UndeleteFolder_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UndeleteFolderRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FoldersServer).UndeleteFolder(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.resourcemanager.v2.Folders/UndeleteFolder", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FoldersServer).UndeleteFolder(ctx, req.(*UndeleteFolderRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Folders_GetIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(google_iam_v11.GetIamPolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FoldersServer).GetIamPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.resourcemanager.v2.Folders/GetIamPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FoldersServer).GetIamPolicy(ctx, req.(*google_iam_v11.GetIamPolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Folders_SetIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(google_iam_v11.SetIamPolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FoldersServer).SetIamPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.resourcemanager.v2.Folders/SetIamPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FoldersServer).SetIamPolicy(ctx, req.(*google_iam_v11.SetIamPolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Folders_TestIamPermissions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(google_iam_v11.TestIamPermissionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FoldersServer).TestIamPermissions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.resourcemanager.v2.Folders/TestIamPermissions", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FoldersServer).TestIamPermissions(ctx, req.(*google_iam_v11.TestIamPermissionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Folders_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.resourcemanager.v2.Folders", + HandlerType: (*FoldersServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListFolders", + Handler: _Folders_ListFolders_Handler, + }, + { + MethodName: "SearchFolders", + Handler: _Folders_SearchFolders_Handler, + }, + { + MethodName: "GetFolder", + Handler: _Folders_GetFolder_Handler, + }, + { + MethodName: "CreateFolder", + Handler: _Folders_CreateFolder_Handler, + }, + { + MethodName: "UpdateFolder", + Handler: _Folders_UpdateFolder_Handler, + }, + { + MethodName: "MoveFolder", + Handler: _Folders_MoveFolder_Handler, + }, + { + MethodName: "DeleteFolder", + Handler: _Folders_DeleteFolder_Handler, + }, + { + MethodName: "UndeleteFolder", + Handler: _Folders_UndeleteFolder_Handler, + }, + { + MethodName: "GetIamPolicy", + Handler: _Folders_GetIamPolicy_Handler, + }, + { + MethodName: "SetIamPolicy", + Handler: _Folders_SetIamPolicy_Handler, + }, + { + MethodName: "TestIamPermissions", + Handler: _Folders_TestIamPermissions_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/resourcemanager/v2/folders.proto", +} + +func init() { proto.RegisterFile("google/cloud/resourcemanager/v2/folders.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 1235 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0x5d, 0x6f, 0xdb, 0xd4, + 0x1b, 0xff, 0x9f, 0xac, 0xcb, 0xba, 0x27, 0x2f, 0xcd, 0x4e, 0xdb, 0xfd, 0x4b, 0xba, 0xbe, 0x70, + 0xca, 0x46, 0xd6, 0x6a, 0xce, 0x9a, 0x41, 0x2f, 0x3a, 0x01, 0xea, 0x52, 0xb7, 0x8a, 0xd4, 0x97, + 0xe0, 0xb8, 0x95, 0x86, 0x2a, 0x59, 0x5e, 0x72, 0x9a, 0x5a, 0x75, 0x6c, 0xcf, 0x76, 0x02, 0xd9, + 0x84, 0x34, 0x4d, 0x9a, 0xb8, 0x98, 0xb8, 0xda, 0x1d, 0x88, 0x0b, 0x6e, 0xb9, 0x45, 0xe2, 0x3b, + 0xc0, 0x2d, 0x5f, 0x81, 0x0f, 0x82, 0x7c, 0x7c, 0x9c, 0xda, 0x4e, 0x3a, 0xa7, 0x08, 0x71, 0x55, + 0xfb, 0x79, 0xfd, 0x3d, 0x6f, 0xbf, 0x3a, 0xf0, 0xa0, 0x6d, 0x9a, 0x6d, 0x9d, 0x96, 0x9b, 0xba, + 0xd9, 0x6d, 0x95, 0x6d, 0xea, 0x98, 0x5d, 0xbb, 0x49, 0x3b, 0xaa, 0xa1, 0xb6, 0xa9, 0x5d, 0xee, + 0x55, 0xca, 0xa7, 0xa6, 0xde, 0xa2, 0xb6, 0x23, 0x58, 0xb6, 0xe9, 0x9a, 0x78, 0xc9, 0x37, 0x17, + 0x98, 0xb9, 0x10, 0x33, 0x17, 0x7a, 0x95, 0xe2, 0x1d, 0x1e, 0x4f, 0xb5, 0xb4, 0xb2, 0x6a, 0x18, + 0xa6, 0xab, 0xba, 0x9a, 0x69, 0x70, 0xf7, 0xe2, 0x22, 0xd7, 0x6a, 0x6a, 0xa7, 0xdc, 0x5b, 0xf7, + 0xfe, 0x28, 0x96, 0xa9, 0x6b, 0xcd, 0x3e, 0xd7, 0x17, 0xa3, 0xfa, 0x88, 0x6e, 0x85, 0xeb, 0x74, + 0xd3, 0x68, 0xdb, 0x5d, 0xc3, 0xd0, 0x8c, 0x76, 0xd9, 0xb4, 0xa8, 0x1d, 0x49, 0xb0, 0xcc, 0x8d, + 0xd8, 0xdb, 0xb3, 0xee, 0x69, 0xf9, 0x54, 0xa3, 0x7a, 0x4b, 0xe9, 0xa8, 0xce, 0x39, 0xb7, 0x58, + 0x8a, 0x5b, 0xb8, 0x5a, 0x87, 0x3a, 0xae, 0xda, 0xb1, 0x7c, 0x03, 0xf2, 0xdd, 0x35, 0x48, 0xef, + 0xb0, 0xa2, 0x31, 0x86, 0x09, 0x43, 0xed, 0xd0, 0x39, 0xb4, 0x8c, 0x4a, 0x37, 0x25, 0xf6, 0x8c, + 0x6f, 0x43, 0xda, 0x52, 0x6d, 0x6a, 0xb8, 0x73, 0x29, 0x26, 0xe5, 0x6f, 0xf8, 0x43, 0xc8, 0xb6, + 0x34, 0xc7, 0xd2, 0xd5, 0xbe, 0xc2, 0x7c, 0xae, 0x31, 0x6d, 0x86, 0xcb, 0x0e, 0x3c, 0x57, 0x05, + 0xa6, 0x74, 0xed, 0x94, 0x36, 0xfb, 0x4d, 0x9d, 0x2a, 0x8e, 0xab, 0xba, 0x74, 0x6e, 0x62, 0x19, + 0x95, 0xf2, 0x95, 0x0d, 0x21, 0xa1, 0xad, 0x82, 0x0f, 0x48, 0xd8, 0x0b, 0xdc, 0x1b, 0x9e, 0xb7, + 0x94, 0xd7, 0x23, 0xef, 0xf8, 0x31, 0x64, 0x9a, 0x36, 0x55, 0x5d, 0xaa, 0x78, 0x45, 0xcd, 0x5d, + 0x5f, 0x46, 0xa5, 0x4c, 0xa5, 0x18, 0x04, 0x0f, 0x2a, 0x16, 0xe4, 0xa0, 0x62, 0x09, 0x7c, 0x73, + 0x4f, 0xe0, 0x39, 0x77, 0xad, 0xd6, 0xc0, 0x39, 0x9d, 0xec, 0xec, 0x9b, 0x7b, 0x02, 0xd2, 0x80, + 0x7c, 0x14, 0x1b, 0x5e, 0x82, 0xf9, 0xbd, 0xda, 0x8e, 0x58, 0x7d, 0x5a, 0xdd, 0x13, 0x95, 0x86, + 0xbc, 0x25, 0x8b, 0xca, 0xd1, 0x41, 0xa3, 0x2e, 0x56, 0x6b, 0x3b, 0x35, 0x71, 0xbb, 0xf0, 0x3f, + 0x0c, 0x90, 0xde, 0xaa, 0xca, 0xb5, 0x63, 0xb1, 0x80, 0xf0, 0x0c, 0x14, 0xb6, 0xc5, 0x3d, 0x51, + 0x16, 0x15, 0x49, 0xfc, 0xf2, 0x48, 0x6c, 0xc8, 0xe2, 0x76, 0x21, 0x45, 0xde, 0x22, 0xc0, 0x7b, + 0x9a, 0xe3, 0xfa, 0xc5, 0x3b, 0x12, 0x7d, 0xde, 0xa5, 0x8e, 0x1b, 0x9a, 0x00, 0x8a, 0x4c, 0x60, + 0x1e, 0x6e, 0x5a, 0x6a, 0x9b, 0x2a, 0x8e, 0xf6, 0x82, 0xb2, 0xe1, 0x5c, 0x97, 0x26, 0x3d, 0x41, + 0x43, 0x7b, 0x41, 0xf1, 0x02, 0x00, 0x53, 0xba, 0xe6, 0x39, 0x35, 0xf8, 0x70, 0x98, 0xb9, 0xec, + 0x09, 0xbc, 0xe9, 0x39, 0x67, 0xe6, 0xd7, 0x4a, 0x8b, 0xea, 0xd4, 0xa5, 0x2d, 0x36, 0x97, 0x49, + 0x29, 0xe3, 0xc9, 0xb6, 0x7d, 0x11, 0x79, 0x85, 0x60, 0x3a, 0x82, 0xc6, 0xb1, 0x4c, 0xc3, 0xa1, + 0x78, 0x0b, 0x6e, 0xf0, 0x1b, 0x99, 0x43, 0xcb, 0xd7, 0x4a, 0x99, 0xca, 0xc7, 0x63, 0x4e, 0x53, + 0x0a, 0xfc, 0xf0, 0x3d, 0x98, 0x32, 0xe8, 0x37, 0xae, 0x12, 0x42, 0xe8, 0x2f, 0x57, 0xce, 0x13, + 0xd7, 0x03, 0x94, 0xe4, 0x0c, 0x66, 0x1a, 0x54, 0xb5, 0x9b, 0x67, 0xb1, 0x8e, 0x44, 0x2a, 0x47, + 0xef, 0xad, 0x3c, 0x15, 0xaf, 0x7c, 0x06, 0xae, 0x3f, 0xef, 0x52, 0xbb, 0xcf, 0x7b, 0xe2, 0xbf, + 0x90, 0xd7, 0x08, 0x66, 0x63, 0xa9, 0xfe, 0xfb, 0x72, 0xef, 0x41, 0x61, 0x97, 0xf2, 0x7e, 0x07, + 0xa5, 0x8e, 0x38, 0x49, 0x62, 0xc0, 0x74, 0x95, 0xed, 0x71, 0xd4, 0xf4, 0xb2, 0x3d, 0xf9, 0x02, + 0xd2, 0x3e, 0x12, 0x96, 0xf5, 0x0a, 0x05, 0x70, 0x37, 0x72, 0x0c, 0xb7, 0xf6, 0xcd, 0x1e, 0x4d, + 0x04, 0x86, 0x1f, 0x00, 0x6e, 0x51, 0xc7, 0xd5, 0x0c, 0xc6, 0x51, 0x4a, 0x84, 0x37, 0x6e, 0x85, + 0x34, 0x75, 0xa6, 0x20, 0xef, 0x10, 0x4c, 0x1f, 0xb1, 0x9b, 0x8a, 0x86, 0xbe, 0x00, 0x8c, 0xfe, + 0x11, 0xe0, 0xd0, 0x69, 0x7b, 0x44, 0xc8, 0xcb, 0x1e, 0x3e, 0xed, 0x1d, 0x8f, 0x2b, 0xf7, 0x55, + 0xe7, 0x3c, 0x38, 0x6d, 0xef, 0x99, 0xc8, 0x30, 0xed, 0x9f, 0x40, 0x72, 0xbd, 0xf7, 0xa1, 0x60, + 0xd3, 0x66, 0xd7, 0x76, 0xb4, 0x1e, 0xe5, 0xa7, 0xc4, 0x92, 0x4d, 0x4a, 0x53, 0x03, 0xb9, 0x1f, + 0x8b, 0xac, 0xc1, 0xec, 0x91, 0xd1, 0x1a, 0x2f, 0x2e, 0xf9, 0x2d, 0x05, 0x53, 0xbe, 0xd5, 0x61, + 0x40, 0xf8, 0x43, 0x7c, 0x8b, 0x86, 0xf9, 0x96, 0x42, 0x7e, 0xf0, 0x0f, 0x42, 0x71, 0xfb, 0x96, + 0x0f, 0x26, 0x5f, 0xf9, 0x7c, 0xcc, 0xfe, 0x0d, 0x92, 0x09, 0x83, 0x27, 0xb9, 0x6f, 0x51, 0x29, + 0x67, 0x86, 0x5f, 0xf1, 0x0a, 0xe4, 0xfc, 0x00, 0xc1, 0x80, 0xfd, 0x4b, 0xca, 0xfa, 0x42, 0x7f, + 0xb6, 0x97, 0xac, 0xc2, 0xc4, 0x65, 0xab, 0x20, 0x42, 0x2e, 0x92, 0x13, 0x2f, 0x42, 0xf1, 0xb0, + 0x2e, 0x4a, 0x5b, 0x72, 0xed, 0xf0, 0x40, 0x91, 0x9f, 0xd6, 0x47, 0xb0, 0x69, 0x55, 0x12, 0xb7, + 0x64, 0x8f, 0x4d, 0x27, 0x61, 0x62, 0xff, 0xf0, 0x58, 0x2c, 0xa4, 0x2a, 0xbf, 0x66, 0xe1, 0x06, + 0x3f, 0x60, 0xfc, 0x3d, 0x82, 0x4c, 0x88, 0xbf, 0xf0, 0xa3, 0xc4, 0x2e, 0x0c, 0x73, 0x6f, 0xf1, + 0x93, 0xab, 0x39, 0xf9, 0x9c, 0x41, 0xa6, 0x5f, 0xff, 0xf9, 0xd7, 0xbb, 0x54, 0x0e, 0x67, 0x42, + 0x1f, 0x14, 0xf8, 0x27, 0x04, 0xb9, 0x08, 0xc5, 0xe0, 0x4f, 0x13, 0x83, 0x8f, 0x62, 0xbf, 0xe2, + 0xc6, 0x55, 0xdd, 0x38, 0xaa, 0x05, 0x86, 0xea, 0xff, 0x04, 0x87, 0x50, 0x6d, 0x3a, 0xcc, 0x74, + 0x13, 0xad, 0xe2, 0x37, 0x08, 0x6e, 0x0e, 0xe8, 0x07, 0xaf, 0x27, 0x26, 0x89, 0x53, 0x55, 0x71, + 0xdc, 0x33, 0x25, 0x77, 0x18, 0x90, 0xdb, 0x78, 0xc6, 0x03, 0xf2, 0xd2, 0xdb, 0xe6, 0xcf, 0x38, + 0x9c, 0xf2, 0xea, 0xb7, 0xf8, 0x15, 0x82, 0x6c, 0x98, 0xde, 0x70, 0xf2, 0x0c, 0x46, 0xb0, 0x61, + 0x71, 0x21, 0xf0, 0x0a, 0x7d, 0x3f, 0x5d, 0xec, 0x35, 0x99, 0x67, 0x18, 0x66, 0x49, 0x78, 0x44, + 0x9b, 0x01, 0x7f, 0xfc, 0x80, 0x20, 0x1b, 0x26, 0xa6, 0x31, 0x20, 0x8c, 0xe0, 0xb1, 0xf1, 0x1b, + 0xb2, 0xc6, 0xc0, 0xdc, 0xad, 0xcc, 0xb3, 0x86, 0xf8, 0x20, 0x84, 0x58, 0x5f, 0x06, 0xe0, 0xde, + 0x20, 0x80, 0x0b, 0x3a, 0xc6, 0x95, 0xc4, 0x24, 0x43, 0xdc, 0x9d, 0xd4, 0x9b, 0x8f, 0x18, 0x9c, + 0x45, 0xf2, 0xc1, 0xa8, 0xf9, 0x6c, 0x76, 0xcc, 0x1e, 0xf5, 0xf6, 0xe5, 0x2d, 0x82, 0x6c, 0x98, + 0x28, 0xc7, 0x68, 0xd2, 0x08, 0x5e, 0xbd, 0xf2, 0xd6, 0xac, 0x8e, 0xde, 0x9a, 0x1f, 0x11, 0xe4, + 0xa3, 0x04, 0x8b, 0x93, 0xef, 0x64, 0x24, 0x23, 0x8f, 0x8f, 0xa8, 0xc4, 0x10, 0x11, 0xb2, 0x30, + 0xb2, 0x4f, 0x5d, 0x1e, 0xdc, 0xeb, 0xd5, 0x4b, 0xc8, 0xee, 0x52, 0xb7, 0xa6, 0x76, 0xea, 0xec, + 0x0b, 0x1f, 0x93, 0x20, 0x85, 0xa6, 0x76, 0x84, 0xde, 0xba, 0x10, 0x56, 0x06, 0x30, 0x66, 0x63, + 0x36, 0xbe, 0x96, 0x3c, 0x64, 0x49, 0x57, 0xc9, 0x5d, 0x96, 0x34, 0x00, 0x17, 0x4e, 0xdc, 0x0e, + 0x05, 0xe3, 0xc9, 0x1b, 0xef, 0x4b, 0xde, 0xf8, 0x37, 0x93, 0x3b, 0xb1, 0xe4, 0x3f, 0x23, 0xc0, + 0x32, 0x75, 0x98, 0x90, 0xda, 0x1d, 0xcd, 0x71, 0xbc, 0x5f, 0x2f, 0xb8, 0x14, 0x8b, 0x3f, 0x6c, + 0x12, 0x20, 0xb9, 0x3f, 0x86, 0x25, 0x27, 0xb8, 0x0d, 0x86, 0xee, 0x21, 0x59, 0xbb, 0x14, 0x9d, + 0x3b, 0xe4, 0xbc, 0x89, 0x56, 0x9f, 0xfc, 0x8e, 0x60, 0xa5, 0x69, 0x76, 0x92, 0xc6, 0xfe, 0x24, + 0xcb, 0x19, 0xb5, 0xee, 0x7d, 0x40, 0xd4, 0xd1, 0x57, 0x07, 0xdc, 0xa1, 0x6d, 0xea, 0xaa, 0xd1, + 0x16, 0x4c, 0xbb, 0x5d, 0x6e, 0x53, 0x83, 0x7d, 0x5e, 0x94, 0x7d, 0x95, 0x6a, 0x69, 0xce, 0xa5, + 0x3f, 0x35, 0x1f, 0xc7, 0x44, 0xbf, 0xa4, 0x96, 0x76, 0xfd, 0x80, 0x55, 0x86, 0x40, 0xe2, 0xea, + 0x7d, 0x8e, 0xe0, 0xb8, 0xf2, 0x47, 0x60, 0x71, 0xc2, 0x2c, 0x4e, 0x62, 0x16, 0x27, 0xc7, 0x95, + 0x67, 0x69, 0x96, 0xfe, 0xd1, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xda, 0x9b, 0x45, 0x8f, 0xe8, + 0x0e, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/runtimeconfig/v1beta1/resources.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/runtimeconfig/v1beta1/resources.pb.go index b907c97..157bd2c 100644 --- a/vendor/google.golang.org/genproto/googleapis/cloud/runtimeconfig/v1beta1/resources.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/cloud/runtimeconfig/v1beta1/resources.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/cloud/runtimeconfig/v1beta1/resources.proto -// DO NOT EDIT! /* Package runtimeconfig is a generated protocol buffer package. @@ -548,44 +547,45 @@ func init() { func init() { proto.RegisterFile("google/cloud/runtimeconfig/v1beta1/resources.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 615 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0x5d, 0x6f, 0xd3, 0x3c, - 0x14, 0xc7, 0x9b, 0x3e, 0x7d, 0xd9, 0x4e, 0xb6, 0x47, 0x93, 0x85, 0x46, 0xa8, 0xd0, 0xa8, 0x7a, - 0x81, 0x2a, 0x2e, 0x12, 0xda, 0x5d, 0xa1, 0x71, 0xd3, 0x97, 0xb0, 0x15, 0x4d, 0x30, 0xb9, 0xdd, - 0x90, 0xb8, 0x19, 0xae, 0xe3, 0x85, 0x48, 0xa9, 0x1d, 0x39, 0xce, 0x04, 0xdf, 0x86, 0x6b, 0x3e, - 0x01, 0x9f, 0x86, 0x2b, 0x3e, 0x08, 0xb2, 0xe3, 0x40, 0x0b, 0x13, 0x1b, 0xdc, 0xf9, 0xf8, 0xfc, - 0xcf, 0xef, 0xbc, 0xf8, 0x24, 0x30, 0x8c, 0x85, 0x88, 0x53, 0x16, 0xd0, 0x54, 0x14, 0x51, 0x20, - 0x0b, 0xae, 0x92, 0x15, 0xa3, 0x82, 0x5f, 0x25, 0x71, 0x70, 0x3d, 0x58, 0x32, 0x45, 0x06, 0x81, - 0x64, 0xb9, 0x28, 0x24, 0x65, 0xb9, 0x9f, 0x49, 0xa1, 0x04, 0xea, 0x95, 0x31, 0xbe, 0x89, 0xf1, - 0x37, 0x62, 0x7c, 0x1b, 0xd3, 0x79, 0x68, 0xb9, 0x24, 0x4b, 0x02, 0xc2, 0xb9, 0x50, 0x44, 0x25, - 0x82, 0x5b, 0x42, 0xe7, 0xc0, 0x7a, 0x8d, 0xb5, 0x2c, 0xae, 0x82, 0xa8, 0x90, 0x46, 0x60, 0xfd, - 0x8f, 0x7e, 0xf5, 0xeb, 0x0c, 0xb9, 0x22, 0xab, 0xcc, 0x0a, 0xee, 0x5b, 0x81, 0xcc, 0x68, 0x90, - 0x2b, 0xa2, 0x0a, 0x4b, 0xee, 0x85, 0xb0, 0x8b, 0xcb, 0x82, 0x26, 0xa6, 0x20, 0x84, 0xa0, 0xc1, - 0xc9, 0x8a, 0x79, 0x4e, 0xd7, 0xe9, 0x6f, 0x63, 0x73, 0x46, 0x5d, 0x70, 0x23, 0x96, 0x53, 0x99, - 0x64, 0x3a, 0xa7, 0x57, 0x37, 0xae, 0xf5, 0xab, 0xde, 0x57, 0x07, 0xb6, 0x2e, 0x88, 0x4c, 0xc8, - 0x32, 0x65, 0x37, 0x22, 0xf6, 0xa1, 0x79, 0x4d, 0xd2, 0x82, 0x99, 0xe0, 0x9d, 0x93, 0x1a, 0x2e, - 0x4d, 0x74, 0x0f, 0x1a, 0x8a, 0x7d, 0x50, 0x5e, 0x53, 0x6b, 0x4f, 0x6a, 0xd8, 0x58, 0xe8, 0x08, - 0xdc, 0x22, 0x8b, 0x88, 0x62, 0x97, 0xba, 0x32, 0xef, 0xbf, 0xae, 0xd3, 0x77, 0x87, 0x1d, 0xdf, - 0xce, 0xb1, 0xea, 0xd2, 0x5f, 0x54, 0x5d, 0x62, 0x28, 0xe5, 0xfa, 0x02, 0x1d, 0x43, 0x53, 0xb7, - 0xc8, 0xbc, 0x46, 0xd7, 0xe9, 0xff, 0x3f, 0x1c, 0xf8, 0xb7, 0x8f, 0xdf, 0xaf, 0x6a, 0x9f, 0xeb, - 0x40, 0x5c, 0xc6, 0x8f, 0x01, 0xb6, 0xa8, 0xe0, 0x8a, 0x71, 0x95, 0xf7, 0xbe, 0x38, 0xb0, 0x13, - 0xf2, 0x68, 0x22, 0x78, 0x94, 0xe8, 0x8e, 0xd1, 0x3b, 0x70, 0x29, 0x91, 0x51, 0xc2, 0x49, 0x9a, - 0xa8, 0x8f, 0xa6, 0x57, 0x77, 0xf8, 0xfc, 0x2e, 0xb9, 0xd6, 0x31, 0xfe, 0xe4, 0x27, 0xe3, 0xa4, - 0x86, 0xd7, 0x91, 0x9d, 0x67, 0xe0, 0xae, 0x79, 0xf5, 0x54, 0x33, 0xa2, 0xde, 0x57, 0x53, 0xd5, - 0x67, 0xb4, 0x0f, 0x2d, 0x5e, 0xac, 0x96, 0x4c, 0x9a, 0xb1, 0x36, 0xb1, 0xb5, 0xc6, 0x2e, 0x6c, - 0xd3, 0x2a, 0x45, 0xef, 0x5b, 0x1d, 0x5a, 0x6f, 0x48, 0xa2, 0x98, 0xbc, 0xf1, 0x65, 0x0e, 0xa1, - 0xad, 0x8b, 0x14, 0x85, 0x32, 0x10, 0x77, 0xf8, 0xe0, 0xb7, 0x39, 0x4f, 0xed, 0xb6, 0xe1, 0x4a, - 0x89, 0x5e, 0x42, 0xfb, 0x8a, 0x24, 0x69, 0x21, 0xab, 0xc7, 0x79, 0xfa, 0xb7, 0x9d, 0xe3, 0x0a, - 0xa0, 0x59, 0x79, 0x41, 0x29, 0xcb, 0x73, 0xf3, 0x62, 0xff, 0xc4, 0xb2, 0x00, 0xbd, 0x38, 0x54, - 0xb2, 0x1f, 0x8b, 0xd3, 0xbc, 0x7d, 0x71, 0x4a, 0xb9, 0x59, 0x1c, 0x04, 0x8d, 0x48, 0x70, 0xe6, - 0xb5, 0xba, 0x4e, 0x7f, 0x0b, 0x9b, 0x33, 0xea, 0x43, 0x93, 0x49, 0x29, 0xa4, 0xd7, 0x36, 0x28, - 0x54, 0xa1, 0x64, 0x46, 0xfd, 0xb9, 0xf9, 0x90, 0x70, 0x29, 0x78, 0x32, 0x83, 0xdd, 0x8d, 0x2d, - 0x42, 0x07, 0xd0, 0xb9, 0x18, 0xe1, 0xd9, 0x68, 0x7c, 0x1a, 0x5e, 0xce, 0x17, 0xa3, 0x45, 0x78, - 0x79, 0xfe, 0x6a, 0x7e, 0x16, 0x4e, 0x66, 0x2f, 0x66, 0xe1, 0x74, 0xaf, 0x86, 0x5c, 0x68, 0x9f, - 0x9f, 0x4d, 0x47, 0x8b, 0x70, 0xba, 0xe7, 0x68, 0x63, 0x1a, 0x9e, 0x86, 0xda, 0xa8, 0x8f, 0x3f, - 0x39, 0xf0, 0x98, 0x8a, 0xd5, 0x1d, 0xc6, 0x70, 0xe6, 0xbc, 0x7d, 0x6d, 0x55, 0xb1, 0x48, 0x09, - 0x8f, 0x7d, 0x21, 0xe3, 0x20, 0x66, 0xdc, 0xb4, 0x1a, 0x94, 0x2e, 0x92, 0x25, 0xf9, 0x9f, 0x7e, - 0x58, 0x47, 0x1b, 0xb7, 0x9f, 0xeb, 0xbd, 0xe3, 0x92, 0x38, 0x31, 0x79, 0x37, 0x7e, 0x0f, 0xfe, - 0xc5, 0x60, 0xac, 0x43, 0x96, 0x2d, 0x93, 0xe0, 0xf0, 0x7b, 0x00, 0x00, 0x00, 0xff, 0xff, 0x61, - 0xe4, 0x09, 0x63, 0x10, 0x05, 0x00, 0x00, + // 628 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0xdd, 0x6e, 0xd3, 0x30, + 0x14, 0xc7, 0x9b, 0xd2, 0x8f, 0xed, 0x64, 0x43, 0x93, 0x85, 0x46, 0xa8, 0xd0, 0xa8, 0x7a, 0x81, + 0x2a, 0x2e, 0x12, 0xda, 0x5d, 0xa1, 0x71, 0xd3, 0x8f, 0xb0, 0x15, 0x4d, 0x30, 0xa5, 0x5d, 0x91, + 0xd0, 0xa4, 0xe1, 0x3a, 0x6e, 0x88, 0x94, 0xda, 0x91, 0xe3, 0x4c, 0xf0, 0x4a, 0x3c, 0x01, 0x2f, + 0xc0, 0x0d, 0x0f, 0xc1, 0x15, 0x0f, 0x82, 0xec, 0x38, 0xd0, 0xc2, 0xc4, 0x06, 0x77, 0x3e, 0x3e, + 0xff, 0xf3, 0x3b, 0x1f, 0x3e, 0x09, 0xf4, 0x23, 0xce, 0xa3, 0x84, 0x7a, 0x24, 0xe1, 0x79, 0xe8, + 0x89, 0x9c, 0xc9, 0x78, 0x45, 0x09, 0x67, 0xcb, 0x38, 0xf2, 0xae, 0x7a, 0x0b, 0x2a, 0x71, 0xcf, + 0x13, 0x34, 0xe3, 0xb9, 0x20, 0x34, 0x73, 0x53, 0xc1, 0x25, 0x47, 0x9d, 0x22, 0xc6, 0xd5, 0x31, + 0xee, 0x46, 0x8c, 0x6b, 0x62, 0x5a, 0x0f, 0x0d, 0x17, 0xa7, 0xb1, 0x87, 0x19, 0xe3, 0x12, 0xcb, + 0x98, 0x33, 0x43, 0x68, 0x1d, 0x18, 0xaf, 0xb6, 0x16, 0xf9, 0xd2, 0x0b, 0x73, 0xa1, 0x05, 0xc6, + 0xff, 0xe8, 0x77, 0xbf, 0xca, 0x90, 0x49, 0xbc, 0x4a, 0x8d, 0xe0, 0xbe, 0x11, 0x88, 0x94, 0x78, + 0x99, 0xc4, 0x32, 0x37, 0xe4, 0x8e, 0x0f, 0xbb, 0x41, 0x51, 0xd0, 0x48, 0x17, 0x84, 0x10, 0xd4, + 0x18, 0x5e, 0x51, 0xc7, 0x6a, 0x5b, 0xdd, 0xed, 0x40, 0x9f, 0x51, 0x1b, 0xec, 0x90, 0x66, 0x44, + 0xc4, 0xa9, 0xca, 0xe9, 0x54, 0xb5, 0x6b, 0xfd, 0xaa, 0xf3, 0xcd, 0x82, 0xad, 0x39, 0x16, 0x31, + 0x5e, 0x24, 0xf4, 0x5a, 0xc4, 0x3e, 0xd4, 0xaf, 0x70, 0x92, 0x53, 0x1d, 0xbc, 0x73, 0x52, 0x09, + 0x0a, 0x13, 0xdd, 0x83, 0x9a, 0xa4, 0x1f, 0xa4, 0x53, 0x57, 0xda, 0x93, 0x4a, 0xa0, 0x2d, 0x74, + 0x04, 0x76, 0x9e, 0x86, 0x58, 0xd2, 0x4b, 0x55, 0x99, 0x73, 0xa7, 0x6d, 0x75, 0xed, 0x7e, 0xcb, + 0x35, 0x73, 0x2c, 0xbb, 0x74, 0x67, 0x65, 0x97, 0x01, 0x14, 0x72, 0x75, 0x81, 0x8e, 0xa1, 0xae, + 0x5a, 0xa4, 0x4e, 0xad, 0x6d, 0x75, 0xef, 0xf6, 0x7b, 0xee, 0xcd, 0xe3, 0x77, 0xcb, 0xda, 0xa7, + 0x2a, 0x30, 0x28, 0xe2, 0x87, 0x00, 0x5b, 0x84, 0x33, 0x49, 0x99, 0xcc, 0x3a, 0x9f, 0x2d, 0xd8, + 0xf1, 0x59, 0x38, 0xe2, 0x2c, 0x8c, 0x55, 0xc7, 0xe8, 0x1d, 0xd8, 0x04, 0x8b, 0x30, 0x66, 0x38, + 0x89, 0xe5, 0x47, 0xdd, 0xab, 0xdd, 0x7f, 0x7e, 0x9b, 0x5c, 0xeb, 0x18, 0x77, 0xf4, 0x8b, 0x71, + 0x52, 0x09, 0xd6, 0x91, 0xad, 0x67, 0x60, 0xaf, 0x79, 0xd5, 0x54, 0x53, 0x2c, 0xdf, 0x97, 0x53, + 0x55, 0x67, 0xb4, 0x0f, 0x0d, 0x96, 0xaf, 0x16, 0x54, 0xe8, 0xb1, 0xd6, 0x03, 0x63, 0x0d, 0x6d, + 0xd8, 0x26, 0x65, 0x8a, 0xce, 0xf7, 0x2a, 0x34, 0xde, 0xe0, 0x58, 0x52, 0x71, 0xed, 0xcb, 0x1c, + 0x42, 0x53, 0x15, 0xc9, 0x73, 0xa9, 0x21, 0x76, 0xff, 0xc1, 0x1f, 0x73, 0x1e, 0x9b, 0x6d, 0x0b, + 0x4a, 0x25, 0x7a, 0x09, 0xcd, 0x25, 0x8e, 0x93, 0x5c, 0x94, 0x8f, 0xf3, 0xf4, 0x5f, 0x3b, 0x0f, + 0x4a, 0x80, 0x62, 0x65, 0x39, 0x21, 0x34, 0xcb, 0xf4, 0x8b, 0xfd, 0x17, 0xcb, 0x00, 0xd4, 0xe2, + 0x10, 0x41, 0x7f, 0x2e, 0x4e, 0xfd, 0xe6, 0xc5, 0x29, 0xe4, 0x7a, 0x71, 0x10, 0xd4, 0x42, 0xce, + 0xa8, 0xd3, 0x68, 0x5b, 0xdd, 0xad, 0x40, 0x9f, 0x51, 0x17, 0xea, 0x54, 0x08, 0x2e, 0x9c, 0xa6, + 0x46, 0xa1, 0x12, 0x25, 0x52, 0xe2, 0x4e, 0xf5, 0x87, 0x14, 0x14, 0x82, 0x27, 0x13, 0xd8, 0xdd, + 0xd8, 0x22, 0x74, 0x00, 0xad, 0xf9, 0x20, 0x98, 0x0c, 0x86, 0xa7, 0xfe, 0xe5, 0x74, 0x36, 0x98, + 0xf9, 0x97, 0xe7, 0xaf, 0xa6, 0x67, 0xfe, 0x68, 0xf2, 0x62, 0xe2, 0x8f, 0xf7, 0x2a, 0xc8, 0x86, + 0xe6, 0xf9, 0xd9, 0x78, 0x30, 0xf3, 0xc7, 0x7b, 0x96, 0x32, 0xc6, 0xfe, 0xa9, 0xaf, 0x8c, 0xea, + 0xf0, 0x8b, 0x05, 0x8f, 0x09, 0x5f, 0xdd, 0x62, 0x0c, 0x67, 0xd6, 0xdb, 0xd7, 0x46, 0x15, 0xf1, + 0x04, 0xb3, 0xc8, 0xe5, 0x22, 0xf2, 0x22, 0xca, 0x74, 0xab, 0x5e, 0xe1, 0xc2, 0x69, 0x9c, 0xfd, + 0xed, 0x87, 0x75, 0xb4, 0x71, 0xfb, 0xa9, 0xda, 0x39, 0x2e, 0x88, 0x23, 0x9d, 0x77, 0xe3, 0xf7, + 0xe0, 0xce, 0x7b, 0x43, 0x15, 0xf2, 0xb5, 0x14, 0x5d, 0x68, 0xd1, 0xc5, 0x86, 0xe8, 0x62, 0x5e, + 0x70, 0x17, 0x0d, 0x5d, 0xc5, 0xe1, 0x8f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1a, 0xc9, 0x60, 0x90, + 0x35, 0x05, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/runtimeconfig/v1beta1/runtimeconfig.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/runtimeconfig/v1beta1/runtimeconfig.pb.go index dbdb674..2fb9f13 100644 --- a/vendor/google.golang.org/genproto/googleapis/cloud/runtimeconfig/v1beta1/runtimeconfig.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/cloud/runtimeconfig/v1beta1/runtimeconfig.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/cloud/runtimeconfig/v1beta1/runtimeconfig.proto -// DO NOT EDIT! package runtimeconfig @@ -1279,77 +1278,78 @@ func init() { } var fileDescriptor1 = []byte{ - // 1144 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x98, 0x5b, 0x6f, 0xdc, 0x44, - 0x14, 0xc7, 0x35, 0x69, 0x9b, 0x66, 0x4f, 0x2e, 0xa0, 0xc9, 0x45, 0x91, 0xdb, 0x8a, 0xc8, 0x45, - 0x51, 0x58, 0x55, 0x76, 0x93, 0x56, 0x69, 0x12, 0x28, 0x0f, 0x49, 0x51, 0x08, 0x17, 0xb5, 0x32, - 0x21, 0x95, 0x78, 0x59, 0x4d, 0x36, 0x13, 0xc7, 0xb0, 0x3b, 0x36, 0xf6, 0x38, 0x81, 0xa2, 0xbc, - 0xc0, 0x1b, 0x08, 0x09, 0x89, 0x87, 0xf2, 0x84, 0x10, 0x12, 0x20, 0x21, 0x84, 0x78, 0xe2, 0x05, - 0xd1, 0x2f, 0x81, 0xc4, 0x27, 0xe0, 0x83, 0x20, 0xcf, 0xc5, 0x6b, 0x6f, 0xf6, 0x32, 0x0e, 0xe1, - 0x2d, 0x39, 0x9e, 0x73, 0xce, 0x6f, 0xce, 0x9c, 0x99, 0xff, 0xd1, 0xc2, 0xaa, 0x1f, 0x86, 0x7e, - 0x8b, 0xba, 0xcd, 0x56, 0x98, 0x1e, 0xb8, 0x71, 0xca, 0x78, 0xd0, 0xa6, 0xcd, 0x90, 0x1d, 0x06, - 0xbe, 0x7b, 0xbc, 0xbc, 0x4f, 0x39, 0x59, 0x2e, 0x5b, 0x9d, 0x28, 0x0e, 0x79, 0x88, 0x6d, 0xe9, - 0xe7, 0x08, 0x3f, 0xa7, 0xbc, 0x42, 0xf9, 0x59, 0xd7, 0x55, 0x6c, 0x12, 0x05, 0x2e, 0x61, 0x2c, - 0xe4, 0x84, 0x07, 0x21, 0x4b, 0x64, 0x04, 0x6b, 0xc5, 0x24, 0x33, 0x4d, 0xc2, 0x34, 0x6e, 0x52, - 0xed, 0x73, 0x53, 0xf9, 0xb4, 0x42, 0xe6, 0xc7, 0x29, 0x63, 0x01, 0xf3, 0xdd, 0x30, 0xa2, 0x71, - 0x29, 0xf0, 0x35, 0xb5, 0x48, 0xfc, 0xb7, 0x9f, 0x1e, 0xba, 0xb4, 0x1d, 0xf1, 0x8f, 0xd5, 0xc7, - 0x17, 0xba, 0x3f, 0x66, 0x59, 0x13, 0x4e, 0xda, 0x91, 0x5c, 0x60, 0x1f, 0x01, 0x7e, 0x2b, 0x48, - 0xf8, 0x96, 0x00, 0x49, 0x3c, 0xfa, 0x61, 0x4a, 0x13, 0x8e, 0xe7, 0x60, 0x34, 0x22, 0x31, 0x65, - 0x7c, 0x1e, 0x2d, 0xa0, 0xa5, 0x9a, 0xa7, 0xfe, 0xc3, 0xd7, 0xa0, 0x16, 0x11, 0x9f, 0x36, 0x92, - 0xe0, 0x09, 0x9d, 0x1f, 0x59, 0x40, 0x4b, 0x57, 0xbc, 0xb1, 0xcc, 0xf0, 0x4e, 0xf0, 0x84, 0xe2, - 0x1b, 0x00, 0xe2, 0x23, 0x0f, 0x3f, 0xa0, 0x6c, 0xfe, 0x92, 0x70, 0x14, 0xcb, 0x77, 0x33, 0x83, - 0xfd, 0x39, 0x82, 0xe9, 0x52, 0xaa, 0x24, 0x0a, 0x59, 0x42, 0xf1, 0x9b, 0x70, 0x55, 0x96, 0x21, - 0x99, 0x47, 0x0b, 0x97, 0x96, 0xc6, 0x57, 0x96, 0x9d, 0xe1, 0xc5, 0x76, 0x3c, 0x69, 0x95, 0xc1, - 0x3c, 0x1d, 0x01, 0x2f, 0xc2, 0x73, 0x8c, 0x7e, 0xc4, 0x1b, 0x05, 0x90, 0x11, 0x01, 0x32, 0x99, - 0x99, 0x1f, 0xe5, 0x30, 0x8b, 0xf0, 0xfc, 0x36, 0x55, 0x28, 0x7a, 0xd3, 0x18, 0x2e, 0x33, 0xd2, - 0xa6, 0xca, 0x41, 0xfc, 0x6d, 0x3f, 0x45, 0x30, 0xbd, 0x15, 0x53, 0xc2, 0x69, 0x79, 0x6d, 0xbf, - 0x02, 0xed, 0xc0, 0xa8, 0x44, 0x11, 0x51, 0xce, 0xb5, 0x17, 0x15, 0x20, 0x2b, 0x67, 0x2c, 0xb3, - 0x35, 0x82, 0x03, 0x5d, 0x4e, 0x65, 0xd9, 0x39, 0xb0, 0x39, 0x4c, 0xbf, 0x1b, 0x1d, 0x9c, 0x01, - 0xd3, 0x9b, 0x40, 0x9d, 0x4d, 0x5c, 0x20, 0x94, 0xfd, 0x12, 0x4c, 0x3f, 0xa0, 0x2d, 0x6a, 0x90, - 0xd5, 0xfe, 0x09, 0xc1, 0x4c, 0x76, 0xde, 0x7b, 0x24, 0x0e, 0xc8, 0x7e, 0x8b, 0x0e, 0x6d, 0xae, - 0x39, 0x18, 0x3d, 0x0c, 0x5a, 0x9c, 0xc6, 0xea, 0x04, 0xd4, 0x7f, 0xe5, 0xa6, 0xbb, 0x34, 0xb0, - 0xe9, 0x2e, 0x77, 0x35, 0x1d, 0xbe, 0x09, 0x93, 0x31, 0xe5, 0x69, 0xcc, 0x1a, 0xc7, 0xa4, 0x95, - 0xd2, 0x64, 0xfe, 0xca, 0x02, 0x5a, 0x1a, 0xf3, 0x26, 0xa4, 0x71, 0x4f, 0xd8, 0xec, 0x2f, 0x10, - 0xcc, 0x76, 0x91, 0xaa, 0xde, 0x7c, 0x03, 0x6a, 0xc7, 0xda, 0xa8, 0xba, 0xf3, 0x96, 0x49, 0xf1, - 0x74, 0x24, 0xaf, 0xe3, 0x6e, 0xdc, 0x9a, 0x14, 0x66, 0x1e, 0x13, 0xde, 0x3c, 0xca, 0x63, 0x0c, - 0x38, 0xd9, 0x75, 0x00, 0x46, 0x4f, 0x68, 0xdc, 0xe0, 0x47, 0x44, 0xee, 0x7e, 0x7c, 0xc5, 0xd2, - 0x80, 0xfa, 0xce, 0x3b, 0xbb, 0xfa, 0xce, 0x7b, 0x35, 0xb1, 0x7a, 0xf7, 0x88, 0x30, 0x7b, 0x09, - 0xf0, 0x36, 0xe5, 0x06, 0x49, 0xec, 0x6f, 0x10, 0xcc, 0xca, 0x3b, 0xd0, 0xbd, 0xba, 0xdf, 0x49, - 0xbe, 0x0e, 0x63, 0x7a, 0xdf, 0xaa, 0xe5, 0xaa, 0x55, 0x2d, 0xf7, 0x1e, 0x76, 0x09, 0x52, 0x98, - 0x95, 0x97, 0xc0, 0xa4, 0x58, 0x17, 0x46, 0x65, 0xef, 0xc0, 0xac, 0xbc, 0x05, 0x26, 0x69, 0xaf, - 0x43, 0x2d, 0xa6, 0xcd, 0x34, 0x4e, 0x82, 0x63, 0x99, 0x77, 0xcc, 0xeb, 0x18, 0xf4, 0xfb, 0xfb, - 0x98, 0x04, 0x9c, 0xc6, 0xff, 0xeb, 0xfb, 0xfb, 0x99, 0x7a, 0x7f, 0xf3, 0x54, 0xaa, 0xc7, 0x1f, - 0xc0, 0xd5, 0x13, 0x69, 0x52, 0x1d, 0x5e, 0x37, 0xa9, 0x8a, 0x8c, 0xe2, 0x69, 0xd7, 0x8a, 0x0f, - 0xaf, 0xf2, 0x1e, 0xd0, 0x74, 0x5f, 0xe5, 0x0f, 0x6f, 0x79, 0x6d, 0xbf, 0xca, 0x6c, 0xc2, 0xa8, - 0x44, 0x51, 0x47, 0x5b, 0x65, 0x13, 0xca, 0x73, 0x58, 0xb3, 0xe5, 0x6f, 0xdf, 0x50, 0xfa, 0x95, - 0xbf, 0x67, 0x60, 0xa6, 0xf4, 0x80, 0xbe, 0x4d, 0x18, 0xf1, 0x69, 0x8c, 0x7f, 0x41, 0x30, 0x5e, - 0x10, 0x41, 0xbc, 0x6a, 0x82, 0x79, 0x56, 0xa0, 0xad, 0x7b, 0x95, 0xfd, 0xe4, 0x69, 0xdb, 0xb7, - 0x3e, 0xfd, 0xeb, 0x9f, 0xaf, 0x47, 0x16, 0xf1, 0x8b, 0xf9, 0xd0, 0xf1, 0x89, 0xac, 0xe0, 0xfd, - 0x28, 0x0e, 0xdf, 0xa7, 0x4d, 0x9e, 0xb8, 0xf5, 0x53, 0x57, 0xcb, 0xe9, 0xf7, 0x08, 0x6a, 0xb9, - 0x4e, 0xe2, 0xbb, 0x26, 0x49, 0xbb, 0x65, 0xd5, 0xaa, 0xae, 0x36, 0xbd, 0x20, 0xb3, 0xb2, 0x16, - 0x10, 0x35, 0xa1, 0x5b, 0x3f, 0xc5, 0xbf, 0x21, 0x98, 0x28, 0x6a, 0x34, 0x36, 0x2a, 0x4e, 0x0f, - 0x55, 0x3f, 0x0f, 0xea, 0x5d, 0x81, 0xea, 0xd8, 0x46, 0xf5, 0xdc, 0xd0, 0xda, 0x9e, 0x21, 0x17, - 0xd5, 0xdb, 0x0c, 0xb9, 0x87, 0xde, 0xff, 0x07, 0x64, 0xcb, 0xa8, 0xba, 0x39, 0xf2, 0x97, 0x08, - 0x26, 0x8a, 0xd2, 0x6f, 0x86, 0xdc, 0x63, 0x58, 0xb0, 0xe6, 0xce, 0x08, 0xd4, 0x6b, 0xd9, 0xc4, - 0xaa, 0x4f, 0xbd, 0x6e, 0x76, 0xea, 0xcf, 0x10, 0x4c, 0x96, 0x44, 0x1b, 0xaf, 0x99, 0xde, 0x89, - 0xee, 0x89, 0xc4, 0x5a, 0x3f, 0x87, 0xa7, 0xba, 0x4f, 0x6b, 0x02, 0x7a, 0x05, 0xdf, 0x1e, 0x70, - 0xfe, 0x05, 0x6c, 0xb7, 0x33, 0x0f, 0xfc, 0x8a, 0x60, 0xbc, 0xa0, 0xc0, 0x66, 0x4f, 0xc1, 0x59, - 0xc9, 0xb6, 0x2a, 0x89, 0x98, 0xbd, 0x2e, 0x78, 0xef, 0xe0, 0x65, 0x83, 0x22, 0x77, 0x60, 0xdd, - 0x7a, 0xfd, 0x14, 0xff, 0x81, 0x60, 0xb2, 0x34, 0x99, 0x98, 0x55, 0xbc, 0xd7, 0x30, 0x53, 0x11, - 0x7a, 0x53, 0x40, 0xbf, 0x62, 0xdf, 0xab, 0x0c, 0xbd, 0x71, 0x92, 0x65, 0xdf, 0x40, 0x75, 0xfc, - 0x27, 0x82, 0xa9, 0xf2, 0x14, 0x83, 0xd7, 0xcd, 0xdf, 0x89, 0x8b, 0xe1, 0xaf, 0xdc, 0x24, 0x1b, - 0x9d, 0x49, 0xe8, 0x19, 0x82, 0xa9, 0xf2, 0xac, 0x63, 0xc6, 0xdf, 0x73, 0x3e, 0xaa, 0xc8, 0xbf, - 0x25, 0xf8, 0xef, 0x5b, 0xd5, 0x9b, 0xa6, 0xb0, 0x81, 0x6f, 0x11, 0x4c, 0x95, 0xa7, 0x26, 0xb3, - 0x0d, 0xf4, 0x9c, 0xb4, 0xfa, 0x3e, 0x22, 0xaa, 0xbf, 0xeb, 0xe7, 0xe8, 0xef, 0xdf, 0x95, 0x36, - 0xab, 0x01, 0xc9, 0x5c, 0x9b, 0xcb, 0xc3, 0x9b, 0xb9, 0x36, 0x77, 0x4d, 0x62, 0xf6, 0xaa, 0x60, - 0xbf, 0x8d, 0x1d, 0xc3, 0x36, 0xd1, 0xb3, 0xd7, 0x0f, 0x52, 0xa5, 0x65, 0x38, 0x63, 0x95, 0x2e, - 0x4d, 0x31, 0x56, 0x85, 0x79, 0xa9, 0x17, 0x67, 0xff, 0x1a, 0x2b, 0xc8, 0xec, 0xc9, 0xfe, 0x31, - 0x17, 0x6a, 0x85, 0x5a, 0x41, 0xa8, 0xcb, 0xb4, 0x37, 0xb4, 0x63, 0xe1, 0x97, 0x11, 0xe7, 0xa1, - 0xfe, 0x65, 0xc4, 0x7e, 0x55, 0x00, 0xae, 0xd9, 0x15, 0x0b, 0xb9, 0xa1, 0x07, 0xc1, 0xa7, 0xb9, - 0xd6, 0x55, 0x01, 0xed, 0x31, 0x1c, 0xf6, 0x6d, 0x53, 0x55, 0xc2, 0x7a, 0xc5, 0x12, 0x6e, 0x7e, - 0x87, 0x60, 0xb1, 0x19, 0xb6, 0x0d, 0x70, 0x1e, 0xa1, 0xf7, 0x1e, 0xaa, 0x55, 0x7e, 0xd8, 0x22, - 0xcc, 0x77, 0xc2, 0xd8, 0x77, 0x7d, 0xca, 0x04, 0x89, 0x2b, 0x3f, 0x91, 0x28, 0x48, 0x06, 0xfd, - 0x22, 0xf5, 0x72, 0xc9, 0xfa, 0xf3, 0x88, 0xbd, 0x2d, 0x23, 0x6e, 0x89, 0xbc, 0xa5, 0xb1, 0xc2, - 0xd9, 0x5b, 0xde, 0xcc, 0x5c, 0xf6, 0x47, 0x45, 0x82, 0x3b, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, - 0xdb, 0xa7, 0xdc, 0xe8, 0x6b, 0x13, 0x00, 0x00, + // 1158 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x98, 0x4b, 0x6f, 0xdd, 0x44, + 0x14, 0xc7, 0x35, 0x49, 0x9b, 0xe6, 0x9e, 0x3c, 0x40, 0x93, 0x87, 0x22, 0xb7, 0x15, 0x91, 0x8b, + 0xa2, 0x70, 0x55, 0xd9, 0x4d, 0x5a, 0xa5, 0x49, 0xa0, 0x2c, 0x92, 0xa2, 0x10, 0x1e, 0x6a, 0x65, + 0x42, 0x2a, 0xa1, 0x48, 0xd1, 0xe4, 0x66, 0xe2, 0x18, 0x6e, 0xc6, 0xc6, 0x1e, 0x27, 0x50, 0x94, + 0x0d, 0xec, 0x40, 0x48, 0x48, 0x2c, 0xca, 0x8a, 0x05, 0x12, 0x20, 0x21, 0x84, 0x58, 0xb1, 0x41, + 0x74, 0xc7, 0x86, 0x2d, 0x12, 0x9f, 0x80, 0x0f, 0x82, 0x3c, 0x0f, 0x5f, 0xfb, 0xe6, 0x3e, 0xc6, + 0x21, 0xdd, 0x25, 0xe3, 0xf3, 0xf8, 0xcd, 0x99, 0x33, 0xf3, 0x3f, 0xba, 0xb0, 0xe4, 0x87, 0xa1, + 0xdf, 0xa4, 0x6e, 0xa3, 0x19, 0xa6, 0xfb, 0x6e, 0x9c, 0x32, 0x1e, 0x1c, 0xd1, 0x46, 0xc8, 0x0e, + 0x02, 0xdf, 0x3d, 0x5e, 0xd8, 0xa3, 0x9c, 0x2c, 0x94, 0x57, 0x9d, 0x28, 0x0e, 0x79, 0x88, 0x6d, + 0xe9, 0xe7, 0x08, 0x3f, 0xa7, 0x6c, 0xa1, 0xfc, 0xac, 0x6b, 0x2a, 0x36, 0x89, 0x02, 0x97, 0x30, + 0x16, 0x72, 0xc2, 0x83, 0x90, 0x25, 0x32, 0x82, 0xb5, 0x68, 0x92, 0x99, 0x26, 0x61, 0x1a, 0x37, + 0xa8, 0xf6, 0xb9, 0xa1, 0x7c, 0x9a, 0x21, 0xf3, 0xe3, 0x94, 0xb1, 0x80, 0xf9, 0x6e, 0x18, 0xd1, + 0xb8, 0x14, 0xf8, 0xaa, 0x32, 0x12, 0xff, 0xed, 0xa5, 0x07, 0x2e, 0x3d, 0x8a, 0xf8, 0xc7, 0xea, + 0xe3, 0x0b, 0xed, 0x1f, 0xb3, 0xac, 0x09, 0x27, 0x47, 0x91, 0x34, 0xb0, 0x0f, 0x01, 0xbf, 0x15, + 0x24, 0x7c, 0x5d, 0x80, 0x24, 0x1e, 0xfd, 0x30, 0xa5, 0x09, 0xc7, 0xd3, 0x30, 0x14, 0x91, 0x98, + 0x32, 0x3e, 0x83, 0x66, 0xd1, 0x7c, 0xcd, 0x53, 0xff, 0xe1, 0xab, 0x50, 0x8b, 0x88, 0x4f, 0x77, + 0x93, 0xe0, 0x31, 0x9d, 0x19, 0x98, 0x45, 0xf3, 0x97, 0xbd, 0xe1, 0x6c, 0xe1, 0x9d, 0xe0, 0x31, + 0xc5, 0xd7, 0x01, 0xc4, 0x47, 0x1e, 0x7e, 0x40, 0xd9, 0xcc, 0xa0, 0x70, 0x14, 0xe6, 0x5b, 0xd9, + 0x82, 0xfd, 0x39, 0x82, 0x89, 0x52, 0xaa, 0x24, 0x0a, 0x59, 0x42, 0xf1, 0x9b, 0x70, 0x45, 0x96, + 0x21, 0x99, 0x41, 0xb3, 0x83, 0xf3, 0x23, 0x8b, 0x0b, 0x4e, 0xff, 0x62, 0x3b, 0x9e, 0x5c, 0x95, + 0xc1, 0x3c, 0x1d, 0x01, 0xcf, 0xc1, 0x73, 0x8c, 0x7e, 0xc4, 0x77, 0x0b, 0x20, 0x03, 0x02, 0x64, + 0x2c, 0x5b, 0x7e, 0x98, 0xc3, 0xcc, 0xc1, 0xf3, 0x1b, 0x54, 0xa1, 0xe8, 0x4d, 0x63, 0xb8, 0xc4, + 0xc8, 0x11, 0x55, 0x0e, 0xe2, 0x6f, 0xfb, 0x09, 0x82, 0x89, 0xf5, 0x98, 0x12, 0x4e, 0xcb, 0xb6, + 0xdd, 0x0a, 0xb4, 0x09, 0x43, 0x12, 0x45, 0x44, 0x39, 0xd7, 0x5e, 0x54, 0x80, 0xac, 0x9c, 0xb1, + 0xcc, 0xb6, 0x1b, 0xec, 0xeb, 0x72, 0xaa, 0x95, 0xcd, 0x7d, 0x9b, 0xc3, 0xc4, 0xbb, 0xd1, 0xfe, + 0x19, 0x30, 0xbd, 0x09, 0xd4, 0xda, 0xc4, 0x05, 0x42, 0xd9, 0x2f, 0xc1, 0xc4, 0x7d, 0xda, 0xa4, + 0x06, 0x59, 0xed, 0x1f, 0x11, 0x4c, 0x66, 0xe7, 0xbd, 0x4d, 0xe2, 0x80, 0xec, 0x35, 0x69, 0xdf, + 0xe6, 0x9a, 0x86, 0xa1, 0x83, 0xa0, 0xc9, 0x69, 0xac, 0x4e, 0x40, 0xfd, 0x57, 0x6e, 0xba, 0xc1, + 0x9e, 0x4d, 0x77, 0xa9, 0xad, 0xe9, 0xf0, 0x0d, 0x18, 0x8b, 0x29, 0x4f, 0x63, 0xb6, 0x7b, 0x4c, + 0x9a, 0x29, 0x4d, 0x66, 0x2e, 0xcf, 0xa2, 0xf9, 0x61, 0x6f, 0x54, 0x2e, 0x6e, 0x8b, 0x35, 0xfb, + 0x0b, 0x04, 0x53, 0x6d, 0xa4, 0xaa, 0x37, 0xdf, 0x80, 0xda, 0xb1, 0x5e, 0x54, 0xdd, 0x79, 0xd3, + 0xa4, 0x78, 0x3a, 0x92, 0xd7, 0x72, 0x37, 0x6e, 0x4d, 0x0a, 0x93, 0x8f, 0x08, 0x6f, 0x1c, 0xe6, + 0x31, 0x7a, 0x9c, 0xec, 0x0a, 0x00, 0xa3, 0x27, 0x34, 0xde, 0xe5, 0x87, 0x44, 0xee, 0x7e, 0x64, + 0xd1, 0xd2, 0x80, 0xfa, 0xce, 0x3b, 0x5b, 0xfa, 0xce, 0x7b, 0x35, 0x61, 0xbd, 0x75, 0x48, 0x98, + 0x3d, 0x0f, 0x78, 0x83, 0x72, 0x83, 0x24, 0xf6, 0x37, 0x08, 0xa6, 0xe4, 0x1d, 0x68, 0xb7, 0xee, + 0x76, 0x92, 0xaf, 0xc3, 0xb0, 0xde, 0xb7, 0x6a, 0xb9, 0x6a, 0x55, 0xcb, 0xbd, 0xfb, 0x5d, 0x82, + 0x14, 0xa6, 0xe4, 0x25, 0x30, 0x29, 0xd6, 0x85, 0x51, 0xd9, 0x9b, 0x30, 0x25, 0x6f, 0x81, 0x49, + 0xda, 0x6b, 0x50, 0x8b, 0x69, 0x23, 0x8d, 0x93, 0xe0, 0x58, 0xe6, 0x1d, 0xf6, 0x5a, 0x0b, 0xfa, + 0xfd, 0x7d, 0x44, 0x02, 0x4e, 0xe3, 0x67, 0xfa, 0xfe, 0x7e, 0xa6, 0xde, 0xdf, 0x3c, 0x95, 0xea, + 0xf1, 0xfb, 0x70, 0xe5, 0x44, 0x2e, 0xa9, 0x0e, 0xaf, 0x9b, 0x54, 0x45, 0x46, 0xf1, 0xb4, 0x6b, + 0xc5, 0x87, 0x57, 0x79, 0xf7, 0x68, 0xba, 0xaf, 0xf2, 0x87, 0xb7, 0x6c, 0xdb, 0xad, 0x32, 0x6b, + 0x30, 0x24, 0x51, 0xd4, 0xd1, 0x56, 0xd9, 0x84, 0xf2, 0xec, 0xd7, 0x6c, 0xf9, 0xdb, 0xd7, 0x97, + 0x7e, 0xf1, 0x9f, 0x49, 0x98, 0x2c, 0x3d, 0xa0, 0x6f, 0x13, 0x46, 0x7c, 0x1a, 0xe3, 0x9f, 0x11, + 0x8c, 0x14, 0x44, 0x10, 0x2f, 0x99, 0x60, 0x9e, 0x15, 0x68, 0xeb, 0x6e, 0x65, 0x3f, 0x79, 0xda, + 0xf6, 0xcd, 0x4f, 0xff, 0xfe, 0xf7, 0xeb, 0x81, 0x39, 0xfc, 0x62, 0x3e, 0x74, 0x7c, 0x22, 0x2b, + 0x78, 0x2f, 0x8a, 0xc3, 0xf7, 0x69, 0x83, 0x27, 0x6e, 0xfd, 0xd4, 0xd5, 0x72, 0xfa, 0x1d, 0x82, + 0x5a, 0xae, 0x93, 0xf8, 0x8e, 0x49, 0xd2, 0x76, 0x59, 0xb5, 0xaa, 0xab, 0x4d, 0x27, 0xc8, 0xac, + 0xac, 0x05, 0x44, 0x4d, 0xe8, 0xd6, 0x4f, 0xf1, 0xaf, 0x08, 0x46, 0x8b, 0x1a, 0x8d, 0x8d, 0x8a, + 0xd3, 0x41, 0xd5, 0xcf, 0x83, 0x7a, 0x47, 0xa0, 0x3a, 0xb6, 0x51, 0x3d, 0x57, 0xb5, 0xb6, 0x67, + 0xc8, 0x45, 0xf5, 0x36, 0x43, 0xee, 0xa0, 0xf7, 0xff, 0x03, 0xd9, 0x32, 0xaa, 0x6e, 0x8e, 0xfc, + 0x25, 0x82, 0xd1, 0xa2, 0xf4, 0x9b, 0x21, 0x77, 0x18, 0x16, 0xac, 0xe9, 0x33, 0x02, 0xf5, 0x5a, + 0x36, 0xb1, 0xea, 0x53, 0xaf, 0x9b, 0x9d, 0xfa, 0x53, 0x04, 0x63, 0x25, 0xd1, 0xc6, 0xcb, 0xa6, + 0x77, 0xa2, 0x7d, 0x22, 0xb1, 0x56, 0xce, 0xe1, 0xa9, 0xee, 0xd3, 0xb2, 0x80, 0x5e, 0xc4, 0xb7, + 0x7a, 0x9c, 0x7f, 0x01, 0xdb, 0x6d, 0xcd, 0x03, 0xbf, 0x20, 0x18, 0x29, 0x28, 0xb0, 0xd9, 0x53, + 0x70, 0x56, 0xb2, 0xad, 0x4a, 0x22, 0x66, 0xaf, 0x08, 0xde, 0xdb, 0x78, 0xc1, 0xa0, 0xc8, 0x2d, + 0x58, 0xb7, 0x5e, 0x3f, 0xc5, 0xbf, 0x23, 0x18, 0x2b, 0x4d, 0x26, 0x66, 0x15, 0xef, 0x34, 0xcc, + 0x54, 0x84, 0x5e, 0x13, 0xd0, 0xaf, 0xd8, 0x77, 0x2b, 0x43, 0xaf, 0x9e, 0x64, 0xd9, 0x57, 0x51, + 0x1d, 0xff, 0x81, 0x60, 0xbc, 0x3c, 0xc5, 0xe0, 0x15, 0xf3, 0x77, 0xe2, 0x62, 0xf8, 0x2b, 0x37, + 0xc9, 0x6a, 0x6b, 0x12, 0x7a, 0x8a, 0x60, 0xbc, 0x3c, 0xeb, 0x98, 0xf1, 0x77, 0x9c, 0x8f, 0x2a, + 0xf2, 0xaf, 0x0b, 0xfe, 0x7b, 0x56, 0xf5, 0xa6, 0x29, 0x6c, 0xe0, 0x5b, 0x04, 0xe3, 0xe5, 0xa9, + 0xc9, 0x6c, 0x03, 0x1d, 0x27, 0xad, 0xae, 0x8f, 0x88, 0xea, 0xef, 0xfa, 0x39, 0xfa, 0xfb, 0x37, + 0xa5, 0xcd, 0x6a, 0x40, 0x32, 0xd7, 0xe6, 0xf2, 0xf0, 0x66, 0xae, 0xcd, 0x6d, 0x93, 0x98, 0xbd, + 0x24, 0xd8, 0x6f, 0x61, 0xc7, 0xb0, 0x4d, 0xf4, 0xec, 0xf5, 0xbd, 0x54, 0x69, 0x19, 0xce, 0x58, + 0xa5, 0x4b, 0x53, 0x8c, 0x55, 0x61, 0x5e, 0xea, 0xc4, 0xd9, 0xbd, 0xc6, 0x0a, 0x32, 0x7b, 0xb2, + 0x7f, 0xc8, 0x85, 0x5a, 0xa1, 0x56, 0x10, 0xea, 0x32, 0xed, 0x75, 0xed, 0x58, 0xf8, 0x65, 0xc4, + 0x79, 0xa0, 0x7f, 0x19, 0xb1, 0x5f, 0x15, 0x80, 0xcb, 0x76, 0xc5, 0x42, 0xae, 0xea, 0x41, 0xf0, + 0x49, 0xae, 0x75, 0x55, 0x40, 0x3b, 0x0c, 0x87, 0x5d, 0xdb, 0x54, 0x95, 0xb0, 0x5e, 0xb1, 0x84, + 0x6b, 0x7f, 0x22, 0x98, 0x6b, 0x84, 0x47, 0x06, 0x38, 0x0f, 0xd1, 0x7b, 0x0f, 0x94, 0x95, 0x1f, + 0x36, 0x09, 0xf3, 0x9d, 0x30, 0xf6, 0x5d, 0x9f, 0x32, 0x41, 0xe2, 0xca, 0x4f, 0x24, 0x0a, 0x92, + 0x5e, 0xbf, 0x48, 0xbd, 0x5c, 0x5a, 0xfd, 0x69, 0xc0, 0xde, 0x90, 0x11, 0xd7, 0x45, 0xde, 0xd2, + 0x58, 0xe1, 0x6c, 0x2f, 0xac, 0x65, 0x2e, 0x7f, 0x69, 0xa3, 0x1d, 0x61, 0xb4, 0x53, 0x32, 0xda, + 0xd9, 0x96, 0x71, 0xf7, 0x86, 0x04, 0xc5, 0xed, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x9f, 0x36, + 0x17, 0x5a, 0x90, 0x13, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/speech/v1/cloud_speech.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/speech/v1/cloud_speech.pb.go index 51de3f2..31c6c4e 100644 --- a/vendor/google.golang.org/genproto/googleapis/cloud/speech/v1/cloud_speech.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/cloud/speech/v1/cloud_speech.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/cloud/speech/v1/cloud_speech.proto -// DO NOT EDIT! /* Package speech is a generated protocol buffer package. @@ -23,6 +22,7 @@ It has these top-level messages: StreamingRecognitionResult SpeechRecognitionResult SpeechRecognitionAlternative + WordInfo */ package speech @@ -32,7 +32,7 @@ import math "math" import _ "google.golang.org/genproto/googleapis/api/annotations" import google_longrunning "google.golang.org/genproto/googleapis/longrunning" import _ "github.com/golang/protobuf/ptypes/any" -import _ "github.com/golang/protobuf/ptypes/duration" +import google_protobuf3 "github.com/golang/protobuf/ptypes/duration" import google_protobuf4 "github.com/golang/protobuf/ptypes/timestamp" import google_rpc "google.golang.org/genproto/googleapis/rpc/status" @@ -53,9 +53,9 @@ var _ = math.Inf const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package // Audio encoding of the data sent in the audio message. All encodings support -// only 1 channel (mono) audio. Only `FLAC` includes a header that describes -// the bytes of audio that follow the header. The other encodings are raw -// audio bytes with no header. +// only 1 channel (mono) audio. Only `FLAC` and `WAV` include a header that +// describes the bytes of audio that follow the header. The other encodings +// are raw audio bytes with no header. // // For best results, the audio source should be captured and transmitted using // a lossless encoding (`FLAC` or `LINEAR16`). Recognition accuracy may be @@ -65,7 +65,7 @@ const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package type RecognitionConfig_AudioEncoding int32 const ( - // Not specified. Will return result [google.rpc.Code.INVALID_ARGUMENT][]. + // Not specified. Will return result [google.rpc.Code.INVALID_ARGUMENT][google.rpc.Code.INVALID_ARGUMENT]. RecognitionConfig_ENCODING_UNSPECIFIED RecognitionConfig_AudioEncoding = 0 // Uncompressed 16-bit signed little-endian samples (Linear PCM). RecognitionConfig_LINEAR16 RecognitionConfig_AudioEncoding = 1 @@ -225,6 +225,8 @@ func (m *LongRunningRecognizeRequest) GetAudio() *RecognitionAudio { // All subsequent messages must contain `audio` data and must not contain a // `streaming_config` message. type StreamingRecognizeRequest struct { + // The streaming request, which is either a streaming config or audio content. + // // Types that are valid to be assigned to StreamingRequest: // *StreamingRecognizeRequest_StreamingConfig // *StreamingRecognizeRequest_AudioContent @@ -423,6 +425,11 @@ type RecognitionConfig struct { ProfanityFilter bool `protobuf:"varint,5,opt,name=profanity_filter,json=profanityFilter" json:"profanity_filter,omitempty"` // *Optional* A means to provide context to assist the speech recognition. SpeechContexts []*SpeechContext `protobuf:"bytes,6,rep,name=speech_contexts,json=speechContexts" json:"speech_contexts,omitempty"` + // *Optional* If `true`, the top result includes a list of words and + // the start and end time offsets (timestamps) for those words. If + // `false`, no word-level time offset information is returned. The default is + // `false`. + EnableWordTimeOffsets bool `protobuf:"varint,8,opt,name=enable_word_time_offsets,json=enableWordTimeOffsets" json:"enable_word_time_offsets,omitempty"` } func (m *RecognitionConfig) Reset() { *m = RecognitionConfig{} } @@ -472,6 +479,13 @@ func (m *RecognitionConfig) GetSpeechContexts() []*SpeechContext { return nil } +func (m *RecognitionConfig) GetEnableWordTimeOffsets() bool { + if m != nil { + return m.EnableWordTimeOffsets + } + return false +} + // Provides "hints" to the speech recognizer to favor specific words and phrases // in the results. type SpeechContext struct { @@ -498,9 +512,12 @@ func (m *SpeechContext) GetPhrases() []string { // Contains audio data in the encoding specified in the `RecognitionConfig`. // Either `content` or `uri` must be supplied. Supplying both or neither -// returns [google.rpc.Code.INVALID_ARGUMENT][]. See +// returns [google.rpc.Code.INVALID_ARGUMENT][google.rpc.Code.INVALID_ARGUMENT]. See // [audio limits](https://cloud.google.com/speech/limits#content). type RecognitionAudio struct { + // The audio source, which is either inline content or a Google Cloud + // Storage uri. + // // Types that are valid to be assigned to AudioSource: // *RecognitionAudio_Content // *RecognitionAudio_Uri @@ -697,8 +714,10 @@ func (m *LongRunningRecognizeMetadata) GetLastUpdateTime() *google_protobuf4.Tim } // `StreamingRecognizeResponse` is the only message returned to the client by -// `StreamingRecognize`. A series of one or more `StreamingRecognizeResponse` -// messages are streamed back to the client. +// `StreamingRecognize`. A series of zero or more `StreamingRecognizeResponse` +// messages are streamed back to the client. If there is no recognizable +// audio, and `single_utterance` is set to false, then no messages are streamed +// back to the client. // // Here's an example of a series of ten `StreamingRecognizeResponse`s that might // be returned while processing audio: @@ -720,16 +739,14 @@ func (m *LongRunningRecognizeMetadata) GetLastUpdateTime() *google_protobuf4.Tim // 6. results { alternatives { transcript: " that is" } stability: 0.9 } // results { alternatives { transcript: " the question" } stability: 0.01 } // -// 7. speech_event_type: END_OF_SINGLE_UTTERANCE -// -// 8. results { alternatives { transcript: " that is the question" +// 7. results { alternatives { transcript: " that is the question" // confidence: 0.98 } // alternatives { transcript: " that was the question" } // is_final: true } // // Notes: // -// - Only two of the above responses #4 and #8 contain final results; they are +// - Only two of the above responses #4 and #7 contain final results; they are // indicated by `is_final: true`. Concatenating these together generates the // full transcript: "to be or not to be that is the question". // @@ -746,13 +763,13 @@ func (m *LongRunningRecognizeMetadata) GetLastUpdateTime() *google_protobuf4.Tim // `speech_event_type`, or // one or more (repeated) `results`. type StreamingRecognizeResponse struct { - // *Output-only* If set, returns a [google.rpc.Status][] message that + // *Output-only* If set, returns a [google.rpc.Status][google.rpc.Status] message that // specifies the error for the operation. Error *google_rpc.Status `protobuf:"bytes,1,opt,name=error" json:"error,omitempty"` // *Output-only* This repeated list contains zero or more results that // correspond to consecutive portions of the audio currently being processed. - // It contains zero or one `is_final=true` result (the newly settled portion), - // followed by zero or more `is_final=false` results. + // It contains zero or more `is_final=false` results followed by zero or one + // `is_final=true` result (the newly settled portion). Results []*StreamingRecognitionResult `protobuf:"bytes,2,rep,name=results" json:"results,omitempty"` // *Output-only* Indicates the type of speech event. SpeechEventType StreamingRecognizeResponse_SpeechEventType `protobuf:"varint,4,opt,name=speech_event_type,json=speechEventType,enum=google.cloud.speech.v1.StreamingRecognizeResponse_SpeechEventType" json:"speech_event_type,omitempty"` @@ -834,6 +851,8 @@ func (m *StreamingRecognitionResult) GetStability() float32 { type SpeechRecognitionResult struct { // *Output-only* May contain one or more recognition hypotheses (up to the // maximum specified in `max_alternatives`). + // These alternatives are ordered in terms of accuracy, with the top (first) + // alternative being the most probable, as ranked by the recognizer. Alternatives []*SpeechRecognitionAlternative `protobuf:"bytes,1,rep,name=alternatives" json:"alternatives,omitempty"` } @@ -857,10 +876,11 @@ type SpeechRecognitionAlternative struct { // indicates an estimated greater likelihood that the recognized words are // correct. This field is typically provided only for the top hypothesis, and // only for `is_final=true` results. Clients should not rely on the - // `confidence` field as it is not guaranteed to be accurate, or even set, in - // any of the results. + // `confidence` field as it is not guaranteed to be accurate or consistent. // The default of 0.0 is a sentinel value indicating `confidence` was not set. Confidence float32 `protobuf:"fixed32,2,opt,name=confidence" json:"confidence,omitempty"` + // *Output-only* A list of word-specific information for each recognized word. + Words []*WordInfo `protobuf:"bytes,3,rep,name=words" json:"words,omitempty"` } func (m *SpeechRecognitionAlternative) Reset() { *m = SpeechRecognitionAlternative{} } @@ -882,6 +902,61 @@ func (m *SpeechRecognitionAlternative) GetConfidence() float32 { return 0 } +func (m *SpeechRecognitionAlternative) GetWords() []*WordInfo { + if m != nil { + return m.Words + } + return nil +} + +// Word-specific information for recognized words. Word information is only +// included in the response when certain request parameters are set, such +// as `enable_word_time_offsets`. +type WordInfo struct { + // *Output-only* Time offset relative to the beginning of the audio, + // and corresponding to the start of the spoken word. + // This field is only set if `enable_word_time_offsets=true` and only + // in the top hypothesis. + // This is an experimental feature and the accuracy of the time offset can + // vary. + StartTime *google_protobuf3.Duration `protobuf:"bytes,1,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // *Output-only* Time offset relative to the beginning of the audio, + // and corresponding to the end of the spoken word. + // This field is only set if `enable_word_time_offsets=true` and only + // in the top hypothesis. + // This is an experimental feature and the accuracy of the time offset can + // vary. + EndTime *google_protobuf3.Duration `protobuf:"bytes,2,opt,name=end_time,json=endTime" json:"end_time,omitempty"` + // *Output-only* The word corresponding to this set of information. + Word string `protobuf:"bytes,3,opt,name=word" json:"word,omitempty"` +} + +func (m *WordInfo) Reset() { *m = WordInfo{} } +func (m *WordInfo) String() string { return proto.CompactTextString(m) } +func (*WordInfo) ProtoMessage() {} +func (*WordInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +func (m *WordInfo) GetStartTime() *google_protobuf3.Duration { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *WordInfo) GetEndTime() *google_protobuf3.Duration { + if m != nil { + return m.EndTime + } + return nil +} + +func (m *WordInfo) GetWord() string { + if m != nil { + return m.Word + } + return "" +} + func init() { proto.RegisterType((*RecognizeRequest)(nil), "google.cloud.speech.v1.RecognizeRequest") proto.RegisterType((*LongRunningRecognizeRequest)(nil), "google.cloud.speech.v1.LongRunningRecognizeRequest") @@ -897,6 +972,7 @@ func init() { proto.RegisterType((*StreamingRecognitionResult)(nil), "google.cloud.speech.v1.StreamingRecognitionResult") proto.RegisterType((*SpeechRecognitionResult)(nil), "google.cloud.speech.v1.SpeechRecognitionResult") proto.RegisterType((*SpeechRecognitionAlternative)(nil), "google.cloud.speech.v1.SpeechRecognitionAlternative") + proto.RegisterType((*WordInfo)(nil), "google.cloud.speech.v1.WordInfo") proto.RegisterEnum("google.cloud.speech.v1.RecognitionConfig_AudioEncoding", RecognitionConfig_AudioEncoding_name, RecognitionConfig_AudioEncoding_value) proto.RegisterEnum("google.cloud.speech.v1.StreamingRecognizeResponse_SpeechEventType", StreamingRecognizeResponse_SpeechEventType_name, StreamingRecognizeResponse_SpeechEventType_value) } @@ -1091,81 +1167,88 @@ var _Speech_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("google/cloud/speech/v1/cloud_speech.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 1212 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x57, 0x4f, 0x6f, 0x1b, 0x45, - 0x14, 0xcf, 0xc6, 0x75, 0x12, 0xbf, 0xe6, 0xcf, 0x66, 0xa8, 0x5a, 0xc7, 0x0d, 0x6d, 0xb5, 0xa5, - 0x22, 0xe9, 0xc1, 0x26, 0x2e, 0x02, 0x51, 0x10, 0x92, 0xed, 0x6c, 0x62, 0x4b, 0x8e, 0x13, 0x8d, - 0x1d, 0x5a, 0x38, 0x74, 0x34, 0x5d, 0x4f, 0xb6, 0x2b, 0xd9, 0xb3, 0xcb, 0xcc, 0x6c, 0xd4, 0xf4, - 0x82, 0xe0, 0xca, 0x11, 0xc1, 0x99, 0x13, 0x57, 0x0e, 0x5c, 0xf8, 0x0c, 0x1c, 0xe1, 0x2b, 0x70, - 0xe5, 0x3b, 0xa0, 0x9d, 0xd9, 0x75, 0x6c, 0x37, 0x6e, 0x53, 0xa9, 0x48, 0xdc, 0x3c, 0xbf, 0xf7, - 0x7b, 0x6f, 0x7e, 0xf3, 0xf6, 0xbd, 0x37, 0x63, 0xd8, 0xf6, 0xc3, 0xd0, 0x1f, 0xb0, 0x8a, 0x37, - 0x08, 0xe3, 0x7e, 0x45, 0x46, 0x8c, 0x79, 0xcf, 0x2a, 0xa7, 0x3b, 0x66, 0x4d, 0xcc, 0xba, 0x1c, - 0x89, 0x50, 0x85, 0xe8, 0xba, 0xa1, 0x96, 0xb5, 0xa9, 0x9c, 0x9a, 0x4e, 0x77, 0x4a, 0x9b, 0x69, - 0x08, 0x1a, 0x05, 0x15, 0xca, 0x79, 0xa8, 0xa8, 0x0a, 0x42, 0x2e, 0x8d, 0x57, 0xe9, 0x6e, 0x6a, - 0x1d, 0x84, 0xdc, 0x17, 0x31, 0xe7, 0x01, 0xf7, 0x2b, 0x61, 0xc4, 0xc4, 0x04, 0x69, 0x23, 0x25, - 0xe9, 0xd5, 0xd3, 0xf8, 0xa4, 0x42, 0xf9, 0x59, 0x6a, 0xba, 0x35, 0x6d, 0xea, 0xc7, 0xc6, 0x37, - 0xb5, 0xdf, 0x9e, 0xb6, 0xab, 0x60, 0xc8, 0xa4, 0xa2, 0xc3, 0x28, 0x25, 0xdc, 0x48, 0x09, 0x22, - 0xf2, 0x2a, 0x52, 0x51, 0x15, 0xa7, 0x9b, 0x3a, 0x3f, 0x5a, 0x60, 0x63, 0xe6, 0x85, 0x3e, 0x0f, - 0x5e, 0x30, 0xcc, 0xbe, 0x8e, 0x99, 0x54, 0xa8, 0x06, 0x0b, 0x5e, 0xc8, 0x4f, 0x02, 0xbf, 0x68, - 0xdd, 0xb1, 0xb6, 0xae, 0x56, 0xb7, 0xcb, 0x17, 0x9f, 0xba, 0x9c, 0x7a, 0x26, 0x4a, 0x1a, 0xda, - 0x01, 0xa7, 0x8e, 0xe8, 0x73, 0xc8, 0xd3, 0xb8, 0x1f, 0x84, 0xc5, 0x79, 0x1d, 0x61, 0xeb, 0x12, - 0x11, 0x6a, 0x09, 0x1f, 0x1b, 0x37, 0xe7, 0x67, 0x0b, 0x6e, 0xb6, 0x43, 0xee, 0x63, 0x93, 0xad, - 0xff, 0xa3, 0xc4, 0xdf, 0x2d, 0xd8, 0xe8, 0x2a, 0xc1, 0xe8, 0xf0, 0x22, 0x81, 0x04, 0x6c, 0x99, - 0x19, 0xc9, 0x84, 0xd4, 0xea, 0xac, 0x8d, 0xa6, 0x83, 0x9d, 0x6b, 0x6e, 0xce, 0xe1, 0xb5, 0x51, - 0x34, 0x03, 0xa1, 0x7b, 0xb0, 0xa2, 0x75, 0x24, 0xc1, 0x15, 0xe3, 0x4a, 0x1f, 0x63, 0xb9, 0x39, - 0x87, 0x97, 0x35, 0xdc, 0x30, 0x68, 0xfd, 0x1d, 0x58, 0x3f, 0xd7, 0x21, 0x8c, 0x38, 0xe7, 0x37, - 0x0b, 0x4a, 0xb3, 0x77, 0x7b, 0x1b, 0xc9, 0xdd, 0x06, 0x5b, 0x06, 0xdc, 0x1f, 0x30, 0x12, 0x2b, - 0xc5, 0x04, 0xe5, 0x1e, 0xd3, 0x02, 0x97, 0xf0, 0x9a, 0xc1, 0x8f, 0x33, 0x18, 0xbd, 0x0f, 0x6b, - 0x01, 0x57, 0x4c, 0x04, 0x43, 0x22, 0x98, 0x8c, 0x07, 0x4a, 0x16, 0x73, 0x9a, 0xb9, 0x9a, 0xc2, - 0xd8, 0xa0, 0xce, 0x3f, 0x39, 0x58, 0x7f, 0x59, 0x6c, 0x17, 0x96, 0x18, 0xf7, 0xc2, 0x7e, 0xc0, - 0x8d, 0xdc, 0xd5, 0xea, 0xc7, 0x97, 0x96, 0x5b, 0xd6, 0x1f, 0xd4, 0x4d, 0xdd, 0xf1, 0x28, 0x10, - 0xba, 0x0f, 0xeb, 0x92, 0x0e, 0xa3, 0x01, 0x23, 0x82, 0x2a, 0x46, 0x9e, 0x31, 0xa1, 0x5e, 0x68, - 0xfd, 0x79, 0xbc, 0x66, 0x0c, 0x98, 0x2a, 0xd6, 0x4c, 0x60, 0x74, 0x17, 0x56, 0x06, 0x94, 0xfb, - 0x31, 0xf5, 0x19, 0xf1, 0xc2, 0x3e, 0xd3, 0xea, 0x0b, 0x78, 0x39, 0x03, 0x1b, 0x61, 0x9f, 0x25, - 0xf9, 0x18, 0xd2, 0xe7, 0x84, 0x0e, 0x14, 0x13, 0x9c, 0xaa, 0xe0, 0x94, 0xc9, 0xe2, 0x15, 0x13, - 0x6f, 0x48, 0x9f, 0xd7, 0xc6, 0xe0, 0x84, 0x1a, 0x89, 0xf0, 0x84, 0xf2, 0x40, 0x9d, 0x91, 0x93, - 0x20, 0x31, 0x15, 0xf3, 0x26, 0x75, 0x23, 0x7c, 0x4f, 0xc3, 0xa8, 0x03, 0x6b, 0xe6, 0x74, 0xa6, - 0x08, 0x9e, 0x2b, 0x59, 0x5c, 0xb8, 0x93, 0xdb, 0xba, 0x5a, 0xbd, 0x37, 0xb3, 0xc6, 0xf4, 0xaf, - 0x86, 0x61, 0xe3, 0x55, 0x39, 0xbe, 0x94, 0xce, 0xf7, 0x16, 0xac, 0x4c, 0xa4, 0x04, 0x15, 0xe1, - 0x9a, 0xdb, 0x69, 0x1c, 0xee, 0xb6, 0x3a, 0xfb, 0xe4, 0xb8, 0xd3, 0x3d, 0x72, 0x1b, 0xad, 0xbd, - 0x96, 0xbb, 0x6b, 0xcf, 0xa1, 0x65, 0x58, 0x6a, 0xb7, 0x3a, 0x6e, 0x0d, 0xef, 0x7c, 0x64, 0x5b, - 0x68, 0x09, 0xae, 0xec, 0xb5, 0x6b, 0x0d, 0x7b, 0x1e, 0x15, 0x20, 0x7f, 0x70, 0xdc, 0xae, 0x3d, - 0xb2, 0x73, 0x68, 0x11, 0x72, 0xb5, 0x03, 0x6c, 0x5f, 0x41, 0x00, 0x0b, 0xb5, 0x03, 0x4c, 0x1e, - 0xd5, 0xed, 0x7c, 0xe2, 0x77, 0xb8, 0xbf, 0x4f, 0x0e, 0x8f, 0x8e, 0xbb, 0xf6, 0x02, 0x2a, 0xc1, - 0xf5, 0xee, 0x91, 0xeb, 0x3e, 0x26, 0x8f, 0x5a, 0xbd, 0x26, 0x69, 0xba, 0xb5, 0x5d, 0x17, 0x93, - 0xfa, 0x97, 0x3d, 0xd7, 0x5e, 0x74, 0xb6, 0x61, 0x65, 0x42, 0x2e, 0x2a, 0xc2, 0x62, 0xf4, 0x4c, - 0x50, 0xc9, 0x64, 0xd1, 0xba, 0x93, 0xdb, 0x2a, 0xe0, 0x6c, 0xe9, 0xe0, 0xd1, 0x14, 0x1b, 0xb5, - 0x29, 0x2a, 0xc1, 0x62, 0xd6, 0x1a, 0x56, 0xda, 0x1a, 0x19, 0x80, 0x10, 0xe4, 0x62, 0x11, 0xe8, - 0x2f, 0x5a, 0x68, 0xce, 0xe1, 0x64, 0x51, 0x5f, 0x05, 0xd3, 0x39, 0x44, 0x86, 0xb1, 0xf0, 0x98, - 0xf3, 0x64, 0x54, 0x6d, 0x49, 0x57, 0xcb, 0x28, 0xe4, 0x92, 0xa1, 0x16, 0x2c, 0x66, 0x45, 0x3a, - 0xaf, 0x33, 0x5d, 0x79, 0x75, 0xa6, 0xc7, 0x54, 0x99, 0x32, 0xc6, 0x99, 0xbf, 0x13, 0xc0, 0xe6, - 0xc5, 0x13, 0xee, 0xed, 0x6f, 0xf5, 0x87, 0x75, 0xf1, 0x5e, 0x07, 0x4c, 0xd1, 0x3e, 0x55, 0x34, - 0xad, 0x39, 0x5f, 0x30, 0x29, 0x49, 0xc4, 0x84, 0x97, 0x25, 0x2d, 0xaf, 0x6b, 0x4e, 0xe3, 0x47, - 0x06, 0x46, 0x9f, 0x00, 0x48, 0x45, 0x85, 0x22, 0xc9, 0x1d, 0x93, 0xce, 0xce, 0x52, 0xa6, 0x2c, - 0xbb, 0x80, 0xca, 0xbd, 0xec, 0x02, 0xc2, 0x05, 0xcd, 0x4e, 0xd6, 0x68, 0x17, 0xec, 0x01, 0x95, - 0x8a, 0xc4, 0x51, 0x3f, 0xe9, 0x2a, 0x1d, 0x20, 0xf7, 0xda, 0x00, 0xab, 0x89, 0xcf, 0xb1, 0x76, - 0x49, 0x40, 0xe7, 0xcf, 0xf9, 0x97, 0x87, 0xd7, 0x58, 0xda, 0xb6, 0x20, 0xcf, 0x84, 0x08, 0x45, - 0x3a, 0xbb, 0x50, 0x16, 0x59, 0x44, 0x5e, 0xb9, 0xab, 0xaf, 0x3e, 0x6c, 0x08, 0xa8, 0x3d, 0x9d, - 0xe0, 0x37, 0x9a, 0xcc, 0x53, 0x39, 0x46, 0x1c, 0xd6, 0xd3, 0x5e, 0x64, 0xa7, 0x8c, 0x2b, 0xa2, - 0xce, 0x22, 0xa6, 0x5b, 0x7c, 0xb5, 0x5a, 0xbf, 0x6c, 0xdc, 0xf3, 0x63, 0xa4, 0xdf, 0xd4, 0x4d, - 0x42, 0xf5, 0xce, 0x22, 0x86, 0xd3, 0x46, 0x1f, 0x01, 0x4e, 0x1b, 0xd6, 0xa6, 0x38, 0x68, 0x13, - 0x8a, 0x49, 0x33, 0x35, 0x9a, 0xc4, 0xfd, 0xc2, 0xed, 0xf4, 0xa6, 0x1a, 0xf6, 0x26, 0xdc, 0x70, - 0x3b, 0xbb, 0xe4, 0x70, 0x8f, 0x74, 0x5b, 0x9d, 0xfd, 0xb6, 0x4b, 0x8e, 0x7b, 0x3d, 0x17, 0xd7, - 0x3a, 0x0d, 0xd7, 0xb6, 0x9c, 0x5f, 0x67, 0xdc, 0x08, 0xe6, 0x94, 0xe8, 0x31, 0x2c, 0x4f, 0x8c, - 0x2e, 0x4b, 0xe7, 0xeb, 0xc3, 0x4b, 0x17, 0xe4, 0xd8, 0x80, 0xc3, 0x13, 0x91, 0xd0, 0x06, 0x2c, - 0x05, 0x92, 0x9c, 0x04, 0x9c, 0x0e, 0xd2, 0x0b, 0x62, 0x31, 0x90, 0x7b, 0xc9, 0x12, 0x6d, 0x42, - 0x52, 0x3b, 0x4f, 0x83, 0x41, 0xa0, 0xce, 0x74, 0x9d, 0xcc, 0xe3, 0x73, 0xc0, 0x91, 0x70, 0x63, - 0x46, 0xdd, 0xff, 0x77, 0x6a, 0x9d, 0x27, 0xb0, 0xf9, 0x2a, 0x36, 0xba, 0x05, 0xa0, 0x04, 0xe5, - 0xd2, 0x13, 0x41, 0x64, 0x3a, 0xa8, 0x80, 0xc7, 0x90, 0xc4, 0xae, 0x2f, 0xc8, 0x3e, 0xcb, 0x2e, - 0xc4, 0x79, 0x3c, 0x86, 0x54, 0x7f, 0xc9, 0xc1, 0x82, 0xd9, 0x00, 0x7d, 0x6b, 0x41, 0x61, 0x54, - 0x16, 0xe8, 0x75, 0xaf, 0x93, 0xd1, 0xc3, 0xa3, 0xb4, 0x7d, 0x09, 0xa6, 0xa9, 0x31, 0xe7, 0xf6, - 0x77, 0x7f, 0xfd, 0xfd, 0xc3, 0xfc, 0x86, 0x73, 0x2d, 0x79, 0xec, 0x1a, 0xe2, 0x43, 0x91, 0xb1, - 0x1e, 0x5a, 0xf7, 0xd1, 0x4f, 0x16, 0x5c, 0xbb, 0x68, 0x6e, 0xa0, 0x07, 0xb3, 0x36, 0x79, 0xc5, - 0x9b, 0xad, 0xf4, 0x6e, 0xe6, 0x34, 0xf6, 0x0c, 0x2e, 0x1f, 0x66, 0xcf, 0x60, 0xe7, 0xbe, 0x56, - 0xf3, 0x9e, 0x73, 0x7b, 0x4c, 0xcd, 0x18, 0x73, 0x42, 0xd8, 0x37, 0x80, 0x5e, 0xee, 0x1d, 0xb4, - 0xf3, 0x26, 0x7d, 0x66, 0x34, 0x55, 0xdf, 0xbc, 0x35, 0xb7, 0xac, 0x0f, 0xac, 0x7a, 0x00, 0x25, - 0x2f, 0x1c, 0xce, 0x70, 0xae, 0x5f, 0x35, 0xdf, 0xf0, 0x28, 0x19, 0x66, 0x47, 0xd6, 0x57, 0x9f, - 0xa5, 0x34, 0x3f, 0x4c, 0xde, 0x04, 0xe5, 0x50, 0xf8, 0x15, 0x9f, 0x71, 0x3d, 0xea, 0x2a, 0xc6, - 0x44, 0xa3, 0x40, 0x4e, 0xff, 0xfd, 0xf8, 0xd4, 0xfc, 0x7a, 0xba, 0xa0, 0x89, 0x0f, 0xfe, 0x0d, - 0x00, 0x00, 0xff, 0xff, 0x1f, 0xdc, 0x74, 0x41, 0xa6, 0x0c, 0x00, 0x00, + // 1318 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x57, 0x4d, 0x6f, 0x1b, 0x45, + 0x18, 0xce, 0xc6, 0x71, 0x3e, 0xde, 0xe6, 0xc3, 0x19, 0x4a, 0xeb, 0xb8, 0xa1, 0x8d, 0xb6, 0x54, + 0x24, 0x3d, 0xd8, 0x24, 0xad, 0x5a, 0x28, 0x08, 0xc9, 0x71, 0x36, 0x89, 0x25, 0xc7, 0x89, 0xc6, + 0x0e, 0x29, 0x1c, 0x18, 0x4d, 0xec, 0xf1, 0x76, 0x25, 0x7b, 0x76, 0x99, 0x19, 0x87, 0xa6, 0x17, + 0x04, 0x57, 0x24, 0x2e, 0x88, 0x9e, 0x39, 0xf5, 0xca, 0x81, 0x0b, 0xbf, 0x81, 0x23, 0xfc, 0x05, + 0x7e, 0x04, 0x47, 0x34, 0x33, 0xbb, 0x8e, 0xed, 0xc4, 0x69, 0x2a, 0x15, 0x89, 0xdb, 0xce, 0xf3, + 0x7e, 0xcc, 0x33, 0xef, 0xbc, 0x1f, 0xb3, 0xb0, 0xe6, 0x87, 0xa1, 0xdf, 0x66, 0x85, 0x46, 0x3b, + 0xec, 0x36, 0x0b, 0x32, 0x62, 0xac, 0xf1, 0xac, 0x70, 0xb2, 0x6e, 0xd7, 0xc4, 0xae, 0xf3, 0x91, + 0x08, 0x55, 0x88, 0x6e, 0x58, 0xd5, 0xbc, 0x11, 0xe5, 0x63, 0xd1, 0xc9, 0x7a, 0x6e, 0x39, 0x76, + 0x41, 0xa3, 0xa0, 0x40, 0x39, 0x0f, 0x15, 0x55, 0x41, 0xc8, 0xa5, 0xb5, 0xca, 0xdd, 0x8d, 0xa5, + 0xed, 0x90, 0xfb, 0xa2, 0xcb, 0x79, 0xc0, 0xfd, 0x42, 0x18, 0x31, 0x31, 0xa0, 0xb4, 0x14, 0x2b, + 0x99, 0xd5, 0x71, 0xb7, 0x55, 0xa0, 0xfc, 0x34, 0x16, 0xdd, 0x1e, 0x16, 0x35, 0xbb, 0xd6, 0x36, + 0x96, 0xdf, 0x19, 0x96, 0xab, 0xa0, 0xc3, 0xa4, 0xa2, 0x9d, 0x28, 0x56, 0xb8, 0x19, 0x2b, 0x88, + 0xa8, 0x51, 0x90, 0x8a, 0xaa, 0x6e, 0xbc, 0xa9, 0xfb, 0xb3, 0x03, 0x19, 0xcc, 0x1a, 0xa1, 0xcf, + 0x83, 0x17, 0x0c, 0xb3, 0xaf, 0xbb, 0x4c, 0x2a, 0x54, 0x84, 0xc9, 0x46, 0xc8, 0x5b, 0x81, 0x9f, + 0x75, 0x56, 0x9c, 0xd5, 0x6b, 0x1b, 0x6b, 0xf9, 0x8b, 0x4f, 0x9d, 0x8f, 0x2d, 0x35, 0x93, 0x92, + 0x31, 0xc0, 0xb1, 0x21, 0xfa, 0x0c, 0xd2, 0xb4, 0xdb, 0x0c, 0xc2, 0xec, 0xb8, 0xf1, 0xb0, 0x7a, + 0x05, 0x0f, 0x45, 0xad, 0x8f, 0xad, 0x99, 0xfb, 0x8b, 0x03, 0xb7, 0x2a, 0x21, 0xf7, 0xb1, 0x8d, + 0xd6, 0xff, 0x91, 0xe2, 0xef, 0x0e, 0x2c, 0xd5, 0x94, 0x60, 0xb4, 0x73, 0x11, 0x41, 0x02, 0x19, + 0x99, 0x08, 0xc9, 0x00, 0xd5, 0x8d, 0x51, 0x1b, 0x0d, 0x3b, 0x3b, 0xe3, 0xbc, 0x3b, 0x86, 0x17, + 0x7a, 0xde, 0x2c, 0x84, 0xee, 0xc1, 0x9c, 0xe1, 0xa1, 0x9d, 0x2b, 0xc6, 0x95, 0x39, 0xc6, 0xec, + 0xee, 0x18, 0x9e, 0x35, 0x70, 0xc9, 0xa2, 0x9b, 0xef, 0xc0, 0xe2, 0x19, 0x0f, 0x61, 0xc9, 0xb9, + 0xbf, 0x39, 0x90, 0x1b, 0xbd, 0xdb, 0xdb, 0x08, 0xee, 0x1a, 0x64, 0x64, 0xc0, 0xfd, 0x36, 0x23, + 0x5d, 0xa5, 0x98, 0xa0, 0xbc, 0xc1, 0x0c, 0xc1, 0x69, 0xbc, 0x60, 0xf1, 0xc3, 0x04, 0x46, 0x1f, + 0xc0, 0x42, 0xc0, 0x15, 0x13, 0x41, 0x87, 0x08, 0x26, 0xbb, 0x6d, 0x25, 0xb3, 0x29, 0xa3, 0x39, + 0x1f, 0xc3, 0xd8, 0xa2, 0xee, 0xab, 0x09, 0x58, 0x3c, 0x4f, 0xb6, 0x06, 0xd3, 0x8c, 0x37, 0xc2, + 0x66, 0xc0, 0x2d, 0xdd, 0xf9, 0x8d, 0xc7, 0x57, 0xa6, 0x9b, 0x37, 0x17, 0xea, 0xc5, 0xe6, 0xb8, + 0xe7, 0x08, 0xdd, 0x87, 0x45, 0x49, 0x3b, 0x51, 0x9b, 0x11, 0x41, 0x15, 0x23, 0xcf, 0x98, 0x50, + 0x2f, 0x0c, 0xff, 0x34, 0x5e, 0xb0, 0x02, 0x4c, 0x15, 0xdb, 0xd5, 0x30, 0xba, 0x0b, 0x73, 0x6d, + 0xca, 0xfd, 0x2e, 0xf5, 0x19, 0x69, 0x84, 0x4d, 0x66, 0xd8, 0xcf, 0xe0, 0xd9, 0x04, 0x2c, 0x85, + 0x4d, 0xa6, 0xe3, 0xd1, 0xa1, 0xcf, 0x09, 0x6d, 0x2b, 0x26, 0x38, 0x55, 0xc1, 0x09, 0x93, 0xd9, + 0x09, 0xeb, 0xaf, 0x43, 0x9f, 0x17, 0xfb, 0x60, 0xad, 0x1a, 0x89, 0xb0, 0x45, 0x79, 0xa0, 0x4e, + 0x49, 0x2b, 0xd0, 0xa2, 0x6c, 0xda, 0x86, 0xae, 0x87, 0x6f, 0x1b, 0x18, 0x55, 0x61, 0xc1, 0x9e, + 0xce, 0x26, 0xc1, 0x73, 0x25, 0xb3, 0x93, 0x2b, 0xa9, 0xd5, 0x6b, 0x1b, 0xf7, 0x46, 0xe6, 0x98, + 0xf9, 0x2a, 0x59, 0x6d, 0x3c, 0x2f, 0xfb, 0x97, 0x12, 0x3d, 0x86, 0x2c, 0xe3, 0xf4, 0xb8, 0xcd, + 0xc8, 0x37, 0xa1, 0x68, 0x12, 0xdd, 0x45, 0x48, 0xd8, 0x6a, 0x49, 0xa6, 0x64, 0x76, 0xda, 0x50, + 0x78, 0xd7, 0xca, 0x8f, 0x42, 0xd1, 0xac, 0x07, 0x1d, 0xb6, 0x6f, 0x85, 0xee, 0x0f, 0x0e, 0xcc, + 0x0d, 0xc4, 0x12, 0x65, 0xe1, 0xba, 0x57, 0x2d, 0xed, 0x6f, 0x95, 0xab, 0x3b, 0xe4, 0xb0, 0x5a, + 0x3b, 0xf0, 0x4a, 0xe5, 0xed, 0xb2, 0xb7, 0x95, 0x19, 0x43, 0xb3, 0x30, 0x5d, 0x29, 0x57, 0xbd, + 0x22, 0x5e, 0x7f, 0x94, 0x71, 0xd0, 0x34, 0x4c, 0x6c, 0x57, 0x8a, 0xa5, 0xcc, 0x38, 0x9a, 0x81, + 0xf4, 0xde, 0x61, 0xa5, 0x78, 0x94, 0x49, 0xa1, 0x29, 0x48, 0x15, 0xf7, 0x70, 0x66, 0x02, 0x01, + 0x4c, 0x16, 0xf7, 0x30, 0x39, 0xda, 0xcc, 0xa4, 0xb5, 0xdd, 0xfe, 0xce, 0x0e, 0xd9, 0x3f, 0x38, + 0xac, 0x65, 0x26, 0x51, 0x0e, 0x6e, 0xd4, 0x0e, 0x3c, 0xef, 0x29, 0x39, 0x2a, 0xd7, 0x77, 0xc9, + 0xae, 0x57, 0xdc, 0xf2, 0x30, 0xd9, 0xfc, 0xa2, 0xee, 0x65, 0xa6, 0xdc, 0x35, 0x98, 0x1b, 0x38, + 0x27, 0xca, 0xc2, 0x54, 0xf4, 0x4c, 0x50, 0xc9, 0x64, 0xd6, 0x59, 0x49, 0xad, 0xce, 0xe0, 0x64, + 0xe9, 0xe2, 0x5e, 0xfb, 0xeb, 0xd5, 0x37, 0xca, 0xc1, 0x54, 0x52, 0x53, 0x4e, 0x5c, 0x53, 0x09, + 0x80, 0x10, 0xa4, 0xba, 0x22, 0x30, 0xa9, 0x30, 0xb3, 0x3b, 0x86, 0xf5, 0x62, 0x73, 0x1e, 0x6c, + 0xc9, 0x11, 0x19, 0x76, 0x45, 0x83, 0xb9, 0x5f, 0xf5, 0xd2, 0x54, 0xb7, 0x03, 0x19, 0x85, 0x5c, + 0x32, 0x54, 0x86, 0xa9, 0x24, 0xbb, 0xc7, 0xcd, 0x15, 0x15, 0x2e, 0xbf, 0xa2, 0x3e, 0x56, 0x36, + 0xff, 0x71, 0x62, 0xef, 0x06, 0xb0, 0x7c, 0x71, 0x6b, 0x7c, 0xfb, 0x5b, 0xfd, 0xe1, 0x5c, 0xbc, + 0xd7, 0x1e, 0x53, 0xb4, 0x49, 0x15, 0x8d, 0x93, 0xd5, 0x17, 0x4c, 0x4a, 0x12, 0x31, 0xd1, 0x48, + 0x82, 0x96, 0x36, 0xc9, 0x6a, 0xf0, 0x03, 0x0b, 0xa3, 0x8f, 0x01, 0xa4, 0xa2, 0x42, 0x99, 0xb4, + 0x8a, 0x9b, 0x6e, 0x2e, 0x61, 0x96, 0x4c, 0xae, 0x7c, 0x3d, 0x99, 0x5c, 0x78, 0xc6, 0x68, 0xeb, + 0x35, 0xda, 0x82, 0x4c, 0x9b, 0x4a, 0x45, 0xba, 0x51, 0x53, 0x97, 0xa3, 0x71, 0x90, 0x7a, 0xad, + 0x83, 0x79, 0x6d, 0x73, 0x68, 0x4c, 0x34, 0xe8, 0xfe, 0x39, 0x7e, 0xbe, 0xeb, 0xf5, 0x85, 0x6d, + 0x15, 0xd2, 0x4c, 0x88, 0x50, 0xc4, 0x4d, 0x0f, 0x25, 0x9e, 0x45, 0xd4, 0xc8, 0xd7, 0xcc, 0xcc, + 0xc4, 0x56, 0x01, 0x55, 0x86, 0x03, 0xfc, 0x46, 0x2d, 0x7d, 0x28, 0xc6, 0x88, 0xc3, 0x62, 0x5c, + 0xc4, 0xec, 0x84, 0x71, 0x45, 0xd4, 0x69, 0xc4, 0x4c, 0x6f, 0x98, 0xdf, 0xd8, 0xbc, 0xaa, 0xdf, + 0xb3, 0x63, 0xc4, 0x77, 0xea, 0x69, 0x57, 0xf5, 0xd3, 0x88, 0xe1, 0xb8, 0x43, 0xf4, 0x00, 0xb7, + 0x02, 0x0b, 0x43, 0x3a, 0x68, 0x19, 0xb2, 0xba, 0x98, 0x4a, 0xbb, 0xc4, 0xfb, 0xdc, 0xab, 0xd6, + 0x87, 0x0a, 0xf6, 0x16, 0xdc, 0xf4, 0xaa, 0x5b, 0x64, 0x7f, 0x9b, 0xd4, 0xca, 0xd5, 0x9d, 0x8a, + 0x47, 0x0e, 0xeb, 0x75, 0x0f, 0x17, 0xab, 0x25, 0x2f, 0xe3, 0xb8, 0xbf, 0x8e, 0x18, 0x25, 0xf6, + 0x94, 0xe8, 0x29, 0xcc, 0x0e, 0xf4, 0x3c, 0xc7, 0xc4, 0xeb, 0xe1, 0x95, 0x13, 0xb2, 0xaf, 0x33, + 0xe2, 0x01, 0x4f, 0x68, 0x09, 0xa6, 0x03, 0x49, 0x5a, 0x01, 0xa7, 0xed, 0x78, 0xb2, 0x4c, 0x05, + 0x72, 0x5b, 0x2f, 0xd1, 0x32, 0xe8, 0xdc, 0x39, 0x0e, 0xda, 0x81, 0x3a, 0x35, 0x79, 0x32, 0x8e, + 0xcf, 0x00, 0x57, 0xc2, 0xcd, 0x11, 0x79, 0xff, 0xdf, 0xb1, 0x75, 0x5f, 0x3a, 0xb0, 0x7c, 0x99, + 0x3a, 0xba, 0x0d, 0xa0, 0x04, 0xe5, 0xb2, 0x21, 0x82, 0xc8, 0x96, 0xd0, 0x0c, 0xee, 0x43, 0xb4, + 0xdc, 0x8c, 0xd6, 0x26, 0x4b, 0x46, 0xe9, 0x38, 0xee, 0x43, 0xd0, 0x23, 0x48, 0xeb, 0x9e, 0xad, + 0x67, 0xa7, 0xe6, 0xbc, 0x32, 0x8a, 0xb3, 0xee, 0xdc, 0x65, 0xde, 0x0a, 0xb1, 0x55, 0x77, 0x7f, + 0x74, 0x60, 0x3a, 0xc1, 0xd0, 0x47, 0x03, 0x25, 0x6a, 0xeb, 0x60, 0xe9, 0x5c, 0x85, 0x6d, 0xc5, + 0x8f, 0xcf, 0xfe, 0x0a, 0x7d, 0xa8, 0xa7, 0x70, 0xb3, 0xbf, 0xb4, 0x2f, 0xb1, 0x9b, 0x62, 0xdc, + 0x4c, 0x0f, 0x84, 0x60, 0x42, 0xb3, 0x88, 0x27, 0xa6, 0xf9, 0xde, 0x78, 0x95, 0x82, 0x49, 0x1b, + 0x29, 0xf4, 0x9d, 0x03, 0x33, 0xbd, 0x04, 0x47, 0xaf, 0x7b, 0xa0, 0xf5, 0xde, 0x5e, 0xb9, 0xb5, + 0x2b, 0x68, 0xda, 0x6a, 0x71, 0xef, 0x7c, 0xff, 0xd7, 0xdf, 0x3f, 0x8d, 0x2f, 0xb9, 0xd7, 0xf5, + 0x7b, 0xdf, 0x2a, 0x3e, 0x11, 0x89, 0xd6, 0x13, 0xe7, 0x3e, 0x7a, 0xe9, 0xc0, 0xf5, 0x8b, 0x3a, + 0x20, 0x7a, 0x30, 0x6a, 0x93, 0x4b, 0x9e, 0xad, 0xb9, 0xf7, 0x12, 0xa3, 0xbe, 0x3f, 0x81, 0xfc, + 0x7e, 0xf2, 0x27, 0xe0, 0xde, 0x37, 0x6c, 0xde, 0x77, 0xef, 0xf4, 0xb1, 0xe9, 0xd3, 0x1c, 0x20, + 0xf6, 0x2d, 0xa0, 0xf3, 0x5d, 0x00, 0xad, 0xbf, 0x49, 0xc7, 0xb0, 0x9c, 0x36, 0xde, 0xbc, 0xc9, + 0xac, 0x3a, 0x1f, 0x3a, 0x9b, 0x6d, 0xc8, 0x35, 0xc2, 0xce, 0x08, 0xe3, 0xcd, 0x6b, 0xf6, 0x0e, + 0x0f, 0xf4, 0xe5, 0x1f, 0x38, 0x5f, 0x7e, 0x1a, 0xab, 0xf9, 0xa1, 0x7e, 0x16, 0xe5, 0x43, 0xe1, + 0x17, 0x7c, 0xc6, 0x4d, 0x6a, 0x14, 0xac, 0x88, 0x46, 0x81, 0x1c, 0xfe, 0x03, 0xfb, 0xc4, 0x7e, + 0xfd, 0xe3, 0x38, 0xc7, 0x93, 0x46, 0xf7, 0xc1, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x52, 0x28, + 0xae, 0xd1, 0xac, 0x0d, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/speech/v1beta1/cloud_speech.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/speech/v1beta1/cloud_speech.pb.go index baf71e9..178a930 100644 --- a/vendor/google.golang.org/genproto/googleapis/cloud/speech/v1beta1/cloud_speech.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/cloud/speech/v1beta1/cloud_speech.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/cloud/speech/v1beta1/cloud_speech.proto -// DO NOT EDIT! /* Package speech is a generated protocol buffer package. @@ -222,6 +221,8 @@ func (m *AsyncRecognizeRequest) GetAudio() *RecognitionAudio { // All subsequent messages must contain `audio` data and must not contain a // `streaming_config` message. type StreamingRecognizeRequest struct { + // The streaming request, which is either a streaming config or audio content. + // // Types that are valid to be assigned to StreamingRequest: // *StreamingRecognizeRequest_StreamingConfig // *StreamingRecognizeRequest_AudioContent @@ -497,6 +498,8 @@ func (m *SpeechContext) GetPhrases() []string { // returns [google.rpc.Code.INVALID_ARGUMENT][google.rpc.Code.INVALID_ARGUMENT]. See // [audio limits](https://cloud.google.com/speech/limits#content). type RecognitionAudio struct { + // The audio source, which is either inline content or a GCS uri. + // // Types that are valid to be assigned to AudioSource: // *RecognitionAudio_Content // *RecognitionAudio_Uri @@ -609,7 +612,7 @@ func _RecognitionAudio_OneofSizer(msg proto.Message) (n int) { return n } -// The only message returned to the client by `SyncRecognize`. It +// The only message returned to the client by `SyncRecognize`. method. It // contains the result as zero or more sequential `SpeechRecognitionResult` // messages. type SyncRecognizeResponse struct { diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/speech/v1p1beta1/cloud_speech.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/speech/v1p1beta1/cloud_speech.pb.go new file mode 100644 index 0000000..28e3f42 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/speech/v1p1beta1/cloud_speech.pb.go @@ -0,0 +1,1398 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/speech/v1p1beta1/cloud_speech.proto + +/* +Package speech is a generated protocol buffer package. + +It is generated from these files: + google/cloud/speech/v1p1beta1/cloud_speech.proto + +It has these top-level messages: + RecognizeRequest + LongRunningRecognizeRequest + StreamingRecognizeRequest + StreamingRecognitionConfig + RecognitionConfig + GoogleDataCollectionConfig + SpeechContext + RecognitionAudio + RecognizeResponse + LongRunningRecognizeResponse + LongRunningRecognizeMetadata + StreamingRecognizeResponse + StreamingRecognitionResult + SpeechRecognitionResult + SpeechRecognitionAlternative + WordInfo +*/ +package speech + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import _ "github.com/golang/protobuf/ptypes/any" +import google_protobuf3 "github.com/golang/protobuf/ptypes/duration" +import google_protobuf4 "github.com/golang/protobuf/ptypes/timestamp" +import google_rpc "google.golang.org/genproto/googleapis/rpc/status" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// The encoding of the audio data sent in the request. +// +// All encodings support only 1 channel (mono) audio. +// +// For best results, the audio source should be captured and transmitted using +// a lossless encoding (`FLAC` or `LINEAR16`). The accuracy of the speech +// recognition can be reduced if lossy codecs are used to capture or transmit +// audio, particularly if background noise is present. Lossy codecs include +// `MULAW`, `AMR`, `AMR_WB`, `OGG_OPUS`, and `SPEEX_WITH_HEADER_BYTE`. +// +// The `FLAC` and `WAV` audio file formats include a header that describes the +// included audio content. You can request recognition for `WAV` files that +// contain either `LINEAR16` or `MULAW` encoded audio. +// If you send `FLAC` or `WAV` audio file format in +// your request, you do not need to specify an `AudioEncoding`; the audio +// encoding format is determined from the file header. If you specify +// an `AudioEncoding` when you send send `FLAC` or `WAV` audio, the +// encoding configuration must match the encoding described in the audio +// header; otherwise the request returns an +// [google.rpc.Code.INVALID_ARGUMENT][google.rpc.Code.INVALID_ARGUMENT] error code. +type RecognitionConfig_AudioEncoding int32 + +const ( + // Not specified. + RecognitionConfig_ENCODING_UNSPECIFIED RecognitionConfig_AudioEncoding = 0 + // Uncompressed 16-bit signed little-endian samples (Linear PCM). + RecognitionConfig_LINEAR16 RecognitionConfig_AudioEncoding = 1 + // `FLAC` (Free Lossless Audio + // Codec) is the recommended encoding because it is + // lossless--therefore recognition is not compromised--and + // requires only about half the bandwidth of `LINEAR16`. `FLAC` stream + // encoding supports 16-bit and 24-bit samples, however, not all fields in + // `STREAMINFO` are supported. + RecognitionConfig_FLAC RecognitionConfig_AudioEncoding = 2 + // 8-bit samples that compand 14-bit audio samples using G.711 PCMU/mu-law. + RecognitionConfig_MULAW RecognitionConfig_AudioEncoding = 3 + // Adaptive Multi-Rate Narrowband codec. `sample_rate_hertz` must be 8000. + RecognitionConfig_AMR RecognitionConfig_AudioEncoding = 4 + // Adaptive Multi-Rate Wideband codec. `sample_rate_hertz` must be 16000. + RecognitionConfig_AMR_WB RecognitionConfig_AudioEncoding = 5 + // Opus encoded audio frames in Ogg container + // ([OggOpus](https://wiki.xiph.org/OggOpus)). + // `sample_rate_hertz` must be one of 8000, 12000, 16000, 24000, or 48000. + RecognitionConfig_OGG_OPUS RecognitionConfig_AudioEncoding = 6 + // Although the use of lossy encodings is not recommended, if a very low + // bitrate encoding is required, `OGG_OPUS` is highly preferred over + // Speex encoding. The [Speex](https://speex.org/) encoding supported by + // Cloud Speech API has a header byte in each block, as in MIME type + // `audio/x-speex-with-header-byte`. + // It is a variant of the RTP Speex encoding defined in + // [RFC 5574](https://tools.ietf.org/html/rfc5574). + // The stream is a sequence of blocks, one block per RTP packet. Each block + // starts with a byte containing the length of the block, in bytes, followed + // by one or more frames of Speex data, padded to an integral number of + // bytes (octets) as specified in RFC 5574. In other words, each RTP header + // is replaced with a single byte containing the block length. Only Speex + // wideband is supported. `sample_rate_hertz` must be 16000. + RecognitionConfig_SPEEX_WITH_HEADER_BYTE RecognitionConfig_AudioEncoding = 7 +) + +var RecognitionConfig_AudioEncoding_name = map[int32]string{ + 0: "ENCODING_UNSPECIFIED", + 1: "LINEAR16", + 2: "FLAC", + 3: "MULAW", + 4: "AMR", + 5: "AMR_WB", + 6: "OGG_OPUS", + 7: "SPEEX_WITH_HEADER_BYTE", +} +var RecognitionConfig_AudioEncoding_value = map[string]int32{ + "ENCODING_UNSPECIFIED": 0, + "LINEAR16": 1, + "FLAC": 2, + "MULAW": 3, + "AMR": 4, + "AMR_WB": 5, + "OGG_OPUS": 6, + "SPEEX_WITH_HEADER_BYTE": 7, +} + +func (x RecognitionConfig_AudioEncoding) String() string { + return proto.EnumName(RecognitionConfig_AudioEncoding_name, int32(x)) +} +func (RecognitionConfig_AudioEncoding) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{4, 0} +} + +// Speech content will not be logged until authorized consent is opted in. +// Once it is opted in, this flag enables/disables logging to override that +// consent. default = ENABLED (logging due to consent). +type GoogleDataCollectionConfig_LoggingConsentState int32 + +const ( + GoogleDataCollectionConfig_ENABLED GoogleDataCollectionConfig_LoggingConsentState = 0 + GoogleDataCollectionConfig_DISABLED GoogleDataCollectionConfig_LoggingConsentState = 1 +) + +var GoogleDataCollectionConfig_LoggingConsentState_name = map[int32]string{ + 0: "ENABLED", + 1: "DISABLED", +} +var GoogleDataCollectionConfig_LoggingConsentState_value = map[string]int32{ + "ENABLED": 0, + "DISABLED": 1, +} + +func (x GoogleDataCollectionConfig_LoggingConsentState) String() string { + return proto.EnumName(GoogleDataCollectionConfig_LoggingConsentState_name, int32(x)) +} +func (GoogleDataCollectionConfig_LoggingConsentState) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{5, 0} +} + +// Indicates the type of speech event. +type StreamingRecognizeResponse_SpeechEventType int32 + +const ( + // No speech event specified. + StreamingRecognizeResponse_SPEECH_EVENT_UNSPECIFIED StreamingRecognizeResponse_SpeechEventType = 0 + // This event indicates that the server has detected the end of the user's + // speech utterance and expects no additional speech. Therefore, the server + // will not process additional audio (although it may subsequently return + // additional results). The client should stop sending additional audio + // data, half-close the gRPC connection, and wait for any additional results + // until the server closes the gRPC connection. This event is only sent if + // `single_utterance` was set to `true`, and is not used otherwise. + StreamingRecognizeResponse_END_OF_SINGLE_UTTERANCE StreamingRecognizeResponse_SpeechEventType = 1 +) + +var StreamingRecognizeResponse_SpeechEventType_name = map[int32]string{ + 0: "SPEECH_EVENT_UNSPECIFIED", + 1: "END_OF_SINGLE_UTTERANCE", +} +var StreamingRecognizeResponse_SpeechEventType_value = map[string]int32{ + "SPEECH_EVENT_UNSPECIFIED": 0, + "END_OF_SINGLE_UTTERANCE": 1, +} + +func (x StreamingRecognizeResponse_SpeechEventType) String() string { + return proto.EnumName(StreamingRecognizeResponse_SpeechEventType_name, int32(x)) +} +func (StreamingRecognizeResponse_SpeechEventType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{11, 0} +} + +// The top-level message sent by the client for the `Recognize` method. +type RecognizeRequest struct { + // *Required* Provides information to the recognizer that specifies how to + // process the request. + Config *RecognitionConfig `protobuf:"bytes,1,opt,name=config" json:"config,omitempty"` + // *Required* The audio data to be recognized. + Audio *RecognitionAudio `protobuf:"bytes,2,opt,name=audio" json:"audio,omitempty"` +} + +func (m *RecognizeRequest) Reset() { *m = RecognizeRequest{} } +func (m *RecognizeRequest) String() string { return proto.CompactTextString(m) } +func (*RecognizeRequest) ProtoMessage() {} +func (*RecognizeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *RecognizeRequest) GetConfig() *RecognitionConfig { + if m != nil { + return m.Config + } + return nil +} + +func (m *RecognizeRequest) GetAudio() *RecognitionAudio { + if m != nil { + return m.Audio + } + return nil +} + +// The top-level message sent by the client for the `LongRunningRecognize` +// method. +type LongRunningRecognizeRequest struct { + // *Required* Provides information to the recognizer that specifies how to + // process the request. + Config *RecognitionConfig `protobuf:"bytes,1,opt,name=config" json:"config,omitempty"` + // *Required* The audio data to be recognized. + Audio *RecognitionAudio `protobuf:"bytes,2,opt,name=audio" json:"audio,omitempty"` +} + +func (m *LongRunningRecognizeRequest) Reset() { *m = LongRunningRecognizeRequest{} } +func (m *LongRunningRecognizeRequest) String() string { return proto.CompactTextString(m) } +func (*LongRunningRecognizeRequest) ProtoMessage() {} +func (*LongRunningRecognizeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *LongRunningRecognizeRequest) GetConfig() *RecognitionConfig { + if m != nil { + return m.Config + } + return nil +} + +func (m *LongRunningRecognizeRequest) GetAudio() *RecognitionAudio { + if m != nil { + return m.Audio + } + return nil +} + +// The top-level message sent by the client for the `StreamingRecognize` method. +// Multiple `StreamingRecognizeRequest` messages are sent. The first message +// must contain a `streaming_config` message and must not contain `audio` data. +// All subsequent messages must contain `audio` data and must not contain a +// `streaming_config` message. +type StreamingRecognizeRequest struct { + // The streaming request, which is either a streaming config or audio content. + // + // Types that are valid to be assigned to StreamingRequest: + // *StreamingRecognizeRequest_StreamingConfig + // *StreamingRecognizeRequest_AudioContent + StreamingRequest isStreamingRecognizeRequest_StreamingRequest `protobuf_oneof:"streaming_request"` +} + +func (m *StreamingRecognizeRequest) Reset() { *m = StreamingRecognizeRequest{} } +func (m *StreamingRecognizeRequest) String() string { return proto.CompactTextString(m) } +func (*StreamingRecognizeRequest) ProtoMessage() {} +func (*StreamingRecognizeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +type isStreamingRecognizeRequest_StreamingRequest interface { + isStreamingRecognizeRequest_StreamingRequest() +} + +type StreamingRecognizeRequest_StreamingConfig struct { + StreamingConfig *StreamingRecognitionConfig `protobuf:"bytes,1,opt,name=streaming_config,json=streamingConfig,oneof"` +} +type StreamingRecognizeRequest_AudioContent struct { + AudioContent []byte `protobuf:"bytes,2,opt,name=audio_content,json=audioContent,proto3,oneof"` +} + +func (*StreamingRecognizeRequest_StreamingConfig) isStreamingRecognizeRequest_StreamingRequest() {} +func (*StreamingRecognizeRequest_AudioContent) isStreamingRecognizeRequest_StreamingRequest() {} + +func (m *StreamingRecognizeRequest) GetStreamingRequest() isStreamingRecognizeRequest_StreamingRequest { + if m != nil { + return m.StreamingRequest + } + return nil +} + +func (m *StreamingRecognizeRequest) GetStreamingConfig() *StreamingRecognitionConfig { + if x, ok := m.GetStreamingRequest().(*StreamingRecognizeRequest_StreamingConfig); ok { + return x.StreamingConfig + } + return nil +} + +func (m *StreamingRecognizeRequest) GetAudioContent() []byte { + if x, ok := m.GetStreamingRequest().(*StreamingRecognizeRequest_AudioContent); ok { + return x.AudioContent + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*StreamingRecognizeRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _StreamingRecognizeRequest_OneofMarshaler, _StreamingRecognizeRequest_OneofUnmarshaler, _StreamingRecognizeRequest_OneofSizer, []interface{}{ + (*StreamingRecognizeRequest_StreamingConfig)(nil), + (*StreamingRecognizeRequest_AudioContent)(nil), + } +} + +func _StreamingRecognizeRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*StreamingRecognizeRequest) + // streaming_request + switch x := m.StreamingRequest.(type) { + case *StreamingRecognizeRequest_StreamingConfig: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.StreamingConfig); err != nil { + return err + } + case *StreamingRecognizeRequest_AudioContent: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeRawBytes(x.AudioContent) + case nil: + default: + return fmt.Errorf("StreamingRecognizeRequest.StreamingRequest has unexpected type %T", x) + } + return nil +} + +func _StreamingRecognizeRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*StreamingRecognizeRequest) + switch tag { + case 1: // streaming_request.streaming_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(StreamingRecognitionConfig) + err := b.DecodeMessage(msg) + m.StreamingRequest = &StreamingRecognizeRequest_StreamingConfig{msg} + return true, err + case 2: // streaming_request.audio_content + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.StreamingRequest = &StreamingRecognizeRequest_AudioContent{x} + return true, err + default: + return false, nil + } +} + +func _StreamingRecognizeRequest_OneofSizer(msg proto.Message) (n int) { + m := msg.(*StreamingRecognizeRequest) + // streaming_request + switch x := m.StreamingRequest.(type) { + case *StreamingRecognizeRequest_StreamingConfig: + s := proto.Size(x.StreamingConfig) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *StreamingRecognizeRequest_AudioContent: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.AudioContent))) + n += len(x.AudioContent) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Provides information to the recognizer that specifies how to process the +// request. +type StreamingRecognitionConfig struct { + // *Required* Provides information to the recognizer that specifies how to + // process the request. + Config *RecognitionConfig `protobuf:"bytes,1,opt,name=config" json:"config,omitempty"` + // *Optional* If `false` or omitted, the recognizer will perform continuous + // recognition (continuing to wait for and process audio even if the user + // pauses speaking) until the client closes the input stream (gRPC API) or + // until the maximum time limit has been reached. May return multiple + // `StreamingRecognitionResult`s with the `is_final` flag set to `true`. + // + // If `true`, the recognizer will detect a single spoken utterance. When it + // detects that the user has paused or stopped speaking, it will return an + // `END_OF_SINGLE_UTTERANCE` event and cease recognition. It will return no + // more than one `StreamingRecognitionResult` with the `is_final` flag set to + // `true`. + SingleUtterance bool `protobuf:"varint,2,opt,name=single_utterance,json=singleUtterance" json:"single_utterance,omitempty"` + // *Optional* If `true`, interim results (tentative hypotheses) may be + // returned as they become available (these interim results are indicated with + // the `is_final=false` flag). + // If `false` or omitted, only `is_final=true` result(s) are returned. + InterimResults bool `protobuf:"varint,3,opt,name=interim_results,json=interimResults" json:"interim_results,omitempty"` +} + +func (m *StreamingRecognitionConfig) Reset() { *m = StreamingRecognitionConfig{} } +func (m *StreamingRecognitionConfig) String() string { return proto.CompactTextString(m) } +func (*StreamingRecognitionConfig) ProtoMessage() {} +func (*StreamingRecognitionConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *StreamingRecognitionConfig) GetConfig() *RecognitionConfig { + if m != nil { + return m.Config + } + return nil +} + +func (m *StreamingRecognitionConfig) GetSingleUtterance() bool { + if m != nil { + return m.SingleUtterance + } + return false +} + +func (m *StreamingRecognitionConfig) GetInterimResults() bool { + if m != nil { + return m.InterimResults + } + return false +} + +// Provides information to the recognizer that specifies how to process the +// request. +type RecognitionConfig struct { + // Encoding of audio data sent in all `RecognitionAudio` messages. + // This field is optional for `FLAC` and `WAV` audio files and required + // for all other audio formats. For details, see [AudioEncoding][google.cloud.speech.v1p1beta1.RecognitionConfig.AudioEncoding]. + Encoding RecognitionConfig_AudioEncoding `protobuf:"varint,1,opt,name=encoding,enum=google.cloud.speech.v1p1beta1.RecognitionConfig_AudioEncoding" json:"encoding,omitempty"` + // Sample rate in Hertz of the audio data sent in all + // `RecognitionAudio` messages. Valid values are: 8000-48000. + // 16000 is optimal. For best results, set the sampling rate of the audio + // source to 16000 Hz. If that's not possible, use the native sample rate of + // the audio source (instead of re-sampling). + // This field is optional for `FLAC` and `WAV` audio files and required + // for all other audio formats. For details, see [AudioEncoding][google.cloud.speech.v1p1beta1.RecognitionConfig.AudioEncoding]. + SampleRateHertz int32 `protobuf:"varint,2,opt,name=sample_rate_hertz,json=sampleRateHertz" json:"sample_rate_hertz,omitempty"` + // *Required* The language of the supplied audio as a + // [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag. + // Example: "en-US". + // See [Language Support](https://cloud.google.com/speech/docs/languages) + // for a list of the currently supported language codes. + LanguageCode string `protobuf:"bytes,3,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` + // *Optional* Maximum number of recognition hypotheses to be returned. + // Specifically, the maximum number of `SpeechRecognitionAlternative` messages + // within each `SpeechRecognitionResult`. + // The server may return fewer than `max_alternatives`. + // Valid values are `0`-`30`. A value of `0` or `1` will return a maximum of + // one. If omitted, will return a maximum of one. + MaxAlternatives int32 `protobuf:"varint,4,opt,name=max_alternatives,json=maxAlternatives" json:"max_alternatives,omitempty"` + // *Optional* If set to `true`, the server will attempt to filter out + // profanities, replacing all but the initial character in each filtered word + // with asterisks, e.g. "f***". If set to `false` or omitted, profanities + // won't be filtered out. + ProfanityFilter bool `protobuf:"varint,5,opt,name=profanity_filter,json=profanityFilter" json:"profanity_filter,omitempty"` + // *Optional* A means to provide context to assist the speech recognition. + SpeechContexts []*SpeechContext `protobuf:"bytes,6,rep,name=speech_contexts,json=speechContexts" json:"speech_contexts,omitempty"` + // *Optional* If `true`, the top result includes a list of words and + // the start and end time offsets (timestamps) for those words. If + // `false`, no word-level time offset information is returned. The default is + // `false`. + EnableWordTimeOffsets bool `protobuf:"varint,8,opt,name=enable_word_time_offsets,json=enableWordTimeOffsets" json:"enable_word_time_offsets,omitempty"` + // *Optional* Which model to select for the given request. Select the model + // best suited to your domain to get best results. If a model is not + // explicitly specified, then we auto-select a model based on the parameters + // in the RecognitionConfig. + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + //
ModelDescription
command_and_searchBest for short queries such as voice commands or voice search.
phone_callBest for audio that originated from a phone call (typically + // recorded at an 8khz sampling rate).
videoBest for audio that originated from from video or includes multiple + // speakers. Ideally the audio is recorded at a 16khz or greater + // sampling rate. This is a premium model that costs more than the + // standard rate.
defaultBest for audio that is not one of the specific audio models. + // For example, long-form audio. Ideally the audio is high-fidelity, + // recorded at a 16khz or greater sampling rate.
+ Model string `protobuf:"bytes,13,opt,name=model" json:"model,omitempty"` + // *Optional* Set to true to use an enhanced model for speech recognition. + // You must also set the `model` field to a valid, enhanced model. If + // `use_enhanced` is set to true and the `model` field is not set, then + // `use_enhanced` is ignored. If `use_enhanced` is true and an enhanced + // version of the specified model does not exist, then the speech is + // recognized using the standard version of the specified model. + // + // Enhanced speech models require that you enable audio logging for + // your request. To enable audio logging, set the `loggingConsentState` field + // to ENABLED in the [GoogleDataCollectionConfig][] section of your request. + // You must also opt-in to the audio logging alpha using the instructions in + // the [alpha documentation](/speech/data-sharing). If you set `use_enhanced` + // to true and you have not enabled audio logging, then you will receive + // an error. + UseEnhanced bool `protobuf:"varint,14,opt,name=use_enhanced,json=useEnhanced" json:"use_enhanced,omitempty"` + // *Optional* Contains settings to opt-in to allow Google to + // collect and use data from this request to improve Google's products and + // services. + GoogleDataCollectionOptIn *GoogleDataCollectionConfig `protobuf:"bytes,10,opt,name=google_data_collection_opt_in,json=googleDataCollectionOptIn" json:"google_data_collection_opt_in,omitempty"` +} + +func (m *RecognitionConfig) Reset() { *m = RecognitionConfig{} } +func (m *RecognitionConfig) String() string { return proto.CompactTextString(m) } +func (*RecognitionConfig) ProtoMessage() {} +func (*RecognitionConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *RecognitionConfig) GetEncoding() RecognitionConfig_AudioEncoding { + if m != nil { + return m.Encoding + } + return RecognitionConfig_ENCODING_UNSPECIFIED +} + +func (m *RecognitionConfig) GetSampleRateHertz() int32 { + if m != nil { + return m.SampleRateHertz + } + return 0 +} + +func (m *RecognitionConfig) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +func (m *RecognitionConfig) GetMaxAlternatives() int32 { + if m != nil { + return m.MaxAlternatives + } + return 0 +} + +func (m *RecognitionConfig) GetProfanityFilter() bool { + if m != nil { + return m.ProfanityFilter + } + return false +} + +func (m *RecognitionConfig) GetSpeechContexts() []*SpeechContext { + if m != nil { + return m.SpeechContexts + } + return nil +} + +func (m *RecognitionConfig) GetEnableWordTimeOffsets() bool { + if m != nil { + return m.EnableWordTimeOffsets + } + return false +} + +func (m *RecognitionConfig) GetModel() string { + if m != nil { + return m.Model + } + return "" +} + +func (m *RecognitionConfig) GetUseEnhanced() bool { + if m != nil { + return m.UseEnhanced + } + return false +} + +func (m *RecognitionConfig) GetGoogleDataCollectionOptIn() *GoogleDataCollectionConfig { + if m != nil { + return m.GoogleDataCollectionOptIn + } + return nil +} + +// Google data collection opt-in settings. +type GoogleDataCollectionConfig struct { + LoggingConsentState GoogleDataCollectionConfig_LoggingConsentState `protobuf:"varint,1,opt,name=logging_consent_state,json=loggingConsentState,enum=google.cloud.speech.v1p1beta1.GoogleDataCollectionConfig_LoggingConsentState" json:"logging_consent_state,omitempty"` +} + +func (m *GoogleDataCollectionConfig) Reset() { *m = GoogleDataCollectionConfig{} } +func (m *GoogleDataCollectionConfig) String() string { return proto.CompactTextString(m) } +func (*GoogleDataCollectionConfig) ProtoMessage() {} +func (*GoogleDataCollectionConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *GoogleDataCollectionConfig) GetLoggingConsentState() GoogleDataCollectionConfig_LoggingConsentState { + if m != nil { + return m.LoggingConsentState + } + return GoogleDataCollectionConfig_ENABLED +} + +// Provides "hints" to the speech recognizer to favor specific words and phrases +// in the results. +type SpeechContext struct { + // *Optional* A list of strings containing words and phrases "hints" so that + // the speech recognition is more likely to recognize them. This can be used + // to improve the accuracy for specific words and phrases, for example, if + // specific commands are typically spoken by the user. This can also be used + // to add additional words to the vocabulary of the recognizer. See + // [usage limits](https://cloud.google.com/speech/limits#content). + Phrases []string `protobuf:"bytes,1,rep,name=phrases" json:"phrases,omitempty"` +} + +func (m *SpeechContext) Reset() { *m = SpeechContext{} } +func (m *SpeechContext) String() string { return proto.CompactTextString(m) } +func (*SpeechContext) ProtoMessage() {} +func (*SpeechContext) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *SpeechContext) GetPhrases() []string { + if m != nil { + return m.Phrases + } + return nil +} + +// Contains audio data in the encoding specified in the `RecognitionConfig`. +// Either `content` or `uri` must be supplied. Supplying both or neither +// returns [google.rpc.Code.INVALID_ARGUMENT][google.rpc.Code.INVALID_ARGUMENT]. See +// [audio limits](https://cloud.google.com/speech/limits#content). +type RecognitionAudio struct { + // The audio source, which is either inline content or a Google Cloud + // Storage uri. + // + // Types that are valid to be assigned to AudioSource: + // *RecognitionAudio_Content + // *RecognitionAudio_Uri + AudioSource isRecognitionAudio_AudioSource `protobuf_oneof:"audio_source"` +} + +func (m *RecognitionAudio) Reset() { *m = RecognitionAudio{} } +func (m *RecognitionAudio) String() string { return proto.CompactTextString(m) } +func (*RecognitionAudio) ProtoMessage() {} +func (*RecognitionAudio) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +type isRecognitionAudio_AudioSource interface { + isRecognitionAudio_AudioSource() +} + +type RecognitionAudio_Content struct { + Content []byte `protobuf:"bytes,1,opt,name=content,proto3,oneof"` +} +type RecognitionAudio_Uri struct { + Uri string `protobuf:"bytes,2,opt,name=uri,oneof"` +} + +func (*RecognitionAudio_Content) isRecognitionAudio_AudioSource() {} +func (*RecognitionAudio_Uri) isRecognitionAudio_AudioSource() {} + +func (m *RecognitionAudio) GetAudioSource() isRecognitionAudio_AudioSource { + if m != nil { + return m.AudioSource + } + return nil +} + +func (m *RecognitionAudio) GetContent() []byte { + if x, ok := m.GetAudioSource().(*RecognitionAudio_Content); ok { + return x.Content + } + return nil +} + +func (m *RecognitionAudio) GetUri() string { + if x, ok := m.GetAudioSource().(*RecognitionAudio_Uri); ok { + return x.Uri + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*RecognitionAudio) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _RecognitionAudio_OneofMarshaler, _RecognitionAudio_OneofUnmarshaler, _RecognitionAudio_OneofSizer, []interface{}{ + (*RecognitionAudio_Content)(nil), + (*RecognitionAudio_Uri)(nil), + } +} + +func _RecognitionAudio_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*RecognitionAudio) + // audio_source + switch x := m.AudioSource.(type) { + case *RecognitionAudio_Content: + b.EncodeVarint(1<<3 | proto.WireBytes) + b.EncodeRawBytes(x.Content) + case *RecognitionAudio_Uri: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Uri) + case nil: + default: + return fmt.Errorf("RecognitionAudio.AudioSource has unexpected type %T", x) + } + return nil +} + +func _RecognitionAudio_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*RecognitionAudio) + switch tag { + case 1: // audio_source.content + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.AudioSource = &RecognitionAudio_Content{x} + return true, err + case 2: // audio_source.uri + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.AudioSource = &RecognitionAudio_Uri{x} + return true, err + default: + return false, nil + } +} + +func _RecognitionAudio_OneofSizer(msg proto.Message) (n int) { + m := msg.(*RecognitionAudio) + // audio_source + switch x := m.AudioSource.(type) { + case *RecognitionAudio_Content: + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Content))) + n += len(x.Content) + case *RecognitionAudio_Uri: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Uri))) + n += len(x.Uri) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The only message returned to the client by the `Recognize` method. It +// contains the result as zero or more sequential `SpeechRecognitionResult` +// messages. +type RecognizeResponse struct { + // *Output-only* Sequential list of transcription results corresponding to + // sequential portions of audio. + Results []*SpeechRecognitionResult `protobuf:"bytes,2,rep,name=results" json:"results,omitempty"` +} + +func (m *RecognizeResponse) Reset() { *m = RecognizeResponse{} } +func (m *RecognizeResponse) String() string { return proto.CompactTextString(m) } +func (*RecognizeResponse) ProtoMessage() {} +func (*RecognizeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *RecognizeResponse) GetResults() []*SpeechRecognitionResult { + if m != nil { + return m.Results + } + return nil +} + +// The only message returned to the client by the `LongRunningRecognize` method. +// It contains the result as zero or more sequential `SpeechRecognitionResult` +// messages. It is included in the `result.response` field of the `Operation` +// returned by the `GetOperation` call of the `google::longrunning::Operations` +// service. +type LongRunningRecognizeResponse struct { + // *Output-only* Sequential list of transcription results corresponding to + // sequential portions of audio. + Results []*SpeechRecognitionResult `protobuf:"bytes,2,rep,name=results" json:"results,omitempty"` +} + +func (m *LongRunningRecognizeResponse) Reset() { *m = LongRunningRecognizeResponse{} } +func (m *LongRunningRecognizeResponse) String() string { return proto.CompactTextString(m) } +func (*LongRunningRecognizeResponse) ProtoMessage() {} +func (*LongRunningRecognizeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *LongRunningRecognizeResponse) GetResults() []*SpeechRecognitionResult { + if m != nil { + return m.Results + } + return nil +} + +// Describes the progress of a long-running `LongRunningRecognize` call. It is +// included in the `metadata` field of the `Operation` returned by the +// `GetOperation` call of the `google::longrunning::Operations` service. +type LongRunningRecognizeMetadata struct { + // Approximate percentage of audio processed thus far. Guaranteed to be 100 + // when the audio is fully processed and the results are available. + ProgressPercent int32 `protobuf:"varint,1,opt,name=progress_percent,json=progressPercent" json:"progress_percent,omitempty"` + // Time when the request was received. + StartTime *google_protobuf4.Timestamp `protobuf:"bytes,2,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // Time of the most recent processing update. + LastUpdateTime *google_protobuf4.Timestamp `protobuf:"bytes,3,opt,name=last_update_time,json=lastUpdateTime" json:"last_update_time,omitempty"` +} + +func (m *LongRunningRecognizeMetadata) Reset() { *m = LongRunningRecognizeMetadata{} } +func (m *LongRunningRecognizeMetadata) String() string { return proto.CompactTextString(m) } +func (*LongRunningRecognizeMetadata) ProtoMessage() {} +func (*LongRunningRecognizeMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *LongRunningRecognizeMetadata) GetProgressPercent() int32 { + if m != nil { + return m.ProgressPercent + } + return 0 +} + +func (m *LongRunningRecognizeMetadata) GetStartTime() *google_protobuf4.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *LongRunningRecognizeMetadata) GetLastUpdateTime() *google_protobuf4.Timestamp { + if m != nil { + return m.LastUpdateTime + } + return nil +} + +// `StreamingRecognizeResponse` is the only message returned to the client by +// `StreamingRecognize`. A series of zero or more `StreamingRecognizeResponse` +// messages are streamed back to the client. If there is no recognizable +// audio, and `single_utterance` is set to false, then no messages are streamed +// back to the client. +// +// Here's an example of a series of ten `StreamingRecognizeResponse`s that might +// be returned while processing audio: +// +// 1. results { alternatives { transcript: "tube" } stability: 0.01 } +// +// 2. results { alternatives { transcript: "to be a" } stability: 0.01 } +// +// 3. results { alternatives { transcript: "to be" } stability: 0.9 } +// results { alternatives { transcript: " or not to be" } stability: 0.01 } +// +// 4. results { alternatives { transcript: "to be or not to be" +// confidence: 0.92 } +// alternatives { transcript: "to bee or not to bee" } +// is_final: true } +// +// 5. results { alternatives { transcript: " that's" } stability: 0.01 } +// +// 6. results { alternatives { transcript: " that is" } stability: 0.9 } +// results { alternatives { transcript: " the question" } stability: 0.01 } +// +// 7. results { alternatives { transcript: " that is the question" +// confidence: 0.98 } +// alternatives { transcript: " that was the question" } +// is_final: true } +// +// Notes: +// +// - Only two of the above responses #4 and #7 contain final results; they are +// indicated by `is_final: true`. Concatenating these together generates the +// full transcript: "to be or not to be that is the question". +// +// - The others contain interim `results`. #3 and #6 contain two interim +// `results`: the first portion has a high stability and is less likely to +// change; the second portion has a low stability and is very likely to +// change. A UI designer might choose to show only high stability `results`. +// +// - The specific `stability` and `confidence` values shown above are only for +// illustrative purposes. Actual values may vary. +// +// - In each response, only one of these fields will be set: +// `error`, +// `speech_event_type`, or +// one or more (repeated) `results`. +type StreamingRecognizeResponse struct { + // *Output-only* If set, returns a [google.rpc.Status][google.rpc.Status] message that + // specifies the error for the operation. + Error *google_rpc.Status `protobuf:"bytes,1,opt,name=error" json:"error,omitempty"` + // *Output-only* This repeated list contains zero or more results that + // correspond to consecutive portions of the audio currently being processed. + // It contains zero or one `is_final=true` result (the newly settled portion), + // followed by zero or more `is_final=false` results (the interim results). + Results []*StreamingRecognitionResult `protobuf:"bytes,2,rep,name=results" json:"results,omitempty"` + // *Output-only* Indicates the type of speech event. + SpeechEventType StreamingRecognizeResponse_SpeechEventType `protobuf:"varint,4,opt,name=speech_event_type,json=speechEventType,enum=google.cloud.speech.v1p1beta1.StreamingRecognizeResponse_SpeechEventType" json:"speech_event_type,omitempty"` +} + +func (m *StreamingRecognizeResponse) Reset() { *m = StreamingRecognizeResponse{} } +func (m *StreamingRecognizeResponse) String() string { return proto.CompactTextString(m) } +func (*StreamingRecognizeResponse) ProtoMessage() {} +func (*StreamingRecognizeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *StreamingRecognizeResponse) GetError() *google_rpc.Status { + if m != nil { + return m.Error + } + return nil +} + +func (m *StreamingRecognizeResponse) GetResults() []*StreamingRecognitionResult { + if m != nil { + return m.Results + } + return nil +} + +func (m *StreamingRecognizeResponse) GetSpeechEventType() StreamingRecognizeResponse_SpeechEventType { + if m != nil { + return m.SpeechEventType + } + return StreamingRecognizeResponse_SPEECH_EVENT_UNSPECIFIED +} + +// A streaming speech recognition result corresponding to a portion of the audio +// that is currently being processed. +type StreamingRecognitionResult struct { + // *Output-only* May contain one or more recognition hypotheses (up to the + // maximum specified in `max_alternatives`). + // These alternatives are ordered in terms of accuracy, with the top (first) + // alternative being the most probable, as ranked by the recognizer. + Alternatives []*SpeechRecognitionAlternative `protobuf:"bytes,1,rep,name=alternatives" json:"alternatives,omitempty"` + // *Output-only* If `false`, this `StreamingRecognitionResult` represents an + // interim result that may change. If `true`, this is the final time the + // speech service will return this particular `StreamingRecognitionResult`, + // the recognizer will not return any further hypotheses for this portion of + // the transcript and corresponding audio. + IsFinal bool `protobuf:"varint,2,opt,name=is_final,json=isFinal" json:"is_final,omitempty"` + // *Output-only* An estimate of the likelihood that the recognizer will not + // change its guess about this interim result. Values range from 0.0 + // (completely unstable) to 1.0 (completely stable). + // This field is only provided for interim results (`is_final=false`). + // The default of 0.0 is a sentinel value indicating `stability` was not set. + Stability float32 `protobuf:"fixed32,3,opt,name=stability" json:"stability,omitempty"` +} + +func (m *StreamingRecognitionResult) Reset() { *m = StreamingRecognitionResult{} } +func (m *StreamingRecognitionResult) String() string { return proto.CompactTextString(m) } +func (*StreamingRecognitionResult) ProtoMessage() {} +func (*StreamingRecognitionResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *StreamingRecognitionResult) GetAlternatives() []*SpeechRecognitionAlternative { + if m != nil { + return m.Alternatives + } + return nil +} + +func (m *StreamingRecognitionResult) GetIsFinal() bool { + if m != nil { + return m.IsFinal + } + return false +} + +func (m *StreamingRecognitionResult) GetStability() float32 { + if m != nil { + return m.Stability + } + return 0 +} + +// A speech recognition result corresponding to a portion of the audio. +type SpeechRecognitionResult struct { + // *Output-only* May contain one or more recognition hypotheses (up to the + // maximum specified in `max_alternatives`). + // These alternatives are ordered in terms of accuracy, with the top (first) + // alternative being the most probable, as ranked by the recognizer. + Alternatives []*SpeechRecognitionAlternative `protobuf:"bytes,1,rep,name=alternatives" json:"alternatives,omitempty"` +} + +func (m *SpeechRecognitionResult) Reset() { *m = SpeechRecognitionResult{} } +func (m *SpeechRecognitionResult) String() string { return proto.CompactTextString(m) } +func (*SpeechRecognitionResult) ProtoMessage() {} +func (*SpeechRecognitionResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +func (m *SpeechRecognitionResult) GetAlternatives() []*SpeechRecognitionAlternative { + if m != nil { + return m.Alternatives + } + return nil +} + +// Alternative hypotheses (a.k.a. n-best list). +type SpeechRecognitionAlternative struct { + // *Output-only* Transcript text representing the words that the user spoke. + Transcript string `protobuf:"bytes,1,opt,name=transcript" json:"transcript,omitempty"` + // *Output-only* The confidence estimate between 0.0 and 1.0. A higher number + // indicates an estimated greater likelihood that the recognized words are + // correct. This field is set only for the top alternative of a non-streaming + // result or, of a streaming result where `is_final=true`. + // This field is not guaranteed to be accurate and users should not rely on it + // to be always provided. + // The default of 0.0 is a sentinel value indicating `confidence` was not set. + Confidence float32 `protobuf:"fixed32,2,opt,name=confidence" json:"confidence,omitempty"` + // *Output-only* A list of word-specific information for each recognized word. + Words []*WordInfo `protobuf:"bytes,3,rep,name=words" json:"words,omitempty"` +} + +func (m *SpeechRecognitionAlternative) Reset() { *m = SpeechRecognitionAlternative{} } +func (m *SpeechRecognitionAlternative) String() string { return proto.CompactTextString(m) } +func (*SpeechRecognitionAlternative) ProtoMessage() {} +func (*SpeechRecognitionAlternative) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +func (m *SpeechRecognitionAlternative) GetTranscript() string { + if m != nil { + return m.Transcript + } + return "" +} + +func (m *SpeechRecognitionAlternative) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + +func (m *SpeechRecognitionAlternative) GetWords() []*WordInfo { + if m != nil { + return m.Words + } + return nil +} + +// Word-specific information for recognized words. +type WordInfo struct { + // *Output-only* Time offset relative to the beginning of the audio, + // and corresponding to the start of the spoken word. + // This field is only set if `enable_word_time_offsets=true` and only + // in the top hypothesis. + // This is an experimental feature and the accuracy of the time offset can + // vary. + StartTime *google_protobuf3.Duration `protobuf:"bytes,1,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // *Output-only* Time offset relative to the beginning of the audio, + // and corresponding to the end of the spoken word. + // This field is only set if `enable_word_time_offsets=true` and only + // in the top hypothesis. + // This is an experimental feature and the accuracy of the time offset can + // vary. + EndTime *google_protobuf3.Duration `protobuf:"bytes,2,opt,name=end_time,json=endTime" json:"end_time,omitempty"` + // *Output-only* The word corresponding to this set of information. + Word string `protobuf:"bytes,3,opt,name=word" json:"word,omitempty"` +} + +func (m *WordInfo) Reset() { *m = WordInfo{} } +func (m *WordInfo) String() string { return proto.CompactTextString(m) } +func (*WordInfo) ProtoMessage() {} +func (*WordInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +func (m *WordInfo) GetStartTime() *google_protobuf3.Duration { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *WordInfo) GetEndTime() *google_protobuf3.Duration { + if m != nil { + return m.EndTime + } + return nil +} + +func (m *WordInfo) GetWord() string { + if m != nil { + return m.Word + } + return "" +} + +func init() { + proto.RegisterType((*RecognizeRequest)(nil), "google.cloud.speech.v1p1beta1.RecognizeRequest") + proto.RegisterType((*LongRunningRecognizeRequest)(nil), "google.cloud.speech.v1p1beta1.LongRunningRecognizeRequest") + proto.RegisterType((*StreamingRecognizeRequest)(nil), "google.cloud.speech.v1p1beta1.StreamingRecognizeRequest") + proto.RegisterType((*StreamingRecognitionConfig)(nil), "google.cloud.speech.v1p1beta1.StreamingRecognitionConfig") + proto.RegisterType((*RecognitionConfig)(nil), "google.cloud.speech.v1p1beta1.RecognitionConfig") + proto.RegisterType((*GoogleDataCollectionConfig)(nil), "google.cloud.speech.v1p1beta1.GoogleDataCollectionConfig") + proto.RegisterType((*SpeechContext)(nil), "google.cloud.speech.v1p1beta1.SpeechContext") + proto.RegisterType((*RecognitionAudio)(nil), "google.cloud.speech.v1p1beta1.RecognitionAudio") + proto.RegisterType((*RecognizeResponse)(nil), "google.cloud.speech.v1p1beta1.RecognizeResponse") + proto.RegisterType((*LongRunningRecognizeResponse)(nil), "google.cloud.speech.v1p1beta1.LongRunningRecognizeResponse") + proto.RegisterType((*LongRunningRecognizeMetadata)(nil), "google.cloud.speech.v1p1beta1.LongRunningRecognizeMetadata") + proto.RegisterType((*StreamingRecognizeResponse)(nil), "google.cloud.speech.v1p1beta1.StreamingRecognizeResponse") + proto.RegisterType((*StreamingRecognitionResult)(nil), "google.cloud.speech.v1p1beta1.StreamingRecognitionResult") + proto.RegisterType((*SpeechRecognitionResult)(nil), "google.cloud.speech.v1p1beta1.SpeechRecognitionResult") + proto.RegisterType((*SpeechRecognitionAlternative)(nil), "google.cloud.speech.v1p1beta1.SpeechRecognitionAlternative") + proto.RegisterType((*WordInfo)(nil), "google.cloud.speech.v1p1beta1.WordInfo") + proto.RegisterEnum("google.cloud.speech.v1p1beta1.RecognitionConfig_AudioEncoding", RecognitionConfig_AudioEncoding_name, RecognitionConfig_AudioEncoding_value) + proto.RegisterEnum("google.cloud.speech.v1p1beta1.GoogleDataCollectionConfig_LoggingConsentState", GoogleDataCollectionConfig_LoggingConsentState_name, GoogleDataCollectionConfig_LoggingConsentState_value) + proto.RegisterEnum("google.cloud.speech.v1p1beta1.StreamingRecognizeResponse_SpeechEventType", StreamingRecognizeResponse_SpeechEventType_name, StreamingRecognizeResponse_SpeechEventType_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for Speech service + +type SpeechClient interface { + // Performs synchronous speech recognition: receive results after all audio + // has been sent and processed. + Recognize(ctx context.Context, in *RecognizeRequest, opts ...grpc.CallOption) (*RecognizeResponse, error) + // Performs asynchronous speech recognition: receive results via the + // google.longrunning.Operations interface. Returns either an + // `Operation.error` or an `Operation.response` which contains + // a `LongRunningRecognizeResponse` message. + LongRunningRecognize(ctx context.Context, in *LongRunningRecognizeRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Performs bidirectional streaming speech recognition: receive results while + // sending audio. This method is only available via the gRPC API (not REST). + StreamingRecognize(ctx context.Context, opts ...grpc.CallOption) (Speech_StreamingRecognizeClient, error) +} + +type speechClient struct { + cc *grpc.ClientConn +} + +func NewSpeechClient(cc *grpc.ClientConn) SpeechClient { + return &speechClient{cc} +} + +func (c *speechClient) Recognize(ctx context.Context, in *RecognizeRequest, opts ...grpc.CallOption) (*RecognizeResponse, error) { + out := new(RecognizeResponse) + err := grpc.Invoke(ctx, "/google.cloud.speech.v1p1beta1.Speech/Recognize", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *speechClient) LongRunningRecognize(ctx context.Context, in *LongRunningRecognizeRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.speech.v1p1beta1.Speech/LongRunningRecognize", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *speechClient) StreamingRecognize(ctx context.Context, opts ...grpc.CallOption) (Speech_StreamingRecognizeClient, error) { + stream, err := grpc.NewClientStream(ctx, &_Speech_serviceDesc.Streams[0], c.cc, "/google.cloud.speech.v1p1beta1.Speech/StreamingRecognize", opts...) + if err != nil { + return nil, err + } + x := &speechStreamingRecognizeClient{stream} + return x, nil +} + +type Speech_StreamingRecognizeClient interface { + Send(*StreamingRecognizeRequest) error + Recv() (*StreamingRecognizeResponse, error) + grpc.ClientStream +} + +type speechStreamingRecognizeClient struct { + grpc.ClientStream +} + +func (x *speechStreamingRecognizeClient) Send(m *StreamingRecognizeRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *speechStreamingRecognizeClient) Recv() (*StreamingRecognizeResponse, error) { + m := new(StreamingRecognizeResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// Server API for Speech service + +type SpeechServer interface { + // Performs synchronous speech recognition: receive results after all audio + // has been sent and processed. + Recognize(context.Context, *RecognizeRequest) (*RecognizeResponse, error) + // Performs asynchronous speech recognition: receive results via the + // google.longrunning.Operations interface. Returns either an + // `Operation.error` or an `Operation.response` which contains + // a `LongRunningRecognizeResponse` message. + LongRunningRecognize(context.Context, *LongRunningRecognizeRequest) (*google_longrunning.Operation, error) + // Performs bidirectional streaming speech recognition: receive results while + // sending audio. This method is only available via the gRPC API (not REST). + StreamingRecognize(Speech_StreamingRecognizeServer) error +} + +func RegisterSpeechServer(s *grpc.Server, srv SpeechServer) { + s.RegisterService(&_Speech_serviceDesc, srv) +} + +func _Speech_Recognize_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RecognizeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SpeechServer).Recognize(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.speech.v1p1beta1.Speech/Recognize", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SpeechServer).Recognize(ctx, req.(*RecognizeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Speech_LongRunningRecognize_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(LongRunningRecognizeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SpeechServer).LongRunningRecognize(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.speech.v1p1beta1.Speech/LongRunningRecognize", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SpeechServer).LongRunningRecognize(ctx, req.(*LongRunningRecognizeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Speech_StreamingRecognize_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(SpeechServer).StreamingRecognize(&speechStreamingRecognizeServer{stream}) +} + +type Speech_StreamingRecognizeServer interface { + Send(*StreamingRecognizeResponse) error + Recv() (*StreamingRecognizeRequest, error) + grpc.ServerStream +} + +type speechStreamingRecognizeServer struct { + grpc.ServerStream +} + +func (x *speechStreamingRecognizeServer) Send(m *StreamingRecognizeResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *speechStreamingRecognizeServer) Recv() (*StreamingRecognizeRequest, error) { + m := new(StreamingRecognizeRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +var _Speech_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.speech.v1p1beta1.Speech", + HandlerType: (*SpeechServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Recognize", + Handler: _Speech_Recognize_Handler, + }, + { + MethodName: "LongRunningRecognize", + Handler: _Speech_LongRunningRecognize_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "StreamingRecognize", + Handler: _Speech_StreamingRecognize_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: "google/cloud/speech/v1p1beta1/cloud_speech.proto", +} + +func init() { proto.RegisterFile("google/cloud/speech/v1p1beta1/cloud_speech.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 1477 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x57, 0xbd, 0x6f, 0x1b, 0x47, + 0x16, 0xd7, 0x8a, 0xa2, 0x28, 0x3d, 0x7d, 0x51, 0x63, 0xfb, 0x4c, 0xd1, 0xb2, 0x4f, 0x5e, 0xe3, + 0x6c, 0xd9, 0x77, 0x20, 0x25, 0xdd, 0xc1, 0xe7, 0x0f, 0xdc, 0x01, 0x14, 0xb9, 0x12, 0x09, 0x50, + 0x94, 0x30, 0xa4, 0x4e, 0x77, 0x6e, 0x06, 0x23, 0x72, 0xb8, 0x5a, 0x60, 0xb9, 0xbb, 0xb7, 0x33, + 0xeb, 0x58, 0x4a, 0x95, 0xb4, 0x41, 0xd2, 0x04, 0x48, 0x97, 0x2a, 0xa9, 0x53, 0xa6, 0x48, 0x93, + 0x3e, 0x65, 0xd2, 0xa4, 0x4c, 0x91, 0x2a, 0x7f, 0x41, 0xca, 0x60, 0x66, 0x76, 0x29, 0x52, 0xdf, + 0x16, 0x62, 0x20, 0xdd, 0xce, 0xef, 0x7d, 0xcc, 0x9b, 0xb7, 0xf3, 0x7e, 0xef, 0x0d, 0xac, 0xd8, + 0xbe, 0x6f, 0xbb, 0xac, 0xd8, 0x76, 0xfd, 0xa8, 0x53, 0xe4, 0x01, 0x63, 0xed, 0x83, 0xe2, 0xeb, + 0xd5, 0x60, 0x75, 0x9f, 0x09, 0xba, 0xaa, 0x61, 0xa2, 0xe1, 0x42, 0x10, 0xfa, 0xc2, 0x47, 0x77, + 0xb5, 0x45, 0x41, 0x89, 0x0a, 0xb1, 0xa8, 0x6f, 0x91, 0x5f, 0x8c, 0x1d, 0xd2, 0xc0, 0x29, 0x52, + 0xcf, 0xf3, 0x05, 0x15, 0x8e, 0xef, 0x71, 0x6d, 0x9c, 0x7f, 0x10, 0x4b, 0x5d, 0xdf, 0xb3, 0xc3, + 0xc8, 0xf3, 0x1c, 0xcf, 0x2e, 0xfa, 0x01, 0x0b, 0x87, 0x94, 0x16, 0x62, 0x25, 0xb5, 0xda, 0x8f, + 0xba, 0x45, 0xea, 0x1d, 0xc6, 0xa2, 0x7b, 0x27, 0x45, 0x9d, 0x48, 0xdb, 0xc6, 0xf2, 0x3f, 0x9f, + 0x94, 0x0b, 0xa7, 0xc7, 0xb8, 0xa0, 0xbd, 0x20, 0x56, 0xb8, 0x1d, 0x2b, 0x84, 0x41, 0xbb, 0xc8, + 0x05, 0x15, 0x51, 0xbc, 0xa9, 0xf9, 0x85, 0x01, 0x59, 0xcc, 0xda, 0xbe, 0xed, 0x39, 0x47, 0x0c, + 0xb3, 0xff, 0x47, 0x8c, 0x0b, 0x54, 0x85, 0xf1, 0xb6, 0xef, 0x75, 0x1d, 0x3b, 0x67, 0x2c, 0x19, + 0xcb, 0x53, 0x6b, 0x2b, 0x85, 0x0b, 0x0f, 0x5f, 0x88, 0x1d, 0xc8, 0x80, 0xca, 0xca, 0x0e, 0xc7, + 0xf6, 0xc8, 0x82, 0x34, 0x8d, 0x3a, 0x8e, 0x9f, 0x1b, 0x55, 0x8e, 0x8a, 0x57, 0x77, 0x54, 0x92, + 0x66, 0x58, 0x5b, 0x9b, 0x5f, 0x19, 0x70, 0xa7, 0xee, 0x7b, 0x36, 0xd6, 0xb9, 0xfb, 0xe3, 0x07, + 0xfc, 0xad, 0x01, 0x0b, 0x4d, 0x11, 0x32, 0xda, 0x3b, 0x2b, 0xdc, 0x2e, 0x64, 0x79, 0x22, 0x24, + 0x43, 0x81, 0x3f, 0xbf, 0x64, 0xbf, 0x93, 0x3e, 0x8f, 0x4f, 0x50, 0x1d, 0xc1, 0x73, 0x7d, 0xa7, + 0x1a, 0x42, 0x7f, 0x81, 0x19, 0x15, 0x8e, 0xdc, 0x43, 0x30, 0x4f, 0xa8, 0x43, 0x4d, 0x57, 0x47, + 0xf0, 0xb4, 0x82, 0xcb, 0x1a, 0x5d, 0xbf, 0x01, 0xf3, 0xc7, 0xe1, 0x84, 0x3a, 0x46, 0xf3, 0x1b, + 0x03, 0xf2, 0xe7, 0xef, 0xf6, 0x3b, 0x66, 0xfc, 0x31, 0x64, 0xb9, 0xe3, 0xd9, 0x2e, 0x23, 0x91, + 0x10, 0x2c, 0xa4, 0x5e, 0x9b, 0xa9, 0x38, 0x27, 0xf0, 0x9c, 0xc6, 0x77, 0x13, 0x18, 0x3d, 0x82, + 0x39, 0xc7, 0x13, 0x2c, 0x74, 0x7a, 0x24, 0x64, 0x3c, 0x72, 0x05, 0xcf, 0xa5, 0x94, 0xe6, 0x6c, + 0x0c, 0x63, 0x8d, 0x9a, 0xbf, 0xa4, 0x61, 0xfe, 0x74, 0xcc, 0xaf, 0x60, 0x82, 0x79, 0x6d, 0xbf, + 0xe3, 0x78, 0x3a, 0xea, 0xd9, 0xb5, 0x7f, 0xbf, 0x6d, 0xd4, 0x05, 0xf5, 0x97, 0xad, 0xd8, 0x0b, + 0xee, 0xfb, 0x43, 0x4f, 0x60, 0x9e, 0xd3, 0x5e, 0xe0, 0x32, 0x12, 0x52, 0xc1, 0xc8, 0x01, 0x0b, + 0xc5, 0x91, 0x3a, 0x46, 0x1a, 0xcf, 0x69, 0x01, 0xa6, 0x82, 0x55, 0x25, 0x8c, 0x1e, 0xc0, 0x8c, + 0x4b, 0x3d, 0x3b, 0xa2, 0x36, 0x23, 0x6d, 0xbf, 0xc3, 0xd4, 0x21, 0x26, 0xf1, 0x74, 0x02, 0x96, + 0xfd, 0x0e, 0x93, 0x69, 0xe9, 0xd1, 0x37, 0x84, 0xba, 0x82, 0x85, 0x1e, 0x15, 0xce, 0x6b, 0xc6, + 0x73, 0x63, 0xda, 0x5f, 0x8f, 0xbe, 0x29, 0x0d, 0xc0, 0x52, 0x35, 0x08, 0xfd, 0x2e, 0xf5, 0x1c, + 0x71, 0x48, 0xba, 0x8e, 0x14, 0xe5, 0xd2, 0x3a, 0x83, 0x7d, 0x7c, 0x43, 0xc1, 0x68, 0x17, 0xe6, + 0xf4, 0x21, 0xf5, 0x95, 0x78, 0x23, 0x78, 0x6e, 0x7c, 0x29, 0xb5, 0x3c, 0xb5, 0xf6, 0xb7, 0xcb, + 0x2e, 0x9e, 0x02, 0xca, 0xda, 0x08, 0xcf, 0xf2, 0xc1, 0x25, 0x47, 0xff, 0x84, 0x1c, 0xf3, 0xe8, + 0xbe, 0xcb, 0xc8, 0x7b, 0x7e, 0xd8, 0x21, 0x92, 0x7d, 0x88, 0xdf, 0xed, 0x72, 0x26, 0x78, 0x6e, + 0x42, 0x45, 0x72, 0x4b, 0xcb, 0xf7, 0xfc, 0xb0, 0xd3, 0x72, 0x7a, 0x6c, 0x5b, 0x0b, 0xd1, 0x4d, + 0x48, 0xf7, 0xfc, 0x0e, 0x73, 0x73, 0x33, 0x2a, 0x05, 0x7a, 0x81, 0xee, 0xc3, 0x74, 0xc4, 0x19, + 0x61, 0xde, 0x81, 0xfc, 0xed, 0x9d, 0xdc, 0xac, 0x72, 0x31, 0x15, 0x71, 0x66, 0xc5, 0x10, 0x7a, + 0x1f, 0x62, 0x42, 0x26, 0x1d, 0x2a, 0x28, 0x69, 0xfb, 0xae, 0xcb, 0xda, 0xf2, 0x3f, 0x11, 0x3f, + 0x10, 0xc4, 0xf1, 0x72, 0x70, 0xa5, 0x7a, 0xda, 0x54, 0xd2, 0x0a, 0x15, 0xb4, 0xdc, 0xf7, 0x10, + 0xdf, 0xcf, 0x98, 0x8e, 0x87, 0x65, 0xdb, 0x81, 0xa8, 0x79, 0xe6, 0x47, 0x06, 0xcc, 0x0c, 0x5d, + 0x04, 0x94, 0x83, 0x9b, 0x56, 0xa3, 0xbc, 0x5d, 0xa9, 0x35, 0x36, 0xc9, 0x6e, 0xa3, 0xb9, 0x63, + 0x95, 0x6b, 0x1b, 0x35, 0xab, 0x92, 0x1d, 0x41, 0xd3, 0x30, 0x51, 0xaf, 0x35, 0xac, 0x12, 0x5e, + 0x7d, 0x9a, 0x35, 0xd0, 0x04, 0x8c, 0x6d, 0xd4, 0x4b, 0xe5, 0xec, 0x28, 0x9a, 0x84, 0xf4, 0xd6, + 0x6e, 0xbd, 0xb4, 0x97, 0x4d, 0xa1, 0x0c, 0xa4, 0x4a, 0x5b, 0x38, 0x3b, 0x86, 0x00, 0xc6, 0x4b, + 0x5b, 0x98, 0xec, 0xad, 0x67, 0xd3, 0xd2, 0x6e, 0x7b, 0x73, 0x93, 0x6c, 0xef, 0xec, 0x36, 0xb3, + 0xe3, 0x28, 0x0f, 0x7f, 0x6a, 0xee, 0x58, 0xd6, 0x7f, 0xc9, 0x5e, 0xad, 0x55, 0x25, 0x55, 0xab, + 0x54, 0xb1, 0x30, 0x59, 0xff, 0x5f, 0xcb, 0xca, 0x66, 0xcc, 0xef, 0x0d, 0xc8, 0x9f, 0x7f, 0x0e, + 0xf4, 0x81, 0x01, 0xb7, 0x5c, 0xdf, 0xb6, 0x63, 0xae, 0xe1, 0xcc, 0x13, 0x44, 0xb6, 0x00, 0x16, + 0xd7, 0xc0, 0xd6, 0xb5, 0x53, 0x54, 0xa8, 0x6b, 0xb7, 0x65, 0xed, 0xb5, 0x29, 0x9d, 0xe2, 0x1b, + 0xee, 0x69, 0xd0, 0x5c, 0x81, 0x1b, 0x67, 0xe8, 0xa2, 0x29, 0xc8, 0x58, 0x8d, 0xd2, 0x7a, 0x3d, + 0x49, 0x54, 0xa5, 0xd6, 0xd4, 0x2b, 0xc3, 0x7c, 0x0c, 0x33, 0x43, 0x57, 0x0e, 0xe5, 0x20, 0x13, + 0x1c, 0x84, 0x94, 0x33, 0x9e, 0x33, 0x96, 0x52, 0xcb, 0x93, 0x38, 0x59, 0x9a, 0xb8, 0xdf, 0xc1, + 0xfa, 0x34, 0x8c, 0xf2, 0x90, 0x49, 0x38, 0xcf, 0x88, 0x39, 0x2f, 0x01, 0x10, 0x82, 0x54, 0x14, + 0x3a, 0xaa, 0x38, 0x27, 0xab, 0x23, 0x58, 0x2e, 0xd6, 0x67, 0x41, 0x53, 0x22, 0xe1, 0x7e, 0x14, + 0xb6, 0x99, 0xc9, 0xfa, 0xfc, 0x21, 0x59, 0x9b, 0x07, 0x32, 0x6a, 0xb4, 0x03, 0x99, 0x84, 0x76, + 0x46, 0x55, 0xd1, 0x3c, 0xbd, 0x52, 0xd1, 0x0c, 0x04, 0xa7, 0xf9, 0x09, 0x27, 0x6e, 0xcc, 0x00, + 0x16, 0xcf, 0x6e, 0x6b, 0xef, 0x6c, 0xc7, 0xef, 0x8c, 0xb3, 0xb7, 0xdc, 0x62, 0x82, 0xca, 0x4a, + 0x8a, 0xc9, 0xc4, 0x0e, 0x19, 0xe7, 0x24, 0x60, 0x61, 0x3b, 0x49, 0x61, 0x5a, 0x91, 0x89, 0xc2, + 0x77, 0x34, 0x8c, 0x9e, 0x03, 0x70, 0x41, 0x43, 0xa1, 0xea, 0x3d, 0x6e, 0x98, 0xf9, 0x24, 0xc0, + 0x64, 0x14, 0x29, 0xb4, 0x92, 0x51, 0x04, 0x4f, 0x2a, 0x6d, 0xb9, 0x46, 0x15, 0xc8, 0xba, 0x94, + 0x0b, 0x12, 0x05, 0x1d, 0x49, 0x97, 0xca, 0x41, 0xea, 0x52, 0x07, 0xb3, 0xd2, 0x66, 0x57, 0x99, + 0x48, 0xd0, 0xfc, 0x69, 0xf4, 0x74, 0x8f, 0x1a, 0xc8, 0xde, 0x32, 0xa4, 0x59, 0x18, 0xfa, 0x61, + 0xdc, 0xa2, 0x50, 0xe2, 0x39, 0x0c, 0xda, 0x85, 0xa6, 0x1a, 0x82, 0xb0, 0x56, 0x40, 0xcd, 0x93, + 0x79, 0xbe, 0x4e, 0x1f, 0x3e, 0x91, 0x6a, 0x14, 0xc1, 0x7c, 0xcc, 0xb5, 0xec, 0xb5, 0x2c, 0x3a, + 0x71, 0x18, 0x30, 0x45, 0xe1, 0xb3, 0x6b, 0xb5, 0xb7, 0x74, 0x7f, 0x7c, 0xa8, 0xf8, 0x0f, 0x5b, + 0xd2, 0x63, 0xeb, 0x30, 0x60, 0x38, 0xe6, 0xf3, 0x3e, 0x60, 0xd6, 0x61, 0xee, 0x84, 0x0e, 0x5a, + 0x84, 0x9c, 0x64, 0x8f, 0x72, 0x95, 0x58, 0xff, 0xb1, 0x1a, 0xad, 0x13, 0x0c, 0x75, 0x07, 0x6e, + 0x5b, 0x8d, 0x0a, 0xd9, 0xde, 0x20, 0xcd, 0x5a, 0x63, 0xb3, 0x6e, 0x91, 0xdd, 0x56, 0xcb, 0xc2, + 0xa5, 0x46, 0xd9, 0xca, 0x1a, 0xe6, 0xd7, 0xe7, 0x8c, 0x01, 0xfa, 0xb0, 0x88, 0xc0, 0xf4, 0x50, + 0x87, 0x32, 0x54, 0xf6, 0x5e, 0xbe, 0xed, 0x2d, 0x1d, 0x68, 0x67, 0x78, 0xc8, 0x21, 0x5a, 0x80, + 0x09, 0x87, 0x93, 0xae, 0xe3, 0x51, 0x37, 0x9e, 0x0a, 0x32, 0x0e, 0xdf, 0x90, 0x4b, 0xb4, 0x08, + 0xf2, 0x42, 0xed, 0x3b, 0xae, 0x23, 0x0e, 0xd5, 0xe5, 0x19, 0xc5, 0xc7, 0x80, 0x79, 0x04, 0xb7, + 0xcf, 0x29, 0x86, 0x77, 0x1e, 0xb4, 0xf9, 0xb9, 0x01, 0x8b, 0x17, 0xa9, 0xa3, 0x7b, 0x00, 0x22, + 0xa4, 0x1e, 0x6f, 0x87, 0x4e, 0xa0, 0xcb, 0x6b, 0x12, 0x0f, 0x20, 0x52, 0xae, 0xa6, 0xa3, 0x0e, + 0x4b, 0xa6, 0xa1, 0x51, 0x3c, 0x80, 0xa0, 0x7f, 0x41, 0x5a, 0x36, 0x5a, 0x39, 0xfe, 0xc8, 0xd0, + 0x1f, 0x5d, 0x12, 0xba, 0xec, 0xba, 0x35, 0xaf, 0xeb, 0x63, 0x6d, 0x65, 0x7e, 0x62, 0xc0, 0x44, + 0x82, 0xa1, 0x67, 0x43, 0x55, 0xac, 0x4b, 0x65, 0xe1, 0x54, 0x11, 0x56, 0xe2, 0x07, 0xc7, 0x60, + 0x11, 0xff, 0x43, 0xce, 0x53, 0x9d, 0xc1, 0xea, 0xbf, 0xc0, 0x2e, 0xc3, 0x3c, 0xd5, 0xf9, 0x11, + 0x82, 0x31, 0x19, 0x45, 0x3c, 0xf4, 0xa8, 0xef, 0xb5, 0x1f, 0x53, 0x30, 0xae, 0x13, 0x86, 0x3e, + 0x33, 0x60, 0xb2, 0x7f, 0xeb, 0xd1, 0x15, 0xe7, 0xef, 0xfe, 0x68, 0x9d, 0x5f, 0xb9, 0xba, 0x81, + 0x2e, 0x28, 0xf3, 0xe1, 0x87, 0x3f, 0xfc, 0xfc, 0xe9, 0xe8, 0x92, 0x79, 0x67, 0xe0, 0xfd, 0xa7, + 0xcd, 0x5e, 0x84, 0x89, 0xf2, 0x0b, 0xe3, 0x09, 0xfa, 0xd2, 0x80, 0x9b, 0x67, 0x31, 0x27, 0x7a, + 0x71, 0xc9, 0x96, 0x17, 0x3c, 0x5c, 0xf2, 0x77, 0x13, 0xdb, 0x81, 0x97, 0x61, 0x61, 0x3b, 0x79, + 0x19, 0x9a, 0xab, 0x2a, 0xb6, 0xbf, 0x9a, 0x0f, 0x4f, 0xc7, 0x36, 0x60, 0x30, 0x14, 0xe6, 0xc7, + 0x06, 0xa0, 0xd3, 0xf4, 0x81, 0x9e, 0x5d, 0x83, 0x71, 0x74, 0x88, 0xcf, 0xaf, 0xcd, 0x55, 0xcb, + 0xc6, 0x8a, 0xb1, 0x7e, 0x04, 0xf7, 0xdb, 0x7e, 0xef, 0x62, 0x1f, 0xeb, 0x53, 0xfa, 0xe7, 0xef, + 0xc8, 0x5b, 0xb3, 0x63, 0xbc, 0x2a, 0xc7, 0xda, 0xb6, 0x2f, 0x47, 0xe2, 0x82, 0x1f, 0xda, 0x45, + 0x9b, 0x79, 0xea, 0x4e, 0x15, 0xb5, 0x88, 0x06, 0x0e, 0x3f, 0xe7, 0xf1, 0xfe, 0x52, 0x03, 0xbf, + 0x1a, 0xc6, 0xfe, 0xb8, 0x32, 0xf9, 0xfb, 0x6f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x88, 0x22, 0xc3, + 0x54, 0xee, 0x0f, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/support/common/common.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/support/common/common.pb.go index 9c9daaa..b9bbfb8 100644 --- a/vendor/google.golang.org/genproto/googleapis/cloud/support/common/common.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/cloud/support/common/common.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/cloud/support/common.proto -// DO NOT EDIT! /* Package common is a generated protocol buffer package. diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/support/v1alpha1/cloud_support.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/support/v1alpha1/cloud_support.pb.go index 71a1379..80ae418 100644 --- a/vendor/google.golang.org/genproto/googleapis/cloud/support/v1alpha1/cloud_support.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/cloud/support/v1alpha1/cloud_support.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/cloud/support/v1alpha1/cloud_support.proto -// DO NOT EDIT! /* Package support is a generated protocol buffer package. diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/texttospeech/v1beta1/cloud_tts.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/texttospeech/v1beta1/cloud_tts.pb.go new file mode 100644 index 0000000..8dd0f8e --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/texttospeech/v1beta1/cloud_tts.pb.go @@ -0,0 +1,688 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/texttospeech/v1beta1/cloud_tts.proto + +/* +Package texttospeech is a generated protocol buffer package. + +It is generated from these files: + google/cloud/texttospeech/v1beta1/cloud_tts.proto + +It has these top-level messages: + ListVoicesRequest + ListVoicesResponse + Voice + SynthesizeSpeechRequest + SynthesisInput + VoiceSelectionParams + AudioConfig + SynthesizeSpeechResponse +*/ +package texttospeech + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Gender of the voice as described in +// [SSML voice element](https://www.w3.org/TR/speech-synthesis11/#edef_voice). +type SsmlVoiceGender int32 + +const ( + // An unspecified gender. + // In VoiceSelectionParams, this means that the client doesn't care which + // gender the selected voice will have. In the Voice field of + // ListVoicesResponse, this may mean that the voice doesn't fit any of the + // other categories in this enum, or that the gender of the voice isn't known. + SsmlVoiceGender_SSML_VOICE_GENDER_UNSPECIFIED SsmlVoiceGender = 0 + // A male voice. + SsmlVoiceGender_MALE SsmlVoiceGender = 1 + // A female voice. + SsmlVoiceGender_FEMALE SsmlVoiceGender = 2 + // A gender-neutral voice. + SsmlVoiceGender_NEUTRAL SsmlVoiceGender = 3 +) + +var SsmlVoiceGender_name = map[int32]string{ + 0: "SSML_VOICE_GENDER_UNSPECIFIED", + 1: "MALE", + 2: "FEMALE", + 3: "NEUTRAL", +} +var SsmlVoiceGender_value = map[string]int32{ + "SSML_VOICE_GENDER_UNSPECIFIED": 0, + "MALE": 1, + "FEMALE": 2, + "NEUTRAL": 3, +} + +func (x SsmlVoiceGender) String() string { + return proto.EnumName(SsmlVoiceGender_name, int32(x)) +} +func (SsmlVoiceGender) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +// Configuration to set up audio encoder. The encoding determines the output +// audio format that we'd like. +type AudioEncoding int32 + +const ( + // Not specified. Will return result [google.rpc.Code.INVALID_ARGUMENT][]. + AudioEncoding_AUDIO_ENCODING_UNSPECIFIED AudioEncoding = 0 + // Uncompressed 16-bit signed little-endian samples (Linear PCM). + // Audio content returned as LINEAR16 also contains a WAV header. + AudioEncoding_LINEAR16 AudioEncoding = 1 + // MP3 audio. + AudioEncoding_MP3 AudioEncoding = 2 + // Opus encoded audio wrapped in an ogg container. The result will be a + // file which can be played natively on Android, and in browsers (at least + // Chrome and Firefox). The quality of the encoding is considerably higher + // than MP3 while using approximately the same bitrate. + AudioEncoding_OGG_OPUS AudioEncoding = 3 +) + +var AudioEncoding_name = map[int32]string{ + 0: "AUDIO_ENCODING_UNSPECIFIED", + 1: "LINEAR16", + 2: "MP3", + 3: "OGG_OPUS", +} +var AudioEncoding_value = map[string]int32{ + "AUDIO_ENCODING_UNSPECIFIED": 0, + "LINEAR16": 1, + "MP3": 2, + "OGG_OPUS": 3, +} + +func (x AudioEncoding) String() string { + return proto.EnumName(AudioEncoding_name, int32(x)) +} +func (AudioEncoding) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +// The top-level message sent by the client for the `ListVoices` method. +type ListVoicesRequest struct { + // Optional (but recommended) + // [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag. If + // specified, the ListVoices call will only return voices that can be used to + // synthesize this language_code. E.g. when specifying "en-NZ", you will get + // supported "en-*" voices; when specifying "no", you will get supported + // "no-*" (Norwegian) and "nb-*" (Norwegian Bokmal) voices; specifying "zh" + // will also get supported "cmn-*" voices; specifying "zh-hk" will also get + // supported "yue-*" voices. + LanguageCode string `protobuf:"bytes,1,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` +} + +func (m *ListVoicesRequest) Reset() { *m = ListVoicesRequest{} } +func (m *ListVoicesRequest) String() string { return proto.CompactTextString(m) } +func (*ListVoicesRequest) ProtoMessage() {} +func (*ListVoicesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *ListVoicesRequest) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +// The message returned to the client by the `ListVoices` method. +type ListVoicesResponse struct { + // The list of voices. + Voices []*Voice `protobuf:"bytes,1,rep,name=voices" json:"voices,omitempty"` +} + +func (m *ListVoicesResponse) Reset() { *m = ListVoicesResponse{} } +func (m *ListVoicesResponse) String() string { return proto.CompactTextString(m) } +func (*ListVoicesResponse) ProtoMessage() {} +func (*ListVoicesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *ListVoicesResponse) GetVoices() []*Voice { + if m != nil { + return m.Voices + } + return nil +} + +// Description of a voice supported by the TTS service. +type Voice struct { + // The languages that this voice supports, expressed as + // [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tags (e.g. + // "en-US", "es-419", "cmn-tw"). + LanguageCodes []string `protobuf:"bytes,1,rep,name=language_codes,json=languageCodes" json:"language_codes,omitempty"` + // The name of this voice. Each distinct voice has a unique name. + Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` + // The gender of this voice. + SsmlGender SsmlVoiceGender `protobuf:"varint,3,opt,name=ssml_gender,json=ssmlGender,enum=google.cloud.texttospeech.v1beta1.SsmlVoiceGender" json:"ssml_gender,omitempty"` + // The natural sample rate (in hertz) for this voice. + NaturalSampleRateHertz int32 `protobuf:"varint,4,opt,name=natural_sample_rate_hertz,json=naturalSampleRateHertz" json:"natural_sample_rate_hertz,omitempty"` +} + +func (m *Voice) Reset() { *m = Voice{} } +func (m *Voice) String() string { return proto.CompactTextString(m) } +func (*Voice) ProtoMessage() {} +func (*Voice) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *Voice) GetLanguageCodes() []string { + if m != nil { + return m.LanguageCodes + } + return nil +} + +func (m *Voice) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Voice) GetSsmlGender() SsmlVoiceGender { + if m != nil { + return m.SsmlGender + } + return SsmlVoiceGender_SSML_VOICE_GENDER_UNSPECIFIED +} + +func (m *Voice) GetNaturalSampleRateHertz() int32 { + if m != nil { + return m.NaturalSampleRateHertz + } + return 0 +} + +// The top-level message sent by the client for the `SynthesizeSpeech` method. +type SynthesizeSpeechRequest struct { + // Required. The Synthesizer requires either plain text or SSML as input. + Input *SynthesisInput `protobuf:"bytes,1,opt,name=input" json:"input,omitempty"` + // Required. The desired voice of the synthesized audio. + Voice *VoiceSelectionParams `protobuf:"bytes,2,opt,name=voice" json:"voice,omitempty"` + // Required. The configuration of the synthesized audio. + AudioConfig *AudioConfig `protobuf:"bytes,3,opt,name=audio_config,json=audioConfig" json:"audio_config,omitempty"` +} + +func (m *SynthesizeSpeechRequest) Reset() { *m = SynthesizeSpeechRequest{} } +func (m *SynthesizeSpeechRequest) String() string { return proto.CompactTextString(m) } +func (*SynthesizeSpeechRequest) ProtoMessage() {} +func (*SynthesizeSpeechRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *SynthesizeSpeechRequest) GetInput() *SynthesisInput { + if m != nil { + return m.Input + } + return nil +} + +func (m *SynthesizeSpeechRequest) GetVoice() *VoiceSelectionParams { + if m != nil { + return m.Voice + } + return nil +} + +func (m *SynthesizeSpeechRequest) GetAudioConfig() *AudioConfig { + if m != nil { + return m.AudioConfig + } + return nil +} + +// Contains text input to be synthesized. Either `text` or `ssml` must be +// supplied. Supplying both or neither returns +// [google.rpc.Code.INVALID_ARGUMENT][]. The input size is limited to 5000 +// characters. +type SynthesisInput struct { + // The input source, which is either plain text or SSML. + // + // Types that are valid to be assigned to InputSource: + // *SynthesisInput_Text + // *SynthesisInput_Ssml + InputSource isSynthesisInput_InputSource `protobuf_oneof:"input_source"` +} + +func (m *SynthesisInput) Reset() { *m = SynthesisInput{} } +func (m *SynthesisInput) String() string { return proto.CompactTextString(m) } +func (*SynthesisInput) ProtoMessage() {} +func (*SynthesisInput) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +type isSynthesisInput_InputSource interface { + isSynthesisInput_InputSource() +} + +type SynthesisInput_Text struct { + Text string `protobuf:"bytes,1,opt,name=text,oneof"` +} +type SynthesisInput_Ssml struct { + Ssml string `protobuf:"bytes,2,opt,name=ssml,oneof"` +} + +func (*SynthesisInput_Text) isSynthesisInput_InputSource() {} +func (*SynthesisInput_Ssml) isSynthesisInput_InputSource() {} + +func (m *SynthesisInput) GetInputSource() isSynthesisInput_InputSource { + if m != nil { + return m.InputSource + } + return nil +} + +func (m *SynthesisInput) GetText() string { + if x, ok := m.GetInputSource().(*SynthesisInput_Text); ok { + return x.Text + } + return "" +} + +func (m *SynthesisInput) GetSsml() string { + if x, ok := m.GetInputSource().(*SynthesisInput_Ssml); ok { + return x.Ssml + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*SynthesisInput) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _SynthesisInput_OneofMarshaler, _SynthesisInput_OneofUnmarshaler, _SynthesisInput_OneofSizer, []interface{}{ + (*SynthesisInput_Text)(nil), + (*SynthesisInput_Ssml)(nil), + } +} + +func _SynthesisInput_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*SynthesisInput) + // input_source + switch x := m.InputSource.(type) { + case *SynthesisInput_Text: + b.EncodeVarint(1<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Text) + case *SynthesisInput_Ssml: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Ssml) + case nil: + default: + return fmt.Errorf("SynthesisInput.InputSource has unexpected type %T", x) + } + return nil +} + +func _SynthesisInput_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*SynthesisInput) + switch tag { + case 1: // input_source.text + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.InputSource = &SynthesisInput_Text{x} + return true, err + case 2: // input_source.ssml + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.InputSource = &SynthesisInput_Ssml{x} + return true, err + default: + return false, nil + } +} + +func _SynthesisInput_OneofSizer(msg proto.Message) (n int) { + m := msg.(*SynthesisInput) + // input_source + switch x := m.InputSource.(type) { + case *SynthesisInput_Text: + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Text))) + n += len(x.Text) + case *SynthesisInput_Ssml: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Ssml))) + n += len(x.Ssml) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Description of which voice to use for a synthesis request. +type VoiceSelectionParams struct { + // The language (and optionally also the region) of the voice expressed as a + // [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag, e.g. + // "en-US". Required. This should not include a script tag (e.g. use + // "cmn-cn" rather than "cmn-Hant-cn"), because the script will be inferred + // from the input provided in the SynthesisInput. The TTS service + // will use this parameter to help choose an appropriate voice. Note that + // the TTS service may choose a voice with a slightly different language code + // than the one selected; it may substitute a different region + // (e.g. using en-US rather than en-CA if there isn't a Canadian voice + // available), or even a different language, e.g. using "nb" (Norwegian + // Bokmal) instead of "no" (Norwegian)". + LanguageCode string `protobuf:"bytes,1,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` + // The name of the voice. Optional; if not set, the service will choose a + // voice based on the other parameters such as language_code and gender. + Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` + // The preferred gender of the voice. Optional; if not set, the service will + // choose a voice based on the other parameters such as language_code and + // name. Note that this is only a preference, not requirement; if a + // voice of the appropriate gender is not available, the synthesizer should + // substitute a voice with a different gender rather than failing the request. + SsmlGender SsmlVoiceGender `protobuf:"varint,3,opt,name=ssml_gender,json=ssmlGender,enum=google.cloud.texttospeech.v1beta1.SsmlVoiceGender" json:"ssml_gender,omitempty"` +} + +func (m *VoiceSelectionParams) Reset() { *m = VoiceSelectionParams{} } +func (m *VoiceSelectionParams) String() string { return proto.CompactTextString(m) } +func (*VoiceSelectionParams) ProtoMessage() {} +func (*VoiceSelectionParams) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *VoiceSelectionParams) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +func (m *VoiceSelectionParams) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *VoiceSelectionParams) GetSsmlGender() SsmlVoiceGender { + if m != nil { + return m.SsmlGender + } + return SsmlVoiceGender_SSML_VOICE_GENDER_UNSPECIFIED +} + +// Description of audio data to be synthesized. +type AudioConfig struct { + // Required. The format of the requested audio byte stream. + AudioEncoding AudioEncoding `protobuf:"varint,1,opt,name=audio_encoding,json=audioEncoding,enum=google.cloud.texttospeech.v1beta1.AudioEncoding" json:"audio_encoding,omitempty"` + // Optional speaking rate/speed, in the range [0.25, 4.0]. 1.0 is the normal + // native speed supported by the specific voice. 2.0 is twice as fast, and + // 0.5 is half as fast. If unset(0.0), defaults to the native 1.0 speed. Any + // other values < 0.25 or > 4.0 will return an error. + SpeakingRate float64 `protobuf:"fixed64,2,opt,name=speaking_rate,json=speakingRate" json:"speaking_rate,omitempty"` + // Optional speaking pitch, in the range [-20.0, 20.0]. 20 means increase 20 + // semitones from the original pitch. -20 means decrease 20 semitones from the + // original pitch. + Pitch float64 `protobuf:"fixed64,3,opt,name=pitch" json:"pitch,omitempty"` + // Optional volume gain (in dB) of the normal native volume supported by the + // specific voice, in the range [-96.0, 16.0]. If unset, or set to a value of + // 0.0 (dB), will play at normal native signal amplitude. A value of -6.0 (dB) + // will play at approximately half the amplitude of the normal native signal + // amplitude. A value of +6.0 (dB) will play at approximately twice the + // amplitude of the normal native signal amplitude. Strongly recommend not to + // exceed +10 (dB) as there's usually no effective increase in loudness for + // any value greater than that. + VolumeGainDb float64 `protobuf:"fixed64,4,opt,name=volume_gain_db,json=volumeGainDb" json:"volume_gain_db,omitempty"` + // The synthesis sample rate (in hertz) for this audio. Optional. If this is + // different from the voice's natural sample rate, then the synthesizer will + // honor this request by converting to the desired sample rate (which might + // result in worse audio quality), unless the specified sample rate is not + // supported for the encoding chosen, in which case it will fail the request + // and return [google.rpc.Code.INVALID_ARGUMENT][]. + SampleRateHertz int32 `protobuf:"varint,5,opt,name=sample_rate_hertz,json=sampleRateHertz" json:"sample_rate_hertz,omitempty"` +} + +func (m *AudioConfig) Reset() { *m = AudioConfig{} } +func (m *AudioConfig) String() string { return proto.CompactTextString(m) } +func (*AudioConfig) ProtoMessage() {} +func (*AudioConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *AudioConfig) GetAudioEncoding() AudioEncoding { + if m != nil { + return m.AudioEncoding + } + return AudioEncoding_AUDIO_ENCODING_UNSPECIFIED +} + +func (m *AudioConfig) GetSpeakingRate() float64 { + if m != nil { + return m.SpeakingRate + } + return 0 +} + +func (m *AudioConfig) GetPitch() float64 { + if m != nil { + return m.Pitch + } + return 0 +} + +func (m *AudioConfig) GetVolumeGainDb() float64 { + if m != nil { + return m.VolumeGainDb + } + return 0 +} + +func (m *AudioConfig) GetSampleRateHertz() int32 { + if m != nil { + return m.SampleRateHertz + } + return 0 +} + +// The message returned to the client by the `SynthesizeSpeech` method. +type SynthesizeSpeechResponse struct { + // The audio data bytes encoded as specified in the request, including the + // header (For LINEAR16 audio, we include the WAV header). Note: as + // with all bytes fields, protobuffers use a pure binary representation, + // whereas JSON representations use base64. + AudioContent []byte `protobuf:"bytes,1,opt,name=audio_content,json=audioContent,proto3" json:"audio_content,omitempty"` +} + +func (m *SynthesizeSpeechResponse) Reset() { *m = SynthesizeSpeechResponse{} } +func (m *SynthesizeSpeechResponse) String() string { return proto.CompactTextString(m) } +func (*SynthesizeSpeechResponse) ProtoMessage() {} +func (*SynthesizeSpeechResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *SynthesizeSpeechResponse) GetAudioContent() []byte { + if m != nil { + return m.AudioContent + } + return nil +} + +func init() { + proto.RegisterType((*ListVoicesRequest)(nil), "google.cloud.texttospeech.v1beta1.ListVoicesRequest") + proto.RegisterType((*ListVoicesResponse)(nil), "google.cloud.texttospeech.v1beta1.ListVoicesResponse") + proto.RegisterType((*Voice)(nil), "google.cloud.texttospeech.v1beta1.Voice") + proto.RegisterType((*SynthesizeSpeechRequest)(nil), "google.cloud.texttospeech.v1beta1.SynthesizeSpeechRequest") + proto.RegisterType((*SynthesisInput)(nil), "google.cloud.texttospeech.v1beta1.SynthesisInput") + proto.RegisterType((*VoiceSelectionParams)(nil), "google.cloud.texttospeech.v1beta1.VoiceSelectionParams") + proto.RegisterType((*AudioConfig)(nil), "google.cloud.texttospeech.v1beta1.AudioConfig") + proto.RegisterType((*SynthesizeSpeechResponse)(nil), "google.cloud.texttospeech.v1beta1.SynthesizeSpeechResponse") + proto.RegisterEnum("google.cloud.texttospeech.v1beta1.SsmlVoiceGender", SsmlVoiceGender_name, SsmlVoiceGender_value) + proto.RegisterEnum("google.cloud.texttospeech.v1beta1.AudioEncoding", AudioEncoding_name, AudioEncoding_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for TextToSpeech service + +type TextToSpeechClient interface { + // Returns a list of [Voice][google.cloud.texttospeech.v1beta1.Voice] + // supported for synthesis. + ListVoices(ctx context.Context, in *ListVoicesRequest, opts ...grpc.CallOption) (*ListVoicesResponse, error) + // Synthesizes speech synchronously: receive results after all text input + // has been processed. + SynthesizeSpeech(ctx context.Context, in *SynthesizeSpeechRequest, opts ...grpc.CallOption) (*SynthesizeSpeechResponse, error) +} + +type textToSpeechClient struct { + cc *grpc.ClientConn +} + +func NewTextToSpeechClient(cc *grpc.ClientConn) TextToSpeechClient { + return &textToSpeechClient{cc} +} + +func (c *textToSpeechClient) ListVoices(ctx context.Context, in *ListVoicesRequest, opts ...grpc.CallOption) (*ListVoicesResponse, error) { + out := new(ListVoicesResponse) + err := grpc.Invoke(ctx, "/google.cloud.texttospeech.v1beta1.TextToSpeech/ListVoices", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *textToSpeechClient) SynthesizeSpeech(ctx context.Context, in *SynthesizeSpeechRequest, opts ...grpc.CallOption) (*SynthesizeSpeechResponse, error) { + out := new(SynthesizeSpeechResponse) + err := grpc.Invoke(ctx, "/google.cloud.texttospeech.v1beta1.TextToSpeech/SynthesizeSpeech", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for TextToSpeech service + +type TextToSpeechServer interface { + // Returns a list of [Voice][google.cloud.texttospeech.v1beta1.Voice] + // supported for synthesis. + ListVoices(context.Context, *ListVoicesRequest) (*ListVoicesResponse, error) + // Synthesizes speech synchronously: receive results after all text input + // has been processed. + SynthesizeSpeech(context.Context, *SynthesizeSpeechRequest) (*SynthesizeSpeechResponse, error) +} + +func RegisterTextToSpeechServer(s *grpc.Server, srv TextToSpeechServer) { + s.RegisterService(&_TextToSpeech_serviceDesc, srv) +} + +func _TextToSpeech_ListVoices_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListVoicesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TextToSpeechServer).ListVoices(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.texttospeech.v1beta1.TextToSpeech/ListVoices", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TextToSpeechServer).ListVoices(ctx, req.(*ListVoicesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _TextToSpeech_SynthesizeSpeech_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SynthesizeSpeechRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TextToSpeechServer).SynthesizeSpeech(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.texttospeech.v1beta1.TextToSpeech/SynthesizeSpeech", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TextToSpeechServer).SynthesizeSpeech(ctx, req.(*SynthesizeSpeechRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _TextToSpeech_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.texttospeech.v1beta1.TextToSpeech", + HandlerType: (*TextToSpeechServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListVoices", + Handler: _TextToSpeech_ListVoices_Handler, + }, + { + MethodName: "SynthesizeSpeech", + Handler: _TextToSpeech_SynthesizeSpeech_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/texttospeech/v1beta1/cloud_tts.proto", +} + +func init() { proto.RegisterFile("google/cloud/texttospeech/v1beta1/cloud_tts.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 846 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0x4d, 0x6f, 0x1b, 0x45, + 0x18, 0xee, 0xd8, 0x71, 0xda, 0xbe, 0x5e, 0x3b, 0xce, 0x28, 0xa2, 0x26, 0xa2, 0x28, 0xdd, 0x50, + 0xc9, 0xca, 0xc1, 0xc6, 0x2e, 0x9f, 0xe9, 0x01, 0x1c, 0x7b, 0xeb, 0x5a, 0xf2, 0x17, 0xb3, 0x49, + 0x2a, 0x71, 0x59, 0x4d, 0xd6, 0xc3, 0x66, 0xc5, 0x7a, 0x66, 0xf1, 0x8c, 0xa3, 0xd2, 0x23, 0xe2, + 0xcc, 0x01, 0xfe, 0x02, 0x3f, 0x80, 0xdf, 0x02, 0x12, 0xbf, 0x80, 0x7f, 0xc0, 0x85, 0x23, 0x9a, + 0x99, 0x4d, 0xea, 0x38, 0x88, 0x3a, 0x1c, 0xb8, 0xed, 0x3c, 0xe3, 0xe7, 0x9d, 0xe7, 0x7d, 0xe6, + 0xf1, 0x3b, 0xd0, 0x8c, 0x84, 0x88, 0x12, 0xd6, 0x08, 0x13, 0xb1, 0x98, 0x36, 0x14, 0x7b, 0xa9, + 0x94, 0x90, 0x29, 0x63, 0xe1, 0x79, 0xe3, 0xa2, 0x79, 0xc6, 0x14, 0x6d, 0xda, 0xad, 0x40, 0x29, + 0x59, 0x4f, 0xe7, 0x42, 0x09, 0xfc, 0xc8, 0x52, 0xea, 0x06, 0xaf, 0x2f, 0x53, 0xea, 0x19, 0x65, + 0xf7, 0x9d, 0xac, 0x2a, 0x4d, 0xe3, 0x06, 0xe5, 0x5c, 0x28, 0xaa, 0x62, 0xc1, 0xb3, 0x02, 0xee, + 0x27, 0xb0, 0x3d, 0x88, 0xa5, 0x3a, 0x15, 0x71, 0xc8, 0x24, 0x61, 0xdf, 0x2c, 0x98, 0x54, 0x78, + 0x1f, 0x4a, 0x09, 0xe5, 0xd1, 0x82, 0x46, 0x2c, 0x08, 0xc5, 0x94, 0x55, 0xd1, 0x1e, 0xaa, 0xdd, + 0x27, 0xce, 0x25, 0xd8, 0x11, 0x53, 0xe6, 0x9e, 0x02, 0x5e, 0x66, 0xca, 0x54, 0x70, 0xc9, 0xf0, + 0xe7, 0xb0, 0x79, 0x61, 0x90, 0x2a, 0xda, 0xcb, 0xd7, 0x8a, 0xad, 0x5a, 0xfd, 0x8d, 0x0a, 0xeb, + 0xa6, 0x04, 0xc9, 0x78, 0xee, 0xaf, 0x08, 0x0a, 0x06, 0xc1, 0x8f, 0xa1, 0x7c, 0x4d, 0x86, 0xad, + 0x79, 0x9f, 0x94, 0x96, 0x75, 0x48, 0x8c, 0x61, 0x83, 0xd3, 0x19, 0xab, 0xe6, 0x8c, 0x48, 0xf3, + 0x8d, 0x7d, 0x28, 0x4a, 0x39, 0x4b, 0x82, 0x88, 0xf1, 0x29, 0x9b, 0x57, 0xf3, 0x7b, 0xa8, 0x56, + 0x6e, 0xb5, 0xd6, 0xd0, 0xe2, 0xcb, 0x59, 0x62, 0x4e, 0xef, 0x19, 0x26, 0x01, 0x5d, 0xc6, 0x7e, + 0xe3, 0x4f, 0xe1, 0x6d, 0x4e, 0xd5, 0x62, 0x4e, 0x93, 0x40, 0xd2, 0x59, 0x9a, 0xb0, 0x60, 0x4e, + 0x15, 0x0b, 0xce, 0xd9, 0x5c, 0xbd, 0xaa, 0x6e, 0xec, 0xa1, 0x5a, 0x81, 0xbc, 0x95, 0xfd, 0xc0, + 0x37, 0xfb, 0x84, 0x2a, 0xf6, 0x5c, 0xef, 0xba, 0xdf, 0xe7, 0xe0, 0x81, 0xff, 0x2d, 0x57, 0xe7, + 0x4c, 0xc6, 0xaf, 0x98, 0x6f, 0xce, 0xbc, 0x74, 0xbb, 0x07, 0x85, 0x98, 0xa7, 0x0b, 0x65, 0x5c, + 0x2e, 0xb6, 0x9a, 0xeb, 0xa8, 0xcc, 0x4a, 0xc9, 0xbe, 0x26, 0x12, 0xcb, 0xc7, 0x43, 0x28, 0x18, + 0x0f, 0x8d, 0x13, 0xc5, 0xd6, 0xc7, 0xeb, 0x5a, 0xef, 0xb3, 0x84, 0x85, 0x3a, 0x14, 0x13, 0x3a, + 0xa7, 0x33, 0x49, 0x6c, 0x15, 0xfc, 0x05, 0x38, 0x74, 0x31, 0x8d, 0x45, 0x10, 0x0a, 0xfe, 0x55, + 0x1c, 0x19, 0x13, 0x8b, 0xad, 0xfa, 0x1a, 0x55, 0xdb, 0x9a, 0xd6, 0x31, 0x2c, 0x52, 0xa4, 0xaf, + 0x17, 0xee, 0x00, 0xca, 0xd7, 0xa5, 0xe3, 0x1d, 0xd8, 0xd0, 0x25, 0x6c, 0xc2, 0x9e, 0xdf, 0x21, + 0x66, 0xa5, 0x51, 0xed, 0xbb, 0xbd, 0x52, 0x8d, 0xea, 0xd5, 0x51, 0x19, 0x1c, 0xd3, 0x68, 0x20, + 0xc5, 0x62, 0x1e, 0x32, 0xf7, 0x67, 0x04, 0x3b, 0xff, 0xd4, 0xc0, 0x5a, 0xf9, 0xfd, 0xdf, 0x62, + 0xe3, 0xfe, 0x89, 0xa0, 0xb8, 0xe4, 0x08, 0x7e, 0x01, 0x65, 0xeb, 0x2b, 0xe3, 0xa1, 0x98, 0xc6, + 0x3c, 0x32, 0xf2, 0xca, 0xad, 0xf7, 0xd7, 0x75, 0xd6, 0xcb, 0x78, 0xa4, 0x44, 0x97, 0x97, 0xba, + 0x6d, 0x99, 0x32, 0xfa, 0x75, 0xcc, 0x23, 0x93, 0x4c, 0xd3, 0x1a, 0x22, 0xce, 0x25, 0xa8, 0xe3, + 0x88, 0x77, 0xa0, 0x90, 0xc6, 0x2a, 0x3c, 0x37, 0xcd, 0x21, 0x62, 0x17, 0xf8, 0x3d, 0x28, 0x5f, + 0x88, 0x64, 0x31, 0x63, 0x41, 0x44, 0x63, 0x1e, 0x4c, 0xcf, 0x4c, 0x9e, 0x11, 0x71, 0x2c, 0xda, + 0xa3, 0x31, 0xef, 0x9e, 0xe1, 0x03, 0xd8, 0xbe, 0x19, 0xfc, 0x82, 0x09, 0xfe, 0x96, 0x5c, 0x49, + 0xfc, 0x67, 0x50, 0xbd, 0x19, 0xf8, 0x6c, 0x48, 0xec, 0x43, 0xe9, 0x2a, 0x59, 0x8a, 0x71, 0x7b, + 0xfb, 0x0e, 0x71, 0x2e, 0xa3, 0xa2, 0xb1, 0x83, 0x17, 0xb0, 0xb5, 0xe2, 0x2a, 0x7e, 0x04, 0x0f, + 0x7d, 0x7f, 0x38, 0x08, 0x4e, 0xc7, 0xfd, 0x8e, 0x17, 0xf4, 0xbc, 0x51, 0xd7, 0x23, 0xc1, 0xc9, + 0xc8, 0x9f, 0x78, 0x9d, 0xfe, 0xb3, 0xbe, 0xd7, 0xad, 0xdc, 0xc1, 0xf7, 0x60, 0x63, 0xd8, 0x1e, + 0x78, 0x15, 0x84, 0x01, 0x36, 0x9f, 0x79, 0xe6, 0x3b, 0x87, 0x8b, 0x70, 0x77, 0xe4, 0x9d, 0x1c, + 0x93, 0xf6, 0xa0, 0x92, 0x3f, 0x38, 0x86, 0xd2, 0x35, 0x1b, 0xf1, 0xbb, 0xb0, 0xdb, 0x3e, 0xe9, + 0xf6, 0xc7, 0x81, 0x37, 0xea, 0x8c, 0xbb, 0xfd, 0x51, 0x6f, 0xa5, 0xa6, 0x03, 0xf7, 0x06, 0xfd, + 0x91, 0xd7, 0x26, 0xcd, 0x8f, 0x2a, 0x08, 0xdf, 0x85, 0xfc, 0x70, 0xf2, 0xa4, 0x92, 0xd3, 0xf0, + 0xb8, 0xd7, 0x0b, 0xc6, 0x93, 0x13, 0xbf, 0x92, 0x6f, 0xfd, 0x9e, 0x03, 0xe7, 0x98, 0xbd, 0x54, + 0xc7, 0xc2, 0x36, 0x8b, 0x7f, 0x44, 0x00, 0xaf, 0x07, 0x24, 0xfe, 0x60, 0x8d, 0xdb, 0xbd, 0x31, + 0x89, 0x77, 0x3f, 0xbc, 0x25, 0xcb, 0x1a, 0xec, 0x3e, 0xf8, 0xee, 0xb7, 0x3f, 0x7e, 0xca, 0x6d, + 0xe3, 0xad, 0xab, 0x87, 0xc3, 0x0e, 0x57, 0xfc, 0x0b, 0x82, 0xca, 0xea, 0xb5, 0xe0, 0xc3, 0x5b, + 0x4c, 0x9c, 0x95, 0xe1, 0xb5, 0xfb, 0xf4, 0x3f, 0x71, 0x33, 0x99, 0xfb, 0x46, 0xe6, 0x43, 0xb7, + 0x7a, 0x25, 0x53, 0xf3, 0x0f, 0xe5, 0xd5, 0xef, 0x0f, 0xd1, 0xc1, 0xd1, 0x0f, 0x08, 0x1e, 0x87, + 0x62, 0xf6, 0xe6, 0x73, 0x8e, 0xb6, 0x97, 0xfd, 0x9f, 0xe8, 0xe7, 0x6d, 0x82, 0xbe, 0x1c, 0x66, + 0xbc, 0x48, 0xe8, 0x7f, 0x7f, 0x5d, 0xcc, 0xa3, 0x46, 0xc4, 0xb8, 0x79, 0xfc, 0x1a, 0x76, 0x8b, + 0xa6, 0xb1, 0xfc, 0x97, 0x37, 0xf7, 0xe9, 0x32, 0xf8, 0x17, 0x42, 0x67, 0x9b, 0x86, 0xfc, 0xe4, + 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x09, 0xb8, 0x07, 0xd3, 0xaf, 0x07, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/videointelligence/v1/video_intelligence.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/videointelligence/v1/video_intelligence.pb.go new file mode 100644 index 0000000..75b0f76 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/videointelligence/v1/video_intelligence.pb.go @@ -0,0 +1,1158 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/videointelligence/v1/video_intelligence.proto + +/* +Package videointelligence is a generated protocol buffer package. + +It is generated from these files: + google/cloud/videointelligence/v1/video_intelligence.proto + +It has these top-level messages: + AnnotateVideoRequest + VideoContext + LabelDetectionConfig + ShotChangeDetectionConfig + ExplicitContentDetectionConfig + FaceDetectionConfig + VideoSegment + LabelSegment + LabelFrame + Entity + LabelAnnotation + ExplicitContentFrame + ExplicitContentAnnotation + NormalizedBoundingBox + FaceSegment + FaceFrame + FaceAnnotation + VideoAnnotationResults + AnnotateVideoResponse + VideoAnnotationProgress + AnnotateVideoProgress +*/ +package videointelligence + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import google_protobuf3 "github.com/golang/protobuf/ptypes/duration" +import google_protobuf4 "github.com/golang/protobuf/ptypes/timestamp" +import google_rpc "google.golang.org/genproto/googleapis/rpc/status" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Video annotation feature. +type Feature int32 + +const ( + // Unspecified. + Feature_FEATURE_UNSPECIFIED Feature = 0 + // Label detection. Detect objects, such as dog or flower. + Feature_LABEL_DETECTION Feature = 1 + // Shot change detection. + Feature_SHOT_CHANGE_DETECTION Feature = 2 + // Explicit content detection. + Feature_EXPLICIT_CONTENT_DETECTION Feature = 3 + // Human face detection and tracking. + Feature_FACE_DETECTION Feature = 4 +) + +var Feature_name = map[int32]string{ + 0: "FEATURE_UNSPECIFIED", + 1: "LABEL_DETECTION", + 2: "SHOT_CHANGE_DETECTION", + 3: "EXPLICIT_CONTENT_DETECTION", + 4: "FACE_DETECTION", +} +var Feature_value = map[string]int32{ + "FEATURE_UNSPECIFIED": 0, + "LABEL_DETECTION": 1, + "SHOT_CHANGE_DETECTION": 2, + "EXPLICIT_CONTENT_DETECTION": 3, + "FACE_DETECTION": 4, +} + +func (x Feature) String() string { + return proto.EnumName(Feature_name, int32(x)) +} +func (Feature) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +// Label detection mode. +type LabelDetectionMode int32 + +const ( + // Unspecified. + LabelDetectionMode_LABEL_DETECTION_MODE_UNSPECIFIED LabelDetectionMode = 0 + // Detect shot-level labels. + LabelDetectionMode_SHOT_MODE LabelDetectionMode = 1 + // Detect frame-level labels. + LabelDetectionMode_FRAME_MODE LabelDetectionMode = 2 + // Detect both shot-level and frame-level labels. + LabelDetectionMode_SHOT_AND_FRAME_MODE LabelDetectionMode = 3 +) + +var LabelDetectionMode_name = map[int32]string{ + 0: "LABEL_DETECTION_MODE_UNSPECIFIED", + 1: "SHOT_MODE", + 2: "FRAME_MODE", + 3: "SHOT_AND_FRAME_MODE", +} +var LabelDetectionMode_value = map[string]int32{ + "LABEL_DETECTION_MODE_UNSPECIFIED": 0, + "SHOT_MODE": 1, + "FRAME_MODE": 2, + "SHOT_AND_FRAME_MODE": 3, +} + +func (x LabelDetectionMode) String() string { + return proto.EnumName(LabelDetectionMode_name, int32(x)) +} +func (LabelDetectionMode) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +// Bucketized representation of likelihood. +type Likelihood int32 + +const ( + // Unspecified likelihood. + Likelihood_LIKELIHOOD_UNSPECIFIED Likelihood = 0 + // Very unlikely. + Likelihood_VERY_UNLIKELY Likelihood = 1 + // Unlikely. + Likelihood_UNLIKELY Likelihood = 2 + // Possible. + Likelihood_POSSIBLE Likelihood = 3 + // Likely. + Likelihood_LIKELY Likelihood = 4 + // Very likely. + Likelihood_VERY_LIKELY Likelihood = 5 +) + +var Likelihood_name = map[int32]string{ + 0: "LIKELIHOOD_UNSPECIFIED", + 1: "VERY_UNLIKELY", + 2: "UNLIKELY", + 3: "POSSIBLE", + 4: "LIKELY", + 5: "VERY_LIKELY", +} +var Likelihood_value = map[string]int32{ + "LIKELIHOOD_UNSPECIFIED": 0, + "VERY_UNLIKELY": 1, + "UNLIKELY": 2, + "POSSIBLE": 3, + "LIKELY": 4, + "VERY_LIKELY": 5, +} + +func (x Likelihood) String() string { + return proto.EnumName(Likelihood_name, int32(x)) +} +func (Likelihood) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +// Video annotation request. +type AnnotateVideoRequest struct { + // Input video location. Currently, only + // [Google Cloud Storage](https://cloud.google.com/storage/) URIs are + // supported, which must be specified in the following format: + // `gs://bucket-id/object-id` (other URI formats return + // [google.rpc.Code.INVALID_ARGUMENT][google.rpc.Code.INVALID_ARGUMENT]). For more information, see + // [Request URIs](/storage/docs/reference-uris). + // A video URI may include wildcards in `object-id`, and thus identify + // multiple videos. Supported wildcards: '*' to match 0 or more characters; + // '?' to match 1 character. If unset, the input video should be embedded + // in the request as `input_content`. If set, `input_content` should be unset. + InputUri string `protobuf:"bytes,1,opt,name=input_uri,json=inputUri" json:"input_uri,omitempty"` + // The video data bytes. + // If unset, the input video(s) should be specified via `input_uri`. + // If set, `input_uri` should be unset. + InputContent []byte `protobuf:"bytes,6,opt,name=input_content,json=inputContent,proto3" json:"input_content,omitempty"` + // Requested video annotation features. + Features []Feature `protobuf:"varint,2,rep,packed,name=features,enum=google.cloud.videointelligence.v1.Feature" json:"features,omitempty"` + // Additional video context and/or feature-specific parameters. + VideoContext *VideoContext `protobuf:"bytes,3,opt,name=video_context,json=videoContext" json:"video_context,omitempty"` + // Optional location where the output (in JSON format) should be stored. + // Currently, only [Google Cloud Storage](https://cloud.google.com/storage/) + // URIs are supported, which must be specified in the following format: + // `gs://bucket-id/object-id` (other URI formats return + // [google.rpc.Code.INVALID_ARGUMENT][google.rpc.Code.INVALID_ARGUMENT]). For more information, see + // [Request URIs](/storage/docs/reference-uris). + OutputUri string `protobuf:"bytes,4,opt,name=output_uri,json=outputUri" json:"output_uri,omitempty"` + // Optional cloud region where annotation should take place. Supported cloud + // regions: `us-east1`, `us-west1`, `europe-west1`, `asia-east1`. If no region + // is specified, a region will be determined based on video file location. + LocationId string `protobuf:"bytes,5,opt,name=location_id,json=locationId" json:"location_id,omitempty"` +} + +func (m *AnnotateVideoRequest) Reset() { *m = AnnotateVideoRequest{} } +func (m *AnnotateVideoRequest) String() string { return proto.CompactTextString(m) } +func (*AnnotateVideoRequest) ProtoMessage() {} +func (*AnnotateVideoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *AnnotateVideoRequest) GetInputUri() string { + if m != nil { + return m.InputUri + } + return "" +} + +func (m *AnnotateVideoRequest) GetInputContent() []byte { + if m != nil { + return m.InputContent + } + return nil +} + +func (m *AnnotateVideoRequest) GetFeatures() []Feature { + if m != nil { + return m.Features + } + return nil +} + +func (m *AnnotateVideoRequest) GetVideoContext() *VideoContext { + if m != nil { + return m.VideoContext + } + return nil +} + +func (m *AnnotateVideoRequest) GetOutputUri() string { + if m != nil { + return m.OutputUri + } + return "" +} + +func (m *AnnotateVideoRequest) GetLocationId() string { + if m != nil { + return m.LocationId + } + return "" +} + +// Video context and/or feature-specific parameters. +type VideoContext struct { + // Video segments to annotate. The segments may overlap and are not required + // to be contiguous or span the whole video. If unspecified, each video + // is treated as a single segment. + Segments []*VideoSegment `protobuf:"bytes,1,rep,name=segments" json:"segments,omitempty"` + // Config for LABEL_DETECTION. + LabelDetectionConfig *LabelDetectionConfig `protobuf:"bytes,2,opt,name=label_detection_config,json=labelDetectionConfig" json:"label_detection_config,omitempty"` + // Config for SHOT_CHANGE_DETECTION. + ShotChangeDetectionConfig *ShotChangeDetectionConfig `protobuf:"bytes,3,opt,name=shot_change_detection_config,json=shotChangeDetectionConfig" json:"shot_change_detection_config,omitempty"` + // Config for EXPLICIT_CONTENT_DETECTION. + ExplicitContentDetectionConfig *ExplicitContentDetectionConfig `protobuf:"bytes,4,opt,name=explicit_content_detection_config,json=explicitContentDetectionConfig" json:"explicit_content_detection_config,omitempty"` + // Config for FACE_DETECTION. + FaceDetectionConfig *FaceDetectionConfig `protobuf:"bytes,5,opt,name=face_detection_config,json=faceDetectionConfig" json:"face_detection_config,omitempty"` +} + +func (m *VideoContext) Reset() { *m = VideoContext{} } +func (m *VideoContext) String() string { return proto.CompactTextString(m) } +func (*VideoContext) ProtoMessage() {} +func (*VideoContext) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *VideoContext) GetSegments() []*VideoSegment { + if m != nil { + return m.Segments + } + return nil +} + +func (m *VideoContext) GetLabelDetectionConfig() *LabelDetectionConfig { + if m != nil { + return m.LabelDetectionConfig + } + return nil +} + +func (m *VideoContext) GetShotChangeDetectionConfig() *ShotChangeDetectionConfig { + if m != nil { + return m.ShotChangeDetectionConfig + } + return nil +} + +func (m *VideoContext) GetExplicitContentDetectionConfig() *ExplicitContentDetectionConfig { + if m != nil { + return m.ExplicitContentDetectionConfig + } + return nil +} + +func (m *VideoContext) GetFaceDetectionConfig() *FaceDetectionConfig { + if m != nil { + return m.FaceDetectionConfig + } + return nil +} + +// Config for LABEL_DETECTION. +type LabelDetectionConfig struct { + // What labels should be detected with LABEL_DETECTION, in addition to + // video-level labels or segment-level labels. + // If unspecified, defaults to `SHOT_MODE`. + LabelDetectionMode LabelDetectionMode `protobuf:"varint,1,opt,name=label_detection_mode,json=labelDetectionMode,enum=google.cloud.videointelligence.v1.LabelDetectionMode" json:"label_detection_mode,omitempty"` + // Whether the video has been shot from a stationary (i.e. non-moving) camera. + // When set to true, might improve detection accuracy for moving objects. + // Should be used with `SHOT_AND_FRAME_MODE` enabled. + StationaryCamera bool `protobuf:"varint,2,opt,name=stationary_camera,json=stationaryCamera" json:"stationary_camera,omitempty"` + // Model to use for label detection. + // Supported values: "builtin/stable" (the default if unset) and + // "builtin/latest". + Model string `protobuf:"bytes,3,opt,name=model" json:"model,omitempty"` +} + +func (m *LabelDetectionConfig) Reset() { *m = LabelDetectionConfig{} } +func (m *LabelDetectionConfig) String() string { return proto.CompactTextString(m) } +func (*LabelDetectionConfig) ProtoMessage() {} +func (*LabelDetectionConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *LabelDetectionConfig) GetLabelDetectionMode() LabelDetectionMode { + if m != nil { + return m.LabelDetectionMode + } + return LabelDetectionMode_LABEL_DETECTION_MODE_UNSPECIFIED +} + +func (m *LabelDetectionConfig) GetStationaryCamera() bool { + if m != nil { + return m.StationaryCamera + } + return false +} + +func (m *LabelDetectionConfig) GetModel() string { + if m != nil { + return m.Model + } + return "" +} + +// Config for SHOT_CHANGE_DETECTION. +type ShotChangeDetectionConfig struct { + // Model to use for shot change detection. + // Supported values: "builtin/stable" (the default if unset) and + // "builtin/latest". + Model string `protobuf:"bytes,1,opt,name=model" json:"model,omitempty"` +} + +func (m *ShotChangeDetectionConfig) Reset() { *m = ShotChangeDetectionConfig{} } +func (m *ShotChangeDetectionConfig) String() string { return proto.CompactTextString(m) } +func (*ShotChangeDetectionConfig) ProtoMessage() {} +func (*ShotChangeDetectionConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *ShotChangeDetectionConfig) GetModel() string { + if m != nil { + return m.Model + } + return "" +} + +// Config for EXPLICIT_CONTENT_DETECTION. +type ExplicitContentDetectionConfig struct { + // Model to use for explicit content detection. + // Supported values: "builtin/stable" (the default if unset) and + // "builtin/latest". + Model string `protobuf:"bytes,1,opt,name=model" json:"model,omitempty"` +} + +func (m *ExplicitContentDetectionConfig) Reset() { *m = ExplicitContentDetectionConfig{} } +func (m *ExplicitContentDetectionConfig) String() string { return proto.CompactTextString(m) } +func (*ExplicitContentDetectionConfig) ProtoMessage() {} +func (*ExplicitContentDetectionConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *ExplicitContentDetectionConfig) GetModel() string { + if m != nil { + return m.Model + } + return "" +} + +// Config for FACE_DETECTION. +type FaceDetectionConfig struct { + // Model to use for face detection. + // Supported values: "builtin/stable" (the default if unset) and + // "builtin/latest". + Model string `protobuf:"bytes,1,opt,name=model" json:"model,omitempty"` + // Whether bounding boxes be included in the face annotation output. + IncludeBoundingBoxes bool `protobuf:"varint,2,opt,name=include_bounding_boxes,json=includeBoundingBoxes" json:"include_bounding_boxes,omitempty"` +} + +func (m *FaceDetectionConfig) Reset() { *m = FaceDetectionConfig{} } +func (m *FaceDetectionConfig) String() string { return proto.CompactTextString(m) } +func (*FaceDetectionConfig) ProtoMessage() {} +func (*FaceDetectionConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *FaceDetectionConfig) GetModel() string { + if m != nil { + return m.Model + } + return "" +} + +func (m *FaceDetectionConfig) GetIncludeBoundingBoxes() bool { + if m != nil { + return m.IncludeBoundingBoxes + } + return false +} + +// Video segment. +type VideoSegment struct { + // Time-offset, relative to the beginning of the video, + // corresponding to the start of the segment (inclusive). + StartTimeOffset *google_protobuf3.Duration `protobuf:"bytes,1,opt,name=start_time_offset,json=startTimeOffset" json:"start_time_offset,omitempty"` + // Time-offset, relative to the beginning of the video, + // corresponding to the end of the segment (inclusive). + EndTimeOffset *google_protobuf3.Duration `protobuf:"bytes,2,opt,name=end_time_offset,json=endTimeOffset" json:"end_time_offset,omitempty"` +} + +func (m *VideoSegment) Reset() { *m = VideoSegment{} } +func (m *VideoSegment) String() string { return proto.CompactTextString(m) } +func (*VideoSegment) ProtoMessage() {} +func (*VideoSegment) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *VideoSegment) GetStartTimeOffset() *google_protobuf3.Duration { + if m != nil { + return m.StartTimeOffset + } + return nil +} + +func (m *VideoSegment) GetEndTimeOffset() *google_protobuf3.Duration { + if m != nil { + return m.EndTimeOffset + } + return nil +} + +// Video segment level annotation results for label detection. +type LabelSegment struct { + // Video segment where a label was detected. + Segment *VideoSegment `protobuf:"bytes,1,opt,name=segment" json:"segment,omitempty"` + // Confidence that the label is accurate. Range: [0, 1]. + Confidence float32 `protobuf:"fixed32,2,opt,name=confidence" json:"confidence,omitempty"` +} + +func (m *LabelSegment) Reset() { *m = LabelSegment{} } +func (m *LabelSegment) String() string { return proto.CompactTextString(m) } +func (*LabelSegment) ProtoMessage() {} +func (*LabelSegment) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *LabelSegment) GetSegment() *VideoSegment { + if m != nil { + return m.Segment + } + return nil +} + +func (m *LabelSegment) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + +// Video frame level annotation results for label detection. +type LabelFrame struct { + // Time-offset, relative to the beginning of the video, corresponding to the + // video frame for this location. + TimeOffset *google_protobuf3.Duration `protobuf:"bytes,1,opt,name=time_offset,json=timeOffset" json:"time_offset,omitempty"` + // Confidence that the label is accurate. Range: [0, 1]. + Confidence float32 `protobuf:"fixed32,2,opt,name=confidence" json:"confidence,omitempty"` +} + +func (m *LabelFrame) Reset() { *m = LabelFrame{} } +func (m *LabelFrame) String() string { return proto.CompactTextString(m) } +func (*LabelFrame) ProtoMessage() {} +func (*LabelFrame) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *LabelFrame) GetTimeOffset() *google_protobuf3.Duration { + if m != nil { + return m.TimeOffset + } + return nil +} + +func (m *LabelFrame) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + +// Detected entity from video analysis. +type Entity struct { + // Opaque entity ID. Some IDs may be available in + // [Google Knowledge Graph Search + // API](https://developers.google.com/knowledge-graph/). + EntityId string `protobuf:"bytes,1,opt,name=entity_id,json=entityId" json:"entity_id,omitempty"` + // Textual description, e.g. `Fixed-gear bicycle`. + Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` + // Language code for `description` in BCP-47 format. + LanguageCode string `protobuf:"bytes,3,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` +} + +func (m *Entity) Reset() { *m = Entity{} } +func (m *Entity) String() string { return proto.CompactTextString(m) } +func (*Entity) ProtoMessage() {} +func (*Entity) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *Entity) GetEntityId() string { + if m != nil { + return m.EntityId + } + return "" +} + +func (m *Entity) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *Entity) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +// Label annotation. +type LabelAnnotation struct { + // Detected entity. + Entity *Entity `protobuf:"bytes,1,opt,name=entity" json:"entity,omitempty"` + // Common categories for the detected entity. + // E.g. when the label is `Terrier` the category is likely `dog`. And in some + // cases there might be more than one categories e.g. `Terrier` could also be + // a `pet`. + CategoryEntities []*Entity `protobuf:"bytes,2,rep,name=category_entities,json=categoryEntities" json:"category_entities,omitempty"` + // All video segments where a label was detected. + Segments []*LabelSegment `protobuf:"bytes,3,rep,name=segments" json:"segments,omitempty"` + // All video frames where a label was detected. + Frames []*LabelFrame `protobuf:"bytes,4,rep,name=frames" json:"frames,omitempty"` +} + +func (m *LabelAnnotation) Reset() { *m = LabelAnnotation{} } +func (m *LabelAnnotation) String() string { return proto.CompactTextString(m) } +func (*LabelAnnotation) ProtoMessage() {} +func (*LabelAnnotation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *LabelAnnotation) GetEntity() *Entity { + if m != nil { + return m.Entity + } + return nil +} + +func (m *LabelAnnotation) GetCategoryEntities() []*Entity { + if m != nil { + return m.CategoryEntities + } + return nil +} + +func (m *LabelAnnotation) GetSegments() []*LabelSegment { + if m != nil { + return m.Segments + } + return nil +} + +func (m *LabelAnnotation) GetFrames() []*LabelFrame { + if m != nil { + return m.Frames + } + return nil +} + +// Video frame level annotation results for explicit content. +type ExplicitContentFrame struct { + // Time-offset, relative to the beginning of the video, corresponding to the + // video frame for this location. + TimeOffset *google_protobuf3.Duration `protobuf:"bytes,1,opt,name=time_offset,json=timeOffset" json:"time_offset,omitempty"` + // Likelihood of the pornography content.. + PornographyLikelihood Likelihood `protobuf:"varint,2,opt,name=pornography_likelihood,json=pornographyLikelihood,enum=google.cloud.videointelligence.v1.Likelihood" json:"pornography_likelihood,omitempty"` +} + +func (m *ExplicitContentFrame) Reset() { *m = ExplicitContentFrame{} } +func (m *ExplicitContentFrame) String() string { return proto.CompactTextString(m) } +func (*ExplicitContentFrame) ProtoMessage() {} +func (*ExplicitContentFrame) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *ExplicitContentFrame) GetTimeOffset() *google_protobuf3.Duration { + if m != nil { + return m.TimeOffset + } + return nil +} + +func (m *ExplicitContentFrame) GetPornographyLikelihood() Likelihood { + if m != nil { + return m.PornographyLikelihood + } + return Likelihood_LIKELIHOOD_UNSPECIFIED +} + +// Explicit content annotation (based on per-frame visual signals only). +// If no explicit content has been detected in a frame, no annotations are +// present for that frame. +type ExplicitContentAnnotation struct { + // All video frames where explicit content was detected. + Frames []*ExplicitContentFrame `protobuf:"bytes,1,rep,name=frames" json:"frames,omitempty"` +} + +func (m *ExplicitContentAnnotation) Reset() { *m = ExplicitContentAnnotation{} } +func (m *ExplicitContentAnnotation) String() string { return proto.CompactTextString(m) } +func (*ExplicitContentAnnotation) ProtoMessage() {} +func (*ExplicitContentAnnotation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *ExplicitContentAnnotation) GetFrames() []*ExplicitContentFrame { + if m != nil { + return m.Frames + } + return nil +} + +// Normalized bounding box. +// The normalized vertex coordinates are relative to the original image. +// Range: [0, 1]. +type NormalizedBoundingBox struct { + // Left X coordinate. + Left float32 `protobuf:"fixed32,1,opt,name=left" json:"left,omitempty"` + // Top Y coordinate. + Top float32 `protobuf:"fixed32,2,opt,name=top" json:"top,omitempty"` + // Right X coordinate. + Right float32 `protobuf:"fixed32,3,opt,name=right" json:"right,omitempty"` + // Bottom Y coordinate. + Bottom float32 `protobuf:"fixed32,4,opt,name=bottom" json:"bottom,omitempty"` +} + +func (m *NormalizedBoundingBox) Reset() { *m = NormalizedBoundingBox{} } +func (m *NormalizedBoundingBox) String() string { return proto.CompactTextString(m) } +func (*NormalizedBoundingBox) ProtoMessage() {} +func (*NormalizedBoundingBox) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +func (m *NormalizedBoundingBox) GetLeft() float32 { + if m != nil { + return m.Left + } + return 0 +} + +func (m *NormalizedBoundingBox) GetTop() float32 { + if m != nil { + return m.Top + } + return 0 +} + +func (m *NormalizedBoundingBox) GetRight() float32 { + if m != nil { + return m.Right + } + return 0 +} + +func (m *NormalizedBoundingBox) GetBottom() float32 { + if m != nil { + return m.Bottom + } + return 0 +} + +// Video segment level annotation results for face detection. +type FaceSegment struct { + // Video segment where a face was detected. + Segment *VideoSegment `protobuf:"bytes,1,opt,name=segment" json:"segment,omitempty"` +} + +func (m *FaceSegment) Reset() { *m = FaceSegment{} } +func (m *FaceSegment) String() string { return proto.CompactTextString(m) } +func (*FaceSegment) ProtoMessage() {} +func (*FaceSegment) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +func (m *FaceSegment) GetSegment() *VideoSegment { + if m != nil { + return m.Segment + } + return nil +} + +// Video frame level annotation results for face detection. +type FaceFrame struct { + // Normalized Bounding boxes in a frame. + // There can be more than one boxes if the same face is detected in multiple + // locations within the current frame. + NormalizedBoundingBoxes []*NormalizedBoundingBox `protobuf:"bytes,1,rep,name=normalized_bounding_boxes,json=normalizedBoundingBoxes" json:"normalized_bounding_boxes,omitempty"` + // Time-offset, relative to the beginning of the video, + // corresponding to the video frame for this location. + TimeOffset *google_protobuf3.Duration `protobuf:"bytes,2,opt,name=time_offset,json=timeOffset" json:"time_offset,omitempty"` +} + +func (m *FaceFrame) Reset() { *m = FaceFrame{} } +func (m *FaceFrame) String() string { return proto.CompactTextString(m) } +func (*FaceFrame) ProtoMessage() {} +func (*FaceFrame) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +func (m *FaceFrame) GetNormalizedBoundingBoxes() []*NormalizedBoundingBox { + if m != nil { + return m.NormalizedBoundingBoxes + } + return nil +} + +func (m *FaceFrame) GetTimeOffset() *google_protobuf3.Duration { + if m != nil { + return m.TimeOffset + } + return nil +} + +// Face annotation. +type FaceAnnotation struct { + // Thumbnail of a representative face view (in JPEG format). + Thumbnail []byte `protobuf:"bytes,1,opt,name=thumbnail,proto3" json:"thumbnail,omitempty"` + // All video segments where a face was detected. + Segments []*FaceSegment `protobuf:"bytes,2,rep,name=segments" json:"segments,omitempty"` + // All video frames where a face was detected. + Frames []*FaceFrame `protobuf:"bytes,3,rep,name=frames" json:"frames,omitempty"` +} + +func (m *FaceAnnotation) Reset() { *m = FaceAnnotation{} } +func (m *FaceAnnotation) String() string { return proto.CompactTextString(m) } +func (*FaceAnnotation) ProtoMessage() {} +func (*FaceAnnotation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } + +func (m *FaceAnnotation) GetThumbnail() []byte { + if m != nil { + return m.Thumbnail + } + return nil +} + +func (m *FaceAnnotation) GetSegments() []*FaceSegment { + if m != nil { + return m.Segments + } + return nil +} + +func (m *FaceAnnotation) GetFrames() []*FaceFrame { + if m != nil { + return m.Frames + } + return nil +} + +// Annotation results for a single video. +type VideoAnnotationResults struct { + // Video file location in + // [Google Cloud Storage](https://cloud.google.com/storage/). + InputUri string `protobuf:"bytes,1,opt,name=input_uri,json=inputUri" json:"input_uri,omitempty"` + // Label annotations on video level or user specified segment level. + // There is exactly one element for each unique label. + SegmentLabelAnnotations []*LabelAnnotation `protobuf:"bytes,2,rep,name=segment_label_annotations,json=segmentLabelAnnotations" json:"segment_label_annotations,omitempty"` + // Label annotations on shot level. + // There is exactly one element for each unique label. + ShotLabelAnnotations []*LabelAnnotation `protobuf:"bytes,3,rep,name=shot_label_annotations,json=shotLabelAnnotations" json:"shot_label_annotations,omitempty"` + // Label annotations on frame level. + // There is exactly one element for each unique label. + FrameLabelAnnotations []*LabelAnnotation `protobuf:"bytes,4,rep,name=frame_label_annotations,json=frameLabelAnnotations" json:"frame_label_annotations,omitempty"` + // Face annotations. There is exactly one element for each unique face. + FaceAnnotations []*FaceAnnotation `protobuf:"bytes,5,rep,name=face_annotations,json=faceAnnotations" json:"face_annotations,omitempty"` + // Shot annotations. Each shot is represented as a video segment. + ShotAnnotations []*VideoSegment `protobuf:"bytes,6,rep,name=shot_annotations,json=shotAnnotations" json:"shot_annotations,omitempty"` + // Explicit content annotation. + ExplicitAnnotation *ExplicitContentAnnotation `protobuf:"bytes,7,opt,name=explicit_annotation,json=explicitAnnotation" json:"explicit_annotation,omitempty"` + // If set, indicates an error. Note that for a single `AnnotateVideoRequest` + // some videos may succeed and some may fail. + Error *google_rpc.Status `protobuf:"bytes,9,opt,name=error" json:"error,omitempty"` +} + +func (m *VideoAnnotationResults) Reset() { *m = VideoAnnotationResults{} } +func (m *VideoAnnotationResults) String() string { return proto.CompactTextString(m) } +func (*VideoAnnotationResults) ProtoMessage() {} +func (*VideoAnnotationResults) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } + +func (m *VideoAnnotationResults) GetInputUri() string { + if m != nil { + return m.InputUri + } + return "" +} + +func (m *VideoAnnotationResults) GetSegmentLabelAnnotations() []*LabelAnnotation { + if m != nil { + return m.SegmentLabelAnnotations + } + return nil +} + +func (m *VideoAnnotationResults) GetShotLabelAnnotations() []*LabelAnnotation { + if m != nil { + return m.ShotLabelAnnotations + } + return nil +} + +func (m *VideoAnnotationResults) GetFrameLabelAnnotations() []*LabelAnnotation { + if m != nil { + return m.FrameLabelAnnotations + } + return nil +} + +func (m *VideoAnnotationResults) GetFaceAnnotations() []*FaceAnnotation { + if m != nil { + return m.FaceAnnotations + } + return nil +} + +func (m *VideoAnnotationResults) GetShotAnnotations() []*VideoSegment { + if m != nil { + return m.ShotAnnotations + } + return nil +} + +func (m *VideoAnnotationResults) GetExplicitAnnotation() *ExplicitContentAnnotation { + if m != nil { + return m.ExplicitAnnotation + } + return nil +} + +func (m *VideoAnnotationResults) GetError() *google_rpc.Status { + if m != nil { + return m.Error + } + return nil +} + +// Video annotation response. Included in the `response` +// field of the `Operation` returned by the `GetOperation` +// call of the `google::longrunning::Operations` service. +type AnnotateVideoResponse struct { + // Annotation results for all videos specified in `AnnotateVideoRequest`. + AnnotationResults []*VideoAnnotationResults `protobuf:"bytes,1,rep,name=annotation_results,json=annotationResults" json:"annotation_results,omitempty"` +} + +func (m *AnnotateVideoResponse) Reset() { *m = AnnotateVideoResponse{} } +func (m *AnnotateVideoResponse) String() string { return proto.CompactTextString(m) } +func (*AnnotateVideoResponse) ProtoMessage() {} +func (*AnnotateVideoResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } + +func (m *AnnotateVideoResponse) GetAnnotationResults() []*VideoAnnotationResults { + if m != nil { + return m.AnnotationResults + } + return nil +} + +// Annotation progress for a single video. +type VideoAnnotationProgress struct { + // Video file location in + // [Google Cloud Storage](https://cloud.google.com/storage/). + InputUri string `protobuf:"bytes,1,opt,name=input_uri,json=inputUri" json:"input_uri,omitempty"` + // Approximate percentage processed thus far. + // Guaranteed to be 100 when fully processed. + ProgressPercent int32 `protobuf:"varint,2,opt,name=progress_percent,json=progressPercent" json:"progress_percent,omitempty"` + // Time when the request was received. + StartTime *google_protobuf4.Timestamp `protobuf:"bytes,3,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // Time of the most recent update. + UpdateTime *google_protobuf4.Timestamp `protobuf:"bytes,4,opt,name=update_time,json=updateTime" json:"update_time,omitempty"` +} + +func (m *VideoAnnotationProgress) Reset() { *m = VideoAnnotationProgress{} } +func (m *VideoAnnotationProgress) String() string { return proto.CompactTextString(m) } +func (*VideoAnnotationProgress) ProtoMessage() {} +func (*VideoAnnotationProgress) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } + +func (m *VideoAnnotationProgress) GetInputUri() string { + if m != nil { + return m.InputUri + } + return "" +} + +func (m *VideoAnnotationProgress) GetProgressPercent() int32 { + if m != nil { + return m.ProgressPercent + } + return 0 +} + +func (m *VideoAnnotationProgress) GetStartTime() *google_protobuf4.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *VideoAnnotationProgress) GetUpdateTime() *google_protobuf4.Timestamp { + if m != nil { + return m.UpdateTime + } + return nil +} + +// Video annotation progress. Included in the `metadata` +// field of the `Operation` returned by the `GetOperation` +// call of the `google::longrunning::Operations` service. +type AnnotateVideoProgress struct { + // Progress metadata for all videos specified in `AnnotateVideoRequest`. + AnnotationProgress []*VideoAnnotationProgress `protobuf:"bytes,1,rep,name=annotation_progress,json=annotationProgress" json:"annotation_progress,omitempty"` +} + +func (m *AnnotateVideoProgress) Reset() { *m = AnnotateVideoProgress{} } +func (m *AnnotateVideoProgress) String() string { return proto.CompactTextString(m) } +func (*AnnotateVideoProgress) ProtoMessage() {} +func (*AnnotateVideoProgress) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } + +func (m *AnnotateVideoProgress) GetAnnotationProgress() []*VideoAnnotationProgress { + if m != nil { + return m.AnnotationProgress + } + return nil +} + +func init() { + proto.RegisterType((*AnnotateVideoRequest)(nil), "google.cloud.videointelligence.v1.AnnotateVideoRequest") + proto.RegisterType((*VideoContext)(nil), "google.cloud.videointelligence.v1.VideoContext") + proto.RegisterType((*LabelDetectionConfig)(nil), "google.cloud.videointelligence.v1.LabelDetectionConfig") + proto.RegisterType((*ShotChangeDetectionConfig)(nil), "google.cloud.videointelligence.v1.ShotChangeDetectionConfig") + proto.RegisterType((*ExplicitContentDetectionConfig)(nil), "google.cloud.videointelligence.v1.ExplicitContentDetectionConfig") + proto.RegisterType((*FaceDetectionConfig)(nil), "google.cloud.videointelligence.v1.FaceDetectionConfig") + proto.RegisterType((*VideoSegment)(nil), "google.cloud.videointelligence.v1.VideoSegment") + proto.RegisterType((*LabelSegment)(nil), "google.cloud.videointelligence.v1.LabelSegment") + proto.RegisterType((*LabelFrame)(nil), "google.cloud.videointelligence.v1.LabelFrame") + proto.RegisterType((*Entity)(nil), "google.cloud.videointelligence.v1.Entity") + proto.RegisterType((*LabelAnnotation)(nil), "google.cloud.videointelligence.v1.LabelAnnotation") + proto.RegisterType((*ExplicitContentFrame)(nil), "google.cloud.videointelligence.v1.ExplicitContentFrame") + proto.RegisterType((*ExplicitContentAnnotation)(nil), "google.cloud.videointelligence.v1.ExplicitContentAnnotation") + proto.RegisterType((*NormalizedBoundingBox)(nil), "google.cloud.videointelligence.v1.NormalizedBoundingBox") + proto.RegisterType((*FaceSegment)(nil), "google.cloud.videointelligence.v1.FaceSegment") + proto.RegisterType((*FaceFrame)(nil), "google.cloud.videointelligence.v1.FaceFrame") + proto.RegisterType((*FaceAnnotation)(nil), "google.cloud.videointelligence.v1.FaceAnnotation") + proto.RegisterType((*VideoAnnotationResults)(nil), "google.cloud.videointelligence.v1.VideoAnnotationResults") + proto.RegisterType((*AnnotateVideoResponse)(nil), "google.cloud.videointelligence.v1.AnnotateVideoResponse") + proto.RegisterType((*VideoAnnotationProgress)(nil), "google.cloud.videointelligence.v1.VideoAnnotationProgress") + proto.RegisterType((*AnnotateVideoProgress)(nil), "google.cloud.videointelligence.v1.AnnotateVideoProgress") + proto.RegisterEnum("google.cloud.videointelligence.v1.Feature", Feature_name, Feature_value) + proto.RegisterEnum("google.cloud.videointelligence.v1.LabelDetectionMode", LabelDetectionMode_name, LabelDetectionMode_value) + proto.RegisterEnum("google.cloud.videointelligence.v1.Likelihood", Likelihood_name, Likelihood_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for VideoIntelligenceService service + +type VideoIntelligenceServiceClient interface { + // Performs asynchronous video annotation. Progress and results can be + // retrieved through the `google.longrunning.Operations` interface. + // `Operation.metadata` contains `AnnotateVideoProgress` (progress). + // `Operation.response` contains `AnnotateVideoResponse` (results). + AnnotateVideo(ctx context.Context, in *AnnotateVideoRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) +} + +type videoIntelligenceServiceClient struct { + cc *grpc.ClientConn +} + +func NewVideoIntelligenceServiceClient(cc *grpc.ClientConn) VideoIntelligenceServiceClient { + return &videoIntelligenceServiceClient{cc} +} + +func (c *videoIntelligenceServiceClient) AnnotateVideo(ctx context.Context, in *AnnotateVideoRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.videointelligence.v1.VideoIntelligenceService/AnnotateVideo", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for VideoIntelligenceService service + +type VideoIntelligenceServiceServer interface { + // Performs asynchronous video annotation. Progress and results can be + // retrieved through the `google.longrunning.Operations` interface. + // `Operation.metadata` contains `AnnotateVideoProgress` (progress). + // `Operation.response` contains `AnnotateVideoResponse` (results). + AnnotateVideo(context.Context, *AnnotateVideoRequest) (*google_longrunning.Operation, error) +} + +func RegisterVideoIntelligenceServiceServer(s *grpc.Server, srv VideoIntelligenceServiceServer) { + s.RegisterService(&_VideoIntelligenceService_serviceDesc, srv) +} + +func _VideoIntelligenceService_AnnotateVideo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AnnotateVideoRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VideoIntelligenceServiceServer).AnnotateVideo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.videointelligence.v1.VideoIntelligenceService/AnnotateVideo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VideoIntelligenceServiceServer).AnnotateVideo(ctx, req.(*AnnotateVideoRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _VideoIntelligenceService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.videointelligence.v1.VideoIntelligenceService", + HandlerType: (*VideoIntelligenceServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "AnnotateVideo", + Handler: _VideoIntelligenceService_AnnotateVideo_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/videointelligence/v1/video_intelligence.proto", +} + +func init() { + proto.RegisterFile("google/cloud/videointelligence/v1/video_intelligence.proto", fileDescriptor0) +} + +var fileDescriptor0 = []byte{ + // 1705 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0xcd, 0x73, 0xe3, 0x48, + 0x15, 0x47, 0xb6, 0x93, 0x89, 0x5f, 0xbe, 0x3c, 0x9d, 0x2f, 0x27, 0xcc, 0x64, 0x33, 0x5a, 0xa8, + 0xca, 0x06, 0xb0, 0x2b, 0x01, 0x76, 0xd9, 0x2c, 0x17, 0xc7, 0x51, 0x76, 0xcc, 0x66, 0xe2, 0x54, + 0xdb, 0x93, 0xda, 0xdd, 0x9a, 0x2a, 0x95, 0x22, 0xb5, 0x65, 0xed, 0xc8, 0x6a, 0x21, 0xb5, 0x52, + 0x13, 0xaa, 0x38, 0x40, 0x51, 0x70, 0xe1, 0xc6, 0x85, 0x3f, 0x80, 0x13, 0x7f, 0x00, 0xc5, 0x85, + 0xaa, 0x2d, 0x8a, 0x13, 0x07, 0x2e, 0x9c, 0xb8, 0xef, 0x1f, 0x42, 0xa9, 0xbb, 0x65, 0x2b, 0x92, + 0x33, 0x91, 0x07, 0x6e, 0xea, 0xf7, 0xf1, 0x7b, 0xaf, 0xdf, 0x57, 0x77, 0x0b, 0x8e, 0x6d, 0x4a, + 0x6d, 0x97, 0x34, 0x4d, 0x97, 0x46, 0x56, 0xf3, 0xc6, 0xb1, 0x08, 0x75, 0x3c, 0x46, 0x5c, 0xd7, + 0xb1, 0x89, 0x67, 0x92, 0xe6, 0xcd, 0xa1, 0x20, 0xea, 0x69, 0x6a, 0xc3, 0x0f, 0x28, 0xa3, 0xe8, + 0x99, 0xd0, 0x6d, 0x70, 0xdd, 0x46, 0x4e, 0xb7, 0x71, 0x73, 0xb8, 0xf3, 0x44, 0xc2, 0x1b, 0xbe, + 0xd3, 0x34, 0x3c, 0x8f, 0x32, 0x83, 0x39, 0xd4, 0x0b, 0x05, 0xc0, 0xce, 0xfb, 0x92, 0xeb, 0x52, + 0xcf, 0x0e, 0x22, 0xcf, 0x73, 0x3c, 0xbb, 0x49, 0x7d, 0x12, 0xdc, 0x11, 0xda, 0x95, 0x42, 0x7c, + 0x75, 0x1d, 0x0d, 0x9a, 0x56, 0x24, 0x04, 0x24, 0xff, 0xbd, 0x2c, 0x9f, 0x39, 0x23, 0x12, 0x32, + 0x63, 0xe4, 0x4b, 0x81, 0x2d, 0x29, 0x10, 0xf8, 0x66, 0x33, 0x64, 0x06, 0x8b, 0x24, 0xb2, 0xfa, + 0x97, 0x12, 0xac, 0xb7, 0x84, 0x53, 0xe4, 0x2a, 0xf6, 0x1e, 0x93, 0x9f, 0x47, 0x24, 0x64, 0xe8, + 0xdb, 0x50, 0x75, 0x3c, 0x3f, 0x62, 0x7a, 0x14, 0x38, 0x75, 0x65, 0x4f, 0xd9, 0xaf, 0xe2, 0x05, + 0x4e, 0x78, 0x19, 0x38, 0xe8, 0x7d, 0x58, 0x16, 0x4c, 0x93, 0x7a, 0x8c, 0x78, 0xac, 0x3e, 0xbf, + 0xa7, 0xec, 0x2f, 0xe1, 0x25, 0x4e, 0x6c, 0x0b, 0x1a, 0x3a, 0x83, 0x85, 0x01, 0x31, 0x58, 0x14, + 0x90, 0xb0, 0x5e, 0xda, 0x2b, 0xef, 0xaf, 0x1c, 0x1d, 0x34, 0x1e, 0x8c, 0x56, 0xe3, 0x4c, 0xa8, + 0xe0, 0xb1, 0x2e, 0xea, 0xc3, 0xb2, 0x08, 0x3f, 0x37, 0xf6, 0x86, 0xd5, 0xcb, 0x7b, 0xca, 0xfe, + 0xe2, 0x51, 0xb3, 0x00, 0x18, 0xdf, 0x51, 0x5b, 0xa8, 0xe1, 0xa5, 0x9b, 0xd4, 0x0a, 0x3d, 0x05, + 0xa0, 0x11, 0x4b, 0x36, 0x58, 0xe1, 0x1b, 0xac, 0x0a, 0x4a, 0xbc, 0xc3, 0xf7, 0x60, 0xd1, 0xa5, + 0x26, 0x8f, 0xb1, 0xee, 0x58, 0xf5, 0x39, 0xce, 0x87, 0x84, 0xd4, 0xb1, 0xd4, 0x7f, 0x54, 0x60, + 0x29, 0x0d, 0x8f, 0x3e, 0x83, 0x85, 0x90, 0xd8, 0x23, 0xe2, 0xb1, 0xb0, 0xae, 0xec, 0x95, 0x67, + 0xf1, 0xb0, 0x27, 0xf4, 0xf0, 0x18, 0x00, 0x8d, 0x60, 0xd3, 0x35, 0xae, 0x89, 0xab, 0x5b, 0x84, + 0x11, 0x93, 0x7b, 0x61, 0x52, 0x6f, 0xe0, 0xd8, 0xf5, 0x12, 0xdf, 0xfc, 0x47, 0x05, 0xa0, 0xcf, + 0x63, 0x80, 0xd3, 0x44, 0xbf, 0xcd, 0xd5, 0xf1, 0xba, 0x3b, 0x85, 0x8a, 0x7e, 0x09, 0x4f, 0xc2, + 0x21, 0x65, 0xba, 0x39, 0x34, 0x3c, 0x9b, 0xe4, 0x8d, 0x8a, 0x88, 0xff, 0xb4, 0x80, 0xd1, 0xde, + 0x90, 0xb2, 0x36, 0x47, 0xc9, 0x5a, 0xde, 0x0e, 0xef, 0x63, 0xa1, 0xdf, 0x2b, 0xf0, 0x8c, 0xbc, + 0xf1, 0x5d, 0xc7, 0x74, 0xc6, 0x25, 0x95, 0x77, 0xa2, 0xc2, 0x9d, 0x68, 0x15, 0x70, 0x42, 0x93, + 0x58, 0xb2, 0x12, 0xb3, 0x9e, 0xec, 0x92, 0xb7, 0xf2, 0xd1, 0x57, 0xb0, 0x31, 0x30, 0xcc, 0x29, + 0x61, 0x98, 0xe3, 0x1e, 0x7c, 0x58, 0xa4, 0x8a, 0x0d, 0x33, 0x17, 0x80, 0xb5, 0x41, 0x9e, 0xa8, + 0xfe, 0x5d, 0x81, 0xf5, 0x69, 0x89, 0x42, 0x36, 0xac, 0x67, 0x2b, 0x60, 0x44, 0x2d, 0xc2, 0x5b, + 0x71, 0xe5, 0xe8, 0xc7, 0x33, 0xe7, 0xff, 0x05, 0xb5, 0x08, 0x46, 0x6e, 0x8e, 0x86, 0xbe, 0x07, + 0x8f, 0x43, 0x31, 0x92, 0x8c, 0xe0, 0x56, 0x37, 0x8d, 0x11, 0x09, 0x0c, 0x5e, 0x65, 0x0b, 0xb8, + 0x36, 0x61, 0xb4, 0x39, 0x1d, 0xad, 0xc3, 0x5c, 0xec, 0x85, 0xcb, 0x2b, 0xa2, 0x8a, 0xc5, 0x42, + 0x3d, 0x84, 0xed, 0x7b, 0xf3, 0x3e, 0x51, 0x51, 0xd2, 0x2a, 0x1f, 0xc2, 0xee, 0xdb, 0xb3, 0x74, + 0x8f, 0x9e, 0x01, 0x6b, 0x53, 0x62, 0x3b, 0x5d, 0x18, 0xfd, 0x08, 0x36, 0x1d, 0xcf, 0x74, 0x23, + 0x8b, 0xe8, 0xd7, 0x34, 0xf2, 0x2c, 0xc7, 0xb3, 0xf5, 0x6b, 0xfa, 0x86, 0xcf, 0xa3, 0x78, 0x7f, + 0xeb, 0x92, 0x7b, 0x22, 0x99, 0x27, 0x31, 0x4f, 0xfd, 0xa3, 0x22, 0x3b, 0x5b, 0xb6, 0x25, 0xd2, + 0x78, 0x84, 0x02, 0xa6, 0xc7, 0x53, 0x55, 0xa7, 0x83, 0x41, 0x48, 0x18, 0x37, 0xb4, 0x78, 0xb4, + 0x9d, 0xe4, 0x21, 0x99, 0xbc, 0x8d, 0x53, 0x39, 0x99, 0xf1, 0x2a, 0xd7, 0xe9, 0x3b, 0x23, 0xd2, + 0xe5, 0x1a, 0xa8, 0x05, 0xab, 0xc4, 0xb3, 0xee, 0x80, 0x94, 0x1e, 0x02, 0x59, 0x26, 0x9e, 0x35, + 0x81, 0x50, 0x6f, 0x61, 0x89, 0x67, 0x35, 0xf1, 0xac, 0x03, 0x8f, 0xe4, 0xc8, 0x90, 0xfe, 0xcc, + 0x3c, 0x72, 0x12, 0x7d, 0xb4, 0x0b, 0xc0, 0xab, 0xdc, 0x8a, 0xc5, 0xb8, 0x63, 0x25, 0x9c, 0xa2, + 0xa8, 0x43, 0x00, 0x6e, 0xfa, 0x2c, 0x30, 0x46, 0x04, 0x1d, 0xc3, 0xe2, 0x4c, 0xc1, 0x00, 0x36, + 0x89, 0xc3, 0x43, 0x96, 0x5c, 0x98, 0xd7, 0x3c, 0xe6, 0xb0, 0xdb, 0xf8, 0x0c, 0x22, 0xfc, 0x2b, + 0x1e, 0xc1, 0xf2, 0x0c, 0x12, 0x84, 0x8e, 0x85, 0xf6, 0x60, 0xd1, 0x22, 0xa1, 0x19, 0x38, 0x7e, + 0x6c, 0x81, 0xe3, 0x54, 0x71, 0x9a, 0x14, 0x9f, 0x52, 0xae, 0xe1, 0xd9, 0x91, 0x61, 0x13, 0xdd, + 0x8c, 0x7b, 0x47, 0x14, 0xed, 0x52, 0x42, 0x6c, 0x53, 0x8b, 0xa8, 0x5f, 0x97, 0x60, 0x95, 0x6f, + 0xac, 0x35, 0x3e, 0x9a, 0x51, 0x0b, 0xe6, 0x85, 0x19, 0xb9, 0xb1, 0x0f, 0x8a, 0xcc, 0x1c, 0xae, + 0x80, 0xa5, 0x22, 0xba, 0x82, 0xc7, 0xa6, 0xc1, 0x88, 0x4d, 0x83, 0x5b, 0x9d, 0x93, 0x1c, 0x79, + 0x0a, 0xce, 0x84, 0x56, 0x4b, 0x30, 0x34, 0x09, 0x71, 0xe7, 0x94, 0x29, 0x17, 0x3e, 0x65, 0xd2, + 0x45, 0x93, 0x3a, 0x65, 0x34, 0x98, 0x1f, 0xc4, 0xe9, 0x0c, 0xeb, 0x15, 0x0e, 0xf5, 0x83, 0xa2, + 0x50, 0xbc, 0x08, 0xb0, 0x54, 0x56, 0xff, 0xaa, 0xc0, 0x7a, 0xa6, 0x99, 0xff, 0xf7, 0x2a, 0xb1, + 0x60, 0xd3, 0xa7, 0x81, 0x47, 0xed, 0xc0, 0xf0, 0x87, 0xb7, 0xba, 0xeb, 0xbc, 0x26, 0xae, 0x33, + 0xa4, 0xd4, 0xe2, 0x99, 0x5e, 0x29, 0xe6, 0xeb, 0x58, 0x09, 0x6f, 0xa4, 0xc0, 0x26, 0x64, 0xd5, + 0x85, 0xed, 0x8c, 0xe7, 0xa9, 0x32, 0xe8, 0x8e, 0xc3, 0x23, 0xce, 0xf3, 0x8f, 0x66, 0x3f, 0x7a, + 0xee, 0x06, 0xea, 0x35, 0x6c, 0x5c, 0xd0, 0x60, 0x64, 0xb8, 0xce, 0x2f, 0x88, 0x95, 0x1a, 0x3a, + 0x08, 0x41, 0xc5, 0x25, 0x03, 0x11, 0xa1, 0x12, 0xe6, 0xdf, 0xa8, 0x06, 0x65, 0x46, 0x7d, 0xd9, + 0x1f, 0xf1, 0x67, 0x3c, 0xe4, 0x02, 0xc7, 0x1e, 0x8a, 0x0b, 0x50, 0x09, 0x8b, 0x05, 0xda, 0x84, + 0xf9, 0x6b, 0xca, 0x18, 0x1d, 0xf1, 0x03, 0xb2, 0x84, 0xe5, 0x4a, 0xfd, 0x1c, 0x16, 0xe3, 0x49, + 0xf9, 0xff, 0x1f, 0x15, 0xea, 0xdf, 0x14, 0xa8, 0xc6, 0xd0, 0x22, 0xc9, 0x0c, 0xb6, 0xbd, 0xf1, + 0xa6, 0xb2, 0x73, 0x56, 0x04, 0xee, 0x27, 0x05, 0x4c, 0x4d, 0x0d, 0x0c, 0xde, 0xf2, 0xa6, 0x91, + 0x49, 0x98, 0x2d, 0xad, 0xd2, 0x0c, 0xa5, 0xa5, 0x7e, 0xad, 0xc0, 0x4a, 0xec, 0x7f, 0x2a, 0xd5, + 0x4f, 0xa0, 0xca, 0x86, 0xd1, 0xe8, 0xda, 0x33, 0x1c, 0x71, 0x86, 0x2c, 0xe1, 0x09, 0x01, 0xfd, + 0x2c, 0xd5, 0x74, 0xa2, 0x87, 0x1b, 0x05, 0xef, 0x00, 0xf9, 0x9e, 0x3b, 0x1d, 0x17, 0x95, 0x68, + 0xdf, 0xef, 0x17, 0x44, 0xba, 0x5b, 0x49, 0xff, 0x9a, 0x83, 0x4d, 0x9e, 0x9c, 0xc9, 0x1e, 0x30, + 0x09, 0x23, 0x97, 0x85, 0x6f, 0xbf, 0xb8, 0x7b, 0xb0, 0x2d, 0x3d, 0xd1, 0xc5, 0xed, 0x22, 0xf5, + 0x20, 0x91, 0x5b, 0x3b, 0x2a, 0x3a, 0x04, 0x52, 0xa6, 0xb7, 0x24, 0x68, 0x86, 0x1e, 0xa2, 0x21, + 0x6c, 0xf2, 0x8b, 0x65, 0xde, 0x58, 0xf9, 0x9d, 0x8d, 0xad, 0xc7, 0x88, 0x39, 0x4b, 0x5f, 0xc1, + 0x16, 0x8f, 0xcd, 0x14, 0x53, 0x95, 0x77, 0x36, 0xb5, 0xc1, 0x21, 0x73, 0xb6, 0x5e, 0x41, 0x8d, + 0x5f, 0x10, 0xd3, 0x46, 0xe6, 0xb8, 0x91, 0xc3, 0x82, 0xd9, 0x4c, 0xd9, 0x58, 0x1d, 0xdc, 0x59, + 0x87, 0xe8, 0x4b, 0xa8, 0xf1, 0x98, 0xa5, 0xd1, 0xe7, 0xdf, 0xed, 0x41, 0xb1, 0x1a, 0x03, 0xa5, + 0xb1, 0x47, 0xb0, 0x36, 0xbe, 0x68, 0x4f, 0xf0, 0xeb, 0x8f, 0x0a, 0xdf, 0xef, 0xef, 0x9d, 0x96, + 0x18, 0x25, 0xc0, 0xa9, 0xb6, 0xda, 0x87, 0x39, 0x12, 0x04, 0x34, 0xa8, 0x57, 0xb9, 0x01, 0x94, + 0x18, 0x08, 0x7c, 0xb3, 0xd1, 0xe3, 0xcf, 0x50, 0x2c, 0x04, 0xd4, 0x5f, 0x29, 0xb0, 0x91, 0x79, + 0x87, 0x86, 0x3e, 0xf5, 0x42, 0x82, 0x86, 0x80, 0x26, 0x9e, 0xea, 0x81, 0xa8, 0x72, 0x39, 0x58, + 0x3e, 0x2e, 0x1a, 0x90, 0x5c, 0x9b, 0xe0, 0xc7, 0x46, 0x96, 0xa4, 0xfe, 0x47, 0x81, 0xad, 0x8c, + 0xf4, 0x65, 0x40, 0xed, 0x80, 0x84, 0x0f, 0x74, 0xd5, 0x07, 0x50, 0xf3, 0xa5, 0xa0, 0xee, 0x93, + 0xc0, 0x8c, 0x87, 0x6c, 0x3c, 0x91, 0xe6, 0xf0, 0x6a, 0x42, 0xbf, 0x14, 0x64, 0xf4, 0x31, 0xc0, + 0xe4, 0x2e, 0x29, 0xdf, 0x55, 0x3b, 0xb9, 0xb1, 0xd5, 0x4f, 0x9e, 0xef, 0xb8, 0x3a, 0xbe, 0x45, + 0xa2, 0x4f, 0x60, 0x31, 0xf2, 0x2d, 0x83, 0x11, 0xa1, 0x5b, 0x79, 0x50, 0x17, 0x84, 0x78, 0x4c, + 0x50, 0x7f, 0x93, 0x8d, 0xef, 0x78, 0x67, 0xaf, 0x61, 0x2d, 0x15, 0xdf, 0xc4, 0x5f, 0x19, 0xe0, + 0xe3, 0xd9, 0x03, 0x9c, 0x00, 0xe3, 0x54, 0xda, 0x12, 0xda, 0xc1, 0x6f, 0x15, 0x78, 0x24, 0x5f, + 0xf8, 0x68, 0x0b, 0xd6, 0xce, 0xb4, 0x56, 0xff, 0x25, 0xd6, 0xf4, 0x97, 0x17, 0xbd, 0x4b, 0xad, + 0xdd, 0x39, 0xeb, 0x68, 0xa7, 0xb5, 0x6f, 0xa1, 0x35, 0x58, 0x3d, 0x6f, 0x9d, 0x68, 0xe7, 0xfa, + 0xa9, 0xd6, 0xd7, 0xda, 0xfd, 0x4e, 0xf7, 0xa2, 0xa6, 0xa0, 0x6d, 0xd8, 0xe8, 0x3d, 0xef, 0xf6, + 0xf5, 0xf6, 0xf3, 0xd6, 0xc5, 0xa7, 0x5a, 0x8a, 0x55, 0x42, 0xbb, 0xb0, 0xa3, 0x7d, 0x7e, 0x79, + 0xde, 0x69, 0x77, 0xfa, 0x7a, 0xbb, 0x7b, 0xd1, 0xd7, 0x2e, 0xfa, 0x29, 0x7e, 0x19, 0x21, 0x58, + 0x39, 0x6b, 0xb5, 0xd3, 0x3a, 0x95, 0x83, 0x00, 0x50, 0xfe, 0x7d, 0x84, 0xbe, 0x03, 0x7b, 0x19, + 0xcb, 0xfa, 0x8b, 0xee, 0x69, 0xd6, 0xbf, 0x65, 0xa8, 0x72, 0x57, 0x62, 0x56, 0x4d, 0x41, 0x2b, + 0x00, 0x67, 0xb8, 0xf5, 0x42, 0x13, 0xeb, 0x52, 0xbc, 0x2f, 0xce, 0x6e, 0x5d, 0x9c, 0xea, 0x29, + 0x46, 0xf9, 0x80, 0x01, 0x4c, 0xae, 0x1e, 0x68, 0x07, 0x36, 0xcf, 0x3b, 0x9f, 0x69, 0xe7, 0x9d, + 0xe7, 0xdd, 0xee, 0x69, 0xc6, 0xc2, 0x63, 0x58, 0xbe, 0xd2, 0xf0, 0x17, 0xfa, 0xcb, 0x0b, 0x2e, + 0xf2, 0x45, 0x4d, 0x41, 0x4b, 0xb0, 0x30, 0x5e, 0x95, 0xe2, 0xd5, 0x65, 0xb7, 0xd7, 0xeb, 0x9c, + 0x9c, 0x6b, 0xb5, 0x32, 0x02, 0x98, 0x97, 0x9c, 0x0a, 0x5a, 0x85, 0x45, 0xae, 0x2a, 0x09, 0x73, + 0x47, 0x7f, 0x52, 0xa0, 0xce, 0x53, 0xd4, 0x49, 0xe5, 0xad, 0x47, 0x82, 0x1b, 0xc7, 0x24, 0xe8, + 0x77, 0x0a, 0x2c, 0xdf, 0x29, 0x0b, 0x54, 0xe4, 0x92, 0x33, 0xed, 0x87, 0xd1, 0xce, 0xd3, 0x44, + 0x31, 0xf5, 0x27, 0xab, 0xd1, 0x4d, 0xfe, 0x64, 0xa9, 0xbb, 0xbf, 0xfe, 0xf7, 0x37, 0x7f, 0x28, + 0xd5, 0xd5, 0xb5, 0xf1, 0xef, 0xb4, 0xf0, 0x58, 0x16, 0x08, 0x39, 0x56, 0x0e, 0x4e, 0xbe, 0x51, + 0xe0, 0xbb, 0x26, 0x1d, 0x3d, 0x6c, 0xfd, 0xe4, 0xe9, 0x7d, 0xbb, 0xb9, 0x8c, 0x5b, 0xe0, 0x52, + 0xf9, 0x12, 0x4b, 0x0c, 0x9b, 0xc6, 0x37, 0xfd, 0x06, 0x0d, 0xec, 0xa6, 0x4d, 0x3c, 0xde, 0x20, + 0x4d, 0xc1, 0x32, 0x7c, 0x27, 0x7c, 0xcb, 0xef, 0xbe, 0x4f, 0x72, 0xc4, 0x3f, 0x97, 0x9e, 0x7d, + 0x2a, 0x40, 0xdb, 0xdc, 0xb1, 0x9c, 0x0b, 0x8d, 0xab, 0xc3, 0x7f, 0x26, 0x32, 0xaf, 0xb8, 0xcc, + 0xab, 0x9c, 0xcc, 0xab, 0xab, 0xc3, 0xeb, 0x79, 0xee, 0xc6, 0x0f, 0xff, 0x1b, 0x00, 0x00, 0xff, + 0xff, 0xa3, 0x97, 0x20, 0x48, 0x74, 0x14, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/videointelligence/v1beta1/video_intelligence.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/videointelligence/v1beta1/video_intelligence.pb.go index dcc20b1..c9f821f 100644 --- a/vendor/google.golang.org/genproto/googleapis/cloud/videointelligence/v1beta1/video_intelligence.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/cloud/videointelligence/v1beta1/video_intelligence.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/cloud/videointelligence/v1beta1/video_intelligence.proto -// DO NOT EDIT! /* Package videointelligence is a generated protocol buffer package. @@ -892,99 +891,100 @@ func init() { } var fileDescriptor0 = []byte{ - // 1503 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0xcb, 0x6f, 0x1b, 0x45, - 0x18, 0xef, 0xfa, 0x91, 0xc4, 0x9f, 0x93, 0xd8, 0x99, 0x24, 0x8d, 0x49, 0x1b, 0x1a, 0xb9, 0xa8, - 0x0a, 0x41, 0xb2, 0xa9, 0xcb, 0x43, 0xb4, 0x40, 0xe5, 0x38, 0xeb, 0xc6, 0xaa, 0x63, 0x47, 0xeb, - 0x24, 0x55, 0xb9, 0xac, 0xd6, 0xbb, 0x63, 0x67, 0xc5, 0x7a, 0x67, 0xd9, 0x9d, 0x8d, 0xda, 0x23, - 0x1c, 0x40, 0x1c, 0x11, 0xff, 0x05, 0x12, 0xf0, 0x2f, 0x70, 0xe5, 0xc4, 0x01, 0x2e, 0x9c, 0xb8, - 0xf0, 0x7f, 0x80, 0xe6, 0xb1, 0xf6, 0xda, 0x0e, 0xd4, 0x0e, 0xdc, 0x3c, 0xdf, 0xe3, 0xf7, 0xbd, - 0x67, 0xbe, 0x35, 0x3c, 0xee, 0x13, 0xd2, 0x77, 0x70, 0xd9, 0x74, 0x48, 0x68, 0x95, 0x2f, 0x6d, - 0x0b, 0x13, 0xdb, 0xa5, 0xd8, 0x71, 0xec, 0x3e, 0x76, 0x4d, 0x5c, 0xbe, 0xbc, 0xdf, 0xc5, 0xd4, - 0xb8, 0x2f, 0x38, 0x7a, 0x9c, 0x55, 0xf2, 0x7c, 0x42, 0x09, 0xba, 0x27, 0x00, 0x4a, 0x1c, 0xa0, - 0x34, 0x05, 0x50, 0x92, 0x00, 0xdb, 0xb7, 0xa5, 0x21, 0xc3, 0xb3, 0xcb, 0x86, 0xeb, 0x12, 0x6a, - 0x50, 0x9b, 0xb8, 0x81, 0x40, 0xd9, 0xbe, 0x2b, 0xb9, 0x0e, 0x71, 0xfb, 0x7e, 0xe8, 0xba, 0xb6, - 0xdb, 0x2f, 0x13, 0x0f, 0xfb, 0x63, 0x42, 0x77, 0xa4, 0x10, 0x3f, 0x75, 0xc3, 0x5e, 0x99, 0xda, - 0x03, 0x1c, 0x50, 0x63, 0xe0, 0x49, 0x81, 0x2d, 0x29, 0xe0, 0x7b, 0x66, 0x39, 0xa0, 0x06, 0x0d, - 0xa5, 0x66, 0xf1, 0xa7, 0x04, 0x6c, 0x54, 0x85, 0x51, 0x7c, 0xce, 0x5c, 0xd4, 0xf0, 0x67, 0x21, - 0x0e, 0x28, 0xba, 0x05, 0x19, 0xdb, 0xf5, 0x42, 0xaa, 0x87, 0xbe, 0x5d, 0x50, 0x76, 0x95, 0xbd, - 0x8c, 0xb6, 0xc4, 0x09, 0x67, 0xbe, 0x8d, 0xee, 0xc2, 0x8a, 0x60, 0x9a, 0xc4, 0xa5, 0xd8, 0xa5, - 0x85, 0x05, 0x2e, 0xb0, 0xcc, 0x89, 0x35, 0x41, 0x43, 0x4f, 0x61, 0xa9, 0x87, 0x0d, 0x1a, 0xfa, - 0x38, 0x28, 0x24, 0x76, 0x93, 0x7b, 0xab, 0x95, 0x72, 0x69, 0xb6, 0x94, 0x94, 0xea, 0x42, 0x4f, - 0x1b, 0x02, 0xa0, 0xe7, 0xb0, 0x22, 0x12, 0xcd, 0x2d, 0xbe, 0xa0, 0x85, 0xe4, 0xae, 0xb2, 0x97, - 0xad, 0xbc, 0x33, 0x2b, 0x22, 0x8f, 0xad, 0x26, 0x74, 0xb5, 0xe5, 0xcb, 0xd8, 0x09, 0xed, 0x00, - 0x90, 0x90, 0x46, 0xa1, 0xa6, 0x78, 0x24, 0x19, 0x41, 0x61, 0xb1, 0xde, 0x81, 0xac, 0x43, 0x4c, - 0x9e, 0x6e, 0xdd, 0xb6, 0x0a, 0x69, 0xce, 0x87, 0x88, 0xd4, 0xb0, 0x8a, 0x7f, 0x24, 0x61, 0x39, - 0x0e, 0x8f, 0x4e, 0x60, 0x29, 0xc0, 0xfd, 0x01, 0x76, 0x69, 0x50, 0x50, 0x76, 0x93, 0x73, 0xbb, - 0xd9, 0x11, 0xca, 0xda, 0x10, 0x05, 0x39, 0xb0, 0xe1, 0x18, 0x5d, 0xec, 0xe8, 0x16, 0xa6, 0xd8, - 0xe4, 0xae, 0x0c, 0x88, 0x85, 0x0b, 0x89, 0x5d, 0x65, 0x6f, 0xb5, 0xf2, 0x70, 0x56, 0xf4, 0x26, - 0xc3, 0x38, 0x8c, 0x20, 0x8e, 0x89, 0x85, 0x35, 0xe4, 0x4c, 0xd1, 0xd0, 0x5b, 0xb0, 0x16, 0x88, - 0x26, 0x34, 0xfc, 0x97, 0xba, 0x69, 0x0c, 0xb0, 0x6f, 0xf0, 0x7c, 0x2f, 0x69, 0xf9, 0x11, 0xa3, - 0xc6, 0xe9, 0xa8, 0x02, 0x9b, 0x57, 0xb9, 0xe6, 0xc8, 0x44, 0xae, 0x4f, 0xe3, 0x3b, 0xe8, 0x6d, - 0xd8, 0xe8, 0x19, 0x26, 0x9e, 0x52, 0x11, 0xb9, 0x45, 0x8c, 0x37, 0xa1, 0xf1, 0x11, 0xdc, 0x0a, - 0x2e, 0x08, 0xd5, 0xcd, 0x0b, 0xc3, 0xed, 0x4f, 0x2b, 0x8a, 0xf6, 0x2b, 0x30, 0x91, 0x1a, 0x97, - 0xb8, 0x42, 0xdd, 0xe8, 0x61, 0x3d, 0xc0, 0x86, 0x6f, 0x5e, 0x4c, 0xa9, 0x2f, 0x4a, 0x75, 0xa3, - 0x87, 0x3b, 0x5c, 0x62, 0x5c, 0xbd, 0xd8, 0x95, 0x05, 0x96, 0x85, 0x41, 0xfb, 0x3c, 0x41, 0x3e, - 0xd5, 0xd9, 0x98, 0xe9, 0xa4, 0xd7, 0x0b, 0x30, 0xe5, 0x33, 0x92, 0xd4, 0x72, 0x9c, 0x71, 0x6a, - 0x0f, 0x70, 0x9b, 0x93, 0xd1, 0x3d, 0xc8, 0x61, 0xd7, 0x1a, 0x93, 0x4c, 0x70, 0xc9, 0x15, 0xec, - 0x5a, 0x23, 0xb9, 0xe2, 0xcf, 0x0a, 0xac, 0xf0, 0xfa, 0x34, 0x65, 0x67, 0xa1, 0x16, 0x2c, 0xca, - 0x06, 0xe0, 0xd8, 0xd7, 0xed, 0xa2, 0x08, 0x04, 0xbd, 0x0e, 0x60, 0x12, 0xb7, 0x67, 0x5b, 0x4c, - 0x96, 0x3b, 0x91, 0xd0, 0x62, 0x14, 0x74, 0x04, 0x69, 0x07, 0x5f, 0x62, 0x87, 0x97, 0x7a, 0xb5, - 0x52, 0x99, 0xab, 0xab, 0x9a, 0x4c, 0x53, 0x13, 0x00, 0xc5, 0xef, 0x15, 0xc8, 0x71, 0x6a, 0x75, - 0x78, 0x9d, 0xa1, 0x5d, 0xc8, 0x5a, 0x38, 0x30, 0x7d, 0xdb, 0x63, 0x47, 0x79, 0xa3, 0xc4, 0x49, - 0xec, 0x52, 0x71, 0x0c, 0xb7, 0x1f, 0x1a, 0x7d, 0xac, 0x9b, 0x51, 0x77, 0x67, 0xb4, 0xe5, 0x88, - 0x58, 0x63, 0xbd, 0xd9, 0x81, 0x4c, 0x34, 0x7a, 0x41, 0x21, 0xc9, 0x87, 0xeb, 0xdd, 0xf9, 0x1c, - 0x95, 0xda, 0xda, 0x08, 0xa7, 0xf8, 0x63, 0x12, 0x36, 0x3a, 0xc3, 0xe2, 0xc7, 0x9c, 0x3e, 0x82, - 0xb4, 0x61, 0x85, 0x8e, 0x28, 0xc0, 0x3c, 0x29, 0xb1, 0x3f, 0xc5, 0x8e, 0x7d, 0x41, 0x88, 0xa5, - 0x09, 0x00, 0x86, 0x14, 0x78, 0x84, 0xf4, 0xe4, 0xc8, 0x5e, 0x0b, 0x89, 0x03, 0xa0, 0x26, 0x2c, - 0x0e, 0xb0, 0x65, 0x9b, 0xc6, 0xfc, 0x85, 0x1a, 0x61, 0x45, 0x10, 0x0c, 0xed, 0xd2, 0x26, 0x0e, - 0x6b, 0xb2, 0xd4, 0xf5, 0xd1, 0x24, 0x04, 0xaa, 0x43, 0xca, 0x37, 0xcc, 0x97, 0x7c, 0x90, 0xaf, - 0x07, 0xc5, 0xf5, 0xd9, 0x9d, 0x1b, 0x1f, 0x98, 0x05, 0x3e, 0x30, 0x40, 0x47, 0xd3, 0x62, 0x40, - 0xf6, 0x80, 0x84, 0xae, 0x65, 0xbb, 0xfd, 0x03, 0xf2, 0x02, 0x21, 0x48, 0x39, 0xb8, 0x27, 0xca, - 0x94, 0xd6, 0xf8, 0x6f, 0xb4, 0x01, 0x69, 0xdf, 0xee, 0x5f, 0x88, 0x71, 0x4b, 0x6b, 0xe2, 0x80, - 0x6e, 0xc2, 0x42, 0x97, 0x50, 0x4a, 0x06, 0x3c, 0x79, 0x69, 0x4d, 0x9e, 0x50, 0x1e, 0x92, 0x94, - 0x78, 0x3c, 0x07, 0x69, 0x8d, 0xfd, 0x2c, 0x7e, 0xa5, 0xc0, 0x72, 0xdd, 0x30, 0xf1, 0x70, 0x1e, - 0xcf, 0x61, 0xb9, 0x2b, 0x6d, 0xea, 0x5d, 0xf2, 0x42, 0x0e, 0xe5, 0x83, 0x59, 0x83, 0x8c, 0xf9, - 0xab, 0x65, 0xbb, 0x31, 0xe7, 0x27, 0x82, 0x4d, 0x4c, 0x05, 0xfb, 0x9b, 0x02, 0xab, 0xcc, 0x93, - 0x58, 0x63, 0xde, 0x86, 0x0c, 0xbd, 0x08, 0x07, 0x5d, 0xd7, 0xb0, 0x1d, 0x39, 0x4b, 0x23, 0xc2, - 0xd8, 0x03, 0x94, 0xf8, 0x5f, 0x1e, 0x20, 0x6d, 0x7a, 0xec, 0x66, 0x86, 0x8c, 0x27, 0x31, 0x3e, - 0x75, 0x7f, 0x25, 0xe1, 0x26, 0x37, 0x37, 0x8a, 0x4b, 0xc3, 0x41, 0xe8, 0xd0, 0xe0, 0xdf, 0x97, - 0x0f, 0x0b, 0xd6, 0xc4, 0x8b, 0x13, 0x5b, 0x96, 0x64, 0x98, 0xef, 0xcf, 0x75, 0x15, 0xc4, 0xec, - 0xe6, 0x9d, 0x71, 0x42, 0x80, 0x0c, 0xc8, 0xf3, 0x37, 0x2a, 0x6e, 0x44, 0x04, 0xfe, 0xde, 0x3c, - 0x81, 0xc7, 0x6c, 0xe4, 0x7a, 0x63, 0xe7, 0x00, 0xe9, 0x90, 0xe7, 0x8f, 0x5a, 0xdc, 0x44, 0xea, - 0x3f, 0x94, 0x2b, 0xc7, 0xd0, 0xe2, 0x06, 0x28, 0x6c, 0xc5, 0x9f, 0xbd, 0xb8, 0x9d, 0x05, 0x6e, - 0xe7, 0xc3, 0x59, 0xed, 0x5c, 0x75, 0x3b, 0x6a, 0x9b, 0xc1, 0x15, 0xd4, 0x00, 0xed, 0x41, 0x1a, - 0xfb, 0x3e, 0xf1, 0xf9, 0x2d, 0x90, 0xad, 0xa0, 0xc8, 0x86, 0xef, 0x99, 0xa5, 0x0e, 0xdf, 0x3d, - 0x35, 0x21, 0x50, 0xfc, 0x52, 0x81, 0xcd, 0x89, 0xe5, 0x33, 0xf0, 0x88, 0x1b, 0x60, 0x34, 0x00, - 0x34, 0xf2, 0x56, 0xf7, 0x45, 0x5b, 0xc8, 0x65, 0xea, 0xe3, 0xb9, 0x92, 0x33, 0xd5, 0x5c, 0xda, - 0x9a, 0x31, 0x49, 0x2a, 0xfe, 0xae, 0xc0, 0xd6, 0x84, 0xf4, 0x89, 0x4f, 0xfa, 0x3e, 0x0e, 0x5e, - 0xd1, 0x8b, 0x6f, 0x42, 0xde, 0x93, 0x82, 0xba, 0x87, 0x7d, 0x93, 0xdd, 0xa3, 0xe2, 0xbe, 0xc9, - 0x45, 0xf4, 0x13, 0x41, 0x46, 0x1f, 0x00, 0x8c, 0x96, 0x06, 0xb9, 0xbe, 0x6e, 0x47, 0xa1, 0x44, - 0x8b, 0x7b, 0xe9, 0x34, 0x5a, 0xdc, 0xb5, 0xcc, 0x70, 0x93, 0x40, 0x8f, 0x20, 0x1b, 0x7a, 0x96, - 0x41, 0xb1, 0xd0, 0x4d, 0xbd, 0x52, 0x17, 0x84, 0x38, 0x23, 0x14, 0xbf, 0x9e, 0x4c, 0xf2, 0x30, - 0x32, 0x0f, 0xd6, 0x63, 0x49, 0x8e, 0xfc, 0x95, 0x59, 0x7e, 0x7c, 0xcd, 0x2c, 0x47, 0xe8, 0x5a, - 0xac, 0x80, 0x11, 0x6d, 0xff, 0x73, 0x05, 0x16, 0xe5, 0x6e, 0x8f, 0xb6, 0x60, 0xbd, 0xae, 0x56, - 0x4f, 0xcf, 0x34, 0x55, 0x3f, 0x6b, 0x75, 0x4e, 0xd4, 0x5a, 0xa3, 0xde, 0x50, 0x0f, 0xf3, 0x37, - 0xd0, 0x3a, 0xe4, 0x9a, 0xd5, 0x03, 0xb5, 0xa9, 0x1f, 0xaa, 0xa7, 0x6a, 0xed, 0xb4, 0xd1, 0x6e, - 0xe5, 0x15, 0x84, 0x60, 0xb5, 0x5e, 0xad, 0xa9, 0x31, 0x5a, 0x02, 0xbd, 0x06, 0x9b, 0x9d, 0xa3, - 0xf6, 0xa9, 0x5e, 0x3b, 0xaa, 0xb6, 0x9e, 0xc4, 0x59, 0x49, 0xce, 0xaa, 0xd6, 0x55, 0xbd, 0xa3, - 0x56, 0xb5, 0xda, 0x51, 0x8c, 0x95, 0xda, 0x77, 0x01, 0x46, 0x1b, 0x0b, 0xba, 0x05, 0x5b, 0xc2, - 0x58, 0x53, 0x3d, 0x57, 0x9b, 0x13, 0x9e, 0xe4, 0x20, 0x7b, 0xde, 0x38, 0x54, 0xdb, 0x82, 0x99, - 0x57, 0xd0, 0x1a, 0xac, 0x74, 0xd4, 0x27, 0xc7, 0x6a, 0xeb, 0x54, 0x92, 0x12, 0x68, 0x15, 0x80, - 0x3b, 0x21, 0xce, 0x49, 0xa6, 0x53, 0xd7, 0xaa, 0xc7, 0xaa, 0x24, 0xa4, 0xf6, 0x7d, 0x40, 0xd3, - 0x7b, 0x37, 0x7a, 0x03, 0x76, 0x27, 0x82, 0xd4, 0x8f, 0xdb, 0x87, 0x93, 0xa9, 0x58, 0x81, 0x0c, - 0x07, 0x67, 0xac, 0xbc, 0xc2, 0x6c, 0x09, 0x6c, 0x7e, 0x4e, 0xb0, 0x14, 0x72, 0x76, 0xb5, 0x75, - 0xa8, 0xc7, 0x18, 0xc9, 0x7d, 0x0c, 0x30, 0x7a, 0x53, 0x51, 0x16, 0x16, 0xcf, 0x5a, 0x4f, 0x5b, - 0xed, 0x67, 0xad, 0xfc, 0x0d, 0x16, 0xc2, 0xb9, 0xaa, 0x3d, 0xd7, 0xcf, 0x5a, 0xcd, 0xc6, 0x53, - 0xb5, 0xf9, 0x3c, 0xaf, 0xa0, 0x65, 0x58, 0x1a, 0x9e, 0x12, 0xec, 0x74, 0xd2, 0xee, 0x74, 0x1a, - 0x07, 0x4d, 0x35, 0x9f, 0x44, 0x00, 0x0b, 0x92, 0x93, 0xe2, 0xe9, 0x60, 0xaa, 0x92, 0x90, 0xae, - 0xfc, 0xa0, 0x40, 0x81, 0x97, 0xbf, 0x11, 0x6b, 0x8c, 0x0e, 0xf6, 0x2f, 0x6d, 0x13, 0xa3, 0x6f, - 0x14, 0x58, 0x19, 0xeb, 0x3b, 0x34, 0xf3, 0x6d, 0x73, 0xd5, 0x07, 0xe9, 0xf6, 0x4e, 0xa4, 0x1d, - 0xfb, 0x12, 0x2e, 0xb5, 0xa3, 0x2f, 0xe1, 0xe2, 0xdd, 0x2f, 0x7e, 0xfd, 0xf3, 0xdb, 0xc4, 0x4e, - 0xb1, 0x30, 0xfe, 0x61, 0x1e, 0x3c, 0x94, 0x6d, 0x88, 0x1f, 0x2a, 0xfb, 0x07, 0xbf, 0x28, 0xb0, - 0x6f, 0x92, 0xc1, 0x8c, 0x7e, 0x1c, 0xec, 0xfc, 0x53, 0x70, 0x27, 0x6c, 0xe4, 0x4e, 0x94, 0x4f, - 0x9e, 0x49, 0xa0, 0x3e, 0x61, 0x4b, 0x6a, 0x89, 0xf8, 0xfd, 0x72, 0x1f, 0xbb, 0x7c, 0x20, 0xcb, - 0x82, 0x65, 0x78, 0x76, 0xf0, 0xaa, 0xbf, 0x10, 0x1e, 0x4d, 0x71, 0xbe, 0x4b, 0xdc, 0x7b, 0x22, - 0x90, 0x6b, 0xdc, 0xc5, 0x29, 0x3f, 0x4a, 0xe7, 0xf7, 0x0f, 0x98, 0x6a, 0x77, 0x81, 0x1b, 0x7b, - 0xf0, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1d, 0xe8, 0xc8, 0xa8, 0xae, 0x10, 0x00, 0x00, + // 1520 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0xcb, 0x6f, 0x1b, 0xd5, + 0x1a, 0xef, 0xf8, 0x91, 0xc4, 0x9f, 0x93, 0xd8, 0x39, 0x49, 0x1a, 0xdf, 0xb4, 0xb9, 0x8d, 0xdc, + 0xab, 0x2a, 0x37, 0x57, 0xb2, 0x6f, 0x5d, 0x1e, 0xa2, 0x05, 0x2a, 0xc7, 0x19, 0x37, 0x56, 0x1d, + 0x3b, 0x1a, 0x27, 0xa9, 0x8a, 0x2a, 0x8d, 0xc6, 0x33, 0xc7, 0xce, 0x88, 0xf1, 0x9c, 0x61, 0xe6, + 0x4c, 0xd4, 0x2e, 0x61, 0x01, 0x62, 0x89, 0xf8, 0x2f, 0x90, 0x80, 0x7f, 0x81, 0x2d, 0x6c, 0x61, + 0xc3, 0x8a, 0x0d, 0x7f, 0x04, 0x3b, 0xd0, 0x79, 0x8c, 0x3d, 0xb6, 0x03, 0xb5, 0x03, 0x3b, 0x9f, + 0xef, 0xf1, 0xfb, 0xde, 0xe7, 0x7c, 0x63, 0x78, 0xdc, 0x27, 0xa4, 0xef, 0xe0, 0xb2, 0xe9, 0x90, + 0xd0, 0x2a, 0x5f, 0xda, 0x16, 0x26, 0xb6, 0x4b, 0xb1, 0xe3, 0xd8, 0x7d, 0xec, 0x9a, 0xb8, 0x7c, + 0x79, 0xbf, 0x8b, 0xa9, 0x71, 0x5f, 0x70, 0xf4, 0x38, 0xab, 0xe4, 0xf9, 0x84, 0x12, 0x74, 0x4f, + 0x00, 0x94, 0x38, 0x40, 0x69, 0x0a, 0xa0, 0x24, 0x01, 0xb6, 0x6f, 0x4b, 0x43, 0x86, 0x67, 0x97, + 0x0d, 0xd7, 0x25, 0xd4, 0xa0, 0x36, 0x71, 0x03, 0x81, 0xb2, 0x7d, 0x57, 0x72, 0x1d, 0xe2, 0xf6, + 0xfd, 0xd0, 0x75, 0x6d, 0xb7, 0x5f, 0x26, 0x1e, 0xf6, 0xc7, 0x84, 0xee, 0x48, 0x21, 0x7e, 0xea, + 0x86, 0xbd, 0x32, 0xb5, 0x07, 0x38, 0xa0, 0xc6, 0xc0, 0x93, 0x02, 0x5b, 0x52, 0xc0, 0xf7, 0xcc, + 0x72, 0x40, 0x0d, 0x1a, 0x4a, 0xcd, 0xe2, 0x77, 0x09, 0xd8, 0xa8, 0x0a, 0xa3, 0xf8, 0x9c, 0xb9, + 0xa8, 0xe1, 0x8f, 0x42, 0x1c, 0x50, 0x74, 0x0b, 0x32, 0xb6, 0xeb, 0x85, 0x54, 0x0f, 0x7d, 0xbb, + 0xa0, 0xec, 0x2a, 0x7b, 0x19, 0x6d, 0x89, 0x13, 0xce, 0x7c, 0x1b, 0xdd, 0x85, 0x15, 0xc1, 0x34, + 0x89, 0x4b, 0xb1, 0x4b, 0x0b, 0x0b, 0x5c, 0x60, 0x99, 0x13, 0x6b, 0x82, 0x86, 0x9e, 0xc2, 0x52, + 0x0f, 0x1b, 0x34, 0xf4, 0x71, 0x50, 0x48, 0xec, 0x26, 0xf7, 0x56, 0x2b, 0xe5, 0xd2, 0x6c, 0x29, + 0x29, 0xd5, 0x85, 0x9e, 0x36, 0x04, 0x40, 0xcf, 0x61, 0x45, 0x24, 0x9a, 0x5b, 0x7c, 0x49, 0x0b, + 0xc9, 0x5d, 0x65, 0x2f, 0x5b, 0x79, 0x63, 0x56, 0x44, 0x1e, 0x5b, 0x4d, 0xe8, 0x6a, 0xcb, 0x97, + 0xb1, 0x13, 0xda, 0x01, 0x20, 0x21, 0x8d, 0x42, 0x4d, 0xf1, 0x48, 0x32, 0x82, 0xc2, 0x62, 0xbd, + 0x03, 0x59, 0x87, 0x98, 0x3c, 0xdd, 0xba, 0x6d, 0x15, 0xd2, 0x9c, 0x0f, 0x11, 0xa9, 0x61, 0x15, + 0x7f, 0x49, 0xc2, 0x72, 0x1c, 0x1e, 0x9d, 0xc0, 0x52, 0x80, 0xfb, 0x03, 0xec, 0xd2, 0xa0, 0xa0, + 0xec, 0x26, 0xe7, 0x76, 0xb3, 0x23, 0x94, 0xb5, 0x21, 0x0a, 0x72, 0x60, 0xc3, 0x31, 0xba, 0xd8, + 0xd1, 0x2d, 0x4c, 0xb1, 0xc9, 0x5d, 0x19, 0x10, 0x0b, 0x17, 0x12, 0xbb, 0xca, 0xde, 0x6a, 0xe5, + 0xe1, 0xac, 0xe8, 0x4d, 0x86, 0x71, 0x18, 0x41, 0x1c, 0x13, 0x0b, 0x6b, 0xc8, 0x99, 0xa2, 0xa1, + 0xff, 0xc1, 0x5a, 0x20, 0x9a, 0xd0, 0xf0, 0x5f, 0xe9, 0xa6, 0x31, 0xc0, 0xbe, 0xc1, 0xf3, 0xbd, + 0xa4, 0xe5, 0x47, 0x8c, 0x1a, 0xa7, 0xa3, 0x0a, 0x6c, 0x5e, 0xe5, 0x9a, 0x23, 0x13, 0xb9, 0x3e, + 0x8d, 0xef, 0xa0, 0xff, 0xc3, 0x46, 0xcf, 0x30, 0xf1, 0x94, 0x8a, 0xc8, 0x2d, 0x62, 0xbc, 0x09, + 0x8d, 0xf7, 0xe0, 0x56, 0x70, 0x41, 0xa8, 0x6e, 0x5e, 0x18, 0x6e, 0x7f, 0x5a, 0x51, 0xb4, 0x5f, + 0x81, 0x89, 0xd4, 0xb8, 0xc4, 0x15, 0xea, 0x46, 0x0f, 0xeb, 0x01, 0x36, 0x7c, 0xf3, 0x62, 0x4a, + 0x7d, 0x51, 0xaa, 0x1b, 0x3d, 0xdc, 0xe1, 0x12, 0xe3, 0xea, 0xc5, 0xae, 0x2c, 0xb0, 0x2c, 0x0c, + 0xda, 0xe7, 0x09, 0xf2, 0xa9, 0xce, 0xc6, 0x4c, 0x27, 0xbd, 0x5e, 0x80, 0x29, 0x9f, 0x91, 0xa4, + 0x96, 0xe3, 0x8c, 0x53, 0x7b, 0x80, 0xdb, 0x9c, 0x8c, 0xee, 0x41, 0x0e, 0xbb, 0xd6, 0x98, 0x64, + 0x82, 0x4b, 0xae, 0x60, 0xd7, 0x1a, 0xc9, 0x15, 0xbf, 0x57, 0x60, 0x85, 0xd7, 0xa7, 0x29, 0x3b, + 0x0b, 0xb5, 0x60, 0x51, 0x36, 0x00, 0xc7, 0xbe, 0x6e, 0x17, 0x45, 0x20, 0xe8, 0xdf, 0x00, 0x26, + 0x71, 0x7b, 0xb6, 0xc5, 0x64, 0xb9, 0x13, 0x09, 0x2d, 0x46, 0x41, 0x47, 0x90, 0x76, 0xf0, 0x25, + 0x76, 0x78, 0xa9, 0x57, 0x2b, 0x95, 0xb9, 0xba, 0xaa, 0xc9, 0x34, 0x35, 0x01, 0x50, 0xfc, 0x5a, + 0x81, 0x1c, 0xa7, 0x56, 0x87, 0xd7, 0x19, 0xda, 0x85, 0xac, 0x85, 0x03, 0xd3, 0xb7, 0x3d, 0x76, + 0x94, 0x37, 0x4a, 0x9c, 0xc4, 0x2e, 0x15, 0xc7, 0x70, 0xfb, 0xa1, 0xd1, 0xc7, 0xba, 0x19, 0x75, + 0x77, 0x46, 0x5b, 0x8e, 0x88, 0x35, 0xd6, 0x9b, 0x1d, 0xc8, 0x44, 0xa3, 0x17, 0x14, 0x92, 0x7c, + 0xb8, 0xde, 0x9c, 0xcf, 0x51, 0xa9, 0xad, 0x8d, 0x70, 0x8a, 0xdf, 0x26, 0x61, 0xa3, 0x33, 0x2c, + 0x7e, 0xcc, 0xe9, 0x23, 0x48, 0x1b, 0x56, 0xe8, 0x88, 0x02, 0xcc, 0x93, 0x12, 0xfb, 0x43, 0xec, + 0xd8, 0x17, 0x84, 0x58, 0x9a, 0x00, 0x60, 0x48, 0x81, 0x47, 0x48, 0x4f, 0x8e, 0xec, 0xb5, 0x90, + 0x38, 0x00, 0x6a, 0xc2, 0xe2, 0x00, 0x5b, 0xb6, 0x69, 0xcc, 0x5f, 0xa8, 0x11, 0x56, 0x04, 0xc1, + 0xd0, 0x2e, 0x6d, 0xe2, 0xb0, 0x26, 0x4b, 0x5d, 0x1f, 0x4d, 0x42, 0xa0, 0x3a, 0xa4, 0x7c, 0xc3, + 0x7c, 0xc5, 0x07, 0xf9, 0x7a, 0x50, 0x5c, 0x9f, 0xdd, 0xb9, 0xf1, 0x81, 0x59, 0xe0, 0x03, 0x03, + 0x74, 0x34, 0x2d, 0x06, 0x64, 0x0f, 0x48, 0xe8, 0x5a, 0xb6, 0xdb, 0x3f, 0x20, 0x2f, 0x11, 0x82, + 0x94, 0x83, 0x7b, 0xa2, 0x4c, 0x69, 0x8d, 0xff, 0x46, 0x1b, 0x90, 0xf6, 0xed, 0xfe, 0x85, 0x18, + 0xb7, 0xb4, 0x26, 0x0e, 0xe8, 0x26, 0x2c, 0x74, 0x09, 0xa5, 0x64, 0xc0, 0x93, 0x97, 0xd6, 0xe4, + 0x09, 0xe5, 0x21, 0x49, 0x89, 0xc7, 0x73, 0x90, 0xd6, 0xd8, 0xcf, 0xe2, 0x67, 0x0a, 0x2c, 0xd7, + 0x0d, 0x13, 0x0f, 0xe7, 0xf1, 0x1c, 0x96, 0xbb, 0xd2, 0xa6, 0xde, 0x25, 0x2f, 0xe5, 0x50, 0x3e, + 0x98, 0x35, 0xc8, 0x98, 0xbf, 0x5a, 0xb6, 0x1b, 0x73, 0x7e, 0x22, 0xd8, 0xc4, 0x54, 0xb0, 0x3f, + 0x29, 0xb0, 0xca, 0x3c, 0x89, 0x35, 0xe6, 0x6d, 0xc8, 0xd0, 0x8b, 0x70, 0xd0, 0x75, 0x0d, 0xdb, + 0x91, 0xb3, 0x34, 0x22, 0x8c, 0x3d, 0x40, 0x89, 0x7f, 0xe4, 0x01, 0xd2, 0xa6, 0xc7, 0x6e, 0x66, + 0xc8, 0x78, 0x12, 0xe3, 0x53, 0xf7, 0x7b, 0x12, 0x6e, 0x72, 0x73, 0xa3, 0xb8, 0x34, 0x1c, 0x84, + 0x0e, 0x0d, 0xfe, 0x7a, 0xf9, 0xb0, 0x60, 0x4d, 0xbc, 0x38, 0xb1, 0x65, 0x49, 0x86, 0xf9, 0xf6, + 0x5c, 0x57, 0x41, 0xcc, 0x6e, 0xde, 0x19, 0x27, 0x04, 0xc8, 0x80, 0x3c, 0x7f, 0xa3, 0xe2, 0x46, + 0x44, 0xe0, 0x6f, 0xcd, 0x13, 0x78, 0xcc, 0x46, 0xae, 0x37, 0x76, 0x0e, 0x90, 0x0e, 0x79, 0xfe, + 0xa8, 0xc5, 0x4d, 0xa4, 0xfe, 0x46, 0xb9, 0x72, 0x0c, 0x2d, 0x6e, 0x80, 0xc2, 0x56, 0xfc, 0xd9, + 0x8b, 0xdb, 0x59, 0xe0, 0x76, 0xde, 0x9d, 0xd5, 0xce, 0x55, 0xb7, 0xa3, 0xb6, 0x19, 0x5c, 0x41, + 0x0d, 0xd0, 0x1e, 0xa4, 0xb1, 0xef, 0x13, 0x9f, 0xdf, 0x02, 0xd9, 0x0a, 0x8a, 0x6c, 0xf8, 0x9e, + 0x59, 0xea, 0xf0, 0xdd, 0x53, 0x13, 0x02, 0xc5, 0x4f, 0x15, 0xd8, 0x9c, 0x58, 0x3e, 0x03, 0x8f, + 0xb8, 0x01, 0x46, 0x03, 0x40, 0x23, 0x6f, 0x75, 0x5f, 0xb4, 0x85, 0x5c, 0xa6, 0xde, 0x9f, 0x2b, + 0x39, 0x53, 0xcd, 0xa5, 0xad, 0x19, 0x93, 0xa4, 0xe2, 0xcf, 0x0a, 0x6c, 0x4d, 0x48, 0x9f, 0xf8, + 0xa4, 0xef, 0xe3, 0xe0, 0x35, 0xbd, 0xf8, 0x5f, 0xc8, 0x7b, 0x52, 0x50, 0xf7, 0xb0, 0x6f, 0xb2, + 0x7b, 0x54, 0xdc, 0x37, 0xb9, 0x88, 0x7e, 0x22, 0xc8, 0xe8, 0x1d, 0x80, 0xd1, 0xd2, 0x20, 0xd7, + 0xd7, 0xed, 0x28, 0x94, 0x68, 0x71, 0x2f, 0x9d, 0x46, 0x8b, 0xbb, 0x96, 0x19, 0x6e, 0x12, 0xe8, + 0x11, 0x64, 0x43, 0xcf, 0x32, 0x28, 0x16, 0xba, 0xa9, 0xd7, 0xea, 0x82, 0x10, 0x67, 0x84, 0xe2, + 0xe7, 0x93, 0x49, 0x1e, 0x46, 0xe6, 0xc1, 0x7a, 0x2c, 0xc9, 0x91, 0xbf, 0x32, 0xcb, 0x8f, 0xaf, + 0x99, 0xe5, 0x08, 0x5d, 0x8b, 0x15, 0x30, 0xa2, 0xed, 0x7f, 0xac, 0xc0, 0xa2, 0xdc, 0xed, 0xd1, + 0x16, 0xac, 0xd7, 0xd5, 0xea, 0xe9, 0x99, 0xa6, 0xea, 0x67, 0xad, 0xce, 0x89, 0x5a, 0x6b, 0xd4, + 0x1b, 0xea, 0x61, 0xfe, 0x06, 0x5a, 0x87, 0x5c, 0xb3, 0x7a, 0xa0, 0x36, 0xf5, 0x43, 0xf5, 0x54, + 0xad, 0x9d, 0x36, 0xda, 0xad, 0xbc, 0x82, 0x10, 0xac, 0xd6, 0xab, 0x35, 0x35, 0x46, 0x4b, 0xa0, + 0x7f, 0xc1, 0x66, 0xe7, 0xa8, 0x7d, 0xaa, 0xd7, 0x8e, 0xaa, 0xad, 0x27, 0x71, 0x56, 0x92, 0xb3, + 0xaa, 0x75, 0x55, 0xef, 0xa8, 0x55, 0xad, 0x76, 0x14, 0x63, 0xa5, 0xf6, 0x5d, 0x80, 0xd1, 0xc6, + 0x82, 0x6e, 0xc1, 0x96, 0x30, 0xd6, 0x54, 0xcf, 0xd5, 0xe6, 0x84, 0x27, 0x39, 0xc8, 0x9e, 0x37, + 0x0e, 0xd5, 0xb6, 0x60, 0xe6, 0x15, 0xb4, 0x06, 0x2b, 0x1d, 0xf5, 0xc9, 0xb1, 0xda, 0x3a, 0x95, + 0xa4, 0x04, 0x5a, 0x05, 0xe0, 0x4e, 0x88, 0x73, 0x92, 0xe9, 0xd4, 0xb5, 0xea, 0xb1, 0x2a, 0x09, + 0xa9, 0x7d, 0x1f, 0xd0, 0xf4, 0xde, 0x8d, 0xfe, 0x03, 0xbb, 0x13, 0x41, 0xea, 0xc7, 0xed, 0xc3, + 0xc9, 0x54, 0xac, 0x40, 0x86, 0x83, 0x33, 0x56, 0x5e, 0x61, 0xb6, 0x04, 0x36, 0x3f, 0x27, 0x58, + 0x0a, 0x39, 0xbb, 0xda, 0x3a, 0xd4, 0x63, 0x8c, 0xe4, 0x3e, 0x06, 0x18, 0xbd, 0xa9, 0x28, 0x0b, + 0x8b, 0x67, 0xad, 0xa7, 0xad, 0xf6, 0xb3, 0x56, 0xfe, 0x06, 0x0b, 0xe1, 0x5c, 0xd5, 0x9e, 0xeb, + 0x67, 0xad, 0x66, 0xe3, 0xa9, 0xda, 0x7c, 0x9e, 0x57, 0xd0, 0x32, 0x2c, 0x0d, 0x4f, 0x09, 0x76, + 0x3a, 0x69, 0x77, 0x3a, 0x8d, 0x83, 0xa6, 0x9a, 0x4f, 0x22, 0x80, 0x05, 0xc9, 0x49, 0xf1, 0x74, + 0x30, 0x55, 0x49, 0x48, 0x57, 0xbe, 0x51, 0xa0, 0xc0, 0xcb, 0xdf, 0x88, 0x35, 0x46, 0x07, 0xfb, + 0x97, 0xb6, 0x89, 0xd1, 0x17, 0x0a, 0xac, 0x8c, 0xf5, 0x1d, 0x9a, 0xf9, 0xb6, 0xb9, 0xea, 0x83, + 0x74, 0x7b, 0x27, 0xd2, 0x8e, 0x7d, 0x09, 0x97, 0xda, 0xd1, 0x97, 0x70, 0xf1, 0xee, 0x27, 0x3f, + 0xfe, 0xfa, 0x65, 0x62, 0xa7, 0x58, 0x18, 0xff, 0x30, 0x0f, 0x1e, 0xca, 0x36, 0xc4, 0x0f, 0x95, + 0xfd, 0x83, 0xdf, 0x14, 0xd8, 0x37, 0xc9, 0x60, 0x46, 0x3f, 0x0e, 0x76, 0xfe, 0x2c, 0xb8, 0x13, + 0x36, 0x72, 0x27, 0xca, 0x07, 0xcf, 0x24, 0x50, 0x9f, 0xb0, 0x25, 0xb5, 0x44, 0xfc, 0x7e, 0xb9, + 0x8f, 0x5d, 0x3e, 0x90, 0x65, 0xc1, 0x32, 0x3c, 0x3b, 0x78, 0xdd, 0x5f, 0x08, 0x8f, 0xa6, 0x38, + 0x5f, 0x25, 0xee, 0x3d, 0x11, 0xc8, 0x35, 0xee, 0xe2, 0x94, 0x1f, 0xa5, 0xf3, 0xfb, 0x07, 0x4c, + 0xf5, 0x87, 0x48, 0xf0, 0x05, 0x17, 0x7c, 0x31, 0x25, 0xf8, 0xe2, 0x5c, 0xd8, 0xe8, 0x2e, 0x70, + 0xaf, 0x1e, 0xfc, 0x11, 0x00, 0x00, 0xff, 0xff, 0xba, 0xc2, 0xb0, 0xa0, 0xd7, 0x10, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/videointelligence/v1beta2/video_intelligence.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/videointelligence/v1beta2/video_intelligence.pb.go new file mode 100644 index 0000000..cf6b222 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/videointelligence/v1beta2/video_intelligence.pb.go @@ -0,0 +1,1159 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/videointelligence/v1beta2/video_intelligence.proto + +/* +Package videointelligence is a generated protocol buffer package. + +It is generated from these files: + google/cloud/videointelligence/v1beta2/video_intelligence.proto + +It has these top-level messages: + AnnotateVideoRequest + VideoContext + LabelDetectionConfig + ShotChangeDetectionConfig + ExplicitContentDetectionConfig + FaceDetectionConfig + VideoSegment + LabelSegment + LabelFrame + Entity + LabelAnnotation + ExplicitContentFrame + ExplicitContentAnnotation + NormalizedBoundingBox + FaceSegment + FaceFrame + FaceAnnotation + VideoAnnotationResults + AnnotateVideoResponse + VideoAnnotationProgress + AnnotateVideoProgress +*/ +package videointelligence + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import google_protobuf3 "github.com/golang/protobuf/ptypes/duration" +import google_protobuf4 "github.com/golang/protobuf/ptypes/timestamp" +import google_rpc "google.golang.org/genproto/googleapis/rpc/status" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Video annotation feature. +type Feature int32 + +const ( + // Unspecified. + Feature_FEATURE_UNSPECIFIED Feature = 0 + // Label detection. Detect objects, such as dog or flower. + Feature_LABEL_DETECTION Feature = 1 + // Shot change detection. + Feature_SHOT_CHANGE_DETECTION Feature = 2 + // Explicit content detection. + Feature_EXPLICIT_CONTENT_DETECTION Feature = 3 + // Human face detection and tracking. + Feature_FACE_DETECTION Feature = 4 +) + +var Feature_name = map[int32]string{ + 0: "FEATURE_UNSPECIFIED", + 1: "LABEL_DETECTION", + 2: "SHOT_CHANGE_DETECTION", + 3: "EXPLICIT_CONTENT_DETECTION", + 4: "FACE_DETECTION", +} +var Feature_value = map[string]int32{ + "FEATURE_UNSPECIFIED": 0, + "LABEL_DETECTION": 1, + "SHOT_CHANGE_DETECTION": 2, + "EXPLICIT_CONTENT_DETECTION": 3, + "FACE_DETECTION": 4, +} + +func (x Feature) String() string { + return proto.EnumName(Feature_name, int32(x)) +} +func (Feature) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +// Label detection mode. +type LabelDetectionMode int32 + +const ( + // Unspecified. + LabelDetectionMode_LABEL_DETECTION_MODE_UNSPECIFIED LabelDetectionMode = 0 + // Detect shot-level labels. + LabelDetectionMode_SHOT_MODE LabelDetectionMode = 1 + // Detect frame-level labels. + LabelDetectionMode_FRAME_MODE LabelDetectionMode = 2 + // Detect both shot-level and frame-level labels. + LabelDetectionMode_SHOT_AND_FRAME_MODE LabelDetectionMode = 3 +) + +var LabelDetectionMode_name = map[int32]string{ + 0: "LABEL_DETECTION_MODE_UNSPECIFIED", + 1: "SHOT_MODE", + 2: "FRAME_MODE", + 3: "SHOT_AND_FRAME_MODE", +} +var LabelDetectionMode_value = map[string]int32{ + "LABEL_DETECTION_MODE_UNSPECIFIED": 0, + "SHOT_MODE": 1, + "FRAME_MODE": 2, + "SHOT_AND_FRAME_MODE": 3, +} + +func (x LabelDetectionMode) String() string { + return proto.EnumName(LabelDetectionMode_name, int32(x)) +} +func (LabelDetectionMode) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +// Bucketized representation of likelihood. +type Likelihood int32 + +const ( + // Unspecified likelihood. + Likelihood_LIKELIHOOD_UNSPECIFIED Likelihood = 0 + // Very unlikely. + Likelihood_VERY_UNLIKELY Likelihood = 1 + // Unlikely. + Likelihood_UNLIKELY Likelihood = 2 + // Possible. + Likelihood_POSSIBLE Likelihood = 3 + // Likely. + Likelihood_LIKELY Likelihood = 4 + // Very likely. + Likelihood_VERY_LIKELY Likelihood = 5 +) + +var Likelihood_name = map[int32]string{ + 0: "LIKELIHOOD_UNSPECIFIED", + 1: "VERY_UNLIKELY", + 2: "UNLIKELY", + 3: "POSSIBLE", + 4: "LIKELY", + 5: "VERY_LIKELY", +} +var Likelihood_value = map[string]int32{ + "LIKELIHOOD_UNSPECIFIED": 0, + "VERY_UNLIKELY": 1, + "UNLIKELY": 2, + "POSSIBLE": 3, + "LIKELY": 4, + "VERY_LIKELY": 5, +} + +func (x Likelihood) String() string { + return proto.EnumName(Likelihood_name, int32(x)) +} +func (Likelihood) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +// Video annotation request. +type AnnotateVideoRequest struct { + // Input video location. Currently, only + // [Google Cloud Storage](https://cloud.google.com/storage/) URIs are + // supported, which must be specified in the following format: + // `gs://bucket-id/object-id` (other URI formats return + // [google.rpc.Code.INVALID_ARGUMENT][google.rpc.Code.INVALID_ARGUMENT]). For more information, see + // [Request URIs](/storage/docs/reference-uris). + // A video URI may include wildcards in `object-id`, and thus identify + // multiple videos. Supported wildcards: '*' to match 0 or more characters; + // '?' to match 1 character. If unset, the input video should be embedded + // in the request as `input_content`. If set, `input_content` should be unset. + InputUri string `protobuf:"bytes,1,opt,name=input_uri,json=inputUri" json:"input_uri,omitempty"` + // The video data bytes. + // If unset, the input video(s) should be specified via `input_uri`. + // If set, `input_uri` should be unset. + InputContent []byte `protobuf:"bytes,6,opt,name=input_content,json=inputContent,proto3" json:"input_content,omitempty"` + // Requested video annotation features. + Features []Feature `protobuf:"varint,2,rep,packed,name=features,enum=google.cloud.videointelligence.v1beta2.Feature" json:"features,omitempty"` + // Additional video context and/or feature-specific parameters. + VideoContext *VideoContext `protobuf:"bytes,3,opt,name=video_context,json=videoContext" json:"video_context,omitempty"` + // Optional location where the output (in JSON format) should be stored. + // Currently, only [Google Cloud Storage](https://cloud.google.com/storage/) + // URIs are supported, which must be specified in the following format: + // `gs://bucket-id/object-id` (other URI formats return + // [google.rpc.Code.INVALID_ARGUMENT][google.rpc.Code.INVALID_ARGUMENT]). For more information, see + // [Request URIs](/storage/docs/reference-uris). + OutputUri string `protobuf:"bytes,4,opt,name=output_uri,json=outputUri" json:"output_uri,omitempty"` + // Optional cloud region where annotation should take place. Supported cloud + // regions: `us-east1`, `us-west1`, `europe-west1`, `asia-east1`. If no region + // is specified, a region will be determined based on video file location. + LocationId string `protobuf:"bytes,5,opt,name=location_id,json=locationId" json:"location_id,omitempty"` +} + +func (m *AnnotateVideoRequest) Reset() { *m = AnnotateVideoRequest{} } +func (m *AnnotateVideoRequest) String() string { return proto.CompactTextString(m) } +func (*AnnotateVideoRequest) ProtoMessage() {} +func (*AnnotateVideoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *AnnotateVideoRequest) GetInputUri() string { + if m != nil { + return m.InputUri + } + return "" +} + +func (m *AnnotateVideoRequest) GetInputContent() []byte { + if m != nil { + return m.InputContent + } + return nil +} + +func (m *AnnotateVideoRequest) GetFeatures() []Feature { + if m != nil { + return m.Features + } + return nil +} + +func (m *AnnotateVideoRequest) GetVideoContext() *VideoContext { + if m != nil { + return m.VideoContext + } + return nil +} + +func (m *AnnotateVideoRequest) GetOutputUri() string { + if m != nil { + return m.OutputUri + } + return "" +} + +func (m *AnnotateVideoRequest) GetLocationId() string { + if m != nil { + return m.LocationId + } + return "" +} + +// Video context and/or feature-specific parameters. +type VideoContext struct { + // Video segments to annotate. The segments may overlap and are not required + // to be contiguous or span the whole video. If unspecified, each video + // is treated as a single segment. + Segments []*VideoSegment `protobuf:"bytes,1,rep,name=segments" json:"segments,omitempty"` + // Config for LABEL_DETECTION. + LabelDetectionConfig *LabelDetectionConfig `protobuf:"bytes,2,opt,name=label_detection_config,json=labelDetectionConfig" json:"label_detection_config,omitempty"` + // Config for SHOT_CHANGE_DETECTION. + ShotChangeDetectionConfig *ShotChangeDetectionConfig `protobuf:"bytes,3,opt,name=shot_change_detection_config,json=shotChangeDetectionConfig" json:"shot_change_detection_config,omitempty"` + // Config for EXPLICIT_CONTENT_DETECTION. + ExplicitContentDetectionConfig *ExplicitContentDetectionConfig `protobuf:"bytes,4,opt,name=explicit_content_detection_config,json=explicitContentDetectionConfig" json:"explicit_content_detection_config,omitempty"` + // Config for FACE_DETECTION. + FaceDetectionConfig *FaceDetectionConfig `protobuf:"bytes,5,opt,name=face_detection_config,json=faceDetectionConfig" json:"face_detection_config,omitempty"` +} + +func (m *VideoContext) Reset() { *m = VideoContext{} } +func (m *VideoContext) String() string { return proto.CompactTextString(m) } +func (*VideoContext) ProtoMessage() {} +func (*VideoContext) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *VideoContext) GetSegments() []*VideoSegment { + if m != nil { + return m.Segments + } + return nil +} + +func (m *VideoContext) GetLabelDetectionConfig() *LabelDetectionConfig { + if m != nil { + return m.LabelDetectionConfig + } + return nil +} + +func (m *VideoContext) GetShotChangeDetectionConfig() *ShotChangeDetectionConfig { + if m != nil { + return m.ShotChangeDetectionConfig + } + return nil +} + +func (m *VideoContext) GetExplicitContentDetectionConfig() *ExplicitContentDetectionConfig { + if m != nil { + return m.ExplicitContentDetectionConfig + } + return nil +} + +func (m *VideoContext) GetFaceDetectionConfig() *FaceDetectionConfig { + if m != nil { + return m.FaceDetectionConfig + } + return nil +} + +// Config for LABEL_DETECTION. +type LabelDetectionConfig struct { + // What labels should be detected with LABEL_DETECTION, in addition to + // video-level labels or segment-level labels. + // If unspecified, defaults to `SHOT_MODE`. + LabelDetectionMode LabelDetectionMode `protobuf:"varint,1,opt,name=label_detection_mode,json=labelDetectionMode,enum=google.cloud.videointelligence.v1beta2.LabelDetectionMode" json:"label_detection_mode,omitempty"` + // Whether the video has been shot from a stationary (i.e. non-moving) camera. + // When set to true, might improve detection accuracy for moving objects. + // Should be used with `SHOT_AND_FRAME_MODE` enabled. + StationaryCamera bool `protobuf:"varint,2,opt,name=stationary_camera,json=stationaryCamera" json:"stationary_camera,omitempty"` + // Model to use for label detection. + // Supported values: "builtin/stable" (the default if unset) and + // "builtin/latest". + Model string `protobuf:"bytes,3,opt,name=model" json:"model,omitempty"` +} + +func (m *LabelDetectionConfig) Reset() { *m = LabelDetectionConfig{} } +func (m *LabelDetectionConfig) String() string { return proto.CompactTextString(m) } +func (*LabelDetectionConfig) ProtoMessage() {} +func (*LabelDetectionConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *LabelDetectionConfig) GetLabelDetectionMode() LabelDetectionMode { + if m != nil { + return m.LabelDetectionMode + } + return LabelDetectionMode_LABEL_DETECTION_MODE_UNSPECIFIED +} + +func (m *LabelDetectionConfig) GetStationaryCamera() bool { + if m != nil { + return m.StationaryCamera + } + return false +} + +func (m *LabelDetectionConfig) GetModel() string { + if m != nil { + return m.Model + } + return "" +} + +// Config for SHOT_CHANGE_DETECTION. +type ShotChangeDetectionConfig struct { + // Model to use for shot change detection. + // Supported values: "builtin/stable" (the default if unset) and + // "builtin/latest". + Model string `protobuf:"bytes,1,opt,name=model" json:"model,omitempty"` +} + +func (m *ShotChangeDetectionConfig) Reset() { *m = ShotChangeDetectionConfig{} } +func (m *ShotChangeDetectionConfig) String() string { return proto.CompactTextString(m) } +func (*ShotChangeDetectionConfig) ProtoMessage() {} +func (*ShotChangeDetectionConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *ShotChangeDetectionConfig) GetModel() string { + if m != nil { + return m.Model + } + return "" +} + +// Config for EXPLICIT_CONTENT_DETECTION. +type ExplicitContentDetectionConfig struct { + // Model to use for explicit content detection. + // Supported values: "builtin/stable" (the default if unset) and + // "builtin/latest". + Model string `protobuf:"bytes,1,opt,name=model" json:"model,omitempty"` +} + +func (m *ExplicitContentDetectionConfig) Reset() { *m = ExplicitContentDetectionConfig{} } +func (m *ExplicitContentDetectionConfig) String() string { return proto.CompactTextString(m) } +func (*ExplicitContentDetectionConfig) ProtoMessage() {} +func (*ExplicitContentDetectionConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *ExplicitContentDetectionConfig) GetModel() string { + if m != nil { + return m.Model + } + return "" +} + +// Config for FACE_DETECTION. +type FaceDetectionConfig struct { + // Model to use for face detection. + // Supported values: "builtin/stable" (the default if unset) and + // "builtin/latest". + Model string `protobuf:"bytes,1,opt,name=model" json:"model,omitempty"` + // Whether bounding boxes be included in the face annotation output. + IncludeBoundingBoxes bool `protobuf:"varint,2,opt,name=include_bounding_boxes,json=includeBoundingBoxes" json:"include_bounding_boxes,omitempty"` +} + +func (m *FaceDetectionConfig) Reset() { *m = FaceDetectionConfig{} } +func (m *FaceDetectionConfig) String() string { return proto.CompactTextString(m) } +func (*FaceDetectionConfig) ProtoMessage() {} +func (*FaceDetectionConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *FaceDetectionConfig) GetModel() string { + if m != nil { + return m.Model + } + return "" +} + +func (m *FaceDetectionConfig) GetIncludeBoundingBoxes() bool { + if m != nil { + return m.IncludeBoundingBoxes + } + return false +} + +// Video segment. +type VideoSegment struct { + // Time-offset, relative to the beginning of the video, + // corresponding to the start of the segment (inclusive). + StartTimeOffset *google_protobuf3.Duration `protobuf:"bytes,1,opt,name=start_time_offset,json=startTimeOffset" json:"start_time_offset,omitempty"` + // Time-offset, relative to the beginning of the video, + // corresponding to the end of the segment (inclusive). + EndTimeOffset *google_protobuf3.Duration `protobuf:"bytes,2,opt,name=end_time_offset,json=endTimeOffset" json:"end_time_offset,omitempty"` +} + +func (m *VideoSegment) Reset() { *m = VideoSegment{} } +func (m *VideoSegment) String() string { return proto.CompactTextString(m) } +func (*VideoSegment) ProtoMessage() {} +func (*VideoSegment) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *VideoSegment) GetStartTimeOffset() *google_protobuf3.Duration { + if m != nil { + return m.StartTimeOffset + } + return nil +} + +func (m *VideoSegment) GetEndTimeOffset() *google_protobuf3.Duration { + if m != nil { + return m.EndTimeOffset + } + return nil +} + +// Video segment level annotation results for label detection. +type LabelSegment struct { + // Video segment where a label was detected. + Segment *VideoSegment `protobuf:"bytes,1,opt,name=segment" json:"segment,omitempty"` + // Confidence that the label is accurate. Range: [0, 1]. + Confidence float32 `protobuf:"fixed32,2,opt,name=confidence" json:"confidence,omitempty"` +} + +func (m *LabelSegment) Reset() { *m = LabelSegment{} } +func (m *LabelSegment) String() string { return proto.CompactTextString(m) } +func (*LabelSegment) ProtoMessage() {} +func (*LabelSegment) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *LabelSegment) GetSegment() *VideoSegment { + if m != nil { + return m.Segment + } + return nil +} + +func (m *LabelSegment) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + +// Video frame level annotation results for label detection. +type LabelFrame struct { + // Time-offset, relative to the beginning of the video, corresponding to the + // video frame for this location. + TimeOffset *google_protobuf3.Duration `protobuf:"bytes,1,opt,name=time_offset,json=timeOffset" json:"time_offset,omitempty"` + // Confidence that the label is accurate. Range: [0, 1]. + Confidence float32 `protobuf:"fixed32,2,opt,name=confidence" json:"confidence,omitempty"` +} + +func (m *LabelFrame) Reset() { *m = LabelFrame{} } +func (m *LabelFrame) String() string { return proto.CompactTextString(m) } +func (*LabelFrame) ProtoMessage() {} +func (*LabelFrame) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *LabelFrame) GetTimeOffset() *google_protobuf3.Duration { + if m != nil { + return m.TimeOffset + } + return nil +} + +func (m *LabelFrame) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + +// Detected entity from video analysis. +type Entity struct { + // Opaque entity ID. Some IDs may be available in + // [Google Knowledge Graph Search + // API](https://developers.google.com/knowledge-graph/). + EntityId string `protobuf:"bytes,1,opt,name=entity_id,json=entityId" json:"entity_id,omitempty"` + // Textual description, e.g. `Fixed-gear bicycle`. + Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` + // Language code for `description` in BCP-47 format. + LanguageCode string `protobuf:"bytes,3,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` +} + +func (m *Entity) Reset() { *m = Entity{} } +func (m *Entity) String() string { return proto.CompactTextString(m) } +func (*Entity) ProtoMessage() {} +func (*Entity) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *Entity) GetEntityId() string { + if m != nil { + return m.EntityId + } + return "" +} + +func (m *Entity) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *Entity) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +// Label annotation. +type LabelAnnotation struct { + // Detected entity. + Entity *Entity `protobuf:"bytes,1,opt,name=entity" json:"entity,omitempty"` + // Common categories for the detected entity. + // E.g. when the label is `Terrier` the category is likely `dog`. And in some + // cases there might be more than one categories e.g. `Terrier` could also be + // a `pet`. + CategoryEntities []*Entity `protobuf:"bytes,2,rep,name=category_entities,json=categoryEntities" json:"category_entities,omitempty"` + // All video segments where a label was detected. + Segments []*LabelSegment `protobuf:"bytes,3,rep,name=segments" json:"segments,omitempty"` + // All video frames where a label was detected. + Frames []*LabelFrame `protobuf:"bytes,4,rep,name=frames" json:"frames,omitempty"` +} + +func (m *LabelAnnotation) Reset() { *m = LabelAnnotation{} } +func (m *LabelAnnotation) String() string { return proto.CompactTextString(m) } +func (*LabelAnnotation) ProtoMessage() {} +func (*LabelAnnotation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *LabelAnnotation) GetEntity() *Entity { + if m != nil { + return m.Entity + } + return nil +} + +func (m *LabelAnnotation) GetCategoryEntities() []*Entity { + if m != nil { + return m.CategoryEntities + } + return nil +} + +func (m *LabelAnnotation) GetSegments() []*LabelSegment { + if m != nil { + return m.Segments + } + return nil +} + +func (m *LabelAnnotation) GetFrames() []*LabelFrame { + if m != nil { + return m.Frames + } + return nil +} + +// Video frame level annotation results for explicit content. +type ExplicitContentFrame struct { + // Time-offset, relative to the beginning of the video, corresponding to the + // video frame for this location. + TimeOffset *google_protobuf3.Duration `protobuf:"bytes,1,opt,name=time_offset,json=timeOffset" json:"time_offset,omitempty"` + // Likelihood of the pornography content.. + PornographyLikelihood Likelihood `protobuf:"varint,2,opt,name=pornography_likelihood,json=pornographyLikelihood,enum=google.cloud.videointelligence.v1beta2.Likelihood" json:"pornography_likelihood,omitempty"` +} + +func (m *ExplicitContentFrame) Reset() { *m = ExplicitContentFrame{} } +func (m *ExplicitContentFrame) String() string { return proto.CompactTextString(m) } +func (*ExplicitContentFrame) ProtoMessage() {} +func (*ExplicitContentFrame) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *ExplicitContentFrame) GetTimeOffset() *google_protobuf3.Duration { + if m != nil { + return m.TimeOffset + } + return nil +} + +func (m *ExplicitContentFrame) GetPornographyLikelihood() Likelihood { + if m != nil { + return m.PornographyLikelihood + } + return Likelihood_LIKELIHOOD_UNSPECIFIED +} + +// Explicit content annotation (based on per-frame visual signals only). +// If no explicit content has been detected in a frame, no annotations are +// present for that frame. +type ExplicitContentAnnotation struct { + // All video frames where explicit content was detected. + Frames []*ExplicitContentFrame `protobuf:"bytes,1,rep,name=frames" json:"frames,omitempty"` +} + +func (m *ExplicitContentAnnotation) Reset() { *m = ExplicitContentAnnotation{} } +func (m *ExplicitContentAnnotation) String() string { return proto.CompactTextString(m) } +func (*ExplicitContentAnnotation) ProtoMessage() {} +func (*ExplicitContentAnnotation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *ExplicitContentAnnotation) GetFrames() []*ExplicitContentFrame { + if m != nil { + return m.Frames + } + return nil +} + +// Normalized bounding box. +// The normalized vertex coordinates are relative to the original image. +// Range: [0, 1]. +type NormalizedBoundingBox struct { + // Left X coordinate. + Left float32 `protobuf:"fixed32,1,opt,name=left" json:"left,omitempty"` + // Top Y coordinate. + Top float32 `protobuf:"fixed32,2,opt,name=top" json:"top,omitempty"` + // Right X coordinate. + Right float32 `protobuf:"fixed32,3,opt,name=right" json:"right,omitempty"` + // Bottom Y coordinate. + Bottom float32 `protobuf:"fixed32,4,opt,name=bottom" json:"bottom,omitempty"` +} + +func (m *NormalizedBoundingBox) Reset() { *m = NormalizedBoundingBox{} } +func (m *NormalizedBoundingBox) String() string { return proto.CompactTextString(m) } +func (*NormalizedBoundingBox) ProtoMessage() {} +func (*NormalizedBoundingBox) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +func (m *NormalizedBoundingBox) GetLeft() float32 { + if m != nil { + return m.Left + } + return 0 +} + +func (m *NormalizedBoundingBox) GetTop() float32 { + if m != nil { + return m.Top + } + return 0 +} + +func (m *NormalizedBoundingBox) GetRight() float32 { + if m != nil { + return m.Right + } + return 0 +} + +func (m *NormalizedBoundingBox) GetBottom() float32 { + if m != nil { + return m.Bottom + } + return 0 +} + +// Video segment level annotation results for face detection. +type FaceSegment struct { + // Video segment where a face was detected. + Segment *VideoSegment `protobuf:"bytes,1,opt,name=segment" json:"segment,omitempty"` +} + +func (m *FaceSegment) Reset() { *m = FaceSegment{} } +func (m *FaceSegment) String() string { return proto.CompactTextString(m) } +func (*FaceSegment) ProtoMessage() {} +func (*FaceSegment) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +func (m *FaceSegment) GetSegment() *VideoSegment { + if m != nil { + return m.Segment + } + return nil +} + +// Video frame level annotation results for face detection. +type FaceFrame struct { + // Normalized Bounding boxes in a frame. + // There can be more than one boxes if the same face is detected in multiple + // locations within the current frame. + NormalizedBoundingBoxes []*NormalizedBoundingBox `protobuf:"bytes,1,rep,name=normalized_bounding_boxes,json=normalizedBoundingBoxes" json:"normalized_bounding_boxes,omitempty"` + // Time-offset, relative to the beginning of the video, + // corresponding to the video frame for this location. + TimeOffset *google_protobuf3.Duration `protobuf:"bytes,2,opt,name=time_offset,json=timeOffset" json:"time_offset,omitempty"` +} + +func (m *FaceFrame) Reset() { *m = FaceFrame{} } +func (m *FaceFrame) String() string { return proto.CompactTextString(m) } +func (*FaceFrame) ProtoMessage() {} +func (*FaceFrame) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +func (m *FaceFrame) GetNormalizedBoundingBoxes() []*NormalizedBoundingBox { + if m != nil { + return m.NormalizedBoundingBoxes + } + return nil +} + +func (m *FaceFrame) GetTimeOffset() *google_protobuf3.Duration { + if m != nil { + return m.TimeOffset + } + return nil +} + +// Face annotation. +type FaceAnnotation struct { + // Thumbnail of a representative face view (in JPEG format). + Thumbnail []byte `protobuf:"bytes,1,opt,name=thumbnail,proto3" json:"thumbnail,omitempty"` + // All video segments where a face was detected. + Segments []*FaceSegment `protobuf:"bytes,2,rep,name=segments" json:"segments,omitempty"` + // All video frames where a face was detected. + Frames []*FaceFrame `protobuf:"bytes,3,rep,name=frames" json:"frames,omitempty"` +} + +func (m *FaceAnnotation) Reset() { *m = FaceAnnotation{} } +func (m *FaceAnnotation) String() string { return proto.CompactTextString(m) } +func (*FaceAnnotation) ProtoMessage() {} +func (*FaceAnnotation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } + +func (m *FaceAnnotation) GetThumbnail() []byte { + if m != nil { + return m.Thumbnail + } + return nil +} + +func (m *FaceAnnotation) GetSegments() []*FaceSegment { + if m != nil { + return m.Segments + } + return nil +} + +func (m *FaceAnnotation) GetFrames() []*FaceFrame { + if m != nil { + return m.Frames + } + return nil +} + +// Annotation results for a single video. +type VideoAnnotationResults struct { + // Video file location in + // [Google Cloud Storage](https://cloud.google.com/storage/). + InputUri string `protobuf:"bytes,1,opt,name=input_uri,json=inputUri" json:"input_uri,omitempty"` + // Label annotations on video level or user specified segment level. + // There is exactly one element for each unique label. + SegmentLabelAnnotations []*LabelAnnotation `protobuf:"bytes,2,rep,name=segment_label_annotations,json=segmentLabelAnnotations" json:"segment_label_annotations,omitempty"` + // Label annotations on shot level. + // There is exactly one element for each unique label. + ShotLabelAnnotations []*LabelAnnotation `protobuf:"bytes,3,rep,name=shot_label_annotations,json=shotLabelAnnotations" json:"shot_label_annotations,omitempty"` + // Label annotations on frame level. + // There is exactly one element for each unique label. + FrameLabelAnnotations []*LabelAnnotation `protobuf:"bytes,4,rep,name=frame_label_annotations,json=frameLabelAnnotations" json:"frame_label_annotations,omitempty"` + // Face annotations. There is exactly one element for each unique face. + FaceAnnotations []*FaceAnnotation `protobuf:"bytes,5,rep,name=face_annotations,json=faceAnnotations" json:"face_annotations,omitempty"` + // Shot annotations. Each shot is represented as a video segment. + ShotAnnotations []*VideoSegment `protobuf:"bytes,6,rep,name=shot_annotations,json=shotAnnotations" json:"shot_annotations,omitempty"` + // Explicit content annotation. + ExplicitAnnotation *ExplicitContentAnnotation `protobuf:"bytes,7,opt,name=explicit_annotation,json=explicitAnnotation" json:"explicit_annotation,omitempty"` + // If set, indicates an error. Note that for a single `AnnotateVideoRequest` + // some videos may succeed and some may fail. + Error *google_rpc.Status `protobuf:"bytes,9,opt,name=error" json:"error,omitempty"` +} + +func (m *VideoAnnotationResults) Reset() { *m = VideoAnnotationResults{} } +func (m *VideoAnnotationResults) String() string { return proto.CompactTextString(m) } +func (*VideoAnnotationResults) ProtoMessage() {} +func (*VideoAnnotationResults) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } + +func (m *VideoAnnotationResults) GetInputUri() string { + if m != nil { + return m.InputUri + } + return "" +} + +func (m *VideoAnnotationResults) GetSegmentLabelAnnotations() []*LabelAnnotation { + if m != nil { + return m.SegmentLabelAnnotations + } + return nil +} + +func (m *VideoAnnotationResults) GetShotLabelAnnotations() []*LabelAnnotation { + if m != nil { + return m.ShotLabelAnnotations + } + return nil +} + +func (m *VideoAnnotationResults) GetFrameLabelAnnotations() []*LabelAnnotation { + if m != nil { + return m.FrameLabelAnnotations + } + return nil +} + +func (m *VideoAnnotationResults) GetFaceAnnotations() []*FaceAnnotation { + if m != nil { + return m.FaceAnnotations + } + return nil +} + +func (m *VideoAnnotationResults) GetShotAnnotations() []*VideoSegment { + if m != nil { + return m.ShotAnnotations + } + return nil +} + +func (m *VideoAnnotationResults) GetExplicitAnnotation() *ExplicitContentAnnotation { + if m != nil { + return m.ExplicitAnnotation + } + return nil +} + +func (m *VideoAnnotationResults) GetError() *google_rpc.Status { + if m != nil { + return m.Error + } + return nil +} + +// Video annotation response. Included in the `response` +// field of the `Operation` returned by the `GetOperation` +// call of the `google::longrunning::Operations` service. +type AnnotateVideoResponse struct { + // Annotation results for all videos specified in `AnnotateVideoRequest`. + AnnotationResults []*VideoAnnotationResults `protobuf:"bytes,1,rep,name=annotation_results,json=annotationResults" json:"annotation_results,omitempty"` +} + +func (m *AnnotateVideoResponse) Reset() { *m = AnnotateVideoResponse{} } +func (m *AnnotateVideoResponse) String() string { return proto.CompactTextString(m) } +func (*AnnotateVideoResponse) ProtoMessage() {} +func (*AnnotateVideoResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } + +func (m *AnnotateVideoResponse) GetAnnotationResults() []*VideoAnnotationResults { + if m != nil { + return m.AnnotationResults + } + return nil +} + +// Annotation progress for a single video. +type VideoAnnotationProgress struct { + // Video file location in + // [Google Cloud Storage](https://cloud.google.com/storage/). + InputUri string `protobuf:"bytes,1,opt,name=input_uri,json=inputUri" json:"input_uri,omitempty"` + // Approximate percentage processed thus far. + // Guaranteed to be 100 when fully processed. + ProgressPercent int32 `protobuf:"varint,2,opt,name=progress_percent,json=progressPercent" json:"progress_percent,omitempty"` + // Time when the request was received. + StartTime *google_protobuf4.Timestamp `protobuf:"bytes,3,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // Time of the most recent update. + UpdateTime *google_protobuf4.Timestamp `protobuf:"bytes,4,opt,name=update_time,json=updateTime" json:"update_time,omitempty"` +} + +func (m *VideoAnnotationProgress) Reset() { *m = VideoAnnotationProgress{} } +func (m *VideoAnnotationProgress) String() string { return proto.CompactTextString(m) } +func (*VideoAnnotationProgress) ProtoMessage() {} +func (*VideoAnnotationProgress) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } + +func (m *VideoAnnotationProgress) GetInputUri() string { + if m != nil { + return m.InputUri + } + return "" +} + +func (m *VideoAnnotationProgress) GetProgressPercent() int32 { + if m != nil { + return m.ProgressPercent + } + return 0 +} + +func (m *VideoAnnotationProgress) GetStartTime() *google_protobuf4.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *VideoAnnotationProgress) GetUpdateTime() *google_protobuf4.Timestamp { + if m != nil { + return m.UpdateTime + } + return nil +} + +// Video annotation progress. Included in the `metadata` +// field of the `Operation` returned by the `GetOperation` +// call of the `google::longrunning::Operations` service. +type AnnotateVideoProgress struct { + // Progress metadata for all videos specified in `AnnotateVideoRequest`. + AnnotationProgress []*VideoAnnotationProgress `protobuf:"bytes,1,rep,name=annotation_progress,json=annotationProgress" json:"annotation_progress,omitempty"` +} + +func (m *AnnotateVideoProgress) Reset() { *m = AnnotateVideoProgress{} } +func (m *AnnotateVideoProgress) String() string { return proto.CompactTextString(m) } +func (*AnnotateVideoProgress) ProtoMessage() {} +func (*AnnotateVideoProgress) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } + +func (m *AnnotateVideoProgress) GetAnnotationProgress() []*VideoAnnotationProgress { + if m != nil { + return m.AnnotationProgress + } + return nil +} + +func init() { + proto.RegisterType((*AnnotateVideoRequest)(nil), "google.cloud.videointelligence.v1beta2.AnnotateVideoRequest") + proto.RegisterType((*VideoContext)(nil), "google.cloud.videointelligence.v1beta2.VideoContext") + proto.RegisterType((*LabelDetectionConfig)(nil), "google.cloud.videointelligence.v1beta2.LabelDetectionConfig") + proto.RegisterType((*ShotChangeDetectionConfig)(nil), "google.cloud.videointelligence.v1beta2.ShotChangeDetectionConfig") + proto.RegisterType((*ExplicitContentDetectionConfig)(nil), "google.cloud.videointelligence.v1beta2.ExplicitContentDetectionConfig") + proto.RegisterType((*FaceDetectionConfig)(nil), "google.cloud.videointelligence.v1beta2.FaceDetectionConfig") + proto.RegisterType((*VideoSegment)(nil), "google.cloud.videointelligence.v1beta2.VideoSegment") + proto.RegisterType((*LabelSegment)(nil), "google.cloud.videointelligence.v1beta2.LabelSegment") + proto.RegisterType((*LabelFrame)(nil), "google.cloud.videointelligence.v1beta2.LabelFrame") + proto.RegisterType((*Entity)(nil), "google.cloud.videointelligence.v1beta2.Entity") + proto.RegisterType((*LabelAnnotation)(nil), "google.cloud.videointelligence.v1beta2.LabelAnnotation") + proto.RegisterType((*ExplicitContentFrame)(nil), "google.cloud.videointelligence.v1beta2.ExplicitContentFrame") + proto.RegisterType((*ExplicitContentAnnotation)(nil), "google.cloud.videointelligence.v1beta2.ExplicitContentAnnotation") + proto.RegisterType((*NormalizedBoundingBox)(nil), "google.cloud.videointelligence.v1beta2.NormalizedBoundingBox") + proto.RegisterType((*FaceSegment)(nil), "google.cloud.videointelligence.v1beta2.FaceSegment") + proto.RegisterType((*FaceFrame)(nil), "google.cloud.videointelligence.v1beta2.FaceFrame") + proto.RegisterType((*FaceAnnotation)(nil), "google.cloud.videointelligence.v1beta2.FaceAnnotation") + proto.RegisterType((*VideoAnnotationResults)(nil), "google.cloud.videointelligence.v1beta2.VideoAnnotationResults") + proto.RegisterType((*AnnotateVideoResponse)(nil), "google.cloud.videointelligence.v1beta2.AnnotateVideoResponse") + proto.RegisterType((*VideoAnnotationProgress)(nil), "google.cloud.videointelligence.v1beta2.VideoAnnotationProgress") + proto.RegisterType((*AnnotateVideoProgress)(nil), "google.cloud.videointelligence.v1beta2.AnnotateVideoProgress") + proto.RegisterEnum("google.cloud.videointelligence.v1beta2.Feature", Feature_name, Feature_value) + proto.RegisterEnum("google.cloud.videointelligence.v1beta2.LabelDetectionMode", LabelDetectionMode_name, LabelDetectionMode_value) + proto.RegisterEnum("google.cloud.videointelligence.v1beta2.Likelihood", Likelihood_name, Likelihood_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for VideoIntelligenceService service + +type VideoIntelligenceServiceClient interface { + // Performs asynchronous video annotation. Progress and results can be + // retrieved through the `google.longrunning.Operations` interface. + // `Operation.metadata` contains `AnnotateVideoProgress` (progress). + // `Operation.response` contains `AnnotateVideoResponse` (results). + AnnotateVideo(ctx context.Context, in *AnnotateVideoRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) +} + +type videoIntelligenceServiceClient struct { + cc *grpc.ClientConn +} + +func NewVideoIntelligenceServiceClient(cc *grpc.ClientConn) VideoIntelligenceServiceClient { + return &videoIntelligenceServiceClient{cc} +} + +func (c *videoIntelligenceServiceClient) AnnotateVideo(ctx context.Context, in *AnnotateVideoRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.videointelligence.v1beta2.VideoIntelligenceService/AnnotateVideo", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for VideoIntelligenceService service + +type VideoIntelligenceServiceServer interface { + // Performs asynchronous video annotation. Progress and results can be + // retrieved through the `google.longrunning.Operations` interface. + // `Operation.metadata` contains `AnnotateVideoProgress` (progress). + // `Operation.response` contains `AnnotateVideoResponse` (results). + AnnotateVideo(context.Context, *AnnotateVideoRequest) (*google_longrunning.Operation, error) +} + +func RegisterVideoIntelligenceServiceServer(s *grpc.Server, srv VideoIntelligenceServiceServer) { + s.RegisterService(&_VideoIntelligenceService_serviceDesc, srv) +} + +func _VideoIntelligenceService_AnnotateVideo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AnnotateVideoRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VideoIntelligenceServiceServer).AnnotateVideo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.videointelligence.v1beta2.VideoIntelligenceService/AnnotateVideo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VideoIntelligenceServiceServer).AnnotateVideo(ctx, req.(*AnnotateVideoRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _VideoIntelligenceService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.videointelligence.v1beta2.VideoIntelligenceService", + HandlerType: (*VideoIntelligenceServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "AnnotateVideo", + Handler: _VideoIntelligenceService_AnnotateVideo_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/videointelligence/v1beta2/video_intelligence.proto", +} + +func init() { + proto.RegisterFile("google/cloud/videointelligence/v1beta2/video_intelligence.proto", fileDescriptor0) +} + +var fileDescriptor0 = []byte{ + // 1718 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x58, 0x4f, 0x6f, 0xdb, 0xc8, + 0x15, 0x2f, 0x25, 0xd9, 0xb1, 0x9e, 0xff, 0x48, 0x19, 0xcb, 0xb6, 0xec, 0x26, 0x5e, 0x97, 0x29, + 0x16, 0xae, 0x0b, 0x48, 0x88, 0x77, 0xb1, 0x45, 0x93, 0x6d, 0x17, 0xb2, 0x4c, 0x6d, 0xd4, 0x75, + 0x24, 0x81, 0x52, 0xd2, 0xa6, 0x4d, 0x41, 0x50, 0xe4, 0x88, 0x22, 0x96, 0xe2, 0x70, 0xc9, 0x61, + 0x10, 0xf7, 0xd0, 0xc3, 0x1e, 0x16, 0xe8, 0xb1, 0xe8, 0xa5, 0x9f, 0xa1, 0x87, 0x7e, 0x83, 0x02, + 0x45, 0x2f, 0x05, 0x72, 0x6d, 0x2f, 0xbd, 0xf4, 0xd4, 0x63, 0x3f, 0x40, 0x8f, 0x05, 0x67, 0x86, + 0x12, 0x45, 0xca, 0xb1, 0x94, 0x60, 0x6f, 0x9c, 0xf7, 0xe6, 0xfd, 0xde, 0xff, 0x37, 0x33, 0x84, + 0xcf, 0x2c, 0x42, 0x2c, 0x07, 0xd7, 0x0d, 0x87, 0x84, 0x66, 0xfd, 0x95, 0x6d, 0x62, 0x62, 0xbb, + 0x14, 0x3b, 0x8e, 0x6d, 0x61, 0xd7, 0xc0, 0xf5, 0x57, 0x0f, 0x87, 0x98, 0xea, 0xe7, 0x9c, 0xa3, + 0x25, 0x59, 0x35, 0xcf, 0x27, 0x94, 0xa0, 0x0f, 0x39, 0x40, 0x8d, 0x01, 0xd4, 0x32, 0x00, 0x35, + 0x01, 0x70, 0x74, 0x4f, 0x28, 0xd2, 0x3d, 0xbb, 0xae, 0xbb, 0x2e, 0xa1, 0x3a, 0xb5, 0x89, 0x1b, + 0x70, 0x94, 0xa3, 0x07, 0x82, 0xeb, 0x10, 0xd7, 0xf2, 0x43, 0xd7, 0xb5, 0x5d, 0xab, 0x4e, 0x3c, + 0xec, 0xcf, 0x6d, 0x3a, 0x16, 0x9b, 0xd8, 0x6a, 0x18, 0x8e, 0xea, 0x66, 0xc8, 0x37, 0x08, 0xfe, + 0x07, 0x69, 0x3e, 0xb5, 0x27, 0x38, 0xa0, 0xfa, 0xc4, 0x13, 0x1b, 0x0e, 0xc4, 0x06, 0xdf, 0x33, + 0xea, 0x01, 0xd5, 0x69, 0x28, 0x90, 0xe5, 0xbf, 0xe6, 0xa0, 0xd2, 0xe0, 0x46, 0xe1, 0xe7, 0x91, + 0x0b, 0x2a, 0xfe, 0x2a, 0xc4, 0x01, 0x45, 0xdf, 0x85, 0xa2, 0xed, 0x7a, 0x21, 0xd5, 0x42, 0xdf, + 0xae, 0x4a, 0x27, 0xd2, 0x69, 0x51, 0xdd, 0x60, 0x84, 0x67, 0xbe, 0x8d, 0x1e, 0xc0, 0x36, 0x67, + 0x1a, 0xc4, 0xa5, 0xd8, 0xa5, 0xd5, 0xf5, 0x13, 0xe9, 0x74, 0x4b, 0xdd, 0x62, 0xc4, 0x26, 0xa7, + 0xa1, 0x2f, 0x60, 0x63, 0x84, 0x75, 0x1a, 0xfa, 0x38, 0xa8, 0xe6, 0x4e, 0xf2, 0xa7, 0x3b, 0xe7, + 0xf5, 0xda, 0x72, 0x21, 0xab, 0xb5, 0xb8, 0x9c, 0x3a, 0x05, 0x40, 0x2f, 0x60, 0x9b, 0x27, 0x82, + 0x69, 0x7c, 0x4d, 0xab, 0xf9, 0x13, 0xe9, 0x74, 0xf3, 0xfc, 0xe3, 0x65, 0x11, 0x99, 0x6f, 0x4d, + 0x2e, 0xab, 0x6e, 0xbd, 0x4a, 0xac, 0xd0, 0x7d, 0x00, 0x12, 0xd2, 0xd8, 0xd5, 0x02, 0x73, 0xb5, + 0xc8, 0x29, 0x91, 0xaf, 0x1f, 0xc0, 0xa6, 0x43, 0x0c, 0x16, 0x6d, 0xcd, 0x36, 0xab, 0x6b, 0x8c, + 0x0f, 0x31, 0xa9, 0x6d, 0xca, 0xff, 0x2e, 0xc0, 0x56, 0x12, 0x1e, 0xf5, 0x60, 0x23, 0xc0, 0xd6, + 0x04, 0xbb, 0x34, 0xa8, 0x4a, 0x27, 0xf9, 0x95, 0xcd, 0xec, 0x73, 0x61, 0x75, 0x8a, 0x82, 0x7c, + 0xd8, 0x77, 0xf4, 0x21, 0x76, 0x34, 0x13, 0x53, 0x6c, 0x30, 0x53, 0x0c, 0xe2, 0x8e, 0x6c, 0xab, + 0x9a, 0x63, 0x61, 0xf8, 0x74, 0x59, 0xfc, 0xab, 0x08, 0xe5, 0x32, 0x06, 0x69, 0x32, 0x0c, 0xb5, + 0xe2, 0x2c, 0xa0, 0xa2, 0xaf, 0x25, 0xb8, 0x17, 0x8c, 0x09, 0xd5, 0x8c, 0xb1, 0xee, 0x5a, 0x38, + 0xab, 0x9a, 0x67, 0xa0, 0xb1, 0xac, 0xea, 0xfe, 0x98, 0xd0, 0x26, 0x83, 0x4a, 0xeb, 0x3f, 0x0c, + 0x6e, 0x62, 0xa1, 0xdf, 0x4b, 0xf0, 0x3d, 0xfc, 0xda, 0x73, 0x6c, 0xc3, 0x9e, 0x16, 0x5b, 0xd6, + 0x92, 0x02, 0xb3, 0xa4, 0xb5, 0xac, 0x25, 0x8a, 0x00, 0x14, 0x85, 0x9a, 0x36, 0xe7, 0x18, 0xbf, + 0x95, 0x8f, 0x08, 0xec, 0x8d, 0x74, 0x63, 0x41, 0x40, 0xd6, 0x98, 0x19, 0x8f, 0x97, 0x2e, 0x72, + 0xdd, 0xc8, 0x84, 0x62, 0x77, 0x94, 0x25, 0xca, 0x7f, 0x97, 0xa0, 0xb2, 0x28, 0x71, 0xc8, 0x81, + 0x4a, 0xba, 0x2c, 0x26, 0xc4, 0xc4, 0xac, 0x5d, 0x77, 0xce, 0x1f, 0xbd, 0x5b, 0x51, 0x3c, 0x25, + 0x26, 0x56, 0x91, 0x93, 0xa1, 0xa1, 0x1f, 0xc2, 0xdd, 0x80, 0xcf, 0x2e, 0xdd, 0xbf, 0xd6, 0x0c, + 0x7d, 0x82, 0x7d, 0x9d, 0xd5, 0xdf, 0x86, 0x5a, 0x9e, 0x31, 0x9a, 0x8c, 0x8e, 0x2a, 0xb0, 0x16, + 0x99, 0xe2, 0xb0, 0x2a, 0x29, 0xaa, 0x7c, 0x21, 0x3f, 0x84, 0xc3, 0x1b, 0xcb, 0x60, 0x26, 0x22, + 0x25, 0x45, 0x3e, 0x81, 0xe3, 0xb7, 0xe7, 0xeb, 0x06, 0x39, 0x1d, 0x76, 0x17, 0x04, 0x78, 0xf1, + 0x66, 0xf4, 0x31, 0xec, 0xdb, 0xae, 0xe1, 0x84, 0x26, 0xd6, 0x86, 0x24, 0x74, 0x4d, 0xdb, 0xb5, + 0xb4, 0x21, 0x79, 0xcd, 0x06, 0x57, 0xe4, 0x5f, 0x45, 0x70, 0x2f, 0x04, 0xf3, 0x22, 0xe2, 0xc9, + 0x7f, 0x94, 0x44, 0xe3, 0x8b, 0x86, 0x45, 0x0a, 0x8b, 0x90, 0x4f, 0xb5, 0x68, 0xfc, 0x6a, 0x64, + 0x34, 0x0a, 0x30, 0x65, 0x8a, 0x36, 0xcf, 0x0f, 0xe3, 0x64, 0xc4, 0x23, 0xba, 0x76, 0x29, 0x46, + 0xb8, 0x5a, 0x62, 0x32, 0x03, 0x7b, 0x82, 0xbb, 0x4c, 0x02, 0x35, 0xa0, 0x84, 0x5d, 0x73, 0x0e, + 0x24, 0x77, 0x1b, 0xc8, 0x36, 0x76, 0xcd, 0x19, 0x84, 0xfc, 0x5b, 0xd8, 0x62, 0x59, 0x8d, 0x2d, + 0xeb, 0xc0, 0x1d, 0x31, 0x4c, 0x84, 0x3d, 0xef, 0x36, 0x91, 0x62, 0x10, 0x74, 0x0c, 0xc0, 0x8a, + 0xde, 0x8c, 0xf6, 0x32, 0xeb, 0x72, 0x6a, 0x82, 0x22, 0x8f, 0x01, 0x98, 0xfe, 0x96, 0xaf, 0x4f, + 0x30, 0x7a, 0x04, 0x9b, 0x2b, 0x45, 0x04, 0xe8, 0x2c, 0x18, 0xb7, 0x69, 0x72, 0x60, 0x5d, 0x71, + 0xa9, 0x4d, 0xaf, 0xa3, 0x13, 0x0b, 0xb3, 0xaf, 0x68, 0x4c, 0x8b, 0x13, 0x8b, 0x13, 0xda, 0x26, + 0x3a, 0x81, 0x4d, 0x13, 0x07, 0x86, 0x6f, 0x7b, 0x91, 0x06, 0x86, 0x53, 0x54, 0x93, 0xa4, 0xe8, + 0x4c, 0x73, 0x74, 0xd7, 0x0a, 0x75, 0x0b, 0x6b, 0x46, 0xd4, 0x45, 0xbc, 0x72, 0xb7, 0x62, 0x62, + 0x93, 0x98, 0x58, 0xfe, 0x67, 0x0e, 0x4a, 0xcc, 0xb1, 0xc6, 0xf4, 0x20, 0x47, 0x2d, 0x58, 0xe7, + 0x6a, 0x84, 0x63, 0xb5, 0xa5, 0xe7, 0x10, 0x93, 0x52, 0x85, 0x34, 0xfa, 0x15, 0xdc, 0x35, 0x74, + 0x8a, 0x2d, 0xe2, 0x5f, 0x6b, 0x8c, 0x64, 0x8b, 0x83, 0x73, 0x75, 0xc8, 0x72, 0x0c, 0xa4, 0x08, + 0x9c, 0xb9, 0x33, 0x29, 0xbf, 0xda, 0x99, 0x94, 0x2c, 0xa4, 0xc4, 0x99, 0xf4, 0x33, 0x58, 0x1f, + 0x45, 0xd9, 0x0d, 0xaa, 0x05, 0x86, 0x77, 0xbe, 0x12, 0x1e, 0x2b, 0x0c, 0x55, 0x20, 0xc8, 0x7f, + 0x91, 0xa0, 0x92, 0xea, 0xf2, 0xf7, 0xaf, 0x1c, 0x1b, 0xf6, 0x3d, 0xe2, 0xbb, 0xc4, 0xf2, 0x75, + 0x6f, 0x7c, 0xad, 0x39, 0xf6, 0x97, 0xd8, 0xb1, 0xc7, 0x84, 0x98, 0x2c, 0xfb, 0x3b, 0x2b, 0x18, + 0x3c, 0x95, 0x54, 0xf7, 0x12, 0x88, 0x33, 0xb2, 0xfc, 0x15, 0x1c, 0xa6, 0xcc, 0x4f, 0xd4, 0xc7, + 0x60, 0x1a, 0x28, 0x7e, 0x19, 0xf8, 0xf4, 0x1d, 0xcf, 0xa9, 0xf9, 0x90, 0x7d, 0x09, 0x7b, 0x1d, + 0xe2, 0x4f, 0x74, 0xc7, 0xfe, 0x0d, 0x36, 0x13, 0x73, 0x09, 0x21, 0x28, 0x38, 0x78, 0xc4, 0x63, + 0x95, 0x53, 0xd9, 0x37, 0x2a, 0x43, 0x9e, 0x12, 0x4f, 0x74, 0x4f, 0xf4, 0x19, 0xcd, 0x41, 0xdf, + 0xb6, 0xc6, 0xfc, 0x1e, 0x95, 0x53, 0xf9, 0x02, 0xed, 0xc3, 0xfa, 0x90, 0x50, 0x4a, 0x26, 0xec, + 0x48, 0xcd, 0xa9, 0x62, 0x25, 0xff, 0x1a, 0x36, 0xa3, 0x61, 0xfa, 0x2d, 0x4d, 0x13, 0xf9, 0x6f, + 0x12, 0x14, 0x23, 0x7c, 0x9e, 0xf3, 0x6b, 0x38, 0x74, 0xa7, 0x9e, 0xa5, 0xe7, 0x31, 0x0f, 0xe1, + 0x4f, 0x96, 0xd5, 0xb7, 0x30, 0x44, 0xea, 0x81, 0xbb, 0x88, 0x8c, 0x83, 0x74, 0xb9, 0xe5, 0x56, + 0x28, 0x37, 0xf9, 0x8d, 0x04, 0x3b, 0x91, 0x13, 0x89, 0xcc, 0xdf, 0x83, 0x22, 0x1d, 0x87, 0x93, + 0xa1, 0xab, 0xdb, 0xfc, 0xc0, 0xd9, 0x52, 0x67, 0x04, 0xd4, 0x4d, 0xb4, 0x24, 0x6f, 0xf3, 0x8f, + 0x56, 0xb9, 0x3a, 0x64, 0x3b, 0xb2, 0x3d, 0x2d, 0x34, 0xde, 0xe1, 0x0f, 0x57, 0x81, 0x9b, 0xaf, + 0xae, 0xff, 0xae, 0xc1, 0x3e, 0xcb, 0xd5, 0xcc, 0x1b, 0x15, 0x07, 0xa1, 0x43, 0x83, 0xb7, 0x3f, + 0x0c, 0x02, 0x38, 0x14, 0xe6, 0x68, 0xfc, 0x66, 0x92, 0x78, 0xf0, 0x08, 0x27, 0x7f, 0xb4, 0xd2, + 0x9c, 0x48, 0xe8, 0x3f, 0x10, 0xc8, 0x29, 0x7a, 0x80, 0x26, 0xb0, 0xcf, 0x2e, 0xaa, 0x59, 0x8d, + 0xf9, 0xf7, 0xd3, 0x58, 0x89, 0x60, 0x33, 0xea, 0x08, 0x1c, 0xb0, 0x28, 0x2d, 0xd0, 0x57, 0x78, + 0x3f, 0x7d, 0x7b, 0x0c, 0x37, 0xa3, 0x50, 0x87, 0x32, 0xbb, 0x70, 0x26, 0x35, 0xad, 0x31, 0x4d, + 0x9f, 0xac, 0x92, 0xe1, 0x84, 0xa2, 0xd2, 0x68, 0x6e, 0x1d, 0x20, 0x0d, 0xca, 0x2c, 0x84, 0x49, + 0x15, 0xeb, 0xef, 0xf1, 0x74, 0x29, 0x45, 0x68, 0x49, 0x05, 0x3e, 0xec, 0x4e, 0xef, 0xf1, 0x33, + 0x25, 0xd5, 0x3b, 0xab, 0xbd, 0x21, 0x6e, 0x1c, 0xb2, 0x2a, 0x8a, 0xd1, 0x13, 0xed, 0x77, 0x0a, + 0x6b, 0xd8, 0xf7, 0x89, 0x5f, 0x2d, 0x32, 0x2d, 0x28, 0xd6, 0xe2, 0x7b, 0x46, 0xad, 0xcf, 0x1e, + 0xc1, 0x2a, 0xdf, 0x20, 0x7f, 0x23, 0xc1, 0x5e, 0xea, 0x15, 0x1c, 0x78, 0xc4, 0x0d, 0x30, 0x9a, + 0x00, 0x9a, 0x99, 0xab, 0xf9, 0xbc, 0x07, 0xc4, 0x14, 0xfa, 0xe9, 0x4a, 0xa1, 0xc9, 0x74, 0x92, + 0x7a, 0x57, 0x4f, 0x93, 0xe4, 0x7f, 0x49, 0x70, 0x90, 0xda, 0xdd, 0xf3, 0x89, 0xe5, 0xe3, 0xe0, + 0x96, 0xc6, 0xfb, 0x01, 0x94, 0x3d, 0xb1, 0x51, 0xf3, 0xb0, 0x6f, 0x44, 0xb3, 0x39, 0x1a, 0x5f, + 0x6b, 0x6a, 0x29, 0xa6, 0xf7, 0x38, 0x19, 0xfd, 0x18, 0x60, 0x76, 0x4b, 0x15, 0xaf, 0xb8, 0xa3, + 0xcc, 0x8c, 0x1b, 0xc4, 0x7f, 0x10, 0xd4, 0xe2, 0xf4, 0x7e, 0x8a, 0x1e, 0xc3, 0x66, 0xe8, 0x99, + 0x3a, 0xc5, 0x5c, 0xb6, 0x70, 0xab, 0x2c, 0xf0, 0xed, 0x11, 0x41, 0xfe, 0x5d, 0x3a, 0xc8, 0x53, + 0xcf, 0x3c, 0xd8, 0x4d, 0x04, 0x39, 0xb6, 0x57, 0x44, 0xf9, 0xb3, 0x77, 0x8c, 0x72, 0x8c, 0xae, + 0x26, 0x12, 0x18, 0xd3, 0xce, 0xbe, 0x91, 0xe0, 0x8e, 0xf8, 0xc9, 0x80, 0x0e, 0x60, 0xb7, 0xa5, + 0x34, 0x06, 0xcf, 0x54, 0x45, 0x7b, 0xd6, 0xe9, 0xf7, 0x94, 0x66, 0xbb, 0xd5, 0x56, 0x2e, 0xcb, + 0xdf, 0x41, 0xbb, 0x50, 0xba, 0x6a, 0x5c, 0x28, 0x57, 0xda, 0xa5, 0x32, 0x50, 0x9a, 0x83, 0x76, + 0xb7, 0x53, 0x96, 0xd0, 0x21, 0xec, 0xf5, 0x9f, 0x74, 0x07, 0x5a, 0xf3, 0x49, 0xa3, 0xf3, 0xb9, + 0x92, 0x60, 0xe5, 0xd0, 0x31, 0x1c, 0x29, 0xbf, 0xe8, 0x5d, 0xb5, 0x9b, 0xed, 0x81, 0xd6, 0xec, + 0x76, 0x06, 0x4a, 0x67, 0x90, 0xe0, 0xe7, 0x11, 0x82, 0x9d, 0x56, 0xa3, 0x99, 0x94, 0x29, 0x9c, + 0xf9, 0x80, 0xb2, 0xcf, 0x2f, 0xf4, 0x7d, 0x38, 0x49, 0x69, 0xd6, 0x9e, 0x76, 0x2f, 0xd3, 0xf6, + 0x6d, 0x43, 0x91, 0x99, 0x12, 0xb1, 0xca, 0x12, 0xda, 0x01, 0x68, 0xa9, 0x8d, 0xa7, 0x0a, 0x5f, + 0xe7, 0x22, 0xbf, 0x18, 0xbb, 0xd1, 0xb9, 0xd4, 0x12, 0x8c, 0xfc, 0x19, 0x05, 0x98, 0xdd, 0x5d, + 0xd0, 0x11, 0xec, 0x5f, 0xb5, 0xbf, 0x50, 0xae, 0xda, 0x4f, 0xba, 0xdd, 0xcb, 0x94, 0x86, 0xbb, + 0xb0, 0xfd, 0x5c, 0x51, 0x5f, 0x68, 0xcf, 0x3a, 0x6c, 0xcb, 0x8b, 0xb2, 0x84, 0xb6, 0x60, 0x63, + 0xba, 0xca, 0x45, 0xab, 0x5e, 0xb7, 0xdf, 0x6f, 0x5f, 0x5c, 0x29, 0xe5, 0x3c, 0x02, 0x58, 0x17, + 0x9c, 0x02, 0x2a, 0xc1, 0x26, 0x13, 0x15, 0x84, 0xb5, 0xf3, 0x3f, 0x4b, 0x50, 0x65, 0x29, 0x6a, + 0x27, 0x92, 0xd7, 0xc7, 0xfe, 0x2b, 0xdb, 0xc0, 0xd1, 0x3b, 0x7f, 0x7b, 0xae, 0x36, 0xd0, 0xd2, + 0xb7, 0xa4, 0x45, 0x7f, 0xaf, 0x8e, 0xee, 0xc7, 0xd2, 0x89, 0xdf, 0x6a, 0xb5, 0x6e, 0xfc, 0x5b, + 0x4d, 0x7e, 0xf0, 0xf5, 0x3f, 0xfe, 0xf3, 0x87, 0xdc, 0x7d, 0xb9, 0x3a, 0xff, 0x97, 0x2f, 0x78, + 0x24, 0x4a, 0x05, 0x3f, 0x92, 0xce, 0x2e, 0xfe, 0x27, 0xc1, 0x99, 0x41, 0x26, 0x4b, 0xda, 0x71, + 0x71, 0xff, 0x26, 0xe7, 0x7a, 0x51, 0x5b, 0xf4, 0xa4, 0x5f, 0xfe, 0x5c, 0x00, 0x59, 0x24, 0x7a, + 0x52, 0xd4, 0x88, 0x6f, 0xd5, 0x2d, 0xec, 0xb2, 0xa6, 0xa9, 0x73, 0x96, 0xee, 0xd9, 0xc1, 0x6d, + 0xff, 0x23, 0x1f, 0x67, 0x38, 0x7f, 0xca, 0x7d, 0xf8, 0x39, 0x47, 0x6e, 0x32, 0x13, 0x33, 0x76, + 0xd4, 0x9e, 0x3f, 0xbc, 0x88, 0x44, 0xdf, 0xc4, 0x1b, 0x5f, 0xb2, 0x8d, 0x2f, 0x33, 0x1b, 0x5f, + 0x3e, 0xe7, 0x3a, 0x86, 0xeb, 0xcc, 0xaa, 0x8f, 0xfe, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x1e, 0x8a, + 0xa0, 0x1c, 0x24, 0x15, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/videointelligence/v1p1beta1/video_intelligence.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/videointelligence/v1p1beta1/video_intelligence.pb.go new file mode 100644 index 0000000..7da3439 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/videointelligence/v1p1beta1/video_intelligence.pb.go @@ -0,0 +1,1551 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/videointelligence/v1p1beta1/video_intelligence.proto + +/* +Package videointelligence is a generated protocol buffer package. + +It is generated from these files: + google/cloud/videointelligence/v1p1beta1/video_intelligence.proto + +It has these top-level messages: + AnnotateVideoRequest + VideoContext + LabelDetectionConfig + ShotChangeDetectionConfig + ExplicitContentDetectionConfig + FaceConfig + VideoSegment + LabelSegment + LabelFrame + Entity + LabelAnnotation + ExplicitContentFrame + ExplicitContentAnnotation + NormalizedBoundingBox + FaceSegment + FaceDetectionFrame + FaceDetectionAttribute + EmotionAttribute + FaceDetectionAnnotation + VideoAnnotationResults + AnnotateVideoResponse + VideoAnnotationProgress + AnnotateVideoProgress + SpeechTranscriptionConfig + SpeechContext + SpeechTranscription + SpeechRecognitionAlternative + WordInfo +*/ +package videointelligence + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import google_protobuf3 "github.com/golang/protobuf/ptypes/duration" +import google_protobuf4 "github.com/golang/protobuf/ptypes/timestamp" +import google_rpc "google.golang.org/genproto/googleapis/rpc/status" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Video annotation feature. +type Feature int32 + +const ( + // Unspecified. + Feature_FEATURE_UNSPECIFIED Feature = 0 + // Label detection. Detect objects, such as dog or flower. + Feature_LABEL_DETECTION Feature = 1 + // Shot change detection. + Feature_SHOT_CHANGE_DETECTION Feature = 2 + // Explicit content detection. + Feature_EXPLICIT_CONTENT_DETECTION Feature = 3 + // Face detection. + Feature_FACE_DETECTION Feature = 8 + // Speech transcription. + Feature_SPEECH_TRANSCRIPTION Feature = 6 +) + +var Feature_name = map[int32]string{ + 0: "FEATURE_UNSPECIFIED", + 1: "LABEL_DETECTION", + 2: "SHOT_CHANGE_DETECTION", + 3: "EXPLICIT_CONTENT_DETECTION", + 8: "FACE_DETECTION", + 6: "SPEECH_TRANSCRIPTION", +} +var Feature_value = map[string]int32{ + "FEATURE_UNSPECIFIED": 0, + "LABEL_DETECTION": 1, + "SHOT_CHANGE_DETECTION": 2, + "EXPLICIT_CONTENT_DETECTION": 3, + "FACE_DETECTION": 8, + "SPEECH_TRANSCRIPTION": 6, +} + +func (x Feature) String() string { + return proto.EnumName(Feature_name, int32(x)) +} +func (Feature) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +// Label detection mode. +type LabelDetectionMode int32 + +const ( + // Unspecified. + LabelDetectionMode_LABEL_DETECTION_MODE_UNSPECIFIED LabelDetectionMode = 0 + // Detect shot-level labels. + LabelDetectionMode_SHOT_MODE LabelDetectionMode = 1 + // Detect frame-level labels. + LabelDetectionMode_FRAME_MODE LabelDetectionMode = 2 + // Detect both shot-level and frame-level labels. + LabelDetectionMode_SHOT_AND_FRAME_MODE LabelDetectionMode = 3 +) + +var LabelDetectionMode_name = map[int32]string{ + 0: "LABEL_DETECTION_MODE_UNSPECIFIED", + 1: "SHOT_MODE", + 2: "FRAME_MODE", + 3: "SHOT_AND_FRAME_MODE", +} +var LabelDetectionMode_value = map[string]int32{ + "LABEL_DETECTION_MODE_UNSPECIFIED": 0, + "SHOT_MODE": 1, + "FRAME_MODE": 2, + "SHOT_AND_FRAME_MODE": 3, +} + +func (x LabelDetectionMode) String() string { + return proto.EnumName(LabelDetectionMode_name, int32(x)) +} +func (LabelDetectionMode) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +// Bucketized representation of likelihood. +type Likelihood int32 + +const ( + // Unspecified likelihood. + Likelihood_LIKELIHOOD_UNSPECIFIED Likelihood = 0 + // Very unlikely. + Likelihood_VERY_UNLIKELY Likelihood = 1 + // Unlikely. + Likelihood_UNLIKELY Likelihood = 2 + // Possible. + Likelihood_POSSIBLE Likelihood = 3 + // Likely. + Likelihood_LIKELY Likelihood = 4 + // Very likely. + Likelihood_VERY_LIKELY Likelihood = 5 +) + +var Likelihood_name = map[int32]string{ + 0: "LIKELIHOOD_UNSPECIFIED", + 1: "VERY_UNLIKELY", + 2: "UNLIKELY", + 3: "POSSIBLE", + 4: "LIKELY", + 5: "VERY_LIKELY", +} +var Likelihood_value = map[string]int32{ + "LIKELIHOOD_UNSPECIFIED": 0, + "VERY_UNLIKELY": 1, + "UNLIKELY": 2, + "POSSIBLE": 3, + "LIKELY": 4, + "VERY_LIKELY": 5, +} + +func (x Likelihood) String() string { + return proto.EnumName(Likelihood_name, int32(x)) +} +func (Likelihood) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +// Emotions. +type Emotion int32 + +const ( + // Unspecified emotion. + Emotion_EMOTION_UNSPECIFIED Emotion = 0 + // Amusement. + Emotion_AMUSEMENT Emotion = 1 + // Anger. + Emotion_ANGER Emotion = 2 + // Concentration. + Emotion_CONCENTRATION Emotion = 3 + // Contentment. + Emotion_CONTENTMENT Emotion = 4 + // Desire. + Emotion_DESIRE Emotion = 5 + // Disappointment. + Emotion_DISAPPOINTMENT Emotion = 6 + // Disgust. + Emotion_DISGUST Emotion = 7 + // Elation. + Emotion_ELATION Emotion = 8 + // Embarrassment. + Emotion_EMBARRASSMENT Emotion = 9 + // Interest. + Emotion_INTEREST Emotion = 10 + // Pride. + Emotion_PRIDE Emotion = 11 + // Sadness. + Emotion_SADNESS Emotion = 12 + // Surprise. + Emotion_SURPRISE Emotion = 13 +) + +var Emotion_name = map[int32]string{ + 0: "EMOTION_UNSPECIFIED", + 1: "AMUSEMENT", + 2: "ANGER", + 3: "CONCENTRATION", + 4: "CONTENTMENT", + 5: "DESIRE", + 6: "DISAPPOINTMENT", + 7: "DISGUST", + 8: "ELATION", + 9: "EMBARRASSMENT", + 10: "INTEREST", + 11: "PRIDE", + 12: "SADNESS", + 13: "SURPRISE", +} +var Emotion_value = map[string]int32{ + "EMOTION_UNSPECIFIED": 0, + "AMUSEMENT": 1, + "ANGER": 2, + "CONCENTRATION": 3, + "CONTENTMENT": 4, + "DESIRE": 5, + "DISAPPOINTMENT": 6, + "DISGUST": 7, + "ELATION": 8, + "EMBARRASSMENT": 9, + "INTEREST": 10, + "PRIDE": 11, + "SADNESS": 12, + "SURPRISE": 13, +} + +func (x Emotion) String() string { + return proto.EnumName(Emotion_name, int32(x)) +} +func (Emotion) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +// Video annotation request. +type AnnotateVideoRequest struct { + // Input video location. Currently, only + // [Google Cloud Storage](https://cloud.google.com/storage/) URIs are + // supported, which must be specified in the following format: + // `gs://bucket-id/object-id` (other URI formats return + // [google.rpc.Code.INVALID_ARGUMENT][google.rpc.Code.INVALID_ARGUMENT]). For more information, see + // [Request URIs](/storage/docs/reference-uris). + // A video URI may include wildcards in `object-id`, and thus identify + // multiple videos. Supported wildcards: '*' to match 0 or more characters; + // '?' to match 1 character. If unset, the input video should be embedded + // in the request as `input_content`. If set, `input_content` should be unset. + InputUri string `protobuf:"bytes,1,opt,name=input_uri,json=inputUri" json:"input_uri,omitempty"` + // The video data bytes. + // If unset, the input video(s) should be specified via `input_uri`. + // If set, `input_uri` should be unset. + InputContent []byte `protobuf:"bytes,6,opt,name=input_content,json=inputContent,proto3" json:"input_content,omitempty"` + // Requested video annotation features. + Features []Feature `protobuf:"varint,2,rep,packed,name=features,enum=google.cloud.videointelligence.v1p1beta1.Feature" json:"features,omitempty"` + // Additional video context and/or feature-specific parameters. + VideoContext *VideoContext `protobuf:"bytes,3,opt,name=video_context,json=videoContext" json:"video_context,omitempty"` + // Optional location where the output (in JSON format) should be stored. + // Currently, only [Google Cloud Storage](https://cloud.google.com/storage/) + // URIs are supported, which must be specified in the following format: + // `gs://bucket-id/object-id` (other URI formats return + // [google.rpc.Code.INVALID_ARGUMENT][google.rpc.Code.INVALID_ARGUMENT]). For more information, see + // [Request URIs](/storage/docs/reference-uris). + OutputUri string `protobuf:"bytes,4,opt,name=output_uri,json=outputUri" json:"output_uri,omitempty"` + // Optional cloud region where annotation should take place. Supported cloud + // regions: `us-east1`, `us-west1`, `europe-west1`, `asia-east1`. If no region + // is specified, a region will be determined based on video file location. + LocationId string `protobuf:"bytes,5,opt,name=location_id,json=locationId" json:"location_id,omitempty"` +} + +func (m *AnnotateVideoRequest) Reset() { *m = AnnotateVideoRequest{} } +func (m *AnnotateVideoRequest) String() string { return proto.CompactTextString(m) } +func (*AnnotateVideoRequest) ProtoMessage() {} +func (*AnnotateVideoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *AnnotateVideoRequest) GetInputUri() string { + if m != nil { + return m.InputUri + } + return "" +} + +func (m *AnnotateVideoRequest) GetInputContent() []byte { + if m != nil { + return m.InputContent + } + return nil +} + +func (m *AnnotateVideoRequest) GetFeatures() []Feature { + if m != nil { + return m.Features + } + return nil +} + +func (m *AnnotateVideoRequest) GetVideoContext() *VideoContext { + if m != nil { + return m.VideoContext + } + return nil +} + +func (m *AnnotateVideoRequest) GetOutputUri() string { + if m != nil { + return m.OutputUri + } + return "" +} + +func (m *AnnotateVideoRequest) GetLocationId() string { + if m != nil { + return m.LocationId + } + return "" +} + +// Video context and/or feature-specific parameters. +type VideoContext struct { + // Video segments to annotate. The segments may overlap and are not required + // to be contiguous or span the whole video. If unspecified, each video + // is treated as a single segment. + Segments []*VideoSegment `protobuf:"bytes,1,rep,name=segments" json:"segments,omitempty"` + // Config for LABEL_DETECTION. + LabelDetectionConfig *LabelDetectionConfig `protobuf:"bytes,2,opt,name=label_detection_config,json=labelDetectionConfig" json:"label_detection_config,omitempty"` + // Config for SHOT_CHANGE_DETECTION. + ShotChangeDetectionConfig *ShotChangeDetectionConfig `protobuf:"bytes,3,opt,name=shot_change_detection_config,json=shotChangeDetectionConfig" json:"shot_change_detection_config,omitempty"` + // Config for EXPLICIT_CONTENT_DETECTION. + ExplicitContentDetectionConfig *ExplicitContentDetectionConfig `protobuf:"bytes,4,opt,name=explicit_content_detection_config,json=explicitContentDetectionConfig" json:"explicit_content_detection_config,omitempty"` + // Config for SPEECH_TRANSCRIPTION. + SpeechTranscriptionConfig *SpeechTranscriptionConfig `protobuf:"bytes,6,opt,name=speech_transcription_config,json=speechTranscriptionConfig" json:"speech_transcription_config,omitempty"` + // Config for FACE_DETECTION. + FaceDetectionConfig *FaceConfig `protobuf:"bytes,7,opt,name=face_detection_config,json=faceDetectionConfig" json:"face_detection_config,omitempty"` +} + +func (m *VideoContext) Reset() { *m = VideoContext{} } +func (m *VideoContext) String() string { return proto.CompactTextString(m) } +func (*VideoContext) ProtoMessage() {} +func (*VideoContext) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *VideoContext) GetSegments() []*VideoSegment { + if m != nil { + return m.Segments + } + return nil +} + +func (m *VideoContext) GetLabelDetectionConfig() *LabelDetectionConfig { + if m != nil { + return m.LabelDetectionConfig + } + return nil +} + +func (m *VideoContext) GetShotChangeDetectionConfig() *ShotChangeDetectionConfig { + if m != nil { + return m.ShotChangeDetectionConfig + } + return nil +} + +func (m *VideoContext) GetExplicitContentDetectionConfig() *ExplicitContentDetectionConfig { + if m != nil { + return m.ExplicitContentDetectionConfig + } + return nil +} + +func (m *VideoContext) GetSpeechTranscriptionConfig() *SpeechTranscriptionConfig { + if m != nil { + return m.SpeechTranscriptionConfig + } + return nil +} + +func (m *VideoContext) GetFaceDetectionConfig() *FaceConfig { + if m != nil { + return m.FaceDetectionConfig + } + return nil +} + +// Config for LABEL_DETECTION. +type LabelDetectionConfig struct { + // What labels should be detected with LABEL_DETECTION, in addition to + // video-level labels or segment-level labels. + // If unspecified, defaults to `SHOT_MODE`. + LabelDetectionMode LabelDetectionMode `protobuf:"varint,1,opt,name=label_detection_mode,json=labelDetectionMode,enum=google.cloud.videointelligence.v1p1beta1.LabelDetectionMode" json:"label_detection_mode,omitempty"` + // Whether the video has been shot from a stationary (i.e. non-moving) camera. + // When set to true, might improve detection accuracy for moving objects. + // Should be used with `SHOT_AND_FRAME_MODE` enabled. + StationaryCamera bool `protobuf:"varint,2,opt,name=stationary_camera,json=stationaryCamera" json:"stationary_camera,omitempty"` + // Model to use for label detection. + // Supported values: "builtin/stable" (the default if unset) and + // "builtin/latest". + Model string `protobuf:"bytes,3,opt,name=model" json:"model,omitempty"` +} + +func (m *LabelDetectionConfig) Reset() { *m = LabelDetectionConfig{} } +func (m *LabelDetectionConfig) String() string { return proto.CompactTextString(m) } +func (*LabelDetectionConfig) ProtoMessage() {} +func (*LabelDetectionConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *LabelDetectionConfig) GetLabelDetectionMode() LabelDetectionMode { + if m != nil { + return m.LabelDetectionMode + } + return LabelDetectionMode_LABEL_DETECTION_MODE_UNSPECIFIED +} + +func (m *LabelDetectionConfig) GetStationaryCamera() bool { + if m != nil { + return m.StationaryCamera + } + return false +} + +func (m *LabelDetectionConfig) GetModel() string { + if m != nil { + return m.Model + } + return "" +} + +// Config for SHOT_CHANGE_DETECTION. +type ShotChangeDetectionConfig struct { + // Model to use for shot change detection. + // Supported values: "builtin/stable" (the default if unset) and + // "builtin/latest". + Model string `protobuf:"bytes,1,opt,name=model" json:"model,omitempty"` +} + +func (m *ShotChangeDetectionConfig) Reset() { *m = ShotChangeDetectionConfig{} } +func (m *ShotChangeDetectionConfig) String() string { return proto.CompactTextString(m) } +func (*ShotChangeDetectionConfig) ProtoMessage() {} +func (*ShotChangeDetectionConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *ShotChangeDetectionConfig) GetModel() string { + if m != nil { + return m.Model + } + return "" +} + +// Config for EXPLICIT_CONTENT_DETECTION. +type ExplicitContentDetectionConfig struct { + // Model to use for explicit content detection. + // Supported values: "builtin/stable" (the default if unset) and + // "builtin/latest". + Model string `protobuf:"bytes,1,opt,name=model" json:"model,omitempty"` +} + +func (m *ExplicitContentDetectionConfig) Reset() { *m = ExplicitContentDetectionConfig{} } +func (m *ExplicitContentDetectionConfig) String() string { return proto.CompactTextString(m) } +func (*ExplicitContentDetectionConfig) ProtoMessage() {} +func (*ExplicitContentDetectionConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *ExplicitContentDetectionConfig) GetModel() string { + if m != nil { + return m.Model + } + return "" +} + +// Config for FACE_DETECTION. +type FaceConfig struct { + // Model to use for face detection. + // Supported values: "builtin/stable" (the default if unset) and + // "builtin/latest". + Model string `protobuf:"bytes,1,opt,name=model" json:"model,omitempty"` + // Whether bounding boxes be included in the face annotation output. + IncludeBoundingBoxes bool `protobuf:"varint,2,opt,name=include_bounding_boxes,json=includeBoundingBoxes" json:"include_bounding_boxes,omitempty"` + // Whether to enable emotion detection. Ignored if 'include_bounding_boxes' is + // false. + IncludeEmotions bool `protobuf:"varint,4,opt,name=include_emotions,json=includeEmotions" json:"include_emotions,omitempty"` +} + +func (m *FaceConfig) Reset() { *m = FaceConfig{} } +func (m *FaceConfig) String() string { return proto.CompactTextString(m) } +func (*FaceConfig) ProtoMessage() {} +func (*FaceConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *FaceConfig) GetModel() string { + if m != nil { + return m.Model + } + return "" +} + +func (m *FaceConfig) GetIncludeBoundingBoxes() bool { + if m != nil { + return m.IncludeBoundingBoxes + } + return false +} + +func (m *FaceConfig) GetIncludeEmotions() bool { + if m != nil { + return m.IncludeEmotions + } + return false +} + +// Video segment. +type VideoSegment struct { + // Time-offset, relative to the beginning of the video, + // corresponding to the start of the segment (inclusive). + StartTimeOffset *google_protobuf3.Duration `protobuf:"bytes,1,opt,name=start_time_offset,json=startTimeOffset" json:"start_time_offset,omitempty"` + // Time-offset, relative to the beginning of the video, + // corresponding to the end of the segment (inclusive). + EndTimeOffset *google_protobuf3.Duration `protobuf:"bytes,2,opt,name=end_time_offset,json=endTimeOffset" json:"end_time_offset,omitempty"` +} + +func (m *VideoSegment) Reset() { *m = VideoSegment{} } +func (m *VideoSegment) String() string { return proto.CompactTextString(m) } +func (*VideoSegment) ProtoMessage() {} +func (*VideoSegment) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *VideoSegment) GetStartTimeOffset() *google_protobuf3.Duration { + if m != nil { + return m.StartTimeOffset + } + return nil +} + +func (m *VideoSegment) GetEndTimeOffset() *google_protobuf3.Duration { + if m != nil { + return m.EndTimeOffset + } + return nil +} + +// Video segment level annotation results for label detection. +type LabelSegment struct { + // Video segment where a label was detected. + Segment *VideoSegment `protobuf:"bytes,1,opt,name=segment" json:"segment,omitempty"` + // Confidence that the label is accurate. Range: [0, 1]. + Confidence float32 `protobuf:"fixed32,2,opt,name=confidence" json:"confidence,omitempty"` +} + +func (m *LabelSegment) Reset() { *m = LabelSegment{} } +func (m *LabelSegment) String() string { return proto.CompactTextString(m) } +func (*LabelSegment) ProtoMessage() {} +func (*LabelSegment) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *LabelSegment) GetSegment() *VideoSegment { + if m != nil { + return m.Segment + } + return nil +} + +func (m *LabelSegment) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + +// Video frame level annotation results for label detection. +type LabelFrame struct { + // Time-offset, relative to the beginning of the video, corresponding to the + // video frame for this location. + TimeOffset *google_protobuf3.Duration `protobuf:"bytes,1,opt,name=time_offset,json=timeOffset" json:"time_offset,omitempty"` + // Confidence that the label is accurate. Range: [0, 1]. + Confidence float32 `protobuf:"fixed32,2,opt,name=confidence" json:"confidence,omitempty"` +} + +func (m *LabelFrame) Reset() { *m = LabelFrame{} } +func (m *LabelFrame) String() string { return proto.CompactTextString(m) } +func (*LabelFrame) ProtoMessage() {} +func (*LabelFrame) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *LabelFrame) GetTimeOffset() *google_protobuf3.Duration { + if m != nil { + return m.TimeOffset + } + return nil +} + +func (m *LabelFrame) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + +// Detected entity from video analysis. +type Entity struct { + // Opaque entity ID. Some IDs may be available in + // [Google Knowledge Graph Search + // API](https://developers.google.com/knowledge-graph/). + EntityId string `protobuf:"bytes,1,opt,name=entity_id,json=entityId" json:"entity_id,omitempty"` + // Textual description, e.g. `Fixed-gear bicycle`. + Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` + // Language code for `description` in BCP-47 format. + LanguageCode string `protobuf:"bytes,3,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` +} + +func (m *Entity) Reset() { *m = Entity{} } +func (m *Entity) String() string { return proto.CompactTextString(m) } +func (*Entity) ProtoMessage() {} +func (*Entity) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *Entity) GetEntityId() string { + if m != nil { + return m.EntityId + } + return "" +} + +func (m *Entity) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *Entity) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +// Label annotation. +type LabelAnnotation struct { + // Detected entity. + Entity *Entity `protobuf:"bytes,1,opt,name=entity" json:"entity,omitempty"` + // Common categories for the detected entity. + // E.g. when the label is `Terrier` the category is likely `dog`. And in some + // cases there might be more than one categories e.g. `Terrier` could also be + // a `pet`. + CategoryEntities []*Entity `protobuf:"bytes,2,rep,name=category_entities,json=categoryEntities" json:"category_entities,omitempty"` + // All video segments where a label was detected. + Segments []*LabelSegment `protobuf:"bytes,3,rep,name=segments" json:"segments,omitempty"` + // All video frames where a label was detected. + Frames []*LabelFrame `protobuf:"bytes,4,rep,name=frames" json:"frames,omitempty"` +} + +func (m *LabelAnnotation) Reset() { *m = LabelAnnotation{} } +func (m *LabelAnnotation) String() string { return proto.CompactTextString(m) } +func (*LabelAnnotation) ProtoMessage() {} +func (*LabelAnnotation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *LabelAnnotation) GetEntity() *Entity { + if m != nil { + return m.Entity + } + return nil +} + +func (m *LabelAnnotation) GetCategoryEntities() []*Entity { + if m != nil { + return m.CategoryEntities + } + return nil +} + +func (m *LabelAnnotation) GetSegments() []*LabelSegment { + if m != nil { + return m.Segments + } + return nil +} + +func (m *LabelAnnotation) GetFrames() []*LabelFrame { + if m != nil { + return m.Frames + } + return nil +} + +// Video frame level annotation results for explicit content. +type ExplicitContentFrame struct { + // Time-offset, relative to the beginning of the video, corresponding to the + // video frame for this location. + TimeOffset *google_protobuf3.Duration `protobuf:"bytes,1,opt,name=time_offset,json=timeOffset" json:"time_offset,omitempty"` + // Likelihood of the pornography content.. + PornographyLikelihood Likelihood `protobuf:"varint,2,opt,name=pornography_likelihood,json=pornographyLikelihood,enum=google.cloud.videointelligence.v1p1beta1.Likelihood" json:"pornography_likelihood,omitempty"` +} + +func (m *ExplicitContentFrame) Reset() { *m = ExplicitContentFrame{} } +func (m *ExplicitContentFrame) String() string { return proto.CompactTextString(m) } +func (*ExplicitContentFrame) ProtoMessage() {} +func (*ExplicitContentFrame) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *ExplicitContentFrame) GetTimeOffset() *google_protobuf3.Duration { + if m != nil { + return m.TimeOffset + } + return nil +} + +func (m *ExplicitContentFrame) GetPornographyLikelihood() Likelihood { + if m != nil { + return m.PornographyLikelihood + } + return Likelihood_LIKELIHOOD_UNSPECIFIED +} + +// Explicit content annotation (based on per-frame visual signals only). +// If no explicit content has been detected in a frame, no annotations are +// present for that frame. +type ExplicitContentAnnotation struct { + // All video frames where explicit content was detected. + Frames []*ExplicitContentFrame `protobuf:"bytes,1,rep,name=frames" json:"frames,omitempty"` +} + +func (m *ExplicitContentAnnotation) Reset() { *m = ExplicitContentAnnotation{} } +func (m *ExplicitContentAnnotation) String() string { return proto.CompactTextString(m) } +func (*ExplicitContentAnnotation) ProtoMessage() {} +func (*ExplicitContentAnnotation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *ExplicitContentAnnotation) GetFrames() []*ExplicitContentFrame { + if m != nil { + return m.Frames + } + return nil +} + +// Normalized bounding box. +// The normalized vertex coordinates are relative to the original image. +// Range: [0, 1]. +type NormalizedBoundingBox struct { + // Left X coordinate. + Left float32 `protobuf:"fixed32,1,opt,name=left" json:"left,omitempty"` + // Top Y coordinate. + Top float32 `protobuf:"fixed32,2,opt,name=top" json:"top,omitempty"` + // Right X coordinate. + Right float32 `protobuf:"fixed32,3,opt,name=right" json:"right,omitempty"` + // Bottom Y coordinate. + Bottom float32 `protobuf:"fixed32,4,opt,name=bottom" json:"bottom,omitempty"` +} + +func (m *NormalizedBoundingBox) Reset() { *m = NormalizedBoundingBox{} } +func (m *NormalizedBoundingBox) String() string { return proto.CompactTextString(m) } +func (*NormalizedBoundingBox) ProtoMessage() {} +func (*NormalizedBoundingBox) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +func (m *NormalizedBoundingBox) GetLeft() float32 { + if m != nil { + return m.Left + } + return 0 +} + +func (m *NormalizedBoundingBox) GetTop() float32 { + if m != nil { + return m.Top + } + return 0 +} + +func (m *NormalizedBoundingBox) GetRight() float32 { + if m != nil { + return m.Right + } + return 0 +} + +func (m *NormalizedBoundingBox) GetBottom() float32 { + if m != nil { + return m.Bottom + } + return 0 +} + +// Video segment level annotation results for face detection. +type FaceSegment struct { + // Video segment where a face was detected. + Segment *VideoSegment `protobuf:"bytes,1,opt,name=segment" json:"segment,omitempty"` +} + +func (m *FaceSegment) Reset() { *m = FaceSegment{} } +func (m *FaceSegment) String() string { return proto.CompactTextString(m) } +func (*FaceSegment) ProtoMessage() {} +func (*FaceSegment) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +func (m *FaceSegment) GetSegment() *VideoSegment { + if m != nil { + return m.Segment + } + return nil +} + +// Video frame level annotation results for face detection. +type FaceDetectionFrame struct { + // Face attributes in a frame. + // There can be more than one attributes if the same face is detected in + // multiple locations within the current frame. + Attributes []*FaceDetectionAttribute `protobuf:"bytes,1,rep,name=attributes" json:"attributes,omitempty"` + // Time-offset, relative to the beginning of the video, + // corresponding to the video frame for this location. + TimeOffset *google_protobuf3.Duration `protobuf:"bytes,2,opt,name=time_offset,json=timeOffset" json:"time_offset,omitempty"` +} + +func (m *FaceDetectionFrame) Reset() { *m = FaceDetectionFrame{} } +func (m *FaceDetectionFrame) String() string { return proto.CompactTextString(m) } +func (*FaceDetectionFrame) ProtoMessage() {} +func (*FaceDetectionFrame) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +func (m *FaceDetectionFrame) GetAttributes() []*FaceDetectionAttribute { + if m != nil { + return m.Attributes + } + return nil +} + +func (m *FaceDetectionFrame) GetTimeOffset() *google_protobuf3.Duration { + if m != nil { + return m.TimeOffset + } + return nil +} + +// Face detection attribute. +type FaceDetectionAttribute struct { + // Normalized Bounding box. + NormalizedBoundingBox *NormalizedBoundingBox `protobuf:"bytes,1,opt,name=normalized_bounding_box,json=normalizedBoundingBox" json:"normalized_bounding_box,omitempty"` + // Emotion attributes. + Emotions []*EmotionAttribute `protobuf:"bytes,2,rep,name=emotions" json:"emotions,omitempty"` +} + +func (m *FaceDetectionAttribute) Reset() { *m = FaceDetectionAttribute{} } +func (m *FaceDetectionAttribute) String() string { return proto.CompactTextString(m) } +func (*FaceDetectionAttribute) ProtoMessage() {} +func (*FaceDetectionAttribute) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } + +func (m *FaceDetectionAttribute) GetNormalizedBoundingBox() *NormalizedBoundingBox { + if m != nil { + return m.NormalizedBoundingBox + } + return nil +} + +func (m *FaceDetectionAttribute) GetEmotions() []*EmotionAttribute { + if m != nil { + return m.Emotions + } + return nil +} + +// Emotion attribute. +type EmotionAttribute struct { + // Emotion entry. + Emotion Emotion `protobuf:"varint,1,opt,name=emotion,enum=google.cloud.videointelligence.v1p1beta1.Emotion" json:"emotion,omitempty"` + // Confidence score. + Score float32 `protobuf:"fixed32,2,opt,name=score" json:"score,omitempty"` +} + +func (m *EmotionAttribute) Reset() { *m = EmotionAttribute{} } +func (m *EmotionAttribute) String() string { return proto.CompactTextString(m) } +func (*EmotionAttribute) ProtoMessage() {} +func (*EmotionAttribute) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } + +func (m *EmotionAttribute) GetEmotion() Emotion { + if m != nil { + return m.Emotion + } + return Emotion_EMOTION_UNSPECIFIED +} + +func (m *EmotionAttribute) GetScore() float32 { + if m != nil { + return m.Score + } + return 0 +} + +// Face detection annotation. +type FaceDetectionAnnotation struct { + // All video segments where a face was detected. + Segments []*FaceSegment `protobuf:"bytes,1,rep,name=segments" json:"segments,omitempty"` + // All video frames where a face was detected. + Frames []*FaceDetectionFrame `protobuf:"bytes,2,rep,name=frames" json:"frames,omitempty"` +} + +func (m *FaceDetectionAnnotation) Reset() { *m = FaceDetectionAnnotation{} } +func (m *FaceDetectionAnnotation) String() string { return proto.CompactTextString(m) } +func (*FaceDetectionAnnotation) ProtoMessage() {} +func (*FaceDetectionAnnotation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } + +func (m *FaceDetectionAnnotation) GetSegments() []*FaceSegment { + if m != nil { + return m.Segments + } + return nil +} + +func (m *FaceDetectionAnnotation) GetFrames() []*FaceDetectionFrame { + if m != nil { + return m.Frames + } + return nil +} + +// Annotation results for a single video. +type VideoAnnotationResults struct { + // Video file location in + // [Google Cloud Storage](https://cloud.google.com/storage/). + InputUri string `protobuf:"bytes,1,opt,name=input_uri,json=inputUri" json:"input_uri,omitempty"` + // Label annotations on video level or user specified segment level. + // There is exactly one element for each unique label. + SegmentLabelAnnotations []*LabelAnnotation `protobuf:"bytes,2,rep,name=segment_label_annotations,json=segmentLabelAnnotations" json:"segment_label_annotations,omitempty"` + // Label annotations on shot level. + // There is exactly one element for each unique label. + ShotLabelAnnotations []*LabelAnnotation `protobuf:"bytes,3,rep,name=shot_label_annotations,json=shotLabelAnnotations" json:"shot_label_annotations,omitempty"` + // Label annotations on frame level. + // There is exactly one element for each unique label. + FrameLabelAnnotations []*LabelAnnotation `protobuf:"bytes,4,rep,name=frame_label_annotations,json=frameLabelAnnotations" json:"frame_label_annotations,omitempty"` + // Face detection annotations. + FaceDetectionAnnotations []*FaceDetectionAnnotation `protobuf:"bytes,13,rep,name=face_detection_annotations,json=faceDetectionAnnotations" json:"face_detection_annotations,omitempty"` + // Shot annotations. Each shot is represented as a video segment. + ShotAnnotations []*VideoSegment `protobuf:"bytes,6,rep,name=shot_annotations,json=shotAnnotations" json:"shot_annotations,omitempty"` + // Explicit content annotation. + ExplicitAnnotation *ExplicitContentAnnotation `protobuf:"bytes,7,opt,name=explicit_annotation,json=explicitAnnotation" json:"explicit_annotation,omitempty"` + // Speech transcription. + SpeechTranscriptions []*SpeechTranscription `protobuf:"bytes,11,rep,name=speech_transcriptions,json=speechTranscriptions" json:"speech_transcriptions,omitempty"` + // If set, indicates an error. Note that for a single `AnnotateVideoRequest` + // some videos may succeed and some may fail. + Error *google_rpc.Status `protobuf:"bytes,9,opt,name=error" json:"error,omitempty"` +} + +func (m *VideoAnnotationResults) Reset() { *m = VideoAnnotationResults{} } +func (m *VideoAnnotationResults) String() string { return proto.CompactTextString(m) } +func (*VideoAnnotationResults) ProtoMessage() {} +func (*VideoAnnotationResults) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } + +func (m *VideoAnnotationResults) GetInputUri() string { + if m != nil { + return m.InputUri + } + return "" +} + +func (m *VideoAnnotationResults) GetSegmentLabelAnnotations() []*LabelAnnotation { + if m != nil { + return m.SegmentLabelAnnotations + } + return nil +} + +func (m *VideoAnnotationResults) GetShotLabelAnnotations() []*LabelAnnotation { + if m != nil { + return m.ShotLabelAnnotations + } + return nil +} + +func (m *VideoAnnotationResults) GetFrameLabelAnnotations() []*LabelAnnotation { + if m != nil { + return m.FrameLabelAnnotations + } + return nil +} + +func (m *VideoAnnotationResults) GetFaceDetectionAnnotations() []*FaceDetectionAnnotation { + if m != nil { + return m.FaceDetectionAnnotations + } + return nil +} + +func (m *VideoAnnotationResults) GetShotAnnotations() []*VideoSegment { + if m != nil { + return m.ShotAnnotations + } + return nil +} + +func (m *VideoAnnotationResults) GetExplicitAnnotation() *ExplicitContentAnnotation { + if m != nil { + return m.ExplicitAnnotation + } + return nil +} + +func (m *VideoAnnotationResults) GetSpeechTranscriptions() []*SpeechTranscription { + if m != nil { + return m.SpeechTranscriptions + } + return nil +} + +func (m *VideoAnnotationResults) GetError() *google_rpc.Status { + if m != nil { + return m.Error + } + return nil +} + +// Video annotation response. Included in the `response` +// field of the `Operation` returned by the `GetOperation` +// call of the `google::longrunning::Operations` service. +type AnnotateVideoResponse struct { + // Annotation results for all videos specified in `AnnotateVideoRequest`. + AnnotationResults []*VideoAnnotationResults `protobuf:"bytes,1,rep,name=annotation_results,json=annotationResults" json:"annotation_results,omitempty"` +} + +func (m *AnnotateVideoResponse) Reset() { *m = AnnotateVideoResponse{} } +func (m *AnnotateVideoResponse) String() string { return proto.CompactTextString(m) } +func (*AnnotateVideoResponse) ProtoMessage() {} +func (*AnnotateVideoResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } + +func (m *AnnotateVideoResponse) GetAnnotationResults() []*VideoAnnotationResults { + if m != nil { + return m.AnnotationResults + } + return nil +} + +// Annotation progress for a single video. +type VideoAnnotationProgress struct { + // Video file location in + // [Google Cloud Storage](https://cloud.google.com/storage/). + InputUri string `protobuf:"bytes,1,opt,name=input_uri,json=inputUri" json:"input_uri,omitempty"` + // Approximate percentage processed thus far. + // Guaranteed to be 100 when fully processed. + ProgressPercent int32 `protobuf:"varint,2,opt,name=progress_percent,json=progressPercent" json:"progress_percent,omitempty"` + // Time when the request was received. + StartTime *google_protobuf4.Timestamp `protobuf:"bytes,3,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // Time of the most recent update. + UpdateTime *google_protobuf4.Timestamp `protobuf:"bytes,4,opt,name=update_time,json=updateTime" json:"update_time,omitempty"` +} + +func (m *VideoAnnotationProgress) Reset() { *m = VideoAnnotationProgress{} } +func (m *VideoAnnotationProgress) String() string { return proto.CompactTextString(m) } +func (*VideoAnnotationProgress) ProtoMessage() {} +func (*VideoAnnotationProgress) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } + +func (m *VideoAnnotationProgress) GetInputUri() string { + if m != nil { + return m.InputUri + } + return "" +} + +func (m *VideoAnnotationProgress) GetProgressPercent() int32 { + if m != nil { + return m.ProgressPercent + } + return 0 +} + +func (m *VideoAnnotationProgress) GetStartTime() *google_protobuf4.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *VideoAnnotationProgress) GetUpdateTime() *google_protobuf4.Timestamp { + if m != nil { + return m.UpdateTime + } + return nil +} + +// Video annotation progress. Included in the `metadata` +// field of the `Operation` returned by the `GetOperation` +// call of the `google::longrunning::Operations` service. +type AnnotateVideoProgress struct { + // Progress metadata for all videos specified in `AnnotateVideoRequest`. + AnnotationProgress []*VideoAnnotationProgress `protobuf:"bytes,1,rep,name=annotation_progress,json=annotationProgress" json:"annotation_progress,omitempty"` +} + +func (m *AnnotateVideoProgress) Reset() { *m = AnnotateVideoProgress{} } +func (m *AnnotateVideoProgress) String() string { return proto.CompactTextString(m) } +func (*AnnotateVideoProgress) ProtoMessage() {} +func (*AnnotateVideoProgress) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } + +func (m *AnnotateVideoProgress) GetAnnotationProgress() []*VideoAnnotationProgress { + if m != nil { + return m.AnnotationProgress + } + return nil +} + +// Config for SPEECH_TRANSCRIPTION. +type SpeechTranscriptionConfig struct { + // *Required* The language of the supplied audio as a + // [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag. + // Example: "en-US". + // See [Language Support](https://cloud.google.com/speech/docs/languages) + // for a list of the currently supported language codes. + LanguageCode string `protobuf:"bytes,1,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` + // *Optional* Maximum number of recognition hypotheses to be returned. + // Specifically, the maximum number of `SpeechRecognitionAlternative` messages + // within each `SpeechRecognitionResult`. The server may return fewer than + // `max_alternatives`. Valid values are `0`-`30`. A value of `0` or `1` will + // return a maximum of one. If omitted, will return a maximum of one. + MaxAlternatives int32 `protobuf:"varint,2,opt,name=max_alternatives,json=maxAlternatives" json:"max_alternatives,omitempty"` + // *Optional* If set to `true`, the server will attempt to filter out + // profanities, replacing all but the initial character in each filtered word + // with asterisks, e.g. "f***". If set to `false` or omitted, profanities + // won't be filtered out. + FilterProfanity bool `protobuf:"varint,3,opt,name=filter_profanity,json=filterProfanity" json:"filter_profanity,omitempty"` + // *Optional* A means to provide context to assist the speech recognition. + SpeechContexts []*SpeechContext `protobuf:"bytes,4,rep,name=speech_contexts,json=speechContexts" json:"speech_contexts,omitempty"` + // *Optional* For file formats, such as MXF or MKV, supporting multiple audio + // tracks, specify up to two tracks. Default: track 0. + AudioTracks []int32 `protobuf:"varint,6,rep,packed,name=audio_tracks,json=audioTracks" json:"audio_tracks,omitempty"` +} + +func (m *SpeechTranscriptionConfig) Reset() { *m = SpeechTranscriptionConfig{} } +func (m *SpeechTranscriptionConfig) String() string { return proto.CompactTextString(m) } +func (*SpeechTranscriptionConfig) ProtoMessage() {} +func (*SpeechTranscriptionConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } + +func (m *SpeechTranscriptionConfig) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +func (m *SpeechTranscriptionConfig) GetMaxAlternatives() int32 { + if m != nil { + return m.MaxAlternatives + } + return 0 +} + +func (m *SpeechTranscriptionConfig) GetFilterProfanity() bool { + if m != nil { + return m.FilterProfanity + } + return false +} + +func (m *SpeechTranscriptionConfig) GetSpeechContexts() []*SpeechContext { + if m != nil { + return m.SpeechContexts + } + return nil +} + +func (m *SpeechTranscriptionConfig) GetAudioTracks() []int32 { + if m != nil { + return m.AudioTracks + } + return nil +} + +// Provides "hints" to the speech recognizer to favor specific words and phrases +// in the results. +type SpeechContext struct { + // *Optional* A list of strings containing words and phrases "hints" so that + // the speech recognition is more likely to recognize them. This can be used + // to improve the accuracy for specific words and phrases, for example, if + // specific commands are typically spoken by the user. This can also be used + // to add additional words to the vocabulary of the recognizer. See + // [usage limits](https://cloud.google.com/speech/limits#content). + Phrases []string `protobuf:"bytes,1,rep,name=phrases" json:"phrases,omitempty"` +} + +func (m *SpeechContext) Reset() { *m = SpeechContext{} } +func (m *SpeechContext) String() string { return proto.CompactTextString(m) } +func (*SpeechContext) ProtoMessage() {} +func (*SpeechContext) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} } + +func (m *SpeechContext) GetPhrases() []string { + if m != nil { + return m.Phrases + } + return nil +} + +// A speech recognition result corresponding to a portion of the audio. +type SpeechTranscription struct { + // Output only. May contain one or more recognition hypotheses (up to the + // maximum specified in `max_alternatives`). + // These alternatives are ordered in terms of accuracy, with the top (first) + // alternative being the most probable, as ranked by the recognizer. + Alternatives []*SpeechRecognitionAlternative `protobuf:"bytes,1,rep,name=alternatives" json:"alternatives,omitempty"` +} + +func (m *SpeechTranscription) Reset() { *m = SpeechTranscription{} } +func (m *SpeechTranscription) String() string { return proto.CompactTextString(m) } +func (*SpeechTranscription) ProtoMessage() {} +func (*SpeechTranscription) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } + +func (m *SpeechTranscription) GetAlternatives() []*SpeechRecognitionAlternative { + if m != nil { + return m.Alternatives + } + return nil +} + +// Alternative hypotheses (a.k.a. n-best list). +type SpeechRecognitionAlternative struct { + // Output only. Transcript text representing the words that the user spoke. + Transcript string `protobuf:"bytes,1,opt,name=transcript" json:"transcript,omitempty"` + // Output only. The confidence estimate between 0.0 and 1.0. A higher number + // indicates an estimated greater likelihood that the recognized words are + // correct. This field is typically provided only for the top hypothesis, and + // only for `is_final=true` results. Clients should not rely on the + // `confidence` field as it is not guaranteed to be accurate or consistent. + // The default of 0.0 is a sentinel value indicating `confidence` was not set. + Confidence float32 `protobuf:"fixed32,2,opt,name=confidence" json:"confidence,omitempty"` + // Output only. A list of word-specific information for each recognized word. + Words []*WordInfo `protobuf:"bytes,3,rep,name=words" json:"words,omitempty"` +} + +func (m *SpeechRecognitionAlternative) Reset() { *m = SpeechRecognitionAlternative{} } +func (m *SpeechRecognitionAlternative) String() string { return proto.CompactTextString(m) } +func (*SpeechRecognitionAlternative) ProtoMessage() {} +func (*SpeechRecognitionAlternative) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} } + +func (m *SpeechRecognitionAlternative) GetTranscript() string { + if m != nil { + return m.Transcript + } + return "" +} + +func (m *SpeechRecognitionAlternative) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + +func (m *SpeechRecognitionAlternative) GetWords() []*WordInfo { + if m != nil { + return m.Words + } + return nil +} + +// Word-specific information for recognized words. Word information is only +// included in the response when certain request parameters are set, such +// as `enable_word_time_offsets`. +type WordInfo struct { + // Output only. Time offset relative to the beginning of the audio, and + // corresponding to the start of the spoken word. This field is only set if + // `enable_word_time_offsets=true` and only in the top hypothesis. This is an + // experimental feature and the accuracy of the time offset can vary. + StartTime *google_protobuf3.Duration `protobuf:"bytes,1,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // Output only. Time offset relative to the beginning of the audio, and + // corresponding to the end of the spoken word. This field is only set if + // `enable_word_time_offsets=true` and only in the top hypothesis. This is an + // experimental feature and the accuracy of the time offset can vary. + EndTime *google_protobuf3.Duration `protobuf:"bytes,2,opt,name=end_time,json=endTime" json:"end_time,omitempty"` + // Output only. The word corresponding to this set of information. + Word string `protobuf:"bytes,3,opt,name=word" json:"word,omitempty"` +} + +func (m *WordInfo) Reset() { *m = WordInfo{} } +func (m *WordInfo) String() string { return proto.CompactTextString(m) } +func (*WordInfo) ProtoMessage() {} +func (*WordInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} } + +func (m *WordInfo) GetStartTime() *google_protobuf3.Duration { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *WordInfo) GetEndTime() *google_protobuf3.Duration { + if m != nil { + return m.EndTime + } + return nil +} + +func (m *WordInfo) GetWord() string { + if m != nil { + return m.Word + } + return "" +} + +func init() { + proto.RegisterType((*AnnotateVideoRequest)(nil), "google.cloud.videointelligence.v1p1beta1.AnnotateVideoRequest") + proto.RegisterType((*VideoContext)(nil), "google.cloud.videointelligence.v1p1beta1.VideoContext") + proto.RegisterType((*LabelDetectionConfig)(nil), "google.cloud.videointelligence.v1p1beta1.LabelDetectionConfig") + proto.RegisterType((*ShotChangeDetectionConfig)(nil), "google.cloud.videointelligence.v1p1beta1.ShotChangeDetectionConfig") + proto.RegisterType((*ExplicitContentDetectionConfig)(nil), "google.cloud.videointelligence.v1p1beta1.ExplicitContentDetectionConfig") + proto.RegisterType((*FaceConfig)(nil), "google.cloud.videointelligence.v1p1beta1.FaceConfig") + proto.RegisterType((*VideoSegment)(nil), "google.cloud.videointelligence.v1p1beta1.VideoSegment") + proto.RegisterType((*LabelSegment)(nil), "google.cloud.videointelligence.v1p1beta1.LabelSegment") + proto.RegisterType((*LabelFrame)(nil), "google.cloud.videointelligence.v1p1beta1.LabelFrame") + proto.RegisterType((*Entity)(nil), "google.cloud.videointelligence.v1p1beta1.Entity") + proto.RegisterType((*LabelAnnotation)(nil), "google.cloud.videointelligence.v1p1beta1.LabelAnnotation") + proto.RegisterType((*ExplicitContentFrame)(nil), "google.cloud.videointelligence.v1p1beta1.ExplicitContentFrame") + proto.RegisterType((*ExplicitContentAnnotation)(nil), "google.cloud.videointelligence.v1p1beta1.ExplicitContentAnnotation") + proto.RegisterType((*NormalizedBoundingBox)(nil), "google.cloud.videointelligence.v1p1beta1.NormalizedBoundingBox") + proto.RegisterType((*FaceSegment)(nil), "google.cloud.videointelligence.v1p1beta1.FaceSegment") + proto.RegisterType((*FaceDetectionFrame)(nil), "google.cloud.videointelligence.v1p1beta1.FaceDetectionFrame") + proto.RegisterType((*FaceDetectionAttribute)(nil), "google.cloud.videointelligence.v1p1beta1.FaceDetectionAttribute") + proto.RegisterType((*EmotionAttribute)(nil), "google.cloud.videointelligence.v1p1beta1.EmotionAttribute") + proto.RegisterType((*FaceDetectionAnnotation)(nil), "google.cloud.videointelligence.v1p1beta1.FaceDetectionAnnotation") + proto.RegisterType((*VideoAnnotationResults)(nil), "google.cloud.videointelligence.v1p1beta1.VideoAnnotationResults") + proto.RegisterType((*AnnotateVideoResponse)(nil), "google.cloud.videointelligence.v1p1beta1.AnnotateVideoResponse") + proto.RegisterType((*VideoAnnotationProgress)(nil), "google.cloud.videointelligence.v1p1beta1.VideoAnnotationProgress") + proto.RegisterType((*AnnotateVideoProgress)(nil), "google.cloud.videointelligence.v1p1beta1.AnnotateVideoProgress") + proto.RegisterType((*SpeechTranscriptionConfig)(nil), "google.cloud.videointelligence.v1p1beta1.SpeechTranscriptionConfig") + proto.RegisterType((*SpeechContext)(nil), "google.cloud.videointelligence.v1p1beta1.SpeechContext") + proto.RegisterType((*SpeechTranscription)(nil), "google.cloud.videointelligence.v1p1beta1.SpeechTranscription") + proto.RegisterType((*SpeechRecognitionAlternative)(nil), "google.cloud.videointelligence.v1p1beta1.SpeechRecognitionAlternative") + proto.RegisterType((*WordInfo)(nil), "google.cloud.videointelligence.v1p1beta1.WordInfo") + proto.RegisterEnum("google.cloud.videointelligence.v1p1beta1.Feature", Feature_name, Feature_value) + proto.RegisterEnum("google.cloud.videointelligence.v1p1beta1.LabelDetectionMode", LabelDetectionMode_name, LabelDetectionMode_value) + proto.RegisterEnum("google.cloud.videointelligence.v1p1beta1.Likelihood", Likelihood_name, Likelihood_value) + proto.RegisterEnum("google.cloud.videointelligence.v1p1beta1.Emotion", Emotion_name, Emotion_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for VideoIntelligenceService service + +type VideoIntelligenceServiceClient interface { + // Performs asynchronous video annotation. Progress and results can be + // retrieved through the `google.longrunning.Operations` interface. + // `Operation.metadata` contains `AnnotateVideoProgress` (progress). + // `Operation.response` contains `AnnotateVideoResponse` (results). + AnnotateVideo(ctx context.Context, in *AnnotateVideoRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) +} + +type videoIntelligenceServiceClient struct { + cc *grpc.ClientConn +} + +func NewVideoIntelligenceServiceClient(cc *grpc.ClientConn) VideoIntelligenceServiceClient { + return &videoIntelligenceServiceClient{cc} +} + +func (c *videoIntelligenceServiceClient) AnnotateVideo(ctx context.Context, in *AnnotateVideoRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.videointelligence.v1p1beta1.VideoIntelligenceService/AnnotateVideo", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for VideoIntelligenceService service + +type VideoIntelligenceServiceServer interface { + // Performs asynchronous video annotation. Progress and results can be + // retrieved through the `google.longrunning.Operations` interface. + // `Operation.metadata` contains `AnnotateVideoProgress` (progress). + // `Operation.response` contains `AnnotateVideoResponse` (results). + AnnotateVideo(context.Context, *AnnotateVideoRequest) (*google_longrunning.Operation, error) +} + +func RegisterVideoIntelligenceServiceServer(s *grpc.Server, srv VideoIntelligenceServiceServer) { + s.RegisterService(&_VideoIntelligenceService_serviceDesc, srv) +} + +func _VideoIntelligenceService_AnnotateVideo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AnnotateVideoRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VideoIntelligenceServiceServer).AnnotateVideo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.videointelligence.v1p1beta1.VideoIntelligenceService/AnnotateVideo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VideoIntelligenceServiceServer).AnnotateVideo(ctx, req.(*AnnotateVideoRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _VideoIntelligenceService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.videointelligence.v1p1beta1.VideoIntelligenceService", + HandlerType: (*VideoIntelligenceServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "AnnotateVideo", + Handler: _VideoIntelligenceService_AnnotateVideo_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/videointelligence/v1p1beta1/video_intelligence.proto", +} + +func init() { + proto.RegisterFile("google/cloud/videointelligence/v1p1beta1/video_intelligence.proto", fileDescriptor0) +} + +var fileDescriptor0 = []byte{ + // 2237 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x59, 0x4b, 0x6f, 0x23, 0x59, + 0xf5, 0xff, 0x97, 0x1d, 0x3b, 0xf1, 0x71, 0x12, 0xbb, 0x6f, 0x5e, 0x4e, 0xa6, 0x1f, 0x99, 0x9a, + 0x3f, 0x52, 0xba, 0x41, 0x0e, 0x09, 0xcd, 0xc0, 0xf4, 0x0c, 0x03, 0x15, 0xbb, 0xd2, 0xb1, 0x26, + 0xb1, 0xcd, 0x2d, 0x27, 0xd0, 0xd0, 0xa8, 0xa6, 0x52, 0x75, 0xed, 0x14, 0x5d, 0xae, 0xeb, 0xa9, + 0x2a, 0xf7, 0x74, 0xb3, 0x61, 0x60, 0x58, 0x8c, 0x84, 0xc4, 0x66, 0x84, 0x84, 0xc4, 0x86, 0x25, + 0x62, 0x39, 0x5f, 0x00, 0x09, 0xb1, 0x81, 0x2d, 0x2b, 0x24, 0x36, 0x48, 0xb0, 0xe0, 0x5b, 0xa0, + 0xfb, 0x28, 0xbb, 0xfc, 0x48, 0x27, 0x4e, 0x8b, 0x9d, 0xef, 0x39, 0xf7, 0xfe, 0xce, 0xe3, 0x9e, + 0x47, 0x9d, 0x6b, 0xd0, 0x3a, 0x94, 0x76, 0x3c, 0xb2, 0x6b, 0x7b, 0xb4, 0xef, 0xec, 0x3e, 0x77, + 0x1d, 0x42, 0x5d, 0x3f, 0x22, 0x9e, 0xe7, 0x76, 0x88, 0x6f, 0x93, 0xdd, 0xe7, 0x7b, 0xbd, 0xbd, + 0x73, 0x12, 0x59, 0x7b, 0x82, 0x67, 0x26, 0x99, 0xe5, 0x5e, 0x40, 0x23, 0x8a, 0x76, 0x04, 0x44, + 0x99, 0x43, 0x94, 0x27, 0x20, 0xca, 0x03, 0x88, 0xad, 0xdb, 0x52, 0x98, 0xd5, 0x73, 0x77, 0x2d, + 0xdf, 0xa7, 0x91, 0x15, 0xb9, 0xd4, 0x0f, 0x05, 0xce, 0xd6, 0x5b, 0x92, 0xeb, 0x51, 0xbf, 0x13, + 0xf4, 0x7d, 0xdf, 0xf5, 0x3b, 0xbb, 0xb4, 0x47, 0x82, 0x91, 0x4d, 0x77, 0xe5, 0x26, 0xbe, 0x3a, + 0xef, 0xb7, 0x77, 0x9d, 0xbe, 0xd8, 0x20, 0xf9, 0xf7, 0xc6, 0xf9, 0x91, 0xdb, 0x25, 0x61, 0x64, + 0x75, 0x7b, 0x72, 0xc3, 0x86, 0xdc, 0x10, 0xf4, 0xec, 0xdd, 0x30, 0xb2, 0xa2, 0xbe, 0x44, 0x56, + 0xff, 0x9c, 0x82, 0x55, 0x4d, 0x28, 0x45, 0xce, 0x98, 0x11, 0x98, 0x7c, 0xd4, 0x27, 0x61, 0x84, + 0xde, 0x80, 0x9c, 0xeb, 0xf7, 0xfa, 0x91, 0xd9, 0x0f, 0xdc, 0x92, 0xb2, 0xad, 0xec, 0xe4, 0xf0, + 0x02, 0x27, 0x9c, 0x06, 0x2e, 0x7a, 0x0b, 0x96, 0x04, 0xd3, 0xa6, 0x7e, 0x44, 0xfc, 0xa8, 0x94, + 0xdd, 0x56, 0x76, 0x16, 0xf1, 0x22, 0x27, 0x56, 0x04, 0x0d, 0x9d, 0xc0, 0x42, 0x9b, 0x58, 0x51, + 0x3f, 0x20, 0x61, 0x29, 0xb5, 0x9d, 0xde, 0x59, 0xde, 0xdf, 0x2b, 0x5f, 0xd7, 0x69, 0xe5, 0x43, + 0x71, 0x12, 0x0f, 0x20, 0xd0, 0x0f, 0x61, 0x49, 0x5c, 0x06, 0x97, 0xf9, 0x22, 0x2a, 0xa5, 0xb7, + 0x95, 0x9d, 0xfc, 0xfe, 0xdb, 0xd7, 0xc7, 0xe4, 0xf6, 0x55, 0xc4, 0x69, 0xbc, 0xf8, 0x3c, 0xb1, + 0x42, 0x77, 0x00, 0x68, 0x3f, 0x8a, 0xcd, 0x9d, 0xe3, 0xe6, 0xe6, 0x04, 0x85, 0xd9, 0x7b, 0x0f, + 0xf2, 0x1e, 0xb5, 0xb9, 0xc7, 0x4d, 0xd7, 0x29, 0x65, 0x38, 0x1f, 0x62, 0x52, 0xcd, 0x51, 0xff, + 0x9d, 0x81, 0xc5, 0x24, 0x3c, 0xc2, 0xb0, 0x10, 0x92, 0x4e, 0x97, 0xf8, 0x51, 0x58, 0x52, 0xb6, + 0xd3, 0x37, 0x50, 0xd4, 0x10, 0xc7, 0xf1, 0x00, 0x07, 0x45, 0xb0, 0xee, 0x59, 0xe7, 0xc4, 0x33, + 0x1d, 0x12, 0x11, 0x9b, 0x2b, 0x63, 0x53, 0xbf, 0xed, 0x76, 0x4a, 0x29, 0xee, 0x8a, 0xf7, 0xaf, + 0x2f, 0xe1, 0x98, 0xe1, 0x54, 0x63, 0x98, 0x0a, 0x47, 0xc1, 0xab, 0xde, 0x14, 0x2a, 0xfa, 0x85, + 0x02, 0xb7, 0xc3, 0x0b, 0x1a, 0x99, 0xf6, 0x85, 0xe5, 0x77, 0xc8, 0xa4, 0x70, 0x71, 0x0f, 0x95, + 0xeb, 0x0b, 0x37, 0x2e, 0x68, 0x54, 0xe1, 0x60, 0xe3, 0x1a, 0x6c, 0x86, 0x97, 0xb1, 0xd0, 0xe7, + 0x0a, 0xbc, 0x49, 0x5e, 0xf4, 0x3c, 0xd7, 0x76, 0x07, 0x61, 0x37, 0xa9, 0xcb, 0x1c, 0xd7, 0xe5, + 0xe8, 0xfa, 0xba, 0xe8, 0x12, 0x52, 0x06, 0xed, 0xb8, 0x42, 0x77, 0xc9, 0x2b, 0xf9, 0xe8, 0x53, + 0x05, 0xde, 0x08, 0x7b, 0x84, 0xd8, 0x17, 0x66, 0x14, 0x58, 0x7e, 0x68, 0x07, 0x6e, 0x2f, 0xa9, + 0x4f, 0x76, 0x66, 0xdf, 0x70, 0xb0, 0x56, 0x12, 0x6b, 0xe0, 0x9b, 0xcb, 0x58, 0xe8, 0x02, 0xd6, + 0xda, 0x96, 0x3d, 0xe5, 0x6a, 0xe6, 0xb9, 0xf8, 0x87, 0x33, 0xa4, 0x9d, 0x65, 0x13, 0x29, 0x6f, + 0x85, 0x41, 0x8e, 0xd9, 0xab, 0xfe, 0x45, 0x81, 0xd5, 0x69, 0xb1, 0x83, 0x7c, 0x58, 0x1d, 0x8f, + 0xcd, 0x2e, 0x75, 0x08, 0xaf, 0x1c, 0xcb, 0xfb, 0xef, 0xdd, 0x34, 0x32, 0x4f, 0xa8, 0x43, 0x30, + 0xf2, 0x26, 0x68, 0xe8, 0xcb, 0x70, 0x2b, 0x14, 0x85, 0xd4, 0x0a, 0x5e, 0x9a, 0xb6, 0xd5, 0x25, + 0x81, 0xc5, 0xd3, 0x60, 0x01, 0x17, 0x87, 0x8c, 0x0a, 0xa7, 0xa3, 0x55, 0xc8, 0x30, 0x65, 0x3c, + 0x1e, 0xaa, 0x39, 0x2c, 0x16, 0xea, 0x1e, 0x6c, 0x5e, 0x1a, 0x89, 0xc3, 0x23, 0x4a, 0xf2, 0xc8, + 0xdb, 0x70, 0xf7, 0xd5, 0x01, 0x73, 0xc9, 0xb9, 0x4f, 0x15, 0x80, 0xa1, 0x6b, 0xa7, 0x6f, 0x42, + 0x0f, 0x61, 0xdd, 0xf5, 0x6d, 0xaf, 0xef, 0x10, 0xf3, 0x9c, 0xf6, 0x7d, 0xc7, 0xf5, 0x3b, 0xe6, + 0x39, 0x7d, 0xc1, 0xab, 0x27, 0xb3, 0x6b, 0x55, 0x72, 0x0f, 0x24, 0xf3, 0x80, 0xf1, 0xd0, 0x7d, + 0x28, 0xc6, 0xa7, 0x48, 0x97, 0xf2, 0xa6, 0xc1, 0xb3, 0x60, 0x01, 0x17, 0x24, 0x5d, 0x97, 0x64, + 0xf5, 0x37, 0x8a, 0x2c, 0x52, 0xb2, 0xb4, 0x20, 0x9d, 0x3b, 0x31, 0x88, 0x4c, 0xd6, 0x2e, 0x4c, + 0xda, 0x6e, 0x87, 0x24, 0xe2, 0x3a, 0xe5, 0xf7, 0x37, 0xe3, 0x1b, 0x8b, 0x5b, 0x4a, 0xb9, 0x2a, + 0x5b, 0x0e, 0x2e, 0xf0, 0x33, 0x2d, 0xb7, 0x4b, 0x1a, 0xfc, 0x04, 0xd2, 0xa0, 0x40, 0x7c, 0x67, + 0x04, 0x24, 0x75, 0x15, 0xc8, 0x12, 0xf1, 0x9d, 0x21, 0x84, 0xfa, 0x89, 0x02, 0x8b, 0xfc, 0xe6, + 0x63, 0xd5, 0x9a, 0x30, 0x2f, 0xeb, 0x9e, 0x54, 0xe8, 0xa6, 0xe5, 0x33, 0x86, 0x41, 0x77, 0x01, + 0x78, 0x56, 0x38, 0x6c, 0x37, 0x57, 0x30, 0x85, 0x13, 0x14, 0xf5, 0x02, 0x80, 0x6b, 0x70, 0x18, + 0x58, 0x5d, 0x82, 0x1e, 0x41, 0x7e, 0x26, 0xa7, 0x40, 0x34, 0xf4, 0xc7, 0x55, 0x92, 0x3c, 0xc8, + 0xea, 0x7e, 0xe4, 0x46, 0x2f, 0x59, 0x93, 0x25, 0xfc, 0x17, 0xeb, 0x2a, 0xb2, 0xc9, 0x0a, 0x42, + 0xcd, 0x41, 0xdb, 0x90, 0x77, 0xc8, 0x20, 0xd5, 0x39, 0x4e, 0x0e, 0x27, 0x49, 0xac, 0x0d, 0x7b, + 0x96, 0xdf, 0xe9, 0x5b, 0x1d, 0x62, 0xda, 0x2c, 0xdb, 0x44, 0x7c, 0x2f, 0xc6, 0xc4, 0x0a, 0x75, + 0x88, 0xfa, 0x8f, 0x14, 0x14, 0xb8, 0x61, 0xda, 0xe0, 0xdb, 0x03, 0x1d, 0x41, 0x56, 0x88, 0x91, + 0x86, 0x7d, 0x75, 0x86, 0x82, 0xc9, 0xcf, 0x61, 0x79, 0x1e, 0xfd, 0x08, 0x6e, 0xd9, 0x56, 0x44, + 0x3a, 0x34, 0x78, 0x69, 0x72, 0x92, 0x2b, 0xbb, 0xfd, 0x4d, 0x40, 0x8b, 0x31, 0x94, 0x2e, 0x91, + 0x46, 0xda, 0x68, 0x7a, 0xd6, 0x36, 0x9a, 0x0c, 0xa8, 0x44, 0x1b, 0x3d, 0x86, 0x6c, 0x9b, 0xdd, + 0x31, 0xcb, 0x93, 0xf4, 0x6c, 0xe5, 0x71, 0x18, 0x20, 0x58, 0x62, 0xa8, 0x7f, 0x54, 0x60, 0x75, + 0xac, 0x26, 0xbc, 0x7e, 0x04, 0x3d, 0x83, 0xf5, 0x1e, 0x0d, 0x7c, 0xda, 0x09, 0xac, 0xde, 0xc5, + 0x4b, 0xd3, 0x73, 0x9f, 0x11, 0xcf, 0xbd, 0xa0, 0xd4, 0xe1, 0x51, 0xb0, 0x3c, 0x93, 0xca, 0x83, + 0xb3, 0x78, 0x2d, 0x81, 0x39, 0x24, 0xab, 0x21, 0x6c, 0x8e, 0x19, 0x90, 0x88, 0x94, 0xb3, 0x81, + 0xb3, 0xc4, 0x57, 0xcc, 0xfb, 0x37, 0x6e, 0xad, 0xa3, 0x6e, 0x7b, 0x06, 0x6b, 0x75, 0x1a, 0x74, + 0x2d, 0xcf, 0xfd, 0x09, 0x71, 0x12, 0x15, 0x0d, 0x21, 0x98, 0xf3, 0x48, 0x5b, 0xf8, 0x2b, 0x85, + 0xf9, 0x6f, 0x54, 0x84, 0x74, 0x44, 0x7b, 0x32, 0x93, 0xd8, 0x4f, 0x56, 0x41, 0x03, 0xb7, 0x73, + 0x21, 0x3e, 0x02, 0x53, 0x58, 0x2c, 0xd0, 0x3a, 0x64, 0xcf, 0x69, 0x14, 0xd1, 0x2e, 0xaf, 0x80, + 0x29, 0x2c, 0x57, 0xaa, 0x09, 0x79, 0x56, 0x7d, 0xff, 0x67, 0xb5, 0x45, 0xfd, 0x42, 0x01, 0x74, + 0x98, 0x6c, 0x97, 0x22, 0x04, 0x3e, 0x04, 0xb0, 0xa2, 0x28, 0x70, 0xcf, 0xfb, 0xd1, 0xc0, 0x81, + 0xdf, 0x99, 0xad, 0x19, 0x0f, 0x10, 0xb5, 0x18, 0x08, 0x27, 0x30, 0xc7, 0x83, 0x2c, 0x35, 0x43, + 0x90, 0xa9, 0xff, 0x51, 0x60, 0x7d, 0xba, 0x08, 0xf4, 0x31, 0x6c, 0xf8, 0x83, 0xdb, 0x19, 0xe9, + 0x46, 0xd2, 0x63, 0xdf, 0xbe, 0xbe, 0x15, 0x53, 0xaf, 0x19, 0xaf, 0xf9, 0x53, 0x6f, 0xff, 0x0c, + 0x16, 0x06, 0x5d, 0x4c, 0x54, 0x91, 0x47, 0x33, 0x04, 0x9c, 0x38, 0x39, 0xf4, 0xd4, 0x00, 0x4b, + 0xed, 0x43, 0x71, 0x9c, 0x8b, 0x3e, 0x80, 0x79, 0xc9, 0x97, 0x5f, 0x29, 0x7b, 0x33, 0x8b, 0xc2, + 0x31, 0x02, 0x0b, 0xc8, 0xd0, 0xa6, 0x41, 0x5c, 0xee, 0xc5, 0x42, 0xfd, 0x93, 0x02, 0x1b, 0xa3, + 0x2e, 0x1e, 0x66, 0xd6, 0x77, 0x27, 0x26, 0x84, 0xaf, 0xcf, 0x16, 0x1a, 0x93, 0x95, 0xad, 0x35, + 0x48, 0x56, 0xe1, 0xbb, 0xf7, 0x6e, 0x18, 0x6b, 0xa3, 0xa9, 0xfa, 0xd9, 0x3c, 0xac, 0xf3, 0xb0, + 0x1f, 0x2a, 0x8f, 0x49, 0xd8, 0xf7, 0xa2, 0xf0, 0xd5, 0x43, 0x62, 0x1f, 0x36, 0xa5, 0x66, 0xa6, + 0xf8, 0x34, 0x4c, 0x0c, 0xbf, 0x52, 0xc1, 0x77, 0x66, 0x2c, 0xbd, 0x09, 0x0d, 0x36, 0x24, 0xf6, + 0x18, 0x3d, 0x44, 0x14, 0xd6, 0xf9, 0xb8, 0x32, 0x29, 0x33, 0xfd, 0xba, 0x32, 0x57, 0x19, 0xf0, + 0x84, 0xc0, 0x8f, 0x60, 0x83, 0x7b, 0x6a, 0x8a, 0xc4, 0xb9, 0xd7, 0x95, 0xb8, 0xc6, 0x91, 0x27, + 0x44, 0xfe, 0x14, 0xb6, 0xc6, 0x3e, 0xf8, 0x93, 0x52, 0x97, 0xb8, 0x54, 0xed, 0xa6, 0x85, 0x66, + 0x28, 0xbd, 0xd4, 0x9e, 0xce, 0x08, 0x91, 0x05, 0x45, 0xee, 0xe4, 0xa4, 0xd8, 0xec, 0x6b, 0x8d, + 0xb9, 0x05, 0x86, 0x97, 0x14, 0x11, 0xc1, 0xca, 0x60, 0xde, 0x1b, 0x8a, 0x91, 0x23, 0x4d, 0xe5, + 0xc6, 0x6d, 0x28, 0x61, 0x1e, 0x8a, 0xf1, 0x13, 0x59, 0x19, 0xc0, 0xda, 0xb4, 0x79, 0x2e, 0x2c, + 0xe5, 0xb9, 0x75, 0xdf, 0x7a, 0xad, 0x49, 0x0e, 0xaf, 0x4e, 0x99, 0xe1, 0x42, 0xb4, 0x03, 0x19, + 0x12, 0x04, 0x34, 0x28, 0xe5, 0xb8, 0x6d, 0x28, 0x96, 0x11, 0xf4, 0xec, 0xb2, 0xc1, 0x1f, 0x6b, + 0xb0, 0xd8, 0xa0, 0x7e, 0xa6, 0xc0, 0xda, 0xd8, 0x6b, 0x4d, 0xd8, 0xa3, 0x7e, 0x48, 0x10, 0x05, + 0x34, 0x74, 0x92, 0x19, 0x88, 0xfc, 0x9c, 0xbd, 0xe5, 0x4c, 0xcf, 0x73, 0x7c, 0xcb, 0x1a, 0x27, + 0xa9, 0x7f, 0x57, 0x60, 0x63, 0x6c, 0x77, 0x33, 0xa0, 0x9d, 0x80, 0x84, 0x57, 0x94, 0x85, 0xfb, + 0x50, 0xec, 0xc9, 0x8d, 0x66, 0x8f, 0x04, 0x36, 0x6b, 0xc3, 0xac, 0x68, 0x66, 0x70, 0x21, 0xa6, + 0x37, 0x05, 0x19, 0xbd, 0x03, 0x30, 0x9c, 0x4f, 0xe4, 0x3b, 0xc3, 0xd6, 0x44, 0x73, 0x6b, 0xc5, + 0x6f, 0x5d, 0x38, 0x37, 0x98, 0x4c, 0xd0, 0xbb, 0x90, 0xef, 0xf7, 0x1c, 0x2b, 0x22, 0xe2, 0xec, + 0xdc, 0x95, 0x67, 0x41, 0x6c, 0x67, 0x04, 0xf5, 0x97, 0xe3, 0x6e, 0x1e, 0x58, 0x16, 0xc0, 0x4a, + 0xc2, 0xcd, 0xb1, 0xbe, 0xd2, 0xcf, 0xda, 0x8d, 0xfd, 0x1c, 0xe3, 0xe3, 0xc4, 0x25, 0xc6, 0x34, + 0xf5, 0xb7, 0x29, 0xd8, 0xbc, 0xf4, 0x59, 0x60, 0x72, 0x06, 0x50, 0x26, 0x67, 0x00, 0xe6, 0xf3, + 0xae, 0xf5, 0xc2, 0xb4, 0xbc, 0x88, 0x04, 0xbe, 0x15, 0xb9, 0xcf, 0xe5, 0x50, 0x99, 0xc1, 0x85, + 0xae, 0xf5, 0x42, 0x4b, 0x90, 0xd9, 0xd6, 0xb6, 0xcb, 0x08, 0xcc, 0xba, 0xb6, 0xe5, 0xb3, 0x21, + 0x21, 0x2d, 0xe6, 0x49, 0x41, 0x6f, 0xc6, 0x64, 0xf4, 0x21, 0x14, 0x64, 0xae, 0xc8, 0x27, 0xb9, + 0xb8, 0xe0, 0x7d, 0x63, 0xd6, 0x2c, 0x89, 0x1f, 0xe5, 0x96, 0xc3, 0xe4, 0x32, 0x44, 0x6f, 0xc2, + 0xa2, 0xd5, 0x77, 0x5c, 0xca, 0x92, 0xd1, 0x7e, 0x26, 0x4a, 0x4c, 0x06, 0xe7, 0x39, 0xad, 0xc5, + 0x49, 0xea, 0x7d, 0x58, 0x1a, 0xc1, 0x40, 0x25, 0x98, 0xef, 0x5d, 0x04, 0x56, 0x28, 0xbf, 0xb8, + 0x72, 0x38, 0x5e, 0xaa, 0x3f, 0x53, 0x60, 0x65, 0x8a, 0x23, 0xd1, 0x8f, 0x61, 0x71, 0xc4, 0x33, + 0xe2, 0x36, 0x0f, 0x67, 0x35, 0x02, 0x13, 0x9b, 0x76, 0x7c, 0x97, 0x97, 0xca, 0x21, 0x1c, 0x1e, + 0xc1, 0x56, 0x7f, 0xaf, 0xc0, 0xed, 0x57, 0x6d, 0x67, 0xc3, 0xe3, 0xb0, 0xf2, 0xc8, 0xcb, 0x4c, + 0x50, 0xae, 0x1a, 0x2e, 0xd1, 0x11, 0x64, 0x3e, 0xa6, 0x81, 0x13, 0x77, 0xbb, 0xfd, 0xeb, 0x5b, + 0xf1, 0x3d, 0x1a, 0x38, 0x35, 0xbf, 0x4d, 0xb1, 0x00, 0x50, 0x7f, 0xa5, 0xc0, 0x42, 0x4c, 0x43, + 0xdf, 0x1c, 0x49, 0xc5, 0x2b, 0x87, 0x99, 0x44, 0x26, 0x3e, 0x84, 0x85, 0xf8, 0x75, 0xe0, 0xea, + 0xef, 0xd3, 0x79, 0xf9, 0x2c, 0xc0, 0xc6, 0x00, 0xa6, 0x85, 0x9c, 0x68, 0xf9, 0xef, 0x07, 0xbf, + 0x53, 0x60, 0x5e, 0xbe, 0x0b, 0xa3, 0x0d, 0x58, 0x39, 0xd4, 0xb5, 0xd6, 0x29, 0xd6, 0xcd, 0xd3, + 0xba, 0xd1, 0xd4, 0x2b, 0xb5, 0xc3, 0x9a, 0x5e, 0x2d, 0xfe, 0x1f, 0x5a, 0x81, 0xc2, 0xb1, 0x76, + 0xa0, 0x1f, 0x9b, 0x55, 0xbd, 0xa5, 0x57, 0x5a, 0xb5, 0x46, 0xbd, 0xa8, 0xa0, 0x4d, 0x58, 0x33, + 0x8e, 0x1a, 0x2d, 0xb3, 0x72, 0xa4, 0xd5, 0x1f, 0xeb, 0x09, 0x56, 0x0a, 0xdd, 0x85, 0x2d, 0xfd, + 0xfb, 0xcd, 0xe3, 0x5a, 0xa5, 0xd6, 0x32, 0x2b, 0x8d, 0x7a, 0x4b, 0xaf, 0xb7, 0x12, 0xfc, 0x34, + 0x42, 0xb0, 0x7c, 0xa8, 0x55, 0x92, 0x67, 0x16, 0x50, 0x09, 0x56, 0x8d, 0xa6, 0xae, 0x57, 0x8e, + 0xcc, 0x16, 0xd6, 0xea, 0x46, 0x05, 0xd7, 0x9a, 0x9c, 0x93, 0x7d, 0x10, 0x00, 0x9a, 0x7c, 0xc0, + 0x42, 0xff, 0x0f, 0xdb, 0x63, 0x3a, 0x99, 0x27, 0x8d, 0xea, 0xb8, 0xe6, 0x4b, 0x90, 0xe3, 0x4a, + 0x32, 0x56, 0x51, 0x41, 0xcb, 0x00, 0x87, 0x58, 0x3b, 0xd1, 0xc5, 0x3a, 0xc5, 0x2c, 0xe6, 0x6c, + 0xad, 0x5e, 0x35, 0x13, 0x8c, 0xf4, 0x83, 0x08, 0x60, 0x38, 0xcd, 0xa1, 0x2d, 0x58, 0x3f, 0xae, + 0x7d, 0xa0, 0x1f, 0xd7, 0x8e, 0x1a, 0x8d, 0xea, 0x98, 0x84, 0x5b, 0xb0, 0x74, 0xa6, 0xe3, 0x27, + 0xe6, 0x69, 0x9d, 0x6f, 0x79, 0x52, 0x54, 0xd0, 0x22, 0x2c, 0x0c, 0x56, 0x29, 0xb6, 0x6a, 0x36, + 0x0c, 0xa3, 0x76, 0x70, 0xac, 0x17, 0xd3, 0x08, 0x20, 0x2b, 0x39, 0x73, 0xa8, 0x00, 0x79, 0x7e, + 0x54, 0x12, 0x32, 0x0f, 0xfe, 0xa9, 0xc0, 0xbc, 0xfc, 0x0a, 0x66, 0xaa, 0xe9, 0x27, 0x0d, 0x6e, + 0xd7, 0x84, 0x49, 0xda, 0xc9, 0xa9, 0xa1, 0x9f, 0xe8, 0xf5, 0x56, 0x51, 0x41, 0x39, 0xc8, 0x30, + 0xff, 0xe3, 0x62, 0x8a, 0xa9, 0x52, 0x69, 0xd4, 0x2b, 0x7a, 0xbd, 0x85, 0x35, 0xe9, 0xe9, 0x02, + 0xe4, 0xe5, 0x05, 0xf0, 0xed, 0x73, 0x4c, 0x7e, 0x55, 0x37, 0x6a, 0x58, 0x2f, 0x66, 0xd8, 0x35, + 0x54, 0x6b, 0x86, 0xd6, 0x6c, 0x36, 0x6a, 0x92, 0x9f, 0x45, 0x79, 0x98, 0xaf, 0xd6, 0x8c, 0xc7, + 0xa7, 0x46, 0xab, 0x38, 0xcf, 0x16, 0xfa, 0xb1, 0x26, 0x2f, 0xe8, 0x16, 0x2c, 0xe9, 0x27, 0x07, + 0x1a, 0xc6, 0x9a, 0x61, 0xf0, 0xcd, 0x39, 0x66, 0x5a, 0xad, 0xde, 0xd2, 0xb1, 0x6e, 0xb4, 0x8a, + 0xc0, 0x34, 0x69, 0xe2, 0x5a, 0x55, 0x2f, 0xe6, 0xd9, 0x41, 0x43, 0xab, 0xd6, 0x75, 0xc3, 0x28, + 0x2e, 0xb2, 0x5d, 0xc6, 0x29, 0x6e, 0xe2, 0x9a, 0xa1, 0x17, 0x97, 0xf6, 0xbf, 0x50, 0xa0, 0xc4, + 0x2b, 0x75, 0x2d, 0x91, 0x31, 0x06, 0x09, 0x9e, 0xbb, 0x36, 0x41, 0xbf, 0x56, 0x60, 0x69, 0xa4, + 0x49, 0xa0, 0x19, 0x66, 0xe3, 0x69, 0x7f, 0xb9, 0x6c, 0xdd, 0x89, 0xcf, 0x27, 0xfe, 0x0b, 0x2a, + 0x37, 0xe2, 0xff, 0x82, 0xd4, 0x2f, 0xfd, 0xfc, 0x6f, 0xff, 0xfa, 0x3c, 0x75, 0x4f, 0xdd, 0x1a, + 0xff, 0x7b, 0x2a, 0x7c, 0x24, 0xbb, 0x06, 0x79, 0xa4, 0x3c, 0x38, 0xf8, 0x24, 0x05, 0x5f, 0xb1, + 0x69, 0xf7, 0xda, 0xba, 0x1c, 0xdc, 0xb9, 0xcc, 0xc4, 0x26, 0x4b, 0xcf, 0xa6, 0xf2, 0x83, 0x27, + 0x12, 0xaa, 0x43, 0x59, 0x53, 0x29, 0xd3, 0xa0, 0xb3, 0xdb, 0x21, 0x3e, 0x4f, 0xde, 0x5d, 0xc1, + 0xb2, 0x7a, 0x6e, 0x78, 0xf5, 0x9f, 0x69, 0xef, 0x4e, 0xf0, 0xfe, 0x90, 0xda, 0x79, 0x2c, 0xb0, + 0x2b, 0x5c, 0xcd, 0x09, 0x4d, 0xca, 0x67, 0x7b, 0xcd, 0xbd, 0x03, 0x76, 0xf8, 0xaf, 0xf1, 0xd6, + 0xa7, 0x7c, 0xeb, 0xd3, 0x89, 0xad, 0x4f, 0xcf, 0x62, 0x39, 0xe7, 0x59, 0xae, 0xdb, 0xd7, 0xfe, + 0x1b, 0x00, 0x00, 0xff, 0xff, 0x9b, 0x29, 0xc9, 0x61, 0xe7, 0x1b, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1/geometry.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1/geometry.pb.go index c7387bf..f6812d9 100644 --- a/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1/geometry.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1/geometry.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/cloud/vision/v1/geometry.proto -// DO NOT EDIT! /* Package vision is a generated protocol buffer package. @@ -30,6 +29,7 @@ It has these top-level messages: CropHint CropHintsAnnotation CropHintsParams + WebDetectionParams ImageContext AnnotateImageRequest AnnotateImageResponse diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1/image_annotator.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1/image_annotator.pb.go index a398c38..231ac66 100644 --- a/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1/image_annotator.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1/image_annotator.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/cloud/vision/v1/image_annotator.proto -// DO NOT EDIT! package vision @@ -63,7 +62,7 @@ func (x Likelihood) String() string { } func (Likelihood) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } -// Type of image feature. +// Type of Google Cloud Vision API feature to be extracted. type Feature_Type int32 const ( @@ -77,14 +76,18 @@ const ( Feature_LOGO_DETECTION Feature_Type = 3 // Run label detection. Feature_LABEL_DETECTION Feature_Type = 4 - // Run OCR. + // Run text detection / optical character recognition (OCR). Text detection + // is optimized for areas of text within a larger image; if the image is + // a document, use `DOCUMENT_TEXT_DETECTION` instead. Feature_TEXT_DETECTION Feature_Type = 5 // Run dense text document OCR. Takes precedence when both - // DOCUMENT_TEXT_DETECTION and TEXT_DETECTION are present. + // `DOCUMENT_TEXT_DETECTION` and `TEXT_DETECTION` are present. Feature_DOCUMENT_TEXT_DETECTION Feature_Type = 11 - // Run computer vision models to compute image safe-search properties. + // Run Safe Search to detect potentially unsafe + // or undesirable content. Feature_SAFE_SEARCH_DETECTION Feature_Type = 6 - // Compute a set of image properties, such as the image's dominant colors. + // Compute a set of image properties, such as the + // image's dominant colors. Feature_IMAGE_PROPERTIES Feature_Type = 7 // Run crop hints. Feature_CROP_HINTS Feature_Type = 9 @@ -285,15 +288,19 @@ func (FaceAnnotation_Landmark_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{3, 0, 0} } -// Users describe the type of Google Cloud Vision API tasks to perform over -// images by using *Feature*s. Each Feature indicates a type of image -// detection task to perform. Features encode the Cloud Vision API -// vertical to operate on and the number of top-scoring results to return. +// The type of Google Cloud Vision API detection to perform, and the maximum +// number of results to return for that type. Multiple `Feature` objects can +// be specified in the `features` list. type Feature struct { // The feature type. Type Feature_Type `protobuf:"varint,1,opt,name=type,enum=google.cloud.vision.v1.Feature_Type" json:"type,omitempty"` - // Maximum number of results of this type. + // Maximum number of results of this type. Does not apply to + // `TEXT_DETECTION`, `DOCUMENT_TEXT_DETECTION`, or `CROP_HINTS`. MaxResults int32 `protobuf:"varint,2,opt,name=max_results,json=maxResults" json:"max_results,omitempty"` + // Model to use for the feature. + // Supported values: "builtin/stable" (the default if unset) and + // "builtin/latest". + Model string `protobuf:"bytes,3,opt,name=model" json:"model,omitempty"` } func (m *Feature) Reset() { *m = Feature{} } @@ -315,24 +322,38 @@ func (m *Feature) GetMaxResults() int32 { return 0 } -// External image source (Google Cloud Storage image location). +func (m *Feature) GetModel() string { + if m != nil { + return m.Model + } + return "" +} + +// External image source (Google Cloud Storage or web URL image location). type ImageSource struct { - // NOTE: For new code `image_uri` below is preferred. - // Google Cloud Storage image URI, which must be in the following form: - // `gs://bucket_name/object_name` (for details, see + // **Use `image_uri` instead.** + // + // The Google Cloud Storage URI of the form + // `gs://bucket_name/object_name`. Object versioning is not supported. See // [Google Cloud Storage Request - // URIs](https://cloud.google.com/storage/docs/reference-uris)). - // NOTE: Cloud Storage object versioning is not supported. + // URIs](https://cloud.google.com/storage/docs/reference-uris) for more info. GcsImageUri string `protobuf:"bytes,1,opt,name=gcs_image_uri,json=gcsImageUri" json:"gcs_image_uri,omitempty"` - // Image URI which supports: - // 1) Google Cloud Storage image URI, which must be in the following form: - // `gs://bucket_name/object_name` (for details, see - // [Google Cloud Storage Request - // URIs](https://cloud.google.com/storage/docs/reference-uris)). - // NOTE: Cloud Storage object versioning is not supported. - // 2) Publicly accessible image HTTP/HTTPS URL. - // This is preferred over the legacy `gcs_image_uri` above. When both - // `gcs_image_uri` and `image_uri` are specified, `image_uri` takes + // The URI of the source image. Can be either: + // + // 1. A Google Cloud Storage URI of the form + // `gs://bucket_name/object_name`. Object versioning is not supported. See + // [Google Cloud Storage Request + // URIs](https://cloud.google.com/storage/docs/reference-uris) for more + // info. + // + // 2. A publicly-accessible image HTTP/HTTPS URL. When fetching images from + // HTTP/HTTPS URLs, Google cannot guarantee that the request will be + // completed. Your request may fail if the specified host denies the + // request (e.g. due to request throttling or DOS prevention), or if Google + // throttles requests to the site for abuse prevention. You should not + // depend on externally-hosted images for production applications. + // + // When both `gcs_image_uri` and `image_uri` are specified, `image_uri` takes // precedence. ImageUri string `protobuf:"bytes,2,opt,name=image_uri,json=imageUri" json:"image_uri,omitempty"` } @@ -359,12 +380,12 @@ func (m *ImageSource) GetImageUri() string { // Client image to perform Google Cloud Vision API tasks over. type Image struct { // Image content, represented as a stream of bytes. - // Note: as with all `bytes` fields, protobuffers use a pure binary + // Note: As with all `bytes` fields, protobuffers use a pure binary // representation, whereas JSON representations use base64. Content []byte `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"` - // Google Cloud Storage image location. If both `content` and `source` - // are provided for an image, `content` takes precedence and is - // used to perform the image annotation request. + // Google Cloud Storage image location, or publicly-accessible image + // URL. If both `content` and `source` are provided for an image, `content` + // takes precedence and is used to perform the image annotation request. Source *ImageSource `protobuf:"bytes,2,opt,name=source" json:"source,omitempty"` } @@ -548,10 +569,6 @@ func (m *FaceAnnotation) GetHeadwearLikelihood() Likelihood { } // A face-specific landmark (for example, a face feature). -// Landmark positions may fall outside the bounds of the image -// if the face is near one or more edges of the image. -// Therefore it is NOT guaranteed that `0 <= x < width` or -// `0 <= y < height`. type FaceAnnotation_Landmark struct { // Face landmark type. Type FaceAnnotation_Landmark_Type `protobuf:"varint,3,opt,name=type,enum=google.cloud.vision.v1.FaceAnnotation_Landmark_Type" json:"type,omitempty"` @@ -602,6 +619,8 @@ type Property struct { Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` // Value of the property. Value string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` + // Value of numeric properties. + Uint64Value uint64 `protobuf:"varint,3,opt,name=uint64_value,json=uint64Value" json:"uint64_value,omitempty"` } func (m *Property) Reset() { *m = Property{} } @@ -623,10 +642,18 @@ func (m *Property) GetValue() string { return "" } +func (m *Property) GetUint64Value() uint64 { + if m != nil { + return m.Uint64Value + } + return 0 +} + // Set of detected entity features. type EntityAnnotation struct { // Opaque entity ID. Some IDs may be available in - // [Google Knowledge Graph Search API](https://developers.google.com/knowledge-graph/). + // [Google Knowledge Graph Search + // API](https://developers.google.com/knowledge-graph/). Mid string `protobuf:"bytes,1,opt,name=mid" json:"mid,omitempty"` // The language code for the locale in which the entity textual // `description` is expressed. @@ -635,6 +662,7 @@ type EntityAnnotation struct { Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` // Overall score of the result. Range [0, 1]. Score float32 `protobuf:"fixed32,4,opt,name=score" json:"score,omitempty"` + // **Deprecated. Use `score` instead.** // The accuracy of the entity detection in an image. // For example, for an image in which the "Eiffel Tower" entity is detected, // this field represents the confidence that there is a tower in the query @@ -646,10 +674,8 @@ type EntityAnnotation struct { // detected distant towering building, even though the confidence that // there is a tower in each image may be the same. Range [0, 1]. Topicality float32 `protobuf:"fixed32,6,opt,name=topicality" json:"topicality,omitempty"` - // Image region to which this entity belongs. Currently not produced - // for `LABEL_DETECTION` features. For `TEXT_DETECTION` (OCR), `boundingPoly`s - // are produced for the entire text detected in an image region, followed by - // `boundingPoly`s for each word within the detected text. + // Image region to which this entity belongs. Not produced + // for `LABEL_DETECTION` features. BoundingPoly *BoundingPoly `protobuf:"bytes,7,opt,name=bounding_poly,json=boundingPoly" json:"bounding_poly,omitempty"` // The location information for the detected entity. Multiple // `LocationInfo` elements can be present because one location may @@ -734,7 +760,9 @@ func (m *EntityAnnotation) GetProperties() []*Property { // methods over safe-search verticals (for example, adult, spoof, medical, // violence). type SafeSearchAnnotation struct { - // Represents the adult content likelihood for the image. + // Represents the adult content likelihood for the image. Adult content may + // contain elements such as nudity, pornographic images or cartoons, or + // sexual activities. Adult Likelihood `protobuf:"varint,1,opt,name=adult,enum=google.cloud.vision.v1.Likelihood" json:"adult,omitempty"` // Spoof likelihood. The likelihood that an modification // was made to the image's canonical version to make it appear @@ -742,8 +770,13 @@ type SafeSearchAnnotation struct { Spoof Likelihood `protobuf:"varint,2,opt,name=spoof,enum=google.cloud.vision.v1.Likelihood" json:"spoof,omitempty"` // Likelihood that this is a medical image. Medical Likelihood `protobuf:"varint,3,opt,name=medical,enum=google.cloud.vision.v1.Likelihood" json:"medical,omitempty"` - // Violence likelihood. + // Likelihood that this image contains violent content. Violence Likelihood `protobuf:"varint,4,opt,name=violence,enum=google.cloud.vision.v1.Likelihood" json:"violence,omitempty"` + // Likelihood that the request image contains racy content. Racy content may + // include (but is not limited to) skimpy or sheer clothing, strategically + // covered nudity, lewd or provocative poses, or close-ups of sensitive + // body areas. + Racy Likelihood `protobuf:"varint,9,opt,name=racy,enum=google.cloud.vision.v1.Likelihood" json:"racy,omitempty"` } func (m *SafeSearchAnnotation) Reset() { *m = SafeSearchAnnotation{} } @@ -779,6 +812,13 @@ func (m *SafeSearchAnnotation) GetViolence() Likelihood { return Likelihood_UNKNOWN } +func (m *SafeSearchAnnotation) GetRacy() Likelihood { + if m != nil { + return m.Racy + } + return Likelihood_UNKNOWN +} + // Rectangle determined by min and max `LatLng` pairs. type LatLongRect struct { // Min lat/long pair. @@ -920,6 +960,7 @@ func (m *CropHint) GetImportanceFraction() float32 { // Set of crop hints that are used to generate new crops when serving images. type CropHintsAnnotation struct { + // Crop hint results. CropHints []*CropHint `protobuf:"bytes,1,rep,name=crop_hints,json=cropHints" json:"crop_hints,omitempty"` } @@ -958,6 +999,24 @@ func (m *CropHintsParams) GetAspectRatios() []float32 { return nil } +// Parameters for web detection request. +type WebDetectionParams struct { + // Whether to include results derived from the geo information in the image. + IncludeGeoResults bool `protobuf:"varint,2,opt,name=include_geo_results,json=includeGeoResults" json:"include_geo_results,omitempty"` +} + +func (m *WebDetectionParams) Reset() { *m = WebDetectionParams{} } +func (m *WebDetectionParams) String() string { return proto.CompactTextString(m) } +func (*WebDetectionParams) ProtoMessage() {} +func (*WebDetectionParams) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{15} } + +func (m *WebDetectionParams) GetIncludeGeoResults() bool { + if m != nil { + return m.IncludeGeoResults + } + return false +} + // Image context and/or feature-specific parameters. type ImageContext struct { // lat/long rectangle that specifies the location of the image. @@ -973,12 +1032,14 @@ type ImageContext struct { LanguageHints []string `protobuf:"bytes,2,rep,name=language_hints,json=languageHints" json:"language_hints,omitempty"` // Parameters for crop hints annotation request. CropHintsParams *CropHintsParams `protobuf:"bytes,4,opt,name=crop_hints_params,json=cropHintsParams" json:"crop_hints_params,omitempty"` + // Parameters for web detection. + WebDetectionParams *WebDetectionParams `protobuf:"bytes,6,opt,name=web_detection_params,json=webDetectionParams" json:"web_detection_params,omitempty"` } func (m *ImageContext) Reset() { *m = ImageContext{} } func (m *ImageContext) String() string { return proto.CompactTextString(m) } func (*ImageContext) ProtoMessage() {} -func (*ImageContext) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{15} } +func (*ImageContext) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{16} } func (m *ImageContext) GetLatLongRect() *LatLongRect { if m != nil { @@ -1001,6 +1062,13 @@ func (m *ImageContext) GetCropHintsParams() *CropHintsParams { return nil } +func (m *ImageContext) GetWebDetectionParams() *WebDetectionParams { + if m != nil { + return m.WebDetectionParams + } + return nil +} + // Request for performing Google Cloud Vision API tasks over a user-provided // image, with user-requested features. type AnnotateImageRequest struct { @@ -1015,7 +1083,7 @@ type AnnotateImageRequest struct { func (m *AnnotateImageRequest) Reset() { *m = AnnotateImageRequest{} } func (m *AnnotateImageRequest) String() string { return proto.CompactTextString(m) } func (*AnnotateImageRequest) ProtoMessage() {} -func (*AnnotateImageRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{16} } +func (*AnnotateImageRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{17} } func (m *AnnotateImageRequest) GetImage() *Image { if m != nil { @@ -1048,8 +1116,7 @@ type AnnotateImageResponse struct { LogoAnnotations []*EntityAnnotation `protobuf:"bytes,3,rep,name=logo_annotations,json=logoAnnotations" json:"logo_annotations,omitempty"` // If present, label detection has completed successfully. LabelAnnotations []*EntityAnnotation `protobuf:"bytes,4,rep,name=label_annotations,json=labelAnnotations" json:"label_annotations,omitempty"` - // If present, text (OCR) detection or document (OCR) text detection has - // completed successfully. + // If present, text (OCR) detection has completed successfully. TextAnnotations []*EntityAnnotation `protobuf:"bytes,5,rep,name=text_annotations,json=textAnnotations" json:"text_annotations,omitempty"` // If present, text (OCR) detection or document (OCR) text detection has // completed successfully. @@ -1073,7 +1140,7 @@ type AnnotateImageResponse struct { func (m *AnnotateImageResponse) Reset() { *m = AnnotateImageResponse{} } func (m *AnnotateImageResponse) String() string { return proto.CompactTextString(m) } func (*AnnotateImageResponse) ProtoMessage() {} -func (*AnnotateImageResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{17} } +func (*AnnotateImageResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{18} } func (m *AnnotateImageResponse) GetFaceAnnotations() []*FaceAnnotation { if m != nil { @@ -1161,7 +1228,7 @@ type BatchAnnotateImagesRequest struct { func (m *BatchAnnotateImagesRequest) Reset() { *m = BatchAnnotateImagesRequest{} } func (m *BatchAnnotateImagesRequest) String() string { return proto.CompactTextString(m) } func (*BatchAnnotateImagesRequest) ProtoMessage() {} -func (*BatchAnnotateImagesRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{18} } +func (*BatchAnnotateImagesRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{19} } func (m *BatchAnnotateImagesRequest) GetRequests() []*AnnotateImageRequest { if m != nil { @@ -1179,7 +1246,7 @@ type BatchAnnotateImagesResponse struct { func (m *BatchAnnotateImagesResponse) Reset() { *m = BatchAnnotateImagesResponse{} } func (m *BatchAnnotateImagesResponse) String() string { return proto.CompactTextString(m) } func (*BatchAnnotateImagesResponse) ProtoMessage() {} -func (*BatchAnnotateImagesResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{19} } +func (*BatchAnnotateImagesResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{20} } func (m *BatchAnnotateImagesResponse) GetResponses() []*AnnotateImageResponse { if m != nil { @@ -1205,6 +1272,7 @@ func init() { proto.RegisterType((*CropHint)(nil), "google.cloud.vision.v1.CropHint") proto.RegisterType((*CropHintsAnnotation)(nil), "google.cloud.vision.v1.CropHintsAnnotation") proto.RegisterType((*CropHintsParams)(nil), "google.cloud.vision.v1.CropHintsParams") + proto.RegisterType((*WebDetectionParams)(nil), "google.cloud.vision.v1.WebDetectionParams") proto.RegisterType((*ImageContext)(nil), "google.cloud.vision.v1.ImageContext") proto.RegisterType((*AnnotateImageRequest)(nil), "google.cloud.vision.v1.AnnotateImageRequest") proto.RegisterType((*AnnotateImageResponse)(nil), "google.cloud.vision.v1.AnnotateImageResponse") @@ -1292,148 +1360,154 @@ var _ImageAnnotator_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("google/cloud/vision/v1/image_annotator.proto", fileDescriptor1) } var fileDescriptor1 = []byte{ - // 2281 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x59, 0x4b, 0x73, 0x23, 0x49, - 0xf1, 0x5f, 0xc9, 0x2f, 0x29, 0xf5, 0x6a, 0x97, 0x1f, 0xa3, 0xb1, 0xe7, 0xe1, 0xed, 0xfd, 0xcf, - 0x1f, 0xc7, 0x30, 0xd8, 0x8c, 0x67, 0x21, 0x96, 0x9d, 0x09, 0x40, 0x92, 0xdb, 0xb6, 0x62, 0x64, - 0x49, 0x5b, 0x92, 0xd7, 0x6b, 0x20, 0xe8, 0x68, 0xb7, 0x4a, 0x9a, 0x9e, 0x6d, 0x75, 0x35, 0xdd, - 0xad, 0x19, 0xfb, 0x4a, 0x04, 0x11, 0xdc, 0xb9, 0x73, 0xe4, 0x4e, 0x04, 0x5f, 0x81, 0x03, 0x47, - 0x62, 0xcf, 0xdc, 0xf8, 0x0c, 0x04, 0x47, 0xa2, 0x1e, 0xdd, 0x2a, 0x69, 0x2c, 0x8f, 0x4c, 0x70, - 0x52, 0x57, 0x66, 0xfe, 0x7e, 0x59, 0x95, 0x55, 0x59, 0x59, 0x55, 0x82, 0x67, 0x03, 0x4a, 0x07, - 0x2e, 0xd9, 0xb7, 0x5d, 0x3a, 0xea, 0xed, 0xbf, 0x73, 0x42, 0x87, 0x7a, 0xfb, 0xef, 0x9e, 0xef, - 0x3b, 0x43, 0x6b, 0x40, 0x4c, 0xcb, 0xf3, 0x68, 0x64, 0x45, 0x34, 0xd8, 0xf3, 0x03, 0x1a, 0x51, - 0xb4, 0x29, 0xac, 0xf7, 0xb8, 0xf5, 0x9e, 0xb0, 0xde, 0x7b, 0xf7, 0x7c, 0xeb, 0x81, 0x64, 0xb1, - 0x7c, 0x67, 0x5f, 0x62, 0x1c, 0xea, 0x85, 0x02, 0xb5, 0xf5, 0x64, 0x86, 0x8f, 0x01, 0xa1, 0x43, - 0x12, 0x05, 0xd7, 0xd2, 0x6c, 0x56, 0x57, 0x22, 0x72, 0x15, 0x99, 0x63, 0x56, 0x69, 0xfd, 0x74, - 0x86, 0xf5, 0x7b, 0x72, 0x69, 0xf6, 0x48, 0x44, 0x6c, 0xc5, 0xf6, 0x9e, 0xb4, 0x0d, 0x7c, 0x7b, - 0x3f, 0x8c, 0xac, 0x68, 0x14, 0x4e, 0x29, 0xa2, 0x6b, 0x9f, 0xec, 0xdb, 0xd4, 0x8d, 0x07, 0xba, - 0x55, 0x56, 0x15, 0xae, 0x15, 0xb9, 0xde, 0x40, 0x68, 0xf4, 0x7f, 0xa4, 0x61, 0xe5, 0x88, 0x58, - 0xd1, 0x28, 0x20, 0xe8, 0x0b, 0x58, 0x64, 0x06, 0xe5, 0xd4, 0x4e, 0x6a, 0xb7, 0x78, 0xf0, 0x7f, - 0x7b, 0x37, 0x47, 0x67, 0x4f, 0x9a, 0xef, 0x75, 0xaf, 0x7d, 0x82, 0x39, 0x02, 0x3d, 0x86, 0xdc, - 0xd0, 0xba, 0x32, 0x03, 0x12, 0x8e, 0xdc, 0x28, 0x2c, 0xa7, 0x77, 0x52, 0xbb, 0x4b, 0x18, 0x86, - 0xd6, 0x15, 0x16, 0x12, 0xfd, 0x5f, 0x29, 0x58, 0x64, 0xf6, 0x68, 0x1d, 0xb4, 0xee, 0x45, 0xdb, - 0x30, 0xcf, 0x9a, 0x9d, 0xb6, 0x51, 0xab, 0x1f, 0xd5, 0x8d, 0x43, 0xed, 0x13, 0x84, 0xa0, 0x78, - 0x54, 0xa9, 0x19, 0xe6, 0xa1, 0xd1, 0x35, 0x6a, 0xdd, 0x7a, 0xab, 0xa9, 0xa5, 0xd0, 0x26, 0xa0, - 0x46, 0xa5, 0x79, 0x78, 0x5a, 0xc1, 0xaf, 0x15, 0x79, 0x9a, 0xd9, 0x36, 0x5a, 0xc7, 0x2d, 0x45, - 0xb6, 0x80, 0xd6, 0xa0, 0xd4, 0xa8, 0x54, 0x8d, 0x86, 0x22, 0x5c, 0x64, 0x86, 0x5d, 0xe3, 0x9b, - 0xae, 0x22, 0x5b, 0x42, 0xdb, 0x70, 0xef, 0xb0, 0x55, 0x3b, 0x3b, 0x35, 0x9a, 0x5d, 0x73, 0x4a, - 0x99, 0x43, 0xf7, 0x61, 0xa3, 0x53, 0x39, 0x32, 0xcc, 0x8e, 0x51, 0xc1, 0xb5, 0x13, 0x45, 0xb5, - 0xcc, 0xba, 0x5d, 0x3f, 0xad, 0x1c, 0x1b, 0x66, 0x1b, 0xb7, 0xda, 0x06, 0xee, 0xd6, 0x8d, 0x8e, - 0xb6, 0x82, 0x8a, 0x00, 0x35, 0xdc, 0x6a, 0x9b, 0x27, 0xf5, 0x66, 0xb7, 0xa3, 0x65, 0xd1, 0x2a, - 0x14, 0xce, 0x8d, 0xaa, 0x02, 0x04, 0xbd, 0x09, 0xb9, 0x3a, 0x5b, 0x7b, 0x1d, 0x3a, 0x0a, 0x6c, - 0x82, 0x74, 0x28, 0x0c, 0xec, 0xd0, 0x14, 0xcb, 0x71, 0x14, 0x38, 0x3c, 0xd6, 0x59, 0x9c, 0x1b, - 0xd8, 0x21, 0x37, 0x3b, 0x0b, 0x1c, 0xb4, 0x0d, 0xd9, 0xb1, 0x3e, 0xcd, 0xf5, 0x19, 0x47, 0x2a, - 0xf5, 0x5f, 0xc3, 0x12, 0x37, 0x44, 0x65, 0x58, 0xb1, 0xa9, 0x17, 0x11, 0x2f, 0xe2, 0x1c, 0x79, - 0x1c, 0x37, 0xd1, 0x4b, 0x58, 0x0e, 0xb9, 0x37, 0x0e, 0xce, 0x1d, 0x7c, 0x36, 0x6b, 0x22, 0x95, - 0x8e, 0x61, 0x09, 0xd1, 0xff, 0x5e, 0x82, 0xe2, 0x91, 0x65, 0x93, 0x4a, 0xb2, 0x40, 0x51, 0x1d, - 0x0a, 0x97, 0x74, 0xe4, 0xf5, 0x1c, 0x6f, 0x60, 0xfa, 0xd4, 0xbd, 0xe6, 0xfe, 0x72, 0xb3, 0xd7, - 0x47, 0x55, 0x1a, 0xb7, 0xa9, 0x7b, 0x8d, 0xf3, 0x97, 0x4a, 0x0b, 0x35, 0x41, 0xeb, 0xf7, 0xcc, - 0x49, 0xb6, 0xf4, 0x1d, 0xd8, 0x8a, 0xfd, 0x9e, 0xda, 0x46, 0xa7, 0x90, 0x75, 0x2d, 0xaf, 0x37, - 0xb4, 0x82, 0x6f, 0xc3, 0xf2, 0xc2, 0xce, 0xc2, 0x6e, 0xee, 0x60, 0x7f, 0xe6, 0xb2, 0x9d, 0x18, - 0xd5, 0x5e, 0x43, 0xe2, 0xf0, 0x98, 0x01, 0x3d, 0x04, 0x08, 0xa8, 0xeb, 0x9a, 0x96, 0x37, 0x70, - 0x49, 0x79, 0x71, 0x27, 0xb5, 0x9b, 0xc6, 0x59, 0x26, 0xa9, 0x30, 0x01, 0x9b, 0x18, 0xdf, 0xf2, - 0xa4, 0x76, 0x89, 0x6b, 0x33, 0xbe, 0xe5, 0x09, 0xe5, 0x43, 0x80, 0xc8, 0x71, 0x23, 0xa9, 0x5d, - 0x16, 0x58, 0x26, 0x11, 0xea, 0xe7, 0xb0, 0x9e, 0xa4, 0xb1, 0x69, 0x53, 0xaf, 0xef, 0xf4, 0x88, - 0x67, 0x93, 0xf2, 0x0a, 0x37, 0x5c, 0x4b, 0x74, 0xb5, 0x44, 0x85, 0x7e, 0x04, 0x9b, 0x71, 0xd7, - 0x58, 0xb0, 0x14, 0x50, 0x86, 0x83, 0x36, 0x14, 0xad, 0x02, 0xab, 0x43, 0xf1, 0x2d, 0xbd, 0x36, - 0x5d, 0xe7, 0x5b, 0xe2, 0x3a, 0x6f, 0x28, 0xed, 0x95, 0xb3, 0x3c, 0x9f, 0xf5, 0x59, 0x81, 0x69, - 0x24, 0x96, 0xb8, 0xf0, 0x96, 0x5e, 0x8f, 0x9b, 0xa8, 0x05, 0xab, 0x21, 0x0d, 0x02, 0xfa, 0x5e, - 0x65, 0x83, 0xb9, 0xd9, 0x34, 0x01, 0x56, 0x08, 0x4f, 0x41, 0xb3, 0xbc, 0x01, 0x09, 0x54, 0xbe, - 0xdc, 0xdc, 0x7c, 0x25, 0x8e, 0x55, 0xe8, 0x3a, 0xb0, 0x16, 0x8e, 0x02, 0x3f, 0x70, 0x42, 0xa2, - 0x32, 0xe6, 0xe7, 0x66, 0x44, 0x31, 0x5c, 0x21, 0xfd, 0x15, 0x94, 0x47, 0x5e, 0x8f, 0x04, 0x26, - 0xb9, 0xf2, 0x69, 0x48, 0x7a, 0x2a, 0x73, 0x61, 0x6e, 0xe6, 0x4d, 0xce, 0x61, 0x08, 0x0a, 0x85, - 0xfd, 0x2b, 0x40, 0x97, 0xee, 0x28, 0x08, 0x26, 0x79, 0x8b, 0x73, 0xf3, 0xae, 0x4a, 0xf4, 0x64, - 0x14, 0xde, 0x10, 0xab, 0xf7, 0x9e, 0x58, 0x13, 0x71, 0x2d, 0xcd, 0x1f, 0x85, 0x18, 0x3e, 0x96, - 0x6d, 0xfd, 0x6d, 0x05, 0x32, 0x71, 0x8a, 0xa0, 0x13, 0x59, 0x18, 0x16, 0x38, 0xe5, 0xe7, 0x77, - 0xcc, 0x30, 0xb5, 0x50, 0xbc, 0x82, 0x8c, 0x4f, 0x43, 0x87, 0xe9, 0x79, 0x7e, 0xe5, 0x0e, 0x76, - 0x66, 0xb1, 0xb5, 0xa5, 0x1d, 0x4e, 0x10, 0xfa, 0x5f, 0x96, 0xc7, 0x55, 0xe4, 0xac, 0xf9, 0xba, - 0xd9, 0x3a, 0x6f, 0x9a, 0x71, 0x8d, 0xd0, 0x3e, 0x41, 0x79, 0xc8, 0x34, 0x8c, 0xa3, 0xae, 0x69, - 0x5c, 0x18, 0x5a, 0x0a, 0x15, 0x20, 0x8b, 0xeb, 0xc7, 0x27, 0xa2, 0x99, 0x46, 0x65, 0x58, 0xe7, - 0xca, 0xd6, 0x91, 0x19, 0x1b, 0x55, 0x71, 0xeb, 0x5c, 0x5b, 0x60, 0xdb, 0xbe, 0x30, 0x9c, 0x56, - 0x2d, 0x32, 0x55, 0x0c, 0x4a, 0xb8, 0xb8, 0x6a, 0x09, 0x6d, 0xc1, 0x66, 0x82, 0x9a, 0xd4, 0x2d, - 0x33, 0xd8, 0x69, 0xfd, 0xb0, 0xdd, 0xaa, 0x37, 0xbb, 0x66, 0xd5, 0xe8, 0x9e, 0x1b, 0x46, 0x93, - 0x69, 0x59, 0xc9, 0xc8, 0x43, 0xa6, 0xd9, 0xea, 0x18, 0x66, 0xb7, 0xde, 0xd6, 0x32, 0xac, 0x8f, - 0x67, 0xed, 0xb6, 0x81, 0xcd, 0x46, 0xbd, 0xad, 0x65, 0x59, 0xb3, 0xd1, 0x3a, 0x97, 0x4d, 0x60, - 0xe5, 0xe5, 0xb4, 0x75, 0xd6, 0x3d, 0xe1, 0xbd, 0xd2, 0x72, 0xa8, 0x04, 0x39, 0xd1, 0xe6, 0xfe, - 0xb4, 0x3c, 0xd2, 0x20, 0x2f, 0x04, 0x35, 0xa3, 0xd9, 0x35, 0xb0, 0x56, 0x40, 0x1b, 0xb0, 0xca, - 0xe9, 0xab, 0xad, 0x6e, 0xb7, 0x75, 0x2a, 0x0d, 0x8b, 0x2c, 0x5e, 0xaa, 0x98, 0xf3, 0x95, 0x58, - 0x85, 0x55, 0xa5, 0x92, 0x44, 0x4b, 0x46, 0x6d, 0x5c, 0x18, 0x66, 0xb7, 0xd5, 0x36, 0xab, 0xad, - 0xb3, 0xe6, 0x61, 0x05, 0x5f, 0x68, 0xab, 0x13, 0x2a, 0x31, 0xea, 0x5a, 0x0b, 0x37, 0x0d, 0xac, - 0x21, 0xf4, 0x00, 0xca, 0x89, 0x4a, 0x32, 0x26, 0xc0, 0xb5, 0x24, 0xfc, 0x4c, 0xcb, 0x3f, 0x24, - 0x6e, 0x7d, 0x1c, 0xc8, 0x0f, 0xdc, 0x6d, 0x4c, 0xea, 0x26, 0xfc, 0x6d, 0xa2, 0x87, 0x70, 0x7f, - 0xac, 0x9b, 0x76, 0x78, 0x6f, 0x3c, 0xab, 0xd3, 0x1e, 0xcb, 0xe8, 0x31, 0x6c, 0xab, 0xf3, 0x6c, - 0x8a, 0x29, 0x88, 0x67, 0x4c, 0xbb, 0x8f, 0x76, 0xe0, 0xc1, 0xc4, 0x94, 0x4e, 0x5b, 0x6c, 0xb1, - 0x80, 0x0a, 0x8a, 0x0a, 0x36, 0xbb, 0xb8, 0x72, 0xcc, 0x8a, 0xfd, 0x36, 0x8b, 0xbe, 0xc4, 0x29, - 0xe2, 0x07, 0xfc, 0xc4, 0x12, 0x8f, 0xbd, 0x7d, 0xd6, 0xae, 0x37, 0xb4, 0x87, 0xec, 0xc4, 0x32, - 0xee, 0x9e, 0x10, 0x3e, 0x62, 0xf8, 0xa3, 0x16, 0x36, 0x4e, 0x8c, 0xca, 0xa1, 0x79, 0xcc, 0x0f, - 0x34, 0x8d, 0x8a, 0xf6, 0x98, 0x1d, 0x2b, 0x6a, 0x27, 0xf5, 0xa6, 0x79, 0xdc, 0xac, 0x74, 0x4f, - 0x18, 0xe5, 0x0e, 0xf3, 0xcf, 0x45, 0x9c, 0xf7, 0xb8, 0xd5, 0x64, 0xd2, 0x4f, 0x19, 0x9e, 0x4b, - 0x05, 0xb3, 0x14, 0xeb, 0xfa, 0x2b, 0xc8, 0x37, 0xa8, 0xcd, 0x93, 0xb2, 0xee, 0xf5, 0x29, 0x7a, - 0x06, 0x2b, 0xae, 0x15, 0x99, 0xae, 0x37, 0x90, 0xa5, 0x7c, 0x2d, 0xce, 0x41, 0x96, 0xa3, 0x7b, - 0x0d, 0x2b, 0x6a, 0x78, 0x03, 0xbc, 0xec, 0xf2, 0x5f, 0xfd, 0x73, 0xc8, 0xb4, 0x03, 0xea, 0x93, - 0x20, 0xba, 0x46, 0x08, 0x16, 0x3d, 0x6b, 0x48, 0xe4, 0xa9, 0x85, 0x7f, 0xa3, 0x75, 0x58, 0x7a, - 0x67, 0xb9, 0x23, 0x22, 0x8f, 0x2a, 0xa2, 0xa1, 0xff, 0x6e, 0x01, 0x34, 0xc3, 0x8b, 0x9c, 0xe8, - 0x5a, 0x39, 0x49, 0x68, 0xb0, 0x30, 0x74, 0x7a, 0x12, 0xcd, 0x3e, 0xd1, 0x26, 0x2c, 0xbb, 0xd4, - 0xb6, 0xdc, 0x18, 0x2d, 0x5b, 0x68, 0x07, 0x72, 0x3d, 0x12, 0xda, 0x81, 0xe3, 0xf3, 0xad, 0x62, - 0x41, 0x9c, 0x92, 0x14, 0x11, 0x73, 0x1b, 0xda, 0x34, 0x88, 0xcb, 0xb4, 0x68, 0xa0, 0x47, 0x00, - 0x4a, 0x9d, 0x14, 0x35, 0x5a, 0x91, 0x30, 0x7d, 0x44, 0x7d, 0xc7, 0xb6, 0x5c, 0x27, 0xba, 0x96, - 0x55, 0x5a, 0x91, 0x7c, 0x78, 0xd6, 0x59, 0xf9, 0xaf, 0xcf, 0x3a, 0x55, 0xc8, 0xba, 0x32, 0xea, - 0x61, 0x39, 0xc3, 0xcf, 0x26, 0x33, 0x69, 0xd4, 0xe9, 0xc1, 0x63, 0x18, 0xfa, 0x39, 0x80, 0x2f, - 0x62, 0xef, 0x90, 0xb0, 0x9c, 0xe5, 0x24, 0xb3, 0x37, 0x4c, 0x39, 0x4b, 0x58, 0xc1, 0xe8, 0xbf, - 0x4f, 0xc3, 0x7a, 0xc7, 0xea, 0x93, 0x0e, 0xb1, 0x02, 0xfb, 0x8d, 0x32, 0x17, 0x5f, 0xc0, 0x92, - 0xd5, 0x1b, 0xb9, 0x91, 0x3c, 0xed, 0xcf, 0x53, 0x27, 0x04, 0x80, 0x21, 0x43, 0x9f, 0xd2, 0x3e, - 0x9f, 0xb2, 0x39, 0x91, 0x1c, 0x80, 0x5e, 0xc1, 0xca, 0x90, 0xf4, 0x58, 0xac, 0x65, 0x29, 0x99, - 0x07, 0x1b, 0x43, 0xd0, 0x4f, 0x21, 0xf3, 0xce, 0xa1, 0x2e, 0x9f, 0xd9, 0xc5, 0xb9, 0xe1, 0x09, - 0x46, 0x7f, 0x0f, 0x39, 0xb6, 0xb4, 0xa9, 0x37, 0xc0, 0xc4, 0x8e, 0xd0, 0x0b, 0xc8, 0x0d, 0x1d, - 0xcf, 0x9c, 0x23, 0x13, 0xb2, 0x43, 0xc7, 0x13, 0x9f, 0x1c, 0x64, 0x5d, 0x25, 0xa0, 0xf4, 0x6d, - 0x20, 0xeb, 0x4a, 0x7c, 0xea, 0x01, 0x64, 0x6b, 0xec, 0x32, 0xc6, 0x93, 0x6f, 0x17, 0x96, 0xf8, - 0xcd, 0x4c, 0x3a, 0x44, 0x13, 0x58, 0x6e, 0x86, 0x85, 0xc1, 0x78, 0x85, 0xa7, 0xd5, 0x15, 0xfe, - 0x04, 0x8a, 0xbe, 0x73, 0x45, 0x5c, 0xb3, 0x1f, 0x58, 0x76, 0x92, 0x1c, 0x69, 0x5c, 0xe0, 0xd2, - 0x23, 0x29, 0xd4, 0xcf, 0xa0, 0x7c, 0x48, 0x87, 0x8e, 0x67, 0x79, 0x11, 0x27, 0x0d, 0x95, 0xa9, - 0xff, 0x09, 0x2c, 0x73, 0x0f, 0x61, 0x39, 0xc5, 0x57, 0xd4, 0xa7, 0xb3, 0xc2, 0x98, 0xf4, 0x1a, - 0x4b, 0x80, 0xee, 0x42, 0x89, 0xdf, 0x1a, 0xda, 0xc9, 0x0a, 0x43, 0x17, 0x50, 0xea, 0x49, 0x4f, - 0x66, 0x42, 0xcb, 0x86, 0xf6, 0xc3, 0x59, 0xb4, 0xb3, 0x3a, 0x86, 0x8b, 0xbd, 0x09, 0x8d, 0xfe, - 0xa7, 0x14, 0x64, 0x6a, 0x01, 0xf5, 0x4f, 0x1c, 0x2f, 0xfa, 0x5f, 0x5e, 0x43, 0x26, 0x77, 0x89, - 0xf4, 0x07, 0xbb, 0xc4, 0x3e, 0xac, 0x39, 0x43, 0x9f, 0x06, 0x91, 0xe5, 0xd9, 0x64, 0x3a, 0xd0, - 0x68, 0xac, 0x4a, 0xa2, 0xfd, 0x35, 0xac, 0xc5, 0xfd, 0x54, 0x03, 0xfd, 0x33, 0x00, 0x3b, 0xa0, - 0xbe, 0xf9, 0x86, 0xc9, 0x65, 0xb0, 0x67, 0xa6, 0x6f, 0x4c, 0x80, 0xb3, 0x76, 0x4c, 0xa5, 0xff, - 0x18, 0x4a, 0x09, 0x6f, 0xdb, 0x0a, 0xac, 0x61, 0x88, 0x3e, 0x83, 0x82, 0x15, 0xfa, 0xc4, 0x8e, - 0xcc, 0x80, 0x39, 0x11, 0xb4, 0x69, 0x9c, 0x17, 0x42, 0xcc, 0x65, 0xfa, 0x77, 0x29, 0xc8, 0xf3, - 0x79, 0xaa, 0xb1, 0x3b, 0xe1, 0x55, 0x84, 0x8e, 0xa1, 0xc0, 0xd7, 0x2c, 0xf5, 0x06, 0x66, 0x40, - 0xec, 0x48, 0x06, 0x6f, 0xe6, 0xd5, 0x50, 0x49, 0x14, 0x9c, 0x73, 0x95, 0xac, 0x79, 0x02, 0x45, - 0xd7, 0xf2, 0x06, 0x23, 0x76, 0x3f, 0x15, 0xc3, 0x4a, 0xef, 0x2c, 0xec, 0x66, 0x71, 0x21, 0x96, - 0xf2, 0xbe, 0xa2, 0x0e, 0xac, 0x8e, 0x47, 0x6e, 0xfa, 0xbc, 0xeb, 0xf2, 0xc0, 0xf7, 0xbd, 0x8f, - 0x05, 0x40, 0x8e, 0x14, 0x97, 0xec, 0x49, 0x01, 0x1b, 0xd5, 0xba, 0x8c, 0x2e, 0xe1, 0xa3, 0xc3, - 0xe4, 0x37, 0x23, 0x12, 0xb2, 0x54, 0x5e, 0xe2, 0x17, 0x64, 0x39, 0xaa, 0x87, 0xb7, 0x5e, 0x78, - 0xb1, 0xb0, 0x45, 0x2f, 0x21, 0xd3, 0x17, 0x2f, 0x19, 0x62, 0x0c, 0xb9, 0x83, 0xc7, 0x1f, 0x79, - 0xf1, 0xc0, 0x09, 0x80, 0x2d, 0x46, 0x71, 0x47, 0xb7, 0x45, 0x80, 0xf9, 0xda, 0xb8, 0x65, 0x31, - 0xaa, 0x93, 0x81, 0xf3, 0x8e, 0xd2, 0xd2, 0xff, 0xba, 0x02, 0x1b, 0x53, 0xa3, 0x0a, 0x7d, 0xea, - 0x85, 0x04, 0x7d, 0x05, 0x5a, 0xdf, 0xb2, 0x89, 0xf2, 0x58, 0x14, 0x2f, 0xa2, 0xff, 0x9f, 0xef, - 0x08, 0x8e, 0x4b, 0xfd, 0x89, 0x76, 0x88, 0x7e, 0x09, 0xeb, 0xf1, 0xad, 0x71, 0x82, 0x56, 0x04, - 0x60, 0x77, 0x16, 0xed, 0x74, 0x25, 0xc7, 0x6b, 0x31, 0x8b, 0x4a, 0xde, 0x01, 0xcd, 0xa5, 0x03, - 0x3a, 0x41, 0xbc, 0x70, 0x47, 0xe2, 0x12, 0x63, 0x50, 0x49, 0xcf, 0x60, 0xd5, 0xb5, 0x2e, 0x89, - 0x3b, 0xc1, 0xba, 0x78, 0x47, 0x56, 0x8d, 0x53, 0x4c, 0xf5, 0x75, 0xea, 0x21, 0x2e, 0x2c, 0x2f, - 0xdd, 0xb5, 0xaf, 0x8c, 0x41, 0x25, 0xfd, 0x06, 0xd6, 0xfb, 0x23, 0xd7, 0x35, 0xa7, 0x98, 0xf9, - 0x85, 0xf4, 0x96, 0x49, 0xeb, 0x4e, 0xd0, 0x60, 0xc4, 0x38, 0x26, 0x65, 0xe8, 0x12, 0x36, 0x43, - 0xab, 0x4f, 0xcc, 0x90, 0x97, 0x71, 0x95, 0x7b, 0x99, 0x73, 0x3f, 0x9b, 0xc5, 0x7d, 0x53, 0xed, - 0xc7, 0xeb, 0xe1, 0x4d, 0x27, 0x82, 0x01, 0x6c, 0x8b, 0x35, 0x3d, 0x3e, 0x3e, 0xa8, 0x8e, 0x32, - 0xb7, 0x67, 0xef, 0x54, 0x59, 0xc0, 0xf7, 0x9d, 0x49, 0x81, 0xe2, 0xc8, 0x84, 0x0d, 0x65, 0x73, - 0x50, 0x5c, 0xe4, 0xb8, 0x8b, 0xef, 0x7f, 0x74, 0x83, 0x50, 0x17, 0xa2, 0x7d, 0xc3, 0xbe, 0x5b, - 0x87, 0xc2, 0xc4, 0xbb, 0x29, 0xbf, 0xb7, 0xdf, 0x92, 0x9d, 0xe7, 0xe4, 0xf2, 0x30, 0xb6, 0xc5, - 0xf9, 0xf7, 0x4a, 0x8b, 0x95, 0x6b, 0x12, 0x04, 0x34, 0xe0, 0x8f, 0x28, 0x4a, 0xb9, 0x0e, 0x7c, - 0x7b, 0xaf, 0xc3, 0xdf, 0x5e, 0xb1, 0x30, 0xd0, 0xfb, 0xb0, 0x55, 0xb5, 0xa2, 0x24, 0xa2, 0x22, - 0x97, 0xc3, 0x78, 0x8b, 0x3a, 0x81, 0x4c, 0x20, 0x3e, 0xe3, 0x1c, 0x9e, 0x39, 0x65, 0x37, 0x6d, - 0x71, 0x38, 0x41, 0xeb, 0x6f, 0x61, 0xfb, 0x46, 0x3f, 0x72, 0xd3, 0x78, 0x0d, 0xd9, 0x40, 0x7e, - 0xc7, 0x9e, 0x7e, 0x30, 0xa7, 0x27, 0x81, 0xc2, 0x63, 0xfc, 0x53, 0x02, 0xa0, 0x3c, 0x34, 0xe4, - 0x60, 0x45, 0xde, 0xba, 0xb5, 0x4f, 0xd8, 0xa5, 0xe4, 0x6b, 0x03, 0x5f, 0x98, 0x67, 0xcd, 0x46, - 0xfd, 0xb5, 0xd1, 0xb8, 0xd0, 0x52, 0xec, 0x6e, 0x9b, 0xb4, 0xd2, 0xac, 0xd5, 0x6e, 0x75, 0x3a, - 0xf5, 0x6a, 0xc3, 0xd0, 0x16, 0x10, 0xc0, 0xb2, 0xd4, 0x2c, 0xb2, 0x7b, 0x2c, 0x87, 0x4a, 0xc1, - 0xd2, 0xc1, 0x9f, 0x53, 0x50, 0xe4, 0x7d, 0xa8, 0xc4, 0x0f, 0xf4, 0xe8, 0x8f, 0x29, 0x58, 0xbb, - 0x61, 0x98, 0xe8, 0x60, 0x66, 0xb9, 0x9f, 0x19, 0xfb, 0xad, 0x17, 0x77, 0xc2, 0x88, 0xb1, 0xeb, - 0x8f, 0x7e, 0xfb, 0xdd, 0x3f, 0xff, 0x90, 0x2e, 0xeb, 0x6b, 0xc9, 0xdf, 0x07, 0xe1, 0x97, 0x72, - 0xa9, 0x92, 0x2f, 0x53, 0x4f, 0xab, 0x11, 0x6c, 0xd9, 0x74, 0x38, 0x83, 0xb9, 0xba, 0x36, 0x39, - 0x9c, 0x76, 0x40, 0x23, 0xda, 0x4e, 0xfd, 0xe2, 0x95, 0x34, 0x1f, 0x50, 0x56, 0x2e, 0xf7, 0x68, - 0x30, 0xd8, 0x1f, 0x10, 0x8f, 0xbf, 0xc4, 0xef, 0x0b, 0x95, 0xe5, 0x3b, 0xe1, 0xf4, 0x9f, 0x00, - 0x2f, 0xc5, 0xd7, 0xbf, 0x53, 0xa9, 0xcb, 0x65, 0x6e, 0xfb, 0xe2, 0x3f, 0x01, 0x00, 0x00, 0xff, - 0xff, 0xe5, 0x59, 0xbe, 0xb0, 0xe8, 0x18, 0x00, 0x00, + // 2382 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x59, 0x4f, 0x6f, 0xe3, 0xc6, + 0x15, 0x8f, 0xe4, 0x7f, 0xd2, 0x93, 0x2c, 0xd1, 0x23, 0xaf, 0xa3, 0xf5, 0xee, 0x66, 0x1d, 0xa6, + 0x69, 0x8d, 0x6d, 0x2a, 0x37, 0x4e, 0x1a, 0xa4, 0xc9, 0xa2, 0xad, 0x24, 0xd3, 0xb6, 0xb0, 0xb2, + 0xa4, 0x8c, 0xe4, 0x38, 0x6e, 0x83, 0x12, 0x34, 0x35, 0xd2, 0x32, 0xa1, 0x38, 0x2c, 0x49, 0xed, + 0xda, 0xd7, 0x02, 0xfd, 0x04, 0xbd, 0xf7, 0xd8, 0x7b, 0x80, 0x7e, 0x80, 0x5e, 0x7a, 0xe8, 0xb1, + 0xc8, 0x57, 0xe8, 0x37, 0x28, 0x50, 0xf4, 0x58, 0xcc, 0x1f, 0x52, 0x43, 0xad, 0xb5, 0x2b, 0x17, + 0x3d, 0x89, 0xf3, 0xde, 0xfb, 0xfd, 0xde, 0xcc, 0x9b, 0x79, 0x33, 0x6f, 0x46, 0xf0, 0xc1, 0x98, + 0xd2, 0xb1, 0x4b, 0x0e, 0x6c, 0x97, 0x4e, 0x87, 0x07, 0x2f, 0x9c, 0xd0, 0xa1, 0xde, 0xc1, 0x8b, + 0x0f, 0x0f, 0x9c, 0x89, 0x35, 0x26, 0xa6, 0xe5, 0x79, 0x34, 0xb2, 0x22, 0x1a, 0xd4, 0xfc, 0x80, + 0x46, 0x14, 0xed, 0x08, 0xeb, 0x1a, 0xb7, 0xae, 0x09, 0xeb, 0xda, 0x8b, 0x0f, 0x77, 0x1f, 0x4a, + 0x16, 0xcb, 0x77, 0x0e, 0x24, 0xc6, 0xa1, 0x5e, 0x28, 0x50, 0xbb, 0xef, 0x2f, 0xf0, 0x31, 0x26, + 0x74, 0x42, 0xa2, 0xe0, 0x46, 0x9a, 0x2d, 0xea, 0x4a, 0x44, 0xae, 0x23, 0x73, 0xc6, 0x2a, 0xad, + 0x9f, 0x2c, 0xb0, 0x7e, 0x49, 0xae, 0xcc, 0x21, 0x89, 0x88, 0xad, 0xd8, 0xbe, 0x2d, 0x6d, 0x03, + 0xdf, 0x3e, 0x08, 0x23, 0x2b, 0x9a, 0x86, 0x73, 0x8a, 0xe8, 0xc6, 0x27, 0x07, 0x36, 0x75, 0xe3, + 0x81, 0xee, 0x56, 0x55, 0x85, 0x6b, 0x45, 0xae, 0x37, 0x16, 0x1a, 0xfd, 0x5f, 0x59, 0xd8, 0x38, + 0x26, 0x56, 0x34, 0x0d, 0x08, 0xfa, 0x14, 0x56, 0x99, 0x41, 0x35, 0xb3, 0x97, 0xd9, 0x2f, 0x1d, + 0xfe, 0xa0, 0x76, 0x7b, 0x74, 0x6a, 0xd2, 0xbc, 0x36, 0xb8, 0xf1, 0x09, 0xe6, 0x08, 0xf4, 0x18, + 0x0a, 0x13, 0xeb, 0xda, 0x0c, 0x48, 0x38, 0x75, 0xa3, 0xb0, 0x9a, 0xdd, 0xcb, 0xec, 0xaf, 0x61, + 0x98, 0x58, 0xd7, 0x58, 0x48, 0xd0, 0x36, 0xac, 0x4d, 0xe8, 0x90, 0xb8, 0xd5, 0x95, 0xbd, 0xcc, + 0x7e, 0x1e, 0x8b, 0x86, 0xfe, 0xef, 0x0c, 0xac, 0x32, 0x16, 0xb4, 0x0d, 0xda, 0xe0, 0xb2, 0x67, + 0x98, 0xe7, 0x9d, 0x7e, 0xcf, 0x68, 0xb6, 0x8e, 0x5b, 0xc6, 0x91, 0xf6, 0x16, 0x42, 0x50, 0x3a, + 0xae, 0x37, 0x0d, 0xf3, 0xc8, 0x18, 0x18, 0xcd, 0x41, 0xab, 0xdb, 0xd1, 0x32, 0x68, 0x07, 0x50, + 0xbb, 0xde, 0x39, 0x3a, 0xab, 0xe3, 0x67, 0x8a, 0x3c, 0xcb, 0x6c, 0xdb, 0xdd, 0x93, 0xae, 0x22, + 0x5b, 0x41, 0x15, 0x28, 0xb7, 0xeb, 0x0d, 0xa3, 0xad, 0x08, 0x57, 0x99, 0xe1, 0xc0, 0xf8, 0x6a, + 0xa0, 0xc8, 0xd6, 0xd0, 0x03, 0x78, 0xfb, 0xa8, 0xdb, 0x3c, 0x3f, 0x33, 0x3a, 0x03, 0x73, 0x4e, + 0x59, 0x40, 0xf7, 0xe1, 0x5e, 0xbf, 0x7e, 0x6c, 0x98, 0x7d, 0xa3, 0x8e, 0x9b, 0xa7, 0x8a, 0x6a, + 0x9d, 0x75, 0xbb, 0x75, 0x56, 0x3f, 0x31, 0xcc, 0x1e, 0xee, 0xf6, 0x0c, 0x3c, 0x68, 0x19, 0x7d, + 0x6d, 0x03, 0x95, 0x00, 0x9a, 0xb8, 0xdb, 0x33, 0x4f, 0x5b, 0x9d, 0x41, 0x5f, 0xcb, 0xa3, 0x2d, + 0xd8, 0xbc, 0x30, 0x1a, 0x0a, 0x10, 0xf4, 0x0e, 0x14, 0x5a, 0x6c, 0x45, 0xf6, 0xe9, 0x34, 0xb0, + 0x09, 0xd2, 0x61, 0x73, 0x6c, 0x87, 0xa6, 0x58, 0xa4, 0xd3, 0xc0, 0xe1, 0x33, 0x90, 0xc7, 0x85, + 0xb1, 0x1d, 0x72, 0xb3, 0xf3, 0xc0, 0x41, 0x0f, 0x20, 0x3f, 0xd3, 0x67, 0xb9, 0x3e, 0xe7, 0x48, + 0xa5, 0xfe, 0x5b, 0x58, 0xe3, 0x86, 0xa8, 0x0a, 0x1b, 0x36, 0xf5, 0x22, 0xe2, 0x45, 0x9c, 0xa3, + 0x88, 0xe3, 0x26, 0xfa, 0x1c, 0xd6, 0x43, 0xee, 0x8d, 0x83, 0x0b, 0x87, 0xef, 0x2d, 0x9a, 0x5e, + 0xa5, 0x63, 0x58, 0x42, 0xf4, 0x7f, 0x94, 0xa1, 0x74, 0x6c, 0xd9, 0xa4, 0x9e, 0x2c, 0x5b, 0xd4, + 0x82, 0xcd, 0x2b, 0x3a, 0xf5, 0x86, 0x8e, 0x37, 0x36, 0x7d, 0xea, 0xde, 0x70, 0x7f, 0x85, 0xc5, + 0xab, 0xa6, 0x21, 0x8d, 0x7b, 0xd4, 0xbd, 0xc1, 0xc5, 0x2b, 0xa5, 0x85, 0x3a, 0xa0, 0x8d, 0x86, + 0x66, 0x9a, 0x2d, 0x7b, 0x07, 0xb6, 0xd2, 0x68, 0xa8, 0xb6, 0xd1, 0x19, 0xe4, 0x5d, 0xcb, 0x1b, + 0x4e, 0xac, 0xe0, 0xdb, 0xb0, 0xba, 0xb2, 0xb7, 0xb2, 0x5f, 0x38, 0x3c, 0x58, 0xb8, 0x98, 0x53, + 0xa3, 0xaa, 0xb5, 0x25, 0x0e, 0xcf, 0x18, 0xd0, 0x23, 0x80, 0x80, 0xba, 0xae, 0x69, 0x79, 0x63, + 0x97, 0x54, 0x57, 0xf7, 0x32, 0xfb, 0x59, 0x9c, 0x67, 0x92, 0x3a, 0x13, 0xb0, 0x89, 0xf1, 0x2d, + 0x4f, 0x6a, 0xd7, 0xb8, 0x36, 0xe7, 0x5b, 0x9e, 0x50, 0x3e, 0x02, 0x88, 0x1c, 0x37, 0x92, 0xda, + 0x75, 0x81, 0x65, 0x12, 0xa1, 0xfe, 0x10, 0xb6, 0x93, 0xe4, 0x36, 0x6d, 0xea, 0x8d, 0x9c, 0x21, + 0xf1, 0x6c, 0x52, 0xdd, 0xe0, 0x86, 0x95, 0x44, 0xd7, 0x4c, 0x54, 0xe8, 0x67, 0xb0, 0x13, 0x77, + 0x8d, 0x05, 0x4b, 0x01, 0xe5, 0x38, 0xe8, 0x9e, 0xa2, 0x55, 0x60, 0x2d, 0x28, 0x7d, 0x43, 0x6f, + 0x4c, 0xd7, 0xf9, 0x96, 0xb8, 0xce, 0x73, 0x4a, 0x87, 0xd5, 0x3c, 0xcf, 0x72, 0x7d, 0x51, 0x60, + 0xda, 0x89, 0x25, 0xde, 0xfc, 0x86, 0xde, 0xcc, 0x9a, 0xa8, 0x0b, 0x5b, 0x21, 0x0d, 0x02, 0xfa, + 0x52, 0x65, 0x83, 0xa5, 0xd9, 0x34, 0x01, 0x56, 0x08, 0xcf, 0x40, 0xb3, 0xbc, 0x31, 0x09, 0x54, + 0xbe, 0xc2, 0xd2, 0x7c, 0x65, 0x8e, 0x55, 0xe8, 0xfa, 0x50, 0x09, 0xa7, 0x81, 0x1f, 0x38, 0x21, + 0x51, 0x19, 0x8b, 0x4b, 0x33, 0xa2, 0x18, 0xae, 0x90, 0x7e, 0x0d, 0xd5, 0xa9, 0x37, 0x24, 0x81, + 0x49, 0xae, 0x7d, 0x1a, 0x92, 0xa1, 0xca, 0xbc, 0xb9, 0x34, 0xf3, 0x0e, 0xe7, 0x30, 0x04, 0x85, + 0xc2, 0xfe, 0x05, 0xa0, 0x2b, 0x77, 0x1a, 0x04, 0x69, 0xde, 0xd2, 0xd2, 0xbc, 0x5b, 0x12, 0x9d, + 0x8e, 0xc2, 0x73, 0x62, 0x0d, 0x5f, 0x12, 0x2b, 0x15, 0xd7, 0xf2, 0xf2, 0x51, 0x88, 0xe1, 0x33, + 0xd9, 0xee, 0xdf, 0x37, 0x20, 0x17, 0xa7, 0x08, 0x3a, 0x95, 0xc7, 0xc5, 0x0a, 0xa7, 0xfc, 0xf8, + 0x8e, 0x19, 0xa6, 0x1e, 0x1f, 0x4f, 0x21, 0xe7, 0xd3, 0xd0, 0x61, 0x7a, 0x9e, 0x5f, 0x85, 0xc3, + 0xbd, 0x45, 0x6c, 0x3d, 0x69, 0x87, 0x13, 0x84, 0xfe, 0x97, 0xf5, 0xd9, 0x29, 0x72, 0xde, 0x79, + 0xd6, 0xe9, 0x5e, 0x74, 0xcc, 0xf8, 0x8c, 0xd0, 0xde, 0x42, 0x45, 0xc8, 0xb5, 0x8d, 0xe3, 0x81, + 0x69, 0x5c, 0x1a, 0x5a, 0x06, 0x6d, 0x42, 0x1e, 0xb7, 0x4e, 0x4e, 0x45, 0x33, 0x8b, 0xaa, 0xb0, + 0xcd, 0x95, 0xdd, 0x63, 0x33, 0x36, 0x6a, 0xe0, 0xee, 0x85, 0xb6, 0xc2, 0xb6, 0x7d, 0x61, 0x38, + 0xaf, 0x5a, 0x65, 0xaa, 0x18, 0x94, 0x70, 0x71, 0xd5, 0x1a, 0xda, 0x85, 0x9d, 0x04, 0x95, 0xd6, + 0xad, 0x33, 0xd8, 0x59, 0xeb, 0xa8, 0xd7, 0x6d, 0x75, 0x06, 0x66, 0xc3, 0x18, 0x5c, 0x18, 0x46, + 0x87, 0x69, 0xd9, 0x91, 0x51, 0x84, 0x5c, 0xa7, 0xdb, 0x37, 0xcc, 0x41, 0xab, 0xa7, 0xe5, 0x58, + 0x1f, 0xcf, 0x7b, 0x3d, 0x03, 0x9b, 0xed, 0x56, 0x4f, 0xcb, 0xb3, 0x66, 0xbb, 0x7b, 0x21, 0x9b, + 0xc0, 0x8e, 0x97, 0xb3, 0xee, 0xf9, 0xe0, 0x94, 0xf7, 0x4a, 0x2b, 0xa0, 0x32, 0x14, 0x44, 0x9b, + 0xfb, 0xd3, 0x8a, 0x48, 0x83, 0xa2, 0x10, 0x34, 0x8d, 0xce, 0xc0, 0xc0, 0xda, 0x26, 0xba, 0x07, + 0x5b, 0x9c, 0xbe, 0xd1, 0x1d, 0x0c, 0xba, 0x67, 0xd2, 0xb0, 0xc4, 0xe2, 0xa5, 0x8a, 0x39, 0x5f, + 0x99, 0x9d, 0xb0, 0xaa, 0x54, 0x92, 0x68, 0xc9, 0xa8, 0x8d, 0x4b, 0xc3, 0x1c, 0x74, 0x7b, 0x66, + 0xa3, 0x7b, 0xde, 0x39, 0xaa, 0xe3, 0x4b, 0x6d, 0x2b, 0xa5, 0x12, 0xa3, 0x6e, 0x76, 0x71, 0xc7, + 0xc0, 0x1a, 0x42, 0x0f, 0xa1, 0x9a, 0xa8, 0x24, 0x63, 0x02, 0xac, 0x24, 0xe1, 0x67, 0x5a, 0xfe, + 0x21, 0x71, 0xdb, 0xb3, 0x40, 0xbe, 0xe2, 0xee, 0x5e, 0x5a, 0x97, 0xf2, 0xb7, 0x83, 0x1e, 0xc1, + 0xfd, 0x99, 0x6e, 0xde, 0xe1, 0xdb, 0xb3, 0x59, 0x9d, 0xf7, 0x58, 0x45, 0x8f, 0xe1, 0x81, 0x3a, + 0xcf, 0xa6, 0x98, 0x82, 0x78, 0xc6, 0xb4, 0xfb, 0x68, 0x0f, 0x1e, 0xa6, 0xa6, 0x74, 0xde, 0x62, + 0x97, 0x05, 0x54, 0x50, 0xd4, 0xb1, 0x39, 0xc0, 0xf5, 0x13, 0x76, 0xd8, 0x3f, 0x60, 0xd1, 0x97, + 0x38, 0x45, 0xfc, 0x90, 0x57, 0x2c, 0xf1, 0xd8, 0x7b, 0xe7, 0xbd, 0x56, 0x5b, 0x7b, 0xc4, 0x2a, + 0x96, 0x59, 0xf7, 0x84, 0xf0, 0x1d, 0x86, 0x3f, 0xee, 0x62, 0xe3, 0xd4, 0xa8, 0x1f, 0x99, 0x27, + 0xbc, 0xa0, 0x69, 0xd7, 0xb5, 0xc7, 0xac, 0xac, 0x68, 0x9e, 0xb6, 0x3a, 0xe6, 0x49, 0xa7, 0x3e, + 0x38, 0x65, 0x94, 0x7b, 0xcc, 0x3f, 0x17, 0x71, 0xde, 0x93, 0x6e, 0x87, 0x49, 0xdf, 0x65, 0x78, + 0x2e, 0x15, 0xcc, 0x52, 0xac, 0xeb, 0x4f, 0xa1, 0xd8, 0xa6, 0x36, 0x4f, 0xca, 0x96, 0x37, 0xa2, + 0xe8, 0x03, 0xd8, 0x70, 0xad, 0xc8, 0x74, 0xbd, 0xb1, 0x3c, 0xca, 0x2b, 0x71, 0x0e, 0xb2, 0x1c, + 0xad, 0xb5, 0xad, 0xa8, 0xed, 0x8d, 0xf1, 0xba, 0xcb, 0x7f, 0xf5, 0x0b, 0xc8, 0xf5, 0x02, 0xea, + 0x93, 0x20, 0xba, 0x41, 0x08, 0x56, 0x3d, 0x6b, 0x42, 0x64, 0xd5, 0xc2, 0xbf, 0x59, 0xc1, 0xf7, + 0xc2, 0x72, 0xa7, 0x44, 0x96, 0x2a, 0xa2, 0x81, 0xde, 0x85, 0xe2, 0xd4, 0xf1, 0xa2, 0x4f, 0x3e, + 0x36, 0x85, 0x92, 0x6d, 0x1d, 0xab, 0xb8, 0x20, 0x64, 0x5f, 0x32, 0x91, 0xfe, 0x87, 0x15, 0xd0, + 0x0c, 0x2f, 0x72, 0xa2, 0x1b, 0xa5, 0xd8, 0xd0, 0x60, 0x65, 0xe2, 0x0c, 0xa5, 0x03, 0xf6, 0x89, + 0x76, 0x60, 0xdd, 0xa5, 0xb6, 0xe5, 0xc6, 0x0e, 0x64, 0x0b, 0xed, 0x41, 0x61, 0x48, 0x42, 0x3b, + 0x70, 0x7c, 0xbe, 0x9b, 0x88, 0x72, 0x53, 0x15, 0xb1, 0x9e, 0x85, 0x36, 0x0d, 0xe2, 0x93, 0x5c, + 0x34, 0xd0, 0x3b, 0x00, 0xca, 0x51, 0x2a, 0x8e, 0x71, 0x45, 0xc2, 0xf4, 0x11, 0xf5, 0x1d, 0xdb, + 0x72, 0x9d, 0xe8, 0x46, 0x1e, 0xe4, 0x8a, 0xe4, 0xd5, 0x72, 0x68, 0xe3, 0x7f, 0x2e, 0x87, 0x1a, + 0x90, 0x77, 0xe5, 0xc4, 0x84, 0xd5, 0x1c, 0x2f, 0x5f, 0x16, 0xd2, 0xa8, 0x33, 0x88, 0x67, 0x30, + 0xf4, 0x2b, 0x00, 0x5f, 0x4c, 0x8f, 0x43, 0xc2, 0x6a, 0x9e, 0x93, 0x2c, 0xde, 0x53, 0xe5, 0x44, + 0x62, 0x05, 0xa3, 0xff, 0x35, 0x0b, 0xdb, 0x7d, 0x6b, 0x44, 0xfa, 0xc4, 0x0a, 0xec, 0xe7, 0xca, + 0x5c, 0x7c, 0x0a, 0x6b, 0xd6, 0x70, 0xea, 0x46, 0xf2, 0x9a, 0xb0, 0xcc, 0x51, 0x22, 0x00, 0x0c, + 0x19, 0xfa, 0x94, 0x8e, 0xf8, 0x94, 0x2d, 0x89, 0xe4, 0x00, 0xf4, 0x14, 0x36, 0x26, 0x64, 0xc8, + 0x62, 0x2d, 0x4f, 0x9b, 0x65, 0xb0, 0x31, 0x04, 0xfd, 0x02, 0x72, 0x2f, 0x1c, 0xea, 0xf2, 0x99, + 0x5d, 0x5d, 0x1a, 0x9e, 0x60, 0xd0, 0x27, 0xb0, 0x1a, 0x58, 0xf6, 0xcd, 0x1d, 0x2a, 0x26, 0x6e, + 0xaf, 0xbf, 0x84, 0x02, 0xcb, 0x1a, 0xea, 0x8d, 0x31, 0xb1, 0x23, 0xf4, 0x11, 0x14, 0x26, 0x8e, + 0x67, 0x2e, 0x91, 0x64, 0xf9, 0x89, 0xe3, 0x89, 0x4f, 0x0e, 0xb2, 0xae, 0x13, 0x50, 0xf6, 0x75, + 0x20, 0xeb, 0x5a, 0x7c, 0xea, 0x01, 0xe4, 0x9b, 0xec, 0xf6, 0xc7, 0xf3, 0x7a, 0x1f, 0xd6, 0xf8, + 0x55, 0x50, 0x3a, 0x44, 0x29, 0x2c, 0x37, 0xc3, 0xc2, 0x60, 0x96, 0x19, 0x59, 0x35, 0x33, 0xde, + 0x87, 0x92, 0xef, 0x5c, 0x13, 0xd7, 0x1c, 0x05, 0x96, 0x9d, 0x24, 0x55, 0x16, 0x6f, 0x72, 0xe9, + 0xb1, 0x14, 0xea, 0xe7, 0x50, 0x3d, 0xa2, 0x13, 0xc7, 0xb3, 0xbc, 0x88, 0x93, 0x86, 0xca, 0x92, + 0xf9, 0x39, 0xac, 0x73, 0x0f, 0x61, 0x35, 0xc3, 0x57, 0xe2, 0xbb, 0x8b, 0x42, 0x98, 0xf4, 0x1a, + 0x4b, 0x80, 0xee, 0x42, 0x99, 0x5f, 0x48, 0x7a, 0xc9, 0xca, 0x44, 0x97, 0x50, 0x1e, 0x4a, 0x4f, + 0x66, 0x42, 0xcb, 0x86, 0xf6, 0xd3, 0x45, 0xb4, 0x8b, 0x3a, 0x86, 0x4b, 0xc3, 0x94, 0x46, 0xff, + 0x73, 0x06, 0x72, 0xcd, 0x80, 0xfa, 0xa7, 0x8e, 0x17, 0xfd, 0x3f, 0x6f, 0x38, 0xe9, 0xdd, 0x25, + 0xfb, 0xca, 0xee, 0x72, 0x00, 0x15, 0x67, 0xe2, 0xd3, 0x20, 0xb2, 0x3c, 0x9b, 0xcc, 0x07, 0x1a, + 0xcd, 0x54, 0x49, 0xb4, 0xbf, 0x84, 0x4a, 0xdc, 0x4f, 0x35, 0xd0, 0xbf, 0x04, 0xb0, 0x03, 0xea, + 0x9b, 0xcf, 0x99, 0x5c, 0x06, 0x7b, 0x61, 0xda, 0xc7, 0x04, 0x38, 0x6f, 0xc7, 0x54, 0xfa, 0x27, + 0x50, 0x4e, 0x78, 0x7b, 0x56, 0x60, 0x4d, 0x42, 0xf4, 0x1e, 0x6c, 0x5a, 0xa1, 0x4f, 0xec, 0xc8, + 0x0c, 0x98, 0x13, 0x41, 0x9b, 0xc5, 0x45, 0x21, 0xc4, 0x5c, 0xa6, 0x1f, 0x01, 0xba, 0x20, 0x57, + 0x47, 0xf1, 0x7d, 0x45, 0x42, 0x6b, 0x50, 0x71, 0x3c, 0xdb, 0x9d, 0x0e, 0x89, 0x39, 0x26, 0x34, + 0xf5, 0x3c, 0x90, 0xc3, 0x5b, 0x52, 0x75, 0x42, 0xa8, 0x7c, 0x25, 0xd0, 0xbf, 0xcb, 0x42, 0x91, + 0xcf, 0x76, 0x93, 0x5d, 0x5a, 0xaf, 0x23, 0x74, 0x02, 0x9b, 0x7c, 0xe5, 0x53, 0x6f, 0x6c, 0x06, + 0xc4, 0x8e, 0xe4, 0x14, 0x2c, 0xbc, 0xbb, 0x2a, 0xe9, 0x86, 0x0b, 0xae, 0x92, 0x7b, 0xef, 0x43, + 0xc9, 0xb5, 0xbc, 0xf1, 0x94, 0x5d, 0xa0, 0x45, 0x70, 0xb2, 0x7b, 0x2b, 0xfb, 0x79, 0xbc, 0x19, + 0x4b, 0xf9, 0x88, 0x51, 0x1f, 0xb6, 0x66, 0xf1, 0x33, 0x7d, 0x3e, 0x0a, 0x59, 0x91, 0xfe, 0xe8, + 0x4d, 0x61, 0x94, 0xf1, 0xc2, 0x65, 0x7b, 0x2e, 0x80, 0x5f, 0xc3, 0x76, 0xea, 0x15, 0x27, 0xe6, + 0x5d, 0xe7, 0xbc, 0x4f, 0x16, 0xf1, 0xbe, 0x1a, 0x4f, 0x8c, 0x5e, 0xbe, 0x22, 0xd3, 0xbf, 0xcf, + 0xc0, 0xb6, 0x5c, 0x01, 0x84, 0xc7, 0x0e, 0x93, 0xdf, 0x4d, 0x49, 0xc8, 0xb6, 0x9b, 0x35, 0xfe, + 0x3e, 0x20, 0x63, 0xf6, 0xe8, 0xb5, 0xf7, 0x7d, 0x2c, 0x6c, 0xd1, 0xe7, 0x90, 0x1b, 0x89, 0xe7, + 0x1d, 0x11, 0xa1, 0xc2, 0xe1, 0xe3, 0x37, 0x3c, 0x03, 0xe1, 0x04, 0xc0, 0x12, 0x46, 0x3c, 0x51, + 0xd8, 0x62, 0xfa, 0xf8, 0xfa, 0x7d, 0x4d, 0xc2, 0xa8, 0x53, 0x8d, 0x8b, 0x8e, 0xd2, 0xd2, 0xff, + 0xb6, 0x01, 0xf7, 0xe6, 0x46, 0x15, 0xfa, 0xd4, 0x0b, 0x09, 0xfa, 0x02, 0xb4, 0x91, 0x65, 0x13, + 0xe5, 0x05, 0x2d, 0x5e, 0xe8, 0x3f, 0x5c, 0xee, 0x06, 0x82, 0xcb, 0xa3, 0x54, 0x3b, 0x44, 0xbf, + 0x81, 0xed, 0xf8, 0xd2, 0x9c, 0xa2, 0x15, 0x01, 0xd8, 0x5f, 0x44, 0x3b, 0x5f, 0xa5, 0xe0, 0x4a, + 0xcc, 0xa2, 0x92, 0xf7, 0x41, 0x73, 0xe9, 0x98, 0xa6, 0x88, 0x57, 0xee, 0x48, 0x5c, 0x66, 0x0c, + 0x2a, 0xe9, 0x39, 0x6c, 0xb9, 0xd6, 0x15, 0x71, 0x53, 0xac, 0xab, 0x77, 0x64, 0xd5, 0x38, 0xc5, + 0x5c, 0x5f, 0xe7, 0x5e, 0x27, 0xc3, 0xea, 0xda, 0x5d, 0xfb, 0xca, 0x18, 0x54, 0xd2, 0xaf, 0x60, + 0x7b, 0x34, 0x75, 0x5d, 0x73, 0x8e, 0x99, 0xdf, 0xc7, 0x5f, 0x33, 0x69, 0x83, 0x14, 0x0d, 0x46, + 0x8c, 0x23, 0x2d, 0x43, 0x57, 0xb0, 0x13, 0x5a, 0x23, 0x62, 0x86, 0xbc, 0x44, 0x51, 0xb9, 0x45, + 0x6a, 0x7d, 0xb0, 0x88, 0xfb, 0xb6, 0xba, 0x06, 0x6f, 0x87, 0xb7, 0x55, 0x3b, 0x63, 0x78, 0x20, + 0xd6, 0xf4, 0xac, 0x34, 0x52, 0x1d, 0xe5, 0x5e, 0xbf, 0x37, 0xcc, 0x1d, 0x5d, 0xf8, 0xbe, 0x93, + 0x16, 0x28, 0x8e, 0x4c, 0xb8, 0xa7, 0x6c, 0x3d, 0x8a, 0x8b, 0x02, 0x77, 0xf1, 0xe3, 0x37, 0x6e, + 0x3f, 0xea, 0x42, 0xb4, 0x6f, 0x39, 0x1b, 0x5a, 0xb0, 0x99, 0xda, 0x86, 0xf8, 0xb3, 0xc5, 0x6b, + 0xb2, 0x53, 0xdd, 0x7f, 0x70, 0x51, 0xdd, 0x79, 0x58, 0x49, 0x41, 0x82, 0x80, 0x06, 0xbc, 0x22, + 0x52, 0x4a, 0x8a, 0xc0, 0xb7, 0x6b, 0x7d, 0xfe, 0x20, 0x8d, 0x85, 0x81, 0x3e, 0x82, 0xdd, 0x86, + 0x15, 0x25, 0x11, 0x15, 0xb9, 0x1c, 0xc6, 0x5b, 0xd4, 0x29, 0xe4, 0x02, 0xf1, 0x19, 0xe7, 0xf0, + 0xc2, 0x29, 0xbb, 0x6d, 0x8b, 0xc3, 0x09, 0x5a, 0xff, 0x06, 0x1e, 0xdc, 0xea, 0x47, 0x6e, 0x1a, + 0xcf, 0x20, 0x1f, 0xc8, 0xef, 0xd8, 0xd3, 0x4f, 0x96, 0xf4, 0x24, 0x50, 0x78, 0x86, 0x7f, 0x42, + 0x00, 0x94, 0x77, 0x96, 0x02, 0x6c, 0xc8, 0x47, 0x07, 0xed, 0x2d, 0x76, 0x27, 0xfb, 0xd2, 0xc0, + 0x97, 0xe6, 0x79, 0xa7, 0xdd, 0x7a, 0x66, 0xb4, 0x2f, 0xb5, 0x0c, 0xbb, 0xda, 0x27, 0xad, 0x2c, + 0x6b, 0xf5, 0xba, 0xfd, 0x7e, 0xab, 0xd1, 0x36, 0xb4, 0x15, 0x04, 0xb0, 0x2e, 0x35, 0xab, 0xec, + 0x1a, 0xcf, 0xa1, 0x52, 0xb0, 0x76, 0xf8, 0x5d, 0x06, 0x4a, 0xbc, 0x0f, 0xf5, 0xf8, 0x5f, 0x0b, + 0xf4, 0xa7, 0x0c, 0x54, 0x6e, 0x19, 0x26, 0x3a, 0x5c, 0x58, 0x92, 0x2c, 0x8c, 0xfd, 0xee, 0x47, + 0x77, 0xc2, 0x88, 0xb1, 0xeb, 0xef, 0xfc, 0xfe, 0xfb, 0x7f, 0xfe, 0x31, 0x5b, 0xd5, 0x2b, 0xc9, + 0x7f, 0x2a, 0xe1, 0x67, 0x72, 0xa9, 0x92, 0xcf, 0x32, 0x4f, 0x1a, 0x11, 0xec, 0xda, 0x74, 0xb2, + 0x80, 0xb9, 0x51, 0x49, 0x0f, 0xa7, 0x17, 0xd0, 0x88, 0xf6, 0x32, 0xbf, 0x7e, 0x2a, 0xcd, 0xc7, + 0x94, 0x1d, 0xc6, 0x35, 0x1a, 0x8c, 0x0f, 0xc6, 0xc4, 0xe3, 0x7f, 0x4f, 0x1c, 0x08, 0x95, 0xe5, + 0x3b, 0xe1, 0xfc, 0x3f, 0x23, 0x9f, 0x8b, 0xaf, 0xff, 0x64, 0x32, 0x57, 0xeb, 0xdc, 0xf6, 0xa3, + 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0xf4, 0xbf, 0x21, 0x35, 0xfd, 0x19, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1/text_annotation.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1/text_annotation.pb.go index 7262706..ebe5248 100644 --- a/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1/text_annotation.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1/text_annotation.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/cloud/vision/v1/text_annotation.proto -// DO NOT EDIT! package vision @@ -26,10 +25,9 @@ const ( TextAnnotation_DetectedBreak_SURE_SPACE TextAnnotation_DetectedBreak_BreakType = 2 // Line-wrapping break. TextAnnotation_DetectedBreak_EOL_SURE_SPACE TextAnnotation_DetectedBreak_BreakType = 3 - // End-line hyphen that is not present in text; does + // End-line hyphen that is not present in text; does not co-occur with + // `SPACE`, `LEADER_SPACE`, or `LINE_BREAK`. TextAnnotation_DetectedBreak_HYPHEN TextAnnotation_DetectedBreak_BreakType = 4 - // not co-occur with SPACE, LEADER_SPACE, or - // LINE_BREAK. // Line break that ends a paragraph. TextAnnotation_DetectedBreak_LINE_BREAK TextAnnotation_DetectedBreak_BreakType = 5 ) @@ -102,9 +100,9 @@ func (Block_BlockType) EnumDescriptor() ([]byte, []int) { return fileDescriptor2 // The hierarchy of an OCR extracted text structure is like this: // TextAnnotation -> Page -> Block -> Paragraph -> Word -> Symbol // Each structural component, starting from Page, may further have their own -// properties. Properties describe detected languages, breaks etc.. Please -// refer to the [google.cloud.vision.v1.TextAnnotation.TextProperty][google.cloud.vision.v1.TextAnnotation.TextProperty] message -// definition below for more detail. +// properties. Properties describe detected languages, breaks etc.. Please refer +// to the [TextAnnotation.TextProperty][google.cloud.vision.v1.TextAnnotation.TextProperty] message definition below for more +// detail. type TextAnnotation struct { // List of pages detected by OCR. Pages []*Page `protobuf:"bytes,1,rep,name=pages" json:"pages,omitempty"` @@ -164,6 +162,7 @@ func (m *TextAnnotation_DetectedLanguage) GetConfidence() float32 { // Detected start or end of a structural component. type TextAnnotation_DetectedBreak struct { + // Detected break type. Type TextAnnotation_DetectedBreak_BreakType `protobuf:"varint,1,opt,name=type,enum=google.cloud.vision.v1.TextAnnotation_DetectedBreak_BreakType" json:"type,omitempty"` // True if break prepends the element. IsPrefix bool `protobuf:"varint,2,opt,name=is_prefix,json=isPrefix" json:"is_prefix,omitempty"` @@ -225,6 +224,8 @@ type Page struct { Height int32 `protobuf:"varint,3,opt,name=height" json:"height,omitempty"` // List of blocks of text, images etc on this page. Blocks []*Block `protobuf:"bytes,4,rep,name=blocks" json:"blocks,omitempty"` + // Confidence of the OCR results on the page. Range [0, 1]. + Confidence float32 `protobuf:"fixed32,5,opt,name=confidence" json:"confidence,omitempty"` } func (m *Page) Reset() { *m = Page{} } @@ -260,6 +261,13 @@ func (m *Page) GetBlocks() []*Block { return nil } +func (m *Page) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + // Logical element on the page. type Block struct { // Additional information detected for the block. @@ -270,20 +278,27 @@ type Block struct { // is represented as around the top-left corner as defined when the text is // read in the 'natural' orientation. // For example: - // * when the text is horizontal it might look like: - // 0----1 - // | | - // 3----2 - // * when it's rotated 180 degrees around the top-left corner it becomes: - // 2----3 - // | | - // 1----0 + // + // * when the text is horizontal it might look like: + // + // 0----1 + // | | + // 3----2 + // + // * when it's rotated 180 degrees around the top-left corner it becomes: + // + // 2----3 + // | | + // 1----0 + // // and the vertice order will still be (0, 1, 2, 3). BoundingBox *BoundingPoly `protobuf:"bytes,2,opt,name=bounding_box,json=boundingBox" json:"bounding_box,omitempty"` // List of paragraphs in this block (if this blocks is of type text). Paragraphs []*Paragraph `protobuf:"bytes,3,rep,name=paragraphs" json:"paragraphs,omitempty"` // Detected block type (text, image etc) for this block. BlockType Block_BlockType `protobuf:"varint,4,opt,name=block_type,json=blockType,enum=google.cloud.vision.v1.Block_BlockType" json:"block_type,omitempty"` + // Confidence of the OCR results on the block. Range [0, 1]. + Confidence float32 `protobuf:"fixed32,5,opt,name=confidence" json:"confidence,omitempty"` } func (m *Block) Reset() { *m = Block{} } @@ -319,6 +334,13 @@ func (m *Block) GetBlockType() Block_BlockType { return Block_UNKNOWN } +func (m *Block) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + // Structural unit of text representing a number of words in certain order. type Paragraph struct { // Additional information detected for the paragraph. @@ -341,6 +363,8 @@ type Paragraph struct { BoundingBox *BoundingPoly `protobuf:"bytes,2,opt,name=bounding_box,json=boundingBox" json:"bounding_box,omitempty"` // List of words in this paragraph. Words []*Word `protobuf:"bytes,3,rep,name=words" json:"words,omitempty"` + // Confidence of the OCR results for the paragraph. Range [0, 1]. + Confidence float32 `protobuf:"fixed32,4,opt,name=confidence" json:"confidence,omitempty"` } func (m *Paragraph) Reset() { *m = Paragraph{} } @@ -369,6 +393,13 @@ func (m *Paragraph) GetWords() []*Word { return nil } +func (m *Paragraph) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + // A word representation. type Word struct { // Additional information detected for the word. @@ -392,6 +423,8 @@ type Word struct { // List of symbols in the word. // The order of the symbols follows the natural reading order. Symbols []*Symbol `protobuf:"bytes,3,rep,name=symbols" json:"symbols,omitempty"` + // Confidence of the OCR results for the word. Range [0, 1]. + Confidence float32 `protobuf:"fixed32,4,opt,name=confidence" json:"confidence,omitempty"` } func (m *Word) Reset() { *m = Word{} } @@ -420,6 +453,13 @@ func (m *Word) GetSymbols() []*Symbol { return nil } +func (m *Word) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + // A single symbol representation. type Symbol struct { // Additional information detected for the symbol. @@ -442,6 +482,8 @@ type Symbol struct { BoundingBox *BoundingPoly `protobuf:"bytes,2,opt,name=bounding_box,json=boundingBox" json:"bounding_box,omitempty"` // The actual UTF-8 representation of the symbol. Text string `protobuf:"bytes,3,opt,name=text" json:"text,omitempty"` + // Confidence of the OCR results for the symbol. Range [0, 1]. + Confidence float32 `protobuf:"fixed32,4,opt,name=confidence" json:"confidence,omitempty"` } func (m *Symbol) Reset() { *m = Symbol{} } @@ -470,6 +512,13 @@ func (m *Symbol) GetText() string { return "" } +func (m *Symbol) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + func init() { proto.RegisterType((*TextAnnotation)(nil), "google.cloud.vision.v1.TextAnnotation") proto.RegisterType((*TextAnnotation_DetectedLanguage)(nil), "google.cloud.vision.v1.TextAnnotation.DetectedLanguage") @@ -487,52 +536,53 @@ func init() { func init() { proto.RegisterFile("google/cloud/vision/v1/text_annotation.proto", fileDescriptor2) } var fileDescriptor2 = []byte{ - // 744 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x55, 0x4f, 0x6f, 0xd3, 0x4e, - 0x10, 0xfd, 0xb9, 0xb1, 0xd3, 0x78, 0xd2, 0x46, 0xfe, 0x2d, 0xa8, 0x8a, 0x42, 0xa9, 0x8a, 0x01, - 0xd1, 0x03, 0x72, 0xd4, 0x14, 0x04, 0x12, 0x08, 0x29, 0x4e, 0x0d, 0xad, 0x1a, 0x25, 0xd6, 0x36, - 0x51, 0xf9, 0x73, 0xb0, 0xfc, 0x67, 0xeb, 0x58, 0x4d, 0xbd, 0x96, 0xed, 0xb6, 0xc9, 0x8d, 0x4f, - 0xc5, 0x89, 0x6f, 0xc1, 0x09, 0xee, 0x9c, 0xb9, 0x72, 0x44, 0x5e, 0xdb, 0x69, 0x52, 0x61, 0x04, - 0x88, 0x43, 0x2f, 0xd6, 0xce, 0xe4, 0xed, 0xdb, 0xf7, 0x66, 0x33, 0x3b, 0xf0, 0xd0, 0xa5, 0xd4, - 0x1d, 0x93, 0xa6, 0x3d, 0xa6, 0x67, 0x4e, 0xf3, 0xdc, 0x8b, 0x3c, 0xea, 0x37, 0xcf, 0xb7, 0x9b, - 0x31, 0x99, 0xc4, 0x86, 0xe9, 0xfb, 0x34, 0x36, 0x63, 0x8f, 0xfa, 0x4a, 0x10, 0xd2, 0x98, 0xa2, - 0xb5, 0x14, 0xad, 0x30, 0xb4, 0x92, 0xa2, 0x95, 0xf3, 0xed, 0xc6, 0x7a, 0xc6, 0x62, 0x06, 0x5e, - 0xf3, 0x72, 0x53, 0x94, 0xee, 0x6a, 0xdc, 0x2f, 0x38, 0xc3, 0x25, 0xf4, 0x94, 0xc4, 0xe1, 0x34, - 0x85, 0xc9, 0xdf, 0x78, 0xa8, 0x0d, 0xc8, 0x24, 0x6e, 0xcf, 0x08, 0x50, 0x0b, 0x84, 0xc0, 0x74, - 0x49, 0x54, 0xe7, 0x36, 0x4b, 0x5b, 0xd5, 0xd6, 0xba, 0xf2, 0xf3, 0xf3, 0x15, 0xdd, 0x74, 0x09, - 0x4e, 0xa1, 0x08, 0x01, 0x9f, 0x88, 0xaf, 0x2f, 0x6d, 0x72, 0x5b, 0x22, 0x66, 0xeb, 0xc6, 0x11, - 0x48, 0xbb, 0x24, 0x26, 0x76, 0x4c, 0x9c, 0xae, 0xe9, 0xbb, 0x67, 0xa6, 0x4b, 0xd0, 0x5d, 0x58, - 0x1d, 0x67, 0x6b, 0xc3, 0xa6, 0x0e, 0xa9, 0x73, 0x6c, 0xc3, 0x4a, 0x9e, 0xec, 0x50, 0x87, 0xa0, - 0x0d, 0x00, 0x9b, 0xfa, 0xc7, 0x9e, 0x43, 0x7c, 0x9b, 0x30, 0xca, 0x25, 0x3c, 0x97, 0x69, 0x7c, - 0xe5, 0x60, 0x35, 0x67, 0x56, 0x43, 0x62, 0x9e, 0x20, 0x0c, 0x7c, 0x3c, 0x0d, 0x52, 0xb6, 0x5a, - 0xeb, 0x45, 0x91, 0xe2, 0x45, 0xa3, 0xca, 0x02, 0x87, 0xc2, 0xbe, 0x83, 0x69, 0x40, 0x30, 0xe3, - 0x42, 0xb7, 0x40, 0xf4, 0x22, 0x23, 0x08, 0xc9, 0xb1, 0x37, 0x61, 0x22, 0x2a, 0xb8, 0xe2, 0x45, - 0x3a, 0x8b, 0x65, 0x1b, 0xc4, 0x19, 0x1e, 0x55, 0x61, 0x79, 0xd8, 0x3b, 0xe8, 0xf5, 0x8f, 0x7a, - 0xd2, 0x7f, 0x48, 0x04, 0xe1, 0x50, 0x6f, 0x77, 0x34, 0x89, 0x43, 0x35, 0x80, 0xc3, 0x21, 0xd6, - 0x8c, 0x34, 0x5e, 0x42, 0x08, 0x6a, 0x5a, 0xbf, 0x6b, 0xcc, 0xe5, 0x4a, 0x08, 0xa0, 0xbc, 0xf7, - 0x46, 0xdf, 0xd3, 0x7a, 0x12, 0x9f, 0xe0, 0xbb, 0xfb, 0x3d, 0xcd, 0x50, 0xb1, 0xd6, 0x3e, 0x90, - 0x84, 0xc6, 0x27, 0x0e, 0x56, 0x12, 0xc9, 0x7a, 0x48, 0x03, 0x12, 0xc6, 0x53, 0x74, 0x0c, 0xc8, - 0xc9, 0x34, 0x1b, 0x79, 0xc5, 0xf2, 0x6b, 0x7a, 0xf2, 0x87, 0xa6, 0xf3, 0x2b, 0xc1, 0xff, 0x3b, - 0x57, 0x32, 0x11, 0x7a, 0x07, 0xb5, 0xd9, 0x39, 0x56, 0x62, 0x93, 0xf9, 0xaf, 0xb6, 0x1e, 0xfd, - 0x4d, 0x61, 0xf1, 0xaa, 0x33, 0x1f, 0xca, 0x1f, 0x39, 0xe0, 0x93, 0xbf, 0x0e, 0xea, 0x43, 0x25, - 0xc8, 0x9c, 0xb1, 0x8b, 0xab, 0xb6, 0x76, 0x7e, 0x93, 0x7f, 0xbe, 0x28, 0x78, 0x46, 0x82, 0x6e, - 0x82, 0x70, 0xe1, 0x39, 0xf1, 0x88, 0xa9, 0x15, 0x70, 0x1a, 0xa0, 0x35, 0x28, 0x8f, 0x88, 0xe7, - 0x8e, 0xe2, 0x7a, 0x89, 0xa5, 0xb3, 0x08, 0x3d, 0x86, 0xb2, 0x35, 0xa6, 0xf6, 0x49, 0x54, 0xe7, - 0x59, 0x01, 0x6f, 0x17, 0x1d, 0xae, 0x26, 0x28, 0x9c, 0x81, 0xe5, 0xf7, 0x25, 0x10, 0x58, 0xe6, - 0xdf, 0xeb, 0x7f, 0x05, 0x2b, 0x16, 0x3d, 0xf3, 0x1d, 0xcf, 0x77, 0x0d, 0x8b, 0x4e, 0xb2, 0xa2, - 0xdf, 0x2b, 0xd4, 0x95, 0x61, 0x75, 0x3a, 0x9e, 0xe2, 0x6a, 0xbe, 0x53, 0xa5, 0x13, 0xd4, 0x06, - 0x08, 0xcc, 0xd0, 0x74, 0x43, 0x33, 0x18, 0x45, 0xf5, 0x12, 0xb3, 0x77, 0xa7, 0xb8, 0x8d, 0x33, - 0x24, 0x9e, 0xdb, 0x84, 0x5e, 0x02, 0x30, 0xc3, 0x06, 0xeb, 0x2b, 0x9e, 0xf5, 0xd5, 0x83, 0x5f, - 0x56, 0x28, 0xfd, 0xb2, 0x06, 0x12, 0xad, 0x7c, 0x29, 0x63, 0x10, 0x67, 0xf9, 0xc5, 0x46, 0xa9, - 0x00, 0x3f, 0xd0, 0x5e, 0x0f, 0x24, 0x2e, 0x69, 0x99, 0x41, 0x5b, 0xed, 0x26, 0x2d, 0x52, 0x85, - 0x65, 0x7d, 0xbf, 0x33, 0x18, 0xe2, 0xa4, 0x37, 0x44, 0x10, 0xf0, 0xb0, 0xab, 0x61, 0x89, 0x4f, - 0xf2, 0x6a, 0x1b, 0x77, 0xfa, 0xbb, 0x9a, 0x24, 0xc8, 0x9f, 0x39, 0x10, 0x67, 0xaa, 0xaf, 0xf1, - 0x35, 0xb4, 0x40, 0xb8, 0xa0, 0xa1, 0x93, 0xdf, 0x40, 0xe1, 0x43, 0x7a, 0x44, 0x43, 0x07, 0xa7, - 0x50, 0xf9, 0x0b, 0x07, 0x7c, 0x12, 0x5f, 0x63, 0x5b, 0x4f, 0x61, 0x39, 0x9a, 0x9e, 0x5a, 0x74, - 0x9c, 0x1b, 0xdb, 0x28, 0xe2, 0x38, 0x64, 0x30, 0x9c, 0xc3, 0xe5, 0x0f, 0x1c, 0x94, 0xd3, 0xdc, - 0x35, 0xb6, 0x97, 0x8f, 0xb2, 0xd2, 0xe5, 0x28, 0x53, 0x63, 0x68, 0xd8, 0xf4, 0xb4, 0x80, 0x4b, - 0xbd, 0xb1, 0xa8, 0x50, 0x4f, 0x06, 0xab, 0xce, 0xbd, 0x7d, 0x9e, 0xc1, 0x5d, 0x9a, 0xbc, 0xd5, - 0x0a, 0x0d, 0xdd, 0xa6, 0x4b, 0x7c, 0x36, 0x76, 0x9b, 0xe9, 0x4f, 0x66, 0xe0, 0x45, 0x57, 0x07, - 0xf4, 0xb3, 0x74, 0xf5, 0x9d, 0xe3, 0xac, 0x32, 0xc3, 0xee, 0xfc, 0x08, 0x00, 0x00, 0xff, 0xff, - 0x80, 0x29, 0x2a, 0x3b, 0x2f, 0x08, 0x00, 0x00, + // 763 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x56, 0xcf, 0x6f, 0xd3, 0x4a, + 0x10, 0x7e, 0x6e, 0xec, 0x34, 0x9e, 0xb4, 0x91, 0xdf, 0xbe, 0xa7, 0x2a, 0x0a, 0xa5, 0x2a, 0x01, + 0x44, 0x0f, 0xc8, 0x51, 0x53, 0x10, 0x48, 0x20, 0xa4, 0x38, 0x35, 0xb4, 0x6a, 0x94, 0x58, 0xdb, + 0x44, 0xe5, 0xc7, 0xc1, 0xf2, 0x8f, 0xad, 0x63, 0x35, 0xf5, 0x5a, 0xb6, 0xdb, 0x26, 0xff, 0x0d, + 0xff, 0x13, 0x12, 0x27, 0xae, 0x9c, 0xb9, 0x02, 0x27, 0xe4, 0xb5, 0x9d, 0x26, 0x01, 0x53, 0x40, + 0x1c, 0x7a, 0xb1, 0x76, 0x26, 0xdf, 0x7c, 0x33, 0xdf, 0x8c, 0x27, 0x6b, 0xb8, 0xef, 0x50, 0xea, + 0x8c, 0x48, 0xc3, 0x1a, 0xd1, 0x33, 0xbb, 0x71, 0xee, 0x86, 0x2e, 0xf5, 0x1a, 0xe7, 0xdb, 0x8d, + 0x88, 0x8c, 0x23, 0xdd, 0xf0, 0x3c, 0x1a, 0x19, 0x91, 0x4b, 0x3d, 0xd9, 0x0f, 0x68, 0x44, 0xd1, + 0x5a, 0x82, 0x96, 0x19, 0x5a, 0x4e, 0xd0, 0xf2, 0xf9, 0x76, 0x6d, 0x3d, 0x65, 0x31, 0x7c, 0xb7, + 0x71, 0x19, 0x14, 0x26, 0x51, 0xb5, 0xbb, 0x39, 0x39, 0x1c, 0x42, 0x4f, 0x49, 0x14, 0x4c, 0x12, + 0x58, 0xfd, 0x13, 0x0f, 0x95, 0x3e, 0x19, 0x47, 0xad, 0x29, 0x01, 0x6a, 0x82, 0xe0, 0x1b, 0x0e, + 0x09, 0xab, 0xdc, 0x66, 0x61, 0xab, 0xdc, 0x5c, 0x97, 0x7f, 0x9c, 0x5f, 0xd6, 0x0c, 0x87, 0xe0, + 0x04, 0x8a, 0x10, 0xf0, 0x71, 0xf1, 0xd5, 0xa5, 0x4d, 0x6e, 0x4b, 0xc4, 0xec, 0x5c, 0x3b, 0x02, + 0x69, 0x97, 0x44, 0xc4, 0x8a, 0x88, 0xdd, 0x31, 0x3c, 0xe7, 0xcc, 0x70, 0x08, 0xba, 0x0d, 0xab, + 0xa3, 0xf4, 0xac, 0x5b, 0xd4, 0x26, 0x55, 0x8e, 0x05, 0xac, 0x64, 0xce, 0x36, 0xb5, 0x09, 0xda, + 0x00, 0xb0, 0xa8, 0x77, 0xec, 0xda, 0xc4, 0xb3, 0x08, 0xa3, 0x5c, 0xc2, 0x33, 0x9e, 0xda, 0x47, + 0x0e, 0x56, 0x33, 0x66, 0x25, 0x20, 0xc6, 0x09, 0xc2, 0xc0, 0x47, 0x13, 0x3f, 0x61, 0xab, 0x34, + 0x9f, 0xe5, 0x55, 0x3c, 0x2f, 0x54, 0x9e, 0xe3, 0x90, 0xd9, 0xb3, 0x3f, 0xf1, 0x09, 0x66, 0x5c, + 0xe8, 0x06, 0x88, 0x6e, 0xa8, 0xfb, 0x01, 0x39, 0x76, 0xc7, 0xac, 0x88, 0x12, 0x2e, 0xb9, 0xa1, + 0xc6, 0xec, 0xba, 0x05, 0xe2, 0x14, 0x8f, 0xca, 0xb0, 0x3c, 0xe8, 0x1e, 0x74, 0x7b, 0x47, 0x5d, + 0xe9, 0x1f, 0x24, 0x82, 0x70, 0xa8, 0xb5, 0xda, 0xaa, 0xc4, 0xa1, 0x0a, 0xc0, 0xe1, 0x00, 0xab, + 0x7a, 0x62, 0x2f, 0x21, 0x04, 0x15, 0xb5, 0xd7, 0xd1, 0x67, 0x7c, 0x05, 0x04, 0x50, 0xdc, 0x7b, + 0xa5, 0xed, 0xa9, 0x5d, 0x89, 0x8f, 0xf1, 0x9d, 0xfd, 0xae, 0xaa, 0x2b, 0x58, 0x6d, 0x1d, 0x48, + 0x42, 0xed, 0x1d, 0x07, 0x2b, 0x71, 0xc9, 0x5a, 0x40, 0x7d, 0x12, 0x44, 0x13, 0x74, 0x0c, 0xc8, + 0x4e, 0x6b, 0xd6, 0xb3, 0x8e, 0x65, 0x63, 0x7a, 0xf4, 0x9b, 0xa2, 0xb3, 0x91, 0xe0, 0x7f, 0xed, + 0x05, 0x4f, 0x88, 0xde, 0x40, 0x65, 0x9a, 0xc7, 0x8c, 0x65, 0x32, 0xfd, 0xe5, 0xe6, 0x83, 0x3f, + 0x69, 0x2c, 0x5e, 0xb5, 0x67, 0xcd, 0xfa, 0x07, 0x0e, 0xf8, 0xf8, 0xd5, 0x41, 0x3d, 0x28, 0xf9, + 0xa9, 0x32, 0x36, 0xb8, 0x72, 0x73, 0xe7, 0x17, 0xf9, 0x67, 0x9b, 0x82, 0xa7, 0x24, 0xe8, 0x7f, + 0x10, 0x2e, 0x5c, 0x3b, 0x1a, 0xb2, 0x6a, 0x05, 0x9c, 0x18, 0x68, 0x0d, 0x8a, 0x43, 0xe2, 0x3a, + 0xc3, 0xa8, 0x5a, 0x60, 0xee, 0xd4, 0x42, 0x0f, 0xa1, 0x68, 0x8e, 0xa8, 0x75, 0x12, 0x56, 0x79, + 0xd6, 0xc0, 0x9b, 0x79, 0xc9, 0x95, 0x18, 0x85, 0x53, 0xf0, 0xc2, 0xcb, 0x29, 0x2c, 0xbe, 0x9c, + 0xf5, 0xb7, 0x05, 0x10, 0x58, 0xc4, 0xdf, 0xd7, 0xf7, 0x02, 0x56, 0x4c, 0x7a, 0xe6, 0xd9, 0xae, + 0xe7, 0xe8, 0x26, 0x1d, 0xa7, 0x43, 0xb9, 0x93, 0x5b, 0x77, 0x8a, 0xd5, 0xe8, 0x68, 0x82, 0xcb, + 0x59, 0xa4, 0x42, 0xc7, 0xa8, 0x05, 0xe0, 0x1b, 0x81, 0xe1, 0x04, 0x86, 0x3f, 0x0c, 0xab, 0x05, + 0x26, 0xff, 0x56, 0xfe, 0x9a, 0xa7, 0x48, 0x3c, 0x13, 0x84, 0x9e, 0x03, 0xb0, 0x86, 0xe8, 0x6c, + 0xef, 0x78, 0xb6, 0x77, 0xf7, 0x7e, 0xda, 0xc1, 0xe4, 0xc9, 0x16, 0x4c, 0x34, 0xb3, 0xe3, 0x95, + 0xed, 0xc4, 0x20, 0x4e, 0xe3, 0xe6, 0x17, 0xad, 0x04, 0x7c, 0x5f, 0x7d, 0xd9, 0x97, 0xb8, 0x78, + 0xe5, 0xfa, 0x2d, 0xa5, 0x13, 0xaf, 0x58, 0x19, 0x96, 0xb5, 0xfd, 0x76, 0x7f, 0x80, 0xe3, 0xdd, + 0x12, 0x41, 0xc0, 0x83, 0x8e, 0x8a, 0x25, 0x3e, 0xf6, 0x2b, 0x2d, 0xdc, 0xee, 0xed, 0xaa, 0x92, + 0x50, 0xff, 0xc2, 0x81, 0x38, 0x55, 0x75, 0x8d, 0xc7, 0xd4, 0x04, 0xe1, 0x82, 0x06, 0x76, 0x36, + 0xa1, 0xdc, 0x3f, 0xe2, 0x23, 0x1a, 0xd8, 0x38, 0x81, 0x2e, 0xf4, 0x93, 0xff, 0xae, 0x9f, 0x5f, + 0x39, 0xe0, 0x63, 0xfc, 0x35, 0x96, 0xfd, 0x18, 0x96, 0xc3, 0xc9, 0xa9, 0x49, 0x47, 0x99, 0xf0, + 0x8d, 0x3c, 0x8e, 0x43, 0x06, 0xc3, 0x19, 0xfc, 0x4a, 0xf1, 0xef, 0x39, 0x28, 0x26, 0x31, 0xd7, + 0x58, 0x7e, 0x76, 0x95, 0x16, 0x2e, 0xaf, 0xd2, 0xab, 0x84, 0x29, 0x11, 0xd4, 0x2c, 0x7a, 0x9a, + 0x93, 0x4b, 0xf9, 0x6f, 0x5e, 0x81, 0x16, 0x5f, 0xfc, 0x1a, 0xf7, 0xfa, 0x69, 0x0a, 0x77, 0x68, + 0x7c, 0x97, 0xc8, 0x34, 0x70, 0x1a, 0x0e, 0xf1, 0xd8, 0x67, 0x41, 0x23, 0xf9, 0xc9, 0xf0, 0xdd, + 0x70, 0xf1, 0x03, 0xe2, 0x49, 0x72, 0xfa, 0xcc, 0x71, 0x66, 0x91, 0x61, 0x77, 0xbe, 0x05, 0x00, + 0x00, 0xff, 0xff, 0x3f, 0x4a, 0xe7, 0xb0, 0xcf, 0x08, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1/web_detection.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1/web_detection.pb.go index 1ee738c..921ce4a 100644 --- a/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1/web_detection.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1/web_detection.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/cloud/vision/v1/web_detection.proto -// DO NOT EDIT! package vision @@ -19,8 +18,7 @@ type WebDetection struct { // Deduced entities from similar images on the Internet. WebEntities []*WebDetection_WebEntity `protobuf:"bytes,1,rep,name=web_entities,json=webEntities" json:"web_entities,omitempty"` // Fully matching images from the Internet. - // They're definite neardups and most often a copy of the query image with - // merely a size change. + // Can include resized copies of the query image. FullMatchingImages []*WebDetection_WebImage `protobuf:"bytes,2,rep,name=full_matching_images,json=fullMatchingImages" json:"full_matching_images,omitempty"` // Partial matching images from the Internet. // Those images are similar enough to share some key-point features. For @@ -28,6 +26,10 @@ type WebDetection struct { PartialMatchingImages []*WebDetection_WebImage `protobuf:"bytes,3,rep,name=partial_matching_images,json=partialMatchingImages" json:"partial_matching_images,omitempty"` // Web pages containing the matching images from the Internet. PagesWithMatchingImages []*WebDetection_WebPage `protobuf:"bytes,4,rep,name=pages_with_matching_images,json=pagesWithMatchingImages" json:"pages_with_matching_images,omitempty"` + // The visually similar image results. + VisuallySimilarImages []*WebDetection_WebImage `protobuf:"bytes,6,rep,name=visually_similar_images,json=visuallySimilarImages" json:"visually_similar_images,omitempty"` + // Best guess text labels for the request image. + BestGuessLabels []*WebDetection_WebLabel `protobuf:"bytes,8,rep,name=best_guess_labels,json=bestGuessLabels" json:"best_guess_labels,omitempty"` } func (m *WebDetection) Reset() { *m = WebDetection{} } @@ -63,6 +65,20 @@ func (m *WebDetection) GetPagesWithMatchingImages() []*WebDetection_WebPage { return nil } +func (m *WebDetection) GetVisuallySimilarImages() []*WebDetection_WebImage { + if m != nil { + return m.VisuallySimilarImages + } + return nil +} + +func (m *WebDetection) GetBestGuessLabels() []*WebDetection_WebLabel { + if m != nil { + return m.BestGuessLabels + } + return nil +} + // Entity deduced from similar images on the Internet. type WebDetection_WebEntity struct { // Opaque entity ID. @@ -104,8 +120,7 @@ func (m *WebDetection_WebEntity) GetDescription() string { type WebDetection_WebImage struct { // The result image URL. Url string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"` - // Overall relevancy score for the image. - // Not normalized and not comparable across different image queries. + // (Deprecated) Overall relevancy score for the image. Score float32 `protobuf:"fixed32,2,opt,name=score" json:"score,omitempty"` } @@ -132,9 +147,18 @@ func (m *WebDetection_WebImage) GetScore() float32 { type WebDetection_WebPage struct { // The result web page URL. Url string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"` - // Overall relevancy score for the web page. - // Not normalized and not comparable across different image queries. + // (Deprecated) Overall relevancy score for the web page. Score float32 `protobuf:"fixed32,2,opt,name=score" json:"score,omitempty"` + // Title for the web page, may contain HTML markups. + PageTitle string `protobuf:"bytes,3,opt,name=page_title,json=pageTitle" json:"page_title,omitempty"` + // Fully matching images on the page. + // Can include resized copies of the query image. + FullMatchingImages []*WebDetection_WebImage `protobuf:"bytes,4,rep,name=full_matching_images,json=fullMatchingImages" json:"full_matching_images,omitempty"` + // Partial matching images on the page. + // Those images are similar enough to share some key-point features. For + // example an original image will likely have partial matching for its + // crops. + PartialMatchingImages []*WebDetection_WebImage `protobuf:"bytes,5,rep,name=partial_matching_images,json=partialMatchingImages" json:"partial_matching_images,omitempty"` } func (m *WebDetection_WebPage) Reset() { *m = WebDetection_WebPage{} } @@ -156,39 +180,98 @@ func (m *WebDetection_WebPage) GetScore() float32 { return 0 } +func (m *WebDetection_WebPage) GetPageTitle() string { + if m != nil { + return m.PageTitle + } + return "" +} + +func (m *WebDetection_WebPage) GetFullMatchingImages() []*WebDetection_WebImage { + if m != nil { + return m.FullMatchingImages + } + return nil +} + +func (m *WebDetection_WebPage) GetPartialMatchingImages() []*WebDetection_WebImage { + if m != nil { + return m.PartialMatchingImages + } + return nil +} + +// Label to provide extra metadata for the web detection. +type WebDetection_WebLabel struct { + // Label for extra metadata. + Label string `protobuf:"bytes,1,opt,name=label" json:"label,omitempty"` + // The BCP-47 language code for `label`, such as "en-US" or "sr-Latn". + // For more information, see + // http://www.unicode.org/reports/tr35/#Unicode_locale_identifier. + LanguageCode string `protobuf:"bytes,2,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` +} + +func (m *WebDetection_WebLabel) Reset() { *m = WebDetection_WebLabel{} } +func (m *WebDetection_WebLabel) String() string { return proto.CompactTextString(m) } +func (*WebDetection_WebLabel) ProtoMessage() {} +func (*WebDetection_WebLabel) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 3} } + +func (m *WebDetection_WebLabel) GetLabel() string { + if m != nil { + return m.Label + } + return "" +} + +func (m *WebDetection_WebLabel) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + func init() { proto.RegisterType((*WebDetection)(nil), "google.cloud.vision.v1.WebDetection") proto.RegisterType((*WebDetection_WebEntity)(nil), "google.cloud.vision.v1.WebDetection.WebEntity") proto.RegisterType((*WebDetection_WebImage)(nil), "google.cloud.vision.v1.WebDetection.WebImage") proto.RegisterType((*WebDetection_WebPage)(nil), "google.cloud.vision.v1.WebDetection.WebPage") + proto.RegisterType((*WebDetection_WebLabel)(nil), "google.cloud.vision.v1.WebDetection.WebLabel") } func init() { proto.RegisterFile("google/cloud/vision/v1/web_detection.proto", fileDescriptor3) } var fileDescriptor3 = []byte{ - // 383 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x93, 0x41, 0x4f, 0xea, 0x40, - 0x14, 0x85, 0x53, 0xca, 0x7b, 0x0f, 0x06, 0x16, 0xcf, 0x09, 0x4a, 0x53, 0x5d, 0x34, 0xae, 0x88, - 0xd1, 0x69, 0xc0, 0xa5, 0xae, 0x88, 0x2e, 0x58, 0x98, 0x60, 0x37, 0x24, 0x6e, 0xea, 0xd0, 0x8e, - 0xc3, 0x4d, 0xca, 0x4c, 0xd3, 0x19, 0x20, 0xfc, 0x58, 0xff, 0x87, 0x4b, 0x33, 0xd3, 0x62, 0x10, - 0x30, 0x21, 0xee, 0xee, 0xdc, 0x9e, 0xf3, 0x9d, 0xf6, 0xf6, 0x0e, 0xba, 0xe2, 0x52, 0xf2, 0x8c, - 0x85, 0x49, 0x26, 0x17, 0x69, 0xb8, 0x04, 0x05, 0x52, 0x84, 0xcb, 0x7e, 0xb8, 0x62, 0xd3, 0x38, - 0x65, 0x9a, 0x25, 0x1a, 0xa4, 0x20, 0x79, 0x21, 0xb5, 0xc4, 0x67, 0xa5, 0x96, 0x58, 0x2d, 0x29, - 0xb5, 0x64, 0xd9, 0xf7, 0x2f, 0x2a, 0x06, 0xcd, 0x21, 0xa4, 0x42, 0x48, 0x4d, 0x8d, 0x49, 0x95, - 0xae, 0xcb, 0xf7, 0x3a, 0x6a, 0x4f, 0xd8, 0xf4, 0x61, 0x03, 0xc3, 0xcf, 0xa8, 0x6d, 0xe8, 0x4c, - 0x68, 0xd0, 0xc0, 0x94, 0xe7, 0x04, 0x6e, 0xaf, 0x35, 0x20, 0xe4, 0x30, 0x9d, 0x6c, 0x7b, 0xcd, - 0xe1, 0xd1, 0xf8, 0xd6, 0x51, 0x6b, 0x55, 0x95, 0xc0, 0x14, 0x8e, 0x51, 0xe7, 0x6d, 0x91, 0x65, - 0xf1, 0x9c, 0xea, 0x64, 0x06, 0x82, 0xc7, 0x30, 0xa7, 0x9c, 0x29, 0xaf, 0x66, 0xd1, 0x37, 0xc7, - 0xa2, 0x47, 0xc6, 0x15, 0x61, 0x83, 0x7a, 0xaa, 0x48, 0xb6, 0xa5, 0x30, 0x43, 0xdd, 0x9c, 0x16, - 0x1a, 0xe8, 0x7e, 0x86, 0xfb, 0x9b, 0x8c, 0xd3, 0x8a, 0xb6, 0x13, 0x03, 0xc8, 0xcf, 0x4d, 0x11, - 0xaf, 0x40, 0xcf, 0xf6, 0x92, 0xea, 0x36, 0xe9, 0xfa, 0xd8, 0xa4, 0xb1, 0x09, 0xea, 0x5a, 0xde, - 0x04, 0xf4, 0xec, 0x7b, 0x94, 0xff, 0x8a, 0x9a, 0x5f, 0xc3, 0xc4, 0xe7, 0xa8, 0x69, 0x7f, 0xc7, - 0x3a, 0x86, 0xd4, 0x73, 0x02, 0xa7, 0xd7, 0x8c, 0x1a, 0x65, 0x63, 0x94, 0xe2, 0x0e, 0xfa, 0xa3, - 0x12, 0x59, 0x30, 0xaf, 0x16, 0x38, 0xbd, 0x5a, 0x54, 0x1e, 0x70, 0x80, 0x5a, 0x29, 0x53, 0x49, - 0x01, 0xb9, 0xc9, 0xf3, 0x5c, 0x6b, 0xda, 0x6e, 0xf9, 0x03, 0xd4, 0xd8, 0x7c, 0x2f, 0xfe, 0x8f, - 0xdc, 0x45, 0x91, 0x55, 0x68, 0x53, 0x1e, 0xa6, 0xfa, 0x7d, 0xf4, 0xaf, 0x7a, 0xf3, 0x63, 0x2d, - 0xc3, 0x02, 0xf9, 0x89, 0x9c, 0xff, 0x30, 0x94, 0xe1, 0xc9, 0xf6, 0x54, 0xc6, 0x66, 0x21, 0xc7, - 0xce, 0xcb, 0x7d, 0x25, 0xe6, 0x32, 0xa3, 0x82, 0x13, 0x59, 0xf0, 0x90, 0x33, 0x61, 0xd7, 0x35, - 0x2c, 0x1f, 0xd1, 0x1c, 0xd4, 0xee, 0x9d, 0xb8, 0x2b, 0xab, 0x0f, 0xc7, 0x99, 0xfe, 0xb5, 0xda, - 0xdb, 0xcf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x66, 0xd9, 0xde, 0x3f, 0x3e, 0x03, 0x00, 0x00, + // 505 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x94, 0xd1, 0x8b, 0xd3, 0x4e, + 0x10, 0xc7, 0x49, 0x7b, 0x77, 0xbf, 0x76, 0xdb, 0x1f, 0x7a, 0xcb, 0xe9, 0x85, 0xa8, 0x50, 0xf4, + 0xa5, 0x88, 0x26, 0xdc, 0xf9, 0xa8, 0x4f, 0xa7, 0x87, 0x1c, 0x28, 0xd4, 0x28, 0x1c, 0xfa, 0xb2, + 0x6e, 0x92, 0x35, 0x1d, 0xd8, 0x66, 0x43, 0x76, 0xd3, 0xd2, 0xff, 0xc4, 0xbf, 0xca, 0xbf, 0xc7, + 0x47, 0x99, 0xdd, 0x8d, 0x94, 0xeb, 0x1d, 0xd4, 0x43, 0x7c, 0x9b, 0x99, 0xcc, 0xf7, 0xf3, 0xdd, + 0x9d, 0x0c, 0x4b, 0x9e, 0x96, 0x4a, 0x95, 0x52, 0x24, 0xb9, 0x54, 0x6d, 0x91, 0x2c, 0x41, 0x83, + 0xaa, 0x92, 0xe5, 0x49, 0xb2, 0x12, 0x19, 0x2b, 0x84, 0x11, 0xb9, 0x01, 0x55, 0xc5, 0x75, 0xa3, + 0x8c, 0xa2, 0xf7, 0x5d, 0x6f, 0x6c, 0x7b, 0x63, 0xd7, 0x1b, 0x2f, 0x4f, 0xa2, 0x87, 0x9e, 0xc1, + 0x6b, 0x48, 0x78, 0x55, 0x29, 0xc3, 0x51, 0xa4, 0x9d, 0xea, 0xf1, 0x8f, 0x01, 0x19, 0x5f, 0x8a, + 0xec, 0x4d, 0x07, 0xa3, 0x1f, 0xc8, 0x18, 0xe9, 0xa2, 0x32, 0x60, 0x40, 0xe8, 0x30, 0x98, 0xf4, + 0xa7, 0xa3, 0xd3, 0x38, 0xbe, 0x9e, 0x1e, 0x6f, 0x6a, 0x31, 0x39, 0x47, 0xdd, 0x3a, 0x1d, 0xad, + 0x7c, 0x08, 0x42, 0x53, 0x46, 0x8e, 0xbe, 0xb5, 0x52, 0xb2, 0x05, 0x37, 0xf9, 0x1c, 0xaa, 0x92, + 0xc1, 0x82, 0x97, 0x42, 0x87, 0x3d, 0x8b, 0x7e, 0xbe, 0x2b, 0xfa, 0x02, 0x55, 0x29, 0x45, 0xd4, + 0x7b, 0x4f, 0xb2, 0x25, 0x4d, 0x05, 0x39, 0xae, 0x79, 0x63, 0x80, 0x6f, 0x7b, 0xf4, 0x6f, 0xe3, + 0x71, 0xcf, 0xd3, 0xae, 0xd8, 0x00, 0x89, 0x6a, 0x0c, 0xd8, 0x0a, 0xcc, 0x7c, 0xcb, 0x69, 0xcf, + 0x3a, 0x3d, 0xdb, 0xd5, 0x69, 0x86, 0x46, 0xc7, 0x96, 0x77, 0x09, 0x66, 0xbe, 0x7d, 0xa3, 0x25, + 0xe8, 0x96, 0x4b, 0xb9, 0x66, 0x1a, 0x16, 0x20, 0x79, 0xd3, 0xf9, 0x1c, 0xdc, 0xea, 0x46, 0x1d, + 0xed, 0xa3, 0x83, 0x79, 0x9b, 0xcf, 0xe4, 0x30, 0x13, 0xda, 0xb0, 0xb2, 0x15, 0x5a, 0x33, 0xc9, + 0x33, 0x21, 0x75, 0x38, 0xf8, 0x33, 0x83, 0x77, 0xa8, 0x4a, 0xef, 0x20, 0xe7, 0x2d, 0x62, 0x6c, + 0xae, 0xa3, 0xaf, 0x64, 0xf8, 0x7b, 0x1d, 0xe8, 0x03, 0x32, 0xb4, 0x0b, 0xb5, 0x66, 0x50, 0x84, + 0xc1, 0x24, 0x98, 0x0e, 0xd3, 0x81, 0x2b, 0x5c, 0x14, 0xf4, 0x88, 0xec, 0xeb, 0x5c, 0x35, 0x22, + 0xec, 0x4d, 0x82, 0x69, 0x2f, 0x75, 0x09, 0x9d, 0x90, 0x51, 0x21, 0x74, 0xde, 0x40, 0x8d, 0x46, + 0x61, 0xdf, 0x8a, 0x36, 0x4b, 0xd1, 0x29, 0x19, 0x74, 0xf7, 0xa3, 0x77, 0x49, 0xbf, 0x6d, 0xa4, + 0x47, 0x63, 0x78, 0x3d, 0x35, 0xfa, 0xde, 0x23, 0xff, 0xf9, 0xe1, 0xef, 0xaa, 0xa1, 0x8f, 0x08, + 0xc1, 0xdf, 0xc4, 0x0c, 0x18, 0x29, 0xfc, 0x41, 0x86, 0x58, 0xf9, 0x84, 0x85, 0x1b, 0xb7, 0x7b, + 0xef, 0x1f, 0x6c, 0xf7, 0xfe, 0xdf, 0xdb, 0xee, 0xe8, 0xdc, 0x8e, 0xd3, 0xfe, 0x3d, 0x1c, 0x84, + 0x5d, 0x06, 0x3f, 0x1c, 0x97, 0xd0, 0x27, 0xe4, 0x7f, 0xc9, 0xab, 0xb2, 0xc5, 0x61, 0xe4, 0xaa, + 0x70, 0x63, 0x1a, 0xa6, 0xe3, 0xae, 0xf8, 0x5a, 0x15, 0xe2, 0xac, 0x21, 0x51, 0xae, 0x16, 0x37, + 0x9c, 0xe8, 0xec, 0x70, 0xf3, 0x48, 0x33, 0x7c, 0x81, 0x66, 0xc1, 0x97, 0x57, 0xbe, 0xb9, 0x54, + 0x48, 0x8a, 0x55, 0x53, 0x26, 0xa5, 0xa8, 0xec, 0xfb, 0x94, 0xb8, 0x4f, 0xbc, 0x06, 0x7d, 0xf5, + 0x11, 0x7c, 0xe9, 0xa2, 0x9f, 0x41, 0x90, 0x1d, 0xd8, 0xde, 0x17, 0xbf, 0x02, 0x00, 0x00, 0xff, + 0xff, 0x1c, 0xe5, 0x3e, 0x5b, 0x2f, 0x05, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1p1beta1/geometry.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1p1beta1/geometry.pb.go new file mode 100644 index 0000000..c04a32a --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1p1beta1/geometry.pb.go @@ -0,0 +1,173 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/vision/v1p1beta1/geometry.proto + +/* +Package vision is a generated protocol buffer package. + +It is generated from these files: + google/cloud/vision/v1p1beta1/geometry.proto + google/cloud/vision/v1p1beta1/image_annotator.proto + google/cloud/vision/v1p1beta1/text_annotation.proto + google/cloud/vision/v1p1beta1/web_detection.proto + +It has these top-level messages: + Vertex + BoundingPoly + Position + Feature + ImageSource + Image + FaceAnnotation + LocationInfo + Property + EntityAnnotation + SafeSearchAnnotation + LatLongRect + ColorInfo + DominantColorsAnnotation + ImageProperties + CropHint + CropHintsAnnotation + CropHintsParams + WebDetectionParams + ImageContext + AnnotateImageRequest + AnnotateImageResponse + BatchAnnotateImagesRequest + BatchAnnotateImagesResponse + TextAnnotation + Page + Block + Paragraph + Word + Symbol + WebDetection +*/ +package vision + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// A vertex represents a 2D point in the image. +// NOTE: the vertex coordinates are in the same scale as the original image. +type Vertex struct { + // X coordinate. + X int32 `protobuf:"varint,1,opt,name=x" json:"x,omitempty"` + // Y coordinate. + Y int32 `protobuf:"varint,2,opt,name=y" json:"y,omitempty"` +} + +func (m *Vertex) Reset() { *m = Vertex{} } +func (m *Vertex) String() string { return proto.CompactTextString(m) } +func (*Vertex) ProtoMessage() {} +func (*Vertex) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *Vertex) GetX() int32 { + if m != nil { + return m.X + } + return 0 +} + +func (m *Vertex) GetY() int32 { + if m != nil { + return m.Y + } + return 0 +} + +// A bounding polygon for the detected image annotation. +type BoundingPoly struct { + // The bounding polygon vertices. + Vertices []*Vertex `protobuf:"bytes,1,rep,name=vertices" json:"vertices,omitempty"` +} + +func (m *BoundingPoly) Reset() { *m = BoundingPoly{} } +func (m *BoundingPoly) String() string { return proto.CompactTextString(m) } +func (*BoundingPoly) ProtoMessage() {} +func (*BoundingPoly) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *BoundingPoly) GetVertices() []*Vertex { + if m != nil { + return m.Vertices + } + return nil +} + +// A 3D position in the image, used primarily for Face detection landmarks. +// A valid Position must have both x and y coordinates. +// The position coordinates are in the same scale as the original image. +type Position struct { + // X coordinate. + X float32 `protobuf:"fixed32,1,opt,name=x" json:"x,omitempty"` + // Y coordinate. + Y float32 `protobuf:"fixed32,2,opt,name=y" json:"y,omitempty"` + // Z coordinate (or depth). + Z float32 `protobuf:"fixed32,3,opt,name=z" json:"z,omitempty"` +} + +func (m *Position) Reset() { *m = Position{} } +func (m *Position) String() string { return proto.CompactTextString(m) } +func (*Position) ProtoMessage() {} +func (*Position) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *Position) GetX() float32 { + if m != nil { + return m.X + } + return 0 +} + +func (m *Position) GetY() float32 { + if m != nil { + return m.Y + } + return 0 +} + +func (m *Position) GetZ() float32 { + if m != nil { + return m.Z + } + return 0 +} + +func init() { + proto.RegisterType((*Vertex)(nil), "google.cloud.vision.v1p1beta1.Vertex") + proto.RegisterType((*BoundingPoly)(nil), "google.cloud.vision.v1p1beta1.BoundingPoly") + proto.RegisterType((*Position)(nil), "google.cloud.vision.v1p1beta1.Position") +} + +func init() { proto.RegisterFile("google/cloud/vision/v1p1beta1/geometry.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 243 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xb1, 0x4b, 0xc3, 0x40, + 0x14, 0x87, 0x79, 0x29, 0x96, 0x72, 0xd6, 0x25, 0x53, 0x16, 0xa1, 0x06, 0x85, 0x0e, 0x72, 0x47, + 0xd4, 0xcd, 0xc9, 0x38, 0xb8, 0xc6, 0x0c, 0x0e, 0x6e, 0x69, 0xfa, 0x78, 0x1c, 0xa4, 0xf7, 0xc2, + 0xe5, 0x1a, 0x7a, 0xc5, 0x3f, 0xdc, 0x51, 0x7a, 0x57, 0x2a, 0x0e, 0x76, 0xfc, 0xdd, 0x7d, 0x8f, + 0x0f, 0x3e, 0x71, 0x4f, 0xcc, 0xd4, 0xa1, 0x6a, 0x3b, 0xde, 0xae, 0xd5, 0xa8, 0x07, 0xcd, 0x46, + 0x8d, 0x45, 0x5f, 0xac, 0xd0, 0x35, 0x85, 0x22, 0xe4, 0x0d, 0x3a, 0xeb, 0x65, 0x6f, 0xd9, 0x71, + 0x7a, 0x1d, 0x69, 0x19, 0x68, 0x19, 0x69, 0x79, 0xa2, 0xf3, 0x5b, 0x31, 0xfd, 0x40, 0xeb, 0x70, + 0x97, 0xce, 0x05, 0xec, 0x32, 0x58, 0xc0, 0xf2, 0xa2, 0x86, 0xb0, 0x7c, 0x96, 0xc4, 0xe5, 0xf3, + 0x77, 0x31, 0x2f, 0x79, 0x6b, 0xd6, 0xda, 0x50, 0xc5, 0x9d, 0x4f, 0x5f, 0xc4, 0x6c, 0x44, 0xeb, + 0x74, 0x8b, 0x43, 0x06, 0x8b, 0xc9, 0xf2, 0xf2, 0xe1, 0x4e, 0x9e, 0xf5, 0xc8, 0x28, 0xa9, 0x4f, + 0x67, 0xf9, 0x93, 0x98, 0x55, 0x3c, 0x68, 0xa7, 0xd9, 0xfc, 0xaa, 0x93, 0x3f, 0xea, 0xa4, 0x06, + 0x7f, 0x58, 0xfb, 0x6c, 0x12, 0xd7, 0xbe, 0xfc, 0x12, 0x37, 0x2d, 0x6f, 0xce, 0xbb, 0xca, 0xab, + 0xb7, 0x63, 0x82, 0xea, 0x50, 0xa0, 0x82, 0xcf, 0xd7, 0x23, 0x4f, 0xdc, 0x35, 0x86, 0x24, 0x5b, + 0x52, 0x84, 0x26, 0xf4, 0x51, 0xf1, 0xab, 0xe9, 0xf5, 0xf0, 0x4f, 0xd0, 0xe7, 0xf8, 0xf0, 0x0d, + 0xb0, 0x9a, 0x86, 0x93, 0xc7, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x91, 0xa5, 0x86, 0xce, 0x82, + 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1p1beta1/image_annotator.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1p1beta1/image_annotator.pb.go new file mode 100644 index 0000000..0d2b5b6 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1p1beta1/image_annotator.pb.go @@ -0,0 +1,1503 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/vision/v1p1beta1/image_annotator.proto + +package vision + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_rpc "google.golang.org/genproto/googleapis/rpc/status" +import google_type "google.golang.org/genproto/googleapis/type/color" +import google_type1 "google.golang.org/genproto/googleapis/type/latlng" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// A bucketized representation of likelihood, which is intended to give clients +// highly stable results across model upgrades. +type Likelihood int32 + +const ( + // Unknown likelihood. + Likelihood_UNKNOWN Likelihood = 0 + // It is very unlikely that the image belongs to the specified vertical. + Likelihood_VERY_UNLIKELY Likelihood = 1 + // It is unlikely that the image belongs to the specified vertical. + Likelihood_UNLIKELY Likelihood = 2 + // It is possible that the image belongs to the specified vertical. + Likelihood_POSSIBLE Likelihood = 3 + // It is likely that the image belongs to the specified vertical. + Likelihood_LIKELY Likelihood = 4 + // It is very likely that the image belongs to the specified vertical. + Likelihood_VERY_LIKELY Likelihood = 5 +) + +var Likelihood_name = map[int32]string{ + 0: "UNKNOWN", + 1: "VERY_UNLIKELY", + 2: "UNLIKELY", + 3: "POSSIBLE", + 4: "LIKELY", + 5: "VERY_LIKELY", +} +var Likelihood_value = map[string]int32{ + "UNKNOWN": 0, + "VERY_UNLIKELY": 1, + "UNLIKELY": 2, + "POSSIBLE": 3, + "LIKELY": 4, + "VERY_LIKELY": 5, +} + +func (x Likelihood) String() string { + return proto.EnumName(Likelihood_name, int32(x)) +} +func (Likelihood) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +// Type of image feature. +type Feature_Type int32 + +const ( + // Unspecified feature type. + Feature_TYPE_UNSPECIFIED Feature_Type = 0 + // Run face detection. + Feature_FACE_DETECTION Feature_Type = 1 + // Run landmark detection. + Feature_LANDMARK_DETECTION Feature_Type = 2 + // Run logo detection. + Feature_LOGO_DETECTION Feature_Type = 3 + // Run label detection. + Feature_LABEL_DETECTION Feature_Type = 4 + // Run OCR. + Feature_TEXT_DETECTION Feature_Type = 5 + // Run dense text document OCR. Takes precedence when both + // DOCUMENT_TEXT_DETECTION and TEXT_DETECTION are present. + Feature_DOCUMENT_TEXT_DETECTION Feature_Type = 11 + // Run computer vision models to compute image safe-search properties. + Feature_SAFE_SEARCH_DETECTION Feature_Type = 6 + // Compute a set of image properties, such as the image's dominant colors. + Feature_IMAGE_PROPERTIES Feature_Type = 7 + // Run crop hints. + Feature_CROP_HINTS Feature_Type = 9 + // Run web detection. + Feature_WEB_DETECTION Feature_Type = 10 +) + +var Feature_Type_name = map[int32]string{ + 0: "TYPE_UNSPECIFIED", + 1: "FACE_DETECTION", + 2: "LANDMARK_DETECTION", + 3: "LOGO_DETECTION", + 4: "LABEL_DETECTION", + 5: "TEXT_DETECTION", + 11: "DOCUMENT_TEXT_DETECTION", + 6: "SAFE_SEARCH_DETECTION", + 7: "IMAGE_PROPERTIES", + 9: "CROP_HINTS", + 10: "WEB_DETECTION", +} +var Feature_Type_value = map[string]int32{ + "TYPE_UNSPECIFIED": 0, + "FACE_DETECTION": 1, + "LANDMARK_DETECTION": 2, + "LOGO_DETECTION": 3, + "LABEL_DETECTION": 4, + "TEXT_DETECTION": 5, + "DOCUMENT_TEXT_DETECTION": 11, + "SAFE_SEARCH_DETECTION": 6, + "IMAGE_PROPERTIES": 7, + "CROP_HINTS": 9, + "WEB_DETECTION": 10, +} + +func (x Feature_Type) String() string { + return proto.EnumName(Feature_Type_name, int32(x)) +} +func (Feature_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{0, 0} } + +// Face landmark (feature) type. +// Left and right are defined from the vantage of the viewer of the image +// without considering mirror projections typical of photos. So, `LEFT_EYE`, +// typically, is the person's right eye. +type FaceAnnotation_Landmark_Type int32 + +const ( + // Unknown face landmark detected. Should not be filled. + FaceAnnotation_Landmark_UNKNOWN_LANDMARK FaceAnnotation_Landmark_Type = 0 + // Left eye. + FaceAnnotation_Landmark_LEFT_EYE FaceAnnotation_Landmark_Type = 1 + // Right eye. + FaceAnnotation_Landmark_RIGHT_EYE FaceAnnotation_Landmark_Type = 2 + // Left of left eyebrow. + FaceAnnotation_Landmark_LEFT_OF_LEFT_EYEBROW FaceAnnotation_Landmark_Type = 3 + // Right of left eyebrow. + FaceAnnotation_Landmark_RIGHT_OF_LEFT_EYEBROW FaceAnnotation_Landmark_Type = 4 + // Left of right eyebrow. + FaceAnnotation_Landmark_LEFT_OF_RIGHT_EYEBROW FaceAnnotation_Landmark_Type = 5 + // Right of right eyebrow. + FaceAnnotation_Landmark_RIGHT_OF_RIGHT_EYEBROW FaceAnnotation_Landmark_Type = 6 + // Midpoint between eyes. + FaceAnnotation_Landmark_MIDPOINT_BETWEEN_EYES FaceAnnotation_Landmark_Type = 7 + // Nose tip. + FaceAnnotation_Landmark_NOSE_TIP FaceAnnotation_Landmark_Type = 8 + // Upper lip. + FaceAnnotation_Landmark_UPPER_LIP FaceAnnotation_Landmark_Type = 9 + // Lower lip. + FaceAnnotation_Landmark_LOWER_LIP FaceAnnotation_Landmark_Type = 10 + // Mouth left. + FaceAnnotation_Landmark_MOUTH_LEFT FaceAnnotation_Landmark_Type = 11 + // Mouth right. + FaceAnnotation_Landmark_MOUTH_RIGHT FaceAnnotation_Landmark_Type = 12 + // Mouth center. + FaceAnnotation_Landmark_MOUTH_CENTER FaceAnnotation_Landmark_Type = 13 + // Nose, bottom right. + FaceAnnotation_Landmark_NOSE_BOTTOM_RIGHT FaceAnnotation_Landmark_Type = 14 + // Nose, bottom left. + FaceAnnotation_Landmark_NOSE_BOTTOM_LEFT FaceAnnotation_Landmark_Type = 15 + // Nose, bottom center. + FaceAnnotation_Landmark_NOSE_BOTTOM_CENTER FaceAnnotation_Landmark_Type = 16 + // Left eye, top boundary. + FaceAnnotation_Landmark_LEFT_EYE_TOP_BOUNDARY FaceAnnotation_Landmark_Type = 17 + // Left eye, right corner. + FaceAnnotation_Landmark_LEFT_EYE_RIGHT_CORNER FaceAnnotation_Landmark_Type = 18 + // Left eye, bottom boundary. + FaceAnnotation_Landmark_LEFT_EYE_BOTTOM_BOUNDARY FaceAnnotation_Landmark_Type = 19 + // Left eye, left corner. + FaceAnnotation_Landmark_LEFT_EYE_LEFT_CORNER FaceAnnotation_Landmark_Type = 20 + // Right eye, top boundary. + FaceAnnotation_Landmark_RIGHT_EYE_TOP_BOUNDARY FaceAnnotation_Landmark_Type = 21 + // Right eye, right corner. + FaceAnnotation_Landmark_RIGHT_EYE_RIGHT_CORNER FaceAnnotation_Landmark_Type = 22 + // Right eye, bottom boundary. + FaceAnnotation_Landmark_RIGHT_EYE_BOTTOM_BOUNDARY FaceAnnotation_Landmark_Type = 23 + // Right eye, left corner. + FaceAnnotation_Landmark_RIGHT_EYE_LEFT_CORNER FaceAnnotation_Landmark_Type = 24 + // Left eyebrow, upper midpoint. + FaceAnnotation_Landmark_LEFT_EYEBROW_UPPER_MIDPOINT FaceAnnotation_Landmark_Type = 25 + // Right eyebrow, upper midpoint. + FaceAnnotation_Landmark_RIGHT_EYEBROW_UPPER_MIDPOINT FaceAnnotation_Landmark_Type = 26 + // Left ear tragion. + FaceAnnotation_Landmark_LEFT_EAR_TRAGION FaceAnnotation_Landmark_Type = 27 + // Right ear tragion. + FaceAnnotation_Landmark_RIGHT_EAR_TRAGION FaceAnnotation_Landmark_Type = 28 + // Left eye pupil. + FaceAnnotation_Landmark_LEFT_EYE_PUPIL FaceAnnotation_Landmark_Type = 29 + // Right eye pupil. + FaceAnnotation_Landmark_RIGHT_EYE_PUPIL FaceAnnotation_Landmark_Type = 30 + // Forehead glabella. + FaceAnnotation_Landmark_FOREHEAD_GLABELLA FaceAnnotation_Landmark_Type = 31 + // Chin gnathion. + FaceAnnotation_Landmark_CHIN_GNATHION FaceAnnotation_Landmark_Type = 32 + // Chin left gonion. + FaceAnnotation_Landmark_CHIN_LEFT_GONION FaceAnnotation_Landmark_Type = 33 + // Chin right gonion. + FaceAnnotation_Landmark_CHIN_RIGHT_GONION FaceAnnotation_Landmark_Type = 34 +) + +var FaceAnnotation_Landmark_Type_name = map[int32]string{ + 0: "UNKNOWN_LANDMARK", + 1: "LEFT_EYE", + 2: "RIGHT_EYE", + 3: "LEFT_OF_LEFT_EYEBROW", + 4: "RIGHT_OF_LEFT_EYEBROW", + 5: "LEFT_OF_RIGHT_EYEBROW", + 6: "RIGHT_OF_RIGHT_EYEBROW", + 7: "MIDPOINT_BETWEEN_EYES", + 8: "NOSE_TIP", + 9: "UPPER_LIP", + 10: "LOWER_LIP", + 11: "MOUTH_LEFT", + 12: "MOUTH_RIGHT", + 13: "MOUTH_CENTER", + 14: "NOSE_BOTTOM_RIGHT", + 15: "NOSE_BOTTOM_LEFT", + 16: "NOSE_BOTTOM_CENTER", + 17: "LEFT_EYE_TOP_BOUNDARY", + 18: "LEFT_EYE_RIGHT_CORNER", + 19: "LEFT_EYE_BOTTOM_BOUNDARY", + 20: "LEFT_EYE_LEFT_CORNER", + 21: "RIGHT_EYE_TOP_BOUNDARY", + 22: "RIGHT_EYE_RIGHT_CORNER", + 23: "RIGHT_EYE_BOTTOM_BOUNDARY", + 24: "RIGHT_EYE_LEFT_CORNER", + 25: "LEFT_EYEBROW_UPPER_MIDPOINT", + 26: "RIGHT_EYEBROW_UPPER_MIDPOINT", + 27: "LEFT_EAR_TRAGION", + 28: "RIGHT_EAR_TRAGION", + 29: "LEFT_EYE_PUPIL", + 30: "RIGHT_EYE_PUPIL", + 31: "FOREHEAD_GLABELLA", + 32: "CHIN_GNATHION", + 33: "CHIN_LEFT_GONION", + 34: "CHIN_RIGHT_GONION", +} +var FaceAnnotation_Landmark_Type_value = map[string]int32{ + "UNKNOWN_LANDMARK": 0, + "LEFT_EYE": 1, + "RIGHT_EYE": 2, + "LEFT_OF_LEFT_EYEBROW": 3, + "RIGHT_OF_LEFT_EYEBROW": 4, + "LEFT_OF_RIGHT_EYEBROW": 5, + "RIGHT_OF_RIGHT_EYEBROW": 6, + "MIDPOINT_BETWEEN_EYES": 7, + "NOSE_TIP": 8, + "UPPER_LIP": 9, + "LOWER_LIP": 10, + "MOUTH_LEFT": 11, + "MOUTH_RIGHT": 12, + "MOUTH_CENTER": 13, + "NOSE_BOTTOM_RIGHT": 14, + "NOSE_BOTTOM_LEFT": 15, + "NOSE_BOTTOM_CENTER": 16, + "LEFT_EYE_TOP_BOUNDARY": 17, + "LEFT_EYE_RIGHT_CORNER": 18, + "LEFT_EYE_BOTTOM_BOUNDARY": 19, + "LEFT_EYE_LEFT_CORNER": 20, + "RIGHT_EYE_TOP_BOUNDARY": 21, + "RIGHT_EYE_RIGHT_CORNER": 22, + "RIGHT_EYE_BOTTOM_BOUNDARY": 23, + "RIGHT_EYE_LEFT_CORNER": 24, + "LEFT_EYEBROW_UPPER_MIDPOINT": 25, + "RIGHT_EYEBROW_UPPER_MIDPOINT": 26, + "LEFT_EAR_TRAGION": 27, + "RIGHT_EAR_TRAGION": 28, + "LEFT_EYE_PUPIL": 29, + "RIGHT_EYE_PUPIL": 30, + "FOREHEAD_GLABELLA": 31, + "CHIN_GNATHION": 32, + "CHIN_LEFT_GONION": 33, + "CHIN_RIGHT_GONION": 34, +} + +func (x FaceAnnotation_Landmark_Type) String() string { + return proto.EnumName(FaceAnnotation_Landmark_Type_name, int32(x)) +} +func (FaceAnnotation_Landmark_Type) EnumDescriptor() ([]byte, []int) { + return fileDescriptor1, []int{3, 0, 0} +} + +// Users describe the type of Google Cloud Vision API tasks to perform over +// images by using *Feature*s. Each Feature indicates a type of image +// detection task to perform. Features encode the Cloud Vision API +// vertical to operate on and the number of top-scoring results to return. +type Feature struct { + // The feature type. + Type Feature_Type `protobuf:"varint,1,opt,name=type,enum=google.cloud.vision.v1p1beta1.Feature_Type" json:"type,omitempty"` + // Maximum number of results of this type. + MaxResults int32 `protobuf:"varint,2,opt,name=max_results,json=maxResults" json:"max_results,omitempty"` + // Model to use for the feature. + // Supported values: "builtin/stable" (the default if unset) and + // "builtin/latest". + Model string `protobuf:"bytes,3,opt,name=model" json:"model,omitempty"` +} + +func (m *Feature) Reset() { *m = Feature{} } +func (m *Feature) String() string { return proto.CompactTextString(m) } +func (*Feature) ProtoMessage() {} +func (*Feature) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *Feature) GetType() Feature_Type { + if m != nil { + return m.Type + } + return Feature_TYPE_UNSPECIFIED +} + +func (m *Feature) GetMaxResults() int32 { + if m != nil { + return m.MaxResults + } + return 0 +} + +func (m *Feature) GetModel() string { + if m != nil { + return m.Model + } + return "" +} + +// External image source (Google Cloud Storage image location). +type ImageSource struct { + // NOTE: For new code `image_uri` below is preferred. + // Google Cloud Storage image URI, which must be in the following form: + // `gs://bucket_name/object_name` (for details, see + // [Google Cloud Storage Request + // URIs](https://cloud.google.com/storage/docs/reference-uris)). + // NOTE: Cloud Storage object versioning is not supported. + GcsImageUri string `protobuf:"bytes,1,opt,name=gcs_image_uri,json=gcsImageUri" json:"gcs_image_uri,omitempty"` + // Image URI which supports: + // 1) Google Cloud Storage image URI, which must be in the following form: + // `gs://bucket_name/object_name` (for details, see + // [Google Cloud Storage Request + // URIs](https://cloud.google.com/storage/docs/reference-uris)). + // NOTE: Cloud Storage object versioning is not supported. + // 2) Publicly accessible image HTTP/HTTPS URL. + // This is preferred over the legacy `gcs_image_uri` above. When both + // `gcs_image_uri` and `image_uri` are specified, `image_uri` takes + // precedence. + ImageUri string `protobuf:"bytes,2,opt,name=image_uri,json=imageUri" json:"image_uri,omitempty"` +} + +func (m *ImageSource) Reset() { *m = ImageSource{} } +func (m *ImageSource) String() string { return proto.CompactTextString(m) } +func (*ImageSource) ProtoMessage() {} +func (*ImageSource) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +func (m *ImageSource) GetGcsImageUri() string { + if m != nil { + return m.GcsImageUri + } + return "" +} + +func (m *ImageSource) GetImageUri() string { + if m != nil { + return m.ImageUri + } + return "" +} + +// Client image to perform Google Cloud Vision API tasks over. +type Image struct { + // Image content, represented as a stream of bytes. + // Note: as with all `bytes` fields, protobuffers use a pure binary + // representation, whereas JSON representations use base64. + Content []byte `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"` + // Google Cloud Storage image location. If both `content` and `source` + // are provided for an image, `content` takes precedence and is + // used to perform the image annotation request. + Source *ImageSource `protobuf:"bytes,2,opt,name=source" json:"source,omitempty"` +} + +func (m *Image) Reset() { *m = Image{} } +func (m *Image) String() string { return proto.CompactTextString(m) } +func (*Image) ProtoMessage() {} +func (*Image) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +func (m *Image) GetContent() []byte { + if m != nil { + return m.Content + } + return nil +} + +func (m *Image) GetSource() *ImageSource { + if m != nil { + return m.Source + } + return nil +} + +// A face annotation object contains the results of face detection. +type FaceAnnotation struct { + // The bounding polygon around the face. The coordinates of the bounding box + // are in the original image's scale, as returned in `ImageParams`. + // The bounding box is computed to "frame" the face in accordance with human + // expectations. It is based on the landmarker results. + // Note that one or more x and/or y coordinates may not be generated in the + // `BoundingPoly` (the polygon will be unbounded) if only a partial face + // appears in the image to be annotated. + BoundingPoly *BoundingPoly `protobuf:"bytes,1,opt,name=bounding_poly,json=boundingPoly" json:"bounding_poly,omitempty"` + // The `fd_bounding_poly` bounding polygon is tighter than the + // `boundingPoly`, and encloses only the skin part of the face. Typically, it + // is used to eliminate the face from any image analysis that detects the + // "amount of skin" visible in an image. It is not based on the + // landmarker results, only on the initial face detection, hence + // the fd (face detection) prefix. + FdBoundingPoly *BoundingPoly `protobuf:"bytes,2,opt,name=fd_bounding_poly,json=fdBoundingPoly" json:"fd_bounding_poly,omitempty"` + // Detected face landmarks. + Landmarks []*FaceAnnotation_Landmark `protobuf:"bytes,3,rep,name=landmarks" json:"landmarks,omitempty"` + // Roll angle, which indicates the amount of clockwise/anti-clockwise rotation + // of the face relative to the image vertical about the axis perpendicular to + // the face. Range [-180,180]. + RollAngle float32 `protobuf:"fixed32,4,opt,name=roll_angle,json=rollAngle" json:"roll_angle,omitempty"` + // Yaw angle, which indicates the leftward/rightward angle that the face is + // pointing relative to the vertical plane perpendicular to the image. Range + // [-180,180]. + PanAngle float32 `protobuf:"fixed32,5,opt,name=pan_angle,json=panAngle" json:"pan_angle,omitempty"` + // Pitch angle, which indicates the upwards/downwards angle that the face is + // pointing relative to the image's horizontal plane. Range [-180,180]. + TiltAngle float32 `protobuf:"fixed32,6,opt,name=tilt_angle,json=tiltAngle" json:"tilt_angle,omitempty"` + // Detection confidence. Range [0, 1]. + DetectionConfidence float32 `protobuf:"fixed32,7,opt,name=detection_confidence,json=detectionConfidence" json:"detection_confidence,omitempty"` + // Face landmarking confidence. Range [0, 1]. + LandmarkingConfidence float32 `protobuf:"fixed32,8,opt,name=landmarking_confidence,json=landmarkingConfidence" json:"landmarking_confidence,omitempty"` + // Joy likelihood. + JoyLikelihood Likelihood `protobuf:"varint,9,opt,name=joy_likelihood,json=joyLikelihood,enum=google.cloud.vision.v1p1beta1.Likelihood" json:"joy_likelihood,omitempty"` + // Sorrow likelihood. + SorrowLikelihood Likelihood `protobuf:"varint,10,opt,name=sorrow_likelihood,json=sorrowLikelihood,enum=google.cloud.vision.v1p1beta1.Likelihood" json:"sorrow_likelihood,omitempty"` + // Anger likelihood. + AngerLikelihood Likelihood `protobuf:"varint,11,opt,name=anger_likelihood,json=angerLikelihood,enum=google.cloud.vision.v1p1beta1.Likelihood" json:"anger_likelihood,omitempty"` + // Surprise likelihood. + SurpriseLikelihood Likelihood `protobuf:"varint,12,opt,name=surprise_likelihood,json=surpriseLikelihood,enum=google.cloud.vision.v1p1beta1.Likelihood" json:"surprise_likelihood,omitempty"` + // Under-exposed likelihood. + UnderExposedLikelihood Likelihood `protobuf:"varint,13,opt,name=under_exposed_likelihood,json=underExposedLikelihood,enum=google.cloud.vision.v1p1beta1.Likelihood" json:"under_exposed_likelihood,omitempty"` + // Blurred likelihood. + BlurredLikelihood Likelihood `protobuf:"varint,14,opt,name=blurred_likelihood,json=blurredLikelihood,enum=google.cloud.vision.v1p1beta1.Likelihood" json:"blurred_likelihood,omitempty"` + // Headwear likelihood. + HeadwearLikelihood Likelihood `protobuf:"varint,15,opt,name=headwear_likelihood,json=headwearLikelihood,enum=google.cloud.vision.v1p1beta1.Likelihood" json:"headwear_likelihood,omitempty"` +} + +func (m *FaceAnnotation) Reset() { *m = FaceAnnotation{} } +func (m *FaceAnnotation) String() string { return proto.CompactTextString(m) } +func (*FaceAnnotation) ProtoMessage() {} +func (*FaceAnnotation) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } + +func (m *FaceAnnotation) GetBoundingPoly() *BoundingPoly { + if m != nil { + return m.BoundingPoly + } + return nil +} + +func (m *FaceAnnotation) GetFdBoundingPoly() *BoundingPoly { + if m != nil { + return m.FdBoundingPoly + } + return nil +} + +func (m *FaceAnnotation) GetLandmarks() []*FaceAnnotation_Landmark { + if m != nil { + return m.Landmarks + } + return nil +} + +func (m *FaceAnnotation) GetRollAngle() float32 { + if m != nil { + return m.RollAngle + } + return 0 +} + +func (m *FaceAnnotation) GetPanAngle() float32 { + if m != nil { + return m.PanAngle + } + return 0 +} + +func (m *FaceAnnotation) GetTiltAngle() float32 { + if m != nil { + return m.TiltAngle + } + return 0 +} + +func (m *FaceAnnotation) GetDetectionConfidence() float32 { + if m != nil { + return m.DetectionConfidence + } + return 0 +} + +func (m *FaceAnnotation) GetLandmarkingConfidence() float32 { + if m != nil { + return m.LandmarkingConfidence + } + return 0 +} + +func (m *FaceAnnotation) GetJoyLikelihood() Likelihood { + if m != nil { + return m.JoyLikelihood + } + return Likelihood_UNKNOWN +} + +func (m *FaceAnnotation) GetSorrowLikelihood() Likelihood { + if m != nil { + return m.SorrowLikelihood + } + return Likelihood_UNKNOWN +} + +func (m *FaceAnnotation) GetAngerLikelihood() Likelihood { + if m != nil { + return m.AngerLikelihood + } + return Likelihood_UNKNOWN +} + +func (m *FaceAnnotation) GetSurpriseLikelihood() Likelihood { + if m != nil { + return m.SurpriseLikelihood + } + return Likelihood_UNKNOWN +} + +func (m *FaceAnnotation) GetUnderExposedLikelihood() Likelihood { + if m != nil { + return m.UnderExposedLikelihood + } + return Likelihood_UNKNOWN +} + +func (m *FaceAnnotation) GetBlurredLikelihood() Likelihood { + if m != nil { + return m.BlurredLikelihood + } + return Likelihood_UNKNOWN +} + +func (m *FaceAnnotation) GetHeadwearLikelihood() Likelihood { + if m != nil { + return m.HeadwearLikelihood + } + return Likelihood_UNKNOWN +} + +// A face-specific landmark (for example, a face feature). +type FaceAnnotation_Landmark struct { + // Face landmark type. + Type FaceAnnotation_Landmark_Type `protobuf:"varint,3,opt,name=type,enum=google.cloud.vision.v1p1beta1.FaceAnnotation_Landmark_Type" json:"type,omitempty"` + // Face landmark position. + Position *Position `protobuf:"bytes,4,opt,name=position" json:"position,omitempty"` +} + +func (m *FaceAnnotation_Landmark) Reset() { *m = FaceAnnotation_Landmark{} } +func (m *FaceAnnotation_Landmark) String() string { return proto.CompactTextString(m) } +func (*FaceAnnotation_Landmark) ProtoMessage() {} +func (*FaceAnnotation_Landmark) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3, 0} } + +func (m *FaceAnnotation_Landmark) GetType() FaceAnnotation_Landmark_Type { + if m != nil { + return m.Type + } + return FaceAnnotation_Landmark_UNKNOWN_LANDMARK +} + +func (m *FaceAnnotation_Landmark) GetPosition() *Position { + if m != nil { + return m.Position + } + return nil +} + +// Detected entity location information. +type LocationInfo struct { + // lat/long location coordinates. + LatLng *google_type1.LatLng `protobuf:"bytes,1,opt,name=lat_lng,json=latLng" json:"lat_lng,omitempty"` +} + +func (m *LocationInfo) Reset() { *m = LocationInfo{} } +func (m *LocationInfo) String() string { return proto.CompactTextString(m) } +func (*LocationInfo) ProtoMessage() {} +func (*LocationInfo) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } + +func (m *LocationInfo) GetLatLng() *google_type1.LatLng { + if m != nil { + return m.LatLng + } + return nil +} + +// A `Property` consists of a user-supplied name/value pair. +type Property struct { + // Name of the property. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Value of the property. + Value string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` + // Value of numeric properties. + Uint64Value uint64 `protobuf:"varint,3,opt,name=uint64_value,json=uint64Value" json:"uint64_value,omitempty"` +} + +func (m *Property) Reset() { *m = Property{} } +func (m *Property) String() string { return proto.CompactTextString(m) } +func (*Property) ProtoMessage() {} +func (*Property) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } + +func (m *Property) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Property) GetValue() string { + if m != nil { + return m.Value + } + return "" +} + +func (m *Property) GetUint64Value() uint64 { + if m != nil { + return m.Uint64Value + } + return 0 +} + +// Set of detected entity features. +type EntityAnnotation struct { + // Opaque entity ID. Some IDs may be available in + // [Google Knowledge Graph Search API](https://developers.google.com/knowledge-graph/). + Mid string `protobuf:"bytes,1,opt,name=mid" json:"mid,omitempty"` + // The language code for the locale in which the entity textual + // `description` is expressed. + Locale string `protobuf:"bytes,2,opt,name=locale" json:"locale,omitempty"` + // Entity textual description, expressed in its `locale` language. + Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` + // Overall score of the result. Range [0, 1]. + Score float32 `protobuf:"fixed32,4,opt,name=score" json:"score,omitempty"` + // The accuracy of the entity detection in an image. + // For example, for an image in which the "Eiffel Tower" entity is detected, + // this field represents the confidence that there is a tower in the query + // image. Range [0, 1]. + Confidence float32 `protobuf:"fixed32,5,opt,name=confidence" json:"confidence,omitempty"` + // The relevancy of the ICA (Image Content Annotation) label to the + // image. For example, the relevancy of "tower" is likely higher to an image + // containing the detected "Eiffel Tower" than to an image containing a + // detected distant towering building, even though the confidence that + // there is a tower in each image may be the same. Range [0, 1]. + Topicality float32 `protobuf:"fixed32,6,opt,name=topicality" json:"topicality,omitempty"` + // Image region to which this entity belongs. Not produced + // for `LABEL_DETECTION` features. + BoundingPoly *BoundingPoly `protobuf:"bytes,7,opt,name=bounding_poly,json=boundingPoly" json:"bounding_poly,omitempty"` + // The location information for the detected entity. Multiple + // `LocationInfo` elements can be present because one location may + // indicate the location of the scene in the image, and another location + // may indicate the location of the place where the image was taken. + // Location information is usually present for landmarks. + Locations []*LocationInfo `protobuf:"bytes,8,rep,name=locations" json:"locations,omitempty"` + // Some entities may have optional user-supplied `Property` (name/value) + // fields, such a score or string that qualifies the entity. + Properties []*Property `protobuf:"bytes,9,rep,name=properties" json:"properties,omitempty"` +} + +func (m *EntityAnnotation) Reset() { *m = EntityAnnotation{} } +func (m *EntityAnnotation) String() string { return proto.CompactTextString(m) } +func (*EntityAnnotation) ProtoMessage() {} +func (*EntityAnnotation) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } + +func (m *EntityAnnotation) GetMid() string { + if m != nil { + return m.Mid + } + return "" +} + +func (m *EntityAnnotation) GetLocale() string { + if m != nil { + return m.Locale + } + return "" +} + +func (m *EntityAnnotation) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *EntityAnnotation) GetScore() float32 { + if m != nil { + return m.Score + } + return 0 +} + +func (m *EntityAnnotation) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + +func (m *EntityAnnotation) GetTopicality() float32 { + if m != nil { + return m.Topicality + } + return 0 +} + +func (m *EntityAnnotation) GetBoundingPoly() *BoundingPoly { + if m != nil { + return m.BoundingPoly + } + return nil +} + +func (m *EntityAnnotation) GetLocations() []*LocationInfo { + if m != nil { + return m.Locations + } + return nil +} + +func (m *EntityAnnotation) GetProperties() []*Property { + if m != nil { + return m.Properties + } + return nil +} + +// Set of features pertaining to the image, computed by computer vision +// methods over safe-search verticals (for example, adult, spoof, medical, +// violence). +type SafeSearchAnnotation struct { + // Represents the adult content likelihood for the image. Adult content may + // contain elements such as nudity, pornographic images or cartoons, or + // sexual activities. + Adult Likelihood `protobuf:"varint,1,opt,name=adult,enum=google.cloud.vision.v1p1beta1.Likelihood" json:"adult,omitempty"` + // Spoof likelihood. The likelihood that an modification + // was made to the image's canonical version to make it appear + // funny or offensive. + Spoof Likelihood `protobuf:"varint,2,opt,name=spoof,enum=google.cloud.vision.v1p1beta1.Likelihood" json:"spoof,omitempty"` + // Likelihood that this is a medical image. + Medical Likelihood `protobuf:"varint,3,opt,name=medical,enum=google.cloud.vision.v1p1beta1.Likelihood" json:"medical,omitempty"` + // Likelihood that this image contains violent content. + Violence Likelihood `protobuf:"varint,4,opt,name=violence,enum=google.cloud.vision.v1p1beta1.Likelihood" json:"violence,omitempty"` + // Likelihood that the request image contains racy content. Racy content may + // include (but is not limited to) skimpy or sheer clothing, strategically + // covered nudity, lewd or provocative poses, or close-ups of sensitive + // body areas. + Racy Likelihood `protobuf:"varint,9,opt,name=racy,enum=google.cloud.vision.v1p1beta1.Likelihood" json:"racy,omitempty"` +} + +func (m *SafeSearchAnnotation) Reset() { *m = SafeSearchAnnotation{} } +func (m *SafeSearchAnnotation) String() string { return proto.CompactTextString(m) } +func (*SafeSearchAnnotation) ProtoMessage() {} +func (*SafeSearchAnnotation) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} } + +func (m *SafeSearchAnnotation) GetAdult() Likelihood { + if m != nil { + return m.Adult + } + return Likelihood_UNKNOWN +} + +func (m *SafeSearchAnnotation) GetSpoof() Likelihood { + if m != nil { + return m.Spoof + } + return Likelihood_UNKNOWN +} + +func (m *SafeSearchAnnotation) GetMedical() Likelihood { + if m != nil { + return m.Medical + } + return Likelihood_UNKNOWN +} + +func (m *SafeSearchAnnotation) GetViolence() Likelihood { + if m != nil { + return m.Violence + } + return Likelihood_UNKNOWN +} + +func (m *SafeSearchAnnotation) GetRacy() Likelihood { + if m != nil { + return m.Racy + } + return Likelihood_UNKNOWN +} + +// Rectangle determined by min and max `LatLng` pairs. +type LatLongRect struct { + // Min lat/long pair. + MinLatLng *google_type1.LatLng `protobuf:"bytes,1,opt,name=min_lat_lng,json=minLatLng" json:"min_lat_lng,omitempty"` + // Max lat/long pair. + MaxLatLng *google_type1.LatLng `protobuf:"bytes,2,opt,name=max_lat_lng,json=maxLatLng" json:"max_lat_lng,omitempty"` +} + +func (m *LatLongRect) Reset() { *m = LatLongRect{} } +func (m *LatLongRect) String() string { return proto.CompactTextString(m) } +func (*LatLongRect) ProtoMessage() {} +func (*LatLongRect) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} } + +func (m *LatLongRect) GetMinLatLng() *google_type1.LatLng { + if m != nil { + return m.MinLatLng + } + return nil +} + +func (m *LatLongRect) GetMaxLatLng() *google_type1.LatLng { + if m != nil { + return m.MaxLatLng + } + return nil +} + +// Color information consists of RGB channels, score, and the fraction of +// the image that the color occupies in the image. +type ColorInfo struct { + // RGB components of the color. + Color *google_type.Color `protobuf:"bytes,1,opt,name=color" json:"color,omitempty"` + // Image-specific score for this color. Value in range [0, 1]. + Score float32 `protobuf:"fixed32,2,opt,name=score" json:"score,omitempty"` + // The fraction of pixels the color occupies in the image. + // Value in range [0, 1]. + PixelFraction float32 `protobuf:"fixed32,3,opt,name=pixel_fraction,json=pixelFraction" json:"pixel_fraction,omitempty"` +} + +func (m *ColorInfo) Reset() { *m = ColorInfo{} } +func (m *ColorInfo) String() string { return proto.CompactTextString(m) } +func (*ColorInfo) ProtoMessage() {} +func (*ColorInfo) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{9} } + +func (m *ColorInfo) GetColor() *google_type.Color { + if m != nil { + return m.Color + } + return nil +} + +func (m *ColorInfo) GetScore() float32 { + if m != nil { + return m.Score + } + return 0 +} + +func (m *ColorInfo) GetPixelFraction() float32 { + if m != nil { + return m.PixelFraction + } + return 0 +} + +// Set of dominant colors and their corresponding scores. +type DominantColorsAnnotation struct { + // RGB color values with their score and pixel fraction. + Colors []*ColorInfo `protobuf:"bytes,1,rep,name=colors" json:"colors,omitempty"` +} + +func (m *DominantColorsAnnotation) Reset() { *m = DominantColorsAnnotation{} } +func (m *DominantColorsAnnotation) String() string { return proto.CompactTextString(m) } +func (*DominantColorsAnnotation) ProtoMessage() {} +func (*DominantColorsAnnotation) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{10} } + +func (m *DominantColorsAnnotation) GetColors() []*ColorInfo { + if m != nil { + return m.Colors + } + return nil +} + +// Stores image properties, such as dominant colors. +type ImageProperties struct { + // If present, dominant colors completed successfully. + DominantColors *DominantColorsAnnotation `protobuf:"bytes,1,opt,name=dominant_colors,json=dominantColors" json:"dominant_colors,omitempty"` +} + +func (m *ImageProperties) Reset() { *m = ImageProperties{} } +func (m *ImageProperties) String() string { return proto.CompactTextString(m) } +func (*ImageProperties) ProtoMessage() {} +func (*ImageProperties) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{11} } + +func (m *ImageProperties) GetDominantColors() *DominantColorsAnnotation { + if m != nil { + return m.DominantColors + } + return nil +} + +// Single crop hint that is used to generate a new crop when serving an image. +type CropHint struct { + // The bounding polygon for the crop region. The coordinates of the bounding + // box are in the original image's scale, as returned in `ImageParams`. + BoundingPoly *BoundingPoly `protobuf:"bytes,1,opt,name=bounding_poly,json=boundingPoly" json:"bounding_poly,omitempty"` + // Confidence of this being a salient region. Range [0, 1]. + Confidence float32 `protobuf:"fixed32,2,opt,name=confidence" json:"confidence,omitempty"` + // Fraction of importance of this salient region with respect to the original + // image. + ImportanceFraction float32 `protobuf:"fixed32,3,opt,name=importance_fraction,json=importanceFraction" json:"importance_fraction,omitempty"` +} + +func (m *CropHint) Reset() { *m = CropHint{} } +func (m *CropHint) String() string { return proto.CompactTextString(m) } +func (*CropHint) ProtoMessage() {} +func (*CropHint) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{12} } + +func (m *CropHint) GetBoundingPoly() *BoundingPoly { + if m != nil { + return m.BoundingPoly + } + return nil +} + +func (m *CropHint) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + +func (m *CropHint) GetImportanceFraction() float32 { + if m != nil { + return m.ImportanceFraction + } + return 0 +} + +// Set of crop hints that are used to generate new crops when serving images. +type CropHintsAnnotation struct { + // Crop hint results. + CropHints []*CropHint `protobuf:"bytes,1,rep,name=crop_hints,json=cropHints" json:"crop_hints,omitempty"` +} + +func (m *CropHintsAnnotation) Reset() { *m = CropHintsAnnotation{} } +func (m *CropHintsAnnotation) String() string { return proto.CompactTextString(m) } +func (*CropHintsAnnotation) ProtoMessage() {} +func (*CropHintsAnnotation) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{13} } + +func (m *CropHintsAnnotation) GetCropHints() []*CropHint { + if m != nil { + return m.CropHints + } + return nil +} + +// Parameters for crop hints annotation request. +type CropHintsParams struct { + // Aspect ratios in floats, representing the ratio of the width to the height + // of the image. For example, if the desired aspect ratio is 4/3, the + // corresponding float value should be 1.33333. If not specified, the + // best possible crop is returned. The number of provided aspect ratios is + // limited to a maximum of 16; any aspect ratios provided after the 16th are + // ignored. + AspectRatios []float32 `protobuf:"fixed32,1,rep,packed,name=aspect_ratios,json=aspectRatios" json:"aspect_ratios,omitempty"` +} + +func (m *CropHintsParams) Reset() { *m = CropHintsParams{} } +func (m *CropHintsParams) String() string { return proto.CompactTextString(m) } +func (*CropHintsParams) ProtoMessage() {} +func (*CropHintsParams) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{14} } + +func (m *CropHintsParams) GetAspectRatios() []float32 { + if m != nil { + return m.AspectRatios + } + return nil +} + +// Parameters for web detection request. +type WebDetectionParams struct { + // Whether to include results derived from the geo information in the image. + IncludeGeoResults bool `protobuf:"varint,2,opt,name=include_geo_results,json=includeGeoResults" json:"include_geo_results,omitempty"` +} + +func (m *WebDetectionParams) Reset() { *m = WebDetectionParams{} } +func (m *WebDetectionParams) String() string { return proto.CompactTextString(m) } +func (*WebDetectionParams) ProtoMessage() {} +func (*WebDetectionParams) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{15} } + +func (m *WebDetectionParams) GetIncludeGeoResults() bool { + if m != nil { + return m.IncludeGeoResults + } + return false +} + +// Image context and/or feature-specific parameters. +type ImageContext struct { + // lat/long rectangle that specifies the location of the image. + LatLongRect *LatLongRect `protobuf:"bytes,1,opt,name=lat_long_rect,json=latLongRect" json:"lat_long_rect,omitempty"` + // List of languages to use for TEXT_DETECTION. In most cases, an empty value + // yields the best results since it enables automatic language detection. For + // languages based on the Latin alphabet, setting `language_hints` is not + // needed. In rare cases, when the language of the text in the image is known, + // setting a hint will help get better results (although it will be a + // significant hindrance if the hint is wrong). Text detection returns an + // error if one or more of the specified languages is not one of the + // [supported languages](/vision/docs/languages). + LanguageHints []string `protobuf:"bytes,2,rep,name=language_hints,json=languageHints" json:"language_hints,omitempty"` + // Parameters for crop hints annotation request. + CropHintsParams *CropHintsParams `protobuf:"bytes,4,opt,name=crop_hints_params,json=cropHintsParams" json:"crop_hints_params,omitempty"` + // Parameters for web detection. + WebDetectionParams *WebDetectionParams `protobuf:"bytes,6,opt,name=web_detection_params,json=webDetectionParams" json:"web_detection_params,omitempty"` +} + +func (m *ImageContext) Reset() { *m = ImageContext{} } +func (m *ImageContext) String() string { return proto.CompactTextString(m) } +func (*ImageContext) ProtoMessage() {} +func (*ImageContext) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{16} } + +func (m *ImageContext) GetLatLongRect() *LatLongRect { + if m != nil { + return m.LatLongRect + } + return nil +} + +func (m *ImageContext) GetLanguageHints() []string { + if m != nil { + return m.LanguageHints + } + return nil +} + +func (m *ImageContext) GetCropHintsParams() *CropHintsParams { + if m != nil { + return m.CropHintsParams + } + return nil +} + +func (m *ImageContext) GetWebDetectionParams() *WebDetectionParams { + if m != nil { + return m.WebDetectionParams + } + return nil +} + +// Request for performing Google Cloud Vision API tasks over a user-provided +// image, with user-requested features. +type AnnotateImageRequest struct { + // The image to be processed. + Image *Image `protobuf:"bytes,1,opt,name=image" json:"image,omitempty"` + // Requested features. + Features []*Feature `protobuf:"bytes,2,rep,name=features" json:"features,omitempty"` + // Additional context that may accompany the image. + ImageContext *ImageContext `protobuf:"bytes,3,opt,name=image_context,json=imageContext" json:"image_context,omitempty"` +} + +func (m *AnnotateImageRequest) Reset() { *m = AnnotateImageRequest{} } +func (m *AnnotateImageRequest) String() string { return proto.CompactTextString(m) } +func (*AnnotateImageRequest) ProtoMessage() {} +func (*AnnotateImageRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{17} } + +func (m *AnnotateImageRequest) GetImage() *Image { + if m != nil { + return m.Image + } + return nil +} + +func (m *AnnotateImageRequest) GetFeatures() []*Feature { + if m != nil { + return m.Features + } + return nil +} + +func (m *AnnotateImageRequest) GetImageContext() *ImageContext { + if m != nil { + return m.ImageContext + } + return nil +} + +// Response to an image annotation request. +type AnnotateImageResponse struct { + // If present, face detection has completed successfully. + FaceAnnotations []*FaceAnnotation `protobuf:"bytes,1,rep,name=face_annotations,json=faceAnnotations" json:"face_annotations,omitempty"` + // If present, landmark detection has completed successfully. + LandmarkAnnotations []*EntityAnnotation `protobuf:"bytes,2,rep,name=landmark_annotations,json=landmarkAnnotations" json:"landmark_annotations,omitempty"` + // If present, logo detection has completed successfully. + LogoAnnotations []*EntityAnnotation `protobuf:"bytes,3,rep,name=logo_annotations,json=logoAnnotations" json:"logo_annotations,omitempty"` + // If present, label detection has completed successfully. + LabelAnnotations []*EntityAnnotation `protobuf:"bytes,4,rep,name=label_annotations,json=labelAnnotations" json:"label_annotations,omitempty"` + // If present, text (OCR) detection has completed successfully. + TextAnnotations []*EntityAnnotation `protobuf:"bytes,5,rep,name=text_annotations,json=textAnnotations" json:"text_annotations,omitempty"` + // If present, text (OCR) detection or document (OCR) text detection has + // completed successfully. + // This annotation provides the structural hierarchy for the OCR detected + // text. + FullTextAnnotation *TextAnnotation `protobuf:"bytes,12,opt,name=full_text_annotation,json=fullTextAnnotation" json:"full_text_annotation,omitempty"` + // If present, safe-search annotation has completed successfully. + SafeSearchAnnotation *SafeSearchAnnotation `protobuf:"bytes,6,opt,name=safe_search_annotation,json=safeSearchAnnotation" json:"safe_search_annotation,omitempty"` + // If present, image properties were extracted successfully. + ImagePropertiesAnnotation *ImageProperties `protobuf:"bytes,8,opt,name=image_properties_annotation,json=imagePropertiesAnnotation" json:"image_properties_annotation,omitempty"` + // If present, crop hints have completed successfully. + CropHintsAnnotation *CropHintsAnnotation `protobuf:"bytes,11,opt,name=crop_hints_annotation,json=cropHintsAnnotation" json:"crop_hints_annotation,omitempty"` + // If present, web detection has completed successfully. + WebDetection *WebDetection `protobuf:"bytes,13,opt,name=web_detection,json=webDetection" json:"web_detection,omitempty"` + // If set, represents the error message for the operation. + // Note that filled-in image annotations are guaranteed to be + // correct, even when `error` is set. + Error *google_rpc.Status `protobuf:"bytes,9,opt,name=error" json:"error,omitempty"` +} + +func (m *AnnotateImageResponse) Reset() { *m = AnnotateImageResponse{} } +func (m *AnnotateImageResponse) String() string { return proto.CompactTextString(m) } +func (*AnnotateImageResponse) ProtoMessage() {} +func (*AnnotateImageResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{18} } + +func (m *AnnotateImageResponse) GetFaceAnnotations() []*FaceAnnotation { + if m != nil { + return m.FaceAnnotations + } + return nil +} + +func (m *AnnotateImageResponse) GetLandmarkAnnotations() []*EntityAnnotation { + if m != nil { + return m.LandmarkAnnotations + } + return nil +} + +func (m *AnnotateImageResponse) GetLogoAnnotations() []*EntityAnnotation { + if m != nil { + return m.LogoAnnotations + } + return nil +} + +func (m *AnnotateImageResponse) GetLabelAnnotations() []*EntityAnnotation { + if m != nil { + return m.LabelAnnotations + } + return nil +} + +func (m *AnnotateImageResponse) GetTextAnnotations() []*EntityAnnotation { + if m != nil { + return m.TextAnnotations + } + return nil +} + +func (m *AnnotateImageResponse) GetFullTextAnnotation() *TextAnnotation { + if m != nil { + return m.FullTextAnnotation + } + return nil +} + +func (m *AnnotateImageResponse) GetSafeSearchAnnotation() *SafeSearchAnnotation { + if m != nil { + return m.SafeSearchAnnotation + } + return nil +} + +func (m *AnnotateImageResponse) GetImagePropertiesAnnotation() *ImageProperties { + if m != nil { + return m.ImagePropertiesAnnotation + } + return nil +} + +func (m *AnnotateImageResponse) GetCropHintsAnnotation() *CropHintsAnnotation { + if m != nil { + return m.CropHintsAnnotation + } + return nil +} + +func (m *AnnotateImageResponse) GetWebDetection() *WebDetection { + if m != nil { + return m.WebDetection + } + return nil +} + +func (m *AnnotateImageResponse) GetError() *google_rpc.Status { + if m != nil { + return m.Error + } + return nil +} + +// Multiple image annotation requests are batched into a single service call. +type BatchAnnotateImagesRequest struct { + // Individual image annotation requests for this batch. + Requests []*AnnotateImageRequest `protobuf:"bytes,1,rep,name=requests" json:"requests,omitempty"` +} + +func (m *BatchAnnotateImagesRequest) Reset() { *m = BatchAnnotateImagesRequest{} } +func (m *BatchAnnotateImagesRequest) String() string { return proto.CompactTextString(m) } +func (*BatchAnnotateImagesRequest) ProtoMessage() {} +func (*BatchAnnotateImagesRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{19} } + +func (m *BatchAnnotateImagesRequest) GetRequests() []*AnnotateImageRequest { + if m != nil { + return m.Requests + } + return nil +} + +// Response to a batch image annotation request. +type BatchAnnotateImagesResponse struct { + // Individual responses to image annotation requests within the batch. + Responses []*AnnotateImageResponse `protobuf:"bytes,1,rep,name=responses" json:"responses,omitempty"` +} + +func (m *BatchAnnotateImagesResponse) Reset() { *m = BatchAnnotateImagesResponse{} } +func (m *BatchAnnotateImagesResponse) String() string { return proto.CompactTextString(m) } +func (*BatchAnnotateImagesResponse) ProtoMessage() {} +func (*BatchAnnotateImagesResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{20} } + +func (m *BatchAnnotateImagesResponse) GetResponses() []*AnnotateImageResponse { + if m != nil { + return m.Responses + } + return nil +} + +func init() { + proto.RegisterType((*Feature)(nil), "google.cloud.vision.v1p1beta1.Feature") + proto.RegisterType((*ImageSource)(nil), "google.cloud.vision.v1p1beta1.ImageSource") + proto.RegisterType((*Image)(nil), "google.cloud.vision.v1p1beta1.Image") + proto.RegisterType((*FaceAnnotation)(nil), "google.cloud.vision.v1p1beta1.FaceAnnotation") + proto.RegisterType((*FaceAnnotation_Landmark)(nil), "google.cloud.vision.v1p1beta1.FaceAnnotation.Landmark") + proto.RegisterType((*LocationInfo)(nil), "google.cloud.vision.v1p1beta1.LocationInfo") + proto.RegisterType((*Property)(nil), "google.cloud.vision.v1p1beta1.Property") + proto.RegisterType((*EntityAnnotation)(nil), "google.cloud.vision.v1p1beta1.EntityAnnotation") + proto.RegisterType((*SafeSearchAnnotation)(nil), "google.cloud.vision.v1p1beta1.SafeSearchAnnotation") + proto.RegisterType((*LatLongRect)(nil), "google.cloud.vision.v1p1beta1.LatLongRect") + proto.RegisterType((*ColorInfo)(nil), "google.cloud.vision.v1p1beta1.ColorInfo") + proto.RegisterType((*DominantColorsAnnotation)(nil), "google.cloud.vision.v1p1beta1.DominantColorsAnnotation") + proto.RegisterType((*ImageProperties)(nil), "google.cloud.vision.v1p1beta1.ImageProperties") + proto.RegisterType((*CropHint)(nil), "google.cloud.vision.v1p1beta1.CropHint") + proto.RegisterType((*CropHintsAnnotation)(nil), "google.cloud.vision.v1p1beta1.CropHintsAnnotation") + proto.RegisterType((*CropHintsParams)(nil), "google.cloud.vision.v1p1beta1.CropHintsParams") + proto.RegisterType((*WebDetectionParams)(nil), "google.cloud.vision.v1p1beta1.WebDetectionParams") + proto.RegisterType((*ImageContext)(nil), "google.cloud.vision.v1p1beta1.ImageContext") + proto.RegisterType((*AnnotateImageRequest)(nil), "google.cloud.vision.v1p1beta1.AnnotateImageRequest") + proto.RegisterType((*AnnotateImageResponse)(nil), "google.cloud.vision.v1p1beta1.AnnotateImageResponse") + proto.RegisterType((*BatchAnnotateImagesRequest)(nil), "google.cloud.vision.v1p1beta1.BatchAnnotateImagesRequest") + proto.RegisterType((*BatchAnnotateImagesResponse)(nil), "google.cloud.vision.v1p1beta1.BatchAnnotateImagesResponse") + proto.RegisterEnum("google.cloud.vision.v1p1beta1.Likelihood", Likelihood_name, Likelihood_value) + proto.RegisterEnum("google.cloud.vision.v1p1beta1.Feature_Type", Feature_Type_name, Feature_Type_value) + proto.RegisterEnum("google.cloud.vision.v1p1beta1.FaceAnnotation_Landmark_Type", FaceAnnotation_Landmark_Type_name, FaceAnnotation_Landmark_Type_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for ImageAnnotator service + +type ImageAnnotatorClient interface { + // Run image detection and annotation for a batch of images. + BatchAnnotateImages(ctx context.Context, in *BatchAnnotateImagesRequest, opts ...grpc.CallOption) (*BatchAnnotateImagesResponse, error) +} + +type imageAnnotatorClient struct { + cc *grpc.ClientConn +} + +func NewImageAnnotatorClient(cc *grpc.ClientConn) ImageAnnotatorClient { + return &imageAnnotatorClient{cc} +} + +func (c *imageAnnotatorClient) BatchAnnotateImages(ctx context.Context, in *BatchAnnotateImagesRequest, opts ...grpc.CallOption) (*BatchAnnotateImagesResponse, error) { + out := new(BatchAnnotateImagesResponse) + err := grpc.Invoke(ctx, "/google.cloud.vision.v1p1beta1.ImageAnnotator/BatchAnnotateImages", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for ImageAnnotator service + +type ImageAnnotatorServer interface { + // Run image detection and annotation for a batch of images. + BatchAnnotateImages(context.Context, *BatchAnnotateImagesRequest) (*BatchAnnotateImagesResponse, error) +} + +func RegisterImageAnnotatorServer(s *grpc.Server, srv ImageAnnotatorServer) { + s.RegisterService(&_ImageAnnotator_serviceDesc, srv) +} + +func _ImageAnnotator_BatchAnnotateImages_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BatchAnnotateImagesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ImageAnnotatorServer).BatchAnnotateImages(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.vision.v1p1beta1.ImageAnnotator/BatchAnnotateImages", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ImageAnnotatorServer).BatchAnnotateImages(ctx, req.(*BatchAnnotateImagesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _ImageAnnotator_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.vision.v1p1beta1.ImageAnnotator", + HandlerType: (*ImageAnnotatorServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "BatchAnnotateImages", + Handler: _ImageAnnotator_BatchAnnotateImages_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/vision/v1p1beta1/image_annotator.proto", +} + +func init() { + proto.RegisterFile("google/cloud/vision/v1p1beta1/image_annotator.proto", fileDescriptor1) +} + +var fileDescriptor1 = []byte{ + // 2392 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x59, 0xcd, 0x72, 0xe3, 0xc6, + 0xf1, 0x37, 0xa9, 0x2f, 0xb2, 0x49, 0x91, 0xd0, 0x48, 0x2b, 0x73, 0xb5, 0xbb, 0x5e, 0x19, 0xff, + 0xbf, 0x13, 0xc5, 0x71, 0xa8, 0x5a, 0xad, 0xe3, 0x54, 0xd6, 0x49, 0x39, 0x24, 0x05, 0x49, 0x2c, + 0x73, 0x49, 0xd4, 0x90, 0xb2, 0xbc, 0x5b, 0x4e, 0x21, 0x10, 0x38, 0xe4, 0xc2, 0x06, 0x31, 0x30, + 0x00, 0xee, 0x4a, 0x57, 0x5f, 0x73, 0xcc, 0x2d, 0xf7, 0x1c, 0x73, 0x4a, 0x9e, 0xc1, 0x2f, 0x90, + 0x43, 0x1e, 0x20, 0x39, 0xe4, 0x09, 0x52, 0xa9, 0x9c, 0x52, 0xf3, 0x01, 0x70, 0xc0, 0xfd, 0xa0, + 0xb8, 0xa9, 0x9c, 0x88, 0xe9, 0x9e, 0xdf, 0xaf, 0x67, 0xba, 0xa7, 0x67, 0x7a, 0x86, 0xf0, 0x70, + 0x4c, 0xe9, 0xd8, 0x23, 0x87, 0x8e, 0x47, 0xa7, 0xc3, 0xc3, 0xe7, 0x6e, 0xe4, 0x52, 0xff, 0xf0, + 0xf9, 0x83, 0xe0, 0xc1, 0x25, 0x89, 0xed, 0x07, 0x87, 0xee, 0xc4, 0x1e, 0x13, 0xcb, 0xf6, 0x7d, + 0x1a, 0xdb, 0x31, 0x0d, 0xeb, 0x41, 0x48, 0x63, 0x8a, 0xee, 0x09, 0x50, 0x9d, 0x83, 0xea, 0x02, + 0x54, 0x4f, 0x41, 0x7b, 0x77, 0x25, 0xa7, 0x1d, 0xb8, 0x87, 0x12, 0xea, 0x52, 0x3f, 0x12, 0xe0, + 0xbd, 0x8f, 0xde, 0x6c, 0x71, 0x4c, 0xe8, 0x84, 0xc4, 0xe1, 0xb5, 0xec, 0xbd, 0x60, 0x7c, 0x31, + 0xb9, 0x8a, 0xad, 0x99, 0x0d, 0x09, 0x7a, 0xf0, 0x66, 0xd0, 0x0b, 0x72, 0x69, 0x0d, 0x49, 0x4c, + 0x1c, 0x05, 0xf2, 0xae, 0x84, 0x84, 0x81, 0x73, 0x18, 0xc5, 0x76, 0x3c, 0x8d, 0xe6, 0x14, 0xf1, + 0x75, 0x40, 0x0e, 0x1d, 0xea, 0x25, 0x4e, 0xd8, 0xab, 0xa9, 0x0a, 0xcf, 0x8e, 0x3d, 0x7f, 0x2c, + 0x34, 0xfa, 0xbf, 0xf3, 0xb0, 0x71, 0x42, 0xec, 0x78, 0x1a, 0x12, 0xf4, 0x19, 0xac, 0xb2, 0x0e, + 0xb5, 0xdc, 0x7e, 0xee, 0xa0, 0x72, 0xf4, 0xe3, 0xfa, 0x1b, 0x3d, 0x57, 0x97, 0xa8, 0xfa, 0xe0, + 0x3a, 0x20, 0x98, 0x03, 0xd1, 0x7d, 0x28, 0x4d, 0xec, 0x2b, 0x2b, 0x24, 0xd1, 0xd4, 0x8b, 0xa3, + 0x5a, 0x7e, 0x3f, 0x77, 0xb0, 0x86, 0x61, 0x62, 0x5f, 0x61, 0x21, 0x41, 0x3b, 0xb0, 0x36, 0xa1, + 0x43, 0xe2, 0xd5, 0x56, 0xf6, 0x73, 0x07, 0x45, 0x2c, 0x1a, 0xfa, 0x3f, 0x73, 0xb0, 0xca, 0x58, + 0xd0, 0x0e, 0x68, 0x83, 0x27, 0xa6, 0x61, 0x9d, 0x77, 0xfb, 0xa6, 0xd1, 0x6a, 0x9f, 0xb4, 0x8d, + 0x63, 0xed, 0x1d, 0x84, 0xa0, 0x72, 0xd2, 0x68, 0x19, 0xd6, 0xb1, 0x31, 0x30, 0x5a, 0x83, 0x76, + 0xaf, 0xab, 0xe5, 0xd0, 0x2e, 0xa0, 0x4e, 0xa3, 0x7b, 0xfc, 0xb8, 0x81, 0x3f, 0x57, 0xe4, 0x79, + 0xd6, 0xb7, 0xd3, 0x3b, 0xed, 0x29, 0xb2, 0x15, 0xb4, 0x0d, 0xd5, 0x4e, 0xa3, 0x69, 0x74, 0x14, + 0xe1, 0x2a, 0xeb, 0x38, 0x30, 0xbe, 0x1c, 0x28, 0xb2, 0x35, 0x74, 0x07, 0xde, 0x3d, 0xee, 0xb5, + 0xce, 0x1f, 0x1b, 0xdd, 0x81, 0x35, 0xa7, 0x2c, 0xa1, 0xdb, 0x70, 0xab, 0xdf, 0x38, 0x31, 0xac, + 0xbe, 0xd1, 0xc0, 0xad, 0x33, 0x45, 0xb5, 0xce, 0x86, 0xdd, 0x7e, 0xdc, 0x38, 0x35, 0x2c, 0x13, + 0xf7, 0x4c, 0x03, 0x0f, 0xda, 0x46, 0x5f, 0xdb, 0x40, 0x15, 0x80, 0x16, 0xee, 0x99, 0xd6, 0x59, + 0xbb, 0x3b, 0xe8, 0x6b, 0x45, 0xb4, 0x05, 0x9b, 0x17, 0x46, 0x53, 0x01, 0x82, 0xde, 0x85, 0x52, + 0x9b, 0x2d, 0xda, 0x3e, 0x9d, 0x86, 0x0e, 0x41, 0x3a, 0x6c, 0x8e, 0x9d, 0xc8, 0x12, 0xeb, 0x78, + 0x1a, 0xba, 0x3c, 0x10, 0x45, 0x5c, 0x1a, 0x3b, 0x11, 0xef, 0x76, 0x1e, 0xba, 0xe8, 0x0e, 0x14, + 0x67, 0xfa, 0x3c, 0xd7, 0x17, 0x5c, 0xa9, 0xd4, 0x09, 0xac, 0xf1, 0x8e, 0xa8, 0x06, 0x1b, 0x0e, + 0xf5, 0x63, 0xe2, 0xc7, 0x9c, 0xa3, 0x8c, 0x93, 0x26, 0x6a, 0xc2, 0x7a, 0xc4, 0xad, 0x71, 0x70, + 0xe9, 0xe8, 0xc3, 0x05, 0x51, 0x56, 0xc6, 0x87, 0x25, 0x52, 0xff, 0x83, 0x06, 0x95, 0x13, 0xdb, + 0x21, 0x8d, 0x74, 0x2d, 0x23, 0x13, 0x36, 0x2f, 0xe9, 0xd4, 0x1f, 0xba, 0xfe, 0xd8, 0x0a, 0xa8, + 0x77, 0xcd, 0xcd, 0x96, 0x16, 0xae, 0xa1, 0xa6, 0xc4, 0x98, 0xd4, 0xbb, 0xc6, 0xe5, 0x4b, 0xa5, + 0x85, 0xce, 0x41, 0x1b, 0x0d, 0xad, 0x2c, 0x69, 0x7e, 0x79, 0xd2, 0xca, 0x68, 0xa8, 0xb6, 0xd1, + 0x00, 0x8a, 0x9e, 0xed, 0x0f, 0x27, 0x76, 0xf8, 0x4d, 0x54, 0x5b, 0xd9, 0x5f, 0x39, 0x28, 0x1d, + 0x7d, 0xb2, 0x68, 0xa1, 0x67, 0xa6, 0x5a, 0xef, 0x48, 0x38, 0x9e, 0x11, 0xa1, 0x7b, 0x00, 0x21, + 0xf5, 0x3c, 0xcb, 0xf6, 0xc7, 0x1e, 0xa9, 0xad, 0xee, 0xe7, 0x0e, 0xf2, 0xb8, 0xc8, 0x24, 0x0d, + 0x26, 0x60, 0x41, 0x0b, 0x6c, 0x5f, 0x6a, 0xd7, 0xb8, 0xb6, 0x10, 0xd8, 0xbe, 0x50, 0xde, 0x03, + 0x88, 0x5d, 0x2f, 0x96, 0xda, 0x75, 0x81, 0x65, 0x12, 0xa1, 0x7e, 0x00, 0x3b, 0x69, 0xfe, 0x5b, + 0x0e, 0xf5, 0x47, 0xee, 0x90, 0xf8, 0x0e, 0xa9, 0x6d, 0xf0, 0x8e, 0xdb, 0xa9, 0xae, 0x95, 0xaa, + 0xd0, 0x4f, 0x61, 0x37, 0x19, 0x1a, 0x73, 0x9d, 0x02, 0x2a, 0x70, 0xd0, 0x2d, 0x45, 0xab, 0xc0, + 0x4c, 0xa8, 0x7c, 0x4d, 0xaf, 0x2d, 0xcf, 0xfd, 0x86, 0x78, 0xee, 0x33, 0x4a, 0x87, 0xb5, 0x22, + 0xdf, 0x08, 0x7e, 0xb4, 0xc0, 0x3f, 0x9d, 0x14, 0x80, 0x37, 0xbf, 0xa6, 0xd7, 0xb3, 0x26, 0xfa, + 0x02, 0xb6, 0x22, 0x1a, 0x86, 0xf4, 0x85, 0x4a, 0x0a, 0xcb, 0x92, 0x6a, 0x82, 0x43, 0xe1, 0x1d, + 0x80, 0x66, 0xfb, 0x63, 0x12, 0xaa, 0xb4, 0xa5, 0x65, 0x69, 0xab, 0x9c, 0x42, 0x61, 0x7d, 0x0a, + 0xdb, 0xd1, 0x34, 0x0c, 0x42, 0x37, 0x22, 0x2a, 0x71, 0x79, 0x59, 0x62, 0x94, 0xb0, 0x28, 0xdc, + 0x0e, 0xd4, 0xa6, 0xfe, 0x90, 0x84, 0x16, 0xb9, 0x0a, 0x68, 0x44, 0x86, 0xaa, 0x81, 0xcd, 0x65, + 0x0d, 0xec, 0x72, 0x2a, 0x43, 0x30, 0x29, 0x46, 0xbe, 0x04, 0x74, 0xe9, 0x4d, 0xc3, 0x30, 0x4b, + 0x5f, 0x59, 0x96, 0x7e, 0x4b, 0x92, 0x64, 0x5d, 0xf3, 0x8c, 0xd8, 0xc3, 0x17, 0xc4, 0xce, 0xf8, + 0xbc, 0xba, 0xb4, 0x6b, 0x12, 0x96, 0x99, 0x6c, 0xef, 0xaf, 0x1b, 0x50, 0x48, 0x72, 0x0a, 0xf5, + 0xe4, 0x11, 0xb4, 0xc2, 0x99, 0x3f, 0x7d, 0xbb, 0xcc, 0x54, 0x8f, 0xa4, 0x16, 0x14, 0x02, 0x1a, + 0xb9, 0x4c, 0xcf, 0xf3, 0xb2, 0x74, 0xf4, 0xc3, 0x05, 0xa4, 0xa6, 0xec, 0x8e, 0x53, 0xa0, 0xfe, + 0xe7, 0xf5, 0xd9, 0x01, 0x75, 0xde, 0xfd, 0xbc, 0xdb, 0xbb, 0xe8, 0x5a, 0xc9, 0xf1, 0xa3, 0xbd, + 0x83, 0xca, 0x50, 0xe8, 0x18, 0x27, 0x03, 0xcb, 0x78, 0x62, 0x68, 0x39, 0xb4, 0x09, 0x45, 0xdc, + 0x3e, 0x3d, 0x13, 0xcd, 0x3c, 0xaa, 0xc1, 0x0e, 0x57, 0xf6, 0x4e, 0xac, 0xa4, 0x53, 0x13, 0xf7, + 0x2e, 0xb4, 0x15, 0x76, 0xa2, 0x88, 0x8e, 0xf3, 0xaa, 0x55, 0xa6, 0x4a, 0x40, 0x29, 0x17, 0x57, + 0xad, 0xa1, 0x3d, 0xd8, 0x4d, 0x51, 0x59, 0xdd, 0x3a, 0x83, 0x3d, 0x6e, 0x1f, 0x9b, 0xbd, 0x76, + 0x77, 0x60, 0x35, 0x8d, 0xc1, 0x85, 0x61, 0x74, 0x99, 0x96, 0x9d, 0x46, 0x65, 0x28, 0x74, 0x7b, + 0x7d, 0xc3, 0x1a, 0xb4, 0x4d, 0xad, 0xc0, 0xc6, 0x78, 0x6e, 0x9a, 0x06, 0xb6, 0x3a, 0x6d, 0x53, + 0x2b, 0xb2, 0x66, 0xa7, 0x77, 0x21, 0x9b, 0xc0, 0x4e, 0xae, 0xc7, 0xbd, 0xf3, 0xc1, 0x19, 0x1f, + 0x95, 0x56, 0x42, 0x55, 0x28, 0x89, 0x36, 0xb7, 0xa7, 0x95, 0x91, 0x06, 0x65, 0x21, 0x68, 0x19, + 0xdd, 0x81, 0x81, 0xb5, 0x4d, 0x74, 0x0b, 0xb6, 0x38, 0x7d, 0xb3, 0x37, 0x18, 0xf4, 0x1e, 0xcb, + 0x8e, 0x15, 0xe6, 0x2f, 0x55, 0xcc, 0xf9, 0xaa, 0xec, 0xf0, 0x56, 0xa5, 0x92, 0x44, 0x4b, 0x67, + 0x6d, 0x3c, 0x31, 0xac, 0x41, 0xcf, 0xb4, 0x9a, 0xbd, 0xf3, 0xee, 0x71, 0x03, 0x3f, 0xd1, 0xb6, + 0x32, 0x2a, 0x31, 0xeb, 0x56, 0x0f, 0x77, 0x0d, 0xac, 0x21, 0x74, 0x17, 0x6a, 0xa9, 0x4a, 0x32, + 0xa6, 0xc0, 0xed, 0xd4, 0xfd, 0x4c, 0xcb, 0x3f, 0x24, 0x6e, 0x67, 0xe6, 0xc8, 0x97, 0xcc, 0xdd, + 0xca, 0xea, 0x32, 0xf6, 0x76, 0xd1, 0x3d, 0xb8, 0x3d, 0xd3, 0xcd, 0x1b, 0x7c, 0x77, 0x16, 0xd5, + 0x79, 0x8b, 0x35, 0x74, 0x1f, 0xee, 0xa8, 0x71, 0xb6, 0x44, 0x08, 0x92, 0x88, 0x69, 0xb7, 0xd1, + 0x3e, 0xdc, 0xcd, 0x84, 0x74, 0xbe, 0xc7, 0x1e, 0x73, 0xa8, 0xa0, 0x68, 0x60, 0x6b, 0x80, 0x1b, + 0xa7, 0xac, 0x8e, 0xb8, 0xc3, 0xbc, 0x2f, 0x71, 0x8a, 0xf8, 0x2e, 0x2f, 0x86, 0x92, 0xb9, 0x9b, + 0xe7, 0x66, 0xbb, 0xa3, 0xdd, 0x63, 0xc5, 0xd0, 0x6c, 0x78, 0x42, 0xf8, 0x1e, 0xc3, 0x9f, 0xf4, + 0xb0, 0x71, 0x66, 0x34, 0x8e, 0xad, 0x53, 0x5e, 0x2b, 0x75, 0x1a, 0xda, 0x7d, 0x56, 0xb1, 0xb4, + 0xce, 0xda, 0x5d, 0xeb, 0xb4, 0xdb, 0x18, 0x9c, 0x31, 0xca, 0x7d, 0x66, 0x9f, 0x8b, 0x38, 0xef, + 0x69, 0xaf, 0xcb, 0xa4, 0xef, 0x33, 0x3c, 0x97, 0x0a, 0x66, 0x29, 0xd6, 0xf5, 0x5f, 0x40, 0xb9, + 0x43, 0x1d, 0x9e, 0x9b, 0x6d, 0x7f, 0x44, 0xd1, 0x47, 0xb0, 0xe1, 0xd9, 0xb1, 0xe5, 0xf9, 0x63, + 0x59, 0x1e, 0x6c, 0x27, 0xa9, 0xc8, 0x52, 0xb5, 0xde, 0xb1, 0xe3, 0x8e, 0x3f, 0xc6, 0xeb, 0x1e, + 0xff, 0xd5, 0x2f, 0xa0, 0x60, 0x86, 0x34, 0x20, 0x61, 0x7c, 0x8d, 0x10, 0xac, 0xfa, 0xf6, 0x84, + 0xc8, 0x82, 0x88, 0x7f, 0xb3, 0x5a, 0xf2, 0xb9, 0xed, 0x4d, 0x89, 0xac, 0x82, 0x44, 0x03, 0xbd, + 0x0f, 0xe5, 0xa9, 0xeb, 0xc7, 0x9f, 0x7c, 0x6c, 0x09, 0x25, 0xdb, 0x48, 0x56, 0x71, 0x49, 0xc8, + 0xbe, 0x60, 0x22, 0xfd, 0xf7, 0x2b, 0xa0, 0x19, 0x7e, 0xec, 0xc6, 0xd7, 0x4a, 0x01, 0xa3, 0xc1, + 0xca, 0xc4, 0x1d, 0x4a, 0x03, 0xec, 0x13, 0xed, 0xc2, 0xba, 0x47, 0x1d, 0xdb, 0x4b, 0x0c, 0xc8, + 0x16, 0xda, 0x87, 0xd2, 0x90, 0x44, 0x4e, 0xe8, 0x06, 0x7c, 0x53, 0x11, 0x95, 0xac, 0x2a, 0x62, + 0x23, 0x8b, 0x1c, 0x1a, 0x26, 0x85, 0x80, 0x68, 0xa0, 0xf7, 0x00, 0x94, 0x93, 0x58, 0x54, 0x01, + 0x8a, 0x84, 0xe9, 0x63, 0x1a, 0xb8, 0x8e, 0xed, 0xb9, 0xf1, 0xb5, 0xac, 0x03, 0x14, 0xc9, 0xcb, + 0x25, 0xd6, 0xc6, 0x7f, 0x5b, 0x62, 0xb5, 0xa1, 0xe8, 0xc9, 0xf8, 0x44, 0xb5, 0x02, 0xaf, 0x85, + 0x16, 0xb1, 0xa9, 0xf1, 0xc4, 0x33, 0x34, 0x3a, 0x05, 0x08, 0x44, 0xb0, 0x5c, 0x12, 0xd5, 0x8a, + 0x9c, 0x6b, 0xe1, 0x46, 0x2b, 0xa3, 0x8b, 0x15, 0xa8, 0xfe, 0xb7, 0x3c, 0xec, 0xf4, 0xed, 0x11, + 0xe9, 0x13, 0x3b, 0x74, 0x9e, 0x29, 0x01, 0xfa, 0x0c, 0xd6, 0xec, 0xe1, 0xd4, 0x8b, 0xe5, 0xed, + 0x64, 0x89, 0x43, 0x47, 0xe0, 0x18, 0x41, 0x14, 0x50, 0x3a, 0xe2, 0xe1, 0x5c, 0x8e, 0x80, 0xe3, + 0x50, 0x0b, 0x36, 0x26, 0x64, 0xc8, 0xc2, 0x21, 0x8f, 0xa7, 0x25, 0x28, 0x12, 0x24, 0x32, 0xa0, + 0xf0, 0xdc, 0xa5, 0x1e, 0x5f, 0x03, 0xab, 0xcb, 0xb2, 0xa4, 0x50, 0xf4, 0x4b, 0x58, 0x0d, 0x6d, + 0xe7, 0x7a, 0xf9, 0x0a, 0x8d, 0xc3, 0xf4, 0x17, 0x50, 0x62, 0xd9, 0x46, 0xfd, 0x31, 0x26, 0x4e, + 0x8c, 0x1e, 0x42, 0x69, 0xe2, 0xfa, 0xd6, 0x0d, 0x92, 0xb3, 0x38, 0x71, 0x7d, 0xf1, 0xc9, 0x41, + 0xf6, 0x55, 0x0a, 0xca, 0xbf, 0x09, 0x64, 0x5f, 0x89, 0x4f, 0x3d, 0x84, 0x62, 0x8b, 0xdd, 0x4b, + 0xf9, 0x7e, 0x70, 0x00, 0x6b, 0xfc, 0x92, 0x2a, 0x0d, 0xa2, 0x0c, 0x96, 0x77, 0xc3, 0xa2, 0xc3, + 0x2c, 0xa3, 0xf2, 0x6a, 0x46, 0x7d, 0x00, 0x95, 0xc0, 0xbd, 0x22, 0x9e, 0x35, 0x0a, 0x6d, 0x27, + 0x4d, 0xc6, 0x3c, 0xde, 0xe4, 0xd2, 0x13, 0x29, 0xd4, 0xbf, 0x82, 0xda, 0x31, 0x9d, 0xb8, 0xbe, + 0xed, 0xc7, 0x9c, 0x34, 0x52, 0x56, 0xd5, 0xaf, 0x60, 0x9d, 0x5b, 0x88, 0x6a, 0x39, 0xbe, 0x66, + 0x0f, 0x16, 0x78, 0x32, 0x1d, 0x3c, 0x96, 0x38, 0x3d, 0x82, 0x2a, 0xbf, 0x23, 0x99, 0xe9, 0x1a, + 0x46, 0xbf, 0x81, 0xea, 0x50, 0x1a, 0xb4, 0x52, 0x76, 0x36, 0xc3, 0x9f, 0x2d, 0x60, 0x7f, 0xdd, + 0x30, 0x71, 0x65, 0x98, 0xd1, 0xe8, 0x7f, 0xcc, 0x41, 0xa1, 0x15, 0xd2, 0xe0, 0xcc, 0xf5, 0xe3, + 0xff, 0xc1, 0xdd, 0x2b, 0xbb, 0x55, 0xe5, 0x5f, 0xda, 0xaa, 0x0e, 0x61, 0xdb, 0x9d, 0x04, 0x34, + 0x8c, 0x6d, 0xdf, 0x21, 0xf3, 0xde, 0x47, 0x33, 0x55, 0x1a, 0x82, 0x5f, 0xc3, 0x76, 0x32, 0x5c, + 0xd5, 0xfb, 0x27, 0x00, 0x4e, 0x48, 0x03, 0xeb, 0x19, 0x93, 0xcb, 0x08, 0x2c, 0xda, 0x35, 0x12, + 0x1e, 0x5c, 0x74, 0x12, 0x46, 0xfd, 0x13, 0xa8, 0xa6, 0xf4, 0xa6, 0x1d, 0xda, 0x93, 0x08, 0xfd, + 0x1f, 0x6c, 0xda, 0x51, 0x40, 0x9c, 0xd8, 0x0a, 0x99, 0x2d, 0xc1, 0x9e, 0xc7, 0x65, 0x21, 0xc4, + 0x5c, 0xa6, 0x1f, 0x03, 0xba, 0x20, 0x97, 0xc7, 0xc9, 0x15, 0x4a, 0x42, 0xeb, 0xb0, 0xed, 0xfa, + 0x8e, 0x37, 0x1d, 0x12, 0x6b, 0x4c, 0x68, 0xe6, 0x35, 0xa3, 0x80, 0xb7, 0xa4, 0xea, 0x94, 0x50, + 0xf9, 0xa8, 0xa1, 0x7f, 0x9f, 0x87, 0x32, 0x5f, 0x02, 0x2d, 0x76, 0xc7, 0xbe, 0x8a, 0x51, 0x17, + 0x36, 0x79, 0x56, 0x50, 0x7f, 0x6c, 0x85, 0xc4, 0x89, 0x65, 0x40, 0x16, 0x5d, 0xb5, 0x95, 0x8c, + 0xc4, 0x25, 0x4f, 0x49, 0xcf, 0x0f, 0xa0, 0xe2, 0xd9, 0xfe, 0x78, 0xca, 0xae, 0xfd, 0xc2, 0x55, + 0xf9, 0xfd, 0x95, 0x83, 0x22, 0xde, 0x4c, 0xa4, 0x7c, 0xe2, 0xe8, 0x29, 0x6c, 0xcd, 0xbc, 0x69, + 0x05, 0x7c, 0x32, 0xb2, 0xe6, 0xad, 0xdf, 0xd0, 0xa9, 0xd2, 0x7b, 0xb8, 0xea, 0xcc, 0xb9, 0xd3, + 0x81, 0x9d, 0xcc, 0x4b, 0x54, 0x42, 0xbf, 0xce, 0xe9, 0x1f, 0x2c, 0xa0, 0x7f, 0xd9, 0xc9, 0x18, + 0xbd, 0x78, 0x49, 0xa6, 0xff, 0x23, 0x07, 0x3b, 0x72, 0x75, 0x10, 0xee, 0x50, 0x4c, 0xbe, 0x9d, + 0x92, 0x28, 0x46, 0x8f, 0x60, 0x8d, 0xbf, 0x71, 0x48, 0x47, 0xfe, 0xff, 0x4d, 0xde, 0x2c, 0xb0, + 0x80, 0xa0, 0x26, 0x14, 0x46, 0xe2, 0xa5, 0x4a, 0xb8, 0xad, 0x74, 0xf4, 0x83, 0x9b, 0x3d, 0x6c, + 0xe1, 0x14, 0xc7, 0x32, 0x4c, 0x3c, 0xba, 0x38, 0x22, 0xc2, 0x7c, 0xa5, 0x2f, 0xce, 0x30, 0x75, + 0x51, 0xe0, 0xb2, 0xab, 0xb4, 0xf4, 0xdf, 0x16, 0xe0, 0xd6, 0xdc, 0x54, 0xa3, 0x80, 0xfa, 0x11, + 0x41, 0x5f, 0x82, 0x36, 0xb2, 0x1d, 0xa2, 0x3c, 0x14, 0x26, 0x99, 0xf1, 0x93, 0xa5, 0x6e, 0x43, + 0xb8, 0x3a, 0xca, 0xb4, 0x23, 0x74, 0x09, 0x3b, 0xc9, 0xc5, 0x3f, 0xc3, 0x2e, 0xbc, 0x72, 0xb8, + 0x80, 0x7d, 0xbe, 0x62, 0xc2, 0xdb, 0x09, 0x99, 0x6a, 0xe3, 0x29, 0x68, 0x1e, 0x1d, 0xd3, 0x0c, + 0xff, 0xca, 0xdb, 0xf1, 0x57, 0x19, 0x91, 0xca, 0xfd, 0x15, 0x6c, 0x79, 0xf6, 0x25, 0xf1, 0x32, + 0xe4, 0xab, 0x6f, 0x47, 0xae, 0x71, 0xa6, 0xb9, 0x91, 0xcf, 0x3d, 0xd0, 0x46, 0xb5, 0xb5, 0xb7, + 0x1c, 0x39, 0x23, 0x52, 0xb9, 0x2d, 0xd8, 0x19, 0x4d, 0x3d, 0xcf, 0x9a, 0x33, 0xc0, 0x9f, 0x16, + 0x16, 0xc7, 0x75, 0x90, 0x61, 0xc3, 0x88, 0x51, 0x65, 0x65, 0xc8, 0x85, 0xdd, 0xc8, 0x1e, 0x11, + 0x2b, 0xe2, 0x55, 0x93, 0x6a, 0x42, 0x24, 0xe8, 0xc3, 0x05, 0x26, 0x5e, 0x55, 0x71, 0xe1, 0x9d, + 0xe8, 0x55, 0x75, 0x98, 0x0f, 0x77, 0x44, 0x2e, 0xcc, 0x8a, 0x36, 0xd5, 0x5e, 0xe1, 0x46, 0xfb, + 0xcd, 0xdc, 0x89, 0x89, 0x6f, 0xbb, 0x59, 0x81, 0x62, 0x6f, 0x04, 0xb7, 0x94, 0x5d, 0x4d, 0xb1, + 0x54, 0xe2, 0x96, 0x8e, 0x6e, 0xba, 0xb3, 0xa9, 0x2b, 0xd7, 0x79, 0xc5, 0x59, 0x64, 0xc2, 0x66, + 0x66, 0x87, 0xe3, 0xcf, 0x32, 0x8b, 0x73, 0x5c, 0xdd, 0xda, 0x70, 0x59, 0xdd, 0xd4, 0x58, 0x79, + 0x43, 0xc2, 0x90, 0x86, 0xbc, 0x48, 0x53, 0xca, 0x9b, 0x30, 0x70, 0xea, 0x7d, 0xfe, 0x6c, 0x8f, + 0x45, 0x07, 0x7d, 0x02, 0x7b, 0x4d, 0x3b, 0x4e, 0xdd, 0x2c, 0x76, 0x84, 0x28, 0xd9, 0xfd, 0x7a, + 0x50, 0x08, 0xc5, 0x67, 0xb2, 0x13, 0x2c, 0x0a, 0xe7, 0xab, 0x36, 0x51, 0x9c, 0x92, 0xe8, 0xdf, + 0xc2, 0x9d, 0x57, 0x9a, 0x93, 0x3b, 0x10, 0x86, 0x62, 0x28, 0xbf, 0x13, 0x83, 0x1f, 0x2f, 0x67, + 0x50, 0x80, 0xf1, 0x8c, 0xe6, 0x43, 0x02, 0xa0, 0x3c, 0x27, 0x95, 0x60, 0x43, 0x3e, 0xa3, 0x68, + 0xef, 0xb0, 0x5b, 0xe6, 0x17, 0x06, 0x7e, 0x62, 0x9d, 0x77, 0x3b, 0xed, 0xcf, 0x8d, 0xce, 0x13, + 0x2d, 0x87, 0xca, 0x50, 0x48, 0x5b, 0x79, 0xd6, 0x32, 0x7b, 0xfd, 0x7e, 0xbb, 0xd9, 0x31, 0xb4, + 0x15, 0x04, 0xb0, 0x2e, 0x35, 0xab, 0xa8, 0x0a, 0x25, 0x0e, 0x95, 0x82, 0xb5, 0xa3, 0xef, 0x73, + 0x50, 0xe1, 0x63, 0x68, 0x24, 0xff, 0x02, 0xa1, 0x3f, 0xe5, 0x60, 0xfb, 0x15, 0xb3, 0x45, 0x3f, + 0x5f, 0x54, 0x1e, 0xbd, 0x36, 0x20, 0x7b, 0x8f, 0xde, 0x06, 0x2a, 0x3c, 0xa1, 0x7f, 0xf0, 0xdd, + 0x5f, 0xfe, 0xfe, 0xbb, 0xfc, 0x7d, 0x7d, 0x6f, 0xfe, 0x8f, 0xab, 0xe8, 0x91, 0x5c, 0xdb, 0xe4, + 0x51, 0xee, 0xc3, 0xe6, 0x77, 0x39, 0x78, 0xdf, 0xa1, 0x93, 0x37, 0x1b, 0x6a, 0x6e, 0x67, 0xe7, + 0x6a, 0x86, 0x34, 0xa6, 0x66, 0xee, 0x69, 0x4b, 0xa2, 0xc6, 0x94, 0x15, 0x08, 0x75, 0x1a, 0x8e, + 0x0f, 0xc7, 0xc4, 0xe7, 0xff, 0xf7, 0x1c, 0x0a, 0x95, 0x1d, 0xb8, 0xd1, 0x6b, 0xfe, 0x71, 0xfa, + 0x54, 0x08, 0xfe, 0x95, 0xcb, 0x5d, 0xae, 0x73, 0xc8, 0xc3, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, + 0xb8, 0x10, 0xf5, 0x85, 0x78, 0x1b, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1p1beta1/text_annotation.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1p1beta1/text_annotation.pb.go new file mode 100644 index 0000000..6143b45 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1p1beta1/text_annotation.pb.go @@ -0,0 +1,587 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/vision/v1p1beta1/text_annotation.proto + +package vision + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Enum to denote the type of break found. New line, space etc. +type TextAnnotation_DetectedBreak_BreakType int32 + +const ( + // Unknown break label type. + TextAnnotation_DetectedBreak_UNKNOWN TextAnnotation_DetectedBreak_BreakType = 0 + // Regular space. + TextAnnotation_DetectedBreak_SPACE TextAnnotation_DetectedBreak_BreakType = 1 + // Sure space (very wide). + TextAnnotation_DetectedBreak_SURE_SPACE TextAnnotation_DetectedBreak_BreakType = 2 + // Line-wrapping break. + TextAnnotation_DetectedBreak_EOL_SURE_SPACE TextAnnotation_DetectedBreak_BreakType = 3 + // End-line hyphen that is not present in text; does not co-occur with + // `SPACE`, `LEADER_SPACE`, or `LINE_BREAK`. + TextAnnotation_DetectedBreak_HYPHEN TextAnnotation_DetectedBreak_BreakType = 4 + // Line break that ends a paragraph. + TextAnnotation_DetectedBreak_LINE_BREAK TextAnnotation_DetectedBreak_BreakType = 5 +) + +var TextAnnotation_DetectedBreak_BreakType_name = map[int32]string{ + 0: "UNKNOWN", + 1: "SPACE", + 2: "SURE_SPACE", + 3: "EOL_SURE_SPACE", + 4: "HYPHEN", + 5: "LINE_BREAK", +} +var TextAnnotation_DetectedBreak_BreakType_value = map[string]int32{ + "UNKNOWN": 0, + "SPACE": 1, + "SURE_SPACE": 2, + "EOL_SURE_SPACE": 3, + "HYPHEN": 4, + "LINE_BREAK": 5, +} + +func (x TextAnnotation_DetectedBreak_BreakType) String() string { + return proto.EnumName(TextAnnotation_DetectedBreak_BreakType_name, int32(x)) +} +func (TextAnnotation_DetectedBreak_BreakType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor2, []int{0, 1, 0} +} + +// Type of a block (text, image etc) as identified by OCR. +type Block_BlockType int32 + +const ( + // Unknown block type. + Block_UNKNOWN Block_BlockType = 0 + // Regular text block. + Block_TEXT Block_BlockType = 1 + // Table block. + Block_TABLE Block_BlockType = 2 + // Image block. + Block_PICTURE Block_BlockType = 3 + // Horizontal/vertical line box. + Block_RULER Block_BlockType = 4 + // Barcode block. + Block_BARCODE Block_BlockType = 5 +) + +var Block_BlockType_name = map[int32]string{ + 0: "UNKNOWN", + 1: "TEXT", + 2: "TABLE", + 3: "PICTURE", + 4: "RULER", + 5: "BARCODE", +} +var Block_BlockType_value = map[string]int32{ + "UNKNOWN": 0, + "TEXT": 1, + "TABLE": 2, + "PICTURE": 3, + "RULER": 4, + "BARCODE": 5, +} + +func (x Block_BlockType) String() string { + return proto.EnumName(Block_BlockType_name, int32(x)) +} +func (Block_BlockType) EnumDescriptor() ([]byte, []int) { return fileDescriptor2, []int{2, 0} } + +// TextAnnotation contains a structured representation of OCR extracted text. +// The hierarchy of an OCR extracted text structure is like this: +// TextAnnotation -> Page -> Block -> Paragraph -> Word -> Symbol +// Each structural component, starting from Page, may further have their own +// properties. Properties describe detected languages, breaks etc.. Please refer +// to the +// [TextAnnotation.TextProperty][google.cloud.vision.v1p1beta1.TextAnnotation.TextProperty] +// message definition below for more detail. +type TextAnnotation struct { + // List of pages detected by OCR. + Pages []*Page `protobuf:"bytes,1,rep,name=pages" json:"pages,omitempty"` + // UTF-8 text detected on the pages. + Text string `protobuf:"bytes,2,opt,name=text" json:"text,omitempty"` +} + +func (m *TextAnnotation) Reset() { *m = TextAnnotation{} } +func (m *TextAnnotation) String() string { return proto.CompactTextString(m) } +func (*TextAnnotation) ProtoMessage() {} +func (*TextAnnotation) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } + +func (m *TextAnnotation) GetPages() []*Page { + if m != nil { + return m.Pages + } + return nil +} + +func (m *TextAnnotation) GetText() string { + if m != nil { + return m.Text + } + return "" +} + +// Detected language for a structural component. +type TextAnnotation_DetectedLanguage struct { + // The BCP-47 language code, such as "en-US" or "sr-Latn". For more + // information, see + // http://www.unicode.org/reports/tr35/#Unicode_locale_identifier. + LanguageCode string `protobuf:"bytes,1,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` + // Confidence of detected language. Range [0, 1]. + Confidence float32 `protobuf:"fixed32,2,opt,name=confidence" json:"confidence,omitempty"` +} + +func (m *TextAnnotation_DetectedLanguage) Reset() { *m = TextAnnotation_DetectedLanguage{} } +func (m *TextAnnotation_DetectedLanguage) String() string { return proto.CompactTextString(m) } +func (*TextAnnotation_DetectedLanguage) ProtoMessage() {} +func (*TextAnnotation_DetectedLanguage) Descriptor() ([]byte, []int) { + return fileDescriptor2, []int{0, 0} +} + +func (m *TextAnnotation_DetectedLanguage) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +func (m *TextAnnotation_DetectedLanguage) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + +// Detected start or end of a structural component. +type TextAnnotation_DetectedBreak struct { + // Detected break type. + Type TextAnnotation_DetectedBreak_BreakType `protobuf:"varint,1,opt,name=type,enum=google.cloud.vision.v1p1beta1.TextAnnotation_DetectedBreak_BreakType" json:"type,omitempty"` + // True if break prepends the element. + IsPrefix bool `protobuf:"varint,2,opt,name=is_prefix,json=isPrefix" json:"is_prefix,omitempty"` +} + +func (m *TextAnnotation_DetectedBreak) Reset() { *m = TextAnnotation_DetectedBreak{} } +func (m *TextAnnotation_DetectedBreak) String() string { return proto.CompactTextString(m) } +func (*TextAnnotation_DetectedBreak) ProtoMessage() {} +func (*TextAnnotation_DetectedBreak) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0, 1} } + +func (m *TextAnnotation_DetectedBreak) GetType() TextAnnotation_DetectedBreak_BreakType { + if m != nil { + return m.Type + } + return TextAnnotation_DetectedBreak_UNKNOWN +} + +func (m *TextAnnotation_DetectedBreak) GetIsPrefix() bool { + if m != nil { + return m.IsPrefix + } + return false +} + +// Additional information detected on the structural component. +type TextAnnotation_TextProperty struct { + // A list of detected languages together with confidence. + DetectedLanguages []*TextAnnotation_DetectedLanguage `protobuf:"bytes,1,rep,name=detected_languages,json=detectedLanguages" json:"detected_languages,omitempty"` + // Detected start or end of a text segment. + DetectedBreak *TextAnnotation_DetectedBreak `protobuf:"bytes,2,opt,name=detected_break,json=detectedBreak" json:"detected_break,omitempty"` +} + +func (m *TextAnnotation_TextProperty) Reset() { *m = TextAnnotation_TextProperty{} } +func (m *TextAnnotation_TextProperty) String() string { return proto.CompactTextString(m) } +func (*TextAnnotation_TextProperty) ProtoMessage() {} +func (*TextAnnotation_TextProperty) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0, 2} } + +func (m *TextAnnotation_TextProperty) GetDetectedLanguages() []*TextAnnotation_DetectedLanguage { + if m != nil { + return m.DetectedLanguages + } + return nil +} + +func (m *TextAnnotation_TextProperty) GetDetectedBreak() *TextAnnotation_DetectedBreak { + if m != nil { + return m.DetectedBreak + } + return nil +} + +// Detected page from OCR. +type Page struct { + // Additional information detected on the page. + Property *TextAnnotation_TextProperty `protobuf:"bytes,1,opt,name=property" json:"property,omitempty"` + // Page width in pixels. + Width int32 `protobuf:"varint,2,opt,name=width" json:"width,omitempty"` + // Page height in pixels. + Height int32 `protobuf:"varint,3,opt,name=height" json:"height,omitempty"` + // List of blocks of text, images etc on this page. + Blocks []*Block `protobuf:"bytes,4,rep,name=blocks" json:"blocks,omitempty"` + // Confidence of the OCR results on the page. Range [0, 1]. + Confidence float32 `protobuf:"fixed32,5,opt,name=confidence" json:"confidence,omitempty"` +} + +func (m *Page) Reset() { *m = Page{} } +func (m *Page) String() string { return proto.CompactTextString(m) } +func (*Page) ProtoMessage() {} +func (*Page) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{1} } + +func (m *Page) GetProperty() *TextAnnotation_TextProperty { + if m != nil { + return m.Property + } + return nil +} + +func (m *Page) GetWidth() int32 { + if m != nil { + return m.Width + } + return 0 +} + +func (m *Page) GetHeight() int32 { + if m != nil { + return m.Height + } + return 0 +} + +func (m *Page) GetBlocks() []*Block { + if m != nil { + return m.Blocks + } + return nil +} + +func (m *Page) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + +// Logical element on the page. +type Block struct { + // Additional information detected for the block. + Property *TextAnnotation_TextProperty `protobuf:"bytes,1,opt,name=property" json:"property,omitempty"` + // The bounding box for the block. + // The vertices are in the order of top-left, top-right, bottom-right, + // bottom-left. When a rotation of the bounding box is detected the rotation + // is represented as around the top-left corner as defined when the text is + // read in the 'natural' orientation. + // For example: + // * when the text is horizontal it might look like: + // 0----1 + // | | + // 3----2 + // * when it's rotated 180 degrees around the top-left corner it becomes: + // 2----3 + // | | + // 1----0 + // and the vertice order will still be (0, 1, 2, 3). + BoundingBox *BoundingPoly `protobuf:"bytes,2,opt,name=bounding_box,json=boundingBox" json:"bounding_box,omitempty"` + // List of paragraphs in this block (if this blocks is of type text). + Paragraphs []*Paragraph `protobuf:"bytes,3,rep,name=paragraphs" json:"paragraphs,omitempty"` + // Detected block type (text, image etc) for this block. + BlockType Block_BlockType `protobuf:"varint,4,opt,name=block_type,json=blockType,enum=google.cloud.vision.v1p1beta1.Block_BlockType" json:"block_type,omitempty"` + // Confidence of the OCR results on the block. Range [0, 1]. + Confidence float32 `protobuf:"fixed32,5,opt,name=confidence" json:"confidence,omitempty"` +} + +func (m *Block) Reset() { *m = Block{} } +func (m *Block) String() string { return proto.CompactTextString(m) } +func (*Block) ProtoMessage() {} +func (*Block) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{2} } + +func (m *Block) GetProperty() *TextAnnotation_TextProperty { + if m != nil { + return m.Property + } + return nil +} + +func (m *Block) GetBoundingBox() *BoundingPoly { + if m != nil { + return m.BoundingBox + } + return nil +} + +func (m *Block) GetParagraphs() []*Paragraph { + if m != nil { + return m.Paragraphs + } + return nil +} + +func (m *Block) GetBlockType() Block_BlockType { + if m != nil { + return m.BlockType + } + return Block_UNKNOWN +} + +func (m *Block) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + +// Structural unit of text representing a number of words in certain order. +type Paragraph struct { + // Additional information detected for the paragraph. + Property *TextAnnotation_TextProperty `protobuf:"bytes,1,opt,name=property" json:"property,omitempty"` + // The bounding box for the paragraph. + // The vertices are in the order of top-left, top-right, bottom-right, + // bottom-left. When a rotation of the bounding box is detected the rotation + // is represented as around the top-left corner as defined when the text is + // read in the 'natural' orientation. + // For example: + // * when the text is horizontal it might look like: + // 0----1 + // | | + // 3----2 + // * when it's rotated 180 degrees around the top-left corner it becomes: + // 2----3 + // | | + // 1----0 + // and the vertice order will still be (0, 1, 2, 3). + BoundingBox *BoundingPoly `protobuf:"bytes,2,opt,name=bounding_box,json=boundingBox" json:"bounding_box,omitempty"` + // List of words in this paragraph. + Words []*Word `protobuf:"bytes,3,rep,name=words" json:"words,omitempty"` + // Confidence of the OCR results for the paragraph. Range [0, 1]. + Confidence float32 `protobuf:"fixed32,4,opt,name=confidence" json:"confidence,omitempty"` +} + +func (m *Paragraph) Reset() { *m = Paragraph{} } +func (m *Paragraph) String() string { return proto.CompactTextString(m) } +func (*Paragraph) ProtoMessage() {} +func (*Paragraph) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{3} } + +func (m *Paragraph) GetProperty() *TextAnnotation_TextProperty { + if m != nil { + return m.Property + } + return nil +} + +func (m *Paragraph) GetBoundingBox() *BoundingPoly { + if m != nil { + return m.BoundingBox + } + return nil +} + +func (m *Paragraph) GetWords() []*Word { + if m != nil { + return m.Words + } + return nil +} + +func (m *Paragraph) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + +// A word representation. +type Word struct { + // Additional information detected for the word. + Property *TextAnnotation_TextProperty `protobuf:"bytes,1,opt,name=property" json:"property,omitempty"` + // The bounding box for the word. + // The vertices are in the order of top-left, top-right, bottom-right, + // bottom-left. When a rotation of the bounding box is detected the rotation + // is represented as around the top-left corner as defined when the text is + // read in the 'natural' orientation. + // For example: + // * when the text is horizontal it might look like: + // 0----1 + // | | + // 3----2 + // * when it's rotated 180 degrees around the top-left corner it becomes: + // 2----3 + // | | + // 1----0 + // and the vertice order will still be (0, 1, 2, 3). + BoundingBox *BoundingPoly `protobuf:"bytes,2,opt,name=bounding_box,json=boundingBox" json:"bounding_box,omitempty"` + // List of symbols in the word. + // The order of the symbols follows the natural reading order. + Symbols []*Symbol `protobuf:"bytes,3,rep,name=symbols" json:"symbols,omitempty"` + // Confidence of the OCR results for the word. Range [0, 1]. + Confidence float32 `protobuf:"fixed32,4,opt,name=confidence" json:"confidence,omitempty"` +} + +func (m *Word) Reset() { *m = Word{} } +func (m *Word) String() string { return proto.CompactTextString(m) } +func (*Word) ProtoMessage() {} +func (*Word) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{4} } + +func (m *Word) GetProperty() *TextAnnotation_TextProperty { + if m != nil { + return m.Property + } + return nil +} + +func (m *Word) GetBoundingBox() *BoundingPoly { + if m != nil { + return m.BoundingBox + } + return nil +} + +func (m *Word) GetSymbols() []*Symbol { + if m != nil { + return m.Symbols + } + return nil +} + +func (m *Word) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + +// A single symbol representation. +type Symbol struct { + // Additional information detected for the symbol. + Property *TextAnnotation_TextProperty `protobuf:"bytes,1,opt,name=property" json:"property,omitempty"` + // The bounding box for the symbol. + // The vertices are in the order of top-left, top-right, bottom-right, + // bottom-left. When a rotation of the bounding box is detected the rotation + // is represented as around the top-left corner as defined when the text is + // read in the 'natural' orientation. + // For example: + // * when the text is horizontal it might look like: + // 0----1 + // | | + // 3----2 + // * when it's rotated 180 degrees around the top-left corner it becomes: + // 2----3 + // | | + // 1----0 + // and the vertice order will still be (0, 1, 2, 3). + BoundingBox *BoundingPoly `protobuf:"bytes,2,opt,name=bounding_box,json=boundingBox" json:"bounding_box,omitempty"` + // The actual UTF-8 representation of the symbol. + Text string `protobuf:"bytes,3,opt,name=text" json:"text,omitempty"` + // Confidence of the OCR results for the symbol. Range [0, 1]. + Confidence float32 `protobuf:"fixed32,4,opt,name=confidence" json:"confidence,omitempty"` +} + +func (m *Symbol) Reset() { *m = Symbol{} } +func (m *Symbol) String() string { return proto.CompactTextString(m) } +func (*Symbol) ProtoMessage() {} +func (*Symbol) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{5} } + +func (m *Symbol) GetProperty() *TextAnnotation_TextProperty { + if m != nil { + return m.Property + } + return nil +} + +func (m *Symbol) GetBoundingBox() *BoundingPoly { + if m != nil { + return m.BoundingBox + } + return nil +} + +func (m *Symbol) GetText() string { + if m != nil { + return m.Text + } + return "" +} + +func (m *Symbol) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + +func init() { + proto.RegisterType((*TextAnnotation)(nil), "google.cloud.vision.v1p1beta1.TextAnnotation") + proto.RegisterType((*TextAnnotation_DetectedLanguage)(nil), "google.cloud.vision.v1p1beta1.TextAnnotation.DetectedLanguage") + proto.RegisterType((*TextAnnotation_DetectedBreak)(nil), "google.cloud.vision.v1p1beta1.TextAnnotation.DetectedBreak") + proto.RegisterType((*TextAnnotation_TextProperty)(nil), "google.cloud.vision.v1p1beta1.TextAnnotation.TextProperty") + proto.RegisterType((*Page)(nil), "google.cloud.vision.v1p1beta1.Page") + proto.RegisterType((*Block)(nil), "google.cloud.vision.v1p1beta1.Block") + proto.RegisterType((*Paragraph)(nil), "google.cloud.vision.v1p1beta1.Paragraph") + proto.RegisterType((*Word)(nil), "google.cloud.vision.v1p1beta1.Word") + proto.RegisterType((*Symbol)(nil), "google.cloud.vision.v1p1beta1.Symbol") + proto.RegisterEnum("google.cloud.vision.v1p1beta1.TextAnnotation_DetectedBreak_BreakType", TextAnnotation_DetectedBreak_BreakType_name, TextAnnotation_DetectedBreak_BreakType_value) + proto.RegisterEnum("google.cloud.vision.v1p1beta1.Block_BlockType", Block_BlockType_name, Block_BlockType_value) +} + +func init() { + proto.RegisterFile("google/cloud/vision/v1p1beta1/text_annotation.proto", fileDescriptor2) +} + +var fileDescriptor2 = []byte{ + // 775 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x56, 0x4f, 0x6f, 0xd3, 0x48, + 0x14, 0x5f, 0x27, 0x76, 0x1a, 0xbf, 0xb4, 0x91, 0x77, 0x76, 0xb5, 0x8a, 0xb2, 0xbb, 0xa8, 0xa4, + 0x20, 0x55, 0x02, 0x39, 0x6a, 0x7a, 0x2a, 0x45, 0xa0, 0x38, 0xb5, 0xd4, 0xaa, 0x21, 0xb5, 0xa6, + 0x09, 0xa5, 0x5c, 0x2c, 0xff, 0x99, 0x3a, 0x56, 0x13, 0x8f, 0x65, 0xbb, 0x6d, 0x72, 0xe5, 0x8a, + 0x04, 0x5f, 0x88, 0x2f, 0x83, 0xc4, 0x09, 0xf1, 0x01, 0x38, 0x22, 0x8f, 0xed, 0x34, 0x09, 0xa2, + 0xe6, 0x8f, 0x38, 0xf4, 0x12, 0xcd, 0x7b, 0x79, 0xbf, 0x37, 0xef, 0xf7, 0x7b, 0xf3, 0x3c, 0x03, + 0xdb, 0x0e, 0xa5, 0xce, 0x88, 0x34, 0xad, 0x11, 0xbd, 0xb0, 0x9b, 0x97, 0x6e, 0xe8, 0x52, 0xaf, + 0x79, 0xb9, 0xe5, 0x6f, 0x99, 0x24, 0x32, 0xb6, 0x9a, 0x11, 0x99, 0x44, 0xba, 0xe1, 0x79, 0x34, + 0x32, 0x22, 0x97, 0x7a, 0xb2, 0x1f, 0xd0, 0x88, 0xa2, 0xff, 0x13, 0x90, 0xcc, 0x40, 0x72, 0x02, + 0x92, 0x67, 0xa0, 0xfa, 0x7f, 0x69, 0x4e, 0xc3, 0x77, 0x9b, 0xd7, 0xd8, 0x30, 0x01, 0xd7, 0x1f, + 0xde, 0xbc, 0xa3, 0x43, 0xe8, 0x98, 0x44, 0xc1, 0x34, 0x89, 0x6e, 0xbc, 0x16, 0xa0, 0xda, 0x27, + 0x93, 0xa8, 0x3d, 0xcb, 0x83, 0x76, 0x40, 0xf0, 0x0d, 0x87, 0x84, 0x35, 0x6e, 0xbd, 0xb8, 0x59, + 0x69, 0x6d, 0xc8, 0x37, 0x56, 0x23, 0x6b, 0x86, 0x43, 0x70, 0x82, 0x40, 0x08, 0xf8, 0x98, 0x51, + 0xad, 0xb0, 0xce, 0x6d, 0x8a, 0x98, 0xad, 0xeb, 0x27, 0x20, 0xed, 0x91, 0x88, 0x58, 0x11, 0xb1, + 0xbb, 0x86, 0xe7, 0x5c, 0x18, 0x0e, 0x41, 0x1b, 0xb0, 0x36, 0x4a, 0xd7, 0xba, 0x45, 0x6d, 0x52, + 0xe3, 0x18, 0x60, 0x35, 0x73, 0x76, 0xa8, 0x4d, 0xd0, 0x1d, 0x00, 0x8b, 0x7a, 0x67, 0xae, 0x4d, + 0x3c, 0x8b, 0xb0, 0x94, 0x05, 0x3c, 0xe7, 0xa9, 0x7f, 0xe2, 0x60, 0x2d, 0xcb, 0xac, 0x04, 0xc4, + 0x38, 0x47, 0xa7, 0xc0, 0x47, 0x53, 0x3f, 0xc9, 0x56, 0x6d, 0xa9, 0x39, 0x85, 0x2f, 0xd2, 0x96, + 0x17, 0x52, 0xc9, 0xec, 0xb7, 0x3f, 0xf5, 0x09, 0x66, 0x29, 0xd1, 0xbf, 0x20, 0xba, 0xa1, 0xee, + 0x07, 0xe4, 0xcc, 0x9d, 0xb0, 0x5a, 0xca, 0xb8, 0xec, 0x86, 0x1a, 0xb3, 0x1b, 0x16, 0x88, 0xb3, + 0x78, 0x54, 0x81, 0x95, 0x41, 0xef, 0xb0, 0x77, 0x74, 0xd2, 0x93, 0xfe, 0x40, 0x22, 0x08, 0xc7, + 0x5a, 0xbb, 0xa3, 0x4a, 0x1c, 0xaa, 0x02, 0x1c, 0x0f, 0xb0, 0xaa, 0x27, 0x76, 0x01, 0x21, 0xa8, + 0xaa, 0x47, 0x5d, 0x7d, 0xce, 0x57, 0x44, 0x00, 0xa5, 0xfd, 0x53, 0x6d, 0x5f, 0xed, 0x49, 0x7c, + 0x1c, 0xdf, 0x3d, 0xe8, 0xa9, 0xba, 0x82, 0xd5, 0xf6, 0xa1, 0x24, 0xd4, 0xdf, 0x73, 0xb0, 0x1a, + 0x97, 0xac, 0x05, 0xd4, 0x27, 0x41, 0x34, 0x45, 0x63, 0x40, 0x76, 0x5a, 0xb3, 0x9e, 0x09, 0x97, + 0x35, 0xed, 0xc9, 0xcf, 0x71, 0xcf, 0x1a, 0x84, 0xff, 0xb4, 0x97, 0x3c, 0x21, 0x32, 0xa1, 0x3a, + 0xdb, 0xce, 0x8c, 0xd9, 0x32, 0x19, 0x2a, 0xad, 0xdd, 0x5f, 0x90, 0x19, 0xaf, 0xd9, 0xf3, 0x66, + 0xe3, 0x23, 0x07, 0x7c, 0x7c, 0x9e, 0xd0, 0x73, 0x28, 0xfb, 0x29, 0x4f, 0xd6, 0xcd, 0x4a, 0xeb, + 0xd1, 0x8f, 0x6d, 0x33, 0xaf, 0x14, 0x9e, 0xe5, 0x42, 0x7f, 0x83, 0x70, 0xe5, 0xda, 0xd1, 0x90, + 0xd5, 0x2e, 0xe0, 0xc4, 0x40, 0xff, 0x40, 0x69, 0x48, 0x5c, 0x67, 0x18, 0xd5, 0x8a, 0xcc, 0x9d, + 0x5a, 0xe8, 0x31, 0x94, 0xcc, 0x11, 0xb5, 0xce, 0xc3, 0x1a, 0xcf, 0x54, 0xbd, 0x97, 0x53, 0x83, + 0x12, 0x07, 0xe3, 0x14, 0xb3, 0x74, 0x7e, 0x85, 0xe5, 0xf3, 0xdb, 0x78, 0x57, 0x04, 0x81, 0x21, + 0x7e, 0x1b, 0xdb, 0x1e, 0xac, 0x9a, 0xf4, 0xc2, 0xb3, 0x5d, 0xcf, 0xd1, 0x4d, 0x3a, 0x49, 0x1b, + 0xf6, 0x20, 0x8f, 0x45, 0x0a, 0xd1, 0xe8, 0x68, 0x8a, 0x2b, 0x59, 0x02, 0x85, 0x4e, 0xd0, 0x3e, + 0x80, 0x6f, 0x04, 0x86, 0x13, 0x18, 0xfe, 0x30, 0xac, 0x15, 0x99, 0x26, 0x9b, 0xb9, 0x9f, 0x87, + 0x14, 0x80, 0xe7, 0xb0, 0xe8, 0x19, 0x00, 0x53, 0x49, 0x67, 0xf3, 0xca, 0xb3, 0x79, 0x95, 0xbf, + 0x47, 0xdd, 0xe4, 0x97, 0x0d, 0xa6, 0x68, 0x66, 0xcb, 0x5c, 0xa9, 0x31, 0x88, 0x33, 0xdc, 0xe2, + 0x80, 0x96, 0x81, 0xef, 0xab, 0x2f, 0xfa, 0x12, 0x17, 0x8f, 0x6a, 0xbf, 0xad, 0x74, 0xe3, 0xd1, + 0xac, 0xc0, 0x8a, 0x76, 0xd0, 0xe9, 0x0f, 0x70, 0x3c, 0x93, 0x22, 0x08, 0x78, 0xd0, 0x55, 0xb1, + 0xc4, 0xc7, 0x7e, 0xa5, 0x8d, 0x3b, 0x47, 0x7b, 0xaa, 0x24, 0x34, 0xde, 0x14, 0x40, 0x9c, 0x91, + 0xbb, 0x35, 0x2d, 0xdc, 0x01, 0xe1, 0x8a, 0x06, 0x76, 0xd6, 0xbd, 0xbc, 0x8f, 0xfb, 0x09, 0x0d, + 0x6c, 0x9c, 0x20, 0x96, 0x44, 0xe6, 0xbf, 0x12, 0xf9, 0x6d, 0x01, 0xf8, 0x38, 0xfe, 0xd6, 0x68, + 0xf1, 0x14, 0x56, 0xc2, 0xe9, 0xd8, 0xa4, 0xa3, 0x4c, 0x8d, 0xfb, 0x39, 0xa9, 0x8e, 0x59, 0x34, + 0xce, 0x50, 0xb9, 0x8a, 0x7c, 0xe0, 0xa0, 0x94, 0x60, 0x6e, 0x8d, 0x26, 0xd9, 0x0d, 0x5e, 0xbc, + 0xbe, 0xc1, 0xf3, 0x68, 0x2a, 0xaf, 0x38, 0xb8, 0x6b, 0xd1, 0xf1, 0xcd, 0x7b, 0x2a, 0x7f, 0x2d, + 0x12, 0xd2, 0xe2, 0xe7, 0x87, 0xc6, 0xbd, 0xec, 0xa4, 0x28, 0x87, 0xc6, 0x77, 0x98, 0x4c, 0x03, + 0xa7, 0xe9, 0x10, 0x8f, 0x3d, 0x4e, 0x9a, 0xc9, 0x5f, 0x86, 0xef, 0x86, 0xdf, 0x78, 0xcd, 0xec, + 0x26, 0x8e, 0xcf, 0x1c, 0x67, 0x96, 0x18, 0x64, 0xfb, 0x4b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb1, + 0xa1, 0x02, 0xbb, 0x71, 0x09, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1p1beta1/web_detection.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1p1beta1/web_detection.pb.go new file mode 100644 index 0000000..a66a485 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1p1beta1/web_detection.pb.go @@ -0,0 +1,277 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/vision/v1p1beta1/web_detection.proto + +package vision + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Relevant information for the image from the Internet. +type WebDetection struct { + // Deduced entities from similar images on the Internet. + WebEntities []*WebDetection_WebEntity `protobuf:"bytes,1,rep,name=web_entities,json=webEntities" json:"web_entities,omitempty"` + // Fully matching images from the Internet. + // Can include resized copies of the query image. + FullMatchingImages []*WebDetection_WebImage `protobuf:"bytes,2,rep,name=full_matching_images,json=fullMatchingImages" json:"full_matching_images,omitempty"` + // Partial matching images from the Internet. + // Those images are similar enough to share some key-point features. For + // example an original image will likely have partial matching for its crops. + PartialMatchingImages []*WebDetection_WebImage `protobuf:"bytes,3,rep,name=partial_matching_images,json=partialMatchingImages" json:"partial_matching_images,omitempty"` + // Web pages containing the matching images from the Internet. + PagesWithMatchingImages []*WebDetection_WebPage `protobuf:"bytes,4,rep,name=pages_with_matching_images,json=pagesWithMatchingImages" json:"pages_with_matching_images,omitempty"` + // The visually similar image results. + VisuallySimilarImages []*WebDetection_WebImage `protobuf:"bytes,6,rep,name=visually_similar_images,json=visuallySimilarImages" json:"visually_similar_images,omitempty"` + // Best guess text labels for the request image. + BestGuessLabels []*WebDetection_WebLabel `protobuf:"bytes,8,rep,name=best_guess_labels,json=bestGuessLabels" json:"best_guess_labels,omitempty"` +} + +func (m *WebDetection) Reset() { *m = WebDetection{} } +func (m *WebDetection) String() string { return proto.CompactTextString(m) } +func (*WebDetection) ProtoMessage() {} +func (*WebDetection) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0} } + +func (m *WebDetection) GetWebEntities() []*WebDetection_WebEntity { + if m != nil { + return m.WebEntities + } + return nil +} + +func (m *WebDetection) GetFullMatchingImages() []*WebDetection_WebImage { + if m != nil { + return m.FullMatchingImages + } + return nil +} + +func (m *WebDetection) GetPartialMatchingImages() []*WebDetection_WebImage { + if m != nil { + return m.PartialMatchingImages + } + return nil +} + +func (m *WebDetection) GetPagesWithMatchingImages() []*WebDetection_WebPage { + if m != nil { + return m.PagesWithMatchingImages + } + return nil +} + +func (m *WebDetection) GetVisuallySimilarImages() []*WebDetection_WebImage { + if m != nil { + return m.VisuallySimilarImages + } + return nil +} + +func (m *WebDetection) GetBestGuessLabels() []*WebDetection_WebLabel { + if m != nil { + return m.BestGuessLabels + } + return nil +} + +// Entity deduced from similar images on the Internet. +type WebDetection_WebEntity struct { + // Opaque entity ID. + EntityId string `protobuf:"bytes,1,opt,name=entity_id,json=entityId" json:"entity_id,omitempty"` + // Overall relevancy score for the entity. + // Not normalized and not comparable across different image queries. + Score float32 `protobuf:"fixed32,2,opt,name=score" json:"score,omitempty"` + // Canonical description of the entity, in English. + Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` +} + +func (m *WebDetection_WebEntity) Reset() { *m = WebDetection_WebEntity{} } +func (m *WebDetection_WebEntity) String() string { return proto.CompactTextString(m) } +func (*WebDetection_WebEntity) ProtoMessage() {} +func (*WebDetection_WebEntity) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 0} } + +func (m *WebDetection_WebEntity) GetEntityId() string { + if m != nil { + return m.EntityId + } + return "" +} + +func (m *WebDetection_WebEntity) GetScore() float32 { + if m != nil { + return m.Score + } + return 0 +} + +func (m *WebDetection_WebEntity) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +// Metadata for online images. +type WebDetection_WebImage struct { + // The result image URL. + Url string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"` + // (Deprecated) Overall relevancy score for the image. + Score float32 `protobuf:"fixed32,2,opt,name=score" json:"score,omitempty"` +} + +func (m *WebDetection_WebImage) Reset() { *m = WebDetection_WebImage{} } +func (m *WebDetection_WebImage) String() string { return proto.CompactTextString(m) } +func (*WebDetection_WebImage) ProtoMessage() {} +func (*WebDetection_WebImage) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 1} } + +func (m *WebDetection_WebImage) GetUrl() string { + if m != nil { + return m.Url + } + return "" +} + +func (m *WebDetection_WebImage) GetScore() float32 { + if m != nil { + return m.Score + } + return 0 +} + +// Metadata for web pages. +type WebDetection_WebPage struct { + // The result web page URL. + Url string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"` + // (Deprecated) Overall relevancy score for the web page. + Score float32 `protobuf:"fixed32,2,opt,name=score" json:"score,omitempty"` + // Title for the web page, may contain HTML markups. + PageTitle string `protobuf:"bytes,3,opt,name=page_title,json=pageTitle" json:"page_title,omitempty"` + // Fully matching images on the page. + // Can include resized copies of the query image. + FullMatchingImages []*WebDetection_WebImage `protobuf:"bytes,4,rep,name=full_matching_images,json=fullMatchingImages" json:"full_matching_images,omitempty"` + // Partial matching images on the page. + // Those images are similar enough to share some key-point features. For + // example an original image will likely have partial matching for its + // crops. + PartialMatchingImages []*WebDetection_WebImage `protobuf:"bytes,5,rep,name=partial_matching_images,json=partialMatchingImages" json:"partial_matching_images,omitempty"` +} + +func (m *WebDetection_WebPage) Reset() { *m = WebDetection_WebPage{} } +func (m *WebDetection_WebPage) String() string { return proto.CompactTextString(m) } +func (*WebDetection_WebPage) ProtoMessage() {} +func (*WebDetection_WebPage) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 2} } + +func (m *WebDetection_WebPage) GetUrl() string { + if m != nil { + return m.Url + } + return "" +} + +func (m *WebDetection_WebPage) GetScore() float32 { + if m != nil { + return m.Score + } + return 0 +} + +func (m *WebDetection_WebPage) GetPageTitle() string { + if m != nil { + return m.PageTitle + } + return "" +} + +func (m *WebDetection_WebPage) GetFullMatchingImages() []*WebDetection_WebImage { + if m != nil { + return m.FullMatchingImages + } + return nil +} + +func (m *WebDetection_WebPage) GetPartialMatchingImages() []*WebDetection_WebImage { + if m != nil { + return m.PartialMatchingImages + } + return nil +} + +// Label to provide extra metadata for the web detection. +type WebDetection_WebLabel struct { + // Label for extra metadata. + Label string `protobuf:"bytes,1,opt,name=label" json:"label,omitempty"` + // The BCP-47 language code for `label`, such as "en-US" or "sr-Latn". + // For more information, see + // http://www.unicode.org/reports/tr35/#Unicode_locale_identifier. + LanguageCode string `protobuf:"bytes,2,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` +} + +func (m *WebDetection_WebLabel) Reset() { *m = WebDetection_WebLabel{} } +func (m *WebDetection_WebLabel) String() string { return proto.CompactTextString(m) } +func (*WebDetection_WebLabel) ProtoMessage() {} +func (*WebDetection_WebLabel) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 3} } + +func (m *WebDetection_WebLabel) GetLabel() string { + if m != nil { + return m.Label + } + return "" +} + +func (m *WebDetection_WebLabel) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +func init() { + proto.RegisterType((*WebDetection)(nil), "google.cloud.vision.v1p1beta1.WebDetection") + proto.RegisterType((*WebDetection_WebEntity)(nil), "google.cloud.vision.v1p1beta1.WebDetection.WebEntity") + proto.RegisterType((*WebDetection_WebImage)(nil), "google.cloud.vision.v1p1beta1.WebDetection.WebImage") + proto.RegisterType((*WebDetection_WebPage)(nil), "google.cloud.vision.v1p1beta1.WebDetection.WebPage") + proto.RegisterType((*WebDetection_WebLabel)(nil), "google.cloud.vision.v1p1beta1.WebDetection.WebLabel") +} + +func init() { proto.RegisterFile("google/cloud/vision/v1p1beta1/web_detection.proto", fileDescriptor3) } + +var fileDescriptor3 = []byte{ + // 511 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x94, 0x4f, 0x6f, 0xd3, 0x30, + 0x18, 0xc6, 0x95, 0x76, 0x1b, 0x8b, 0x5b, 0x04, 0xb3, 0x86, 0x16, 0x05, 0x26, 0x15, 0xb8, 0xf4, + 0x94, 0xa8, 0x1b, 0x9c, 0xb8, 0x6d, 0x4c, 0x68, 0x12, 0x48, 0x55, 0x40, 0x1a, 0xe2, 0x92, 0x39, + 0x89, 0x97, 0xbe, 0x92, 0x1b, 0x47, 0xb1, 0xd3, 0xaa, 0x37, 0x4e, 0x7c, 0x14, 0x3e, 0x23, 0x47, + 0xf4, 0xda, 0xce, 0x54, 0x51, 0x36, 0x31, 0x86, 0xb8, 0xf9, 0x7d, 0xac, 0xe7, 0xf9, 0xd9, 0xaf, + 0xff, 0x90, 0x49, 0x29, 0x65, 0x29, 0x78, 0x9c, 0x0b, 0xd9, 0x16, 0xf1, 0x02, 0x14, 0xc8, 0x2a, + 0x5e, 0x4c, 0xea, 0x49, 0xc6, 0x35, 0x9b, 0xc4, 0x4b, 0x9e, 0xa5, 0x05, 0xd7, 0x3c, 0xd7, 0x20, + 0xab, 0xa8, 0x6e, 0xa4, 0x96, 0xf4, 0xd0, 0x5a, 0x22, 0x63, 0x89, 0xac, 0x25, 0xba, 0xb6, 0x84, + 0xcf, 0x5c, 0x22, 0xab, 0x21, 0x66, 0x55, 0x25, 0x35, 0x43, 0xaf, 0xb2, 0xe6, 0x17, 0xdf, 0x7c, + 0x32, 0xbc, 0xe0, 0xd9, 0xdb, 0x2e, 0x93, 0x7e, 0x26, 0x43, 0x84, 0xf0, 0x4a, 0x83, 0x06, 0xae, + 0x02, 0x6f, 0xd4, 0x1f, 0x0f, 0x8e, 0x5e, 0x47, 0xb7, 0x42, 0xa2, 0xf5, 0x08, 0x2c, 0xce, 0xd0, + 0xbe, 0x4a, 0x06, 0x4b, 0x37, 0x04, 0xae, 0xe8, 0x15, 0xd9, 0xbf, 0x6a, 0x85, 0x48, 0xe7, 0x4c, + 0xe7, 0x33, 0xa8, 0xca, 0x14, 0xe6, 0xac, 0xe4, 0x2a, 0xe8, 0x19, 0xc2, 0xab, 0x3b, 0x12, 0xce, + 0xd1, 0x9c, 0x50, 0x4c, 0xfc, 0xe0, 0x02, 0x8d, 0xa4, 0xa8, 0x20, 0x07, 0x35, 0x6b, 0x34, 0xb0, + 0x4d, 0x54, 0xff, 0x1e, 0xa8, 0x27, 0x2e, 0xf4, 0x17, 0x5a, 0x4d, 0xc2, 0x1a, 0x07, 0xe9, 0x12, + 0xf4, 0x6c, 0x03, 0xb8, 0x65, 0x80, 0xc7, 0x77, 0x04, 0x4e, 0x91, 0x77, 0x60, 0x62, 0x2f, 0x40, + 0xcf, 0x36, 0xf7, 0xb7, 0x00, 0xd5, 0x32, 0x21, 0x56, 0xa9, 0x82, 0x39, 0x08, 0xd6, 0x74, 0xb8, + 0x9d, 0xfb, 0xec, 0xaf, 0x0b, 0xfd, 0x68, 0x33, 0x1d, 0xed, 0x92, 0xec, 0x65, 0x5c, 0xe9, 0xb4, + 0x6c, 0xb9, 0x52, 0xa9, 0x60, 0x19, 0x17, 0x2a, 0xd8, 0xfd, 0x2b, 0xce, 0x7b, 0x34, 0x27, 0x8f, + 0x30, 0xee, 0x1d, 0xa6, 0x99, 0x5a, 0x85, 0x97, 0xc4, 0xbf, 0xbe, 0x31, 0xf4, 0x29, 0xf1, 0xcd, + 0xd5, 0x5b, 0xa5, 0x50, 0x04, 0xde, 0xc8, 0x1b, 0xfb, 0xc9, 0xae, 0x15, 0xce, 0x0b, 0xba, 0x4f, + 0xb6, 0x55, 0x2e, 0x1b, 0x1e, 0xf4, 0x46, 0xde, 0xb8, 0x97, 0xd8, 0x82, 0x8e, 0xc8, 0xa0, 0xe0, + 0x2a, 0x6f, 0xa0, 0x46, 0x50, 0xd0, 0x37, 0xa6, 0x75, 0x29, 0x3c, 0x22, 0xbb, 0xdd, 0x36, 0xe9, + 0x63, 0xd2, 0x6f, 0x1b, 0xe1, 0xa2, 0x71, 0xf8, 0xfb, 0xd4, 0xf0, 0x7b, 0x8f, 0x3c, 0x70, 0x47, + 0xf1, 0xa7, 0x1e, 0x7a, 0x48, 0x08, 0x1e, 0x5a, 0xaa, 0x41, 0x0b, 0xee, 0x16, 0xe2, 0xa3, 0xf2, + 0x09, 0x85, 0x1b, 0x1f, 0xc0, 0xd6, 0xff, 0x7b, 0x00, 0xdb, 0xff, 0xfc, 0x01, 0x84, 0x67, 0xa6, + 0xb9, 0xe6, 0x2c, 0xb1, 0x2d, 0xe6, 0x86, 0xb8, 0x56, 0xd9, 0x82, 0xbe, 0x24, 0x0f, 0x05, 0xab, + 0xca, 0x16, 0x5b, 0x93, 0xcb, 0xc2, 0x36, 0xcd, 0x4f, 0x86, 0x9d, 0x78, 0x2a, 0x0b, 0x7e, 0xf2, + 0xd5, 0x23, 0xcf, 0x73, 0x39, 0xbf, 0x7d, 0x65, 0x27, 0x7b, 0xeb, 0x4b, 0x9b, 0xe2, 0x0f, 0x36, + 0xf5, 0xbe, 0x9c, 0x3a, 0x4f, 0x29, 0x31, 0x31, 0x92, 0x4d, 0x19, 0x97, 0xbc, 0x32, 0xff, 0x5b, + 0x6c, 0xa7, 0x58, 0x0d, 0xea, 0x86, 0x2f, 0xf5, 0x8d, 0x15, 0x7e, 0x78, 0x5e, 0xb6, 0x63, 0x2c, + 0xc7, 0x3f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xa2, 0x19, 0xa7, 0x1d, 0x84, 0x05, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1p2beta1/geometry.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1p2beta1/geometry.pb.go new file mode 100644 index 0000000..470f342 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1p2beta1/geometry.pb.go @@ -0,0 +1,183 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/vision/v1p2beta1/geometry.proto + +/* +Package vision is a generated protocol buffer package. + +It is generated from these files: + google/cloud/vision/v1p2beta1/geometry.proto + google/cloud/vision/v1p2beta1/image_annotator.proto + google/cloud/vision/v1p2beta1/text_annotation.proto + google/cloud/vision/v1p2beta1/web_detection.proto + +It has these top-level messages: + Vertex + BoundingPoly + Position + Feature + ImageSource + Image + FaceAnnotation + LocationInfo + Property + EntityAnnotation + SafeSearchAnnotation + LatLongRect + ColorInfo + DominantColorsAnnotation + ImageProperties + CropHint + CropHintsAnnotation + CropHintsParams + WebDetectionParams + ImageContext + AnnotateImageRequest + ImageAnnotationContext + AnnotateImageResponse + BatchAnnotateImagesRequest + BatchAnnotateImagesResponse + AsyncAnnotateFileRequest + AsyncAnnotateFileResponse + AsyncBatchAnnotateFilesRequest + AsyncBatchAnnotateFilesResponse + InputConfig + OutputConfig + GcsSource + GcsDestination + OperationMetadata + TextAnnotation + Page + Block + Paragraph + Word + Symbol + WebDetection +*/ +package vision + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// A vertex represents a 2D point in the image. +// NOTE: the vertex coordinates are in the same scale as the original image. +type Vertex struct { + // X coordinate. + X int32 `protobuf:"varint,1,opt,name=x" json:"x,omitempty"` + // Y coordinate. + Y int32 `protobuf:"varint,2,opt,name=y" json:"y,omitempty"` +} + +func (m *Vertex) Reset() { *m = Vertex{} } +func (m *Vertex) String() string { return proto.CompactTextString(m) } +func (*Vertex) ProtoMessage() {} +func (*Vertex) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *Vertex) GetX() int32 { + if m != nil { + return m.X + } + return 0 +} + +func (m *Vertex) GetY() int32 { + if m != nil { + return m.Y + } + return 0 +} + +// A bounding polygon for the detected image annotation. +type BoundingPoly struct { + // The bounding polygon vertices. + Vertices []*Vertex `protobuf:"bytes,1,rep,name=vertices" json:"vertices,omitempty"` +} + +func (m *BoundingPoly) Reset() { *m = BoundingPoly{} } +func (m *BoundingPoly) String() string { return proto.CompactTextString(m) } +func (*BoundingPoly) ProtoMessage() {} +func (*BoundingPoly) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *BoundingPoly) GetVertices() []*Vertex { + if m != nil { + return m.Vertices + } + return nil +} + +// A 3D position in the image, used primarily for Face detection landmarks. +// A valid Position must have both x and y coordinates. +// The position coordinates are in the same scale as the original image. +type Position struct { + // X coordinate. + X float32 `protobuf:"fixed32,1,opt,name=x" json:"x,omitempty"` + // Y coordinate. + Y float32 `protobuf:"fixed32,2,opt,name=y" json:"y,omitempty"` + // Z coordinate (or depth). + Z float32 `protobuf:"fixed32,3,opt,name=z" json:"z,omitempty"` +} + +func (m *Position) Reset() { *m = Position{} } +func (m *Position) String() string { return proto.CompactTextString(m) } +func (*Position) ProtoMessage() {} +func (*Position) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *Position) GetX() float32 { + if m != nil { + return m.X + } + return 0 +} + +func (m *Position) GetY() float32 { + if m != nil { + return m.Y + } + return 0 +} + +func (m *Position) GetZ() float32 { + if m != nil { + return m.Z + } + return 0 +} + +func init() { + proto.RegisterType((*Vertex)(nil), "google.cloud.vision.v1p2beta1.Vertex") + proto.RegisterType((*BoundingPoly)(nil), "google.cloud.vision.v1p2beta1.BoundingPoly") + proto.RegisterType((*Position)(nil), "google.cloud.vision.v1p2beta1.Position") +} + +func init() { proto.RegisterFile("google/cloud/vision/v1p2beta1/geometry.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 243 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xb1, 0x4b, 0xc3, 0x40, + 0x14, 0x87, 0x79, 0x29, 0x96, 0x72, 0xd6, 0x25, 0x53, 0x16, 0xa1, 0x06, 0x85, 0x0e, 0x72, 0x47, + 0xab, 0x9b, 0x93, 0x71, 0x70, 0x8d, 0x19, 0x1c, 0xdc, 0xd2, 0xf4, 0xf1, 0x38, 0x48, 0xef, 0x85, + 0xcb, 0x35, 0xf4, 0x8a, 0x7f, 0xb8, 0xa3, 0xf4, 0xae, 0x54, 0x1c, 0xda, 0xf1, 0x77, 0xf7, 0x3d, + 0x3e, 0xf8, 0xc4, 0x23, 0x31, 0x53, 0x8b, 0xaa, 0x69, 0x79, 0xbb, 0x56, 0x83, 0xee, 0x35, 0x1b, + 0x35, 0x2c, 0xba, 0xe5, 0x0a, 0x5d, 0xbd, 0x50, 0x84, 0xbc, 0x41, 0x67, 0xbd, 0xec, 0x2c, 0x3b, + 0x4e, 0x6f, 0x23, 0x2d, 0x03, 0x2d, 0x23, 0x2d, 0x4f, 0x74, 0x7e, 0x2f, 0xc6, 0x9f, 0x68, 0x1d, + 0xee, 0xd2, 0xa9, 0x80, 0x5d, 0x06, 0x33, 0x98, 0x5f, 0x55, 0x10, 0x96, 0xcf, 0x92, 0xb8, 0x7c, + 0xfe, 0x21, 0xa6, 0x05, 0x6f, 0xcd, 0x5a, 0x1b, 0x2a, 0xb9, 0xf5, 0xe9, 0xab, 0x98, 0x0c, 0x68, + 0x9d, 0x6e, 0xb0, 0xcf, 0x60, 0x36, 0x9a, 0x5f, 0x2f, 0x1f, 0xe4, 0x45, 0x8f, 0x8c, 0x92, 0xea, + 0x74, 0x96, 0x3f, 0x8b, 0x49, 0xc9, 0xbd, 0x76, 0x9a, 0xcd, 0x9f, 0x3a, 0xf9, 0xa7, 0x4e, 0x2a, + 0xf0, 0x87, 0xb5, 0xcf, 0x46, 0x71, 0xed, 0x8b, 0x6f, 0x71, 0xd7, 0xf0, 0xe6, 0xb2, 0xab, 0xb8, + 0x79, 0x3f, 0x26, 0x28, 0x0f, 0x05, 0x4a, 0xf8, 0x7a, 0x3b, 0xf2, 0xc4, 0x6d, 0x6d, 0x48, 0xb2, + 0x25, 0x45, 0x68, 0x42, 0x1f, 0x15, 0xbf, 0xea, 0x4e, 0xf7, 0x67, 0x82, 0xbe, 0xc4, 0x87, 0x1f, + 0x80, 0xd5, 0x38, 0x9c, 0x3c, 0xfd, 0x06, 0x00, 0x00, 0xff, 0xff, 0x5a, 0xa2, 0xee, 0x2b, 0x82, + 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1p2beta1/image_annotator.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1p2beta1/image_annotator.pb.go new file mode 100644 index 0000000..e06fe9c --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1p2beta1/image_annotator.pb.go @@ -0,0 +1,1933 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/vision/v1p2beta1/image_annotator.proto + +package vision + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import google_protobuf3 "github.com/golang/protobuf/ptypes/timestamp" +import google_rpc "google.golang.org/genproto/googleapis/rpc/status" +import google_type "google.golang.org/genproto/googleapis/type/color" +import google_type1 "google.golang.org/genproto/googleapis/type/latlng" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// A bucketized representation of likelihood, which is intended to give clients +// highly stable results across model upgrades. +type Likelihood int32 + +const ( + // Unknown likelihood. + Likelihood_UNKNOWN Likelihood = 0 + // It is very unlikely that the image belongs to the specified vertical. + Likelihood_VERY_UNLIKELY Likelihood = 1 + // It is unlikely that the image belongs to the specified vertical. + Likelihood_UNLIKELY Likelihood = 2 + // It is possible that the image belongs to the specified vertical. + Likelihood_POSSIBLE Likelihood = 3 + // It is likely that the image belongs to the specified vertical. + Likelihood_LIKELY Likelihood = 4 + // It is very likely that the image belongs to the specified vertical. + Likelihood_VERY_LIKELY Likelihood = 5 +) + +var Likelihood_name = map[int32]string{ + 0: "UNKNOWN", + 1: "VERY_UNLIKELY", + 2: "UNLIKELY", + 3: "POSSIBLE", + 4: "LIKELY", + 5: "VERY_LIKELY", +} +var Likelihood_value = map[string]int32{ + "UNKNOWN": 0, + "VERY_UNLIKELY": 1, + "UNLIKELY": 2, + "POSSIBLE": 3, + "LIKELY": 4, + "VERY_LIKELY": 5, +} + +func (x Likelihood) String() string { + return proto.EnumName(Likelihood_name, int32(x)) +} +func (Likelihood) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +// Type of Google Cloud Vision API feature to be extracted. +type Feature_Type int32 + +const ( + // Unspecified feature type. + Feature_TYPE_UNSPECIFIED Feature_Type = 0 + // Run face detection. + Feature_FACE_DETECTION Feature_Type = 1 + // Run landmark detection. + Feature_LANDMARK_DETECTION Feature_Type = 2 + // Run logo detection. + Feature_LOGO_DETECTION Feature_Type = 3 + // Run label detection. + Feature_LABEL_DETECTION Feature_Type = 4 + // Run text detection / optical character recognition (OCR). Text detection + // is optimized for areas of text within a larger image; if the image is + // a document, use `DOCUMENT_TEXT_DETECTION` instead. + Feature_TEXT_DETECTION Feature_Type = 5 + // Run dense text document OCR. Takes precedence when both + // `DOCUMENT_TEXT_DETECTION` and `TEXT_DETECTION` are present. + Feature_DOCUMENT_TEXT_DETECTION Feature_Type = 11 + // Run Safe Search to detect potentially unsafe + // or undesirable content. + Feature_SAFE_SEARCH_DETECTION Feature_Type = 6 + // Compute a set of image properties, such as the + // image's dominant colors. + Feature_IMAGE_PROPERTIES Feature_Type = 7 + // Run crop hints. + Feature_CROP_HINTS Feature_Type = 9 + // Run web detection. + Feature_WEB_DETECTION Feature_Type = 10 +) + +var Feature_Type_name = map[int32]string{ + 0: "TYPE_UNSPECIFIED", + 1: "FACE_DETECTION", + 2: "LANDMARK_DETECTION", + 3: "LOGO_DETECTION", + 4: "LABEL_DETECTION", + 5: "TEXT_DETECTION", + 11: "DOCUMENT_TEXT_DETECTION", + 6: "SAFE_SEARCH_DETECTION", + 7: "IMAGE_PROPERTIES", + 9: "CROP_HINTS", + 10: "WEB_DETECTION", +} +var Feature_Type_value = map[string]int32{ + "TYPE_UNSPECIFIED": 0, + "FACE_DETECTION": 1, + "LANDMARK_DETECTION": 2, + "LOGO_DETECTION": 3, + "LABEL_DETECTION": 4, + "TEXT_DETECTION": 5, + "DOCUMENT_TEXT_DETECTION": 11, + "SAFE_SEARCH_DETECTION": 6, + "IMAGE_PROPERTIES": 7, + "CROP_HINTS": 9, + "WEB_DETECTION": 10, +} + +func (x Feature_Type) String() string { + return proto.EnumName(Feature_Type_name, int32(x)) +} +func (Feature_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{0, 0} } + +// Face landmark (feature) type. +// Left and right are defined from the vantage of the viewer of the image +// without considering mirror projections typical of photos. So, `LEFT_EYE`, +// typically, is the person's right eye. +type FaceAnnotation_Landmark_Type int32 + +const ( + // Unknown face landmark detected. Should not be filled. + FaceAnnotation_Landmark_UNKNOWN_LANDMARK FaceAnnotation_Landmark_Type = 0 + // Left eye. + FaceAnnotation_Landmark_LEFT_EYE FaceAnnotation_Landmark_Type = 1 + // Right eye. + FaceAnnotation_Landmark_RIGHT_EYE FaceAnnotation_Landmark_Type = 2 + // Left of left eyebrow. + FaceAnnotation_Landmark_LEFT_OF_LEFT_EYEBROW FaceAnnotation_Landmark_Type = 3 + // Right of left eyebrow. + FaceAnnotation_Landmark_RIGHT_OF_LEFT_EYEBROW FaceAnnotation_Landmark_Type = 4 + // Left of right eyebrow. + FaceAnnotation_Landmark_LEFT_OF_RIGHT_EYEBROW FaceAnnotation_Landmark_Type = 5 + // Right of right eyebrow. + FaceAnnotation_Landmark_RIGHT_OF_RIGHT_EYEBROW FaceAnnotation_Landmark_Type = 6 + // Midpoint between eyes. + FaceAnnotation_Landmark_MIDPOINT_BETWEEN_EYES FaceAnnotation_Landmark_Type = 7 + // Nose tip. + FaceAnnotation_Landmark_NOSE_TIP FaceAnnotation_Landmark_Type = 8 + // Upper lip. + FaceAnnotation_Landmark_UPPER_LIP FaceAnnotation_Landmark_Type = 9 + // Lower lip. + FaceAnnotation_Landmark_LOWER_LIP FaceAnnotation_Landmark_Type = 10 + // Mouth left. + FaceAnnotation_Landmark_MOUTH_LEFT FaceAnnotation_Landmark_Type = 11 + // Mouth right. + FaceAnnotation_Landmark_MOUTH_RIGHT FaceAnnotation_Landmark_Type = 12 + // Mouth center. + FaceAnnotation_Landmark_MOUTH_CENTER FaceAnnotation_Landmark_Type = 13 + // Nose, bottom right. + FaceAnnotation_Landmark_NOSE_BOTTOM_RIGHT FaceAnnotation_Landmark_Type = 14 + // Nose, bottom left. + FaceAnnotation_Landmark_NOSE_BOTTOM_LEFT FaceAnnotation_Landmark_Type = 15 + // Nose, bottom center. + FaceAnnotation_Landmark_NOSE_BOTTOM_CENTER FaceAnnotation_Landmark_Type = 16 + // Left eye, top boundary. + FaceAnnotation_Landmark_LEFT_EYE_TOP_BOUNDARY FaceAnnotation_Landmark_Type = 17 + // Left eye, right corner. + FaceAnnotation_Landmark_LEFT_EYE_RIGHT_CORNER FaceAnnotation_Landmark_Type = 18 + // Left eye, bottom boundary. + FaceAnnotation_Landmark_LEFT_EYE_BOTTOM_BOUNDARY FaceAnnotation_Landmark_Type = 19 + // Left eye, left corner. + FaceAnnotation_Landmark_LEFT_EYE_LEFT_CORNER FaceAnnotation_Landmark_Type = 20 + // Right eye, top boundary. + FaceAnnotation_Landmark_RIGHT_EYE_TOP_BOUNDARY FaceAnnotation_Landmark_Type = 21 + // Right eye, right corner. + FaceAnnotation_Landmark_RIGHT_EYE_RIGHT_CORNER FaceAnnotation_Landmark_Type = 22 + // Right eye, bottom boundary. + FaceAnnotation_Landmark_RIGHT_EYE_BOTTOM_BOUNDARY FaceAnnotation_Landmark_Type = 23 + // Right eye, left corner. + FaceAnnotation_Landmark_RIGHT_EYE_LEFT_CORNER FaceAnnotation_Landmark_Type = 24 + // Left eyebrow, upper midpoint. + FaceAnnotation_Landmark_LEFT_EYEBROW_UPPER_MIDPOINT FaceAnnotation_Landmark_Type = 25 + // Right eyebrow, upper midpoint. + FaceAnnotation_Landmark_RIGHT_EYEBROW_UPPER_MIDPOINT FaceAnnotation_Landmark_Type = 26 + // Left ear tragion. + FaceAnnotation_Landmark_LEFT_EAR_TRAGION FaceAnnotation_Landmark_Type = 27 + // Right ear tragion. + FaceAnnotation_Landmark_RIGHT_EAR_TRAGION FaceAnnotation_Landmark_Type = 28 + // Left eye pupil. + FaceAnnotation_Landmark_LEFT_EYE_PUPIL FaceAnnotation_Landmark_Type = 29 + // Right eye pupil. + FaceAnnotation_Landmark_RIGHT_EYE_PUPIL FaceAnnotation_Landmark_Type = 30 + // Forehead glabella. + FaceAnnotation_Landmark_FOREHEAD_GLABELLA FaceAnnotation_Landmark_Type = 31 + // Chin gnathion. + FaceAnnotation_Landmark_CHIN_GNATHION FaceAnnotation_Landmark_Type = 32 + // Chin left gonion. + FaceAnnotation_Landmark_CHIN_LEFT_GONION FaceAnnotation_Landmark_Type = 33 + // Chin right gonion. + FaceAnnotation_Landmark_CHIN_RIGHT_GONION FaceAnnotation_Landmark_Type = 34 +) + +var FaceAnnotation_Landmark_Type_name = map[int32]string{ + 0: "UNKNOWN_LANDMARK", + 1: "LEFT_EYE", + 2: "RIGHT_EYE", + 3: "LEFT_OF_LEFT_EYEBROW", + 4: "RIGHT_OF_LEFT_EYEBROW", + 5: "LEFT_OF_RIGHT_EYEBROW", + 6: "RIGHT_OF_RIGHT_EYEBROW", + 7: "MIDPOINT_BETWEEN_EYES", + 8: "NOSE_TIP", + 9: "UPPER_LIP", + 10: "LOWER_LIP", + 11: "MOUTH_LEFT", + 12: "MOUTH_RIGHT", + 13: "MOUTH_CENTER", + 14: "NOSE_BOTTOM_RIGHT", + 15: "NOSE_BOTTOM_LEFT", + 16: "NOSE_BOTTOM_CENTER", + 17: "LEFT_EYE_TOP_BOUNDARY", + 18: "LEFT_EYE_RIGHT_CORNER", + 19: "LEFT_EYE_BOTTOM_BOUNDARY", + 20: "LEFT_EYE_LEFT_CORNER", + 21: "RIGHT_EYE_TOP_BOUNDARY", + 22: "RIGHT_EYE_RIGHT_CORNER", + 23: "RIGHT_EYE_BOTTOM_BOUNDARY", + 24: "RIGHT_EYE_LEFT_CORNER", + 25: "LEFT_EYEBROW_UPPER_MIDPOINT", + 26: "RIGHT_EYEBROW_UPPER_MIDPOINT", + 27: "LEFT_EAR_TRAGION", + 28: "RIGHT_EAR_TRAGION", + 29: "LEFT_EYE_PUPIL", + 30: "RIGHT_EYE_PUPIL", + 31: "FOREHEAD_GLABELLA", + 32: "CHIN_GNATHION", + 33: "CHIN_LEFT_GONION", + 34: "CHIN_RIGHT_GONION", +} +var FaceAnnotation_Landmark_Type_value = map[string]int32{ + "UNKNOWN_LANDMARK": 0, + "LEFT_EYE": 1, + "RIGHT_EYE": 2, + "LEFT_OF_LEFT_EYEBROW": 3, + "RIGHT_OF_LEFT_EYEBROW": 4, + "LEFT_OF_RIGHT_EYEBROW": 5, + "RIGHT_OF_RIGHT_EYEBROW": 6, + "MIDPOINT_BETWEEN_EYES": 7, + "NOSE_TIP": 8, + "UPPER_LIP": 9, + "LOWER_LIP": 10, + "MOUTH_LEFT": 11, + "MOUTH_RIGHT": 12, + "MOUTH_CENTER": 13, + "NOSE_BOTTOM_RIGHT": 14, + "NOSE_BOTTOM_LEFT": 15, + "NOSE_BOTTOM_CENTER": 16, + "LEFT_EYE_TOP_BOUNDARY": 17, + "LEFT_EYE_RIGHT_CORNER": 18, + "LEFT_EYE_BOTTOM_BOUNDARY": 19, + "LEFT_EYE_LEFT_CORNER": 20, + "RIGHT_EYE_TOP_BOUNDARY": 21, + "RIGHT_EYE_RIGHT_CORNER": 22, + "RIGHT_EYE_BOTTOM_BOUNDARY": 23, + "RIGHT_EYE_LEFT_CORNER": 24, + "LEFT_EYEBROW_UPPER_MIDPOINT": 25, + "RIGHT_EYEBROW_UPPER_MIDPOINT": 26, + "LEFT_EAR_TRAGION": 27, + "RIGHT_EAR_TRAGION": 28, + "LEFT_EYE_PUPIL": 29, + "RIGHT_EYE_PUPIL": 30, + "FOREHEAD_GLABELLA": 31, + "CHIN_GNATHION": 32, + "CHIN_LEFT_GONION": 33, + "CHIN_RIGHT_GONION": 34, +} + +func (x FaceAnnotation_Landmark_Type) String() string { + return proto.EnumName(FaceAnnotation_Landmark_Type_name, int32(x)) +} +func (FaceAnnotation_Landmark_Type) EnumDescriptor() ([]byte, []int) { + return fileDescriptor1, []int{3, 0, 0} +} + +// Batch operation states. +type OperationMetadata_State int32 + +const ( + // Invalid. + OperationMetadata_STATE_UNSPECIFIED OperationMetadata_State = 0 + // Request is received. + OperationMetadata_CREATED OperationMetadata_State = 1 + // Request is actively being processed. + OperationMetadata_RUNNING OperationMetadata_State = 2 + // The batch processing is done. + OperationMetadata_DONE OperationMetadata_State = 3 + // The batch processing was cancelled. + OperationMetadata_CANCELLED OperationMetadata_State = 4 +) + +var OperationMetadata_State_name = map[int32]string{ + 0: "STATE_UNSPECIFIED", + 1: "CREATED", + 2: "RUNNING", + 3: "DONE", + 4: "CANCELLED", +} +var OperationMetadata_State_value = map[string]int32{ + "STATE_UNSPECIFIED": 0, + "CREATED": 1, + "RUNNING": 2, + "DONE": 3, + "CANCELLED": 4, +} + +func (x OperationMetadata_State) String() string { + return proto.EnumName(OperationMetadata_State_name, int32(x)) +} +func (OperationMetadata_State) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{30, 0} } + +// The type of Google Cloud Vision API detection to perform, and the maximum +// number of results to return for that type. Multiple `Feature` objects can +// be specified in the `features` list. +type Feature struct { + // The feature type. + Type Feature_Type `protobuf:"varint,1,opt,name=type,enum=google.cloud.vision.v1p2beta1.Feature_Type" json:"type,omitempty"` + // Maximum number of results of this type. Does not apply to + // `TEXT_DETECTION`, `DOCUMENT_TEXT_DETECTION`, or `CROP_HINTS`. + MaxResults int32 `protobuf:"varint,2,opt,name=max_results,json=maxResults" json:"max_results,omitempty"` + // Model to use for the feature. + // Supported values: "builtin/stable" (the default if unset) and + // "builtin/latest". + Model string `protobuf:"bytes,3,opt,name=model" json:"model,omitempty"` +} + +func (m *Feature) Reset() { *m = Feature{} } +func (m *Feature) String() string { return proto.CompactTextString(m) } +func (*Feature) ProtoMessage() {} +func (*Feature) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *Feature) GetType() Feature_Type { + if m != nil { + return m.Type + } + return Feature_TYPE_UNSPECIFIED +} + +func (m *Feature) GetMaxResults() int32 { + if m != nil { + return m.MaxResults + } + return 0 +} + +func (m *Feature) GetModel() string { + if m != nil { + return m.Model + } + return "" +} + +// External image source (Google Cloud Storage or web URL image location). +type ImageSource struct { + // **Use `image_uri` instead.** + // + // The Google Cloud Storage URI of the form + // `gs://bucket_name/object_name`. Object versioning is not supported. See + // [Google Cloud Storage Request + // URIs](https://cloud.google.com/storage/docs/reference-uris) for more info. + GcsImageUri string `protobuf:"bytes,1,opt,name=gcs_image_uri,json=gcsImageUri" json:"gcs_image_uri,omitempty"` + // The URI of the source image. Can be either: + // + // 1. A Google Cloud Storage URI of the form + // `gs://bucket_name/object_name`. Object versioning is not supported. See + // [Google Cloud Storage Request + // URIs](https://cloud.google.com/storage/docs/reference-uris) for more + // info. + // + // 2. A publicly-accessible image HTTP/HTTPS URL. When fetching images from + // HTTP/HTTPS URLs, Google cannot guarantee that the request will be + // completed. Your request may fail if the specified host denies the + // request (e.g. due to request throttling or DOS prevention), or if Google + // throttles requests to the site for abuse prevention. You should not + // depend on externally-hosted images for production applications. + // + // When both `gcs_image_uri` and `image_uri` are specified, `image_uri` takes + // precedence. + ImageUri string `protobuf:"bytes,2,opt,name=image_uri,json=imageUri" json:"image_uri,omitempty"` +} + +func (m *ImageSource) Reset() { *m = ImageSource{} } +func (m *ImageSource) String() string { return proto.CompactTextString(m) } +func (*ImageSource) ProtoMessage() {} +func (*ImageSource) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +func (m *ImageSource) GetGcsImageUri() string { + if m != nil { + return m.GcsImageUri + } + return "" +} + +func (m *ImageSource) GetImageUri() string { + if m != nil { + return m.ImageUri + } + return "" +} + +// Client image to perform Google Cloud Vision API tasks over. +type Image struct { + // Image content, represented as a stream of bytes. + // Note: As with all `bytes` fields, protobuffers use a pure binary + // representation, whereas JSON representations use base64. + Content []byte `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"` + // Google Cloud Storage image location, or publicly-accessible image + // URL. If both `content` and `source` are provided for an image, `content` + // takes precedence and is used to perform the image annotation request. + Source *ImageSource `protobuf:"bytes,2,opt,name=source" json:"source,omitempty"` +} + +func (m *Image) Reset() { *m = Image{} } +func (m *Image) String() string { return proto.CompactTextString(m) } +func (*Image) ProtoMessage() {} +func (*Image) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +func (m *Image) GetContent() []byte { + if m != nil { + return m.Content + } + return nil +} + +func (m *Image) GetSource() *ImageSource { + if m != nil { + return m.Source + } + return nil +} + +// A face annotation object contains the results of face detection. +type FaceAnnotation struct { + // The bounding polygon around the face. The coordinates of the bounding box + // are in the original image's scale, as returned in `ImageParams`. + // The bounding box is computed to "frame" the face in accordance with human + // expectations. It is based on the landmarker results. + // Note that one or more x and/or y coordinates may not be generated in the + // `BoundingPoly` (the polygon will be unbounded) if only a partial face + // appears in the image to be annotated. + BoundingPoly *BoundingPoly `protobuf:"bytes,1,opt,name=bounding_poly,json=boundingPoly" json:"bounding_poly,omitempty"` + // The `fd_bounding_poly` bounding polygon is tighter than the + // `boundingPoly`, and encloses only the skin part of the face. Typically, it + // is used to eliminate the face from any image analysis that detects the + // "amount of skin" visible in an image. It is not based on the + // landmarker results, only on the initial face detection, hence + // the fd (face detection) prefix. + FdBoundingPoly *BoundingPoly `protobuf:"bytes,2,opt,name=fd_bounding_poly,json=fdBoundingPoly" json:"fd_bounding_poly,omitempty"` + // Detected face landmarks. + Landmarks []*FaceAnnotation_Landmark `protobuf:"bytes,3,rep,name=landmarks" json:"landmarks,omitempty"` + // Roll angle, which indicates the amount of clockwise/anti-clockwise rotation + // of the face relative to the image vertical about the axis perpendicular to + // the face. Range [-180,180]. + RollAngle float32 `protobuf:"fixed32,4,opt,name=roll_angle,json=rollAngle" json:"roll_angle,omitempty"` + // Yaw angle, which indicates the leftward/rightward angle that the face is + // pointing relative to the vertical plane perpendicular to the image. Range + // [-180,180]. + PanAngle float32 `protobuf:"fixed32,5,opt,name=pan_angle,json=panAngle" json:"pan_angle,omitempty"` + // Pitch angle, which indicates the upwards/downwards angle that the face is + // pointing relative to the image's horizontal plane. Range [-180,180]. + TiltAngle float32 `protobuf:"fixed32,6,opt,name=tilt_angle,json=tiltAngle" json:"tilt_angle,omitempty"` + // Detection confidence. Range [0, 1]. + DetectionConfidence float32 `protobuf:"fixed32,7,opt,name=detection_confidence,json=detectionConfidence" json:"detection_confidence,omitempty"` + // Face landmarking confidence. Range [0, 1]. + LandmarkingConfidence float32 `protobuf:"fixed32,8,opt,name=landmarking_confidence,json=landmarkingConfidence" json:"landmarking_confidence,omitempty"` + // Joy likelihood. + JoyLikelihood Likelihood `protobuf:"varint,9,opt,name=joy_likelihood,json=joyLikelihood,enum=google.cloud.vision.v1p2beta1.Likelihood" json:"joy_likelihood,omitempty"` + // Sorrow likelihood. + SorrowLikelihood Likelihood `protobuf:"varint,10,opt,name=sorrow_likelihood,json=sorrowLikelihood,enum=google.cloud.vision.v1p2beta1.Likelihood" json:"sorrow_likelihood,omitempty"` + // Anger likelihood. + AngerLikelihood Likelihood `protobuf:"varint,11,opt,name=anger_likelihood,json=angerLikelihood,enum=google.cloud.vision.v1p2beta1.Likelihood" json:"anger_likelihood,omitempty"` + // Surprise likelihood. + SurpriseLikelihood Likelihood `protobuf:"varint,12,opt,name=surprise_likelihood,json=surpriseLikelihood,enum=google.cloud.vision.v1p2beta1.Likelihood" json:"surprise_likelihood,omitempty"` + // Under-exposed likelihood. + UnderExposedLikelihood Likelihood `protobuf:"varint,13,opt,name=under_exposed_likelihood,json=underExposedLikelihood,enum=google.cloud.vision.v1p2beta1.Likelihood" json:"under_exposed_likelihood,omitempty"` + // Blurred likelihood. + BlurredLikelihood Likelihood `protobuf:"varint,14,opt,name=blurred_likelihood,json=blurredLikelihood,enum=google.cloud.vision.v1p2beta1.Likelihood" json:"blurred_likelihood,omitempty"` + // Headwear likelihood. + HeadwearLikelihood Likelihood `protobuf:"varint,15,opt,name=headwear_likelihood,json=headwearLikelihood,enum=google.cloud.vision.v1p2beta1.Likelihood" json:"headwear_likelihood,omitempty"` +} + +func (m *FaceAnnotation) Reset() { *m = FaceAnnotation{} } +func (m *FaceAnnotation) String() string { return proto.CompactTextString(m) } +func (*FaceAnnotation) ProtoMessage() {} +func (*FaceAnnotation) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } + +func (m *FaceAnnotation) GetBoundingPoly() *BoundingPoly { + if m != nil { + return m.BoundingPoly + } + return nil +} + +func (m *FaceAnnotation) GetFdBoundingPoly() *BoundingPoly { + if m != nil { + return m.FdBoundingPoly + } + return nil +} + +func (m *FaceAnnotation) GetLandmarks() []*FaceAnnotation_Landmark { + if m != nil { + return m.Landmarks + } + return nil +} + +func (m *FaceAnnotation) GetRollAngle() float32 { + if m != nil { + return m.RollAngle + } + return 0 +} + +func (m *FaceAnnotation) GetPanAngle() float32 { + if m != nil { + return m.PanAngle + } + return 0 +} + +func (m *FaceAnnotation) GetTiltAngle() float32 { + if m != nil { + return m.TiltAngle + } + return 0 +} + +func (m *FaceAnnotation) GetDetectionConfidence() float32 { + if m != nil { + return m.DetectionConfidence + } + return 0 +} + +func (m *FaceAnnotation) GetLandmarkingConfidence() float32 { + if m != nil { + return m.LandmarkingConfidence + } + return 0 +} + +func (m *FaceAnnotation) GetJoyLikelihood() Likelihood { + if m != nil { + return m.JoyLikelihood + } + return Likelihood_UNKNOWN +} + +func (m *FaceAnnotation) GetSorrowLikelihood() Likelihood { + if m != nil { + return m.SorrowLikelihood + } + return Likelihood_UNKNOWN +} + +func (m *FaceAnnotation) GetAngerLikelihood() Likelihood { + if m != nil { + return m.AngerLikelihood + } + return Likelihood_UNKNOWN +} + +func (m *FaceAnnotation) GetSurpriseLikelihood() Likelihood { + if m != nil { + return m.SurpriseLikelihood + } + return Likelihood_UNKNOWN +} + +func (m *FaceAnnotation) GetUnderExposedLikelihood() Likelihood { + if m != nil { + return m.UnderExposedLikelihood + } + return Likelihood_UNKNOWN +} + +func (m *FaceAnnotation) GetBlurredLikelihood() Likelihood { + if m != nil { + return m.BlurredLikelihood + } + return Likelihood_UNKNOWN +} + +func (m *FaceAnnotation) GetHeadwearLikelihood() Likelihood { + if m != nil { + return m.HeadwearLikelihood + } + return Likelihood_UNKNOWN +} + +// A face-specific landmark (for example, a face feature). +type FaceAnnotation_Landmark struct { + // Face landmark type. + Type FaceAnnotation_Landmark_Type `protobuf:"varint,3,opt,name=type,enum=google.cloud.vision.v1p2beta1.FaceAnnotation_Landmark_Type" json:"type,omitempty"` + // Face landmark position. + Position *Position `protobuf:"bytes,4,opt,name=position" json:"position,omitempty"` +} + +func (m *FaceAnnotation_Landmark) Reset() { *m = FaceAnnotation_Landmark{} } +func (m *FaceAnnotation_Landmark) String() string { return proto.CompactTextString(m) } +func (*FaceAnnotation_Landmark) ProtoMessage() {} +func (*FaceAnnotation_Landmark) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3, 0} } + +func (m *FaceAnnotation_Landmark) GetType() FaceAnnotation_Landmark_Type { + if m != nil { + return m.Type + } + return FaceAnnotation_Landmark_UNKNOWN_LANDMARK +} + +func (m *FaceAnnotation_Landmark) GetPosition() *Position { + if m != nil { + return m.Position + } + return nil +} + +// Detected entity location information. +type LocationInfo struct { + // lat/long location coordinates. + LatLng *google_type1.LatLng `protobuf:"bytes,1,opt,name=lat_lng,json=latLng" json:"lat_lng,omitempty"` +} + +func (m *LocationInfo) Reset() { *m = LocationInfo{} } +func (m *LocationInfo) String() string { return proto.CompactTextString(m) } +func (*LocationInfo) ProtoMessage() {} +func (*LocationInfo) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } + +func (m *LocationInfo) GetLatLng() *google_type1.LatLng { + if m != nil { + return m.LatLng + } + return nil +} + +// A `Property` consists of a user-supplied name/value pair. +type Property struct { + // Name of the property. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Value of the property. + Value string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` + // Value of numeric properties. + Uint64Value uint64 `protobuf:"varint,3,opt,name=uint64_value,json=uint64Value" json:"uint64_value,omitempty"` +} + +func (m *Property) Reset() { *m = Property{} } +func (m *Property) String() string { return proto.CompactTextString(m) } +func (*Property) ProtoMessage() {} +func (*Property) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } + +func (m *Property) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Property) GetValue() string { + if m != nil { + return m.Value + } + return "" +} + +func (m *Property) GetUint64Value() uint64 { + if m != nil { + return m.Uint64Value + } + return 0 +} + +// Set of detected entity features. +type EntityAnnotation struct { + // Opaque entity ID. Some IDs may be available in + // [Google Knowledge Graph Search + // API](https://developers.google.com/knowledge-graph/). + Mid string `protobuf:"bytes,1,opt,name=mid" json:"mid,omitempty"` + // The language code for the locale in which the entity textual + // `description` is expressed. + Locale string `protobuf:"bytes,2,opt,name=locale" json:"locale,omitempty"` + // Entity textual description, expressed in its `locale` language. + Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` + // Overall score of the result. Range [0, 1]. + Score float32 `protobuf:"fixed32,4,opt,name=score" json:"score,omitempty"` + // **Deprecated. Use `score` instead.** + // The accuracy of the entity detection in an image. + // For example, for an image in which the "Eiffel Tower" entity is detected, + // this field represents the confidence that there is a tower in the query + // image. Range [0, 1]. + Confidence float32 `protobuf:"fixed32,5,opt,name=confidence" json:"confidence,omitempty"` + // The relevancy of the ICA (Image Content Annotation) label to the + // image. For example, the relevancy of "tower" is likely higher to an image + // containing the detected "Eiffel Tower" than to an image containing a + // detected distant towering building, even though the confidence that + // there is a tower in each image may be the same. Range [0, 1]. + Topicality float32 `protobuf:"fixed32,6,opt,name=topicality" json:"topicality,omitempty"` + // Image region to which this entity belongs. Not produced + // for `LABEL_DETECTION` features. + BoundingPoly *BoundingPoly `protobuf:"bytes,7,opt,name=bounding_poly,json=boundingPoly" json:"bounding_poly,omitempty"` + // The location information for the detected entity. Multiple + // `LocationInfo` elements can be present because one location may + // indicate the location of the scene in the image, and another location + // may indicate the location of the place where the image was taken. + // Location information is usually present for landmarks. + Locations []*LocationInfo `protobuf:"bytes,8,rep,name=locations" json:"locations,omitempty"` + // Some entities may have optional user-supplied `Property` (name/value) + // fields, such a score or string that qualifies the entity. + Properties []*Property `protobuf:"bytes,9,rep,name=properties" json:"properties,omitempty"` +} + +func (m *EntityAnnotation) Reset() { *m = EntityAnnotation{} } +func (m *EntityAnnotation) String() string { return proto.CompactTextString(m) } +func (*EntityAnnotation) ProtoMessage() {} +func (*EntityAnnotation) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } + +func (m *EntityAnnotation) GetMid() string { + if m != nil { + return m.Mid + } + return "" +} + +func (m *EntityAnnotation) GetLocale() string { + if m != nil { + return m.Locale + } + return "" +} + +func (m *EntityAnnotation) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *EntityAnnotation) GetScore() float32 { + if m != nil { + return m.Score + } + return 0 +} + +func (m *EntityAnnotation) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + +func (m *EntityAnnotation) GetTopicality() float32 { + if m != nil { + return m.Topicality + } + return 0 +} + +func (m *EntityAnnotation) GetBoundingPoly() *BoundingPoly { + if m != nil { + return m.BoundingPoly + } + return nil +} + +func (m *EntityAnnotation) GetLocations() []*LocationInfo { + if m != nil { + return m.Locations + } + return nil +} + +func (m *EntityAnnotation) GetProperties() []*Property { + if m != nil { + return m.Properties + } + return nil +} + +// Set of features pertaining to the image, computed by computer vision +// methods over safe-search verticals (for example, adult, spoof, medical, +// violence). +type SafeSearchAnnotation struct { + // Represents the adult content likelihood for the image. Adult content may + // contain elements such as nudity, pornographic images or cartoons, or + // sexual activities. + Adult Likelihood `protobuf:"varint,1,opt,name=adult,enum=google.cloud.vision.v1p2beta1.Likelihood" json:"adult,omitempty"` + // Spoof likelihood. The likelihood that an modification + // was made to the image's canonical version to make it appear + // funny or offensive. + Spoof Likelihood `protobuf:"varint,2,opt,name=spoof,enum=google.cloud.vision.v1p2beta1.Likelihood" json:"spoof,omitempty"` + // Likelihood that this is a medical image. + Medical Likelihood `protobuf:"varint,3,opt,name=medical,enum=google.cloud.vision.v1p2beta1.Likelihood" json:"medical,omitempty"` + // Likelihood that this image contains violent content. + Violence Likelihood `protobuf:"varint,4,opt,name=violence,enum=google.cloud.vision.v1p2beta1.Likelihood" json:"violence,omitempty"` + // Likelihood that the request image contains racy content. Racy content may + // include (but is not limited to) skimpy or sheer clothing, strategically + // covered nudity, lewd or provocative poses, or close-ups of sensitive + // body areas. + Racy Likelihood `protobuf:"varint,9,opt,name=racy,enum=google.cloud.vision.v1p2beta1.Likelihood" json:"racy,omitempty"` +} + +func (m *SafeSearchAnnotation) Reset() { *m = SafeSearchAnnotation{} } +func (m *SafeSearchAnnotation) String() string { return proto.CompactTextString(m) } +func (*SafeSearchAnnotation) ProtoMessage() {} +func (*SafeSearchAnnotation) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} } + +func (m *SafeSearchAnnotation) GetAdult() Likelihood { + if m != nil { + return m.Adult + } + return Likelihood_UNKNOWN +} + +func (m *SafeSearchAnnotation) GetSpoof() Likelihood { + if m != nil { + return m.Spoof + } + return Likelihood_UNKNOWN +} + +func (m *SafeSearchAnnotation) GetMedical() Likelihood { + if m != nil { + return m.Medical + } + return Likelihood_UNKNOWN +} + +func (m *SafeSearchAnnotation) GetViolence() Likelihood { + if m != nil { + return m.Violence + } + return Likelihood_UNKNOWN +} + +func (m *SafeSearchAnnotation) GetRacy() Likelihood { + if m != nil { + return m.Racy + } + return Likelihood_UNKNOWN +} + +// Rectangle determined by min and max `LatLng` pairs. +type LatLongRect struct { + // Min lat/long pair. + MinLatLng *google_type1.LatLng `protobuf:"bytes,1,opt,name=min_lat_lng,json=minLatLng" json:"min_lat_lng,omitempty"` + // Max lat/long pair. + MaxLatLng *google_type1.LatLng `protobuf:"bytes,2,opt,name=max_lat_lng,json=maxLatLng" json:"max_lat_lng,omitempty"` +} + +func (m *LatLongRect) Reset() { *m = LatLongRect{} } +func (m *LatLongRect) String() string { return proto.CompactTextString(m) } +func (*LatLongRect) ProtoMessage() {} +func (*LatLongRect) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} } + +func (m *LatLongRect) GetMinLatLng() *google_type1.LatLng { + if m != nil { + return m.MinLatLng + } + return nil +} + +func (m *LatLongRect) GetMaxLatLng() *google_type1.LatLng { + if m != nil { + return m.MaxLatLng + } + return nil +} + +// Color information consists of RGB channels, score, and the fraction of +// the image that the color occupies in the image. +type ColorInfo struct { + // RGB components of the color. + Color *google_type.Color `protobuf:"bytes,1,opt,name=color" json:"color,omitempty"` + // Image-specific score for this color. Value in range [0, 1]. + Score float32 `protobuf:"fixed32,2,opt,name=score" json:"score,omitempty"` + // The fraction of pixels the color occupies in the image. + // Value in range [0, 1]. + PixelFraction float32 `protobuf:"fixed32,3,opt,name=pixel_fraction,json=pixelFraction" json:"pixel_fraction,omitempty"` +} + +func (m *ColorInfo) Reset() { *m = ColorInfo{} } +func (m *ColorInfo) String() string { return proto.CompactTextString(m) } +func (*ColorInfo) ProtoMessage() {} +func (*ColorInfo) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{9} } + +func (m *ColorInfo) GetColor() *google_type.Color { + if m != nil { + return m.Color + } + return nil +} + +func (m *ColorInfo) GetScore() float32 { + if m != nil { + return m.Score + } + return 0 +} + +func (m *ColorInfo) GetPixelFraction() float32 { + if m != nil { + return m.PixelFraction + } + return 0 +} + +// Set of dominant colors and their corresponding scores. +type DominantColorsAnnotation struct { + // RGB color values with their score and pixel fraction. + Colors []*ColorInfo `protobuf:"bytes,1,rep,name=colors" json:"colors,omitempty"` +} + +func (m *DominantColorsAnnotation) Reset() { *m = DominantColorsAnnotation{} } +func (m *DominantColorsAnnotation) String() string { return proto.CompactTextString(m) } +func (*DominantColorsAnnotation) ProtoMessage() {} +func (*DominantColorsAnnotation) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{10} } + +func (m *DominantColorsAnnotation) GetColors() []*ColorInfo { + if m != nil { + return m.Colors + } + return nil +} + +// Stores image properties, such as dominant colors. +type ImageProperties struct { + // If present, dominant colors completed successfully. + DominantColors *DominantColorsAnnotation `protobuf:"bytes,1,opt,name=dominant_colors,json=dominantColors" json:"dominant_colors,omitempty"` +} + +func (m *ImageProperties) Reset() { *m = ImageProperties{} } +func (m *ImageProperties) String() string { return proto.CompactTextString(m) } +func (*ImageProperties) ProtoMessage() {} +func (*ImageProperties) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{11} } + +func (m *ImageProperties) GetDominantColors() *DominantColorsAnnotation { + if m != nil { + return m.DominantColors + } + return nil +} + +// Single crop hint that is used to generate a new crop when serving an image. +type CropHint struct { + // The bounding polygon for the crop region. The coordinates of the bounding + // box are in the original image's scale, as returned in `ImageParams`. + BoundingPoly *BoundingPoly `protobuf:"bytes,1,opt,name=bounding_poly,json=boundingPoly" json:"bounding_poly,omitempty"` + // Confidence of this being a salient region. Range [0, 1]. + Confidence float32 `protobuf:"fixed32,2,opt,name=confidence" json:"confidence,omitempty"` + // Fraction of importance of this salient region with respect to the original + // image. + ImportanceFraction float32 `protobuf:"fixed32,3,opt,name=importance_fraction,json=importanceFraction" json:"importance_fraction,omitempty"` +} + +func (m *CropHint) Reset() { *m = CropHint{} } +func (m *CropHint) String() string { return proto.CompactTextString(m) } +func (*CropHint) ProtoMessage() {} +func (*CropHint) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{12} } + +func (m *CropHint) GetBoundingPoly() *BoundingPoly { + if m != nil { + return m.BoundingPoly + } + return nil +} + +func (m *CropHint) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + +func (m *CropHint) GetImportanceFraction() float32 { + if m != nil { + return m.ImportanceFraction + } + return 0 +} + +// Set of crop hints that are used to generate new crops when serving images. +type CropHintsAnnotation struct { + // Crop hint results. + CropHints []*CropHint `protobuf:"bytes,1,rep,name=crop_hints,json=cropHints" json:"crop_hints,omitempty"` +} + +func (m *CropHintsAnnotation) Reset() { *m = CropHintsAnnotation{} } +func (m *CropHintsAnnotation) String() string { return proto.CompactTextString(m) } +func (*CropHintsAnnotation) ProtoMessage() {} +func (*CropHintsAnnotation) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{13} } + +func (m *CropHintsAnnotation) GetCropHints() []*CropHint { + if m != nil { + return m.CropHints + } + return nil +} + +// Parameters for crop hints annotation request. +type CropHintsParams struct { + // Aspect ratios in floats, representing the ratio of the width to the height + // of the image. For example, if the desired aspect ratio is 4/3, the + // corresponding float value should be 1.33333. If not specified, the + // best possible crop is returned. The number of provided aspect ratios is + // limited to a maximum of 16; any aspect ratios provided after the 16th are + // ignored. + AspectRatios []float32 `protobuf:"fixed32,1,rep,packed,name=aspect_ratios,json=aspectRatios" json:"aspect_ratios,omitempty"` +} + +func (m *CropHintsParams) Reset() { *m = CropHintsParams{} } +func (m *CropHintsParams) String() string { return proto.CompactTextString(m) } +func (*CropHintsParams) ProtoMessage() {} +func (*CropHintsParams) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{14} } + +func (m *CropHintsParams) GetAspectRatios() []float32 { + if m != nil { + return m.AspectRatios + } + return nil +} + +// Parameters for web detection request. +type WebDetectionParams struct { + // Whether to include results derived from the geo information in the image. + IncludeGeoResults bool `protobuf:"varint,2,opt,name=include_geo_results,json=includeGeoResults" json:"include_geo_results,omitempty"` +} + +func (m *WebDetectionParams) Reset() { *m = WebDetectionParams{} } +func (m *WebDetectionParams) String() string { return proto.CompactTextString(m) } +func (*WebDetectionParams) ProtoMessage() {} +func (*WebDetectionParams) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{15} } + +func (m *WebDetectionParams) GetIncludeGeoResults() bool { + if m != nil { + return m.IncludeGeoResults + } + return false +} + +// Image context and/or feature-specific parameters. +type ImageContext struct { + // lat/long rectangle that specifies the location of the image. + LatLongRect *LatLongRect `protobuf:"bytes,1,opt,name=lat_long_rect,json=latLongRect" json:"lat_long_rect,omitempty"` + // List of languages to use for TEXT_DETECTION. In most cases, an empty value + // yields the best results since it enables automatic language detection. For + // languages based on the Latin alphabet, setting `language_hints` is not + // needed. In rare cases, when the language of the text in the image is known, + // setting a hint will help get better results (although it will be a + // significant hindrance if the hint is wrong). Text detection returns an + // error if one or more of the specified languages is not one of the + // [supported languages](/vision/docs/languages). + LanguageHints []string `protobuf:"bytes,2,rep,name=language_hints,json=languageHints" json:"language_hints,omitempty"` + // Parameters for crop hints annotation request. + CropHintsParams *CropHintsParams `protobuf:"bytes,4,opt,name=crop_hints_params,json=cropHintsParams" json:"crop_hints_params,omitempty"` + // Parameters for web detection. + WebDetectionParams *WebDetectionParams `protobuf:"bytes,6,opt,name=web_detection_params,json=webDetectionParams" json:"web_detection_params,omitempty"` +} + +func (m *ImageContext) Reset() { *m = ImageContext{} } +func (m *ImageContext) String() string { return proto.CompactTextString(m) } +func (*ImageContext) ProtoMessage() {} +func (*ImageContext) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{16} } + +func (m *ImageContext) GetLatLongRect() *LatLongRect { + if m != nil { + return m.LatLongRect + } + return nil +} + +func (m *ImageContext) GetLanguageHints() []string { + if m != nil { + return m.LanguageHints + } + return nil +} + +func (m *ImageContext) GetCropHintsParams() *CropHintsParams { + if m != nil { + return m.CropHintsParams + } + return nil +} + +func (m *ImageContext) GetWebDetectionParams() *WebDetectionParams { + if m != nil { + return m.WebDetectionParams + } + return nil +} + +// Request for performing Google Cloud Vision API tasks over a user-provided +// image, with user-requested features. +type AnnotateImageRequest struct { + // The image to be processed. + Image *Image `protobuf:"bytes,1,opt,name=image" json:"image,omitempty"` + // Requested features. + Features []*Feature `protobuf:"bytes,2,rep,name=features" json:"features,omitempty"` + // Additional context that may accompany the image. + ImageContext *ImageContext `protobuf:"bytes,3,opt,name=image_context,json=imageContext" json:"image_context,omitempty"` +} + +func (m *AnnotateImageRequest) Reset() { *m = AnnotateImageRequest{} } +func (m *AnnotateImageRequest) String() string { return proto.CompactTextString(m) } +func (*AnnotateImageRequest) ProtoMessage() {} +func (*AnnotateImageRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{17} } + +func (m *AnnotateImageRequest) GetImage() *Image { + if m != nil { + return m.Image + } + return nil +} + +func (m *AnnotateImageRequest) GetFeatures() []*Feature { + if m != nil { + return m.Features + } + return nil +} + +func (m *AnnotateImageRequest) GetImageContext() *ImageContext { + if m != nil { + return m.ImageContext + } + return nil +} + +// If an image was produced from a file (e.g. a PDF), this message gives +// information about the source of that image. +type ImageAnnotationContext struct { + // The URI of the file used to produce the image. + Uri string `protobuf:"bytes,1,opt,name=uri" json:"uri,omitempty"` + // If the file was a PDF or TIFF, this field gives the page number within + // the file used to produce the image. + PageNumber int32 `protobuf:"varint,2,opt,name=page_number,json=pageNumber" json:"page_number,omitempty"` +} + +func (m *ImageAnnotationContext) Reset() { *m = ImageAnnotationContext{} } +func (m *ImageAnnotationContext) String() string { return proto.CompactTextString(m) } +func (*ImageAnnotationContext) ProtoMessage() {} +func (*ImageAnnotationContext) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{18} } + +func (m *ImageAnnotationContext) GetUri() string { + if m != nil { + return m.Uri + } + return "" +} + +func (m *ImageAnnotationContext) GetPageNumber() int32 { + if m != nil { + return m.PageNumber + } + return 0 +} + +// Response to an image annotation request. +type AnnotateImageResponse struct { + // If present, face detection has completed successfully. + FaceAnnotations []*FaceAnnotation `protobuf:"bytes,1,rep,name=face_annotations,json=faceAnnotations" json:"face_annotations,omitempty"` + // If present, landmark detection has completed successfully. + LandmarkAnnotations []*EntityAnnotation `protobuf:"bytes,2,rep,name=landmark_annotations,json=landmarkAnnotations" json:"landmark_annotations,omitempty"` + // If present, logo detection has completed successfully. + LogoAnnotations []*EntityAnnotation `protobuf:"bytes,3,rep,name=logo_annotations,json=logoAnnotations" json:"logo_annotations,omitempty"` + // If present, label detection has completed successfully. + LabelAnnotations []*EntityAnnotation `protobuf:"bytes,4,rep,name=label_annotations,json=labelAnnotations" json:"label_annotations,omitempty"` + // If present, text (OCR) detection has completed successfully. + TextAnnotations []*EntityAnnotation `protobuf:"bytes,5,rep,name=text_annotations,json=textAnnotations" json:"text_annotations,omitempty"` + // If present, text (OCR) detection or document (OCR) text detection has + // completed successfully. + // This annotation provides the structural hierarchy for the OCR detected + // text. + FullTextAnnotation *TextAnnotation `protobuf:"bytes,12,opt,name=full_text_annotation,json=fullTextAnnotation" json:"full_text_annotation,omitempty"` + // If present, safe-search annotation has completed successfully. + SafeSearchAnnotation *SafeSearchAnnotation `protobuf:"bytes,6,opt,name=safe_search_annotation,json=safeSearchAnnotation" json:"safe_search_annotation,omitempty"` + // If present, image properties were extracted successfully. + ImagePropertiesAnnotation *ImageProperties `protobuf:"bytes,8,opt,name=image_properties_annotation,json=imagePropertiesAnnotation" json:"image_properties_annotation,omitempty"` + // If present, crop hints have completed successfully. + CropHintsAnnotation *CropHintsAnnotation `protobuf:"bytes,11,opt,name=crop_hints_annotation,json=cropHintsAnnotation" json:"crop_hints_annotation,omitempty"` + // If present, web detection has completed successfully. + WebDetection *WebDetection `protobuf:"bytes,13,opt,name=web_detection,json=webDetection" json:"web_detection,omitempty"` + // If set, represents the error message for the operation. + // Note that filled-in image annotations are guaranteed to be + // correct, even when `error` is set. + Error *google_rpc.Status `protobuf:"bytes,9,opt,name=error" json:"error,omitempty"` + // If present, contextual information is needed to understand where this image + // comes from. + Context *ImageAnnotationContext `protobuf:"bytes,21,opt,name=context" json:"context,omitempty"` +} + +func (m *AnnotateImageResponse) Reset() { *m = AnnotateImageResponse{} } +func (m *AnnotateImageResponse) String() string { return proto.CompactTextString(m) } +func (*AnnotateImageResponse) ProtoMessage() {} +func (*AnnotateImageResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{19} } + +func (m *AnnotateImageResponse) GetFaceAnnotations() []*FaceAnnotation { + if m != nil { + return m.FaceAnnotations + } + return nil +} + +func (m *AnnotateImageResponse) GetLandmarkAnnotations() []*EntityAnnotation { + if m != nil { + return m.LandmarkAnnotations + } + return nil +} + +func (m *AnnotateImageResponse) GetLogoAnnotations() []*EntityAnnotation { + if m != nil { + return m.LogoAnnotations + } + return nil +} + +func (m *AnnotateImageResponse) GetLabelAnnotations() []*EntityAnnotation { + if m != nil { + return m.LabelAnnotations + } + return nil +} + +func (m *AnnotateImageResponse) GetTextAnnotations() []*EntityAnnotation { + if m != nil { + return m.TextAnnotations + } + return nil +} + +func (m *AnnotateImageResponse) GetFullTextAnnotation() *TextAnnotation { + if m != nil { + return m.FullTextAnnotation + } + return nil +} + +func (m *AnnotateImageResponse) GetSafeSearchAnnotation() *SafeSearchAnnotation { + if m != nil { + return m.SafeSearchAnnotation + } + return nil +} + +func (m *AnnotateImageResponse) GetImagePropertiesAnnotation() *ImageProperties { + if m != nil { + return m.ImagePropertiesAnnotation + } + return nil +} + +func (m *AnnotateImageResponse) GetCropHintsAnnotation() *CropHintsAnnotation { + if m != nil { + return m.CropHintsAnnotation + } + return nil +} + +func (m *AnnotateImageResponse) GetWebDetection() *WebDetection { + if m != nil { + return m.WebDetection + } + return nil +} + +func (m *AnnotateImageResponse) GetError() *google_rpc.Status { + if m != nil { + return m.Error + } + return nil +} + +func (m *AnnotateImageResponse) GetContext() *ImageAnnotationContext { + if m != nil { + return m.Context + } + return nil +} + +// Multiple image annotation requests are batched into a single service call. +type BatchAnnotateImagesRequest struct { + // Individual image annotation requests for this batch. + Requests []*AnnotateImageRequest `protobuf:"bytes,1,rep,name=requests" json:"requests,omitempty"` +} + +func (m *BatchAnnotateImagesRequest) Reset() { *m = BatchAnnotateImagesRequest{} } +func (m *BatchAnnotateImagesRequest) String() string { return proto.CompactTextString(m) } +func (*BatchAnnotateImagesRequest) ProtoMessage() {} +func (*BatchAnnotateImagesRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{20} } + +func (m *BatchAnnotateImagesRequest) GetRequests() []*AnnotateImageRequest { + if m != nil { + return m.Requests + } + return nil +} + +// Response to a batch image annotation request. +type BatchAnnotateImagesResponse struct { + // Individual responses to image annotation requests within the batch. + Responses []*AnnotateImageResponse `protobuf:"bytes,1,rep,name=responses" json:"responses,omitempty"` +} + +func (m *BatchAnnotateImagesResponse) Reset() { *m = BatchAnnotateImagesResponse{} } +func (m *BatchAnnotateImagesResponse) String() string { return proto.CompactTextString(m) } +func (*BatchAnnotateImagesResponse) ProtoMessage() {} +func (*BatchAnnotateImagesResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{21} } + +func (m *BatchAnnotateImagesResponse) GetResponses() []*AnnotateImageResponse { + if m != nil { + return m.Responses + } + return nil +} + +// An offline file annotation request. +type AsyncAnnotateFileRequest struct { + // Required. Information about the input file. + InputConfig *InputConfig `protobuf:"bytes,1,opt,name=input_config,json=inputConfig" json:"input_config,omitempty"` + // Required. Requested features. + Features []*Feature `protobuf:"bytes,2,rep,name=features" json:"features,omitempty"` + // Additional context that may accompany the image(s) in the file. + ImageContext *ImageContext `protobuf:"bytes,3,opt,name=image_context,json=imageContext" json:"image_context,omitempty"` + // Required. The desired output location and metadata (e.g. format). + OutputConfig *OutputConfig `protobuf:"bytes,4,opt,name=output_config,json=outputConfig" json:"output_config,omitempty"` +} + +func (m *AsyncAnnotateFileRequest) Reset() { *m = AsyncAnnotateFileRequest{} } +func (m *AsyncAnnotateFileRequest) String() string { return proto.CompactTextString(m) } +func (*AsyncAnnotateFileRequest) ProtoMessage() {} +func (*AsyncAnnotateFileRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{22} } + +func (m *AsyncAnnotateFileRequest) GetInputConfig() *InputConfig { + if m != nil { + return m.InputConfig + } + return nil +} + +func (m *AsyncAnnotateFileRequest) GetFeatures() []*Feature { + if m != nil { + return m.Features + } + return nil +} + +func (m *AsyncAnnotateFileRequest) GetImageContext() *ImageContext { + if m != nil { + return m.ImageContext + } + return nil +} + +func (m *AsyncAnnotateFileRequest) GetOutputConfig() *OutputConfig { + if m != nil { + return m.OutputConfig + } + return nil +} + +// The response for a single offline file annotation request. +type AsyncAnnotateFileResponse struct { + // The output location and metadata from AsyncAnnotateFileRequest. + OutputConfig *OutputConfig `protobuf:"bytes,1,opt,name=output_config,json=outputConfig" json:"output_config,omitempty"` +} + +func (m *AsyncAnnotateFileResponse) Reset() { *m = AsyncAnnotateFileResponse{} } +func (m *AsyncAnnotateFileResponse) String() string { return proto.CompactTextString(m) } +func (*AsyncAnnotateFileResponse) ProtoMessage() {} +func (*AsyncAnnotateFileResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{23} } + +func (m *AsyncAnnotateFileResponse) GetOutputConfig() *OutputConfig { + if m != nil { + return m.OutputConfig + } + return nil +} + +// Multiple async file annotation requests are batched into a single service +// call. +type AsyncBatchAnnotateFilesRequest struct { + // Individual async file annotation requests for this batch. + Requests []*AsyncAnnotateFileRequest `protobuf:"bytes,1,rep,name=requests" json:"requests,omitempty"` +} + +func (m *AsyncBatchAnnotateFilesRequest) Reset() { *m = AsyncBatchAnnotateFilesRequest{} } +func (m *AsyncBatchAnnotateFilesRequest) String() string { return proto.CompactTextString(m) } +func (*AsyncBatchAnnotateFilesRequest) ProtoMessage() {} +func (*AsyncBatchAnnotateFilesRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{24} } + +func (m *AsyncBatchAnnotateFilesRequest) GetRequests() []*AsyncAnnotateFileRequest { + if m != nil { + return m.Requests + } + return nil +} + +// Response to an async batch file annotation request. +type AsyncBatchAnnotateFilesResponse struct { + // The list of file annotation responses, one for each request in + // AsyncBatchAnnotateFilesRequest. + Responses []*AsyncAnnotateFileResponse `protobuf:"bytes,1,rep,name=responses" json:"responses,omitempty"` +} + +func (m *AsyncBatchAnnotateFilesResponse) Reset() { *m = AsyncBatchAnnotateFilesResponse{} } +func (m *AsyncBatchAnnotateFilesResponse) String() string { return proto.CompactTextString(m) } +func (*AsyncBatchAnnotateFilesResponse) ProtoMessage() {} +func (*AsyncBatchAnnotateFilesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor1, []int{25} +} + +func (m *AsyncBatchAnnotateFilesResponse) GetResponses() []*AsyncAnnotateFileResponse { + if m != nil { + return m.Responses + } + return nil +} + +// The desired input location and metadata. +type InputConfig struct { + // The Google Cloud Storage location to read the input from. + GcsSource *GcsSource `protobuf:"bytes,1,opt,name=gcs_source,json=gcsSource" json:"gcs_source,omitempty"` + // The type of the file. Currently only "application/pdf" and "image/tiff" + // are supported. Wildcards are not supported. + MimeType string `protobuf:"bytes,2,opt,name=mime_type,json=mimeType" json:"mime_type,omitempty"` +} + +func (m *InputConfig) Reset() { *m = InputConfig{} } +func (m *InputConfig) String() string { return proto.CompactTextString(m) } +func (*InputConfig) ProtoMessage() {} +func (*InputConfig) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{26} } + +func (m *InputConfig) GetGcsSource() *GcsSource { + if m != nil { + return m.GcsSource + } + return nil +} + +func (m *InputConfig) GetMimeType() string { + if m != nil { + return m.MimeType + } + return "" +} + +// The desired output location and metadata. +type OutputConfig struct { + // The Google Cloud Storage location to write the output(s) to. + GcsDestination *GcsDestination `protobuf:"bytes,1,opt,name=gcs_destination,json=gcsDestination" json:"gcs_destination,omitempty"` + // The max number of response protos to put into each output JSON file on GCS. + // The valid range is [1, 100]. If not specified, the default value is 20. + // + // For example, for one pdf file with 100 pages, 100 response protos will + // be generated. If `batch_size` = 20, then 5 json files each + // containing 20 response protos will be written under the prefix + // `gcs_destination`.`uri`. + // + // Currently, batch_size only applies to GcsDestination, with potential future + // support for other output configurations. + BatchSize int32 `protobuf:"varint,2,opt,name=batch_size,json=batchSize" json:"batch_size,omitempty"` +} + +func (m *OutputConfig) Reset() { *m = OutputConfig{} } +func (m *OutputConfig) String() string { return proto.CompactTextString(m) } +func (*OutputConfig) ProtoMessage() {} +func (*OutputConfig) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{27} } + +func (m *OutputConfig) GetGcsDestination() *GcsDestination { + if m != nil { + return m.GcsDestination + } + return nil +} + +func (m *OutputConfig) GetBatchSize() int32 { + if m != nil { + return m.BatchSize + } + return 0 +} + +// The Google Cloud Storage location where the input will be read from. +type GcsSource struct { + // Google Cloud Storage URI for the input file. This must only be a GCS + // object. Wildcards are not currently supported. + Uri string `protobuf:"bytes,1,opt,name=uri" json:"uri,omitempty"` +} + +func (m *GcsSource) Reset() { *m = GcsSource{} } +func (m *GcsSource) String() string { return proto.CompactTextString(m) } +func (*GcsSource) ProtoMessage() {} +func (*GcsSource) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{28} } + +func (m *GcsSource) GetUri() string { + if m != nil { + return m.Uri + } + return "" +} + +// The Google Cloud Storage location where the output will be written to. +type GcsDestination struct { + // Google Cloud Storage URI where the results will be stored. Results will + // be in JSON format and preceded by its corresponding input URI. This field + // can either represent a single file, or a prefix for multiple outputs. + // Prefixes must end in a `/`. + // + // Examples: + // + // * File: gs://bucket-name/filename.json + // * Prefix: gs://bucket-name/prefix/here/ + // * File: gs://bucket-name/prefix/here + // + // If multiple outputs, each response is still AnnotateFileResponse, each of + // which contains some subset of the full list of AnnotateImageResponse. + // Multiple outputs can happen if, for example, the output JSON is too large + // and overflows into multiple sharded files. + Uri string `protobuf:"bytes,1,opt,name=uri" json:"uri,omitempty"` +} + +func (m *GcsDestination) Reset() { *m = GcsDestination{} } +func (m *GcsDestination) String() string { return proto.CompactTextString(m) } +func (*GcsDestination) ProtoMessage() {} +func (*GcsDestination) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{29} } + +func (m *GcsDestination) GetUri() string { + if m != nil { + return m.Uri + } + return "" +} + +// Contains metadata for the BatchAnnotateImages operation. +type OperationMetadata struct { + // Current state of the batch operation. + State OperationMetadata_State `protobuf:"varint,1,opt,name=state,enum=google.cloud.vision.v1p2beta1.OperationMetadata_State" json:"state,omitempty"` + // The time when the batch request was received. + CreateTime *google_protobuf3.Timestamp `protobuf:"bytes,5,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // The time when the operation result was last updated. + UpdateTime *google_protobuf3.Timestamp `protobuf:"bytes,6,opt,name=update_time,json=updateTime" json:"update_time,omitempty"` +} + +func (m *OperationMetadata) Reset() { *m = OperationMetadata{} } +func (m *OperationMetadata) String() string { return proto.CompactTextString(m) } +func (*OperationMetadata) ProtoMessage() {} +func (*OperationMetadata) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{30} } + +func (m *OperationMetadata) GetState() OperationMetadata_State { + if m != nil { + return m.State + } + return OperationMetadata_STATE_UNSPECIFIED +} + +func (m *OperationMetadata) GetCreateTime() *google_protobuf3.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *OperationMetadata) GetUpdateTime() *google_protobuf3.Timestamp { + if m != nil { + return m.UpdateTime + } + return nil +} + +func init() { + proto.RegisterType((*Feature)(nil), "google.cloud.vision.v1p2beta1.Feature") + proto.RegisterType((*ImageSource)(nil), "google.cloud.vision.v1p2beta1.ImageSource") + proto.RegisterType((*Image)(nil), "google.cloud.vision.v1p2beta1.Image") + proto.RegisterType((*FaceAnnotation)(nil), "google.cloud.vision.v1p2beta1.FaceAnnotation") + proto.RegisterType((*FaceAnnotation_Landmark)(nil), "google.cloud.vision.v1p2beta1.FaceAnnotation.Landmark") + proto.RegisterType((*LocationInfo)(nil), "google.cloud.vision.v1p2beta1.LocationInfo") + proto.RegisterType((*Property)(nil), "google.cloud.vision.v1p2beta1.Property") + proto.RegisterType((*EntityAnnotation)(nil), "google.cloud.vision.v1p2beta1.EntityAnnotation") + proto.RegisterType((*SafeSearchAnnotation)(nil), "google.cloud.vision.v1p2beta1.SafeSearchAnnotation") + proto.RegisterType((*LatLongRect)(nil), "google.cloud.vision.v1p2beta1.LatLongRect") + proto.RegisterType((*ColorInfo)(nil), "google.cloud.vision.v1p2beta1.ColorInfo") + proto.RegisterType((*DominantColorsAnnotation)(nil), "google.cloud.vision.v1p2beta1.DominantColorsAnnotation") + proto.RegisterType((*ImageProperties)(nil), "google.cloud.vision.v1p2beta1.ImageProperties") + proto.RegisterType((*CropHint)(nil), "google.cloud.vision.v1p2beta1.CropHint") + proto.RegisterType((*CropHintsAnnotation)(nil), "google.cloud.vision.v1p2beta1.CropHintsAnnotation") + proto.RegisterType((*CropHintsParams)(nil), "google.cloud.vision.v1p2beta1.CropHintsParams") + proto.RegisterType((*WebDetectionParams)(nil), "google.cloud.vision.v1p2beta1.WebDetectionParams") + proto.RegisterType((*ImageContext)(nil), "google.cloud.vision.v1p2beta1.ImageContext") + proto.RegisterType((*AnnotateImageRequest)(nil), "google.cloud.vision.v1p2beta1.AnnotateImageRequest") + proto.RegisterType((*ImageAnnotationContext)(nil), "google.cloud.vision.v1p2beta1.ImageAnnotationContext") + proto.RegisterType((*AnnotateImageResponse)(nil), "google.cloud.vision.v1p2beta1.AnnotateImageResponse") + proto.RegisterType((*BatchAnnotateImagesRequest)(nil), "google.cloud.vision.v1p2beta1.BatchAnnotateImagesRequest") + proto.RegisterType((*BatchAnnotateImagesResponse)(nil), "google.cloud.vision.v1p2beta1.BatchAnnotateImagesResponse") + proto.RegisterType((*AsyncAnnotateFileRequest)(nil), "google.cloud.vision.v1p2beta1.AsyncAnnotateFileRequest") + proto.RegisterType((*AsyncAnnotateFileResponse)(nil), "google.cloud.vision.v1p2beta1.AsyncAnnotateFileResponse") + proto.RegisterType((*AsyncBatchAnnotateFilesRequest)(nil), "google.cloud.vision.v1p2beta1.AsyncBatchAnnotateFilesRequest") + proto.RegisterType((*AsyncBatchAnnotateFilesResponse)(nil), "google.cloud.vision.v1p2beta1.AsyncBatchAnnotateFilesResponse") + proto.RegisterType((*InputConfig)(nil), "google.cloud.vision.v1p2beta1.InputConfig") + proto.RegisterType((*OutputConfig)(nil), "google.cloud.vision.v1p2beta1.OutputConfig") + proto.RegisterType((*GcsSource)(nil), "google.cloud.vision.v1p2beta1.GcsSource") + proto.RegisterType((*GcsDestination)(nil), "google.cloud.vision.v1p2beta1.GcsDestination") + proto.RegisterType((*OperationMetadata)(nil), "google.cloud.vision.v1p2beta1.OperationMetadata") + proto.RegisterEnum("google.cloud.vision.v1p2beta1.Likelihood", Likelihood_name, Likelihood_value) + proto.RegisterEnum("google.cloud.vision.v1p2beta1.Feature_Type", Feature_Type_name, Feature_Type_value) + proto.RegisterEnum("google.cloud.vision.v1p2beta1.FaceAnnotation_Landmark_Type", FaceAnnotation_Landmark_Type_name, FaceAnnotation_Landmark_Type_value) + proto.RegisterEnum("google.cloud.vision.v1p2beta1.OperationMetadata_State", OperationMetadata_State_name, OperationMetadata_State_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for ImageAnnotator service + +type ImageAnnotatorClient interface { + // Run image detection and annotation for a batch of images. + BatchAnnotateImages(ctx context.Context, in *BatchAnnotateImagesRequest, opts ...grpc.CallOption) (*BatchAnnotateImagesResponse, error) + // Run async image detection and annotation for a list of generic files (e.g. + // PDF) which may contain multiple pages and multiple images per page. + // Progress and results can be retrieved through the + // `google.longrunning.Operations` interface. + // `Operation.metadata` contains `OperationMetadata` (metadata). + // `Operation.response` contains `AsyncBatchAnnotateFilesResponse` (results). + AsyncBatchAnnotateFiles(ctx context.Context, in *AsyncBatchAnnotateFilesRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) +} + +type imageAnnotatorClient struct { + cc *grpc.ClientConn +} + +func NewImageAnnotatorClient(cc *grpc.ClientConn) ImageAnnotatorClient { + return &imageAnnotatorClient{cc} +} + +func (c *imageAnnotatorClient) BatchAnnotateImages(ctx context.Context, in *BatchAnnotateImagesRequest, opts ...grpc.CallOption) (*BatchAnnotateImagesResponse, error) { + out := new(BatchAnnotateImagesResponse) + err := grpc.Invoke(ctx, "/google.cloud.vision.v1p2beta1.ImageAnnotator/BatchAnnotateImages", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *imageAnnotatorClient) AsyncBatchAnnotateFiles(ctx context.Context, in *AsyncBatchAnnotateFilesRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.cloud.vision.v1p2beta1.ImageAnnotator/AsyncBatchAnnotateFiles", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for ImageAnnotator service + +type ImageAnnotatorServer interface { + // Run image detection and annotation for a batch of images. + BatchAnnotateImages(context.Context, *BatchAnnotateImagesRequest) (*BatchAnnotateImagesResponse, error) + // Run async image detection and annotation for a list of generic files (e.g. + // PDF) which may contain multiple pages and multiple images per page. + // Progress and results can be retrieved through the + // `google.longrunning.Operations` interface. + // `Operation.metadata` contains `OperationMetadata` (metadata). + // `Operation.response` contains `AsyncBatchAnnotateFilesResponse` (results). + AsyncBatchAnnotateFiles(context.Context, *AsyncBatchAnnotateFilesRequest) (*google_longrunning.Operation, error) +} + +func RegisterImageAnnotatorServer(s *grpc.Server, srv ImageAnnotatorServer) { + s.RegisterService(&_ImageAnnotator_serviceDesc, srv) +} + +func _ImageAnnotator_BatchAnnotateImages_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BatchAnnotateImagesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ImageAnnotatorServer).BatchAnnotateImages(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.vision.v1p2beta1.ImageAnnotator/BatchAnnotateImages", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ImageAnnotatorServer).BatchAnnotateImages(ctx, req.(*BatchAnnotateImagesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ImageAnnotator_AsyncBatchAnnotateFiles_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AsyncBatchAnnotateFilesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ImageAnnotatorServer).AsyncBatchAnnotateFiles(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.vision.v1p2beta1.ImageAnnotator/AsyncBatchAnnotateFiles", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ImageAnnotatorServer).AsyncBatchAnnotateFiles(ctx, req.(*AsyncBatchAnnotateFilesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _ImageAnnotator_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.cloud.vision.v1p2beta1.ImageAnnotator", + HandlerType: (*ImageAnnotatorServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "BatchAnnotateImages", + Handler: _ImageAnnotator_BatchAnnotateImages_Handler, + }, + { + MethodName: "AsyncBatchAnnotateFiles", + Handler: _ImageAnnotator_AsyncBatchAnnotateFiles_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/cloud/vision/v1p2beta1/image_annotator.proto", +} + +func init() { + proto.RegisterFile("google/cloud/vision/v1p2beta1/image_annotator.proto", fileDescriptor1) +} + +var fileDescriptor1 = []byte{ + // 2880 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0xcf, 0x73, 0xdb, 0xc6, + 0xf5, 0x0f, 0xa9, 0x5f, 0xe4, 0x23, 0x25, 0x41, 0xab, 0x1f, 0xa6, 0x65, 0x2b, 0x56, 0x90, 0x6f, + 0xbe, 0x5f, 0x7d, 0xdd, 0x94, 0x1a, 0xcb, 0x49, 0xda, 0x3a, 0xcd, 0xa4, 0x14, 0x09, 0x49, 0x1c, + 0x53, 0x24, 0xbb, 0x84, 0xec, 0xd8, 0x93, 0x0e, 0x0a, 0x81, 0x4b, 0x1a, 0x09, 0x08, 0x20, 0x00, + 0x68, 0x8b, 0x39, 0x66, 0xa6, 0x7f, 0x41, 0x6f, 0xbd, 0x77, 0x7a, 0x6a, 0x2f, 0xed, 0xdf, 0xd0, + 0x7b, 0xa7, 0x87, 0x5e, 0x7a, 0x6b, 0x0f, 0x3d, 0xf6, 0xd4, 0xe9, 0xf4, 0xd4, 0xd9, 0x1f, 0x00, + 0x17, 0x94, 0x64, 0x8a, 0xce, 0x74, 0xa6, 0x27, 0x62, 0xdf, 0xdb, 0xcf, 0xe7, 0x2d, 0xde, 0xbe, + 0x7d, 0xfb, 0x76, 0x41, 0x78, 0xd8, 0xf7, 0xbc, 0xbe, 0x43, 0xf6, 0x2d, 0xc7, 0x1b, 0x76, 0xf7, + 0x5f, 0xda, 0xa1, 0xed, 0xb9, 0xfb, 0x2f, 0x1f, 0xf8, 0x07, 0xe7, 0x24, 0x32, 0x1f, 0xec, 0xdb, + 0x03, 0xb3, 0x4f, 0x0c, 0xd3, 0x75, 0xbd, 0xc8, 0x8c, 0xbc, 0xa0, 0xec, 0x07, 0x5e, 0xe4, 0xa1, + 0x1d, 0x0e, 0x2a, 0x33, 0x50, 0x99, 0x83, 0xca, 0x09, 0x68, 0xfb, 0xae, 0xe0, 0x34, 0x7d, 0x7b, + 0x5f, 0x40, 0x6d, 0xcf, 0x0d, 0x39, 0x78, 0xfb, 0xfd, 0xd7, 0x5b, 0xec, 0x13, 0x6f, 0x40, 0xa2, + 0x60, 0x24, 0x7a, 0x4f, 0x19, 0x5f, 0x44, 0x2e, 0x22, 0x63, 0x6c, 0x43, 0x80, 0x1e, 0xbc, 0x1e, + 0xf4, 0x8a, 0x9c, 0x1b, 0x5d, 0x12, 0x11, 0x4b, 0x82, 0xbc, 0x2b, 0x20, 0x8e, 0xe7, 0xf6, 0x83, + 0xa1, 0xeb, 0xda, 0x6e, 0x7f, 0xdf, 0xf3, 0x49, 0x90, 0x1a, 0xfa, 0x3d, 0xd1, 0x89, 0xb5, 0xce, + 0x87, 0xbd, 0xfd, 0xc8, 0x1e, 0x90, 0x30, 0x32, 0x07, 0xbe, 0xe8, 0x70, 0x4b, 0x74, 0x08, 0x7c, + 0x6b, 0x3f, 0x8c, 0xcc, 0x68, 0x18, 0x4e, 0x28, 0xa2, 0x91, 0x4f, 0xf6, 0x2d, 0xcf, 0x89, 0x5d, + 0xb9, 0x5d, 0x92, 0x15, 0x8e, 0x19, 0x39, 0x6e, 0x9f, 0x6b, 0xd4, 0x7f, 0x65, 0x61, 0xe9, 0x88, + 0x98, 0xd1, 0x30, 0x20, 0xe8, 0x53, 0x98, 0xa7, 0x1d, 0x4a, 0x99, 0xdd, 0xcc, 0xde, 0xca, 0xc1, + 0x77, 0xca, 0xaf, 0xf5, 0x7f, 0x59, 0xa0, 0xca, 0xfa, 0xc8, 0x27, 0x98, 0x01, 0xd1, 0x3d, 0x28, + 0x0c, 0xcc, 0x0b, 0x23, 0x20, 0xe1, 0xd0, 0x89, 0xc2, 0x52, 0x76, 0x37, 0xb3, 0xb7, 0x80, 0x61, + 0x60, 0x5e, 0x60, 0x2e, 0x41, 0x1b, 0xb0, 0x30, 0xf0, 0xba, 0xc4, 0x29, 0xcd, 0xed, 0x66, 0xf6, + 0xf2, 0x98, 0x37, 0xd4, 0x7f, 0x64, 0x60, 0x9e, 0xb2, 0xa0, 0x0d, 0x50, 0xf4, 0x67, 0x6d, 0xcd, + 0x38, 0x6b, 0x76, 0xda, 0x5a, 0xb5, 0x7e, 0x54, 0xd7, 0x6a, 0xca, 0x5b, 0x08, 0xc1, 0xca, 0x51, + 0xa5, 0xaa, 0x19, 0x35, 0x4d, 0xd7, 0xaa, 0x7a, 0xbd, 0xd5, 0x54, 0x32, 0x68, 0x0b, 0x50, 0xa3, + 0xd2, 0xac, 0x9d, 0x56, 0xf0, 0x63, 0x49, 0x9e, 0xa5, 0x7d, 0x1b, 0xad, 0xe3, 0x96, 0x24, 0x9b, + 0x43, 0xeb, 0xb0, 0xda, 0xa8, 0x1c, 0x6a, 0x0d, 0x49, 0x38, 0x4f, 0x3b, 0xea, 0xda, 0x67, 0xba, + 0x24, 0x5b, 0x40, 0x77, 0xe0, 0x56, 0xad, 0x55, 0x3d, 0x3b, 0xd5, 0x9a, 0xba, 0x31, 0xa1, 0x2c, + 0xa0, 0xdb, 0xb0, 0xd9, 0xa9, 0x1c, 0x69, 0x46, 0x47, 0xab, 0xe0, 0xea, 0x89, 0xa4, 0x5a, 0xa4, + 0xc3, 0xae, 0x9f, 0x56, 0x8e, 0x35, 0xa3, 0x8d, 0x5b, 0x6d, 0x0d, 0xeb, 0x75, 0xad, 0xa3, 0x2c, + 0xa1, 0x15, 0x80, 0x2a, 0x6e, 0xb5, 0x8d, 0x93, 0x7a, 0x53, 0xef, 0x28, 0x79, 0xb4, 0x06, 0xcb, + 0x4f, 0xb5, 0x43, 0x09, 0x08, 0x6a, 0x13, 0x0a, 0x75, 0x1a, 0xfa, 0x1d, 0x6f, 0x18, 0x58, 0x04, + 0xa9, 0xb0, 0xdc, 0xb7, 0x42, 0x83, 0xaf, 0x86, 0x61, 0x60, 0xb3, 0x89, 0xc8, 0xe3, 0x42, 0xdf, + 0x0a, 0x59, 0xb7, 0xb3, 0xc0, 0x46, 0x77, 0x20, 0x3f, 0xd6, 0x67, 0x99, 0x3e, 0x67, 0x0b, 0xa5, + 0x4a, 0x60, 0x81, 0x75, 0x44, 0x25, 0x58, 0xb2, 0x3c, 0x37, 0x22, 0x6e, 0xc4, 0x38, 0x8a, 0x38, + 0x6e, 0xa2, 0x43, 0x58, 0x0c, 0x99, 0x35, 0x06, 0x2e, 0x1c, 0xdc, 0x9f, 0x32, 0xcb, 0xd2, 0xf8, + 0xb0, 0x40, 0xaa, 0xbf, 0x54, 0x60, 0xe5, 0xc8, 0xb4, 0x48, 0x25, 0x59, 0x11, 0xa8, 0x0d, 0xcb, + 0xe7, 0xde, 0xd0, 0xed, 0xda, 0x6e, 0xdf, 0xf0, 0x3d, 0x67, 0xc4, 0xcc, 0x16, 0xa6, 0xc6, 0xd0, + 0xa1, 0xc0, 0xb4, 0x3d, 0x67, 0x84, 0x8b, 0xe7, 0x52, 0x0b, 0x9d, 0x81, 0xd2, 0xeb, 0x1a, 0x69, + 0xd2, 0xec, 0xec, 0xa4, 0x2b, 0xbd, 0xae, 0xdc, 0x46, 0x3a, 0xe4, 0x1d, 0xd3, 0xed, 0x0e, 0xcc, + 0xe0, 0xcb, 0xb0, 0x34, 0xb7, 0x3b, 0xb7, 0x57, 0x38, 0xf8, 0x68, 0x5a, 0xa0, 0xa7, 0x5e, 0xb5, + 0xdc, 0x10, 0x70, 0x3c, 0x26, 0x42, 0x3b, 0x00, 0x81, 0xe7, 0x38, 0x86, 0xe9, 0xf6, 0x1d, 0x52, + 0x9a, 0xdf, 0xcd, 0xec, 0x65, 0x71, 0x9e, 0x4a, 0x2a, 0x54, 0x40, 0x27, 0xcd, 0x37, 0x5d, 0xa1, + 0x5d, 0x60, 0xda, 0x9c, 0x6f, 0xba, 0x5c, 0xb9, 0x03, 0x10, 0xd9, 0x4e, 0x24, 0xb4, 0x8b, 0x1c, + 0x4b, 0x25, 0x5c, 0xfd, 0x00, 0x36, 0x92, 0x2c, 0x62, 0x58, 0x9e, 0xdb, 0xb3, 0xbb, 0xc4, 0xb5, + 0x48, 0x69, 0x89, 0x75, 0x5c, 0x4f, 0x74, 0xd5, 0x44, 0x85, 0x3e, 0x84, 0xad, 0x78, 0x68, 0xd4, + 0x75, 0x12, 0x28, 0xc7, 0x40, 0x9b, 0x92, 0x56, 0x82, 0xb5, 0x61, 0xe5, 0x0b, 0x6f, 0x64, 0x38, + 0xf6, 0x97, 0xc4, 0xb1, 0x5f, 0x78, 0x5e, 0xb7, 0x94, 0x67, 0x89, 0xe0, 0xff, 0xa7, 0xf8, 0xa7, + 0x91, 0x00, 0xf0, 0xf2, 0x17, 0xde, 0x68, 0xdc, 0x44, 0x4f, 0x60, 0x2d, 0xf4, 0x82, 0xc0, 0x7b, + 0x25, 0x93, 0xc2, 0xac, 0xa4, 0x0a, 0xe7, 0x90, 0x78, 0x75, 0x50, 0x4c, 0xb7, 0x4f, 0x02, 0x99, + 0xb6, 0x30, 0x2b, 0xed, 0x2a, 0xa3, 0x90, 0x58, 0x9f, 0xc3, 0x7a, 0x38, 0x0c, 0xfc, 0xc0, 0x0e, + 0x89, 0x4c, 0x5c, 0x9c, 0x95, 0x18, 0xc5, 0x2c, 0x12, 0xb7, 0x05, 0xa5, 0xa1, 0xdb, 0x25, 0x81, + 0x41, 0x2e, 0x7c, 0x2f, 0x24, 0x5d, 0xd9, 0xc0, 0xf2, 0xac, 0x06, 0xb6, 0x18, 0x95, 0xc6, 0x99, + 0x24, 0x23, 0x9f, 0x01, 0x3a, 0x77, 0x86, 0x41, 0x90, 0xa6, 0x5f, 0x99, 0x95, 0x7e, 0x4d, 0x90, + 0xa4, 0x5d, 0xf3, 0x82, 0x98, 0xdd, 0x57, 0xc4, 0x4c, 0xf9, 0x7c, 0x75, 0x66, 0xd7, 0xc4, 0x2c, + 0x63, 0xd9, 0xf6, 0x9f, 0x96, 0x20, 0x17, 0xaf, 0x29, 0xd4, 0x12, 0x5b, 0xd0, 0x1c, 0x63, 0xfe, + 0xf8, 0xcd, 0x56, 0xa6, 0xbc, 0x25, 0x55, 0x21, 0xe7, 0x7b, 0xa1, 0x4d, 0xf5, 0x6c, 0x5d, 0x16, + 0x0e, 0xfe, 0x6f, 0x0a, 0x69, 0x5b, 0x74, 0xc7, 0x09, 0x50, 0xfd, 0xdd, 0xe2, 0x78, 0x83, 0x3a, + 0x6b, 0x3e, 0x6e, 0xb6, 0x9e, 0x36, 0x8d, 0x78, 0xfb, 0x51, 0xde, 0x42, 0x45, 0xc8, 0x35, 0xb4, + 0x23, 0xdd, 0xd0, 0x9e, 0x69, 0x4a, 0x06, 0x2d, 0x43, 0x1e, 0xd7, 0x8f, 0x4f, 0x78, 0x33, 0x8b, + 0x4a, 0xb0, 0xc1, 0x94, 0xad, 0x23, 0x23, 0xee, 0x74, 0x88, 0x5b, 0x4f, 0x95, 0x39, 0xba, 0xa3, + 0xf0, 0x8e, 0x93, 0xaa, 0x79, 0xaa, 0x8a, 0x41, 0x09, 0x17, 0x53, 0x2d, 0xa0, 0x6d, 0xd8, 0x4a, + 0x50, 0x69, 0xdd, 0x22, 0x85, 0x9d, 0xd6, 0x6b, 0xed, 0x56, 0xbd, 0xa9, 0x1b, 0x87, 0x9a, 0xfe, + 0x54, 0xd3, 0x9a, 0x54, 0x4b, 0x77, 0xa3, 0x22, 0xe4, 0x9a, 0xad, 0x8e, 0x66, 0xe8, 0xf5, 0xb6, + 0x92, 0xa3, 0x63, 0x3c, 0x6b, 0xb7, 0x35, 0x6c, 0x34, 0xea, 0x6d, 0x25, 0x4f, 0x9b, 0x8d, 0xd6, + 0x53, 0xd1, 0x04, 0xba, 0x73, 0x9d, 0xb6, 0xce, 0xf4, 0x13, 0x36, 0x2a, 0xa5, 0x80, 0x56, 0xa1, + 0xc0, 0xdb, 0xcc, 0x9e, 0x52, 0x44, 0x0a, 0x14, 0xb9, 0xa0, 0xaa, 0x35, 0x75, 0x0d, 0x2b, 0xcb, + 0x68, 0x13, 0xd6, 0x18, 0xfd, 0x61, 0x4b, 0xd7, 0x5b, 0xa7, 0xa2, 0xe3, 0x0a, 0xf5, 0x97, 0x2c, + 0x66, 0x7c, 0xab, 0x74, 0xf3, 0x96, 0xa5, 0x82, 0x44, 0x49, 0xde, 0x5a, 0x7b, 0xa6, 0x19, 0x7a, + 0xab, 0x6d, 0x1c, 0xb6, 0xce, 0x9a, 0xb5, 0x0a, 0x7e, 0xa6, 0xac, 0xa5, 0x54, 0xfc, 0xad, 0xab, + 0x2d, 0xdc, 0xd4, 0xb0, 0x82, 0xd0, 0x5d, 0x28, 0x25, 0x2a, 0xc1, 0x98, 0x00, 0xd7, 0x13, 0xf7, + 0x53, 0x2d, 0x7b, 0x10, 0xb8, 0x8d, 0xb1, 0x23, 0x2f, 0x99, 0xdb, 0x4c, 0xeb, 0x52, 0xf6, 0xb6, + 0xd0, 0x0e, 0xdc, 0x1e, 0xeb, 0x26, 0x0d, 0xde, 0x1a, 0xcf, 0xea, 0xa4, 0xc5, 0x12, 0xba, 0x07, + 0x77, 0xe4, 0x79, 0x36, 0xf8, 0x14, 0xc4, 0x33, 0xa6, 0xdc, 0x46, 0xbb, 0x70, 0x37, 0x35, 0xa5, + 0x93, 0x3d, 0xb6, 0xa9, 0x43, 0x39, 0x45, 0x05, 0x1b, 0x3a, 0xae, 0x1c, 0xd3, 0x3a, 0xe2, 0x0e, + 0xf5, 0xbe, 0xc0, 0x49, 0xe2, 0xbb, 0xac, 0x18, 0x8a, 0xdf, 0xbd, 0x7d, 0xd6, 0xae, 0x37, 0x94, + 0x1d, 0x5a, 0x0c, 0x8d, 0x87, 0xc7, 0x85, 0x6f, 0x53, 0xfc, 0x51, 0x0b, 0x6b, 0x27, 0x5a, 0xa5, + 0x66, 0x1c, 0xb3, 0x5a, 0xa9, 0x51, 0x51, 0xee, 0xd1, 0x8a, 0xa5, 0x7a, 0x52, 0x6f, 0x1a, 0xc7, + 0xcd, 0x8a, 0x7e, 0x42, 0x29, 0x77, 0xa9, 0x7d, 0x26, 0x62, 0xbc, 0xc7, 0xad, 0x26, 0x95, 0xbe, + 0x43, 0xf1, 0x4c, 0xca, 0x99, 0x85, 0x58, 0x55, 0x7f, 0x08, 0xc5, 0x86, 0x67, 0xb1, 0xb5, 0x59, + 0x77, 0x7b, 0x1e, 0x7a, 0x1f, 0x96, 0x1c, 0x33, 0x32, 0x1c, 0xb7, 0x2f, 0xca, 0x83, 0xf5, 0x78, + 0x29, 0xd2, 0xa5, 0x5a, 0x6e, 0x98, 0x51, 0xc3, 0xed, 0xe3, 0x45, 0x87, 0xfd, 0xaa, 0x4f, 0x21, + 0xd7, 0x0e, 0x68, 0x71, 0x1c, 0x8d, 0x10, 0x82, 0x79, 0xd7, 0x1c, 0x10, 0x51, 0x10, 0xb1, 0x67, + 0x5a, 0x4b, 0xbe, 0x34, 0x9d, 0x21, 0x11, 0x55, 0x10, 0x6f, 0xa0, 0x77, 0xa0, 0x38, 0xb4, 0xdd, + 0xe8, 0xa3, 0x0f, 0x0c, 0xae, 0xa4, 0x89, 0x64, 0x1e, 0x17, 0xb8, 0xec, 0x09, 0x15, 0xa9, 0xbf, + 0x98, 0x03, 0x45, 0x73, 0x23, 0x3b, 0x1a, 0x49, 0x05, 0x8c, 0x02, 0x73, 0x03, 0xbb, 0x2b, 0x0c, + 0xd0, 0x47, 0xb4, 0x05, 0x8b, 0x8e, 0x67, 0x99, 0x4e, 0x6c, 0x40, 0xb4, 0xd0, 0x2e, 0x14, 0xba, + 0x24, 0xb4, 0x02, 0xdb, 0x67, 0x49, 0x85, 0x57, 0xb2, 0xb2, 0x88, 0x8e, 0x2c, 0xb4, 0xbc, 0x20, + 0x2e, 0x04, 0x78, 0x03, 0xbd, 0x0d, 0x20, 0xed, 0xc4, 0xbc, 0x0a, 0x90, 0x24, 0x54, 0x1f, 0x79, + 0xbe, 0x6d, 0x99, 0x8e, 0x1d, 0x8d, 0x44, 0x1d, 0x20, 0x49, 0x2e, 0x97, 0x58, 0x4b, 0xdf, 0xb6, + 0xc4, 0xaa, 0x43, 0xde, 0x11, 0xf3, 0x13, 0x96, 0x72, 0xac, 0x16, 0x9a, 0xc6, 0x26, 0xcf, 0x27, + 0x1e, 0xa3, 0xd1, 0x31, 0x80, 0xcf, 0x27, 0xcb, 0x26, 0x61, 0x29, 0xcf, 0xb8, 0xa6, 0x26, 0x5a, + 0x31, 0xbb, 0x58, 0x82, 0xaa, 0x7f, 0xc9, 0xc2, 0x46, 0xc7, 0xec, 0x91, 0x0e, 0x31, 0x03, 0xeb, + 0x85, 0x34, 0x41, 0x9f, 0xc2, 0x82, 0xd9, 0x1d, 0x3a, 0x91, 0x38, 0x9d, 0xcc, 0xb0, 0xe9, 0x70, + 0x1c, 0x25, 0x08, 0x7d, 0xcf, 0xeb, 0xb1, 0xe9, 0x9c, 0x8d, 0x80, 0xe1, 0x50, 0x15, 0x96, 0x06, + 0xa4, 0x4b, 0xa7, 0x43, 0x6c, 0x4f, 0x33, 0x50, 0xc4, 0x48, 0xa4, 0x41, 0xee, 0xa5, 0xed, 0x39, + 0x2c, 0x06, 0xe6, 0x67, 0x65, 0x49, 0xa0, 0xe8, 0x13, 0x98, 0x0f, 0x4c, 0x6b, 0x34, 0x7b, 0x85, + 0xc6, 0x60, 0xea, 0x2b, 0x28, 0xd0, 0xd5, 0xe6, 0xb9, 0x7d, 0x4c, 0xac, 0x08, 0x3d, 0x84, 0xc2, + 0xc0, 0x76, 0x8d, 0x1b, 0x2c, 0xce, 0xfc, 0xc0, 0x76, 0xf9, 0x23, 0x03, 0x99, 0x17, 0x09, 0x28, + 0xfb, 0x3a, 0x90, 0x79, 0xc1, 0x1f, 0xd5, 0x00, 0xf2, 0x55, 0x7a, 0x2e, 0x65, 0xf9, 0x60, 0x0f, + 0x16, 0xd8, 0x21, 0x55, 0x18, 0x44, 0x29, 0x2c, 0xeb, 0x86, 0x79, 0x87, 0xf1, 0x8a, 0xca, 0xca, + 0x2b, 0xea, 0x3d, 0x58, 0xf1, 0xed, 0x0b, 0xe2, 0x18, 0xbd, 0xc0, 0xb4, 0x92, 0xc5, 0x98, 0xc5, + 0xcb, 0x4c, 0x7a, 0x24, 0x84, 0xea, 0xe7, 0x50, 0xaa, 0x79, 0x03, 0xdb, 0x35, 0xdd, 0x88, 0x91, + 0x86, 0x52, 0x54, 0xfd, 0x08, 0x16, 0x99, 0x85, 0xb0, 0x94, 0x61, 0x31, 0xbb, 0x37, 0xc5, 0x93, + 0xc9, 0xe0, 0xb1, 0xc0, 0xa9, 0x21, 0xac, 0xb2, 0x33, 0x52, 0x3b, 0x89, 0x61, 0xf4, 0x53, 0x58, + 0xed, 0x0a, 0x83, 0x46, 0xc2, 0x4e, 0xdf, 0xf0, 0x7b, 0x53, 0xd8, 0xaf, 0x1b, 0x26, 0x5e, 0xe9, + 0xa6, 0x34, 0xea, 0xaf, 0x33, 0x90, 0xab, 0x06, 0x9e, 0x7f, 0x62, 0xbb, 0xd1, 0x7f, 0xe0, 0xec, + 0x95, 0x4e, 0x55, 0xd9, 0x4b, 0xa9, 0x6a, 0x1f, 0xd6, 0xed, 0x81, 0xef, 0x05, 0x91, 0xe9, 0x5a, + 0x64, 0xd2, 0xfb, 0x68, 0xac, 0x4a, 0xa6, 0xe0, 0x27, 0xb0, 0x1e, 0x0f, 0x57, 0xf6, 0xfe, 0x11, + 0x80, 0x15, 0x78, 0xbe, 0xf1, 0x82, 0xca, 0xc5, 0x0c, 0x4c, 0xcb, 0x1a, 0x31, 0x0f, 0xce, 0x5b, + 0x31, 0xa3, 0xfa, 0x11, 0xac, 0x26, 0xf4, 0x6d, 0x33, 0x30, 0x07, 0x21, 0x7a, 0x17, 0x96, 0xcd, + 0xd0, 0x27, 0x56, 0x64, 0xb0, 0xcb, 0x15, 0xce, 0x9e, 0xc5, 0x45, 0x2e, 0xc4, 0x4c, 0xa6, 0xd6, + 0x00, 0x3d, 0x25, 0xe7, 0xb5, 0xf8, 0x08, 0x25, 0xa0, 0x65, 0x58, 0xb7, 0x5d, 0xcb, 0x19, 0x76, + 0x89, 0xd1, 0x27, 0x5e, 0xea, 0x36, 0x23, 0x87, 0xd7, 0x84, 0xea, 0x98, 0x78, 0xe2, 0x52, 0x43, + 0xfd, 0x7d, 0x16, 0x8a, 0x2c, 0x04, 0xaa, 0xf4, 0x8c, 0x7d, 0x11, 0xa1, 0x26, 0x2c, 0xb3, 0x55, + 0xe1, 0xb9, 0x7d, 0x23, 0x20, 0x56, 0x24, 0x26, 0x64, 0xda, 0x51, 0x5b, 0x5a, 0x91, 0xb8, 0xe0, + 0x48, 0xcb, 0xf3, 0x3d, 0x58, 0x71, 0x4c, 0xb7, 0x3f, 0xa4, 0xc7, 0x7e, 0xee, 0xaa, 0xec, 0xee, + 0xdc, 0x5e, 0x1e, 0x2f, 0xc7, 0x52, 0xf6, 0xe2, 0xe8, 0x39, 0xac, 0x8d, 0xbd, 0x69, 0xf8, 0xec, + 0x65, 0x44, 0xcd, 0x5b, 0xbe, 0xa1, 0x53, 0x85, 0xf7, 0xf0, 0xaa, 0x35, 0xe1, 0x4e, 0x0b, 0x36, + 0x52, 0xf7, 0x59, 0x31, 0xfd, 0x22, 0xa3, 0x7f, 0x30, 0x85, 0xfe, 0xb2, 0x93, 0x31, 0x7a, 0x75, + 0x49, 0xa6, 0xfe, 0x2d, 0x03, 0x1b, 0x22, 0x3a, 0x08, 0x73, 0x28, 0x26, 0x5f, 0x0d, 0x49, 0x18, + 0xa1, 0x47, 0xb0, 0xc0, 0xee, 0x38, 0x84, 0x23, 0xff, 0xe7, 0x26, 0x77, 0x16, 0x98, 0x43, 0xd0, + 0x21, 0xe4, 0x7a, 0xfc, 0xa6, 0x8a, 0xbb, 0xad, 0x70, 0xf0, 0xbf, 0x37, 0xbb, 0xd8, 0xc2, 0x09, + 0x8e, 0xae, 0x30, 0x7e, 0xe9, 0x62, 0xf1, 0x19, 0x66, 0x91, 0x3e, 0x7d, 0x85, 0xc9, 0x41, 0x81, + 0x8b, 0xb6, 0xd4, 0x52, 0x1f, 0xc3, 0x16, 0xd3, 0x8e, 0x17, 0x43, 0x1c, 0x3c, 0x0a, 0xcc, 0x8d, + 0xaf, 0x7e, 0xe8, 0x23, 0xba, 0x07, 0x05, 0x9f, 0x1a, 0x77, 0x87, 0x83, 0x73, 0x12, 0xc4, 0xb7, + 0x6a, 0x54, 0xd4, 0x64, 0x12, 0xf5, 0xcf, 0x39, 0xd8, 0x9c, 0xf0, 0x5b, 0xe8, 0x7b, 0x6e, 0x48, + 0xd0, 0x67, 0xa0, 0xf4, 0x4c, 0x8b, 0x48, 0x77, 0x97, 0xf1, 0x32, 0xfb, 0xee, 0x4c, 0x47, 0x2b, + 0xbc, 0xda, 0x4b, 0xb5, 0x43, 0x74, 0x0e, 0x1b, 0xf1, 0x2d, 0x42, 0x8a, 0x9d, 0xbb, 0x78, 0x7f, + 0x0a, 0xfb, 0x64, 0xf9, 0x85, 0xd7, 0x63, 0x32, 0xd9, 0xc6, 0x73, 0x50, 0x1c, 0xaf, 0xef, 0xa5, + 0xf8, 0xe7, 0xde, 0x8c, 0x7f, 0x95, 0x12, 0xc9, 0xdc, 0x9f, 0xc3, 0x9a, 0x63, 0x9e, 0x13, 0x27, + 0x45, 0x3e, 0xff, 0x66, 0xe4, 0x0a, 0x63, 0x9a, 0x18, 0xf9, 0xc4, 0x9d, 0x71, 0x58, 0x5a, 0x78, + 0xc3, 0x91, 0x53, 0x22, 0x99, 0xdb, 0x80, 0x8d, 0xde, 0xd0, 0x71, 0x8c, 0x09, 0x03, 0xec, 0x9e, + 0x62, 0xfa, 0xbc, 0xea, 0x29, 0x36, 0x8c, 0x28, 0x55, 0x5a, 0x86, 0x6c, 0xd8, 0x0a, 0xcd, 0x1e, + 0x31, 0x42, 0x56, 0x82, 0xc9, 0x26, 0xf8, 0x6a, 0x7f, 0x38, 0xc5, 0xc4, 0x55, 0xe5, 0x1b, 0xde, + 0x08, 0xaf, 0x2a, 0xea, 0x5c, 0xb8, 0xc3, 0x17, 0xd6, 0xb8, 0x02, 0x94, 0xed, 0xe5, 0x6e, 0x94, + 0xbc, 0x26, 0xb6, 0x5f, 0x7c, 0xdb, 0x4e, 0x0b, 0x24, 0x7b, 0x3d, 0xd8, 0x94, 0x52, 0xa4, 0x64, + 0xa9, 0xc0, 0x2c, 0x1d, 0xdc, 0x34, 0x4d, 0xca, 0x91, 0x6b, 0x5d, 0xb1, 0xb1, 0xb5, 0x61, 0x39, + 0x95, 0x2e, 0xd9, 0x1d, 0xcf, 0xf4, 0x84, 0x21, 0xe7, 0x49, 0x5c, 0x94, 0x33, 0x24, 0xad, 0x95, + 0x48, 0x10, 0x78, 0x01, 0xab, 0xf8, 0xa4, 0x5a, 0x29, 0xf0, 0xad, 0x72, 0x87, 0x7d, 0x03, 0xc0, + 0xbc, 0x03, 0x6a, 0x89, 0xbb, 0xdf, 0x8b, 0xa8, 0xb4, 0xc9, 0xfa, 0x7e, 0x78, 0x13, 0xff, 0x5d, + 0x4a, 0x44, 0x38, 0x66, 0x51, 0x07, 0xb0, 0x7d, 0x68, 0x46, 0xc9, 0xbc, 0xf1, 0x14, 0x13, 0xc6, + 0xb9, 0xb9, 0x05, 0xb9, 0x80, 0x3f, 0xc6, 0xa9, 0x65, 0x5a, 0x7c, 0x5c, 0x95, 0xe2, 0x71, 0x42, + 0xa2, 0x7e, 0x05, 0x77, 0xae, 0x34, 0x27, 0x52, 0x1a, 0x86, 0x7c, 0x20, 0x9e, 0x63, 0x83, 0x1f, + 0xcc, 0x66, 0x90, 0x83, 0xf1, 0x98, 0x46, 0xfd, 0x43, 0x16, 0x4a, 0x95, 0x70, 0xe4, 0x5a, 0x71, + 0xcf, 0x23, 0xdb, 0x49, 0x36, 0x9f, 0x53, 0x28, 0xda, 0xae, 0x3f, 0x8c, 0xf8, 0x3d, 0x6a, 0xff, + 0x86, 0x9b, 0x79, 0x9d, 0x42, 0xd8, 0xe5, 0x6a, 0x1f, 0x17, 0xec, 0x71, 0xe3, 0xbf, 0x73, 0x3f, + 0xa2, 0x8c, 0xde, 0x30, 0x92, 0xde, 0x72, 0xfe, 0x46, 0x8c, 0x2d, 0x86, 0x11, 0xaf, 0x59, 0xf4, + 0xa4, 0x96, 0x3a, 0x80, 0xdb, 0x57, 0xb8, 0x54, 0x4c, 0xe2, 0x25, 0x73, 0x99, 0x6f, 0x6b, 0x6e, + 0x08, 0x6f, 0x33, 0x73, 0xa9, 0xd0, 0xa1, 0x36, 0x93, 0x40, 0xed, 0x5c, 0x0a, 0xd4, 0x69, 0xe5, + 0xf8, 0x75, 0x21, 0x21, 0x05, 0xeb, 0x08, 0xee, 0x5d, 0x6b, 0x56, 0xbc, 0xeb, 0x93, 0xcb, 0x01, + 0xfb, 0xfd, 0xd9, 0x0d, 0x5f, 0x0e, 0xda, 0x10, 0x0a, 0x52, 0x90, 0xd1, 0x13, 0x78, 0xdf, 0x0a, + 0x0d, 0xf1, 0x71, 0x87, 0xfb, 0x73, 0xda, 0x69, 0xe6, 0xd8, 0x0a, 0xc5, 0xa7, 0x9d, 0x7c, 0x3f, + 0x7e, 0x44, 0x77, 0x20, 0x3f, 0xb0, 0x07, 0xc4, 0x60, 0xf7, 0xb0, 0xe2, 0x0b, 0x13, 0x15, 0xe8, + 0x23, 0x9f, 0xa8, 0x3f, 0xcb, 0x40, 0x51, 0x9e, 0x05, 0xf4, 0x04, 0x56, 0xa9, 0xd9, 0x2e, 0x09, + 0x23, 0xdb, 0xe5, 0xb9, 0x34, 0x73, 0xa3, 0x8d, 0xe8, 0xd8, 0x0a, 0x6b, 0x63, 0x10, 0x5e, 0xe9, + 0xa7, 0xda, 0x68, 0x07, 0xe0, 0x9c, 0xfa, 0xd4, 0x08, 0xed, 0xaf, 0x89, 0xa8, 0x79, 0xf2, 0x4c, + 0xd2, 0xb1, 0xbf, 0x26, 0xea, 0x0e, 0xe4, 0x93, 0xc1, 0x5f, 0x2e, 0x99, 0x54, 0x15, 0x56, 0xd2, + 0xfc, 0x57, 0xf4, 0xf9, 0x4d, 0x16, 0xd6, 0x5a, 0xf1, 0xb7, 0xd7, 0x53, 0x12, 0x99, 0x5d, 0x33, + 0x32, 0x51, 0x03, 0x16, 0x42, 0xea, 0x75, 0x71, 0xcd, 0x30, 0xed, 0xdb, 0xd0, 0x25, 0x02, 0x96, + 0x8c, 0x09, 0xe6, 0x24, 0xe8, 0x63, 0x28, 0x58, 0x01, 0x31, 0x23, 0x62, 0x44, 0xf6, 0x80, 0x5f, + 0xfa, 0x14, 0x0e, 0xb6, 0x63, 0xce, 0xf8, 0x03, 0x6f, 0x59, 0x8f, 0x3f, 0xf0, 0x62, 0xe0, 0xdd, + 0xa9, 0x80, 0x82, 0x87, 0x7e, 0x37, 0x01, 0x2f, 0x4e, 0x07, 0xf3, 0xee, 0x54, 0xa0, 0xfe, 0x18, + 0x16, 0xd8, 0x48, 0xd0, 0x26, 0xac, 0x75, 0xf4, 0x8a, 0x3e, 0xf9, 0x51, 0xb5, 0x00, 0x4b, 0x55, + 0xac, 0x55, 0x74, 0xad, 0xa6, 0x64, 0x68, 0x03, 0x9f, 0x35, 0x9b, 0xf5, 0xe6, 0xb1, 0x92, 0x45, + 0x39, 0x98, 0xaf, 0xb5, 0x9a, 0x9a, 0x32, 0x87, 0x96, 0x21, 0x5f, 0xad, 0x34, 0xab, 0x5a, 0xa3, + 0xa1, 0xd5, 0x94, 0xf9, 0xfb, 0x04, 0x40, 0xfa, 0x24, 0x50, 0x80, 0x25, 0x71, 0x15, 0xae, 0xbc, + 0x85, 0xd6, 0x60, 0xf9, 0x89, 0x86, 0x9f, 0x19, 0x67, 0xcd, 0x46, 0xfd, 0xb1, 0xd6, 0x78, 0xa6, + 0x64, 0x50, 0x11, 0x72, 0x49, 0x2b, 0x4b, 0x5b, 0xed, 0x56, 0xa7, 0x53, 0x3f, 0x6c, 0x50, 0x62, + 0x80, 0x45, 0xa1, 0x99, 0x47, 0xab, 0x50, 0x60, 0x50, 0x21, 0x58, 0x38, 0xf8, 0x7b, 0x16, 0x56, + 0xe4, 0x2d, 0xc9, 0x0b, 0xd0, 0x6f, 0x33, 0xb0, 0x7e, 0xc5, 0x9e, 0x80, 0x7e, 0x30, 0xed, 0x88, + 0x7b, 0xed, 0xb6, 0xb5, 0xfd, 0xe8, 0x4d, 0xa0, 0x7c, 0xe9, 0xa9, 0xef, 0x7d, 0xf3, 0xc7, 0xbf, + 0xfe, 0x3c, 0x7b, 0x4f, 0xdd, 0x9e, 0xfc, 0x0b, 0x43, 0xf8, 0x48, 0x94, 0x14, 0xe4, 0x51, 0xe6, + 0x3e, 0xfa, 0x55, 0x06, 0x6e, 0x5d, 0x93, 0x1c, 0xd0, 0x27, 0x37, 0xc9, 0x00, 0xd7, 0xe6, 0xb2, + 0xed, 0x9d, 0x18, 0x2e, 0xfd, 0x91, 0x60, 0x1c, 0x8b, 0x6a, 0x99, 0x0d, 0x70, 0x4f, 0x7d, 0x57, + 0x1a, 0x60, 0x8f, 0xe2, 0x1f, 0x99, 0x97, 0x78, 0x1f, 0x65, 0xee, 0x1f, 0x7e, 0x93, 0x81, 0x77, + 0x2c, 0x6f, 0xf0, 0xfa, 0x31, 0x1d, 0xae, 0xa7, 0x67, 0xa5, 0x4d, 0x03, 0xb0, 0x9d, 0x79, 0x5e, + 0x15, 0xa8, 0xbe, 0x47, 0x8f, 0xa3, 0x65, 0x2f, 0xe8, 0xef, 0xf7, 0x89, 0xcb, 0xc2, 0x73, 0x9f, + 0xab, 0x4c, 0xdf, 0x0e, 0xaf, 0xf9, 0x97, 0xc4, 0xc7, 0x5c, 0xf0, 0xcf, 0x4c, 0xe6, 0x7c, 0x91, + 0x41, 0x1e, 0xfe, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x49, 0x4b, 0x80, 0x49, 0x2c, 0x22, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1p2beta1/text_annotation.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1p2beta1/text_annotation.pb.go new file mode 100644 index 0000000..bea7c74 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1p2beta1/text_annotation.pb.go @@ -0,0 +1,593 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/vision/v1p2beta1/text_annotation.proto + +package vision + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Enum to denote the type of break found. New line, space etc. +type TextAnnotation_DetectedBreak_BreakType int32 + +const ( + // Unknown break label type. + TextAnnotation_DetectedBreak_UNKNOWN TextAnnotation_DetectedBreak_BreakType = 0 + // Regular space. + TextAnnotation_DetectedBreak_SPACE TextAnnotation_DetectedBreak_BreakType = 1 + // Sure space (very wide). + TextAnnotation_DetectedBreak_SURE_SPACE TextAnnotation_DetectedBreak_BreakType = 2 + // Line-wrapping break. + TextAnnotation_DetectedBreak_EOL_SURE_SPACE TextAnnotation_DetectedBreak_BreakType = 3 + // End-line hyphen that is not present in text; does not co-occur with + // `SPACE`, `LEADER_SPACE`, or `LINE_BREAK`. + TextAnnotation_DetectedBreak_HYPHEN TextAnnotation_DetectedBreak_BreakType = 4 + // Line break that ends a paragraph. + TextAnnotation_DetectedBreak_LINE_BREAK TextAnnotation_DetectedBreak_BreakType = 5 +) + +var TextAnnotation_DetectedBreak_BreakType_name = map[int32]string{ + 0: "UNKNOWN", + 1: "SPACE", + 2: "SURE_SPACE", + 3: "EOL_SURE_SPACE", + 4: "HYPHEN", + 5: "LINE_BREAK", +} +var TextAnnotation_DetectedBreak_BreakType_value = map[string]int32{ + "UNKNOWN": 0, + "SPACE": 1, + "SURE_SPACE": 2, + "EOL_SURE_SPACE": 3, + "HYPHEN": 4, + "LINE_BREAK": 5, +} + +func (x TextAnnotation_DetectedBreak_BreakType) String() string { + return proto.EnumName(TextAnnotation_DetectedBreak_BreakType_name, int32(x)) +} +func (TextAnnotation_DetectedBreak_BreakType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor2, []int{0, 1, 0} +} + +// Type of a block (text, image etc) as identified by OCR. +type Block_BlockType int32 + +const ( + // Unknown block type. + Block_UNKNOWN Block_BlockType = 0 + // Regular text block. + Block_TEXT Block_BlockType = 1 + // Table block. + Block_TABLE Block_BlockType = 2 + // Image block. + Block_PICTURE Block_BlockType = 3 + // Horizontal/vertical line box. + Block_RULER Block_BlockType = 4 + // Barcode block. + Block_BARCODE Block_BlockType = 5 +) + +var Block_BlockType_name = map[int32]string{ + 0: "UNKNOWN", + 1: "TEXT", + 2: "TABLE", + 3: "PICTURE", + 4: "RULER", + 5: "BARCODE", +} +var Block_BlockType_value = map[string]int32{ + "UNKNOWN": 0, + "TEXT": 1, + "TABLE": 2, + "PICTURE": 3, + "RULER": 4, + "BARCODE": 5, +} + +func (x Block_BlockType) String() string { + return proto.EnumName(Block_BlockType_name, int32(x)) +} +func (Block_BlockType) EnumDescriptor() ([]byte, []int) { return fileDescriptor2, []int{2, 0} } + +// TextAnnotation contains a structured representation of OCR extracted text. +// The hierarchy of an OCR extracted text structure is like this: +// TextAnnotation -> Page -> Block -> Paragraph -> Word -> Symbol +// Each structural component, starting from Page, may further have their own +// properties. Properties describe detected languages, breaks etc.. Please refer +// to the [TextAnnotation.TextProperty][google.cloud.vision.v1p2beta1.TextAnnotation.TextProperty] message definition below for more +// detail. +type TextAnnotation struct { + // List of pages detected by OCR. + Pages []*Page `protobuf:"bytes,1,rep,name=pages" json:"pages,omitempty"` + // UTF-8 text detected on the pages. + Text string `protobuf:"bytes,2,opt,name=text" json:"text,omitempty"` +} + +func (m *TextAnnotation) Reset() { *m = TextAnnotation{} } +func (m *TextAnnotation) String() string { return proto.CompactTextString(m) } +func (*TextAnnotation) ProtoMessage() {} +func (*TextAnnotation) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } + +func (m *TextAnnotation) GetPages() []*Page { + if m != nil { + return m.Pages + } + return nil +} + +func (m *TextAnnotation) GetText() string { + if m != nil { + return m.Text + } + return "" +} + +// Detected language for a structural component. +type TextAnnotation_DetectedLanguage struct { + // The BCP-47 language code, such as "en-US" or "sr-Latn". For more + // information, see + // http://www.unicode.org/reports/tr35/#Unicode_locale_identifier. + LanguageCode string `protobuf:"bytes,1,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` + // Confidence of detected language. Range [0, 1]. + Confidence float32 `protobuf:"fixed32,2,opt,name=confidence" json:"confidence,omitempty"` +} + +func (m *TextAnnotation_DetectedLanguage) Reset() { *m = TextAnnotation_DetectedLanguage{} } +func (m *TextAnnotation_DetectedLanguage) String() string { return proto.CompactTextString(m) } +func (*TextAnnotation_DetectedLanguage) ProtoMessage() {} +func (*TextAnnotation_DetectedLanguage) Descriptor() ([]byte, []int) { + return fileDescriptor2, []int{0, 0} +} + +func (m *TextAnnotation_DetectedLanguage) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +func (m *TextAnnotation_DetectedLanguage) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + +// Detected start or end of a structural component. +type TextAnnotation_DetectedBreak struct { + // Detected break type. + Type TextAnnotation_DetectedBreak_BreakType `protobuf:"varint,1,opt,name=type,enum=google.cloud.vision.v1p2beta1.TextAnnotation_DetectedBreak_BreakType" json:"type,omitempty"` + // True if break prepends the element. + IsPrefix bool `protobuf:"varint,2,opt,name=is_prefix,json=isPrefix" json:"is_prefix,omitempty"` +} + +func (m *TextAnnotation_DetectedBreak) Reset() { *m = TextAnnotation_DetectedBreak{} } +func (m *TextAnnotation_DetectedBreak) String() string { return proto.CompactTextString(m) } +func (*TextAnnotation_DetectedBreak) ProtoMessage() {} +func (*TextAnnotation_DetectedBreak) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0, 1} } + +func (m *TextAnnotation_DetectedBreak) GetType() TextAnnotation_DetectedBreak_BreakType { + if m != nil { + return m.Type + } + return TextAnnotation_DetectedBreak_UNKNOWN +} + +func (m *TextAnnotation_DetectedBreak) GetIsPrefix() bool { + if m != nil { + return m.IsPrefix + } + return false +} + +// Additional information detected on the structural component. +type TextAnnotation_TextProperty struct { + // A list of detected languages together with confidence. + DetectedLanguages []*TextAnnotation_DetectedLanguage `protobuf:"bytes,1,rep,name=detected_languages,json=detectedLanguages" json:"detected_languages,omitempty"` + // Detected start or end of a text segment. + DetectedBreak *TextAnnotation_DetectedBreak `protobuf:"bytes,2,opt,name=detected_break,json=detectedBreak" json:"detected_break,omitempty"` +} + +func (m *TextAnnotation_TextProperty) Reset() { *m = TextAnnotation_TextProperty{} } +func (m *TextAnnotation_TextProperty) String() string { return proto.CompactTextString(m) } +func (*TextAnnotation_TextProperty) ProtoMessage() {} +func (*TextAnnotation_TextProperty) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0, 2} } + +func (m *TextAnnotation_TextProperty) GetDetectedLanguages() []*TextAnnotation_DetectedLanguage { + if m != nil { + return m.DetectedLanguages + } + return nil +} + +func (m *TextAnnotation_TextProperty) GetDetectedBreak() *TextAnnotation_DetectedBreak { + if m != nil { + return m.DetectedBreak + } + return nil +} + +// Detected page from OCR. +type Page struct { + // Additional information detected on the page. + Property *TextAnnotation_TextProperty `protobuf:"bytes,1,opt,name=property" json:"property,omitempty"` + // Page width. For PDFs the unit is points. For images (including + // TIFFs) the unit is pixels. + Width int32 `protobuf:"varint,2,opt,name=width" json:"width,omitempty"` + // Page height. For PDFs the unit is points. For images (including + // TIFFs) the unit is pixels. + Height int32 `protobuf:"varint,3,opt,name=height" json:"height,omitempty"` + // List of blocks of text, images etc on this page. + Blocks []*Block `protobuf:"bytes,4,rep,name=blocks" json:"blocks,omitempty"` + // Confidence of the OCR results on the page. Range [0, 1]. + Confidence float32 `protobuf:"fixed32,5,opt,name=confidence" json:"confidence,omitempty"` +} + +func (m *Page) Reset() { *m = Page{} } +func (m *Page) String() string { return proto.CompactTextString(m) } +func (*Page) ProtoMessage() {} +func (*Page) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{1} } + +func (m *Page) GetProperty() *TextAnnotation_TextProperty { + if m != nil { + return m.Property + } + return nil +} + +func (m *Page) GetWidth() int32 { + if m != nil { + return m.Width + } + return 0 +} + +func (m *Page) GetHeight() int32 { + if m != nil { + return m.Height + } + return 0 +} + +func (m *Page) GetBlocks() []*Block { + if m != nil { + return m.Blocks + } + return nil +} + +func (m *Page) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + +// Logical element on the page. +type Block struct { + // Additional information detected for the block. + Property *TextAnnotation_TextProperty `protobuf:"bytes,1,opt,name=property" json:"property,omitempty"` + // The bounding box for the block. + // The vertices are in the order of top-left, top-right, bottom-right, + // bottom-left. When a rotation of the bounding box is detected the rotation + // is represented as around the top-left corner as defined when the text is + // read in the 'natural' orientation. + // For example: + // + // * when the text is horizontal it might look like: + // + // 0----1 + // | | + // 3----2 + // + // * when it's rotated 180 degrees around the top-left corner it becomes: + // + // 2----3 + // | | + // 1----0 + // + // and the vertice order will still be (0, 1, 2, 3). + BoundingBox *BoundingPoly `protobuf:"bytes,2,opt,name=bounding_box,json=boundingBox" json:"bounding_box,omitempty"` + // List of paragraphs in this block (if this blocks is of type text). + Paragraphs []*Paragraph `protobuf:"bytes,3,rep,name=paragraphs" json:"paragraphs,omitempty"` + // Detected block type (text, image etc) for this block. + BlockType Block_BlockType `protobuf:"varint,4,opt,name=block_type,json=blockType,enum=google.cloud.vision.v1p2beta1.Block_BlockType" json:"block_type,omitempty"` + // Confidence of the OCR results on the block. Range [0, 1]. + Confidence float32 `protobuf:"fixed32,5,opt,name=confidence" json:"confidence,omitempty"` +} + +func (m *Block) Reset() { *m = Block{} } +func (m *Block) String() string { return proto.CompactTextString(m) } +func (*Block) ProtoMessage() {} +func (*Block) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{2} } + +func (m *Block) GetProperty() *TextAnnotation_TextProperty { + if m != nil { + return m.Property + } + return nil +} + +func (m *Block) GetBoundingBox() *BoundingPoly { + if m != nil { + return m.BoundingBox + } + return nil +} + +func (m *Block) GetParagraphs() []*Paragraph { + if m != nil { + return m.Paragraphs + } + return nil +} + +func (m *Block) GetBlockType() Block_BlockType { + if m != nil { + return m.BlockType + } + return Block_UNKNOWN +} + +func (m *Block) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + +// Structural unit of text representing a number of words in certain order. +type Paragraph struct { + // Additional information detected for the paragraph. + Property *TextAnnotation_TextProperty `protobuf:"bytes,1,opt,name=property" json:"property,omitempty"` + // The bounding box for the paragraph. + // The vertices are in the order of top-left, top-right, bottom-right, + // bottom-left. When a rotation of the bounding box is detected the rotation + // is represented as around the top-left corner as defined when the text is + // read in the 'natural' orientation. + // For example: + // * when the text is horizontal it might look like: + // 0----1 + // | | + // 3----2 + // * when it's rotated 180 degrees around the top-left corner it becomes: + // 2----3 + // | | + // 1----0 + // and the vertice order will still be (0, 1, 2, 3). + BoundingBox *BoundingPoly `protobuf:"bytes,2,opt,name=bounding_box,json=boundingBox" json:"bounding_box,omitempty"` + // List of words in this paragraph. + Words []*Word `protobuf:"bytes,3,rep,name=words" json:"words,omitempty"` + // Confidence of the OCR results for the paragraph. Range [0, 1]. + Confidence float32 `protobuf:"fixed32,4,opt,name=confidence" json:"confidence,omitempty"` +} + +func (m *Paragraph) Reset() { *m = Paragraph{} } +func (m *Paragraph) String() string { return proto.CompactTextString(m) } +func (*Paragraph) ProtoMessage() {} +func (*Paragraph) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{3} } + +func (m *Paragraph) GetProperty() *TextAnnotation_TextProperty { + if m != nil { + return m.Property + } + return nil +} + +func (m *Paragraph) GetBoundingBox() *BoundingPoly { + if m != nil { + return m.BoundingBox + } + return nil +} + +func (m *Paragraph) GetWords() []*Word { + if m != nil { + return m.Words + } + return nil +} + +func (m *Paragraph) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + +// A word representation. +type Word struct { + // Additional information detected for the word. + Property *TextAnnotation_TextProperty `protobuf:"bytes,1,opt,name=property" json:"property,omitempty"` + // The bounding box for the word. + // The vertices are in the order of top-left, top-right, bottom-right, + // bottom-left. When a rotation of the bounding box is detected the rotation + // is represented as around the top-left corner as defined when the text is + // read in the 'natural' orientation. + // For example: + // * when the text is horizontal it might look like: + // 0----1 + // | | + // 3----2 + // * when it's rotated 180 degrees around the top-left corner it becomes: + // 2----3 + // | | + // 1----0 + // and the vertice order will still be (0, 1, 2, 3). + BoundingBox *BoundingPoly `protobuf:"bytes,2,opt,name=bounding_box,json=boundingBox" json:"bounding_box,omitempty"` + // List of symbols in the word. + // The order of the symbols follows the natural reading order. + Symbols []*Symbol `protobuf:"bytes,3,rep,name=symbols" json:"symbols,omitempty"` + // Confidence of the OCR results for the word. Range [0, 1]. + Confidence float32 `protobuf:"fixed32,4,opt,name=confidence" json:"confidence,omitempty"` +} + +func (m *Word) Reset() { *m = Word{} } +func (m *Word) String() string { return proto.CompactTextString(m) } +func (*Word) ProtoMessage() {} +func (*Word) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{4} } + +func (m *Word) GetProperty() *TextAnnotation_TextProperty { + if m != nil { + return m.Property + } + return nil +} + +func (m *Word) GetBoundingBox() *BoundingPoly { + if m != nil { + return m.BoundingBox + } + return nil +} + +func (m *Word) GetSymbols() []*Symbol { + if m != nil { + return m.Symbols + } + return nil +} + +func (m *Word) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + +// A single symbol representation. +type Symbol struct { + // Additional information detected for the symbol. + Property *TextAnnotation_TextProperty `protobuf:"bytes,1,opt,name=property" json:"property,omitempty"` + // The bounding box for the symbol. + // The vertices are in the order of top-left, top-right, bottom-right, + // bottom-left. When a rotation of the bounding box is detected the rotation + // is represented as around the top-left corner as defined when the text is + // read in the 'natural' orientation. + // For example: + // * when the text is horizontal it might look like: + // 0----1 + // | | + // 3----2 + // * when it's rotated 180 degrees around the top-left corner it becomes: + // 2----3 + // | | + // 1----0 + // and the vertice order will still be (0, 1, 2, 3). + BoundingBox *BoundingPoly `protobuf:"bytes,2,opt,name=bounding_box,json=boundingBox" json:"bounding_box,omitempty"` + // The actual UTF-8 representation of the symbol. + Text string `protobuf:"bytes,3,opt,name=text" json:"text,omitempty"` + // Confidence of the OCR results for the symbol. Range [0, 1]. + Confidence float32 `protobuf:"fixed32,4,opt,name=confidence" json:"confidence,omitempty"` +} + +func (m *Symbol) Reset() { *m = Symbol{} } +func (m *Symbol) String() string { return proto.CompactTextString(m) } +func (*Symbol) ProtoMessage() {} +func (*Symbol) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{5} } + +func (m *Symbol) GetProperty() *TextAnnotation_TextProperty { + if m != nil { + return m.Property + } + return nil +} + +func (m *Symbol) GetBoundingBox() *BoundingPoly { + if m != nil { + return m.BoundingBox + } + return nil +} + +func (m *Symbol) GetText() string { + if m != nil { + return m.Text + } + return "" +} + +func (m *Symbol) GetConfidence() float32 { + if m != nil { + return m.Confidence + } + return 0 +} + +func init() { + proto.RegisterType((*TextAnnotation)(nil), "google.cloud.vision.v1p2beta1.TextAnnotation") + proto.RegisterType((*TextAnnotation_DetectedLanguage)(nil), "google.cloud.vision.v1p2beta1.TextAnnotation.DetectedLanguage") + proto.RegisterType((*TextAnnotation_DetectedBreak)(nil), "google.cloud.vision.v1p2beta1.TextAnnotation.DetectedBreak") + proto.RegisterType((*TextAnnotation_TextProperty)(nil), "google.cloud.vision.v1p2beta1.TextAnnotation.TextProperty") + proto.RegisterType((*Page)(nil), "google.cloud.vision.v1p2beta1.Page") + proto.RegisterType((*Block)(nil), "google.cloud.vision.v1p2beta1.Block") + proto.RegisterType((*Paragraph)(nil), "google.cloud.vision.v1p2beta1.Paragraph") + proto.RegisterType((*Word)(nil), "google.cloud.vision.v1p2beta1.Word") + proto.RegisterType((*Symbol)(nil), "google.cloud.vision.v1p2beta1.Symbol") + proto.RegisterEnum("google.cloud.vision.v1p2beta1.TextAnnotation_DetectedBreak_BreakType", TextAnnotation_DetectedBreak_BreakType_name, TextAnnotation_DetectedBreak_BreakType_value) + proto.RegisterEnum("google.cloud.vision.v1p2beta1.Block_BlockType", Block_BlockType_name, Block_BlockType_value) +} + +func init() { + proto.RegisterFile("google/cloud/vision/v1p2beta1/text_annotation.proto", fileDescriptor2) +} + +var fileDescriptor2 = []byte{ + // 774 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x56, 0x4f, 0x6f, 0xd3, 0x48, + 0x14, 0x5f, 0x27, 0x76, 0x1a, 0xbf, 0xb4, 0x91, 0x77, 0x76, 0xb5, 0x8a, 0xb2, 0xbb, 0xa8, 0xa4, + 0x20, 0x55, 0x02, 0x39, 0x6a, 0x7a, 0x2a, 0x45, 0xa0, 0x38, 0xb5, 0xd4, 0xaa, 0x21, 0xb5, 0xa6, + 0x09, 0xa5, 0x5c, 0x2c, 0xff, 0x99, 0x3a, 0x56, 0x13, 0x8f, 0x65, 0xbb, 0x6d, 0x72, 0xe5, 0x8a, + 0x04, 0x5f, 0x88, 0x2f, 0x83, 0xc4, 0x09, 0xf1, 0x01, 0x38, 0x22, 0x8f, 0xed, 0x34, 0x09, 0xa2, + 0xe6, 0x8f, 0x38, 0xf4, 0x12, 0xcd, 0x7b, 0x79, 0xbf, 0x37, 0xef, 0xf7, 0x7b, 0xf3, 0x3c, 0x03, + 0xdb, 0x0e, 0xa5, 0xce, 0x88, 0x34, 0xad, 0x11, 0xbd, 0xb0, 0x9b, 0x97, 0x6e, 0xe8, 0x52, 0xaf, + 0x79, 0xb9, 0xe5, 0xb7, 0x4c, 0x12, 0x19, 0x5b, 0xcd, 0x88, 0x4c, 0x22, 0xdd, 0xf0, 0x3c, 0x1a, + 0x19, 0x91, 0x4b, 0x3d, 0xd9, 0x0f, 0x68, 0x44, 0xd1, 0xff, 0x09, 0x48, 0x66, 0x20, 0x39, 0x01, + 0xc9, 0x33, 0x50, 0xfd, 0xbf, 0x34, 0xa7, 0xe1, 0xbb, 0xcd, 0x6b, 0x6c, 0x98, 0x80, 0xeb, 0x0f, + 0x6f, 0xde, 0xd1, 0x21, 0x74, 0x4c, 0xa2, 0x60, 0x9a, 0x44, 0x37, 0x5e, 0x0b, 0x50, 0xed, 0x93, + 0x49, 0xd4, 0x9e, 0xe5, 0x41, 0x3b, 0x20, 0xf8, 0x86, 0x43, 0xc2, 0x1a, 0xb7, 0x5e, 0xdc, 0xac, + 0xb4, 0x36, 0xe4, 0x1b, 0xab, 0x91, 0x35, 0xc3, 0x21, 0x38, 0x41, 0x20, 0x04, 0x7c, 0xcc, 0xa8, + 0x56, 0x58, 0xe7, 0x36, 0x45, 0xcc, 0xd6, 0xf5, 0x13, 0x90, 0xf6, 0x48, 0x44, 0xac, 0x88, 0xd8, + 0x5d, 0xc3, 0x73, 0x2e, 0x0c, 0x87, 0xa0, 0x0d, 0x58, 0x1b, 0xa5, 0x6b, 0xdd, 0xa2, 0x36, 0xa9, + 0x71, 0x0c, 0xb0, 0x9a, 0x39, 0x3b, 0xd4, 0x26, 0xe8, 0x0e, 0x80, 0x45, 0xbd, 0x33, 0xd7, 0x26, + 0x9e, 0x45, 0x58, 0xca, 0x02, 0x9e, 0xf3, 0xd4, 0x3f, 0x71, 0xb0, 0x96, 0x65, 0x56, 0x02, 0x62, + 0x9c, 0xa3, 0x53, 0xe0, 0xa3, 0xa9, 0x9f, 0x64, 0xab, 0xb6, 0xd4, 0x9c, 0xc2, 0x17, 0x69, 0xcb, + 0x0b, 0xa9, 0x64, 0xf6, 0xdb, 0x9f, 0xfa, 0x04, 0xb3, 0x94, 0xe8, 0x5f, 0x10, 0xdd, 0x50, 0xf7, + 0x03, 0x72, 0xe6, 0x4e, 0x58, 0x2d, 0x65, 0x5c, 0x76, 0x43, 0x8d, 0xd9, 0x0d, 0x0b, 0xc4, 0x59, + 0x3c, 0xaa, 0xc0, 0xca, 0xa0, 0x77, 0xd8, 0x3b, 0x3a, 0xe9, 0x49, 0x7f, 0x20, 0x11, 0x84, 0x63, + 0xad, 0xdd, 0x51, 0x25, 0x0e, 0x55, 0x01, 0x8e, 0x07, 0x58, 0xd5, 0x13, 0xbb, 0x80, 0x10, 0x54, + 0xd5, 0xa3, 0xae, 0x3e, 0xe7, 0x2b, 0x22, 0x80, 0xd2, 0xfe, 0xa9, 0xb6, 0xaf, 0xf6, 0x24, 0x3e, + 0x8e, 0xef, 0x1e, 0xf4, 0x54, 0x5d, 0xc1, 0x6a, 0xfb, 0x50, 0x12, 0xea, 0xef, 0x39, 0x58, 0x8d, + 0x4b, 0xd6, 0x02, 0xea, 0x93, 0x20, 0x9a, 0xa2, 0x31, 0x20, 0x3b, 0xad, 0x59, 0xcf, 0x84, 0xcb, + 0x9a, 0xf6, 0xe4, 0xe7, 0xb8, 0x67, 0x0d, 0xc2, 0x7f, 0xda, 0x4b, 0x9e, 0x10, 0x99, 0x50, 0x9d, + 0x6d, 0x67, 0xc6, 0x6c, 0x99, 0x0c, 0x95, 0xd6, 0xee, 0x2f, 0xc8, 0x8c, 0xd7, 0xec, 0x79, 0xb3, + 0xf1, 0x91, 0x03, 0x3e, 0x3e, 0x4f, 0xe8, 0x39, 0x94, 0xfd, 0x94, 0x27, 0xeb, 0x66, 0xa5, 0xf5, + 0xe8, 0xc7, 0xb6, 0x99, 0x57, 0x0a, 0xcf, 0x72, 0xa1, 0xbf, 0x41, 0xb8, 0x72, 0xed, 0x68, 0xc8, + 0x6a, 0x17, 0x70, 0x62, 0xa0, 0x7f, 0xa0, 0x34, 0x24, 0xae, 0x33, 0x8c, 0x6a, 0x45, 0xe6, 0x4e, + 0x2d, 0xf4, 0x18, 0x4a, 0xe6, 0x88, 0x5a, 0xe7, 0x61, 0x8d, 0x67, 0xaa, 0xde, 0xcb, 0xa9, 0x41, + 0x89, 0x83, 0x71, 0x8a, 0x59, 0x3a, 0xbf, 0xc2, 0xf2, 0xf9, 0x6d, 0xbc, 0x2b, 0x82, 0xc0, 0x10, + 0xbf, 0x8d, 0x6d, 0x0f, 0x56, 0x4d, 0x7a, 0xe1, 0xd9, 0xae, 0xe7, 0xe8, 0x26, 0x9d, 0xa4, 0x0d, + 0x7b, 0x90, 0xc7, 0x22, 0x85, 0x68, 0x74, 0x34, 0xc5, 0x95, 0x2c, 0x81, 0x42, 0x27, 0x68, 0x1f, + 0xc0, 0x37, 0x02, 0xc3, 0x09, 0x0c, 0x7f, 0x18, 0xd6, 0x8a, 0x4c, 0x93, 0xcd, 0xdc, 0xcf, 0x43, + 0x0a, 0xc0, 0x73, 0x58, 0xf4, 0x0c, 0x80, 0xa9, 0xa4, 0xb3, 0x79, 0xe5, 0xd9, 0xbc, 0xca, 0xdf, + 0xa3, 0x6e, 0xf2, 0xcb, 0x06, 0x53, 0x34, 0xb3, 0x65, 0xae, 0xd4, 0x18, 0xc4, 0x19, 0x6e, 0x71, + 0x40, 0xcb, 0xc0, 0xf7, 0xd5, 0x17, 0x7d, 0x89, 0x8b, 0x47, 0xb5, 0xdf, 0x56, 0xba, 0xf1, 0x68, + 0x56, 0x60, 0x45, 0x3b, 0xe8, 0xf4, 0x07, 0x38, 0x9e, 0x49, 0x11, 0x04, 0x3c, 0xe8, 0xaa, 0x58, + 0xe2, 0x63, 0xbf, 0xd2, 0xc6, 0x9d, 0xa3, 0x3d, 0x55, 0x12, 0x1a, 0x6f, 0x0a, 0x20, 0xce, 0xc8, + 0xdd, 0x9a, 0x16, 0xee, 0x80, 0x70, 0x45, 0x03, 0x3b, 0xeb, 0x5e, 0xde, 0xc7, 0xfd, 0x84, 0x06, + 0x36, 0x4e, 0x10, 0x4b, 0x22, 0xf3, 0x5f, 0x89, 0xfc, 0xb6, 0x00, 0x7c, 0x1c, 0x7f, 0x6b, 0xb4, + 0x78, 0x0a, 0x2b, 0xe1, 0x74, 0x6c, 0xd2, 0x51, 0xa6, 0xc6, 0xfd, 0x9c, 0x54, 0xc7, 0x2c, 0x1a, + 0x67, 0xa8, 0x5c, 0x45, 0x3e, 0x70, 0x50, 0x4a, 0x30, 0xb7, 0x46, 0x93, 0xec, 0x06, 0x2f, 0x5e, + 0xdf, 0xe0, 0x79, 0x34, 0x95, 0x57, 0x1c, 0xdc, 0xb5, 0xe8, 0xf8, 0xe6, 0x3d, 0x95, 0xbf, 0x16, + 0x09, 0x69, 0xf1, 0xf3, 0x43, 0xe3, 0x5e, 0x76, 0x52, 0x94, 0x43, 0xe3, 0x3b, 0x4c, 0xa6, 0x81, + 0xd3, 0x74, 0x88, 0xc7, 0x1e, 0x27, 0xcd, 0xe4, 0x2f, 0xc3, 0x77, 0xc3, 0x6f, 0xbc, 0x66, 0x76, + 0x13, 0xc7, 0x67, 0x8e, 0x33, 0x4b, 0x0c, 0xb2, 0xfd, 0x25, 0x00, 0x00, 0xff, 0xff, 0xce, 0x91, + 0x71, 0x97, 0x71, 0x09, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1p2beta1/web_detection.pb.go b/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1p2beta1/web_detection.pb.go new file mode 100644 index 0000000..9185111 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/cloud/vision/v1p2beta1/web_detection.pb.go @@ -0,0 +1,278 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/cloud/vision/v1p2beta1/web_detection.proto + +package vision + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Relevant information for the image from the Internet. +type WebDetection struct { + // Deduced entities from similar images on the Internet. + WebEntities []*WebDetection_WebEntity `protobuf:"bytes,1,rep,name=web_entities,json=webEntities" json:"web_entities,omitempty"` + // Fully matching images from the Internet. + // Can include resized copies of the query image. + FullMatchingImages []*WebDetection_WebImage `protobuf:"bytes,2,rep,name=full_matching_images,json=fullMatchingImages" json:"full_matching_images,omitempty"` + // Partial matching images from the Internet. + // Those images are similar enough to share some key-point features. For + // example an original image will likely have partial matching for its crops. + PartialMatchingImages []*WebDetection_WebImage `protobuf:"bytes,3,rep,name=partial_matching_images,json=partialMatchingImages" json:"partial_matching_images,omitempty"` + // Web pages containing the matching images from the Internet. + PagesWithMatchingImages []*WebDetection_WebPage `protobuf:"bytes,4,rep,name=pages_with_matching_images,json=pagesWithMatchingImages" json:"pages_with_matching_images,omitempty"` + // The visually similar image results. + VisuallySimilarImages []*WebDetection_WebImage `protobuf:"bytes,6,rep,name=visually_similar_images,json=visuallySimilarImages" json:"visually_similar_images,omitempty"` + // The service's best guess as to the topic of the request image. + // Inferred from similar images on the open web. + BestGuessLabels []*WebDetection_WebLabel `protobuf:"bytes,8,rep,name=best_guess_labels,json=bestGuessLabels" json:"best_guess_labels,omitempty"` +} + +func (m *WebDetection) Reset() { *m = WebDetection{} } +func (m *WebDetection) String() string { return proto.CompactTextString(m) } +func (*WebDetection) ProtoMessage() {} +func (*WebDetection) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0} } + +func (m *WebDetection) GetWebEntities() []*WebDetection_WebEntity { + if m != nil { + return m.WebEntities + } + return nil +} + +func (m *WebDetection) GetFullMatchingImages() []*WebDetection_WebImage { + if m != nil { + return m.FullMatchingImages + } + return nil +} + +func (m *WebDetection) GetPartialMatchingImages() []*WebDetection_WebImage { + if m != nil { + return m.PartialMatchingImages + } + return nil +} + +func (m *WebDetection) GetPagesWithMatchingImages() []*WebDetection_WebPage { + if m != nil { + return m.PagesWithMatchingImages + } + return nil +} + +func (m *WebDetection) GetVisuallySimilarImages() []*WebDetection_WebImage { + if m != nil { + return m.VisuallySimilarImages + } + return nil +} + +func (m *WebDetection) GetBestGuessLabels() []*WebDetection_WebLabel { + if m != nil { + return m.BestGuessLabels + } + return nil +} + +// Entity deduced from similar images on the Internet. +type WebDetection_WebEntity struct { + // Opaque entity ID. + EntityId string `protobuf:"bytes,1,opt,name=entity_id,json=entityId" json:"entity_id,omitempty"` + // Overall relevancy score for the entity. + // Not normalized and not comparable across different image queries. + Score float32 `protobuf:"fixed32,2,opt,name=score" json:"score,omitempty"` + // Canonical description of the entity, in English. + Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` +} + +func (m *WebDetection_WebEntity) Reset() { *m = WebDetection_WebEntity{} } +func (m *WebDetection_WebEntity) String() string { return proto.CompactTextString(m) } +func (*WebDetection_WebEntity) ProtoMessage() {} +func (*WebDetection_WebEntity) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 0} } + +func (m *WebDetection_WebEntity) GetEntityId() string { + if m != nil { + return m.EntityId + } + return "" +} + +func (m *WebDetection_WebEntity) GetScore() float32 { + if m != nil { + return m.Score + } + return 0 +} + +func (m *WebDetection_WebEntity) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +// Metadata for online images. +type WebDetection_WebImage struct { + // The result image URL. + Url string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"` + // (Deprecated) Overall relevancy score for the image. + Score float32 `protobuf:"fixed32,2,opt,name=score" json:"score,omitempty"` +} + +func (m *WebDetection_WebImage) Reset() { *m = WebDetection_WebImage{} } +func (m *WebDetection_WebImage) String() string { return proto.CompactTextString(m) } +func (*WebDetection_WebImage) ProtoMessage() {} +func (*WebDetection_WebImage) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 1} } + +func (m *WebDetection_WebImage) GetUrl() string { + if m != nil { + return m.Url + } + return "" +} + +func (m *WebDetection_WebImage) GetScore() float32 { + if m != nil { + return m.Score + } + return 0 +} + +// Metadata for web pages. +type WebDetection_WebPage struct { + // The result web page URL. + Url string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"` + // (Deprecated) Overall relevancy score for the web page. + Score float32 `protobuf:"fixed32,2,opt,name=score" json:"score,omitempty"` + // Title for the web page, may contain HTML markups. + PageTitle string `protobuf:"bytes,3,opt,name=page_title,json=pageTitle" json:"page_title,omitempty"` + // Fully matching images on the page. + // Can include resized copies of the query image. + FullMatchingImages []*WebDetection_WebImage `protobuf:"bytes,4,rep,name=full_matching_images,json=fullMatchingImages" json:"full_matching_images,omitempty"` + // Partial matching images on the page. + // Those images are similar enough to share some key-point features. For + // example an original image will likely have partial matching for its + // crops. + PartialMatchingImages []*WebDetection_WebImage `protobuf:"bytes,5,rep,name=partial_matching_images,json=partialMatchingImages" json:"partial_matching_images,omitempty"` +} + +func (m *WebDetection_WebPage) Reset() { *m = WebDetection_WebPage{} } +func (m *WebDetection_WebPage) String() string { return proto.CompactTextString(m) } +func (*WebDetection_WebPage) ProtoMessage() {} +func (*WebDetection_WebPage) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 2} } + +func (m *WebDetection_WebPage) GetUrl() string { + if m != nil { + return m.Url + } + return "" +} + +func (m *WebDetection_WebPage) GetScore() float32 { + if m != nil { + return m.Score + } + return 0 +} + +func (m *WebDetection_WebPage) GetPageTitle() string { + if m != nil { + return m.PageTitle + } + return "" +} + +func (m *WebDetection_WebPage) GetFullMatchingImages() []*WebDetection_WebImage { + if m != nil { + return m.FullMatchingImages + } + return nil +} + +func (m *WebDetection_WebPage) GetPartialMatchingImages() []*WebDetection_WebImage { + if m != nil { + return m.PartialMatchingImages + } + return nil +} + +// Label to provide extra metadata for the web detection. +type WebDetection_WebLabel struct { + // Label for extra metadata. + Label string `protobuf:"bytes,1,opt,name=label" json:"label,omitempty"` + // The BCP-47 language code for `label`, such as "en-US" or "sr-Latn". + // For more information, see + // http://www.unicode.org/reports/tr35/#Unicode_locale_identifier. + LanguageCode string `protobuf:"bytes,2,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` +} + +func (m *WebDetection_WebLabel) Reset() { *m = WebDetection_WebLabel{} } +func (m *WebDetection_WebLabel) String() string { return proto.CompactTextString(m) } +func (*WebDetection_WebLabel) ProtoMessage() {} +func (*WebDetection_WebLabel) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 3} } + +func (m *WebDetection_WebLabel) GetLabel() string { + if m != nil { + return m.Label + } + return "" +} + +func (m *WebDetection_WebLabel) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +func init() { + proto.RegisterType((*WebDetection)(nil), "google.cloud.vision.v1p2beta1.WebDetection") + proto.RegisterType((*WebDetection_WebEntity)(nil), "google.cloud.vision.v1p2beta1.WebDetection.WebEntity") + proto.RegisterType((*WebDetection_WebImage)(nil), "google.cloud.vision.v1p2beta1.WebDetection.WebImage") + proto.RegisterType((*WebDetection_WebPage)(nil), "google.cloud.vision.v1p2beta1.WebDetection.WebPage") + proto.RegisterType((*WebDetection_WebLabel)(nil), "google.cloud.vision.v1p2beta1.WebDetection.WebLabel") +} + +func init() { proto.RegisterFile("google/cloud/vision/v1p2beta1/web_detection.proto", fileDescriptor3) } + +var fileDescriptor3 = []byte{ + // 511 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x94, 0x4f, 0x6f, 0xd3, 0x30, + 0x18, 0xc6, 0x95, 0x76, 0x1b, 0x8d, 0x5b, 0x04, 0xb3, 0x86, 0x16, 0x05, 0x26, 0x15, 0xb8, 0xf4, + 0x94, 0xa8, 0x1d, 0x9c, 0xb8, 0x6d, 0x4c, 0x68, 0x12, 0x48, 0x55, 0x40, 0x1a, 0xe2, 0x92, 0x39, + 0x89, 0x97, 0xbe, 0x92, 0x1b, 0x47, 0xb1, 0xd3, 0xaa, 0x37, 0x4e, 0x7c, 0x14, 0x3e, 0x23, 0x47, + 0xf4, 0xda, 0xee, 0x54, 0x51, 0x36, 0x31, 0x86, 0xb8, 0xf9, 0x7d, 0xac, 0xe7, 0xf9, 0xd9, 0xaf, + 0xff, 0x90, 0x71, 0x29, 0x65, 0x29, 0x78, 0x9c, 0x0b, 0xd9, 0x16, 0xf1, 0x02, 0x14, 0xc8, 0x2a, + 0x5e, 0x8c, 0xeb, 0x49, 0xc6, 0x35, 0x1b, 0xc7, 0x4b, 0x9e, 0xa5, 0x05, 0xd7, 0x3c, 0xd7, 0x20, + 0xab, 0xa8, 0x6e, 0xa4, 0x96, 0xf4, 0xc8, 0x5a, 0x22, 0x63, 0x89, 0xac, 0x25, 0xba, 0xb6, 0x84, + 0xcf, 0x5c, 0x22, 0xab, 0x21, 0x66, 0x55, 0x25, 0x35, 0x43, 0xaf, 0xb2, 0xe6, 0x17, 0xdf, 0x7c, + 0x32, 0xb8, 0xe0, 0xd9, 0xdb, 0x75, 0x26, 0xfd, 0x4c, 0x06, 0x08, 0xe1, 0x95, 0x06, 0x0d, 0x5c, + 0x05, 0xde, 0xb0, 0x3b, 0xea, 0x4f, 0x5e, 0x47, 0xb7, 0x42, 0xa2, 0xcd, 0x08, 0x2c, 0xce, 0xd0, + 0xbe, 0x4a, 0xfa, 0x4b, 0x37, 0x04, 0xae, 0xe8, 0x15, 0x39, 0xb8, 0x6a, 0x85, 0x48, 0xe7, 0x4c, + 0xe7, 0x33, 0xa8, 0xca, 0x14, 0xe6, 0xac, 0xe4, 0x2a, 0xe8, 0x18, 0xc2, 0xab, 0x3b, 0x12, 0xce, + 0xd1, 0x9c, 0x50, 0x4c, 0xfc, 0xe0, 0x02, 0x8d, 0xa4, 0xa8, 0x20, 0x87, 0x35, 0x6b, 0x34, 0xb0, + 0x6d, 0x54, 0xf7, 0x1e, 0xa8, 0x27, 0x2e, 0xf4, 0x17, 0x5a, 0x4d, 0xc2, 0x1a, 0x07, 0xe9, 0x12, + 0xf4, 0x6c, 0x0b, 0xb8, 0x63, 0x80, 0xc7, 0x77, 0x04, 0x4e, 0x91, 0x77, 0x68, 0x62, 0x2f, 0x40, + 0xcf, 0xb6, 0xf7, 0xb7, 0x00, 0xd5, 0x32, 0x21, 0x56, 0xa9, 0x82, 0x39, 0x08, 0xd6, 0xac, 0x71, + 0x7b, 0xf7, 0xd9, 0xdf, 0x3a, 0xf4, 0xa3, 0xcd, 0x74, 0xb4, 0x4b, 0xb2, 0x9f, 0x71, 0xa5, 0xd3, + 0xb2, 0xe5, 0x4a, 0xa5, 0x82, 0x65, 0x5c, 0xa8, 0xa0, 0xf7, 0x57, 0x9c, 0xf7, 0x68, 0x4e, 0x1e, + 0x61, 0xdc, 0x3b, 0x4c, 0x33, 0xb5, 0x0a, 0x2f, 0x89, 0x7f, 0x7d, 0x63, 0xe8, 0x53, 0xe2, 0x9b, + 0xab, 0xb7, 0x4a, 0xa1, 0x08, 0xbc, 0xa1, 0x37, 0xf2, 0x93, 0x9e, 0x15, 0xce, 0x0b, 0x7a, 0x40, + 0x76, 0x55, 0x2e, 0x1b, 0x1e, 0x74, 0x86, 0xde, 0xa8, 0x93, 0xd8, 0x82, 0x0e, 0x49, 0xbf, 0xe0, + 0x2a, 0x6f, 0xa0, 0x46, 0x50, 0xd0, 0x35, 0xa6, 0x4d, 0x29, 0x9c, 0x90, 0xde, 0x7a, 0x9b, 0xf4, + 0x31, 0xe9, 0xb6, 0x8d, 0x70, 0xd1, 0x38, 0xfc, 0x7d, 0x6a, 0xf8, 0xbd, 0x43, 0x1e, 0xb8, 0xa3, + 0xf8, 0x53, 0x0f, 0x3d, 0x22, 0x04, 0x0f, 0x2d, 0xd5, 0xa0, 0x05, 0x77, 0x0b, 0xf1, 0x51, 0xf9, + 0x84, 0xc2, 0x8d, 0x0f, 0x60, 0xe7, 0xff, 0x3d, 0x80, 0xdd, 0x7f, 0xfe, 0x00, 0xc2, 0x33, 0xd3, + 0x5c, 0x73, 0x96, 0xd8, 0x16, 0x73, 0x43, 0x5c, 0xab, 0x6c, 0x41, 0x5f, 0x92, 0x87, 0x82, 0x55, + 0x65, 0x8b, 0xad, 0xc9, 0x65, 0x61, 0x9b, 0xe6, 0x27, 0x83, 0xb5, 0x78, 0x2a, 0x0b, 0x7e, 0xf2, + 0xd5, 0x23, 0xcf, 0x73, 0x39, 0xbf, 0x7d, 0x65, 0x27, 0xfb, 0x9b, 0x4b, 0x9b, 0xe2, 0x0f, 0x36, + 0xf5, 0xbe, 0x9c, 0x3a, 0x4f, 0x29, 0x31, 0x31, 0x92, 0x4d, 0x19, 0x97, 0xbc, 0x32, 0xff, 0x5b, + 0x6c, 0xa7, 0x58, 0x0d, 0xea, 0x86, 0x2f, 0xf5, 0x8d, 0x15, 0x7e, 0x78, 0x5e, 0xb6, 0x67, 0x2c, + 0xc7, 0x3f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x66, 0x62, 0xaa, 0xcd, 0x84, 0x05, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/container/v1/cluster_service.pb.go b/vendor/google.golang.org/genproto/googleapis/container/v1/cluster_service.pb.go index d257978..15da6ae 100644 --- a/vendor/google.golang.org/genproto/googleapis/container/v1/cluster_service.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/container/v1/cluster_service.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/container/v1/cluster_service.proto -// DO NOT EDIT! /* Package container is a generated protocol buffer package. @@ -11,16 +10,29 @@ It is generated from these files: It has these top-level messages: NodeConfig MasterAuth + ClientCertificateConfig AddonsConfig HttpLoadBalancing HorizontalPodAutoscaling + KubernetesDashboard + NetworkPolicyConfig + MasterAuthorizedNetworksConfig LegacyAbac + NetworkPolicy + IPAllocationPolicy Cluster ClusterUpdate Operation CreateClusterRequest GetClusterRequest UpdateClusterRequest + UpdateNodePoolRequest + SetNodePoolAutoscalingRequest + SetLoggingServiceRequest + SetMonitoringServiceRequest + SetAddonsConfigRequest + SetLocationsRequest + UpdateMasterRequest SetMasterAuthRequest DeleteClusterRequest ListClustersRequest @@ -38,7 +50,11 @@ It has these top-level messages: NodePool NodeManagement AutoUpgradeOptions + MaintenancePolicy + MaintenanceWindow + DailyMaintenanceWindow SetNodePoolManagementRequest + SetNodePoolSizeRequest RollbackNodePoolUpgradeRequest ListNodePoolsResponse NodePoolAutoscaling @@ -46,6 +62,9 @@ It has these top-level messages: SetLegacyAbacRequest StartIPRotationRequest CompleteIPRotationRequest + AcceleratorConfig + SetNetworkPolicyRequest + SetMaintenancePolicyRequest */ package container @@ -71,6 +90,30 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package +// Allowed Network Policy providers. +type NetworkPolicy_Provider int32 + +const ( + // Not set + NetworkPolicy_PROVIDER_UNSPECIFIED NetworkPolicy_Provider = 0 + // Tigera (Calico Felix). + NetworkPolicy_CALICO NetworkPolicy_Provider = 1 +) + +var NetworkPolicy_Provider_name = map[int32]string{ + 0: "PROVIDER_UNSPECIFIED", + 1: "CALICO", +} +var NetworkPolicy_Provider_value = map[string]int32{ + "PROVIDER_UNSPECIFIED": 0, + "CALICO": 1, +} + +func (x NetworkPolicy_Provider) String() string { + return proto.EnumName(NetworkPolicy_Provider_name, int32(x)) +} +func (NetworkPolicy_Provider) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{10, 0} } + // The current status of the cluster. type Cluster_Status int32 @@ -113,7 +156,7 @@ var Cluster_Status_value = map[string]int32{ func (x Cluster_Status) String() string { return proto.EnumName(Cluster_Status_name, int32(x)) } -func (Cluster_Status) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{6, 0} } +func (Cluster_Status) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{12, 0} } // Current status of the operation. type Operation_Status int32 @@ -149,7 +192,7 @@ var Operation_Status_value = map[string]int32{ func (x Operation_Status) String() string { return proto.EnumName(Operation_Status_name, int32(x)) } -func (Operation_Status) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{8, 0} } +func (Operation_Status) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{14, 0} } // Operation type. type Operation_Type int32 @@ -183,6 +226,12 @@ const ( Operation_SET_LABELS Operation_Type = 12 // Set/generate master auth materials Operation_SET_MASTER_AUTH Operation_Type = 13 + // Set node pool size. + Operation_SET_NODE_POOL_SIZE Operation_Type = 14 + // Updates network policy for a cluster. + Operation_SET_NETWORK_POLICY Operation_Type = 15 + // Set the maintenance policy. + Operation_SET_MAINTENANCE_POLICY Operation_Type = 16 ) var Operation_Type_name = map[int32]string{ @@ -200,6 +249,9 @@ var Operation_Type_name = map[int32]string{ 11: "AUTO_UPGRADE_NODES", 12: "SET_LABELS", 13: "SET_MASTER_AUTH", + 14: "SET_NODE_POOL_SIZE", + 15: "SET_NETWORK_POLICY", + 16: "SET_MAINTENANCE_POLICY", } var Operation_Type_value = map[string]int32{ "TYPE_UNSPECIFIED": 0, @@ -216,41 +268,51 @@ var Operation_Type_value = map[string]int32{ "AUTO_UPGRADE_NODES": 11, "SET_LABELS": 12, "SET_MASTER_AUTH": 13, + "SET_NODE_POOL_SIZE": 14, + "SET_NETWORK_POLICY": 15, + "SET_MAINTENANCE_POLICY": 16, } func (x Operation_Type) String() string { return proto.EnumName(Operation_Type_name, int32(x)) } -func (Operation_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{8, 1} } +func (Operation_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{14, 1} } -// operation type - what type of key rotation are we performing +// Operation type: what type update to perform. type SetMasterAuthRequest_Action int32 const ( - // Operation is unknown and will error out + // Operation is unknown and will error out. SetMasterAuthRequest_UNKNOWN SetMasterAuthRequest_Action = 0 // Set the password to a user generated value. SetMasterAuthRequest_SET_PASSWORD SetMasterAuthRequest_Action = 1 // Generate a new password and set it to that. SetMasterAuthRequest_GENERATE_PASSWORD SetMasterAuthRequest_Action = 2 + // Set the username. If an empty username is provided, basic authentication + // is disabled for the cluster. If a non-empty username is provided, basic + // authentication is enabled, with either a provided password or a generated + // one. + SetMasterAuthRequest_SET_USERNAME SetMasterAuthRequest_Action = 3 ) var SetMasterAuthRequest_Action_name = map[int32]string{ 0: "UNKNOWN", 1: "SET_PASSWORD", 2: "GENERATE_PASSWORD", + 3: "SET_USERNAME", } var SetMasterAuthRequest_Action_value = map[string]int32{ "UNKNOWN": 0, "SET_PASSWORD": 1, "GENERATE_PASSWORD": 2, + "SET_USERNAME": 3, } func (x SetMasterAuthRequest_Action) String() string { return proto.EnumName(SetMasterAuthRequest_Action_name, int32(x)) } func (SetMasterAuthRequest_Action) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{12, 0} + return fileDescriptor0, []int{25, 0} } // The current status of the node pool instance. @@ -302,7 +364,7 @@ var NodePool_Status_value = map[string]int32{ func (x NodePool_Status) String() string { return proto.EnumName(NodePool_Status_name, int32(x)) } -func (NodePool_Status) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{26, 0} } +func (NodePool_Status) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{39, 0} } // Parameters that describe the nodes in a cluster. type NodeConfig struct { @@ -360,7 +422,7 @@ type NodeConfig struct { // the Kubernetes version -- it's best to assume the behavior is undefined // and conflicts should be avoided. // For more information, including usage and the valid values, see: - // http://kubernetes.io/v1.1/docs/user-guide/labels.html + // https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ Labels map[string]string `protobuf:"bytes,6,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // The number of local SSD disks to be attached to the node. // @@ -378,6 +440,17 @@ type NodeConfig struct { // https://cloud.google.com/compute/docs/instances/preemptible for more // information about preemptible VM instances. Preemptible bool `protobuf:"varint,10,opt,name=preemptible" json:"preemptible,omitempty"` + // A list of hardware accelerators to be attached to each node. + // See https://cloud.google.com/compute/docs/gpus for more information about + // support for GPUs. + Accelerators []*AcceleratorConfig `protobuf:"bytes,11,rep,name=accelerators" json:"accelerators,omitempty"` + // Minimum CPU platform to be used by this instance. The instance may be + // scheduled on the specified or newer CPU platform. Applicable values are the + // friendly names of CPU platforms, such as + // minCpuPlatform: "Intel Haswell" or + // minCpuPlatform: "Intel Sandy Bridge". For more + // information, read [how to specify min CPU platform](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform) + MinCpuPlatform string `protobuf:"bytes,13,opt,name=min_cpu_platform,json=minCpuPlatform" json:"min_cpu_platform,omitempty"` } func (m *NodeConfig) Reset() { *m = NodeConfig{} } @@ -455,6 +528,20 @@ func (m *NodeConfig) GetPreemptible() bool { return false } +func (m *NodeConfig) GetAccelerators() []*AcceleratorConfig { + if m != nil { + return m.Accelerators + } + return nil +} + +func (m *NodeConfig) GetMinCpuPlatform() string { + if m != nil { + return m.MinCpuPlatform + } + return "" +} + // The authentication information for accessing the master endpoint. // Authentication can be done using HTTP basic auth or using client // certificates. @@ -468,6 +555,9 @@ type MasterAuth struct { // strong password. If a password is provided for cluster creation, username // must be non-empty. Password string `protobuf:"bytes,2,opt,name=password" json:"password,omitempty"` + // Configuration for client certificate authentication on the cluster. If no + // configuration is specified, a client certificate is issued. + ClientCertificateConfig *ClientCertificateConfig `protobuf:"bytes,3,opt,name=client_certificate_config,json=clientCertificateConfig" json:"client_certificate_config,omitempty"` // [Output only] Base64-encoded public certificate that is the root of // trust for the cluster. ClusterCaCertificate string `protobuf:"bytes,100,opt,name=cluster_ca_certificate,json=clusterCaCertificate" json:"cluster_ca_certificate,omitempty"` @@ -498,6 +588,13 @@ func (m *MasterAuth) GetPassword() string { return "" } +func (m *MasterAuth) GetClientCertificateConfig() *ClientCertificateConfig { + if m != nil { + return m.ClientCertificateConfig + } + return nil +} + func (m *MasterAuth) GetClusterCaCertificate() string { if m != nil { return m.ClusterCaCertificate @@ -519,6 +616,24 @@ func (m *MasterAuth) GetClientKey() string { return "" } +// Configuration for client certificates on the cluster. +type ClientCertificateConfig struct { + // Issue a client certificate. + IssueClientCertificate bool `protobuf:"varint,1,opt,name=issue_client_certificate,json=issueClientCertificate" json:"issue_client_certificate,omitempty"` +} + +func (m *ClientCertificateConfig) Reset() { *m = ClientCertificateConfig{} } +func (m *ClientCertificateConfig) String() string { return proto.CompactTextString(m) } +func (*ClientCertificateConfig) ProtoMessage() {} +func (*ClientCertificateConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *ClientCertificateConfig) GetIssueClientCertificate() bool { + if m != nil { + return m.IssueClientCertificate + } + return false +} + // Configuration for the addons that can be automatically spun up in the // cluster, enabling additional functionality. type AddonsConfig struct { @@ -529,12 +644,18 @@ type AddonsConfig struct { // increases or decreases the number of replica pods a replication controller // has based on the resource usage of the existing pods. HorizontalPodAutoscaling *HorizontalPodAutoscaling `protobuf:"bytes,2,opt,name=horizontal_pod_autoscaling,json=horizontalPodAutoscaling" json:"horizontal_pod_autoscaling,omitempty"` + // Configuration for the Kubernetes Dashboard. + KubernetesDashboard *KubernetesDashboard `protobuf:"bytes,3,opt,name=kubernetes_dashboard,json=kubernetesDashboard" json:"kubernetes_dashboard,omitempty"` + // Configuration for NetworkPolicy. This only tracks whether the addon + // is enabled or not on the Master, it does not track whether network policy + // is enabled for the nodes. + NetworkPolicyConfig *NetworkPolicyConfig `protobuf:"bytes,4,opt,name=network_policy_config,json=networkPolicyConfig" json:"network_policy_config,omitempty"` } func (m *AddonsConfig) Reset() { *m = AddonsConfig{} } func (m *AddonsConfig) String() string { return proto.CompactTextString(m) } func (*AddonsConfig) ProtoMessage() {} -func (*AddonsConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } +func (*AddonsConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } func (m *AddonsConfig) GetHttpLoadBalancing() *HttpLoadBalancing { if m != nil { @@ -550,6 +671,20 @@ func (m *AddonsConfig) GetHorizontalPodAutoscaling() *HorizontalPodAutoscaling { return nil } +func (m *AddonsConfig) GetKubernetesDashboard() *KubernetesDashboard { + if m != nil { + return m.KubernetesDashboard + } + return nil +} + +func (m *AddonsConfig) GetNetworkPolicyConfig() *NetworkPolicyConfig { + if m != nil { + return m.NetworkPolicyConfig + } + return nil +} + // Configuration options for the HTTP (L7) load balancing controller addon, // which makes it easy to set up HTTP load balancers for services in a cluster. type HttpLoadBalancing struct { @@ -562,7 +697,7 @@ type HttpLoadBalancing struct { func (m *HttpLoadBalancing) Reset() { *m = HttpLoadBalancing{} } func (m *HttpLoadBalancing) String() string { return proto.CompactTextString(m) } func (*HttpLoadBalancing) ProtoMessage() {} -func (*HttpLoadBalancing) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } +func (*HttpLoadBalancing) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } func (m *HttpLoadBalancing) GetDisabled() bool { if m != nil { @@ -584,7 +719,7 @@ type HorizontalPodAutoscaling struct { func (m *HorizontalPodAutoscaling) Reset() { *m = HorizontalPodAutoscaling{} } func (m *HorizontalPodAutoscaling) String() string { return proto.CompactTextString(m) } func (*HorizontalPodAutoscaling) ProtoMessage() {} -func (*HorizontalPodAutoscaling) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } +func (*HorizontalPodAutoscaling) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } func (m *HorizontalPodAutoscaling) GetDisabled() bool { if m != nil { @@ -593,6 +728,107 @@ func (m *HorizontalPodAutoscaling) GetDisabled() bool { return false } +// Configuration for the Kubernetes Dashboard. +type KubernetesDashboard struct { + // Whether the Kubernetes Dashboard is enabled for this cluster. + Disabled bool `protobuf:"varint,1,opt,name=disabled" json:"disabled,omitempty"` +} + +func (m *KubernetesDashboard) Reset() { *m = KubernetesDashboard{} } +func (m *KubernetesDashboard) String() string { return proto.CompactTextString(m) } +func (*KubernetesDashboard) ProtoMessage() {} +func (*KubernetesDashboard) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *KubernetesDashboard) GetDisabled() bool { + if m != nil { + return m.Disabled + } + return false +} + +// Configuration for NetworkPolicy. This only tracks whether the addon +// is enabled or not on the Master, it does not track whether network policy +// is enabled for the nodes. +type NetworkPolicyConfig struct { + // Whether NetworkPolicy is enabled for this cluster. + Disabled bool `protobuf:"varint,1,opt,name=disabled" json:"disabled,omitempty"` +} + +func (m *NetworkPolicyConfig) Reset() { *m = NetworkPolicyConfig{} } +func (m *NetworkPolicyConfig) String() string { return proto.CompactTextString(m) } +func (*NetworkPolicyConfig) ProtoMessage() {} +func (*NetworkPolicyConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *NetworkPolicyConfig) GetDisabled() bool { + if m != nil { + return m.Disabled + } + return false +} + +// Master authorized networks is a Beta feature. +// Configuration options for the master authorized networks feature. Enabled +// master authorized networks will disallow all external traffic to access +// Kubernetes master through HTTPS except traffic from the given CIDR blocks, +// Google Compute Engine Public IPs and Google Prod IPs. +type MasterAuthorizedNetworksConfig struct { + // Whether or not master authorized networks is enabled. + Enabled bool `protobuf:"varint,1,opt,name=enabled" json:"enabled,omitempty"` + // cidr_blocks define up to 10 external networks that could access + // Kubernetes master through HTTPS. + CidrBlocks []*MasterAuthorizedNetworksConfig_CidrBlock `protobuf:"bytes,2,rep,name=cidr_blocks,json=cidrBlocks" json:"cidr_blocks,omitempty"` +} + +func (m *MasterAuthorizedNetworksConfig) Reset() { *m = MasterAuthorizedNetworksConfig{} } +func (m *MasterAuthorizedNetworksConfig) String() string { return proto.CompactTextString(m) } +func (*MasterAuthorizedNetworksConfig) ProtoMessage() {} +func (*MasterAuthorizedNetworksConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *MasterAuthorizedNetworksConfig) GetEnabled() bool { + if m != nil { + return m.Enabled + } + return false +} + +func (m *MasterAuthorizedNetworksConfig) GetCidrBlocks() []*MasterAuthorizedNetworksConfig_CidrBlock { + if m != nil { + return m.CidrBlocks + } + return nil +} + +// CidrBlock contains an optional name and one CIDR block. +type MasterAuthorizedNetworksConfig_CidrBlock struct { + // display_name is an optional field for users to identify CIDR blocks. + DisplayName string `protobuf:"bytes,1,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // cidr_block must be specified in CIDR notation. + CidrBlock string `protobuf:"bytes,2,opt,name=cidr_block,json=cidrBlock" json:"cidr_block,omitempty"` +} + +func (m *MasterAuthorizedNetworksConfig_CidrBlock) Reset() { + *m = MasterAuthorizedNetworksConfig_CidrBlock{} +} +func (m *MasterAuthorizedNetworksConfig_CidrBlock) String() string { return proto.CompactTextString(m) } +func (*MasterAuthorizedNetworksConfig_CidrBlock) ProtoMessage() {} +func (*MasterAuthorizedNetworksConfig_CidrBlock) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{8, 0} +} + +func (m *MasterAuthorizedNetworksConfig_CidrBlock) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func (m *MasterAuthorizedNetworksConfig_CidrBlock) GetCidrBlock() string { + if m != nil { + return m.CidrBlock + } + return "" +} + // Configuration for the legacy Attribute Based Access Control authorization // mode. type LegacyAbac struct { @@ -606,7 +842,7 @@ type LegacyAbac struct { func (m *LegacyAbac) Reset() { *m = LegacyAbac{} } func (m *LegacyAbac) String() string { return proto.CompactTextString(m) } func (*LegacyAbac) ProtoMessage() {} -func (*LegacyAbac) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } +func (*LegacyAbac) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } func (m *LegacyAbac) GetEnabled() bool { if m != nil { @@ -615,6 +851,199 @@ func (m *LegacyAbac) GetEnabled() bool { return false } +// Configuration options for the NetworkPolicy feature. +// https://kubernetes.io/docs/concepts/services-networking/networkpolicies/ +type NetworkPolicy struct { + // The selected network policy provider. + Provider NetworkPolicy_Provider `protobuf:"varint,1,opt,name=provider,enum=google.container.v1.NetworkPolicy_Provider" json:"provider,omitempty"` + // Whether network policy is enabled on the cluster. + Enabled bool `protobuf:"varint,2,opt,name=enabled" json:"enabled,omitempty"` +} + +func (m *NetworkPolicy) Reset() { *m = NetworkPolicy{} } +func (m *NetworkPolicy) String() string { return proto.CompactTextString(m) } +func (*NetworkPolicy) ProtoMessage() {} +func (*NetworkPolicy) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *NetworkPolicy) GetProvider() NetworkPolicy_Provider { + if m != nil { + return m.Provider + } + return NetworkPolicy_PROVIDER_UNSPECIFIED +} + +func (m *NetworkPolicy) GetEnabled() bool { + if m != nil { + return m.Enabled + } + return false +} + +// Configuration for controlling how IPs are allocated in the cluster. +type IPAllocationPolicy struct { + // Whether alias IPs will be used for pod IPs in the cluster. + UseIpAliases bool `protobuf:"varint,1,opt,name=use_ip_aliases,json=useIpAliases" json:"use_ip_aliases,omitempty"` + // Whether a new subnetwork will be created automatically for the cluster. + // + // This field is only applicable when `use_ip_aliases` is true. + CreateSubnetwork bool `protobuf:"varint,2,opt,name=create_subnetwork,json=createSubnetwork" json:"create_subnetwork,omitempty"` + // A custom subnetwork name to be used if `create_subnetwork` is true. If + // this field is empty, then an automatic name will be chosen for the new + // subnetwork. + SubnetworkName string `protobuf:"bytes,3,opt,name=subnetwork_name,json=subnetworkName" json:"subnetwork_name,omitempty"` + // This field is deprecated, use cluster_ipv4_cidr_block. + ClusterIpv4Cidr string `protobuf:"bytes,4,opt,name=cluster_ipv4_cidr,json=clusterIpv4Cidr" json:"cluster_ipv4_cidr,omitempty"` + // This field is deprecated, use node_ipv4_cidr_block. + NodeIpv4Cidr string `protobuf:"bytes,5,opt,name=node_ipv4_cidr,json=nodeIpv4Cidr" json:"node_ipv4_cidr,omitempty"` + // This field is deprecated, use services_ipv4_cidr_block. + ServicesIpv4Cidr string `protobuf:"bytes,6,opt,name=services_ipv4_cidr,json=servicesIpv4Cidr" json:"services_ipv4_cidr,omitempty"` + // The name of the secondary range to be used for the cluster CIDR + // block. The secondary range will be used for pod IP + // addresses. This must be an existing secondary range associated + // with the cluster subnetwork. + // + // This field is only applicable with use_ip_aliases is true and + // create_subnetwork is false. + ClusterSecondaryRangeName string `protobuf:"bytes,7,opt,name=cluster_secondary_range_name,json=clusterSecondaryRangeName" json:"cluster_secondary_range_name,omitempty"` + // The name of the secondary range to be used as for the services + // CIDR block. The secondary range will be used for service + // ClusterIPs. This must be an existing secondary range associated + // with the cluster subnetwork. + // + // This field is only applicable with use_ip_aliases is true and + // create_subnetwork is false. + ServicesSecondaryRangeName string `protobuf:"bytes,8,opt,name=services_secondary_range_name,json=servicesSecondaryRangeName" json:"services_secondary_range_name,omitempty"` + // The IP address range for the cluster pod IPs. If this field is set, then + // `cluster.cluster_ipv4_cidr` must be left blank. + // + // This field is only applicable when `use_ip_aliases` is true. + // + // Set to blank to have a range chosen with the default size. + // + // Set to /netmask (e.g. `/14`) to have a range chosen with a specific + // netmask. + // + // Set to a + // [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) + // notation (e.g. `10.96.0.0/14`) from the RFC-1918 private networks (e.g. + // `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`) to pick a specific range + // to use. + ClusterIpv4CidrBlock string `protobuf:"bytes,9,opt,name=cluster_ipv4_cidr_block,json=clusterIpv4CidrBlock" json:"cluster_ipv4_cidr_block,omitempty"` + // The IP address range of the instance IPs in this cluster. + // + // This is applicable only if `create_subnetwork` is true. + // + // Set to blank to have a range chosen with the default size. + // + // Set to /netmask (e.g. `/14`) to have a range chosen with a specific + // netmask. + // + // Set to a + // [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) + // notation (e.g. `10.96.0.0/14`) from the RFC-1918 private networks (e.g. + // `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`) to pick a specific range + // to use. + NodeIpv4CidrBlock string `protobuf:"bytes,10,opt,name=node_ipv4_cidr_block,json=nodeIpv4CidrBlock" json:"node_ipv4_cidr_block,omitempty"` + // The IP address range of the services IPs in this cluster. If blank, a range + // will be automatically chosen with the default size. + // + // This field is only applicable when `use_ip_aliases` is true. + // + // Set to blank to have a range chosen with the default size. + // + // Set to /netmask (e.g. `/14`) to have a range chosen with a specific + // netmask. + // + // Set to a + // [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) + // notation (e.g. `10.96.0.0/14`) from the RFC-1918 private networks (e.g. + // `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`) to pick a specific range + // to use. + ServicesIpv4CidrBlock string `protobuf:"bytes,11,opt,name=services_ipv4_cidr_block,json=servicesIpv4CidrBlock" json:"services_ipv4_cidr_block,omitempty"` +} + +func (m *IPAllocationPolicy) Reset() { *m = IPAllocationPolicy{} } +func (m *IPAllocationPolicy) String() string { return proto.CompactTextString(m) } +func (*IPAllocationPolicy) ProtoMessage() {} +func (*IPAllocationPolicy) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *IPAllocationPolicy) GetUseIpAliases() bool { + if m != nil { + return m.UseIpAliases + } + return false +} + +func (m *IPAllocationPolicy) GetCreateSubnetwork() bool { + if m != nil { + return m.CreateSubnetwork + } + return false +} + +func (m *IPAllocationPolicy) GetSubnetworkName() string { + if m != nil { + return m.SubnetworkName + } + return "" +} + +func (m *IPAllocationPolicy) GetClusterIpv4Cidr() string { + if m != nil { + return m.ClusterIpv4Cidr + } + return "" +} + +func (m *IPAllocationPolicy) GetNodeIpv4Cidr() string { + if m != nil { + return m.NodeIpv4Cidr + } + return "" +} + +func (m *IPAllocationPolicy) GetServicesIpv4Cidr() string { + if m != nil { + return m.ServicesIpv4Cidr + } + return "" +} + +func (m *IPAllocationPolicy) GetClusterSecondaryRangeName() string { + if m != nil { + return m.ClusterSecondaryRangeName + } + return "" +} + +func (m *IPAllocationPolicy) GetServicesSecondaryRangeName() string { + if m != nil { + return m.ServicesSecondaryRangeName + } + return "" +} + +func (m *IPAllocationPolicy) GetClusterIpv4CidrBlock() string { + if m != nil { + return m.ClusterIpv4CidrBlock + } + return "" +} + +func (m *IPAllocationPolicy) GetNodeIpv4CidrBlock() string { + if m != nil { + return m.NodeIpv4CidrBlock + } + return "" +} + +func (m *IPAllocationPolicy) GetServicesIpv4CidrBlock() string { + if m != nil { + return m.ServicesIpv4CidrBlock + } + return "" +} + // A Google Container Engine cluster. type Cluster struct { // The name of this cluster. The name must be unique within this project @@ -700,6 +1129,15 @@ type Cluster struct { LabelFingerprint string `protobuf:"bytes,16,opt,name=label_fingerprint,json=labelFingerprint" json:"label_fingerprint,omitempty"` // Configuration for the legacy ABAC authorization mode. LegacyAbac *LegacyAbac `protobuf:"bytes,18,opt,name=legacy_abac,json=legacyAbac" json:"legacy_abac,omitempty"` + // Configuration options for the NetworkPolicy feature. + NetworkPolicy *NetworkPolicy `protobuf:"bytes,19,opt,name=network_policy,json=networkPolicy" json:"network_policy,omitempty"` + // Configuration for cluster IP allocation. + IpAllocationPolicy *IPAllocationPolicy `protobuf:"bytes,20,opt,name=ip_allocation_policy,json=ipAllocationPolicy" json:"ip_allocation_policy,omitempty"` + // Master authorized networks is a Beta feature. + // The configuration options for master authorized networks feature. + MasterAuthorizedNetworksConfig *MasterAuthorizedNetworksConfig `protobuf:"bytes,22,opt,name=master_authorized_networks_config,json=masterAuthorizedNetworksConfig" json:"master_authorized_networks_config,omitempty"` + // Configure the maintenance policy for this cluster. + MaintenancePolicy *MaintenancePolicy `protobuf:"bytes,23,opt,name=maintenance_policy,json=maintenancePolicy" json:"maintenance_policy,omitempty"` // [Output only] Server-defined URL for the resource. SelfLink string `protobuf:"bytes,100,opt,name=self_link,json=selfLink" json:"self_link,omitempty"` // [Output only] The name of the Google Compute Engine @@ -742,9 +1180,7 @@ type Cluster struct { // notation (e.g. `1.2.3.4/29`). Service addresses are // typically put in the last `/16` from the container CIDR. ServicesIpv4Cidr string `protobuf:"bytes,110,opt,name=services_ipv4_cidr,json=servicesIpv4Cidr" json:"services_ipv4_cidr,omitempty"` - // [Output only] The resource URLs of [instance - // groups](/compute/docs/instance-groups/) associated with this - // cluster. + // Deprecated. Use node_pools.instance_group_urls. InstanceGroupUrls []string `protobuf:"bytes,111,rep,name=instance_group_urls,json=instanceGroupUrls" json:"instance_group_urls,omitempty"` // [Output only] The number of nodes currently in the cluster. CurrentNodeCount int32 `protobuf:"varint,112,opt,name=current_node_count,json=currentNodeCount" json:"current_node_count,omitempty"` @@ -756,7 +1192,7 @@ type Cluster struct { func (m *Cluster) Reset() { *m = Cluster{} } func (m *Cluster) String() string { return proto.CompactTextString(m) } func (*Cluster) ProtoMessage() {} -func (*Cluster) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } +func (*Cluster) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } func (m *Cluster) GetName() string { if m != nil { @@ -877,6 +1313,34 @@ func (m *Cluster) GetLegacyAbac() *LegacyAbac { return nil } +func (m *Cluster) GetNetworkPolicy() *NetworkPolicy { + if m != nil { + return m.NetworkPolicy + } + return nil +} + +func (m *Cluster) GetIpAllocationPolicy() *IPAllocationPolicy { + if m != nil { + return m.IpAllocationPolicy + } + return nil +} + +func (m *Cluster) GetMasterAuthorizedNetworksConfig() *MasterAuthorizedNetworksConfig { + if m != nil { + return m.MasterAuthorizedNetworksConfig + } + return nil +} + +func (m *Cluster) GetMaintenancePolicy() *MaintenancePolicy { + if m != nil { + return m.MaintenancePolicy + } + return nil +} + func (m *Cluster) GetSelfLink() string { if m != nil { return m.SelfLink @@ -1012,6 +1476,9 @@ type ClusterUpdate struct { // // This list must always include the cluster's primary zone. DesiredLocations []string `protobuf:"bytes,10,rep,name=desired_locations,json=desiredLocations" json:"desired_locations,omitempty"` + // Master authorized networks is a Beta feature. + // The desired configuration options for master authorized networks feature. + DesiredMasterAuthorizedNetworksConfig *MasterAuthorizedNetworksConfig `protobuf:"bytes,12,opt,name=desired_master_authorized_networks_config,json=desiredMasterAuthorizedNetworksConfig" json:"desired_master_authorized_networks_config,omitempty"` // The Kubernetes version to change the master to. The only valid value is the // latest supported version. Use "-" to have the server automatically select // the latest version. @@ -1021,7 +1488,7 @@ type ClusterUpdate struct { func (m *ClusterUpdate) Reset() { *m = ClusterUpdate{} } func (m *ClusterUpdate) String() string { return proto.CompactTextString(m) } func (*ClusterUpdate) ProtoMessage() {} -func (*ClusterUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } +func (*ClusterUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } func (m *ClusterUpdate) GetDesiredNodeVersion() string { if m != nil { @@ -1072,6 +1539,13 @@ func (m *ClusterUpdate) GetDesiredLocations() []string { return nil } +func (m *ClusterUpdate) GetDesiredMasterAuthorizedNetworksConfig() *MasterAuthorizedNetworksConfig { + if m != nil { + return m.DesiredMasterAuthorizedNetworksConfig + } + return nil +} + func (m *ClusterUpdate) GetDesiredMasterVersion() string { if m != nil { return m.DesiredMasterVersion @@ -1100,12 +1574,18 @@ type Operation struct { SelfLink string `protobuf:"bytes,6,opt,name=self_link,json=selfLink" json:"self_link,omitempty"` // Server-defined URL for the target of the operation. TargetLink string `protobuf:"bytes,7,opt,name=target_link,json=targetLink" json:"target_link,omitempty"` + // [Output only] The time the operation started, in + // [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format. + StartTime string `protobuf:"bytes,10,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // [Output only] The time the operation completed, in + // [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format. + EndTime string `protobuf:"bytes,11,opt,name=end_time,json=endTime" json:"end_time,omitempty"` } func (m *Operation) Reset() { *m = Operation{} } func (m *Operation) String() string { return proto.CompactTextString(m) } func (*Operation) ProtoMessage() {} -func (*Operation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } +func (*Operation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } func (m *Operation) GetName() string { if m != nil { @@ -1163,6 +1643,20 @@ func (m *Operation) GetTargetLink() string { return "" } +func (m *Operation) GetStartTime() string { + if m != nil { + return m.StartTime + } + return "" +} + +func (m *Operation) GetEndTime() string { + if m != nil { + return m.EndTime + } + return "" +} + // CreateClusterRequest creates a cluster. type CreateClusterRequest struct { // The Google Developers Console [project ID or project @@ -1180,7 +1674,7 @@ type CreateClusterRequest struct { func (m *CreateClusterRequest) Reset() { *m = CreateClusterRequest{} } func (m *CreateClusterRequest) String() string { return proto.CompactTextString(m) } func (*CreateClusterRequest) ProtoMessage() {} -func (*CreateClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } +func (*CreateClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } func (m *CreateClusterRequest) GetProjectId() string { if m != nil { @@ -1219,7 +1713,7 @@ type GetClusterRequest struct { func (m *GetClusterRequest) Reset() { *m = GetClusterRequest{} } func (m *GetClusterRequest) String() string { return proto.CompactTextString(m) } func (*GetClusterRequest) ProtoMessage() {} -func (*GetClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } +func (*GetClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } func (m *GetClusterRequest) GetProjectId() string { if m != nil { @@ -1260,7 +1754,7 @@ type UpdateClusterRequest struct { func (m *UpdateClusterRequest) Reset() { *m = UpdateClusterRequest{} } func (m *UpdateClusterRequest) String() string { return proto.CompactTextString(m) } func (*UpdateClusterRequest) ProtoMessage() {} -func (*UpdateClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } +func (*UpdateClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } func (m *UpdateClusterRequest) GetProjectId() string { if m != nil { @@ -1290,8 +1784,8 @@ func (m *UpdateClusterRequest) GetUpdate() *ClusterUpdate { return nil } -// SetMasterAuthRequest updates the admin password of a cluster. -type SetMasterAuthRequest struct { +// UpdateNodePoolRequests update a node pool's image and/or version. +type UpdateNodePoolRequest struct { // The Google Developers Console [project ID or project // number](https://support.google.com/cloud/answer/6158840). ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` @@ -1301,54 +1795,65 @@ type SetMasterAuthRequest struct { Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` // The name of the cluster to upgrade. ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` - // The exact form of action to be taken on the master auth - Action SetMasterAuthRequest_Action `protobuf:"varint,4,opt,name=action,enum=google.container.v1.SetMasterAuthRequest_Action" json:"action,omitempty"` - // A description of the update. - Update *MasterAuth `protobuf:"bytes,5,opt,name=update" json:"update,omitempty"` + // The name of the node pool to upgrade. + NodePoolId string `protobuf:"bytes,4,opt,name=node_pool_id,json=nodePoolId" json:"node_pool_id,omitempty"` + // The Kubernetes version to change the nodes to (typically an + // upgrade). Use `-` to upgrade to the latest version supported by + // the server. + NodeVersion string `protobuf:"bytes,5,opt,name=node_version,json=nodeVersion" json:"node_version,omitempty"` + // The desired image type for the node pool. + ImageType string `protobuf:"bytes,6,opt,name=image_type,json=imageType" json:"image_type,omitempty"` } -func (m *SetMasterAuthRequest) Reset() { *m = SetMasterAuthRequest{} } -func (m *SetMasterAuthRequest) String() string { return proto.CompactTextString(m) } -func (*SetMasterAuthRequest) ProtoMessage() {} -func (*SetMasterAuthRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } +func (m *UpdateNodePoolRequest) Reset() { *m = UpdateNodePoolRequest{} } +func (m *UpdateNodePoolRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateNodePoolRequest) ProtoMessage() {} +func (*UpdateNodePoolRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } -func (m *SetMasterAuthRequest) GetProjectId() string { +func (m *UpdateNodePoolRequest) GetProjectId() string { if m != nil { return m.ProjectId } return "" } -func (m *SetMasterAuthRequest) GetZone() string { +func (m *UpdateNodePoolRequest) GetZone() string { if m != nil { return m.Zone } return "" } -func (m *SetMasterAuthRequest) GetClusterId() string { +func (m *UpdateNodePoolRequest) GetClusterId() string { if m != nil { return m.ClusterId } return "" } -func (m *SetMasterAuthRequest) GetAction() SetMasterAuthRequest_Action { +func (m *UpdateNodePoolRequest) GetNodePoolId() string { if m != nil { - return m.Action + return m.NodePoolId } - return SetMasterAuthRequest_UNKNOWN + return "" } -func (m *SetMasterAuthRequest) GetUpdate() *MasterAuth { +func (m *UpdateNodePoolRequest) GetNodeVersion() string { if m != nil { - return m.Update + return m.NodeVersion } - return nil + return "" } -// DeleteClusterRequest deletes a cluster. -type DeleteClusterRequest struct { +func (m *UpdateNodePoolRequest) GetImageType() string { + if m != nil { + return m.ImageType + } + return "" +} + +// SetNodePoolAutoscalingRequest sets the autoscaler settings of a node pool. +type SetNodePoolAutoscalingRequest struct { // The Google Developers Console [project ID or project // number](https://support.google.com/cloud/answer/6158840). ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` @@ -1356,14 +1861,385 @@ type DeleteClusterRequest struct { // [zone](/compute/docs/zones#available) in which the cluster // resides. Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` - // The name of the cluster to delete. + // The name of the cluster to upgrade. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The name of the node pool to upgrade. + NodePoolId string `protobuf:"bytes,4,opt,name=node_pool_id,json=nodePoolId" json:"node_pool_id,omitempty"` + // Autoscaling configuration for the node pool. + Autoscaling *NodePoolAutoscaling `protobuf:"bytes,5,opt,name=autoscaling" json:"autoscaling,omitempty"` +} + +func (m *SetNodePoolAutoscalingRequest) Reset() { *m = SetNodePoolAutoscalingRequest{} } +func (m *SetNodePoolAutoscalingRequest) String() string { return proto.CompactTextString(m) } +func (*SetNodePoolAutoscalingRequest) ProtoMessage() {} +func (*SetNodePoolAutoscalingRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } + +func (m *SetNodePoolAutoscalingRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *SetNodePoolAutoscalingRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *SetNodePoolAutoscalingRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *SetNodePoolAutoscalingRequest) GetNodePoolId() string { + if m != nil { + return m.NodePoolId + } + return "" +} + +func (m *SetNodePoolAutoscalingRequest) GetAutoscaling() *NodePoolAutoscaling { + if m != nil { + return m.Autoscaling + } + return nil +} + +// SetLoggingServiceRequest sets the logging service of a cluster. +type SetLoggingServiceRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to upgrade. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The logging service the cluster should use to write metrics. + // Currently available options: + // + // * "logging.googleapis.com" - the Google Cloud Logging service + // * "none" - no metrics will be exported from the cluster + LoggingService string `protobuf:"bytes,4,opt,name=logging_service,json=loggingService" json:"logging_service,omitempty"` +} + +func (m *SetLoggingServiceRequest) Reset() { *m = SetLoggingServiceRequest{} } +func (m *SetLoggingServiceRequest) String() string { return proto.CompactTextString(m) } +func (*SetLoggingServiceRequest) ProtoMessage() {} +func (*SetLoggingServiceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } + +func (m *SetLoggingServiceRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *SetLoggingServiceRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *SetLoggingServiceRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *SetLoggingServiceRequest) GetLoggingService() string { + if m != nil { + return m.LoggingService + } + return "" +} + +// SetMonitoringServiceRequest sets the monitoring service of a cluster. +type SetMonitoringServiceRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to upgrade. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The monitoring service the cluster should use to write metrics. + // Currently available options: + // + // * "monitoring.googleapis.com" - the Google Cloud Monitoring service + // * "none" - no metrics will be exported from the cluster + MonitoringService string `protobuf:"bytes,4,opt,name=monitoring_service,json=monitoringService" json:"monitoring_service,omitempty"` +} + +func (m *SetMonitoringServiceRequest) Reset() { *m = SetMonitoringServiceRequest{} } +func (m *SetMonitoringServiceRequest) String() string { return proto.CompactTextString(m) } +func (*SetMonitoringServiceRequest) ProtoMessage() {} +func (*SetMonitoringServiceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } + +func (m *SetMonitoringServiceRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *SetMonitoringServiceRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *SetMonitoringServiceRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *SetMonitoringServiceRequest) GetMonitoringService() string { + if m != nil { + return m.MonitoringService + } + return "" +} + +// SetAddonsConfigRequest sets the addons associated with the cluster. +type SetAddonsConfigRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to upgrade. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The desired configurations for the various addons available to run in the + // cluster. + AddonsConfig *AddonsConfig `protobuf:"bytes,4,opt,name=addons_config,json=addonsConfig" json:"addons_config,omitempty"` +} + +func (m *SetAddonsConfigRequest) Reset() { *m = SetAddonsConfigRequest{} } +func (m *SetAddonsConfigRequest) String() string { return proto.CompactTextString(m) } +func (*SetAddonsConfigRequest) ProtoMessage() {} +func (*SetAddonsConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } + +func (m *SetAddonsConfigRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *SetAddonsConfigRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *SetAddonsConfigRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *SetAddonsConfigRequest) GetAddonsConfig() *AddonsConfig { + if m != nil { + return m.AddonsConfig + } + return nil +} + +// SetLocationsRequest sets the locations of the cluster. +type SetLocationsRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to upgrade. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The desired list of Google Compute Engine + // [locations](/compute/docs/zones#available) in which the cluster's nodes + // should be located. Changing the locations a cluster is in will result + // in nodes being either created or removed from the cluster, depending on + // whether locations are being added or removed. + // + // This list must always include the cluster's primary zone. + Locations []string `protobuf:"bytes,4,rep,name=locations" json:"locations,omitempty"` +} + +func (m *SetLocationsRequest) Reset() { *m = SetLocationsRequest{} } +func (m *SetLocationsRequest) String() string { return proto.CompactTextString(m) } +func (*SetLocationsRequest) ProtoMessage() {} +func (*SetLocationsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } + +func (m *SetLocationsRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *SetLocationsRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *SetLocationsRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *SetLocationsRequest) GetLocations() []string { + if m != nil { + return m.Locations + } + return nil +} + +// UpdateMasterRequest updates the master of the cluster. +type UpdateMasterRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to upgrade. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The Kubernetes version to change the master to. The only valid value is the + // latest supported version. Use "-" to have the server automatically select + // the latest version. + MasterVersion string `protobuf:"bytes,4,opt,name=master_version,json=masterVersion" json:"master_version,omitempty"` +} + +func (m *UpdateMasterRequest) Reset() { *m = UpdateMasterRequest{} } +func (m *UpdateMasterRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateMasterRequest) ProtoMessage() {} +func (*UpdateMasterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} } + +func (m *UpdateMasterRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *UpdateMasterRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *UpdateMasterRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *UpdateMasterRequest) GetMasterVersion() string { + if m != nil { + return m.MasterVersion + } + return "" +} + +// SetMasterAuthRequest updates the admin password of a cluster. +type SetMasterAuthRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to upgrade. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The exact form of action to be taken on the master auth. + Action SetMasterAuthRequest_Action `protobuf:"varint,4,opt,name=action,enum=google.container.v1.SetMasterAuthRequest_Action" json:"action,omitempty"` + // A description of the update. + Update *MasterAuth `protobuf:"bytes,5,opt,name=update" json:"update,omitempty"` +} + +func (m *SetMasterAuthRequest) Reset() { *m = SetMasterAuthRequest{} } +func (m *SetMasterAuthRequest) String() string { return proto.CompactTextString(m) } +func (*SetMasterAuthRequest) ProtoMessage() {} +func (*SetMasterAuthRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } + +func (m *SetMasterAuthRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *SetMasterAuthRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *SetMasterAuthRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *SetMasterAuthRequest) GetAction() SetMasterAuthRequest_Action { + if m != nil { + return m.Action + } + return SetMasterAuthRequest_UNKNOWN +} + +func (m *SetMasterAuthRequest) GetUpdate() *MasterAuth { + if m != nil { + return m.Update + } + return nil +} + +// DeleteClusterRequest deletes a cluster. +type DeleteClusterRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to delete. ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` } func (m *DeleteClusterRequest) Reset() { *m = DeleteClusterRequest{} } func (m *DeleteClusterRequest) String() string { return proto.CompactTextString(m) } func (*DeleteClusterRequest) ProtoMessage() {} -func (*DeleteClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } +func (*DeleteClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} } func (m *DeleteClusterRequest) GetProjectId() string { if m != nil { @@ -1400,7 +2276,7 @@ type ListClustersRequest struct { func (m *ListClustersRequest) Reset() { *m = ListClustersRequest{} } func (m *ListClustersRequest) String() string { return proto.CompactTextString(m) } func (*ListClustersRequest) ProtoMessage() {} -func (*ListClustersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } +func (*ListClustersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} } func (m *ListClustersRequest) GetProjectId() string { if m != nil { @@ -1429,7 +2305,7 @@ type ListClustersResponse struct { func (m *ListClustersResponse) Reset() { *m = ListClustersResponse{} } func (m *ListClustersResponse) String() string { return proto.CompactTextString(m) } func (*ListClustersResponse) ProtoMessage() {} -func (*ListClustersResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } +func (*ListClustersResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} } func (m *ListClustersResponse) GetClusters() []*Cluster { if m != nil { @@ -1461,7 +2337,7 @@ type GetOperationRequest struct { func (m *GetOperationRequest) Reset() { *m = GetOperationRequest{} } func (m *GetOperationRequest) String() string { return proto.CompactTextString(m) } func (*GetOperationRequest) ProtoMessage() {} -func (*GetOperationRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } +func (*GetOperationRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} } func (m *GetOperationRequest) GetProjectId() string { if m != nil { @@ -1497,7 +2373,7 @@ type ListOperationsRequest struct { func (m *ListOperationsRequest) Reset() { *m = ListOperationsRequest{} } func (m *ListOperationsRequest) String() string { return proto.CompactTextString(m) } func (*ListOperationsRequest) ProtoMessage() {} -func (*ListOperationsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } +func (*ListOperationsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} } func (m *ListOperationsRequest) GetProjectId() string { if m != nil { @@ -1528,7 +2404,7 @@ type CancelOperationRequest struct { func (m *CancelOperationRequest) Reset() { *m = CancelOperationRequest{} } func (m *CancelOperationRequest) String() string { return proto.CompactTextString(m) } func (*CancelOperationRequest) ProtoMessage() {} -func (*CancelOperationRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } +func (*CancelOperationRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} } func (m *CancelOperationRequest) GetProjectId() string { if m != nil { @@ -1563,7 +2439,7 @@ type ListOperationsResponse struct { func (m *ListOperationsResponse) Reset() { *m = ListOperationsResponse{} } func (m *ListOperationsResponse) String() string { return proto.CompactTextString(m) } func (*ListOperationsResponse) ProtoMessage() {} -func (*ListOperationsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } +func (*ListOperationsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} } func (m *ListOperationsResponse) GetOperations() []*Operation { if m != nil { @@ -1592,7 +2468,7 @@ type GetServerConfigRequest struct { func (m *GetServerConfigRequest) Reset() { *m = GetServerConfigRequest{} } func (m *GetServerConfigRequest) String() string { return proto.CompactTextString(m) } func (*GetServerConfigRequest) ProtoMessage() {} -func (*GetServerConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } +func (*GetServerConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} } func (m *GetServerConfigRequest) GetProjectId() string { if m != nil { @@ -1625,7 +2501,7 @@ type ServerConfig struct { func (m *ServerConfig) Reset() { *m = ServerConfig{} } func (m *ServerConfig) String() string { return proto.CompactTextString(m) } func (*ServerConfig) ProtoMessage() {} -func (*ServerConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } +func (*ServerConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} } func (m *ServerConfig) GetDefaultClusterVersion() string { if m != nil { @@ -1680,7 +2556,7 @@ type CreateNodePoolRequest struct { func (m *CreateNodePoolRequest) Reset() { *m = CreateNodePoolRequest{} } func (m *CreateNodePoolRequest) String() string { return proto.CompactTextString(m) } func (*CreateNodePoolRequest) ProtoMessage() {} -func (*CreateNodePoolRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } +func (*CreateNodePoolRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} } func (m *CreateNodePoolRequest) GetProjectId() string { if m != nil { @@ -1728,7 +2604,7 @@ type DeleteNodePoolRequest struct { func (m *DeleteNodePoolRequest) Reset() { *m = DeleteNodePoolRequest{} } func (m *DeleteNodePoolRequest) String() string { return proto.CompactTextString(m) } func (*DeleteNodePoolRequest) ProtoMessage() {} -func (*DeleteNodePoolRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } +func (*DeleteNodePoolRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} } func (m *DeleteNodePoolRequest) GetProjectId() string { if m != nil { @@ -1774,7 +2650,7 @@ type ListNodePoolsRequest struct { func (m *ListNodePoolsRequest) Reset() { *m = ListNodePoolsRequest{} } func (m *ListNodePoolsRequest) String() string { return proto.CompactTextString(m) } func (*ListNodePoolsRequest) ProtoMessage() {} -func (*ListNodePoolsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} } +func (*ListNodePoolsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} } func (m *ListNodePoolsRequest) GetProjectId() string { if m != nil { @@ -1815,7 +2691,7 @@ type GetNodePoolRequest struct { func (m *GetNodePoolRequest) Reset() { *m = GetNodePoolRequest{} } func (m *GetNodePoolRequest) String() string { return proto.CompactTextString(m) } func (*GetNodePoolRequest) ProtoMessage() {} -func (*GetNodePoolRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } +func (*GetNodePoolRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} } func (m *GetNodePoolRequest) GetProjectId() string { if m != nil { @@ -1863,11 +2739,11 @@ type NodePool struct { InitialNodeCount int32 `protobuf:"varint,3,opt,name=initial_node_count,json=initialNodeCount" json:"initial_node_count,omitempty"` // [Output only] Server-defined URL for the resource. SelfLink string `protobuf:"bytes,100,opt,name=self_link,json=selfLink" json:"self_link,omitempty"` - // [Output only] The version of the Kubernetes of this node. + // The version of the Kubernetes of this node. Version string `protobuf:"bytes,101,opt,name=version" json:"version,omitempty"` - // [Output only] The resource URLs of [instance - // groups](/compute/docs/instance-groups/) associated with this - // node pool. + // [Output only] The resource URLs of the [managed instance + // groups](/compute/docs/instance-groups/creating-groups-of-managed-instances) + // associated with this node pool. InstanceGroupUrls []string `protobuf:"bytes,102,rep,name=instance_group_urls,json=instanceGroupUrls" json:"instance_group_urls,omitempty"` // [Output only] The status of the nodes in this pool instance. Status NodePool_Status `protobuf:"varint,103,opt,name=status,enum=google.container.v1.NodePool_Status" json:"status,omitempty"` @@ -1884,7 +2760,7 @@ type NodePool struct { func (m *NodePool) Reset() { *m = NodePool{} } func (m *NodePool) String() string { return proto.CompactTextString(m) } func (*NodePool) ProtoMessage() {} -func (*NodePool) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} } +func (*NodePool) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} } func (m *NodePool) GetName() string { if m != nil { @@ -1975,7 +2851,7 @@ type NodeManagement struct { func (m *NodeManagement) Reset() { *m = NodeManagement{} } func (m *NodeManagement) String() string { return proto.CompactTextString(m) } func (*NodeManagement) ProtoMessage() {} -func (*NodeManagement) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} } +func (*NodeManagement) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} } func (m *NodeManagement) GetAutoUpgrade() bool { if m != nil { @@ -2013,7 +2889,7 @@ type AutoUpgradeOptions struct { func (m *AutoUpgradeOptions) Reset() { *m = AutoUpgradeOptions{} } func (m *AutoUpgradeOptions) String() string { return proto.CompactTextString(m) } func (*AutoUpgradeOptions) ProtoMessage() {} -func (*AutoUpgradeOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} } +func (*AutoUpgradeOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41} } func (m *AutoUpgradeOptions) GetAutoUpgradeStartTime() string { if m != nil { @@ -2029,6 +2905,147 @@ func (m *AutoUpgradeOptions) GetDescription() string { return "" } +// MaintenancePolicy defines the maintenance policy to be used for the cluster. +type MaintenancePolicy struct { + // Specifies the maintenance window in which maintenance may be performed. + Window *MaintenanceWindow `protobuf:"bytes,1,opt,name=window" json:"window,omitempty"` +} + +func (m *MaintenancePolicy) Reset() { *m = MaintenancePolicy{} } +func (m *MaintenancePolicy) String() string { return proto.CompactTextString(m) } +func (*MaintenancePolicy) ProtoMessage() {} +func (*MaintenancePolicy) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{42} } + +func (m *MaintenancePolicy) GetWindow() *MaintenanceWindow { + if m != nil { + return m.Window + } + return nil +} + +// MaintenanceWindow defines the maintenance window to be used for the cluster. +type MaintenanceWindow struct { + // Types that are valid to be assigned to Policy: + // *MaintenanceWindow_DailyMaintenanceWindow + Policy isMaintenanceWindow_Policy `protobuf_oneof:"policy"` +} + +func (m *MaintenanceWindow) Reset() { *m = MaintenanceWindow{} } +func (m *MaintenanceWindow) String() string { return proto.CompactTextString(m) } +func (*MaintenanceWindow) ProtoMessage() {} +func (*MaintenanceWindow) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{43} } + +type isMaintenanceWindow_Policy interface { + isMaintenanceWindow_Policy() +} + +type MaintenanceWindow_DailyMaintenanceWindow struct { + DailyMaintenanceWindow *DailyMaintenanceWindow `protobuf:"bytes,2,opt,name=daily_maintenance_window,json=dailyMaintenanceWindow,oneof"` +} + +func (*MaintenanceWindow_DailyMaintenanceWindow) isMaintenanceWindow_Policy() {} + +func (m *MaintenanceWindow) GetPolicy() isMaintenanceWindow_Policy { + if m != nil { + return m.Policy + } + return nil +} + +func (m *MaintenanceWindow) GetDailyMaintenanceWindow() *DailyMaintenanceWindow { + if x, ok := m.GetPolicy().(*MaintenanceWindow_DailyMaintenanceWindow); ok { + return x.DailyMaintenanceWindow + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*MaintenanceWindow) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _MaintenanceWindow_OneofMarshaler, _MaintenanceWindow_OneofUnmarshaler, _MaintenanceWindow_OneofSizer, []interface{}{ + (*MaintenanceWindow_DailyMaintenanceWindow)(nil), + } +} + +func _MaintenanceWindow_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*MaintenanceWindow) + // policy + switch x := m.Policy.(type) { + case *MaintenanceWindow_DailyMaintenanceWindow: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DailyMaintenanceWindow); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("MaintenanceWindow.Policy has unexpected type %T", x) + } + return nil +} + +func _MaintenanceWindow_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*MaintenanceWindow) + switch tag { + case 2: // policy.daily_maintenance_window + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(DailyMaintenanceWindow) + err := b.DecodeMessage(msg) + m.Policy = &MaintenanceWindow_DailyMaintenanceWindow{msg} + return true, err + default: + return false, nil + } +} + +func _MaintenanceWindow_OneofSizer(msg proto.Message) (n int) { + m := msg.(*MaintenanceWindow) + // policy + switch x := m.Policy.(type) { + case *MaintenanceWindow_DailyMaintenanceWindow: + s := proto.Size(x.DailyMaintenanceWindow) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Time window specified for daily maintenance operations. +type DailyMaintenanceWindow struct { + // Time within the maintenance window to start the maintenance operations. + // Time format should be in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) + // format "HH:MM”, where HH : [00-23] and MM : [00-59] GMT. + StartTime string `protobuf:"bytes,2,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // [Output only] Duration of the time window, automatically chosen to be + // smallest possible in the given scenario. + // Duration will be in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) + // format "PTnHnMnS". + Duration string `protobuf:"bytes,3,opt,name=duration" json:"duration,omitempty"` +} + +func (m *DailyMaintenanceWindow) Reset() { *m = DailyMaintenanceWindow{} } +func (m *DailyMaintenanceWindow) String() string { return proto.CompactTextString(m) } +func (*DailyMaintenanceWindow) ProtoMessage() {} +func (*DailyMaintenanceWindow) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{44} } + +func (m *DailyMaintenanceWindow) GetStartTime() string { + if m != nil { + return m.StartTime + } + return "" +} + +func (m *DailyMaintenanceWindow) GetDuration() string { + if m != nil { + return m.Duration + } + return "" +} + // SetNodePoolManagementRequest sets the node management properties of a node // pool. type SetNodePoolManagementRequest struct { @@ -2050,7 +3067,7 @@ type SetNodePoolManagementRequest struct { func (m *SetNodePoolManagementRequest) Reset() { *m = SetNodePoolManagementRequest{} } func (m *SetNodePoolManagementRequest) String() string { return proto.CompactTextString(m) } func (*SetNodePoolManagementRequest) ProtoMessage() {} -func (*SetNodePoolManagementRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} } +func (*SetNodePoolManagementRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{45} } func (m *SetNodePoolManagementRequest) GetProjectId() string { if m != nil { @@ -2087,6 +3104,64 @@ func (m *SetNodePoolManagementRequest) GetManagement() *NodeManagement { return nil } +// SetNodePoolSizeRequest sets the size a node +// pool. +type SetNodePoolSizeRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to update. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The name of the node pool to update. + NodePoolId string `protobuf:"bytes,4,opt,name=node_pool_id,json=nodePoolId" json:"node_pool_id,omitempty"` + // The desired node count for the pool. + NodeCount int32 `protobuf:"varint,5,opt,name=node_count,json=nodeCount" json:"node_count,omitempty"` +} + +func (m *SetNodePoolSizeRequest) Reset() { *m = SetNodePoolSizeRequest{} } +func (m *SetNodePoolSizeRequest) String() string { return proto.CompactTextString(m) } +func (*SetNodePoolSizeRequest) ProtoMessage() {} +func (*SetNodePoolSizeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{46} } + +func (m *SetNodePoolSizeRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *SetNodePoolSizeRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *SetNodePoolSizeRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *SetNodePoolSizeRequest) GetNodePoolId() string { + if m != nil { + return m.NodePoolId + } + return "" +} + +func (m *SetNodePoolSizeRequest) GetNodeCount() int32 { + if m != nil { + return m.NodeCount + } + return 0 +} + // RollbackNodePoolUpgradeRequest rollbacks the previously Aborted or Failed // NodePool upgrade. This will be an no-op if the last upgrade successfully // completed. @@ -2107,7 +3182,7 @@ type RollbackNodePoolUpgradeRequest struct { func (m *RollbackNodePoolUpgradeRequest) Reset() { *m = RollbackNodePoolUpgradeRequest{} } func (m *RollbackNodePoolUpgradeRequest) String() string { return proto.CompactTextString(m) } func (*RollbackNodePoolUpgradeRequest) ProtoMessage() {} -func (*RollbackNodePoolUpgradeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} } +func (*RollbackNodePoolUpgradeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{47} } func (m *RollbackNodePoolUpgradeRequest) GetProjectId() string { if m != nil { @@ -2146,7 +3221,7 @@ type ListNodePoolsResponse struct { func (m *ListNodePoolsResponse) Reset() { *m = ListNodePoolsResponse{} } func (m *ListNodePoolsResponse) String() string { return proto.CompactTextString(m) } func (*ListNodePoolsResponse) ProtoMessage() {} -func (*ListNodePoolsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} } +func (*ListNodePoolsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{48} } func (m *ListNodePoolsResponse) GetNodePools() []*NodePool { if m != nil { @@ -2171,7 +3246,7 @@ type NodePoolAutoscaling struct { func (m *NodePoolAutoscaling) Reset() { *m = NodePoolAutoscaling{} } func (m *NodePoolAutoscaling) String() string { return proto.CompactTextString(m) } func (*NodePoolAutoscaling) ProtoMessage() {} -func (*NodePoolAutoscaling) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} } +func (*NodePoolAutoscaling) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{49} } func (m *NodePoolAutoscaling) GetEnabled() bool { if m != nil { @@ -2221,7 +3296,7 @@ type SetLabelsRequest struct { func (m *SetLabelsRequest) Reset() { *m = SetLabelsRequest{} } func (m *SetLabelsRequest) String() string { return proto.CompactTextString(m) } func (*SetLabelsRequest) ProtoMessage() {} -func (*SetLabelsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} } +func (*SetLabelsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{50} } func (m *SetLabelsRequest) GetProjectId() string { if m != nil { @@ -2277,7 +3352,7 @@ type SetLegacyAbacRequest struct { func (m *SetLegacyAbacRequest) Reset() { *m = SetLegacyAbacRequest{} } func (m *SetLegacyAbacRequest) String() string { return proto.CompactTextString(m) } func (*SetLegacyAbacRequest) ProtoMessage() {} -func (*SetLegacyAbacRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} } +func (*SetLegacyAbacRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{51} } func (m *SetLegacyAbacRequest) GetProjectId() string { if m != nil { @@ -2300,16 +3375,122 @@ func (m *SetLegacyAbacRequest) GetClusterId() string { return "" } -func (m *SetLegacyAbacRequest) GetEnabled() bool { +func (m *SetLegacyAbacRequest) GetEnabled() bool { + if m != nil { + return m.Enabled + } + return false +} + +// StartIPRotationRequest creates a new IP for the cluster and then performs +// a node upgrade on each node pool to point to the new IP. +type StartIPRotationRequest struct { + // The Google Developers Console [project ID or project + // number](https://developers.google.com/console/help/new/#projectnumber). + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` +} + +func (m *StartIPRotationRequest) Reset() { *m = StartIPRotationRequest{} } +func (m *StartIPRotationRequest) String() string { return proto.CompactTextString(m) } +func (*StartIPRotationRequest) ProtoMessage() {} +func (*StartIPRotationRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{52} } + +func (m *StartIPRotationRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *StartIPRotationRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *StartIPRotationRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +// CompleteIPRotationRequest moves the cluster master back into single-IP mode. +type CompleteIPRotationRequest struct { + // The Google Developers Console [project ID or project + // number](https://developers.google.com/console/help/new/#projectnumber). + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` +} + +func (m *CompleteIPRotationRequest) Reset() { *m = CompleteIPRotationRequest{} } +func (m *CompleteIPRotationRequest) String() string { return proto.CompactTextString(m) } +func (*CompleteIPRotationRequest) ProtoMessage() {} +func (*CompleteIPRotationRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{53} } + +func (m *CompleteIPRotationRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *CompleteIPRotationRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *CompleteIPRotationRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +// AcceleratorConfig represents a Hardware Accelerator request. +type AcceleratorConfig struct { + // The number of the accelerator cards exposed to an instance. + AcceleratorCount int64 `protobuf:"varint,1,opt,name=accelerator_count,json=acceleratorCount" json:"accelerator_count,omitempty"` + // The accelerator type resource name. List of supported accelerators + // [here](/compute/docs/gpus/#Introduction) + AcceleratorType string `protobuf:"bytes,2,opt,name=accelerator_type,json=acceleratorType" json:"accelerator_type,omitempty"` +} + +func (m *AcceleratorConfig) Reset() { *m = AcceleratorConfig{} } +func (m *AcceleratorConfig) String() string { return proto.CompactTextString(m) } +func (*AcceleratorConfig) ProtoMessage() {} +func (*AcceleratorConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{54} } + +func (m *AcceleratorConfig) GetAcceleratorCount() int64 { + if m != nil { + return m.AcceleratorCount + } + return 0 +} + +func (m *AcceleratorConfig) GetAcceleratorType() string { if m != nil { - return m.Enabled + return m.AcceleratorType } - return false + return "" } -// StartIPRotationRequest creates a new IP for the cluster and then performs -// a node upgrade on each node pool to point to the new IP. -type StartIPRotationRequest struct { +// SetNetworkPolicyRequest enables/disables network policy for a cluster. +type SetNetworkPolicyRequest struct { // The Google Developers Console [project ID or project // number](https://developers.google.com/console/help/new/#projectnumber). ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` @@ -2319,86 +3500,119 @@ type StartIPRotationRequest struct { Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` // The name of the cluster. ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // Configuration options for the NetworkPolicy feature. + NetworkPolicy *NetworkPolicy `protobuf:"bytes,4,opt,name=network_policy,json=networkPolicy" json:"network_policy,omitempty"` } -func (m *StartIPRotationRequest) Reset() { *m = StartIPRotationRequest{} } -func (m *StartIPRotationRequest) String() string { return proto.CompactTextString(m) } -func (*StartIPRotationRequest) ProtoMessage() {} -func (*StartIPRotationRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} } +func (m *SetNetworkPolicyRequest) Reset() { *m = SetNetworkPolicyRequest{} } +func (m *SetNetworkPolicyRequest) String() string { return proto.CompactTextString(m) } +func (*SetNetworkPolicyRequest) ProtoMessage() {} +func (*SetNetworkPolicyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{55} } -func (m *StartIPRotationRequest) GetProjectId() string { +func (m *SetNetworkPolicyRequest) GetProjectId() string { if m != nil { return m.ProjectId } return "" } -func (m *StartIPRotationRequest) GetZone() string { +func (m *SetNetworkPolicyRequest) GetZone() string { if m != nil { return m.Zone } return "" } -func (m *StartIPRotationRequest) GetClusterId() string { +func (m *SetNetworkPolicyRequest) GetClusterId() string { if m != nil { return m.ClusterId } return "" } -// CompleteIPRotationRequest moves the cluster master back into single-IP mode. -type CompleteIPRotationRequest struct { +func (m *SetNetworkPolicyRequest) GetNetworkPolicy() *NetworkPolicy { + if m != nil { + return m.NetworkPolicy + } + return nil +} + +// SetMaintenancePolicyRequest sets the maintenance policy for a cluster. +type SetMaintenancePolicyRequest struct { // The Google Developers Console [project ID or project - // number](https://developers.google.com/console/help/new/#projectnumber). + // number](https://support.google.com/cloud/answer/6158840). ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` // The name of the Google Compute Engine // [zone](/compute/docs/zones#available) in which the cluster // resides. Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` - // The name of the cluster. + // The name of the cluster to update. ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The maintenance policy to be set for the cluster. An empty field + // clears the existing maintenance policy. + MaintenancePolicy *MaintenancePolicy `protobuf:"bytes,4,opt,name=maintenance_policy,json=maintenancePolicy" json:"maintenance_policy,omitempty"` } -func (m *CompleteIPRotationRequest) Reset() { *m = CompleteIPRotationRequest{} } -func (m *CompleteIPRotationRequest) String() string { return proto.CompactTextString(m) } -func (*CompleteIPRotationRequest) ProtoMessage() {} -func (*CompleteIPRotationRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} } +func (m *SetMaintenancePolicyRequest) Reset() { *m = SetMaintenancePolicyRequest{} } +func (m *SetMaintenancePolicyRequest) String() string { return proto.CompactTextString(m) } +func (*SetMaintenancePolicyRequest) ProtoMessage() {} +func (*SetMaintenancePolicyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{56} } -func (m *CompleteIPRotationRequest) GetProjectId() string { +func (m *SetMaintenancePolicyRequest) GetProjectId() string { if m != nil { return m.ProjectId } return "" } -func (m *CompleteIPRotationRequest) GetZone() string { +func (m *SetMaintenancePolicyRequest) GetZone() string { if m != nil { return m.Zone } return "" } -func (m *CompleteIPRotationRequest) GetClusterId() string { +func (m *SetMaintenancePolicyRequest) GetClusterId() string { if m != nil { return m.ClusterId } return "" } +func (m *SetMaintenancePolicyRequest) GetMaintenancePolicy() *MaintenancePolicy { + if m != nil { + return m.MaintenancePolicy + } + return nil +} + func init() { proto.RegisterType((*NodeConfig)(nil), "google.container.v1.NodeConfig") proto.RegisterType((*MasterAuth)(nil), "google.container.v1.MasterAuth") + proto.RegisterType((*ClientCertificateConfig)(nil), "google.container.v1.ClientCertificateConfig") proto.RegisterType((*AddonsConfig)(nil), "google.container.v1.AddonsConfig") proto.RegisterType((*HttpLoadBalancing)(nil), "google.container.v1.HttpLoadBalancing") proto.RegisterType((*HorizontalPodAutoscaling)(nil), "google.container.v1.HorizontalPodAutoscaling") + proto.RegisterType((*KubernetesDashboard)(nil), "google.container.v1.KubernetesDashboard") + proto.RegisterType((*NetworkPolicyConfig)(nil), "google.container.v1.NetworkPolicyConfig") + proto.RegisterType((*MasterAuthorizedNetworksConfig)(nil), "google.container.v1.MasterAuthorizedNetworksConfig") + proto.RegisterType((*MasterAuthorizedNetworksConfig_CidrBlock)(nil), "google.container.v1.MasterAuthorizedNetworksConfig.CidrBlock") proto.RegisterType((*LegacyAbac)(nil), "google.container.v1.LegacyAbac") + proto.RegisterType((*NetworkPolicy)(nil), "google.container.v1.NetworkPolicy") + proto.RegisterType((*IPAllocationPolicy)(nil), "google.container.v1.IPAllocationPolicy") proto.RegisterType((*Cluster)(nil), "google.container.v1.Cluster") proto.RegisterType((*ClusterUpdate)(nil), "google.container.v1.ClusterUpdate") proto.RegisterType((*Operation)(nil), "google.container.v1.Operation") proto.RegisterType((*CreateClusterRequest)(nil), "google.container.v1.CreateClusterRequest") proto.RegisterType((*GetClusterRequest)(nil), "google.container.v1.GetClusterRequest") proto.RegisterType((*UpdateClusterRequest)(nil), "google.container.v1.UpdateClusterRequest") + proto.RegisterType((*UpdateNodePoolRequest)(nil), "google.container.v1.UpdateNodePoolRequest") + proto.RegisterType((*SetNodePoolAutoscalingRequest)(nil), "google.container.v1.SetNodePoolAutoscalingRequest") + proto.RegisterType((*SetLoggingServiceRequest)(nil), "google.container.v1.SetLoggingServiceRequest") + proto.RegisterType((*SetMonitoringServiceRequest)(nil), "google.container.v1.SetMonitoringServiceRequest") + proto.RegisterType((*SetAddonsConfigRequest)(nil), "google.container.v1.SetAddonsConfigRequest") + proto.RegisterType((*SetLocationsRequest)(nil), "google.container.v1.SetLocationsRequest") + proto.RegisterType((*UpdateMasterRequest)(nil), "google.container.v1.UpdateMasterRequest") proto.RegisterType((*SetMasterAuthRequest)(nil), "google.container.v1.SetMasterAuthRequest") proto.RegisterType((*DeleteClusterRequest)(nil), "google.container.v1.DeleteClusterRequest") proto.RegisterType((*ListClustersRequest)(nil), "google.container.v1.ListClustersRequest") @@ -2416,7 +3630,11 @@ func init() { proto.RegisterType((*NodePool)(nil), "google.container.v1.NodePool") proto.RegisterType((*NodeManagement)(nil), "google.container.v1.NodeManagement") proto.RegisterType((*AutoUpgradeOptions)(nil), "google.container.v1.AutoUpgradeOptions") + proto.RegisterType((*MaintenancePolicy)(nil), "google.container.v1.MaintenancePolicy") + proto.RegisterType((*MaintenanceWindow)(nil), "google.container.v1.MaintenanceWindow") + proto.RegisterType((*DailyMaintenanceWindow)(nil), "google.container.v1.DailyMaintenanceWindow") proto.RegisterType((*SetNodePoolManagementRequest)(nil), "google.container.v1.SetNodePoolManagementRequest") + proto.RegisterType((*SetNodePoolSizeRequest)(nil), "google.container.v1.SetNodePoolSizeRequest") proto.RegisterType((*RollbackNodePoolUpgradeRequest)(nil), "google.container.v1.RollbackNodePoolUpgradeRequest") proto.RegisterType((*ListNodePoolsResponse)(nil), "google.container.v1.ListNodePoolsResponse") proto.RegisterType((*NodePoolAutoscaling)(nil), "google.container.v1.NodePoolAutoscaling") @@ -2424,6 +3642,10 @@ func init() { proto.RegisterType((*SetLegacyAbacRequest)(nil), "google.container.v1.SetLegacyAbacRequest") proto.RegisterType((*StartIPRotationRequest)(nil), "google.container.v1.StartIPRotationRequest") proto.RegisterType((*CompleteIPRotationRequest)(nil), "google.container.v1.CompleteIPRotationRequest") + proto.RegisterType((*AcceleratorConfig)(nil), "google.container.v1.AcceleratorConfig") + proto.RegisterType((*SetNetworkPolicyRequest)(nil), "google.container.v1.SetNetworkPolicyRequest") + proto.RegisterType((*SetMaintenancePolicyRequest)(nil), "google.container.v1.SetMaintenancePolicyRequest") + proto.RegisterEnum("google.container.v1.NetworkPolicy_Provider", NetworkPolicy_Provider_name, NetworkPolicy_Provider_value) proto.RegisterEnum("google.container.v1.Cluster_Status", Cluster_Status_name, Cluster_Status_value) proto.RegisterEnum("google.container.v1.Operation_Status", Operation_Status_name, Operation_Status_value) proto.RegisterEnum("google.container.v1.Operation_Type", Operation_Type_name, Operation_Type_value) @@ -2463,6 +3685,20 @@ type ClusterManagerClient interface { CreateCluster(ctx context.Context, in *CreateClusterRequest, opts ...grpc.CallOption) (*Operation, error) // Updates the settings of a specific cluster. UpdateCluster(ctx context.Context, in *UpdateClusterRequest, opts ...grpc.CallOption) (*Operation, error) + // Updates the version and/or image type of a specific node pool. + UpdateNodePool(ctx context.Context, in *UpdateNodePoolRequest, opts ...grpc.CallOption) (*Operation, error) + // Sets the autoscaling settings of a specific node pool. + SetNodePoolAutoscaling(ctx context.Context, in *SetNodePoolAutoscalingRequest, opts ...grpc.CallOption) (*Operation, error) + // Sets the logging service of a specific cluster. + SetLoggingService(ctx context.Context, in *SetLoggingServiceRequest, opts ...grpc.CallOption) (*Operation, error) + // Sets the monitoring service of a specific cluster. + SetMonitoringService(ctx context.Context, in *SetMonitoringServiceRequest, opts ...grpc.CallOption) (*Operation, error) + // Sets the addons of a specific cluster. + SetAddonsConfig(ctx context.Context, in *SetAddonsConfigRequest, opts ...grpc.CallOption) (*Operation, error) + // Sets the locations of a specific cluster. + SetLocations(ctx context.Context, in *SetLocationsRequest, opts ...grpc.CallOption) (*Operation, error) + // Updates the master of a specific cluster. + UpdateMaster(ctx context.Context, in *UpdateMasterRequest, opts ...grpc.CallOption) (*Operation, error) // Used to set master auth materials. Currently supports :- // Changing the admin password of a specific cluster. // This can be either via password generation or explicitly set the password. @@ -2506,6 +3742,12 @@ type ClusterManagerClient interface { StartIPRotation(ctx context.Context, in *StartIPRotationRequest, opts ...grpc.CallOption) (*Operation, error) // Completes master IP rotation. CompleteIPRotation(ctx context.Context, in *CompleteIPRotationRequest, opts ...grpc.CallOption) (*Operation, error) + // Sets the size of a specific node pool. + SetNodePoolSize(ctx context.Context, in *SetNodePoolSizeRequest, opts ...grpc.CallOption) (*Operation, error) + // Enables/Disables Network Policy for a cluster. + SetNetworkPolicy(ctx context.Context, in *SetNetworkPolicyRequest, opts ...grpc.CallOption) (*Operation, error) + // Sets the maintenance policy for a cluster. + SetMaintenancePolicy(ctx context.Context, in *SetMaintenancePolicyRequest, opts ...grpc.CallOption) (*Operation, error) } type clusterManagerClient struct { @@ -2552,6 +3794,69 @@ func (c *clusterManagerClient) UpdateCluster(ctx context.Context, in *UpdateClus return out, nil } +func (c *clusterManagerClient) UpdateNodePool(ctx context.Context, in *UpdateNodePoolRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1.ClusterManager/UpdateNodePool", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) SetNodePoolAutoscaling(ctx context.Context, in *SetNodePoolAutoscalingRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1.ClusterManager/SetNodePoolAutoscaling", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) SetLoggingService(ctx context.Context, in *SetLoggingServiceRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1.ClusterManager/SetLoggingService", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) SetMonitoringService(ctx context.Context, in *SetMonitoringServiceRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1.ClusterManager/SetMonitoringService", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) SetAddonsConfig(ctx context.Context, in *SetAddonsConfigRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1.ClusterManager/SetAddonsConfig", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) SetLocations(ctx context.Context, in *SetLocationsRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1.ClusterManager/SetLocations", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) UpdateMaster(ctx context.Context, in *UpdateMasterRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1.ClusterManager/UpdateMaster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *clusterManagerClient) SetMasterAuth(ctx context.Context, in *SetMasterAuthRequest, opts ...grpc.CallOption) (*Operation, error) { out := new(Operation) err := grpc.Invoke(ctx, "/google.container.v1.ClusterManager/SetMasterAuth", in, out, c.cc, opts...) @@ -2696,6 +4001,33 @@ func (c *clusterManagerClient) CompleteIPRotation(ctx context.Context, in *Compl return out, nil } +func (c *clusterManagerClient) SetNodePoolSize(ctx context.Context, in *SetNodePoolSizeRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1.ClusterManager/SetNodePoolSize", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) SetNetworkPolicy(ctx context.Context, in *SetNetworkPolicyRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1.ClusterManager/SetNetworkPolicy", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) SetMaintenancePolicy(ctx context.Context, in *SetMaintenancePolicyRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1.ClusterManager/SetMaintenancePolicy", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // Server API for ClusterManager service type ClusterManagerServer interface { @@ -2720,6 +4052,20 @@ type ClusterManagerServer interface { CreateCluster(context.Context, *CreateClusterRequest) (*Operation, error) // Updates the settings of a specific cluster. UpdateCluster(context.Context, *UpdateClusterRequest) (*Operation, error) + // Updates the version and/or image type of a specific node pool. + UpdateNodePool(context.Context, *UpdateNodePoolRequest) (*Operation, error) + // Sets the autoscaling settings of a specific node pool. + SetNodePoolAutoscaling(context.Context, *SetNodePoolAutoscalingRequest) (*Operation, error) + // Sets the logging service of a specific cluster. + SetLoggingService(context.Context, *SetLoggingServiceRequest) (*Operation, error) + // Sets the monitoring service of a specific cluster. + SetMonitoringService(context.Context, *SetMonitoringServiceRequest) (*Operation, error) + // Sets the addons of a specific cluster. + SetAddonsConfig(context.Context, *SetAddonsConfigRequest) (*Operation, error) + // Sets the locations of a specific cluster. + SetLocations(context.Context, *SetLocationsRequest) (*Operation, error) + // Updates the master of a specific cluster. + UpdateMaster(context.Context, *UpdateMasterRequest) (*Operation, error) // Used to set master auth materials. Currently supports :- // Changing the admin password of a specific cluster. // This can be either via password generation or explicitly set the password. @@ -2763,6 +4109,12 @@ type ClusterManagerServer interface { StartIPRotation(context.Context, *StartIPRotationRequest) (*Operation, error) // Completes master IP rotation. CompleteIPRotation(context.Context, *CompleteIPRotationRequest) (*Operation, error) + // Sets the size of a specific node pool. + SetNodePoolSize(context.Context, *SetNodePoolSizeRequest) (*Operation, error) + // Enables/Disables Network Policy for a cluster. + SetNetworkPolicy(context.Context, *SetNetworkPolicyRequest) (*Operation, error) + // Sets the maintenance policy for a cluster. + SetMaintenancePolicy(context.Context, *SetMaintenancePolicyRequest) (*Operation, error) } func RegisterClusterManagerServer(s *grpc.Server, srv ClusterManagerServer) { @@ -2841,6 +4193,132 @@ func _ClusterManager_UpdateCluster_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } +func _ClusterManager_UpdateNodePool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateNodePoolRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).UpdateNodePool(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1.ClusterManager/UpdateNodePool", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).UpdateNodePool(ctx, req.(*UpdateNodePoolRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_SetNodePoolAutoscaling_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetNodePoolAutoscalingRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).SetNodePoolAutoscaling(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1.ClusterManager/SetNodePoolAutoscaling", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).SetNodePoolAutoscaling(ctx, req.(*SetNodePoolAutoscalingRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_SetLoggingService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetLoggingServiceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).SetLoggingService(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1.ClusterManager/SetLoggingService", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).SetLoggingService(ctx, req.(*SetLoggingServiceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_SetMonitoringService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetMonitoringServiceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).SetMonitoringService(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1.ClusterManager/SetMonitoringService", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).SetMonitoringService(ctx, req.(*SetMonitoringServiceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_SetAddonsConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetAddonsConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).SetAddonsConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1.ClusterManager/SetAddonsConfig", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).SetAddonsConfig(ctx, req.(*SetAddonsConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_SetLocations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetLocationsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).SetLocations(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1.ClusterManager/SetLocations", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).SetLocations(ctx, req.(*SetLocationsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_UpdateMaster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateMasterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).UpdateMaster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1.ClusterManager/UpdateMaster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).UpdateMaster(ctx, req.(*UpdateMasterRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _ClusterManager_SetMasterAuth_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(SetMasterAuthRequest) if err := dec(in); err != nil { @@ -3129,6 +4607,60 @@ func _ClusterManager_CompleteIPRotation_Handler(srv interface{}, ctx context.Con return interceptor(ctx, in, info, handler) } +func _ClusterManager_SetNodePoolSize_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetNodePoolSizeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).SetNodePoolSize(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1.ClusterManager/SetNodePoolSize", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).SetNodePoolSize(ctx, req.(*SetNodePoolSizeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_SetNetworkPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetNetworkPolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).SetNetworkPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1.ClusterManager/SetNetworkPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).SetNetworkPolicy(ctx, req.(*SetNetworkPolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_SetMaintenancePolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetMaintenancePolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).SetMaintenancePolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1.ClusterManager/SetMaintenancePolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).SetMaintenancePolicy(ctx, req.(*SetMaintenancePolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _ClusterManager_serviceDesc = grpc.ServiceDesc{ ServiceName: "google.container.v1.ClusterManager", HandlerType: (*ClusterManagerServer)(nil), @@ -3149,6 +4681,34 @@ var _ClusterManager_serviceDesc = grpc.ServiceDesc{ MethodName: "UpdateCluster", Handler: _ClusterManager_UpdateCluster_Handler, }, + { + MethodName: "UpdateNodePool", + Handler: _ClusterManager_UpdateNodePool_Handler, + }, + { + MethodName: "SetNodePoolAutoscaling", + Handler: _ClusterManager_SetNodePoolAutoscaling_Handler, + }, + { + MethodName: "SetLoggingService", + Handler: _ClusterManager_SetLoggingService_Handler, + }, + { + MethodName: "SetMonitoringService", + Handler: _ClusterManager_SetMonitoringService_Handler, + }, + { + MethodName: "SetAddonsConfig", + Handler: _ClusterManager_SetAddonsConfig_Handler, + }, + { + MethodName: "SetLocations", + Handler: _ClusterManager_SetLocations_Handler, + }, + { + MethodName: "UpdateMaster", + Handler: _ClusterManager_UpdateMaster_Handler, + }, { MethodName: "SetMasterAuth", Handler: _ClusterManager_SetMasterAuth_Handler, @@ -3213,6 +4773,18 @@ var _ClusterManager_serviceDesc = grpc.ServiceDesc{ MethodName: "CompleteIPRotation", Handler: _ClusterManager_CompleteIPRotation_Handler, }, + { + MethodName: "SetNodePoolSize", + Handler: _ClusterManager_SetNodePoolSize_Handler, + }, + { + MethodName: "SetNetworkPolicy", + Handler: _ClusterManager_SetNetworkPolicy_Handler, + }, + { + MethodName: "SetMaintenancePolicy", + Handler: _ClusterManager_SetMaintenancePolicy_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "google/container/v1/cluster_service.proto", @@ -3221,212 +4793,293 @@ var _ClusterManager_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("google/container/v1/cluster_service.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 3298 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0xdb, 0x6f, 0x1b, 0xd7, - 0xd1, 0xff, 0x56, 0xa2, 0x2e, 0x1c, 0x5e, 0x44, 0x1d, 0x5d, 0xbc, 0x1f, 0x63, 0xc7, 0xf2, 0xe6, - 0x62, 0xc7, 0x6e, 0xc4, 0xf8, 0x92, 0x9b, 0xed, 0x06, 0xa1, 0x29, 0x5a, 0xa2, 0x2d, 0x91, 0xcc, - 0x92, 0xb4, 0x91, 0x00, 0xed, 0x62, 0xb5, 0x7b, 0x44, 0x6d, 0xb4, 0xdc, 0xdd, 0xec, 0x2e, 0x95, - 0xc8, 0x86, 0x1f, 0x1a, 0xb4, 0x40, 0x81, 0x3e, 0xb6, 0x28, 0xfa, 0x50, 0x14, 0x45, 0x9a, 0xf6, - 0x21, 0x05, 0x5a, 0x04, 0x28, 0xda, 0x02, 0x7d, 0x29, 0xd0, 0x97, 0xbe, 0x16, 0x79, 0x28, 0xda, - 0xe7, 0xa2, 0x8f, 0xfd, 0x1b, 0x8a, 0x73, 0xd9, 0xe5, 0xae, 0xb4, 0x14, 0xa5, 0xc8, 0x4a, 0xfa, - 0x64, 0xed, 0x9c, 0x99, 0x73, 0x7e, 0x33, 0x67, 0x66, 0xce, 0xcc, 0x98, 0xf0, 0x52, 0xd7, 0xb6, - 0xbb, 0x26, 0x2e, 0x69, 0xb6, 0xe5, 0xab, 0x86, 0x85, 0xdd, 0xd2, 0xee, 0xd5, 0x92, 0x66, 0xf6, - 0x3d, 0x1f, 0xbb, 0x8a, 0x87, 0xdd, 0x5d, 0x43, 0xc3, 0xcb, 0x8e, 0x6b, 0xfb, 0x36, 0x9a, 0x63, - 0xac, 0xcb, 0x21, 0xeb, 0xf2, 0xee, 0xd5, 0xe2, 0x59, 0x2e, 0xaf, 0x3a, 0x46, 0x49, 0xb5, 0x2c, - 0xdb, 0x57, 0x7d, 0xc3, 0xb6, 0x3c, 0x26, 0x52, 0x7c, 0x86, 0xaf, 0xd2, 0xaf, 0xcd, 0xfe, 0x56, - 0x09, 0xf7, 0x1c, 0x7f, 0x8f, 0x2d, 0x4a, 0x9f, 0xa4, 0x00, 0xea, 0xb6, 0x8e, 0x2b, 0xb6, 0xb5, - 0x65, 0x74, 0xd1, 0x05, 0xc8, 0xf6, 0x54, 0x6d, 0xdb, 0xb0, 0xb0, 0xe2, 0xef, 0x39, 0x58, 0x14, - 0x96, 0x84, 0x4b, 0x69, 0x39, 0xc3, 0x69, 0xed, 0x3d, 0x07, 0xa3, 0x25, 0xc8, 0xea, 0x86, 0xb7, - 0xa3, 0x78, 0xc6, 0x23, 0xac, 0x74, 0x37, 0xc5, 0xb1, 0x25, 0xe1, 0xd2, 0x84, 0x0c, 0x84, 0xd6, - 0x32, 0x1e, 0xe1, 0xd5, 0x4d, 0xb2, 0x89, 0xad, 0xf6, 0xfd, 0x6d, 0xc5, 0xd3, 0x6c, 0x07, 0x7b, - 0xe2, 0xf8, 0xd2, 0x38, 0xd9, 0x84, 0xd2, 0x5a, 0x94, 0x84, 0x2e, 0xc2, 0x0c, 0xd7, 0x4b, 0x51, - 0x35, 0xcd, 0xee, 0x5b, 0xbe, 0x98, 0xa6, 0x47, 0xe5, 0x39, 0xb9, 0xcc, 0xa8, 0xa8, 0x06, 0xd3, - 0x3d, 0xec, 0xab, 0xba, 0xea, 0xab, 0x62, 0x6a, 0x69, 0xfc, 0x52, 0xe6, 0xda, 0xcb, 0xcb, 0x09, - 0x26, 0x58, 0x1e, 0xe8, 0xb0, 0xbc, 0xc1, 0xf9, 0xab, 0x96, 0xef, 0xee, 0xc9, 0xa1, 0x38, 0x3a, - 0x07, 0x60, 0xf4, 0xd4, 0x2e, 0xd7, 0x6c, 0x82, 0x1e, 0x97, 0xa6, 0x14, 0xaa, 0x57, 0x05, 0x26, - 0x4d, 0x75, 0x13, 0x9b, 0x9e, 0x38, 0x49, 0xcf, 0xb9, 0x32, 0xea, 0x9c, 0x75, 0xca, 0xcd, 0x4e, - 0xe1, 0xa2, 0xe8, 0x45, 0x98, 0x31, 0x6d, 0x4d, 0x35, 0x15, 0xcf, 0xd3, 0x15, 0xa6, 0xd7, 0x14, - 0xb5, 0x4f, 0x8e, 0x92, 0x5b, 0x9e, 0x5e, 0xa1, 0x6a, 0x21, 0x48, 0xf9, 0x6a, 0xd7, 0x13, 0xa7, - 0xa9, 0x69, 0xe8, 0xdf, 0x68, 0x09, 0x32, 0x8e, 0x8b, 0xc9, 0xe5, 0x18, 0x9b, 0x26, 0x16, 0x61, - 0x49, 0xb8, 0x34, 0x2d, 0x47, 0x49, 0xc5, 0x5b, 0x90, 0x8b, 0x29, 0x87, 0x0a, 0x30, 0xbe, 0x83, - 0xf7, 0xf8, 0x2d, 0x91, 0x3f, 0xd1, 0x3c, 0x4c, 0xec, 0xaa, 0x66, 0x1f, 0xd3, 0x6b, 0x49, 0xcb, - 0xec, 0xe3, 0xe6, 0xd8, 0x1b, 0x42, 0xf1, 0x4d, 0xc8, 0x44, 0x10, 0x1f, 0x47, 0x54, 0xfa, 0xab, - 0x00, 0xb0, 0xa1, 0x12, 0x6f, 0x2c, 0xf7, 0xfd, 0x6d, 0x54, 0x84, 0xe9, 0xbe, 0x87, 0x5d, 0x4b, - 0xed, 0x05, 0x0e, 0x12, 0x7e, 0x93, 0x35, 0x47, 0xf5, 0xbc, 0x0f, 0x6d, 0x57, 0xe7, 0xfb, 0x84, - 0xdf, 0xe8, 0x06, 0x2c, 0x06, 0x4e, 0xad, 0xa9, 0x8a, 0x86, 0x5d, 0xdf, 0xd8, 0x32, 0x34, 0xd5, - 0xc7, 0xa2, 0x4e, 0x39, 0xe7, 0xf9, 0x6a, 0x45, 0xad, 0x0c, 0xd6, 0xd0, 0xcb, 0x80, 0x34, 0xd3, - 0xc0, 0x96, 0x1f, 0x93, 0xc0, 0x54, 0x62, 0x96, 0xad, 0x44, 0xd9, 0xcf, 0x01, 0x70, 0x76, 0xa2, - 0xde, 0x16, 0xbb, 0x65, 0x46, 0xb9, 0x8f, 0xf7, 0xa4, 0x2f, 0x04, 0xc8, 0x96, 0x75, 0xdd, 0xb6, - 0x3c, 0xee, 0xf1, 0x0f, 0x60, 0x6e, 0xdb, 0xf7, 0x1d, 0xc5, 0xb4, 0x55, 0x5d, 0xd9, 0x54, 0x4d, - 0xd5, 0xd2, 0x0c, 0xab, 0x4b, 0xf5, 0xca, 0x5c, 0x7b, 0x31, 0xd1, 0x07, 0xd6, 0x7c, 0xdf, 0x59, - 0xb7, 0x55, 0xfd, 0x4e, 0xc0, 0x2d, 0xcf, 0x6e, 0xef, 0x27, 0xa1, 0x1d, 0x28, 0x6e, 0xdb, 0xae, - 0xf1, 0x88, 0x08, 0x9a, 0x8a, 0x63, 0xeb, 0x8a, 0xda, 0xf7, 0x6d, 0x4f, 0x53, 0x4d, 0xb2, 0xfd, - 0x18, 0xdd, 0x3e, 0xd9, 0x95, 0xd7, 0x42, 0xb1, 0xa6, 0xad, 0x97, 0x07, 0x42, 0xb2, 0xb8, 0x3d, - 0x64, 0x45, 0x2a, 0xc1, 0xec, 0x01, 0x50, 0xe4, 0x2a, 0x74, 0xc3, 0x53, 0x37, 0x4d, 0xac, 0x53, - 0x75, 0xa6, 0xe5, 0xf0, 0x5b, 0x7a, 0x0d, 0xc4, 0x61, 0xc7, 0x1c, 0x2a, 0xf7, 0x22, 0xc0, 0x3a, - 0xee, 0xaa, 0xda, 0x5e, 0x79, 0x53, 0xd5, 0x90, 0x08, 0x53, 0xd8, 0x8a, 0x32, 0x06, 0x9f, 0xd2, - 0xdf, 0xb2, 0x30, 0x55, 0x61, 0xb7, 0x49, 0x7c, 0x3d, 0xe2, 0x2a, 0xf4, 0x6f, 0xe2, 0xeb, 0x3a, - 0xf6, 0x34, 0xd7, 0x70, 0x48, 0xa6, 0xe2, 0x9e, 0x12, 0x25, 0xa1, 0x6f, 0x00, 0x32, 0x2c, 0xc3, - 0x37, 0x54, 0x53, 0xb1, 0x6c, 0x1d, 0xf3, 0x60, 0x1a, 0xa7, 0xc1, 0x54, 0xe0, 0x2b, 0x2c, 0x18, - 0x49, 0x3c, 0xbd, 0x0d, 0x19, 0xce, 0x45, 0x2e, 0x55, 0x4c, 0x51, 0xf3, 0x9e, 0x1f, 0x11, 0xc1, - 0x32, 0x58, 0x83, 0xcc, 0xf7, 0x36, 0x64, 0x7a, 0xd4, 0xc5, 0xc9, 0x3d, 0x6d, 0xd3, 0xf4, 0x30, - 0x6c, 0x87, 0x41, 0x28, 0xc8, 0xd0, 0x1b, 0x84, 0xc5, 0x45, 0x12, 0xfb, 0xdd, 0xae, 0x61, 0x75, - 0x83, 0x9c, 0x2d, 0x4e, 0xb2, 0x9c, 0xc6, 0xc9, 0x2d, 0x46, 0x25, 0x1e, 0xdd, 0xb3, 0x2d, 0xc3, - 0xb7, 0xdd, 0x28, 0xef, 0x14, 0xf3, 0xe8, 0xc1, 0x4a, 0xc0, 0x2e, 0xc2, 0x94, 0x85, 0xfd, 0x0f, - 0x6d, 0x77, 0x47, 0x9c, 0xa6, 0x3c, 0xc1, 0x27, 0xba, 0x0c, 0xb3, 0x41, 0x40, 0x19, 0xce, 0xee, - 0x0d, 0x45, 0x33, 0x74, 0x97, 0xe7, 0xd1, 0x19, 0xbe, 0x50, 0x73, 0x76, 0x6f, 0x54, 0x0c, 0xdd, - 0x45, 0x77, 0x21, 0xa7, 0x52, 0xbf, 0x0f, 0x6c, 0x04, 0x54, 0xc3, 0x0b, 0x89, 0x1a, 0x46, 0x23, - 0x44, 0xce, 0xaa, 0xd1, 0x78, 0x79, 0x16, 0xc0, 0xeb, 0x6f, 0x06, 0x80, 0x32, 0xf4, 0xb0, 0x08, - 0x05, 0xdd, 0x06, 0x6a, 0x55, 0xc5, 0xb1, 0x6d, 0xd3, 0x13, 0xb3, 0x34, 0x95, 0x9e, 0x1b, 0x7a, - 0x11, 0x4d, 0xdb, 0x36, 0xe5, 0xb4, 0xc5, 0xff, 0xf2, 0xd0, 0x59, 0x48, 0x93, 0x44, 0x49, 0x9f, - 0x2f, 0x31, 0x47, 0x93, 0xe3, 0x80, 0x80, 0x5e, 0x83, 0x33, 0xcc, 0xc1, 0x94, 0x9d, 0xfe, 0x26, - 0x76, 0x2d, 0xec, 0x63, 0x4f, 0x51, 0x4d, 0x67, 0x5b, 0x15, 0xf3, 0xd4, 0xff, 0x16, 0xd8, 0xf2, - 0xfd, 0x70, 0xb5, 0x4c, 0x16, 0xd1, 0xbb, 0x30, 0xe3, 0x62, 0xcf, 0xee, 0xbb, 0x1a, 0x56, 0x78, - 0x8e, 0x9f, 0xa1, 0xc0, 0x5e, 0x49, 0x04, 0xc6, 0x1d, 0x77, 0x59, 0xe6, 0x32, 0xd1, 0x44, 0x9f, - 0x77, 0x63, 0x44, 0x74, 0x05, 0x66, 0xe9, 0x8e, 0xca, 0x96, 0x61, 0x75, 0xb1, 0xeb, 0xb8, 0x86, - 0xe5, 0x8b, 0x05, 0x6a, 0x95, 0x02, 0x5d, 0xb8, 0x3b, 0xa0, 0x13, 0x1f, 0x33, 0x69, 0xf4, 0x28, - 0xea, 0xa6, 0xaa, 0x89, 0xe8, 0x10, 0x1f, 0x1b, 0x44, 0x99, 0x0c, 0xe6, 0x20, 0xe2, 0x9e, 0x81, - 0xb4, 0x87, 0xcd, 0x2d, 0xc5, 0x34, 0xac, 0x1d, 0x9e, 0x35, 0xa7, 0x09, 0x61, 0xdd, 0xb0, 0x76, - 0x48, 0xa0, 0x3d, 0xb2, 0xad, 0x20, 0x37, 0xd2, 0xbf, 0x49, 0x30, 0x63, 0x4b, 0x77, 0x6c, 0x02, - 0x8b, 0x25, 0xc3, 0xf0, 0x9b, 0x98, 0x33, 0x08, 0xb1, 0xc0, 0x8d, 0x76, 0xb1, 0xeb, 0x91, 0x80, - 0xec, 0x52, 0xd6, 0x05, 0xbe, 0xcc, 0x0d, 0xf2, 0x80, 0x2d, 0xd2, 0x3c, 0xde, 0x77, 0x5d, 0x92, - 0x63, 0x79, 0xc8, 0x04, 0x62, 0xdb, 0x3c, 0x8f, 0xb3, 0x55, 0x16, 0x27, 0x81, 0xd4, 0x2b, 0x10, - 0xd0, 0x59, 0x40, 0x07, 0x32, 0x06, 0x95, 0x41, 0x7c, 0x8d, 0x38, 0x45, 0x20, 0x71, 0x1e, 0x32, - 0x9a, 0x8b, 0x55, 0x1f, 0x2b, 0xbe, 0xd1, 0xc3, 0xe2, 0xfb, 0xcc, 0xd7, 0x18, 0xa9, 0x6d, 0xf4, - 0x30, 0xba, 0x05, 0x93, 0x9e, 0xaf, 0xfa, 0x7d, 0x4f, 0xdc, 0x59, 0x12, 0x2e, 0xe5, 0xaf, 0x3d, - 0x77, 0xe8, 0x75, 0xb6, 0x28, 0xab, 0xcc, 0x45, 0xd0, 0x0b, 0x90, 0x67, 0x7f, 0x29, 0x3d, 0xec, - 0x79, 0x6a, 0x17, 0x8b, 0x26, 0x3d, 0x20, 0xc7, 0xa8, 0x1b, 0x8c, 0x88, 0x5e, 0x86, 0x39, 0x0a, - 0x37, 0x0c, 0x30, 0x5a, 0xf8, 0x88, 0x3d, 0x96, 0x88, 0xc8, 0x52, 0x10, 0x62, 0xa4, 0xfa, 0x21, - 0x69, 0x8b, 0x07, 0xb4, 0x17, 0x89, 0x49, 0x8b, 0x39, 0x44, 0xb0, 0x12, 0x06, 0xe5, 0x32, 0xcc, - 0x19, 0x96, 0xe7, 0xab, 0x96, 0x86, 0x95, 0xae, 0x6b, 0xf7, 0x1d, 0xa5, 0xef, 0x9a, 0x9e, 0x68, - 0x53, 0xc7, 0x9f, 0x0d, 0x96, 0x56, 0xc9, 0x4a, 0xc7, 0x35, 0x3d, 0xb2, 0x7b, 0xcc, 0x86, 0x2c, - 0x29, 0x3a, 0x0c, 0x4b, 0xc4, 0x82, 0x2c, 0x29, 0x9e, 0x87, 0x0c, 0xfe, 0xc8, 0x31, 0x5c, 0x6e, - 0xbf, 0x0f, 0x98, 0xfd, 0x18, 0x89, 0xd8, 0xaf, 0x58, 0x86, 0xb9, 0x04, 0x1f, 0x3f, 0x56, 0x69, - 0x60, 0xc0, 0x24, 0xb3, 0x2b, 0x5a, 0x04, 0xd4, 0x6a, 0x97, 0xdb, 0x9d, 0x96, 0xd2, 0xa9, 0xb7, - 0x9a, 0xd5, 0x4a, 0xed, 0x6e, 0xad, 0xba, 0x52, 0xf8, 0x3f, 0x54, 0x80, 0x6c, 0x53, 0x6e, 0x3c, - 0xa8, 0xb5, 0x6a, 0x8d, 0x7a, 0xad, 0xbe, 0x5a, 0x10, 0x50, 0x06, 0xa6, 0xe4, 0x4e, 0x9d, 0x7e, - 0x8c, 0xa1, 0x19, 0xc8, 0xc8, 0xd5, 0x4a, 0xa3, 0x5e, 0xa9, 0xad, 0x13, 0xc2, 0x38, 0xca, 0xc2, - 0x74, 0xab, 0xdd, 0x68, 0x36, 0xc9, 0x57, 0x0a, 0xa5, 0x61, 0xa2, 0x2a, 0xcb, 0x0d, 0xb9, 0x30, - 0x21, 0x7d, 0x2f, 0x05, 0x39, 0x7e, 0x97, 0x1d, 0x47, 0x27, 0x6f, 0xfd, 0x2b, 0x30, 0xaf, 0x63, - 0xcf, 0x70, 0xb1, 0x1e, 0x77, 0xa9, 0x14, 0x73, 0x29, 0xbe, 0x16, 0x75, 0xa9, 0xdb, 0x50, 0x0c, - 0x24, 0x12, 0x52, 0x30, 0xab, 0x09, 0x45, 0xce, 0xb1, 0x71, 0x20, 0x13, 0x77, 0x60, 0x21, 0x90, - 0x8e, 0xe7, 0xd2, 0xc9, 0xa3, 0xe6, 0xd2, 0x39, 0x2e, 0x1f, 0x2b, 0x41, 0x4a, 0xfb, 0xd4, 0x20, - 0xa9, 0x53, 0x31, 0xf4, 0xe0, 0x45, 0x88, 0xa8, 0x41, 0x92, 0x64, 0x4d, 0x27, 0x6e, 0x10, 0x08, - 0x44, 0x2a, 0x5a, 0xf6, 0x38, 0x14, 0xf8, 0x4a, 0x2d, 0x2c, 0x6c, 0x77, 0xe0, 0xdc, 0xc1, 0xed, - 0xa3, 0xc5, 0x48, 0x9a, 0xa2, 0xbf, 0x74, 0x68, 0x92, 0x8e, 0xd6, 0x21, 0xc5, 0x7d, 0x88, 0xa2, - 0xc5, 0xc3, 0x15, 0x08, 0xf0, 0x2a, 0x83, 0x44, 0x0e, 0xd4, 0x9f, 0x03, 0x64, 0xeb, 0x61, 0x3e, - 0xbf, 0x01, 0x8b, 0xe1, 0x6d, 0xc4, 0x13, 0x09, 0x2f, 0x08, 0x83, 0x9b, 0x88, 0x26, 0x12, 0xe9, - 0x2f, 0x13, 0x90, 0x6e, 0x38, 0xd8, 0xa5, 0x9b, 0x24, 0x56, 0x17, 0x41, 0x22, 0x1c, 0x8b, 0x24, - 0xc2, 0x7b, 0x90, 0xb7, 0x03, 0x21, 0x66, 0xaf, 0xf1, 0x43, 0x72, 0x46, 0xb8, 0xff, 0x32, 0x31, - 0xa1, 0x9c, 0x0b, 0x45, 0xa9, 0x45, 0xbf, 0x19, 0xe6, 0x9d, 0x14, 0xdd, 0xe3, 0x85, 0x11, 0x7b, - 0xec, 0xcb, 0x3c, 0x8b, 0x30, 0xa9, 0x63, 0x5f, 0x35, 0x4c, 0x7e, 0x65, 0xfc, 0x2b, 0x21, 0x23, - 0x4d, 0x24, 0x65, 0xa4, 0xd8, 0x1b, 0x30, 0xb9, 0xef, 0x0d, 0x38, 0x0f, 0x19, 0x5f, 0x75, 0xbb, - 0xd8, 0x67, 0xcb, 0xcc, 0x85, 0x80, 0x91, 0x08, 0x83, 0x24, 0x8f, 0x0c, 0xd8, 0x0c, 0x4c, 0x35, - 0xab, 0xf5, 0x95, 0x84, 0x58, 0x9d, 0x86, 0xd4, 0x4a, 0xa3, 0x5e, 0x65, 0x41, 0x5a, 0xbe, 0xd3, - 0x90, 0xdb, 0x34, 0x48, 0xa5, 0xcf, 0xc7, 0x20, 0x45, 0x0d, 0x33, 0x0f, 0x85, 0xf6, 0xbb, 0xcd, - 0xea, 0xbe, 0x0d, 0x11, 0xe4, 0x2b, 0x72, 0xb5, 0xdc, 0xae, 0x2a, 0x95, 0xf5, 0x4e, 0xab, 0x5d, - 0x95, 0x0b, 0x02, 0xa1, 0xad, 0x54, 0xd7, 0xab, 0x11, 0xda, 0x18, 0xa1, 0x75, 0x9a, 0xab, 0x72, - 0x79, 0xa5, 0xaa, 0x6c, 0x94, 0x29, 0x6d, 0x1c, 0xcd, 0x42, 0x2e, 0xa0, 0xd5, 0x1b, 0x2b, 0xd5, - 0x56, 0x21, 0x45, 0xd8, 0xe4, 0x6a, 0xb3, 0x5c, 0x93, 0x43, 0xd1, 0x09, 0x26, 0xba, 0x12, 0x3d, - 0x62, 0x92, 0x80, 0xe1, 0xc7, 0x12, 0x49, 0xa5, 0xd9, 0x68, 0xac, 0x17, 0xa6, 0x08, 0x95, 0x1f, - 0x3c, 0xa0, 0x4e, 0xa3, 0xb3, 0x20, 0xb6, 0xaa, 0xed, 0x01, 0x49, 0xd9, 0x28, 0xd7, 0xcb, 0xab, - 0xd5, 0x8d, 0x6a, 0xbd, 0x5d, 0x48, 0xa3, 0x05, 0x98, 0x2d, 0x77, 0xda, 0x0d, 0x85, 0x1f, 0xcb, - 0x80, 0x00, 0x31, 0x20, 0x25, 0xc7, 0x01, 0x66, 0x50, 0x1e, 0x80, 0x6c, 0xb6, 0x5e, 0xbe, 0x53, - 0x5d, 0x6f, 0x15, 0xb2, 0x68, 0x0e, 0x66, 0xc8, 0x37, 0xd3, 0x49, 0x29, 0x77, 0xda, 0x6b, 0x85, - 0x9c, 0xf4, 0x1d, 0x01, 0xe6, 0x2b, 0xf4, 0x29, 0xe3, 0x39, 0x4d, 0xc6, 0x1f, 0xf4, 0xb1, 0xe7, - 0x93, 0x06, 0xc6, 0x71, 0xed, 0xf7, 0xb1, 0xe6, 0x93, 0x1c, 0xc0, 0xdc, 0x3a, 0xcd, 0x29, 0x35, - 0x3d, 0xd1, 0xb7, 0x5f, 0x83, 0x29, 0xfe, 0x80, 0x53, 0xa7, 0xce, 0x5c, 0x3b, 0x7b, 0xd8, 0x43, - 0x28, 0x07, 0xcc, 0x12, 0x86, 0xd9, 0x55, 0xec, 0x9f, 0xfc, 0x7c, 0xda, 0x73, 0xf1, 0x3a, 0x54, - 0xa7, 0x10, 0x68, 0xcf, 0xc5, 0x0a, 0x50, 0x5d, 0xfa, 0x54, 0x80, 0x79, 0x96, 0xb1, 0x4f, 0xfb, - 0x28, 0x74, 0x13, 0x26, 0xfb, 0xf4, 0x24, 0xde, 0x02, 0x48, 0x87, 0x19, 0x82, 0x61, 0x92, 0xb9, - 0x84, 0xf4, 0xeb, 0x31, 0x98, 0x6f, 0x61, 0x3f, 0x52, 0xdd, 0x9f, 0x1a, 0xcc, 0x35, 0x98, 0x54, - 0x35, 0x3f, 0x78, 0xaa, 0xf2, 0x43, 0xea, 0xd0, 0x24, 0x30, 0xcb, 0x65, 0x2a, 0x27, 0x73, 0x79, - 0xf4, 0x7a, 0xa8, 0xf0, 0x11, 0x3b, 0x96, 0x40, 0xdb, 0xb7, 0x60, 0x92, 0x6d, 0x45, 0x42, 0xbc, - 0x53, 0xbf, 0x5f, 0x6f, 0x3c, 0xac, 0xb3, 0xd7, 0x9a, 0xf8, 0x6a, 0xb3, 0xdc, 0x6a, 0x3d, 0x6c, - 0xc8, 0x2b, 0x05, 0x81, 0x38, 0xff, 0x6a, 0xb5, 0x5e, 0x95, 0x49, 0x20, 0x85, 0xe4, 0x31, 0x69, - 0x1b, 0xe6, 0x57, 0xb0, 0x89, 0x4f, 0xff, 0x4e, 0xa5, 0x35, 0x98, 0x5b, 0x37, 0xbc, 0xc0, 0x4d, - 0xbd, 0x2f, 0x7f, 0x90, 0xd4, 0x87, 0xf9, 0xf8, 0x4e, 0x9e, 0x63, 0x5b, 0x1e, 0x46, 0x6f, 0xc0, - 0x34, 0x3f, 0xce, 0x13, 0x05, 0xda, 0x18, 0x1c, 0x1e, 0x40, 0x21, 0x37, 0x7a, 0x0e, 0x72, 0x3d, - 0xc3, 0xf3, 0x48, 0x11, 0x41, 0x4e, 0xf0, 0xc4, 0x31, 0xfa, 0xd4, 0x65, 0x39, 0xf1, 0x3d, 0x42, - 0x93, 0x76, 0x60, 0x6e, 0x15, 0xfb, 0xe1, 0x73, 0x70, 0x02, 0x4b, 0x5d, 0x80, 0xec, 0xe0, 0x11, - 0x0b, 0x6d, 0x95, 0x09, 0x69, 0x35, 0x5d, 0xba, 0x07, 0x0b, 0x44, 0xc7, 0xf0, 0xb4, 0x93, 0xd8, - 0xcb, 0x82, 0xc5, 0x0a, 0x29, 0x40, 0xcd, 0xaf, 0x08, 0xfb, 0x13, 0x58, 0xdc, 0x8f, 0x9d, 0xdf, - 0xd0, 0x5b, 0x00, 0x21, 0x63, 0x70, 0x47, 0xcf, 0x1e, 0xfe, 0xea, 0xca, 0x11, 0x89, 0xa3, 0xdd, - 0xd3, 0x7d, 0x58, 0x5c, 0xc5, 0x3e, 0x29, 0xf6, 0xb0, 0xcb, 0xeb, 0xb5, 0x2f, 0x6f, 0xbb, 0xef, - 0x8e, 0x41, 0x36, 0xba, 0x15, 0xe9, 0xb6, 0x74, 0xbc, 0xa5, 0xf6, 0x4d, 0xff, 0x40, 0xb7, 0xc5, - 0x36, 0x5c, 0xe0, 0xcb, 0xfb, 0xba, 0xad, 0x65, 0x98, 0xdb, 0x55, 0x4d, 0x23, 0x5e, 0xe2, 0x06, - 0x43, 0xd5, 0x59, 0xba, 0x14, 0xa9, 0x70, 0x3d, 0x56, 0x1c, 0xb2, 0x73, 0x22, 0xc5, 0x61, 0x2a, - 0x28, 0x0e, 0xe9, 0xca, 0xa0, 0x38, 0xbc, 0x0c, 0x6c, 0x8b, 0x08, 0xaf, 0x27, 0x4e, 0xd0, 0xbd, - 0x67, 0xe8, 0x42, 0xc8, 0xea, 0xa1, 0x6b, 0xb0, 0xc0, 0x78, 0xe3, 0xc5, 0x1a, 0x1b, 0x98, 0xa6, - 0x65, 0x06, 0x33, 0x56, 0xab, 0x79, 0xd2, 0x2f, 0x05, 0x58, 0x60, 0xcf, 0x5c, 0xd8, 0xee, 0x9f, - 0x62, 0xf2, 0x4f, 0x87, 0x05, 0x2e, 0xcf, 0xff, 0x23, 0x26, 0x0f, 0xd3, 0xc1, 0xe4, 0x41, 0xfa, - 0x81, 0x00, 0x0b, 0x2c, 0x9f, 0x9d, 0x3e, 0xce, 0x25, 0xc8, 0xc6, 0xea, 0x7c, 0x76, 0x37, 0x60, - 0x85, 0x05, 0x3e, 0x49, 0xae, 0x24, 0x10, 0x02, 0x28, 0xde, 0xe9, 0x25, 0xd7, 0xef, 0x0b, 0x80, - 0x56, 0xb1, 0xff, 0xbf, 0xa0, 0xf4, 0xbf, 0x53, 0x30, 0x1d, 0xe0, 0x48, 0x2c, 0xeb, 0x5f, 0x87, - 0x49, 0xde, 0x6f, 0x8d, 0x1d, 0x6d, 0xbe, 0xc7, 0xd9, 0x8f, 0x39, 0x4b, 0x3c, 0x74, 0xc6, 0x22, - 0xc2, 0x54, 0x10, 0xb5, 0x6c, 0xcc, 0x12, 0x7c, 0x0e, 0xeb, 0xe5, 0xb7, 0x86, 0xf5, 0xf2, 0xb7, - 0xc3, 0x26, 0xa2, 0x4b, 0x6b, 0x80, 0xe7, 0x0f, 0x75, 0xd5, 0xd1, 0xd3, 0x8b, 0xed, 0xa4, 0x5e, - 0xe1, 0x1e, 0x64, 0xa2, 0x9d, 0x5e, 0xea, 0x98, 0x9d, 0x5e, 0x54, 0x18, 0x55, 0x00, 0x7a, 0xaa, - 0xa5, 0x76, 0x71, 0x0f, 0x5b, 0x3e, 0x2f, 0x37, 0x9e, 0x1b, 0xba, 0xd5, 0x46, 0xc8, 0x2a, 0x47, - 0xc4, 0x48, 0xd9, 0x7b, 0xc2, 0x81, 0xc1, 0x22, 0x20, 0xfe, 0xa1, 0x3c, 0xac, 0xb5, 0xd7, 0x14, - 0x36, 0x1e, 0x18, 0xdf, 0x3f, 0x48, 0x48, 0xc5, 0x06, 0x09, 0x13, 0x83, 0x41, 0xc2, 0xa4, 0xf4, - 0x2b, 0x01, 0xf2, 0x71, 0x88, 0xe4, 0x71, 0x22, 0xaa, 0x2a, 0x7d, 0xa7, 0xeb, 0xaa, 0x3a, 0xe6, - 0xe3, 0x6c, 0xaa, 0x7e, 0x87, 0x91, 0x48, 0x67, 0x45, 0x59, 0x5c, 0xec, 0xa8, 0x86, 0x4b, 0x5d, - 0x70, 0x5a, 0x06, 0x42, 0x92, 0x29, 0x05, 0x35, 0x61, 0x86, 0x8b, 0x2b, 0xb6, 0x13, 0x34, 0xbe, - 0xc4, 0x48, 0x17, 0x93, 0xe7, 0x02, 0x83, 0xbd, 0x1b, 0x8c, 0x5d, 0xce, 0xf7, 0x63, 0xdf, 0x52, - 0x0f, 0xd0, 0x41, 0x2e, 0xf4, 0x2a, 0x9c, 0x89, 0x62, 0x55, 0x3c, 0x5f, 0x75, 0x7d, 0x36, 0xe2, - 0x61, 0xd1, 0x32, 0x1f, 0x81, 0xdd, 0x22, 0x8b, 0x74, 0x58, 0x36, 0x72, 0xe4, 0x2e, 0xfd, 0x5d, - 0x80, 0xb3, 0xad, 0x41, 0x2e, 0x88, 0xdc, 0xe0, 0xd7, 0x97, 0x15, 0x9e, 0x8e, 0xd7, 0xfd, 0x48, - 0x80, 0x67, 0x65, 0xdb, 0x34, 0x37, 0x55, 0x6d, 0x27, 0x50, 0x8f, 0x1b, 0xe8, 0xeb, 0xcc, 0x78, - 0x1d, 0x56, 0xab, 0x45, 0xd2, 0x3c, 0x2f, 0x77, 0xe2, 0x43, 0x74, 0xe1, 0x78, 0x43, 0x74, 0xe9, - 0x31, 0xcc, 0x25, 0x8d, 0x66, 0x86, 0xfe, 0x6f, 0x0d, 0x7a, 0x1e, 0xf2, 0x3d, 0xc3, 0x8a, 0xe6, - 0x46, 0xf6, 0x9f, 0xba, 0xd9, 0x9e, 0x61, 0x0d, 0xf2, 0x22, 0xe1, 0x52, 0x3f, 0x3a, 0x98, 0x41, - 0xb3, 0x3d, 0xf5, 0xa3, 0x90, 0x4b, 0xfa, 0xe3, 0x18, 0x14, 0x5a, 0xd8, 0x67, 0xf3, 0xc4, 0xd3, - 0x33, 0xee, 0xe6, 0xc1, 0x91, 0x3e, 0xfb, 0xef, 0xe1, 0x37, 0x87, 0xb5, 0x52, 0x31, 0x44, 0x5f, - 0x7e, 0xb6, 0x3f, 0x91, 0x3c, 0xdb, 0x7f, 0x1a, 0xb3, 0xd4, 0x8f, 0x05, 0xda, 0x80, 0x46, 0x46, - 0xff, 0xa7, 0x66, 0xbe, 0x88, 0x2f, 0xa4, 0xe2, 0xff, 0x73, 0xf7, 0x3e, 0x2c, 0xd2, 0x9c, 0x51, - 0x6b, 0xca, 0xfc, 0x77, 0x04, 0xa7, 0x57, 0x7c, 0xf4, 0xe0, 0xff, 0x2b, 0x76, 0xcf, 0x21, 0x55, - 0xd7, 0x57, 0x70, 0xdc, 0xb5, 0xff, 0x3c, 0x03, 0x79, 0x5e, 0x5c, 0xb3, 0x3c, 0xe1, 0xa2, 0x9f, - 0x0a, 0x90, 0x8d, 0xb6, 0x84, 0x28, 0xf9, 0x6d, 0x4c, 0xe8, 0x3f, 0x8b, 0x2f, 0x1d, 0x81, 0x93, - 0x85, 0xb3, 0xf4, 0xfa, 0xc7, 0x5f, 0xfc, 0xeb, 0x87, 0x63, 0x57, 0x51, 0xa9, 0xb4, 0x7b, 0xb5, - 0xc4, 0x55, 0xf0, 0x4a, 0x8f, 0x07, 0xea, 0x3d, 0x29, 0xd1, 0xae, 0xa4, 0xf4, 0x98, 0xfc, 0xf3, - 0xa4, 0x14, 0xb6, 0x97, 0x3f, 0x11, 0x00, 0x06, 0x13, 0x1a, 0x94, 0xfc, 0xdf, 0xd1, 0x07, 0x46, - 0x38, 0xc5, 0x43, 0xbb, 0x57, 0x69, 0x85, 0xa2, 0x79, 0x0b, 0xdd, 0x3e, 0x26, 0x9a, 0xd2, 0xe3, - 0x81, 0x71, 0x9f, 0xa0, 0x1f, 0x0b, 0x90, 0x8b, 0xcd, 0xaf, 0x50, 0xb2, 0x41, 0x92, 0x66, 0x5c, - 0xc5, 0x11, 0xad, 0x9b, 0x74, 0x93, 0x42, 0xbc, 0x21, 0x1d, 0xd7, 0x60, 0x37, 0x85, 0xcb, 0xe8, - 0x17, 0x02, 0xe4, 0x62, 0xd3, 0xa6, 0x21, 0xc0, 0x92, 0x26, 0x52, 0x23, 0x81, 0xad, 0x52, 0x60, - 0xe5, 0xe2, 0x89, 0x6c, 0x47, 0x50, 0x7e, 0x2e, 0x40, 0x2e, 0x36, 0xdf, 0x19, 0x82, 0x32, 0x69, - 0x06, 0x34, 0x12, 0x65, 0x87, 0xa2, 0x6c, 0x48, 0xf7, 0x4e, 0x84, 0xd2, 0x8b, 0x1e, 0x4d, 0x30, - 0xff, 0x5c, 0x80, 0x5c, 0x6c, 0xe6, 0x33, 0x04, 0x73, 0xd2, 0x5c, 0x68, 0x24, 0x66, 0xee, 0x95, - 0x97, 0x4f, 0xe6, 0x95, 0x9f, 0x0a, 0x90, 0x8f, 0x8f, 0x10, 0xd0, 0xe5, 0xa1, 0x71, 0x7a, 0x60, - 0x46, 0x52, 0xbc, 0x72, 0x24, 0x5e, 0x1e, 0xd5, 0x6f, 0x52, 0xc4, 0xd7, 0xd1, 0xd5, 0x23, 0x22, - 0x8e, 0x8c, 0x23, 0x3e, 0x11, 0x20, 0x1b, 0x1d, 0x09, 0x0d, 0x49, 0x3b, 0x09, 0x53, 0xa3, 0x91, - 0x76, 0x5c, 0xa3, 0xa8, 0xee, 0xa0, 0xb7, 0x8f, 0x8d, 0xaa, 0xf4, 0x38, 0x3a, 0x9f, 0x79, 0x82, - 0x3e, 0x13, 0x60, 0x66, 0xdf, 0xf8, 0x07, 0x25, 0x1b, 0x28, 0x79, 0x48, 0x54, 0x5c, 0x0c, 0x98, - 0x83, 0x5f, 0x9e, 0x2d, 0x57, 0x7b, 0x8e, 0xbf, 0x27, 0xc9, 0x14, 0xe2, 0xba, 0xb4, 0x7a, 0x52, - 0x88, 0x37, 0x35, 0x7a, 0x30, 0xf1, 0xcd, 0x9f, 0x09, 0x30, 0xb3, 0x6f, 0x78, 0x33, 0x04, 0x6c, - 0xf2, 0x88, 0xa7, 0x78, 0x61, 0x48, 0xf8, 0x0d, 0x38, 0xa5, 0x5b, 0x14, 0xf7, 0xab, 0xe8, 0xfa, - 0x11, 0x71, 0x7b, 0x54, 0x98, 0xf7, 0xa0, 0xbf, 0x17, 0x20, 0x17, 0x2b, 0xf6, 0xd0, 0xf0, 0x07, - 0x64, 0x7f, 0xdf, 0x5f, 0xbc, 0x7c, 0x14, 0x56, 0xee, 0x96, 0x75, 0x8a, 0x72, 0x0d, 0xdd, 0x3d, - 0x49, 0x20, 0x95, 0x06, 0x3f, 0xc9, 0xf8, 0x9d, 0x00, 0x99, 0xc8, 0x84, 0x00, 0x5d, 0x1c, 0x66, - 0xd5, 0x7d, 0x33, 0x84, 0xe2, 0xe1, 0x05, 0xab, 0xf4, 0x2d, 0x8a, 0xf3, 0x21, 0xea, 0x3c, 0x1d, - 0x9c, 0xa5, 0xc7, 0xd1, 0x62, 0xfb, 0x09, 0xfa, 0xad, 0x00, 0xf9, 0xf8, 0xe0, 0x69, 0x48, 0x26, - 0x48, 0x9c, 0x4e, 0x8d, 0x0c, 0xb3, 0x77, 0x28, 0xfa, 0xfb, 0xd2, 0x53, 0xb2, 0x32, 0x71, 0xe1, - 0x3f, 0x09, 0x90, 0x8f, 0x8f, 0xa0, 0x86, 0x20, 0x4e, 0x9c, 0x53, 0x8d, 0x44, 0xcc, 0xed, 0x7d, - 0xf9, 0x94, 0xec, 0xfd, 0x0f, 0x01, 0xce, 0x0c, 0x69, 0xb1, 0xd0, 0xf5, 0x44, 0x68, 0x87, 0x37, - 0x64, 0x23, 0xf5, 0x31, 0xa8, 0x3e, 0x9a, 0xf4, 0xed, 0x53, 0xd1, 0xe7, 0xa6, 0xcb, 0xd1, 0x91, - 0x9b, 0xf9, 0xa7, 0x00, 0x0b, 0x89, 0x8d, 0x31, 0xba, 0x3a, 0xec, 0xd1, 0x1e, 0xda, 0x44, 0x8f, - 0xd4, 0xcb, 0xa2, 0x7a, 0x6d, 0x4b, 0xda, 0xa9, 0xe8, 0x55, 0xa2, 0xaf, 0x7a, 0x80, 0x89, 0x28, - 0xf7, 0x99, 0x00, 0xe9, 0xb0, 0x3d, 0x42, 0x2f, 0x1c, 0xa9, 0x7d, 0x1a, 0xa9, 0xc4, 0x03, 0xaa, - 0x44, 0x53, 0xba, 0x7f, 0x22, 0x25, 0xe2, 0xfd, 0x18, 0x01, 0xfb, 0x1b, 0x56, 0x36, 0x45, 0x7e, - 0x83, 0x38, 0xb4, 0x6c, 0x3a, 0xd0, 0x46, 0x8d, 0x04, 0x7d, 0xdc, 0x77, 0x29, 0x19, 0xf4, 0xe0, - 0xd7, 0x5a, 0x04, 0xf0, 0x1f, 0x04, 0x98, 0xd9, 0xd7, 0x4f, 0x0d, 0x79, 0x97, 0x92, 0xbb, 0xae, - 0x91, 0xa0, 0x1f, 0x52, 0xd0, 0xef, 0x48, 0xeb, 0x27, 0xab, 0xf5, 0xe8, 0xe1, 0x4e, 0x70, 0x38, - 0x41, 0xfe, 0x67, 0x01, 0xd0, 0xc1, 0xee, 0x0c, 0x2d, 0x27, 0x27, 0xd1, 0x61, 0x6d, 0xdc, 0x48, - 0xfc, 0xef, 0x51, 0xfc, 0x6d, 0xa9, 0x71, 0x22, 0xfc, 0x5a, 0x70, 0x7e, 0x54, 0x85, 0x3b, 0x16, - 0x9c, 0xd1, 0xec, 0x5e, 0x12, 0x80, 0x3b, 0x73, 0xbc, 0x3c, 0xe5, 0x3f, 0xed, 0x69, 0x92, 0x0a, - 0xa5, 0x29, 0xbc, 0x77, 0x9b, 0xf3, 0x76, 0x6d, 0x53, 0xb5, 0xba, 0xcb, 0xb6, 0xdb, 0x2d, 0x75, - 0xb1, 0x45, 0xeb, 0x97, 0x12, 0x5b, 0x52, 0x1d, 0xc3, 0x8b, 0xfd, 0x50, 0xff, 0x56, 0xf8, 0xb1, - 0x39, 0x49, 0x19, 0xaf, 0xff, 0x37, 0x00, 0x00, 0xff, 0xff, 0xcf, 0xbe, 0xbf, 0xb9, 0xd0, 0x2f, - 0x00, 0x00, + // 4602 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5c, 0xdd, 0x8f, 0x23, 0x57, + 0x56, 0xdf, 0xea, 0x76, 0xbb, 0xdb, 0xc7, 0x1f, 0xed, 0xbe, 0xfd, 0xe5, 0x38, 0x33, 0xc9, 0x4c, + 0xe5, 0x6b, 0x32, 0x49, 0xda, 0x99, 0x7c, 0x67, 0x92, 0x0d, 0xf1, 0xb8, 0x9d, 0x1e, 0x67, 0xba, + 0x6d, 0xa7, 0xdc, 0x3d, 0x43, 0xc2, 0xec, 0x96, 0xaa, 0xab, 0x6e, 0xbb, 0x2b, 0x5d, 0xae, 0xaa, + 0xad, 0x2a, 0x77, 0xd2, 0x33, 0x1a, 0x24, 0x56, 0x80, 0x90, 0x10, 0xfb, 0x02, 0x8b, 0xf6, 0x01, + 0xad, 0x10, 0x2c, 0x2b, 0x94, 0x95, 0x40, 0x2c, 0xb0, 0x20, 0x3e, 0x24, 0x5e, 0x58, 0x01, 0x12, + 0xbc, 0xf0, 0x80, 0xe0, 0x85, 0x07, 0x10, 0x12, 0x7f, 0x04, 0x12, 0xba, 0x1f, 0x55, 0xae, 0xb2, + 0xab, 0xec, 0x9e, 0x38, 0x4e, 0xf6, 0x69, 0x5c, 0xe7, 0x9e, 0x73, 0xef, 0xef, 0x9c, 0xba, 0xf7, + 0x9c, 0x73, 0xcf, 0xa9, 0x1e, 0x78, 0xb6, 0x6b, 0x59, 0x5d, 0x03, 0x57, 0x54, 0xcb, 0xf4, 0x14, + 0xdd, 0xc4, 0x4e, 0xe5, 0xf4, 0x5a, 0x45, 0x35, 0xfa, 0xae, 0x87, 0x1d, 0xd9, 0xc5, 0xce, 0xa9, + 0xae, 0xe2, 0x2d, 0xdb, 0xb1, 0x3c, 0x0b, 0xad, 0x32, 0xd6, 0xad, 0x80, 0x75, 0xeb, 0xf4, 0x5a, + 0xf9, 0x02, 0x97, 0x57, 0x6c, 0xbd, 0xa2, 0x98, 0xa6, 0xe5, 0x29, 0x9e, 0x6e, 0x99, 0x2e, 0x13, + 0x29, 0x3f, 0xca, 0x47, 0xe9, 0xd3, 0x61, 0xff, 0xa8, 0x82, 0x7b, 0xb6, 0x77, 0xc6, 0x06, 0xc5, + 0xef, 0x2d, 0x00, 0x34, 0x2d, 0x0d, 0xd7, 0x2c, 0xf3, 0x48, 0xef, 0xa2, 0xcb, 0x90, 0xeb, 0x29, + 0xea, 0xb1, 0x6e, 0x62, 0xd9, 0x3b, 0xb3, 0x71, 0x49, 0xb8, 0x24, 0x5c, 0xc9, 0x48, 0x59, 0x4e, + 0xdb, 0x3f, 0xb3, 0x31, 0xba, 0x04, 0x39, 0x4d, 0x77, 0x4f, 0x64, 0x57, 0xbf, 0x87, 0xe5, 0xee, + 0x61, 0x69, 0xee, 0x92, 0x70, 0x65, 0x41, 0x02, 0x42, 0xeb, 0xe8, 0xf7, 0xf0, 0xce, 0x21, 0x99, + 0xc4, 0x52, 0xfa, 0xde, 0xb1, 0xec, 0xaa, 0x96, 0x8d, 0xdd, 0xd2, 0xfc, 0xa5, 0x79, 0x32, 0x09, + 0xa5, 0x75, 0x28, 0x09, 0x3d, 0x03, 0xcb, 0x5c, 0x2f, 0x59, 0x51, 0x55, 0xab, 0x6f, 0x7a, 0xa5, + 0x0c, 0x5d, 0xaa, 0xc0, 0xc9, 0x55, 0x46, 0x45, 0x0d, 0x58, 0xea, 0x61, 0x4f, 0xd1, 0x14, 0x4f, + 0x29, 0xa5, 0x2e, 0xcd, 0x5f, 0xc9, 0xbe, 0xf4, 0xc2, 0x56, 0x8c, 0x09, 0xb6, 0x06, 0x3a, 0x6c, + 0xed, 0x71, 0xfe, 0xba, 0xe9, 0x39, 0x67, 0x52, 0x20, 0x8e, 0x2e, 0x02, 0xe8, 0x3d, 0xa5, 0xcb, + 0x35, 0x5b, 0xa0, 0xcb, 0x65, 0x28, 0x85, 0xea, 0x55, 0x83, 0xb4, 0xa1, 0x1c, 0x62, 0xc3, 0x2d, + 0xa5, 0xe9, 0x3a, 0xcf, 0x4d, 0x5a, 0x67, 0x97, 0x72, 0xb3, 0x55, 0xb8, 0x28, 0x7a, 0x1a, 0x96, + 0x0d, 0x4b, 0x55, 0x0c, 0xd9, 0x75, 0x35, 0x99, 0xe9, 0xb5, 0x48, 0xed, 0x93, 0xa7, 0xe4, 0x8e, + 0xab, 0xd5, 0xa8, 0x5a, 0x08, 0x52, 0x9e, 0xd2, 0x75, 0x4b, 0x4b, 0xd4, 0x34, 0xf4, 0x37, 0xba, + 0x04, 0x59, 0xdb, 0xc1, 0xe4, 0xe5, 0xe8, 0x87, 0x06, 0x2e, 0xc1, 0x25, 0xe1, 0xca, 0x92, 0x14, + 0x26, 0xa1, 0xf7, 0x21, 0xa7, 0xa8, 0x2a, 0x36, 0xb0, 0xa3, 0x78, 0x96, 0xe3, 0x96, 0xb2, 0x14, + 0xe8, 0xd3, 0xb1, 0x40, 0xab, 0x03, 0x46, 0x86, 0x57, 0x8a, 0xc8, 0xa2, 0x2b, 0x50, 0xec, 0xe9, + 0xa6, 0xac, 0xda, 0x7d, 0xd9, 0x36, 0x14, 0xef, 0xc8, 0x72, 0x7a, 0xa5, 0x3c, 0x7b, 0x05, 0x3d, + 0xdd, 0xac, 0xd9, 0xfd, 0x36, 0xa7, 0x96, 0xdf, 0x82, 0x7c, 0xc4, 0xa4, 0xa8, 0x08, 0xf3, 0x27, + 0xf8, 0x8c, 0xef, 0x0d, 0xf2, 0x13, 0xad, 0xc1, 0xc2, 0xa9, 0x62, 0xf4, 0x31, 0xdd, 0x0c, 0x19, + 0x89, 0x3d, 0x5c, 0x9f, 0x7b, 0x43, 0x28, 0xbf, 0x09, 0xd9, 0x90, 0x9d, 0x1e, 0x46, 0x54, 0xfc, + 0xf1, 0x1c, 0xc0, 0x9e, 0x42, 0xce, 0x40, 0xb5, 0xef, 0x1d, 0xa3, 0x32, 0x2c, 0xf5, 0x5d, 0xec, + 0x98, 0x4a, 0xcf, 0xdf, 0x96, 0xc1, 0x33, 0x19, 0xb3, 0x15, 0xd7, 0xfd, 0xc4, 0x72, 0x34, 0x3e, + 0x4f, 0xf0, 0x8c, 0x8e, 0xe1, 0x11, 0xd5, 0xd0, 0xb1, 0xe9, 0xc9, 0x2a, 0x76, 0x3c, 0xfd, 0x48, + 0x57, 0x15, 0x0f, 0xcb, 0x2a, 0xb5, 0x49, 0x69, 0xfe, 0x92, 0x70, 0x25, 0xfb, 0xd2, 0xf3, 0xb1, + 0x16, 0xac, 0x51, 0xa9, 0xda, 0x40, 0x88, 0xdb, 0x71, 0x53, 0x8d, 0x1f, 0x40, 0xaf, 0xc0, 0x86, + 0x7f, 0x68, 0x55, 0x25, 0xbc, 0x5a, 0x49, 0xa3, 0x98, 0xd6, 0xf8, 0x68, 0x4d, 0x09, 0xc9, 0xa2, + 0x17, 0x00, 0x8d, 0xe2, 0x2b, 0x61, 0x2a, 0xb1, 0x32, 0xb2, 0x14, 0xd9, 0xc5, 0x9c, 0x9d, 0x18, + 0xf2, 0x88, 0xed, 0x62, 0x46, 0xb9, 0x85, 0xcf, 0xc4, 0x0e, 0x6c, 0x26, 0xe0, 0x46, 0x6f, 0x40, + 0x49, 0x77, 0xdd, 0x3e, 0x96, 0x63, 0x96, 0x13, 0xe8, 0x66, 0xdb, 0xa0, 0xe3, 0x23, 0xf2, 0xe2, + 0x77, 0xe6, 0x21, 0x57, 0xd5, 0x34, 0xcb, 0x74, 0xf9, 0x54, 0xb7, 0x61, 0xf5, 0xd8, 0xf3, 0x6c, + 0xd9, 0xb0, 0x14, 0x4d, 0x3e, 0x54, 0x0c, 0xc5, 0x54, 0x75, 0xb3, 0x4b, 0x67, 0x49, 0xda, 0x8f, + 0x37, 0x3d, 0xcf, 0xde, 0xb5, 0x14, 0xed, 0x86, 0xcf, 0x2d, 0xad, 0x1c, 0x0f, 0x93, 0xd0, 0x09, + 0x94, 0x8f, 0x2d, 0x47, 0xbf, 0x47, 0x04, 0x0d, 0xd9, 0xb6, 0x34, 0x59, 0xe9, 0x7b, 0x96, 0xab, + 0x2a, 0x06, 0x99, 0x7e, 0x8e, 0x4e, 0x1f, 0x7f, 0xfe, 0x6f, 0x06, 0x62, 0x6d, 0x4b, 0xab, 0x0e, + 0x84, 0xa4, 0xd2, 0x71, 0xc2, 0x08, 0xfa, 0x05, 0x58, 0x3b, 0xe9, 0x1f, 0x62, 0xc7, 0xc4, 0x1e, + 0x76, 0x65, 0x4d, 0x71, 0x8f, 0x0f, 0x2d, 0xc5, 0xd1, 0xf8, 0x9e, 0xb8, 0x12, 0xbb, 0xcc, 0xad, + 0x40, 0x60, 0xdb, 0xe7, 0x97, 0x56, 0x4f, 0x46, 0x89, 0xe8, 0x2e, 0xac, 0x9b, 0xd8, 0xfb, 0xc4, + 0x72, 0x4e, 0x64, 0xdb, 0x32, 0x74, 0xf5, 0xcc, 0xdf, 0x71, 0xa9, 0x31, 0xb3, 0x37, 0x99, 0x44, + 0x9b, 0x0a, 0xf0, 0xdd, 0xb6, 0x6a, 0x8e, 0x12, 0xc5, 0x0a, 0xac, 0x8c, 0xd8, 0x93, 0x1c, 0x02, + 0x4d, 0x77, 0x95, 0x43, 0x03, 0x6b, 0xfc, 0x7d, 0x06, 0xcf, 0xe2, 0x6b, 0x50, 0x4a, 0xb2, 0xd0, + 0x58, 0xb9, 0x6b, 0xb0, 0x1a, 0xa3, 0xf2, 0x24, 0x91, 0x18, 0x3d, 0xc6, 0x8a, 0xfc, 0xaf, 0x00, + 0x8f, 0x0d, 0x4e, 0x3a, 0xc1, 0x89, 0x35, 0x3e, 0x87, 0xbf, 0xe3, 0x4a, 0xb0, 0x88, 0xcd, 0xb0, + 0xb4, 0xff, 0x88, 0xbe, 0x09, 0x59, 0x55, 0xd7, 0x1c, 0xf9, 0xd0, 0xb0, 0xd4, 0x13, 0xb7, 0x34, + 0x47, 0x7d, 0xe2, 0xd7, 0x63, 0xed, 0x3b, 0x7e, 0x8d, 0xad, 0x9a, 0xae, 0x39, 0x37, 0xc8, 0x2c, + 0x12, 0xa8, 0xfe, 0x4f, 0xb7, 0xbc, 0x07, 0x99, 0x60, 0x80, 0x84, 0x36, 0x4d, 0x77, 0x6d, 0x43, + 0x39, 0x93, 0x43, 0x8e, 0x28, 0xcb, 0x69, 0x4d, 0xe2, 0x8b, 0xc8, 0x01, 0x0d, 0xf0, 0x70, 0x6f, + 0x94, 0x09, 0xe6, 0x13, 0x9f, 0x06, 0xd8, 0xc5, 0x5d, 0x45, 0x3d, 0xab, 0x1e, 0x2a, 0x6a, 0xb2, + 0x5a, 0xe2, 0x0f, 0x04, 0xc8, 0x47, 0xec, 0x88, 0x76, 0x60, 0xc9, 0x76, 0xac, 0x53, 0x5d, 0xc3, + 0x0e, 0x65, 0x2e, 0x24, 0x85, 0xa8, 0xb0, 0xd4, 0x56, 0x9b, 0x8b, 0x48, 0x81, 0x70, 0x78, 0xd1, + 0xb9, 0xe8, 0xa2, 0x2f, 0xc2, 0x52, 0x7b, 0xc0, 0xb5, 0xd6, 0x96, 0x5a, 0xb7, 0x1b, 0xdb, 0x75, + 0x49, 0x3e, 0x68, 0x76, 0xda, 0xf5, 0x5a, 0xe3, 0xbd, 0x46, 0x7d, 0xbb, 0xf8, 0x35, 0x04, 0x90, + 0xae, 0x55, 0x77, 0x1b, 0xb5, 0x56, 0x51, 0x10, 0xff, 0x3c, 0x05, 0xa8, 0xd1, 0xae, 0x1a, 0x24, + 0xbc, 0x91, 0xa4, 0x83, 0x63, 0x7d, 0x12, 0x0a, 0x7d, 0x17, 0xcb, 0xba, 0x2d, 0x2b, 0x86, 0xae, + 0xb8, 0xd8, 0xe5, 0xea, 0xe5, 0xfa, 0x2e, 0x6e, 0xd8, 0x55, 0x46, 0x43, 0xcf, 0xc1, 0x8a, 0xea, + 0x60, 0xe2, 0x8e, 0xdd, 0xfe, 0x21, 0xdf, 0xe7, 0x1c, 0x52, 0x91, 0x0d, 0x74, 0x02, 0x3a, 0x4d, + 0x19, 0x82, 0x27, 0x66, 0xfd, 0x79, 0x9e, 0x32, 0x04, 0x64, 0xfa, 0x02, 0xae, 0xc2, 0x8a, 0xef, + 0x86, 0x75, 0xfb, 0xf4, 0x15, 0x99, 0xd8, 0x9e, 0x1e, 0xbb, 0x8c, 0xb4, 0xcc, 0x07, 0x1a, 0xf6, + 0xe9, 0x2b, 0xe4, 0xa5, 0x12, 0x9c, 0xa6, 0xa5, 0xe1, 0x10, 0x23, 0xcb, 0x0b, 0x72, 0x84, 0x1a, + 0x70, 0x3d, 0x0f, 0x88, 0xa7, 0x25, 0x6e, 0x88, 0x33, 0x4d, 0x39, 0x8b, 0xfe, 0x48, 0xc0, 0xfd, + 0x73, 0x70, 0x61, 0x90, 0xbb, 0xa9, 0x96, 0xa9, 0x29, 0xce, 0x99, 0xec, 0x28, 0x66, 0x17, 0x33, + 0xd4, 0x8b, 0x54, 0xee, 0x11, 0xce, 0xd3, 0xf1, 0x59, 0x24, 0xc2, 0x41, 0x15, 0xa8, 0xc2, 0xc5, + 0x60, 0xb9, 0xd8, 0x19, 0x96, 0xe8, 0x0c, 0x65, 0x9f, 0x29, 0x66, 0x8a, 0x57, 0x61, 0x73, 0xc4, + 0x06, 0x7c, 0x47, 0x66, 0x22, 0xb1, 0xc8, 0x47, 0xcd, 0xb6, 0x77, 0x05, 0xd6, 0xa2, 0xe6, 0xe0, + 0x32, 0xc0, 0xa2, 0x51, 0xd8, 0x28, 0x4c, 0xe0, 0x75, 0x28, 0x8d, 0x5a, 0x86, 0x0b, 0x65, 0xa9, + 0xd0, 0xfa, 0xb0, 0x7d, 0xd8, 0x31, 0xf8, 0x97, 0x65, 0x58, 0xac, 0x31, 0x08, 0x24, 0x19, 0x0a, + 0x1d, 0x26, 0xfa, 0x9b, 0x24, 0x43, 0x1a, 0x76, 0x55, 0x47, 0xb7, 0xc9, 0xae, 0xe2, 0xc7, 0x28, + 0x4c, 0x22, 0x2f, 0x45, 0x37, 0x75, 0x4f, 0x57, 0x0c, 0x99, 0x62, 0x66, 0xd9, 0xd6, 0x3c, 0xcd, + 0xb6, 0x8a, 0x7c, 0x84, 0x65, 0x6b, 0x24, 0xe1, 0x7a, 0x17, 0xb2, 0x9c, 0x2b, 0xe4, 0x85, 0x1f, + 0x9f, 0x90, 0xe2, 0x49, 0x60, 0x0e, 0x52, 0xe3, 0x77, 0x21, 0xdb, 0xa3, 0xfe, 0x83, 0xc4, 0xa4, + 0x63, 0xba, 0x4f, 0x92, 0x66, 0x18, 0xf8, 0x19, 0x09, 0x7a, 0x83, 0x0c, 0xe6, 0x19, 0x92, 0x1c, + 0x76, 0xbb, 0xba, 0xd9, 0xf5, 0x93, 0x7a, 0xbe, 0x87, 0x0a, 0x9c, 0xdc, 0x61, 0x54, 0x92, 0x12, + 0xf4, 0x2c, 0x53, 0xf7, 0x2c, 0x27, 0xcc, 0xcb, 0xf6, 0xcd, 0xca, 0x60, 0xc4, 0x67, 0x2f, 0xc1, + 0xa2, 0x7f, 0x78, 0xd8, 0xce, 0xf0, 0x1f, 0xe3, 0x8f, 0x42, 0x26, 0xfe, 0x28, 0xbc, 0x07, 0x79, + 0x85, 0xc6, 0x78, 0xdf, 0x46, 0x40, 0x35, 0xbc, 0x1c, 0x9f, 0x5d, 0x86, 0xb2, 0x01, 0x29, 0xa7, + 0x84, 0x73, 0x83, 0xc7, 0x00, 0x42, 0xa7, 0x99, 0x6d, 0x82, 0x10, 0x05, 0xbd, 0x0d, 0xd4, 0xaa, + 0xb2, 0x6d, 0x59, 0x86, 0x5b, 0xca, 0x51, 0x77, 0x7d, 0x31, 0xf1, 0x45, 0xb4, 0x2d, 0xcb, 0x90, + 0x32, 0x26, 0xff, 0xe5, 0xa2, 0x0b, 0x90, 0xf1, 0x5d, 0x8d, 0x5b, 0xca, 0xd3, 0xec, 0x79, 0x40, + 0x40, 0xaf, 0xc1, 0x26, 0x73, 0x65, 0x72, 0x28, 0xb2, 0x2b, 0x86, 0x7d, 0xac, 0x94, 0x0a, 0xd4, + 0xad, 0xac, 0xb3, 0xe1, 0x41, 0x4c, 0xab, 0x92, 0x41, 0xf4, 0x21, 0x2c, 0x3b, 0xd8, 0xb5, 0xfa, + 0x8e, 0x8a, 0x65, 0x7e, 0x09, 0x58, 0xa6, 0xc0, 0x5e, 0x4c, 0xc8, 0x0c, 0xa9, 0xe9, 0xb6, 0x24, + 0x2e, 0x13, 0xbe, 0x09, 0x14, 0x9c, 0x08, 0x91, 0xf8, 0x38, 0x3a, 0xa3, 0x7c, 0xa4, 0x9b, 0x5d, + 0xec, 0xd8, 0x8e, 0x6e, 0x7a, 0xa5, 0x22, 0x73, 0x1d, 0x74, 0xe0, 0xbd, 0x01, 0x9d, 0xec, 0x31, + 0x83, 0x06, 0x07, 0x59, 0x39, 0x54, 0xd4, 0x12, 0x1a, 0xb3, 0xc7, 0x06, 0x41, 0x44, 0x02, 0x63, + 0x10, 0x50, 0x1a, 0x50, 0x88, 0xe6, 0x1d, 0xa5, 0x55, 0x3a, 0x89, 0x38, 0x39, 0x54, 0x48, 0xf9, + 0x48, 0xaa, 0x81, 0x3e, 0x84, 0x35, 0xea, 0xbf, 0x7d, 0xf3, 0xfa, 0x13, 0xae, 0xd1, 0x09, 0x9f, + 0x89, 0x9d, 0x70, 0x34, 0x14, 0x48, 0x48, 0xb7, 0x47, 0xc2, 0xc3, 0x2f, 0xc2, 0xe5, 0xd0, 0x59, + 0x62, 0xc1, 0x58, 0xe6, 0xab, 0x07, 0xfb, 0x6f, 0x83, 0xae, 0xf3, 0xf2, 0xe7, 0x88, 0xe4, 0xd2, + 0x63, 0xbd, 0xf1, 0xd9, 0xc4, 0x01, 0xa0, 0x9e, 0xa2, 0x9b, 0x1e, 0x36, 0x15, 0x53, 0xc5, 0xbe, + 0x62, 0x9b, 0x63, 0xd2, 0xd7, 0xbd, 0x01, 0x3b, 0xd7, 0x6b, 0xa5, 0x37, 0x4c, 0x42, 0x8f, 0x42, + 0xc6, 0xc5, 0xc6, 0x91, 0x6c, 0xe8, 0xe6, 0x09, 0xcf, 0xf9, 0x97, 0x08, 0x61, 0x57, 0x37, 0x4f, + 0x88, 0x97, 0xbb, 0x67, 0x99, 0x7e, 0x66, 0x4f, 0x7f, 0x93, 0xa4, 0x08, 0x9b, 0x9a, 0x6d, 0x91, + 0x3d, 0xc1, 0x52, 0xf9, 0xe0, 0x99, 0xec, 0x65, 0xdf, 0xbf, 0xf9, 0x67, 0xf8, 0x14, 0x3b, 0x2e, + 0xf1, 0x86, 0x5d, 0xe6, 0x59, 0xf9, 0x30, 0xdf, 0x8d, 0xb7, 0xd9, 0x20, 0xbd, 0x85, 0xf4, 0x1d, + 0x87, 0x64, 0xf8, 0xdc, 0xc6, 0xbe, 0xd8, 0x31, 0xf7, 0xfc, 0x6c, 0x94, 0x99, 0xd0, 0x97, 0x7a, + 0x11, 0x7c, 0x3a, 0xf3, 0xa6, 0xbe, 0x8c, 0x4e, 0x65, 0x10, 0x1f, 0x23, 0x27, 0xd2, 0x97, 0x78, + 0x1c, 0xb2, 0x3c, 0x78, 0x7b, 0x7a, 0x0f, 0x97, 0x3e, 0x66, 0x07, 0x9d, 0x91, 0xf6, 0xf5, 0x1e, + 0x46, 0x6f, 0x41, 0xda, 0xf5, 0x14, 0xaf, 0xef, 0x96, 0x4e, 0x68, 0xb6, 0xf2, 0xc4, 0xd8, 0xb3, + 0xd4, 0xa1, 0xac, 0x12, 0x17, 0x41, 0x4f, 0x41, 0x81, 0xfd, 0x92, 0x7b, 0xd8, 0x75, 0x95, 0x2e, + 0x2e, 0x19, 0x74, 0x81, 0x3c, 0xa3, 0xee, 0x31, 0x22, 0x7a, 0x01, 0x56, 0x87, 0x02, 0x96, 0xab, + 0xdf, 0xc3, 0xa5, 0x1e, 0x8b, 0x02, 0xe1, 0x78, 0xd5, 0xd1, 0xef, 0xe1, 0x84, 0x40, 0x6e, 0x26, + 0x04, 0xf2, 0x2d, 0x58, 0xd5, 0x4d, 0xd7, 0xa3, 0x5b, 0xa4, 0xeb, 0x58, 0x7d, 0x5b, 0xee, 0x3b, + 0x86, 0x5b, 0xb2, 0xa8, 0xd7, 0x59, 0xf1, 0x87, 0x76, 0xc8, 0xc8, 0x81, 0x63, 0xb8, 0x64, 0xf6, + 0x88, 0x0d, 0x59, 0x44, 0xb2, 0x19, 0x96, 0x90, 0x05, 0x59, 0x44, 0x7a, 0x1c, 0xb2, 0xf8, 0x53, + 0x5b, 0x77, 0xb8, 0xfd, 0xbe, 0xc5, 0xec, 0xc7, 0x48, 0xc4, 0x7e, 0xe5, 0x2a, 0xac, 0xc6, 0x38, + 0x98, 0x87, 0xba, 0x42, 0xeb, 0x90, 0x66, 0x76, 0x45, 0x1b, 0x80, 0x3a, 0xfb, 0xd5, 0xfd, 0x83, + 0xce, 0x50, 0x2e, 0x57, 0x84, 0x1c, 0xcd, 0xf2, 0x3a, 0x8d, 0x56, 0xb3, 0xd1, 0xdc, 0x29, 0x0a, + 0x28, 0x0b, 0x8b, 0xd2, 0x41, 0x93, 0x3e, 0xcc, 0xa1, 0x65, 0xc8, 0x4a, 0xf5, 0x5a, 0xab, 0x59, + 0x6b, 0xec, 0x12, 0xc2, 0x3c, 0xca, 0xc1, 0x52, 0x67, 0xbf, 0xd5, 0x6e, 0x93, 0xa7, 0x14, 0xca, + 0xc0, 0x42, 0x5d, 0x92, 0x5a, 0x52, 0x71, 0x41, 0xfc, 0xee, 0x02, 0xe4, 0xf9, 0xbb, 0x3c, 0xb0, + 0x35, 0x72, 0x53, 0x7d, 0x11, 0xd6, 0x34, 0xec, 0xea, 0x0e, 0x39, 0xda, 0xe1, 0x2d, 0xc5, 0x52, + 0x31, 0xc4, 0xc7, 0xc2, 0x5b, 0xea, 0x6d, 0x28, 0xfb, 0x12, 0x31, 0xf1, 0x8f, 0x65, 0x66, 0x25, + 0xce, 0xb1, 0x37, 0x12, 0x06, 0x0f, 0x60, 0xdd, 0x97, 0x8e, 0x06, 0xb2, 0xf4, 0x79, 0x03, 0xd9, + 0x2a, 0x97, 0x8f, 0xdc, 0x75, 0x2b, 0x43, 0x6a, 0x90, 0xb8, 0x25, 0xeb, 0x9a, 0x1f, 0x8e, 0x43, + 0x6a, 0x90, 0x08, 0xd5, 0xd0, 0xc8, 0x36, 0xf0, 0x05, 0x42, 0xf5, 0x26, 0x16, 0x99, 0x8b, 0x7c, + 0xa4, 0x11, 0x94, 0x9d, 0x4e, 0xe0, 0xe2, 0xe8, 0xf4, 0xe1, 0x5b, 0x6f, 0x66, 0xdc, 0x85, 0x91, + 0xaf, 0x1a, 0xbe, 0xf0, 0x96, 0x87, 0x10, 0x85, 0xaf, 0x7a, 0xcf, 0x81, 0x8f, 0x57, 0x1e, 0x44, + 0x51, 0xa0, 0xfb, 0xd9, 0x47, 0xb6, 0x1b, 0x04, 0xd3, 0xdf, 0x10, 0xe0, 0xd9, 0xe0, 0x75, 0x4c, + 0xf4, 0xd6, 0xb9, 0xcf, 0xef, 0xad, 0x9f, 0xf2, 0x5f, 0xe9, 0x78, 0xa7, 0xfd, 0x0a, 0x6c, 0x0c, + 0xc1, 0xf1, 0x77, 0x14, 0x2f, 0xaf, 0x44, 0xa6, 0xe1, 0x7b, 0x4a, 0xfc, 0xc7, 0x34, 0x64, 0x5a, + 0x36, 0x76, 0xa8, 0x52, 0xb1, 0xa9, 0xa6, 0xef, 0x98, 0xe7, 0x42, 0x8e, 0xf9, 0x7d, 0x28, 0x58, + 0xbe, 0x10, 0x7b, 0x7f, 0xf3, 0x63, 0x7c, 0x58, 0x30, 0xff, 0x16, 0x79, 0xa5, 0x52, 0x3e, 0x10, + 0xa5, 0x6f, 0xf8, 0xeb, 0x81, 0x1f, 0x4c, 0xd1, 0x39, 0x9e, 0x9a, 0x30, 0xc7, 0x90, 0x27, 0xdc, + 0x80, 0xb4, 0x86, 0x3d, 0x45, 0x37, 0xf8, 0x16, 0xe2, 0x4f, 0x31, 0x1e, 0x72, 0x21, 0xce, 0x43, + 0x46, 0x62, 0x52, 0x7a, 0x28, 0x26, 0x3d, 0x0e, 0x59, 0x4f, 0x71, 0xba, 0xd8, 0x63, 0xc3, 0x6c, + 0x4b, 0x03, 0x23, 0x51, 0x86, 0x8b, 0x00, 0xae, 0xa7, 0x38, 0x1e, 0xf3, 0x51, 0xec, 0x1a, 0x90, + 0xa1, 0x14, 0xea, 0xe2, 0x1f, 0xa1, 0xf1, 0x8b, 0x0d, 0xb2, 0x4c, 0x6f, 0x11, 0x9b, 0x1a, 0x19, + 0x12, 0xa5, 0x89, 0xae, 0x27, 0x0b, 0x8b, 0xed, 0x7a, 0x73, 0x3b, 0xc6, 0xeb, 0x2c, 0x41, 0x6a, + 0xbb, 0xd5, 0xac, 0x33, 0x77, 0x53, 0xbd, 0xd1, 0x92, 0xf6, 0xa9, 0xbb, 0x11, 0xff, 0x6f, 0x0e, + 0x52, 0xd4, 0xa4, 0x6b, 0x50, 0xdc, 0xff, 0xb0, 0x5d, 0x1f, 0x9a, 0x10, 0x41, 0xa1, 0x26, 0xd5, + 0xab, 0xfb, 0x75, 0xb9, 0xb6, 0x7b, 0xd0, 0xd9, 0xaf, 0x4b, 0x45, 0x81, 0xd0, 0xb6, 0xeb, 0xbb, + 0xf5, 0x10, 0x6d, 0x8e, 0xd0, 0x0e, 0xda, 0x3b, 0x52, 0x75, 0xbb, 0x2e, 0xef, 0x55, 0x29, 0x6d, + 0x1e, 0xad, 0x40, 0xde, 0xa7, 0x35, 0x5b, 0xdb, 0xf5, 0x4e, 0x31, 0x45, 0xd8, 0xa4, 0x7a, 0xbb, + 0xda, 0x90, 0x02, 0xd1, 0x05, 0x26, 0xba, 0x1d, 0x5e, 0x22, 0x4d, 0xc0, 0xf0, 0x65, 0x89, 0xa4, + 0xdc, 0x6e, 0xb5, 0x76, 0x8b, 0x8b, 0x84, 0xca, 0x17, 0x1e, 0x50, 0x97, 0xd0, 0x05, 0x28, 0x75, + 0xea, 0xfb, 0x03, 0x92, 0xbc, 0x57, 0x6d, 0x56, 0x77, 0xea, 0x7b, 0xf5, 0xe6, 0x7e, 0x31, 0x83, + 0xd6, 0x61, 0xa5, 0x7a, 0xb0, 0xdf, 0x92, 0xf9, 0xb2, 0x0c, 0x08, 0x10, 0x03, 0x52, 0x72, 0x14, + 0x60, 0x16, 0x15, 0x00, 0xc8, 0x64, 0xbb, 0xd5, 0x1b, 0xf5, 0xdd, 0x4e, 0x31, 0x87, 0x56, 0x61, + 0x99, 0x3c, 0x33, 0x9d, 0xe4, 0xea, 0xc1, 0xfe, 0xcd, 0x62, 0x9e, 0x5a, 0x3f, 0xb2, 0x62, 0xa7, + 0xf1, 0x51, 0xbd, 0x58, 0x08, 0xe8, 0xf5, 0xfd, 0x3b, 0x2d, 0xe9, 0x96, 0xdc, 0x6e, 0xed, 0x36, + 0x6a, 0x1f, 0x16, 0x97, 0x51, 0x19, 0x36, 0xd8, 0x24, 0x8d, 0xe6, 0x7e, 0xbd, 0x59, 0x6d, 0xd6, + 0xea, 0xfe, 0x58, 0x51, 0xfc, 0x25, 0x01, 0xd6, 0x6a, 0x34, 0xc0, 0x73, 0x4f, 0x2f, 0xe1, 0x6f, + 0xf5, 0xb1, 0xeb, 0x91, 0x6d, 0x62, 0x3b, 0xd6, 0xc7, 0x58, 0xf5, 0x88, 0x67, 0x64, 0x87, 0x2b, + 0xc3, 0x29, 0x0d, 0x2d, 0xf6, 0x84, 0xbd, 0x06, 0x8b, 0x3c, 0xad, 0xe1, 0x05, 0xb7, 0x0b, 0xe3, + 0xd2, 0x03, 0xc9, 0x67, 0x16, 0x31, 0xac, 0xec, 0x60, 0x6f, 0xfa, 0xf5, 0x69, 0x1d, 0x95, 0x5f, + 0x8d, 0x34, 0x5e, 0x49, 0xc8, 0xf8, 0x77, 0x22, 0x5a, 0x7e, 0x59, 0x63, 0x71, 0x6c, 0xd6, 0x4b, + 0xa1, 0xeb, 0x90, 0xee, 0xd3, 0x95, 0xf8, 0xad, 0x54, 0x1c, 0x67, 0x08, 0x86, 0x49, 0xe2, 0x12, + 0xe2, 0x3f, 0x0b, 0xb0, 0xce, 0x48, 0xc1, 0x65, 0x69, 0x66, 0x38, 0x2f, 0x41, 0x2e, 0x12, 0x00, + 0x59, 0x1c, 0x07, 0x73, 0x10, 0xf9, 0x2e, 0x73, 0x0e, 0xdf, 0x2f, 0x33, 0x87, 0x44, 0x2f, 0xde, + 0x7e, 0x88, 0x8f, 0x36, 0x61, 0xd2, 0x43, 0x4d, 0x18, 0xf1, 0x3f, 0x05, 0xb8, 0xd8, 0xc1, 0x5e, + 0x5c, 0x5c, 0xfb, 0x0a, 0xf5, 0x7a, 0x1f, 0xb2, 0xe1, 0x88, 0xbc, 0xf0, 0x90, 0x11, 0x39, 0x2c, + 0x2c, 0x7e, 0x57, 0x80, 0x52, 0x07, 0x7b, 0xbb, 0x91, 0x1b, 0xff, 0xec, 0x94, 0x8b, 0xa9, 0x39, + 0xa4, 0xe2, 0x6a, 0x0e, 0xe2, 0xf7, 0x05, 0x78, 0xb4, 0x83, 0xbd, 0x91, 0xb4, 0x6a, 0x76, 0xd0, + 0xe2, 0xab, 0x1c, 0xa9, 0x84, 0x2a, 0x87, 0xf8, 0x63, 0x01, 0x36, 0x3a, 0xd8, 0x8b, 0x24, 0x6c, + 0x33, 0xc3, 0x36, 0x52, 0x0c, 0x49, 0x7d, 0xae, 0x62, 0x88, 0xf8, 0x2b, 0x02, 0xac, 0xd2, 0xb7, + 0xcd, 0x93, 0xaa, 0xd9, 0x21, 0x8e, 0x14, 0x46, 0x52, 0x43, 0x85, 0x11, 0xf1, 0x3b, 0x02, 0xac, + 0x32, 0x3f, 0xc1, 0xb2, 0xa3, 0xd9, 0xe1, 0x78, 0x0a, 0x0a, 0x43, 0xd9, 0x19, 0x7b, 0xa3, 0xf9, + 0x5e, 0x24, 0x2d, 0xfb, 0xdb, 0x39, 0x58, 0x23, 0xdb, 0x6d, 0x50, 0x29, 0x9b, 0x19, 0xa2, 0x9b, + 0x90, 0x56, 0x54, 0xcf, 0x47, 0x52, 0x48, 0xa8, 0xe9, 0xc4, 0x81, 0xd9, 0xaa, 0x52, 0x39, 0x89, + 0xcb, 0xa3, 0xd7, 0x03, 0x4f, 0x7d, 0xce, 0xea, 0x9f, 0xef, 0xa6, 0xdb, 0x90, 0x66, 0x53, 0x91, + 0x3c, 0xe7, 0xa0, 0x79, 0xab, 0xd9, 0xba, 0xd3, 0x64, 0x97, 0x2f, 0x12, 0x6b, 0xdb, 0xd5, 0x4e, + 0xe7, 0x4e, 0x4b, 0xda, 0x2e, 0x0a, 0x24, 0x03, 0xd8, 0xa9, 0x37, 0xeb, 0x12, 0xc9, 0x26, 0x02, + 0xf2, 0x9c, 0xcf, 0x78, 0xd0, 0xa9, 0x4b, 0xcd, 0xea, 0x5e, 0xbd, 0x38, 0x2f, 0x1e, 0xc3, 0xda, + 0x36, 0x36, 0xf0, 0xec, 0xc3, 0x93, 0x78, 0x13, 0x56, 0x77, 0x75, 0xd7, 0x8f, 0xb8, 0x53, 0xec, + 0x60, 0xb1, 0x0f, 0x6b, 0xd1, 0x99, 0x5c, 0xdb, 0x32, 0x5d, 0x8c, 0xde, 0x80, 0x25, 0xbe, 0x9c, + 0x5b, 0x12, 0x68, 0xd9, 0x6d, 0x7c, 0x2e, 0x10, 0x70, 0xa3, 0x27, 0x20, 0xdf, 0xd3, 0x5d, 0x97, + 0xf8, 0x0f, 0xb2, 0x02, 0xeb, 0xfe, 0x64, 0xa4, 0x1c, 0x27, 0x7e, 0x44, 0x68, 0xe2, 0x09, 0xac, + 0xee, 0x60, 0x2f, 0xc8, 0xaf, 0xa7, 0xb0, 0xd4, 0x65, 0xc8, 0x0d, 0x6e, 0x05, 0x81, 0xad, 0xb2, + 0x01, 0xad, 0xa1, 0x89, 0xef, 0xc3, 0x3a, 0xd1, 0x31, 0x58, 0x6d, 0x1a, 0x7b, 0x99, 0xb0, 0x51, + 0x53, 0x4c, 0x15, 0x1b, 0x5f, 0x12, 0xf6, 0x07, 0xb0, 0x31, 0x8c, 0x9d, 0xbf, 0xa1, 0x77, 0x00, + 0x02, 0x46, 0xff, 0x1d, 0x3d, 0x36, 0xfe, 0x1a, 0x23, 0x85, 0x24, 0xce, 0xf7, 0x9e, 0x6e, 0xc1, + 0xc6, 0x0e, 0xf6, 0x88, 0xbb, 0xc7, 0xce, 0xb4, 0xfe, 0x5d, 0xfc, 0xe5, 0x39, 0xc8, 0x85, 0xa7, + 0x42, 0xaf, 0xc1, 0xa6, 0x86, 0x8f, 0x94, 0xbe, 0xe1, 0x8d, 0x94, 0xd3, 0xd8, 0x84, 0xeb, 0x7c, + 0x78, 0xa8, 0x9c, 0xb6, 0x05, 0xab, 0xa7, 0x8a, 0xa1, 0x47, 0x6b, 0x18, 0xfe, 0x37, 0x2d, 0x2b, + 0x74, 0x28, 0x54, 0xc2, 0x70, 0xd9, 0xed, 0x9f, 0xad, 0x13, 0x4a, 0x74, 0x52, 0xfe, 0xed, 0x9f, + 0x8e, 0x0c, 0x6e, 0xff, 0x57, 0x81, 0x4d, 0x11, 0xe2, 0x75, 0x4b, 0x0b, 0x74, 0xee, 0x65, 0x3a, + 0x10, 0xb0, 0xba, 0xe8, 0x25, 0x58, 0x67, 0xbc, 0x51, 0xff, 0xca, 0xbe, 0x57, 0xc9, 0x48, 0x0c, + 0x66, 0xe4, 0xf2, 0xeb, 0x8a, 0x7f, 0x20, 0xc0, 0x3a, 0xcb, 0xd8, 0x67, 0x9f, 0x1f, 0x5e, 0x87, + 0x4c, 0x90, 0x47, 0xf1, 0x78, 0x39, 0xa1, 0xae, 0xbf, 0xe4, 0xe7, 0x58, 0xe2, 0xaf, 0x0b, 0xb0, + 0xce, 0xfc, 0xd9, 0xcf, 0x40, 0x1e, 0x4b, 0x9c, 0x2b, 0x39, 0x08, 0x3e, 0x94, 0xd9, 0x45, 0x6d, + 0xf1, 0xd7, 0x04, 0x40, 0x3b, 0x83, 0x7c, 0xf7, 0xab, 0x54, 0xfa, 0x7f, 0x52, 0xb0, 0xe4, 0xe3, + 0x88, 0xad, 0x93, 0xbc, 0x0e, 0x69, 0x9e, 0x0c, 0xcd, 0x9d, 0xaf, 0x7b, 0xc6, 0xd9, 0x1f, 0xb2, + 0x53, 0x37, 0xb6, 0x88, 0x5e, 0x82, 0x45, 0xff, 0xd4, 0xb2, 0x3a, 0xba, 0xff, 0x98, 0x54, 0xac, + 0x3d, 0x4a, 0x2a, 0xd6, 0xbe, 0x1d, 0x54, 0x65, 0xba, 0x34, 0x2b, 0x78, 0x72, 0xec, 0x56, 0x9d, + 0x5c, 0x9e, 0x3e, 0x8e, 0x2b, 0xbe, 0x0c, 0x5d, 0x1c, 0x52, 0x53, 0x5c, 0x1c, 0x50, 0x0d, 0xa0, + 0xa7, 0x98, 0x4a, 0x17, 0xf7, 0xb0, 0xe9, 0xf1, 0x04, 0xe4, 0x89, 0xc4, 0xa9, 0xf6, 0x02, 0x56, + 0x29, 0x24, 0x46, 0x6e, 0xf0, 0x53, 0x56, 0x84, 0x37, 0x00, 0xf1, 0x07, 0xf9, 0x4e, 0x63, 0xff, + 0xa6, 0xcc, 0xea, 0xbf, 0xf3, 0xc3, 0x95, 0xe2, 0x54, 0xa4, 0x52, 0xbc, 0x30, 0xa8, 0x14, 0xa7, + 0xc5, 0x1f, 0x0a, 0x50, 0x88, 0x42, 0x24, 0xc1, 0x89, 0xa8, 0x2a, 0xf7, 0xed, 0xae, 0xa3, 0x68, + 0xfe, 0xe7, 0x48, 0x54, 0xfd, 0x03, 0x46, 0x42, 0x8f, 0x33, 0x53, 0xca, 0x0e, 0xb6, 0x15, 0xdd, + 0xe1, 0x5f, 0x09, 0x00, 0x21, 0x49, 0x94, 0x82, 0xda, 0xb0, 0xcc, 0xc5, 0x65, 0xcb, 0xf6, 0x2b, + 0x9b, 0xc9, 0x9d, 0xaa, 0xea, 0x60, 0xee, 0x16, 0x63, 0x97, 0x0a, 0xfd, 0xc8, 0xb3, 0xd8, 0x03, + 0x34, 0xca, 0x85, 0x5e, 0x85, 0xcd, 0x30, 0x56, 0x39, 0x54, 0x1f, 0x63, 0xa7, 0x65, 0x2d, 0x04, + 0xbb, 0x13, 0x94, 0xca, 0x26, 0x36, 0xb4, 0xc5, 0x0e, 0xac, 0x8c, 0x74, 0x99, 0xd0, 0x3b, 0x90, + 0xfe, 0x44, 0x37, 0x35, 0xeb, 0x93, 0xb1, 0x1f, 0x57, 0x85, 0xe4, 0xee, 0x50, 0x6e, 0x89, 0x4b, + 0x89, 0xbf, 0x2a, 0x44, 0x66, 0x65, 0xa3, 0xa8, 0x0b, 0x25, 0x4d, 0xd1, 0x8d, 0x33, 0x39, 0xdc, + 0x05, 0xe3, 0xeb, 0xb0, 0xc3, 0x1d, 0xff, 0x69, 0xc9, 0x36, 0x11, 0x1a, 0x99, 0xee, 0xe6, 0xd7, + 0xa4, 0x0d, 0x2d, 0x76, 0xe4, 0xc6, 0x12, 0xa4, 0x59, 0x73, 0x4d, 0xec, 0xc0, 0x46, 0xbc, 0xf4, + 0x50, 0x8d, 0x71, 0x6e, 0xb8, 0xc6, 0x58, 0x86, 0x25, 0xad, 0xcf, 0x12, 0x09, 0xee, 0xd6, 0x82, + 0x67, 0xf1, 0xdf, 0x04, 0xb8, 0x10, 0x2a, 0x17, 0x84, 0x36, 0xfd, 0x57, 0x58, 0x2d, 0xf8, 0x42, + 0x0e, 0xea, 0x8f, 0xd8, 0x6d, 0xd7, 0xd7, 0xac, 0xa3, 0xdf, 0xc3, 0x5f, 0xa5, 0x4e, 0x17, 0x79, + 0xd3, 0x9e, 0xb9, 0xee, 0x05, 0xea, 0xba, 0x33, 0xa6, 0xef, 0xb3, 0xc5, 0xdf, 0x12, 0xe0, 0x31, + 0xc9, 0x32, 0x8c, 0x43, 0x45, 0x3d, 0xf1, 0x21, 0xf3, 0x13, 0xf0, 0x55, 0x86, 0xb4, 0x03, 0x96, + 0x8c, 0x87, 0xe2, 0x38, 0xcf, 0x67, 0xa3, 0xdf, 0x20, 0x08, 0x0f, 0xf7, 0x0d, 0x82, 0x78, 0x1f, + 0x56, 0xe3, 0x9a, 0x2b, 0xc9, 0x9f, 0xa8, 0x3d, 0x09, 0x85, 0x9e, 0x6e, 0x86, 0x83, 0x1f, 0xfb, + 0x68, 0x3a, 0xd7, 0xd3, 0xcd, 0x41, 0xe0, 0x23, 0x5c, 0xca, 0xa7, 0xa3, 0x21, 0x32, 0xd7, 0x53, + 0x3e, 0x0d, 0xb8, 0xc4, 0xbf, 0x9c, 0x83, 0x62, 0x07, 0x7b, 0xac, 0x23, 0x38, 0x3b, 0xe3, 0x1e, + 0x8e, 0x7e, 0x11, 0xc1, 0x3e, 0xbf, 0x7e, 0x33, 0xe9, 0xf6, 0x1c, 0x41, 0xf4, 0xf9, 0x3f, 0x8d, + 0x58, 0x88, 0xff, 0x34, 0xe2, 0x8b, 0xe8, 0x86, 0x7e, 0x5b, 0xa0, 0x35, 0x87, 0xd0, 0x97, 0x13, + 0x33, 0x33, 0x5f, 0x68, 0x2f, 0xa4, 0xa2, 0x9f, 0xd8, 0x7d, 0x0c, 0x1b, 0x34, 0x28, 0x34, 0xda, + 0x12, 0xff, 0x4e, 0x7f, 0x76, 0xd9, 0x65, 0x0f, 0x1e, 0xa9, 0x59, 0x3d, 0x9b, 0xa4, 0xd5, 0x5f, + 0xc6, 0x72, 0x27, 0xb0, 0x32, 0xf2, 0xd5, 0x39, 0x79, 0xc9, 0xa1, 0xef, 0xce, 0xf9, 0xc6, 0x26, + 0xab, 0xcd, 0x4b, 0x45, 0x25, 0xcc, 0x4d, 0x8e, 0xc0, 0xb3, 0x10, 0xa6, 0xb1, 0xab, 0x13, 0x03, + 0xb0, 0x1c, 0xa2, 0xd3, 0x4a, 0xf1, 0x4f, 0x04, 0xd8, 0x24, 0x0e, 0x32, 0xf2, 0x05, 0xcb, 0xcc, + 0xde, 0xe7, 0xe8, 0x67, 0x35, 0xa9, 0xcf, 0xf9, 0x59, 0x8d, 0xf8, 0x53, 0x5e, 0x68, 0x1d, 0xf9, + 0xa0, 0x64, 0x66, 0xe0, 0xe3, 0xbf, 0x76, 0x49, 0x4d, 0xf9, 0xb5, 0xcb, 0x4b, 0xff, 0x75, 0x15, + 0x0a, 0xfc, 0xb2, 0xcc, 0x82, 0x98, 0x83, 0x7e, 0x47, 0x80, 0x5c, 0xb8, 0xc4, 0x83, 0xe2, 0x73, + 0xdd, 0x98, 0x7a, 0x52, 0xf9, 0xd9, 0x73, 0x70, 0x32, 0xef, 0x2d, 0xbe, 0xfe, 0xed, 0x7f, 0xfd, + 0xef, 0xdf, 0x9c, 0xbb, 0x86, 0x2a, 0x95, 0xd3, 0x6b, 0x15, 0x6e, 0x19, 0xb7, 0x72, 0x7f, 0x60, + 0xb5, 0x07, 0x15, 0x5a, 0x65, 0xa8, 0xdc, 0x27, 0xff, 0x3c, 0xa8, 0x04, 0xe5, 0xa2, 0xef, 0x09, + 0x00, 0x83, 0xe6, 0x11, 0x8a, 0xd7, 0x7d, 0xa4, 0xbb, 0x54, 0x1e, 0x5b, 0x8d, 0x12, 0xb7, 0x29, + 0x9a, 0x77, 0xd0, 0xdb, 0x0f, 0x89, 0xa6, 0x72, 0x7f, 0xf0, 0xce, 0x1e, 0xa0, 0xdf, 0x16, 0x20, + 0x1f, 0x69, 0xad, 0xa1, 0x78, 0x83, 0xc4, 0xb5, 0xdf, 0xca, 0x13, 0x4a, 0x31, 0xe2, 0x75, 0x0a, + 0xf1, 0x15, 0xf1, 0x61, 0x0d, 0x76, 0x5d, 0xb8, 0x8a, 0x7e, 0x5f, 0x80, 0x7c, 0xa4, 0x11, 0x96, + 0x00, 0x2c, 0xae, 0x59, 0x36, 0x11, 0xd8, 0x0e, 0x05, 0x56, 0x2d, 0x4f, 0x65, 0x3b, 0x82, 0xf2, + 0xef, 0x05, 0x28, 0x44, 0xfb, 0x60, 0xe8, 0xea, 0x18, 0x98, 0x43, 0xf7, 0xed, 0x89, 0x38, 0xbb, + 0x14, 0xa7, 0x22, 0xde, 0x9d, 0x06, 0x67, 0x25, 0xc8, 0x20, 0x2a, 0xf7, 0xc3, 0x89, 0xcb, 0x83, + 0x0a, 0xab, 0x12, 0x13, 0x3d, 0xfe, 0x23, 0x9a, 0xf6, 0x85, 0xd3, 0x8b, 0x97, 0x92, 0x02, 0x6f, + 0x72, 0xb3, 0x6c, 0xa2, 0x5e, 0x06, 0xd5, 0xeb, 0x48, 0x54, 0x66, 0xa3, 0x57, 0xe8, 0xfa, 0x4a, + 0x94, 0xfb, 0x53, 0x01, 0x56, 0x46, 0x5a, 0x5f, 0xe8, 0x85, 0xc4, 0x84, 0x22, 0xae, 0x45, 0x36, + 0x51, 0xa5, 0x16, 0x55, 0xa9, 0x21, 0x6e, 0x4f, 0xa5, 0x12, 0x6f, 0x8e, 0x11, 0xd4, 0x7f, 0xc3, + 0xb2, 0x86, 0xd1, 0xef, 0x8d, 0x92, 0xfb, 0x08, 0x09, 0x3d, 0xb4, 0x89, 0xd8, 0x25, 0x8a, 0x7d, + 0x57, 0xdc, 0x99, 0x0a, 0xfb, 0xa0, 0x75, 0x46, 0xe0, 0xff, 0x91, 0x00, 0xcb, 0x43, 0x6d, 0x33, + 0xf4, 0x5c, 0x12, 0xf2, 0x98, 0xe6, 0xda, 0x44, 0xd0, 0x4d, 0x0a, 0xfa, 0xa6, 0x58, 0x9b, 0x0a, + 0x34, 0xeb, 0x9a, 0x11, 0xc0, 0x3f, 0x12, 0x20, 0x17, 0x6e, 0x99, 0x25, 0xc4, 0x90, 0x98, 0xae, + 0xda, 0x44, 0xa8, 0x1f, 0x50, 0xa8, 0xb7, 0xc4, 0xf7, 0xa6, 0xdc, 0x1b, 0x7c, 0x59, 0x82, 0xf6, + 0x0f, 0x05, 0xc8, 0x85, 0x1b, 0x6b, 0x09, 0x68, 0x63, 0x7a, 0x6f, 0x5f, 0x92, 0x61, 0x59, 0xb1, + 0x98, 0x40, 0xfd, 0x13, 0x01, 0xf2, 0x91, 0x2e, 0x57, 0x82, 0x27, 0x8f, 0xeb, 0x84, 0x4d, 0x04, + 0x7b, 0x40, 0xc1, 0xb6, 0xc4, 0xf7, 0xa7, 0xf2, 0xe4, 0x6e, 0x78, 0x69, 0x82, 0xf9, 0x77, 0x05, + 0xc8, 0x47, 0xfa, 0x5c, 0x09, 0x98, 0xe3, 0x7a, 0x61, 0x13, 0x31, 0xf3, 0xc8, 0x7d, 0x75, 0xba, + 0xc8, 0xfd, 0x03, 0x01, 0x0a, 0xd1, 0xb6, 0x49, 0x42, 0xe8, 0x89, 0xed, 0x0b, 0x95, 0x9f, 0x3b, + 0x17, 0x2f, 0xcf, 0x7c, 0xde, 0xa4, 0x88, 0x5f, 0x46, 0xd7, 0xce, 0x89, 0x38, 0xd4, 0x82, 0xf9, + 0x3d, 0x01, 0x72, 0xe1, 0x36, 0x58, 0xc2, 0x46, 0x8d, 0xe9, 0x94, 0x4d, 0xb4, 0xe3, 0x4d, 0x8a, + 0xea, 0x06, 0x7a, 0xf7, 0xa1, 0x51, 0x55, 0xee, 0x87, 0x7b, 0x52, 0x0f, 0xd0, 0x67, 0x02, 0x2c, + 0x0f, 0xb5, 0xbc, 0x12, 0x9c, 0x55, 0x7c, 0x63, 0xac, 0xbc, 0xe1, 0x33, 0xfb, 0x7f, 0xec, 0xbc, + 0x55, 0xef, 0xd9, 0xde, 0xd9, 0x43, 0x7b, 0xd6, 0x44, 0x88, 0xd7, 0x55, 0xba, 0x30, 0xd9, 0x9b, + 0xdf, 0x17, 0x60, 0x79, 0xa8, 0x61, 0x95, 0x00, 0x36, 0xbe, 0xad, 0x55, 0xbe, 0x9c, 0x70, 0xfc, + 0x06, 0x9c, 0xe2, 0x5b, 0x14, 0xf7, 0xab, 0xe8, 0xe5, 0x73, 0xe2, 0x76, 0xa9, 0x30, 0xaf, 0xbb, + 0xff, 0x44, 0x80, 0x7c, 0xa4, 0xfe, 0x81, 0x92, 0x93, 0xec, 0xe1, 0x5e, 0x47, 0xf9, 0xea, 0x79, + 0x58, 0xf9, 0xb6, 0xe4, 0x9e, 0x0a, 0xbd, 0xf7, 0xc5, 0xa4, 0x11, 0xe8, 0xcf, 0x04, 0xc8, 0x86, + 0xba, 0x22, 0xe8, 0x99, 0x24, 0xab, 0x0e, 0xe7, 0x71, 0xe3, 0x6b, 0x38, 0xe2, 0x37, 0x28, 0xce, + 0x3b, 0xe8, 0x60, 0x26, 0xe9, 0x0e, 0xfa, 0x63, 0x01, 0x0a, 0xd1, 0x66, 0x5b, 0x82, 0x27, 0x88, + 0xed, 0xc8, 0x7d, 0x49, 0xd1, 0x2b, 0x40, 0x4f, 0xb6, 0xf0, 0x5f, 0x0b, 0x50, 0x88, 0xb6, 0xdd, + 0x12, 0x10, 0xc7, 0xf6, 0xe6, 0x26, 0x22, 0xe6, 0xf6, 0xbe, 0x3a, 0x23, 0x7b, 0xff, 0xbb, 0x00, + 0x9b, 0x09, 0x55, 0x47, 0x14, 0xff, 0x21, 0xf2, 0xf8, 0x1a, 0xe5, 0x44, 0x7d, 0x74, 0xaa, 0x8f, + 0x2a, 0x7e, 0x73, 0x26, 0xfa, 0x5c, 0x77, 0x38, 0x3a, 0x7e, 0x11, 0x58, 0x8f, 0xad, 0x6c, 0xa3, + 0x6b, 0x93, 0xee, 0x01, 0x23, 0x55, 0xf0, 0x89, 0x7a, 0x99, 0x54, 0xaf, 0x63, 0x51, 0x9d, 0xcd, + 0x35, 0x80, 0x46, 0x75, 0x1f, 0x13, 0x51, 0xee, 0x33, 0x01, 0x32, 0x41, 0xc5, 0x10, 0x3d, 0x75, + 0xae, 0x8a, 0xe2, 0x44, 0x25, 0x6e, 0x53, 0x25, 0xda, 0xe2, 0xad, 0xa9, 0x94, 0x88, 0x96, 0x28, + 0x79, 0x02, 0x9d, 0x8f, 0x54, 0x0d, 0x93, 0xd3, 0xa6, 0x91, 0xca, 0xe2, 0x97, 0x94, 0xf1, 0x0f, + 0xfe, 0xfe, 0x8b, 0x00, 0xfe, 0x0b, 0x92, 0xf1, 0x47, 0x4b, 0x8c, 0x49, 0x19, 0x7f, 0x6c, 0x21, + 0x72, 0x22, 0xe8, 0x3b, 0x14, 0xf4, 0x07, 0xe2, 0xee, 0x74, 0xb9, 0x1e, 0x5d, 0xdc, 0xf6, 0x17, + 0x27, 0xc8, 0xff, 0x4e, 0x00, 0x34, 0x5a, 0xb0, 0x44, 0x5b, 0xf1, 0x4e, 0x34, 0xa9, 0xb2, 0x39, + 0x11, 0xff, 0x47, 0x14, 0xff, 0xbe, 0xd8, 0x9a, 0x0a, 0xbf, 0xea, 0xaf, 0x1f, 0x51, 0xe1, 0x1f, + 0xd8, 0x75, 0x2b, 0xdc, 0xb7, 0x49, 0xbe, 0x6e, 0xc5, 0x74, 0x77, 0x26, 0x82, 0x3f, 0xa6, 0xe0, + 0x0f, 0xc5, 0x6f, 0xcc, 0xec, 0xac, 0x12, 0x34, 0x44, 0x95, 0xbf, 0x12, 0x68, 0xa7, 0x21, 0xfa, + 0x47, 0xe8, 0xcf, 0x27, 0xea, 0x12, 0x53, 0x88, 0x9d, 0xa8, 0xcc, 0xcf, 0x53, 0x65, 0x24, 0x71, + 0x6f, 0xda, 0x5b, 0x43, 0x64, 0x75, 0x02, 0xfe, 0xa7, 0xfc, 0xd6, 0x3e, 0xd2, 0x50, 0x1d, 0xf3, + 0xf5, 0x5f, 0x7c, 0x41, 0x76, 0xa2, 0x12, 0x77, 0xa9, 0x12, 0xb7, 0xc5, 0x0f, 0xa6, 0xbf, 0xfa, + 0x0c, 0x21, 0xb8, 0x2e, 0x5c, 0xbd, 0xf1, 0x43, 0x01, 0x36, 0x55, 0xab, 0x17, 0x87, 0xe1, 0xc6, + 0x6a, 0xcd, 0xff, 0x1b, 0x72, 0x5a, 0x66, 0x68, 0x93, 0x9c, 0xb7, 0x2d, 0x7c, 0xf4, 0x36, 0xe7, + 0xed, 0x5a, 0x86, 0x62, 0x76, 0xb7, 0x2c, 0xa7, 0x5b, 0xe9, 0x62, 0x93, 0x66, 0xc4, 0x15, 0x36, + 0xa4, 0xd8, 0xba, 0x1b, 0xf9, 0xdf, 0x86, 0xde, 0x0a, 0x1e, 0x3e, 0x9b, 0x7b, 0x64, 0x87, 0x89, + 0xd7, 0x0c, 0xab, 0xaf, 0x6d, 0xd5, 0x82, 0x05, 0x6f, 0x5f, 0xfb, 0x27, 0x7f, 0xec, 0x2e, 0x1d, + 0xbb, 0x1b, 0x8c, 0xdd, 0xbd, 0x7d, 0xed, 0x30, 0x4d, 0x17, 0x78, 0xf9, 0xff, 0x03, 0x00, 0x00, + 0xff, 0xff, 0x02, 0x2c, 0x64, 0x0b, 0xcd, 0x48, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/container/v1alpha1/cluster_service.pb.go b/vendor/google.golang.org/genproto/googleapis/container/v1alpha1/cluster_service.pb.go new file mode 100644 index 0000000..ddf0e22 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/container/v1alpha1/cluster_service.pb.go @@ -0,0 +1,5588 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/container/v1alpha1/cluster_service.proto + +/* +Package container is a generated protocol buffer package. + +It is generated from these files: + google/container/v1alpha1/cluster_service.proto + +It has these top-level messages: + NodeConfig + NodeTaint + MasterAuth + ClientCertificateConfig + AddonsConfig + HttpLoadBalancing + HorizontalPodAutoscaling + KubernetesDashboard + NetworkPolicyConfig + MasterAuthorizedNetworksConfig + NetworkPolicy + IPAllocationPolicy + PodSecurityPolicyConfig + Cluster + ClusterUpdate + Operation + CreateClusterRequest + GetClusterRequest + UpdateClusterRequest + UpdateNodePoolRequest + SetNodePoolAutoscalingRequest + SetLoggingServiceRequest + SetMonitoringServiceRequest + SetAddonsConfigRequest + SetLocationsRequest + UpdateMasterRequest + SetMasterAuthRequest + DeleteClusterRequest + ListClustersRequest + ListClustersResponse + GetOperationRequest + ListOperationsRequest + CancelOperationRequest + ListOperationsResponse + GetServerConfigRequest + ServerConfig + CreateNodePoolRequest + DeleteNodePoolRequest + ListNodePoolsRequest + GetNodePoolRequest + NodePool + NodeManagement + AutoUpgradeOptions + MaintenancePolicy + MaintenanceWindow + DailyMaintenanceWindow + SetNodePoolManagementRequest + SetNodePoolSizeRequest + RollbackNodePoolUpgradeRequest + ListNodePoolsResponse + NodePoolAutoscaling + SetLabelsRequest + SetLegacyAbacRequest + StartIPRotationRequest + CompleteIPRotationRequest + AcceleratorConfig + SetNetworkPolicyRequest + SetMaintenancePolicyRequest +*/ +package container + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/empty" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Possible values for Effect in taint. +type NodeTaint_Effect int32 + +const ( + // Not set + NodeTaint_EFFECT_UNSPECIFIED NodeTaint_Effect = 0 + // NoSchedule + NodeTaint_NO_SCHEDULE NodeTaint_Effect = 1 + // PreferNoSchedule + NodeTaint_PREFER_NO_SCHEDULE NodeTaint_Effect = 2 + // NoExecute + NodeTaint_NO_EXECUTE NodeTaint_Effect = 3 +) + +var NodeTaint_Effect_name = map[int32]string{ + 0: "EFFECT_UNSPECIFIED", + 1: "NO_SCHEDULE", + 2: "PREFER_NO_SCHEDULE", + 3: "NO_EXECUTE", +} +var NodeTaint_Effect_value = map[string]int32{ + "EFFECT_UNSPECIFIED": 0, + "NO_SCHEDULE": 1, + "PREFER_NO_SCHEDULE": 2, + "NO_EXECUTE": 3, +} + +func (x NodeTaint_Effect) String() string { + return proto.EnumName(NodeTaint_Effect_name, int32(x)) +} +func (NodeTaint_Effect) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1, 0} } + +// Allowed Network Policy providers. +type NetworkPolicy_Provider int32 + +const ( + // Not set + NetworkPolicy_PROVIDER_UNSPECIFIED NetworkPolicy_Provider = 0 + // Tigera (Calico Felix). + NetworkPolicy_CALICO NetworkPolicy_Provider = 1 +) + +var NetworkPolicy_Provider_name = map[int32]string{ + 0: "PROVIDER_UNSPECIFIED", + 1: "CALICO", +} +var NetworkPolicy_Provider_value = map[string]int32{ + "PROVIDER_UNSPECIFIED": 0, + "CALICO": 1, +} + +func (x NetworkPolicy_Provider) String() string { + return proto.EnumName(NetworkPolicy_Provider_name, int32(x)) +} +func (NetworkPolicy_Provider) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{10, 0} } + +// The current status of the cluster. +type Cluster_Status int32 + +const ( + // Not set. + Cluster_STATUS_UNSPECIFIED Cluster_Status = 0 + // The PROVISIONING state indicates the cluster is being created. + Cluster_PROVISIONING Cluster_Status = 1 + // The RUNNING state indicates the cluster has been created and is fully + // usable. + Cluster_RUNNING Cluster_Status = 2 + // The RECONCILING state indicates that some work is actively being done on + // the cluster, such as upgrading the master or node software. Details can + // be found in the `statusMessage` field. + Cluster_RECONCILING Cluster_Status = 3 + // The STOPPING state indicates the cluster is being deleted. + Cluster_STOPPING Cluster_Status = 4 + // The ERROR state indicates the cluster may be unusable. Details + // can be found in the `statusMessage` field. + Cluster_ERROR Cluster_Status = 5 +) + +var Cluster_Status_name = map[int32]string{ + 0: "STATUS_UNSPECIFIED", + 1: "PROVISIONING", + 2: "RUNNING", + 3: "RECONCILING", + 4: "STOPPING", + 5: "ERROR", +} +var Cluster_Status_value = map[string]int32{ + "STATUS_UNSPECIFIED": 0, + "PROVISIONING": 1, + "RUNNING": 2, + "RECONCILING": 3, + "STOPPING": 4, + "ERROR": 5, +} + +func (x Cluster_Status) String() string { + return proto.EnumName(Cluster_Status_name, int32(x)) +} +func (Cluster_Status) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{13, 0} } + +// Current status of the operation. +type Operation_Status int32 + +const ( + // Not set. + Operation_STATUS_UNSPECIFIED Operation_Status = 0 + // The operation has been created. + Operation_PENDING Operation_Status = 1 + // The operation is currently running. + Operation_RUNNING Operation_Status = 2 + // The operation is done, either cancelled or completed. + Operation_DONE Operation_Status = 3 + // The operation is aborting. + Operation_ABORTING Operation_Status = 4 +) + +var Operation_Status_name = map[int32]string{ + 0: "STATUS_UNSPECIFIED", + 1: "PENDING", + 2: "RUNNING", + 3: "DONE", + 4: "ABORTING", +} +var Operation_Status_value = map[string]int32{ + "STATUS_UNSPECIFIED": 0, + "PENDING": 1, + "RUNNING": 2, + "DONE": 3, + "ABORTING": 4, +} + +func (x Operation_Status) String() string { + return proto.EnumName(Operation_Status_name, int32(x)) +} +func (Operation_Status) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{15, 0} } + +// Operation type. +type Operation_Type int32 + +const ( + // Not set. + Operation_TYPE_UNSPECIFIED Operation_Type = 0 + // Cluster create. + Operation_CREATE_CLUSTER Operation_Type = 1 + // Cluster delete. + Operation_DELETE_CLUSTER Operation_Type = 2 + // A master upgrade. + Operation_UPGRADE_MASTER Operation_Type = 3 + // A node upgrade. + Operation_UPGRADE_NODES Operation_Type = 4 + // Cluster repair. + Operation_REPAIR_CLUSTER Operation_Type = 5 + // Cluster update. + Operation_UPDATE_CLUSTER Operation_Type = 6 + // Node pool create. + Operation_CREATE_NODE_POOL Operation_Type = 7 + // Node pool delete. + Operation_DELETE_NODE_POOL Operation_Type = 8 + // Set node pool management. + Operation_SET_NODE_POOL_MANAGEMENT Operation_Type = 9 + // Automatic node pool repair. + Operation_AUTO_REPAIR_NODES Operation_Type = 10 + // Automatic node upgrade. + Operation_AUTO_UPGRADE_NODES Operation_Type = 11 + // Set labels. + Operation_SET_LABELS Operation_Type = 12 + // Set/generate master auth materials + Operation_SET_MASTER_AUTH Operation_Type = 13 + // Set node pool size. + Operation_SET_NODE_POOL_SIZE Operation_Type = 14 + // Updates network policy for a cluster. + Operation_SET_NETWORK_POLICY Operation_Type = 15 + // Set the maintenance policy. + Operation_SET_MAINTENANCE_POLICY Operation_Type = 16 +) + +var Operation_Type_name = map[int32]string{ + 0: "TYPE_UNSPECIFIED", + 1: "CREATE_CLUSTER", + 2: "DELETE_CLUSTER", + 3: "UPGRADE_MASTER", + 4: "UPGRADE_NODES", + 5: "REPAIR_CLUSTER", + 6: "UPDATE_CLUSTER", + 7: "CREATE_NODE_POOL", + 8: "DELETE_NODE_POOL", + 9: "SET_NODE_POOL_MANAGEMENT", + 10: "AUTO_REPAIR_NODES", + 11: "AUTO_UPGRADE_NODES", + 12: "SET_LABELS", + 13: "SET_MASTER_AUTH", + 14: "SET_NODE_POOL_SIZE", + 15: "SET_NETWORK_POLICY", + 16: "SET_MAINTENANCE_POLICY", +} +var Operation_Type_value = map[string]int32{ + "TYPE_UNSPECIFIED": 0, + "CREATE_CLUSTER": 1, + "DELETE_CLUSTER": 2, + "UPGRADE_MASTER": 3, + "UPGRADE_NODES": 4, + "REPAIR_CLUSTER": 5, + "UPDATE_CLUSTER": 6, + "CREATE_NODE_POOL": 7, + "DELETE_NODE_POOL": 8, + "SET_NODE_POOL_MANAGEMENT": 9, + "AUTO_REPAIR_NODES": 10, + "AUTO_UPGRADE_NODES": 11, + "SET_LABELS": 12, + "SET_MASTER_AUTH": 13, + "SET_NODE_POOL_SIZE": 14, + "SET_NETWORK_POLICY": 15, + "SET_MAINTENANCE_POLICY": 16, +} + +func (x Operation_Type) String() string { + return proto.EnumName(Operation_Type_name, int32(x)) +} +func (Operation_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{15, 1} } + +// Operation type: what type update to perform. +type SetMasterAuthRequest_Action int32 + +const ( + // Operation is unknown and will error out. + SetMasterAuthRequest_UNKNOWN SetMasterAuthRequest_Action = 0 + // Set the password to a user generated value. + SetMasterAuthRequest_SET_PASSWORD SetMasterAuthRequest_Action = 1 + // Generate a new password and set it to that. + SetMasterAuthRequest_GENERATE_PASSWORD SetMasterAuthRequest_Action = 2 + // Set the username. If an empty username is provided, basic authentication + // is disabled for the cluster. If a non-empty username is provided, basic + // authentication is enabled, with either a provided password or a generated + // one. + SetMasterAuthRequest_SET_USERNAME SetMasterAuthRequest_Action = 3 +) + +var SetMasterAuthRequest_Action_name = map[int32]string{ + 0: "UNKNOWN", + 1: "SET_PASSWORD", + 2: "GENERATE_PASSWORD", + 3: "SET_USERNAME", +} +var SetMasterAuthRequest_Action_value = map[string]int32{ + "UNKNOWN": 0, + "SET_PASSWORD": 1, + "GENERATE_PASSWORD": 2, + "SET_USERNAME": 3, +} + +func (x SetMasterAuthRequest_Action) String() string { + return proto.EnumName(SetMasterAuthRequest_Action_name, int32(x)) +} +func (SetMasterAuthRequest_Action) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{26, 0} +} + +// The current status of the node pool instance. +type NodePool_Status int32 + +const ( + // Not set. + NodePool_STATUS_UNSPECIFIED NodePool_Status = 0 + // The PROVISIONING state indicates the node pool is being created. + NodePool_PROVISIONING NodePool_Status = 1 + // The RUNNING state indicates the node pool has been created + // and is fully usable. + NodePool_RUNNING NodePool_Status = 2 + // The RUNNING_WITH_ERROR state indicates the node pool has been created + // and is partially usable. Some error state has occurred and some + // functionality may be impaired. Customer may need to reissue a request + // or trigger a new update. + NodePool_RUNNING_WITH_ERROR NodePool_Status = 3 + // The RECONCILING state indicates that some work is actively being done on + // the node pool, such as upgrading node software. Details can + // be found in the `statusMessage` field. + NodePool_RECONCILING NodePool_Status = 4 + // The STOPPING state indicates the node pool is being deleted. + NodePool_STOPPING NodePool_Status = 5 + // The ERROR state indicates the node pool may be unusable. Details + // can be found in the `statusMessage` field. + NodePool_ERROR NodePool_Status = 6 +) + +var NodePool_Status_name = map[int32]string{ + 0: "STATUS_UNSPECIFIED", + 1: "PROVISIONING", + 2: "RUNNING", + 3: "RUNNING_WITH_ERROR", + 4: "RECONCILING", + 5: "STOPPING", + 6: "ERROR", +} +var NodePool_Status_value = map[string]int32{ + "STATUS_UNSPECIFIED": 0, + "PROVISIONING": 1, + "RUNNING": 2, + "RUNNING_WITH_ERROR": 3, + "RECONCILING": 4, + "STOPPING": 5, + "ERROR": 6, +} + +func (x NodePool_Status) String() string { + return proto.EnumName(NodePool_Status_name, int32(x)) +} +func (NodePool_Status) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{40, 0} } + +// Parameters that describe the nodes in a cluster. +type NodeConfig struct { + // The name of a Google Compute Engine [machine + // type](/compute/docs/machine-types) (e.g. + // `n1-standard-1`). + // + // If unspecified, the default machine type is + // `n1-standard-1`. + MachineType string `protobuf:"bytes,1,opt,name=machine_type,json=machineType" json:"machine_type,omitempty"` + // Size of the disk attached to each node, specified in GB. + // The smallest allowed disk size is 10GB. + // + // If unspecified, the default disk size is 100GB. + DiskSizeGb int32 `protobuf:"varint,2,opt,name=disk_size_gb,json=diskSizeGb" json:"disk_size_gb,omitempty"` + // The set of Google API scopes to be made available on all of the + // node VMs under the "default" service account. + // + // The following scopes are recommended, but not required, and by default are + // not included: + // + // * `https://www.googleapis.com/auth/compute` is required for mounting + // persistent storage on your nodes. + // * `https://www.googleapis.com/auth/devstorage.read_only` is required for + // communicating with **gcr.io** + // (the [Google Container Registry](/container-registry/)). + // + // If unspecified, no scopes are added, unless Cloud Logging or Cloud + // Monitoring are enabled, in which case their required scopes will be added. + OauthScopes []string `protobuf:"bytes,3,rep,name=oauth_scopes,json=oauthScopes" json:"oauth_scopes,omitempty"` + // The Google Cloud Platform Service Account to be used by the node VMs. If + // no Service Account is specified, the "default" service account is used. + ServiceAccount string `protobuf:"bytes,9,opt,name=service_account,json=serviceAccount" json:"service_account,omitempty"` + // The metadata key/value pairs assigned to instances in the cluster. + // + // Keys must conform to the regexp [a-zA-Z0-9-_]+ and be less than 128 bytes + // in length. These are reflected as part of a URL in the metadata server. + // Additionally, to avoid ambiguity, keys must not conflict with any other + // metadata keys for the project or be one of the four reserved keys: + // "instance-template", "kube-env", "startup-script", and "user-data" + // + // Values are free-form strings, and only have meaning as interpreted by + // the image running in the instance. The only restriction placed on them is + // that each value's size must be less than or equal to 32 KB. + // + // The total size of all keys and values must be less than 512 KB. + Metadata map[string]string `protobuf:"bytes,4,rep,name=metadata" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // The image type to use for this node. Note that for a given image type, + // the latest version of it will be used. + ImageType string `protobuf:"bytes,5,opt,name=image_type,json=imageType" json:"image_type,omitempty"` + // The map of Kubernetes labels (key/value pairs) to be applied to each node. + // These will added in addition to any default label(s) that + // Kubernetes may apply to the node. + // In case of conflict in label keys, the applied set may differ depending on + // the Kubernetes version -- it's best to assume the behavior is undefined + // and conflicts should be avoided. + // For more information, including usage and the valid values, see: + // https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ + Labels map[string]string `protobuf:"bytes,6,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // The number of local SSD disks to be attached to the node. + // + // The limit for this value is dependant upon the maximum number of + // disks available on a machine per zone. See: + // https://cloud.google.com/compute/docs/disks/local-ssd#local_ssd_limits + // for more information. + LocalSsdCount int32 `protobuf:"varint,7,opt,name=local_ssd_count,json=localSsdCount" json:"local_ssd_count,omitempty"` + // The list of instance tags applied to all nodes. Tags are used to identify + // valid sources or targets for network firewalls and are specified by + // the client during cluster or node pool creation. Each tag within the list + // must comply with RFC1035. + Tags []string `protobuf:"bytes,8,rep,name=tags" json:"tags,omitempty"` + // Whether the nodes are created as preemptible VM instances. See: + // https://cloud.google.com/compute/docs/instances/preemptible for more + // inforamtion about preemptible VM instances. + Preemptible bool `protobuf:"varint,10,opt,name=preemptible" json:"preemptible,omitempty"` + // A list of hardware accelerators to be attached to each node. + // See https://cloud.google.com/compute/docs/gpus for more information about + // support for GPUs. + Accelerators []*AcceleratorConfig `protobuf:"bytes,11,rep,name=accelerators" json:"accelerators,omitempty"` + // Minimum CPU platform to be used by this instance. The instance may be + // scheduled on the specified or newer CPU platform. Applicable values are the + // friendly names of CPU platforms, such as + // minCpuPlatform: "Intel Haswell" or + // minCpuPlatform: "Intel Sandy Bridge". For more + // information, read [how to specify min CPU platform](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform) + MinCpuPlatform string `protobuf:"bytes,13,opt,name=min_cpu_platform,json=minCpuPlatform" json:"min_cpu_platform,omitempty"` + // List of kubernetes taints to be applied to each node. + // + // For more information, including usage and the valid values, see: + // https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + Taints []*NodeTaint `protobuf:"bytes,15,rep,name=taints" json:"taints,omitempty"` +} + +func (m *NodeConfig) Reset() { *m = NodeConfig{} } +func (m *NodeConfig) String() string { return proto.CompactTextString(m) } +func (*NodeConfig) ProtoMessage() {} +func (*NodeConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *NodeConfig) GetMachineType() string { + if m != nil { + return m.MachineType + } + return "" +} + +func (m *NodeConfig) GetDiskSizeGb() int32 { + if m != nil { + return m.DiskSizeGb + } + return 0 +} + +func (m *NodeConfig) GetOauthScopes() []string { + if m != nil { + return m.OauthScopes + } + return nil +} + +func (m *NodeConfig) GetServiceAccount() string { + if m != nil { + return m.ServiceAccount + } + return "" +} + +func (m *NodeConfig) GetMetadata() map[string]string { + if m != nil { + return m.Metadata + } + return nil +} + +func (m *NodeConfig) GetImageType() string { + if m != nil { + return m.ImageType + } + return "" +} + +func (m *NodeConfig) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +func (m *NodeConfig) GetLocalSsdCount() int32 { + if m != nil { + return m.LocalSsdCount + } + return 0 +} + +func (m *NodeConfig) GetTags() []string { + if m != nil { + return m.Tags + } + return nil +} + +func (m *NodeConfig) GetPreemptible() bool { + if m != nil { + return m.Preemptible + } + return false +} + +func (m *NodeConfig) GetAccelerators() []*AcceleratorConfig { + if m != nil { + return m.Accelerators + } + return nil +} + +func (m *NodeConfig) GetMinCpuPlatform() string { + if m != nil { + return m.MinCpuPlatform + } + return "" +} + +func (m *NodeConfig) GetTaints() []*NodeTaint { + if m != nil { + return m.Taints + } + return nil +} + +// Kubernetes taint is comprised of three fields: key, value, and effect. Effect +// can only be one of three types: NoSchedule, PreferNoSchedule or NoExecute. +// +// For more information, including usage and the valid values, see: +// https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ +type NodeTaint struct { + // Key for taint. + Key string `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + // Value for taint. + Value string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` + // Effect for taint. + Effect NodeTaint_Effect `protobuf:"varint,3,opt,name=effect,enum=google.container.v1alpha1.NodeTaint_Effect" json:"effect,omitempty"` +} + +func (m *NodeTaint) Reset() { *m = NodeTaint{} } +func (m *NodeTaint) String() string { return proto.CompactTextString(m) } +func (*NodeTaint) ProtoMessage() {} +func (*NodeTaint) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *NodeTaint) GetKey() string { + if m != nil { + return m.Key + } + return "" +} + +func (m *NodeTaint) GetValue() string { + if m != nil { + return m.Value + } + return "" +} + +func (m *NodeTaint) GetEffect() NodeTaint_Effect { + if m != nil { + return m.Effect + } + return NodeTaint_EFFECT_UNSPECIFIED +} + +// The authentication information for accessing the master endpoint. +// Authentication can be done using HTTP basic auth or using client +// certificates. +type MasterAuth struct { + // The username to use for HTTP basic authentication to the master endpoint. + // For clusters v1.6.0 and later, you can disable basic authentication by + // providing an empty username. + Username string `protobuf:"bytes,1,opt,name=username" json:"username,omitempty"` + // The password to use for HTTP basic authentication to the master endpoint. + // Because the master endpoint is open to the Internet, you should create a + // strong password. If a password is provided for cluster creation, username + // must be non-empty. + Password string `protobuf:"bytes,2,opt,name=password" json:"password,omitempty"` + // Configuration for client certificate authentication on the cluster. If no + // configuration is specified, a client certificate is issued. + ClientCertificateConfig *ClientCertificateConfig `protobuf:"bytes,3,opt,name=client_certificate_config,json=clientCertificateConfig" json:"client_certificate_config,omitempty"` + // [Output only] Base64-encoded public certificate that is the root of + // trust for the cluster. + ClusterCaCertificate string `protobuf:"bytes,100,opt,name=cluster_ca_certificate,json=clusterCaCertificate" json:"cluster_ca_certificate,omitempty"` + // [Output only] Base64-encoded public certificate used by clients to + // authenticate to the cluster endpoint. + ClientCertificate string `protobuf:"bytes,101,opt,name=client_certificate,json=clientCertificate" json:"client_certificate,omitempty"` + // [Output only] Base64-encoded private key used by clients to authenticate + // to the cluster endpoint. + ClientKey string `protobuf:"bytes,102,opt,name=client_key,json=clientKey" json:"client_key,omitempty"` +} + +func (m *MasterAuth) Reset() { *m = MasterAuth{} } +func (m *MasterAuth) String() string { return proto.CompactTextString(m) } +func (*MasterAuth) ProtoMessage() {} +func (*MasterAuth) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *MasterAuth) GetUsername() string { + if m != nil { + return m.Username + } + return "" +} + +func (m *MasterAuth) GetPassword() string { + if m != nil { + return m.Password + } + return "" +} + +func (m *MasterAuth) GetClientCertificateConfig() *ClientCertificateConfig { + if m != nil { + return m.ClientCertificateConfig + } + return nil +} + +func (m *MasterAuth) GetClusterCaCertificate() string { + if m != nil { + return m.ClusterCaCertificate + } + return "" +} + +func (m *MasterAuth) GetClientCertificate() string { + if m != nil { + return m.ClientCertificate + } + return "" +} + +func (m *MasterAuth) GetClientKey() string { + if m != nil { + return m.ClientKey + } + return "" +} + +// Configuration for client certificates on the cluster. +type ClientCertificateConfig struct { + // Issue a client certificate. + IssueClientCertificate bool `protobuf:"varint,1,opt,name=issue_client_certificate,json=issueClientCertificate" json:"issue_client_certificate,omitempty"` +} + +func (m *ClientCertificateConfig) Reset() { *m = ClientCertificateConfig{} } +func (m *ClientCertificateConfig) String() string { return proto.CompactTextString(m) } +func (*ClientCertificateConfig) ProtoMessage() {} +func (*ClientCertificateConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *ClientCertificateConfig) GetIssueClientCertificate() bool { + if m != nil { + return m.IssueClientCertificate + } + return false +} + +// Configuration for the addons that can be automatically spun up in the +// cluster, enabling additional functionality. +type AddonsConfig struct { + // Configuration for the HTTP (L7) load balancing controller addon, which + // makes it easy to set up HTTP load balancers for services in a cluster. + HttpLoadBalancing *HttpLoadBalancing `protobuf:"bytes,1,opt,name=http_load_balancing,json=httpLoadBalancing" json:"http_load_balancing,omitempty"` + // Configuration for the horizontal pod autoscaling feature, which + // increases or decreases the number of replica pods a replication controller + // has based on the resource usage of the existing pods. + HorizontalPodAutoscaling *HorizontalPodAutoscaling `protobuf:"bytes,2,opt,name=horizontal_pod_autoscaling,json=horizontalPodAutoscaling" json:"horizontal_pod_autoscaling,omitempty"` + // Configuration for the Kubernetes Dashboard. + KubernetesDashboard *KubernetesDashboard `protobuf:"bytes,3,opt,name=kubernetes_dashboard,json=kubernetesDashboard" json:"kubernetes_dashboard,omitempty"` + // Configuration for NetworkPolicy. This only tracks whether the addon + // is enabled or not on the Master, it does not track whether network policy + // is enabled for the nodes. + NetworkPolicyConfig *NetworkPolicyConfig `protobuf:"bytes,4,opt,name=network_policy_config,json=networkPolicyConfig" json:"network_policy_config,omitempty"` +} + +func (m *AddonsConfig) Reset() { *m = AddonsConfig{} } +func (m *AddonsConfig) String() string { return proto.CompactTextString(m) } +func (*AddonsConfig) ProtoMessage() {} +func (*AddonsConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *AddonsConfig) GetHttpLoadBalancing() *HttpLoadBalancing { + if m != nil { + return m.HttpLoadBalancing + } + return nil +} + +func (m *AddonsConfig) GetHorizontalPodAutoscaling() *HorizontalPodAutoscaling { + if m != nil { + return m.HorizontalPodAutoscaling + } + return nil +} + +func (m *AddonsConfig) GetKubernetesDashboard() *KubernetesDashboard { + if m != nil { + return m.KubernetesDashboard + } + return nil +} + +func (m *AddonsConfig) GetNetworkPolicyConfig() *NetworkPolicyConfig { + if m != nil { + return m.NetworkPolicyConfig + } + return nil +} + +// Configuration options for the HTTP (L7) load balancing controller addon, +// which makes it easy to set up HTTP load balancers for services in a cluster. +type HttpLoadBalancing struct { + // Whether the HTTP Load Balancing controller is enabled in the cluster. + // When enabled, it runs a small pod in the cluster that manages the load + // balancers. + Disabled bool `protobuf:"varint,1,opt,name=disabled" json:"disabled,omitempty"` +} + +func (m *HttpLoadBalancing) Reset() { *m = HttpLoadBalancing{} } +func (m *HttpLoadBalancing) String() string { return proto.CompactTextString(m) } +func (*HttpLoadBalancing) ProtoMessage() {} +func (*HttpLoadBalancing) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *HttpLoadBalancing) GetDisabled() bool { + if m != nil { + return m.Disabled + } + return false +} + +// Configuration options for the horizontal pod autoscaling feature, which +// increases or decreases the number of replica pods a replication controller +// has based on the resource usage of the existing pods. +type HorizontalPodAutoscaling struct { + // Whether the Horizontal Pod Autoscaling feature is enabled in the cluster. + // When enabled, it ensures that a Heapster pod is running in the cluster, + // which is also used by the Cloud Monitoring service. + Disabled bool `protobuf:"varint,1,opt,name=disabled" json:"disabled,omitempty"` +} + +func (m *HorizontalPodAutoscaling) Reset() { *m = HorizontalPodAutoscaling{} } +func (m *HorizontalPodAutoscaling) String() string { return proto.CompactTextString(m) } +func (*HorizontalPodAutoscaling) ProtoMessage() {} +func (*HorizontalPodAutoscaling) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *HorizontalPodAutoscaling) GetDisabled() bool { + if m != nil { + return m.Disabled + } + return false +} + +// Configuration for the Kubernetes Dashboard. +type KubernetesDashboard struct { + // Whether the Kubernetes Dashboard is enabled for this cluster. + Disabled bool `protobuf:"varint,1,opt,name=disabled" json:"disabled,omitempty"` +} + +func (m *KubernetesDashboard) Reset() { *m = KubernetesDashboard{} } +func (m *KubernetesDashboard) String() string { return proto.CompactTextString(m) } +func (*KubernetesDashboard) ProtoMessage() {} +func (*KubernetesDashboard) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *KubernetesDashboard) GetDisabled() bool { + if m != nil { + return m.Disabled + } + return false +} + +// Configuration for NetworkPolicy. This only tracks whether the addon +// is enabled or not on the Master, it does not track whether network policy +// is enabled for the nodes. +type NetworkPolicyConfig struct { + // Whether NetworkPolicy is enabled for this cluster. + Disabled bool `protobuf:"varint,1,opt,name=disabled" json:"disabled,omitempty"` +} + +func (m *NetworkPolicyConfig) Reset() { *m = NetworkPolicyConfig{} } +func (m *NetworkPolicyConfig) String() string { return proto.CompactTextString(m) } +func (*NetworkPolicyConfig) ProtoMessage() {} +func (*NetworkPolicyConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *NetworkPolicyConfig) GetDisabled() bool { + if m != nil { + return m.Disabled + } + return false +} + +// Configuration options for the master authorized networks feature. Enabled +// master authorized networks will disallow all external traffic to access +// Kubernetes master through HTTPS except traffic from the given CIDR blocks, +// Google Compute Engine Public IPs and Google Prod IPs. +type MasterAuthorizedNetworksConfig struct { + // Whether or not master authorized networks is enabled. + Enabled bool `protobuf:"varint,1,opt,name=enabled" json:"enabled,omitempty"` + // cidr_blocks define up to 10 external networks that could access + // Kubernetes master through HTTPS. + CidrBlocks []*MasterAuthorizedNetworksConfig_CidrBlock `protobuf:"bytes,2,rep,name=cidr_blocks,json=cidrBlocks" json:"cidr_blocks,omitempty"` +} + +func (m *MasterAuthorizedNetworksConfig) Reset() { *m = MasterAuthorizedNetworksConfig{} } +func (m *MasterAuthorizedNetworksConfig) String() string { return proto.CompactTextString(m) } +func (*MasterAuthorizedNetworksConfig) ProtoMessage() {} +func (*MasterAuthorizedNetworksConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *MasterAuthorizedNetworksConfig) GetEnabled() bool { + if m != nil { + return m.Enabled + } + return false +} + +func (m *MasterAuthorizedNetworksConfig) GetCidrBlocks() []*MasterAuthorizedNetworksConfig_CidrBlock { + if m != nil { + return m.CidrBlocks + } + return nil +} + +// CidrBlock contains an optional name and one CIDR block. +type MasterAuthorizedNetworksConfig_CidrBlock struct { + // display_name is an optional field for users to identify CIDR blocks. + DisplayName string `protobuf:"bytes,1,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // cidr_block must be specified in CIDR notation. + CidrBlock string `protobuf:"bytes,2,opt,name=cidr_block,json=cidrBlock" json:"cidr_block,omitempty"` +} + +func (m *MasterAuthorizedNetworksConfig_CidrBlock) Reset() { + *m = MasterAuthorizedNetworksConfig_CidrBlock{} +} +func (m *MasterAuthorizedNetworksConfig_CidrBlock) String() string { return proto.CompactTextString(m) } +func (*MasterAuthorizedNetworksConfig_CidrBlock) ProtoMessage() {} +func (*MasterAuthorizedNetworksConfig_CidrBlock) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{9, 0} +} + +func (m *MasterAuthorizedNetworksConfig_CidrBlock) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func (m *MasterAuthorizedNetworksConfig_CidrBlock) GetCidrBlock() string { + if m != nil { + return m.CidrBlock + } + return "" +} + +// Configuration options for the NetworkPolicy feature. +// https://kubernetes.io/docs/concepts/services-networking/networkpolicies/ +type NetworkPolicy struct { + // The selected network policy provider. + Provider NetworkPolicy_Provider `protobuf:"varint,1,opt,name=provider,enum=google.container.v1alpha1.NetworkPolicy_Provider" json:"provider,omitempty"` + // Whether network policy is enabled on the cluster. + Enabled bool `protobuf:"varint,2,opt,name=enabled" json:"enabled,omitempty"` +} + +func (m *NetworkPolicy) Reset() { *m = NetworkPolicy{} } +func (m *NetworkPolicy) String() string { return proto.CompactTextString(m) } +func (*NetworkPolicy) ProtoMessage() {} +func (*NetworkPolicy) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *NetworkPolicy) GetProvider() NetworkPolicy_Provider { + if m != nil { + return m.Provider + } + return NetworkPolicy_PROVIDER_UNSPECIFIED +} + +func (m *NetworkPolicy) GetEnabled() bool { + if m != nil { + return m.Enabled + } + return false +} + +// Configuration for controlling how IPs are allocated in the cluster. +type IPAllocationPolicy struct { + // Whether alias IPs will be used for pod IPs in the cluster. + UseIpAliases bool `protobuf:"varint,1,opt,name=use_ip_aliases,json=useIpAliases" json:"use_ip_aliases,omitempty"` + // Whether a new subnetwork will be created automatically for the cluster. + // + // This field is only applicable when `use_ip_aliases` is true. + CreateSubnetwork bool `protobuf:"varint,2,opt,name=create_subnetwork,json=createSubnetwork" json:"create_subnetwork,omitempty"` + // A custom subnetwork name to be used if `create_subnetwork` is true. If + // this field is empty, then an automatic name will be chosen for the new + // subnetwork. + SubnetworkName string `protobuf:"bytes,3,opt,name=subnetwork_name,json=subnetworkName" json:"subnetwork_name,omitempty"` + // This field is deprecated, use cluster_ipv4_cidr_block. + ClusterIpv4Cidr string `protobuf:"bytes,4,opt,name=cluster_ipv4_cidr,json=clusterIpv4Cidr" json:"cluster_ipv4_cidr,omitempty"` + // This field is deprecated, use node_ipv4_cidr_block. + NodeIpv4Cidr string `protobuf:"bytes,5,opt,name=node_ipv4_cidr,json=nodeIpv4Cidr" json:"node_ipv4_cidr,omitempty"` + // This field is deprecated, use services_ipv4_cidr_block. + ServicesIpv4Cidr string `protobuf:"bytes,6,opt,name=services_ipv4_cidr,json=servicesIpv4Cidr" json:"services_ipv4_cidr,omitempty"` + // The name of the secondary range to be used for the cluster CIDR + // block. The secondary range will be used for pod IP + // addresses. This must be an existing secondary range associated + // with the cluster subnetwork. + // + // This field is only applicable if use_ip_aliases is true and + // create_subnetwork is false. + ClusterSecondaryRangeName string `protobuf:"bytes,7,opt,name=cluster_secondary_range_name,json=clusterSecondaryRangeName" json:"cluster_secondary_range_name,omitempty"` + // The name of the secondary range to be used as for the services + // CIDR block. The secondary range will be used for service + // ClusterIPs. This must be an existing secondary range associated + // with the cluster subnetwork. + // + // This field is only applicable with use_ip_aliases is true and + // create_subnetwork is false. + ServicesSecondaryRangeName string `protobuf:"bytes,8,opt,name=services_secondary_range_name,json=servicesSecondaryRangeName" json:"services_secondary_range_name,omitempty"` + // The IP address range for the cluster pod IPs. If this field is set, then + // `cluster.cluster_ipv4_cidr` must be left blank. + // + // This field is only applicable when `use_ip_aliases` is true. + // + // Set to blank to have a range chosen with the default size. + // + // Set to /netmask (e.g. `/14`) to have a range chosen with a specific + // netmask. + // + // Set to a + // [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) + // notation (e.g. `10.96.0.0/14`) from the RFC-1918 private networks (e.g. + // `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`) to pick a specific range + // to use. + ClusterIpv4CidrBlock string `protobuf:"bytes,9,opt,name=cluster_ipv4_cidr_block,json=clusterIpv4CidrBlock" json:"cluster_ipv4_cidr_block,omitempty"` + // The IP address range of the instance IPs in this cluster. + // + // This is applicable only if `create_subnetwork` is true. + // + // Set to blank to have a range chosen with the default size. + // + // Set to /netmask (e.g. `/14`) to have a range chosen with a specific + // netmask. + // + // Set to a + // [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) + // notation (e.g. `10.96.0.0/14`) from the RFC-1918 private networks (e.g. + // `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`) to pick a specific range + // to use. + NodeIpv4CidrBlock string `protobuf:"bytes,10,opt,name=node_ipv4_cidr_block,json=nodeIpv4CidrBlock" json:"node_ipv4_cidr_block,omitempty"` + // The IP address range of the services IPs in this cluster. If blank, a range + // will be automatically chosen with the default size. + // + // This field is only applicable when `use_ip_aliases` is true. + // + // Set to blank to have a range chosen with the default size. + // + // Set to /netmask (e.g. `/14`) to have a range chosen with a specific + // netmask. + // + // Set to a + // [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) + // notation (e.g. `10.96.0.0/14`) from the RFC-1918 private networks (e.g. + // `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`) to pick a specific range + // to use. + ServicesIpv4CidrBlock string `protobuf:"bytes,11,opt,name=services_ipv4_cidr_block,json=servicesIpv4CidrBlock" json:"services_ipv4_cidr_block,omitempty"` +} + +func (m *IPAllocationPolicy) Reset() { *m = IPAllocationPolicy{} } +func (m *IPAllocationPolicy) String() string { return proto.CompactTextString(m) } +func (*IPAllocationPolicy) ProtoMessage() {} +func (*IPAllocationPolicy) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *IPAllocationPolicy) GetUseIpAliases() bool { + if m != nil { + return m.UseIpAliases + } + return false +} + +func (m *IPAllocationPolicy) GetCreateSubnetwork() bool { + if m != nil { + return m.CreateSubnetwork + } + return false +} + +func (m *IPAllocationPolicy) GetSubnetworkName() string { + if m != nil { + return m.SubnetworkName + } + return "" +} + +func (m *IPAllocationPolicy) GetClusterIpv4Cidr() string { + if m != nil { + return m.ClusterIpv4Cidr + } + return "" +} + +func (m *IPAllocationPolicy) GetNodeIpv4Cidr() string { + if m != nil { + return m.NodeIpv4Cidr + } + return "" +} + +func (m *IPAllocationPolicy) GetServicesIpv4Cidr() string { + if m != nil { + return m.ServicesIpv4Cidr + } + return "" +} + +func (m *IPAllocationPolicy) GetClusterSecondaryRangeName() string { + if m != nil { + return m.ClusterSecondaryRangeName + } + return "" +} + +func (m *IPAllocationPolicy) GetServicesSecondaryRangeName() string { + if m != nil { + return m.ServicesSecondaryRangeName + } + return "" +} + +func (m *IPAllocationPolicy) GetClusterIpv4CidrBlock() string { + if m != nil { + return m.ClusterIpv4CidrBlock + } + return "" +} + +func (m *IPAllocationPolicy) GetNodeIpv4CidrBlock() string { + if m != nil { + return m.NodeIpv4CidrBlock + } + return "" +} + +func (m *IPAllocationPolicy) GetServicesIpv4CidrBlock() string { + if m != nil { + return m.ServicesIpv4CidrBlock + } + return "" +} + +// Configuration for the PodSecurityPolicy feature. +type PodSecurityPolicyConfig struct { + // Enable the PodSecurityPolicy controller for this cluster. If enabled, pods + // must be valid under a PodSecurityPolicy to be created. + Enabled bool `protobuf:"varint,1,opt,name=enabled" json:"enabled,omitempty"` +} + +func (m *PodSecurityPolicyConfig) Reset() { *m = PodSecurityPolicyConfig{} } +func (m *PodSecurityPolicyConfig) String() string { return proto.CompactTextString(m) } +func (*PodSecurityPolicyConfig) ProtoMessage() {} +func (*PodSecurityPolicyConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *PodSecurityPolicyConfig) GetEnabled() bool { + if m != nil { + return m.Enabled + } + return false +} + +// A Google Container Engine cluster. +type Cluster struct { + // The name of this cluster. The name must be unique within this project + // and zone, and can be up to 40 characters with the following restrictions: + // + // * Lowercase letters, numbers, and hyphens only. + // * Must start with a letter. + // * Must end with a number or a letter. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // An optional description of this cluster. + Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` + // The number of nodes to create in this cluster. You must ensure that your + // Compute Engine resource quota + // is sufficient for this number of instances. You must also have available + // firewall and routes quota. + // For requests, this field should only be used in lieu of a + // "node_pool" object, since this configuration (along with the + // "node_config") will be used to create a "NodePool" object with an + // auto-generated name. Do not use this and a node_pool at the same time. + InitialNodeCount int32 `protobuf:"varint,3,opt,name=initial_node_count,json=initialNodeCount" json:"initial_node_count,omitempty"` + // Parameters used in creating the cluster's nodes. + // See `nodeConfig` for the description of its properties. + // For requests, this field should only be used in lieu of a + // "node_pool" object, since this configuration (along with the + // "initial_node_count") will be used to create a "NodePool" object with an + // auto-generated name. Do not use this and a node_pool at the same time. + // For responses, this field will be populated with the node configuration of + // the first node pool. + // + // If unspecified, the defaults are used. + NodeConfig *NodeConfig `protobuf:"bytes,4,opt,name=node_config,json=nodeConfig" json:"node_config,omitempty"` + // The authentication information for accessing the master endpoint. + MasterAuth *MasterAuth `protobuf:"bytes,5,opt,name=master_auth,json=masterAuth" json:"master_auth,omitempty"` + // The logging service the cluster should use to write logs. + // Currently available options: + // + // * `logging.googleapis.com` - the Google Cloud Logging service. + // * `none` - no logs will be exported from the cluster. + // * if left as an empty string,`logging.googleapis.com` will be used. + LoggingService string `protobuf:"bytes,6,opt,name=logging_service,json=loggingService" json:"logging_service,omitempty"` + // The monitoring service the cluster should use to write metrics. + // Currently available options: + // + // * `monitoring.googleapis.com` - the Google Cloud Monitoring service. + // * `none` - no metrics will be exported from the cluster. + // * if left as an empty string, `monitoring.googleapis.com` will be used. + MonitoringService string `protobuf:"bytes,7,opt,name=monitoring_service,json=monitoringService" json:"monitoring_service,omitempty"` + // The name of the Google Compute Engine + // [network](/compute/docs/networks-and-firewalls#networks) to which the + // cluster is connected. If left unspecified, the `default` network + // will be used. + Network string `protobuf:"bytes,8,opt,name=network" json:"network,omitempty"` + // The IP address range of the container pods in this cluster, in + // [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) + // notation (e.g. `10.96.0.0/14`). Leave blank to have + // one automatically chosen or specify a `/14` block in `10.0.0.0/8`. + ClusterIpv4Cidr string `protobuf:"bytes,9,opt,name=cluster_ipv4_cidr,json=clusterIpv4Cidr" json:"cluster_ipv4_cidr,omitempty"` + // Configurations for the various addons available to run in the cluster. + AddonsConfig *AddonsConfig `protobuf:"bytes,10,opt,name=addons_config,json=addonsConfig" json:"addons_config,omitempty"` + // The name of the Google Compute Engine + // [subnetwork](/compute/docs/subnetworks) to which the + // cluster is connected. + Subnetwork string `protobuf:"bytes,11,opt,name=subnetwork" json:"subnetwork,omitempty"` + // The node pools associated with this cluster. + // This field should not be set if "node_config" or "initial_node_count" are + // specified. + NodePools []*NodePool `protobuf:"bytes,12,rep,name=node_pools,json=nodePools" json:"node_pools,omitempty"` + // The list of Google Compute Engine + // [locations](/compute/docs/zones#available) in which the cluster's nodes + // should be located. + Locations []string `protobuf:"bytes,13,rep,name=locations" json:"locations,omitempty"` + // Kubernetes alpha features are enabled on this cluster. This includes alpha + // API groups (e.g. v1alpha1) and features that may not be production ready in + // the kubernetes version of the master and nodes. + // The cluster has no SLA for uptime and master/node upgrades are disabled. + // Alpha enabled clusters are automatically deleted thirty days after + // creation. + EnableKubernetesAlpha bool `protobuf:"varint,14,opt,name=enable_kubernetes_alpha,json=enableKubernetesAlpha" json:"enable_kubernetes_alpha,omitempty"` + // Configuration options for the NetworkPolicy feature. + NetworkPolicy *NetworkPolicy `protobuf:"bytes,19,opt,name=network_policy,json=networkPolicy" json:"network_policy,omitempty"` + // Configuration for cluster IP allocation. + IpAllocationPolicy *IPAllocationPolicy `protobuf:"bytes,20,opt,name=ip_allocation_policy,json=ipAllocationPolicy" json:"ip_allocation_policy,omitempty"` + // The configuration options for master authorized networks feature. + MasterAuthorizedNetworksConfig *MasterAuthorizedNetworksConfig `protobuf:"bytes,22,opt,name=master_authorized_networks_config,json=masterAuthorizedNetworksConfig" json:"master_authorized_networks_config,omitempty"` + // Configure the maintenance policy for this cluster. + MaintenancePolicy *MaintenancePolicy `protobuf:"bytes,23,opt,name=maintenance_policy,json=maintenancePolicy" json:"maintenance_policy,omitempty"` + // Configuration for the PodSecurityPolicy feature. + PodSecurityPolicyConfig *PodSecurityPolicyConfig `protobuf:"bytes,25,opt,name=pod_security_policy_config,json=podSecurityPolicyConfig" json:"pod_security_policy_config,omitempty"` + // [Output only] Server-defined URL for the resource. + SelfLink string `protobuf:"bytes,100,opt,name=self_link,json=selfLink" json:"self_link,omitempty"` + // [Output only] The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use location instead. + Zone string `protobuf:"bytes,101,opt,name=zone" json:"zone,omitempty"` + // [Output only] The IP address of this cluster's master endpoint. + // The endpoint can be accessed from the internet at + // `https://username:password@endpoint/`. + // + // See the `masterAuth` property of this resource for username and + // password information. + Endpoint string `protobuf:"bytes,102,opt,name=endpoint" json:"endpoint,omitempty"` + // The initial Kubernetes version for this cluster. Valid versions are those + // found in validMasterVersions returned by getServerConfig. The version can + // be upgraded over time; such upgrades are reflected in + // currentMasterVersion and currentNodeVersion. + InitialClusterVersion string `protobuf:"bytes,103,opt,name=initial_cluster_version,json=initialClusterVersion" json:"initial_cluster_version,omitempty"` + // [Output only] The current software version of the master endpoint. + CurrentMasterVersion string `protobuf:"bytes,104,opt,name=current_master_version,json=currentMasterVersion" json:"current_master_version,omitempty"` + // [Output only] The current version of the node software components. + // If they are currently at multiple versions because they're in the process + // of being upgraded, this reflects the minimum version of all nodes. + CurrentNodeVersion string `protobuf:"bytes,105,opt,name=current_node_version,json=currentNodeVersion" json:"current_node_version,omitempty"` + // [Output only] The time the cluster was created, in + // [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format. + CreateTime string `protobuf:"bytes,106,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // [Output only] The current status of this cluster. + Status Cluster_Status `protobuf:"varint,107,opt,name=status,enum=google.container.v1alpha1.Cluster_Status" json:"status,omitempty"` + // [Output only] Additional information about the current status of this + // cluster, if available. + StatusMessage string `protobuf:"bytes,108,opt,name=status_message,json=statusMessage" json:"status_message,omitempty"` + // [Output only] The size of the address space on each node for hosting + // containers. This is provisioned from within the `container_ipv4_cidr` + // range. + NodeIpv4CidrSize int32 `protobuf:"varint,109,opt,name=node_ipv4_cidr_size,json=nodeIpv4CidrSize" json:"node_ipv4_cidr_size,omitempty"` + // [Output only] The IP address range of the Kubernetes services in + // this cluster, in + // [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) + // notation (e.g. `1.2.3.4/29`). Service addresses are + // typically put in the last `/16` from the container CIDR. + ServicesIpv4Cidr string `protobuf:"bytes,110,opt,name=services_ipv4_cidr,json=servicesIpv4Cidr" json:"services_ipv4_cidr,omitempty"` + // [Output only] The resource URLs of [instance + // groups](/compute/docs/instance-groups/) associated with this + // cluster. + InstanceGroupUrls []string `protobuf:"bytes,111,rep,name=instance_group_urls,json=instanceGroupUrls" json:"instance_group_urls,omitempty"` + // [Output only] The number of nodes currently in the cluster. + CurrentNodeCount int32 `protobuf:"varint,112,opt,name=current_node_count,json=currentNodeCount" json:"current_node_count,omitempty"` + // [Output only] The time the cluster will be automatically + // deleted in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format. + ExpireTime string `protobuf:"bytes,113,opt,name=expire_time,json=expireTime" json:"expire_time,omitempty"` + // [Output only] The name of the Google Compute Engine + // [zone](/compute/docs/regions-zones/regions-zones#available) or + // [region](/compute/docs/regions-zones/regions-zones#available) in which + // the cluster resides. + Location string `protobuf:"bytes,114,opt,name=location" json:"location,omitempty"` +} + +func (m *Cluster) Reset() { *m = Cluster{} } +func (m *Cluster) String() string { return proto.CompactTextString(m) } +func (*Cluster) ProtoMessage() {} +func (*Cluster) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +func (m *Cluster) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Cluster) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *Cluster) GetInitialNodeCount() int32 { + if m != nil { + return m.InitialNodeCount + } + return 0 +} + +func (m *Cluster) GetNodeConfig() *NodeConfig { + if m != nil { + return m.NodeConfig + } + return nil +} + +func (m *Cluster) GetMasterAuth() *MasterAuth { + if m != nil { + return m.MasterAuth + } + return nil +} + +func (m *Cluster) GetLoggingService() string { + if m != nil { + return m.LoggingService + } + return "" +} + +func (m *Cluster) GetMonitoringService() string { + if m != nil { + return m.MonitoringService + } + return "" +} + +func (m *Cluster) GetNetwork() string { + if m != nil { + return m.Network + } + return "" +} + +func (m *Cluster) GetClusterIpv4Cidr() string { + if m != nil { + return m.ClusterIpv4Cidr + } + return "" +} + +func (m *Cluster) GetAddonsConfig() *AddonsConfig { + if m != nil { + return m.AddonsConfig + } + return nil +} + +func (m *Cluster) GetSubnetwork() string { + if m != nil { + return m.Subnetwork + } + return "" +} + +func (m *Cluster) GetNodePools() []*NodePool { + if m != nil { + return m.NodePools + } + return nil +} + +func (m *Cluster) GetLocations() []string { + if m != nil { + return m.Locations + } + return nil +} + +func (m *Cluster) GetEnableKubernetesAlpha() bool { + if m != nil { + return m.EnableKubernetesAlpha + } + return false +} + +func (m *Cluster) GetNetworkPolicy() *NetworkPolicy { + if m != nil { + return m.NetworkPolicy + } + return nil +} + +func (m *Cluster) GetIpAllocationPolicy() *IPAllocationPolicy { + if m != nil { + return m.IpAllocationPolicy + } + return nil +} + +func (m *Cluster) GetMasterAuthorizedNetworksConfig() *MasterAuthorizedNetworksConfig { + if m != nil { + return m.MasterAuthorizedNetworksConfig + } + return nil +} + +func (m *Cluster) GetMaintenancePolicy() *MaintenancePolicy { + if m != nil { + return m.MaintenancePolicy + } + return nil +} + +func (m *Cluster) GetPodSecurityPolicyConfig() *PodSecurityPolicyConfig { + if m != nil { + return m.PodSecurityPolicyConfig + } + return nil +} + +func (m *Cluster) GetSelfLink() string { + if m != nil { + return m.SelfLink + } + return "" +} + +func (m *Cluster) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *Cluster) GetEndpoint() string { + if m != nil { + return m.Endpoint + } + return "" +} + +func (m *Cluster) GetInitialClusterVersion() string { + if m != nil { + return m.InitialClusterVersion + } + return "" +} + +func (m *Cluster) GetCurrentMasterVersion() string { + if m != nil { + return m.CurrentMasterVersion + } + return "" +} + +func (m *Cluster) GetCurrentNodeVersion() string { + if m != nil { + return m.CurrentNodeVersion + } + return "" +} + +func (m *Cluster) GetCreateTime() string { + if m != nil { + return m.CreateTime + } + return "" +} + +func (m *Cluster) GetStatus() Cluster_Status { + if m != nil { + return m.Status + } + return Cluster_STATUS_UNSPECIFIED +} + +func (m *Cluster) GetStatusMessage() string { + if m != nil { + return m.StatusMessage + } + return "" +} + +func (m *Cluster) GetNodeIpv4CidrSize() int32 { + if m != nil { + return m.NodeIpv4CidrSize + } + return 0 +} + +func (m *Cluster) GetServicesIpv4Cidr() string { + if m != nil { + return m.ServicesIpv4Cidr + } + return "" +} + +func (m *Cluster) GetInstanceGroupUrls() []string { + if m != nil { + return m.InstanceGroupUrls + } + return nil +} + +func (m *Cluster) GetCurrentNodeCount() int32 { + if m != nil { + return m.CurrentNodeCount + } + return 0 +} + +func (m *Cluster) GetExpireTime() string { + if m != nil { + return m.ExpireTime + } + return "" +} + +func (m *Cluster) GetLocation() string { + if m != nil { + return m.Location + } + return "" +} + +// ClusterUpdate describes an update to the cluster. Exactly one update can +// be applied to a cluster with each request, so at most one field can be +// provided. +type ClusterUpdate struct { + // The Kubernetes version to change the nodes to (typically an + // upgrade). Use `-` to upgrade to the latest version supported by + // the server. + DesiredNodeVersion string `protobuf:"bytes,4,opt,name=desired_node_version,json=desiredNodeVersion" json:"desired_node_version,omitempty"` + // The monitoring service the cluster should use to write metrics. + // Currently available options: + // + // * "monitoring.googleapis.com" - the Google Cloud Monitoring service + // * "none" - no metrics will be exported from the cluster + DesiredMonitoringService string `protobuf:"bytes,5,opt,name=desired_monitoring_service,json=desiredMonitoringService" json:"desired_monitoring_service,omitempty"` + // Configurations for the various addons available to run in the cluster. + DesiredAddonsConfig *AddonsConfig `protobuf:"bytes,6,opt,name=desired_addons_config,json=desiredAddonsConfig" json:"desired_addons_config,omitempty"` + // The node pool to be upgraded. This field is mandatory if + // "desired_node_version", "desired_image_family" or + // "desired_node_pool_autoscaling" is specified and there is more than one + // node pool on the cluster. + DesiredNodePoolId string `protobuf:"bytes,7,opt,name=desired_node_pool_id,json=desiredNodePoolId" json:"desired_node_pool_id,omitempty"` + // The desired image type for the node pool. + // NOTE: Set the "desired_node_pool" field as well. + DesiredImageType string `protobuf:"bytes,8,opt,name=desired_image_type,json=desiredImageType" json:"desired_image_type,omitempty"` + // Autoscaler configuration for the node pool specified in + // desired_node_pool_id. If there is only one pool in the + // cluster and desired_node_pool_id is not provided then + // the change applies to that single node pool. + DesiredNodePoolAutoscaling *NodePoolAutoscaling `protobuf:"bytes,9,opt,name=desired_node_pool_autoscaling,json=desiredNodePoolAutoscaling" json:"desired_node_pool_autoscaling,omitempty"` + // The desired list of Google Compute Engine + // [locations](/compute/docs/zones#available) in which the cluster's nodes + // should be located. Changing the locations a cluster is in will result + // in nodes being either created or removed from the cluster, depending on + // whether locations are being added or removed. + // + // This list must always include the cluster's primary zone. + DesiredLocations []string `protobuf:"bytes,10,rep,name=desired_locations,json=desiredLocations" json:"desired_locations,omitempty"` + // The desired configuration options for master authorized networks feature. + DesiredMasterAuthorizedNetworksConfig *MasterAuthorizedNetworksConfig `protobuf:"bytes,12,opt,name=desired_master_authorized_networks_config,json=desiredMasterAuthorizedNetworksConfig" json:"desired_master_authorized_networks_config,omitempty"` + // The desired configuration options for the PodSecurityPolicy feature. + DesiredPodSecurityPolicyConfig *PodSecurityPolicyConfig `protobuf:"bytes,14,opt,name=desired_pod_security_policy_config,json=desiredPodSecurityPolicyConfig" json:"desired_pod_security_policy_config,omitempty"` + // The Kubernetes version to change the master to. The only valid value is the + // latest supported version. Use "-" to have the server automatically select + // the latest version. + DesiredMasterVersion string `protobuf:"bytes,100,opt,name=desired_master_version,json=desiredMasterVersion" json:"desired_master_version,omitempty"` +} + +func (m *ClusterUpdate) Reset() { *m = ClusterUpdate{} } +func (m *ClusterUpdate) String() string { return proto.CompactTextString(m) } +func (*ClusterUpdate) ProtoMessage() {} +func (*ClusterUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +func (m *ClusterUpdate) GetDesiredNodeVersion() string { + if m != nil { + return m.DesiredNodeVersion + } + return "" +} + +func (m *ClusterUpdate) GetDesiredMonitoringService() string { + if m != nil { + return m.DesiredMonitoringService + } + return "" +} + +func (m *ClusterUpdate) GetDesiredAddonsConfig() *AddonsConfig { + if m != nil { + return m.DesiredAddonsConfig + } + return nil +} + +func (m *ClusterUpdate) GetDesiredNodePoolId() string { + if m != nil { + return m.DesiredNodePoolId + } + return "" +} + +func (m *ClusterUpdate) GetDesiredImageType() string { + if m != nil { + return m.DesiredImageType + } + return "" +} + +func (m *ClusterUpdate) GetDesiredNodePoolAutoscaling() *NodePoolAutoscaling { + if m != nil { + return m.DesiredNodePoolAutoscaling + } + return nil +} + +func (m *ClusterUpdate) GetDesiredLocations() []string { + if m != nil { + return m.DesiredLocations + } + return nil +} + +func (m *ClusterUpdate) GetDesiredMasterAuthorizedNetworksConfig() *MasterAuthorizedNetworksConfig { + if m != nil { + return m.DesiredMasterAuthorizedNetworksConfig + } + return nil +} + +func (m *ClusterUpdate) GetDesiredPodSecurityPolicyConfig() *PodSecurityPolicyConfig { + if m != nil { + return m.DesiredPodSecurityPolicyConfig + } + return nil +} + +func (m *ClusterUpdate) GetDesiredMasterVersion() string { + if m != nil { + return m.DesiredMasterVersion + } + return "" +} + +// This operation resource represents operations that may have happened or are +// happening on the cluster. All fields are output only. +type Operation struct { + // The server-assigned ID for the operation. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the operation + // is taking place. + // This field is deprecated, use location instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The operation type. + OperationType Operation_Type `protobuf:"varint,3,opt,name=operation_type,json=operationType,enum=google.container.v1alpha1.Operation_Type" json:"operation_type,omitempty"` + // The current status of the operation. + Status Operation_Status `protobuf:"varint,4,opt,name=status,enum=google.container.v1alpha1.Operation_Status" json:"status,omitempty"` + // Detailed operation progress, if available. + Detail string `protobuf:"bytes,8,opt,name=detail" json:"detail,omitempty"` + // If an error has occurred, a textual description of the error. + StatusMessage string `protobuf:"bytes,5,opt,name=status_message,json=statusMessage" json:"status_message,omitempty"` + // Server-defined URL for the resource. + SelfLink string `protobuf:"bytes,6,opt,name=self_link,json=selfLink" json:"self_link,omitempty"` + // Server-defined URL for the target of the operation. + TargetLink string `protobuf:"bytes,7,opt,name=target_link,json=targetLink" json:"target_link,omitempty"` + // [Output only] The name of the Google Compute Engine + // [zone](/compute/docs/regions-zones/regions-zones#available) or + // [region](/compute/docs/regions-zones/regions-zones#available) in which + // the cluster resides. + Location string `protobuf:"bytes,9,opt,name=location" json:"location,omitempty"` + // [Output only] The time the operation started, in + // [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format. + StartTime string `protobuf:"bytes,10,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // [Output only] The time the operation completed, in + // [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format. + EndTime string `protobuf:"bytes,11,opt,name=end_time,json=endTime" json:"end_time,omitempty"` +} + +func (m *Operation) Reset() { *m = Operation{} } +func (m *Operation) String() string { return proto.CompactTextString(m) } +func (*Operation) ProtoMessage() {} +func (*Operation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +func (m *Operation) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Operation) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *Operation) GetOperationType() Operation_Type { + if m != nil { + return m.OperationType + } + return Operation_TYPE_UNSPECIFIED +} + +func (m *Operation) GetStatus() Operation_Status { + if m != nil { + return m.Status + } + return Operation_STATUS_UNSPECIFIED +} + +func (m *Operation) GetDetail() string { + if m != nil { + return m.Detail + } + return "" +} + +func (m *Operation) GetStatusMessage() string { + if m != nil { + return m.StatusMessage + } + return "" +} + +func (m *Operation) GetSelfLink() string { + if m != nil { + return m.SelfLink + } + return "" +} + +func (m *Operation) GetTargetLink() string { + if m != nil { + return m.TargetLink + } + return "" +} + +func (m *Operation) GetLocation() string { + if m != nil { + return m.Location + } + return "" +} + +func (m *Operation) GetStartTime() string { + if m != nil { + return m.StartTime + } + return "" +} + +func (m *Operation) GetEndTime() string { + if m != nil { + return m.EndTime + } + return "" +} + +// CreateClusterRequest creates a cluster. +type CreateClusterRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + // This field is deprecated, use parent instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use parent instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // A [cluster + // resource](/container-engine/reference/rest/v1alpha1/projects.zones.clusters) + Cluster *Cluster `protobuf:"bytes,3,opt,name=cluster" json:"cluster,omitempty"` + // The parent (project and location) where the cluster will be created. + // Specified in the format 'projects/*/locations/*'. + Parent string `protobuf:"bytes,5,opt,name=parent" json:"parent,omitempty"` +} + +func (m *CreateClusterRequest) Reset() { *m = CreateClusterRequest{} } +func (m *CreateClusterRequest) String() string { return proto.CompactTextString(m) } +func (*CreateClusterRequest) ProtoMessage() {} +func (*CreateClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } + +func (m *CreateClusterRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *CreateClusterRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *CreateClusterRequest) GetCluster() *Cluster { + if m != nil { + return m.Cluster + } + return nil +} + +func (m *CreateClusterRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +// GetClusterRequest gets the settings of a cluster. +type GetClusterRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to retrieve. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The name (project, location, cluster) of the cluster to retrieve. + // Specified in the format 'projects/*/locations/*/clusters/*'. + Name string `protobuf:"bytes,5,opt,name=name" json:"name,omitempty"` +} + +func (m *GetClusterRequest) Reset() { *m = GetClusterRequest{} } +func (m *GetClusterRequest) String() string { return proto.CompactTextString(m) } +func (*GetClusterRequest) ProtoMessage() {} +func (*GetClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } + +func (m *GetClusterRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *GetClusterRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *GetClusterRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *GetClusterRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// UpdateClusterRequest updates the settings of a cluster. +type UpdateClusterRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to upgrade. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // A description of the update. + Update *ClusterUpdate `protobuf:"bytes,4,opt,name=update" json:"update,omitempty"` + // The name (project, location, cluster) of the cluster to update. + // Specified in the format 'projects/*/locations/*/clusters/*'. + Name string `protobuf:"bytes,5,opt,name=name" json:"name,omitempty"` +} + +func (m *UpdateClusterRequest) Reset() { *m = UpdateClusterRequest{} } +func (m *UpdateClusterRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateClusterRequest) ProtoMessage() {} +func (*UpdateClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } + +func (m *UpdateClusterRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *UpdateClusterRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *UpdateClusterRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *UpdateClusterRequest) GetUpdate() *ClusterUpdate { + if m != nil { + return m.Update + } + return nil +} + +func (m *UpdateClusterRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// SetNodePoolVersionRequest updates the version of a node pool. +type UpdateNodePoolRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to upgrade. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The name of the node pool to upgrade. + // This field is deprecated, use name instead. + NodePoolId string `protobuf:"bytes,4,opt,name=node_pool_id,json=nodePoolId" json:"node_pool_id,omitempty"` + // The Kubernetes version to change the nodes to (typically an + // upgrade). Use `-` to upgrade to the latest version supported by + // the server. + NodeVersion string `protobuf:"bytes,5,opt,name=node_version,json=nodeVersion" json:"node_version,omitempty"` + // The desired image type for the node pool. + ImageType string `protobuf:"bytes,6,opt,name=image_type,json=imageType" json:"image_type,omitempty"` + // The name (project, location, cluster, node pool) of the node pool to update. + // Specified in the format 'projects/*/locations/*/clusters/*/nodePools/*'. + Name string `protobuf:"bytes,8,opt,name=name" json:"name,omitempty"` +} + +func (m *UpdateNodePoolRequest) Reset() { *m = UpdateNodePoolRequest{} } +func (m *UpdateNodePoolRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateNodePoolRequest) ProtoMessage() {} +func (*UpdateNodePoolRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } + +func (m *UpdateNodePoolRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *UpdateNodePoolRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *UpdateNodePoolRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *UpdateNodePoolRequest) GetNodePoolId() string { + if m != nil { + return m.NodePoolId + } + return "" +} + +func (m *UpdateNodePoolRequest) GetNodeVersion() string { + if m != nil { + return m.NodeVersion + } + return "" +} + +func (m *UpdateNodePoolRequest) GetImageType() string { + if m != nil { + return m.ImageType + } + return "" +} + +func (m *UpdateNodePoolRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// SetNodePoolAutoscalingRequest sets the autoscaler settings of a node pool. +type SetNodePoolAutoscalingRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to upgrade. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The name of the node pool to upgrade. + // This field is deprecated, use name instead. + NodePoolId string `protobuf:"bytes,4,opt,name=node_pool_id,json=nodePoolId" json:"node_pool_id,omitempty"` + // Autoscaling configuration for the node pool. + Autoscaling *NodePoolAutoscaling `protobuf:"bytes,5,opt,name=autoscaling" json:"autoscaling,omitempty"` + // The name (project, location, cluster, node pool) of the node pool to set + // autoscaler settings. Specified in the format + // 'projects/*/locations/*/clusters/*/nodePools/*'. + Name string `protobuf:"bytes,6,opt,name=name" json:"name,omitempty"` +} + +func (m *SetNodePoolAutoscalingRequest) Reset() { *m = SetNodePoolAutoscalingRequest{} } +func (m *SetNodePoolAutoscalingRequest) String() string { return proto.CompactTextString(m) } +func (*SetNodePoolAutoscalingRequest) ProtoMessage() {} +func (*SetNodePoolAutoscalingRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } + +func (m *SetNodePoolAutoscalingRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *SetNodePoolAutoscalingRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *SetNodePoolAutoscalingRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *SetNodePoolAutoscalingRequest) GetNodePoolId() string { + if m != nil { + return m.NodePoolId + } + return "" +} + +func (m *SetNodePoolAutoscalingRequest) GetAutoscaling() *NodePoolAutoscaling { + if m != nil { + return m.Autoscaling + } + return nil +} + +func (m *SetNodePoolAutoscalingRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// SetLoggingServiceRequest sets the logging service of a cluster. +type SetLoggingServiceRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to upgrade. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The logging service the cluster should use to write metrics. + // Currently available options: + // + // * "logging.googleapis.com" - the Google Cloud Logging service + // * "none" - no metrics will be exported from the cluster + LoggingService string `protobuf:"bytes,4,opt,name=logging_service,json=loggingService" json:"logging_service,omitempty"` + // The name (project, location, cluster) of the cluster to set logging. + // Specified in the format 'projects/*/locations/*/clusters/*'. + Name string `protobuf:"bytes,5,opt,name=name" json:"name,omitempty"` +} + +func (m *SetLoggingServiceRequest) Reset() { *m = SetLoggingServiceRequest{} } +func (m *SetLoggingServiceRequest) String() string { return proto.CompactTextString(m) } +func (*SetLoggingServiceRequest) ProtoMessage() {} +func (*SetLoggingServiceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } + +func (m *SetLoggingServiceRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *SetLoggingServiceRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *SetLoggingServiceRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *SetLoggingServiceRequest) GetLoggingService() string { + if m != nil { + return m.LoggingService + } + return "" +} + +func (m *SetLoggingServiceRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// SetMonitoringServiceRequest sets the monitoring service of a cluster. +type SetMonitoringServiceRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to upgrade. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The monitoring service the cluster should use to write metrics. + // Currently available options: + // + // * "monitoring.googleapis.com" - the Google Cloud Monitoring service + // * "none" - no metrics will be exported from the cluster + MonitoringService string `protobuf:"bytes,4,opt,name=monitoring_service,json=monitoringService" json:"monitoring_service,omitempty"` + // The name (project, location, cluster) of the cluster to set monitoring. + // Specified in the format 'projects/*/locations/*/clusters/*'. + Name string `protobuf:"bytes,6,opt,name=name" json:"name,omitempty"` +} + +func (m *SetMonitoringServiceRequest) Reset() { *m = SetMonitoringServiceRequest{} } +func (m *SetMonitoringServiceRequest) String() string { return proto.CompactTextString(m) } +func (*SetMonitoringServiceRequest) ProtoMessage() {} +func (*SetMonitoringServiceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } + +func (m *SetMonitoringServiceRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *SetMonitoringServiceRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *SetMonitoringServiceRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *SetMonitoringServiceRequest) GetMonitoringService() string { + if m != nil { + return m.MonitoringService + } + return "" +} + +func (m *SetMonitoringServiceRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// SetAddonsRequest sets the addons associated with the cluster. +type SetAddonsConfigRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to upgrade. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The desired configurations for the various addons available to run in the + // cluster. + AddonsConfig *AddonsConfig `protobuf:"bytes,4,opt,name=addons_config,json=addonsConfig" json:"addons_config,omitempty"` + // The name (project, location, cluster) of the cluster to set addons. + // Specified in the format 'projects/*/locations/*/clusters/*'. + Name string `protobuf:"bytes,6,opt,name=name" json:"name,omitempty"` +} + +func (m *SetAddonsConfigRequest) Reset() { *m = SetAddonsConfigRequest{} } +func (m *SetAddonsConfigRequest) String() string { return proto.CompactTextString(m) } +func (*SetAddonsConfigRequest) ProtoMessage() {} +func (*SetAddonsConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } + +func (m *SetAddonsConfigRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *SetAddonsConfigRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *SetAddonsConfigRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *SetAddonsConfigRequest) GetAddonsConfig() *AddonsConfig { + if m != nil { + return m.AddonsConfig + } + return nil +} + +func (m *SetAddonsConfigRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// SetLocationsRequest sets the locations of the cluster. +type SetLocationsRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to upgrade. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The desired list of Google Compute Engine + // [locations](/compute/docs/zones#available) in which the cluster's nodes + // should be located. Changing the locations a cluster is in will result + // in nodes being either created or removed from the cluster, depending on + // whether locations are being added or removed. + // + // This list must always include the cluster's primary zone. + Locations []string `protobuf:"bytes,4,rep,name=locations" json:"locations,omitempty"` + // The name (project, location, cluster) of the cluster to set locations. + // Specified in the format 'projects/*/locations/*/clusters/*'. + Name string `protobuf:"bytes,6,opt,name=name" json:"name,omitempty"` +} + +func (m *SetLocationsRequest) Reset() { *m = SetLocationsRequest{} } +func (m *SetLocationsRequest) String() string { return proto.CompactTextString(m) } +func (*SetLocationsRequest) ProtoMessage() {} +func (*SetLocationsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} } + +func (m *SetLocationsRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *SetLocationsRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *SetLocationsRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *SetLocationsRequest) GetLocations() []string { + if m != nil { + return m.Locations + } + return nil +} + +func (m *SetLocationsRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// UpdateMasterRequest updates the master of the cluster. +type UpdateMasterRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to upgrade. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The Kubernetes version to change the master to. The only valid value is the + // latest supported version. Use "-" to have the server automatically select + // the latest version. + MasterVersion string `protobuf:"bytes,4,opt,name=master_version,json=masterVersion" json:"master_version,omitempty"` + // The name (project, location, cluster) of the cluster to update. + // Specified in the format 'projects/*/locations/*/clusters/*'. + Name string `protobuf:"bytes,7,opt,name=name" json:"name,omitempty"` +} + +func (m *UpdateMasterRequest) Reset() { *m = UpdateMasterRequest{} } +func (m *UpdateMasterRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateMasterRequest) ProtoMessage() {} +func (*UpdateMasterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } + +func (m *UpdateMasterRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *UpdateMasterRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *UpdateMasterRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *UpdateMasterRequest) GetMasterVersion() string { + if m != nil { + return m.MasterVersion + } + return "" +} + +func (m *UpdateMasterRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// SetMasterAuthRequest updates the admin password of a cluster. +type SetMasterAuthRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to upgrade. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The exact form of action to be taken on the master auth. + Action SetMasterAuthRequest_Action `protobuf:"varint,4,opt,name=action,enum=google.container.v1alpha1.SetMasterAuthRequest_Action" json:"action,omitempty"` + // A description of the update. + Update *MasterAuth `protobuf:"bytes,5,opt,name=update" json:"update,omitempty"` + // The name (project, location, cluster) of the cluster to set auth. + // Specified in the format 'projects/*/locations/*/clusters/*'. + Name string `protobuf:"bytes,7,opt,name=name" json:"name,omitempty"` +} + +func (m *SetMasterAuthRequest) Reset() { *m = SetMasterAuthRequest{} } +func (m *SetMasterAuthRequest) String() string { return proto.CompactTextString(m) } +func (*SetMasterAuthRequest) ProtoMessage() {} +func (*SetMasterAuthRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} } + +func (m *SetMasterAuthRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *SetMasterAuthRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *SetMasterAuthRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *SetMasterAuthRequest) GetAction() SetMasterAuthRequest_Action { + if m != nil { + return m.Action + } + return SetMasterAuthRequest_UNKNOWN +} + +func (m *SetMasterAuthRequest) GetUpdate() *MasterAuth { + if m != nil { + return m.Update + } + return nil +} + +func (m *SetMasterAuthRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// DeleteClusterRequest deletes a cluster. +type DeleteClusterRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to delete. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The name (project, location, cluster) of the cluster to delete. + // Specified in the format 'projects/*/locations/*/clusters/*'. + Name string `protobuf:"bytes,4,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteClusterRequest) Reset() { *m = DeleteClusterRequest{} } +func (m *DeleteClusterRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteClusterRequest) ProtoMessage() {} +func (*DeleteClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} } + +func (m *DeleteClusterRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *DeleteClusterRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *DeleteClusterRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *DeleteClusterRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// ListClustersRequest lists clusters. +type ListClustersRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + // This field is deprecated, use parent instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides, or "-" for all zones. + // This field is deprecated, use parent instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The parent (project and location) where the clusters will be listed. + // Specified in the format 'projects/*/locations/*'. + // Location "-" matches all zones and all regions. + Parent string `protobuf:"bytes,4,opt,name=parent" json:"parent,omitempty"` +} + +func (m *ListClustersRequest) Reset() { *m = ListClustersRequest{} } +func (m *ListClustersRequest) String() string { return proto.CompactTextString(m) } +func (*ListClustersRequest) ProtoMessage() {} +func (*ListClustersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} } + +func (m *ListClustersRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *ListClustersRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *ListClustersRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +// ListClustersResponse is the result of ListClustersRequest. +type ListClustersResponse struct { + // A list of clusters in the project in the specified zone, or + // across all ones. + Clusters []*Cluster `protobuf:"bytes,1,rep,name=clusters" json:"clusters,omitempty"` + // If any zones are listed here, the list of clusters returned + // may be missing those zones. + MissingZones []string `protobuf:"bytes,2,rep,name=missing_zones,json=missingZones" json:"missing_zones,omitempty"` +} + +func (m *ListClustersResponse) Reset() { *m = ListClustersResponse{} } +func (m *ListClustersResponse) String() string { return proto.CompactTextString(m) } +func (*ListClustersResponse) ProtoMessage() {} +func (*ListClustersResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} } + +func (m *ListClustersResponse) GetClusters() []*Cluster { + if m != nil { + return m.Clusters + } + return nil +} + +func (m *ListClustersResponse) GetMissingZones() []string { + if m != nil { + return m.MissingZones + } + return nil +} + +// GetOperationRequest gets a single operation. +type GetOperationRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The server-assigned `name` of the operation. + // This field is deprecated, use name instead. + OperationId string `protobuf:"bytes,3,opt,name=operation_id,json=operationId" json:"operation_id,omitempty"` + // The name (project, location, operation id) of the operation to get. + // Specified in the format 'projects/*/locations/*/operations/*'. + Name string `protobuf:"bytes,5,opt,name=name" json:"name,omitempty"` +} + +func (m *GetOperationRequest) Reset() { *m = GetOperationRequest{} } +func (m *GetOperationRequest) String() string { return proto.CompactTextString(m) } +func (*GetOperationRequest) ProtoMessage() {} +func (*GetOperationRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} } + +func (m *GetOperationRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *GetOperationRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *GetOperationRequest) GetOperationId() string { + if m != nil { + return m.OperationId + } + return "" +} + +func (m *GetOperationRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// ListOperationsRequest lists operations. +type ListOperationsRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + // This field is deprecated, use parent instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine [zone](/compute/docs/zones#available) + // to return operations for, or `-` for all zones. + // This field is deprecated, use parent instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The parent (project and location) where the operations will be listed. + // Specified in the format 'projects/*/locations/*'. + // Location "-" matches all zones and all regions. + Parent string `protobuf:"bytes,4,opt,name=parent" json:"parent,omitempty"` +} + +func (m *ListOperationsRequest) Reset() { *m = ListOperationsRequest{} } +func (m *ListOperationsRequest) String() string { return proto.CompactTextString(m) } +func (*ListOperationsRequest) ProtoMessage() {} +func (*ListOperationsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} } + +func (m *ListOperationsRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *ListOperationsRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *ListOperationsRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +// CancelOperationRequest cancels a single operation. +type CancelOperationRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the operation resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The server-assigned `name` of the operation. + // This field is deprecated, use name instead. + OperationId string `protobuf:"bytes,3,opt,name=operation_id,json=operationId" json:"operation_id,omitempty"` + // The name (project, location, operation id) of the operation to cancel. + // Specified in the format 'projects/*/locations/*/operations/*'. + Name string `protobuf:"bytes,4,opt,name=name" json:"name,omitempty"` +} + +func (m *CancelOperationRequest) Reset() { *m = CancelOperationRequest{} } +func (m *CancelOperationRequest) String() string { return proto.CompactTextString(m) } +func (*CancelOperationRequest) ProtoMessage() {} +func (*CancelOperationRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} } + +func (m *CancelOperationRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *CancelOperationRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *CancelOperationRequest) GetOperationId() string { + if m != nil { + return m.OperationId + } + return "" +} + +func (m *CancelOperationRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// ListOperationsResponse is the result of ListOperationsRequest. +type ListOperationsResponse struct { + // A list of operations in the project in the specified zone. + Operations []*Operation `protobuf:"bytes,1,rep,name=operations" json:"operations,omitempty"` + // If any zones are listed here, the list of operations returned + // may be missing the operations from those zones. + MissingZones []string `protobuf:"bytes,2,rep,name=missing_zones,json=missingZones" json:"missing_zones,omitempty"` +} + +func (m *ListOperationsResponse) Reset() { *m = ListOperationsResponse{} } +func (m *ListOperationsResponse) String() string { return proto.CompactTextString(m) } +func (*ListOperationsResponse) ProtoMessage() {} +func (*ListOperationsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} } + +func (m *ListOperationsResponse) GetOperations() []*Operation { + if m != nil { + return m.Operations + } + return nil +} + +func (m *ListOperationsResponse) GetMissingZones() []string { + if m != nil { + return m.MissingZones + } + return nil +} + +// Gets the current Container Engine service configuration. +type GetServerConfigRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine [zone](/compute/docs/zones#available) + // to return operations for. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name (project and location) of the server config to get + // Specified in the format 'projects/*/locations/*'. + Name string `protobuf:"bytes,4,opt,name=name" json:"name,omitempty"` +} + +func (m *GetServerConfigRequest) Reset() { *m = GetServerConfigRequest{} } +func (m *GetServerConfigRequest) String() string { return proto.CompactTextString(m) } +func (*GetServerConfigRequest) ProtoMessage() {} +func (*GetServerConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} } + +func (m *GetServerConfigRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *GetServerConfigRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *GetServerConfigRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Container Engine service configuration. +type ServerConfig struct { + // Version of Kubernetes the service deploys by default. + DefaultClusterVersion string `protobuf:"bytes,1,opt,name=default_cluster_version,json=defaultClusterVersion" json:"default_cluster_version,omitempty"` + // List of valid node upgrade target versions. + ValidNodeVersions []string `protobuf:"bytes,3,rep,name=valid_node_versions,json=validNodeVersions" json:"valid_node_versions,omitempty"` + // Default image type. + DefaultImageType string `protobuf:"bytes,4,opt,name=default_image_type,json=defaultImageType" json:"default_image_type,omitempty"` + // List of valid image types. + ValidImageTypes []string `protobuf:"bytes,5,rep,name=valid_image_types,json=validImageTypes" json:"valid_image_types,omitempty"` + // List of valid master versions. + ValidMasterVersions []string `protobuf:"bytes,6,rep,name=valid_master_versions,json=validMasterVersions" json:"valid_master_versions,omitempty"` +} + +func (m *ServerConfig) Reset() { *m = ServerConfig{} } +func (m *ServerConfig) String() string { return proto.CompactTextString(m) } +func (*ServerConfig) ProtoMessage() {} +func (*ServerConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} } + +func (m *ServerConfig) GetDefaultClusterVersion() string { + if m != nil { + return m.DefaultClusterVersion + } + return "" +} + +func (m *ServerConfig) GetValidNodeVersions() []string { + if m != nil { + return m.ValidNodeVersions + } + return nil +} + +func (m *ServerConfig) GetDefaultImageType() string { + if m != nil { + return m.DefaultImageType + } + return "" +} + +func (m *ServerConfig) GetValidImageTypes() []string { + if m != nil { + return m.ValidImageTypes + } + return nil +} + +func (m *ServerConfig) GetValidMasterVersions() []string { + if m != nil { + return m.ValidMasterVersions + } + return nil +} + +// CreateNodePoolRequest creates a node pool for a cluster. +type CreateNodePoolRequest struct { + // The Google Developers Console [project ID or project + // number](https://developers.google.com/console/help/new/#projectnumber). + // This field is deprecated, use parent instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use parent instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster. + // This field is deprecated, use parent instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The node pool to create. + NodePool *NodePool `protobuf:"bytes,4,opt,name=node_pool,json=nodePool" json:"node_pool,omitempty"` + // The parent (project, location, cluster id) where the node pool will be created. + // Specified in the format 'projects/*/locations/*/clusters/*/nodePools/*'. + Parent string `protobuf:"bytes,6,opt,name=parent" json:"parent,omitempty"` +} + +func (m *CreateNodePoolRequest) Reset() { *m = CreateNodePoolRequest{} } +func (m *CreateNodePoolRequest) String() string { return proto.CompactTextString(m) } +func (*CreateNodePoolRequest) ProtoMessage() {} +func (*CreateNodePoolRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} } + +func (m *CreateNodePoolRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *CreateNodePoolRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *CreateNodePoolRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *CreateNodePoolRequest) GetNodePool() *NodePool { + if m != nil { + return m.NodePool + } + return nil +} + +func (m *CreateNodePoolRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +// DeleteNodePoolRequest deletes a node pool for a cluster. +type DeleteNodePoolRequest struct { + // The Google Developers Console [project ID or project + // number](https://developers.google.com/console/help/new/#projectnumber). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The name of the node pool to delete. + // This field is deprecated, use name instead. + NodePoolId string `protobuf:"bytes,4,opt,name=node_pool_id,json=nodePoolId" json:"node_pool_id,omitempty"` + // The name (project, location, cluster, node pool id) of the node pool to delete. + // Specified in the format 'projects/*/locations/*/clusters/*/nodePools/*'. + Name string `protobuf:"bytes,6,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteNodePoolRequest) Reset() { *m = DeleteNodePoolRequest{} } +func (m *DeleteNodePoolRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteNodePoolRequest) ProtoMessage() {} +func (*DeleteNodePoolRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} } + +func (m *DeleteNodePoolRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *DeleteNodePoolRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *DeleteNodePoolRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *DeleteNodePoolRequest) GetNodePoolId() string { + if m != nil { + return m.NodePoolId + } + return "" +} + +func (m *DeleteNodePoolRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// ListNodePoolsRequest lists the node pool(s) for a cluster. +type ListNodePoolsRequest struct { + // The Google Developers Console [project ID or project + // number](https://developers.google.com/console/help/new/#projectnumber). + // This field is deprecated, use parent instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use parent instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster. + // This field is deprecated, use parent instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The parent (project, location, cluster id) where the node pools will be listed. + // Specified in the format 'projects/*/locations/*/clusters/*'. + Parent string `protobuf:"bytes,5,opt,name=parent" json:"parent,omitempty"` +} + +func (m *ListNodePoolsRequest) Reset() { *m = ListNodePoolsRequest{} } +func (m *ListNodePoolsRequest) String() string { return proto.CompactTextString(m) } +func (*ListNodePoolsRequest) ProtoMessage() {} +func (*ListNodePoolsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} } + +func (m *ListNodePoolsRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *ListNodePoolsRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *ListNodePoolsRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *ListNodePoolsRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +// GetNodePoolRequest retrieves a node pool for a cluster. +type GetNodePoolRequest struct { + // The Google Developers Console [project ID or project + // number](https://developers.google.com/console/help/new/#projectnumber). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The name of the node pool. + // This field is deprecated, use name instead. + NodePoolId string `protobuf:"bytes,4,opt,name=node_pool_id,json=nodePoolId" json:"node_pool_id,omitempty"` + // The name (project, location, cluster, node pool id) of the node pool to get. + // Specified in the format 'projects/*/locations/*/clusters/*/nodePools/*'. + Name string `protobuf:"bytes,6,opt,name=name" json:"name,omitempty"` +} + +func (m *GetNodePoolRequest) Reset() { *m = GetNodePoolRequest{} } +func (m *GetNodePoolRequest) String() string { return proto.CompactTextString(m) } +func (*GetNodePoolRequest) ProtoMessage() {} +func (*GetNodePoolRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} } + +func (m *GetNodePoolRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *GetNodePoolRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *GetNodePoolRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *GetNodePoolRequest) GetNodePoolId() string { + if m != nil { + return m.NodePoolId + } + return "" +} + +func (m *GetNodePoolRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// NodePool contains the name and configuration for a cluster's node pool. +// Node pools are a set of nodes (i.e. VM's), with a common configuration and +// specification, under the control of the cluster master. They may have a set +// of Kubernetes labels applied to them, which may be used to reference them +// during pod scheduling. They may also be resized up or down, to accommodate +// the workload. +type NodePool struct { + // The name of the node pool. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The node configuration of the pool. + Config *NodeConfig `protobuf:"bytes,2,opt,name=config" json:"config,omitempty"` + // The initial node count for the pool. You must ensure that your + // Compute Engine resource quota + // is sufficient for this number of instances. You must also have available + // firewall and routes quota. + InitialNodeCount int32 `protobuf:"varint,3,opt,name=initial_node_count,json=initialNodeCount" json:"initial_node_count,omitempty"` + // Autoscaler configuration for this NodePool. Autoscaler is enabled + // only if a valid configuration is present. + Autoscaling *NodePoolAutoscaling `protobuf:"bytes,4,opt,name=autoscaling" json:"autoscaling,omitempty"` + // NodeManagement configuration for this NodePool. + Management *NodeManagement `protobuf:"bytes,5,opt,name=management" json:"management,omitempty"` + // [Output only] Server-defined URL for the resource. + SelfLink string `protobuf:"bytes,100,opt,name=self_link,json=selfLink" json:"self_link,omitempty"` + // [Output only] The version of the Kubernetes of this node. + Version string `protobuf:"bytes,101,opt,name=version" json:"version,omitempty"` + // [Output only] The resource URLs of [instance + // groups](/compute/docs/instance-groups/) associated with this + // node pool. + InstanceGroupUrls []string `protobuf:"bytes,102,rep,name=instance_group_urls,json=instanceGroupUrls" json:"instance_group_urls,omitempty"` + // [Output only] The status of the nodes in this pool instance. + Status NodePool_Status `protobuf:"varint,103,opt,name=status,enum=google.container.v1alpha1.NodePool_Status" json:"status,omitempty"` + // [Output only] Additional information about the current status of this + // node pool instance, if available. + StatusMessage string `protobuf:"bytes,104,opt,name=status_message,json=statusMessage" json:"status_message,omitempty"` +} + +func (m *NodePool) Reset() { *m = NodePool{} } +func (m *NodePool) String() string { return proto.CompactTextString(m) } +func (*NodePool) ProtoMessage() {} +func (*NodePool) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} } + +func (m *NodePool) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *NodePool) GetConfig() *NodeConfig { + if m != nil { + return m.Config + } + return nil +} + +func (m *NodePool) GetInitialNodeCount() int32 { + if m != nil { + return m.InitialNodeCount + } + return 0 +} + +func (m *NodePool) GetAutoscaling() *NodePoolAutoscaling { + if m != nil { + return m.Autoscaling + } + return nil +} + +func (m *NodePool) GetManagement() *NodeManagement { + if m != nil { + return m.Management + } + return nil +} + +func (m *NodePool) GetSelfLink() string { + if m != nil { + return m.SelfLink + } + return "" +} + +func (m *NodePool) GetVersion() string { + if m != nil { + return m.Version + } + return "" +} + +func (m *NodePool) GetInstanceGroupUrls() []string { + if m != nil { + return m.InstanceGroupUrls + } + return nil +} + +func (m *NodePool) GetStatus() NodePool_Status { + if m != nil { + return m.Status + } + return NodePool_STATUS_UNSPECIFIED +} + +func (m *NodePool) GetStatusMessage() string { + if m != nil { + return m.StatusMessage + } + return "" +} + +// NodeManagement defines the set of node management services turned on for the +// node pool. +type NodeManagement struct { + // Whether the nodes will be automatically upgraded. + AutoUpgrade bool `protobuf:"varint,1,opt,name=auto_upgrade,json=autoUpgrade" json:"auto_upgrade,omitempty"` + // Whether the nodes will be automatically repaired. + AutoRepair bool `protobuf:"varint,2,opt,name=auto_repair,json=autoRepair" json:"auto_repair,omitempty"` + // Specifies the Auto Upgrade knobs for the node pool. + UpgradeOptions *AutoUpgradeOptions `protobuf:"bytes,10,opt,name=upgrade_options,json=upgradeOptions" json:"upgrade_options,omitempty"` +} + +func (m *NodeManagement) Reset() { *m = NodeManagement{} } +func (m *NodeManagement) String() string { return proto.CompactTextString(m) } +func (*NodeManagement) ProtoMessage() {} +func (*NodeManagement) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41} } + +func (m *NodeManagement) GetAutoUpgrade() bool { + if m != nil { + return m.AutoUpgrade + } + return false +} + +func (m *NodeManagement) GetAutoRepair() bool { + if m != nil { + return m.AutoRepair + } + return false +} + +func (m *NodeManagement) GetUpgradeOptions() *AutoUpgradeOptions { + if m != nil { + return m.UpgradeOptions + } + return nil +} + +// AutoUpgradeOptions defines the set of options for the user to control how +// the Auto Upgrades will proceed. +type AutoUpgradeOptions struct { + // [Output only] This field is set when upgrades are about to commence + // with the approximate start time for the upgrades, in + // [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format. + AutoUpgradeStartTime string `protobuf:"bytes,1,opt,name=auto_upgrade_start_time,json=autoUpgradeStartTime" json:"auto_upgrade_start_time,omitempty"` + // [Output only] This field is set when upgrades are about to commence + // with the description of the upgrade. + Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` +} + +func (m *AutoUpgradeOptions) Reset() { *m = AutoUpgradeOptions{} } +func (m *AutoUpgradeOptions) String() string { return proto.CompactTextString(m) } +func (*AutoUpgradeOptions) ProtoMessage() {} +func (*AutoUpgradeOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{42} } + +func (m *AutoUpgradeOptions) GetAutoUpgradeStartTime() string { + if m != nil { + return m.AutoUpgradeStartTime + } + return "" +} + +func (m *AutoUpgradeOptions) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +// MaintenancePolicy defines the maintenance policy to be used for the cluster. +type MaintenancePolicy struct { + // Specifies the maintenance window in which maintenance may be performed. + Window *MaintenanceWindow `protobuf:"bytes,1,opt,name=window" json:"window,omitempty"` +} + +func (m *MaintenancePolicy) Reset() { *m = MaintenancePolicy{} } +func (m *MaintenancePolicy) String() string { return proto.CompactTextString(m) } +func (*MaintenancePolicy) ProtoMessage() {} +func (*MaintenancePolicy) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{43} } + +func (m *MaintenancePolicy) GetWindow() *MaintenanceWindow { + if m != nil { + return m.Window + } + return nil +} + +// MaintenanceWindow defines the maintenance window to be used for the cluster. +type MaintenanceWindow struct { + // Unimplemented, reserved for future use. + // HourlyMaintenanceWindow hourly_maintenance_window = 1; + // + // Types that are valid to be assigned to Policy: + // *MaintenanceWindow_DailyMaintenanceWindow + Policy isMaintenanceWindow_Policy `protobuf_oneof:"policy"` +} + +func (m *MaintenanceWindow) Reset() { *m = MaintenanceWindow{} } +func (m *MaintenanceWindow) String() string { return proto.CompactTextString(m) } +func (*MaintenanceWindow) ProtoMessage() {} +func (*MaintenanceWindow) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{44} } + +type isMaintenanceWindow_Policy interface { + isMaintenanceWindow_Policy() +} + +type MaintenanceWindow_DailyMaintenanceWindow struct { + DailyMaintenanceWindow *DailyMaintenanceWindow `protobuf:"bytes,2,opt,name=daily_maintenance_window,json=dailyMaintenanceWindow,oneof"` +} + +func (*MaintenanceWindow_DailyMaintenanceWindow) isMaintenanceWindow_Policy() {} + +func (m *MaintenanceWindow) GetPolicy() isMaintenanceWindow_Policy { + if m != nil { + return m.Policy + } + return nil +} + +func (m *MaintenanceWindow) GetDailyMaintenanceWindow() *DailyMaintenanceWindow { + if x, ok := m.GetPolicy().(*MaintenanceWindow_DailyMaintenanceWindow); ok { + return x.DailyMaintenanceWindow + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*MaintenanceWindow) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _MaintenanceWindow_OneofMarshaler, _MaintenanceWindow_OneofUnmarshaler, _MaintenanceWindow_OneofSizer, []interface{}{ + (*MaintenanceWindow_DailyMaintenanceWindow)(nil), + } +} + +func _MaintenanceWindow_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*MaintenanceWindow) + // policy + switch x := m.Policy.(type) { + case *MaintenanceWindow_DailyMaintenanceWindow: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DailyMaintenanceWindow); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("MaintenanceWindow.Policy has unexpected type %T", x) + } + return nil +} + +func _MaintenanceWindow_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*MaintenanceWindow) + switch tag { + case 2: // policy.daily_maintenance_window + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(DailyMaintenanceWindow) + err := b.DecodeMessage(msg) + m.Policy = &MaintenanceWindow_DailyMaintenanceWindow{msg} + return true, err + default: + return false, nil + } +} + +func _MaintenanceWindow_OneofSizer(msg proto.Message) (n int) { + m := msg.(*MaintenanceWindow) + // policy + switch x := m.Policy.(type) { + case *MaintenanceWindow_DailyMaintenanceWindow: + s := proto.Size(x.DailyMaintenanceWindow) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Time window specified for daily maintenance operations. +type DailyMaintenanceWindow struct { + // Time within the maintenance window to start the maintenance operations. + // It must be in format "HH:MM”, where HH : [00-23] and MM : [00-59] GMT. + StartTime string `protobuf:"bytes,2,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // [Output only] Duration of the time window, automatically chosen to be + // smallest possible in the given scenario. + Duration string `protobuf:"bytes,3,opt,name=duration" json:"duration,omitempty"` +} + +func (m *DailyMaintenanceWindow) Reset() { *m = DailyMaintenanceWindow{} } +func (m *DailyMaintenanceWindow) String() string { return proto.CompactTextString(m) } +func (*DailyMaintenanceWindow) ProtoMessage() {} +func (*DailyMaintenanceWindow) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{45} } + +func (m *DailyMaintenanceWindow) GetStartTime() string { + if m != nil { + return m.StartTime + } + return "" +} + +func (m *DailyMaintenanceWindow) GetDuration() string { + if m != nil { + return m.Duration + } + return "" +} + +// SetNodePoolManagementRequest sets the node management properties of a node +// pool. +type SetNodePoolManagementRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to update. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The name of the node pool to update. + // This field is deprecated, use name instead. + NodePoolId string `protobuf:"bytes,4,opt,name=node_pool_id,json=nodePoolId" json:"node_pool_id,omitempty"` + // NodeManagement configuration for the node pool. + Management *NodeManagement `protobuf:"bytes,5,opt,name=management" json:"management,omitempty"` + // The name (project, location, cluster, node pool id) of the node pool to set + // management properties. Specified in the format + // 'projects/*/locations/*/clusters/*/nodePools/*'. + Name string `protobuf:"bytes,7,opt,name=name" json:"name,omitempty"` +} + +func (m *SetNodePoolManagementRequest) Reset() { *m = SetNodePoolManagementRequest{} } +func (m *SetNodePoolManagementRequest) String() string { return proto.CompactTextString(m) } +func (*SetNodePoolManagementRequest) ProtoMessage() {} +func (*SetNodePoolManagementRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{46} } + +func (m *SetNodePoolManagementRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *SetNodePoolManagementRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *SetNodePoolManagementRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *SetNodePoolManagementRequest) GetNodePoolId() string { + if m != nil { + return m.NodePoolId + } + return "" +} + +func (m *SetNodePoolManagementRequest) GetManagement() *NodeManagement { + if m != nil { + return m.Management + } + return nil +} + +func (m *SetNodePoolManagementRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// SetNodePoolSizeRequest sets the size a node +// pool. +type SetNodePoolSizeRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to update. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The name of the node pool to update. + // This field is deprecated, use name instead. + NodePoolId string `protobuf:"bytes,4,opt,name=node_pool_id,json=nodePoolId" json:"node_pool_id,omitempty"` + // The desired node count for the pool. + NodeCount int32 `protobuf:"varint,5,opt,name=node_count,json=nodeCount" json:"node_count,omitempty"` + // The name (project, location, cluster, node pool id) of the node pool to set + // size. + // Specified in the format 'projects/*/locations/*/clusters/*/nodePools/*'. + Name string `protobuf:"bytes,7,opt,name=name" json:"name,omitempty"` +} + +func (m *SetNodePoolSizeRequest) Reset() { *m = SetNodePoolSizeRequest{} } +func (m *SetNodePoolSizeRequest) String() string { return proto.CompactTextString(m) } +func (*SetNodePoolSizeRequest) ProtoMessage() {} +func (*SetNodePoolSizeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{47} } + +func (m *SetNodePoolSizeRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *SetNodePoolSizeRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *SetNodePoolSizeRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *SetNodePoolSizeRequest) GetNodePoolId() string { + if m != nil { + return m.NodePoolId + } + return "" +} + +func (m *SetNodePoolSizeRequest) GetNodeCount() int32 { + if m != nil { + return m.NodeCount + } + return 0 +} + +func (m *SetNodePoolSizeRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// RollbackNodePoolUpgradeRequest rollbacks the previously Aborted or Failed +// NodePool upgrade. This will be an no-op if the last upgrade successfully +// completed. +type RollbackNodePoolUpgradeRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to rollback. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The name of the node pool to rollback. + // This field is deprecated, use name instead. + NodePoolId string `protobuf:"bytes,4,opt,name=node_pool_id,json=nodePoolId" json:"node_pool_id,omitempty"` + // The name (project, location, cluster, node pool id) of the node poll to + // rollback upgrade. + // Specified in the format 'projects/*/locations/*/clusters/*/nodePools/*'. + Name string `protobuf:"bytes,6,opt,name=name" json:"name,omitempty"` +} + +func (m *RollbackNodePoolUpgradeRequest) Reset() { *m = RollbackNodePoolUpgradeRequest{} } +func (m *RollbackNodePoolUpgradeRequest) String() string { return proto.CompactTextString(m) } +func (*RollbackNodePoolUpgradeRequest) ProtoMessage() {} +func (*RollbackNodePoolUpgradeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{48} } + +func (m *RollbackNodePoolUpgradeRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *RollbackNodePoolUpgradeRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *RollbackNodePoolUpgradeRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *RollbackNodePoolUpgradeRequest) GetNodePoolId() string { + if m != nil { + return m.NodePoolId + } + return "" +} + +func (m *RollbackNodePoolUpgradeRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// ListNodePoolsResponse is the result of ListNodePoolsRequest. +type ListNodePoolsResponse struct { + // A list of node pools for a cluster. + NodePools []*NodePool `protobuf:"bytes,1,rep,name=node_pools,json=nodePools" json:"node_pools,omitempty"` +} + +func (m *ListNodePoolsResponse) Reset() { *m = ListNodePoolsResponse{} } +func (m *ListNodePoolsResponse) String() string { return proto.CompactTextString(m) } +func (*ListNodePoolsResponse) ProtoMessage() {} +func (*ListNodePoolsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{49} } + +func (m *ListNodePoolsResponse) GetNodePools() []*NodePool { + if m != nil { + return m.NodePools + } + return nil +} + +// NodePoolAutoscaling contains information required by cluster autoscaler to +// adjust the size of the node pool to the current cluster usage. +type NodePoolAutoscaling struct { + // Is autoscaling enabled for this node pool. + Enabled bool `protobuf:"varint,1,opt,name=enabled" json:"enabled,omitempty"` + // Minimum number of nodes in the NodePool. Must be >= 1 and <= + // max_node_count. + MinNodeCount int32 `protobuf:"varint,2,opt,name=min_node_count,json=minNodeCount" json:"min_node_count,omitempty"` + // Maximum number of nodes in the NodePool. Must be >= min_node_count. There + // has to enough quota to scale up the cluster. + MaxNodeCount int32 `protobuf:"varint,3,opt,name=max_node_count,json=maxNodeCount" json:"max_node_count,omitempty"` +} + +func (m *NodePoolAutoscaling) Reset() { *m = NodePoolAutoscaling{} } +func (m *NodePoolAutoscaling) String() string { return proto.CompactTextString(m) } +func (*NodePoolAutoscaling) ProtoMessage() {} +func (*NodePoolAutoscaling) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{50} } + +func (m *NodePoolAutoscaling) GetEnabled() bool { + if m != nil { + return m.Enabled + } + return false +} + +func (m *NodePoolAutoscaling) GetMinNodeCount() int32 { + if m != nil { + return m.MinNodeCount + } + return 0 +} + +func (m *NodePoolAutoscaling) GetMaxNodeCount() int32 { + if m != nil { + return m.MaxNodeCount + } + return 0 +} + +// SetLabelsRequest sets the Google Cloud Platform labels on a Google Container +// Engine cluster, which will in turn set them for Google Compute Engine +// resources used by that cluster +type SetLabelsRequest struct { + // The Google Developers Console [project ID or project + // number](https://developers.google.com/console/help/new/#projectnumber). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The labels to set for that cluster. + ResourceLabels map[string]string `protobuf:"bytes,4,rep,name=resource_labels,json=resourceLabels" json:"resource_labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // The fingerprint of the previous set of labels for this resource, + // used to detect conflicts. The fingerprint is initially generated by + // Container Engine and changes after every request to modify or update + // labels. You must always provide an up-to-date fingerprint hash when + // updating or changing labels. Make a get() request to the + // resource to get the latest fingerprint. + LabelFingerprint string `protobuf:"bytes,5,opt,name=label_fingerprint,json=labelFingerprint" json:"label_fingerprint,omitempty"` + // The name (project, location, cluster id) of the cluster to set labels. + // Specified in the format 'projects/*/locations/*/clusters/*'. + Name string `protobuf:"bytes,7,opt,name=name" json:"name,omitempty"` +} + +func (m *SetLabelsRequest) Reset() { *m = SetLabelsRequest{} } +func (m *SetLabelsRequest) String() string { return proto.CompactTextString(m) } +func (*SetLabelsRequest) ProtoMessage() {} +func (*SetLabelsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{51} } + +func (m *SetLabelsRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *SetLabelsRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *SetLabelsRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *SetLabelsRequest) GetResourceLabels() map[string]string { + if m != nil { + return m.ResourceLabels + } + return nil +} + +func (m *SetLabelsRequest) GetLabelFingerprint() string { + if m != nil { + return m.LabelFingerprint + } + return "" +} + +func (m *SetLabelsRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// SetLegacyAbacRequest enables or disables the ABAC authorization mechanism for +// a cluster. +type SetLegacyAbacRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to update. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // Whether ABAC authorization will be enabled in the cluster. + Enabled bool `protobuf:"varint,4,opt,name=enabled" json:"enabled,omitempty"` + // The name (project, location, cluster id) of the cluster to set legacy abac. + // Specified in the format 'projects/*/locations/*/clusters/*'. + Name string `protobuf:"bytes,6,opt,name=name" json:"name,omitempty"` +} + +func (m *SetLegacyAbacRequest) Reset() { *m = SetLegacyAbacRequest{} } +func (m *SetLegacyAbacRequest) String() string { return proto.CompactTextString(m) } +func (*SetLegacyAbacRequest) ProtoMessage() {} +func (*SetLegacyAbacRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{52} } + +func (m *SetLegacyAbacRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *SetLegacyAbacRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *SetLegacyAbacRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *SetLegacyAbacRequest) GetEnabled() bool { + if m != nil { + return m.Enabled + } + return false +} + +func (m *SetLegacyAbacRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// StartIPRotationRequest creates a new IP for the cluster and then performs +// a node upgrade on each node pool to point to the new IP. +type StartIPRotationRequest struct { + // The Google Developers Console [project ID or project + // number](https://developers.google.com/console/help/new/#projectnumber). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The name (project, location, cluster id) of the cluster to start IP rotation. + // Specified in the format 'projects/*/locations/*/clusters/*'. + Name string `protobuf:"bytes,6,opt,name=name" json:"name,omitempty"` +} + +func (m *StartIPRotationRequest) Reset() { *m = StartIPRotationRequest{} } +func (m *StartIPRotationRequest) String() string { return proto.CompactTextString(m) } +func (*StartIPRotationRequest) ProtoMessage() {} +func (*StartIPRotationRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{53} } + +func (m *StartIPRotationRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *StartIPRotationRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *StartIPRotationRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *StartIPRotationRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// CompleteIPRotationRequest moves the cluster master back into single-IP mode. +type CompleteIPRotationRequest struct { + // The Google Developers Console [project ID or project + // number](https://developers.google.com/console/help/new/#projectnumber). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The name (project, location, cluster id) of the cluster to complete IP rotation. + // Specified in the format 'projects/*/locations/*/clusters/*'. + Name string `protobuf:"bytes,7,opt,name=name" json:"name,omitempty"` +} + +func (m *CompleteIPRotationRequest) Reset() { *m = CompleteIPRotationRequest{} } +func (m *CompleteIPRotationRequest) String() string { return proto.CompactTextString(m) } +func (*CompleteIPRotationRequest) ProtoMessage() {} +func (*CompleteIPRotationRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{54} } + +func (m *CompleteIPRotationRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *CompleteIPRotationRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *CompleteIPRotationRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *CompleteIPRotationRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// AcceleratorConfig represents a Hardware Accelerator request. +type AcceleratorConfig struct { + // The number of the accelerator cards exposed to an instance. + AcceleratorCount int64 `protobuf:"varint,1,opt,name=accelerator_count,json=acceleratorCount" json:"accelerator_count,omitempty"` + // The accelerator type resource name. List of supported accelerators + // [here](/compute/docs/gpus/#Introduction) + AcceleratorType string `protobuf:"bytes,2,opt,name=accelerator_type,json=acceleratorType" json:"accelerator_type,omitempty"` +} + +func (m *AcceleratorConfig) Reset() { *m = AcceleratorConfig{} } +func (m *AcceleratorConfig) String() string { return proto.CompactTextString(m) } +func (*AcceleratorConfig) ProtoMessage() {} +func (*AcceleratorConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{55} } + +func (m *AcceleratorConfig) GetAcceleratorCount() int64 { + if m != nil { + return m.AcceleratorCount + } + return 0 +} + +func (m *AcceleratorConfig) GetAcceleratorType() string { + if m != nil { + return m.AcceleratorType + } + return "" +} + +// SetNetworkPolicyRequest enables/disables network policy for a cluster. +type SetNetworkPolicyRequest struct { + // The Google Developers Console [project ID or project + // number](https://developers.google.com/console/help/new/#projectnumber). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // Configuration options for the NetworkPolicy feature. + NetworkPolicy *NetworkPolicy `protobuf:"bytes,4,opt,name=network_policy,json=networkPolicy" json:"network_policy,omitempty"` + // The name (project, location, cluster id) of the cluster to set networking + // policy. + // Specified in the format 'projects/*/locations/*/clusters/*'. + Name string `protobuf:"bytes,6,opt,name=name" json:"name,omitempty"` +} + +func (m *SetNetworkPolicyRequest) Reset() { *m = SetNetworkPolicyRequest{} } +func (m *SetNetworkPolicyRequest) String() string { return proto.CompactTextString(m) } +func (*SetNetworkPolicyRequest) ProtoMessage() {} +func (*SetNetworkPolicyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{56} } + +func (m *SetNetworkPolicyRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *SetNetworkPolicyRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *SetNetworkPolicyRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *SetNetworkPolicyRequest) GetNetworkPolicy() *NetworkPolicy { + if m != nil { + return m.NetworkPolicy + } + return nil +} + +func (m *SetNetworkPolicyRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// SetMaintenancePolicyRequest sets the maintenance policy for a cluster. +type SetMaintenancePolicyRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to update. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The maintenance policy to be set for the cluster. An empty field + // clears the existing maintenance policy. + MaintenancePolicy *MaintenancePolicy `protobuf:"bytes,4,opt,name=maintenance_policy,json=maintenancePolicy" json:"maintenance_policy,omitempty"` + // The name (project, location, cluster id) of the cluster to set maintenance + // policy. + // Specified in the format 'projects/*/locations/*/clusters/*'. + Name string `protobuf:"bytes,5,opt,name=name" json:"name,omitempty"` +} + +func (m *SetMaintenancePolicyRequest) Reset() { *m = SetMaintenancePolicyRequest{} } +func (m *SetMaintenancePolicyRequest) String() string { return proto.CompactTextString(m) } +func (*SetMaintenancePolicyRequest) ProtoMessage() {} +func (*SetMaintenancePolicyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{57} } + +func (m *SetMaintenancePolicyRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *SetMaintenancePolicyRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *SetMaintenancePolicyRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *SetMaintenancePolicyRequest) GetMaintenancePolicy() *MaintenancePolicy { + if m != nil { + return m.MaintenancePolicy + } + return nil +} + +func (m *SetMaintenancePolicyRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func init() { + proto.RegisterType((*NodeConfig)(nil), "google.container.v1alpha1.NodeConfig") + proto.RegisterType((*NodeTaint)(nil), "google.container.v1alpha1.NodeTaint") + proto.RegisterType((*MasterAuth)(nil), "google.container.v1alpha1.MasterAuth") + proto.RegisterType((*ClientCertificateConfig)(nil), "google.container.v1alpha1.ClientCertificateConfig") + proto.RegisterType((*AddonsConfig)(nil), "google.container.v1alpha1.AddonsConfig") + proto.RegisterType((*HttpLoadBalancing)(nil), "google.container.v1alpha1.HttpLoadBalancing") + proto.RegisterType((*HorizontalPodAutoscaling)(nil), "google.container.v1alpha1.HorizontalPodAutoscaling") + proto.RegisterType((*KubernetesDashboard)(nil), "google.container.v1alpha1.KubernetesDashboard") + proto.RegisterType((*NetworkPolicyConfig)(nil), "google.container.v1alpha1.NetworkPolicyConfig") + proto.RegisterType((*MasterAuthorizedNetworksConfig)(nil), "google.container.v1alpha1.MasterAuthorizedNetworksConfig") + proto.RegisterType((*MasterAuthorizedNetworksConfig_CidrBlock)(nil), "google.container.v1alpha1.MasterAuthorizedNetworksConfig.CidrBlock") + proto.RegisterType((*NetworkPolicy)(nil), "google.container.v1alpha1.NetworkPolicy") + proto.RegisterType((*IPAllocationPolicy)(nil), "google.container.v1alpha1.IPAllocationPolicy") + proto.RegisterType((*PodSecurityPolicyConfig)(nil), "google.container.v1alpha1.PodSecurityPolicyConfig") + proto.RegisterType((*Cluster)(nil), "google.container.v1alpha1.Cluster") + proto.RegisterType((*ClusterUpdate)(nil), "google.container.v1alpha1.ClusterUpdate") + proto.RegisterType((*Operation)(nil), "google.container.v1alpha1.Operation") + proto.RegisterType((*CreateClusterRequest)(nil), "google.container.v1alpha1.CreateClusterRequest") + proto.RegisterType((*GetClusterRequest)(nil), "google.container.v1alpha1.GetClusterRequest") + proto.RegisterType((*UpdateClusterRequest)(nil), "google.container.v1alpha1.UpdateClusterRequest") + proto.RegisterType((*UpdateNodePoolRequest)(nil), "google.container.v1alpha1.UpdateNodePoolRequest") + proto.RegisterType((*SetNodePoolAutoscalingRequest)(nil), "google.container.v1alpha1.SetNodePoolAutoscalingRequest") + proto.RegisterType((*SetLoggingServiceRequest)(nil), "google.container.v1alpha1.SetLoggingServiceRequest") + proto.RegisterType((*SetMonitoringServiceRequest)(nil), "google.container.v1alpha1.SetMonitoringServiceRequest") + proto.RegisterType((*SetAddonsConfigRequest)(nil), "google.container.v1alpha1.SetAddonsConfigRequest") + proto.RegisterType((*SetLocationsRequest)(nil), "google.container.v1alpha1.SetLocationsRequest") + proto.RegisterType((*UpdateMasterRequest)(nil), "google.container.v1alpha1.UpdateMasterRequest") + proto.RegisterType((*SetMasterAuthRequest)(nil), "google.container.v1alpha1.SetMasterAuthRequest") + proto.RegisterType((*DeleteClusterRequest)(nil), "google.container.v1alpha1.DeleteClusterRequest") + proto.RegisterType((*ListClustersRequest)(nil), "google.container.v1alpha1.ListClustersRequest") + proto.RegisterType((*ListClustersResponse)(nil), "google.container.v1alpha1.ListClustersResponse") + proto.RegisterType((*GetOperationRequest)(nil), "google.container.v1alpha1.GetOperationRequest") + proto.RegisterType((*ListOperationsRequest)(nil), "google.container.v1alpha1.ListOperationsRequest") + proto.RegisterType((*CancelOperationRequest)(nil), "google.container.v1alpha1.CancelOperationRequest") + proto.RegisterType((*ListOperationsResponse)(nil), "google.container.v1alpha1.ListOperationsResponse") + proto.RegisterType((*GetServerConfigRequest)(nil), "google.container.v1alpha1.GetServerConfigRequest") + proto.RegisterType((*ServerConfig)(nil), "google.container.v1alpha1.ServerConfig") + proto.RegisterType((*CreateNodePoolRequest)(nil), "google.container.v1alpha1.CreateNodePoolRequest") + proto.RegisterType((*DeleteNodePoolRequest)(nil), "google.container.v1alpha1.DeleteNodePoolRequest") + proto.RegisterType((*ListNodePoolsRequest)(nil), "google.container.v1alpha1.ListNodePoolsRequest") + proto.RegisterType((*GetNodePoolRequest)(nil), "google.container.v1alpha1.GetNodePoolRequest") + proto.RegisterType((*NodePool)(nil), "google.container.v1alpha1.NodePool") + proto.RegisterType((*NodeManagement)(nil), "google.container.v1alpha1.NodeManagement") + proto.RegisterType((*AutoUpgradeOptions)(nil), "google.container.v1alpha1.AutoUpgradeOptions") + proto.RegisterType((*MaintenancePolicy)(nil), "google.container.v1alpha1.MaintenancePolicy") + proto.RegisterType((*MaintenanceWindow)(nil), "google.container.v1alpha1.MaintenanceWindow") + proto.RegisterType((*DailyMaintenanceWindow)(nil), "google.container.v1alpha1.DailyMaintenanceWindow") + proto.RegisterType((*SetNodePoolManagementRequest)(nil), "google.container.v1alpha1.SetNodePoolManagementRequest") + proto.RegisterType((*SetNodePoolSizeRequest)(nil), "google.container.v1alpha1.SetNodePoolSizeRequest") + proto.RegisterType((*RollbackNodePoolUpgradeRequest)(nil), "google.container.v1alpha1.RollbackNodePoolUpgradeRequest") + proto.RegisterType((*ListNodePoolsResponse)(nil), "google.container.v1alpha1.ListNodePoolsResponse") + proto.RegisterType((*NodePoolAutoscaling)(nil), "google.container.v1alpha1.NodePoolAutoscaling") + proto.RegisterType((*SetLabelsRequest)(nil), "google.container.v1alpha1.SetLabelsRequest") + proto.RegisterType((*SetLegacyAbacRequest)(nil), "google.container.v1alpha1.SetLegacyAbacRequest") + proto.RegisterType((*StartIPRotationRequest)(nil), "google.container.v1alpha1.StartIPRotationRequest") + proto.RegisterType((*CompleteIPRotationRequest)(nil), "google.container.v1alpha1.CompleteIPRotationRequest") + proto.RegisterType((*AcceleratorConfig)(nil), "google.container.v1alpha1.AcceleratorConfig") + proto.RegisterType((*SetNetworkPolicyRequest)(nil), "google.container.v1alpha1.SetNetworkPolicyRequest") + proto.RegisterType((*SetMaintenancePolicyRequest)(nil), "google.container.v1alpha1.SetMaintenancePolicyRequest") + proto.RegisterEnum("google.container.v1alpha1.NodeTaint_Effect", NodeTaint_Effect_name, NodeTaint_Effect_value) + proto.RegisterEnum("google.container.v1alpha1.NetworkPolicy_Provider", NetworkPolicy_Provider_name, NetworkPolicy_Provider_value) + proto.RegisterEnum("google.container.v1alpha1.Cluster_Status", Cluster_Status_name, Cluster_Status_value) + proto.RegisterEnum("google.container.v1alpha1.Operation_Status", Operation_Status_name, Operation_Status_value) + proto.RegisterEnum("google.container.v1alpha1.Operation_Type", Operation_Type_name, Operation_Type_value) + proto.RegisterEnum("google.container.v1alpha1.SetMasterAuthRequest_Action", SetMasterAuthRequest_Action_name, SetMasterAuthRequest_Action_value) + proto.RegisterEnum("google.container.v1alpha1.NodePool_Status", NodePool_Status_name, NodePool_Status_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for ClusterManager service + +type ClusterManagerClient interface { + // Lists all clusters owned by a project in either the specified zone or all + // zones. + ListClusters(ctx context.Context, in *ListClustersRequest, opts ...grpc.CallOption) (*ListClustersResponse, error) + // Gets the details of a specific cluster. + GetCluster(ctx context.Context, in *GetClusterRequest, opts ...grpc.CallOption) (*Cluster, error) + // Creates a cluster, consisting of the specified number and type of Google + // Compute Engine instances. + // + // By default, the cluster is created in the project's + // [default network](/compute/docs/networks-and-firewalls#networks). + // + // One firewall is added for the cluster. After cluster creation, + // the cluster creates routes for each node to allow the containers + // on that node to communicate with all other instances in the + // cluster. + // + // Finally, an entry is added to the project's global metadata indicating + // which CIDR range is being used by the cluster. + CreateCluster(ctx context.Context, in *CreateClusterRequest, opts ...grpc.CallOption) (*Operation, error) + // Updates the settings of a specific cluster. + UpdateCluster(ctx context.Context, in *UpdateClusterRequest, opts ...grpc.CallOption) (*Operation, error) + // Updates the version and/or iamge type of a specific node pool. + UpdateNodePool(ctx context.Context, in *UpdateNodePoolRequest, opts ...grpc.CallOption) (*Operation, error) + // Sets the autoscaling settings of a specific node pool. + SetNodePoolAutoscaling(ctx context.Context, in *SetNodePoolAutoscalingRequest, opts ...grpc.CallOption) (*Operation, error) + // Sets the logging service of a specific cluster. + SetLoggingService(ctx context.Context, in *SetLoggingServiceRequest, opts ...grpc.CallOption) (*Operation, error) + // Sets the monitoring service of a specific cluster. + SetMonitoringService(ctx context.Context, in *SetMonitoringServiceRequest, opts ...grpc.CallOption) (*Operation, error) + // Sets the addons of a specific cluster. + SetAddonsConfig(ctx context.Context, in *SetAddonsConfigRequest, opts ...grpc.CallOption) (*Operation, error) + // Sets the locations of a specific cluster. + SetLocations(ctx context.Context, in *SetLocationsRequest, opts ...grpc.CallOption) (*Operation, error) + // Updates the master of a specific cluster. + UpdateMaster(ctx context.Context, in *UpdateMasterRequest, opts ...grpc.CallOption) (*Operation, error) + // Used to set master auth materials. Currently supports :- + // Changing the admin password of a specific cluster. + // This can be either via password generation or explicitly set. + // Modify basic_auth.csv and reset the K8S API server. + SetMasterAuth(ctx context.Context, in *SetMasterAuthRequest, opts ...grpc.CallOption) (*Operation, error) + // Deletes the cluster, including the Kubernetes endpoint and all worker + // nodes. + // + // Firewalls and routes that were configured during cluster creation + // are also deleted. + // + // Other Google Compute Engine resources that might be in use by the cluster + // (e.g. load balancer resources) will not be deleted if they weren't present + // at the initial create time. + DeleteCluster(ctx context.Context, in *DeleteClusterRequest, opts ...grpc.CallOption) (*Operation, error) + // Lists all operations in a project in a specific zone or all zones. + ListOperations(ctx context.Context, in *ListOperationsRequest, opts ...grpc.CallOption) (*ListOperationsResponse, error) + // Gets the specified operation. + GetOperation(ctx context.Context, in *GetOperationRequest, opts ...grpc.CallOption) (*Operation, error) + // Cancels the specified operation. + CancelOperation(ctx context.Context, in *CancelOperationRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) + // Returns configuration info about the Container Engine service. + GetServerConfig(ctx context.Context, in *GetServerConfigRequest, opts ...grpc.CallOption) (*ServerConfig, error) + // Lists the node pools for a cluster. + ListNodePools(ctx context.Context, in *ListNodePoolsRequest, opts ...grpc.CallOption) (*ListNodePoolsResponse, error) + // Retrieves the node pool requested. + GetNodePool(ctx context.Context, in *GetNodePoolRequest, opts ...grpc.CallOption) (*NodePool, error) + // Creates a node pool for a cluster. + CreateNodePool(ctx context.Context, in *CreateNodePoolRequest, opts ...grpc.CallOption) (*Operation, error) + // Deletes a node pool from a cluster. + DeleteNodePool(ctx context.Context, in *DeleteNodePoolRequest, opts ...grpc.CallOption) (*Operation, error) + // Roll back the previously Aborted or Failed NodePool upgrade. + // This will be an no-op if the last upgrade successfully completed. + RollbackNodePoolUpgrade(ctx context.Context, in *RollbackNodePoolUpgradeRequest, opts ...grpc.CallOption) (*Operation, error) + // Sets the NodeManagement options for a node pool. + SetNodePoolManagement(ctx context.Context, in *SetNodePoolManagementRequest, opts ...grpc.CallOption) (*Operation, error) + // Sets labels on a cluster. + SetLabels(ctx context.Context, in *SetLabelsRequest, opts ...grpc.CallOption) (*Operation, error) + // Enables or disables the ABAC authorization mechanism on a cluster. + SetLegacyAbac(ctx context.Context, in *SetLegacyAbacRequest, opts ...grpc.CallOption) (*Operation, error) + // Start master IP rotation. + StartIPRotation(ctx context.Context, in *StartIPRotationRequest, opts ...grpc.CallOption) (*Operation, error) + // Completes master IP rotation. + CompleteIPRotation(ctx context.Context, in *CompleteIPRotationRequest, opts ...grpc.CallOption) (*Operation, error) + // Sets the size of a specific node pool. + SetNodePoolSize(ctx context.Context, in *SetNodePoolSizeRequest, opts ...grpc.CallOption) (*Operation, error) + // Enables/Disables Network Policy for a cluster. + SetNetworkPolicy(ctx context.Context, in *SetNetworkPolicyRequest, opts ...grpc.CallOption) (*Operation, error) + // Sets the maintenance policy for a cluster. + SetMaintenancePolicy(ctx context.Context, in *SetMaintenancePolicyRequest, opts ...grpc.CallOption) (*Operation, error) +} + +type clusterManagerClient struct { + cc *grpc.ClientConn +} + +func NewClusterManagerClient(cc *grpc.ClientConn) ClusterManagerClient { + return &clusterManagerClient{cc} +} + +func (c *clusterManagerClient) ListClusters(ctx context.Context, in *ListClustersRequest, opts ...grpc.CallOption) (*ListClustersResponse, error) { + out := new(ListClustersResponse) + err := grpc.Invoke(ctx, "/google.container.v1alpha1.ClusterManager/ListClusters", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) GetCluster(ctx context.Context, in *GetClusterRequest, opts ...grpc.CallOption) (*Cluster, error) { + out := new(Cluster) + err := grpc.Invoke(ctx, "/google.container.v1alpha1.ClusterManager/GetCluster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) CreateCluster(ctx context.Context, in *CreateClusterRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1alpha1.ClusterManager/CreateCluster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) UpdateCluster(ctx context.Context, in *UpdateClusterRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1alpha1.ClusterManager/UpdateCluster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) UpdateNodePool(ctx context.Context, in *UpdateNodePoolRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1alpha1.ClusterManager/UpdateNodePool", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) SetNodePoolAutoscaling(ctx context.Context, in *SetNodePoolAutoscalingRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1alpha1.ClusterManager/SetNodePoolAutoscaling", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) SetLoggingService(ctx context.Context, in *SetLoggingServiceRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1alpha1.ClusterManager/SetLoggingService", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) SetMonitoringService(ctx context.Context, in *SetMonitoringServiceRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1alpha1.ClusterManager/SetMonitoringService", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) SetAddonsConfig(ctx context.Context, in *SetAddonsConfigRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1alpha1.ClusterManager/SetAddonsConfig", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) SetLocations(ctx context.Context, in *SetLocationsRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1alpha1.ClusterManager/SetLocations", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) UpdateMaster(ctx context.Context, in *UpdateMasterRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1alpha1.ClusterManager/UpdateMaster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) SetMasterAuth(ctx context.Context, in *SetMasterAuthRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1alpha1.ClusterManager/SetMasterAuth", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) DeleteCluster(ctx context.Context, in *DeleteClusterRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1alpha1.ClusterManager/DeleteCluster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) ListOperations(ctx context.Context, in *ListOperationsRequest, opts ...grpc.CallOption) (*ListOperationsResponse, error) { + out := new(ListOperationsResponse) + err := grpc.Invoke(ctx, "/google.container.v1alpha1.ClusterManager/ListOperations", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) GetOperation(ctx context.Context, in *GetOperationRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1alpha1.ClusterManager/GetOperation", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) CancelOperation(ctx context.Context, in *CancelOperationRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) { + out := new(google_protobuf1.Empty) + err := grpc.Invoke(ctx, "/google.container.v1alpha1.ClusterManager/CancelOperation", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) GetServerConfig(ctx context.Context, in *GetServerConfigRequest, opts ...grpc.CallOption) (*ServerConfig, error) { + out := new(ServerConfig) + err := grpc.Invoke(ctx, "/google.container.v1alpha1.ClusterManager/GetServerConfig", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) ListNodePools(ctx context.Context, in *ListNodePoolsRequest, opts ...grpc.CallOption) (*ListNodePoolsResponse, error) { + out := new(ListNodePoolsResponse) + err := grpc.Invoke(ctx, "/google.container.v1alpha1.ClusterManager/ListNodePools", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) GetNodePool(ctx context.Context, in *GetNodePoolRequest, opts ...grpc.CallOption) (*NodePool, error) { + out := new(NodePool) + err := grpc.Invoke(ctx, "/google.container.v1alpha1.ClusterManager/GetNodePool", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) CreateNodePool(ctx context.Context, in *CreateNodePoolRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1alpha1.ClusterManager/CreateNodePool", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) DeleteNodePool(ctx context.Context, in *DeleteNodePoolRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1alpha1.ClusterManager/DeleteNodePool", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) RollbackNodePoolUpgrade(ctx context.Context, in *RollbackNodePoolUpgradeRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1alpha1.ClusterManager/RollbackNodePoolUpgrade", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) SetNodePoolManagement(ctx context.Context, in *SetNodePoolManagementRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1alpha1.ClusterManager/SetNodePoolManagement", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) SetLabels(ctx context.Context, in *SetLabelsRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1alpha1.ClusterManager/SetLabels", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) SetLegacyAbac(ctx context.Context, in *SetLegacyAbacRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1alpha1.ClusterManager/SetLegacyAbac", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) StartIPRotation(ctx context.Context, in *StartIPRotationRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1alpha1.ClusterManager/StartIPRotation", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) CompleteIPRotation(ctx context.Context, in *CompleteIPRotationRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1alpha1.ClusterManager/CompleteIPRotation", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) SetNodePoolSize(ctx context.Context, in *SetNodePoolSizeRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1alpha1.ClusterManager/SetNodePoolSize", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) SetNetworkPolicy(ctx context.Context, in *SetNetworkPolicyRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1alpha1.ClusterManager/SetNetworkPolicy", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) SetMaintenancePolicy(ctx context.Context, in *SetMaintenancePolicyRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1alpha1.ClusterManager/SetMaintenancePolicy", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for ClusterManager service + +type ClusterManagerServer interface { + // Lists all clusters owned by a project in either the specified zone or all + // zones. + ListClusters(context.Context, *ListClustersRequest) (*ListClustersResponse, error) + // Gets the details of a specific cluster. + GetCluster(context.Context, *GetClusterRequest) (*Cluster, error) + // Creates a cluster, consisting of the specified number and type of Google + // Compute Engine instances. + // + // By default, the cluster is created in the project's + // [default network](/compute/docs/networks-and-firewalls#networks). + // + // One firewall is added for the cluster. After cluster creation, + // the cluster creates routes for each node to allow the containers + // on that node to communicate with all other instances in the + // cluster. + // + // Finally, an entry is added to the project's global metadata indicating + // which CIDR range is being used by the cluster. + CreateCluster(context.Context, *CreateClusterRequest) (*Operation, error) + // Updates the settings of a specific cluster. + UpdateCluster(context.Context, *UpdateClusterRequest) (*Operation, error) + // Updates the version and/or iamge type of a specific node pool. + UpdateNodePool(context.Context, *UpdateNodePoolRequest) (*Operation, error) + // Sets the autoscaling settings of a specific node pool. + SetNodePoolAutoscaling(context.Context, *SetNodePoolAutoscalingRequest) (*Operation, error) + // Sets the logging service of a specific cluster. + SetLoggingService(context.Context, *SetLoggingServiceRequest) (*Operation, error) + // Sets the monitoring service of a specific cluster. + SetMonitoringService(context.Context, *SetMonitoringServiceRequest) (*Operation, error) + // Sets the addons of a specific cluster. + SetAddonsConfig(context.Context, *SetAddonsConfigRequest) (*Operation, error) + // Sets the locations of a specific cluster. + SetLocations(context.Context, *SetLocationsRequest) (*Operation, error) + // Updates the master of a specific cluster. + UpdateMaster(context.Context, *UpdateMasterRequest) (*Operation, error) + // Used to set master auth materials. Currently supports :- + // Changing the admin password of a specific cluster. + // This can be either via password generation or explicitly set. + // Modify basic_auth.csv and reset the K8S API server. + SetMasterAuth(context.Context, *SetMasterAuthRequest) (*Operation, error) + // Deletes the cluster, including the Kubernetes endpoint and all worker + // nodes. + // + // Firewalls and routes that were configured during cluster creation + // are also deleted. + // + // Other Google Compute Engine resources that might be in use by the cluster + // (e.g. load balancer resources) will not be deleted if they weren't present + // at the initial create time. + DeleteCluster(context.Context, *DeleteClusterRequest) (*Operation, error) + // Lists all operations in a project in a specific zone or all zones. + ListOperations(context.Context, *ListOperationsRequest) (*ListOperationsResponse, error) + // Gets the specified operation. + GetOperation(context.Context, *GetOperationRequest) (*Operation, error) + // Cancels the specified operation. + CancelOperation(context.Context, *CancelOperationRequest) (*google_protobuf1.Empty, error) + // Returns configuration info about the Container Engine service. + GetServerConfig(context.Context, *GetServerConfigRequest) (*ServerConfig, error) + // Lists the node pools for a cluster. + ListNodePools(context.Context, *ListNodePoolsRequest) (*ListNodePoolsResponse, error) + // Retrieves the node pool requested. + GetNodePool(context.Context, *GetNodePoolRequest) (*NodePool, error) + // Creates a node pool for a cluster. + CreateNodePool(context.Context, *CreateNodePoolRequest) (*Operation, error) + // Deletes a node pool from a cluster. + DeleteNodePool(context.Context, *DeleteNodePoolRequest) (*Operation, error) + // Roll back the previously Aborted or Failed NodePool upgrade. + // This will be an no-op if the last upgrade successfully completed. + RollbackNodePoolUpgrade(context.Context, *RollbackNodePoolUpgradeRequest) (*Operation, error) + // Sets the NodeManagement options for a node pool. + SetNodePoolManagement(context.Context, *SetNodePoolManagementRequest) (*Operation, error) + // Sets labels on a cluster. + SetLabels(context.Context, *SetLabelsRequest) (*Operation, error) + // Enables or disables the ABAC authorization mechanism on a cluster. + SetLegacyAbac(context.Context, *SetLegacyAbacRequest) (*Operation, error) + // Start master IP rotation. + StartIPRotation(context.Context, *StartIPRotationRequest) (*Operation, error) + // Completes master IP rotation. + CompleteIPRotation(context.Context, *CompleteIPRotationRequest) (*Operation, error) + // Sets the size of a specific node pool. + SetNodePoolSize(context.Context, *SetNodePoolSizeRequest) (*Operation, error) + // Enables/Disables Network Policy for a cluster. + SetNetworkPolicy(context.Context, *SetNetworkPolicyRequest) (*Operation, error) + // Sets the maintenance policy for a cluster. + SetMaintenancePolicy(context.Context, *SetMaintenancePolicyRequest) (*Operation, error) +} + +func RegisterClusterManagerServer(s *grpc.Server, srv ClusterManagerServer) { + s.RegisterService(&_ClusterManager_serviceDesc, srv) +} + +func _ClusterManager_ListClusters_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListClustersRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).ListClusters(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1alpha1.ClusterManager/ListClusters", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).ListClusters(ctx, req.(*ListClustersRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_GetCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).GetCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1alpha1.ClusterManager/GetCluster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).GetCluster(ctx, req.(*GetClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_CreateCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).CreateCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1alpha1.ClusterManager/CreateCluster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).CreateCluster(ctx, req.(*CreateClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_UpdateCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).UpdateCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1alpha1.ClusterManager/UpdateCluster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).UpdateCluster(ctx, req.(*UpdateClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_UpdateNodePool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateNodePoolRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).UpdateNodePool(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1alpha1.ClusterManager/UpdateNodePool", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).UpdateNodePool(ctx, req.(*UpdateNodePoolRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_SetNodePoolAutoscaling_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetNodePoolAutoscalingRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).SetNodePoolAutoscaling(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1alpha1.ClusterManager/SetNodePoolAutoscaling", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).SetNodePoolAutoscaling(ctx, req.(*SetNodePoolAutoscalingRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_SetLoggingService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetLoggingServiceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).SetLoggingService(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1alpha1.ClusterManager/SetLoggingService", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).SetLoggingService(ctx, req.(*SetLoggingServiceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_SetMonitoringService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetMonitoringServiceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).SetMonitoringService(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1alpha1.ClusterManager/SetMonitoringService", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).SetMonitoringService(ctx, req.(*SetMonitoringServiceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_SetAddonsConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetAddonsConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).SetAddonsConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1alpha1.ClusterManager/SetAddonsConfig", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).SetAddonsConfig(ctx, req.(*SetAddonsConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_SetLocations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetLocationsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).SetLocations(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1alpha1.ClusterManager/SetLocations", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).SetLocations(ctx, req.(*SetLocationsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_UpdateMaster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateMasterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).UpdateMaster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1alpha1.ClusterManager/UpdateMaster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).UpdateMaster(ctx, req.(*UpdateMasterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_SetMasterAuth_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetMasterAuthRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).SetMasterAuth(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1alpha1.ClusterManager/SetMasterAuth", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).SetMasterAuth(ctx, req.(*SetMasterAuthRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_DeleteCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).DeleteCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1alpha1.ClusterManager/DeleteCluster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).DeleteCluster(ctx, req.(*DeleteClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_ListOperations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListOperationsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).ListOperations(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1alpha1.ClusterManager/ListOperations", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).ListOperations(ctx, req.(*ListOperationsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_GetOperation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetOperationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).GetOperation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1alpha1.ClusterManager/GetOperation", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).GetOperation(ctx, req.(*GetOperationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_CancelOperation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CancelOperationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).CancelOperation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1alpha1.ClusterManager/CancelOperation", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).CancelOperation(ctx, req.(*CancelOperationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_GetServerConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetServerConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).GetServerConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1alpha1.ClusterManager/GetServerConfig", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).GetServerConfig(ctx, req.(*GetServerConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_ListNodePools_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListNodePoolsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).ListNodePools(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1alpha1.ClusterManager/ListNodePools", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).ListNodePools(ctx, req.(*ListNodePoolsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_GetNodePool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetNodePoolRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).GetNodePool(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1alpha1.ClusterManager/GetNodePool", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).GetNodePool(ctx, req.(*GetNodePoolRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_CreateNodePool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateNodePoolRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).CreateNodePool(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1alpha1.ClusterManager/CreateNodePool", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).CreateNodePool(ctx, req.(*CreateNodePoolRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_DeleteNodePool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteNodePoolRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).DeleteNodePool(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1alpha1.ClusterManager/DeleteNodePool", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).DeleteNodePool(ctx, req.(*DeleteNodePoolRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_RollbackNodePoolUpgrade_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RollbackNodePoolUpgradeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).RollbackNodePoolUpgrade(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1alpha1.ClusterManager/RollbackNodePoolUpgrade", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).RollbackNodePoolUpgrade(ctx, req.(*RollbackNodePoolUpgradeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_SetNodePoolManagement_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetNodePoolManagementRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).SetNodePoolManagement(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1alpha1.ClusterManager/SetNodePoolManagement", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).SetNodePoolManagement(ctx, req.(*SetNodePoolManagementRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_SetLabels_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetLabelsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).SetLabels(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1alpha1.ClusterManager/SetLabels", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).SetLabels(ctx, req.(*SetLabelsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_SetLegacyAbac_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetLegacyAbacRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).SetLegacyAbac(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1alpha1.ClusterManager/SetLegacyAbac", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).SetLegacyAbac(ctx, req.(*SetLegacyAbacRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_StartIPRotation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StartIPRotationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).StartIPRotation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1alpha1.ClusterManager/StartIPRotation", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).StartIPRotation(ctx, req.(*StartIPRotationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_CompleteIPRotation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CompleteIPRotationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).CompleteIPRotation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1alpha1.ClusterManager/CompleteIPRotation", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).CompleteIPRotation(ctx, req.(*CompleteIPRotationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_SetNodePoolSize_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetNodePoolSizeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).SetNodePoolSize(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1alpha1.ClusterManager/SetNodePoolSize", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).SetNodePoolSize(ctx, req.(*SetNodePoolSizeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_SetNetworkPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetNetworkPolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).SetNetworkPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1alpha1.ClusterManager/SetNetworkPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).SetNetworkPolicy(ctx, req.(*SetNetworkPolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_SetMaintenancePolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetMaintenancePolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).SetMaintenancePolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1alpha1.ClusterManager/SetMaintenancePolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).SetMaintenancePolicy(ctx, req.(*SetMaintenancePolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _ClusterManager_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.container.v1alpha1.ClusterManager", + HandlerType: (*ClusterManagerServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListClusters", + Handler: _ClusterManager_ListClusters_Handler, + }, + { + MethodName: "GetCluster", + Handler: _ClusterManager_GetCluster_Handler, + }, + { + MethodName: "CreateCluster", + Handler: _ClusterManager_CreateCluster_Handler, + }, + { + MethodName: "UpdateCluster", + Handler: _ClusterManager_UpdateCluster_Handler, + }, + { + MethodName: "UpdateNodePool", + Handler: _ClusterManager_UpdateNodePool_Handler, + }, + { + MethodName: "SetNodePoolAutoscaling", + Handler: _ClusterManager_SetNodePoolAutoscaling_Handler, + }, + { + MethodName: "SetLoggingService", + Handler: _ClusterManager_SetLoggingService_Handler, + }, + { + MethodName: "SetMonitoringService", + Handler: _ClusterManager_SetMonitoringService_Handler, + }, + { + MethodName: "SetAddonsConfig", + Handler: _ClusterManager_SetAddonsConfig_Handler, + }, + { + MethodName: "SetLocations", + Handler: _ClusterManager_SetLocations_Handler, + }, + { + MethodName: "UpdateMaster", + Handler: _ClusterManager_UpdateMaster_Handler, + }, + { + MethodName: "SetMasterAuth", + Handler: _ClusterManager_SetMasterAuth_Handler, + }, + { + MethodName: "DeleteCluster", + Handler: _ClusterManager_DeleteCluster_Handler, + }, + { + MethodName: "ListOperations", + Handler: _ClusterManager_ListOperations_Handler, + }, + { + MethodName: "GetOperation", + Handler: _ClusterManager_GetOperation_Handler, + }, + { + MethodName: "CancelOperation", + Handler: _ClusterManager_CancelOperation_Handler, + }, + { + MethodName: "GetServerConfig", + Handler: _ClusterManager_GetServerConfig_Handler, + }, + { + MethodName: "ListNodePools", + Handler: _ClusterManager_ListNodePools_Handler, + }, + { + MethodName: "GetNodePool", + Handler: _ClusterManager_GetNodePool_Handler, + }, + { + MethodName: "CreateNodePool", + Handler: _ClusterManager_CreateNodePool_Handler, + }, + { + MethodName: "DeleteNodePool", + Handler: _ClusterManager_DeleteNodePool_Handler, + }, + { + MethodName: "RollbackNodePoolUpgrade", + Handler: _ClusterManager_RollbackNodePoolUpgrade_Handler, + }, + { + MethodName: "SetNodePoolManagement", + Handler: _ClusterManager_SetNodePoolManagement_Handler, + }, + { + MethodName: "SetLabels", + Handler: _ClusterManager_SetLabels_Handler, + }, + { + MethodName: "SetLegacyAbac", + Handler: _ClusterManager_SetLegacyAbac_Handler, + }, + { + MethodName: "StartIPRotation", + Handler: _ClusterManager_StartIPRotation_Handler, + }, + { + MethodName: "CompleteIPRotation", + Handler: _ClusterManager_CompleteIPRotation_Handler, + }, + { + MethodName: "SetNodePoolSize", + Handler: _ClusterManager_SetNodePoolSize_Handler, + }, + { + MethodName: "SetNetworkPolicy", + Handler: _ClusterManager_SetNetworkPolicy_Handler, + }, + { + MethodName: "SetMaintenancePolicy", + Handler: _ClusterManager_SetMaintenancePolicy_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/container/v1alpha1/cluster_service.proto", +} + +func init() { proto.RegisterFile("google/container/v1alpha1/cluster_service.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 4786 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x7c, 0x5d, 0x6c, 0x23, 0xd7, + 0x75, 0x7f, 0x46, 0xa2, 0x28, 0xf1, 0x90, 0xa2, 0xa8, 0xab, 0x2f, 0x2e, 0xed, 0xb5, 0xd7, 0x13, + 0xfb, 0xef, 0xf5, 0x6e, 0x2c, 0x79, 0xd7, 0x1b, 0xdb, 0xf1, 0x37, 0x45, 0xcd, 0x6a, 0x99, 0x95, + 0x48, 0x66, 0x28, 0xed, 0xc6, 0x1f, 0xc0, 0xfc, 0x47, 0x9c, 0x2b, 0x6a, 0x22, 0x72, 0x66, 0x3c, + 0x33, 0x5c, 0x5b, 0xeb, 0x3a, 0x6d, 0x52, 0xf7, 0xad, 0x6f, 0x01, 0x0a, 0xb4, 0x28, 0x10, 0xc0, + 0xe8, 0x57, 0x92, 0x02, 0x2d, 0x5a, 0x14, 0x48, 0x8b, 0x36, 0x45, 0xdb, 0x97, 0xa2, 0x28, 0xda, + 0x22, 0x79, 0x2e, 0xd0, 0x02, 0x7d, 0xe8, 0x5b, 0x91, 0xc7, 0x3e, 0xb4, 0x28, 0xee, 0xc7, 0x0c, + 0xef, 0x90, 0xc3, 0x21, 0x25, 0x45, 0x6b, 0xbf, 0x69, 0xce, 0xbd, 0xe7, 0xde, 0xdf, 0x39, 0x73, + 0xee, 0x39, 0xe7, 0x9e, 0x33, 0x14, 0x6c, 0xb4, 0x6d, 0xbb, 0xdd, 0xc1, 0x1b, 0x2d, 0xdb, 0xf2, + 0x75, 0xd3, 0xc2, 0xee, 0xc6, 0x83, 0x1b, 0x7a, 0xc7, 0x39, 0xd2, 0x6f, 0x6c, 0xb4, 0x3a, 0x3d, + 0xcf, 0xc7, 0xae, 0xe6, 0x61, 0xf7, 0x81, 0xd9, 0xc2, 0xeb, 0x8e, 0x6b, 0xfb, 0x36, 0xba, 0xc4, + 0x18, 0xd6, 0x43, 0x86, 0xf5, 0x80, 0xa1, 0xf4, 0x38, 0x5f, 0x4b, 0x77, 0xcc, 0x0d, 0xdd, 0xb2, + 0x6c, 0x5f, 0xf7, 0x4d, 0xdb, 0xf2, 0x18, 0x63, 0xe9, 0x31, 0x3e, 0x4a, 0x9f, 0x0e, 0x7a, 0x87, + 0x1b, 0xb8, 0xeb, 0xf8, 0x27, 0x6c, 0x50, 0xfe, 0xcf, 0x19, 0x80, 0x9a, 0x6d, 0xe0, 0x8a, 0x6d, + 0x1d, 0x9a, 0x6d, 0xf4, 0x14, 0xe4, 0xba, 0x7a, 0xeb, 0xc8, 0xb4, 0xb0, 0xe6, 0x9f, 0x38, 0xb8, + 0x28, 0x5d, 0x91, 0xae, 0x66, 0xd4, 0x2c, 0xa7, 0xed, 0x9d, 0x38, 0x18, 0x5d, 0x81, 0x9c, 0x61, + 0x7a, 0xc7, 0x9a, 0x67, 0x3e, 0xc4, 0x5a, 0xfb, 0xa0, 0x38, 0x75, 0x45, 0xba, 0x3a, 0xa3, 0x02, + 0xa1, 0x35, 0xcd, 0x87, 0x78, 0xfb, 0x80, 0x2c, 0x62, 0xeb, 0x3d, 0xff, 0x48, 0xf3, 0x5a, 0xb6, + 0x83, 0xbd, 0xe2, 0xf4, 0x95, 0x69, 0xb2, 0x08, 0xa5, 0x35, 0x29, 0x09, 0x3d, 0x0b, 0x0b, 0x5c, + 0x3a, 0x4d, 0x6f, 0xb5, 0xec, 0x9e, 0xe5, 0x17, 0x33, 0x74, 0xab, 0x3c, 0x27, 0x97, 0x19, 0x15, + 0xd5, 0x61, 0xae, 0x8b, 0x7d, 0xdd, 0xd0, 0x7d, 0xbd, 0x98, 0xba, 0x32, 0x7d, 0x35, 0x7b, 0xf3, + 0xc5, 0xf5, 0x91, 0x8a, 0x58, 0xef, 0x4b, 0xb2, 0xbe, 0xcb, 0xb9, 0x14, 0xcb, 0x77, 0x4f, 0xd4, + 0x70, 0x11, 0x74, 0x19, 0xc0, 0xec, 0xea, 0x6d, 0x2e, 0xdf, 0x0c, 0xdd, 0x34, 0x43, 0x29, 0x54, + 0xba, 0x2a, 0xa4, 0x3b, 0xfa, 0x01, 0xee, 0x78, 0xc5, 0x34, 0xdd, 0xed, 0xc6, 0x64, 0xbb, 0xed, + 0x50, 0x1e, 0xb6, 0x17, 0x5f, 0x00, 0xfd, 0x3f, 0x58, 0xe8, 0xd8, 0x2d, 0xbd, 0xa3, 0x79, 0x9e, + 0xa1, 0x31, 0x19, 0x67, 0xa9, 0xae, 0xe6, 0x29, 0xb9, 0xe9, 0x19, 0x15, 0x2a, 0x22, 0x82, 0x94, + 0xaf, 0xb7, 0xbd, 0xe2, 0x1c, 0x55, 0x13, 0xfd, 0x1b, 0x5d, 0x81, 0xac, 0xe3, 0x62, 0xf2, 0xa2, + 0xcc, 0x83, 0x0e, 0x2e, 0xc2, 0x15, 0xe9, 0xea, 0x9c, 0x2a, 0x92, 0x50, 0x03, 0x72, 0x7a, 0xab, + 0x85, 0x3b, 0xd8, 0xd5, 0x7d, 0xdb, 0xf5, 0x8a, 0x59, 0x0a, 0xf7, 0x2b, 0x09, 0x70, 0xcb, 0xfd, + 0xe9, 0x0c, 0xb5, 0x1a, 0x59, 0x01, 0x5d, 0x85, 0x42, 0xd7, 0xb4, 0xb4, 0x96, 0xd3, 0xd3, 0x9c, + 0x8e, 0xee, 0x1f, 0xda, 0x6e, 0xb7, 0x38, 0xcf, 0x5e, 0x4a, 0xd7, 0xb4, 0x2a, 0x4e, 0xaf, 0xc1, + 0xa9, 0xe8, 0x75, 0x48, 0x93, 0xc5, 0x7d, 0xaf, 0xb8, 0x40, 0x77, 0x7d, 0x7a, 0x8c, 0x92, 0xf6, + 0xc8, 0x64, 0x95, 0xf3, 0x94, 0x5e, 0x83, 0xf9, 0xc8, 0xcb, 0x41, 0x05, 0x98, 0x3e, 0xc6, 0x27, + 0xdc, 0xd6, 0xc8, 0x9f, 0x68, 0x19, 0x66, 0x1e, 0xe8, 0x9d, 0x1e, 0xa6, 0xc6, 0x95, 0x51, 0xd9, + 0xc3, 0xab, 0x53, 0xaf, 0x48, 0xa5, 0xaf, 0x41, 0x56, 0xd0, 0xf5, 0x69, 0x58, 0xe5, 0x9f, 0x49, + 0x90, 0x09, 0xd1, 0x4c, 0xca, 0x89, 0x2a, 0x90, 0xc6, 0x87, 0x87, 0xb8, 0xe5, 0x17, 0xa7, 0xaf, + 0x48, 0x57, 0xf3, 0x37, 0xaf, 0x4f, 0x22, 0xeb, 0xba, 0x42, 0x59, 0x54, 0xce, 0x2a, 0xbf, 0x03, + 0x69, 0x46, 0x41, 0xab, 0x80, 0x94, 0xdb, 0xb7, 0x95, 0xca, 0x9e, 0xb6, 0x5f, 0x6b, 0x36, 0x94, + 0x4a, 0xf5, 0x76, 0x55, 0xd9, 0x2a, 0x7c, 0x09, 0x2d, 0x40, 0xb6, 0x56, 0xd7, 0x9a, 0x95, 0x3b, + 0xca, 0xd6, 0xfe, 0x8e, 0x52, 0x90, 0xc8, 0xc4, 0x86, 0xaa, 0xdc, 0x56, 0x54, 0x4d, 0xa4, 0x4f, + 0xa1, 0x3c, 0x40, 0xad, 0xae, 0x29, 0xdf, 0x54, 0x2a, 0xfb, 0x7b, 0x4a, 0x61, 0x5a, 0xfe, 0xf1, + 0x14, 0xc0, 0xae, 0x4e, 0xfc, 0x45, 0xb9, 0xe7, 0x1f, 0xa1, 0x12, 0xcc, 0xf5, 0x3c, 0xec, 0x5a, + 0x7a, 0x37, 0x38, 0xbc, 0xe1, 0x33, 0x19, 0x73, 0x74, 0xcf, 0xfb, 0xd0, 0x76, 0x0d, 0x2e, 0x63, + 0xf8, 0x8c, 0x2c, 0xb8, 0xd4, 0xea, 0x98, 0xd8, 0xf2, 0xb5, 0x16, 0x76, 0x7d, 0xf3, 0xd0, 0x6c, + 0xe9, 0x3e, 0xd6, 0x5a, 0xd4, 0x4e, 0xa8, 0xe4, 0xd9, 0x9b, 0x37, 0x13, 0x24, 0xaf, 0x50, 0xde, + 0x4a, 0x9f, 0x95, 0x5b, 0xd8, 0x5a, 0x2b, 0x7e, 0x00, 0xdd, 0x82, 0xd5, 0xc0, 0xcd, 0xb5, 0x74, + 0x71, 0xcf, 0xa2, 0x41, 0x91, 0x2d, 0xf3, 0xd1, 0x8a, 0x2e, 0xf0, 0xa2, 0xe7, 0x01, 0x0d, 0xa3, + 0x2c, 0x62, 0xca, 0xb1, 0x38, 0xb4, 0x15, 0x39, 0xeb, 0x7c, 0x3a, 0x79, 0xd5, 0x87, 0xec, 0xac, + 0x33, 0xca, 0x5d, 0x7c, 0x22, 0x37, 0x61, 0x6d, 0x04, 0x6e, 0xf4, 0x0a, 0x14, 0x4d, 0xcf, 0xeb, + 0x61, 0x2d, 0x66, 0x3b, 0x89, 0x1e, 0xc6, 0x55, 0x3a, 0x3e, 0xc4, 0x2f, 0xff, 0xde, 0x34, 0xe4, + 0xca, 0x86, 0x61, 0x5b, 0x1e, 0x5f, 0xea, 0x7d, 0x58, 0x3a, 0xf2, 0x7d, 0x47, 0xeb, 0xd8, 0xba, + 0xa1, 0x1d, 0xe8, 0x1d, 0xdd, 0x6a, 0x99, 0x56, 0x9b, 0xae, 0x92, 0x7c, 0x5e, 0xef, 0xf8, 0xbe, + 0xb3, 0x63, 0xeb, 0xc6, 0x66, 0xc0, 0xa3, 0x2e, 0x1e, 0x0d, 0x92, 0xd0, 0x07, 0x50, 0x3a, 0xb2, + 0x5d, 0xf3, 0x21, 0x61, 0xef, 0x68, 0x8e, 0x6d, 0x68, 0x7a, 0xcf, 0xb7, 0xbd, 0x96, 0xde, 0x21, + 0x9b, 0x4c, 0xd1, 0x4d, 0x92, 0x3c, 0xe6, 0x9d, 0x90, 0xb9, 0x61, 0x1b, 0xe5, 0x3e, 0xab, 0x5a, + 0x3c, 0x1a, 0x31, 0x82, 0x74, 0x58, 0x3e, 0xee, 0x1d, 0x60, 0xd7, 0xc2, 0x3e, 0xf6, 0x34, 0x43, + 0xf7, 0x8e, 0x0e, 0x6c, 0xdd, 0x35, 0xb8, 0x95, 0xac, 0x27, 0x6c, 0x76, 0x37, 0x64, 0xdb, 0x0a, + 0xb8, 0xd4, 0xa5, 0xe3, 0x61, 0x22, 0x3a, 0x80, 0x15, 0x0b, 0xfb, 0x1f, 0xda, 0xee, 0xb1, 0xe6, + 0xd8, 0x1d, 0xb3, 0x75, 0x12, 0x58, 0x62, 0x6a, 0xec, 0x1e, 0x35, 0xc6, 0xd7, 0xa0, 0x6c, 0xdc, + 0x0a, 0x97, 0xac, 0x61, 0xa2, 0xbc, 0x01, 0x8b, 0x43, 0x1a, 0x26, 0x47, 0xc4, 0x30, 0x3d, 0xfd, + 0xa0, 0x83, 0x0d, 0xfe, 0x9e, 0xc3, 0x67, 0xf9, 0x25, 0x28, 0x8e, 0xd2, 0x56, 0x22, 0xdf, 0x0d, + 0x58, 0x8a, 0x11, 0x7c, 0x1c, 0x4b, 0x8c, 0x1c, 0x89, 0x2c, 0xff, 0x25, 0xc1, 0x13, 0x7d, 0x3f, + 0x40, 0x70, 0x62, 0x83, 0xaf, 0x11, 0x58, 0x62, 0x11, 0x66, 0xb1, 0x25, 0x72, 0x07, 0x8f, 0xc8, + 0x80, 0x6c, 0xcb, 0x34, 0x5c, 0xed, 0xa0, 0x63, 0xb7, 0x8e, 0xbd, 0xe2, 0x14, 0xf5, 0xea, 0x95, + 0x04, 0x2d, 0x27, 0xef, 0xb4, 0x5e, 0x31, 0x0d, 0x77, 0x93, 0xac, 0xa5, 0x42, 0x2b, 0xf8, 0xd3, + 0x2b, 0xed, 0x42, 0x26, 0x1c, 0x20, 0x49, 0x82, 0x61, 0x7a, 0x4e, 0x47, 0x3f, 0xd1, 0x04, 0x67, + 0x95, 0xe5, 0xb4, 0x1a, 0xf1, 0x57, 0xe4, 0xf8, 0x86, 0xa8, 0xb8, 0xc7, 0xca, 0x84, 0xeb, 0xc9, + 0x3f, 0x94, 0x60, 0x3e, 0xa2, 0x25, 0xb4, 0x0b, 0x73, 0x8e, 0x6b, 0x3f, 0x30, 0x0d, 0xec, 0xd2, + 0xf5, 0xf2, 0xc9, 0xe1, 0x5b, 0xe4, 0x5d, 0x6f, 0x70, 0x46, 0x35, 0x5c, 0x42, 0xd4, 0xd7, 0x54, + 0x44, 0x5f, 0xf2, 0x0b, 0x30, 0xd7, 0xe8, 0xcf, 0x5a, 0x6e, 0xa8, 0xf5, 0x7b, 0xd5, 0x2d, 0x45, + 0x1d, 0xf0, 0xe9, 0x00, 0xe9, 0x4a, 0x79, 0xa7, 0x5a, 0xa9, 0x17, 0x24, 0xf9, 0xcf, 0x52, 0x80, + 0xaa, 0x8d, 0x72, 0x87, 0x84, 0x7e, 0x92, 0x9c, 0x71, 0xc4, 0x4f, 0x43, 0xbe, 0xe7, 0x61, 0xcd, + 0x74, 0x34, 0xbd, 0x63, 0xea, 0x1e, 0xf6, 0xf8, 0x9b, 0xc9, 0xf5, 0x3c, 0x5c, 0x75, 0xca, 0x8c, + 0x86, 0xae, 0xc3, 0x62, 0xcb, 0xc5, 0xc4, 0x21, 0x7b, 0xbd, 0x03, 0x6e, 0xcb, 0x1c, 0x52, 0x81, + 0x0d, 0x34, 0x43, 0x3a, 0x4d, 0xad, 0xc2, 0x27, 0xa6, 0xdb, 0x69, 0x9e, 0x5a, 0x85, 0x64, 0xaa, + 0xde, 0x6b, 0xb0, 0x18, 0xb8, 0x60, 0xd3, 0x79, 0x70, 0x4b, 0x23, 0x9a, 0xa5, 0x07, 0x2c, 0xa3, + 0x2e, 0xf0, 0x81, 0xaa, 0xf3, 0xe0, 0x16, 0x79, 0x65, 0x04, 0xa7, 0x65, 0x1b, 0x58, 0x98, 0xc8, + 0x32, 0xa7, 0x1c, 0xa1, 0x86, 0xb3, 0xbe, 0x02, 0x88, 0xa7, 0x6f, 0x9e, 0x30, 0x33, 0x4d, 0x67, + 0x16, 0x82, 0x91, 0x70, 0xf6, 0x5b, 0xf0, 0x78, 0x3f, 0xd3, 0x6d, 0xd9, 0x96, 0xa1, 0xbb, 0x27, + 0x9a, 0xab, 0x5b, 0x6d, 0xcc, 0x50, 0xcf, 0x52, 0xbe, 0x4b, 0x7c, 0x4e, 0x33, 0x98, 0xa2, 0x92, + 0x19, 0x54, 0x80, 0x32, 0x5c, 0x0e, 0xb7, 0x8b, 0x5d, 0x61, 0x8e, 0xae, 0x50, 0x0a, 0x26, 0xc5, + 0x2c, 0xf1, 0x55, 0x58, 0x1b, 0xd2, 0x01, 0xb7, 0xb7, 0x4c, 0x24, 0x0e, 0x05, 0xa8, 0x99, 0xf1, + 0x6e, 0xc0, 0x72, 0x54, 0x1d, 0x9c, 0x07, 0x58, 0x24, 0x12, 0x95, 0xc2, 0x18, 0x5e, 0x86, 0xe2, + 0xb0, 0x66, 0x38, 0x53, 0x96, 0x32, 0xad, 0x0c, 0xea, 0x87, 0x19, 0xf9, 0x8b, 0xb0, 0xd6, 0xb0, + 0x8d, 0x26, 0x6e, 0xf5, 0x5c, 0xd3, 0x3f, 0x89, 0x78, 0x83, 0x91, 0xc7, 0x59, 0xfe, 0xb5, 0x05, + 0x98, 0xad, 0x30, 0xdc, 0x24, 0xbb, 0x14, 0xce, 0x17, 0xfd, 0x9b, 0x64, 0x97, 0x06, 0xf6, 0x5a, + 0xae, 0xe9, 0x10, 0x53, 0xe4, 0x27, 0x4b, 0x24, 0x91, 0x37, 0x69, 0x5a, 0xa6, 0x6f, 0xea, 0x1d, + 0x8d, 0x0a, 0xca, 0xd2, 0xd7, 0x69, 0x9a, 0xbe, 0x16, 0xf8, 0x08, 0x4b, 0x7f, 0x49, 0x06, 0x7b, + 0x1b, 0xb2, 0x7c, 0x96, 0xe0, 0xa4, 0x9f, 0x99, 0x28, 0x73, 0x56, 0xc1, 0xea, 0xdf, 0x3e, 0x6e, + 0x43, 0xb6, 0x4b, 0x1d, 0x0b, 0x09, 0x62, 0x47, 0xd4, 0xc4, 0x92, 0xd7, 0xe9, 0xbb, 0x21, 0x15, + 0xba, 0xfd, 0x24, 0xe8, 0x59, 0x92, 0x79, 0xb7, 0xdb, 0xa6, 0xd5, 0x0e, 0xee, 0x50, 0xdc, 0x08, + 0xf3, 0x9c, 0xdc, 0x64, 0x54, 0x92, 0x4f, 0x74, 0x6d, 0xcb, 0xf4, 0x6d, 0x57, 0x9c, 0xcb, 0x0c, + 0x6f, 0xb1, 0x3f, 0x12, 0x4c, 0x2f, 0xc2, 0x6c, 0x70, 0xfa, 0x98, 0x69, 0x05, 0x8f, 0xf1, 0x67, + 0x29, 0x13, 0x7f, 0x96, 0x76, 0x60, 0x5e, 0xa7, 0x09, 0x42, 0xa0, 0x2f, 0xa0, 0x72, 0x3e, 0x9b, + 0x94, 0xba, 0x0b, 0x09, 0x85, 0x9a, 0xd3, 0xc5, 0xf4, 0xe2, 0x09, 0x00, 0xc1, 0x29, 0x30, 0x5b, + 0x12, 0x28, 0x68, 0x13, 0xa8, 0x86, 0x35, 0xc7, 0xb6, 0x3b, 0x5e, 0x31, 0x47, 0x3d, 0xfb, 0x97, + 0xc7, 0xbc, 0x9a, 0x86, 0x6d, 0x77, 0xd4, 0x8c, 0xc5, 0xff, 0xf2, 0xd0, 0xe3, 0x90, 0x09, 0xfc, + 0x96, 0x57, 0x9c, 0xa7, 0xd7, 0x94, 0x3e, 0x01, 0xbd, 0x04, 0x6b, 0xcc, 0xf0, 0x34, 0x21, 0x2d, + 0xa0, 0xab, 0x15, 0xf3, 0xd4, 0x2e, 0x57, 0xd8, 0x70, 0x3f, 0x08, 0x96, 0xc9, 0x20, 0xaa, 0x43, + 0x3e, 0x1a, 0xe4, 0x8b, 0x4b, 0x54, 0x11, 0x57, 0x27, 0xf5, 0xd9, 0xea, 0x7c, 0x24, 0xae, 0x23, + 0x0d, 0x96, 0xa9, 0x23, 0x0d, 0xa0, 0x05, 0xcb, 0x2e, 0xd3, 0x65, 0x9f, 0x4f, 0x58, 0x76, 0xd8, + 0x33, 0xab, 0xc8, 0x74, 0x86, 0xbc, 0xf5, 0xa7, 0x12, 0x3c, 0x25, 0x18, 0x28, 0x0b, 0x7d, 0x1a, + 0x07, 0x11, 0xbe, 0xce, 0x55, 0xba, 0xdd, 0xd7, 0xce, 0x1c, 0x3d, 0xd5, 0x27, 0xba, 0xc9, 0x71, + 0xfc, 0x3d, 0x40, 0x5d, 0x72, 0xcb, 0xc0, 0x96, 0x6e, 0xb5, 0x70, 0x20, 0xe5, 0xda, 0xd8, 0x84, + 0x72, 0xb7, 0xcf, 0xc4, 0x85, 0x5c, 0xec, 0x0e, 0x92, 0x90, 0x0d, 0x25, 0x92, 0x45, 0x7a, 0xdc, + 0xe3, 0x0c, 0xe4, 0x5f, 0x97, 0xc6, 0xde, 0x04, 0x46, 0x78, 0x2b, 0x75, 0xcd, 0x19, 0xe1, 0xc6, + 0x1e, 0x83, 0x8c, 0x87, 0x3b, 0x87, 0x5a, 0xc7, 0xb4, 0x8e, 0x79, 0xf2, 0x3f, 0x47, 0x08, 0x3b, + 0xa6, 0x75, 0x4c, 0xbc, 0xd7, 0x43, 0xdb, 0x0a, 0x52, 0x7c, 0xfa, 0x37, 0xc9, 0x82, 0xb0, 0x65, + 0x38, 0xb6, 0x69, 0xf9, 0x3c, 0xa7, 0x0f, 0x9f, 0x89, 0x2d, 0x06, 0x7e, 0x2b, 0x38, 0x8f, 0x0f, + 0xb0, 0xeb, 0x11, 0x2f, 0xd7, 0x66, 0x6e, 0x96, 0x0f, 0x73, 0xf7, 0x78, 0x8f, 0x0d, 0xd2, 0xeb, + 0x48, 0xcf, 0x75, 0x49, 0xaa, 0xcf, 0x5f, 0x70, 0xc0, 0x76, 0xc4, 0xc3, 0x00, 0x1b, 0x65, 0x6f, + 0x2e, 0xe0, 0x7a, 0x01, 0x02, 0x3a, 0xf3, 0x92, 0x01, 0x8f, 0x49, 0x79, 0x10, 0x1f, 0x23, 0x27, + 0x2a, 0xe0, 0x78, 0x12, 0xb2, 0x3c, 0x92, 0xfb, 0x66, 0x17, 0x17, 0xbf, 0xc5, 0x8e, 0x2b, 0x23, + 0xed, 0x99, 0x34, 0xa6, 0xa5, 0x3d, 0x5f, 0xf7, 0x7b, 0x5e, 0xf1, 0x98, 0x26, 0x30, 0xcf, 0x25, + 0x5e, 0xba, 0xa8, 0x0c, 0xeb, 0x4d, 0xca, 0xa0, 0x72, 0x46, 0xf4, 0x0c, 0xe4, 0xd9, 0x5f, 0x5a, + 0x17, 0x7b, 0x9e, 0xde, 0xc6, 0xc5, 0x0e, 0xdd, 0x66, 0x9e, 0x51, 0x77, 0x19, 0x11, 0x3d, 0x0f, + 0x4b, 0x03, 0x31, 0xcc, 0x33, 0x1f, 0xe2, 0x62, 0x97, 0xf9, 0x78, 0x31, 0x84, 0x35, 0xcd, 0x87, + 0x78, 0x44, 0x6c, 0xb7, 0x46, 0xc4, 0xf6, 0x75, 0x58, 0x32, 0x2d, 0xcf, 0xa7, 0xf6, 0xd9, 0x76, + 0xed, 0x9e, 0xa3, 0xf5, 0xdc, 0x8e, 0x57, 0xb4, 0xa9, 0xef, 0x58, 0x0c, 0x86, 0xb6, 0xc9, 0xc8, + 0xbe, 0xdb, 0xf1, 0xc8, 0xea, 0x11, 0x4d, 0xb2, 0x78, 0xe3, 0x30, 0x2c, 0x82, 0x1e, 0x59, 0xbc, + 0x79, 0x12, 0xb2, 0xf8, 0x23, 0xc7, 0x74, 0xb9, 0x16, 0x3f, 0x60, 0x5a, 0x64, 0x24, 0xaa, 0xc5, + 0x12, 0xcc, 0x05, 0x47, 0xb7, 0xe8, 0x32, 0x13, 0x09, 0x9e, 0x65, 0x13, 0xd2, 0x4c, 0x61, 0xe4, + 0x8a, 0xdd, 0xdc, 0x2b, 0xef, 0xed, 0x37, 0x07, 0xf2, 0xb6, 0x02, 0xe4, 0x68, 0x46, 0xd7, 0xac, + 0xd6, 0x6b, 0xd5, 0xda, 0x76, 0x41, 0x42, 0x59, 0x98, 0x55, 0xf7, 0x6b, 0xf4, 0x61, 0x8a, 0x5c, + 0xd5, 0x55, 0xa5, 0x52, 0xaf, 0x55, 0xaa, 0x3b, 0x84, 0x30, 0x8d, 0x72, 0x30, 0xd7, 0xdc, 0xab, + 0x37, 0x1a, 0xe4, 0x29, 0x85, 0x32, 0x30, 0xa3, 0xa8, 0x6a, 0x5d, 0x2d, 0xcc, 0xc8, 0xbf, 0x9f, + 0x86, 0x79, 0xfe, 0x92, 0xf6, 0x1d, 0x83, 0xdc, 0x48, 0x5f, 0x80, 0x65, 0x03, 0x7b, 0xa6, 0x4b, + 0xdc, 0x86, 0x68, 0x31, 0x2c, 0xed, 0x42, 0x7c, 0x4c, 0xb4, 0x98, 0xd7, 0xa1, 0x14, 0x70, 0xc4, + 0x84, 0x2a, 0x96, 0x85, 0x15, 0xf9, 0x8c, 0xdd, 0xa1, 0x88, 0xf5, 0x1e, 0xac, 0x04, 0xdc, 0xd1, + 0x98, 0x93, 0x3e, 0x5d, 0xcc, 0x59, 0xe2, 0xab, 0x44, 0x6e, 0xb6, 0x1b, 0x03, 0xc2, 0x90, 0x10, + 0xa3, 0x99, 0x46, 0x10, 0x3f, 0x05, 0x61, 0x48, 0x18, 0xa9, 0x1a, 0xe4, 0x2d, 0x07, 0x0c, 0x42, + 0x0d, 0x8e, 0x85, 0xd2, 0x02, 0x1f, 0xa9, 0x86, 0xa5, 0xb8, 0x0f, 0xe0, 0xf2, 0xf0, 0xf2, 0xe2, + 0xed, 0x36, 0x33, 0xfe, 0x32, 0xc8, 0xf7, 0x16, 0x2f, 0xb6, 0xa5, 0x01, 0x5c, 0xe2, 0x35, 0xee, + 0x3a, 0x04, 0xa8, 0xb5, 0x7e, 0xc0, 0x03, 0x6a, 0xb4, 0x01, 0xbe, 0x9d, 0x30, 0xee, 0x7d, 0x4f, + 0x82, 0xe7, 0xc2, 0x57, 0x33, 0x36, 0x2a, 0xe4, 0xce, 0x1b, 0x15, 0x9e, 0x09, 0x5e, 0x72, 0x72, + 0x70, 0xf8, 0x36, 0xc8, 0x01, 0xa8, 0x04, 0x3f, 0x9e, 0x3f, 0xb3, 0x1f, 0x7f, 0x82, 0xaf, 0x3e, + 0x2a, 0x2b, 0xbd, 0x05, 0xab, 0x03, 0x4a, 0x09, 0x6c, 0x9c, 0x17, 0x76, 0x22, 0x62, 0x70, 0x2b, + 0x97, 0x7f, 0x9e, 0x86, 0x4c, 0xdd, 0xc1, 0x2e, 0x55, 0x6d, 0x6c, 0xce, 0x1a, 0x44, 0x82, 0x29, + 0x21, 0x12, 0x34, 0x20, 0x6f, 0x07, 0x4c, 0xcc, 0x96, 0xa6, 0xc7, 0x3a, 0xcd, 0x70, 0x97, 0x75, + 0x62, 0x64, 0xea, 0x7c, 0xb8, 0x00, 0xb5, 0xb9, 0x4a, 0xe8, 0x7e, 0x53, 0x63, 0xab, 0x7d, 0xfd, + 0x95, 0x06, 0x1c, 0xf0, 0x2a, 0xa4, 0x0d, 0xec, 0xeb, 0x66, 0x87, 0x9b, 0x36, 0x7f, 0x8a, 0x71, + 0xcc, 0x33, 0x71, 0x8e, 0x39, 0x12, 0x10, 0xd3, 0x03, 0x01, 0xf1, 0x49, 0xc8, 0xfa, 0xba, 0xdb, + 0xc6, 0x3e, 0x1b, 0x66, 0x47, 0x0d, 0x18, 0x89, 0x4e, 0x10, 0x5d, 0x5f, 0x26, 0xea, 0xfa, 0xc8, + 0x85, 0xda, 0xf3, 0x75, 0xd7, 0x67, 0x6e, 0x93, 0x5d, 0x56, 0x32, 0x94, 0x42, 0xbd, 0xe6, 0x25, + 0x1a, 0x58, 0xd9, 0x20, 0x4b, 0x24, 0x67, 0xb1, 0x65, 0x90, 0x21, 0x59, 0x1d, 0xeb, 0x34, 0xb3, + 0x30, 0xdb, 0x50, 0x6a, 0x5b, 0x31, 0xfe, 0x72, 0x0e, 0x52, 0x5b, 0xf5, 0x9a, 0xc2, 0x1c, 0x65, + 0x79, 0xb3, 0xae, 0xee, 0x51, 0x47, 0x29, 0xff, 0xcf, 0x14, 0xa4, 0xa8, 0xd2, 0x97, 0xa1, 0xb0, + 0xf7, 0x4e, 0x43, 0x19, 0x58, 0x10, 0x41, 0xbe, 0xa2, 0x2a, 0xe5, 0x3d, 0x45, 0xab, 0xec, 0xec, + 0x37, 0xf7, 0x14, 0xb5, 0x20, 0x11, 0xda, 0x96, 0xb2, 0xa3, 0x08, 0xb4, 0x29, 0x42, 0xdb, 0x6f, + 0x6c, 0xab, 0xe5, 0x2d, 0x45, 0xdb, 0x2d, 0x53, 0xda, 0x34, 0x5a, 0x84, 0xf9, 0x80, 0x56, 0xab, + 0x6f, 0x29, 0xcd, 0x42, 0x8a, 0x4c, 0x53, 0x95, 0x46, 0xb9, 0xaa, 0x86, 0xac, 0x33, 0x8c, 0x75, + 0x4b, 0xdc, 0x22, 0x4d, 0xc0, 0xf0, 0x6d, 0x09, 0xa7, 0xd6, 0xa8, 0xd7, 0x77, 0x0a, 0xb3, 0x84, + 0xca, 0x37, 0xee, 0x53, 0xe7, 0xd0, 0xe3, 0x50, 0x6c, 0x2a, 0x7b, 0x7d, 0x92, 0xb6, 0x5b, 0xae, + 0x95, 0xb7, 0x95, 0x5d, 0xa5, 0xb6, 0x57, 0xc8, 0xa0, 0x15, 0x58, 0x2c, 0xef, 0xef, 0xd5, 0x35, + 0xbe, 0x2d, 0x03, 0x02, 0x44, 0x81, 0x94, 0x1c, 0x05, 0x98, 0x45, 0x79, 0x00, 0xb2, 0xd8, 0x4e, + 0x79, 0x53, 0xd9, 0x69, 0x16, 0x72, 0x68, 0x09, 0x16, 0xc8, 0x33, 0x93, 0x49, 0x2b, 0xef, 0xef, + 0xdd, 0x29, 0xcc, 0x53, 0xed, 0x47, 0x76, 0x6c, 0x56, 0xdf, 0x55, 0x0a, 0xf9, 0x90, 0xae, 0xec, + 0xdd, 0xaf, 0xab, 0x77, 0xb5, 0x46, 0x7d, 0xa7, 0x5a, 0x79, 0xa7, 0xb0, 0x80, 0x4a, 0xb0, 0xca, + 0x16, 0xa9, 0xd6, 0xf6, 0x94, 0x5a, 0xb9, 0x56, 0x51, 0x82, 0xb1, 0x82, 0xfc, 0x7d, 0x09, 0x96, + 0x2b, 0x34, 0xf3, 0xe0, 0x31, 0x4a, 0xc5, 0x1f, 0xf4, 0xb0, 0xe7, 0x13, 0x33, 0x71, 0x5c, 0xfb, + 0x5b, 0xb8, 0xe5, 0x13, 0x6f, 0xce, 0x0e, 0x61, 0x86, 0x53, 0xaa, 0x46, 0xec, 0x49, 0x7c, 0x1d, + 0x66, 0x79, 0xbe, 0xc5, 0xcb, 0x80, 0xf2, 0xf8, 0xbc, 0x45, 0x0d, 0x58, 0xc8, 0x81, 0x71, 0x74, + 0x12, 0xe2, 0xf9, 0x81, 0xe0, 0x4f, 0xf2, 0x09, 0x2c, 0x6e, 0x63, 0xff, 0xfc, 0xe8, 0x68, 0x1d, + 0x98, 0xdf, 0xce, 0x0c, 0x5e, 0x0d, 0xc9, 0x04, 0xd7, 0x32, 0x23, 0x74, 0x37, 0x33, 0x7d, 0x77, + 0x23, 0xff, 0x44, 0x82, 0x65, 0x16, 0xb3, 0x2f, 0x7c, 0xfb, 0xb7, 0x21, 0xdd, 0xa3, 0x3b, 0xf1, + 0x8b, 0xf3, 0xd5, 0xf1, 0xaa, 0x63, 0xc8, 0x54, 0xce, 0x17, 0x2b, 0xc0, 0xbf, 0x4b, 0xb0, 0xc2, + 0xa6, 0x85, 0x37, 0xba, 0x0b, 0x93, 0xe0, 0x0a, 0xe4, 0x22, 0x09, 0x00, 0xcb, 0x66, 0xc0, 0xea, + 0x47, 0xfe, 0xa7, 0xf8, 0x8c, 0x20, 0x16, 0x30, 0xa4, 0xb4, 0x6a, 0x10, 0x24, 0x3a, 0xd1, 0xc6, + 0x5c, 0x7a, 0xb0, 0x31, 0x17, 0xc8, 0x38, 0x27, 0xc8, 0xf8, 0xdf, 0x12, 0x5c, 0x6e, 0x62, 0x3f, + 0x2e, 0xca, 0x7f, 0x8e, 0xb2, 0x36, 0x20, 0x2b, 0x66, 0x29, 0x33, 0x67, 0xca, 0x52, 0xc4, 0x25, + 0x42, 0xd9, 0xd3, 0x82, 0xec, 0x3f, 0x90, 0xa0, 0xd8, 0xc4, 0xfe, 0x4e, 0xa4, 0xa0, 0x71, 0x71, + 0x62, 0xc7, 0x94, 0x54, 0x52, 0xb1, 0x25, 0x95, 0x38, 0x5b, 0xfc, 0x13, 0x09, 0x1e, 0x6b, 0x62, + 0x7f, 0x28, 0x3d, 0xbd, 0x38, 0xb8, 0xf1, 0x85, 0x9d, 0xd4, 0xa8, 0xc2, 0x4e, 0x9c, 0x82, 0xff, + 0x51, 0x82, 0xd5, 0x26, 0xf6, 0x23, 0x69, 0xf0, 0x85, 0xe1, 0x1d, 0xaa, 0x09, 0xa5, 0xce, 0x53, + 0x13, 0x8a, 0x13, 0xe7, 0x37, 0x25, 0x58, 0xa2, 0xf6, 0xc2, 0xd3, 0xd7, 0x8b, 0x93, 0x25, 0x52, + 0x2d, 0x4a, 0x0d, 0x56, 0x8b, 0xe2, 0xb0, 0x7d, 0x26, 0xc1, 0x12, 0xf3, 0x55, 0x2c, 0x2b, 0xbc, + 0x38, 0x6c, 0xcf, 0x40, 0x7e, 0x20, 0x2b, 0x65, 0x36, 0x31, 0xdf, 0x8d, 0x5c, 0xec, 0x03, 0x90, + 0xb3, 0x02, 0xc8, 0x7f, 0x9d, 0x82, 0x65, 0x62, 0xc4, 0xfd, 0x92, 0xe3, 0x85, 0xa1, 0xac, 0x41, + 0x5a, 0x6f, 0xf9, 0x01, 0xba, 0xfc, 0xcd, 0x97, 0x12, 0xcc, 0x20, 0x0e, 0xd2, 0x7a, 0x99, 0x72, + 0xab, 0x7c, 0x15, 0xf4, 0x46, 0x18, 0x61, 0x4e, 0x55, 0x52, 0x1d, 0x0c, 0x2f, 0xa2, 0x36, 0x1a, + 0x90, 0x66, 0x9b, 0x90, 0x5c, 0x6f, 0xbf, 0x76, 0xb7, 0x56, 0xbf, 0x5f, 0x63, 0x57, 0x67, 0x92, + 0x6f, 0x34, 0xca, 0xcd, 0xe6, 0xfd, 0xba, 0xba, 0x55, 0x90, 0x48, 0x16, 0xb4, 0xad, 0xd4, 0x14, + 0x95, 0x64, 0x54, 0x21, 0x79, 0x2a, 0x98, 0xb8, 0xdf, 0x54, 0xd4, 0x5a, 0x79, 0x57, 0x29, 0x4c, + 0xcb, 0xbf, 0x04, 0xcb, 0x5b, 0xb8, 0x83, 0x1f, 0x41, 0xc0, 0x0d, 0xe4, 0x49, 0x09, 0xf2, 0xfc, + 0x7f, 0x58, 0xda, 0x31, 0xbd, 0x20, 0xd7, 0x38, 0xcf, 0xe9, 0xe8, 0x27, 0x33, 0xa9, 0x48, 0x32, + 0xf3, 0x31, 0x2c, 0x47, 0x77, 0xf0, 0x1c, 0xdb, 0xf2, 0x30, 0x7a, 0x13, 0xe6, 0x38, 0x34, 0xaf, + 0x28, 0xd1, 0xf2, 0xec, 0x24, 0xb9, 0x53, 0xc8, 0x83, 0xbe, 0x0c, 0xf3, 0x5d, 0xd3, 0xf3, 0x88, + 0x9f, 0x23, 0xfb, 0xb3, 0xee, 0x5d, 0x46, 0xcd, 0x71, 0xe2, 0xbb, 0x84, 0x26, 0xff, 0x32, 0x2c, + 0x6d, 0x63, 0x3f, 0xbc, 0xb1, 0x9c, 0x43, 0xbc, 0xa7, 0x20, 0xd7, 0xbf, 0x73, 0x85, 0xda, 0xcd, + 0x86, 0xb4, 0x11, 0xf9, 0xd4, 0x01, 0xac, 0x10, 0xe9, 0x43, 0x04, 0x17, 0xa1, 0xe1, 0xef, 0x4a, + 0xb0, 0x5a, 0xd1, 0xad, 0x16, 0xee, 0x3c, 0x62, 0x41, 0x45, 0x43, 0xfa, 0x55, 0x09, 0x56, 0x07, + 0x25, 0xe5, 0x6f, 0x7a, 0x0b, 0x20, 0xe4, 0x0e, 0xde, 0xf5, 0xd3, 0x93, 0x5c, 0x30, 0x55, 0x81, + 0x6f, 0xb2, 0xf7, 0xad, 0xc1, 0xea, 0x36, 0xf6, 0x49, 0x78, 0xc3, 0xee, 0xb9, 0x63, 0x57, 0x9c, + 0x98, 0x9f, 0x4e, 0x41, 0x4e, 0x5c, 0x1e, 0xbd, 0x04, 0x6b, 0x06, 0x3e, 0xd4, 0x7b, 0x1d, 0x7f, + 0xa8, 0xf2, 0xca, 0x36, 0x59, 0xe1, 0xc3, 0x03, 0x95, 0xd7, 0x75, 0x58, 0x7a, 0xa0, 0x77, 0xcc, + 0x68, 0x3d, 0x2c, 0xf8, 0x66, 0x6c, 0x91, 0x0e, 0x09, 0xe5, 0x30, 0x8f, 0xd5, 0x90, 0xd8, 0x3e, + 0x42, 0xba, 0x98, 0x0a, 0x6a, 0x48, 0x74, 0xa4, 0x5f, 0x43, 0xba, 0x06, 0x6c, 0x09, 0x61, 0xae, + 0x57, 0x9c, 0xa1, 0x6b, 0x2f, 0xd0, 0x81, 0x70, 0xaa, 0x87, 0x6e, 0xc2, 0x0a, 0x9b, 0x1b, 0x8d, + 0x10, 0xec, 0x4b, 0xb0, 0x8c, 0xca, 0x60, 0x46, 0xca, 0x16, 0x9e, 0xfc, 0x77, 0x12, 0xac, 0xb0, + 0x3b, 0xd4, 0xc5, 0x67, 0xd9, 0x6f, 0x43, 0x26, 0xcc, 0x3c, 0x79, 0x7e, 0x30, 0x51, 0x23, 0x67, + 0x2e, 0xc8, 0x4d, 0x85, 0x83, 0x93, 0x8e, 0x1c, 0x9c, 0xef, 0x4b, 0xb0, 0xc2, 0x7c, 0xef, 0x17, + 0xe1, 0xae, 0x10, 0x97, 0x21, 0xfc, 0x8a, 0xc4, 0xbc, 0x67, 0x80, 0xef, 0x02, 0xd3, 0x97, 0x51, + 0x97, 0xd1, 0xdf, 0x96, 0x00, 0x6d, 0xf7, 0x2f, 0x1b, 0x5f, 0x34, 0x0d, 0xfd, 0x6f, 0x0a, 0xe6, + 0x02, 0x6c, 0xb1, 0x05, 0xb4, 0x37, 0x20, 0xcd, 0x73, 0xcb, 0xa9, 0xd3, 0xf4, 0x67, 0x39, 0xd3, + 0x29, 0x3b, 0xc2, 0x03, 0x77, 0xa0, 0xd4, 0xf9, 0xef, 0x40, 0x55, 0x80, 0xae, 0x6e, 0xe9, 0x6d, + 0xdc, 0x0d, 0x5e, 0x4d, 0x36, 0xb1, 0xce, 0x47, 0x16, 0xdc, 0x0d, 0x19, 0x54, 0x81, 0x39, 0xb9, + 0xe3, 0x54, 0x84, 0xd9, 0xc0, 0x6f, 0xb1, 0xa6, 0x53, 0xf0, 0x38, 0xaa, 0xa7, 0x71, 0x38, 0xaa, + 0xa7, 0xb1, 0x19, 0xd6, 0x12, 0xdb, 0x34, 0x8b, 0xbb, 0x36, 0x81, 0xf8, 0xe3, 0x7b, 0x39, 0x47, + 0x31, 0x25, 0x43, 0xf9, 0x3b, 0xd2, 0x79, 0x9b, 0x1a, 0xab, 0x80, 0xf8, 0x83, 0x76, 0xbf, 0xba, + 0x77, 0x47, 0x63, 0x2d, 0x8c, 0xe9, 0xc1, 0x66, 0x47, 0x2a, 0xd2, 0xec, 0x98, 0xe9, 0x37, 0x3b, + 0xd2, 0xf2, 0x1f, 0x4a, 0x90, 0x8f, 0x2a, 0x9d, 0x84, 0x50, 0xf2, 0x0a, 0xb5, 0x9e, 0xd3, 0x76, + 0x75, 0x23, 0xf8, 0x72, 0x8e, 0xbe, 0xd6, 0x7d, 0x46, 0x42, 0x4f, 0x32, 0x43, 0xd1, 0x5c, 0xec, + 0xe8, 0xa6, 0xcb, 0x3f, 0x6a, 0x01, 0x42, 0x52, 0x29, 0x05, 0xdd, 0x83, 0x05, 0xce, 0xae, 0xd9, + 0x4e, 0x50, 0x90, 0x1f, 0xd7, 0xcf, 0x2d, 0xf7, 0x77, 0xa8, 0x33, 0x26, 0x35, 0xdf, 0x8b, 0x3c, + 0xcb, 0x5d, 0x40, 0xc3, 0xb3, 0xd0, 0x57, 0x61, 0x4d, 0x44, 0xac, 0x09, 0xe5, 0x52, 0x76, 0x96, + 0x96, 0x05, 0xf0, 0xcd, 0xb0, 0x72, 0x3a, 0xf6, 0x83, 0x0a, 0xf9, 0x1d, 0x58, 0x1c, 0x6a, 0xbf, + 0xa2, 0x2d, 0x48, 0x7f, 0x68, 0x5a, 0x86, 0xfd, 0xe1, 0x04, 0x5f, 0x03, 0x0a, 0xdc, 0xf7, 0x29, + 0x8f, 0xca, 0x79, 0xe5, 0x5f, 0x97, 0x22, 0x6b, 0xb3, 0x51, 0xd4, 0x85, 0xa2, 0xa1, 0x9b, 0x9d, + 0x13, 0x4d, 0x6c, 0x15, 0xf3, 0xdd, 0x98, 0x03, 0x48, 0xfa, 0x36, 0x6a, 0x8b, 0xb0, 0x0e, 0x2d, + 0x7a, 0xe7, 0x4b, 0xea, 0xaa, 0x11, 0x3b, 0xb2, 0x39, 0x07, 0x69, 0xd6, 0x61, 0x90, 0x9b, 0xb0, + 0x1a, 0xcf, 0x3d, 0x50, 0x7e, 0x9e, 0x1a, 0x2c, 0x3f, 0x97, 0x60, 0xce, 0xe8, 0xb1, 0x2c, 0x87, + 0x3b, 0xc5, 0xf0, 0x59, 0xfe, 0xb9, 0x04, 0x8f, 0x0b, 0x95, 0x1e, 0xe1, 0x60, 0x7f, 0x8e, 0x6e, + 0xf8, 0x17, 0xe8, 0x92, 0xe2, 0xae, 0x58, 0x7f, 0xcd, 0x0a, 0x10, 0x81, 0xcc, 0x4d, 0xf3, 0x21, + 0xfe, 0x3c, 0xa5, 0xbd, 0xcc, 0x3f, 0x24, 0x61, 0x8e, 0x7f, 0x86, 0x3a, 0xfe, 0x8c, 0x15, 0x7a, + 0xfc, 0x38, 0x09, 0xfe, 0x40, 0x82, 0x27, 0x54, 0xbb, 0xd3, 0x39, 0xd0, 0x5b, 0xc7, 0x81, 0x18, + 0xfc, 0xec, 0x7c, 0xd1, 0xc2, 0xe7, 0x7b, 0xec, 0x7e, 0x22, 0xe4, 0x17, 0x3c, 0x69, 0x8f, 0x7e, + 0x3f, 0x23, 0x9d, 0xe5, 0xfb, 0x19, 0xf9, 0x63, 0x58, 0x8a, 0xeb, 0x36, 0x8e, 0xfe, 0x1e, 0xf3, + 0x69, 0xc8, 0x77, 0x4d, 0x4b, 0x0c, 0xb4, 0xec, 0x57, 0x16, 0xb9, 0xae, 0x69, 0xf5, 0x83, 0x2c, + 0x99, 0xa5, 0x7f, 0x34, 0x1c, 0x8e, 0x73, 0x5d, 0xfd, 0xa3, 0x70, 0x96, 0xfc, 0xd3, 0x29, 0x28, + 0x34, 0xb1, 0xcf, 0xbe, 0x9a, 0xbf, 0x38, 0xb5, 0x1f, 0xc1, 0x82, 0x8b, 0x3d, 0xbb, 0xe7, 0xb6, + 0xb0, 0xc6, 0x7f, 0x41, 0xc1, 0x7e, 0xaf, 0xf1, 0x56, 0x72, 0xf1, 0x22, 0x82, 0x6b, 0x5d, 0xe5, + 0x4b, 0x88, 0xbf, 0xa7, 0xc8, 0xbb, 0x11, 0x22, 0xba, 0x0e, 0x8b, 0x74, 0x03, 0xed, 0xd0, 0xb4, + 0xda, 0xd8, 0x75, 0x5c, 0x33, 0xcc, 0xd5, 0x0a, 0x74, 0xe0, 0x76, 0x9f, 0x1e, 0x67, 0x96, 0xa5, + 0x32, 0x2c, 0xc5, 0xec, 0x73, 0xaa, 0xdf, 0x12, 0xfc, 0x86, 0x44, 0x8b, 0x41, 0x3b, 0xb8, 0xad, + 0xb7, 0x4e, 0xca, 0x07, 0x7a, 0xeb, 0xe2, 0x14, 0x2b, 0x58, 0x49, 0x2a, 0x6a, 0x25, 0x71, 0x76, + 0xfc, 0x6d, 0x58, 0xa5, 0x61, 0xa9, 0xda, 0x50, 0xf9, 0xcf, 0x80, 0x2e, 0xbe, 0x8e, 0x22, 0xee, + 0xff, 0x1d, 0x09, 0x2e, 0x55, 0xec, 0xae, 0x43, 0x2e, 0x13, 0x8f, 0x12, 0x83, 0xe8, 0x76, 0x8e, + 0x61, 0x71, 0xe8, 0xb7, 0x2e, 0xc4, 0x6a, 0x84, 0x5f, 0xbb, 0xf0, 0xf3, 0x42, 0x10, 0x4c, 0xab, + 0x05, 0x5d, 0x9c, 0x4d, 0x4e, 0xd6, 0x73, 0x20, 0xd2, 0xd8, 0x15, 0x93, 0x81, 0x5a, 0x10, 0xe8, + 0xe4, 0xda, 0x28, 0xff, 0x8b, 0x04, 0x6b, 0xc4, 0x4b, 0x47, 0x3e, 0x4c, 0xbb, 0x30, 0x71, 0x87, + 0xbf, 0x99, 0x4b, 0x9d, 0xef, 0x9b, 0xb9, 0xb8, 0x77, 0xf8, 0x6f, 0xbc, 0x5c, 0x3f, 0xf4, 0xb9, + 0xd8, 0x85, 0x89, 0x15, 0xff, 0x45, 0x5b, 0xea, 0x17, 0xf3, 0x45, 0x5b, 0x4c, 0x39, 0xea, 0xe6, + 0xa7, 0xd7, 0x21, 0xcf, 0x0b, 0x11, 0x2c, 0x22, 0xbb, 0xe8, 0x47, 0x12, 0xe4, 0xc4, 0x02, 0x1d, + 0x4a, 0xba, 0xae, 0xc4, 0xd4, 0x0a, 0x4b, 0x1b, 0x13, 0xcf, 0x67, 0xa1, 0x45, 0x7e, 0xf5, 0xbb, + 0x3f, 0xfb, 0x8f, 0xef, 0x4d, 0xdd, 0x42, 0x37, 0xfb, 0x3f, 0xfd, 0xfb, 0x98, 0x5d, 0x36, 0xdf, + 0xe0, 0xda, 0xf4, 0x36, 0xae, 0x6d, 0x84, 0xa5, 0xf3, 0x8d, 0x6b, 0x9f, 0x6c, 0x84, 0x55, 0xbf, + 0xdf, 0x92, 0x00, 0xfa, 0xbd, 0x51, 0x94, 0xa4, 0xa4, 0xa1, 0x16, 0x6a, 0x69, 0x82, 0x02, 0x63, + 0x2c, 0x38, 0xa2, 0xba, 0x11, 0xd0, 0x42, 0x64, 0x1b, 0xd7, 0x3e, 0x41, 0xbf, 0x2b, 0xc1, 0x7c, + 0xa4, 0xb3, 0x8c, 0x92, 0x74, 0x13, 0xd7, 0x83, 0x2e, 0x4d, 0x54, 0x17, 0x93, 0xdf, 0xa0, 0x20, + 0x5f, 0x96, 0xcf, 0xa0, 0xc1, 0x57, 0xa5, 0x6b, 0x14, 0x67, 0xa4, 0xc9, 0x9b, 0x88, 0x33, 0xae, + 0x1d, 0x7c, 0x3a, 0x9c, 0xa5, 0x33, 0x28, 0x93, 0xe0, 0xfc, 0x53, 0x09, 0xf2, 0xd1, 0x5e, 0x2e, + 0x7a, 0x61, 0x2c, 0xd0, 0x81, 0x42, 0xc5, 0x84, 0x48, 0xab, 0x14, 0x69, 0xa5, 0xf4, 0xe6, 0xa9, + 0x91, 0x6e, 0x84, 0xf9, 0x0e, 0x47, 0xfd, 0xd3, 0x68, 0xfe, 0x2a, 0x66, 0x3e, 0xaf, 0x24, 0xe7, + 0x04, 0xa3, 0x1b, 0xba, 0x13, 0x4a, 0xf1, 0x4d, 0x2a, 0x85, 0x2a, 0xef, 0x9e, 0x53, 0x0a, 0x0f, + 0xfb, 0x02, 0x06, 0x22, 0xd4, 0x8f, 0x25, 0x58, 0x1c, 0x6a, 0xbb, 0xa2, 0x17, 0xc7, 0xe4, 0x38, + 0x71, 0x4d, 0xda, 0x09, 0x45, 0xb9, 0x43, 0x45, 0xd9, 0x94, 0xdf, 0x38, 0x83, 0xe9, 0x78, 0xe1, + 0xd6, 0x04, 0xfa, 0xdf, 0xb0, 0x9c, 0x65, 0xf8, 0x23, 0xc1, 0x71, 0xed, 0xa5, 0x11, 0x6d, 0xdb, + 0x09, 0x05, 0xb8, 0x4b, 0x05, 0x50, 0xe4, 0xb7, 0xcf, 0x26, 0x40, 0x7f, 0x77, 0x7e, 0x12, 0x16, + 0x06, 0x9a, 0xb2, 0xe8, 0x46, 0x32, 0xfc, 0x98, 0x06, 0xee, 0x84, 0xc8, 0xb7, 0x29, 0xf2, 0xb2, + 0xfc, 0xfa, 0xd9, 0x90, 0xb3, 0x8d, 0x09, 0xea, 0x3f, 0x96, 0x20, 0x27, 0xf6, 0x5e, 0x13, 0x43, + 0x4b, 0x4c, 0x93, 0x76, 0x42, 0xbc, 0x5f, 0xa7, 0x78, 0xb7, 0xe4, 0xb7, 0xce, 0x6a, 0x2a, 0x7c, + 0x28, 0x80, 0x2c, 0xb6, 0x64, 0x13, 0x21, 0xc7, 0xf4, 0x6e, 0x1f, 0x01, 0xe4, 0x9e, 0xb0, 0x2b, + 0xb7, 0x8d, 0xf9, 0x48, 0x37, 0x34, 0xd1, 0x9b, 0xc7, 0xf5, 0x4d, 0x1f, 0x91, 0x45, 0x87, 0xdb, + 0x12, 0xd4, 0x9f, 0x49, 0x30, 0x1f, 0xe9, 0x7b, 0x26, 0xa2, 0x8e, 0xeb, 0x90, 0x4e, 0x88, 0x9a, + 0x07, 0xf4, 0x6b, 0x67, 0x09, 0xe8, 0x24, 0x00, 0x45, 0x9b, 0x5a, 0x89, 0x01, 0x28, 0xb6, 0xd3, + 0x57, 0xba, 0x71, 0x0a, 0x0e, 0x9e, 0x21, 0xbd, 0x4e, 0x31, 0xbf, 0x84, 0x6e, 0x4d, 0x1e, 0xdf, + 0x85, 0x4e, 0xd9, 0x67, 0x12, 0xe4, 0xc4, 0xae, 0x67, 0xa2, 0x0d, 0xc7, 0xb4, 0x47, 0x27, 0x54, + 0x6c, 0x1c, 0xc8, 0x24, 0xc5, 0xf6, 0x11, 0x12, 0xd5, 0xfe, 0x8e, 0x04, 0x0b, 0x03, 0x4d, 0xcb, + 0x44, 0x8f, 0x16, 0xdf, 0xe0, 0x2c, 0xad, 0x06, 0x2c, 0xc1, 0x7f, 0x79, 0x58, 0x57, 0xba, 0x8e, + 0x7f, 0x22, 0xdf, 0xa6, 0xe0, 0xde, 0x96, 0x5f, 0x3b, 0x0b, 0xb8, 0x57, 0x5b, 0x74, 0x33, 0x62, + 0xa6, 0x3f, 0x92, 0x60, 0x61, 0xa0, 0xa3, 0x98, 0x08, 0x33, 0xbe, 0xfb, 0x58, 0x7a, 0x36, 0xf1, + 0x44, 0xf6, 0xe7, 0x9f, 0x56, 0xa9, 0x9f, 0x6c, 0x78, 0x22, 0xb2, 0xbf, 0x90, 0x60, 0x3e, 0x52, + 0xce, 0x41, 0xe3, 0x92, 0xf3, 0xc1, 0xc6, 0x52, 0xe9, 0x85, 0xc9, 0x19, 0xb8, 0xb1, 0x72, 0x55, + 0xa3, 0x37, 0x27, 0x35, 0x56, 0xf1, 0x88, 0xf5, 0xf3, 0x0e, 0xf4, 0x03, 0x09, 0xb2, 0x42, 0xa3, + 0x09, 0x3d, 0x9f, 0xac, 0xe6, 0xc1, 0x3c, 0x6f, 0x92, 0xe2, 0x54, 0x2c, 0xd6, 0x33, 0x24, 0x48, + 0xd4, 0x31, 0x44, 0xfb, 0x9f, 0x89, 0x8e, 0x21, 0xb6, 0x55, 0x7a, 0xba, 0xcc, 0x54, 0x3e, 0xa7, + 0x7a, 0x79, 0x70, 0xcb, 0x47, 0xfb, 0x9d, 0x89, 0xa8, 0x63, 0x5b, 0xa3, 0x13, 0xa2, 0xe6, 0x8a, + 0xbe, 0x76, 0x5e, 0x45, 0xff, 0x93, 0x04, 0x6b, 0x23, 0x4a, 0xa9, 0x28, 0xe9, 0x47, 0x05, 0xc9, + 0xe5, 0xd7, 0x09, 0x85, 0x50, 0xa9, 0x10, 0x3b, 0xf2, 0xf6, 0x39, 0xd3, 0x69, 0x97, 0x83, 0x21, + 0xef, 0xe0, 0x9f, 0x25, 0x58, 0x89, 0xad, 0xe8, 0xa3, 0x97, 0x27, 0xbb, 0x1c, 0x0c, 0xf5, 0x00, + 0x26, 0x14, 0xe6, 0x3e, 0x15, 0xe6, 0x1b, 0xf2, 0xce, 0xf9, 0xef, 0x06, 0x7d, 0x08, 0x44, 0xa2, + 0x3f, 0x92, 0x20, 0x13, 0x16, 0x34, 0xd1, 0xf5, 0x53, 0x94, 0x3d, 0x27, 0x44, 0x5e, 0xa7, 0xc8, + 0xab, 0xf2, 0xd6, 0xd9, 0xf2, 0x8e, 0x68, 0xcd, 0x53, 0xc8, 0x98, 0xfa, 0x55, 0xcc, 0x71, 0x19, + 0xd3, 0x50, 0xbd, 0xf3, 0xd1, 0x64, 0x4c, 0xfd, 0x6d, 0x09, 0xea, 0x3f, 0x27, 0x77, 0x80, 0x68, + 0x8d, 0x33, 0xf9, 0x0e, 0x10, 0x5b, 0x0f, 0x9d, 0x10, 0xf9, 0x2e, 0x45, 0xbe, 0x2d, 0x6f, 0x9e, + 0x05, 0x39, 0xdd, 0xd8, 0x09, 0x36, 0x26, 0xd8, 0xff, 0x56, 0x02, 0x34, 0x5c, 0x1e, 0x45, 0xb7, + 0x92, 0x7c, 0xe6, 0xa8, 0x6a, 0xea, 0x84, 0x12, 0x34, 0xa8, 0x04, 0x5f, 0x97, 0x95, 0x33, 0x48, + 0xd0, 0x0a, 0xf6, 0x8e, 0x08, 0xf1, 0x57, 0xec, 0x12, 0x26, 0x36, 0xa6, 0xc6, 0x5d, 0xc2, 0x62, + 0x9a, 0x58, 0x13, 0xc2, 0xff, 0x06, 0x85, 0x7f, 0x57, 0xbe, 0x7d, 0xfe, 0xe3, 0x4a, 0x36, 0x27, + 0xf8, 0xff, 0x52, 0xa2, 0x1d, 0x91, 0xe8, 0xff, 0x8e, 0xb8, 0x39, 0x46, 0x80, 0x98, 0xfa, 0xee, + 0x84, 0x12, 0xd4, 0xa8, 0x04, 0x77, 0xe4, 0xca, 0xd9, 0x8c, 0x3f, 0xb2, 0x33, 0x81, 0xff, 0xf7, + 0xfc, 0x1e, 0x3f, 0x54, 0xe8, 0x1c, 0xfb, 0x99, 0x68, 0x7c, 0x3d, 0xf7, 0xc2, 0x83, 0x00, 0xf7, + 0x95, 0x03, 0xbb, 0xbf, 0x2a, 0x5d, 0xdb, 0xfc, 0x89, 0x04, 0x97, 0x5b, 0x76, 0x77, 0xf4, 0xfe, + 0x9b, 0x4b, 0x95, 0xe0, 0xdf, 0x3f, 0xd0, 0xd2, 0x43, 0x83, 0x64, 0xb7, 0x0d, 0xe9, 0xdd, 0x4d, + 0xce, 0xd1, 0xb6, 0x3b, 0xba, 0xd5, 0x5e, 0xb7, 0xdd, 0xf6, 0x46, 0x1b, 0x5b, 0x34, 0xf7, 0xe5, + 0xff, 0x58, 0x4d, 0x77, 0x4c, 0x2f, 0xe6, 0x9f, 0xab, 0xbd, 0x16, 0x92, 0x7e, 0x38, 0xf5, 0xe4, + 0x36, 0x5b, 0xa4, 0xd2, 0xb1, 0x7b, 0xc6, 0x7a, 0x25, 0xdc, 0xfc, 0xde, 0x0d, 0xfa, 0x03, 0xf5, + 0x1b, 0xff, 0x10, 0xcc, 0x78, 0x9f, 0xce, 0x78, 0x3f, 0x9c, 0xf1, 0xfe, 0x3d, 0xbe, 0xda, 0x41, + 0x9a, 0x6e, 0xf9, 0xe2, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0xec, 0x17, 0x6d, 0x5d, 0xce, 0x4d, + 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/container/v1beta1/cluster_service.pb.go b/vendor/google.golang.org/genproto/googleapis/container/v1beta1/cluster_service.pb.go new file mode 100644 index 0000000..9fb21a4 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/container/v1beta1/cluster_service.pb.go @@ -0,0 +1,4719 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/container/v1beta1/cluster_service.proto + +/* +Package container is a generated protocol buffer package. + +It is generated from these files: + google/container/v1beta1/cluster_service.proto + +It has these top-level messages: + NodeConfig + NodeTaint + MasterAuth + ClientCertificateConfig + AddonsConfig + HttpLoadBalancing + HorizontalPodAutoscaling + KubernetesDashboard + NetworkPolicyConfig + MasterAuthorizedNetworksConfig + NetworkPolicy + IPAllocationPolicy + PodSecurityPolicyConfig + Cluster + ClusterUpdate + Operation + CreateClusterRequest + GetClusterRequest + UpdateClusterRequest + SetMasterAuthRequest + DeleteClusterRequest + ListClustersRequest + ListClustersResponse + GetOperationRequest + ListOperationsRequest + CancelOperationRequest + ListOperationsResponse + GetServerConfigRequest + ServerConfig + CreateNodePoolRequest + DeleteNodePoolRequest + ListNodePoolsRequest + GetNodePoolRequest + NodePool + NodeManagement + AutoUpgradeOptions + MaintenancePolicy + MaintenanceWindow + DailyMaintenanceWindow + SetNodePoolManagementRequest + RollbackNodePoolUpgradeRequest + ListNodePoolsResponse + NodePoolAutoscaling + SetLabelsRequest + SetLegacyAbacRequest + StartIPRotationRequest + CompleteIPRotationRequest + AcceleratorConfig + SetNetworkPolicyRequest + SetMaintenancePolicyRequest +*/ +package container + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/empty" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Possible values for Effect in taint. +type NodeTaint_Effect int32 + +const ( + // Not set + NodeTaint_EFFECT_UNSPECIFIED NodeTaint_Effect = 0 + // NoSchedule + NodeTaint_NO_SCHEDULE NodeTaint_Effect = 1 + // PreferNoSchedule + NodeTaint_PREFER_NO_SCHEDULE NodeTaint_Effect = 2 + // NoExecute + NodeTaint_NO_EXECUTE NodeTaint_Effect = 3 +) + +var NodeTaint_Effect_name = map[int32]string{ + 0: "EFFECT_UNSPECIFIED", + 1: "NO_SCHEDULE", + 2: "PREFER_NO_SCHEDULE", + 3: "NO_EXECUTE", +} +var NodeTaint_Effect_value = map[string]int32{ + "EFFECT_UNSPECIFIED": 0, + "NO_SCHEDULE": 1, + "PREFER_NO_SCHEDULE": 2, + "NO_EXECUTE": 3, +} + +func (x NodeTaint_Effect) String() string { + return proto.EnumName(NodeTaint_Effect_name, int32(x)) +} +func (NodeTaint_Effect) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1, 0} } + +// Allowed Network Policy providers. +type NetworkPolicy_Provider int32 + +const ( + // Not set + NetworkPolicy_PROVIDER_UNSPECIFIED NetworkPolicy_Provider = 0 + // Tigera (Calico Felix). + NetworkPolicy_CALICO NetworkPolicy_Provider = 1 +) + +var NetworkPolicy_Provider_name = map[int32]string{ + 0: "PROVIDER_UNSPECIFIED", + 1: "CALICO", +} +var NetworkPolicy_Provider_value = map[string]int32{ + "PROVIDER_UNSPECIFIED": 0, + "CALICO": 1, +} + +func (x NetworkPolicy_Provider) String() string { + return proto.EnumName(NetworkPolicy_Provider_name, int32(x)) +} +func (NetworkPolicy_Provider) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{10, 0} } + +// The current status of the cluster. +type Cluster_Status int32 + +const ( + // Not set. + Cluster_STATUS_UNSPECIFIED Cluster_Status = 0 + // The PROVISIONING state indicates the cluster is being created. + Cluster_PROVISIONING Cluster_Status = 1 + // The RUNNING state indicates the cluster has been created and is fully + // usable. + Cluster_RUNNING Cluster_Status = 2 + // The RECONCILING state indicates that some work is actively being done on + // the cluster, such as upgrading the master or node software. Details can + // be found in the `statusMessage` field. + Cluster_RECONCILING Cluster_Status = 3 + // The STOPPING state indicates the cluster is being deleted. + Cluster_STOPPING Cluster_Status = 4 + // The ERROR state indicates the cluster may be unusable. Details + // can be found in the `statusMessage` field. + Cluster_ERROR Cluster_Status = 5 +) + +var Cluster_Status_name = map[int32]string{ + 0: "STATUS_UNSPECIFIED", + 1: "PROVISIONING", + 2: "RUNNING", + 3: "RECONCILING", + 4: "STOPPING", + 5: "ERROR", +} +var Cluster_Status_value = map[string]int32{ + "STATUS_UNSPECIFIED": 0, + "PROVISIONING": 1, + "RUNNING": 2, + "RECONCILING": 3, + "STOPPING": 4, + "ERROR": 5, +} + +func (x Cluster_Status) String() string { + return proto.EnumName(Cluster_Status_name, int32(x)) +} +func (Cluster_Status) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{13, 0} } + +// Current status of the operation. +type Operation_Status int32 + +const ( + // Not set. + Operation_STATUS_UNSPECIFIED Operation_Status = 0 + // The operation has been created. + Operation_PENDING Operation_Status = 1 + // The operation is currently running. + Operation_RUNNING Operation_Status = 2 + // The operation is done, either cancelled or completed. + Operation_DONE Operation_Status = 3 + // The operation is aborting. + Operation_ABORTING Operation_Status = 4 +) + +var Operation_Status_name = map[int32]string{ + 0: "STATUS_UNSPECIFIED", + 1: "PENDING", + 2: "RUNNING", + 3: "DONE", + 4: "ABORTING", +} +var Operation_Status_value = map[string]int32{ + "STATUS_UNSPECIFIED": 0, + "PENDING": 1, + "RUNNING": 2, + "DONE": 3, + "ABORTING": 4, +} + +func (x Operation_Status) String() string { + return proto.EnumName(Operation_Status_name, int32(x)) +} +func (Operation_Status) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{15, 0} } + +// Operation type. +type Operation_Type int32 + +const ( + // Not set. + Operation_TYPE_UNSPECIFIED Operation_Type = 0 + // Cluster create. + Operation_CREATE_CLUSTER Operation_Type = 1 + // Cluster delete. + Operation_DELETE_CLUSTER Operation_Type = 2 + // A master upgrade. + Operation_UPGRADE_MASTER Operation_Type = 3 + // A node upgrade. + Operation_UPGRADE_NODES Operation_Type = 4 + // Cluster repair. + Operation_REPAIR_CLUSTER Operation_Type = 5 + // Cluster update. + Operation_UPDATE_CLUSTER Operation_Type = 6 + // Node pool create. + Operation_CREATE_NODE_POOL Operation_Type = 7 + // Node pool delete. + Operation_DELETE_NODE_POOL Operation_Type = 8 + // Set node pool management. + Operation_SET_NODE_POOL_MANAGEMENT Operation_Type = 9 + // Automatic node pool repair. + Operation_AUTO_REPAIR_NODES Operation_Type = 10 + // Automatic node upgrade. + Operation_AUTO_UPGRADE_NODES Operation_Type = 11 + // Set labels. + Operation_SET_LABELS Operation_Type = 12 + // Set/generate master auth materials + Operation_SET_MASTER_AUTH Operation_Type = 13 + // Set node pool size. + Operation_SET_NODE_POOL_SIZE Operation_Type = 14 + // Updates network policy for a cluster. + Operation_SET_NETWORK_POLICY Operation_Type = 15 + // Set the maintenance policy. + Operation_SET_MAINTENANCE_POLICY Operation_Type = 16 +) + +var Operation_Type_name = map[int32]string{ + 0: "TYPE_UNSPECIFIED", + 1: "CREATE_CLUSTER", + 2: "DELETE_CLUSTER", + 3: "UPGRADE_MASTER", + 4: "UPGRADE_NODES", + 5: "REPAIR_CLUSTER", + 6: "UPDATE_CLUSTER", + 7: "CREATE_NODE_POOL", + 8: "DELETE_NODE_POOL", + 9: "SET_NODE_POOL_MANAGEMENT", + 10: "AUTO_REPAIR_NODES", + 11: "AUTO_UPGRADE_NODES", + 12: "SET_LABELS", + 13: "SET_MASTER_AUTH", + 14: "SET_NODE_POOL_SIZE", + 15: "SET_NETWORK_POLICY", + 16: "SET_MAINTENANCE_POLICY", +} +var Operation_Type_value = map[string]int32{ + "TYPE_UNSPECIFIED": 0, + "CREATE_CLUSTER": 1, + "DELETE_CLUSTER": 2, + "UPGRADE_MASTER": 3, + "UPGRADE_NODES": 4, + "REPAIR_CLUSTER": 5, + "UPDATE_CLUSTER": 6, + "CREATE_NODE_POOL": 7, + "DELETE_NODE_POOL": 8, + "SET_NODE_POOL_MANAGEMENT": 9, + "AUTO_REPAIR_NODES": 10, + "AUTO_UPGRADE_NODES": 11, + "SET_LABELS": 12, + "SET_MASTER_AUTH": 13, + "SET_NODE_POOL_SIZE": 14, + "SET_NETWORK_POLICY": 15, + "SET_MAINTENANCE_POLICY": 16, +} + +func (x Operation_Type) String() string { + return proto.EnumName(Operation_Type_name, int32(x)) +} +func (Operation_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{15, 1} } + +// Operation type: what type update to perform. +type SetMasterAuthRequest_Action int32 + +const ( + // Operation is unknown and will error out. + SetMasterAuthRequest_UNKNOWN SetMasterAuthRequest_Action = 0 + // Set the password to a user generated value. + SetMasterAuthRequest_SET_PASSWORD SetMasterAuthRequest_Action = 1 + // Generate a new password and set it to that. + SetMasterAuthRequest_GENERATE_PASSWORD SetMasterAuthRequest_Action = 2 + // Set the username. If an empty username is provided, basic authentication + // is disabled for the cluster. If a non-empty username is provided, basic + // authentication is enabled, with either a provided password or a generated + // one. + SetMasterAuthRequest_SET_USERNAME SetMasterAuthRequest_Action = 3 +) + +var SetMasterAuthRequest_Action_name = map[int32]string{ + 0: "UNKNOWN", + 1: "SET_PASSWORD", + 2: "GENERATE_PASSWORD", + 3: "SET_USERNAME", +} +var SetMasterAuthRequest_Action_value = map[string]int32{ + "UNKNOWN": 0, + "SET_PASSWORD": 1, + "GENERATE_PASSWORD": 2, + "SET_USERNAME": 3, +} + +func (x SetMasterAuthRequest_Action) String() string { + return proto.EnumName(SetMasterAuthRequest_Action_name, int32(x)) +} +func (SetMasterAuthRequest_Action) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{19, 0} +} + +// The current status of the node pool instance. +type NodePool_Status int32 + +const ( + // Not set. + NodePool_STATUS_UNSPECIFIED NodePool_Status = 0 + // The PROVISIONING state indicates the node pool is being created. + NodePool_PROVISIONING NodePool_Status = 1 + // The RUNNING state indicates the node pool has been created + // and is fully usable. + NodePool_RUNNING NodePool_Status = 2 + // The RUNNING_WITH_ERROR state indicates the node pool has been created + // and is partially usable. Some error state has occurred and some + // functionality may be impaired. Customer may need to reissue a request + // or trigger a new update. + NodePool_RUNNING_WITH_ERROR NodePool_Status = 3 + // The RECONCILING state indicates that some work is actively being done on + // the node pool, such as upgrading node software. Details can + // be found in the `statusMessage` field. + NodePool_RECONCILING NodePool_Status = 4 + // The STOPPING state indicates the node pool is being deleted. + NodePool_STOPPING NodePool_Status = 5 + // The ERROR state indicates the node pool may be unusable. Details + // can be found in the `statusMessage` field. + NodePool_ERROR NodePool_Status = 6 +) + +var NodePool_Status_name = map[int32]string{ + 0: "STATUS_UNSPECIFIED", + 1: "PROVISIONING", + 2: "RUNNING", + 3: "RUNNING_WITH_ERROR", + 4: "RECONCILING", + 5: "STOPPING", + 6: "ERROR", +} +var NodePool_Status_value = map[string]int32{ + "STATUS_UNSPECIFIED": 0, + "PROVISIONING": 1, + "RUNNING": 2, + "RUNNING_WITH_ERROR": 3, + "RECONCILING": 4, + "STOPPING": 5, + "ERROR": 6, +} + +func (x NodePool_Status) String() string { + return proto.EnumName(NodePool_Status_name, int32(x)) +} +func (NodePool_Status) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{33, 0} } + +// Parameters that describe the nodes in a cluster. +type NodeConfig struct { + // The name of a Google Compute Engine [machine + // type](/compute/docs/machine-types) (e.g. + // `n1-standard-1`). + // + // If unspecified, the default machine type is + // `n1-standard-1`. + MachineType string `protobuf:"bytes,1,opt,name=machine_type,json=machineType" json:"machine_type,omitempty"` + // Size of the disk attached to each node, specified in GB. + // The smallest allowed disk size is 10GB. + // + // If unspecified, the default disk size is 100GB. + DiskSizeGb int32 `protobuf:"varint,2,opt,name=disk_size_gb,json=diskSizeGb" json:"disk_size_gb,omitempty"` + // The set of Google API scopes to be made available on all of the + // node VMs under the "default" service account. + // + // The following scopes are recommended, but not required, and by default are + // not included: + // + // * `https://www.googleapis.com/auth/compute` is required for mounting + // persistent storage on your nodes. + // * `https://www.googleapis.com/auth/devstorage.read_only` is required for + // communicating with **gcr.io** + // (the [Google Container Registry](/container-registry/)). + // + // If unspecified, no scopes are added, unless Cloud Logging or Cloud + // Monitoring are enabled, in which case their required scopes will be added. + OauthScopes []string `protobuf:"bytes,3,rep,name=oauth_scopes,json=oauthScopes" json:"oauth_scopes,omitempty"` + // The Google Cloud Platform Service Account to be used by the node VMs. If + // no Service Account is specified, the "default" service account is used. + ServiceAccount string `protobuf:"bytes,9,opt,name=service_account,json=serviceAccount" json:"service_account,omitempty"` + // The metadata key/value pairs assigned to instances in the cluster. + // + // Keys must conform to the regexp [a-zA-Z0-9-_]+ and be less than 128 bytes + // in length. These are reflected as part of a URL in the metadata server. + // Additionally, to avoid ambiguity, keys must not conflict with any other + // metadata keys for the project or be one of the four reserved keys: + // "instance-template", "kube-env", "startup-script", and "user-data" + // + // Values are free-form strings, and only have meaning as interpreted by + // the image running in the instance. The only restriction placed on them is + // that each value's size must be less than or equal to 32 KB. + // + // The total size of all keys and values must be less than 512 KB. + Metadata map[string]string `protobuf:"bytes,4,rep,name=metadata" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // The image type to use for this node. Note that for a given image type, + // the latest version of it will be used. + ImageType string `protobuf:"bytes,5,opt,name=image_type,json=imageType" json:"image_type,omitempty"` + // The map of Kubernetes labels (key/value pairs) to be applied to each node. + // These will added in addition to any default label(s) that + // Kubernetes may apply to the node. + // In case of conflict in label keys, the applied set may differ depending on + // the Kubernetes version -- it's best to assume the behavior is undefined + // and conflicts should be avoided. + // For more information, including usage and the valid values, see: + // https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ + Labels map[string]string `protobuf:"bytes,6,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // The number of local SSD disks to be attached to the node. + // + // The limit for this value is dependant upon the maximum number of + // disks available on a machine per zone. See: + // https://cloud.google.com/compute/docs/disks/local-ssd#local_ssd_limits + // for more information. + LocalSsdCount int32 `protobuf:"varint,7,opt,name=local_ssd_count,json=localSsdCount" json:"local_ssd_count,omitempty"` + // The list of instance tags applied to all nodes. Tags are used to identify + // valid sources or targets for network firewalls and are specified by + // the client during cluster or node pool creation. Each tag within the list + // must comply with RFC1035. + Tags []string `protobuf:"bytes,8,rep,name=tags" json:"tags,omitempty"` + // Whether the nodes are created as preemptible VM instances. See: + // https://cloud.google.com/compute/docs/instances/preemptible for more + // inforamtion about preemptible VM instances. + Preemptible bool `protobuf:"varint,10,opt,name=preemptible" json:"preemptible,omitempty"` + // A list of hardware accelerators to be attached to each node. + // See https://cloud.google.com/compute/docs/gpus for more information about + // support for GPUs. + Accelerators []*AcceleratorConfig `protobuf:"bytes,11,rep,name=accelerators" json:"accelerators,omitempty"` + // Minimum CPU platform to be used by this instance. The instance may be + // scheduled on the specified or newer CPU platform. Applicable values are the + // friendly names of CPU platforms, such as + // minCpuPlatform: "Intel Haswell" or + // minCpuPlatform: "Intel Sandy Bridge". For more + // information, read [how to specify min CPU platform](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform) + MinCpuPlatform string `protobuf:"bytes,13,opt,name=min_cpu_platform,json=minCpuPlatform" json:"min_cpu_platform,omitempty"` + // List of kubernetes taints to be applied to each node. + // + // For more information, including usage and the valid values, see: + // https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + Taints []*NodeTaint `protobuf:"bytes,15,rep,name=taints" json:"taints,omitempty"` +} + +func (m *NodeConfig) Reset() { *m = NodeConfig{} } +func (m *NodeConfig) String() string { return proto.CompactTextString(m) } +func (*NodeConfig) ProtoMessage() {} +func (*NodeConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *NodeConfig) GetMachineType() string { + if m != nil { + return m.MachineType + } + return "" +} + +func (m *NodeConfig) GetDiskSizeGb() int32 { + if m != nil { + return m.DiskSizeGb + } + return 0 +} + +func (m *NodeConfig) GetOauthScopes() []string { + if m != nil { + return m.OauthScopes + } + return nil +} + +func (m *NodeConfig) GetServiceAccount() string { + if m != nil { + return m.ServiceAccount + } + return "" +} + +func (m *NodeConfig) GetMetadata() map[string]string { + if m != nil { + return m.Metadata + } + return nil +} + +func (m *NodeConfig) GetImageType() string { + if m != nil { + return m.ImageType + } + return "" +} + +func (m *NodeConfig) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +func (m *NodeConfig) GetLocalSsdCount() int32 { + if m != nil { + return m.LocalSsdCount + } + return 0 +} + +func (m *NodeConfig) GetTags() []string { + if m != nil { + return m.Tags + } + return nil +} + +func (m *NodeConfig) GetPreemptible() bool { + if m != nil { + return m.Preemptible + } + return false +} + +func (m *NodeConfig) GetAccelerators() []*AcceleratorConfig { + if m != nil { + return m.Accelerators + } + return nil +} + +func (m *NodeConfig) GetMinCpuPlatform() string { + if m != nil { + return m.MinCpuPlatform + } + return "" +} + +func (m *NodeConfig) GetTaints() []*NodeTaint { + if m != nil { + return m.Taints + } + return nil +} + +// Kubernetes taint is comprised of three fields: key, value, and effect. Effect +// can only be one of three types: NoSchedule, PreferNoSchedule or NoExecute. +// +// For more information, including usage and the valid values, see: +// https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ +type NodeTaint struct { + // Key for taint. + Key string `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + // Value for taint. + Value string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` + // Effect for taint. + Effect NodeTaint_Effect `protobuf:"varint,3,opt,name=effect,enum=google.container.v1beta1.NodeTaint_Effect" json:"effect,omitempty"` +} + +func (m *NodeTaint) Reset() { *m = NodeTaint{} } +func (m *NodeTaint) String() string { return proto.CompactTextString(m) } +func (*NodeTaint) ProtoMessage() {} +func (*NodeTaint) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *NodeTaint) GetKey() string { + if m != nil { + return m.Key + } + return "" +} + +func (m *NodeTaint) GetValue() string { + if m != nil { + return m.Value + } + return "" +} + +func (m *NodeTaint) GetEffect() NodeTaint_Effect { + if m != nil { + return m.Effect + } + return NodeTaint_EFFECT_UNSPECIFIED +} + +// The authentication information for accessing the master endpoint. +// Authentication can be done using HTTP basic auth or using client +// certificates. +type MasterAuth struct { + // The username to use for HTTP basic authentication to the master endpoint. + // For clusters v1.6.0 and later, you can disable basic authentication by + // providing an empty username. + Username string `protobuf:"bytes,1,opt,name=username" json:"username,omitempty"` + // The password to use for HTTP basic authentication to the master endpoint. + // Because the master endpoint is open to the Internet, you should create a + // strong password. If a password is provided for cluster creation, username + // must be non-empty. + Password string `protobuf:"bytes,2,opt,name=password" json:"password,omitempty"` + // Configuration for client certificate authentication on the cluster. If no + // configuration is specified, a client certificate is issued. + ClientCertificateConfig *ClientCertificateConfig `protobuf:"bytes,3,opt,name=client_certificate_config,json=clientCertificateConfig" json:"client_certificate_config,omitempty"` + // [Output only] Base64-encoded public certificate that is the root of + // trust for the cluster. + ClusterCaCertificate string `protobuf:"bytes,100,opt,name=cluster_ca_certificate,json=clusterCaCertificate" json:"cluster_ca_certificate,omitempty"` + // [Output only] Base64-encoded public certificate used by clients to + // authenticate to the cluster endpoint. + ClientCertificate string `protobuf:"bytes,101,opt,name=client_certificate,json=clientCertificate" json:"client_certificate,omitempty"` + // [Output only] Base64-encoded private key used by clients to authenticate + // to the cluster endpoint. + ClientKey string `protobuf:"bytes,102,opt,name=client_key,json=clientKey" json:"client_key,omitempty"` +} + +func (m *MasterAuth) Reset() { *m = MasterAuth{} } +func (m *MasterAuth) String() string { return proto.CompactTextString(m) } +func (*MasterAuth) ProtoMessage() {} +func (*MasterAuth) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *MasterAuth) GetUsername() string { + if m != nil { + return m.Username + } + return "" +} + +func (m *MasterAuth) GetPassword() string { + if m != nil { + return m.Password + } + return "" +} + +func (m *MasterAuth) GetClientCertificateConfig() *ClientCertificateConfig { + if m != nil { + return m.ClientCertificateConfig + } + return nil +} + +func (m *MasterAuth) GetClusterCaCertificate() string { + if m != nil { + return m.ClusterCaCertificate + } + return "" +} + +func (m *MasterAuth) GetClientCertificate() string { + if m != nil { + return m.ClientCertificate + } + return "" +} + +func (m *MasterAuth) GetClientKey() string { + if m != nil { + return m.ClientKey + } + return "" +} + +// Configuration for client certificates on the cluster. +type ClientCertificateConfig struct { + // Issue a client certificate. + IssueClientCertificate bool `protobuf:"varint,1,opt,name=issue_client_certificate,json=issueClientCertificate" json:"issue_client_certificate,omitempty"` +} + +func (m *ClientCertificateConfig) Reset() { *m = ClientCertificateConfig{} } +func (m *ClientCertificateConfig) String() string { return proto.CompactTextString(m) } +func (*ClientCertificateConfig) ProtoMessage() {} +func (*ClientCertificateConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *ClientCertificateConfig) GetIssueClientCertificate() bool { + if m != nil { + return m.IssueClientCertificate + } + return false +} + +// Configuration for the addons that can be automatically spun up in the +// cluster, enabling additional functionality. +type AddonsConfig struct { + // Configuration for the HTTP (L7) load balancing controller addon, which + // makes it easy to set up HTTP load balancers for services in a cluster. + HttpLoadBalancing *HttpLoadBalancing `protobuf:"bytes,1,opt,name=http_load_balancing,json=httpLoadBalancing" json:"http_load_balancing,omitempty"` + // Configuration for the horizontal pod autoscaling feature, which + // increases or decreases the number of replica pods a replication controller + // has based on the resource usage of the existing pods. + HorizontalPodAutoscaling *HorizontalPodAutoscaling `protobuf:"bytes,2,opt,name=horizontal_pod_autoscaling,json=horizontalPodAutoscaling" json:"horizontal_pod_autoscaling,omitempty"` + // Configuration for the Kubernetes Dashboard. + KubernetesDashboard *KubernetesDashboard `protobuf:"bytes,3,opt,name=kubernetes_dashboard,json=kubernetesDashboard" json:"kubernetes_dashboard,omitempty"` + // Configuration for NetworkPolicy. This only tracks whether the addon + // is enabled or not on the Master, it does not track whether network policy + // is enabled for the nodes. + NetworkPolicyConfig *NetworkPolicyConfig `protobuf:"bytes,4,opt,name=network_policy_config,json=networkPolicyConfig" json:"network_policy_config,omitempty"` +} + +func (m *AddonsConfig) Reset() { *m = AddonsConfig{} } +func (m *AddonsConfig) String() string { return proto.CompactTextString(m) } +func (*AddonsConfig) ProtoMessage() {} +func (*AddonsConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *AddonsConfig) GetHttpLoadBalancing() *HttpLoadBalancing { + if m != nil { + return m.HttpLoadBalancing + } + return nil +} + +func (m *AddonsConfig) GetHorizontalPodAutoscaling() *HorizontalPodAutoscaling { + if m != nil { + return m.HorizontalPodAutoscaling + } + return nil +} + +func (m *AddonsConfig) GetKubernetesDashboard() *KubernetesDashboard { + if m != nil { + return m.KubernetesDashboard + } + return nil +} + +func (m *AddonsConfig) GetNetworkPolicyConfig() *NetworkPolicyConfig { + if m != nil { + return m.NetworkPolicyConfig + } + return nil +} + +// Configuration options for the HTTP (L7) load balancing controller addon, +// which makes it easy to set up HTTP load balancers for services in a cluster. +type HttpLoadBalancing struct { + // Whether the HTTP Load Balancing controller is enabled in the cluster. + // When enabled, it runs a small pod in the cluster that manages the load + // balancers. + Disabled bool `protobuf:"varint,1,opt,name=disabled" json:"disabled,omitempty"` +} + +func (m *HttpLoadBalancing) Reset() { *m = HttpLoadBalancing{} } +func (m *HttpLoadBalancing) String() string { return proto.CompactTextString(m) } +func (*HttpLoadBalancing) ProtoMessage() {} +func (*HttpLoadBalancing) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *HttpLoadBalancing) GetDisabled() bool { + if m != nil { + return m.Disabled + } + return false +} + +// Configuration options for the horizontal pod autoscaling feature, which +// increases or decreases the number of replica pods a replication controller +// has based on the resource usage of the existing pods. +type HorizontalPodAutoscaling struct { + // Whether the Horizontal Pod Autoscaling feature is enabled in the cluster. + // When enabled, it ensures that a Heapster pod is running in the cluster, + // which is also used by the Cloud Monitoring service. + Disabled bool `protobuf:"varint,1,opt,name=disabled" json:"disabled,omitempty"` +} + +func (m *HorizontalPodAutoscaling) Reset() { *m = HorizontalPodAutoscaling{} } +func (m *HorizontalPodAutoscaling) String() string { return proto.CompactTextString(m) } +func (*HorizontalPodAutoscaling) ProtoMessage() {} +func (*HorizontalPodAutoscaling) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *HorizontalPodAutoscaling) GetDisabled() bool { + if m != nil { + return m.Disabled + } + return false +} + +// Configuration for the Kubernetes Dashboard. +type KubernetesDashboard struct { + // Whether the Kubernetes Dashboard is enabled for this cluster. + Disabled bool `protobuf:"varint,1,opt,name=disabled" json:"disabled,omitempty"` +} + +func (m *KubernetesDashboard) Reset() { *m = KubernetesDashboard{} } +func (m *KubernetesDashboard) String() string { return proto.CompactTextString(m) } +func (*KubernetesDashboard) ProtoMessage() {} +func (*KubernetesDashboard) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *KubernetesDashboard) GetDisabled() bool { + if m != nil { + return m.Disabled + } + return false +} + +// Configuration for NetworkPolicy. This only tracks whether the addon +// is enabled or not on the Master, it does not track whether network policy +// is enabled for the nodes. +type NetworkPolicyConfig struct { + // Whether NetworkPolicy is enabled for this cluster. + Disabled bool `protobuf:"varint,1,opt,name=disabled" json:"disabled,omitempty"` +} + +func (m *NetworkPolicyConfig) Reset() { *m = NetworkPolicyConfig{} } +func (m *NetworkPolicyConfig) String() string { return proto.CompactTextString(m) } +func (*NetworkPolicyConfig) ProtoMessage() {} +func (*NetworkPolicyConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *NetworkPolicyConfig) GetDisabled() bool { + if m != nil { + return m.Disabled + } + return false +} + +// Configuration options for the master authorized networks feature. Enabled +// master authorized networks will disallow all external traffic to access +// Kubernetes master through HTTPS except traffic from the given CIDR blocks, +// Google Compute Engine Public IPs and Google Prod IPs. +type MasterAuthorizedNetworksConfig struct { + // Whether or not master authorized networks is enabled. + Enabled bool `protobuf:"varint,1,opt,name=enabled" json:"enabled,omitempty"` + // cidr_blocks define up to 10 external networks that could access + // Kubernetes master through HTTPS. + CidrBlocks []*MasterAuthorizedNetworksConfig_CidrBlock `protobuf:"bytes,2,rep,name=cidr_blocks,json=cidrBlocks" json:"cidr_blocks,omitempty"` +} + +func (m *MasterAuthorizedNetworksConfig) Reset() { *m = MasterAuthorizedNetworksConfig{} } +func (m *MasterAuthorizedNetworksConfig) String() string { return proto.CompactTextString(m) } +func (*MasterAuthorizedNetworksConfig) ProtoMessage() {} +func (*MasterAuthorizedNetworksConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *MasterAuthorizedNetworksConfig) GetEnabled() bool { + if m != nil { + return m.Enabled + } + return false +} + +func (m *MasterAuthorizedNetworksConfig) GetCidrBlocks() []*MasterAuthorizedNetworksConfig_CidrBlock { + if m != nil { + return m.CidrBlocks + } + return nil +} + +// CidrBlock contains an optional name and one CIDR block. +type MasterAuthorizedNetworksConfig_CidrBlock struct { + // display_name is an optional field for users to identify CIDR blocks. + DisplayName string `protobuf:"bytes,1,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // cidr_block must be specified in CIDR notation. + CidrBlock string `protobuf:"bytes,2,opt,name=cidr_block,json=cidrBlock" json:"cidr_block,omitempty"` +} + +func (m *MasterAuthorizedNetworksConfig_CidrBlock) Reset() { + *m = MasterAuthorizedNetworksConfig_CidrBlock{} +} +func (m *MasterAuthorizedNetworksConfig_CidrBlock) String() string { return proto.CompactTextString(m) } +func (*MasterAuthorizedNetworksConfig_CidrBlock) ProtoMessage() {} +func (*MasterAuthorizedNetworksConfig_CidrBlock) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{9, 0} +} + +func (m *MasterAuthorizedNetworksConfig_CidrBlock) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func (m *MasterAuthorizedNetworksConfig_CidrBlock) GetCidrBlock() string { + if m != nil { + return m.CidrBlock + } + return "" +} + +// Configuration options for the NetworkPolicy feature. +// https://kubernetes.io/docs/concepts/services-networking/networkpolicies/ +type NetworkPolicy struct { + // The selected network policy provider. + Provider NetworkPolicy_Provider `protobuf:"varint,1,opt,name=provider,enum=google.container.v1beta1.NetworkPolicy_Provider" json:"provider,omitempty"` + // Whether network policy is enabled on the cluster. + Enabled bool `protobuf:"varint,2,opt,name=enabled" json:"enabled,omitempty"` +} + +func (m *NetworkPolicy) Reset() { *m = NetworkPolicy{} } +func (m *NetworkPolicy) String() string { return proto.CompactTextString(m) } +func (*NetworkPolicy) ProtoMessage() {} +func (*NetworkPolicy) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *NetworkPolicy) GetProvider() NetworkPolicy_Provider { + if m != nil { + return m.Provider + } + return NetworkPolicy_PROVIDER_UNSPECIFIED +} + +func (m *NetworkPolicy) GetEnabled() bool { + if m != nil { + return m.Enabled + } + return false +} + +// Configuration for controlling how IPs are allocated in the cluster. +type IPAllocationPolicy struct { + // Whether alias IPs will be used for pod IPs in the cluster. + UseIpAliases bool `protobuf:"varint,1,opt,name=use_ip_aliases,json=useIpAliases" json:"use_ip_aliases,omitempty"` + // Whether a new subnetwork will be created automatically for the cluster. + // + // This field is only applicable when `use_ip_aliases` is true. + CreateSubnetwork bool `protobuf:"varint,2,opt,name=create_subnetwork,json=createSubnetwork" json:"create_subnetwork,omitempty"` + // A custom subnetwork name to be used if `create_subnetwork` is true. If + // this field is empty, then an automatic name will be chosen for the new + // subnetwork. + SubnetworkName string `protobuf:"bytes,3,opt,name=subnetwork_name,json=subnetworkName" json:"subnetwork_name,omitempty"` + // This field is deprecated, use cluster_ipv4_cidr_block. + ClusterIpv4Cidr string `protobuf:"bytes,4,opt,name=cluster_ipv4_cidr,json=clusterIpv4Cidr" json:"cluster_ipv4_cidr,omitempty"` + // This field is deprecated, use node_ipv4_cidr_block. + NodeIpv4Cidr string `protobuf:"bytes,5,opt,name=node_ipv4_cidr,json=nodeIpv4Cidr" json:"node_ipv4_cidr,omitempty"` + // This field is deprecated, use services_ipv4_cidr_block. + ServicesIpv4Cidr string `protobuf:"bytes,6,opt,name=services_ipv4_cidr,json=servicesIpv4Cidr" json:"services_ipv4_cidr,omitempty"` + // The name of the secondary range to be used for the cluster CIDR + // block. The secondary range will be used for pod IP + // addresses. This must be an existing secondary range associated + // with the cluster subnetwork. + // + // This field is only applicable with use_ip_aliases and + // create_subnetwork is false. + ClusterSecondaryRangeName string `protobuf:"bytes,7,opt,name=cluster_secondary_range_name,json=clusterSecondaryRangeName" json:"cluster_secondary_range_name,omitempty"` + // The name of the secondary range to be used as for the services + // CIDR block. The secondary range will be used for service + // ClusterIPs. This must be an existing secondary range associated + // with the cluster subnetwork. + // + // This field is only applicable with use_ip_aliases and + // create_subnetwork is false. + ServicesSecondaryRangeName string `protobuf:"bytes,8,opt,name=services_secondary_range_name,json=servicesSecondaryRangeName" json:"services_secondary_range_name,omitempty"` + // The IP address range for the cluster pod IPs. If this field is set, then + // `cluster.cluster_ipv4_cidr` must be left blank. + // + // This field is only applicable when `use_ip_aliases` is true. + // + // Set to blank to have a range chosen with the default size. + // + // Set to /netmask (e.g. `/14`) to have a range chosen with a specific + // netmask. + // + // Set to a + // [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) + // notation (e.g. `10.96.0.0/14`) from the RFC-1918 private networks (e.g. + // `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`) to pick a specific range + // to use. + ClusterIpv4CidrBlock string `protobuf:"bytes,9,opt,name=cluster_ipv4_cidr_block,json=clusterIpv4CidrBlock" json:"cluster_ipv4_cidr_block,omitempty"` + // The IP address range of the instance IPs in this cluster. + // + // This is applicable only if `create_subnetwork` is true. + // + // Set to blank to have a range chosen with the default size. + // + // Set to /netmask (e.g. `/14`) to have a range chosen with a specific + // netmask. + // + // Set to a + // [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) + // notation (e.g. `10.96.0.0/14`) from the RFC-1918 private networks (e.g. + // `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`) to pick a specific range + // to use. + NodeIpv4CidrBlock string `protobuf:"bytes,10,opt,name=node_ipv4_cidr_block,json=nodeIpv4CidrBlock" json:"node_ipv4_cidr_block,omitempty"` + // The IP address range of the services IPs in this cluster. If blank, a range + // will be automatically chosen with the default size. + // + // This field is only applicable when `use_ip_aliases` is true. + // + // Set to blank to have a range chosen with the default size. + // + // Set to /netmask (e.g. `/14`) to have a range chosen with a specific + // netmask. + // + // Set to a + // [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) + // notation (e.g. `10.96.0.0/14`) from the RFC-1918 private networks (e.g. + // `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`) to pick a specific range + // to use. + ServicesIpv4CidrBlock string `protobuf:"bytes,11,opt,name=services_ipv4_cidr_block,json=servicesIpv4CidrBlock" json:"services_ipv4_cidr_block,omitempty"` +} + +func (m *IPAllocationPolicy) Reset() { *m = IPAllocationPolicy{} } +func (m *IPAllocationPolicy) String() string { return proto.CompactTextString(m) } +func (*IPAllocationPolicy) ProtoMessage() {} +func (*IPAllocationPolicy) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *IPAllocationPolicy) GetUseIpAliases() bool { + if m != nil { + return m.UseIpAliases + } + return false +} + +func (m *IPAllocationPolicy) GetCreateSubnetwork() bool { + if m != nil { + return m.CreateSubnetwork + } + return false +} + +func (m *IPAllocationPolicy) GetSubnetworkName() string { + if m != nil { + return m.SubnetworkName + } + return "" +} + +func (m *IPAllocationPolicy) GetClusterIpv4Cidr() string { + if m != nil { + return m.ClusterIpv4Cidr + } + return "" +} + +func (m *IPAllocationPolicy) GetNodeIpv4Cidr() string { + if m != nil { + return m.NodeIpv4Cidr + } + return "" +} + +func (m *IPAllocationPolicy) GetServicesIpv4Cidr() string { + if m != nil { + return m.ServicesIpv4Cidr + } + return "" +} + +func (m *IPAllocationPolicy) GetClusterSecondaryRangeName() string { + if m != nil { + return m.ClusterSecondaryRangeName + } + return "" +} + +func (m *IPAllocationPolicy) GetServicesSecondaryRangeName() string { + if m != nil { + return m.ServicesSecondaryRangeName + } + return "" +} + +func (m *IPAllocationPolicy) GetClusterIpv4CidrBlock() string { + if m != nil { + return m.ClusterIpv4CidrBlock + } + return "" +} + +func (m *IPAllocationPolicy) GetNodeIpv4CidrBlock() string { + if m != nil { + return m.NodeIpv4CidrBlock + } + return "" +} + +func (m *IPAllocationPolicy) GetServicesIpv4CidrBlock() string { + if m != nil { + return m.ServicesIpv4CidrBlock + } + return "" +} + +// Configuration for the PodSecurityPolicy feature. +type PodSecurityPolicyConfig struct { + // Enable the PodSecurityPolicy controller for this cluster. If enabled, pods + // must be valid under a PodSecurityPolicy to be created. + Enabled bool `protobuf:"varint,1,opt,name=enabled" json:"enabled,omitempty"` +} + +func (m *PodSecurityPolicyConfig) Reset() { *m = PodSecurityPolicyConfig{} } +func (m *PodSecurityPolicyConfig) String() string { return proto.CompactTextString(m) } +func (*PodSecurityPolicyConfig) ProtoMessage() {} +func (*PodSecurityPolicyConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *PodSecurityPolicyConfig) GetEnabled() bool { + if m != nil { + return m.Enabled + } + return false +} + +// A Google Container Engine cluster. +type Cluster struct { + // The name of this cluster. The name must be unique within this project + // and zone, and can be up to 40 characters with the following restrictions: + // + // * Lowercase letters, numbers, and hyphens only. + // * Must start with a letter. + // * Must end with a number or a letter. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // An optional description of this cluster. + Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` + // The number of nodes to create in this cluster. You must ensure that your + // Compute Engine resource quota + // is sufficient for this number of instances. You must also have available + // firewall and routes quota. + // For requests, this field should only be used in lieu of a + // "node_pool" object, since this configuration (along with the + // "node_config") will be used to create a "NodePool" object with an + // auto-generated name. Do not use this and a node_pool at the same time. + InitialNodeCount int32 `protobuf:"varint,3,opt,name=initial_node_count,json=initialNodeCount" json:"initial_node_count,omitempty"` + // Parameters used in creating the cluster's nodes. + // See `nodeConfig` for the description of its properties. + // For requests, this field should only be used in lieu of a + // "node_pool" object, since this configuration (along with the + // "initial_node_count") will be used to create a "NodePool" object with an + // auto-generated name. Do not use this and a node_pool at the same time. + // For responses, this field will be populated with the node configuration of + // the first node pool. + // + // If unspecified, the defaults are used. + NodeConfig *NodeConfig `protobuf:"bytes,4,opt,name=node_config,json=nodeConfig" json:"node_config,omitempty"` + // The authentication information for accessing the master endpoint. + MasterAuth *MasterAuth `protobuf:"bytes,5,opt,name=master_auth,json=masterAuth" json:"master_auth,omitempty"` + // The logging service the cluster should use to write logs. + // Currently available options: + // + // * `logging.googleapis.com` - the Google Cloud Logging service. + // * `none` - no logs will be exported from the cluster. + // * if left as an empty string,`logging.googleapis.com` will be used. + LoggingService string `protobuf:"bytes,6,opt,name=logging_service,json=loggingService" json:"logging_service,omitempty"` + // The monitoring service the cluster should use to write metrics. + // Currently available options: + // + // * `monitoring.googleapis.com` - the Google Cloud Monitoring service. + // * `none` - no metrics will be exported from the cluster. + // * if left as an empty string, `monitoring.googleapis.com` will be used. + MonitoringService string `protobuf:"bytes,7,opt,name=monitoring_service,json=monitoringService" json:"monitoring_service,omitempty"` + // The name of the Google Compute Engine + // [network](/compute/docs/networks-and-firewalls#networks) to which the + // cluster is connected. If left unspecified, the `default` network + // will be used. + Network string `protobuf:"bytes,8,opt,name=network" json:"network,omitempty"` + // The IP address range of the container pods in this cluster, in + // [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) + // notation (e.g. `10.96.0.0/14`). Leave blank to have + // one automatically chosen or specify a `/14` block in `10.0.0.0/8`. + ClusterIpv4Cidr string `protobuf:"bytes,9,opt,name=cluster_ipv4_cidr,json=clusterIpv4Cidr" json:"cluster_ipv4_cidr,omitempty"` + // Configurations for the various addons available to run in the cluster. + AddonsConfig *AddonsConfig `protobuf:"bytes,10,opt,name=addons_config,json=addonsConfig" json:"addons_config,omitempty"` + // The name of the Google Compute Engine + // [subnetwork](/compute/docs/subnetworks) to which the + // cluster is connected. + Subnetwork string `protobuf:"bytes,11,opt,name=subnetwork" json:"subnetwork,omitempty"` + // The node pools associated with this cluster. + // This field should not be set if "node_config" or "initial_node_count" are + // specified. + NodePools []*NodePool `protobuf:"bytes,12,rep,name=node_pools,json=nodePools" json:"node_pools,omitempty"` + // The list of Google Compute Engine + // [locations](/compute/docs/zones#available) in which the cluster's nodes + // should be located. + Locations []string `protobuf:"bytes,13,rep,name=locations" json:"locations,omitempty"` + // Kubernetes alpha features are enabled on this cluster. This includes alpha + // API groups (e.g. v1beta1) and features that may not be production ready in + // the kubernetes version of the master and nodes. + // The cluster has no SLA for uptime and master/node upgrades are disabled. + // Alpha enabled clusters are automatically deleted thirty days after + // creation. + EnableKubernetesAlpha bool `protobuf:"varint,14,opt,name=enable_kubernetes_alpha,json=enableKubernetesAlpha" json:"enable_kubernetes_alpha,omitempty"` + // Configuration options for the NetworkPolicy feature. + NetworkPolicy *NetworkPolicy `protobuf:"bytes,19,opt,name=network_policy,json=networkPolicy" json:"network_policy,omitempty"` + // Configuration for cluster IP allocation. + IpAllocationPolicy *IPAllocationPolicy `protobuf:"bytes,20,opt,name=ip_allocation_policy,json=ipAllocationPolicy" json:"ip_allocation_policy,omitempty"` + // The configuration options for master authorized networks feature. + MasterAuthorizedNetworksConfig *MasterAuthorizedNetworksConfig `protobuf:"bytes,22,opt,name=master_authorized_networks_config,json=masterAuthorizedNetworksConfig" json:"master_authorized_networks_config,omitempty"` + // Configure the maintenance policy for this cluster. + MaintenancePolicy *MaintenancePolicy `protobuf:"bytes,23,opt,name=maintenance_policy,json=maintenancePolicy" json:"maintenance_policy,omitempty"` + // Configuration for the PodSecurityPolicy feature. + PodSecurityPolicyConfig *PodSecurityPolicyConfig `protobuf:"bytes,25,opt,name=pod_security_policy_config,json=podSecurityPolicyConfig" json:"pod_security_policy_config,omitempty"` + // [Output only] Server-defined URL for the resource. + SelfLink string `protobuf:"bytes,100,opt,name=self_link,json=selfLink" json:"self_link,omitempty"` + // [Output only] The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use location instead. + Zone string `protobuf:"bytes,101,opt,name=zone" json:"zone,omitempty"` + // [Output only] The IP address of this cluster's master endpoint. + // The endpoint can be accessed from the internet at + // `https://username:password@endpoint/`. + // + // See the `masterAuth` property of this resource for username and + // password information. + Endpoint string `protobuf:"bytes,102,opt,name=endpoint" json:"endpoint,omitempty"` + // The initial Kubernetes version for this cluster. Valid versions are those + // found in validMasterVersions returned by getServerConfig. The version can + // be upgraded over time; such upgrades are reflected in + // currentMasterVersion and currentNodeVersion. + InitialClusterVersion string `protobuf:"bytes,103,opt,name=initial_cluster_version,json=initialClusterVersion" json:"initial_cluster_version,omitempty"` + // [Output only] The current software version of the master endpoint. + CurrentMasterVersion string `protobuf:"bytes,104,opt,name=current_master_version,json=currentMasterVersion" json:"current_master_version,omitempty"` + // [Output only] The current version of the node software components. + // If they are currently at multiple versions because they're in the process + // of being upgraded, this reflects the minimum version of all nodes. + CurrentNodeVersion string `protobuf:"bytes,105,opt,name=current_node_version,json=currentNodeVersion" json:"current_node_version,omitempty"` + // [Output only] The time the cluster was created, in + // [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format. + CreateTime string `protobuf:"bytes,106,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // [Output only] The current status of this cluster. + Status Cluster_Status `protobuf:"varint,107,opt,name=status,enum=google.container.v1beta1.Cluster_Status" json:"status,omitempty"` + // [Output only] Additional information about the current status of this + // cluster, if available. + StatusMessage string `protobuf:"bytes,108,opt,name=status_message,json=statusMessage" json:"status_message,omitempty"` + // [Output only] The size of the address space on each node for hosting + // containers. This is provisioned from within the `container_ipv4_cidr` + // range. + NodeIpv4CidrSize int32 `protobuf:"varint,109,opt,name=node_ipv4_cidr_size,json=nodeIpv4CidrSize" json:"node_ipv4_cidr_size,omitempty"` + // [Output only] The IP address range of the Kubernetes services in + // this cluster, in + // [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) + // notation (e.g. `1.2.3.4/29`). Service addresses are + // typically put in the last `/16` from the container CIDR. + ServicesIpv4Cidr string `protobuf:"bytes,110,opt,name=services_ipv4_cidr,json=servicesIpv4Cidr" json:"services_ipv4_cidr,omitempty"` + // [Output only] The resource URLs of [instance + // groups](/compute/docs/instance-groups/) associated with this + // cluster. + InstanceGroupUrls []string `protobuf:"bytes,111,rep,name=instance_group_urls,json=instanceGroupUrls" json:"instance_group_urls,omitempty"` + // [Output only] The number of nodes currently in the cluster. + CurrentNodeCount int32 `protobuf:"varint,112,opt,name=current_node_count,json=currentNodeCount" json:"current_node_count,omitempty"` + // [Output only] The time the cluster will be automatically + // deleted in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format. + ExpireTime string `protobuf:"bytes,113,opt,name=expire_time,json=expireTime" json:"expire_time,omitempty"` + // [Output only] The name of the Google Compute Engine + // [zone](/compute/docs/regions-zones/regions-zones#available) or + // [region](/compute/docs/regions-zones/regions-zones#available) in which + // the cluster resides. + Location string `protobuf:"bytes,114,opt,name=location" json:"location,omitempty"` +} + +func (m *Cluster) Reset() { *m = Cluster{} } +func (m *Cluster) String() string { return proto.CompactTextString(m) } +func (*Cluster) ProtoMessage() {} +func (*Cluster) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +func (m *Cluster) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Cluster) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *Cluster) GetInitialNodeCount() int32 { + if m != nil { + return m.InitialNodeCount + } + return 0 +} + +func (m *Cluster) GetNodeConfig() *NodeConfig { + if m != nil { + return m.NodeConfig + } + return nil +} + +func (m *Cluster) GetMasterAuth() *MasterAuth { + if m != nil { + return m.MasterAuth + } + return nil +} + +func (m *Cluster) GetLoggingService() string { + if m != nil { + return m.LoggingService + } + return "" +} + +func (m *Cluster) GetMonitoringService() string { + if m != nil { + return m.MonitoringService + } + return "" +} + +func (m *Cluster) GetNetwork() string { + if m != nil { + return m.Network + } + return "" +} + +func (m *Cluster) GetClusterIpv4Cidr() string { + if m != nil { + return m.ClusterIpv4Cidr + } + return "" +} + +func (m *Cluster) GetAddonsConfig() *AddonsConfig { + if m != nil { + return m.AddonsConfig + } + return nil +} + +func (m *Cluster) GetSubnetwork() string { + if m != nil { + return m.Subnetwork + } + return "" +} + +func (m *Cluster) GetNodePools() []*NodePool { + if m != nil { + return m.NodePools + } + return nil +} + +func (m *Cluster) GetLocations() []string { + if m != nil { + return m.Locations + } + return nil +} + +func (m *Cluster) GetEnableKubernetesAlpha() bool { + if m != nil { + return m.EnableKubernetesAlpha + } + return false +} + +func (m *Cluster) GetNetworkPolicy() *NetworkPolicy { + if m != nil { + return m.NetworkPolicy + } + return nil +} + +func (m *Cluster) GetIpAllocationPolicy() *IPAllocationPolicy { + if m != nil { + return m.IpAllocationPolicy + } + return nil +} + +func (m *Cluster) GetMasterAuthorizedNetworksConfig() *MasterAuthorizedNetworksConfig { + if m != nil { + return m.MasterAuthorizedNetworksConfig + } + return nil +} + +func (m *Cluster) GetMaintenancePolicy() *MaintenancePolicy { + if m != nil { + return m.MaintenancePolicy + } + return nil +} + +func (m *Cluster) GetPodSecurityPolicyConfig() *PodSecurityPolicyConfig { + if m != nil { + return m.PodSecurityPolicyConfig + } + return nil +} + +func (m *Cluster) GetSelfLink() string { + if m != nil { + return m.SelfLink + } + return "" +} + +func (m *Cluster) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *Cluster) GetEndpoint() string { + if m != nil { + return m.Endpoint + } + return "" +} + +func (m *Cluster) GetInitialClusterVersion() string { + if m != nil { + return m.InitialClusterVersion + } + return "" +} + +func (m *Cluster) GetCurrentMasterVersion() string { + if m != nil { + return m.CurrentMasterVersion + } + return "" +} + +func (m *Cluster) GetCurrentNodeVersion() string { + if m != nil { + return m.CurrentNodeVersion + } + return "" +} + +func (m *Cluster) GetCreateTime() string { + if m != nil { + return m.CreateTime + } + return "" +} + +func (m *Cluster) GetStatus() Cluster_Status { + if m != nil { + return m.Status + } + return Cluster_STATUS_UNSPECIFIED +} + +func (m *Cluster) GetStatusMessage() string { + if m != nil { + return m.StatusMessage + } + return "" +} + +func (m *Cluster) GetNodeIpv4CidrSize() int32 { + if m != nil { + return m.NodeIpv4CidrSize + } + return 0 +} + +func (m *Cluster) GetServicesIpv4Cidr() string { + if m != nil { + return m.ServicesIpv4Cidr + } + return "" +} + +func (m *Cluster) GetInstanceGroupUrls() []string { + if m != nil { + return m.InstanceGroupUrls + } + return nil +} + +func (m *Cluster) GetCurrentNodeCount() int32 { + if m != nil { + return m.CurrentNodeCount + } + return 0 +} + +func (m *Cluster) GetExpireTime() string { + if m != nil { + return m.ExpireTime + } + return "" +} + +func (m *Cluster) GetLocation() string { + if m != nil { + return m.Location + } + return "" +} + +// ClusterUpdate describes an update to the cluster. Exactly one update can +// be applied to a cluster with each request, so at most one field can be +// provided. +type ClusterUpdate struct { + // The Kubernetes version to change the nodes to (typically an + // upgrade). Use `-` to upgrade to the latest version supported by + // the server. + DesiredNodeVersion string `protobuf:"bytes,4,opt,name=desired_node_version,json=desiredNodeVersion" json:"desired_node_version,omitempty"` + // The monitoring service the cluster should use to write metrics. + // Currently available options: + // + // * "monitoring.googleapis.com" - the Google Cloud Monitoring service + // * "none" - no metrics will be exported from the cluster + DesiredMonitoringService string `protobuf:"bytes,5,opt,name=desired_monitoring_service,json=desiredMonitoringService" json:"desired_monitoring_service,omitempty"` + // Configurations for the various addons available to run in the cluster. + DesiredAddonsConfig *AddonsConfig `protobuf:"bytes,6,opt,name=desired_addons_config,json=desiredAddonsConfig" json:"desired_addons_config,omitempty"` + // The node pool to be upgraded. This field is mandatory if + // "desired_node_version", "desired_image_family" or + // "desired_node_pool_autoscaling" is specified and there is more than one + // node pool on the cluster. + DesiredNodePoolId string `protobuf:"bytes,7,opt,name=desired_node_pool_id,json=desiredNodePoolId" json:"desired_node_pool_id,omitempty"` + // The desired image type for the node pool. + // NOTE: Set the "desired_node_pool" field as well. + DesiredImageType string `protobuf:"bytes,8,opt,name=desired_image_type,json=desiredImageType" json:"desired_image_type,omitempty"` + // Autoscaler configuration for the node pool specified in + // desired_node_pool_id. If there is only one pool in the + // cluster and desired_node_pool_id is not provided then + // the change applies to that single node pool. + DesiredNodePoolAutoscaling *NodePoolAutoscaling `protobuf:"bytes,9,opt,name=desired_node_pool_autoscaling,json=desiredNodePoolAutoscaling" json:"desired_node_pool_autoscaling,omitempty"` + // The desired list of Google Compute Engine + // [locations](/compute/docs/zones#available) in which the cluster's nodes + // should be located. Changing the locations a cluster is in will result + // in nodes being either created or removed from the cluster, depending on + // whether locations are being added or removed. + // + // This list must always include the cluster's primary zone. + DesiredLocations []string `protobuf:"bytes,10,rep,name=desired_locations,json=desiredLocations" json:"desired_locations,omitempty"` + // The desired configuration options for master authorized networks feature. + DesiredMasterAuthorizedNetworksConfig *MasterAuthorizedNetworksConfig `protobuf:"bytes,12,opt,name=desired_master_authorized_networks_config,json=desiredMasterAuthorizedNetworksConfig" json:"desired_master_authorized_networks_config,omitempty"` + // The desired configuration options for the PodSecurityPolicy feature. + DesiredPodSecurityPolicyConfig *PodSecurityPolicyConfig `protobuf:"bytes,14,opt,name=desired_pod_security_policy_config,json=desiredPodSecurityPolicyConfig" json:"desired_pod_security_policy_config,omitempty"` + // The Kubernetes version to change the master to. The only valid value is the + // latest supported version. Use "-" to have the server automatically select + // the latest version. + DesiredMasterVersion string `protobuf:"bytes,100,opt,name=desired_master_version,json=desiredMasterVersion" json:"desired_master_version,omitempty"` +} + +func (m *ClusterUpdate) Reset() { *m = ClusterUpdate{} } +func (m *ClusterUpdate) String() string { return proto.CompactTextString(m) } +func (*ClusterUpdate) ProtoMessage() {} +func (*ClusterUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +func (m *ClusterUpdate) GetDesiredNodeVersion() string { + if m != nil { + return m.DesiredNodeVersion + } + return "" +} + +func (m *ClusterUpdate) GetDesiredMonitoringService() string { + if m != nil { + return m.DesiredMonitoringService + } + return "" +} + +func (m *ClusterUpdate) GetDesiredAddonsConfig() *AddonsConfig { + if m != nil { + return m.DesiredAddonsConfig + } + return nil +} + +func (m *ClusterUpdate) GetDesiredNodePoolId() string { + if m != nil { + return m.DesiredNodePoolId + } + return "" +} + +func (m *ClusterUpdate) GetDesiredImageType() string { + if m != nil { + return m.DesiredImageType + } + return "" +} + +func (m *ClusterUpdate) GetDesiredNodePoolAutoscaling() *NodePoolAutoscaling { + if m != nil { + return m.DesiredNodePoolAutoscaling + } + return nil +} + +func (m *ClusterUpdate) GetDesiredLocations() []string { + if m != nil { + return m.DesiredLocations + } + return nil +} + +func (m *ClusterUpdate) GetDesiredMasterAuthorizedNetworksConfig() *MasterAuthorizedNetworksConfig { + if m != nil { + return m.DesiredMasterAuthorizedNetworksConfig + } + return nil +} + +func (m *ClusterUpdate) GetDesiredPodSecurityPolicyConfig() *PodSecurityPolicyConfig { + if m != nil { + return m.DesiredPodSecurityPolicyConfig + } + return nil +} + +func (m *ClusterUpdate) GetDesiredMasterVersion() string { + if m != nil { + return m.DesiredMasterVersion + } + return "" +} + +// This operation resource represents operations that may have happened or are +// happening on the cluster. All fields are output only. +type Operation struct { + // The server-assigned ID for the operation. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the operation + // is taking place. + // This field is deprecated, use location instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The operation type. + OperationType Operation_Type `protobuf:"varint,3,opt,name=operation_type,json=operationType,enum=google.container.v1beta1.Operation_Type" json:"operation_type,omitempty"` + // The current status of the operation. + Status Operation_Status `protobuf:"varint,4,opt,name=status,enum=google.container.v1beta1.Operation_Status" json:"status,omitempty"` + // Detailed operation progress, if available. + Detail string `protobuf:"bytes,8,opt,name=detail" json:"detail,omitempty"` + // If an error has occurred, a textual description of the error. + StatusMessage string `protobuf:"bytes,5,opt,name=status_message,json=statusMessage" json:"status_message,omitempty"` + // Server-defined URL for the resource. + SelfLink string `protobuf:"bytes,6,opt,name=self_link,json=selfLink" json:"self_link,omitempty"` + // Server-defined URL for the target of the operation. + TargetLink string `protobuf:"bytes,7,opt,name=target_link,json=targetLink" json:"target_link,omitempty"` + // [Output only] The name of the Google Compute Engine + // [zone](/compute/docs/regions-zones/regions-zones#available) or + // [region](/compute/docs/regions-zones/regions-zones#available) in which + // the cluster resides. + Location string `protobuf:"bytes,9,opt,name=location" json:"location,omitempty"` + // [Output only] The time the operation started, in + // [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format. + StartTime string `protobuf:"bytes,10,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // [Output only] The time the operation completed, in + // [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format. + EndTime string `protobuf:"bytes,11,opt,name=end_time,json=endTime" json:"end_time,omitempty"` +} + +func (m *Operation) Reset() { *m = Operation{} } +func (m *Operation) String() string { return proto.CompactTextString(m) } +func (*Operation) ProtoMessage() {} +func (*Operation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +func (m *Operation) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Operation) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *Operation) GetOperationType() Operation_Type { + if m != nil { + return m.OperationType + } + return Operation_TYPE_UNSPECIFIED +} + +func (m *Operation) GetStatus() Operation_Status { + if m != nil { + return m.Status + } + return Operation_STATUS_UNSPECIFIED +} + +func (m *Operation) GetDetail() string { + if m != nil { + return m.Detail + } + return "" +} + +func (m *Operation) GetStatusMessage() string { + if m != nil { + return m.StatusMessage + } + return "" +} + +func (m *Operation) GetSelfLink() string { + if m != nil { + return m.SelfLink + } + return "" +} + +func (m *Operation) GetTargetLink() string { + if m != nil { + return m.TargetLink + } + return "" +} + +func (m *Operation) GetLocation() string { + if m != nil { + return m.Location + } + return "" +} + +func (m *Operation) GetStartTime() string { + if m != nil { + return m.StartTime + } + return "" +} + +func (m *Operation) GetEndTime() string { + if m != nil { + return m.EndTime + } + return "" +} + +// CreateClusterRequest creates a cluster. +type CreateClusterRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + // This field is deprecated, use parent instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use parent instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // A [cluster + // resource](/container-engine/reference/rest/v1beta1/projects.zones.clusters) + Cluster *Cluster `protobuf:"bytes,3,opt,name=cluster" json:"cluster,omitempty"` + // The parent (project and location) where the cluster will be created. + // Specified in the format 'projects/*/locations/*'. + Parent string `protobuf:"bytes,5,opt,name=parent" json:"parent,omitempty"` +} + +func (m *CreateClusterRequest) Reset() { *m = CreateClusterRequest{} } +func (m *CreateClusterRequest) String() string { return proto.CompactTextString(m) } +func (*CreateClusterRequest) ProtoMessage() {} +func (*CreateClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } + +func (m *CreateClusterRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *CreateClusterRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *CreateClusterRequest) GetCluster() *Cluster { + if m != nil { + return m.Cluster + } + return nil +} + +func (m *CreateClusterRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +// GetClusterRequest gets the settings of a cluster. +type GetClusterRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to retrieve. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The name (project, location, cluster) of the cluster to retrieve. + // Specified in the format 'projects/*/locations/*/clusters/*'. + Name string `protobuf:"bytes,5,opt,name=name" json:"name,omitempty"` +} + +func (m *GetClusterRequest) Reset() { *m = GetClusterRequest{} } +func (m *GetClusterRequest) String() string { return proto.CompactTextString(m) } +func (*GetClusterRequest) ProtoMessage() {} +func (*GetClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } + +func (m *GetClusterRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *GetClusterRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *GetClusterRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *GetClusterRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// UpdateClusterRequest updates the settings of a cluster. +type UpdateClusterRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to upgrade. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // A description of the update. + Update *ClusterUpdate `protobuf:"bytes,4,opt,name=update" json:"update,omitempty"` + // The name (project, location, cluster) of the cluster to update. + // Specified in the format 'projects/*/locations/*/clusters/*'. + Name string `protobuf:"bytes,5,opt,name=name" json:"name,omitempty"` +} + +func (m *UpdateClusterRequest) Reset() { *m = UpdateClusterRequest{} } +func (m *UpdateClusterRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateClusterRequest) ProtoMessage() {} +func (*UpdateClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } + +func (m *UpdateClusterRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *UpdateClusterRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *UpdateClusterRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *UpdateClusterRequest) GetUpdate() *ClusterUpdate { + if m != nil { + return m.Update + } + return nil +} + +func (m *UpdateClusterRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// SetMasterAuthRequest updates the admin password of a cluster. +type SetMasterAuthRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to upgrade. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The exact form of action to be taken on the master auth. + Action SetMasterAuthRequest_Action `protobuf:"varint,4,opt,name=action,enum=google.container.v1beta1.SetMasterAuthRequest_Action" json:"action,omitempty"` + // A description of the update. + Update *MasterAuth `protobuf:"bytes,5,opt,name=update" json:"update,omitempty"` + // The name (project, location, cluster) of the cluster to set auth. + // Specified in the format 'projects/*/locations/*/clusters/*'. + Name string `protobuf:"bytes,7,opt,name=name" json:"name,omitempty"` +} + +func (m *SetMasterAuthRequest) Reset() { *m = SetMasterAuthRequest{} } +func (m *SetMasterAuthRequest) String() string { return proto.CompactTextString(m) } +func (*SetMasterAuthRequest) ProtoMessage() {} +func (*SetMasterAuthRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } + +func (m *SetMasterAuthRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *SetMasterAuthRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *SetMasterAuthRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *SetMasterAuthRequest) GetAction() SetMasterAuthRequest_Action { + if m != nil { + return m.Action + } + return SetMasterAuthRequest_UNKNOWN +} + +func (m *SetMasterAuthRequest) GetUpdate() *MasterAuth { + if m != nil { + return m.Update + } + return nil +} + +func (m *SetMasterAuthRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// DeleteClusterRequest deletes a cluster. +type DeleteClusterRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to delete. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The name (project, location, cluster) of the cluster to delete. + // Specified in the format 'projects/*/locations/*/clusters/*'. + Name string `protobuf:"bytes,4,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteClusterRequest) Reset() { *m = DeleteClusterRequest{} } +func (m *DeleteClusterRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteClusterRequest) ProtoMessage() {} +func (*DeleteClusterRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } + +func (m *DeleteClusterRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *DeleteClusterRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *DeleteClusterRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *DeleteClusterRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// ListClustersRequest lists clusters. +type ListClustersRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + // This field is deprecated, use parent instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides, or "-" for all zones. + // This field is deprecated, use parent instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The parent (project and location) where the clusters will be listed. + // Specified in the format 'projects/*/locations/*'. + // Location "-" matches all zones and all regions. + Parent string `protobuf:"bytes,4,opt,name=parent" json:"parent,omitempty"` +} + +func (m *ListClustersRequest) Reset() { *m = ListClustersRequest{} } +func (m *ListClustersRequest) String() string { return proto.CompactTextString(m) } +func (*ListClustersRequest) ProtoMessage() {} +func (*ListClustersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } + +func (m *ListClustersRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *ListClustersRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *ListClustersRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +// ListClustersResponse is the result of ListClustersRequest. +type ListClustersResponse struct { + // A list of clusters in the project in the specified zone, or + // across all ones. + Clusters []*Cluster `protobuf:"bytes,1,rep,name=clusters" json:"clusters,omitempty"` + // If any zones are listed here, the list of clusters returned + // may be missing those zones. + MissingZones []string `protobuf:"bytes,2,rep,name=missing_zones,json=missingZones" json:"missing_zones,omitempty"` +} + +func (m *ListClustersResponse) Reset() { *m = ListClustersResponse{} } +func (m *ListClustersResponse) String() string { return proto.CompactTextString(m) } +func (*ListClustersResponse) ProtoMessage() {} +func (*ListClustersResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } + +func (m *ListClustersResponse) GetClusters() []*Cluster { + if m != nil { + return m.Clusters + } + return nil +} + +func (m *ListClustersResponse) GetMissingZones() []string { + if m != nil { + return m.MissingZones + } + return nil +} + +// GetOperationRequest gets a single operation. +type GetOperationRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The server-assigned `name` of the operation. + // This field is deprecated, use name instead. + OperationId string `protobuf:"bytes,3,opt,name=operation_id,json=operationId" json:"operation_id,omitempty"` + // The name (project, location, operation id) of the operation to get. + // Specified in the format 'projects/*/locations/*/operations/*'. + Name string `protobuf:"bytes,5,opt,name=name" json:"name,omitempty"` +} + +func (m *GetOperationRequest) Reset() { *m = GetOperationRequest{} } +func (m *GetOperationRequest) String() string { return proto.CompactTextString(m) } +func (*GetOperationRequest) ProtoMessage() {} +func (*GetOperationRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } + +func (m *GetOperationRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *GetOperationRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *GetOperationRequest) GetOperationId() string { + if m != nil { + return m.OperationId + } + return "" +} + +func (m *GetOperationRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// ListOperationsRequest lists operations. +type ListOperationsRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + // This field is deprecated, use parent instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine [zone](/compute/docs/zones#available) + // to return operations for, or `-` for all zones. + // This field is deprecated, use parent instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The parent (project and location) where the operations will be listed. + // Specified in the format 'projects/*/locations/*'. + // Location "-" matches all zones and all regions. + Parent string `protobuf:"bytes,4,opt,name=parent" json:"parent,omitempty"` +} + +func (m *ListOperationsRequest) Reset() { *m = ListOperationsRequest{} } +func (m *ListOperationsRequest) String() string { return proto.CompactTextString(m) } +func (*ListOperationsRequest) ProtoMessage() {} +func (*ListOperationsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} } + +func (m *ListOperationsRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *ListOperationsRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *ListOperationsRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +// CancelOperationRequest cancels a single operation. +type CancelOperationRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the operation resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The server-assigned `name` of the operation. + // This field is deprecated, use name instead. + OperationId string `protobuf:"bytes,3,opt,name=operation_id,json=operationId" json:"operation_id,omitempty"` + // The name (project, location, operation id) of the operation to cancel. + // Specified in the format 'projects/*/locations/*/operations/*'. + Name string `protobuf:"bytes,4,opt,name=name" json:"name,omitempty"` +} + +func (m *CancelOperationRequest) Reset() { *m = CancelOperationRequest{} } +func (m *CancelOperationRequest) String() string { return proto.CompactTextString(m) } +func (*CancelOperationRequest) ProtoMessage() {} +func (*CancelOperationRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } + +func (m *CancelOperationRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *CancelOperationRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *CancelOperationRequest) GetOperationId() string { + if m != nil { + return m.OperationId + } + return "" +} + +func (m *CancelOperationRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// ListOperationsResponse is the result of ListOperationsRequest. +type ListOperationsResponse struct { + // A list of operations in the project in the specified zone. + Operations []*Operation `protobuf:"bytes,1,rep,name=operations" json:"operations,omitempty"` + // If any zones are listed here, the list of operations returned + // may be missing the operations from those zones. + MissingZones []string `protobuf:"bytes,2,rep,name=missing_zones,json=missingZones" json:"missing_zones,omitempty"` +} + +func (m *ListOperationsResponse) Reset() { *m = ListOperationsResponse{} } +func (m *ListOperationsResponse) String() string { return proto.CompactTextString(m) } +func (*ListOperationsResponse) ProtoMessage() {} +func (*ListOperationsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} } + +func (m *ListOperationsResponse) GetOperations() []*Operation { + if m != nil { + return m.Operations + } + return nil +} + +func (m *ListOperationsResponse) GetMissingZones() []string { + if m != nil { + return m.MissingZones + } + return nil +} + +// Gets the current Container Engine service configuration. +type GetServerConfigRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine [zone](/compute/docs/zones#available) + // to return operations for. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name (project and location) of the server config to get + // Specified in the format 'projects/*/locations/*'. + Name string `protobuf:"bytes,4,opt,name=name" json:"name,omitempty"` +} + +func (m *GetServerConfigRequest) Reset() { *m = GetServerConfigRequest{} } +func (m *GetServerConfigRequest) String() string { return proto.CompactTextString(m) } +func (*GetServerConfigRequest) ProtoMessage() {} +func (*GetServerConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} } + +func (m *GetServerConfigRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *GetServerConfigRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *GetServerConfigRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Container Engine service configuration. +type ServerConfig struct { + // Version of Kubernetes the service deploys by default. + DefaultClusterVersion string `protobuf:"bytes,1,opt,name=default_cluster_version,json=defaultClusterVersion" json:"default_cluster_version,omitempty"` + // List of valid node upgrade target versions. + ValidNodeVersions []string `protobuf:"bytes,3,rep,name=valid_node_versions,json=validNodeVersions" json:"valid_node_versions,omitempty"` + // Default image type. + DefaultImageType string `protobuf:"bytes,4,opt,name=default_image_type,json=defaultImageType" json:"default_image_type,omitempty"` + // List of valid image types. + ValidImageTypes []string `protobuf:"bytes,5,rep,name=valid_image_types,json=validImageTypes" json:"valid_image_types,omitempty"` + // List of valid master versions. + ValidMasterVersions []string `protobuf:"bytes,6,rep,name=valid_master_versions,json=validMasterVersions" json:"valid_master_versions,omitempty"` +} + +func (m *ServerConfig) Reset() { *m = ServerConfig{} } +func (m *ServerConfig) String() string { return proto.CompactTextString(m) } +func (*ServerConfig) ProtoMessage() {} +func (*ServerConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} } + +func (m *ServerConfig) GetDefaultClusterVersion() string { + if m != nil { + return m.DefaultClusterVersion + } + return "" +} + +func (m *ServerConfig) GetValidNodeVersions() []string { + if m != nil { + return m.ValidNodeVersions + } + return nil +} + +func (m *ServerConfig) GetDefaultImageType() string { + if m != nil { + return m.DefaultImageType + } + return "" +} + +func (m *ServerConfig) GetValidImageTypes() []string { + if m != nil { + return m.ValidImageTypes + } + return nil +} + +func (m *ServerConfig) GetValidMasterVersions() []string { + if m != nil { + return m.ValidMasterVersions + } + return nil +} + +// CreateNodePoolRequest creates a node pool for a cluster. +type CreateNodePoolRequest struct { + // The Google Developers Console [project ID or project + // number](https://developers.google.com/console/help/new/#projectnumber). + // This field is deprecated, use parent instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use parent instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster. + // This field is deprecated, use parent instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The node pool to create. + NodePool *NodePool `protobuf:"bytes,4,opt,name=node_pool,json=nodePool" json:"node_pool,omitempty"` + // The parent (project, location, cluster id) where the node pool will be created. + // Specified in the format 'projects/*/locations/*/clusters/*/nodePools/*'. + Parent string `protobuf:"bytes,6,opt,name=parent" json:"parent,omitempty"` +} + +func (m *CreateNodePoolRequest) Reset() { *m = CreateNodePoolRequest{} } +func (m *CreateNodePoolRequest) String() string { return proto.CompactTextString(m) } +func (*CreateNodePoolRequest) ProtoMessage() {} +func (*CreateNodePoolRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} } + +func (m *CreateNodePoolRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *CreateNodePoolRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *CreateNodePoolRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *CreateNodePoolRequest) GetNodePool() *NodePool { + if m != nil { + return m.NodePool + } + return nil +} + +func (m *CreateNodePoolRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +// DeleteNodePoolRequest deletes a node pool for a cluster. +type DeleteNodePoolRequest struct { + // The Google Developers Console [project ID or project + // number](https://developers.google.com/console/help/new/#projectnumber). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The name of the node pool to delete. + // This field is deprecated, use name instead. + NodePoolId string `protobuf:"bytes,4,opt,name=node_pool_id,json=nodePoolId" json:"node_pool_id,omitempty"` + // The name (project, location, cluster, node pool id) of the node pool to delete. + // Specified in the format 'projects/*/locations/*/clusters/*/nodePools/*'. + Name string `protobuf:"bytes,6,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteNodePoolRequest) Reset() { *m = DeleteNodePoolRequest{} } +func (m *DeleteNodePoolRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteNodePoolRequest) ProtoMessage() {} +func (*DeleteNodePoolRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} } + +func (m *DeleteNodePoolRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *DeleteNodePoolRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *DeleteNodePoolRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *DeleteNodePoolRequest) GetNodePoolId() string { + if m != nil { + return m.NodePoolId + } + return "" +} + +func (m *DeleteNodePoolRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// ListNodePoolsRequest lists the node pool(s) for a cluster. +type ListNodePoolsRequest struct { + // The Google Developers Console [project ID or project + // number](https://developers.google.com/console/help/new/#projectnumber). + // This field is deprecated, use parent instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use parent instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster. + // This field is deprecated, use parent instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The parent (project, location, cluster id) where the node pools will be listed. + // Specified in the format 'projects/*/locations/*/clusters/*'. + Parent string `protobuf:"bytes,5,opt,name=parent" json:"parent,omitempty"` +} + +func (m *ListNodePoolsRequest) Reset() { *m = ListNodePoolsRequest{} } +func (m *ListNodePoolsRequest) String() string { return proto.CompactTextString(m) } +func (*ListNodePoolsRequest) ProtoMessage() {} +func (*ListNodePoolsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} } + +func (m *ListNodePoolsRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *ListNodePoolsRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *ListNodePoolsRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *ListNodePoolsRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +// GetNodePoolRequest retrieves a node pool for a cluster. +type GetNodePoolRequest struct { + // The Google Developers Console [project ID or project + // number](https://developers.google.com/console/help/new/#projectnumber). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The name of the node pool. + // This field is deprecated, use name instead. + NodePoolId string `protobuf:"bytes,4,opt,name=node_pool_id,json=nodePoolId" json:"node_pool_id,omitempty"` + // The name (project, location, cluster, node pool id) of the node pool to get. + // Specified in the format 'projects/*/locations/*/clusters/*/nodePools/*'. + Name string `protobuf:"bytes,6,opt,name=name" json:"name,omitempty"` +} + +func (m *GetNodePoolRequest) Reset() { *m = GetNodePoolRequest{} } +func (m *GetNodePoolRequest) String() string { return proto.CompactTextString(m) } +func (*GetNodePoolRequest) ProtoMessage() {} +func (*GetNodePoolRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} } + +func (m *GetNodePoolRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *GetNodePoolRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *GetNodePoolRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *GetNodePoolRequest) GetNodePoolId() string { + if m != nil { + return m.NodePoolId + } + return "" +} + +func (m *GetNodePoolRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// NodePool contains the name and configuration for a cluster's node pool. +// Node pools are a set of nodes (i.e. VM's), with a common configuration and +// specification, under the control of the cluster master. They may have a set +// of Kubernetes labels applied to them, which may be used to reference them +// during pod scheduling. They may also be resized up or down, to accommodate +// the workload. +type NodePool struct { + // The name of the node pool. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The node configuration of the pool. + Config *NodeConfig `protobuf:"bytes,2,opt,name=config" json:"config,omitempty"` + // The initial node count for the pool. You must ensure that your + // Compute Engine resource quota + // is sufficient for this number of instances. You must also have available + // firewall and routes quota. + InitialNodeCount int32 `protobuf:"varint,3,opt,name=initial_node_count,json=initialNodeCount" json:"initial_node_count,omitempty"` + // [Output only] Server-defined URL for the resource. + SelfLink string `protobuf:"bytes,100,opt,name=self_link,json=selfLink" json:"self_link,omitempty"` + // [Output only] The version of the Kubernetes of this node. + Version string `protobuf:"bytes,101,opt,name=version" json:"version,omitempty"` + // [Output only] The resource URLs of [instance + // groups](/compute/docs/instance-groups/) associated with this + // node pool. + InstanceGroupUrls []string `protobuf:"bytes,102,rep,name=instance_group_urls,json=instanceGroupUrls" json:"instance_group_urls,omitempty"` + // [Output only] The status of the nodes in this pool instance. + Status NodePool_Status `protobuf:"varint,103,opt,name=status,enum=google.container.v1beta1.NodePool_Status" json:"status,omitempty"` + // [Output only] Additional information about the current status of this + // node pool instance, if available. + StatusMessage string `protobuf:"bytes,104,opt,name=status_message,json=statusMessage" json:"status_message,omitempty"` + // Autoscaler configuration for this NodePool. Autoscaler is enabled + // only if a valid configuration is present. + Autoscaling *NodePoolAutoscaling `protobuf:"bytes,4,opt,name=autoscaling" json:"autoscaling,omitempty"` + // NodeManagement configuration for this NodePool. + Management *NodeManagement `protobuf:"bytes,5,opt,name=management" json:"management,omitempty"` +} + +func (m *NodePool) Reset() { *m = NodePool{} } +func (m *NodePool) String() string { return proto.CompactTextString(m) } +func (*NodePool) ProtoMessage() {} +func (*NodePool) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} } + +func (m *NodePool) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *NodePool) GetConfig() *NodeConfig { + if m != nil { + return m.Config + } + return nil +} + +func (m *NodePool) GetInitialNodeCount() int32 { + if m != nil { + return m.InitialNodeCount + } + return 0 +} + +func (m *NodePool) GetSelfLink() string { + if m != nil { + return m.SelfLink + } + return "" +} + +func (m *NodePool) GetVersion() string { + if m != nil { + return m.Version + } + return "" +} + +func (m *NodePool) GetInstanceGroupUrls() []string { + if m != nil { + return m.InstanceGroupUrls + } + return nil +} + +func (m *NodePool) GetStatus() NodePool_Status { + if m != nil { + return m.Status + } + return NodePool_STATUS_UNSPECIFIED +} + +func (m *NodePool) GetStatusMessage() string { + if m != nil { + return m.StatusMessage + } + return "" +} + +func (m *NodePool) GetAutoscaling() *NodePoolAutoscaling { + if m != nil { + return m.Autoscaling + } + return nil +} + +func (m *NodePool) GetManagement() *NodeManagement { + if m != nil { + return m.Management + } + return nil +} + +// NodeManagement defines the set of node management services turned on for the +// node pool. +type NodeManagement struct { + // Whether the nodes will be automatically upgraded. + AutoUpgrade bool `protobuf:"varint,1,opt,name=auto_upgrade,json=autoUpgrade" json:"auto_upgrade,omitempty"` + // Whether the nodes will be automatically repaired. + AutoRepair bool `protobuf:"varint,2,opt,name=auto_repair,json=autoRepair" json:"auto_repair,omitempty"` + // Specifies the Auto Upgrade knobs for the node pool. + UpgradeOptions *AutoUpgradeOptions `protobuf:"bytes,10,opt,name=upgrade_options,json=upgradeOptions" json:"upgrade_options,omitempty"` +} + +func (m *NodeManagement) Reset() { *m = NodeManagement{} } +func (m *NodeManagement) String() string { return proto.CompactTextString(m) } +func (*NodeManagement) ProtoMessage() {} +func (*NodeManagement) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} } + +func (m *NodeManagement) GetAutoUpgrade() bool { + if m != nil { + return m.AutoUpgrade + } + return false +} + +func (m *NodeManagement) GetAutoRepair() bool { + if m != nil { + return m.AutoRepair + } + return false +} + +func (m *NodeManagement) GetUpgradeOptions() *AutoUpgradeOptions { + if m != nil { + return m.UpgradeOptions + } + return nil +} + +// AutoUpgradeOptions defines the set of options for the user to control how +// the Auto Upgrades will proceed. +type AutoUpgradeOptions struct { + // [Output only] This field is set when upgrades are about to commence + // with the approximate start time for the upgrades, in + // [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format. + AutoUpgradeStartTime string `protobuf:"bytes,1,opt,name=auto_upgrade_start_time,json=autoUpgradeStartTime" json:"auto_upgrade_start_time,omitempty"` + // [Output only] This field is set when upgrades are about to commence + // with the description of the upgrade. + Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` +} + +func (m *AutoUpgradeOptions) Reset() { *m = AutoUpgradeOptions{} } +func (m *AutoUpgradeOptions) String() string { return proto.CompactTextString(m) } +func (*AutoUpgradeOptions) ProtoMessage() {} +func (*AutoUpgradeOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} } + +func (m *AutoUpgradeOptions) GetAutoUpgradeStartTime() string { + if m != nil { + return m.AutoUpgradeStartTime + } + return "" +} + +func (m *AutoUpgradeOptions) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +// MaintenancePolicy defines the maintenance policy to be used for the cluster. +type MaintenancePolicy struct { + // Specifies the maintenance window in which maintenance may be performed. + Window *MaintenanceWindow `protobuf:"bytes,1,opt,name=window" json:"window,omitempty"` +} + +func (m *MaintenancePolicy) Reset() { *m = MaintenancePolicy{} } +func (m *MaintenancePolicy) String() string { return proto.CompactTextString(m) } +func (*MaintenancePolicy) ProtoMessage() {} +func (*MaintenancePolicy) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} } + +func (m *MaintenancePolicy) GetWindow() *MaintenanceWindow { + if m != nil { + return m.Window + } + return nil +} + +// MaintenanceWindow defines the maintenance window to be used for the cluster. +type MaintenanceWindow struct { + // Unimplemented, reserved for future use. + // HourlyMaintenanceWindow hourly_maintenance_window = 1; + // + // Types that are valid to be assigned to Policy: + // *MaintenanceWindow_DailyMaintenanceWindow + Policy isMaintenanceWindow_Policy `protobuf_oneof:"policy"` +} + +func (m *MaintenanceWindow) Reset() { *m = MaintenanceWindow{} } +func (m *MaintenanceWindow) String() string { return proto.CompactTextString(m) } +func (*MaintenanceWindow) ProtoMessage() {} +func (*MaintenanceWindow) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} } + +type isMaintenanceWindow_Policy interface { + isMaintenanceWindow_Policy() +} + +type MaintenanceWindow_DailyMaintenanceWindow struct { + DailyMaintenanceWindow *DailyMaintenanceWindow `protobuf:"bytes,2,opt,name=daily_maintenance_window,json=dailyMaintenanceWindow,oneof"` +} + +func (*MaintenanceWindow_DailyMaintenanceWindow) isMaintenanceWindow_Policy() {} + +func (m *MaintenanceWindow) GetPolicy() isMaintenanceWindow_Policy { + if m != nil { + return m.Policy + } + return nil +} + +func (m *MaintenanceWindow) GetDailyMaintenanceWindow() *DailyMaintenanceWindow { + if x, ok := m.GetPolicy().(*MaintenanceWindow_DailyMaintenanceWindow); ok { + return x.DailyMaintenanceWindow + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*MaintenanceWindow) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _MaintenanceWindow_OneofMarshaler, _MaintenanceWindow_OneofUnmarshaler, _MaintenanceWindow_OneofSizer, []interface{}{ + (*MaintenanceWindow_DailyMaintenanceWindow)(nil), + } +} + +func _MaintenanceWindow_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*MaintenanceWindow) + // policy + switch x := m.Policy.(type) { + case *MaintenanceWindow_DailyMaintenanceWindow: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DailyMaintenanceWindow); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("MaintenanceWindow.Policy has unexpected type %T", x) + } + return nil +} + +func _MaintenanceWindow_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*MaintenanceWindow) + switch tag { + case 2: // policy.daily_maintenance_window + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(DailyMaintenanceWindow) + err := b.DecodeMessage(msg) + m.Policy = &MaintenanceWindow_DailyMaintenanceWindow{msg} + return true, err + default: + return false, nil + } +} + +func _MaintenanceWindow_OneofSizer(msg proto.Message) (n int) { + m := msg.(*MaintenanceWindow) + // policy + switch x := m.Policy.(type) { + case *MaintenanceWindow_DailyMaintenanceWindow: + s := proto.Size(x.DailyMaintenanceWindow) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Time window specified for daily maintenance operations. +type DailyMaintenanceWindow struct { + // Time within the maintenance window to start the maintenance operations. + // It must be in format "HH:MM”, where HH : [00-23] and MM : [00-59] GMT. + StartTime string `protobuf:"bytes,2,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // [Output only] Duration of the time window, automatically chosen to be + // smallest possible in the given scenario. + Duration string `protobuf:"bytes,3,opt,name=duration" json:"duration,omitempty"` +} + +func (m *DailyMaintenanceWindow) Reset() { *m = DailyMaintenanceWindow{} } +func (m *DailyMaintenanceWindow) String() string { return proto.CompactTextString(m) } +func (*DailyMaintenanceWindow) ProtoMessage() {} +func (*DailyMaintenanceWindow) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} } + +func (m *DailyMaintenanceWindow) GetStartTime() string { + if m != nil { + return m.StartTime + } + return "" +} + +func (m *DailyMaintenanceWindow) GetDuration() string { + if m != nil { + return m.Duration + } + return "" +} + +// SetNodePoolManagementRequest sets the node management properties of a node +// pool. +type SetNodePoolManagementRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to update. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The name of the node pool to update. + // This field is deprecated, use name instead. + NodePoolId string `protobuf:"bytes,4,opt,name=node_pool_id,json=nodePoolId" json:"node_pool_id,omitempty"` + // NodeManagement configuration for the node pool. + Management *NodeManagement `protobuf:"bytes,5,opt,name=management" json:"management,omitempty"` + // The name (project, location, cluster, node pool id) of the node pool to set + // management properties. Specified in the format + // 'projects/*/locations/*/clusters/*/nodePools/*'. + Name string `protobuf:"bytes,7,opt,name=name" json:"name,omitempty"` +} + +func (m *SetNodePoolManagementRequest) Reset() { *m = SetNodePoolManagementRequest{} } +func (m *SetNodePoolManagementRequest) String() string { return proto.CompactTextString(m) } +func (*SetNodePoolManagementRequest) ProtoMessage() {} +func (*SetNodePoolManagementRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} } + +func (m *SetNodePoolManagementRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *SetNodePoolManagementRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *SetNodePoolManagementRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *SetNodePoolManagementRequest) GetNodePoolId() string { + if m != nil { + return m.NodePoolId + } + return "" +} + +func (m *SetNodePoolManagementRequest) GetManagement() *NodeManagement { + if m != nil { + return m.Management + } + return nil +} + +func (m *SetNodePoolManagementRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// RollbackNodePoolUpgradeRequest rollbacks the previously Aborted or Failed +// NodePool upgrade. This will be an no-op if the last upgrade successfully +// completed. +type RollbackNodePoolUpgradeRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to rollback. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The name of the node pool to rollback. + // This field is deprecated, use name instead. + NodePoolId string `protobuf:"bytes,4,opt,name=node_pool_id,json=nodePoolId" json:"node_pool_id,omitempty"` + // The name (project, location, cluster, node pool id) of the node poll to + // rollback upgrade. + // Specified in the format 'projects/*/locations/*/clusters/*/nodePools/*'. + Name string `protobuf:"bytes,6,opt,name=name" json:"name,omitempty"` +} + +func (m *RollbackNodePoolUpgradeRequest) Reset() { *m = RollbackNodePoolUpgradeRequest{} } +func (m *RollbackNodePoolUpgradeRequest) String() string { return proto.CompactTextString(m) } +func (*RollbackNodePoolUpgradeRequest) ProtoMessage() {} +func (*RollbackNodePoolUpgradeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} } + +func (m *RollbackNodePoolUpgradeRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *RollbackNodePoolUpgradeRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *RollbackNodePoolUpgradeRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *RollbackNodePoolUpgradeRequest) GetNodePoolId() string { + if m != nil { + return m.NodePoolId + } + return "" +} + +func (m *RollbackNodePoolUpgradeRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// ListNodePoolsResponse is the result of ListNodePoolsRequest. +type ListNodePoolsResponse struct { + // A list of node pools for a cluster. + NodePools []*NodePool `protobuf:"bytes,1,rep,name=node_pools,json=nodePools" json:"node_pools,omitempty"` +} + +func (m *ListNodePoolsResponse) Reset() { *m = ListNodePoolsResponse{} } +func (m *ListNodePoolsResponse) String() string { return proto.CompactTextString(m) } +func (*ListNodePoolsResponse) ProtoMessage() {} +func (*ListNodePoolsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41} } + +func (m *ListNodePoolsResponse) GetNodePools() []*NodePool { + if m != nil { + return m.NodePools + } + return nil +} + +// NodePoolAutoscaling contains information required by cluster autoscaler to +// adjust the size of the node pool to the current cluster usage. +type NodePoolAutoscaling struct { + // Is autoscaling enabled for this node pool. + Enabled bool `protobuf:"varint,1,opt,name=enabled" json:"enabled,omitempty"` + // Minimum number of nodes in the NodePool. Must be >= 1 and <= + // max_node_count. + MinNodeCount int32 `protobuf:"varint,2,opt,name=min_node_count,json=minNodeCount" json:"min_node_count,omitempty"` + // Maximum number of nodes in the NodePool. Must be >= min_node_count. There + // has to enough quota to scale up the cluster. + MaxNodeCount int32 `protobuf:"varint,3,opt,name=max_node_count,json=maxNodeCount" json:"max_node_count,omitempty"` +} + +func (m *NodePoolAutoscaling) Reset() { *m = NodePoolAutoscaling{} } +func (m *NodePoolAutoscaling) String() string { return proto.CompactTextString(m) } +func (*NodePoolAutoscaling) ProtoMessage() {} +func (*NodePoolAutoscaling) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{42} } + +func (m *NodePoolAutoscaling) GetEnabled() bool { + if m != nil { + return m.Enabled + } + return false +} + +func (m *NodePoolAutoscaling) GetMinNodeCount() int32 { + if m != nil { + return m.MinNodeCount + } + return 0 +} + +func (m *NodePoolAutoscaling) GetMaxNodeCount() int32 { + if m != nil { + return m.MaxNodeCount + } + return 0 +} + +// SetLabelsRequest sets the Google Cloud Platform labels on a Google Container +// Engine cluster, which will in turn set them for Google Compute Engine +// resources used by that cluster +type SetLabelsRequest struct { + // The Google Developers Console [project ID or project + // number](https://developers.google.com/console/help/new/#projectnumber). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The labels to set for that cluster. + ResourceLabels map[string]string `protobuf:"bytes,4,rep,name=resource_labels,json=resourceLabels" json:"resource_labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // The fingerprint of the previous set of labels for this resource, + // used to detect conflicts. The fingerprint is initially generated by + // Container Engine and changes after every request to modify or update + // labels. You must always provide an up-to-date fingerprint hash when + // updating or changing labels. Make a get() request to the + // resource to get the latest fingerprint. + LabelFingerprint string `protobuf:"bytes,5,opt,name=label_fingerprint,json=labelFingerprint" json:"label_fingerprint,omitempty"` + // The name (project, location, cluster id) of the cluster to set labels. + // Specified in the format 'projects/*/locations/*/clusters/*'. + Name string `protobuf:"bytes,7,opt,name=name" json:"name,omitempty"` +} + +func (m *SetLabelsRequest) Reset() { *m = SetLabelsRequest{} } +func (m *SetLabelsRequest) String() string { return proto.CompactTextString(m) } +func (*SetLabelsRequest) ProtoMessage() {} +func (*SetLabelsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{43} } + +func (m *SetLabelsRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *SetLabelsRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *SetLabelsRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *SetLabelsRequest) GetResourceLabels() map[string]string { + if m != nil { + return m.ResourceLabels + } + return nil +} + +func (m *SetLabelsRequest) GetLabelFingerprint() string { + if m != nil { + return m.LabelFingerprint + } + return "" +} + +func (m *SetLabelsRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// SetLegacyAbacRequest enables or disables the ABAC authorization mechanism for +// a cluster. +type SetLegacyAbacRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to update. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // Whether ABAC authorization will be enabled in the cluster. + Enabled bool `protobuf:"varint,4,opt,name=enabled" json:"enabled,omitempty"` + // The name (project, location, cluster id) of the cluster to set legacy abac. + // Specified in the format 'projects/*/locations/*/clusters/*'. + Name string `protobuf:"bytes,6,opt,name=name" json:"name,omitempty"` +} + +func (m *SetLegacyAbacRequest) Reset() { *m = SetLegacyAbacRequest{} } +func (m *SetLegacyAbacRequest) String() string { return proto.CompactTextString(m) } +func (*SetLegacyAbacRequest) ProtoMessage() {} +func (*SetLegacyAbacRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{44} } + +func (m *SetLegacyAbacRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *SetLegacyAbacRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *SetLegacyAbacRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *SetLegacyAbacRequest) GetEnabled() bool { + if m != nil { + return m.Enabled + } + return false +} + +func (m *SetLegacyAbacRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// StartIPRotationRequest creates a new IP for the cluster and then performs +// a node upgrade on each node pool to point to the new IP. +type StartIPRotationRequest struct { + // The Google Developers Console [project ID or project + // number](https://developers.google.com/console/help/new/#projectnumber). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The name (project, location, cluster id) of the cluster to start IP rotation. + // Specified in the format 'projects/*/locations/*/clusters/*'. + Name string `protobuf:"bytes,6,opt,name=name" json:"name,omitempty"` +} + +func (m *StartIPRotationRequest) Reset() { *m = StartIPRotationRequest{} } +func (m *StartIPRotationRequest) String() string { return proto.CompactTextString(m) } +func (*StartIPRotationRequest) ProtoMessage() {} +func (*StartIPRotationRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{45} } + +func (m *StartIPRotationRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *StartIPRotationRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *StartIPRotationRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *StartIPRotationRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// CompleteIPRotationRequest moves the cluster master back into single-IP mode. +type CompleteIPRotationRequest struct { + // The Google Developers Console [project ID or project + // number](https://developers.google.com/console/help/new/#projectnumber). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The name (project, location, cluster id) of the cluster to complete IP rotation. + // Specified in the format 'projects/*/locations/*/clusters/*'. + Name string `protobuf:"bytes,7,opt,name=name" json:"name,omitempty"` +} + +func (m *CompleteIPRotationRequest) Reset() { *m = CompleteIPRotationRequest{} } +func (m *CompleteIPRotationRequest) String() string { return proto.CompactTextString(m) } +func (*CompleteIPRotationRequest) ProtoMessage() {} +func (*CompleteIPRotationRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{46} } + +func (m *CompleteIPRotationRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *CompleteIPRotationRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *CompleteIPRotationRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *CompleteIPRotationRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// AcceleratorConfig represents a Hardware Accelerator request. +type AcceleratorConfig struct { + // The number of the accelerator cards exposed to an instance. + AcceleratorCount int64 `protobuf:"varint,1,opt,name=accelerator_count,json=acceleratorCount" json:"accelerator_count,omitempty"` + // The accelerator type resource name. List of supported accelerators + // [here](/compute/docs/gpus/#Introduction) + AcceleratorType string `protobuf:"bytes,2,opt,name=accelerator_type,json=acceleratorType" json:"accelerator_type,omitempty"` +} + +func (m *AcceleratorConfig) Reset() { *m = AcceleratorConfig{} } +func (m *AcceleratorConfig) String() string { return proto.CompactTextString(m) } +func (*AcceleratorConfig) ProtoMessage() {} +func (*AcceleratorConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{47} } + +func (m *AcceleratorConfig) GetAcceleratorCount() int64 { + if m != nil { + return m.AcceleratorCount + } + return 0 +} + +func (m *AcceleratorConfig) GetAcceleratorType() string { + if m != nil { + return m.AcceleratorType + } + return "" +} + +// SetNetworkPolicyRequest enables/disables network policy for a cluster. +type SetNetworkPolicyRequest struct { + // The Google Developers Console [project ID or project + // number](https://developers.google.com/console/help/new/#projectnumber). + // This field is deprecated, use name instead. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + // This field is deprecated, use name instead. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster. + // This field is deprecated, use name instead. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // Configuration options for the NetworkPolicy feature. + NetworkPolicy *NetworkPolicy `protobuf:"bytes,4,opt,name=network_policy,json=networkPolicy" json:"network_policy,omitempty"` + // The name (project, location, cluster id) of the cluster to set networking policy. + // Specified in the format 'projects/*/locations/*/clusters/*'. + Name string `protobuf:"bytes,6,opt,name=name" json:"name,omitempty"` +} + +func (m *SetNetworkPolicyRequest) Reset() { *m = SetNetworkPolicyRequest{} } +func (m *SetNetworkPolicyRequest) String() string { return proto.CompactTextString(m) } +func (*SetNetworkPolicyRequest) ProtoMessage() {} +func (*SetNetworkPolicyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{48} } + +func (m *SetNetworkPolicyRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *SetNetworkPolicyRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *SetNetworkPolicyRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *SetNetworkPolicyRequest) GetNetworkPolicy() *NetworkPolicy { + if m != nil { + return m.NetworkPolicy + } + return nil +} + +func (m *SetNetworkPolicyRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// SetMaintenancePolicyRequest sets the maintenance policy for a cluster. +type SetMaintenancePolicyRequest struct { + // The Google Developers Console [project ID or project + // number](https://support.google.com/cloud/answer/6158840). + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the Google Compute Engine + // [zone](/compute/docs/zones#available) in which the cluster + // resides. + Zone string `protobuf:"bytes,2,opt,name=zone" json:"zone,omitempty"` + // The name of the cluster to update. + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId" json:"cluster_id,omitempty"` + // The maintenance policy to be set for the cluster. An empty field + // clears the existing maintenance policy. + MaintenancePolicy *MaintenancePolicy `protobuf:"bytes,4,opt,name=maintenance_policy,json=maintenancePolicy" json:"maintenance_policy,omitempty"` + // The name (project, location, cluster id) of the cluster to set maintenance + // policy. + // Specified in the format 'projects/*/locations/*/clusters/*'. + Name string `protobuf:"bytes,5,opt,name=name" json:"name,omitempty"` +} + +func (m *SetMaintenancePolicyRequest) Reset() { *m = SetMaintenancePolicyRequest{} } +func (m *SetMaintenancePolicyRequest) String() string { return proto.CompactTextString(m) } +func (*SetMaintenancePolicyRequest) ProtoMessage() {} +func (*SetMaintenancePolicyRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{49} } + +func (m *SetMaintenancePolicyRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *SetMaintenancePolicyRequest) GetZone() string { + if m != nil { + return m.Zone + } + return "" +} + +func (m *SetMaintenancePolicyRequest) GetClusterId() string { + if m != nil { + return m.ClusterId + } + return "" +} + +func (m *SetMaintenancePolicyRequest) GetMaintenancePolicy() *MaintenancePolicy { + if m != nil { + return m.MaintenancePolicy + } + return nil +} + +func (m *SetMaintenancePolicyRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func init() { + proto.RegisterType((*NodeConfig)(nil), "google.container.v1beta1.NodeConfig") + proto.RegisterType((*NodeTaint)(nil), "google.container.v1beta1.NodeTaint") + proto.RegisterType((*MasterAuth)(nil), "google.container.v1beta1.MasterAuth") + proto.RegisterType((*ClientCertificateConfig)(nil), "google.container.v1beta1.ClientCertificateConfig") + proto.RegisterType((*AddonsConfig)(nil), "google.container.v1beta1.AddonsConfig") + proto.RegisterType((*HttpLoadBalancing)(nil), "google.container.v1beta1.HttpLoadBalancing") + proto.RegisterType((*HorizontalPodAutoscaling)(nil), "google.container.v1beta1.HorizontalPodAutoscaling") + proto.RegisterType((*KubernetesDashboard)(nil), "google.container.v1beta1.KubernetesDashboard") + proto.RegisterType((*NetworkPolicyConfig)(nil), "google.container.v1beta1.NetworkPolicyConfig") + proto.RegisterType((*MasterAuthorizedNetworksConfig)(nil), "google.container.v1beta1.MasterAuthorizedNetworksConfig") + proto.RegisterType((*MasterAuthorizedNetworksConfig_CidrBlock)(nil), "google.container.v1beta1.MasterAuthorizedNetworksConfig.CidrBlock") + proto.RegisterType((*NetworkPolicy)(nil), "google.container.v1beta1.NetworkPolicy") + proto.RegisterType((*IPAllocationPolicy)(nil), "google.container.v1beta1.IPAllocationPolicy") + proto.RegisterType((*PodSecurityPolicyConfig)(nil), "google.container.v1beta1.PodSecurityPolicyConfig") + proto.RegisterType((*Cluster)(nil), "google.container.v1beta1.Cluster") + proto.RegisterType((*ClusterUpdate)(nil), "google.container.v1beta1.ClusterUpdate") + proto.RegisterType((*Operation)(nil), "google.container.v1beta1.Operation") + proto.RegisterType((*CreateClusterRequest)(nil), "google.container.v1beta1.CreateClusterRequest") + proto.RegisterType((*GetClusterRequest)(nil), "google.container.v1beta1.GetClusterRequest") + proto.RegisterType((*UpdateClusterRequest)(nil), "google.container.v1beta1.UpdateClusterRequest") + proto.RegisterType((*SetMasterAuthRequest)(nil), "google.container.v1beta1.SetMasterAuthRequest") + proto.RegisterType((*DeleteClusterRequest)(nil), "google.container.v1beta1.DeleteClusterRequest") + proto.RegisterType((*ListClustersRequest)(nil), "google.container.v1beta1.ListClustersRequest") + proto.RegisterType((*ListClustersResponse)(nil), "google.container.v1beta1.ListClustersResponse") + proto.RegisterType((*GetOperationRequest)(nil), "google.container.v1beta1.GetOperationRequest") + proto.RegisterType((*ListOperationsRequest)(nil), "google.container.v1beta1.ListOperationsRequest") + proto.RegisterType((*CancelOperationRequest)(nil), "google.container.v1beta1.CancelOperationRequest") + proto.RegisterType((*ListOperationsResponse)(nil), "google.container.v1beta1.ListOperationsResponse") + proto.RegisterType((*GetServerConfigRequest)(nil), "google.container.v1beta1.GetServerConfigRequest") + proto.RegisterType((*ServerConfig)(nil), "google.container.v1beta1.ServerConfig") + proto.RegisterType((*CreateNodePoolRequest)(nil), "google.container.v1beta1.CreateNodePoolRequest") + proto.RegisterType((*DeleteNodePoolRequest)(nil), "google.container.v1beta1.DeleteNodePoolRequest") + proto.RegisterType((*ListNodePoolsRequest)(nil), "google.container.v1beta1.ListNodePoolsRequest") + proto.RegisterType((*GetNodePoolRequest)(nil), "google.container.v1beta1.GetNodePoolRequest") + proto.RegisterType((*NodePool)(nil), "google.container.v1beta1.NodePool") + proto.RegisterType((*NodeManagement)(nil), "google.container.v1beta1.NodeManagement") + proto.RegisterType((*AutoUpgradeOptions)(nil), "google.container.v1beta1.AutoUpgradeOptions") + proto.RegisterType((*MaintenancePolicy)(nil), "google.container.v1beta1.MaintenancePolicy") + proto.RegisterType((*MaintenanceWindow)(nil), "google.container.v1beta1.MaintenanceWindow") + proto.RegisterType((*DailyMaintenanceWindow)(nil), "google.container.v1beta1.DailyMaintenanceWindow") + proto.RegisterType((*SetNodePoolManagementRequest)(nil), "google.container.v1beta1.SetNodePoolManagementRequest") + proto.RegisterType((*RollbackNodePoolUpgradeRequest)(nil), "google.container.v1beta1.RollbackNodePoolUpgradeRequest") + proto.RegisterType((*ListNodePoolsResponse)(nil), "google.container.v1beta1.ListNodePoolsResponse") + proto.RegisterType((*NodePoolAutoscaling)(nil), "google.container.v1beta1.NodePoolAutoscaling") + proto.RegisterType((*SetLabelsRequest)(nil), "google.container.v1beta1.SetLabelsRequest") + proto.RegisterType((*SetLegacyAbacRequest)(nil), "google.container.v1beta1.SetLegacyAbacRequest") + proto.RegisterType((*StartIPRotationRequest)(nil), "google.container.v1beta1.StartIPRotationRequest") + proto.RegisterType((*CompleteIPRotationRequest)(nil), "google.container.v1beta1.CompleteIPRotationRequest") + proto.RegisterType((*AcceleratorConfig)(nil), "google.container.v1beta1.AcceleratorConfig") + proto.RegisterType((*SetNetworkPolicyRequest)(nil), "google.container.v1beta1.SetNetworkPolicyRequest") + proto.RegisterType((*SetMaintenancePolicyRequest)(nil), "google.container.v1beta1.SetMaintenancePolicyRequest") + proto.RegisterEnum("google.container.v1beta1.NodeTaint_Effect", NodeTaint_Effect_name, NodeTaint_Effect_value) + proto.RegisterEnum("google.container.v1beta1.NetworkPolicy_Provider", NetworkPolicy_Provider_name, NetworkPolicy_Provider_value) + proto.RegisterEnum("google.container.v1beta1.Cluster_Status", Cluster_Status_name, Cluster_Status_value) + proto.RegisterEnum("google.container.v1beta1.Operation_Status", Operation_Status_name, Operation_Status_value) + proto.RegisterEnum("google.container.v1beta1.Operation_Type", Operation_Type_name, Operation_Type_value) + proto.RegisterEnum("google.container.v1beta1.SetMasterAuthRequest_Action", SetMasterAuthRequest_Action_name, SetMasterAuthRequest_Action_value) + proto.RegisterEnum("google.container.v1beta1.NodePool_Status", NodePool_Status_name, NodePool_Status_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for ClusterManager service + +type ClusterManagerClient interface { + // Lists all clusters owned by a project in either the specified zone or all + // zones. + ListClusters(ctx context.Context, in *ListClustersRequest, opts ...grpc.CallOption) (*ListClustersResponse, error) + // Gets the details of a specific cluster. + GetCluster(ctx context.Context, in *GetClusterRequest, opts ...grpc.CallOption) (*Cluster, error) + // Creates a cluster, consisting of the specified number and type of Google + // Compute Engine instances. + // + // By default, the cluster is created in the project's + // [default network](/compute/docs/networks-and-firewalls#networks). + // + // One firewall is added for the cluster. After cluster creation, + // the cluster creates routes for each node to allow the containers + // on that node to communicate with all other instances in the + // cluster. + // + // Finally, an entry is added to the project's global metadata indicating + // which CIDR range is being used by the cluster. + CreateCluster(ctx context.Context, in *CreateClusterRequest, opts ...grpc.CallOption) (*Operation, error) + // Updates the settings of a specific cluster. + UpdateCluster(ctx context.Context, in *UpdateClusterRequest, opts ...grpc.CallOption) (*Operation, error) + // Used to set master auth materials. Currently supports :- + // Changing the admin password of a specific cluster. + // This can be either via password generation or explicitly set. + // Modify basic_auth.csv and reset the K8S API server. + SetMasterAuth(ctx context.Context, in *SetMasterAuthRequest, opts ...grpc.CallOption) (*Operation, error) + // Deletes the cluster, including the Kubernetes endpoint and all worker + // nodes. + // + // Firewalls and routes that were configured during cluster creation + // are also deleted. + // + // Other Google Compute Engine resources that might be in use by the cluster + // (e.g. load balancer resources) will not be deleted if they weren't present + // at the initial create time. + DeleteCluster(ctx context.Context, in *DeleteClusterRequest, opts ...grpc.CallOption) (*Operation, error) + // Lists all operations in a project in a specific zone or all zones. + ListOperations(ctx context.Context, in *ListOperationsRequest, opts ...grpc.CallOption) (*ListOperationsResponse, error) + // Gets the specified operation. + GetOperation(ctx context.Context, in *GetOperationRequest, opts ...grpc.CallOption) (*Operation, error) + // Cancels the specified operation. + CancelOperation(ctx context.Context, in *CancelOperationRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) + // Returns configuration info about the Container Engine service. + GetServerConfig(ctx context.Context, in *GetServerConfigRequest, opts ...grpc.CallOption) (*ServerConfig, error) + // Lists the node pools for a cluster. + ListNodePools(ctx context.Context, in *ListNodePoolsRequest, opts ...grpc.CallOption) (*ListNodePoolsResponse, error) + // Retrieves the node pool requested. + GetNodePool(ctx context.Context, in *GetNodePoolRequest, opts ...grpc.CallOption) (*NodePool, error) + // Creates a node pool for a cluster. + CreateNodePool(ctx context.Context, in *CreateNodePoolRequest, opts ...grpc.CallOption) (*Operation, error) + // Deletes a node pool from a cluster. + DeleteNodePool(ctx context.Context, in *DeleteNodePoolRequest, opts ...grpc.CallOption) (*Operation, error) + // Roll back the previously Aborted or Failed NodePool upgrade. + // This will be an no-op if the last upgrade successfully completed. + RollbackNodePoolUpgrade(ctx context.Context, in *RollbackNodePoolUpgradeRequest, opts ...grpc.CallOption) (*Operation, error) + // Sets the NodeManagement options for a node pool. + SetNodePoolManagement(ctx context.Context, in *SetNodePoolManagementRequest, opts ...grpc.CallOption) (*Operation, error) + // Sets labels on a cluster. + SetLabels(ctx context.Context, in *SetLabelsRequest, opts ...grpc.CallOption) (*Operation, error) + // Enables or disables the ABAC authorization mechanism on a cluster. + SetLegacyAbac(ctx context.Context, in *SetLegacyAbacRequest, opts ...grpc.CallOption) (*Operation, error) + // Start master IP rotation. + StartIPRotation(ctx context.Context, in *StartIPRotationRequest, opts ...grpc.CallOption) (*Operation, error) + // Completes master IP rotation. + CompleteIPRotation(ctx context.Context, in *CompleteIPRotationRequest, opts ...grpc.CallOption) (*Operation, error) + // Enables/Disables Network Policy for a cluster. + SetNetworkPolicy(ctx context.Context, in *SetNetworkPolicyRequest, opts ...grpc.CallOption) (*Operation, error) + // Sets the maintenance policy for a cluster. + SetMaintenancePolicy(ctx context.Context, in *SetMaintenancePolicyRequest, opts ...grpc.CallOption) (*Operation, error) +} + +type clusterManagerClient struct { + cc *grpc.ClientConn +} + +func NewClusterManagerClient(cc *grpc.ClientConn) ClusterManagerClient { + return &clusterManagerClient{cc} +} + +func (c *clusterManagerClient) ListClusters(ctx context.Context, in *ListClustersRequest, opts ...grpc.CallOption) (*ListClustersResponse, error) { + out := new(ListClustersResponse) + err := grpc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/ListClusters", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) GetCluster(ctx context.Context, in *GetClusterRequest, opts ...grpc.CallOption) (*Cluster, error) { + out := new(Cluster) + err := grpc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/GetCluster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) CreateCluster(ctx context.Context, in *CreateClusterRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/CreateCluster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) UpdateCluster(ctx context.Context, in *UpdateClusterRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/UpdateCluster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) SetMasterAuth(ctx context.Context, in *SetMasterAuthRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/SetMasterAuth", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) DeleteCluster(ctx context.Context, in *DeleteClusterRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/DeleteCluster", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) ListOperations(ctx context.Context, in *ListOperationsRequest, opts ...grpc.CallOption) (*ListOperationsResponse, error) { + out := new(ListOperationsResponse) + err := grpc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/ListOperations", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) GetOperation(ctx context.Context, in *GetOperationRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/GetOperation", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) CancelOperation(ctx context.Context, in *CancelOperationRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) { + out := new(google_protobuf1.Empty) + err := grpc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/CancelOperation", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) GetServerConfig(ctx context.Context, in *GetServerConfigRequest, opts ...grpc.CallOption) (*ServerConfig, error) { + out := new(ServerConfig) + err := grpc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/GetServerConfig", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) ListNodePools(ctx context.Context, in *ListNodePoolsRequest, opts ...grpc.CallOption) (*ListNodePoolsResponse, error) { + out := new(ListNodePoolsResponse) + err := grpc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/ListNodePools", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) GetNodePool(ctx context.Context, in *GetNodePoolRequest, opts ...grpc.CallOption) (*NodePool, error) { + out := new(NodePool) + err := grpc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/GetNodePool", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) CreateNodePool(ctx context.Context, in *CreateNodePoolRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/CreateNodePool", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) DeleteNodePool(ctx context.Context, in *DeleteNodePoolRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/DeleteNodePool", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) RollbackNodePoolUpgrade(ctx context.Context, in *RollbackNodePoolUpgradeRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/RollbackNodePoolUpgrade", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) SetNodePoolManagement(ctx context.Context, in *SetNodePoolManagementRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/SetNodePoolManagement", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) SetLabels(ctx context.Context, in *SetLabelsRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/SetLabels", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) SetLegacyAbac(ctx context.Context, in *SetLegacyAbacRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/SetLegacyAbac", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) StartIPRotation(ctx context.Context, in *StartIPRotationRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/StartIPRotation", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) CompleteIPRotation(ctx context.Context, in *CompleteIPRotationRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/CompleteIPRotation", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) SetNetworkPolicy(ctx context.Context, in *SetNetworkPolicyRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/SetNetworkPolicy", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterManagerClient) SetMaintenancePolicy(ctx context.Context, in *SetMaintenancePolicyRequest, opts ...grpc.CallOption) (*Operation, error) { + out := new(Operation) + err := grpc.Invoke(ctx, "/google.container.v1beta1.ClusterManager/SetMaintenancePolicy", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for ClusterManager service + +type ClusterManagerServer interface { + // Lists all clusters owned by a project in either the specified zone or all + // zones. + ListClusters(context.Context, *ListClustersRequest) (*ListClustersResponse, error) + // Gets the details of a specific cluster. + GetCluster(context.Context, *GetClusterRequest) (*Cluster, error) + // Creates a cluster, consisting of the specified number and type of Google + // Compute Engine instances. + // + // By default, the cluster is created in the project's + // [default network](/compute/docs/networks-and-firewalls#networks). + // + // One firewall is added for the cluster. After cluster creation, + // the cluster creates routes for each node to allow the containers + // on that node to communicate with all other instances in the + // cluster. + // + // Finally, an entry is added to the project's global metadata indicating + // which CIDR range is being used by the cluster. + CreateCluster(context.Context, *CreateClusterRequest) (*Operation, error) + // Updates the settings of a specific cluster. + UpdateCluster(context.Context, *UpdateClusterRequest) (*Operation, error) + // Used to set master auth materials. Currently supports :- + // Changing the admin password of a specific cluster. + // This can be either via password generation or explicitly set. + // Modify basic_auth.csv and reset the K8S API server. + SetMasterAuth(context.Context, *SetMasterAuthRequest) (*Operation, error) + // Deletes the cluster, including the Kubernetes endpoint and all worker + // nodes. + // + // Firewalls and routes that were configured during cluster creation + // are also deleted. + // + // Other Google Compute Engine resources that might be in use by the cluster + // (e.g. load balancer resources) will not be deleted if they weren't present + // at the initial create time. + DeleteCluster(context.Context, *DeleteClusterRequest) (*Operation, error) + // Lists all operations in a project in a specific zone or all zones. + ListOperations(context.Context, *ListOperationsRequest) (*ListOperationsResponse, error) + // Gets the specified operation. + GetOperation(context.Context, *GetOperationRequest) (*Operation, error) + // Cancels the specified operation. + CancelOperation(context.Context, *CancelOperationRequest) (*google_protobuf1.Empty, error) + // Returns configuration info about the Container Engine service. + GetServerConfig(context.Context, *GetServerConfigRequest) (*ServerConfig, error) + // Lists the node pools for a cluster. + ListNodePools(context.Context, *ListNodePoolsRequest) (*ListNodePoolsResponse, error) + // Retrieves the node pool requested. + GetNodePool(context.Context, *GetNodePoolRequest) (*NodePool, error) + // Creates a node pool for a cluster. + CreateNodePool(context.Context, *CreateNodePoolRequest) (*Operation, error) + // Deletes a node pool from a cluster. + DeleteNodePool(context.Context, *DeleteNodePoolRequest) (*Operation, error) + // Roll back the previously Aborted or Failed NodePool upgrade. + // This will be an no-op if the last upgrade successfully completed. + RollbackNodePoolUpgrade(context.Context, *RollbackNodePoolUpgradeRequest) (*Operation, error) + // Sets the NodeManagement options for a node pool. + SetNodePoolManagement(context.Context, *SetNodePoolManagementRequest) (*Operation, error) + // Sets labels on a cluster. + SetLabels(context.Context, *SetLabelsRequest) (*Operation, error) + // Enables or disables the ABAC authorization mechanism on a cluster. + SetLegacyAbac(context.Context, *SetLegacyAbacRequest) (*Operation, error) + // Start master IP rotation. + StartIPRotation(context.Context, *StartIPRotationRequest) (*Operation, error) + // Completes master IP rotation. + CompleteIPRotation(context.Context, *CompleteIPRotationRequest) (*Operation, error) + // Enables/Disables Network Policy for a cluster. + SetNetworkPolicy(context.Context, *SetNetworkPolicyRequest) (*Operation, error) + // Sets the maintenance policy for a cluster. + SetMaintenancePolicy(context.Context, *SetMaintenancePolicyRequest) (*Operation, error) +} + +func RegisterClusterManagerServer(s *grpc.Server, srv ClusterManagerServer) { + s.RegisterService(&_ClusterManager_serviceDesc, srv) +} + +func _ClusterManager_ListClusters_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListClustersRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).ListClusters(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1beta1.ClusterManager/ListClusters", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).ListClusters(ctx, req.(*ListClustersRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_GetCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).GetCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1beta1.ClusterManager/GetCluster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).GetCluster(ctx, req.(*GetClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_CreateCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).CreateCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1beta1.ClusterManager/CreateCluster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).CreateCluster(ctx, req.(*CreateClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_UpdateCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).UpdateCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1beta1.ClusterManager/UpdateCluster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).UpdateCluster(ctx, req.(*UpdateClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_SetMasterAuth_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetMasterAuthRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).SetMasterAuth(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1beta1.ClusterManager/SetMasterAuth", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).SetMasterAuth(ctx, req.(*SetMasterAuthRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_DeleteCluster_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).DeleteCluster(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1beta1.ClusterManager/DeleteCluster", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).DeleteCluster(ctx, req.(*DeleteClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_ListOperations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListOperationsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).ListOperations(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1beta1.ClusterManager/ListOperations", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).ListOperations(ctx, req.(*ListOperationsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_GetOperation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetOperationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).GetOperation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1beta1.ClusterManager/GetOperation", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).GetOperation(ctx, req.(*GetOperationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_CancelOperation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CancelOperationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).CancelOperation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1beta1.ClusterManager/CancelOperation", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).CancelOperation(ctx, req.(*CancelOperationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_GetServerConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetServerConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).GetServerConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1beta1.ClusterManager/GetServerConfig", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).GetServerConfig(ctx, req.(*GetServerConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_ListNodePools_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListNodePoolsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).ListNodePools(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1beta1.ClusterManager/ListNodePools", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).ListNodePools(ctx, req.(*ListNodePoolsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_GetNodePool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetNodePoolRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).GetNodePool(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1beta1.ClusterManager/GetNodePool", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).GetNodePool(ctx, req.(*GetNodePoolRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_CreateNodePool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateNodePoolRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).CreateNodePool(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1beta1.ClusterManager/CreateNodePool", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).CreateNodePool(ctx, req.(*CreateNodePoolRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_DeleteNodePool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteNodePoolRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).DeleteNodePool(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1beta1.ClusterManager/DeleteNodePool", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).DeleteNodePool(ctx, req.(*DeleteNodePoolRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_RollbackNodePoolUpgrade_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RollbackNodePoolUpgradeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).RollbackNodePoolUpgrade(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1beta1.ClusterManager/RollbackNodePoolUpgrade", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).RollbackNodePoolUpgrade(ctx, req.(*RollbackNodePoolUpgradeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_SetNodePoolManagement_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetNodePoolManagementRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).SetNodePoolManagement(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1beta1.ClusterManager/SetNodePoolManagement", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).SetNodePoolManagement(ctx, req.(*SetNodePoolManagementRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_SetLabels_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetLabelsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).SetLabels(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1beta1.ClusterManager/SetLabels", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).SetLabels(ctx, req.(*SetLabelsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_SetLegacyAbac_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetLegacyAbacRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).SetLegacyAbac(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1beta1.ClusterManager/SetLegacyAbac", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).SetLegacyAbac(ctx, req.(*SetLegacyAbacRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_StartIPRotation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StartIPRotationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).StartIPRotation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1beta1.ClusterManager/StartIPRotation", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).StartIPRotation(ctx, req.(*StartIPRotationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_CompleteIPRotation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CompleteIPRotationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).CompleteIPRotation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1beta1.ClusterManager/CompleteIPRotation", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).CompleteIPRotation(ctx, req.(*CompleteIPRotationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_SetNetworkPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetNetworkPolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).SetNetworkPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1beta1.ClusterManager/SetNetworkPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).SetNetworkPolicy(ctx, req.(*SetNetworkPolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ClusterManager_SetMaintenancePolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetMaintenancePolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterManagerServer).SetMaintenancePolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.container.v1beta1.ClusterManager/SetMaintenancePolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterManagerServer).SetMaintenancePolicy(ctx, req.(*SetMaintenancePolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _ClusterManager_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.container.v1beta1.ClusterManager", + HandlerType: (*ClusterManagerServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListClusters", + Handler: _ClusterManager_ListClusters_Handler, + }, + { + MethodName: "GetCluster", + Handler: _ClusterManager_GetCluster_Handler, + }, + { + MethodName: "CreateCluster", + Handler: _ClusterManager_CreateCluster_Handler, + }, + { + MethodName: "UpdateCluster", + Handler: _ClusterManager_UpdateCluster_Handler, + }, + { + MethodName: "SetMasterAuth", + Handler: _ClusterManager_SetMasterAuth_Handler, + }, + { + MethodName: "DeleteCluster", + Handler: _ClusterManager_DeleteCluster_Handler, + }, + { + MethodName: "ListOperations", + Handler: _ClusterManager_ListOperations_Handler, + }, + { + MethodName: "GetOperation", + Handler: _ClusterManager_GetOperation_Handler, + }, + { + MethodName: "CancelOperation", + Handler: _ClusterManager_CancelOperation_Handler, + }, + { + MethodName: "GetServerConfig", + Handler: _ClusterManager_GetServerConfig_Handler, + }, + { + MethodName: "ListNodePools", + Handler: _ClusterManager_ListNodePools_Handler, + }, + { + MethodName: "GetNodePool", + Handler: _ClusterManager_GetNodePool_Handler, + }, + { + MethodName: "CreateNodePool", + Handler: _ClusterManager_CreateNodePool_Handler, + }, + { + MethodName: "DeleteNodePool", + Handler: _ClusterManager_DeleteNodePool_Handler, + }, + { + MethodName: "RollbackNodePoolUpgrade", + Handler: _ClusterManager_RollbackNodePoolUpgrade_Handler, + }, + { + MethodName: "SetNodePoolManagement", + Handler: _ClusterManager_SetNodePoolManagement_Handler, + }, + { + MethodName: "SetLabels", + Handler: _ClusterManager_SetLabels_Handler, + }, + { + MethodName: "SetLegacyAbac", + Handler: _ClusterManager_SetLegacyAbac_Handler, + }, + { + MethodName: "StartIPRotation", + Handler: _ClusterManager_StartIPRotation_Handler, + }, + { + MethodName: "CompleteIPRotation", + Handler: _ClusterManager_CompleteIPRotation_Handler, + }, + { + MethodName: "SetNetworkPolicy", + Handler: _ClusterManager_SetNetworkPolicy_Handler, + }, + { + MethodName: "SetMaintenancePolicy", + Handler: _ClusterManager_SetMaintenancePolicy_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/container/v1beta1/cluster_service.proto", +} + +func init() { proto.RegisterFile("google/container/v1beta1/cluster_service.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 4381 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x7c, 0x5b, 0x6c, 0xe3, 0x56, + 0x7a, 0xf0, 0xd2, 0x17, 0xd9, 0xfa, 0x24, 0xcb, 0xf2, 0xf1, 0x4d, 0x51, 0x26, 0x93, 0x09, 0x93, + 0x4d, 0x26, 0x4e, 0x22, 0xcf, 0x25, 0x99, 0x3f, 0x3b, 0x93, 0xfc, 0xa9, 0x2c, 0x73, 0x6c, 0x75, + 0x6c, 0x49, 0xa5, 0xec, 0x99, 0xcd, 0x34, 0x28, 0x97, 0x26, 0x8f, 0x65, 0xae, 0x29, 0x92, 0x4b, + 0x52, 0x93, 0x78, 0xb6, 0x69, 0xbb, 0xdb, 0xbe, 0xf5, 0xad, 0x05, 0xda, 0x97, 0xa2, 0x01, 0xb6, + 0x40, 0x91, 0xde, 0x80, 0x7d, 0x69, 0x17, 0x2d, 0x50, 0x14, 0x28, 0xd0, 0x97, 0xb6, 0x40, 0xd1, + 0xf6, 0xb1, 0x28, 0xfa, 0xb2, 0xcf, 0x6d, 0x9f, 0x5b, 0x14, 0x28, 0xce, 0x85, 0x14, 0x29, 0x51, + 0x94, 0x6c, 0xaf, 0xd3, 0x7d, 0x13, 0xbf, 0x73, 0xbe, 0xf3, 0x5d, 0xf8, 0xdd, 0x79, 0x6c, 0xa8, + 0x74, 0x6c, 0xbb, 0x63, 0xe2, 0x4d, 0xcd, 0xb6, 0x7c, 0xd5, 0xb0, 0xb0, 0xbb, 0xf9, 0xec, 0xf6, + 0x11, 0xf6, 0xd5, 0xdb, 0x9b, 0x9a, 0xd9, 0xf3, 0x7c, 0xec, 0x2a, 0x1e, 0x76, 0x9f, 0x19, 0x1a, + 0xae, 0x38, 0xae, 0xed, 0xdb, 0xa8, 0xc4, 0xf6, 0x57, 0xc2, 0xfd, 0x15, 0xbe, 0xbf, 0x7c, 0x8d, + 0x9f, 0xa4, 0x3a, 0xc6, 0xa6, 0x6a, 0x59, 0xb6, 0xaf, 0xfa, 0x86, 0x6d, 0x79, 0x0c, 0xaf, 0xfc, + 0x22, 0x5f, 0xa5, 0x4f, 0x47, 0xbd, 0xe3, 0x4d, 0xdc, 0x75, 0xfc, 0x33, 0xb6, 0x28, 0xfe, 0x78, + 0x16, 0xa0, 0x61, 0xeb, 0xb8, 0x66, 0x5b, 0xc7, 0x46, 0x07, 0xbd, 0x02, 0xf9, 0xae, 0xaa, 0x9d, + 0x18, 0x16, 0x56, 0xfc, 0x33, 0x07, 0x97, 0x84, 0x1b, 0xc2, 0xcd, 0xac, 0x9c, 0xe3, 0xb0, 0x83, + 0x33, 0x07, 0xa3, 0x1b, 0x90, 0xd7, 0x0d, 0xef, 0x54, 0xf1, 0x8c, 0xe7, 0x58, 0xe9, 0x1c, 0x95, + 0xa6, 0x6e, 0x08, 0x37, 0x67, 0x65, 0x20, 0xb0, 0xb6, 0xf1, 0x1c, 0xef, 0x1c, 0x91, 0x43, 0x6c, + 0xb5, 0xe7, 0x9f, 0x28, 0x9e, 0x66, 0x3b, 0xd8, 0x2b, 0x4d, 0xdf, 0x98, 0x26, 0x87, 0x50, 0x58, + 0x9b, 0x82, 0xd0, 0x1b, 0xb0, 0xc8, 0x85, 0x53, 0x54, 0x4d, 0xb3, 0x7b, 0x96, 0x5f, 0xca, 0x52, + 0x52, 0x05, 0x0e, 0xae, 0x32, 0x28, 0x6a, 0xc0, 0x7c, 0x17, 0xfb, 0xaa, 0xae, 0xfa, 0x6a, 0x69, + 0xe6, 0xc6, 0xf4, 0xcd, 0xdc, 0x9d, 0x3b, 0x95, 0x51, 0x7a, 0xa8, 0xf4, 0x05, 0xa9, 0xec, 0x73, + 0x24, 0xc9, 0xf2, 0xdd, 0x33, 0x39, 0x3c, 0x03, 0xbd, 0x04, 0x60, 0x74, 0xd5, 0x0e, 0x17, 0x6f, + 0x96, 0xd2, 0xcc, 0x52, 0x08, 0x15, 0x6e, 0x17, 0x32, 0xa6, 0x7a, 0x84, 0x4d, 0xaf, 0x94, 0xa1, + 0xc4, 0x6e, 0x4d, 0x44, 0x6c, 0x8f, 0xa2, 0x30, 0x52, 0x1c, 0x1f, 0xbd, 0x0e, 0x8b, 0xa6, 0xad, + 0xa9, 0xa6, 0xe2, 0x79, 0xba, 0xc2, 0x24, 0x9c, 0xa3, 0x9a, 0x5a, 0xa0, 0xe0, 0xb6, 0xa7, 0xd7, + 0xa8, 0x80, 0x08, 0x66, 0x7c, 0xb5, 0xe3, 0x95, 0xe6, 0xa9, 0x92, 0xe8, 0x6f, 0x74, 0x03, 0x72, + 0x8e, 0x8b, 0xc9, 0x6b, 0x32, 0x8e, 0x4c, 0x5c, 0x82, 0x1b, 0xc2, 0xcd, 0x79, 0x39, 0x0a, 0x42, + 0x4d, 0xc8, 0xab, 0x9a, 0x86, 0x4d, 0xec, 0xaa, 0xbe, 0xed, 0x7a, 0xa5, 0x1c, 0xe5, 0xf6, 0xad, + 0xd1, 0xdc, 0x56, 0xfb, 0xbb, 0x19, 0xd3, 0x72, 0xec, 0x00, 0x74, 0x13, 0x8a, 0x5d, 0xc3, 0x52, + 0x34, 0xa7, 0xa7, 0x38, 0xa6, 0xea, 0x1f, 0xdb, 0x6e, 0xb7, 0xb4, 0xc0, 0xde, 0x48, 0xd7, 0xb0, + 0x6a, 0x4e, 0xaf, 0xc5, 0xa1, 0xe8, 0x01, 0x64, 0xc8, 0xd9, 0xbe, 0x57, 0x5a, 0xa4, 0x44, 0x5f, + 0x4d, 0x57, 0xd1, 0x01, 0xd9, 0x2b, 0x73, 0x94, 0xf2, 0x03, 0x58, 0x88, 0xbd, 0x19, 0x54, 0x84, + 0xe9, 0x53, 0x7c, 0xc6, 0xed, 0x8c, 0xfc, 0x44, 0x2b, 0x30, 0xfb, 0x4c, 0x35, 0x7b, 0x98, 0x1a, + 0x56, 0x56, 0x66, 0x0f, 0xf7, 0xa7, 0xde, 0x17, 0xca, 0xdf, 0x80, 0x5c, 0x44, 0xd3, 0xe7, 0x41, + 0x15, 0xff, 0x49, 0x80, 0x6c, 0xc8, 0xcd, 0xa4, 0x98, 0x68, 0x0b, 0x32, 0xf8, 0xf8, 0x18, 0x6b, + 0x7e, 0x69, 0xfa, 0x86, 0x70, 0xb3, 0x70, 0x67, 0x63, 0x02, 0x51, 0x2b, 0x12, 0xc5, 0x90, 0x39, + 0xa6, 0xf8, 0x31, 0x64, 0x18, 0x04, 0xad, 0x01, 0x92, 0x1e, 0x3e, 0x94, 0x6a, 0x07, 0xca, 0x61, + 0xa3, 0xdd, 0x92, 0x6a, 0xf5, 0x87, 0x75, 0x69, 0xbb, 0xf8, 0x35, 0xb4, 0x08, 0xb9, 0x46, 0x53, + 0x69, 0xd7, 0x76, 0xa5, 0xed, 0xc3, 0x3d, 0xa9, 0x28, 0x90, 0x8d, 0x2d, 0x59, 0x7a, 0x28, 0xc9, + 0x4a, 0x14, 0x3e, 0x85, 0x0a, 0x00, 0x8d, 0xa6, 0x22, 0x7d, 0x53, 0xaa, 0x1d, 0x1e, 0x48, 0xc5, + 0x69, 0xf1, 0x47, 0x53, 0x00, 0xfb, 0x2a, 0x89, 0x14, 0xd5, 0x9e, 0x7f, 0x82, 0xca, 0x30, 0xdf, + 0xf3, 0xb0, 0x6b, 0xa9, 0xdd, 0xc0, 0x6f, 0xc3, 0x67, 0xb2, 0xe6, 0xa8, 0x9e, 0xf7, 0xa9, 0xed, + 0xea, 0x5c, 0xc4, 0xf0, 0x19, 0x75, 0xe1, 0x05, 0xcd, 0x34, 0xb0, 0xe5, 0x2b, 0x1a, 0x76, 0x7d, + 0xe3, 0xd8, 0xd0, 0x54, 0x1f, 0x2b, 0x1a, 0xb5, 0x12, 0x2a, 0x78, 0xee, 0xce, 0xed, 0xd1, 0x82, + 0xd7, 0x28, 0x6a, 0xad, 0x8f, 0xc9, 0xcd, 0x6b, 0x5d, 0x4b, 0x5e, 0x40, 0xef, 0xc2, 0x5a, 0x10, + 0xdf, 0x34, 0x35, 0x4a, 0xb2, 0xa4, 0x53, 0xc6, 0x56, 0xf8, 0x6a, 0x4d, 0x8d, 0xe0, 0xa2, 0x77, + 0x00, 0x0d, 0x33, 0x59, 0xc2, 0x14, 0x63, 0x69, 0x88, 0x14, 0x71, 0x73, 0xbe, 0x9d, 0xbc, 0xe8, + 0x63, 0xe6, 0xe6, 0x0c, 0xf2, 0x08, 0x9f, 0x89, 0x6d, 0x58, 0x1f, 0xc1, 0x37, 0x7a, 0x1f, 0x4a, + 0x86, 0xe7, 0xf5, 0xb0, 0x92, 0x40, 0x4e, 0xa0, 0x8e, 0xb8, 0x46, 0xd7, 0x87, 0xf0, 0xc5, 0x1f, + 0x4c, 0x43, 0xbe, 0xaa, 0xeb, 0xb6, 0xe5, 0xf1, 0xa3, 0x7e, 0x1e, 0x96, 0x4f, 0x7c, 0xdf, 0x51, + 0x4c, 0x5b, 0xd5, 0x95, 0x23, 0xd5, 0x54, 0x2d, 0xcd, 0xb0, 0x3a, 0xf4, 0x94, 0x54, 0x5f, 0xdd, + 0xf5, 0x7d, 0x67, 0xcf, 0x56, 0xf5, 0xad, 0x00, 0x45, 0x5e, 0x3a, 0x19, 0x04, 0x21, 0x07, 0xca, + 0x27, 0xb6, 0x6b, 0x3c, 0x27, 0xd8, 0xa6, 0xe2, 0xd8, 0xba, 0xa2, 0xf6, 0x7c, 0xdb, 0xd3, 0x54, + 0x93, 0xd0, 0x98, 0xa2, 0x34, 0x52, 0x42, 0xe5, 0x6e, 0x88, 0xdb, 0xb2, 0xf5, 0x6a, 0x1f, 0x53, + 0x2e, 0x9d, 0x8c, 0x58, 0x41, 0xdf, 0x82, 0x95, 0xd3, 0xde, 0x11, 0x76, 0x2d, 0xec, 0x63, 0x4f, + 0xd1, 0x55, 0xef, 0xe4, 0xc8, 0x56, 0x5d, 0x9d, 0x9b, 0xc8, 0x3b, 0xa3, 0x69, 0x3d, 0x0a, 0xb1, + 0xb6, 0x03, 0x24, 0x79, 0xf9, 0x74, 0x18, 0x88, 0x54, 0x58, 0xb5, 0xb0, 0xff, 0xa9, 0xed, 0x9e, + 0x2a, 0x8e, 0x6d, 0x1a, 0xda, 0x59, 0x60, 0x85, 0x33, 0xe3, 0x48, 0x34, 0x18, 0x5a, 0x8b, 0x62, + 0x71, 0x0b, 0x5c, 0xb6, 0x86, 0x81, 0xe2, 0x26, 0x2c, 0x0d, 0xa9, 0x97, 0x78, 0x87, 0x6e, 0x78, + 0xea, 0x91, 0x89, 0x75, 0xfe, 0x8e, 0xc3, 0x67, 0xf1, 0x1e, 0x94, 0x46, 0xe9, 0x2a, 0x15, 0xef, + 0x36, 0x2c, 0x27, 0xc8, 0x3d, 0x0e, 0x25, 0x41, 0x8e, 0x54, 0x94, 0x7f, 0x17, 0xe0, 0x7a, 0x3f, + 0x04, 0x10, 0x3e, 0xb1, 0xce, 0xcf, 0x08, 0xac, 0xb0, 0x04, 0x73, 0xd8, 0x8a, 0x62, 0x07, 0x8f, + 0x48, 0x83, 0x9c, 0x66, 0xe8, 0xae, 0x72, 0x64, 0xda, 0xda, 0xa9, 0x57, 0x9a, 0xa2, 0xe1, 0x7c, + 0x6b, 0xb4, 0x92, 0xd3, 0x09, 0x55, 0x6a, 0x86, 0xee, 0x6e, 0x91, 0xa3, 0x64, 0xd0, 0x82, 0x9f, + 0x5e, 0x79, 0x1f, 0xb2, 0xe1, 0x02, 0xa9, 0x0c, 0x74, 0xc3, 0x73, 0x4c, 0xf5, 0x4c, 0x89, 0x84, + 0xa9, 0x1c, 0x87, 0x35, 0x48, 0xa4, 0x22, 0x9e, 0x1b, 0x32, 0xc5, 0x63, 0x55, 0x36, 0x3c, 0x4f, + 0xfc, 0x03, 0x01, 0x16, 0x62, 0x4a, 0x42, 0x7b, 0x30, 0xef, 0xb8, 0xf6, 0x33, 0x43, 0xc7, 0x2e, + 0x3d, 0xaf, 0x90, 0x9a, 0xb4, 0xa3, 0xa8, 0x95, 0x16, 0xc7, 0x93, 0xc3, 0x13, 0xa2, 0xda, 0x9a, + 0x8a, 0x69, 0x4b, 0xbc, 0x05, 0xf3, 0xad, 0xfe, 0xae, 0x95, 0x96, 0xdc, 0x7c, 0x5c, 0xdf, 0x96, + 0xe4, 0x81, 0x60, 0x0e, 0x90, 0xa9, 0x55, 0xf7, 0xea, 0xb5, 0x66, 0x51, 0x10, 0xff, 0x74, 0x06, + 0x50, 0xbd, 0x55, 0x35, 0x49, 0xc2, 0x27, 0x05, 0x19, 0x67, 0xf8, 0x35, 0x28, 0xf4, 0x3c, 0xac, + 0x18, 0x8e, 0xa2, 0x9a, 0x86, 0xea, 0x61, 0x8f, 0xbf, 0x97, 0x7c, 0xcf, 0xc3, 0x75, 0xa7, 0xca, + 0x60, 0xe8, 0x2d, 0x58, 0xd2, 0x5c, 0x4c, 0x22, 0xb1, 0xd7, 0x3b, 0xe2, 0x96, 0xcc, 0x59, 0x2a, + 0xb2, 0x85, 0x76, 0x08, 0xa7, 0xe5, 0x54, 0xf8, 0xc4, 0x54, 0x3b, 0xcd, 0xcb, 0xa9, 0x10, 0x4c, + 0xb5, 0xbb, 0x01, 0x4b, 0x41, 0xf0, 0x35, 0x9c, 0x67, 0xef, 0x2a, 0x44, 0xb1, 0xd4, 0xbb, 0xb2, + 0xf2, 0x22, 0x5f, 0xa8, 0x3b, 0xcf, 0xde, 0x25, 0x6f, 0x8c, 0xf0, 0x69, 0xd9, 0x3a, 0x8e, 0x6c, + 0x64, 0xe5, 0x52, 0x9e, 0x40, 0xc3, 0x5d, 0x6f, 0x03, 0xe2, 0x25, 0x9b, 0x17, 0xd9, 0x99, 0xa1, + 0x3b, 0x8b, 0xc1, 0x4a, 0xb8, 0xfb, 0x23, 0xb8, 0xd6, 0x2f, 0x6e, 0x35, 0xdb, 0xd2, 0x55, 0xf7, + 0x4c, 0x71, 0x55, 0xab, 0x83, 0x19, 0xd7, 0x73, 0x14, 0xef, 0x05, 0xbe, 0xa7, 0x1d, 0x6c, 0x91, + 0xc9, 0x0e, 0x2a, 0x40, 0x15, 0x5e, 0x0a, 0xc9, 0x25, 0x9e, 0x30, 0x4f, 0x4f, 0x28, 0x07, 0x9b, + 0x12, 0x8e, 0x78, 0x0f, 0xd6, 0x87, 0x74, 0xc0, 0xcd, 0x2d, 0x1b, 0xcb, 0x40, 0x01, 0xd7, 0xcc, + 0x76, 0x37, 0x61, 0x25, 0xae, 0x0e, 0x8e, 0x03, 0x2c, 0x07, 0x45, 0x95, 0xc2, 0x10, 0xfe, 0x1f, + 0x94, 0x86, 0x35, 0xc3, 0x91, 0x72, 0x14, 0x69, 0x75, 0x50, 0x3f, 0xcc, 0xc6, 0xef, 0xc2, 0x7a, + 0xcb, 0xd6, 0xdb, 0x58, 0xeb, 0xb9, 0x86, 0x7f, 0x16, 0x8b, 0x05, 0x23, 0x9d, 0x59, 0xfc, 0xef, + 0x02, 0xcc, 0xd5, 0x18, 0xdf, 0xa4, 0xa6, 0x8c, 0xb8, 0x17, 0xfd, 0x4d, 0x6a, 0x4a, 0x1d, 0x7b, + 0x9a, 0x6b, 0x38, 0xc4, 0x14, 0xb9, 0x63, 0x45, 0x41, 0xe4, 0x4d, 0x1a, 0x96, 0xe1, 0x1b, 0xaa, + 0xa9, 0x50, 0x41, 0x59, 0xd1, 0x3a, 0x4d, 0x8b, 0xd6, 0x22, 0x5f, 0x61, 0x45, 0x2f, 0xa9, 0x5b, + 0x25, 0xc8, 0xf1, 0x5d, 0x91, 0x08, 0xfd, 0xda, 0x24, 0xe5, 0xb2, 0x0c, 0x56, 0xbf, 0xe1, 0x90, + 0x20, 0xd7, 0xa5, 0x61, 0x85, 0xa4, 0xaf, 0x13, 0x6a, 0x61, 0xa9, 0xc7, 0xf4, 0x63, 0x90, 0x0c, + 0xdd, 0x7e, 0xed, 0xf3, 0x06, 0xa9, 0xb6, 0x3b, 0x1d, 0xc3, 0xea, 0x04, 0x4d, 0x13, 0x37, 0xc1, + 0x02, 0x07, 0xb7, 0x19, 0x94, 0xd4, 0x11, 0x5d, 0xdb, 0x32, 0x7c, 0xdb, 0x8d, 0xee, 0x65, 0x66, + 0xb7, 0xd4, 0x5f, 0x09, 0xb6, 0x97, 0x60, 0x2e, 0xf0, 0x3d, 0x66, 0x58, 0xc1, 0x63, 0xb2, 0x27, + 0x65, 0x93, 0x3d, 0xe9, 0x11, 0x2c, 0xa8, 0xb4, 0x30, 0x08, 0xb4, 0x05, 0x54, 0xcc, 0xd7, 0x53, + 0xca, 0xf5, 0x48, 0x1d, 0x21, 0xe7, 0xd5, 0x68, 0x55, 0x71, 0x1d, 0x20, 0x12, 0x11, 0x98, 0x21, + 0x45, 0x20, 0xa8, 0x0a, 0x54, 0xbf, 0x8a, 0x63, 0xdb, 0xa6, 0x57, 0xca, 0xd3, 0xa0, 0x2e, 0xa6, + 0xbf, 0x97, 0x96, 0x6d, 0x9b, 0x72, 0xd6, 0xe2, 0xbf, 0x3c, 0x74, 0x0d, 0xb2, 0x41, 0xcc, 0xf2, + 0x4a, 0x0b, 0xb4, 0x31, 0xe9, 0x03, 0xd0, 0x3d, 0x58, 0x67, 0x46, 0xa7, 0x44, 0xca, 0x01, 0xd5, + 0x74, 0x4e, 0xd4, 0x52, 0x81, 0xda, 0xe4, 0x2a, 0x5b, 0xee, 0xa7, 0xbf, 0x2a, 0x59, 0x44, 0x0d, + 0x28, 0xc4, 0xb3, 0x7b, 0x69, 0x99, 0xaa, 0xe1, 0x8d, 0x09, 0xc3, 0xb5, 0xbc, 0x10, 0x4b, 0xe8, + 0xe8, 0x17, 0x60, 0x85, 0xc6, 0xd0, 0x80, 0xb3, 0xe0, 0xd4, 0x15, 0x7a, 0xea, 0xdb, 0xa3, 0x4f, + 0x1d, 0x8e, 0xc9, 0x32, 0x32, 0x9c, 0xa1, 0x38, 0xfd, 0xab, 0x02, 0xbc, 0x12, 0xb1, 0x4d, 0x96, + 0xf3, 0x14, 0xce, 0x43, 0xf8, 0x2a, 0xd7, 0x28, 0xb5, 0xf7, 0x2f, 0x9a, 0x35, 0xe5, 0xeb, 0xdd, + 0xf4, 0xf4, 0xfd, 0x14, 0x50, 0x97, 0xf4, 0x15, 0xd8, 0x52, 0x2d, 0x0d, 0x07, 0x32, 0xae, 0x8f, + 0xab, 0x21, 0xf7, 0xfb, 0x38, 0x5c, 0xc4, 0xa5, 0xee, 0x20, 0x08, 0x59, 0x50, 0x26, 0x85, 0xa3, + 0xc7, 0x23, 0xcd, 0x40, 0xd1, 0xf5, 0xc2, 0xb8, 0xd2, 0x7f, 0x44, 0x90, 0x92, 0xd7, 0x9d, 0x11, + 0xd1, 0xeb, 0x45, 0xc8, 0x7a, 0xd8, 0x3c, 0x56, 0x4c, 0xc3, 0x3a, 0xe5, 0xd5, 0xfe, 0x3c, 0x01, + 0xec, 0x19, 0xd6, 0x29, 0x09, 0x5a, 0xcf, 0x6d, 0x2b, 0xa8, 0xe9, 0xe9, 0x6f, 0x52, 0xfa, 0x60, + 0x4b, 0x77, 0x6c, 0xc3, 0xf2, 0x79, 0x11, 0x1f, 0x3e, 0x13, 0x33, 0x0c, 0xc2, 0x55, 0xe0, 0x88, + 0xcf, 0xb0, 0xeb, 0x91, 0xe0, 0xd6, 0x61, 0xd1, 0x95, 0x2f, 0xf3, 0xa8, 0xf8, 0x98, 0x2d, 0xd2, + 0xfe, 0xa3, 0xe7, 0xba, 0xa4, 0xb6, 0xe7, 0x6f, 0x37, 0x40, 0x3b, 0xe1, 0xd1, 0x9f, 0xad, 0xb2, + 0xf7, 0x16, 0x60, 0xdd, 0x82, 0x00, 0xce, 0x82, 0x63, 0x80, 0x63, 0x50, 0x1c, 0xc4, 0xd7, 0x88, + 0x33, 0x05, 0x18, 0x2f, 0x43, 0x8e, 0x27, 0x70, 0xdf, 0xe8, 0xe2, 0xd2, 0xb7, 0x99, 0xa3, 0x32, + 0xd0, 0x81, 0xd1, 0xc5, 0xe8, 0x67, 0x20, 0xe3, 0xf9, 0xaa, 0xdf, 0xf3, 0x4a, 0xa7, 0xb4, 0x6c, + 0xb9, 0x99, 0xd6, 0x64, 0x51, 0x11, 0x2a, 0x6d, 0xba, 0x5f, 0xe6, 0x78, 0xe8, 0xeb, 0x50, 0x60, + 0xbf, 0x94, 0x2e, 0xf6, 0x3c, 0xb5, 0x83, 0x4b, 0x26, 0xa5, 0xb2, 0xc0, 0xa0, 0xfb, 0x0c, 0x88, + 0xde, 0x81, 0xe5, 0x81, 0xcc, 0xe5, 0x19, 0xcf, 0x71, 0xa9, 0xcb, 0x22, 0x7b, 0x34, 0x71, 0xb5, + 0x8d, 0xe7, 0x78, 0x44, 0x46, 0xb7, 0x46, 0x64, 0xf4, 0x0a, 0x2c, 0x1b, 0x96, 0xe7, 0x53, 0xe3, + 0xec, 0xb8, 0x76, 0xcf, 0x51, 0x7a, 0xae, 0xe9, 0x95, 0x6c, 0x1a, 0x35, 0x96, 0x82, 0xa5, 0x1d, + 0xb2, 0x72, 0xe8, 0x9a, 0x1e, 0x39, 0x3d, 0xa6, 0x48, 0x96, 0x65, 0x1c, 0xc6, 0x4b, 0x44, 0x8d, + 0x2c, 0xcb, 0xbc, 0x0c, 0x39, 0xfc, 0x99, 0x63, 0xb8, 0x5c, 0x89, 0xdf, 0x61, 0x4a, 0x64, 0x20, + 0xaa, 0xc4, 0x32, 0xcc, 0x07, 0x6e, 0x5b, 0x72, 0x99, 0x85, 0x04, 0xcf, 0xa2, 0x01, 0x19, 0xa6, + 0x30, 0xd2, 0x51, 0xb7, 0x0f, 0xaa, 0x07, 0x87, 0xed, 0x81, 0x6a, 0xad, 0x08, 0x79, 0x5a, 0xc7, + 0xb5, 0xeb, 0xcd, 0x46, 0xbd, 0xb1, 0x53, 0x14, 0x50, 0x0e, 0xe6, 0xe4, 0xc3, 0x06, 0x7d, 0x98, + 0x22, 0x9d, 0xb9, 0x2c, 0xd5, 0x9a, 0x8d, 0x5a, 0x7d, 0x8f, 0x00, 0xa6, 0x51, 0x1e, 0xe6, 0xdb, + 0x07, 0xcd, 0x56, 0x8b, 0x3c, 0xcd, 0xa0, 0x2c, 0xcc, 0x4a, 0xb2, 0xdc, 0x94, 0x8b, 0xb3, 0xe2, + 0xef, 0x65, 0x60, 0x81, 0xbf, 0xa4, 0x43, 0x47, 0x27, 0x1d, 0xe8, 0x2d, 0x58, 0xd1, 0xb1, 0x67, + 0xb8, 0x24, 0x64, 0x44, 0x0d, 0x86, 0x15, 0x5b, 0x88, 0xaf, 0x45, 0x0d, 0xe6, 0x03, 0x28, 0x07, + 0x18, 0x09, 0x29, 0x8a, 0xd5, 0x5e, 0x25, 0xbe, 0x63, 0x7f, 0x28, 0x53, 0x3d, 0x85, 0xd5, 0x00, + 0x3b, 0x9e, 0x6b, 0x32, 0xe7, 0xca, 0x35, 0xcb, 0xfc, 0x90, 0x58, 0x23, 0xbb, 0x39, 0x20, 0x0b, + 0x49, 0x2d, 0x8a, 0xa1, 0x07, 0x69, 0x33, 0x22, 0x0b, 0xc9, 0x1f, 0x75, 0x9d, 0xbc, 0xe4, 0x00, + 0x21, 0x32, 0x6d, 0x63, 0x19, 0xb4, 0xc8, 0x57, 0xea, 0xe1, 0xd0, 0xcd, 0x81, 0x97, 0x86, 0x8f, + 0x8f, 0x76, 0xb3, 0xd9, 0xb1, 0xed, 0x1f, 0x27, 0x1d, 0x6d, 0x64, 0xcb, 0x03, 0x6c, 0x45, 0x1b, + 0xb7, 0xb7, 0x20, 0x60, 0x5a, 0xe9, 0x27, 0x3a, 0xa0, 0x26, 0x1b, 0xb0, 0xb7, 0x17, 0xe6, 0xbb, + 0xdf, 0x10, 0xe0, 0xcd, 0xf0, 0xc5, 0x8c, 0xcd, 0x07, 0xf9, 0x4b, 0xe6, 0x83, 0xaf, 0x07, 0x6f, + 0x38, 0x3d, 0x2d, 0x7c, 0x0e, 0x62, 0xc0, 0x53, 0x4a, 0x08, 0x2f, 0x5c, 0x34, 0x84, 0x5f, 0xe7, + 0x87, 0x8f, 0xaa, 0x43, 0xdf, 0x85, 0xb5, 0x01, 0x95, 0x04, 0xf6, 0xcd, 0x87, 0x38, 0x31, 0x29, + 0xb8, 0x85, 0x8b, 0xff, 0x91, 0x81, 0x6c, 0xd3, 0xc1, 0x2e, 0x55, 0x6c, 0x62, 0x95, 0x1a, 0x24, + 0x81, 0xa9, 0x48, 0x12, 0x68, 0x42, 0xc1, 0x0e, 0x90, 0x98, 0x21, 0x4d, 0x8f, 0x8b, 0x97, 0x21, + 0x91, 0x0a, 0x31, 0x30, 0x79, 0x21, 0xc4, 0xa7, 0xf6, 0xb6, 0x15, 0x06, 0xde, 0x99, 0x71, 0x63, + 0xbd, 0xfe, 0x41, 0x03, 0xa1, 0x77, 0x0d, 0x32, 0x3a, 0xf6, 0x55, 0xc3, 0xe4, 0x56, 0xcd, 0x9f, + 0x12, 0x42, 0xf2, 0x6c, 0x52, 0x48, 0x8e, 0x65, 0xc2, 0xcc, 0x40, 0x26, 0x7c, 0x19, 0x72, 0xbe, + 0xea, 0x76, 0xb0, 0xcf, 0x96, 0x99, 0x97, 0x01, 0x03, 0xd1, 0x0d, 0xd1, 0xa0, 0x97, 0x8d, 0x07, + 0x3d, 0xd2, 0x3f, 0x7b, 0xbe, 0xea, 0xfa, 0x2c, 0x60, 0xb2, 0xe6, 0x24, 0x4b, 0x21, 0x34, 0x5e, + 0xbe, 0x40, 0x33, 0x2a, 0x5b, 0x64, 0xb5, 0xe3, 0x1c, 0xb6, 0x74, 0xb2, 0x24, 0xca, 0x63, 0xc3, + 0x65, 0x0e, 0xe6, 0x5a, 0x52, 0x63, 0x3b, 0x21, 0x52, 0xce, 0xc3, 0xcc, 0x76, 0xb3, 0x21, 0xb1, + 0x10, 0x59, 0xdd, 0x6a, 0xca, 0x07, 0x34, 0x44, 0x8a, 0xff, 0x33, 0x05, 0x33, 0x54, 0xe7, 0x2b, + 0x50, 0x3c, 0xf8, 0xb8, 0x25, 0x0d, 0x1c, 0x88, 0xa0, 0x50, 0x93, 0xa5, 0xea, 0x81, 0xa4, 0xd4, + 0xf6, 0x0e, 0xdb, 0x07, 0x92, 0x5c, 0x14, 0x08, 0x6c, 0x5b, 0xda, 0x93, 0x22, 0xb0, 0x29, 0x02, + 0x3b, 0x6c, 0xed, 0xc8, 0xd5, 0x6d, 0x49, 0xd9, 0xaf, 0x52, 0xd8, 0x34, 0x5a, 0x82, 0x85, 0x00, + 0xd6, 0x68, 0x6e, 0x4b, 0xed, 0xe2, 0x0c, 0xd9, 0x26, 0x4b, 0xad, 0x6a, 0x5d, 0x0e, 0x51, 0x67, + 0x19, 0xea, 0x76, 0x94, 0x44, 0x86, 0x30, 0xc3, 0xc9, 0x12, 0x4c, 0xa5, 0xd5, 0x6c, 0xee, 0x15, + 0xe7, 0x08, 0x94, 0x13, 0xee, 0x43, 0xe7, 0xd1, 0x35, 0x28, 0xb5, 0xa5, 0x83, 0x3e, 0x48, 0xd9, + 0xaf, 0x36, 0xaa, 0x3b, 0xd2, 0xbe, 0xd4, 0x38, 0x28, 0x66, 0xd1, 0x2a, 0x2c, 0x55, 0x0f, 0x0f, + 0x9a, 0x0a, 0x27, 0xcb, 0x18, 0x01, 0xa2, 0x40, 0x0a, 0x8e, 0x33, 0x98, 0x43, 0x05, 0x00, 0x72, + 0xd8, 0x5e, 0x75, 0x4b, 0xda, 0x6b, 0x17, 0xf3, 0x68, 0x19, 0x16, 0xc9, 0x33, 0x93, 0x49, 0xa9, + 0x1e, 0x1e, 0xec, 0x16, 0x17, 0xa8, 0xf6, 0x63, 0x14, 0xdb, 0xf5, 0xa7, 0x52, 0xb1, 0x10, 0xc2, + 0xa5, 0x83, 0x27, 0x4d, 0xf9, 0x91, 0xd2, 0x6a, 0xee, 0xd5, 0x6b, 0x1f, 0x17, 0x17, 0x51, 0x19, + 0xd6, 0xd8, 0x21, 0xf5, 0xc6, 0x81, 0xd4, 0xa8, 0x36, 0x6a, 0x52, 0xb0, 0x56, 0x14, 0x7f, 0x57, + 0x80, 0x95, 0x1a, 0x2d, 0x39, 0x78, 0x76, 0x92, 0xf1, 0x77, 0x7a, 0xd8, 0xf3, 0x89, 0x99, 0x38, + 0xae, 0xfd, 0x6d, 0xac, 0xf9, 0x24, 0x90, 0x33, 0x17, 0xcc, 0x72, 0x48, 0x5d, 0x4f, 0xf4, 0xc3, + 0x07, 0x30, 0xc7, 0x0b, 0x2d, 0x3e, 0xf2, 0x7b, 0x65, 0x6c, 0xc1, 0x22, 0x07, 0x18, 0xc4, 0x5f, + 0x1c, 0x95, 0xe4, 0x76, 0xee, 0x0f, 0xfc, 0x49, 0x3c, 0x83, 0xa5, 0x1d, 0xec, 0x5f, 0x9e, 0x39, + 0x3a, 0xf0, 0xe5, 0xed, 0x98, 0xce, 0x87, 0x1f, 0xd9, 0xa0, 0x0f, 0xd3, 0xc3, 0x58, 0x33, 0xdb, + 0x8f, 0x35, 0xe2, 0x5f, 0x0a, 0xb0, 0xc2, 0x92, 0xf5, 0x95, 0x93, 0xff, 0x08, 0x32, 0x3d, 0x4a, + 0x89, 0xf7, 0xc9, 0x6f, 0x8c, 0xd5, 0x1c, 0x63, 0x4c, 0xe6, 0x68, 0x89, 0xfc, 0xff, 0xcb, 0x14, + 0xac, 0xb4, 0xb1, 0x1f, 0xe9, 0x88, 0xaf, 0x8c, 0xff, 0x7d, 0xc8, 0xa8, 0x9a, 0x1f, 0x94, 0x2f, + 0x85, 0x3b, 0xef, 0x8d, 0xe6, 0x3f, 0x89, 0xa3, 0x4a, 0x95, 0x22, 0xcb, 0xfc, 0x10, 0xf4, 0x41, + 0xa8, 0x8e, 0xf3, 0xf4, 0xfb, 0x83, 0xba, 0x98, 0x8b, 0xe8, 0xa2, 0x05, 0x19, 0x46, 0x83, 0x84, + 0xa5, 0xc3, 0xc6, 0xa3, 0x46, 0xf3, 0x49, 0x83, 0xd5, 0x77, 0xc4, 0x35, 0x5a, 0xd5, 0x76, 0xfb, + 0x49, 0x53, 0xde, 0x2e, 0x0a, 0xc4, 0x61, 0x77, 0xa4, 0x86, 0x24, 0x13, 0xe7, 0x0f, 0xc1, 0x53, + 0xc1, 0xc6, 0xc3, 0xb6, 0x24, 0x37, 0xaa, 0xfb, 0x52, 0x71, 0x5a, 0xfc, 0x45, 0x58, 0xd9, 0xc6, + 0x26, 0xfe, 0x0a, 0x8c, 0x23, 0x90, 0x67, 0x26, 0x22, 0xcf, 0xb7, 0x60, 0x79, 0xcf, 0xf0, 0x02, + 0xbf, 0xf0, 0x2e, 0x41, 0xbc, 0xef, 0x78, 0x33, 0x31, 0xc7, 0x7b, 0x0e, 0x2b, 0x71, 0x0a, 0x9e, + 0x63, 0x5b, 0x1e, 0x46, 0x1f, 0xc2, 0x3c, 0x67, 0xcd, 0x2b, 0x09, 0x74, 0x78, 0x30, 0x81, 0x9b, + 0x87, 0x28, 0xe8, 0x55, 0x58, 0xe8, 0x1a, 0x9e, 0x47, 0x2a, 0x57, 0x42, 0x9e, 0x4d, 0x95, 0xb3, + 0x72, 0x9e, 0x03, 0x9f, 0x12, 0x98, 0xf8, 0xcb, 0xb0, 0xbc, 0x83, 0xfd, 0x30, 0xb7, 0x5e, 0x42, + 0xba, 0x57, 0x20, 0xdf, 0xaf, 0x0d, 0x42, 0xe5, 0xe6, 0x42, 0xd8, 0x08, 0xd7, 0x3f, 0x82, 0x55, + 0x22, 0x7c, 0xc8, 0xc1, 0x55, 0x28, 0xf8, 0xfb, 0x02, 0xac, 0xd5, 0x48, 0xef, 0x63, 0x7e, 0xc5, + 0x82, 0x46, 0xed, 0x88, 0x30, 0x31, 0x28, 0x29, 0x7f, 0xd1, 0x35, 0x80, 0x10, 0x3b, 0x78, 0xd5, + 0xaf, 0x4e, 0x50, 0x09, 0xc9, 0x11, 0xb4, 0xc9, 0x5e, 0xb7, 0x02, 0x6b, 0x3b, 0xd8, 0x27, 0x8d, + 0x0a, 0x0e, 0x3e, 0x3e, 0x5f, 0x5c, 0x11, 0x49, 0x52, 0xfe, 0xda, 0x14, 0xe4, 0xa3, 0xc7, 0xa3, + 0x7b, 0xb0, 0xae, 0xe3, 0x63, 0xb5, 0x67, 0xfa, 0x43, 0xb3, 0x01, 0x46, 0x64, 0x95, 0x2f, 0x0f, + 0xcc, 0x06, 0x2a, 0xb0, 0xfc, 0x4c, 0x35, 0x8d, 0x78, 0xcb, 0x16, 0x5c, 0x60, 0x58, 0xa2, 0x4b, + 0x91, 0x8e, 0xcd, 0x63, 0x7d, 0x0e, 0xa3, 0x13, 0xe9, 0x73, 0x66, 0x82, 0x3e, 0x87, 0xae, 0xf4, + 0xfb, 0x9c, 0x0d, 0x60, 0x47, 0x44, 0xf6, 0x7a, 0xa5, 0x59, 0x7a, 0xf6, 0x22, 0x5d, 0x08, 0xb7, + 0x7a, 0xe8, 0x0e, 0xac, 0xb2, 0xbd, 0xf1, 0xf2, 0x9a, 0xdd, 0x4b, 0xc8, 0xca, 0x8c, 0xcd, 0x58, + 0x75, 0xed, 0x89, 0x7f, 0x2d, 0xc0, 0x2a, 0x4b, 0xf6, 0xe1, 0x50, 0xef, 0x0a, 0x33, 0x5a, 0x36, + 0xec, 0xd5, 0x78, 0x52, 0x9b, 0x64, 0xc8, 0x38, 0x1f, 0x0c, 0x19, 0x23, 0x6e, 0x93, 0x89, 0xb9, + 0xcd, 0x17, 0x02, 0xac, 0xb2, 0xc0, 0x7b, 0xf5, 0x42, 0xdc, 0x80, 0x7c, 0xac, 0x9f, 0x65, 0x2f, + 0x0e, 0xac, 0x7e, 0x23, 0x1b, 0x58, 0x5b, 0x26, 0x62, 0x6d, 0xbf, 0x22, 0xb0, 0xd0, 0x19, 0xf0, + 0xe7, 0x5d, 0x1d, 0x83, 0xa3, 0xaa, 0xa6, 0xdf, 0x11, 0x00, 0xed, 0x60, 0xff, 0xa7, 0x55, 0x43, + 0xff, 0x35, 0x03, 0xf3, 0x01, 0x6f, 0x89, 0x6d, 0xde, 0x07, 0x90, 0xe1, 0x1d, 0xea, 0xd4, 0x39, + 0xbe, 0x1b, 0x70, 0x9c, 0x73, 0x7e, 0xa8, 0x48, 0x1d, 0x3a, 0x96, 0x60, 0x2e, 0x08, 0x0c, 0x6c, + 0xee, 0x18, 0x3c, 0x8e, 0x9a, 0x6b, 0x1d, 0x8f, 0x9a, 0x6b, 0x55, 0xc3, 0xa6, 0xb2, 0x43, 0x4b, + 0xa4, 0x37, 0xc7, 0x7b, 0xc3, 0xf8, 0x71, 0xde, 0x49, 0x52, 0xef, 0xd8, 0x84, 0x5c, 0x74, 0x38, + 0x32, 0x73, 0x91, 0xe1, 0x48, 0xf4, 0x04, 0xb4, 0x0b, 0xd0, 0x55, 0x2d, 0xb5, 0x83, 0xbb, 0x81, + 0xa5, 0xe5, 0xd2, 0x9a, 0x6b, 0x72, 0xde, 0x7e, 0xb8, 0x5f, 0x8e, 0xe0, 0x8a, 0xdf, 0x13, 0x2e, + 0x3b, 0x72, 0x5b, 0x03, 0xc4, 0x1f, 0x94, 0x27, 0xf5, 0x83, 0x5d, 0x85, 0x0d, 0xd8, 0xa6, 0x07, + 0x47, 0x71, 0x33, 0xb1, 0x51, 0xdc, 0x6c, 0x7f, 0x14, 0x97, 0x11, 0xff, 0x48, 0x80, 0x42, 0x9c, + 0x45, 0x92, 0x3c, 0x89, 0xbc, 0x4a, 0xcf, 0xe9, 0xb8, 0xaa, 0x1e, 0xdc, 0xe3, 0xa0, 0x3a, 0x38, + 0x64, 0x20, 0xd2, 0x73, 0xd3, 0x2d, 0x2e, 0x76, 0x54, 0xc3, 0xe5, 0x1f, 0x5a, 0x81, 0x80, 0x64, + 0x0a, 0x41, 0x87, 0xb0, 0xc8, 0xd1, 0x15, 0xdb, 0x09, 0x06, 0x46, 0x63, 0x3e, 0x34, 0x54, 0xfb, + 0x04, 0x9a, 0x0c, 0x47, 0x2e, 0xf4, 0x62, 0xcf, 0x62, 0x17, 0xd0, 0xf0, 0x2e, 0xf4, 0x1e, 0xac, + 0x47, 0x19, 0x56, 0x22, 0x1d, 0x3d, 0x73, 0xa3, 0x95, 0x08, 0xef, 0xed, 0xb0, 0xb9, 0x1f, 0xfb, + 0x8d, 0x4f, 0xfc, 0x26, 0x2c, 0x0d, 0x7d, 0x19, 0x40, 0x35, 0xc8, 0x7c, 0x6a, 0x58, 0xba, 0xfd, + 0xe9, 0xf8, 0xab, 0x29, 0x11, 0xe4, 0x27, 0x14, 0x45, 0xe6, 0xa8, 0xe2, 0xaf, 0x0b, 0xb1, 0xa3, + 0xd9, 0x2a, 0x32, 0xa1, 0xa4, 0xab, 0x86, 0x79, 0xa6, 0x44, 0xbf, 0x61, 0x70, 0x62, 0xcc, 0xf5, + 0x53, 0x3e, 0xd6, 0x6f, 0x13, 0xcc, 0xa1, 0x33, 0x77, 0xbf, 0x26, 0xaf, 0xe9, 0x89, 0x2b, 0x5b, + 0xf3, 0x90, 0x61, 0xf3, 0x2f, 0xb1, 0x0d, 0x6b, 0xc9, 0xd8, 0x03, 0xf3, 0x91, 0xa9, 0xc1, 0xf9, + 0x48, 0x19, 0xe6, 0xf5, 0x1e, 0xab, 0x6e, 0x78, 0x34, 0x0c, 0x9f, 0xc5, 0xff, 0x14, 0xe0, 0x5a, + 0xbb, 0x1f, 0x75, 0x23, 0x3e, 0xf0, 0x7f, 0x18, 0x7f, 0x7f, 0x62, 0xce, 0x9b, 0xd8, 0x57, 0x7d, + 0x29, 0xc0, 0x75, 0xd9, 0x36, 0xcd, 0x23, 0x55, 0x3b, 0x0d, 0xe4, 0xe6, 0x66, 0xf7, 0xd3, 0x96, + 0x74, 0x9e, 0xb2, 0x9a, 0x3e, 0x92, 0x95, 0x79, 0xa1, 0x1b, 0xff, 0x20, 0x2a, 0x5c, 0xe0, 0x83, + 0xa8, 0xf8, 0x5d, 0x58, 0x4e, 0x1a, 0x23, 0x8f, 0xbe, 0x5a, 0xf3, 0x1a, 0x14, 0xba, 0x86, 0x15, + 0x4d, 0x4f, 0xec, 0x9a, 0x6c, 0xbe, 0x6b, 0x58, 0xfd, 0xd4, 0x44, 0x76, 0xa9, 0x9f, 0x0d, 0x27, + 0xb1, 0x7c, 0x57, 0xfd, 0x2c, 0xdc, 0x25, 0xfe, 0xe3, 0x14, 0x14, 0xdb, 0xd8, 0x67, 0x57, 0x1f, + 0xaf, 0x4e, 0xeb, 0x1d, 0x58, 0x74, 0xb1, 0x67, 0xf7, 0x5c, 0x0d, 0x2b, 0xfc, 0x0e, 0x2c, 0xbb, + 0x70, 0xfb, 0xff, 0x53, 0x9b, 0xfd, 0x18, 0x5b, 0x15, 0x99, 0x9f, 0x10, 0xbd, 0x11, 0x5b, 0x70, + 0x63, 0x40, 0xf4, 0x16, 0x2c, 0xd1, 0xf3, 0x95, 0x63, 0xc3, 0xea, 0x60, 0xd7, 0x71, 0x8d, 0xb0, + 0xbe, 0x29, 0xd2, 0x85, 0x87, 0x7d, 0x78, 0x92, 0x51, 0x96, 0xab, 0xb0, 0x9c, 0x40, 0xe7, 0x5c, + 0xf7, 0x41, 0x7f, 0x4b, 0xa0, 0xb3, 0x93, 0x3d, 0xdc, 0x51, 0xb5, 0xb3, 0xea, 0x91, 0xaa, 0x5d, + 0x9d, 0x5e, 0x23, 0x46, 0x32, 0x13, 0x37, 0x92, 0x24, 0x2b, 0xfe, 0x25, 0x58, 0xa3, 0xf1, 0xbc, + 0xde, 0x92, 0xf9, 0x35, 0xee, 0xab, 0x1f, 0x3c, 0x44, 0xe9, 0x7f, 0x4f, 0x80, 0x17, 0x6a, 0x76, + 0xd7, 0x21, 0x05, 0xf8, 0x57, 0xc9, 0x43, 0x34, 0xe8, 0x9c, 0xc2, 0xd2, 0xd0, 0x75, 0x65, 0x62, + 0x35, 0x91, 0x0b, 0xcb, 0xdc, 0x5d, 0x08, 0x07, 0xd3, 0x72, 0x51, 0x8d, 0xee, 0x26, 0x8e, 0xf5, + 0x26, 0x44, 0x61, 0xac, 0x2b, 0x63, 0x4c, 0x2d, 0x46, 0xe0, 0xa4, 0xd3, 0x12, 0xff, 0x41, 0x80, + 0x75, 0x12, 0xd4, 0x63, 0x37, 0x0d, 0xae, 0x4c, 0xdc, 0xe1, 0x3b, 0x10, 0x33, 0x97, 0xba, 0x03, + 0x91, 0xf4, 0x0a, 0xff, 0x4d, 0x80, 0x17, 0xe9, 0x14, 0x6e, 0xf0, 0x06, 0xc0, 0x95, 0x49, 0x95, + 0x7c, 0x47, 0x61, 0xe6, 0x27, 0x72, 0x47, 0x21, 0x61, 0x7c, 0x73, 0xe7, 0x5f, 0xaf, 0x43, 0x81, + 0x77, 0xee, 0x2c, 0x97, 0xb9, 0xe8, 0x4b, 0x01, 0xf2, 0xd1, 0x79, 0x16, 0x4a, 0x29, 0x88, 0x13, + 0x26, 0x6b, 0xe5, 0xca, 0xa4, 0xdb, 0x59, 0x52, 0x11, 0xbf, 0xf1, 0xfd, 0x7f, 0xfe, 0xf1, 0x6f, + 0x4e, 0xdd, 0x45, 0xb7, 0xc3, 0x3f, 0xda, 0xf8, 0x2e, 0xeb, 0xcd, 0x3e, 0xe4, 0x9a, 0xf4, 0x36, + 0x37, 0x36, 0xc3, 0x6f, 0x8b, 0x9b, 0x1b, 0x9f, 0x6f, 0x86, 0x23, 0xb2, 0xdf, 0x16, 0x00, 0xfa, + 0x33, 0x6f, 0x94, 0xa2, 0xa0, 0xa1, 0xc9, 0x78, 0x79, 0xfc, 0x2c, 0x2e, 0x89, 0x33, 0xa2, 0xb4, + 0x11, 0x7c, 0x85, 0x6c, 0x6d, 0x6e, 0x7c, 0x8e, 0x7e, 0x20, 0xc0, 0x42, 0xec, 0x6b, 0x01, 0x4a, + 0x51, 0x4b, 0xd2, 0x67, 0x85, 0xf2, 0x24, 0x03, 0x24, 0xf1, 0x03, 0xca, 0xe1, 0x3d, 0xf1, 0xfc, + 0xba, 0xbb, 0x2f, 0x6c, 0x50, 0x26, 0x63, 0x63, 0xfb, 0x34, 0x26, 0x93, 0xe6, 0xfb, 0xe7, 0x62, + 0xb2, 0x7c, 0x7e, 0x35, 0x12, 0x26, 0x7f, 0x28, 0xc0, 0x42, 0x6c, 0x12, 0x9e, 0xc6, 0x64, 0xd2, + 0xc8, 0x7c, 0x32, 0x26, 0x7f, 0x96, 0x32, 0xb9, 0x2d, 0x7e, 0x74, 0x7e, 0x26, 0xbd, 0x28, 0x51, + 0xc2, 0xf2, 0x17, 0x02, 0x2c, 0xc4, 0x26, 0xde, 0x69, 0x2c, 0x27, 0x8d, 0xc6, 0x27, 0x63, 0x99, + 0x9b, 0xe7, 0xc6, 0x05, 0xcc, 0xf3, 0x87, 0x02, 0x14, 0xe2, 0xc3, 0x4c, 0xb4, 0x99, 0xee, 0xb6, + 0x43, 0x03, 0xde, 0xf2, 0xad, 0xc9, 0x11, 0xb8, 0xa7, 0x3f, 0xa0, 0x0c, 0xbf, 0x87, 0xee, 0x4e, + 0x6c, 0xad, 0x91, 0xf9, 0xe8, 0x17, 0x02, 0xe4, 0xa3, 0xa3, 0xee, 0xb4, 0xb0, 0x94, 0x30, 0x12, + 0x9f, 0x4c, 0xa5, 0x09, 0x1c, 0xa6, 0xa9, 0xb4, 0xcf, 0x1e, 0xf7, 0xf9, 0xc5, 0x81, 0x31, 0x35, + 0x4a, 0x51, 0x52, 0xf2, 0x44, 0xbb, 0xbc, 0x16, 0x60, 0x04, 0x7f, 0x64, 0x56, 0x91, 0xba, 0x8e, + 0x7f, 0x26, 0x4a, 0x94, 0xb5, 0x8f, 0xc4, 0xfb, 0x17, 0x60, 0xed, 0xbe, 0x46, 0x69, 0x11, 0xdb, + 0xfc, 0x52, 0x80, 0xc5, 0x81, 0x11, 0x72, 0x1a, 0x93, 0xc9, 0xd3, 0xe6, 0xf2, 0xeb, 0x69, 0x2e, + 0xd8, 0xdf, 0x7e, 0x4e, 0x7d, 0x7e, 0xbe, 0xe9, 0x45, 0xd9, 0xfa, 0x91, 0x00, 0x0b, 0xb1, 0x3e, + 0x04, 0x8d, 0x49, 0x2d, 0x83, 0x63, 0xc4, 0xf2, 0xe6, 0xc4, 0xfb, 0xb9, 0x85, 0x72, 0x25, 0xa3, + 0x0f, 0x27, 0xb4, 0xd0, 0xa8, 0x53, 0x6d, 0xf6, 0x6f, 0x7d, 0xfe, 0xbe, 0x00, 0xb9, 0xc8, 0x50, + 0x11, 0xbd, 0x9d, 0xaa, 0xe0, 0x81, 0xd9, 0x63, 0x79, 0x82, 0x8e, 0x2a, 0x89, 0xd1, 0xc9, 0x7c, + 0xbf, 0xcf, 0x65, 0x10, 0x07, 0xe2, 0x73, 0xee, 0xb4, 0x38, 0x90, 0x38, 0x11, 0x9f, 0xcc, 0xb1, + 0x76, 0x29, 0xbf, 0x5b, 0xe2, 0xe5, 0x14, 0x4b, 0x0c, 0xf8, 0x4f, 0x04, 0x28, 0xc4, 0xa7, 0xda, + 0x69, 0x2c, 0x27, 0xce, 0xbf, 0x27, 0x63, 0x99, 0xab, 0x78, 0xe3, 0x92, 0x2a, 0xfe, 0x3b, 0x01, + 0xd6, 0x47, 0xf4, 0xfd, 0x28, 0xe5, 0x6e, 0x53, 0xfa, 0xa8, 0x60, 0x32, 0x09, 0x7e, 0x8e, 0x4a, + 0xf0, 0x48, 0x7c, 0x78, 0x29, 0x09, 0xee, 0xbb, 0x9c, 0x15, 0xa2, 0xfd, 0xbf, 0x17, 0x60, 0x35, + 0x71, 0x70, 0x83, 0xee, 0xa5, 0x66, 0xe5, 0x91, 0x93, 0x9e, 0xc9, 0x24, 0x79, 0x4c, 0x25, 0x69, + 0x89, 0x8f, 0x2e, 0x27, 0x09, 0xcd, 0xd4, 0x01, 0x03, 0x44, 0x9c, 0x3f, 0x16, 0x20, 0x1b, 0x76, + 0xde, 0x68, 0x63, 0xf2, 0xf6, 0x7c, 0x32, 0xb6, 0x1b, 0x94, 0xed, 0x5d, 0xb1, 0x76, 0xa1, 0xa2, + 0x22, 0xde, 0x99, 0x47, 0x6a, 0xa1, 0x7e, 0xaf, 0x3d, 0xa6, 0x16, 0x1a, 0x6a, 0xca, 0xbf, 0x8a, + 0x5a, 0xa8, 0x4f, 0x94, 0xb0, 0xfc, 0x67, 0x02, 0x2c, 0x0e, 0xb4, 0xe1, 0x69, 0xf9, 0x26, 0xb9, + 0x63, 0x9f, 0x8c, 0xed, 0x3d, 0xca, 0xf6, 0x43, 0xb1, 0x7a, 0x01, 0xb6, 0x29, 0x59, 0x27, 0x20, + 0x4b, 0x18, 0xff, 0x2b, 0x01, 0xd0, 0x70, 0xfb, 0x8e, 0xee, 0xa6, 0x84, 0xc7, 0x51, 0xcd, 0xfe, + 0x64, 0xec, 0x37, 0x29, 0xfb, 0x75, 0x71, 0xfb, 0xfc, 0xec, 0x6b, 0x01, 0xe5, 0x98, 0x04, 0x7f, + 0x2e, 0xd0, 0x69, 0x57, 0xfc, 0x6f, 0xbc, 0x6e, 0xa7, 0xbb, 0x69, 0x42, 0xef, 0x3e, 0x19, 0xf7, + 0xfb, 0x94, 0xfb, 0x1d, 0x71, 0xeb, 0x42, 0x36, 0x13, 0xa3, 0x4b, 0x78, 0xff, 0x1b, 0x81, 0xdf, + 0xc8, 0x19, 0x6c, 0x62, 0xc7, 0xdd, 0x97, 0x49, 0xee, 0xd4, 0xaf, 0x38, 0x5e, 0xf2, 0xc8, 0x32, + 0x40, 0xfb, 0xbe, 0xb0, 0xb1, 0xf5, 0x17, 0x02, 0x5c, 0xd3, 0xec, 0xee, 0x48, 0xea, 0x5b, 0xcb, + 0xb5, 0xe0, 0x0f, 0xb4, 0xe8, 0xe5, 0xe3, 0x16, 0x29, 0xfa, 0x5a, 0xc2, 0xd3, 0x2a, 0x47, 0xe8, + 0xd8, 0xa6, 0x6a, 0x75, 0x2a, 0xb6, 0xdb, 0xd9, 0xec, 0x60, 0x8b, 0x96, 0x84, 0x9b, 0x6c, 0x49, + 0x75, 0x0c, 0x6f, 0xf8, 0x1f, 0x1e, 0x3c, 0x08, 0x21, 0x7f, 0x38, 0x75, 0x7d, 0x87, 0x9d, 0x51, + 0x33, 0xed, 0x9e, 0x5e, 0xa9, 0x85, 0xa4, 0x1f, 0xdf, 0xde, 0x22, 0x5b, 0xff, 0x36, 0xd8, 0xf0, + 0x09, 0xdd, 0xf0, 0x49, 0xb8, 0xe1, 0x93, 0xc7, 0xec, 0xac, 0xa3, 0x0c, 0xa5, 0x77, 0xf7, 0x7f, + 0x03, 0x00, 0x00, 0xff, 0xff, 0x4a, 0x57, 0xdd, 0xd1, 0x5f, 0x41, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/datastore/admin/v1beta1/datastore_admin.pb.go b/vendor/google.golang.org/genproto/googleapis/datastore/admin/v1beta1/datastore_admin.pb.go new file mode 100644 index 0000000..e9f3136 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/datastore/admin/v1beta1/datastore_admin.pb.go @@ -0,0 +1,732 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/datastore/admin/v1beta1/datastore_admin.proto + +/* +Package admin is a generated protocol buffer package. + +It is generated from these files: + google/datastore/admin/v1beta1/datastore_admin.proto + +It has these top-level messages: + CommonMetadata + Progress + ExportEntitiesRequest + ImportEntitiesRequest + ExportEntitiesResponse + ExportEntitiesMetadata + ImportEntitiesMetadata + EntityFilter +*/ +package admin + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import google_protobuf3 "github.com/golang/protobuf/ptypes/timestamp" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Operation types. +type OperationType int32 + +const ( + // Unspecified. + OperationType_OPERATION_TYPE_UNSPECIFIED OperationType = 0 + // ExportEntities. + OperationType_EXPORT_ENTITIES OperationType = 1 + // ImportEntities. + OperationType_IMPORT_ENTITIES OperationType = 2 +) + +var OperationType_name = map[int32]string{ + 0: "OPERATION_TYPE_UNSPECIFIED", + 1: "EXPORT_ENTITIES", + 2: "IMPORT_ENTITIES", +} +var OperationType_value = map[string]int32{ + "OPERATION_TYPE_UNSPECIFIED": 0, + "EXPORT_ENTITIES": 1, + "IMPORT_ENTITIES": 2, +} + +func (x OperationType) String() string { + return proto.EnumName(OperationType_name, int32(x)) +} +func (OperationType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +// The various possible states for an ongoing Operation. +type CommonMetadata_State int32 + +const ( + // Unspecified. + CommonMetadata_STATE_UNSPECIFIED CommonMetadata_State = 0 + // Request is being prepared for processing. + CommonMetadata_INITIALIZING CommonMetadata_State = 1 + // Request is actively being processed. + CommonMetadata_PROCESSING CommonMetadata_State = 2 + // Request is in the process of being cancelled after user called + // google.longrunning.Operations.CancelOperation on the operation. + CommonMetadata_CANCELLING CommonMetadata_State = 3 + // Request has been processed and is in its finalization stage. + CommonMetadata_FINALIZING CommonMetadata_State = 4 + // Request has completed successfully. + CommonMetadata_SUCCESSFUL CommonMetadata_State = 5 + // Request has finished being processed, but encountered an error. + CommonMetadata_FAILED CommonMetadata_State = 6 + // Request has finished being cancelled after user called + // google.longrunning.Operations.CancelOperation. + CommonMetadata_CANCELLED CommonMetadata_State = 7 +) + +var CommonMetadata_State_name = map[int32]string{ + 0: "STATE_UNSPECIFIED", + 1: "INITIALIZING", + 2: "PROCESSING", + 3: "CANCELLING", + 4: "FINALIZING", + 5: "SUCCESSFUL", + 6: "FAILED", + 7: "CANCELLED", +} +var CommonMetadata_State_value = map[string]int32{ + "STATE_UNSPECIFIED": 0, + "INITIALIZING": 1, + "PROCESSING": 2, + "CANCELLING": 3, + "FINALIZING": 4, + "SUCCESSFUL": 5, + "FAILED": 6, + "CANCELLED": 7, +} + +func (x CommonMetadata_State) String() string { + return proto.EnumName(CommonMetadata_State_name, int32(x)) +} +func (CommonMetadata_State) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 0} } + +// Metadata common to all Datastore Admin operations. +type CommonMetadata struct { + // The time that work began on the operation. + StartTime *google_protobuf3.Timestamp `protobuf:"bytes,1,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // The time the operation ended, either successfully or otherwise. + EndTime *google_protobuf3.Timestamp `protobuf:"bytes,2,opt,name=end_time,json=endTime" json:"end_time,omitempty"` + // The type of the operation. Can be used as a filter in + // ListOperationsRequest. + OperationType OperationType `protobuf:"varint,3,opt,name=operation_type,json=operationType,enum=google.datastore.admin.v1beta1.OperationType" json:"operation_type,omitempty"` + // The client-assigned labels which were provided when the operation was + // created. May also include additional labels. + Labels map[string]string `protobuf:"bytes,4,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // The current state of the Operation. + State CommonMetadata_State `protobuf:"varint,5,opt,name=state,enum=google.datastore.admin.v1beta1.CommonMetadata_State" json:"state,omitempty"` +} + +func (m *CommonMetadata) Reset() { *m = CommonMetadata{} } +func (m *CommonMetadata) String() string { return proto.CompactTextString(m) } +func (*CommonMetadata) ProtoMessage() {} +func (*CommonMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *CommonMetadata) GetStartTime() *google_protobuf3.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *CommonMetadata) GetEndTime() *google_protobuf3.Timestamp { + if m != nil { + return m.EndTime + } + return nil +} + +func (m *CommonMetadata) GetOperationType() OperationType { + if m != nil { + return m.OperationType + } + return OperationType_OPERATION_TYPE_UNSPECIFIED +} + +func (m *CommonMetadata) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +func (m *CommonMetadata) GetState() CommonMetadata_State { + if m != nil { + return m.State + } + return CommonMetadata_STATE_UNSPECIFIED +} + +// Measures the progress of a particular metric. +type Progress struct { + // The amount of work that has been completed. Note that this may be greater + // than work_estimated. + WorkCompleted int64 `protobuf:"varint,1,opt,name=work_completed,json=workCompleted" json:"work_completed,omitempty"` + // An estimate of how much work needs to be performed. May be zero if the + // work estimate is unavailable. + WorkEstimated int64 `protobuf:"varint,2,opt,name=work_estimated,json=workEstimated" json:"work_estimated,omitempty"` +} + +func (m *Progress) Reset() { *m = Progress{} } +func (m *Progress) String() string { return proto.CompactTextString(m) } +func (*Progress) ProtoMessage() {} +func (*Progress) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *Progress) GetWorkCompleted() int64 { + if m != nil { + return m.WorkCompleted + } + return 0 +} + +func (m *Progress) GetWorkEstimated() int64 { + if m != nil { + return m.WorkEstimated + } + return 0 +} + +// The request for +// [google.datastore.admin.v1beta1.DatastoreAdmin.ExportEntities][google.datastore.admin.v1beta1.DatastoreAdmin.ExportEntities]. +type ExportEntitiesRequest struct { + // Project ID against which to make the request. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Client-assigned labels. + Labels map[string]string `protobuf:"bytes,2,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Description of what data from the project is included in the export. + EntityFilter *EntityFilter `protobuf:"bytes,3,opt,name=entity_filter,json=entityFilter" json:"entity_filter,omitempty"` + // Location for the export metadata and data files. + // + // The full resource URL of the external storage location. Currently, only + // Google Cloud Storage is supported. So output_url_prefix should be of the + // form: `gs://BUCKET_NAME[/NAMESPACE_PATH]`, where `BUCKET_NAME` is the + // name of the Cloud Storage bucket and `NAMESPACE_PATH` is an optional Cloud + // Storage namespace path (this is not a Cloud Datastore namespace). For more + // information about Cloud Storage namespace paths, see + // [Object name + // considerations](https://cloud.google.com/storage/docs/naming#object-considerations). + // + // The resulting files will be nested deeper than the specified URL prefix. + // The final output URL will be provided in the + // [google.datastore.admin.v1beta1.ExportEntitiesResponse.output_url][google.datastore.admin.v1beta1.ExportEntitiesResponse.output_url] + // field. That value should be used for subsequent ImportEntities operations. + // + // By nesting the data files deeper, the same Cloud Storage bucket can be used + // in multiple ExportEntities operations without conflict. + OutputUrlPrefix string `protobuf:"bytes,4,opt,name=output_url_prefix,json=outputUrlPrefix" json:"output_url_prefix,omitempty"` +} + +func (m *ExportEntitiesRequest) Reset() { *m = ExportEntitiesRequest{} } +func (m *ExportEntitiesRequest) String() string { return proto.CompactTextString(m) } +func (*ExportEntitiesRequest) ProtoMessage() {} +func (*ExportEntitiesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *ExportEntitiesRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *ExportEntitiesRequest) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +func (m *ExportEntitiesRequest) GetEntityFilter() *EntityFilter { + if m != nil { + return m.EntityFilter + } + return nil +} + +func (m *ExportEntitiesRequest) GetOutputUrlPrefix() string { + if m != nil { + return m.OutputUrlPrefix + } + return "" +} + +// The request for +// [google.datastore.admin.v1beta1.DatastoreAdmin.ImportEntities][google.datastore.admin.v1beta1.DatastoreAdmin.ImportEntities]. +type ImportEntitiesRequest struct { + // Project ID against which to make the request. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Client-assigned labels. + Labels map[string]string `protobuf:"bytes,2,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // The full resource URL of the external storage location. Currently, only + // Google Cloud Storage is supported. So input_url should be of the form: + // `gs://BUCKET_NAME[/NAMESPACE_PATH]/OVERALL_EXPORT_METADATA_FILE`, where + // `BUCKET_NAME` is the name of the Cloud Storage bucket, `NAMESPACE_PATH` is + // an optional Cloud Storage namespace path (this is not a Cloud Datastore + // namespace), and `OVERALL_EXPORT_METADATA_FILE` is the metadata file written + // by the ExportEntities operation. For more information about Cloud Storage + // namespace paths, see + // [Object name + // considerations](https://cloud.google.com/storage/docs/naming#object-considerations). + // + // For more information, see + // [google.datastore.admin.v1beta1.ExportEntitiesResponse.output_url][google.datastore.admin.v1beta1.ExportEntitiesResponse.output_url]. + InputUrl string `protobuf:"bytes,3,opt,name=input_url,json=inputUrl" json:"input_url,omitempty"` + // Optionally specify which kinds/namespaces are to be imported. If provided, + // the list must be a subset of the EntityFilter used in creating the export, + // otherwise a FAILED_PRECONDITION error will be returned. If no filter is + // specified then all entities from the export are imported. + EntityFilter *EntityFilter `protobuf:"bytes,4,opt,name=entity_filter,json=entityFilter" json:"entity_filter,omitempty"` +} + +func (m *ImportEntitiesRequest) Reset() { *m = ImportEntitiesRequest{} } +func (m *ImportEntitiesRequest) String() string { return proto.CompactTextString(m) } +func (*ImportEntitiesRequest) ProtoMessage() {} +func (*ImportEntitiesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *ImportEntitiesRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *ImportEntitiesRequest) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +func (m *ImportEntitiesRequest) GetInputUrl() string { + if m != nil { + return m.InputUrl + } + return "" +} + +func (m *ImportEntitiesRequest) GetEntityFilter() *EntityFilter { + if m != nil { + return m.EntityFilter + } + return nil +} + +// The response for +// [google.datastore.admin.v1beta1.DatastoreAdmin.ExportEntities][google.datastore.admin.v1beta1.DatastoreAdmin.ExportEntities]. +type ExportEntitiesResponse struct { + // Location of the output metadata file. This can be used to begin an import + // into Cloud Datastore (this project or another project). See + // [google.datastore.admin.v1beta1.ImportEntitiesRequest.input_url][google.datastore.admin.v1beta1.ImportEntitiesRequest.input_url]. + // Only present if the operation completed successfully. + OutputUrl string `protobuf:"bytes,1,opt,name=output_url,json=outputUrl" json:"output_url,omitempty"` +} + +func (m *ExportEntitiesResponse) Reset() { *m = ExportEntitiesResponse{} } +func (m *ExportEntitiesResponse) String() string { return proto.CompactTextString(m) } +func (*ExportEntitiesResponse) ProtoMessage() {} +func (*ExportEntitiesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *ExportEntitiesResponse) GetOutputUrl() string { + if m != nil { + return m.OutputUrl + } + return "" +} + +// Metadata for ExportEntities operations. +type ExportEntitiesMetadata struct { + // Metadata common to all Datastore Admin operations. + Common *CommonMetadata `protobuf:"bytes,1,opt,name=common" json:"common,omitempty"` + // An estimate of the number of entities processed. + ProgressEntities *Progress `protobuf:"bytes,2,opt,name=progress_entities,json=progressEntities" json:"progress_entities,omitempty"` + // An estimate of the number of bytes processed. + ProgressBytes *Progress `protobuf:"bytes,3,opt,name=progress_bytes,json=progressBytes" json:"progress_bytes,omitempty"` + // Description of which entities are being exported. + EntityFilter *EntityFilter `protobuf:"bytes,4,opt,name=entity_filter,json=entityFilter" json:"entity_filter,omitempty"` + // Location for the export metadata and data files. This will be the same + // value as the + // [google.datastore.admin.v1beta1.ExportEntitiesRequest.output_url_prefix][google.datastore.admin.v1beta1.ExportEntitiesRequest.output_url_prefix] + // field. The final output location is provided in + // [google.datastore.admin.v1beta1.ExportEntitiesResponse.output_url][google.datastore.admin.v1beta1.ExportEntitiesResponse.output_url]. + OutputUrlPrefix string `protobuf:"bytes,5,opt,name=output_url_prefix,json=outputUrlPrefix" json:"output_url_prefix,omitempty"` +} + +func (m *ExportEntitiesMetadata) Reset() { *m = ExportEntitiesMetadata{} } +func (m *ExportEntitiesMetadata) String() string { return proto.CompactTextString(m) } +func (*ExportEntitiesMetadata) ProtoMessage() {} +func (*ExportEntitiesMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *ExportEntitiesMetadata) GetCommon() *CommonMetadata { + if m != nil { + return m.Common + } + return nil +} + +func (m *ExportEntitiesMetadata) GetProgressEntities() *Progress { + if m != nil { + return m.ProgressEntities + } + return nil +} + +func (m *ExportEntitiesMetadata) GetProgressBytes() *Progress { + if m != nil { + return m.ProgressBytes + } + return nil +} + +func (m *ExportEntitiesMetadata) GetEntityFilter() *EntityFilter { + if m != nil { + return m.EntityFilter + } + return nil +} + +func (m *ExportEntitiesMetadata) GetOutputUrlPrefix() string { + if m != nil { + return m.OutputUrlPrefix + } + return "" +} + +// Metadata for ImportEntities operations. +type ImportEntitiesMetadata struct { + // Metadata common to all Datastore Admin operations. + Common *CommonMetadata `protobuf:"bytes,1,opt,name=common" json:"common,omitempty"` + // An estimate of the number of entities processed. + ProgressEntities *Progress `protobuf:"bytes,2,opt,name=progress_entities,json=progressEntities" json:"progress_entities,omitempty"` + // An estimate of the number of bytes processed. + ProgressBytes *Progress `protobuf:"bytes,3,opt,name=progress_bytes,json=progressBytes" json:"progress_bytes,omitempty"` + // Description of which entities are being imported. + EntityFilter *EntityFilter `protobuf:"bytes,4,opt,name=entity_filter,json=entityFilter" json:"entity_filter,omitempty"` + // The location of the import metadata file. This will be the same value as + // the [google.datastore.admin.v1beta1.ExportEntitiesResponse.output_url][google.datastore.admin.v1beta1.ExportEntitiesResponse.output_url] + // field. + InputUrl string `protobuf:"bytes,5,opt,name=input_url,json=inputUrl" json:"input_url,omitempty"` +} + +func (m *ImportEntitiesMetadata) Reset() { *m = ImportEntitiesMetadata{} } +func (m *ImportEntitiesMetadata) String() string { return proto.CompactTextString(m) } +func (*ImportEntitiesMetadata) ProtoMessage() {} +func (*ImportEntitiesMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *ImportEntitiesMetadata) GetCommon() *CommonMetadata { + if m != nil { + return m.Common + } + return nil +} + +func (m *ImportEntitiesMetadata) GetProgressEntities() *Progress { + if m != nil { + return m.ProgressEntities + } + return nil +} + +func (m *ImportEntitiesMetadata) GetProgressBytes() *Progress { + if m != nil { + return m.ProgressBytes + } + return nil +} + +func (m *ImportEntitiesMetadata) GetEntityFilter() *EntityFilter { + if m != nil { + return m.EntityFilter + } + return nil +} + +func (m *ImportEntitiesMetadata) GetInputUrl() string { + if m != nil { + return m.InputUrl + } + return "" +} + +// Identifies a subset of entities in a project. This is specified as +// combinations of kinds and namespaces (either or both of which may be all, as +// described in the following examples). +// Example usage: +// +// Entire project: +// kinds=[], namespace_ids=[] +// +// Kinds Foo and Bar in all namespaces: +// kinds=['Foo', 'Bar'], namespace_ids=[] +// +// Kinds Foo and Bar only in the default namespace: +// kinds=['Foo', 'Bar'], namespace_ids=[''] +// +// Kinds Foo and Bar in both the default and Baz namespaces: +// kinds=['Foo', 'Bar'], namespace_ids=['', 'Baz'] +// +// The entire Baz namespace: +// kinds=[], namespace_ids=['Baz'] +type EntityFilter struct { + // If empty, then this represents all kinds. + Kinds []string `protobuf:"bytes,1,rep,name=kinds" json:"kinds,omitempty"` + // An empty list represents all namespaces. This is the preferred + // usage for projects that don't use namespaces. + // + // An empty string element represents the default namespace. This should be + // used if the project has data in non-default namespaces, but doesn't want to + // include them. + // Each namespace in this list must be unique. + NamespaceIds []string `protobuf:"bytes,2,rep,name=namespace_ids,json=namespaceIds" json:"namespace_ids,omitempty"` +} + +func (m *EntityFilter) Reset() { *m = EntityFilter{} } +func (m *EntityFilter) String() string { return proto.CompactTextString(m) } +func (*EntityFilter) ProtoMessage() {} +func (*EntityFilter) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *EntityFilter) GetKinds() []string { + if m != nil { + return m.Kinds + } + return nil +} + +func (m *EntityFilter) GetNamespaceIds() []string { + if m != nil { + return m.NamespaceIds + } + return nil +} + +func init() { + proto.RegisterType((*CommonMetadata)(nil), "google.datastore.admin.v1beta1.CommonMetadata") + proto.RegisterType((*Progress)(nil), "google.datastore.admin.v1beta1.Progress") + proto.RegisterType((*ExportEntitiesRequest)(nil), "google.datastore.admin.v1beta1.ExportEntitiesRequest") + proto.RegisterType((*ImportEntitiesRequest)(nil), "google.datastore.admin.v1beta1.ImportEntitiesRequest") + proto.RegisterType((*ExportEntitiesResponse)(nil), "google.datastore.admin.v1beta1.ExportEntitiesResponse") + proto.RegisterType((*ExportEntitiesMetadata)(nil), "google.datastore.admin.v1beta1.ExportEntitiesMetadata") + proto.RegisterType((*ImportEntitiesMetadata)(nil), "google.datastore.admin.v1beta1.ImportEntitiesMetadata") + proto.RegisterType((*EntityFilter)(nil), "google.datastore.admin.v1beta1.EntityFilter") + proto.RegisterEnum("google.datastore.admin.v1beta1.OperationType", OperationType_name, OperationType_value) + proto.RegisterEnum("google.datastore.admin.v1beta1.CommonMetadata_State", CommonMetadata_State_name, CommonMetadata_State_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for DatastoreAdmin service + +type DatastoreAdminClient interface { + // Exports a copy of all or a subset of entities from Google Cloud Datastore + // to another storage system, such as Google Cloud Storage. Recent updates to + // entities may not be reflected in the export. The export occurs in the + // background and its progress can be monitored and managed via the + // Operation resource that is created. The output of an export may only be + // used once the associated operation is done. If an export operation is + // cancelled before completion it may leave partial data behind in Google + // Cloud Storage. + ExportEntities(ctx context.Context, in *ExportEntitiesRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Imports entities into Google Cloud Datastore. Existing entities with the + // same key are overwritten. The import occurs in the background and its + // progress can be monitored and managed via the Operation resource that is + // created. If an ImportEntities operation is cancelled, it is possible + // that a subset of the data has already been imported to Cloud Datastore. + ImportEntities(ctx context.Context, in *ImportEntitiesRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) +} + +type datastoreAdminClient struct { + cc *grpc.ClientConn +} + +func NewDatastoreAdminClient(cc *grpc.ClientConn) DatastoreAdminClient { + return &datastoreAdminClient{cc} +} + +func (c *datastoreAdminClient) ExportEntities(ctx context.Context, in *ExportEntitiesRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.datastore.admin.v1beta1.DatastoreAdmin/ExportEntities", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *datastoreAdminClient) ImportEntities(ctx context.Context, in *ImportEntitiesRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.datastore.admin.v1beta1.DatastoreAdmin/ImportEntities", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for DatastoreAdmin service + +type DatastoreAdminServer interface { + // Exports a copy of all or a subset of entities from Google Cloud Datastore + // to another storage system, such as Google Cloud Storage. Recent updates to + // entities may not be reflected in the export. The export occurs in the + // background and its progress can be monitored and managed via the + // Operation resource that is created. The output of an export may only be + // used once the associated operation is done. If an export operation is + // cancelled before completion it may leave partial data behind in Google + // Cloud Storage. + ExportEntities(context.Context, *ExportEntitiesRequest) (*google_longrunning.Operation, error) + // Imports entities into Google Cloud Datastore. Existing entities with the + // same key are overwritten. The import occurs in the background and its + // progress can be monitored and managed via the Operation resource that is + // created. If an ImportEntities operation is cancelled, it is possible + // that a subset of the data has already been imported to Cloud Datastore. + ImportEntities(context.Context, *ImportEntitiesRequest) (*google_longrunning.Operation, error) +} + +func RegisterDatastoreAdminServer(s *grpc.Server, srv DatastoreAdminServer) { + s.RegisterService(&_DatastoreAdmin_serviceDesc, srv) +} + +func _DatastoreAdmin_ExportEntities_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ExportEntitiesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatastoreAdminServer).ExportEntities(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.datastore.admin.v1beta1.DatastoreAdmin/ExportEntities", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatastoreAdminServer).ExportEntities(ctx, req.(*ExportEntitiesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DatastoreAdmin_ImportEntities_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ImportEntitiesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatastoreAdminServer).ImportEntities(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.datastore.admin.v1beta1.DatastoreAdmin/ImportEntities", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatastoreAdminServer).ImportEntities(ctx, req.(*ImportEntitiesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _DatastoreAdmin_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.datastore.admin.v1beta1.DatastoreAdmin", + HandlerType: (*DatastoreAdminServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ExportEntities", + Handler: _DatastoreAdmin_ExportEntities_Handler, + }, + { + MethodName: "ImportEntities", + Handler: _DatastoreAdmin_ImportEntities_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/datastore/admin/v1beta1/datastore_admin.proto", +} + +func init() { + proto.RegisterFile("google/datastore/admin/v1beta1/datastore_admin.proto", fileDescriptor0) +} + +var fileDescriptor0 = []byte{ + // 996 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x56, 0x41, 0x8f, 0xdb, 0x44, + 0x14, 0xc6, 0xce, 0x26, 0x6d, 0xde, 0x6e, 0xd2, 0xec, 0x94, 0xad, 0xa2, 0x40, 0xcb, 0xca, 0xa5, + 0xd2, 0x6a, 0x05, 0x0e, 0x1b, 0x5a, 0x41, 0x97, 0x53, 0x36, 0xeb, 0x54, 0x46, 0x69, 0x12, 0x1c, + 0x07, 0x75, 0x7b, 0xb1, 0x9c, 0x78, 0x36, 0x32, 0x6b, 0x7b, 0x8c, 0x3d, 0x29, 0x8d, 0x10, 0x17, + 0x2e, 0x1c, 0x38, 0x72, 0xe1, 0x1f, 0x20, 0xf1, 0x1b, 0xb8, 0x70, 0xe1, 0xc2, 0x91, 0xbf, 0xc0, + 0x8f, 0xe0, 0x88, 0x66, 0x3c, 0x76, 0xe2, 0x25, 0x10, 0xca, 0x16, 0x4e, 0xdc, 0xfc, 0xde, 0xbc, + 0xef, 0x9b, 0x37, 0xdf, 0x9b, 0xf7, 0x3c, 0x70, 0x7f, 0x46, 0xc8, 0xcc, 0xc3, 0x4d, 0xc7, 0xa6, + 0x76, 0x4c, 0x49, 0x84, 0x9b, 0xb6, 0xe3, 0xbb, 0x41, 0xf3, 0xd9, 0xd1, 0x04, 0x53, 0xfb, 0x68, + 0xe9, 0xb7, 0xb8, 0x5f, 0x0d, 0x23, 0x42, 0x09, 0xba, 0x93, 0xa0, 0xd4, 0x6c, 0x55, 0x4d, 0x56, + 0x05, 0xaa, 0xf1, 0xba, 0x60, 0xb5, 0x43, 0xb7, 0x69, 0x07, 0x01, 0xa1, 0x36, 0x75, 0x49, 0x10, + 0x27, 0xe8, 0xc6, 0x5d, 0xb1, 0xea, 0x91, 0x60, 0x16, 0xcd, 0x83, 0xc0, 0x0d, 0x66, 0x4d, 0x12, + 0xe2, 0x28, 0x17, 0xf4, 0x86, 0x08, 0xe2, 0xd6, 0x64, 0x7e, 0xde, 0xa4, 0xae, 0x8f, 0x63, 0x6a, + 0xfb, 0x61, 0x12, 0xa0, 0xfc, 0xb8, 0x05, 0xd5, 0x0e, 0xf1, 0x7d, 0x12, 0x3c, 0xc6, 0xd4, 0x66, + 0x99, 0xa0, 0x87, 0x00, 0x31, 0xb5, 0x23, 0x6a, 0xb1, 0xd8, 0xba, 0xb4, 0x2f, 0x1d, 0x6c, 0xb7, + 0x1a, 0xaa, 0xc8, 0x35, 0x25, 0x52, 0xcd, 0x94, 0xc8, 0x28, 0xf3, 0x68, 0x66, 0xa3, 0x07, 0x70, + 0x1d, 0x07, 0x4e, 0x02, 0x94, 0x37, 0x02, 0xaf, 0xe1, 0xc0, 0xe1, 0x30, 0x13, 0xaa, 0x59, 0xe6, + 0x16, 0x5d, 0x84, 0xb8, 0x5e, 0xd8, 0x97, 0x0e, 0xaa, 0xad, 0xb7, 0xd5, 0xbf, 0x56, 0x48, 0x1d, + 0xa4, 0x28, 0x73, 0x11, 0x62, 0xa3, 0x42, 0x56, 0x4d, 0x64, 0x40, 0xc9, 0xb3, 0x27, 0xd8, 0x8b, + 0xeb, 0x5b, 0xfb, 0x85, 0x83, 0xed, 0xd6, 0xf1, 0x26, 0xb6, 0xbc, 0x0e, 0x6a, 0x8f, 0x83, 0xb5, + 0x80, 0x46, 0x0b, 0x43, 0x30, 0xa1, 0x0f, 0xa1, 0x18, 0x53, 0x9b, 0xe2, 0x7a, 0x91, 0x27, 0x78, + 0xff, 0x05, 0x29, 0x47, 0x0c, 0x6b, 0x24, 0x14, 0x8d, 0x87, 0xb0, 0xbd, 0xb2, 0x05, 0xaa, 0x41, + 0xe1, 0x02, 0x2f, 0xb8, 0xde, 0x65, 0x83, 0x7d, 0xa2, 0x57, 0xa1, 0xf8, 0xcc, 0xf6, 0xe6, 0x89, + 0x94, 0x65, 0x23, 0x31, 0x8e, 0xe5, 0xf7, 0x25, 0xe5, 0x6b, 0x09, 0x8a, 0x9c, 0x0b, 0xed, 0xc1, + 0xee, 0xc8, 0x6c, 0x9b, 0x9a, 0x35, 0xee, 0x8f, 0x86, 0x5a, 0x47, 0xef, 0xea, 0xda, 0x69, 0xed, + 0x15, 0x54, 0x83, 0x1d, 0xbd, 0xaf, 0x9b, 0x7a, 0xbb, 0xa7, 0x3f, 0xd5, 0xfb, 0x8f, 0x6a, 0x12, + 0xaa, 0x02, 0x0c, 0x8d, 0x41, 0x47, 0x1b, 0x8d, 0x98, 0x2d, 0x33, 0xbb, 0xd3, 0xee, 0x77, 0xb4, + 0x5e, 0x8f, 0xd9, 0x05, 0x66, 0x77, 0xf5, 0x7e, 0x1a, 0xbf, 0xc5, 0xec, 0xd1, 0xb8, 0xc3, 0xe2, + 0xbb, 0xe3, 0x5e, 0xad, 0x88, 0x00, 0x4a, 0xdd, 0xb6, 0xde, 0xd3, 0x4e, 0x6b, 0x25, 0x54, 0x81, + 0xb2, 0xc0, 0x6a, 0xa7, 0xb5, 0x6b, 0xca, 0x13, 0xb8, 0x3e, 0x8c, 0xc8, 0x2c, 0xc2, 0x71, 0x8c, + 0xee, 0x41, 0xf5, 0x33, 0x12, 0x5d, 0x58, 0x53, 0xe2, 0x87, 0x1e, 0xa6, 0xd8, 0xe1, 0x07, 0x2a, + 0x18, 0x15, 0xe6, 0xed, 0xa4, 0xce, 0x2c, 0x0c, 0xc7, 0xd4, 0xf5, 0x6d, 0x16, 0x26, 0x2f, 0xc3, + 0xb4, 0xd4, 0xa9, 0xfc, 0x2c, 0xc3, 0x9e, 0xf6, 0x3c, 0x24, 0x11, 0xd5, 0x02, 0xea, 0x52, 0x17, + 0xc7, 0x06, 0xfe, 0x74, 0x8e, 0x63, 0x8a, 0x6e, 0x03, 0x84, 0x11, 0xf9, 0x04, 0x4f, 0xa9, 0xe5, + 0x3a, 0x42, 0xb4, 0xb2, 0xf0, 0xe8, 0x0e, 0x3a, 0xcb, 0x6a, 0x2f, 0xf3, 0xda, 0xb7, 0x37, 0x15, + 0x6a, 0xed, 0x2e, 0x6b, 0xaf, 0xc0, 0x47, 0x50, 0xc1, 0x2c, 0x6c, 0x61, 0x9d, 0xbb, 0x1e, 0xc5, + 0x11, 0xbf, 0xab, 0xdb, 0xad, 0xb7, 0x36, 0xee, 0xc0, 0x41, 0x5d, 0x8e, 0x31, 0x76, 0xf0, 0x8a, + 0x85, 0x0e, 0x61, 0x97, 0xcc, 0x69, 0x38, 0xa7, 0xd6, 0x3c, 0xf2, 0xac, 0x30, 0xc2, 0xe7, 0xee, + 0xf3, 0xfa, 0x16, 0x3f, 0xd3, 0x8d, 0x64, 0x61, 0x1c, 0x79, 0x43, 0xee, 0xbe, 0xca, 0xad, 0xf9, + 0x41, 0x86, 0x3d, 0xdd, 0xff, 0x2f, 0xd4, 0x5c, 0xbb, 0xcb, 0x5a, 0x35, 0x5f, 0x83, 0xb2, 0x1b, + 0x88, 0x93, 0x73, 0x25, 0xcb, 0xc6, 0x75, 0xee, 0x18, 0x47, 0xde, 0x1f, 0xa5, 0xde, 0xba, 0xaa, + 0xd4, 0x57, 0x91, 0xef, 0x3d, 0xb8, 0x75, 0xf9, 0x96, 0xc4, 0x21, 0x09, 0x62, 0xcc, 0xe4, 0x5b, + 0xd6, 0x2f, 0x95, 0x2f, 0x2b, 0x9c, 0xf2, 0x55, 0xe1, 0x32, 0x32, 0x9b, 0xb5, 0x5d, 0x28, 0x4d, + 0xf9, 0x88, 0x10, 0x73, 0x56, 0x7d, 0xb1, 0x81, 0x62, 0x08, 0x34, 0x1a, 0xc3, 0x6e, 0x28, 0x5a, + 0xd0, 0xc2, 0x62, 0x13, 0x31, 0x81, 0x0f, 0x36, 0x51, 0xa6, 0xbd, 0x6b, 0xd4, 0x52, 0x8a, 0x34, + 0x4d, 0x34, 0x80, 0x6a, 0x46, 0x3b, 0x59, 0x50, 0x1c, 0x8b, 0xcb, 0xfe, 0xf7, 0x39, 0x2b, 0x29, + 0xfe, 0x84, 0xc1, 0xff, 0x85, 0x8a, 0xae, 0x6f, 0x9e, 0xe2, 0xda, 0xe6, 0x51, 0x7e, 0x93, 0xe1, + 0x56, 0xfe, 0x6e, 0xfe, 0x5f, 0x89, 0x97, 0x57, 0x89, 0x5c, 0x2f, 0x17, 0xf3, 0xbd, 0xac, 0xe8, + 0xb0, 0xb3, 0x0a, 0x65, 0x7d, 0x76, 0xe1, 0x06, 0x4e, 0x5c, 0x97, 0xf6, 0x0b, 0xac, 0xcf, 0xb8, + 0x81, 0xee, 0x42, 0x25, 0xb0, 0x7d, 0x1c, 0x87, 0xf6, 0x14, 0x5b, 0xae, 0x93, 0x0c, 0x9c, 0xb2, + 0xb1, 0x93, 0x39, 0x75, 0x27, 0x3e, 0x3c, 0x83, 0x4a, 0xee, 0xc7, 0x8f, 0xee, 0x40, 0x63, 0x30, + 0xd4, 0x8c, 0xb6, 0xa9, 0x0f, 0xfa, 0x96, 0x79, 0x36, 0xbc, 0xfc, 0x37, 0xbc, 0x09, 0x37, 0xb4, + 0x27, 0xc3, 0x81, 0x61, 0x5a, 0x5a, 0xdf, 0xd4, 0x4d, 0x5d, 0x1b, 0xd5, 0x24, 0xe6, 0xd4, 0x1f, + 0xe7, 0x9d, 0x72, 0xeb, 0x27, 0x19, 0xaa, 0xa7, 0xe9, 0xc9, 0xdb, 0xec, 0xe0, 0xe8, 0x5b, 0x09, + 0xaa, 0xf9, 0xee, 0x45, 0x0f, 0xfe, 0xd1, 0xdf, 0xa4, 0x71, 0x3b, 0x85, 0xad, 0x3c, 0xd9, 0x96, + 0x4f, 0x18, 0xe5, 0x9d, 0x2f, 0x7f, 0xf9, 0xf5, 0x1b, 0xf9, 0x50, 0xb9, 0x97, 0x3d, 0x1b, 0xc5, + 0x04, 0x8e, 0x9b, 0x9f, 0x2f, 0xa7, 0xf3, 0x17, 0xc7, 0x98, 0x93, 0x1f, 0x4b, 0x87, 0x3c, 0xb5, + 0xfc, 0x75, 0xde, 0x9c, 0xda, 0xda, 0xd1, 0xfc, 0xb2, 0x52, 0x73, 0x7d, 0x91, 0xda, 0xc9, 0x77, + 0x12, 0x28, 0x53, 0xe2, 0x6f, 0xc8, 0xe6, 0xe4, 0x66, 0x5e, 0xec, 0x21, 0x7b, 0x24, 0x0e, 0xa5, + 0xa7, 0x1d, 0x01, 0x9b, 0x11, 0xcf, 0x0e, 0x66, 0x2a, 0x89, 0x66, 0xcd, 0x19, 0x0e, 0xf8, 0x13, + 0xb2, 0x99, 0x2c, 0xd9, 0xa1, 0x1b, 0xff, 0xd9, 0x73, 0xfb, 0x03, 0x6e, 0x7d, 0x2f, 0xbf, 0xf9, + 0x28, 0x61, 0xe9, 0x78, 0x64, 0xee, 0xa8, 0xd9, 0x4e, 0x2a, 0xdf, 0x4a, 0xfd, 0xf8, 0xe8, 0x84, + 0x05, 0x4f, 0x4a, 0x9c, 0xf6, 0xdd, 0xdf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x77, 0x71, 0x2d, 0x88, + 0xc4, 0x0b, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/datastore/v1/datastore.pb.go b/vendor/google.golang.org/genproto/googleapis/datastore/v1/datastore.pb.go index 9a9adc6..a62c12e 100644 --- a/vendor/google.golang.org/genproto/googleapis/datastore/v1/datastore.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/datastore/v1/datastore.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/datastore/v1/datastore.proto -// DO NOT EDIT! /* Package datastore is a generated protocol buffer package. @@ -23,9 +22,12 @@ It has these top-level messages: CommitResponse AllocateIdsRequest AllocateIdsResponse + ReserveIdsRequest + ReserveIdsResponse Mutation MutationResult ReadOptions + TransactionOptions PartitionId Key ArrayValue @@ -123,7 +125,7 @@ func (x ReadOptions_ReadConsistency) String() string { return proto.EnumName(ReadOptions_ReadConsistency_name, int32(x)) } func (ReadOptions_ReadConsistency) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{14, 0} + return fileDescriptor0, []int{16, 0} } // The request for [Datastore.Lookup][google.datastore.v1.Datastore.Lookup]. @@ -389,6 +391,8 @@ func (m *RunQueryResponse) GetQuery() *Query { type BeginTransactionRequest struct { // The ID of the project against which to make the request. ProjectId string `protobuf:"bytes,8,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Options for a new transaction. + TransactionOptions *TransactionOptions `protobuf:"bytes,10,opt,name=transaction_options,json=transactionOptions" json:"transaction_options,omitempty"` } func (m *BeginTransactionRequest) Reset() { *m = BeginTransactionRequest{} } @@ -403,6 +407,13 @@ func (m *BeginTransactionRequest) GetProjectId() string { return "" } +func (m *BeginTransactionRequest) GetTransactionOptions() *TransactionOptions { + if m != nil { + return m.TransactionOptions + } + return nil +} + // The response for [Datastore.BeginTransaction][google.datastore.v1.Datastore.BeginTransaction]. type BeginTransactionResponse struct { // The transaction identifier (always present). @@ -663,6 +674,52 @@ func (m *AllocateIdsResponse) GetKeys() []*Key { return nil } +// The request for [Datastore.ReserveIds][google.datastore.v1.Datastore.ReserveIds]. +type ReserveIdsRequest struct { + // The ID of the project against which to make the request. + ProjectId string `protobuf:"bytes,8,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // If not empty, the ID of the database against which to make the request. + DatabaseId string `protobuf:"bytes,9,opt,name=database_id,json=databaseId" json:"database_id,omitempty"` + // A list of keys with complete key paths whose numeric IDs should not be + // auto-allocated. + Keys []*Key `protobuf:"bytes,1,rep,name=keys" json:"keys,omitempty"` +} + +func (m *ReserveIdsRequest) Reset() { *m = ReserveIdsRequest{} } +func (m *ReserveIdsRequest) String() string { return proto.CompactTextString(m) } +func (*ReserveIdsRequest) ProtoMessage() {} +func (*ReserveIdsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *ReserveIdsRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *ReserveIdsRequest) GetDatabaseId() string { + if m != nil { + return m.DatabaseId + } + return "" +} + +func (m *ReserveIdsRequest) GetKeys() []*Key { + if m != nil { + return m.Keys + } + return nil +} + +// The response for [Datastore.ReserveIds][google.datastore.v1.Datastore.ReserveIds]. +type ReserveIdsResponse struct { +} + +func (m *ReserveIdsResponse) Reset() { *m = ReserveIdsResponse{} } +func (m *ReserveIdsResponse) String() string { return proto.CompactTextString(m) } +func (*ReserveIdsResponse) ProtoMessage() {} +func (*ReserveIdsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + // A mutation to apply to an entity. type Mutation struct { // The mutation operation. @@ -692,7 +749,7 @@ type Mutation struct { func (m *Mutation) Reset() { *m = Mutation{} } func (m *Mutation) String() string { return proto.CompactTextString(m) } func (*Mutation) ProtoMessage() {} -func (*Mutation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } +func (*Mutation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } type isMutation_Operation interface { isMutation_Operation() @@ -928,7 +985,7 @@ type MutationResult struct { func (m *MutationResult) Reset() { *m = MutationResult{} } func (m *MutationResult) String() string { return proto.CompactTextString(m) } func (*MutationResult) ProtoMessage() {} -func (*MutationResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } +func (*MutationResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } func (m *MutationResult) GetKey() *Key { if m != nil { @@ -966,7 +1023,7 @@ type ReadOptions struct { func (m *ReadOptions) Reset() { *m = ReadOptions{} } func (m *ReadOptions) String() string { return proto.CompactTextString(m) } func (*ReadOptions) ProtoMessage() {} -func (*ReadOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } +func (*ReadOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } type isReadOptions_ConsistencyType interface { isReadOptions_ConsistencyType() @@ -1068,6 +1125,164 @@ func _ReadOptions_OneofSizer(msg proto.Message) (n int) { return n } +// Options for beginning a new transaction. +// +// Transactions can be created explicitly with calls to +// [Datastore.BeginTransaction][google.datastore.v1.Datastore.BeginTransaction] or implicitly by setting +// [ReadOptions.new_transaction][google.datastore.v1.ReadOptions.new_transaction] in read requests. +type TransactionOptions struct { + // The `mode` of the transaction, indicating whether write operations are + // supported. + // + // Types that are valid to be assigned to Mode: + // *TransactionOptions_ReadWrite_ + // *TransactionOptions_ReadOnly_ + Mode isTransactionOptions_Mode `protobuf_oneof:"mode"` +} + +func (m *TransactionOptions) Reset() { *m = TransactionOptions{} } +func (m *TransactionOptions) String() string { return proto.CompactTextString(m) } +func (*TransactionOptions) ProtoMessage() {} +func (*TransactionOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } + +type isTransactionOptions_Mode interface { + isTransactionOptions_Mode() +} + +type TransactionOptions_ReadWrite_ struct { + ReadWrite *TransactionOptions_ReadWrite `protobuf:"bytes,1,opt,name=read_write,json=readWrite,oneof"` +} +type TransactionOptions_ReadOnly_ struct { + ReadOnly *TransactionOptions_ReadOnly `protobuf:"bytes,2,opt,name=read_only,json=readOnly,oneof"` +} + +func (*TransactionOptions_ReadWrite_) isTransactionOptions_Mode() {} +func (*TransactionOptions_ReadOnly_) isTransactionOptions_Mode() {} + +func (m *TransactionOptions) GetMode() isTransactionOptions_Mode { + if m != nil { + return m.Mode + } + return nil +} + +func (m *TransactionOptions) GetReadWrite() *TransactionOptions_ReadWrite { + if x, ok := m.GetMode().(*TransactionOptions_ReadWrite_); ok { + return x.ReadWrite + } + return nil +} + +func (m *TransactionOptions) GetReadOnly() *TransactionOptions_ReadOnly { + if x, ok := m.GetMode().(*TransactionOptions_ReadOnly_); ok { + return x.ReadOnly + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*TransactionOptions) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _TransactionOptions_OneofMarshaler, _TransactionOptions_OneofUnmarshaler, _TransactionOptions_OneofSizer, []interface{}{ + (*TransactionOptions_ReadWrite_)(nil), + (*TransactionOptions_ReadOnly_)(nil), + } +} + +func _TransactionOptions_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*TransactionOptions) + // mode + switch x := m.Mode.(type) { + case *TransactionOptions_ReadWrite_: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ReadWrite); err != nil { + return err + } + case *TransactionOptions_ReadOnly_: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ReadOnly); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("TransactionOptions.Mode has unexpected type %T", x) + } + return nil +} + +func _TransactionOptions_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*TransactionOptions) + switch tag { + case 1: // mode.read_write + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TransactionOptions_ReadWrite) + err := b.DecodeMessage(msg) + m.Mode = &TransactionOptions_ReadWrite_{msg} + return true, err + case 2: // mode.read_only + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TransactionOptions_ReadOnly) + err := b.DecodeMessage(msg) + m.Mode = &TransactionOptions_ReadOnly_{msg} + return true, err + default: + return false, nil + } +} + +func _TransactionOptions_OneofSizer(msg proto.Message) (n int) { + m := msg.(*TransactionOptions) + // mode + switch x := m.Mode.(type) { + case *TransactionOptions_ReadWrite_: + s := proto.Size(x.ReadWrite) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *TransactionOptions_ReadOnly_: + s := proto.Size(x.ReadOnly) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Options specific to read / write transactions. +type TransactionOptions_ReadWrite struct { + // The transaction identifier of the transaction being retried. + PreviousTransaction []byte `protobuf:"bytes,1,opt,name=previous_transaction,json=previousTransaction,proto3" json:"previous_transaction,omitempty"` +} + +func (m *TransactionOptions_ReadWrite) Reset() { *m = TransactionOptions_ReadWrite{} } +func (m *TransactionOptions_ReadWrite) String() string { return proto.CompactTextString(m) } +func (*TransactionOptions_ReadWrite) ProtoMessage() {} +func (*TransactionOptions_ReadWrite) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{17, 0} +} + +func (m *TransactionOptions_ReadWrite) GetPreviousTransaction() []byte { + if m != nil { + return m.PreviousTransaction + } + return nil +} + +// Options specific to read-only transactions. +type TransactionOptions_ReadOnly struct { +} + +func (m *TransactionOptions_ReadOnly) Reset() { *m = TransactionOptions_ReadOnly{} } +func (m *TransactionOptions_ReadOnly) String() string { return proto.CompactTextString(m) } +func (*TransactionOptions_ReadOnly) ProtoMessage() {} +func (*TransactionOptions_ReadOnly) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17, 1} } + func init() { proto.RegisterType((*LookupRequest)(nil), "google.datastore.v1.LookupRequest") proto.RegisterType((*LookupResponse)(nil), "google.datastore.v1.LookupResponse") @@ -1081,9 +1296,14 @@ func init() { proto.RegisterType((*CommitResponse)(nil), "google.datastore.v1.CommitResponse") proto.RegisterType((*AllocateIdsRequest)(nil), "google.datastore.v1.AllocateIdsRequest") proto.RegisterType((*AllocateIdsResponse)(nil), "google.datastore.v1.AllocateIdsResponse") + proto.RegisterType((*ReserveIdsRequest)(nil), "google.datastore.v1.ReserveIdsRequest") + proto.RegisterType((*ReserveIdsResponse)(nil), "google.datastore.v1.ReserveIdsResponse") proto.RegisterType((*Mutation)(nil), "google.datastore.v1.Mutation") proto.RegisterType((*MutationResult)(nil), "google.datastore.v1.MutationResult") proto.RegisterType((*ReadOptions)(nil), "google.datastore.v1.ReadOptions") + proto.RegisterType((*TransactionOptions)(nil), "google.datastore.v1.TransactionOptions") + proto.RegisterType((*TransactionOptions_ReadWrite)(nil), "google.datastore.v1.TransactionOptions.ReadWrite") + proto.RegisterType((*TransactionOptions_ReadOnly)(nil), "google.datastore.v1.TransactionOptions.ReadOnly") proto.RegisterEnum("google.datastore.v1.CommitRequest_Mode", CommitRequest_Mode_name, CommitRequest_Mode_value) proto.RegisterEnum("google.datastore.v1.ReadOptions_ReadConsistency", ReadOptions_ReadConsistency_name, ReadOptions_ReadConsistency_value) } @@ -1113,6 +1333,9 @@ type DatastoreClient interface { // Allocates IDs for the given keys, which is useful for referencing an entity // before it is inserted. AllocateIds(ctx context.Context, in *AllocateIdsRequest, opts ...grpc.CallOption) (*AllocateIdsResponse, error) + // Prevents the supplied keys' IDs from being auto-allocated by Cloud + // Datastore. + ReserveIds(ctx context.Context, in *ReserveIdsRequest, opts ...grpc.CallOption) (*ReserveIdsResponse, error) } type datastoreClient struct { @@ -1177,6 +1400,15 @@ func (c *datastoreClient) AllocateIds(ctx context.Context, in *AllocateIdsReques return out, nil } +func (c *datastoreClient) ReserveIds(ctx context.Context, in *ReserveIdsRequest, opts ...grpc.CallOption) (*ReserveIdsResponse, error) { + out := new(ReserveIdsResponse) + err := grpc.Invoke(ctx, "/google.datastore.v1.Datastore/ReserveIds", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // Server API for Datastore service type DatastoreServer interface { @@ -1194,6 +1426,9 @@ type DatastoreServer interface { // Allocates IDs for the given keys, which is useful for referencing an entity // before it is inserted. AllocateIds(context.Context, *AllocateIdsRequest) (*AllocateIdsResponse, error) + // Prevents the supplied keys' IDs from being auto-allocated by Cloud + // Datastore. + ReserveIds(context.Context, *ReserveIdsRequest) (*ReserveIdsResponse, error) } func RegisterDatastoreServer(s *grpc.Server, srv DatastoreServer) { @@ -1308,6 +1543,24 @@ func _Datastore_AllocateIds_Handler(srv interface{}, ctx context.Context, dec fu return interceptor(ctx, in, info, handler) } +func _Datastore_ReserveIds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ReserveIdsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatastoreServer).ReserveIds(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.datastore.v1.Datastore/ReserveIds", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatastoreServer).ReserveIds(ctx, req.(*ReserveIdsRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _Datastore_serviceDesc = grpc.ServiceDesc{ ServiceName: "google.datastore.v1.Datastore", HandlerType: (*DatastoreServer)(nil), @@ -1336,6 +1589,10 @@ var _Datastore_serviceDesc = grpc.ServiceDesc{ MethodName: "AllocateIds", Handler: _Datastore_AllocateIds_Handler, }, + { + MethodName: "ReserveIds", + Handler: _Datastore_ReserveIds_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "google/datastore/v1/datastore.proto", @@ -1344,81 +1601,92 @@ var _Datastore_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("google/datastore/v1/datastore.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 1205 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0x41, 0x6f, 0xe3, 0x44, - 0x14, 0xae, 0x93, 0x36, 0x9b, 0xbc, 0xa4, 0x69, 0x3a, 0xbb, 0xb0, 0x26, 0xbb, 0x15, 0xc1, 0xa5, - 0xda, 0xa8, 0xbb, 0x9b, 0xb4, 0x81, 0x15, 0xa8, 0xed, 0xa5, 0x49, 0xb3, 0x6d, 0xc4, 0x36, 0x29, - 0xd3, 0xb4, 0x12, 0x48, 0xc8, 0x72, 0xed, 0x69, 0x30, 0x75, 0x3c, 0xae, 0x3d, 0xa9, 0x88, 0x10, - 0x2b, 0x01, 0x5a, 0x7e, 0x00, 0xfc, 0x02, 0x2e, 0x1c, 0x10, 0x47, 0x4e, 0x88, 0x7f, 0xc1, 0x91, - 0x2b, 0xff, 0x80, 0x3f, 0x80, 0x3c, 0x1e, 0x37, 0x75, 0xd6, 0x69, 0x82, 0xc4, 0x2d, 0xf3, 0xf2, - 0x7d, 0x6f, 0xbe, 0xf7, 0xde, 0xcc, 0x7b, 0x63, 0x58, 0xed, 0x51, 0xda, 0xb3, 0x48, 0xd5, 0xd0, - 0x98, 0xe6, 0x31, 0xea, 0x92, 0xea, 0xd5, 0xe6, 0x68, 0x51, 0x71, 0x5c, 0xca, 0x28, 0xba, 0x1b, - 0x80, 0x2a, 0x23, 0xfb, 0xd5, 0x66, 0xf1, 0xa1, 0x60, 0x6a, 0x8e, 0x59, 0xd5, 0x6c, 0x9b, 0x32, - 0x8d, 0x99, 0xd4, 0xf6, 0x02, 0x4a, 0xb1, 0x14, 0xe7, 0x97, 0xd8, 0xcc, 0x64, 0x43, 0x81, 0x78, - 0x3b, 0x0e, 0x71, 0x39, 0x20, 0xae, 0x00, 0x28, 0x3f, 0x49, 0xb0, 0xf8, 0x82, 0xd2, 0x8b, 0x81, - 0x83, 0xc9, 0xe5, 0x80, 0x78, 0x0c, 0xad, 0x00, 0x38, 0x2e, 0xfd, 0x82, 0xe8, 0x4c, 0x35, 0x0d, - 0x39, 0x5d, 0x92, 0xca, 0x19, 0x9c, 0x11, 0x96, 0x96, 0x81, 0x1a, 0x90, 0x73, 0x89, 0x66, 0xa8, - 0xd4, 0xe1, 0x4a, 0x64, 0xa9, 0x24, 0x95, 0xb3, 0xb5, 0x52, 0x25, 0x46, 0x7d, 0x05, 0x13, 0xcd, - 0xe8, 0x04, 0x38, 0x9c, 0x75, 0x47, 0x0b, 0xf4, 0x04, 0xe6, 0x2f, 0xc8, 0xd0, 0x93, 0x93, 0xa5, - 0x64, 0x39, 0x5b, 0x93, 0x63, 0xc9, 0x1f, 0x91, 0x21, 0xe6, 0x28, 0xe5, 0x0f, 0x09, 0xf2, 0xa1, - 0x46, 0xcf, 0xa1, 0xb6, 0x47, 0xd0, 0x07, 0xb0, 0x70, 0x4e, 0x07, 0xb6, 0x21, 0x4b, 0xdc, 0xc3, - 0x3b, 0xb1, 0x1e, 0x9a, 0x3c, 0x13, 0x98, 0x78, 0x03, 0x8b, 0xe1, 0x00, 0x8f, 0xb6, 0xe1, 0x4e, - 0xdf, 0xf4, 0x3c, 0xd3, 0xee, 0xc9, 0x89, 0x59, 0xa9, 0x21, 0x03, 0xbd, 0x0f, 0x69, 0x83, 0x9c, - 0x13, 0xd7, 0x25, 0xc6, 0x54, 0xe9, 0xd7, 0x48, 0xe5, 0xf7, 0x04, 0x2c, 0xe1, 0x81, 0xfd, 0xb1, - 0x9f, 0xf5, 0xd9, 0x93, 0xec, 0x68, 0x2e, 0x33, 0xfd, 0x6c, 0xf9, 0x80, 0xc4, 0x2d, 0x49, 0x3e, - 0x0a, 0x81, 0x2d, 0x03, 0x67, 0x9d, 0xd1, 0xe2, 0xff, 0xa9, 0x54, 0x0d, 0x16, 0xf8, 0x71, 0x91, - 0x93, 0x9c, 0x5d, 0x8c, 0x65, 0xf3, 0xd0, 0x0e, 0xe6, 0x70, 0x00, 0x45, 0x3b, 0x90, 0xe9, 0x5d, - 0x5a, 0x6a, 0xc0, 0xbb, 0xc3, 0x79, 0x2b, 0xb1, 0xbc, 0xfd, 0x4b, 0x2b, 0xa4, 0xa6, 0x7b, 0xe2, - 0x77, 0x3d, 0x07, 0xc0, 0x99, 0x2a, 0x1b, 0x3a, 0x44, 0xf9, 0x46, 0x82, 0xc2, 0x28, 0x79, 0xa2, - 0xfa, 0xdb, 0xb0, 0x70, 0xa6, 0x31, 0xfd, 0x73, 0x11, 0xd2, 0xda, 0x64, 0x51, 0x41, 0x05, 0xeb, - 0x3e, 0x18, 0x07, 0x1c, 0xb4, 0x11, 0x46, 0x94, 0x98, 0x16, 0x91, 0x88, 0x47, 0xf9, 0x10, 0xee, - 0xd7, 0x49, 0xcf, 0xb4, 0xbb, 0xae, 0x66, 0x7b, 0x9a, 0xee, 0x27, 0x66, 0xb6, 0x3a, 0x2a, 0x3b, - 0x20, 0xbf, 0xce, 0x14, 0x41, 0x94, 0x20, 0xcb, 0x46, 0x66, 0x1e, 0x4a, 0x0e, 0xdf, 0x34, 0x29, - 0x18, 0x96, 0x30, 0xb5, 0xac, 0x33, 0x4d, 0xbf, 0x98, 0xf1, 0xdc, 0x4c, 0xf7, 0x89, 0xa0, 0x30, - 0xf2, 0x19, 0x28, 0x51, 0x7e, 0x4d, 0xc0, 0x62, 0x83, 0xf6, 0xfb, 0x26, 0x9b, 0x71, 0x9b, 0x6d, - 0x98, 0xef, 0x53, 0x83, 0xc8, 0x0b, 0x25, 0xa9, 0x9c, 0xaf, 0x3d, 0x8a, 0xcd, 0x60, 0xc4, 0x61, - 0xe5, 0x90, 0x1a, 0x04, 0x73, 0x12, 0x52, 0x62, 0x34, 0x1e, 0xcc, 0x45, 0x54, 0xa2, 0x6d, 0xc8, - 0xf4, 0x07, 0xa2, 0xd7, 0xc9, 0x29, 0x7e, 0xd3, 0xe2, 0x4f, 0xd0, 0xa1, 0x40, 0xe1, 0x11, 0x5e, - 0x79, 0x0e, 0xf3, 0xfe, 0x76, 0xe8, 0x1e, 0x14, 0x0e, 0x3b, 0x7b, 0x4d, 0xf5, 0xa4, 0x7d, 0x7c, - 0xd4, 0x6c, 0xb4, 0x9e, 0xb7, 0x9a, 0x7b, 0x85, 0x39, 0xb4, 0x0c, 0x8b, 0x5d, 0xbc, 0xdb, 0x3e, - 0xde, 0x6d, 0x74, 0x5b, 0x9d, 0xf6, 0xee, 0x8b, 0x82, 0x84, 0xde, 0x80, 0xe5, 0x76, 0xa7, 0xad, - 0x46, 0xcd, 0x89, 0xfa, 0x9b, 0x70, 0xef, 0x86, 0x26, 0xd5, 0x23, 0x16, 0xd1, 0x19, 0x75, 0x95, - 0x57, 0x12, 0xe4, 0xc3, 0xe8, 0x44, 0x2d, 0xdb, 0x50, 0x08, 0xf7, 0x57, 0x5d, 0x7e, 0xe4, 0xc2, - 0xde, 0xb6, 0x7a, 0xbb, 0xec, 0xa0, 0xc1, 0x2c, 0xf5, 0x23, 0x6b, 0x0f, 0xad, 0xc2, 0xa2, 0x69, - 0x1b, 0xe4, 0x4b, 0x75, 0xe0, 0x18, 0x1a, 0x23, 0x9e, 0x3c, 0x5f, 0x92, 0xca, 0x0b, 0x38, 0xc7, - 0x8d, 0x27, 0x81, 0x4d, 0xd1, 0x00, 0xed, 0x5a, 0x16, 0xd5, 0x35, 0x46, 0x5a, 0x86, 0x37, 0x63, - 0xe9, 0xc2, 0xce, 0x2b, 0xcd, 0xd4, 0x79, 0x1b, 0x70, 0x37, 0xb2, 0x85, 0x08, 0xf7, 0xbf, 0x39, - 0xf9, 0x2d, 0x01, 0xe9, 0x30, 0x60, 0xf4, 0x0c, 0x52, 0xa6, 0xed, 0x11, 0x97, 0xf1, 0x90, 0xb2, - 0xb5, 0x07, 0xb7, 0xb4, 0xdf, 0x83, 0x39, 0x2c, 0xc0, 0x3e, 0x2d, 0x48, 0x05, 0x3f, 0x73, 0xd3, - 0x69, 0x01, 0x38, 0xa0, 0xf1, 0xdd, 0x52, 0x33, 0xd2, 0xf8, 0x6e, 0x35, 0x48, 0x19, 0xc4, 0x22, - 0x8c, 0x88, 0xee, 0x35, 0x31, 0x42, 0x9f, 0x13, 0x20, 0xd1, 0x2a, 0xe4, 0xce, 0x34, 0x8f, 0xa8, - 0x57, 0xc4, 0xf5, 0xfc, 0x73, 0xed, 0x67, 0x3e, 0x79, 0x20, 0xe1, 0xac, 0x6f, 0x3d, 0x0d, 0x8c, - 0xf5, 0x2c, 0x64, 0xa8, 0x43, 0x5c, 0x9e, 0x8a, 0xfa, 0x0a, 0x3c, 0xd0, 0xa9, 0x7d, 0x6e, 0x99, - 0x3a, 0x53, 0x0d, 0xc2, 0x88, 0x38, 0x66, 0xcc, 0xd5, 0x18, 0xe9, 0x0d, 0x95, 0xef, 0x24, 0xc8, - 0x47, 0xcf, 0x09, 0x5a, 0x87, 0xe4, 0x05, 0x09, 0x5b, 0xf1, 0xe4, 0xb4, 0xfb, 0x20, 0x24, 0xc3, - 0x9d, 0x50, 0x8a, 0x9f, 0xe9, 0x24, 0x0e, 0x97, 0xe8, 0x31, 0x2c, 0x8f, 0xed, 0x4b, 0x0c, 0x9e, - 0xd6, 0x34, 0x2e, 0x84, 0x7f, 0xec, 0x09, 0xbb, 0xf2, 0x8f, 0x04, 0xd9, 0x1b, 0xc3, 0x01, 0x7d, - 0x06, 0x05, 0x3e, 0x54, 0x74, 0x6a, 0x7b, 0xa6, 0xc7, 0x88, 0xad, 0x0f, 0xf9, 0x15, 0xce, 0xd7, - 0x36, 0xa6, 0x0d, 0x16, 0xfe, 0xbb, 0x31, 0xe2, 0x1d, 0xcc, 0xe1, 0x25, 0x37, 0x6a, 0x1a, 0x6f, - 0x0e, 0x89, 0x98, 0xe6, 0xa0, 0x1c, 0xc2, 0xd2, 0x98, 0x27, 0x54, 0x82, 0x87, 0xb8, 0xb9, 0xbb, - 0xa7, 0x36, 0x3a, 0xed, 0xe3, 0xd6, 0x71, 0xb7, 0xd9, 0x6e, 0x7c, 0x32, 0x76, 0xed, 0x01, 0x52, - 0xc7, 0x5d, 0xdc, 0x69, 0xef, 0x17, 0x24, 0x94, 0x83, 0x74, 0xf3, 0xb4, 0xd9, 0xee, 0x9e, 0xf0, - 0x6b, 0x8e, 0xa0, 0x70, 0x23, 0x18, 0x3e, 0x75, 0x6a, 0x7f, 0xa5, 0x20, 0xb3, 0x17, 0x86, 0x81, - 0x5e, 0x42, 0x2a, 0x78, 0x7e, 0x20, 0x25, 0x36, 0xc6, 0xc8, 0xfb, 0xa9, 0xb8, 0x7a, 0x2b, 0x46, - 0xb4, 0xdc, 0xc7, 0xdf, 0xfe, 0xf9, 0xf7, 0x8f, 0x89, 0x35, 0xa5, 0xe4, 0xbf, 0xc7, 0xc4, 0xed, - 0xf4, 0xaa, 0x5f, 0x8d, 0x6e, 0xee, 0xd7, 0x5b, 0x16, 0x67, 0x6c, 0x49, 0xeb, 0xe8, 0x7b, 0x09, - 0xd2, 0xe1, 0x0c, 0x44, 0xef, 0xc6, 0xa7, 0x39, 0xfa, 0xbe, 0x28, 0xae, 0x4d, 0x41, 0x09, 0x19, - 0x4f, 0xb9, 0x8c, 0x47, 0x8a, 0x32, 0x59, 0x86, 0x2b, 0x38, 0xbe, 0x90, 0x9f, 0x25, 0x28, 0x8c, - 0xcf, 0x33, 0xf4, 0x24, 0x76, 0xab, 0x09, 0x03, 0xb3, 0xf8, 0x74, 0x46, 0xb4, 0x10, 0xf8, 0x8c, - 0x0b, 0xac, 0x2a, 0xeb, 0x93, 0x05, 0x9e, 0x8d, 0x71, 0x7d, 0xa1, 0x2f, 0x21, 0x15, 0x74, 0xe8, - 0x09, 0x15, 0x8b, 0x0c, 0xa7, 0x09, 0x15, 0x8b, 0xb6, 0xf8, 0x59, 0x2a, 0xa6, 0x73, 0xc6, 0x75, - 0xc5, 0xc4, 0x98, 0x9d, 0x54, 0xb1, 0xe8, 0x64, 0x9f, 0x54, 0xb1, 0xf1, 0x59, 0x3d, 0x4b, 0xc5, - 0x04, 0xc7, 0x17, 0xf2, 0x83, 0x04, 0xd9, 0x1b, 0x1d, 0x1c, 0xc5, 0xcf, 0xea, 0xd7, 0xc7, 0x48, - 0xb1, 0x3c, 0x1d, 0x28, 0x14, 0x6d, 0x70, 0x45, 0xeb, 0xca, 0xda, 0x64, 0x45, 0xda, 0x88, 0xb6, - 0x25, 0xad, 0xd7, 0x5f, 0x49, 0x70, 0x5f, 0xa7, 0xfd, 0xb8, 0x1d, 0xea, 0xf9, 0xeb, 0x6b, 0x77, - 0xe4, 0x7f, 0x9f, 0x1c, 0x49, 0x9f, 0xee, 0x08, 0x58, 0x8f, 0x5a, 0x9a, 0xdd, 0xab, 0x50, 0xb7, - 0x57, 0xed, 0x11, 0x9b, 0x7f, 0xbd, 0x54, 0x83, 0xbf, 0x34, 0xc7, 0xf4, 0x22, 0x5f, 0x38, 0xdb, - 0xd7, 0x8b, 0x5f, 0x12, 0x6f, 0xed, 0x07, 0xf4, 0x86, 0x45, 0x07, 0x46, 0xe5, 0xda, 0x7b, 0xe5, - 0x74, 0xf3, 0x2c, 0xc5, 0x9d, 0xbc, 0xf7, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x6b, 0xa3, 0xc8, - 0x39, 0x9f, 0x0d, 0x00, 0x00, + // 1390 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xdf, 0x6f, 0x1b, 0xc5, + 0x13, 0xcf, 0x3a, 0x89, 0x63, 0x8f, 0xf3, 0xc3, 0xd9, 0xe4, 0xfb, 0xad, 0x71, 0x5b, 0xd5, 0x5c, + 0x1a, 0x1a, 0xd2, 0xd6, 0x4e, 0x0c, 0x15, 0x52, 0x53, 0x21, 0xc5, 0x8e, 0xdb, 0x58, 0x34, 0x76, + 0xd8, 0xa4, 0xe1, 0x87, 0x8a, 0xac, 0x8b, 0x6f, 0x6b, 0x8e, 0x9c, 0x6f, 0x2f, 0x77, 0xeb, 0x80, + 0x85, 0xa8, 0x54, 0x10, 0xbc, 0xc1, 0x43, 0xf9, 0x0b, 0xfa, 0xc2, 0x03, 0xe2, 0x91, 0x27, 0xc4, + 0x5f, 0xc0, 0x2b, 0xff, 0x02, 0x8f, 0xbc, 0xf1, 0x0f, 0xa0, 0xdb, 0xdb, 0xb3, 0x7d, 0xce, 0x5d, + 0xec, 0x48, 0xbc, 0x79, 0x67, 0xe7, 0x33, 0xf3, 0x99, 0x99, 0xbd, 0x99, 0x31, 0xac, 0xb4, 0x18, + 0x6b, 0x19, 0xb4, 0xa0, 0xa9, 0x5c, 0x75, 0x38, 0xb3, 0x69, 0xe1, 0x6c, 0xb3, 0x7f, 0xc8, 0x5b, + 0x36, 0xe3, 0x0c, 0x2f, 0x79, 0x4a, 0xf9, 0xbe, 0xfc, 0x6c, 0x33, 0x7b, 0x4d, 0x22, 0x55, 0x4b, + 0x2f, 0xa8, 0xa6, 0xc9, 0xb8, 0xca, 0x75, 0x66, 0x3a, 0x1e, 0x24, 0x9b, 0x0b, 0xb3, 0x4b, 0x4d, + 0xae, 0xf3, 0xae, 0xd4, 0xb8, 0x11, 0xa6, 0x71, 0xda, 0xa1, 0xb6, 0x54, 0x50, 0x5e, 0x21, 0x98, + 0x7b, 0xcc, 0xd8, 0x49, 0xc7, 0x22, 0xf4, 0xb4, 0x43, 0x1d, 0x8e, 0xaf, 0x03, 0x58, 0x36, 0xfb, + 0x8c, 0x36, 0x79, 0x43, 0xd7, 0x32, 0x89, 0x1c, 0x5a, 0x4b, 0x92, 0xa4, 0x94, 0x54, 0x35, 0x5c, + 0x86, 0x59, 0x9b, 0xaa, 0x5a, 0x83, 0x59, 0x82, 0x49, 0x06, 0xe5, 0xd0, 0x5a, 0xaa, 0x98, 0xcb, + 0x87, 0xb0, 0xcf, 0x13, 0xaa, 0x6a, 0x75, 0x4f, 0x8f, 0xa4, 0xec, 0xfe, 0x01, 0xdf, 0x81, 0xa9, + 0x13, 0xda, 0x75, 0x32, 0x93, 0xb9, 0xc9, 0xb5, 0x54, 0x31, 0x13, 0x0a, 0x7e, 0x8f, 0x76, 0x89, + 0xd0, 0x52, 0x7e, 0x47, 0x30, 0xef, 0x73, 0x74, 0x2c, 0x66, 0x3a, 0x14, 0xbf, 0x03, 0xd3, 0xcf, + 0x58, 0xc7, 0xd4, 0x32, 0x48, 0x58, 0x78, 0x3d, 0xd4, 0x42, 0x45, 0x64, 0x82, 0x50, 0xa7, 0x63, + 0x70, 0xe2, 0xe9, 0xe3, 0x2d, 0x98, 0x69, 0xeb, 0x8e, 0xa3, 0x9b, 0xad, 0x4c, 0x6c, 0x5c, 0xa8, + 0x8f, 0xc0, 0x6f, 0x43, 0x42, 0xa3, 0xcf, 0xa8, 0x6d, 0x53, 0x6d, 0x24, 0xf5, 0x9e, 0xa6, 0xf2, + 0x5b, 0x0c, 0x16, 0x48, 0xc7, 0x7c, 0xdf, 0xcd, 0xfa, 0xf8, 0x49, 0xb6, 0x54, 0x9b, 0xeb, 0x6e, + 0xb6, 0x5c, 0x85, 0xd8, 0x05, 0x49, 0xde, 0xf7, 0x15, 0xab, 0x1a, 0x49, 0x59, 0xfd, 0xc3, 0x7f, + 0x53, 0xa9, 0x22, 0x4c, 0x8b, 0xe7, 0x92, 0x99, 0x14, 0xe8, 0x6c, 0x28, 0x5a, 0x84, 0xb6, 0x3b, + 0x41, 0x3c, 0x55, 0xfc, 0x00, 0x92, 0xad, 0x53, 0xa3, 0xe1, 0xe1, 0x66, 0x04, 0xee, 0x7a, 0x28, + 0xee, 0xd1, 0xa9, 0xe1, 0x43, 0x13, 0x2d, 0xf9, 0xbb, 0x34, 0x0b, 0x20, 0x90, 0x0d, 0xde, 0xb5, + 0xa8, 0xf2, 0x02, 0x41, 0xba, 0x9f, 0x3c, 0x59, 0xfd, 0x2d, 0x98, 0x3e, 0x56, 0x79, 0xf3, 0x53, + 0x19, 0xd2, 0x6a, 0x34, 0x29, 0xaf, 0x82, 0x25, 0x57, 0x99, 0x78, 0x18, 0xbc, 0xe1, 0x47, 0x14, + 0x1b, 0x15, 0x91, 0x8c, 0x47, 0x79, 0x89, 0xe0, 0x4a, 0x89, 0xb6, 0x74, 0xf3, 0xd0, 0x56, 0x4d, + 0x47, 0x6d, 0xba, 0x99, 0x19, 0xb3, 0x90, 0x1f, 0xc2, 0x12, 0xef, 0x83, 0x7a, 0xa5, 0x00, 0xe1, + 0xfa, 0x56, 0xa8, 0xeb, 0x01, 0x27, 0x7e, 0x45, 0x30, 0x3f, 0x27, 0x53, 0x1e, 0x40, 0xe6, 0x3c, + 0x27, 0x99, 0x9f, 0x1c, 0xa4, 0x06, 0x10, 0x22, 0x4b, 0xb3, 0x64, 0x50, 0xa4, 0x10, 0x58, 0x20, + 0xcc, 0x30, 0x8e, 0xd5, 0xe6, 0xc9, 0x98, 0x91, 0x8c, 0xb6, 0x89, 0x21, 0xdd, 0xb7, 0xe9, 0x31, + 0x51, 0x7e, 0x89, 0xc1, 0x5c, 0x99, 0xb5, 0xdb, 0x3a, 0x1f, 0xd3, 0xcd, 0x16, 0x4c, 0xb5, 0x99, + 0x46, 0x33, 0xd3, 0x39, 0xb4, 0x36, 0x1f, 0x91, 0xa1, 0x80, 0xc1, 0xfc, 0x1e, 0xd3, 0x28, 0x11, + 0x20, 0xac, 0x84, 0x70, 0xdc, 0x9d, 0x08, 0xb0, 0xc4, 0x5b, 0x90, 0x6c, 0x77, 0x64, 0x1b, 0xcd, + 0xc4, 0xc5, 0x47, 0x1c, 0xfe, 0x38, 0xf7, 0xa4, 0x16, 0xe9, 0xeb, 0x2b, 0x0f, 0x61, 0xca, 0x75, + 0x87, 0x97, 0x21, 0xbd, 0x57, 0xdf, 0xa9, 0x34, 0x9e, 0xd4, 0x0e, 0xf6, 0x2b, 0xe5, 0xea, 0xc3, + 0x6a, 0x65, 0x27, 0x3d, 0x81, 0x17, 0x61, 0xee, 0x90, 0x6c, 0xd7, 0x0e, 0xb6, 0xcb, 0x87, 0xd5, + 0x7a, 0x6d, 0xfb, 0x71, 0x1a, 0xe1, 0xff, 0xc1, 0x62, 0xad, 0x5e, 0x6b, 0x04, 0xc5, 0xb1, 0xd2, + 0xff, 0x61, 0x79, 0xf0, 0x59, 0x38, 0xd4, 0xa0, 0x4d, 0xce, 0x6c, 0xe5, 0x5b, 0x04, 0xf3, 0x7e, + 0x74, 0xb2, 0x96, 0x35, 0x48, 0xfb, 0xfe, 0x1b, 0xb6, 0x78, 0xcd, 0x7e, 0xdb, 0x5c, 0xb9, 0x98, + 0xb6, 0xd7, 0xbb, 0x16, 0xda, 0x81, 0xb3, 0x83, 0x57, 0x60, 0x4e, 0x37, 0x35, 0xfa, 0x45, 0xa3, + 0x63, 0x69, 0x2a, 0xa7, 0x4e, 0x66, 0x2a, 0x87, 0xd6, 0xa6, 0xc9, 0xac, 0x10, 0x3e, 0xf1, 0x64, + 0x8a, 0x0a, 0x78, 0xdb, 0x30, 0x58, 0x53, 0xe5, 0xb4, 0xaa, 0x39, 0x63, 0x96, 0xce, 0x6f, 0xea, + 0x68, 0xac, 0xa6, 0x5e, 0x86, 0xa5, 0x80, 0x0b, 0x19, 0xee, 0xe5, 0x8c, 0xbc, 0x40, 0xb0, 0x48, + 0xa8, 0x43, 0xed, 0xb3, 0x4b, 0xf0, 0xbc, 0x01, 0x29, 0xd7, 0xdc, 0xb1, 0xea, 0x50, 0xf7, 0x3e, + 0x29, 0xee, 0xc1, 0x17, 0x5d, 0x3a, 0x90, 0x65, 0xc0, 0x83, 0x14, 0xe4, 0xc3, 0xff, 0x35, 0x06, + 0x09, 0xbf, 0x14, 0xf8, 0x1e, 0xc4, 0x75, 0xd3, 0xa1, 0x36, 0x17, 0xc9, 0x4e, 0x15, 0xaf, 0x5e, + 0x30, 0x73, 0x76, 0x27, 0x88, 0x54, 0x76, 0x61, 0x5e, 0x91, 0xc4, 0xd7, 0x30, 0x1a, 0xe6, 0x29, + 0x7b, 0x30, 0xe1, 0x2d, 0x3e, 0x26, 0x4c, 0x78, 0x2b, 0x42, 0x5c, 0xa3, 0x06, 0xe5, 0x54, 0xb6, + 0xec, 0xc8, 0xb8, 0x5d, 0x8c, 0xa7, 0x89, 0x57, 0x60, 0x56, 0xa4, 0xf1, 0x8c, 0xda, 0x8e, 0xfb, + 0xc5, 0xb9, 0xb9, 0x9e, 0xdc, 0x45, 0x24, 0xe5, 0x4a, 0x8f, 0x3c, 0x61, 0x29, 0x05, 0x49, 0x66, + 0x51, 0x5b, 0xa4, 0xa2, 0x74, 0x1d, 0xae, 0x36, 0x99, 0xf9, 0xcc, 0xd0, 0x9b, 0xbc, 0xa1, 0x51, + 0x4e, 0xe5, 0x07, 0xc0, 0x6d, 0x95, 0xd3, 0x56, 0x57, 0xf9, 0x06, 0xc1, 0x7c, 0xf0, 0x05, 0xe3, + 0x75, 0x98, 0x3c, 0xa1, 0xfe, 0xfc, 0x89, 0x2e, 0x86, 0xab, 0x84, 0x33, 0x30, 0xe3, 0x53, 0x71, + 0x33, 0x3d, 0x49, 0xfc, 0x23, 0xbe, 0x0d, 0x8b, 0x43, 0x7e, 0xa9, 0x26, 0xd2, 0x9a, 0x20, 0x69, + 0xff, 0x62, 0x47, 0xca, 0x95, 0x7f, 0x10, 0xa4, 0x06, 0x26, 0x22, 0xfe, 0x04, 0xd2, 0x62, 0x92, + 0x36, 0x99, 0xe9, 0xe8, 0x0e, 0xa7, 0x66, 0xb3, 0x2b, 0x9a, 0xcb, 0x7c, 0x71, 0x63, 0xd4, 0x34, + 0x15, 0xbf, 0xcb, 0x7d, 0xdc, 0xee, 0x04, 0x59, 0xb0, 0x83, 0xa2, 0xe1, 0xb6, 0x15, 0x0b, 0x69, + 0x5b, 0xca, 0x1e, 0x2c, 0x0c, 0x59, 0xc2, 0x39, 0xb8, 0x46, 0x2a, 0xdb, 0x3b, 0x8d, 0x72, 0xbd, + 0x76, 0x50, 0x3d, 0x38, 0xac, 0xd4, 0xca, 0x1f, 0x0d, 0x35, 0x24, 0x80, 0xf8, 0xc1, 0x21, 0xa9, + 0xd7, 0x1e, 0xa5, 0x11, 0x9e, 0x85, 0x44, 0xe5, 0xa8, 0x52, 0x3b, 0x7c, 0x22, 0x1a, 0x10, 0x86, + 0xf4, 0x40, 0x30, 0xde, 0xa8, 0xfd, 0x3e, 0x06, 0xf8, 0xfc, 0xf0, 0xc1, 0x04, 0x40, 0x04, 0xff, + 0xb9, 0xad, 0x73, 0x2a, 0x27, 0xee, 0xe6, 0x98, 0x93, 0x4b, 0x44, 0xff, 0x81, 0x0b, 0xdc, 0x9d, + 0x20, 0x49, 0xdb, 0x3f, 0xe0, 0x3a, 0x24, 0xbd, 0xd5, 0xc4, 0x34, 0xfc, 0x39, 0xbc, 0x71, 0x19, + 0x93, 0x75, 0xd3, 0x10, 0x4b, 0x83, 0x2d, 0x7f, 0x67, 0xdf, 0x85, 0x64, 0xcf, 0x15, 0xde, 0x84, + 0x65, 0xcb, 0xa6, 0x67, 0x3a, 0xeb, 0x38, 0x8d, 0xf3, 0x33, 0x6b, 0xc9, 0xbf, 0x1b, 0xb0, 0x9d, + 0x05, 0x48, 0xf8, 0x76, 0x4b, 0x71, 0x6f, 0x04, 0x15, 0xff, 0x9e, 0x81, 0xe4, 0x8e, 0x4f, 0x06, + 0x3f, 0x87, 0xb8, 0xb7, 0x83, 0x62, 0x25, 0x94, 0x69, 0x60, 0x89, 0xce, 0xae, 0x5c, 0xa8, 0x23, + 0x7b, 0xc4, 0xed, 0xaf, 0xff, 0xfc, 0xeb, 0xc7, 0xd8, 0xaa, 0x92, 0x73, 0x97, 0x72, 0xd9, 0x9f, + 0x9c, 0xc2, 0x97, 0xfd, 0xde, 0xf5, 0xd5, 0x7d, 0x43, 0x20, 0xee, 0xa3, 0x75, 0xfc, 0x1d, 0x82, + 0x84, 0xbf, 0x08, 0xe1, 0x9b, 0xe1, 0xcf, 0x2e, 0xb8, 0x64, 0x66, 0x57, 0x47, 0x68, 0x49, 0x1a, + 0x77, 0x05, 0x8d, 0x5b, 0x8a, 0x12, 0x4d, 0xc3, 0x96, 0x18, 0x97, 0xc8, 0x4f, 0x08, 0xd2, 0xc3, + 0x9b, 0x07, 0xbe, 0x13, 0xea, 0x2a, 0x62, 0x69, 0xca, 0xde, 0x1d, 0x53, 0x5b, 0x12, 0xbc, 0x27, + 0x08, 0x16, 0x94, 0xf5, 0x68, 0x82, 0xc7, 0x43, 0x58, 0x97, 0xe8, 0x73, 0x88, 0x7b, 0xb3, 0x34, + 0xa2, 0x62, 0x81, 0x35, 0x22, 0xa2, 0x62, 0xc1, 0x61, 0x3c, 0x4e, 0xc5, 0x9a, 0x02, 0xd1, 0xab, + 0x98, 0x5c, 0x88, 0xa2, 0x2a, 0x16, 0xdc, 0xc1, 0xa2, 0x2a, 0x36, 0xbc, 0x55, 0x8d, 0x53, 0x31, + 0x89, 0x71, 0x89, 0xbc, 0x44, 0x90, 0x1a, 0x98, 0xb5, 0x38, 0x7c, 0xab, 0x3a, 0x3f, 0xf0, 0xb3, + 0x6b, 0xa3, 0x15, 0x25, 0xa3, 0x0d, 0xc1, 0x68, 0x5d, 0x59, 0x8d, 0x66, 0xa4, 0xf6, 0x61, 0x2e, + 0xa9, 0x1f, 0x10, 0x40, 0x7f, 0x6e, 0xe2, 0x37, 0x22, 0x1a, 0xe9, 0xd0, 0x6c, 0xcf, 0xde, 0x1a, + 0xa9, 0x27, 0x19, 0x15, 0x04, 0xa3, 0x37, 0x95, 0x9b, 0x17, 0xe4, 0xa8, 0x87, 0xba, 0x8f, 0xd6, + 0x4b, 0xaf, 0x10, 0x5c, 0x69, 0xb2, 0x76, 0x98, 0xfd, 0xd2, 0x7c, 0xaf, 0x0f, 0xec, 0xbb, 0xff, + 0x9a, 0xf7, 0xd1, 0xc7, 0x0f, 0xa4, 0x5a, 0x8b, 0x19, 0xaa, 0xd9, 0xca, 0x33, 0xbb, 0x55, 0x68, + 0x51, 0x53, 0xfc, 0xa7, 0x2e, 0x78, 0x57, 0xaa, 0xa5, 0x3b, 0x81, 0xff, 0xdd, 0x5b, 0xbd, 0xc3, + 0xcf, 0xb1, 0xd7, 0x1e, 0x79, 0xf0, 0xb2, 0xc1, 0x3a, 0x5a, 0xbe, 0x67, 0x3d, 0x7f, 0xb4, 0xf9, + 0x87, 0x7f, 0xf7, 0x54, 0xdc, 0x3d, 0xed, 0xdd, 0x3d, 0x3d, 0xda, 0x3c, 0x8e, 0x0b, 0x07, 0x6f, + 0xfd, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x25, 0x27, 0xe9, 0x95, 0x51, 0x10, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/datastore/v1/entity.pb.go b/vendor/google.golang.org/genproto/googleapis/datastore/v1/entity.pb.go index 75f58ca..d1d078d 100644 --- a/vendor/google.golang.org/genproto/googleapis/datastore/v1/entity.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/datastore/v1/entity.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/datastore/v1/entity.proto -// DO NOT EDIT! package datastore @@ -711,53 +710,54 @@ func init() { func init() { proto.RegisterFile("google/datastore/v1/entity.proto", fileDescriptor1) } var fileDescriptor1 = []byte{ - // 767 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x94, 0xdf, 0x8e, 0xdb, 0x44, - 0x14, 0xc6, 0xed, 0x64, 0xb3, 0x5d, 0x1f, 0xbb, 0xbb, 0x65, 0xb6, 0x12, 0x26, 0x80, 0xd6, 0x04, - 0x90, 0x22, 0x90, 0xec, 0xee, 0x72, 0x41, 0x45, 0x41, 0x2a, 0x29, 0x01, 0x47, 0x5b, 0x41, 0x34, - 0xaa, 0x2a, 0xc1, 0x4d, 0x34, 0x89, 0xa7, 0xee, 0x10, 0x7b, 0xc6, 0xb2, 0xc7, 0xab, 0xfa, 0x96, - 0xe7, 0xe0, 0x09, 0x78, 0x24, 0xc4, 0xc3, 0xa0, 0xf9, 0x13, 0x67, 0x29, 0xe9, 0xde, 0x79, 0xce, - 0xf9, 0x7d, 0xc7, 0xdf, 0xf1, 0x39, 0x63, 0x88, 0x72, 0x21, 0xf2, 0x82, 0x26, 0x19, 0x91, 0xa4, - 0x91, 0xa2, 0xa6, 0xc9, 0xcd, 0x65, 0x42, 0xb9, 0x64, 0xb2, 0x8b, 0xab, 0x5a, 0x48, 0x81, 0xce, - 0x0d, 0x11, 0xf7, 0x44, 0x7c, 0x73, 0x39, 0xfe, 0xc8, 0xca, 0x48, 0xc5, 0x12, 0xc2, 0xb9, 0x90, - 0x44, 0x32, 0xc1, 0x1b, 0x23, 0xe9, 0xb3, 0xfa, 0xb4, 0x6e, 0x5f, 0x25, 0x8d, 0xac, 0xdb, 0x8d, - 0xb4, 0xd9, 0x8b, 0xb7, 0xb3, 0x92, 0x95, 0xb4, 0x91, 0xa4, 0xac, 0x2c, 0x10, 0x5a, 0x40, 0x76, - 0x15, 0x4d, 0x0a, 0x22, 0x0b, 0x9e, 0x9b, 0xcc, 0xe4, 0x17, 0xf0, 0x97, 0xa4, 0x96, 0x4c, 0xbd, - 0x6c, 0x91, 0xa1, 0x8f, 0x01, 0xaa, 0x5a, 0xfc, 0x4e, 0x37, 0x72, 0xc5, 0xb2, 0x70, 0x10, 0xb9, - 0x53, 0x0f, 0x7b, 0x36, 0xb2, 0xc8, 0xd0, 0x27, 0x10, 0x70, 0x52, 0xd2, 0xa6, 0x22, 0x1b, 0xaa, - 0x80, 0x23, 0x0d, 0xf8, 0x7d, 0x6c, 0x91, 0x4d, 0xfe, 0x76, 0x61, 0x78, 0x4d, 0x3b, 0xf4, 0x0c, - 0x82, 0x6a, 0x57, 0x58, 0xa1, 0x6e, 0xe4, 0x4e, 0xfd, 0xab, 0x28, 0x3e, 0xd0, 0x7b, 0x7c, 0xcb, - 0x01, 0xf6, 0xab, 0x5b, 0x76, 0x1e, 0xc3, 0x51, 0x45, 0xe4, 0xeb, 0x70, 0x10, 0x0d, 0xa7, 0xfe, - 0xd5, 0x67, 0x07, 0xc5, 0xd7, 0xb4, 0x8b, 0x97, 0x44, 0xbe, 0x9e, 0x17, 0xb4, 0xa4, 0x5c, 0x62, - 0xad, 0x18, 0xbf, 0x50, 0x7d, 0xf5, 0x41, 0x84, 0xe0, 0x68, 0xcb, 0xb8, 0x71, 0xe1, 0x61, 0xfd, - 0x8c, 0x1e, 0xc0, 0xc0, 0xf6, 0x38, 0x4c, 0x1d, 0x3c, 0x60, 0x19, 0x7a, 0x08, 0x47, 0xaa, 0x95, - 0x70, 0xa8, 0xa8, 0xd4, 0xc1, 0xfa, 0x34, 0xf3, 0xe0, 0x1e, 0xcb, 0x56, 0xea, 0xd3, 0x4d, 0x9e, - 0x02, 0x7c, 0x5f, 0xd7, 0xa4, 0x7b, 0x49, 0x8a, 0x96, 0xa2, 0x2b, 0x38, 0xbe, 0x51, 0x0f, 0x4d, - 0xe8, 0x6a, 0x7f, 0xe3, 0x83, 0xfe, 0x34, 0x8b, 0x2d, 0x39, 0xf9, 0x73, 0x04, 0x23, 0xa3, 0x7e, - 0x02, 0xc0, 0xdb, 0xa2, 0x58, 0xe9, 0x44, 0xe8, 0x47, 0xee, 0xf4, 0x74, 0x5f, 0x61, 0x37, 0xc9, - 0xf8, 0xe7, 0xb6, 0x28, 0x34, 0x9f, 0x3a, 0xd8, 0xe3, 0xbb, 0x03, 0xfa, 0x1c, 0xee, 0xaf, 0x85, - 0x28, 0x28, 0xe1, 0x56, 0xaf, 0x1a, 0x3b, 0x49, 0x1d, 0x1c, 0xd8, 0x70, 0x8f, 0x31, 0x2e, 0x69, - 0x4e, 0x6b, 0x8b, 0xed, 0xba, 0x0d, 0x6c, 0xd8, 0x60, 0x9f, 0x42, 0x90, 0x89, 0x76, 0x5d, 0x50, - 0x4b, 0xa9, 0xfe, 0xdd, 0xd4, 0xc1, 0xbe, 0x89, 0x1a, 0x68, 0x0e, 0x67, 0xfd, 0x5a, 0x59, 0x0e, - 0xf4, 0x4c, 0xff, 0x6f, 0xfa, 0xc5, 0x8e, 0x4b, 0x1d, 0x7c, 0xda, 0x8b, 0x4c, 0x99, 0xaf, 0xc1, - 0xdb, 0xd2, 0xce, 0x16, 0x18, 0xe9, 0x02, 0xe1, 0xbb, 0xe6, 0x9a, 0x3a, 0xf8, 0x64, 0x4b, 0xbb, - 0xde, 0x64, 0x23, 0x6b, 0xc6, 0x73, 0xab, 0x7d, 0xcf, 0x0e, 0xc9, 0x37, 0x51, 0x03, 0x5d, 0x00, - 0xac, 0x0b, 0xb1, 0xb6, 0x08, 0x8a, 0xdc, 0x69, 0xa0, 0x3e, 0x9c, 0x8a, 0x19, 0xe0, 0x3b, 0x38, - 0xcb, 0xa9, 0x58, 0x55, 0x82, 0x71, 0x69, 0xa9, 0x13, 0x6d, 0xe2, 0x7c, 0x67, 0x42, 0x0d, 0x3a, - 0x7e, 0x4e, 0xe4, 0x73, 0x9e, 0xa7, 0x0e, 0xbe, 0x9f, 0x53, 0xb1, 0x54, 0xb0, 0x91, 0x3f, 0x85, - 0xc0, 0x5c, 0x65, 0xab, 0x3d, 0xd6, 0xda, 0x0f, 0x0f, 0x36, 0x30, 0xd7, 0xa0, 0x72, 0x68, 0x24, - 0xa6, 0xc2, 0x0c, 0x7c, 0xa2, 0x56, 0xc8, 0x16, 0xf0, 0x74, 0x81, 0x8b, 0x83, 0x05, 0xf6, 0xab, - 0x96, 0x3a, 0x18, 0xc8, 0x7e, 0xf1, 0x42, 0xb8, 0x57, 0x52, 0xc2, 0x19, 0xcf, 0xc3, 0xd3, 0xc8, - 0x9d, 0x8e, 0xf0, 0xee, 0x88, 0x1e, 0xc1, 0x43, 0xfa, 0x66, 0x53, 0xb4, 0x19, 0x5d, 0xbd, 0xaa, - 0x45, 0xb9, 0x62, 0x3c, 0xa3, 0x6f, 0x68, 0x13, 0x9e, 0xab, 0xf5, 0xc0, 0xc8, 0xe6, 0x7e, 0xac, - 0x45, 0xb9, 0x30, 0x99, 0x59, 0x00, 0xa0, 0x9d, 0x98, 0x05, 0xff, 0xc7, 0x85, 0x63, 0xe3, 0x1b, - 0x7d, 0x01, 0xc3, 0x2d, 0xed, 0xec, 0xbd, 0x7d, 0xe7, 0x88, 0xb0, 0x82, 0xd0, 0xb5, 0xfe, 0x6d, - 0x54, 0xb4, 0x96, 0x8c, 0x36, 0xe1, 0x50, 0xdf, 0x86, 0x2f, 0xef, 0xf8, 0x28, 0xf1, 0xb2, 0xa7, - 0xe7, 0x5c, 0xd6, 0x1d, 0xbe, 0x25, 0x1f, 0xff, 0x0a, 0x67, 0x6f, 0xa5, 0xd1, 0x83, 0xbd, 0x17, - 0xcf, 0xbc, 0xf1, 0x11, 0x8c, 0xf6, 0x1b, 0x7d, 0xf7, 0xd5, 0x33, 0xe0, 0x37, 0x83, 0xc7, 0xee, - 0xec, 0x0f, 0x17, 0xde, 0xdf, 0x88, 0xf2, 0x10, 0x3c, 0xf3, 0x8d, 0xb5, 0xa5, 0x5a, 0xe2, 0xa5, - 0xfb, 0xdb, 0xb7, 0x96, 0xc9, 0x45, 0x41, 0x78, 0x1e, 0x8b, 0x3a, 0x4f, 0x72, 0xca, 0xf5, 0x8a, - 0x27, 0x26, 0x45, 0x2a, 0xd6, 0xfc, 0xe7, 0x2f, 0xff, 0xa4, 0x3f, 0xfc, 0x35, 0xf8, 0xe0, 0x27, - 0x23, 0x7f, 0x56, 0x88, 0x36, 0x8b, 0x7f, 0xe8, 0x5f, 0xf4, 0xf2, 0x72, 0x7d, 0xac, 0x8b, 0x7c, - 0xf5, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x89, 0x5b, 0xc5, 0xcd, 0x29, 0x06, 0x00, 0x00, + // 780 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x94, 0xff, 0x6e, 0xdc, 0x44, + 0x10, 0xc7, 0xed, 0xbb, 0x5c, 0x1a, 0x8f, 0xdd, 0xa4, 0x6c, 0x2a, 0x61, 0x02, 0x28, 0x26, 0x80, + 0x74, 0x02, 0xc9, 0x6e, 0xc2, 0x1f, 0x54, 0x14, 0xa4, 0x72, 0x25, 0xe0, 0x28, 0x15, 0x9c, 0x56, + 0x55, 0x24, 0x50, 0xa4, 0xd3, 0xde, 0x79, 0xeb, 0x2e, 0x67, 0xef, 0x5a, 0xf6, 0x3a, 0xaa, 0xdf, + 0x05, 0xf1, 0x00, 0x3c, 0x0a, 0x8f, 0x80, 0x78, 0x18, 0xb4, 0x3f, 0xec, 0x0b, 0xed, 0x35, 0xff, + 0x79, 0x67, 0x3e, 0xdf, 0xd9, 0xef, 0xec, 0xce, 0x1a, 0xa2, 0x5c, 0x88, 0xbc, 0xa0, 0x49, 0x46, + 0x24, 0x69, 0xa4, 0xa8, 0x69, 0x72, 0x73, 0x9a, 0x50, 0x2e, 0x99, 0xec, 0xe2, 0xaa, 0x16, 0x52, + 0xa0, 0x43, 0x43, 0xc4, 0x03, 0x11, 0xdf, 0x9c, 0x1e, 0x7d, 0x64, 0x65, 0xa4, 0x62, 0x09, 0xe1, + 0x5c, 0x48, 0x22, 0x99, 0xe0, 0x8d, 0x91, 0x0c, 0x59, 0xbd, 0x5a, 0xb6, 0x2f, 0x93, 0x46, 0xd6, + 0xed, 0x4a, 0xda, 0xec, 0xf1, 0x9b, 0x59, 0xc9, 0x4a, 0xda, 0x48, 0x52, 0x56, 0x16, 0x08, 0x2d, + 0x20, 0xbb, 0x8a, 0x26, 0x05, 0x91, 0x05, 0xcf, 0x4d, 0xe6, 0xe4, 0x17, 0xf0, 0xe7, 0xa4, 0x96, + 0x4c, 0x6d, 0x76, 0x91, 0xa1, 0x8f, 0x01, 0xaa, 0x5a, 0xfc, 0x4e, 0x57, 0x72, 0xc1, 0xb2, 0x70, + 0x14, 0xb9, 0x53, 0x0f, 0x7b, 0x36, 0x72, 0x91, 0xa1, 0x4f, 0x20, 0xe0, 0xa4, 0xa4, 0x4d, 0x45, + 0x56, 0x54, 0x01, 0x3b, 0x1a, 0xf0, 0x87, 0xd8, 0x45, 0x76, 0xf2, 0x8f, 0x0b, 0xe3, 0x4b, 0xda, + 0xa1, 0x67, 0x10, 0x54, 0x7d, 0x61, 0x85, 0xba, 0x91, 0x3b, 0xf5, 0xcf, 0xa2, 0x78, 0x4b, 0xef, + 0xf1, 0x2d, 0x07, 0xd8, 0xaf, 0x6e, 0xd9, 0x79, 0x0c, 0x3b, 0x15, 0x91, 0xaf, 0xc2, 0x51, 0x34, + 0x9e, 0xfa, 0x67, 0x9f, 0x6d, 0x15, 0x5f, 0xd2, 0x2e, 0x9e, 0x13, 0xf9, 0xea, 0xbc, 0xa0, 0x25, + 0xe5, 0x12, 0x6b, 0xc5, 0xd1, 0x0b, 0xd5, 0xd7, 0x10, 0x44, 0x08, 0x76, 0xd6, 0x8c, 0x1b, 0x17, + 0x1e, 0xd6, 0xdf, 0xe8, 0x01, 0x8c, 0x6c, 0x8f, 0xe3, 0xd4, 0xc1, 0x23, 0x96, 0xa1, 0x87, 0xb0, + 0xa3, 0x5a, 0x09, 0xc7, 0x8a, 0x4a, 0x1d, 0xac, 0x57, 0x33, 0x0f, 0xee, 0xb1, 0x6c, 0xa1, 0x8e, + 0xee, 0xe4, 0x29, 0xc0, 0xf7, 0x75, 0x4d, 0xba, 0x2b, 0x52, 0xb4, 0x14, 0x9d, 0xc1, 0xee, 0x8d, + 0xfa, 0x68, 0x42, 0x57, 0xfb, 0x3b, 0xda, 0xea, 0x4f, 0xb3, 0xd8, 0x92, 0x27, 0x7f, 0x4c, 0x60, + 0x62, 0xd4, 0x4f, 0x00, 0x78, 0x5b, 0x14, 0x0b, 0x9d, 0x08, 0xfd, 0xc8, 0x9d, 0xee, 0x6f, 0x2a, + 0xf4, 0x37, 0x19, 0xff, 0xdc, 0x16, 0x85, 0xe6, 0x53, 0x07, 0x7b, 0xbc, 0x5f, 0xa0, 0xcf, 0xe1, + 0xfe, 0x52, 0x88, 0x82, 0x12, 0x6e, 0xf5, 0xaa, 0xb1, 0xbd, 0xd4, 0xc1, 0x81, 0x0d, 0x0f, 0x18, + 0xe3, 0x92, 0xe6, 0xb4, 0xb6, 0x58, 0xdf, 0x6d, 0x60, 0xc3, 0x06, 0xfb, 0x14, 0x82, 0x4c, 0xb4, + 0xcb, 0x82, 0x5a, 0x4a, 0xf5, 0xef, 0xa6, 0x0e, 0xf6, 0x4d, 0xd4, 0x40, 0xe7, 0x70, 0x30, 0x8c, + 0x95, 0xe5, 0x40, 0xdf, 0xe9, 0xdb, 0xa6, 0x5f, 0xf4, 0x5c, 0xea, 0xe0, 0xfd, 0x41, 0x64, 0xca, + 0x7c, 0x0d, 0xde, 0x9a, 0x76, 0xb6, 0xc0, 0x44, 0x17, 0x08, 0xdf, 0x75, 0xaf, 0xa9, 0x83, 0xf7, + 0xd6, 0xb4, 0x1b, 0x4c, 0x36, 0xb2, 0x66, 0x3c, 0xb7, 0xda, 0xf7, 0xec, 0x25, 0xf9, 0x26, 0x6a, + 0xa0, 0x63, 0x80, 0x65, 0x21, 0x96, 0x16, 0x41, 0x91, 0x3b, 0x0d, 0xd4, 0xc1, 0xa9, 0x98, 0x01, + 0xbe, 0x83, 0x83, 0x9c, 0x8a, 0x45, 0x25, 0x18, 0x97, 0x96, 0xda, 0xd3, 0x26, 0x0e, 0x7b, 0x13, + 0xea, 0xa2, 0xe3, 0xe7, 0x44, 0x3e, 0xe7, 0x79, 0xea, 0xe0, 0xfb, 0x39, 0x15, 0x73, 0x05, 0x1b, + 0xf9, 0x53, 0x08, 0xcc, 0x53, 0xb6, 0xda, 0x5d, 0xad, 0xfd, 0x70, 0x6b, 0x03, 0xe7, 0x1a, 0x54, + 0x0e, 0x8d, 0xc4, 0x54, 0x98, 0x81, 0x4f, 0xd4, 0x08, 0xd9, 0x02, 0x9e, 0x2e, 0x70, 0xbc, 0xb5, + 0xc0, 0x66, 0xd4, 0x52, 0x07, 0x03, 0xd9, 0x0c, 0x5e, 0x08, 0xf7, 0x4a, 0x4a, 0x38, 0xe3, 0x79, + 0xb8, 0x1f, 0xb9, 0xd3, 0x09, 0xee, 0x97, 0xe8, 0x11, 0x3c, 0xa4, 0xaf, 0x57, 0x45, 0x9b, 0xd1, + 0xc5, 0xcb, 0x5a, 0x94, 0x0b, 0xc6, 0x33, 0xfa, 0x9a, 0x36, 0xe1, 0xa1, 0x1a, 0x0f, 0x8c, 0x6c, + 0xee, 0xc7, 0x5a, 0x94, 0x17, 0x26, 0x33, 0x0b, 0x00, 0xb4, 0x13, 0x33, 0xe0, 0xff, 0xba, 0xb0, + 0x6b, 0x7c, 0xa3, 0x2f, 0x60, 0xbc, 0xa6, 0x9d, 0x7d, 0xb7, 0xef, 0xbc, 0x22, 0xac, 0x20, 0x74, + 0xa9, 0x7f, 0x1b, 0x15, 0xad, 0x25, 0xa3, 0x4d, 0x38, 0xd6, 0xaf, 0xe1, 0xcb, 0x3b, 0x0e, 0x25, + 0x9e, 0x0f, 0xf4, 0x39, 0x97, 0x75, 0x87, 0x6f, 0xc9, 0x8f, 0x7e, 0x85, 0x83, 0x37, 0xd2, 0xe8, + 0xc1, 0xc6, 0x8b, 0x67, 0x76, 0x7c, 0x04, 0x93, 0xcd, 0x44, 0xdf, 0xfd, 0xf4, 0x0c, 0xf8, 0xcd, + 0xe8, 0xb1, 0x3b, 0xfb, 0xd3, 0x85, 0xf7, 0x57, 0xa2, 0xdc, 0x06, 0xcf, 0x7c, 0x63, 0x6d, 0xae, + 0x86, 0x78, 0xee, 0xfe, 0xf6, 0xad, 0x65, 0x72, 0x51, 0x10, 0x9e, 0xc7, 0xa2, 0xce, 0x93, 0x9c, + 0x72, 0x3d, 0xe2, 0x89, 0x49, 0x91, 0x8a, 0x35, 0xff, 0xfb, 0xcb, 0x3f, 0x19, 0x16, 0x7f, 0x8d, + 0x3e, 0xf8, 0xc9, 0xc8, 0x9f, 0x15, 0xa2, 0xcd, 0xe2, 0x1f, 0x86, 0x8d, 0xae, 0x4e, 0xff, 0xee, + 0x73, 0xd7, 0x3a, 0x77, 0x3d, 0xe4, 0xae, 0xaf, 0x4e, 0x97, 0xbb, 0x7a, 0x83, 0xaf, 0xfe, 0x0b, + 0x00, 0x00, 0xff, 0xff, 0xf3, 0xdd, 0x11, 0x96, 0x45, 0x06, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/datastore/v1/query.pb.go b/vendor/google.golang.org/genproto/googleapis/datastore/v1/query.pb.go index dcfbb67..bdfcc17 100644 --- a/vendor/google.golang.org/genproto/googleapis/datastore/v1/query.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/datastore/v1/query.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/datastore/v1/query.proto -// DO NOT EDIT! package datastore @@ -161,7 +160,7 @@ const ( // The query is finished, but there may be more results after the end // cursor. QueryResultBatch_MORE_RESULTS_AFTER_CURSOR QueryResultBatch_MoreResultsType = 4 - // The query has been exhausted. + // The query is finished, and there are no more results. QueryResultBatch_NO_MORE_RESULTS QueryResultBatch_MoreResultsType = 3 ) @@ -884,87 +883,88 @@ func init() { func init() { proto.RegisterFile("google/datastore/v1/query.proto", fileDescriptor2) } var fileDescriptor2 = []byte{ - // 1301 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0xdd, 0x92, 0xd3, 0xc6, - 0x12, 0x5e, 0xc9, 0x3f, 0x6b, 0xb7, 0xff, 0xc4, 0x70, 0x0e, 0x88, 0x05, 0x0e, 0xbb, 0x82, 0x73, - 0xd8, 0x53, 0x05, 0x36, 0x6b, 0x8a, 0x0a, 0x95, 0x90, 0x4a, 0xf9, 0x47, 0xbb, 0x36, 0x18, 0xcb, - 0x3b, 0xf6, 0x42, 0xe0, 0x46, 0x25, 0xec, 0x59, 0xa3, 0x20, 0x4b, 0x62, 0xa4, 0x5d, 0xb2, 0x97, - 0x79, 0x88, 0x54, 0xe5, 0x19, 0xf2, 0x00, 0xb9, 0xc8, 0x03, 0x24, 0x79, 0x88, 0x5c, 0xe7, 0x3a, - 0x8f, 0x90, 0xd2, 0xcc, 0xc8, 0x7f, 0x6b, 0xcc, 0x5e, 0x70, 0xa7, 0xe9, 0xf9, 0xbe, 0xaf, 0xa7, - 0x7b, 0x7a, 0x5a, 0x0d, 0xb7, 0xc6, 0x9e, 0x37, 0x76, 0x48, 0x65, 0x64, 0x85, 0x56, 0x10, 0x7a, - 0x94, 0x54, 0x4e, 0xf7, 0x2a, 0xef, 0x4f, 0x08, 0x3d, 0x2b, 0xfb, 0xd4, 0x0b, 0x3d, 0x74, 0x99, - 0x03, 0xca, 0x53, 0x40, 0xf9, 0x74, 0x6f, 0xeb, 0x86, 0x60, 0x59, 0xbe, 0x5d, 0xb1, 0x5c, 0xd7, - 0x0b, 0xad, 0xd0, 0xf6, 0xdc, 0x80, 0x53, 0xb6, 0xb6, 0x57, 0x69, 0x12, 0x37, 0xb4, 0x43, 0x21, - 0xba, 0xf5, 0x1f, 0x81, 0x60, 0xab, 0x37, 0x27, 0xc7, 0x95, 0x0f, 0xd4, 0xf2, 0x7d, 0x42, 0x63, - 0x05, 0x55, 0xec, 0x87, 0x67, 0x3e, 0xa9, 0x38, 0x56, 0xe8, 0xb8, 0x63, 0xbe, 0xa3, 0xfd, 0x21, - 0x41, 0x5e, 0x67, 0x52, 0x98, 0x04, 0x27, 0x4e, 0x88, 0x1e, 0x42, 0x9a, 0x4b, 0xab, 0xd2, 0xb6, - 0xb4, 0x9b, 0xab, 0x5e, 0x2f, 0xaf, 0x38, 0x70, 0x59, 0x50, 0x04, 0x14, 0xa9, 0xb0, 0x79, 0x4a, - 0x68, 0x60, 0x7b, 0xae, 0x9a, 0xdc, 0x96, 0x76, 0x13, 0x38, 0x5e, 0xa2, 0x2b, 0x90, 0x1e, 0x9e, - 0xd0, 0xc0, 0xa3, 0x6a, 0x62, 0x5b, 0xda, 0xcd, 0x63, 0xb1, 0xd2, 0x0e, 0x01, 0xb8, 0xc3, 0xc1, - 0x99, 0x4f, 0xd0, 0x75, 0xb8, 0x8a, 0xf5, 0xfe, 0x51, 0x67, 0x60, 0x0e, 0x5e, 0xf5, 0x74, 0xf3, - 0xa8, 0xdb, 0xef, 0xe9, 0x8d, 0xf6, 0x7e, 0x5b, 0x6f, 0x2a, 0x1b, 0x28, 0x03, 0xc9, 0xfd, 0xa3, - 0x4e, 0x47, 0x91, 0x50, 0x11, 0xa0, 0x87, 0x8d, 0xa7, 0x7a, 0x63, 0xd0, 0x36, 0xba, 0x8a, 0x8c, - 0xf2, 0x90, 0x79, 0xa6, 0xbf, 0x32, 0x8d, 0x6e, 0xe7, 0x95, 0x92, 0xd0, 0x7e, 0x4b, 0x40, 0xea, - 0x30, 0xca, 0x34, 0xfa, 0x06, 0xc0, 0xa7, 0xde, 0x77, 0x64, 0x18, 0x65, 0x51, 0x95, 0xb7, 0x13, - 0xbb, 0xb9, 0xea, 0xad, 0x95, 0x71, 0xf4, 0xa6, 0x30, 0x3c, 0x47, 0x41, 0x5f, 0x40, 0xf2, 0x9d, - 0xed, 0x8e, 0xd4, 0x04, 0xa3, 0xde, 0x5e, 0x49, 0x7d, 0x66, 0xbb, 0x23, 0xfd, 0x7b, 0x9f, 0x92, - 0x20, 0x0a, 0x14, 0x33, 0x42, 0x94, 0xbd, 0x63, 0xdb, 0x09, 0x09, 0x65, 0x79, 0xf8, 0x58, 0xf6, - 0xf6, 0x19, 0x04, 0x0b, 0x28, 0x7a, 0x0c, 0x29, 0x8f, 0x8e, 0x08, 0x55, 0x53, 0xcc, 0x9d, 0xf6, - 0xb1, 0x93, 0xfa, 0x84, 0x86, 0x67, 0x46, 0x84, 0xc4, 0x9c, 0x80, 0x0e, 0x20, 0x37, 0xb2, 0x83, - 0xd0, 0x76, 0x87, 0xa1, 0xe9, 0xb9, 0x6a, 0x9a, 0xf1, 0xff, 0xb7, 0x96, 0x8f, 0xc9, 0x31, 0xa1, - 0xc4, 0x1d, 0x12, 0x0c, 0x31, 0xd5, 0x70, 0xd1, 0x0e, 0xe4, 0x83, 0xd0, 0xa2, 0xa1, 0x29, 0x2e, - 0x6b, 0x93, 0x5d, 0x56, 0x8e, 0xd9, 0x1a, 0xcc, 0x84, 0x6e, 0x02, 0x10, 0x77, 0x14, 0x03, 0x32, - 0x0c, 0x90, 0x25, 0xee, 0x48, 0x6c, 0x5f, 0x81, 0xb4, 0x77, 0x7c, 0x1c, 0x90, 0x50, 0x85, 0x6d, - 0x69, 0x37, 0x85, 0xc5, 0x0a, 0xed, 0x41, 0xca, 0xb1, 0x27, 0x76, 0xa8, 0xe6, 0x17, 0x13, 0x12, - 0x97, 0x6a, 0xb9, 0xed, 0x86, 0x0f, 0xab, 0x2f, 0x2c, 0xe7, 0x84, 0x60, 0x8e, 0xd4, 0xee, 0x40, - 0x71, 0x31, 0xb9, 0x08, 0x41, 0xd2, 0xb5, 0x26, 0x84, 0x95, 0x64, 0x16, 0xb3, 0x6f, 0xed, 0x2e, - 0x5c, 0x3a, 0x17, 0xd3, 0x14, 0x28, 0xcf, 0x01, 0x7b, 0x00, 0xb3, 0x6b, 0x46, 0x75, 0xc8, 0xf8, - 0x82, 0x26, 0x2a, 0xfc, 0xa2, 0xf9, 0x9a, 0xf2, 0xb4, 0xbf, 0x24, 0x28, 0x2c, 0xdc, 0xc7, 0xe7, - 0x50, 0x45, 0x4f, 0x21, 0x3b, 0xb2, 0xe9, 0xb4, 0x68, 0xa5, 0xdd, 0x62, 0xf5, 0xde, 0xa7, 0x4b, - 0xa1, 0xdc, 0x8c, 0x39, 0x78, 0x46, 0xd7, 0x74, 0xc8, 0x4e, 0xed, 0xe8, 0x1a, 0xfc, 0xbb, 0xd9, - 0xc6, 0xfc, 0xd5, 0x2c, 0xbd, 0xad, 0x02, 0x64, 0x6b, 0xfd, 0x86, 0xde, 0x6d, 0xb6, 0xbb, 0x07, - 0xfc, 0x81, 0x35, 0xf5, 0xe9, 0x5a, 0xd6, 0x7e, 0x95, 0x20, 0xcd, 0x8b, 0x15, 0x1d, 0x82, 0x32, - 0xf4, 0x26, 0xbe, 0x17, 0xd8, 0x21, 0x31, 0x45, 0x8d, 0xf3, 0x48, 0xef, 0xac, 0x3c, 0x64, 0x23, - 0x06, 0x73, 0x7e, 0x6b, 0x03, 0x97, 0x86, 0x8b, 0x26, 0xd4, 0x85, 0x52, 0x1c, 0x7c, 0xac, 0x28, - 0x33, 0xc5, 0xdb, 0x6b, 0xc3, 0x9e, 0x0a, 0x16, 0xfd, 0x05, 0x4b, 0xbd, 0x00, 0x39, 0x2e, 0x63, - 0x46, 0x7d, 0x4e, 0xfb, 0x45, 0x82, 0xd2, 0xd2, 0x29, 0xd0, 0xd7, 0x20, 0x7b, 0x3e, 0x3b, 0x77, - 0xb1, 0x7a, 0xff, 0x22, 0xe7, 0x2e, 0x1b, 0x3e, 0xa1, 0x56, 0xe8, 0x51, 0x2c, 0x7b, 0x3e, 0x7a, - 0x04, 0x9b, 0xdc, 0x43, 0x20, 0xba, 0xca, 0xda, 0xf7, 0x1d, 0x63, 0xb5, 0xfb, 0x90, 0x89, 0x65, - 0x90, 0x0a, 0xff, 0x32, 0x7a, 0x3a, 0xae, 0x0d, 0x0c, 0xbc, 0x74, 0x17, 0x9b, 0x90, 0xa8, 0x75, - 0x9b, 0x8a, 0xa4, 0xfd, 0x29, 0x43, 0x71, 0x31, 0xd8, 0xcf, 0x52, 0x5f, 0x4f, 0x58, 0xec, 0x17, - 0x29, 0xac, 0x55, 0xa1, 0x3f, 0x80, 0xd4, 0x69, 0xf4, 0x48, 0x59, 0x1f, 0xcf, 0x55, 0xb7, 0x56, - 0x0a, 0x88, 0x67, 0xcc, 0x80, 0xda, 0x8f, 0xd2, 0x85, 0xc2, 0x2e, 0x40, 0xb6, 0xa3, 0xf7, 0xfb, - 0xe6, 0xa0, 0x55, 0xeb, 0x2a, 0x12, 0xba, 0x02, 0x68, 0xba, 0x34, 0x0d, 0x6c, 0xea, 0x87, 0x47, - 0xb5, 0x8e, 0x22, 0x23, 0x05, 0xf2, 0x07, 0x58, 0xaf, 0x0d, 0x74, 0xcc, 0x91, 0x89, 0xa8, 0xac, - 0xe7, 0x2d, 0x33, 0x70, 0x12, 0x65, 0x21, 0xc5, 0x3f, 0x53, 0x11, 0xaf, 0x55, 0xeb, 0x9b, 0xb5, - 0x6e, 0x43, 0xef, 0x0f, 0x0c, 0xac, 0xe4, 0xb4, 0xbf, 0x65, 0xc8, 0x1c, 0xbc, 0x77, 0xf8, 0xaf, - 0x62, 0x07, 0xf2, 0xec, 0xef, 0x6c, 0x06, 0x21, 0xb5, 0xdd, 0xb1, 0xe8, 0x30, 0x39, 0x66, 0xeb, - 0x33, 0x13, 0xfa, 0x2f, 0x14, 0x2d, 0xc7, 0xf1, 0x3e, 0x98, 0x8e, 0x1d, 0x12, 0x6a, 0x39, 0x01, - 0xcb, 0x61, 0x06, 0x17, 0x98, 0xb5, 0x23, 0x8c, 0xe8, 0x25, 0x14, 0xa3, 0x76, 0x33, 0x32, 0xdf, - 0xd8, 0xee, 0xc8, 0x76, 0xc7, 0x81, 0x68, 0xe7, 0x0f, 0x56, 0x66, 0x2a, 0x3e, 0x40, 0xb9, 0x1b, - 0x71, 0xea, 0x82, 0xa2, 0xbb, 0x21, 0x3d, 0xc3, 0x05, 0x77, 0xde, 0x86, 0x5e, 0xc2, 0x65, 0x56, - 0x91, 0xb6, 0xe7, 0x5a, 0xce, 0x4c, 0x3d, 0xb9, 0xa6, 0xd9, 0xc7, 0xea, 0x3d, 0x8b, 0x5a, 0x13, - 0x12, 0xd5, 0x22, 0x9a, 0x49, 0xc4, 0xc2, 0x5b, 0x6f, 0x01, 0x9d, 0xf7, 0x8e, 0x14, 0x48, 0xbc, - 0x23, 0x67, 0x22, 0x11, 0xd1, 0x27, 0x7a, 0x12, 0x5f, 0xbd, 0xbc, 0xa6, 0xf2, 0xce, 0xbb, 0xe4, - 0xa4, 0x2f, 0xe5, 0xc7, 0x92, 0x16, 0xc0, 0xa5, 0x73, 0xfb, 0xa8, 0xba, 0x28, 0xbb, 0xa6, 0xa2, - 0x5a, 0x1b, 0x42, 0x0c, 0xa9, 0x8b, 0xe3, 0x44, 0x6b, 0x23, 0x1e, 0x28, 0xea, 0x0a, 0x14, 0xfd, - 0x58, 0x9a, 0xbf, 0xff, 0xdf, 0x93, 0xa0, 0x30, 0x97, 0x7c, 0xd0, 0xa8, 0x5b, 0xe1, 0xf0, 0x2d, - 0xba, 0x0b, 0xa5, 0xe0, 0x9d, 0xed, 0xfb, 0x64, 0x64, 0x52, 0x66, 0x0e, 0xd4, 0x34, 0xfb, 0x5f, - 0x15, 0x85, 0x99, 0x83, 0x83, 0xe8, 0xd6, 0x63, 0xe0, 0xc2, 0x00, 0x53, 0x10, 0x56, 0xf1, 0xdb, - 0x7b, 0x0d, 0x88, 0xcf, 0x40, 0x42, 0x8e, 0xb9, 0x16, 0x0d, 0xe6, 0xde, 0xba, 0xd1, 0x89, 0xa1, - 0xcb, 0xb3, 0x19, 0x08, 0x2b, 0x64, 0x6e, 0x83, 0x4d, 0x45, 0x2d, 0x28, 0x2e, 0x68, 0xc7, 0x4d, - 0x67, 0xe7, 0x93, 0xba, 0xb8, 0x30, 0x2f, 0x16, 0x2c, 0xfd, 0xbb, 0x93, 0xcb, 0xff, 0xee, 0x6f, - 0x21, 0x3f, 0xf1, 0x28, 0x99, 0xba, 0x49, 0xb1, 0xe3, 0x3f, 0x5a, 0xe9, 0x66, 0x39, 0xa3, 0xe5, - 0xe7, 0x1e, 0x25, 0xc2, 0x0f, 0x8b, 0x23, 0x37, 0x99, 0x19, 0xd0, 0xff, 0x41, 0x09, 0x5c, 0xcb, - 0x0f, 0xde, 0x7a, 0xa1, 0x19, 0x4f, 0x88, 0x9b, 0x6c, 0x42, 0x2c, 0xc5, 0xf6, 0x17, 0xdc, 0xac, - 0xfd, 0x24, 0x41, 0x69, 0x49, 0x0b, 0xed, 0xc0, 0xcd, 0xe7, 0x06, 0xd6, 0x4d, 0x3e, 0x1c, 0xf6, - 0x57, 0x4d, 0x87, 0x0a, 0xe4, 0xbb, 0xc6, 0xc0, 0xdc, 0x6f, 0x77, 0xdb, 0xfd, 0x96, 0xde, 0x54, - 0x24, 0x74, 0x03, 0xd4, 0x05, 0x52, 0x6d, 0x3f, 0x6a, 0x11, 0x9d, 0xf6, 0xf3, 0xf6, 0x40, 0x91, - 0xd1, 0x4d, 0xb8, 0xb6, 0x62, 0xb7, 0x71, 0x84, 0xfb, 0x06, 0x56, 0x92, 0xe8, 0x32, 0x94, 0xba, - 0x86, 0x39, 0x8f, 0x50, 0x12, 0xf5, 0x1f, 0x24, 0xb8, 0x3a, 0xf4, 0x26, 0xab, 0xf2, 0x51, 0x07, - 0x5e, 0xd5, 0xd1, 0x34, 0xd3, 0x93, 0x5e, 0x3f, 0x11, 0x90, 0xb1, 0xe7, 0x58, 0xee, 0xb8, 0xec, - 0xd1, 0x71, 0x65, 0x4c, 0x5c, 0x36, 0xeb, 0x54, 0xf8, 0x96, 0xe5, 0xdb, 0xc1, 0xc2, 0x24, 0xff, - 0xd5, 0x74, 0xf1, 0xb3, 0x7c, 0xed, 0x80, 0xd3, 0x1b, 0x8e, 0x77, 0x32, 0x2a, 0x37, 0xa7, 0x7e, - 0x5e, 0xec, 0xbd, 0x49, 0x33, 0x91, 0x87, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x2f, 0x61, - 0x5a, 0x61, 0x0c, 0x00, 0x00, + // 1313 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0xdd, 0x72, 0xd3, 0x46, + 0x14, 0x8e, 0x64, 0x3b, 0x89, 0x8f, 0xff, 0xc4, 0xd2, 0x82, 0x08, 0x50, 0x12, 0x41, 0x4b, 0x3a, + 0x03, 0x36, 0x31, 0xc3, 0x94, 0x69, 0xe9, 0x74, 0xfc, 0xa3, 0xc4, 0x06, 0x63, 0x39, 0x6b, 0x27, + 0x14, 0x86, 0x19, 0x8d, 0xb0, 0x37, 0x46, 0x45, 0x96, 0xc4, 0x4a, 0x09, 0xcd, 0x83, 0x74, 0xa6, + 0x37, 0x7d, 0x81, 0x3e, 0x40, 0x2f, 0xfa, 0x00, 0x6d, 0xa7, 0xcf, 0xd0, 0xeb, 0x5e, 0xf7, 0x11, + 0x3a, 0xda, 0x5d, 0xf9, 0x2f, 0xc6, 0xe4, 0x82, 0x3b, 0xed, 0xd9, 0xef, 0xfb, 0xce, 0x9e, 0xb3, + 0x67, 0x8f, 0x0e, 0xdc, 0x18, 0x7a, 0xde, 0xd0, 0x21, 0xa5, 0x81, 0x15, 0x5a, 0x41, 0xe8, 0x51, + 0x52, 0x3a, 0xd9, 0x29, 0xbd, 0x3d, 0x26, 0xf4, 0xb4, 0xe8, 0x53, 0x2f, 0xf4, 0xd0, 0x45, 0x0e, + 0x28, 0x8e, 0x01, 0xc5, 0x93, 0x9d, 0x8d, 0x6b, 0x82, 0x65, 0xf9, 0x76, 0xc9, 0x72, 0x5d, 0x2f, + 0xb4, 0x42, 0xdb, 0x73, 0x03, 0x4e, 0xd9, 0xd8, 0x5c, 0xa4, 0x49, 0xdc, 0xd0, 0x0e, 0x85, 0xe8, + 0xc6, 0x67, 0x02, 0xc1, 0x56, 0xaf, 0x8e, 0x8f, 0x4a, 0xef, 0xa8, 0xe5, 0xfb, 0x84, 0xc6, 0x0a, + 0xaa, 0xd8, 0x0f, 0x4f, 0x7d, 0x52, 0x72, 0xac, 0xd0, 0x71, 0x87, 0x7c, 0x47, 0xfb, 0x4b, 0x82, + 0xac, 0xce, 0xa4, 0x30, 0x09, 0x8e, 0x9d, 0x10, 0xdd, 0x87, 0x55, 0x2e, 0xad, 0x4a, 0x9b, 0xd2, + 0x76, 0xa6, 0x7c, 0xb5, 0xb8, 0xe0, 0xc0, 0x45, 0x41, 0x11, 0x50, 0xa4, 0xc2, 0xda, 0x09, 0xa1, + 0x81, 0xed, 0xb9, 0x6a, 0x72, 0x53, 0xda, 0x4e, 0xe0, 0x78, 0x89, 0x2e, 0xc1, 0x6a, 0xff, 0x98, + 0x06, 0x1e, 0x55, 0x13, 0x9b, 0xd2, 0x76, 0x16, 0x8b, 0x95, 0xb6, 0x0f, 0xc0, 0x1d, 0xf6, 0x4e, + 0x7d, 0x82, 0xae, 0xc2, 0x65, 0xac, 0x77, 0x0f, 0x5a, 0x3d, 0xb3, 0xf7, 0xbc, 0xa3, 0x9b, 0x07, + 0xed, 0x6e, 0x47, 0xaf, 0x35, 0x77, 0x9b, 0x7a, 0x5d, 0x59, 0x41, 0xeb, 0x90, 0xdc, 0x3d, 0x68, + 0xb5, 0x14, 0x09, 0xe5, 0x01, 0x3a, 0xd8, 0x78, 0xac, 0xd7, 0x7a, 0x4d, 0xa3, 0xad, 0xc8, 0x28, + 0x0b, 0xeb, 0x4f, 0xf4, 0xe7, 0xa6, 0xd1, 0x6e, 0x3d, 0x57, 0x12, 0xda, 0x1f, 0x09, 0x48, 0xed, + 0x47, 0x99, 0x46, 0xdf, 0x01, 0xf8, 0xd4, 0xfb, 0x81, 0xf4, 0xa3, 0x2c, 0xaa, 0xf2, 0x66, 0x62, + 0x3b, 0x53, 0xbe, 0xb1, 0x30, 0x8e, 0xce, 0x18, 0x86, 0xa7, 0x28, 0xe8, 0x2b, 0x48, 0xbe, 0xb1, + 0xdd, 0x81, 0x9a, 0x60, 0xd4, 0x9b, 0x0b, 0xa9, 0x4f, 0x6c, 0x77, 0xa0, 0xff, 0xe8, 0x53, 0x12, + 0x44, 0x81, 0x62, 0x46, 0x88, 0xb2, 0x77, 0x64, 0x3b, 0x21, 0xa1, 0x2c, 0x0f, 0xef, 0xcb, 0xde, + 0x2e, 0x83, 0x60, 0x01, 0x45, 0x0f, 0x21, 0xe5, 0xd1, 0x01, 0xa1, 0x6a, 0x8a, 0xb9, 0xd3, 0xde, + 0x77, 0x52, 0x9f, 0xd0, 0xf0, 0xd4, 0x88, 0x90, 0x98, 0x13, 0xd0, 0x1e, 0x64, 0x06, 0x76, 0x10, + 0xda, 0x6e, 0x3f, 0x34, 0x3d, 0x57, 0x5d, 0x65, 0xfc, 0x2f, 0x96, 0xf2, 0x31, 0x39, 0x22, 0x94, + 0xb8, 0x7d, 0x82, 0x21, 0xa6, 0x1a, 0x2e, 0xda, 0x82, 0x6c, 0x10, 0x5a, 0x34, 0x34, 0xc5, 0x65, + 0xad, 0xb1, 0xcb, 0xca, 0x30, 0x5b, 0x8d, 0x99, 0xd0, 0x75, 0x00, 0xe2, 0x0e, 0x62, 0xc0, 0x3a, + 0x03, 0xa4, 0x89, 0x3b, 0x10, 0xdb, 0x97, 0x60, 0xd5, 0x3b, 0x3a, 0x0a, 0x48, 0xa8, 0xc2, 0xa6, + 0xb4, 0x9d, 0xc2, 0x62, 0x85, 0x76, 0x20, 0xe5, 0xd8, 0x23, 0x3b, 0x54, 0xb3, 0xb3, 0x09, 0x89, + 0x4b, 0xb5, 0xd8, 0x74, 0xc3, 0xfb, 0xe5, 0x43, 0xcb, 0x39, 0x26, 0x98, 0x23, 0xb5, 0x5b, 0x90, + 0x9f, 0x4d, 0x2e, 0x42, 0x90, 0x74, 0xad, 0x11, 0x61, 0x25, 0x99, 0xc6, 0xec, 0x5b, 0xbb, 0x0d, + 0x17, 0xce, 0xc4, 0x34, 0x06, 0xca, 0x53, 0xc0, 0x0e, 0xc0, 0xe4, 0x9a, 0x51, 0x15, 0xd6, 0x7d, + 0x41, 0x13, 0x15, 0x7e, 0xde, 0x7c, 0x8d, 0x79, 0xda, 0xbf, 0x12, 0xe4, 0x66, 0xee, 0xe3, 0x63, + 0xa8, 0xa2, 0xc7, 0x90, 0x1e, 0xd8, 0x74, 0x5c, 0xb4, 0xd2, 0x76, 0xbe, 0x7c, 0xe7, 0xc3, 0xa5, + 0x50, 0xac, 0xc7, 0x1c, 0x3c, 0xa1, 0x6b, 0x3a, 0xa4, 0xc7, 0x76, 0x74, 0x05, 0x3e, 0xad, 0x37, + 0x31, 0x7f, 0x35, 0x73, 0x6f, 0x2b, 0x07, 0xe9, 0x4a, 0xb7, 0xa6, 0xb7, 0xeb, 0xcd, 0xf6, 0x1e, + 0x7f, 0x60, 0x75, 0x7d, 0xbc, 0x96, 0xb5, 0xdf, 0x25, 0x58, 0xe5, 0xc5, 0x8a, 0xf6, 0x41, 0xe9, + 0x7b, 0x23, 0xdf, 0x0b, 0xec, 0x90, 0x98, 0xa2, 0xc6, 0x79, 0xa4, 0xb7, 0x16, 0x1e, 0xb2, 0x16, + 0x83, 0x39, 0xbf, 0xb1, 0x82, 0x0b, 0xfd, 0x59, 0x13, 0x6a, 0x43, 0x21, 0x0e, 0x3e, 0x56, 0x94, + 0x99, 0xe2, 0xcd, 0xa5, 0x61, 0x8f, 0x05, 0xf3, 0xfe, 0x8c, 0xa5, 0x9a, 0x83, 0x0c, 0x97, 0x31, + 0xa3, 0x3e, 0xa7, 0xfd, 0x26, 0x41, 0x61, 0xee, 0x14, 0xe8, 0x5b, 0x90, 0x3d, 0x9f, 0x9d, 0x3b, + 0x5f, 0xbe, 0x7b, 0x9e, 0x73, 0x17, 0x0d, 0x9f, 0x50, 0x2b, 0xf4, 0x28, 0x96, 0x3d, 0x1f, 0x3d, + 0x80, 0x35, 0xee, 0x21, 0x10, 0x5d, 0x65, 0xe9, 0xfb, 0x8e, 0xb1, 0xda, 0x5d, 0x58, 0x8f, 0x65, + 0x90, 0x0a, 0x9f, 0x18, 0x1d, 0x1d, 0x57, 0x7a, 0x06, 0x9e, 0xbb, 0x8b, 0x35, 0x48, 0x54, 0xda, + 0x75, 0x45, 0xd2, 0xfe, 0x91, 0x21, 0x3f, 0x1b, 0xec, 0x47, 0xa9, 0xaf, 0x47, 0x2c, 0xf6, 0xf3, + 0x14, 0xd6, 0xa2, 0xd0, 0xef, 0x41, 0xea, 0x24, 0x7a, 0xa4, 0xac, 0x8f, 0x67, 0xca, 0x1b, 0x0b, + 0x05, 0xc4, 0x33, 0x66, 0x40, 0xed, 0x27, 0xe9, 0x5c, 0x61, 0xe7, 0x20, 0xdd, 0xd2, 0xbb, 0x5d, + 0xb3, 0xd7, 0xa8, 0xb4, 0x15, 0x09, 0x5d, 0x02, 0x34, 0x5e, 0x9a, 0x06, 0x36, 0xf5, 0xfd, 0x83, + 0x4a, 0x4b, 0x91, 0x91, 0x02, 0xd9, 0x3d, 0xac, 0x57, 0x7a, 0x3a, 0xe6, 0xc8, 0x44, 0x54, 0xd6, + 0xd3, 0x96, 0x09, 0x38, 0x89, 0xd2, 0x90, 0xe2, 0x9f, 0xa9, 0x88, 0xd7, 0xa8, 0x74, 0xcd, 0x4a, + 0xbb, 0xa6, 0x77, 0x7b, 0x06, 0x56, 0x32, 0xda, 0x7f, 0x32, 0xac, 0xef, 0xbd, 0x75, 0xf8, 0xaf, + 0x62, 0x0b, 0xb2, 0xec, 0xef, 0x6c, 0x06, 0x21, 0xb5, 0xdd, 0xa1, 0xe8, 0x30, 0x19, 0x66, 0xeb, + 0x32, 0x13, 0xfa, 0x1c, 0xf2, 0x96, 0xe3, 0x78, 0xef, 0x4c, 0xc7, 0x0e, 0x09, 0xb5, 0x9c, 0x80, + 0xe5, 0x70, 0x1d, 0xe7, 0x98, 0xb5, 0x25, 0x8c, 0xe8, 0x19, 0xe4, 0xa3, 0x76, 0x33, 0x30, 0x5f, + 0xd9, 0xee, 0xc0, 0x76, 0x87, 0x81, 0x68, 0xe7, 0xf7, 0x16, 0x66, 0x2a, 0x3e, 0x40, 0xb1, 0x1d, + 0x71, 0xaa, 0x82, 0xa2, 0xbb, 0x21, 0x3d, 0xc5, 0x39, 0x77, 0xda, 0x86, 0x9e, 0xc1, 0x45, 0x56, + 0x91, 0xb6, 0xe7, 0x5a, 0xce, 0x44, 0x3d, 0xb9, 0xa4, 0xd9, 0xc7, 0xea, 0x1d, 0x8b, 0x5a, 0x23, + 0x12, 0xd5, 0x22, 0x9a, 0x48, 0xc4, 0xc2, 0x1b, 0xaf, 0x01, 0x9d, 0xf5, 0x8e, 0x14, 0x48, 0xbc, + 0x21, 0xa7, 0x22, 0x11, 0xd1, 0x27, 0x7a, 0x14, 0x5f, 0xbd, 0xbc, 0xa4, 0xf2, 0xce, 0xba, 0xe4, + 0xa4, 0xaf, 0xe5, 0x87, 0x92, 0x16, 0xc0, 0x85, 0x33, 0xfb, 0xa8, 0x3c, 0x2b, 0xbb, 0xa4, 0xa2, + 0x1a, 0x2b, 0x42, 0x0c, 0xa9, 0xb3, 0xe3, 0x44, 0x63, 0x25, 0x1e, 0x28, 0xaa, 0x0a, 0xe4, 0xfd, + 0x58, 0x9a, 0xbf, 0xff, 0x3f, 0x93, 0xa0, 0x30, 0x97, 0x7c, 0xd0, 0xa8, 0x5a, 0x61, 0xff, 0x35, + 0xba, 0x0d, 0x85, 0xe0, 0x8d, 0xed, 0xfb, 0x64, 0x60, 0x52, 0x66, 0x0e, 0xd4, 0x55, 0xf6, 0xbf, + 0xca, 0x0b, 0x33, 0x07, 0x07, 0xd1, 0xad, 0xc7, 0xc0, 0x99, 0x01, 0x26, 0x27, 0xac, 0xe2, 0xb7, + 0xf7, 0x02, 0x10, 0x9f, 0x81, 0x84, 0x1c, 0x73, 0x2d, 0x1a, 0xcc, 0x9d, 0x65, 0xa3, 0x13, 0x43, + 0x17, 0x27, 0x33, 0x10, 0x56, 0xc8, 0xd4, 0x06, 0x9b, 0x8a, 0x1a, 0x90, 0x9f, 0xd1, 0x8e, 0x9b, + 0xce, 0xd6, 0x07, 0x75, 0x71, 0x6e, 0x5a, 0x2c, 0x98, 0xfb, 0x77, 0x27, 0xe7, 0xff, 0xdd, 0xdf, + 0x43, 0x76, 0xe4, 0x51, 0x32, 0x76, 0x93, 0x62, 0xc7, 0x7f, 0xb0, 0xd0, 0xcd, 0x7c, 0x46, 0x8b, + 0x4f, 0x3d, 0x4a, 0x84, 0x1f, 0x16, 0x47, 0x66, 0x34, 0x31, 0xa0, 0x2f, 0x41, 0x09, 0x5c, 0xcb, + 0x0f, 0x5e, 0x7b, 0xa1, 0x19, 0x4f, 0x88, 0x6b, 0x6c, 0x42, 0x2c, 0xc4, 0xf6, 0x43, 0x6e, 0xd6, + 0x7e, 0x96, 0xa0, 0x30, 0xa7, 0x85, 0xb6, 0xe0, 0xfa, 0x53, 0x03, 0xeb, 0x26, 0x1f, 0x0e, 0xbb, + 0x8b, 0xa6, 0x43, 0x05, 0xb2, 0x6d, 0xa3, 0x67, 0xee, 0x36, 0xdb, 0xcd, 0x6e, 0x43, 0xaf, 0x2b, + 0x12, 0xba, 0x06, 0xea, 0x0c, 0xa9, 0xb2, 0x1b, 0xb5, 0x88, 0x56, 0xf3, 0x69, 0xb3, 0xa7, 0xc8, + 0xe8, 0x3a, 0x5c, 0x59, 0xb0, 0x5b, 0x3b, 0xc0, 0x5d, 0x03, 0x2b, 0x49, 0x74, 0x11, 0x0a, 0x6d, + 0xc3, 0x9c, 0x46, 0x28, 0x89, 0xea, 0x2f, 0x12, 0x5c, 0xee, 0x7b, 0xa3, 0x45, 0xf9, 0xa8, 0x02, + 0xaf, 0xea, 0x68, 0x9a, 0xe9, 0x48, 0x2f, 0x1e, 0x09, 0xc8, 0xd0, 0x73, 0x2c, 0x77, 0x58, 0xf4, + 0xe8, 0xb0, 0x34, 0x24, 0x2e, 0x9b, 0x75, 0x4a, 0x7c, 0xcb, 0xf2, 0xed, 0x60, 0x66, 0x92, 0xff, + 0x66, 0xbc, 0xf8, 0x55, 0xbe, 0xb2, 0xc7, 0xe9, 0x35, 0xc7, 0x3b, 0x1e, 0x14, 0xeb, 0x63, 0x3f, + 0x87, 0x3b, 0x7f, 0xc7, 0x7b, 0x2f, 0xd9, 0xde, 0xcb, 0xf1, 0xde, 0xcb, 0xc3, 0x9d, 0x57, 0xab, + 0xcc, 0xc1, 0xfd, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0xcd, 0x38, 0x05, 0xaa, 0x7d, 0x0c, 0x00, + 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/datastore/v1beta3/datastore.pb.go b/vendor/google.golang.org/genproto/googleapis/datastore/v1beta3/datastore.pb.go index 2230f74..4330f52 100644 --- a/vendor/google.golang.org/genproto/googleapis/datastore/v1beta3/datastore.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/datastore/v1beta3/datastore.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/datastore/v1beta3/datastore.proto -// DO NOT EDIT! /* Package datastore is a generated protocol buffer package. @@ -23,9 +22,12 @@ It has these top-level messages: CommitResponse AllocateIdsRequest AllocateIdsResponse + ReserveIdsRequest + ReserveIdsResponse Mutation MutationResult ReadOptions + TransactionOptions PartitionId Key ArrayValue @@ -123,7 +125,7 @@ func (x ReadOptions_ReadConsistency) String() string { return proto.EnumName(ReadOptions_ReadConsistency_name, int32(x)) } func (ReadOptions_ReadConsistency) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{14, 0} + return fileDescriptor0, []int{16, 0} } // The request for [Datastore.Lookup][google.datastore.v1beta3.Datastore.Lookup]. @@ -389,6 +391,8 @@ func (m *RunQueryResponse) GetQuery() *Query { type BeginTransactionRequest struct { // The ID of the project against which to make the request. ProjectId string `protobuf:"bytes,8,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Options for a new transaction. + TransactionOptions *TransactionOptions `protobuf:"bytes,10,opt,name=transaction_options,json=transactionOptions" json:"transaction_options,omitempty"` } func (m *BeginTransactionRequest) Reset() { *m = BeginTransactionRequest{} } @@ -403,6 +407,13 @@ func (m *BeginTransactionRequest) GetProjectId() string { return "" } +func (m *BeginTransactionRequest) GetTransactionOptions() *TransactionOptions { + if m != nil { + return m.TransactionOptions + } + return nil +} + // The response for [Datastore.BeginTransaction][google.datastore.v1beta3.Datastore.BeginTransaction]. type BeginTransactionResponse struct { // The transaction identifier (always present). @@ -663,6 +674,52 @@ func (m *AllocateIdsResponse) GetKeys() []*Key { return nil } +// The request for [Datastore.ReserveIds][google.datastore.v1beta3.Datastore.ReserveIds]. +type ReserveIdsRequest struct { + // The ID of the project against which to make the request. + ProjectId string `protobuf:"bytes,8,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // If not empty, the ID of the database against which to make the request. + DatabaseId string `protobuf:"bytes,9,opt,name=database_id,json=databaseId" json:"database_id,omitempty"` + // A list of keys with complete key paths whose numeric IDs should not be + // auto-allocated. + Keys []*Key `protobuf:"bytes,1,rep,name=keys" json:"keys,omitempty"` +} + +func (m *ReserveIdsRequest) Reset() { *m = ReserveIdsRequest{} } +func (m *ReserveIdsRequest) String() string { return proto.CompactTextString(m) } +func (*ReserveIdsRequest) ProtoMessage() {} +func (*ReserveIdsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *ReserveIdsRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *ReserveIdsRequest) GetDatabaseId() string { + if m != nil { + return m.DatabaseId + } + return "" +} + +func (m *ReserveIdsRequest) GetKeys() []*Key { + if m != nil { + return m.Keys + } + return nil +} + +// The response for [Datastore.ReserveIds][google.datastore.v1beta3.Datastore.ReserveIds]. +type ReserveIdsResponse struct { +} + +func (m *ReserveIdsResponse) Reset() { *m = ReserveIdsResponse{} } +func (m *ReserveIdsResponse) String() string { return proto.CompactTextString(m) } +func (*ReserveIdsResponse) ProtoMessage() {} +func (*ReserveIdsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + // A mutation to apply to an entity. type Mutation struct { // The mutation operation. @@ -692,7 +749,7 @@ type Mutation struct { func (m *Mutation) Reset() { *m = Mutation{} } func (m *Mutation) String() string { return proto.CompactTextString(m) } func (*Mutation) ProtoMessage() {} -func (*Mutation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } +func (*Mutation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } type isMutation_Operation interface { isMutation_Operation() @@ -928,7 +985,7 @@ type MutationResult struct { func (m *MutationResult) Reset() { *m = MutationResult{} } func (m *MutationResult) String() string { return proto.CompactTextString(m) } func (*MutationResult) ProtoMessage() {} -func (*MutationResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } +func (*MutationResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } func (m *MutationResult) GetKey() *Key { if m != nil { @@ -966,7 +1023,7 @@ type ReadOptions struct { func (m *ReadOptions) Reset() { *m = ReadOptions{} } func (m *ReadOptions) String() string { return proto.CompactTextString(m) } func (*ReadOptions) ProtoMessage() {} -func (*ReadOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } +func (*ReadOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } type isReadOptions_ConsistencyType interface { isReadOptions_ConsistencyType() @@ -1068,6 +1125,164 @@ func _ReadOptions_OneofSizer(msg proto.Message) (n int) { return n } +// Options for beginning a new transaction. +// +// Transactions can be created explicitly with calls to +// [Datastore.BeginTransaction][google.datastore.v1beta3.Datastore.BeginTransaction] or implicitly by setting +// [ReadOptions.new_transaction][google.datastore.v1beta3.ReadOptions.new_transaction] in read requests. +type TransactionOptions struct { + // The `mode` of the transaction, indicating whether write operations are + // supported. + // + // Types that are valid to be assigned to Mode: + // *TransactionOptions_ReadWrite_ + // *TransactionOptions_ReadOnly_ + Mode isTransactionOptions_Mode `protobuf_oneof:"mode"` +} + +func (m *TransactionOptions) Reset() { *m = TransactionOptions{} } +func (m *TransactionOptions) String() string { return proto.CompactTextString(m) } +func (*TransactionOptions) ProtoMessage() {} +func (*TransactionOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } + +type isTransactionOptions_Mode interface { + isTransactionOptions_Mode() +} + +type TransactionOptions_ReadWrite_ struct { + ReadWrite *TransactionOptions_ReadWrite `protobuf:"bytes,1,opt,name=read_write,json=readWrite,oneof"` +} +type TransactionOptions_ReadOnly_ struct { + ReadOnly *TransactionOptions_ReadOnly `protobuf:"bytes,2,opt,name=read_only,json=readOnly,oneof"` +} + +func (*TransactionOptions_ReadWrite_) isTransactionOptions_Mode() {} +func (*TransactionOptions_ReadOnly_) isTransactionOptions_Mode() {} + +func (m *TransactionOptions) GetMode() isTransactionOptions_Mode { + if m != nil { + return m.Mode + } + return nil +} + +func (m *TransactionOptions) GetReadWrite() *TransactionOptions_ReadWrite { + if x, ok := m.GetMode().(*TransactionOptions_ReadWrite_); ok { + return x.ReadWrite + } + return nil +} + +func (m *TransactionOptions) GetReadOnly() *TransactionOptions_ReadOnly { + if x, ok := m.GetMode().(*TransactionOptions_ReadOnly_); ok { + return x.ReadOnly + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*TransactionOptions) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _TransactionOptions_OneofMarshaler, _TransactionOptions_OneofUnmarshaler, _TransactionOptions_OneofSizer, []interface{}{ + (*TransactionOptions_ReadWrite_)(nil), + (*TransactionOptions_ReadOnly_)(nil), + } +} + +func _TransactionOptions_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*TransactionOptions) + // mode + switch x := m.Mode.(type) { + case *TransactionOptions_ReadWrite_: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ReadWrite); err != nil { + return err + } + case *TransactionOptions_ReadOnly_: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ReadOnly); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("TransactionOptions.Mode has unexpected type %T", x) + } + return nil +} + +func _TransactionOptions_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*TransactionOptions) + switch tag { + case 1: // mode.read_write + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TransactionOptions_ReadWrite) + err := b.DecodeMessage(msg) + m.Mode = &TransactionOptions_ReadWrite_{msg} + return true, err + case 2: // mode.read_only + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TransactionOptions_ReadOnly) + err := b.DecodeMessage(msg) + m.Mode = &TransactionOptions_ReadOnly_{msg} + return true, err + default: + return false, nil + } +} + +func _TransactionOptions_OneofSizer(msg proto.Message) (n int) { + m := msg.(*TransactionOptions) + // mode + switch x := m.Mode.(type) { + case *TransactionOptions_ReadWrite_: + s := proto.Size(x.ReadWrite) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *TransactionOptions_ReadOnly_: + s := proto.Size(x.ReadOnly) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Options specific to read / write transactions. +type TransactionOptions_ReadWrite struct { + // The transaction identifier of the transaction being retried. + PreviousTransaction []byte `protobuf:"bytes,1,opt,name=previous_transaction,json=previousTransaction,proto3" json:"previous_transaction,omitempty"` +} + +func (m *TransactionOptions_ReadWrite) Reset() { *m = TransactionOptions_ReadWrite{} } +func (m *TransactionOptions_ReadWrite) String() string { return proto.CompactTextString(m) } +func (*TransactionOptions_ReadWrite) ProtoMessage() {} +func (*TransactionOptions_ReadWrite) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{17, 0} +} + +func (m *TransactionOptions_ReadWrite) GetPreviousTransaction() []byte { + if m != nil { + return m.PreviousTransaction + } + return nil +} + +// Options specific to read-only transactions. +type TransactionOptions_ReadOnly struct { +} + +func (m *TransactionOptions_ReadOnly) Reset() { *m = TransactionOptions_ReadOnly{} } +func (m *TransactionOptions_ReadOnly) String() string { return proto.CompactTextString(m) } +func (*TransactionOptions_ReadOnly) ProtoMessage() {} +func (*TransactionOptions_ReadOnly) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17, 1} } + func init() { proto.RegisterType((*LookupRequest)(nil), "google.datastore.v1beta3.LookupRequest") proto.RegisterType((*LookupResponse)(nil), "google.datastore.v1beta3.LookupResponse") @@ -1081,9 +1296,14 @@ func init() { proto.RegisterType((*CommitResponse)(nil), "google.datastore.v1beta3.CommitResponse") proto.RegisterType((*AllocateIdsRequest)(nil), "google.datastore.v1beta3.AllocateIdsRequest") proto.RegisterType((*AllocateIdsResponse)(nil), "google.datastore.v1beta3.AllocateIdsResponse") + proto.RegisterType((*ReserveIdsRequest)(nil), "google.datastore.v1beta3.ReserveIdsRequest") + proto.RegisterType((*ReserveIdsResponse)(nil), "google.datastore.v1beta3.ReserveIdsResponse") proto.RegisterType((*Mutation)(nil), "google.datastore.v1beta3.Mutation") proto.RegisterType((*MutationResult)(nil), "google.datastore.v1beta3.MutationResult") proto.RegisterType((*ReadOptions)(nil), "google.datastore.v1beta3.ReadOptions") + proto.RegisterType((*TransactionOptions)(nil), "google.datastore.v1beta3.TransactionOptions") + proto.RegisterType((*TransactionOptions_ReadWrite)(nil), "google.datastore.v1beta3.TransactionOptions.ReadWrite") + proto.RegisterType((*TransactionOptions_ReadOnly)(nil), "google.datastore.v1beta3.TransactionOptions.ReadOnly") proto.RegisterEnum("google.datastore.v1beta3.CommitRequest_Mode", CommitRequest_Mode_name, CommitRequest_Mode_value) proto.RegisterEnum("google.datastore.v1beta3.ReadOptions_ReadConsistency", ReadOptions_ReadConsistency_name, ReadOptions_ReadConsistency_value) } @@ -1113,6 +1333,9 @@ type DatastoreClient interface { // Allocates IDs for the given keys, which is useful for referencing an entity // before it is inserted. AllocateIds(ctx context.Context, in *AllocateIdsRequest, opts ...grpc.CallOption) (*AllocateIdsResponse, error) + // Prevents the supplied keys' IDs from being auto-allocated by Cloud + // Datastore. + ReserveIds(ctx context.Context, in *ReserveIdsRequest, opts ...grpc.CallOption) (*ReserveIdsResponse, error) } type datastoreClient struct { @@ -1177,6 +1400,15 @@ func (c *datastoreClient) AllocateIds(ctx context.Context, in *AllocateIdsReques return out, nil } +func (c *datastoreClient) ReserveIds(ctx context.Context, in *ReserveIdsRequest, opts ...grpc.CallOption) (*ReserveIdsResponse, error) { + out := new(ReserveIdsResponse) + err := grpc.Invoke(ctx, "/google.datastore.v1beta3.Datastore/ReserveIds", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // Server API for Datastore service type DatastoreServer interface { @@ -1194,6 +1426,9 @@ type DatastoreServer interface { // Allocates IDs for the given keys, which is useful for referencing an entity // before it is inserted. AllocateIds(context.Context, *AllocateIdsRequest) (*AllocateIdsResponse, error) + // Prevents the supplied keys' IDs from being auto-allocated by Cloud + // Datastore. + ReserveIds(context.Context, *ReserveIdsRequest) (*ReserveIdsResponse, error) } func RegisterDatastoreServer(s *grpc.Server, srv DatastoreServer) { @@ -1308,6 +1543,24 @@ func _Datastore_AllocateIds_Handler(srv interface{}, ctx context.Context, dec fu return interceptor(ctx, in, info, handler) } +func _Datastore_ReserveIds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ReserveIdsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DatastoreServer).ReserveIds(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.datastore.v1beta3.Datastore/ReserveIds", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DatastoreServer).ReserveIds(ctx, req.(*ReserveIdsRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _Datastore_serviceDesc = grpc.ServiceDesc{ ServiceName: "google.datastore.v1beta3.Datastore", HandlerType: (*DatastoreServer)(nil), @@ -1336,6 +1589,10 @@ var _Datastore_serviceDesc = grpc.ServiceDesc{ MethodName: "AllocateIds", Handler: _Datastore_AllocateIds_Handler, }, + { + MethodName: "ReserveIds", + Handler: _Datastore_ReserveIds_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "google/datastore/v1beta3/datastore.proto", @@ -1344,82 +1601,93 @@ var _Datastore_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("google/datastore/v1beta3/datastore.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 1218 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xcf, 0x72, 0xdb, 0xd4, - 0x17, 0xce, 0x75, 0x12, 0xc7, 0x39, 0xce, 0x1f, 0xf7, 0xfe, 0xfa, 0x03, 0x4d, 0x68, 0xc1, 0xa3, - 0x52, 0x6a, 0x42, 0xb1, 0x89, 0x4b, 0xa7, 0x10, 0xba, 0x88, 0xed, 0xb8, 0xb5, 0x87, 0xc6, 0x09, - 0xd7, 0x6e, 0x67, 0x60, 0xa3, 0x91, 0xa5, 0x1b, 0x23, 0x22, 0xeb, 0x2a, 0xd2, 0x75, 0x07, 0x0f, - 0xc3, 0x86, 0x15, 0x03, 0xc3, 0x0a, 0x78, 0x00, 0xb6, 0xb0, 0x06, 0x5e, 0x81, 0x19, 0x66, 0xd8, - 0xf0, 0x0a, 0x3c, 0x04, 0x4b, 0x46, 0x57, 0x57, 0x76, 0xe4, 0x56, 0xb6, 0xc2, 0xb0, 0xb3, 0x8e, - 0xbf, 0xef, 0x9c, 0xef, 0x9c, 0x73, 0x75, 0xce, 0x15, 0x94, 0x06, 0x8c, 0x0d, 0x6c, 0x5a, 0x31, - 0x75, 0xae, 0xfb, 0x9c, 0x79, 0xb4, 0xf2, 0x74, 0xaf, 0x4f, 0xb9, 0x7e, 0x67, 0x6a, 0x29, 0xbb, - 0x1e, 0xe3, 0x0c, 0x2b, 0x21, 0xb2, 0x3c, 0xb5, 0x4b, 0xe4, 0xce, 0x35, 0xe9, 0x43, 0x77, 0xad, - 0x8a, 0xee, 0x38, 0x8c, 0xeb, 0xdc, 0x62, 0x8e, 0x1f, 0xf2, 0x76, 0x6e, 0x26, 0x46, 0xa0, 0x0e, - 0xb7, 0xf8, 0x58, 0xc2, 0x5e, 0x4d, 0x84, 0x9d, 0x8f, 0xa8, 0x27, 0x51, 0xea, 0x4f, 0x08, 0x36, - 0x1f, 0x31, 0x76, 0x36, 0x72, 0x09, 0x3d, 0x1f, 0x51, 0x9f, 0xe3, 0xeb, 0x00, 0xae, 0xc7, 0x3e, - 0xa1, 0x06, 0xd7, 0x2c, 0x53, 0xc9, 0x15, 0x51, 0x69, 0x9d, 0xac, 0x4b, 0x4b, 0xdb, 0xc4, 0x2d, - 0xd8, 0xf0, 0xa8, 0x6e, 0x6a, 0xcc, 0x15, 0x9a, 0x14, 0x54, 0x44, 0xa5, 0x7c, 0xf5, 0x66, 0x39, - 0x29, 0x99, 0x32, 0xa1, 0xba, 0x79, 0x1c, 0x82, 0x49, 0xde, 0x9b, 0x3e, 0xe0, 0x3d, 0x58, 0x39, - 0xa3, 0x63, 0x5f, 0x59, 0x2e, 0x2e, 0x97, 0xf2, 0xd5, 0xeb, 0xc9, 0x1e, 0xde, 0xa7, 0x63, 0x22, - 0xa0, 0xea, 0xef, 0x08, 0xb6, 0x22, 0xb5, 0xbe, 0xcb, 0x1c, 0x9f, 0xe2, 0xfb, 0xb0, 0x7a, 0xca, - 0x46, 0x8e, 0xa9, 0x20, 0xe1, 0xe6, 0xb5, 0x64, 0x37, 0x4d, 0x51, 0x1d, 0x42, 0xfd, 0x91, 0xcd, - 0x49, 0x48, 0xc2, 0x07, 0xb0, 0x36, 0xb4, 0x7c, 0xdf, 0x72, 0x06, 0x4a, 0xe6, 0x52, 0xfc, 0x88, - 0x86, 0xdf, 0x85, 0x9c, 0x49, 0x4f, 0xa9, 0xe7, 0x51, 0x33, 0x5d, 0x26, 0x13, 0xb8, 0xfa, 0x47, - 0x06, 0xb6, 0xc9, 0xc8, 0xf9, 0x20, 0x68, 0x47, 0xfa, 0xea, 0xbb, 0xba, 0xc7, 0xad, 0xa0, 0x82, - 0x01, 0x20, 0xb3, 0xa8, 0xfa, 0x27, 0x11, 0xba, 0x6d, 0x92, 0xbc, 0x3b, 0x7d, 0xf8, 0x0f, 0xfb, - 0x78, 0x0f, 0x56, 0xc5, 0x89, 0x52, 0x96, 0x85, 0x8b, 0x57, 0x92, 0x5d, 0x88, 0x4c, 0x5b, 0x4b, - 0x24, 0xc4, 0xe3, 0x1a, 0xac, 0x0f, 0xce, 0x6d, 0x2d, 0x24, 0xaf, 0x09, 0xb2, 0x9a, 0x4c, 0x7e, - 0x78, 0x6e, 0x47, 0xfc, 0xdc, 0x40, 0xfe, 0xae, 0x6f, 0x00, 0x08, 0xba, 0xc6, 0xc7, 0x2e, 0x55, - 0xbf, 0x46, 0x50, 0x98, 0x16, 0x54, 0x1e, 0x90, 0x03, 0x58, 0xed, 0xeb, 0xdc, 0xf8, 0x58, 0x66, - 0xb8, 0xbb, 0x40, 0x5e, 0xd8, 0xdf, 0x7a, 0xc0, 0x20, 0x21, 0x11, 0xdf, 0x8d, 0x12, 0xcc, 0xa4, - 0x4a, 0x50, 0xa6, 0xa7, 0xbe, 0x03, 0x2f, 0xd6, 0xe9, 0xc0, 0x72, 0x7a, 0x9e, 0xee, 0xf8, 0xba, - 0x11, 0x14, 0x2b, 0x5d, 0x97, 0xd5, 0xfb, 0xa0, 0x3c, 0xcb, 0x94, 0xe9, 0x14, 0x21, 0xcf, 0xa7, - 0x66, 0x91, 0xd4, 0x06, 0xb9, 0x68, 0x52, 0x09, 0x6c, 0x13, 0x66, 0xdb, 0x7d, 0xdd, 0x38, 0x4b, - 0x79, 0xaa, 0x16, 0xfb, 0xc4, 0x50, 0x98, 0xfa, 0x0c, 0x95, 0xa8, 0xbf, 0x64, 0x60, 0xb3, 0xc1, - 0x86, 0x43, 0x8b, 0xa7, 0x0c, 0x73, 0x00, 0x2b, 0x43, 0x66, 0x52, 0x65, 0xb5, 0x88, 0x4a, 0x5b, - 0xd5, 0xdb, 0xc9, 0x65, 0x8c, 0x79, 0x2d, 0x1f, 0x31, 0x93, 0x12, 0xc1, 0xc4, 0xea, 0x73, 0x84, - 0xb6, 0x96, 0x62, 0x52, 0xf1, 0x01, 0xac, 0x0f, 0x47, 0x72, 0x62, 0x2a, 0x59, 0xf1, 0x46, 0xce, - 0x39, 0x55, 0x47, 0x12, 0x4a, 0xa6, 0x24, 0xf5, 0x01, 0xac, 0x04, 0x31, 0xf1, 0x55, 0x28, 0x1c, - 0x1d, 0x1f, 0x36, 0xb5, 0xc7, 0x9d, 0xee, 0x49, 0xb3, 0xd1, 0x7e, 0xd0, 0x6e, 0x1e, 0x16, 0x96, - 0xf0, 0x15, 0xd8, 0xec, 0x91, 0x5a, 0xa7, 0x5b, 0x6b, 0xf4, 0xda, 0xc7, 0x9d, 0xda, 0xa3, 0x02, - 0xc2, 0xff, 0x87, 0x2b, 0x9d, 0xe3, 0x8e, 0x16, 0x37, 0x67, 0xea, 0x2f, 0xc0, 0xd5, 0x0b, 0xc2, - 0x34, 0x9f, 0xda, 0xd4, 0xe0, 0xcc, 0x53, 0xbf, 0x42, 0xb0, 0x15, 0xa5, 0x28, 0xbb, 0xda, 0x85, - 0x42, 0x14, 0x5f, 0xf3, 0xc4, 0x09, 0x8c, 0xe6, 0x62, 0x29, 0x85, 0xf6, 0x70, 0x24, 0x6d, 0x0f, - 0x63, 0xcf, 0x3e, 0xbe, 0x01, 0x9b, 0x96, 0x63, 0xd2, 0x4f, 0xb5, 0x91, 0x6b, 0xea, 0x9c, 0xfa, - 0xca, 0x4a, 0x11, 0x95, 0x56, 0xc9, 0x86, 0x30, 0x3e, 0x0e, 0x6d, 0xea, 0x29, 0xe0, 0x9a, 0x6d, - 0x33, 0x43, 0xe7, 0xb4, 0x6d, 0xfa, 0x29, 0x3b, 0x19, 0x8d, 0x6e, 0x94, 0x7e, 0x74, 0xb7, 0xe0, - 0x7f, 0xb1, 0x38, 0x32, 0xf1, 0x7f, 0xe1, 0xe9, 0xb7, 0x0c, 0xe4, 0xa2, 0xd4, 0xf1, 0x3e, 0x64, - 0x2d, 0xc7, 0xa7, 0x1e, 0x17, 0xc9, 0xe5, 0xab, 0xc5, 0x45, 0xf3, 0xbb, 0xb5, 0x44, 0x24, 0x23, - 0xe0, 0x86, 0x95, 0x11, 0x27, 0x32, 0x25, 0x37, 0x64, 0x84, 0x5c, 0x11, 0x37, 0x7b, 0x19, 0xae, - 0x88, 0x7b, 0x0f, 0xb2, 0x26, 0xb5, 0x29, 0xa7, 0x72, 0xe8, 0xcd, 0xcf, 0x3a, 0x20, 0x86, 0x70, - 0x7c, 0x03, 0x36, 0xfa, 0xba, 0x4f, 0xb5, 0xa7, 0xd4, 0xf3, 0x83, 0xf3, 0x1f, 0xf4, 0x65, 0xb9, - 0x85, 0x48, 0x3e, 0xb0, 0x3e, 0x09, 0x8d, 0xf5, 0x3c, 0xac, 0x33, 0x97, 0x7a, 0xa2, 0x3c, 0xf5, - 0xeb, 0xf0, 0x92, 0xc1, 0x9c, 0x53, 0xdb, 0x32, 0xb8, 0x66, 0x52, 0x4e, 0xe5, 0x49, 0xe4, 0x9e, - 0xce, 0xe9, 0x60, 0xac, 0x7e, 0x89, 0x60, 0x2b, 0x7e, 0x8a, 0x70, 0x05, 0x96, 0xcf, 0x68, 0x34, - 0xcb, 0x17, 0xf4, 0x23, 0x40, 0x62, 0x05, 0xd6, 0x22, 0x3d, 0x41, 0x0b, 0x96, 0x49, 0xf4, 0x88, - 0xdf, 0x80, 0x2b, 0x33, 0xc1, 0xa9, 0x29, 0x4a, 0x9d, 0x23, 0x85, 0xe8, 0x8f, 0x43, 0x69, 0x57, - 0xff, 0x46, 0x90, 0xbf, 0xb0, 0x62, 0x70, 0x1f, 0x0a, 0x62, 0x3f, 0x19, 0xcc, 0xf1, 0x2d, 0x9f, - 0x53, 0xc7, 0x18, 0x8b, 0xf7, 0x7d, 0xab, 0x7a, 0x37, 0xd5, 0x8e, 0x12, 0xbf, 0x1b, 0x53, 0x72, - 0x6b, 0x89, 0x6c, 0x7b, 0x71, 0xd3, 0xec, 0x38, 0xc9, 0x3c, 0x67, 0x9c, 0xa8, 0x47, 0xb0, 0x3d, - 0xe3, 0x09, 0x17, 0xe1, 0x1a, 0x69, 0xd6, 0x0e, 0xb5, 0xc6, 0x71, 0xa7, 0xdb, 0xee, 0xf6, 0x9a, - 0x9d, 0xc6, 0x87, 0x33, 0x33, 0x02, 0x20, 0xdb, 0xed, 0x91, 0xe3, 0xce, 0xc3, 0x02, 0xc2, 0x1b, - 0x90, 0x6b, 0x3e, 0x69, 0x76, 0x7a, 0x8f, 0xc5, 0x4c, 0xc0, 0x50, 0xb8, 0x90, 0x91, 0x58, 0x5b, - 0xd5, 0x5f, 0xd7, 0x60, 0xfd, 0x30, 0xca, 0x05, 0x7f, 0x83, 0x20, 0x1b, 0xde, 0x71, 0xf0, 0xad, - 0xe4, 0x4c, 0x63, 0x77, 0xb6, 0x9d, 0xd2, 0x62, 0xa0, 0x1c, 0xda, 0x6f, 0x7d, 0xf1, 0xe7, 0x5f, - 0xdf, 0x66, 0x76, 0xd5, 0x9b, 0x93, 0xdb, 0xa0, 0x7c, 0xab, 0xfd, 0xca, 0x67, 0xd3, 0x37, 0xfe, - 0xf3, 0x7d, 0x5b, 0xd0, 0xf6, 0xd1, 0x2e, 0xfe, 0x1e, 0x41, 0x2e, 0x5a, 0xaa, 0xf8, 0xf5, 0x39, - 0xb5, 0x8f, 0xdf, 0x64, 0x76, 0x76, 0xd3, 0x40, 0xa5, 0xaa, 0xaa, 0x50, 0x75, 0x5b, 0xbd, 0xb5, - 0x40, 0x95, 0x27, 0x89, 0x81, 0xae, 0x9f, 0x11, 0x14, 0x66, 0xb7, 0x24, 0xde, 0x4b, 0x0e, 0x9a, - 0xb0, 0x8b, 0x77, 0xaa, 0x97, 0xa1, 0x48, 0xbd, 0xfb, 0x42, 0xef, 0xdb, 0x6a, 0x65, 0x81, 0xde, - 0xfe, 0x8c, 0x83, 0x40, 0x77, 0xd0, 0xdf, 0x70, 0xfa, 0xcf, 0xeb, 0x6f, 0x6c, 0x05, 0xce, 0xeb, - 0x6f, 0x7c, 0x91, 0xa4, 0xee, 0xaf, 0x21, 0x68, 0x93, 0xfe, 0xca, 0xdd, 0x3e, 0xb7, 0xbf, 0xf1, - 0x3b, 0xc5, 0xdc, 0xfe, 0xce, 0x5e, 0x15, 0x52, 0xf7, 0x57, 0x12, 0x03, 0x5d, 0x3f, 0x20, 0xc8, - 0x5f, 0xd8, 0x18, 0x78, 0xce, 0x7d, 0xe1, 0xd9, 0x05, 0xb6, 0xf3, 0x66, 0x4a, 0xb4, 0x14, 0x78, - 0x57, 0x08, 0xac, 0xa8, 0xbb, 0x0b, 0x04, 0xea, 0x53, 0xee, 0x3e, 0xda, 0xad, 0x7f, 0x87, 0xe0, - 0x9a, 0xc1, 0x86, 0x89, 0xb1, 0xea, 0x5b, 0x93, 0xf7, 0xfa, 0x24, 0xf8, 0xdc, 0x3a, 0x41, 0x1f, - 0xd5, 0x24, 0x76, 0xc0, 0x6c, 0xdd, 0x19, 0x94, 0x99, 0x37, 0xa8, 0x0c, 0xa8, 0x23, 0x3e, 0xc6, - 0x2a, 0xe1, 0x5f, 0xba, 0x6b, 0xf9, 0xcf, 0x7e, 0xb5, 0xbd, 0x37, 0xb1, 0xfc, 0x98, 0x79, 0xf9, - 0x61, 0xe8, 0xa3, 0x61, 0xb3, 0x91, 0x59, 0x9e, 0x84, 0x28, 0x3f, 0xd9, 0xab, 0x07, 0xd0, 0x7e, - 0x56, 0xb8, 0xbb, 0xf3, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x0f, 0x31, 0x6a, 0x10, 0x8c, 0x0e, - 0x00, 0x00, + // 1403 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0xcf, 0x6f, 0x1b, 0xc5, + 0x17, 0xcf, 0x38, 0x89, 0x6b, 0x3f, 0xe7, 0x87, 0x33, 0xcd, 0xf7, 0x8b, 0x65, 0x5a, 0x6a, 0x6d, + 0x29, 0x75, 0xd3, 0x62, 0x13, 0xb7, 0xa1, 0x22, 0x54, 0x28, 0xb6, 0xe3, 0xd6, 0x16, 0x8d, 0x1d, + 0x26, 0x6e, 0x2a, 0x50, 0x91, 0xb5, 0xf6, 0x4e, 0xcc, 0x92, 0xf5, 0xce, 0x66, 0x77, 0x1c, 0x88, + 0x10, 0x17, 0x0e, 0x08, 0x81, 0x38, 0x21, 0xd4, 0x13, 0x07, 0xae, 0x70, 0x2e, 0x7f, 0x03, 0x02, + 0x89, 0x0b, 0x07, 0xfe, 0x01, 0xfe, 0x08, 0x8e, 0x68, 0x67, 0x67, 0xfd, 0x2b, 0xb5, 0xbd, 0xae, + 0xb8, 0x79, 0xdf, 0x7e, 0x3e, 0xef, 0x7d, 0xe6, 0xbd, 0xd9, 0xf7, 0x5e, 0x02, 0xe9, 0x36, 0x63, + 0x6d, 0x83, 0x66, 0x35, 0x95, 0xab, 0x0e, 0x67, 0x36, 0xcd, 0x9e, 0x6e, 0x36, 0x29, 0x57, 0x6f, + 0xf7, 0x2d, 0x19, 0xcb, 0x66, 0x9c, 0xe1, 0x84, 0x87, 0xcc, 0xf4, 0xed, 0x12, 0x99, 0xbc, 0x24, + 0x7d, 0xa8, 0x96, 0x9e, 0x55, 0x4d, 0x93, 0x71, 0x95, 0xeb, 0xcc, 0x74, 0x3c, 0x5e, 0xf2, 0xda, + 0xd8, 0x08, 0xd4, 0xe4, 0x3a, 0x3f, 0x93, 0xb0, 0x57, 0xc7, 0xc2, 0x4e, 0xba, 0xd4, 0x96, 0x28, + 0xe5, 0x67, 0x04, 0xcb, 0x0f, 0x19, 0x3b, 0xee, 0x5a, 0x84, 0x9e, 0x74, 0xa9, 0xc3, 0xf1, 0x65, + 0x00, 0xcb, 0x66, 0x1f, 0xd3, 0x16, 0x6f, 0xe8, 0x5a, 0x22, 0x92, 0x42, 0xe9, 0x28, 0x89, 0x4a, + 0x4b, 0x45, 0xc3, 0x65, 0x58, 0xb2, 0xa9, 0xaa, 0x35, 0x98, 0x25, 0x34, 0x25, 0x50, 0x0a, 0xa5, + 0x63, 0xb9, 0x6b, 0x99, 0x71, 0x87, 0xc9, 0x10, 0xaa, 0x6a, 0x35, 0x0f, 0x4c, 0x62, 0x76, 0xff, + 0x01, 0x6f, 0xc2, 0xc2, 0x31, 0x3d, 0x73, 0x12, 0xf3, 0xa9, 0xf9, 0x74, 0x2c, 0x77, 0x79, 0xbc, + 0x87, 0x77, 0xe9, 0x19, 0x11, 0x50, 0xe5, 0x77, 0x04, 0x2b, 0xbe, 0x5a, 0xc7, 0x62, 0xa6, 0x43, + 0xf1, 0x3d, 0x58, 0x3c, 0x62, 0x5d, 0x53, 0x4b, 0x20, 0xe1, 0xe6, 0xb5, 0xf1, 0x6e, 0x4a, 0x22, + 0x3b, 0x84, 0x3a, 0x5d, 0x83, 0x13, 0x8f, 0x84, 0x77, 0xe0, 0x42, 0x47, 0x77, 0x1c, 0xdd, 0x6c, + 0x27, 0x42, 0x33, 0xf1, 0x7d, 0x1a, 0x7e, 0x0b, 0x22, 0x1a, 0x3d, 0xa2, 0xb6, 0x4d, 0xb5, 0x60, + 0x27, 0xe9, 0xc1, 0x95, 0x3f, 0x42, 0xb0, 0x4a, 0xba, 0xe6, 0x7b, 0x6e, 0x39, 0x82, 0x67, 0xdf, + 0x52, 0x6d, 0xae, 0xbb, 0x19, 0x74, 0x01, 0xa1, 0x69, 0xd9, 0xdf, 0xf7, 0xd1, 0x15, 0x8d, 0xc4, + 0xac, 0xfe, 0xc3, 0x7f, 0x58, 0xc7, 0xbb, 0xb0, 0x28, 0x6e, 0x54, 0x62, 0x5e, 0xb8, 0xb8, 0x32, + 0xde, 0x85, 0x38, 0x69, 0x79, 0x8e, 0x78, 0x78, 0x9c, 0x87, 0x68, 0xfb, 0xc4, 0x68, 0x78, 0xe4, + 0x0b, 0x82, 0xac, 0x8c, 0x27, 0x3f, 0x38, 0x31, 0x7c, 0x7e, 0xa4, 0x2d, 0x7f, 0x17, 0x96, 0x00, + 0x04, 0xbd, 0xc1, 0xcf, 0x2c, 0xaa, 0x7c, 0x83, 0x20, 0xde, 0x4f, 0xa8, 0xbc, 0x20, 0x3b, 0xb0, + 0xd8, 0x54, 0x79, 0xeb, 0x23, 0x79, 0xc2, 0x8d, 0x29, 0xf2, 0xbc, 0xfa, 0x16, 0x5c, 0x06, 0xf1, + 0x88, 0x78, 0xcb, 0x3f, 0x60, 0x28, 0xd0, 0x01, 0xe5, 0xf1, 0x94, 0xa7, 0x08, 0x5e, 0x2a, 0xd0, + 0xb6, 0x6e, 0xd6, 0x6d, 0xd5, 0x74, 0xd4, 0x96, 0x9b, 0xad, 0x80, 0x65, 0xfe, 0x10, 0x2e, 0xf2, + 0x3e, 0xa9, 0x57, 0x23, 0x10, 0xf1, 0x6f, 0x8d, 0x8f, 0x3f, 0x10, 0xc9, 0x2f, 0x15, 0xe6, 0xe7, + 0x6c, 0xca, 0x3d, 0x48, 0x9c, 0x17, 0x26, 0xd3, 0x95, 0x82, 0xd8, 0x00, 0x43, 0x24, 0x6d, 0x89, + 0x0c, 0x9a, 0x14, 0x02, 0xab, 0x84, 0x19, 0x46, 0x53, 0x6d, 0x1d, 0x07, 0x3c, 0xce, 0x74, 0x9f, + 0x18, 0xe2, 0x7d, 0x9f, 0x9e, 0x12, 0xe5, 0x97, 0x10, 0x2c, 0x17, 0x59, 0xa7, 0xa3, 0xf3, 0x80, + 0x61, 0x76, 0x60, 0xa1, 0xc3, 0x34, 0x9a, 0x58, 0x4c, 0xa1, 0xf4, 0xca, 0xa4, 0x34, 0x0d, 0x79, + 0xcd, 0xec, 0x31, 0x8d, 0x12, 0xc1, 0xc4, 0xca, 0x73, 0x84, 0x96, 0xe7, 0x86, 0xa4, 0xe2, 0x1d, + 0x88, 0x76, 0xba, 0xb2, 0x23, 0x27, 0xc2, 0xe2, 0x8b, 0x9f, 0x70, 0x6b, 0xf7, 0x24, 0x94, 0xf4, + 0x49, 0xca, 0x7d, 0x58, 0x70, 0x63, 0xe2, 0x75, 0x88, 0xef, 0xd5, 0x76, 0x4b, 0x8d, 0x47, 0xd5, + 0x83, 0xfd, 0x52, 0xb1, 0x72, 0xbf, 0x52, 0xda, 0x8d, 0xcf, 0xe1, 0x35, 0x58, 0xae, 0x93, 0x7c, + 0xf5, 0x20, 0x5f, 0xac, 0x57, 0x6a, 0xd5, 0xfc, 0xc3, 0x38, 0xc2, 0xff, 0x83, 0xb5, 0x6a, 0xad, + 0xda, 0x18, 0x36, 0x87, 0x0a, 0xff, 0x87, 0xf5, 0xc1, 0x5b, 0xe2, 0x50, 0x83, 0xb6, 0x38, 0xb3, + 0x95, 0xaf, 0x11, 0xac, 0xf8, 0x47, 0x94, 0x55, 0x3d, 0x80, 0xb8, 0x1f, 0xbf, 0x61, 0x8b, 0x1b, + 0xee, 0xf7, 0xdd, 0x74, 0x00, 0xed, 0x5e, 0xcb, 0x5b, 0xed, 0x0c, 0x3d, 0x3b, 0xf8, 0x2a, 0x2c, + 0xeb, 0xa6, 0x46, 0x3f, 0x6d, 0x74, 0x2d, 0x4d, 0xe5, 0xd4, 0x49, 0x2c, 0xa4, 0x50, 0x7a, 0x91, + 0x2c, 0x09, 0xe3, 0x23, 0xcf, 0xa6, 0x1c, 0x01, 0xce, 0x1b, 0x06, 0x6b, 0xa9, 0x9c, 0x56, 0x34, + 0x27, 0x60, 0x25, 0xfd, 0xd1, 0x80, 0x82, 0x8f, 0x86, 0x32, 0x5c, 0x1c, 0x8a, 0x23, 0x0f, 0xfe, + 0x02, 0x9e, 0xbe, 0x44, 0xb0, 0x46, 0xa8, 0x43, 0xed, 0xd3, 0x19, 0x14, 0x5f, 0x81, 0x98, 0xeb, + 0xb3, 0xa9, 0x3a, 0xd4, 0x7d, 0x1f, 0x15, 0xef, 0xc1, 0x37, 0xbd, 0xd8, 0x91, 0xd6, 0x01, 0x0f, + 0xea, 0x90, 0x9f, 0xc5, 0xaf, 0x21, 0x88, 0xf8, 0x95, 0xc1, 0xdb, 0x10, 0xd6, 0x4d, 0x87, 0xda, + 0x5c, 0xe4, 0x3e, 0x96, 0x4b, 0x4d, 0x1b, 0x5f, 0xe5, 0x39, 0x22, 0x19, 0x2e, 0xd7, 0x2b, 0x9c, + 0xf8, 0x60, 0x02, 0x72, 0x3d, 0x86, 0xc7, 0x15, 0x71, 0xc3, 0xb3, 0x70, 0x45, 0xdc, 0xbb, 0x10, + 0xd6, 0xa8, 0x41, 0x39, 0x95, 0x3d, 0x7f, 0x72, 0x2e, 0x5c, 0xa2, 0x07, 0xc7, 0x57, 0x61, 0x49, + 0xe4, 0xf7, 0x94, 0xda, 0x8e, 0xfb, 0x79, 0xba, 0x45, 0x98, 0x2f, 0x23, 0x12, 0x73, 0xad, 0x87, + 0x9e, 0xb1, 0x10, 0x83, 0x28, 0xb3, 0xa8, 0x2d, 0xd2, 0x53, 0xb8, 0x0c, 0x2f, 0xb7, 0x98, 0x79, + 0x64, 0xe8, 0x2d, 0xde, 0xd0, 0x28, 0xa7, 0xf2, 0x43, 0xe1, 0xb6, 0xca, 0x69, 0xfb, 0x4c, 0xf9, + 0x0a, 0xc1, 0xca, 0xf0, 0x25, 0xc7, 0x59, 0x98, 0x3f, 0xa6, 0xfe, 0x28, 0x9b, 0x52, 0x25, 0x17, + 0x89, 0x13, 0x70, 0xc1, 0xd7, 0xe3, 0x96, 0x60, 0x9e, 0xf8, 0x8f, 0xf8, 0x26, 0xac, 0x8d, 0x04, + 0xa7, 0x9a, 0x48, 0x75, 0x84, 0xc4, 0xfd, 0x17, 0xbb, 0xd2, 0xae, 0xfc, 0x83, 0x20, 0x36, 0x30, + 0x61, 0x71, 0x13, 0xe2, 0x62, 0x3c, 0xb7, 0x98, 0xe9, 0xe8, 0x0e, 0xa7, 0x66, 0xeb, 0x4c, 0xb4, + 0xa3, 0x95, 0xdc, 0x56, 0xa0, 0x11, 0x2d, 0x7e, 0x17, 0xfb, 0xe4, 0xf2, 0x1c, 0x59, 0xb5, 0x87, + 0x4d, 0xa3, 0xdd, 0x2e, 0xf4, 0x9c, 0x6e, 0xa7, 0xec, 0xc1, 0xea, 0x88, 0x27, 0x9c, 0x82, 0x4b, + 0xa4, 0x94, 0xdf, 0x6d, 0x14, 0x6b, 0xd5, 0x83, 0xca, 0x41, 0xbd, 0x54, 0x2d, 0xbe, 0x3f, 0xd2, + 0xc2, 0x00, 0xc2, 0x07, 0x75, 0x52, 0xab, 0x3e, 0x88, 0x23, 0xbc, 0x04, 0x91, 0xd2, 0x61, 0xa9, + 0x5a, 0x7f, 0x24, 0x5a, 0x16, 0x86, 0xf8, 0xc0, 0x89, 0xbc, 0xa9, 0xfd, 0x34, 0x04, 0xf8, 0xfc, + 0xe0, 0xc2, 0x8f, 0x01, 0x44, 0x06, 0x3e, 0xb1, 0x75, 0x4e, 0xe5, 0xf0, 0x7e, 0x73, 0x96, 0xd1, + 0x27, 0x52, 0xf0, 0xd8, 0x65, 0x97, 0xe7, 0x48, 0xd4, 0xf6, 0x1f, 0x70, 0x1d, 0xa2, 0xde, 0xe6, + 0x63, 0x1a, 0xfe, 0x48, 0xdf, 0x9a, 0xd9, 0x6f, 0xcd, 0x34, 0xc4, 0x26, 0x62, 0xcb, 0xdf, 0xc9, + 0x77, 0x20, 0xda, 0x8b, 0x87, 0x37, 0x61, 0xdd, 0xb2, 0xe9, 0xa9, 0xce, 0xba, 0x4e, 0xe3, 0xfc, + 0xe4, 0xbb, 0xe8, 0xbf, 0x1b, 0xf0, 0x9d, 0x04, 0x88, 0xf8, 0x7e, 0x0b, 0x61, 0x6f, 0x90, 0xe5, + 0xfe, 0x8a, 0x40, 0x74, 0xd7, 0x57, 0x84, 0xbf, 0x45, 0x10, 0xf6, 0x96, 0x5f, 0x7c, 0x7d, 0xbc, + 0xde, 0xa1, 0x65, 0x3e, 0x99, 0x9e, 0x0e, 0x94, 0x6d, 0xe5, 0x8d, 0x2f, 0xfe, 0xfc, 0xfb, 0xbb, + 0xd0, 0x86, 0x72, 0xad, 0xf7, 0x67, 0x82, 0x6c, 0x6e, 0x4e, 0xf6, 0xb3, 0x7e, 0xe3, 0xfb, 0x7c, + 0xdb, 0x10, 0xb4, 0x6d, 0xb4, 0x81, 0xbf, 0x47, 0x10, 0xf1, 0xb7, 0x2d, 0x7c, 0x63, 0xc2, 0xad, + 0x1c, 0x5e, 0x71, 0x93, 0x1b, 0x41, 0xa0, 0x52, 0x55, 0x4e, 0xa8, 0xba, 0xa5, 0x5c, 0x9f, 0xa2, + 0xca, 0x96, 0x44, 0x57, 0xd7, 0x33, 0x04, 0xf1, 0xd1, 0xf5, 0x06, 0x6f, 0x8e, 0x0f, 0x3a, 0x66, + 0x47, 0x4b, 0xe6, 0x66, 0xa1, 0x48, 0xbd, 0xdb, 0x42, 0xef, 0x1d, 0x25, 0x3b, 0x45, 0x6f, 0x73, + 0xc4, 0x81, 0xab, 0xdb, 0xad, 0xaf, 0x37, 0xb6, 0x27, 0xd5, 0x77, 0x68, 0x77, 0x99, 0x54, 0xdf, + 0xe1, 0x0d, 0x20, 0x70, 0x7d, 0x5b, 0x82, 0xd6, 0xab, 0xaf, 0x5c, 0xca, 0x26, 0xd6, 0x77, 0x78, + 0x19, 0x9c, 0x58, 0xdf, 0xd1, 0x1d, 0x2f, 0x70, 0x7d, 0x25, 0xd1, 0xd5, 0xf5, 0x23, 0x82, 0xd8, + 0xc0, 0xa8, 0xc7, 0x13, 0x16, 0xbd, 0xf3, 0x9b, 0x47, 0xf2, 0xf5, 0x80, 0x68, 0x29, 0x70, 0x4b, + 0x08, 0xcc, 0x2a, 0x1b, 0x53, 0x04, 0xaa, 0x7d, 0xae, 0xab, 0xf1, 0x07, 0x04, 0xd0, 0x9f, 0xdd, + 0xf8, 0xe6, 0xa4, 0x9e, 0x3d, 0xb2, 0x69, 0x24, 0x6f, 0x05, 0x03, 0x4b, 0x81, 0x77, 0x84, 0xc0, + 0x8c, 0x72, 0x63, 0x5a, 0x06, 0x7b, 0xd4, 0x6d, 0xb4, 0x51, 0x78, 0x86, 0xe0, 0x52, 0x8b, 0x75, + 0xc6, 0x46, 0x2a, 0xac, 0xf4, 0xfa, 0xce, 0xbe, 0xcd, 0x38, 0xdb, 0x47, 0x1f, 0xe4, 0x25, 0xb6, + 0xcd, 0x0c, 0xd5, 0x6c, 0x67, 0x98, 0xdd, 0xce, 0xb6, 0xa9, 0x29, 0xfe, 0x8b, 0x90, 0xf5, 0x5e, + 0xa9, 0x96, 0xee, 0x9c, 0xff, 0x77, 0xc3, 0xdb, 0x3d, 0xcb, 0x4f, 0xa1, 0x57, 0x1e, 0x78, 0x3e, + 0x8a, 0x06, 0xeb, 0x6a, 0x99, 0x5e, 0x88, 0xcc, 0xe1, 0x66, 0xc1, 0x85, 0xfe, 0xe6, 0x03, 0x9e, + 0x08, 0xc0, 0x93, 0x1e, 0xe0, 0xc9, 0xa1, 0xe7, 0xab, 0x19, 0x16, 0xf1, 0x6e, 0xff, 0x1b, 0x00, + 0x00, 0xff, 0xff, 0x6a, 0xaa, 0xbe, 0x57, 0x66, 0x11, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/datastore/v1beta3/entity.pb.go b/vendor/google.golang.org/genproto/googleapis/datastore/v1beta3/entity.pb.go index 005156b..390ca20 100644 --- a/vendor/google.golang.org/genproto/googleapis/datastore/v1beta3/entity.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/datastore/v1beta3/entity.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/datastore/v1beta3/entity.proto -// DO NOT EDIT! package datastore @@ -711,54 +710,55 @@ func init() { func init() { proto.RegisterFile("google/datastore/v1beta3/entity.proto", fileDescriptor1) } var fileDescriptor1 = []byte{ - // 776 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x95, 0xcf, 0x8e, 0xdb, 0x36, - 0x10, 0xc6, 0x25, 0x7b, 0xed, 0xac, 0x46, 0xca, 0x6e, 0xca, 0xe4, 0x20, 0x18, 0x49, 0xd7, 0x75, - 0xbb, 0x80, 0x7b, 0x91, 0x92, 0x0d, 0x8a, 0x16, 0x4d, 0x73, 0x88, 0x5b, 0x37, 0x32, 0x12, 0xb4, - 0x06, 0x11, 0xe4, 0xd0, 0x43, 0x0d, 0xda, 0x62, 0x14, 0xd6, 0x12, 0x29, 0x48, 0x54, 0x10, 0x3d, - 0x46, 0x5f, 0xa3, 0x7d, 0xad, 0xde, 0xfa, 0x12, 0x05, 0xff, 0x48, 0x5e, 0x24, 0xf0, 0x36, 0x37, - 0x71, 0xe6, 0x37, 0x1f, 0x3f, 0x72, 0x86, 0x36, 0x5c, 0x66, 0x42, 0x64, 0x39, 0x8d, 0x53, 0x22, - 0x49, 0x2d, 0x45, 0x45, 0xe3, 0x77, 0x8f, 0xb6, 0x54, 0x92, 0xc7, 0x31, 0xe5, 0x92, 0xc9, 0x36, - 0x2a, 0x2b, 0x21, 0x05, 0x0a, 0x0d, 0x16, 0xf5, 0x58, 0x64, 0xb1, 0xc9, 0x7d, 0x2b, 0x40, 0x4a, - 0x16, 0x13, 0xce, 0x85, 0x24, 0x92, 0x09, 0x5e, 0x9b, 0xba, 0x3e, 0xab, 0x57, 0xdb, 0xe6, 0x4d, - 0x5c, 0xcb, 0xaa, 0xd9, 0x49, 0x9b, 0xbd, 0xf8, 0x30, 0x2b, 0x59, 0x41, 0x6b, 0x49, 0x8a, 0xd2, - 0x02, 0x76, 0xdb, 0x58, 0xb6, 0x25, 0x8d, 0x73, 0x22, 0x73, 0x9e, 0x99, 0xcc, 0xec, 0x57, 0xf0, - 0xd7, 0xa4, 0x92, 0x4c, 0x6d, 0xb6, 0x4a, 0xd1, 0x03, 0x80, 0xb2, 0x12, 0x7f, 0xd0, 0x9d, 0xdc, - 0xb0, 0x34, 0x1c, 0x4c, 0xdd, 0xb9, 0x87, 0x3d, 0x1b, 0x59, 0xa5, 0xe8, 0x0b, 0x08, 0x38, 0x29, - 0x68, 0x5d, 0x92, 0x1d, 0x55, 0xc0, 0x89, 0x06, 0xfc, 0x3e, 0xb6, 0x4a, 0x67, 0xff, 0xb8, 0x30, - 0x7c, 0x41, 0x5b, 0x94, 0x40, 0x50, 0x76, 0xc2, 0x0a, 0x75, 0xa7, 0xee, 0xdc, 0xbf, 0xba, 0x8c, - 0x8e, 0x5d, 0x40, 0x74, 0xcd, 0x06, 0xf6, 0xcb, 0x6b, 0x9e, 0x9e, 0xc2, 0x49, 0x49, 0xe4, 0xdb, - 0x70, 0x30, 0x1d, 0xce, 0xfd, 0xab, 0xaf, 0x8f, 0x2b, 0xbc, 0xa0, 0x6d, 0xb4, 0x26, 0xf2, 0xed, - 0x32, 0xa7, 0x05, 0xe5, 0x12, 0xeb, 0xb2, 0xc9, 0x2b, 0x75, 0xc2, 0x3e, 0x88, 0x10, 0x9c, 0xec, - 0x19, 0x37, 0x7e, 0x3c, 0xac, 0xbf, 0xd1, 0x1d, 0x18, 0xd8, 0xd3, 0x0e, 0x13, 0x07, 0x0f, 0x58, - 0x8a, 0xee, 0xc1, 0x89, 0x3a, 0x54, 0x38, 0x54, 0x54, 0xe2, 0x60, 0xbd, 0x5a, 0x78, 0x70, 0x8b, - 0xa5, 0x1b, 0x75, 0x89, 0xb3, 0x25, 0xc0, 0xb3, 0xaa, 0x22, 0xed, 0x6b, 0x92, 0x37, 0x14, 0x7d, - 0x0b, 0xe3, 0x77, 0xea, 0xa3, 0x0e, 0x5d, 0x6d, 0xf2, 0xe2, 0xb8, 0x49, 0x5d, 0x80, 0x2d, 0x3e, - 0xfb, 0x7b, 0x04, 0x23, 0x23, 0xf1, 0x04, 0x80, 0x37, 0x79, 0xbe, 0xd1, 0x89, 0xd0, 0x9f, 0xba, - 0xf3, 0xb3, 0xab, 0x49, 0x27, 0xd3, 0x35, 0x36, 0xfa, 0xa5, 0xc9, 0x73, 0xcd, 0x27, 0x0e, 0xf6, - 0x78, 0xb7, 0x40, 0x97, 0x70, 0x7b, 0x2b, 0x44, 0x4e, 0x09, 0xb7, 0xf5, 0xea, 0x74, 0xa7, 0x89, - 0x83, 0x03, 0x1b, 0xee, 0x31, 0xc6, 0x25, 0xcd, 0x68, 0x65, 0xb1, 0xee, 0xc8, 0x81, 0x0d, 0x1b, - 0xec, 0x4b, 0x08, 0x52, 0xd1, 0x6c, 0x73, 0x6a, 0x29, 0x75, 0x09, 0x6e, 0xe2, 0x60, 0xdf, 0x44, - 0x0d, 0xb4, 0x84, 0xf3, 0x7e, 0xca, 0x2c, 0x07, 0xba, 0xc5, 0x1f, 0x9b, 0x7e, 0xd5, 0x71, 0x89, - 0x83, 0xcf, 0xfa, 0x22, 0x23, 0xf3, 0x03, 0x78, 0x7b, 0xda, 0x5a, 0x81, 0x91, 0x16, 0x78, 0x70, - 0x63, 0x87, 0x13, 0x07, 0x9f, 0xee, 0x69, 0xdb, 0x3b, 0xad, 0x65, 0xc5, 0x78, 0x66, 0x05, 0x3e, - 0xb3, 0xed, 0xf2, 0x4d, 0xd4, 0x40, 0x17, 0x00, 0xdb, 0x5c, 0x6c, 0x2d, 0x82, 0xa6, 0xee, 0x3c, - 0x50, 0xb7, 0xa7, 0x62, 0x06, 0x78, 0x0a, 0xe7, 0x19, 0x15, 0x9b, 0x52, 0x30, 0x2e, 0x2d, 0x75, - 0xaa, 0x9d, 0xdc, 0xed, 0x9c, 0xa8, 0x96, 0x47, 0x2f, 0x89, 0x7c, 0xc9, 0xb3, 0xc4, 0xc1, 0xb7, - 0x33, 0x2a, 0xd6, 0x0a, 0xee, 0x6e, 0x22, 0x30, 0x6f, 0xdc, 0xd6, 0x8e, 0x75, 0xed, 0xf4, 0xf8, - 0x29, 0x96, 0x9a, 0x56, 0x36, 0x4d, 0x9d, 0x91, 0x79, 0x0e, 0x3e, 0x51, 0x13, 0x65, 0x55, 0x3c, - 0xad, 0xf2, 0xd5, 0x71, 0x95, 0xc3, 0xf8, 0x25, 0x0e, 0x06, 0x72, 0x18, 0xc6, 0x10, 0x6e, 0x15, - 0x94, 0x70, 0xc6, 0xb3, 0xf0, 0x6c, 0xea, 0xce, 0x47, 0xb8, 0x5b, 0xa2, 0x87, 0x70, 0x8f, 0xbe, - 0xdf, 0xe5, 0x4d, 0x4a, 0x37, 0x6f, 0x2a, 0x51, 0x6c, 0x18, 0x4f, 0xe9, 0x7b, 0x5a, 0x87, 0x77, - 0xd5, 0xb4, 0x60, 0x64, 0x73, 0x3f, 0x57, 0xa2, 0x58, 0x99, 0xcc, 0x22, 0x00, 0xd0, 0x76, 0xcc, - 0xd0, 0xff, 0xeb, 0xc2, 0xd8, 0x98, 0x47, 0x31, 0x0c, 0xf7, 0xb4, 0xb5, 0xaf, 0xfa, 0xe6, 0x8e, - 0x61, 0x45, 0xa2, 0xb5, 0xfe, 0x65, 0x29, 0x69, 0x25, 0x19, 0xad, 0xc3, 0xa1, 0x7e, 0x26, 0x0f, - 0xff, 0xef, 0x8e, 0xa2, 0x75, 0x5f, 0xb2, 0xe4, 0xb2, 0x6a, 0xf1, 0x35, 0x8d, 0xc9, 0xef, 0x70, - 0xfe, 0x41, 0x1a, 0xdd, 0x39, 0xb8, 0xf2, 0xcc, 0xb6, 0xdf, 0xc0, 0xe8, 0x30, 0xea, 0x9f, 0xf0, - 0x30, 0x0d, 0xfd, 0xfd, 0xe0, 0x3b, 0x77, 0xf1, 0xa7, 0x0b, 0xf7, 0x77, 0xa2, 0x38, 0x5a, 0xb1, - 0xf0, 0x8d, 0xc9, 0xb5, 0x9a, 0xf3, 0xb5, 0xfb, 0xdb, 0x33, 0x0b, 0x66, 0x22, 0x27, 0x3c, 0x8b, - 0x44, 0x95, 0xc5, 0x19, 0xe5, 0xfa, 0x15, 0xc4, 0x26, 0x45, 0x4a, 0x56, 0x7f, 0xfc, 0x0f, 0xf1, - 0xa4, 0x8f, 0xfc, 0x35, 0xf8, 0xfc, 0xb9, 0xd1, 0xf8, 0x31, 0x17, 0x4d, 0x1a, 0xfd, 0xd4, 0x6f, - 0xf9, 0xfa, 0xd1, 0x42, 0xa1, 0xdb, 0xb1, 0x96, 0x7b, 0xfc, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, - 0x7e, 0x53, 0x2d, 0x57, 0x6f, 0x06, 0x00, 0x00, + // 789 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x95, 0xdf, 0x8e, 0xdb, 0x44, + 0x14, 0xc6, 0xed, 0x64, 0xb3, 0x5d, 0x1f, 0xbb, 0xbb, 0x65, 0xda, 0x0b, 0x2b, 0x6a, 0xd9, 0x10, + 0x58, 0x29, 0xdc, 0xd8, 0xed, 0x56, 0x08, 0x44, 0xe9, 0x45, 0x03, 0xa1, 0x8e, 0x5a, 0x41, 0x34, + 0xaa, 0xf6, 0x02, 0xad, 0x88, 0x26, 0xf1, 0xd4, 0x1d, 0x62, 0xcf, 0x58, 0xf6, 0xb8, 0xaa, 0x5f, + 0x09, 0xee, 0x78, 0x0c, 0x9e, 0x83, 0x3b, 0x5e, 0x02, 0xcd, 0x1f, 0x3b, 0xab, 0x56, 0x29, 0xdc, + 0x79, 0xce, 0xf9, 0x9d, 0x6f, 0xbe, 0x99, 0x73, 0x26, 0x81, 0x8b, 0x4c, 0x88, 0x2c, 0xa7, 0x71, + 0x4a, 0x24, 0xa9, 0xa5, 0xa8, 0x68, 0xfc, 0xf6, 0xd1, 0x86, 0x4a, 0xf2, 0x38, 0xa6, 0x5c, 0x32, + 0xd9, 0x46, 0x65, 0x25, 0xa4, 0x40, 0xa1, 0xc1, 0xa2, 0x1e, 0x8b, 0x2c, 0x36, 0xbe, 0x6f, 0x05, + 0x48, 0xc9, 0x62, 0xc2, 0xb9, 0x90, 0x44, 0x32, 0xc1, 0x6b, 0x53, 0xd7, 0x67, 0xf5, 0x6a, 0xd3, + 0xbc, 0x8e, 0x6b, 0x59, 0x35, 0x5b, 0x69, 0xb3, 0xe7, 0xef, 0x67, 0x25, 0x2b, 0x68, 0x2d, 0x49, + 0x51, 0x5a, 0xc0, 0x6e, 0x1b, 0xcb, 0xb6, 0xa4, 0x71, 0x4e, 0x64, 0xce, 0x33, 0x93, 0x99, 0xfe, + 0x0c, 0xfe, 0x8a, 0x54, 0x92, 0xa9, 0xcd, 0x96, 0x29, 0x7a, 0x00, 0x50, 0x56, 0xe2, 0x37, 0xba, + 0x95, 0x6b, 0x96, 0x86, 0x83, 0x89, 0x3b, 0xf3, 0xb0, 0x67, 0x23, 0xcb, 0x14, 0x7d, 0x06, 0x01, + 0x27, 0x05, 0xad, 0x4b, 0xb2, 0xa5, 0x0a, 0x38, 0xd2, 0x80, 0xdf, 0xc7, 0x96, 0xe9, 0xf4, 0x6f, + 0x17, 0x86, 0x2f, 0x68, 0x8b, 0x12, 0x08, 0xca, 0x4e, 0x58, 0xa1, 0xee, 0xc4, 0x9d, 0xf9, 0x97, + 0x17, 0xd1, 0xa1, 0x0b, 0x88, 0x6e, 0xd8, 0xc0, 0x7e, 0x79, 0xc3, 0xd3, 0x53, 0x38, 0x2a, 0x89, + 0x7c, 0x13, 0x0e, 0x26, 0xc3, 0x99, 0x7f, 0xf9, 0xe5, 0x61, 0x85, 0x17, 0xb4, 0x8d, 0x56, 0x44, + 0xbe, 0x59, 0xe4, 0xb4, 0xa0, 0x5c, 0x62, 0x5d, 0x36, 0x7e, 0xa5, 0x4e, 0xd8, 0x07, 0x11, 0x82, + 0xa3, 0x1d, 0xe3, 0xc6, 0x8f, 0x87, 0xf5, 0x37, 0xba, 0x03, 0x03, 0x7b, 0xda, 0x61, 0xe2, 0xe0, + 0x01, 0x4b, 0xd1, 0x3d, 0x38, 0x52, 0x87, 0x0a, 0x87, 0x8a, 0x4a, 0x1c, 0xac, 0x57, 0x73, 0x0f, + 0x6e, 0xb1, 0x74, 0xad, 0x2e, 0x71, 0xba, 0x00, 0x78, 0x56, 0x55, 0xa4, 0xbd, 0x22, 0x79, 0x43, + 0xd1, 0xd7, 0x70, 0xfc, 0x56, 0x7d, 0xd4, 0xa1, 0xab, 0x4d, 0x9e, 0x1f, 0x36, 0xa9, 0x0b, 0xb0, + 0xc5, 0xa7, 0x7f, 0x8c, 0x60, 0x64, 0x24, 0x9e, 0x00, 0xf0, 0x26, 0xcf, 0xd7, 0x3a, 0x11, 0xfa, + 0x13, 0x77, 0x76, 0x7a, 0x39, 0xee, 0x64, 0xba, 0xc6, 0x46, 0x3f, 0x35, 0x79, 0xae, 0xf9, 0xc4, + 0xc1, 0x1e, 0xef, 0x16, 0xe8, 0x02, 0x6e, 0x6f, 0x84, 0xc8, 0x29, 0xe1, 0xb6, 0x5e, 0x9d, 0xee, + 0x24, 0x71, 0x70, 0x60, 0xc3, 0x3d, 0xc6, 0xb8, 0xa4, 0x19, 0xad, 0x2c, 0xd6, 0x1d, 0x39, 0xb0, + 0x61, 0x83, 0x7d, 0x0e, 0x41, 0x2a, 0x9a, 0x4d, 0x4e, 0x2d, 0xa5, 0x2e, 0xc1, 0x4d, 0x1c, 0xec, + 0x9b, 0xa8, 0x81, 0x16, 0x70, 0xd6, 0x4f, 0x99, 0xe5, 0x40, 0xb7, 0xf8, 0x43, 0xd3, 0xaf, 0x3a, + 0x2e, 0x71, 0xf0, 0x69, 0x5f, 0x64, 0x64, 0xbe, 0x03, 0x6f, 0x47, 0x5b, 0x2b, 0x30, 0xd2, 0x02, + 0x0f, 0x3e, 0xda, 0xe1, 0xc4, 0xc1, 0x27, 0x3b, 0xda, 0xf6, 0x4e, 0x6b, 0x59, 0x31, 0x9e, 0x59, + 0x81, 0x4f, 0x6c, 0xbb, 0x7c, 0x13, 0x35, 0xd0, 0x39, 0xc0, 0x26, 0x17, 0x1b, 0x8b, 0xa0, 0x89, + 0x3b, 0x0b, 0xd4, 0xed, 0xa9, 0x98, 0x01, 0x9e, 0xc2, 0x59, 0x46, 0xc5, 0xba, 0x14, 0x8c, 0x4b, + 0x4b, 0x9d, 0x68, 0x27, 0x77, 0x3b, 0x27, 0xaa, 0xe5, 0xd1, 0x4b, 0x22, 0x5f, 0xf2, 0x2c, 0x71, + 0xf0, 0xed, 0x8c, 0x8a, 0x95, 0x82, 0xbb, 0x9b, 0x08, 0xcc, 0x1b, 0xb7, 0xb5, 0xc7, 0xba, 0x76, + 0x72, 0xf8, 0x14, 0x0b, 0x4d, 0x2b, 0x9b, 0xa6, 0xce, 0xc8, 0x3c, 0x07, 0x9f, 0xa8, 0x89, 0xb2, + 0x2a, 0x9e, 0x56, 0xf9, 0xe2, 0xb0, 0xca, 0x7e, 0xfc, 0x12, 0x07, 0x03, 0xd9, 0x0f, 0x63, 0x08, + 0xb7, 0x0a, 0x4a, 0x38, 0xe3, 0x59, 0x78, 0x3a, 0x71, 0x67, 0x23, 0xdc, 0x2d, 0xd1, 0x43, 0xb8, + 0x47, 0xdf, 0x6d, 0xf3, 0x26, 0xa5, 0xeb, 0xd7, 0x95, 0x28, 0xd6, 0x8c, 0xa7, 0xf4, 0x1d, 0xad, + 0xc3, 0xbb, 0x6a, 0x5a, 0x30, 0xb2, 0xb9, 0x1f, 0x2b, 0x51, 0x2c, 0x4d, 0x66, 0x1e, 0x00, 0x68, + 0x3b, 0x66, 0xe8, 0xff, 0x71, 0xe1, 0xd8, 0x98, 0x47, 0x31, 0x0c, 0x77, 0xb4, 0xb5, 0xaf, 0xfa, + 0xe3, 0x1d, 0xc3, 0x8a, 0x44, 0x2b, 0xfd, 0xcb, 0x52, 0xd2, 0x4a, 0x32, 0x5a, 0x87, 0x43, 0xfd, + 0x4c, 0x1e, 0xfe, 0xd7, 0x1d, 0x45, 0xab, 0xbe, 0x64, 0xc1, 0x65, 0xd5, 0xe2, 0x1b, 0x1a, 0xe3, + 0x5f, 0xe1, 0xec, 0xbd, 0x34, 0xba, 0xb3, 0x77, 0xe5, 0x99, 0x6d, 0xbf, 0x82, 0xd1, 0x7e, 0xd4, + 0xff, 0xc7, 0xc3, 0x34, 0xf4, 0xb7, 0x83, 0x6f, 0xdc, 0xf9, 0x9f, 0x2e, 0xdc, 0xdf, 0x8a, 0xe2, + 0x60, 0xc5, 0xdc, 0x37, 0x26, 0x57, 0x6a, 0xce, 0x57, 0xee, 0x2f, 0xcf, 0x2c, 0x98, 0x89, 0x9c, + 0xf0, 0x2c, 0x12, 0x55, 0x16, 0x67, 0x94, 0xeb, 0x57, 0x10, 0x9b, 0x14, 0x29, 0x59, 0xfd, 0xe1, + 0x3f, 0xc4, 0x93, 0x3e, 0xf2, 0xfb, 0xe0, 0xd3, 0xe7, 0x46, 0xe3, 0xfb, 0x5c, 0x34, 0x69, 0xf4, + 0x43, 0xbf, 0xe5, 0xd5, 0xa3, 0xb9, 0x42, 0xff, 0xea, 0x80, 0x6b, 0x0d, 0x5c, 0xf7, 0xc0, 0xf5, + 0x95, 0xd1, 0xda, 0x1c, 0xeb, 0xfd, 0x1e, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x2c, 0x6d, 0x30, + 0xe2, 0x90, 0x06, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/datastore/v1beta3/query.pb.go b/vendor/google.golang.org/genproto/googleapis/datastore/v1beta3/query.pb.go index 7c606ca..b2f2ce0 100644 --- a/vendor/google.golang.org/genproto/googleapis/datastore/v1beta3/query.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/datastore/v1beta3/query.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/datastore/v1beta3/query.proto -// DO NOT EDIT! package datastore @@ -161,7 +160,7 @@ const ( // The query is finished, but there may be more results after the end // cursor. QueryResultBatch_MORE_RESULTS_AFTER_CURSOR QueryResultBatch_MoreResultsType = 4 - // The query has been exhausted. + // The query is finished, and there are no more results. QueryResultBatch_NO_MORE_RESULTS QueryResultBatch_MoreResultsType = 3 ) @@ -884,87 +883,88 @@ func init() { func init() { proto.RegisterFile("google/datastore/v1beta3/query.proto", fileDescriptor2) } var fileDescriptor2 = []byte{ - // 1312 bytes of a gzipped FileDescriptorProto + // 1323 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xcb, 0x6e, 0xdb, 0x46, - 0x17, 0x36, 0x29, 0xc9, 0x97, 0xa3, 0x1b, 0x33, 0xf9, 0xff, 0x94, 0x71, 0x2e, 0x75, 0x88, 0xa4, - 0x51, 0x50, 0x54, 0x82, 0x15, 0x04, 0x0d, 0xd2, 0x76, 0xa1, 0x0b, 0x6d, 0xab, 0x91, 0x45, 0x65, - 0x24, 0x1b, 0x48, 0x91, 0x82, 0xa0, 0xa5, 0xb1, 0xc2, 0x86, 0x22, 0x99, 0xe1, 0x38, 0x89, 0xdf, - 0xa2, 0x9b, 0x02, 0x7d, 0x86, 0x3e, 0x45, 0x17, 0xdd, 0x76, 0xdb, 0x6d, 0x1f, 0xa0, 0x9b, 0xbe, - 0x41, 0x0b, 0xce, 0x0c, 0x75, 0x73, 0x14, 0xb9, 0x40, 0x76, 0x9a, 0x33, 0xdf, 0xf7, 0x9d, 0x99, - 0x8f, 0x67, 0x66, 0x8e, 0xe0, 0xee, 0x28, 0x08, 0x46, 0x1e, 0xa9, 0x0c, 0x1d, 0xe6, 0x44, 0x2c, - 0xa0, 0xa4, 0xf2, 0x66, 0xf7, 0x84, 0x30, 0xe7, 0x61, 0xe5, 0xf5, 0x19, 0xa1, 0xe7, 0xe5, 0x90, - 0x06, 0x2c, 0x40, 0xba, 0x40, 0x95, 0x27, 0xa8, 0xb2, 0x44, 0x6d, 0xdf, 0x94, 0x7c, 0x27, 0x74, - 0x2b, 0x8e, 0xef, 0x07, 0xcc, 0x61, 0x6e, 0xe0, 0x47, 0x82, 0xb7, 0x7d, 0x6f, 0xa9, 0x3a, 0xf1, - 0x99, 0xcb, 0xa4, 0xfc, 0xf6, 0x6d, 0x09, 0xe3, 0xa3, 0x93, 0xb3, 0xd3, 0xca, 0x5b, 0xea, 0x84, - 0x21, 0xa1, 0x89, 0x8c, 0x4c, 0x5f, 0x61, 0xe7, 0x21, 0xa9, 0x78, 0x0e, 0xf3, 0xfc, 0x91, 0x98, - 0x31, 0x7e, 0x57, 0x20, 0x67, 0x72, 0x29, 0x4c, 0xa2, 0x33, 0x8f, 0xa1, 0xc7, 0xb0, 0x2e, 0xa4, - 0x75, 0x65, 0x47, 0x29, 0x65, 0xab, 0x3b, 0xe5, 0x65, 0x4b, 0x2f, 0x4b, 0x9e, 0xc4, 0x23, 0x1d, - 0x36, 0xde, 0x10, 0x1a, 0xb9, 0x81, 0xaf, 0xa7, 0x77, 0x94, 0x52, 0x0a, 0x27, 0x43, 0x74, 0x0d, - 0xd6, 0x07, 0x67, 0x34, 0x0a, 0xa8, 0x9e, 0xda, 0x51, 0x4a, 0x39, 0x2c, 0x47, 0xc6, 0x33, 0x00, - 0x91, 0xb5, 0x7f, 0x1e, 0x12, 0x74, 0x03, 0x3e, 0xc1, 0x66, 0xef, 0xa8, 0xdd, 0xb7, 0xfb, 0xcf, - 0xbb, 0xa6, 0x7d, 0xd4, 0xe9, 0x75, 0xcd, 0x46, 0x6b, 0xaf, 0x65, 0x36, 0xb5, 0x35, 0xb4, 0x09, - 0xe9, 0xbd, 0xa3, 0x76, 0x5b, 0x53, 0x50, 0x01, 0xa0, 0x8b, 0xad, 0x6f, 0xcd, 0x46, 0xbf, 0x65, - 0x75, 0x34, 0x15, 0xe5, 0x60, 0xf3, 0xa9, 0xf9, 0xdc, 0xb6, 0x3a, 0xed, 0xe7, 0x5a, 0xca, 0xf8, - 0x33, 0x05, 0x99, 0x67, 0xb1, 0xf1, 0xa8, 0x09, 0x10, 0xd2, 0xe0, 0x07, 0x32, 0x88, 0xfd, 0xd4, - 0xd5, 0x9d, 0x54, 0x29, 0x5b, 0xbd, 0xbb, 0x7c, 0x33, 0xdd, 0x09, 0x16, 0xcf, 0xf0, 0xd0, 0xd7, - 0x90, 0x7e, 0xe5, 0xfa, 0x43, 0x3d, 0xc5, 0xf9, 0xa5, 0xe5, 0xfc, 0xa7, 0xae, 0x3f, 0x34, 0xdf, - 0x85, 0x94, 0x44, 0xf1, 0x96, 0x31, 0x67, 0xc5, 0x66, 0x9e, 0xba, 0x1e, 0x23, 0x94, 0x3b, 0xf2, - 0x41, 0x33, 0xf7, 0x38, 0x0e, 0x4b, 0x3c, 0xfa, 0x06, 0x32, 0x01, 0x1d, 0x12, 0xaa, 0x67, 0x78, - 0xe2, 0xfb, 0x1f, 0x5c, 0x78, 0x48, 0x28, 0x3b, 0xb7, 0x62, 0x38, 0x16, 0x2c, 0xd4, 0x86, 0xec, - 0xd0, 0x8d, 0x98, 0xeb, 0x0f, 0x98, 0x1d, 0xf8, 0xfa, 0x3a, 0x17, 0xf9, 0x7c, 0xb5, 0x08, 0x26, - 0xa7, 0x84, 0x12, 0x7f, 0x40, 0x30, 0x24, 0x7c, 0xcb, 0x47, 0x77, 0x20, 0x17, 0x31, 0x87, 0x32, - 0x5b, 0x7e, 0xc5, 0x0d, 0xfe, 0x15, 0xb3, 0x3c, 0xd6, 0xe0, 0x21, 0x74, 0x0b, 0x80, 0xf8, 0xc3, - 0x04, 0xb0, 0xc9, 0x01, 0x5b, 0xc4, 0x1f, 0xca, 0xe9, 0x6b, 0xb0, 0x1e, 0x9c, 0x9e, 0x46, 0x84, - 0xe9, 0xb0, 0xa3, 0x94, 0x32, 0x58, 0x8e, 0xd0, 0x2e, 0x64, 0x3c, 0x77, 0xec, 0x32, 0x3d, 0xc7, - 0xfd, 0xb9, 0x91, 0xac, 0x30, 0x29, 0xe4, 0x72, 0xcb, 0x67, 0x0f, 0xab, 0xc7, 0x8e, 0x77, 0x46, - 0xb0, 0x40, 0x1a, 0x77, 0xa1, 0x30, 0xef, 0x35, 0x42, 0x90, 0xf6, 0x9d, 0x31, 0xe1, 0x05, 0xbb, - 0x85, 0xf9, 0x6f, 0xe3, 0x3e, 0x5c, 0xb9, 0xb0, 0xa7, 0x09, 0x50, 0x9d, 0x01, 0x1e, 0x01, 0x4c, - 0x3f, 0x3d, 0xda, 0x87, 0xcd, 0x50, 0xd2, 0x64, 0xfd, 0xff, 0x27, 0xd3, 0x26, 0x64, 0xe3, 0x6f, - 0x05, 0xf2, 0x73, 0x5f, 0xe6, 0xa3, 0x49, 0x23, 0x0b, 0xb6, 0x86, 0x2e, 0x9d, 0xd4, 0xb5, 0x52, - 0x2a, 0x54, 0x77, 0x2f, 0x59, 0x1e, 0xe5, 0x66, 0x42, 0xc4, 0x53, 0x0d, 0xc3, 0x84, 0xad, 0x49, - 0x1c, 0x5d, 0x87, 0xff, 0x37, 0x5b, 0x58, 0x9c, 0xae, 0x85, 0x33, 0x98, 0x87, 0xad, 0x5a, 0xaf, - 0x61, 0x76, 0x9a, 0xad, 0xce, 0xbe, 0x38, 0x88, 0x4d, 0x73, 0x32, 0x56, 0x8d, 0xdf, 0x14, 0x58, - 0x17, 0x55, 0x8c, 0x8e, 0x41, 0x1b, 0x04, 0xe3, 0x30, 0x88, 0x5c, 0x46, 0x6c, 0x79, 0x02, 0xc4, - 0x9e, 0x1f, 0x2c, 0x5f, 0x69, 0x23, 0x61, 0x08, 0x91, 0x83, 0x35, 0x5c, 0x1c, 0xcc, 0x87, 0x50, - 0x0f, 0x8a, 0x89, 0x0d, 0x89, 0xac, 0xca, 0x65, 0x4b, 0xab, 0x0d, 0x98, 0xa8, 0x16, 0xc2, 0xb9, - 0x48, 0x3d, 0x0f, 0x59, 0xa1, 0x65, 0xc7, 0xd7, 0xa3, 0xf1, 0xab, 0x02, 0xc5, 0x85, 0xa5, 0xa0, - 0x3a, 0xa8, 0x41, 0xc8, 0x77, 0x50, 0xa8, 0x56, 0x2f, 0xbd, 0x83, 0xb2, 0x15, 0x12, 0xea, 0xb0, - 0x80, 0x62, 0x35, 0x08, 0xd1, 0x13, 0xd8, 0x10, 0x69, 0x22, 0x79, 0x19, 0xad, 0xbe, 0x0c, 0x12, - 0x82, 0xf1, 0x05, 0x6c, 0x26, 0x5a, 0x48, 0x87, 0xff, 0x59, 0x5d, 0x13, 0xd7, 0xfa, 0x16, 0x5e, - 0xf8, 0x3e, 0x1b, 0x90, 0xaa, 0x75, 0x9a, 0x9a, 0x62, 0xfc, 0xa5, 0x42, 0x61, 0x7e, 0xdb, 0x1f, - 0xaf, 0xfa, 0x6a, 0xdc, 0x8a, 0x4b, 0x97, 0xdd, 0xfb, 0x9c, 0x78, 0x04, 0x99, 0x37, 0xf1, 0x89, - 0xe6, 0xaf, 0x41, 0xb6, 0xfa, 0xe9, 0x72, 0x15, 0x79, 0xf0, 0x39, 0xda, 0xf8, 0x49, 0xb9, 0x94, - 0x0b, 0x79, 0xd8, 0x6a, 0x9b, 0xbd, 0x9e, 0xdd, 0x3f, 0xa8, 0x75, 0x34, 0x05, 0x5d, 0x03, 0x34, - 0x19, 0xda, 0x16, 0xb6, 0xcd, 0x67, 0x47, 0xb5, 0xb6, 0xa6, 0x22, 0x0d, 0x72, 0xfb, 0xd8, 0xac, - 0xf5, 0x4d, 0x2c, 0x90, 0xa9, 0xb8, 0xf2, 0x67, 0x23, 0x53, 0x70, 0x1a, 0x6d, 0x41, 0x46, 0xfc, - 0xcc, 0xc4, 0xbc, 0x83, 0x5a, 0xcf, 0xae, 0x75, 0x1a, 0x66, 0xaf, 0x6f, 0x61, 0x2d, 0x6b, 0xfc, - 0xa3, 0xc2, 0xe6, 0xfe, 0x6b, 0x4f, 0xbc, 0x3a, 0x77, 0x20, 0xc7, 0xdf, 0x7d, 0x3b, 0x62, 0xd4, - 0xf5, 0x47, 0xf2, 0x4e, 0xca, 0xf2, 0x58, 0x8f, 0x87, 0xd0, 0x3d, 0x28, 0x38, 0x9e, 0x17, 0xbc, - 0xb5, 0x3d, 0x97, 0x11, 0xea, 0x78, 0x11, 0x77, 0x73, 0x13, 0xe7, 0x79, 0xb4, 0x2d, 0x83, 0xe8, - 0x05, 0x14, 0xe2, 0x0b, 0x6a, 0x68, 0x9f, 0xb8, 0xfe, 0xd0, 0xf5, 0x47, 0x91, 0x7c, 0x0a, 0x1e, - 0x2d, 0xb7, 0x2b, 0x59, 0x45, 0xb9, 0x13, 0x13, 0xeb, 0x92, 0x67, 0xfa, 0x8c, 0x9e, 0xe3, 0xbc, - 0x3f, 0x1b, 0x43, 0x2f, 0xe0, 0x2a, 0x2f, 0x55, 0x37, 0xf0, 0x1d, 0x6f, 0x9a, 0x22, 0xbd, 0xea, - 0xa1, 0x48, 0x52, 0x74, 0x1d, 0xea, 0x8c, 0x49, 0x5c, 0xa4, 0x68, 0xaa, 0x93, 0xa8, 0x6f, 0x8f, - 0x01, 0x5d, 0x5c, 0x02, 0xd2, 0x20, 0xf5, 0x8a, 0x9c, 0x4b, 0x4b, 0xe2, 0x9f, 0xa8, 0x96, 0x54, - 0x82, 0xba, 0xaa, 0x24, 0x2f, 0xe6, 0x15, 0xcc, 0x27, 0xea, 0x63, 0xc5, 0x78, 0x07, 0x57, 0x2e, - 0xcc, 0xa3, 0x2f, 0xe7, 0xb5, 0x57, 0x55, 0xd9, 0xc1, 0x9a, 0x54, 0x44, 0xfa, 0x7c, 0xb7, 0x72, - 0xb0, 0x96, 0xf4, 0x2b, 0x75, 0x0d, 0x0a, 0x61, 0xa2, 0x2f, 0x2e, 0x8b, 0x3f, 0xd2, 0xa0, 0xf1, - 0xbc, 0xa2, 0x8f, 0xa9, 0x3b, 0x6c, 0xf0, 0x12, 0xdd, 0x87, 0x62, 0xf4, 0xca, 0x0d, 0x43, 0x32, - 0xb4, 0x29, 0x0f, 0x47, 0xfa, 0x3a, 0x7f, 0xf5, 0x0a, 0x32, 0x2c, 0xc0, 0x51, 0x5c, 0x09, 0x09, - 0x70, 0xae, 0x3f, 0xca, 0xcb, 0xa8, 0x7c, 0x3c, 0x6d, 0x40, 0xa2, 0xc5, 0x92, 0x72, 0x3c, 0xb5, - 0xbc, 0x8d, 0x76, 0x57, 0xb6, 0x67, 0x9c, 0x52, 0x9e, 0xf6, 0x59, 0x58, 0x23, 0x33, 0x13, 0xbc, - 0xf3, 0x3a, 0x84, 0xc2, 0x5c, 0x82, 0xe4, 0x86, 0xfa, 0xec, 0x72, 0xe2, 0x38, 0x3f, 0xab, 0x18, - 0x2d, 0xf4, 0x02, 0xe9, 0xc5, 0x5e, 0xe0, 0x7b, 0xc8, 0x8d, 0x03, 0x4a, 0x26, 0xb9, 0x32, 0x7c, - 0x23, 0x4f, 0x96, 0xe7, 0x5a, 0x34, 0xb8, 0x7c, 0x18, 0x50, 0x22, 0x93, 0xf1, 0x1d, 0x65, 0xc7, - 0xd3, 0x00, 0x7a, 0x00, 0x5a, 0xe4, 0x3b, 0x61, 0xf4, 0x32, 0x60, 0x76, 0xd2, 0x8f, 0x6e, 0xf0, - 0x7e, 0xb4, 0x98, 0xc4, 0x8f, 0x45, 0xd8, 0xf8, 0x59, 0x81, 0xe2, 0x82, 0x16, 0xba, 0x03, 0xb7, - 0x0e, 0x2d, 0x6c, 0xda, 0xa2, 0x15, 0xed, 0xbd, 0xaf, 0x17, 0xd5, 0x20, 0xd7, 0xb1, 0xfa, 0xf6, - 0x5e, 0xab, 0xd3, 0xea, 0x1d, 0x98, 0x4d, 0x4d, 0x41, 0x37, 0x41, 0x9f, 0x23, 0xd5, 0xf6, 0xe2, - 0x5b, 0xa4, 0xdd, 0x3a, 0x6c, 0xf5, 0x35, 0x15, 0xdd, 0x82, 0xeb, 0xef, 0x99, 0x6d, 0x1c, 0xe1, - 0x9e, 0x85, 0xb5, 0x34, 0xba, 0x0a, 0xc5, 0x8e, 0x65, 0xcf, 0x22, 0xb4, 0x54, 0xfd, 0x47, 0x05, - 0x6e, 0x0e, 0x82, 0xf1, 0x52, 0x53, 0xea, 0x20, 0xca, 0x3d, 0xee, 0x93, 0xba, 0xca, 0x77, 0x35, - 0x89, 0x1b, 0x05, 0x9e, 0xe3, 0x8f, 0xca, 0x01, 0x1d, 0x55, 0x46, 0xc4, 0xe7, 0x5d, 0x54, 0x45, - 0x4c, 0x39, 0xa1, 0x1b, 0x5d, 0xfc, 0x1b, 0xf1, 0xd5, 0x24, 0xf2, 0x8b, 0x7a, 0x7b, 0x5f, 0x68, - 0x34, 0xbc, 0xe0, 0x6c, 0x58, 0x6e, 0x4e, 0x32, 0x1e, 0xef, 0xd6, 0x63, 0xe8, 0xc9, 0x3a, 0x97, - 0x7b, 0xf8, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4a, 0xc8, 0xc3, 0x34, 0xf2, 0x0c, 0x00, 0x00, + 0x14, 0x35, 0xa9, 0x87, 0xa5, 0xab, 0x17, 0x33, 0x69, 0x53, 0xc6, 0x79, 0xd4, 0x21, 0x92, 0x46, + 0x41, 0x51, 0x09, 0x56, 0x10, 0x34, 0x48, 0xdb, 0x85, 0x1e, 0xb4, 0xad, 0x46, 0x16, 0x95, 0x91, + 0x6c, 0x20, 0x85, 0x0b, 0x82, 0x96, 0xc6, 0x0a, 0x1b, 0x8a, 0x64, 0xc8, 0x71, 0x12, 0x7f, 0x48, + 0x81, 0x7e, 0x43, 0x77, 0xfd, 0x83, 0x2e, 0xba, 0x2a, 0xd0, 0x6d, 0xb7, 0xfd, 0x80, 0x6e, 0xfa, + 0x07, 0x2d, 0x38, 0x33, 0xd4, 0xcb, 0x51, 0xe4, 0x02, 0xd9, 0x69, 0xee, 0x9c, 0x73, 0xee, 0xcc, + 0xe1, 0x9d, 0x99, 0x2b, 0xb8, 0x3b, 0xf6, 0xbc, 0xb1, 0x43, 0xaa, 0x23, 0x8b, 0x5a, 0x21, 0xf5, + 0x02, 0x52, 0x7d, 0xbd, 0x73, 0x42, 0xa8, 0xf5, 0xb0, 0xfa, 0xea, 0x8c, 0x04, 0xe7, 0x15, 0x3f, + 0xf0, 0xa8, 0x87, 0x54, 0x8e, 0xaa, 0x4c, 0x51, 0x15, 0x81, 0xda, 0xba, 0x29, 0xf8, 0x96, 0x6f, + 0x57, 0x2d, 0xd7, 0xf5, 0xa8, 0x45, 0x6d, 0xcf, 0x0d, 0x39, 0x6f, 0xeb, 0xde, 0x4a, 0x75, 0xe2, + 0x52, 0x9b, 0x0a, 0xf9, 0xad, 0xdb, 0x02, 0xc6, 0x46, 0x27, 0x67, 0xa7, 0xd5, 0x37, 0x81, 0xe5, + 0xfb, 0x24, 0x88, 0x65, 0x44, 0xfa, 0x2a, 0x3d, 0xf7, 0x49, 0xd5, 0xb1, 0xa8, 0xe3, 0x8e, 0xf9, + 0x8c, 0xf6, 0x87, 0x04, 0x79, 0x9d, 0x49, 0x61, 0x12, 0x9e, 0x39, 0x14, 0x3d, 0x86, 0x34, 0x97, + 0x56, 0xa5, 0x6d, 0xa9, 0x9c, 0xab, 0x6d, 0x57, 0x56, 0x2d, 0xbd, 0x22, 0x78, 0x02, 0x8f, 0x54, + 0xd8, 0x7c, 0x4d, 0x82, 0xd0, 0xf6, 0x5c, 0x35, 0xb9, 0x2d, 0x95, 0x13, 0x38, 0x1e, 0xa2, 0x6b, + 0x90, 0x1e, 0x9e, 0x05, 0xa1, 0x17, 0xa8, 0x89, 0x6d, 0xa9, 0x9c, 0xc7, 0x62, 0xa4, 0x3d, 0x03, + 0xe0, 0x59, 0x07, 0xe7, 0x3e, 0x41, 0x37, 0xe0, 0x13, 0xac, 0xf7, 0x0f, 0x3b, 0x03, 0x73, 0xf0, + 0xbc, 0xa7, 0x9b, 0x87, 0xdd, 0x7e, 0x4f, 0x6f, 0xb6, 0x77, 0xdb, 0x7a, 0x4b, 0xd9, 0x40, 0x19, + 0x48, 0xee, 0x1e, 0x76, 0x3a, 0x8a, 0x84, 0x8a, 0x00, 0x3d, 0x6c, 0x7c, 0xab, 0x37, 0x07, 0x6d, + 0xa3, 0xab, 0xc8, 0x28, 0x0f, 0x99, 0xa7, 0xfa, 0x73, 0xd3, 0xe8, 0x76, 0x9e, 0x2b, 0x09, 0xed, + 0xaf, 0x04, 0xa4, 0x9e, 0x45, 0xc6, 0xa3, 0x16, 0x80, 0x1f, 0x78, 0x3f, 0x90, 0x61, 0xe4, 0xa7, + 0x2a, 0x6f, 0x27, 0xca, 0xb9, 0xda, 0xdd, 0xd5, 0x9b, 0xe9, 0x4d, 0xb1, 0x78, 0x8e, 0x87, 0xbe, + 0x86, 0xe4, 0x4b, 0xdb, 0x1d, 0xa9, 0x09, 0xc6, 0x2f, 0xaf, 0xe6, 0x3f, 0xb5, 0xdd, 0x91, 0xfe, + 0xd6, 0x0f, 0x48, 0x18, 0x6d, 0x19, 0x33, 0x56, 0x64, 0xe6, 0xa9, 0xed, 0x50, 0x12, 0x30, 0x47, + 0xde, 0x6b, 0xe6, 0x2e, 0xc3, 0x61, 0x81, 0x47, 0xdf, 0x40, 0xca, 0x0b, 0x46, 0x24, 0x50, 0x53, + 0x2c, 0xf1, 0xfd, 0xf7, 0x2e, 0xdc, 0x27, 0x01, 0x3d, 0x37, 0x22, 0x38, 0xe6, 0x2c, 0xd4, 0x81, + 0xdc, 0xc8, 0x0e, 0xa9, 0xed, 0x0e, 0xa9, 0xe9, 0xb9, 0x6a, 0x9a, 0x89, 0x7c, 0xbe, 0x5e, 0x04, + 0x93, 0x53, 0x12, 0x10, 0x77, 0x48, 0x30, 0xc4, 0x7c, 0xc3, 0x45, 0x77, 0x20, 0x1f, 0x52, 0x2b, + 0xa0, 0xa6, 0xf8, 0x8a, 0x9b, 0xec, 0x2b, 0xe6, 0x58, 0xac, 0xc9, 0x42, 0xe8, 0x16, 0x00, 0x71, + 0x47, 0x31, 0x20, 0xc3, 0x00, 0x59, 0xe2, 0x8e, 0xc4, 0xf4, 0x35, 0x48, 0x7b, 0xa7, 0xa7, 0x21, + 0xa1, 0x2a, 0x6c, 0x4b, 0xe5, 0x14, 0x16, 0x23, 0xb4, 0x03, 0x29, 0xc7, 0x9e, 0xd8, 0x54, 0xcd, + 0x33, 0x7f, 0x6e, 0xc4, 0x2b, 0x8c, 0x0b, 0xb9, 0xd2, 0x76, 0xe9, 0xc3, 0xda, 0x91, 0xe5, 0x9c, + 0x11, 0xcc, 0x91, 0xda, 0x5d, 0x28, 0x2e, 0x7a, 0x8d, 0x10, 0x24, 0x5d, 0x6b, 0x42, 0x58, 0xc1, + 0x66, 0x31, 0xfb, 0xad, 0xdd, 0x87, 0x2b, 0x17, 0xf6, 0x34, 0x05, 0xca, 0x73, 0xc0, 0x43, 0x80, + 0xd9, 0xa7, 0x47, 0x7b, 0x90, 0xf1, 0x05, 0x4d, 0xd4, 0xff, 0xff, 0x32, 0x6d, 0x4a, 0xd6, 0xfe, + 0x91, 0xa0, 0xb0, 0xf0, 0x65, 0x3e, 0x98, 0x34, 0x32, 0x20, 0x3b, 0xb2, 0x83, 0x69, 0x5d, 0x4b, + 0xe5, 0x62, 0x6d, 0xe7, 0x92, 0xe5, 0x51, 0x69, 0xc5, 0x44, 0x3c, 0xd3, 0xd0, 0x74, 0xc8, 0x4e, + 0xe3, 0xe8, 0x3a, 0x7c, 0xdc, 0x6a, 0x63, 0x7e, 0xba, 0x96, 0xce, 0x60, 0x01, 0xb2, 0xf5, 0x7e, + 0x53, 0xef, 0xb6, 0xda, 0xdd, 0x3d, 0x7e, 0x10, 0x5b, 0xfa, 0x74, 0x2c, 0x6b, 0xbf, 0x49, 0x90, + 0xe6, 0x55, 0x8c, 0x8e, 0x40, 0x19, 0x7a, 0x13, 0xdf, 0x0b, 0x6d, 0x4a, 0x4c, 0x71, 0x02, 0xf8, + 0x9e, 0x1f, 0xac, 0x5e, 0x69, 0x33, 0x66, 0x70, 0x91, 0xfd, 0x0d, 0x5c, 0x1a, 0x2e, 0x86, 0x50, + 0x1f, 0x4a, 0xb1, 0x0d, 0xb1, 0xac, 0xcc, 0x64, 0xcb, 0xeb, 0x0d, 0x98, 0xaa, 0x16, 0xfd, 0x85, + 0x48, 0xa3, 0x00, 0x39, 0xae, 0x65, 0x46, 0xd7, 0xa3, 0xf6, 0xab, 0x04, 0xa5, 0xa5, 0xa5, 0xa0, + 0x06, 0xc8, 0x9e, 0xcf, 0x76, 0x50, 0xac, 0xd5, 0x2e, 0xbd, 0x83, 0x8a, 0xe1, 0x93, 0xc0, 0xa2, + 0x5e, 0x80, 0x65, 0xcf, 0x47, 0x4f, 0x60, 0x93, 0xa7, 0x09, 0xc5, 0x65, 0xb4, 0xfe, 0x32, 0x88, + 0x09, 0xda, 0x17, 0x90, 0x89, 0xb5, 0x90, 0x0a, 0x1f, 0x19, 0x3d, 0x1d, 0xd7, 0x07, 0x06, 0x5e, + 0xfa, 0x3e, 0x9b, 0x90, 0xa8, 0x77, 0x5b, 0x8a, 0xa4, 0xfd, 0x2d, 0x43, 0x71, 0x71, 0xdb, 0x1f, + 0xae, 0xfa, 0xea, 0xcc, 0x8a, 0x4b, 0x97, 0xdd, 0xbb, 0x9c, 0x78, 0x04, 0xa9, 0xd7, 0xd1, 0x89, + 0x66, 0xaf, 0x41, 0xae, 0xf6, 0xe9, 0x6a, 0x15, 0x71, 0xf0, 0x19, 0x5a, 0xfb, 0x51, 0xba, 0x94, + 0x0b, 0x05, 0xc8, 0x76, 0xf4, 0x7e, 0xdf, 0x1c, 0xec, 0xd7, 0xbb, 0x8a, 0x84, 0xae, 0x01, 0x9a, + 0x0e, 0x4d, 0x03, 0x9b, 0xfa, 0xb3, 0xc3, 0x7a, 0x47, 0x91, 0x91, 0x02, 0xf9, 0x3d, 0xac, 0xd7, + 0x07, 0x3a, 0xe6, 0xc8, 0x44, 0x54, 0xf9, 0xf3, 0x91, 0x19, 0x38, 0x89, 0xb2, 0x90, 0xe2, 0x3f, + 0x53, 0x11, 0x6f, 0xbf, 0xde, 0x37, 0xeb, 0xdd, 0xa6, 0xde, 0x1f, 0x18, 0x58, 0xc9, 0x69, 0xff, + 0xca, 0x90, 0xd9, 0x7b, 0xe5, 0xf0, 0x57, 0xe7, 0x0e, 0xe4, 0xd9, 0xbb, 0x6f, 0x86, 0x34, 0xb0, + 0xdd, 0xb1, 0xb8, 0x93, 0x72, 0x2c, 0xd6, 0x67, 0x21, 0x74, 0x0f, 0x8a, 0x96, 0xe3, 0x78, 0x6f, + 0x4c, 0xc7, 0xa6, 0x24, 0xb0, 0x9c, 0x90, 0xb9, 0x99, 0xc1, 0x05, 0x16, 0xed, 0x88, 0x20, 0x3a, + 0x86, 0x62, 0x74, 0x41, 0x8d, 0xcc, 0x13, 0xdb, 0x1d, 0xd9, 0xee, 0x38, 0x14, 0x4f, 0xc1, 0xa3, + 0xd5, 0x76, 0xc5, 0xab, 0xa8, 0x74, 0x23, 0x62, 0x43, 0xf0, 0x74, 0x97, 0x06, 0xe7, 0xb8, 0xe0, + 0xce, 0xc7, 0xd0, 0x31, 0x5c, 0x65, 0xa5, 0x6a, 0x7b, 0xae, 0xe5, 0xcc, 0x52, 0x24, 0xd7, 0x3d, + 0x14, 0x71, 0x8a, 0x9e, 0x15, 0x58, 0x13, 0x12, 0x15, 0x29, 0x9a, 0xe9, 0xc4, 0xea, 0x5b, 0x13, + 0x40, 0x17, 0x97, 0x80, 0x14, 0x48, 0xbc, 0x24, 0xe7, 0xc2, 0x92, 0xe8, 0x27, 0xaa, 0xc7, 0x95, + 0x20, 0xaf, 0x2b, 0xc9, 0x8b, 0x79, 0x39, 0xf3, 0x89, 0xfc, 0x58, 0xd2, 0xde, 0xc2, 0x95, 0x0b, + 0xf3, 0xe8, 0xcb, 0x45, 0xed, 0x75, 0x55, 0xb6, 0xbf, 0x21, 0x14, 0x91, 0xba, 0xd8, 0xad, 0xec, + 0x6f, 0xc4, 0xfd, 0x4a, 0x43, 0x81, 0xa2, 0x1f, 0xeb, 0xf3, 0xcb, 0xe2, 0xcf, 0x24, 0x28, 0x2c, + 0x2f, 0xef, 0x63, 0x1a, 0x16, 0x1d, 0xbe, 0x40, 0xf7, 0xa1, 0x14, 0xbe, 0xb4, 0x7d, 0x9f, 0x8c, + 0xcc, 0x80, 0x85, 0x43, 0x35, 0xcd, 0x5e, 0xbd, 0xa2, 0x08, 0x73, 0x70, 0x18, 0x55, 0x42, 0x0c, + 0x5c, 0xe8, 0x8f, 0x0a, 0x22, 0x2a, 0x1e, 0x4f, 0x13, 0x10, 0x6f, 0xb1, 0x84, 0x1c, 0x4b, 0x2d, + 0x6e, 0xa3, 0x9d, 0xb5, 0xed, 0x19, 0xa3, 0x54, 0x66, 0x7d, 0x16, 0x56, 0xc8, 0xdc, 0x04, 0xeb, + 0xbc, 0x0e, 0xa0, 0xb8, 0x90, 0x20, 0xbe, 0xa1, 0x3e, 0xbb, 0x9c, 0x38, 0x2e, 0xcc, 0x2b, 0x86, + 0x4b, 0xbd, 0x40, 0x72, 0xb9, 0x17, 0xf8, 0x1e, 0xf2, 0x13, 0x2f, 0x20, 0xd3, 0x5c, 0x29, 0xb6, + 0x91, 0x27, 0xab, 0x73, 0x2d, 0x1b, 0x5c, 0x39, 0xf0, 0x02, 0x22, 0x92, 0xb1, 0x1d, 0xe5, 0x26, + 0xb3, 0x00, 0x7a, 0x00, 0x4a, 0xe8, 0x5a, 0x7e, 0xf8, 0xc2, 0xa3, 0x66, 0xdc, 0x8f, 0x6e, 0xb2, + 0x7e, 0xb4, 0x14, 0xc7, 0x8f, 0x78, 0x58, 0xfb, 0x49, 0x82, 0xd2, 0x92, 0x16, 0xba, 0x03, 0xb7, + 0x0e, 0x0c, 0xac, 0x9b, 0xbc, 0x15, 0xed, 0xbf, 0xab, 0x17, 0x55, 0x20, 0xdf, 0x35, 0x06, 0xe6, + 0x6e, 0xbb, 0xdb, 0xee, 0xef, 0xeb, 0x2d, 0x45, 0x42, 0x37, 0x41, 0x5d, 0x20, 0xd5, 0x77, 0xa3, + 0x5b, 0xa4, 0xd3, 0x3e, 0x68, 0x0f, 0x14, 0x19, 0xdd, 0x82, 0xeb, 0xef, 0x98, 0x6d, 0x1e, 0xe2, + 0xbe, 0x81, 0x95, 0x24, 0xba, 0x0a, 0xa5, 0xae, 0x61, 0xce, 0x23, 0x94, 0x44, 0xe3, 0x17, 0x09, + 0x6e, 0x0e, 0xbd, 0xc9, 0x4a, 0x53, 0x1a, 0xc0, 0xcb, 0x3d, 0xea, 0x93, 0x7a, 0xd2, 0x77, 0x75, + 0x81, 0x1b, 0x7b, 0x8e, 0xe5, 0x8e, 0x2b, 0x5e, 0x30, 0xae, 0x8e, 0x89, 0xcb, 0xba, 0xa8, 0x2a, + 0x9f, 0xb2, 0x7c, 0x3b, 0xbc, 0xf8, 0x37, 0xe2, 0xab, 0x69, 0xe4, 0x67, 0xf9, 0xf6, 0x1e, 0xd7, + 0x68, 0x3a, 0xde, 0xd9, 0xa8, 0xd2, 0x9a, 0x66, 0x3c, 0xda, 0x69, 0x44, 0xd0, 0xdf, 0x63, 0xc0, + 0x31, 0x03, 0x1c, 0x4f, 0x01, 0xc7, 0x47, 0x5c, 0xeb, 0x24, 0xcd, 0xf2, 0x3d, 0xfc, 0x2f, 0x00, + 0x00, 0xff, 0xff, 0x61, 0xdf, 0x90, 0xd9, 0x13, 0x0d, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/build/v1/build_events.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/build/v1/build_events.pb.go index c0a9e7d..dc5d7a5 100644 --- a/vendor/google.golang.org/genproto/googleapis/devtools/build/v1/build_events.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/devtools/build/v1/build_events.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/devtools/build/v1/build_events.proto -// DO NOT EDIT! /* Package build is a generated protocol buffer package. @@ -17,6 +16,7 @@ It has these top-level messages: PublishLifecycleEventRequest PublishBuildToolEventStreamResponse OrderedBuildEvent + PublishBuildToolEventStreamRequest */ package build @@ -27,7 +27,7 @@ import _ "google.golang.org/genproto/googleapis/api/annotations" import google_protobuf1 "github.com/golang/protobuf/ptypes/any" import google_protobuf2 "github.com/golang/protobuf/ptypes/timestamp" import google_protobuf3 "github.com/golang/protobuf/ptypes/wrappers" -import google_rpc "google.golang.org/genproto/googleapis/rpc/status" +import _ "google.golang.org/genproto/googleapis/rpc/status" // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -113,8 +113,7 @@ const ( // A component that runs executables needed to complete a build. StreamId_WORKER StreamId_BuildComponent = 2 // A component that builds something. - StreamId_TOOL StreamId_BuildComponent = 3 - StreamId_DEPRECATED StreamId_BuildComponent = 4 + StreamId_TOOL StreamId_BuildComponent = 3 ) var StreamId_BuildComponent_name = map[int32]string{ @@ -122,14 +121,12 @@ var StreamId_BuildComponent_name = map[int32]string{ 1: "CONTROLLER", 2: "WORKER", 3: "TOOL", - 4: "DEPRECATED", } var StreamId_BuildComponent_value = map[string]int32{ "UNKNOWN_COMPONENT": 0, "CONTROLLER": 1, "WORKER": 2, "TOOL": 3, - "DEPRECATED": 4, } func (x StreamId_BuildComponent) String() string { @@ -514,13 +511,6 @@ func (m *BuildEvent_InvocationAttemptStarted) GetAttemptNumber() int64 { // Notification that an invocation attempt has finished. type BuildEvent_InvocationAttemptFinished struct { - // The status of the build request. - // If OK, the build request was run, though this does not mean the - // requested build tool succeeded. "exit_code" will be set to the - // exit code of the build tool. - // If not OK, the build request was not successfully executed. - // "exit_code" will not be set. - Status *google_rpc.Status `protobuf:"bytes,1,opt,name=status" json:"status,omitempty"` // The exit code of the build tool. ExitCode *google_protobuf3.Int32Value `protobuf:"bytes,2,opt,name=exit_code,json=exitCode" json:"exit_code,omitempty"` // Final status of the invocation. @@ -534,13 +524,6 @@ func (*BuildEvent_InvocationAttemptFinished) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 1} } -func (m *BuildEvent_InvocationAttemptFinished) GetStatus() *google_rpc.Status { - if m != nil { - return m.Status - } - return nil -} - func (m *BuildEvent_InvocationAttemptFinished) GetExitCode() *google_protobuf3.Int32Value { if m != nil { return m.ExitCode @@ -737,7 +720,6 @@ func (m *BuildEvent_BuildComponentStreamFinished) GetType() BuildEvent_BuildComp // Unique identifier for a build event stream. type StreamId struct { - ProjectNumber int64 `protobuf:"varint,5,opt,name=project_number,json=projectNumber" json:"project_number,omitempty"` // The id of a Build message. BuildId string `protobuf:"bytes,1,opt,name=build_id,json=buildId" json:"build_id,omitempty"` // The unique invocation ID within this build. @@ -745,9 +727,6 @@ type StreamId struct { InvocationId string `protobuf:"bytes,6,opt,name=invocation_id,json=invocationId" json:"invocation_id,omitempty"` // The component that emitted this event. Component StreamId_BuildComponent `protobuf:"varint,3,opt,name=component,enum=google.devtools.build.v1.StreamId_BuildComponent" json:"component,omitempty"` - // The unique invocation ID within this build. - // It should be the same as {invocation_id} below during the migration. - Invocation string `protobuf:"bytes,4,opt,name=invocation" json:"invocation,omitempty"` } func (m *StreamId) Reset() { *m = StreamId{} } @@ -755,13 +734,6 @@ func (m *StreamId) String() string { return proto.CompactTextString(m func (*StreamId) ProtoMessage() {} func (*StreamId) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } -func (m *StreamId) GetProjectNumber() int64 { - if m != nil { - return m.ProjectNumber - } - return 0 -} - func (m *StreamId) GetBuildId() string { if m != nil { return m.BuildId @@ -783,13 +755,6 @@ func (m *StreamId) GetComponent() StreamId_BuildComponent { return StreamId_UNKNOWN_COMPONENT } -func (m *StreamId) GetInvocation() string { - if m != nil { - return m.Invocation - } - return "" -} - func init() { proto.RegisterType((*BuildEvent)(nil), "google.devtools.build.v1.BuildEvent") proto.RegisterType((*BuildEvent_InvocationAttemptStarted)(nil), "google.devtools.build.v1.BuildEvent.InvocationAttemptStarted") @@ -807,67 +772,63 @@ func init() { func init() { proto.RegisterFile("google/devtools/build/v1/build_events.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 979 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0x6d, 0x6f, 0xdb, 0x54, - 0x14, 0x8e, 0xbb, 0xae, 0x4d, 0x4f, 0x9b, 0xcc, 0xbb, 0x63, 0xaa, 0xeb, 0x56, 0x03, 0x8a, 0x2a, - 0xa1, 0x21, 0x1c, 0xb5, 0x05, 0x6d, 0x30, 0x3a, 0x29, 0x4d, 0x5c, 0xc5, 0xac, 0xd8, 0xd1, 0x8d, - 0xcb, 0x78, 0x11, 0x0a, 0x8e, 0x7d, 0x9b, 0x19, 0x25, 0xbe, 0xc6, 0xbe, 0x0e, 0x0d, 0x12, 0x82, - 0xff, 0x82, 0xc4, 0xff, 0xe0, 0x0b, 0xff, 0x80, 0xff, 0xc2, 0x47, 0xe4, 0x7b, 0xaf, 0xf3, 0xd2, - 0x36, 0x5d, 0x07, 0xdf, 0xec, 0x73, 0x9e, 0xf3, 0x3c, 0xe7, 0x9c, 0x3c, 0xc7, 0x0a, 0x7c, 0xd0, - 0xa7, 0xb4, 0x3f, 0x20, 0xb5, 0x80, 0x8c, 0x18, 0xa5, 0x83, 0xb4, 0xd6, 0xcb, 0xc2, 0x41, 0x50, - 0x1b, 0xed, 0x8b, 0x87, 0x2e, 0x19, 0x91, 0x88, 0xa5, 0x46, 0x9c, 0x50, 0x46, 0x91, 0x26, 0xc0, - 0x46, 0x01, 0x36, 0x38, 0xc6, 0x18, 0xed, 0xeb, 0x3b, 0x92, 0xc6, 0x8b, 0xc3, 0x9a, 0x17, 0x45, - 0x94, 0x79, 0x2c, 0xa4, 0x91, 0xac, 0xd3, 0x5f, 0x27, 0x92, 0x32, 0x8f, 0x65, 0x05, 0x78, 0x4b, - 0x82, 0xf9, 0x5b, 0x2f, 0x3b, 0xaf, 0x79, 0xd1, 0x58, 0xa6, 0xde, 0xbe, 0x9c, 0x62, 0xe1, 0x90, - 0xa4, 0xcc, 0x1b, 0xc6, 0x12, 0xf0, 0xe8, 0x32, 0xe0, 0xa7, 0xc4, 0x8b, 0x63, 0x92, 0x14, 0xdc, - 0x9b, 0x32, 0x9f, 0xc4, 0x7e, 0x6d, 0x56, 0x74, 0xf7, 0xf7, 0x0a, 0xc0, 0x71, 0xde, 0x8b, 0x99, - 0xcf, 0x8b, 0x3e, 0x01, 0xe0, 0x83, 0x77, 0x73, 0x01, 0x4d, 0x79, 0x47, 0x79, 0x7f, 0xfd, 0x40, - 0x37, 0xe4, 0xf4, 0x05, 0xb9, 0xe1, 0x16, 0xea, 0x78, 0x8d, 0xa3, 0xf3, 0x77, 0xf4, 0x0b, 0xe8, - 0x61, 0x34, 0xa2, 0x3e, 0x5f, 0x40, 0xd7, 0x63, 0x8c, 0x0c, 0x63, 0x96, 0x4f, 0x98, 0x30, 0x12, - 0x68, 0x87, 0x9c, 0xea, 0xc8, 0x58, 0xb4, 0x48, 0x63, 0xda, 0x84, 0x61, 0x4d, 0x68, 0xea, 0x82, - 0xa5, 0x23, 0x48, 0x5a, 0x25, 0xac, 0x85, 0x0b, 0x72, 0xe8, 0x37, 0x05, 0xb6, 0xaf, 0xd1, 0x3f, - 0x0f, 0xa3, 0x30, 0x7d, 0x45, 0x02, 0xed, 0x23, 0xde, 0xc0, 0xf3, 0xff, 0xd6, 0xc0, 0x89, 0x64, - 0x69, 0x95, 0xf0, 0x56, 0xb8, 0x28, 0x89, 0xbe, 0x85, 0xaa, 0xf4, 0x4e, 0xf4, 0x63, 0x46, 0x32, - 0x12, 0x68, 0x1f, 0x73, 0xd1, 0x83, 0x5b, 0x89, 0x8a, 0x47, 0x59, 0xd9, 0x2a, 0xe1, 0x4a, 0x6f, - 0x36, 0x30, 0x25, 0x9f, 0x4c, 0xf4, 0xe4, 0x4d, 0xc9, 0x67, 0xa6, 0x10, 0xe4, 0xb3, 0x9d, 0xfb, - 0x34, 0x4a, 0xe9, 0x80, 0x74, 0x69, 0xc6, 0xe2, 0x8c, 0x69, 0x4f, 0xdf, 0x80, 0xbc, 0x21, 0x4a, - 0x1d, 0x5e, 0x99, 0x93, 0xfb, 0xb3, 0x01, 0xf4, 0x2b, 0x6c, 0xf9, 0x74, 0x18, 0xd3, 0x28, 0xf7, - 0x55, 0xca, 0x12, 0xe2, 0x0d, 0xa7, 0x43, 0x3c, 0xe3, 0x3a, 0xf5, 0xdb, 0x0f, 0xd1, 0x28, 0xa8, - 0x3a, 0x9c, 0x69, 0x66, 0xa6, 0x4d, 0xff, 0xfa, 0x14, 0x7a, 0x02, 0xeb, 0x3d, 0xef, 0x67, 0x32, - 0x10, 0x37, 0xad, 0x7d, 0xc6, 0x25, 0xdf, 0xba, 0xe2, 0xea, 0x7a, 0x34, 0x6e, 0x95, 0x30, 0x70, - 0xa8, 0xb8, 0x86, 0xcf, 0xe1, 0xa1, 0xfc, 0x41, 0x2f, 0x88, 0x9f, 0x71, 0x5f, 0x09, 0x8a, 0xa3, - 0x1b, 0x29, 0x1e, 0x88, 0x5f, 0xae, 0xa8, 0x11, 0x5c, 0x4d, 0x40, 0x29, 0xcd, 0x12, 0x9f, 0x74, - 0xcf, 0x09, 0xf3, 0x5f, 0x49, 0xa2, 0xe7, 0x37, 0x12, 0xa9, 0xa2, 0xe2, 0x24, 0x2f, 0xe0, 0x2c, - 0x7a, 0x1d, 0xb4, 0x45, 0xd7, 0x81, 0xf6, 0xa0, 0x5a, 0xb8, 0x3e, 0xca, 0x86, 0x3d, 0x92, 0xf0, - 0xfb, 0xbd, 0x83, 0x2b, 0x32, 0x6a, 0xf3, 0xa0, 0xfe, 0xb7, 0x02, 0x5b, 0x0b, 0x0d, 0x8e, 0x1e, - 0xc3, 0x8a, 0xf8, 0x3e, 0xc8, 0xe3, 0x47, 0x45, 0x6b, 0x49, 0xec, 0x1b, 0x1d, 0x9e, 0xc1, 0x12, - 0x81, 0x9e, 0xc2, 0x1a, 0xb9, 0x08, 0x59, 0xd7, 0xa7, 0x01, 0xd1, 0x96, 0x38, 0x7c, 0xfb, 0xca, - 0x24, 0x56, 0xc4, 0x0e, 0x0f, 0xbe, 0xf4, 0x06, 0x19, 0xc1, 0xe5, 0x1c, 0xdd, 0xa0, 0x01, 0x41, - 0x18, 0xee, 0xcf, 0xdc, 0xaa, 0x14, 0xbc, 0xc3, 0x19, 0xf6, 0x5e, 0x63, 0x05, 0xd9, 0x83, 0x3a, - 0xad, 0x17, 0x11, 0xfd, 0x1e, 0x54, 0xe6, 0x4e, 0x48, 0xb7, 0x65, 0x60, 0x32, 0xdb, 0xd1, 0xa5, - 0xd9, 0x6e, 0x29, 0x25, 0x8b, 0xf4, 0x3f, 0x14, 0xa8, 0xcc, 0x59, 0x1d, 0xd5, 0x61, 0x99, 0x8d, - 0x63, 0xf1, 0x9d, 0xac, 0x1e, 0x7c, 0xb8, 0x98, 0x6e, 0xae, 0x4c, 0xb8, 0x13, 0xf3, 0x52, 0xf4, - 0x2e, 0xac, 0x33, 0x72, 0xc1, 0x8a, 0xb3, 0xcb, 0xb7, 0xb8, 0x96, 0xbb, 0x30, 0x0f, 0x4a, 0x95, - 0x3d, 0xa8, 0xf4, 0xc2, 0xc8, 0x4b, 0xc6, 0x05, 0x28, 0x5f, 0xd4, 0x46, 0xab, 0x84, 0x37, 0x44, - 0x58, 0xc0, 0x8e, 0xcb, 0xb0, 0x22, 0xf2, 0xfa, 0x5f, 0x0a, 0xec, 0xdc, 0x74, 0x2b, 0xe8, 0xfb, - 0xb9, 0xbe, 0x4f, 0xff, 0xf7, 0xf1, 0x19, 0xe2, 0xc1, 0x1d, 0xc7, 0x44, 0x8c, 0xb5, 0xdb, 0x04, - 0x98, 0xc6, 0xd0, 0x36, 0x6c, 0x9e, 0x58, 0xb6, 0xd5, 0x69, 0x75, 0xdd, 0xaf, 0xdb, 0x66, 0xf7, - 0xcc, 0xee, 0xb4, 0xcd, 0x86, 0x75, 0x62, 0x99, 0x4d, 0xb5, 0x84, 0x36, 0xa0, 0x2c, 0x92, 0x66, - 0x53, 0x55, 0xd0, 0x3a, 0xac, 0x9a, 0x5f, 0xb5, 0x2d, 0x6c, 0x36, 0xd5, 0xa5, 0xe3, 0x55, 0xb8, - 0xcb, 0xcf, 0x64, 0xf7, 0xcf, 0x25, 0x28, 0x0b, 0x49, 0x8b, 0xfb, 0x3c, 0x4e, 0xe8, 0x0f, 0xc4, - 0x9f, 0xf8, 0xfc, 0xae, 0xf0, 0xb9, 0x8c, 0x0a, 0x9f, 0xa3, 0x2d, 0x28, 0x8b, 0xe3, 0x0d, 0x03, - 0x3e, 0xe8, 0x1a, 0x5e, 0xe5, 0xef, 0x56, 0x80, 0xde, 0x83, 0xca, 0x8c, 0xfd, 0xc2, 0x40, 0x5b, - 0xe1, 0xf9, 0x8d, 0x69, 0xd0, 0x0a, 0x90, 0x03, 0x6b, 0x93, 0x0f, 0x0a, 0x5f, 0x79, 0xf5, 0x60, - 0x7f, 0xf1, 0xa6, 0x8a, 0xee, 0x2e, 0xed, 0x09, 0x4f, 0x39, 0xd0, 0x23, 0x80, 0xa9, 0x80, 0xb6, - 0xcc, 0x25, 0x67, 0x22, 0xbb, 0xdf, 0x41, 0x75, 0xbe, 0x18, 0x3d, 0x84, 0xfb, 0x67, 0xf6, 0x0b, - 0xdb, 0x79, 0x69, 0x77, 0x1b, 0xce, 0x17, 0x6d, 0xc7, 0x36, 0x6d, 0x57, 0x2d, 0xa1, 0x2a, 0x40, - 0xc3, 0xb1, 0x5d, 0xec, 0x9c, 0x9e, 0x9a, 0x58, 0x55, 0x10, 0xc0, 0xca, 0x4b, 0x07, 0xbf, 0x30, - 0xb1, 0xba, 0x84, 0xca, 0xb0, 0xec, 0x3a, 0xce, 0xa9, 0x7a, 0x27, 0x47, 0x35, 0xcd, 0x36, 0x36, - 0x1b, 0x75, 0xd7, 0x6c, 0xaa, 0xcb, 0x8f, 0x3f, 0x85, 0x07, 0xd7, 0xd8, 0x30, 0x5f, 0xb8, 0xd4, - 0x50, 0x4b, 0x39, 0x53, 0xc7, 0x6d, 0x3a, 0x67, 0xae, 0x60, 0xed, 0xb8, 0x4d, 0x13, 0x63, 0x75, - 0xe9, 0x38, 0x85, 0x1d, 0x9f, 0x0e, 0x17, 0x4e, 0x7f, 0x7c, 0x6f, 0x6a, 0x94, 0x76, 0x7e, 0xf8, - 0x6d, 0xe5, 0x9b, 0x23, 0x09, 0xee, 0xd3, 0x81, 0x17, 0xf5, 0x0d, 0x9a, 0xf4, 0x6b, 0x7d, 0x12, - 0xf1, 0xcf, 0x42, 0x4d, 0xa4, 0xbc, 0x38, 0x4c, 0xaf, 0xfe, 0x33, 0x7a, 0xc6, 0x1f, 0xfe, 0x51, - 0x94, 0xde, 0x0a, 0x07, 0x1f, 0xfe, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x78, 0xf8, 0x09, 0x8d, 0xaa, - 0x09, 0x00, 0x00, + // 927 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0x6d, 0x6f, 0xe3, 0x44, + 0x10, 0x8e, 0xdb, 0xa3, 0x4d, 0xa7, 0x49, 0xce, 0xb7, 0xc7, 0xa9, 0x8e, 0x5b, 0xf1, 0x52, 0x54, + 0x09, 0x81, 0x70, 0xd4, 0x14, 0x74, 0x07, 0x47, 0x4f, 0xca, 0x8b, 0xab, 0x98, 0xeb, 0xd9, 0xd1, + 0x26, 0xe5, 0x78, 0xf9, 0x10, 0x1c, 0x7b, 0x9b, 0xb3, 0x94, 0x78, 0x8d, 0xbd, 0x0e, 0x0d, 0x12, + 0x82, 0x5f, 0x83, 0xc4, 0x1f, 0xe1, 0xc7, 0xf0, 0x07, 0xe0, 0x23, 0xf2, 0xee, 0xba, 0x49, 0xda, + 0xa6, 0x77, 0x85, 0x6f, 0xbb, 0x33, 0xcf, 0x3c, 0xcf, 0xcc, 0xec, 0x8c, 0x65, 0xf8, 0x78, 0x44, + 0xe9, 0x68, 0x4c, 0x6a, 0x3e, 0x99, 0x32, 0x4a, 0xc7, 0x49, 0x6d, 0x98, 0x06, 0x63, 0xbf, 0x36, + 0x3d, 0x14, 0x87, 0x01, 0x99, 0x92, 0x90, 0x25, 0x46, 0x14, 0x53, 0x46, 0x91, 0x26, 0xc0, 0x46, + 0x0e, 0x36, 0x38, 0xc6, 0x98, 0x1e, 0xea, 0x7b, 0x92, 0xc6, 0x8d, 0x82, 0x9a, 0x1b, 0x86, 0x94, + 0xb9, 0x2c, 0xa0, 0xa1, 0x8c, 0xd3, 0x5f, 0x27, 0x92, 0x30, 0x97, 0xa5, 0x39, 0xb8, 0x2a, 0xc1, + 0xfc, 0x36, 0x4c, 0xcf, 0x6b, 0x6e, 0x38, 0x93, 0xae, 0x77, 0xaf, 0xba, 0x58, 0x30, 0x21, 0x09, + 0x73, 0x27, 0x91, 0x04, 0xbc, 0x73, 0x15, 0xf0, 0x53, 0xec, 0x46, 0x11, 0x89, 0x73, 0xee, 0x1d, + 0xe9, 0x8f, 0x23, 0xaf, 0xb6, 0x28, 0xba, 0xff, 0x77, 0x09, 0xa0, 0x99, 0xe5, 0x62, 0x66, 0xf5, + 0xa2, 0xcf, 0x01, 0x78, 0xe1, 0x83, 0x4c, 0x40, 0x53, 0xde, 0x53, 0x3e, 0xdc, 0xae, 0xeb, 0x86, + 0xac, 0x3e, 0x27, 0x37, 0xfa, 0xb9, 0x3a, 0xde, 0xe2, 0xe8, 0xec, 0x8e, 0x7e, 0x01, 0x3d, 0x08, + 0xa7, 0xd4, 0xe3, 0x0d, 0x18, 0xb8, 0x8c, 0x91, 0x49, 0xc4, 0xb2, 0x0a, 0x63, 0x46, 0x7c, 0xed, + 0x88, 0x53, 0x1d, 0x1b, 0xab, 0x1a, 0x69, 0xcc, 0x93, 0x30, 0xac, 0x4b, 0x9a, 0x86, 0x60, 0xe9, + 0x09, 0x92, 0x4e, 0x01, 0x6b, 0xc1, 0x0a, 0x1f, 0xfa, 0x4d, 0x81, 0xdd, 0x1b, 0xf4, 0xcf, 0x83, + 0x30, 0x48, 0x5e, 0x11, 0x5f, 0xfb, 0x94, 0x27, 0xf0, 0xec, 0xbf, 0x25, 0x70, 0x22, 0x59, 0x3a, + 0x05, 0x5c, 0x0d, 0x56, 0x39, 0xd1, 0xf7, 0x50, 0x91, 0xb3, 0x13, 0xfe, 0x98, 0x92, 0x94, 0xf8, + 0xda, 0x67, 0x5c, 0xb4, 0xfe, 0x46, 0xa2, 0xe2, 0x28, 0x23, 0x3b, 0x05, 0x5c, 0x1e, 0x2e, 0x1a, + 0xe6, 0xe4, 0x97, 0x15, 0x3d, 0xbe, 0x2b, 0xf9, 0x42, 0x15, 0x82, 0x7c, 0x31, 0x73, 0x8f, 0x86, + 0x09, 0x1d, 0x93, 0x01, 0x4d, 0x59, 0x94, 0x32, 0xed, 0xc9, 0x1d, 0xc8, 0x5b, 0x22, 0xd4, 0xe1, + 0x91, 0x19, 0xb9, 0xb7, 0x68, 0x40, 0xbf, 0x42, 0xd5, 0xa3, 0x93, 0x88, 0x86, 0xd9, 0x5c, 0x25, + 0x2c, 0x26, 0xee, 0x64, 0x5e, 0xc4, 0x53, 0xae, 0xd3, 0x78, 0xf3, 0x22, 0x5a, 0x39, 0x55, 0x8f, + 0x33, 0x2d, 0xd4, 0xb4, 0xe3, 0xdd, 0xec, 0x42, 0x8f, 0x61, 0x7b, 0xe8, 0xfe, 0x4c, 0xc6, 0x62, + 0xa7, 0xb5, 0x2f, 0xb9, 0xe4, 0xdb, 0xd7, 0xa6, 0xba, 0x11, 0xce, 0x3a, 0x05, 0x0c, 0x1c, 0x2a, + 0xb6, 0xe1, 0x2b, 0x78, 0x24, 0x1f, 0xf4, 0x82, 0x78, 0x29, 0x9f, 0x2b, 0x41, 0x71, 0x7c, 0x2b, + 0xc5, 0x43, 0xf1, 0x72, 0x79, 0x8c, 0xe0, 0x6a, 0x03, 0x4a, 0x68, 0x1a, 0x7b, 0x64, 0x70, 0x4e, + 0x98, 0xf7, 0x4a, 0x12, 0x3d, 0xbb, 0x95, 0x48, 0x15, 0x11, 0x27, 0x59, 0x00, 0x67, 0xd1, 0x1b, + 0xa0, 0xad, 0xda, 0x0e, 0x74, 0x00, 0x95, 0x7c, 0xea, 0xc3, 0x74, 0x32, 0x24, 0x31, 0xdf, 0xdf, + 0x75, 0x5c, 0x96, 0x56, 0x9b, 0x1b, 0xf5, 0x3f, 0x14, 0xa8, 0xae, 0x1c, 0x70, 0xf4, 0x04, 0xb6, + 0xc8, 0x45, 0xc0, 0x06, 0x1e, 0xf5, 0x89, 0xb6, 0xc6, 0xb3, 0xdb, 0xbd, 0x96, 0x9d, 0x15, 0xb2, + 0xa3, 0xfa, 0xd7, 0xee, 0x38, 0x25, 0xb8, 0x98, 0xa1, 0x5b, 0xd4, 0x27, 0x08, 0xc3, 0x83, 0x85, + 0xfd, 0x13, 0x1f, 0x19, 0x6d, 0x9d, 0x33, 0x1c, 0xbc, 0xe6, 0x79, 0x7b, 0x1c, 0x8c, 0xd5, 0x79, + 0xbc, 0xb0, 0xe8, 0xf7, 0xa1, 0xbc, 0xb4, 0x16, 0xba, 0x2d, 0x0d, 0x97, 0xf9, 0x1e, 0xc3, 0x86, + 0x94, 0x52, 0xee, 0x22, 0x25, 0x83, 0xf4, 0xdf, 0x15, 0x28, 0x2f, 0x8d, 0x2f, 0x6a, 0xc0, 0x3d, + 0x36, 0x8b, 0xc4, 0xb7, 0xaf, 0x52, 0xff, 0x64, 0x35, 0xdd, 0x52, 0x98, 0x98, 0x38, 0xcc, 0x43, + 0xd1, 0xfb, 0xb0, 0xcd, 0xc8, 0x05, 0xcb, 0x57, 0x29, 0xeb, 0xe2, 0x56, 0x36, 0x59, 0x99, 0x51, + 0xaa, 0x1c, 0x40, 0x79, 0x18, 0x84, 0x6e, 0x3c, 0xcb, 0x41, 0x59, 0xa3, 0x4a, 0x9d, 0x02, 0x2e, + 0x09, 0xb3, 0x80, 0x35, 0x8b, 0xb0, 0x21, 0xfc, 0xfa, 0x9f, 0x0a, 0xec, 0xdd, 0x36, 0xff, 0xe8, + 0x87, 0xa5, 0xbc, 0x4f, 0xff, 0xf7, 0x42, 0x19, 0xe2, 0xd0, 0x9f, 0x45, 0x44, 0x94, 0xb5, 0xdf, + 0x06, 0x98, 0xdb, 0xd0, 0x2e, 0xec, 0x9c, 0x58, 0xb6, 0xd5, 0xeb, 0x0c, 0xfa, 0xdf, 0x76, 0xcd, + 0xc1, 0x99, 0xdd, 0xeb, 0x9a, 0x2d, 0xeb, 0xc4, 0x32, 0xdb, 0x6a, 0x01, 0x95, 0xa0, 0x28, 0x9c, + 0x66, 0x5b, 0x55, 0xd0, 0x36, 0x6c, 0x9a, 0xdf, 0x74, 0x2d, 0x6c, 0xb6, 0xd5, 0xb5, 0xe6, 0x26, + 0xbc, 0xc5, 0x47, 0x7f, 0xff, 0x2f, 0x05, 0x8a, 0x42, 0xd2, 0xf2, 0x51, 0x15, 0x8a, 0x62, 0xd3, + 0x02, 0x9f, 0x57, 0xb0, 0x85, 0x37, 0xf9, 0xdd, 0xf2, 0xd1, 0x07, 0x50, 0x5e, 0x98, 0xab, 0xc0, + 0xd7, 0x36, 0xb8, 0xbf, 0x34, 0x37, 0x5a, 0x3e, 0x72, 0x60, 0xeb, 0x72, 0xfb, 0x79, 0x2f, 0x2b, + 0xf5, 0xc3, 0xd5, 0x2d, 0xc8, 0x65, 0xaf, 0x34, 0x00, 0xcf, 0x39, 0xf6, 0x5f, 0x40, 0x65, 0xd9, + 0x89, 0x1e, 0xc1, 0x83, 0x33, 0xfb, 0xb9, 0xed, 0xbc, 0xb4, 0x07, 0x2d, 0xe7, 0x45, 0xd7, 0xb1, + 0x4d, 0xbb, 0xaf, 0x16, 0x50, 0x05, 0xa0, 0xe5, 0xd8, 0x7d, 0xec, 0x9c, 0x9e, 0x9a, 0x58, 0x55, + 0x10, 0xc0, 0xc6, 0x4b, 0x07, 0x3f, 0x37, 0xb1, 0xba, 0x86, 0x8a, 0x70, 0xaf, 0xef, 0x38, 0xa7, + 0xea, 0xfa, 0x47, 0x5f, 0xc0, 0xc3, 0x1b, 0xe6, 0x25, 0xeb, 0x8c, 0xe4, 0x54, 0x0b, 0x59, 0x64, + 0xaf, 0xdf, 0x76, 0xce, 0xfa, 0x82, 0xa5, 0xd7, 0x6f, 0x9b, 0x18, 0xab, 0x6b, 0xcd, 0x04, 0xf6, + 0x3c, 0x3a, 0x59, 0x59, 0x4d, 0xf3, 0xfe, 0xfc, 0x45, 0xbb, 0xd9, 0x86, 0x76, 0x95, 0xef, 0x8e, + 0x25, 0x78, 0x44, 0xc7, 0x6e, 0x38, 0x32, 0x68, 0x3c, 0xaa, 0x8d, 0x48, 0xc8, 0xf7, 0xb7, 0x26, + 0x5c, 0x6e, 0x14, 0x24, 0xd7, 0x7f, 0x4b, 0x9e, 0xf2, 0xc3, 0x3f, 0x8a, 0x32, 0xdc, 0xe0, 0xe0, + 0xa3, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x84, 0x0f, 0x0f, 0xdf, 0x27, 0x09, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/build/v1/build_status.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/build/v1/build_status.pb.go index f7500cd..940ddd6 100644 --- a/vendor/google.golang.org/genproto/googleapis/devtools/build/v1/build_status.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/devtools/build/v1/build_status.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/devtools/build/v1/build_status.proto -// DO NOT EDIT! package build @@ -8,7 +7,7 @@ import proto "github.com/golang/protobuf/proto" import fmt "fmt" import math "math" import _ "google.golang.org/genproto/googleapis/api/annotations" -import _ "github.com/golang/protobuf/ptypes/any" +import google_protobuf1 "github.com/golang/protobuf/ptypes/any" // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -71,6 +70,8 @@ func (BuildStatus_Result) EnumDescriptor() ([]byte, []int) { return fileDescript type BuildStatus struct { // The end result. Result BuildStatus_Result `protobuf:"varint,1,opt,name=result,enum=google.devtools.build.v1.BuildStatus_Result" json:"result,omitempty"` + // Fine-grained diagnostic information to complement the status. + Details *google_protobuf1.Any `protobuf:"bytes,2,opt,name=details" json:"details,omitempty"` } func (m *BuildStatus) Reset() { *m = BuildStatus{} } @@ -85,6 +86,13 @@ func (m *BuildStatus) GetResult() BuildStatus_Result { return BuildStatus_UNKNOWN_STATUS } +func (m *BuildStatus) GetDetails() *google_protobuf1.Any { + if m != nil { + return m.Details + } + return nil +} + func init() { proto.RegisterType((*BuildStatus)(nil), "google.devtools.build.v1.BuildStatus") proto.RegisterEnum("google.devtools.build.v1.BuildStatus_Result", BuildStatus_Result_name, BuildStatus_Result_value) @@ -93,29 +101,30 @@ func init() { func init() { proto.RegisterFile("google/devtools/build/v1/build_status.proto", fileDescriptor1) } var fileDescriptor1 = []byte{ - // 370 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x91, 0x5f, 0x4b, 0xe3, 0x40, - 0x14, 0xc5, 0x37, 0xdd, 0xdd, 0xec, 0xee, 0xec, 0x6e, 0xc9, 0x0e, 0xac, 0xb4, 0xa5, 0x42, 0xe9, - 0x93, 0xa0, 0x4c, 0xa8, 0x3e, 0x8a, 0x0f, 0x69, 0xe6, 0x8a, 0xc1, 0x76, 0x52, 0x67, 0x12, 0xff, - 0xbd, 0x84, 0xd4, 0xc6, 0x10, 0x88, 0x99, 0xd2, 0x4c, 0x0a, 0x7e, 0x22, 0x3f, 0x8f, 0xdf, 0xc6, - 0x47, 0xc9, 0x9f, 0x42, 0x41, 0xfb, 0x76, 0x73, 0xcf, 0xef, 0xdc, 0x13, 0xce, 0xa0, 0xc3, 0x58, - 0xca, 0x38, 0x8d, 0xcc, 0x45, 0xb4, 0x56, 0x52, 0xa6, 0xb9, 0x39, 0x2f, 0x92, 0x74, 0x61, 0xae, - 0x47, 0xf5, 0x10, 0xe4, 0x2a, 0x54, 0x45, 0x4e, 0x96, 0x2b, 0xa9, 0x24, 0xee, 0xd4, 0x30, 0xd9, - 0xc0, 0xa4, 0x62, 0xc8, 0x7a, 0xd4, 0xeb, 0x37, 0x67, 0xc2, 0x65, 0x62, 0x86, 0x59, 0x26, 0x55, - 0xa8, 0x12, 0x99, 0x35, 0xbe, 0x5e, 0xb7, 0x51, 0xab, 0xaf, 0x79, 0xf1, 0x68, 0x86, 0xd9, 0x73, - 0x2d, 0x0d, 0x5f, 0x5a, 0xe8, 0xf7, 0xb8, 0xbc, 0x22, 0xaa, 0x20, 0x4c, 0x91, 0xbe, 0x8a, 0xf2, - 0x22, 0x55, 0x1d, 0x6d, 0xa0, 0x1d, 0xb4, 0x8f, 0x8f, 0xc8, 0xae, 0x4c, 0xb2, 0x65, 0x23, 0xbc, - 0xf2, 0xf0, 0xc6, 0x3b, 0x7c, 0xd5, 0x90, 0x5e, 0xaf, 0x30, 0x46, 0x6d, 0x9f, 0x5d, 0x32, 0xf7, - 0x86, 0x05, 0xc2, 0xb3, 0x3c, 0x5f, 0x18, 0x5f, 0xf0, 0x7f, 0xf4, 0xcf, 0x76, 0xa7, 0x53, 0x8b, - 0xd1, 0x40, 0xf8, 0xb6, 0x0d, 0x40, 0x81, 0x1a, 0x5a, 0x89, 0x6e, 0xd6, 0xe7, 0x96, 0x33, 0x01, - 0x6a, 0xb4, 0x70, 0x1b, 0x21, 0x5f, 0x00, 0x0f, 0x80, 0x73, 0x97, 0x1b, 0x5f, 0xb1, 0x81, 0xfe, - 0x88, 0x3b, 0xe1, 0xc1, 0xb4, 0xd9, 0x7c, 0xc3, 0x7b, 0x08, 0x73, 0x10, 0xae, 0xcf, 0x6d, 0x08, - 0xe0, 0xf6, 0xc2, 0xf2, 0x85, 0x07, 0xd4, 0xf8, 0x8e, 0x07, 0xa8, 0xef, 0xb0, 0x6b, 0xd7, 0xb6, - 0x3c, 0xc7, 0x65, 0x01, 0x05, 0x8b, 0x4e, 0x1c, 0x56, 0x22, 0x4d, 0x9e, 0x8e, 0xf7, 0x51, 0x97, - 0xc3, 0x95, 0x0f, 0xc2, 0xfb, 0x44, 0xfe, 0x89, 0xff, 0xa2, 0x5f, 0xb6, 0xc5, 0x6c, 0x98, 0x94, - 0x7f, 0xf2, 0x63, 0xac, 0x50, 0xff, 0x41, 0x3e, 0xed, 0xac, 0x63, 0x6c, 0x6c, 0xf5, 0x31, 0x2b, - 0xbb, 0x9d, 0x69, 0xf7, 0x67, 0x0d, 0x1d, 0xcb, 0x34, 0xcc, 0x62, 0x22, 0x57, 0xb1, 0x19, 0x47, - 0x59, 0xd5, 0xbc, 0x59, 0x4b, 0xe1, 0x32, 0xc9, 0x3f, 0x3e, 0xfe, 0x69, 0x35, 0xbc, 0x69, 0xda, - 0x5c, 0xaf, 0xe0, 0x93, 0xf7, 0x00, 0x00, 0x00, 0xff, 0xff, 0xde, 0x3c, 0xd5, 0xd5, 0x28, 0x02, - 0x00, 0x00, + // 390 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0x4f, 0x0b, 0xd3, 0x30, + 0x18, 0xc6, 0xcd, 0xd4, 0x4e, 0x33, 0x1d, 0x35, 0xa8, 0x6c, 0x63, 0xc2, 0xd8, 0x69, 0xa0, 0xa4, + 0x6c, 0x1e, 0xc5, 0x43, 0xd6, 0x44, 0x2c, 0x6e, 0xe9, 0x4c, 0x5a, 0xff, 0x5d, 0x4a, 0xe6, 0x6a, + 0x29, 0xd4, 0x66, 0xac, 0xe9, 0x60, 0x1f, 0xd3, 0x93, 0x5f, 0xc5, 0xa3, 0xf4, 0x1f, 0x0c, 0x74, + 0xb7, 0xf4, 0x7d, 0x7e, 0xcf, 0xf3, 0xbe, 0x3c, 0x14, 0xbe, 0x4c, 0xb4, 0x4e, 0xb2, 0xd8, 0x39, + 0xc4, 0x67, 0xa3, 0x75, 0x56, 0x38, 0xfb, 0x32, 0xcd, 0x0e, 0xce, 0x79, 0xd9, 0x3c, 0xa2, 0xc2, + 0x28, 0x53, 0x16, 0xf8, 0x78, 0xd2, 0x46, 0xa3, 0x51, 0x03, 0xe3, 0x0e, 0xc6, 0x35, 0x83, 0xcf, + 0xcb, 0xc9, 0xb4, 0x8d, 0x51, 0xc7, 0xd4, 0x51, 0x79, 0xae, 0x8d, 0x32, 0xa9, 0xce, 0x5b, 0xdf, + 0x64, 0xdc, 0xaa, 0xf5, 0xd7, 0xbe, 0xfc, 0xe1, 0xa8, 0xfc, 0xd2, 0x48, 0xf3, 0xdf, 0x3d, 0x38, + 0x58, 0x57, 0x29, 0xb2, 0x5e, 0x84, 0x28, 0xb4, 0x4e, 0x71, 0x51, 0x66, 0x66, 0x04, 0x66, 0x60, + 0x31, 0x5c, 0xbd, 0xc2, 0xb7, 0x76, 0xe2, 0x2b, 0x1b, 0x16, 0xb5, 0x47, 0xb4, 0x5e, 0x84, 0x61, + 0xff, 0x10, 0x1b, 0x95, 0x66, 0xc5, 0xa8, 0x37, 0x03, 0x8b, 0xc1, 0xea, 0x69, 0x17, 0xd3, 0x9d, + 0x80, 0x49, 0x7e, 0x11, 0x1d, 0x34, 0xff, 0x05, 0xa0, 0xd5, 0x44, 0x20, 0x04, 0x87, 0x21, 0xff, + 0xc0, 0xfd, 0xcf, 0x3c, 0x92, 0x01, 0x09, 0x42, 0x69, 0xdf, 0x41, 0xcf, 0xe0, 0x13, 0xd7, 0xdf, + 0x6e, 0x09, 0xa7, 0x91, 0x0c, 0x5d, 0x97, 0x31, 0xca, 0xa8, 0x0d, 0x2a, 0xb4, 0x1b, 0xbf, 0x23, + 0xde, 0x86, 0x51, 0xbb, 0x87, 0x86, 0x10, 0x86, 0x92, 0x89, 0x88, 0x09, 0xe1, 0x0b, 0xfb, 0x2e, + 0xb2, 0xe1, 0x23, 0xf9, 0x55, 0x06, 0x6c, 0xdb, 0x4e, 0xee, 0xa1, 0xe7, 0x10, 0x09, 0x26, 0xfd, + 0x50, 0xb8, 0x2c, 0x62, 0x5f, 0xde, 0x93, 0x50, 0x06, 0x8c, 0xda, 0xf7, 0xd1, 0x0c, 0x4e, 0x3d, + 0xfe, 0xc9, 0x77, 0x49, 0xe0, 0xf9, 0x3c, 0xa2, 0x8c, 0xd0, 0x8d, 0xc7, 0x2b, 0xa4, 0xdd, 0x67, + 0xa1, 0x17, 0x70, 0x2c, 0xd8, 0xc7, 0x90, 0xc9, 0xe0, 0x3f, 0xf2, 0x03, 0xf4, 0x18, 0x3e, 0x74, + 0x09, 0x77, 0xd9, 0xa6, 0xba, 0xa4, 0xbf, 0x36, 0x70, 0xfa, 0x5d, 0xff, 0xbc, 0x59, 0xdf, 0xda, + 0xbe, 0xea, 0x6f, 0x57, 0xb5, 0xb2, 0x03, 0xdf, 0xde, 0xb6, 0x74, 0xa2, 0x33, 0x95, 0x27, 0x58, + 0x9f, 0x12, 0x27, 0x89, 0xf3, 0xba, 0x33, 0xa7, 0x91, 0xd4, 0x31, 0x2d, 0xfe, 0xfd, 0x59, 0xde, + 0xd4, 0x8f, 0x3f, 0x00, 0xec, 0xad, 0x1a, 0x7e, 0xfd, 0x37, 0x00, 0x00, 0xff, 0xff, 0xd6, 0x3d, + 0xf5, 0x87, 0x58, 0x02, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/build/v1/publish_build_event.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/build/v1/publish_build_event.pb.go index 9ef0196..ee9fd22 100644 --- a/vendor/google.golang.org/genproto/googleapis/devtools/build/v1/publish_build_event.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/devtools/build/v1/publish_build_event.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/devtools/build/v1/publish_build_event.proto -// DO NOT EDIT! package build @@ -8,8 +7,6 @@ import proto "github.com/golang/protobuf/proto" import fmt "fmt" import math "math" import _ "google.golang.org/genproto/googleapis/api/annotations" -import _ "google.golang.org/genproto/googleapis/api/serviceconfig" -import _ "github.com/golang/protobuf/ptypes/any" import google_protobuf4 "github.com/golang/protobuf/ptypes/duration" import google_protobuf5 "github.com/golang/protobuf/ptypes/empty" @@ -188,10 +185,72 @@ func (m *OrderedBuildEvent) GetEvent() *BuildEvent { return nil } +type PublishBuildToolEventStreamRequest struct { + // Which build event stream this event belongs to. + StreamId *StreamId `protobuf:"bytes,1,opt,name=stream_id,json=streamId" json:"stream_id,omitempty"` + // The position of this event in the stream. The sequence numbers for a build + // event stream should be a sequence of consecutive natural numbers starting + // from one. (1, 2, 3, ...) + SequenceNumber int64 `protobuf:"varint,2,opt,name=sequence_number,json=sequenceNumber" json:"sequence_number,omitempty"` + // The actual event. + Event *BuildEvent `protobuf:"bytes,3,opt,name=event" json:"event,omitempty"` + // The build event with position info. + // New publishing clients should use this field rather than the 3 above. + OrderedBuildEvent *OrderedBuildEvent `protobuf:"bytes,4,opt,name=ordered_build_event,json=orderedBuildEvent" json:"ordered_build_event,omitempty"` + // The keywords to be attached to the notification which notifies the start + // of a new build event stream. BES only reads this field when sequence_number + // or ordered_build_event.sequence_number is 1 in this message. If this field + // is empty, BES will not publish notification messages for this stream. + NotificationKeywords []string `protobuf:"bytes,5,rep,name=notification_keywords,json=notificationKeywords" json:"notification_keywords,omitempty"` +} + +func (m *PublishBuildToolEventStreamRequest) Reset() { *m = PublishBuildToolEventStreamRequest{} } +func (m *PublishBuildToolEventStreamRequest) String() string { return proto.CompactTextString(m) } +func (*PublishBuildToolEventStreamRequest) ProtoMessage() {} +func (*PublishBuildToolEventStreamRequest) Descriptor() ([]byte, []int) { + return fileDescriptor2, []int{3} +} + +func (m *PublishBuildToolEventStreamRequest) GetStreamId() *StreamId { + if m != nil { + return m.StreamId + } + return nil +} + +func (m *PublishBuildToolEventStreamRequest) GetSequenceNumber() int64 { + if m != nil { + return m.SequenceNumber + } + return 0 +} + +func (m *PublishBuildToolEventStreamRequest) GetEvent() *BuildEvent { + if m != nil { + return m.Event + } + return nil +} + +func (m *PublishBuildToolEventStreamRequest) GetOrderedBuildEvent() *OrderedBuildEvent { + if m != nil { + return m.OrderedBuildEvent + } + return nil +} + +func (m *PublishBuildToolEventStreamRequest) GetNotificationKeywords() []string { + if m != nil { + return m.NotificationKeywords + } + return nil +} + func init() { proto.RegisterType((*PublishLifecycleEventRequest)(nil), "google.devtools.build.v1.PublishLifecycleEventRequest") proto.RegisterType((*PublishBuildToolEventStreamResponse)(nil), "google.devtools.build.v1.PublishBuildToolEventStreamResponse") proto.RegisterType((*OrderedBuildEvent)(nil), "google.devtools.build.v1.OrderedBuildEvent") + proto.RegisterType((*PublishBuildToolEventStreamRequest)(nil), "google.devtools.build.v1.PublishBuildToolEventStreamRequest") proto.RegisterEnum("google.devtools.build.v1.PublishLifecycleEventRequest_ServiceLevel", PublishLifecycleEventRequest_ServiceLevel_name, PublishLifecycleEventRequest_ServiceLevel_value) } @@ -360,44 +419,47 @@ var _PublishBuildEvent_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("google/devtools/build/v1/publish_build_event.proto", fileDescriptor2) } var fileDescriptor2 = []byte{ - // 619 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x54, 0xc1, 0x6e, 0xd3, 0x40, - 0x10, 0x65, 0x1b, 0xa8, 0xc8, 0xa6, 0x4d, 0xe9, 0x8a, 0x42, 0x9a, 0xb6, 0x28, 0x32, 0x08, 0x22, - 0x2a, 0xd9, 0x34, 0x95, 0x38, 0x14, 0x55, 0x40, 0x4a, 0x0e, 0x11, 0x55, 0x5a, 0xb9, 0x11, 0x07, - 0x2e, 0x96, 0x63, 0x4f, 0xd3, 0xa5, 0xce, 0xae, 0xf1, 0xae, 0x8d, 0x7a, 0xe5, 0x07, 0x7a, 0xe0, - 0x0b, 0xb8, 0xf3, 0x03, 0x7c, 0x07, 0x7c, 0x02, 0x1f, 0xc1, 0x11, 0x79, 0x77, 0x83, 0x4c, 0x8b, - 0x83, 0xe0, 0xc0, 0x6d, 0x77, 0xde, 0xcc, 0xbc, 0x99, 0x37, 0xb3, 0x8b, 0x3b, 0x63, 0xce, 0xc7, - 0x11, 0x38, 0x21, 0x64, 0x92, 0xf3, 0x48, 0x38, 0xa3, 0x94, 0x46, 0xa1, 0x93, 0x6d, 0x39, 0x71, - 0x3a, 0x8a, 0xa8, 0x38, 0xf1, 0x94, 0xc1, 0x83, 0x0c, 0x98, 0xb4, 0xe3, 0x84, 0x4b, 0x4e, 0x1a, - 0x3a, 0xc6, 0x9e, 0xc6, 0xd8, 0xca, 0xc5, 0xce, 0xb6, 0x9a, 0xeb, 0x26, 0x9b, 0x1f, 0x53, 0xc7, - 0x67, 0x8c, 0x4b, 0x5f, 0x52, 0xce, 0x84, 0x8e, 0x6b, 0xae, 0x14, 0xd1, 0x54, 0x9e, 0x18, 0xf3, - 0x66, 0x69, 0x09, 0x05, 0xea, 0x69, 0x8e, 0x55, 0xe3, 0xac, 0x6e, 0xa3, 0xf4, 0xd8, 0xf1, 0xd9, - 0x99, 0x81, 0xee, 0x5c, 0x84, 0xc2, 0x34, 0x51, 0xfc, 0x06, 0x5f, 0xbb, 0x88, 0xc3, 0x24, 0x96, - 0x26, 0xd8, 0xfa, 0x58, 0xc1, 0xeb, 0x87, 0xba, 0xe3, 0x7d, 0x7a, 0x0c, 0xc1, 0x59, 0x10, 0x41, - 0x2f, 0x27, 0x76, 0xe1, 0x6d, 0x0a, 0x42, 0x92, 0x13, 0xbc, 0x28, 0x20, 0xc9, 0x68, 0x00, 0x5e, - 0x04, 0x19, 0x44, 0x0d, 0xd4, 0x42, 0xed, 0x7a, 0x67, 0xcf, 0x2e, 0x13, 0xc3, 0x9e, 0x95, 0xce, - 0x3e, 0xd2, 0xb9, 0xf6, 0xf3, 0x54, 0xee, 0x82, 0x28, 0xdc, 0xc8, 0x3e, 0xae, 0x15, 0x1a, 0x6f, - 0xcc, 0xb5, 0x50, 0xbb, 0xd6, 0xd9, 0x2c, 0xe7, 0x39, 0x48, 0x42, 0x48, 0x20, 0xec, 0xe6, 0x77, - 0xcd, 0x81, 0x47, 0x3f, 0xcf, 0xe4, 0x19, 0xae, 0x0b, 0x99, 0x80, 0x3f, 0xf1, 0x24, 0x9d, 0x00, - 0x4f, 0x65, 0xa3, 0xa2, 0x12, 0xae, 0x4e, 0x13, 0x4e, 0xe5, 0xb0, 0x5f, 0x18, 0xb9, 0xdc, 0x45, - 0x1d, 0x30, 0xd4, 0xfe, 0x64, 0x1b, 0xaf, 0x30, 0x2e, 0xe9, 0x31, 0x0d, 0x14, 0xec, 0x9d, 0xc2, - 0xd9, 0x3b, 0x9e, 0x84, 0xa2, 0x71, 0xb5, 0x55, 0x69, 0x57, 0xdd, 0x9b, 0x45, 0xf0, 0xa5, 0xc1, - 0xc8, 0x06, 0xc6, 0x71, 0xc2, 0xdf, 0x40, 0x20, 0x3d, 0x1a, 0x36, 0xe6, 0x5b, 0xa8, 0x5d, 0x75, - 0xab, 0xc6, 0xd2, 0x0f, 0xad, 0x6d, 0xbc, 0x50, 0x54, 0x80, 0x10, 0x5c, 0x1f, 0x1c, 0x0c, 0xfa, - 0x83, 0x61, 0xcf, 0x7d, 0xbe, 0x37, 0xec, 0xbf, 0xea, 0xdd, 0xb8, 0x42, 0x96, 0x70, 0xad, 0x68, - 0x40, 0xd6, 0x39, 0xc2, 0x77, 0x8d, 0xa8, 0xaa, 0xd9, 0x21, 0xe7, 0x91, 0x6a, 0xf2, 0x48, 0xd5, - 0xeb, 0x82, 0x88, 0x39, 0x13, 0x40, 0x9e, 0xe2, 0xaa, 0x69, 0x99, 0x86, 0x6a, 0x4c, 0xb5, 0x8e, - 0x55, 0x2e, 0x9f, 0x0e, 0xee, 0x87, 0xee, 0x75, 0x61, 0x4e, 0xe4, 0x01, 0x5e, 0x12, 0xf9, 0x9c, - 0x58, 0x00, 0x1e, 0x4b, 0x27, 0x23, 0x48, 0xd4, 0x14, 0x2a, 0x6e, 0x7d, 0x6a, 0x1e, 0x28, 0xab, - 0xf5, 0x19, 0xe1, 0xe5, 0x4b, 0xf2, 0xff, 0x3f, 0x7e, 0xb2, 0x83, 0xaf, 0xe9, 0x25, 0xd1, 0x33, - 0xbd, 0x57, 0xce, 0x52, 0xd8, 0x0e, 0x1d, 0xd2, 0xf9, 0x3a, 0x87, 0x97, 0x8b, 0x6a, 0xea, 0xda, - 0xcf, 0x11, 0x5e, 0xf9, 0xed, 0xe2, 0x92, 0xc7, 0xff, 0xb6, 0xe9, 0xcd, 0x5b, 0x97, 0x16, 0xad, - 0x97, 0xbf, 0x3b, 0xeb, 0xfe, 0xfb, 0x2f, 0xdf, 0x3e, 0xcc, 0xb5, 0xac, 0xb5, 0xfc, 0xa5, 0x47, - 0xbf, 0x84, 0x8a, 0x1d, 0xf3, 0xf9, 0xec, 0xa0, 0x87, 0xe4, 0x13, 0xc2, 0x6b, 0x33, 0xa6, 0x4e, - 0xfe, 0xe6, 0x65, 0x34, 0x77, 0xff, 0xd8, 0xc4, 0xac, 0xcd, 0xb2, 0x36, 0x54, 0xcd, 0xb7, 0x2d, - 0x92, 0xd7, 0x0c, 0x17, 0x4b, 0x6d, 0xa3, 0x47, 0xa8, 0x1b, 0xe3, 0xf5, 0x80, 0x4f, 0x4a, 0x69, - 0xba, 0x0b, 0x5d, 0x3f, 0x38, 0x05, 0x16, 0x1e, 0xe6, 0x6a, 0x1c, 0xa2, 0xd7, 0xbb, 0xc6, 0x73, - 0xcc, 0x23, 0x9f, 0x8d, 0x6d, 0x9e, 0x8c, 0x9d, 0x31, 0x30, 0xa5, 0x95, 0xa3, 0x21, 0x3f, 0xa6, - 0xe2, 0xf2, 0xe7, 0xf8, 0x44, 0x1d, 0xbe, 0x23, 0x34, 0x9a, 0x57, 0xce, 0xdb, 0x3f, 0x02, 0x00, - 0x00, 0xff, 0xff, 0xb1, 0xfc, 0x73, 0x01, 0xcb, 0x05, 0x00, 0x00, + // 666 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0xcf, 0x6e, 0xd3, 0x4e, + 0x10, 0xfe, 0x6d, 0xd2, 0x56, 0xbf, 0x6c, 0xda, 0x94, 0x2e, 0x14, 0x4c, 0xda, 0xa2, 0xc8, 0x20, + 0x88, 0xa8, 0x64, 0xd3, 0x54, 0xe2, 0x50, 0x54, 0xfe, 0xa4, 0xe4, 0x10, 0x51, 0xa5, 0x95, 0x1b, + 0x71, 0x80, 0x83, 0xe5, 0xd8, 0xd3, 0x74, 0xa9, 0xe3, 0x35, 0xde, 0xb5, 0x51, 0xaf, 0xbc, 0x40, + 0x0f, 0x3c, 0x01, 0x77, 0x5e, 0x80, 0xe7, 0x80, 0x47, 0xe0, 0xc0, 0x23, 0x70, 0x44, 0xde, 0x75, + 0x90, 0x69, 0x70, 0x50, 0x73, 0xe0, 0xe6, 0xdd, 0x99, 0xf9, 0x66, 0xbe, 0x6f, 0x76, 0xc6, 0xb8, + 0x35, 0x64, 0x6c, 0xe8, 0x83, 0xe9, 0x41, 0x22, 0x18, 0xf3, 0xb9, 0x39, 0x88, 0xa9, 0xef, 0x99, + 0xc9, 0x96, 0x19, 0xc6, 0x03, 0x9f, 0xf2, 0x13, 0x5b, 0x5e, 0xd8, 0x90, 0x40, 0x20, 0x8c, 0x30, + 0x62, 0x82, 0x11, 0x4d, 0xc5, 0x18, 0xe3, 0x18, 0x43, 0xba, 0x18, 0xc9, 0x56, 0x7d, 0x3d, 0x43, + 0x73, 0x42, 0x6a, 0x3a, 0x41, 0xc0, 0x84, 0x23, 0x28, 0x0b, 0xb8, 0x8a, 0xab, 0x6f, 0x16, 0xe6, + 0xca, 0xe5, 0x18, 0x3b, 0xdf, 0xca, 0x9c, 0xe5, 0x69, 0x10, 0x1f, 0x9b, 0x5e, 0x1c, 0x49, 0xb4, + 0xcc, 0xbe, 0x76, 0xd1, 0x0e, 0xa3, 0x50, 0x9c, 0x29, 0xa3, 0xfe, 0xb1, 0x8c, 0xd7, 0x0f, 0x55, + 0xfd, 0xfb, 0xf4, 0x18, 0xdc, 0x33, 0xd7, 0x87, 0x4e, 0x8a, 0x6e, 0xc1, 0xdb, 0x18, 0xb8, 0x20, + 0x27, 0x78, 0x89, 0x43, 0x94, 0x50, 0x17, 0x6c, 0x1f, 0x12, 0xf0, 0x35, 0xd4, 0x40, 0xcd, 0x5a, + 0x6b, 0xcf, 0x28, 0xa2, 0x66, 0x4c, 0x83, 0x33, 0x8e, 0x14, 0xd6, 0x7e, 0x0a, 0x65, 0x2d, 0xf2, + 0xdc, 0x89, 0xec, 0xe3, 0x6a, 0x8e, 0x9d, 0x56, 0x6a, 0xa0, 0x66, 0xb5, 0xb5, 0x59, 0x9c, 0xe7, + 0x20, 0xf2, 0x20, 0x02, 0xaf, 0x9d, 0x9e, 0x55, 0x0e, 0x3c, 0xf8, 0xf5, 0x4d, 0x9e, 0xe2, 0x1a, + 0x17, 0x11, 0x38, 0x23, 0x5b, 0xd0, 0x11, 0xb0, 0x58, 0x68, 0x65, 0x09, 0x78, 0x73, 0x0c, 0x38, + 0x96, 0xc3, 0x78, 0x9e, 0xc9, 0x65, 0x2d, 0xa9, 0x80, 0xbe, 0xf2, 0x27, 0xdb, 0x78, 0x35, 0x60, + 0x82, 0x1e, 0x53, 0x57, 0x9a, 0xed, 0x53, 0x38, 0x7b, 0xc7, 0x22, 0x8f, 0x6b, 0x73, 0x8d, 0x72, + 0xb3, 0x62, 0x5d, 0xcb, 0x1b, 0x5f, 0x64, 0x36, 0xb2, 0x81, 0x71, 0x18, 0xb1, 0x37, 0xe0, 0x0a, + 0x9b, 0x7a, 0xda, 0x42, 0x03, 0x35, 0x2b, 0x56, 0x25, 0xbb, 0xe9, 0x7a, 0xfa, 0x36, 0x5e, 0xcc, + 0x2b, 0x40, 0x08, 0xae, 0xf5, 0x0e, 0x7a, 0xdd, 0x5e, 0xbf, 0x63, 0x3d, 0xdb, 0xeb, 0x77, 0x5f, + 0x76, 0xae, 0xfc, 0x47, 0x96, 0x71, 0x35, 0x7f, 0x81, 0xf4, 0x73, 0x84, 0x6f, 0x67, 0xa2, 0x4a, + 0xb2, 0x7d, 0xc6, 0x7c, 0x49, 0xf2, 0x48, 0xd6, 0x6b, 0x01, 0x0f, 0x59, 0xc0, 0x81, 0x3c, 0xc1, + 0x95, 0x8c, 0x32, 0xf5, 0x64, 0x9b, 0xaa, 0x2d, 0xbd, 0x58, 0x3e, 0x15, 0xdc, 0xf5, 0xac, 0xff, + 0x79, 0xf6, 0x45, 0xee, 0xe1, 0x65, 0x9e, 0xf6, 0x29, 0x70, 0xc1, 0x0e, 0xe2, 0xd1, 0x00, 0x22, + 0xd9, 0x85, 0xb2, 0x55, 0x1b, 0x5f, 0xf7, 0xe4, 0xad, 0xfe, 0x19, 0xe1, 0x95, 0x09, 0xf9, 0xff, + 0x5d, 0x7e, 0xb2, 0x83, 0xe7, 0xd5, 0x23, 0x51, 0x3d, 0xbd, 0x53, 0x9c, 0x25, 0xf7, 0x3a, 0x54, + 0x88, 0xfe, 0xbd, 0x84, 0xf5, 0xa9, 0x6a, 0xaa, 0x77, 0xbf, 0x37, 0x13, 0x99, 0x76, 0x49, 0x43, + 0x39, 0x42, 0x9b, 0x05, 0x84, 0xa4, 0xdb, 0x45, 0x52, 0x8f, 0x67, 0x20, 0x25, 0x81, 0x54, 0x18, + 0x79, 0x8d, 0xaf, 0x32, 0xd5, 0x93, 0xfc, 0x26, 0xd2, 0xe6, 0x2e, 0x3f, 0x47, 0x2b, 0x6c, 0xa2, + 0xb7, 0x85, 0xc3, 0x30, 0x5f, 0x3c, 0x0c, 0xad, 0xaf, 0x25, 0xbc, 0x92, 0x97, 0x5a, 0x41, 0x9d, + 0x23, 0xbc, 0xfa, 0xc7, 0x1d, 0x41, 0x1e, 0xce, 0xb6, 0x54, 0xea, 0xd7, 0x27, 0x66, 0xba, 0x93, + 0xae, 0x38, 0xfd, 0xee, 0xfb, 0x2f, 0xdf, 0x3e, 0x94, 0x1a, 0xfa, 0x5a, 0xba, 0x39, 0xfd, 0xdf, + 0x42, 0xf9, 0x4e, 0xb6, 0xb5, 0x77, 0xd0, 0x7d, 0xf2, 0x09, 0xe1, 0xb5, 0x29, 0x4f, 0x82, 0x5c, + 0x46, 0xbc, 0xfa, 0xee, 0x5f, 0x49, 0x4c, 0x1b, 0x62, 0x7d, 0x43, 0xd6, 0x7c, 0x43, 0x27, 0x69, + 0xcd, 0x70, 0xb1, 0xd4, 0x26, 0x7a, 0x80, 0xda, 0x21, 0x5e, 0x77, 0xd9, 0xa8, 0x30, 0x4d, 0x7b, + 0xb1, 0xed, 0xb8, 0xa7, 0x10, 0x78, 0x87, 0xa9, 0x1a, 0x87, 0xe8, 0xd5, 0x6e, 0xe6, 0x39, 0x64, + 0xbe, 0x13, 0x0c, 0x0d, 0x16, 0x0d, 0xcd, 0x21, 0x04, 0x52, 0x2b, 0x53, 0x99, 0x9c, 0x90, 0xf2, + 0xc9, 0x9f, 0xcd, 0x23, 0xf9, 0xf1, 0x03, 0xa1, 0xc1, 0x82, 0x74, 0xde, 0xfe, 0x19, 0x00, 0x00, + 0xff, 0xff, 0x85, 0x4c, 0x16, 0x72, 0x04, 0x07, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/cloudbuild/v1/cloudbuild.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/cloudbuild/v1/cloudbuild.pb.go index 9721b6c..5f0a7ad 100644 --- a/vendor/google.golang.org/genproto/googleapis/devtools/cloudbuild/v1/cloudbuild.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/devtools/cloudbuild/v1/cloudbuild.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/devtools/cloudbuild/v1/cloudbuild.proto -// DO NOT EDIT! /* Package cloudbuild is a generated protocol buffer package. @@ -9,17 +8,22 @@ It is generated from these files: google/devtools/cloudbuild/v1/cloudbuild.proto It has these top-level messages: + RetryBuildRequest + RunBuildTriggerRequest StorageSource RepoSource Source BuiltImage BuildStep + Volume Results Build + TimeSpan BuildOperationMetadata SourceProvenance FileHashes Hash + Secret CreateBuildRequest GetBuildRequest ListBuildsRequest @@ -40,10 +44,11 @@ import proto "github.com/golang/protobuf/proto" import fmt "fmt" import math "math" import _ "google.golang.org/genproto/googleapis/api/annotations" +import _ "google.golang.org/genproto/googleapis/cloud/audit" import google_longrunning "google.golang.org/genproto/googleapis/longrunning" -import google_protobuf3 "github.com/golang/protobuf/ptypes/duration" -import google_protobuf2 "github.com/golang/protobuf/ptypes/empty" -import google_protobuf4 "github.com/golang/protobuf/ptypes/timestamp" +import google_protobuf4 "github.com/golang/protobuf/ptypes/duration" +import google_protobuf3 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf5 "github.com/golang/protobuf/ptypes/timestamp" import ( context "golang.org/x/net/context" @@ -61,25 +66,25 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package -// Possible status of a build. +// Possible status of a build or build step. type Build_Status int32 const ( // Status of the build is unknown. Build_STATUS_UNKNOWN Build_Status = 0 - // Build is queued; work has not yet begun. + // Build or step is queued; work has not yet begun. Build_QUEUED Build_Status = 1 - // Build is being executed. + // Build or step is being executed. Build_WORKING Build_Status = 2 - // Build finished successfully. + // Build or step finished successfully. Build_SUCCESS Build_Status = 3 - // Build failed to complete successfully. + // Build or step failed to complete successfully. Build_FAILURE Build_Status = 4 - // Build failed due to an internal cause. + // Build or step failed due to an internal cause. Build_INTERNAL_ERROR Build_Status = 5 - // Build took longer than was allowed. + // Build or step took longer than was allowed. Build_TIMEOUT Build_Status = 6 - // Build was canceled by a user. + // Build or step was canceled by a user. Build_CANCELLED Build_Status = 7 ) @@ -107,7 +112,7 @@ var Build_Status_value = map[string]int32{ func (x Build_Status) String() string { return proto.EnumName(Build_Status_name, int32(x)) } -func (Build_Status) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{6, 0} } +func (Build_Status) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{9, 0} } // Specifies the hash algorithm, if any. type Hash_HashType int32 @@ -131,7 +136,7 @@ var Hash_HashType_value = map[string]int32{ func (x Hash_HashType) String() string { return proto.EnumName(Hash_HashType_name, int32(x)) } -func (Hash_HashType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{10, 0} } +func (Hash_HashType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{14, 0} } // Specifies the manner in which the build should be verified, if at all. type BuildOptions_VerifyOption int32 @@ -156,7 +161,157 @@ func (x BuildOptions_VerifyOption) String() string { return proto.EnumName(BuildOptions_VerifyOption_name, int32(x)) } func (BuildOptions_VerifyOption) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{23, 0} + return fileDescriptor0, []int{28, 0} +} + +// Supported VM sizes. +type BuildOptions_MachineType int32 + +const ( + // Standard machine type. + BuildOptions_UNSPECIFIED BuildOptions_MachineType = 0 + // Highcpu machine with 8 CPUs. + BuildOptions_N1_HIGHCPU_8 BuildOptions_MachineType = 1 + // Highcpu machine with 32 CPUs. + BuildOptions_N1_HIGHCPU_32 BuildOptions_MachineType = 2 +) + +var BuildOptions_MachineType_name = map[int32]string{ + 0: "UNSPECIFIED", + 1: "N1_HIGHCPU_8", + 2: "N1_HIGHCPU_32", +} +var BuildOptions_MachineType_value = map[string]int32{ + "UNSPECIFIED": 0, + "N1_HIGHCPU_8": 1, + "N1_HIGHCPU_32": 2, +} + +func (x BuildOptions_MachineType) String() string { + return proto.EnumName(BuildOptions_MachineType_name, int32(x)) +} +func (BuildOptions_MachineType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{28, 1} } + +// Specifies the behavior when there is an error in the substitution checks. +type BuildOptions_SubstitutionOption int32 + +const ( + // Fails the build if error in substitutions checks, like missing + // a substitution in the template or in the map. + BuildOptions_MUST_MATCH BuildOptions_SubstitutionOption = 0 + // Do not fail the build if error in substitutions checks. + BuildOptions_ALLOW_LOOSE BuildOptions_SubstitutionOption = 1 +) + +var BuildOptions_SubstitutionOption_name = map[int32]string{ + 0: "MUST_MATCH", + 1: "ALLOW_LOOSE", +} +var BuildOptions_SubstitutionOption_value = map[string]int32{ + "MUST_MATCH": 0, + "ALLOW_LOOSE": 1, +} + +func (x BuildOptions_SubstitutionOption) String() string { + return proto.EnumName(BuildOptions_SubstitutionOption_name, int32(x)) +} +func (BuildOptions_SubstitutionOption) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{28, 2} +} + +// Specifies the behavior when writing build logs to Google Cloud Storage. +type BuildOptions_LogStreamingOption int32 + +const ( + // Service may automatically determine build log streaming behavior. + BuildOptions_STREAM_DEFAULT BuildOptions_LogStreamingOption = 0 + // Build logs should be streamed to Google Cloud Storage. + BuildOptions_STREAM_ON BuildOptions_LogStreamingOption = 1 + // Build logs should not be streamed to Google Cloud Storage; they will be + // written when the build is completed. + BuildOptions_STREAM_OFF BuildOptions_LogStreamingOption = 2 +) + +var BuildOptions_LogStreamingOption_name = map[int32]string{ + 0: "STREAM_DEFAULT", + 1: "STREAM_ON", + 2: "STREAM_OFF", +} +var BuildOptions_LogStreamingOption_value = map[string]int32{ + "STREAM_DEFAULT": 0, + "STREAM_ON": 1, + "STREAM_OFF": 2, +} + +func (x BuildOptions_LogStreamingOption) String() string { + return proto.EnumName(BuildOptions_LogStreamingOption_name, int32(x)) +} +func (BuildOptions_LogStreamingOption) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{28, 3} +} + +// RetryBuildRequest specifies a build to retry. +type RetryBuildRequest struct { + // ID of the project. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Build ID of the original build. + Id string `protobuf:"bytes,2,opt,name=id" json:"id,omitempty"` +} + +func (m *RetryBuildRequest) Reset() { *m = RetryBuildRequest{} } +func (m *RetryBuildRequest) String() string { return proto.CompactTextString(m) } +func (*RetryBuildRequest) ProtoMessage() {} +func (*RetryBuildRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *RetryBuildRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *RetryBuildRequest) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +// RunBuildTriggerRequest specifies a build trigger to run and the source to +// use. +type RunBuildTriggerRequest struct { + // ID of the project. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // ID of the trigger. + TriggerId string `protobuf:"bytes,2,opt,name=trigger_id,json=triggerId" json:"trigger_id,omitempty"` + // Source to build against this trigger. + Source *RepoSource `protobuf:"bytes,3,opt,name=source" json:"source,omitempty"` +} + +func (m *RunBuildTriggerRequest) Reset() { *m = RunBuildTriggerRequest{} } +func (m *RunBuildTriggerRequest) String() string { return proto.CompactTextString(m) } +func (*RunBuildTriggerRequest) ProtoMessage() {} +func (*RunBuildTriggerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *RunBuildTriggerRequest) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *RunBuildTriggerRequest) GetTriggerId() string { + if m != nil { + return m.TriggerId + } + return "" +} + +func (m *RunBuildTriggerRequest) GetSource() *RepoSource { + if m != nil { + return m.Source + } + return nil } // StorageSource describes the location of the source in an archive file in @@ -179,7 +334,7 @@ type StorageSource struct { func (m *StorageSource) Reset() { *m = StorageSource{} } func (m *StorageSource) String() string { return proto.CompactTextString(m) } func (*StorageSource) ProtoMessage() {} -func (*StorageSource) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } +func (*StorageSource) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } func (m *StorageSource) GetBucket() string { if m != nil { @@ -218,12 +373,17 @@ type RepoSource struct { // *RepoSource_TagName // *RepoSource_CommitSha Revision isRepoSource_Revision `protobuf_oneof:"revision"` + // Directory, relative to the source root, in which to run the build. + // + // This must be a relative path. If a step's dir is specified and is an + // absolute path, this value is ignored for that step's execution. + Dir string `protobuf:"bytes,7,opt,name=dir" json:"dir,omitempty"` } func (m *RepoSource) Reset() { *m = RepoSource{} } func (m *RepoSource) String() string { return proto.CompactTextString(m) } func (*RepoSource) ProtoMessage() {} -func (*RepoSource) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } +func (*RepoSource) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } type isRepoSource_Revision interface { isRepoSource_Revision() @@ -285,6 +445,13 @@ func (m *RepoSource) GetCommitSha() string { return "" } +func (m *RepoSource) GetDir() string { + if m != nil { + return m.Dir + } + return "" +} + // XXX_OneofFuncs is for the internal use of the proto package. func (*RepoSource) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { return _RepoSource_OneofMarshaler, _RepoSource_OneofUnmarshaler, _RepoSource_OneofSizer, []interface{}{ @@ -380,7 +547,7 @@ type Source struct { func (m *Source) Reset() { *m = Source{} } func (m *Source) String() string { return proto.CompactTextString(m) } func (*Source) ProtoMessage() {} -func (*Source) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } +func (*Source) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } type isSource_Source interface { isSource_Source() @@ -498,12 +665,15 @@ type BuiltImage struct { Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` // Docker Registry 2.0 digest. Digest string `protobuf:"bytes,3,opt,name=digest" json:"digest,omitempty"` + // Stores timing information for pushing the specified image. + // @OutputOnly + PushTiming *TimeSpan `protobuf:"bytes,4,opt,name=push_timing,json=pushTiming" json:"push_timing,omitempty"` } func (m *BuiltImage) Reset() { *m = BuiltImage{} } func (m *BuiltImage) String() string { return proto.CompactTextString(m) } func (*BuiltImage) ProtoMessage() {} -func (*BuiltImage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } +func (*BuiltImage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } func (m *BuiltImage) GetName() string { if m != nil { @@ -519,6 +689,13 @@ func (m *BuiltImage) GetDigest() string { return "" } +func (m *BuiltImage) GetPushTiming() *TimeSpan { + if m != nil { + return m.PushTiming + } + return nil +} + // BuildStep describes a step to perform in the build pipeline. type BuildStep struct { // The name of the container image that will run this particular build step. @@ -529,10 +706,10 @@ type BuildStep struct { // // The Docker daemon's cache will already have the latest versions of all of // the officially supported build steps - // (https://github.com/GoogleCloudPlatform/cloud-builders). The Docker daemon - // will also have cached many of the layers for some popular images, like - // "ubuntu", "debian", but they will be refreshed at the time you attempt to - // use them. + // ([https://github.com/GoogleCloudPlatform/cloud-builders](https://github.com/GoogleCloudPlatform/cloud-builders)). + // The Docker daemon will also have cached many of the layers for some popular + // images, like "ubuntu", "debian", but they will be refreshed at the time you + // attempt to use them. // // If you built an image in a previous build step, it will be stored in the // host's Docker daemon's cache and is available to use as the name for a @@ -550,8 +727,16 @@ type BuildStep struct { // an entrypoint, the first element in args will be used as the entrypoint, // and the remainder will be used as arguments. Args []string `protobuf:"bytes,3,rep,name=args" json:"args,omitempty"` - // Working directory (relative to project source root) to use when running - // this operation's container. + // Working directory to use when running this step's container. + // + // If this value is a relative path, it is relative to the build's working + // directory. If this value is absolute, it may be outside the build's working + // directory, in which case the contents of the path may not be persisted + // across build step executions, unless a volume for that path is specified. + // + // If the build specifies a RepoSource with dir and a step with a dir which + // specifies an absolute path, the RepoSource dir is ignored for the step's + // execution. Dir string `protobuf:"bytes,4,opt,name=dir" json:"dir,omitempty"` // Optional unique identifier for this build step, used in wait_for to // reference this build step as a dependency. @@ -565,12 +750,36 @@ type BuildStep struct { // Optional entrypoint to be used instead of the build step image's default // If unset, the image's default will be used. Entrypoint string `protobuf:"bytes,7,opt,name=entrypoint" json:"entrypoint,omitempty"` + // A list of environment variables which are encrypted using a Cloud KMS + // crypto key. These values must be specified in the build's secrets. + SecretEnv []string `protobuf:"bytes,8,rep,name=secret_env,json=secretEnv" json:"secret_env,omitempty"` + // List of volumes to mount into the build step. + // + // Each volume will be created as an empty volume prior to execution of the + // build step. Upon completion of the build, volumes and their contents will + // be discarded. + // + // Using a named volume in only one step is not valid as it is indicative + // of a mis-configured build request. + Volumes []*Volume `protobuf:"bytes,9,rep,name=volumes" json:"volumes,omitempty"` + // Stores timing information for executing this build step. + // @OutputOnly + Timing *TimeSpan `protobuf:"bytes,10,opt,name=timing" json:"timing,omitempty"` + // Time limit for executing this build step. If not defined, the step has no + // time limit and will be allowed to continue to run until either it completes + // or the build itself times out. + Timeout *google_protobuf4.Duration `protobuf:"bytes,11,opt,name=timeout" json:"timeout,omitempty"` + // Status of the build step. At this time, build step status is only updated + // on build completion; step status is not updated in real-time as the build + // progresses. + // @OutputOnly + Status Build_Status `protobuf:"varint,12,opt,name=status,enum=google.devtools.cloudbuild.v1.Build_Status" json:"status,omitempty"` } func (m *BuildStep) Reset() { *m = BuildStep{} } func (m *BuildStep) String() string { return proto.CompactTextString(m) } func (*BuildStep) ProtoMessage() {} -func (*BuildStep) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } +func (*BuildStep) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } func (m *BuildStep) GetName() string { if m != nil { @@ -621,6 +830,75 @@ func (m *BuildStep) GetEntrypoint() string { return "" } +func (m *BuildStep) GetSecretEnv() []string { + if m != nil { + return m.SecretEnv + } + return nil +} + +func (m *BuildStep) GetVolumes() []*Volume { + if m != nil { + return m.Volumes + } + return nil +} + +func (m *BuildStep) GetTiming() *TimeSpan { + if m != nil { + return m.Timing + } + return nil +} + +func (m *BuildStep) GetTimeout() *google_protobuf4.Duration { + if m != nil { + return m.Timeout + } + return nil +} + +func (m *BuildStep) GetStatus() Build_Status { + if m != nil { + return m.Status + } + return Build_STATUS_UNKNOWN +} + +// Volume describes a Docker container volume which is mounted into build steps +// in order to persist files across build step execution. +type Volume struct { + // Name of the volume to mount. + // + // Volume names must be unique per build step and must be valid names for + // Docker volumes. Each named volume must be used by at least two build steps. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Path at which to mount the volume. + // + // Paths must be absolute and cannot conflict with other volume paths on the + // same build step or with certain reserved volume paths. + Path string `protobuf:"bytes,2,opt,name=path" json:"path,omitempty"` +} + +func (m *Volume) Reset() { *m = Volume{} } +func (m *Volume) String() string { return proto.CompactTextString(m) } +func (*Volume) ProtoMessage() {} +func (*Volume) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *Volume) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Volume) GetPath() string { + if m != nil { + return m.Path + } + return "" +} + // Results describes the artifacts created by the build pipeline. type Results struct { // Images that were built as a part of the build. @@ -632,7 +910,7 @@ type Results struct { func (m *Results) Reset() { *m = Results{} } func (m *Results) String() string { return proto.CompactTextString(m) } func (*Results) ProtoMessage() {} -func (*Results) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } +func (*Results) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } func (m *Results) GetImages() []*BuiltImage { if m != nil { @@ -664,6 +942,7 @@ func (m *Results) GetBuildStepImages() []string { // - $TAG_NAME: the tag name specified by RepoSource. // - $REVISION_ID or $COMMIT_SHA: the commit SHA specified by RepoSource or // resolved from the specified branch or tag. +// - $SHORT_SHA: first 7 characters of $REVISION_ID or $COMMIT_SHA. type Build struct { // Unique identifier of the build. // @OutputOnly @@ -686,22 +965,22 @@ type Build struct { Results *Results `protobuf:"bytes,10,opt,name=results" json:"results,omitempty"` // Time at which the request to create the build was received. // @OutputOnly - CreateTime *google_protobuf4.Timestamp `protobuf:"bytes,6,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + CreateTime *google_protobuf5.Timestamp `protobuf:"bytes,6,opt,name=create_time,json=createTime" json:"create_time,omitempty"` // Time at which execution of the build was started. // @OutputOnly - StartTime *google_protobuf4.Timestamp `protobuf:"bytes,7,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + StartTime *google_protobuf5.Timestamp `protobuf:"bytes,7,opt,name=start_time,json=startTime" json:"start_time,omitempty"` // Time at which execution of the build was finished. // // The difference between finish_time and start_time is the duration of the // build's execution. // @OutputOnly - FinishTime *google_protobuf4.Timestamp `protobuf:"bytes,8,opt,name=finish_time,json=finishTime" json:"finish_time,omitempty"` + FinishTime *google_protobuf5.Timestamp `protobuf:"bytes,8,opt,name=finish_time,json=finishTime" json:"finish_time,omitempty"` // Amount of time that this build should be allowed to run, to second // granularity. If this amount of time elapses, work on the build will cease // and the build status will be TIMEOUT. // // Default time is ten minutes. - Timeout *google_protobuf3.Duration `protobuf:"bytes,12,opt,name=timeout" json:"timeout,omitempty"` + Timeout *google_protobuf4.Duration `protobuf:"bytes,12,opt,name=timeout" json:"timeout,omitempty"` // A list of images to be pushed upon the successful completion of all build // steps. // @@ -726,17 +1005,31 @@ type Build struct { BuildTriggerId string `protobuf:"bytes,22,opt,name=build_trigger_id,json=buildTriggerId" json:"build_trigger_id,omitempty"` // Special options for this build. Options *BuildOptions `protobuf:"bytes,23,opt,name=options" json:"options,omitempty"` - // URL to logs for this build in Google Cloud Logging. + // URL to logs for this build in Google Cloud Console. // @OutputOnly LogUrl string `protobuf:"bytes,25,opt,name=log_url,json=logUrl" json:"log_url,omitempty"` // Substitutions data for Build resource. Substitutions map[string]string `protobuf:"bytes,29,rep,name=substitutions" json:"substitutions,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Tags for annotation of a Build. These are not docker tags. + Tags []string `protobuf:"bytes,31,rep,name=tags" json:"tags,omitempty"` + // Secrets to decrypt using Cloud KMS. + Secrets []*Secret `protobuf:"bytes,32,rep,name=secrets" json:"secrets,omitempty"` + // Stores timing information for phases of the build. Valid keys are: + // + // * BUILD: time to execute all build steps + // * PUSH: time to push all specified images. + // * FETCHSOURCE: time to fetch source. + // + // If the build does not specify source, or does not specify images, + // these keys will not be included. + // @OutputOnly + Timing map[string]*TimeSpan `protobuf:"bytes,33,rep,name=timing" json:"timing,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` } func (m *Build) Reset() { *m = Build{} } func (m *Build) String() string { return proto.CompactTextString(m) } func (*Build) ProtoMessage() {} -func (*Build) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } +func (*Build) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } func (m *Build) GetId() string { if m != nil { @@ -787,28 +1080,28 @@ func (m *Build) GetResults() *Results { return nil } -func (m *Build) GetCreateTime() *google_protobuf4.Timestamp { +func (m *Build) GetCreateTime() *google_protobuf5.Timestamp { if m != nil { return m.CreateTime } return nil } -func (m *Build) GetStartTime() *google_protobuf4.Timestamp { +func (m *Build) GetStartTime() *google_protobuf5.Timestamp { if m != nil { return m.StartTime } return nil } -func (m *Build) GetFinishTime() *google_protobuf4.Timestamp { +func (m *Build) GetFinishTime() *google_protobuf5.Timestamp { if m != nil { return m.FinishTime } return nil } -func (m *Build) GetTimeout() *google_protobuf3.Duration { +func (m *Build) GetTimeout() *google_protobuf4.Duration { if m != nil { return m.Timeout } @@ -864,6 +1157,54 @@ func (m *Build) GetSubstitutions() map[string]string { return nil } +func (m *Build) GetTags() []string { + if m != nil { + return m.Tags + } + return nil +} + +func (m *Build) GetSecrets() []*Secret { + if m != nil { + return m.Secrets + } + return nil +} + +func (m *Build) GetTiming() map[string]*TimeSpan { + if m != nil { + return m.Timing + } + return nil +} + +// Stores start and end times for a build execution phase. +type TimeSpan struct { + // Start of time span. + StartTime *google_protobuf5.Timestamp `protobuf:"bytes,1,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // End of time span. + EndTime *google_protobuf5.Timestamp `protobuf:"bytes,2,opt,name=end_time,json=endTime" json:"end_time,omitempty"` +} + +func (m *TimeSpan) Reset() { *m = TimeSpan{} } +func (m *TimeSpan) String() string { return proto.CompactTextString(m) } +func (*TimeSpan) ProtoMessage() {} +func (*TimeSpan) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *TimeSpan) GetStartTime() *google_protobuf5.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *TimeSpan) GetEndTime() *google_protobuf5.Timestamp { + if m != nil { + return m.EndTime + } + return nil +} + // Metadata for build operations. type BuildOperationMetadata struct { // The build that the operation is tracking. @@ -873,7 +1214,7 @@ type BuildOperationMetadata struct { func (m *BuildOperationMetadata) Reset() { *m = BuildOperationMetadata{} } func (m *BuildOperationMetadata) String() string { return proto.CompactTextString(m) } func (*BuildOperationMetadata) ProtoMessage() {} -func (*BuildOperationMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } +func (*BuildOperationMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } func (m *BuildOperationMetadata) GetBuild() *Build { if m != nil { @@ -907,7 +1248,7 @@ type SourceProvenance struct { func (m *SourceProvenance) Reset() { *m = SourceProvenance{} } func (m *SourceProvenance) String() string { return proto.CompactTextString(m) } func (*SourceProvenance) ProtoMessage() {} -func (*SourceProvenance) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } +func (*SourceProvenance) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } func (m *SourceProvenance) GetResolvedStorageSource() *StorageSource { if m != nil { @@ -940,7 +1281,7 @@ type FileHashes struct { func (m *FileHashes) Reset() { *m = FileHashes{} } func (m *FileHashes) String() string { return proto.CompactTextString(m) } func (*FileHashes) ProtoMessage() {} -func (*FileHashes) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } +func (*FileHashes) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } func (m *FileHashes) GetFileHash() []*Hash { if m != nil { @@ -960,7 +1301,7 @@ type Hash struct { func (m *Hash) Reset() { *m = Hash{} } func (m *Hash) String() string { return proto.CompactTextString(m) } func (*Hash) ProtoMessage() {} -func (*Hash) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } +func (*Hash) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } func (m *Hash) GetType() Hash_HashType { if m != nil { @@ -976,6 +1317,39 @@ func (m *Hash) GetValue() []byte { return nil } +// Secret pairs a set of secret environment variables containing encrypted +// values with the Cloud KMS key to use to decrypt the value. +type Secret struct { + // Cloud KMS key name to use to decrypt these envs. + KmsKeyName string `protobuf:"bytes,1,opt,name=kms_key_name,json=kmsKeyName" json:"kms_key_name,omitempty"` + // Map of environment variable name to its encrypted value. + // + // Secret environment variables must be unique across all of a build's + // secrets, and must be used by at least one build step. Values can be at most + // 1 KB in size. There can be at most ten secret values across all of a + // build's secrets. + SecretEnv map[string][]byte `protobuf:"bytes,3,rep,name=secret_env,json=secretEnv" json:"secret_env,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (m *Secret) Reset() { *m = Secret{} } +func (m *Secret) String() string { return proto.CompactTextString(m) } +func (*Secret) ProtoMessage() {} +func (*Secret) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +func (m *Secret) GetKmsKeyName() string { + if m != nil { + return m.KmsKeyName + } + return "" +} + +func (m *Secret) GetSecretEnv() map[string][]byte { + if m != nil { + return m.SecretEnv + } + return nil +} + // Request to create a new build. type CreateBuildRequest struct { // ID of the project. @@ -987,7 +1361,7 @@ type CreateBuildRequest struct { func (m *CreateBuildRequest) Reset() { *m = CreateBuildRequest{} } func (m *CreateBuildRequest) String() string { return proto.CompactTextString(m) } func (*CreateBuildRequest) ProtoMessage() {} -func (*CreateBuildRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } +func (*CreateBuildRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } func (m *CreateBuildRequest) GetProjectId() string { if m != nil { @@ -1014,7 +1388,7 @@ type GetBuildRequest struct { func (m *GetBuildRequest) Reset() { *m = GetBuildRequest{} } func (m *GetBuildRequest) String() string { return proto.CompactTextString(m) } func (*GetBuildRequest) ProtoMessage() {} -func (*GetBuildRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } +func (*GetBuildRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } func (m *GetBuildRequest) GetProjectId() string { if m != nil { @@ -1045,7 +1419,7 @@ type ListBuildsRequest struct { func (m *ListBuildsRequest) Reset() { *m = ListBuildsRequest{} } func (m *ListBuildsRequest) String() string { return proto.CompactTextString(m) } func (*ListBuildsRequest) ProtoMessage() {} -func (*ListBuildsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } +func (*ListBuildsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } func (m *ListBuildsRequest) GetProjectId() string { if m != nil { @@ -1086,7 +1460,7 @@ type ListBuildsResponse struct { func (m *ListBuildsResponse) Reset() { *m = ListBuildsResponse{} } func (m *ListBuildsResponse) String() string { return proto.CompactTextString(m) } func (*ListBuildsResponse) ProtoMessage() {} -func (*ListBuildsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } +func (*ListBuildsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } func (m *ListBuildsResponse) GetBuilds() []*Build { if m != nil { @@ -1113,7 +1487,7 @@ type CancelBuildRequest struct { func (m *CancelBuildRequest) Reset() { *m = CancelBuildRequest{} } func (m *CancelBuildRequest) String() string { return proto.CompactTextString(m) } func (*CancelBuildRequest) ProtoMessage() {} -func (*CancelBuildRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } +func (*CancelBuildRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } func (m *CancelBuildRequest) GetProjectId() string { if m != nil { @@ -1153,7 +1527,7 @@ type BuildTrigger struct { // Time when the trigger was created. // // @OutputOnly - CreateTime *google_protobuf4.Timestamp `protobuf:"bytes,5,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + CreateTime *google_protobuf5.Timestamp `protobuf:"bytes,5,opt,name=create_time,json=createTime" json:"create_time,omitempty"` // If true, the trigger will never result in a build. Disabled bool `protobuf:"varint,9,opt,name=disabled" json:"disabled,omitempty"` // Substitutions data for Build resource. @@ -1163,7 +1537,7 @@ type BuildTrigger struct { func (m *BuildTrigger) Reset() { *m = BuildTrigger{} } func (m *BuildTrigger) String() string { return proto.CompactTextString(m) } func (*BuildTrigger) ProtoMessage() {} -func (*BuildTrigger) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } +func (*BuildTrigger) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } type isBuildTrigger_BuildTemplate interface { isBuildTrigger_BuildTemplate() @@ -1221,7 +1595,7 @@ func (m *BuildTrigger) GetFilename() string { return "" } -func (m *BuildTrigger) GetCreateTime() *google_protobuf4.Timestamp { +func (m *BuildTrigger) GetCreateTime() *google_protobuf5.Timestamp { if m != nil { return m.CreateTime } @@ -1323,7 +1697,7 @@ type CreateBuildTriggerRequest struct { func (m *CreateBuildTriggerRequest) Reset() { *m = CreateBuildTriggerRequest{} } func (m *CreateBuildTriggerRequest) String() string { return proto.CompactTextString(m) } func (*CreateBuildTriggerRequest) ProtoMessage() {} -func (*CreateBuildTriggerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } +func (*CreateBuildTriggerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } func (m *CreateBuildTriggerRequest) GetProjectId() string { if m != nil { @@ -1350,7 +1724,7 @@ type GetBuildTriggerRequest struct { func (m *GetBuildTriggerRequest) Reset() { *m = GetBuildTriggerRequest{} } func (m *GetBuildTriggerRequest) String() string { return proto.CompactTextString(m) } func (*GetBuildTriggerRequest) ProtoMessage() {} -func (*GetBuildTriggerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } +func (*GetBuildTriggerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } func (m *GetBuildTriggerRequest) GetProjectId() string { if m != nil { @@ -1375,7 +1749,7 @@ type ListBuildTriggersRequest struct { func (m *ListBuildTriggersRequest) Reset() { *m = ListBuildTriggersRequest{} } func (m *ListBuildTriggersRequest) String() string { return proto.CompactTextString(m) } func (*ListBuildTriggersRequest) ProtoMessage() {} -func (*ListBuildTriggersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } +func (*ListBuildTriggersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} } func (m *ListBuildTriggersRequest) GetProjectId() string { if m != nil { @@ -1393,7 +1767,7 @@ type ListBuildTriggersResponse struct { func (m *ListBuildTriggersResponse) Reset() { *m = ListBuildTriggersResponse{} } func (m *ListBuildTriggersResponse) String() string { return proto.CompactTextString(m) } func (*ListBuildTriggersResponse) ProtoMessage() {} -func (*ListBuildTriggersResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } +func (*ListBuildTriggersResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } func (m *ListBuildTriggersResponse) GetTriggers() []*BuildTrigger { if m != nil { @@ -1413,7 +1787,7 @@ type DeleteBuildTriggerRequest struct { func (m *DeleteBuildTriggerRequest) Reset() { *m = DeleteBuildTriggerRequest{} } func (m *DeleteBuildTriggerRequest) String() string { return proto.CompactTextString(m) } func (*DeleteBuildTriggerRequest) ProtoMessage() {} -func (*DeleteBuildTriggerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } +func (*DeleteBuildTriggerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} } func (m *DeleteBuildTriggerRequest) GetProjectId() string { if m != nil { @@ -1442,7 +1816,7 @@ type UpdateBuildTriggerRequest struct { func (m *UpdateBuildTriggerRequest) Reset() { *m = UpdateBuildTriggerRequest{} } func (m *UpdateBuildTriggerRequest) String() string { return proto.CompactTextString(m) } func (*UpdateBuildTriggerRequest) ProtoMessage() {} -func (*UpdateBuildTriggerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } +func (*UpdateBuildTriggerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} } func (m *UpdateBuildTriggerRequest) GetProjectId() string { if m != nil { @@ -1471,12 +1845,26 @@ type BuildOptions struct { SourceProvenanceHash []Hash_HashType `protobuf:"varint,1,rep,packed,name=source_provenance_hash,json=sourceProvenanceHash,enum=google.devtools.cloudbuild.v1.Hash_HashType" json:"source_provenance_hash,omitempty"` // Requested verifiability options. RequestedVerifyOption BuildOptions_VerifyOption `protobuf:"varint,2,opt,name=requested_verify_option,json=requestedVerifyOption,enum=google.devtools.cloudbuild.v1.BuildOptions_VerifyOption" json:"requested_verify_option,omitempty"` + // Compute Engine machine type on which to run the build. + MachineType BuildOptions_MachineType `protobuf:"varint,3,opt,name=machine_type,json=machineType,enum=google.devtools.cloudbuild.v1.BuildOptions_MachineType" json:"machine_type,omitempty"` + // Requested disk size for the VM that runs the build. Note that this is *NOT* + // "disk free"; some of the space will be used by the operating system and + // build utilities. Also note that this is the minimum disk size that will be + // allocated for the build -- the build may run with a larger disk than + // requested. At present, the maximum disk size is 1000GB; builds that request + // more than the maximum are rejected with an error. + DiskSizeGb int64 `protobuf:"varint,6,opt,name=disk_size_gb,json=diskSizeGb" json:"disk_size_gb,omitempty"` + // SubstitutionOption to allow unmatch substitutions. + SubstitutionOption BuildOptions_SubstitutionOption `protobuf:"varint,4,opt,name=substitution_option,json=substitutionOption,enum=google.devtools.cloudbuild.v1.BuildOptions_SubstitutionOption" json:"substitution_option,omitempty"` + // LogStreamingOption to define build log streaming behavior to Google Cloud + // Storage. + LogStreamingOption BuildOptions_LogStreamingOption `protobuf:"varint,5,opt,name=log_streaming_option,json=logStreamingOption,enum=google.devtools.cloudbuild.v1.BuildOptions_LogStreamingOption" json:"log_streaming_option,omitempty"` } func (m *BuildOptions) Reset() { *m = BuildOptions{} } func (m *BuildOptions) String() string { return proto.CompactTextString(m) } func (*BuildOptions) ProtoMessage() {} -func (*BuildOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } +func (*BuildOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} } func (m *BuildOptions) GetSourceProvenanceHash() []Hash_HashType { if m != nil { @@ -1492,18 +1880,51 @@ func (m *BuildOptions) GetRequestedVerifyOption() BuildOptions_VerifyOption { return BuildOptions_NOT_VERIFIED } +func (m *BuildOptions) GetMachineType() BuildOptions_MachineType { + if m != nil { + return m.MachineType + } + return BuildOptions_UNSPECIFIED +} + +func (m *BuildOptions) GetDiskSizeGb() int64 { + if m != nil { + return m.DiskSizeGb + } + return 0 +} + +func (m *BuildOptions) GetSubstitutionOption() BuildOptions_SubstitutionOption { + if m != nil { + return m.SubstitutionOption + } + return BuildOptions_MUST_MATCH +} + +func (m *BuildOptions) GetLogStreamingOption() BuildOptions_LogStreamingOption { + if m != nil { + return m.LogStreamingOption + } + return BuildOptions_STREAM_DEFAULT +} + func init() { + proto.RegisterType((*RetryBuildRequest)(nil), "google.devtools.cloudbuild.v1.RetryBuildRequest") + proto.RegisterType((*RunBuildTriggerRequest)(nil), "google.devtools.cloudbuild.v1.RunBuildTriggerRequest") proto.RegisterType((*StorageSource)(nil), "google.devtools.cloudbuild.v1.StorageSource") proto.RegisterType((*RepoSource)(nil), "google.devtools.cloudbuild.v1.RepoSource") proto.RegisterType((*Source)(nil), "google.devtools.cloudbuild.v1.Source") proto.RegisterType((*BuiltImage)(nil), "google.devtools.cloudbuild.v1.BuiltImage") proto.RegisterType((*BuildStep)(nil), "google.devtools.cloudbuild.v1.BuildStep") + proto.RegisterType((*Volume)(nil), "google.devtools.cloudbuild.v1.Volume") proto.RegisterType((*Results)(nil), "google.devtools.cloudbuild.v1.Results") proto.RegisterType((*Build)(nil), "google.devtools.cloudbuild.v1.Build") + proto.RegisterType((*TimeSpan)(nil), "google.devtools.cloudbuild.v1.TimeSpan") proto.RegisterType((*BuildOperationMetadata)(nil), "google.devtools.cloudbuild.v1.BuildOperationMetadata") proto.RegisterType((*SourceProvenance)(nil), "google.devtools.cloudbuild.v1.SourceProvenance") proto.RegisterType((*FileHashes)(nil), "google.devtools.cloudbuild.v1.FileHashes") proto.RegisterType((*Hash)(nil), "google.devtools.cloudbuild.v1.Hash") + proto.RegisterType((*Secret)(nil), "google.devtools.cloudbuild.v1.Secret") proto.RegisterType((*CreateBuildRequest)(nil), "google.devtools.cloudbuild.v1.CreateBuildRequest") proto.RegisterType((*GetBuildRequest)(nil), "google.devtools.cloudbuild.v1.GetBuildRequest") proto.RegisterType((*ListBuildsRequest)(nil), "google.devtools.cloudbuild.v1.ListBuildsRequest") @@ -1520,6 +1941,9 @@ func init() { proto.RegisterEnum("google.devtools.cloudbuild.v1.Build_Status", Build_Status_name, Build_Status_value) proto.RegisterEnum("google.devtools.cloudbuild.v1.Hash_HashType", Hash_HashType_name, Hash_HashType_value) proto.RegisterEnum("google.devtools.cloudbuild.v1.BuildOptions_VerifyOption", BuildOptions_VerifyOption_name, BuildOptions_VerifyOption_value) + proto.RegisterEnum("google.devtools.cloudbuild.v1.BuildOptions_MachineType", BuildOptions_MachineType_name, BuildOptions_MachineType_value) + proto.RegisterEnum("google.devtools.cloudbuild.v1.BuildOptions_SubstitutionOption", BuildOptions_SubstitutionOption_name, BuildOptions_SubstitutionOption_value) + proto.RegisterEnum("google.devtools.cloudbuild.v1.BuildOptions_LogStreamingOption", BuildOptions_LogStreamingOption_name, BuildOptions_LogStreamingOption_value) } // Reference imports to suppress errors if they are not otherwise used. @@ -1551,6 +1975,34 @@ type CloudBuildClient interface { ListBuilds(ctx context.Context, in *ListBuildsRequest, opts ...grpc.CallOption) (*ListBuildsResponse, error) // Cancels a requested build in progress. CancelBuild(ctx context.Context, in *CancelBuildRequest, opts ...grpc.CallOption) (*Build, error) + // Creates a new build based on the given build. + // + // This API creates a new build using the original build request, which may + // or may not result in an identical build. + // + // For triggered builds: + // + // * Triggered builds resolve to a precise revision, so a retry of a triggered + // build will result in a build that uses the same revision. + // + // For non-triggered builds that specify RepoSource: + // + // * If the original build built from the tip of a branch, the retried build + // will build from the tip of that branch, which may not be the same revision + // as the original build. + // * If the original build specified a commit sha or revision ID, the retried + // build will use the identical source. + // + // For builds that specify StorageSource: + // + // * If the original build pulled source from Cloud Storage without specifying + // the generation of the object, the new build will use the current object, + // which may be different from the original build source. + // * If the original build pulled source from Cloud Storage and specified the + // generation of the object, the new build will attempt to use the same + // object, which may or may not be available depending on the bucket's + // lifecycle management settings. + RetryBuild(ctx context.Context, in *RetryBuildRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) // Creates a new BuildTrigger. // // This API is experimental. @@ -1566,11 +2018,13 @@ type CloudBuildClient interface { // Deletes an BuildTrigger by its project ID and trigger ID. // // This API is experimental. - DeleteBuildTrigger(ctx context.Context, in *DeleteBuildTriggerRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) + DeleteBuildTrigger(ctx context.Context, in *DeleteBuildTriggerRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) // Updates an BuildTrigger by its project ID and trigger ID. // // This API is experimental. UpdateBuildTrigger(ctx context.Context, in *UpdateBuildTriggerRequest, opts ...grpc.CallOption) (*BuildTrigger, error) + // Runs a BuildTrigger at a particular source revision. + RunBuildTrigger(ctx context.Context, in *RunBuildTriggerRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) } type cloudBuildClient struct { @@ -1617,6 +2071,15 @@ func (c *cloudBuildClient) CancelBuild(ctx context.Context, in *CancelBuildReque return out, nil } +func (c *cloudBuildClient) RetryBuild(ctx context.Context, in *RetryBuildRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.devtools.cloudbuild.v1.CloudBuild/RetryBuild", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *cloudBuildClient) CreateBuildTrigger(ctx context.Context, in *CreateBuildTriggerRequest, opts ...grpc.CallOption) (*BuildTrigger, error) { out := new(BuildTrigger) err := grpc.Invoke(ctx, "/google.devtools.cloudbuild.v1.CloudBuild/CreateBuildTrigger", in, out, c.cc, opts...) @@ -1644,8 +2107,8 @@ func (c *cloudBuildClient) ListBuildTriggers(ctx context.Context, in *ListBuildT return out, nil } -func (c *cloudBuildClient) DeleteBuildTrigger(ctx context.Context, in *DeleteBuildTriggerRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) { - out := new(google_protobuf2.Empty) +func (c *cloudBuildClient) DeleteBuildTrigger(ctx context.Context, in *DeleteBuildTriggerRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) { + out := new(google_protobuf3.Empty) err := grpc.Invoke(ctx, "/google.devtools.cloudbuild.v1.CloudBuild/DeleteBuildTrigger", in, out, c.cc, opts...) if err != nil { return nil, err @@ -1662,6 +2125,15 @@ func (c *cloudBuildClient) UpdateBuildTrigger(ctx context.Context, in *UpdateBui return out, nil } +func (c *cloudBuildClient) RunBuildTrigger(ctx context.Context, in *RunBuildTriggerRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.devtools.cloudbuild.v1.CloudBuild/RunBuildTrigger", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // Server API for CloudBuild service type CloudBuildServer interface { @@ -1683,6 +2155,34 @@ type CloudBuildServer interface { ListBuilds(context.Context, *ListBuildsRequest) (*ListBuildsResponse, error) // Cancels a requested build in progress. CancelBuild(context.Context, *CancelBuildRequest) (*Build, error) + // Creates a new build based on the given build. + // + // This API creates a new build using the original build request, which may + // or may not result in an identical build. + // + // For triggered builds: + // + // * Triggered builds resolve to a precise revision, so a retry of a triggered + // build will result in a build that uses the same revision. + // + // For non-triggered builds that specify RepoSource: + // + // * If the original build built from the tip of a branch, the retried build + // will build from the tip of that branch, which may not be the same revision + // as the original build. + // * If the original build specified a commit sha or revision ID, the retried + // build will use the identical source. + // + // For builds that specify StorageSource: + // + // * If the original build pulled source from Cloud Storage without specifying + // the generation of the object, the new build will use the current object, + // which may be different from the original build source. + // * If the original build pulled source from Cloud Storage and specified the + // generation of the object, the new build will attempt to use the same + // object, which may or may not be available depending on the bucket's + // lifecycle management settings. + RetryBuild(context.Context, *RetryBuildRequest) (*google_longrunning.Operation, error) // Creates a new BuildTrigger. // // This API is experimental. @@ -1698,11 +2198,13 @@ type CloudBuildServer interface { // Deletes an BuildTrigger by its project ID and trigger ID. // // This API is experimental. - DeleteBuildTrigger(context.Context, *DeleteBuildTriggerRequest) (*google_protobuf2.Empty, error) + DeleteBuildTrigger(context.Context, *DeleteBuildTriggerRequest) (*google_protobuf3.Empty, error) // Updates an BuildTrigger by its project ID and trigger ID. // // This API is experimental. UpdateBuildTrigger(context.Context, *UpdateBuildTriggerRequest) (*BuildTrigger, error) + // Runs a BuildTrigger at a particular source revision. + RunBuildTrigger(context.Context, *RunBuildTriggerRequest) (*google_longrunning.Operation, error) } func RegisterCloudBuildServer(s *grpc.Server, srv CloudBuildServer) { @@ -1781,6 +2283,24 @@ func _CloudBuild_CancelBuild_Handler(srv interface{}, ctx context.Context, dec f return interceptor(ctx, in, info, handler) } +func _CloudBuild_RetryBuild_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RetryBuildRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CloudBuildServer).RetryBuild(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.cloudbuild.v1.CloudBuild/RetryBuild", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CloudBuildServer).RetryBuild(ctx, req.(*RetryBuildRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _CloudBuild_CreateBuildTrigger_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(CreateBuildTriggerRequest) if err := dec(in); err != nil { @@ -1871,6 +2391,24 @@ func _CloudBuild_UpdateBuildTrigger_Handler(srv interface{}, ctx context.Context return interceptor(ctx, in, info, handler) } +func _CloudBuild_RunBuildTrigger_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RunBuildTriggerRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CloudBuildServer).RunBuildTrigger(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.cloudbuild.v1.CloudBuild/RunBuildTrigger", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CloudBuildServer).RunBuildTrigger(ctx, req.(*RunBuildTriggerRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _CloudBuild_serviceDesc = grpc.ServiceDesc{ ServiceName: "google.devtools.cloudbuild.v1.CloudBuild", HandlerType: (*CloudBuildServer)(nil), @@ -1891,6 +2429,10 @@ var _CloudBuild_serviceDesc = grpc.ServiceDesc{ MethodName: "CancelBuild", Handler: _CloudBuild_CancelBuild_Handler, }, + { + MethodName: "RetryBuild", + Handler: _CloudBuild_RetryBuild_Handler, + }, { MethodName: "CreateBuildTrigger", Handler: _CloudBuild_CreateBuildTrigger_Handler, @@ -1911,6 +2453,10 @@ var _CloudBuild_serviceDesc = grpc.ServiceDesc{ MethodName: "UpdateBuildTrigger", Handler: _CloudBuild_UpdateBuildTrigger_Handler, }, + { + MethodName: "RunBuildTrigger", + Handler: _CloudBuild_RunBuildTrigger_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "google/devtools/cloudbuild/v1/cloudbuild.proto", @@ -1919,131 +2465,167 @@ var _CloudBuild_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("google/devtools/cloudbuild/v1/cloudbuild.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 2010 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0x5b, 0x73, 0xdb, 0xc6, - 0xf5, 0x37, 0x48, 0x89, 0x97, 0x43, 0x5d, 0xe8, 0xfd, 0x3b, 0x32, 0x44, 0x47, 0xb1, 0xfe, 0x70, - 0x92, 0x2a, 0x4e, 0x42, 0x56, 0xf2, 0xa4, 0x56, 0xe4, 0x34, 0x91, 0x44, 0xd1, 0x92, 0x26, 0x0a, - 0xe5, 0x2e, 0x49, 0x67, 0x7a, 0x1b, 0x14, 0x24, 0x56, 0x10, 0x6a, 0x10, 0x40, 0x81, 0x25, 0x1b, - 0xd9, 0xe3, 0xe9, 0x65, 0xa6, 0x7d, 0x6c, 0x3b, 0xd3, 0xbe, 0xf5, 0xa1, 0x6d, 0x3e, 0x40, 0xa7, - 0xd3, 0x99, 0x4e, 0x9f, 0xfa, 0x29, 0xfa, 0x15, 0xfa, 0xd8, 0x0f, 0xd1, 0xd9, 0x0b, 0x48, 0x90, - 0xb4, 0x0b, 0xb0, 0x9e, 0xf6, 0xc5, 0x83, 0x3d, 0x7b, 0x7e, 0x67, 0xcf, 0x9e, 0xfd, 0x9d, 0x0b, - 0x2d, 0xa8, 0x5a, 0x9e, 0x67, 0x39, 0xa4, 0x66, 0x92, 0x21, 0xf5, 0x3c, 0x27, 0xac, 0xf5, 0x1c, - 0x6f, 0x60, 0x76, 0x07, 0xb6, 0x63, 0xd6, 0x86, 0xdb, 0xb1, 0x55, 0xd5, 0x0f, 0x3c, 0xea, 0xa1, - 0x0d, 0xa1, 0x5f, 0x8d, 0xf4, 0xab, 0x31, 0x8d, 0xe1, 0x76, 0xe5, 0x75, 0x69, 0xce, 0xf0, 0xed, - 0x9a, 0xe1, 0xba, 0x1e, 0x35, 0xa8, 0xed, 0xb9, 0xa1, 0x00, 0x57, 0xee, 0xc8, 0x5d, 0xc7, 0x73, - 0xad, 0x60, 0xe0, 0xba, 0xb6, 0x6b, 0xd5, 0x3c, 0x9f, 0x04, 0x13, 0x4a, 0x6f, 0x48, 0x25, 0xbe, - 0xea, 0x0e, 0x2e, 0x6a, 0xe6, 0x40, 0x28, 0xc8, 0xfd, 0x5b, 0xd3, 0xfb, 0xa4, 0xef, 0xd3, 0x2b, - 0xb9, 0x79, 0x7b, 0x7a, 0x93, 0xda, 0x7d, 0x12, 0x52, 0xa3, 0xef, 0x0b, 0x05, 0x4d, 0x87, 0xe5, - 0x16, 0xf5, 0x02, 0xc3, 0x22, 0x2d, 0x6f, 0x10, 0xf4, 0x08, 0x5a, 0x83, 0x5c, 0x77, 0xd0, 0x7b, - 0x42, 0xa8, 0xaa, 0x6c, 0x2a, 0x5b, 0x45, 0x2c, 0x57, 0x4c, 0xee, 0x75, 0xbf, 0x4f, 0x7a, 0x54, - 0xcd, 0x08, 0xb9, 0x58, 0xa1, 0x37, 0x00, 0x2c, 0xe2, 0x4a, 0x9f, 0xd5, 0xec, 0xa6, 0xb2, 0x95, - 0xc5, 0x31, 0x89, 0xf6, 0x17, 0x05, 0x00, 0x13, 0xdf, 0x93, 0xe6, 0x37, 0x00, 0xfc, 0xc0, 0x63, - 0x48, 0xdd, 0x36, 0xe5, 0x11, 0x45, 0x29, 0x39, 0x35, 0xd1, 0x2d, 0x28, 0x06, 0xc4, 0xf7, 0x74, - 0xd7, 0xe8, 0x13, 0x79, 0x50, 0x81, 0x09, 0x9a, 0x46, 0x9f, 0xa0, 0xff, 0x87, 0x52, 0x37, 0x30, - 0xdc, 0xde, 0xa5, 0xd8, 0x66, 0x67, 0x15, 0x4f, 0xae, 0x61, 0x10, 0x42, 0xae, 0x72, 0x0b, 0x0a, - 0xd4, 0xb0, 0xc4, 0xfe, 0x82, 0xdc, 0xcf, 0x53, 0xc3, 0xe2, 0x9b, 0xb7, 0x01, 0x7a, 0x5e, 0xbf, - 0x6f, 0x53, 0x3d, 0xbc, 0x34, 0xd4, 0x45, 0xb9, 0x5d, 0x14, 0xb2, 0xd6, 0xa5, 0x71, 0x08, 0x50, - 0x08, 0xc8, 0xd0, 0x0e, 0x99, 0xdf, 0x7f, 0x55, 0x20, 0x27, 0x7d, 0xee, 0xc0, 0x4a, 0x28, 0x62, - 0xa4, 0x87, 0x5c, 0xc2, 0x3d, 0x2b, 0xed, 0xbc, 0x57, 0xfd, 0xb7, 0x8f, 0x5f, 0x9d, 0x08, 0xec, - 0xc9, 0x35, 0xbc, 0x1c, 0x4e, 0x44, 0xfa, 0x0c, 0x4a, 0xfc, 0xae, 0xd2, 0x66, 0x96, 0xdb, 0x7c, - 0x27, 0xc1, 0xe6, 0x38, 0x94, 0xec, 0xe6, 0xc1, 0x68, 0x75, 0x58, 0x80, 0x9c, 0x30, 0xa4, 0xed, - 0x02, 0x1c, 0x0e, 0x6c, 0x87, 0x9e, 0xf6, 0x0d, 0x8b, 0x20, 0x04, 0x0b, 0x3c, 0x1a, 0x22, 0xd4, - 0xfc, 0x9b, 0xbd, 0xa5, 0x69, 0x5b, 0x24, 0xa4, 0x22, 0x86, 0x58, 0xae, 0xb4, 0x2f, 0x15, 0x28, - 0x32, 0xa8, 0xd9, 0xa2, 0xc4, 0x7f, 0x21, 0xb2, 0x0c, 0x59, 0xe2, 0x0e, 0xd5, 0xcc, 0x66, 0x76, - 0xab, 0x88, 0xd9, 0x27, 0xd3, 0x32, 0x02, 0x2b, 0x54, 0xb3, 0x5c, 0xc4, 0xbf, 0x99, 0x96, 0x69, - 0x07, 0xe2, 0x01, 0x30, 0xfb, 0x44, 0x2b, 0x90, 0xb1, 0x4d, 0x11, 0x72, 0x9c, 0xb1, 0x4d, 0xb4, - 0x0e, 0x85, 0x1f, 0x1a, 0x36, 0xd5, 0x2f, 0xbc, 0x40, 0xcd, 0x71, 0x64, 0x9e, 0xad, 0x1f, 0x7a, - 0x01, 0x23, 0x14, 0x71, 0x69, 0x70, 0xe5, 0x7b, 0xb6, 0x4b, 0xd5, 0x3c, 0x87, 0xc4, 0x24, 0xda, - 0x17, 0x90, 0xc7, 0x24, 0x1c, 0x38, 0x34, 0x44, 0x07, 0x90, 0xb3, 0xd9, 0x25, 0x43, 0xee, 0x50, - 0x72, 0xf0, 0xc6, 0x61, 0xc1, 0x12, 0x88, 0xee, 0xc2, 0x75, 0xbe, 0xad, 0x87, 0x94, 0xf8, 0xba, - 0xb4, 0x26, 0xee, 0xb2, 0xda, 0x8d, 0x42, 0xc1, 0x21, 0xa1, 0xf6, 0x8b, 0x22, 0x2c, 0xf2, 0xf0, - 0xc8, 0xeb, 0x28, 0xa3, 0xeb, 0x4c, 0xb2, 0xba, 0x3c, 0xcd, 0xea, 0x3a, 0xe4, 0x42, 0x6a, 0xd0, - 0x41, 0xc8, 0x89, 0xb3, 0xb2, 0xf3, 0x6e, 0x0a, 0x3f, 0xcd, 0x6a, 0x8b, 0x43, 0xb0, 0x84, 0xa2, - 0x3b, 0xb0, 0x2c, 0xbe, 0x74, 0x93, 0x50, 0xc3, 0x76, 0x54, 0x95, 0x1f, 0xb3, 0x24, 0x84, 0x47, - 0x5c, 0x86, 0xbe, 0x1e, 0xb1, 0x40, 0xd2, 0xe9, 0xad, 0x24, 0x8a, 0x72, 0x65, 0x2c, 0x41, 0xe8, - 0x63, 0x58, 0x64, 0x71, 0x08, 0xd5, 0x12, 0x8f, 0xe7, 0x56, 0x1a, 0x3f, 0x59, 0x80, 0xb0, 0x80, - 0xa1, 0x7d, 0xc8, 0x07, 0xe2, 0x6d, 0x54, 0xe0, 0xe7, 0xbf, 0x9d, 0x48, 0x67, 0xae, 0x8d, 0x23, - 0x18, 0x7a, 0x00, 0xa5, 0x5e, 0x40, 0x0c, 0x4a, 0x74, 0x56, 0xa9, 0xd4, 0x1c, 0xb7, 0x52, 0x89, - 0xac, 0x44, 0x65, 0xac, 0xda, 0x8e, 0xca, 0x18, 0x06, 0xa1, 0xce, 0x04, 0xe8, 0x43, 0x80, 0x90, - 0x1a, 0x01, 0x15, 0xd8, 0x7c, 0x22, 0xb6, 0xc8, 0xb5, 0x39, 0xf4, 0x01, 0x94, 0x2e, 0x6c, 0xd7, - 0x0e, 0x2f, 0x05, 0xb6, 0x90, 0x7c, 0xae, 0x50, 0xe7, 0xe0, 0x7b, 0x90, 0x67, 0x28, 0x6f, 0x40, - 0xd5, 0x25, 0x0e, 0x5c, 0x9f, 0x01, 0x1e, 0xc9, 0xa2, 0x8d, 0x23, 0x4d, 0x96, 0x84, 0x92, 0x6e, - 0xcb, 0x9c, 0x6e, 0x11, 0x23, 0x6f, 0x43, 0xc9, 0xf1, 0xac, 0x50, 0x97, 0x55, 0xf8, 0xff, 0x44, - 0x02, 0x30, 0xd1, 0xa1, 0xa8, 0xc4, 0xdf, 0x81, 0xeb, 0xe2, 0xb9, 0x74, 0x3f, 0xf0, 0x86, 0xc4, - 0x35, 0xdc, 0x1e, 0x51, 0x5f, 0xe3, 0xe7, 0xd6, 0x52, 0x3d, 0xf7, 0xa3, 0x11, 0x0c, 0x97, 0xc3, - 0x29, 0x09, 0xda, 0x82, 0xb2, 0x48, 0x08, 0x1a, 0xd8, 0x96, 0x45, 0x02, 0x46, 0xe8, 0x35, 0xee, - 0xc3, 0x0a, 0x97, 0xb7, 0x85, 0xf8, 0xd4, 0x44, 0x0d, 0xc8, 0x7b, 0x3e, 0xef, 0x54, 0xea, 0x4d, - 0x7e, 0x7a, 0x2a, 0x5a, 0x9f, 0x0b, 0x08, 0x8e, 0xb0, 0xe8, 0x26, 0xe4, 0x1d, 0xcf, 0xd2, 0x07, - 0x81, 0xa3, 0xae, 0x8b, 0x6a, 0xe4, 0x78, 0x56, 0x27, 0x70, 0xd0, 0x77, 0x61, 0x39, 0x1c, 0x74, - 0x43, 0x6a, 0xd3, 0x81, 0x38, 0x65, 0x83, 0x93, 0xf2, 0x7e, 0xba, 0xe4, 0x89, 0x23, 0x1b, 0xac, - 0x7a, 0xe0, 0x49, 0x6b, 0x95, 0x7d, 0x40, 0xb3, 0x4a, 0xac, 0x74, 0x3d, 0x21, 0x57, 0x32, 0xb5, - 0xd9, 0x27, 0xba, 0x01, 0x8b, 0x43, 0xc3, 0x19, 0x44, 0xed, 0x48, 0x2c, 0xf6, 0x32, 0xbb, 0x8a, - 0xf6, 0x23, 0xc8, 0x89, 0x1c, 0x45, 0x08, 0x56, 0x5a, 0xed, 0x83, 0x76, 0xa7, 0xa5, 0x77, 0x9a, - 0x9f, 0x36, 0xcf, 0x3f, 0x6f, 0x96, 0xaf, 0x21, 0x80, 0xdc, 0x37, 0x3a, 0x8d, 0x4e, 0xe3, 0xa8, - 0xac, 0xa0, 0x12, 0xe4, 0x3f, 0x3f, 0xc7, 0x9f, 0x9e, 0x36, 0x8f, 0xcb, 0x19, 0xb6, 0x68, 0x75, - 0xea, 0xf5, 0x46, 0xab, 0x55, 0xce, 0xb2, 0xc5, 0xc3, 0x83, 0xd3, 0xb3, 0x0e, 0x6e, 0x94, 0x17, - 0x98, 0x99, 0xd3, 0x66, 0xbb, 0x81, 0x9b, 0x07, 0x67, 0x7a, 0x03, 0xe3, 0x73, 0x5c, 0x5e, 0x64, - 0x0a, 0xed, 0xd3, 0xcf, 0x1a, 0xe7, 0x9d, 0x76, 0x39, 0x87, 0x96, 0xa1, 0x58, 0x3f, 0x68, 0xd6, - 0x1b, 0x67, 0x67, 0x8d, 0xa3, 0x72, 0x5e, 0x6b, 0xc3, 0x9a, 0x8c, 0xa9, 0xec, 0xb6, 0x9f, 0x11, - 0x6a, 0x98, 0x06, 0x35, 0xd0, 0x1e, 0x2c, 0xf2, 0x80, 0xf0, 0x8b, 0x94, 0x76, 0xde, 0x4c, 0x13, - 0x33, 0x2c, 0x20, 0xda, 0x1f, 0xb2, 0x50, 0x9e, 0x26, 0x0a, 0x32, 0xe1, 0x66, 0x40, 0x42, 0xcf, - 0x19, 0x12, 0x56, 0x2a, 0x27, 0x9a, 0x61, 0x76, 0xfe, 0x66, 0x88, 0x5f, 0x8b, 0x8c, 0x4d, 0x0e, - 0x1f, 0xdf, 0x86, 0x1b, 0xa3, 0x53, 0xe2, 0xbd, 0x31, 0x37, 0x67, 0x6f, 0xc4, 0x28, 0x32, 0x13, - 0x1b, 0x3d, 0xbe, 0xc7, 0x52, 0xdc, 0x21, 0xfa, 0xa5, 0x11, 0x5e, 0x92, 0x50, 0x5d, 0xe0, 0x6c, - 0xfa, 0x64, 0xce, 0x8c, 0xa9, 0x3e, 0xb4, 0x1d, 0x72, 0xc2, 0x2d, 0x08, 0x56, 0xc1, 0xc5, 0x48, - 0x50, 0xb9, 0x84, 0xd5, 0xa9, 0xed, 0x17, 0xf0, 0xe9, 0x93, 0x38, 0x9f, 0x92, 0x2f, 0x35, 0x36, - 0x18, 0xa7, 0x5e, 0x13, 0x60, 0xbc, 0x81, 0xf6, 0xa1, 0x38, 0xba, 0x99, 0xaa, 0xf0, 0x7b, 0xdd, - 0x49, 0x30, 0xcb, 0x90, 0xb8, 0x10, 0xf9, 0xae, 0xfd, 0x58, 0x81, 0x05, 0xf6, 0x81, 0xf6, 0x61, - 0x81, 0x5e, 0xf9, 0xa2, 0xe9, 0xaf, 0x24, 0x3e, 0x2a, 0x83, 0xf0, 0x7f, 0xda, 0x57, 0x3e, 0xc1, - 0x1c, 0x39, 0x99, 0x2f, 0x4b, 0xd2, 0x69, 0x6d, 0x13, 0x0a, 0x91, 0x1e, 0x2a, 0xc0, 0x42, 0xf3, - 0xbc, 0xd9, 0x10, 0x39, 0xd2, 0x3a, 0x39, 0xd8, 0xf9, 0xe0, 0x6b, 0x65, 0x45, 0xf3, 0x00, 0xd5, - 0x79, 0x29, 0x17, 0x64, 0x24, 0x3f, 0x18, 0x90, 0x90, 0x26, 0xcd, 0x8b, 0x23, 0x9e, 0x67, 0xe6, - 0xe7, 0xf9, 0x3e, 0xac, 0x1e, 0x13, 0x3a, 0xcf, 0x69, 0xa2, 0xed, 0x67, 0xa2, 0xb6, 0xaf, 0xfd, - 0x5c, 0x81, 0xeb, 0x67, 0x76, 0x28, 0x6c, 0x84, 0x29, 0x8d, 0xdc, 0x82, 0xa2, 0xcf, 0xb3, 0xc7, - 0x7e, 0x2a, 0x62, 0xb4, 0x88, 0x0b, 0x4c, 0xd0, 0xb2, 0x9f, 0x8a, 0xf1, 0x98, 0x6d, 0x52, 0xef, - 0x09, 0x71, 0xe5, 0x74, 0xc6, 0xd5, 0xdb, 0x4c, 0xc0, 0x7a, 0xc6, 0x85, 0xed, 0x50, 0x12, 0xf0, - 0x06, 0x55, 0xc4, 0x72, 0xa5, 0x3d, 0x05, 0x14, 0xf7, 0x23, 0xf4, 0x3d, 0x37, 0x24, 0xe8, 0x23, - 0x36, 0xca, 0x33, 0x89, 0xe4, 0x44, 0xba, 0xe8, 0x48, 0x0c, 0x7a, 0x1b, 0x56, 0x5d, 0xf2, 0x05, - 0xd5, 0x63, 0xfe, 0x88, 0x9b, 0x2f, 0x33, 0xf1, 0xa3, 0xc8, 0x27, 0xad, 0x0e, 0xa8, 0xce, 0x32, - 0xc3, 0x79, 0x95, 0x48, 0xfe, 0x6c, 0x01, 0x96, 0x0e, 0x63, 0xed, 0x65, 0x66, 0xc2, 0xda, 0x84, - 0x92, 0x49, 0xc2, 0x5e, 0x60, 0xf3, 0xae, 0xc1, 0xa7, 0x8b, 0x22, 0x8e, 0x8b, 0x50, 0x1b, 0xca, - 0x51, 0xcb, 0xa2, 0xa4, 0xef, 0x3b, 0x06, 0x8d, 0x46, 0x80, 0x39, 0xea, 0xc6, 0xaa, 0x34, 0xd1, - 0x96, 0x16, 0xd0, 0x47, 0x11, 0xc1, 0x16, 0xd2, 0x13, 0xec, 0xe4, 0x9a, 0xa4, 0x18, 0x7a, 0x1d, - 0x78, 0x8a, 0xf1, 0x31, 0xba, 0x20, 0x7f, 0x6f, 0x8c, 0x24, 0xd3, 0xb3, 0xce, 0xe2, 0x5c, 0xb3, - 0x4e, 0x05, 0x0a, 0xa6, 0x1d, 0x1a, 0x5d, 0x87, 0x98, 0x6a, 0x71, 0x53, 0xd9, 0x2a, 0xe0, 0xd1, - 0x1a, 0x99, 0xd3, 0x9d, 0x53, 0x8c, 0x73, 0x1f, 0xa7, 0x71, 0x5e, 0x3e, 0xc0, 0xff, 0xa2, 0x81, - 0x1e, 0x96, 0x61, 0x45, 0xce, 0x1a, 0x32, 0xdc, 0xda, 0x4f, 0x14, 0x58, 0x8f, 0x55, 0x01, 0xe9, - 0x4c, 0x4a, 0x52, 0x35, 0x20, 0x2f, 0x9f, 0x4f, 0x96, 0x83, 0x77, 0xe7, 0xb8, 0x30, 0x8e, 0xb0, - 0xda, 0x63, 0x58, 0x8b, 0xea, 0xc2, 0x7c, 0xe7, 0x6f, 0x00, 0xc4, 0x86, 0x26, 0x71, 0xdb, 0x22, - 0x8d, 0xe6, 0x25, 0xed, 0x43, 0x50, 0x47, 0x49, 0x2a, 0x0d, 0xa7, 0xac, 0x19, 0x9a, 0x09, 0xeb, - 0x2f, 0x80, 0xca, 0x34, 0x3f, 0x86, 0x82, 0x3c, 0x24, 0x4a, 0xf4, 0xb9, 0xee, 0x3d, 0x02, 0x6b, - 0xdf, 0x84, 0xf5, 0x23, 0xe2, 0x90, 0xff, 0x28, 0xf6, 0x09, 0x77, 0xff, 0xbd, 0x02, 0xeb, 0x1d, - 0xdf, 0x34, 0xfe, 0x0b, 0xb6, 0xe3, 0xcf, 0x9e, 0x7d, 0x85, 0x67, 0xff, 0x4d, 0x46, 0x96, 0x20, - 0x39, 0xa1, 0xa2, 0x2e, 0xac, 0xcd, 0xcc, 0xd9, 0xe3, 0x16, 0x3b, 0x6f, 0x73, 0xbc, 0x31, 0x3d, - 0x69, 0xf3, 0x76, 0xeb, 0xb3, 0xb1, 0x8a, 0x07, 0x81, 0x98, 0xfa, 0x90, 0x04, 0xf6, 0xc5, 0x95, - 0x2e, 0x06, 0x63, 0xf9, 0x53, 0x71, 0x77, 0x8e, 0x99, 0xba, 0xfa, 0x98, 0x1b, 0x10, 0x2b, 0x36, - 0x62, 0x49, 0xc3, 0x71, 0xb1, 0x56, 0x85, 0xa5, 0xf8, 0x1a, 0x95, 0x61, 0xa9, 0x79, 0xde, 0xd6, - 0x1f, 0x37, 0xf0, 0xe9, 0xc3, 0xd3, 0xc6, 0x51, 0xf9, 0x1a, 0x5a, 0x82, 0xc2, 0x68, 0xa5, 0xec, - 0xfc, 0xb3, 0x04, 0x50, 0x67, 0x47, 0x8a, 0x5f, 0xbe, 0xbf, 0x52, 0xa0, 0x14, 0x4b, 0x50, 0xb4, - 0x9d, 0xe0, 0xdf, 0x6c, 0x4b, 0xaf, 0x6c, 0x44, 0x90, 0xd8, 0x7f, 0x7b, 0x55, 0x47, 0x23, 0xac, - 0x56, 0xfb, 0xe9, 0xdf, 0xff, 0xf1, 0xeb, 0xcc, 0x3b, 0xda, 0x66, 0x6d, 0xb8, 0x5d, 0x93, 0x24, - 0x08, 0x6b, 0xcf, 0xc6, 0x04, 0x79, 0x5e, 0x13, 0x1d, 0x6a, 0x4f, 0x16, 0xd9, 0x5f, 0x2a, 0x50, - 0x88, 0x12, 0x16, 0x55, 0x13, 0xfc, 0x99, 0xea, 0xf8, 0x95, 0x54, 0x05, 0x5d, 0x7b, 0x9f, 0xfb, - 0xf4, 0x15, 0xf4, 0x56, 0x92, 0x4f, 0xb5, 0x67, 0xb6, 0xf9, 0x1c, 0xfd, 0x56, 0x01, 0x18, 0xf7, - 0x63, 0xf4, 0xd5, 0x84, 0x33, 0x66, 0x46, 0x88, 0xca, 0xf6, 0x1c, 0x08, 0x51, 0x05, 0xb4, 0x2d, - 0xee, 0xa2, 0x86, 0x12, 0xc3, 0x86, 0x7e, 0xc7, 0x9e, 0x70, 0xdc, 0xb1, 0x93, 0x9f, 0x70, 0xa6, - 0xbb, 0xa7, 0x8c, 0xda, 0x7d, 0xee, 0xd2, 0xb6, 0xf6, 0x5e, 0xaa, 0xa8, 0xed, 0xf5, 0xf8, 0x39, - 0x7b, 0xca, 0x5d, 0xf4, 0x27, 0x65, 0x62, 0x16, 0x8c, 0x66, 0x82, 0xdd, 0xf4, 0x5c, 0x9b, 0x2c, - 0x30, 0x95, 0x79, 0x2a, 0x82, 0x76, 0x8f, 0xbb, 0xfd, 0xbe, 0xa6, 0xbd, 0xdc, 0xed, 0xa8, 0x64, - 0xee, 0x45, 0xd5, 0x03, 0xfd, 0x51, 0x19, 0x4f, 0x93, 0x91, 0xbf, 0x1f, 0xa4, 0xe4, 0xe2, 0xab, - 0x38, 0x2b, 0x63, 0x8c, 0x6a, 0xc9, 0xce, 0xd6, 0x9e, 0x8d, 0xab, 0xe8, 0x73, 0xf4, 0xe7, 0xf8, - 0xec, 0x1a, 0xf5, 0x14, 0x74, 0x3f, 0x2d, 0xf1, 0xa6, 0x1a, 0x58, 0x65, 0x77, 0x7e, 0xa0, 0x24, - 0xee, 0x5d, 0x7e, 0x83, 0x37, 0x51, 0x8a, 0x70, 0x33, 0xea, 0xa2, 0xd9, 0x16, 0x95, 0x48, 0x8c, - 0x97, 0x76, 0xb5, 0xca, 0xda, 0xcc, 0xb4, 0xd5, 0xe8, 0xfb, 0xf4, 0x2a, 0x0a, 0xeb, 0xdd, 0xb9, - 0xc3, 0xfa, 0x37, 0x05, 0xd0, 0x6c, 0xa3, 0x4b, 0xf4, 0xf0, 0xa5, 0xbd, 0x71, 0x3e, 0x36, 0xec, - 0x73, 0xb7, 0xf7, 0x76, 0xe6, 0x75, 0x7b, 0xc4, 0xe3, 0xc3, 0x27, 0xa0, 0xf6, 0xbc, 0x7e, 0x74, - 0xe6, 0xc4, 0x51, 0x8f, 0x94, 0x6f, 0x1d, 0x4b, 0xb9, 0xe5, 0x39, 0x86, 0x6b, 0x55, 0xbd, 0xc0, - 0xaa, 0x59, 0xc4, 0xe5, 0xb1, 0xab, 0x89, 0x2d, 0xc3, 0xb7, 0xc3, 0x97, 0xfc, 0xf1, 0xe4, 0xc1, - 0x78, 0xf5, 0x65, 0x26, 0x7b, 0x5c, 0x3f, 0xec, 0xe6, 0x38, 0xf2, 0xde, 0xbf, 0x02, 0x00, 0x00, - 0xff, 0xff, 0xc6, 0xf0, 0xf0, 0x91, 0x75, 0x19, 0x00, 0x00, + // 2585 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x5a, 0x5b, 0x73, 0xdb, 0xc6, + 0xf5, 0x17, 0x48, 0x8a, 0x97, 0x43, 0x5d, 0xe0, 0x8d, 0xa3, 0x40, 0x74, 0x1c, 0x2b, 0xc8, 0x4d, + 0x71, 0x12, 0x32, 0x92, 0xff, 0x8e, 0x1d, 0xe5, 0x62, 0x4b, 0x14, 0x75, 0x99, 0xc8, 0x94, 0xff, + 0x20, 0xe9, 0x4c, 0xd3, 0x76, 0x50, 0x90, 0x58, 0x43, 0xa8, 0x40, 0x00, 0x05, 0x96, 0x6c, 0x94, + 0x34, 0xd3, 0x36, 0x33, 0xed, 0x6b, 0xdb, 0xe9, 0xf4, 0xa1, 0xd3, 0x87, 0x5e, 0x9e, 0x3b, 0x9d, + 0x4e, 0xfb, 0xd0, 0x99, 0xce, 0xe4, 0xb9, 0x1f, 0xa0, 0x5f, 0xa1, 0x1f, 0xa4, 0xb3, 0x17, 0x90, + 0x20, 0x29, 0x17, 0x44, 0xdc, 0xbe, 0x50, 0xd8, 0xb3, 0x7b, 0xce, 0x9e, 0x3d, 0xb7, 0xfd, 0x1d, + 0x40, 0x50, 0xb5, 0x3c, 0xcf, 0x72, 0x70, 0xcd, 0xc4, 0x43, 0xe2, 0x79, 0x4e, 0x58, 0xeb, 0x39, + 0xde, 0xc0, 0xec, 0x0e, 0x6c, 0xc7, 0xac, 0x0d, 0xb7, 0x62, 0xa3, 0xaa, 0x1f, 0x78, 0xc4, 0x43, + 0xd7, 0xf9, 0xfa, 0x6a, 0xb4, 0xbe, 0x1a, 0x5b, 0x31, 0xdc, 0xaa, 0x3c, 0x2f, 0xc4, 0x19, 0xbe, + 0x5d, 0x33, 0x5c, 0xd7, 0x23, 0x06, 0xb1, 0x3d, 0x37, 0xe4, 0xcc, 0x15, 0x55, 0xcc, 0x32, 0x9e, + 0x9a, 0x31, 0x30, 0x6d, 0xc2, 0x7f, 0x75, 0xc7, 0xb3, 0xc4, 0x9a, 0x97, 0xc4, 0x1a, 0xc7, 0x73, + 0xad, 0x60, 0xe0, 0xba, 0xb6, 0x6b, 0xd5, 0x3c, 0x1f, 0x07, 0x13, 0x82, 0x5e, 0x10, 0x8b, 0xd8, + 0xa8, 0x3b, 0x78, 0x5c, 0x33, 0x07, 0x7c, 0x81, 0x98, 0xbf, 0x36, 0x3d, 0x8f, 0xfb, 0x3e, 0xb9, + 0x10, 0x93, 0x37, 0xa6, 0x27, 0x89, 0xdd, 0xc7, 0x21, 0x31, 0xfa, 0x3e, 0x5f, 0xa0, 0xee, 0xc1, + 0x15, 0x0d, 0x93, 0xe0, 0x62, 0x8f, 0x9e, 0x4a, 0xc3, 0xdf, 0x1b, 0xe0, 0x90, 0xa0, 0xeb, 0x00, + 0x7e, 0xe0, 0x7d, 0x17, 0xf7, 0x88, 0x6e, 0x9b, 0x8a, 0xb4, 0x21, 0x6d, 0x96, 0xb4, 0x92, 0xa0, + 0x1c, 0x9b, 0x68, 0x05, 0x32, 0xb6, 0xa9, 0x64, 0x18, 0x39, 0x63, 0x9b, 0xea, 0xaf, 0x25, 0x58, + 0xd3, 0x06, 0x2e, 0x13, 0xd1, 0x0e, 0x6c, 0xcb, 0xc2, 0xc1, 0x9c, 0x92, 0xae, 0x03, 0x10, 0xce, + 0xa0, 0x8f, 0x24, 0x96, 0x04, 0xe5, 0xd8, 0x44, 0xbb, 0x90, 0x0f, 0xbd, 0x41, 0xd0, 0xc3, 0x4a, + 0x76, 0x43, 0xda, 0x2c, 0x6f, 0xbf, 0x5e, 0xfd, 0x8f, 0x1e, 0xa9, 0x6a, 0xd8, 0xf7, 0x5a, 0x8c, + 0x41, 0x13, 0x8c, 0xaa, 0x0e, 0xcb, 0x2d, 0xe2, 0x05, 0x86, 0x85, 0xf9, 0x04, 0x5a, 0x83, 0x7c, + 0x77, 0xd0, 0x3b, 0xc7, 0x44, 0x68, 0x23, 0x46, 0x94, 0xee, 0x75, 0xa9, 0x5a, 0x42, 0x0d, 0x31, + 0x42, 0x2f, 0x00, 0x58, 0xd8, 0x15, 0x3e, 0x61, 0x7a, 0x64, 0xb5, 0x18, 0x45, 0xfd, 0x87, 0x04, + 0x30, 0xde, 0x37, 0xe9, 0xc0, 0xd7, 0xa0, 0x14, 0x60, 0xdf, 0xd3, 0x5d, 0xa3, 0x8f, 0xc5, 0x46, + 0x45, 0x4a, 0x68, 0x1a, 0x7d, 0x8c, 0x5e, 0x84, 0x72, 0x37, 0x30, 0xdc, 0xde, 0x19, 0x9f, 0xa6, + 0x7b, 0x95, 0x8e, 0x16, 0x34, 0xe0, 0x44, 0xb6, 0xe4, 0x1a, 0x14, 0x89, 0x61, 0xf1, 0xf9, 0x9c, + 0x98, 0x2f, 0x10, 0xc3, 0x62, 0x93, 0x37, 0x00, 0x7a, 0x5e, 0xbf, 0x6f, 0x13, 0x3d, 0x3c, 0x33, + 0x94, 0x45, 0x31, 0x5d, 0xe2, 0xb4, 0xd6, 0x99, 0x81, 0x64, 0xc8, 0x9a, 0x76, 0xa0, 0x14, 0xd8, + 0xbe, 0xf4, 0x71, 0x0f, 0xa0, 0x18, 0xe0, 0xa1, 0x1d, 0xd2, 0x93, 0xfc, 0x4d, 0x82, 0xbc, 0x38, + 0x45, 0x07, 0x56, 0x42, 0x6e, 0x35, 0x5d, 0x38, 0x20, 0xc3, 0x1c, 0xf0, 0x66, 0x82, 0x03, 0x26, + 0x4c, 0x7d, 0xb4, 0xa0, 0x2d, 0x87, 0x13, 0xb6, 0x3f, 0x81, 0x32, 0x3b, 0xfd, 0xd7, 0x74, 0x2a, + 0xb5, 0x45, 0x30, 0x1a, 0xed, 0x15, 0xa3, 0xe8, 0x50, 0xbf, 0x94, 0x00, 0x68, 0xf4, 0x91, 0xe3, + 0xbe, 0x61, 0x61, 0x84, 0x20, 0xc7, 0x0c, 0xc4, 0xad, 0xcf, 0x9e, 0xa9, 0x7b, 0x4d, 0xdb, 0xc2, + 0x21, 0xe1, 0x66, 0xd5, 0xc4, 0x08, 0x1d, 0x41, 0xd9, 0x1f, 0x84, 0x67, 0x3a, 0xb1, 0xfb, 0xb6, + 0x6b, 0x31, 0x9b, 0x96, 0xb7, 0x5f, 0x4b, 0x50, 0xa9, 0x6d, 0xf7, 0x71, 0xcb, 0x37, 0x5c, 0x0d, + 0x28, 0x6f, 0x9b, 0xb1, 0xaa, 0x5f, 0x65, 0xa1, 0xc4, 0x52, 0xa0, 0x45, 0xb0, 0x7f, 0xa9, 0x0e, + 0x32, 0x64, 0xb1, 0x3b, 0x54, 0x32, 0x1b, 0x59, 0x6a, 0x7e, 0xec, 0x0e, 0xe9, 0x2a, 0x23, 0xb0, + 0x42, 0x25, 0xcb, 0x48, 0xec, 0x39, 0x72, 0x52, 0x6e, 0xe4, 0x24, 0x91, 0x6f, 0x8b, 0x51, 0xbe, + 0xa1, 0x75, 0x28, 0x7e, 0xdf, 0xb0, 0x89, 0xfe, 0xd8, 0x0b, 0x94, 0x3c, 0xe3, 0x2c, 0xd0, 0xf1, + 0x81, 0x17, 0xd0, 0x68, 0xc5, 0x2e, 0x09, 0x2e, 0x7c, 0xcf, 0x76, 0x89, 0x70, 0x74, 0x8c, 0x42, + 0xc3, 0x33, 0xc4, 0xbd, 0x00, 0x13, 0x9d, 0x6a, 0x52, 0x64, 0xcc, 0x25, 0x4e, 0x69, 0xb8, 0x43, + 0x74, 0x0f, 0x0a, 0x43, 0xcf, 0x19, 0xf4, 0x71, 0xa8, 0x94, 0x36, 0xb2, 0x9b, 0xe5, 0xed, 0x57, + 0x12, 0x2c, 0xf1, 0x88, 0xad, 0xd6, 0x22, 0x2e, 0x74, 0x0f, 0xf2, 0xc2, 0x92, 0x90, 0xce, 0x92, + 0x82, 0x0d, 0xdd, 0x82, 0x02, 0x2d, 0x51, 0xde, 0x80, 0x28, 0x65, 0x26, 0x61, 0x3d, 0x92, 0x10, + 0x95, 0xb0, 0xea, 0xbe, 0xa8, 0x7f, 0x5a, 0xb4, 0x12, 0xd5, 0x21, 0x1f, 0x12, 0x83, 0x0c, 0x42, + 0x65, 0x69, 0x43, 0xda, 0x5c, 0xd9, 0x7e, 0x23, 0x61, 0x57, 0xe6, 0xa6, 0x6a, 0x8b, 0xb1, 0x68, + 0x82, 0x55, 0x7d, 0x1b, 0xf2, 0xfc, 0x34, 0x97, 0xfa, 0x0e, 0x41, 0xce, 0x37, 0xc8, 0x99, 0xc8, + 0x59, 0xf6, 0xac, 0x7e, 0x0a, 0x05, 0x0d, 0x87, 0x03, 0x87, 0x84, 0xb4, 0x52, 0xd9, 0x34, 0xf6, + 0x42, 0xe6, 0xdd, 0xe4, 0xa0, 0x1e, 0x47, 0xab, 0x26, 0x18, 0xd1, 0x4d, 0xb8, 0xc2, 0xa6, 0xf5, + 0x90, 0x60, 0x5f, 0x17, 0xd2, 0x78, 0x60, 0xac, 0x76, 0xa3, 0xb8, 0x62, 0x2c, 0xa1, 0xfa, 0x8b, + 0x32, 0x2c, 0xb2, 0x43, 0x88, 0xd8, 0x90, 0x46, 0xb1, 0x31, 0x59, 0x7f, 0xe4, 0xe9, 0xfa, 0x33, + 0xb6, 0x54, 0xe6, 0x6b, 0x5b, 0x0a, 0xbd, 0x04, 0xcb, 0xfc, 0x49, 0x37, 0x31, 0x31, 0x6c, 0x47, + 0x51, 0xd8, 0x36, 0x4b, 0x9c, 0xb8, 0xcf, 0x68, 0xe8, 0x83, 0xa9, 0xda, 0x9d, 0x14, 0x49, 0x93, + 0x75, 0x1b, 0x7d, 0x08, 0x8b, 0xd4, 0x0e, 0xa1, 0x52, 0x66, 0xf6, 0xdc, 0x9c, 0x47, 0x4f, 0x6a, + 0x20, 0x8d, 0xb3, 0xa1, 0xfb, 0x50, 0x08, 0xb8, 0x6f, 0x44, 0x24, 0xbe, 0x9a, 0x58, 0x66, 0xd8, + 0x6a, 0x2d, 0x62, 0x43, 0xef, 0x41, 0xb9, 0x17, 0x60, 0x83, 0x60, 0x5a, 0x1b, 0xb0, 0x92, 0x67, + 0x52, 0x2a, 0x33, 0xd1, 0xd8, 0x8e, 0x2e, 0x54, 0x0d, 0xf8, 0x72, 0x4a, 0x40, 0xef, 0x02, 0x84, + 0xc4, 0x08, 0x08, 0xe7, 0x2d, 0x24, 0xf2, 0x96, 0xd8, 0x6a, 0xc6, 0xfa, 0x1e, 0x94, 0x1f, 0xdb, + 0xae, 0xcd, 0x6b, 0x12, 0x56, 0x8a, 0xc9, 0xfb, 0xf2, 0xe5, 0x8c, 0x39, 0x96, 0x3e, 0x4b, 0x73, + 0xa7, 0xcf, 0xda, 0x28, 0x78, 0x97, 0x59, 0xb8, 0x45, 0x11, 0x79, 0x03, 0xca, 0x8e, 0x67, 0x85, + 0xba, 0xb8, 0x2f, 0x9f, 0xe1, 0xd5, 0x84, 0x92, 0xf6, 0xf8, 0x9d, 0xf9, 0x2d, 0xb8, 0xc2, 0xdd, + 0xa5, 0xfb, 0x81, 0x37, 0xc4, 0xae, 0xe1, 0xf6, 0xb0, 0xf2, 0x2c, 0xdb, 0xb7, 0x36, 0x97, 0xbb, + 0x1f, 0x8e, 0xd8, 0x34, 0x39, 0x9c, 0xa2, 0xa0, 0x4d, 0x90, 0x79, 0x42, 0xc4, 0x20, 0xc2, 0x1a, + 0xd3, 0x61, 0xa5, 0x1b, 0x83, 0x1a, 0xc7, 0x26, 0x6a, 0x40, 0xc1, 0xf3, 0x19, 0x66, 0x52, 0x9e, + 0x63, 0xbb, 0xcf, 0x15, 0xd6, 0xa7, 0x9c, 0x45, 0x8b, 0x78, 0xd1, 0x73, 0x50, 0x70, 0x3c, 0x4b, + 0x1f, 0x04, 0x8e, 0xb2, 0xce, 0x2f, 0x09, 0xc7, 0xb3, 0x3a, 0x81, 0x83, 0xbe, 0x0d, 0xcb, 0xe1, + 0xa0, 0x1b, 0x12, 0x9b, 0x0c, 0xf8, 0x2e, 0xd7, 0x59, 0x50, 0xde, 0x99, 0x2f, 0x79, 0xe2, 0x9c, + 0x0d, 0x5a, 0x8a, 0xb5, 0x49, 0x69, 0xb4, 0xb6, 0x10, 0xc3, 0x0a, 0x95, 0x1b, 0xfc, 0x16, 0xa0, + 0xcf, 0xb4, 0x12, 0xf3, 0xb2, 0x1c, 0x2a, 0x1b, 0x73, 0x55, 0xe2, 0x16, 0x5b, 0xad, 0x45, 0x5c, + 0xe8, 0x68, 0x54, 0x89, 0x5f, 0x64, 0xfc, 0x6f, 0xcf, 0xa5, 0x2c, 0xbf, 0xcb, 0xb8, 0x96, 0x82, + 0xbf, 0x72, 0x1f, 0xd0, 0xec, 0x19, 0xe8, 0x35, 0x75, 0x8e, 0x2f, 0x44, 0xe5, 0xa1, 0x8f, 0xe8, + 0x2a, 0x2c, 0x0e, 0x0d, 0x67, 0x10, 0xe1, 0x1a, 0x3e, 0xd8, 0xc9, 0xdc, 0x95, 0x2a, 0x5d, 0x28, + 0xc7, 0x04, 0x5f, 0xc2, 0xfa, 0x41, 0x9c, 0x35, 0xc5, 0xad, 0x31, 0xde, 0x43, 0xfd, 0x21, 0xe4, + 0x79, 0x99, 0x42, 0x08, 0x56, 0x5a, 0xed, 0xdd, 0x76, 0xa7, 0xa5, 0x77, 0x9a, 0x1f, 0x35, 0x4f, + 0x3f, 0x6e, 0xca, 0x0b, 0x08, 0x20, 0xff, 0xff, 0x9d, 0x46, 0xa7, 0xb1, 0x2f, 0x4b, 0xa8, 0x0c, + 0x85, 0x8f, 0x4f, 0xb5, 0x8f, 0x8e, 0x9b, 0x87, 0x72, 0x86, 0x0e, 0x5a, 0x9d, 0x7a, 0xbd, 0xd1, + 0x6a, 0xc9, 0x59, 0x3a, 0x38, 0xd8, 0x3d, 0x3e, 0xe9, 0x68, 0x0d, 0x39, 0x47, 0xc5, 0x1c, 0x37, + 0xdb, 0x0d, 0xad, 0xb9, 0x7b, 0xa2, 0x37, 0x34, 0xed, 0x54, 0x93, 0x17, 0xe9, 0x82, 0xf6, 0xf1, + 0x83, 0xc6, 0x69, 0xa7, 0x2d, 0xe7, 0xd1, 0x32, 0x94, 0xea, 0xbb, 0xcd, 0x7a, 0xe3, 0xe4, 0xa4, + 0xb1, 0x2f, 0x17, 0xd4, 0x1f, 0x40, 0x31, 0xd2, 0x6b, 0x2a, 0xfd, 0xa5, 0x34, 0xe9, 0x7f, 0x1b, + 0x8a, 0xd8, 0x35, 0x39, 0x63, 0x26, 0x91, 0xb1, 0x80, 0x5d, 0x93, 0x8e, 0xd4, 0x36, 0xac, 0x89, + 0xa0, 0x16, 0xc0, 0xf4, 0x01, 0x26, 0x86, 0x69, 0x10, 0x03, 0xed, 0xc0, 0x22, 0x33, 0x9c, 0x50, + 0xe3, 0xe5, 0x79, 0xe2, 0x40, 0xe3, 0x2c, 0xea, 0xef, 0xb3, 0x20, 0x4f, 0x67, 0x2a, 0x32, 0xe1, + 0xb9, 0x00, 0x87, 0x9e, 0x33, 0xc4, 0xf4, 0xae, 0x9a, 0x40, 0x89, 0xd9, 0xf4, 0x28, 0x51, 0x7b, + 0x36, 0x12, 0x36, 0x89, 0xd3, 0xbf, 0x09, 0x57, 0x47, 0xbb, 0xc4, 0x41, 0x63, 0x3e, 0x6d, 0x27, + 0x80, 0x22, 0x31, 0x31, 0x94, 0xfe, 0x1d, 0x5a, 0x63, 0x1d, 0xac, 0x9f, 0x19, 0xe1, 0x19, 0x0e, + 0x95, 0x1c, 0xcb, 0x90, 0x7b, 0x29, 0x4b, 0x56, 0xf5, 0xc0, 0x76, 0xf0, 0x11, 0x93, 0xc0, 0x13, + 0x06, 0x1e, 0x8f, 0x08, 0x95, 0x33, 0x58, 0x9d, 0x9a, 0xbe, 0x24, 0xec, 0xef, 0x4d, 0x86, 0x7d, + 0xd2, 0xa1, 0xc6, 0x02, 0xe3, 0x81, 0xdf, 0x04, 0x18, 0x4f, 0xa0, 0xfb, 0x50, 0x1a, 0x9d, 0x4c, + 0x91, 0xd8, 0xb9, 0x5e, 0x4a, 0x10, 0x4b, 0x39, 0xb5, 0x62, 0xa4, 0xbb, 0xfa, 0x23, 0x09, 0x72, + 0xf4, 0x01, 0xdd, 0x87, 0x1c, 0xb9, 0xf0, 0x79, 0xf8, 0xae, 0x24, 0x3a, 0x95, 0xb2, 0xb0, 0x9f, + 0xf6, 0x85, 0x8f, 0x35, 0xc6, 0x39, 0x59, 0x11, 0x96, 0x84, 0xd2, 0xea, 0x06, 0x14, 0xa3, 0x75, + 0xa8, 0x08, 0xb9, 0xe6, 0x69, 0xb3, 0xc1, 0x33, 0xb4, 0x75, 0xb4, 0xbb, 0x7d, 0xfb, 0x1d, 0x59, + 0x52, 0xbf, 0xa2, 0x9d, 0x08, 0xab, 0x63, 0x68, 0x03, 0x96, 0xce, 0xfb, 0xa1, 0x7e, 0x8e, 0x2f, + 0xf4, 0x18, 0x26, 0x83, 0xf3, 0x7e, 0xf8, 0x11, 0xbe, 0x60, 0x5d, 0x4f, 0x6b, 0x02, 0xd2, 0x66, + 0xd9, 0x91, 0xff, 0x6f, 0xae, 0x62, 0x29, 0xfe, 0x34, 0xdc, 0x21, 0xf7, 0xdf, 0x18, 0x08, 0x57, + 0xde, 0x87, 0x95, 0xc9, 0xc9, 0xa4, 0x7a, 0xb7, 0x14, 0x77, 0x89, 0x07, 0xa8, 0xce, 0xb0, 0x40, + 0x9a, 0xae, 0x7a, 0x94, 0xa7, 0x99, 0xf4, 0x79, 0x7a, 0x1f, 0x56, 0x0f, 0x31, 0x79, 0x9a, 0x1e, + 0xfe, 0xa7, 0x12, 0x5c, 0x39, 0xb1, 0x43, 0x2e, 0x23, 0x9c, 0x53, 0xc8, 0x35, 0x28, 0xf9, 0x2c, + 0xfb, 0xed, 0xcf, 0xb8, 0x15, 0x16, 0xb5, 0x22, 0x25, 0xb4, 0xec, 0xcf, 0x78, 0x27, 0x4c, 0x27, + 0x89, 0x77, 0x8e, 0x5d, 0xd1, 0x75, 0xb1, 0xe5, 0x6d, 0x4a, 0xa0, 0xa0, 0xe3, 0xb1, 0xed, 0x10, + 0x1c, 0x30, 0x84, 0x53, 0xd2, 0xc4, 0x48, 0xfd, 0x0c, 0x50, 0x5c, 0x8f, 0xd0, 0xf7, 0xdc, 0x10, + 0xa3, 0xf7, 0x69, 0xd7, 0x4e, 0x29, 0x22, 0xa6, 0xe7, 0xb3, 0x8e, 0xe0, 0x41, 0xaf, 0xc2, 0xaa, + 0x8b, 0x3f, 0x25, 0x7a, 0x4c, 0x1f, 0x7e, 0xf2, 0x65, 0x4a, 0x7e, 0x18, 0xe9, 0xa4, 0xd6, 0x01, + 0xd5, 0x69, 0x66, 0x3b, 0x4f, 0x63, 0xc9, 0x9f, 0xe4, 0x60, 0x29, 0xfe, 0x2a, 0x64, 0x06, 0xa2, + 0x6f, 0x40, 0xd9, 0xc4, 0x61, 0x2f, 0xb0, 0x19, 0xec, 0x60, 0xf0, 0xb4, 0xa4, 0xc5, 0x49, 0xa8, + 0x0d, 0x72, 0x84, 0x79, 0x08, 0xee, 0xfb, 0x8e, 0x41, 0x22, 0x0c, 0x99, 0xa2, 0xee, 0xad, 0x0a, + 0x11, 0x6d, 0x21, 0x01, 0xbd, 0x1f, 0x05, 0x58, 0x6e, 0xfe, 0x00, 0x3b, 0x5a, 0x10, 0x21, 0x86, + 0x9e, 0x07, 0x56, 0x22, 0x58, 0x12, 0x16, 0xc5, 0xab, 0x85, 0x11, 0x65, 0x1a, 0x2c, 0x2f, 0xa6, + 0x02, 0xcb, 0x15, 0x28, 0x9a, 0x76, 0x68, 0x74, 0x1d, 0x6c, 0x2a, 0xa5, 0x0d, 0x69, 0xb3, 0xa8, + 0x8d, 0xc6, 0xc8, 0x9c, 0x86, 0x5e, 0xbc, 0x1f, 0xf8, 0x70, 0x1e, 0xe5, 0x85, 0x03, 0x92, 0x11, + 0xd8, 0xd3, 0x43, 0x9c, 0x3d, 0x19, 0x56, 0x04, 0x58, 0x15, 0xe6, 0x56, 0x7f, 0x2c, 0xc1, 0x7a, + 0xac, 0x0a, 0xa4, 0x7b, 0x31, 0xd6, 0x80, 0x82, 0x70, 0x9f, 0x28, 0x07, 0x6f, 0xa4, 0x38, 0xb0, + 0x16, 0xf1, 0xaa, 0x8f, 0x60, 0x2d, 0xaa, 0x0b, 0xff, 0xcd, 0x17, 0x73, 0xea, 0xbb, 0xa0, 0x8c, + 0x92, 0x54, 0x08, 0x9e, 0xb3, 0x66, 0xa8, 0x26, 0xac, 0x5f, 0xc2, 0x2a, 0xd2, 0xfc, 0x10, 0x8a, + 0x62, 0x93, 0x28, 0xd1, 0x53, 0x9d, 0x7b, 0xc4, 0xac, 0x7e, 0x03, 0xd6, 0xf7, 0xb1, 0x83, 0xbf, + 0x96, 0xed, 0x13, 0xce, 0xfe, 0x3b, 0x09, 0xd6, 0x3b, 0xbe, 0x69, 0xfc, 0x0f, 0x64, 0xc7, 0xdd, + 0x9e, 0x7d, 0x0a, 0xb7, 0xff, 0x3d, 0x2f, 0x4a, 0x90, 0x68, 0x71, 0x50, 0x17, 0xd6, 0x66, 0x1a, + 0xb5, 0x31, 0x44, 0x48, 0x7b, 0xb9, 0x5f, 0x9d, 0x6e, 0xd5, 0x18, 0x5c, 0xf0, 0x29, 0x2c, 0x64, + 0x46, 0xc0, 0xa6, 0x3e, 0xc4, 0x81, 0xfd, 0xf8, 0x42, 0xe7, 0x9d, 0x95, 0x78, 0xd7, 0x70, 0x37, + 0x45, 0x53, 0x56, 0x7d, 0xc4, 0x04, 0xf0, 0x11, 0x85, 0x88, 0x42, 0x70, 0x9c, 0x8c, 0x3e, 0x81, + 0xa5, 0xbe, 0xd1, 0x3b, 0xb3, 0x5d, 0xac, 0x33, 0xa0, 0x92, 0x65, 0xdb, 0xdc, 0x49, 0xb3, 0xcd, + 0x03, 0xce, 0xcf, 0x8e, 0x55, 0xee, 0x8f, 0x07, 0x14, 0x77, 0x98, 0x76, 0x78, 0xce, 0xae, 0x36, + 0xdd, 0xea, 0x32, 0xd8, 0x99, 0xd5, 0x80, 0xd2, 0xe8, 0xed, 0x76, 0xd8, 0x45, 0x1e, 0x3c, 0x13, + 0x2f, 0x22, 0xd1, 0x59, 0x73, 0x4c, 0x89, 0x0f, 0xd3, 0x28, 0x11, 0x2f, 0x3d, 0xe2, 0xc4, 0x28, + 0x9c, 0xa1, 0x21, 0x1f, 0xae, 0xd2, 0xf6, 0x34, 0x24, 0x01, 0x36, 0x68, 0x33, 0x15, 0xed, 0xb8, + 0x98, 0x7e, 0xc7, 0x13, 0xcf, 0x6a, 0x45, 0x62, 0xa2, 0x1d, 0x9d, 0x19, 0x9a, 0x5a, 0x85, 0xa5, + 0x09, 0x83, 0xcb, 0xb0, 0xd4, 0x3c, 0x6d, 0xeb, 0x8f, 0x1a, 0xda, 0xf1, 0xc1, 0x71, 0x63, 0x5f, + 0x5e, 0x40, 0x4b, 0x50, 0x1c, 0x8d, 0x24, 0xb5, 0x0e, 0xe5, 0x98, 0x41, 0xd1, 0x2a, 0x94, 0x3b, + 0xcd, 0xd6, 0xc3, 0x46, 0x3d, 0x5a, 0x4d, 0xf9, 0xb7, 0xf4, 0xa3, 0xe3, 0xc3, 0xa3, 0xfa, 0xc3, + 0x8e, 0x7e, 0x57, 0x96, 0xd0, 0x15, 0x58, 0x8e, 0x51, 0x6e, 0x6d, 0xcb, 0x19, 0xf5, 0xf6, 0x64, + 0x2d, 0x16, 0x5b, 0xaf, 0x00, 0x3c, 0xe8, 0xb4, 0xda, 0xfa, 0x83, 0xdd, 0x76, 0xfd, 0x48, 0x5e, + 0xa0, 0xb2, 0x77, 0x4f, 0x4e, 0x4e, 0x3f, 0xd6, 0x4f, 0x4e, 0x4f, 0x5b, 0x0d, 0x59, 0x52, 0x0f, + 0x01, 0xcd, 0x9e, 0x8a, 0xf7, 0x82, 0x5a, 0x63, 0xf7, 0x81, 0xbe, 0xdf, 0x38, 0xd8, 0xed, 0x9c, + 0xb4, 0xe5, 0x05, 0xda, 0xb7, 0x09, 0xda, 0x69, 0x53, 0x96, 0xa8, 0xe4, 0x68, 0x78, 0x70, 0x20, + 0x67, 0xb6, 0xff, 0xba, 0x02, 0x50, 0xa7, 0xa6, 0xe3, 0x2f, 0xd8, 0x7e, 0x2e, 0x41, 0x39, 0x56, + 0xc6, 0xd1, 0x56, 0x82, 0x9d, 0x67, 0x81, 0x5f, 0xe5, 0x7a, 0xc4, 0x12, 0xfb, 0xce, 0x53, 0x1d, + 0x35, 0x6a, 0x6a, 0xed, 0xcb, 0x7f, 0xfe, 0xeb, 0x97, 0x99, 0xd7, 0xd5, 0x8d, 0xda, 0x70, 0xab, + 0x26, 0x4a, 0x45, 0x58, 0xfb, 0x7c, 0x5c, 0x46, 0xbe, 0xa8, 0x71, 0x1c, 0xb3, 0x23, 0xae, 0xe2, + 0x9f, 0x49, 0x50, 0x8c, 0xca, 0x3a, 0xaa, 0x26, 0xe8, 0x33, 0x85, 0x0b, 0x2b, 0x73, 0x5d, 0xfb, + 0xea, 0x5b, 0x4c, 0xa7, 0xd7, 0xd0, 0x2b, 0x49, 0x3a, 0xd5, 0x3e, 0xb7, 0xcd, 0x2f, 0xd0, 0x6f, + 0x24, 0x80, 0x31, 0x6a, 0x43, 0x49, 0xef, 0x1a, 0x66, 0x80, 0x66, 0x65, 0x2b, 0x05, 0x07, 0xbf, + 0x2b, 0xd4, 0x4d, 0xa6, 0xa2, 0x8a, 0x12, 0xcd, 0x86, 0x7e, 0x4b, 0x5d, 0x38, 0xc6, 0x75, 0xc9, + 0x2e, 0x9c, 0xc1, 0x80, 0x73, 0x5a, 0xed, 0x0e, 0x53, 0x69, 0x4b, 0x7d, 0x73, 0x2e, 0xab, 0xed, + 0xf4, 0xd8, 0x3e, 0x3b, 0xd2, 0x4d, 0xf4, 0x2b, 0xf6, 0x11, 0x29, 0xfa, 0x0c, 0x97, 0x68, 0xbf, + 0x99, 0x2f, 0x76, 0x49, 0x21, 0xf6, 0x0e, 0x53, 0xec, 0x6d, 0xf5, 0x8d, 0xf9, 0x14, 0x0b, 0xa8, + 0x7c, 0xaa, 0xd7, 0x9f, 0xa5, 0x89, 0x4e, 0x26, 0x42, 0xb4, 0x77, 0xe7, 0xcf, 0x81, 0xc9, 0xeb, + 0xb1, 0x92, 0xe6, 0x3e, 0x53, 0x6f, 0x31, 0xad, 0xdf, 0x52, 0xd5, 0x27, 0x6b, 0x1d, 0x5d, 0xf8, + 0x3b, 0xd1, 0xdd, 0x87, 0xfe, 0x24, 0x8d, 0x7b, 0xa1, 0x48, 0xdf, 0xdb, 0x73, 0xe6, 0xc8, 0xd3, + 0x28, 0x2b, 0x7c, 0x8f, 0x6a, 0xc9, 0xca, 0xd6, 0x3e, 0x1f, 0x63, 0x80, 0x2f, 0xd0, 0x5f, 0xe2, + 0x9d, 0x57, 0x84, 0x88, 0xd0, 0x9d, 0x79, 0x13, 0x62, 0x0a, 0x7e, 0x55, 0xee, 0xa6, 0x67, 0x14, + 0x09, 0x75, 0x93, 0x9d, 0xe0, 0x65, 0x34, 0x87, 0xb9, 0x69, 0x4a, 0xa1, 0x59, 0x80, 0x95, 0x18, + 0x18, 0x4f, 0xc4, 0x64, 0x95, 0xb5, 0x99, 0x5e, 0xa1, 0xd1, 0xf7, 0xc9, 0x45, 0x64, 0xd6, 0x9b, + 0xa9, 0xcd, 0xfa, 0x95, 0x04, 0x68, 0x16, 0xa6, 0x25, 0x6a, 0xf8, 0x44, 0x64, 0x97, 0x2e, 0x1a, + 0xee, 0x33, 0xb5, 0x77, 0xb6, 0xd3, 0xaa, 0x3d, 0x8e, 0xe3, 0x3f, 0x4a, 0xb0, 0x3a, 0xf5, 0x51, + 0x3d, 0x31, 0x8e, 0x2f, 0xff, 0x08, 0x9f, 0x54, 0x1c, 0xea, 0x4c, 0xd7, 0x0f, 0xd4, 0x5b, 0x69, + 0x75, 0x0d, 0x06, 0xee, 0x8e, 0xf8, 0x5e, 0xb3, 0x77, 0x0e, 0x4a, 0xcf, 0xeb, 0x47, 0x1b, 0x4d, + 0xa8, 0xf5, 0x50, 0xfa, 0xe4, 0x50, 0xd0, 0x2d, 0xcf, 0x31, 0x5c, 0xab, 0xea, 0x05, 0x56, 0xcd, + 0xc2, 0x2e, 0x73, 0x75, 0x8d, 0x4f, 0x19, 0xbe, 0x1d, 0x3e, 0xe1, 0x1f, 0x33, 0xde, 0x1b, 0x8f, + 0xfe, 0x90, 0xc9, 0x1e, 0xd6, 0xf7, 0xba, 0x79, 0xc6, 0x79, 0xeb, 0xdf, 0x01, 0x00, 0x00, 0xff, + 0xff, 0x8d, 0x04, 0xdb, 0x30, 0xd1, 0x21, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/clouddebugger/v2/controller.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/clouddebugger/v2/controller.pb.go index 7773d6e..558f6fb 100644 --- a/vendor/google.golang.org/genproto/googleapis/devtools/clouddebugger/v2/controller.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/devtools/clouddebugger/v2/controller.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/devtools/clouddebugger/v2/controller.proto -// DO NOT EDIT! /* Package clouddebugger is a generated protocol buffer package. @@ -82,6 +81,9 @@ func (m *RegisterDebuggeeRequest) GetDebuggee() *Debuggee { type RegisterDebuggeeResponse struct { // Debuggee resource. // The field `id` is guranteed to be set (in addition to the echoed fields). + // If the field `is_disabled` is set to `true`, the agent should disable + // itself by removing all breakpoints and detaching from the application. + // It should however continue to poll `RegisterDebuggee` until reenabled. Debuggee *Debuggee `protobuf:"bytes,1,opt,name=debuggee" json:"debuggee,omitempty"` } @@ -101,16 +103,17 @@ func (m *RegisterDebuggeeResponse) GetDebuggee() *Debuggee { type ListActiveBreakpointsRequest struct { // Identifies the debuggee. DebuggeeId string `protobuf:"bytes,1,opt,name=debuggee_id,json=debuggeeId" json:"debuggee_id,omitempty"` - // A wait token that, if specified, blocks the method call until the list - // of active breakpoints has changed, or a server selected timeout has - // expired. The value should be set from the last returned response. + // A token that, if specified, blocks the method call until the list + // of active breakpoints has changed, or a server-selected timeout has + // expired. The value should be set from the `next_wait_token` field in + // the last response. The initial value should be set to `"init"`. WaitToken string `protobuf:"bytes,2,opt,name=wait_token,json=waitToken" json:"wait_token,omitempty"` - // If set to `true`, returns `google.rpc.Code.OK` status and sets the - // `wait_expired` response field to `true` when the server-selected timeout - // has expired (recommended). + // If set to `true` (recommended), returns `google.rpc.Code.OK` status and + // sets the `wait_expired` response field to `true` when the server-selected + // timeout has expired. // - // If set to `false`, returns `google.rpc.Code.ABORTED` status when the - // server-selected timeout has expired (deprecated). + // If set to `false` (deprecated), returns `google.rpc.Code.ABORTED` status + // when the server-selected timeout has expired. SuccessOnTimeout bool `protobuf:"varint,3,opt,name=success_on_timeout,json=successOnTimeout" json:"success_on_timeout,omitempty"` } @@ -145,11 +148,12 @@ type ListActiveBreakpointsResponse struct { // List of all active breakpoints. // The fields `id` and `location` are guaranteed to be set on each breakpoint. Breakpoints []*Breakpoint `protobuf:"bytes,1,rep,name=breakpoints" json:"breakpoints,omitempty"` - // A wait token that can be used in the next method call to block until + // A token that can be used in the next method call to block until // the list of breakpoints changes. NextWaitToken string `protobuf:"bytes,2,opt,name=next_wait_token,json=nextWaitToken" json:"next_wait_token,omitempty"` - // The `wait_expired` field is set to true by the server when the - // request times out and the field `success_on_timeout` is set to true. + // If set to `true`, indicates that there is no change to the + // list of active breakpoints and the server-selected timeout has expired. + // The `breakpoints` field would be empty and should be ignored. WaitExpired bool `protobuf:"varint,3,opt,name=wait_expired,json=waitExpired" json:"wait_expired,omitempty"` } @@ -184,7 +188,8 @@ type UpdateActiveBreakpointRequest struct { // Identifies the debuggee being debugged. DebuggeeId string `protobuf:"bytes,1,opt,name=debuggee_id,json=debuggeeId" json:"debuggee_id,omitempty"` // Updated breakpoint information. - // The field 'id' must be set. + // The field `id` must be set. + // The agent must echo all Breakpoint specification fields in the update. Breakpoint *Breakpoint `protobuf:"bytes,2,opt,name=breakpoint" json:"breakpoint,omitempty"` } @@ -239,18 +244,18 @@ const _ = grpc.SupportPackageIsVersion4 type Controller2Client interface { // Registers the debuggee with the controller service. // - // All agents attached to the same application should call this method with - // the same request content to get back the same stable `debuggee_id`. Agents - // should call this method again whenever `google.rpc.Code.NOT_FOUND` is - // returned from any controller method. + // All agents attached to the same application must call this method with + // exactly the same request content to get back the same stable `debuggee_id`. + // Agents should call this method again whenever `google.rpc.Code.NOT_FOUND` + // is returned from any controller method. // - // This allows the controller service to disable the agent or recover from any - // data loss. If the debuggee is disabled by the server, the response will - // have `is_disabled` set to `true`. + // This protocol allows the controller service to disable debuggees, recover + // from data loss, or change the `debuggee_id` format. Agents must handle + // `debuggee_id` value changing upon re-registration. RegisterDebuggee(ctx context.Context, in *RegisterDebuggeeRequest, opts ...grpc.CallOption) (*RegisterDebuggeeResponse, error) // Returns the list of all active breakpoints for the debuggee. // - // The breakpoint specification (location, condition, and expression + // The breakpoint specification (`location`, `condition`, and `expressions` // fields) is semantically immutable, although the field values may // change. For example, an agent may update the location line number // to reflect the actual line where the breakpoint was set, but this @@ -263,12 +268,11 @@ type Controller2Client interface { // setting those breakpoints again. ListActiveBreakpoints(ctx context.Context, in *ListActiveBreakpointsRequest, opts ...grpc.CallOption) (*ListActiveBreakpointsResponse, error) // Updates the breakpoint state or mutable fields. - // The entire Breakpoint message must be sent back to the controller - // service. + // The entire Breakpoint message must be sent back to the controller service. // // Updates to active breakpoint fields are only allowed if the new value // does not change the breakpoint specification. Updates to the `location`, - // `condition` and `expression` fields should not alter the breakpoint + // `condition` and `expressions` fields should not alter the breakpoint // semantics. These may only make changes such as canonicalizing a value // or snapping the location to the correct line of code. UpdateActiveBreakpoint(ctx context.Context, in *UpdateActiveBreakpointRequest, opts ...grpc.CallOption) (*UpdateActiveBreakpointResponse, error) @@ -314,18 +318,18 @@ func (c *controller2Client) UpdateActiveBreakpoint(ctx context.Context, in *Upda type Controller2Server interface { // Registers the debuggee with the controller service. // - // All agents attached to the same application should call this method with - // the same request content to get back the same stable `debuggee_id`. Agents - // should call this method again whenever `google.rpc.Code.NOT_FOUND` is - // returned from any controller method. + // All agents attached to the same application must call this method with + // exactly the same request content to get back the same stable `debuggee_id`. + // Agents should call this method again whenever `google.rpc.Code.NOT_FOUND` + // is returned from any controller method. // - // This allows the controller service to disable the agent or recover from any - // data loss. If the debuggee is disabled by the server, the response will - // have `is_disabled` set to `true`. + // This protocol allows the controller service to disable debuggees, recover + // from data loss, or change the `debuggee_id` format. Agents must handle + // `debuggee_id` value changing upon re-registration. RegisterDebuggee(context.Context, *RegisterDebuggeeRequest) (*RegisterDebuggeeResponse, error) // Returns the list of all active breakpoints for the debuggee. // - // The breakpoint specification (location, condition, and expression + // The breakpoint specification (`location`, `condition`, and `expressions` // fields) is semantically immutable, although the field values may // change. For example, an agent may update the location line number // to reflect the actual line where the breakpoint was set, but this @@ -338,12 +342,11 @@ type Controller2Server interface { // setting those breakpoints again. ListActiveBreakpoints(context.Context, *ListActiveBreakpointsRequest) (*ListActiveBreakpointsResponse, error) // Updates the breakpoint state or mutable fields. - // The entire Breakpoint message must be sent back to the controller - // service. + // The entire Breakpoint message must be sent back to the controller service. // // Updates to active breakpoint fields are only allowed if the new value // does not change the breakpoint specification. Updates to the `location`, - // `condition` and `expression` fields should not alter the breakpoint + // `condition` and `expressions` fields should not alter the breakpoint // semantics. These may only make changes such as canonicalizing a value // or snapping the location to the correct line of code. UpdateActiveBreakpoint(context.Context, *UpdateActiveBreakpointRequest) (*UpdateActiveBreakpointResponse, error) @@ -431,41 +434,43 @@ var _Controller2_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("google/devtools/clouddebugger/v2/controller.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 572 bytes of a gzipped FileDescriptorProto + // 602 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0xdd, 0x6a, 0xd4, 0x40, - 0x14, 0x66, 0x5a, 0x94, 0xf6, 0x44, 0x69, 0x19, 0x50, 0x97, 0xd8, 0xea, 0x36, 0x48, 0x29, 0xeb, - 0x92, 0xc1, 0xe8, 0x8d, 0x2b, 0xf8, 0xb3, 0xfe, 0x21, 0xb4, 0x5a, 0x96, 0x8a, 0xe0, 0xcd, 0x92, - 0x4d, 0x8e, 0x61, 0x68, 0x76, 0x26, 0x66, 0x26, 0x6b, 0xa5, 0xf4, 0xc6, 0x2b, 0x41, 0xf1, 0xc6, - 0x87, 0x11, 0x7c, 0x0d, 0x7d, 0x04, 0xaf, 0x7c, 0x0a, 0xd9, 0x64, 0xf6, 0xaf, 0xed, 0x36, 0xed, - 0xe2, 0x65, 0xbe, 0x73, 0xbe, 0x73, 0xbe, 0x6f, 0x72, 0xce, 0x81, 0x5b, 0x91, 0x94, 0x51, 0x8c, - 0x2c, 0xc4, 0x9e, 0x96, 0x32, 0x56, 0x2c, 0x88, 0x65, 0x16, 0x86, 0xd8, 0xc9, 0xa2, 0x08, 0x53, - 0xd6, 0xf3, 0x58, 0x20, 0x85, 0x4e, 0x65, 0x1c, 0x63, 0xea, 0x26, 0xa9, 0xd4, 0x92, 0x56, 0x0b, - 0x8a, 0x3b, 0xa0, 0xb8, 0x13, 0x14, 0xb7, 0xe7, 0xd9, 0x2b, 0xa6, 0xa8, 0x9f, 0x70, 0xe6, 0x0b, - 0x21, 0xb5, 0xaf, 0xb9, 0x14, 0xaa, 0xe0, 0xdb, 0x37, 0x4b, 0x5b, 0x86, 0xbe, 0xf6, 0x4d, 0xf2, - 0x55, 0x93, 0x9c, 0x7f, 0x75, 0xb2, 0x77, 0x0c, 0xbb, 0x89, 0xfe, 0x58, 0x04, 0x1d, 0x1f, 0xae, - 0xb4, 0x30, 0xe2, 0x4a, 0x63, 0xfa, 0xa4, 0xa0, 0x63, 0x0b, 0xdf, 0x67, 0xa8, 0x34, 0x7d, 0x06, - 0x0b, 0xa6, 0x22, 0x56, 0x48, 0x95, 0x6c, 0x58, 0x5e, 0xcd, 0x2d, 0xd3, 0xed, 0x0e, 0x8b, 0x0c, - 0xb9, 0x4e, 0x07, 0x2a, 0x47, 0x5b, 0xa8, 0x44, 0x0a, 0x85, 0xff, 0xad, 0xc7, 0x57, 0x02, 0x2b, - 0x9b, 0x5c, 0xe9, 0x47, 0x81, 0xe6, 0x3d, 0x6c, 0xa6, 0xe8, 0xef, 0x26, 0x92, 0x0b, 0xad, 0x06, - 0x66, 0xae, 0x83, 0x35, 0x48, 0x6e, 0xf3, 0x30, 0xef, 0xb5, 0xd8, 0x82, 0x01, 0xf4, 0x22, 0xa4, - 0xab, 0x00, 0x1f, 0x7c, 0xae, 0xdb, 0x5a, 0xee, 0xa2, 0xa8, 0xcc, 0xe5, 0xf1, 0xc5, 0x3e, 0xb2, - 0xd3, 0x07, 0x68, 0x1d, 0xa8, 0xca, 0x82, 0x00, 0x95, 0x6a, 0x4b, 0xd1, 0xd6, 0xbc, 0x8b, 0x32, - 0xd3, 0x95, 0xf9, 0x2a, 0xd9, 0x58, 0x68, 0x2d, 0x9b, 0xc8, 0x2b, 0xb1, 0x53, 0xe0, 0xce, 0x4f, - 0x02, 0xab, 0x53, 0xe4, 0x18, 0xe3, 0x2f, 0xc1, 0xea, 0x8c, 0xe0, 0x0a, 0xa9, 0xce, 0x6f, 0x58, - 0x5e, 0xbd, 0xdc, 0xfb, 0xa8, 0x56, 0x6b, 0xbc, 0x00, 0x5d, 0x87, 0x25, 0x81, 0x7b, 0xba, 0x7d, - 0xc4, 0xc3, 0xc5, 0x3e, 0xfc, 0x66, 0xe8, 0x63, 0x0d, 0x2e, 0xe4, 0x29, 0xb8, 0x97, 0xf0, 0x14, - 0x43, 0xe3, 0xc0, 0xea, 0x63, 0x4f, 0x0b, 0xc8, 0xf9, 0x46, 0x60, 0xf5, 0x75, 0x12, 0xfa, 0x1a, - 0x0f, 0xcb, 0x3f, 0xf5, 0x63, 0x6e, 0x02, 0x8c, 0xc4, 0xe5, 0x42, 0xce, 0x6a, 0x6e, 0x8c, 0xef, - 0x54, 0xe1, 0xda, 0x34, 0x3d, 0xc5, 0x6b, 0x7a, 0x5f, 0xce, 0x81, 0xf5, 0x78, 0xb8, 0x64, 0x1e, - 0xfd, 0x41, 0x60, 0xf9, 0xf0, 0xcc, 0xd1, 0xbb, 0xe5, 0x02, 0xa6, 0xac, 0x82, 0xdd, 0x98, 0x85, - 0x5a, 0x68, 0x73, 0xea, 0x9f, 0x7e, 0xfd, 0xf9, 0x3e, 0xb7, 0xee, 0xac, 0x4d, 0x5e, 0x02, 0x36, - 0x78, 0x2e, 0xc5, 0x52, 0x43, 0x6d, 0x90, 0x1a, 0xfd, 0x4d, 0xe0, 0xd2, 0xb1, 0x93, 0x43, 0xef, - 0x97, 0x6b, 0x38, 0x69, 0x03, 0xec, 0x07, 0x33, 0xf3, 0x8d, 0x91, 0x46, 0x6e, 0xe4, 0x0e, 0xf5, - 0xa6, 0x1a, 0xd9, 0x1f, 0x9b, 0x8a, 0x03, 0x36, 0x3e, 0x9e, 0x7f, 0x09, 0x5c, 0x3e, 0xfe, 0x1f, - 0xd2, 0x53, 0xe8, 0x3a, 0x71, 0x1a, 0xed, 0x87, 0xb3, 0x17, 0x30, 0xce, 0xb6, 0x72, 0x67, 0xcf, - 0xed, 0xe6, 0xd9, 0x9d, 0xb1, 0xfd, 0xd1, 0x87, 0xcb, 0xc3, 0x83, 0x06, 0xa9, 0x35, 0x3f, 0x13, - 0xb8, 0x11, 0xc8, 0x6e, 0xa9, 0xac, 0xe6, 0xd2, 0x68, 0x66, 0xb7, 0xfb, 0xd7, 0x78, 0x9b, 0xbc, - 0xdd, 0x32, 0xa4, 0x48, 0xc6, 0xbe, 0x88, 0x5c, 0x99, 0x46, 0x2c, 0x42, 0x91, 0xdf, 0x6a, 0x56, - 0x84, 0xfc, 0x84, 0xab, 0xe9, 0x87, 0xff, 0xde, 0x04, 0xd0, 0x39, 0x9f, 0x33, 0x6f, 0xff, 0x0b, - 0x00, 0x00, 0xff, 0xff, 0xe1, 0x6e, 0xc8, 0x51, 0xa4, 0x06, 0x00, 0x00, + 0x14, 0x66, 0x5a, 0x94, 0x76, 0xa2, 0xb4, 0x0c, 0xa8, 0x21, 0xb6, 0xba, 0x0d, 0x52, 0x96, 0x75, + 0xc9, 0x60, 0xf4, 0xc6, 0x15, 0xfc, 0xd9, 0xaa, 0x45, 0x68, 0xb5, 0x2c, 0xb5, 0x82, 0x2c, 0x2c, + 0xd9, 0xe4, 0x18, 0x86, 0x66, 0x67, 0x62, 0x66, 0xb2, 0x56, 0x4a, 0x6f, 0xbc, 0x55, 0xbc, 0xf1, + 0x2d, 0x7c, 0x01, 0xc1, 0x0b, 0x1f, 0xc0, 0x5b, 0x7d, 0x04, 0xaf, 0x7c, 0x0a, 0xc9, 0xdf, 0xfe, + 0xb4, 0xdd, 0xa6, 0x5d, 0xbc, 0xcc, 0x77, 0xe6, 0xfb, 0xce, 0xf7, 0x4d, 0xce, 0x1c, 0x7c, 0xcb, + 0x17, 0xc2, 0x0f, 0x80, 0x7a, 0xd0, 0x57, 0x42, 0x04, 0x92, 0xba, 0x81, 0x88, 0x3d, 0x0f, 0xba, + 0xb1, 0xef, 0x43, 0x44, 0xfb, 0x36, 0x75, 0x05, 0x57, 0x91, 0x08, 0x02, 0x88, 0xac, 0x30, 0x12, + 0x4a, 0x90, 0x4a, 0x46, 0xb1, 0x0a, 0x8a, 0x35, 0x46, 0xb1, 0xfa, 0xb6, 0xb1, 0x94, 0x8b, 0x3a, + 0x21, 0xa3, 0x0e, 0xe7, 0x42, 0x39, 0x8a, 0x09, 0x2e, 0x33, 0xbe, 0x71, 0xb3, 0xb4, 0xa5, 0xe7, + 0x28, 0x27, 0x3f, 0x7c, 0x35, 0x3f, 0x9c, 0x7e, 0x75, 0xe3, 0x37, 0x14, 0x7a, 0xa1, 0x7a, 0x9f, + 0x15, 0x4d, 0x07, 0x5f, 0x69, 0x81, 0xcf, 0xa4, 0x82, 0xe8, 0x71, 0x46, 0x87, 0x16, 0xbc, 0x8d, + 0x41, 0x2a, 0xf2, 0x14, 0xcf, 0xe5, 0x8a, 0xa0, 0xa3, 0x0a, 0xaa, 0x6a, 0x76, 0xcd, 0x2a, 0xf3, + 0x6d, 0x0d, 0x44, 0x06, 0x5c, 0xb3, 0x8b, 0xf5, 0xa3, 0x2d, 0x64, 0x28, 0xb8, 0x84, 0xff, 0xd6, + 0xe3, 0x13, 0xc2, 0x4b, 0x1b, 0x4c, 0xaa, 0x47, 0xae, 0x62, 0x7d, 0x68, 0x46, 0xe0, 0xec, 0x86, + 0x82, 0x71, 0x25, 0x8b, 0x30, 0xd7, 0xb1, 0x56, 0x1c, 0xee, 0x30, 0x2f, 0xed, 0x35, 0xdf, 0xc2, + 0x05, 0xf4, 0xcc, 0x23, 0xcb, 0x18, 0xbf, 0x73, 0x98, 0xea, 0x28, 0xb1, 0x0b, 0x5c, 0x9f, 0x49, + 0xeb, 0xf3, 0x09, 0xb2, 0x9d, 0x00, 0xa4, 0x8e, 0x89, 0x8c, 0x5d, 0x17, 0xa4, 0xec, 0x08, 0xde, + 0x51, 0xac, 0x07, 0x22, 0x56, 0xfa, 0x6c, 0x05, 0x55, 0xe7, 0x5a, 0x8b, 0x79, 0xe5, 0x05, 0xdf, + 0xce, 0x70, 0xf3, 0x3b, 0xc2, 0xcb, 0x13, 0xec, 0xe4, 0xc1, 0x9f, 0x63, 0xad, 0x3b, 0x84, 0x75, + 0x54, 0x99, 0xad, 0x6a, 0x76, 0xbd, 0x3c, 0xfb, 0x50, 0xab, 0x35, 0x2a, 0x40, 0x56, 0xf1, 0x02, + 0x87, 0x3d, 0xd5, 0x39, 0x92, 0xe1, 0x62, 0x02, 0xbf, 0x1a, 0xe4, 0x58, 0xc1, 0x17, 0xd2, 0x23, + 0xb0, 0x17, 0xb2, 0x08, 0xbc, 0x3c, 0x81, 0x96, 0x60, 0x4f, 0x32, 0xc8, 0xfc, 0x8c, 0xf0, 0xf2, + 0xcb, 0xd0, 0x73, 0x14, 0x1c, 0xb6, 0x7f, 0xea, 0xcb, 0xdc, 0xc0, 0x78, 0x68, 0x2e, 0x35, 0x72, + 0xd6, 0x70, 0x23, 0x7c, 0xb3, 0x82, 0xaf, 0x4d, 0xf2, 0x93, 0xdd, 0xa6, 0xfd, 0xf1, 0x1c, 0xd6, + 0xd6, 0x06, 0x8f, 0xcc, 0x26, 0xdf, 0x10, 0x5e, 0x3c, 0x3c, 0x73, 0xe4, 0x6e, 0xb9, 0x81, 0x09, + 0x4f, 0xc1, 0x68, 0x4c, 0x43, 0xcd, 0xbc, 0x99, 0xf5, 0x0f, 0xbf, 0xfe, 0x7c, 0x99, 0x59, 0x35, + 0x57, 0xc6, 0x37, 0x01, 0x2d, 0xae, 0x4b, 0xd2, 0x28, 0xa7, 0x36, 0x50, 0x8d, 0xfc, 0x46, 0xf8, + 0xd2, 0xb1, 0x93, 0x43, 0xee, 0x97, 0x7b, 0x38, 0xe9, 0x05, 0x18, 0x0f, 0xa6, 0xe6, 0xe7, 0x41, + 0x1a, 0x69, 0x90, 0x3b, 0xc4, 0x9e, 0x18, 0x64, 0x7f, 0x64, 0x2a, 0x0e, 0xe8, 0xe8, 0x78, 0xfe, + 0x45, 0xf8, 0xf2, 0xf1, 0xff, 0x90, 0x9c, 0xc2, 0xd7, 0x89, 0xd3, 0x68, 0x3c, 0x9c, 0x5e, 0x20, + 0x4f, 0xb6, 0x99, 0x26, 0x5b, 0x37, 0x9a, 0x67, 0x4f, 0x46, 0xf7, 0x87, 0x1f, 0x16, 0xf3, 0x0e, + 0x1a, 0xa8, 0xd6, 0xfc, 0x81, 0xf0, 0x0d, 0x57, 0xf4, 0x4a, 0x6d, 0x35, 0x17, 0x86, 0x33, 0xbb, + 0x95, 0x6c, 0xe3, 0x2d, 0xf4, 0x7a, 0x33, 0x27, 0xf9, 0x22, 0x70, 0xb8, 0x6f, 0x89, 0xc8, 0xa7, + 0x3e, 0xf0, 0x74, 0x57, 0xd3, 0xac, 0xe4, 0x84, 0x4c, 0x4e, 0x5e, 0xfc, 0xf7, 0xc6, 0x80, 0xaf, + 0x33, 0xfa, 0x7a, 0xa6, 0xb7, 0x96, 0xc0, 0xc5, 0xe6, 0x8c, 0xac, 0x1d, 0xfb, 0x67, 0x51, 0x6a, + 0xa7, 0xa5, 0x76, 0x51, 0x6a, 0xef, 0xd8, 0xdd, 0xf3, 0x69, 0xbf, 0xdb, 0xff, 0x02, 0x00, 0x00, + 0xff, 0xff, 0x54, 0xe1, 0x5c, 0x2a, 0xda, 0x06, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/clouddebugger/v2/data.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/clouddebugger/v2/data.pb.go index fbad60c..b280628 100644 --- a/vendor/google.golang.org/genproto/googleapis/devtools/clouddebugger/v2/data.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/devtools/clouddebugger/v2/data.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/devtools/clouddebugger/v2/data.proto -// DO NOT EDIT! package clouddebugger @@ -660,31 +659,34 @@ func (m *Breakpoint) GetLabels() map[string]string { return nil } -// Represents the application to debug. The application may include one or more +// Represents the debugged application. The application may include one or more // replicated processes executing the same code. Each of these processes is // attached with a debugger agent, carrying out the debugging commands. -// The agents attached to the same debuggee are identified by using exactly the -// same field values when registering. +// Agents attached to the same debuggee identify themselves as such by using +// exactly the same Debuggee message value when registering. type Debuggee struct { // Unique identifier for the debuggee generated by the controller service. Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` // Project the debuggee is associated with. - // Use the project number when registering a Google Cloud Platform project. + // Use project number or id when registering a Google Cloud Platform project. Project string `protobuf:"bytes,2,opt,name=project" json:"project,omitempty"` - // Debuggee uniquifier within the project. - // Any string that identifies the application within the project can be used. - // Including environment and version or build IDs is recommended. + // Uniquifier to further distiguish the application. + // It is possible that different applications might have identical values in + // the debuggee message, thus, incorrectly identified as a single application + // by the Controller service. This field adds salt to further distiguish the + // application. Agents should consider seeding this field with value that + // identifies the code, binary, configuration and environment. Uniquifier string `protobuf:"bytes,3,opt,name=uniquifier" json:"uniquifier,omitempty"` // Human readable description of the debuggee. // Including a human-readable project name, environment name and version // information is recommended. Description string `protobuf:"bytes,4,opt,name=description" json:"description,omitempty"` - // If set to `true`, indicates that the debuggee is considered as inactive by - // the Controller service. + // If set to `true`, indicates that Controller service does not detect any + // activity from the debuggee agents and the application is possibly stopped. IsInactive bool `protobuf:"varint,5,opt,name=is_inactive,json=isInactive" json:"is_inactive,omitempty"` - // Version ID of the agent release. The version ID is structured as - // following: `domain/type/vmajor.minor` (for example - // `google.com/gcp-java/v1.1`). + // Version ID of the agent. + // Schema: `domain/language-platform/vmajor.minor` (for example + // `google.com/java-gcp/v1.1`). AgentVersion string `protobuf:"bytes,6,opt,name=agent_version,json=agentVersion" json:"agent_version,omitempty"` // If set to `true`, indicates that the agent should disable itself and // detach from the debuggee. @@ -695,17 +697,11 @@ type Debuggee struct { Status *StatusMessage `protobuf:"bytes,8,opt,name=status" json:"status,omitempty"` // References to the locations and revisions of the source code used in the // deployed application. - // - // NOTE: This field is deprecated. Consumers should use - // `ext_source_contexts` if it is not empty. Debug agents should populate - // both this field and `ext_source_contexts`. SourceContexts []*google_devtools_source_v1.SourceContext `protobuf:"bytes,9,rep,name=source_contexts,json=sourceContexts" json:"source_contexts,omitempty"` // References to the locations and revisions of the source code used in the // deployed application. // - // Contexts describing a remote repo related to the source code - // have a `category` label of `remote_repo`. Source snapshot source - // contexts have a `category` of `snapshot`. + // NOTE: this field is experimental and can be ignored. ExtSourceContexts []*google_devtools_source_v1.ExtendedSourceContext `protobuf:"bytes,13,rep,name=ext_source_contexts,json=extSourceContexts" json:"ext_source_contexts,omitempty"` // A set of custom debuggee properties, populated by the agent, to be // displayed to the user. @@ -810,83 +806,85 @@ func init() { func init() { proto.RegisterFile("google/devtools/clouddebugger/v2/data.proto", fileDescriptor1) } var fileDescriptor1 = []byte{ - // 1239 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0x5f, 0x73, 0xda, 0xc6, - 0x16, 0x0f, 0x7f, 0x0c, 0xd2, 0xc1, 0x60, 0x65, 0x6f, 0x72, 0x47, 0xf1, 0xcd, 0x75, 0x18, 0x6e, - 0x1e, 0x3c, 0xb7, 0x19, 0x48, 0xc8, 0xb4, 0x93, 0x34, 0x4f, 0x18, 0xcb, 0x2e, 0x13, 0x02, 0x64, - 0xb1, 0xdd, 0x4e, 0x5f, 0xd4, 0x35, 0x5a, 0x54, 0x35, 0x42, 0x52, 0x77, 0x17, 0xea, 0xbc, 0x76, - 0xf2, 0x31, 0xfa, 0x11, 0xfa, 0x9d, 0xfa, 0xd6, 0xcf, 0xd1, 0xd9, 0xd5, 0x8a, 0x88, 0xa4, 0x2d, - 0x71, 0x93, 0xb7, 0xb3, 0xbf, 0xfd, 0x9d, 0xdf, 0x8a, 0xb3, 0xbf, 0x73, 0x24, 0xe0, 0x33, 0x3f, - 0x8e, 0xfd, 0x90, 0x76, 0x3c, 0xba, 0x12, 0x71, 0x1c, 0xf2, 0xce, 0x2c, 0x8c, 0x97, 0x9e, 0x47, - 0x2f, 0x97, 0xbe, 0x4f, 0x59, 0x67, 0xd5, 0xed, 0x78, 0x44, 0x90, 0x76, 0xc2, 0x62, 0x11, 0xa3, - 0x66, 0x4a, 0x6e, 0x67, 0xe4, 0xf6, 0x06, 0xb9, 0xbd, 0xea, 0xee, 0xdf, 0xd5, 0x72, 0x24, 0x09, - 0x3a, 0x24, 0x8a, 0x62, 0x41, 0x44, 0x10, 0x47, 0x3c, 0xcd, 0xdf, 0x6f, 0xbf, 0x7b, 0x18, 0x8f, - 0x97, 0x6c, 0x46, 0x3b, 0xab, 0x47, 0x3a, 0x72, 0x67, 0x71, 0x24, 0xe8, 0x95, 0xd0, 0xfc, 0x7b, - 0x9a, 0xaf, 0x56, 0x97, 0xcb, 0x79, 0x47, 0x04, 0x0b, 0xca, 0x05, 0x59, 0x24, 0x9a, 0x70, 0xf0, - 0x2e, 0xe1, 0x27, 0x46, 0x92, 0x84, 0x32, 0x7d, 0x60, 0xeb, 0x14, 0xea, 0x27, 0x31, 0x5b, 0x10, - 0xf1, 0x82, 0x72, 0x4e, 0x7c, 0x8a, 0xfe, 0x0d, 0x95, 0xb9, 0x02, 0xec, 0x42, 0xb3, 0x70, 0x68, - 0x62, 0xbd, 0x42, 0x07, 0x00, 0x09, 0x61, 0x64, 0x41, 0x05, 0x65, 0xdc, 0x2e, 0x36, 0x4b, 0x87, - 0x26, 0xce, 0x21, 0xad, 0x37, 0x25, 0xa8, 0x4f, 0x05, 0x11, 0x4b, 0x9e, 0x29, 0xdd, 0x01, 0x23, - 0xe0, 0x2e, 0x65, 0x2c, 0x66, 0x4a, 0xcb, 0xc0, 0xd5, 0x80, 0x3b, 0x72, 0x89, 0x2e, 0xc0, 0x64, - 0x74, 0x4e, 0x19, 0x77, 0x45, 0x6c, 0x17, 0x9b, 0x85, 0xc3, 0x46, 0xf7, 0x69, 0x7b, 0x5b, 0xe9, - 0xda, 0x1b, 0xf2, 0x6d, 0x2c, 0x05, 0x68, 0x34, 0xa3, 0xd8, 0x48, 0xb5, 0xce, 0x62, 0xf4, 0x12, - 0x6a, 0x1e, 0xe5, 0x33, 0x16, 0x24, 0xb2, 0xa8, 0x76, 0xa9, 0x59, 0x38, 0xac, 0x75, 0x3b, 0xdb, - 0x95, 0x37, 0x4a, 0x80, 0xf3, 0x1a, 0xad, 0x5f, 0x0b, 0x60, 0xae, 0x8f, 0x42, 0x7b, 0x50, 0x3b, - 0x1f, 0x4d, 0x27, 0x4e, 0x7f, 0x70, 0x32, 0x70, 0x8e, 0xad, 0x1b, 0xe8, 0x00, 0xf6, 0x8f, 0xb0, - 0xd3, 0x7b, 0x3e, 0x19, 0x0f, 0x46, 0x67, 0xee, 0x74, 0x7c, 0x8e, 0xfb, 0x8e, 0x3b, 0x1c, 0xf7, - 0x7b, 0x67, 0x83, 0xf1, 0xc8, 0x2a, 0x21, 0x1b, 0x6e, 0xe5, 0xf6, 0xfb, 0xe3, 0xd1, 0xf1, 0x40, - 0xed, 0x94, 0xd1, 0x1d, 0xb8, 0x9d, 0xdb, 0x71, 0xbe, 0x99, 0x60, 0x67, 0x3a, 0x95, 0x5b, 0x55, - 0x84, 0xa0, 0x91, 0xdb, 0xea, 0x9d, 0x3a, 0x96, 0x81, 0x6e, 0x42, 0xfd, 0xa2, 0x87, 0x07, 0xbd, - 0xa3, 0xa1, 0xe3, 0x8e, 0x7a, 0x2f, 0x1c, 0x6b, 0x47, 0xd2, 0xd6, 0xd0, 0x45, 0x6f, 0x78, 0xee, - 0x58, 0x95, 0xd6, 0x13, 0x68, 0x4c, 0x95, 0x51, 0x86, 0xf1, 0x4c, 0x39, 0x0b, 0x21, 0x28, 0x27, - 0x44, 0x7c, 0xaf, 0xaf, 0x53, 0xc5, 0x12, 0x0b, 0x83, 0x88, 0xaa, 0xd2, 0xef, 0x60, 0x15, 0xb7, - 0x7e, 0x29, 0x82, 0x71, 0x41, 0x58, 0x40, 0x2e, 0x43, 0x2a, 0x09, 0x11, 0x59, 0xd0, 0x2c, 0x49, - 0xc6, 0xe8, 0x16, 0xec, 0xac, 0x48, 0xb8, 0x4c, 0xb3, 0x4c, 0x9c, 0x2e, 0x24, 0x53, 0xbc, 0x4e, - 0xa8, 0x5d, 0x49, 0x99, 0x32, 0x46, 0xc7, 0x50, 0x5d, 0xd0, 0xc5, 0xa5, 0x34, 0x4a, 0xa9, 0x59, - 0x3a, 0xac, 0x75, 0xff, 0xbf, 0xfd, 0x0a, 0xb2, 0xa3, 0x71, 0x96, 0x8a, 0xfa, 0xb0, 0xb7, 0x22, - 0xcc, 0x15, 0x12, 0x75, 0x83, 0xc8, 0xa3, 0x57, 0x76, 0x59, 0x5d, 0xe8, 0x7f, 0x32, 0xb5, 0xcc, - 0xd4, 0xed, 0x41, 0x24, 0x1e, 0x77, 0x2f, 0xe4, 0xf3, 0xe0, 0xfa, 0x8a, 0xb0, 0x33, 0x99, 0x32, - 0x90, 0x19, 0xe8, 0x14, 0x2a, 0x5c, 0xd9, 0xc6, 0xde, 0xf9, 0x50, 0x33, 0x6c, 0xd8, 0x0c, 0xeb, - 0xf4, 0xd6, 0x9b, 0x22, 0xc0, 0x54, 0x90, 0xd9, 0xab, 0x13, 0x69, 0x79, 0xb4, 0x0f, 0xc6, 0x7c, - 0x19, 0xcd, 0x94, 0xcd, 0xd2, 0x22, 0xad, 0xd7, 0x68, 0x08, 0x46, 0xa8, 0xab, 0xaf, 0x6a, 0x55, - 0xeb, 0x3e, 0xfc, 0x80, 0x53, 0x37, 0x6e, 0x0d, 0xaf, 0x15, 0xd0, 0x57, 0x60, 0x12, 0xe6, 0x2f, - 0x17, 0x34, 0x12, 0xff, 0xa4, 0x9c, 0x6f, 0x93, 0xd1, 0x11, 0x54, 0xa4, 0x6a, 0xc8, 0xed, 0xf2, - 0xb5, 0x65, 0x74, 0x66, 0xeb, 0x37, 0x03, 0xe0, 0x88, 0x51, 0xf2, 0x2a, 0x89, 0x83, 0x48, 0xa0, - 0x06, 0x14, 0x03, 0x4f, 0x17, 0xa0, 0x18, 0x78, 0xe8, 0x39, 0x54, 0x48, 0x5a, 0x94, 0xba, 0xea, - 0xea, 0xc7, 0xdb, 0x8f, 0x78, 0xab, 0xd6, 0xee, 0xa9, 0x54, 0xac, 0x25, 0x3e, 0x71, 0x1d, 0xef, - 0x82, 0x39, 0x8b, 0x23, 0x2f, 0x58, 0x4f, 0x06, 0x13, 0xbf, 0x05, 0x50, 0x13, 0x6a, 0xf4, 0x2a, - 0x61, 0x94, 0x73, 0x39, 0x8d, 0x55, 0x81, 0x4c, 0x9c, 0x87, 0xd0, 0x03, 0x40, 0x61, 0xec, 0xbb, - 0x8b, 0xd4, 0x17, 0xae, 0x1e, 0x92, 0x0d, 0x25, 0x64, 0x85, 0xb1, 0xaf, 0x0d, 0x93, 0x8e, 0x12, - 0x84, 0xc1, 0x94, 0xec, 0x90, 0xae, 0x68, 0x68, 0xef, 0xa9, 0x5a, 0x7c, 0x7e, 0xad, 0x5a, 0x0c, - 0x63, 0x7f, 0x28, 0x93, 0xe5, 0x2f, 0x48, 0x23, 0x74, 0x1f, 0x1a, 0x01, 0x77, 0xe7, 0x41, 0x44, - 0x42, 0x57, 0xba, 0x92, 0x2a, 0x4f, 0x1b, 0x78, 0x37, 0xe0, 0x27, 0x12, 0x94, 0xc6, 0xa5, 0xe8, - 0x19, 0xd4, 0x66, 0x8c, 0x12, 0x41, 0x5d, 0xf9, 0x2e, 0xb0, 0x6b, 0xaa, 0x70, 0xfb, 0xef, 0xb5, - 0xcc, 0x59, 0xf6, 0xa2, 0xc0, 0x90, 0xd2, 0x25, 0x80, 0x9e, 0x02, 0xa4, 0xfa, 0x2a, 0x77, 0x77, - 0x6b, 0xae, 0xa9, 0xd8, 0x2a, 0xf5, 0xbf, 0x00, 0x4b, 0x4e, 0x99, 0x4b, 0x17, 0x24, 0x08, 0x6d, - 0x2b, 0x2d, 0xb0, 0x44, 0x1c, 0x09, 0xe4, 0x1a, 0x11, 0x3e, 0xaa, 0x11, 0xd1, 0x18, 0x76, 0xb9, - 0xec, 0x43, 0x77, 0x2e, 0x1b, 0x91, 0xdb, 0x55, 0xe5, 0xe5, 0x07, 0x1f, 0x24, 0xa7, 0xbb, 0x17, - 0xd7, 0xf8, 0x3a, 0xe6, 0xc8, 0x85, 0xdb, 0x54, 0xce, 0x32, 0x22, 0xa8, 0xe7, 0xe6, 0x4d, 0x60, - 0x5c, 0xbb, 0x4b, 0x6e, 0xad, 0x85, 0x9c, 0x9c, 0x73, 0x5e, 0x42, 0x63, 0xa5, 0x19, 0xe9, 0x34, - 0xb3, 0xcd, 0x6b, 0x2b, 0xd7, 0x33, 0x05, 0x35, 0xdb, 0xd0, 0x04, 0x2a, 0x21, 0xb9, 0xa4, 0x21, - 0xb7, 0x6f, 0x2a, 0xa9, 0x27, 0xd7, 0xf3, 0x96, 0x4a, 0x75, 0x22, 0xc1, 0x5e, 0x63, 0xad, 0xb3, - 0xff, 0x14, 0x6a, 0x39, 0x18, 0x59, 0x50, 0x7a, 0x45, 0x5f, 0xeb, 0xce, 0x96, 0xe1, 0x9f, 0x8f, - 0xff, 0x2f, 0x8b, 0x4f, 0x0a, 0xad, 0x03, 0xa8, 0xa4, 0x9d, 0x8b, 0x6a, 0x50, 0xed, 0xf7, 0x26, - 0x67, 0xe7, 0xd8, 0xb1, 0x6e, 0xa0, 0x2a, 0x94, 0x86, 0xe3, 0x53, 0xab, 0xd0, 0x7a, 0x00, 0x46, - 0xe6, 0x66, 0x64, 0x40, 0x79, 0x30, 0x3a, 0x19, 0x5b, 0x37, 0x24, 0xf7, 0xeb, 0x1e, 0x1e, 0x0d, - 0x46, 0xa7, 0x56, 0x01, 0x99, 0xb0, 0xe3, 0x60, 0x3c, 0xc6, 0x56, 0xb1, 0xf5, 0x7b, 0x19, 0x8c, - 0xe3, 0xf4, 0xb9, 0xe9, 0x7b, 0xf3, 0xc5, 0x86, 0x6a, 0xc2, 0xe2, 0x1f, 0xe8, 0x4c, 0xe8, 0xc7, - 0xc8, 0x96, 0xf2, 0xfb, 0x64, 0x19, 0x05, 0x3f, 0x2e, 0x83, 0x79, 0x40, 0x99, 0xee, 0xef, 0x1c, - 0x22, 0x1b, 0x3c, 0xff, 0x69, 0x50, 0x56, 0x84, 0x3c, 0x84, 0xee, 0x41, 0x2d, 0xe0, 0x6e, 0x10, - 0xc9, 0xe9, 0xb3, 0xca, 0x7a, 0x0b, 0x02, 0x3e, 0xd0, 0x08, 0xfa, 0x1f, 0xd4, 0x89, 0x4f, 0x23, - 0xe1, 0xae, 0x28, 0x93, 0x37, 0xab, 0xdf, 0x79, 0xbb, 0x0a, 0xbc, 0x48, 0x31, 0xad, 0xe2, 0x05, - 0x5c, 0xde, 0x93, 0x67, 0x57, 0x33, 0x95, 0x63, 0x8d, 0xe4, 0x1a, 0xc1, 0xf8, 0xb8, 0x46, 0x78, - 0x09, 0x7b, 0x9b, 0xdf, 0x84, 0x5c, 0xfb, 0xea, 0xf0, 0x3d, 0xc5, 0x94, 0xd7, 0x5e, 0x3d, 0xd2, - 0xe3, 0xb1, 0x9f, 0x26, 0xe0, 0x06, 0xcf, 0x2f, 0x39, 0xfa, 0x0e, 0xfe, 0x45, 0xaf, 0x84, 0xfb, - 0xae, 0x6c, 0x5d, 0xc9, 0x3e, 0xfc, 0x1b, 0x59, 0xe7, 0x4a, 0xd0, 0xc8, 0xa3, 0xde, 0xa6, 0xfc, - 0x4d, 0x7a, 0x25, 0xa6, 0x9b, 0x27, 0x8c, 0xd6, 0xc6, 0xad, 0x29, 0xd1, 0x2f, 0xb6, 0xff, 0xfa, - 0xcc, 0x0c, 0x9f, 0xd8, 0xb6, 0x47, 0x3f, 0x17, 0xe0, 0xfe, 0x2c, 0x5e, 0x6c, 0x7d, 0x80, 0x23, - 0xf3, 0x98, 0x08, 0x32, 0x91, 0xc3, 0x6f, 0x52, 0xf8, 0xf6, 0x85, 0xa6, 0xfb, 0x71, 0x48, 0x22, - 0xbf, 0x1d, 0x33, 0xbf, 0xe3, 0xd3, 0x48, 0x8d, 0xc6, 0x4e, 0xba, 0x45, 0x92, 0x80, 0xff, 0xf5, - 0xbf, 0x85, 0x67, 0x1b, 0xc0, 0x65, 0x45, 0x65, 0x3e, 0xfe, 0x23, 0x00, 0x00, 0xff, 0xff, 0x00, - 0xbf, 0x9b, 0x7e, 0x66, 0x0c, 0x00, 0x00, + // 1270 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0x5d, 0x92, 0xda, 0xc6, + 0x16, 0x36, 0x3f, 0x03, 0xd2, 0x61, 0x60, 0x70, 0x5f, 0xfb, 0x96, 0x3c, 0xd7, 0x77, 0x4c, 0x71, + 0xfd, 0x30, 0x75, 0xe3, 0x02, 0x1b, 0x57, 0x52, 0x76, 0xfc, 0xc4, 0x30, 0x9a, 0x09, 0x65, 0x0c, + 0xb8, 0x99, 0x21, 0xa9, 0x94, 0xab, 0x94, 0x1e, 0xd4, 0x28, 0x8a, 0x85, 0xa4, 0x74, 0x37, 0x64, + 0xfc, 0xee, 0x65, 0x64, 0x05, 0xa9, 0x2c, 0x20, 0x6b, 0xc8, 0x26, 0xf2, 0x96, 0x75, 0xa4, 0xba, + 0xd5, 0xc2, 0xc2, 0x4e, 0x82, 0x27, 0xf6, 0x5b, 0xf7, 0x77, 0xbe, 0xf3, 0xb5, 0x38, 0xfd, 0x9d, + 0x23, 0x01, 0x9f, 0x78, 0x51, 0xe4, 0x05, 0xb4, 0xed, 0xd2, 0x95, 0x88, 0xa2, 0x80, 0xb7, 0x67, + 0x41, 0xb4, 0x74, 0x5d, 0x7a, 0xb1, 0xf4, 0x3c, 0xca, 0xda, 0xab, 0x4e, 0xdb, 0x25, 0x82, 0xb4, + 0x62, 0x16, 0x89, 0x08, 0x35, 0x12, 0x72, 0x2b, 0x25, 0xb7, 0x36, 0xc8, 0xad, 0x55, 0x67, 0xff, + 0xb6, 0x96, 0x23, 0xb1, 0xdf, 0x26, 0x61, 0x18, 0x09, 0x22, 0xfc, 0x28, 0xe4, 0x49, 0xfe, 0x7e, + 0xeb, 0xed, 0xc3, 0x78, 0xb4, 0x64, 0x33, 0xda, 0x5e, 0x3d, 0xd0, 0x2b, 0x67, 0x16, 0x85, 0x82, + 0x5e, 0x0a, 0xcd, 0xbf, 0xa3, 0xf9, 0x6a, 0x77, 0xb1, 0x9c, 0xb7, 0x85, 0xbf, 0xa0, 0x5c, 0x90, + 0x45, 0xac, 0x09, 0x07, 0x6f, 0x13, 0x7e, 0x60, 0x24, 0x8e, 0x29, 0xd3, 0x07, 0x36, 0x4f, 0xa1, + 0x7a, 0x12, 0xb1, 0x05, 0x11, 0xcf, 0x28, 0xe7, 0xc4, 0xa3, 0xe8, 0xdf, 0x50, 0x9a, 0x2b, 0xc0, + 0xca, 0x35, 0x72, 0x87, 0x26, 0xd6, 0x3b, 0x74, 0x00, 0x10, 0x13, 0x46, 0x16, 0x54, 0x50, 0xc6, + 0xad, 0x7c, 0xa3, 0x70, 0x68, 0xe2, 0x0c, 0xd2, 0x7c, 0x5d, 0x80, 0xea, 0x44, 0x10, 0xb1, 0xe4, + 0xa9, 0xd2, 0x2d, 0x30, 0x7c, 0xee, 0x50, 0xc6, 0x22, 0xa6, 0xb4, 0x0c, 0x5c, 0xf6, 0xb9, 0x2d, + 0xb7, 0x68, 0x0a, 0x26, 0xa3, 0x73, 0xca, 0xb8, 0x23, 0x22, 0x2b, 0xdf, 0xc8, 0x1d, 0xd6, 0x3a, + 0x8f, 0x5b, 0xdb, 0x4a, 0xd7, 0xda, 0x90, 0x6f, 0x61, 0x29, 0x40, 0xc3, 0x19, 0xc5, 0x46, 0xa2, + 0x75, 0x16, 0xa1, 0xe7, 0x50, 0x71, 0x29, 0x9f, 0x31, 0x3f, 0x96, 0x45, 0xb5, 0x0a, 0x8d, 0xdc, + 0x61, 0xa5, 0xd3, 0xde, 0xae, 0xbc, 0x51, 0x02, 0x9c, 0xd5, 0x68, 0xfe, 0x9c, 0x03, 0x73, 0x7d, + 0x14, 0xda, 0x83, 0xca, 0xf9, 0x70, 0x32, 0xb6, 0x7b, 0xfd, 0x93, 0xbe, 0x7d, 0x5c, 0xbf, 0x86, + 0x0e, 0x60, 0xff, 0x08, 0xdb, 0xdd, 0xa7, 0xe3, 0x51, 0x7f, 0x78, 0xe6, 0x4c, 0x46, 0xe7, 0xb8, + 0x67, 0x3b, 0x83, 0x51, 0xaf, 0x7b, 0xd6, 0x1f, 0x0d, 0xeb, 0x05, 0x64, 0xc1, 0x8d, 0x4c, 0xbc, + 0x37, 0x1a, 0x1e, 0xf7, 0x55, 0xa4, 0x88, 0x6e, 0xc1, 0xcd, 0x4c, 0xc4, 0xfe, 0x6a, 0x8c, 0xed, + 0xc9, 0x44, 0x86, 0xca, 0x08, 0x41, 0x2d, 0x13, 0xea, 0x9e, 0xda, 0x75, 0x03, 0x5d, 0x87, 0xea, + 0xb4, 0x8b, 0xfb, 0xdd, 0xa3, 0x81, 0xed, 0x0c, 0xbb, 0xcf, 0xec, 0xfa, 0x8e, 0xa4, 0xad, 0xa1, + 0x69, 0x77, 0x70, 0x6e, 0xd7, 0x4b, 0xcd, 0x47, 0x50, 0x9b, 0x28, 0xa3, 0x0c, 0xa2, 0x99, 0x72, + 0x16, 0x42, 0x50, 0x8c, 0x89, 0xf8, 0x56, 0x5f, 0xa7, 0x5a, 0x4b, 0x2c, 0xf0, 0x43, 0xaa, 0x4a, + 0xbf, 0x83, 0xd5, 0xba, 0xf9, 0x63, 0x1e, 0x8c, 0x29, 0x61, 0x3e, 0xb9, 0x08, 0xa8, 0x24, 0x84, + 0x64, 0x41, 0xd3, 0x24, 0xb9, 0x46, 0x37, 0x60, 0x67, 0x45, 0x82, 0x65, 0x92, 0x65, 0xe2, 0x64, + 0x23, 0x99, 0xe2, 0x55, 0x4c, 0xad, 0x52, 0xc2, 0x94, 0x6b, 0x74, 0x0c, 0xe5, 0x05, 0x5d, 0x5c, + 0x48, 0xa3, 0x14, 0x1a, 0x85, 0xc3, 0x4a, 0xe7, 0xff, 0xdb, 0xaf, 0x20, 0x3d, 0x1a, 0xa7, 0xa9, + 0xa8, 0x07, 0x7b, 0x2b, 0xc2, 0x1c, 0x21, 0x51, 0xc7, 0x0f, 0x5d, 0x7a, 0x69, 0x15, 0xd5, 0x85, + 0xfe, 0x27, 0x55, 0x4b, 0x4d, 0xdd, 0xea, 0x87, 0xe2, 0x61, 0x67, 0x2a, 0x9f, 0x07, 0x57, 0x57, + 0x84, 0x9d, 0xc9, 0x94, 0xbe, 0xcc, 0x40, 0xa7, 0x50, 0xe2, 0xca, 0x36, 0xd6, 0xce, 0xfb, 0x9a, + 0x61, 0xc3, 0x66, 0x58, 0xa7, 0x37, 0x5f, 0xe7, 0x01, 0x26, 0x82, 0xcc, 0x5e, 0x9e, 0x48, 0xcb, + 0xa3, 0x7d, 0x30, 0xe6, 0xcb, 0x70, 0xa6, 0x6c, 0x96, 0x14, 0x69, 0xbd, 0x47, 0x03, 0x30, 0x02, + 0x5d, 0x7d, 0x55, 0xab, 0x4a, 0xe7, 0xfe, 0x7b, 0x9c, 0xba, 0x71, 0x6b, 0x78, 0xad, 0x80, 0xbe, + 0x00, 0x93, 0x30, 0x6f, 0xb9, 0xa0, 0xa1, 0xf8, 0x27, 0xe5, 0x7c, 0x93, 0x8c, 0x8e, 0xa0, 0x24, + 0x55, 0x03, 0x6e, 0x15, 0xaf, 0x2c, 0xa3, 0x33, 0x9b, 0xbf, 0x19, 0x00, 0x47, 0x8c, 0x92, 0x97, + 0x71, 0xe4, 0x87, 0x02, 0xd5, 0x20, 0xef, 0xbb, 0xba, 0x00, 0x79, 0xdf, 0x45, 0x4f, 0xa1, 0x44, + 0x92, 0xa2, 0x54, 0x55, 0x57, 0x3f, 0xdc, 0x7e, 0xc4, 0x1b, 0xb5, 0x56, 0x57, 0xa5, 0x62, 0x2d, + 0xf1, 0x91, 0xeb, 0x78, 0x1b, 0xcc, 0x59, 0x14, 0xba, 0xfe, 0x7a, 0x32, 0x98, 0xf8, 0x0d, 0x80, + 0x1a, 0x50, 0xa1, 0x97, 0x31, 0xa3, 0x9c, 0xcb, 0x69, 0xac, 0x0a, 0x64, 0xe2, 0x2c, 0x84, 0xee, + 0x01, 0x0a, 0x22, 0xcf, 0x59, 0x24, 0xbe, 0x70, 0xf4, 0x90, 0xac, 0x29, 0xa1, 0x7a, 0x10, 0x79, + 0xda, 0x30, 0xc9, 0x28, 0x41, 0x18, 0x4c, 0xc9, 0x0e, 0xe8, 0x8a, 0x06, 0xd6, 0x9e, 0xaa, 0xc5, + 0xa7, 0x57, 0xaa, 0xc5, 0x20, 0xf2, 0x06, 0x32, 0x59, 0xfe, 0x82, 0x64, 0x85, 0xee, 0x42, 0xcd, + 0xe7, 0xce, 0xdc, 0x0f, 0x49, 0xe0, 0x48, 0x57, 0x52, 0xe5, 0x69, 0x03, 0xef, 0xfa, 0xfc, 0x44, + 0x82, 0xd2, 0xb8, 0x14, 0x3d, 0x81, 0xca, 0x8c, 0x51, 0x22, 0xa8, 0x23, 0xdf, 0x05, 0x56, 0x45, + 0x15, 0x6e, 0xff, 0x9d, 0x96, 0x39, 0x4b, 0x5f, 0x14, 0x18, 0x12, 0xba, 0x04, 0xd0, 0x63, 0x80, + 0x44, 0x5f, 0xe5, 0xee, 0x6e, 0xcd, 0x35, 0x15, 0x5b, 0xa5, 0xfe, 0x17, 0x60, 0xc9, 0x29, 0x73, + 0xe8, 0x82, 0xf8, 0x81, 0x55, 0x4f, 0x0a, 0x2c, 0x11, 0x5b, 0x02, 0x99, 0x46, 0x84, 0x0f, 0x6a, + 0x44, 0x34, 0x82, 0x5d, 0x2e, 0xfb, 0xd0, 0x99, 0xcb, 0x46, 0xe4, 0x56, 0x59, 0x79, 0xf9, 0xde, + 0x7b, 0xc9, 0xe9, 0xee, 0xc5, 0x15, 0xbe, 0x5e, 0x73, 0xe4, 0xc0, 0x4d, 0x2a, 0x67, 0x19, 0x11, + 0xd4, 0x75, 0xb2, 0x26, 0x30, 0xae, 0xdc, 0x25, 0x37, 0xd6, 0x42, 0x76, 0xc6, 0x39, 0xcf, 0xa1, + 0xb6, 0xd2, 0x8c, 0x64, 0x9a, 0x59, 0xe6, 0x95, 0x95, 0xab, 0xa9, 0x82, 0x9a, 0x6d, 0x68, 0x0c, + 0xa5, 0x80, 0x5c, 0xd0, 0x80, 0x5b, 0xd7, 0x95, 0xd4, 0xa3, 0xab, 0x79, 0x4b, 0xa5, 0xda, 0xa1, + 0x60, 0xaf, 0xb0, 0xd6, 0xd9, 0x7f, 0x0c, 0x95, 0x0c, 0x8c, 0xea, 0x50, 0x78, 0x49, 0x5f, 0xe9, + 0xce, 0x96, 0xcb, 0x3f, 0x1f, 0xff, 0x9f, 0xe7, 0x1f, 0xe5, 0x9a, 0x07, 0x50, 0x4a, 0x3a, 0x17, + 0x55, 0xa0, 0xdc, 0xeb, 0x8e, 0xcf, 0xce, 0xb1, 0x5d, 0xbf, 0x86, 0xca, 0x50, 0x18, 0x8c, 0x4e, + 0xeb, 0xb9, 0xe6, 0x3d, 0x30, 0x52, 0x37, 0x23, 0x03, 0x8a, 0xfd, 0xe1, 0xc9, 0xa8, 0x7e, 0x4d, + 0x72, 0xbf, 0xec, 0xe2, 0x61, 0x7f, 0x78, 0x5a, 0xcf, 0x21, 0x13, 0x76, 0x6c, 0x8c, 0x47, 0xb8, + 0x9e, 0x6f, 0xfe, 0x5e, 0x04, 0xe3, 0x38, 0x79, 0x6e, 0xfa, 0xce, 0x7c, 0xb1, 0xa0, 0x1c, 0xb3, + 0xe8, 0x3b, 0x3a, 0x13, 0xfa, 0x31, 0xd2, 0xad, 0xfc, 0x3e, 0x59, 0x86, 0xfe, 0xf7, 0x4b, 0x7f, + 0xee, 0x53, 0xa6, 0xfb, 0x3b, 0x83, 0xc8, 0x06, 0xcf, 0x7e, 0x1a, 0x14, 0x15, 0x21, 0x0b, 0xa1, + 0x3b, 0x50, 0xf1, 0xb9, 0xe3, 0x87, 0x72, 0xfa, 0xac, 0xd2, 0xde, 0x02, 0x9f, 0xf7, 0x35, 0x82, + 0xfe, 0x07, 0x55, 0xe2, 0xd1, 0x50, 0x38, 0x2b, 0xca, 0xe4, 0xcd, 0xea, 0x77, 0xde, 0xae, 0x02, + 0xa7, 0x09, 0xa6, 0x55, 0x5c, 0x9f, 0xcb, 0x7b, 0x72, 0xad, 0x72, 0xaa, 0x72, 0xac, 0x91, 0x4c, + 0x23, 0x18, 0x1f, 0xd6, 0x08, 0xcf, 0x61, 0x6f, 0xf3, 0x9b, 0x90, 0x6b, 0x5f, 0x1d, 0xbe, 0xa3, + 0x98, 0xf0, 0x5a, 0xab, 0x07, 0x7a, 0x3c, 0xf6, 0x92, 0x04, 0x5c, 0xe3, 0xd9, 0x2d, 0x47, 0xdf, + 0xc0, 0xbf, 0xe8, 0xa5, 0x70, 0xde, 0x96, 0xad, 0x2a, 0xd9, 0xfb, 0x7f, 0x23, 0x6b, 0x5f, 0x0a, + 0x1a, 0xba, 0xd4, 0xdd, 0x94, 0xbf, 0x4e, 0x2f, 0xc5, 0x64, 0xf3, 0x84, 0xe1, 0xda, 0xb8, 0x15, + 0x25, 0xfa, 0xd9, 0xf6, 0x5f, 0x9f, 0x9a, 0xe1, 0x23, 0xdb, 0xf6, 0xe8, 0x97, 0x1c, 0xdc, 0x9d, + 0x45, 0x8b, 0xad, 0x0f, 0x70, 0x64, 0x1e, 0x13, 0x41, 0xc6, 0x72, 0xf8, 0x8d, 0x73, 0x5f, 0x3f, + 0xd3, 0x74, 0x2f, 0x0a, 0x48, 0xe8, 0xb5, 0x22, 0xe6, 0xb5, 0x3d, 0x1a, 0xaa, 0xd1, 0xd8, 0x4e, + 0x42, 0x24, 0xf6, 0xf9, 0x5f, 0xff, 0x5b, 0x78, 0xb2, 0x01, 0xfc, 0x94, 0xb7, 0x4e, 0x13, 0xbd, + 0x9e, 0x84, 0xd3, 0xdf, 0xca, 0x5a, 0xd3, 0xce, 0xaf, 0x69, 0xe8, 0x85, 0x0a, 0xbd, 0x48, 0x43, + 0x2f, 0xa6, 0x9d, 0x8b, 0x92, 0x3a, 0xef, 0xe1, 0x1f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x75, 0x2e, + 0xfe, 0xb1, 0x9c, 0x0c, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/clouddebugger/v2/debugger.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/clouddebugger/v2/debugger.pb.go index fdfbfc4..40bf0ef 100644 --- a/vendor/google.golang.org/genproto/googleapis/devtools/clouddebugger/v2/debugger.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/devtools/clouddebugger/v2/debugger.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/devtools/clouddebugger/v2/debugger.proto -// DO NOT EDIT! package clouddebugger @@ -25,10 +24,10 @@ type SetBreakpointRequest struct { // ID of the debuggee where the breakpoint is to be set. DebuggeeId string `protobuf:"bytes,1,opt,name=debuggee_id,json=debuggeeId" json:"debuggee_id,omitempty"` // Breakpoint specification to set. - // The field 'location' of the breakpoint must be set. + // The field `location` of the breakpoint must be set. Breakpoint *Breakpoint `protobuf:"bytes,2,opt,name=breakpoint" json:"breakpoint,omitempty"` // The client version making the call. - // Following: `domain/type/version` (e.g., `google.com/intellij/v1`). + // Schema: `domain/type/version` (e.g., `google.com/intellij/v1`). ClientVersion string `protobuf:"bytes,4,opt,name=client_version,json=clientVersion" json:"client_version,omitempty"` } @@ -84,7 +83,7 @@ type GetBreakpointRequest struct { // ID of the breakpoint to get. BreakpointId string `protobuf:"bytes,2,opt,name=breakpoint_id,json=breakpointId" json:"breakpoint_id,omitempty"` // The client version making the call. - // Following: `domain/type/version` (e.g., `google.com/intellij/v1`). + // Schema: `domain/type/version` (e.g., `google.com/intellij/v1`). ClientVersion string `protobuf:"bytes,4,opt,name=client_version,json=clientVersion" json:"client_version,omitempty"` } @@ -140,7 +139,7 @@ type DeleteBreakpointRequest struct { // ID of the breakpoint to delete. BreakpointId string `protobuf:"bytes,2,opt,name=breakpoint_id,json=breakpointId" json:"breakpoint_id,omitempty"` // The client version making the call. - // Following: `domain/type/version` (e.g., `google.com/intellij/v1`). + // Schema: `domain/type/version` (e.g., `google.com/intellij/v1`). ClientVersion string `protobuf:"bytes,3,opt,name=client_version,json=clientVersion" json:"client_version,omitempty"` } @@ -192,7 +191,7 @@ type ListBreakpointsRequest struct { // should be called again with the same `wait_token`. WaitToken string `protobuf:"bytes,6,opt,name=wait_token,json=waitToken" json:"wait_token,omitempty"` // The client version making the call. - // Following: `domain/type/version` (e.g., `google.com/intellij/v1`). + // Schema: `domain/type/version` (e.g., `google.com/intellij/v1`). ClientVersion string `protobuf:"bytes,8,opt,name=client_version,json=clientVersion" json:"client_version,omitempty"` } @@ -280,7 +279,7 @@ type ListBreakpointsResponse struct { // List of breakpoints matching the request. // The fields `id` and `location` are guaranteed to be set on each breakpoint. // The fields: `stack_frames`, `evaluated_expressions` and `variable_table` - // are cleared on each breakpoint regardless of it's status. + // are cleared on each breakpoint regardless of its status. Breakpoints []*Breakpoint `protobuf:"bytes,1,rep,name=breakpoints" json:"breakpoints,omitempty"` // A wait token that can be used in the next call to `list` (REST) or // `ListBreakpoints` (RPC) to block until the list of breakpoints has changes. @@ -314,7 +313,7 @@ type ListDebuggeesRequest struct { // result includes only debuggees that are active. IncludeInactive bool `protobuf:"varint,3,opt,name=include_inactive,json=includeInactive" json:"include_inactive,omitempty"` // The client version making the call. - // Following: `domain/type/version` (e.g., `google.com/intellij/v1`). + // Schema: `domain/type/version` (e.g., `google.com/intellij/v1`). ClientVersion string `protobuf:"bytes,4,opt,name=client_version,json=clientVersion" json:"client_version,omitempty"` } @@ -347,10 +346,9 @@ func (m *ListDebuggeesRequest) GetClientVersion() string { // Response for listing debuggees. type ListDebuggeesResponse struct { // List of debuggees accessible to the calling user. - // Note that the `description` field is the only human readable field - // that should be displayed to the user. - // The fields `debuggee.id` and `description` fields are guaranteed to be - // set on each debuggee. + // The fields `debuggee.id` and `description` are guaranteed to be set. + // The `description` field is a human readable field provided by agents and + // can be displayed to users. Debuggees []*Debuggee `protobuf:"bytes,1,rep,name=debuggees" json:"debuggees,omitempty"` } @@ -398,7 +396,7 @@ type Debugger2Client interface { DeleteBreakpoint(ctx context.Context, in *DeleteBreakpointRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) // Lists all breakpoints for the debuggee. ListBreakpoints(ctx context.Context, in *ListBreakpointsRequest, opts ...grpc.CallOption) (*ListBreakpointsResponse, error) - // Lists all the debuggees that the user can set breakpoints to. + // Lists all the debuggees that the user has access to. ListDebuggees(ctx context.Context, in *ListDebuggeesRequest, opts ...grpc.CallOption) (*ListDebuggeesResponse, error) } @@ -466,7 +464,7 @@ type Debugger2Server interface { DeleteBreakpoint(context.Context, *DeleteBreakpointRequest) (*google_protobuf3.Empty, error) // Lists all breakpoints for the debuggee. ListBreakpoints(context.Context, *ListBreakpointsRequest) (*ListBreakpointsResponse, error) - // Lists all the debuggees that the user can set breakpoints to. + // Lists all the debuggees that the user has access to. ListDebuggees(context.Context, *ListDebuggeesRequest) (*ListDebuggeesResponse, error) } @@ -596,53 +594,55 @@ var _Debugger2_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("google/devtools/clouddebugger/v2/debugger.proto", fileDescriptor2) } var fileDescriptor2 = []byte{ - // 766 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x56, 0xcb, 0x6e, 0xd3, 0x4c, - 0x18, 0xd5, 0xb4, 0x7f, 0x2f, 0xf9, 0xd2, 0xb4, 0xfd, 0x47, 0xbd, 0x58, 0xe1, 0x16, 0x99, 0x8b, - 0x4a, 0x41, 0x36, 0x72, 0x11, 0xb4, 0xb0, 0xa1, 0x51, 0x51, 0x1a, 0xa9, 0x54, 0x55, 0x80, 0x22, - 0xb1, 0x89, 0x9c, 0x64, 0x6a, 0x99, 0xba, 0x1e, 0xe3, 0x19, 0x07, 0x50, 0xd5, 0x4d, 0x91, 0xba, - 0x47, 0xbc, 0x00, 0x0f, 0x80, 0xc4, 0x13, 0x20, 0xb1, 0x43, 0x62, 0xcb, 0x2b, 0xf0, 0x20, 0xc8, - 0xe3, 0x71, 0xe3, 0x04, 0x43, 0xe2, 0x54, 0xea, 0xce, 0x3e, 0x9e, 0xf3, 0xcd, 0x39, 0x67, 0xbe, - 0x99, 0x31, 0xe8, 0x16, 0xa5, 0x96, 0x43, 0xf4, 0x16, 0x69, 0x73, 0x4a, 0x1d, 0xa6, 0x37, 0x1d, - 0x1a, 0xb4, 0x5a, 0xa4, 0x11, 0x58, 0x16, 0xf1, 0xf5, 0xb6, 0xa1, 0xc7, 0xcf, 0x9a, 0xe7, 0x53, - 0x4e, 0x71, 0x29, 0x22, 0x68, 0x31, 0x41, 0xeb, 0x22, 0x68, 0x6d, 0xa3, 0x78, 0x51, 0x96, 0x34, - 0x3d, 0x5b, 0x37, 0x5d, 0x97, 0x72, 0x93, 0xdb, 0xd4, 0x65, 0x11, 0xbf, 0x78, 0xab, 0xff, 0x84, - 0x26, 0x37, 0xe5, 0xe0, 0x0b, 0x72, 0xb0, 0x78, 0x6b, 0x04, 0x7b, 0x3a, 0x39, 0xf0, 0xf8, 0xbb, - 0xe8, 0xa3, 0xfa, 0x19, 0xc1, 0xdc, 0x53, 0xc2, 0xcb, 0x3e, 0x31, 0xf7, 0x3d, 0x6a, 0xbb, 0xbc, - 0x46, 0x5e, 0x07, 0x84, 0x71, 0x7c, 0x05, 0xf2, 0xb2, 0x1e, 0xa9, 0xdb, 0x2d, 0x05, 0x95, 0xd0, - 0x52, 0xae, 0x06, 0x31, 0x54, 0x6d, 0xe1, 0x2d, 0x80, 0xc6, 0x29, 0x4b, 0x19, 0x29, 0xa1, 0xa5, - 0xbc, 0x71, 0x5b, 0xeb, 0x67, 0x4c, 0x4b, 0xcc, 0x94, 0xe0, 0xe3, 0xeb, 0x30, 0xdd, 0x74, 0x6c, - 0xe2, 0xf2, 0x7a, 0x9b, 0xf8, 0xcc, 0xa6, 0xae, 0xf2, 0x9f, 0x98, 0xb1, 0x10, 0xa1, 0xbb, 0x11, - 0xa8, 0x12, 0x98, 0xef, 0x51, 0xcb, 0x3c, 0xea, 0x32, 0xd2, 0xa3, 0x06, 0x9d, 0x4d, 0x8d, 0xfa, - 0x1e, 0xc1, 0x5c, 0x65, 0xa8, 0x54, 0xae, 0x42, 0xa1, 0x53, 0x27, 0x1c, 0x32, 0x22, 0x86, 0x4c, - 0x75, 0xc0, 0x6a, 0x2b, 0x83, 0xd9, 0xca, 0x39, 0x98, 0x3d, 0x41, 0xb0, 0xb8, 0x41, 0x1c, 0xc2, - 0xc9, 0xf9, 0xf9, 0x1d, 0x4d, 0xf3, 0xfb, 0x7d, 0x14, 0x16, 0xb6, 0x6c, 0x96, 0x70, 0xcc, 0x06, - 0xd6, 0xb1, 0x0c, 0xff, 0xdb, 0x6e, 0xd3, 0x09, 0x5a, 0xa4, 0x6e, 0x3a, 0x4e, 0x3d, 0x60, 0xc4, - 0x67, 0x42, 0xcb, 0x64, 0x6d, 0x46, 0x7e, 0x58, 0x77, 0x9c, 0xe7, 0x21, 0x8c, 0x6f, 0xc2, 0x6c, - 0x3c, 0xd6, 0x76, 0xcd, 0x26, 0xb7, 0xdb, 0x44, 0x08, 0xea, 0x0c, 0xad, 0x4a, 0x18, 0xef, 0xc1, - 0x78, 0xf8, 0x24, 0x57, 0x28, 0x6f, 0x6c, 0xf7, 0x4f, 0x39, 0xdd, 0x41, 0x22, 0xfc, 0x75, 0x51, - 0x70, 0xd7, 0x74, 0x02, 0x52, 0x93, 0xd5, 0xc3, 0x18, 0x19, 0xf7, 0x6d, 0xaf, 0xee, 0x13, 0x16, - 0x38, 0x9c, 0x29, 0x63, 0x42, 0xcf, 0x94, 0x00, 0x6b, 0x11, 0x86, 0x2f, 0x01, 0xbc, 0x31, 0x6d, - 0x5e, 0xe7, 0x74, 0x9f, 0xb8, 0xca, 0xb8, 0xc8, 0x20, 0x17, 0x22, 0xcf, 0x42, 0x20, 0x25, 0xe5, - 0xc9, 0x94, 0x94, 0x8b, 0x0d, 0x98, 0x4f, 0xd5, 0x82, 0xab, 0x30, 0xd6, 0x0e, 0x1f, 0x44, 0xba, - 0xd3, 0xc6, 0x4a, 0x96, 0x86, 0xd2, 0xa2, 0x42, 0xb5, 0xa8, 0x82, 0xfa, 0x01, 0xc1, 0xe2, 0x1f, - 0x39, 0xc8, 0xe6, 0xdd, 0x86, 0x7c, 0xa7, 0x39, 0x98, 0x82, 0x4a, 0xa3, 0x99, 0xbb, 0x37, 0x59, - 0x00, 0xdf, 0x80, 0x19, 0x97, 0xbc, 0xe5, 0xf5, 0x44, 0x34, 0x51, 0x0f, 0x16, 0x42, 0xf8, 0x45, - 0x1c, 0x8f, 0x7a, 0x8c, 0x60, 0x2e, 0xd4, 0xb4, 0x21, 0x9b, 0xe6, 0xb4, 0xb7, 0x14, 0x98, 0xf0, - 0x7c, 0xfa, 0x8a, 0x34, 0xb9, 0x24, 0xc6, 0xaf, 0x59, 0x1a, 0x65, 0xc0, 0x2d, 0x6d, 0xc2, 0x7c, - 0x8f, 0x06, 0x99, 0xca, 0x26, 0xe4, 0xe2, 0x6e, 0x8e, 0x33, 0x59, 0xee, 0x9f, 0x49, 0x5c, 0xa7, - 0xd6, 0x21, 0x1b, 0x5f, 0x27, 0x20, 0x27, 0x71, 0xdf, 0xc0, 0x3f, 0x10, 0x14, 0xba, 0x4e, 0x4c, - 0x7c, 0xaf, 0x7f, 0xd9, 0xb4, 0x0b, 0xa1, 0x78, 0x3f, 0x33, 0x2f, 0xb2, 0xa6, 0x6e, 0x1e, 0xff, - 0xfc, 0xf5, 0x71, 0xa4, 0xac, 0xde, 0x4d, 0x5e, 0x84, 0xfa, 0xa9, 0x60, 0xfd, 0x30, 0xb1, 0xb3, - 0x8f, 0xf4, 0xc4, 0xd2, 0xea, 0x8c, 0xf0, 0x07, 0xc9, 0x4b, 0x22, 0x34, 0x53, 0xc9, 0x6a, 0xa6, - 0x32, 0xa4, 0x99, 0xca, 0xbf, 0xcc, 0xe0, 0x47, 0x99, 0xcd, 0x1c, 0x76, 0x9d, 0x93, 0x47, 0xf8, - 0x0b, 0x82, 0xd9, 0xde, 0x63, 0x17, 0xaf, 0x0d, 0xb2, 0xe6, 0xa9, 0x47, 0x75, 0x71, 0x21, 0xa6, - 0xc6, 0xf7, 0xbc, 0xf6, 0x38, 0xbc, 0xe7, 0x63, 0xc5, 0xcb, 0x67, 0x57, 0xfc, 0x0d, 0xc1, 0x4c, - 0xcf, 0xae, 0xc6, 0xab, 0xc3, 0x1e, 0x88, 0xc5, 0xb5, 0x21, 0x98, 0x72, 0x11, 0x56, 0x85, 0x25, - 0x03, 0xdf, 0xc9, 0x6a, 0x09, 0x7f, 0x42, 0x50, 0xe8, 0xda, 0x80, 0x83, 0x74, 0x50, 0xda, 0xa9, - 0x31, 0x48, 0x07, 0xa5, 0xee, 0x74, 0xf5, 0xb2, 0x10, 0xaf, 0xe0, 0x85, 0x74, 0xf1, 0xe5, 0x13, - 0x04, 0xd7, 0x9a, 0xf4, 0xa0, 0x6f, 0xf9, 0x72, 0x21, 0xde, 0xe5, 0x3b, 0xe1, 0x82, 0xef, 0xa0, - 0x97, 0x4f, 0x24, 0xc5, 0xa2, 0x8e, 0xe9, 0x5a, 0x1a, 0xf5, 0x2d, 0xdd, 0x22, 0xae, 0x68, 0x07, - 0xf9, 0x87, 0x6a, 0x7a, 0x36, 0xfb, 0xfb, 0x4f, 0xe3, 0xc3, 0x2e, 0xa0, 0x31, 0x2e, 0x98, 0x2b, - 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x7f, 0x55, 0x66, 0x54, 0xde, 0x0a, 0x00, 0x00, + // 797 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x56, 0xdd, 0x6a, 0xdb, 0x48, + 0x14, 0x66, 0x9c, 0xcd, 0x8f, 0x8f, 0xe3, 0x24, 0x3b, 0xe4, 0x47, 0x78, 0xff, 0x8c, 0xf6, 0x87, + 0x6c, 0x76, 0x91, 0x16, 0x65, 0xd9, 0x4d, 0x76, 0x6f, 0x1a, 0x37, 0xc5, 0x31, 0xa4, 0x21, 0xb8, + 0xad, 0x0b, 0x25, 0x60, 0x64, 0x7b, 0x22, 0xd4, 0x28, 0x1a, 0x55, 0x33, 0x72, 0x5b, 0x42, 0x6e, + 0x52, 0xe8, 0x7d, 0xe9, 0x0b, 0xf4, 0xba, 0x14, 0xfa, 0x02, 0x2d, 0xf4, 0xae, 0x90, 0xdb, 0xbe, + 0x42, 0x1f, 0xa4, 0x48, 0x9a, 0x89, 0x65, 0x57, 0xad, 0x2d, 0x07, 0x72, 0x37, 0xfa, 0x66, 0xce, + 0x99, 0xef, 0xfb, 0xe6, 0xcc, 0x19, 0x81, 0x6e, 0x51, 0x6a, 0x39, 0x44, 0xef, 0x90, 0x2e, 0xa7, + 0xd4, 0x61, 0x7a, 0xdb, 0xa1, 0x41, 0xa7, 0x43, 0x5a, 0x81, 0x65, 0x11, 0x5f, 0xef, 0x1a, 0xba, + 0x1c, 0x6b, 0x9e, 0x4f, 0x39, 0xc5, 0xe5, 0x38, 0x40, 0x93, 0x01, 0x5a, 0x5f, 0x80, 0xd6, 0x35, + 0x4a, 0xdf, 0x8b, 0x94, 0xa6, 0x67, 0xeb, 0xa6, 0xeb, 0x52, 0x6e, 0x72, 0x9b, 0xba, 0x2c, 0x8e, + 0x2f, 0xfd, 0x31, 0x7c, 0x43, 0x93, 0x9b, 0x62, 0xf1, 0x77, 0x62, 0x71, 0xf4, 0xd5, 0x0a, 0x0e, + 0x75, 0x72, 0xec, 0xf1, 0xc7, 0xf1, 0xa4, 0xfa, 0x0a, 0xc1, 0xe2, 0x2d, 0xc2, 0x2b, 0x3e, 0x31, + 0x8f, 0x3c, 0x6a, 0xbb, 0xbc, 0x4e, 0x1e, 0x04, 0x84, 0x71, 0xfc, 0x13, 0x14, 0x44, 0x3e, 0xd2, + 0xb4, 0x3b, 0x0a, 0x2a, 0xa3, 0xd5, 0x7c, 0x1d, 0x24, 0x54, 0xeb, 0xe0, 0x5d, 0x80, 0xd6, 0x45, + 0x94, 0x92, 0x2b, 0xa3, 0xd5, 0x82, 0xf1, 0xa7, 0x36, 0x4c, 0x98, 0x96, 0xd8, 0x29, 0x11, 0x8f, + 0x7f, 0x85, 0xb9, 0xb6, 0x63, 0x13, 0x97, 0x37, 0xbb, 0xc4, 0x67, 0x36, 0x75, 0x95, 0x6f, 0xa2, + 0x1d, 0x8b, 0x31, 0xda, 0x88, 0x41, 0x95, 0xc0, 0xd2, 0x00, 0x5b, 0xe6, 0x51, 0x97, 0x91, 0x01, + 0x36, 0xe8, 0x72, 0x6c, 0xd4, 0x27, 0x08, 0x16, 0xab, 0x63, 0xb9, 0xf2, 0x33, 0x14, 0x7b, 0x79, + 0xc2, 0x25, 0xb9, 0x68, 0xc9, 0x6c, 0x0f, 0xac, 0x75, 0x32, 0x88, 0xad, 0x5e, 0x81, 0xd8, 0xa7, + 0x08, 0x56, 0xb6, 0x89, 0x43, 0x38, 0xb9, 0x3a, 0xbd, 0x13, 0x69, 0x7a, 0xdf, 0x4f, 0xc0, 0xf2, + 0xae, 0xcd, 0x12, 0x8a, 0xd9, 0xc8, 0x3c, 0xd6, 0xe0, 0x5b, 0xdb, 0x6d, 0x3b, 0x41, 0x87, 0x34, + 0x4d, 0xc7, 0x69, 0x06, 0x8c, 0xf8, 0x2c, 0xe2, 0x32, 0x53, 0x9f, 0x17, 0x13, 0x5b, 0x8e, 0x73, + 0x27, 0x84, 0xf1, 0xef, 0xb0, 0x20, 0xd7, 0xda, 0xae, 0xd9, 0xe6, 0x76, 0x97, 0x44, 0x84, 0x7a, + 0x4b, 0x6b, 0x02, 0xc6, 0x87, 0x30, 0x15, 0x8e, 0xc4, 0x09, 0x15, 0x8c, 0xbd, 0xe1, 0x2e, 0xa7, + 0x2b, 0x48, 0x98, 0xbf, 0x15, 0x25, 0x6c, 0x98, 0x4e, 0x40, 0xea, 0x22, 0x7b, 0x68, 0x23, 0xe3, + 0xbe, 0xed, 0x35, 0x7d, 0xc2, 0x02, 0x87, 0x33, 0x65, 0x32, 0xe2, 0x33, 0x1b, 0x81, 0xf5, 0x18, + 0xc3, 0x3f, 0x00, 0x3c, 0x34, 0x6d, 0xde, 0xe4, 0xf4, 0x88, 0xb8, 0xca, 0x54, 0xe4, 0x41, 0x3e, + 0x44, 0x6e, 0x87, 0x40, 0x8a, 0xcb, 0x33, 0x29, 0x2e, 0x97, 0x5a, 0xb0, 0x94, 0xca, 0x05, 0xd7, + 0x60, 0xb2, 0x1b, 0x0e, 0x22, 0x77, 0xe7, 0x8c, 0xf5, 0x2c, 0x05, 0xa5, 0xc5, 0x89, 0xea, 0x71, + 0x06, 0xf5, 0x19, 0x82, 0x95, 0xcf, 0x7c, 0x10, 0xc5, 0xbb, 0x07, 0x85, 0x5e, 0x71, 0x30, 0x05, + 0x95, 0x27, 0x32, 0x57, 0x6f, 0x32, 0x01, 0xfe, 0x0d, 0xe6, 0x5d, 0xf2, 0x88, 0x37, 0x13, 0xd6, + 0xc4, 0x35, 0x58, 0x0c, 0xe1, 0xbb, 0xd2, 0x1e, 0xf5, 0x0c, 0xc1, 0x62, 0xc8, 0x69, 0x5b, 0x14, + 0xcd, 0x45, 0x6d, 0x29, 0x30, 0xed, 0xf9, 0xf4, 0x3e, 0x69, 0x73, 0x11, 0x28, 0x3f, 0xb3, 0x14, + 0xca, 0x88, 0x57, 0xda, 0x84, 0xa5, 0x01, 0x0e, 0xc2, 0x95, 0x1d, 0xc8, 0xcb, 0x6a, 0x96, 0x9e, + 0xac, 0x0d, 0xf7, 0x44, 0xe6, 0xa9, 0xf7, 0x82, 0x8d, 0xb7, 0xd3, 0x90, 0x17, 0xb8, 0x6f, 0xe0, + 0x73, 0x04, 0xc5, 0xbe, 0x8e, 0x89, 0xff, 0x19, 0x9e, 0x36, 0xed, 0x41, 0x28, 0xfd, 0x9b, 0x39, + 0x2e, 0x96, 0xa6, 0xee, 0x9c, 0x7d, 0xf8, 0xf8, 0x3c, 0x57, 0x51, 0xff, 0x4e, 0x3e, 0x84, 0xfa, + 0x05, 0x61, 0xfd, 0x24, 0x71, 0xb3, 0x4f, 0xf5, 0xc4, 0xd1, 0xea, 0x8c, 0xf0, 0xff, 0x92, 0x8f, + 0x44, 0x28, 0xa6, 0x9a, 0x55, 0x4c, 0x75, 0x4c, 0x31, 0xd5, 0xaf, 0x89, 0xc1, 0xd7, 0x32, 0x8b, + 0x39, 0xe9, 0xeb, 0x93, 0xa7, 0xf8, 0x35, 0x82, 0x85, 0xc1, 0xb6, 0x8b, 0x37, 0x47, 0x39, 0xf3, + 0xd4, 0x56, 0x5d, 0x5a, 0x96, 0xa1, 0xf2, 0x9d, 0xd7, 0x6e, 0x84, 0xef, 0xbc, 0x64, 0xbc, 0x76, + 0x79, 0xc6, 0xef, 0x10, 0xcc, 0x0f, 0xdc, 0x6a, 0xbc, 0x31, 0x6e, 0x43, 0x2c, 0x6d, 0x8e, 0x11, + 0x29, 0x0e, 0x61, 0x23, 0x92, 0x64, 0xe0, 0xbf, 0xb2, 0x4a, 0xc2, 0x2f, 0x10, 0x14, 0xfb, 0x2e, + 0xe0, 0x28, 0x15, 0x94, 0xd6, 0x35, 0x46, 0xa9, 0xa0, 0xd4, 0x9b, 0xae, 0xfe, 0x18, 0x91, 0x57, + 0xf0, 0x72, 0x3a, 0xf9, 0xca, 0x1b, 0x04, 0xbf, 0xb4, 0xe9, 0xf1, 0xd0, 0xf4, 0x95, 0xa2, 0xbc, + 0xe5, 0xfb, 0xe1, 0x81, 0xef, 0xa3, 0x7b, 0x37, 0x45, 0x88, 0x45, 0x1d, 0xd3, 0xb5, 0x34, 0xea, + 0x5b, 0xba, 0x45, 0xdc, 0xa8, 0x1c, 0xc4, 0x1f, 0xaa, 0xe9, 0xd9, 0xec, 0xcb, 0x3f, 0x8d, 0xff, + 0xf7, 0x01, 0x2f, 0x73, 0x4a, 0x35, 0xce, 0x77, 0x3d, 0x84, 0x65, 0xaf, 0xf1, 0xb5, 0x86, 0x71, + 0x2e, 0xa7, 0x0e, 0xa2, 0xa9, 0x03, 0x39, 0x75, 0xd0, 0x30, 0x5a, 0x53, 0xd1, 0x7e, 0xeb, 0x9f, + 0x02, 0x00, 0x00, 0xff, 0xff, 0x52, 0x23, 0xb7, 0x95, 0x14, 0x0b, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1/common.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1/common.pb.go index 2d1d9df..2d4317d 100644 --- a/vendor/google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1/common.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1/common.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/devtools/clouderrorreporting/v1beta1/common.proto -// DO NOT EDIT! /* Package clouderrorreporting is a generated protocol buffer package. @@ -386,49 +385,50 @@ func init() { } var fileDescriptor0 = []byte{ - // 693 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0xcd, 0x6e, 0x13, 0x3b, - 0x14, 0x56, 0x92, 0xfe, 0xe5, 0xa4, 0x4d, 0xaf, 0xac, 0xab, 0xab, 0xdc, 0x00, 0x6a, 0x49, 0x37, - 0x95, 0x90, 0x66, 0x68, 0xd9, 0x50, 0xba, 0x40, 0x34, 0xaa, 0x4a, 0x25, 0x54, 0x55, 0x93, 0x8a, - 0x05, 0x0b, 0x2c, 0x67, 0xe6, 0x64, 0x62, 0x31, 0x63, 0x0f, 0xb6, 0x27, 0xa2, 0xef, 0xc2, 0x82, - 0x35, 0x0f, 0x82, 0x78, 0x18, 0x1e, 0x02, 0xd9, 0x63, 0x97, 0x56, 0xed, 0x82, 0xec, 0xfc, 0x9d, - 0x9f, 0xef, 0x9c, 0xef, 0xf8, 0xd8, 0xf0, 0x32, 0x97, 0x32, 0x2f, 0x30, 0xce, 0x70, 0x61, 0xa4, - 0x2c, 0x74, 0x9c, 0x16, 0xb2, 0xce, 0x50, 0x29, 0xa9, 0x14, 0x56, 0x52, 0x19, 0x2e, 0xf2, 0x78, - 0x71, 0x30, 0x45, 0xc3, 0x0e, 0xe2, 0x54, 0x96, 0xa5, 0x14, 0x51, 0xa5, 0xa4, 0x91, 0xe4, 0x59, - 0x93, 0x19, 0x85, 0xcc, 0xe8, 0x81, 0xcc, 0xc8, 0x67, 0x0e, 0x1f, 0xfb, 0x32, 0xac, 0xe2, 0x31, - 0x13, 0x42, 0x1a, 0x66, 0xb8, 0x14, 0xba, 0xa1, 0x1a, 0xee, 0xdd, 0xf2, 0x96, 0x52, 0x70, 0x23, - 0x15, 0x66, 0x54, 0xa1, 0x96, 0xb5, 0x4a, 0xd1, 0x07, 0xed, 0xf8, 0x20, 0x87, 0xa6, 0xf5, 0x2c, - 0x36, 0xbc, 0x44, 0x6d, 0x58, 0x59, 0x35, 0x01, 0xa3, 0x6f, 0x2d, 0x80, 0x53, 0x5b, 0xfe, 0x4c, - 0xc9, 0xba, 0x22, 0x04, 0x56, 0x04, 0x2b, 0x71, 0xd0, 0xda, 0x6d, 0xed, 0x77, 0x13, 0x77, 0x26, - 0xff, 0xc3, 0x46, 0x6e, 0x9d, 0x94, 0x67, 0x83, 0xb6, 0xb3, 0xaf, 0x3b, 0x7c, 0x9e, 0x91, 0x14, - 0xb6, 0x8d, 0x62, 0xe9, 0x27, 0x2e, 0x72, 0xca, 0xb5, 0xae, 0x51, 0x0f, 0x3a, 0xbb, 0x9d, 0xfd, - 0xde, 0xe1, 0xab, 0x68, 0x09, 0xa1, 0xd1, 0x95, 0xe7, 0x38, 0xb7, 0x14, 0x49, 0xdf, 0xdc, 0x86, - 0x7a, 0xf4, 0x14, 0xb6, 0xee, 0x04, 0x90, 0x7f, 0xa0, 0x53, 0xab, 0xc2, 0xf7, 0x68, 0x8f, 0xa3, - 0xaf, 0x6d, 0xaf, 0xe2, 0x74, 0x81, 0xc2, 0x90, 0x23, 0x00, 0xb4, 0x07, 0x6a, 0xd5, 0xba, 0xb8, - 0xde, 0xe1, 0x30, 0x74, 0x14, 0x46, 0x11, 0x5d, 0x85, 0x51, 0x24, 0x5d, 0x17, 0x6d, 0x31, 0xc9, - 0x60, 0x5b, 0xa3, 0x5a, 0xf0, 0x14, 0x69, 0x2a, 0x85, 0xc1, 0x2f, 0xc6, 0x69, 0xee, 0x1d, 0x1e, - 0x2f, 0xa5, 0x68, 0xd2, 0x70, 0x8c, 0x1b, 0x8a, 0xa4, 0xaf, 0xef, 0x60, 0x32, 0x80, 0xf5, 0x12, - 0xb5, 0x66, 0x39, 0x0e, 0x3a, 0xcd, 0x44, 0x3d, 0x24, 0x13, 0x58, 0x0f, 0x75, 0x57, 0x5d, 0xdd, - 0xa3, 0xa5, 0xea, 0xba, 0x21, 0x84, 0xaa, 0x81, 0x69, 0xc4, 0xa1, 0x3f, 0xb9, 0xd7, 0x80, 0x6f, - 0x29, 0x5c, 0xa9, 0x87, 0xd6, 0xb3, 0x40, 0xa5, 0xb9, 0x14, 0xa1, 0x35, 0x0f, 0xc9, 0x1e, 0x6c, - 0x85, 0xed, 0xa2, 0xe6, 0xba, 0xc2, 0xc1, 0x8a, 0xf3, 0x6f, 0x06, 0xe3, 0xd5, 0x75, 0x85, 0xa3, - 0x5f, 0x2d, 0xd8, 0xbc, 0xdd, 0x04, 0x99, 0xc2, 0xe6, 0xdc, 0x98, 0x8a, 0x2a, 0xfc, 0x5c, 0xa3, - 0x36, 0xfe, 0x36, 0x5e, 0x2f, 0xa5, 0xea, 0xad, 0x31, 0x55, 0xd2, 0xe4, 0x07, 0x6d, 0xbd, 0xf9, - 0x1f, 0x9b, 0xdd, 0xda, 0x5a, 0xa3, 0xf2, 0x52, 0xdc, 0xd9, 0x5e, 0x64, 0x43, 0x44, 0x0b, 0x99, - 0xba, 0x87, 0xe3, 0xf4, 0x2c, 0x7d, 0x91, 0x4e, 0xda, 0x3b, 0x4f, 0x91, 0xf4, 0x9b, 0x88, 0x80, - 0x47, 0x3f, 0x5b, 0x40, 0xee, 0x77, 0x47, 0xfe, 0x83, 0xb5, 0x12, 0xcd, 0x5c, 0x66, 0x7e, 0x49, - 0x3d, 0x0a, 0x9b, 0xdb, 0xbe, 0xd9, 0x5c, 0xf2, 0x04, 0xc0, 0xb6, 0x4b, 0x59, 0x8e, 0xc2, 0xf8, - 0x89, 0x77, 0xad, 0xe5, 0x8d, 0x35, 0x90, 0x21, 0x6c, 0x28, 0x9c, 0xa1, 0x52, 0xa8, 0xfc, 0xb8, - 0x6f, 0x30, 0x79, 0x0e, 0xff, 0x2a, 0xd4, 0x95, 0x14, 0x1a, 0xa9, 0x36, 0xcc, 0xd4, 0x9a, 0xa6, - 0x32, 0x43, 0xb7, 0x37, 0xab, 0x09, 0x09, 0xbe, 0x89, 0x73, 0x8d, 0x65, 0x86, 0xe4, 0x11, 0x74, - 0x15, 0x96, 0xd2, 0x20, 0xe5, 0xd5, 0x60, 0x2d, 0xd0, 0x59, 0xc3, 0x79, 0x35, 0xd2, 0xd0, 0xbf, - 0x2b, 0xd6, 0x86, 0xcf, 0x78, 0x81, 0xb4, 0x62, 0x66, 0xee, 0x85, 0x6c, 0x58, 0xc3, 0x25, 0x33, - 0x73, 0xb2, 0x03, 0xbd, 0x82, 0x0b, 0xa4, 0xa2, 0x2e, 0xa7, 0x7e, 0xf4, 0xab, 0x09, 0x58, 0xd3, - 0x85, 0xb3, 0xd8, 0x75, 0x99, 0xd5, 0x22, 0xb5, 0x4c, 0xd4, 0xfd, 0x29, 0x7e, 0x5d, 0x82, 0xf1, - 0x82, 0x95, 0x78, 0xf2, 0xa3, 0x05, 0xf6, 0x83, 0x5c, 0xe6, 0x4a, 0x4e, 0x7a, 0x63, 0xf7, 0xa3, - 0x5e, 0xda, 0x77, 0x7c, 0xd9, 0xfa, 0xf0, 0xd1, 0xe7, 0xe6, 0xb2, 0x60, 0x22, 0x8f, 0xa4, 0xca, - 0xe3, 0x1c, 0x85, 0x7b, 0xe5, 0x71, 0xe3, 0x62, 0x15, 0xd7, 0x7f, 0xf5, 0x57, 0x1f, 0x3f, 0xe0, - 0xfb, 0xde, 0xde, 0x3b, 0x6b, 0x0a, 0x8c, 0xad, 0xb3, 0x79, 0x61, 0xc9, 0x4d, 0x53, 0xef, 0x0f, - 0x4e, 0x6c, 0xe6, 0x74, 0xcd, 0x15, 0x7c, 0xf1, 0x3b, 0x00, 0x00, 0xff, 0xff, 0xf9, 0x6b, 0x08, - 0x8d, 0x1b, 0x06, 0x00, 0x00, + // 705 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0xcd, 0x6e, 0x13, 0x31, + 0x10, 0x56, 0x92, 0xfe, 0xc5, 0x69, 0x53, 0x64, 0x21, 0x14, 0x02, 0xa8, 0x25, 0xbd, 0x54, 0x42, + 0xda, 0xa5, 0xe5, 0x42, 0xe9, 0x01, 0xd1, 0xa8, 0x2a, 0x95, 0x50, 0x55, 0x6d, 0xaa, 0x1e, 0x50, + 0x85, 0xe5, 0xec, 0x4e, 0x36, 0x16, 0xbb, 0xb6, 0xb1, 0xbd, 0x11, 0x7d, 0x17, 0x0e, 0x9c, 0x79, + 0x12, 0xc4, 0xb3, 0xf4, 0x21, 0x90, 0xbd, 0x76, 0x69, 0xd4, 0x1e, 0xc8, 0xcd, 0x33, 0xf3, 0xcd, + 0x37, 0xf3, 0x8d, 0xc7, 0x46, 0x6f, 0x73, 0x21, 0xf2, 0x02, 0xe2, 0x0c, 0x66, 0x46, 0x88, 0x42, + 0xc7, 0x69, 0x21, 0xaa, 0x0c, 0x94, 0x12, 0x4a, 0x81, 0x14, 0xca, 0x30, 0x9e, 0xc7, 0xb3, 0xbd, + 0x31, 0x18, 0xba, 0x17, 0xa7, 0xa2, 0x2c, 0x05, 0x8f, 0xa4, 0x12, 0x46, 0xe0, 0x57, 0x75, 0x66, + 0x14, 0x32, 0xa3, 0x07, 0x32, 0x23, 0x9f, 0xd9, 0x7f, 0xee, 0xcb, 0x50, 0xc9, 0x62, 0xca, 0xb9, + 0x30, 0xd4, 0x30, 0xc1, 0x75, 0x4d, 0xd5, 0xdf, 0xb9, 0x13, 0x2d, 0x05, 0x67, 0x46, 0x28, 0xc8, + 0x88, 0x02, 0x2d, 0x2a, 0x95, 0x82, 0x07, 0x6d, 0x79, 0x90, 0xb3, 0xc6, 0xd5, 0x24, 0x36, 0xac, + 0x04, 0x6d, 0x68, 0x29, 0x6b, 0xc0, 0xe0, 0x67, 0x03, 0xa1, 0x63, 0x5b, 0xfe, 0x44, 0x89, 0x4a, + 0x62, 0x8c, 0x96, 0x38, 0x2d, 0xa1, 0xd7, 0xd8, 0x6e, 0xec, 0xb6, 0x13, 0x77, 0xc6, 0x4f, 0xd1, + 0x5a, 0x6e, 0x83, 0x84, 0x65, 0xbd, 0xa6, 0xf3, 0xaf, 0x3a, 0xfb, 0x34, 0xc3, 0x29, 0xda, 0x34, + 0x8a, 0xa6, 0x5f, 0x19, 0xcf, 0x09, 0xd3, 0xba, 0x02, 0xdd, 0x6b, 0x6d, 0xb7, 0x76, 0x3b, 0xfb, + 0xef, 0xa2, 0x05, 0x84, 0x46, 0x17, 0x9e, 0xe3, 0xd4, 0x52, 0x24, 0x5d, 0x73, 0xd7, 0xd4, 0x83, + 0x97, 0x68, 0x63, 0x0e, 0x80, 0x1f, 0xa1, 0x56, 0xa5, 0x0a, 0xdf, 0xa3, 0x3d, 0x0e, 0x7e, 0x34, + 0xbd, 0x8a, 0xe3, 0x19, 0x70, 0x83, 0x0f, 0x10, 0x02, 0x7b, 0x20, 0x56, 0xad, 0xc3, 0x75, 0xf6, + 0xfb, 0xa1, 0xa3, 0x30, 0x8a, 0xe8, 0x22, 0x8c, 0x22, 0x69, 0x3b, 0xb4, 0xb5, 0x71, 0x86, 0x36, + 0x35, 0xa8, 0x19, 0x4b, 0x81, 0xa4, 0x82, 0x1b, 0xf8, 0x6e, 0x9c, 0xe6, 0xce, 0xfe, 0xe1, 0x42, + 0x8a, 0x46, 0x35, 0xc7, 0xb0, 0xa6, 0x48, 0xba, 0x7a, 0xce, 0xc6, 0x3d, 0xb4, 0x5a, 0x82, 0xd6, + 0x34, 0x87, 0x5e, 0xab, 0x9e, 0xa8, 0x37, 0xf1, 0x08, 0xad, 0x86, 0xba, 0xcb, 0xae, 0xee, 0xc1, + 0x42, 0x75, 0xdd, 0x10, 0x42, 0xd5, 0xc0, 0x34, 0x60, 0xa8, 0x3b, 0xba, 0xd7, 0x80, 0x6f, 0x29, + 0x5c, 0xa9, 0x37, 0x6d, 0x64, 0x06, 0x4a, 0x33, 0xc1, 0x43, 0x6b, 0xde, 0xc4, 0x3b, 0x68, 0x23, + 0x6c, 0x17, 0x31, 0xd7, 0x12, 0x7a, 0x4b, 0x2e, 0xbe, 0x1e, 0x9c, 0x17, 0xd7, 0x12, 0x06, 0x37, + 0x0d, 0xb4, 0x7e, 0xb7, 0x09, 0x3c, 0x46, 0xeb, 0x53, 0x63, 0x24, 0x51, 0xf0, 0xad, 0x02, 0x6d, + 0xfc, 0x6d, 0xbc, 0x5f, 0x48, 0xd5, 0x47, 0x63, 0x64, 0x52, 0xe7, 0x07, 0x6d, 0x9d, 0xe9, 0x3f, + 0x9f, 0xdd, 0xda, 0x4a, 0x83, 0xf2, 0x52, 0xdc, 0xd9, 0x5e, 0x64, 0x4d, 0x44, 0x0a, 0x91, 0xba, + 0x87, 0xe3, 0xf4, 0x2c, 0x7c, 0x91, 0x4e, 0xda, 0x27, 0x4f, 0x91, 0x74, 0x6b, 0x44, 0xb0, 0x07, + 0xbf, 0x1b, 0x08, 0xdf, 0xef, 0x0e, 0x3f, 0x41, 0x2b, 0x25, 0x98, 0xa9, 0xc8, 0xfc, 0x92, 0x7a, + 0x2b, 0x6c, 0x6e, 0xf3, 0x76, 0x73, 0xf1, 0x0b, 0x84, 0x6c, 0xbb, 0x84, 0xe6, 0xc0, 0x8d, 0x9f, + 0x78, 0xdb, 0x7a, 0x3e, 0x58, 0x07, 0xee, 0xa3, 0x35, 0x05, 0x13, 0x50, 0x0a, 0x94, 0x1f, 0xf7, + 0xad, 0x8d, 0x5f, 0xa3, 0xc7, 0x0a, 0xb4, 0x14, 0x5c, 0x03, 0xd1, 0x86, 0x9a, 0x4a, 0x93, 0x54, + 0x64, 0xe0, 0xf6, 0x66, 0x39, 0xc1, 0x21, 0x36, 0x72, 0xa1, 0xa1, 0xc8, 0x00, 0x3f, 0x43, 0x6d, + 0x05, 0xa5, 0x30, 0x40, 0x98, 0xec, 0xad, 0x04, 0x3a, 0xeb, 0x38, 0x95, 0x03, 0x8d, 0xba, 0xf3, + 0x62, 0x2d, 0x7c, 0xc2, 0x0a, 0x20, 0x92, 0x9a, 0xa9, 0x17, 0xb2, 0x66, 0x1d, 0xe7, 0xd4, 0x4c, + 0xf1, 0x16, 0xea, 0x14, 0x8c, 0x03, 0xe1, 0x55, 0x39, 0xf6, 0xa3, 0x5f, 0x4e, 0x90, 0x75, 0x9d, + 0x39, 0x8f, 0x5d, 0x97, 0x49, 0xc5, 0x53, 0xcb, 0x44, 0xdc, 0x9f, 0xe2, 0xd7, 0x25, 0x38, 0xcf, + 0x68, 0x09, 0x47, 0x37, 0x0d, 0x64, 0x3f, 0xc8, 0x45, 0xae, 0xe4, 0xa8, 0x33, 0x74, 0x3f, 0xea, + 0xb9, 0x7d, 0xc7, 0xe7, 0x8d, 0xcf, 0x5f, 0x7c, 0x6e, 0x2e, 0x0a, 0xca, 0xf3, 0x48, 0xa8, 0x3c, + 0xce, 0x81, 0xbb, 0x57, 0x1e, 0xd7, 0x21, 0x2a, 0x99, 0xfe, 0xaf, 0xbf, 0xfa, 0xf0, 0x81, 0xd8, + 0xaf, 0xe6, 0xce, 0x49, 0x5d, 0x60, 0x68, 0x83, 0xf5, 0x0b, 0x4b, 0x6e, 0x9b, 0xba, 0xdc, 0x3b, + 0xb2, 0x99, 0x7f, 0x02, 0xea, 0xca, 0xa1, 0xae, 0xe6, 0x51, 0x57, 0x97, 0x35, 0xff, 0x78, 0xc5, + 0xb5, 0xf5, 0xe6, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x24, 0x65, 0x84, 0x33, 0x41, 0x06, 0x00, + 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1/error_group_service.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1/error_group_service.pb.go index 61f6b77..3ac9e4d 100644 --- a/vendor/google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1/error_group_service.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1/error_group_service.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/devtools/clouderrorreporting/v1beta1/error_group_service.proto -// DO NOT EDIT! package clouderrorreporting @@ -183,29 +182,30 @@ func init() { } var fileDescriptor1 = []byte{ - // 381 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x92, 0x4f, 0x4a, 0x03, 0x31, - 0x18, 0xc5, 0x99, 0x8a, 0x62, 0xd3, 0x85, 0x98, 0x85, 0xc8, 0xa0, 0x20, 0x75, 0xa3, 0x2d, 0x24, - 0x4e, 0x5d, 0x58, 0xfc, 0x83, 0x50, 0x29, 0x5d, 0x29, 0xa5, 0xa2, 0x0b, 0x17, 0x96, 0x74, 0x1a, - 0xc2, 0xc8, 0x4c, 0xbe, 0x31, 0x93, 0x76, 0x23, 0x6e, 0x3c, 0x80, 0x1b, 0x6f, 0xe1, 0xda, 0x0b, - 0x78, 0x04, 0xf1, 0x0a, 0x1e, 0x44, 0x26, 0xe9, 0x1f, 0x6d, 0x2b, 0x38, 0xdd, 0xbe, 0xe4, 0x7b, - 0xef, 0x97, 0x97, 0x0f, 0xd5, 0x05, 0x80, 0x08, 0x39, 0xed, 0xf2, 0xbe, 0x06, 0x08, 0x13, 0xea, - 0x87, 0xd0, 0xeb, 0x72, 0xa5, 0x40, 0x29, 0x1e, 0x83, 0xd2, 0x81, 0x14, 0xb4, 0xef, 0x75, 0xb8, - 0x66, 0x1e, 0x35, 0x72, 0x5b, 0x28, 0xe8, 0xc5, 0xed, 0x84, 0xab, 0x7e, 0xe0, 0x73, 0x12, 0x2b, - 0xd0, 0x80, 0xcb, 0xd6, 0x86, 0x0c, 0x6d, 0xc8, 0x0c, 0x1b, 0x32, 0xb0, 0x71, 0x37, 0x06, 0x99, - 0x2c, 0x0e, 0x28, 0x93, 0x12, 0x34, 0xd3, 0x01, 0xc8, 0xc4, 0x5a, 0xb9, 0xd5, 0x2c, 0x44, 0x3e, - 0x44, 0x11, 0x48, 0x3b, 0x59, 0xdc, 0x43, 0x2b, 0x0d, 0xae, 0x1b, 0x29, 0x5e, 0x8b, 0xdf, 0xf7, - 0x78, 0xa2, 0xf1, 0x26, 0x42, 0x16, 0x57, 0xb2, 0x88, 0xaf, 0x3b, 0x5b, 0xce, 0x4e, 0xbe, 0x95, - 0x37, 0xca, 0x05, 0x8b, 0x78, 0xd1, 0x47, 0xf8, 0x2a, 0xee, 0x32, 0xcd, 0x7f, 0x0d, 0x9d, 0xa3, - 0x45, 0x73, 0xc5, 0xdc, 0x2f, 0x54, 0x0e, 0x48, 0x86, 0xc7, 0x91, 0x7a, 0x2a, 0x5b, 0x3b, 0xeb, - 0x52, 0x79, 0x5e, 0x40, 0xab, 0x63, 0xf5, 0xd2, 0xf6, 0x86, 0xdf, 0x1c, 0xb4, 0x3c, 0xa4, 0xc5, - 0xc7, 0x99, 0x22, 0x26, 0x1e, 0xe9, 0xce, 0x0b, 0x58, 0xf4, 0x9e, 0x3e, 0xbf, 0x5e, 0x72, 0x65, - 0xbc, 0x3b, 0xea, 0xf3, 0x61, 0xdc, 0xd6, 0x49, 0xac, 0xe0, 0x8e, 0xfb, 0x3a, 0xa1, 0x25, 0x6a, - 0xd4, 0x84, 0x96, 0x1e, 0xf1, 0xbb, 0x83, 0x0a, 0x3f, 0x2a, 0xc3, 0xa7, 0x99, 0xb2, 0xa7, 0xcb, - 0x9e, 0x1f, 0xbe, 0x6a, 0xe0, 0x2b, 0xee, 0x24, 0x3c, 0xf9, 0x13, 0xfe, 0xd0, 0x7e, 0x48, 0xed, - 0xc3, 0x41, 0xe9, 0xe2, 0x64, 0x09, 0xae, 0xad, 0x4d, 0xfd, 0x60, 0x33, 0xdd, 0xb9, 0xa6, 0x73, - 0x73, 0x3b, 0xb0, 0x11, 0x10, 0x32, 0x29, 0x08, 0x28, 0x41, 0x05, 0x97, 0x66, 0x23, 0xa9, 0x3d, - 0x62, 0x71, 0x90, 0xfc, 0x6b, 0x9d, 0x8f, 0x66, 0x9c, 0xbd, 0xe6, 0xb6, 0x1b, 0x36, 0xe0, 0x2c, - 0x3d, 0xb4, 0x0d, 0xb4, 0x46, 0x7c, 0xd7, 0x5e, 0x2d, 0x9d, 0xec, 0x2c, 0x99, 0xc0, 0xfd, 0xef, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x9c, 0xb7, 0x37, 0x79, 0xd0, 0x03, 0x00, 0x00, + // 398 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x92, 0xcb, 0x4a, 0x23, 0x41, + 0x14, 0x86, 0xe9, 0x0c, 0x33, 0x4c, 0x2a, 0x8b, 0x61, 0x6a, 0x31, 0x0c, 0xcd, 0x0c, 0x48, 0xdc, + 0x68, 0x02, 0x55, 0x76, 0x5c, 0x18, 0xbc, 0x20, 0x44, 0x42, 0x56, 0x4a, 0x88, 0x98, 0x85, 0x04, + 0x43, 0xa5, 0x53, 0x14, 0x2d, 0xdd, 0x75, 0xda, 0xea, 0x4a, 0x36, 0xe2, 0xc6, 0x07, 0x70, 0xe3, + 0x5b, 0xb8, 0xf6, 0x05, 0xdc, 0xba, 0xf5, 0x15, 0x7c, 0x07, 0xb7, 0xd2, 0x55, 0xb9, 0x98, 0x8b, + 0x60, 0x67, 0x7b, 0x2e, 0xff, 0xff, 0xd5, 0x5f, 0x07, 0xd5, 0x05, 0x80, 0x08, 0x39, 0xed, 0xf3, + 0xa1, 0x06, 0x08, 0x13, 0xea, 0x87, 0x30, 0xe8, 0x73, 0xa5, 0x40, 0x29, 0x1e, 0x83, 0xd2, 0x81, + 0x14, 0x74, 0xe8, 0xf5, 0xb8, 0x66, 0x1e, 0x35, 0xe5, 0xae, 0x50, 0x30, 0x88, 0xbb, 0x09, 0x57, + 0xc3, 0xc0, 0xe7, 0x24, 0x56, 0xa0, 0x01, 0x97, 0xad, 0x0c, 0x19, 0xcb, 0x90, 0x25, 0x32, 0x64, + 0x24, 0xe3, 0xfe, 0x1b, 0x79, 0xb2, 0x38, 0xa0, 0x4c, 0x4a, 0xd0, 0x4c, 0x07, 0x20, 0x13, 0x2b, + 0xe5, 0x56, 0xb3, 0x10, 0xf9, 0x10, 0x45, 0x20, 0xed, 0x66, 0x71, 0x0b, 0xfd, 0x6a, 0x70, 0xdd, + 0x48, 0xf1, 0x5a, 0xfc, 0x6a, 0xc0, 0x13, 0x8d, 0xff, 0x23, 0x64, 0x71, 0x25, 0x8b, 0xf8, 0x5f, + 0x67, 0xcd, 0xd9, 0xc8, 0xb7, 0xf2, 0xa6, 0x72, 0xc2, 0x22, 0x5e, 0xf4, 0x11, 0x3e, 0x8b, 0xfb, + 0x4c, 0xf3, 0x99, 0xa5, 0x63, 0xf4, 0xdd, 0x8c, 0x98, 0xf9, 0x42, 0x65, 0x87, 0x64, 0x78, 0x1c, + 0xa9, 0xa7, 0x65, 0x2b, 0x67, 0x55, 0x2a, 0x77, 0xdf, 0xd0, 0xef, 0x69, 0xf5, 0xd4, 0xe6, 0x86, + 0x1f, 0x1d, 0xf4, 0x73, 0x4c, 0x8b, 0xf7, 0x33, 0x59, 0xcc, 0x3d, 0xd2, 0x5d, 0x15, 0xb0, 0xe8, + 0xdd, 0xbe, 0xbc, 0xde, 0xe7, 0xca, 0x78, 0x73, 0x92, 0xe7, 0xf5, 0x34, 0xad, 0x83, 0x58, 0xc1, + 0x25, 0xf7, 0x75, 0x42, 0x4b, 0xd4, 0x54, 0x13, 0x5a, 0xba, 0xc1, 0x4f, 0x0e, 0x2a, 0x7c, 0x88, + 0x0c, 0x1f, 0x66, 0xf2, 0x5e, 0x0c, 0x7b, 0x75, 0xf8, 0xaa, 0x81, 0xaf, 0xb8, 0xf3, 0xf0, 0xe4, + 0x53, 0xf8, 0x5d, 0xfb, 0x21, 0xb5, 0x37, 0x07, 0xa5, 0x87, 0x93, 0xc5, 0xb8, 0xf6, 0x67, 0xe1, + 0x07, 0x9b, 0xe9, 0xcd, 0x35, 0x9d, 0xf3, 0x8b, 0x91, 0x8c, 0x80, 0x90, 0x49, 0x41, 0x40, 0x09, + 0x2a, 0xb8, 0x34, 0x17, 0x49, 0x6d, 0x8b, 0xc5, 0x41, 0xf2, 0xa5, 0x73, 0xde, 0x5b, 0xd2, 0x7b, + 0xc8, 0xad, 0x37, 0xac, 0xc1, 0x51, 0xda, 0xb4, 0x09, 0xb4, 0x26, 0x7c, 0x6d, 0xaf, 0x96, 0x6e, + 0x3e, 0x8f, 0xa7, 0x3a, 0x66, 0xaa, 0x33, 0x3b, 0xd5, 0x69, 0x5b, 0xfd, 0xde, 0x0f, 0x83, 0xb5, + 0xfd, 0x1e, 0x00, 0x00, 0xff, 0xff, 0xc2, 0x0a, 0xfa, 0x93, 0xf6, 0x03, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1/error_stats_service.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1/error_stats_service.pb.go index f110026..f1b2544 100644 --- a/vendor/google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1/error_stats_service.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1/error_stats_service.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/devtools/clouderrorreporting/v1beta1/error_stats_service.proto -// DO NOT EDIT! package clouderrorreporting @@ -824,87 +823,88 @@ func init() { } var fileDescriptor2 = []byte{ - // 1312 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x57, 0x4b, 0x6f, 0x1b, 0x55, - 0x14, 0x66, 0xec, 0x38, 0x89, 0x4f, 0x1c, 0xc7, 0xb9, 0x49, 0xd3, 0xa9, 0xcb, 0x23, 0x75, 0x05, - 0x0a, 0xa9, 0xb0, 0x9b, 0x54, 0xa5, 0x45, 0xe5, 0x51, 0xc7, 0x9e, 0x84, 0xa8, 0xa9, 0xed, 0x5e, - 0xdb, 0x20, 0xb2, 0xe8, 0x68, 0x62, 0x9f, 0x4c, 0x07, 0xec, 0x99, 0x61, 0xe6, 0x3a, 0x6a, 0x8b, - 0x2a, 0x21, 0x76, 0xac, 0x61, 0xc7, 0x3f, 0xe0, 0x57, 0xb0, 0x62, 0x0d, 0xea, 0x9e, 0x15, 0x7b, - 0x10, 0xbf, 0x00, 0xdd, 0xc7, 0xf8, 0xd5, 0x88, 0xd4, 0x0e, 0x42, 0xec, 0xe6, 0x9e, 0x73, 0xcf, - 0x77, 0x1e, 0xf7, 0x3b, 0xe7, 0xde, 0x01, 0xc3, 0xf6, 0x3c, 0xbb, 0x83, 0x85, 0x36, 0x9e, 0x30, - 0xcf, 0xeb, 0x84, 0x85, 0x56, 0xc7, 0xeb, 0xb5, 0x31, 0x08, 0xbc, 0x20, 0x40, 0xdf, 0x0b, 0x98, - 0xe3, 0xda, 0x85, 0x93, 0xad, 0x23, 0x64, 0xd6, 0x56, 0x41, 0x88, 0xcd, 0x90, 0x59, 0x2c, 0x34, - 0x43, 0x0c, 0x4e, 0x9c, 0x16, 0xe6, 0xfd, 0xc0, 0x63, 0x1e, 0xb9, 0x26, 0x61, 0xf2, 0x11, 0x4c, - 0xfe, 0x14, 0x98, 0xbc, 0x82, 0xc9, 0xbe, 0xaa, 0x7c, 0x5a, 0xbe, 0x53, 0xb0, 0x5c, 0xd7, 0x63, - 0x16, 0x73, 0x3c, 0x37, 0x94, 0x50, 0xd9, 0xdb, 0x93, 0x44, 0xd4, 0xf2, 0xba, 0x5d, 0xcf, 0x55, - 0x96, 0xaf, 0x2b, 0x4b, 0xb1, 0x3a, 0xea, 0x1d, 0x17, 0xda, 0xbd, 0x40, 0x40, 0x2b, 0xfd, 0x1b, - 0xe3, 0x7a, 0xe6, 0x74, 0x31, 0x64, 0x56, 0xd7, 0x97, 0x1b, 0x72, 0x3f, 0x24, 0xe0, 0xc2, 0x81, - 0x13, 0xb2, 0xbd, 0xc0, 0xeb, 0xf9, 0x75, 0x9e, 0x26, 0xc5, 0x2f, 0x7b, 0x18, 0x32, 0x72, 0x05, - 0x52, 0x7e, 0xe0, 0x7d, 0x8e, 0x2d, 0x66, 0xba, 0x56, 0x17, 0x75, 0x6d, 0x5d, 0xdb, 0x48, 0xd2, - 0x05, 0x25, 0xab, 0x58, 0x5d, 0x24, 0x97, 0x60, 0xde, 0xe6, 0x76, 0xa6, 0xd3, 0xd6, 0x63, 0xeb, - 0xf1, 0x8d, 0x24, 0x9d, 0x13, 0xeb, 0xfd, 0x36, 0x79, 0x04, 0x69, 0x55, 0x2e, 0xf3, 0xd8, 0xe9, - 0x30, 0x0c, 0xf4, 0xf8, 0xba, 0xb6, 0xb1, 0xb0, 0x5d, 0xcc, 0x4f, 0x50, 0xb6, 0x7c, 0x5d, 0x42, - 0x94, 0x3c, 0x97, 0xe1, 0x63, 0xb6, 0x2b, 0x80, 0xe8, 0xa2, 0x02, 0x96, 0x4b, 0x72, 0x08, 0xc0, - 0x93, 0x32, 0x03, 0xcb, 0xb5, 0x51, 0x4f, 0x08, 0x2f, 0x77, 0x26, 0xf2, 0xf2, 0xa0, 0x87, 0xc1, - 0x93, 0x86, 0xd3, 0x45, 0xca, 0x21, 0x68, 0x92, 0x45, 0x9f, 0xe4, 0x1e, 0xac, 0xf2, 0x45, 0xdb, - 0x6c, 0x79, 0x3d, 0x97, 0x99, 0x51, 0x71, 0xf5, 0x59, 0xe1, 0xe5, 0x52, 0xe4, 0x25, 0xaa, 0x6e, - 0xbe, 0xac, 0x36, 0x50, 0x22, 0xcc, 0x4a, 0xdc, 0x2a, 0x92, 0x91, 0x87, 0x90, 0xb4, 0x3a, 0x8e, - 0xed, 0x76, 0xd1, 0x65, 0xfa, 0xdc, 0xba, 0xb6, 0x91, 0xde, 0xbe, 0x3b, 0x51, 0x9c, 0x8d, 0x3e, - 0x66, 0x31, 0xc2, 0xa1, 0x03, 0x48, 0x52, 0x84, 0x74, 0x7f, 0x61, 0x72, 0xff, 0xfa, 0xbc, 0x08, - 0x33, 0xfb, 0x42, 0x98, 0x8d, 0x88, 0x04, 0x74, 0xb1, 0x6f, 0xc1, 0x65, 0x84, 0x42, 0xc2, 0x0b, - 0xda, 0x18, 0xe8, 0x49, 0x11, 0xde, 0xfb, 0x13, 0x85, 0x67, 0x70, 0xb1, 0xe0, 0x51, 0x95, 0x63, - 0x50, 0x09, 0x45, 0x2e, 0x43, 0xd2, 0xb7, 0x6c, 0x34, 0x43, 0xe7, 0x29, 0xea, 0x0b, 0xeb, 0xda, - 0x46, 0x82, 0xce, 0x73, 0x41, 0xdd, 0x79, 0x8a, 0xe4, 0x35, 0x00, 0xa1, 0x64, 0xde, 0x17, 0xe8, - 0xea, 0x29, 0x41, 0x31, 0xb1, 0xbd, 0xc1, 0x05, 0xb9, 0x3f, 0x35, 0x58, 0x1b, 0x67, 0x67, 0xe8, - 0x7b, 0x6e, 0x88, 0xe4, 0x11, 0x2c, 0xcb, 0xde, 0x94, 0x0c, 0x14, 0x1d, 0xaa, 0x6b, 0xeb, 0xf1, - 0x8d, 0x85, 0xa9, 0xc3, 0x96, 0x0e, 0x96, 0x70, 0x54, 0x40, 0xde, 0x82, 0x25, 0x17, 0x1f, 0x33, - 0x73, 0x28, 0xd0, 0x98, 0x08, 0x74, 0x91, 0x8b, 0x6b, 0x51, 0xb0, 0xa4, 0x0c, 0x99, 0x01, 0x11, - 0xcd, 0x23, 0xb4, 0x1d, 0x57, 0x9f, 0x39, 0xf3, 0x04, 0xd2, 0x7d, 0xb6, 0xed, 0x70, 0x8b, 0xdc, - 0xb7, 0x09, 0x58, 0x1a, 0x0b, 0x89, 0xdc, 0x87, 0x84, 0xc8, 0x52, 0xf4, 0xe0, 0xc2, 0xf6, 0xad, - 0x29, 0xf3, 0xa3, 0x12, 0x85, 0xac, 0x42, 0x42, 0xf0, 0x59, 0xa4, 0x11, 0xa7, 0x72, 0x41, 0xae, - 0xc3, 0xaa, 0x75, 0x7c, 0x8c, 0x2d, 0x86, 0x6d, 0xb3, 0x17, 0x62, 0x10, 0x4a, 0xd2, 0x8b, 0xbe, - 0x8d, 0x53, 0x12, 0xe9, 0x9a, 0x5c, 0x25, 0x48, 0x48, 0x0e, 0x21, 0x35, 0xd4, 0x1d, 0xa1, 0x3e, - 0x23, 0xaa, 0x7f, 0x6b, 0x4a, 0x4e, 0xd3, 0x85, 0x41, 0xcf, 0x84, 0x64, 0x07, 0x96, 0x8e, 0x9d, - 0x20, 0x64, 0x66, 0x88, 0xe8, 0x4a, 0x36, 0x27, 0xce, 0x66, 0xb3, 0x30, 0xa9, 0x23, 0xba, 0x82, - 0xcd, 0x77, 0x21, 0xdd, 0xb1, 0x46, 0x20, 0x66, 0xcf, 0x84, 0x48, 0x71, 0x8b, 0x3e, 0xc2, 0x23, - 0x58, 0xee, 0xd7, 0x44, 0x4d, 0x9d, 0x50, 0x9f, 0x13, 0x69, 0xde, 0x39, 0xc7, 0x20, 0xa3, 0x99, - 0x08, 0x55, 0xc9, 0x43, 0xb2, 0x0d, 0x17, 0xdc, 0x5e, 0xd7, 0x7c, 0xd1, 0xdb, 0xbc, 0xe8, 0x98, - 0x15, 0xb7, 0xd7, 0x2d, 0x8e, 0xdb, 0x98, 0x90, 0x0e, 0xd0, 0x0f, 0x30, 0x44, 0x97, 0xdf, 0x27, - 0x27, 0x28, 0xda, 0x76, 0x2a, 0x7e, 0x18, 0x27, 0x7c, 0x98, 0x8c, 0xc1, 0xe5, 0xbe, 0xd7, 0x00, - 0x06, 0x07, 0x34, 0xe0, 0x8d, 0x36, 0xcc, 0x9b, 0xf7, 0x00, 0x42, 0x66, 0x05, 0x6a, 0xe4, 0xc4, - 0xce, 0xac, 0x70, 0x52, 0xec, 0x16, 0xe5, 0xbd, 0x09, 0xf3, 0xe8, 0xb6, 0xa5, 0x61, 0xfc, 0x4c, - 0xc3, 0x39, 0x74, 0xdb, 0x7c, 0x95, 0x7b, 0x1e, 0x83, 0x65, 0x3e, 0x15, 0x44, 0xd0, 0xd3, 0xdf, - 0x57, 0xda, 0xff, 0xe1, 0xbe, 0x9a, 0xf9, 0x57, 0xef, 0xab, 0x91, 0x59, 0x3b, 0xfb, 0x8f, 0xb3, - 0x76, 0x6e, 0x7c, 0xd6, 0xfe, 0xa6, 0x01, 0x19, 0xae, 0xaa, 0x9a, 0xb3, 0x87, 0x90, 0x92, 0x73, - 0x16, 0x85, 0x5c, 0x8d, 0xd8, 0xa9, 0x29, 0xb6, 0x80, 0xfd, 0xef, 0xff, 0x7a, 0xb2, 0xfe, 0xa1, - 0x41, 0x7a, 0xb4, 0x74, 0xe4, 0x10, 0x66, 0x7d, 0x0c, 0x1c, 0xaf, 0x2d, 0xd8, 0x92, 0xde, 0xde, - 0x39, 0xc7, 0x39, 0xe4, 0x6b, 0x02, 0x89, 0x2a, 0xc4, 0xdc, 0xd7, 0x1a, 0xcc, 0x4a, 0x11, 0x59, - 0x03, 0x52, 0x33, 0xe8, 0x7e, 0xb5, 0x6c, 0x36, 0x2b, 0xf5, 0x9a, 0x51, 0xda, 0xdf, 0xdd, 0x37, - 0xca, 0x99, 0x57, 0xc8, 0x32, 0x2c, 0x2a, 0xf9, 0x96, 0xf9, 0x71, 0xb5, 0x49, 0x33, 0x1a, 0x21, - 0x90, 0x56, 0xa2, 0x77, 0x85, 0xa8, 0x9e, 0x89, 0x91, 0x0c, 0xa4, 0xfa, 0xdb, 0xca, 0xc5, 0xcf, - 0x32, 0xf1, 0x11, 0xc3, 0x4f, 0x0d, 0xe3, 0x5e, 0x66, 0x66, 0xc8, 0xf0, 0xc6, 0x75, 0xbe, 0xab, - 0x9e, 0x49, 0xe4, 0x3c, 0x58, 0x3d, 0x8d, 0x91, 0x44, 0x87, 0x39, 0xc5, 0xc9, 0xa8, 0x0d, 0xd4, - 0x92, 0x6b, 0x4e, 0x30, 0x08, 0xf9, 0x1b, 0x27, 0x2e, 0x35, 0x6a, 0x49, 0xae, 0xc2, 0x62, 0x80, - 0xa1, 0xd7, 0x0b, 0x5a, 0x68, 0xb2, 0x27, 0xbe, 0x64, 0x6e, 0x92, 0xa6, 0x22, 0x61, 0xe3, 0x89, - 0x8f, 0xb9, 0xdb, 0xb0, 0x52, 0xc6, 0x0e, 0x32, 0x9c, 0xb4, 0x35, 0x73, 0x6b, 0xb0, 0x3a, 0x6a, - 0x29, 0xe9, 0xb7, 0xd9, 0x83, 0x95, 0x53, 0x9e, 0x3d, 0xe4, 0x4d, 0xb8, 0x62, 0x50, 0x5a, 0xa5, - 0x66, 0xa9, 0xda, 0xac, 0x34, 0xcc, 0xe2, 0xc1, 0xfe, 0x5e, 0xe5, 0xbe, 0x51, 0x69, 0x8c, 0x15, - 0xf8, 0x32, 0x5c, 0x1c, 0xa8, 0x8c, 0x07, 0xcd, 0xe2, 0x81, 0x49, 0xab, 0xcd, 0x4a, 0xd9, 0x28, - 0x67, 0x34, 0x92, 0x85, 0xb5, 0x71, 0x65, 0xb1, 0x61, 0x1a, 0x95, 0x72, 0x26, 0xb6, 0xf9, 0x6c, - 0xf8, 0x12, 0xae, 0xaa, 0x77, 0xcc, 0xc5, 0x3d, 0x5a, 0x6d, 0xd6, 0xcc, 0x2a, 0x2d, 0x1b, 0x74, - 0xcc, 0x51, 0x1a, 0x40, 0x46, 0x52, 0x36, 0xea, 0x25, 0x79, 0x8c, 0x07, 0xc5, 0x7a, 0xc3, 0xac, - 0x1b, 0x46, 0x45, 0xca, 0xc4, 0x31, 0x96, 0xa8, 0x51, 0x6c, 0x18, 0x65, 0x29, 0x89, 0x93, 0x8b, - 0xb0, 0x52, 0xdc, 0xdd, 0x35, 0x4a, 0x5c, 0xd4, 0xac, 0x1b, 0xb4, 0x2e, 0x15, 0x33, 0xdb, 0x7f, - 0xcd, 0xc0, 0xb2, 0xf0, 0x2f, 0xee, 0x7f, 0x75, 0x86, 0xe4, 0x17, 0x0d, 0xd2, 0xa3, 0xaf, 0x21, - 0x32, 0x19, 0x61, 0x4f, 0x7d, 0xe8, 0x67, 0x4b, 0xe7, 0xc2, 0x90, 0xe7, 0x94, 0xbb, 0xf9, 0xcd, - 0xf3, 0xdf, 0xbf, 0x8b, 0x15, 0xc8, 0x3b, 0xfd, 0xff, 0x94, 0xaf, 0x86, 0x8f, 0xfc, 0x03, 0xb5, - 0x08, 0x0b, 0x9b, 0xcf, 0x0a, 0xf6, 0x20, 0xfe, 0x9f, 0x34, 0x80, 0xc1, 0xd0, 0x21, 0x1f, 0x4e, - 0x1c, 0xca, 0x08, 0xd1, 0xb2, 0x1f, 0x4d, 0x6d, 0xaf, 0xd2, 0xd8, 0x12, 0x69, 0x5c, 0x23, 0x6f, - 0xbf, 0x44, 0x1a, 0x72, 0x20, 0x92, 0x9f, 0x35, 0x48, 0x0d, 0x53, 0x97, 0x4c, 0xf6, 0xa8, 0x3f, - 0xa5, 0x5f, 0xb2, 0xc5, 0x73, 0x20, 0x8c, 0x26, 0xb2, 0xf9, 0xf2, 0x89, 0xec, 0xfc, 0xaa, 0x01, - 0xff, 0xb9, 0x9c, 0xc4, 0xf7, 0xce, 0xda, 0x0b, 0x2c, 0xad, 0xf1, 0x41, 0x5c, 0xd3, 0x0e, 0x1f, - 0x2a, 0x18, 0xdb, 0xeb, 0x58, 0xae, 0x9d, 0xf7, 0x02, 0xbb, 0x60, 0xa3, 0x2b, 0xc6, 0x74, 0x41, - 0xaa, 0x2c, 0xdf, 0x09, 0x5f, 0xea, 0x97, 0xf7, 0xce, 0x29, 0xba, 0x1f, 0x63, 0x57, 0xf7, 0xa4, - 0x83, 0x12, 0x57, 0xca, 0x2b, 0x86, 0xf6, 0xe3, 0xfb, 0x64, 0x6b, 0x87, 0x5b, 0x1e, 0xcd, 0x0a, - 0x87, 0x37, 0xfe, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xe9, 0x2a, 0x59, 0xfa, 0xf4, 0x0f, 0x00, 0x00, + // 1328 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x57, 0xcd, 0x6f, 0x1b, 0x45, + 0x14, 0x67, 0xed, 0x38, 0x89, 0x9f, 0x1d, 0xc7, 0x99, 0xa4, 0xe9, 0xd6, 0xe5, 0x23, 0x75, 0x05, + 0x0a, 0xa9, 0xb0, 0x9b, 0x54, 0xa5, 0x45, 0xe5, 0xa3, 0x8e, 0xbd, 0x09, 0x51, 0x53, 0xdb, 0x1d, + 0xdb, 0x45, 0x44, 0x55, 0x57, 0x1b, 0xfb, 0xc5, 0x5d, 0xb0, 0x77, 0x97, 0xdd, 0x71, 0xd4, 0x16, + 0x55, 0x42, 0xdc, 0x38, 0xc3, 0x8d, 0xff, 0x80, 0xbf, 0x82, 0x13, 0x07, 0x4e, 0x48, 0xbd, 0x73, + 0xe2, 0x0e, 0xe2, 0xc2, 0x15, 0xcd, 0xc7, 0xfa, 0xab, 0x11, 0xa9, 0x1d, 0x84, 0xb8, 0xed, 0xbc, + 0x37, 0xef, 0xf7, 0x3e, 0xe6, 0xf7, 0xde, 0xcc, 0x82, 0xd1, 0x76, 0xdd, 0x76, 0x07, 0xf3, 0x2d, + 0x3c, 0x66, 0xae, 0xdb, 0x09, 0xf2, 0xcd, 0x8e, 0xdb, 0x6b, 0xa1, 0xef, 0xbb, 0xbe, 0x8f, 0x9e, + 0xeb, 0x33, 0xdb, 0x69, 0xe7, 0x8f, 0x37, 0x0f, 0x91, 0x59, 0x9b, 0x79, 0x21, 0x36, 0x03, 0x66, + 0xb1, 0xc0, 0x0c, 0xd0, 0x3f, 0xb6, 0x9b, 0x98, 0xf3, 0x7c, 0x97, 0xb9, 0xe4, 0x8a, 0x84, 0xc9, + 0x85, 0x30, 0xb9, 0x13, 0x60, 0x72, 0x0a, 0x26, 0xf3, 0xaa, 0xf2, 0x69, 0x79, 0x76, 0xde, 0x72, + 0x1c, 0x97, 0x59, 0xcc, 0x76, 0x9d, 0x40, 0x42, 0x65, 0x6e, 0x4e, 0x12, 0x51, 0xd3, 0xed, 0x76, + 0x5d, 0x47, 0x59, 0xbe, 0xae, 0x2c, 0xc5, 0xea, 0xb0, 0x77, 0x94, 0x6f, 0xf5, 0x7c, 0x01, 0xad, + 0xf4, 0x6f, 0x8c, 0xeb, 0x99, 0xdd, 0xc5, 0x80, 0x59, 0x5d, 0x4f, 0x6e, 0xc8, 0x7e, 0x1f, 0x83, + 0x73, 0xfb, 0x76, 0xc0, 0x76, 0x7d, 0xb7, 0xe7, 0xd5, 0x78, 0x9a, 0x14, 0xbf, 0xe8, 0x61, 0xc0, + 0xc8, 0x25, 0x48, 0x7a, 0xbe, 0xfb, 0x19, 0x36, 0x99, 0xe9, 0x58, 0x5d, 0xd4, 0xb5, 0x35, 0x6d, + 0x3d, 0x4e, 0x13, 0x4a, 0x56, 0xb6, 0xba, 0x48, 0x2e, 0xc0, 0x7c, 0x9b, 0xdb, 0x99, 0x76, 0x4b, + 0x8f, 0xac, 0x45, 0xd7, 0xe3, 0x74, 0x4e, 0xac, 0xf7, 0x5a, 0xe4, 0x11, 0xa4, 0x54, 0xb9, 0xcc, + 0x23, 0xbb, 0xc3, 0xd0, 0xd7, 0xa3, 0x6b, 0xda, 0x7a, 0x62, 0xab, 0x90, 0x9b, 0xa0, 0x6c, 0xb9, + 0x9a, 0x84, 0x28, 0xba, 0x0e, 0xc3, 0xc7, 0x6c, 0x47, 0x00, 0xd1, 0x05, 0x05, 0x2c, 0x97, 0xe4, + 0x00, 0x80, 0x27, 0x65, 0xfa, 0x96, 0xd3, 0x46, 0x3d, 0x26, 0xbc, 0xdc, 0x9a, 0xc8, 0xcb, 0xbd, + 0x1e, 0xfa, 0x4f, 0xea, 0x76, 0x17, 0x29, 0x87, 0xa0, 0x71, 0x16, 0x7e, 0x92, 0x3b, 0xb0, 0xc2, + 0x17, 0x2d, 0xb3, 0xe9, 0xf6, 0x1c, 0x66, 0x86, 0xc5, 0xd5, 0x67, 0x85, 0x97, 0x0b, 0xa1, 0x97, + 0xb0, 0xba, 0xb9, 0x92, 0xda, 0x40, 0x89, 0x30, 0x2b, 0x72, 0xab, 0x50, 0x46, 0x1e, 0x42, 0xdc, + 0xea, 0xd8, 0x6d, 0xa7, 0x8b, 0x0e, 0xd3, 0xe7, 0xd6, 0xb4, 0xf5, 0xd4, 0xd6, 0xed, 0x89, 0xe2, + 0xac, 0xf7, 0x31, 0x0b, 0x21, 0x0e, 0x1d, 0x40, 0x92, 0x02, 0xa4, 0xfa, 0x0b, 0x93, 0xfb, 0xd7, + 0xe7, 0x45, 0x98, 0x99, 0x17, 0xc2, 0xac, 0x87, 0x24, 0xa0, 0x0b, 0x7d, 0x0b, 0x2e, 0x23, 0x14, + 0x62, 0xae, 0xdf, 0x42, 0x5f, 0x8f, 0x8b, 0xf0, 0xde, 0x9f, 0x28, 0x3c, 0x83, 0x8b, 0x05, 0x8f, + 0x2a, 0x1c, 0x83, 0x4a, 0x28, 0x72, 0x11, 0xe2, 0x9e, 0xd5, 0x46, 0x33, 0xb0, 0x9f, 0xa2, 0x9e, + 0x58, 0xd3, 0xd6, 0x63, 0x74, 0x9e, 0x0b, 0x6a, 0xf6, 0x53, 0x24, 0xaf, 0x01, 0x08, 0x25, 0x73, + 0x3f, 0x47, 0x47, 0x4f, 0x0a, 0x8a, 0x89, 0xed, 0x75, 0x2e, 0xc8, 0xfe, 0xa1, 0xc1, 0xea, 0x38, + 0x3b, 0x03, 0xcf, 0x75, 0x02, 0x24, 0x8f, 0x60, 0x49, 0xf6, 0xa6, 0x64, 0xa0, 0xe8, 0x50, 0x5d, + 0x5b, 0x8b, 0xae, 0x27, 0xa6, 0x0e, 0x5b, 0x3a, 0x58, 0xc4, 0x51, 0x01, 0x79, 0x0b, 0x16, 0x1d, + 0x7c, 0xcc, 0xcc, 0xa1, 0x40, 0x23, 0x22, 0xd0, 0x05, 0x2e, 0xae, 0x86, 0xc1, 0x92, 0x12, 0xa4, + 0x07, 0x44, 0x34, 0x0f, 0xb1, 0x6d, 0x3b, 0xfa, 0xcc, 0xa9, 0x27, 0x90, 0xea, 0xb3, 0x6d, 0x9b, + 0x5b, 0x64, 0xbf, 0x89, 0xc1, 0xe2, 0x58, 0x48, 0xe4, 0x2e, 0xc4, 0x44, 0x96, 0xa2, 0x07, 0x13, + 0x5b, 0x37, 0xa6, 0xcc, 0x8f, 0x4a, 0x14, 0xb2, 0x02, 0x31, 0xc1, 0x67, 0x91, 0x46, 0x94, 0xca, + 0x05, 0xb9, 0x0a, 0x2b, 0xd6, 0xd1, 0x11, 0x36, 0x19, 0xb6, 0xcc, 0x5e, 0x80, 0x7e, 0x20, 0x49, + 0x2f, 0xfa, 0x36, 0x4a, 0x49, 0xa8, 0x6b, 0x70, 0x95, 0x20, 0x21, 0x39, 0x80, 0xe4, 0x50, 0x77, + 0x04, 0xfa, 0x8c, 0xa8, 0xfe, 0x8d, 0x29, 0x39, 0x4d, 0x13, 0x83, 0x9e, 0x09, 0xc8, 0x36, 0x2c, + 0x1e, 0xd9, 0x7e, 0xc0, 0xcc, 0x00, 0xd1, 0x91, 0x6c, 0x8e, 0x9d, 0xce, 0x66, 0x61, 0x52, 0x43, + 0x74, 0x04, 0x9b, 0x6f, 0x43, 0xaa, 0x63, 0x8d, 0x40, 0xcc, 0x9e, 0x0a, 0x91, 0xe4, 0x16, 0x7d, + 0x84, 0x47, 0xb0, 0xd4, 0xaf, 0x89, 0x9a, 0x3a, 0x81, 0x3e, 0x27, 0xd2, 0xbc, 0x75, 0x86, 0x41, + 0x46, 0xd3, 0x21, 0xaa, 0x92, 0x07, 0x64, 0x0b, 0xce, 0x39, 0xbd, 0xae, 0xf9, 0xa2, 0xb7, 0x79, + 0xd1, 0x31, 0xcb, 0x4e, 0xaf, 0x5b, 0x18, 0xb7, 0x31, 0x21, 0xe5, 0xa3, 0xe7, 0x63, 0x80, 0x0e, + 0xbf, 0x4f, 0x8e, 0x51, 0xb4, 0xed, 0x54, 0xfc, 0x30, 0x8e, 0xf9, 0x30, 0x19, 0x83, 0xcb, 0x7e, + 0xa7, 0x01, 0x0c, 0x0e, 0x68, 0xc0, 0x1b, 0x6d, 0x98, 0x37, 0xef, 0x01, 0x04, 0xcc, 0xf2, 0xd5, + 0xc8, 0x89, 0x9c, 0x5a, 0xe1, 0xb8, 0xd8, 0x2d, 0xca, 0x7b, 0x1d, 0xe6, 0xd1, 0x69, 0x49, 0xc3, + 0xe8, 0xa9, 0x86, 0x73, 0xe8, 0xb4, 0xf8, 0x2a, 0xfb, 0x3c, 0x02, 0x4b, 0x7c, 0x2a, 0x88, 0xa0, + 0xa7, 0xbf, 0xaf, 0xb4, 0xff, 0xc3, 0x7d, 0x35, 0xf3, 0xaf, 0xde, 0x57, 0x23, 0xb3, 0x76, 0xf6, + 0x1f, 0x67, 0xed, 0xdc, 0xf8, 0xac, 0xfd, 0x55, 0x03, 0x32, 0x5c, 0x55, 0x35, 0x67, 0x0f, 0x20, + 0x29, 0xe7, 0x2c, 0x0a, 0xb9, 0x1a, 0xb1, 0x53, 0x53, 0x2c, 0x81, 0xfd, 0xef, 0xff, 0x7a, 0xb2, + 0xfe, 0xae, 0x41, 0x6a, 0xb4, 0x74, 0xe4, 0x00, 0x66, 0x3d, 0xf4, 0x6d, 0xb7, 0x25, 0xd8, 0x92, + 0xda, 0xda, 0x3e, 0xc3, 0x39, 0xe4, 0xaa, 0x02, 0x89, 0x2a, 0xc4, 0xec, 0x57, 0x1a, 0xcc, 0x4a, + 0x11, 0x59, 0x05, 0x52, 0x35, 0xe8, 0x5e, 0xa5, 0x64, 0x36, 0xca, 0xb5, 0xaa, 0x51, 0xdc, 0xdb, + 0xd9, 0x33, 0x4a, 0xe9, 0x57, 0xc8, 0x12, 0x2c, 0x28, 0xf9, 0xa6, 0xf9, 0x71, 0xa5, 0x41, 0xd3, + 0x1a, 0x21, 0x90, 0x52, 0xa2, 0x77, 0x85, 0xa8, 0x96, 0x8e, 0x90, 0x34, 0x24, 0xfb, 0xdb, 0x4a, + 0x85, 0x4f, 0xd3, 0xd1, 0x11, 0xc3, 0x4f, 0x0c, 0xe3, 0x4e, 0x7a, 0x66, 0xc8, 0xf0, 0xda, 0x55, + 0xbe, 0xab, 0x96, 0x8e, 0x65, 0x5d, 0x58, 0x39, 0x89, 0x91, 0x44, 0x87, 0x39, 0xc5, 0xc9, 0xb0, + 0x0d, 0xd4, 0x92, 0x6b, 0x8e, 0xd1, 0x0f, 0xf8, 0x1b, 0x27, 0x2a, 0x35, 0x6a, 0x49, 0x2e, 0xc3, + 0x82, 0x8f, 0x81, 0xdb, 0xf3, 0x9b, 0x68, 0xb2, 0x27, 0x9e, 0x64, 0x6e, 0x9c, 0x26, 0x43, 0x61, + 0xfd, 0x89, 0x87, 0xd9, 0x9b, 0xb0, 0x5c, 0xc2, 0x0e, 0x32, 0x9c, 0xb4, 0x35, 0xb3, 0xab, 0xb0, + 0x32, 0x6a, 0x29, 0xe9, 0xb7, 0xd1, 0x83, 0xe5, 0x13, 0x9e, 0x3d, 0xe4, 0x4d, 0xb8, 0x64, 0x50, + 0x5a, 0xa1, 0x66, 0xb1, 0xd2, 0x28, 0xd7, 0xcd, 0xc2, 0xfe, 0xde, 0x6e, 0xf9, 0xae, 0x51, 0xae, + 0x8f, 0x15, 0xf8, 0x22, 0x9c, 0x1f, 0xa8, 0x8c, 0x7b, 0x8d, 0xc2, 0xbe, 0x49, 0x2b, 0x8d, 0x72, + 0xc9, 0x28, 0xa5, 0x35, 0x92, 0x81, 0xd5, 0x71, 0x65, 0xa1, 0x6e, 0x1a, 0xe5, 0x52, 0x3a, 0xb2, + 0xf1, 0x6c, 0xf8, 0x12, 0xae, 0xa8, 0x77, 0xcc, 0xf9, 0x5d, 0x5a, 0x69, 0x54, 0xcd, 0x0a, 0x2d, + 0x19, 0x74, 0xcc, 0x51, 0x0a, 0x40, 0x46, 0x52, 0x32, 0x6a, 0x45, 0x79, 0x8c, 0xfb, 0x85, 0x5a, + 0xdd, 0xac, 0x19, 0x46, 0x59, 0xca, 0xc4, 0x31, 0x16, 0xa9, 0x51, 0xa8, 0x1b, 0x25, 0x29, 0x89, + 0x92, 0xf3, 0xb0, 0x5c, 0xd8, 0xd9, 0x31, 0x8a, 0x5c, 0xd4, 0xa8, 0x19, 0xb4, 0x26, 0x15, 0x33, + 0x5b, 0x7f, 0xce, 0xc0, 0x92, 0xf0, 0x2f, 0xee, 0x7f, 0x75, 0x86, 0xe4, 0x17, 0x0d, 0x52, 0xa3, + 0xaf, 0x21, 0x32, 0x19, 0x61, 0x4f, 0x7c, 0xe8, 0x67, 0x8a, 0x67, 0xc2, 0x90, 0xe7, 0x94, 0xbd, + 0xfe, 0xf5, 0xf3, 0xdf, 0xbe, 0x8d, 0xe4, 0xc9, 0x3b, 0xfd, 0xff, 0x94, 0x2f, 0x87, 0x8f, 0xfc, + 0x03, 0xb5, 0x08, 0xf2, 0x1b, 0xcf, 0xf2, 0xed, 0x41, 0xfc, 0x3f, 0x6a, 0x00, 0x83, 0xa1, 0x43, + 0x3e, 0x9c, 0x38, 0x94, 0x11, 0xa2, 0x65, 0x3e, 0x9a, 0xda, 0x5e, 0xa5, 0xb1, 0x29, 0xd2, 0xb8, + 0x42, 0xde, 0x7e, 0x89, 0x34, 0xe4, 0x40, 0x24, 0x3f, 0x69, 0x90, 0x1c, 0xa6, 0x2e, 0x99, 0xec, + 0x51, 0x7f, 0x42, 0xbf, 0x64, 0x0a, 0x67, 0x40, 0x18, 0x4d, 0x64, 0xe3, 0xe5, 0x13, 0xd9, 0xfe, + 0x4b, 0x03, 0xfe, 0x73, 0x39, 0x89, 0xef, 0xed, 0xd5, 0x17, 0x58, 0x5a, 0xe5, 0x83, 0xb8, 0xaa, + 0x1d, 0x3c, 0x54, 0x30, 0x6d, 0xb7, 0x63, 0x39, 0xed, 0x9c, 0xeb, 0xb7, 0xf3, 0x6d, 0x74, 0xc4, + 0x98, 0xce, 0x4b, 0x95, 0xe5, 0xd9, 0xc1, 0x4b, 0xfd, 0xf2, 0xde, 0x3a, 0x41, 0xf7, 0x43, 0xe4, + 0xf2, 0xae, 0x74, 0x50, 0xe4, 0x4a, 0x79, 0xc5, 0xd0, 0x7e, 0x7c, 0xf7, 0x37, 0xb7, 0xb9, 0xe5, + 0xcf, 0xe1, 0xae, 0x07, 0x62, 0xd7, 0x83, 0xd1, 0x5d, 0x0f, 0xee, 0x4b, 0xfc, 0xc3, 0x59, 0x11, + 0xd6, 0xb5, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0xb8, 0x90, 0xe3, 0x06, 0x1a, 0x10, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1/report_errors_service.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1/report_errors_service.pb.go index e7039c0..326ee8f 100644 --- a/vendor/google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1/report_errors_service.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/devtools/clouderrorreporting/v1beta1/report_errors_service.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/devtools/clouderrorreporting/v1beta1/report_errors_service.proto -// DO NOT EDIT! package clouderrorreporting @@ -209,35 +208,36 @@ func init() { } var fileDescriptor3 = []byte{ - // 475 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x93, 0xcd, 0x6e, 0xd3, 0x40, - 0x10, 0xc7, 0xe5, 0xf0, 0x51, 0x75, 0x83, 0x00, 0x2d, 0x07, 0x2c, 0x0b, 0x89, 0x12, 0x2e, 0x15, - 0x48, 0x5e, 0x12, 0x2e, 0xa4, 0x15, 0xaa, 0x94, 0x12, 0xf5, 0x86, 0x2a, 0x17, 0x38, 0x70, 0xc0, - 0xda, 0x38, 0x83, 0x65, 0x14, 0xef, 0x98, 0xdd, 0x8d, 0x85, 0x84, 0xb8, 0xf0, 0x0a, 0x7d, 0x05, - 0x4e, 0xbc, 0x4e, 0x5f, 0x80, 0x03, 0x0f, 0xc1, 0x11, 0xed, 0x57, 0x14, 0x48, 0x0e, 0x98, 0x1e, - 0xc7, 0xe3, 0xf9, 0xfd, 0xff, 0xf3, 0xb1, 0xe4, 0xa4, 0x44, 0x2c, 0x17, 0xc0, 0xe6, 0xd0, 0x6a, - 0xc4, 0x85, 0x62, 0xc5, 0x02, 0x97, 0x73, 0x90, 0x12, 0xa5, 0x84, 0x06, 0xa5, 0xae, 0x44, 0xc9, - 0xda, 0xe1, 0x0c, 0x34, 0x1f, 0x32, 0xf7, 0x25, 0xb7, 0x59, 0x95, 0x2b, 0x90, 0x6d, 0x55, 0x40, - 0xda, 0x48, 0xd4, 0x48, 0x1f, 0x3b, 0x50, 0x1a, 0x40, 0xe9, 0x16, 0x50, 0xea, 0x41, 0xc9, 0x3d, - 0xaf, 0xca, 0x9b, 0x8a, 0x71, 0x21, 0x50, 0x73, 0x5d, 0xa1, 0x50, 0x0e, 0x95, 0x3c, 0xeb, 0xe2, - 0xa9, 0xc0, 0xba, 0x46, 0xe1, 0x2b, 0xef, 0xfb, 0x4a, 0x1b, 0xcd, 0x96, 0xef, 0x99, 0xae, 0x6a, - 0x50, 0x9a, 0xd7, 0x8d, 0xfb, 0x61, 0x70, 0x1e, 0x91, 0xbb, 0x99, 0x65, 0x4c, 0x0d, 0x6e, 0xda, - 0x82, 0xd0, 0x19, 0x7c, 0x5c, 0x82, 0xd2, 0xf4, 0x01, 0xb9, 0xd1, 0x48, 0xfc, 0x00, 0x85, 0xce, - 0x05, 0xaf, 0x21, 0x8e, 0xf6, 0xa2, 0xfd, 0xdd, 0xac, 0xef, 0xbf, 0xbd, 0xe4, 0x35, 0xd0, 0xd7, - 0xe4, 0x1a, 0x98, 0x92, 0xb8, 0xb7, 0x17, 0xed, 0xf7, 0x47, 0x47, 0x69, 0x87, 0xa6, 0x53, 0xa7, - 0x0b, 0xf3, 0x35, 0x65, 0x47, 0x1b, 0x24, 0x24, 0xde, 0x34, 0xa5, 0x1a, 0x14, 0x0a, 0x06, 0xdf, - 0x7a, 0x84, 0x6e, 0x56, 0xd2, 0x31, 0x21, 0xb6, 0x36, 0x37, 0x1d, 0x5a, 0xab, 0xfd, 0x51, 0x12, - 0xec, 0x84, 0xf6, 0xd3, 0x57, 0xa1, 0xfd, 0x6c, 0xd7, 0xfe, 0x6d, 0x62, 0x3a, 0x27, 0xb7, 0xfc, - 0xea, 0xf2, 0x02, 0x85, 0x86, 0x4f, 0xa1, 0x9d, 0xc3, 0x4e, 0xed, 0x9c, 0x39, 0xc6, 0xb1, 0x43, - 0x64, 0x37, 0xd5, 0x1f, 0x31, 0x8d, 0xc9, 0x4e, 0x0d, 0x4a, 0xf1, 0x12, 0xe2, 0x2b, 0x76, 0x90, - 0x21, 0xa4, 0x67, 0x64, 0x27, 0xe8, 0x5e, 0xb5, 0xba, 0xe3, 0x4e, 0xba, 0x76, 0x08, 0x41, 0x35, - 0x90, 0x46, 0xbf, 0x22, 0x72, 0x67, 0x6d, 0x86, 0xca, 0xbb, 0xa3, 0x3f, 0x22, 0x72, 0xfb, 0xef, - 0xd9, 0xd2, 0x17, 0xff, 0xb1, 0xb7, 0x8d, 0x7b, 0x49, 0xa6, 0x97, 0xa4, 0xf8, 0x05, 0x1f, 0x7d, - 0xbd, 0xf8, 0x79, 0xde, 0x1b, 0x0f, 0x9e, 0xac, 0x4e, 0xfa, 0xf3, 0xfa, 0x19, 0x3e, 0xf7, 0x81, - 0x62, 0x8f, 0xbe, 0x30, 0xbb, 0x44, 0x75, 0xe0, 0xe8, 0x07, 0xee, 0x7a, 0x26, 0x17, 0x11, 0x31, - 0xaf, 0xa0, 0x8b, 0x9b, 0x49, 0xbc, 0x65, 0x56, 0xa7, 0xe6, 0x6a, 0x4e, 0xa3, 0xb7, 0xef, 0x3c, - 0xa8, 0xc4, 0x05, 0x17, 0x65, 0x8a, 0xb2, 0x64, 0x25, 0x08, 0x7b, 0x53, 0xcc, 0xa5, 0x78, 0x53, - 0xa9, 0x7f, 0x7a, 0x9d, 0x87, 0x5b, 0x72, 0xdf, 0x7b, 0x0f, 0x4f, 0x9c, 0xc0, 0xb1, 0x49, 0xba, - 0x7d, 0x66, 0x2b, 0x87, 0x6f, 0x86, 0x13, 0x53, 0x39, 0xbb, 0x6e, 0x05, 0x9f, 0xfe, 0x0e, 0x00, - 0x00, 0xff, 0xff, 0x9d, 0xe5, 0xc6, 0x91, 0xa1, 0x04, 0x00, 0x00, + // 490 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x93, 0xcd, 0x8a, 0x13, 0x41, + 0x10, 0xc7, 0x99, 0xf8, 0xb1, 0x6c, 0x47, 0x54, 0xda, 0x83, 0xc3, 0x20, 0xb8, 0xc6, 0xcb, 0xa2, + 0x30, 0x6d, 0xe2, 0xc5, 0xec, 0x22, 0x0b, 0x59, 0xc3, 0xde, 0x64, 0x99, 0xd5, 0x3d, 0x48, 0x70, + 0xe8, 0x4c, 0xca, 0x61, 0x24, 0xd3, 0x35, 0x76, 0x77, 0x82, 0x20, 0x5e, 0x7c, 0x85, 0x7d, 0x05, + 0x4f, 0x3e, 0x8a, 0x57, 0x5f, 0xc0, 0x83, 0x0f, 0xa1, 0x37, 0xe9, 0xaf, 0x25, 0x6b, 0x72, 0x70, + 0xf4, 0x58, 0xd3, 0x55, 0xbf, 0xff, 0xbf, 0x3e, 0x86, 0x1c, 0x95, 0x88, 0xe5, 0x1c, 0xd8, 0x0c, + 0x96, 0x1a, 0x71, 0xae, 0x58, 0x31, 0xc7, 0xc5, 0x0c, 0xa4, 0x44, 0x29, 0xa1, 0x41, 0xa9, 0x2b, + 0x51, 0xb2, 0x65, 0x7f, 0x0a, 0x9a, 0xf7, 0x99, 0xfb, 0x92, 0xdb, 0x57, 0x95, 0x2b, 0x90, 0xcb, + 0xaa, 0x80, 0xb4, 0x91, 0xa8, 0x91, 0x3e, 0x74, 0xa0, 0x34, 0x80, 0xd2, 0x0d, 0xa0, 0xd4, 0x83, + 0x92, 0x3b, 0x5e, 0x95, 0x37, 0x15, 0xe3, 0x42, 0xa0, 0xe6, 0xba, 0x42, 0xa1, 0x1c, 0x2a, 0x79, + 0xd2, 0xc6, 0x53, 0x81, 0x75, 0x8d, 0xc2, 0x57, 0xde, 0xf5, 0x95, 0x36, 0x9a, 0x2e, 0xde, 0x30, + 0x5d, 0xd5, 0xa0, 0x34, 0xaf, 0x1b, 0x97, 0xd0, 0x3b, 0x8b, 0xc8, 0xed, 0xcc, 0x32, 0xc6, 0x06, + 0x37, 0x5e, 0x82, 0xd0, 0x19, 0xbc, 0x5b, 0x80, 0xd2, 0xf4, 0x1e, 0xb9, 0xd6, 0x48, 0x7c, 0x0b, + 0x85, 0xce, 0x05, 0xaf, 0x21, 0x8e, 0x76, 0xa2, 0xdd, 0xed, 0xac, 0xeb, 0xbf, 0x3d, 0xe7, 0x35, + 0xd0, 0x97, 0xe4, 0x0a, 0x98, 0x92, 0xb8, 0xb3, 0x13, 0xed, 0x76, 0x07, 0x07, 0x69, 0x8b, 0xa6, + 0x53, 0xa7, 0x0b, 0xb3, 0x15, 0x65, 0x47, 0xeb, 0x25, 0x24, 0x5e, 0x37, 0xa5, 0x1a, 0x14, 0x0a, + 0x7a, 0x9f, 0x3b, 0x84, 0xae, 0x57, 0xd2, 0x21, 0x21, 0xb6, 0x36, 0x37, 0x1d, 0x5a, 0xab, 0xdd, + 0x41, 0x12, 0xec, 0x84, 0xf6, 0xd3, 0x17, 0xa1, 0xfd, 0x6c, 0xdb, 0x66, 0x9b, 0x98, 0xce, 0xc8, + 0x0d, 0xbf, 0xba, 0xbc, 0x40, 0xa1, 0xe1, 0x7d, 0x68, 0x67, 0xbf, 0x55, 0x3b, 0x27, 0x8e, 0x71, + 0xe8, 0x10, 0xd9, 0x75, 0x75, 0x21, 0xa6, 0x31, 0xd9, 0xaa, 0x41, 0x29, 0x5e, 0x42, 0x7c, 0xc9, + 0x0e, 0x32, 0x84, 0xf4, 0x84, 0x6c, 0x05, 0xdd, 0xcb, 0x56, 0x77, 0xd8, 0x4a, 0xd7, 0x0e, 0x21, + 0xa8, 0x06, 0xd2, 0xe0, 0x67, 0x44, 0x6e, 0xad, 0xcc, 0x50, 0x79, 0x77, 0xf4, 0x7b, 0x44, 0x6e, + 0xfe, 0x39, 0x5b, 0xfa, 0xec, 0x1f, 0xf6, 0xb6, 0x76, 0x2f, 0xc9, 0xf8, 0x3f, 0x29, 0x7e, 0xc1, + 0x07, 0x9f, 0xbe, 0xfd, 0x38, 0xeb, 0x0c, 0x7b, 0x8f, 0xce, 0x4f, 0xfa, 0xc3, 0xea, 0x19, 0x3e, + 0xf5, 0x81, 0x62, 0x0f, 0x3e, 0x32, 0xbb, 0x44, 0xb5, 0xe7, 0xe8, 0x7b, 0xee, 0x7a, 0x46, 0xbf, + 0x22, 0x62, 0xfe, 0x82, 0x36, 0x6e, 0x46, 0xf1, 0x86, 0x59, 0x1d, 0x9b, 0xab, 0x39, 0x8e, 0x5e, + 0xbd, 0xf6, 0xa0, 0x12, 0xe7, 0x5c, 0x94, 0x29, 0xca, 0x92, 0x95, 0x20, 0xec, 0x4d, 0x31, 0xf7, + 0xc4, 0x9b, 0x4a, 0xfd, 0xd5, 0xdf, 0xb9, 0xbf, 0xe1, 0xed, 0x4b, 0xe7, 0xfe, 0x91, 0x13, 0x38, + 0x34, 0x8f, 0x6e, 0x9f, 0xd9, 0xb9, 0xc3, 0xd3, 0xfe, 0xc8, 0x54, 0x7e, 0x0d, 0x59, 0x13, 0x9b, + 0x35, 0xb9, 0x98, 0x35, 0x39, 0x75, 0xfc, 0xe9, 0x55, 0x6b, 0xeb, 0xf1, 0xef, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x2c, 0xd1, 0x8e, 0x76, 0xc7, 0x04, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/cloudprofiler/v2/profiler.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/cloudprofiler/v2/profiler.pb.go new file mode 100644 index 0000000..01450fe --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/devtools/cloudprofiler/v2/profiler.pb.go @@ -0,0 +1,469 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/devtools/cloudprofiler/v2/profiler.proto + +/* +Package cloudprofiler is a generated protocol buffer package. + +It is generated from these files: + google/devtools/cloudprofiler/v2/profiler.proto + +It has these top-level messages: + CreateProfileRequest + UpdateProfileRequest + Profile + Deployment +*/ +package cloudprofiler + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/duration" +import _ "github.com/golang/protobuf/ptypes/timestamp" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// ProfileType is type of profiling data. +// NOTE: the enumeration member names are used (in lowercase) as unique string +// identifiers of profile types, so they must not be renamed. +type ProfileType int32 + +const ( + // Unspecified profile type. + ProfileType_PROFILE_TYPE_UNSPECIFIED ProfileType = 0 + // Thread CPU time sampling. + ProfileType_CPU ProfileType = 1 + // Wallclock time sampling. More expensive as stops all threads. + ProfileType_WALL ProfileType = 2 + // Heap allocation sampling. + ProfileType_HEAP ProfileType = 3 + // Single-shot collection of all thread stacks. + ProfileType_THREADS ProfileType = 4 + // Synchronization contention profile. + ProfileType_CONTENTION ProfileType = 5 +) + +var ProfileType_name = map[int32]string{ + 0: "PROFILE_TYPE_UNSPECIFIED", + 1: "CPU", + 2: "WALL", + 3: "HEAP", + 4: "THREADS", + 5: "CONTENTION", +} +var ProfileType_value = map[string]int32{ + "PROFILE_TYPE_UNSPECIFIED": 0, + "CPU": 1, + "WALL": 2, + "HEAP": 3, + "THREADS": 4, + "CONTENTION": 5, +} + +func (x ProfileType) String() string { + return proto.EnumName(ProfileType_name, int32(x)) +} +func (ProfileType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +// CreateProfileRequest describes a profile resource creation request. +// Deployment field must be populated for both online and offline modes. +// For the online mode, profile field is not set and the profile_type specifies +// the list of profile types supported by the agent. The creation call will hang +// until a profile of one of these types needs to be collected. For offline +// mode, profile field must be set, profile_type must be empty, and deployment +// field must be identical to the deployment in the profile. +type CreateProfileRequest struct { + // Deployment details. + Deployment *Deployment `protobuf:"bytes,1,opt,name=deployment" json:"deployment,omitempty"` + // Online mode: One or more profile types that the agent is capable of + // providing. + ProfileType []ProfileType `protobuf:"varint,2,rep,packed,name=profile_type,json=profileType,enum=google.devtools.cloudprofiler.v2.ProfileType" json:"profile_type,omitempty"` + // Offline mode: Contents of the profile to create. + Profile *Profile `protobuf:"bytes,3,opt,name=profile" json:"profile,omitempty"` +} + +func (m *CreateProfileRequest) Reset() { *m = CreateProfileRequest{} } +func (m *CreateProfileRequest) String() string { return proto.CompactTextString(m) } +func (*CreateProfileRequest) ProtoMessage() {} +func (*CreateProfileRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *CreateProfileRequest) GetDeployment() *Deployment { + if m != nil { + return m.Deployment + } + return nil +} + +func (m *CreateProfileRequest) GetProfileType() []ProfileType { + if m != nil { + return m.ProfileType + } + return nil +} + +func (m *CreateProfileRequest) GetProfile() *Profile { + if m != nil { + return m.Profile + } + return nil +} + +// UpdateProfileRequest contains the profile to update. +type UpdateProfileRequest struct { + // Profile to update + Profile *Profile `protobuf:"bytes,1,opt,name=profile" json:"profile,omitempty"` +} + +func (m *UpdateProfileRequest) Reset() { *m = UpdateProfileRequest{} } +func (m *UpdateProfileRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateProfileRequest) ProtoMessage() {} +func (*UpdateProfileRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *UpdateProfileRequest) GetProfile() *Profile { + if m != nil { + return m.Profile + } + return nil +} + +// Profile resource. +type Profile struct { + // Opaque, server-assigned, unique ID for this profile. + // Output only. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Type of profile. + // Input (for the offline mode) or output (for the online mode). + ProfileType ProfileType `protobuf:"varint,2,opt,name=profile_type,json=profileType,enum=google.devtools.cloudprofiler.v2.ProfileType" json:"profile_type,omitempty"` + // Deployment this profile corresponds to. + Deployment *Deployment `protobuf:"bytes,3,opt,name=deployment" json:"deployment,omitempty"` + // Duration of the profiling session. + // Input (for the offline mode) or output (for the online mode). + // The field represents requested profiling duration. It may slightly differ + // from the effective profiling duration, which is recorded in the profile + // data, in case the profiling can't be stopped immediately (e.g. in case + // stopping the profiling is handled asynchronously). + Duration *google_protobuf1.Duration `protobuf:"bytes,4,opt,name=duration" json:"duration,omitempty"` + // Profile bytes, as a gzip compressed serialized proto, the format is + // https://github.com/google/pprof/blob/master/proto/profile.proto. + ProfileBytes []byte `protobuf:"bytes,5,opt,name=profile_bytes,json=profileBytes,proto3" json:"profile_bytes,omitempty"` + // Labels associated to this specific profile. These labels will get merged + // with the deployment labels for the final data set. + // See documentation on deployment labels for validation rules and limits. + // Input only, will not be populated on responses. + Labels map[string]string `protobuf:"bytes,6,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *Profile) Reset() { *m = Profile{} } +func (m *Profile) String() string { return proto.CompactTextString(m) } +func (*Profile) ProtoMessage() {} +func (*Profile) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *Profile) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Profile) GetProfileType() ProfileType { + if m != nil { + return m.ProfileType + } + return ProfileType_PROFILE_TYPE_UNSPECIFIED +} + +func (m *Profile) GetDeployment() *Deployment { + if m != nil { + return m.Deployment + } + return nil +} + +func (m *Profile) GetDuration() *google_protobuf1.Duration { + if m != nil { + return m.Duration + } + return nil +} + +func (m *Profile) GetProfileBytes() []byte { + if m != nil { + return m.ProfileBytes + } + return nil +} + +func (m *Profile) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +// Deployment contains the deployment identification information. +type Deployment struct { + // Project ID is the ID of a cloud project. + // Validation regex: `^[a-z][-a-z0-9:.]{4,61}[a-z0-9]$`. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Target is the service name used to group related deployments: + // * Service name for GAE Flex / Standard. + // * Cluster and container name for GKE. + // * User-specified string for direct GCE profiling (e.g. Java). + // * Job name for Dataflow. + // Validation regex: `^[a-z]([-a-z0-9_.]{0,253}[a-z0-9])?$`. + Target string `protobuf:"bytes,2,opt,name=target" json:"target,omitempty"` + // Labels identify the deployment within the user universe and same target. + // Validation regex for label names: `^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$`. + // Value for an individual label must be <= 512 bytes, the total + // size of all label names and values must be <= 1024 bytes. + // + // Label named "language" can be used to record the programming language of + // the profiled deployment. The standard choices for the value include "java", + // "go", "python", "ruby", "nodejs", "php", "dotnet". + // + // For deployments running on Google Cloud Platform, "zone" or "region" label + // should be present describing the deployment location. An example of a zone + // is "us-central1-a", an example of a region is "us-central1" or + // "us-central". + Labels map[string]string `protobuf:"bytes,3,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *Deployment) Reset() { *m = Deployment{} } +func (m *Deployment) String() string { return proto.CompactTextString(m) } +func (*Deployment) ProtoMessage() {} +func (*Deployment) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *Deployment) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *Deployment) GetTarget() string { + if m != nil { + return m.Target + } + return "" +} + +func (m *Deployment) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +func init() { + proto.RegisterType((*CreateProfileRequest)(nil), "google.devtools.cloudprofiler.v2.CreateProfileRequest") + proto.RegisterType((*UpdateProfileRequest)(nil), "google.devtools.cloudprofiler.v2.UpdateProfileRequest") + proto.RegisterType((*Profile)(nil), "google.devtools.cloudprofiler.v2.Profile") + proto.RegisterType((*Deployment)(nil), "google.devtools.cloudprofiler.v2.Deployment") + proto.RegisterEnum("google.devtools.cloudprofiler.v2.ProfileType", ProfileType_name, ProfileType_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for ProfilerService service + +type ProfilerServiceClient interface { + // CreateProfile creates a new profile resource. + // + // In the online creation mode: + // * The server ensures that the new profiles are created at a constant rate + // per deployment, so the creation request may hang for some time until the + // next profile session is available. + // * The request may fail with ABORTED error if the creation is not + // available within ~1m, the response will indicate the duration of the + // backoff the client should take before attempting creating a profile + // again. The backoff duration is returned in google.rpc.RetryInfo extension + // on the response status. To a gRPC client, the extension will be return as + // a binary-serialized proto in the trailing metadata item named + // "google.rpc.retryinfo-bin". + // + // In the offline creation mode: + // * The client provides the profile to create along with the profile bytes, + // the server records it. + CreateProfile(ctx context.Context, in *CreateProfileRequest, opts ...grpc.CallOption) (*Profile, error) + // UpdateProfile updates the profile bytes and labels on the profile resource + // created in the online mode. + UpdateProfile(ctx context.Context, in *UpdateProfileRequest, opts ...grpc.CallOption) (*Profile, error) +} + +type profilerServiceClient struct { + cc *grpc.ClientConn +} + +func NewProfilerServiceClient(cc *grpc.ClientConn) ProfilerServiceClient { + return &profilerServiceClient{cc} +} + +func (c *profilerServiceClient) CreateProfile(ctx context.Context, in *CreateProfileRequest, opts ...grpc.CallOption) (*Profile, error) { + out := new(Profile) + err := grpc.Invoke(ctx, "/google.devtools.cloudprofiler.v2.ProfilerService/CreateProfile", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *profilerServiceClient) UpdateProfile(ctx context.Context, in *UpdateProfileRequest, opts ...grpc.CallOption) (*Profile, error) { + out := new(Profile) + err := grpc.Invoke(ctx, "/google.devtools.cloudprofiler.v2.ProfilerService/UpdateProfile", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for ProfilerService service + +type ProfilerServiceServer interface { + // CreateProfile creates a new profile resource. + // + // In the online creation mode: + // * The server ensures that the new profiles are created at a constant rate + // per deployment, so the creation request may hang for some time until the + // next profile session is available. + // * The request may fail with ABORTED error if the creation is not + // available within ~1m, the response will indicate the duration of the + // backoff the client should take before attempting creating a profile + // again. The backoff duration is returned in google.rpc.RetryInfo extension + // on the response status. To a gRPC client, the extension will be return as + // a binary-serialized proto in the trailing metadata item named + // "google.rpc.retryinfo-bin". + // + // In the offline creation mode: + // * The client provides the profile to create along with the profile bytes, + // the server records it. + CreateProfile(context.Context, *CreateProfileRequest) (*Profile, error) + // UpdateProfile updates the profile bytes and labels on the profile resource + // created in the online mode. + UpdateProfile(context.Context, *UpdateProfileRequest) (*Profile, error) +} + +func RegisterProfilerServiceServer(s *grpc.Server, srv ProfilerServiceServer) { + s.RegisterService(&_ProfilerService_serviceDesc, srv) +} + +func _ProfilerService_CreateProfile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateProfileRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ProfilerServiceServer).CreateProfile(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.cloudprofiler.v2.ProfilerService/CreateProfile", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProfilerServiceServer).CreateProfile(ctx, req.(*CreateProfileRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ProfilerService_UpdateProfile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateProfileRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ProfilerServiceServer).UpdateProfile(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.cloudprofiler.v2.ProfilerService/UpdateProfile", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProfilerServiceServer).UpdateProfile(ctx, req.(*UpdateProfileRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _ProfilerService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.devtools.cloudprofiler.v2.ProfilerService", + HandlerType: (*ProfilerServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateProfile", + Handler: _ProfilerService_CreateProfile_Handler, + }, + { + MethodName: "UpdateProfile", + Handler: _ProfilerService_UpdateProfile_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/devtools/cloudprofiler/v2/profiler.proto", +} + +func init() { proto.RegisterFile("google/devtools/cloudprofiler/v2/profiler.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 661 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0xcd, 0x6e, 0xd3, 0x40, + 0x10, 0x66, 0xe3, 0x34, 0x69, 0x27, 0x6d, 0xb1, 0x56, 0x15, 0x32, 0x51, 0x81, 0x28, 0x5c, 0x42, + 0x44, 0x6d, 0xc9, 0x55, 0x51, 0x5b, 0xc4, 0xa1, 0x4d, 0x5c, 0x35, 0x52, 0x9a, 0x58, 0x6e, 0x2a, + 0x04, 0x1c, 0x22, 0xa7, 0xde, 0x5a, 0x06, 0xc7, 0x6b, 0xec, 0x4d, 0xa4, 0xa8, 0xea, 0x85, 0x57, + 0xe0, 0x11, 0xb8, 0xc2, 0xbb, 0x20, 0xf1, 0x0a, 0x3c, 0x00, 0x77, 0x2e, 0xc8, 0xf6, 0x3a, 0x3f, + 0x50, 0x94, 0x94, 0x72, 0xdb, 0x99, 0x9d, 0xef, 0xdb, 0x6f, 0x66, 0xd7, 0x9f, 0x41, 0xb1, 0x29, + 0xb5, 0x5d, 0xa2, 0x58, 0x64, 0xc8, 0x28, 0x75, 0x43, 0xe5, 0xdc, 0xa5, 0x03, 0xcb, 0x0f, 0xe8, + 0x85, 0xe3, 0x92, 0x40, 0x19, 0xaa, 0x4a, 0xba, 0x96, 0xfd, 0x80, 0x32, 0x8a, 0x4b, 0x09, 0x40, + 0x4e, 0x01, 0xf2, 0x0c, 0x40, 0x1e, 0xaa, 0xc5, 0x4d, 0x4e, 0x69, 0xfa, 0x8e, 0x62, 0x7a, 0x1e, + 0x65, 0x26, 0x73, 0xa8, 0x17, 0x26, 0xf8, 0xe2, 0x43, 0xbe, 0x1b, 0x47, 0xbd, 0xc1, 0x85, 0x62, + 0x0d, 0x82, 0xb8, 0x80, 0xef, 0x3f, 0xfa, 0x7d, 0x9f, 0x39, 0x7d, 0x12, 0x32, 0xb3, 0xef, 0x27, + 0x05, 0xe5, 0x9f, 0x08, 0x36, 0x6a, 0x01, 0x31, 0x19, 0xd1, 0x93, 0x43, 0x0d, 0xf2, 0x7e, 0x40, + 0x42, 0x86, 0x9b, 0x00, 0x16, 0xf1, 0x5d, 0x3a, 0xea, 0x13, 0x8f, 0x49, 0xa8, 0x84, 0x2a, 0x05, + 0xf5, 0xa9, 0x3c, 0x4f, 0xae, 0x5c, 0x1f, 0x63, 0x8c, 0x29, 0x3c, 0xd6, 0x61, 0x95, 0x57, 0x75, + 0xd9, 0xc8, 0x27, 0x52, 0xa6, 0x24, 0x54, 0xd6, 0xd5, 0xad, 0xf9, 0x7c, 0x5c, 0x55, 0x67, 0xe4, + 0x13, 0xa3, 0xe0, 0x4f, 0x02, 0x5c, 0x83, 0x3c, 0x0f, 0x25, 0x21, 0x16, 0xf7, 0x64, 0x61, 0x32, + 0x23, 0x45, 0x96, 0xdf, 0xc0, 0xc6, 0x99, 0x6f, 0xfd, 0xd9, 0xfc, 0x14, 0x39, 0xfa, 0x67, 0xf2, + 0x4f, 0x02, 0xe4, 0x79, 0x12, 0x63, 0xc8, 0x7a, 0x66, 0x3f, 0x61, 0x5b, 0x31, 0xe2, 0xf5, 0x35, + 0x33, 0x41, 0xb7, 0x9c, 0xc9, 0xec, 0x9d, 0x09, 0xb7, 0xbc, 0xb3, 0x1d, 0x58, 0x4e, 0x5f, 0x93, + 0x94, 0x8d, 0xb9, 0xee, 0xa7, 0x5c, 0xe9, 0x73, 0x92, 0xeb, 0xbc, 0xc0, 0x18, 0x97, 0xe2, 0xc7, + 0xb0, 0x96, 0xb6, 0xd5, 0x1b, 0x31, 0x12, 0x4a, 0x4b, 0x25, 0x54, 0x59, 0x35, 0xd2, 0x5e, 0x0f, + 0xa3, 0x1c, 0x3e, 0x81, 0x9c, 0x6b, 0xf6, 0x88, 0x1b, 0x4a, 0xb9, 0x92, 0x50, 0x29, 0xa8, 0x3b, + 0x0b, 0x77, 0x2d, 0x37, 0x63, 0x9c, 0xe6, 0xb1, 0x60, 0x64, 0x70, 0x92, 0xe2, 0x1e, 0x14, 0xa6, + 0xd2, 0x58, 0x04, 0xe1, 0x1d, 0x19, 0xf1, 0x61, 0x47, 0x4b, 0xbc, 0x01, 0x4b, 0x43, 0xd3, 0x1d, + 0x24, 0x43, 0x5e, 0x31, 0x92, 0x60, 0x3f, 0xb3, 0x8b, 0xca, 0x5f, 0x11, 0xc0, 0x64, 0x00, 0xf8, + 0x01, 0x80, 0x1f, 0xd0, 0xb7, 0xe4, 0x9c, 0x75, 0x1d, 0x8b, 0x33, 0xac, 0xf0, 0x4c, 0xc3, 0xc2, + 0xf7, 0x20, 0xc7, 0xcc, 0xc0, 0x26, 0x8c, 0x13, 0xf1, 0x08, 0xeb, 0xe3, 0x7e, 0x84, 0xb8, 0x9f, + 0xdd, 0x9b, 0x4c, 0xfd, 0x3f, 0xb7, 0x54, 0x25, 0x50, 0x98, 0x7a, 0x22, 0x78, 0x13, 0x24, 0xdd, + 0x68, 0x1f, 0x35, 0x9a, 0x5a, 0xb7, 0xf3, 0x4a, 0xd7, 0xba, 0x67, 0xad, 0x53, 0x5d, 0xab, 0x35, + 0x8e, 0x1a, 0x5a, 0x5d, 0xbc, 0x83, 0xf3, 0x20, 0xd4, 0xf4, 0x33, 0x11, 0xe1, 0x65, 0xc8, 0xbe, + 0x3c, 0x68, 0x36, 0xc5, 0x4c, 0xb4, 0x3a, 0xd6, 0x0e, 0x74, 0x51, 0xc0, 0x05, 0xc8, 0x77, 0x8e, + 0x0d, 0xed, 0xa0, 0x7e, 0x2a, 0x66, 0xf1, 0x3a, 0x40, 0xad, 0xdd, 0xea, 0x68, 0xad, 0x4e, 0xa3, + 0xdd, 0x12, 0x97, 0xd4, 0x1f, 0x19, 0xb8, 0xcb, 0xcf, 0x09, 0x4e, 0x49, 0x30, 0x74, 0xce, 0x09, + 0xfe, 0x8c, 0x60, 0x6d, 0xc6, 0x4e, 0xf0, 0xb3, 0xf9, 0x93, 0xb8, 0xce, 0x7f, 0x8a, 0x8b, 0x7f, + 0x71, 0xe5, 0xdd, 0x0f, 0xdf, 0xbe, 0x7f, 0xcc, 0xa8, 0xe5, 0x2d, 0x6e, 0xb0, 0xd1, 0x5d, 0x85, + 0xca, 0xe5, 0xe4, 0x29, 0xcb, 0x93, 0x2b, 0xbd, 0x4a, 0x1d, 0x38, 0xdc, 0x47, 0x55, 0xfc, 0x05, + 0xc1, 0xda, 0x8c, 0x01, 0x2c, 0x22, 0xf7, 0x3a, 0xc7, 0xb8, 0x89, 0xdc, 0xbd, 0x58, 0xee, 0xb6, + 0x5a, 0x89, 0xe4, 0x5e, 0xf2, 0x0a, 0x39, 0xb2, 0x84, 0x17, 0x63, 0xf1, 0xd5, 0xb1, 0x4c, 0xa5, + 0x7a, 0xb5, 0x9f, 0x5a, 0xca, 0x61, 0xfb, 0xf5, 0x09, 0x3f, 0xc6, 0xa6, 0xae, 0xe9, 0xd9, 0x32, + 0x0d, 0x6c, 0xc5, 0x26, 0x5e, 0xfc, 0x3d, 0xf2, 0x9f, 0x8f, 0xe9, 0x3b, 0xe1, 0xdf, 0x7f, 0x40, + 0xcf, 0x67, 0x12, 0xbd, 0x5c, 0x8c, 0xdc, 0xfe, 0x15, 0x00, 0x00, 0xff, 0xff, 0x83, 0x3f, 0xa6, + 0xd9, 0xb9, 0x06, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/cloudtrace/v1/trace.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/cloudtrace/v1/trace.pb.go index 9e5a80e..9fa5d82 100644 --- a/vendor/google.golang.org/genproto/googleapis/devtools/cloudtrace/v1/trace.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/devtools/cloudtrace/v1/trace.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/devtools/cloudtrace/v1/trace.proto -// DO NOT EDIT! /* Package cloudtrace is a generated protocol buffer package. @@ -181,8 +180,9 @@ type TraceSpan struct { // two spans with the same name may be distinguished using `RPC_CLIENT` // and `RPC_SERVER` to identify queueing latency associated with the span. Kind TraceSpan_SpanKind `protobuf:"varint,2,opt,name=kind,enum=google.devtools.cloudtrace.v1.TraceSpan_SpanKind" json:"kind,omitempty"` - // Name of the trace. The trace name is sanitized and displayed in the - // Stackdriver Trace tool in the Google Developers Console. + // Name of the span. Must be less than 128 bytes. The span name is sanitized + // and displayed in the Stackdriver Trace tool in the + // {% dynamic print site_values.console_name %}. // The name may be a method name or some other per-call site name. // For the same executable and the same call point, a best practice is // to use a consistent name, which makes it easier to correlate @@ -194,7 +194,41 @@ type TraceSpan struct { EndTime *google_protobuf2.Timestamp `protobuf:"bytes,5,opt,name=end_time,json=endTime" json:"end_time,omitempty"` // ID of the parent span, if any. Optional. ParentSpanId uint64 `protobuf:"fixed64,6,opt,name=parent_span_id,json=parentSpanId" json:"parent_span_id,omitempty"` - // Collection of labels associated with the span. + // Collection of labels associated with the span. Label keys must be less than + // 128 bytes. Label values must be less than 16 kilobytes (10MB for + // `/stacktrace` values). + // + // Some predefined label keys exist, or you may create your own. When creating + // your own, we recommend the following formats: + // + // * `/category/product/key` for agents of well-known products (e.g. + // `/db/mongodb/read_size`). + // * `short_host/path/key` for domain-specific keys (e.g. + // `foo.com/myproduct/bar`) + // + // Predefined labels include: + // + // * `/agent` + // * `/component` + // * `/error/message` + // * `/error/name` + // * `/http/client_city` + // * `/http/client_country` + // * `/http/client_protocol` + // * `/http/client_region` + // * `/http/host` + // * `/http/method` + // * `/http/path` + // * `/http/redirected_url` + // * `/http/request/size` + // * `/http/response/size` + // * `/http/route` + // * `/http/status_code` + // * `/http/url` + // * `/http/user_agent` + // * `/pid` + // * `/stacktrace` + // * `/tid` Labels map[string]string `protobuf:"bytes,7,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` } @@ -267,13 +301,42 @@ type ListTracesRequest struct { // Token identifying the page of results to return. If provided, use the // value of the `next_page_token` field from a previous request. Optional. PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` - // End of the time interval (inclusive) during which the trace data was + // Start of the time interval (inclusive) during which the trace data was // collected from the application. StartTime *google_protobuf2.Timestamp `protobuf:"bytes,5,opt,name=start_time,json=startTime" json:"start_time,omitempty"` - // Start of the time interval (inclusive) during which the trace data was + // End of the time interval (inclusive) during which the trace data was // collected from the application. EndTime *google_protobuf2.Timestamp `protobuf:"bytes,6,opt,name=end_time,json=endTime" json:"end_time,omitempty"` - // An optional filter for the request. + // An optional filter against labels for the request. + // + // By default, searches use prefix matching. To specify exact match, prepend + // a plus symbol (`+`) to the search term. + // Multiple terms are ANDed. Syntax: + // + // * `root:NAME_PREFIX` or `NAME_PREFIX`: Return traces where any root + // span starts with `NAME_PREFIX`. + // * `+root:NAME` or `+NAME`: Return traces where any root span's name is + // exactly `NAME`. + // * `span:NAME_PREFIX`: Return traces where any span starts with + // `NAME_PREFIX`. + // * `+span:NAME`: Return traces where any span's name is exactly + // `NAME`. + // * `latency:DURATION`: Return traces whose overall latency is + // greater or equal to than `DURATION`. Accepted units are nanoseconds + // (`ns`), milliseconds (`ms`), and seconds (`s`). Default is `ms`. For + // example, `latency:24ms` returns traces whose overall latency + // is greater than or equal to 24 milliseconds. + // * `label:LABEL_KEY`: Return all traces containing the specified + // label key (exact match, case-sensitive) regardless of the key:value + // pair's value (including empty values). + // * `LABEL_KEY:VALUE_PREFIX`: Return all traces containing the specified + // label key (exact match, case-sensitive) whose value starts with + // `VALUE_PREFIX`. Both a key and a value must be specified. + // * `+LABEL_KEY:VALUE`: Return all traces containing a key:value pair + // exactly matching the specified text. Both a key and a value must be + // specified. + // * `method:VALUE`: Equivalent to `/http/method:VALUE`. + // * `url:VALUE`: Equivalent to `/http/url:VALUE`. Filter string `protobuf:"bytes,7,opt,name=filter" json:"filter,omitempty"` // Field used to sort the returned traces. Optional. // Can be one of the following: @@ -602,61 +665,62 @@ var _TraceService_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("google/devtools/cloudtrace/v1/trace.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 886 bytes of a gzipped FileDescriptorProto + // 898 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0xdd, 0x6e, 0x1b, 0x45, 0x14, 0x66, 0xed, 0x78, 0x6d, 0x1f, 0x87, 0xd4, 0x8c, 0x68, 0x71, 0x5d, 0x2a, 0xc2, 0xaa, 0x20, 0x03, 0x62, 0xb7, 0x76, 0x41, 0x22, 0xe5, 0x47, 0x6a, 0xdc, 0x6d, 0xb4, 0x8a, 0xe3, 0xac, 0xd6, - 0x26, 0x08, 0x6e, 0x56, 0x13, 0xef, 0xd4, 0x2c, 0x59, 0xcf, 0x2c, 0x3b, 0x13, 0x17, 0xa7, 0xea, - 0x05, 0x5c, 0x72, 0x09, 0xe2, 0x8a, 0x37, 0xe0, 0x92, 0x37, 0x41, 0xbc, 0x02, 0x12, 0xaf, 0x81, - 0x66, 0x66, 0xb7, 0x89, 0x12, 0x35, 0x76, 0xe8, 0x4d, 0x34, 0xe7, 0xcc, 0xf9, 0xfd, 0xbe, 0x6f, - 0xb2, 0x86, 0xf7, 0xa6, 0x8c, 0x4d, 0x13, 0xe2, 0x44, 0x64, 0x2e, 0x18, 0x4b, 0xb8, 0x33, 0x49, - 0xd8, 0x71, 0x24, 0x32, 0x3c, 0x21, 0xce, 0xbc, 0xeb, 0xa8, 0x83, 0x9d, 0x66, 0x4c, 0x30, 0x74, - 0x5b, 0x87, 0xda, 0x45, 0xa8, 0x7d, 0x1a, 0x6a, 0xcf, 0xbb, 0xed, 0x37, 0xf3, 0x4a, 0x38, 0x8d, - 0x1d, 0x4c, 0x29, 0x13, 0x58, 0xc4, 0x8c, 0x72, 0x9d, 0xdc, 0xbe, 0x95, 0xdf, 0x2a, 0xeb, 0xf0, - 0xf8, 0xb1, 0x43, 0x66, 0xa9, 0x58, 0xe4, 0x97, 0x6f, 0x9d, 0xbf, 0x14, 0xf1, 0x8c, 0x70, 0x81, - 0x67, 0xa9, 0x0e, 0xb0, 0x7e, 0x34, 0xa0, 0x32, 0x96, 0x8d, 0xd0, 0x6d, 0x80, 0x34, 0x63, 0xdf, - 0x91, 0x89, 0x08, 0xe3, 0xa8, 0x65, 0x6c, 0x1a, 0x9d, 0x7a, 0x50, 0xcf, 0x3d, 0x5e, 0x84, 0x6e, - 0x42, 0x4d, 0x0d, 0x24, 0x2f, 0x4b, 0xea, 0xb2, 0xaa, 0x6c, 0x2f, 0x42, 0x5f, 0x40, 0x85, 0xa7, - 0x98, 0xf2, 0x56, 0x79, 0xb3, 0xdc, 0x69, 0xf4, 0x3a, 0xf6, 0xa5, 0xeb, 0xd8, 0xaa, 0xdd, 0x28, - 0xc5, 0x34, 0xd0, 0x69, 0xd6, 0x23, 0x30, 0x95, 0x8f, 0xa3, 0xcf, 0xc0, 0x54, 0x61, 0xbc, 0x65, - 0xa8, 0x52, 0x77, 0x56, 0x29, 0x15, 0xe4, 0x39, 0xd6, 0xbf, 0x65, 0xa8, 0x3f, 0x2f, 0x8e, 0xde, - 0x80, 0xaa, 0x2c, 0x5f, 0x2c, 0x63, 0x06, 0xa6, 0x34, 0xbd, 0x08, 0xb9, 0xb0, 0x76, 0x14, 0x53, - 0xbd, 0xc5, 0x46, 0xaf, 0xbb, 0xea, 0xb4, 0xb6, 0xfc, 0xb3, 0x1b, 0xd3, 0x28, 0x50, 0xe9, 0x08, - 0xc1, 0x1a, 0xc5, 0x33, 0xd2, 0x2a, 0x2b, 0x30, 0xd4, 0x19, 0x6d, 0x01, 0x70, 0x81, 0x33, 0x11, - 0x4a, 0x98, 0x5b, 0x6b, 0x9b, 0x46, 0xa7, 0xd1, 0x6b, 0x17, 0x0d, 0x0a, 0x0e, 0xec, 0x71, 0xc1, - 0x41, 0x50, 0x57, 0xd1, 0xd2, 0x46, 0x1f, 0x43, 0x8d, 0xd0, 0x48, 0x27, 0x56, 0x96, 0x26, 0x56, - 0x09, 0x8d, 0x54, 0xda, 0x1d, 0xd8, 0x48, 0x71, 0x46, 0xa8, 0x08, 0x8b, 0x65, 0x4d, 0xb5, 0xec, - 0xba, 0xf6, 0x8e, 0xf4, 0xca, 0x03, 0x30, 0x13, 0x7c, 0x48, 0x12, 0xde, 0xaa, 0x2a, 0x5c, 0x3f, - 0x5a, 0x79, 0xe9, 0x81, 0x4a, 0x73, 0xa9, 0xc8, 0x16, 0x41, 0x5e, 0xa3, 0xbd, 0x05, 0x8d, 0x33, - 0x6e, 0xd4, 0x84, 0xf2, 0x11, 0x59, 0xe4, 0x8a, 0x91, 0x47, 0xf4, 0x3a, 0x54, 0xe6, 0x38, 0x39, - 0x26, 0xb9, 0x50, 0xb4, 0x71, 0xbf, 0xf4, 0x89, 0x61, 0xb9, 0x50, 0x2b, 0x60, 0x44, 0x37, 0xe1, - 0xfa, 0xc8, 0x7f, 0x30, 0x0c, 0x77, 0xbd, 0xe1, 0xc3, 0xf0, 0xcb, 0xe1, 0xc8, 0x77, 0xfb, 0xde, - 0x23, 0xcf, 0x7d, 0xd8, 0x7c, 0x05, 0x6d, 0x00, 0x04, 0x7e, 0x3f, 0x1c, 0xb9, 0xc1, 0x81, 0x1b, - 0x34, 0x8d, 0xc2, 0xee, 0x0f, 0x3c, 0x77, 0x38, 0x6e, 0x96, 0xac, 0x3f, 0xcb, 0xf0, 0xda, 0x20, - 0xe6, 0x42, 0xcb, 0x26, 0x20, 0xdf, 0x1f, 0x13, 0x2e, 0x96, 0x29, 0x78, 0x0f, 0xd6, 0xe6, 0x31, - 0x79, 0x92, 0xf3, 0xbe, 0xb5, 0x04, 0x82, 0x0b, 0xe5, 0xed, 0x83, 0x98, 0x3c, 0x19, 0x2f, 0x52, - 0x12, 0xa8, 0x32, 0xe8, 0x16, 0xd4, 0x53, 0x3c, 0x25, 0x21, 0x8f, 0x4f, 0xb4, 0x08, 0x2a, 0x41, - 0x4d, 0x3a, 0x46, 0xf1, 0x89, 0x7e, 0x4c, 0xf2, 0x52, 0xb0, 0x23, 0x42, 0x95, 0x10, 0xe4, 0x28, - 0x78, 0x4a, 0xc6, 0xd2, 0x71, 0x4e, 0x27, 0x95, 0xff, 0xab, 0x13, 0x73, 0x75, 0x9d, 0xdc, 0x00, - 0xf3, 0x71, 0x9c, 0x08, 0x92, 0xb5, 0xaa, 0x6a, 0x98, 0xdc, 0x92, 0xcf, 0x9a, 0x65, 0x11, 0xc9, - 0xc2, 0xc3, 0x45, 0xab, 0xa6, 0x9f, 0xb5, 0xb2, 0xb7, 0x17, 0xd6, 0x10, 0x6a, 0xc5, 0xca, 0x92, - 0xab, 0x03, 0xcf, 0xfd, 0x2a, 0x1c, 0x7f, 0xed, 0xbb, 0xe7, 0xb8, 0x6a, 0x40, 0x75, 0xcf, 0x1b, - 0x7a, 0x7b, 0x0f, 0x06, 0x4d, 0x03, 0xad, 0x43, 0x2d, 0xd8, 0xdf, 0x1f, 0x4b, 0x5e, 0x9b, 0x25, - 0x69, 0xf5, 0xf7, 0xf7, 0xfc, 0x81, 0x3b, 0x76, 0x9b, 0x65, 0xeb, 0x04, 0xd0, 0x59, 0x50, 0x79, - 0xca, 0x28, 0x27, 0x2f, 0xf7, 0xe4, 0xd1, 0xbb, 0x70, 0x8d, 0x92, 0x1f, 0x44, 0x78, 0x06, 0x6c, - 0xad, 0xb9, 0x57, 0xa5, 0xdb, 0x2f, 0x00, 0xb7, 0x76, 0xe1, 0xda, 0x0e, 0xd1, 0xad, 0x57, 0x54, - 0xcb, 0x8b, 0xff, 0xdf, 0x59, 0x19, 0x20, 0x1f, 0x8b, 0xc9, 0xb7, 0x57, 0x52, 0xdf, 0xe7, 0xcf, - 0xf7, 0x2c, 0x29, 0xd6, 0xde, 0x59, 0x65, 0x4f, 0x5e, 0x2c, 0xda, 0xfb, 0xab, 0x0c, 0xeb, 0xfa, - 0x55, 0x92, 0x6c, 0x1e, 0x4f, 0x08, 0xfa, 0xdd, 0x00, 0x38, 0x85, 0x13, 0xdd, 0xbd, 0xaa, 0x9c, - 0xdb, 0xdd, 0x2b, 0x64, 0x68, 0xae, 0xac, 0xce, 0x4f, 0x7f, 0xff, 0xf3, 0x6b, 0xc9, 0x42, 0x9b, - 0xf2, 0x03, 0x96, 0xaf, 0xc6, 0x9d, 0xa7, 0xa7, 0x6b, 0x3f, 0x73, 0x72, 0x5e, 0x7e, 0x33, 0xa0, - 0x56, 0x00, 0x8e, 0xec, 0x25, 0x9d, 0xce, 0x31, 0xd3, 0x5e, 0x49, 0x02, 0xd6, 0x3d, 0x35, 0xcc, - 0x87, 0xe8, 0x83, 0x65, 0xc3, 0x38, 0x4f, 0x0b, 0x22, 0x9f, 0xa1, 0x9f, 0x0d, 0x68, 0x9c, 0xe1, - 0x0e, 0x2d, 0x03, 0xe1, 0x22, 0xcf, 0xed, 0x1b, 0x17, 0x9e, 0x9b, 0x2b, 0x3f, 0xb8, 0xd6, 0x5d, - 0x35, 0xcf, 0xfb, 0xbd, 0xa5, 0xe0, 0xdc, 0xcf, 0x39, 0xdd, 0xfe, 0xc5, 0x80, 0xb7, 0x27, 0x6c, - 0x76, 0xf9, 0x08, 0xdb, 0xa0, 0xda, 0xfb, 0xb2, 0x99, 0x6f, 0x7c, 0xb3, 0x93, 0x07, 0x4f, 0x59, - 0x82, 0xe9, 0xd4, 0x66, 0xd9, 0xd4, 0x99, 0x12, 0xaa, 0x46, 0x71, 0xf4, 0x15, 0x4e, 0x63, 0xfe, - 0x82, 0x1f, 0x1d, 0x9f, 0x9e, 0x5a, 0x7f, 0x94, 0xae, 0xef, 0xe8, 0x4a, 0x7d, 0xe9, 0xd3, 0x98, - 0xda, 0x07, 0xdd, 0x43, 0x53, 0xd5, 0xba, 0xf7, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x0c, 0xd5, - 0x26, 0xa6, 0xbf, 0x08, 0x00, 0x00, + 0xc6, 0x08, 0x14, 0x69, 0x35, 0xf1, 0x4e, 0xcd, 0x12, 0x7b, 0x66, 0xd9, 0x99, 0xb8, 0x38, 0x55, + 0x2f, 0xe0, 0x92, 0x5b, 0xc4, 0x15, 0x6f, 0xd0, 0x4b, 0x1e, 0x83, 0x3b, 0xc4, 0x2b, 0x20, 0xf1, + 0x1a, 0x68, 0x66, 0x76, 0x9b, 0x28, 0x51, 0x63, 0x07, 0x6e, 0xa2, 0x39, 0x67, 0xce, 0xef, 0xf7, + 0x7d, 0x93, 0x35, 0xbc, 0x37, 0x61, 0x6c, 0x32, 0x25, 0x4e, 0x44, 0xe6, 0x82, 0xb1, 0x29, 0x77, + 0xc6, 0x53, 0x76, 0x1c, 0x89, 0x14, 0x8f, 0x89, 0x33, 0x6f, 0x3b, 0xea, 0x60, 0x27, 0x29, 0x13, + 0x0c, 0xdd, 0xd6, 0xa1, 0x76, 0x1e, 0x6a, 0x9f, 0x86, 0xda, 0xf3, 0x76, 0xf3, 0xcd, 0xac, 0x12, + 0x4e, 0x62, 0x07, 0x53, 0xca, 0x04, 0x16, 0x31, 0xa3, 0x5c, 0x27, 0x37, 0x6f, 0x65, 0xb7, 0xca, + 0x3a, 0x3c, 0x7e, 0xec, 0x90, 0x59, 0x22, 0x16, 0xd9, 0xe5, 0x5b, 0xe7, 0x2f, 0x45, 0x3c, 0x23, + 0x5c, 0xe0, 0x59, 0xa2, 0x03, 0xac, 0x1f, 0x0d, 0x28, 0x0d, 0x65, 0x23, 0x74, 0x1b, 0x20, 0x49, + 0xd9, 0x77, 0x64, 0x2c, 0xc2, 0x38, 0x6a, 0x18, 0x9b, 0x46, 0xab, 0x1a, 0x54, 0x33, 0x8f, 0x17, + 0xa1, 0x9b, 0x50, 0x51, 0x03, 0xc9, 0xcb, 0x82, 0xba, 0x2c, 0x2b, 0xdb, 0x8b, 0xd0, 0x17, 0x50, + 0xe2, 0x09, 0xa6, 0xbc, 0x51, 0xdc, 0x2c, 0xb6, 0x6a, 0x9d, 0x96, 0x7d, 0xe9, 0x3a, 0xb6, 0x6a, + 0x37, 0x48, 0x30, 0x0d, 0x74, 0x9a, 0xf5, 0x08, 0x4c, 0xe5, 0xe3, 0xe8, 0x33, 0x30, 0x55, 0x18, + 0x6f, 0x18, 0xaa, 0xd4, 0x9d, 0x55, 0x4a, 0x05, 0x59, 0x8e, 0xf5, 0x4f, 0x11, 0xaa, 0x2f, 0x8a, + 0xa3, 0x37, 0xa0, 0x2c, 0xcb, 0xe7, 0xcb, 0x98, 0x81, 0x29, 0x4d, 0x2f, 0x42, 0x2e, 0xac, 0x1d, + 0xc5, 0x54, 0x6f, 0xb1, 0xd1, 0x69, 0xaf, 0x3a, 0xad, 0x2d, 0xff, 0xec, 0xc6, 0x34, 0x0a, 0x54, + 0x3a, 0x42, 0xb0, 0x46, 0xf1, 0x8c, 0x34, 0x8a, 0x0a, 0x0c, 0x75, 0x46, 0x5b, 0x00, 0x5c, 0xe0, + 0x54, 0x84, 0x12, 0xe6, 0xc6, 0xda, 0xa6, 0xd1, 0xaa, 0x75, 0x9a, 0x79, 0x83, 0x9c, 0x03, 0x7b, + 0x98, 0x73, 0x10, 0x54, 0x55, 0xb4, 0xb4, 0xd1, 0xc7, 0x50, 0x21, 0x34, 0xd2, 0x89, 0xa5, 0xa5, + 0x89, 0x65, 0x42, 0x23, 0x95, 0x76, 0x07, 0x36, 0x12, 0x9c, 0x12, 0x2a, 0xc2, 0x7c, 0x59, 0x53, + 0x2d, 0xbb, 0xae, 0xbd, 0x03, 0xbd, 0x72, 0x0f, 0xcc, 0x29, 0x3e, 0x24, 0x53, 0xde, 0x28, 0x2b, + 0x5c, 0x3f, 0x5a, 0x79, 0xe9, 0x9e, 0x4a, 0x73, 0xa9, 0x48, 0x17, 0x41, 0x56, 0xa3, 0xb9, 0x05, + 0xb5, 0x33, 0x6e, 0x54, 0x87, 0xe2, 0x11, 0x59, 0x64, 0x8a, 0x91, 0x47, 0xf4, 0x3a, 0x94, 0xe6, + 0x78, 0x7a, 0x4c, 0x32, 0xa1, 0x68, 0xe3, 0x7e, 0xe1, 0x13, 0xc3, 0x72, 0xa1, 0x92, 0xc3, 0x88, + 0x6e, 0xc2, 0xf5, 0x81, 0xff, 0xa0, 0x1f, 0xee, 0x7a, 0xfd, 0x87, 0xe1, 0x97, 0xfd, 0x81, 0xef, + 0x76, 0xbd, 0x47, 0x9e, 0xfb, 0xb0, 0xfe, 0x0a, 0xda, 0x00, 0x08, 0xfc, 0x6e, 0x38, 0x70, 0x83, + 0x91, 0x1b, 0xd4, 0x8d, 0xdc, 0xee, 0xf6, 0x3c, 0xb7, 0x3f, 0xac, 0x17, 0xac, 0xdf, 0x8b, 0xf0, + 0x5a, 0x2f, 0xe6, 0x42, 0xcb, 0x26, 0x20, 0xdf, 0x1f, 0x13, 0x2e, 0x96, 0x29, 0x78, 0x0f, 0xd6, + 0xe6, 0x31, 0x79, 0x92, 0xf1, 0xbe, 0xb5, 0x04, 0x82, 0x0b, 0xe5, 0xed, 0x51, 0x4c, 0x9e, 0x0c, + 0x17, 0x09, 0x09, 0x54, 0x19, 0x74, 0x0b, 0xaa, 0x09, 0x9e, 0x90, 0x90, 0xc7, 0x27, 0x5a, 0x04, + 0xa5, 0xa0, 0x22, 0x1d, 0x83, 0xf8, 0x44, 0x3f, 0x26, 0x79, 0x29, 0xd8, 0x11, 0xa1, 0x4a, 0x08, + 0x72, 0x14, 0x3c, 0x21, 0x43, 0xe9, 0x38, 0xa7, 0x93, 0xd2, 0x7f, 0xd5, 0x89, 0xb9, 0xba, 0x4e, + 0x6e, 0x80, 0xf9, 0x38, 0x9e, 0x0a, 0x92, 0x36, 0xca, 0x6a, 0x98, 0xcc, 0x92, 0xcf, 0x9a, 0xa5, + 0x11, 0x49, 0xc3, 0xc3, 0x45, 0xa3, 0xa2, 0x9f, 0xb5, 0xb2, 0xb7, 0x17, 0x56, 0x1f, 0x2a, 0xf9, + 0xca, 0x92, 0xab, 0x91, 0xe7, 0x7e, 0x15, 0x0e, 0xbf, 0xf6, 0xdd, 0x73, 0x5c, 0xd5, 0xa0, 0xbc, + 0xe7, 0xf5, 0xbd, 0xbd, 0x07, 0xbd, 0xba, 0x81, 0xd6, 0xa1, 0x12, 0xec, 0xef, 0x0f, 0x25, 0xaf, + 0xf5, 0x82, 0xb4, 0xba, 0xfb, 0x7b, 0x7e, 0xcf, 0x1d, 0xba, 0xf5, 0xa2, 0x75, 0x02, 0xe8, 0x2c, + 0xa8, 0x3c, 0x61, 0x94, 0x93, 0xff, 0xf7, 0xe4, 0xd1, 0xbb, 0x70, 0x8d, 0x92, 0x1f, 0x44, 0x78, + 0x06, 0x6c, 0xad, 0xb9, 0x57, 0xa5, 0xdb, 0xcf, 0x01, 0xb7, 0x76, 0xe1, 0xda, 0x0e, 0xd1, 0xad, + 0x57, 0x54, 0xcb, 0xcb, 0xff, 0xdf, 0x59, 0x29, 0x20, 0x1f, 0x8b, 0xf1, 0xb7, 0x57, 0x52, 0xdf, + 0xe7, 0x2f, 0xf6, 0x2c, 0x28, 0xd6, 0xde, 0x59, 0x65, 0x4f, 0x9e, 0x2f, 0xda, 0xf9, 0xb3, 0x08, + 0xeb, 0xfa, 0x55, 0x92, 0x74, 0x1e, 0x8f, 0x09, 0xfa, 0xcd, 0x00, 0x38, 0x85, 0x13, 0xdd, 0xbd, + 0xaa, 0x9c, 0x9b, 0xed, 0x2b, 0x64, 0x68, 0xae, 0xac, 0xd6, 0x4f, 0x7f, 0xfd, 0xfd, 0x4b, 0xc1, + 0x42, 0x9b, 0xf2, 0x03, 0x96, 0xad, 0xc6, 0x9d, 0xa7, 0xa7, 0x6b, 0x3f, 0x73, 0x32, 0x5e, 0x7e, + 0x35, 0xa0, 0x92, 0x03, 0x8e, 0xec, 0x25, 0x9d, 0xce, 0x31, 0xd3, 0x5c, 0x49, 0x02, 0xd6, 0x3d, + 0x35, 0xcc, 0x87, 0xe8, 0x83, 0x65, 0xc3, 0x38, 0x4f, 0x73, 0x22, 0x9f, 0xa1, 0x9f, 0x0d, 0xa8, + 0x9d, 0xe1, 0x0e, 0x2d, 0x03, 0xe1, 0x22, 0xcf, 0xcd, 0x1b, 0x17, 0x9e, 0x9b, 0x2b, 0x3f, 0xb8, + 0xd6, 0x5d, 0x35, 0xcf, 0xfb, 0x9d, 0xa5, 0xe0, 0xdc, 0xcf, 0x38, 0xdd, 0x7e, 0x6e, 0xc0, 0xdb, + 0x63, 0x36, 0xbb, 0x7c, 0x84, 0x6d, 0x50, 0xed, 0x7d, 0xd9, 0xcc, 0x37, 0xbe, 0xd9, 0xc9, 0x82, + 0x27, 0x6c, 0x8a, 0xe9, 0xc4, 0x66, 0xe9, 0xc4, 0x99, 0x10, 0xaa, 0x46, 0x71, 0xf4, 0x15, 0x4e, + 0x62, 0xfe, 0x92, 0x1f, 0x1d, 0x9f, 0x9e, 0x5a, 0xcf, 0x0b, 0xd7, 0x77, 0x74, 0xa5, 0xae, 0xf4, + 0x69, 0x4c, 0xed, 0x51, 0xfb, 0x8f, 0xdc, 0x7f, 0xa0, 0xfc, 0x07, 0xca, 0x7f, 0x30, 0x6a, 0x1f, + 0x9a, 0xaa, 0xc7, 0xbd, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x08, 0xd9, 0xf5, 0xea, 0xd7, 0x08, + 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/cloudtrace/v2/trace.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/cloudtrace/v2/trace.pb.go new file mode 100644 index 0000000..21bb28d --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/devtools/cloudtrace/v2/trace.pb.go @@ -0,0 +1,1089 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/devtools/cloudtrace/v2/trace.proto + +/* +Package cloudtrace is a generated protocol buffer package. + +It is generated from these files: + google/devtools/cloudtrace/v2/trace.proto + google/devtools/cloudtrace/v2/tracing.proto + +It has these top-level messages: + Span + AttributeValue + StackTrace + Module + TruncatableString + BatchWriteSpansRequest +*/ +package cloudtrace + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/timestamp" +import google_protobuf2 "github.com/golang/protobuf/ptypes/wrappers" +import google_rpc "google.golang.org/genproto/googleapis/rpc/status" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Indicates whether the message was sent or received. +type Span_TimeEvent_MessageEvent_Type int32 + +const ( + // Unknown event type. + Span_TimeEvent_MessageEvent_TYPE_UNSPECIFIED Span_TimeEvent_MessageEvent_Type = 0 + // Indicates a sent message. + Span_TimeEvent_MessageEvent_SENT Span_TimeEvent_MessageEvent_Type = 1 + // Indicates a received message. + Span_TimeEvent_MessageEvent_RECEIVED Span_TimeEvent_MessageEvent_Type = 2 +) + +var Span_TimeEvent_MessageEvent_Type_name = map[int32]string{ + 0: "TYPE_UNSPECIFIED", + 1: "SENT", + 2: "RECEIVED", +} +var Span_TimeEvent_MessageEvent_Type_value = map[string]int32{ + "TYPE_UNSPECIFIED": 0, + "SENT": 1, + "RECEIVED": 2, +} + +func (x Span_TimeEvent_MessageEvent_Type) String() string { + return proto.EnumName(Span_TimeEvent_MessageEvent_Type_name, int32(x)) +} +func (Span_TimeEvent_MessageEvent_Type) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{0, 1, 1, 0} +} + +// The relationship of the current span relative to the linked span: child, +// parent, or unspecified. +type Span_Link_Type int32 + +const ( + // The relationship of the two spans is unknown. + Span_Link_TYPE_UNSPECIFIED Span_Link_Type = 0 + // The linked span is a child of the current span. + Span_Link_CHILD_LINKED_SPAN Span_Link_Type = 1 + // The linked span is a parent of the current span. + Span_Link_PARENT_LINKED_SPAN Span_Link_Type = 2 +) + +var Span_Link_Type_name = map[int32]string{ + 0: "TYPE_UNSPECIFIED", + 1: "CHILD_LINKED_SPAN", + 2: "PARENT_LINKED_SPAN", +} +var Span_Link_Type_value = map[string]int32{ + "TYPE_UNSPECIFIED": 0, + "CHILD_LINKED_SPAN": 1, + "PARENT_LINKED_SPAN": 2, +} + +func (x Span_Link_Type) String() string { + return proto.EnumName(Span_Link_Type_name, int32(x)) +} +func (Span_Link_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 3, 0} } + +// A span represents a single operation within a trace. Spans can be +// nested to form a trace tree. Often, a trace contains a root span +// that describes the end-to-end latency, and one or more subspans for +// its sub-operations. A trace can also contain multiple root spans, +// or none at all. Spans do not need to be contiguous—there may be +// gaps or overlaps between spans in a trace. +type Span struct { + // The resource name of the span in the following format: + // + // projects/[PROJECT_ID]/traces/[TRACE_ID]/spans/[SPAN_ID] + // + // [TRACE_ID] is a unique identifier for a trace within a project; + // it is a 32-character hexadecimal encoding of a 16-byte array. + // + // [SPAN_ID] is a unique identifier for a span within a trace; it + // is a 16-character hexadecimal encoding of an 8-byte array. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The [SPAN_ID] portion of the span's resource name. + SpanId string `protobuf:"bytes,2,opt,name=span_id,json=spanId" json:"span_id,omitempty"` + // The [SPAN_ID] of this span's parent span. If this is a root span, + // then this field must be empty. + ParentSpanId string `protobuf:"bytes,3,opt,name=parent_span_id,json=parentSpanId" json:"parent_span_id,omitempty"` + // A description of the span's operation (up to 128 bytes). + // Stackdriver Trace displays the description in the + // {% dynamic print site_values.console_name %}. + // For example, the display name can be a qualified method name or a file name + // and a line number where the operation is called. A best practice is to use + // the same display name within an application and at the same call point. + // This makes it easier to correlate spans in different traces. + DisplayName *TruncatableString `protobuf:"bytes,4,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // The start time of the span. On the client side, this is the time kept by + // the local machine where the span execution starts. On the server side, this + // is the time when the server's application handler starts running. + StartTime *google_protobuf1.Timestamp `protobuf:"bytes,5,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // The end time of the span. On the client side, this is the time kept by + // the local machine where the span execution ends. On the server side, this + // is the time when the server application handler stops running. + EndTime *google_protobuf1.Timestamp `protobuf:"bytes,6,opt,name=end_time,json=endTime" json:"end_time,omitempty"` + // A set of attributes on the span. You can have up to 32 attributes per + // span. + Attributes *Span_Attributes `protobuf:"bytes,7,opt,name=attributes" json:"attributes,omitempty"` + // Stack trace captured at the start of the span. + StackTrace *StackTrace `protobuf:"bytes,8,opt,name=stack_trace,json=stackTrace" json:"stack_trace,omitempty"` + // A set of time events. You can have up to 32 annotations and 128 message + // events per span. + TimeEvents *Span_TimeEvents `protobuf:"bytes,9,opt,name=time_events,json=timeEvents" json:"time_events,omitempty"` + // Links associated with the span. You can have up to 128 links per Span. + Links *Span_Links `protobuf:"bytes,10,opt,name=links" json:"links,omitempty"` + // An optional final status for this span. + Status *google_rpc.Status `protobuf:"bytes,11,opt,name=status" json:"status,omitempty"` + // (Optional) Set this parameter to indicate whether this span is in + // the same process as its parent. If you do not set this parameter, + // Stackdriver Trace is unable to take advantage of this helpful + // information. + SameProcessAsParentSpan *google_protobuf2.BoolValue `protobuf:"bytes,12,opt,name=same_process_as_parent_span,json=sameProcessAsParentSpan" json:"same_process_as_parent_span,omitempty"` + // An optional number of child spans that were generated while this span + // was active. If set, allows implementation to detect missing child spans. + ChildSpanCount *google_protobuf2.Int32Value `protobuf:"bytes,13,opt,name=child_span_count,json=childSpanCount" json:"child_span_count,omitempty"` +} + +func (m *Span) Reset() { *m = Span{} } +func (m *Span) String() string { return proto.CompactTextString(m) } +func (*Span) ProtoMessage() {} +func (*Span) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *Span) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Span) GetSpanId() string { + if m != nil { + return m.SpanId + } + return "" +} + +func (m *Span) GetParentSpanId() string { + if m != nil { + return m.ParentSpanId + } + return "" +} + +func (m *Span) GetDisplayName() *TruncatableString { + if m != nil { + return m.DisplayName + } + return nil +} + +func (m *Span) GetStartTime() *google_protobuf1.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *Span) GetEndTime() *google_protobuf1.Timestamp { + if m != nil { + return m.EndTime + } + return nil +} + +func (m *Span) GetAttributes() *Span_Attributes { + if m != nil { + return m.Attributes + } + return nil +} + +func (m *Span) GetStackTrace() *StackTrace { + if m != nil { + return m.StackTrace + } + return nil +} + +func (m *Span) GetTimeEvents() *Span_TimeEvents { + if m != nil { + return m.TimeEvents + } + return nil +} + +func (m *Span) GetLinks() *Span_Links { + if m != nil { + return m.Links + } + return nil +} + +func (m *Span) GetStatus() *google_rpc.Status { + if m != nil { + return m.Status + } + return nil +} + +func (m *Span) GetSameProcessAsParentSpan() *google_protobuf2.BoolValue { + if m != nil { + return m.SameProcessAsParentSpan + } + return nil +} + +func (m *Span) GetChildSpanCount() *google_protobuf2.Int32Value { + if m != nil { + return m.ChildSpanCount + } + return nil +} + +// A set of attributes, each in the format `[KEY]:[VALUE]`. +type Span_Attributes struct { + // The set of attributes. Each attribute's key can be up to 128 bytes + // long. The value can be a string up to 256 bytes, an integer, or the + // Boolean values `true` and `false`. For example: + // + // "/instance_id": "my-instance" + // "/http/user_agent": "" + // "/http/request_bytes": 300 + // "abc.com/myattribute": true + AttributeMap map[string]*AttributeValue `protobuf:"bytes,1,rep,name=attribute_map,json=attributeMap" json:"attribute_map,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // The number of attributes that were discarded. Attributes can be discarded + // because their keys are too long or because there are too many attributes. + // If this value is 0 then all attributes are valid. + DroppedAttributesCount int32 `protobuf:"varint,2,opt,name=dropped_attributes_count,json=droppedAttributesCount" json:"dropped_attributes_count,omitempty"` +} + +func (m *Span_Attributes) Reset() { *m = Span_Attributes{} } +func (m *Span_Attributes) String() string { return proto.CompactTextString(m) } +func (*Span_Attributes) ProtoMessage() {} +func (*Span_Attributes) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 0} } + +func (m *Span_Attributes) GetAttributeMap() map[string]*AttributeValue { + if m != nil { + return m.AttributeMap + } + return nil +} + +func (m *Span_Attributes) GetDroppedAttributesCount() int32 { + if m != nil { + return m.DroppedAttributesCount + } + return 0 +} + +// A time-stamped annotation or message event in the Span. +type Span_TimeEvent struct { + // The timestamp indicating the time the event occurred. + Time *google_protobuf1.Timestamp `protobuf:"bytes,1,opt,name=time" json:"time,omitempty"` + // A `TimeEvent` can contain either an `Annotation` object or a + // `MessageEvent` object, but not both. + // + // Types that are valid to be assigned to Value: + // *Span_TimeEvent_Annotation_ + // *Span_TimeEvent_MessageEvent_ + Value isSpan_TimeEvent_Value `protobuf_oneof:"value"` +} + +func (m *Span_TimeEvent) Reset() { *m = Span_TimeEvent{} } +func (m *Span_TimeEvent) String() string { return proto.CompactTextString(m) } +func (*Span_TimeEvent) ProtoMessage() {} +func (*Span_TimeEvent) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 1} } + +type isSpan_TimeEvent_Value interface { + isSpan_TimeEvent_Value() +} + +type Span_TimeEvent_Annotation_ struct { + Annotation *Span_TimeEvent_Annotation `protobuf:"bytes,2,opt,name=annotation,oneof"` +} +type Span_TimeEvent_MessageEvent_ struct { + MessageEvent *Span_TimeEvent_MessageEvent `protobuf:"bytes,3,opt,name=message_event,json=messageEvent,oneof"` +} + +func (*Span_TimeEvent_Annotation_) isSpan_TimeEvent_Value() {} +func (*Span_TimeEvent_MessageEvent_) isSpan_TimeEvent_Value() {} + +func (m *Span_TimeEvent) GetValue() isSpan_TimeEvent_Value { + if m != nil { + return m.Value + } + return nil +} + +func (m *Span_TimeEvent) GetTime() *google_protobuf1.Timestamp { + if m != nil { + return m.Time + } + return nil +} + +func (m *Span_TimeEvent) GetAnnotation() *Span_TimeEvent_Annotation { + if x, ok := m.GetValue().(*Span_TimeEvent_Annotation_); ok { + return x.Annotation + } + return nil +} + +func (m *Span_TimeEvent) GetMessageEvent() *Span_TimeEvent_MessageEvent { + if x, ok := m.GetValue().(*Span_TimeEvent_MessageEvent_); ok { + return x.MessageEvent + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Span_TimeEvent) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Span_TimeEvent_OneofMarshaler, _Span_TimeEvent_OneofUnmarshaler, _Span_TimeEvent_OneofSizer, []interface{}{ + (*Span_TimeEvent_Annotation_)(nil), + (*Span_TimeEvent_MessageEvent_)(nil), + } +} + +func _Span_TimeEvent_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Span_TimeEvent) + // value + switch x := m.Value.(type) { + case *Span_TimeEvent_Annotation_: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Annotation); err != nil { + return err + } + case *Span_TimeEvent_MessageEvent_: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.MessageEvent); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Span_TimeEvent.Value has unexpected type %T", x) + } + return nil +} + +func _Span_TimeEvent_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Span_TimeEvent) + switch tag { + case 2: // value.annotation + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Span_TimeEvent_Annotation) + err := b.DecodeMessage(msg) + m.Value = &Span_TimeEvent_Annotation_{msg} + return true, err + case 3: // value.message_event + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Span_TimeEvent_MessageEvent) + err := b.DecodeMessage(msg) + m.Value = &Span_TimeEvent_MessageEvent_{msg} + return true, err + default: + return false, nil + } +} + +func _Span_TimeEvent_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Span_TimeEvent) + // value + switch x := m.Value.(type) { + case *Span_TimeEvent_Annotation_: + s := proto.Size(x.Annotation) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Span_TimeEvent_MessageEvent_: + s := proto.Size(x.MessageEvent) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Text annotation with a set of attributes. +type Span_TimeEvent_Annotation struct { + // A user-supplied message describing the event. The maximum length for + // the description is 256 bytes. + Description *TruncatableString `protobuf:"bytes,1,opt,name=description" json:"description,omitempty"` + // A set of attributes on the annotation. You can have up to 4 attributes + // per Annotation. + Attributes *Span_Attributes `protobuf:"bytes,2,opt,name=attributes" json:"attributes,omitempty"` +} + +func (m *Span_TimeEvent_Annotation) Reset() { *m = Span_TimeEvent_Annotation{} } +func (m *Span_TimeEvent_Annotation) String() string { return proto.CompactTextString(m) } +func (*Span_TimeEvent_Annotation) ProtoMessage() {} +func (*Span_TimeEvent_Annotation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 1, 0} } + +func (m *Span_TimeEvent_Annotation) GetDescription() *TruncatableString { + if m != nil { + return m.Description + } + return nil +} + +func (m *Span_TimeEvent_Annotation) GetAttributes() *Span_Attributes { + if m != nil { + return m.Attributes + } + return nil +} + +// An event describing a message sent/received between Spans. +type Span_TimeEvent_MessageEvent struct { + // Type of MessageEvent. Indicates whether the message was sent or + // received. + Type Span_TimeEvent_MessageEvent_Type `protobuf:"varint,1,opt,name=type,enum=google.devtools.cloudtrace.v2.Span_TimeEvent_MessageEvent_Type" json:"type,omitempty"` + // An identifier for the MessageEvent's message that can be used to match + // SENT and RECEIVED MessageEvents. It is recommended to be unique within + // a Span. + Id int64 `protobuf:"varint,2,opt,name=id" json:"id,omitempty"` + // The number of uncompressed bytes sent or received. + UncompressedSizeBytes int64 `protobuf:"varint,3,opt,name=uncompressed_size_bytes,json=uncompressedSizeBytes" json:"uncompressed_size_bytes,omitempty"` + // The number of compressed bytes sent or received. If missing assumed to + // be the same size as uncompressed. + CompressedSizeBytes int64 `protobuf:"varint,4,opt,name=compressed_size_bytes,json=compressedSizeBytes" json:"compressed_size_bytes,omitempty"` +} + +func (m *Span_TimeEvent_MessageEvent) Reset() { *m = Span_TimeEvent_MessageEvent{} } +func (m *Span_TimeEvent_MessageEvent) String() string { return proto.CompactTextString(m) } +func (*Span_TimeEvent_MessageEvent) ProtoMessage() {} +func (*Span_TimeEvent_MessageEvent) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{0, 1, 1} +} + +func (m *Span_TimeEvent_MessageEvent) GetType() Span_TimeEvent_MessageEvent_Type { + if m != nil { + return m.Type + } + return Span_TimeEvent_MessageEvent_TYPE_UNSPECIFIED +} + +func (m *Span_TimeEvent_MessageEvent) GetId() int64 { + if m != nil { + return m.Id + } + return 0 +} + +func (m *Span_TimeEvent_MessageEvent) GetUncompressedSizeBytes() int64 { + if m != nil { + return m.UncompressedSizeBytes + } + return 0 +} + +func (m *Span_TimeEvent_MessageEvent) GetCompressedSizeBytes() int64 { + if m != nil { + return m.CompressedSizeBytes + } + return 0 +} + +// A collection of `TimeEvent`s. A `TimeEvent` is a time-stamped annotation +// on the span, consisting of either user-supplied key:value pairs, or +// details of a message sent/received between Spans. +type Span_TimeEvents struct { + // A collection of `TimeEvent`s. + TimeEvent []*Span_TimeEvent `protobuf:"bytes,1,rep,name=time_event,json=timeEvent" json:"time_event,omitempty"` + // The number of dropped annotations in all the included time events. + // If the value is 0, then no annotations were dropped. + DroppedAnnotationsCount int32 `protobuf:"varint,2,opt,name=dropped_annotations_count,json=droppedAnnotationsCount" json:"dropped_annotations_count,omitempty"` + // The number of dropped message events in all the included time events. + // If the value is 0, then no message events were dropped. + DroppedMessageEventsCount int32 `protobuf:"varint,3,opt,name=dropped_message_events_count,json=droppedMessageEventsCount" json:"dropped_message_events_count,omitempty"` +} + +func (m *Span_TimeEvents) Reset() { *m = Span_TimeEvents{} } +func (m *Span_TimeEvents) String() string { return proto.CompactTextString(m) } +func (*Span_TimeEvents) ProtoMessage() {} +func (*Span_TimeEvents) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 2} } + +func (m *Span_TimeEvents) GetTimeEvent() []*Span_TimeEvent { + if m != nil { + return m.TimeEvent + } + return nil +} + +func (m *Span_TimeEvents) GetDroppedAnnotationsCount() int32 { + if m != nil { + return m.DroppedAnnotationsCount + } + return 0 +} + +func (m *Span_TimeEvents) GetDroppedMessageEventsCount() int32 { + if m != nil { + return m.DroppedMessageEventsCount + } + return 0 +} + +// A pointer from the current span to another span in the same trace or in a +// different trace. For example, this can be used in batching operations, +// where a single batch handler processes multiple requests from different +// traces or when the handler receives a request from a different project. +type Span_Link struct { + // The [TRACE_ID] for a trace within a project. + TraceId string `protobuf:"bytes,1,opt,name=trace_id,json=traceId" json:"trace_id,omitempty"` + // The [SPAN_ID] for a span within a trace. + SpanId string `protobuf:"bytes,2,opt,name=span_id,json=spanId" json:"span_id,omitempty"` + // The relationship of the current span relative to the linked span. + Type Span_Link_Type `protobuf:"varint,3,opt,name=type,enum=google.devtools.cloudtrace.v2.Span_Link_Type" json:"type,omitempty"` + // A set of attributes on the link. You have have up to 32 attributes per + // link. + Attributes *Span_Attributes `protobuf:"bytes,4,opt,name=attributes" json:"attributes,omitempty"` +} + +func (m *Span_Link) Reset() { *m = Span_Link{} } +func (m *Span_Link) String() string { return proto.CompactTextString(m) } +func (*Span_Link) ProtoMessage() {} +func (*Span_Link) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 3} } + +func (m *Span_Link) GetTraceId() string { + if m != nil { + return m.TraceId + } + return "" +} + +func (m *Span_Link) GetSpanId() string { + if m != nil { + return m.SpanId + } + return "" +} + +func (m *Span_Link) GetType() Span_Link_Type { + if m != nil { + return m.Type + } + return Span_Link_TYPE_UNSPECIFIED +} + +func (m *Span_Link) GetAttributes() *Span_Attributes { + if m != nil { + return m.Attributes + } + return nil +} + +// A collection of links, which are references from this span to a span +// in the same or different trace. +type Span_Links struct { + // A collection of links. + Link []*Span_Link `protobuf:"bytes,1,rep,name=link" json:"link,omitempty"` + // The number of dropped links after the maximum size was enforced. If + // this value is 0, then no links were dropped. + DroppedLinksCount int32 `protobuf:"varint,2,opt,name=dropped_links_count,json=droppedLinksCount" json:"dropped_links_count,omitempty"` +} + +func (m *Span_Links) Reset() { *m = Span_Links{} } +func (m *Span_Links) String() string { return proto.CompactTextString(m) } +func (*Span_Links) ProtoMessage() {} +func (*Span_Links) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 4} } + +func (m *Span_Links) GetLink() []*Span_Link { + if m != nil { + return m.Link + } + return nil +} + +func (m *Span_Links) GetDroppedLinksCount() int32 { + if m != nil { + return m.DroppedLinksCount + } + return 0 +} + +// The allowed types for [VALUE] in a `[KEY]:[VALUE]` attribute. +type AttributeValue struct { + // The type of the value. + // + // Types that are valid to be assigned to Value: + // *AttributeValue_StringValue + // *AttributeValue_IntValue + // *AttributeValue_BoolValue + Value isAttributeValue_Value `protobuf_oneof:"value"` +} + +func (m *AttributeValue) Reset() { *m = AttributeValue{} } +func (m *AttributeValue) String() string { return proto.CompactTextString(m) } +func (*AttributeValue) ProtoMessage() {} +func (*AttributeValue) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +type isAttributeValue_Value interface { + isAttributeValue_Value() +} + +type AttributeValue_StringValue struct { + StringValue *TruncatableString `protobuf:"bytes,1,opt,name=string_value,json=stringValue,oneof"` +} +type AttributeValue_IntValue struct { + IntValue int64 `protobuf:"varint,2,opt,name=int_value,json=intValue,oneof"` +} +type AttributeValue_BoolValue struct { + BoolValue bool `protobuf:"varint,3,opt,name=bool_value,json=boolValue,oneof"` +} + +func (*AttributeValue_StringValue) isAttributeValue_Value() {} +func (*AttributeValue_IntValue) isAttributeValue_Value() {} +func (*AttributeValue_BoolValue) isAttributeValue_Value() {} + +func (m *AttributeValue) GetValue() isAttributeValue_Value { + if m != nil { + return m.Value + } + return nil +} + +func (m *AttributeValue) GetStringValue() *TruncatableString { + if x, ok := m.GetValue().(*AttributeValue_StringValue); ok { + return x.StringValue + } + return nil +} + +func (m *AttributeValue) GetIntValue() int64 { + if x, ok := m.GetValue().(*AttributeValue_IntValue); ok { + return x.IntValue + } + return 0 +} + +func (m *AttributeValue) GetBoolValue() bool { + if x, ok := m.GetValue().(*AttributeValue_BoolValue); ok { + return x.BoolValue + } + return false +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*AttributeValue) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _AttributeValue_OneofMarshaler, _AttributeValue_OneofUnmarshaler, _AttributeValue_OneofSizer, []interface{}{ + (*AttributeValue_StringValue)(nil), + (*AttributeValue_IntValue)(nil), + (*AttributeValue_BoolValue)(nil), + } +} + +func _AttributeValue_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*AttributeValue) + // value + switch x := m.Value.(type) { + case *AttributeValue_StringValue: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.StringValue); err != nil { + return err + } + case *AttributeValue_IntValue: + b.EncodeVarint(2<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.IntValue)) + case *AttributeValue_BoolValue: + t := uint64(0) + if x.BoolValue { + t = 1 + } + b.EncodeVarint(3<<3 | proto.WireVarint) + b.EncodeVarint(t) + case nil: + default: + return fmt.Errorf("AttributeValue.Value has unexpected type %T", x) + } + return nil +} + +func _AttributeValue_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*AttributeValue) + switch tag { + case 1: // value.string_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TruncatableString) + err := b.DecodeMessage(msg) + m.Value = &AttributeValue_StringValue{msg} + return true, err + case 2: // value.int_value + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Value = &AttributeValue_IntValue{int64(x)} + return true, err + case 3: // value.bool_value + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Value = &AttributeValue_BoolValue{x != 0} + return true, err + default: + return false, nil + } +} + +func _AttributeValue_OneofSizer(msg proto.Message) (n int) { + m := msg.(*AttributeValue) + // value + switch x := m.Value.(type) { + case *AttributeValue_StringValue: + s := proto.Size(x.StringValue) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *AttributeValue_IntValue: + n += proto.SizeVarint(2<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.IntValue)) + case *AttributeValue_BoolValue: + n += proto.SizeVarint(3<<3 | proto.WireVarint) + n += 1 + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A call stack appearing in a trace. +type StackTrace struct { + // Stack frames in this stack trace. A maximum of 128 frames are allowed. + StackFrames *StackTrace_StackFrames `protobuf:"bytes,1,opt,name=stack_frames,json=stackFrames" json:"stack_frames,omitempty"` + // The hash ID is used to conserve network bandwidth for duplicate + // stack traces within a single trace. + // + // Often multiple spans will have identical stack traces. + // The first occurrence of a stack trace should contain both the + // `stackFrame` content and a value in `stackTraceHashId`. + // + // Subsequent spans within the same request can refer + // to that stack trace by only setting `stackTraceHashId`. + StackTraceHashId int64 `protobuf:"varint,2,opt,name=stack_trace_hash_id,json=stackTraceHashId" json:"stack_trace_hash_id,omitempty"` +} + +func (m *StackTrace) Reset() { *m = StackTrace{} } +func (m *StackTrace) String() string { return proto.CompactTextString(m) } +func (*StackTrace) ProtoMessage() {} +func (*StackTrace) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *StackTrace) GetStackFrames() *StackTrace_StackFrames { + if m != nil { + return m.StackFrames + } + return nil +} + +func (m *StackTrace) GetStackTraceHashId() int64 { + if m != nil { + return m.StackTraceHashId + } + return 0 +} + +// Represents a single stack frame in a stack trace. +type StackTrace_StackFrame struct { + // The fully-qualified name that uniquely identifies the function or + // method that is active in this frame (up to 1024 bytes). + FunctionName *TruncatableString `protobuf:"bytes,1,opt,name=function_name,json=functionName" json:"function_name,omitempty"` + // An un-mangled function name, if `function_name` is + // [mangled](http://www.avabodh.com/cxxin/namemangling.html). The name can + // be fully-qualified (up to 1024 bytes). + OriginalFunctionName *TruncatableString `protobuf:"bytes,2,opt,name=original_function_name,json=originalFunctionName" json:"original_function_name,omitempty"` + // The name of the source file where the function call appears (up to 256 + // bytes). + FileName *TruncatableString `protobuf:"bytes,3,opt,name=file_name,json=fileName" json:"file_name,omitempty"` + // The line number in `file_name` where the function call appears. + LineNumber int64 `protobuf:"varint,4,opt,name=line_number,json=lineNumber" json:"line_number,omitempty"` + // The column number where the function call appears, if available. + // This is important in JavaScript because of its anonymous functions. + ColumnNumber int64 `protobuf:"varint,5,opt,name=column_number,json=columnNumber" json:"column_number,omitempty"` + // The binary module from where the code was loaded. + LoadModule *Module `protobuf:"bytes,6,opt,name=load_module,json=loadModule" json:"load_module,omitempty"` + // The version of the deployed source code (up to 128 bytes). + SourceVersion *TruncatableString `protobuf:"bytes,7,opt,name=source_version,json=sourceVersion" json:"source_version,omitempty"` +} + +func (m *StackTrace_StackFrame) Reset() { *m = StackTrace_StackFrame{} } +func (m *StackTrace_StackFrame) String() string { return proto.CompactTextString(m) } +func (*StackTrace_StackFrame) ProtoMessage() {} +func (*StackTrace_StackFrame) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} } + +func (m *StackTrace_StackFrame) GetFunctionName() *TruncatableString { + if m != nil { + return m.FunctionName + } + return nil +} + +func (m *StackTrace_StackFrame) GetOriginalFunctionName() *TruncatableString { + if m != nil { + return m.OriginalFunctionName + } + return nil +} + +func (m *StackTrace_StackFrame) GetFileName() *TruncatableString { + if m != nil { + return m.FileName + } + return nil +} + +func (m *StackTrace_StackFrame) GetLineNumber() int64 { + if m != nil { + return m.LineNumber + } + return 0 +} + +func (m *StackTrace_StackFrame) GetColumnNumber() int64 { + if m != nil { + return m.ColumnNumber + } + return 0 +} + +func (m *StackTrace_StackFrame) GetLoadModule() *Module { + if m != nil { + return m.LoadModule + } + return nil +} + +func (m *StackTrace_StackFrame) GetSourceVersion() *TruncatableString { + if m != nil { + return m.SourceVersion + } + return nil +} + +// A collection of stack frames, which can be truncated. +type StackTrace_StackFrames struct { + // Stack frames in this call stack. + Frame []*StackTrace_StackFrame `protobuf:"bytes,1,rep,name=frame" json:"frame,omitempty"` + // The number of stack frames that were dropped because there + // were too many stack frames. + // If this value is 0, then no stack frames were dropped. + DroppedFramesCount int32 `protobuf:"varint,2,opt,name=dropped_frames_count,json=droppedFramesCount" json:"dropped_frames_count,omitempty"` +} + +func (m *StackTrace_StackFrames) Reset() { *m = StackTrace_StackFrames{} } +func (m *StackTrace_StackFrames) String() string { return proto.CompactTextString(m) } +func (*StackTrace_StackFrames) ProtoMessage() {} +func (*StackTrace_StackFrames) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 1} } + +func (m *StackTrace_StackFrames) GetFrame() []*StackTrace_StackFrame { + if m != nil { + return m.Frame + } + return nil +} + +func (m *StackTrace_StackFrames) GetDroppedFramesCount() int32 { + if m != nil { + return m.DroppedFramesCount + } + return 0 +} + +// Binary module. +type Module struct { + // For example: main binary, kernel modules, and dynamic libraries + // such as libc.so, sharedlib.so (up to 256 bytes). + Module *TruncatableString `protobuf:"bytes,1,opt,name=module" json:"module,omitempty"` + // A unique identifier for the module, usually a hash of its + // contents (up to 128 bytes). + BuildId *TruncatableString `protobuf:"bytes,2,opt,name=build_id,json=buildId" json:"build_id,omitempty"` +} + +func (m *Module) Reset() { *m = Module{} } +func (m *Module) String() string { return proto.CompactTextString(m) } +func (*Module) ProtoMessage() {} +func (*Module) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *Module) GetModule() *TruncatableString { + if m != nil { + return m.Module + } + return nil +} + +func (m *Module) GetBuildId() *TruncatableString { + if m != nil { + return m.BuildId + } + return nil +} + +// Represents a string that might be shortened to a specified length. +type TruncatableString struct { + // The shortened string. For example, if the original string is 500 + // bytes long and the limit of the string is 128 bytes, then + // `value` contains the first 128 bytes of the 500-byte string. + // + // Truncation always happens on a UTF8 character boundary. If there + // are multi-byte characters in the string, then the length of the + // shortened string might be less than the size limit. + Value string `protobuf:"bytes,1,opt,name=value" json:"value,omitempty"` + // The number of bytes removed from the original string. If this + // value is 0, then the string was not shortened. + TruncatedByteCount int32 `protobuf:"varint,2,opt,name=truncated_byte_count,json=truncatedByteCount" json:"truncated_byte_count,omitempty"` +} + +func (m *TruncatableString) Reset() { *m = TruncatableString{} } +func (m *TruncatableString) String() string { return proto.CompactTextString(m) } +func (*TruncatableString) ProtoMessage() {} +func (*TruncatableString) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *TruncatableString) GetValue() string { + if m != nil { + return m.Value + } + return "" +} + +func (m *TruncatableString) GetTruncatedByteCount() int32 { + if m != nil { + return m.TruncatedByteCount + } + return 0 +} + +func init() { + proto.RegisterType((*Span)(nil), "google.devtools.cloudtrace.v2.Span") + proto.RegisterType((*Span_Attributes)(nil), "google.devtools.cloudtrace.v2.Span.Attributes") + proto.RegisterType((*Span_TimeEvent)(nil), "google.devtools.cloudtrace.v2.Span.TimeEvent") + proto.RegisterType((*Span_TimeEvent_Annotation)(nil), "google.devtools.cloudtrace.v2.Span.TimeEvent.Annotation") + proto.RegisterType((*Span_TimeEvent_MessageEvent)(nil), "google.devtools.cloudtrace.v2.Span.TimeEvent.MessageEvent") + proto.RegisterType((*Span_TimeEvents)(nil), "google.devtools.cloudtrace.v2.Span.TimeEvents") + proto.RegisterType((*Span_Link)(nil), "google.devtools.cloudtrace.v2.Span.Link") + proto.RegisterType((*Span_Links)(nil), "google.devtools.cloudtrace.v2.Span.Links") + proto.RegisterType((*AttributeValue)(nil), "google.devtools.cloudtrace.v2.AttributeValue") + proto.RegisterType((*StackTrace)(nil), "google.devtools.cloudtrace.v2.StackTrace") + proto.RegisterType((*StackTrace_StackFrame)(nil), "google.devtools.cloudtrace.v2.StackTrace.StackFrame") + proto.RegisterType((*StackTrace_StackFrames)(nil), "google.devtools.cloudtrace.v2.StackTrace.StackFrames") + proto.RegisterType((*Module)(nil), "google.devtools.cloudtrace.v2.Module") + proto.RegisterType((*TruncatableString)(nil), "google.devtools.cloudtrace.v2.TruncatableString") + proto.RegisterEnum("google.devtools.cloudtrace.v2.Span_TimeEvent_MessageEvent_Type", Span_TimeEvent_MessageEvent_Type_name, Span_TimeEvent_MessageEvent_Type_value) + proto.RegisterEnum("google.devtools.cloudtrace.v2.Span_Link_Type", Span_Link_Type_name, Span_Link_Type_value) +} + +func init() { proto.RegisterFile("google/devtools/cloudtrace/v2/trace.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 1425 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x57, 0x4b, 0x6f, 0xdb, 0xc6, + 0x16, 0x36, 0xf5, 0xd6, 0x91, 0x6c, 0xc8, 0x13, 0x3b, 0x56, 0x94, 0xe4, 0x26, 0xd7, 0xf7, 0x16, + 0x70, 0x0a, 0x98, 0x0a, 0x94, 0xa4, 0x48, 0xd3, 0x02, 0xa9, 0x1f, 0x72, 0xa4, 0xc4, 0x56, 0x05, + 0x4a, 0x71, 0xd3, 0x34, 0x00, 0x31, 0x22, 0xc7, 0x32, 0x11, 0x8a, 0x24, 0x38, 0x43, 0x17, 0xce, + 0xae, 0xeb, 0xae, 0xbb, 0x29, 0x50, 0x74, 0x59, 0x20, 0xab, 0xfc, 0x8e, 0x2e, 0xba, 0xed, 0x7f, + 0xe9, 0xaa, 0x98, 0x07, 0x49, 0x29, 0x2f, 0xdb, 0xca, 0x6e, 0x66, 0xce, 0xf9, 0x3e, 0x9e, 0x33, + 0x73, 0x5e, 0x84, 0x5b, 0x63, 0xdf, 0x1f, 0xbb, 0xa4, 0x69, 0x93, 0x13, 0xe6, 0xfb, 0x2e, 0x6d, + 0x5a, 0xae, 0x1f, 0xd9, 0x2c, 0xc4, 0x16, 0x69, 0x9e, 0xb4, 0x9a, 0x62, 0xa1, 0x07, 0xa1, 0xcf, + 0x7c, 0x74, 0x5d, 0xaa, 0xea, 0xb1, 0xaa, 0x9e, 0xaa, 0xea, 0x27, 0xad, 0xc6, 0x35, 0xc5, 0x84, + 0x03, 0xa7, 0x89, 0x3d, 0xcf, 0x67, 0x98, 0x39, 0xbe, 0x47, 0x25, 0xb8, 0x71, 0x43, 0x49, 0xc5, + 0x6e, 0x14, 0x1d, 0x35, 0x99, 0x33, 0x21, 0x94, 0xe1, 0x49, 0xa0, 0x14, 0xfe, 0xf3, 0xb6, 0xc2, + 0x8f, 0x21, 0x0e, 0x02, 0x12, 0xc6, 0x04, 0x6b, 0x4a, 0x1e, 0x06, 0x56, 0x93, 0x32, 0xcc, 0x22, + 0x25, 0x58, 0xff, 0x07, 0x41, 0x6e, 0x10, 0x60, 0x0f, 0x21, 0xc8, 0x79, 0x78, 0x42, 0xea, 0xda, + 0x4d, 0x6d, 0xa3, 0x6c, 0x88, 0x35, 0x5a, 0x83, 0x22, 0x0d, 0xb0, 0x67, 0x3a, 0x76, 0x3d, 0x23, + 0x8e, 0x0b, 0x7c, 0xdb, 0xb5, 0xd1, 0xff, 0x61, 0x29, 0xc0, 0x21, 0xf1, 0x98, 0x19, 0xcb, 0xb3, + 0x42, 0x5e, 0x95, 0xa7, 0x03, 0xa9, 0x35, 0x80, 0xaa, 0xed, 0xd0, 0xc0, 0xc5, 0xa7, 0xa6, 0xa0, + 0xce, 0xdd, 0xd4, 0x36, 0x2a, 0xad, 0xdb, 0xfa, 0x47, 0x6f, 0x42, 0x1f, 0x86, 0x91, 0x67, 0x61, + 0x86, 0x47, 0x2e, 0x19, 0xb0, 0xd0, 0xf1, 0xc6, 0x46, 0x45, 0xb1, 0xf4, 0xb8, 0x4d, 0x5f, 0x02, + 0x50, 0x86, 0x43, 0x66, 0xf2, 0x2b, 0xa8, 0xe7, 0x05, 0x65, 0x23, 0xa6, 0x8c, 0xdd, 0xd7, 0x87, + 0xf1, 0xfd, 0x18, 0x65, 0xa1, 0xcd, 0xf7, 0xe8, 0x1e, 0x94, 0x88, 0x67, 0x4b, 0x60, 0xe1, 0x4c, + 0x60, 0x91, 0x78, 0xb6, 0x80, 0xf5, 0x00, 0x30, 0x63, 0xa1, 0x33, 0x8a, 0x18, 0xa1, 0xf5, 0xa2, + 0x00, 0xea, 0x67, 0x38, 0xc1, 0x6f, 0x40, 0xdf, 0x4a, 0x50, 0xc6, 0x14, 0x03, 0x7a, 0x0c, 0x15, + 0xca, 0xb0, 0xf5, 0xd2, 0x14, 0xda, 0xf5, 0x92, 0x20, 0xbc, 0x75, 0x16, 0x21, 0x47, 0x0c, 0xf9, + 0xce, 0x00, 0x9a, 0xac, 0xd1, 0xb7, 0x50, 0xe1, 0xee, 0x98, 0xe4, 0x84, 0x78, 0x8c, 0xd6, 0xcb, + 0xe7, 0x37, 0x8e, 0xbb, 0xd6, 0x16, 0x28, 0x03, 0x58, 0xb2, 0x46, 0x0f, 0x21, 0xef, 0x3a, 0xde, + 0x4b, 0x5a, 0x87, 0xf3, 0x99, 0xc5, 0xa9, 0xf6, 0x39, 0xc0, 0x90, 0x38, 0xf4, 0x39, 0x14, 0x64, + 0x80, 0xd5, 0x2b, 0x82, 0x01, 0xc5, 0x0c, 0x61, 0x60, 0x71, 0x2f, 0x58, 0x44, 0x0d, 0xa5, 0x81, + 0x9e, 0xc1, 0x55, 0x8a, 0x27, 0xc4, 0x0c, 0x42, 0xdf, 0x22, 0x94, 0x9a, 0x98, 0x9a, 0x53, 0x61, + 0x55, 0xaf, 0x7e, 0xe0, 0x8d, 0xb6, 0x7d, 0xdf, 0x3d, 0xc4, 0x6e, 0x44, 0x8c, 0x35, 0x0e, 0xef, + 0x4b, 0xf4, 0x16, 0xed, 0x27, 0xc1, 0x87, 0xda, 0x50, 0xb3, 0x8e, 0x1d, 0xd7, 0x96, 0xf1, 0x69, + 0xf9, 0x91, 0xc7, 0xea, 0x8b, 0x82, 0xee, 0xea, 0x3b, 0x74, 0x5d, 0x8f, 0xdd, 0x69, 0x49, 0xbe, + 0x25, 0x01, 0xe2, 0x0c, 0x3b, 0x1c, 0xd2, 0xf8, 0x2d, 0x03, 0x90, 0xbe, 0x22, 0x22, 0xb0, 0x98, + 0xbc, 0xa3, 0x39, 0xc1, 0x41, 0x5d, 0xbb, 0x99, 0xdd, 0xa8, 0xb4, 0xbe, 0xb9, 0x58, 0x30, 0xa4, + 0xcb, 0x03, 0x1c, 0xb4, 0x3d, 0x16, 0x9e, 0x1a, 0x55, 0x3c, 0x75, 0x84, 0xee, 0x43, 0xdd, 0x0e, + 0xfd, 0x20, 0x20, 0xb6, 0x99, 0x86, 0x8d, 0x72, 0x82, 0xe7, 0x61, 0xde, 0xb8, 0xac, 0xe4, 0x29, + 0xa9, 0xb4, 0xd7, 0x83, 0xe5, 0x77, 0xc8, 0x51, 0x0d, 0xb2, 0x2f, 0xc9, 0xa9, 0x4a, 0x6c, 0xbe, + 0x44, 0x3b, 0x90, 0x3f, 0xe1, 0xfe, 0x0a, 0xb6, 0x4a, 0x6b, 0xf3, 0x0c, 0xfb, 0x13, 0x4a, 0x79, + 0x49, 0x12, 0xfb, 0x20, 0x73, 0x5f, 0x6b, 0xfc, 0x95, 0x87, 0x72, 0x12, 0x48, 0x48, 0x87, 0x9c, + 0xc8, 0x2d, 0xed, 0xcc, 0xdc, 0x12, 0x7a, 0xe8, 0x39, 0x40, 0x5a, 0xea, 0x94, 0x2d, 0xf7, 0x2f, + 0x14, 0xbb, 0xfa, 0x56, 0x82, 0xef, 0x2c, 0x18, 0x53, 0x6c, 0x08, 0xc3, 0xe2, 0x84, 0x50, 0x8a, + 0xc7, 0x2a, 0x37, 0x44, 0x81, 0xaa, 0xb4, 0x1e, 0x5c, 0x8c, 0xfe, 0x40, 0x52, 0x88, 0x4d, 0x67, + 0xc1, 0xa8, 0x4e, 0xa6, 0xf6, 0x8d, 0x37, 0x1a, 0x40, 0xfa, 0x7d, 0x64, 0x40, 0xc5, 0x26, 0xd4, + 0x0a, 0x9d, 0x40, 0xb8, 0xa3, 0xcd, 0x5d, 0xec, 0x52, 0x92, 0xb7, 0x4a, 0x4f, 0xe6, 0x53, 0x4b, + 0x4f, 0xe3, 0x97, 0x0c, 0x54, 0xa7, 0x7d, 0x42, 0x03, 0xc8, 0xb1, 0xd3, 0x40, 0x3e, 0xd9, 0x52, + 0xeb, 0xe1, 0xfc, 0xb7, 0xa3, 0x0f, 0x4f, 0x03, 0x62, 0x08, 0x32, 0xb4, 0x04, 0x19, 0xd5, 0x31, + 0xb2, 0x46, 0xc6, 0xb1, 0xd1, 0x17, 0xb0, 0x16, 0x79, 0x96, 0x3f, 0x09, 0x42, 0x42, 0x29, 0xb1, + 0x4d, 0xea, 0xbc, 0x22, 0xe6, 0xe8, 0x94, 0xbb, 0x94, 0x15, 0x4a, 0xab, 0xd3, 0xe2, 0x81, 0xf3, + 0x8a, 0x6c, 0x73, 0x21, 0x6a, 0xc1, 0xea, 0xfb, 0x51, 0x39, 0x81, 0xba, 0xf4, 0x1e, 0xcc, 0xfa, + 0x5d, 0xc8, 0x71, 0x4b, 0xd0, 0x0a, 0xd4, 0x86, 0xdf, 0xf7, 0xdb, 0xe6, 0xd3, 0xde, 0xa0, 0xdf, + 0xde, 0xe9, 0xee, 0x75, 0xdb, 0xbb, 0xb5, 0x05, 0x54, 0x82, 0xdc, 0xa0, 0xdd, 0x1b, 0xd6, 0x34, + 0x54, 0x85, 0x92, 0xd1, 0xde, 0x69, 0x77, 0x0f, 0xdb, 0xbb, 0xb5, 0xcc, 0x76, 0x51, 0x25, 0x44, + 0xe3, 0x6f, 0x0d, 0x20, 0xad, 0x8c, 0x68, 0x1f, 0x20, 0x2d, 0xaf, 0x2a, 0xdb, 0x37, 0x2f, 0x74, + 0x49, 0x46, 0x39, 0x29, 0xae, 0xe8, 0x01, 0x5c, 0x49, 0xf2, 0x3a, 0x6d, 0xf1, 0x33, 0x89, 0xbd, + 0x16, 0x27, 0x76, 0x2a, 0x17, 0x99, 0x8d, 0x1e, 0xc2, 0xb5, 0x18, 0x3b, 0x13, 0xd7, 0x31, 0x3c, + 0x2b, 0xe0, 0x31, 0xff, 0xf4, 0xcb, 0xa8, 0xd2, 0xf0, 0x6b, 0x06, 0x72, 0xbc, 0x50, 0xa3, 0x2b, + 0x50, 0x12, 0xb6, 0xf2, 0xae, 0x2d, 0x6b, 0x42, 0x51, 0xec, 0xbb, 0xf6, 0x87, 0xfb, 0xfd, 0x96, + 0x0a, 0x93, 0xac, 0x08, 0x93, 0xcd, 0xf3, 0x36, 0x85, 0xe9, 0xa0, 0x98, 0x0d, 0xe5, 0xdc, 0xa7, + 0x86, 0xf2, 0xfa, 0x93, 0x8f, 0x3e, 0xf4, 0x2a, 0x2c, 0xef, 0x74, 0xba, 0xfb, 0xbb, 0xe6, 0x7e, + 0xb7, 0xf7, 0xa4, 0xbd, 0x6b, 0x0e, 0xfa, 0x5b, 0xbd, 0x9a, 0x86, 0x2e, 0x03, 0xea, 0x6f, 0x19, + 0xed, 0xde, 0x70, 0xe6, 0x3c, 0xd3, 0x88, 0x20, 0x2f, 0x9a, 0x18, 0xfa, 0x1a, 0x72, 0xbc, 0x8d, + 0xa9, 0xa7, 0xde, 0x38, 0xaf, 0xa3, 0x86, 0x40, 0x21, 0x1d, 0x2e, 0xc5, 0x8f, 0x24, 0x9a, 0xe1, + 0xcc, 0xd3, 0x2e, 0x2b, 0x91, 0xf8, 0x90, 0x78, 0x93, 0xf5, 0x37, 0x1a, 0x2c, 0xcd, 0x16, 0x57, + 0xf4, 0x14, 0xaa, 0x54, 0x14, 0x02, 0x53, 0x56, 0xe8, 0x39, 0xcb, 0x48, 0x67, 0xc1, 0xa8, 0x48, + 0x1e, 0x49, 0x7b, 0x1d, 0xca, 0x8e, 0xc7, 0xcc, 0xb4, 0xea, 0x67, 0x3b, 0x0b, 0x46, 0xc9, 0xf1, + 0x98, 0x14, 0xdf, 0x00, 0x18, 0xf9, 0xbe, 0xab, 0xe4, 0xfc, 0x95, 0x4b, 0x9d, 0x05, 0xa3, 0x3c, + 0x8a, 0x1b, 0x6d, 0x92, 0x20, 0xeb, 0x7f, 0x14, 0x00, 0xd2, 0x59, 0x04, 0x3d, 0xe3, 0xe6, 0xf2, + 0x59, 0xe6, 0x28, 0xc4, 0x13, 0x42, 0x95, 0xb9, 0xf7, 0xce, 0x3d, 0xcc, 0xc8, 0xe5, 0x9e, 0x00, + 0x1b, 0x72, 0x2c, 0x92, 0x1b, 0xb4, 0x09, 0x97, 0xa6, 0xa6, 0x24, 0xf3, 0x18, 0xd3, 0x63, 0x33, + 0xa9, 0x2a, 0xb5, 0x74, 0x04, 0xea, 0x60, 0x7a, 0xdc, 0xb5, 0x1b, 0x3f, 0xe5, 0x94, 0x5d, 0x02, + 0x8e, 0x9e, 0xc2, 0xe2, 0x51, 0xe4, 0x59, 0x3c, 0x81, 0xcc, 0x64, 0xac, 0x9d, 0xa7, 0x1c, 0x57, + 0x63, 0x1a, 0x31, 0x7c, 0x1e, 0xc1, 0x65, 0x3f, 0x74, 0xc6, 0x8e, 0x87, 0x5d, 0x73, 0x96, 0x3f, + 0x33, 0x27, 0xff, 0x4a, 0xcc, 0xb7, 0x37, 0xfd, 0x9d, 0x03, 0x28, 0x1f, 0x39, 0x2e, 0x91, 0xd4, + 0xd9, 0x39, 0xa9, 0x4b, 0x9c, 0x42, 0xd0, 0xdd, 0x80, 0x8a, 0xeb, 0x78, 0xc4, 0xf4, 0xa2, 0xc9, + 0x88, 0x84, 0xaa, 0x7c, 0x02, 0x3f, 0xea, 0x89, 0x13, 0xf4, 0x3f, 0x58, 0xb4, 0x7c, 0x37, 0x9a, + 0x78, 0xb1, 0x4a, 0x5e, 0xa8, 0x54, 0xe5, 0xa1, 0x52, 0xda, 0x83, 0x8a, 0xeb, 0x63, 0xdb, 0x9c, + 0xf8, 0x76, 0xe4, 0xc6, 0x13, 0xf4, 0x67, 0x67, 0x98, 0x75, 0x20, 0x94, 0x0d, 0xe0, 0x48, 0xb9, + 0x46, 0xdf, 0xc1, 0x12, 0xf5, 0xa3, 0xd0, 0x22, 0xe6, 0x09, 0x09, 0x29, 0xef, 0x95, 0xc5, 0x39, + 0x3d, 0x5c, 0x94, 0x3c, 0x87, 0x92, 0xa6, 0xf1, 0xb3, 0x06, 0x95, 0xa9, 0x78, 0x42, 0x8f, 0x21, + 0x2f, 0xc2, 0x52, 0x65, 0xf3, 0xdd, 0x79, 0xa2, 0xd2, 0x90, 0x14, 0xe8, 0x36, 0xac, 0xc4, 0xa9, + 0x2d, 0x43, 0x7d, 0x26, 0xb7, 0x91, 0x92, 0xc9, 0x0f, 0xcb, 0xe4, 0xfe, 0x5d, 0x83, 0x82, 0xf2, + 0xb8, 0x03, 0x05, 0x75, 0x69, 0xf3, 0x86, 0xa1, 0xc2, 0xa3, 0x27, 0x50, 0x1a, 0x45, 0x7c, 0xae, + 0x55, 0xa9, 0x30, 0x0f, 0x57, 0x51, 0x30, 0x74, 0xed, 0xf5, 0x1f, 0x60, 0xf9, 0x1d, 0x29, 0x5a, + 0x89, 0x67, 0x43, 0xd9, 0x1b, 0xe4, 0x86, 0xbb, 0xcf, 0xa4, 0x2a, 0xb1, 0x45, 0x13, 0x9e, 0x75, + 0x3f, 0x91, 0xf1, 0x26, 0x2c, 0xdc, 0xdf, 0x7e, 0xad, 0xc1, 0x7f, 0x2d, 0x7f, 0xf2, 0x71, 0xeb, + 0xb6, 0x41, 0xdc, 0x77, 0x9f, 0x4f, 0x88, 0x7d, 0xed, 0xf9, 0x23, 0xa5, 0x3c, 0xf6, 0x5d, 0xec, + 0x8d, 0x75, 0x3f, 0x1c, 0x37, 0xc7, 0xc4, 0x13, 0xf3, 0x63, 0x53, 0x8a, 0x70, 0xe0, 0xd0, 0x0f, + 0xfc, 0x6d, 0x7f, 0x95, 0xee, 0x5e, 0x67, 0x56, 0x1f, 0x49, 0xa6, 0x1d, 0x7e, 0xa6, 0xcb, 0x47, + 0x3d, 0x6c, 0xfd, 0x19, 0x9f, 0xbf, 0x10, 0xe7, 0x2f, 0xc4, 0xf9, 0x8b, 0xc3, 0xd6, 0xa8, 0x20, + 0xbe, 0x71, 0xe7, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7b, 0x3c, 0x8a, 0x77, 0xd0, 0x0f, 0x00, + 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/cloudtrace/v2/tracing.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/cloudtrace/v2/tracing.pb.go new file mode 100644 index 0000000..889400e --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/devtools/cloudtrace/v2/tracing.pb.go @@ -0,0 +1,197 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/devtools/cloudtrace/v2/tracing.proto + +package cloudtrace + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf4 "github.com/golang/protobuf/ptypes/empty" +import _ "github.com/golang/protobuf/ptypes/timestamp" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// The request message for the `BatchWriteSpans` method. +type BatchWriteSpansRequest struct { + // Required. The name of the project where the spans belong. The format is + // `projects/[PROJECT_ID]`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // A list of new spans. The span names must not match existing + // spans, or the results are undefined. + Spans []*Span `protobuf:"bytes,2,rep,name=spans" json:"spans,omitempty"` +} + +func (m *BatchWriteSpansRequest) Reset() { *m = BatchWriteSpansRequest{} } +func (m *BatchWriteSpansRequest) String() string { return proto.CompactTextString(m) } +func (*BatchWriteSpansRequest) ProtoMessage() {} +func (*BatchWriteSpansRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *BatchWriteSpansRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *BatchWriteSpansRequest) GetSpans() []*Span { + if m != nil { + return m.Spans + } + return nil +} + +func init() { + proto.RegisterType((*BatchWriteSpansRequest)(nil), "google.devtools.cloudtrace.v2.BatchWriteSpansRequest") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for TraceService service + +type TraceServiceClient interface { + // Sends new spans to new or existing traces. You cannot update + // existing spans. + BatchWriteSpans(ctx context.Context, in *BatchWriteSpansRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) + // Creates a new span. + CreateSpan(ctx context.Context, in *Span, opts ...grpc.CallOption) (*Span, error) +} + +type traceServiceClient struct { + cc *grpc.ClientConn +} + +func NewTraceServiceClient(cc *grpc.ClientConn) TraceServiceClient { + return &traceServiceClient{cc} +} + +func (c *traceServiceClient) BatchWriteSpans(ctx context.Context, in *BatchWriteSpansRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) { + out := new(google_protobuf4.Empty) + err := grpc.Invoke(ctx, "/google.devtools.cloudtrace.v2.TraceService/BatchWriteSpans", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *traceServiceClient) CreateSpan(ctx context.Context, in *Span, opts ...grpc.CallOption) (*Span, error) { + out := new(Span) + err := grpc.Invoke(ctx, "/google.devtools.cloudtrace.v2.TraceService/CreateSpan", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for TraceService service + +type TraceServiceServer interface { + // Sends new spans to new or existing traces. You cannot update + // existing spans. + BatchWriteSpans(context.Context, *BatchWriteSpansRequest) (*google_protobuf4.Empty, error) + // Creates a new span. + CreateSpan(context.Context, *Span) (*Span, error) +} + +func RegisterTraceServiceServer(s *grpc.Server, srv TraceServiceServer) { + s.RegisterService(&_TraceService_serviceDesc, srv) +} + +func _TraceService_BatchWriteSpans_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BatchWriteSpansRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TraceServiceServer).BatchWriteSpans(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.cloudtrace.v2.TraceService/BatchWriteSpans", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TraceServiceServer).BatchWriteSpans(ctx, req.(*BatchWriteSpansRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _TraceService_CreateSpan_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Span) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TraceServiceServer).CreateSpan(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.cloudtrace.v2.TraceService/CreateSpan", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TraceServiceServer).CreateSpan(ctx, req.(*Span)) + } + return interceptor(ctx, in, info, handler) +} + +var _TraceService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.devtools.cloudtrace.v2.TraceService", + HandlerType: (*TraceServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "BatchWriteSpans", + Handler: _TraceService_BatchWriteSpans_Handler, + }, + { + MethodName: "CreateSpan", + Handler: _TraceService_CreateSpan_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/devtools/cloudtrace/v2/tracing.proto", +} + +func init() { proto.RegisterFile("google/devtools/cloudtrace/v2/tracing.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 404 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x52, 0xdd, 0x6a, 0xdb, 0x30, + 0x14, 0x46, 0xde, 0x0f, 0x4c, 0x1b, 0x0c, 0x04, 0x0b, 0xc1, 0xdb, 0x58, 0xe6, 0x0d, 0x96, 0x64, + 0x43, 0x02, 0x8f, 0x5d, 0x2c, 0x63, 0x37, 0x09, 0x23, 0xb7, 0x21, 0x19, 0x19, 0x8c, 0xdc, 0x28, + 0x8e, 0xa6, 0x69, 0xd8, 0x92, 0x67, 0x29, 0x86, 0x52, 0x7a, 0xd3, 0x9b, 0x3e, 0x40, 0xfb, 0x14, + 0xa5, 0xd0, 0xf7, 0xe8, 0x6d, 0x5f, 0xa1, 0x0f, 0x52, 0x24, 0xd9, 0x0d, 0x84, 0x34, 0xc9, 0x9d, + 0xce, 0x39, 0xdf, 0xf9, 0xce, 0xf7, 0x7d, 0x36, 0xfc, 0xc8, 0x95, 0xe2, 0x29, 0x23, 0x0b, 0x56, + 0x1a, 0xa5, 0x52, 0x4d, 0x92, 0x54, 0x2d, 0x17, 0xa6, 0xa0, 0x09, 0x23, 0x65, 0x4c, 0xec, 0x43, + 0x48, 0x8e, 0xf3, 0x42, 0x19, 0x85, 0x5e, 0x7b, 0x30, 0xae, 0xc1, 0x78, 0x05, 0xc6, 0x65, 0x1c, + 0xbe, 0xaa, 0xb8, 0x68, 0x2e, 0x08, 0x95, 0x52, 0x19, 0x6a, 0x84, 0x92, 0xda, 0x2f, 0x87, 0x9d, + 0xdd, 0x97, 0x58, 0x05, 0x7d, 0x59, 0x41, 0x5d, 0x35, 0x5f, 0xfe, 0x21, 0x2c, 0xcb, 0xcd, 0x41, + 0x35, 0x7c, 0xb3, 0x3e, 0x34, 0x22, 0x63, 0xda, 0xd0, 0x2c, 0xf7, 0x80, 0x88, 0xc3, 0x46, 0x9f, + 0x9a, 0xe4, 0xef, 0xaf, 0x42, 0x18, 0x36, 0xc9, 0xa9, 0xd4, 0x63, 0xf6, 0x7f, 0xc9, 0xb4, 0x41, + 0x08, 0x3e, 0x94, 0x34, 0x63, 0x4d, 0xd0, 0x02, 0xed, 0x27, 0x63, 0xf7, 0x46, 0x5f, 0xe1, 0x23, + 0x6d, 0x31, 0xcd, 0xa0, 0xf5, 0xa0, 0xfd, 0x34, 0x7e, 0x87, 0xb7, 0x7a, 0xc4, 0x96, 0x6f, 0xec, + 0x37, 0xe2, 0xcb, 0x00, 0x3e, 0xfb, 0x69, 0x07, 0x13, 0x56, 0x94, 0x22, 0x61, 0xe8, 0x0c, 0xc0, + 0xe7, 0x6b, 0xa7, 0xd1, 0x97, 0x1d, 0x84, 0x9b, 0xa5, 0x86, 0x8d, 0x7a, 0xad, 0xb6, 0x89, 0x7f, + 0xd8, 0x0c, 0xa2, 0xf8, 0xf8, 0xfa, 0xe6, 0x34, 0xf8, 0x14, 0x7d, 0xb0, 0x99, 0x1d, 0x5a, 0x07, + 0xdf, 0xf3, 0x42, 0xfd, 0x63, 0x89, 0xd1, 0xa4, 0x7b, 0xe4, 0x53, 0xd4, 0xbd, 0xf9, 0x1d, 0x69, + 0x0f, 0x74, 0xd1, 0x09, 0x80, 0x70, 0x50, 0x30, 0xea, 0x4f, 0xa0, 0x7d, 0x2c, 0x86, 0xfb, 0x80, + 0x22, 0xe2, 0xc4, 0x74, 0xa2, 0xf7, 0x9b, 0xc4, 0x54, 0x5a, 0xac, 0x2a, 0x17, 0x57, 0x0f, 0x74, + 0xfb, 0x17, 0x00, 0xbe, 0x4d, 0x54, 0xb6, 0x9d, 0xbb, 0xef, 0x42, 0x15, 0x92, 0x8f, 0xac, 0xf5, + 0x11, 0xf8, 0x3d, 0xac, 0xe0, 0x5c, 0xa5, 0x54, 0x72, 0xac, 0x0a, 0x4e, 0x38, 0x93, 0x2e, 0x18, + 0xe2, 0x47, 0x34, 0x17, 0xfa, 0x9e, 0x1f, 0xeb, 0xdb, 0xaa, 0x3a, 0x0f, 0x5e, 0x0c, 0x3d, 0xd3, + 0xc0, 0xf6, 0xb0, 0xfb, 0x76, 0x78, 0x1a, 0x5f, 0xd5, 0xfd, 0x99, 0xeb, 0xcf, 0x5c, 0x7f, 0x36, + 0x8d, 0xe7, 0x8f, 0xdd, 0x8d, 0xcf, 0xb7, 0x01, 0x00, 0x00, 0xff, 0xff, 0xbd, 0x94, 0x51, 0x1d, + 0x25, 0x03, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/containeranalysis/v1alpha1/bill_of_materials.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/containeranalysis/v1alpha1/bill_of_materials.pb.go new file mode 100644 index 0000000..9773761 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/devtools/containeranalysis/v1alpha1/bill_of_materials.pb.go @@ -0,0 +1,329 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/devtools/containeranalysis/v1alpha1/bill_of_materials.proto + +/* +Package containeranalysis is a generated protocol buffer package. + +It is generated from these files: + google/devtools/containeranalysis/v1alpha1/bill_of_materials.proto + google/devtools/containeranalysis/v1alpha1/containeranalysis.proto + google/devtools/containeranalysis/v1alpha1/image_basis.proto + google/devtools/containeranalysis/v1alpha1/package_vulnerability.proto + google/devtools/containeranalysis/v1alpha1/provenance.proto + google/devtools/containeranalysis/v1alpha1/source_context.proto + +It has these top-level messages: + PackageManager + Occurrence + Note + Deployable + Discovery + BuildType + BuildSignature + BuildDetails + GetOccurrenceRequest + ListOccurrencesRequest + ListOccurrencesResponse + DeleteOccurrenceRequest + CreateOccurrenceRequest + UpdateOccurrenceRequest + GetNoteRequest + GetOccurrenceNoteRequest + ListNotesRequest + ListNotesResponse + DeleteNoteRequest + CreateNoteRequest + UpdateNoteRequest + ListNoteOccurrencesRequest + ListNoteOccurrencesResponse + OperationMetadata + GetVulnzOccurrencesSummaryRequest + GetVulnzOccurrencesSummaryResponse + DockerImage + VulnerabilityType + BuildProvenance + Source + FileHashes + Hash + StorageSource + RepoSource + Command + Artifact + SourceContext + AliasContext + CloudRepoSourceContext + GerritSourceContext + GitSourceContext + RepoId + ProjectRepoId +*/ +package containeranalysis + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Instruction set architectures supported by various package managers. +type PackageManager_Architecture int32 + +const ( + // Unknown architecture + PackageManager_ARCHITECTURE_UNSPECIFIED PackageManager_Architecture = 0 + // X86 architecture + PackageManager_X86 PackageManager_Architecture = 1 + // X64 architecture + PackageManager_X64 PackageManager_Architecture = 2 +) + +var PackageManager_Architecture_name = map[int32]string{ + 0: "ARCHITECTURE_UNSPECIFIED", + 1: "X86", + 2: "X64", +} +var PackageManager_Architecture_value = map[string]int32{ + "ARCHITECTURE_UNSPECIFIED": 0, + "X86": 1, + "X64": 2, +} + +func (x PackageManager_Architecture) String() string { + return proto.EnumName(PackageManager_Architecture_name, int32(x)) +} +func (PackageManager_Architecture) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{0, 0} +} + +// PackageManager provides metadata about available / installed packages. +type PackageManager struct { +} + +func (m *PackageManager) Reset() { *m = PackageManager{} } +func (m *PackageManager) String() string { return proto.CompactTextString(m) } +func (*PackageManager) ProtoMessage() {} +func (*PackageManager) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +// This represents a particular channel of distribution for a given package. +// e.g. Debian's jessie-backports dpkg mirror +type PackageManager_Distribution struct { + // The cpe_uri in [cpe format](https://cpe.mitre.org/specification/) + // denoting the package manager version distributing a package. + CpeUri string `protobuf:"bytes,1,opt,name=cpe_uri,json=cpeUri" json:"cpe_uri,omitempty"` + // The CPU architecture for which packages in this distribution + // channel were built + Architecture PackageManager_Architecture `protobuf:"varint,2,opt,name=architecture,enum=google.devtools.containeranalysis.v1alpha1.PackageManager_Architecture" json:"architecture,omitempty"` + // The latest available version of this package in + // this distribution channel. + LatestVersion *VulnerabilityType_Version `protobuf:"bytes,3,opt,name=latest_version,json=latestVersion" json:"latest_version,omitempty"` + // A freeform string denoting the maintainer of this package. + Maintainer string `protobuf:"bytes,4,opt,name=maintainer" json:"maintainer,omitempty"` + // The distribution channel-specific homepage for this package. + Url string `protobuf:"bytes,6,opt,name=url" json:"url,omitempty"` + // The distribution channel-specific description of this package. + Description string `protobuf:"bytes,7,opt,name=description" json:"description,omitempty"` +} + +func (m *PackageManager_Distribution) Reset() { *m = PackageManager_Distribution{} } +func (m *PackageManager_Distribution) String() string { return proto.CompactTextString(m) } +func (*PackageManager_Distribution) ProtoMessage() {} +func (*PackageManager_Distribution) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 0} } + +func (m *PackageManager_Distribution) GetCpeUri() string { + if m != nil { + return m.CpeUri + } + return "" +} + +func (m *PackageManager_Distribution) GetArchitecture() PackageManager_Architecture { + if m != nil { + return m.Architecture + } + return PackageManager_ARCHITECTURE_UNSPECIFIED +} + +func (m *PackageManager_Distribution) GetLatestVersion() *VulnerabilityType_Version { + if m != nil { + return m.LatestVersion + } + return nil +} + +func (m *PackageManager_Distribution) GetMaintainer() string { + if m != nil { + return m.Maintainer + } + return "" +} + +func (m *PackageManager_Distribution) GetUrl() string { + if m != nil { + return m.Url + } + return "" +} + +func (m *PackageManager_Distribution) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +// An occurrence of a particular package installation found within a +// system's filesystem. +// e.g. glibc was found in /var/lib/dpkg/status +type PackageManager_Location struct { + // The cpe_uri in [cpe format](https://cpe.mitre.org/specification/) + // denoting the package manager version distributing a package. + CpeUri string `protobuf:"bytes,1,opt,name=cpe_uri,json=cpeUri" json:"cpe_uri,omitempty"` + // The version installed at this location. + Version *VulnerabilityType_Version `protobuf:"bytes,2,opt,name=version" json:"version,omitempty"` + // The path from which we gathered that this package/version is installed. + Path string `protobuf:"bytes,3,opt,name=path" json:"path,omitempty"` +} + +func (m *PackageManager_Location) Reset() { *m = PackageManager_Location{} } +func (m *PackageManager_Location) String() string { return proto.CompactTextString(m) } +func (*PackageManager_Location) ProtoMessage() {} +func (*PackageManager_Location) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 1} } + +func (m *PackageManager_Location) GetCpeUri() string { + if m != nil { + return m.CpeUri + } + return "" +} + +func (m *PackageManager_Location) GetVersion() *VulnerabilityType_Version { + if m != nil { + return m.Version + } + return nil +} + +func (m *PackageManager_Location) GetPath() string { + if m != nil { + return m.Path + } + return "" +} + +// This represents a particular package that is distributed over +// various channels. +// e.g. glibc (aka libc6) is distributed by many, at various versions. +type PackageManager_Package struct { + // The name of the package. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The various channels by which a package is distributed. + Distribution []*PackageManager_Distribution `protobuf:"bytes,10,rep,name=distribution" json:"distribution,omitempty"` +} + +func (m *PackageManager_Package) Reset() { *m = PackageManager_Package{} } +func (m *PackageManager_Package) String() string { return proto.CompactTextString(m) } +func (*PackageManager_Package) ProtoMessage() {} +func (*PackageManager_Package) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 2} } + +func (m *PackageManager_Package) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *PackageManager_Package) GetDistribution() []*PackageManager_Distribution { + if m != nil { + return m.Distribution + } + return nil +} + +// This represents how a particular software package may be installed on +// a system. +type PackageManager_Installation struct { + // Output only. The name of the installed package. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // All of the places within the filesystem versions of this package + // have been found. + Location []*PackageManager_Location `protobuf:"bytes,2,rep,name=location" json:"location,omitempty"` +} + +func (m *PackageManager_Installation) Reset() { *m = PackageManager_Installation{} } +func (m *PackageManager_Installation) String() string { return proto.CompactTextString(m) } +func (*PackageManager_Installation) ProtoMessage() {} +func (*PackageManager_Installation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 3} } + +func (m *PackageManager_Installation) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *PackageManager_Installation) GetLocation() []*PackageManager_Location { + if m != nil { + return m.Location + } + return nil +} + +func init() { + proto.RegisterType((*PackageManager)(nil), "google.devtools.containeranalysis.v1alpha1.PackageManager") + proto.RegisterType((*PackageManager_Distribution)(nil), "google.devtools.containeranalysis.v1alpha1.PackageManager.Distribution") + proto.RegisterType((*PackageManager_Location)(nil), "google.devtools.containeranalysis.v1alpha1.PackageManager.Location") + proto.RegisterType((*PackageManager_Package)(nil), "google.devtools.containeranalysis.v1alpha1.PackageManager.Package") + proto.RegisterType((*PackageManager_Installation)(nil), "google.devtools.containeranalysis.v1alpha1.PackageManager.Installation") + proto.RegisterEnum("google.devtools.containeranalysis.v1alpha1.PackageManager_Architecture", PackageManager_Architecture_name, PackageManager_Architecture_value) +} + +func init() { + proto.RegisterFile("google/devtools/containeranalysis/v1alpha1/bill_of_materials.proto", fileDescriptor0) +} + +var fileDescriptor0 = []byte{ + // 522 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x93, 0xd1, 0x8a, 0xd3, 0x4e, + 0x14, 0xc6, 0xff, 0x49, 0x97, 0x76, 0xf7, 0xb4, 0xff, 0x52, 0xe6, 0xc6, 0x10, 0x16, 0x29, 0x0b, + 0x42, 0xf1, 0x22, 0x61, 0x57, 0x59, 0x04, 0x41, 0xe8, 0x76, 0xbb, 0x6b, 0x41, 0xa5, 0xc4, 0x76, + 0x11, 0xbd, 0x08, 0xa7, 0xe9, 0x98, 0x0e, 0x3b, 0x9d, 0x09, 0x93, 0x49, 0xa1, 0xd7, 0xde, 0x89, + 0x0f, 0xe0, 0xb5, 0x0f, 0xa5, 0xaf, 0x23, 0x99, 0x24, 0x92, 0xb2, 0x2a, 0xbb, 0xac, 0x77, 0x27, + 0xf3, 0x85, 0xdf, 0xf9, 0xce, 0x77, 0x66, 0xe0, 0x2c, 0x96, 0x32, 0xe6, 0xd4, 0x5f, 0xd2, 0x8d, + 0x96, 0x92, 0xa7, 0x7e, 0x24, 0x85, 0x46, 0x26, 0xa8, 0x42, 0x81, 0x7c, 0x9b, 0xb2, 0xd4, 0xdf, + 0x1c, 0x23, 0x4f, 0x56, 0x78, 0xec, 0x2f, 0x18, 0xe7, 0xa1, 0xfc, 0x18, 0xae, 0x51, 0x53, 0xc5, + 0x90, 0xa7, 0x5e, 0xa2, 0xa4, 0x96, 0xe4, 0x71, 0xc1, 0xf0, 0x2a, 0x86, 0x77, 0x83, 0xe1, 0x55, + 0x0c, 0xf7, 0xb0, 0xec, 0x87, 0x09, 0xf3, 0x51, 0x08, 0xa9, 0x51, 0x33, 0x29, 0x4a, 0x92, 0x7b, + 0x71, 0x07, 0x37, 0x09, 0x46, 0xd7, 0x18, 0xd3, 0x70, 0x93, 0xf1, 0x5c, 0x5f, 0x30, 0xce, 0xf4, + 0xb6, 0xe0, 0x1c, 0xfd, 0x68, 0x42, 0x77, 0x5a, 0xe8, 0xaf, 0x51, 0x60, 0x4c, 0x95, 0xfb, 0xdd, + 0x86, 0xce, 0x39, 0x4b, 0xb5, 0x62, 0x8b, 0x2c, 0x6f, 0x49, 0x1e, 0x40, 0x2b, 0x4a, 0x68, 0x98, + 0x29, 0xe6, 0x58, 0x7d, 0x6b, 0x70, 0x10, 0x34, 0xa3, 0x84, 0xce, 0x15, 0x23, 0xd7, 0xd0, 0x41, + 0x15, 0xad, 0x98, 0xa6, 0x91, 0xce, 0x14, 0x75, 0xec, 0xbe, 0x35, 0xe8, 0x9e, 0x5c, 0x7a, 0xb7, + 0x9f, 0xd2, 0xdb, 0xed, 0xed, 0x0d, 0x6b, 0xb8, 0x60, 0x07, 0x4e, 0x38, 0x74, 0x39, 0x6a, 0x9a, + 0xea, 0x70, 0x43, 0x55, 0xca, 0xa4, 0x70, 0x1a, 0x7d, 0x6b, 0xd0, 0x3e, 0x19, 0xdf, 0xa5, 0xdd, + 0x55, 0x3d, 0x82, 0xd9, 0x36, 0xa1, 0xde, 0x55, 0x01, 0x0b, 0xfe, 0x2f, 0xe0, 0xe5, 0x27, 0x79, + 0x08, 0xb0, 0x46, 0x56, 0x72, 0x9c, 0x3d, 0x33, 0x76, 0xed, 0x84, 0xf4, 0xa0, 0x91, 0x29, 0xee, + 0x34, 0x8d, 0x90, 0x97, 0xa4, 0x0f, 0xed, 0x25, 0x4d, 0x23, 0xc5, 0x92, 0x3c, 0x34, 0xa7, 0x65, + 0x94, 0xfa, 0x91, 0xfb, 0xd5, 0x82, 0xfd, 0x57, 0x32, 0xc2, 0xbf, 0x87, 0x1a, 0x42, 0xab, 0x1a, + 0xd0, 0xfe, 0x97, 0x03, 0x56, 0x54, 0x42, 0x60, 0x2f, 0x41, 0xbd, 0x32, 0xf1, 0x1d, 0x04, 0xa6, + 0x76, 0x3f, 0x5b, 0xd0, 0x2a, 0x57, 0x91, 0xeb, 0x02, 0xd7, 0xb4, 0xb4, 0x65, 0xea, 0x7c, 0xd3, + 0xcb, 0xda, 0x95, 0x70, 0xa0, 0xdf, 0x18, 0xb4, 0xef, 0xb5, 0xe9, 0xfa, 0x0d, 0x0b, 0x76, 0xe0, + 0xee, 0x27, 0x0b, 0x3a, 0x13, 0x91, 0x6a, 0xe4, 0xbc, 0xc8, 0xea, 0x77, 0x8e, 0x42, 0xd8, 0xe7, + 0x65, 0x96, 0x8e, 0x6d, 0xdc, 0x8c, 0xee, 0xe1, 0xa6, 0x5a, 0x4b, 0xf0, 0x0b, 0x7a, 0xf4, 0x02, + 0x3a, 0xf5, 0xdb, 0x48, 0x0e, 0xc1, 0x19, 0x06, 0xa3, 0x97, 0x93, 0xd9, 0x78, 0x34, 0x9b, 0x07, + 0xe3, 0x70, 0xfe, 0xe6, 0xed, 0x74, 0x3c, 0x9a, 0x5c, 0x4c, 0xc6, 0xe7, 0xbd, 0xff, 0x48, 0x0b, + 0x1a, 0xef, 0x9e, 0x9d, 0xf6, 0x2c, 0x53, 0x9c, 0x3e, 0xed, 0xd9, 0x67, 0x5f, 0x2c, 0x78, 0x14, + 0xc9, 0x75, 0x65, 0xea, 0xcf, 0x5e, 0xa6, 0xd6, 0xfb, 0x0f, 0xe5, 0x4f, 0xb1, 0xe4, 0x28, 0x62, + 0x4f, 0xaa, 0xd8, 0x8f, 0xa9, 0x30, 0x2f, 0xd4, 0x2f, 0x24, 0x4c, 0x58, 0x7a, 0x9b, 0xc7, 0xfe, + 0xfc, 0x86, 0xf4, 0xcd, 0x6e, 0x5c, 0x8e, 0x86, 0x8b, 0xa6, 0xa1, 0x3d, 0xf9, 0x19, 0x00, 0x00, + 0xff, 0xff, 0xfa, 0x4f, 0xa4, 0x56, 0xc7, 0x04, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/containeranalysis/v1alpha1/containeranalysis.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/containeranalysis/v1alpha1/containeranalysis.pb.go new file mode 100644 index 0000000..5c051b3 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/devtools/containeranalysis/v1alpha1/containeranalysis.pb.go @@ -0,0 +1,2526 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/devtools/containeranalysis/v1alpha1/containeranalysis.proto + +package containeranalysis + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_iam_v11 "google.golang.org/genproto/googleapis/iam/v1" +import google_iam_v1 "google.golang.org/genproto/googleapis/iam/v1" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import _ "github.com/golang/protobuf/ptypes/any" +import google_protobuf3 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf4 "google.golang.org/genproto/protobuf/field_mask" +import google_protobuf1 "github.com/golang/protobuf/ptypes/timestamp" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This must be 1:1 with members of our oneofs, it can be used for filtering +// Note and Occurrence on their kind. +type Note_Kind int32 + +const ( + // Unknown + Note_KIND_UNSPECIFIED Note_Kind = 0 + // The note and occurrence represent a package vulnerability. + Note_PACKAGE_VULNERABILITY Note_Kind = 2 + // The note and occurrence assert build provenance. + Note_BUILD_DETAILS Note_Kind = 3 + // This represents an image basis relationship. + Note_IMAGE_BASIS Note_Kind = 4 + // This represents a package installed via a package manager. + Note_PACKAGE_MANAGER Note_Kind = 5 + // The note and occurrence track deployment events. + Note_DEPLOYABLE Note_Kind = 6 + // The note and occurrence track the initial discovery status of a resource. + Note_DISCOVERY Note_Kind = 7 +) + +var Note_Kind_name = map[int32]string{ + 0: "KIND_UNSPECIFIED", + 2: "PACKAGE_VULNERABILITY", + 3: "BUILD_DETAILS", + 4: "IMAGE_BASIS", + 5: "PACKAGE_MANAGER", + 6: "DEPLOYABLE", + 7: "DISCOVERY", +} +var Note_Kind_value = map[string]int32{ + "KIND_UNSPECIFIED": 0, + "PACKAGE_VULNERABILITY": 2, + "BUILD_DETAILS": 3, + "IMAGE_BASIS": 4, + "PACKAGE_MANAGER": 5, + "DEPLOYABLE": 6, + "DISCOVERY": 7, +} + +func (x Note_Kind) String() string { + return proto.EnumName(Note_Kind_name, int32(x)) +} +func (Note_Kind) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{1, 0} } + +// Types of platforms. +type Deployable_Deployment_Platform int32 + +const ( + // Unknown + Deployable_Deployment_PLATFORM_UNSPECIFIED Deployable_Deployment_Platform = 0 + // Google Container Engine + Deployable_Deployment_GKE Deployable_Deployment_Platform = 1 + // Google App Engine: Flexible Environment + Deployable_Deployment_FLEX Deployable_Deployment_Platform = 2 + // Custom user-defined platform + Deployable_Deployment_CUSTOM Deployable_Deployment_Platform = 3 +) + +var Deployable_Deployment_Platform_name = map[int32]string{ + 0: "PLATFORM_UNSPECIFIED", + 1: "GKE", + 2: "FLEX", + 3: "CUSTOM", +} +var Deployable_Deployment_Platform_value = map[string]int32{ + "PLATFORM_UNSPECIFIED": 0, + "GKE": 1, + "FLEX": 2, + "CUSTOM": 3, +} + +func (x Deployable_Deployment_Platform) String() string { + return proto.EnumName(Deployable_Deployment_Platform_name, int32(x)) +} +func (Deployable_Deployment_Platform) EnumDescriptor() ([]byte, []int) { + return fileDescriptor1, []int{2, 0, 0} +} + +// Public key formats +type BuildSignature_KeyType int32 + +const ( + // `KeyType` is not set. + BuildSignature_KEY_TYPE_UNSPECIFIED BuildSignature_KeyType = 0 + // `PGP ASCII Armored` public key. + BuildSignature_PGP_ASCII_ARMORED BuildSignature_KeyType = 1 + // `PKIX PEM` public key. + BuildSignature_PKIX_PEM BuildSignature_KeyType = 2 +) + +var BuildSignature_KeyType_name = map[int32]string{ + 0: "KEY_TYPE_UNSPECIFIED", + 1: "PGP_ASCII_ARMORED", + 2: "PKIX_PEM", +} +var BuildSignature_KeyType_value = map[string]int32{ + "KEY_TYPE_UNSPECIFIED": 0, + "PGP_ASCII_ARMORED": 1, + "PKIX_PEM": 2, +} + +func (x BuildSignature_KeyType) String() string { + return proto.EnumName(BuildSignature_KeyType_name, int32(x)) +} +func (BuildSignature_KeyType) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{5, 0} } + +// `Occurrence` includes information about analysis occurrences for an image. +type Occurrence struct { + // Output only. The name of the `Occurrence` in the form + // "projects/{project_id}/occurrences/{OCCURRENCE_ID}" + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The unique URL of the image or the container for which the `Occurrence` + // applies. For example, https://gcr.io/project/image@sha256:foo This field + // can be used as a filter in list requests. + ResourceUrl string `protobuf:"bytes,2,opt,name=resource_url,json=resourceUrl" json:"resource_url,omitempty"` + // An analysis note associated with this image, in the form + // "providers/{provider_id}/notes/{NOTE_ID}" + // This field can be used as a filter in list requests. + NoteName string `protobuf:"bytes,3,opt,name=note_name,json=noteName" json:"note_name,omitempty"` + // Output only. This explicitly denotes which of the `Occurrence` details are + // specified. This field can be used as a filter in list requests. + Kind Note_Kind `protobuf:"varint,6,opt,name=kind,enum=google.devtools.containeranalysis.v1alpha1.Note_Kind" json:"kind,omitempty"` + // Describes the details of the vulnerability `Note` found in this resource. + // + // Types that are valid to be assigned to Details: + // *Occurrence_VulnerabilityDetails + // *Occurrence_BuildDetails + // *Occurrence_DerivedImage + // *Occurrence_Installation + // *Occurrence_Deployment + // *Occurrence_Discovered + Details isOccurrence_Details `protobuf_oneof:"details"` + // A description of actions that can be taken to remedy the `Note` + Remediation string `protobuf:"bytes,5,opt,name=remediation" json:"remediation,omitempty"` + // Output only. The time this `Occurrence` was created. + CreateTime *google_protobuf1.Timestamp `protobuf:"bytes,9,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // Output only. The time this `Occurrence` was last updated. + UpdateTime *google_protobuf1.Timestamp `protobuf:"bytes,10,opt,name=update_time,json=updateTime" json:"update_time,omitempty"` +} + +func (m *Occurrence) Reset() { *m = Occurrence{} } +func (m *Occurrence) String() string { return proto.CompactTextString(m) } +func (*Occurrence) ProtoMessage() {} +func (*Occurrence) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +type isOccurrence_Details interface { + isOccurrence_Details() +} + +type Occurrence_VulnerabilityDetails struct { + VulnerabilityDetails *VulnerabilityType_VulnerabilityDetails `protobuf:"bytes,8,opt,name=vulnerability_details,json=vulnerabilityDetails,oneof"` +} +type Occurrence_BuildDetails struct { + BuildDetails *BuildDetails `protobuf:"bytes,7,opt,name=build_details,json=buildDetails,oneof"` +} +type Occurrence_DerivedImage struct { + DerivedImage *DockerImage_Derived `protobuf:"bytes,11,opt,name=derived_image,json=derivedImage,oneof"` +} +type Occurrence_Installation struct { + Installation *PackageManager_Installation `protobuf:"bytes,12,opt,name=installation,oneof"` +} +type Occurrence_Deployment struct { + Deployment *Deployable_Deployment `protobuf:"bytes,14,opt,name=deployment,oneof"` +} +type Occurrence_Discovered struct { + Discovered *Discovery_Discovered `protobuf:"bytes,15,opt,name=discovered,oneof"` +} + +func (*Occurrence_VulnerabilityDetails) isOccurrence_Details() {} +func (*Occurrence_BuildDetails) isOccurrence_Details() {} +func (*Occurrence_DerivedImage) isOccurrence_Details() {} +func (*Occurrence_Installation) isOccurrence_Details() {} +func (*Occurrence_Deployment) isOccurrence_Details() {} +func (*Occurrence_Discovered) isOccurrence_Details() {} + +func (m *Occurrence) GetDetails() isOccurrence_Details { + if m != nil { + return m.Details + } + return nil +} + +func (m *Occurrence) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Occurrence) GetResourceUrl() string { + if m != nil { + return m.ResourceUrl + } + return "" +} + +func (m *Occurrence) GetNoteName() string { + if m != nil { + return m.NoteName + } + return "" +} + +func (m *Occurrence) GetKind() Note_Kind { + if m != nil { + return m.Kind + } + return Note_KIND_UNSPECIFIED +} + +func (m *Occurrence) GetVulnerabilityDetails() *VulnerabilityType_VulnerabilityDetails { + if x, ok := m.GetDetails().(*Occurrence_VulnerabilityDetails); ok { + return x.VulnerabilityDetails + } + return nil +} + +func (m *Occurrence) GetBuildDetails() *BuildDetails { + if x, ok := m.GetDetails().(*Occurrence_BuildDetails); ok { + return x.BuildDetails + } + return nil +} + +func (m *Occurrence) GetDerivedImage() *DockerImage_Derived { + if x, ok := m.GetDetails().(*Occurrence_DerivedImage); ok { + return x.DerivedImage + } + return nil +} + +func (m *Occurrence) GetInstallation() *PackageManager_Installation { + if x, ok := m.GetDetails().(*Occurrence_Installation); ok { + return x.Installation + } + return nil +} + +func (m *Occurrence) GetDeployment() *Deployable_Deployment { + if x, ok := m.GetDetails().(*Occurrence_Deployment); ok { + return x.Deployment + } + return nil +} + +func (m *Occurrence) GetDiscovered() *Discovery_Discovered { + if x, ok := m.GetDetails().(*Occurrence_Discovered); ok { + return x.Discovered + } + return nil +} + +func (m *Occurrence) GetRemediation() string { + if m != nil { + return m.Remediation + } + return "" +} + +func (m *Occurrence) GetCreateTime() *google_protobuf1.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *Occurrence) GetUpdateTime() *google_protobuf1.Timestamp { + if m != nil { + return m.UpdateTime + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Occurrence) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Occurrence_OneofMarshaler, _Occurrence_OneofUnmarshaler, _Occurrence_OneofSizer, []interface{}{ + (*Occurrence_VulnerabilityDetails)(nil), + (*Occurrence_BuildDetails)(nil), + (*Occurrence_DerivedImage)(nil), + (*Occurrence_Installation)(nil), + (*Occurrence_Deployment)(nil), + (*Occurrence_Discovered)(nil), + } +} + +func _Occurrence_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Occurrence) + // details + switch x := m.Details.(type) { + case *Occurrence_VulnerabilityDetails: + b.EncodeVarint(8<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.VulnerabilityDetails); err != nil { + return err + } + case *Occurrence_BuildDetails: + b.EncodeVarint(7<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.BuildDetails); err != nil { + return err + } + case *Occurrence_DerivedImage: + b.EncodeVarint(11<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DerivedImage); err != nil { + return err + } + case *Occurrence_Installation: + b.EncodeVarint(12<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Installation); err != nil { + return err + } + case *Occurrence_Deployment: + b.EncodeVarint(14<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Deployment); err != nil { + return err + } + case *Occurrence_Discovered: + b.EncodeVarint(15<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Discovered); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Occurrence.Details has unexpected type %T", x) + } + return nil +} + +func _Occurrence_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Occurrence) + switch tag { + case 8: // details.vulnerability_details + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(VulnerabilityType_VulnerabilityDetails) + err := b.DecodeMessage(msg) + m.Details = &Occurrence_VulnerabilityDetails{msg} + return true, err + case 7: // details.build_details + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(BuildDetails) + err := b.DecodeMessage(msg) + m.Details = &Occurrence_BuildDetails{msg} + return true, err + case 11: // details.derived_image + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(DockerImage_Derived) + err := b.DecodeMessage(msg) + m.Details = &Occurrence_DerivedImage{msg} + return true, err + case 12: // details.installation + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PackageManager_Installation) + err := b.DecodeMessage(msg) + m.Details = &Occurrence_Installation{msg} + return true, err + case 14: // details.deployment + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Deployable_Deployment) + err := b.DecodeMessage(msg) + m.Details = &Occurrence_Deployment{msg} + return true, err + case 15: // details.discovered + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Discovery_Discovered) + err := b.DecodeMessage(msg) + m.Details = &Occurrence_Discovered{msg} + return true, err + default: + return false, nil + } +} + +func _Occurrence_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Occurrence) + // details + switch x := m.Details.(type) { + case *Occurrence_VulnerabilityDetails: + s := proto.Size(x.VulnerabilityDetails) + n += proto.SizeVarint(8<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Occurrence_BuildDetails: + s := proto.Size(x.BuildDetails) + n += proto.SizeVarint(7<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Occurrence_DerivedImage: + s := proto.Size(x.DerivedImage) + n += proto.SizeVarint(11<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Occurrence_Installation: + s := proto.Size(x.Installation) + n += proto.SizeVarint(12<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Occurrence_Deployment: + s := proto.Size(x.Deployment) + n += proto.SizeVarint(14<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Occurrence_Discovered: + s := proto.Size(x.Discovered) + n += proto.SizeVarint(15<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Provides a detailed description of a `Note`. +type Note struct { + // The name of the note in the form + // "providers/{provider_id}/notes/{NOTE_ID}" + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // A one sentence description of this `Note`. + ShortDescription string `protobuf:"bytes,3,opt,name=short_description,json=shortDescription" json:"short_description,omitempty"` + // A detailed description of this `Note`. + LongDescription string `protobuf:"bytes,4,opt,name=long_description,json=longDescription" json:"long_description,omitempty"` + // Output only. This explicitly denotes which kind of note is specified. This + // field can be used as a filter in list requests. + Kind Note_Kind `protobuf:"varint,9,opt,name=kind,enum=google.devtools.containeranalysis.v1alpha1.Note_Kind" json:"kind,omitempty"` + // The type of note. + // + // Types that are valid to be assigned to NoteType: + // *Note_VulnerabilityType + // *Note_BuildType + // *Note_BaseImage + // *Note_Package + // *Note_Deployable + // *Note_Discovery + NoteType isNote_NoteType `protobuf_oneof:"note_type"` + // URLs associated with this note + RelatedUrl []*Note_RelatedUrl `protobuf:"bytes,7,rep,name=related_url,json=relatedUrl" json:"related_url,omitempty"` + // Time of expiration for this note, null if note does not expire. + ExpirationTime *google_protobuf1.Timestamp `protobuf:"bytes,10,opt,name=expiration_time,json=expirationTime" json:"expiration_time,omitempty"` + // Output only. The time this note was created. This field can be used as a + // filter in list requests. + CreateTime *google_protobuf1.Timestamp `protobuf:"bytes,11,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // Output only. The time this note was last updated. This field can be used as + // a filter in list requests. + UpdateTime *google_protobuf1.Timestamp `protobuf:"bytes,12,opt,name=update_time,json=updateTime" json:"update_time,omitempty"` +} + +func (m *Note) Reset() { *m = Note{} } +func (m *Note) String() string { return proto.CompactTextString(m) } +func (*Note) ProtoMessage() {} +func (*Note) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +type isNote_NoteType interface { + isNote_NoteType() +} + +type Note_VulnerabilityType struct { + VulnerabilityType *VulnerabilityType `protobuf:"bytes,6,opt,name=vulnerability_type,json=vulnerabilityType,oneof"` +} +type Note_BuildType struct { + BuildType *BuildType `protobuf:"bytes,8,opt,name=build_type,json=buildType,oneof"` +} +type Note_BaseImage struct { + BaseImage *DockerImage_Basis `protobuf:"bytes,13,opt,name=base_image,json=baseImage,oneof"` +} +type Note_Package struct { + Package *PackageManager_Package `protobuf:"bytes,14,opt,name=package,oneof"` +} +type Note_Deployable struct { + Deployable *Deployable `protobuf:"bytes,17,opt,name=deployable,oneof"` +} +type Note_Discovery struct { + Discovery *Discovery `protobuf:"bytes,18,opt,name=discovery,oneof"` +} + +func (*Note_VulnerabilityType) isNote_NoteType() {} +func (*Note_BuildType) isNote_NoteType() {} +func (*Note_BaseImage) isNote_NoteType() {} +func (*Note_Package) isNote_NoteType() {} +func (*Note_Deployable) isNote_NoteType() {} +func (*Note_Discovery) isNote_NoteType() {} + +func (m *Note) GetNoteType() isNote_NoteType { + if m != nil { + return m.NoteType + } + return nil +} + +func (m *Note) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Note) GetShortDescription() string { + if m != nil { + return m.ShortDescription + } + return "" +} + +func (m *Note) GetLongDescription() string { + if m != nil { + return m.LongDescription + } + return "" +} + +func (m *Note) GetKind() Note_Kind { + if m != nil { + return m.Kind + } + return Note_KIND_UNSPECIFIED +} + +func (m *Note) GetVulnerabilityType() *VulnerabilityType { + if x, ok := m.GetNoteType().(*Note_VulnerabilityType); ok { + return x.VulnerabilityType + } + return nil +} + +func (m *Note) GetBuildType() *BuildType { + if x, ok := m.GetNoteType().(*Note_BuildType); ok { + return x.BuildType + } + return nil +} + +func (m *Note) GetBaseImage() *DockerImage_Basis { + if x, ok := m.GetNoteType().(*Note_BaseImage); ok { + return x.BaseImage + } + return nil +} + +func (m *Note) GetPackage() *PackageManager_Package { + if x, ok := m.GetNoteType().(*Note_Package); ok { + return x.Package + } + return nil +} + +func (m *Note) GetDeployable() *Deployable { + if x, ok := m.GetNoteType().(*Note_Deployable); ok { + return x.Deployable + } + return nil +} + +func (m *Note) GetDiscovery() *Discovery { + if x, ok := m.GetNoteType().(*Note_Discovery); ok { + return x.Discovery + } + return nil +} + +func (m *Note) GetRelatedUrl() []*Note_RelatedUrl { + if m != nil { + return m.RelatedUrl + } + return nil +} + +func (m *Note) GetExpirationTime() *google_protobuf1.Timestamp { + if m != nil { + return m.ExpirationTime + } + return nil +} + +func (m *Note) GetCreateTime() *google_protobuf1.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *Note) GetUpdateTime() *google_protobuf1.Timestamp { + if m != nil { + return m.UpdateTime + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Note) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Note_OneofMarshaler, _Note_OneofUnmarshaler, _Note_OneofSizer, []interface{}{ + (*Note_VulnerabilityType)(nil), + (*Note_BuildType)(nil), + (*Note_BaseImage)(nil), + (*Note_Package)(nil), + (*Note_Deployable)(nil), + (*Note_Discovery)(nil), + } +} + +func _Note_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Note) + // note_type + switch x := m.NoteType.(type) { + case *Note_VulnerabilityType: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.VulnerabilityType); err != nil { + return err + } + case *Note_BuildType: + b.EncodeVarint(8<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.BuildType); err != nil { + return err + } + case *Note_BaseImage: + b.EncodeVarint(13<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.BaseImage); err != nil { + return err + } + case *Note_Package: + b.EncodeVarint(14<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Package); err != nil { + return err + } + case *Note_Deployable: + b.EncodeVarint(17<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Deployable); err != nil { + return err + } + case *Note_Discovery: + b.EncodeVarint(18<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Discovery); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Note.NoteType has unexpected type %T", x) + } + return nil +} + +func _Note_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Note) + switch tag { + case 6: // note_type.vulnerability_type + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(VulnerabilityType) + err := b.DecodeMessage(msg) + m.NoteType = &Note_VulnerabilityType{msg} + return true, err + case 8: // note_type.build_type + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(BuildType) + err := b.DecodeMessage(msg) + m.NoteType = &Note_BuildType{msg} + return true, err + case 13: // note_type.base_image + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(DockerImage_Basis) + err := b.DecodeMessage(msg) + m.NoteType = &Note_BaseImage{msg} + return true, err + case 14: // note_type.package + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PackageManager_Package) + err := b.DecodeMessage(msg) + m.NoteType = &Note_Package{msg} + return true, err + case 17: // note_type.deployable + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Deployable) + err := b.DecodeMessage(msg) + m.NoteType = &Note_Deployable{msg} + return true, err + case 18: // note_type.discovery + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Discovery) + err := b.DecodeMessage(msg) + m.NoteType = &Note_Discovery{msg} + return true, err + default: + return false, nil + } +} + +func _Note_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Note) + // note_type + switch x := m.NoteType.(type) { + case *Note_VulnerabilityType: + s := proto.Size(x.VulnerabilityType) + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Note_BuildType: + s := proto.Size(x.BuildType) + n += proto.SizeVarint(8<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Note_BaseImage: + s := proto.Size(x.BaseImage) + n += proto.SizeVarint(13<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Note_Package: + s := proto.Size(x.Package) + n += proto.SizeVarint(14<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Note_Deployable: + s := proto.Size(x.Deployable) + n += proto.SizeVarint(17<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Note_Discovery: + s := proto.Size(x.Discovery) + n += proto.SizeVarint(18<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Metadata for any related URL information +type Note_RelatedUrl struct { + // Specific URL to associate with the note + Url string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"` + // Label to describe usage of the URL + Label string `protobuf:"bytes,2,opt,name=label" json:"label,omitempty"` +} + +func (m *Note_RelatedUrl) Reset() { *m = Note_RelatedUrl{} } +func (m *Note_RelatedUrl) String() string { return proto.CompactTextString(m) } +func (*Note_RelatedUrl) ProtoMessage() {} +func (*Note_RelatedUrl) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1, 0} } + +func (m *Note_RelatedUrl) GetUrl() string { + if m != nil { + return m.Url + } + return "" +} + +func (m *Note_RelatedUrl) GetLabel() string { + if m != nil { + return m.Label + } + return "" +} + +// An artifact that can be deployed in some runtime. +type Deployable struct { + // Resource URI for the artifact being deployed. + ResourceUri []string `protobuf:"bytes,1,rep,name=resource_uri,json=resourceUri" json:"resource_uri,omitempty"` +} + +func (m *Deployable) Reset() { *m = Deployable{} } +func (m *Deployable) String() string { return proto.CompactTextString(m) } +func (*Deployable) ProtoMessage() {} +func (*Deployable) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +func (m *Deployable) GetResourceUri() []string { + if m != nil { + return m.ResourceUri + } + return nil +} + +// The period during which some deployable was active in a runtime. +type Deployable_Deployment struct { + // Identity of the user that triggered this deployment. + UserEmail string `protobuf:"bytes,1,opt,name=user_email,json=userEmail" json:"user_email,omitempty"` + // Beginning of the lifetime of this deployment. + DeployTime *google_protobuf1.Timestamp `protobuf:"bytes,2,opt,name=deploy_time,json=deployTime" json:"deploy_time,omitempty"` + // End of the lifetime of this deployment. + UndeployTime *google_protobuf1.Timestamp `protobuf:"bytes,3,opt,name=undeploy_time,json=undeployTime" json:"undeploy_time,omitempty"` + // Configuration used to create this deployment. + Config string `protobuf:"bytes,8,opt,name=config" json:"config,omitempty"` + // Address of the runtime element hosting this deployment. + Address string `protobuf:"bytes,5,opt,name=address" json:"address,omitempty"` + // Output only. Resource URI for the artifact being deployed taken from the + // deployable field with the same name. + ResourceUri []string `protobuf:"bytes,6,rep,name=resource_uri,json=resourceUri" json:"resource_uri,omitempty"` + // Platform hosting this deployment. + Platform Deployable_Deployment_Platform `protobuf:"varint,7,opt,name=platform,enum=google.devtools.containeranalysis.v1alpha1.Deployable_Deployment_Platform" json:"platform,omitempty"` +} + +func (m *Deployable_Deployment) Reset() { *m = Deployable_Deployment{} } +func (m *Deployable_Deployment) String() string { return proto.CompactTextString(m) } +func (*Deployable_Deployment) ProtoMessage() {} +func (*Deployable_Deployment) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2, 0} } + +func (m *Deployable_Deployment) GetUserEmail() string { + if m != nil { + return m.UserEmail + } + return "" +} + +func (m *Deployable_Deployment) GetDeployTime() *google_protobuf1.Timestamp { + if m != nil { + return m.DeployTime + } + return nil +} + +func (m *Deployable_Deployment) GetUndeployTime() *google_protobuf1.Timestamp { + if m != nil { + return m.UndeployTime + } + return nil +} + +func (m *Deployable_Deployment) GetConfig() string { + if m != nil { + return m.Config + } + return "" +} + +func (m *Deployable_Deployment) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +func (m *Deployable_Deployment) GetResourceUri() []string { + if m != nil { + return m.ResourceUri + } + return nil +} + +func (m *Deployable_Deployment) GetPlatform() Deployable_Deployment_Platform { + if m != nil { + return m.Platform + } + return Deployable_Deployment_PLATFORM_UNSPECIFIED +} + +// A note that indicates a type of analysis a provider would perform. This note +// exists in a provider's project. A `Discovery` occurrence is created in a +// consumer's project at the start of analysis. The occurrence's operation will +// indicate the status of the analysis. Absence of an occurrence linked to this +// note for a resource indicates that analysis hasn't started. +type Discovery struct { + // The kind of analysis that is handled by this discovery. + AnalysisKind Note_Kind `protobuf:"varint,1,opt,name=analysis_kind,json=analysisKind,enum=google.devtools.containeranalysis.v1alpha1.Note_Kind" json:"analysis_kind,omitempty"` +} + +func (m *Discovery) Reset() { *m = Discovery{} } +func (m *Discovery) String() string { return proto.CompactTextString(m) } +func (*Discovery) ProtoMessage() {} +func (*Discovery) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } + +func (m *Discovery) GetAnalysisKind() Note_Kind { + if m != nil { + return m.AnalysisKind + } + return Note_KIND_UNSPECIFIED +} + +// Provides information about the scan status of a discovered resource. +type Discovery_Discovered struct { + // Output only. An operation that indicates the status of the current scan. + Operation *google_longrunning.Operation `protobuf:"bytes,1,opt,name=operation" json:"operation,omitempty"` +} + +func (m *Discovery_Discovered) Reset() { *m = Discovery_Discovered{} } +func (m *Discovery_Discovered) String() string { return proto.CompactTextString(m) } +func (*Discovery_Discovered) ProtoMessage() {} +func (*Discovery_Discovered) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3, 0} } + +func (m *Discovery_Discovered) GetOperation() *google_longrunning.Operation { + if m != nil { + return m.Operation + } + return nil +} + +// Note holding the version of the provider's builder and the signature of +// the provenance message in linked BuildDetails. +type BuildType struct { + // Version of the builder which produced this Note. + BuilderVersion string `protobuf:"bytes,1,opt,name=builder_version,json=builderVersion" json:"builder_version,omitempty"` + // Signature of the build in Occurrences pointing to the Note containing this + // `BuilderDetails`. + Signature *BuildSignature `protobuf:"bytes,2,opt,name=signature" json:"signature,omitempty"` +} + +func (m *BuildType) Reset() { *m = BuildType{} } +func (m *BuildType) String() string { return proto.CompactTextString(m) } +func (*BuildType) ProtoMessage() {} +func (*BuildType) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } + +func (m *BuildType) GetBuilderVersion() string { + if m != nil { + return m.BuilderVersion + } + return "" +} + +func (m *BuildType) GetSignature() *BuildSignature { + if m != nil { + return m.Signature + } + return nil +} + +// Message encapsulating the signature of the verified build. +type BuildSignature struct { + // Public key of the builder which can be used to verify that the related + // findings are valid and unchanged. If `key_type` is empty, this defaults + // to PEM encoded public keys. + // + // This field may be empty if `key_id` references an external key. + // + // For Cloud Container Builder based signatures, this is a PEM encoded public + // key. To verify the Cloud Container Builder signature, place the contents of + // this field into a file (public.pem). The signature field is base64-decoded + // into its binary representation in signature.bin, and the provenance bytes + // from `BuildDetails` are base64-decoded into a binary representation in + // signed.bin. OpenSSL can then verify the signature: + // `openssl sha256 -verify public.pem -signature signature.bin signed.bin` + PublicKey string `protobuf:"bytes,1,opt,name=public_key,json=publicKey" json:"public_key,omitempty"` + // Signature of the related `BuildProvenance`, encoded in a base64 string. + Signature string `protobuf:"bytes,2,opt,name=signature" json:"signature,omitempty"` + // An Id for the key used to sign. This could be either an Id for the key + // stored in `public_key` (such as the Id or fingerprint for a PGP key, or the + // CN for a cert), or a reference to an external key (such as a reference to a + // key in Cloud Key Management Service). + KeyId string `protobuf:"bytes,3,opt,name=key_id,json=keyId" json:"key_id,omitempty"` + // The type of the key, either stored in `public_key` or referenced in + // `key_id` + KeyType BuildSignature_KeyType `protobuf:"varint,4,opt,name=key_type,json=keyType,enum=google.devtools.containeranalysis.v1alpha1.BuildSignature_KeyType" json:"key_type,omitempty"` +} + +func (m *BuildSignature) Reset() { *m = BuildSignature{} } +func (m *BuildSignature) String() string { return proto.CompactTextString(m) } +func (*BuildSignature) ProtoMessage() {} +func (*BuildSignature) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } + +func (m *BuildSignature) GetPublicKey() string { + if m != nil { + return m.PublicKey + } + return "" +} + +func (m *BuildSignature) GetSignature() string { + if m != nil { + return m.Signature + } + return "" +} + +func (m *BuildSignature) GetKeyId() string { + if m != nil { + return m.KeyId + } + return "" +} + +func (m *BuildSignature) GetKeyType() BuildSignature_KeyType { + if m != nil { + return m.KeyType + } + return BuildSignature_KEY_TYPE_UNSPECIFIED +} + +// Message encapsulating build provenance details. +type BuildDetails struct { + // The actual provenance + Provenance *BuildProvenance `protobuf:"bytes,1,opt,name=provenance" json:"provenance,omitempty"` + // Serialized JSON representation of the provenance, used in generating the + // `BuildSignature` in the corresponding Result. After verifying the + // signature, `provenance_bytes` can be unmarshalled and compared to the + // provenance to confirm that it is unchanged. A base64-encoded string + // representation of the provenance bytes is used for the signature in order + // to interoperate with openssl which expects this format for signature + // verification. + // + // The serialized form is captured both to avoid ambiguity in how the + // provenance is marshalled to json as well to prevent incompatibilities with + // future changes. + ProvenanceBytes string `protobuf:"bytes,2,opt,name=provenance_bytes,json=provenanceBytes" json:"provenance_bytes,omitempty"` +} + +func (m *BuildDetails) Reset() { *m = BuildDetails{} } +func (m *BuildDetails) String() string { return proto.CompactTextString(m) } +func (*BuildDetails) ProtoMessage() {} +func (*BuildDetails) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } + +func (m *BuildDetails) GetProvenance() *BuildProvenance { + if m != nil { + return m.Provenance + } + return nil +} + +func (m *BuildDetails) GetProvenanceBytes() string { + if m != nil { + return m.ProvenanceBytes + } + return "" +} + +// Request to get a Occurrence. +type GetOccurrenceRequest struct { + // The name of the occurrence of the form + // "projects/{project_id}/occurrences/{OCCURRENCE_ID}" + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetOccurrenceRequest) Reset() { *m = GetOccurrenceRequest{} } +func (m *GetOccurrenceRequest) String() string { return proto.CompactTextString(m) } +func (*GetOccurrenceRequest) ProtoMessage() {} +func (*GetOccurrenceRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} } + +func (m *GetOccurrenceRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request to list occurrences. +type ListOccurrencesRequest struct { + // The name field contains the project Id. For example: + // "projects/{project_id} + // @Deprecated + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // This contains the project Id for example: projects/{project_id}. + Parent string `protobuf:"bytes,5,opt,name=parent" json:"parent,omitempty"` + // The filter expression. + Filter string `protobuf:"bytes,2,opt,name=filter" json:"filter,omitempty"` + // Number of occurrences to return in the list. + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // Token to provide to skip to a particular spot in the list. + PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListOccurrencesRequest) Reset() { *m = ListOccurrencesRequest{} } +func (m *ListOccurrencesRequest) String() string { return proto.CompactTextString(m) } +func (*ListOccurrencesRequest) ProtoMessage() {} +func (*ListOccurrencesRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} } + +func (m *ListOccurrencesRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ListOccurrencesRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListOccurrencesRequest) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +func (m *ListOccurrencesRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListOccurrencesRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// Response including listed active occurrences. +type ListOccurrencesResponse struct { + // The occurrences requested. + Occurrences []*Occurrence `protobuf:"bytes,1,rep,name=occurrences" json:"occurrences,omitempty"` + // The next pagination token in the list response. It should be used as + // `page_token` for the following request. An empty value means no more + // results. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListOccurrencesResponse) Reset() { *m = ListOccurrencesResponse{} } +func (m *ListOccurrencesResponse) String() string { return proto.CompactTextString(m) } +func (*ListOccurrencesResponse) ProtoMessage() {} +func (*ListOccurrencesResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{9} } + +func (m *ListOccurrencesResponse) GetOccurrences() []*Occurrence { + if m != nil { + return m.Occurrences + } + return nil +} + +func (m *ListOccurrencesResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request to delete a occurrence +type DeleteOccurrenceRequest struct { + // The name of the occurrence in the form of + // "projects/{project_id}/occurrences/{OCCURRENCE_ID}" + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteOccurrenceRequest) Reset() { *m = DeleteOccurrenceRequest{} } +func (m *DeleteOccurrenceRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteOccurrenceRequest) ProtoMessage() {} +func (*DeleteOccurrenceRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{10} } + +func (m *DeleteOccurrenceRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request to insert a new occurrence. +type CreateOccurrenceRequest struct { + // The name of the project. Should be of the form "projects/{project_id}". + // @Deprecated + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // This field contains the project Id for example: "projects/{project_id}" + Parent string `protobuf:"bytes,3,opt,name=parent" json:"parent,omitempty"` + // The occurrence to be inserted + Occurrence *Occurrence `protobuf:"bytes,2,opt,name=occurrence" json:"occurrence,omitempty"` +} + +func (m *CreateOccurrenceRequest) Reset() { *m = CreateOccurrenceRequest{} } +func (m *CreateOccurrenceRequest) String() string { return proto.CompactTextString(m) } +func (*CreateOccurrenceRequest) ProtoMessage() {} +func (*CreateOccurrenceRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{11} } + +func (m *CreateOccurrenceRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *CreateOccurrenceRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateOccurrenceRequest) GetOccurrence() *Occurrence { + if m != nil { + return m.Occurrence + } + return nil +} + +// Request to update an existing occurrence +type UpdateOccurrenceRequest struct { + // The name of the occurrence. + // Should be of the form "projects/{project_id}/occurrences/{OCCURRENCE_ID}". + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The updated occurrence. + Occurrence *Occurrence `protobuf:"bytes,2,opt,name=occurrence" json:"occurrence,omitempty"` + // The fields to update. + UpdateMask *google_protobuf4.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateOccurrenceRequest) Reset() { *m = UpdateOccurrenceRequest{} } +func (m *UpdateOccurrenceRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateOccurrenceRequest) ProtoMessage() {} +func (*UpdateOccurrenceRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{12} } + +func (m *UpdateOccurrenceRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *UpdateOccurrenceRequest) GetOccurrence() *Occurrence { + if m != nil { + return m.Occurrence + } + return nil +} + +func (m *UpdateOccurrenceRequest) GetUpdateMask() *google_protobuf4.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +// Request to get a Note. +type GetNoteRequest struct { + // The name of the note in the form of + // "providers/{provider_id}/notes/{NOTE_ID}" + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetNoteRequest) Reset() { *m = GetNoteRequest{} } +func (m *GetNoteRequest) String() string { return proto.CompactTextString(m) } +func (*GetNoteRequest) ProtoMessage() {} +func (*GetNoteRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{13} } + +func (m *GetNoteRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request to get the note to which this occurrence is attached. +type GetOccurrenceNoteRequest struct { + // The name of the occurrence in the form + // "projects/{project_id}/occurrences/{OCCURRENCE_ID}" + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetOccurrenceNoteRequest) Reset() { *m = GetOccurrenceNoteRequest{} } +func (m *GetOccurrenceNoteRequest) String() string { return proto.CompactTextString(m) } +func (*GetOccurrenceNoteRequest) ProtoMessage() {} +func (*GetOccurrenceNoteRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{14} } + +func (m *GetOccurrenceNoteRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request to list notes. +type ListNotesRequest struct { + // The name field will contain the project Id for example: + // "providers/{provider_id} + // @Deprecated + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // This field contains the project Id for example: + // "project/{project_id} + Parent string `protobuf:"bytes,5,opt,name=parent" json:"parent,omitempty"` + // The filter expression. + Filter string `protobuf:"bytes,2,opt,name=filter" json:"filter,omitempty"` + // Number of notes to return in the list. + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // Token to provide to skip to a particular spot in the list. + PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListNotesRequest) Reset() { *m = ListNotesRequest{} } +func (m *ListNotesRequest) String() string { return proto.CompactTextString(m) } +func (*ListNotesRequest) ProtoMessage() {} +func (*ListNotesRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{15} } + +func (m *ListNotesRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ListNotesRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListNotesRequest) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +func (m *ListNotesRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListNotesRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// Response including listed notes. +type ListNotesResponse struct { + // The occurrences requested + Notes []*Note `protobuf:"bytes,1,rep,name=notes" json:"notes,omitempty"` + // The next pagination token in the list response. It should be used as + // page_token for the following request. An empty value means no more result. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListNotesResponse) Reset() { *m = ListNotesResponse{} } +func (m *ListNotesResponse) String() string { return proto.CompactTextString(m) } +func (*ListNotesResponse) ProtoMessage() {} +func (*ListNotesResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{16} } + +func (m *ListNotesResponse) GetNotes() []*Note { + if m != nil { + return m.Notes + } + return nil +} + +func (m *ListNotesResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request to delete a note +type DeleteNoteRequest struct { + // The name of the note in the form of + // "providers/{provider_id}/notes/{NOTE_ID}" + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteNoteRequest) Reset() { *m = DeleteNoteRequest{} } +func (m *DeleteNoteRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteNoteRequest) ProtoMessage() {} +func (*DeleteNoteRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{17} } + +func (m *DeleteNoteRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request to insert a new note +type CreateNoteRequest struct { + // The name of the project. + // Should be of the form "providers/{provider_id}". + // @Deprecated + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // This field contains the project Id for example: + // "project/{project_id} + Parent string `protobuf:"bytes,4,opt,name=parent" json:"parent,omitempty"` + // The ID to use for this note. + NoteId string `protobuf:"bytes,2,opt,name=note_id,json=noteId" json:"note_id,omitempty"` + // The Note to be inserted + Note *Note `protobuf:"bytes,3,opt,name=note" json:"note,omitempty"` +} + +func (m *CreateNoteRequest) Reset() { *m = CreateNoteRequest{} } +func (m *CreateNoteRequest) String() string { return proto.CompactTextString(m) } +func (*CreateNoteRequest) ProtoMessage() {} +func (*CreateNoteRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{18} } + +func (m *CreateNoteRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *CreateNoteRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateNoteRequest) GetNoteId() string { + if m != nil { + return m.NoteId + } + return "" +} + +func (m *CreateNoteRequest) GetNote() *Note { + if m != nil { + return m.Note + } + return nil +} + +// Request to update an existing note +type UpdateNoteRequest struct { + // The name of the note. + // Should be of the form "projects/{provider_id}/notes/{note_id}". + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The updated note. + Note *Note `protobuf:"bytes,2,opt,name=note" json:"note,omitempty"` + // The fields to update. + UpdateMask *google_protobuf4.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateNoteRequest) Reset() { *m = UpdateNoteRequest{} } +func (m *UpdateNoteRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateNoteRequest) ProtoMessage() {} +func (*UpdateNoteRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{19} } + +func (m *UpdateNoteRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *UpdateNoteRequest) GetNote() *Note { + if m != nil { + return m.Note + } + return nil +} + +func (m *UpdateNoteRequest) GetUpdateMask() *google_protobuf4.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +// Request to list occurrences. +type ListNoteOccurrencesRequest struct { + // The name field will contain the note name for example: + // "provider/{provider_id}/notes/{note_id}" + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The filter expression. + Filter string `protobuf:"bytes,2,opt,name=filter" json:"filter,omitempty"` + // Number of notes to return in the list. + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // Token to provide to skip to a particular spot in the list. + PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListNoteOccurrencesRequest) Reset() { *m = ListNoteOccurrencesRequest{} } +func (m *ListNoteOccurrencesRequest) String() string { return proto.CompactTextString(m) } +func (*ListNoteOccurrencesRequest) ProtoMessage() {} +func (*ListNoteOccurrencesRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{20} } + +func (m *ListNoteOccurrencesRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ListNoteOccurrencesRequest) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +func (m *ListNoteOccurrencesRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListNoteOccurrencesRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// Response including listed occurrences for a note. +type ListNoteOccurrencesResponse struct { + // The occurrences attached to the specified note. + Occurrences []*Occurrence `protobuf:"bytes,1,rep,name=occurrences" json:"occurrences,omitempty"` + // Token to receive the next page of notes. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListNoteOccurrencesResponse) Reset() { *m = ListNoteOccurrencesResponse{} } +func (m *ListNoteOccurrencesResponse) String() string { return proto.CompactTextString(m) } +func (*ListNoteOccurrencesResponse) ProtoMessage() {} +func (*ListNoteOccurrencesResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{21} } + +func (m *ListNoteOccurrencesResponse) GetOccurrences() []*Occurrence { + if m != nil { + return m.Occurrences + } + return nil +} + +func (m *ListNoteOccurrencesResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Metadata for all operations used and required for all operations +// that created by Container Analysis Providers +type OperationMetadata struct { + // Output only. The time this operation was created. + CreateTime *google_protobuf1.Timestamp `protobuf:"bytes,1,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // Output only. The time that this operation was marked completed or failed. + EndTime *google_protobuf1.Timestamp `protobuf:"bytes,2,opt,name=end_time,json=endTime" json:"end_time,omitempty"` +} + +func (m *OperationMetadata) Reset() { *m = OperationMetadata{} } +func (m *OperationMetadata) String() string { return proto.CompactTextString(m) } +func (*OperationMetadata) ProtoMessage() {} +func (*OperationMetadata) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{22} } + +func (m *OperationMetadata) GetCreateTime() *google_protobuf1.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *OperationMetadata) GetEndTime() *google_protobuf1.Timestamp { + if m != nil { + return m.EndTime + } + return nil +} + +// Request to get the vulnz summary for some set of vulnerability Occurrences. +type GetVulnzOccurrencesSummaryRequest struct { + // This contains the project Id for example: projects/{project_id} + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The filter expression. + Filter string `protobuf:"bytes,2,opt,name=filter" json:"filter,omitempty"` +} + +func (m *GetVulnzOccurrencesSummaryRequest) Reset() { *m = GetVulnzOccurrencesSummaryRequest{} } +func (m *GetVulnzOccurrencesSummaryRequest) String() string { return proto.CompactTextString(m) } +func (*GetVulnzOccurrencesSummaryRequest) ProtoMessage() {} +func (*GetVulnzOccurrencesSummaryRequest) Descriptor() ([]byte, []int) { + return fileDescriptor1, []int{23} +} + +func (m *GetVulnzOccurrencesSummaryRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *GetVulnzOccurrencesSummaryRequest) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +// A summary of how many vulnz occurrences there are per severity type. +// counts by groups, or if we should have different summary messages +// like this. +type GetVulnzOccurrencesSummaryResponse struct { + // A map of how many occurrences were found for each severity. + Counts []*GetVulnzOccurrencesSummaryResponse_SeverityCount `protobuf:"bytes,1,rep,name=counts" json:"counts,omitempty"` +} + +func (m *GetVulnzOccurrencesSummaryResponse) Reset() { *m = GetVulnzOccurrencesSummaryResponse{} } +func (m *GetVulnzOccurrencesSummaryResponse) String() string { return proto.CompactTextString(m) } +func (*GetVulnzOccurrencesSummaryResponse) ProtoMessage() {} +func (*GetVulnzOccurrencesSummaryResponse) Descriptor() ([]byte, []int) { + return fileDescriptor1, []int{24} +} + +func (m *GetVulnzOccurrencesSummaryResponse) GetCounts() []*GetVulnzOccurrencesSummaryResponse_SeverityCount { + if m != nil { + return m.Counts + } + return nil +} + +// The number of occurrences created for a specific severity. +type GetVulnzOccurrencesSummaryResponse_SeverityCount struct { + // The severity of the occurrences. + Severity VulnerabilityType_Severity `protobuf:"varint,1,opt,name=severity,enum=google.devtools.containeranalysis.v1alpha1.VulnerabilityType_Severity" json:"severity,omitempty"` + // The number of occurrences with the severity. + Count int64 `protobuf:"varint,2,opt,name=count" json:"count,omitempty"` +} + +func (m *GetVulnzOccurrencesSummaryResponse_SeverityCount) Reset() { + *m = GetVulnzOccurrencesSummaryResponse_SeverityCount{} +} +func (m *GetVulnzOccurrencesSummaryResponse_SeverityCount) String() string { + return proto.CompactTextString(m) +} +func (*GetVulnzOccurrencesSummaryResponse_SeverityCount) ProtoMessage() {} +func (*GetVulnzOccurrencesSummaryResponse_SeverityCount) Descriptor() ([]byte, []int) { + return fileDescriptor1, []int{24, 0} +} + +func (m *GetVulnzOccurrencesSummaryResponse_SeverityCount) GetSeverity() VulnerabilityType_Severity { + if m != nil { + return m.Severity + } + return VulnerabilityType_SEVERITY_UNSPECIFIED +} + +func (m *GetVulnzOccurrencesSummaryResponse_SeverityCount) GetCount() int64 { + if m != nil { + return m.Count + } + return 0 +} + +func init() { + proto.RegisterType((*Occurrence)(nil), "google.devtools.containeranalysis.v1alpha1.Occurrence") + proto.RegisterType((*Note)(nil), "google.devtools.containeranalysis.v1alpha1.Note") + proto.RegisterType((*Note_RelatedUrl)(nil), "google.devtools.containeranalysis.v1alpha1.Note.RelatedUrl") + proto.RegisterType((*Deployable)(nil), "google.devtools.containeranalysis.v1alpha1.Deployable") + proto.RegisterType((*Deployable_Deployment)(nil), "google.devtools.containeranalysis.v1alpha1.Deployable.Deployment") + proto.RegisterType((*Discovery)(nil), "google.devtools.containeranalysis.v1alpha1.Discovery") + proto.RegisterType((*Discovery_Discovered)(nil), "google.devtools.containeranalysis.v1alpha1.Discovery.Discovered") + proto.RegisterType((*BuildType)(nil), "google.devtools.containeranalysis.v1alpha1.BuildType") + proto.RegisterType((*BuildSignature)(nil), "google.devtools.containeranalysis.v1alpha1.BuildSignature") + proto.RegisterType((*BuildDetails)(nil), "google.devtools.containeranalysis.v1alpha1.BuildDetails") + proto.RegisterType((*GetOccurrenceRequest)(nil), "google.devtools.containeranalysis.v1alpha1.GetOccurrenceRequest") + proto.RegisterType((*ListOccurrencesRequest)(nil), "google.devtools.containeranalysis.v1alpha1.ListOccurrencesRequest") + proto.RegisterType((*ListOccurrencesResponse)(nil), "google.devtools.containeranalysis.v1alpha1.ListOccurrencesResponse") + proto.RegisterType((*DeleteOccurrenceRequest)(nil), "google.devtools.containeranalysis.v1alpha1.DeleteOccurrenceRequest") + proto.RegisterType((*CreateOccurrenceRequest)(nil), "google.devtools.containeranalysis.v1alpha1.CreateOccurrenceRequest") + proto.RegisterType((*UpdateOccurrenceRequest)(nil), "google.devtools.containeranalysis.v1alpha1.UpdateOccurrenceRequest") + proto.RegisterType((*GetNoteRequest)(nil), "google.devtools.containeranalysis.v1alpha1.GetNoteRequest") + proto.RegisterType((*GetOccurrenceNoteRequest)(nil), "google.devtools.containeranalysis.v1alpha1.GetOccurrenceNoteRequest") + proto.RegisterType((*ListNotesRequest)(nil), "google.devtools.containeranalysis.v1alpha1.ListNotesRequest") + proto.RegisterType((*ListNotesResponse)(nil), "google.devtools.containeranalysis.v1alpha1.ListNotesResponse") + proto.RegisterType((*DeleteNoteRequest)(nil), "google.devtools.containeranalysis.v1alpha1.DeleteNoteRequest") + proto.RegisterType((*CreateNoteRequest)(nil), "google.devtools.containeranalysis.v1alpha1.CreateNoteRequest") + proto.RegisterType((*UpdateNoteRequest)(nil), "google.devtools.containeranalysis.v1alpha1.UpdateNoteRequest") + proto.RegisterType((*ListNoteOccurrencesRequest)(nil), "google.devtools.containeranalysis.v1alpha1.ListNoteOccurrencesRequest") + proto.RegisterType((*ListNoteOccurrencesResponse)(nil), "google.devtools.containeranalysis.v1alpha1.ListNoteOccurrencesResponse") + proto.RegisterType((*OperationMetadata)(nil), "google.devtools.containeranalysis.v1alpha1.OperationMetadata") + proto.RegisterType((*GetVulnzOccurrencesSummaryRequest)(nil), "google.devtools.containeranalysis.v1alpha1.GetVulnzOccurrencesSummaryRequest") + proto.RegisterType((*GetVulnzOccurrencesSummaryResponse)(nil), "google.devtools.containeranalysis.v1alpha1.GetVulnzOccurrencesSummaryResponse") + proto.RegisterType((*GetVulnzOccurrencesSummaryResponse_SeverityCount)(nil), "google.devtools.containeranalysis.v1alpha1.GetVulnzOccurrencesSummaryResponse.SeverityCount") + proto.RegisterEnum("google.devtools.containeranalysis.v1alpha1.Note_Kind", Note_Kind_name, Note_Kind_value) + proto.RegisterEnum("google.devtools.containeranalysis.v1alpha1.Deployable_Deployment_Platform", Deployable_Deployment_Platform_name, Deployable_Deployment_Platform_value) + proto.RegisterEnum("google.devtools.containeranalysis.v1alpha1.BuildSignature_KeyType", BuildSignature_KeyType_name, BuildSignature_KeyType_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for ContainerAnalysis service + +type ContainerAnalysisClient interface { + // Returns the requested `Occurrence`. + GetOccurrence(ctx context.Context, in *GetOccurrenceRequest, opts ...grpc.CallOption) (*Occurrence, error) + // Lists active `Occurrences` for a given project matching the filters. + ListOccurrences(ctx context.Context, in *ListOccurrencesRequest, opts ...grpc.CallOption) (*ListOccurrencesResponse, error) + // Deletes the given `Occurrence` from the system. Use this when + // an `Occurrence` is no longer applicable for the given resource. + DeleteOccurrence(ctx context.Context, in *DeleteOccurrenceRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) + // Creates a new `Occurrence`. Use this method to create `Occurrences` + // for a resource. + CreateOccurrence(ctx context.Context, in *CreateOccurrenceRequest, opts ...grpc.CallOption) (*Occurrence, error) + // Updates an existing occurrence. + UpdateOccurrence(ctx context.Context, in *UpdateOccurrenceRequest, opts ...grpc.CallOption) (*Occurrence, error) + // Gets the `Note` attached to the given `Occurrence`. + GetOccurrenceNote(ctx context.Context, in *GetOccurrenceNoteRequest, opts ...grpc.CallOption) (*Note, error) + // Returns the requested `Note`. + GetNote(ctx context.Context, in *GetNoteRequest, opts ...grpc.CallOption) (*Note, error) + // Lists all `Notes` for a given project. + ListNotes(ctx context.Context, in *ListNotesRequest, opts ...grpc.CallOption) (*ListNotesResponse, error) + // Deletes the given `Note` from the system. + DeleteNote(ctx context.Context, in *DeleteNoteRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) + // Creates a new `Note`. + CreateNote(ctx context.Context, in *CreateNoteRequest, opts ...grpc.CallOption) (*Note, error) + // Updates an existing `Note`. + UpdateNote(ctx context.Context, in *UpdateNoteRequest, opts ...grpc.CallOption) (*Note, error) + // Lists `Occurrences` referencing the specified `Note`. Use this method to + // get all occurrences referencing your `Note` across all your customer + // projects. + ListNoteOccurrences(ctx context.Context, in *ListNoteOccurrencesRequest, opts ...grpc.CallOption) (*ListNoteOccurrencesResponse, error) + // Gets a summary of the number and severity of occurrences. + GetVulnzOccurrencesSummary(ctx context.Context, in *GetVulnzOccurrencesSummaryRequest, opts ...grpc.CallOption) (*GetVulnzOccurrencesSummaryResponse, error) + // Sets the access control policy on the specified `Note` or `Occurrence`. + // Requires `containeranalysis.notes.setIamPolicy` or + // `containeranalysis.occurrences.setIamPolicy` permission if the resource is + // a `Note` or an `Occurrence`, respectively. + // Attempting to call this method without these permissions will result in a ` + // `PERMISSION_DENIED` error. + // Attempting to call this method on a non-existent resource will result in a + // `NOT_FOUND` error if the user has `containeranalysis.notes.list` permission + // on a `Note` or `containeranalysis.occurrences.list` on an `Occurrence`, or + // a `PERMISSION_DENIED` error otherwise. The resource takes the following + // formats: `projects/{projectid}/occurrences/{occurrenceid}` for occurrences + // and projects/{projectid}/notes/{noteid} for notes + SetIamPolicy(ctx context.Context, in *google_iam_v11.SetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) + // Gets the access control policy for a note or an `Occurrence` resource. + // Requires `containeranalysis.notes.setIamPolicy` or + // `containeranalysis.occurrences.setIamPolicy` permission if the resource is + // a note or occurrence, respectively. + // Attempting to call this method on a resource without the required + // permission will result in a `PERMISSION_DENIED` error. Attempting to call + // this method on a non-existent resource will result in a `NOT_FOUND` error + // if the user has list permission on the project, or a `PERMISSION_DENIED` + // error otherwise. The resource takes the following formats: + // `projects/{PROJECT_ID}/occurrences/{OCCURRENCE_ID}` for occurrences and + // projects/{PROJECT_ID}/notes/{NOTE_ID} for notes + GetIamPolicy(ctx context.Context, in *google_iam_v11.GetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) + // Returns the permissions that a caller has on the specified note or + // occurrence resource. Requires list permission on the project (for example, + // "storage.objects.list" on the containing bucket for testing permission of + // an object). Attempting to call this method on a non-existent resource will + // result in a `NOT_FOUND` error if the user has list permission on the + // project, or a `PERMISSION_DENIED` error otherwise. The resource takes the + // following formats: `projects/{PROJECT_ID}/occurrences/{OCCURRENCE_ID}` for + // `Occurrences` and `projects/{PROJECT_ID}/notes/{NOTE_ID}` for `Notes` + TestIamPermissions(ctx context.Context, in *google_iam_v11.TestIamPermissionsRequest, opts ...grpc.CallOption) (*google_iam_v11.TestIamPermissionsResponse, error) +} + +type containerAnalysisClient struct { + cc *grpc.ClientConn +} + +func NewContainerAnalysisClient(cc *grpc.ClientConn) ContainerAnalysisClient { + return &containerAnalysisClient{cc} +} + +func (c *containerAnalysisClient) GetOccurrence(ctx context.Context, in *GetOccurrenceRequest, opts ...grpc.CallOption) (*Occurrence, error) { + out := new(Occurrence) + err := grpc.Invoke(ctx, "/google.devtools.containeranalysis.v1alpha1.ContainerAnalysis/GetOccurrence", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *containerAnalysisClient) ListOccurrences(ctx context.Context, in *ListOccurrencesRequest, opts ...grpc.CallOption) (*ListOccurrencesResponse, error) { + out := new(ListOccurrencesResponse) + err := grpc.Invoke(ctx, "/google.devtools.containeranalysis.v1alpha1.ContainerAnalysis/ListOccurrences", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *containerAnalysisClient) DeleteOccurrence(ctx context.Context, in *DeleteOccurrenceRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) { + out := new(google_protobuf3.Empty) + err := grpc.Invoke(ctx, "/google.devtools.containeranalysis.v1alpha1.ContainerAnalysis/DeleteOccurrence", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *containerAnalysisClient) CreateOccurrence(ctx context.Context, in *CreateOccurrenceRequest, opts ...grpc.CallOption) (*Occurrence, error) { + out := new(Occurrence) + err := grpc.Invoke(ctx, "/google.devtools.containeranalysis.v1alpha1.ContainerAnalysis/CreateOccurrence", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *containerAnalysisClient) UpdateOccurrence(ctx context.Context, in *UpdateOccurrenceRequest, opts ...grpc.CallOption) (*Occurrence, error) { + out := new(Occurrence) + err := grpc.Invoke(ctx, "/google.devtools.containeranalysis.v1alpha1.ContainerAnalysis/UpdateOccurrence", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *containerAnalysisClient) GetOccurrenceNote(ctx context.Context, in *GetOccurrenceNoteRequest, opts ...grpc.CallOption) (*Note, error) { + out := new(Note) + err := grpc.Invoke(ctx, "/google.devtools.containeranalysis.v1alpha1.ContainerAnalysis/GetOccurrenceNote", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *containerAnalysisClient) GetNote(ctx context.Context, in *GetNoteRequest, opts ...grpc.CallOption) (*Note, error) { + out := new(Note) + err := grpc.Invoke(ctx, "/google.devtools.containeranalysis.v1alpha1.ContainerAnalysis/GetNote", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *containerAnalysisClient) ListNotes(ctx context.Context, in *ListNotesRequest, opts ...grpc.CallOption) (*ListNotesResponse, error) { + out := new(ListNotesResponse) + err := grpc.Invoke(ctx, "/google.devtools.containeranalysis.v1alpha1.ContainerAnalysis/ListNotes", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *containerAnalysisClient) DeleteNote(ctx context.Context, in *DeleteNoteRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) { + out := new(google_protobuf3.Empty) + err := grpc.Invoke(ctx, "/google.devtools.containeranalysis.v1alpha1.ContainerAnalysis/DeleteNote", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *containerAnalysisClient) CreateNote(ctx context.Context, in *CreateNoteRequest, opts ...grpc.CallOption) (*Note, error) { + out := new(Note) + err := grpc.Invoke(ctx, "/google.devtools.containeranalysis.v1alpha1.ContainerAnalysis/CreateNote", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *containerAnalysisClient) UpdateNote(ctx context.Context, in *UpdateNoteRequest, opts ...grpc.CallOption) (*Note, error) { + out := new(Note) + err := grpc.Invoke(ctx, "/google.devtools.containeranalysis.v1alpha1.ContainerAnalysis/UpdateNote", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *containerAnalysisClient) ListNoteOccurrences(ctx context.Context, in *ListNoteOccurrencesRequest, opts ...grpc.CallOption) (*ListNoteOccurrencesResponse, error) { + out := new(ListNoteOccurrencesResponse) + err := grpc.Invoke(ctx, "/google.devtools.containeranalysis.v1alpha1.ContainerAnalysis/ListNoteOccurrences", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *containerAnalysisClient) GetVulnzOccurrencesSummary(ctx context.Context, in *GetVulnzOccurrencesSummaryRequest, opts ...grpc.CallOption) (*GetVulnzOccurrencesSummaryResponse, error) { + out := new(GetVulnzOccurrencesSummaryResponse) + err := grpc.Invoke(ctx, "/google.devtools.containeranalysis.v1alpha1.ContainerAnalysis/GetVulnzOccurrencesSummary", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *containerAnalysisClient) SetIamPolicy(ctx context.Context, in *google_iam_v11.SetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) { + out := new(google_iam_v1.Policy) + err := grpc.Invoke(ctx, "/google.devtools.containeranalysis.v1alpha1.ContainerAnalysis/SetIamPolicy", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *containerAnalysisClient) GetIamPolicy(ctx context.Context, in *google_iam_v11.GetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) { + out := new(google_iam_v1.Policy) + err := grpc.Invoke(ctx, "/google.devtools.containeranalysis.v1alpha1.ContainerAnalysis/GetIamPolicy", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *containerAnalysisClient) TestIamPermissions(ctx context.Context, in *google_iam_v11.TestIamPermissionsRequest, opts ...grpc.CallOption) (*google_iam_v11.TestIamPermissionsResponse, error) { + out := new(google_iam_v11.TestIamPermissionsResponse) + err := grpc.Invoke(ctx, "/google.devtools.containeranalysis.v1alpha1.ContainerAnalysis/TestIamPermissions", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for ContainerAnalysis service + +type ContainerAnalysisServer interface { + // Returns the requested `Occurrence`. + GetOccurrence(context.Context, *GetOccurrenceRequest) (*Occurrence, error) + // Lists active `Occurrences` for a given project matching the filters. + ListOccurrences(context.Context, *ListOccurrencesRequest) (*ListOccurrencesResponse, error) + // Deletes the given `Occurrence` from the system. Use this when + // an `Occurrence` is no longer applicable for the given resource. + DeleteOccurrence(context.Context, *DeleteOccurrenceRequest) (*google_protobuf3.Empty, error) + // Creates a new `Occurrence`. Use this method to create `Occurrences` + // for a resource. + CreateOccurrence(context.Context, *CreateOccurrenceRequest) (*Occurrence, error) + // Updates an existing occurrence. + UpdateOccurrence(context.Context, *UpdateOccurrenceRequest) (*Occurrence, error) + // Gets the `Note` attached to the given `Occurrence`. + GetOccurrenceNote(context.Context, *GetOccurrenceNoteRequest) (*Note, error) + // Returns the requested `Note`. + GetNote(context.Context, *GetNoteRequest) (*Note, error) + // Lists all `Notes` for a given project. + ListNotes(context.Context, *ListNotesRequest) (*ListNotesResponse, error) + // Deletes the given `Note` from the system. + DeleteNote(context.Context, *DeleteNoteRequest) (*google_protobuf3.Empty, error) + // Creates a new `Note`. + CreateNote(context.Context, *CreateNoteRequest) (*Note, error) + // Updates an existing `Note`. + UpdateNote(context.Context, *UpdateNoteRequest) (*Note, error) + // Lists `Occurrences` referencing the specified `Note`. Use this method to + // get all occurrences referencing your `Note` across all your customer + // projects. + ListNoteOccurrences(context.Context, *ListNoteOccurrencesRequest) (*ListNoteOccurrencesResponse, error) + // Gets a summary of the number and severity of occurrences. + GetVulnzOccurrencesSummary(context.Context, *GetVulnzOccurrencesSummaryRequest) (*GetVulnzOccurrencesSummaryResponse, error) + // Sets the access control policy on the specified `Note` or `Occurrence`. + // Requires `containeranalysis.notes.setIamPolicy` or + // `containeranalysis.occurrences.setIamPolicy` permission if the resource is + // a `Note` or an `Occurrence`, respectively. + // Attempting to call this method without these permissions will result in a ` + // `PERMISSION_DENIED` error. + // Attempting to call this method on a non-existent resource will result in a + // `NOT_FOUND` error if the user has `containeranalysis.notes.list` permission + // on a `Note` or `containeranalysis.occurrences.list` on an `Occurrence`, or + // a `PERMISSION_DENIED` error otherwise. The resource takes the following + // formats: `projects/{projectid}/occurrences/{occurrenceid}` for occurrences + // and projects/{projectid}/notes/{noteid} for notes + SetIamPolicy(context.Context, *google_iam_v11.SetIamPolicyRequest) (*google_iam_v1.Policy, error) + // Gets the access control policy for a note or an `Occurrence` resource. + // Requires `containeranalysis.notes.setIamPolicy` or + // `containeranalysis.occurrences.setIamPolicy` permission if the resource is + // a note or occurrence, respectively. + // Attempting to call this method on a resource without the required + // permission will result in a `PERMISSION_DENIED` error. Attempting to call + // this method on a non-existent resource will result in a `NOT_FOUND` error + // if the user has list permission on the project, or a `PERMISSION_DENIED` + // error otherwise. The resource takes the following formats: + // `projects/{PROJECT_ID}/occurrences/{OCCURRENCE_ID}` for occurrences and + // projects/{PROJECT_ID}/notes/{NOTE_ID} for notes + GetIamPolicy(context.Context, *google_iam_v11.GetIamPolicyRequest) (*google_iam_v1.Policy, error) + // Returns the permissions that a caller has on the specified note or + // occurrence resource. Requires list permission on the project (for example, + // "storage.objects.list" on the containing bucket for testing permission of + // an object). Attempting to call this method on a non-existent resource will + // result in a `NOT_FOUND` error if the user has list permission on the + // project, or a `PERMISSION_DENIED` error otherwise. The resource takes the + // following formats: `projects/{PROJECT_ID}/occurrences/{OCCURRENCE_ID}` for + // `Occurrences` and `projects/{PROJECT_ID}/notes/{NOTE_ID}` for `Notes` + TestIamPermissions(context.Context, *google_iam_v11.TestIamPermissionsRequest) (*google_iam_v11.TestIamPermissionsResponse, error) +} + +func RegisterContainerAnalysisServer(s *grpc.Server, srv ContainerAnalysisServer) { + s.RegisterService(&_ContainerAnalysis_serviceDesc, srv) +} + +func _ContainerAnalysis_GetOccurrence_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetOccurrenceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ContainerAnalysisServer).GetOccurrence(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.containeranalysis.v1alpha1.ContainerAnalysis/GetOccurrence", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ContainerAnalysisServer).GetOccurrence(ctx, req.(*GetOccurrenceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ContainerAnalysis_ListOccurrences_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListOccurrencesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ContainerAnalysisServer).ListOccurrences(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.containeranalysis.v1alpha1.ContainerAnalysis/ListOccurrences", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ContainerAnalysisServer).ListOccurrences(ctx, req.(*ListOccurrencesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ContainerAnalysis_DeleteOccurrence_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteOccurrenceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ContainerAnalysisServer).DeleteOccurrence(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.containeranalysis.v1alpha1.ContainerAnalysis/DeleteOccurrence", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ContainerAnalysisServer).DeleteOccurrence(ctx, req.(*DeleteOccurrenceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ContainerAnalysis_CreateOccurrence_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateOccurrenceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ContainerAnalysisServer).CreateOccurrence(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.containeranalysis.v1alpha1.ContainerAnalysis/CreateOccurrence", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ContainerAnalysisServer).CreateOccurrence(ctx, req.(*CreateOccurrenceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ContainerAnalysis_UpdateOccurrence_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateOccurrenceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ContainerAnalysisServer).UpdateOccurrence(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.containeranalysis.v1alpha1.ContainerAnalysis/UpdateOccurrence", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ContainerAnalysisServer).UpdateOccurrence(ctx, req.(*UpdateOccurrenceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ContainerAnalysis_GetOccurrenceNote_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetOccurrenceNoteRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ContainerAnalysisServer).GetOccurrenceNote(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.containeranalysis.v1alpha1.ContainerAnalysis/GetOccurrenceNote", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ContainerAnalysisServer).GetOccurrenceNote(ctx, req.(*GetOccurrenceNoteRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ContainerAnalysis_GetNote_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetNoteRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ContainerAnalysisServer).GetNote(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.containeranalysis.v1alpha1.ContainerAnalysis/GetNote", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ContainerAnalysisServer).GetNote(ctx, req.(*GetNoteRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ContainerAnalysis_ListNotes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListNotesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ContainerAnalysisServer).ListNotes(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.containeranalysis.v1alpha1.ContainerAnalysis/ListNotes", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ContainerAnalysisServer).ListNotes(ctx, req.(*ListNotesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ContainerAnalysis_DeleteNote_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteNoteRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ContainerAnalysisServer).DeleteNote(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.containeranalysis.v1alpha1.ContainerAnalysis/DeleteNote", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ContainerAnalysisServer).DeleteNote(ctx, req.(*DeleteNoteRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ContainerAnalysis_CreateNote_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateNoteRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ContainerAnalysisServer).CreateNote(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.containeranalysis.v1alpha1.ContainerAnalysis/CreateNote", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ContainerAnalysisServer).CreateNote(ctx, req.(*CreateNoteRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ContainerAnalysis_UpdateNote_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateNoteRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ContainerAnalysisServer).UpdateNote(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.containeranalysis.v1alpha1.ContainerAnalysis/UpdateNote", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ContainerAnalysisServer).UpdateNote(ctx, req.(*UpdateNoteRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ContainerAnalysis_ListNoteOccurrences_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListNoteOccurrencesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ContainerAnalysisServer).ListNoteOccurrences(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.containeranalysis.v1alpha1.ContainerAnalysis/ListNoteOccurrences", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ContainerAnalysisServer).ListNoteOccurrences(ctx, req.(*ListNoteOccurrencesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ContainerAnalysis_GetVulnzOccurrencesSummary_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetVulnzOccurrencesSummaryRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ContainerAnalysisServer).GetVulnzOccurrencesSummary(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.containeranalysis.v1alpha1.ContainerAnalysis/GetVulnzOccurrencesSummary", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ContainerAnalysisServer).GetVulnzOccurrencesSummary(ctx, req.(*GetVulnzOccurrencesSummaryRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ContainerAnalysis_SetIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(google_iam_v11.SetIamPolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ContainerAnalysisServer).SetIamPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.containeranalysis.v1alpha1.ContainerAnalysis/SetIamPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ContainerAnalysisServer).SetIamPolicy(ctx, req.(*google_iam_v11.SetIamPolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ContainerAnalysis_GetIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(google_iam_v11.GetIamPolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ContainerAnalysisServer).GetIamPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.containeranalysis.v1alpha1.ContainerAnalysis/GetIamPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ContainerAnalysisServer).GetIamPolicy(ctx, req.(*google_iam_v11.GetIamPolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ContainerAnalysis_TestIamPermissions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(google_iam_v11.TestIamPermissionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ContainerAnalysisServer).TestIamPermissions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.containeranalysis.v1alpha1.ContainerAnalysis/TestIamPermissions", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ContainerAnalysisServer).TestIamPermissions(ctx, req.(*google_iam_v11.TestIamPermissionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _ContainerAnalysis_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.devtools.containeranalysis.v1alpha1.ContainerAnalysis", + HandlerType: (*ContainerAnalysisServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetOccurrence", + Handler: _ContainerAnalysis_GetOccurrence_Handler, + }, + { + MethodName: "ListOccurrences", + Handler: _ContainerAnalysis_ListOccurrences_Handler, + }, + { + MethodName: "DeleteOccurrence", + Handler: _ContainerAnalysis_DeleteOccurrence_Handler, + }, + { + MethodName: "CreateOccurrence", + Handler: _ContainerAnalysis_CreateOccurrence_Handler, + }, + { + MethodName: "UpdateOccurrence", + Handler: _ContainerAnalysis_UpdateOccurrence_Handler, + }, + { + MethodName: "GetOccurrenceNote", + Handler: _ContainerAnalysis_GetOccurrenceNote_Handler, + }, + { + MethodName: "GetNote", + Handler: _ContainerAnalysis_GetNote_Handler, + }, + { + MethodName: "ListNotes", + Handler: _ContainerAnalysis_ListNotes_Handler, + }, + { + MethodName: "DeleteNote", + Handler: _ContainerAnalysis_DeleteNote_Handler, + }, + { + MethodName: "CreateNote", + Handler: _ContainerAnalysis_CreateNote_Handler, + }, + { + MethodName: "UpdateNote", + Handler: _ContainerAnalysis_UpdateNote_Handler, + }, + { + MethodName: "ListNoteOccurrences", + Handler: _ContainerAnalysis_ListNoteOccurrences_Handler, + }, + { + MethodName: "GetVulnzOccurrencesSummary", + Handler: _ContainerAnalysis_GetVulnzOccurrencesSummary_Handler, + }, + { + MethodName: "SetIamPolicy", + Handler: _ContainerAnalysis_SetIamPolicy_Handler, + }, + { + MethodName: "GetIamPolicy", + Handler: _ContainerAnalysis_GetIamPolicy_Handler, + }, + { + MethodName: "TestIamPermissions", + Handler: _ContainerAnalysis_TestIamPermissions_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/devtools/containeranalysis/v1alpha1/containeranalysis.proto", +} + +func init() { + proto.RegisterFile("google/devtools/containeranalysis/v1alpha1/containeranalysis.proto", fileDescriptor1) +} + +var fileDescriptor1 = []byte{ + // 2432 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0xdd, 0x6f, 0x23, 0x57, + 0x15, 0xdf, 0x89, 0x93, 0x38, 0x3e, 0xce, 0x87, 0x7d, 0xbb, 0xdb, 0xb8, 0x6e, 0x0b, 0xe9, 0x94, + 0xd2, 0x6d, 0x16, 0x6c, 0x12, 0xba, 0x14, 0x92, 0xae, 0xb6, 0xfe, 0x8a, 0xd7, 0xe4, 0xcb, 0x1a, + 0x27, 0xd1, 0x6e, 0x5b, 0x3a, 0xba, 0xf6, 0xdc, 0xb8, 0x83, 0xc7, 0x33, 0xc3, 0xcc, 0xd8, 0xaa, + 0x17, 0xf5, 0x05, 0x90, 0x50, 0x11, 0x5f, 0x02, 0x09, 0x21, 0x21, 0x40, 0xaa, 0x10, 0x12, 0xf0, + 0x52, 0x21, 0xf1, 0xc6, 0x13, 0xe2, 0x15, 0x5e, 0x78, 0x46, 0x7d, 0xe1, 0x81, 0x37, 0xfe, 0x05, + 0x74, 0xef, 0xdc, 0x6b, 0x8f, 0x3f, 0x92, 0x78, 0xe2, 0xad, 0xd4, 0xa7, 0x9d, 0x7b, 0xee, 0xb9, + 0xbf, 0x73, 0xee, 0x99, 0xf3, 0xf1, 0x9b, 0xac, 0x21, 0xdf, 0xb4, 0xac, 0xa6, 0x41, 0xb2, 0x1a, + 0xe9, 0x7a, 0x96, 0x65, 0xb8, 0xd9, 0x86, 0x65, 0x7a, 0x58, 0x37, 0x89, 0x83, 0x4d, 0x6c, 0xf4, + 0x5c, 0xdd, 0xcd, 0x76, 0xb7, 0xb0, 0x61, 0xbf, 0x8b, 0xb7, 0xc6, 0xb7, 0x32, 0xb6, 0x63, 0x79, + 0x16, 0xda, 0xf4, 0x31, 0x32, 0x02, 0x23, 0x33, 0xae, 0x28, 0x30, 0xd2, 0xcf, 0x71, 0x7b, 0xd8, + 0xd6, 0xb3, 0xd8, 0x34, 0x2d, 0x0f, 0x7b, 0xba, 0x65, 0x72, 0xa4, 0x74, 0x18, 0x6f, 0xea, 0xba, + 0x61, 0xa8, 0xd6, 0xb9, 0xda, 0xc6, 0x1e, 0x71, 0x74, 0x6c, 0x08, 0x8c, 0xd7, 0x43, 0x60, 0xe8, + 0x6d, 0xdc, 0x24, 0x6a, 0x1d, 0xf7, 0xef, 0x92, 0xde, 0x0b, 0x71, 0xda, 0xc6, 0x8d, 0x16, 0x3d, + 0xdf, 0xed, 0x18, 0x74, 0xbf, 0xae, 0x1b, 0xba, 0xd7, 0xe3, 0x38, 0xbb, 0x61, 0x70, 0x1c, 0xab, + 0x4b, 0x4c, 0x6c, 0x36, 0x08, 0x3f, 0xfc, 0x19, 0x7e, 0x58, 0xc7, 0xed, 0x6c, 0x77, 0x8b, 0xfe, + 0xa3, 0xda, 0x96, 0xa1, 0x37, 0x04, 0x78, 0x7a, 0x78, 0x7f, 0x68, 0xef, 0x45, 0xbe, 0x67, 0x58, + 0x66, 0xd3, 0xe9, 0x98, 0xa6, 0x6e, 0x36, 0xb3, 0x96, 0x4d, 0x9c, 0xa1, 0x38, 0x3f, 0xc3, 0x95, + 0xd8, 0xaa, 0xde, 0x39, 0xcf, 0x62, 0x53, 0x9c, 0x7f, 0x76, 0x74, 0x8b, 0xb4, 0xed, 0xfe, 0xad, + 0x36, 0x46, 0x37, 0xcf, 0x75, 0x62, 0x68, 0x6a, 0x1b, 0xbb, 0x2d, 0xae, 0xf1, 0xd9, 0x51, 0x0d, + 0x4f, 0x6f, 0x13, 0xd7, 0xc3, 0x6d, 0xdb, 0x57, 0x90, 0x3f, 0x8e, 0x02, 0x1c, 0x37, 0x1a, 0x1d, + 0xc7, 0x21, 0x66, 0x83, 0x20, 0x04, 0xf3, 0x26, 0x6e, 0x93, 0x94, 0xb4, 0x21, 0xdd, 0x8e, 0x29, + 0xec, 0x19, 0xbd, 0x00, 0xcb, 0x0e, 0x71, 0xad, 0x8e, 0xd3, 0x20, 0x6a, 0xc7, 0x31, 0x52, 0x73, + 0x6c, 0x2f, 0x2e, 0x64, 0xa7, 0x8e, 0x81, 0x9e, 0x85, 0x98, 0x69, 0x79, 0x44, 0x65, 0x67, 0x23, + 0x6c, 0x7f, 0x89, 0x0a, 0x8e, 0xe8, 0xf9, 0x0a, 0xcc, 0xb7, 0x74, 0x53, 0x4b, 0x2d, 0x6e, 0x48, + 0xb7, 0x57, 0xb7, 0xef, 0x66, 0xa6, 0x4f, 0xcf, 0xcc, 0x91, 0xe5, 0x91, 0xcc, 0xbe, 0x6e, 0x6a, + 0x0a, 0x83, 0x40, 0x1f, 0x48, 0x70, 0x6b, 0xe8, 0xf5, 0xaa, 0x1a, 0xf1, 0xb0, 0x6e, 0xb8, 0xa9, + 0xa5, 0x0d, 0xe9, 0x76, 0x7c, 0x5b, 0x09, 0x03, 0x7e, 0x16, 0x04, 0x3a, 0xe9, 0xd9, 0x64, 0x58, + 0x52, 0xf4, 0x91, 0x1f, 0xdc, 0x50, 0x6e, 0x76, 0x27, 0xc8, 0x91, 0x0a, 0x2b, 0xf5, 0x8e, 0x6e, + 0x68, 0x7d, 0x17, 0xa2, 0xcc, 0x85, 0xaf, 0x86, 0x71, 0x21, 0x4f, 0x01, 0x06, 0x86, 0x96, 0xeb, + 0x81, 0x35, 0x3a, 0x87, 0x15, 0x8d, 0x38, 0x7a, 0x97, 0x68, 0x2a, 0x2b, 0x8c, 0x54, 0x9c, 0x19, + 0xb8, 0x1f, 0xc6, 0x40, 0xd1, 0x6a, 0xb4, 0x88, 0x53, 0xa1, 0xc7, 0x33, 0x45, 0x1f, 0x8c, 0xda, + 0xe1, 0xb8, 0x4c, 0x8e, 0xda, 0xb0, 0xac, 0x9b, 0xae, 0x87, 0x0d, 0x83, 0x25, 0x65, 0x6a, 0x99, + 0x99, 0x29, 0x87, 0x31, 0x53, 0xf5, 0x4b, 0xef, 0x10, 0x9b, 0xb8, 0x49, 0x9c, 0x4c, 0x25, 0x00, + 0x47, 0xcd, 0x05, 0xe1, 0x51, 0x03, 0x40, 0x23, 0xb6, 0x61, 0xf5, 0xda, 0xc4, 0xf4, 0x52, 0xab, + 0xcc, 0x58, 0x2e, 0xd4, 0x9d, 0xd8, 0x69, 0x5c, 0x37, 0x08, 0x7f, 0xa4, 0x40, 0x0f, 0x6e, 0x28, + 0x01, 0x58, 0x54, 0x07, 0xd0, 0x74, 0xb7, 0x61, 0x75, 0x89, 0x43, 0xb4, 0xd4, 0x1a, 0x33, 0xf2, + 0x46, 0x28, 0x23, 0xfc, 0x74, 0xaf, 0xff, 0xc4, 0x22, 0x17, 0x40, 0x45, 0x1b, 0x10, 0x77, 0x48, + 0x9b, 0x68, 0xba, 0x1f, 0xb6, 0x05, 0x51, 0x16, 0x7d, 0x11, 0xda, 0x85, 0x78, 0xc3, 0x21, 0xd8, + 0x23, 0x2a, 0x2d, 0xbb, 0x54, 0x8c, 0xb9, 0x91, 0x16, 0x6e, 0x88, 0x9a, 0xcc, 0x9c, 0x88, 0x9a, + 0x54, 0xc0, 0x57, 0xa7, 0x02, 0x7a, 0xb8, 0x63, 0x6b, 0xfd, 0xc3, 0x70, 0xf5, 0x61, 0x5f, 0x9d, + 0x0a, 0xf2, 0x31, 0x88, 0xf2, 0xb4, 0x94, 0xff, 0x1b, 0x83, 0x79, 0x5a, 0x47, 0x13, 0x6b, 0xfb, + 0x0e, 0x24, 0xdd, 0x77, 0x2d, 0xc7, 0x53, 0x35, 0xe2, 0x36, 0x1c, 0xdd, 0x66, 0x37, 0xf1, 0x0b, + 0x38, 0xc1, 0x36, 0x8a, 0x03, 0x39, 0x7a, 0x05, 0x12, 0xb4, 0x8d, 0x0d, 0xe9, 0xce, 0x33, 0xdd, + 0x35, 0x2a, 0x0f, 0xaa, 0x8a, 0x9a, 0x8f, 0xcd, 0x5e, 0xf3, 0x26, 0xa0, 0xe1, 0x92, 0xf7, 0x7a, + 0x36, 0x61, 0xcd, 0x24, 0xbe, 0x7d, 0x6f, 0xa6, 0x7a, 0x7f, 0x70, 0x43, 0x49, 0x76, 0x47, 0x85, + 0xe8, 0x0c, 0xc0, 0xaf, 0x6b, 0x66, 0xc7, 0xef, 0x2b, 0x77, 0x43, 0x17, 0x35, 0xc7, 0x8f, 0xd5, + 0xc5, 0x02, 0xbd, 0x03, 0x50, 0xc7, 0x2e, 0xe1, 0xb5, 0xbc, 0x12, 0xde, 0xff, 0x60, 0x2d, 0xe7, + 0xe9, 0x8c, 0x64, 0xf8, 0xd8, 0x25, 0x7e, 0x19, 0xbf, 0x03, 0x51, 0x3e, 0x01, 0x79, 0x51, 0xe5, + 0x67, 0xa8, 0x60, 0xbe, 0x7c, 0x70, 0x43, 0x11, 0xa0, 0xe8, 0xa1, 0xa8, 0x5b, 0x5a, 0x79, 0xa9, + 0x24, 0x33, 0xf1, 0x95, 0xeb, 0xd5, 0xed, 0xa0, 0x58, 0xe9, 0x0a, 0x9d, 0x42, 0x4c, 0x94, 0x55, + 0x2f, 0x85, 0xc2, 0x07, 0xbc, 0x5f, 0xab, 0x34, 0x20, 0x7d, 0x24, 0xf4, 0x36, 0xad, 0x4f, 0x03, + 0x7b, 0x44, 0x63, 0x63, 0x2b, 0xba, 0x11, 0xb9, 0x1d, 0xdf, 0xde, 0x0d, 0x9d, 0x8a, 0x8a, 0x8f, + 0x71, 0xea, 0x18, 0x0a, 0x38, 0xfd, 0x67, 0x54, 0x80, 0x35, 0xf2, 0x9e, 0xad, 0xfb, 0x83, 0x7c, + 0xda, 0x12, 0x5d, 0x1d, 0x1c, 0x11, 0x35, 0x1e, 0x6c, 0x10, 0xf1, 0x59, 0x1a, 0xc4, 0x72, 0x98, + 0x06, 0x91, 0x7e, 0x15, 0x60, 0x70, 0x31, 0x94, 0x80, 0x08, 0x0d, 0x91, 0xdf, 0x19, 0xe8, 0x23, + 0xba, 0x09, 0x0b, 0x06, 0xae, 0x13, 0x31, 0xed, 0xfd, 0x85, 0xfc, 0x13, 0x09, 0xe6, 0x69, 0x69, + 0xa2, 0x9b, 0x90, 0xd8, 0xaf, 0x1c, 0x15, 0xd5, 0xd3, 0xa3, 0x5a, 0xb5, 0x54, 0xa8, 0xec, 0x55, + 0x4a, 0xc5, 0xc4, 0x0d, 0xf4, 0x0c, 0xdc, 0xaa, 0xe6, 0x0a, 0xfb, 0xb9, 0x72, 0x49, 0x3d, 0x3b, + 0x3d, 0x38, 0x2a, 0x29, 0xb9, 0x7c, 0xe5, 0xa0, 0x72, 0xf2, 0x28, 0x31, 0x87, 0x92, 0xb0, 0x92, + 0x3f, 0xad, 0x1c, 0x14, 0xd5, 0x62, 0xe9, 0x24, 0x57, 0x39, 0xa8, 0x25, 0x22, 0x68, 0x0d, 0xe2, + 0x95, 0x43, 0xaa, 0x9b, 0xcf, 0xd5, 0x2a, 0xb5, 0xc4, 0x3c, 0x7a, 0x0a, 0xd6, 0xc4, 0xf1, 0xc3, + 0xdc, 0x51, 0xae, 0x5c, 0x52, 0x12, 0x0b, 0x68, 0x15, 0xa0, 0x58, 0xaa, 0x1e, 0x1c, 0x3f, 0xca, + 0xe5, 0x0f, 0x4a, 0x89, 0x45, 0xb4, 0x02, 0xb1, 0x62, 0xa5, 0x56, 0x38, 0x3e, 0x2b, 0x29, 0x8f, + 0x12, 0xd1, 0x7c, 0x9c, 0x33, 0x0f, 0x5a, 0xac, 0xf2, 0xbf, 0x23, 0x00, 0x83, 0x2c, 0x1b, 0x21, + 0x2e, 0x7a, 0x4a, 0xda, 0x88, 0x0c, 0x13, 0x17, 0x3d, 0xfd, 0xa7, 0xfe, 0x09, 0x36, 0x36, 0x9e, + 0x07, 0xe8, 0xb8, 0xc4, 0x51, 0x49, 0x1b, 0xeb, 0x22, 0x1c, 0x31, 0x2a, 0x29, 0x51, 0x01, 0x8d, + 0xb8, 0x9f, 0xb6, 0x7e, 0xc4, 0xe7, 0xae, 0x8e, 0xb8, 0xaf, 0xce, 0x5e, 0xd7, 0x7d, 0x58, 0xe9, + 0x98, 0xc1, 0xe3, 0x91, 0x2b, 0x8f, 0x2f, 0x8b, 0x03, 0x0c, 0xe0, 0x69, 0x58, 0x6c, 0x58, 0xe6, + 0xb9, 0xde, 0x64, 0x4d, 0x29, 0xa6, 0xf0, 0x15, 0x4a, 0x41, 0x14, 0x6b, 0x9a, 0x43, 0x5c, 0x97, + 0xcf, 0x20, 0xb1, 0x1c, 0x0b, 0xc0, 0xe2, 0x58, 0x00, 0xd0, 0x39, 0x2c, 0xd9, 0x06, 0xf6, 0xce, + 0x2d, 0xa7, 0xcd, 0x08, 0xcc, 0xea, 0xf6, 0xd7, 0x67, 0x9e, 0xc5, 0x99, 0x2a, 0x47, 0x54, 0xfa, + 0xd8, 0x72, 0x01, 0x96, 0x84, 0x14, 0xa5, 0xe0, 0x66, 0xf5, 0x20, 0x77, 0xb2, 0x77, 0xac, 0x1c, + 0x8e, 0x24, 0x50, 0x14, 0x22, 0xe5, 0xfd, 0x52, 0x42, 0x42, 0x4b, 0x30, 0xbf, 0x77, 0x50, 0x7a, + 0x98, 0x98, 0x43, 0x00, 0x8b, 0x85, 0xd3, 0xda, 0xc9, 0xf1, 0x61, 0x22, 0x22, 0xff, 0x59, 0x82, + 0x58, 0xbf, 0xd8, 0xd1, 0x9b, 0xb0, 0x22, 0x1c, 0x52, 0xd9, 0xb0, 0x91, 0x66, 0x19, 0x36, 0xcb, + 0x62, 0x93, 0xae, 0xd2, 0x15, 0x80, 0xc1, 0xdc, 0x47, 0xbb, 0x10, 0xeb, 0x73, 0x76, 0x66, 0x25, + 0xbe, 0xfd, 0xbc, 0xb0, 0x12, 0x20, 0xf6, 0x99, 0x63, 0xa1, 0xa4, 0x0c, 0xf4, 0xe5, 0x1f, 0x4b, + 0x10, 0xeb, 0x8f, 0x04, 0xf4, 0x32, 0xac, 0xb1, 0x91, 0x40, 0x1c, 0xb5, 0x4b, 0x1c, 0x57, 0x00, + 0xc6, 0x94, 0x55, 0x2e, 0x3e, 0xf3, 0xa5, 0xe8, 0x21, 0xc4, 0x5c, 0xbd, 0x69, 0x62, 0xaf, 0xe3, + 0x88, 0x4c, 0xdb, 0x09, 0x3d, 0x85, 0x6a, 0x02, 0x41, 0x19, 0x80, 0xc9, 0x3f, 0x9a, 0x83, 0xd5, + 0xe1, 0x5d, 0x9a, 0xf7, 0x76, 0xa7, 0x6e, 0xe8, 0x0d, 0xb5, 0x45, 0x7a, 0x22, 0xef, 0x7d, 0xc9, + 0x3e, 0xe9, 0xa1, 0xe7, 0x46, 0x7d, 0x89, 0x05, 0xf0, 0xd0, 0x2d, 0x58, 0x6c, 0x91, 0x9e, 0xaa, + 0x6b, 0x9c, 0x38, 0x2c, 0xb4, 0x48, 0xaf, 0xa2, 0xa1, 0x6f, 0xc0, 0x12, 0x15, 0xb3, 0x29, 0x3a, + 0xcf, 0xde, 0x4c, 0xfe, 0xfa, 0xfe, 0x67, 0xf6, 0x09, 0x9b, 0xce, 0x4a, 0xb4, 0xe5, 0x3f, 0xc8, + 0x0f, 0x20, 0xca, 0x65, 0x34, 0x9f, 0xf6, 0x4b, 0x8f, 0xd4, 0x93, 0x47, 0xd5, 0xd2, 0x48, 0x3e, + 0xdd, 0x82, 0x64, 0xb5, 0x5c, 0x55, 0x73, 0xb5, 0x42, 0xa5, 0xa2, 0xe6, 0x94, 0xc3, 0x63, 0xa5, + 0x54, 0x4c, 0x48, 0x68, 0x19, 0x96, 0xaa, 0xfb, 0x95, 0x87, 0x6a, 0xb5, 0x74, 0x98, 0x98, 0x93, + 0x7f, 0x21, 0xc1, 0x72, 0x90, 0x88, 0xa3, 0xb7, 0x00, 0x06, 0xdf, 0x80, 0xfc, 0x7d, 0xef, 0x86, + 0xf6, 0xbd, 0xda, 0x87, 0x50, 0x02, 0x70, 0x94, 0x44, 0x0d, 0x56, 0x6a, 0xbd, 0xe7, 0x11, 0x97, + 0x87, 0x74, 0x6d, 0x20, 0xcf, 0x53, 0xb1, 0xbc, 0x09, 0x37, 0xcb, 0xc4, 0x1b, 0x7c, 0x9d, 0x29, + 0xe4, 0x5b, 0x1d, 0xe2, 0x7a, 0x93, 0x88, 0x9c, 0xfc, 0x4b, 0x09, 0x9e, 0x3e, 0xd0, 0xdd, 0x80, + 0xb6, 0x7b, 0x89, 0x3a, 0xed, 0x25, 0x36, 0x76, 0x28, 0x01, 0xf7, 0x5b, 0x06, 0x5f, 0x51, 0xf9, + 0xb9, 0x6e, 0x78, 0xc4, 0xe1, 0x3e, 0xf1, 0x15, 0xfd, 0xc0, 0xb3, 0xe9, 0xb7, 0xb5, 0xab, 0x3f, + 0xf6, 0x1b, 0xd7, 0x82, 0xb2, 0x44, 0x05, 0x35, 0xfd, 0xb1, 0x9f, 0x3d, 0x74, 0xd3, 0xb3, 0x5a, + 0x44, 0x30, 0x42, 0xa6, 0x7e, 0x42, 0x05, 0xf2, 0xaf, 0x24, 0x58, 0x1f, 0x73, 0xcd, 0xb5, 0x2d, + 0xd3, 0xa5, 0xa4, 0x22, 0x6e, 0x0d, 0xc4, 0xac, 0x43, 0x87, 0x64, 0x15, 0x81, 0xf0, 0x04, 0xa1, + 0xd0, 0xe7, 0x61, 0xcd, 0x24, 0xef, 0x79, 0x6a, 0xc0, 0x33, 0xff, 0x4a, 0x2b, 0x54, 0x5c, 0xed, + 0x7b, 0xf7, 0x45, 0x58, 0x2f, 0x12, 0x83, 0x78, 0x64, 0xba, 0x38, 0xff, 0x5a, 0x82, 0xf5, 0x02, + 0x9b, 0xc1, 0x53, 0xe9, 0x07, 0x02, 0x1d, 0x19, 0x0a, 0xf4, 0x19, 0xc0, 0xc0, 0x5b, 0x5e, 0xdf, + 0xd7, 0xbd, 0x77, 0x00, 0x49, 0xfe, 0x9b, 0x04, 0xeb, 0xa7, 0x6c, 0xcc, 0x4f, 0xe7, 0xdf, 0x27, + 0xe4, 0x47, 0x80, 0x9c, 0xb4, 0xb1, 0xdb, 0xba, 0x70, 0xd6, 0xed, 0xe9, 0xc4, 0xd0, 0x0e, 0xb1, + 0xdb, 0x12, 0xe4, 0x84, 0x3e, 0xcb, 0x9f, 0x83, 0xd5, 0x32, 0xf1, 0x68, 0x6f, 0xbe, 0xec, 0x55, + 0x64, 0x20, 0x35, 0x54, 0x1e, 0x57, 0xe9, 0xff, 0x4c, 0x82, 0x04, 0xcd, 0x43, 0xaa, 0xf7, 0xa9, + 0x29, 0x8e, 0xef, 0x4a, 0x90, 0x0c, 0x38, 0xc5, 0xcb, 0x62, 0x0f, 0x16, 0x28, 0xab, 0x11, 0x05, + 0xf1, 0xa5, 0xb0, 0x23, 0x4d, 0xf1, 0x8f, 0x4f, 0x5d, 0x04, 0x2f, 0x43, 0xd2, 0x2f, 0x82, 0xab, + 0x62, 0xf8, 0x1b, 0x09, 0x92, 0x7e, 0xfa, 0x5f, 0xa1, 0x19, 0x08, 0xe2, 0xfc, 0x50, 0x10, 0xd7, + 0x21, 0xca, 0x08, 0x9b, 0xae, 0x89, 0x28, 0xd2, 0x65, 0x45, 0x43, 0x45, 0x98, 0xa7, 0x4f, 0x3c, + 0x55, 0xc2, 0x5f, 0x99, 0x9d, 0x96, 0xff, 0x28, 0x41, 0xd2, 0xcf, 0xff, 0xab, 0x1c, 0x14, 0xf6, + 0xe6, 0x66, 0xb1, 0x37, 0x5b, 0x9e, 0x7f, 0x4f, 0x82, 0xb4, 0x78, 0xf9, 0xd3, 0x37, 0xee, 0x27, + 0x9e, 0x83, 0xbf, 0x95, 0xe0, 0xd9, 0x89, 0x6e, 0x7c, 0x6a, 0x9a, 0xf4, 0xf7, 0x25, 0x48, 0xf6, + 0xc9, 0xd5, 0x21, 0xf1, 0xb0, 0x86, 0x3d, 0x3c, 0xfa, 0xf5, 0x24, 0x85, 0xfa, 0x7a, 0xba, 0x0b, + 0x4b, 0xc4, 0xd4, 0xa6, 0x25, 0xf2, 0x51, 0x62, 0x6a, 0x74, 0x25, 0xd7, 0xe0, 0x85, 0x32, 0xf1, + 0xce, 0x3a, 0x86, 0xf9, 0x38, 0x10, 0xaa, 0x5a, 0xa7, 0xdd, 0xc6, 0x4e, 0x4f, 0xbc, 0xb8, 0x41, + 0xee, 0x4b, 0xd3, 0x34, 0x10, 0xf9, 0xf7, 0x73, 0x20, 0x5f, 0x86, 0xca, 0xdf, 0x83, 0x47, 0x3f, + 0x00, 0x3a, 0xa6, 0x27, 0x5e, 0xc1, 0xdb, 0x61, 0x5e, 0xc1, 0xd5, 0xf8, 0x99, 0x1a, 0xe9, 0x12, + 0x47, 0xf7, 0x7a, 0x05, 0x6a, 0x44, 0xe1, 0xb6, 0xd2, 0x1f, 0x48, 0xb0, 0x32, 0xb4, 0x83, 0xea, + 0xb0, 0xe4, 0x72, 0x01, 0xe7, 0xdc, 0x7b, 0xb3, 0xfd, 0xdd, 0x55, 0xc0, 0x2b, 0x7d, 0x5c, 0xfa, + 0xfd, 0xc9, 0xec, 0xb3, 0x48, 0x45, 0x14, 0x7f, 0xb1, 0xfd, 0x87, 0x75, 0x48, 0x16, 0x04, 0x72, + 0x8e, 0x23, 0xa3, 0xbf, 0x4a, 0xb0, 0x32, 0x34, 0x09, 0xd0, 0x1b, 0x21, 0x23, 0x33, 0x36, 0x2b, + 0xd3, 0xd7, 0x4c, 0x6f, 0x79, 0xeb, 0x3b, 0xff, 0xfa, 0xcf, 0xcf, 0xe7, 0xee, 0xa0, 0x57, 0x06, + 0xff, 0x9f, 0xf0, 0x6d, 0x5a, 0xb8, 0xf7, 0x6c, 0xc7, 0xfa, 0x26, 0x69, 0x78, 0x6e, 0x76, 0x33, + 0x1b, 0xa8, 0x80, 0xec, 0xe6, 0xfb, 0xe8, 0x1f, 0x12, 0xac, 0x8d, 0xf0, 0x23, 0x14, 0x8a, 0x2a, + 0x4f, 0xe6, 0x7d, 0xe9, 0xc2, 0x4c, 0x18, 0x7e, 0x4e, 0x4c, 0xbc, 0x8f, 0x9f, 0xcd, 0x81, 0x1b, + 0xbd, 0x1f, 0xbc, 0x12, 0xfa, 0x50, 0x82, 0xc4, 0x28, 0xa5, 0x42, 0x85, 0x70, 0x5f, 0x95, 0x13, + 0x09, 0x59, 0xfa, 0xe9, 0xb1, 0x0a, 0x2d, 0xb5, 0x6d, 0xaf, 0x27, 0x9c, 0xdc, 0x0c, 0x11, 0xf4, + 0x7f, 0x4a, 0x90, 0x18, 0xe5, 0x71, 0xe1, 0x9c, 0xbc, 0x80, 0x05, 0x5e, 0x3b, 0x73, 0xee, 0xb1, + 0x4b, 0xbc, 0x26, 0x4f, 0x1f, 0xe9, 0x9d, 0x20, 0xe1, 0xa2, 0x17, 0x1a, 0x25, 0x7e, 0xe1, 0x2e, + 0x74, 0x01, 0x6d, 0x9c, 0xf5, 0x42, 0xdb, 0xd3, 0xbf, 0x95, 0xa1, 0x0b, 0xfd, 0x5d, 0x82, 0xe4, + 0x18, 0xbf, 0x43, 0xc5, 0x6b, 0x57, 0x76, 0x80, 0x0f, 0xa4, 0x43, 0x4f, 0x7b, 0xf9, 0x35, 0x76, + 0x99, 0x2d, 0x94, 0x9d, 0xfa, 0x32, 0x59, 0x9f, 0x82, 0xfd, 0x4e, 0x82, 0x28, 0x27, 0xb3, 0x68, + 0x27, 0xa4, 0xf3, 0xb3, 0xb9, 0x7c, 0x87, 0xb9, 0xfc, 0x12, 0x7a, 0xf1, 0x12, 0x97, 0x99, 0x8f, + 0xb4, 0x1e, 0xfe, 0x22, 0x41, 0xac, 0xcf, 0x43, 0xd1, 0xeb, 0x61, 0x5b, 0x47, 0x90, 0x53, 0xa7, + 0xef, 0x5d, 0xf3, 0x34, 0x6f, 0x39, 0x93, 0xfc, 0x9e, 0x50, 0x08, 0x7e, 0x78, 0x7f, 0x2a, 0x01, + 0x0c, 0xa8, 0x2b, 0xba, 0x17, 0xbe, 0xcd, 0x04, 0x83, 0x7c, 0x51, 0x83, 0xe1, 0x2e, 0x6d, 0x4e, + 0x15, 0xca, 0x8f, 0x24, 0x80, 0x01, 0x47, 0x0e, 0xe7, 0xd2, 0x18, 0xb7, 0xbe, 0xc6, 0x7b, 0xe7, + 0xdd, 0x50, 0x9e, 0x26, 0x7e, 0x3b, 0x3e, 0x8b, 0xa5, 0x2e, 0x0f, 0x58, 0x73, 0x38, 0x97, 0xc7, + 0xd8, 0xf6, 0xf5, 0x5d, 0xde, 0x9e, 0x26, 0xbe, 0xdc, 0xe5, 0x8f, 0x25, 0x78, 0x6a, 0x02, 0x69, + 0x45, 0x7b, 0xd7, 0x49, 0xbe, 0x09, 0xd3, 0xb3, 0x3c, 0x33, 0x0e, 0x4f, 0xe7, 0x69, 0x3a, 0x87, + 0xb8, 0xdb, 0xd0, 0x1c, 0xfd, 0x9f, 0x04, 0xe9, 0x8b, 0x59, 0x1b, 0x3a, 0x7c, 0x52, 0xec, 0xcf, + 0xbf, 0xef, 0xd1, 0x93, 0x25, 0x93, 0xf2, 0x36, 0xbb, 0xf6, 0x17, 0xd0, 0xe6, 0xe5, 0x59, 0xd8, + 0xa5, 0x30, 0x2e, 0xbf, 0xd2, 0x0f, 0x24, 0x58, 0xae, 0x11, 0xaf, 0x82, 0xdb, 0x55, 0xf6, 0x1b, + 0x0a, 0x24, 0x0b, 0xa7, 0x74, 0xdc, 0xce, 0x74, 0xb7, 0x32, 0xc1, 0x4d, 0xe1, 0xf8, 0xad, 0x11, + 0x1d, 0x7f, 0x57, 0xbe, 0xcf, 0xec, 0x7f, 0x4d, 0x7e, 0x35, 0x60, 0x5f, 0xfc, 0xe1, 0x7b, 0x62, + 0x5a, 0xb9, 0x01, 0xec, 0x1d, 0x69, 0x93, 0x39, 0x53, 0xbe, 0xcc, 0x99, 0xf2, 0x27, 0xe8, 0x4c, + 0x73, 0xc4, 0x99, 0x8f, 0x24, 0x40, 0x27, 0xc4, 0x65, 0x42, 0xe2, 0xb4, 0x75, 0xd7, 0xd5, 0x2d, + 0xd3, 0x45, 0xb7, 0x47, 0xcc, 0x8d, 0xab, 0x08, 0xc7, 0x5e, 0x99, 0x42, 0x93, 0xbf, 0xb9, 0x12, + 0x73, 0xf6, 0xbe, 0xbc, 0x33, 0xad, 0xb3, 0xde, 0x18, 0xd6, 0x8e, 0xb4, 0x99, 0xff, 0xa1, 0x04, + 0x2f, 0x35, 0xac, 0xb6, 0xb0, 0x7b, 0x71, 0x36, 0x55, 0xa5, 0x37, 0xdf, 0xe2, 0x4a, 0x4d, 0xcb, + 0xc0, 0x66, 0x33, 0x63, 0x39, 0xcd, 0x6c, 0x93, 0x98, 0xac, 0x09, 0x67, 0xfd, 0x2d, 0x6c, 0xeb, + 0xee, 0x34, 0xbf, 0xde, 0xd9, 0x1d, 0xdb, 0xfa, 0x70, 0x2e, 0x52, 0x2e, 0xe4, 0xea, 0x8b, 0x0c, + 0xed, 0xcb, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x50, 0x37, 0x6f, 0x01, 0x62, 0x25, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/containeranalysis/v1alpha1/image_basis.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/containeranalysis/v1alpha1/image_basis.pb.go new file mode 100644 index 0000000..fbafe4c --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/devtools/containeranalysis/v1alpha1/image_basis.pb.go @@ -0,0 +1,324 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/devtools/containeranalysis/v1alpha1/image_basis.proto + +package containeranalysis + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Instructions from dockerfile +type DockerImage_Layer_Directive int32 + +const ( + // Default value for unsupported/missing directive + DockerImage_Layer_DIRECTIVE_UNSPECIFIED DockerImage_Layer_Directive = 0 + // https://docs.docker.com/reference/builder/#maintainer + DockerImage_Layer_MAINTAINER DockerImage_Layer_Directive = 1 + // https://docs.docker.com/reference/builder/#run + DockerImage_Layer_RUN DockerImage_Layer_Directive = 2 + // https://docs.docker.com/reference/builder/#cmd + DockerImage_Layer_CMD DockerImage_Layer_Directive = 3 + // https://docs.docker.com/reference/builder/#label + DockerImage_Layer_LABEL DockerImage_Layer_Directive = 4 + // https://docs.docker.com/reference/builder/#expose + DockerImage_Layer_EXPOSE DockerImage_Layer_Directive = 5 + // https://docs.docker.com/reference/builder/#env + DockerImage_Layer_ENV DockerImage_Layer_Directive = 6 + // https://docs.docker.com/reference/builder/#add + DockerImage_Layer_ADD DockerImage_Layer_Directive = 7 + // https://docs.docker.com/reference/builder/#copy + DockerImage_Layer_COPY DockerImage_Layer_Directive = 8 + // https://docs.docker.com/reference/builder/#entrypoint + DockerImage_Layer_ENTRYPOINT DockerImage_Layer_Directive = 9 + // https://docs.docker.com/reference/builder/#volume + DockerImage_Layer_VOLUME DockerImage_Layer_Directive = 10 + // https://docs.docker.com/reference/builder/#user + DockerImage_Layer_USER DockerImage_Layer_Directive = 11 + // https://docs.docker.com/reference/builder/#workdir + DockerImage_Layer_WORKDIR DockerImage_Layer_Directive = 12 + // https://docs.docker.com/reference/builder/#arg + DockerImage_Layer_ARG DockerImage_Layer_Directive = 13 + // https://docs.docker.com/reference/builder/#onbuild + DockerImage_Layer_ONBUILD DockerImage_Layer_Directive = 14 + // https://docs.docker.com/reference/builder/#stopsignal + DockerImage_Layer_STOPSIGNAL DockerImage_Layer_Directive = 15 + // https://docs.docker.com/reference/builder/#healthcheck + DockerImage_Layer_HEALTHCHECK DockerImage_Layer_Directive = 16 + // https://docs.docker.com/reference/builder/#shell + DockerImage_Layer_SHELL DockerImage_Layer_Directive = 17 +) + +var DockerImage_Layer_Directive_name = map[int32]string{ + 0: "DIRECTIVE_UNSPECIFIED", + 1: "MAINTAINER", + 2: "RUN", + 3: "CMD", + 4: "LABEL", + 5: "EXPOSE", + 6: "ENV", + 7: "ADD", + 8: "COPY", + 9: "ENTRYPOINT", + 10: "VOLUME", + 11: "USER", + 12: "WORKDIR", + 13: "ARG", + 14: "ONBUILD", + 15: "STOPSIGNAL", + 16: "HEALTHCHECK", + 17: "SHELL", +} +var DockerImage_Layer_Directive_value = map[string]int32{ + "DIRECTIVE_UNSPECIFIED": 0, + "MAINTAINER": 1, + "RUN": 2, + "CMD": 3, + "LABEL": 4, + "EXPOSE": 5, + "ENV": 6, + "ADD": 7, + "COPY": 8, + "ENTRYPOINT": 9, + "VOLUME": 10, + "USER": 11, + "WORKDIR": 12, + "ARG": 13, + "ONBUILD": 14, + "STOPSIGNAL": 15, + "HEALTHCHECK": 16, + "SHELL": 17, +} + +func (x DockerImage_Layer_Directive) String() string { + return proto.EnumName(DockerImage_Layer_Directive_name, int32(x)) +} +func (DockerImage_Layer_Directive) EnumDescriptor() ([]byte, []int) { + return fileDescriptor2, []int{0, 0, 0} +} + +// DockerImage holds types defining base image notes +// and derived image occurrences. +type DockerImage struct { +} + +func (m *DockerImage) Reset() { *m = DockerImage{} } +func (m *DockerImage) String() string { return proto.CompactTextString(m) } +func (*DockerImage) ProtoMessage() {} +func (*DockerImage) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } + +// Layer holds metadata specific to a layer of a Docker image. +type DockerImage_Layer struct { + // The recovered Dockerfile directive used to construct this layer. + Directive DockerImage_Layer_Directive `protobuf:"varint,1,opt,name=directive,enum=google.devtools.containeranalysis.v1alpha1.DockerImage_Layer_Directive" json:"directive,omitempty"` + // The recovered arguments to the Dockerfile directive. + Arguments string `protobuf:"bytes,2,opt,name=arguments" json:"arguments,omitempty"` +} + +func (m *DockerImage_Layer) Reset() { *m = DockerImage_Layer{} } +func (m *DockerImage_Layer) String() string { return proto.CompactTextString(m) } +func (*DockerImage_Layer) ProtoMessage() {} +func (*DockerImage_Layer) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0, 0} } + +func (m *DockerImage_Layer) GetDirective() DockerImage_Layer_Directive { + if m != nil { + return m.Directive + } + return DockerImage_Layer_DIRECTIVE_UNSPECIFIED +} + +func (m *DockerImage_Layer) GetArguments() string { + if m != nil { + return m.Arguments + } + return "" +} + +// A set of properties that uniquely identify a given Docker image. +type DockerImage_Fingerprint struct { + // The layer-id of the final layer in the Docker image's v1 + // representation. + // This field can be used as a filter in list requests. + V1Name string `protobuf:"bytes,1,opt,name=v1_name,json=v1Name" json:"v1_name,omitempty"` + // The ordered list of v2 blobs that represent a given image. + V2Blob []string `protobuf:"bytes,2,rep,name=v2_blob,json=v2Blob" json:"v2_blob,omitempty"` + // Output only. The name of the image's v2 blobs computed via: + // [bottom] := v2_blob[bottom] + // [N] := sha256(v2_blob[N] + " " + v2_name[N+1]) + // Only the name of the final blob is kept. + // This field can be used as a filter in list requests. + V2Name string `protobuf:"bytes,3,opt,name=v2_name,json=v2Name" json:"v2_name,omitempty"` +} + +func (m *DockerImage_Fingerprint) Reset() { *m = DockerImage_Fingerprint{} } +func (m *DockerImage_Fingerprint) String() string { return proto.CompactTextString(m) } +func (*DockerImage_Fingerprint) ProtoMessage() {} +func (*DockerImage_Fingerprint) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0, 1} } + +func (m *DockerImage_Fingerprint) GetV1Name() string { + if m != nil { + return m.V1Name + } + return "" +} + +func (m *DockerImage_Fingerprint) GetV2Blob() []string { + if m != nil { + return m.V2Blob + } + return nil +} + +func (m *DockerImage_Fingerprint) GetV2Name() string { + if m != nil { + return m.V2Name + } + return "" +} + +// Basis describes the base image portion (Note) of the DockerImage +// relationship. Linked occurrences are derived from this or an +// equivalent image via: +// FROM +// Or an equivalent reference, e.g. a tag of the resource_url. +type DockerImage_Basis struct { + // The resource_url for the resource representing the basis of + // associated occurrence images. + ResourceUrl string `protobuf:"bytes,1,opt,name=resource_url,json=resourceUrl" json:"resource_url,omitempty"` + // The fingerprint of the base image + Fingerprint *DockerImage_Fingerprint `protobuf:"bytes,2,opt,name=fingerprint" json:"fingerprint,omitempty"` +} + +func (m *DockerImage_Basis) Reset() { *m = DockerImage_Basis{} } +func (m *DockerImage_Basis) String() string { return proto.CompactTextString(m) } +func (*DockerImage_Basis) ProtoMessage() {} +func (*DockerImage_Basis) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0, 2} } + +func (m *DockerImage_Basis) GetResourceUrl() string { + if m != nil { + return m.ResourceUrl + } + return "" +} + +func (m *DockerImage_Basis) GetFingerprint() *DockerImage_Fingerprint { + if m != nil { + return m.Fingerprint + } + return nil +} + +// Derived describes the derived image portion (Occurrence) of the +// DockerImage relationship. This image would be produced from a Dockerfile +// with FROM . +type DockerImage_Derived struct { + // The fingerprint of the derived image + Fingerprint *DockerImage_Fingerprint `protobuf:"bytes,1,opt,name=fingerprint" json:"fingerprint,omitempty"` + // Output only. The number of layers by which this image differs from + // the associated image basis. + Distance uint32 `protobuf:"varint,2,opt,name=distance" json:"distance,omitempty"` + // This contains layer-specific metadata, if populated it + // has length "distance" and is ordered with [distance] being the + // layer immediately following the base image and [1] + // being the final layer. + LayerInfo []*DockerImage_Layer `protobuf:"bytes,3,rep,name=layer_info,json=layerInfo" json:"layer_info,omitempty"` + // Output only.This contains the base image url for the derived image + // Occurrence + BaseResourceUrl string `protobuf:"bytes,4,opt,name=base_resource_url,json=baseResourceUrl" json:"base_resource_url,omitempty"` +} + +func (m *DockerImage_Derived) Reset() { *m = DockerImage_Derived{} } +func (m *DockerImage_Derived) String() string { return proto.CompactTextString(m) } +func (*DockerImage_Derived) ProtoMessage() {} +func (*DockerImage_Derived) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0, 3} } + +func (m *DockerImage_Derived) GetFingerprint() *DockerImage_Fingerprint { + if m != nil { + return m.Fingerprint + } + return nil +} + +func (m *DockerImage_Derived) GetDistance() uint32 { + if m != nil { + return m.Distance + } + return 0 +} + +func (m *DockerImage_Derived) GetLayerInfo() []*DockerImage_Layer { + if m != nil { + return m.LayerInfo + } + return nil +} + +func (m *DockerImage_Derived) GetBaseResourceUrl() string { + if m != nil { + return m.BaseResourceUrl + } + return "" +} + +func init() { + proto.RegisterType((*DockerImage)(nil), "google.devtools.containeranalysis.v1alpha1.DockerImage") + proto.RegisterType((*DockerImage_Layer)(nil), "google.devtools.containeranalysis.v1alpha1.DockerImage.Layer") + proto.RegisterType((*DockerImage_Fingerprint)(nil), "google.devtools.containeranalysis.v1alpha1.DockerImage.Fingerprint") + proto.RegisterType((*DockerImage_Basis)(nil), "google.devtools.containeranalysis.v1alpha1.DockerImage.Basis") + proto.RegisterType((*DockerImage_Derived)(nil), "google.devtools.containeranalysis.v1alpha1.DockerImage.Derived") + proto.RegisterEnum("google.devtools.containeranalysis.v1alpha1.DockerImage_Layer_Directive", DockerImage_Layer_Directive_name, DockerImage_Layer_Directive_value) +} + +func init() { + proto.RegisterFile("google/devtools/containeranalysis/v1alpha1/image_basis.proto", fileDescriptor2) +} + +var fileDescriptor2 = []byte{ + // 627 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x94, 0xdf, 0x6e, 0xda, 0x30, + 0x14, 0xc6, 0x17, 0x28, 0xd0, 0x9c, 0xf4, 0x8f, 0x6b, 0x69, 0x1a, 0x43, 0xbd, 0x60, 0x95, 0x26, + 0x55, 0xbd, 0x08, 0x82, 0x5d, 0x6e, 0xbb, 0x80, 0xc4, 0x85, 0xa8, 0x69, 0x40, 0x06, 0xba, 0x76, + 0x9b, 0x84, 0x0c, 0xb8, 0x59, 0xb4, 0x60, 0x23, 0x27, 0x45, 0xea, 0x3b, 0xec, 0x66, 0x37, 0x7d, + 0x80, 0x3d, 0xe1, 0xde, 0x60, 0x93, 0x53, 0x28, 0xdd, 0xaa, 0x49, 0xd5, 0xa6, 0xdd, 0x99, 0xf3, + 0xf9, 0xfb, 0x7d, 0xf6, 0xf1, 0x21, 0xf0, 0x26, 0x94, 0x32, 0x8c, 0x79, 0x6d, 0xca, 0x17, 0xa9, + 0x94, 0x71, 0x52, 0x9b, 0x48, 0x91, 0xb2, 0x48, 0x70, 0xc5, 0x04, 0x8b, 0xaf, 0x93, 0x28, 0xa9, + 0x2d, 0xea, 0x2c, 0x9e, 0x7f, 0x62, 0xf5, 0x5a, 0x34, 0x63, 0x21, 0x1f, 0x8d, 0x59, 0x12, 0x25, + 0xf6, 0x5c, 0xc9, 0x54, 0xe2, 0xa3, 0x5b, 0xb7, 0xbd, 0x72, 0xdb, 0x0f, 0xdc, 0xf6, 0xca, 0x5d, + 0xd9, 0x5f, 0x26, 0xb1, 0x79, 0x54, 0x63, 0x42, 0xc8, 0x94, 0xa5, 0x91, 0x14, 0x4b, 0xd2, 0xc1, + 0x4d, 0x09, 0x2c, 0x57, 0x4e, 0x3e, 0x73, 0xe5, 0xe9, 0x94, 0xca, 0x8f, 0x1c, 0x14, 0x7c, 0x76, + 0xcd, 0x15, 0xe6, 0x60, 0x4e, 0x23, 0xc5, 0x27, 0x69, 0xb4, 0xe0, 0x65, 0xa3, 0x6a, 0x1c, 0xee, + 0x34, 0xda, 0xf6, 0xe3, 0x73, 0xed, 0x7b, 0x54, 0x3b, 0x23, 0xda, 0xee, 0x0a, 0x47, 0xd7, 0x64, + 0xbc, 0x0f, 0x26, 0x53, 0xe1, 0xd5, 0x8c, 0x8b, 0x34, 0x29, 0xe7, 0xaa, 0xc6, 0xa1, 0x49, 0xd7, + 0x85, 0x83, 0xef, 0x06, 0x98, 0x77, 0x36, 0xfc, 0x1c, 0x9e, 0xba, 0x1e, 0x25, 0xce, 0xc0, 0x3b, + 0x23, 0xa3, 0x61, 0xd0, 0xef, 0x11, 0xc7, 0x3b, 0xf6, 0x88, 0x8b, 0x9e, 0xe0, 0x1d, 0x80, 0xd3, + 0xa6, 0x17, 0x0c, 0x9a, 0x5e, 0x40, 0x28, 0x32, 0x70, 0x09, 0xf2, 0x74, 0x18, 0xa0, 0x9c, 0x5e, + 0x38, 0xa7, 0x2e, 0xca, 0x63, 0x13, 0x0a, 0x7e, 0xb3, 0x45, 0x7c, 0xb4, 0x81, 0x01, 0x8a, 0xe4, + 0xbc, 0xd7, 0xed, 0x13, 0x54, 0xd0, 0x3a, 0x09, 0xce, 0x50, 0x51, 0x2f, 0x9a, 0xae, 0x8b, 0x4a, + 0x78, 0x13, 0x36, 0x9c, 0x6e, 0xef, 0x02, 0x6d, 0x6a, 0x28, 0x09, 0x06, 0xf4, 0xa2, 0xd7, 0xf5, + 0x82, 0x01, 0x32, 0xb5, 0xef, 0xac, 0xeb, 0x0f, 0x4f, 0x09, 0x02, 0xbd, 0x6b, 0xd8, 0x27, 0x14, + 0x59, 0xd8, 0x82, 0xd2, 0xbb, 0x2e, 0x3d, 0x71, 0x3d, 0x8a, 0xb6, 0x32, 0x0a, 0x6d, 0xa3, 0x6d, + 0x5d, 0xed, 0x06, 0xad, 0xa1, 0xe7, 0xbb, 0x68, 0x47, 0x83, 0xfa, 0x83, 0x6e, 0xaf, 0xef, 0xb5, + 0x83, 0xa6, 0x8f, 0x76, 0xf1, 0x2e, 0x58, 0x1d, 0xd2, 0xf4, 0x07, 0x1d, 0xa7, 0x43, 0x9c, 0x13, + 0x84, 0xf4, 0xe1, 0xfa, 0x1d, 0xe2, 0xfb, 0x68, 0xaf, 0x72, 0x0e, 0xd6, 0x71, 0x24, 0x42, 0xae, + 0xe6, 0x2a, 0x12, 0x29, 0x7e, 0x06, 0xa5, 0x45, 0x7d, 0x24, 0xd8, 0xec, 0xf6, 0x11, 0x4c, 0x5a, + 0x5c, 0xd4, 0x03, 0x36, 0xe3, 0x99, 0xd0, 0x18, 0x8d, 0x63, 0x39, 0x2e, 0xe7, 0xaa, 0xf9, 0x4c, + 0x68, 0xb4, 0x62, 0x39, 0x5e, 0x0a, 0x99, 0x23, 0xbf, 0x74, 0x34, 0xb4, 0xa3, 0xf2, 0xd5, 0x80, + 0x42, 0x4b, 0x4f, 0x11, 0x7e, 0x01, 0x5b, 0x8a, 0x27, 0xf2, 0x4a, 0x4d, 0xf8, 0xe8, 0x4a, 0xc5, + 0x4b, 0xb2, 0xb5, 0xaa, 0x0d, 0x55, 0x8c, 0x39, 0x58, 0x97, 0xeb, 0x63, 0x64, 0x2f, 0x63, 0x35, + 0x9c, 0xbf, 0x1d, 0x80, 0x7b, 0x37, 0xa2, 0xf7, 0xb9, 0x95, 0x9b, 0x1c, 0x94, 0x5c, 0xae, 0xa2, + 0x05, 0x9f, 0xfe, 0x1e, 0x69, 0xfc, 0x9f, 0x48, 0x5c, 0x81, 0xcd, 0x69, 0x94, 0xa4, 0x4c, 0x4c, + 0x78, 0x76, 0xad, 0x6d, 0x7a, 0xf7, 0x1b, 0x7f, 0x04, 0x88, 0xf5, 0xac, 0x8e, 0x22, 0x71, 0x29, + 0xcb, 0xf9, 0x6a, 0xfe, 0xd0, 0x6a, 0xbc, 0xfd, 0xa7, 0xa9, 0xa7, 0x66, 0x06, 0xf4, 0xc4, 0xa5, + 0xc4, 0x47, 0xb0, 0x37, 0x66, 0x09, 0x1f, 0xfd, 0xd2, 0xfb, 0x8d, 0xac, 0xf7, 0xbb, 0x5a, 0xa0, + 0xeb, 0xfe, 0xb7, 0xbe, 0x18, 0xf0, 0x72, 0x22, 0x67, 0xab, 0xec, 0x3f, 0x47, 0xf6, 0x8c, 0xf7, + 0x1f, 0x96, 0x9b, 0x42, 0x19, 0x33, 0x11, 0xda, 0x52, 0x85, 0xb5, 0x90, 0x8b, 0xec, 0x0f, 0x5e, + 0xbb, 0x95, 0xd8, 0x3c, 0x4a, 0x1e, 0xf3, 0xad, 0x79, 0xfd, 0x40, 0xfa, 0x96, 0xcb, 0xb7, 0x9d, + 0xe6, 0xb8, 0x98, 0xd1, 0x5e, 0xfd, 0x0c, 0x00, 0x00, 0xff, 0xff, 0xc3, 0xd1, 0xf4, 0x9a, 0xb8, + 0x04, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/containeranalysis/v1alpha1/package_vulnerability.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/containeranalysis/v1alpha1/package_vulnerability.pb.go new file mode 100644 index 0000000..20a8167 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/devtools/containeranalysis/v1alpha1/package_vulnerability.pb.go @@ -0,0 +1,468 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/devtools/containeranalysis/v1alpha1/package_vulnerability.proto + +package containeranalysis + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Note provider-assigned severity/impact ranking +type VulnerabilityType_Severity int32 + +const ( + // Unknown Impact + VulnerabilityType_SEVERITY_UNSPECIFIED VulnerabilityType_Severity = 0 + // Minimal Impact + VulnerabilityType_MINIMAL VulnerabilityType_Severity = 1 + // Low Impact + VulnerabilityType_LOW VulnerabilityType_Severity = 2 + // Medium Impact + VulnerabilityType_MEDIUM VulnerabilityType_Severity = 3 + // High Impact + VulnerabilityType_HIGH VulnerabilityType_Severity = 4 + // Critical Impact + VulnerabilityType_CRITICAL VulnerabilityType_Severity = 5 +) + +var VulnerabilityType_Severity_name = map[int32]string{ + 0: "SEVERITY_UNSPECIFIED", + 1: "MINIMAL", + 2: "LOW", + 3: "MEDIUM", + 4: "HIGH", + 5: "CRITICAL", +} +var VulnerabilityType_Severity_value = map[string]int32{ + "SEVERITY_UNSPECIFIED": 0, + "MINIMAL": 1, + "LOW": 2, + "MEDIUM": 3, + "HIGH": 4, + "CRITICAL": 5, +} + +func (x VulnerabilityType_Severity) String() string { + return proto.EnumName(VulnerabilityType_Severity_name, int32(x)) +} +func (VulnerabilityType_Severity) EnumDescriptor() ([]byte, []int) { + return fileDescriptor3, []int{0, 0} +} + +// Whether this is an ordinary package version or a +// sentinel MIN/MAX version. +type VulnerabilityType_Version_VersionKind int32 + +const ( + // A standard package version, defined by the other fields. + VulnerabilityType_Version_NORMAL VulnerabilityType_Version_VersionKind = 0 + // A special version representing negative infinity, + // other fields are ignored. + VulnerabilityType_Version_MINIMUM VulnerabilityType_Version_VersionKind = 1 + // A special version representing positive infinity, + // other fields are ignored. + VulnerabilityType_Version_MAXIMUM VulnerabilityType_Version_VersionKind = 2 +) + +var VulnerabilityType_Version_VersionKind_name = map[int32]string{ + 0: "NORMAL", + 1: "MINIMUM", + 2: "MAXIMUM", +} +var VulnerabilityType_Version_VersionKind_value = map[string]int32{ + "NORMAL": 0, + "MINIMUM": 1, + "MAXIMUM": 2, +} + +func (x VulnerabilityType_Version_VersionKind) String() string { + return proto.EnumName(VulnerabilityType_Version_VersionKind_name, int32(x)) +} +func (VulnerabilityType_Version_VersionKind) EnumDescriptor() ([]byte, []int) { + return fileDescriptor3, []int{0, 0, 0} +} + +// VulnerabilityType provides metadata about a security vulnerability. +type VulnerabilityType struct { + // The CVSS score for this Vulnerability. + CvssScore float32 `protobuf:"fixed32,2,opt,name=cvss_score,json=cvssScore" json:"cvss_score,omitempty"` + // Note provider assigned impact of the vulnerability + Severity VulnerabilityType_Severity `protobuf:"varint,3,opt,name=severity,enum=google.devtools.containeranalysis.v1alpha1.VulnerabilityType_Severity" json:"severity,omitempty"` + // All information about the package to specifically identify this + // vulnerability. One entry per (version range and cpe_uri) the + // package vulnerability has manifested in. + Details []*VulnerabilityType_Detail `protobuf:"bytes,4,rep,name=details" json:"details,omitempty"` +} + +func (m *VulnerabilityType) Reset() { *m = VulnerabilityType{} } +func (m *VulnerabilityType) String() string { return proto.CompactTextString(m) } +func (*VulnerabilityType) ProtoMessage() {} +func (*VulnerabilityType) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0} } + +func (m *VulnerabilityType) GetCvssScore() float32 { + if m != nil { + return m.CvssScore + } + return 0 +} + +func (m *VulnerabilityType) GetSeverity() VulnerabilityType_Severity { + if m != nil { + return m.Severity + } + return VulnerabilityType_SEVERITY_UNSPECIFIED +} + +func (m *VulnerabilityType) GetDetails() []*VulnerabilityType_Detail { + if m != nil { + return m.Details + } + return nil +} + +// Version contains structured information about the version of the package. +// For a discussion of this in Debian/Ubuntu: +// http://serverfault.com/questions/604541/debian-packages-version-convention +// For a discussion of this in Redhat/Fedora/Centos: +// http://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ +type VulnerabilityType_Version struct { + // Used to correct mistakes in the version numbering scheme. + Epoch int32 `protobuf:"varint,1,opt,name=epoch" json:"epoch,omitempty"` + // The main part of the version name. + Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` + // The iteration of the package build from the above version. + Revision string `protobuf:"bytes,3,opt,name=revision" json:"revision,omitempty"` + // Distinguish between sentinel MIN/MAX versions and normal versions. + // If kind is not NORMAL, then the other fields are ignored. + Kind VulnerabilityType_Version_VersionKind `protobuf:"varint,5,opt,name=kind,enum=google.devtools.containeranalysis.v1alpha1.VulnerabilityType_Version_VersionKind" json:"kind,omitempty"` +} + +func (m *VulnerabilityType_Version) Reset() { *m = VulnerabilityType_Version{} } +func (m *VulnerabilityType_Version) String() string { return proto.CompactTextString(m) } +func (*VulnerabilityType_Version) ProtoMessage() {} +func (*VulnerabilityType_Version) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 0} } + +func (m *VulnerabilityType_Version) GetEpoch() int32 { + if m != nil { + return m.Epoch + } + return 0 +} + +func (m *VulnerabilityType_Version) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *VulnerabilityType_Version) GetRevision() string { + if m != nil { + return m.Revision + } + return "" +} + +func (m *VulnerabilityType_Version) GetKind() VulnerabilityType_Version_VersionKind { + if m != nil { + return m.Kind + } + return VulnerabilityType_Version_NORMAL +} + +// Identifies all occurrences of this vulnerability in the package for a +// specific distro/location +// For example: glibc in cpe:/o:debian:debian_linux:8 for versions 2.1 - 2.2 +type VulnerabilityType_Detail struct { + // The cpe_uri in [cpe format] (https://cpe.mitre.org/specification/) in + // which the vulnerability manifests. Examples include distro or storage + // location for vulnerable jar. + // This field can be used as a filter in list requests. + CpeUri string `protobuf:"bytes,1,opt,name=cpe_uri,json=cpeUri" json:"cpe_uri,omitempty"` + // The name of the package where the vulnerability was found. + // This field can be used as a filter in list requests. + Package string `protobuf:"bytes,8,opt,name=package" json:"package,omitempty"` + // The min version of the package in which the vulnerability exists. + MinAffectedVersion *VulnerabilityType_Version `protobuf:"bytes,6,opt,name=min_affected_version,json=minAffectedVersion" json:"min_affected_version,omitempty"` + // The max version of the package in which the vulnerability exists. + // This field can be used as a filter in list requests. + MaxAffectedVersion *VulnerabilityType_Version `protobuf:"bytes,7,opt,name=max_affected_version,json=maxAffectedVersion" json:"max_affected_version,omitempty"` + // The severity (eg: distro assigned severity) for this vulnerability. + SeverityName string `protobuf:"bytes,4,opt,name=severity_name,json=severityName" json:"severity_name,omitempty"` + // A vendor-specific description of this note. + Description string `protobuf:"bytes,9,opt,name=description" json:"description,omitempty"` + // The fix for this specific package version. + FixedLocation *VulnerabilityType_VulnerabilityLocation `protobuf:"bytes,5,opt,name=fixed_location,json=fixedLocation" json:"fixed_location,omitempty"` + // The type of package; whether native or non native(ruby gems, + // node.js packages etc) + PackageType string `protobuf:"bytes,10,opt,name=package_type,json=packageType" json:"package_type,omitempty"` +} + +func (m *VulnerabilityType_Detail) Reset() { *m = VulnerabilityType_Detail{} } +func (m *VulnerabilityType_Detail) String() string { return proto.CompactTextString(m) } +func (*VulnerabilityType_Detail) ProtoMessage() {} +func (*VulnerabilityType_Detail) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 1} } + +func (m *VulnerabilityType_Detail) GetCpeUri() string { + if m != nil { + return m.CpeUri + } + return "" +} + +func (m *VulnerabilityType_Detail) GetPackage() string { + if m != nil { + return m.Package + } + return "" +} + +func (m *VulnerabilityType_Detail) GetMinAffectedVersion() *VulnerabilityType_Version { + if m != nil { + return m.MinAffectedVersion + } + return nil +} + +func (m *VulnerabilityType_Detail) GetMaxAffectedVersion() *VulnerabilityType_Version { + if m != nil { + return m.MaxAffectedVersion + } + return nil +} + +func (m *VulnerabilityType_Detail) GetSeverityName() string { + if m != nil { + return m.SeverityName + } + return "" +} + +func (m *VulnerabilityType_Detail) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *VulnerabilityType_Detail) GetFixedLocation() *VulnerabilityType_VulnerabilityLocation { + if m != nil { + return m.FixedLocation + } + return nil +} + +func (m *VulnerabilityType_Detail) GetPackageType() string { + if m != nil { + return m.PackageType + } + return "" +} + +// Used by Occurrence to point to where the vulnerability exists and how +// to fix it. +type VulnerabilityType_VulnerabilityDetails struct { + // The type of package; whether native or non native(ruby gems, + // node.js packages etc) + Type string `protobuf:"bytes,3,opt,name=type" json:"type,omitempty"` + // Output only. The note provider assigned Severity of the vulnerability. + Severity VulnerabilityType_Severity `protobuf:"varint,4,opt,name=severity,enum=google.devtools.containeranalysis.v1alpha1.VulnerabilityType_Severity" json:"severity,omitempty"` + // Output only. The CVSS score of this vulnerability. CVSS score is on a + // scale of 0-10 where 0 indicates low severity and 10 indicates high + // severity. + CvssScore float32 `protobuf:"fixed32,5,opt,name=cvss_score,json=cvssScore" json:"cvss_score,omitempty"` + // The set of affected locations and their fixes (if available) within + // the associated resource. + PackageIssue []*VulnerabilityType_PackageIssue `protobuf:"bytes,6,rep,name=package_issue,json=packageIssue" json:"package_issue,omitempty"` +} + +func (m *VulnerabilityType_VulnerabilityDetails) Reset() { + *m = VulnerabilityType_VulnerabilityDetails{} +} +func (m *VulnerabilityType_VulnerabilityDetails) String() string { return proto.CompactTextString(m) } +func (*VulnerabilityType_VulnerabilityDetails) ProtoMessage() {} +func (*VulnerabilityType_VulnerabilityDetails) Descriptor() ([]byte, []int) { + return fileDescriptor3, []int{0, 2} +} + +func (m *VulnerabilityType_VulnerabilityDetails) GetType() string { + if m != nil { + return m.Type + } + return "" +} + +func (m *VulnerabilityType_VulnerabilityDetails) GetSeverity() VulnerabilityType_Severity { + if m != nil { + return m.Severity + } + return VulnerabilityType_SEVERITY_UNSPECIFIED +} + +func (m *VulnerabilityType_VulnerabilityDetails) GetCvssScore() float32 { + if m != nil { + return m.CvssScore + } + return 0 +} + +func (m *VulnerabilityType_VulnerabilityDetails) GetPackageIssue() []*VulnerabilityType_PackageIssue { + if m != nil { + return m.PackageIssue + } + return nil +} + +// This message wraps a location affected by a vulnerability and its +// associated fix (if one is available). +type VulnerabilityType_PackageIssue struct { + // The location of the vulnerability. + AffectedLocation *VulnerabilityType_VulnerabilityLocation `protobuf:"bytes,1,opt,name=affected_location,json=affectedLocation" json:"affected_location,omitempty"` + // The location of the available fix for vulnerability. + FixedLocation *VulnerabilityType_VulnerabilityLocation `protobuf:"bytes,2,opt,name=fixed_location,json=fixedLocation" json:"fixed_location,omitempty"` + // The severity (eg: distro assigned severity) for this vulnerability. + SeverityName string `protobuf:"bytes,3,opt,name=severity_name,json=severityName" json:"severity_name,omitempty"` +} + +func (m *VulnerabilityType_PackageIssue) Reset() { *m = VulnerabilityType_PackageIssue{} } +func (m *VulnerabilityType_PackageIssue) String() string { return proto.CompactTextString(m) } +func (*VulnerabilityType_PackageIssue) ProtoMessage() {} +func (*VulnerabilityType_PackageIssue) Descriptor() ([]byte, []int) { + return fileDescriptor3, []int{0, 3} +} + +func (m *VulnerabilityType_PackageIssue) GetAffectedLocation() *VulnerabilityType_VulnerabilityLocation { + if m != nil { + return m.AffectedLocation + } + return nil +} + +func (m *VulnerabilityType_PackageIssue) GetFixedLocation() *VulnerabilityType_VulnerabilityLocation { + if m != nil { + return m.FixedLocation + } + return nil +} + +func (m *VulnerabilityType_PackageIssue) GetSeverityName() string { + if m != nil { + return m.SeverityName + } + return "" +} + +// The location of the vulnerability +type VulnerabilityType_VulnerabilityLocation struct { + // The cpe_uri in [cpe format] (https://cpe.mitre.org/specification/) + // format. Examples include distro or storage location for vulnerable jar. + // This field can be used as a filter in list requests. + CpeUri string `protobuf:"bytes,1,opt,name=cpe_uri,json=cpeUri" json:"cpe_uri,omitempty"` + // The package being described. + Package string `protobuf:"bytes,2,opt,name=package" json:"package,omitempty"` + // The version of the package being described. + // This field can be used as a filter in list requests. + Version *VulnerabilityType_Version `protobuf:"bytes,4,opt,name=version" json:"version,omitempty"` +} + +func (m *VulnerabilityType_VulnerabilityLocation) Reset() { + *m = VulnerabilityType_VulnerabilityLocation{} +} +func (m *VulnerabilityType_VulnerabilityLocation) String() string { return proto.CompactTextString(m) } +func (*VulnerabilityType_VulnerabilityLocation) ProtoMessage() {} +func (*VulnerabilityType_VulnerabilityLocation) Descriptor() ([]byte, []int) { + return fileDescriptor3, []int{0, 4} +} + +func (m *VulnerabilityType_VulnerabilityLocation) GetCpeUri() string { + if m != nil { + return m.CpeUri + } + return "" +} + +func (m *VulnerabilityType_VulnerabilityLocation) GetPackage() string { + if m != nil { + return m.Package + } + return "" +} + +func (m *VulnerabilityType_VulnerabilityLocation) GetVersion() *VulnerabilityType_Version { + if m != nil { + return m.Version + } + return nil +} + +func init() { + proto.RegisterType((*VulnerabilityType)(nil), "google.devtools.containeranalysis.v1alpha1.VulnerabilityType") + proto.RegisterType((*VulnerabilityType_Version)(nil), "google.devtools.containeranalysis.v1alpha1.VulnerabilityType.Version") + proto.RegisterType((*VulnerabilityType_Detail)(nil), "google.devtools.containeranalysis.v1alpha1.VulnerabilityType.Detail") + proto.RegisterType((*VulnerabilityType_VulnerabilityDetails)(nil), "google.devtools.containeranalysis.v1alpha1.VulnerabilityType.VulnerabilityDetails") + proto.RegisterType((*VulnerabilityType_PackageIssue)(nil), "google.devtools.containeranalysis.v1alpha1.VulnerabilityType.PackageIssue") + proto.RegisterType((*VulnerabilityType_VulnerabilityLocation)(nil), "google.devtools.containeranalysis.v1alpha1.VulnerabilityType.VulnerabilityLocation") + proto.RegisterEnum("google.devtools.containeranalysis.v1alpha1.VulnerabilityType_Severity", VulnerabilityType_Severity_name, VulnerabilityType_Severity_value) + proto.RegisterEnum("google.devtools.containeranalysis.v1alpha1.VulnerabilityType_Version_VersionKind", VulnerabilityType_Version_VersionKind_name, VulnerabilityType_Version_VersionKind_value) +} + +func init() { + proto.RegisterFile("google/devtools/containeranalysis/v1alpha1/package_vulnerability.proto", fileDescriptor3) +} + +var fileDescriptor3 = []byte{ + // 750 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x56, 0xcf, 0x6e, 0xda, 0x4c, + 0x10, 0xff, 0x6c, 0x0c, 0x86, 0x81, 0x44, 0xce, 0x8a, 0x4f, 0x9f, 0x85, 0xbe, 0x4a, 0x34, 0x55, + 0x25, 0xd4, 0x83, 0x51, 0xc8, 0xb1, 0x27, 0x0a, 0x24, 0x71, 0x0b, 0x24, 0x35, 0x21, 0xfd, 0x27, + 0xc5, 0xda, 0x98, 0x0d, 0x59, 0xc5, 0x78, 0x2d, 0xdb, 0xa1, 0xa1, 0xa7, 0x3e, 0x40, 0x6f, 0xbd, + 0xf7, 0xd0, 0x6b, 0x6f, 0x7d, 0xa0, 0xbe, 0x40, 0x5f, 0xa2, 0xf2, 0xda, 0x8b, 0x20, 0xb4, 0x52, + 0x24, 0x92, 0x9e, 0xf0, 0xcc, 0x78, 0x7f, 0xbf, 0x99, 0x9d, 0xdf, 0x0c, 0x86, 0xbd, 0x31, 0x63, + 0x63, 0x97, 0xd4, 0x47, 0x64, 0x1a, 0x31, 0xe6, 0x86, 0x75, 0x87, 0x79, 0x11, 0xa6, 0x1e, 0x09, + 0xb0, 0x87, 0xdd, 0x59, 0x48, 0xc3, 0xfa, 0x74, 0x07, 0xbb, 0xfe, 0x05, 0xde, 0xa9, 0xfb, 0xd8, + 0xb9, 0xc4, 0x63, 0x62, 0x4f, 0xaf, 0xdc, 0x38, 0x7e, 0x46, 0x5d, 0x1a, 0xcd, 0x0c, 0x3f, 0x60, + 0x11, 0x43, 0x4f, 0x12, 0x1c, 0x43, 0xe0, 0x18, 0x2b, 0x38, 0x86, 0xc0, 0xa9, 0xfc, 0x9f, 0x72, + 0x62, 0x9f, 0xd6, 0xb1, 0xe7, 0xb1, 0x08, 0x47, 0x94, 0x79, 0x61, 0x82, 0xb4, 0xfd, 0x63, 0x13, + 0xb6, 0x4e, 0x16, 0x19, 0x8e, 0x67, 0x3e, 0x41, 0x0f, 0x00, 0x9c, 0x69, 0x18, 0xda, 0xa1, 0xc3, + 0x02, 0xa2, 0xcb, 0x55, 0xa9, 0x26, 0x5b, 0x85, 0xd8, 0x33, 0x88, 0x1d, 0xe8, 0x0c, 0xf2, 0x21, + 0x99, 0x92, 0x80, 0x46, 0x33, 0x3d, 0x53, 0x95, 0x6a, 0x9b, 0x8d, 0x3d, 0xe3, 0xf6, 0x19, 0x19, + 0x2b, 0x7c, 0xc6, 0x20, 0x45, 0xb3, 0xe6, 0xb8, 0xe8, 0x14, 0xd4, 0x11, 0x89, 0x30, 0x75, 0x43, + 0x5d, 0xa9, 0x66, 0x6a, 0xc5, 0x46, 0x7b, 0x3d, 0x8a, 0x36, 0x07, 0xb3, 0x04, 0x68, 0xe5, 0xa7, + 0x04, 0xea, 0x09, 0x09, 0x42, 0xca, 0x3c, 0x54, 0x86, 0x2c, 0xf1, 0x99, 0x73, 0xa1, 0x4b, 0x55, + 0xa9, 0x96, 0xb5, 0x12, 0x03, 0x21, 0x50, 0x3c, 0x3c, 0x49, 0xca, 0x2f, 0x58, 0xfc, 0x19, 0x55, + 0x20, 0x1f, 0x90, 0x29, 0x8d, 0x4f, 0xf1, 0xca, 0x0b, 0xd6, 0xdc, 0x46, 0x04, 0x94, 0x4b, 0xea, + 0x8d, 0xf4, 0x2c, 0xbf, 0x91, 0x97, 0xeb, 0xa5, 0x9b, 0xa6, 0x26, 0x7e, 0x5f, 0x50, 0x6f, 0x64, + 0x71, 0xf8, 0xed, 0x5d, 0x28, 0x2e, 0x38, 0x11, 0x40, 0xae, 0x7f, 0x68, 0xf5, 0x9a, 0x5d, 0xed, + 0x1f, 0x54, 0x04, 0xb5, 0x67, 0xf6, 0xcd, 0xde, 0xb0, 0xa7, 0x49, 0xdc, 0x68, 0xbe, 0xe6, 0x86, + 0x5c, 0xf9, 0xac, 0x40, 0x2e, 0xb9, 0x01, 0xf4, 0x1f, 0xa8, 0x8e, 0x4f, 0xec, 0xab, 0x80, 0xf2, + 0x72, 0x0b, 0x56, 0xce, 0xf1, 0xc9, 0x30, 0xa0, 0x48, 0x07, 0x35, 0xd5, 0x9c, 0x9e, 0xe7, 0x01, + 0x61, 0xa2, 0xf7, 0x50, 0x9e, 0x50, 0xcf, 0xc6, 0xe7, 0xe7, 0xc4, 0x89, 0xc8, 0xc8, 0x9e, 0x26, + 0xfc, 0x7a, 0xae, 0x2a, 0xd5, 0x8a, 0x8d, 0xce, 0x9d, 0x54, 0x6a, 0xa1, 0x09, 0xf5, 0x9a, 0x29, + 0x83, 0x68, 0x4c, 0x4c, 0x8c, 0xaf, 0x57, 0x89, 0xd5, 0xbb, 0x25, 0xc6, 0xd7, 0x37, 0x89, 0x1f, + 0xc1, 0x86, 0x50, 0xa2, 0xcd, 0x45, 0xa0, 0xf0, 0x1b, 0x29, 0x09, 0x67, 0x3f, 0x16, 0x43, 0x15, + 0x8a, 0x23, 0x12, 0x3a, 0x01, 0xf5, 0xe3, 0x89, 0xd2, 0x0b, 0xfc, 0x95, 0x45, 0x17, 0xfa, 0x00, + 0x9b, 0xe7, 0xf4, 0x9a, 0x8c, 0x6c, 0x97, 0x39, 0x7c, 0xec, 0xb8, 0x38, 0x8a, 0x8d, 0xc1, 0x9a, + 0x99, 0x2f, 0x7a, 0xba, 0x29, 0xb4, 0xb5, 0xc1, 0xa9, 0x84, 0x89, 0x1e, 0x42, 0x49, 0xac, 0x90, + 0x68, 0xe6, 0x13, 0x1d, 0x92, 0xf4, 0x52, 0x5f, 0x8c, 0x53, 0xf9, 0x22, 0x43, 0x79, 0x09, 0x2b, + 0x91, 0x48, 0x18, 0x4b, 0x9f, 0x9f, 0x49, 0x24, 0xce, 0x9f, 0x97, 0x86, 0x5e, 0xb9, 0xa7, 0xa1, + 0x5f, 0xde, 0x3b, 0xd9, 0x9b, 0x7b, 0x87, 0xc1, 0x86, 0x28, 0x89, 0x86, 0xe1, 0x15, 0xd1, 0x73, + 0x7c, 0x33, 0x3c, 0x5f, 0x2f, 0x8f, 0xa3, 0x04, 0xd2, 0x8c, 0x11, 0x2d, 0x71, 0x67, 0xdc, 0xaa, + 0x7c, 0x97, 0xa1, 0xb4, 0x18, 0x46, 0x1f, 0x25, 0xd8, 0x9a, 0xab, 0x71, 0xde, 0x54, 0xe9, 0xfe, + 0x9a, 0xaa, 0x09, 0xb6, 0x79, 0x5f, 0x57, 0x35, 0x25, 0xff, 0x35, 0x4d, 0xad, 0x8c, 0x45, 0x66, + 0x75, 0x2c, 0x2a, 0xdf, 0x24, 0xf8, 0xf7, 0xb7, 0x68, 0xb7, 0x5a, 0x3d, 0xf2, 0xf2, 0xea, 0xb1, + 0x41, 0x15, 0x43, 0xaf, 0xdc, 0xe5, 0xd0, 0x0b, 0xd4, 0xed, 0x53, 0xc8, 0x0b, 0x21, 0x22, 0x1d, + 0xca, 0x83, 0xce, 0x49, 0xc7, 0x32, 0x8f, 0xdf, 0xd8, 0xc3, 0xfe, 0xe0, 0xa8, 0xd3, 0x32, 0xf7, + 0xcc, 0x4e, 0x7b, 0x61, 0xb3, 0x36, 0xbb, 0x9a, 0x84, 0x54, 0xc8, 0x74, 0x0f, 0x5f, 0x69, 0x72, + 0xbc, 0x7b, 0x7b, 0x9d, 0xb6, 0x39, 0xec, 0x69, 0x19, 0x94, 0x07, 0xe5, 0xc0, 0xdc, 0x3f, 0xd0, + 0x14, 0x54, 0x82, 0x7c, 0xcb, 0x32, 0x8f, 0xcd, 0x56, 0xb3, 0xab, 0x65, 0x9f, 0x7d, 0x92, 0xe0, + 0xb1, 0xc3, 0x26, 0x22, 0xeb, 0x3f, 0x27, 0x7b, 0x24, 0xbd, 0x7d, 0x97, 0xbe, 0x34, 0x66, 0x2e, + 0xf6, 0xc6, 0x06, 0x0b, 0xc6, 0xf5, 0x31, 0xf1, 0xf8, 0x1f, 0x75, 0x3d, 0x09, 0x61, 0x9f, 0x86, + 0xb7, 0xf9, 0x7a, 0x78, 0xba, 0x12, 0xfa, 0x2a, 0x67, 0xf6, 0x5b, 0xcd, 0xb3, 0x1c, 0x47, 0xdb, + 0xfd, 0x15, 0x00, 0x00, 0xff, 0xff, 0xe7, 0xe7, 0xb7, 0xf5, 0x8a, 0x08, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/containeranalysis/v1alpha1/provenance.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/containeranalysis/v1alpha1/provenance.pb.go new file mode 100644 index 0000000..fa3e9b8 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/devtools/containeranalysis/v1alpha1/provenance.pb.go @@ -0,0 +1,797 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/devtools/containeranalysis/v1alpha1/provenance.proto + +package containeranalysis + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/timestamp" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Specifies the hash algorithm, if any. +type Hash_HashType int32 + +const ( + // No hash requested. + Hash_NONE Hash_HashType = 0 + // A sha256 hash. + Hash_SHA256 Hash_HashType = 1 +) + +var Hash_HashType_name = map[int32]string{ + 0: "NONE", + 1: "SHA256", +} +var Hash_HashType_value = map[string]int32{ + "NONE": 0, + "SHA256": 1, +} + +func (x Hash_HashType) String() string { + return proto.EnumName(Hash_HashType_name, int32(x)) +} +func (Hash_HashType) EnumDescriptor() ([]byte, []int) { return fileDescriptor4, []int{3, 0} } + +// Provenance of a build. Contains all information needed to verify the full +// details about the build from source to completion. +type BuildProvenance struct { + // Unique identifier of the build. + Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` + // ID of the project. + ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Commands requested by the build. + Commands []*Command `protobuf:"bytes,5,rep,name=commands" json:"commands,omitempty"` + // Output of the build. + BuiltArtifacts []*Artifact `protobuf:"bytes,6,rep,name=built_artifacts,json=builtArtifacts" json:"built_artifacts,omitempty"` + // Time at which the build was created. + CreateTime *google_protobuf1.Timestamp `protobuf:"bytes,7,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // Time at which execution of the build was started. + StartTime *google_protobuf1.Timestamp `protobuf:"bytes,8,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // Time at which execution of the build was finished. + FinishTime *google_protobuf1.Timestamp `protobuf:"bytes,9,opt,name=finish_time,json=finishTime" json:"finish_time,omitempty"` + // E-mail address of the user who initiated this build. Note that this was the + // user's e-mail address at the time the build was initiated; this address may + // not represent the same end-user for all time. + Creator string `protobuf:"bytes,11,opt,name=creator" json:"creator,omitempty"` + // Google Cloud Storage bucket where logs were written. + LogsBucket string `protobuf:"bytes,13,opt,name=logs_bucket,json=logsBucket" json:"logs_bucket,omitempty"` + // Details of the Source input to the build. + SourceProvenance *Source `protobuf:"bytes,14,opt,name=source_provenance,json=sourceProvenance" json:"source_provenance,omitempty"` + // Trigger identifier if the build was triggered automatically; empty if not. + TriggerId string `protobuf:"bytes,15,opt,name=trigger_id,json=triggerId" json:"trigger_id,omitempty"` + // Special options applied to this build. This is a catch-all field where + // build providers can enter any desired additional details. + BuildOptions map[string]string `protobuf:"bytes,16,rep,name=build_options,json=buildOptions" json:"build_options,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Version string of the builder at the time this build was executed. + BuilderVersion string `protobuf:"bytes,17,opt,name=builder_version,json=builderVersion" json:"builder_version,omitempty"` +} + +func (m *BuildProvenance) Reset() { *m = BuildProvenance{} } +func (m *BuildProvenance) String() string { return proto.CompactTextString(m) } +func (*BuildProvenance) ProtoMessage() {} +func (*BuildProvenance) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{0} } + +func (m *BuildProvenance) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *BuildProvenance) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *BuildProvenance) GetCommands() []*Command { + if m != nil { + return m.Commands + } + return nil +} + +func (m *BuildProvenance) GetBuiltArtifacts() []*Artifact { + if m != nil { + return m.BuiltArtifacts + } + return nil +} + +func (m *BuildProvenance) GetCreateTime() *google_protobuf1.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *BuildProvenance) GetStartTime() *google_protobuf1.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *BuildProvenance) GetFinishTime() *google_protobuf1.Timestamp { + if m != nil { + return m.FinishTime + } + return nil +} + +func (m *BuildProvenance) GetCreator() string { + if m != nil { + return m.Creator + } + return "" +} + +func (m *BuildProvenance) GetLogsBucket() string { + if m != nil { + return m.LogsBucket + } + return "" +} + +func (m *BuildProvenance) GetSourceProvenance() *Source { + if m != nil { + return m.SourceProvenance + } + return nil +} + +func (m *BuildProvenance) GetTriggerId() string { + if m != nil { + return m.TriggerId + } + return "" +} + +func (m *BuildProvenance) GetBuildOptions() map[string]string { + if m != nil { + return m.BuildOptions + } + return nil +} + +func (m *BuildProvenance) GetBuilderVersion() string { + if m != nil { + return m.BuilderVersion + } + return "" +} + +// Source describes the location of the source used for the build. +type Source struct { + // Source location information. + // + // Types that are valid to be assigned to Source: + // *Source_StorageSource + // *Source_RepoSource + Source isSource_Source `protobuf_oneof:"source"` + // If provided, the input binary artifacts for the build came from this + // location. + ArtifactStorageSource *StorageSource `protobuf:"bytes,4,opt,name=artifact_storage_source,json=artifactStorageSource" json:"artifact_storage_source,omitempty"` + // Hash(es) of the build source, which can be used to verify that the original + // source integrity was maintained in the build. + // + // The keys to this map are file paths used as build source and the values + // contain the hash values for those files. + // + // If the build source came in a single package such as a gzipped tarfile + // (.tar.gz), the FileHash will be for the single path to that file. + FileHashes map[string]*FileHashes `protobuf:"bytes,3,rep,name=file_hashes,json=fileHashes" json:"file_hashes,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // If provided, the source code used for the build came from this location. + Context *SourceContext `protobuf:"bytes,7,opt,name=context" json:"context,omitempty"` + // If provided, some of the source code used for the build may be found in + // these locations, in the case where the source repository had multiple + // remotes or submodules. This list will not include the context specified in + // the context field. + AdditionalContexts []*SourceContext `protobuf:"bytes,8,rep,name=additional_contexts,json=additionalContexts" json:"additional_contexts,omitempty"` +} + +func (m *Source) Reset() { *m = Source{} } +func (m *Source) String() string { return proto.CompactTextString(m) } +func (*Source) ProtoMessage() {} +func (*Source) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{1} } + +type isSource_Source interface { + isSource_Source() +} + +type Source_StorageSource struct { + StorageSource *StorageSource `protobuf:"bytes,1,opt,name=storage_source,json=storageSource,oneof"` +} +type Source_RepoSource struct { + RepoSource *RepoSource `protobuf:"bytes,2,opt,name=repo_source,json=repoSource,oneof"` +} + +func (*Source_StorageSource) isSource_Source() {} +func (*Source_RepoSource) isSource_Source() {} + +func (m *Source) GetSource() isSource_Source { + if m != nil { + return m.Source + } + return nil +} + +func (m *Source) GetStorageSource() *StorageSource { + if x, ok := m.GetSource().(*Source_StorageSource); ok { + return x.StorageSource + } + return nil +} + +func (m *Source) GetRepoSource() *RepoSource { + if x, ok := m.GetSource().(*Source_RepoSource); ok { + return x.RepoSource + } + return nil +} + +func (m *Source) GetArtifactStorageSource() *StorageSource { + if m != nil { + return m.ArtifactStorageSource + } + return nil +} + +func (m *Source) GetFileHashes() map[string]*FileHashes { + if m != nil { + return m.FileHashes + } + return nil +} + +func (m *Source) GetContext() *SourceContext { + if m != nil { + return m.Context + } + return nil +} + +func (m *Source) GetAdditionalContexts() []*SourceContext { + if m != nil { + return m.AdditionalContexts + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Source) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Source_OneofMarshaler, _Source_OneofUnmarshaler, _Source_OneofSizer, []interface{}{ + (*Source_StorageSource)(nil), + (*Source_RepoSource)(nil), + } +} + +func _Source_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Source) + // source + switch x := m.Source.(type) { + case *Source_StorageSource: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.StorageSource); err != nil { + return err + } + case *Source_RepoSource: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RepoSource); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Source.Source has unexpected type %T", x) + } + return nil +} + +func _Source_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Source) + switch tag { + case 1: // source.storage_source + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(StorageSource) + err := b.DecodeMessage(msg) + m.Source = &Source_StorageSource{msg} + return true, err + case 2: // source.repo_source + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(RepoSource) + err := b.DecodeMessage(msg) + m.Source = &Source_RepoSource{msg} + return true, err + default: + return false, nil + } +} + +func _Source_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Source) + // source + switch x := m.Source.(type) { + case *Source_StorageSource: + s := proto.Size(x.StorageSource) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Source_RepoSource: + s := proto.Size(x.RepoSource) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Container message for hashes of byte content of files, used in Source +// messages to verify integrity of source input to the build. +type FileHashes struct { + // Collection of file hashes. + FileHash []*Hash `protobuf:"bytes,1,rep,name=file_hash,json=fileHash" json:"file_hash,omitempty"` +} + +func (m *FileHashes) Reset() { *m = FileHashes{} } +func (m *FileHashes) String() string { return proto.CompactTextString(m) } +func (*FileHashes) ProtoMessage() {} +func (*FileHashes) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{2} } + +func (m *FileHashes) GetFileHash() []*Hash { + if m != nil { + return m.FileHash + } + return nil +} + +// Container message for hash values. +type Hash struct { + // The type of hash that was performed. + Type Hash_HashType `protobuf:"varint,1,opt,name=type,enum=google.devtools.containeranalysis.v1alpha1.Hash_HashType" json:"type,omitempty"` + // The hash value. + Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` +} + +func (m *Hash) Reset() { *m = Hash{} } +func (m *Hash) String() string { return proto.CompactTextString(m) } +func (*Hash) ProtoMessage() {} +func (*Hash) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{3} } + +func (m *Hash) GetType() Hash_HashType { + if m != nil { + return m.Type + } + return Hash_NONE +} + +func (m *Hash) GetValue() []byte { + if m != nil { + return m.Value + } + return nil +} + +// StorageSource describes the location of the source in an archive file in +// Google Cloud Storage. +type StorageSource struct { + // Google Cloud Storage bucket containing source (see [Bucket Name + // Requirements] + // (https://cloud.google.com/storage/docs/bucket-naming#requirements)). + Bucket string `protobuf:"bytes,1,opt,name=bucket" json:"bucket,omitempty"` + // Google Cloud Storage object containing source. + Object string `protobuf:"bytes,2,opt,name=object" json:"object,omitempty"` + // Google Cloud Storage generation for the object. + Generation int64 `protobuf:"varint,3,opt,name=generation" json:"generation,omitempty"` +} + +func (m *StorageSource) Reset() { *m = StorageSource{} } +func (m *StorageSource) String() string { return proto.CompactTextString(m) } +func (*StorageSource) ProtoMessage() {} +func (*StorageSource) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{4} } + +func (m *StorageSource) GetBucket() string { + if m != nil { + return m.Bucket + } + return "" +} + +func (m *StorageSource) GetObject() string { + if m != nil { + return m.Object + } + return "" +} + +func (m *StorageSource) GetGeneration() int64 { + if m != nil { + return m.Generation + } + return 0 +} + +// RepoSource describes the location of the source in a Google Cloud Source +// Repository. +type RepoSource struct { + // ID of the project that owns the repo. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Name of the repo. + RepoName string `protobuf:"bytes,2,opt,name=repo_name,json=repoName" json:"repo_name,omitempty"` + // A revision within the source repository must be specified in + // one of these ways. + // + // Types that are valid to be assigned to Revision: + // *RepoSource_BranchName + // *RepoSource_TagName + // *RepoSource_CommitSha + Revision isRepoSource_Revision `protobuf_oneof:"revision"` +} + +func (m *RepoSource) Reset() { *m = RepoSource{} } +func (m *RepoSource) String() string { return proto.CompactTextString(m) } +func (*RepoSource) ProtoMessage() {} +func (*RepoSource) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{5} } + +type isRepoSource_Revision interface { + isRepoSource_Revision() +} + +type RepoSource_BranchName struct { + BranchName string `protobuf:"bytes,3,opt,name=branch_name,json=branchName,oneof"` +} +type RepoSource_TagName struct { + TagName string `protobuf:"bytes,4,opt,name=tag_name,json=tagName,oneof"` +} +type RepoSource_CommitSha struct { + CommitSha string `protobuf:"bytes,5,opt,name=commit_sha,json=commitSha,oneof"` +} + +func (*RepoSource_BranchName) isRepoSource_Revision() {} +func (*RepoSource_TagName) isRepoSource_Revision() {} +func (*RepoSource_CommitSha) isRepoSource_Revision() {} + +func (m *RepoSource) GetRevision() isRepoSource_Revision { + if m != nil { + return m.Revision + } + return nil +} + +func (m *RepoSource) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *RepoSource) GetRepoName() string { + if m != nil { + return m.RepoName + } + return "" +} + +func (m *RepoSource) GetBranchName() string { + if x, ok := m.GetRevision().(*RepoSource_BranchName); ok { + return x.BranchName + } + return "" +} + +func (m *RepoSource) GetTagName() string { + if x, ok := m.GetRevision().(*RepoSource_TagName); ok { + return x.TagName + } + return "" +} + +func (m *RepoSource) GetCommitSha() string { + if x, ok := m.GetRevision().(*RepoSource_CommitSha); ok { + return x.CommitSha + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*RepoSource) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _RepoSource_OneofMarshaler, _RepoSource_OneofUnmarshaler, _RepoSource_OneofSizer, []interface{}{ + (*RepoSource_BranchName)(nil), + (*RepoSource_TagName)(nil), + (*RepoSource_CommitSha)(nil), + } +} + +func _RepoSource_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*RepoSource) + // revision + switch x := m.Revision.(type) { + case *RepoSource_BranchName: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeStringBytes(x.BranchName) + case *RepoSource_TagName: + b.EncodeVarint(4<<3 | proto.WireBytes) + b.EncodeStringBytes(x.TagName) + case *RepoSource_CommitSha: + b.EncodeVarint(5<<3 | proto.WireBytes) + b.EncodeStringBytes(x.CommitSha) + case nil: + default: + return fmt.Errorf("RepoSource.Revision has unexpected type %T", x) + } + return nil +} + +func _RepoSource_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*RepoSource) + switch tag { + case 3: // revision.branch_name + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Revision = &RepoSource_BranchName{x} + return true, err + case 4: // revision.tag_name + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Revision = &RepoSource_TagName{x} + return true, err + case 5: // revision.commit_sha + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Revision = &RepoSource_CommitSha{x} + return true, err + default: + return false, nil + } +} + +func _RepoSource_OneofSizer(msg proto.Message) (n int) { + m := msg.(*RepoSource) + // revision + switch x := m.Revision.(type) { + case *RepoSource_BranchName: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.BranchName))) + n += len(x.BranchName) + case *RepoSource_TagName: + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.TagName))) + n += len(x.TagName) + case *RepoSource_CommitSha: + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.CommitSha))) + n += len(x.CommitSha) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Command describes a step performed as part of the build pipeline. +type Command struct { + // Name of the command, as presented on the command line, or if the command is + // packaged as a Docker container, as presented to `docker pull`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Environment variables set before running this Command. + Env []string `protobuf:"bytes,2,rep,name=env" json:"env,omitempty"` + // Command-line arguments used when executing this Command. + Args []string `protobuf:"bytes,3,rep,name=args" json:"args,omitempty"` + // Working directory (relative to project source root) used when running + // this Command. + Dir string `protobuf:"bytes,4,opt,name=dir" json:"dir,omitempty"` + // Optional unique identifier for this Command, used in wait_for to reference + // this Command as a dependency. + Id string `protobuf:"bytes,5,opt,name=id" json:"id,omitempty"` + // The ID(s) of the Command(s) that this Command depends on. + WaitFor []string `protobuf:"bytes,6,rep,name=wait_for,json=waitFor" json:"wait_for,omitempty"` +} + +func (m *Command) Reset() { *m = Command{} } +func (m *Command) String() string { return proto.CompactTextString(m) } +func (*Command) ProtoMessage() {} +func (*Command) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{6} } + +func (m *Command) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Command) GetEnv() []string { + if m != nil { + return m.Env + } + return nil +} + +func (m *Command) GetArgs() []string { + if m != nil { + return m.Args + } + return nil +} + +func (m *Command) GetDir() string { + if m != nil { + return m.Dir + } + return "" +} + +func (m *Command) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *Command) GetWaitFor() []string { + if m != nil { + return m.WaitFor + } + return nil +} + +// Artifact describes a build product. +type Artifact struct { + // Name of the artifact. This may be the path to a binary or jar file, or in + // the case of a container build, the name used to push the container image to + // Google Container Registry, as presented to `docker push`. + // + // This field is deprecated in favor of the plural `names` field; it continues + // to exist here to allow existing BuildProvenance serialized to json in + // google.devtools.containeranalysis.v1alpha1.BuildDetails.provenance_bytes to + // deserialize back into proto. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Hash or checksum value of a binary, or Docker Registry 2.0 digest of a + // container. + Checksum string `protobuf:"bytes,2,opt,name=checksum" json:"checksum,omitempty"` + // Artifact ID, if any; for container images, this will be a URL by digest + // like gcr.io/projectID/imagename@sha256:123456 + Id string `protobuf:"bytes,3,opt,name=id" json:"id,omitempty"` + // Related artifact names. This may be the path to a binary or jar file, or in + // the case of a container build, the name used to push the container image to + // Google Container Registry, as presented to `docker push`. Note that a + // single Artifact ID can have multiple names, for example if two tags are + // applied to one image. + Names []string `protobuf:"bytes,4,rep,name=names" json:"names,omitempty"` +} + +func (m *Artifact) Reset() { *m = Artifact{} } +func (m *Artifact) String() string { return proto.CompactTextString(m) } +func (*Artifact) ProtoMessage() {} +func (*Artifact) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{7} } + +func (m *Artifact) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Artifact) GetChecksum() string { + if m != nil { + return m.Checksum + } + return "" +} + +func (m *Artifact) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *Artifact) GetNames() []string { + if m != nil { + return m.Names + } + return nil +} + +func init() { + proto.RegisterType((*BuildProvenance)(nil), "google.devtools.containeranalysis.v1alpha1.BuildProvenance") + proto.RegisterType((*Source)(nil), "google.devtools.containeranalysis.v1alpha1.Source") + proto.RegisterType((*FileHashes)(nil), "google.devtools.containeranalysis.v1alpha1.FileHashes") + proto.RegisterType((*Hash)(nil), "google.devtools.containeranalysis.v1alpha1.Hash") + proto.RegisterType((*StorageSource)(nil), "google.devtools.containeranalysis.v1alpha1.StorageSource") + proto.RegisterType((*RepoSource)(nil), "google.devtools.containeranalysis.v1alpha1.RepoSource") + proto.RegisterType((*Command)(nil), "google.devtools.containeranalysis.v1alpha1.Command") + proto.RegisterType((*Artifact)(nil), "google.devtools.containeranalysis.v1alpha1.Artifact") + proto.RegisterEnum("google.devtools.containeranalysis.v1alpha1.Hash_HashType", Hash_HashType_name, Hash_HashType_value) +} + +func init() { + proto.RegisterFile("google/devtools/containeranalysis/v1alpha1/provenance.proto", fileDescriptor4) +} + +var fileDescriptor4 = []byte{ + // 1026 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0xdd, 0x6e, 0x1b, 0x45, + 0x14, 0xee, 0xfa, 0x77, 0xf7, 0xb8, 0x71, 0x92, 0xa1, 0xc0, 0xe2, 0x52, 0x62, 0x2c, 0x21, 0x22, + 0x2e, 0x6c, 0x9a, 0x42, 0x45, 0xc8, 0x45, 0x15, 0x47, 0x2d, 0xa9, 0x44, 0x92, 0x6a, 0x53, 0x21, + 0x41, 0x85, 0x96, 0xf1, 0xee, 0x78, 0x3d, 0xcd, 0x7a, 0x67, 0x99, 0x19, 0x1b, 0x7c, 0xc7, 0x03, + 0xc0, 0x4b, 0xf0, 0x0e, 0xdc, 0xf2, 0x2e, 0xbc, 0x09, 0x9a, 0x9f, 0xb5, 0x1d, 0xa7, 0x55, 0xbb, + 0xea, 0xcd, 0x6a, 0xce, 0x37, 0xe7, 0x7c, 0x67, 0xe6, 0xcc, 0x77, 0x66, 0x16, 0x8e, 0x12, 0xc6, + 0x92, 0x94, 0x0c, 0x62, 0x32, 0x97, 0x8c, 0xa5, 0x62, 0x10, 0xb1, 0x4c, 0x62, 0x9a, 0x11, 0x8e, + 0x33, 0x9c, 0x2e, 0x04, 0x15, 0x83, 0xf9, 0x7d, 0x9c, 0xe6, 0x13, 0x7c, 0x7f, 0x90, 0x73, 0x36, + 0x27, 0x19, 0xce, 0x22, 0xd2, 0xcf, 0x39, 0x93, 0x0c, 0x7d, 0x61, 0x82, 0xfb, 0x45, 0x70, 0xff, + 0x46, 0x70, 0xbf, 0x08, 0xee, 0x7c, 0x6c, 0x13, 0xe1, 0x9c, 0x0e, 0x70, 0x96, 0x31, 0x89, 0x25, + 0x65, 0x99, 0x30, 0x4c, 0x9d, 0x47, 0x25, 0x96, 0x21, 0xd8, 0x8c, 0x47, 0x24, 0x54, 0x1e, 0xe4, + 0x77, 0x69, 0x09, 0xf6, 0x2c, 0x81, 0xb6, 0x46, 0xb3, 0xf1, 0x40, 0xd2, 0x29, 0x11, 0x12, 0x4f, + 0x73, 0xe3, 0xd0, 0xfb, 0xb7, 0x01, 0xdb, 0xc3, 0x19, 0x4d, 0xe3, 0x67, 0xcb, 0x5d, 0xa0, 0x36, + 0x54, 0x68, 0xec, 0x3b, 0x5d, 0x67, 0xdf, 0x0b, 0x2a, 0x34, 0x46, 0xf7, 0x00, 0x72, 0xce, 0x5e, + 0x92, 0x48, 0x86, 0x34, 0xf6, 0x2b, 0x1a, 0xf7, 0x2c, 0xf2, 0x34, 0x46, 0x17, 0xe0, 0x46, 0x6c, + 0x3a, 0xc5, 0x59, 0x2c, 0xfc, 0x7a, 0xb7, 0xba, 0xdf, 0x3a, 0x78, 0xd0, 0x7f, 0xfb, 0x0a, 0xf4, + 0x4f, 0x4c, 0x6c, 0xb0, 0x24, 0x41, 0x3f, 0xc3, 0xf6, 0x68, 0x46, 0x53, 0x19, 0x62, 0x2e, 0xe9, + 0x18, 0x47, 0x52, 0xf8, 0x0d, 0xcd, 0xfb, 0x55, 0x19, 0xde, 0x63, 0x1b, 0x1c, 0xb4, 0x35, 0x59, + 0x61, 0x0a, 0x74, 0x04, 0xad, 0x88, 0x13, 0x2c, 0x49, 0xa8, 0x8a, 0xe1, 0x37, 0xbb, 0xce, 0x7e, + 0xeb, 0xa0, 0x53, 0x50, 0x17, 0x95, 0xea, 0x3f, 0x2f, 0x2a, 0x15, 0x80, 0x71, 0x57, 0x00, 0x3a, + 0x04, 0x10, 0x12, 0x73, 0x69, 0x62, 0xdd, 0x37, 0xc6, 0x7a, 0xda, 0x5b, 0x87, 0x1e, 0x41, 0x6b, + 0x4c, 0x33, 0x2a, 0x26, 0x26, 0xd6, 0x7b, 0x73, 0x5e, 0xe3, 0xae, 0x83, 0x7d, 0x68, 0xea, 0x55, + 0x30, 0xee, 0xb7, 0xf4, 0x01, 0x14, 0x26, 0xda, 0x83, 0x56, 0xca, 0x12, 0x11, 0x8e, 0x66, 0xd1, + 0x15, 0x91, 0xfe, 0x96, 0x9e, 0x05, 0x05, 0x0d, 0x35, 0x82, 0x42, 0xd8, 0xb5, 0xda, 0x58, 0x29, + 0xd5, 0x6f, 0xeb, 0xec, 0x07, 0x65, 0x0a, 0x7a, 0xa9, 0x49, 0x82, 0x1d, 0x43, 0xb6, 0xa6, 0x97, + 0x7b, 0x00, 0x92, 0xd3, 0x24, 0x21, 0x5c, 0xe9, 0x63, 0xdb, 0xe8, 0xc3, 0x22, 0x4f, 0x63, 0xc4, + 0x61, 0x4b, 0x9d, 0x40, 0x1c, 0xb2, 0x5c, 0x6b, 0xdb, 0xdf, 0xd1, 0x87, 0x79, 0x56, 0x26, 0xf7, + 0x86, 0x44, 0x8d, 0x7d, 0x61, 0xf8, 0x1e, 0x67, 0x92, 0x2f, 0x82, 0xdb, 0xa3, 0x35, 0x08, 0x7d, + 0x6e, 0x24, 0x14, 0x13, 0x1e, 0xce, 0x09, 0x17, 0x94, 0x65, 0xfe, 0xae, 0x5e, 0x57, 0xdb, 0xc2, + 0x3f, 0x18, 0xb4, 0xf3, 0x08, 0x76, 0x6f, 0x70, 0xa1, 0x1d, 0xa8, 0x5e, 0x91, 0x85, 0xed, 0x00, + 0x35, 0x44, 0x77, 0xa0, 0x3e, 0xc7, 0xe9, 0x8c, 0x58, 0xf5, 0x1b, 0xe3, 0xdb, 0xca, 0x37, 0x4e, + 0xef, 0xbf, 0x3a, 0x34, 0x4c, 0x65, 0xd0, 0x08, 0xda, 0x42, 0x32, 0x8e, 0x13, 0x12, 0x9a, 0x1a, + 0x69, 0x86, 0xd6, 0xc1, 0x61, 0xa9, 0x2a, 0x1b, 0x06, 0x43, 0x79, 0x7a, 0x2b, 0xd8, 0x12, 0xeb, + 0x00, 0xfa, 0x11, 0x5a, 0x9c, 0xe4, 0xac, 0x48, 0x50, 0xd1, 0x09, 0x1e, 0x96, 0x49, 0x10, 0x90, + 0x9c, 0x2d, 0xd9, 0x81, 0x2f, 0x2d, 0xf4, 0x2b, 0x7c, 0x58, 0x34, 0x5c, 0xb8, 0xb1, 0x8f, 0xda, + 0x3b, 0xee, 0x23, 0x78, 0xbf, 0x60, 0xbe, 0x06, 0xa3, 0x48, 0xb5, 0x44, 0x4a, 0xc2, 0x09, 0x16, + 0x13, 0x22, 0xfc, 0xaa, 0x16, 0xc6, 0xb0, 0xbc, 0x28, 0xfb, 0x4f, 0x68, 0x4a, 0x4e, 0x35, 0x89, + 0x51, 0x03, 0x8c, 0x97, 0x00, 0xba, 0x84, 0xa6, 0xbd, 0x14, 0x6d, 0xaf, 0x1f, 0x96, 0x4f, 0x70, + 0x62, 0x08, 0x82, 0x82, 0x09, 0xbd, 0x84, 0xf7, 0x70, 0x1c, 0x53, 0x25, 0x1a, 0x9c, 0x16, 0x97, + 0xae, 0xf0, 0x5d, 0xbd, 0x83, 0x77, 0x48, 0x80, 0x56, 0xac, 0x16, 0x12, 0x9d, 0x19, 0x6c, 0x6f, + 0xec, 0xef, 0x15, 0x0a, 0xfd, 0x7e, 0x5d, 0xa1, 0x25, 0x25, 0xb1, 0x62, 0x5f, 0x53, 0xf6, 0xd0, + 0x85, 0x86, 0x39, 0xfe, 0xde, 0x0b, 0x80, 0x95, 0x0b, 0x3a, 0x03, 0x6f, 0x79, 0x68, 0xbe, 0xa3, + 0x37, 0xfc, 0x65, 0x99, 0x6c, 0x8a, 0x26, 0x70, 0x8b, 0x03, 0xea, 0xfd, 0xe5, 0x40, 0x4d, 0x0d, + 0xd0, 0x19, 0xd4, 0xe4, 0x22, 0x37, 0x4d, 0xd3, 0x2e, 0x57, 0x43, 0x15, 0xaf, 0x3f, 0xcf, 0x17, + 0x39, 0x09, 0x34, 0xcd, 0xf5, 0x96, 0xbd, 0x6d, 0x37, 0xd6, 0xeb, 0x82, 0x5b, 0xf8, 0x21, 0x17, + 0x6a, 0xe7, 0x17, 0xe7, 0x8f, 0x77, 0x6e, 0x21, 0x80, 0xc6, 0xe5, 0xe9, 0xf1, 0xc1, 0xd7, 0x0f, + 0x77, 0x9c, 0x5e, 0x08, 0x5b, 0xd7, 0x45, 0xfa, 0x01, 0x34, 0xec, 0xdd, 0x6a, 0xca, 0x6d, 0x2d, + 0x85, 0xb3, 0x91, 0x7a, 0x03, 0xed, 0xa5, 0x60, 0x2d, 0xf4, 0x09, 0x40, 0x42, 0xd4, 0x32, 0xd5, + 0x31, 0xfa, 0xd5, 0xae, 0xb3, 0x5f, 0x0d, 0xd6, 0x90, 0xde, 0x3f, 0x0e, 0xc0, 0xaa, 0x09, 0x37, + 0x5e, 0x57, 0x67, 0xf3, 0x75, 0xbd, 0x0b, 0x9e, 0x6e, 0xf8, 0x0c, 0x4f, 0x8b, 0xdb, 0xc7, 0x55, + 0xc0, 0x39, 0x9e, 0x12, 0xf4, 0x29, 0xb4, 0x46, 0x1c, 0x67, 0xd1, 0xc4, 0x4c, 0xab, 0x5c, 0x9e, + 0xea, 0x6a, 0x03, 0x6a, 0x97, 0xbb, 0xe0, 0x4a, 0x9c, 0x98, 0xf9, 0x9a, 0x9d, 0x6f, 0x4a, 0x9c, + 0xe8, 0xc9, 0x3d, 0x00, 0xf5, 0xea, 0x52, 0x19, 0x8a, 0x09, 0xf6, 0xeb, 0x76, 0xda, 0x33, 0xd8, + 0xe5, 0x04, 0x0f, 0x01, 0x5c, 0x4e, 0xe6, 0x54, 0x5d, 0x95, 0xbd, 0x3f, 0x1c, 0x68, 0xda, 0xc7, + 0x1a, 0x21, 0xa8, 0x69, 0x46, 0xb3, 0x5c, 0x3d, 0x56, 0x9a, 0x24, 0xd9, 0xdc, 0xaf, 0x74, 0xab, + 0x4a, 0x93, 0x24, 0x9b, 0x2b, 0x2f, 0xcc, 0x13, 0xd3, 0xd7, 0x5e, 0xa0, 0xc7, 0xca, 0x2b, 0xa6, + 0xdc, 0x2c, 0x25, 0x50, 0x43, 0xfb, 0xbb, 0x51, 0x5f, 0xfe, 0x6e, 0x7c, 0x04, 0xee, 0x6f, 0x98, + 0xca, 0x70, 0xcc, 0xb8, 0x7e, 0xf7, 0xbd, 0xa0, 0xa9, 0xec, 0x27, 0x8c, 0xf7, 0x7e, 0x01, 0xb7, + 0x78, 0xc7, 0x5f, 0xb9, 0x84, 0x0e, 0xb8, 0xd1, 0x84, 0x44, 0x57, 0x62, 0x36, 0x2d, 0x6a, 0x55, + 0xd8, 0x36, 0x4d, 0x75, 0x99, 0xe6, 0x0e, 0xd4, 0x55, 0x8c, 0xf0, 0x6b, 0x3a, 0x87, 0x31, 0x86, + 0x7f, 0x3a, 0xf0, 0x59, 0xc4, 0xa6, 0x85, 0xf8, 0x5e, 0xaf, 0xb9, 0x67, 0xce, 0x4f, 0x2f, 0xac, + 0x53, 0xc2, 0x52, 0x9c, 0x25, 0x7d, 0xc6, 0x93, 0x41, 0x42, 0x32, 0xfd, 0x90, 0x0f, 0xcc, 0x14, + 0xce, 0xa9, 0x78, 0x9b, 0x9f, 0xb7, 0xa3, 0x1b, 0x53, 0x7f, 0x57, 0xaa, 0xdf, 0x9d, 0x1c, 0x8f, + 0x1a, 0x9a, 0xed, 0xc1, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x91, 0xec, 0x1b, 0x85, 0x90, 0x0a, + 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/containeranalysis/v1alpha1/source_context.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/containeranalysis/v1alpha1/source_context.pb.go new file mode 100644 index 0000000..3ab29ad --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/devtools/containeranalysis/v1alpha1/source_context.pb.go @@ -0,0 +1,751 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/devtools/containeranalysis/v1alpha1/source_context.proto + +package containeranalysis + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// The type of an alias. +type AliasContext_Kind int32 + +const ( + // Unknown. + AliasContext_KIND_UNSPECIFIED AliasContext_Kind = 0 + // Git tag. + AliasContext_FIXED AliasContext_Kind = 1 + // Git branch. + AliasContext_MOVABLE AliasContext_Kind = 2 + // Used to specify non-standard aliases. For example, if a Git repo has a + // ref named "refs/foo/bar". + AliasContext_OTHER AliasContext_Kind = 4 +) + +var AliasContext_Kind_name = map[int32]string{ + 0: "KIND_UNSPECIFIED", + 1: "FIXED", + 2: "MOVABLE", + 4: "OTHER", +} +var AliasContext_Kind_value = map[string]int32{ + "KIND_UNSPECIFIED": 0, + "FIXED": 1, + "MOVABLE": 2, + "OTHER": 4, +} + +func (x AliasContext_Kind) String() string { + return proto.EnumName(AliasContext_Kind_name, int32(x)) +} +func (AliasContext_Kind) EnumDescriptor() ([]byte, []int) { return fileDescriptor5, []int{1, 0} } + +// A SourceContext is a reference to a tree of files. A SourceContext together +// with a path point to a unique revision of a single file or directory. +type SourceContext struct { + // A SourceContext can refer any one of the following types of repositories. + // + // Types that are valid to be assigned to Context: + // *SourceContext_CloudRepo + // *SourceContext_Gerrit + // *SourceContext_Git + Context isSourceContext_Context `protobuf_oneof:"context"` + // Labels with user defined metadata. + Labels map[string]string `protobuf:"bytes,4,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *SourceContext) Reset() { *m = SourceContext{} } +func (m *SourceContext) String() string { return proto.CompactTextString(m) } +func (*SourceContext) ProtoMessage() {} +func (*SourceContext) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{0} } + +type isSourceContext_Context interface { + isSourceContext_Context() +} + +type SourceContext_CloudRepo struct { + CloudRepo *CloudRepoSourceContext `protobuf:"bytes,1,opt,name=cloud_repo,json=cloudRepo,oneof"` +} +type SourceContext_Gerrit struct { + Gerrit *GerritSourceContext `protobuf:"bytes,2,opt,name=gerrit,oneof"` +} +type SourceContext_Git struct { + Git *GitSourceContext `protobuf:"bytes,3,opt,name=git,oneof"` +} + +func (*SourceContext_CloudRepo) isSourceContext_Context() {} +func (*SourceContext_Gerrit) isSourceContext_Context() {} +func (*SourceContext_Git) isSourceContext_Context() {} + +func (m *SourceContext) GetContext() isSourceContext_Context { + if m != nil { + return m.Context + } + return nil +} + +func (m *SourceContext) GetCloudRepo() *CloudRepoSourceContext { + if x, ok := m.GetContext().(*SourceContext_CloudRepo); ok { + return x.CloudRepo + } + return nil +} + +func (m *SourceContext) GetGerrit() *GerritSourceContext { + if x, ok := m.GetContext().(*SourceContext_Gerrit); ok { + return x.Gerrit + } + return nil +} + +func (m *SourceContext) GetGit() *GitSourceContext { + if x, ok := m.GetContext().(*SourceContext_Git); ok { + return x.Git + } + return nil +} + +func (m *SourceContext) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*SourceContext) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _SourceContext_OneofMarshaler, _SourceContext_OneofUnmarshaler, _SourceContext_OneofSizer, []interface{}{ + (*SourceContext_CloudRepo)(nil), + (*SourceContext_Gerrit)(nil), + (*SourceContext_Git)(nil), + } +} + +func _SourceContext_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*SourceContext) + // context + switch x := m.Context.(type) { + case *SourceContext_CloudRepo: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.CloudRepo); err != nil { + return err + } + case *SourceContext_Gerrit: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Gerrit); err != nil { + return err + } + case *SourceContext_Git: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Git); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("SourceContext.Context has unexpected type %T", x) + } + return nil +} + +func _SourceContext_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*SourceContext) + switch tag { + case 1: // context.cloud_repo + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CloudRepoSourceContext) + err := b.DecodeMessage(msg) + m.Context = &SourceContext_CloudRepo{msg} + return true, err + case 2: // context.gerrit + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(GerritSourceContext) + err := b.DecodeMessage(msg) + m.Context = &SourceContext_Gerrit{msg} + return true, err + case 3: // context.git + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(GitSourceContext) + err := b.DecodeMessage(msg) + m.Context = &SourceContext_Git{msg} + return true, err + default: + return false, nil + } +} + +func _SourceContext_OneofSizer(msg proto.Message) (n int) { + m := msg.(*SourceContext) + // context + switch x := m.Context.(type) { + case *SourceContext_CloudRepo: + s := proto.Size(x.CloudRepo) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *SourceContext_Gerrit: + s := proto.Size(x.Gerrit) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *SourceContext_Git: + s := proto.Size(x.Git) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// An alias to a repo revision. +type AliasContext struct { + // The alias kind. + Kind AliasContext_Kind `protobuf:"varint,1,opt,name=kind,enum=google.devtools.containeranalysis.v1alpha1.AliasContext_Kind" json:"kind,omitempty"` + // The alias name. + Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` +} + +func (m *AliasContext) Reset() { *m = AliasContext{} } +func (m *AliasContext) String() string { return proto.CompactTextString(m) } +func (*AliasContext) ProtoMessage() {} +func (*AliasContext) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{1} } + +func (m *AliasContext) GetKind() AliasContext_Kind { + if m != nil { + return m.Kind + } + return AliasContext_KIND_UNSPECIFIED +} + +func (m *AliasContext) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// A CloudRepoSourceContext denotes a particular revision in a Google Cloud +// Source Repo. +type CloudRepoSourceContext struct { + // The ID of the repo. + RepoId *RepoId `protobuf:"bytes,1,opt,name=repo_id,json=repoId" json:"repo_id,omitempty"` + // A revision in a Cloud Repo can be identified by either its revision ID or + // its alias. + // + // Types that are valid to be assigned to Revision: + // *CloudRepoSourceContext_RevisionId + // *CloudRepoSourceContext_AliasContext + Revision isCloudRepoSourceContext_Revision `protobuf_oneof:"revision"` +} + +func (m *CloudRepoSourceContext) Reset() { *m = CloudRepoSourceContext{} } +func (m *CloudRepoSourceContext) String() string { return proto.CompactTextString(m) } +func (*CloudRepoSourceContext) ProtoMessage() {} +func (*CloudRepoSourceContext) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{2} } + +type isCloudRepoSourceContext_Revision interface { + isCloudRepoSourceContext_Revision() +} + +type CloudRepoSourceContext_RevisionId struct { + RevisionId string `protobuf:"bytes,2,opt,name=revision_id,json=revisionId,oneof"` +} +type CloudRepoSourceContext_AliasContext struct { + AliasContext *AliasContext `protobuf:"bytes,3,opt,name=alias_context,json=aliasContext,oneof"` +} + +func (*CloudRepoSourceContext_RevisionId) isCloudRepoSourceContext_Revision() {} +func (*CloudRepoSourceContext_AliasContext) isCloudRepoSourceContext_Revision() {} + +func (m *CloudRepoSourceContext) GetRevision() isCloudRepoSourceContext_Revision { + if m != nil { + return m.Revision + } + return nil +} + +func (m *CloudRepoSourceContext) GetRepoId() *RepoId { + if m != nil { + return m.RepoId + } + return nil +} + +func (m *CloudRepoSourceContext) GetRevisionId() string { + if x, ok := m.GetRevision().(*CloudRepoSourceContext_RevisionId); ok { + return x.RevisionId + } + return "" +} + +func (m *CloudRepoSourceContext) GetAliasContext() *AliasContext { + if x, ok := m.GetRevision().(*CloudRepoSourceContext_AliasContext); ok { + return x.AliasContext + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*CloudRepoSourceContext) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _CloudRepoSourceContext_OneofMarshaler, _CloudRepoSourceContext_OneofUnmarshaler, _CloudRepoSourceContext_OneofSizer, []interface{}{ + (*CloudRepoSourceContext_RevisionId)(nil), + (*CloudRepoSourceContext_AliasContext)(nil), + } +} + +func _CloudRepoSourceContext_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*CloudRepoSourceContext) + // revision + switch x := m.Revision.(type) { + case *CloudRepoSourceContext_RevisionId: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeStringBytes(x.RevisionId) + case *CloudRepoSourceContext_AliasContext: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.AliasContext); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("CloudRepoSourceContext.Revision has unexpected type %T", x) + } + return nil +} + +func _CloudRepoSourceContext_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*CloudRepoSourceContext) + switch tag { + case 2: // revision.revision_id + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Revision = &CloudRepoSourceContext_RevisionId{x} + return true, err + case 3: // revision.alias_context + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(AliasContext) + err := b.DecodeMessage(msg) + m.Revision = &CloudRepoSourceContext_AliasContext{msg} + return true, err + default: + return false, nil + } +} + +func _CloudRepoSourceContext_OneofSizer(msg proto.Message) (n int) { + m := msg.(*CloudRepoSourceContext) + // revision + switch x := m.Revision.(type) { + case *CloudRepoSourceContext_RevisionId: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.RevisionId))) + n += len(x.RevisionId) + case *CloudRepoSourceContext_AliasContext: + s := proto.Size(x.AliasContext) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A SourceContext referring to a Gerrit project. +type GerritSourceContext struct { + // The URI of a running Gerrit instance. + HostUri string `protobuf:"bytes,1,opt,name=host_uri,json=hostUri" json:"host_uri,omitempty"` + // The full project name within the host. Projects may be nested, so + // "project/subproject" is a valid project name. The "repo name" is + // the hostURI/project. + GerritProject string `protobuf:"bytes,2,opt,name=gerrit_project,json=gerritProject" json:"gerrit_project,omitempty"` + // A revision in a Gerrit project can be identified by either its revision ID + // or its alias. + // + // Types that are valid to be assigned to Revision: + // *GerritSourceContext_RevisionId + // *GerritSourceContext_AliasContext + Revision isGerritSourceContext_Revision `protobuf_oneof:"revision"` +} + +func (m *GerritSourceContext) Reset() { *m = GerritSourceContext{} } +func (m *GerritSourceContext) String() string { return proto.CompactTextString(m) } +func (*GerritSourceContext) ProtoMessage() {} +func (*GerritSourceContext) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{3} } + +type isGerritSourceContext_Revision interface { + isGerritSourceContext_Revision() +} + +type GerritSourceContext_RevisionId struct { + RevisionId string `protobuf:"bytes,3,opt,name=revision_id,json=revisionId,oneof"` +} +type GerritSourceContext_AliasContext struct { + AliasContext *AliasContext `protobuf:"bytes,4,opt,name=alias_context,json=aliasContext,oneof"` +} + +func (*GerritSourceContext_RevisionId) isGerritSourceContext_Revision() {} +func (*GerritSourceContext_AliasContext) isGerritSourceContext_Revision() {} + +func (m *GerritSourceContext) GetRevision() isGerritSourceContext_Revision { + if m != nil { + return m.Revision + } + return nil +} + +func (m *GerritSourceContext) GetHostUri() string { + if m != nil { + return m.HostUri + } + return "" +} + +func (m *GerritSourceContext) GetGerritProject() string { + if m != nil { + return m.GerritProject + } + return "" +} + +func (m *GerritSourceContext) GetRevisionId() string { + if x, ok := m.GetRevision().(*GerritSourceContext_RevisionId); ok { + return x.RevisionId + } + return "" +} + +func (m *GerritSourceContext) GetAliasContext() *AliasContext { + if x, ok := m.GetRevision().(*GerritSourceContext_AliasContext); ok { + return x.AliasContext + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*GerritSourceContext) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _GerritSourceContext_OneofMarshaler, _GerritSourceContext_OneofUnmarshaler, _GerritSourceContext_OneofSizer, []interface{}{ + (*GerritSourceContext_RevisionId)(nil), + (*GerritSourceContext_AliasContext)(nil), + } +} + +func _GerritSourceContext_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*GerritSourceContext) + // revision + switch x := m.Revision.(type) { + case *GerritSourceContext_RevisionId: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeStringBytes(x.RevisionId) + case *GerritSourceContext_AliasContext: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.AliasContext); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("GerritSourceContext.Revision has unexpected type %T", x) + } + return nil +} + +func _GerritSourceContext_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*GerritSourceContext) + switch tag { + case 3: // revision.revision_id + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Revision = &GerritSourceContext_RevisionId{x} + return true, err + case 4: // revision.alias_context + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(AliasContext) + err := b.DecodeMessage(msg) + m.Revision = &GerritSourceContext_AliasContext{msg} + return true, err + default: + return false, nil + } +} + +func _GerritSourceContext_OneofSizer(msg proto.Message) (n int) { + m := msg.(*GerritSourceContext) + // revision + switch x := m.Revision.(type) { + case *GerritSourceContext_RevisionId: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.RevisionId))) + n += len(x.RevisionId) + case *GerritSourceContext_AliasContext: + s := proto.Size(x.AliasContext) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A GitSourceContext denotes a particular revision in a third party Git +// repository (e.g., GitHub). +type GitSourceContext struct { + // Git repository URL. + Url string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"` + // Required. + // Git commit hash. + RevisionId string `protobuf:"bytes,2,opt,name=revision_id,json=revisionId" json:"revision_id,omitempty"` +} + +func (m *GitSourceContext) Reset() { *m = GitSourceContext{} } +func (m *GitSourceContext) String() string { return proto.CompactTextString(m) } +func (*GitSourceContext) ProtoMessage() {} +func (*GitSourceContext) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{4} } + +func (m *GitSourceContext) GetUrl() string { + if m != nil { + return m.Url + } + return "" +} + +func (m *GitSourceContext) GetRevisionId() string { + if m != nil { + return m.RevisionId + } + return "" +} + +// A unique identifier for a Cloud Repo. +type RepoId struct { + // A cloud repo can be identified by either its project ID and repository name + // combination, or its globally unique identifier. + // + // Types that are valid to be assigned to Id: + // *RepoId_ProjectRepoId + // *RepoId_Uid + Id isRepoId_Id `protobuf_oneof:"id"` +} + +func (m *RepoId) Reset() { *m = RepoId{} } +func (m *RepoId) String() string { return proto.CompactTextString(m) } +func (*RepoId) ProtoMessage() {} +func (*RepoId) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{5} } + +type isRepoId_Id interface { + isRepoId_Id() +} + +type RepoId_ProjectRepoId struct { + ProjectRepoId *ProjectRepoId `protobuf:"bytes,1,opt,name=project_repo_id,json=projectRepoId,oneof"` +} +type RepoId_Uid struct { + Uid string `protobuf:"bytes,2,opt,name=uid,oneof"` +} + +func (*RepoId_ProjectRepoId) isRepoId_Id() {} +func (*RepoId_Uid) isRepoId_Id() {} + +func (m *RepoId) GetId() isRepoId_Id { + if m != nil { + return m.Id + } + return nil +} + +func (m *RepoId) GetProjectRepoId() *ProjectRepoId { + if x, ok := m.GetId().(*RepoId_ProjectRepoId); ok { + return x.ProjectRepoId + } + return nil +} + +func (m *RepoId) GetUid() string { + if x, ok := m.GetId().(*RepoId_Uid); ok { + return x.Uid + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*RepoId) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _RepoId_OneofMarshaler, _RepoId_OneofUnmarshaler, _RepoId_OneofSizer, []interface{}{ + (*RepoId_ProjectRepoId)(nil), + (*RepoId_Uid)(nil), + } +} + +func _RepoId_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*RepoId) + // id + switch x := m.Id.(type) { + case *RepoId_ProjectRepoId: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ProjectRepoId); err != nil { + return err + } + case *RepoId_Uid: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Uid) + case nil: + default: + return fmt.Errorf("RepoId.Id has unexpected type %T", x) + } + return nil +} + +func _RepoId_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*RepoId) + switch tag { + case 1: // id.project_repo_id + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ProjectRepoId) + err := b.DecodeMessage(msg) + m.Id = &RepoId_ProjectRepoId{msg} + return true, err + case 2: // id.uid + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Id = &RepoId_Uid{x} + return true, err + default: + return false, nil + } +} + +func _RepoId_OneofSizer(msg proto.Message) (n int) { + m := msg.(*RepoId) + // id + switch x := m.Id.(type) { + case *RepoId_ProjectRepoId: + s := proto.Size(x.ProjectRepoId) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *RepoId_Uid: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Uid))) + n += len(x.Uid) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Selects a repo using a Google Cloud Platform project ID (e.g., +// winged-cargo-31) and a repo name within that project. +type ProjectRepoId struct { + // The ID of the project. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The name of the repo. Leave empty for the default repo. + RepoName string `protobuf:"bytes,2,opt,name=repo_name,json=repoName" json:"repo_name,omitempty"` +} + +func (m *ProjectRepoId) Reset() { *m = ProjectRepoId{} } +func (m *ProjectRepoId) String() string { return proto.CompactTextString(m) } +func (*ProjectRepoId) ProtoMessage() {} +func (*ProjectRepoId) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{6} } + +func (m *ProjectRepoId) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *ProjectRepoId) GetRepoName() string { + if m != nil { + return m.RepoName + } + return "" +} + +func init() { + proto.RegisterType((*SourceContext)(nil), "google.devtools.containeranalysis.v1alpha1.SourceContext") + proto.RegisterType((*AliasContext)(nil), "google.devtools.containeranalysis.v1alpha1.AliasContext") + proto.RegisterType((*CloudRepoSourceContext)(nil), "google.devtools.containeranalysis.v1alpha1.CloudRepoSourceContext") + proto.RegisterType((*GerritSourceContext)(nil), "google.devtools.containeranalysis.v1alpha1.GerritSourceContext") + proto.RegisterType((*GitSourceContext)(nil), "google.devtools.containeranalysis.v1alpha1.GitSourceContext") + proto.RegisterType((*RepoId)(nil), "google.devtools.containeranalysis.v1alpha1.RepoId") + proto.RegisterType((*ProjectRepoId)(nil), "google.devtools.containeranalysis.v1alpha1.ProjectRepoId") + proto.RegisterEnum("google.devtools.containeranalysis.v1alpha1.AliasContext_Kind", AliasContext_Kind_name, AliasContext_Kind_value) +} + +func init() { + proto.RegisterFile("google/devtools/containeranalysis/v1alpha1/source_context.proto", fileDescriptor5) +} + +var fileDescriptor5 = []byte{ + // 675 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x95, 0x5d, 0x4e, 0xdb, 0x4a, + 0x14, 0xc7, 0xe3, 0x38, 0x24, 0xf8, 0x84, 0x70, 0xa3, 0xb9, 0xe8, 0x2a, 0x97, 0x7b, 0xab, 0x52, + 0x4b, 0x48, 0xa8, 0x0f, 0xb6, 0x48, 0x5f, 0xa0, 0x1f, 0x42, 0x24, 0x18, 0x62, 0x85, 0x42, 0x6a, + 0x4a, 0xd5, 0x0f, 0x55, 0xd6, 0x60, 0x8f, 0xcc, 0x14, 0xe3, 0xb1, 0xc6, 0x76, 0x54, 0x56, 0xd0, + 0x97, 0xae, 0xa2, 0x8b, 0xe8, 0x12, 0xba, 0x95, 0xae, 0xa0, 0xef, 0xd5, 0x8c, 0x6d, 0xc9, 0x01, + 0x2a, 0x91, 0x4a, 0x7d, 0xca, 0xcc, 0x99, 0x99, 0xdf, 0xf9, 0x9f, 0x33, 0xff, 0x89, 0x61, 0x27, + 0x60, 0x2c, 0x08, 0x89, 0xe9, 0x93, 0x69, 0xca, 0x58, 0x98, 0x98, 0x1e, 0x8b, 0x52, 0x4c, 0x23, + 0xc2, 0x71, 0x84, 0xc3, 0xab, 0x84, 0x26, 0xe6, 0x74, 0x13, 0x87, 0xf1, 0x39, 0xde, 0x34, 0x13, + 0x96, 0x71, 0x8f, 0xb8, 0x62, 0x07, 0xf9, 0x98, 0x1a, 0x31, 0x67, 0x29, 0x43, 0x0f, 0x73, 0x80, + 0x51, 0x02, 0x8c, 0x1b, 0x00, 0xa3, 0x04, 0xac, 0xfe, 0x5f, 0x24, 0xc3, 0x31, 0x35, 0x71, 0x14, + 0xb1, 0x14, 0xa7, 0x94, 0x45, 0x49, 0x4e, 0xd2, 0xbf, 0xa9, 0xd0, 0x39, 0x91, 0x29, 0x86, 0x79, + 0x06, 0xe4, 0x01, 0x78, 0x21, 0xcb, 0x7c, 0x97, 0x93, 0x98, 0xf5, 0x94, 0x35, 0x65, 0xa3, 0xdd, + 0x1f, 0x18, 0x77, 0x4f, 0x68, 0x0c, 0xc5, 0x69, 0x87, 0xc4, 0x6c, 0x86, 0x3b, 0xaa, 0x39, 0x9a, + 0x57, 0xae, 0xa0, 0x37, 0xd0, 0x0c, 0x08, 0xe7, 0x34, 0xed, 0xd5, 0x65, 0x82, 0x9d, 0x79, 0x12, + 0x1c, 0xc8, 0x93, 0xd7, 0xe9, 0x05, 0x10, 0x4d, 0x40, 0x0d, 0x68, 0xda, 0x53, 0x25, 0xf7, 0xe9, + 0x5c, 0xdc, 0x9b, 0x50, 0x81, 0x42, 0xef, 0xa1, 0x19, 0xe2, 0x33, 0x12, 0x26, 0xbd, 0xc6, 0x9a, + 0xba, 0xd1, 0xee, 0x5b, 0xf3, 0x40, 0x67, 0x88, 0xc6, 0xa1, 0xe4, 0x58, 0x51, 0xca, 0xaf, 0x9c, + 0x02, 0xba, 0xba, 0x0d, 0xed, 0x4a, 0x18, 0x75, 0x41, 0xbd, 0x20, 0x57, 0xb2, 0xf1, 0x9a, 0x23, + 0x86, 0x68, 0x05, 0x16, 0xa6, 0x38, 0xcc, 0x88, 0xec, 0x95, 0xe6, 0xe4, 0x93, 0xc7, 0xf5, 0x2d, + 0x65, 0xa0, 0x41, 0xab, 0x30, 0x86, 0xfe, 0x55, 0x81, 0xa5, 0xdd, 0x90, 0xe2, 0xa4, 0xbc, 0xc7, + 0x17, 0xd0, 0xb8, 0xa0, 0x91, 0x2f, 0x41, 0xcb, 0xfd, 0x67, 0xf3, 0x68, 0xae, 0x72, 0x8c, 0x31, + 0x8d, 0x7c, 0x47, 0xa2, 0x10, 0x82, 0x46, 0x84, 0x2f, 0x4b, 0x1d, 0x72, 0xac, 0xef, 0x40, 0x43, + 0xec, 0x40, 0x2b, 0xd0, 0x1d, 0xdb, 0x47, 0x7b, 0xee, 0xe9, 0xd1, 0xc9, 0xc4, 0x1a, 0xda, 0xfb, + 0xb6, 0xb5, 0xd7, 0xad, 0x21, 0x0d, 0x16, 0xf6, 0xed, 0xd7, 0xd6, 0x5e, 0x57, 0x41, 0x6d, 0x68, + 0x3d, 0x3f, 0x7e, 0xb5, 0x3b, 0x38, 0xb4, 0xba, 0x75, 0x11, 0x3f, 0x7e, 0x39, 0xb2, 0x9c, 0x6e, + 0x43, 0xff, 0xa1, 0xc0, 0x3f, 0xb7, 0x5b, 0x06, 0x8d, 0xa1, 0x25, 0x4c, 0xe8, 0x52, 0xbf, 0xf0, + 0x61, 0x7f, 0x9e, 0x2a, 0x04, 0xcf, 0xf6, 0x9d, 0x26, 0x97, 0xbf, 0xe8, 0x01, 0xb4, 0x39, 0x99, + 0xd2, 0x84, 0xb2, 0x48, 0x00, 0x65, 0x0d, 0xa3, 0x9a, 0x03, 0x65, 0xd0, 0xf6, 0x91, 0x0b, 0x1d, + 0x2c, 0x4a, 0x2f, 0x5f, 0x5b, 0x61, 0xa2, 0xad, 0xdf, 0xed, 0xdd, 0xa8, 0xe6, 0x2c, 0xe1, 0xca, + 0x7c, 0x00, 0xb0, 0x58, 0xa6, 0xd3, 0xbf, 0x2b, 0xf0, 0xf7, 0x2d, 0x4e, 0x46, 0xff, 0xc2, 0xe2, + 0x39, 0x4b, 0x52, 0x37, 0xe3, 0xb4, 0x30, 0x41, 0x4b, 0xcc, 0x4f, 0x39, 0x45, 0xeb, 0xb0, 0x9c, + 0x9b, 0xdc, 0x8d, 0x39, 0xfb, 0x40, 0xbc, 0xb4, 0xb8, 0x89, 0x4e, 0x1e, 0x9d, 0xe4, 0xc1, 0xeb, + 0x95, 0xaa, 0x77, 0xa9, 0xb4, 0xf1, 0x07, 0x2b, 0xb5, 0xa0, 0x7b, 0xfd, 0x69, 0x09, 0x97, 0x67, + 0x3c, 0x2c, 0x5d, 0x9e, 0xf1, 0x10, 0xdd, 0xbf, 0xe5, 0x7e, 0xaa, 0x9a, 0xf5, 0x4f, 0x0a, 0x34, + 0xf3, 0x3b, 0x45, 0x1e, 0xfc, 0x55, 0x74, 0xc0, 0x9d, 0x35, 0xc8, 0xf6, 0x3c, 0x05, 0x14, 0xfd, + 0xca, 0x99, 0xa3, 0x9a, 0xd3, 0x89, 0xab, 0x01, 0x84, 0x40, 0xcd, 0x2a, 0x46, 0x11, 0x93, 0x41, + 0x03, 0xea, 0xd4, 0xd7, 0xc7, 0xd0, 0x99, 0x39, 0x8b, 0xee, 0x01, 0x94, 0x7a, 0x0a, 0x29, 0x9a, + 0xa3, 0x15, 0x11, 0xdb, 0x47, 0xff, 0x81, 0x26, 0x65, 0x56, 0x1e, 0xcf, 0xa2, 0x08, 0x1c, 0xe1, + 0x4b, 0x32, 0xf8, 0xac, 0xc0, 0xba, 0xc7, 0x2e, 0x4b, 0xe1, 0xbf, 0xd6, 0x3b, 0x51, 0xde, 0xbe, + 0x2b, 0x36, 0x05, 0x2c, 0xc4, 0x51, 0x60, 0x30, 0x1e, 0x98, 0x01, 0x89, 0xe4, 0x3f, 0xb9, 0x99, + 0x2f, 0xe1, 0x98, 0x26, 0x77, 0xf9, 0xae, 0x3c, 0xb9, 0xb1, 0xf4, 0xa5, 0xae, 0x1e, 0x0c, 0x77, + 0xcf, 0x9a, 0x92, 0xf6, 0xe8, 0x67, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xcf, 0x59, 0x43, 0xa4, + 0x06, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/remoteexecution/v1test/remote_execution.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/remoteexecution/v1test/remote_execution.pb.go new file mode 100644 index 0000000..21fe781 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/devtools/remoteexecution/v1test/remote_execution.pb.go @@ -0,0 +1,2146 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/devtools/remoteexecution/v1test/remote_execution.proto + +/* +Package remoteexecution is a generated protocol buffer package. + +It is generated from these files: + google/devtools/remoteexecution/v1test/remote_execution.proto + +It has these top-level messages: + Action + Command + Platform + Directory + FileNode + DirectoryNode + Digest + ActionResult + OutputFile + Tree + OutputDirectory + ExecuteRequest + LogFile + ExecuteResponse + ExecuteOperationMetadata + GetActionResultRequest + UpdateActionResultRequest + FindMissingBlobsRequest + FindMissingBlobsResponse + UpdateBlobRequest + BatchUpdateBlobsRequest + BatchUpdateBlobsResponse + GetTreeRequest + GetTreeResponse + ToolDetails + RequestMetadata +*/ +package remoteexecution + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import google_protobuf3 "github.com/golang/protobuf/ptypes/duration" +import google_rpc "google.golang.org/genproto/googleapis/rpc/status" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// The current stage of execution. +type ExecuteOperationMetadata_Stage int32 + +const ( + ExecuteOperationMetadata_UNKNOWN ExecuteOperationMetadata_Stage = 0 + // Checking the result against the cache. + ExecuteOperationMetadata_CACHE_CHECK ExecuteOperationMetadata_Stage = 1 + // Currently idle, awaiting a free machine to execute. + ExecuteOperationMetadata_QUEUED ExecuteOperationMetadata_Stage = 2 + // Currently being executed by a worker. + ExecuteOperationMetadata_EXECUTING ExecuteOperationMetadata_Stage = 3 + // Finished execution. + ExecuteOperationMetadata_COMPLETED ExecuteOperationMetadata_Stage = 4 +) + +var ExecuteOperationMetadata_Stage_name = map[int32]string{ + 0: "UNKNOWN", + 1: "CACHE_CHECK", + 2: "QUEUED", + 3: "EXECUTING", + 4: "COMPLETED", +} +var ExecuteOperationMetadata_Stage_value = map[string]int32{ + "UNKNOWN": 0, + "CACHE_CHECK": 1, + "QUEUED": 2, + "EXECUTING": 3, + "COMPLETED": 4, +} + +func (x ExecuteOperationMetadata_Stage) String() string { + return proto.EnumName(ExecuteOperationMetadata_Stage_name, int32(x)) +} +func (ExecuteOperationMetadata_Stage) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{14, 0} +} + +// An `Action` captures all the information about an execution which is required +// to reproduce it. +// +// `Action`s are the core component of the [Execution] service. A single +// `Action` represents a repeatable action that can be performed by the +// execution service. `Action`s can be succinctly identified by the digest of +// their wire format encoding and, once an `Action` has been executed, will be +// cached in the action cache. Future requests can then use the cached result +// rather than needing to run afresh. +// +// When a server completes execution of an +// [Action][google.devtools.remoteexecution.v1test.Action], it MAY choose to +// cache the [result][google.devtools.remoteexecution.v1test.ActionResult] in +// the [ActionCache][google.devtools.remoteexecution.v1test.ActionCache] unless +// `do_not_cache` is `true`. Clients SHOULD expect the server to do so. By +// default, future calls to [Execute][] the same `Action` will also serve their +// results from the cache. Clients must take care to understand the caching +// behaviour. Ideally, all `Action`s will be reproducible so that serving a +// result from cache is always desirable and correct. +type Action struct { + // The digest of the [Command][google.devtools.remoteexecution.v1test.Command] + // to run, which MUST be present in the + // [ContentAddressableStorage][google.devtools.remoteexecution.v1test.ContentAddressableStorage]. + CommandDigest *Digest `protobuf:"bytes,1,opt,name=command_digest,json=commandDigest" json:"command_digest,omitempty"` + // The digest of the root + // [Directory][google.devtools.remoteexecution.v1test.Directory] for the input + // files. The files in the directory tree are available in the correct + // location on the build machine before the command is executed. The root + // directory, as well as every subdirectory and content blob referred to, MUST + // be in the + // [ContentAddressableStorage][google.devtools.remoteexecution.v1test.ContentAddressableStorage]. + InputRootDigest *Digest `protobuf:"bytes,2,opt,name=input_root_digest,json=inputRootDigest" json:"input_root_digest,omitempty"` + // A list of the output files that the client expects to retrieve from the + // action. Only the listed files, as well as directories listed in + // `output_directories`, will be returned to the client as output. + // Other files that may be created during command execution are discarded. + // + // The paths are specified using forward slashes (`/`) as path separators, + // even if the execution platform natively uses a different separator. The + // path MUST NOT include a trailing slash. + // + // In order to ensure consistent hashing of the same Action, the output paths + // MUST be sorted lexicographically by code point (or, equivalently, by UTF-8 + // bytes). + OutputFiles []string `protobuf:"bytes,3,rep,name=output_files,json=outputFiles" json:"output_files,omitempty"` + // A list of the output directories that the client expects to retrieve from + // the action. Only the contents of the indicated directories (recursively + // including the contents of their subdirectories) will be + // returned, as well as files listed in `output_files`. Other files that may + // be created during command execution are discarded. + // + // The paths are specified using forward slashes (`/`) as path separators, + // even if the execution platform natively uses a different separator. The + // path MUST NOT include a trailing slash, unless the path is `"/"` (which, + // although not recommended, can be used to capture the entire working + // directory tree, including inputs). + // + // In order to ensure consistent hashing of the same Action, the output paths + // MUST be sorted lexicographically by code point (or, equivalently, by UTF-8 + // bytes). + OutputDirectories []string `protobuf:"bytes,4,rep,name=output_directories,json=outputDirectories" json:"output_directories,omitempty"` + // The platform requirements for the execution environment. The server MAY + // choose to execute the action on any worker satisfying the requirements, so + // the client SHOULD ensure that running the action on any such worker will + // have the same result. + Platform *Platform `protobuf:"bytes,5,opt,name=platform" json:"platform,omitempty"` + // A timeout after which the execution should be killed. If the timeout is + // absent, then the client is specifying that the execution should continue + // as long as the server will let it. The server SHOULD impose a timeout if + // the client does not specify one, however, if the client does specify a + // timeout that is longer than the server's maximum timeout, the server MUST + // reject the request. + // + // The timeout is a part of the + // [Action][google.devtools.remoteexecution.v1test.Action] message, and + // therefore two `Actions` with different timeouts are different, even if they + // are otherwise identical. This is because, if they were not, running an + // `Action` with a lower timeout than is required might result in a cache hit + // from an execution run with a longer timeout, hiding the fact that the + // timeout is too short. By encoding it directly in the `Action`, a lower + // timeout will result in a cache miss and the execution timeout will fail + // immediately, rather than whenever the cache entry gets evicted. + Timeout *google_protobuf3.Duration `protobuf:"bytes,6,opt,name=timeout" json:"timeout,omitempty"` + // If true, then the `Action`'s result cannot be cached. + DoNotCache bool `protobuf:"varint,7,opt,name=do_not_cache,json=doNotCache" json:"do_not_cache,omitempty"` +} + +func (m *Action) Reset() { *m = Action{} } +func (m *Action) String() string { return proto.CompactTextString(m) } +func (*Action) ProtoMessage() {} +func (*Action) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *Action) GetCommandDigest() *Digest { + if m != nil { + return m.CommandDigest + } + return nil +} + +func (m *Action) GetInputRootDigest() *Digest { + if m != nil { + return m.InputRootDigest + } + return nil +} + +func (m *Action) GetOutputFiles() []string { + if m != nil { + return m.OutputFiles + } + return nil +} + +func (m *Action) GetOutputDirectories() []string { + if m != nil { + return m.OutputDirectories + } + return nil +} + +func (m *Action) GetPlatform() *Platform { + if m != nil { + return m.Platform + } + return nil +} + +func (m *Action) GetTimeout() *google_protobuf3.Duration { + if m != nil { + return m.Timeout + } + return nil +} + +func (m *Action) GetDoNotCache() bool { + if m != nil { + return m.DoNotCache + } + return false +} + +// A `Command` is the actual command executed by a worker running an +// [Action][google.devtools.remoteexecution.v1test.Action]. +// +// Except as otherwise required, the environment (such as which system +// libraries or binaries are available, and what filesystems are mounted where) +// is defined by and specific to the implementation of the remote execution API. +type Command struct { + // The arguments to the command. The first argument must be the path to the + // executable, which must be either a relative path, in which case it is + // evaluated with respect to the input root, or an absolute path. The `PATH` + // environment variable, or similar functionality on other systems, is not + // used to determine which executable to run. + // + // The working directory will always be the input root. + Arguments []string `protobuf:"bytes,1,rep,name=arguments" json:"arguments,omitempty"` + // The environment variables to set when running the program. The worker may + // provide its own default environment variables; these defaults can be + // overridden using this field. Additional variables can also be specified. + // + // In order to ensure that equivalent `Command`s always hash to the same + // value, the environment variables MUST be lexicographically sorted by name. + // Sorting of strings is done by code point, equivalently, by the UTF-8 bytes. + EnvironmentVariables []*Command_EnvironmentVariable `protobuf:"bytes,2,rep,name=environment_variables,json=environmentVariables" json:"environment_variables,omitempty"` +} + +func (m *Command) Reset() { *m = Command{} } +func (m *Command) String() string { return proto.CompactTextString(m) } +func (*Command) ProtoMessage() {} +func (*Command) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *Command) GetArguments() []string { + if m != nil { + return m.Arguments + } + return nil +} + +func (m *Command) GetEnvironmentVariables() []*Command_EnvironmentVariable { + if m != nil { + return m.EnvironmentVariables + } + return nil +} + +// An `EnvironmentVariable` is one variable to set in the running program's +// environment. +type Command_EnvironmentVariable struct { + // The variable name. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The variable value. + Value string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` +} + +func (m *Command_EnvironmentVariable) Reset() { *m = Command_EnvironmentVariable{} } +func (m *Command_EnvironmentVariable) String() string { return proto.CompactTextString(m) } +func (*Command_EnvironmentVariable) ProtoMessage() {} +func (*Command_EnvironmentVariable) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1, 0} } + +func (m *Command_EnvironmentVariable) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Command_EnvironmentVariable) GetValue() string { + if m != nil { + return m.Value + } + return "" +} + +// A `Platform` is a set of requirements, such as hardware, operating system, or +// compiler toolchain, for an +// [Action][google.devtools.remoteexecution.v1test.Action]'s execution +// environment. A `Platform` is represented as a series of key-value pairs +// representing the properties that are required of the platform. +// +// This message is currently being redeveloped since it is an overly simplistic +// model of platforms. +type Platform struct { + // The properties that make up this platform. In order to ensure that + // equivalent `Platform`s always hash to the same value, the properties MUST + // be lexicographically sorted by name, and then by value. Sorting of strings + // is done by code point, equivalently, by the UTF-8 bytes. + Properties []*Platform_Property `protobuf:"bytes,1,rep,name=properties" json:"properties,omitempty"` +} + +func (m *Platform) Reset() { *m = Platform{} } +func (m *Platform) String() string { return proto.CompactTextString(m) } +func (*Platform) ProtoMessage() {} +func (*Platform) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *Platform) GetProperties() []*Platform_Property { + if m != nil { + return m.Properties + } + return nil +} + +// A single property for the environment. The server is responsible for +// specifying the property `name`s that it accepts. If an unknown `name` is +// provided in the requirements for an +// [Action][google.devtools.remoteexecution.v1test.Action], the server SHOULD +// reject the execution request. If permitted by the server, the same `name` +// may occur multiple times. +// +// The server is also responsible for specifying the interpretation of +// property `value`s. For instance, a property describing how much RAM must be +// available may be interpreted as allowing a worker with 16GB to fulfill a +// request for 8GB, while a property describing the OS environment on which +// the action must be performed may require an exact match with the worker's +// OS. +// +// The server MAY use the `value` of one or more properties to determine how +// it sets up the execution environment, such as by making specific system +// files available to the worker. +type Platform_Property struct { + // The property name. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The property value. + Value string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` +} + +func (m *Platform_Property) Reset() { *m = Platform_Property{} } +func (m *Platform_Property) String() string { return proto.CompactTextString(m) } +func (*Platform_Property) ProtoMessage() {} +func (*Platform_Property) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} } + +func (m *Platform_Property) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Platform_Property) GetValue() string { + if m != nil { + return m.Value + } + return "" +} + +// A `Directory` represents a directory node in a file tree, containing zero or +// more children [FileNodes][google.devtools.remoteexecution.v1test.FileNode] +// and [DirectoryNodes][google.devtools.remoteexecution.v1test.DirectoryNode]. +// Each `Node` contains its name in the directory, the digest of its content +// (either a file blob or a `Directory` proto), as well as possibly some +// metadata about the file or directory. +// +// In order to ensure that two equivalent directory trees hash to the same +// value, the following restrictions MUST be obeyed when constructing a +// a `Directory`: +// - Every child in the directory must have a path of exactly one segment. +// Multiple levels of directory hierarchy may not be collapsed. +// - Each child in the directory must have a unique path segment (file name). +// - The files and directories in the directory must each be sorted in +// lexicographical order by path. The path strings must be sorted by code +// point, equivalently, by UTF-8 bytes. +// +// A `Directory` that obeys the restrictions is said to be in canonical form. +// +// As an example, the following could be used for a file named `bar` and a +// directory named `foo` with an executable file named `baz` (hashes shortened +// for readability): +// +// ```json +// // (Directory proto) +// { +// files: [ +// { +// name: "bar", +// digest: { +// hash: "4a73bc9d03...", +// size: 65534 +// } +// } +// ], +// directories: [ +// { +// name: "foo", +// digest: { +// hash: "4cf2eda940...", +// size: 43 +// } +// } +// ] +// } +// +// // (Directory proto with hash "4cf2eda940..." and size 43) +// { +// files: [ +// { +// name: "baz", +// digest: { +// hash: "b2c941073e...", +// size: 1294, +// }, +// is_executable: true +// } +// ] +// } +// ``` +type Directory struct { + // The files in the directory. + Files []*FileNode `protobuf:"bytes,1,rep,name=files" json:"files,omitempty"` + // The subdirectories in the directory. + Directories []*DirectoryNode `protobuf:"bytes,2,rep,name=directories" json:"directories,omitempty"` +} + +func (m *Directory) Reset() { *m = Directory{} } +func (m *Directory) String() string { return proto.CompactTextString(m) } +func (*Directory) ProtoMessage() {} +func (*Directory) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *Directory) GetFiles() []*FileNode { + if m != nil { + return m.Files + } + return nil +} + +func (m *Directory) GetDirectories() []*DirectoryNode { + if m != nil { + return m.Directories + } + return nil +} + +// A `FileNode` represents a single file and associated metadata. +type FileNode struct { + // The name of the file. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The digest of the file's content. + Digest *Digest `protobuf:"bytes,2,opt,name=digest" json:"digest,omitempty"` + // True if file is executable, false otherwise. + IsExecutable bool `protobuf:"varint,4,opt,name=is_executable,json=isExecutable" json:"is_executable,omitempty"` +} + +func (m *FileNode) Reset() { *m = FileNode{} } +func (m *FileNode) String() string { return proto.CompactTextString(m) } +func (*FileNode) ProtoMessage() {} +func (*FileNode) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *FileNode) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *FileNode) GetDigest() *Digest { + if m != nil { + return m.Digest + } + return nil +} + +func (m *FileNode) GetIsExecutable() bool { + if m != nil { + return m.IsExecutable + } + return false +} + +// A `DirectoryNode` represents a child of a +// [Directory][google.devtools.remoteexecution.v1test.Directory] which is itself +// a `Directory` and its associated metadata. +type DirectoryNode struct { + // The name of the directory. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The digest of the + // [Directory][google.devtools.remoteexecution.v1test.Directory] object + // represented. See [Digest][google.devtools.remoteexecution.v1test.Digest] + // for information about how to take the digest of a proto message. + Digest *Digest `protobuf:"bytes,2,opt,name=digest" json:"digest,omitempty"` +} + +func (m *DirectoryNode) Reset() { *m = DirectoryNode{} } +func (m *DirectoryNode) String() string { return proto.CompactTextString(m) } +func (*DirectoryNode) ProtoMessage() {} +func (*DirectoryNode) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *DirectoryNode) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *DirectoryNode) GetDigest() *Digest { + if m != nil { + return m.Digest + } + return nil +} + +// A content digest. A digest for a given blob consists of the size of the blob +// and its hash. The hash algorithm to use is defined by the server, but servers +// SHOULD use SHA-256. +// +// The size is considered to be an integral part of the digest and cannot be +// separated. That is, even if the `hash` field is correctly specified but +// `size_bytes` is not, the server MUST reject the request. +// +// The reason for including the size in the digest is as follows: in a great +// many cases, the server needs to know the size of the blob it is about to work +// with prior to starting an operation with it, such as flattening Merkle tree +// structures or streaming it to a worker. Technically, the server could +// implement a separate metadata store, but this results in a significantly more +// complicated implementation as opposed to having the client specify the size +// up-front (or storing the size along with the digest in every message where +// digests are embedded). This does mean that the API leaks some implementation +// details of (what we consider to be) a reasonable server implementation, but +// we consider this to be a worthwhile tradeoff. +// +// When a `Digest` is used to refer to a proto message, it always refers to the +// message in binary encoded form. To ensure consistent hashing, clients and +// servers MUST ensure that they serialize messages according to the following +// rules, even if there are alternate valid encodings for the same message. +// - Fields are serialized in tag order. +// - There are no unknown fields. +// - There are no duplicate fields. +// - Fields are serialized according to the default semantics for their type. +// +// Most protocol buffer implementations will always follow these rules when +// serializing, but care should be taken to avoid shortcuts. For instance, +// concatenating two messages to merge them may produce duplicate fields. +type Digest struct { + // The hash. In the case of SHA-256, it will always be a lowercase hex string + // exactly 64 characters long. + Hash string `protobuf:"bytes,1,opt,name=hash" json:"hash,omitempty"` + // The size of the blob, in bytes. + SizeBytes int64 `protobuf:"varint,2,opt,name=size_bytes,json=sizeBytes" json:"size_bytes,omitempty"` +} + +func (m *Digest) Reset() { *m = Digest{} } +func (m *Digest) String() string { return proto.CompactTextString(m) } +func (*Digest) ProtoMessage() {} +func (*Digest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *Digest) GetHash() string { + if m != nil { + return m.Hash + } + return "" +} + +func (m *Digest) GetSizeBytes() int64 { + if m != nil { + return m.SizeBytes + } + return 0 +} + +// An ActionResult represents the result of an +// [Action][google.devtools.remoteexecution.v1test.Action] being run. +type ActionResult struct { + // The output files of the action. For each output file requested, if the + // corresponding file existed after the action completed, a single entry will + // be present in the output list. + // + // If the action does not produce the requested output, or produces a + // directory where a regular file is expected or vice versa, then that output + // will be omitted from the list. The server is free to arrange the output + // list as desired; clients MUST NOT assume that the output list is sorted. + OutputFiles []*OutputFile `protobuf:"bytes,2,rep,name=output_files,json=outputFiles" json:"output_files,omitempty"` + // The output directories of the action. For each output directory requested, + // if the corresponding directory existed after the action completed, a single + // entry will be present in the output list, which will contain the digest of + // a [Tree][google.devtools.remoteexecution.v1.test.Tree] message containing + // the directory tree. + OutputDirectories []*OutputDirectory `protobuf:"bytes,3,rep,name=output_directories,json=outputDirectories" json:"output_directories,omitempty"` + // The exit code of the command. + ExitCode int32 `protobuf:"varint,4,opt,name=exit_code,json=exitCode" json:"exit_code,omitempty"` + // The standard output buffer of the action. The server will determine, based + // on the size of the buffer, whether to return it in raw form or to return + // a digest in `stdout_digest` that points to the buffer. If neither is set, + // then the buffer is empty. The client SHOULD NOT assume it will get one of + // the raw buffer or a digest on any given request and should be prepared to + // handle either. + StdoutRaw []byte `protobuf:"bytes,5,opt,name=stdout_raw,json=stdoutRaw,proto3" json:"stdout_raw,omitempty"` + // The digest for a blob containing the standard output of the action, which + // can be retrieved from the + // [ContentAddressableStorage][google.devtools.remoteexecution.v1test.ContentAddressableStorage]. + // See `stdout_raw` for when this will be set. + StdoutDigest *Digest `protobuf:"bytes,6,opt,name=stdout_digest,json=stdoutDigest" json:"stdout_digest,omitempty"` + // The standard error buffer of the action. The server will determine, based + // on the size of the buffer, whether to return it in raw form or to return + // a digest in `stderr_digest` that points to the buffer. If neither is set, + // then the buffer is empty. The client SHOULD NOT assume it will get one of + // the raw buffer or a digest on any given request and should be prepared to + // handle either. + StderrRaw []byte `protobuf:"bytes,7,opt,name=stderr_raw,json=stderrRaw,proto3" json:"stderr_raw,omitempty"` + // The digest for a blob containing the standard error of the action, which + // can be retrieved from the + // [ContentAddressableStorage][google.devtools.remoteexecution.v1test.ContentAddressableStorage]. + // See `stderr_raw` for when this will be set. + StderrDigest *Digest `protobuf:"bytes,8,opt,name=stderr_digest,json=stderrDigest" json:"stderr_digest,omitempty"` +} + +func (m *ActionResult) Reset() { *m = ActionResult{} } +func (m *ActionResult) String() string { return proto.CompactTextString(m) } +func (*ActionResult) ProtoMessage() {} +func (*ActionResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *ActionResult) GetOutputFiles() []*OutputFile { + if m != nil { + return m.OutputFiles + } + return nil +} + +func (m *ActionResult) GetOutputDirectories() []*OutputDirectory { + if m != nil { + return m.OutputDirectories + } + return nil +} + +func (m *ActionResult) GetExitCode() int32 { + if m != nil { + return m.ExitCode + } + return 0 +} + +func (m *ActionResult) GetStdoutRaw() []byte { + if m != nil { + return m.StdoutRaw + } + return nil +} + +func (m *ActionResult) GetStdoutDigest() *Digest { + if m != nil { + return m.StdoutDigest + } + return nil +} + +func (m *ActionResult) GetStderrRaw() []byte { + if m != nil { + return m.StderrRaw + } + return nil +} + +func (m *ActionResult) GetStderrDigest() *Digest { + if m != nil { + return m.StderrDigest + } + return nil +} + +// An `OutputFile` is similar to a +// [FileNode][google.devtools.remoteexecution.v1test.FileNode], but it is +// tailored for output as part of an `ActionResult`. It allows a full file path +// rather than only a name, and allows the server to include content inline. +// +// `OutputFile` is binary-compatible with `FileNode`. +type OutputFile struct { + // The full path of the file relative to the input root, including the + // filename. The path separator is a forward slash `/`. + Path string `protobuf:"bytes,1,opt,name=path" json:"path,omitempty"` + // The digest of the file's content. + Digest *Digest `protobuf:"bytes,2,opt,name=digest" json:"digest,omitempty"` + // The raw content of the file. + // + // This field may be used by the server to provide the content of a file + // inline in an + // [ActionResult][google.devtools.remoteexecution.v1test.ActionResult] and + // avoid requiring that the client make a separate call to + // [ContentAddressableStorage.GetBlob] to retrieve it. + // + // The client SHOULD NOT assume that it will get raw content with any request, + // and always be prepared to retrieve it via `digest`. + Content []byte `protobuf:"bytes,3,opt,name=content,proto3" json:"content,omitempty"` + // True if file is executable, false otherwise. + IsExecutable bool `protobuf:"varint,4,opt,name=is_executable,json=isExecutable" json:"is_executable,omitempty"` +} + +func (m *OutputFile) Reset() { *m = OutputFile{} } +func (m *OutputFile) String() string { return proto.CompactTextString(m) } +func (*OutputFile) ProtoMessage() {} +func (*OutputFile) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *OutputFile) GetPath() string { + if m != nil { + return m.Path + } + return "" +} + +func (m *OutputFile) GetDigest() *Digest { + if m != nil { + return m.Digest + } + return nil +} + +func (m *OutputFile) GetContent() []byte { + if m != nil { + return m.Content + } + return nil +} + +func (m *OutputFile) GetIsExecutable() bool { + if m != nil { + return m.IsExecutable + } + return false +} + +// A `Tree` contains all the +// [Directory][google.devtools.remoteexecution.v1test.Directory] protos in a +// single directory Merkle tree, compressed into one message. +type Tree struct { + // The root directory in the tree. + Root *Directory `protobuf:"bytes,1,opt,name=root" json:"root,omitempty"` + // All the child directories: the directories referred to by the root and, + // recursively, all its children. In order to reconstruct the directory tree, + // the client must take the digests of each of the child directories and then + // build up a tree starting from the `root`. + Children []*Directory `protobuf:"bytes,2,rep,name=children" json:"children,omitempty"` +} + +func (m *Tree) Reset() { *m = Tree{} } +func (m *Tree) String() string { return proto.CompactTextString(m) } +func (*Tree) ProtoMessage() {} +func (*Tree) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *Tree) GetRoot() *Directory { + if m != nil { + return m.Root + } + return nil +} + +func (m *Tree) GetChildren() []*Directory { + if m != nil { + return m.Children + } + return nil +} + +// An `OutputDirectory` is the output in an `ActionResult` corresponding to a +// directory's full contents rather than a single file. +type OutputDirectory struct { + // The full path of the directory relative to the input root, including the + // filename. The path separator is a forward slash `/`. + Path string `protobuf:"bytes,1,opt,name=path" json:"path,omitempty"` + // DEPRECATED: This field is deprecated and should no longer be used. + Digest *Digest `protobuf:"bytes,2,opt,name=digest" json:"digest,omitempty"` + // The digest of the encoded + // [Tree][google.devtools.remoteexecution.v1test.Tree] proto containing the + // directory's contents. + TreeDigest *Digest `protobuf:"bytes,3,opt,name=tree_digest,json=treeDigest" json:"tree_digest,omitempty"` +} + +func (m *OutputDirectory) Reset() { *m = OutputDirectory{} } +func (m *OutputDirectory) String() string { return proto.CompactTextString(m) } +func (*OutputDirectory) ProtoMessage() {} +func (*OutputDirectory) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *OutputDirectory) GetPath() string { + if m != nil { + return m.Path + } + return "" +} + +func (m *OutputDirectory) GetDigest() *Digest { + if m != nil { + return m.Digest + } + return nil +} + +func (m *OutputDirectory) GetTreeDigest() *Digest { + if m != nil { + return m.TreeDigest + } + return nil +} + +// A request message for +// [Execution.Execute][google.devtools.remoteexecution.v1test.Execution.Execute]. +type ExecuteRequest struct { + // The instance of the execution system to operate against. A server may + // support multiple instances of the execution system (with their own workers, + // storage, caches, etc.). The server MAY require use of this field to select + // between them in an implementation-defined fashion, otherwise it can be + // omitted. + InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName" json:"instance_name,omitempty"` + // The action to be performed. + Action *Action `protobuf:"bytes,2,opt,name=action" json:"action,omitempty"` + // If true, the action will be executed anew even if its result was already + // present in the cache. If false, the result may be served from the + // [ActionCache][google.devtools.remoteexecution.v1test.ActionCache]. + SkipCacheLookup bool `protobuf:"varint,3,opt,name=skip_cache_lookup,json=skipCacheLookup" json:"skip_cache_lookup,omitempty"` + // DEPRECATED: This field should be ignored by clients and servers and will be + // removed. + TotalInputFileCount int32 `protobuf:"varint,4,opt,name=total_input_file_count,json=totalInputFileCount" json:"total_input_file_count,omitempty"` + // DEPRECATED: This field should be ignored by clients and servers and will be + // removed. + TotalInputFileBytes int64 `protobuf:"varint,5,opt,name=total_input_file_bytes,json=totalInputFileBytes" json:"total_input_file_bytes,omitempty"` +} + +func (m *ExecuteRequest) Reset() { *m = ExecuteRequest{} } +func (m *ExecuteRequest) String() string { return proto.CompactTextString(m) } +func (*ExecuteRequest) ProtoMessage() {} +func (*ExecuteRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *ExecuteRequest) GetInstanceName() string { + if m != nil { + return m.InstanceName + } + return "" +} + +func (m *ExecuteRequest) GetAction() *Action { + if m != nil { + return m.Action + } + return nil +} + +func (m *ExecuteRequest) GetSkipCacheLookup() bool { + if m != nil { + return m.SkipCacheLookup + } + return false +} + +func (m *ExecuteRequest) GetTotalInputFileCount() int32 { + if m != nil { + return m.TotalInputFileCount + } + return 0 +} + +func (m *ExecuteRequest) GetTotalInputFileBytes() int64 { + if m != nil { + return m.TotalInputFileBytes + } + return 0 +} + +// A `LogFile` is a log stored in the CAS. +type LogFile struct { + // The digest of the log contents. + Digest *Digest `protobuf:"bytes,1,opt,name=digest" json:"digest,omitempty"` + // This is a hint as to the purpose of the log, and is set to true if the log + // is human-readable text that can be usefully displayed to a user, and false + // otherwise. For instance, if a command-line client wishes to print the + // server logs to the terminal for a failed action, this allows it to avoid + // displaying a binary file. + HumanReadable bool `protobuf:"varint,2,opt,name=human_readable,json=humanReadable" json:"human_readable,omitempty"` +} + +func (m *LogFile) Reset() { *m = LogFile{} } +func (m *LogFile) String() string { return proto.CompactTextString(m) } +func (*LogFile) ProtoMessage() {} +func (*LogFile) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *LogFile) GetDigest() *Digest { + if m != nil { + return m.Digest + } + return nil +} + +func (m *LogFile) GetHumanReadable() bool { + if m != nil { + return m.HumanReadable + } + return false +} + +// The response message for +// [Execution.Execute][google.devtools.remoteexecution.v1test.Execution.Execute], +// which will be contained in the [response +// field][google.longrunning.Operation.response] of the +// [Operation][google.longrunning.Operation]. +type ExecuteResponse struct { + // The result of the action. + Result *ActionResult `protobuf:"bytes,1,opt,name=result" json:"result,omitempty"` + // True if the result was served from cache, false if it was executed. + CachedResult bool `protobuf:"varint,2,opt,name=cached_result,json=cachedResult" json:"cached_result,omitempty"` + // If the status has a code other than `OK`, it indicates that the action did + // not finish execution. For example, if the operation times out during + // execution, the status will have a `DEADLINE_EXCEEDED` code. Servers MUST + // use this field for errors in execution, rather than the error field on the + // `Operation` object. + // + // If the status code is other than `OK`, then the result MUST NOT be cached. + // For an error status, the `result` field is optional; the server may + // populate the output-, stdout-, and stderr-related fields if it has any + // information available, such as the stdout and stderr of a timed-out action. + Status *google_rpc.Status `protobuf:"bytes,3,opt,name=status" json:"status,omitempty"` + // An optional list of additional log outputs the server wishes to provide. A + // server can use this to return execution-specific logs however it wishes. + // This is intended primarily to make it easier for users to debug issues that + // may be outside of the actual job execution, such as by identifying the + // worker executing the action or by providing logs from the worker's setup + // phase. The keys SHOULD be human readable so that a client can display them + // to a user. + ServerLogs map[string]*LogFile `protobuf:"bytes,4,rep,name=server_logs,json=serverLogs" json:"server_logs,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *ExecuteResponse) Reset() { *m = ExecuteResponse{} } +func (m *ExecuteResponse) String() string { return proto.CompactTextString(m) } +func (*ExecuteResponse) ProtoMessage() {} +func (*ExecuteResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +func (m *ExecuteResponse) GetResult() *ActionResult { + if m != nil { + return m.Result + } + return nil +} + +func (m *ExecuteResponse) GetCachedResult() bool { + if m != nil { + return m.CachedResult + } + return false +} + +func (m *ExecuteResponse) GetStatus() *google_rpc.Status { + if m != nil { + return m.Status + } + return nil +} + +func (m *ExecuteResponse) GetServerLogs() map[string]*LogFile { + if m != nil { + return m.ServerLogs + } + return nil +} + +// Metadata about an ongoing +// [execution][google.devtools.remoteexecution.v1test.Execution.Execute], which +// will be contained in the [metadata +// field][google.longrunning.Operation.response] of the +// [Operation][google.longrunning.Operation]. +type ExecuteOperationMetadata struct { + Stage ExecuteOperationMetadata_Stage `protobuf:"varint,1,opt,name=stage,enum=google.devtools.remoteexecution.v1test.ExecuteOperationMetadata_Stage" json:"stage,omitempty"` + // The digest of the [Action][google.devtools.remoteexecution.v1test.Action] + // being executed. + ActionDigest *Digest `protobuf:"bytes,2,opt,name=action_digest,json=actionDigest" json:"action_digest,omitempty"` + // If set, the client can use this name with + // [ByteStream.Read][google.bytestream.ByteStream.Read] to stream the + // standard output. + StdoutStreamName string `protobuf:"bytes,3,opt,name=stdout_stream_name,json=stdoutStreamName" json:"stdout_stream_name,omitempty"` + // If set, the client can use this name with + // [ByteStream.Read][google.bytestream.ByteStream.Read] to stream the + // standard error. + StderrStreamName string `protobuf:"bytes,4,opt,name=stderr_stream_name,json=stderrStreamName" json:"stderr_stream_name,omitempty"` +} + +func (m *ExecuteOperationMetadata) Reset() { *m = ExecuteOperationMetadata{} } +func (m *ExecuteOperationMetadata) String() string { return proto.CompactTextString(m) } +func (*ExecuteOperationMetadata) ProtoMessage() {} +func (*ExecuteOperationMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +func (m *ExecuteOperationMetadata) GetStage() ExecuteOperationMetadata_Stage { + if m != nil { + return m.Stage + } + return ExecuteOperationMetadata_UNKNOWN +} + +func (m *ExecuteOperationMetadata) GetActionDigest() *Digest { + if m != nil { + return m.ActionDigest + } + return nil +} + +func (m *ExecuteOperationMetadata) GetStdoutStreamName() string { + if m != nil { + return m.StdoutStreamName + } + return "" +} + +func (m *ExecuteOperationMetadata) GetStderrStreamName() string { + if m != nil { + return m.StderrStreamName + } + return "" +} + +// A request message for +// [ActionCache.GetActionResult][google.devtools.remoteexecution.v1test.ActionCache.GetActionResult]. +type GetActionResultRequest struct { + // The instance of the execution system to operate against. A server may + // support multiple instances of the execution system (with their own workers, + // storage, caches, etc.). The server MAY require use of this field to select + // between them in an implementation-defined fashion, otherwise it can be + // omitted. + InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName" json:"instance_name,omitempty"` + // The digest of the [Action][google.devtools.remoteexecution.v1test.Action] + // whose result is requested. + ActionDigest *Digest `protobuf:"bytes,2,opt,name=action_digest,json=actionDigest" json:"action_digest,omitempty"` +} + +func (m *GetActionResultRequest) Reset() { *m = GetActionResultRequest{} } +func (m *GetActionResultRequest) String() string { return proto.CompactTextString(m) } +func (*GetActionResultRequest) ProtoMessage() {} +func (*GetActionResultRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +func (m *GetActionResultRequest) GetInstanceName() string { + if m != nil { + return m.InstanceName + } + return "" +} + +func (m *GetActionResultRequest) GetActionDigest() *Digest { + if m != nil { + return m.ActionDigest + } + return nil +} + +// A request message for +// [ActionCache.UpdateActionResult][google.devtools.remoteexecution.v1test.ActionCache.UpdateActionResult]. +type UpdateActionResultRequest struct { + // The instance of the execution system to operate against. A server may + // support multiple instances of the execution system (with their own workers, + // storage, caches, etc.). The server MAY require use of this field to select + // between them in an implementation-defined fashion, otherwise it can be + // omitted. + InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName" json:"instance_name,omitempty"` + // The digest of the [Action][google.devtools.remoteexecution.v1test.Action] + // whose result is being uploaded. + ActionDigest *Digest `protobuf:"bytes,2,opt,name=action_digest,json=actionDigest" json:"action_digest,omitempty"` + // The [ActionResult][google.devtools.remoteexecution.v1test.ActionResult] + // to store in the cache. + ActionResult *ActionResult `protobuf:"bytes,3,opt,name=action_result,json=actionResult" json:"action_result,omitempty"` +} + +func (m *UpdateActionResultRequest) Reset() { *m = UpdateActionResultRequest{} } +func (m *UpdateActionResultRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateActionResultRequest) ProtoMessage() {} +func (*UpdateActionResultRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } + +func (m *UpdateActionResultRequest) GetInstanceName() string { + if m != nil { + return m.InstanceName + } + return "" +} + +func (m *UpdateActionResultRequest) GetActionDigest() *Digest { + if m != nil { + return m.ActionDigest + } + return nil +} + +func (m *UpdateActionResultRequest) GetActionResult() *ActionResult { + if m != nil { + return m.ActionResult + } + return nil +} + +// A request message for +// [ContentAddressableStorage.FindMissingBlobs][google.devtools.remoteexecution.v1test.ContentAddressableStorage.FindMissingBlobs]. +type FindMissingBlobsRequest struct { + // The instance of the execution system to operate against. A server may + // support multiple instances of the execution system (with their own workers, + // storage, caches, etc.). The server MAY require use of this field to select + // between them in an implementation-defined fashion, otherwise it can be + // omitted. + InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName" json:"instance_name,omitempty"` + // A list of the blobs to check. + BlobDigests []*Digest `protobuf:"bytes,2,rep,name=blob_digests,json=blobDigests" json:"blob_digests,omitempty"` +} + +func (m *FindMissingBlobsRequest) Reset() { *m = FindMissingBlobsRequest{} } +func (m *FindMissingBlobsRequest) String() string { return proto.CompactTextString(m) } +func (*FindMissingBlobsRequest) ProtoMessage() {} +func (*FindMissingBlobsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } + +func (m *FindMissingBlobsRequest) GetInstanceName() string { + if m != nil { + return m.InstanceName + } + return "" +} + +func (m *FindMissingBlobsRequest) GetBlobDigests() []*Digest { + if m != nil { + return m.BlobDigests + } + return nil +} + +// A response message for +// [ContentAddressableStorage.FindMissingBlobs][google.devtools.remoteexecution.v1test.ContentAddressableStorage.FindMissingBlobs]. +type FindMissingBlobsResponse struct { + // A list of the blobs requested *not* present in the storage. + MissingBlobDigests []*Digest `protobuf:"bytes,2,rep,name=missing_blob_digests,json=missingBlobDigests" json:"missing_blob_digests,omitempty"` +} + +func (m *FindMissingBlobsResponse) Reset() { *m = FindMissingBlobsResponse{} } +func (m *FindMissingBlobsResponse) String() string { return proto.CompactTextString(m) } +func (*FindMissingBlobsResponse) ProtoMessage() {} +func (*FindMissingBlobsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } + +func (m *FindMissingBlobsResponse) GetMissingBlobDigests() []*Digest { + if m != nil { + return m.MissingBlobDigests + } + return nil +} + +// A single request message for +// [ContentAddressableStorage.BatchUpdateBlobs][google.devtools.remoteexecution.v1test.ContentAddressableStorage.BatchUpdateBlobs]. +type UpdateBlobRequest struct { + // The digest of the blob. This MUST be the digest of `data`. + ContentDigest *Digest `protobuf:"bytes,1,opt,name=content_digest,json=contentDigest" json:"content_digest,omitempty"` + // The raw binary data. + Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` +} + +func (m *UpdateBlobRequest) Reset() { *m = UpdateBlobRequest{} } +func (m *UpdateBlobRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateBlobRequest) ProtoMessage() {} +func (*UpdateBlobRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } + +func (m *UpdateBlobRequest) GetContentDigest() *Digest { + if m != nil { + return m.ContentDigest + } + return nil +} + +func (m *UpdateBlobRequest) GetData() []byte { + if m != nil { + return m.Data + } + return nil +} + +// A request message for +// [ContentAddressableStorage.BatchUpdateBlobs][google.devtools.remoteexecution.v1test.ContentAddressableStorage.BatchUpdateBlobs]. +type BatchUpdateBlobsRequest struct { + // The instance of the execution system to operate against. A server may + // support multiple instances of the execution system (with their own workers, + // storage, caches, etc.). The server MAY require use of this field to select + // between them in an implementation-defined fashion, otherwise it can be + // omitted. + InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName" json:"instance_name,omitempty"` + // The individual upload requests. + Requests []*UpdateBlobRequest `protobuf:"bytes,2,rep,name=requests" json:"requests,omitempty"` +} + +func (m *BatchUpdateBlobsRequest) Reset() { *m = BatchUpdateBlobsRequest{} } +func (m *BatchUpdateBlobsRequest) String() string { return proto.CompactTextString(m) } +func (*BatchUpdateBlobsRequest) ProtoMessage() {} +func (*BatchUpdateBlobsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } + +func (m *BatchUpdateBlobsRequest) GetInstanceName() string { + if m != nil { + return m.InstanceName + } + return "" +} + +func (m *BatchUpdateBlobsRequest) GetRequests() []*UpdateBlobRequest { + if m != nil { + return m.Requests + } + return nil +} + +// A response message for +// [ContentAddressableStorage.BatchUpdateBlobs][google.devtools.remoteexecution.v1test.ContentAddressableStorage.BatchUpdateBlobs]. +type BatchUpdateBlobsResponse struct { + // The responses to the requests. + Responses []*BatchUpdateBlobsResponse_Response `protobuf:"bytes,1,rep,name=responses" json:"responses,omitempty"` +} + +func (m *BatchUpdateBlobsResponse) Reset() { *m = BatchUpdateBlobsResponse{} } +func (m *BatchUpdateBlobsResponse) String() string { return proto.CompactTextString(m) } +func (*BatchUpdateBlobsResponse) ProtoMessage() {} +func (*BatchUpdateBlobsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } + +func (m *BatchUpdateBlobsResponse) GetResponses() []*BatchUpdateBlobsResponse_Response { + if m != nil { + return m.Responses + } + return nil +} + +// A response corresponding to a single blob that the client tried to upload. +type BatchUpdateBlobsResponse_Response struct { + // The digest to which this response corresponds. + BlobDigest *Digest `protobuf:"bytes,1,opt,name=blob_digest,json=blobDigest" json:"blob_digest,omitempty"` + // The result of attempting to upload that blob. + Status *google_rpc.Status `protobuf:"bytes,2,opt,name=status" json:"status,omitempty"` +} + +func (m *BatchUpdateBlobsResponse_Response) Reset() { *m = BatchUpdateBlobsResponse_Response{} } +func (m *BatchUpdateBlobsResponse_Response) String() string { return proto.CompactTextString(m) } +func (*BatchUpdateBlobsResponse_Response) ProtoMessage() {} +func (*BatchUpdateBlobsResponse_Response) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{21, 0} +} + +func (m *BatchUpdateBlobsResponse_Response) GetBlobDigest() *Digest { + if m != nil { + return m.BlobDigest + } + return nil +} + +func (m *BatchUpdateBlobsResponse_Response) GetStatus() *google_rpc.Status { + if m != nil { + return m.Status + } + return nil +} + +// A request message for +// [ContentAddressableStorage.GetTree][google.devtools.remoteexecution.v1test.ContentAddressableStorage.GetTree]. +type GetTreeRequest struct { + // The instance of the execution system to operate against. A server may + // support multiple instances of the execution system (with their own workers, + // storage, caches, etc.). The server MAY require use of this field to select + // between them in an implementation-defined fashion, otherwise it can be + // omitted. + InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName" json:"instance_name,omitempty"` + // The digest of the root, which must be an encoded + // [Directory][google.devtools.remoteexecution.v1test.Directory] message + // stored in the + // [ContentAddressableStorage][google.devtools.remoteexecution.v1test.ContentAddressableStorage]. + RootDigest *Digest `protobuf:"bytes,2,opt,name=root_digest,json=rootDigest" json:"root_digest,omitempty"` + // A maximum page size to request. If present, the server will request no more + // than this many items. Regardless of whether a page size is specified, the + // server may place its own limit on the number of items to be returned and + // require the client to retrieve more items using a subsequent request. + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // A page token, which must be a value received in a previous + // [GetTreeResponse][google.devtools.remoteexecution.v1test.GetTreeResponse]. + // If present, the server will use it to return the following page of results. + PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *GetTreeRequest) Reset() { *m = GetTreeRequest{} } +func (m *GetTreeRequest) String() string { return proto.CompactTextString(m) } +func (*GetTreeRequest) ProtoMessage() {} +func (*GetTreeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } + +func (m *GetTreeRequest) GetInstanceName() string { + if m != nil { + return m.InstanceName + } + return "" +} + +func (m *GetTreeRequest) GetRootDigest() *Digest { + if m != nil { + return m.RootDigest + } + return nil +} + +func (m *GetTreeRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *GetTreeRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// A response message for +// [ContentAddressableStorage.GetTree][google.devtools.remoteexecution.v1test.ContentAddressableStorage.GetTree]. +type GetTreeResponse struct { + // The directories descended from the requested root. + Directories []*Directory `protobuf:"bytes,1,rep,name=directories" json:"directories,omitempty"` + // If present, signifies that there are more results which the client can + // retrieve by passing this as the page_token in a subsequent + // [request][google.devtools.remoteexecution.v1test.GetTreeRequest]. + // If empty, signifies that this is the last page of results. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *GetTreeResponse) Reset() { *m = GetTreeResponse{} } +func (m *GetTreeResponse) String() string { return proto.CompactTextString(m) } +func (*GetTreeResponse) ProtoMessage() {} +func (*GetTreeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } + +func (m *GetTreeResponse) GetDirectories() []*Directory { + if m != nil { + return m.Directories + } + return nil +} + +func (m *GetTreeResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Details for the tool used to call the API. +type ToolDetails struct { + // Name of the tool, e.g. bazel. + ToolName string `protobuf:"bytes,1,opt,name=tool_name,json=toolName" json:"tool_name,omitempty"` + // Version of the tool used for the request, e.g. 5.0.3. + ToolVersion string `protobuf:"bytes,2,opt,name=tool_version,json=toolVersion" json:"tool_version,omitempty"` +} + +func (m *ToolDetails) Reset() { *m = ToolDetails{} } +func (m *ToolDetails) String() string { return proto.CompactTextString(m) } +func (*ToolDetails) ProtoMessage() {} +func (*ToolDetails) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} } + +func (m *ToolDetails) GetToolName() string { + if m != nil { + return m.ToolName + } + return "" +} + +func (m *ToolDetails) GetToolVersion() string { + if m != nil { + return m.ToolVersion + } + return "" +} + +// An optional Metadata to attach to any RPC request to tell the server about an +// external context of the request. The server may use this for logging or other +// purposes. To use it, the client attaches the header to the call using the +// canonical proto serialization: +// name: google.devtools.remoteexecution.v1test.requestmetadata-bin +// contents: the base64 encoded binary RequestMetadata message. +type RequestMetadata struct { + // The details for the tool invoking the requests. + ToolDetails *ToolDetails `protobuf:"bytes,1,opt,name=tool_details,json=toolDetails" json:"tool_details,omitempty"` + // An identifier that ties multiple requests to the same action. + // For example, multiple requests to the CAS, Action Cache, and Execution + // API are used in order to compile foo.cc. + ActionId string `protobuf:"bytes,2,opt,name=action_id,json=actionId" json:"action_id,omitempty"` + // An identifier that ties multiple actions together to a final result. + // For example, multiple actions are required to build and run foo_test. + ToolInvocationId string `protobuf:"bytes,3,opt,name=tool_invocation_id,json=toolInvocationId" json:"tool_invocation_id,omitempty"` + // An identifier to tie multiple tool invocations together. For example, + // runs of foo_test, bar_test and baz_test on a post-submit of a given patch. + CorrelatedInvocationsId string `protobuf:"bytes,4,opt,name=correlated_invocations_id,json=correlatedInvocationsId" json:"correlated_invocations_id,omitempty"` +} + +func (m *RequestMetadata) Reset() { *m = RequestMetadata{} } +func (m *RequestMetadata) String() string { return proto.CompactTextString(m) } +func (*RequestMetadata) ProtoMessage() {} +func (*RequestMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } + +func (m *RequestMetadata) GetToolDetails() *ToolDetails { + if m != nil { + return m.ToolDetails + } + return nil +} + +func (m *RequestMetadata) GetActionId() string { + if m != nil { + return m.ActionId + } + return "" +} + +func (m *RequestMetadata) GetToolInvocationId() string { + if m != nil { + return m.ToolInvocationId + } + return "" +} + +func (m *RequestMetadata) GetCorrelatedInvocationsId() string { + if m != nil { + return m.CorrelatedInvocationsId + } + return "" +} + +func init() { + proto.RegisterType((*Action)(nil), "google.devtools.remoteexecution.v1test.Action") + proto.RegisterType((*Command)(nil), "google.devtools.remoteexecution.v1test.Command") + proto.RegisterType((*Command_EnvironmentVariable)(nil), "google.devtools.remoteexecution.v1test.Command.EnvironmentVariable") + proto.RegisterType((*Platform)(nil), "google.devtools.remoteexecution.v1test.Platform") + proto.RegisterType((*Platform_Property)(nil), "google.devtools.remoteexecution.v1test.Platform.Property") + proto.RegisterType((*Directory)(nil), "google.devtools.remoteexecution.v1test.Directory") + proto.RegisterType((*FileNode)(nil), "google.devtools.remoteexecution.v1test.FileNode") + proto.RegisterType((*DirectoryNode)(nil), "google.devtools.remoteexecution.v1test.DirectoryNode") + proto.RegisterType((*Digest)(nil), "google.devtools.remoteexecution.v1test.Digest") + proto.RegisterType((*ActionResult)(nil), "google.devtools.remoteexecution.v1test.ActionResult") + proto.RegisterType((*OutputFile)(nil), "google.devtools.remoteexecution.v1test.OutputFile") + proto.RegisterType((*Tree)(nil), "google.devtools.remoteexecution.v1test.Tree") + proto.RegisterType((*OutputDirectory)(nil), "google.devtools.remoteexecution.v1test.OutputDirectory") + proto.RegisterType((*ExecuteRequest)(nil), "google.devtools.remoteexecution.v1test.ExecuteRequest") + proto.RegisterType((*LogFile)(nil), "google.devtools.remoteexecution.v1test.LogFile") + proto.RegisterType((*ExecuteResponse)(nil), "google.devtools.remoteexecution.v1test.ExecuteResponse") + proto.RegisterType((*ExecuteOperationMetadata)(nil), "google.devtools.remoteexecution.v1test.ExecuteOperationMetadata") + proto.RegisterType((*GetActionResultRequest)(nil), "google.devtools.remoteexecution.v1test.GetActionResultRequest") + proto.RegisterType((*UpdateActionResultRequest)(nil), "google.devtools.remoteexecution.v1test.UpdateActionResultRequest") + proto.RegisterType((*FindMissingBlobsRequest)(nil), "google.devtools.remoteexecution.v1test.FindMissingBlobsRequest") + proto.RegisterType((*FindMissingBlobsResponse)(nil), "google.devtools.remoteexecution.v1test.FindMissingBlobsResponse") + proto.RegisterType((*UpdateBlobRequest)(nil), "google.devtools.remoteexecution.v1test.UpdateBlobRequest") + proto.RegisterType((*BatchUpdateBlobsRequest)(nil), "google.devtools.remoteexecution.v1test.BatchUpdateBlobsRequest") + proto.RegisterType((*BatchUpdateBlobsResponse)(nil), "google.devtools.remoteexecution.v1test.BatchUpdateBlobsResponse") + proto.RegisterType((*BatchUpdateBlobsResponse_Response)(nil), "google.devtools.remoteexecution.v1test.BatchUpdateBlobsResponse.Response") + proto.RegisterType((*GetTreeRequest)(nil), "google.devtools.remoteexecution.v1test.GetTreeRequest") + proto.RegisterType((*GetTreeResponse)(nil), "google.devtools.remoteexecution.v1test.GetTreeResponse") + proto.RegisterType((*ToolDetails)(nil), "google.devtools.remoteexecution.v1test.ToolDetails") + proto.RegisterType((*RequestMetadata)(nil), "google.devtools.remoteexecution.v1test.RequestMetadata") + proto.RegisterEnum("google.devtools.remoteexecution.v1test.ExecuteOperationMetadata_Stage", ExecuteOperationMetadata_Stage_name, ExecuteOperationMetadata_Stage_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for Execution service + +type ExecutionClient interface { + // Execute an action remotely. + // + // In order to execute an action, the client must first upload all of the + // inputs, as well as the + // [Command][google.devtools.remoteexecution.v1test.Command] to run, into the + // [ContentAddressableStorage][google.devtools.remoteexecution.v1test.ContentAddressableStorage]. + // It then calls `Execute` with an + // [Action][google.devtools.remoteexecution.v1test.Action] referring to them. + // The server will run the action and eventually return the result. + // + // The input `Action`'s fields MUST meet the various canonicalization + // requirements specified in the documentation for their types so that it has + // the same digest as other logically equivalent `Action`s. The server MAY + // enforce the requirements and return errors if a non-canonical input is + // received. It MAY also proceed without verifying some or all of the + // requirements, such as for performance reasons. If the server does not + // verify the requirement, then it will treat the `Action` as distinct from + // another logically equivalent action if they hash differently. + // + // Returns a [google.longrunning.Operation][google.longrunning.Operation] + // describing the resulting execution, with eventual `response` + // [ExecuteResponse][google.devtools.remoteexecution.v1test.ExecuteResponse]. + // The `metadata` on the operation is of type + // [ExecuteOperationMetadata][google.devtools.remoteexecution.v1test.ExecuteOperationMetadata]. + // + // To query the operation, you can use the + // [Operations API][google.longrunning.Operations.GetOperation]. If you wish + // to allow the server to stream operations updates, rather than requiring + // client polling, you can use the + // [Watcher API][google.watcher.v1.Watcher.Watch] with the Operation's `name` + // as the `target`. + // + // When using the Watcher API, the initial `data` will be the `Operation` at + // the time of the request. Updates will be provided periodically by the + // server until the `Operation` completes, at which point the response message + // will (assuming no error) be at `data.response`. + // + // The server NEED NOT implement other methods or functionality of the + // Operation and Watcher APIs. + // + // Errors discovered during creation of the `Operation` will be reported + // as gRPC Status errors, while errors that occurred while running the + // action will be reported in the `status` field of the `ExecuteResponse`. The + // server MUST NOT set the `error` field of the `Operation` proto. + // The possible errors include: + // * `INVALID_ARGUMENT`: One or more arguments are invalid. + // * `FAILED_PRECONDITION`: One or more errors occurred in setting up the + // action requested, such as a missing input or command or no worker being + // available. The client may be able to fix the errors and retry. + // * `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to run + // the action. + // * `UNAVAILABLE`: Due to a transient condition, such as all workers being + // occupied (and the server does not support a queue), the action could not + // be started. The client should retry. + // * `INTERNAL`: An internal error occurred in the execution engine or the + // worker. + // * `DEADLINE_EXCEEDED`: The execution timed out. + // + // In the case of a missing input or command, the server SHOULD additionally + // send a [PreconditionFailure][google.rpc.PreconditionFailure] error detail + // where, for each requested blob not present in the CAS, there is a + // `Violation` with a `type` of `MISSING` and a `subject` of + // `"blobs/{hash}/{size}"` indicating the digest of the missing blob. + Execute(ctx context.Context, in *ExecuteRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) +} + +type executionClient struct { + cc *grpc.ClientConn +} + +func NewExecutionClient(cc *grpc.ClientConn) ExecutionClient { + return &executionClient{cc} +} + +func (c *executionClient) Execute(ctx context.Context, in *ExecuteRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.devtools.remoteexecution.v1test.Execution/Execute", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Execution service + +type ExecutionServer interface { + // Execute an action remotely. + // + // In order to execute an action, the client must first upload all of the + // inputs, as well as the + // [Command][google.devtools.remoteexecution.v1test.Command] to run, into the + // [ContentAddressableStorage][google.devtools.remoteexecution.v1test.ContentAddressableStorage]. + // It then calls `Execute` with an + // [Action][google.devtools.remoteexecution.v1test.Action] referring to them. + // The server will run the action and eventually return the result. + // + // The input `Action`'s fields MUST meet the various canonicalization + // requirements specified in the documentation for their types so that it has + // the same digest as other logically equivalent `Action`s. The server MAY + // enforce the requirements and return errors if a non-canonical input is + // received. It MAY also proceed without verifying some or all of the + // requirements, such as for performance reasons. If the server does not + // verify the requirement, then it will treat the `Action` as distinct from + // another logically equivalent action if they hash differently. + // + // Returns a [google.longrunning.Operation][google.longrunning.Operation] + // describing the resulting execution, with eventual `response` + // [ExecuteResponse][google.devtools.remoteexecution.v1test.ExecuteResponse]. + // The `metadata` on the operation is of type + // [ExecuteOperationMetadata][google.devtools.remoteexecution.v1test.ExecuteOperationMetadata]. + // + // To query the operation, you can use the + // [Operations API][google.longrunning.Operations.GetOperation]. If you wish + // to allow the server to stream operations updates, rather than requiring + // client polling, you can use the + // [Watcher API][google.watcher.v1.Watcher.Watch] with the Operation's `name` + // as the `target`. + // + // When using the Watcher API, the initial `data` will be the `Operation` at + // the time of the request. Updates will be provided periodically by the + // server until the `Operation` completes, at which point the response message + // will (assuming no error) be at `data.response`. + // + // The server NEED NOT implement other methods or functionality of the + // Operation and Watcher APIs. + // + // Errors discovered during creation of the `Operation` will be reported + // as gRPC Status errors, while errors that occurred while running the + // action will be reported in the `status` field of the `ExecuteResponse`. The + // server MUST NOT set the `error` field of the `Operation` proto. + // The possible errors include: + // * `INVALID_ARGUMENT`: One or more arguments are invalid. + // * `FAILED_PRECONDITION`: One or more errors occurred in setting up the + // action requested, such as a missing input or command or no worker being + // available. The client may be able to fix the errors and retry. + // * `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to run + // the action. + // * `UNAVAILABLE`: Due to a transient condition, such as all workers being + // occupied (and the server does not support a queue), the action could not + // be started. The client should retry. + // * `INTERNAL`: An internal error occurred in the execution engine or the + // worker. + // * `DEADLINE_EXCEEDED`: The execution timed out. + // + // In the case of a missing input or command, the server SHOULD additionally + // send a [PreconditionFailure][google.rpc.PreconditionFailure] error detail + // where, for each requested blob not present in the CAS, there is a + // `Violation` with a `type` of `MISSING` and a `subject` of + // `"blobs/{hash}/{size}"` indicating the digest of the missing blob. + Execute(context.Context, *ExecuteRequest) (*google_longrunning.Operation, error) +} + +func RegisterExecutionServer(s *grpc.Server, srv ExecutionServer) { + s.RegisterService(&_Execution_serviceDesc, srv) +} + +func _Execution_Execute_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ExecuteRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ExecutionServer).Execute(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.remoteexecution.v1test.Execution/Execute", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ExecutionServer).Execute(ctx, req.(*ExecuteRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Execution_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.devtools.remoteexecution.v1test.Execution", + HandlerType: (*ExecutionServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Execute", + Handler: _Execution_Execute_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/devtools/remoteexecution/v1test/remote_execution.proto", +} + +// Client API for ActionCache service + +type ActionCacheClient interface { + // Retrieve a cached execution result. + // + // Errors: + // * `NOT_FOUND`: The requested `ActionResult` is not in the cache. + GetActionResult(ctx context.Context, in *GetActionResultRequest, opts ...grpc.CallOption) (*ActionResult, error) + // Upload a new execution result. + // + // This method is intended for servers which implement the distributed cache + // independently of the + // [Execution][google.devtools.remoteexecution.v1test.Execution] API. As a + // result, it is OPTIONAL for servers to implement. + // + // Errors: + // * `NOT_IMPLEMENTED`: This method is not supported by the server. + // * `RESOURCE_EXHAUSTED`: There is insufficient storage space to add the + // entry to the cache. + UpdateActionResult(ctx context.Context, in *UpdateActionResultRequest, opts ...grpc.CallOption) (*ActionResult, error) +} + +type actionCacheClient struct { + cc *grpc.ClientConn +} + +func NewActionCacheClient(cc *grpc.ClientConn) ActionCacheClient { + return &actionCacheClient{cc} +} + +func (c *actionCacheClient) GetActionResult(ctx context.Context, in *GetActionResultRequest, opts ...grpc.CallOption) (*ActionResult, error) { + out := new(ActionResult) + err := grpc.Invoke(ctx, "/google.devtools.remoteexecution.v1test.ActionCache/GetActionResult", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *actionCacheClient) UpdateActionResult(ctx context.Context, in *UpdateActionResultRequest, opts ...grpc.CallOption) (*ActionResult, error) { + out := new(ActionResult) + err := grpc.Invoke(ctx, "/google.devtools.remoteexecution.v1test.ActionCache/UpdateActionResult", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for ActionCache service + +type ActionCacheServer interface { + // Retrieve a cached execution result. + // + // Errors: + // * `NOT_FOUND`: The requested `ActionResult` is not in the cache. + GetActionResult(context.Context, *GetActionResultRequest) (*ActionResult, error) + // Upload a new execution result. + // + // This method is intended for servers which implement the distributed cache + // independently of the + // [Execution][google.devtools.remoteexecution.v1test.Execution] API. As a + // result, it is OPTIONAL for servers to implement. + // + // Errors: + // * `NOT_IMPLEMENTED`: This method is not supported by the server. + // * `RESOURCE_EXHAUSTED`: There is insufficient storage space to add the + // entry to the cache. + UpdateActionResult(context.Context, *UpdateActionResultRequest) (*ActionResult, error) +} + +func RegisterActionCacheServer(s *grpc.Server, srv ActionCacheServer) { + s.RegisterService(&_ActionCache_serviceDesc, srv) +} + +func _ActionCache_GetActionResult_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetActionResultRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ActionCacheServer).GetActionResult(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.remoteexecution.v1test.ActionCache/GetActionResult", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ActionCacheServer).GetActionResult(ctx, req.(*GetActionResultRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ActionCache_UpdateActionResult_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateActionResultRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ActionCacheServer).UpdateActionResult(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.remoteexecution.v1test.ActionCache/UpdateActionResult", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ActionCacheServer).UpdateActionResult(ctx, req.(*UpdateActionResultRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _ActionCache_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.devtools.remoteexecution.v1test.ActionCache", + HandlerType: (*ActionCacheServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetActionResult", + Handler: _ActionCache_GetActionResult_Handler, + }, + { + MethodName: "UpdateActionResult", + Handler: _ActionCache_UpdateActionResult_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/devtools/remoteexecution/v1test/remote_execution.proto", +} + +// Client API for ContentAddressableStorage service + +type ContentAddressableStorageClient interface { + // Determine if blobs are present in the CAS. + // + // Clients can use this API before uploading blobs to determine which ones are + // already present in the CAS and do not need to be uploaded again. + // + // There are no method-specific errors. + FindMissingBlobs(ctx context.Context, in *FindMissingBlobsRequest, opts ...grpc.CallOption) (*FindMissingBlobsResponse, error) + // Upload many blobs at once. + // + // The client MUST NOT upload blobs with a combined total size of more than 10 + // MiB using this API. Such requests should either be split into smaller + // chunks or uploaded using the + // [ByteStream API][google.bytestream.ByteStream], as appropriate. + // + // This request is equivalent to calling [UpdateBlob][] on each individual + // blob, in parallel. The requests may succeed or fail independently. + // + // Errors: + // * `INVALID_ARGUMENT`: The client attempted to upload more than 10 MiB of + // data. + // + // Individual requests may return the following errors, additionally: + // * `RESOURCE_EXHAUSTED`: There is insufficient disk quota to store the blob. + // * `INVALID_ARGUMENT`: The + // [Digest][google.devtools.remoteexecution.v1test.Digest] does not match the + // provided data. + BatchUpdateBlobs(ctx context.Context, in *BatchUpdateBlobsRequest, opts ...grpc.CallOption) (*BatchUpdateBlobsResponse, error) + // Fetch the entire directory tree rooted at a node. + // + // This request must be targeted at a + // [Directory][google.devtools.remoteexecution.v1test.Directory] stored in the + // [ContentAddressableStorage][google.devtools.remoteexecution.v1test.ContentAddressableStorage] + // (CAS). The server will enumerate the `Directory` tree recursively and + // return every node descended from the root. + // The exact traversal order is unspecified and, unless retrieving subsequent + // pages from an earlier request, is not guaranteed to be stable across + // multiple invocations of `GetTree`. + // + // If part of the tree is missing from the CAS, the server will return the + // portion present and omit the rest. + // + // * `NOT_FOUND`: The requested tree root is not present in the CAS. + GetTree(ctx context.Context, in *GetTreeRequest, opts ...grpc.CallOption) (*GetTreeResponse, error) +} + +type contentAddressableStorageClient struct { + cc *grpc.ClientConn +} + +func NewContentAddressableStorageClient(cc *grpc.ClientConn) ContentAddressableStorageClient { + return &contentAddressableStorageClient{cc} +} + +func (c *contentAddressableStorageClient) FindMissingBlobs(ctx context.Context, in *FindMissingBlobsRequest, opts ...grpc.CallOption) (*FindMissingBlobsResponse, error) { + out := new(FindMissingBlobsResponse) + err := grpc.Invoke(ctx, "/google.devtools.remoteexecution.v1test.ContentAddressableStorage/FindMissingBlobs", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *contentAddressableStorageClient) BatchUpdateBlobs(ctx context.Context, in *BatchUpdateBlobsRequest, opts ...grpc.CallOption) (*BatchUpdateBlobsResponse, error) { + out := new(BatchUpdateBlobsResponse) + err := grpc.Invoke(ctx, "/google.devtools.remoteexecution.v1test.ContentAddressableStorage/BatchUpdateBlobs", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *contentAddressableStorageClient) GetTree(ctx context.Context, in *GetTreeRequest, opts ...grpc.CallOption) (*GetTreeResponse, error) { + out := new(GetTreeResponse) + err := grpc.Invoke(ctx, "/google.devtools.remoteexecution.v1test.ContentAddressableStorage/GetTree", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for ContentAddressableStorage service + +type ContentAddressableStorageServer interface { + // Determine if blobs are present in the CAS. + // + // Clients can use this API before uploading blobs to determine which ones are + // already present in the CAS and do not need to be uploaded again. + // + // There are no method-specific errors. + FindMissingBlobs(context.Context, *FindMissingBlobsRequest) (*FindMissingBlobsResponse, error) + // Upload many blobs at once. + // + // The client MUST NOT upload blobs with a combined total size of more than 10 + // MiB using this API. Such requests should either be split into smaller + // chunks or uploaded using the + // [ByteStream API][google.bytestream.ByteStream], as appropriate. + // + // This request is equivalent to calling [UpdateBlob][] on each individual + // blob, in parallel. The requests may succeed or fail independently. + // + // Errors: + // * `INVALID_ARGUMENT`: The client attempted to upload more than 10 MiB of + // data. + // + // Individual requests may return the following errors, additionally: + // * `RESOURCE_EXHAUSTED`: There is insufficient disk quota to store the blob. + // * `INVALID_ARGUMENT`: The + // [Digest][google.devtools.remoteexecution.v1test.Digest] does not match the + // provided data. + BatchUpdateBlobs(context.Context, *BatchUpdateBlobsRequest) (*BatchUpdateBlobsResponse, error) + // Fetch the entire directory tree rooted at a node. + // + // This request must be targeted at a + // [Directory][google.devtools.remoteexecution.v1test.Directory] stored in the + // [ContentAddressableStorage][google.devtools.remoteexecution.v1test.ContentAddressableStorage] + // (CAS). The server will enumerate the `Directory` tree recursively and + // return every node descended from the root. + // The exact traversal order is unspecified and, unless retrieving subsequent + // pages from an earlier request, is not guaranteed to be stable across + // multiple invocations of `GetTree`. + // + // If part of the tree is missing from the CAS, the server will return the + // portion present and omit the rest. + // + // * `NOT_FOUND`: The requested tree root is not present in the CAS. + GetTree(context.Context, *GetTreeRequest) (*GetTreeResponse, error) +} + +func RegisterContentAddressableStorageServer(s *grpc.Server, srv ContentAddressableStorageServer) { + s.RegisterService(&_ContentAddressableStorage_serviceDesc, srv) +} + +func _ContentAddressableStorage_FindMissingBlobs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(FindMissingBlobsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ContentAddressableStorageServer).FindMissingBlobs(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.remoteexecution.v1test.ContentAddressableStorage/FindMissingBlobs", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ContentAddressableStorageServer).FindMissingBlobs(ctx, req.(*FindMissingBlobsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ContentAddressableStorage_BatchUpdateBlobs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BatchUpdateBlobsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ContentAddressableStorageServer).BatchUpdateBlobs(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.remoteexecution.v1test.ContentAddressableStorage/BatchUpdateBlobs", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ContentAddressableStorageServer).BatchUpdateBlobs(ctx, req.(*BatchUpdateBlobsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ContentAddressableStorage_GetTree_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetTreeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ContentAddressableStorageServer).GetTree(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.remoteexecution.v1test.ContentAddressableStorage/GetTree", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ContentAddressableStorageServer).GetTree(ctx, req.(*GetTreeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _ContentAddressableStorage_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.devtools.remoteexecution.v1test.ContentAddressableStorage", + HandlerType: (*ContentAddressableStorageServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "FindMissingBlobs", + Handler: _ContentAddressableStorage_FindMissingBlobs_Handler, + }, + { + MethodName: "BatchUpdateBlobs", + Handler: _ContentAddressableStorage_BatchUpdateBlobs_Handler, + }, + { + MethodName: "GetTree", + Handler: _ContentAddressableStorage_GetTree_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/devtools/remoteexecution/v1test/remote_execution.proto", +} + +func init() { + proto.RegisterFile("google/devtools/remoteexecution/v1test/remote_execution.proto", fileDescriptor0) +} + +var fileDescriptor0 = []byte{ + // 2025 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x59, 0xdd, 0x6f, 0x23, 0x57, + 0x15, 0x67, 0xec, 0x24, 0xb6, 0x8f, 0x9d, 0x75, 0xf6, 0x76, 0xe9, 0x7a, 0xdd, 0x2e, 0x4a, 0xa7, + 0xa2, 0x8a, 0xa2, 0x62, 0xb3, 0xde, 0x96, 0x85, 0x54, 0xa5, 0x6c, 0x1c, 0x27, 0x8d, 0x9a, 0xaf, + 0x4e, 0xe2, 0x74, 0xbb, 0xaa, 0x34, 0x9d, 0x78, 0x6e, 0xc6, 0xa3, 0xd8, 0x73, 0xcd, 0xbd, 0xd7, + 0x69, 0xd2, 0x65, 0x79, 0xe0, 0x05, 0x09, 0x04, 0x12, 0x54, 0x08, 0x24, 0x78, 0x42, 0x42, 0x48, + 0x88, 0x27, 0xfe, 0x00, 0x24, 0xf8, 0x03, 0x78, 0x80, 0x17, 0x9e, 0x11, 0x2f, 0xbc, 0xf1, 0xdc, + 0x07, 0x84, 0xee, 0xc7, 0x7c, 0xd8, 0xc9, 0xb2, 0x63, 0x67, 0x57, 0xe2, 0xcd, 0x73, 0xce, 0x3d, + 0xbf, 0xf3, 0x79, 0xcf, 0x39, 0x33, 0x86, 0xb7, 0x3d, 0x42, 0xbc, 0x1e, 0xae, 0xbb, 0xf8, 0x94, + 0x13, 0xd2, 0x63, 0x75, 0x8a, 0xfb, 0x84, 0x63, 0x7c, 0x86, 0x3b, 0x43, 0xee, 0x93, 0xa0, 0x7e, + 0x7a, 0x87, 0x63, 0xc6, 0x35, 0xd9, 0x8e, 0xe8, 0xb5, 0x01, 0x25, 0x9c, 0xa0, 0xd7, 0x94, 0x78, + 0x2d, 0x14, 0xaf, 0x8d, 0x89, 0xd7, 0x94, 0x78, 0xf5, 0x65, 0xad, 0xc6, 0x19, 0xf8, 0x75, 0x27, + 0x08, 0x08, 0x77, 0x04, 0x97, 0x29, 0x94, 0xea, 0xab, 0x9a, 0xdb, 0x23, 0x81, 0x47, 0x87, 0x41, + 0xe0, 0x07, 0x5e, 0x9d, 0x0c, 0x30, 0x1d, 0x39, 0xf4, 0x25, 0x7d, 0x48, 0x3e, 0x1d, 0x0d, 0x8f, + 0xeb, 0xee, 0x50, 0x1d, 0xd0, 0xfc, 0x9b, 0x9a, 0x4f, 0x07, 0x9d, 0x3a, 0xe3, 0x0e, 0x1f, 0x6a, + 0x41, 0xf3, 0x0f, 0x59, 0x98, 0xbb, 0xdf, 0x11, 0x27, 0x51, 0x1b, 0xae, 0x75, 0x48, 0xbf, 0xef, + 0x04, 0xae, 0xed, 0xfa, 0x1e, 0x66, 0xbc, 0x62, 0x2c, 0x1a, 0x4b, 0xc5, 0x46, 0xad, 0x96, 0xce, + 0x8f, 0xda, 0x9a, 0x94, 0xb2, 0xe6, 0x35, 0x8a, 0x7a, 0x44, 0x0f, 0xe1, 0xba, 0x1f, 0x0c, 0x86, + 0xdc, 0xa6, 0x84, 0xf0, 0x10, 0x39, 0x33, 0x15, 0x72, 0x59, 0x02, 0x59, 0x84, 0x70, 0x8d, 0xfd, + 0x0a, 0x94, 0xc8, 0x90, 0x0b, 0xf0, 0x63, 0xbf, 0x87, 0x59, 0x25, 0xbb, 0x98, 0x5d, 0x2a, 0x58, + 0x45, 0x45, 0x5b, 0x17, 0x24, 0xf4, 0x15, 0x40, 0xfa, 0x88, 0xeb, 0x53, 0xdc, 0xe1, 0x84, 0xfa, + 0x98, 0x55, 0x66, 0xe4, 0xc1, 0xeb, 0x8a, 0xb3, 0x16, 0x33, 0xd0, 0x16, 0xe4, 0x07, 0x3d, 0x87, + 0x1f, 0x13, 0xda, 0xaf, 0xcc, 0x4a, 0x23, 0xbf, 0x9a, 0xd6, 0xc8, 0x3d, 0x2d, 0x67, 0x45, 0x08, + 0xe8, 0x2e, 0xe4, 0xb8, 0xdf, 0xc7, 0x64, 0xc8, 0x2b, 0x73, 0x12, 0xec, 0x56, 0x08, 0x16, 0x26, + 0xaa, 0xb6, 0xa6, 0x13, 0x65, 0x85, 0x27, 0xd1, 0x22, 0x94, 0x5c, 0x62, 0x07, 0x84, 0xdb, 0x1d, + 0xa7, 0xd3, 0xc5, 0x95, 0xdc, 0xa2, 0xb1, 0x94, 0xb7, 0xc0, 0x25, 0x3b, 0x84, 0x37, 0x05, 0xc5, + 0xfc, 0x87, 0x01, 0xb9, 0xa6, 0x0a, 0x32, 0x7a, 0x19, 0x0a, 0x0e, 0xf5, 0x86, 0x7d, 0x1c, 0x70, + 0x56, 0x31, 0xa4, 0x5b, 0x31, 0x01, 0x9d, 0xc1, 0x17, 0x71, 0x70, 0xea, 0x53, 0x12, 0x88, 0x67, + 0xfb, 0xd4, 0xa1, 0xbe, 0x73, 0x24, 0x22, 0x95, 0x59, 0xcc, 0x2e, 0x15, 0x1b, 0xcd, 0xb4, 0xbe, + 0x69, 0x6d, 0xb5, 0x56, 0x0c, 0x76, 0xa8, 0xb1, 0xac, 0x1b, 0xf8, 0x22, 0x91, 0x55, 0xdf, 0x81, + 0x17, 0x2e, 0x39, 0x8c, 0x10, 0xcc, 0x04, 0x4e, 0x1f, 0xcb, 0xd2, 0x2a, 0x58, 0xf2, 0x37, 0xba, + 0x01, 0xb3, 0xa7, 0x4e, 0x6f, 0x88, 0x65, 0x55, 0x14, 0x2c, 0xf5, 0x60, 0xfe, 0xd2, 0x80, 0x7c, + 0x18, 0x52, 0xf4, 0x21, 0xc0, 0x80, 0x8a, 0xaa, 0xe7, 0x22, 0x7b, 0x86, 0x34, 0xfe, 0x1b, 0x93, + 0x26, 0xa6, 0xb6, 0xa7, 0x20, 0xce, 0xad, 0x04, 0x58, 0xf5, 0x0d, 0xc8, 0x87, 0xf4, 0x09, 0xac, + 0xfb, 0xbd, 0x01, 0x85, 0xb0, 0x6e, 0xce, 0xd1, 0x3a, 0xcc, 0xaa, 0x02, 0x54, 0x96, 0xa5, 0x2e, + 0x19, 0x51, 0xa2, 0x3b, 0xc4, 0xc5, 0x96, 0x12, 0x47, 0x1f, 0x40, 0x31, 0x59, 0xa5, 0x2a, 0x49, + 0x6f, 0xa6, 0xbf, 0x25, 0xda, 0x1e, 0x09, 0x99, 0x44, 0x32, 0x7f, 0x68, 0x40, 0x3e, 0x54, 0x76, + 0xa9, 0x97, 0xeb, 0x30, 0x77, 0xa5, 0xab, 0xa9, 0xa5, 0xd1, 0xab, 0x30, 0xef, 0x33, 0xdd, 0x09, + 0x45, 0xc2, 0x2b, 0x33, 0xb2, 0x7a, 0x4b, 0x3e, 0x6b, 0x45, 0x34, 0xf3, 0x04, 0xe6, 0x47, 0x6c, + 0x7d, 0x9e, 0x16, 0x99, 0x6f, 0xc1, 0x9c, 0xee, 0x16, 0x08, 0x66, 0xba, 0x0e, 0xeb, 0x86, 0x5a, + 0xc4, 0x6f, 0x74, 0x1b, 0x80, 0xf9, 0x9f, 0x62, 0xfb, 0xe8, 0x9c, 0xcb, 0x80, 0x1b, 0x4b, 0x59, + 0xab, 0x20, 0x28, 0xab, 0x82, 0x60, 0xfe, 0x35, 0x0b, 0x25, 0xd5, 0x1e, 0x2d, 0xcc, 0x86, 0x3d, + 0x8e, 0xda, 0x63, 0x1d, 0x47, 0xa5, 0xa8, 0x91, 0xd6, 0xb6, 0xdd, 0xa8, 0x33, 0x8d, 0x76, 0xa9, + 0xe3, 0x4b, 0xbb, 0x54, 0x56, 0x82, 0xdf, 0x9b, 0x0c, 0x3c, 0x8a, 0xec, 0x65, 0xed, 0xed, 0x25, + 0x28, 0xe0, 0x33, 0x9f, 0xdb, 0x1d, 0xe2, 0xaa, 0xd4, 0xcc, 0x5a, 0x79, 0x41, 0x68, 0x8a, 0x2c, + 0x88, 0x58, 0x70, 0x97, 0x88, 0x56, 0xed, 0x7c, 0x22, 0xbb, 0x5f, 0xc9, 0x2a, 0x28, 0x8a, 0xe5, + 0x7c, 0x82, 0xf6, 0x61, 0x5e, 0xb3, 0x75, 0x5e, 0xe6, 0xa6, 0xca, 0x4b, 0x49, 0x81, 0xe8, 0x9c, + 0x28, 0x9d, 0x98, 0x52, 0xa9, 0x33, 0x17, 0xe9, 0xc4, 0x94, 0xc6, 0x3a, 0x05, 0x5b, 0xeb, 0xcc, + 0x4f, 0xad, 0x13, 0x53, 0xaa, 0x9e, 0xcc, 0xdf, 0x1a, 0x00, 0x71, 0x22, 0x44, 0x59, 0x0c, 0x1c, + 0x1e, 0x95, 0x85, 0xf8, 0xfd, 0xcc, 0xae, 0x43, 0x05, 0x72, 0x1d, 0x12, 0x70, 0x1c, 0xf0, 0x4a, + 0x56, 0xfa, 0x16, 0x3e, 0xa6, 0xbb, 0x28, 0xbf, 0x32, 0x60, 0xe6, 0x80, 0x62, 0x8c, 0x5a, 0x30, + 0x23, 0xc6, 0xa7, 0x9e, 0xc8, 0x77, 0x26, 0xee, 0x08, 0x96, 0x14, 0x47, 0xdb, 0x90, 0xef, 0x74, + 0xfd, 0x9e, 0x4b, 0x71, 0xa0, 0x2b, 0x77, 0x0a, 0xa8, 0x08, 0xc2, 0xfc, 0xa3, 0x01, 0xe5, 0xb1, + 0xa2, 0x7b, 0xae, 0xd1, 0xdc, 0x85, 0x22, 0xa7, 0x18, 0x87, 0xb5, 0x90, 0x9d, 0x0a, 0x0c, 0x04, + 0x84, 0xae, 0x84, 0xcf, 0x32, 0x70, 0x4d, 0x85, 0x1b, 0x5b, 0xf8, 0xdb, 0xc3, 0xb0, 0x81, 0x05, + 0x8c, 0x3b, 0x41, 0x07, 0xdb, 0x89, 0x9e, 0x54, 0x0a, 0x89, 0x3b, 0xba, 0x37, 0x39, 0xb2, 0x2b, + 0x4c, 0xea, 0x90, 0xee, 0x25, 0x5a, 0x1a, 0x2d, 0xc3, 0x75, 0x76, 0xe2, 0x0f, 0xd4, 0xa0, 0xb7, + 0x7b, 0x84, 0x9c, 0x0c, 0x07, 0xd2, 0xad, 0xbc, 0x55, 0x16, 0x0c, 0x39, 0xee, 0xb7, 0x24, 0x19, + 0xdd, 0x85, 0x17, 0x39, 0xe1, 0x4e, 0xcf, 0x56, 0xdb, 0x94, 0x68, 0x3f, 0x76, 0x87, 0x0c, 0x03, + 0xae, 0xef, 0xf1, 0x0b, 0x92, 0xbb, 0x19, 0xe8, 0xb2, 0x6e, 0x0a, 0xd6, 0xa5, 0x42, 0xaa, 0xd5, + 0xcd, 0xca, 0x56, 0x37, 0x26, 0xa4, 0x9a, 0xde, 0x19, 0xe4, 0xb6, 0x88, 0x27, 0xef, 0x46, 0x9c, + 0x39, 0xe3, 0x4a, 0x99, 0xfb, 0x32, 0x5c, 0xeb, 0x0e, 0xfb, 0x4e, 0x60, 0x53, 0xec, 0xb8, 0xb2, + 0xdc, 0x33, 0xd2, 0xcb, 0x79, 0x49, 0xb5, 0x34, 0xd1, 0xfc, 0x41, 0x16, 0xca, 0x51, 0x3e, 0xd8, + 0x80, 0x04, 0x0c, 0xa3, 0x2d, 0x98, 0xa3, 0xb2, 0xf7, 0x6a, 0x13, 0xde, 0x98, 0x30, 0xd6, 0x52, + 0xd6, 0xd2, 0x18, 0x22, 0xbd, 0x32, 0xd8, 0xae, 0xad, 0x41, 0x95, 0x1d, 0x25, 0x45, 0xd4, 0x4d, + 0x7e, 0x19, 0xe6, 0xd4, 0x92, 0xac, 0x4b, 0x0c, 0x85, 0x2a, 0xe9, 0xa0, 0x53, 0xdb, 0x97, 0x1c, + 0x4b, 0x9f, 0x40, 0x5d, 0x28, 0x32, 0x4c, 0x4f, 0x31, 0xb5, 0x7b, 0xc4, 0x53, 0x8b, 0x65, 0xb1, + 0xb1, 0x91, 0xd6, 0xc6, 0x31, 0x67, 0x6b, 0xfb, 0x12, 0x6a, 0x8b, 0x78, 0xac, 0x15, 0x70, 0x7a, + 0x6e, 0x01, 0x8b, 0x08, 0xd5, 0x00, 0xca, 0x63, 0x6c, 0xb4, 0x00, 0xd9, 0x13, 0x7c, 0xae, 0x4b, + 0x54, 0xfc, 0x44, 0xad, 0xe4, 0xb6, 0x52, 0x6c, 0xd4, 0xd3, 0x1a, 0xa2, 0x13, 0xae, 0xd7, 0x9b, + 0x95, 0xcc, 0xd7, 0x0d, 0xf3, 0xf3, 0x0c, 0x54, 0xb4, 0x7d, 0xbb, 0xe1, 0xfb, 0xc6, 0x36, 0xe6, + 0x8e, 0xeb, 0x70, 0x07, 0x7d, 0x04, 0xb3, 0x8c, 0x3b, 0x9e, 0xba, 0x1e, 0xd7, 0x1a, 0xeb, 0x13, + 0x3a, 0x7c, 0x01, 0x50, 0x84, 0xd5, 0xc3, 0x96, 0x02, 0x15, 0x6d, 0x5f, 0xdd, 0x90, 0xab, 0xbd, + 0x2f, 0x94, 0x14, 0x88, 0x1e, 0x35, 0xaf, 0x03, 0xd2, 0xf3, 0x8b, 0x71, 0x8a, 0x9d, 0xbe, 0xba, + 0xde, 0x59, 0x19, 0xbb, 0x05, 0xc5, 0xd9, 0x97, 0x0c, 0x79, 0xc5, 0xd5, 0x69, 0x31, 0x79, 0x92, + 0xa7, 0x67, 0xa2, 0xd3, 0x98, 0xd2, 0xf8, 0xb4, 0xb9, 0x0b, 0xb3, 0xd2, 0x01, 0x54, 0x84, 0x5c, + 0x7b, 0xe7, 0xbd, 0x9d, 0xdd, 0x0f, 0x76, 0x16, 0xbe, 0x80, 0xca, 0x50, 0x6c, 0xde, 0x6f, 0xbe, + 0xdb, 0xb2, 0x9b, 0xef, 0xb6, 0x9a, 0xef, 0x2d, 0x18, 0x08, 0x60, 0xee, 0xfd, 0x76, 0xab, 0xdd, + 0x5a, 0x5b, 0xc8, 0xa0, 0x79, 0x28, 0xb4, 0x1e, 0xb4, 0x9a, 0xed, 0x83, 0xcd, 0x9d, 0x8d, 0x85, + 0xac, 0x78, 0x6c, 0xee, 0x6e, 0xef, 0x6d, 0xb5, 0x0e, 0x5a, 0x6b, 0x0b, 0x33, 0xe6, 0x4f, 0x0d, + 0x78, 0x71, 0x03, 0xf3, 0x91, 0x1a, 0x9e, 0xa4, 0x43, 0x3d, 0x8f, 0x08, 0x9a, 0xff, 0x36, 0xe0, + 0x56, 0x7b, 0xe0, 0x3a, 0x1c, 0xff, 0x5f, 0xd9, 0x85, 0x3e, 0x8c, 0x40, 0xf5, 0xa5, 0xce, 0x5e, + 0xa1, 0x53, 0x68, 0x68, 0xf5, 0x64, 0xfe, 0xc4, 0x80, 0x9b, 0xeb, 0x7e, 0xe0, 0x6e, 0xfb, 0x8c, + 0xf9, 0x81, 0xb7, 0xda, 0x23, 0x47, 0x6c, 0x22, 0x87, 0xdf, 0x87, 0xd2, 0x51, 0x8f, 0x1c, 0x69, + 0x77, 0xc3, 0x85, 0x71, 0x52, 0x7f, 0x8b, 0x02, 0x43, 0xfd, 0x66, 0xe6, 0x77, 0xa0, 0x72, 0xd1, + 0x24, 0xdd, 0x2d, 0x3f, 0x86, 0x1b, 0x7d, 0x45, 0xb7, 0x9f, 0x81, 0x5a, 0xd4, 0x8f, 0x75, 0x84, + 0xda, 0xbf, 0x0b, 0xd7, 0x55, 0x0d, 0x08, 0x62, 0x18, 0x0a, 0xf9, 0xed, 0x40, 0x2e, 0x36, 0x57, + 0xfe, 0x76, 0x20, 0x51, 0xe2, 0x8d, 0x5d, 0x34, 0x07, 0x59, 0x24, 0x25, 0x4b, 0xfe, 0x36, 0x7f, + 0x66, 0xc0, 0xcd, 0x55, 0x87, 0x77, 0xba, 0xb1, 0x15, 0x93, 0x65, 0xa4, 0x0d, 0x79, 0xaa, 0xce, + 0x87, 0x61, 0x49, 0xfd, 0x26, 0x79, 0xc1, 0x71, 0x2b, 0x82, 0x32, 0x7f, 0x94, 0x81, 0xca, 0x45, + 0xbb, 0x74, 0x5a, 0x3c, 0x28, 0x50, 0xfd, 0x3b, 0x7c, 0x49, 0xdc, 0x4c, 0xab, 0xf4, 0x49, 0xa0, + 0xb5, 0xf0, 0x87, 0x15, 0x63, 0x57, 0xbf, 0x6f, 0x40, 0x3e, 0xd2, 0xba, 0x0b, 0xc5, 0x44, 0x11, + 0x4c, 0x99, 0x12, 0x88, 0x4b, 0x2f, 0x31, 0x18, 0x33, 0x4f, 0x1b, 0x8c, 0xe6, 0x9f, 0x0d, 0xb8, + 0xb6, 0x81, 0xb9, 0x58, 0x5f, 0x27, 0x4a, 0xcf, 0x2e, 0x14, 0xaf, 0xfe, 0xa5, 0x08, 0x68, 0xfc, + 0x91, 0xe8, 0x25, 0x28, 0x0c, 0x1c, 0x0f, 0xdb, 0xe2, 0xad, 0x4e, 0x76, 0x86, 0x59, 0x2b, 0x2f, + 0x08, 0xfb, 0xfe, 0xa7, 0xf2, 0x9d, 0x47, 0x32, 0x39, 0x39, 0xc1, 0x81, 0x6e, 0xef, 0xf2, 0xf8, + 0x81, 0x20, 0x98, 0x3f, 0x36, 0xa0, 0x1c, 0x39, 0xa1, 0xa3, 0xba, 0x3f, 0xfa, 0x92, 0x6e, 0x4c, + 0xbb, 0x47, 0x27, 0x51, 0xd0, 0x6b, 0x50, 0x0e, 0xf0, 0x19, 0xb7, 0x13, 0xc6, 0xa8, 0xef, 0x0d, + 0xf3, 0x82, 0xbc, 0x17, 0x19, 0xb4, 0x0d, 0xc5, 0x03, 0x42, 0x7a, 0x6b, 0x98, 0x3b, 0x7e, 0x4f, + 0xbe, 0xcf, 0x09, 0x6d, 0xc9, 0x68, 0xe6, 0x05, 0x41, 0x46, 0xf2, 0x15, 0x28, 0x49, 0xe6, 0x29, + 0xa6, 0x2c, 0xdc, 0x55, 0x0b, 0x56, 0x51, 0xd0, 0x0e, 0x15, 0x49, 0x74, 0xf4, 0xb2, 0xce, 0x4e, + 0x34, 0xda, 0x0f, 0xb5, 0x98, 0xab, 0x74, 0xe8, 0xb2, 0xb9, 0x9b, 0xd6, 0xc1, 0x84, 0x79, 0x4a, + 0x57, 0xc2, 0x56, 0xdd, 0xa5, 0x7d, 0x57, 0xdb, 0x92, 0x57, 0x84, 0x4d, 0x57, 0x8c, 0x5b, 0xa9, + 0xd4, 0x0f, 0x4e, 0x49, 0xc7, 0x09, 0x4f, 0xe9, 0xe1, 0x2c, 0x38, 0x9b, 0x11, 0x63, 0xd3, 0x45, + 0x2b, 0x70, 0xab, 0x43, 0x28, 0xc5, 0x3d, 0x87, 0x63, 0x37, 0x21, 0xc3, 0x84, 0x90, 0x4a, 0xe2, + 0xcd, 0xf8, 0x40, 0x2c, 0xca, 0x36, 0xdd, 0xc6, 0x6f, 0x0c, 0x28, 0xb4, 0x42, 0xa3, 0xd1, 0xcf, + 0x0d, 0xc8, 0xe9, 0x9d, 0x04, 0x7d, 0x6d, 0xe2, 0xad, 0x4d, 0x06, 0xae, 0x7a, 0x3b, 0x94, 0x4b, + 0x7c, 0xa2, 0xad, 0x45, 0x1b, 0x8e, 0xf9, 0xe6, 0xf7, 0xfe, 0xf6, 0xcf, 0xcf, 0x32, 0x75, 0x73, + 0x39, 0xfc, 0x5c, 0xfc, 0x68, 0xe4, 0x12, 0xbc, 0xbd, 0xbc, 0xfc, 0xb8, 0xae, 0xe2, 0xc0, 0x56, + 0x94, 0x2a, 0xbc, 0x62, 0x2c, 0x37, 0x3e, 0xcf, 0x42, 0x51, 0x0d, 0x26, 0xf9, 0x16, 0x80, 0xfe, + 0xa5, 0x4a, 0x71, 0xe4, 0x6b, 0xc4, 0x37, 0xd3, 0x5a, 0x7c, 0xf9, 0x2a, 0x51, 0x9d, 0x6a, 0x42, + 0x9a, 0x1f, 0x4b, 0x87, 0x1e, 0xa2, 0x07, 0x4f, 0x75, 0x48, 0x09, 0xb0, 0xfa, 0xa3, 0x91, 0x99, + 0x5f, 0xeb, 0x3a, 0xac, 0xfb, 0x78, 0x9c, 0x18, 0x7f, 0x86, 0x79, 0x8c, 0xfe, 0x63, 0x00, 0xba, + 0xb8, 0x68, 0xa0, 0xfb, 0x93, 0xf5, 0xe9, 0x67, 0xe7, 0x31, 0x91, 0x1e, 0xfb, 0xd5, 0xe7, 0xe6, + 0xf1, 0xca, 0xe8, 0x02, 0xd3, 0xf8, 0xc5, 0x2c, 0xdc, 0x6a, 0xaa, 0x51, 0x78, 0xdf, 0x75, 0x29, + 0x66, 0x4c, 0xbc, 0x1f, 0xed, 0x73, 0x42, 0xc5, 0x92, 0xf9, 0x17, 0x03, 0x16, 0xc6, 0x37, 0x00, + 0xf4, 0x4e, 0xfa, 0x8f, 0x8e, 0x97, 0xae, 0x33, 0xd5, 0x6f, 0x4d, 0x0f, 0xa0, 0x3a, 0xa3, 0x79, + 0x4f, 0x86, 0xe9, 0x8e, 0xf9, 0xfa, 0xff, 0x08, 0x93, 0x98, 0x26, 0x6c, 0xe5, 0x38, 0x86, 0x58, + 0x31, 0x96, 0xa5, 0x43, 0xe3, 0x63, 0x2e, 0xbd, 0x43, 0x4f, 0xd8, 0x06, 0xd2, 0x3b, 0xf4, 0xa4, + 0x09, 0x3b, 0x81, 0x43, 0x47, 0x31, 0x84, 0x70, 0xe8, 0xef, 0x06, 0xe4, 0xf4, 0xdc, 0x48, 0xdf, + 0x56, 0x46, 0xa7, 0x65, 0xf5, 0xde, 0xc4, 0x72, 0xda, 0xea, 0x8f, 0xa4, 0xd5, 0x87, 0xe8, 0xe0, + 0x69, 0x56, 0xd7, 0x1f, 0x25, 0x26, 0x6d, 0x58, 0xa3, 0x49, 0x52, 0xb2, 0x42, 0x3d, 0xa5, 0x65, + 0xf5, 0x4f, 0x06, 0x2c, 0x77, 0x48, 0x3f, 0xa5, 0x71, 0xab, 0x37, 0x2c, 0x49, 0x8f, 0x3a, 0xee, + 0x1e, 0x25, 0x9c, 0xec, 0x19, 0x0f, 0xdb, 0x5a, 0xde, 0x23, 0x3d, 0x27, 0xf0, 0x6a, 0x84, 0x7a, + 0x75, 0x0f, 0x07, 0xf2, 0x6f, 0x91, 0xba, 0x62, 0x39, 0x03, 0x9f, 0x3d, 0xed, 0xaf, 0xb7, 0xb7, + 0xc6, 0xc8, 0xbf, 0xce, 0x64, 0xad, 0xd6, 0x83, 0xdf, 0x65, 0x6e, 0x6f, 0x28, 0xf4, 0x31, 0xe5, + 0xb5, 0xc3, 0x3b, 0x07, 0x98, 0xf1, 0xa3, 0x39, 0xa9, 0xe7, 0xee, 0x7f, 0x03, 0x00, 0x00, 0xff, + 0xff, 0xf0, 0x8a, 0x2f, 0x43, 0xe1, 0x1b, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/remoteworkers/v1test2/bots.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/remoteworkers/v1test2/bots.pb.go new file mode 100644 index 0000000..604399a --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/devtools/remoteworkers/v1test2/bots.pb.go @@ -0,0 +1,1015 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/devtools/remoteworkers/v1test2/bots.proto + +/* +Package remoteworkers is a generated protocol buffer package. + +It is generated from these files: + google/devtools/remoteworkers/v1test2/bots.proto + google/devtools/remoteworkers/v1test2/command.proto + google/devtools/remoteworkers/v1test2/tasks.proto + +It has these top-level messages: + BotSession + Lease + Worker + Device + AdminTemp + CreateBotSessionRequest + UpdateBotSessionRequest + PostBotEventTempRequest + CommandTask + CommandOutputs + CommandOverhead + FileMetadata + DirectoryMetadata + Digest + Directory + Task + TaskResult + GetTaskRequest + UpdateTaskResultRequest + AddTaskLogRequest + AddTaskLogResponse +*/ +package remoteworkers + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/any" +import google_protobuf2 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf3 "google.golang.org/genproto/protobuf/field_mask" +import google_protobuf4 "github.com/golang/protobuf/ptypes/timestamp" +import google_rpc "google.golang.org/genproto/googleapis/rpc/status" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// A coarse description of the status of the bot that the server uses to +// determine whether to assign the bot new leases. +type BotStatus int32 + +const ( + // Default value; do not use. + BotStatus_BOT_STATUS_UNSPECIFIED BotStatus = 0 + // The bot is healthy, and will accept leases as normal. + BotStatus_OK BotStatus = 1 + // The bot is unhealthy and will not accept new leases. For example, the bot + // may have detected that available disk space is too low. This situation may + // resolve itself, but will typically require human intervention. + BotStatus_UNHEALTHY BotStatus = 2 + // The bot has been asked to reboot the host. The bot will not accept new + // leases; once all leases are complete, this session will no longer be + // updated but the bot will be expected to establish a new session after the + // reboot completes. + BotStatus_HOST_REBOOTING BotStatus = 3 + // The bot has been asked to shut down. As with HOST_REBOOTING, once all + // leases are completed, the session will no longer be updated and the bot + // will not be expected to establish a new session. + // + // Bots are typically only asked to shut down if its host computer will be + // modified in some way, such as deleting a VM. + BotStatus_BOT_TERMINATING BotStatus = 4 +) + +var BotStatus_name = map[int32]string{ + 0: "BOT_STATUS_UNSPECIFIED", + 1: "OK", + 2: "UNHEALTHY", + 3: "HOST_REBOOTING", + 4: "BOT_TERMINATING", +} +var BotStatus_value = map[string]int32{ + "BOT_STATUS_UNSPECIFIED": 0, + "OK": 1, + "UNHEALTHY": 2, + "HOST_REBOOTING": 3, + "BOT_TERMINATING": 4, +} + +func (x BotStatus) String() string { + return proto.EnumName(BotStatus_name, int32(x)) +} +func (BotStatus) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +// The state of the lease. All leases start in the PENDING state. A bot can +// change PENDING to ACTIVE or (in the case of an error) COMPLETED, or from +// ACTIVE to COMPLETED. The server can change PENDING or ACTIVE to CANCELLED if +// it wants the bot to release its resources - for example, if the bot needs to +// be quarantined (it's producing bad output) or a cell needs to be drained. +type LeaseState int32 + +const ( + // Default value; do not use. + LeaseState_LEASE_STATE_UNSPECIFIED LeaseState = 0 + // Pending: the server expects the bot to accept this lease. This may only be + // set by the server. + LeaseState_PENDING LeaseState = 1 + // Active: the bot has accepted this lease. This may only be set by the bot. + LeaseState_ACTIVE LeaseState = 2 + // Completed: the bot is no longer leased. This may only be set by the bot, + // and the status field must be populated iff the state is COMPLETED. + LeaseState_COMPLETED LeaseState = 4 + // Cancelled: The bot should immediately release all resources associated with + // the lease. This may only be set by the server. + LeaseState_CANCELLED LeaseState = 5 +) + +var LeaseState_name = map[int32]string{ + 0: "LEASE_STATE_UNSPECIFIED", + 1: "PENDING", + 2: "ACTIVE", + 4: "COMPLETED", + 5: "CANCELLED", +} +var LeaseState_value = map[string]int32{ + "LEASE_STATE_UNSPECIFIED": 0, + "PENDING": 1, + "ACTIVE": 2, + "COMPLETED": 4, + "CANCELLED": 5, +} + +func (x LeaseState) String() string { + return proto.EnumName(LeaseState_name, int32(x)) +} +func (LeaseState) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +// Possible administration actions. +type AdminTemp_Command int32 + +const ( + // Illegal value. + AdminTemp_UNSPECIFIED AdminTemp_Command = 0 + // Download and run a new version of the bot. `arg` will be a resource + // accessible via `ByteStream.Read` to obtain the new bot code. + AdminTemp_BOT_UPDATE AdminTemp_Command = 1 + // Restart the bot without downloading a new version. `arg` will be a + // message to log. + AdminTemp_BOT_RESTART AdminTemp_Command = 2 + // Shut down the bot. `arg` will be a task resource name (similar to those + // in tasks.proto) that the bot can use to tell the server that it is + // terminating. + AdminTemp_BOT_TERMINATE AdminTemp_Command = 3 + // Restart the host computer. `arg` will be a message to log. + AdminTemp_HOST_RESTART AdminTemp_Command = 4 +) + +var AdminTemp_Command_name = map[int32]string{ + 0: "UNSPECIFIED", + 1: "BOT_UPDATE", + 2: "BOT_RESTART", + 3: "BOT_TERMINATE", + 4: "HOST_RESTART", +} +var AdminTemp_Command_value = map[string]int32{ + "UNSPECIFIED": 0, + "BOT_UPDATE": 1, + "BOT_RESTART": 2, + "BOT_TERMINATE": 3, + "HOST_RESTART": 4, +} + +func (x AdminTemp_Command) String() string { + return proto.EnumName(AdminTemp_Command_name, int32(x)) +} +func (AdminTemp_Command) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{4, 0} } + +// Types of bot events. +type PostBotEventTempRequest_Type int32 + +const ( + // Illegal value. + PostBotEventTempRequest_UNSPECIFIED PostBotEventTempRequest_Type = 0 + // Interesting but harmless event. + PostBotEventTempRequest_INFO PostBotEventTempRequest_Type = 1 + // Error condition. + PostBotEventTempRequest_ERROR PostBotEventTempRequest_Type = 2 +) + +var PostBotEventTempRequest_Type_name = map[int32]string{ + 0: "UNSPECIFIED", + 1: "INFO", + 2: "ERROR", +} +var PostBotEventTempRequest_Type_value = map[string]int32{ + "UNSPECIFIED": 0, + "INFO": 1, + "ERROR": 2, +} + +func (x PostBotEventTempRequest_Type) String() string { + return proto.EnumName(PostBotEventTempRequest_Type_name, int32(x)) +} +func (PostBotEventTempRequest_Type) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{7, 0} +} + +// A bot session represents the state of a bot while in continuous contact with +// the server for a period of time. The session includes information about the +// worker - that is, the *worker* (the physical or virtual hardware) is +// considered to be a property of the bot (the software agent running on that +// hardware), which is the reverse of real life, but more natural from the point +// of the view of this API, which communicates solely with the bot and not +// directly with the underlying worker. +type BotSession struct { + // The bot session name, as selected by the server. Output only during a call + // to CreateBotSession. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // A unique bot ID within the farm used to persistently identify this bot over + // time (i.e., over multiple sessions). This ID must be unique within a + // farm. Typically, the bot ID will be the same as the name of the primary + // device in the worker (e.g., what you'd get from typing `uname -n` on *nix), + // but this is not required since a single device may allow multiple bots to + // run on it, each with access to different resources. What is important is + // that this ID is meaningful to humans, who might need to hunt a physical + // machine down to fix it. + // + // When CreateBotSession is successfully called with a bot_id, all prior + // sessions with the same ID are invalidated. If a bot attempts to update an + // invalid session, the server must reject that request, and may also + // quarantine the other bot with the same bot IDs (ie, stop sending it new + // leases and alert an admin). + BotId string `protobuf:"bytes,2,opt,name=bot_id,json=botId" json:"bot_id,omitempty"` + // The status of the bot. This must be populated in every call to + // UpdateBotSession. + Status BotStatus `protobuf:"varint,3,opt,name=status,enum=google.devtools.remoteworkers.v1test2.BotStatus" json:"status,omitempty"` + // A description of the worker hosting this bot. The Worker message is used + // here in the Status context (see Worker for more information). If multiple + // bots are running on the worker, this field should only describe the + // resources accessible from this bot. + // + // During the call to CreateBotSession, the server may make arbitrary changes + // to the worker's `server_properties` field (see that field for more + // information). Otherwise, this field is input-only. + Worker *Worker `protobuf:"bytes,4,opt,name=worker" json:"worker,omitempty"` + // A list of all leases that are a part of this session. See the Lease message + // for details. + Leases []*Lease `protobuf:"bytes,5,rep,name=leases" json:"leases,omitempty"` + // The time at which this bot session will expire, unless the bot calls + // UpdateBotSession again. Output only. + ExpireTime *google_protobuf4.Timestamp `protobuf:"bytes,6,opt,name=expire_time,json=expireTime" json:"expire_time,omitempty"` + // The version of the bot code currently running. The server may use this + // information to issue an admin action to tell the bot to update itself. + Version string `protobuf:"bytes,7,opt,name=version" json:"version,omitempty"` +} + +func (m *BotSession) Reset() { *m = BotSession{} } +func (m *BotSession) String() string { return proto.CompactTextString(m) } +func (*BotSession) ProtoMessage() {} +func (*BotSession) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *BotSession) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *BotSession) GetBotId() string { + if m != nil { + return m.BotId + } + return "" +} + +func (m *BotSession) GetStatus() BotStatus { + if m != nil { + return m.Status + } + return BotStatus_BOT_STATUS_UNSPECIFIED +} + +func (m *BotSession) GetWorker() *Worker { + if m != nil { + return m.Worker + } + return nil +} + +func (m *BotSession) GetLeases() []*Lease { + if m != nil { + return m.Leases + } + return nil +} + +func (m *BotSession) GetExpireTime() *google_protobuf4.Timestamp { + if m != nil { + return m.ExpireTime + } + return nil +} + +func (m *BotSession) GetVersion() string { + if m != nil { + return m.Version + } + return "" +} + +// A Lease is a lease that the scheduler has assigned to this bot. If the bot +// notices (by UpdateBotSession) that it has any leases in the PENDING state, it +// should call UpdateBotSession to put the leases into the ACTIVE state and +// start executing their assignments. +// +// All fields in this message are output-only, *except* the `state` and `status` +// fields. Note that repeated fields can only be updated as a unit, so on every +// update the bot must provide an update for *all* the leases the server expects +// it to report on. +// +// The scheduler *should* ensure that all leases scheduled to a bot can actually +// be accepted, but race conditions may occur. In such cases, the bot should +// attempt to accept the leases in the order they are listed by the server, to +// allow the server to control priorities. +// +// The server will remove COMPLETED leases from time to time, after which the +// bot shouldn't report on them any more (the server will ignore superfluous +// COMPLETED records). +type Lease struct { + // The assignment, which is typically a resource that can be accessed through + // some other services. The assignment must be meaningful to the bot based + // solely on this name, either because the bot only understands one type of + // assignment (e.g., tasks served through the Tasks interface) or through some + // implementation-defined schema. + // + // For example, if the worker is executing a Task as defined by the Tasks + // interface, this field might be projects/{projectid}/tasks/{taskid}. + // However, it the worker is being assigned pull from a *queue* of tasks, the + // resource would be the name of the queue, something like + // projects/{projectid}/locations/{locationid}/queues/{queueid}. That queue + // may then provide the bot with tasks through another interface, which the + // bot then processes through the [Tasks] + // [google.devtools.remoteworkers.v1test2.Tasks] interface. + // + // Note that the assignment may be a [full resource name] + // [https://cloud.google.com/apis/design/resource_names#full_resource_name] if + // it should be accessed through an endpoint that is not already known to the + // bot. + Assignment string `protobuf:"bytes,1,opt,name=assignment" json:"assignment,omitempty"` + // The state of the lease. See LeaseState for more information. + State LeaseState `protobuf:"varint,2,opt,name=state,enum=google.devtools.remoteworkers.v1test2.LeaseState" json:"state,omitempty"` + // The final status of the lease (should be populated by the bot if the state + // is completed). This is the status of the lease, not of any task represented + // by the lease. For example, if the bot could not accept the lease because it + // asked for some resource the bot didn't have, this status will be + // FAILED_PRECONDITION. But if the assignment in the lease didn't execute + // correctly, this field will be `OK` while the failure of the assignment must + // be tracked elsewhere (e.g., through the Tasks interface). + Status *google_rpc.Status `protobuf:"bytes,3,opt,name=status" json:"status,omitempty"` + // The requirements that are being claimed by this lease. This field may be + // omitted by the server if the lease is not pending. + Requirements *Worker `protobuf:"bytes,4,opt,name=requirements" json:"requirements,omitempty"` + // The time at which this lease expires. The server *may* extend this over + // time, but due to race conditions, the bot is not *required* to respect any + // expiry date except the first one. + ExpireTime *google_protobuf4.Timestamp `protobuf:"bytes,5,opt,name=expire_time,json=expireTime" json:"expire_time,omitempty"` + // While the `assignment` field is a resource name that allows the bot to + // get the actual assignment, the server can also optionally include the + // assignment itself inline in order to save a round trip to the server. + // + // This doesn't necessarily need to be the resource pointed to by + // `assignment`. For example, if the assignment is a task, this field could + // be task.description, not the entire task, since that's all the bot needs + // to know to get started. As with `assignment` itself, all that's necessary + // is that the bot knows how to handle the type of message received here. + // + // This field may be omitted by the server if the lease is not in the + // `PENDING` state. + InlineAssignment *google_protobuf1.Any `protobuf:"bytes,6,opt,name=inline_assignment,json=inlineAssignment" json:"inline_assignment,omitempty"` +} + +func (m *Lease) Reset() { *m = Lease{} } +func (m *Lease) String() string { return proto.CompactTextString(m) } +func (*Lease) ProtoMessage() {} +func (*Lease) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *Lease) GetAssignment() string { + if m != nil { + return m.Assignment + } + return "" +} + +func (m *Lease) GetState() LeaseState { + if m != nil { + return m.State + } + return LeaseState_LEASE_STATE_UNSPECIFIED +} + +func (m *Lease) GetStatus() *google_rpc.Status { + if m != nil { + return m.Status + } + return nil +} + +func (m *Lease) GetRequirements() *Worker { + if m != nil { + return m.Requirements + } + return nil +} + +func (m *Lease) GetExpireTime() *google_protobuf4.Timestamp { + if m != nil { + return m.ExpireTime + } + return nil +} + +func (m *Lease) GetInlineAssignment() *google_protobuf1.Any { + if m != nil { + return m.InlineAssignment + } + return nil +} + +// Describes a worker, which is a list of one or more devices and the +// connections between them. A device could be a computer, a phone, or even an +// accelerator like a GPU; it's up to the farm administrator to decide how to +// model their farm. For example, if a farm only has one type of GPU, the GPU +// could be modelled as a "has_gpu" property on its host computer; if it has +// many subproperties itself, it might be better to model it as a separate +// device. +// +// The first device in the worker is the "primary device" - that is, the device +// running a bot and which is responsible for actually executing commands. All +// other devices are considered to be attached devices, and must be controllable +// by the primary device. +// +// This message (and all its submessages) can be used in two contexts: +// +// * Status: sent by the bot to report the current capabilities of the device to +// allow reservation matching. +// * Request: sent by a client to request a device with certain capabilities in +// a reservation. +// +// Several of the fields in this message have different semantics depending on +// which of which of these contexts it is used. These semantics are described +// below. +// +// Several messages in Worker and its submessages have the concept of keys and +// values, such as `Worker.Property` and `Device.Property`. All keys are simple +// strings, but certain keys are "standard" keys and should be broadly supported +// across farms and implementations; these are listed below each relevant +// message. Bot implementations or farm admins may add *additional* keys, but +// these SHOULD all begin with an underscore so they do not conflict with +// standard keys that may be added in the future. +// +// Keys are not context sensitive. +// +// See http://goo.gl/NurY8g for more information on the Worker message. +type Worker struct { + // A list of devices; the first device is the primary device. See the `Device` + // message for more information. + Devices []*Device `protobuf:"bytes,1,rep,name=devices" json:"devices,omitempty"` + // A worker may contain "global" properties. For example, certain machines + // might be reserved for certain types of jobs, like short-running compilation + // versus long-running integration tests. This property is known as a "pool" + // and is not related to any one device within the worker; rather, it applies + // to the worker as a whole. + // + // The behaviour of repeated keys is identical to that of Device.Property. + Properties []*Worker_Property `protobuf:"bytes,2,rep,name=properties" json:"properties,omitempty"` +} + +func (m *Worker) Reset() { *m = Worker{} } +func (m *Worker) String() string { return proto.CompactTextString(m) } +func (*Worker) ProtoMessage() {} +func (*Worker) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *Worker) GetDevices() []*Device { + if m != nil { + return m.Devices + } + return nil +} + +func (m *Worker) GetProperties() []*Worker_Property { + if m != nil { + return m.Properties + } + return nil +} + +// A global property; see the `properties` field for more information. +type Worker_Property struct { + // For general information on keys, see the documentation to `Worker`. + // + // The current set of standard keys are: + // + // * pool: different workers can be reserved for different purposes. For + // example, an admin might want to segregate long-running integration tests + // from short-running unit tests, so unit tests will always get some + // throughput. To support this, the server can assign different values for + // `pool` (such as "itest" and "utest") to different workers, and then have + // jobs request workers from those pools. + Key string `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + // The property's value. + Value string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` +} + +func (m *Worker_Property) Reset() { *m = Worker_Property{} } +func (m *Worker_Property) String() string { return proto.CompactTextString(m) } +func (*Worker_Property) ProtoMessage() {} +func (*Worker_Property) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} } + +func (m *Worker_Property) GetKey() string { + if m != nil { + return m.Key + } + return "" +} + +func (m *Worker_Property) GetValue() string { + if m != nil { + return m.Value + } + return "" +} + +// Any device, including computers, phones, accelerators (e.g. GPUs), etc. All +// names must be unique. +type Device struct { + // The handle can be thought of as the "name" of the device, and must be + // unique within a Worker. + // + // In the Status context, the handle should be some human-understandable name, + // perhaps corresponding to a label physically written on the device to make + // it easy to locate. In the Request context, the name should be the + // *logical* name expected by the task. The bot is responsible for mapping the + // logical name expected by the task to a machine-readable name that the task + // can actually use, such as a USB address. The method by which this mapping + // is communicated to the task is not covered in this API. + Handle string `protobuf:"bytes,1,opt,name=handle" json:"handle,omitempty"` + // Properties of this device that don't change based on the tasks that are + // running on it, e.g. OS, CPU architecture, etc. + // + // Keys may be repeated, and have the following interpretation: + // + // * Status context: the device can support *any* the listed values. For + // example, an "ISA" property might include "x86", "x86-64" and "sse4". + // + // * Request context: the device *must* support *all* of the listed values. + Properties []*Device_Property `protobuf:"bytes,2,rep,name=properties" json:"properties,omitempty"` +} + +func (m *Device) Reset() { *m = Device{} } +func (m *Device) String() string { return proto.CompactTextString(m) } +func (*Device) ProtoMessage() {} +func (*Device) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *Device) GetHandle() string { + if m != nil { + return m.Handle + } + return "" +} + +func (m *Device) GetProperties() []*Device_Property { + if m != nil { + return m.Properties + } + return nil +} + +// A device property; see `properties` for more information. +type Device_Property struct { + // For general information on keys, see the documentation to `Worker`. + // + // The current set of standard keys are: + // + // * os: a human-readable description of the OS. Examples include `linux`, + // `ubuntu` and `ubuntu 14.04` (note that a bot may advertise itself as more + // than one). This will be replaced in the future by more well-structured + // keys and values to represent OS variants. + // + // * has-docker: "true" if the bot has Docker installed. This will be + // replaced in the future by a more structured message for Docker support. + Key string `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + // The property's value. + Value string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` +} + +func (m *Device_Property) Reset() { *m = Device_Property{} } +func (m *Device_Property) String() string { return proto.CompactTextString(m) } +func (*Device_Property) ProtoMessage() {} +func (*Device_Property) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3, 0} } + +func (m *Device_Property) GetKey() string { + if m != nil { + return m.Key + } + return "" +} + +func (m *Device_Property) GetValue() string { + if m != nil { + return m.Value + } + return "" +} + +// AdminTemp is a prelimiary set of administration tasks. It's called "Temp" +// because we do not yet know the best way to represent admin tasks; it's +// possible that this will be entirely replaced in later versions of this API. +// If this message proves to be sufficient, it will be renamed in the alpha or +// beta release of this API. +// +// This message (suitably marshalled into a protobuf.Any) can be used as the +// inline_assignment field in a lease; the lease assignment field should simply +// be `"admin"` in these cases. +// +// This message is heavily based on Swarming administration tasks from the LUCI +// project (http://github.com/luci/luci-py/appengine/swarming). +type AdminTemp struct { + // The admin action; see `Command` for legal values. + Command AdminTemp_Command `protobuf:"varint,1,opt,name=command,enum=google.devtools.remoteworkers.v1test2.AdminTemp_Command" json:"command,omitempty"` + // The argument to the admin action; see `Command` for semantics. + Arg string `protobuf:"bytes,2,opt,name=arg" json:"arg,omitempty"` +} + +func (m *AdminTemp) Reset() { *m = AdminTemp{} } +func (m *AdminTemp) String() string { return proto.CompactTextString(m) } +func (*AdminTemp) ProtoMessage() {} +func (*AdminTemp) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *AdminTemp) GetCommand() AdminTemp_Command { + if m != nil { + return m.Command + } + return AdminTemp_UNSPECIFIED +} + +func (m *AdminTemp) GetArg() string { + if m != nil { + return m.Arg + } + return "" +} + +// Request message for CreateBotSession. +type CreateBotSessionRequest struct { + // The farm resource. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The bot session to create. Server-assigned fields like name must be unset. + BotSession *BotSession `protobuf:"bytes,2,opt,name=bot_session,json=botSession" json:"bot_session,omitempty"` +} + +func (m *CreateBotSessionRequest) Reset() { *m = CreateBotSessionRequest{} } +func (m *CreateBotSessionRequest) String() string { return proto.CompactTextString(m) } +func (*CreateBotSessionRequest) ProtoMessage() {} +func (*CreateBotSessionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *CreateBotSessionRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateBotSessionRequest) GetBotSession() *BotSession { + if m != nil { + return m.BotSession + } + return nil +} + +// Request message for UpdateBotSession. +type UpdateBotSessionRequest struct { + // The bot session name. Must match bot_session.name. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The bot session resource to update. + BotSession *BotSession `protobuf:"bytes,2,opt,name=bot_session,json=botSession" json:"bot_session,omitempty"` + // The fields on the bot that should be updated. See the BotSession resource + // for which fields are updatable by which caller. + UpdateMask *google_protobuf3.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateBotSessionRequest) Reset() { *m = UpdateBotSessionRequest{} } +func (m *UpdateBotSessionRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateBotSessionRequest) ProtoMessage() {} +func (*UpdateBotSessionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *UpdateBotSessionRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *UpdateBotSessionRequest) GetBotSession() *BotSession { + if m != nil { + return m.BotSession + } + return nil +} + +func (m *UpdateBotSessionRequest) GetUpdateMask() *google_protobuf3.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +// Request message for PostBotEventTemp +type PostBotEventTempRequest struct { + // The bot session name. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The type of bot event. + Type PostBotEventTempRequest_Type `protobuf:"varint,2,opt,name=type,enum=google.devtools.remoteworkers.v1test2.PostBotEventTempRequest_Type" json:"type,omitempty"` + // A human-readable message. + Msg string `protobuf:"bytes,3,opt,name=msg" json:"msg,omitempty"` +} + +func (m *PostBotEventTempRequest) Reset() { *m = PostBotEventTempRequest{} } +func (m *PostBotEventTempRequest) String() string { return proto.CompactTextString(m) } +func (*PostBotEventTempRequest) ProtoMessage() {} +func (*PostBotEventTempRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *PostBotEventTempRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *PostBotEventTempRequest) GetType() PostBotEventTempRequest_Type { + if m != nil { + return m.Type + } + return PostBotEventTempRequest_UNSPECIFIED +} + +func (m *PostBotEventTempRequest) GetMsg() string { + if m != nil { + return m.Msg + } + return "" +} + +func init() { + proto.RegisterType((*BotSession)(nil), "google.devtools.remoteworkers.v1test2.BotSession") + proto.RegisterType((*Lease)(nil), "google.devtools.remoteworkers.v1test2.Lease") + proto.RegisterType((*Worker)(nil), "google.devtools.remoteworkers.v1test2.Worker") + proto.RegisterType((*Worker_Property)(nil), "google.devtools.remoteworkers.v1test2.Worker.Property") + proto.RegisterType((*Device)(nil), "google.devtools.remoteworkers.v1test2.Device") + proto.RegisterType((*Device_Property)(nil), "google.devtools.remoteworkers.v1test2.Device.Property") + proto.RegisterType((*AdminTemp)(nil), "google.devtools.remoteworkers.v1test2.AdminTemp") + proto.RegisterType((*CreateBotSessionRequest)(nil), "google.devtools.remoteworkers.v1test2.CreateBotSessionRequest") + proto.RegisterType((*UpdateBotSessionRequest)(nil), "google.devtools.remoteworkers.v1test2.UpdateBotSessionRequest") + proto.RegisterType((*PostBotEventTempRequest)(nil), "google.devtools.remoteworkers.v1test2.PostBotEventTempRequest") + proto.RegisterEnum("google.devtools.remoteworkers.v1test2.BotStatus", BotStatus_name, BotStatus_value) + proto.RegisterEnum("google.devtools.remoteworkers.v1test2.LeaseState", LeaseState_name, LeaseState_value) + proto.RegisterEnum("google.devtools.remoteworkers.v1test2.AdminTemp_Command", AdminTemp_Command_name, AdminTemp_Command_value) + proto.RegisterEnum("google.devtools.remoteworkers.v1test2.PostBotEventTempRequest_Type", PostBotEventTempRequest_Type_name, PostBotEventTempRequest_Type_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for Bots service + +type BotsClient interface { + // CreateBotSession is called when the bot first joins the farm, and + // establishes a session ID to ensure that multiple machines do not register + // using the same name accidentally. + CreateBotSession(ctx context.Context, in *CreateBotSessionRequest, opts ...grpc.CallOption) (*BotSession, error) + // UpdateBotSession must be called periodically by the bot (on a schedule + // determined by the server) to let the server know about its status, and to + // pick up new lease requests from the server. + UpdateBotSession(ctx context.Context, in *UpdateBotSessionRequest, opts ...grpc.CallOption) (*BotSession, error) + // PostBotEventTemp may be called by the bot to indicate that some exceptional + // event has occurred. This method is subject to change or removal in future + // revisions of this API; we may simply want to replace it with StackDriver or + // some other common interface. + PostBotEventTemp(ctx context.Context, in *PostBotEventTempRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) +} + +type botsClient struct { + cc *grpc.ClientConn +} + +func NewBotsClient(cc *grpc.ClientConn) BotsClient { + return &botsClient{cc} +} + +func (c *botsClient) CreateBotSession(ctx context.Context, in *CreateBotSessionRequest, opts ...grpc.CallOption) (*BotSession, error) { + out := new(BotSession) + err := grpc.Invoke(ctx, "/google.devtools.remoteworkers.v1test2.Bots/CreateBotSession", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *botsClient) UpdateBotSession(ctx context.Context, in *UpdateBotSessionRequest, opts ...grpc.CallOption) (*BotSession, error) { + out := new(BotSession) + err := grpc.Invoke(ctx, "/google.devtools.remoteworkers.v1test2.Bots/UpdateBotSession", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *botsClient) PostBotEventTemp(ctx context.Context, in *PostBotEventTempRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) { + out := new(google_protobuf2.Empty) + err := grpc.Invoke(ctx, "/google.devtools.remoteworkers.v1test2.Bots/PostBotEventTemp", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Bots service + +type BotsServer interface { + // CreateBotSession is called when the bot first joins the farm, and + // establishes a session ID to ensure that multiple machines do not register + // using the same name accidentally. + CreateBotSession(context.Context, *CreateBotSessionRequest) (*BotSession, error) + // UpdateBotSession must be called periodically by the bot (on a schedule + // determined by the server) to let the server know about its status, and to + // pick up new lease requests from the server. + UpdateBotSession(context.Context, *UpdateBotSessionRequest) (*BotSession, error) + // PostBotEventTemp may be called by the bot to indicate that some exceptional + // event has occurred. This method is subject to change or removal in future + // revisions of this API; we may simply want to replace it with StackDriver or + // some other common interface. + PostBotEventTemp(context.Context, *PostBotEventTempRequest) (*google_protobuf2.Empty, error) +} + +func RegisterBotsServer(s *grpc.Server, srv BotsServer) { + s.RegisterService(&_Bots_serviceDesc, srv) +} + +func _Bots_CreateBotSession_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateBotSessionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BotsServer).CreateBotSession(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.remoteworkers.v1test2.Bots/CreateBotSession", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BotsServer).CreateBotSession(ctx, req.(*CreateBotSessionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Bots_UpdateBotSession_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateBotSessionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BotsServer).UpdateBotSession(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.remoteworkers.v1test2.Bots/UpdateBotSession", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BotsServer).UpdateBotSession(ctx, req.(*UpdateBotSessionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Bots_PostBotEventTemp_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PostBotEventTempRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BotsServer).PostBotEventTemp(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.remoteworkers.v1test2.Bots/PostBotEventTemp", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BotsServer).PostBotEventTemp(ctx, req.(*PostBotEventTempRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Bots_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.devtools.remoteworkers.v1test2.Bots", + HandlerType: (*BotsServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateBotSession", + Handler: _Bots_CreateBotSession_Handler, + }, + { + MethodName: "UpdateBotSession", + Handler: _Bots_UpdateBotSession_Handler, + }, + { + MethodName: "PostBotEventTemp", + Handler: _Bots_PostBotEventTemp_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/devtools/remoteworkers/v1test2/bots.proto", +} + +func init() { proto.RegisterFile("google/devtools/remoteworkers/v1test2/bots.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 1083 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xdd, 0x8e, 0xdb, 0x44, + 0x14, 0xc6, 0xd9, 0xc4, 0x69, 0x4e, 0xda, 0xad, 0x3b, 0x94, 0x6e, 0x48, 0x11, 0x44, 0x96, 0x90, + 0x56, 0x51, 0xb1, 0xdb, 0x20, 0x10, 0x6a, 0x55, 0x24, 0x27, 0xf1, 0xee, 0x46, 0x64, 0x93, 0x30, + 0xf1, 0xb6, 0x82, 0x9b, 0xd4, 0xd9, 0x4c, 0x83, 0xb5, 0xb1, 0xc7, 0xf5, 0x4c, 0x02, 0x11, 0xea, + 0x0d, 0x12, 0x4f, 0xc0, 0x13, 0x70, 0xc7, 0x05, 0x8f, 0x80, 0xb8, 0xe4, 0x05, 0x7a, 0xcd, 0x1d, + 0x5c, 0xf3, 0x0a, 0x68, 0xc6, 0x76, 0xfe, 0xb6, 0x4b, 0xb3, 0x14, 0xee, 0xe6, 0xe7, 0x7c, 0xdf, + 0xf9, 0xfc, 0xcd, 0x39, 0xe3, 0x81, 0xbb, 0x63, 0x4a, 0xc7, 0x13, 0x62, 0x8e, 0xc8, 0x8c, 0x53, + 0x3a, 0x61, 0x66, 0x44, 0x7c, 0xca, 0xc9, 0xd7, 0x34, 0x3a, 0x23, 0x11, 0x33, 0x67, 0xf7, 0x38, + 0x61, 0xbc, 0x66, 0x0e, 0x29, 0x67, 0x46, 0x18, 0x51, 0x4e, 0xd1, 0xfb, 0x31, 0xc2, 0x48, 0x11, + 0xc6, 0x1a, 0xc2, 0x48, 0x10, 0xe5, 0x77, 0x12, 0x62, 0x37, 0xf4, 0x4c, 0x37, 0x08, 0x28, 0x77, + 0xb9, 0x47, 0x83, 0x84, 0xa4, 0xfc, 0x76, 0xb2, 0x2b, 0x67, 0xc3, 0xe9, 0x53, 0xd3, 0x0d, 0xe6, + 0xc9, 0xd6, 0xed, 0xcd, 0x2d, 0xe2, 0x87, 0x3c, 0xdd, 0xac, 0x6c, 0x6e, 0x3e, 0xf5, 0xc8, 0x64, + 0x34, 0xf0, 0x5d, 0x76, 0x96, 0x44, 0xbc, 0xb7, 0x19, 0xc1, 0x3d, 0x9f, 0x30, 0xee, 0xfa, 0x61, + 0x12, 0xb0, 0x97, 0x04, 0x44, 0xe1, 0xa9, 0xc9, 0xb8, 0xcb, 0xa7, 0x89, 0x26, 0xfd, 0xcf, 0x0c, + 0x40, 0x9d, 0xf2, 0x3e, 0x61, 0xcc, 0xa3, 0x01, 0x42, 0x90, 0x0d, 0x5c, 0x9f, 0x94, 0x94, 0x8a, + 0xb2, 0x5f, 0xc0, 0x72, 0x8c, 0xde, 0x02, 0x75, 0x48, 0xf9, 0xc0, 0x1b, 0x95, 0x32, 0x72, 0x35, + 0x37, 0xa4, 0xbc, 0x35, 0x42, 0x47, 0xa0, 0xc6, 0x4c, 0xa5, 0x9d, 0x8a, 0xb2, 0xbf, 0x5b, 0xbb, + 0x6b, 0x6c, 0xe5, 0x91, 0x21, 0xb2, 0x49, 0x1c, 0x4e, 0xf0, 0xc8, 0x06, 0x35, 0x0e, 0x2a, 0x65, + 0x2b, 0xca, 0x7e, 0xb1, 0xf6, 0xc1, 0x96, 0x4c, 0x8f, 0xe5, 0x1c, 0x27, 0x60, 0xd4, 0x04, 0x75, + 0x42, 0x5c, 0x46, 0x58, 0x29, 0x57, 0xd9, 0xd9, 0x2f, 0xd6, 0xee, 0x6c, 0x49, 0xd3, 0x16, 0x20, + 0x9c, 0x60, 0xd1, 0x03, 0x28, 0x92, 0x6f, 0x42, 0x2f, 0x22, 0x03, 0xe1, 0x61, 0x49, 0x95, 0x8a, + 0xca, 0x29, 0x55, 0x6a, 0xb0, 0xe1, 0xa4, 0x06, 0x63, 0x88, 0xc3, 0xc5, 0x02, 0x2a, 0x41, 0x7e, + 0x46, 0x22, 0xe1, 0x64, 0x29, 0x2f, 0xbd, 0x4a, 0xa7, 0xfa, 0x5f, 0x19, 0xc8, 0xc9, 0x44, 0xe8, + 0x5d, 0x00, 0x97, 0x31, 0x6f, 0x1c, 0xf8, 0x24, 0xe0, 0x89, 0xd1, 0x2b, 0x2b, 0xe8, 0x10, 0x72, + 0xc2, 0x17, 0x22, 0xdd, 0xde, 0xad, 0xdd, 0xbb, 0xcc, 0x57, 0x08, 0x63, 0x09, 0x8e, 0xf1, 0xa8, + 0xba, 0x76, 0x40, 0xc5, 0x1a, 0x4a, 0x99, 0xa2, 0xf0, 0xd4, 0xd8, 0x38, 0x82, 0xcf, 0xe1, 0x6a, + 0x44, 0x9e, 0x4d, 0xbd, 0x88, 0x08, 0x0d, 0xec, 0xdf, 0x1d, 0xc4, 0x1a, 0xc5, 0xa6, 0x91, 0xb9, + 0x4b, 0x19, 0x69, 0xc1, 0x0d, 0x2f, 0x98, 0x78, 0x01, 0x19, 0xac, 0x78, 0x15, 0x9f, 0xc5, 0xcd, + 0x73, 0x14, 0x56, 0x30, 0xc7, 0x5a, 0x1c, 0x6e, 0x2d, 0xa2, 0xf5, 0xdf, 0x15, 0x50, 0x63, 0x61, + 0xe8, 0x10, 0xf2, 0x23, 0x32, 0xf3, 0x4e, 0x09, 0x2b, 0x29, 0xb2, 0x34, 0xb6, 0xfd, 0xb0, 0xa6, + 0x44, 0xe1, 0x14, 0x8d, 0x1e, 0x01, 0x84, 0x11, 0x0d, 0x49, 0xc4, 0x3d, 0xc2, 0x4a, 0x19, 0xc9, + 0xf5, 0xf1, 0xa5, 0x4c, 0x32, 0x7a, 0x31, 0x7e, 0x8e, 0x57, 0x98, 0xca, 0x35, 0xb8, 0x92, 0xae, + 0x23, 0x0d, 0x76, 0xce, 0xc8, 0x3c, 0x29, 0x0c, 0x31, 0x44, 0x37, 0x21, 0x37, 0x73, 0x27, 0x53, + 0x92, 0xf6, 0x9f, 0x9c, 0xe8, 0x3f, 0x2b, 0xa0, 0xc6, 0xfa, 0xd0, 0x2d, 0x50, 0xbf, 0x72, 0x83, + 0xd1, 0x24, 0xed, 0xdb, 0x64, 0xf6, 0x5a, 0x72, 0x63, 0xea, 0xff, 0x4e, 0xee, 0x0b, 0x05, 0x0a, + 0xd6, 0xc8, 0xf7, 0x02, 0x87, 0xf8, 0x21, 0xc2, 0x90, 0x3f, 0xa5, 0xbe, 0xef, 0x06, 0x23, 0x89, + 0xdc, 0xad, 0x7d, 0xb2, 0xa5, 0xac, 0x05, 0x85, 0xd1, 0x88, 0xf1, 0x38, 0x25, 0x12, 0x4a, 0xdc, + 0x68, 0x9c, 0x64, 0x15, 0x43, 0xfd, 0x09, 0xe4, 0x93, 0x28, 0x74, 0x1d, 0x8a, 0x27, 0x9d, 0x7e, + 0xcf, 0x6e, 0xb4, 0x0e, 0x5a, 0x76, 0x53, 0x7b, 0x03, 0xed, 0x02, 0xd4, 0xbb, 0xce, 0xe0, 0xa4, + 0xd7, 0xb4, 0x1c, 0x5b, 0x53, 0x44, 0x80, 0x98, 0x63, 0xbb, 0xef, 0x58, 0xd8, 0xd1, 0x32, 0xe8, + 0x06, 0x5c, 0x13, 0x0b, 0x8e, 0x8d, 0x8f, 0x5b, 0x1d, 0x11, 0xb3, 0x83, 0x34, 0xb8, 0x7a, 0xd4, + 0xed, 0x2f, 0x83, 0xb2, 0xfa, 0xf7, 0x0a, 0xec, 0x35, 0x22, 0xe2, 0x72, 0xb2, 0xbc, 0x44, 0x31, + 0x79, 0x36, 0x25, 0x8c, 0x8b, 0x53, 0x09, 0xdd, 0x68, 0xd9, 0xe4, 0xc9, 0x0c, 0x61, 0x28, 0x8a, + 0xfb, 0x94, 0xc5, 0xd1, 0x52, 0x6f, 0x71, 0xeb, 0x36, 0x5f, 0x49, 0x03, 0xc3, 0xc5, 0x58, 0xff, + 0x55, 0x81, 0xbd, 0x93, 0x70, 0xf4, 0x52, 0x1d, 0x2f, 0xbb, 0xd3, 0xff, 0x07, 0x0d, 0xa2, 0xe1, + 0xa7, 0x52, 0x82, 0xfc, 0x33, 0x25, 0x97, 0xce, 0xf9, 0x86, 0x3f, 0x10, 0x3f, 0xaf, 0x63, 0x97, + 0x9d, 0x61, 0x88, 0xc3, 0xc5, 0x58, 0xff, 0x4d, 0x81, 0xbd, 0x1e, 0x65, 0xbc, 0x4e, 0xb9, 0x3d, + 0x23, 0x01, 0x17, 0x47, 0xfc, 0x4f, 0x1f, 0xf0, 0x18, 0xb2, 0x7c, 0x1e, 0xa6, 0x97, 0x64, 0x63, + 0x4b, 0xe5, 0x17, 0x64, 0x30, 0x9c, 0x79, 0x48, 0xb0, 0x24, 0x14, 0x55, 0xe4, 0xb3, 0xb1, 0x54, + 0x5f, 0xc0, 0x62, 0xa8, 0xdf, 0x81, 0xac, 0xd8, 0x3f, 0x5f, 0x42, 0x57, 0x20, 0xdb, 0xea, 0x1c, + 0x74, 0x35, 0x05, 0x15, 0x20, 0x67, 0x63, 0xdc, 0xc5, 0x5a, 0xa6, 0x3a, 0x86, 0xc2, 0xe2, 0x0f, + 0x87, 0xca, 0x70, 0x4b, 0xd4, 0x50, 0xdf, 0xb1, 0x9c, 0x93, 0xfe, 0x60, 0x1d, 0xad, 0x42, 0xa6, + 0xfb, 0x99, 0xa6, 0xa0, 0x6b, 0x50, 0x38, 0xe9, 0x1c, 0xd9, 0x56, 0xdb, 0x39, 0xfa, 0x42, 0xcb, + 0x20, 0x04, 0xbb, 0x49, 0x8d, 0xd5, 0xbb, 0x5d, 0xa7, 0xd5, 0x39, 0xd4, 0x76, 0xd0, 0x9b, 0x70, + 0x7d, 0xb5, 0x14, 0xc5, 0x62, 0xb6, 0xfa, 0x04, 0x60, 0x79, 0xe7, 0xa3, 0xdb, 0xb0, 0xd7, 0xb6, + 0xad, 0xbe, 0x2d, 0x73, 0xd9, 0x1b, 0xa9, 0x8a, 0x90, 0xef, 0xd9, 0x9d, 0xa6, 0xc0, 0x29, 0x08, + 0x40, 0xb5, 0x1a, 0x4e, 0xeb, 0x91, 0xad, 0x65, 0x44, 0xee, 0x46, 0xf7, 0xb8, 0xd7, 0xb6, 0x1d, + 0xbb, 0xa9, 0x65, 0xe5, 0xd4, 0xea, 0x34, 0xec, 0x76, 0xdb, 0x6e, 0x6a, 0xb9, 0xda, 0x4f, 0x59, + 0xc8, 0xd6, 0x29, 0x67, 0xe8, 0x17, 0x05, 0xb4, 0xcd, 0x2a, 0x47, 0x9f, 0x6e, 0xe9, 0xf9, 0x05, + 0xed, 0x51, 0xbe, 0x7c, 0xb5, 0xe9, 0x1f, 0x7d, 0xf7, 0xe2, 0x8f, 0x1f, 0x32, 0xa6, 0x5e, 0x59, + 0x3c, 0xd1, 0xbe, 0x8d, 0x7b, 0xea, 0x61, 0xb5, 0xfa, 0xdc, 0x5c, 0x96, 0x22, 0xbb, 0xbf, 0x5a, + 0xdd, 0x52, 0xfe, 0x66, 0x73, 0x6c, 0x2d, 0xff, 0x82, 0xae, 0x7a, 0x0d, 0xf9, 0xb5, 0x15, 0xf9, + 0xa2, 0x96, 0x1f, 0x56, 0xab, 0xab, 0xda, 0xcd, 0xea, 0xf3, 0x75, 0xf9, 0x3f, 0x2a, 0xa0, 0x6d, + 0x16, 0xee, 0xd6, 0xf2, 0x2f, 0xa8, 0xf8, 0xf2, 0xad, 0x73, 0x7d, 0x69, 0x8b, 0x17, 0xe7, 0xc2, + 0xe2, 0xea, 0x2b, 0x35, 0x86, 0x94, 0xc5, 0xb4, 0xf7, 0x95, 0x6a, 0xdd, 0xf9, 0x12, 0x27, 0x7c, + 0x63, 0x3a, 0x71, 0x83, 0xb1, 0x41, 0xa3, 0xb1, 0x39, 0x26, 0x81, 0x64, 0x37, 0xe3, 0x2d, 0x37, + 0xf4, 0xd8, 0x2b, 0x9e, 0xdc, 0x0f, 0xd6, 0x56, 0x87, 0xaa, 0x84, 0x7f, 0xf8, 0x77, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x7c, 0xc5, 0x7e, 0x38, 0xb0, 0x0b, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/remoteworkers/v1test2/command.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/remoteworkers/v1test2/command.pb.go new file mode 100644 index 0000000..f5b5009 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/devtools/remoteworkers/v1test2/command.pb.go @@ -0,0 +1,468 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/devtools/remoteworkers/v1test2/command.proto + +package remoteworkers + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import google_protobuf5 "github.com/golang/protobuf/ptypes/duration" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Describes a shell-style task to execute. +type CommandTask struct { + // The inputs to the task. + Inputs *CommandTask_Inputs `protobuf:"bytes,1,opt,name=inputs" json:"inputs,omitempty"` + // The expected outputs from the task. + ExpectedOutputs *CommandTask_Outputs `protobuf:"bytes,4,opt,name=expected_outputs,json=expectedOutputs" json:"expected_outputs,omitempty"` + // The timeouts of this task. + Timeouts *CommandTask_Timeouts `protobuf:"bytes,5,opt,name=timeouts" json:"timeouts,omitempty"` +} + +func (m *CommandTask) Reset() { *m = CommandTask{} } +func (m *CommandTask) String() string { return proto.CompactTextString(m) } +func (*CommandTask) ProtoMessage() {} +func (*CommandTask) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *CommandTask) GetInputs() *CommandTask_Inputs { + if m != nil { + return m.Inputs + } + return nil +} + +func (m *CommandTask) GetExpectedOutputs() *CommandTask_Outputs { + if m != nil { + return m.ExpectedOutputs + } + return nil +} + +func (m *CommandTask) GetTimeouts() *CommandTask_Timeouts { + if m != nil { + return m.Timeouts + } + return nil +} + +// Describes the inputs to a shell-style task. +type CommandTask_Inputs struct { + // The command itself to run (e.g., argv) + Arguments []string `protobuf:"bytes,1,rep,name=arguments" json:"arguments,omitempty"` + // The input filesystem to be set up prior to the task beginning. The + // contents should be a repeated set of FileMetadata messages though other + // formats are allowed if better for the implementation (eg, a LUCI-style + // .isolated file). + // + // This field is repeated since implementations might want to cache the + // metadata, in which case it may be useful to break up portions of the + // filesystem that change frequently (eg, specific input files) from those + // that don't (eg, standard header files). + Files []*Digest `protobuf:"bytes,2,rep,name=files" json:"files,omitempty"` + // All environment variables required by the task. + EnvironmentVariables []*CommandTask_Inputs_EnvironmentVariable `protobuf:"bytes,3,rep,name=environment_variables,json=environmentVariables" json:"environment_variables,omitempty"` +} + +func (m *CommandTask_Inputs) Reset() { *m = CommandTask_Inputs{} } +func (m *CommandTask_Inputs) String() string { return proto.CompactTextString(m) } +func (*CommandTask_Inputs) ProtoMessage() {} +func (*CommandTask_Inputs) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0, 0} } + +func (m *CommandTask_Inputs) GetArguments() []string { + if m != nil { + return m.Arguments + } + return nil +} + +func (m *CommandTask_Inputs) GetFiles() []*Digest { + if m != nil { + return m.Files + } + return nil +} + +func (m *CommandTask_Inputs) GetEnvironmentVariables() []*CommandTask_Inputs_EnvironmentVariable { + if m != nil { + return m.EnvironmentVariables + } + return nil +} + +// An environment variable required by this task. +type CommandTask_Inputs_EnvironmentVariable struct { + // The envvar name. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The envvar value. + Value string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` +} + +func (m *CommandTask_Inputs_EnvironmentVariable) Reset() { + *m = CommandTask_Inputs_EnvironmentVariable{} +} +func (m *CommandTask_Inputs_EnvironmentVariable) String() string { return proto.CompactTextString(m) } +func (*CommandTask_Inputs_EnvironmentVariable) ProtoMessage() {} +func (*CommandTask_Inputs_EnvironmentVariable) Descriptor() ([]byte, []int) { + return fileDescriptor1, []int{0, 0, 0} +} + +func (m *CommandTask_Inputs_EnvironmentVariable) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *CommandTask_Inputs_EnvironmentVariable) GetValue() string { + if m != nil { + return m.Value + } + return "" +} + +// Describes the expected outputs of the command. +type CommandTask_Outputs struct { + // A list of expected files, relative to the execution root. + Files []string `protobuf:"bytes,1,rep,name=files" json:"files,omitempty"` + // A list of expected directories, relative to the execution root. + Directories []string `protobuf:"bytes,2,rep,name=directories" json:"directories,omitempty"` +} + +func (m *CommandTask_Outputs) Reset() { *m = CommandTask_Outputs{} } +func (m *CommandTask_Outputs) String() string { return proto.CompactTextString(m) } +func (*CommandTask_Outputs) ProtoMessage() {} +func (*CommandTask_Outputs) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0, 1} } + +func (m *CommandTask_Outputs) GetFiles() []string { + if m != nil { + return m.Files + } + return nil +} + +func (m *CommandTask_Outputs) GetDirectories() []string { + if m != nil { + return m.Directories + } + return nil +} + +// Describes the timeouts associated with this task. +type CommandTask_Timeouts struct { + // This specifies the maximum time that the task can run, excluding the + // time required to download inputs or upload outputs. That is, the worker + // will terminate the task if it runs longer than this. + Execution *google_protobuf5.Duration `protobuf:"bytes,1,opt,name=execution" json:"execution,omitempty"` + // This specifies the maximum amount of time the task can be idle - that is, + // go without generating some output in either stdout or stderr. If the + // process is silent for more than the specified time, the worker will + // terminate the task. + Idle *google_protobuf5.Duration `protobuf:"bytes,2,opt,name=idle" json:"idle,omitempty"` + // If the execution or IO timeouts are exceeded, the worker will try to + // gracefully terminate the task and return any existing logs. However, + // tasks may be hard-frozen in which case this process will fail. This + // timeout specifies how long to wait for a terminated task to shut down + // gracefully (e.g. via SIGTERM) before we bring down the hammer (e.g. + // SIGKILL on *nix, CTRL_BREAK_EVENT on Windows). + Shutdown *google_protobuf5.Duration `protobuf:"bytes,3,opt,name=shutdown" json:"shutdown,omitempty"` +} + +func (m *CommandTask_Timeouts) Reset() { *m = CommandTask_Timeouts{} } +func (m *CommandTask_Timeouts) String() string { return proto.CompactTextString(m) } +func (*CommandTask_Timeouts) ProtoMessage() {} +func (*CommandTask_Timeouts) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0, 2} } + +func (m *CommandTask_Timeouts) GetExecution() *google_protobuf5.Duration { + if m != nil { + return m.Execution + } + return nil +} + +func (m *CommandTask_Timeouts) GetIdle() *google_protobuf5.Duration { + if m != nil { + return m.Idle + } + return nil +} + +func (m *CommandTask_Timeouts) GetShutdown() *google_protobuf5.Duration { + if m != nil { + return m.Shutdown + } + return nil +} + +// Describes the actual outputs from the task. +type CommandOutputs struct { + // exit_code is only fully reliable if the status' code is OK. If the task + // exceeded its deadline or was cancelled, the process may still produce an + // exit code as it is cancelled, and this will be populated, but a successful + // (zero) is unlikely to be correct unless the status code is OK. + ExitCode int32 `protobuf:"varint,1,opt,name=exit_code,json=exitCode" json:"exit_code,omitempty"` + // The output files. The blob referenced by the digest should contain + // one of the following (implementation-dependent): + // * A marshalled DirectoryMetadata of the returned filesystem + // * A LUCI-style .isolated file + Outputs *Digest `protobuf:"bytes,2,opt,name=outputs" json:"outputs,omitempty"` +} + +func (m *CommandOutputs) Reset() { *m = CommandOutputs{} } +func (m *CommandOutputs) String() string { return proto.CompactTextString(m) } +func (*CommandOutputs) ProtoMessage() {} +func (*CommandOutputs) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +func (m *CommandOutputs) GetExitCode() int32 { + if m != nil { + return m.ExitCode + } + return 0 +} + +func (m *CommandOutputs) GetOutputs() *Digest { + if m != nil { + return m.Outputs + } + return nil +} + +// Can be used as part of CompleteRequest.metadata, or are part of a more +// sophisticated message. +type CommandOverhead struct { + // The elapsed time between calling Accept and Complete. The server will also + // have its own idea of what this should be, but this excludes the overhead of + // the RPCs and the bot response time. + Duration *google_protobuf5.Duration `protobuf:"bytes,1,opt,name=duration" json:"duration,omitempty"` + // The amount of time *not* spent executing the command (ie + // uploading/downloading files). + Overhead *google_protobuf5.Duration `protobuf:"bytes,2,opt,name=overhead" json:"overhead,omitempty"` +} + +func (m *CommandOverhead) Reset() { *m = CommandOverhead{} } +func (m *CommandOverhead) String() string { return proto.CompactTextString(m) } +func (*CommandOverhead) ProtoMessage() {} +func (*CommandOverhead) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +func (m *CommandOverhead) GetDuration() *google_protobuf5.Duration { + if m != nil { + return m.Duration + } + return nil +} + +func (m *CommandOverhead) GetOverhead() *google_protobuf5.Duration { + if m != nil { + return m.Overhead + } + return nil +} + +// The metadata for a file. Similar to the equivalent message in the Remote +// Execution API. +type FileMetadata struct { + // The path of this file. If this message is part of the + // CommandResult.output_files fields, the path is relative to the execution + // root and must correspond to an entry in CommandTask.outputs.files. If this + // message is part of a Directory message, then the path is relative to the + // root of that directory. + Path string `protobuf:"bytes,1,opt,name=path" json:"path,omitempty"` + // A pointer to the contents of the file. The method by which a client + // retrieves the contents from a CAS system is not defined here. + Digest *Digest `protobuf:"bytes,2,opt,name=digest" json:"digest,omitempty"` + // If the file is small enough, its contents may also or alternatively be + // listed here. + Contents []byte `protobuf:"bytes,3,opt,name=contents,proto3" json:"contents,omitempty"` + // Properties of the file + IsExecutable bool `protobuf:"varint,4,opt,name=is_executable,json=isExecutable" json:"is_executable,omitempty"` +} + +func (m *FileMetadata) Reset() { *m = FileMetadata{} } +func (m *FileMetadata) String() string { return proto.CompactTextString(m) } +func (*FileMetadata) ProtoMessage() {} +func (*FileMetadata) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } + +func (m *FileMetadata) GetPath() string { + if m != nil { + return m.Path + } + return "" +} + +func (m *FileMetadata) GetDigest() *Digest { + if m != nil { + return m.Digest + } + return nil +} + +func (m *FileMetadata) GetContents() []byte { + if m != nil { + return m.Contents + } + return nil +} + +func (m *FileMetadata) GetIsExecutable() bool { + if m != nil { + return m.IsExecutable + } + return false +} + +// The metadata for a directory. Similar to the equivalent message in the Remote +// Execution API. +type DirectoryMetadata struct { + // The path of the directory, as in [FileMetadata.path][google.devtools.remoteworkers.v1test2.FileMetadata.path]. + Path string `protobuf:"bytes,1,opt,name=path" json:"path,omitempty"` + // A pointer to the contents of the directory, in the form of a marshalled + // Directory message. + Digest *Digest `protobuf:"bytes,2,opt,name=digest" json:"digest,omitempty"` +} + +func (m *DirectoryMetadata) Reset() { *m = DirectoryMetadata{} } +func (m *DirectoryMetadata) String() string { return proto.CompactTextString(m) } +func (*DirectoryMetadata) ProtoMessage() {} +func (*DirectoryMetadata) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } + +func (m *DirectoryMetadata) GetPath() string { + if m != nil { + return m.Path + } + return "" +} + +func (m *DirectoryMetadata) GetDigest() *Digest { + if m != nil { + return m.Digest + } + return nil +} + +// A reference to the contents of a file or a directory. If the latter, the has +// refers to the hash of a marshalled Directory message. Similar to the +// equivalent message in the Remote Execution API. +type Digest struct { + // A string-encoded hash (eg "1a2b3c", not the byte array [0x1a, 0x2b, 0x3c]) + // using an implementation-defined hash algorithm (eg SHA-256). + Hash string `protobuf:"bytes,1,opt,name=hash" json:"hash,omitempty"` + // The size of the contents. While this is not strictly required as part of an + // identifier (after all, any given hash will have exactly one canonical + // size), it's useful in almost all cases when one might want to send or + // retrieve blobs of content and is included here for this reason. + SizeBytes int64 `protobuf:"varint,2,opt,name=size_bytes,json=sizeBytes" json:"size_bytes,omitempty"` +} + +func (m *Digest) Reset() { *m = Digest{} } +func (m *Digest) String() string { return proto.CompactTextString(m) } +func (*Digest) ProtoMessage() {} +func (*Digest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } + +func (m *Digest) GetHash() string { + if m != nil { + return m.Hash + } + return "" +} + +func (m *Digest) GetSizeBytes() int64 { + if m != nil { + return m.SizeBytes + } + return 0 +} + +// The contents of a directory. Similar to the equivalent message in the Remote +// Execution API. +type Directory struct { + // The files in this directory + Files []*FileMetadata `protobuf:"bytes,1,rep,name=files" json:"files,omitempty"` + // Any subdirectories + Directories []*DirectoryMetadata `protobuf:"bytes,2,rep,name=directories" json:"directories,omitempty"` +} + +func (m *Directory) Reset() { *m = Directory{} } +func (m *Directory) String() string { return proto.CompactTextString(m) } +func (*Directory) ProtoMessage() {} +func (*Directory) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } + +func (m *Directory) GetFiles() []*FileMetadata { + if m != nil { + return m.Files + } + return nil +} + +func (m *Directory) GetDirectories() []*DirectoryMetadata { + if m != nil { + return m.Directories + } + return nil +} + +func init() { + proto.RegisterType((*CommandTask)(nil), "google.devtools.remoteworkers.v1test2.CommandTask") + proto.RegisterType((*CommandTask_Inputs)(nil), "google.devtools.remoteworkers.v1test2.CommandTask.Inputs") + proto.RegisterType((*CommandTask_Inputs_EnvironmentVariable)(nil), "google.devtools.remoteworkers.v1test2.CommandTask.Inputs.EnvironmentVariable") + proto.RegisterType((*CommandTask_Outputs)(nil), "google.devtools.remoteworkers.v1test2.CommandTask.Outputs") + proto.RegisterType((*CommandTask_Timeouts)(nil), "google.devtools.remoteworkers.v1test2.CommandTask.Timeouts") + proto.RegisterType((*CommandOutputs)(nil), "google.devtools.remoteworkers.v1test2.CommandOutputs") + proto.RegisterType((*CommandOverhead)(nil), "google.devtools.remoteworkers.v1test2.CommandOverhead") + proto.RegisterType((*FileMetadata)(nil), "google.devtools.remoteworkers.v1test2.FileMetadata") + proto.RegisterType((*DirectoryMetadata)(nil), "google.devtools.remoteworkers.v1test2.DirectoryMetadata") + proto.RegisterType((*Digest)(nil), "google.devtools.remoteworkers.v1test2.Digest") + proto.RegisterType((*Directory)(nil), "google.devtools.remoteworkers.v1test2.Directory") +} + +func init() { + proto.RegisterFile("google/devtools/remoteworkers/v1test2/command.proto", fileDescriptor1) +} + +var fileDescriptor1 = []byte{ + // 665 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x95, 0xcb, 0x6e, 0x13, 0x49, + 0x14, 0x86, 0xe5, 0x38, 0x76, 0xec, 0xe3, 0xcc, 0x64, 0xa6, 0x26, 0x23, 0x19, 0x73, 0x51, 0x64, + 0x84, 0x94, 0x4d, 0xba, 0x85, 0x23, 0xc4, 0x25, 0x0b, 0x44, 0x2e, 0xa0, 0x2c, 0x22, 0x44, 0x29, + 0x02, 0x29, 0x1b, 0xab, 0xec, 0x3e, 0x69, 0x97, 0xd2, 0xee, 0xb2, 0xba, 0xaa, 0x3b, 0x09, 0x1b, + 0x24, 0xde, 0x06, 0x76, 0xf0, 0x0a, 0xbc, 0x18, 0xaa, 0x5b, 0xc7, 0x21, 0x08, 0x1b, 0x2f, 0xd8, + 0x55, 0x9f, 0xd4, 0xff, 0xd5, 0xb9, 0xfc, 0x27, 0x86, 0xed, 0x58, 0x88, 0x38, 0xc1, 0x30, 0xc2, + 0x42, 0x09, 0x91, 0xc8, 0x30, 0xc3, 0xb1, 0x50, 0x78, 0x2e, 0xb2, 0x33, 0xcc, 0x64, 0x58, 0x3c, + 0x54, 0x28, 0x55, 0x2f, 0x1c, 0x8a, 0xf1, 0x98, 0xa5, 0x51, 0x30, 0xc9, 0x84, 0x12, 0xe4, 0x81, + 0x15, 0x05, 0x5e, 0x14, 0x5c, 0x13, 0x05, 0x4e, 0xd4, 0xb9, 0xe7, 0xd8, 0x46, 0x34, 0xc8, 0x4f, + 0xc3, 0x28, 0xcf, 0x98, 0xe2, 0x22, 0xb5, 0x98, 0xee, 0xb7, 0x3a, 0xb4, 0xf6, 0x2c, 0xf8, 0x98, + 0xc9, 0x33, 0xf2, 0x06, 0xea, 0x3c, 0x9d, 0xe4, 0x4a, 0xb6, 0x2b, 0x1b, 0x95, 0xcd, 0x56, 0xef, + 0x69, 0x30, 0xd7, 0x3b, 0xc1, 0x14, 0x23, 0x38, 0x34, 0x00, 0xea, 0x40, 0x04, 0xe1, 0x1f, 0xbc, + 0x98, 0xe0, 0x50, 0x61, 0xd4, 0x17, 0xb9, 0x32, 0xf0, 0x65, 0x03, 0x7f, 0xb6, 0x00, 0xfc, 0xb5, + 0x25, 0xd0, 0x35, 0xcf, 0x74, 0x01, 0xf2, 0x0e, 0x1a, 0x8a, 0x8f, 0x51, 0x68, 0x7c, 0xcd, 0xe0, + 0x77, 0x16, 0xc0, 0x1f, 0x3b, 0x04, 0x2d, 0x61, 0x9d, 0x2f, 0x4b, 0x50, 0xb7, 0x25, 0x91, 0x3b, + 0xd0, 0x64, 0x59, 0x9c, 0x8f, 0x31, 0x35, 0x0d, 0xaa, 0x6e, 0x36, 0xe9, 0x55, 0x80, 0xec, 0x41, + 0xed, 0x94, 0x27, 0x28, 0xdb, 0x4b, 0x1b, 0xd5, 0xcd, 0x56, 0x6f, 0x6b, 0xce, 0xe7, 0xf7, 0x79, + 0x8c, 0x52, 0x51, 0xab, 0x25, 0x1f, 0x2b, 0xf0, 0x3f, 0xa6, 0x05, 0xcf, 0x44, 0xaa, 0xa9, 0xfd, + 0x82, 0x65, 0x9c, 0x0d, 0x34, 0xb5, 0x6a, 0xa8, 0x47, 0x0b, 0x0f, 0x24, 0x38, 0xb8, 0xc2, 0xbe, + 0x75, 0x54, 0xba, 0x8e, 0x37, 0x83, 0xb2, 0xf3, 0x1c, 0xfe, 0xfb, 0xc9, 0x65, 0x42, 0x60, 0x39, + 0x65, 0x63, 0x34, 0xd6, 0x68, 0x52, 0x73, 0x26, 0xeb, 0x50, 0x2b, 0x58, 0x92, 0x63, 0x7b, 0xc9, + 0x04, 0xed, 0x47, 0xe7, 0x05, 0xac, 0xf8, 0xb9, 0xac, 0xfb, 0xae, 0xd8, 0x7e, 0xb9, 0x32, 0x37, + 0xa0, 0x15, 0xf1, 0x0c, 0x87, 0x4a, 0x64, 0xdc, 0x75, 0xac, 0x49, 0xa7, 0x43, 0x9d, 0x4f, 0x15, + 0x68, 0xf8, 0x69, 0x90, 0xc7, 0xd0, 0xc4, 0x0b, 0x1c, 0xe6, 0xda, 0xb9, 0xce, 0x99, 0xb7, 0x7c, + 0x23, 0xbc, 0xb5, 0x83, 0x7d, 0x67, 0x6d, 0x7a, 0x75, 0x97, 0x6c, 0xc1, 0x32, 0x8f, 0x12, 0x9b, + 0xdd, 0x2f, 0x35, 0xe6, 0x1a, 0x79, 0x04, 0x0d, 0x39, 0xca, 0x55, 0x24, 0xce, 0xd3, 0x76, 0x75, + 0x96, 0xa4, 0xbc, 0xda, 0x2d, 0xe0, 0x6f, 0xd7, 0x6f, 0x5f, 0xf5, 0x6d, 0x9d, 0x30, 0x57, 0xfd, + 0xa1, 0x88, 0x6c, 0xbf, 0x6a, 0xb4, 0xa1, 0x03, 0x7b, 0x22, 0x42, 0xf2, 0x0a, 0x56, 0xfc, 0x22, + 0xd8, 0xbc, 0x7e, 0xd3, 0x2a, 0x5e, 0xdd, 0xfd, 0x00, 0x6b, 0xfe, 0xdd, 0x02, 0xb3, 0x11, 0xb2, + 0x48, 0x57, 0xe0, 0x57, 0x7c, 0x76, 0xa3, 0xca, 0xab, 0x5a, 0x26, 0x1c, 0x62, 0x76, 0xaf, 0xca, + 0xab, 0xdd, 0xcf, 0x15, 0x58, 0x7d, 0xc9, 0x13, 0x3c, 0x42, 0xc5, 0x22, 0xa6, 0x98, 0xb6, 0xc8, + 0x84, 0xa9, 0x91, 0xb7, 0x88, 0x3e, 0x93, 0x03, 0xa8, 0x47, 0x26, 0xf1, 0xc5, 0xaa, 0x75, 0x62, + 0xd2, 0x81, 0xc6, 0x50, 0xa4, 0xca, 0xec, 0x9e, 0x9e, 0xcd, 0x2a, 0x2d, 0xbf, 0xc9, 0x7d, 0xf8, + 0x8b, 0xcb, 0xbe, 0x1d, 0xbb, 0xb6, 0xaa, 0xf9, 0x07, 0xd3, 0xa0, 0xab, 0x5c, 0x1e, 0x94, 0xb1, + 0x6e, 0x0a, 0xff, 0xee, 0x3b, 0x83, 0x5d, 0xfe, 0x81, 0x84, 0xbb, 0x3b, 0x50, 0xb7, 0x11, 0xfd, + 0xc8, 0x88, 0xc9, 0xf2, 0x11, 0x7d, 0x26, 0x77, 0x01, 0x24, 0x7f, 0x8f, 0xfd, 0xc1, 0xa5, 0x42, + 0xeb, 0x83, 0x2a, 0x6d, 0xea, 0xc8, 0xae, 0x0e, 0x74, 0xbf, 0x56, 0xa0, 0x59, 0x66, 0x4b, 0x0e, + 0xa7, 0x97, 0xa8, 0xd5, 0xdb, 0x9e, 0x33, 0xa1, 0xe9, 0xd1, 0xf8, 0xcd, 0x3b, 0xb9, 0xb9, 0x79, + 0xad, 0xde, 0x93, 0xb9, 0x2b, 0xfc, 0xa1, 0x7f, 0xd7, 0x76, 0x76, 0xf7, 0xf8, 0x84, 0x3a, 0x4e, + 0x2c, 0x12, 0x96, 0xc6, 0x81, 0xc8, 0xe2, 0x30, 0xc6, 0xd4, 0x58, 0x28, 0xb4, 0x7f, 0x62, 0x13, + 0x2e, 0x67, 0xfc, 0xd4, 0xed, 0x5c, 0x8b, 0x0e, 0xea, 0x46, 0xbe, 0xfd, 0x3d, 0x00, 0x00, 0xff, + 0xff, 0x1c, 0x77, 0x2c, 0xa3, 0x28, 0x07, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/remoteworkers/v1test2/tasks.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/remoteworkers/v1test2/tasks.pb.go new file mode 100644 index 0000000..0313665 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/devtools/remoteworkers/v1test2/tasks.pb.go @@ -0,0 +1,456 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/devtools/remoteworkers/v1test2/tasks.proto + +package remoteworkers + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/any" +import google_protobuf3 "google.golang.org/genproto/protobuf/field_mask" +import google_rpc "google.golang.org/genproto/googleapis/rpc/status" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// A Task represents a unit of work. Its result and logs are defined as +// subresources. +// +// If all the `Any` fields are populated, this can be a very large message, and +// clients may not want the entire message returned on every call to every +// method. Such clients should request partial responses +// (https://cloud.google.com/apis/design/design_patterns#partial_response) and +// servers should implement partial responses in order to reduce unnecessry +// overhead. +type Task struct { + // The name of this task. Output only. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The actual task to perform. For example, this could be CommandTask to run a + // command line. + Description *google_protobuf1.Any `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` + // Handles to logs. The key is a human-readable name like `stdout`, and the + // handle is a resource name that can be passed to ByteStream or other + // accessors. + // + // An implementation may define some logs by default (like `stdout`), and may + // allow clients to add new logs via AddTaskLog. + Logs map[string]string `protobuf:"bytes,3,rep,name=logs" json:"logs,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *Task) Reset() { *m = Task{} } +func (m *Task) String() string { return proto.CompactTextString(m) } +func (*Task) ProtoMessage() {} +func (*Task) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } + +func (m *Task) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Task) GetDescription() *google_protobuf1.Any { + if m != nil { + return m.Description + } + return nil +} + +func (m *Task) GetLogs() map[string]string { + if m != nil { + return m.Logs + } + return nil +} + +// The result and metadata of the task. +type TaskResult struct { + // The name of the task result; must be a name of a `Task` followed by + // `/result`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The result may be updated several times; the client must only set + // `complete` to true to indicate that no further updates are allowed. + // If this is not true, the `status` field must not be examined since its zero + // value is equivalent to `OK`. + // + // Once a task is completed, it must not be updated with further results, + // though the implementation may choose to continue to receive logs. + Complete bool `protobuf:"varint,2,opt,name=complete" json:"complete,omitempty"` + // The final status of the task itself. For example, if task.description + // included a timeout which was violated, status.code may be + // DEADLINE_EXCEEDED. This field can only be read if `complete` is true. + Status *google_rpc.Status `protobuf:"bytes,3,opt,name=status" json:"status,omitempty"` + // Any non-log output, such as output files and exit codes. See + // CommandResult as an example. + Output *google_protobuf1.Any `protobuf:"bytes,4,opt,name=output" json:"output,omitempty"` + // Any information about how the command was executed, eg runtime. See + // CommandOverhead as an example. + Meta *google_protobuf1.Any `protobuf:"bytes,5,opt,name=meta" json:"meta,omitempty"` +} + +func (m *TaskResult) Reset() { *m = TaskResult{} } +func (m *TaskResult) String() string { return proto.CompactTextString(m) } +func (*TaskResult) ProtoMessage() {} +func (*TaskResult) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{1} } + +func (m *TaskResult) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *TaskResult) GetComplete() bool { + if m != nil { + return m.Complete + } + return false +} + +func (m *TaskResult) GetStatus() *google_rpc.Status { + if m != nil { + return m.Status + } + return nil +} + +func (m *TaskResult) GetOutput() *google_protobuf1.Any { + if m != nil { + return m.Output + } + return nil +} + +func (m *TaskResult) GetMeta() *google_protobuf1.Any { + if m != nil { + return m.Meta + } + return nil +} + +// Request message for `GetTask`. +type GetTaskRequest struct { + // The task name. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetTaskRequest) Reset() { *m = GetTaskRequest{} } +func (m *GetTaskRequest) String() string { return proto.CompactTextString(m) } +func (*GetTaskRequest) ProtoMessage() {} +func (*GetTaskRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{2} } + +func (m *GetTaskRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for `UpdateTaskResult`. +type UpdateTaskResultRequest struct { + // The task result name; must match `result.name`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The result being updated. + Result *TaskResult `protobuf:"bytes,2,opt,name=result" json:"result,omitempty"` + // The fields within `result` that are specified. + UpdateMask *google_protobuf3.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` + // If this is being updated by a bot from BotManager, the source should be + // bot.session_id. That way, if two bots accidentally get the same name, we'll + // know to reject updates from the older one. + Source string `protobuf:"bytes,4,opt,name=source" json:"source,omitempty"` +} + +func (m *UpdateTaskResultRequest) Reset() { *m = UpdateTaskResultRequest{} } +func (m *UpdateTaskResultRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateTaskResultRequest) ProtoMessage() {} +func (*UpdateTaskResultRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{3} } + +func (m *UpdateTaskResultRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *UpdateTaskResultRequest) GetResult() *TaskResult { + if m != nil { + return m.Result + } + return nil +} + +func (m *UpdateTaskResultRequest) GetUpdateMask() *google_protobuf3.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +func (m *UpdateTaskResultRequest) GetSource() string { + if m != nil { + return m.Source + } + return "" +} + +// Request message for `AddTaskLog`. +type AddTaskLogRequest struct { + // The name of the task that will own the new log. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The human-readable name of the log, like `stdout` or a relative file path. + LogId string `protobuf:"bytes,2,opt,name=log_id,json=logId" json:"log_id,omitempty"` +} + +func (m *AddTaskLogRequest) Reset() { *m = AddTaskLogRequest{} } +func (m *AddTaskLogRequest) String() string { return proto.CompactTextString(m) } +func (*AddTaskLogRequest) ProtoMessage() {} +func (*AddTaskLogRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{4} } + +func (m *AddTaskLogRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *AddTaskLogRequest) GetLogId() string { + if m != nil { + return m.LogId + } + return "" +} + +// Response message for `AddTaskLog`. +type AddTaskLogResponse struct { + // The handle for the new log, as would be returned in Task.logs. + Handle string `protobuf:"bytes,1,opt,name=handle" json:"handle,omitempty"` +} + +func (m *AddTaskLogResponse) Reset() { *m = AddTaskLogResponse{} } +func (m *AddTaskLogResponse) String() string { return proto.CompactTextString(m) } +func (*AddTaskLogResponse) ProtoMessage() {} +func (*AddTaskLogResponse) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{5} } + +func (m *AddTaskLogResponse) GetHandle() string { + if m != nil { + return m.Handle + } + return "" +} + +func init() { + proto.RegisterType((*Task)(nil), "google.devtools.remoteworkers.v1test2.Task") + proto.RegisterType((*TaskResult)(nil), "google.devtools.remoteworkers.v1test2.TaskResult") + proto.RegisterType((*GetTaskRequest)(nil), "google.devtools.remoteworkers.v1test2.GetTaskRequest") + proto.RegisterType((*UpdateTaskResultRequest)(nil), "google.devtools.remoteworkers.v1test2.UpdateTaskResultRequest") + proto.RegisterType((*AddTaskLogRequest)(nil), "google.devtools.remoteworkers.v1test2.AddTaskLogRequest") + proto.RegisterType((*AddTaskLogResponse)(nil), "google.devtools.remoteworkers.v1test2.AddTaskLogResponse") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for Tasks service + +type TasksClient interface { + // GetTask reads the current state of the task. Tasks must be created through + // some other interface, and should be immutable once created and exposed to + // the bots. + GetTask(ctx context.Context, in *GetTaskRequest, opts ...grpc.CallOption) (*Task, error) + // UpdateTaskResult updates the result. + UpdateTaskResult(ctx context.Context, in *UpdateTaskResultRequest, opts ...grpc.CallOption) (*TaskResult, error) + // AddTaskLog creates a new streaming log. The log is streamed and marked as + // completed through other interfaces (i.e., ByteStream). This can be called + // by the bot if it wants to create a new log; the server can also predefine + // logs that do not need to be created (e.g. `stdout`). + AddTaskLog(ctx context.Context, in *AddTaskLogRequest, opts ...grpc.CallOption) (*AddTaskLogResponse, error) +} + +type tasksClient struct { + cc *grpc.ClientConn +} + +func NewTasksClient(cc *grpc.ClientConn) TasksClient { + return &tasksClient{cc} +} + +func (c *tasksClient) GetTask(ctx context.Context, in *GetTaskRequest, opts ...grpc.CallOption) (*Task, error) { + out := new(Task) + err := grpc.Invoke(ctx, "/google.devtools.remoteworkers.v1test2.Tasks/GetTask", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *tasksClient) UpdateTaskResult(ctx context.Context, in *UpdateTaskResultRequest, opts ...grpc.CallOption) (*TaskResult, error) { + out := new(TaskResult) + err := grpc.Invoke(ctx, "/google.devtools.remoteworkers.v1test2.Tasks/UpdateTaskResult", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *tasksClient) AddTaskLog(ctx context.Context, in *AddTaskLogRequest, opts ...grpc.CallOption) (*AddTaskLogResponse, error) { + out := new(AddTaskLogResponse) + err := grpc.Invoke(ctx, "/google.devtools.remoteworkers.v1test2.Tasks/AddTaskLog", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Tasks service + +type TasksServer interface { + // GetTask reads the current state of the task. Tasks must be created through + // some other interface, and should be immutable once created and exposed to + // the bots. + GetTask(context.Context, *GetTaskRequest) (*Task, error) + // UpdateTaskResult updates the result. + UpdateTaskResult(context.Context, *UpdateTaskResultRequest) (*TaskResult, error) + // AddTaskLog creates a new streaming log. The log is streamed and marked as + // completed through other interfaces (i.e., ByteStream). This can be called + // by the bot if it wants to create a new log; the server can also predefine + // logs that do not need to be created (e.g. `stdout`). + AddTaskLog(context.Context, *AddTaskLogRequest) (*AddTaskLogResponse, error) +} + +func RegisterTasksServer(s *grpc.Server, srv TasksServer) { + s.RegisterService(&_Tasks_serviceDesc, srv) +} + +func _Tasks_GetTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetTaskRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TasksServer).GetTask(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.remoteworkers.v1test2.Tasks/GetTask", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TasksServer).GetTask(ctx, req.(*GetTaskRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Tasks_UpdateTaskResult_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateTaskResultRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TasksServer).UpdateTaskResult(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.remoteworkers.v1test2.Tasks/UpdateTaskResult", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TasksServer).UpdateTaskResult(ctx, req.(*UpdateTaskResultRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Tasks_AddTaskLog_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AddTaskLogRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TasksServer).AddTaskLog(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.devtools.remoteworkers.v1test2.Tasks/AddTaskLog", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TasksServer).AddTaskLog(ctx, req.(*AddTaskLogRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Tasks_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.devtools.remoteworkers.v1test2.Tasks", + HandlerType: (*TasksServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetTask", + Handler: _Tasks_GetTask_Handler, + }, + { + MethodName: "UpdateTaskResult", + Handler: _Tasks_UpdateTaskResult_Handler, + }, + { + MethodName: "AddTaskLog", + Handler: _Tasks_AddTaskLog_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/devtools/remoteworkers/v1test2/tasks.proto", +} + +func init() { proto.RegisterFile("google/devtools/remoteworkers/v1test2/tasks.proto", fileDescriptor2) } + +var fileDescriptor2 = []byte{ + // 634 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0xc1, 0x6e, 0xd3, 0x40, + 0x10, 0x95, 0x13, 0xc7, 0x34, 0x13, 0x09, 0x95, 0x55, 0xa1, 0xc6, 0xea, 0x21, 0x58, 0x80, 0xa2, + 0x34, 0xb2, 0x95, 0x20, 0xa0, 0xa4, 0xa2, 0x52, 0x91, 0x00, 0x45, 0x0a, 0x17, 0x53, 0x2e, 0x5c, + 0xaa, 0x6d, 0xbc, 0x5d, 0xac, 0x38, 0x5e, 0xe3, 0x5d, 0x07, 0x45, 0x28, 0x17, 0x4e, 0x5c, 0x11, + 0x1f, 0xc2, 0x95, 0x23, 0x3f, 0xc0, 0x09, 0x89, 0x2f, 0xe0, 0x43, 0x90, 0xd7, 0xeb, 0xb4, 0x69, + 0x9b, 0x90, 0x70, 0xf3, 0x78, 0xde, 0x9b, 0x99, 0x37, 0x6f, 0xb4, 0xd0, 0xa6, 0x8c, 0xd1, 0x90, + 0xb8, 0x3e, 0x19, 0x0b, 0xc6, 0x42, 0xee, 0x26, 0x64, 0xc4, 0x04, 0xf9, 0xc0, 0x92, 0x21, 0x49, + 0xb8, 0x3b, 0x6e, 0x0b, 0xc2, 0x45, 0xc7, 0x15, 0x98, 0x0f, 0xb9, 0x13, 0x27, 0x4c, 0x30, 0x74, + 0x2f, 0xa7, 0x38, 0x05, 0xc5, 0x99, 0xa3, 0x38, 0x8a, 0x62, 0xed, 0xa8, 0xca, 0x38, 0x0e, 0x5c, + 0x1c, 0x45, 0x4c, 0x60, 0x11, 0xb0, 0x48, 0x15, 0xb1, 0x6e, 0xab, 0xac, 0x8c, 0x4e, 0xd2, 0x53, + 0x17, 0x47, 0x13, 0x95, 0xaa, 0x5f, 0x4c, 0x9d, 0x06, 0x24, 0xf4, 0x8f, 0x47, 0x98, 0x0f, 0x15, + 0x62, 0x5b, 0x21, 0x92, 0x78, 0xe0, 0x72, 0x81, 0x45, 0xaa, 0xaa, 0xda, 0xbf, 0x35, 0xd0, 0x8f, + 0x30, 0x1f, 0x22, 0x04, 0x7a, 0x84, 0x47, 0xc4, 0xd4, 0xea, 0x5a, 0xa3, 0xea, 0xc9, 0x6f, 0xf4, + 0x08, 0x6a, 0x3e, 0xe1, 0x83, 0x24, 0x88, 0xb3, 0x41, 0xcc, 0x52, 0x5d, 0x6b, 0xd4, 0x3a, 0x5b, + 0x8e, 0x52, 0x53, 0x74, 0x73, 0x0e, 0xa3, 0x89, 0x77, 0x1e, 0x88, 0x7a, 0xa0, 0x87, 0x8c, 0x72, + 0xb3, 0x5c, 0x2f, 0x37, 0x6a, 0x9d, 0x87, 0xce, 0x4a, 0xf2, 0x9d, 0x6c, 0x0c, 0xa7, 0xcf, 0x28, + 0x7f, 0x1e, 0x89, 0x64, 0xe2, 0xc9, 0x12, 0xd6, 0x63, 0xa8, 0xce, 0x7e, 0xa1, 0x4d, 0x28, 0x0f, + 0xc9, 0x44, 0x8d, 0x98, 0x7d, 0xa2, 0x2d, 0xa8, 0x8c, 0x71, 0x98, 0x12, 0x39, 0x5b, 0xd5, 0xcb, + 0x83, 0x6e, 0x69, 0x4f, 0xb3, 0x7f, 0x68, 0x00, 0x59, 0x45, 0x8f, 0xf0, 0x34, 0x14, 0x57, 0xca, + 0xb3, 0x60, 0x63, 0xc0, 0x46, 0x71, 0x48, 0x44, 0xce, 0xdf, 0xf0, 0x66, 0x31, 0x6a, 0x82, 0x91, + 0xef, 0xc9, 0x2c, 0x4b, 0xd5, 0xa8, 0x10, 0x91, 0xc4, 0x03, 0xe7, 0xb5, 0xcc, 0x78, 0x0a, 0x81, + 0x5a, 0x60, 0xb0, 0x54, 0xc4, 0xa9, 0x30, 0xf5, 0x25, 0x1b, 0x52, 0x18, 0xd4, 0x00, 0x7d, 0x44, + 0x04, 0x36, 0x2b, 0x4b, 0xb0, 0x12, 0x61, 0xdf, 0x85, 0xeb, 0x2f, 0x89, 0xc8, 0x45, 0xbc, 0x4f, + 0x09, 0xbf, 0x52, 0x85, 0xfd, 0x53, 0x83, 0xed, 0x37, 0xb1, 0x8f, 0x05, 0x39, 0x93, 0xbb, 0x04, + 0x8f, 0x7a, 0x60, 0x24, 0x12, 0xa4, 0xfc, 0x6c, 0xaf, 0x61, 0x8f, 0xaa, 0xae, 0x0a, 0xa0, 0x7d, + 0xa8, 0xa5, 0xb2, 0xb3, 0x3c, 0x35, 0xb5, 0x29, 0xeb, 0x92, 0xa2, 0x17, 0xd9, 0x35, 0xbe, 0xca, + 0xe8, 0x90, 0xc3, 0xb3, 0x6f, 0x74, 0x0b, 0x0c, 0xce, 0xd2, 0x64, 0x40, 0xe4, 0xd6, 0xaa, 0x9e, + 0x8a, 0xec, 0x03, 0xb8, 0x71, 0xe8, 0xfb, 0x59, 0xb7, 0x3e, 0xa3, 0xcb, 0x84, 0xdc, 0x04, 0x23, + 0x64, 0xf4, 0x38, 0xf0, 0x0b, 0xf3, 0x43, 0x46, 0x7b, 0xbe, 0xdd, 0x02, 0x74, 0x9e, 0xcf, 0x63, + 0x16, 0x71, 0x92, 0x75, 0x7b, 0x87, 0x23, 0x3f, 0x2c, 0x4a, 0xa8, 0xa8, 0xf3, 0x59, 0x87, 0x4a, + 0x86, 0xe5, 0xe8, 0x8b, 0x06, 0xd7, 0xd4, 0xba, 0xd1, 0xaa, 0x27, 0x3b, 0x6f, 0x8f, 0xb5, 0xbb, + 0xc6, 0x2a, 0x6d, 0xfb, 0xd3, 0xaf, 0x3f, 0x5f, 0x4b, 0x3b, 0xc8, 0x9a, 0x3d, 0x19, 0x1f, 0x33, + 0x59, 0x4f, 0x9b, 0xcd, 0xfc, 0xed, 0x70, 0x9b, 0x53, 0xf4, 0x5d, 0x83, 0xcd, 0x8b, 0xde, 0xa2, + 0x83, 0x15, 0xbb, 0x2c, 0x38, 0x0a, 0x6b, 0x7d, 0xc3, 0xed, 0xb6, 0x9c, 0x75, 0xb7, 0x73, 0x67, + 0xe1, 0xac, 0x6e, 0x7e, 0x12, 0xd3, 0x6e, 0x71, 0x1b, 0xdf, 0x34, 0x80, 0x33, 0x1f, 0xd0, 0xde, + 0x8a, 0x4d, 0x2f, 0x59, 0x6f, 0x3d, 0xf9, 0x0f, 0x66, 0x6e, 0xba, 0xdd, 0x92, 0x63, 0xdf, 0xb7, + 0x17, 0x8f, 0x3d, 0xed, 0x62, 0xdf, 0xef, 0x33, 0xda, 0xd5, 0x9a, 0xcf, 0x8e, 0xde, 0x7a, 0xaa, + 0x13, 0x65, 0x21, 0x8e, 0xa8, 0xc3, 0x12, 0xea, 0x52, 0x12, 0xc9, 0x3b, 0x76, 0xf3, 0x14, 0x8e, + 0x03, 0xfe, 0x8f, 0x97, 0x7f, 0x7f, 0xee, 0xef, 0x89, 0x21, 0xe9, 0x0f, 0xfe, 0x06, 0x00, 0x00, + 0xff, 0xff, 0xb8, 0x8f, 0xed, 0xe0, 0x37, 0x06, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/source/v1/source_context.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/source/v1/source_context.pb.go index dbfa096..81829f6 100644 --- a/vendor/google.golang.org/genproto/googleapis/devtools/source/v1/source_context.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/devtools/source/v1/source_context.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/devtools/source/v1/source_context.proto -// DO NOT EDIT! /* Package source is a generated protocol buffer package. @@ -893,54 +892,55 @@ func init() { func init() { proto.RegisterFile("google/devtools/source/v1/source_context.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 780 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0xcb, 0x4e, 0xdb, 0x4c, - 0x14, 0x8e, 0xe3, 0x90, 0xe0, 0x13, 0x02, 0xd1, 0xfc, 0x7f, 0xab, 0x00, 0x45, 0x80, 0xa5, 0xaa, - 0x48, 0x54, 0x8e, 0x92, 0x4a, 0x55, 0x4b, 0x2b, 0x51, 0x02, 0x29, 0x89, 0xa0, 0x01, 0x4d, 0x29, - 0xbd, 0x6c, 0x22, 0x63, 0x8f, 0x8c, 0x8b, 0xf1, 0x58, 0xb6, 0x13, 0xe0, 0x25, 0xba, 0xe6, 0x19, - 0xfa, 0x4c, 0x7d, 0x84, 0x2e, 0x2b, 0x75, 0x5b, 0xcd, 0xc5, 0x90, 0x84, 0x60, 0x90, 0xda, 0x95, - 0x67, 0x8e, 0xbf, 0xef, 0x3b, 0x67, 0xce, 0x65, 0x06, 0x0c, 0x87, 0x52, 0xc7, 0x23, 0x55, 0x9b, - 0xf4, 0x63, 0x4a, 0xbd, 0xa8, 0x1a, 0xd1, 0x5e, 0x68, 0x91, 0x6a, 0xbf, 0x26, 0x57, 0x5d, 0x8b, - 0xfa, 0x31, 0x39, 0x8f, 0x8d, 0x20, 0xa4, 0x31, 0x45, 0xb3, 0x02, 0x6f, 0x24, 0x78, 0x43, 0xa0, - 0x8c, 0x7e, 0x6d, 0xee, 0x91, 0x94, 0x32, 0x03, 0xb7, 0x6a, 0xfa, 0x3e, 0x8d, 0xcd, 0xd8, 0xa5, - 0x7e, 0x24, 0x88, 0xfa, 0x8f, 0x2c, 0x94, 0xde, 0x73, 0xec, 0xa6, 0x10, 0x44, 0x18, 0xc0, 0xf2, - 0x68, 0xcf, 0xee, 0x86, 0x24, 0xa0, 0x15, 0x65, 0x49, 0x59, 0x29, 0xd6, 0x6b, 0xc6, 0xad, 0xfa, - 0xc6, 0x26, 0x03, 0x63, 0x12, 0xd0, 0x21, 0x99, 0x56, 0x06, 0x6b, 0x56, 0xf2, 0x07, 0x99, 0x30, - 0x23, 0x34, 0xcf, 0x68, 0x78, 0x12, 0x05, 0xa6, 0x45, 0x2a, 0x59, 0x2e, 0xfc, 0xfc, 0x2e, 0xe1, - 0x8f, 0x09, 0x61, 0x54, 0x7d, 0xda, 0x1a, 0xfa, 0x8d, 0x5a, 0x90, 0x77, 0x48, 0x18, 0xba, 0x71, - 0x45, 0xe5, 0xca, 0x46, 0x8a, 0xf2, 0x36, 0x07, 0x8e, 0x2a, 0x4a, 0x3e, 0x5a, 0x07, 0xd5, 0x71, - 0xe3, 0x4a, 0x9e, 0xcb, 0xac, 0xa6, 0xc9, 0xdc, 0xd4, 0x60, 0xcc, 0x86, 0x06, 0x05, 0x59, 0x1d, - 0xfd, 0xa7, 0x02, 0x0f, 0x9a, 0xe7, 0x31, 0xf1, 0x6d, 0x62, 0x0f, 0xa7, 0xb9, 0x71, 0x05, 0x92, - 0x39, 0x5e, 0x49, 0xf1, 0x34, 0x44, 0xc5, 0x09, 0x11, 0x1d, 0x40, 0xde, 0x33, 0x8f, 0x88, 0x17, - 0x55, 0xb2, 0x4b, 0xea, 0x4a, 0xb1, 0xfe, 0x3a, 0x45, 0x62, 0x6c, 0x14, 0xc6, 0x2e, 0xa7, 0x37, - 0xfd, 0x38, 0xbc, 0xc0, 0x52, 0x6b, 0xee, 0x25, 0x14, 0x07, 0xcc, 0xa8, 0x0c, 0xea, 0x09, 0xb9, - 0xe0, 0x41, 0x6a, 0x98, 0x2d, 0xd1, 0xff, 0x30, 0xd1, 0x37, 0xbd, 0x9e, 0xa8, 0xa1, 0x86, 0xc5, - 0x66, 0x2d, 0xfb, 0x42, 0xd1, 0x2f, 0x15, 0x98, 0xda, 0xf0, 0x5c, 0x33, 0x4a, 0x4e, 0xf9, 0x06, - 0x72, 0x27, 0xae, 0x6f, 0x73, 0xf6, 0x74, 0xfd, 0x69, 0x4a, 0x7c, 0x83, 0x34, 0x63, 0xc7, 0xf5, - 0x6d, 0xcc, 0x99, 0x08, 0x41, 0xce, 0x37, 0x4f, 0x13, 0x5f, 0x7c, 0xad, 0xd7, 0x21, 0xc7, 0x10, - 0xa8, 0x00, 0xea, 0x46, 0xe7, 0x73, 0x39, 0x83, 0x34, 0x98, 0x78, 0xdb, 0xfe, 0xd4, 0xdc, 0x2a, - 0x2b, 0xa8, 0x08, 0x85, 0x77, 0x7b, 0x87, 0x1b, 0x8d, 0xdd, 0x66, 0x39, 0xcb, 0xec, 0x7b, 0x07, - 0xad, 0x26, 0x2e, 0xe7, 0xf4, 0x5f, 0x0a, 0x3c, 0x1c, 0xdf, 0xaa, 0x68, 0x0d, 0x0a, 0xac, 0xd7, - 0xbb, 0xae, 0x2d, 0x4b, 0xb1, 0x9c, 0x12, 0x27, 0xa3, 0xb7, 0x6d, 0x9c, 0x0f, 0xf9, 0x17, 0x2d, - 0x43, 0x31, 0x24, 0x7d, 0x37, 0x72, 0xa9, 0xcf, 0xf8, 0x3c, 0xca, 0x56, 0x06, 0x43, 0x62, 0x6c, - 0xdb, 0x68, 0x11, 0xc0, 0x64, 0x87, 0xeb, 0xf2, 0x73, 0xa8, 0x12, 0xa1, 0x71, 0x5b, 0xc7, 0x3c, - 0x25, 0xa8, 0x03, 0x25, 0x01, 0x48, 0x1a, 0x22, 0xc7, 0xa3, 0x78, 0x72, 0xcf, 0x6c, 0xb5, 0x32, - 0x78, 0xca, 0x1c, 0xd8, 0x37, 0x00, 0x26, 0x13, 0xf7, 0xfa, 0x37, 0x05, 0xe6, 0x53, 0x06, 0x09, - 0x75, 0x60, 0xea, 0x6a, 0x26, 0xaf, 0x13, 0xb0, 0x7a, 0xef, 0xb1, 0x6c, 0xdb, 0xb8, 0x78, 0x76, - 0xbd, 0x41, 0x8b, 0x50, 0x8c, 0x7c, 0x33, 0x88, 0x8e, 0x69, 0x7c, 0x95, 0x0f, 0x0c, 0x89, 0xa9, - 0x6d, 0xeb, 0xbf, 0x15, 0xf8, 0x6f, 0xcc, 0xfc, 0xa1, 0x59, 0x98, 0x3c, 0xa6, 0x51, 0xdc, 0xed, - 0x85, 0xae, 0xec, 0xb5, 0x02, 0xdb, 0x7f, 0x08, 0x5d, 0xf4, 0x18, 0xa6, 0xc5, 0x68, 0x76, 0x83, - 0x90, 0x7e, 0x25, 0x56, 0x2c, 0x65, 0x4b, 0xc2, 0xba, 0x2f, 0x8c, 0xa3, 0xa5, 0x50, 0xef, 0x2c, - 0x45, 0xee, 0x1e, 0xa5, 0x98, 0xf8, 0x77, 0xa5, 0x68, 0x42, 0x79, 0xf4, 0xc6, 0x60, 0xc3, 0xd5, - 0x0b, 0xbd, 0x64, 0xb8, 0x7a, 0xa1, 0xc7, 0x12, 0x78, 0xa3, 0xa1, 0x06, 0xcf, 0xa0, 0xf7, 0x21, - 0x2f, 0x7a, 0x10, 0x61, 0x98, 0x91, 0x09, 0xe9, 0x0e, 0xf7, 0x6f, 0xda, 0x55, 0x22, 0xb3, 0x25, - 0x24, 0x5a, 0x19, 0x5c, 0x0a, 0x06, 0x0d, 0x08, 0x81, 0xda, 0x1b, 0xe8, 0x63, 0xb6, 0x69, 0xe4, - 0x20, 0xeb, 0xda, 0xfa, 0x0e, 0x94, 0x86, 0xb8, 0x68, 0x01, 0x20, 0x71, 0x2f, 0x3d, 0x6b, 0x58, - 0x93, 0x96, 0xb6, 0x8d, 0xe6, 0x41, 0xe3, 0x51, 0x0d, 0x4c, 0xef, 0x24, 0x33, 0xb0, 0x3c, 0xeb, - 0x47, 0x50, 0x1e, 0xed, 0xa3, 0xbf, 0x1a, 0xc3, 0x31, 0xb7, 0x44, 0xe3, 0x52, 0x81, 0x05, 0x8b, - 0x9e, 0xde, 0x2e, 0xd2, 0x40, 0x43, 0xc5, 0xd8, 0x67, 0x0f, 0xe2, 0xbe, 0xf2, 0x65, 0x5d, 0x12, - 0x1c, 0xea, 0x99, 0xbe, 0x63, 0xd0, 0xd0, 0xa9, 0x3a, 0xc4, 0xe7, 0xcf, 0x65, 0x55, 0xfc, 0x32, - 0x03, 0x37, 0x1a, 0xf3, 0x34, 0xbf, 0x12, 0xab, 0xef, 0xd9, 0xc5, 0x6d, 0xa1, 0xc0, 0x8f, 0x68, - 0x6c, 0x91, 0xfe, 0x01, 0x77, 0x2c, 0xbc, 0x19, 0x87, 0xb5, 0xa3, 0x3c, 0x57, 0x7b, 0xf6, 0x27, - 0x00, 0x00, 0xff, 0xff, 0x9e, 0xd0, 0x5c, 0x10, 0xe7, 0x07, 0x00, 0x00, + // 800 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0xdd, 0x4e, 0xdb, 0x48, + 0x14, 0x8e, 0xe3, 0x90, 0xe0, 0x13, 0x02, 0xd1, 0xec, 0x8f, 0x02, 0x2c, 0x02, 0x2c, 0xad, 0x16, + 0x89, 0x95, 0xa3, 0x64, 0xa5, 0xd5, 0x2e, 0xad, 0x44, 0x09, 0xa4, 0x24, 0x82, 0x06, 0x34, 0xa5, + 0xf4, 0x47, 0x91, 0x22, 0x63, 0x8f, 0x8c, 0x8b, 0xf1, 0x58, 0xb6, 0x13, 0xe0, 0x25, 0x7a, 0xdd, + 0x67, 0xe8, 0x23, 0xf4, 0x11, 0xfa, 0x0c, 0x7d, 0x84, 0x5e, 0x56, 0xea, 0x6d, 0x35, 0x3f, 0x86, + 0x24, 0x04, 0x83, 0xd4, 0x5e, 0x79, 0xe6, 0xf8, 0xfb, 0xbe, 0x73, 0xe6, 0xfc, 0xcc, 0x80, 0xe1, + 0x50, 0xea, 0x78, 0xa4, 0x6a, 0x93, 0x41, 0x4c, 0xa9, 0x17, 0x55, 0x23, 0xda, 0x0f, 0x2d, 0x52, + 0x1d, 0xd4, 0xe4, 0xaa, 0x67, 0x51, 0x3f, 0x26, 0x97, 0xb1, 0x11, 0x84, 0x34, 0xa6, 0x68, 0x5e, + 0xe0, 0x8d, 0x04, 0x6f, 0x08, 0x94, 0x31, 0xa8, 0x2d, 0xfc, 0x21, 0xa5, 0xcc, 0xc0, 0xad, 0x9a, + 0xbe, 0x4f, 0x63, 0x33, 0x76, 0xa9, 0x1f, 0x09, 0xa2, 0xfe, 0x39, 0x0b, 0xa5, 0xe7, 0x1c, 0xbb, + 0x2d, 0x04, 0x11, 0x06, 0xb0, 0x3c, 0xda, 0xb7, 0x7b, 0x21, 0x09, 0x68, 0x45, 0x59, 0x51, 0xd6, + 0x8a, 0xf5, 0x9a, 0x71, 0xa7, 0xbe, 0xb1, 0xcd, 0xc0, 0x98, 0x04, 0x74, 0x44, 0xa6, 0x95, 0xc1, + 0x9a, 0x95, 0xfc, 0x41, 0x26, 0xcc, 0x09, 0xcd, 0x0b, 0x1a, 0x9e, 0x45, 0x81, 0x69, 0x91, 0x4a, + 0x96, 0x0b, 0xff, 0x7b, 0x9f, 0xf0, 0xcb, 0x84, 0x30, 0xae, 0x3e, 0x6b, 0x8d, 0xfc, 0x46, 0x2d, + 0xc8, 0x3b, 0x24, 0x0c, 0xdd, 0xb8, 0xa2, 0x72, 0x65, 0x23, 0x45, 0x79, 0x97, 0x03, 0xc7, 0x15, + 0x25, 0x1f, 0x6d, 0x82, 0xea, 0xb8, 0x71, 0x25, 0xcf, 0x65, 0xd6, 0xd3, 0x64, 0x6e, 0x6b, 0x30, + 0x66, 0x43, 0x83, 0x82, 0xac, 0x8e, 0xfe, 0x45, 0x81, 0xdf, 0x9a, 0x97, 0x31, 0xf1, 0x6d, 0x62, + 0x8f, 0xa6, 0xb9, 0x71, 0x0d, 0x92, 0x39, 0x5e, 0x4b, 0xf1, 0x34, 0x42, 0xc5, 0x09, 0x11, 0x1d, + 0x41, 0xde, 0x33, 0x4f, 0x88, 0x17, 0x55, 0xb2, 0x2b, 0xea, 0x5a, 0xb1, 0xfe, 0x38, 0x45, 0x62, + 0x62, 0x14, 0xc6, 0x3e, 0xa7, 0x37, 0xfd, 0x38, 0xbc, 0xc2, 0x52, 0x6b, 0xe1, 0x7f, 0x28, 0x0e, + 0x99, 0x51, 0x19, 0xd4, 0x33, 0x72, 0xc5, 0x83, 0xd4, 0x30, 0x5b, 0xa2, 0x5f, 0x61, 0x6a, 0x60, + 0x7a, 0x7d, 0x51, 0x43, 0x0d, 0x8b, 0xcd, 0x46, 0xf6, 0x3f, 0x45, 0x7f, 0xaf, 0xc0, 0xcc, 0x96, + 0xe7, 0x9a, 0x51, 0x72, 0xca, 0x27, 0x90, 0x3b, 0x73, 0x7d, 0x9b, 0xb3, 0x67, 0xeb, 0x7f, 0xa7, + 0xc4, 0x37, 0x4c, 0x33, 0xf6, 0x5c, 0xdf, 0xc6, 0x9c, 0x89, 0x10, 0xe4, 0x7c, 0xf3, 0x3c, 0xf1, + 0xc5, 0xd7, 0x7a, 0x1d, 0x72, 0x0c, 0x81, 0x0a, 0xa0, 0x6e, 0x75, 0x5e, 0x97, 0x33, 0x48, 0x83, + 0xa9, 0xa7, 0xed, 0x57, 0xcd, 0x9d, 0xb2, 0x82, 0x8a, 0x50, 0x78, 0x76, 0x70, 0xbc, 0xd5, 0xd8, + 0x6f, 0x96, 0xb3, 0xcc, 0x7e, 0x70, 0xd4, 0x6a, 0xe2, 0x72, 0x4e, 0xff, 0xaa, 0xc0, 0xef, 0x93, + 0x5b, 0x15, 0x6d, 0x40, 0x81, 0xf5, 0x7a, 0xcf, 0xb5, 0x65, 0x29, 0x56, 0x53, 0xe2, 0x64, 0xf4, + 0xb6, 0x8d, 0xf3, 0x21, 0xff, 0xa2, 0x55, 0x28, 0x86, 0x64, 0xe0, 0x46, 0x2e, 0xf5, 0x19, 0x9f, + 0x47, 0xd9, 0xca, 0x60, 0x48, 0x8c, 0x6d, 0x1b, 0x2d, 0x03, 0x98, 0xec, 0x70, 0x3d, 0x7e, 0x0e, + 0x55, 0x22, 0x34, 0x6e, 0xeb, 0x98, 0xe7, 0x04, 0x75, 0xa0, 0x24, 0x00, 0x49, 0x43, 0xe4, 0x78, + 0x14, 0x7f, 0x3d, 0x30, 0x5b, 0xad, 0x0c, 0x9e, 0x31, 0x87, 0xf6, 0x0d, 0x80, 0xe9, 0xc4, 0xbd, + 0xfe, 0x4e, 0x81, 0xc5, 0x94, 0x41, 0x42, 0x1d, 0x98, 0xb9, 0x9e, 0xc9, 0x9b, 0x04, 0xac, 0x3f, + 0x78, 0x2c, 0xdb, 0x36, 0x2e, 0x5e, 0xdc, 0x6c, 0xd0, 0x32, 0x14, 0x23, 0xdf, 0x0c, 0xa2, 0x53, + 0x1a, 0x5f, 0xe7, 0x03, 0x43, 0x62, 0x6a, 0xdb, 0xfa, 0x37, 0x05, 0x7e, 0x99, 0x30, 0x7f, 0x68, + 0x1e, 0xa6, 0x4f, 0x69, 0x14, 0xf7, 0xfa, 0xa1, 0x2b, 0x7b, 0xad, 0xc0, 0xf6, 0x2f, 0x42, 0x17, + 0xfd, 0x09, 0xb3, 0x62, 0x34, 0x7b, 0x41, 0x48, 0xdf, 0x12, 0x2b, 0x96, 0xb2, 0x25, 0x61, 0x3d, + 0x14, 0xc6, 0xf1, 0x52, 0xa8, 0xf7, 0x96, 0x22, 0xf7, 0x80, 0x52, 0x4c, 0xfd, 0xbc, 0x52, 0x34, + 0xa1, 0x3c, 0x7e, 0x63, 0xb0, 0xe1, 0xea, 0x87, 0x5e, 0x32, 0x5c, 0xfd, 0xd0, 0x63, 0x09, 0xbc, + 0xd5, 0x50, 0xc3, 0x67, 0xd0, 0x07, 0x90, 0x17, 0x3d, 0x88, 0x30, 0xcc, 0xc9, 0x84, 0xf4, 0x46, + 0xfb, 0x37, 0xed, 0x2a, 0x91, 0xd9, 0x12, 0x12, 0xad, 0x0c, 0x2e, 0x05, 0xc3, 0x06, 0x84, 0x40, + 0xed, 0x0f, 0xf5, 0x31, 0xdb, 0x34, 0x72, 0x90, 0x75, 0x6d, 0x7d, 0x0f, 0x4a, 0x23, 0x5c, 0xb4, + 0x04, 0x90, 0xb8, 0x97, 0x9e, 0x35, 0xac, 0x49, 0x4b, 0xdb, 0x46, 0x8b, 0xa0, 0xf1, 0xa8, 0x86, + 0xa6, 0x77, 0x9a, 0x19, 0x58, 0x9e, 0xf5, 0x13, 0x28, 0x8f, 0xf7, 0xd1, 0x0f, 0x8d, 0xe1, 0x84, + 0x5b, 0xa2, 0xf1, 0x51, 0x81, 0x25, 0x8b, 0x9e, 0xdf, 0x2d, 0xd2, 0x40, 0x23, 0xc5, 0x38, 0x64, + 0x0f, 0xe2, 0xa1, 0xf2, 0x66, 0x53, 0x12, 0x1c, 0xea, 0x99, 0xbe, 0x63, 0xd0, 0xd0, 0xa9, 0x3a, + 0xc4, 0xe7, 0xcf, 0x65, 0x55, 0xfc, 0x32, 0x03, 0x37, 0x9a, 0xf0, 0x34, 0x3f, 0x12, 0xab, 0x0f, + 0xd9, 0xe5, 0x5d, 0xa1, 0xc0, 0x8f, 0x68, 0xec, 0x90, 0xc1, 0x11, 0x77, 0x2c, 0xbc, 0x19, 0xc7, + 0xb5, 0x4f, 0x09, 0xa2, 0xcb, 0x11, 0xdd, 0x04, 0xd1, 0x15, 0x88, 0xee, 0x71, 0xed, 0x24, 0xcf, + 0xfd, 0xfd, 0xf3, 0x3d, 0x00, 0x00, 0xff, 0xff, 0x54, 0x77, 0xc5, 0xa9, 0x09, 0x08, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/devtools/sourcerepo/v1/sourcerepo.pb.go b/vendor/google.golang.org/genproto/googleapis/devtools/sourcerepo/v1/sourcerepo.pb.go index 08a34d2..47994ed 100644 --- a/vendor/google.golang.org/genproto/googleapis/devtools/sourcerepo/v1/sourcerepo.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/devtools/sourcerepo/v1/sourcerepo.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/devtools/sourcerepo/v1/sourcerepo.proto -// DO NOT EDIT! /* Package sourcerepo is a generated protocol buffer package. @@ -23,7 +22,6 @@ import proto "github.com/golang/protobuf/proto" import fmt "fmt" import math "math" import _ "google.golang.org/genproto/googleapis/api/annotations" -import _ "google.golang.org/genproto/googleapis/api/serviceconfig" import google_iam_v11 "google.golang.org/genproto/googleapis/iam/v1" import google_iam_v1 "google.golang.org/genproto/googleapis/iam/v1" import google_protobuf1 "github.com/golang/protobuf/ptypes/empty" @@ -47,14 +45,17 @@ const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package // A repository (or repo) is a Git repository storing versioned source content. type Repo struct { // Resource name of the repository, of the form - // `projects//repos/`. + // `projects//repos/`. The repo name may contain slashes. + // eg, `projects/myproject/repos/name/with/slash` Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - // The disk usage of the repo, in bytes. - // Only returned by GetRepo. + // The disk usage of the repo, in bytes. Read-only field. Size is only + // returned by GetRepo. Size int64 `protobuf:"varint,2,opt,name=size" json:"size,omitempty"` // URL to clone the repository from Google Cloud Source Repositories. + // Read-only field. Url string `protobuf:"bytes,3,opt,name=url" json:"url,omitempty"` // How this repository mirrors a repository managed by another service. + // Read-only field. MirrorConfig *MirrorConfig `protobuf:"bytes,4,opt,name=mirror_config,json=mirrorConfig" json:"mirror_config,omitempty"` } @@ -97,7 +98,7 @@ type MirrorConfig struct { // URL of the main repository at the other hosting service. Url string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"` // ID of the webhook listening to updates to trigger mirroring. - // Removing this webook from the other hosting service will stop + // Removing this webhook from the other hosting service will stop // Google Cloud Source Repositories from receiving notifications, // and thereby disabling mirroring. WebhookId string `protobuf:"bytes,2,opt,name=webhook_id,json=webhookId" json:"webhook_id,omitempty"` @@ -584,52 +585,52 @@ var _SourceRepo_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("google/devtools/sourcerepo/v1/sourcerepo.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 748 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x55, 0xd1, 0x4e, 0x13, 0x4d, - 0x14, 0xce, 0xd0, 0x02, 0x7f, 0x0f, 0xe5, 0x07, 0x26, 0x81, 0x34, 0xc5, 0x92, 0xba, 0x28, 0xd6, - 0x12, 0x77, 0x05, 0x35, 0xc4, 0x1a, 0x13, 0x03, 0x9a, 0x86, 0xa8, 0x49, 0x53, 0xb8, 0xf2, 0xa6, - 0xd9, 0xb6, 0x87, 0x65, 0xa5, 0xbb, 0xb3, 0xee, 0x4c, 0xab, 0xd5, 0xa0, 0x09, 0x09, 0xf7, 0x46, - 0x1e, 0xc3, 0xc7, 0xf1, 0x15, 0x7c, 0x08, 0x2f, 0xcd, 0xcc, 0xee, 0xd2, 0x2d, 0xad, 0xed, 0xde, - 0xcd, 0x9c, 0xf3, 0x9d, 0xf3, 0x7d, 0xf3, 0xcd, 0xd9, 0x59, 0xd0, 0x2d, 0xc6, 0xac, 0x0e, 0x1a, - 0x6d, 0xec, 0x09, 0xc6, 0x3a, 0xdc, 0xe0, 0xac, 0xeb, 0xb7, 0xd0, 0x47, 0x8f, 0x19, 0xbd, 0x9d, - 0xd8, 0x4e, 0xf7, 0x7c, 0x26, 0x18, 0x2d, 0x04, 0x78, 0x3d, 0xc2, 0xeb, 0x31, 0x44, 0x6f, 0x27, - 0x7f, 0x2b, 0x6c, 0x67, 0x7a, 0xb6, 0x61, 0xba, 0x2e, 0x13, 0xa6, 0xb0, 0x99, 0xcb, 0x83, 0xe2, - 0xfc, 0x6a, 0x3c, 0xdb, 0x15, 0xa7, 0x61, 0x78, 0x23, 0x0c, 0xdb, 0xa6, 0x23, 0x39, 0x6d, 0xd3, - 0x69, 0x78, 0xac, 0x63, 0xb7, 0xfa, 0x61, 0x3e, 0x3f, 0x9c, 0x1f, 0xca, 0xad, 0x87, 0x39, 0xb5, - 0x6b, 0x76, 0x4f, 0x0c, 0x74, 0x3c, 0x11, 0x26, 0xb5, 0x1f, 0x04, 0xd2, 0x75, 0xf4, 0x18, 0xa5, - 0x90, 0x76, 0x4d, 0x07, 0x73, 0xa4, 0x48, 0x4a, 0x99, 0xba, 0x5a, 0xcb, 0x18, 0xb7, 0x3f, 0x63, - 0x6e, 0xa6, 0x48, 0x4a, 0xa9, 0xba, 0x5a, 0xd3, 0x65, 0x48, 0x75, 0xfd, 0x4e, 0x2e, 0xa5, 0x60, - 0x72, 0x49, 0x6b, 0xb0, 0xe8, 0xd8, 0xbe, 0xcf, 0xfc, 0x46, 0x8b, 0xb9, 0x27, 0xb6, 0x95, 0x4b, - 0x17, 0x49, 0x69, 0x61, 0x77, 0x5b, 0x9f, 0xe8, 0x83, 0xfe, 0x56, 0xd5, 0x1c, 0xa8, 0x92, 0x7a, - 0xd6, 0x89, 0xed, 0xb4, 0x16, 0x64, 0xe3, 0xd9, 0x88, 0x93, 0x0c, 0x38, 0x0b, 0x00, 0x1f, 0xb1, - 0x79, 0xca, 0xd8, 0x59, 0xc3, 0x6e, 0x2b, 0x7d, 0x99, 0x7a, 0x26, 0x8c, 0x1c, 0xb6, 0xa9, 0x06, - 0x8b, 0x6d, 0xf4, 0x3a, 0xac, 0xdf, 0x38, 0xc3, 0xbe, 0x44, 0x04, 0x72, 0x17, 0x82, 0xe0, 0x6b, - 0xec, 0x1f, 0xb6, 0xb5, 0x3b, 0xf0, 0x7f, 0x15, 0x85, 0x3c, 0x7b, 0x1d, 0x3f, 0x74, 0x91, 0x8b, - 0x71, 0x16, 0x68, 0x4d, 0x58, 0x7e, 0x63, 0x73, 0x05, 0xe3, 0x13, 0x70, 0x74, 0x1d, 0x32, 0x9e, - 0x69, 0x61, 0xe3, 0xda, 0xaf, 0xd9, 0xfa, 0x7f, 0x32, 0x70, 0x24, 0x3d, 0x2b, 0x00, 0xa8, 0xa4, - 0x60, 0x67, 0xe8, 0x86, 0x5a, 0x14, 0xfc, 0x58, 0x06, 0xb4, 0x1e, 0xac, 0xc4, 0x38, 0xb8, 0xc7, - 0x5c, 0x8e, 0xf4, 0x29, 0xcc, 0x4a, 0xa7, 0x78, 0x8e, 0x14, 0x53, 0xa5, 0x85, 0xdd, 0xcd, 0x29, - 0x6e, 0xaa, 0x73, 0x04, 0x15, 0x74, 0x0b, 0x96, 0x5c, 0xfc, 0x24, 0x1a, 0x31, 0xce, 0xc0, 0xa1, - 0x45, 0x19, 0xae, 0x5d, 0xf3, 0xb6, 0x61, 0xe5, 0xc0, 0x47, 0x53, 0x60, 0xdc, 0x84, 0x35, 0x98, - 0xf3, 0x4c, 0x1f, 0x5d, 0x11, 0x1e, 0x2f, 0xdc, 0xd1, 0x3d, 0x48, 0xcb, 0xee, 0xaa, 0x53, 0x42, - 0x39, 0xaa, 0x40, 0xbb, 0x07, 0x2b, 0x2f, 0xb1, 0x83, 0xc3, 0x2c, 0x63, 0x2c, 0xdc, 0xfd, 0x33, - 0x0f, 0x70, 0xa4, 0xba, 0xa8, 0x81, 0xbc, 0x22, 0x90, 0xb9, 0xb6, 0x85, 0x1a, 0x53, 0x08, 0x6f, - 0x5e, 0x52, 0xfe, 0x61, 0xf2, 0x82, 0xc0, 0x71, 0x6d, 0xf3, 0xe2, 0xd7, 0xef, 0xab, 0x99, 0x02, - 0x5d, 0x97, 0x5f, 0xd0, 0x17, 0x29, 0xe9, 0xb9, 0xe7, 0xb3, 0xf7, 0xd8, 0x12, 0xdc, 0x28, 0x9f, - 0x1b, 0x81, 0xb7, 0x97, 0x04, 0xe6, 0xc3, 0xb1, 0xa1, 0x0f, 0xa6, 0x50, 0x0c, 0x8f, 0x57, 0x3e, - 0x89, 0x67, 0xda, 0x96, 0x12, 0x51, 0xa4, 0x1b, 0xe3, 0x44, 0x04, 0x1a, 0x8c, 0x72, 0xf9, 0x9c, - 0x7e, 0x27, 0x00, 0x83, 0xcb, 0xa3, 0xd3, 0x4e, 0x3b, 0x72, 0xcf, 0xc9, 0xd4, 0x6c, 0x2b, 0x35, - 0x77, 0xb5, 0x82, 0x52, 0x13, 0x4c, 0xc2, 0xa8, 0x29, 0x15, 0x75, 0xd1, 0xf4, 0x2b, 0xc0, 0xe0, - 0xa2, 0xa7, 0x2a, 0x1a, 0x99, 0x89, 0xfc, 0x5a, 0x54, 0x11, 0x3d, 0x54, 0xfa, 0x2b, 0xf9, 0x50, - 0x45, 0x96, 0x94, 0xa7, 0x59, 0x72, 0x49, 0x20, 0x7b, 0x84, 0xe2, 0xd0, 0x74, 0x6a, 0xea, 0xf9, - 0xa3, 0x5a, 0xd4, 0xd0, 0x36, 0x1d, 0x49, 0x19, 0x4f, 0x46, 0xa4, 0xab, 0x37, 0x30, 0x41, 0x56, - 0xab, 0x28, 0xce, 0xc7, 0x9a, 0xa1, 0x38, 0x7d, 0x0c, 0xb4, 0x8f, 0xe5, 0xad, 0xf0, 0x58, 0xdb, - 0x0a, 0x29, 0xd3, 0x0b, 0x02, 0xd9, 0xea, 0x24, 0x1d, 0xd5, 0xe4, 0x3a, 0xf6, 0x94, 0x8e, 0x1d, - 0x9a, 0x44, 0x87, 0x15, 0xe7, 0xfc, 0x49, 0x80, 0x1e, 0x23, 0x57, 0x11, 0xf4, 0x1d, 0x9b, 0x73, - 0xf9, 0x93, 0xa1, 0xa5, 0x1b, 0x34, 0xa3, 0x90, 0x48, 0xd0, 0xfd, 0x04, 0xc8, 0xf0, 0xc3, 0x79, - 0xa1, 0x44, 0x56, 0xb4, 0x27, 0x09, 0x44, 0x8a, 0x91, 0x36, 0x15, 0x52, 0xde, 0xff, 0x06, 0xb7, - 0x5b, 0xcc, 0x99, 0x3c, 0x31, 0xfb, 0x4b, 0x83, 0xc7, 0xa1, 0x26, 0x27, 0xa4, 0x46, 0xde, 0x55, - 0xc3, 0x0a, 0x8b, 0x75, 0x4c, 0xd7, 0xd2, 0x99, 0x6f, 0x19, 0x16, 0xba, 0x6a, 0x7e, 0x8c, 0x20, - 0x65, 0x7a, 0x36, 0xff, 0xc7, 0x9f, 0xfb, 0xd9, 0x60, 0xd7, 0x9c, 0x53, 0x35, 0x8f, 0xfe, 0x06, - 0x00, 0x00, 0xff, 0xff, 0x30, 0x80, 0x85, 0x9e, 0xec, 0x07, 0x00, 0x00, + // 743 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x55, 0xd1, 0x6e, 0xd3, 0x4a, + 0x10, 0xd5, 0x36, 0x69, 0x7b, 0x33, 0x4d, 0x6f, 0xdb, 0x95, 0x6e, 0x15, 0xa5, 0x37, 0x55, 0xae, + 0x7b, 0x29, 0x21, 0x15, 0x36, 0x2d, 0xa0, 0x8a, 0x20, 0x24, 0xd4, 0x82, 0xa2, 0x0a, 0x90, 0xa2, + 0xb4, 0x4f, 0xbc, 0x44, 0x4e, 0x32, 0x35, 0xa6, 0xb6, 0xd7, 0x78, 0x37, 0x81, 0x80, 0x0a, 0x52, + 0xa5, 0xbe, 0x23, 0xfa, 0x19, 0x7c, 0x0e, 0xbf, 0xc0, 0x47, 0xf0, 0x88, 0x76, 0x6d, 0x37, 0x4e, + 0x13, 0x12, 0xbf, 0xed, 0xce, 0x9c, 0x99, 0x73, 0xf6, 0xec, 0x78, 0x0d, 0xba, 0xc5, 0x98, 0xe5, + 0xa0, 0xd1, 0xc5, 0xbe, 0x60, 0xcc, 0xe1, 0x06, 0x67, 0xbd, 0xa0, 0x83, 0x01, 0xfa, 0xcc, 0xe8, + 0xef, 0x26, 0x76, 0xba, 0x1f, 0x30, 0xc1, 0x68, 0x29, 0xc4, 0xeb, 0x31, 0x5e, 0x4f, 0x20, 0xfa, + 0xbb, 0xc5, 0x7f, 0xa3, 0x76, 0xa6, 0x6f, 0x1b, 0xa6, 0xe7, 0x31, 0x61, 0x0a, 0x9b, 0x79, 0x3c, + 0x2c, 0x2e, 0x6e, 0x46, 0x59, 0xdb, 0x74, 0x65, 0x73, 0xdb, 0x74, 0x5b, 0x3e, 0x73, 0xec, 0xce, + 0x20, 0xca, 0x17, 0x47, 0xf3, 0x23, 0xb9, 0x8d, 0x28, 0xa7, 0x76, 0xed, 0xde, 0xa9, 0x81, 0xae, + 0x2f, 0xa2, 0xa4, 0xf6, 0x8d, 0x40, 0xb6, 0x89, 0x3e, 0xa3, 0x14, 0xb2, 0x9e, 0xe9, 0x62, 0x81, + 0x94, 0x49, 0x25, 0xd7, 0x54, 0x6b, 0x19, 0xe3, 0xf6, 0x47, 0x2c, 0xcc, 0x95, 0x49, 0x25, 0xd3, + 0x54, 0x6b, 0xba, 0x0a, 0x99, 0x5e, 0xe0, 0x14, 0x32, 0x0a, 0x26, 0x97, 0xb4, 0x01, 0xcb, 0xae, + 0x1d, 0x04, 0x2c, 0x68, 0x75, 0x98, 0x77, 0x6a, 0x5b, 0x85, 0x6c, 0x99, 0x54, 0x96, 0xf6, 0x76, + 0xf4, 0xa9, 0x07, 0xd6, 0x5f, 0xa9, 0x9a, 0x43, 0x55, 0xd2, 0xcc, 0xbb, 0x89, 0x9d, 0xd6, 0x81, + 0x7c, 0x32, 0x1b, 0x73, 0x92, 0x21, 0x67, 0x09, 0xe0, 0x3d, 0xb6, 0xdf, 0x30, 0x76, 0xd6, 0xb2, + 0xbb, 0x4a, 0x5f, 0xae, 0x99, 0x8b, 0x22, 0x47, 0x5d, 0xaa, 0xc1, 0x72, 0x17, 0x7d, 0x87, 0x0d, + 0x5a, 0x67, 0x38, 0x90, 0x88, 0x50, 0xee, 0x52, 0x18, 0x7c, 0x81, 0x83, 0xa3, 0xae, 0xf6, 0x3f, + 0xfc, 0x5d, 0x47, 0x21, 0xcf, 0xde, 0xc4, 0x77, 0x3d, 0xe4, 0x62, 0x92, 0x05, 0x5a, 0x1b, 0x56, + 0x5f, 0xda, 0x5c, 0xc1, 0xf8, 0x14, 0x1c, 0xdd, 0x80, 0x9c, 0x6f, 0x5a, 0xd8, 0xba, 0xf6, 0x6b, + 0xbe, 0xf9, 0x97, 0x0c, 0x1c, 0x4b, 0xcf, 0x4a, 0x00, 0x2a, 0x29, 0xd8, 0x19, 0x7a, 0x91, 0x16, + 0x05, 0x3f, 0x91, 0x01, 0xad, 0x0f, 0x6b, 0x09, 0x0e, 0xee, 0x33, 0x8f, 0x23, 0x7d, 0x04, 0xf3, + 0xd2, 0x29, 0x5e, 0x20, 0xe5, 0x4c, 0x65, 0x69, 0x6f, 0x6b, 0x86, 0x9b, 0xea, 0x1c, 0x61, 0x05, + 0xdd, 0x86, 0x15, 0x0f, 0x3f, 0x88, 0x56, 0x82, 0x33, 0x74, 0x68, 0x59, 0x86, 0x1b, 0xd7, 0xbc, + 0x5d, 0x58, 0x3b, 0x0c, 0xd0, 0x14, 0x98, 0x34, 0x61, 0x1d, 0x16, 0x7c, 0x33, 0x40, 0x4f, 0x44, + 0xc7, 0x8b, 0x76, 0x74, 0x1f, 0xb2, 0xb2, 0xbb, 0xea, 0x94, 0x52, 0x8e, 0x2a, 0xd0, 0x6e, 0xc3, + 0xda, 0x33, 0x74, 0x70, 0x94, 0x65, 0x82, 0x85, 0x7b, 0xbf, 0x16, 0x01, 0x8e, 0x55, 0x17, 0x35, + 0x90, 0x57, 0x04, 0x72, 0xd7, 0xb6, 0x50, 0x63, 0x06, 0xe1, 0xcd, 0x4b, 0x2a, 0xde, 0x4b, 0x5f, + 0x10, 0x3a, 0xae, 0x6d, 0x5d, 0xfc, 0xf8, 0x79, 0x35, 0x57, 0xa2, 0x1b, 0xf2, 0x0b, 0xfa, 0x24, + 0x25, 0x3d, 0xf1, 0x03, 0xf6, 0x16, 0x3b, 0x82, 0x1b, 0xd5, 0x73, 0x23, 0xf4, 0xf6, 0x92, 0xc0, + 0x62, 0x34, 0x36, 0xf4, 0xee, 0x0c, 0x8a, 0xd1, 0xf1, 0x2a, 0xa6, 0xf1, 0x4c, 0xdb, 0x56, 0x22, + 0xca, 0x74, 0x73, 0x92, 0x88, 0x50, 0x83, 0x51, 0xad, 0x9e, 0xd3, 0xaf, 0x04, 0x60, 0x78, 0x79, + 0x74, 0xd6, 0x69, 0xc7, 0xee, 0x39, 0x9d, 0x9a, 0x1d, 0xa5, 0xe6, 0x96, 0x56, 0x52, 0x6a, 0xc2, + 0x49, 0x18, 0x37, 0xa5, 0xa6, 0x2e, 0x9a, 0x7e, 0x06, 0x18, 0x5e, 0xf4, 0x4c, 0x45, 0x63, 0x33, + 0x51, 0x5c, 0x8f, 0x2b, 0xe2, 0x87, 0x4a, 0x7f, 0x2e, 0x1f, 0xaa, 0xd8, 0x92, 0xea, 0x2c, 0x4b, + 0x2e, 0x09, 0xe4, 0x8f, 0x51, 0x1c, 0x99, 0x6e, 0x43, 0x3d, 0x7f, 0x54, 0x8b, 0x1b, 0xda, 0xa6, + 0x2b, 0x29, 0x93, 0xc9, 0x98, 0xf4, 0x9f, 0x1b, 0x98, 0x30, 0xab, 0xd5, 0x14, 0xe7, 0x03, 0xcd, + 0x50, 0x9c, 0x01, 0x86, 0xda, 0x27, 0xf2, 0xd6, 0x78, 0xa2, 0x6d, 0x8d, 0x54, 0xe9, 0x05, 0x81, + 0x7c, 0x7d, 0x9a, 0x8e, 0x7a, 0x7a, 0x1d, 0xfb, 0x4a, 0xc7, 0x2e, 0x4d, 0xa3, 0xc3, 0x4a, 0x72, + 0x7e, 0x27, 0x40, 0x4f, 0x90, 0xab, 0x08, 0x06, 0xae, 0xcd, 0xb9, 0xfc, 0x9b, 0xd0, 0xca, 0x0d, + 0x9a, 0x71, 0x48, 0x2c, 0xe8, 0x4e, 0x0a, 0x64, 0xf4, 0xe1, 0x3c, 0x55, 0x22, 0x6b, 0xda, 0xc3, + 0x14, 0x22, 0xc5, 0x58, 0x9b, 0x1a, 0xa9, 0x1e, 0x7c, 0x81, 0xff, 0x3a, 0xcc, 0x9d, 0x3e, 0x31, + 0x07, 0x2b, 0xc3, 0xc7, 0xa1, 0x21, 0x27, 0xa4, 0x41, 0x5e, 0xd7, 0xa3, 0x0a, 0x8b, 0x39, 0xa6, + 0x67, 0xe9, 0x2c, 0xb0, 0x0c, 0x0b, 0x3d, 0x35, 0x3f, 0x46, 0x98, 0x32, 0x7d, 0x9b, 0xff, 0xe1, + 0x17, 0xfd, 0x78, 0xb8, 0x6b, 0x2f, 0xa8, 0x9a, 0xfb, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x31, + 0x75, 0x14, 0x03, 0xd5, 0x07, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/example/library/v1/library.pb.go b/vendor/google.golang.org/genproto/googleapis/example/library/v1/library.pb.go index 5cb297b..5fa9975 100644 --- a/vendor/google.golang.org/genproto/googleapis/example/library/v1/library.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/example/library/v1/library.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/example/library/v1/library.proto -// DO NOT EDIT! /* Package library is a generated protocol buffer package. diff --git a/vendor/google.golang.org/genproto/googleapis/firestore/admin/v1beta1/firestore_admin.pb.go b/vendor/google.golang.org/genproto/googleapis/firestore/admin/v1beta1/firestore_admin.pb.go new file mode 100644 index 0000000..13914e2 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/firestore/admin/v1beta1/firestore_admin.pb.go @@ -0,0 +1,583 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/firestore/admin/v1beta1/firestore_admin.proto + +/* +Package admin is a generated protocol buffer package. + +It is generated from these files: + google/firestore/admin/v1beta1/firestore_admin.proto + google/firestore/admin/v1beta1/index.proto + +It has these top-level messages: + IndexOperationMetadata + Progress + CreateIndexRequest + GetIndexRequest + ListIndexesRequest + DeleteIndexRequest + ListIndexesResponse + IndexField + Index +*/ +package admin + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import google_protobuf2 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf3 "github.com/golang/protobuf/ptypes/timestamp" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// The type of index operation. +type IndexOperationMetadata_OperationType int32 + +const ( + // Unspecified. Never set by server. + IndexOperationMetadata_OPERATION_TYPE_UNSPECIFIED IndexOperationMetadata_OperationType = 0 + // The operation is creating the index. Initiated by a `CreateIndex` call. + IndexOperationMetadata_CREATING_INDEX IndexOperationMetadata_OperationType = 1 +) + +var IndexOperationMetadata_OperationType_name = map[int32]string{ + 0: "OPERATION_TYPE_UNSPECIFIED", + 1: "CREATING_INDEX", +} +var IndexOperationMetadata_OperationType_value = map[string]int32{ + "OPERATION_TYPE_UNSPECIFIED": 0, + "CREATING_INDEX": 1, +} + +func (x IndexOperationMetadata_OperationType) String() string { + return proto.EnumName(IndexOperationMetadata_OperationType_name, int32(x)) +} +func (IndexOperationMetadata_OperationType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{0, 0} +} + +// Metadata for index operations. This metadata populates +// the metadata field of [google.longrunning.Operation][google.longrunning.Operation]. +type IndexOperationMetadata struct { + // The time that work began on the operation. + StartTime *google_protobuf3.Timestamp `protobuf:"bytes,1,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // The time the operation ended, either successfully or otherwise. Unset if + // the operation is still active. + EndTime *google_protobuf3.Timestamp `protobuf:"bytes,2,opt,name=end_time,json=endTime" json:"end_time,omitempty"` + // The index resource that this operation is acting on. For example: + // `projects/{project_id}/databases/{database_id}/indexes/{index_id}` + Index string `protobuf:"bytes,3,opt,name=index" json:"index,omitempty"` + // The type of index operation. + OperationType IndexOperationMetadata_OperationType `protobuf:"varint,4,opt,name=operation_type,json=operationType,enum=google.firestore.admin.v1beta1.IndexOperationMetadata_OperationType" json:"operation_type,omitempty"` + // True if the [google.longrunning.Operation] was cancelled. If the + // cancellation is in progress, cancelled will be true but + // [google.longrunning.Operation.done][google.longrunning.Operation.done] will be false. + Cancelled bool `protobuf:"varint,5,opt,name=cancelled" json:"cancelled,omitempty"` + // Progress of the existing operation, measured in number of documents. + DocumentProgress *Progress `protobuf:"bytes,6,opt,name=document_progress,json=documentProgress" json:"document_progress,omitempty"` +} + +func (m *IndexOperationMetadata) Reset() { *m = IndexOperationMetadata{} } +func (m *IndexOperationMetadata) String() string { return proto.CompactTextString(m) } +func (*IndexOperationMetadata) ProtoMessage() {} +func (*IndexOperationMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *IndexOperationMetadata) GetStartTime() *google_protobuf3.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *IndexOperationMetadata) GetEndTime() *google_protobuf3.Timestamp { + if m != nil { + return m.EndTime + } + return nil +} + +func (m *IndexOperationMetadata) GetIndex() string { + if m != nil { + return m.Index + } + return "" +} + +func (m *IndexOperationMetadata) GetOperationType() IndexOperationMetadata_OperationType { + if m != nil { + return m.OperationType + } + return IndexOperationMetadata_OPERATION_TYPE_UNSPECIFIED +} + +func (m *IndexOperationMetadata) GetCancelled() bool { + if m != nil { + return m.Cancelled + } + return false +} + +func (m *IndexOperationMetadata) GetDocumentProgress() *Progress { + if m != nil { + return m.DocumentProgress + } + return nil +} + +// Measures the progress of a particular metric. +type Progress struct { + // An estimate of how much work has been completed. Note that this may be + // greater than `work_estimated`. + WorkCompleted int64 `protobuf:"varint,1,opt,name=work_completed,json=workCompleted" json:"work_completed,omitempty"` + // An estimate of how much work needs to be performed. Zero if the + // work estimate is unavailable. May change as work progresses. + WorkEstimated int64 `protobuf:"varint,2,opt,name=work_estimated,json=workEstimated" json:"work_estimated,omitempty"` +} + +func (m *Progress) Reset() { *m = Progress{} } +func (m *Progress) String() string { return proto.CompactTextString(m) } +func (*Progress) ProtoMessage() {} +func (*Progress) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *Progress) GetWorkCompleted() int64 { + if m != nil { + return m.WorkCompleted + } + return 0 +} + +func (m *Progress) GetWorkEstimated() int64 { + if m != nil { + return m.WorkEstimated + } + return 0 +} + +// The request for [FirestoreAdmin.CreateIndex][google.firestore.admin.v1beta1.FirestoreAdmin.CreateIndex]. +type CreateIndexRequest struct { + // The name of the database this index will apply to. For example: + // `projects/{project_id}/databases/{database_id}` + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The index to create. The name and state fields are output only and will be + // ignored. Certain single field indexes cannot be created or deleted. + Index *Index `protobuf:"bytes,2,opt,name=index" json:"index,omitempty"` +} + +func (m *CreateIndexRequest) Reset() { *m = CreateIndexRequest{} } +func (m *CreateIndexRequest) String() string { return proto.CompactTextString(m) } +func (*CreateIndexRequest) ProtoMessage() {} +func (*CreateIndexRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *CreateIndexRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateIndexRequest) GetIndex() *Index { + if m != nil { + return m.Index + } + return nil +} + +// The request for [FirestoreAdmin.GetIndex][google.firestore.admin.v1beta1.FirestoreAdmin.GetIndex]. +type GetIndexRequest struct { + // The name of the index. For example: + // `projects/{project_id}/databases/{database_id}/indexes/{index_id}` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetIndexRequest) Reset() { *m = GetIndexRequest{} } +func (m *GetIndexRequest) String() string { return proto.CompactTextString(m) } +func (*GetIndexRequest) ProtoMessage() {} +func (*GetIndexRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *GetIndexRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The request for [FirestoreAdmin.ListIndexes][google.firestore.admin.v1beta1.FirestoreAdmin.ListIndexes]. +type ListIndexesRequest struct { + // The database name. For example: + // `projects/{project_id}/databases/{database_id}` + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + Filter string `protobuf:"bytes,2,opt,name=filter" json:"filter,omitempty"` + // The standard List page size. + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // The standard List page token. + PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListIndexesRequest) Reset() { *m = ListIndexesRequest{} } +func (m *ListIndexesRequest) String() string { return proto.CompactTextString(m) } +func (*ListIndexesRequest) ProtoMessage() {} +func (*ListIndexesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *ListIndexesRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListIndexesRequest) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +func (m *ListIndexesRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListIndexesRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// The request for [FirestoreAdmin.DeleteIndex][google.firestore.admin.v1beta1.FirestoreAdmin.DeleteIndex]. +type DeleteIndexRequest struct { + // The index name. For example: + // `projects/{project_id}/databases/{database_id}/indexes/{index_id}` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteIndexRequest) Reset() { *m = DeleteIndexRequest{} } +func (m *DeleteIndexRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteIndexRequest) ProtoMessage() {} +func (*DeleteIndexRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *DeleteIndexRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The response for [FirestoreAdmin.ListIndexes][google.firestore.admin.v1beta1.FirestoreAdmin.ListIndexes]. +type ListIndexesResponse struct { + // The indexes. + Indexes []*Index `protobuf:"bytes,1,rep,name=indexes" json:"indexes,omitempty"` + // The standard List next-page token. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListIndexesResponse) Reset() { *m = ListIndexesResponse{} } +func (m *ListIndexesResponse) String() string { return proto.CompactTextString(m) } +func (*ListIndexesResponse) ProtoMessage() {} +func (*ListIndexesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *ListIndexesResponse) GetIndexes() []*Index { + if m != nil { + return m.Indexes + } + return nil +} + +func (m *ListIndexesResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +func init() { + proto.RegisterType((*IndexOperationMetadata)(nil), "google.firestore.admin.v1beta1.IndexOperationMetadata") + proto.RegisterType((*Progress)(nil), "google.firestore.admin.v1beta1.Progress") + proto.RegisterType((*CreateIndexRequest)(nil), "google.firestore.admin.v1beta1.CreateIndexRequest") + proto.RegisterType((*GetIndexRequest)(nil), "google.firestore.admin.v1beta1.GetIndexRequest") + proto.RegisterType((*ListIndexesRequest)(nil), "google.firestore.admin.v1beta1.ListIndexesRequest") + proto.RegisterType((*DeleteIndexRequest)(nil), "google.firestore.admin.v1beta1.DeleteIndexRequest") + proto.RegisterType((*ListIndexesResponse)(nil), "google.firestore.admin.v1beta1.ListIndexesResponse") + proto.RegisterEnum("google.firestore.admin.v1beta1.IndexOperationMetadata_OperationType", IndexOperationMetadata_OperationType_name, IndexOperationMetadata_OperationType_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for FirestoreAdmin service + +type FirestoreAdminClient interface { + // Creates the specified index. + // A newly created index's initial state is `CREATING`. On completion of the + // returned [google.longrunning.Operation][google.longrunning.Operation], the state will be `READY`. + // If the index already exists, the call will return an `ALREADY_EXISTS` + // status. + // + // During creation, the process could result in an error, in which case the + // index will move to the `ERROR` state. The process can be recovered by + // fixing the data that caused the error, removing the index with + // [delete][google.firestore.admin.v1beta1.FirestoreAdmin.DeleteIndex], then re-creating the index with + // [create][google.firestore.admin.v1beta1.FirestoreAdmin.CreateIndex]. + // + // Indexes with a single field cannot be created. + CreateIndex(ctx context.Context, in *CreateIndexRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Lists the indexes that match the specified filters. + ListIndexes(ctx context.Context, in *ListIndexesRequest, opts ...grpc.CallOption) (*ListIndexesResponse, error) + // Gets an index. + GetIndex(ctx context.Context, in *GetIndexRequest, opts ...grpc.CallOption) (*Index, error) + // Deletes an index. + DeleteIndex(ctx context.Context, in *DeleteIndexRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) +} + +type firestoreAdminClient struct { + cc *grpc.ClientConn +} + +func NewFirestoreAdminClient(cc *grpc.ClientConn) FirestoreAdminClient { + return &firestoreAdminClient{cc} +} + +func (c *firestoreAdminClient) CreateIndex(ctx context.Context, in *CreateIndexRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.firestore.admin.v1beta1.FirestoreAdmin/CreateIndex", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *firestoreAdminClient) ListIndexes(ctx context.Context, in *ListIndexesRequest, opts ...grpc.CallOption) (*ListIndexesResponse, error) { + out := new(ListIndexesResponse) + err := grpc.Invoke(ctx, "/google.firestore.admin.v1beta1.FirestoreAdmin/ListIndexes", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *firestoreAdminClient) GetIndex(ctx context.Context, in *GetIndexRequest, opts ...grpc.CallOption) (*Index, error) { + out := new(Index) + err := grpc.Invoke(ctx, "/google.firestore.admin.v1beta1.FirestoreAdmin/GetIndex", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *firestoreAdminClient) DeleteIndex(ctx context.Context, in *DeleteIndexRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) { + out := new(google_protobuf2.Empty) + err := grpc.Invoke(ctx, "/google.firestore.admin.v1beta1.FirestoreAdmin/DeleteIndex", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for FirestoreAdmin service + +type FirestoreAdminServer interface { + // Creates the specified index. + // A newly created index's initial state is `CREATING`. On completion of the + // returned [google.longrunning.Operation][google.longrunning.Operation], the state will be `READY`. + // If the index already exists, the call will return an `ALREADY_EXISTS` + // status. + // + // During creation, the process could result in an error, in which case the + // index will move to the `ERROR` state. The process can be recovered by + // fixing the data that caused the error, removing the index with + // [delete][google.firestore.admin.v1beta1.FirestoreAdmin.DeleteIndex], then re-creating the index with + // [create][google.firestore.admin.v1beta1.FirestoreAdmin.CreateIndex]. + // + // Indexes with a single field cannot be created. + CreateIndex(context.Context, *CreateIndexRequest) (*google_longrunning.Operation, error) + // Lists the indexes that match the specified filters. + ListIndexes(context.Context, *ListIndexesRequest) (*ListIndexesResponse, error) + // Gets an index. + GetIndex(context.Context, *GetIndexRequest) (*Index, error) + // Deletes an index. + DeleteIndex(context.Context, *DeleteIndexRequest) (*google_protobuf2.Empty, error) +} + +func RegisterFirestoreAdminServer(s *grpc.Server, srv FirestoreAdminServer) { + s.RegisterService(&_FirestoreAdmin_serviceDesc, srv) +} + +func _FirestoreAdmin_CreateIndex_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateIndexRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FirestoreAdminServer).CreateIndex(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.firestore.admin.v1beta1.FirestoreAdmin/CreateIndex", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FirestoreAdminServer).CreateIndex(ctx, req.(*CreateIndexRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _FirestoreAdmin_ListIndexes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListIndexesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FirestoreAdminServer).ListIndexes(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.firestore.admin.v1beta1.FirestoreAdmin/ListIndexes", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FirestoreAdminServer).ListIndexes(ctx, req.(*ListIndexesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _FirestoreAdmin_GetIndex_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetIndexRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FirestoreAdminServer).GetIndex(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.firestore.admin.v1beta1.FirestoreAdmin/GetIndex", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FirestoreAdminServer).GetIndex(ctx, req.(*GetIndexRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _FirestoreAdmin_DeleteIndex_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteIndexRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FirestoreAdminServer).DeleteIndex(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.firestore.admin.v1beta1.FirestoreAdmin/DeleteIndex", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FirestoreAdminServer).DeleteIndex(ctx, req.(*DeleteIndexRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _FirestoreAdmin_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.firestore.admin.v1beta1.FirestoreAdmin", + HandlerType: (*FirestoreAdminServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateIndex", + Handler: _FirestoreAdmin_CreateIndex_Handler, + }, + { + MethodName: "ListIndexes", + Handler: _FirestoreAdmin_ListIndexes_Handler, + }, + { + MethodName: "GetIndex", + Handler: _FirestoreAdmin_GetIndex_Handler, + }, + { + MethodName: "DeleteIndex", + Handler: _FirestoreAdmin_DeleteIndex_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/firestore/admin/v1beta1/firestore_admin.proto", +} + +func init() { + proto.RegisterFile("google/firestore/admin/v1beta1/firestore_admin.proto", fileDescriptor0) +} + +var fileDescriptor0 = []byte{ + // 841 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x55, 0xdd, 0x6e, 0xe3, 0x44, + 0x14, 0xc6, 0xe9, 0xcf, 0x26, 0xa7, 0x6a, 0xb6, 0xcc, 0xa2, 0x2a, 0xf2, 0xfe, 0x10, 0x19, 0x8a, + 0xa2, 0x5c, 0xd8, 0x34, 0x0b, 0x12, 0xcb, 0x0a, 0xad, 0x5a, 0xd7, 0xad, 0x22, 0x41, 0x1b, 0xb9, + 0x59, 0xb4, 0x70, 0x63, 0x4d, 0xe3, 0x53, 0xcb, 0xd4, 0x9e, 0x31, 0x9e, 0x09, 0x6c, 0x17, 0x2d, + 0x42, 0xbc, 0xc2, 0xde, 0xee, 0x0d, 0x5c, 0x72, 0x81, 0x78, 0x0b, 0x1e, 0x80, 0x57, 0xe0, 0x41, + 0x90, 0xc7, 0x9e, 0x34, 0xd9, 0x6e, 0x71, 0x7b, 0x97, 0xf3, 0xcd, 0xf9, 0xbe, 0xf3, 0x9d, 0x39, + 0xc7, 0x13, 0xf8, 0x24, 0xe2, 0x3c, 0x4a, 0xd0, 0x39, 0x8d, 0x73, 0x14, 0x92, 0xe7, 0xe8, 0xd0, + 0x30, 0x8d, 0x99, 0xf3, 0xc3, 0xf6, 0x09, 0x4a, 0xba, 0x7d, 0x81, 0x07, 0x0a, 0xb7, 0xb3, 0x9c, + 0x4b, 0x4e, 0x1e, 0x94, 0x2c, 0x7b, 0x76, 0x6a, 0x97, 0xa7, 0x15, 0xcb, 0xbc, 0x57, 0xa9, 0xd2, + 0x2c, 0x76, 0x28, 0x63, 0x5c, 0x52, 0x19, 0x73, 0x26, 0x4a, 0xb6, 0xd9, 0xaf, 0xa9, 0x19, 0xb3, + 0x10, 0x9f, 0x57, 0xb9, 0x1f, 0x54, 0xb9, 0x09, 0x67, 0x51, 0x3e, 0x65, 0x2c, 0x66, 0x91, 0xc3, + 0x33, 0xcc, 0x17, 0x04, 0xef, 0x56, 0x49, 0x2a, 0x3a, 0x99, 0x9e, 0x3a, 0x98, 0x66, 0xf2, 0xbc, + 0x3a, 0x7c, 0xff, 0xcd, 0x43, 0x19, 0xa7, 0x28, 0x24, 0x4d, 0xb3, 0x32, 0xc1, 0xfa, 0x7b, 0x09, + 0x36, 0x87, 0x45, 0xc9, 0x23, 0xad, 0xfb, 0x15, 0x4a, 0x1a, 0x52, 0x49, 0xc9, 0x23, 0x00, 0x21, + 0x69, 0x2e, 0x83, 0x82, 0xd3, 0x31, 0xba, 0x46, 0x6f, 0x6d, 0x60, 0xda, 0x55, 0xf3, 0x5a, 0xd0, + 0x1e, 0x6b, 0x41, 0xbf, 0xa5, 0xb2, 0x8b, 0x98, 0x7c, 0x0a, 0x4d, 0x64, 0x61, 0x49, 0x6c, 0xd4, + 0x12, 0x6f, 0x21, 0x0b, 0x15, 0xed, 0x3d, 0x58, 0x51, 0xed, 0x77, 0x96, 0xba, 0x46, 0xaf, 0xe5, + 0x97, 0x01, 0x39, 0x83, 0xf6, 0xac, 0xe9, 0x40, 0x9e, 0x67, 0xd8, 0x59, 0xee, 0x1a, 0xbd, 0xf6, + 0x60, 0xcf, 0xfe, 0xff, 0x41, 0xd8, 0x6f, 0xef, 0xcb, 0x9e, 0x21, 0xe3, 0xf3, 0x0c, 0xfd, 0x75, + 0x3e, 0x1f, 0x92, 0x7b, 0xd0, 0x9a, 0x50, 0x36, 0xc1, 0x24, 0xc1, 0xb0, 0xb3, 0xd2, 0x35, 0x7a, + 0x4d, 0xff, 0x02, 0x20, 0x4f, 0xe1, 0xdd, 0x90, 0x4f, 0xa6, 0x29, 0x32, 0x19, 0x64, 0x39, 0x8f, + 0x72, 0x14, 0xa2, 0xb3, 0xaa, 0x1a, 0xec, 0xd5, 0xb9, 0x19, 0x55, 0xf9, 0xfe, 0x86, 0x96, 0xd0, + 0x88, 0xe5, 0xc2, 0xfa, 0x82, 0x29, 0xf2, 0x00, 0xcc, 0xa3, 0x91, 0xe7, 0xef, 0x8c, 0x87, 0x47, + 0x87, 0xc1, 0xf8, 0x9b, 0x91, 0x17, 0x3c, 0x3d, 0x3c, 0x1e, 0x79, 0xee, 0x70, 0x7f, 0xe8, 0xed, + 0x6d, 0xbc, 0x43, 0x08, 0xb4, 0x5d, 0xdf, 0xdb, 0x19, 0x0f, 0x0f, 0x0f, 0x82, 0xe1, 0xe1, 0x9e, + 0xf7, 0x6c, 0xc3, 0xb0, 0x9e, 0x41, 0x53, 0x0b, 0x92, 0x2d, 0x68, 0xff, 0xc8, 0xf3, 0xb3, 0x60, + 0xc2, 0xd3, 0x2c, 0x41, 0x89, 0xa1, 0x1a, 0xdf, 0x92, 0xbf, 0x5e, 0xa0, 0xae, 0x06, 0x67, 0x69, + 0x28, 0x64, 0x9c, 0xd2, 0x22, 0xad, 0x71, 0x91, 0xe6, 0x69, 0xd0, 0x8a, 0x81, 0xb8, 0x39, 0x52, + 0x89, 0xea, 0x42, 0x7d, 0xfc, 0x7e, 0x8a, 0x42, 0x92, 0x4d, 0x58, 0xcd, 0x68, 0x8e, 0x4c, 0x2a, + 0xed, 0x96, 0x5f, 0x45, 0xe4, 0xb1, 0x1e, 0x62, 0x39, 0xf8, 0xad, 0x6b, 0x4d, 0xa9, 0x9a, 0xb5, + 0xb5, 0x05, 0xb7, 0x0f, 0x50, 0x2e, 0xd4, 0x21, 0xb0, 0xcc, 0x68, 0xb5, 0x80, 0x2d, 0x5f, 0xfd, + 0xb6, 0x7e, 0x31, 0x80, 0x7c, 0x19, 0x8b, 0x32, 0x11, 0x45, 0x9d, 0xa5, 0x4d, 0x58, 0x3d, 0x8d, + 0x13, 0x89, 0xb9, 0xf2, 0xd4, 0xf2, 0xab, 0x88, 0xdc, 0x85, 0x56, 0x46, 0x23, 0x0c, 0x44, 0xfc, + 0x02, 0xd5, 0xce, 0xad, 0xf8, 0xcd, 0x02, 0x38, 0x8e, 0x5f, 0x20, 0xb9, 0x0f, 0xa0, 0x0e, 0x25, + 0x3f, 0x43, 0xa6, 0x56, 0xae, 0xe5, 0xab, 0xf4, 0x71, 0x01, 0x58, 0x3d, 0x20, 0x7b, 0x58, 0x5c, + 0x63, 0xad, 0xd9, 0x9f, 0xe1, 0xce, 0x82, 0x57, 0x91, 0x71, 0x26, 0x90, 0x3c, 0x81, 0x5b, 0x71, + 0x09, 0x75, 0x8c, 0xee, 0xd2, 0xf5, 0x6f, 0x4a, 0xb3, 0xc8, 0x47, 0x70, 0x9b, 0xe1, 0x73, 0x19, + 0xcc, 0xb9, 0x2c, 0xdb, 0x5b, 0x2f, 0xe0, 0x91, 0x76, 0x3a, 0x78, 0xbd, 0x02, 0xed, 0x7d, 0x2d, + 0xb9, 0x53, 0x28, 0x92, 0xdf, 0x0c, 0x58, 0x9b, 0x1b, 0x29, 0x19, 0xd4, 0x95, 0xbe, 0x3c, 0x7f, + 0xf3, 0xbe, 0xe6, 0xcc, 0xbd, 0x4e, 0x17, 0xdf, 0x96, 0xf5, 0xe4, 0xd7, 0x7f, 0xfe, 0x7d, 0xd5, + 0x78, 0x64, 0x7d, 0x3c, 0x7b, 0xd9, 0x7e, 0x2a, 0xa7, 0xf1, 0x45, 0x96, 0xf3, 0xef, 0x70, 0x22, + 0x85, 0xd3, 0x77, 0x8a, 0xef, 0xf1, 0x84, 0x0a, 0x14, 0x4e, 0xff, 0xa5, 0x53, 0xf5, 0xf5, 0x79, + 0xf5, 0xd9, 0xff, 0x65, 0xc0, 0xda, 0xdc, 0xbd, 0xd5, 0x7b, 0xbc, 0xbc, 0x10, 0xe6, 0xc3, 0x1b, + 0x71, 0xca, 0xc1, 0x58, 0x9f, 0x29, 0xe7, 0x03, 0x72, 0x63, 0xe7, 0xe4, 0xb5, 0x01, 0x4d, 0xbd, + 0xbe, 0xc4, 0xa9, 0xab, 0xfd, 0xc6, 0xa2, 0x9b, 0xd7, 0x9b, 0xff, 0xdb, 0xec, 0x15, 0x6b, 0x76, + 0x85, 0x39, 0xed, 0xcd, 0xe9, 0xbf, 0x24, 0xaf, 0x0c, 0x58, 0x9b, 0xdb, 0xd9, 0xfa, 0x1b, 0xbd, + 0xbc, 0xe0, 0xe6, 0xe6, 0xa5, 0x77, 0xdc, 0x2b, 0xfe, 0x6e, 0xb4, 0xab, 0xfe, 0x8d, 0x5d, 0xed, + 0xfe, 0x69, 0x80, 0x35, 0xe1, 0x69, 0x8d, 0x97, 0xdd, 0x3b, 0x8b, 0x2b, 0x3c, 0x2a, 0xca, 0x8f, + 0x8c, 0x6f, 0xdd, 0x8a, 0x16, 0xf1, 0x84, 0xb2, 0xc8, 0xe6, 0x79, 0xe4, 0x44, 0xc8, 0x94, 0x39, + 0xa7, 0x3c, 0xa2, 0x59, 0x2c, 0xae, 0xfa, 0xb7, 0x7d, 0xac, 0xa2, 0xdf, 0x1b, 0xcb, 0x07, 0xee, + 0xfe, 0xf1, 0x1f, 0x8d, 0x0f, 0x0f, 0x4a, 0x31, 0x37, 0xe1, 0xd3, 0xd0, 0x9e, 0x15, 0xb4, 0x55, + 0x45, 0xfb, 0xeb, 0xed, 0xdd, 0x82, 0x73, 0xb2, 0xaa, 0xd4, 0x1f, 0xfe, 0x17, 0x00, 0x00, 0xff, + 0xff, 0x6b, 0x78, 0x44, 0x07, 0x3e, 0x08, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/firestore/admin/v1beta1/index.pb.go b/vendor/google.golang.org/genproto/googleapis/firestore/admin/v1beta1/index.pb.go new file mode 100644 index 0000000..609b679 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/firestore/admin/v1beta1/index.pb.go @@ -0,0 +1,205 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/firestore/admin/v1beta1/index.proto + +package admin + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// The mode determines how a field is indexed. +type IndexField_Mode int32 + +const ( + // The mode is unspecified. + IndexField_MODE_UNSPECIFIED IndexField_Mode = 0 + // The field's values are indexed so as to support sequencing in + // ascending order and also query by <, >, <=, >=, and =. + IndexField_ASCENDING IndexField_Mode = 2 + // The field's values are indexed so as to support sequencing in + // descending order and also query by <, >, <=, >=, and =. + IndexField_DESCENDING IndexField_Mode = 3 +) + +var IndexField_Mode_name = map[int32]string{ + 0: "MODE_UNSPECIFIED", + 2: "ASCENDING", + 3: "DESCENDING", +} +var IndexField_Mode_value = map[string]int32{ + "MODE_UNSPECIFIED": 0, + "ASCENDING": 2, + "DESCENDING": 3, +} + +func (x IndexField_Mode) String() string { + return proto.EnumName(IndexField_Mode_name, int32(x)) +} +func (IndexField_Mode) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{0, 0} } + +// The state of an index. During index creation, an index will be in the +// `CREATING` state. If the index is created successfully, it will transition +// to the `READY` state. If the index is not able to be created, it will +// transition to the `ERROR` state. +type Index_State int32 + +const ( + // The state is unspecified. + Index_STATE_UNSPECIFIED Index_State = 0 + // The index is being created. + // There is an active long-running operation for the index. + // The index is updated when writing a document. + // Some index data may exist. + Index_CREATING Index_State = 3 + // The index is ready to be used. + // The index is updated when writing a document. + // The index is fully populated from all stored documents it applies to. + Index_READY Index_State = 2 + // The index was being created, but something went wrong. + // There is no active long-running operation for the index, + // and the most recently finished long-running operation failed. + // The index is not updated when writing a document. + // Some index data may exist. + Index_ERROR Index_State = 5 +) + +var Index_State_name = map[int32]string{ + 0: "STATE_UNSPECIFIED", + 3: "CREATING", + 2: "READY", + 5: "ERROR", +} +var Index_State_value = map[string]int32{ + "STATE_UNSPECIFIED": 0, + "CREATING": 3, + "READY": 2, + "ERROR": 5, +} + +func (x Index_State) String() string { + return proto.EnumName(Index_State_name, int32(x)) +} +func (Index_State) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{1, 0} } + +// A field of an index. +type IndexField struct { + // The path of the field. Must match the field path specification described + // by [google.firestore.v1beta1.Document.fields][fields]. + // Special field path `__name__` may be used by itself or at the end of a + // path. `__type__` may be used only at the end of path. + FieldPath string `protobuf:"bytes,1,opt,name=field_path,json=fieldPath" json:"field_path,omitempty"` + // The field's mode. + Mode IndexField_Mode `protobuf:"varint,2,opt,name=mode,enum=google.firestore.admin.v1beta1.IndexField_Mode" json:"mode,omitempty"` +} + +func (m *IndexField) Reset() { *m = IndexField{} } +func (m *IndexField) String() string { return proto.CompactTextString(m) } +func (*IndexField) ProtoMessage() {} +func (*IndexField) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *IndexField) GetFieldPath() string { + if m != nil { + return m.FieldPath + } + return "" +} + +func (m *IndexField) GetMode() IndexField_Mode { + if m != nil { + return m.Mode + } + return IndexField_MODE_UNSPECIFIED +} + +// An index definition. +type Index struct { + // The resource name of the index. + // Output only. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The collection ID to which this index applies. Required. + CollectionId string `protobuf:"bytes,2,opt,name=collection_id,json=collectionId" json:"collection_id,omitempty"` + // The fields to index. + Fields []*IndexField `protobuf:"bytes,3,rep,name=fields" json:"fields,omitempty"` + // The state of the index. + // Output only. + State Index_State `protobuf:"varint,6,opt,name=state,enum=google.firestore.admin.v1beta1.Index_State" json:"state,omitempty"` +} + +func (m *Index) Reset() { *m = Index{} } +func (m *Index) String() string { return proto.CompactTextString(m) } +func (*Index) ProtoMessage() {} +func (*Index) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +func (m *Index) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Index) GetCollectionId() string { + if m != nil { + return m.CollectionId + } + return "" +} + +func (m *Index) GetFields() []*IndexField { + if m != nil { + return m.Fields + } + return nil +} + +func (m *Index) GetState() Index_State { + if m != nil { + return m.State + } + return Index_STATE_UNSPECIFIED +} + +func init() { + proto.RegisterType((*IndexField)(nil), "google.firestore.admin.v1beta1.IndexField") + proto.RegisterType((*Index)(nil), "google.firestore.admin.v1beta1.Index") + proto.RegisterEnum("google.firestore.admin.v1beta1.IndexField_Mode", IndexField_Mode_name, IndexField_Mode_value) + proto.RegisterEnum("google.firestore.admin.v1beta1.Index_State", Index_State_name, Index_State_value) +} + +func init() { proto.RegisterFile("google/firestore/admin/v1beta1/index.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 422 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x52, 0x4f, 0x8b, 0x13, 0x31, + 0x1c, 0x75, 0xa6, 0x9d, 0xe2, 0xfc, 0xdc, 0x5d, 0xc6, 0xa0, 0x50, 0x44, 0xa5, 0x8c, 0x1e, 0xca, + 0x0a, 0x19, 0xba, 0x1e, 0xf7, 0x34, 0xff, 0x5a, 0xe6, 0xb0, 0xdd, 0x92, 0xa9, 0x82, 0x5e, 0x4a, + 0xb6, 0xc9, 0xce, 0x06, 0xa6, 0x49, 0x99, 0x89, 0xe2, 0x77, 0xf0, 0x5b, 0x08, 0x5e, 0x04, 0xbf, + 0xa3, 0x24, 0x33, 0x74, 0x41, 0xd0, 0xed, 0xed, 0xf7, 0x92, 0xf7, 0x5e, 0xde, 0x4b, 0x02, 0xe7, + 0x95, 0x52, 0x55, 0xcd, 0xa3, 0x5b, 0xd1, 0xf0, 0x56, 0xab, 0x86, 0x47, 0x94, 0xed, 0x84, 0x8c, + 0xbe, 0xce, 0x6e, 0xb8, 0xa6, 0xb3, 0x48, 0x48, 0xc6, 0xbf, 0xe1, 0x7d, 0xa3, 0xb4, 0x42, 0xaf, + 0x3b, 0x2e, 0x3e, 0x70, 0xb1, 0xe5, 0xe2, 0x9e, 0xfb, 0xe2, 0x65, 0xef, 0x45, 0xf7, 0x22, 0xa2, + 0x52, 0x2a, 0x4d, 0xb5, 0x50, 0xb2, 0xed, 0xd4, 0xe1, 0x6f, 0x07, 0xa0, 0x30, 0x6e, 0x73, 0xc1, + 0x6b, 0x86, 0x5e, 0x01, 0xdc, 0x9a, 0x61, 0xb3, 0xa7, 0xfa, 0x6e, 0xec, 0x4c, 0x9c, 0xa9, 0x4f, + 0x7c, 0xbb, 0xb2, 0xa2, 0xfa, 0x0e, 0xa5, 0x30, 0xdc, 0x29, 0xc6, 0xc7, 0xee, 0xc4, 0x99, 0x9e, + 0x5d, 0x44, 0xf8, 0xff, 0x47, 0xe3, 0x7b, 0x63, 0x7c, 0xa5, 0x18, 0x27, 0x56, 0x1c, 0x5e, 0xc2, + 0xd0, 0x20, 0xf4, 0x0c, 0x82, 0xab, 0xeb, 0x2c, 0xdf, 0x7c, 0x58, 0x96, 0xab, 0x3c, 0x2d, 0xe6, + 0x45, 0x9e, 0x05, 0x8f, 0xd0, 0x29, 0xf8, 0x71, 0x99, 0xe6, 0xcb, 0xac, 0x58, 0x2e, 0x02, 0x17, + 0x9d, 0x01, 0x64, 0xf9, 0x01, 0x0f, 0xc2, 0xef, 0x2e, 0x78, 0xd6, 0x16, 0x21, 0x18, 0x4a, 0xba, + 0xe3, 0x7d, 0x48, 0x3b, 0xa3, 0x37, 0x70, 0xba, 0x55, 0x75, 0xcd, 0xb7, 0xa6, 0xe2, 0x46, 0x30, + 0x1b, 0xd4, 0x27, 0x27, 0xf7, 0x8b, 0x05, 0x43, 0x09, 0x8c, 0x6c, 0xa3, 0x76, 0x3c, 0x98, 0x0c, + 0xa6, 0x4f, 0x2e, 0xce, 0x8f, 0xaf, 0x41, 0x7a, 0x25, 0x8a, 0xc1, 0x6b, 0x35, 0xd5, 0x7c, 0x3c, + 0xb2, 0x37, 0xf1, 0xee, 0x28, 0x0b, 0x5c, 0x1a, 0x09, 0xe9, 0x94, 0x61, 0x02, 0x9e, 0xc5, 0xe8, + 0x39, 0x3c, 0x2d, 0xd7, 0xf1, 0xfa, 0xef, 0x8b, 0x38, 0x81, 0xc7, 0x29, 0xc9, 0xe3, 0xb5, 0xed, + 0x8d, 0x7c, 0xf0, 0x48, 0x1e, 0x67, 0x9f, 0x02, 0xd7, 0x8c, 0x39, 0x21, 0xd7, 0x24, 0xf0, 0x92, + 0x9f, 0x0e, 0x84, 0x5b, 0xb5, 0x7b, 0xe0, 0xf4, 0xa4, 0x7b, 0xe1, 0x95, 0x79, 0xf0, 0x95, 0xf3, + 0x39, 0xed, 0xd9, 0x95, 0xaa, 0xa9, 0xac, 0xb0, 0x6a, 0xaa, 0xa8, 0xe2, 0xd2, 0x7e, 0x87, 0xa8, + 0xdb, 0xa2, 0x7b, 0xd1, 0xfe, 0xeb, 0xef, 0x5d, 0x5a, 0xf4, 0xc3, 0x1d, 0x2e, 0xd2, 0x79, 0xf9, + 0xcb, 0x7d, 0xbb, 0xe8, 0xcc, 0xd2, 0x5a, 0x7d, 0x61, 0x78, 0x7e, 0x08, 0x10, 0xdb, 0x00, 0x1f, + 0x67, 0x89, 0xd1, 0xdc, 0x8c, 0xac, 0xfb, 0xfb, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x08, 0xcb, + 0x38, 0x95, 0xd8, 0x02, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/firestore/v1beta1/common.pb.go b/vendor/google.golang.org/genproto/googleapis/firestore/v1beta1/common.pb.go new file mode 100644 index 0000000..51b0b90 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/firestore/v1beta1/common.pb.go @@ -0,0 +1,498 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/firestore/v1beta1/common.proto + +/* +Package firestore is a generated protocol buffer package. + +It is generated from these files: + google/firestore/v1beta1/common.proto + google/firestore/v1beta1/document.proto + google/firestore/v1beta1/firestore.proto + google/firestore/v1beta1/query.proto + google/firestore/v1beta1/write.proto + +It has these top-level messages: + DocumentMask + Precondition + TransactionOptions + Document + Value + ArrayValue + MapValue + GetDocumentRequest + ListDocumentsRequest + ListDocumentsResponse + CreateDocumentRequest + UpdateDocumentRequest + DeleteDocumentRequest + BatchGetDocumentsRequest + BatchGetDocumentsResponse + BeginTransactionRequest + BeginTransactionResponse + CommitRequest + CommitResponse + RollbackRequest + RunQueryRequest + RunQueryResponse + WriteRequest + WriteResponse + ListenRequest + ListenResponse + Target + TargetChange + ListCollectionIdsRequest + ListCollectionIdsResponse + StructuredQuery + Cursor + Write + DocumentTransform + WriteResult + DocumentChange + DocumentDelete + DocumentRemove + ExistenceFilter +*/ +package firestore + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/timestamp" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// A set of field paths on a document. +// Used to restrict a get or update operation on a document to a subset of its +// fields. +// This is different from standard field masks, as this is always scoped to a +// [Document][google.firestore.v1beta1.Document], and takes in account the dynamic nature of [Value][google.firestore.v1beta1.Value]. +type DocumentMask struct { + // The list of field paths in the mask. See [Document.fields][google.firestore.v1beta1.Document.fields] for a field + // path syntax reference. + FieldPaths []string `protobuf:"bytes,1,rep,name=field_paths,json=fieldPaths" json:"field_paths,omitempty"` +} + +func (m *DocumentMask) Reset() { *m = DocumentMask{} } +func (m *DocumentMask) String() string { return proto.CompactTextString(m) } +func (*DocumentMask) ProtoMessage() {} +func (*DocumentMask) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *DocumentMask) GetFieldPaths() []string { + if m != nil { + return m.FieldPaths + } + return nil +} + +// A precondition on a document, used for conditional operations. +type Precondition struct { + // The type of precondition. + // + // Types that are valid to be assigned to ConditionType: + // *Precondition_Exists + // *Precondition_UpdateTime + ConditionType isPrecondition_ConditionType `protobuf_oneof:"condition_type"` +} + +func (m *Precondition) Reset() { *m = Precondition{} } +func (m *Precondition) String() string { return proto.CompactTextString(m) } +func (*Precondition) ProtoMessage() {} +func (*Precondition) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +type isPrecondition_ConditionType interface { + isPrecondition_ConditionType() +} + +type Precondition_Exists struct { + Exists bool `protobuf:"varint,1,opt,name=exists,oneof"` +} +type Precondition_UpdateTime struct { + UpdateTime *google_protobuf1.Timestamp `protobuf:"bytes,2,opt,name=update_time,json=updateTime,oneof"` +} + +func (*Precondition_Exists) isPrecondition_ConditionType() {} +func (*Precondition_UpdateTime) isPrecondition_ConditionType() {} + +func (m *Precondition) GetConditionType() isPrecondition_ConditionType { + if m != nil { + return m.ConditionType + } + return nil +} + +func (m *Precondition) GetExists() bool { + if x, ok := m.GetConditionType().(*Precondition_Exists); ok { + return x.Exists + } + return false +} + +func (m *Precondition) GetUpdateTime() *google_protobuf1.Timestamp { + if x, ok := m.GetConditionType().(*Precondition_UpdateTime); ok { + return x.UpdateTime + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Precondition) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Precondition_OneofMarshaler, _Precondition_OneofUnmarshaler, _Precondition_OneofSizer, []interface{}{ + (*Precondition_Exists)(nil), + (*Precondition_UpdateTime)(nil), + } +} + +func _Precondition_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Precondition) + // condition_type + switch x := m.ConditionType.(type) { + case *Precondition_Exists: + t := uint64(0) + if x.Exists { + t = 1 + } + b.EncodeVarint(1<<3 | proto.WireVarint) + b.EncodeVarint(t) + case *Precondition_UpdateTime: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.UpdateTime); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Precondition.ConditionType has unexpected type %T", x) + } + return nil +} + +func _Precondition_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Precondition) + switch tag { + case 1: // condition_type.exists + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.ConditionType = &Precondition_Exists{x != 0} + return true, err + case 2: // condition_type.update_time + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf1.Timestamp) + err := b.DecodeMessage(msg) + m.ConditionType = &Precondition_UpdateTime{msg} + return true, err + default: + return false, nil + } +} + +func _Precondition_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Precondition) + // condition_type + switch x := m.ConditionType.(type) { + case *Precondition_Exists: + n += proto.SizeVarint(1<<3 | proto.WireVarint) + n += 1 + case *Precondition_UpdateTime: + s := proto.Size(x.UpdateTime) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Options for creating a new transaction. +type TransactionOptions struct { + // The mode of the transaction. + // + // Types that are valid to be assigned to Mode: + // *TransactionOptions_ReadOnly_ + // *TransactionOptions_ReadWrite_ + Mode isTransactionOptions_Mode `protobuf_oneof:"mode"` +} + +func (m *TransactionOptions) Reset() { *m = TransactionOptions{} } +func (m *TransactionOptions) String() string { return proto.CompactTextString(m) } +func (*TransactionOptions) ProtoMessage() {} +func (*TransactionOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +type isTransactionOptions_Mode interface { + isTransactionOptions_Mode() +} + +type TransactionOptions_ReadOnly_ struct { + ReadOnly *TransactionOptions_ReadOnly `protobuf:"bytes,2,opt,name=read_only,json=readOnly,oneof"` +} +type TransactionOptions_ReadWrite_ struct { + ReadWrite *TransactionOptions_ReadWrite `protobuf:"bytes,3,opt,name=read_write,json=readWrite,oneof"` +} + +func (*TransactionOptions_ReadOnly_) isTransactionOptions_Mode() {} +func (*TransactionOptions_ReadWrite_) isTransactionOptions_Mode() {} + +func (m *TransactionOptions) GetMode() isTransactionOptions_Mode { + if m != nil { + return m.Mode + } + return nil +} + +func (m *TransactionOptions) GetReadOnly() *TransactionOptions_ReadOnly { + if x, ok := m.GetMode().(*TransactionOptions_ReadOnly_); ok { + return x.ReadOnly + } + return nil +} + +func (m *TransactionOptions) GetReadWrite() *TransactionOptions_ReadWrite { + if x, ok := m.GetMode().(*TransactionOptions_ReadWrite_); ok { + return x.ReadWrite + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*TransactionOptions) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _TransactionOptions_OneofMarshaler, _TransactionOptions_OneofUnmarshaler, _TransactionOptions_OneofSizer, []interface{}{ + (*TransactionOptions_ReadOnly_)(nil), + (*TransactionOptions_ReadWrite_)(nil), + } +} + +func _TransactionOptions_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*TransactionOptions) + // mode + switch x := m.Mode.(type) { + case *TransactionOptions_ReadOnly_: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ReadOnly); err != nil { + return err + } + case *TransactionOptions_ReadWrite_: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ReadWrite); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("TransactionOptions.Mode has unexpected type %T", x) + } + return nil +} + +func _TransactionOptions_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*TransactionOptions) + switch tag { + case 2: // mode.read_only + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TransactionOptions_ReadOnly) + err := b.DecodeMessage(msg) + m.Mode = &TransactionOptions_ReadOnly_{msg} + return true, err + case 3: // mode.read_write + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TransactionOptions_ReadWrite) + err := b.DecodeMessage(msg) + m.Mode = &TransactionOptions_ReadWrite_{msg} + return true, err + default: + return false, nil + } +} + +func _TransactionOptions_OneofSizer(msg proto.Message) (n int) { + m := msg.(*TransactionOptions) + // mode + switch x := m.Mode.(type) { + case *TransactionOptions_ReadOnly_: + s := proto.Size(x.ReadOnly) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *TransactionOptions_ReadWrite_: + s := proto.Size(x.ReadWrite) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Options for a transaction that can be used to read and write documents. +type TransactionOptions_ReadWrite struct { + // An optional transaction to retry. + RetryTransaction []byte `protobuf:"bytes,1,opt,name=retry_transaction,json=retryTransaction,proto3" json:"retry_transaction,omitempty"` +} + +func (m *TransactionOptions_ReadWrite) Reset() { *m = TransactionOptions_ReadWrite{} } +func (m *TransactionOptions_ReadWrite) String() string { return proto.CompactTextString(m) } +func (*TransactionOptions_ReadWrite) ProtoMessage() {} +func (*TransactionOptions_ReadWrite) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} } + +func (m *TransactionOptions_ReadWrite) GetRetryTransaction() []byte { + if m != nil { + return m.RetryTransaction + } + return nil +} + +// Options for a transaction that can only be used to read documents. +type TransactionOptions_ReadOnly struct { + // The consistency mode for this transaction. If not set, defaults to strong + // consistency. + // + // Types that are valid to be assigned to ConsistencySelector: + // *TransactionOptions_ReadOnly_ReadTime + ConsistencySelector isTransactionOptions_ReadOnly_ConsistencySelector `protobuf_oneof:"consistency_selector"` +} + +func (m *TransactionOptions_ReadOnly) Reset() { *m = TransactionOptions_ReadOnly{} } +func (m *TransactionOptions_ReadOnly) String() string { return proto.CompactTextString(m) } +func (*TransactionOptions_ReadOnly) ProtoMessage() {} +func (*TransactionOptions_ReadOnly) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 1} } + +type isTransactionOptions_ReadOnly_ConsistencySelector interface { + isTransactionOptions_ReadOnly_ConsistencySelector() +} + +type TransactionOptions_ReadOnly_ReadTime struct { + ReadTime *google_protobuf1.Timestamp `protobuf:"bytes,2,opt,name=read_time,json=readTime,oneof"` +} + +func (*TransactionOptions_ReadOnly_ReadTime) isTransactionOptions_ReadOnly_ConsistencySelector() {} + +func (m *TransactionOptions_ReadOnly) GetConsistencySelector() isTransactionOptions_ReadOnly_ConsistencySelector { + if m != nil { + return m.ConsistencySelector + } + return nil +} + +func (m *TransactionOptions_ReadOnly) GetReadTime() *google_protobuf1.Timestamp { + if x, ok := m.GetConsistencySelector().(*TransactionOptions_ReadOnly_ReadTime); ok { + return x.ReadTime + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*TransactionOptions_ReadOnly) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _TransactionOptions_ReadOnly_OneofMarshaler, _TransactionOptions_ReadOnly_OneofUnmarshaler, _TransactionOptions_ReadOnly_OneofSizer, []interface{}{ + (*TransactionOptions_ReadOnly_ReadTime)(nil), + } +} + +func _TransactionOptions_ReadOnly_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*TransactionOptions_ReadOnly) + // consistency_selector + switch x := m.ConsistencySelector.(type) { + case *TransactionOptions_ReadOnly_ReadTime: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ReadTime); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("TransactionOptions_ReadOnly.ConsistencySelector has unexpected type %T", x) + } + return nil +} + +func _TransactionOptions_ReadOnly_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*TransactionOptions_ReadOnly) + switch tag { + case 2: // consistency_selector.read_time + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf1.Timestamp) + err := b.DecodeMessage(msg) + m.ConsistencySelector = &TransactionOptions_ReadOnly_ReadTime{msg} + return true, err + default: + return false, nil + } +} + +func _TransactionOptions_ReadOnly_OneofSizer(msg proto.Message) (n int) { + m := msg.(*TransactionOptions_ReadOnly) + // consistency_selector + switch x := m.ConsistencySelector.(type) { + case *TransactionOptions_ReadOnly_ReadTime: + s := proto.Size(x.ReadTime) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +func init() { + proto.RegisterType((*DocumentMask)(nil), "google.firestore.v1beta1.DocumentMask") + proto.RegisterType((*Precondition)(nil), "google.firestore.v1beta1.Precondition") + proto.RegisterType((*TransactionOptions)(nil), "google.firestore.v1beta1.TransactionOptions") + proto.RegisterType((*TransactionOptions_ReadWrite)(nil), "google.firestore.v1beta1.TransactionOptions.ReadWrite") + proto.RegisterType((*TransactionOptions_ReadOnly)(nil), "google.firestore.v1beta1.TransactionOptions.ReadOnly") +} + +func init() { proto.RegisterFile("google/firestore/v1beta1/common.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 468 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x52, 0xef, 0x8a, 0xd3, 0x40, + 0x10, 0x6f, 0x7a, 0xc7, 0xd1, 0x4e, 0x8b, 0x9c, 0x41, 0x24, 0x84, 0xc3, 0x3b, 0x0a, 0x42, 0x41, + 0xd8, 0x50, 0x45, 0x51, 0xc4, 0x0f, 0xa6, 0x72, 0xd7, 0x2f, 0x72, 0x25, 0x96, 0x3b, 0x90, 0x4a, + 0xd8, 0x26, 0xd3, 0xb8, 0x98, 0xec, 0x84, 0xdd, 0xad, 0x9a, 0xd7, 0xf1, 0xa3, 0x6f, 0xe0, 0x2b, + 0xf8, 0x1c, 0x3e, 0x88, 0x64, 0x93, 0x46, 0xe1, 0x38, 0xd0, 0x6f, 0x3b, 0x33, 0xbf, 0xf9, 0xfd, + 0x19, 0x16, 0x1e, 0x66, 0x44, 0x59, 0x8e, 0xc1, 0x56, 0x28, 0xd4, 0x86, 0x14, 0x06, 0x9f, 0x67, + 0x1b, 0x34, 0x7c, 0x16, 0x24, 0x54, 0x14, 0x24, 0x59, 0xa9, 0xc8, 0x90, 0xeb, 0x35, 0x30, 0xd6, + 0xc1, 0x58, 0x0b, 0xf3, 0x4f, 0x5a, 0x02, 0x5e, 0x8a, 0x80, 0x4b, 0x49, 0x86, 0x1b, 0x41, 0x52, + 0x37, 0x7b, 0xfe, 0x69, 0x3b, 0xb5, 0xd5, 0x66, 0xb7, 0x0d, 0x8c, 0x28, 0x50, 0x1b, 0x5e, 0x94, + 0x0d, 0x60, 0x12, 0xc0, 0xf8, 0x0d, 0x25, 0xbb, 0x02, 0xa5, 0x79, 0xcb, 0xf5, 0x27, 0xf7, 0x14, + 0x46, 0x5b, 0x81, 0x79, 0x1a, 0x97, 0xdc, 0x7c, 0xd4, 0x9e, 0x73, 0x76, 0x30, 0x1d, 0x46, 0x60, + 0x5b, 0xcb, 0xba, 0x33, 0xa9, 0x60, 0xbc, 0x54, 0x98, 0x90, 0x4c, 0x45, 0x2d, 0xe4, 0x7a, 0x70, + 0x84, 0x5f, 0x85, 0x36, 0x35, 0xd6, 0x99, 0x0e, 0x16, 0xbd, 0xa8, 0xad, 0xdd, 0x57, 0x30, 0xda, + 0x95, 0x29, 0x37, 0x18, 0xd7, 0xa2, 0x5e, 0xff, 0xcc, 0x99, 0x8e, 0x1e, 0xfb, 0xac, 0x4d, 0xb2, + 0x77, 0xc4, 0x56, 0x7b, 0x47, 0x8b, 0x5e, 0x04, 0xcd, 0x42, 0xdd, 0x0a, 0x8f, 0xe1, 0x4e, 0xa7, + 0x12, 0x9b, 0xaa, 0xc4, 0xc9, 0xaf, 0x3e, 0xb8, 0x2b, 0xc5, 0xa5, 0xe6, 0x49, 0xdd, 0xbc, 0x2c, + 0x6d, 0x52, 0x77, 0x05, 0x43, 0x85, 0x3c, 0x8d, 0x49, 0xe6, 0x55, 0xab, 0xf2, 0x94, 0xdd, 0x76, + 0x2f, 0x76, 0x93, 0x80, 0x45, 0xc8, 0xd3, 0x4b, 0x99, 0x57, 0x8b, 0x5e, 0x34, 0x50, 0xed, 0xdb, + 0xbd, 0x06, 0xb0, 0xac, 0x5f, 0x94, 0x30, 0xe8, 0x1d, 0x58, 0xda, 0x67, 0xff, 0x4d, 0x7b, 0x5d, + 0x6f, 0x2f, 0x7a, 0x91, 0x75, 0x68, 0x0b, 0xff, 0x39, 0x0c, 0xbb, 0x89, 0xfb, 0x08, 0xee, 0x2a, + 0x34, 0xaa, 0x8a, 0xcd, 0x9f, 0x7d, 0x7b, 0xc8, 0x71, 0x74, 0x6c, 0x07, 0x7f, 0xf1, 0xfa, 0x1f, + 0x60, 0xb0, 0xb7, 0xea, 0xbe, 0x68, 0x43, 0xff, 0xf3, 0x69, 0x6d, 0x32, 0x7b, 0xd8, 0xfb, 0x70, + 0x2f, 0x21, 0xa9, 0x85, 0x36, 0x28, 0x93, 0x2a, 0xd6, 0x98, 0x63, 0x62, 0x48, 0x85, 0x47, 0x70, + 0x58, 0x50, 0x8a, 0xe1, 0x0f, 0x07, 0x4e, 0x12, 0x2a, 0x6e, 0xcd, 0x1a, 0x8e, 0xe6, 0xf6, 0x6b, + 0x2e, 0x6b, 0x99, 0xa5, 0xf3, 0xfe, 0x75, 0x0b, 0xcc, 0x28, 0xe7, 0x32, 0x63, 0xa4, 0xb2, 0x20, + 0x43, 0x69, 0x4d, 0x04, 0xcd, 0x88, 0x97, 0x42, 0xdf, 0xfc, 0xe1, 0x2f, 0xbb, 0xce, 0xb7, 0xfe, + 0xe1, 0xc5, 0xfc, 0xfc, 0xdd, 0xf7, 0xfe, 0x83, 0x8b, 0x86, 0x6a, 0x9e, 0xd3, 0x2e, 0x65, 0xe7, + 0x9d, 0xf2, 0xd5, 0x2c, 0xac, 0x37, 0x7e, 0xee, 0x01, 0x6b, 0x0b, 0x58, 0x77, 0x80, 0xf5, 0x55, + 0x43, 0xb9, 0x39, 0xb2, 0xb2, 0x4f, 0x7e, 0x07, 0x00, 0x00, 0xff, 0xff, 0x91, 0x06, 0xe4, 0x5b, + 0x57, 0x03, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/firestore/v1beta1/document.pb.go b/vendor/google.golang.org/genproto/googleapis/firestore/v1beta1/document.pb.go new file mode 100644 index 0000000..d30f25a --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/firestore/v1beta1/document.pb.go @@ -0,0 +1,566 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/firestore/v1beta1/document.proto + +package firestore + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf2 "github.com/golang/protobuf/ptypes/struct" +import google_protobuf1 "github.com/golang/protobuf/ptypes/timestamp" +import google_type "google.golang.org/genproto/googleapis/type/latlng" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// A Firestore document. +// +// Must not exceed 1 MiB - 4 bytes. +type Document struct { + // The resource name of the document, for example + // `projects/{project_id}/databases/{database_id}/documents/{document_path}`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The document's fields. + // + // The map keys represent field names. + // + // A simple field name contains only characters `a` to `z`, `A` to `Z`, + // `0` to `9`, or `_`, and must not start with `0` to `9` or `_`. For example, + // `foo_bar_17`. + // + // Field names matching the regular expression `__.*__` are reserved. Reserved + // field names are forbidden except in certain documented contexts. The map + // keys, represented as UTF-8, must not exceed 1,500 bytes and cannot be + // empty. + // + // Field paths may be used in other contexts to refer to structured fields + // defined here. For `map_value`, the field path is represented by the simple + // or quoted field names of the containing fields, delimited by `.`. For + // example, the structured field + // `"foo" : { map_value: { "x&y" : { string_value: "hello" }}}` would be + // represented by the field path `foo.x&y`. + // + // Within a field path, a quoted field name starts and ends with `` ` `` and + // may contain any character. Some characters, including `` ` ``, must be + // escaped using a `\`. For example, `` `x&y` `` represents `x&y` and + // `` `bak\`tik` `` represents `` bak`tik ``. + Fields map[string]*Value `protobuf:"bytes,2,rep,name=fields" json:"fields,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Output only. The time at which the document was created. + // + // This value increases monotonically when a document is deleted then + // recreated. It can also be compared to values from other documents and + // the `read_time` of a query. + CreateTime *google_protobuf1.Timestamp `protobuf:"bytes,3,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // Output only. The time at which the document was last changed. + // + // This value is initally set to the `create_time` then increases + // monotonically with each change to the document. It can also be + // compared to values from other documents and the `read_time` of a query. + UpdateTime *google_protobuf1.Timestamp `protobuf:"bytes,4,opt,name=update_time,json=updateTime" json:"update_time,omitempty"` +} + +func (m *Document) Reset() { *m = Document{} } +func (m *Document) String() string { return proto.CompactTextString(m) } +func (*Document) ProtoMessage() {} +func (*Document) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *Document) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Document) GetFields() map[string]*Value { + if m != nil { + return m.Fields + } + return nil +} + +func (m *Document) GetCreateTime() *google_protobuf1.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *Document) GetUpdateTime() *google_protobuf1.Timestamp { + if m != nil { + return m.UpdateTime + } + return nil +} + +// A message that can hold any of the supported value types. +type Value struct { + // Must have a value set. + // + // Types that are valid to be assigned to ValueType: + // *Value_NullValue + // *Value_BooleanValue + // *Value_IntegerValue + // *Value_DoubleValue + // *Value_TimestampValue + // *Value_StringValue + // *Value_BytesValue + // *Value_ReferenceValue + // *Value_GeoPointValue + // *Value_ArrayValue + // *Value_MapValue + ValueType isValue_ValueType `protobuf_oneof:"value_type"` +} + +func (m *Value) Reset() { *m = Value{} } +func (m *Value) String() string { return proto.CompactTextString(m) } +func (*Value) ProtoMessage() {} +func (*Value) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +type isValue_ValueType interface { + isValue_ValueType() +} + +type Value_NullValue struct { + NullValue google_protobuf2.NullValue `protobuf:"varint,11,opt,name=null_value,json=nullValue,enum=google.protobuf.NullValue,oneof"` +} +type Value_BooleanValue struct { + BooleanValue bool `protobuf:"varint,1,opt,name=boolean_value,json=booleanValue,oneof"` +} +type Value_IntegerValue struct { + IntegerValue int64 `protobuf:"varint,2,opt,name=integer_value,json=integerValue,oneof"` +} +type Value_DoubleValue struct { + DoubleValue float64 `protobuf:"fixed64,3,opt,name=double_value,json=doubleValue,oneof"` +} +type Value_TimestampValue struct { + TimestampValue *google_protobuf1.Timestamp `protobuf:"bytes,10,opt,name=timestamp_value,json=timestampValue,oneof"` +} +type Value_StringValue struct { + StringValue string `protobuf:"bytes,17,opt,name=string_value,json=stringValue,oneof"` +} +type Value_BytesValue struct { + BytesValue []byte `protobuf:"bytes,18,opt,name=bytes_value,json=bytesValue,proto3,oneof"` +} +type Value_ReferenceValue struct { + ReferenceValue string `protobuf:"bytes,5,opt,name=reference_value,json=referenceValue,oneof"` +} +type Value_GeoPointValue struct { + GeoPointValue *google_type.LatLng `protobuf:"bytes,8,opt,name=geo_point_value,json=geoPointValue,oneof"` +} +type Value_ArrayValue struct { + ArrayValue *ArrayValue `protobuf:"bytes,9,opt,name=array_value,json=arrayValue,oneof"` +} +type Value_MapValue struct { + MapValue *MapValue `protobuf:"bytes,6,opt,name=map_value,json=mapValue,oneof"` +} + +func (*Value_NullValue) isValue_ValueType() {} +func (*Value_BooleanValue) isValue_ValueType() {} +func (*Value_IntegerValue) isValue_ValueType() {} +func (*Value_DoubleValue) isValue_ValueType() {} +func (*Value_TimestampValue) isValue_ValueType() {} +func (*Value_StringValue) isValue_ValueType() {} +func (*Value_BytesValue) isValue_ValueType() {} +func (*Value_ReferenceValue) isValue_ValueType() {} +func (*Value_GeoPointValue) isValue_ValueType() {} +func (*Value_ArrayValue) isValue_ValueType() {} +func (*Value_MapValue) isValue_ValueType() {} + +func (m *Value) GetValueType() isValue_ValueType { + if m != nil { + return m.ValueType + } + return nil +} + +func (m *Value) GetNullValue() google_protobuf2.NullValue { + if x, ok := m.GetValueType().(*Value_NullValue); ok { + return x.NullValue + } + return google_protobuf2.NullValue_NULL_VALUE +} + +func (m *Value) GetBooleanValue() bool { + if x, ok := m.GetValueType().(*Value_BooleanValue); ok { + return x.BooleanValue + } + return false +} + +func (m *Value) GetIntegerValue() int64 { + if x, ok := m.GetValueType().(*Value_IntegerValue); ok { + return x.IntegerValue + } + return 0 +} + +func (m *Value) GetDoubleValue() float64 { + if x, ok := m.GetValueType().(*Value_DoubleValue); ok { + return x.DoubleValue + } + return 0 +} + +func (m *Value) GetTimestampValue() *google_protobuf1.Timestamp { + if x, ok := m.GetValueType().(*Value_TimestampValue); ok { + return x.TimestampValue + } + return nil +} + +func (m *Value) GetStringValue() string { + if x, ok := m.GetValueType().(*Value_StringValue); ok { + return x.StringValue + } + return "" +} + +func (m *Value) GetBytesValue() []byte { + if x, ok := m.GetValueType().(*Value_BytesValue); ok { + return x.BytesValue + } + return nil +} + +func (m *Value) GetReferenceValue() string { + if x, ok := m.GetValueType().(*Value_ReferenceValue); ok { + return x.ReferenceValue + } + return "" +} + +func (m *Value) GetGeoPointValue() *google_type.LatLng { + if x, ok := m.GetValueType().(*Value_GeoPointValue); ok { + return x.GeoPointValue + } + return nil +} + +func (m *Value) GetArrayValue() *ArrayValue { + if x, ok := m.GetValueType().(*Value_ArrayValue); ok { + return x.ArrayValue + } + return nil +} + +func (m *Value) GetMapValue() *MapValue { + if x, ok := m.GetValueType().(*Value_MapValue); ok { + return x.MapValue + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Value) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Value_OneofMarshaler, _Value_OneofUnmarshaler, _Value_OneofSizer, []interface{}{ + (*Value_NullValue)(nil), + (*Value_BooleanValue)(nil), + (*Value_IntegerValue)(nil), + (*Value_DoubleValue)(nil), + (*Value_TimestampValue)(nil), + (*Value_StringValue)(nil), + (*Value_BytesValue)(nil), + (*Value_ReferenceValue)(nil), + (*Value_GeoPointValue)(nil), + (*Value_ArrayValue)(nil), + (*Value_MapValue)(nil), + } +} + +func _Value_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Value) + // value_type + switch x := m.ValueType.(type) { + case *Value_NullValue: + b.EncodeVarint(11<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.NullValue)) + case *Value_BooleanValue: + t := uint64(0) + if x.BooleanValue { + t = 1 + } + b.EncodeVarint(1<<3 | proto.WireVarint) + b.EncodeVarint(t) + case *Value_IntegerValue: + b.EncodeVarint(2<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.IntegerValue)) + case *Value_DoubleValue: + b.EncodeVarint(3<<3 | proto.WireFixed64) + b.EncodeFixed64(math.Float64bits(x.DoubleValue)) + case *Value_TimestampValue: + b.EncodeVarint(10<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.TimestampValue); err != nil { + return err + } + case *Value_StringValue: + b.EncodeVarint(17<<3 | proto.WireBytes) + b.EncodeStringBytes(x.StringValue) + case *Value_BytesValue: + b.EncodeVarint(18<<3 | proto.WireBytes) + b.EncodeRawBytes(x.BytesValue) + case *Value_ReferenceValue: + b.EncodeVarint(5<<3 | proto.WireBytes) + b.EncodeStringBytes(x.ReferenceValue) + case *Value_GeoPointValue: + b.EncodeVarint(8<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.GeoPointValue); err != nil { + return err + } + case *Value_ArrayValue: + b.EncodeVarint(9<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ArrayValue); err != nil { + return err + } + case *Value_MapValue: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.MapValue); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Value.ValueType has unexpected type %T", x) + } + return nil +} + +func _Value_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Value) + switch tag { + case 11: // value_type.null_value + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.ValueType = &Value_NullValue{google_protobuf2.NullValue(x)} + return true, err + case 1: // value_type.boolean_value + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.ValueType = &Value_BooleanValue{x != 0} + return true, err + case 2: // value_type.integer_value + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.ValueType = &Value_IntegerValue{int64(x)} + return true, err + case 3: // value_type.double_value + if wire != proto.WireFixed64 { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeFixed64() + m.ValueType = &Value_DoubleValue{math.Float64frombits(x)} + return true, err + case 10: // value_type.timestamp_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf1.Timestamp) + err := b.DecodeMessage(msg) + m.ValueType = &Value_TimestampValue{msg} + return true, err + case 17: // value_type.string_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.ValueType = &Value_StringValue{x} + return true, err + case 18: // value_type.bytes_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.ValueType = &Value_BytesValue{x} + return true, err + case 5: // value_type.reference_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.ValueType = &Value_ReferenceValue{x} + return true, err + case 8: // value_type.geo_point_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_type.LatLng) + err := b.DecodeMessage(msg) + m.ValueType = &Value_GeoPointValue{msg} + return true, err + case 9: // value_type.array_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ArrayValue) + err := b.DecodeMessage(msg) + m.ValueType = &Value_ArrayValue{msg} + return true, err + case 6: // value_type.map_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(MapValue) + err := b.DecodeMessage(msg) + m.ValueType = &Value_MapValue{msg} + return true, err + default: + return false, nil + } +} + +func _Value_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Value) + // value_type + switch x := m.ValueType.(type) { + case *Value_NullValue: + n += proto.SizeVarint(11<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.NullValue)) + case *Value_BooleanValue: + n += proto.SizeVarint(1<<3 | proto.WireVarint) + n += 1 + case *Value_IntegerValue: + n += proto.SizeVarint(2<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.IntegerValue)) + case *Value_DoubleValue: + n += proto.SizeVarint(3<<3 | proto.WireFixed64) + n += 8 + case *Value_TimestampValue: + s := proto.Size(x.TimestampValue) + n += proto.SizeVarint(10<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Value_StringValue: + n += proto.SizeVarint(17<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.StringValue))) + n += len(x.StringValue) + case *Value_BytesValue: + n += proto.SizeVarint(18<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.BytesValue))) + n += len(x.BytesValue) + case *Value_ReferenceValue: + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.ReferenceValue))) + n += len(x.ReferenceValue) + case *Value_GeoPointValue: + s := proto.Size(x.GeoPointValue) + n += proto.SizeVarint(8<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Value_ArrayValue: + s := proto.Size(x.ArrayValue) + n += proto.SizeVarint(9<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Value_MapValue: + s := proto.Size(x.MapValue) + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// An array value. +type ArrayValue struct { + // Values in the array. + Values []*Value `protobuf:"bytes,1,rep,name=values" json:"values,omitempty"` +} + +func (m *ArrayValue) Reset() { *m = ArrayValue{} } +func (m *ArrayValue) String() string { return proto.CompactTextString(m) } +func (*ArrayValue) ProtoMessage() {} +func (*ArrayValue) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +func (m *ArrayValue) GetValues() []*Value { + if m != nil { + return m.Values + } + return nil +} + +// A map value. +type MapValue struct { + // The map's fields. + // + // The map keys represent field names. Field names matching the regular + // expression `__.*__` are reserved. Reserved field names are forbidden except + // in certain documented contexts. The map keys, represented as UTF-8, must + // not exceed 1,500 bytes and cannot be empty. + Fields map[string]*Value `protobuf:"bytes,1,rep,name=fields" json:"fields,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *MapValue) Reset() { *m = MapValue{} } +func (m *MapValue) String() string { return proto.CompactTextString(m) } +func (*MapValue) ProtoMessage() {} +func (*MapValue) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } + +func (m *MapValue) GetFields() map[string]*Value { + if m != nil { + return m.Fields + } + return nil +} + +func init() { + proto.RegisterType((*Document)(nil), "google.firestore.v1beta1.Document") + proto.RegisterType((*Value)(nil), "google.firestore.v1beta1.Value") + proto.RegisterType((*ArrayValue)(nil), "google.firestore.v1beta1.ArrayValue") + proto.RegisterType((*MapValue)(nil), "google.firestore.v1beta1.MapValue") +} + +func init() { proto.RegisterFile("google/firestore/v1beta1/document.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 655 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x94, 0xcf, 0x6e, 0xd3, 0x4c, + 0x14, 0xc5, 0xe3, 0x24, 0x8d, 0x92, 0xeb, 0xb4, 0xfd, 0x3e, 0xb3, 0x89, 0xa2, 0x8a, 0x86, 0x00, + 0x22, 0x6c, 0x6c, 0xb5, 0x08, 0x81, 0xa8, 0x58, 0x34, 0xa5, 0x69, 0x16, 0x05, 0x55, 0x06, 0x75, + 0x51, 0x55, 0x8a, 0xc6, 0xc9, 0xc4, 0xb2, 0x18, 0xcf, 0x58, 0xe3, 0x71, 0xa5, 0xbc, 0x0e, 0x4b, + 0x16, 0xbc, 0x00, 0x3c, 0x41, 0x9f, 0x0a, 0xcd, 0xdf, 0x56, 0xd0, 0x28, 0x2b, 0x76, 0xf6, 0xbd, + 0xbf, 0x73, 0xee, 0x99, 0xf1, 0x8c, 0xe1, 0x45, 0xca, 0x58, 0x4a, 0x70, 0xb4, 0xcc, 0x38, 0x2e, + 0x05, 0xe3, 0x38, 0xba, 0x39, 0x48, 0xb0, 0x40, 0x07, 0xd1, 0x82, 0xcd, 0xab, 0x1c, 0x53, 0x11, + 0x16, 0x9c, 0x09, 0x16, 0xf4, 0x34, 0x18, 0x3a, 0x30, 0x34, 0x60, 0x7f, 0xcf, 0x58, 0xa0, 0x22, + 0x8b, 0x10, 0xa5, 0x4c, 0x20, 0x91, 0x31, 0x5a, 0x6a, 0x9d, 0xeb, 0xaa, 0xb7, 0xa4, 0x5a, 0x46, + 0xa5, 0xe0, 0xd5, 0xdc, 0xb8, 0xf6, 0xf7, 0xff, 0xec, 0x8a, 0x2c, 0xc7, 0xa5, 0x40, 0x79, 0x61, + 0x00, 0x33, 0x36, 0x12, 0xab, 0x02, 0x47, 0x04, 0x09, 0x42, 0x53, 0xdd, 0x19, 0xfe, 0xaa, 0x43, + 0xfb, 0x83, 0xc9, 0x18, 0x04, 0xd0, 0xa4, 0x28, 0xc7, 0x3d, 0x6f, 0xe0, 0x8d, 0x3a, 0xb1, 0x7a, + 0x0e, 0x26, 0xd0, 0x5a, 0x66, 0x98, 0x2c, 0xca, 0x5e, 0x7d, 0xd0, 0x18, 0xf9, 0x87, 0x61, 0xb8, + 0x6e, 0x09, 0xa1, 0xf5, 0x09, 0x27, 0x4a, 0x70, 0x4a, 0x05, 0x5f, 0xc5, 0x46, 0x1d, 0x1c, 0x81, + 0x3f, 0xe7, 0x18, 0x09, 0x3c, 0x93, 0xe1, 0x7a, 0x8d, 0x81, 0x37, 0xf2, 0x0f, 0xfb, 0xd6, 0xcc, + 0x26, 0x0f, 0xbf, 0xd8, 0xe4, 0x31, 0x68, 0x5c, 0x16, 0xa4, 0xb8, 0x2a, 0x16, 0x4e, 0xdc, 0xdc, + 0x2c, 0xd6, 0xb8, 0x2c, 0xf4, 0xaf, 0xc0, 0xbf, 0x17, 0x28, 0xf8, 0x0f, 0x1a, 0x5f, 0xf1, 0xca, + 0xac, 0x51, 0x3e, 0x06, 0xaf, 0x61, 0xeb, 0x06, 0x91, 0x0a, 0xf7, 0xea, 0xca, 0x77, 0x7f, 0xfd, + 0x0a, 0x2f, 0x25, 0x16, 0x6b, 0xfa, 0x5d, 0xfd, 0xad, 0x37, 0xbc, 0x6d, 0xc2, 0x96, 0x2a, 0x06, + 0x47, 0x00, 0xb4, 0x22, 0x64, 0xa6, 0x9d, 0xfc, 0x81, 0x37, 0xda, 0x79, 0x20, 0xe1, 0xa7, 0x8a, + 0x10, 0xc5, 0x4f, 0x6b, 0x71, 0x87, 0xda, 0x97, 0xe0, 0x39, 0x6c, 0x27, 0x8c, 0x11, 0x8c, 0xa8, + 0xd1, 0xcb, 0x74, 0xed, 0x69, 0x2d, 0xee, 0x9a, 0xb2, 0xc3, 0x32, 0x2a, 0x70, 0x8a, 0xf9, 0xec, + 0x2e, 0x70, 0x43, 0x62, 0xa6, 0xac, 0xb1, 0xa7, 0xd0, 0x5d, 0xb0, 0x2a, 0x21, 0xd8, 0x50, 0x72, + 0xaf, 0xbd, 0x69, 0x2d, 0xf6, 0x75, 0x55, 0x43, 0xa7, 0xb0, 0xeb, 0x4e, 0x89, 0xe1, 0x60, 0xd3, + 0xb6, 0x4e, 0x6b, 0xf1, 0x8e, 0x13, 0xb9, 0x59, 0xa5, 0xe0, 0x19, 0x4d, 0x8d, 0xc7, 0xff, 0x72, + 0x5b, 0xe5, 0x2c, 0x5d, 0xd5, 0xd0, 0x13, 0xf0, 0x93, 0x95, 0xc0, 0xa5, 0x61, 0x82, 0x81, 0x37, + 0xea, 0x4e, 0x6b, 0x31, 0xa8, 0xa2, 0x46, 0x5e, 0xc2, 0x2e, 0xc7, 0x4b, 0xcc, 0x31, 0x9d, 0xdb, + 0xd8, 0x5b, 0xc6, 0x6a, 0xc7, 0x35, 0x34, 0xfa, 0x1e, 0x76, 0x53, 0xcc, 0x66, 0x05, 0xcb, 0xa8, + 0x30, 0x68, 0x5b, 0x25, 0x7f, 0x64, 0x93, 0xcb, 0x63, 0x1e, 0x9e, 0x23, 0x71, 0x4e, 0xd3, 0x69, + 0x2d, 0xde, 0x4e, 0x31, 0xbb, 0x90, 0xb0, 0x96, 0x9f, 0x81, 0x8f, 0x38, 0x47, 0x2b, 0x23, 0xed, + 0x28, 0xe9, 0xb3, 0xf5, 0xdf, 0xfc, 0x58, 0xc2, 0xf6, 0x9b, 0x01, 0x72, 0x6f, 0xc1, 0x31, 0x74, + 0x72, 0x64, 0xf7, 0xae, 0xa5, 0x6c, 0x86, 0xeb, 0x6d, 0x3e, 0xa2, 0xc2, 0x9a, 0xb4, 0x73, 0xf3, + 0x3c, 0xee, 0x02, 0x28, 0xf9, 0x4c, 0x26, 0x1e, 0x9e, 0x02, 0xdc, 0x0d, 0x0b, 0xde, 0x40, 0x4b, + 0xf5, 0xca, 0x9e, 0xa7, 0x2e, 0xde, 0xc6, 0x63, 0x69, 0xf0, 0xe1, 0x0f, 0x0f, 0xda, 0x76, 0xda, + 0xbd, 0xeb, 0xeb, 0x6d, 0xba, 0xbe, 0x56, 0xf3, 0xd0, 0xf5, 0xfd, 0x97, 0x97, 0x68, 0xfc, 0xd3, + 0x83, 0xbd, 0x39, 0xcb, 0xd7, 0x2a, 0xc6, 0xdb, 0xf6, 0xcf, 0x72, 0x21, 0x8f, 0xe4, 0x85, 0x77, + 0x75, 0x6c, 0xd0, 0x94, 0x11, 0x44, 0xd3, 0x90, 0xf1, 0x34, 0x4a, 0x31, 0x55, 0x07, 0x36, 0xd2, + 0x2d, 0x54, 0x64, 0xe5, 0xdf, 0xbf, 0xe3, 0x23, 0x57, 0xf9, 0x56, 0x6f, 0x9e, 0x9d, 0x4c, 0x3e, + 0x7f, 0xaf, 0x3f, 0x3e, 0xd3, 0x56, 0x27, 0x84, 0x55, 0x8b, 0x70, 0xe2, 0x66, 0x5f, 0x1e, 0x8c, + 0xa5, 0xe2, 0xd6, 0x02, 0xd7, 0x0a, 0xb8, 0x76, 0xc0, 0xf5, 0xa5, 0xb6, 0x4c, 0x5a, 0x6a, 0xec, + 0xab, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x9e, 0x27, 0x82, 0xde, 0x04, 0x06, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/firestore/v1beta1/firestore.pb.go b/vendor/google.golang.org/genproto/googleapis/firestore/v1beta1/firestore.pb.go new file mode 100644 index 0000000..bd7b520 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/firestore/v1beta1/firestore.pb.go @@ -0,0 +1,3125 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/firestore/v1beta1/firestore.proto + +package firestore + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf4 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf1 "github.com/golang/protobuf/ptypes/timestamp" +import google_rpc "google.golang.org/genproto/googleapis/rpc/status" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// The type of change. +type TargetChange_TargetChangeType int32 + +const ( + // No change has occurred. Used only to send an updated `resume_token`. + TargetChange_NO_CHANGE TargetChange_TargetChangeType = 0 + // The targets have been added. + TargetChange_ADD TargetChange_TargetChangeType = 1 + // The targets have been removed. + TargetChange_REMOVE TargetChange_TargetChangeType = 2 + // The targets reflect all changes committed before the targets were added + // to the stream. + // + // This will be sent after or with a `read_time` that is greater than or + // equal to the time at which the targets were added. + // + // Listeners can wait for this change if read-after-write semantics + // are desired. + TargetChange_CURRENT TargetChange_TargetChangeType = 3 + // The targets have been reset, and a new initial state for the targets + // will be returned in subsequent changes. + // + // After the initial state is complete, `CURRENT` will be returned even + // if the target was previously indicated to be `CURRENT`. + TargetChange_RESET TargetChange_TargetChangeType = 4 +) + +var TargetChange_TargetChangeType_name = map[int32]string{ + 0: "NO_CHANGE", + 1: "ADD", + 2: "REMOVE", + 3: "CURRENT", + 4: "RESET", +} +var TargetChange_TargetChangeType_value = map[string]int32{ + "NO_CHANGE": 0, + "ADD": 1, + "REMOVE": 2, + "CURRENT": 3, + "RESET": 4, +} + +func (x TargetChange_TargetChangeType) String() string { + return proto.EnumName(TargetChange_TargetChangeType_name, int32(x)) +} +func (TargetChange_TargetChangeType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor2, []int{20, 0} +} + +// The request for [Firestore.GetDocument][google.firestore.v1beta1.Firestore.GetDocument]. +type GetDocumentRequest struct { + // The resource name of the Document to get. In the format: + // `projects/{project_id}/databases/{database_id}/documents/{document_path}`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The fields to return. If not set, returns all fields. + // + // If the document has a field that is not present in this mask, that field + // will not be returned in the response. + Mask *DocumentMask `protobuf:"bytes,2,opt,name=mask" json:"mask,omitempty"` + // The consistency mode for this transaction. + // If not set, defaults to strong consistency. + // + // Types that are valid to be assigned to ConsistencySelector: + // *GetDocumentRequest_Transaction + // *GetDocumentRequest_ReadTime + ConsistencySelector isGetDocumentRequest_ConsistencySelector `protobuf_oneof:"consistency_selector"` +} + +func (m *GetDocumentRequest) Reset() { *m = GetDocumentRequest{} } +func (m *GetDocumentRequest) String() string { return proto.CompactTextString(m) } +func (*GetDocumentRequest) ProtoMessage() {} +func (*GetDocumentRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } + +type isGetDocumentRequest_ConsistencySelector interface { + isGetDocumentRequest_ConsistencySelector() +} + +type GetDocumentRequest_Transaction struct { + Transaction []byte `protobuf:"bytes,3,opt,name=transaction,proto3,oneof"` +} +type GetDocumentRequest_ReadTime struct { + ReadTime *google_protobuf1.Timestamp `protobuf:"bytes,5,opt,name=read_time,json=readTime,oneof"` +} + +func (*GetDocumentRequest_Transaction) isGetDocumentRequest_ConsistencySelector() {} +func (*GetDocumentRequest_ReadTime) isGetDocumentRequest_ConsistencySelector() {} + +func (m *GetDocumentRequest) GetConsistencySelector() isGetDocumentRequest_ConsistencySelector { + if m != nil { + return m.ConsistencySelector + } + return nil +} + +func (m *GetDocumentRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *GetDocumentRequest) GetMask() *DocumentMask { + if m != nil { + return m.Mask + } + return nil +} + +func (m *GetDocumentRequest) GetTransaction() []byte { + if x, ok := m.GetConsistencySelector().(*GetDocumentRequest_Transaction); ok { + return x.Transaction + } + return nil +} + +func (m *GetDocumentRequest) GetReadTime() *google_protobuf1.Timestamp { + if x, ok := m.GetConsistencySelector().(*GetDocumentRequest_ReadTime); ok { + return x.ReadTime + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*GetDocumentRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _GetDocumentRequest_OneofMarshaler, _GetDocumentRequest_OneofUnmarshaler, _GetDocumentRequest_OneofSizer, []interface{}{ + (*GetDocumentRequest_Transaction)(nil), + (*GetDocumentRequest_ReadTime)(nil), + } +} + +func _GetDocumentRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*GetDocumentRequest) + // consistency_selector + switch x := m.ConsistencySelector.(type) { + case *GetDocumentRequest_Transaction: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeRawBytes(x.Transaction) + case *GetDocumentRequest_ReadTime: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ReadTime); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("GetDocumentRequest.ConsistencySelector has unexpected type %T", x) + } + return nil +} + +func _GetDocumentRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*GetDocumentRequest) + switch tag { + case 3: // consistency_selector.transaction + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.ConsistencySelector = &GetDocumentRequest_Transaction{x} + return true, err + case 5: // consistency_selector.read_time + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf1.Timestamp) + err := b.DecodeMessage(msg) + m.ConsistencySelector = &GetDocumentRequest_ReadTime{msg} + return true, err + default: + return false, nil + } +} + +func _GetDocumentRequest_OneofSizer(msg proto.Message) (n int) { + m := msg.(*GetDocumentRequest) + // consistency_selector + switch x := m.ConsistencySelector.(type) { + case *GetDocumentRequest_Transaction: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Transaction))) + n += len(x.Transaction) + case *GetDocumentRequest_ReadTime: + s := proto.Size(x.ReadTime) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The request for [Firestore.ListDocuments][google.firestore.v1beta1.Firestore.ListDocuments]. +type ListDocumentsRequest struct { + // The parent resource name. In the format: + // `projects/{project_id}/databases/{database_id}/documents` or + // `projects/{project_id}/databases/{database_id}/documents/{document_path}`. + // For example: + // `projects/my-project/databases/my-database/documents` or + // `projects/my-project/databases/my-database/documents/chatrooms/my-chatroom` + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The collection ID, relative to `parent`, to list. For example: `chatrooms` + // or `messages`. + CollectionId string `protobuf:"bytes,2,opt,name=collection_id,json=collectionId" json:"collection_id,omitempty"` + // The maximum number of documents to return. + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // The `next_page_token` value returned from a previous List request, if any. + PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // The order to sort results by. For example: `priority desc, name`. + OrderBy string `protobuf:"bytes,6,opt,name=order_by,json=orderBy" json:"order_by,omitempty"` + // The fields to return. If not set, returns all fields. + // + // If a document has a field that is not present in this mask, that field + // will not be returned in the response. + Mask *DocumentMask `protobuf:"bytes,7,opt,name=mask" json:"mask,omitempty"` + // The consistency mode for this transaction. + // If not set, defaults to strong consistency. + // + // Types that are valid to be assigned to ConsistencySelector: + // *ListDocumentsRequest_Transaction + // *ListDocumentsRequest_ReadTime + ConsistencySelector isListDocumentsRequest_ConsistencySelector `protobuf_oneof:"consistency_selector"` + // If the list should show missing documents. A missing document is a + // document that does not exist but has sub-documents. These documents will + // be returned with a key but will not have fields, [Document.create_time][google.firestore.v1beta1.Document.create_time], + // or [Document.update_time][google.firestore.v1beta1.Document.update_time] set. + // + // Requests with `show_missing` may not specify `where` or + // `order_by`. + ShowMissing bool `protobuf:"varint,12,opt,name=show_missing,json=showMissing" json:"show_missing,omitempty"` +} + +func (m *ListDocumentsRequest) Reset() { *m = ListDocumentsRequest{} } +func (m *ListDocumentsRequest) String() string { return proto.CompactTextString(m) } +func (*ListDocumentsRequest) ProtoMessage() {} +func (*ListDocumentsRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{1} } + +type isListDocumentsRequest_ConsistencySelector interface { + isListDocumentsRequest_ConsistencySelector() +} + +type ListDocumentsRequest_Transaction struct { + Transaction []byte `protobuf:"bytes,8,opt,name=transaction,proto3,oneof"` +} +type ListDocumentsRequest_ReadTime struct { + ReadTime *google_protobuf1.Timestamp `protobuf:"bytes,10,opt,name=read_time,json=readTime,oneof"` +} + +func (*ListDocumentsRequest_Transaction) isListDocumentsRequest_ConsistencySelector() {} +func (*ListDocumentsRequest_ReadTime) isListDocumentsRequest_ConsistencySelector() {} + +func (m *ListDocumentsRequest) GetConsistencySelector() isListDocumentsRequest_ConsistencySelector { + if m != nil { + return m.ConsistencySelector + } + return nil +} + +func (m *ListDocumentsRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListDocumentsRequest) GetCollectionId() string { + if m != nil { + return m.CollectionId + } + return "" +} + +func (m *ListDocumentsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListDocumentsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListDocumentsRequest) GetOrderBy() string { + if m != nil { + return m.OrderBy + } + return "" +} + +func (m *ListDocumentsRequest) GetMask() *DocumentMask { + if m != nil { + return m.Mask + } + return nil +} + +func (m *ListDocumentsRequest) GetTransaction() []byte { + if x, ok := m.GetConsistencySelector().(*ListDocumentsRequest_Transaction); ok { + return x.Transaction + } + return nil +} + +func (m *ListDocumentsRequest) GetReadTime() *google_protobuf1.Timestamp { + if x, ok := m.GetConsistencySelector().(*ListDocumentsRequest_ReadTime); ok { + return x.ReadTime + } + return nil +} + +func (m *ListDocumentsRequest) GetShowMissing() bool { + if m != nil { + return m.ShowMissing + } + return false +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ListDocumentsRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _ListDocumentsRequest_OneofMarshaler, _ListDocumentsRequest_OneofUnmarshaler, _ListDocumentsRequest_OneofSizer, []interface{}{ + (*ListDocumentsRequest_Transaction)(nil), + (*ListDocumentsRequest_ReadTime)(nil), + } +} + +func _ListDocumentsRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ListDocumentsRequest) + // consistency_selector + switch x := m.ConsistencySelector.(type) { + case *ListDocumentsRequest_Transaction: + b.EncodeVarint(8<<3 | proto.WireBytes) + b.EncodeRawBytes(x.Transaction) + case *ListDocumentsRequest_ReadTime: + b.EncodeVarint(10<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ReadTime); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("ListDocumentsRequest.ConsistencySelector has unexpected type %T", x) + } + return nil +} + +func _ListDocumentsRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ListDocumentsRequest) + switch tag { + case 8: // consistency_selector.transaction + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.ConsistencySelector = &ListDocumentsRequest_Transaction{x} + return true, err + case 10: // consistency_selector.read_time + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf1.Timestamp) + err := b.DecodeMessage(msg) + m.ConsistencySelector = &ListDocumentsRequest_ReadTime{msg} + return true, err + default: + return false, nil + } +} + +func _ListDocumentsRequest_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ListDocumentsRequest) + // consistency_selector + switch x := m.ConsistencySelector.(type) { + case *ListDocumentsRequest_Transaction: + n += proto.SizeVarint(8<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Transaction))) + n += len(x.Transaction) + case *ListDocumentsRequest_ReadTime: + s := proto.Size(x.ReadTime) + n += proto.SizeVarint(10<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The response for [Firestore.ListDocuments][google.firestore.v1beta1.Firestore.ListDocuments]. +type ListDocumentsResponse struct { + // The Documents found. + Documents []*Document `protobuf:"bytes,1,rep,name=documents" json:"documents,omitempty"` + // The next page token. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListDocumentsResponse) Reset() { *m = ListDocumentsResponse{} } +func (m *ListDocumentsResponse) String() string { return proto.CompactTextString(m) } +func (*ListDocumentsResponse) ProtoMessage() {} +func (*ListDocumentsResponse) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{2} } + +func (m *ListDocumentsResponse) GetDocuments() []*Document { + if m != nil { + return m.Documents + } + return nil +} + +func (m *ListDocumentsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The request for [Firestore.CreateDocument][google.firestore.v1beta1.Firestore.CreateDocument]. +type CreateDocumentRequest struct { + // The parent resource. For example: + // `projects/{project_id}/databases/{database_id}/documents` or + // `projects/{project_id}/databases/{database_id}/documents/chatrooms/{chatroom_id}` + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The collection ID, relative to `parent`, to list. For example: `chatrooms`. + CollectionId string `protobuf:"bytes,2,opt,name=collection_id,json=collectionId" json:"collection_id,omitempty"` + // The client-assigned document ID to use for this document. + // + // Optional. If not specified, an ID will be assigned by the service. + DocumentId string `protobuf:"bytes,3,opt,name=document_id,json=documentId" json:"document_id,omitempty"` + // The document to create. `name` must not be set. + Document *Document `protobuf:"bytes,4,opt,name=document" json:"document,omitempty"` + // The fields to return. If not set, returns all fields. + // + // If the document has a field that is not present in this mask, that field + // will not be returned in the response. + Mask *DocumentMask `protobuf:"bytes,5,opt,name=mask" json:"mask,omitempty"` +} + +func (m *CreateDocumentRequest) Reset() { *m = CreateDocumentRequest{} } +func (m *CreateDocumentRequest) String() string { return proto.CompactTextString(m) } +func (*CreateDocumentRequest) ProtoMessage() {} +func (*CreateDocumentRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{3} } + +func (m *CreateDocumentRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateDocumentRequest) GetCollectionId() string { + if m != nil { + return m.CollectionId + } + return "" +} + +func (m *CreateDocumentRequest) GetDocumentId() string { + if m != nil { + return m.DocumentId + } + return "" +} + +func (m *CreateDocumentRequest) GetDocument() *Document { + if m != nil { + return m.Document + } + return nil +} + +func (m *CreateDocumentRequest) GetMask() *DocumentMask { + if m != nil { + return m.Mask + } + return nil +} + +// The request for [Firestore.UpdateDocument][google.firestore.v1beta1.Firestore.UpdateDocument]. +type UpdateDocumentRequest struct { + // The updated document. + // Creates the document if it does not already exist. + Document *Document `protobuf:"bytes,1,opt,name=document" json:"document,omitempty"` + // The fields to update. + // None of the field paths in the mask may contain a reserved name. + // + // If the document exists on the server and has fields not referenced in the + // mask, they are left unchanged. + // Fields referenced in the mask, but not present in the input document, are + // deleted from the document on the server. + UpdateMask *DocumentMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` + // The fields to return. If not set, returns all fields. + // + // If the document has a field that is not present in this mask, that field + // will not be returned in the response. + Mask *DocumentMask `protobuf:"bytes,3,opt,name=mask" json:"mask,omitempty"` + // An optional precondition on the document. + // The request will fail if this is set and not met by the target document. + CurrentDocument *Precondition `protobuf:"bytes,4,opt,name=current_document,json=currentDocument" json:"current_document,omitempty"` +} + +func (m *UpdateDocumentRequest) Reset() { *m = UpdateDocumentRequest{} } +func (m *UpdateDocumentRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateDocumentRequest) ProtoMessage() {} +func (*UpdateDocumentRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{4} } + +func (m *UpdateDocumentRequest) GetDocument() *Document { + if m != nil { + return m.Document + } + return nil +} + +func (m *UpdateDocumentRequest) GetUpdateMask() *DocumentMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +func (m *UpdateDocumentRequest) GetMask() *DocumentMask { + if m != nil { + return m.Mask + } + return nil +} + +func (m *UpdateDocumentRequest) GetCurrentDocument() *Precondition { + if m != nil { + return m.CurrentDocument + } + return nil +} + +// The request for [Firestore.DeleteDocument][google.firestore.v1beta1.Firestore.DeleteDocument]. +type DeleteDocumentRequest struct { + // The resource name of the Document to delete. In the format: + // `projects/{project_id}/databases/{database_id}/documents/{document_path}`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // An optional precondition on the document. + // The request will fail if this is set and not met by the target document. + CurrentDocument *Precondition `protobuf:"bytes,2,opt,name=current_document,json=currentDocument" json:"current_document,omitempty"` +} + +func (m *DeleteDocumentRequest) Reset() { *m = DeleteDocumentRequest{} } +func (m *DeleteDocumentRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteDocumentRequest) ProtoMessage() {} +func (*DeleteDocumentRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{5} } + +func (m *DeleteDocumentRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *DeleteDocumentRequest) GetCurrentDocument() *Precondition { + if m != nil { + return m.CurrentDocument + } + return nil +} + +// The request for [Firestore.BatchGetDocuments][google.firestore.v1beta1.Firestore.BatchGetDocuments]. +type BatchGetDocumentsRequest struct { + // The database name. In the format: + // `projects/{project_id}/databases/{database_id}`. + Database string `protobuf:"bytes,1,opt,name=database" json:"database,omitempty"` + // The names of the documents to retrieve. In the format: + // `projects/{project_id}/databases/{database_id}/documents/{document_path}`. + // The request will fail if any of the document is not a child resource of the + // given `database`. Duplicate names will be elided. + Documents []string `protobuf:"bytes,2,rep,name=documents" json:"documents,omitempty"` + // The fields to return. If not set, returns all fields. + // + // If a document has a field that is not present in this mask, that field will + // not be returned in the response. + Mask *DocumentMask `protobuf:"bytes,3,opt,name=mask" json:"mask,omitempty"` + // The consistency mode for this transaction. + // If not set, defaults to strong consistency. + // + // Types that are valid to be assigned to ConsistencySelector: + // *BatchGetDocumentsRequest_Transaction + // *BatchGetDocumentsRequest_NewTransaction + // *BatchGetDocumentsRequest_ReadTime + ConsistencySelector isBatchGetDocumentsRequest_ConsistencySelector `protobuf_oneof:"consistency_selector"` +} + +func (m *BatchGetDocumentsRequest) Reset() { *m = BatchGetDocumentsRequest{} } +func (m *BatchGetDocumentsRequest) String() string { return proto.CompactTextString(m) } +func (*BatchGetDocumentsRequest) ProtoMessage() {} +func (*BatchGetDocumentsRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{6} } + +type isBatchGetDocumentsRequest_ConsistencySelector interface { + isBatchGetDocumentsRequest_ConsistencySelector() +} + +type BatchGetDocumentsRequest_Transaction struct { + Transaction []byte `protobuf:"bytes,4,opt,name=transaction,proto3,oneof"` +} +type BatchGetDocumentsRequest_NewTransaction struct { + NewTransaction *TransactionOptions `protobuf:"bytes,5,opt,name=new_transaction,json=newTransaction,oneof"` +} +type BatchGetDocumentsRequest_ReadTime struct { + ReadTime *google_protobuf1.Timestamp `protobuf:"bytes,7,opt,name=read_time,json=readTime,oneof"` +} + +func (*BatchGetDocumentsRequest_Transaction) isBatchGetDocumentsRequest_ConsistencySelector() {} +func (*BatchGetDocumentsRequest_NewTransaction) isBatchGetDocumentsRequest_ConsistencySelector() {} +func (*BatchGetDocumentsRequest_ReadTime) isBatchGetDocumentsRequest_ConsistencySelector() {} + +func (m *BatchGetDocumentsRequest) GetConsistencySelector() isBatchGetDocumentsRequest_ConsistencySelector { + if m != nil { + return m.ConsistencySelector + } + return nil +} + +func (m *BatchGetDocumentsRequest) GetDatabase() string { + if m != nil { + return m.Database + } + return "" +} + +func (m *BatchGetDocumentsRequest) GetDocuments() []string { + if m != nil { + return m.Documents + } + return nil +} + +func (m *BatchGetDocumentsRequest) GetMask() *DocumentMask { + if m != nil { + return m.Mask + } + return nil +} + +func (m *BatchGetDocumentsRequest) GetTransaction() []byte { + if x, ok := m.GetConsistencySelector().(*BatchGetDocumentsRequest_Transaction); ok { + return x.Transaction + } + return nil +} + +func (m *BatchGetDocumentsRequest) GetNewTransaction() *TransactionOptions { + if x, ok := m.GetConsistencySelector().(*BatchGetDocumentsRequest_NewTransaction); ok { + return x.NewTransaction + } + return nil +} + +func (m *BatchGetDocumentsRequest) GetReadTime() *google_protobuf1.Timestamp { + if x, ok := m.GetConsistencySelector().(*BatchGetDocumentsRequest_ReadTime); ok { + return x.ReadTime + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*BatchGetDocumentsRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _BatchGetDocumentsRequest_OneofMarshaler, _BatchGetDocumentsRequest_OneofUnmarshaler, _BatchGetDocumentsRequest_OneofSizer, []interface{}{ + (*BatchGetDocumentsRequest_Transaction)(nil), + (*BatchGetDocumentsRequest_NewTransaction)(nil), + (*BatchGetDocumentsRequest_ReadTime)(nil), + } +} + +func _BatchGetDocumentsRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*BatchGetDocumentsRequest) + // consistency_selector + switch x := m.ConsistencySelector.(type) { + case *BatchGetDocumentsRequest_Transaction: + b.EncodeVarint(4<<3 | proto.WireBytes) + b.EncodeRawBytes(x.Transaction) + case *BatchGetDocumentsRequest_NewTransaction: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.NewTransaction); err != nil { + return err + } + case *BatchGetDocumentsRequest_ReadTime: + b.EncodeVarint(7<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ReadTime); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("BatchGetDocumentsRequest.ConsistencySelector has unexpected type %T", x) + } + return nil +} + +func _BatchGetDocumentsRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*BatchGetDocumentsRequest) + switch tag { + case 4: // consistency_selector.transaction + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.ConsistencySelector = &BatchGetDocumentsRequest_Transaction{x} + return true, err + case 5: // consistency_selector.new_transaction + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TransactionOptions) + err := b.DecodeMessage(msg) + m.ConsistencySelector = &BatchGetDocumentsRequest_NewTransaction{msg} + return true, err + case 7: // consistency_selector.read_time + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf1.Timestamp) + err := b.DecodeMessage(msg) + m.ConsistencySelector = &BatchGetDocumentsRequest_ReadTime{msg} + return true, err + default: + return false, nil + } +} + +func _BatchGetDocumentsRequest_OneofSizer(msg proto.Message) (n int) { + m := msg.(*BatchGetDocumentsRequest) + // consistency_selector + switch x := m.ConsistencySelector.(type) { + case *BatchGetDocumentsRequest_Transaction: + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Transaction))) + n += len(x.Transaction) + case *BatchGetDocumentsRequest_NewTransaction: + s := proto.Size(x.NewTransaction) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *BatchGetDocumentsRequest_ReadTime: + s := proto.Size(x.ReadTime) + n += proto.SizeVarint(7<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The streamed response for [Firestore.BatchGetDocuments][google.firestore.v1beta1.Firestore.BatchGetDocuments]. +type BatchGetDocumentsResponse struct { + // A single result. + // This can be empty if the server is just returning a transaction. + // + // Types that are valid to be assigned to Result: + // *BatchGetDocumentsResponse_Found + // *BatchGetDocumentsResponse_Missing + Result isBatchGetDocumentsResponse_Result `protobuf_oneof:"result"` + // The transaction that was started as part of this request. + // Will only be set in the first response, and only if + // [BatchGetDocumentsRequest.new_transaction][google.firestore.v1beta1.BatchGetDocumentsRequest.new_transaction] was set in the request. + Transaction []byte `protobuf:"bytes,3,opt,name=transaction,proto3" json:"transaction,omitempty"` + // The time at which the document was read. + // This may be monotically increasing, in this case the previous documents in + // the result stream are guaranteed not to have changed between their + // read_time and this one. + ReadTime *google_protobuf1.Timestamp `protobuf:"bytes,4,opt,name=read_time,json=readTime" json:"read_time,omitempty"` +} + +func (m *BatchGetDocumentsResponse) Reset() { *m = BatchGetDocumentsResponse{} } +func (m *BatchGetDocumentsResponse) String() string { return proto.CompactTextString(m) } +func (*BatchGetDocumentsResponse) ProtoMessage() {} +func (*BatchGetDocumentsResponse) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{7} } + +type isBatchGetDocumentsResponse_Result interface { + isBatchGetDocumentsResponse_Result() +} + +type BatchGetDocumentsResponse_Found struct { + Found *Document `protobuf:"bytes,1,opt,name=found,oneof"` +} +type BatchGetDocumentsResponse_Missing struct { + Missing string `protobuf:"bytes,2,opt,name=missing,oneof"` +} + +func (*BatchGetDocumentsResponse_Found) isBatchGetDocumentsResponse_Result() {} +func (*BatchGetDocumentsResponse_Missing) isBatchGetDocumentsResponse_Result() {} + +func (m *BatchGetDocumentsResponse) GetResult() isBatchGetDocumentsResponse_Result { + if m != nil { + return m.Result + } + return nil +} + +func (m *BatchGetDocumentsResponse) GetFound() *Document { + if x, ok := m.GetResult().(*BatchGetDocumentsResponse_Found); ok { + return x.Found + } + return nil +} + +func (m *BatchGetDocumentsResponse) GetMissing() string { + if x, ok := m.GetResult().(*BatchGetDocumentsResponse_Missing); ok { + return x.Missing + } + return "" +} + +func (m *BatchGetDocumentsResponse) GetTransaction() []byte { + if m != nil { + return m.Transaction + } + return nil +} + +func (m *BatchGetDocumentsResponse) GetReadTime() *google_protobuf1.Timestamp { + if m != nil { + return m.ReadTime + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*BatchGetDocumentsResponse) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _BatchGetDocumentsResponse_OneofMarshaler, _BatchGetDocumentsResponse_OneofUnmarshaler, _BatchGetDocumentsResponse_OneofSizer, []interface{}{ + (*BatchGetDocumentsResponse_Found)(nil), + (*BatchGetDocumentsResponse_Missing)(nil), + } +} + +func _BatchGetDocumentsResponse_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*BatchGetDocumentsResponse) + // result + switch x := m.Result.(type) { + case *BatchGetDocumentsResponse_Found: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Found); err != nil { + return err + } + case *BatchGetDocumentsResponse_Missing: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Missing) + case nil: + default: + return fmt.Errorf("BatchGetDocumentsResponse.Result has unexpected type %T", x) + } + return nil +} + +func _BatchGetDocumentsResponse_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*BatchGetDocumentsResponse) + switch tag { + case 1: // result.found + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Document) + err := b.DecodeMessage(msg) + m.Result = &BatchGetDocumentsResponse_Found{msg} + return true, err + case 2: // result.missing + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Result = &BatchGetDocumentsResponse_Missing{x} + return true, err + default: + return false, nil + } +} + +func _BatchGetDocumentsResponse_OneofSizer(msg proto.Message) (n int) { + m := msg.(*BatchGetDocumentsResponse) + // result + switch x := m.Result.(type) { + case *BatchGetDocumentsResponse_Found: + s := proto.Size(x.Found) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *BatchGetDocumentsResponse_Missing: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Missing))) + n += len(x.Missing) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The request for [Firestore.BeginTransaction][google.firestore.v1beta1.Firestore.BeginTransaction]. +type BeginTransactionRequest struct { + // The database name. In the format: + // `projects/{project_id}/databases/{database_id}`. + Database string `protobuf:"bytes,1,opt,name=database" json:"database,omitempty"` + // The options for the transaction. + // Defaults to a read-write transaction. + Options *TransactionOptions `protobuf:"bytes,2,opt,name=options" json:"options,omitempty"` +} + +func (m *BeginTransactionRequest) Reset() { *m = BeginTransactionRequest{} } +func (m *BeginTransactionRequest) String() string { return proto.CompactTextString(m) } +func (*BeginTransactionRequest) ProtoMessage() {} +func (*BeginTransactionRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{8} } + +func (m *BeginTransactionRequest) GetDatabase() string { + if m != nil { + return m.Database + } + return "" +} + +func (m *BeginTransactionRequest) GetOptions() *TransactionOptions { + if m != nil { + return m.Options + } + return nil +} + +// The response for [Firestore.BeginTransaction][google.firestore.v1beta1.Firestore.BeginTransaction]. +type BeginTransactionResponse struct { + // The transaction that was started. + Transaction []byte `protobuf:"bytes,1,opt,name=transaction,proto3" json:"transaction,omitempty"` +} + +func (m *BeginTransactionResponse) Reset() { *m = BeginTransactionResponse{} } +func (m *BeginTransactionResponse) String() string { return proto.CompactTextString(m) } +func (*BeginTransactionResponse) ProtoMessage() {} +func (*BeginTransactionResponse) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{9} } + +func (m *BeginTransactionResponse) GetTransaction() []byte { + if m != nil { + return m.Transaction + } + return nil +} + +// The request for [Firestore.Commit][google.firestore.v1beta1.Firestore.Commit]. +type CommitRequest struct { + // The database name. In the format: + // `projects/{project_id}/databases/{database_id}`. + Database string `protobuf:"bytes,1,opt,name=database" json:"database,omitempty"` + // The writes to apply. + // + // Always executed atomically and in order. + Writes []*Write `protobuf:"bytes,2,rep,name=writes" json:"writes,omitempty"` + // If set, applies all writes in this transaction, and commits it. + Transaction []byte `protobuf:"bytes,3,opt,name=transaction,proto3" json:"transaction,omitempty"` +} + +func (m *CommitRequest) Reset() { *m = CommitRequest{} } +func (m *CommitRequest) String() string { return proto.CompactTextString(m) } +func (*CommitRequest) ProtoMessage() {} +func (*CommitRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{10} } + +func (m *CommitRequest) GetDatabase() string { + if m != nil { + return m.Database + } + return "" +} + +func (m *CommitRequest) GetWrites() []*Write { + if m != nil { + return m.Writes + } + return nil +} + +func (m *CommitRequest) GetTransaction() []byte { + if m != nil { + return m.Transaction + } + return nil +} + +// The response for [Firestore.Commit][google.firestore.v1beta1.Firestore.Commit]. +type CommitResponse struct { + // The result of applying the writes. + // + // This i-th write result corresponds to the i-th write in the + // request. + WriteResults []*WriteResult `protobuf:"bytes,1,rep,name=write_results,json=writeResults" json:"write_results,omitempty"` + // The time at which the commit occurred. + CommitTime *google_protobuf1.Timestamp `protobuf:"bytes,2,opt,name=commit_time,json=commitTime" json:"commit_time,omitempty"` +} + +func (m *CommitResponse) Reset() { *m = CommitResponse{} } +func (m *CommitResponse) String() string { return proto.CompactTextString(m) } +func (*CommitResponse) ProtoMessage() {} +func (*CommitResponse) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{11} } + +func (m *CommitResponse) GetWriteResults() []*WriteResult { + if m != nil { + return m.WriteResults + } + return nil +} + +func (m *CommitResponse) GetCommitTime() *google_protobuf1.Timestamp { + if m != nil { + return m.CommitTime + } + return nil +} + +// The request for [Firestore.Rollback][google.firestore.v1beta1.Firestore.Rollback]. +type RollbackRequest struct { + // The database name. In the format: + // `projects/{project_id}/databases/{database_id}`. + Database string `protobuf:"bytes,1,opt,name=database" json:"database,omitempty"` + // The transaction to roll back. + Transaction []byte `protobuf:"bytes,2,opt,name=transaction,proto3" json:"transaction,omitempty"` +} + +func (m *RollbackRequest) Reset() { *m = RollbackRequest{} } +func (m *RollbackRequest) String() string { return proto.CompactTextString(m) } +func (*RollbackRequest) ProtoMessage() {} +func (*RollbackRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{12} } + +func (m *RollbackRequest) GetDatabase() string { + if m != nil { + return m.Database + } + return "" +} + +func (m *RollbackRequest) GetTransaction() []byte { + if m != nil { + return m.Transaction + } + return nil +} + +// The request for [Firestore.RunQuery][google.firestore.v1beta1.Firestore.RunQuery]. +type RunQueryRequest struct { + // The parent resource name. In the format: + // `projects/{project_id}/databases/{database_id}/documents` or + // `projects/{project_id}/databases/{database_id}/documents/{document_path}`. + // For example: + // `projects/my-project/databases/my-database/documents` or + // `projects/my-project/databases/my-database/documents/chatrooms/my-chatroom` + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The query to run. + // + // Types that are valid to be assigned to QueryType: + // *RunQueryRequest_StructuredQuery + QueryType isRunQueryRequest_QueryType `protobuf_oneof:"query_type"` + // The consistency mode for this transaction. + // If not set, defaults to strong consistency. + // + // Types that are valid to be assigned to ConsistencySelector: + // *RunQueryRequest_Transaction + // *RunQueryRequest_NewTransaction + // *RunQueryRequest_ReadTime + ConsistencySelector isRunQueryRequest_ConsistencySelector `protobuf_oneof:"consistency_selector"` +} + +func (m *RunQueryRequest) Reset() { *m = RunQueryRequest{} } +func (m *RunQueryRequest) String() string { return proto.CompactTextString(m) } +func (*RunQueryRequest) ProtoMessage() {} +func (*RunQueryRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{13} } + +type isRunQueryRequest_QueryType interface { + isRunQueryRequest_QueryType() +} +type isRunQueryRequest_ConsistencySelector interface { + isRunQueryRequest_ConsistencySelector() +} + +type RunQueryRequest_StructuredQuery struct { + StructuredQuery *StructuredQuery `protobuf:"bytes,2,opt,name=structured_query,json=structuredQuery,oneof"` +} +type RunQueryRequest_Transaction struct { + Transaction []byte `protobuf:"bytes,5,opt,name=transaction,proto3,oneof"` +} +type RunQueryRequest_NewTransaction struct { + NewTransaction *TransactionOptions `protobuf:"bytes,6,opt,name=new_transaction,json=newTransaction,oneof"` +} +type RunQueryRequest_ReadTime struct { + ReadTime *google_protobuf1.Timestamp `protobuf:"bytes,7,opt,name=read_time,json=readTime,oneof"` +} + +func (*RunQueryRequest_StructuredQuery) isRunQueryRequest_QueryType() {} +func (*RunQueryRequest_Transaction) isRunQueryRequest_ConsistencySelector() {} +func (*RunQueryRequest_NewTransaction) isRunQueryRequest_ConsistencySelector() {} +func (*RunQueryRequest_ReadTime) isRunQueryRequest_ConsistencySelector() {} + +func (m *RunQueryRequest) GetQueryType() isRunQueryRequest_QueryType { + if m != nil { + return m.QueryType + } + return nil +} +func (m *RunQueryRequest) GetConsistencySelector() isRunQueryRequest_ConsistencySelector { + if m != nil { + return m.ConsistencySelector + } + return nil +} + +func (m *RunQueryRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *RunQueryRequest) GetStructuredQuery() *StructuredQuery { + if x, ok := m.GetQueryType().(*RunQueryRequest_StructuredQuery); ok { + return x.StructuredQuery + } + return nil +} + +func (m *RunQueryRequest) GetTransaction() []byte { + if x, ok := m.GetConsistencySelector().(*RunQueryRequest_Transaction); ok { + return x.Transaction + } + return nil +} + +func (m *RunQueryRequest) GetNewTransaction() *TransactionOptions { + if x, ok := m.GetConsistencySelector().(*RunQueryRequest_NewTransaction); ok { + return x.NewTransaction + } + return nil +} + +func (m *RunQueryRequest) GetReadTime() *google_protobuf1.Timestamp { + if x, ok := m.GetConsistencySelector().(*RunQueryRequest_ReadTime); ok { + return x.ReadTime + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*RunQueryRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _RunQueryRequest_OneofMarshaler, _RunQueryRequest_OneofUnmarshaler, _RunQueryRequest_OneofSizer, []interface{}{ + (*RunQueryRequest_StructuredQuery)(nil), + (*RunQueryRequest_Transaction)(nil), + (*RunQueryRequest_NewTransaction)(nil), + (*RunQueryRequest_ReadTime)(nil), + } +} + +func _RunQueryRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*RunQueryRequest) + // query_type + switch x := m.QueryType.(type) { + case *RunQueryRequest_StructuredQuery: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.StructuredQuery); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("RunQueryRequest.QueryType has unexpected type %T", x) + } + // consistency_selector + switch x := m.ConsistencySelector.(type) { + case *RunQueryRequest_Transaction: + b.EncodeVarint(5<<3 | proto.WireBytes) + b.EncodeRawBytes(x.Transaction) + case *RunQueryRequest_NewTransaction: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.NewTransaction); err != nil { + return err + } + case *RunQueryRequest_ReadTime: + b.EncodeVarint(7<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ReadTime); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("RunQueryRequest.ConsistencySelector has unexpected type %T", x) + } + return nil +} + +func _RunQueryRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*RunQueryRequest) + switch tag { + case 2: // query_type.structured_query + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(StructuredQuery) + err := b.DecodeMessage(msg) + m.QueryType = &RunQueryRequest_StructuredQuery{msg} + return true, err + case 5: // consistency_selector.transaction + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.ConsistencySelector = &RunQueryRequest_Transaction{x} + return true, err + case 6: // consistency_selector.new_transaction + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TransactionOptions) + err := b.DecodeMessage(msg) + m.ConsistencySelector = &RunQueryRequest_NewTransaction{msg} + return true, err + case 7: // consistency_selector.read_time + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf1.Timestamp) + err := b.DecodeMessage(msg) + m.ConsistencySelector = &RunQueryRequest_ReadTime{msg} + return true, err + default: + return false, nil + } +} + +func _RunQueryRequest_OneofSizer(msg proto.Message) (n int) { + m := msg.(*RunQueryRequest) + // query_type + switch x := m.QueryType.(type) { + case *RunQueryRequest_StructuredQuery: + s := proto.Size(x.StructuredQuery) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + // consistency_selector + switch x := m.ConsistencySelector.(type) { + case *RunQueryRequest_Transaction: + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Transaction))) + n += len(x.Transaction) + case *RunQueryRequest_NewTransaction: + s := proto.Size(x.NewTransaction) + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *RunQueryRequest_ReadTime: + s := proto.Size(x.ReadTime) + n += proto.SizeVarint(7<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The response for [Firestore.RunQuery][google.firestore.v1beta1.Firestore.RunQuery]. +type RunQueryResponse struct { + // The transaction that was started as part of this request. + // Can only be set in the first response, and only if + // [RunQueryRequest.new_transaction][google.firestore.v1beta1.RunQueryRequest.new_transaction] was set in the request. + // If set, no other fields will be set in this response. + Transaction []byte `protobuf:"bytes,2,opt,name=transaction,proto3" json:"transaction,omitempty"` + // A query result. + // Not set when reporting partial progress. + Document *Document `protobuf:"bytes,1,opt,name=document" json:"document,omitempty"` + // The time at which the document was read. This may be monotonically + // increasing; in this case, the previous documents in the result stream are + // guaranteed not to have changed between their `read_time` and this one. + // + // If the query returns no results, a response with `read_time` and no + // `document` will be sent, and this represents the time at which the query + // was run. + ReadTime *google_protobuf1.Timestamp `protobuf:"bytes,3,opt,name=read_time,json=readTime" json:"read_time,omitempty"` + // The number of results that have been skipped due to an offset between + // the last response and the current response. + SkippedResults int32 `protobuf:"varint,4,opt,name=skipped_results,json=skippedResults" json:"skipped_results,omitempty"` +} + +func (m *RunQueryResponse) Reset() { *m = RunQueryResponse{} } +func (m *RunQueryResponse) String() string { return proto.CompactTextString(m) } +func (*RunQueryResponse) ProtoMessage() {} +func (*RunQueryResponse) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{14} } + +func (m *RunQueryResponse) GetTransaction() []byte { + if m != nil { + return m.Transaction + } + return nil +} + +func (m *RunQueryResponse) GetDocument() *Document { + if m != nil { + return m.Document + } + return nil +} + +func (m *RunQueryResponse) GetReadTime() *google_protobuf1.Timestamp { + if m != nil { + return m.ReadTime + } + return nil +} + +func (m *RunQueryResponse) GetSkippedResults() int32 { + if m != nil { + return m.SkippedResults + } + return 0 +} + +// The request for [Firestore.Write][google.firestore.v1beta1.Firestore.Write]. +// +// The first request creates a stream, or resumes an existing one from a token. +// +// When creating a new stream, the server replies with a response containing +// only an ID and a token, to use in the next request. +// +// When resuming a stream, the server first streams any responses later than the +// given token, then a response containing only an up-to-date token, to use in +// the next request. +type WriteRequest struct { + // The database name. In the format: + // `projects/{project_id}/databases/{database_id}`. + // This is only required in the first message. + Database string `protobuf:"bytes,1,opt,name=database" json:"database,omitempty"` + // The ID of the write stream to resume. + // This may only be set in the first message. When left empty, a new write + // stream will be created. + StreamId string `protobuf:"bytes,2,opt,name=stream_id,json=streamId" json:"stream_id,omitempty"` + // The writes to apply. + // + // Always executed atomically and in order. + // This must be empty on the first request. + // This may be empty on the last request. + // This must not be empty on all other requests. + Writes []*Write `protobuf:"bytes,3,rep,name=writes" json:"writes,omitempty"` + // A stream token that was previously sent by the server. + // + // The client should set this field to the token from the most recent + // [WriteResponse][google.firestore.v1beta1.WriteResponse] it has received. This acknowledges that the client has + // received responses up to this token. After sending this token, earlier + // tokens may not be used anymore. + // + // The server may close the stream if there are too many unacknowledged + // responses. + // + // Leave this field unset when creating a new stream. To resume a stream at + // a specific point, set this field and the `stream_id` field. + // + // Leave this field unset when creating a new stream. + StreamToken []byte `protobuf:"bytes,4,opt,name=stream_token,json=streamToken,proto3" json:"stream_token,omitempty"` + // Labels associated with this write request. + Labels map[string]string `protobuf:"bytes,5,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *WriteRequest) Reset() { *m = WriteRequest{} } +func (m *WriteRequest) String() string { return proto.CompactTextString(m) } +func (*WriteRequest) ProtoMessage() {} +func (*WriteRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{15} } + +func (m *WriteRequest) GetDatabase() string { + if m != nil { + return m.Database + } + return "" +} + +func (m *WriteRequest) GetStreamId() string { + if m != nil { + return m.StreamId + } + return "" +} + +func (m *WriteRequest) GetWrites() []*Write { + if m != nil { + return m.Writes + } + return nil +} + +func (m *WriteRequest) GetStreamToken() []byte { + if m != nil { + return m.StreamToken + } + return nil +} + +func (m *WriteRequest) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +// The response for [Firestore.Write][google.firestore.v1beta1.Firestore.Write]. +type WriteResponse struct { + // The ID of the stream. + // Only set on the first message, when a new stream was created. + StreamId string `protobuf:"bytes,1,opt,name=stream_id,json=streamId" json:"stream_id,omitempty"` + // A token that represents the position of this response in the stream. + // This can be used by a client to resume the stream at this point. + // + // This field is always set. + StreamToken []byte `protobuf:"bytes,2,opt,name=stream_token,json=streamToken,proto3" json:"stream_token,omitempty"` + // The result of applying the writes. + // + // This i-th write result corresponds to the i-th write in the + // request. + WriteResults []*WriteResult `protobuf:"bytes,3,rep,name=write_results,json=writeResults" json:"write_results,omitempty"` + // The time at which the commit occurred. + CommitTime *google_protobuf1.Timestamp `protobuf:"bytes,4,opt,name=commit_time,json=commitTime" json:"commit_time,omitempty"` +} + +func (m *WriteResponse) Reset() { *m = WriteResponse{} } +func (m *WriteResponse) String() string { return proto.CompactTextString(m) } +func (*WriteResponse) ProtoMessage() {} +func (*WriteResponse) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{16} } + +func (m *WriteResponse) GetStreamId() string { + if m != nil { + return m.StreamId + } + return "" +} + +func (m *WriteResponse) GetStreamToken() []byte { + if m != nil { + return m.StreamToken + } + return nil +} + +func (m *WriteResponse) GetWriteResults() []*WriteResult { + if m != nil { + return m.WriteResults + } + return nil +} + +func (m *WriteResponse) GetCommitTime() *google_protobuf1.Timestamp { + if m != nil { + return m.CommitTime + } + return nil +} + +// A request for [Firestore.Listen][google.firestore.v1beta1.Firestore.Listen] +type ListenRequest struct { + // The database name. In the format: + // `projects/{project_id}/databases/{database_id}`. + Database string `protobuf:"bytes,1,opt,name=database" json:"database,omitempty"` + // The supported target changes. + // + // Types that are valid to be assigned to TargetChange: + // *ListenRequest_AddTarget + // *ListenRequest_RemoveTarget + TargetChange isListenRequest_TargetChange `protobuf_oneof:"target_change"` + // Labels associated with this target change. + Labels map[string]string `protobuf:"bytes,4,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *ListenRequest) Reset() { *m = ListenRequest{} } +func (m *ListenRequest) String() string { return proto.CompactTextString(m) } +func (*ListenRequest) ProtoMessage() {} +func (*ListenRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{17} } + +type isListenRequest_TargetChange interface { + isListenRequest_TargetChange() +} + +type ListenRequest_AddTarget struct { + AddTarget *Target `protobuf:"bytes,2,opt,name=add_target,json=addTarget,oneof"` +} +type ListenRequest_RemoveTarget struct { + RemoveTarget int32 `protobuf:"varint,3,opt,name=remove_target,json=removeTarget,oneof"` +} + +func (*ListenRequest_AddTarget) isListenRequest_TargetChange() {} +func (*ListenRequest_RemoveTarget) isListenRequest_TargetChange() {} + +func (m *ListenRequest) GetTargetChange() isListenRequest_TargetChange { + if m != nil { + return m.TargetChange + } + return nil +} + +func (m *ListenRequest) GetDatabase() string { + if m != nil { + return m.Database + } + return "" +} + +func (m *ListenRequest) GetAddTarget() *Target { + if x, ok := m.GetTargetChange().(*ListenRequest_AddTarget); ok { + return x.AddTarget + } + return nil +} + +func (m *ListenRequest) GetRemoveTarget() int32 { + if x, ok := m.GetTargetChange().(*ListenRequest_RemoveTarget); ok { + return x.RemoveTarget + } + return 0 +} + +func (m *ListenRequest) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ListenRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _ListenRequest_OneofMarshaler, _ListenRequest_OneofUnmarshaler, _ListenRequest_OneofSizer, []interface{}{ + (*ListenRequest_AddTarget)(nil), + (*ListenRequest_RemoveTarget)(nil), + } +} + +func _ListenRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ListenRequest) + // target_change + switch x := m.TargetChange.(type) { + case *ListenRequest_AddTarget: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.AddTarget); err != nil { + return err + } + case *ListenRequest_RemoveTarget: + b.EncodeVarint(3<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.RemoveTarget)) + case nil: + default: + return fmt.Errorf("ListenRequest.TargetChange has unexpected type %T", x) + } + return nil +} + +func _ListenRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ListenRequest) + switch tag { + case 2: // target_change.add_target + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Target) + err := b.DecodeMessage(msg) + m.TargetChange = &ListenRequest_AddTarget{msg} + return true, err + case 3: // target_change.remove_target + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.TargetChange = &ListenRequest_RemoveTarget{int32(x)} + return true, err + default: + return false, nil + } +} + +func _ListenRequest_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ListenRequest) + // target_change + switch x := m.TargetChange.(type) { + case *ListenRequest_AddTarget: + s := proto.Size(x.AddTarget) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *ListenRequest_RemoveTarget: + n += proto.SizeVarint(3<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.RemoveTarget)) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The response for [Firestore.Listen][google.firestore.v1beta1.Firestore.Listen]. +type ListenResponse struct { + // The supported responses. + // + // Types that are valid to be assigned to ResponseType: + // *ListenResponse_TargetChange + // *ListenResponse_DocumentChange + // *ListenResponse_DocumentDelete + // *ListenResponse_DocumentRemove + // *ListenResponse_Filter + ResponseType isListenResponse_ResponseType `protobuf_oneof:"response_type"` +} + +func (m *ListenResponse) Reset() { *m = ListenResponse{} } +func (m *ListenResponse) String() string { return proto.CompactTextString(m) } +func (*ListenResponse) ProtoMessage() {} +func (*ListenResponse) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{18} } + +type isListenResponse_ResponseType interface { + isListenResponse_ResponseType() +} + +type ListenResponse_TargetChange struct { + TargetChange *TargetChange `protobuf:"bytes,2,opt,name=target_change,json=targetChange,oneof"` +} +type ListenResponse_DocumentChange struct { + DocumentChange *DocumentChange `protobuf:"bytes,3,opt,name=document_change,json=documentChange,oneof"` +} +type ListenResponse_DocumentDelete struct { + DocumentDelete *DocumentDelete `protobuf:"bytes,4,opt,name=document_delete,json=documentDelete,oneof"` +} +type ListenResponse_DocumentRemove struct { + DocumentRemove *DocumentRemove `protobuf:"bytes,6,opt,name=document_remove,json=documentRemove,oneof"` +} +type ListenResponse_Filter struct { + Filter *ExistenceFilter `protobuf:"bytes,5,opt,name=filter,oneof"` +} + +func (*ListenResponse_TargetChange) isListenResponse_ResponseType() {} +func (*ListenResponse_DocumentChange) isListenResponse_ResponseType() {} +func (*ListenResponse_DocumentDelete) isListenResponse_ResponseType() {} +func (*ListenResponse_DocumentRemove) isListenResponse_ResponseType() {} +func (*ListenResponse_Filter) isListenResponse_ResponseType() {} + +func (m *ListenResponse) GetResponseType() isListenResponse_ResponseType { + if m != nil { + return m.ResponseType + } + return nil +} + +func (m *ListenResponse) GetTargetChange() *TargetChange { + if x, ok := m.GetResponseType().(*ListenResponse_TargetChange); ok { + return x.TargetChange + } + return nil +} + +func (m *ListenResponse) GetDocumentChange() *DocumentChange { + if x, ok := m.GetResponseType().(*ListenResponse_DocumentChange); ok { + return x.DocumentChange + } + return nil +} + +func (m *ListenResponse) GetDocumentDelete() *DocumentDelete { + if x, ok := m.GetResponseType().(*ListenResponse_DocumentDelete); ok { + return x.DocumentDelete + } + return nil +} + +func (m *ListenResponse) GetDocumentRemove() *DocumentRemove { + if x, ok := m.GetResponseType().(*ListenResponse_DocumentRemove); ok { + return x.DocumentRemove + } + return nil +} + +func (m *ListenResponse) GetFilter() *ExistenceFilter { + if x, ok := m.GetResponseType().(*ListenResponse_Filter); ok { + return x.Filter + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ListenResponse) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _ListenResponse_OneofMarshaler, _ListenResponse_OneofUnmarshaler, _ListenResponse_OneofSizer, []interface{}{ + (*ListenResponse_TargetChange)(nil), + (*ListenResponse_DocumentChange)(nil), + (*ListenResponse_DocumentDelete)(nil), + (*ListenResponse_DocumentRemove)(nil), + (*ListenResponse_Filter)(nil), + } +} + +func _ListenResponse_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ListenResponse) + // response_type + switch x := m.ResponseType.(type) { + case *ListenResponse_TargetChange: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.TargetChange); err != nil { + return err + } + case *ListenResponse_DocumentChange: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DocumentChange); err != nil { + return err + } + case *ListenResponse_DocumentDelete: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DocumentDelete); err != nil { + return err + } + case *ListenResponse_DocumentRemove: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DocumentRemove); err != nil { + return err + } + case *ListenResponse_Filter: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Filter); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("ListenResponse.ResponseType has unexpected type %T", x) + } + return nil +} + +func _ListenResponse_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ListenResponse) + switch tag { + case 2: // response_type.target_change + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TargetChange) + err := b.DecodeMessage(msg) + m.ResponseType = &ListenResponse_TargetChange{msg} + return true, err + case 3: // response_type.document_change + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(DocumentChange) + err := b.DecodeMessage(msg) + m.ResponseType = &ListenResponse_DocumentChange{msg} + return true, err + case 4: // response_type.document_delete + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(DocumentDelete) + err := b.DecodeMessage(msg) + m.ResponseType = &ListenResponse_DocumentDelete{msg} + return true, err + case 6: // response_type.document_remove + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(DocumentRemove) + err := b.DecodeMessage(msg) + m.ResponseType = &ListenResponse_DocumentRemove{msg} + return true, err + case 5: // response_type.filter + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ExistenceFilter) + err := b.DecodeMessage(msg) + m.ResponseType = &ListenResponse_Filter{msg} + return true, err + default: + return false, nil + } +} + +func _ListenResponse_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ListenResponse) + // response_type + switch x := m.ResponseType.(type) { + case *ListenResponse_TargetChange: + s := proto.Size(x.TargetChange) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *ListenResponse_DocumentChange: + s := proto.Size(x.DocumentChange) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *ListenResponse_DocumentDelete: + s := proto.Size(x.DocumentDelete) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *ListenResponse_DocumentRemove: + s := proto.Size(x.DocumentRemove) + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *ListenResponse_Filter: + s := proto.Size(x.Filter) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A specification of a set of documents to listen to. +type Target struct { + // The type of target to listen to. + // + // Types that are valid to be assigned to TargetType: + // *Target_Query + // *Target_Documents + TargetType isTarget_TargetType `protobuf_oneof:"target_type"` + // When to start listening. + // + // If not specified, all matching Documents are returned before any + // subsequent changes. + // + // Types that are valid to be assigned to ResumeType: + // *Target_ResumeToken + // *Target_ReadTime + ResumeType isTarget_ResumeType `protobuf_oneof:"resume_type"` + // A client provided target ID. + // + // If not set, the server will assign an ID for the target. + // + // Used for resuming a target without changing IDs. The IDs can either be + // client-assigned or be server-assigned in a previous stream. All targets + // with client provided IDs must be added before adding a target that needs + // a server-assigned id. + TargetId int32 `protobuf:"varint,5,opt,name=target_id,json=targetId" json:"target_id,omitempty"` + // If the target should be removed once it is current and consistent. + Once bool `protobuf:"varint,6,opt,name=once" json:"once,omitempty"` +} + +func (m *Target) Reset() { *m = Target{} } +func (m *Target) String() string { return proto.CompactTextString(m) } +func (*Target) ProtoMessage() {} +func (*Target) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{19} } + +type isTarget_TargetType interface { + isTarget_TargetType() +} +type isTarget_ResumeType interface { + isTarget_ResumeType() +} + +type Target_Query struct { + Query *Target_QueryTarget `protobuf:"bytes,2,opt,name=query,oneof"` +} +type Target_Documents struct { + Documents *Target_DocumentsTarget `protobuf:"bytes,3,opt,name=documents,oneof"` +} +type Target_ResumeToken struct { + ResumeToken []byte `protobuf:"bytes,4,opt,name=resume_token,json=resumeToken,proto3,oneof"` +} +type Target_ReadTime struct { + ReadTime *google_protobuf1.Timestamp `protobuf:"bytes,11,opt,name=read_time,json=readTime,oneof"` +} + +func (*Target_Query) isTarget_TargetType() {} +func (*Target_Documents) isTarget_TargetType() {} +func (*Target_ResumeToken) isTarget_ResumeType() {} +func (*Target_ReadTime) isTarget_ResumeType() {} + +func (m *Target) GetTargetType() isTarget_TargetType { + if m != nil { + return m.TargetType + } + return nil +} +func (m *Target) GetResumeType() isTarget_ResumeType { + if m != nil { + return m.ResumeType + } + return nil +} + +func (m *Target) GetQuery() *Target_QueryTarget { + if x, ok := m.GetTargetType().(*Target_Query); ok { + return x.Query + } + return nil +} + +func (m *Target) GetDocuments() *Target_DocumentsTarget { + if x, ok := m.GetTargetType().(*Target_Documents); ok { + return x.Documents + } + return nil +} + +func (m *Target) GetResumeToken() []byte { + if x, ok := m.GetResumeType().(*Target_ResumeToken); ok { + return x.ResumeToken + } + return nil +} + +func (m *Target) GetReadTime() *google_protobuf1.Timestamp { + if x, ok := m.GetResumeType().(*Target_ReadTime); ok { + return x.ReadTime + } + return nil +} + +func (m *Target) GetTargetId() int32 { + if m != nil { + return m.TargetId + } + return 0 +} + +func (m *Target) GetOnce() bool { + if m != nil { + return m.Once + } + return false +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Target) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Target_OneofMarshaler, _Target_OneofUnmarshaler, _Target_OneofSizer, []interface{}{ + (*Target_Query)(nil), + (*Target_Documents)(nil), + (*Target_ResumeToken)(nil), + (*Target_ReadTime)(nil), + } +} + +func _Target_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Target) + // target_type + switch x := m.TargetType.(type) { + case *Target_Query: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Query); err != nil { + return err + } + case *Target_Documents: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Documents); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Target.TargetType has unexpected type %T", x) + } + // resume_type + switch x := m.ResumeType.(type) { + case *Target_ResumeToken: + b.EncodeVarint(4<<3 | proto.WireBytes) + b.EncodeRawBytes(x.ResumeToken) + case *Target_ReadTime: + b.EncodeVarint(11<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ReadTime); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Target.ResumeType has unexpected type %T", x) + } + return nil +} + +func _Target_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Target) + switch tag { + case 2: // target_type.query + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Target_QueryTarget) + err := b.DecodeMessage(msg) + m.TargetType = &Target_Query{msg} + return true, err + case 3: // target_type.documents + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Target_DocumentsTarget) + err := b.DecodeMessage(msg) + m.TargetType = &Target_Documents{msg} + return true, err + case 4: // resume_type.resume_token + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.ResumeType = &Target_ResumeToken{x} + return true, err + case 11: // resume_type.read_time + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf1.Timestamp) + err := b.DecodeMessage(msg) + m.ResumeType = &Target_ReadTime{msg} + return true, err + default: + return false, nil + } +} + +func _Target_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Target) + // target_type + switch x := m.TargetType.(type) { + case *Target_Query: + s := proto.Size(x.Query) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Target_Documents: + s := proto.Size(x.Documents) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + // resume_type + switch x := m.ResumeType.(type) { + case *Target_ResumeToken: + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.ResumeToken))) + n += len(x.ResumeToken) + case *Target_ReadTime: + s := proto.Size(x.ReadTime) + n += proto.SizeVarint(11<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A target specified by a set of documents names. +type Target_DocumentsTarget struct { + // The names of the documents to retrieve. In the format: + // `projects/{project_id}/databases/{database_id}/documents/{document_path}`. + // The request will fail if any of the document is not a child resource of + // the given `database`. Duplicate names will be elided. + Documents []string `protobuf:"bytes,2,rep,name=documents" json:"documents,omitempty"` +} + +func (m *Target_DocumentsTarget) Reset() { *m = Target_DocumentsTarget{} } +func (m *Target_DocumentsTarget) String() string { return proto.CompactTextString(m) } +func (*Target_DocumentsTarget) ProtoMessage() {} +func (*Target_DocumentsTarget) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{19, 0} } + +func (m *Target_DocumentsTarget) GetDocuments() []string { + if m != nil { + return m.Documents + } + return nil +} + +// A target specified by a query. +type Target_QueryTarget struct { + // The parent resource name. In the format: + // `projects/{project_id}/databases/{database_id}/documents` or + // `projects/{project_id}/databases/{database_id}/documents/{document_path}`. + // For example: + // `projects/my-project/databases/my-database/documents` or + // `projects/my-project/databases/my-database/documents/chatrooms/my-chatroom` + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The query to run. + // + // Types that are valid to be assigned to QueryType: + // *Target_QueryTarget_StructuredQuery + QueryType isTarget_QueryTarget_QueryType `protobuf_oneof:"query_type"` +} + +func (m *Target_QueryTarget) Reset() { *m = Target_QueryTarget{} } +func (m *Target_QueryTarget) String() string { return proto.CompactTextString(m) } +func (*Target_QueryTarget) ProtoMessage() {} +func (*Target_QueryTarget) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{19, 1} } + +type isTarget_QueryTarget_QueryType interface { + isTarget_QueryTarget_QueryType() +} + +type Target_QueryTarget_StructuredQuery struct { + StructuredQuery *StructuredQuery `protobuf:"bytes,2,opt,name=structured_query,json=structuredQuery,oneof"` +} + +func (*Target_QueryTarget_StructuredQuery) isTarget_QueryTarget_QueryType() {} + +func (m *Target_QueryTarget) GetQueryType() isTarget_QueryTarget_QueryType { + if m != nil { + return m.QueryType + } + return nil +} + +func (m *Target_QueryTarget) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *Target_QueryTarget) GetStructuredQuery() *StructuredQuery { + if x, ok := m.GetQueryType().(*Target_QueryTarget_StructuredQuery); ok { + return x.StructuredQuery + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Target_QueryTarget) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Target_QueryTarget_OneofMarshaler, _Target_QueryTarget_OneofUnmarshaler, _Target_QueryTarget_OneofSizer, []interface{}{ + (*Target_QueryTarget_StructuredQuery)(nil), + } +} + +func _Target_QueryTarget_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Target_QueryTarget) + // query_type + switch x := m.QueryType.(type) { + case *Target_QueryTarget_StructuredQuery: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.StructuredQuery); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Target_QueryTarget.QueryType has unexpected type %T", x) + } + return nil +} + +func _Target_QueryTarget_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Target_QueryTarget) + switch tag { + case 2: // query_type.structured_query + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(StructuredQuery) + err := b.DecodeMessage(msg) + m.QueryType = &Target_QueryTarget_StructuredQuery{msg} + return true, err + default: + return false, nil + } +} + +func _Target_QueryTarget_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Target_QueryTarget) + // query_type + switch x := m.QueryType.(type) { + case *Target_QueryTarget_StructuredQuery: + s := proto.Size(x.StructuredQuery) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Targets being watched have changed. +type TargetChange struct { + // The type of change that occurred. + TargetChangeType TargetChange_TargetChangeType `protobuf:"varint,1,opt,name=target_change_type,json=targetChangeType,enum=google.firestore.v1beta1.TargetChange_TargetChangeType" json:"target_change_type,omitempty"` + // The target IDs of targets that have changed. + // + // If empty, the change applies to all targets. + // + // For `target_change_type=ADD`, the order of the target IDs matches the order + // of the requests to add the targets. This allows clients to unambiguously + // associate server-assigned target IDs with added targets. + // + // For other states, the order of the target IDs is not defined. + TargetIds []int32 `protobuf:"varint,2,rep,packed,name=target_ids,json=targetIds" json:"target_ids,omitempty"` + // The error that resulted in this change, if applicable. + Cause *google_rpc.Status `protobuf:"bytes,3,opt,name=cause" json:"cause,omitempty"` + // A token that can be used to resume the stream for the given `target_ids`, + // or all targets if `target_ids` is empty. + // + // Not set on every target change. + ResumeToken []byte `protobuf:"bytes,4,opt,name=resume_token,json=resumeToken,proto3" json:"resume_token,omitempty"` + // The consistent `read_time` for the given `target_ids` (omitted when the + // target_ids are not at a consistent snapshot). + // + // The stream is guaranteed to send a `read_time` with `target_ids` empty + // whenever the entire stream reaches a new consistent snapshot. ADD, + // CURRENT, and RESET messages are guaranteed to (eventually) result in a + // new consistent snapshot (while NO_CHANGE and REMOVE messages are not). + // + // For a given stream, `read_time` is guaranteed to be monotonically + // increasing. + ReadTime *google_protobuf1.Timestamp `protobuf:"bytes,6,opt,name=read_time,json=readTime" json:"read_time,omitempty"` +} + +func (m *TargetChange) Reset() { *m = TargetChange{} } +func (m *TargetChange) String() string { return proto.CompactTextString(m) } +func (*TargetChange) ProtoMessage() {} +func (*TargetChange) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{20} } + +func (m *TargetChange) GetTargetChangeType() TargetChange_TargetChangeType { + if m != nil { + return m.TargetChangeType + } + return TargetChange_NO_CHANGE +} + +func (m *TargetChange) GetTargetIds() []int32 { + if m != nil { + return m.TargetIds + } + return nil +} + +func (m *TargetChange) GetCause() *google_rpc.Status { + if m != nil { + return m.Cause + } + return nil +} + +func (m *TargetChange) GetResumeToken() []byte { + if m != nil { + return m.ResumeToken + } + return nil +} + +func (m *TargetChange) GetReadTime() *google_protobuf1.Timestamp { + if m != nil { + return m.ReadTime + } + return nil +} + +// The request for [Firestore.ListCollectionIds][google.firestore.v1beta1.Firestore.ListCollectionIds]. +type ListCollectionIdsRequest struct { + // The parent document. In the format: + // `projects/{project_id}/databases/{database_id}/documents/{document_path}`. + // For example: + // `projects/my-project/databases/my-database/documents/chatrooms/my-chatroom` + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The maximum number of results to return. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // A page token. Must be a value from + // [ListCollectionIdsResponse][google.firestore.v1beta1.ListCollectionIdsResponse]. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListCollectionIdsRequest) Reset() { *m = ListCollectionIdsRequest{} } +func (m *ListCollectionIdsRequest) String() string { return proto.CompactTextString(m) } +func (*ListCollectionIdsRequest) ProtoMessage() {} +func (*ListCollectionIdsRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{21} } + +func (m *ListCollectionIdsRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListCollectionIdsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListCollectionIdsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// The response from [Firestore.ListCollectionIds][google.firestore.v1beta1.Firestore.ListCollectionIds]. +type ListCollectionIdsResponse struct { + // The collection ids. + CollectionIds []string `protobuf:"bytes,1,rep,name=collection_ids,json=collectionIds" json:"collection_ids,omitempty"` + // A page token that may be used to continue the list. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListCollectionIdsResponse) Reset() { *m = ListCollectionIdsResponse{} } +func (m *ListCollectionIdsResponse) String() string { return proto.CompactTextString(m) } +func (*ListCollectionIdsResponse) ProtoMessage() {} +func (*ListCollectionIdsResponse) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{22} } + +func (m *ListCollectionIdsResponse) GetCollectionIds() []string { + if m != nil { + return m.CollectionIds + } + return nil +} + +func (m *ListCollectionIdsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +func init() { + proto.RegisterType((*GetDocumentRequest)(nil), "google.firestore.v1beta1.GetDocumentRequest") + proto.RegisterType((*ListDocumentsRequest)(nil), "google.firestore.v1beta1.ListDocumentsRequest") + proto.RegisterType((*ListDocumentsResponse)(nil), "google.firestore.v1beta1.ListDocumentsResponse") + proto.RegisterType((*CreateDocumentRequest)(nil), "google.firestore.v1beta1.CreateDocumentRequest") + proto.RegisterType((*UpdateDocumentRequest)(nil), "google.firestore.v1beta1.UpdateDocumentRequest") + proto.RegisterType((*DeleteDocumentRequest)(nil), "google.firestore.v1beta1.DeleteDocumentRequest") + proto.RegisterType((*BatchGetDocumentsRequest)(nil), "google.firestore.v1beta1.BatchGetDocumentsRequest") + proto.RegisterType((*BatchGetDocumentsResponse)(nil), "google.firestore.v1beta1.BatchGetDocumentsResponse") + proto.RegisterType((*BeginTransactionRequest)(nil), "google.firestore.v1beta1.BeginTransactionRequest") + proto.RegisterType((*BeginTransactionResponse)(nil), "google.firestore.v1beta1.BeginTransactionResponse") + proto.RegisterType((*CommitRequest)(nil), "google.firestore.v1beta1.CommitRequest") + proto.RegisterType((*CommitResponse)(nil), "google.firestore.v1beta1.CommitResponse") + proto.RegisterType((*RollbackRequest)(nil), "google.firestore.v1beta1.RollbackRequest") + proto.RegisterType((*RunQueryRequest)(nil), "google.firestore.v1beta1.RunQueryRequest") + proto.RegisterType((*RunQueryResponse)(nil), "google.firestore.v1beta1.RunQueryResponse") + proto.RegisterType((*WriteRequest)(nil), "google.firestore.v1beta1.WriteRequest") + proto.RegisterType((*WriteResponse)(nil), "google.firestore.v1beta1.WriteResponse") + proto.RegisterType((*ListenRequest)(nil), "google.firestore.v1beta1.ListenRequest") + proto.RegisterType((*ListenResponse)(nil), "google.firestore.v1beta1.ListenResponse") + proto.RegisterType((*Target)(nil), "google.firestore.v1beta1.Target") + proto.RegisterType((*Target_DocumentsTarget)(nil), "google.firestore.v1beta1.Target.DocumentsTarget") + proto.RegisterType((*Target_QueryTarget)(nil), "google.firestore.v1beta1.Target.QueryTarget") + proto.RegisterType((*TargetChange)(nil), "google.firestore.v1beta1.TargetChange") + proto.RegisterType((*ListCollectionIdsRequest)(nil), "google.firestore.v1beta1.ListCollectionIdsRequest") + proto.RegisterType((*ListCollectionIdsResponse)(nil), "google.firestore.v1beta1.ListCollectionIdsResponse") + proto.RegisterEnum("google.firestore.v1beta1.TargetChange_TargetChangeType", TargetChange_TargetChangeType_name, TargetChange_TargetChangeType_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for Firestore service + +type FirestoreClient interface { + // Gets a single document. + GetDocument(ctx context.Context, in *GetDocumentRequest, opts ...grpc.CallOption) (*Document, error) + // Lists documents. + ListDocuments(ctx context.Context, in *ListDocumentsRequest, opts ...grpc.CallOption) (*ListDocumentsResponse, error) + // Creates a new document. + CreateDocument(ctx context.Context, in *CreateDocumentRequest, opts ...grpc.CallOption) (*Document, error) + // Updates or inserts a document. + UpdateDocument(ctx context.Context, in *UpdateDocumentRequest, opts ...grpc.CallOption) (*Document, error) + // Deletes a document. + DeleteDocument(ctx context.Context, in *DeleteDocumentRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) + // Gets multiple documents. + // + // Documents returned by this method are not guaranteed to be returned in the + // same order that they were requested. + BatchGetDocuments(ctx context.Context, in *BatchGetDocumentsRequest, opts ...grpc.CallOption) (Firestore_BatchGetDocumentsClient, error) + // Starts a new transaction. + BeginTransaction(ctx context.Context, in *BeginTransactionRequest, opts ...grpc.CallOption) (*BeginTransactionResponse, error) + // Commits a transaction, while optionally updating documents. + Commit(ctx context.Context, in *CommitRequest, opts ...grpc.CallOption) (*CommitResponse, error) + // Rolls back a transaction. + Rollback(ctx context.Context, in *RollbackRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) + // Runs a query. + RunQuery(ctx context.Context, in *RunQueryRequest, opts ...grpc.CallOption) (Firestore_RunQueryClient, error) + // Streams batches of document updates and deletes, in order. + Write(ctx context.Context, opts ...grpc.CallOption) (Firestore_WriteClient, error) + // Listens to changes. + Listen(ctx context.Context, opts ...grpc.CallOption) (Firestore_ListenClient, error) + // Lists all the collection IDs underneath a document. + ListCollectionIds(ctx context.Context, in *ListCollectionIdsRequest, opts ...grpc.CallOption) (*ListCollectionIdsResponse, error) +} + +type firestoreClient struct { + cc *grpc.ClientConn +} + +func NewFirestoreClient(cc *grpc.ClientConn) FirestoreClient { + return &firestoreClient{cc} +} + +func (c *firestoreClient) GetDocument(ctx context.Context, in *GetDocumentRequest, opts ...grpc.CallOption) (*Document, error) { + out := new(Document) + err := grpc.Invoke(ctx, "/google.firestore.v1beta1.Firestore/GetDocument", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *firestoreClient) ListDocuments(ctx context.Context, in *ListDocumentsRequest, opts ...grpc.CallOption) (*ListDocumentsResponse, error) { + out := new(ListDocumentsResponse) + err := grpc.Invoke(ctx, "/google.firestore.v1beta1.Firestore/ListDocuments", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *firestoreClient) CreateDocument(ctx context.Context, in *CreateDocumentRequest, opts ...grpc.CallOption) (*Document, error) { + out := new(Document) + err := grpc.Invoke(ctx, "/google.firestore.v1beta1.Firestore/CreateDocument", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *firestoreClient) UpdateDocument(ctx context.Context, in *UpdateDocumentRequest, opts ...grpc.CallOption) (*Document, error) { + out := new(Document) + err := grpc.Invoke(ctx, "/google.firestore.v1beta1.Firestore/UpdateDocument", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *firestoreClient) DeleteDocument(ctx context.Context, in *DeleteDocumentRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) { + out := new(google_protobuf4.Empty) + err := grpc.Invoke(ctx, "/google.firestore.v1beta1.Firestore/DeleteDocument", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *firestoreClient) BatchGetDocuments(ctx context.Context, in *BatchGetDocumentsRequest, opts ...grpc.CallOption) (Firestore_BatchGetDocumentsClient, error) { + stream, err := grpc.NewClientStream(ctx, &_Firestore_serviceDesc.Streams[0], c.cc, "/google.firestore.v1beta1.Firestore/BatchGetDocuments", opts...) + if err != nil { + return nil, err + } + x := &firestoreBatchGetDocumentsClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type Firestore_BatchGetDocumentsClient interface { + Recv() (*BatchGetDocumentsResponse, error) + grpc.ClientStream +} + +type firestoreBatchGetDocumentsClient struct { + grpc.ClientStream +} + +func (x *firestoreBatchGetDocumentsClient) Recv() (*BatchGetDocumentsResponse, error) { + m := new(BatchGetDocumentsResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *firestoreClient) BeginTransaction(ctx context.Context, in *BeginTransactionRequest, opts ...grpc.CallOption) (*BeginTransactionResponse, error) { + out := new(BeginTransactionResponse) + err := grpc.Invoke(ctx, "/google.firestore.v1beta1.Firestore/BeginTransaction", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *firestoreClient) Commit(ctx context.Context, in *CommitRequest, opts ...grpc.CallOption) (*CommitResponse, error) { + out := new(CommitResponse) + err := grpc.Invoke(ctx, "/google.firestore.v1beta1.Firestore/Commit", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *firestoreClient) Rollback(ctx context.Context, in *RollbackRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) { + out := new(google_protobuf4.Empty) + err := grpc.Invoke(ctx, "/google.firestore.v1beta1.Firestore/Rollback", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *firestoreClient) RunQuery(ctx context.Context, in *RunQueryRequest, opts ...grpc.CallOption) (Firestore_RunQueryClient, error) { + stream, err := grpc.NewClientStream(ctx, &_Firestore_serviceDesc.Streams[1], c.cc, "/google.firestore.v1beta1.Firestore/RunQuery", opts...) + if err != nil { + return nil, err + } + x := &firestoreRunQueryClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type Firestore_RunQueryClient interface { + Recv() (*RunQueryResponse, error) + grpc.ClientStream +} + +type firestoreRunQueryClient struct { + grpc.ClientStream +} + +func (x *firestoreRunQueryClient) Recv() (*RunQueryResponse, error) { + m := new(RunQueryResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *firestoreClient) Write(ctx context.Context, opts ...grpc.CallOption) (Firestore_WriteClient, error) { + stream, err := grpc.NewClientStream(ctx, &_Firestore_serviceDesc.Streams[2], c.cc, "/google.firestore.v1beta1.Firestore/Write", opts...) + if err != nil { + return nil, err + } + x := &firestoreWriteClient{stream} + return x, nil +} + +type Firestore_WriteClient interface { + Send(*WriteRequest) error + Recv() (*WriteResponse, error) + grpc.ClientStream +} + +type firestoreWriteClient struct { + grpc.ClientStream +} + +func (x *firestoreWriteClient) Send(m *WriteRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *firestoreWriteClient) Recv() (*WriteResponse, error) { + m := new(WriteResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *firestoreClient) Listen(ctx context.Context, opts ...grpc.CallOption) (Firestore_ListenClient, error) { + stream, err := grpc.NewClientStream(ctx, &_Firestore_serviceDesc.Streams[3], c.cc, "/google.firestore.v1beta1.Firestore/Listen", opts...) + if err != nil { + return nil, err + } + x := &firestoreListenClient{stream} + return x, nil +} + +type Firestore_ListenClient interface { + Send(*ListenRequest) error + Recv() (*ListenResponse, error) + grpc.ClientStream +} + +type firestoreListenClient struct { + grpc.ClientStream +} + +func (x *firestoreListenClient) Send(m *ListenRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *firestoreListenClient) Recv() (*ListenResponse, error) { + m := new(ListenResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *firestoreClient) ListCollectionIds(ctx context.Context, in *ListCollectionIdsRequest, opts ...grpc.CallOption) (*ListCollectionIdsResponse, error) { + out := new(ListCollectionIdsResponse) + err := grpc.Invoke(ctx, "/google.firestore.v1beta1.Firestore/ListCollectionIds", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Firestore service + +type FirestoreServer interface { + // Gets a single document. + GetDocument(context.Context, *GetDocumentRequest) (*Document, error) + // Lists documents. + ListDocuments(context.Context, *ListDocumentsRequest) (*ListDocumentsResponse, error) + // Creates a new document. + CreateDocument(context.Context, *CreateDocumentRequest) (*Document, error) + // Updates or inserts a document. + UpdateDocument(context.Context, *UpdateDocumentRequest) (*Document, error) + // Deletes a document. + DeleteDocument(context.Context, *DeleteDocumentRequest) (*google_protobuf4.Empty, error) + // Gets multiple documents. + // + // Documents returned by this method are not guaranteed to be returned in the + // same order that they were requested. + BatchGetDocuments(*BatchGetDocumentsRequest, Firestore_BatchGetDocumentsServer) error + // Starts a new transaction. + BeginTransaction(context.Context, *BeginTransactionRequest) (*BeginTransactionResponse, error) + // Commits a transaction, while optionally updating documents. + Commit(context.Context, *CommitRequest) (*CommitResponse, error) + // Rolls back a transaction. + Rollback(context.Context, *RollbackRequest) (*google_protobuf4.Empty, error) + // Runs a query. + RunQuery(*RunQueryRequest, Firestore_RunQueryServer) error + // Streams batches of document updates and deletes, in order. + Write(Firestore_WriteServer) error + // Listens to changes. + Listen(Firestore_ListenServer) error + // Lists all the collection IDs underneath a document. + ListCollectionIds(context.Context, *ListCollectionIdsRequest) (*ListCollectionIdsResponse, error) +} + +func RegisterFirestoreServer(s *grpc.Server, srv FirestoreServer) { + s.RegisterService(&_Firestore_serviceDesc, srv) +} + +func _Firestore_GetDocument_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetDocumentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FirestoreServer).GetDocument(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.firestore.v1beta1.Firestore/GetDocument", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FirestoreServer).GetDocument(ctx, req.(*GetDocumentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Firestore_ListDocuments_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListDocumentsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FirestoreServer).ListDocuments(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.firestore.v1beta1.Firestore/ListDocuments", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FirestoreServer).ListDocuments(ctx, req.(*ListDocumentsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Firestore_CreateDocument_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateDocumentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FirestoreServer).CreateDocument(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.firestore.v1beta1.Firestore/CreateDocument", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FirestoreServer).CreateDocument(ctx, req.(*CreateDocumentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Firestore_UpdateDocument_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateDocumentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FirestoreServer).UpdateDocument(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.firestore.v1beta1.Firestore/UpdateDocument", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FirestoreServer).UpdateDocument(ctx, req.(*UpdateDocumentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Firestore_DeleteDocument_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteDocumentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FirestoreServer).DeleteDocument(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.firestore.v1beta1.Firestore/DeleteDocument", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FirestoreServer).DeleteDocument(ctx, req.(*DeleteDocumentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Firestore_BatchGetDocuments_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(BatchGetDocumentsRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(FirestoreServer).BatchGetDocuments(m, &firestoreBatchGetDocumentsServer{stream}) +} + +type Firestore_BatchGetDocumentsServer interface { + Send(*BatchGetDocumentsResponse) error + grpc.ServerStream +} + +type firestoreBatchGetDocumentsServer struct { + grpc.ServerStream +} + +func (x *firestoreBatchGetDocumentsServer) Send(m *BatchGetDocumentsResponse) error { + return x.ServerStream.SendMsg(m) +} + +func _Firestore_BeginTransaction_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BeginTransactionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FirestoreServer).BeginTransaction(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.firestore.v1beta1.Firestore/BeginTransaction", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FirestoreServer).BeginTransaction(ctx, req.(*BeginTransactionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Firestore_Commit_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CommitRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FirestoreServer).Commit(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.firestore.v1beta1.Firestore/Commit", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FirestoreServer).Commit(ctx, req.(*CommitRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Firestore_Rollback_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RollbackRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FirestoreServer).Rollback(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.firestore.v1beta1.Firestore/Rollback", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FirestoreServer).Rollback(ctx, req.(*RollbackRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Firestore_RunQuery_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(RunQueryRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(FirestoreServer).RunQuery(m, &firestoreRunQueryServer{stream}) +} + +type Firestore_RunQueryServer interface { + Send(*RunQueryResponse) error + grpc.ServerStream +} + +type firestoreRunQueryServer struct { + grpc.ServerStream +} + +func (x *firestoreRunQueryServer) Send(m *RunQueryResponse) error { + return x.ServerStream.SendMsg(m) +} + +func _Firestore_Write_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(FirestoreServer).Write(&firestoreWriteServer{stream}) +} + +type Firestore_WriteServer interface { + Send(*WriteResponse) error + Recv() (*WriteRequest, error) + grpc.ServerStream +} + +type firestoreWriteServer struct { + grpc.ServerStream +} + +func (x *firestoreWriteServer) Send(m *WriteResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *firestoreWriteServer) Recv() (*WriteRequest, error) { + m := new(WriteRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func _Firestore_Listen_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(FirestoreServer).Listen(&firestoreListenServer{stream}) +} + +type Firestore_ListenServer interface { + Send(*ListenResponse) error + Recv() (*ListenRequest, error) + grpc.ServerStream +} + +type firestoreListenServer struct { + grpc.ServerStream +} + +func (x *firestoreListenServer) Send(m *ListenResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *firestoreListenServer) Recv() (*ListenRequest, error) { + m := new(ListenRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func _Firestore_ListCollectionIds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListCollectionIdsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FirestoreServer).ListCollectionIds(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.firestore.v1beta1.Firestore/ListCollectionIds", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FirestoreServer).ListCollectionIds(ctx, req.(*ListCollectionIdsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Firestore_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.firestore.v1beta1.Firestore", + HandlerType: (*FirestoreServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetDocument", + Handler: _Firestore_GetDocument_Handler, + }, + { + MethodName: "ListDocuments", + Handler: _Firestore_ListDocuments_Handler, + }, + { + MethodName: "CreateDocument", + Handler: _Firestore_CreateDocument_Handler, + }, + { + MethodName: "UpdateDocument", + Handler: _Firestore_UpdateDocument_Handler, + }, + { + MethodName: "DeleteDocument", + Handler: _Firestore_DeleteDocument_Handler, + }, + { + MethodName: "BeginTransaction", + Handler: _Firestore_BeginTransaction_Handler, + }, + { + MethodName: "Commit", + Handler: _Firestore_Commit_Handler, + }, + { + MethodName: "Rollback", + Handler: _Firestore_Rollback_Handler, + }, + { + MethodName: "ListCollectionIds", + Handler: _Firestore_ListCollectionIds_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "BatchGetDocuments", + Handler: _Firestore_BatchGetDocuments_Handler, + ServerStreams: true, + }, + { + StreamName: "RunQuery", + Handler: _Firestore_RunQuery_Handler, + ServerStreams: true, + }, + { + StreamName: "Write", + Handler: _Firestore_Write_Handler, + ServerStreams: true, + ClientStreams: true, + }, + { + StreamName: "Listen", + Handler: _Firestore_Listen_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: "google/firestore/v1beta1/firestore.proto", +} + +func init() { proto.RegisterFile("google/firestore/v1beta1/firestore.proto", fileDescriptor2) } + +var fileDescriptor2 = []byte{ + // 2180 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xcd, 0x8f, 0x1b, 0x49, + 0x15, 0x77, 0xf9, 0x6b, 0xec, 0xe7, 0x8f, 0xf1, 0x96, 0x92, 0xac, 0xe3, 0x64, 0xc9, 0xd0, 0x4b, + 0x12, 0x63, 0xad, 0xec, 0x64, 0x22, 0x14, 0xd6, 0x21, 0xcb, 0x66, 0x66, 0x9c, 0xf1, 0x84, 0x24, + 0x33, 0xe9, 0x99, 0x4d, 0x24, 0x14, 0xc9, 0xea, 0xe9, 0xae, 0x38, 0xbd, 0x63, 0x77, 0x7b, 0xbb, + 0xcb, 0x99, 0x9d, 0x5d, 0x0d, 0x02, 0x0e, 0x5c, 0x90, 0xb8, 0x70, 0x00, 0x2e, 0x1c, 0xd8, 0x03, + 0xd2, 0x22, 0xe0, 0x82, 0xc4, 0x05, 0x21, 0x71, 0x43, 0x20, 0x4e, 0x48, 0x08, 0x89, 0x03, 0x1c, + 0x38, 0x71, 0xe3, 0x3f, 0x40, 0x5d, 0x55, 0xdd, 0xee, 0x6e, 0x7f, 0xb5, 0x3d, 0x11, 0xb7, 0xae, + 0xe7, 0x57, 0xaf, 0xde, 0xc7, 0xef, 0xbd, 0x7a, 0xf5, 0x0c, 0xd5, 0xae, 0x69, 0x76, 0x7b, 0xa4, + 0xf1, 0x42, 0xb7, 0x88, 0x4d, 0x4d, 0x8b, 0x34, 0x5e, 0xdd, 0x3c, 0x24, 0x54, 0xb9, 0x39, 0xa2, + 0xd4, 0x07, 0x96, 0x49, 0x4d, 0x5c, 0xe6, 0x9c, 0xf5, 0x11, 0x5d, 0x70, 0x56, 0x2e, 0x0b, 0x19, + 0xca, 0x40, 0x6f, 0x28, 0x86, 0x61, 0x52, 0x85, 0xea, 0xa6, 0x61, 0xf3, 0x7d, 0x95, 0xab, 0x53, + 0x4f, 0x50, 0xcd, 0x7e, 0xdf, 0x34, 0x04, 0xdb, 0xf5, 0xa9, 0x6c, 0x9a, 0xa9, 0x0e, 0xfb, 0xc4, + 0xa0, 0x82, 0xf1, 0x4b, 0x53, 0x19, 0x3f, 0x1a, 0x12, 0xeb, 0x64, 0x2e, 0xd7, 0xb1, 0xa5, 0x53, + 0x61, 0x53, 0xe5, 0x92, 0xe0, 0x62, 0xab, 0xc3, 0xe1, 0x8b, 0x06, 0xe9, 0x0f, 0xa8, 0x2b, 0xe2, + 0x4a, 0xf8, 0x47, 0xaa, 0xf7, 0x89, 0x4d, 0x95, 0xfe, 0x40, 0x30, 0xbc, 0x29, 0x18, 0xac, 0x81, + 0xda, 0xb0, 0xa9, 0x42, 0x87, 0xc2, 0x64, 0xe9, 0x1f, 0x08, 0xf0, 0x36, 0xa1, 0x5b, 0x42, 0x71, + 0x99, 0x7c, 0x34, 0x24, 0x36, 0xc5, 0x18, 0x92, 0x86, 0xd2, 0x27, 0x65, 0xb4, 0x86, 0xaa, 0x59, + 0x99, 0x7d, 0xe3, 0x26, 0x24, 0xfb, 0x8a, 0x7d, 0x54, 0x8e, 0xaf, 0xa1, 0x6a, 0x6e, 0xfd, 0x5a, + 0x7d, 0x9a, 0x93, 0xeb, 0xae, 0xb0, 0x47, 0x8a, 0x7d, 0x24, 0xb3, 0x3d, 0x58, 0x82, 0x1c, 0xb5, + 0x14, 0xc3, 0x56, 0x54, 0xc7, 0xdf, 0xe5, 0xc4, 0x1a, 0xaa, 0xe6, 0xdb, 0x31, 0xd9, 0x4f, 0xc4, + 0xef, 0x42, 0xd6, 0x22, 0x8a, 0xd6, 0x71, 0x74, 0x2f, 0xa7, 0xd8, 0x21, 0x15, 0xf7, 0x10, 0xd7, + 0xb0, 0xfa, 0x81, 0x6b, 0x58, 0x3b, 0x26, 0x67, 0x1c, 0x76, 0x87, 0xb0, 0x71, 0x01, 0xce, 0xa9, + 0xa6, 0x61, 0xeb, 0x36, 0x25, 0x86, 0x7a, 0xd2, 0xb1, 0x49, 0x8f, 0xa8, 0xd4, 0xb4, 0xa4, 0x6f, + 0x27, 0xe0, 0xdc, 0x43, 0xdd, 0xf6, 0xcc, 0xb3, 0x5d, 0xfb, 0x2e, 0x40, 0x7a, 0xa0, 0x58, 0xc4, + 0xa0, 0xc2, 0x42, 0xb1, 0xc2, 0x6f, 0x43, 0x41, 0x35, 0x7b, 0xce, 0x6e, 0xdd, 0x34, 0x3a, 0xba, + 0xc6, 0x8c, 0xcd, 0xca, 0xf9, 0x11, 0x71, 0x47, 0xc3, 0x97, 0x20, 0x3b, 0x50, 0xba, 0xa4, 0x63, + 0xeb, 0x9f, 0x10, 0x66, 0x4a, 0x4a, 0xce, 0x38, 0x84, 0x7d, 0xfd, 0x13, 0x82, 0xdf, 0x02, 0x60, + 0x3f, 0x52, 0xf3, 0x88, 0x18, 0xe5, 0x24, 0xdb, 0xce, 0xd8, 0x0f, 0x1c, 0x02, 0xbe, 0x08, 0x19, + 0xd3, 0xd2, 0x88, 0xd5, 0x39, 0x3c, 0x29, 0xa7, 0xd9, 0x8f, 0x2b, 0x6c, 0xbd, 0x71, 0xe2, 0xf9, + 0x77, 0xe5, 0xec, 0xfe, 0xcd, 0xcc, 0xf5, 0x2f, 0x2c, 0xe2, 0x5f, 0xfc, 0x45, 0xc8, 0xdb, 0x2f, + 0xcd, 0xe3, 0x4e, 0x5f, 0xb7, 0x6d, 0xdd, 0xe8, 0x96, 0xf3, 0x6b, 0xa8, 0x9a, 0x91, 0x73, 0x0e, + 0xed, 0x11, 0x27, 0x4d, 0x0d, 0xc1, 0x77, 0x10, 0x9c, 0x0f, 0x85, 0xc0, 0x1e, 0x98, 0x86, 0x4d, + 0xf0, 0xfb, 0x90, 0x75, 0xf3, 0xc5, 0x2e, 0xa3, 0xb5, 0x44, 0x35, 0xb7, 0x2e, 0xcd, 0x37, 0x5a, + 0x1e, 0x6d, 0xc2, 0xd7, 0x60, 0xd5, 0x20, 0x1f, 0xd3, 0x8e, 0xcf, 0xe1, 0x3c, 0x5e, 0x05, 0x87, + 0xbc, 0xe7, 0x3a, 0x5d, 0xfa, 0x2f, 0x82, 0xf3, 0x9b, 0x16, 0x51, 0x28, 0x09, 0xe3, 0xfc, 0x4c, + 0x38, 0xb8, 0x02, 0x39, 0x57, 0x17, 0x87, 0x25, 0xc1, 0x58, 0xc0, 0x25, 0xed, 0x68, 0xf8, 0x3d, + 0xc8, 0xb8, 0x2b, 0x86, 0x84, 0x68, 0x06, 0x7a, 0x7b, 0x3c, 0x44, 0xa4, 0x16, 0x47, 0x84, 0xf4, + 0xeb, 0x38, 0x9c, 0xff, 0x60, 0xa0, 0x4d, 0xb0, 0xd9, 0xaf, 0x15, 0x5a, 0x42, 0xab, 0x6d, 0xc8, + 0x0d, 0x99, 0xe0, 0xce, 0x12, 0xe5, 0x00, 0xf8, 0x56, 0xe7, 0xdb, 0x33, 0x2f, 0xb1, 0x04, 0xe0, + 0x9f, 0x40, 0x49, 0x1d, 0x5a, 0x4e, 0xac, 0x3a, 0x21, 0x17, 0xcf, 0x90, 0xb3, 0x67, 0x11, 0xd5, + 0x34, 0x34, 0xdd, 0x89, 0x9f, 0xbc, 0x2a, 0xf6, 0xbb, 0xc2, 0xa5, 0x6f, 0xc1, 0xf9, 0x2d, 0xd2, + 0x23, 0xe3, 0x0e, 0x9b, 0x54, 0x0c, 0x27, 0x9d, 0x1f, 0x3f, 0xdb, 0xf9, 0xff, 0x8a, 0x43, 0x79, + 0x43, 0xa1, 0xea, 0x4b, 0x5f, 0x3d, 0xf6, 0x0a, 0x56, 0x05, 0x32, 0x9a, 0x42, 0x95, 0x43, 0xc5, + 0x76, 0xf5, 0xf0, 0xd6, 0xf8, 0xb2, 0x3f, 0x91, 0xe2, 0x6b, 0x09, 0xa7, 0xe2, 0x8c, 0x92, 0xe4, + 0x2c, 0x5e, 0x0e, 0x95, 0x95, 0xe4, 0xa4, 0xb2, 0xf2, 0xcc, 0x49, 0xc2, 0xe3, 0x8e, 0x9f, 0x8f, + 0xe3, 0xf5, 0x9d, 0xe9, 0x47, 0x1d, 0x8c, 0x98, 0x77, 0x07, 0xec, 0x06, 0x6e, 0xc7, 0xe4, 0xa2, + 0x41, 0x8e, 0x0f, 0xa6, 0xd5, 0xab, 0x95, 0xd7, 0x72, 0x1f, 0xfc, 0x1d, 0xc1, 0xc5, 0x09, 0x2e, + 0x16, 0x05, 0xa9, 0x09, 0xa9, 0x17, 0xe6, 0xd0, 0xd0, 0xa2, 0x67, 0x45, 0x3b, 0x26, 0xf3, 0x2d, + 0xb8, 0x02, 0x2b, 0x6e, 0x71, 0x64, 0xa5, 0xa2, 0x1d, 0x93, 0x5d, 0x02, 0x5e, 0x9b, 0x70, 0xf9, + 0x05, 0x7d, 0x78, 0xdb, 0x6f, 0x6a, 0x72, 0x9e, 0xa9, 0x3e, 0x43, 0x33, 0x90, 0xb6, 0x88, 0x3d, + 0xec, 0x51, 0xe9, 0x14, 0xde, 0xdc, 0x20, 0x5d, 0xdd, 0xf0, 0x79, 0x30, 0x0a, 0x76, 0xee, 0xc3, + 0x8a, 0xc9, 0x23, 0x20, 0xe0, 0xbb, 0x50, 0xd4, 0x64, 0x77, 0xb3, 0xf4, 0x35, 0x28, 0x8f, 0x1f, + 0x2f, 0xfc, 0x1a, 0xb2, 0x1f, 0x8d, 0xd9, 0x2f, 0x7d, 0x0f, 0x41, 0x61, 0xd3, 0xec, 0xf7, 0x75, + 0x1a, 0x45, 0xe7, 0xdb, 0x90, 0x66, 0x9d, 0x11, 0x07, 0x7b, 0x6e, 0xfd, 0xca, 0x74, 0x95, 0x9f, + 0x39, 0x7c, 0xb2, 0x60, 0x9f, 0x1f, 0x08, 0xe9, 0x27, 0x08, 0x8a, 0xae, 0x22, 0x42, 0xfb, 0x07, + 0x50, 0x60, 0xdb, 0x3b, 0xdc, 0xd1, 0xee, 0x55, 0x75, 0x75, 0xde, 0xa1, 0x8c, 0x5b, 0xce, 0x1f, + 0x8f, 0x16, 0x36, 0xbe, 0x03, 0x39, 0x95, 0x49, 0xe7, 0x91, 0x8e, 0xcf, 0x8d, 0x34, 0x70, 0x76, + 0x87, 0x20, 0xed, 0xc2, 0xaa, 0x6c, 0xf6, 0x7a, 0x87, 0x8a, 0x7a, 0x14, 0xc5, 0x4b, 0x21, 0x63, + 0xe3, 0xe3, 0xc6, 0xfe, 0x33, 0x0e, 0xab, 0xf2, 0xd0, 0x78, 0xe2, 0xf4, 0xa2, 0xf3, 0x2e, 0xc4, + 0xa7, 0x50, 0xb2, 0xa9, 0x35, 0x54, 0xe9, 0xd0, 0x22, 0x5a, 0x87, 0xb5, 0xaf, 0x42, 0xfd, 0x2f, + 0x4f, 0x77, 0xc4, 0xbe, 0xb7, 0x83, 0x9d, 0xd1, 0x8e, 0xc9, 0xab, 0x76, 0x90, 0x14, 0xae, 0x30, + 0x29, 0x56, 0x61, 0xd0, 0xdc, 0x0a, 0x93, 0x5e, 0xa2, 0xc2, 0xa0, 0xb3, 0x56, 0x18, 0xe4, 0x4b, + 0xbc, 0x3c, 0x00, 0x73, 0x42, 0x87, 0x9e, 0x0c, 0xa6, 0xd7, 0x9b, 0xbf, 0x21, 0x28, 0x8d, 0x3c, + 0x3c, 0x39, 0x1d, 0xc6, 0x03, 0x73, 0xe6, 0x1b, 0x3a, 0x50, 0x4e, 0x12, 0xd1, 0xcb, 0x09, 0xbe, + 0x0e, 0xab, 0xf6, 0x91, 0x3e, 0x18, 0x10, 0xcd, 0x43, 0x7b, 0x92, 0xf5, 0xb7, 0x45, 0x41, 0x16, + 0x40, 0x96, 0x3e, 0x8f, 0x43, 0x5e, 0xc0, 0x7c, 0x3e, 0x12, 0x2f, 0x41, 0xd6, 0xa6, 0x16, 0x51, + 0xfa, 0xa3, 0x46, 0x2a, 0xc3, 0x09, 0x3b, 0x9a, 0x2f, 0x99, 0x13, 0x8b, 0x25, 0xb3, 0xd3, 0x93, + 0x72, 0xa9, 0xa3, 0x56, 0x3b, 0x2f, 0xe7, 0x38, 0x8d, 0x37, 0xdb, 0x0f, 0x20, 0xdd, 0x53, 0x0e, + 0x49, 0xcf, 0x2e, 0xa7, 0x98, 0xec, 0xf5, 0xb9, 0x39, 0xcb, 0x8c, 0xa9, 0x3f, 0x64, 0x9b, 0x5a, + 0x06, 0xb5, 0x4e, 0x64, 0x21, 0xa1, 0xf2, 0x2e, 0xe4, 0x7c, 0x64, 0x5c, 0x82, 0xc4, 0x11, 0x39, + 0x11, 0xa6, 0x3a, 0x9f, 0xf8, 0x1c, 0xa4, 0x5e, 0x29, 0xbd, 0x21, 0x11, 0x16, 0xf2, 0x45, 0x33, + 0xfe, 0x55, 0xe4, 0xdc, 0x3a, 0x05, 0xb7, 0x26, 0x70, 0x08, 0x04, 0x3c, 0x82, 0x42, 0x1e, 0x09, + 0x1b, 0x16, 0x9f, 0x64, 0x58, 0xa8, 0x26, 0x25, 0x5e, 0x5b, 0x4d, 0x4a, 0x2e, 0x54, 0x93, 0x7e, + 0x15, 0x87, 0xc2, 0x43, 0x06, 0xfb, 0x28, 0x40, 0xb8, 0x07, 0xa0, 0x68, 0x5a, 0x87, 0x2a, 0x56, + 0x97, 0xb8, 0xed, 0xd2, 0xda, 0x8c, 0x1c, 0x66, 0x7c, 0xed, 0x98, 0x9c, 0x55, 0x34, 0x8d, 0x2f, + 0xf0, 0x55, 0x28, 0x58, 0xa4, 0x6f, 0xbe, 0x22, 0xae, 0x14, 0xf6, 0xfe, 0x6a, 0xc7, 0xe4, 0x3c, + 0x27, 0x0b, 0xb6, 0x6f, 0x78, 0x91, 0x4f, 0x32, 0xcf, 0xdc, 0x9a, 0x7e, 0x4a, 0x40, 0xfd, 0xd7, + 0x1c, 0xfa, 0x8d, 0x55, 0x28, 0x70, 0x3d, 0x3b, 0xea, 0x4b, 0xc5, 0xe8, 0x12, 0xe9, 0x37, 0x09, + 0x28, 0xba, 0x27, 0x0a, 0x30, 0x3c, 0x0a, 0xf1, 0xcc, 0xef, 0x23, 0xb9, 0x91, 0x9b, 0x8c, 0xdb, + 0x31, 0x9d, 0xfa, 0xd6, 0x78, 0x1f, 0x56, 0xbd, 0x57, 0x89, 0x10, 0xc8, 0x4b, 0x40, 0x75, 0x7e, + 0x0d, 0xf1, 0x44, 0x16, 0xb5, 0x00, 0x25, 0x20, 0x54, 0x63, 0x4d, 0xb2, 0x00, 0x4a, 0x04, 0xa1, + 0xbc, 0xa9, 0xf6, 0x0b, 0xe5, 0x94, 0x80, 0x50, 0x1e, 0x3d, 0x51, 0xd7, 0x23, 0x08, 0x95, 0x19, + 0xbf, 0x5f, 0x28, 0xa7, 0xe0, 0x4d, 0x48, 0xbf, 0xd0, 0x7b, 0x94, 0x58, 0xa2, 0x0b, 0x9d, 0x71, + 0x3d, 0xb5, 0x3e, 0xe6, 0x05, 0x9b, 0xdc, 0x67, 0x1b, 0xda, 0x31, 0x59, 0x6c, 0x75, 0xc2, 0x66, + 0x89, 0xf0, 0xb0, 0x02, 0x2f, 0xfd, 0x20, 0x09, 0x69, 0x01, 0xad, 0x2d, 0x48, 0xf9, 0xaf, 0xbf, + 0x77, 0xe6, 0x85, 0xa9, 0xce, 0xaa, 0xbf, 0x87, 0x65, 0xbe, 0x19, 0xef, 0xf9, 0x7b, 0x76, 0x1e, + 0x9f, 0x1b, 0x73, 0x25, 0x79, 0x2d, 0xeb, 0x28, 0x33, 0x46, 0x7d, 0xfe, 0xdb, 0x90, 0x77, 0xaa, + 0x41, 0xdf, 0x3f, 0x7a, 0x60, 0x57, 0x29, 0xa7, 0xf2, 0xc2, 0x11, 0xb8, 0xf1, 0x72, 0x8b, 0xdc, + 0x78, 0x4e, 0xcd, 0x12, 0x30, 0xd5, 0x35, 0xe6, 0xdb, 0x94, 0x9c, 0xe1, 0x84, 0x1d, 0xcd, 0x79, + 0x22, 0x99, 0x86, 0xca, 0xe3, 0x97, 0x91, 0xd9, 0x77, 0xa5, 0x01, 0xab, 0x21, 0x85, 0x67, 0xbf, + 0x54, 0x2a, 0xdf, 0x47, 0x90, 0xf3, 0x39, 0xeb, 0xff, 0xdd, 0x8b, 0x84, 0xee, 0xf4, 0x02, 0xe4, + 0x84, 0xbd, 0xee, 0xd2, 0x75, 0xaf, 0x03, 0x88, 0xff, 0xc4, 0x21, 0xef, 0x4f, 0x43, 0x4c, 0x00, + 0x07, 0xb2, 0x98, 0xb1, 0x31, 0xc5, 0x8b, 0xeb, 0xb7, 0xa3, 0xa5, 0x72, 0x60, 0x71, 0x70, 0x32, + 0x20, 0x72, 0x89, 0x86, 0x28, 0xf8, 0x2d, 0x00, 0x2f, 0x0a, 0xdc, 0x85, 0x29, 0x39, 0xeb, 0x86, + 0xc1, 0xc6, 0x55, 0x48, 0xa9, 0xca, 0xd0, 0x76, 0x53, 0x1e, 0xbb, 0x07, 0x5b, 0x03, 0xb5, 0xbe, + 0xcf, 0xe6, 0x7e, 0x32, 0x67, 0x70, 0x6e, 0x99, 0x71, 0xb8, 0x04, 0xc1, 0x12, 0x68, 0x23, 0xd2, + 0xd1, 0xdb, 0x08, 0xe9, 0x31, 0x94, 0xc2, 0xa6, 0xe0, 0x02, 0x64, 0x1f, 0xef, 0x76, 0x36, 0xdb, + 0xf7, 0x1e, 0x6f, 0xb7, 0x4a, 0x31, 0xbc, 0x02, 0x89, 0x7b, 0x5b, 0x5b, 0x25, 0x84, 0x01, 0xd2, + 0x72, 0xeb, 0xd1, 0xee, 0xd3, 0x56, 0x29, 0x8e, 0x73, 0xb0, 0xb2, 0xf9, 0x81, 0x2c, 0xb7, 0x1e, + 0x1f, 0x94, 0x12, 0x38, 0x0b, 0x29, 0xb9, 0xb5, 0xdf, 0x3a, 0x28, 0x25, 0x25, 0x03, 0xca, 0x4e, + 0xcd, 0xdc, 0xf4, 0x0d, 0x5f, 0xe6, 0x4e, 0xf2, 0x02, 0x43, 0xba, 0xf8, 0xcc, 0x21, 0x5d, 0x22, + 0x34, 0xa4, 0x93, 0x3e, 0x84, 0x8b, 0x13, 0xce, 0x13, 0xe5, 0xfa, 0x2a, 0x14, 0x03, 0xa3, 0x21, + 0xfe, 0x20, 0xc8, 0xca, 0x05, 0xff, 0x6c, 0x28, 0xf2, 0x6c, 0x6a, 0xfd, 0x97, 0x18, 0xb2, 0xf7, + 0x5d, 0x58, 0xe0, 0x9f, 0x22, 0xc8, 0xf9, 0xde, 0xa6, 0x78, 0x46, 0x75, 0x19, 0x9f, 0xda, 0x56, + 0x22, 0x74, 0x89, 0xd2, 0xdd, 0xef, 0xfe, 0xf5, 0xdf, 0x3f, 0x8c, 0xdf, 0xc6, 0x5f, 0xf1, 0xa6, + 0xcc, 0x9f, 0x1a, 0x4a, 0x9f, 0xdc, 0x1d, 0x58, 0xe6, 0x87, 0x44, 0xa5, 0x76, 0xa3, 0xd6, 0x70, + 0xef, 0x6b, 0xf6, 0xed, 0x66, 0x67, 0xa3, 0xd6, 0xa8, 0xd5, 0x4e, 0xf1, 0x1f, 0x10, 0xbf, 0xf0, + 0xbd, 0xcc, 0xc6, 0xf5, 0xd9, 0x57, 0x6b, 0x78, 0x92, 0x51, 0x69, 0x44, 0xe6, 0xe7, 0x0e, 0x97, + 0x76, 0x99, 0xc6, 0x3b, 0x78, 0x7b, 0xa4, 0x31, 0x8f, 0x71, 0x44, 0x9d, 0x1b, 0x9f, 0x06, 0xe2, + 0x75, 0x8a, 0x7f, 0xef, 0x3c, 0xf2, 0x02, 0xe3, 0x40, 0x3c, 0x43, 0xa9, 0x89, 0x83, 0xc3, 0x48, + 0xae, 0x7e, 0xc6, 0x14, 0x7f, 0x22, 0xb5, 0x96, 0x50, 0x7c, 0x5c, 0xed, 0xe6, 0xa8, 0xbf, 0xff, + 0x2d, 0x82, 0x62, 0x70, 0xb6, 0x37, 0xcb, 0x80, 0x89, 0x53, 0xc0, 0x48, 0x06, 0xec, 0x31, 0x03, + 0x1e, 0xac, 0xbf, 0x37, 0x32, 0xc0, 0xfb, 0x87, 0x63, 0x01, 0xd0, 0xf8, 0x34, 0xff, 0x31, 0x82, + 0x62, 0x70, 0xc8, 0x36, 0x4b, 0xf3, 0x89, 0xe3, 0xb8, 0xca, 0x85, 0xb1, 0x1a, 0xd4, 0xea, 0x0f, + 0xe8, 0x89, 0x8b, 0xec, 0xda, 0x92, 0xc8, 0xfe, 0x23, 0x82, 0x37, 0xc6, 0x66, 0x43, 0x78, 0xc6, + 0x93, 0x61, 0xda, 0xac, 0xae, 0x72, 0x6b, 0xa1, 0x3d, 0x02, 0xe5, 0x6d, 0xa6, 0xfd, 0x86, 0x74, + 0xd7, 0xe7, 0x6b, 0xa1, 0xed, 0x14, 0x0b, 0x4e, 0x47, 0x26, 0x34, 0x0f, 0x85, 0xdc, 0x26, 0xaa, + 0xdd, 0x40, 0xf8, 0xcf, 0x08, 0x4a, 0xe1, 0x69, 0x0c, 0xbe, 0x39, 0x43, 0xab, 0xc9, 0x83, 0xa3, + 0xca, 0xfa, 0x22, 0x5b, 0x84, 0x1d, 0x02, 0x33, 0x7e, 0xd0, 0x2f, 0x62, 0x47, 0x48, 0x6c, 0x13, + 0xd5, 0xf0, 0x67, 0x08, 0xd2, 0x7c, 0x26, 0x83, 0xaf, 0xcf, 0x48, 0x53, 0xff, 0xf8, 0xa8, 0x52, + 0x9d, 0xcf, 0x28, 0xf4, 0xbd, 0xcf, 0xf4, 0x7d, 0x5f, 0xba, 0xb3, 0x94, 0xbe, 0xfc, 0x29, 0xe4, + 0x68, 0xf9, 0x23, 0x04, 0x19, 0x77, 0x3c, 0x83, 0x67, 0xf4, 0x21, 0xa1, 0x11, 0xce, 0x54, 0x34, + 0x9f, 0x0d, 0x0f, 0x96, 0x38, 0xc5, 0xd1, 0xec, 0x17, 0x8e, 0x66, 0x62, 0x08, 0x31, 0x53, 0xb3, + 0xe0, 0x28, 0xa8, 0x52, 0x8b, 0xc2, 0x3a, 0xdd, 0x8b, 0x11, 0x4b, 0xdd, 0x69, 0xd3, 0x12, 0xc2, + 0x38, 0x76, 0x3f, 0x43, 0x90, 0x62, 0x8f, 0x55, 0x7c, 0x2d, 0xda, 0x6b, 0xbd, 0x72, 0x7d, 0xfe, + 0xab, 0x97, 0x2b, 0xd9, 0x62, 0x4a, 0x7e, 0x5d, 0x6a, 0x2e, 0xe5, 0x52, 0xf6, 0x68, 0x6e, 0xa2, + 0x5a, 0x15, 0xdd, 0x40, 0xf8, 0xe7, 0x08, 0xd2, 0xfc, 0x19, 0x37, 0x0b, 0x93, 0x81, 0xa7, 0xe5, + 0x2c, 0x4c, 0x06, 0x5f, 0x84, 0x67, 0xc4, 0x64, 0x8f, 0x09, 0x73, 0x35, 0xfd, 0x0b, 0x82, 0x37, + 0xc6, 0x9a, 0x99, 0x59, 0x65, 0x6d, 0x5a, 0xa7, 0x55, 0xb9, 0xb5, 0xd0, 0x9e, 0xe0, 0xe5, 0x2d, + 0x6d, 0x2d, 0x01, 0x8c, 0x5e, 0x58, 0x6a, 0x13, 0xd5, 0x36, 0x7e, 0x87, 0xe0, 0xb2, 0x6a, 0xf6, + 0xa7, 0xea, 0xb2, 0x51, 0xf4, 0xba, 0xa9, 0x3d, 0x27, 0xa3, 0xf6, 0xd0, 0x37, 0xef, 0x09, 0xde, + 0xae, 0xd9, 0x53, 0x8c, 0x6e, 0xdd, 0xb4, 0xba, 0x8d, 0x2e, 0x31, 0x58, 0xbe, 0x35, 0xf8, 0x4f, + 0xca, 0x40, 0xb7, 0xc7, 0xff, 0x7f, 0xbf, 0xe3, 0x51, 0x7e, 0x16, 0x4f, 0x6e, 0x6f, 0xde, 0xdf, + 0xff, 0x3c, 0xfe, 0x85, 0x6d, 0x2e, 0x6a, 0xb3, 0x67, 0x0e, 0xb5, 0xba, 0x77, 0x52, 0xfd, 0xe9, + 0xcd, 0x0d, 0x67, 0xc7, 0x9f, 0x5c, 0x86, 0xe7, 0x8c, 0xe1, 0xb9, 0xc7, 0xf0, 0xfc, 0x29, 0x17, + 0x79, 0x98, 0x66, 0xc7, 0xde, 0xfa, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x63, 0xa1, 0x5f, 0x1d, + 0xcd, 0x20, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/firestore/v1beta1/query.pb.go b/vendor/google.golang.org/genproto/googleapis/firestore/v1beta1/query.pb.go new file mode 100644 index 0000000..98e5e20 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/firestore/v1beta1/query.pb.go @@ -0,0 +1,783 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/firestore/v1beta1/query.proto + +package firestore + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf3 "github.com/golang/protobuf/ptypes/wrappers" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// A sort direction. +type StructuredQuery_Direction int32 + +const ( + // Unspecified. + StructuredQuery_DIRECTION_UNSPECIFIED StructuredQuery_Direction = 0 + // Ascending. + StructuredQuery_ASCENDING StructuredQuery_Direction = 1 + // Descending. + StructuredQuery_DESCENDING StructuredQuery_Direction = 2 +) + +var StructuredQuery_Direction_name = map[int32]string{ + 0: "DIRECTION_UNSPECIFIED", + 1: "ASCENDING", + 2: "DESCENDING", +} +var StructuredQuery_Direction_value = map[string]int32{ + "DIRECTION_UNSPECIFIED": 0, + "ASCENDING": 1, + "DESCENDING": 2, +} + +func (x StructuredQuery_Direction) String() string { + return proto.EnumName(StructuredQuery_Direction_name, int32(x)) +} +func (StructuredQuery_Direction) EnumDescriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 0} } + +// A composite filter operator. +type StructuredQuery_CompositeFilter_Operator int32 + +const ( + // Unspecified. This value must not be used. + StructuredQuery_CompositeFilter_OPERATOR_UNSPECIFIED StructuredQuery_CompositeFilter_Operator = 0 + // The results are required to satisfy each of the combined filters. + StructuredQuery_CompositeFilter_AND StructuredQuery_CompositeFilter_Operator = 1 +) + +var StructuredQuery_CompositeFilter_Operator_name = map[int32]string{ + 0: "OPERATOR_UNSPECIFIED", + 1: "AND", +} +var StructuredQuery_CompositeFilter_Operator_value = map[string]int32{ + "OPERATOR_UNSPECIFIED": 0, + "AND": 1, +} + +func (x StructuredQuery_CompositeFilter_Operator) String() string { + return proto.EnumName(StructuredQuery_CompositeFilter_Operator_name, int32(x)) +} +func (StructuredQuery_CompositeFilter_Operator) EnumDescriptor() ([]byte, []int) { + return fileDescriptor3, []int{0, 2, 0} +} + +// A field filter operator. +type StructuredQuery_FieldFilter_Operator int32 + +const ( + // Unspecified. This value must not be used. + StructuredQuery_FieldFilter_OPERATOR_UNSPECIFIED StructuredQuery_FieldFilter_Operator = 0 + // Less than. Requires that the field come first in `order_by`. + StructuredQuery_FieldFilter_LESS_THAN StructuredQuery_FieldFilter_Operator = 1 + // Less than or equal. Requires that the field come first in `order_by`. + StructuredQuery_FieldFilter_LESS_THAN_OR_EQUAL StructuredQuery_FieldFilter_Operator = 2 + // Greater than. Requires that the field come first in `order_by`. + StructuredQuery_FieldFilter_GREATER_THAN StructuredQuery_FieldFilter_Operator = 3 + // Greater than or equal. Requires that the field come first in + // `order_by`. + StructuredQuery_FieldFilter_GREATER_THAN_OR_EQUAL StructuredQuery_FieldFilter_Operator = 4 + // Equal. + StructuredQuery_FieldFilter_EQUAL StructuredQuery_FieldFilter_Operator = 5 +) + +var StructuredQuery_FieldFilter_Operator_name = map[int32]string{ + 0: "OPERATOR_UNSPECIFIED", + 1: "LESS_THAN", + 2: "LESS_THAN_OR_EQUAL", + 3: "GREATER_THAN", + 4: "GREATER_THAN_OR_EQUAL", + 5: "EQUAL", +} +var StructuredQuery_FieldFilter_Operator_value = map[string]int32{ + "OPERATOR_UNSPECIFIED": 0, + "LESS_THAN": 1, + "LESS_THAN_OR_EQUAL": 2, + "GREATER_THAN": 3, + "GREATER_THAN_OR_EQUAL": 4, + "EQUAL": 5, +} + +func (x StructuredQuery_FieldFilter_Operator) String() string { + return proto.EnumName(StructuredQuery_FieldFilter_Operator_name, int32(x)) +} +func (StructuredQuery_FieldFilter_Operator) EnumDescriptor() ([]byte, []int) { + return fileDescriptor3, []int{0, 3, 0} +} + +// A unary operator. +type StructuredQuery_UnaryFilter_Operator int32 + +const ( + // Unspecified. This value must not be used. + StructuredQuery_UnaryFilter_OPERATOR_UNSPECIFIED StructuredQuery_UnaryFilter_Operator = 0 + // Test if a field is equal to NaN. + StructuredQuery_UnaryFilter_IS_NAN StructuredQuery_UnaryFilter_Operator = 2 + // Test if an exprestion evaluates to Null. + StructuredQuery_UnaryFilter_IS_NULL StructuredQuery_UnaryFilter_Operator = 3 +) + +var StructuredQuery_UnaryFilter_Operator_name = map[int32]string{ + 0: "OPERATOR_UNSPECIFIED", + 2: "IS_NAN", + 3: "IS_NULL", +} +var StructuredQuery_UnaryFilter_Operator_value = map[string]int32{ + "OPERATOR_UNSPECIFIED": 0, + "IS_NAN": 2, + "IS_NULL": 3, +} + +func (x StructuredQuery_UnaryFilter_Operator) String() string { + return proto.EnumName(StructuredQuery_UnaryFilter_Operator_name, int32(x)) +} +func (StructuredQuery_UnaryFilter_Operator) EnumDescriptor() ([]byte, []int) { + return fileDescriptor3, []int{0, 4, 0} +} + +// A Firestore query. +type StructuredQuery struct { + // The projection to return. + Select *StructuredQuery_Projection `protobuf:"bytes,1,opt,name=select" json:"select,omitempty"` + // The collections to query. + From []*StructuredQuery_CollectionSelector `protobuf:"bytes,2,rep,name=from" json:"from,omitempty"` + // The filter to apply. + Where *StructuredQuery_Filter `protobuf:"bytes,3,opt,name=where" json:"where,omitempty"` + // The order to apply to the query results. + // + // Firestore guarantees a stable ordering through the following rules: + // + // * Any field required to appear in `order_by`, that is not already + // specified in `order_by`, is appended to the order in field name order + // by default. + // * If an order on `__name__` is not specified, it is appended by default. + // + // Fields are appended with the same sort direction as the last order + // specified, or 'ASCENDING' if no order was specified. For example: + // + // * `SELECT * FROM Foo ORDER BY A` becomes + // `SELECT * FROM Foo ORDER BY A, __name__` + // * `SELECT * FROM Foo ORDER BY A DESC` becomes + // `SELECT * FROM Foo ORDER BY A DESC, __name__ DESC` + // * `SELECT * FROM Foo WHERE A > 1` becomes + // `SELECT * FROM Foo WHERE A > 1 ORDER BY A, __name__` + OrderBy []*StructuredQuery_Order `protobuf:"bytes,4,rep,name=order_by,json=orderBy" json:"order_by,omitempty"` + // A starting point for the query results. + StartAt *Cursor `protobuf:"bytes,7,opt,name=start_at,json=startAt" json:"start_at,omitempty"` + // A end point for the query results. + EndAt *Cursor `protobuf:"bytes,8,opt,name=end_at,json=endAt" json:"end_at,omitempty"` + // The number of results to skip. + // + // Applies before limit, but after all other constraints. Must be >= 0 if + // specified. + Offset int32 `protobuf:"varint,6,opt,name=offset" json:"offset,omitempty"` + // The maximum number of results to return. + // + // Applies after all other constraints. + // Must be >= 0 if specified. + Limit *google_protobuf3.Int32Value `protobuf:"bytes,5,opt,name=limit" json:"limit,omitempty"` +} + +func (m *StructuredQuery) Reset() { *m = StructuredQuery{} } +func (m *StructuredQuery) String() string { return proto.CompactTextString(m) } +func (*StructuredQuery) ProtoMessage() {} +func (*StructuredQuery) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0} } + +func (m *StructuredQuery) GetSelect() *StructuredQuery_Projection { + if m != nil { + return m.Select + } + return nil +} + +func (m *StructuredQuery) GetFrom() []*StructuredQuery_CollectionSelector { + if m != nil { + return m.From + } + return nil +} + +func (m *StructuredQuery) GetWhere() *StructuredQuery_Filter { + if m != nil { + return m.Where + } + return nil +} + +func (m *StructuredQuery) GetOrderBy() []*StructuredQuery_Order { + if m != nil { + return m.OrderBy + } + return nil +} + +func (m *StructuredQuery) GetStartAt() *Cursor { + if m != nil { + return m.StartAt + } + return nil +} + +func (m *StructuredQuery) GetEndAt() *Cursor { + if m != nil { + return m.EndAt + } + return nil +} + +func (m *StructuredQuery) GetOffset() int32 { + if m != nil { + return m.Offset + } + return 0 +} + +func (m *StructuredQuery) GetLimit() *google_protobuf3.Int32Value { + if m != nil { + return m.Limit + } + return nil +} + +// A selection of a collection, such as `messages as m1`. +type StructuredQuery_CollectionSelector struct { + // The collection ID. + // When set, selects only collections with this ID. + CollectionId string `protobuf:"bytes,2,opt,name=collection_id,json=collectionId" json:"collection_id,omitempty"` + // When false, selects only collections that are immediate children of + // the `parent` specified in the containing `RunQueryRequest`. + // When true, selects all descendant collections. + AllDescendants bool `protobuf:"varint,3,opt,name=all_descendants,json=allDescendants" json:"all_descendants,omitempty"` +} + +func (m *StructuredQuery_CollectionSelector) Reset() { *m = StructuredQuery_CollectionSelector{} } +func (m *StructuredQuery_CollectionSelector) String() string { return proto.CompactTextString(m) } +func (*StructuredQuery_CollectionSelector) ProtoMessage() {} +func (*StructuredQuery_CollectionSelector) Descriptor() ([]byte, []int) { + return fileDescriptor3, []int{0, 0} +} + +func (m *StructuredQuery_CollectionSelector) GetCollectionId() string { + if m != nil { + return m.CollectionId + } + return "" +} + +func (m *StructuredQuery_CollectionSelector) GetAllDescendants() bool { + if m != nil { + return m.AllDescendants + } + return false +} + +// A filter. +type StructuredQuery_Filter struct { + // The type of filter. + // + // Types that are valid to be assigned to FilterType: + // *StructuredQuery_Filter_CompositeFilter + // *StructuredQuery_Filter_FieldFilter + // *StructuredQuery_Filter_UnaryFilter + FilterType isStructuredQuery_Filter_FilterType `protobuf_oneof:"filter_type"` +} + +func (m *StructuredQuery_Filter) Reset() { *m = StructuredQuery_Filter{} } +func (m *StructuredQuery_Filter) String() string { return proto.CompactTextString(m) } +func (*StructuredQuery_Filter) ProtoMessage() {} +func (*StructuredQuery_Filter) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 1} } + +type isStructuredQuery_Filter_FilterType interface { + isStructuredQuery_Filter_FilterType() +} + +type StructuredQuery_Filter_CompositeFilter struct { + CompositeFilter *StructuredQuery_CompositeFilter `protobuf:"bytes,1,opt,name=composite_filter,json=compositeFilter,oneof"` +} +type StructuredQuery_Filter_FieldFilter struct { + FieldFilter *StructuredQuery_FieldFilter `protobuf:"bytes,2,opt,name=field_filter,json=fieldFilter,oneof"` +} +type StructuredQuery_Filter_UnaryFilter struct { + UnaryFilter *StructuredQuery_UnaryFilter `protobuf:"bytes,3,opt,name=unary_filter,json=unaryFilter,oneof"` +} + +func (*StructuredQuery_Filter_CompositeFilter) isStructuredQuery_Filter_FilterType() {} +func (*StructuredQuery_Filter_FieldFilter) isStructuredQuery_Filter_FilterType() {} +func (*StructuredQuery_Filter_UnaryFilter) isStructuredQuery_Filter_FilterType() {} + +func (m *StructuredQuery_Filter) GetFilterType() isStructuredQuery_Filter_FilterType { + if m != nil { + return m.FilterType + } + return nil +} + +func (m *StructuredQuery_Filter) GetCompositeFilter() *StructuredQuery_CompositeFilter { + if x, ok := m.GetFilterType().(*StructuredQuery_Filter_CompositeFilter); ok { + return x.CompositeFilter + } + return nil +} + +func (m *StructuredQuery_Filter) GetFieldFilter() *StructuredQuery_FieldFilter { + if x, ok := m.GetFilterType().(*StructuredQuery_Filter_FieldFilter); ok { + return x.FieldFilter + } + return nil +} + +func (m *StructuredQuery_Filter) GetUnaryFilter() *StructuredQuery_UnaryFilter { + if x, ok := m.GetFilterType().(*StructuredQuery_Filter_UnaryFilter); ok { + return x.UnaryFilter + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*StructuredQuery_Filter) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _StructuredQuery_Filter_OneofMarshaler, _StructuredQuery_Filter_OneofUnmarshaler, _StructuredQuery_Filter_OneofSizer, []interface{}{ + (*StructuredQuery_Filter_CompositeFilter)(nil), + (*StructuredQuery_Filter_FieldFilter)(nil), + (*StructuredQuery_Filter_UnaryFilter)(nil), + } +} + +func _StructuredQuery_Filter_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*StructuredQuery_Filter) + // filter_type + switch x := m.FilterType.(type) { + case *StructuredQuery_Filter_CompositeFilter: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.CompositeFilter); err != nil { + return err + } + case *StructuredQuery_Filter_FieldFilter: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.FieldFilter); err != nil { + return err + } + case *StructuredQuery_Filter_UnaryFilter: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.UnaryFilter); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("StructuredQuery_Filter.FilterType has unexpected type %T", x) + } + return nil +} + +func _StructuredQuery_Filter_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*StructuredQuery_Filter) + switch tag { + case 1: // filter_type.composite_filter + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(StructuredQuery_CompositeFilter) + err := b.DecodeMessage(msg) + m.FilterType = &StructuredQuery_Filter_CompositeFilter{msg} + return true, err + case 2: // filter_type.field_filter + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(StructuredQuery_FieldFilter) + err := b.DecodeMessage(msg) + m.FilterType = &StructuredQuery_Filter_FieldFilter{msg} + return true, err + case 3: // filter_type.unary_filter + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(StructuredQuery_UnaryFilter) + err := b.DecodeMessage(msg) + m.FilterType = &StructuredQuery_Filter_UnaryFilter{msg} + return true, err + default: + return false, nil + } +} + +func _StructuredQuery_Filter_OneofSizer(msg proto.Message) (n int) { + m := msg.(*StructuredQuery_Filter) + // filter_type + switch x := m.FilterType.(type) { + case *StructuredQuery_Filter_CompositeFilter: + s := proto.Size(x.CompositeFilter) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *StructuredQuery_Filter_FieldFilter: + s := proto.Size(x.FieldFilter) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *StructuredQuery_Filter_UnaryFilter: + s := proto.Size(x.UnaryFilter) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A filter that merges multiple other filters using the given operator. +type StructuredQuery_CompositeFilter struct { + // The operator for combining multiple filters. + Op StructuredQuery_CompositeFilter_Operator `protobuf:"varint,1,opt,name=op,enum=google.firestore.v1beta1.StructuredQuery_CompositeFilter_Operator" json:"op,omitempty"` + // The list of filters to combine. + // Must contain at least one filter. + Filters []*StructuredQuery_Filter `protobuf:"bytes,2,rep,name=filters" json:"filters,omitempty"` +} + +func (m *StructuredQuery_CompositeFilter) Reset() { *m = StructuredQuery_CompositeFilter{} } +func (m *StructuredQuery_CompositeFilter) String() string { return proto.CompactTextString(m) } +func (*StructuredQuery_CompositeFilter) ProtoMessage() {} +func (*StructuredQuery_CompositeFilter) Descriptor() ([]byte, []int) { + return fileDescriptor3, []int{0, 2} +} + +func (m *StructuredQuery_CompositeFilter) GetOp() StructuredQuery_CompositeFilter_Operator { + if m != nil { + return m.Op + } + return StructuredQuery_CompositeFilter_OPERATOR_UNSPECIFIED +} + +func (m *StructuredQuery_CompositeFilter) GetFilters() []*StructuredQuery_Filter { + if m != nil { + return m.Filters + } + return nil +} + +// A filter on a specific field. +type StructuredQuery_FieldFilter struct { + // The field to filter by. + Field *StructuredQuery_FieldReference `protobuf:"bytes,1,opt,name=field" json:"field,omitempty"` + // The operator to filter by. + Op StructuredQuery_FieldFilter_Operator `protobuf:"varint,2,opt,name=op,enum=google.firestore.v1beta1.StructuredQuery_FieldFilter_Operator" json:"op,omitempty"` + // The value to compare to. + Value *Value `protobuf:"bytes,3,opt,name=value" json:"value,omitempty"` +} + +func (m *StructuredQuery_FieldFilter) Reset() { *m = StructuredQuery_FieldFilter{} } +func (m *StructuredQuery_FieldFilter) String() string { return proto.CompactTextString(m) } +func (*StructuredQuery_FieldFilter) ProtoMessage() {} +func (*StructuredQuery_FieldFilter) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 3} } + +func (m *StructuredQuery_FieldFilter) GetField() *StructuredQuery_FieldReference { + if m != nil { + return m.Field + } + return nil +} + +func (m *StructuredQuery_FieldFilter) GetOp() StructuredQuery_FieldFilter_Operator { + if m != nil { + return m.Op + } + return StructuredQuery_FieldFilter_OPERATOR_UNSPECIFIED +} + +func (m *StructuredQuery_FieldFilter) GetValue() *Value { + if m != nil { + return m.Value + } + return nil +} + +// A filter with a single operand. +type StructuredQuery_UnaryFilter struct { + // The unary operator to apply. + Op StructuredQuery_UnaryFilter_Operator `protobuf:"varint,1,opt,name=op,enum=google.firestore.v1beta1.StructuredQuery_UnaryFilter_Operator" json:"op,omitempty"` + // The argument to the filter. + // + // Types that are valid to be assigned to OperandType: + // *StructuredQuery_UnaryFilter_Field + OperandType isStructuredQuery_UnaryFilter_OperandType `protobuf_oneof:"operand_type"` +} + +func (m *StructuredQuery_UnaryFilter) Reset() { *m = StructuredQuery_UnaryFilter{} } +func (m *StructuredQuery_UnaryFilter) String() string { return proto.CompactTextString(m) } +func (*StructuredQuery_UnaryFilter) ProtoMessage() {} +func (*StructuredQuery_UnaryFilter) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 4} } + +type isStructuredQuery_UnaryFilter_OperandType interface { + isStructuredQuery_UnaryFilter_OperandType() +} + +type StructuredQuery_UnaryFilter_Field struct { + Field *StructuredQuery_FieldReference `protobuf:"bytes,2,opt,name=field,oneof"` +} + +func (*StructuredQuery_UnaryFilter_Field) isStructuredQuery_UnaryFilter_OperandType() {} + +func (m *StructuredQuery_UnaryFilter) GetOperandType() isStructuredQuery_UnaryFilter_OperandType { + if m != nil { + return m.OperandType + } + return nil +} + +func (m *StructuredQuery_UnaryFilter) GetOp() StructuredQuery_UnaryFilter_Operator { + if m != nil { + return m.Op + } + return StructuredQuery_UnaryFilter_OPERATOR_UNSPECIFIED +} + +func (m *StructuredQuery_UnaryFilter) GetField() *StructuredQuery_FieldReference { + if x, ok := m.GetOperandType().(*StructuredQuery_UnaryFilter_Field); ok { + return x.Field + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*StructuredQuery_UnaryFilter) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _StructuredQuery_UnaryFilter_OneofMarshaler, _StructuredQuery_UnaryFilter_OneofUnmarshaler, _StructuredQuery_UnaryFilter_OneofSizer, []interface{}{ + (*StructuredQuery_UnaryFilter_Field)(nil), + } +} + +func _StructuredQuery_UnaryFilter_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*StructuredQuery_UnaryFilter) + // operand_type + switch x := m.OperandType.(type) { + case *StructuredQuery_UnaryFilter_Field: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Field); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("StructuredQuery_UnaryFilter.OperandType has unexpected type %T", x) + } + return nil +} + +func _StructuredQuery_UnaryFilter_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*StructuredQuery_UnaryFilter) + switch tag { + case 2: // operand_type.field + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(StructuredQuery_FieldReference) + err := b.DecodeMessage(msg) + m.OperandType = &StructuredQuery_UnaryFilter_Field{msg} + return true, err + default: + return false, nil + } +} + +func _StructuredQuery_UnaryFilter_OneofSizer(msg proto.Message) (n int) { + m := msg.(*StructuredQuery_UnaryFilter) + // operand_type + switch x := m.OperandType.(type) { + case *StructuredQuery_UnaryFilter_Field: + s := proto.Size(x.Field) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// An order on a field. +type StructuredQuery_Order struct { + // The field to order by. + Field *StructuredQuery_FieldReference `protobuf:"bytes,1,opt,name=field" json:"field,omitempty"` + // The direction to order by. Defaults to `ASCENDING`. + Direction StructuredQuery_Direction `protobuf:"varint,2,opt,name=direction,enum=google.firestore.v1beta1.StructuredQuery_Direction" json:"direction,omitempty"` +} + +func (m *StructuredQuery_Order) Reset() { *m = StructuredQuery_Order{} } +func (m *StructuredQuery_Order) String() string { return proto.CompactTextString(m) } +func (*StructuredQuery_Order) ProtoMessage() {} +func (*StructuredQuery_Order) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 5} } + +func (m *StructuredQuery_Order) GetField() *StructuredQuery_FieldReference { + if m != nil { + return m.Field + } + return nil +} + +func (m *StructuredQuery_Order) GetDirection() StructuredQuery_Direction { + if m != nil { + return m.Direction + } + return StructuredQuery_DIRECTION_UNSPECIFIED +} + +// A reference to a field, such as `max(messages.time) as max_time`. +type StructuredQuery_FieldReference struct { + FieldPath string `protobuf:"bytes,2,opt,name=field_path,json=fieldPath" json:"field_path,omitempty"` +} + +func (m *StructuredQuery_FieldReference) Reset() { *m = StructuredQuery_FieldReference{} } +func (m *StructuredQuery_FieldReference) String() string { return proto.CompactTextString(m) } +func (*StructuredQuery_FieldReference) ProtoMessage() {} +func (*StructuredQuery_FieldReference) Descriptor() ([]byte, []int) { + return fileDescriptor3, []int{0, 6} +} + +func (m *StructuredQuery_FieldReference) GetFieldPath() string { + if m != nil { + return m.FieldPath + } + return "" +} + +// The projection of document's fields to return. +type StructuredQuery_Projection struct { + // The fields to return. + // + // If empty, all fields are returned. To only return the name + // of the document, use `['__name__']`. + Fields []*StructuredQuery_FieldReference `protobuf:"bytes,2,rep,name=fields" json:"fields,omitempty"` +} + +func (m *StructuredQuery_Projection) Reset() { *m = StructuredQuery_Projection{} } +func (m *StructuredQuery_Projection) String() string { return proto.CompactTextString(m) } +func (*StructuredQuery_Projection) ProtoMessage() {} +func (*StructuredQuery_Projection) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0, 7} } + +func (m *StructuredQuery_Projection) GetFields() []*StructuredQuery_FieldReference { + if m != nil { + return m.Fields + } + return nil +} + +// A position in a query result set. +type Cursor struct { + // The values that represent a position, in the order they appear in + // the order by clause of a query. + // + // Can contain fewer values than specified in the order by clause. + Values []*Value `protobuf:"bytes,1,rep,name=values" json:"values,omitempty"` + // If the position is just before or just after the given values, relative + // to the sort order defined by the query. + Before bool `protobuf:"varint,2,opt,name=before" json:"before,omitempty"` +} + +func (m *Cursor) Reset() { *m = Cursor{} } +func (m *Cursor) String() string { return proto.CompactTextString(m) } +func (*Cursor) ProtoMessage() {} +func (*Cursor) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{1} } + +func (m *Cursor) GetValues() []*Value { + if m != nil { + return m.Values + } + return nil +} + +func (m *Cursor) GetBefore() bool { + if m != nil { + return m.Before + } + return false +} + +func init() { + proto.RegisterType((*StructuredQuery)(nil), "google.firestore.v1beta1.StructuredQuery") + proto.RegisterType((*StructuredQuery_CollectionSelector)(nil), "google.firestore.v1beta1.StructuredQuery.CollectionSelector") + proto.RegisterType((*StructuredQuery_Filter)(nil), "google.firestore.v1beta1.StructuredQuery.Filter") + proto.RegisterType((*StructuredQuery_CompositeFilter)(nil), "google.firestore.v1beta1.StructuredQuery.CompositeFilter") + proto.RegisterType((*StructuredQuery_FieldFilter)(nil), "google.firestore.v1beta1.StructuredQuery.FieldFilter") + proto.RegisterType((*StructuredQuery_UnaryFilter)(nil), "google.firestore.v1beta1.StructuredQuery.UnaryFilter") + proto.RegisterType((*StructuredQuery_Order)(nil), "google.firestore.v1beta1.StructuredQuery.Order") + proto.RegisterType((*StructuredQuery_FieldReference)(nil), "google.firestore.v1beta1.StructuredQuery.FieldReference") + proto.RegisterType((*StructuredQuery_Projection)(nil), "google.firestore.v1beta1.StructuredQuery.Projection") + proto.RegisterType((*Cursor)(nil), "google.firestore.v1beta1.Cursor") + proto.RegisterEnum("google.firestore.v1beta1.StructuredQuery_Direction", StructuredQuery_Direction_name, StructuredQuery_Direction_value) + proto.RegisterEnum("google.firestore.v1beta1.StructuredQuery_CompositeFilter_Operator", StructuredQuery_CompositeFilter_Operator_name, StructuredQuery_CompositeFilter_Operator_value) + proto.RegisterEnum("google.firestore.v1beta1.StructuredQuery_FieldFilter_Operator", StructuredQuery_FieldFilter_Operator_name, StructuredQuery_FieldFilter_Operator_value) + proto.RegisterEnum("google.firestore.v1beta1.StructuredQuery_UnaryFilter_Operator", StructuredQuery_UnaryFilter_Operator_name, StructuredQuery_UnaryFilter_Operator_value) +} + +func init() { proto.RegisterFile("google/firestore/v1beta1/query.proto", fileDescriptor3) } + +var fileDescriptor3 = []byte{ + // 970 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x96, 0xdd, 0x6e, 0xe3, 0x44, + 0x14, 0xc7, 0xd7, 0x4e, 0xf3, 0x75, 0xd2, 0x0f, 0x6b, 0x04, 0x2b, 0x13, 0x96, 0xa5, 0x0a, 0x48, + 0xdb, 0x1b, 0x1c, 0xda, 0xb2, 0x02, 0xb4, 0x80, 0xe4, 0x24, 0x6e, 0x9b, 0x55, 0xe5, 0xa4, 0x93, + 0xb6, 0x12, 0xab, 0x0a, 0xcb, 0xb1, 0xc7, 0xa9, 0x91, 0xeb, 0x31, 0xe3, 0xf1, 0xae, 0x7a, 0xcd, + 0x9b, 0x70, 0xb9, 0x2f, 0x00, 0xcf, 0xc0, 0x53, 0x70, 0xcd, 0x23, 0x70, 0x81, 0x90, 0xc7, 0xe3, + 0xa4, 0xdd, 0xaa, 0x22, 0x29, 0xdc, 0xe5, 0x1c, 0x9f, 0xf3, 0x9b, 0xe3, 0xff, 0x39, 0xc7, 0x13, + 0xf8, 0x74, 0x46, 0xe9, 0x2c, 0x22, 0xdd, 0x20, 0x64, 0x24, 0xe5, 0x94, 0x91, 0xee, 0xeb, 0xdd, + 0x29, 0xe1, 0xee, 0x6e, 0xf7, 0xa7, 0x8c, 0xb0, 0x6b, 0x23, 0x61, 0x94, 0x53, 0xa4, 0x17, 0x51, + 0xc6, 0x3c, 0xca, 0x90, 0x51, 0xed, 0x27, 0x32, 0xdf, 0x4d, 0xc2, 0xae, 0x1b, 0xc7, 0x94, 0xbb, + 0x3c, 0xa4, 0x71, 0x5a, 0xe4, 0xb5, 0x9f, 0xdd, 0x4b, 0xf7, 0xa9, 0x97, 0x5d, 0x91, 0x98, 0xcb, + 0xc0, 0xa7, 0x32, 0x50, 0x58, 0xd3, 0x2c, 0xe8, 0xbe, 0x61, 0x6e, 0x92, 0x10, 0x26, 0x41, 0x9d, + 0xbf, 0x34, 0xd8, 0x9a, 0x70, 0x96, 0x79, 0x3c, 0x63, 0xc4, 0x3f, 0xc9, 0x4b, 0x43, 0xc7, 0x50, + 0x4b, 0x49, 0x44, 0x3c, 0xae, 0x2b, 0xdb, 0xca, 0x4e, 0x6b, 0xef, 0x0b, 0xe3, 0xbe, 0x2a, 0x8d, + 0x77, 0x52, 0x8d, 0x31, 0xa3, 0x3f, 0x12, 0x2f, 0xaf, 0x14, 0x4b, 0x06, 0x1a, 0xc3, 0x5a, 0xc0, + 0xe8, 0x95, 0xae, 0x6e, 0x57, 0x76, 0x5a, 0x7b, 0xdf, 0x2c, 0xcf, 0xea, 0xd3, 0x28, 0x2a, 0x58, + 0x13, 0x41, 0xa2, 0x0c, 0x0b, 0x12, 0x3a, 0x80, 0xea, 0x9b, 0x4b, 0xc2, 0x88, 0x5e, 0x11, 0xe5, + 0x7d, 0xbe, 0x3c, 0xf2, 0x20, 0x8c, 0x38, 0x61, 0xb8, 0x48, 0x47, 0x2f, 0xa1, 0x41, 0x99, 0x4f, + 0x98, 0x33, 0xbd, 0xd6, 0xd7, 0x44, 0x75, 0xdd, 0xe5, 0x51, 0xa3, 0x3c, 0x13, 0xd7, 0x05, 0xa0, + 0x77, 0x8d, 0x5e, 0x40, 0x23, 0xe5, 0x2e, 0xe3, 0x8e, 0xcb, 0xf5, 0xba, 0x28, 0x6b, 0xfb, 0x7e, + 0x56, 0x3f, 0x63, 0x29, 0x65, 0xb8, 0x2e, 0x32, 0x4c, 0x8e, 0xbe, 0x84, 0x1a, 0x89, 0xfd, 0x3c, + 0xb5, 0xb1, 0x64, 0x6a, 0x95, 0xc4, 0xbe, 0xc9, 0xd1, 0x63, 0xa8, 0xd1, 0x20, 0x48, 0x09, 0xd7, + 0x6b, 0xdb, 0xca, 0x4e, 0x15, 0x4b, 0x0b, 0xed, 0x42, 0x35, 0x0a, 0xaf, 0x42, 0xae, 0x57, 0x05, + 0xef, 0xc3, 0x92, 0x57, 0x4e, 0x81, 0x31, 0x8c, 0xf9, 0xfe, 0xde, 0xb9, 0x1b, 0x65, 0x04, 0x17, + 0x91, 0xed, 0x29, 0xa0, 0xbb, 0x82, 0xa3, 0x4f, 0x60, 0xc3, 0x9b, 0x7b, 0x9d, 0xd0, 0xd7, 0xd5, + 0x6d, 0x65, 0xa7, 0x89, 0xd7, 0x17, 0xce, 0xa1, 0x8f, 0x9e, 0xc1, 0x96, 0x1b, 0x45, 0x8e, 0x4f, + 0x52, 0x8f, 0xc4, 0xbe, 0x1b, 0xf3, 0x54, 0x74, 0xa6, 0x81, 0x37, 0xdd, 0x28, 0x1a, 0x2c, 0xbc, + 0xed, 0x5f, 0x55, 0xa8, 0x15, 0x2d, 0x40, 0x01, 0x68, 0x1e, 0xbd, 0x4a, 0x68, 0x1a, 0x72, 0xe2, + 0x04, 0xc2, 0x27, 0xa7, 0xed, 0xeb, 0x55, 0x26, 0x44, 0x12, 0x0a, 0xe8, 0xd1, 0x23, 0xbc, 0xe5, + 0xdd, 0x76, 0xa1, 0x57, 0xb0, 0x1e, 0x84, 0x24, 0xf2, 0xcb, 0x33, 0x54, 0x71, 0xc6, 0xf3, 0x55, + 0x46, 0x86, 0x44, 0xfe, 0x9c, 0xdf, 0x0a, 0x16, 0x66, 0xce, 0xce, 0x62, 0x97, 0x5d, 0x97, 0xec, + 0xca, 0xaa, 0xec, 0xb3, 0x3c, 0x7b, 0xc1, 0xce, 0x16, 0x66, 0x6f, 0x03, 0x5a, 0x05, 0xd5, 0xe1, + 0xd7, 0x09, 0x69, 0xff, 0xa1, 0xc0, 0xd6, 0x3b, 0x6f, 0x8b, 0x30, 0xa8, 0x34, 0x11, 0xa2, 0x6d, + 0xee, 0xf5, 0x1e, 0x2c, 0x9a, 0x31, 0x4a, 0x08, 0x73, 0xf3, 0xe5, 0x52, 0x69, 0x82, 0x5e, 0x42, + 0xbd, 0x38, 0x36, 0x95, 0xfb, 0xba, 0xfa, 0x72, 0x95, 0x80, 0xce, 0x67, 0xd0, 0x28, 0xd9, 0x48, + 0x87, 0xf7, 0x46, 0x63, 0x0b, 0x9b, 0xa7, 0x23, 0xec, 0x9c, 0xd9, 0x93, 0xb1, 0xd5, 0x1f, 0x1e, + 0x0c, 0xad, 0x81, 0xf6, 0x08, 0xd5, 0xa1, 0x62, 0xda, 0x03, 0x4d, 0x69, 0xff, 0xa9, 0x42, 0xeb, + 0x86, 0xd8, 0xc8, 0x86, 0xaa, 0x10, 0x5b, 0x8e, 0xc5, 0x57, 0x2b, 0xb6, 0x0c, 0x93, 0x80, 0x30, + 0x12, 0x7b, 0x04, 0x17, 0x18, 0x64, 0x0b, 0xb9, 0x54, 0x21, 0xd7, 0x77, 0x0f, 0xea, 0xff, 0x6d, + 0xa9, 0x9e, 0x43, 0xf5, 0x75, 0xbe, 0x40, 0xb2, 0xed, 0x1f, 0xdf, 0x8f, 0x94, 0x7b, 0x26, 0xa2, + 0x3b, 0x3f, 0x2b, 0x4b, 0xc9, 0xb2, 0x01, 0xcd, 0x63, 0x6b, 0x32, 0x71, 0x4e, 0x8f, 0x4c, 0x5b, + 0x53, 0xd0, 0x63, 0x40, 0x73, 0xd3, 0x19, 0x61, 0xc7, 0x3a, 0x39, 0x33, 0x8f, 0x35, 0x15, 0x69, + 0xb0, 0x7e, 0x88, 0x2d, 0xf3, 0xd4, 0xc2, 0x45, 0x64, 0x05, 0x7d, 0x00, 0xef, 0xdf, 0xf4, 0x2c, + 0x82, 0xd7, 0x50, 0x13, 0xaa, 0xc5, 0xcf, 0x6a, 0xfb, 0x6f, 0x05, 0x5a, 0x37, 0xa6, 0x4f, 0x8a, + 0xa3, 0xac, 0x2a, 0xce, 0x0d, 0xc4, 0x6d, 0x71, 0xc6, 0x65, 0xf3, 0xd4, 0xff, 0xd6, 0xbc, 0xa3, + 0x47, 0xb2, 0x7d, 0x9d, 0x6f, 0x97, 0x92, 0x0d, 0xa0, 0x36, 0x9c, 0x38, 0xb6, 0x69, 0x6b, 0x2a, + 0x6a, 0x41, 0x3d, 0xff, 0x7d, 0x76, 0x7c, 0xac, 0x55, 0x7a, 0x9b, 0xb0, 0x4e, 0xf3, 0xf4, 0xd8, + 0x2f, 0x16, 0xea, 0xad, 0x02, 0x55, 0xf1, 0x09, 0xff, 0xdf, 0xe7, 0xec, 0x04, 0x9a, 0x7e, 0xc8, + 0x8a, 0x8f, 0xa3, 0x1c, 0xb7, 0xfd, 0xe5, 0x99, 0x83, 0x32, 0x15, 0x2f, 0x28, 0xed, 0x2e, 0x6c, + 0xde, 0x3e, 0x0b, 0x7d, 0x04, 0x50, 0x7c, 0xd6, 0x12, 0x97, 0x5f, 0xca, 0x8f, 0x72, 0x53, 0x78, + 0xc6, 0x2e, 0xbf, 0x6c, 0xff, 0x00, 0xb0, 0xb8, 0x89, 0xd1, 0x18, 0x6a, 0xe2, 0x51, 0xb9, 0xd3, + 0x0f, 0x7f, 0x45, 0xc9, 0xe9, 0x58, 0xd0, 0x9c, 0x17, 0x9a, 0x4f, 0xdc, 0x60, 0x88, 0xad, 0xfe, + 0xe9, 0x70, 0x64, 0xdf, 0x9d, 0x62, 0x73, 0xd2, 0xb7, 0xec, 0xc1, 0xd0, 0x3e, 0xd4, 0x14, 0xb4, + 0x09, 0x30, 0xb0, 0xe6, 0xb6, 0xda, 0xf9, 0x1e, 0x6a, 0xc5, 0x7d, 0x96, 0xdf, 0x80, 0x62, 0x3d, + 0x52, 0x5d, 0x11, 0x25, 0xfe, 0xeb, 0x36, 0xc9, 0xf0, 0xfc, 0x06, 0x9c, 0x92, 0x80, 0x32, 0x22, + 0x44, 0x68, 0x60, 0x69, 0xf5, 0x7e, 0x53, 0xe0, 0x89, 0x47, 0xaf, 0xee, 0xc5, 0xf4, 0x40, 0xbc, + 0xe0, 0x38, 0xbf, 0x10, 0xc7, 0xca, 0x2b, 0x53, 0xc6, 0xcd, 0x68, 0xe4, 0xc6, 0x33, 0x83, 0xb2, + 0x59, 0x77, 0x46, 0x62, 0x71, 0x5d, 0x76, 0x8b, 0x47, 0x6e, 0x12, 0xa6, 0x77, 0xff, 0x6e, 0xbd, + 0x98, 0x7b, 0x7e, 0x51, 0xd7, 0x0e, 0xfb, 0x07, 0x93, 0xb7, 0xea, 0xd3, 0xc3, 0x02, 0xd5, 0x8f, + 0x68, 0xe6, 0x1b, 0x07, 0xf3, 0x83, 0xcf, 0x77, 0x7b, 0x79, 0xc6, 0xef, 0x65, 0xc0, 0x85, 0x08, + 0xb8, 0x98, 0x07, 0x5c, 0x9c, 0x17, 0xc8, 0x69, 0x4d, 0x1c, 0xbb, 0xff, 0x4f, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x4c, 0xc9, 0x73, 0x9b, 0x42, 0x0a, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/firestore/v1beta1/write.pb.go b/vendor/google.golang.org/genproto/googleapis/firestore/v1beta1/write.pb.go new file mode 100644 index 0000000..fca9fdd --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/firestore/v1beta1/write.pb.go @@ -0,0 +1,612 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/firestore/v1beta1/write.proto + +package firestore + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/timestamp" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// A value that is calculated by the server. +type DocumentTransform_FieldTransform_ServerValue int32 + +const ( + // Unspecified. This value must not be used. + DocumentTransform_FieldTransform_SERVER_VALUE_UNSPECIFIED DocumentTransform_FieldTransform_ServerValue = 0 + // The time at which the server processed the request, with millisecond + // precision. + DocumentTransform_FieldTransform_REQUEST_TIME DocumentTransform_FieldTransform_ServerValue = 1 +) + +var DocumentTransform_FieldTransform_ServerValue_name = map[int32]string{ + 0: "SERVER_VALUE_UNSPECIFIED", + 1: "REQUEST_TIME", +} +var DocumentTransform_FieldTransform_ServerValue_value = map[string]int32{ + "SERVER_VALUE_UNSPECIFIED": 0, + "REQUEST_TIME": 1, +} + +func (x DocumentTransform_FieldTransform_ServerValue) String() string { + return proto.EnumName(DocumentTransform_FieldTransform_ServerValue_name, int32(x)) +} +func (DocumentTransform_FieldTransform_ServerValue) EnumDescriptor() ([]byte, []int) { + return fileDescriptor4, []int{1, 0, 0} +} + +// A write on a document. +type Write struct { + // The operation to execute. + // + // Types that are valid to be assigned to Operation: + // *Write_Update + // *Write_Delete + // *Write_Transform + Operation isWrite_Operation `protobuf_oneof:"operation"` + // The fields to update in this write. + // + // This field can be set only when the operation is `update`. + // None of the field paths in the mask may contain a reserved name. + // If the document exists on the server and has fields not referenced in the + // mask, they are left unchanged. + // Fields referenced in the mask, but not present in the input document, are + // deleted from the document on the server. + // The field paths in this mask must not contain a reserved field name. + UpdateMask *DocumentMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` + // An optional precondition on the document. + // + // The write will fail if this is set and not met by the target document. + CurrentDocument *Precondition `protobuf:"bytes,4,opt,name=current_document,json=currentDocument" json:"current_document,omitempty"` +} + +func (m *Write) Reset() { *m = Write{} } +func (m *Write) String() string { return proto.CompactTextString(m) } +func (*Write) ProtoMessage() {} +func (*Write) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{0} } + +type isWrite_Operation interface { + isWrite_Operation() +} + +type Write_Update struct { + Update *Document `protobuf:"bytes,1,opt,name=update,oneof"` +} +type Write_Delete struct { + Delete string `protobuf:"bytes,2,opt,name=delete,oneof"` +} +type Write_Transform struct { + Transform *DocumentTransform `protobuf:"bytes,6,opt,name=transform,oneof"` +} + +func (*Write_Update) isWrite_Operation() {} +func (*Write_Delete) isWrite_Operation() {} +func (*Write_Transform) isWrite_Operation() {} + +func (m *Write) GetOperation() isWrite_Operation { + if m != nil { + return m.Operation + } + return nil +} + +func (m *Write) GetUpdate() *Document { + if x, ok := m.GetOperation().(*Write_Update); ok { + return x.Update + } + return nil +} + +func (m *Write) GetDelete() string { + if x, ok := m.GetOperation().(*Write_Delete); ok { + return x.Delete + } + return "" +} + +func (m *Write) GetTransform() *DocumentTransform { + if x, ok := m.GetOperation().(*Write_Transform); ok { + return x.Transform + } + return nil +} + +func (m *Write) GetUpdateMask() *DocumentMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +func (m *Write) GetCurrentDocument() *Precondition { + if m != nil { + return m.CurrentDocument + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Write) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Write_OneofMarshaler, _Write_OneofUnmarshaler, _Write_OneofSizer, []interface{}{ + (*Write_Update)(nil), + (*Write_Delete)(nil), + (*Write_Transform)(nil), + } +} + +func _Write_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Write) + // operation + switch x := m.Operation.(type) { + case *Write_Update: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Update); err != nil { + return err + } + case *Write_Delete: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Delete) + case *Write_Transform: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Transform); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Write.Operation has unexpected type %T", x) + } + return nil +} + +func _Write_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Write) + switch tag { + case 1: // operation.update + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Document) + err := b.DecodeMessage(msg) + m.Operation = &Write_Update{msg} + return true, err + case 2: // operation.delete + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Operation = &Write_Delete{x} + return true, err + case 6: // operation.transform + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(DocumentTransform) + err := b.DecodeMessage(msg) + m.Operation = &Write_Transform{msg} + return true, err + default: + return false, nil + } +} + +func _Write_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Write) + // operation + switch x := m.Operation.(type) { + case *Write_Update: + s := proto.Size(x.Update) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Write_Delete: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Delete))) + n += len(x.Delete) + case *Write_Transform: + s := proto.Size(x.Transform) + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A transformation of a document. +type DocumentTransform struct { + // The name of the document to transform. + Document string `protobuf:"bytes,1,opt,name=document" json:"document,omitempty"` + // The list of transformations to apply to the fields of the document, in + // order. + // This must not be empty. + FieldTransforms []*DocumentTransform_FieldTransform `protobuf:"bytes,2,rep,name=field_transforms,json=fieldTransforms" json:"field_transforms,omitempty"` +} + +func (m *DocumentTransform) Reset() { *m = DocumentTransform{} } +func (m *DocumentTransform) String() string { return proto.CompactTextString(m) } +func (*DocumentTransform) ProtoMessage() {} +func (*DocumentTransform) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{1} } + +func (m *DocumentTransform) GetDocument() string { + if m != nil { + return m.Document + } + return "" +} + +func (m *DocumentTransform) GetFieldTransforms() []*DocumentTransform_FieldTransform { + if m != nil { + return m.FieldTransforms + } + return nil +} + +// A transformation of a field of the document. +type DocumentTransform_FieldTransform struct { + // The path of the field. See [Document.fields][google.firestore.v1beta1.Document.fields] for the field path syntax + // reference. + FieldPath string `protobuf:"bytes,1,opt,name=field_path,json=fieldPath" json:"field_path,omitempty"` + // The transformation to apply on the field. + // + // Types that are valid to be assigned to TransformType: + // *DocumentTransform_FieldTransform_SetToServerValue + TransformType isDocumentTransform_FieldTransform_TransformType `protobuf_oneof:"transform_type"` +} + +func (m *DocumentTransform_FieldTransform) Reset() { *m = DocumentTransform_FieldTransform{} } +func (m *DocumentTransform_FieldTransform) String() string { return proto.CompactTextString(m) } +func (*DocumentTransform_FieldTransform) ProtoMessage() {} +func (*DocumentTransform_FieldTransform) Descriptor() ([]byte, []int) { + return fileDescriptor4, []int{1, 0} +} + +type isDocumentTransform_FieldTransform_TransformType interface { + isDocumentTransform_FieldTransform_TransformType() +} + +type DocumentTransform_FieldTransform_SetToServerValue struct { + SetToServerValue DocumentTransform_FieldTransform_ServerValue `protobuf:"varint,2,opt,name=set_to_server_value,json=setToServerValue,enum=google.firestore.v1beta1.DocumentTransform_FieldTransform_ServerValue,oneof"` +} + +func (*DocumentTransform_FieldTransform_SetToServerValue) isDocumentTransform_FieldTransform_TransformType() { +} + +func (m *DocumentTransform_FieldTransform) GetTransformType() isDocumentTransform_FieldTransform_TransformType { + if m != nil { + return m.TransformType + } + return nil +} + +func (m *DocumentTransform_FieldTransform) GetFieldPath() string { + if m != nil { + return m.FieldPath + } + return "" +} + +func (m *DocumentTransform_FieldTransform) GetSetToServerValue() DocumentTransform_FieldTransform_ServerValue { + if x, ok := m.GetTransformType().(*DocumentTransform_FieldTransform_SetToServerValue); ok { + return x.SetToServerValue + } + return DocumentTransform_FieldTransform_SERVER_VALUE_UNSPECIFIED +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*DocumentTransform_FieldTransform) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _DocumentTransform_FieldTransform_OneofMarshaler, _DocumentTransform_FieldTransform_OneofUnmarshaler, _DocumentTransform_FieldTransform_OneofSizer, []interface{}{ + (*DocumentTransform_FieldTransform_SetToServerValue)(nil), + } +} + +func _DocumentTransform_FieldTransform_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*DocumentTransform_FieldTransform) + // transform_type + switch x := m.TransformType.(type) { + case *DocumentTransform_FieldTransform_SetToServerValue: + b.EncodeVarint(2<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.SetToServerValue)) + case nil: + default: + return fmt.Errorf("DocumentTransform_FieldTransform.TransformType has unexpected type %T", x) + } + return nil +} + +func _DocumentTransform_FieldTransform_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*DocumentTransform_FieldTransform) + switch tag { + case 2: // transform_type.set_to_server_value + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.TransformType = &DocumentTransform_FieldTransform_SetToServerValue{DocumentTransform_FieldTransform_ServerValue(x)} + return true, err + default: + return false, nil + } +} + +func _DocumentTransform_FieldTransform_OneofSizer(msg proto.Message) (n int) { + m := msg.(*DocumentTransform_FieldTransform) + // transform_type + switch x := m.TransformType.(type) { + case *DocumentTransform_FieldTransform_SetToServerValue: + n += proto.SizeVarint(2<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.SetToServerValue)) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The result of applying a write. +type WriteResult struct { + // The last update time of the document after applying the write. Not set + // after a `delete`. + // + // If the write did not actually change the document, this will be the + // previous update_time. + UpdateTime *google_protobuf1.Timestamp `protobuf:"bytes,1,opt,name=update_time,json=updateTime" json:"update_time,omitempty"` + // The results of applying each [DocumentTransform.FieldTransform][google.firestore.v1beta1.DocumentTransform.FieldTransform], in the + // same order. + TransformResults []*Value `protobuf:"bytes,2,rep,name=transform_results,json=transformResults" json:"transform_results,omitempty"` +} + +func (m *WriteResult) Reset() { *m = WriteResult{} } +func (m *WriteResult) String() string { return proto.CompactTextString(m) } +func (*WriteResult) ProtoMessage() {} +func (*WriteResult) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{2} } + +func (m *WriteResult) GetUpdateTime() *google_protobuf1.Timestamp { + if m != nil { + return m.UpdateTime + } + return nil +} + +func (m *WriteResult) GetTransformResults() []*Value { + if m != nil { + return m.TransformResults + } + return nil +} + +// A [Document][google.firestore.v1beta1.Document] has changed. +// +// May be the result of multiple [writes][google.firestore.v1beta1.Write], including deletes, that +// ultimately resulted in a new value for the [Document][google.firestore.v1beta1.Document]. +// +// Multiple [DocumentChange][google.firestore.v1beta1.DocumentChange] messages may be returned for the same logical +// change, if multiple targets are affected. +type DocumentChange struct { + // The new state of the [Document][google.firestore.v1beta1.Document]. + // + // If `mask` is set, contains only fields that were updated or added. + Document *Document `protobuf:"bytes,1,opt,name=document" json:"document,omitempty"` + // A set of target IDs of targets that match this document. + TargetIds []int32 `protobuf:"varint,5,rep,packed,name=target_ids,json=targetIds" json:"target_ids,omitempty"` + // A set of target IDs for targets that no longer match this document. + RemovedTargetIds []int32 `protobuf:"varint,6,rep,packed,name=removed_target_ids,json=removedTargetIds" json:"removed_target_ids,omitempty"` +} + +func (m *DocumentChange) Reset() { *m = DocumentChange{} } +func (m *DocumentChange) String() string { return proto.CompactTextString(m) } +func (*DocumentChange) ProtoMessage() {} +func (*DocumentChange) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{3} } + +func (m *DocumentChange) GetDocument() *Document { + if m != nil { + return m.Document + } + return nil +} + +func (m *DocumentChange) GetTargetIds() []int32 { + if m != nil { + return m.TargetIds + } + return nil +} + +func (m *DocumentChange) GetRemovedTargetIds() []int32 { + if m != nil { + return m.RemovedTargetIds + } + return nil +} + +// A [Document][google.firestore.v1beta1.Document] has been deleted. +// +// May be the result of multiple [writes][google.firestore.v1beta1.Write], including updates, the +// last of which deleted the [Document][google.firestore.v1beta1.Document]. +// +// Multiple [DocumentDelete][google.firestore.v1beta1.DocumentDelete] messages may be returned for the same logical +// delete, if multiple targets are affected. +type DocumentDelete struct { + // The resource name of the [Document][google.firestore.v1beta1.Document] that was deleted. + Document string `protobuf:"bytes,1,opt,name=document" json:"document,omitempty"` + // A set of target IDs for targets that previously matched this entity. + RemovedTargetIds []int32 `protobuf:"varint,6,rep,packed,name=removed_target_ids,json=removedTargetIds" json:"removed_target_ids,omitempty"` + // The read timestamp at which the delete was observed. + // + // Greater or equal to the `commit_time` of the delete. + ReadTime *google_protobuf1.Timestamp `protobuf:"bytes,4,opt,name=read_time,json=readTime" json:"read_time,omitempty"` +} + +func (m *DocumentDelete) Reset() { *m = DocumentDelete{} } +func (m *DocumentDelete) String() string { return proto.CompactTextString(m) } +func (*DocumentDelete) ProtoMessage() {} +func (*DocumentDelete) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{4} } + +func (m *DocumentDelete) GetDocument() string { + if m != nil { + return m.Document + } + return "" +} + +func (m *DocumentDelete) GetRemovedTargetIds() []int32 { + if m != nil { + return m.RemovedTargetIds + } + return nil +} + +func (m *DocumentDelete) GetReadTime() *google_protobuf1.Timestamp { + if m != nil { + return m.ReadTime + } + return nil +} + +// A [Document][google.firestore.v1beta1.Document] has been removed from the view of the targets. +// +// Sent if the document is no longer relevant to a target and is out of view. +// Can be sent instead of a DocumentDelete or a DocumentChange if the server +// can not send the new value of the document. +// +// Multiple [DocumentRemove][google.firestore.v1beta1.DocumentRemove] messages may be returned for the same logical +// write or delete, if multiple targets are affected. +type DocumentRemove struct { + // The resource name of the [Document][google.firestore.v1beta1.Document] that has gone out of view. + Document string `protobuf:"bytes,1,opt,name=document" json:"document,omitempty"` + // A set of target IDs for targets that previously matched this document. + RemovedTargetIds []int32 `protobuf:"varint,2,rep,packed,name=removed_target_ids,json=removedTargetIds" json:"removed_target_ids,omitempty"` + // The read timestamp at which the remove was observed. + // + // Greater or equal to the `commit_time` of the change/delete/remove. + ReadTime *google_protobuf1.Timestamp `protobuf:"bytes,4,opt,name=read_time,json=readTime" json:"read_time,omitempty"` +} + +func (m *DocumentRemove) Reset() { *m = DocumentRemove{} } +func (m *DocumentRemove) String() string { return proto.CompactTextString(m) } +func (*DocumentRemove) ProtoMessage() {} +func (*DocumentRemove) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{5} } + +func (m *DocumentRemove) GetDocument() string { + if m != nil { + return m.Document + } + return "" +} + +func (m *DocumentRemove) GetRemovedTargetIds() []int32 { + if m != nil { + return m.RemovedTargetIds + } + return nil +} + +func (m *DocumentRemove) GetReadTime() *google_protobuf1.Timestamp { + if m != nil { + return m.ReadTime + } + return nil +} + +// A digest of all the documents that match a given target. +type ExistenceFilter struct { + // The target ID to which this filter applies. + TargetId int32 `protobuf:"varint,1,opt,name=target_id,json=targetId" json:"target_id,omitempty"` + // The total count of documents that match [target_id][google.firestore.v1beta1.ExistenceFilter.target_id]. + // + // If different from the count of documents in the client that match, the + // client must manually determine which documents no longer match the target. + Count int32 `protobuf:"varint,2,opt,name=count" json:"count,omitempty"` +} + +func (m *ExistenceFilter) Reset() { *m = ExistenceFilter{} } +func (m *ExistenceFilter) String() string { return proto.CompactTextString(m) } +func (*ExistenceFilter) ProtoMessage() {} +func (*ExistenceFilter) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{6} } + +func (m *ExistenceFilter) GetTargetId() int32 { + if m != nil { + return m.TargetId + } + return 0 +} + +func (m *ExistenceFilter) GetCount() int32 { + if m != nil { + return m.Count + } + return 0 +} + +func init() { + proto.RegisterType((*Write)(nil), "google.firestore.v1beta1.Write") + proto.RegisterType((*DocumentTransform)(nil), "google.firestore.v1beta1.DocumentTransform") + proto.RegisterType((*DocumentTransform_FieldTransform)(nil), "google.firestore.v1beta1.DocumentTransform.FieldTransform") + proto.RegisterType((*WriteResult)(nil), "google.firestore.v1beta1.WriteResult") + proto.RegisterType((*DocumentChange)(nil), "google.firestore.v1beta1.DocumentChange") + proto.RegisterType((*DocumentDelete)(nil), "google.firestore.v1beta1.DocumentDelete") + proto.RegisterType((*DocumentRemove)(nil), "google.firestore.v1beta1.DocumentRemove") + proto.RegisterType((*ExistenceFilter)(nil), "google.firestore.v1beta1.ExistenceFilter") + proto.RegisterEnum("google.firestore.v1beta1.DocumentTransform_FieldTransform_ServerValue", DocumentTransform_FieldTransform_ServerValue_name, DocumentTransform_FieldTransform_ServerValue_value) +} + +func init() { proto.RegisterFile("google/firestore/v1beta1/write.proto", fileDescriptor4) } + +var fileDescriptor4 = []byte{ + // 756 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0xcd, 0x8e, 0xe3, 0x44, + 0x10, 0x8e, 0x93, 0x49, 0x34, 0xae, 0xa0, 0x8c, 0xb7, 0xe1, 0x60, 0x85, 0x59, 0x36, 0x8a, 0xf8, + 0x89, 0x04, 0x72, 0x34, 0xc3, 0x01, 0x89, 0x05, 0xa4, 0x4d, 0xe2, 0xcc, 0x44, 0xec, 0xa2, 0x6c, + 0x27, 0x13, 0x24, 0x34, 0x92, 0xd5, 0x13, 0x77, 0x3c, 0xd6, 0xda, 0x6e, 0xab, 0xbb, 0x9d, 0x85, + 0xd7, 0x80, 0x0b, 0x17, 0x2e, 0x1c, 0x79, 0x02, 0x9e, 0x81, 0x3b, 0x0f, 0xc3, 0x0d, 0xb9, 0xdb, + 0xf6, 0x66, 0x58, 0x85, 0xb0, 0x23, 0x6e, 0xae, 0xea, 0xaf, 0xbe, 0xfa, 0xea, 0x4f, 0x86, 0xf7, + 0x03, 0xc6, 0x82, 0x88, 0x0e, 0x37, 0x21, 0xa7, 0x42, 0x32, 0x4e, 0x87, 0xdb, 0xb3, 0x1b, 0x2a, + 0xc9, 0xd9, 0xf0, 0x25, 0x0f, 0x25, 0x75, 0x52, 0xce, 0x24, 0x43, 0xb6, 0x46, 0x39, 0x15, 0xca, + 0x29, 0x50, 0xdd, 0xd3, 0x22, 0x9e, 0xa4, 0xe1, 0x90, 0x24, 0x09, 0x93, 0x44, 0x86, 0x2c, 0x11, + 0x3a, 0xae, 0xfb, 0xc1, 0x5e, 0xf6, 0x35, 0x8b, 0x63, 0x96, 0x14, 0xb0, 0x8f, 0xf6, 0xc2, 0x7c, + 0xb6, 0xce, 0x62, 0x9a, 0xc8, 0x02, 0xf8, 0xa8, 0x00, 0x2a, 0xeb, 0x26, 0xdb, 0x0c, 0x65, 0x18, + 0x53, 0x21, 0x49, 0x9c, 0x6a, 0x40, 0xff, 0xcf, 0x3a, 0x34, 0xbf, 0xcd, 0x85, 0xa3, 0x2f, 0xa0, + 0x95, 0xa5, 0x3e, 0x91, 0xd4, 0x36, 0x7a, 0xc6, 0xa0, 0x7d, 0xde, 0x77, 0xf6, 0xd5, 0xe0, 0x4c, + 0x8a, 0x24, 0x97, 0x35, 0x5c, 0xc4, 0x20, 0x1b, 0x5a, 0x3e, 0x8d, 0xa8, 0xa4, 0x76, 0xbd, 0x67, + 0x0c, 0xcc, 0xfc, 0x45, 0xdb, 0xe8, 0x6b, 0x30, 0x25, 0x27, 0x89, 0xd8, 0x30, 0x1e, 0xdb, 0x2d, + 0x45, 0xfd, 0xf1, 0x61, 0xea, 0x65, 0x19, 0x72, 0x59, 0xc3, 0xaf, 0xe2, 0xd1, 0x05, 0xb4, 0x75, + 0x42, 0x2f, 0x26, 0xe2, 0x85, 0xdd, 0x50, 0x74, 0x1f, 0x1e, 0xa6, 0x7b, 0x46, 0xc4, 0x0b, 0x0c, + 0x3a, 0x34, 0xff, 0x46, 0xcf, 0xc1, 0x5a, 0x67, 0x9c, 0xd3, 0x44, 0x7a, 0x65, 0xcb, 0xec, 0xa3, + 0x43, 0x6c, 0x73, 0x4e, 0xd7, 0x2c, 0xf1, 0xc3, 0x7c, 0x62, 0xf8, 0xa4, 0x88, 0x2f, 0x53, 0x8c, + 0xda, 0x60, 0xb2, 0x94, 0x72, 0x35, 0xcf, 0xfe, 0x8f, 0x0d, 0x78, 0xf0, 0x5a, 0x2d, 0xa8, 0x0b, + 0xc7, 0x55, 0xb6, 0xbc, 0xcb, 0x26, 0xae, 0x6c, 0x44, 0xc1, 0xda, 0x84, 0x34, 0xf2, 0xbd, 0xaa, + 0x5a, 0x61, 0xd7, 0x7b, 0x8d, 0x41, 0xfb, 0xfc, 0xf3, 0x37, 0x68, 0x97, 0x33, 0xcd, 0x39, 0x2a, + 0x13, 0x9f, 0x6c, 0xee, 0xd8, 0xa2, 0xfb, 0x97, 0x01, 0x9d, 0xbb, 0x18, 0xf4, 0x10, 0x40, 0x67, + 0x4e, 0x89, 0xbc, 0x2d, 0x74, 0x99, 0xca, 0x33, 0x27, 0xf2, 0x16, 0xbd, 0x84, 0xb7, 0x05, 0x95, + 0x9e, 0x64, 0x9e, 0xa0, 0x7c, 0x4b, 0xb9, 0xb7, 0x25, 0x51, 0xa6, 0xe7, 0xdc, 0x39, 0x9f, 0xde, + 0x5f, 0x9b, 0xb3, 0x50, 0x74, 0xab, 0x9c, 0xed, 0xb2, 0x86, 0x2d, 0x41, 0xe5, 0x92, 0xed, 0xf8, + 0xfa, 0x5f, 0x42, 0x7b, 0xc7, 0x44, 0xa7, 0x60, 0x2f, 0x5c, 0xbc, 0x72, 0xb1, 0xb7, 0x7a, 0xf2, + 0xf4, 0xca, 0xf5, 0xae, 0xbe, 0x59, 0xcc, 0xdd, 0xf1, 0x6c, 0x3a, 0x73, 0x27, 0x56, 0x0d, 0x59, + 0xf0, 0x16, 0x76, 0x9f, 0x5f, 0xb9, 0x8b, 0xa5, 0xb7, 0x9c, 0x3d, 0x73, 0x2d, 0x63, 0x64, 0x41, + 0xa7, 0x6a, 0xa5, 0x27, 0x7f, 0x48, 0x69, 0xff, 0x67, 0x03, 0xda, 0x6a, 0xd9, 0x31, 0x15, 0x59, + 0x24, 0xd1, 0xe3, 0x6a, 0x9b, 0xf2, 0xb3, 0x28, 0xf6, 0xbe, 0x5b, 0x56, 0x54, 0xde, 0x8c, 0xb3, + 0x2c, 0x6f, 0xa6, 0xdc, 0xa0, 0xdc, 0x81, 0x9e, 0xc2, 0x83, 0x57, 0xf4, 0x5c, 0x11, 0x96, 0x03, + 0x7b, 0xb4, 0xbf, 0x29, 0xaa, 0x14, 0x6c, 0x55, 0x91, 0x5a, 0x89, 0xe8, 0xff, 0x62, 0x40, 0xa7, + 0x6c, 0xd8, 0xf8, 0x96, 0x24, 0x01, 0x45, 0x5f, 0xfd, 0x63, 0x59, 0xfe, 0xd3, 0x49, 0xee, 0x2c, + 0xd4, 0x43, 0x00, 0x49, 0x78, 0x40, 0xa5, 0x17, 0xfa, 0xc2, 0x6e, 0xf6, 0x1a, 0x83, 0x26, 0x36, + 0xb5, 0x67, 0xe6, 0x0b, 0xf4, 0x09, 0x20, 0x4e, 0x63, 0xb6, 0xa5, 0xbe, 0xb7, 0x03, 0x6b, 0x29, + 0x98, 0x55, 0xbc, 0x2c, 0x4b, 0x74, 0xff, 0xa7, 0x1d, 0x7d, 0x13, 0x7d, 0xd8, 0xff, 0xb6, 0xcc, + 0x6f, 0x44, 0x8e, 0x3e, 0x03, 0x93, 0x53, 0xe2, 0xeb, 0x29, 0x1c, 0x1d, 0x9c, 0xc2, 0x71, 0x0e, + 0xce, 0xcd, 0x3b, 0xaa, 0xb0, 0x62, 0xbd, 0x87, 0xaa, 0xfa, 0xff, 0xad, 0x6a, 0x02, 0x27, 0xee, + 0xf7, 0xa1, 0x90, 0x34, 0x59, 0xd3, 0x69, 0x18, 0x49, 0xca, 0xd1, 0xbb, 0x60, 0x56, 0x19, 0x95, + 0xac, 0x26, 0x3e, 0x2e, 0x47, 0x81, 0xde, 0x81, 0xe6, 0x9a, 0x65, 0x89, 0x54, 0x27, 0xd5, 0xc4, + 0xda, 0x18, 0xfd, 0x6e, 0xc0, 0xe9, 0x9a, 0xc5, 0x7b, 0x47, 0x3e, 0x02, 0xb5, 0xca, 0xf3, 0x5c, + 0xc9, 0xdc, 0xf8, 0xee, 0x49, 0x81, 0x0b, 0x58, 0x44, 0x92, 0xc0, 0x61, 0x3c, 0x18, 0x06, 0x34, + 0x51, 0x3a, 0x87, 0xfa, 0x89, 0xa4, 0xa1, 0x78, 0xfd, 0x8f, 0xf1, 0xb8, 0xf2, 0xfc, 0x5a, 0x3f, + 0xba, 0x18, 0x4f, 0x17, 0xbf, 0xd5, 0xdf, 0xbb, 0xd0, 0x54, 0xe3, 0x88, 0x65, 0xbe, 0x33, 0xad, + 0x12, 0xaf, 0xce, 0x46, 0x79, 0xc4, 0x1f, 0x25, 0xe0, 0x5a, 0x01, 0xae, 0x2b, 0xc0, 0xf5, 0x4a, + 0x53, 0xde, 0xb4, 0x54, 0xda, 0x4f, 0xff, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xba, 0xb7, 0x73, 0xcf, + 0x2c, 0x07, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/genomics/v1/annotations.pb.go b/vendor/google.golang.org/genproto/googleapis/genomics/v1/annotations.pb.go index eeee219..7f2c534 100644 --- a/vendor/google.golang.org/genproto/googleapis/genomics/v1/annotations.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/genomics/v1/annotations.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/genomics/v1/annotations.proto -// DO NOT EDIT! /* Package genomics is a generated protocol buffer package. diff --git a/vendor/google.golang.org/genproto/googleapis/genomics/v1/cigar.pb.go b/vendor/google.golang.org/genproto/googleapis/genomics/v1/cigar.pb.go index 2824a05..a45daa0 100644 --- a/vendor/google.golang.org/genproto/googleapis/genomics/v1/cigar.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/genomics/v1/cigar.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/genomics/v1/cigar.proto -// DO NOT EDIT! package genomics diff --git a/vendor/google.golang.org/genproto/googleapis/genomics/v1/datasets.pb.go b/vendor/google.golang.org/genproto/googleapis/genomics/v1/datasets.pb.go index 09a6c12..a871906 100644 --- a/vendor/google.golang.org/genproto/googleapis/genomics/v1/datasets.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/genomics/v1/datasets.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/genomics/v1/datasets.proto -// DO NOT EDIT! package genomics diff --git a/vendor/google.golang.org/genproto/googleapis/genomics/v1/operations.pb.go b/vendor/google.golang.org/genproto/googleapis/genomics/v1/operations.pb.go index f0015f5..194e901 100644 --- a/vendor/google.golang.org/genproto/googleapis/genomics/v1/operations.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/genomics/v1/operations.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/genomics/v1/operations.proto -// DO NOT EDIT! package genomics diff --git a/vendor/google.golang.org/genproto/googleapis/genomics/v1/position.pb.go b/vendor/google.golang.org/genproto/googleapis/genomics/v1/position.pb.go index 928185c..413c684 100644 --- a/vendor/google.golang.org/genproto/googleapis/genomics/v1/position.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/genomics/v1/position.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/genomics/v1/position.proto -// DO NOT EDIT! package genomics diff --git a/vendor/google.golang.org/genproto/googleapis/genomics/v1/range.pb.go b/vendor/google.golang.org/genproto/googleapis/genomics/v1/range.pb.go index 196bcec..4062d6e 100644 --- a/vendor/google.golang.org/genproto/googleapis/genomics/v1/range.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/genomics/v1/range.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/genomics/v1/range.proto -// DO NOT EDIT! package genomics diff --git a/vendor/google.golang.org/genproto/googleapis/genomics/v1/readalignment.pb.go b/vendor/google.golang.org/genproto/googleapis/genomics/v1/readalignment.pb.go index 15b2fc5..f766a30 100644 --- a/vendor/google.golang.org/genproto/googleapis/genomics/v1/readalignment.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/genomics/v1/readalignment.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/genomics/v1/readalignment.proto -// DO NOT EDIT! package genomics diff --git a/vendor/google.golang.org/genproto/googleapis/genomics/v1/readgroup.pb.go b/vendor/google.golang.org/genproto/googleapis/genomics/v1/readgroup.pb.go index 21e4920..42f4e14 100644 --- a/vendor/google.golang.org/genproto/googleapis/genomics/v1/readgroup.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/genomics/v1/readgroup.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/genomics/v1/readgroup.proto -// DO NOT EDIT! package genomics diff --git a/vendor/google.golang.org/genproto/googleapis/genomics/v1/readgroupset.pb.go b/vendor/google.golang.org/genproto/googleapis/genomics/v1/readgroupset.pb.go index 3fff0e5..9d62346 100644 --- a/vendor/google.golang.org/genproto/googleapis/genomics/v1/readgroupset.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/genomics/v1/readgroupset.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/genomics/v1/readgroupset.proto -// DO NOT EDIT! package genomics diff --git a/vendor/google.golang.org/genproto/googleapis/genomics/v1/reads.pb.go b/vendor/google.golang.org/genproto/googleapis/genomics/v1/reads.pb.go index 225e0c9..4023fd2 100644 --- a/vendor/google.golang.org/genproto/googleapis/genomics/v1/reads.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/genomics/v1/reads.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/genomics/v1/reads.proto -// DO NOT EDIT! package genomics diff --git a/vendor/google.golang.org/genproto/googleapis/genomics/v1/references.pb.go b/vendor/google.golang.org/genproto/googleapis/genomics/v1/references.pb.go index 1570575..ef5e0e3 100644 --- a/vendor/google.golang.org/genproto/googleapis/genomics/v1/references.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/genomics/v1/references.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/genomics/v1/references.proto -// DO NOT EDIT! package genomics diff --git a/vendor/google.golang.org/genproto/googleapis/genomics/v1/variants.pb.go b/vendor/google.golang.org/genproto/googleapis/genomics/v1/variants.pb.go index f6c1850..0bac56b 100644 --- a/vendor/google.golang.org/genproto/googleapis/genomics/v1/variants.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/genomics/v1/variants.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/genomics/v1/variants.proto -// DO NOT EDIT! package genomics diff --git a/vendor/google.golang.org/genproto/googleapis/genomics/v1alpha2/pipelines.pb.go b/vendor/google.golang.org/genproto/googleapis/genomics/v1alpha2/pipelines.pb.go index 5c67255..5e79261 100644 --- a/vendor/google.golang.org/genproto/googleapis/genomics/v1alpha2/pipelines.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/genomics/v1alpha2/pipelines.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/genomics/v1alpha2/pipelines.proto -// DO NOT EDIT! /* Package genomics is a generated protocol buffer package. diff --git a/vendor/google.golang.org/genproto/googleapis/iam/admin/v1/iam.pb.go b/vendor/google.golang.org/genproto/googleapis/iam/admin/v1/iam.pb.go index 48de662..44bb9b4 100644 --- a/vendor/google.golang.org/genproto/googleapis/iam/admin/v1/iam.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/iam/admin/v1/iam.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/iam/admin/v1/iam.proto -// DO NOT EDIT! /* Package admin is a generated protocol buffer package. @@ -23,9 +22,21 @@ It has these top-level messages: DeleteServiceAccountKeyRequest SignBlobRequest SignBlobResponse + SignJwtRequest + SignJwtResponse Role QueryGrantableRolesRequest QueryGrantableRolesResponse + ListRolesRequest + ListRolesResponse + GetRoleRequest + CreateRoleRequest + UpdateRoleRequest + DeleteRoleRequest + UndeleteRoleRequest + Permission + QueryTestablePermissionsRequest + QueryTestablePermissionsResponse */ package admin @@ -36,7 +47,7 @@ import _ "google.golang.org/genproto/googleapis/api/annotations" import google_iam_v11 "google.golang.org/genproto/googleapis/iam/v1" import google_iam_v1 "google.golang.org/genproto/googleapis/iam/v1" import google_protobuf1 "github.com/golang/protobuf/ptypes/empty" -import _ "google.golang.org/genproto/protobuf/field_mask" +import google_protobuf2 "google.golang.org/genproto/protobuf/field_mask" import google_protobuf3 "github.com/golang/protobuf/ptypes/timestamp" import ( @@ -141,6 +152,31 @@ func (x ServiceAccountPublicKeyType) String() string { } func (ServiceAccountPublicKeyType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } +// A view for Role objects. +type RoleView int32 + +const ( + // Omits the `included_permissions` field. + // This is the default value. + RoleView_BASIC RoleView = 0 + // Returns all fields. + RoleView_FULL RoleView = 1 +) + +var RoleView_name = map[int32]string{ + 0: "BASIC", + 1: "FULL", +} +var RoleView_value = map[string]int32{ + "BASIC": 0, + "FULL": 1, +} + +func (x RoleView) String() string { + return proto.EnumName(RoleView_name, int32(x)) +} +func (RoleView) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + // `KeyType` filters to selectively retrieve certain varieties // of keys. type ListServiceAccountKeysRequest_KeyType int32 @@ -173,6 +209,111 @@ func (ListServiceAccountKeysRequest_KeyType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{6, 0} } +// A stage representing a role's lifecycle phase. +type Role_RoleLaunchStage int32 + +const ( + // The user has indicated this role is currently in an alpha phase. + Role_ALPHA Role_RoleLaunchStage = 0 + // The user has indicated this role is currently in a beta phase. + Role_BETA Role_RoleLaunchStage = 1 + // The user has indicated this role is generally available. + Role_GA Role_RoleLaunchStage = 2 + // The user has indicated this role is being deprecated. + Role_DEPRECATED Role_RoleLaunchStage = 4 + // This role is disabled and will not contribute permissions to any members + // it is granted to in policies. + Role_DISABLED Role_RoleLaunchStage = 5 + // The user has indicated this role is currently in an eap phase. + Role_EAP Role_RoleLaunchStage = 6 +) + +var Role_RoleLaunchStage_name = map[int32]string{ + 0: "ALPHA", + 1: "BETA", + 2: "GA", + 4: "DEPRECATED", + 5: "DISABLED", + 6: "EAP", +} +var Role_RoleLaunchStage_value = map[string]int32{ + "ALPHA": 0, + "BETA": 1, + "GA": 2, + "DEPRECATED": 4, + "DISABLED": 5, + "EAP": 6, +} + +func (x Role_RoleLaunchStage) String() string { + return proto.EnumName(Role_RoleLaunchStage_name, int32(x)) +} +func (Role_RoleLaunchStage) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{16, 0} } + +// A stage representing a permission's lifecycle phase. +type Permission_PermissionLaunchStage int32 + +const ( + // The permission is currently in an alpha phase. + Permission_ALPHA Permission_PermissionLaunchStage = 0 + // The permission is currently in a beta phase. + Permission_BETA Permission_PermissionLaunchStage = 1 + // The permission is generally available. + Permission_GA Permission_PermissionLaunchStage = 2 + // The permission is being deprecated. + Permission_DEPRECATED Permission_PermissionLaunchStage = 3 +) + +var Permission_PermissionLaunchStage_name = map[int32]string{ + 0: "ALPHA", + 1: "BETA", + 2: "GA", + 3: "DEPRECATED", +} +var Permission_PermissionLaunchStage_value = map[string]int32{ + "ALPHA": 0, + "BETA": 1, + "GA": 2, + "DEPRECATED": 3, +} + +func (x Permission_PermissionLaunchStage) String() string { + return proto.EnumName(Permission_PermissionLaunchStage_name, int32(x)) +} +func (Permission_PermissionLaunchStage) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{26, 0} +} + +// The state of the permission with regards to custom roles. +type Permission_CustomRolesSupportLevel int32 + +const ( + // Permission is fully supported for custom role use. + Permission_SUPPORTED Permission_CustomRolesSupportLevel = 0 + // Permission is being tested to check custom role compatibility. + Permission_TESTING Permission_CustomRolesSupportLevel = 1 + // Permission is not supported for custom role use. + Permission_NOT_SUPPORTED Permission_CustomRolesSupportLevel = 2 +) + +var Permission_CustomRolesSupportLevel_name = map[int32]string{ + 0: "SUPPORTED", + 1: "TESTING", + 2: "NOT_SUPPORTED", +} +var Permission_CustomRolesSupportLevel_value = map[string]int32{ + "SUPPORTED": 0, + "TESTING": 1, + "NOT_SUPPORTED": 2, +} + +func (x Permission_CustomRolesSupportLevel) String() string { + return proto.EnumName(Permission_CustomRolesSupportLevel_name, int32(x)) +} +func (Permission_CustomRolesSupportLevel) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{26, 1} +} + // A service account in the Identity and Access Management API. // // To create a service account, specify the `project_id` and the `account_id` @@ -182,24 +323,24 @@ func (ListServiceAccountKeysRequest_KeyType) EnumDescriptor() ([]byte, []int) { // // If the account already exists, the account's resource name is returned // in util::Status's ResourceInfo.resource_name in the format of -// projects/{project}/serviceAccounts/{email}. The caller can use the name in -// other methods to access the account. +// projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}. The caller can +// use the name in other methods to access the account. // // All other methods can identify the service account using the format -// `projects/{project}/serviceAccounts/{account}`. +// `projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`. // Using `-` as a wildcard for the project will infer the project from // the account. The `account` value can be the `email` address or the // `unique_id` of the service account. type ServiceAccount struct { // The resource name of the service account in the following format: - // `projects/{project}/serviceAccounts/{account}`. + // `projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`. // // Requests using `-` as a wildcard for the project will infer the project // from the `account` and the `account` value can be the `email` address or // the `unique_id` of the service account. // // In responses the resource name will always be in the format - // `projects/{project}/serviceAccounts/{email}`. + // `projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`. Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` // @OutputOnly The id of the project that owns the service account. ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId" json:"project_id,omitempty"` @@ -387,7 +528,7 @@ func (m *ListServiceAccountsResponse) GetNextPageToken() string { // The service account get request. type GetServiceAccountRequest struct { // The resource name of the service account in the following format: - // `projects/{project}/serviceAccounts/{account}`. + // `projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`. // Using `-` as a wildcard for the project will infer the project from // the account. The `account` value can be the `email` address or the // `unique_id` of the service account. @@ -409,7 +550,7 @@ func (m *GetServiceAccountRequest) GetName() string { // The service account delete request. type DeleteServiceAccountRequest struct { // The resource name of the service account in the following format: - // `projects/{project}/serviceAccounts/{account}`. + // `projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`. // Using `-` as a wildcard for the project will infer the project from // the account. The `account` value can be the `email` address or the // `unique_id` of the service account. @@ -431,7 +572,7 @@ func (m *DeleteServiceAccountRequest) GetName() string { // The service account keys list request. type ListServiceAccountKeysRequest struct { // The resource name of the service account in the following format: - // `projects/{project}/serviceAccounts/{account}`. + // `projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`. // // Using `-` as a wildcard for the project, will infer the project from // the account. The `account` value can be the `email` address or the @@ -483,7 +624,7 @@ func (m *ListServiceAccountKeysResponse) GetKeys() []*ServiceAccountKey { // The service account key get by id request. type GetServiceAccountKeyRequest struct { // The resource name of the service account key in the following format: - // `projects/{project}/serviceAccounts/{account}/keys/{key}`. + // `projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}/keys/{key}`. // // Using `-` as a wildcard for the project will infer the project from // the account. The `account` value can be the `email` address or the @@ -531,7 +672,7 @@ func (m *GetServiceAccountKeyRequest) GetPublicKeyType() ServiceAccountPublicKey // Service Account API. type ServiceAccountKey struct { // The resource name of the service account key in the following format - // `projects/{project}/serviceAccounts/{account}/keys/{key}`. + // `projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}/keys/{key}`. Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` // The output format for the private key. // Only provided in `CreateServiceAccountKey` responses, not @@ -543,7 +684,12 @@ type ServiceAccountKey struct { // Specifies the algorithm (and possibly key size) for the key. KeyAlgorithm ServiceAccountKeyAlgorithm `protobuf:"varint,8,opt,name=key_algorithm,json=keyAlgorithm,enum=google.iam.admin.v1.ServiceAccountKeyAlgorithm" json:"key_algorithm,omitempty"` // The private key data. Only provided in `CreateServiceAccountKey` - // responses. + // responses. Make sure to keep the private key data secure because it + // allows for the assertion of the service account identity. + // When decoded, the private key data can be used to authenticate with + // Google API client libraries and with + // gcloud + // auth activate-service-account. PrivateKeyData []byte `protobuf:"bytes,3,opt,name=private_key_data,json=privateKeyData,proto3" json:"private_key_data,omitempty"` // The public key data. Only provided in `GetServiceAccountKey` responses. PublicKeyData []byte `protobuf:"bytes,7,opt,name=public_key_data,json=publicKeyData,proto3" json:"public_key_data,omitempty"` @@ -610,7 +756,7 @@ func (m *ServiceAccountKey) GetValidBeforeTime() *google_protobuf3.Timestamp { // The service account key create request. type CreateServiceAccountKeyRequest struct { // The resource name of the service account in the following format: - // `projects/{project}/serviceAccounts/{account}`. + // `projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`. // Using `-` as a wildcard for the project will infer the project from // the account. The `account` value can be the `email` address or the // `unique_id` of the service account. @@ -619,7 +765,7 @@ type CreateServiceAccountKeyRequest struct { // default output format. PrivateKeyType ServiceAccountPrivateKeyType `protobuf:"varint,2,opt,name=private_key_type,json=privateKeyType,enum=google.iam.admin.v1.ServiceAccountPrivateKeyType" json:"private_key_type,omitempty"` // Which type of key and algorithm to use for the key. - // The default is currently a 4K RSA key. However this may change in the + // The default is currently a 2K RSA key. However this may change in the // future. KeyAlgorithm ServiceAccountKeyAlgorithm `protobuf:"varint,3,opt,name=key_algorithm,json=keyAlgorithm,enum=google.iam.admin.v1.ServiceAccountKeyAlgorithm" json:"key_algorithm,omitempty"` } @@ -653,7 +799,7 @@ func (m *CreateServiceAccountKeyRequest) GetKeyAlgorithm() ServiceAccountKeyAlgo // The service account key delete request. type DeleteServiceAccountKeyRequest struct { // The resource name of the service account key in the following format: - // `projects/{project}/serviceAccounts/{account}/keys/{key}`. + // `projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}/keys/{key}`. // Using `-` as a wildcard for the project will infer the project from // the account. The `account` value can be the `email` address or the // `unique_id` of the service account. @@ -675,7 +821,7 @@ func (m *DeleteServiceAccountKeyRequest) GetName() string { // The service account sign blob request. type SignBlobRequest struct { // The resource name of the service account in the following format: - // `projects/{project}/serviceAccounts/{account}`. + // `projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`. // Using `-` as a wildcard for the project will infer the project from // the account. The `account` value can be the `email` address or the // `unique_id` of the service account. @@ -730,6 +876,64 @@ func (m *SignBlobResponse) GetSignature() []byte { return nil } +// The service account sign JWT request. +type SignJwtRequest struct { + // The resource name of the service account in the following format: + // `projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`. + // Using `-` as a wildcard for the project will infer the project from + // the account. The `account` value can be the `email` address or the + // `unique_id` of the service account. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The JWT payload to sign, a JSON JWT Claim set. + Payload string `protobuf:"bytes,2,opt,name=payload" json:"payload,omitempty"` +} + +func (m *SignJwtRequest) Reset() { *m = SignJwtRequest{} } +func (m *SignJwtRequest) String() string { return proto.CompactTextString(m) } +func (*SignJwtRequest) ProtoMessage() {} +func (*SignJwtRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +func (m *SignJwtRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *SignJwtRequest) GetPayload() string { + if m != nil { + return m.Payload + } + return "" +} + +// The service account sign JWT response. +type SignJwtResponse struct { + // The id of the key used to sign the JWT. + KeyId string `protobuf:"bytes,1,opt,name=key_id,json=keyId" json:"key_id,omitempty"` + // The signed JWT. + SignedJwt string `protobuf:"bytes,2,opt,name=signed_jwt,json=signedJwt" json:"signed_jwt,omitempty"` +} + +func (m *SignJwtResponse) Reset() { *m = SignJwtResponse{} } +func (m *SignJwtResponse) String() string { return proto.CompactTextString(m) } +func (*SignJwtResponse) ProtoMessage() {} +func (*SignJwtResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +func (m *SignJwtResponse) GetKeyId() string { + if m != nil { + return m.KeyId + } + return "" +} + +func (m *SignJwtResponse) GetSignedJwt() string { + if m != nil { + return m.SignedJwt + } + return "" +} + // A role in the Identity and Access Management API. type Role struct { // The name of the role. @@ -738,19 +942,28 @@ type Role struct { // // When Role is used in output and other input such as UpdateRole, the role // name is the complete path, e.g., roles/logging.viewer for curated roles - // and organizations/{organization-id}/roles/logging.viewer for custom roles. + // and organizations/{ORGANIZATION_ID}/roles/logging.viewer for custom roles. Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` // Optional. A human-readable title for the role. Typically this // is limited to 100 UTF-8 bytes. Title string `protobuf:"bytes,2,opt,name=title" json:"title,omitempty"` // Optional. A human-readable description for the role. Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` + // The names of the permissions this role grants when bound in an IAM policy. + IncludedPermissions []string `protobuf:"bytes,7,rep,name=included_permissions,json=includedPermissions" json:"included_permissions,omitempty"` + // The current launch stage of the role. + Stage Role_RoleLaunchStage `protobuf:"varint,8,opt,name=stage,enum=google.iam.admin.v1.Role_RoleLaunchStage" json:"stage,omitempty"` + // Used to perform a consistent read-modify-write. + Etag []byte `protobuf:"bytes,9,opt,name=etag,proto3" json:"etag,omitempty"` + // The current deleted state of the role. This field is read only. + // It will be ignored in calls to CreateRole and UpdateRole. + Deleted bool `protobuf:"varint,11,opt,name=deleted" json:"deleted,omitempty"` } func (m *Role) Reset() { *m = Role{} } func (m *Role) String() string { return proto.CompactTextString(m) } func (*Role) ProtoMessage() {} -func (*Role) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } +func (*Role) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } func (m *Role) GetName() string { if m != nil { @@ -773,6 +986,34 @@ func (m *Role) GetDescription() string { return "" } +func (m *Role) GetIncludedPermissions() []string { + if m != nil { + return m.IncludedPermissions + } + return nil +} + +func (m *Role) GetStage() Role_RoleLaunchStage { + if m != nil { + return m.Stage + } + return Role_ALPHA +} + +func (m *Role) GetEtag() []byte { + if m != nil { + return m.Etag + } + return nil +} + +func (m *Role) GetDeleted() bool { + if m != nil { + return m.Deleted + } + return false +} + // The grantable role query request. type QueryGrantableRolesRequest struct { // Required. The full resource name to query from the list of grantable roles. @@ -780,13 +1021,19 @@ type QueryGrantableRolesRequest struct { // The name follows the Google Cloud Platform resource format. // For example, a Cloud Platform project with id `my-project` will be named // `//cloudresourcemanager.googleapis.com/projects/my-project`. - FullResourceName string `protobuf:"bytes,1,opt,name=full_resource_name,json=fullResourceName" json:"full_resource_name,omitempty"` + FullResourceName string `protobuf:"bytes,1,opt,name=full_resource_name,json=fullResourceName" json:"full_resource_name,omitempty"` + View RoleView `protobuf:"varint,2,opt,name=view,enum=google.iam.admin.v1.RoleView" json:"view,omitempty"` + // Optional limit on the number of roles to include in the response. + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // Optional pagination token returned in an earlier + // QueryGrantableRolesResponse. + PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` } func (m *QueryGrantableRolesRequest) Reset() { *m = QueryGrantableRolesRequest{} } func (m *QueryGrantableRolesRequest) String() string { return proto.CompactTextString(m) } func (*QueryGrantableRolesRequest) ProtoMessage() {} -func (*QueryGrantableRolesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } +func (*QueryGrantableRolesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } func (m *QueryGrantableRolesRequest) GetFullResourceName() string { if m != nil { @@ -795,16 +1042,40 @@ func (m *QueryGrantableRolesRequest) GetFullResourceName() string { return "" } +func (m *QueryGrantableRolesRequest) GetView() RoleView { + if m != nil { + return m.View + } + return RoleView_BASIC +} + +func (m *QueryGrantableRolesRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *QueryGrantableRolesRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + // The grantable role query response. type QueryGrantableRolesResponse struct { // The list of matching roles. Roles []*Role `protobuf:"bytes,1,rep,name=roles" json:"roles,omitempty"` + // To retrieve the next page of results, set + // `QueryGrantableRolesRequest.page_token` to this value. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` } func (m *QueryGrantableRolesResponse) Reset() { *m = QueryGrantableRolesResponse{} } func (m *QueryGrantableRolesResponse) String() string { return proto.CompactTextString(m) } func (*QueryGrantableRolesResponse) ProtoMessage() {} -func (*QueryGrantableRolesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } +func (*QueryGrantableRolesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } func (m *QueryGrantableRolesResponse) GetRoles() []*Role { if m != nil { @@ -813,6 +1084,391 @@ func (m *QueryGrantableRolesResponse) GetRoles() []*Role { return nil } +func (m *QueryGrantableRolesResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The request to get all roles defined under a resource. +type ListRolesRequest struct { + // The resource name of the parent resource in one of the following formats: + // `` (empty string) -- this refers to curated roles. + // `organizations/{ORGANIZATION_ID}` + // `projects/{PROJECT_ID}` + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Optional limit on the number of roles to include in the response. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // Optional pagination token returned in an earlier ListRolesResponse. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // Optional view for the returned Role objects. + View RoleView `protobuf:"varint,4,opt,name=view,enum=google.iam.admin.v1.RoleView" json:"view,omitempty"` + // Include Roles that have been deleted. + ShowDeleted bool `protobuf:"varint,6,opt,name=show_deleted,json=showDeleted" json:"show_deleted,omitempty"` +} + +func (m *ListRolesRequest) Reset() { *m = ListRolesRequest{} } +func (m *ListRolesRequest) String() string { return proto.CompactTextString(m) } +func (*ListRolesRequest) ProtoMessage() {} +func (*ListRolesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } + +func (m *ListRolesRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListRolesRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListRolesRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListRolesRequest) GetView() RoleView { + if m != nil { + return m.View + } + return RoleView_BASIC +} + +func (m *ListRolesRequest) GetShowDeleted() bool { + if m != nil { + return m.ShowDeleted + } + return false +} + +// The response containing the roles defined under a resource. +type ListRolesResponse struct { + // The Roles defined on this resource. + Roles []*Role `protobuf:"bytes,1,rep,name=roles" json:"roles,omitempty"` + // To retrieve the next page of results, set + // `ListRolesRequest.page_token` to this value. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListRolesResponse) Reset() { *m = ListRolesResponse{} } +func (m *ListRolesResponse) String() string { return proto.CompactTextString(m) } +func (*ListRolesResponse) ProtoMessage() {} +func (*ListRolesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } + +func (m *ListRolesResponse) GetRoles() []*Role { + if m != nil { + return m.Roles + } + return nil +} + +func (m *ListRolesResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The request to get the definition of an existing role. +type GetRoleRequest struct { + // The resource name of the role in one of the following formats: + // `roles/{ROLE_NAME}` + // `organizations/{ORGANIZATION_ID}/roles/{ROLE_NAME}` + // `projects/{PROJECT_ID}/roles/{ROLE_NAME}` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetRoleRequest) Reset() { *m = GetRoleRequest{} } +func (m *GetRoleRequest) String() string { return proto.CompactTextString(m) } +func (*GetRoleRequest) ProtoMessage() {} +func (*GetRoleRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } + +func (m *GetRoleRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The request to create a new role. +type CreateRoleRequest struct { + // The resource name of the parent resource in one of the following formats: + // `organizations/{ORGANIZATION_ID}` + // `projects/{PROJECT_ID}` + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The role id to use for this role. + RoleId string `protobuf:"bytes,2,opt,name=role_id,json=roleId" json:"role_id,omitempty"` + // The Role resource to create. + Role *Role `protobuf:"bytes,3,opt,name=role" json:"role,omitempty"` +} + +func (m *CreateRoleRequest) Reset() { *m = CreateRoleRequest{} } +func (m *CreateRoleRequest) String() string { return proto.CompactTextString(m) } +func (*CreateRoleRequest) ProtoMessage() {} +func (*CreateRoleRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } + +func (m *CreateRoleRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateRoleRequest) GetRoleId() string { + if m != nil { + return m.RoleId + } + return "" +} + +func (m *CreateRoleRequest) GetRole() *Role { + if m != nil { + return m.Role + } + return nil +} + +// The request to update a role. +type UpdateRoleRequest struct { + // The resource name of the role in one of the following formats: + // `roles/{ROLE_NAME}` + // `organizations/{ORGANIZATION_ID}/roles/{ROLE_NAME}` + // `projects/{PROJECT_ID}/roles/{ROLE_NAME}` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The updated role. + Role *Role `protobuf:"bytes,2,opt,name=role" json:"role,omitempty"` + // A mask describing which fields in the Role have changed. + UpdateMask *google_protobuf2.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateRoleRequest) Reset() { *m = UpdateRoleRequest{} } +func (m *UpdateRoleRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateRoleRequest) ProtoMessage() {} +func (*UpdateRoleRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } + +func (m *UpdateRoleRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *UpdateRoleRequest) GetRole() *Role { + if m != nil { + return m.Role + } + return nil +} + +func (m *UpdateRoleRequest) GetUpdateMask() *google_protobuf2.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +// The request to delete an existing role. +type DeleteRoleRequest struct { + // The resource name of the role in one of the following formats: + // `organizations/{ORGANIZATION_ID}/roles/{ROLE_NAME}` + // `projects/{PROJECT_ID}/roles/{ROLE_NAME}` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Used to perform a consistent read-modify-write. + Etag []byte `protobuf:"bytes,2,opt,name=etag,proto3" json:"etag,omitempty"` +} + +func (m *DeleteRoleRequest) Reset() { *m = DeleteRoleRequest{} } +func (m *DeleteRoleRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteRoleRequest) ProtoMessage() {} +func (*DeleteRoleRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} } + +func (m *DeleteRoleRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *DeleteRoleRequest) GetEtag() []byte { + if m != nil { + return m.Etag + } + return nil +} + +// The request to undelete an existing role. +type UndeleteRoleRequest struct { + // The resource name of the role in one of the following formats: + // `organizations/{ORGANIZATION_ID}/roles/{ROLE_NAME}` + // `projects/{PROJECT_ID}/roles/{ROLE_NAME}` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Used to perform a consistent read-modify-write. + Etag []byte `protobuf:"bytes,2,opt,name=etag,proto3" json:"etag,omitempty"` +} + +func (m *UndeleteRoleRequest) Reset() { *m = UndeleteRoleRequest{} } +func (m *UndeleteRoleRequest) String() string { return proto.CompactTextString(m) } +func (*UndeleteRoleRequest) ProtoMessage() {} +func (*UndeleteRoleRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } + +func (m *UndeleteRoleRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *UndeleteRoleRequest) GetEtag() []byte { + if m != nil { + return m.Etag + } + return nil +} + +// A permission which can be included by a role. +type Permission struct { + // The name of this Permission. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The title of this Permission. + Title string `protobuf:"bytes,2,opt,name=title" json:"title,omitempty"` + // A brief description of what this Permission is used for. + Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` + // This permission can ONLY be used in predefined roles. + OnlyInPredefinedRoles bool `protobuf:"varint,4,opt,name=only_in_predefined_roles,json=onlyInPredefinedRoles" json:"only_in_predefined_roles,omitempty"` + // The current launch stage of the permission. + Stage Permission_PermissionLaunchStage `protobuf:"varint,5,opt,name=stage,enum=google.iam.admin.v1.Permission_PermissionLaunchStage" json:"stage,omitempty"` + // The current custom role support level. + CustomRolesSupportLevel Permission_CustomRolesSupportLevel `protobuf:"varint,6,opt,name=custom_roles_support_level,json=customRolesSupportLevel,enum=google.iam.admin.v1.Permission_CustomRolesSupportLevel" json:"custom_roles_support_level,omitempty"` +} + +func (m *Permission) Reset() { *m = Permission{} } +func (m *Permission) String() string { return proto.CompactTextString(m) } +func (*Permission) ProtoMessage() {} +func (*Permission) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} } + +func (m *Permission) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Permission) GetTitle() string { + if m != nil { + return m.Title + } + return "" +} + +func (m *Permission) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *Permission) GetOnlyInPredefinedRoles() bool { + if m != nil { + return m.OnlyInPredefinedRoles + } + return false +} + +func (m *Permission) GetStage() Permission_PermissionLaunchStage { + if m != nil { + return m.Stage + } + return Permission_ALPHA +} + +func (m *Permission) GetCustomRolesSupportLevel() Permission_CustomRolesSupportLevel { + if m != nil { + return m.CustomRolesSupportLevel + } + return Permission_SUPPORTED +} + +// A request to get permissions which can be tested on a resource. +type QueryTestablePermissionsRequest struct { + // Required. The full resource name to query from the list of testable + // permissions. + // + // The name follows the Google Cloud Platform resource format. + // For example, a Cloud Platform project with id `my-project` will be named + // `//cloudresourcemanager.googleapis.com/projects/my-project`. + FullResourceName string `protobuf:"bytes,1,opt,name=full_resource_name,json=fullResourceName" json:"full_resource_name,omitempty"` + // Optional limit on the number of permissions to include in the response. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // Optional pagination token returned in an earlier + // QueryTestablePermissionsRequest. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *QueryTestablePermissionsRequest) Reset() { *m = QueryTestablePermissionsRequest{} } +func (m *QueryTestablePermissionsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryTestablePermissionsRequest) ProtoMessage() {} +func (*QueryTestablePermissionsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{27} +} + +func (m *QueryTestablePermissionsRequest) GetFullResourceName() string { + if m != nil { + return m.FullResourceName + } + return "" +} + +func (m *QueryTestablePermissionsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *QueryTestablePermissionsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// The response containing permissions which can be tested on a resource. +type QueryTestablePermissionsResponse struct { + // The Permissions testable on the requested resource. + Permissions []*Permission `protobuf:"bytes,1,rep,name=permissions" json:"permissions,omitempty"` + // To retrieve the next page of results, set + // `QueryTestableRolesRequest.page_token` to this value. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *QueryTestablePermissionsResponse) Reset() { *m = QueryTestablePermissionsResponse{} } +func (m *QueryTestablePermissionsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryTestablePermissionsResponse) ProtoMessage() {} +func (*QueryTestablePermissionsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{28} +} + +func (m *QueryTestablePermissionsResponse) GetPermissions() []*Permission { + if m != nil { + return m.Permissions + } + return nil +} + +func (m *QueryTestablePermissionsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + func init() { proto.RegisterType((*ServiceAccount)(nil), "google.iam.admin.v1.ServiceAccount") proto.RegisterType((*CreateServiceAccountRequest)(nil), "google.iam.admin.v1.CreateServiceAccountRequest") @@ -828,13 +1484,29 @@ func init() { proto.RegisterType((*DeleteServiceAccountKeyRequest)(nil), "google.iam.admin.v1.DeleteServiceAccountKeyRequest") proto.RegisterType((*SignBlobRequest)(nil), "google.iam.admin.v1.SignBlobRequest") proto.RegisterType((*SignBlobResponse)(nil), "google.iam.admin.v1.SignBlobResponse") + proto.RegisterType((*SignJwtRequest)(nil), "google.iam.admin.v1.SignJwtRequest") + proto.RegisterType((*SignJwtResponse)(nil), "google.iam.admin.v1.SignJwtResponse") proto.RegisterType((*Role)(nil), "google.iam.admin.v1.Role") proto.RegisterType((*QueryGrantableRolesRequest)(nil), "google.iam.admin.v1.QueryGrantableRolesRequest") proto.RegisterType((*QueryGrantableRolesResponse)(nil), "google.iam.admin.v1.QueryGrantableRolesResponse") + proto.RegisterType((*ListRolesRequest)(nil), "google.iam.admin.v1.ListRolesRequest") + proto.RegisterType((*ListRolesResponse)(nil), "google.iam.admin.v1.ListRolesResponse") + proto.RegisterType((*GetRoleRequest)(nil), "google.iam.admin.v1.GetRoleRequest") + proto.RegisterType((*CreateRoleRequest)(nil), "google.iam.admin.v1.CreateRoleRequest") + proto.RegisterType((*UpdateRoleRequest)(nil), "google.iam.admin.v1.UpdateRoleRequest") + proto.RegisterType((*DeleteRoleRequest)(nil), "google.iam.admin.v1.DeleteRoleRequest") + proto.RegisterType((*UndeleteRoleRequest)(nil), "google.iam.admin.v1.UndeleteRoleRequest") + proto.RegisterType((*Permission)(nil), "google.iam.admin.v1.Permission") + proto.RegisterType((*QueryTestablePermissionsRequest)(nil), "google.iam.admin.v1.QueryTestablePermissionsRequest") + proto.RegisterType((*QueryTestablePermissionsResponse)(nil), "google.iam.admin.v1.QueryTestablePermissionsResponse") proto.RegisterEnum("google.iam.admin.v1.ServiceAccountKeyAlgorithm", ServiceAccountKeyAlgorithm_name, ServiceAccountKeyAlgorithm_value) proto.RegisterEnum("google.iam.admin.v1.ServiceAccountPrivateKeyType", ServiceAccountPrivateKeyType_name, ServiceAccountPrivateKeyType_value) proto.RegisterEnum("google.iam.admin.v1.ServiceAccountPublicKeyType", ServiceAccountPublicKeyType_name, ServiceAccountPublicKeyType_value) + proto.RegisterEnum("google.iam.admin.v1.RoleView", RoleView_name, RoleView_value) proto.RegisterEnum("google.iam.admin.v1.ListServiceAccountKeysRequest_KeyType", ListServiceAccountKeysRequest_KeyType_name, ListServiceAccountKeysRequest_KeyType_value) + proto.RegisterEnum("google.iam.admin.v1.Role_RoleLaunchStage", Role_RoleLaunchStage_name, Role_RoleLaunchStage_value) + proto.RegisterEnum("google.iam.admin.v1.Permission_PermissionLaunchStage", Permission_PermissionLaunchStage_name, Permission_PermissionLaunchStage_value) + proto.RegisterEnum("google.iam.admin.v1.Permission_CustomRolesSupportLevel", Permission_CustomRolesSupportLevel_name, Permission_CustomRolesSupportLevel_value) } // Reference imports to suppress errors if they are not otherwise used. @@ -875,6 +1547,12 @@ type IAMClient interface { DeleteServiceAccountKey(ctx context.Context, in *DeleteServiceAccountKeyRequest, opts ...grpc.CallOption) (*google_protobuf1.Empty, error) // Signs a blob using a service account's system-managed private key. SignBlob(ctx context.Context, in *SignBlobRequest, opts ...grpc.CallOption) (*SignBlobResponse, error) + // Signs a JWT using a service account's system-managed private key. + // + // If no expiry time (`exp`) is provided in the `SignJwtRequest`, IAM sets an + // an expiry time of one hour by default. If you request an expiry time of + // more than one hour, the request will fail. + SignJwt(ctx context.Context, in *SignJwtRequest, opts ...grpc.CallOption) (*SignJwtResponse, error) // Returns the IAM access control policy for a // [ServiceAccount][google.iam.admin.v1.ServiceAccount]. GetIamPolicy(ctx context.Context, in *google_iam_v11.GetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) @@ -888,6 +1566,27 @@ type IAMClient interface { // A role is grantable if it can be used as the role in a binding for a policy // for that resource. QueryGrantableRoles(ctx context.Context, in *QueryGrantableRolesRequest, opts ...grpc.CallOption) (*QueryGrantableRolesResponse, error) + // Lists the Roles defined on a resource. + ListRoles(ctx context.Context, in *ListRolesRequest, opts ...grpc.CallOption) (*ListRolesResponse, error) + // Gets a Role definition. + GetRole(ctx context.Context, in *GetRoleRequest, opts ...grpc.CallOption) (*Role, error) + // Creates a new Role. + CreateRole(ctx context.Context, in *CreateRoleRequest, opts ...grpc.CallOption) (*Role, error) + // Updates a Role definition. + UpdateRole(ctx context.Context, in *UpdateRoleRequest, opts ...grpc.CallOption) (*Role, error) + // Soft deletes a role. The role is suspended and cannot be used to create new + // IAM Policy Bindings. + // The Role will not be included in `ListRoles()` unless `show_deleted` is set + // in the `ListRolesRequest`. The Role contains the deleted boolean set. + // Existing Bindings remains, but are inactive. The Role can be undeleted + // within 7 days. After 7 days the Role is deleted and all Bindings associated + // with the role are removed. + DeleteRole(ctx context.Context, in *DeleteRoleRequest, opts ...grpc.CallOption) (*Role, error) + // Undelete a Role, bringing it back in its previous state. + UndeleteRole(ctx context.Context, in *UndeleteRoleRequest, opts ...grpc.CallOption) (*Role, error) + // Lists the permissions testable on a resource. + // A permission is testable if it can be tested for an identity on a resource. + QueryTestablePermissions(ctx context.Context, in *QueryTestablePermissionsRequest, opts ...grpc.CallOption) (*QueryTestablePermissionsResponse, error) } type iAMClient struct { @@ -988,6 +1687,15 @@ func (c *iAMClient) SignBlob(ctx context.Context, in *SignBlobRequest, opts ...g return out, nil } +func (c *iAMClient) SignJwt(ctx context.Context, in *SignJwtRequest, opts ...grpc.CallOption) (*SignJwtResponse, error) { + out := new(SignJwtResponse) + err := grpc.Invoke(ctx, "/google.iam.admin.v1.IAM/SignJwt", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *iAMClient) GetIamPolicy(ctx context.Context, in *google_iam_v11.GetIamPolicyRequest, opts ...grpc.CallOption) (*google_iam_v1.Policy, error) { out := new(google_iam_v1.Policy) err := grpc.Invoke(ctx, "/google.iam.admin.v1.IAM/GetIamPolicy", in, out, c.cc, opts...) @@ -1024,6 +1732,69 @@ func (c *iAMClient) QueryGrantableRoles(ctx context.Context, in *QueryGrantableR return out, nil } +func (c *iAMClient) ListRoles(ctx context.Context, in *ListRolesRequest, opts ...grpc.CallOption) (*ListRolesResponse, error) { + out := new(ListRolesResponse) + err := grpc.Invoke(ctx, "/google.iam.admin.v1.IAM/ListRoles", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *iAMClient) GetRole(ctx context.Context, in *GetRoleRequest, opts ...grpc.CallOption) (*Role, error) { + out := new(Role) + err := grpc.Invoke(ctx, "/google.iam.admin.v1.IAM/GetRole", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *iAMClient) CreateRole(ctx context.Context, in *CreateRoleRequest, opts ...grpc.CallOption) (*Role, error) { + out := new(Role) + err := grpc.Invoke(ctx, "/google.iam.admin.v1.IAM/CreateRole", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *iAMClient) UpdateRole(ctx context.Context, in *UpdateRoleRequest, opts ...grpc.CallOption) (*Role, error) { + out := new(Role) + err := grpc.Invoke(ctx, "/google.iam.admin.v1.IAM/UpdateRole", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *iAMClient) DeleteRole(ctx context.Context, in *DeleteRoleRequest, opts ...grpc.CallOption) (*Role, error) { + out := new(Role) + err := grpc.Invoke(ctx, "/google.iam.admin.v1.IAM/DeleteRole", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *iAMClient) UndeleteRole(ctx context.Context, in *UndeleteRoleRequest, opts ...grpc.CallOption) (*Role, error) { + out := new(Role) + err := grpc.Invoke(ctx, "/google.iam.admin.v1.IAM/UndeleteRole", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *iAMClient) QueryTestablePermissions(ctx context.Context, in *QueryTestablePermissionsRequest, opts ...grpc.CallOption) (*QueryTestablePermissionsResponse, error) { + out := new(QueryTestablePermissionsResponse) + err := grpc.Invoke(ctx, "/google.iam.admin.v1.IAM/QueryTestablePermissions", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // Server API for IAM service type IAMServer interface { @@ -1054,6 +1825,12 @@ type IAMServer interface { DeleteServiceAccountKey(context.Context, *DeleteServiceAccountKeyRequest) (*google_protobuf1.Empty, error) // Signs a blob using a service account's system-managed private key. SignBlob(context.Context, *SignBlobRequest) (*SignBlobResponse, error) + // Signs a JWT using a service account's system-managed private key. + // + // If no expiry time (`exp`) is provided in the `SignJwtRequest`, IAM sets an + // an expiry time of one hour by default. If you request an expiry time of + // more than one hour, the request will fail. + SignJwt(context.Context, *SignJwtRequest) (*SignJwtResponse, error) // Returns the IAM access control policy for a // [ServiceAccount][google.iam.admin.v1.ServiceAccount]. GetIamPolicy(context.Context, *google_iam_v11.GetIamPolicyRequest) (*google_iam_v1.Policy, error) @@ -1067,6 +1844,27 @@ type IAMServer interface { // A role is grantable if it can be used as the role in a binding for a policy // for that resource. QueryGrantableRoles(context.Context, *QueryGrantableRolesRequest) (*QueryGrantableRolesResponse, error) + // Lists the Roles defined on a resource. + ListRoles(context.Context, *ListRolesRequest) (*ListRolesResponse, error) + // Gets a Role definition. + GetRole(context.Context, *GetRoleRequest) (*Role, error) + // Creates a new Role. + CreateRole(context.Context, *CreateRoleRequest) (*Role, error) + // Updates a Role definition. + UpdateRole(context.Context, *UpdateRoleRequest) (*Role, error) + // Soft deletes a role. The role is suspended and cannot be used to create new + // IAM Policy Bindings. + // The Role will not be included in `ListRoles()` unless `show_deleted` is set + // in the `ListRolesRequest`. The Role contains the deleted boolean set. + // Existing Bindings remains, but are inactive. The Role can be undeleted + // within 7 days. After 7 days the Role is deleted and all Bindings associated + // with the role are removed. + DeleteRole(context.Context, *DeleteRoleRequest) (*Role, error) + // Undelete a Role, bringing it back in its previous state. + UndeleteRole(context.Context, *UndeleteRoleRequest) (*Role, error) + // Lists the permissions testable on a resource. + // A permission is testable if it can be tested for an identity on a resource. + QueryTestablePermissions(context.Context, *QueryTestablePermissionsRequest) (*QueryTestablePermissionsResponse, error) } func RegisterIAMServer(s *grpc.Server, srv IAMServer) { @@ -1253,6 +2051,24 @@ func _IAM_SignBlob_Handler(srv interface{}, ctx context.Context, dec func(interf return interceptor(ctx, in, info, handler) } +func _IAM_SignJwt_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SignJwtRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IAMServer).SignJwt(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.iam.admin.v1.IAM/SignJwt", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IAMServer).SignJwt(ctx, req.(*SignJwtRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _IAM_GetIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(google_iam_v11.GetIamPolicyRequest) if err := dec(in); err != nil { @@ -1325,6 +2141,132 @@ func _IAM_QueryGrantableRoles_Handler(srv interface{}, ctx context.Context, dec return interceptor(ctx, in, info, handler) } +func _IAM_ListRoles_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListRolesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IAMServer).ListRoles(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.iam.admin.v1.IAM/ListRoles", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IAMServer).ListRoles(ctx, req.(*ListRolesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _IAM_GetRole_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetRoleRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IAMServer).GetRole(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.iam.admin.v1.IAM/GetRole", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IAMServer).GetRole(ctx, req.(*GetRoleRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _IAM_CreateRole_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateRoleRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IAMServer).CreateRole(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.iam.admin.v1.IAM/CreateRole", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IAMServer).CreateRole(ctx, req.(*CreateRoleRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _IAM_UpdateRole_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateRoleRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IAMServer).UpdateRole(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.iam.admin.v1.IAM/UpdateRole", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IAMServer).UpdateRole(ctx, req.(*UpdateRoleRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _IAM_DeleteRole_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteRoleRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IAMServer).DeleteRole(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.iam.admin.v1.IAM/DeleteRole", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IAMServer).DeleteRole(ctx, req.(*DeleteRoleRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _IAM_UndeleteRole_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UndeleteRoleRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IAMServer).UndeleteRole(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.iam.admin.v1.IAM/UndeleteRole", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IAMServer).UndeleteRole(ctx, req.(*UndeleteRoleRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _IAM_QueryTestablePermissions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryTestablePermissionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IAMServer).QueryTestablePermissions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.iam.admin.v1.IAM/QueryTestablePermissions", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IAMServer).QueryTestablePermissions(ctx, req.(*QueryTestablePermissionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _IAM_serviceDesc = grpc.ServiceDesc{ ServiceName: "google.iam.admin.v1.IAM", HandlerType: (*IAMServer)(nil), @@ -1369,6 +2311,10 @@ var _IAM_serviceDesc = grpc.ServiceDesc{ MethodName: "SignBlob", Handler: _IAM_SignBlob_Handler, }, + { + MethodName: "SignJwt", + Handler: _IAM_SignJwt_Handler, + }, { MethodName: "GetIamPolicy", Handler: _IAM_GetIamPolicy_Handler, @@ -1385,6 +2331,34 @@ var _IAM_serviceDesc = grpc.ServiceDesc{ MethodName: "QueryGrantableRoles", Handler: _IAM_QueryGrantableRoles_Handler, }, + { + MethodName: "ListRoles", + Handler: _IAM_ListRoles_Handler, + }, + { + MethodName: "GetRole", + Handler: _IAM_GetRole_Handler, + }, + { + MethodName: "CreateRole", + Handler: _IAM_CreateRole_Handler, + }, + { + MethodName: "UpdateRole", + Handler: _IAM_UpdateRole_Handler, + }, + { + MethodName: "DeleteRole", + Handler: _IAM_DeleteRole_Handler, + }, + { + MethodName: "UndeleteRole", + Handler: _IAM_UndeleteRole_Handler, + }, + { + MethodName: "QueryTestablePermissions", + Handler: _IAM_QueryTestablePermissions_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "google/iam/admin/v1/iam.proto", @@ -1393,106 +2367,157 @@ var _IAM_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("google/iam/admin/v1/iam.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 1604 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0x4b, 0x6f, 0xdb, 0xc6, - 0x16, 0xce, 0xf8, 0x91, 0x58, 0xc7, 0xb2, 0x2c, 0x8f, 0x95, 0x58, 0x57, 0xb2, 0x7d, 0x75, 0x79, - 0x6f, 0x12, 0x47, 0x48, 0x24, 0x59, 0x71, 0xee, 0xcd, 0x75, 0x90, 0xb6, 0xb2, 0xac, 0x08, 0xac, - 0x1f, 0x51, 0x29, 0x19, 0x89, 0xfb, 0x00, 0x31, 0x92, 0xc6, 0x0a, 0x6b, 0x8a, 0x64, 0x48, 0xca, - 0xa8, 0x52, 0x64, 0xd3, 0x45, 0x37, 0x01, 0x0a, 0x14, 0xcd, 0xa2, 0xab, 0x14, 0xe8, 0xa6, 0xdd, - 0x75, 0x53, 0xa0, 0x40, 0xff, 0x46, 0x17, 0x5d, 0x17, 0x28, 0xd0, 0xbf, 0xd0, 0x65, 0x31, 0x43, - 0xd2, 0xd1, 0x83, 0x92, 0xe9, 0xa2, 0xe8, 0x8e, 0x73, 0x9e, 0xdf, 0x9c, 0x33, 0x73, 0xe6, 0x93, - 0x60, 0xa5, 0xa5, 0xeb, 0x2d, 0x95, 0x66, 0x15, 0xd2, 0xce, 0x92, 0x66, 0x5b, 0xd1, 0xb2, 0x27, - 0xeb, 0x6c, 0x91, 0x31, 0x4c, 0xdd, 0xd6, 0xf1, 0xa2, 0xa3, 0xce, 0x30, 0x09, 0x57, 0x67, 0x4e, - 0xd6, 0x13, 0xcb, 0xae, 0x0f, 0x31, 0x94, 0x2c, 0xd1, 0x34, 0xdd, 0x26, 0xb6, 0xa2, 0x6b, 0x96, - 0xe3, 0x92, 0x58, 0xed, 0x89, 0xe8, 0xc4, 0x92, 0x0d, 0x5d, 0x55, 0x1a, 0x5d, 0x57, 0x9f, 0xe8, - 0xd7, 0xf7, 0xe9, 0x92, 0xae, 0x8e, 0xaf, 0xea, 0x9d, 0xa3, 0x2c, 0x6d, 0x1b, 0xb6, 0xa7, 0x4c, - 0x0d, 0x2a, 0x8f, 0x14, 0xaa, 0x36, 0xe5, 0x36, 0xb1, 0x8e, 0x5d, 0x8b, 0x7f, 0x0e, 0x5a, 0xd8, - 0x4a, 0x9b, 0x5a, 0x36, 0x69, 0x1b, 0x8e, 0x81, 0xf0, 0x33, 0x82, 0x48, 0x95, 0x9a, 0x27, 0x4a, - 0x83, 0x16, 0x1a, 0x0d, 0xbd, 0xa3, 0xd9, 0x18, 0xc3, 0x94, 0x46, 0xda, 0x34, 0x8e, 0x52, 0x68, - 0x2d, 0x24, 0xf1, 0x6f, 0xbc, 0x02, 0x60, 0x98, 0xfa, 0x87, 0xb4, 0x61, 0xcb, 0x4a, 0x33, 0x3e, - 0xc1, 0x35, 0x21, 0x57, 0x22, 0x36, 0x71, 0x12, 0x42, 0x1d, 0x4d, 0x79, 0xda, 0xa1, 0x4c, 0x3b, - 0xc5, 0xb5, 0x33, 0x8e, 0x40, 0x6c, 0xe2, 0x18, 0x4c, 0xd3, 0x36, 0x51, 0xd4, 0xf8, 0x34, 0x57, - 0x38, 0x0b, 0xfc, 0x2f, 0x08, 0x37, 0x15, 0xcb, 0x50, 0x49, 0x57, 0xe6, 0xd9, 0x2e, 0x72, 0xe5, - 0xac, 0x2b, 0xdb, 0x67, 0x49, 0x31, 0x4c, 0x51, 0x9b, 0xb4, 0xe2, 0x97, 0x52, 0x68, 0x2d, 0x2c, - 0xf1, 0x6f, 0xbc, 0x06, 0x51, 0x9d, 0x74, 0xec, 0x27, 0x79, 0xb9, 0xa1, 0x2a, 0x54, 0xe3, 0x70, - 0x42, 0xdc, 0x35, 0xe2, 0xc8, 0x8b, 0x5c, 0x2c, 0x36, 0x85, 0x57, 0x08, 0x92, 0x45, 0x93, 0x12, - 0x9b, 0xf6, 0xef, 0x4f, 0xa2, 0x4f, 0x3b, 0xd4, 0x1a, 0xb9, 0x4d, 0xe2, 0x58, 0xf5, 0x6c, 0xd3, - 0x95, 0x88, 0x4d, 0xbc, 0x0b, 0xf3, 0x96, 0x13, 0x4b, 0x76, 0x85, 0xf1, 0xc9, 0x14, 0x5a, 0x9b, - 0xcd, 0xff, 0x3b, 0xe3, 0x73, 0x2a, 0x32, 0x03, 0x79, 0x23, 0x56, 0xdf, 0x5a, 0x50, 0x21, 0xb1, - 0xab, 0x58, 0x76, 0xbf, 0x95, 0x35, 0x0e, 0x5e, 0x12, 0x42, 0x06, 0x69, 0x51, 0xd9, 0x52, 0x9e, - 0x51, 0x8e, 0x6e, 0x5a, 0x9a, 0x61, 0x82, 0xaa, 0xf2, 0xcc, 0x69, 0x11, 0x53, 0xda, 0xfa, 0x31, - 0xd5, 0x38, 0x2e, 0xd6, 0x22, 0xd2, 0xa2, 0x35, 0x26, 0x10, 0x3e, 0x45, 0x90, 0xf4, 0x4d, 0x67, - 0x19, 0xba, 0x66, 0x51, 0xfc, 0x26, 0xcc, 0xb8, 0x7b, 0xb2, 0xe2, 0x28, 0x35, 0x19, 0x74, 0x53, - 0xa7, 0x4e, 0xf8, 0x1a, 0xcc, 0x6b, 0xf4, 0x23, 0x5b, 0xee, 0x01, 0xe1, 0x14, 0x70, 0x8e, 0x89, - 0x2b, 0xa7, 0x40, 0x32, 0x10, 0x2f, 0x53, 0x3b, 0x70, 0x4f, 0x84, 0x75, 0x48, 0x6e, 0x53, 0x95, - 0x9e, 0xa3, 0x8d, 0xec, 0x50, 0xaf, 0x0c, 0xef, 0x75, 0x87, 0x76, 0xc7, 0x56, 0xf7, 0x11, 0x84, - 0x8e, 0x69, 0x57, 0xb6, 0xbb, 0x06, 0xb5, 0xe2, 0x13, 0xa9, 0xc9, 0xb5, 0x48, 0x7e, 0xd3, 0xb7, - 0x04, 0x63, 0x43, 0x67, 0x76, 0x68, 0xb7, 0xd6, 0x35, 0xa8, 0x34, 0x73, 0xec, 0x7c, 0x58, 0x82, - 0x08, 0x97, 0x5c, 0x21, 0x8e, 0x43, 0x6c, 0xa7, 0x74, 0x28, 0xd7, 0x0e, 0x2b, 0x25, 0xf9, 0x60, - 0xbf, 0x5a, 0x29, 0x15, 0xc5, 0x07, 0x62, 0x69, 0x3b, 0x7a, 0x01, 0x47, 0x21, 0x7c, 0x50, 0x2d, - 0x49, 0xf2, 0x5e, 0x61, 0xbf, 0x50, 0x2e, 0x6d, 0x47, 0x11, 0xc6, 0x10, 0xa9, 0x1e, 0x56, 0x6b, - 0xa5, 0xbd, 0x53, 0xd9, 0x84, 0xf0, 0x3e, 0xac, 0x8e, 0xca, 0xee, 0xf6, 0x71, 0x13, 0xa6, 0x8e, - 0x69, 0xd7, 0xeb, 0xe1, 0xb5, 0x00, 0x3d, 0xdc, 0xa1, 0x5d, 0x89, 0xfb, 0x08, 0x2f, 0x10, 0x24, - 0x87, 0x7a, 0xc3, 0xd4, 0x63, 0xaa, 0xf6, 0x18, 0xe6, 0x8d, 0x4e, 0x5d, 0x55, 0x1a, 0xb2, 0x57, - 0x3c, 0xde, 0xf6, 0x48, 0x3e, 0x17, 0x20, 0x75, 0x85, 0x7b, 0x7a, 0x15, 0x9b, 0x33, 0x7a, 0x97, - 0xc2, 0x8f, 0x93, 0xb0, 0x30, 0x04, 0xc5, 0x17, 0xc3, 0x7b, 0x10, 0x35, 0x4c, 0xe5, 0x84, 0xd8, - 0x74, 0x10, 0xc4, 0x7a, 0x10, 0x10, 0x8e, 0xab, 0x87, 0x22, 0x62, 0xf4, 0xad, 0x71, 0x0d, 0xe6, - 0x58, 0x50, 0xa2, 0xb6, 0x74, 0x53, 0xb1, 0x9f, 0xb4, 0xe3, 0x33, 0x3c, 0x72, 0x36, 0x58, 0x65, - 0x0b, 0x9e, 0x9b, 0x14, 0x3e, 0xee, 0x59, 0xb1, 0x39, 0xd6, 0x0b, 0xb9, 0x49, 0x6c, 0xc2, 0xef, - 0x6c, 0xb8, 0x37, 0xff, 0x36, 0xb1, 0x09, 0xbb, 0x57, 0x3d, 0x05, 0xe6, 0x86, 0xce, 0x40, 0x7c, - 0x5d, 0x2e, 0x6e, 0xb7, 0x0d, 0xd1, 0x13, 0xa2, 0x2a, 0x4d, 0x99, 0x1c, 0xd9, 0xd4, 0x94, 0xd9, - 0xa0, 0xe7, 0xa3, 0x78, 0x36, 0x9f, 0xf0, 0xa0, 0x7a, 0xaf, 0x40, 0xa6, 0xe6, 0xbd, 0x02, 0x52, - 0x84, 0xfb, 0x14, 0x98, 0x0b, 0x13, 0xe2, 0x07, 0xb0, 0xe0, 0x44, 0xa9, 0xd3, 0x23, 0xdd, 0xa4, - 0x4e, 0x98, 0xe9, 0x33, 0xc3, 0xcc, 0x73, 0xa7, 0x2d, 0xee, 0xc3, 0xa4, 0xc2, 0x6f, 0x08, 0x56, - 0xfd, 0xa6, 0xef, 0x19, 0xa7, 0xe9, 0xef, 0xed, 0xe4, 0xe4, 0x5f, 0xd0, 0x49, 0x61, 0x03, 0x56, - 0xfd, 0xe6, 0xd3, 0xf8, 0x8d, 0x0a, 0x22, 0xcc, 0x57, 0x95, 0x96, 0xb6, 0xa5, 0xea, 0xf5, 0x71, - 0xf5, 0x10, 0x60, 0xae, 0xde, 0xb5, 0xa9, 0x25, 0xdb, 0xba, 0x6c, 0x29, 0x2d, 0x67, 0xa4, 0x86, - 0xa5, 0x59, 0x2e, 0xac, 0xe9, 0x2c, 0x84, 0x50, 0x86, 0xe8, 0xeb, 0x50, 0xee, 0x14, 0xb8, 0x0c, - 0x17, 0xd9, 0x56, 0x95, 0xa6, 0x1b, 0x6d, 0xfa, 0x98, 0x76, 0xc5, 0x26, 0x5e, 0x86, 0x10, 0x8b, - 0x42, 0xec, 0x8e, 0x49, 0xdd, 0x50, 0xaf, 0x05, 0x82, 0x04, 0x53, 0x92, 0xae, 0x52, 0x5f, 0x20, - 0x31, 0x98, 0xb6, 0x15, 0x5b, 0xa5, 0xee, 0x4c, 0x77, 0x16, 0x38, 0x05, 0xb3, 0x4d, 0x6a, 0x35, - 0x4c, 0xc5, 0x60, 0x7c, 0xc7, 0x7d, 0x74, 0x7a, 0x45, 0xc2, 0xdb, 0x90, 0x78, 0xa7, 0x43, 0xcd, - 0x6e, 0xd9, 0x24, 0x9a, 0x4d, 0xea, 0x2a, 0x65, 0x19, 0x4e, 0xc7, 0xf0, 0x4d, 0xc0, 0x47, 0x1d, - 0x55, 0x95, 0x4d, 0x6a, 0xe9, 0x1d, 0xb3, 0x41, 0xe5, 0x9e, 0xbc, 0x51, 0xa6, 0x91, 0x5c, 0x05, - 0xe3, 0x03, 0xc2, 0x3e, 0x24, 0x7d, 0x63, 0xb9, 0x7b, 0xce, 0xc2, 0xb4, 0xc9, 0x04, 0xee, 0xe8, - 0xfb, 0x87, 0x6f, 0x5b, 0x99, 0x8b, 0xe4, 0xd8, 0xa5, 0x09, 0x24, 0x46, 0x77, 0x19, 0x2f, 0xc1, - 0x22, 0x1b, 0xd5, 0x85, 0xdd, 0xf2, 0xc0, 0xa4, 0x8e, 0x41, 0xd4, 0x53, 0x48, 0xd5, 0x82, 0xbc, - 0x9e, 0xcb, 0x6f, 0x44, 0xd1, 0xa0, 0x34, 0x9f, 0xdb, 0xb8, 0x1b, 0x9d, 0x48, 0xab, 0xb0, 0x3c, - 0xee, 0x88, 0x32, 0x2f, 0x9f, 0xb7, 0xc0, 0x93, 0x56, 0x76, 0x8a, 0xd5, 0xf5, 0xbc, 0xfc, 0x40, - 0xdc, 0x2d, 0x45, 0x11, 0x4e, 0xc1, 0x32, 0x97, 0x96, 0x1f, 0x3e, 0x2c, 0xef, 0x96, 0xe4, 0xa2, - 0x54, 0xda, 0x2e, 0xed, 0xd7, 0xc4, 0xc2, 0x6e, 0xd5, 0xb1, 0x98, 0x48, 0x7f, 0x00, 0xc9, 0x31, - 0xf3, 0x15, 0xcf, 0x41, 0x88, 0x07, 0xd8, 0x7f, 0xb8, 0x5f, 0x8a, 0x5e, 0xc0, 0x57, 0x00, 0xf3, - 0xe5, 0xe3, 0x3b, 0xb9, 0xff, 0xcb, 0x95, 0xd2, 0x9e, 0x97, 0x67, 0x09, 0x16, 0xb9, 0x5c, 0x2a, - 0x3c, 0x92, 0x2b, 0x07, 0x5b, 0xbb, 0x62, 0x51, 0xde, 0x29, 0x1d, 0x46, 0x27, 0xf2, 0xbf, 0x2c, - 0xc0, 0xa4, 0x58, 0xd8, 0xc3, 0xdf, 0x20, 0x58, 0xf4, 0xa1, 0x12, 0x38, 0x1b, 0xf0, 0xb5, 0xf4, - 0xda, 0x9f, 0xc8, 0x05, 0x77, 0x70, 0x7a, 0x2c, 0xdc, 0xfa, 0xe4, 0xa7, 0x5f, 0xbf, 0x98, 0xb8, - 0x8e, 0xaf, 0x32, 0xa2, 0xfc, 0x31, 0x3b, 0x2d, 0xf7, 0x5d, 0x16, 0x6a, 0x65, 0xd3, 0xcf, 0xb3, - 0xd6, 0x00, 0xa2, 0x2f, 0x11, 0x2c, 0x0c, 0x3d, 0x68, 0xf8, 0x96, 0x6f, 0xda, 0x51, 0xa4, 0x24, - 0x11, 0x84, 0x07, 0x09, 0x59, 0x0e, 0xec, 0x06, 0xbe, 0xee, 0x07, 0x6c, 0x10, 0x57, 0x36, 0xfd, - 0x1c, 0x7f, 0x85, 0x20, 0xe6, 0x37, 0x20, 0xb1, 0x7f, 0x51, 0xc6, 0x30, 0xd9, 0x60, 0x00, 0x73, - 0x1c, 0x60, 0x5a, 0x08, 0x56, 0xb9, 0x4d, 0x94, 0xc6, 0x2f, 0x11, 0xc4, 0x0e, 0x8c, 0xe6, 0x30, - 0xc2, 0x20, 0xf9, 0x82, 0x81, 0xca, 0x73, 0x50, 0x37, 0x13, 0x41, 0xab, 0xc6, 0x60, 0x7d, 0x8e, - 0x20, 0xe6, 0x37, 0x70, 0x47, 0x14, 0x6e, 0x0c, 0x77, 0x4c, 0x5c, 0x19, 0x7a, 0xd1, 0x4a, 0xec, - 0xd7, 0x95, 0xd7, 0xcc, 0x74, 0xe0, 0x66, 0xfe, 0x80, 0xe0, 0x8a, 0x3f, 0x2f, 0xc3, 0xf9, 0xf3, - 0x53, 0xc8, 0xc4, 0xed, 0x73, 0xf9, 0xb8, 0x57, 0x63, 0x83, 0x83, 0xce, 0xe0, 0x9b, 0x01, 0x41, - 0x67, 0x19, 0xe5, 0xc3, 0xdf, 0x22, 0x88, 0xf9, 0x51, 0xbe, 0x11, 0xd5, 0x1c, 0xc3, 0x0e, 0x13, - 0x01, 0xb9, 0xa6, 0xf0, 0x5f, 0x0e, 0x34, 0x87, 0x33, 0xc1, 0x80, 0x72, 0x9c, 0xac, 0xc8, 0xdf, - 0x21, 0x58, 0x1a, 0x41, 0x29, 0xf0, 0xed, 0xc0, 0x97, 0xe6, 0x4f, 0x00, 0xfe, 0x1f, 0x07, 0xbc, - 0x2e, 0x9c, 0xab, 0xb2, 0xec, 0xa8, 0xbe, 0x42, 0xb0, 0x34, 0x82, 0x1b, 0x8c, 0x40, 0x3c, 0x9e, - 0x49, 0x8c, 0x3c, 0xb0, 0x6e, 0x49, 0xd3, 0xe7, 0x2d, 0xe9, 0x4b, 0x04, 0x33, 0x1e, 0x77, 0xc0, - 0xff, 0xf1, 0x2f, 0x47, 0x3f, 0x4b, 0x49, 0x5c, 0x3d, 0xc3, 0xca, 0x3d, 0x8d, 0xf7, 0x38, 0xa2, - 0x3b, 0x42, 0x2e, 0xe8, 0xcd, 0xb6, 0xdc, 0x08, 0xac, 0x6e, 0x2f, 0x10, 0x84, 0xcb, 0xd4, 0x16, - 0x49, 0xbb, 0xc2, 0xff, 0x0b, 0xc1, 0x42, 0x6f, 0x52, 0xe7, 0x18, 0x9e, 0x2a, 0x3d, 0x60, 0x97, - 0x07, 0x6c, 0x1c, 0xad, 0xf0, 0x16, 0x07, 0xb2, 0x29, 0xdc, 0xe5, 0x40, 0x3c, 0xa2, 0x71, 0x06, - 0x98, 0x56, 0x6f, 0xf2, 0xcf, 0x10, 0x84, 0xab, 0xe3, 0xd0, 0x54, 0x83, 0xa3, 0x29, 0x72, 0x34, - 0xf7, 0xcf, 0x87, 0xc6, 0xea, 0x89, 0xcf, 0xca, 0xf3, 0x3d, 0x02, 0x5c, 0xa3, 0x16, 0x17, 0x52, - 0xb3, 0xad, 0x58, 0x96, 0xa2, 0x6b, 0x16, 0x5e, 0x1b, 0x48, 0x39, 0x6c, 0xe2, 0x81, 0xbb, 0x11, - 0xc0, 0xd2, 0xed, 0xa3, 0xc8, 0x01, 0x17, 0x85, 0x37, 0xce, 0x03, 0xd8, 0x1e, 0x8a, 0xc7, 0x60, - 0x7f, 0x8d, 0x60, 0xd1, 0x87, 0xbf, 0x8d, 0xa0, 0x0d, 0xa3, 0x59, 0xe3, 0x08, 0xda, 0x30, 0x86, - 0x1a, 0x0a, 0x6b, 0x7c, 0x17, 0x82, 0xb0, 0xc2, 0x76, 0xc1, 0xc9, 0xdf, 0xe6, 0xd3, 0x61, 0xf3, - 0x4d, 0x94, 0xde, 0xaa, 0xc3, 0x52, 0x43, 0x6f, 0xfb, 0x25, 0xd8, 0x9a, 0x61, 0x5b, 0x62, 0xf7, - 0xae, 0x82, 0xde, 0xbd, 0xeb, 0x1a, 0xb4, 0x74, 0x95, 0x68, 0xad, 0x8c, 0x6e, 0xb6, 0xb2, 0x2d, - 0xaa, 0xf1, 0x5b, 0x99, 0x75, 0x54, 0xc4, 0x50, 0xac, 0xbe, 0xff, 0x10, 0xef, 0xf1, 0x8f, 0xdf, - 0x11, 0xaa, 0x5f, 0xe4, 0x76, 0xb7, 0xff, 0x08, 0x00, 0x00, 0xff, 0xff, 0xfe, 0xae, 0xd0, 0x13, - 0x6a, 0x14, 0x00, 0x00, + // 2430 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x5a, 0x4f, 0x73, 0xdb, 0xc6, + 0x15, 0x37, 0x28, 0xea, 0x0f, 0x9f, 0x24, 0x0a, 0x5a, 0xc9, 0x16, 0x4b, 0x59, 0xb6, 0xb2, 0xb5, + 0x1d, 0x99, 0xb5, 0x45, 0x89, 0x96, 0x6b, 0x57, 0x1e, 0x27, 0xa5, 0x44, 0x9a, 0xa1, 0x45, 0xcb, + 0x2c, 0x48, 0x35, 0x71, 0xff, 0x0c, 0x06, 0x22, 0x56, 0x34, 0x22, 0x10, 0x80, 0x01, 0x50, 0x2a, + 0x9d, 0x49, 0x67, 0xda, 0x43, 0x2f, 0x99, 0x76, 0xda, 0x49, 0x0e, 0x39, 0xa5, 0x33, 0xbd, 0xb4, + 0xb7, 0x5e, 0x3a, 0xd3, 0x69, 0x27, 0xdf, 0xa0, 0xc7, 0x1e, 0xfa, 0x05, 0x32, 0xd3, 0xaf, 0xd0, + 0x63, 0x67, 0x17, 0x80, 0x08, 0x92, 0x00, 0x04, 0x39, 0x69, 0x2f, 0x1a, 0xec, 0xfb, 0xfb, 0xdb, + 0xb7, 0xbb, 0x6f, 0xdf, 0x3e, 0x0a, 0x56, 0xda, 0xba, 0xde, 0x56, 0x49, 0x5e, 0x91, 0x3a, 0x79, + 0x49, 0xee, 0x28, 0x5a, 0xfe, 0x64, 0x93, 0x0e, 0xd6, 0x0d, 0x53, 0xb7, 0x75, 0xb4, 0xe0, 0xb0, + 0xd7, 0x29, 0x85, 0xb1, 0xd7, 0x4f, 0x36, 0xb3, 0x57, 0x5d, 0x1d, 0xc9, 0x50, 0xf2, 0x92, 0xa6, + 0xe9, 0xb6, 0x64, 0x2b, 0xba, 0x66, 0x39, 0x2a, 0xd9, 0x6b, 0x3e, 0x8b, 0x8e, 0x2d, 0xd1, 0xd0, + 0x55, 0xa5, 0xd5, 0x73, 0xf9, 0xd9, 0x41, 0xfe, 0x00, 0x6f, 0xd9, 0xe5, 0xb1, 0xd1, 0x61, 0xf7, + 0x28, 0x4f, 0x3a, 0x86, 0xed, 0x31, 0x57, 0x87, 0x99, 0x47, 0x0a, 0x51, 0x65, 0xb1, 0x23, 0x59, + 0xc7, 0xae, 0xc4, 0xf5, 0x61, 0x09, 0x5b, 0xe9, 0x10, 0xcb, 0x96, 0x3a, 0x86, 0x23, 0x80, 0xff, + 0xc5, 0x41, 0xba, 0x41, 0xcc, 0x13, 0xa5, 0x45, 0x8a, 0xad, 0x96, 0xde, 0xd5, 0x6c, 0x84, 0x20, + 0xa9, 0x49, 0x1d, 0x92, 0xe1, 0x56, 0xb9, 0xb5, 0x94, 0xc0, 0xbe, 0xd1, 0x0a, 0x80, 0x61, 0xea, + 0x1f, 0x92, 0x96, 0x2d, 0x2a, 0x72, 0x26, 0xc1, 0x38, 0x29, 0x97, 0x52, 0x95, 0xd1, 0x32, 0xa4, + 0xba, 0x9a, 0xf2, 0xaa, 0x4b, 0x28, 0x37, 0xc9, 0xb8, 0x53, 0x0e, 0xa1, 0x2a, 0xa3, 0x45, 0x18, + 0x27, 0x1d, 0x49, 0x51, 0x33, 0xe3, 0x8c, 0xe1, 0x0c, 0xd0, 0x5b, 0x30, 0x23, 0x2b, 0x96, 0xa1, + 0x4a, 0x3d, 0x91, 0x79, 0x9b, 0x60, 0xcc, 0x69, 0x97, 0xb6, 0x4f, 0x9d, 0x22, 0x48, 0x12, 0x5b, + 0x6a, 0x67, 0x26, 0x57, 0xb9, 0xb5, 0x19, 0x81, 0x7d, 0xa3, 0x35, 0xe0, 0x75, 0xa9, 0x6b, 0xbf, + 0x2c, 0x88, 0x2d, 0x55, 0x21, 0x1a, 0x83, 0x93, 0x62, 0xaa, 0x69, 0x87, 0xbe, 0xcb, 0xc8, 0x55, + 0x19, 0x7f, 0xc1, 0xc1, 0xf2, 0xae, 0x49, 0x24, 0x9b, 0x0c, 0xce, 0x4f, 0x20, 0xaf, 0xba, 0xc4, + 0x0a, 0x9d, 0xa6, 0xe4, 0x48, 0xf9, 0xa6, 0xe9, 0x52, 0xaa, 0x32, 0xaa, 0xc1, 0x9c, 0xe5, 0xd8, + 0x12, 0x5d, 0x62, 0x66, 0x6c, 0x95, 0x5b, 0x9b, 0x2e, 0x7c, 0x7b, 0x3d, 0x60, 0x57, 0xac, 0x0f, + 0xf9, 0x4d, 0x5b, 0x03, 0x63, 0xac, 0x42, 0xb6, 0xa6, 0x58, 0xf6, 0xa0, 0x94, 0x15, 0x05, 0x6f, + 0x19, 0x52, 0x86, 0xd4, 0x26, 0xa2, 0xa5, 0xbc, 0x26, 0x0c, 0xdd, 0xb8, 0x30, 0x45, 0x09, 0x0d, + 0xe5, 0xb5, 0xb3, 0x44, 0x94, 0x69, 0xeb, 0xc7, 0x44, 0x63, 0xb8, 0xe8, 0x12, 0x49, 0x6d, 0xd2, + 0xa4, 0x04, 0xfc, 0x2b, 0x0e, 0x96, 0x03, 0xdd, 0x59, 0x86, 0xae, 0x59, 0x04, 0xbd, 0x0b, 0x53, + 0xee, 0x9c, 0xac, 0x0c, 0xb7, 0x3a, 0x16, 0x77, 0x52, 0x67, 0x4a, 0xe8, 0x16, 0xcc, 0x69, 0xe4, + 0x67, 0xb6, 0xe8, 0x03, 0xe1, 0x04, 0x70, 0x96, 0x92, 0xeb, 0x67, 0x40, 0xd6, 0x21, 0x53, 0x21, + 0x76, 0xec, 0x35, 0xc1, 0x9b, 0xb0, 0x5c, 0x22, 0x2a, 0xb9, 0xc0, 0x32, 0xd2, 0x4d, 0xbd, 0x32, + 0x3a, 0xd7, 0x3d, 0xd2, 0x8b, 0x8c, 0xee, 0xfb, 0x90, 0x3a, 0x26, 0x3d, 0xd1, 0xee, 0x19, 0xc4, + 0xca, 0x24, 0x56, 0xc7, 0xd6, 0xd2, 0x85, 0xed, 0xc0, 0x10, 0x44, 0x9a, 0x5e, 0xdf, 0x23, 0xbd, + 0x66, 0xcf, 0x20, 0xc2, 0xd4, 0xb1, 0xf3, 0x61, 0xe1, 0x2a, 0x4c, 0xba, 0x44, 0x94, 0x81, 0xc5, + 0xbd, 0xf2, 0x0b, 0xb1, 0xf9, 0xa2, 0x5e, 0x16, 0x0f, 0xf6, 0x1b, 0xf5, 0xf2, 0x6e, 0xf5, 0x49, + 0xb5, 0x5c, 0xe2, 0x2f, 0x21, 0x1e, 0x66, 0x0e, 0x1a, 0x65, 0x41, 0x7c, 0x56, 0xdc, 0x2f, 0x56, + 0xca, 0x25, 0x9e, 0x43, 0x08, 0xd2, 0x8d, 0x17, 0x8d, 0x66, 0xf9, 0xd9, 0x19, 0x2d, 0x81, 0x7f, + 0x02, 0xd7, 0xc2, 0xbc, 0xbb, 0xeb, 0xb8, 0x0d, 0xc9, 0x63, 0xd2, 0xf3, 0xd6, 0xf0, 0x56, 0x8c, + 0x35, 0xdc, 0x23, 0x3d, 0x81, 0xe9, 0xe0, 0x4f, 0x38, 0x58, 0x1e, 0x59, 0x1b, 0xca, 0x8e, 0x88, + 0xda, 0x07, 0x30, 0x67, 0x74, 0x0f, 0x55, 0xa5, 0x25, 0x7a, 0xc1, 0x63, 0xcb, 0x9e, 0x2e, 0x6c, + 0xc4, 0x70, 0x5d, 0x67, 0x9a, 0x5e, 0xc4, 0x66, 0x0d, 0xff, 0x10, 0xff, 0x7d, 0x0c, 0xe6, 0x47, + 0xa0, 0x04, 0x62, 0xf8, 0x31, 0xf0, 0x86, 0xa9, 0x9c, 0x48, 0x36, 0x19, 0x06, 0xb1, 0x19, 0x07, + 0x84, 0xa3, 0xea, 0xa1, 0x48, 0x1b, 0x03, 0x63, 0xd4, 0x84, 0x59, 0x6a, 0x54, 0x52, 0xdb, 0xba, + 0xa9, 0xd8, 0x2f, 0x3b, 0x99, 0x29, 0x66, 0x39, 0x1f, 0x2f, 0xb2, 0x45, 0x4f, 0x4d, 0x98, 0x39, + 0xf6, 0x8d, 0x68, 0x1e, 0xf3, 0x43, 0x96, 0x25, 0x5b, 0x62, 0x67, 0x76, 0xc6, 0xef, 0xbf, 0x24, + 0xd9, 0x12, 0x3d, 0x57, 0xbe, 0x00, 0x33, 0x41, 0x27, 0x21, 0xf6, 0xc3, 0xc5, 0xe4, 0x4a, 0xc0, + 0x9f, 0x48, 0xaa, 0x22, 0x8b, 0xd2, 0x91, 0x4d, 0x4c, 0x91, 0x26, 0x7a, 0x96, 0x8a, 0xa7, 0x0b, + 0x59, 0x0f, 0xaa, 0x77, 0x0b, 0xac, 0x37, 0xbd, 0x5b, 0x40, 0x48, 0x33, 0x9d, 0x22, 0x55, 0xa1, + 0x44, 0xf4, 0x04, 0xe6, 0x1d, 0x2b, 0x87, 0xe4, 0x48, 0x37, 0x89, 0x63, 0x66, 0xfc, 0x5c, 0x33, + 0x73, 0x4c, 0x69, 0x87, 0xe9, 0x50, 0x2a, 0xfe, 0x37, 0x07, 0xd7, 0x82, 0xb2, 0xef, 0x39, 0xbb, + 0xe9, 0xff, 0xbb, 0x92, 0x63, 0xdf, 0xc0, 0x4a, 0xe2, 0x2d, 0xb8, 0x16, 0x94, 0x9f, 0xa2, 0x27, + 0x8a, 0xab, 0x30, 0xd7, 0x50, 0xda, 0xda, 0x8e, 0xaa, 0x1f, 0x46, 0xc5, 0x03, 0xc3, 0xec, 0x61, + 0xcf, 0x26, 0x96, 0x68, 0xeb, 0xa2, 0xa5, 0xb4, 0x9d, 0x94, 0x3a, 0x23, 0x4c, 0x33, 0x62, 0x53, + 0xa7, 0x26, 0x70, 0x05, 0xf8, 0xbe, 0x29, 0x37, 0x0b, 0x5c, 0x86, 0x09, 0x3a, 0x55, 0x45, 0x76, + 0xad, 0x8d, 0x1f, 0x93, 0x5e, 0x55, 0x46, 0x57, 0x21, 0x45, 0xad, 0x48, 0x76, 0xd7, 0x24, 0xae, + 0xa9, 0x3e, 0x01, 0xbf, 0x03, 0x69, 0x6a, 0xe8, 0xe9, 0x69, 0xe4, 0x1d, 0x99, 0x81, 0x49, 0x43, + 0xea, 0xa9, 0xba, 0xe4, 0x5d, 0x90, 0xde, 0x10, 0x57, 0x9c, 0x39, 0x31, 0xfd, 0x68, 0x1c, 0x2b, + 0x00, 0xd4, 0x2d, 0x91, 0xc5, 0x0f, 0x4f, 0x6d, 0xef, 0x9e, 0x75, 0x28, 0x4f, 0x4f, 0x6d, 0xfc, + 0x8f, 0x04, 0x24, 0x05, 0x5d, 0x25, 0x81, 0xfe, 0x17, 0x61, 0xdc, 0x56, 0x6c, 0x95, 0xb8, 0x6a, + 0xce, 0x00, 0xad, 0xc2, 0xb4, 0x4c, 0xac, 0x96, 0xa9, 0x18, 0xb4, 0xf2, 0x72, 0xaf, 0x3f, 0x3f, + 0x09, 0x6d, 0xc2, 0xa2, 0xa2, 0xb5, 0xd4, 0xae, 0x4c, 0x64, 0xd1, 0x20, 0x66, 0x47, 0xb1, 0x2c, + 0x5a, 0xa3, 0x65, 0x26, 0x57, 0xc7, 0xd6, 0x52, 0xc2, 0x82, 0xc7, 0xab, 0xf7, 0x59, 0xe8, 0x5d, + 0x18, 0xb7, 0x6c, 0xa9, 0x4d, 0xdc, 0x23, 0x7f, 0x3b, 0x70, 0xa3, 0x50, 0xa0, 0xec, 0x4f, 0x4d, + 0xea, 0x6a, 0xad, 0x97, 0x0d, 0xaa, 0x20, 0x38, 0x7a, 0x67, 0x15, 0x4c, 0xca, 0x57, 0xc1, 0x64, + 0x60, 0x52, 0x66, 0xfb, 0x45, 0xce, 0x4c, 0xaf, 0x72, 0x6b, 0x53, 0x82, 0x37, 0xc4, 0x07, 0x30, + 0x37, 0x64, 0x07, 0xa5, 0x60, 0xbc, 0x58, 0xab, 0xbf, 0x57, 0xe4, 0x2f, 0xa1, 0x29, 0x48, 0xee, + 0x94, 0x9b, 0x45, 0x9e, 0x43, 0x13, 0x90, 0xa8, 0x14, 0xf9, 0x04, 0x4a, 0x03, 0x94, 0xca, 0x75, + 0xa1, 0xbc, 0x5b, 0x6c, 0x96, 0x4b, 0x7c, 0x12, 0xcd, 0xc0, 0x54, 0xa9, 0xda, 0x28, 0xee, 0xd4, + 0xca, 0x25, 0x7e, 0x1c, 0x4d, 0xc2, 0x58, 0xb9, 0x58, 0xe7, 0x27, 0xf0, 0xdf, 0x38, 0xc8, 0xfe, + 0xa0, 0x4b, 0xcc, 0x5e, 0xc5, 0x94, 0x34, 0x5b, 0x3a, 0x54, 0x09, 0xf5, 0x72, 0x76, 0x15, 0xde, + 0x01, 0x74, 0xd4, 0x55, 0x55, 0xd1, 0x24, 0x96, 0xde, 0x35, 0x5b, 0x44, 0xf4, 0x45, 0x9c, 0xa7, + 0x1c, 0xc1, 0x65, 0xb0, 0x9a, 0x6c, 0x13, 0x92, 0x27, 0x0a, 0x39, 0x75, 0x0f, 0xe5, 0x4a, 0x68, + 0x44, 0x7e, 0xa8, 0x90, 0x53, 0x81, 0x89, 0x0e, 0x56, 0x2d, 0x63, 0x91, 0x55, 0x4b, 0x72, 0xb8, + 0x6a, 0x39, 0x81, 0xe5, 0x40, 0xe8, 0xee, 0xf6, 0xca, 0xc3, 0xb8, 0x49, 0x09, 0xee, 0x6d, 0xf7, + 0xad, 0x50, 0x38, 0x82, 0x23, 0x17, 0xbb, 0x48, 0xf9, 0x92, 0x03, 0x9e, 0x5e, 0xb4, 0x03, 0x91, + 0xba, 0x02, 0x13, 0x86, 0x64, 0x12, 0xcd, 0x76, 0xa3, 0xe3, 0x8e, 0xbe, 0x4e, 0x59, 0x76, 0x16, + 0xcf, 0x64, 0xfc, 0x78, 0xbe, 0x05, 0x33, 0xd6, 0x4b, 0xfd, 0x54, 0xf4, 0x76, 0xd1, 0x04, 0xdb, + 0x45, 0xd3, 0x94, 0x56, 0x72, 0x77, 0x92, 0x0a, 0xf3, 0x3e, 0xf4, 0xff, 0xeb, 0x60, 0xdd, 0x80, + 0x74, 0x85, 0x30, 0x67, 0x51, 0x19, 0xcf, 0x82, 0x79, 0xe7, 0x42, 0xf0, 0x0b, 0x86, 0x85, 0x74, + 0x09, 0x26, 0x29, 0x86, 0x7e, 0x15, 0x3e, 0x41, 0x87, 0x55, 0x19, 0xdd, 0x85, 0x24, 0xfd, 0x72, + 0xeb, 0xee, 0x88, 0x39, 0x30, 0x31, 0xfc, 0x29, 0x07, 0xf3, 0x07, 0x86, 0x3c, 0xe4, 0x35, 0x28, + 0xad, 0x78, 0x86, 0x13, 0xb1, 0x0c, 0xa3, 0x47, 0x30, 0xdd, 0x65, 0x76, 0xd9, 0x6b, 0xcb, 0x85, + 0x33, 0x7a, 0x43, 0x3e, 0xa1, 0x0f, 0xb2, 0x67, 0x92, 0x75, 0x2c, 0x80, 0x23, 0x4e, 0xbf, 0xf1, + 0x23, 0x98, 0x77, 0x56, 0xea, 0x3c, 0x50, 0x5e, 0xfe, 0x48, 0xf4, 0xf3, 0x07, 0x7e, 0x0c, 0x0b, + 0x07, 0x9a, 0xfc, 0xc6, 0xea, 0x5f, 0x8d, 0x01, 0xf4, 0x73, 0xdc, 0x37, 0x9a, 0x61, 0x1f, 0x40, + 0x46, 0xd7, 0xd4, 0x9e, 0xa8, 0x68, 0xa2, 0x61, 0x12, 0x99, 0x1c, 0x29, 0x34, 0xc3, 0x3b, 0x7b, + 0x2e, 0xc9, 0x36, 0xe9, 0x65, 0xca, 0xaf, 0x6a, 0xf5, 0x33, 0x2e, 0xdb, 0xa1, 0x68, 0xcf, 0xcb, + 0xb3, 0xe3, 0xec, 0x14, 0xdc, 0x0f, 0x0c, 0x7e, 0x1f, 0xb4, 0xef, 0x33, 0x20, 0xe7, 0xda, 0x90, + 0x6d, 0x75, 0x2d, 0x5b, 0xef, 0x38, 0x9e, 0x45, 0xab, 0x6b, 0x18, 0xba, 0x69, 0x8b, 0x2a, 0x39, + 0x21, 0x2a, 0x3b, 0x2c, 0xe9, 0xc2, 0x83, 0xf3, 0x3c, 0xec, 0x32, 0x0b, 0x0c, 0x5d, 0xc3, 0xd1, + 0xaf, 0x51, 0x75, 0x61, 0xa9, 0x15, 0xcc, 0xc0, 0x25, 0xb8, 0x1c, 0x88, 0xea, 0x22, 0x19, 0x7c, + 0x0c, 0xbf, 0x07, 0x4b, 0x21, 0x9e, 0xd1, 0x2c, 0xa4, 0x1a, 0x07, 0xf5, 0xfa, 0x73, 0xa1, 0xc9, + 0x9e, 0x0b, 0xd3, 0x30, 0xd9, 0x2c, 0x37, 0x9a, 0xd5, 0xfd, 0x0a, 0xcf, 0xa1, 0x79, 0x98, 0xdd, + 0x7f, 0xde, 0x14, 0xfb, 0xfc, 0x04, 0x2d, 0xe5, 0xaf, 0xb3, 0xcc, 0xd9, 0xa4, 0x15, 0xda, 0xa1, + 0x4a, 0x7c, 0xf7, 0xda, 0x9b, 0x65, 0xfe, 0xaf, 0xf3, 0xf8, 0xfc, 0x35, 0x07, 0xab, 0xe1, 0x68, + 0xdc, 0xfc, 0x54, 0x84, 0x69, 0xff, 0xbd, 0xec, 0x64, 0xa9, 0xeb, 0xe7, 0xac, 0x94, 0xe0, 0xd7, + 0x89, 0x9b, 0xb1, 0x72, 0x12, 0x64, 0xc3, 0xeb, 0x3b, 0xb4, 0x04, 0x0b, 0xf4, 0x91, 0x56, 0xac, + 0x55, 0x86, 0xde, 0x68, 0x8b, 0xc0, 0x7b, 0x0c, 0xa1, 0x51, 0x14, 0x37, 0x37, 0x0a, 0x5b, 0x3c, + 0x37, 0x4c, 0x2d, 0x6c, 0x6c, 0x3d, 0xe4, 0x13, 0x39, 0x15, 0xae, 0x46, 0x15, 0xa7, 0x54, 0x2b, + 0xe0, 0x15, 0xe8, 0x51, 0xeb, 0x7b, 0xbb, 0x8d, 0xcd, 0x82, 0xf8, 0xa4, 0x5a, 0x2b, 0xf3, 0x1c, + 0x5a, 0x85, 0xab, 0x8c, 0x5a, 0x79, 0xfe, 0xbc, 0x52, 0x2b, 0x8b, 0xbb, 0x42, 0xb9, 0x54, 0xde, + 0x6f, 0x56, 0x8b, 0xb5, 0x86, 0x23, 0x91, 0xc8, 0xfd, 0x14, 0x96, 0x23, 0x5e, 0x56, 0x74, 0xf3, + 0x30, 0x03, 0xfb, 0xcf, 0xf7, 0xcb, 0xfc, 0x25, 0x74, 0x05, 0x10, 0x1b, 0x7e, 0x70, 0x7f, 0xe3, + 0x7b, 0x62, 0xbd, 0xfc, 0xcc, 0xf3, 0xb3, 0x04, 0x0b, 0x8c, 0x2e, 0x14, 0xdf, 0x17, 0xeb, 0x07, + 0x3b, 0xb5, 0xea, 0xae, 0xb8, 0x57, 0x7e, 0xc1, 0x27, 0x72, 0xd7, 0x61, 0xca, 0xbb, 0x84, 0xe8, + 0x86, 0xde, 0x29, 0x36, 0xaa, 0xbb, 0xce, 0x86, 0x7e, 0x72, 0x50, 0xab, 0xf1, 0x5c, 0xe1, 0xf3, + 0x2c, 0x8c, 0x55, 0x8b, 0xcf, 0xd0, 0x1f, 0x39, 0x58, 0x08, 0xe8, 0x32, 0xa0, 0x7c, 0xcc, 0x87, + 0xb4, 0xb7, 0x37, 0xb3, 0x1b, 0xf1, 0x15, 0x9c, 0xed, 0x83, 0xef, 0xfe, 0xf2, 0x9f, 0x5f, 0x7d, + 0x9a, 0x78, 0x1b, 0xdd, 0xcc, 0x9f, 0x6c, 0xe6, 0x3f, 0xa2, 0x5b, 0xf9, 0xb1, 0xdb, 0xa0, 0xb2, + 0xf2, 0xb9, 0x8f, 0xf3, 0xd6, 0x10, 0xa2, 0xcf, 0x39, 0x98, 0x1f, 0x79, 0xeb, 0xa2, 0xbb, 0x81, + 0x6e, 0xc3, 0xfa, 0x15, 0xd9, 0x38, 0x2d, 0x12, 0x9c, 0x67, 0xc0, 0x6e, 0xa3, 0xb7, 0x83, 0x80, + 0x0d, 0xe3, 0xca, 0xe7, 0x3e, 0x46, 0xbf, 0xe7, 0x60, 0x31, 0xe8, 0xed, 0x84, 0x82, 0x83, 0x12, + 0xd1, 0xe4, 0x8a, 0x07, 0x70, 0x83, 0x01, 0xcc, 0xe1, 0x78, 0x91, 0xdb, 0xe6, 0x72, 0xe8, 0x33, + 0x0e, 0x16, 0x9d, 0x6b, 0x75, 0x08, 0x61, 0x1c, 0x7f, 0xf1, 0x40, 0x15, 0x18, 0xa8, 0x3b, 0xd9, + 0xb8, 0x51, 0xa3, 0xb0, 0x7e, 0xc7, 0xc1, 0x62, 0xd0, 0x5b, 0x2c, 0x24, 0x70, 0x11, 0x6d, 0xa5, + 0xec, 0x95, 0x91, 0xab, 0xbc, 0xdc, 0x31, 0xec, 0x9e, 0xb7, 0x98, 0xb9, 0xd8, 0x8b, 0xf9, 0x57, + 0x0e, 0xae, 0x04, 0xb7, 0x6c, 0x50, 0xe1, 0xe2, 0xdd, 0xa5, 0xec, 0xbd, 0x0b, 0xe9, 0xb8, 0x47, + 0x63, 0x8b, 0x81, 0x5e, 0x47, 0x77, 0x62, 0x82, 0xce, 0x1f, 0x53, 0x78, 0x7f, 0xe2, 0x60, 0x31, + 0xa8, 0x1b, 0x14, 0x12, 0xcd, 0x88, 0xc6, 0x51, 0x36, 0x66, 0x1b, 0x0a, 0x7f, 0x97, 0x01, 0xdd, + 0x40, 0xeb, 0xf1, 0x80, 0x32, 0x9c, 0x34, 0xc8, 0x7f, 0xe6, 0x60, 0x29, 0xa4, 0xdb, 0x80, 0xee, + 0xc5, 0x3e, 0x34, 0x6f, 0x00, 0xf8, 0x01, 0x03, 0xbc, 0x89, 0x2f, 0x14, 0x59, 0xba, 0x55, 0xbf, + 0xe0, 0x60, 0x29, 0xa4, 0x6d, 0x10, 0x82, 0x38, 0xba, 0xc9, 0x10, 0xba, 0x61, 0xdd, 0x90, 0xe6, + 0x2e, 0x1a, 0xd2, 0xcf, 0x38, 0x98, 0xf2, 0xda, 0x0a, 0xe8, 0x46, 0x70, 0x38, 0x06, 0x1b, 0x18, + 0xd9, 0x9b, 0xe7, 0x48, 0xb9, 0xbb, 0xf1, 0x11, 0x43, 0x74, 0x1f, 0x6f, 0xc4, 0x3d, 0xd9, 0x96, + 0x6b, 0x81, 0xc6, 0xed, 0xb7, 0x1c, 0x4c, 0xba, 0x4d, 0x86, 0xb0, 0x64, 0x33, 0xd0, 0xc2, 0xc8, + 0xde, 0x88, 0x16, 0x72, 0x31, 0x6d, 0x33, 0x4c, 0x5b, 0x38, 0x7f, 0x11, 0x4c, 0x4f, 0x4f, 0x6d, + 0x0a, 0xe9, 0x13, 0x0e, 0x66, 0x2a, 0xc4, 0xae, 0x4a, 0x9d, 0x3a, 0xfb, 0xe5, 0x06, 0x61, 0xbf, + 0x4b, 0xe7, 0x64, 0x9c, 0x31, 0x3d, 0x58, 0x97, 0x87, 0x64, 0x1c, 0x2e, 0xfe, 0x3e, 0xc3, 0xb1, + 0x8d, 0x1f, 0x32, 0x1c, 0x5e, 0x61, 0x76, 0x0e, 0x96, 0xb6, 0xdf, 0xf9, 0x6f, 0x38, 0x98, 0x69, + 0x44, 0xa1, 0x69, 0xc4, 0x47, 0xb3, 0xcb, 0xd0, 0x3c, 0xbe, 0x18, 0x1a, 0xcb, 0x67, 0x9f, 0x86, + 0xe7, 0x2f, 0x1c, 0x20, 0x5a, 0xf6, 0x51, 0xa2, 0xaf, 0x54, 0x5b, 0x1b, 0x72, 0x39, 0x2a, 0xe2, + 0x81, 0xbb, 0x1d, 0x43, 0xd2, 0x5d, 0xc6, 0x2a, 0x03, 0xbc, 0x8b, 0xdf, 0xb9, 0x08, 0x60, 0x7b, + 0xc4, 0x1e, 0x85, 0xfd, 0x07, 0x0e, 0x16, 0x02, 0x5a, 0x0f, 0x21, 0x95, 0x4c, 0x78, 0x7f, 0x25, + 0xa4, 0x92, 0x89, 0xe8, 0x6a, 0xe0, 0x35, 0x36, 0x0b, 0x8c, 0x57, 0xe8, 0x2c, 0xd8, 0x23, 0x66, + 0xfb, 0xd5, 0xa8, 0x38, 0x05, 0xd9, 0x81, 0xd4, 0xd9, 0x3b, 0x1f, 0xdd, 0x0c, 0xbd, 0x1a, 0x06, + 0xf0, 0xdc, 0x3a, 0x4f, 0xcc, 0x45, 0x31, 0xcf, 0x50, 0x4c, 0xa3, 0xd4, 0x19, 0x0a, 0x44, 0x60, + 0xd2, 0x7d, 0xe8, 0x87, 0x9c, 0xbd, 0xc1, 0x36, 0x40, 0x36, 0xfc, 0x15, 0x8d, 0xb3, 0xcc, 0xfa, + 0x22, 0x42, 0xfd, 0x03, 0xc7, 0x7c, 0xd0, 0xd4, 0xf3, 0x73, 0x80, 0x7e, 0xa7, 0x00, 0xdd, 0x8a, + 0xc8, 0xdf, 0x31, 0x9d, 0xb9, 0xa5, 0x21, 0xc6, 0xcc, 0x99, 0xd3, 0x62, 0x78, 0xac, 0x9b, 0x6d, + 0x49, 0x53, 0x5e, 0x3b, 0xbf, 0xd4, 0xd2, 0xd4, 0x6c, 0x7a, 0x51, 0xfd, 0x05, 0x07, 0xd0, 0x6f, + 0x1a, 0x84, 0x00, 0x18, 0xe9, 0x2a, 0x44, 0x01, 0x70, 0x2b, 0xac, 0x02, 0xee, 0xcf, 0x76, 0xc8, + 0x7d, 0xde, 0x9b, 0xfd, 0xb6, 0xd3, 0x5f, 0xf8, 0x08, 0xa0, 0xdf, 0x22, 0x08, 0x81, 0x30, 0xd2, + 0x43, 0x88, 0x82, 0x90, 0x63, 0x10, 0x6e, 0xe4, 0x62, 0x40, 0x60, 0x19, 0xcd, 0xdf, 0x63, 0x18, + 0x3c, 0xac, 0xfd, 0x10, 0x8c, 0xb6, 0x21, 0xa2, 0x10, 0xb8, 0x37, 0x11, 0xfe, 0x4e, 0x8c, 0x20, + 0x74, 0x5d, 0xd3, 0x74, 0x39, 0xbe, 0xe4, 0x20, 0x13, 0xf6, 0x78, 0x44, 0x5b, 0xe1, 0xa7, 0x2b, + 0xfc, 0xe5, 0x9b, 0xbd, 0x7f, 0x41, 0x2d, 0xf7, 0x48, 0xdc, 0x63, 0x33, 0xb8, 0x8b, 0xd7, 0xd8, + 0xcf, 0xf4, 0xbe, 0x7c, 0xf1, 0x2a, 0x44, 0x73, 0x9b, 0xcb, 0xed, 0x1c, 0xc2, 0x52, 0x4b, 0xef, + 0x04, 0x39, 0xdc, 0x99, 0xa2, 0x69, 0x87, 0x5e, 0xd7, 0x75, 0xee, 0x47, 0x0f, 0x5d, 0x81, 0xb6, + 0xae, 0x4a, 0x5a, 0x7b, 0x5d, 0x37, 0xdb, 0xf9, 0x36, 0xd1, 0xd8, 0x65, 0x9e, 0x77, 0x58, 0x92, + 0xa1, 0x58, 0x03, 0xff, 0x95, 0xf0, 0x88, 0x7d, 0xfc, 0x87, 0xe3, 0x0e, 0x27, 0x98, 0xdc, 0xbd, + 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x75, 0xcc, 0x0e, 0xa5, 0xbc, 0x20, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/iam/v1/iam_policy.pb.go b/vendor/google.golang.org/genproto/googleapis/iam/v1/iam_policy.pb.go index 55f84e3..913c716 100644 --- a/vendor/google.golang.org/genproto/googleapis/iam/v1/iam_policy.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/iam/v1/iam_policy.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/iam/v1/iam_policy.proto -// DO NOT EDIT! /* Package iam is a generated protocol buffer package. @@ -309,30 +308,31 @@ var _IAMPolicy_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("google/iam/v1/iam_policy.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 396 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x53, 0xcf, 0x4a, 0xe3, 0x40, - 0x18, 0x67, 0x52, 0x28, 0xdb, 0xe9, 0xee, 0xc2, 0xa6, 0x2c, 0xd4, 0x20, 0x25, 0x8c, 0x1e, 0xd2, - 0x80, 0x13, 0x53, 0x6f, 0x15, 0x05, 0xeb, 0x21, 0xf4, 0x20, 0x94, 0x2a, 0x82, 0x5e, 0x74, 0xac, - 0x43, 0x18, 0x48, 0x32, 0x31, 0x33, 0x2d, 0x88, 0x78, 0xf1, 0x15, 0xf4, 0xe4, 0x23, 0xf8, 0x3a, - 0xbe, 0x82, 0x0f, 0xe1, 0x51, 0x92, 0x89, 0x35, 0x6d, 0xaa, 0x54, 0xf0, 0x54, 0x3a, 0xf3, 0xfb, - 0xf7, 0xfd, 0xbe, 0x0c, 0x6c, 0xf9, 0x9c, 0xfb, 0x01, 0x75, 0x18, 0x09, 0x9d, 0x89, 0x9b, 0xfe, - 0x9c, 0xc5, 0x3c, 0x60, 0xa3, 0x6b, 0x1c, 0x27, 0x5c, 0x72, 0xfd, 0x8f, 0xba, 0xc7, 0x8c, 0x84, - 0x78, 0xe2, 0x1a, 0xab, 0x39, 0x9c, 0xc4, 0xcc, 0x21, 0x51, 0xc4, 0x25, 0x91, 0x8c, 0x47, 0x42, - 0x81, 0x0d, 0x63, 0x56, 0xac, 0x28, 0x84, 0xce, 0x61, 0xe3, 0x90, 0xca, 0x3e, 0x09, 0x07, 0xd9, - 0xe9, 0x90, 0x5e, 0x8d, 0xa9, 0x90, 0xba, 0x01, 0x7f, 0x25, 0x54, 0xf0, 0x71, 0x32, 0xa2, 0x4d, - 0x60, 0x02, 0xab, 0x36, 0x9c, 0xfe, 0xd7, 0x37, 0x60, 0x55, 0x49, 0x34, 0x35, 0x13, 0x58, 0xf5, - 0xce, 0x7f, 0x3c, 0x13, 0x06, 0xe7, 0x4a, 0x39, 0x08, 0xb9, 0xb0, 0xe1, 0x7d, 0xcf, 0x01, 0x9d, - 0xc0, 0x95, 0x23, 0x2a, 0x32, 0x0e, 0x4d, 0x42, 0x26, 0x44, 0x3a, 0xcc, 0x32, 0xd1, 0x4c, 0x58, - 0x8f, 0x3f, 0x18, 0x4d, 0xcd, 0xac, 0x58, 0xb5, 0x61, 0xf1, 0x08, 0xed, 0x42, 0x63, 0x91, 0xb4, - 0x88, 0x79, 0x24, 0x4a, 0x7c, 0x50, 0xe2, 0x77, 0x1e, 0x2a, 0xb0, 0xd6, 0xdf, 0x3b, 0x50, 0xb3, - 0xe8, 0x12, 0xfe, 0x2e, 0xb6, 0xa7, 0xa3, 0xb9, 0x2a, 0x16, 0x54, 0x6b, 0x2c, 0xae, 0x0b, 0xb5, - 0xef, 0x9e, 0x5f, 0xee, 0xb5, 0x35, 0xd4, 0x4a, 0x57, 0x74, 0xf3, 0x3e, 0xd1, 0x8e, 0x6d, 0xdf, - 0x76, 0x45, 0x41, 0xa5, 0x0b, 0xec, 0xd4, 0xd5, 0xfb, 0xca, 0xd5, 0xfb, 0x11, 0x57, 0x7f, 0xce, - 0xf5, 0x11, 0x40, 0xbd, 0x5c, 0x9d, 0x6e, 0xcd, 0x09, 0x7f, 0xba, 0x38, 0xa3, 0xbd, 0x04, 0x52, - 0xed, 0x01, 0x39, 0x59, 0xac, 0x36, 0x5a, 0x2f, 0xc7, 0x92, 0x25, 0x56, 0x17, 0xd8, 0xbd, 0x18, - 0xfe, 0x1b, 0xf1, 0x70, 0xd6, 0xa0, 0xf7, 0x77, 0x9a, 0x7f, 0x90, 0x7e, 0xeb, 0x03, 0x70, 0xba, - 0x99, 0x03, 0x7c, 0x1e, 0x90, 0xc8, 0xc7, 0x3c, 0xf1, 0x1d, 0x9f, 0x46, 0xd9, 0x4b, 0x70, 0xd4, - 0x15, 0x89, 0x99, 0xc8, 0x1f, 0xca, 0x36, 0x23, 0xe1, 0x2b, 0x00, 0x4f, 0x5a, 0xc3, 0x53, 0xac, - 0xfd, 0x80, 0x8f, 0x2f, 0x71, 0x9f, 0x84, 0xf8, 0xd8, 0xbd, 0xa8, 0x66, 0xac, 0xad, 0xb7, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x6c, 0x3a, 0x2b, 0x4d, 0xaa, 0x03, 0x00, 0x00, + // 411 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4b, 0xcf, 0xcf, 0x4f, + 0xcf, 0x49, 0xd5, 0xcf, 0x4c, 0xcc, 0xd5, 0x2f, 0x33, 0x04, 0x51, 0xf1, 0x05, 0xf9, 0x39, 0x99, + 0xc9, 0x95, 0x7a, 0x05, 0x45, 0xf9, 0x25, 0xf9, 0x42, 0xbc, 0x10, 0x79, 0xbd, 0xcc, 0xc4, 0x5c, + 0xbd, 0x32, 0x43, 0x29, 0x19, 0xa8, 0xf2, 0xc4, 0x82, 0x4c, 0xfd, 0xc4, 0xbc, 0xbc, 0xfc, 0x92, + 0xc4, 0x92, 0xcc, 0xfc, 0xbc, 0x62, 0x88, 0x62, 0x29, 0x29, 0x54, 0xc3, 0x90, 0x0d, 0x52, 0x4a, + 0xe0, 0x12, 0x0e, 0x4e, 0x2d, 0xf1, 0x4c, 0xcc, 0x0d, 0x00, 0x8b, 0x06, 0xa5, 0x16, 0x96, 0xa6, + 0x16, 0x97, 0x08, 0x49, 0x71, 0x71, 0x14, 0xa5, 0x16, 0xe7, 0x97, 0x16, 0x25, 0xa7, 0x4a, 0x30, + 0x2a, 0x30, 0x6a, 0x70, 0x06, 0xc1, 0xf9, 0x42, 0xba, 0x5c, 0x6c, 0x10, 0x23, 0x24, 0x98, 0x14, + 0x18, 0x35, 0xb8, 0x8d, 0x44, 0xf5, 0x50, 0x1c, 0xa3, 0x07, 0x35, 0x09, 0xaa, 0x48, 0xc9, 0x90, + 0x4b, 0xd8, 0x9d, 0x34, 0x1b, 0x94, 0x22, 0xb9, 0x24, 0x43, 0x52, 0x8b, 0xc1, 0x7a, 0x52, 0x8b, + 0x72, 0x33, 0x8b, 0x8b, 0x41, 0x9e, 0x21, 0xc6, 0x69, 0x0a, 0x5c, 0xdc, 0x05, 0x08, 0x1d, 0x12, + 0x4c, 0x0a, 0xcc, 0x1a, 0x9c, 0x41, 0xc8, 0x42, 0x4a, 0x76, 0x5c, 0x52, 0xd8, 0x8c, 0x2e, 0x2e, + 0xc8, 0xcf, 0x2b, 0xc6, 0xd0, 0xcf, 0x88, 0xa1, 0xdf, 0x68, 0x0a, 0x33, 0x17, 0xa7, 0xa7, 0xa3, + 0x2f, 0xc4, 0x2f, 0x42, 0x25, 0x5c, 0x3c, 0xc8, 0xa1, 0x27, 0xa4, 0x84, 0x16, 0x14, 0x58, 0x82, + 0x56, 0x0a, 0x7b, 0x70, 0x29, 0x69, 0x36, 0x5d, 0x7e, 0x32, 0x99, 0x49, 0x59, 0x49, 0x0e, 0x14, + 0x45, 0xd5, 0x30, 0x1f, 0xd9, 0x6a, 0x69, 0xd5, 0x5a, 0x15, 0x23, 0x99, 0x62, 0xc5, 0xa8, 0x05, + 0xb2, 0xd5, 0x1d, 0x9f, 0xad, 0xee, 0x54, 0xb1, 0x35, 0x1d, 0xcd, 0xd6, 0x59, 0x8c, 0x5c, 0x42, + 0x98, 0x41, 0x27, 0xa4, 0x81, 0x66, 0x30, 0xce, 0x88, 0x93, 0xd2, 0x24, 0x42, 0x25, 0x24, 0x1e, + 0x94, 0xf4, 0xc1, 0xce, 0xd2, 0x54, 0x52, 0xc1, 0x74, 0x56, 0x09, 0x86, 0x2e, 0x2b, 0x46, 0x2d, + 0xa7, 0x36, 0x46, 0x2e, 0xc1, 0xe4, 0xfc, 0x5c, 0x54, 0x1b, 0x9c, 0xf8, 0xe0, 0x1e, 0x08, 0x00, + 0x25, 0xf6, 0x00, 0xc6, 0x28, 0x03, 0xa8, 0x82, 0xf4, 0xfc, 0x9c, 0xc4, 0xbc, 0x74, 0xbd, 0xfc, + 0xa2, 0x74, 0xfd, 0xf4, 0xd4, 0x3c, 0x70, 0x56, 0xd0, 0x87, 0x48, 0x25, 0x16, 0x64, 0x16, 0x43, + 0x73, 0x8a, 0x75, 0x66, 0x62, 0xee, 0x0f, 0x46, 0xc6, 0x55, 0x4c, 0xc2, 0xee, 0x10, 0x5d, 0xce, + 0x39, 0xf9, 0xa5, 0x29, 0x7a, 0x9e, 0x89, 0xb9, 0x7a, 0x61, 0x86, 0xa7, 0x60, 0xa2, 0x31, 0x60, + 0xd1, 0x18, 0xcf, 0xc4, 0xdc, 0x98, 0x30, 0xc3, 0x24, 0x36, 0xb0, 0x59, 0xc6, 0x80, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xea, 0x62, 0x8f, 0x22, 0xc1, 0x03, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/iam/v1/logging/audit_data.pb.go b/vendor/google.golang.org/genproto/googleapis/iam/v1/logging/audit_data.pb.go new file mode 100644 index 0000000..b22765a --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/iam/v1/logging/audit_data.pb.go @@ -0,0 +1,75 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/iam/v1/logging/audit_data.proto + +/* +Package logging is a generated protocol buffer package. + +It is generated from these files: + google/iam/v1/logging/audit_data.proto + +It has these top-level messages: + AuditData +*/ +package logging + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_iam_v1 "google.golang.org/genproto/googleapis/iam/v1" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Audit log information specific to Cloud IAM. This message is serialized +// as an `Any` type in the `ServiceData` message of an +// `AuditLog` message. +type AuditData struct { + // Policy delta between the original policy and the newly set policy. + PolicyDelta *google_iam_v1.PolicyDelta `protobuf:"bytes,2,opt,name=policy_delta,json=policyDelta" json:"policy_delta,omitempty"` +} + +func (m *AuditData) Reset() { *m = AuditData{} } +func (m *AuditData) String() string { return proto.CompactTextString(m) } +func (*AuditData) ProtoMessage() {} +func (*AuditData) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *AuditData) GetPolicyDelta() *google_iam_v1.PolicyDelta { + if m != nil { + return m.PolicyDelta + } + return nil +} + +func init() { + proto.RegisterType((*AuditData)(nil), "google.iam.v1.logging.AuditData") +} + +func init() { proto.RegisterFile("google/iam/v1/logging/audit_data.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 236 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x90, 0xb1, 0x4a, 0x04, 0x31, + 0x10, 0x86, 0xd9, 0x2b, 0x04, 0x73, 0x62, 0x71, 0x20, 0x68, 0xb4, 0x10, 0x0b, 0xb1, 0x9a, 0xb0, + 0x5a, 0xaa, 0x85, 0xe7, 0x81, 0x28, 0x16, 0x8b, 0x85, 0x85, 0xcd, 0x31, 0x5e, 0x96, 0x61, 0x20, + 0xc9, 0x84, 0xbb, 0xdc, 0x82, 0x8f, 0xe0, 0xab, 0xf8, 0x94, 0xb2, 0x9b, 0xa0, 0xac, 0x58, 0x85, + 0xf0, 0x7f, 0xff, 0x7c, 0xc3, 0xa8, 0x73, 0x12, 0x21, 0xd7, 0x1a, 0x46, 0x6f, 0xba, 0xda, 0x38, + 0x21, 0xe2, 0x40, 0x06, 0xb7, 0x96, 0xd3, 0xd2, 0x62, 0x42, 0x88, 0x6b, 0x49, 0x32, 0x3b, 0xc8, + 0x1c, 0x30, 0x7a, 0xe8, 0x6a, 0x28, 0x9c, 0x3e, 0x29, 0x75, 0x8c, 0x6c, 0x30, 0x04, 0x49, 0x98, + 0x58, 0xc2, 0x26, 0x97, 0xb4, 0x1e, 0x0f, 0x8f, 0xe2, 0x78, 0xf5, 0x91, 0xb3, 0xb3, 0x27, 0xb5, + 0x7b, 0xd7, 0x4b, 0x16, 0x98, 0x70, 0x76, 0xab, 0xf6, 0x72, 0xb8, 0xb4, 0xad, 0x4b, 0x78, 0x38, + 0x39, 0xad, 0x2e, 0xa6, 0x97, 0x1a, 0xc6, 0xd2, 0x66, 0x40, 0x16, 0x3d, 0xf1, 0x32, 0x8d, 0xbf, + 0x9f, 0xf9, 0x67, 0xa5, 0x8e, 0x56, 0xe2, 0xe1, 0xdf, 0x1d, 0xe7, 0xfb, 0x3f, 0x9e, 0xa6, 0x37, + 0x37, 0xd5, 0xdb, 0x4d, 0x01, 0x49, 0x1c, 0x06, 0x02, 0x59, 0x93, 0xa1, 0x36, 0x0c, 0x7b, 0x99, + 0x1c, 0x61, 0xe4, 0xcd, 0x9f, 0x9b, 0x5c, 0x97, 0xf7, 0x6b, 0x72, 0xfc, 0x90, 0xeb, 0xf7, 0x4e, + 0xb6, 0x16, 0x1e, 0xd1, 0xc3, 0x6b, 0x0d, 0xcf, 0x39, 0x7d, 0xdf, 0x19, 0xc6, 0x5c, 0x7d, 0x07, + 0x00, 0x00, 0xff, 0xff, 0x29, 0xf1, 0xcb, 0x3a, 0x59, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/iam/v1/policy.pb.go b/vendor/google.golang.org/genproto/googleapis/iam/v1/policy.pb.go index 36f3b53..dde2c40 100644 --- a/vendor/google.golang.org/genproto/googleapis/iam/v1/policy.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/iam/v1/policy.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/iam/v1/policy.proto -// DO NOT EDIT! package iam @@ -241,30 +240,31 @@ func init() { func init() { proto.RegisterFile("google/iam/v1/policy.proto", fileDescriptor1) } var fileDescriptor1 = []byte{ - // 387 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0x4d, 0x8f, 0xd3, 0x30, - 0x10, 0xc5, 0xed, 0x92, 0xd2, 0xd9, 0x0f, 0x15, 0x23, 0x55, 0xd1, 0xc2, 0xa1, 0xca, 0x29, 0x27, - 0x87, 0x16, 0x21, 0x24, 0x38, 0x35, 0x4d, 0x40, 0x39, 0xb0, 0x1b, 0x0c, 0xec, 0x81, 0xcb, 0xca, - 0x69, 0x2d, 0xcb, 0x28, 0xb6, 0xa3, 0x24, 0x54, 0xe2, 0x2f, 0x21, 0xf1, 0xff, 0x38, 0xa2, 0xd8, - 0xee, 0xaa, 0x95, 0x10, 0xb7, 0x79, 0x79, 0xef, 0x65, 0xde, 0xcc, 0x18, 0xae, 0x85, 0x31, 0xa2, - 0xe6, 0x89, 0x64, 0x2a, 0xd9, 0x2f, 0x93, 0xc6, 0xd4, 0x72, 0xfb, 0x93, 0x34, 0xad, 0xe9, 0x0d, - 0xbe, 0x74, 0x1c, 0x91, 0x4c, 0x91, 0xfd, 0xf2, 0xfa, 0x85, 0x97, 0xb2, 0x46, 0x26, 0x4c, 0x6b, - 0xd3, 0xb3, 0x5e, 0x1a, 0xdd, 0x39, 0x71, 0xf4, 0x1d, 0x82, 0xd2, 0x9a, 0x71, 0x08, 0x93, 0x3d, - 0x6f, 0x3b, 0x69, 0x74, 0x88, 0x16, 0x28, 0x7e, 0x4c, 0x0f, 0x10, 0xaf, 0xe0, 0x49, 0x25, 0xf5, - 0x4e, 0x6a, 0xd1, 0x85, 0x67, 0x8b, 0x71, 0x7c, 0xbe, 0x9a, 0x93, 0x93, 0x1e, 0x24, 0x75, 0x34, - 0x7d, 0xd0, 0x61, 0x0c, 0x67, 0xbc, 0x67, 0x22, 0x1c, 0x2f, 0x50, 0x7c, 0x41, 0x6d, 0x1d, 0xbd, - 0x81, 0x89, 0x17, 0x0e, 0x74, 0x6b, 0x6a, 0x6e, 0x3b, 0x4d, 0xa9, 0xad, 0x87, 0x00, 0x8a, 0xab, - 0x8a, 0xb7, 0x5d, 0x38, 0x5a, 0x8c, 0xe3, 0x29, 0x3d, 0xc0, 0xe8, 0x13, 0x9c, 0xbb, 0x90, 0x19, - 0xaf, 0x7b, 0x86, 0x53, 0xb8, 0xf2, 0x7d, 0xee, 0x77, 0xc3, 0x87, 0x2e, 0x44, 0x36, 0xd5, 0xf3, - 0x7f, 0xa7, 0xb2, 0x26, 0x7a, 0x59, 0x1d, 0xa1, 0x2e, 0xfa, 0x8d, 0xe0, 0xe2, 0x98, 0xc7, 0x6f, - 0x21, 0x60, 0xdb, 0xfe, 0x30, 0xfd, 0xd5, 0x2a, 0xfa, 0xcf, 0xcf, 0xc8, 0xda, 0x2a, 0xa9, 0x77, - 0x3c, 0x4c, 0x33, 0x3a, 0x9a, 0x66, 0x0e, 0x81, 0x8b, 0x6f, 0x57, 0x30, 0xa5, 0x1e, 0x45, 0xaf, - 0x21, 0x70, 0x6e, 0x3c, 0x07, 0xbc, 0xde, 0x7c, 0x29, 0x6e, 0x6f, 0xee, 0xbf, 0xde, 0x7c, 0x2e, - 0xf3, 0x4d, 0xf1, 0xbe, 0xc8, 0xb3, 0xd9, 0x23, 0x3c, 0x81, 0xf1, 0x3a, 0xcb, 0x66, 0x08, 0x03, - 0x04, 0x34, 0xff, 0x78, 0x7b, 0x97, 0xcf, 0x46, 0xa9, 0x82, 0xa7, 0x5b, 0xa3, 0x4e, 0x33, 0xa5, - 0x7e, 0x2b, 0xe5, 0x70, 0xc9, 0x12, 0x7d, 0x7b, 0xe9, 0x59, 0x61, 0x6a, 0xa6, 0x05, 0x31, 0xad, - 0x48, 0x04, 0xd7, 0xf6, 0xce, 0x89, 0xa3, 0x58, 0x23, 0x3b, 0xff, 0x66, 0xde, 0x49, 0xa6, 0xfe, - 0x20, 0xf4, 0x6b, 0xf4, 0xec, 0x83, 0x73, 0x6d, 0x6a, 0xf3, 0x63, 0x47, 0x0a, 0xa6, 0xc8, 0xdd, - 0xb2, 0x0a, 0xac, 0xeb, 0xd5, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x8c, 0x4a, 0x85, 0x10, 0x68, + // 403 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0x4d, 0xab, 0x13, 0x31, + 0x14, 0x35, 0xed, 0x73, 0x6a, 0xef, 0xfb, 0xa0, 0x46, 0x28, 0xc3, 0xd3, 0x45, 0x99, 0x55, 0x57, + 0x19, 0x5b, 0x11, 0x41, 0x57, 0xfd, 0x18, 0x65, 0x16, 0xbe, 0x37, 0x46, 0xed, 0x42, 0x0a, 0x8f, + 0x4c, 0x1b, 0x42, 0x64, 0x92, 0x0c, 0x33, 0x63, 0xc1, 0xb5, 0xff, 0x46, 0xf0, 0x8f, 0xf8, 0x8b, + 0x5c, 0xca, 0x24, 0x99, 0x47, 0x0b, 0xe2, 0x2e, 0xe7, 0x9e, 0x73, 0x72, 0xcf, 0xcd, 0x0d, 0x5c, + 0x0b, 0x63, 0x44, 0xc1, 0x63, 0xc9, 0x54, 0x7c, 0x98, 0xc5, 0xa5, 0x29, 0xe4, 0xee, 0x3b, 0x29, + 0x2b, 0xd3, 0x18, 0x7c, 0xe9, 0x38, 0x22, 0x99, 0x22, 0x87, 0xd9, 0xf5, 0x33, 0x2f, 0x65, 0xa5, + 0x8c, 0x99, 0xd6, 0xa6, 0x61, 0x8d, 0x34, 0xba, 0x76, 0xe2, 0xe8, 0x2b, 0x04, 0x99, 0x35, 0xe3, + 0x10, 0x06, 0x07, 0x5e, 0xd5, 0xd2, 0xe8, 0x10, 0x4d, 0xd0, 0xf4, 0x21, 0xed, 0x20, 0x9e, 0xc3, + 0xa3, 0x5c, 0xea, 0xbd, 0xd4, 0xa2, 0x0e, 0xcf, 0x26, 0xfd, 0xe9, 0xf9, 0x7c, 0x4c, 0x4e, 0x7a, + 0x90, 0xa5, 0xa3, 0xe9, 0xbd, 0x0e, 0x63, 0x38, 0xe3, 0x0d, 0x13, 0x61, 0x7f, 0x82, 0xa6, 0x17, + 0xd4, 0x9e, 0xa3, 0x57, 0x30, 0xf0, 0xc2, 0x96, 0xae, 0x4c, 0xc1, 0x6d, 0xa7, 0x21, 0xb5, 0xe7, + 0x36, 0x80, 0xe2, 0x2a, 0xe7, 0x55, 0x1d, 0xf6, 0x26, 0xfd, 0xe9, 0x90, 0x76, 0x30, 0xfa, 0x00, + 0xe7, 0x2e, 0xe4, 0x9a, 0x17, 0x0d, 0xc3, 0x4b, 0xb8, 0xf2, 0x7d, 0xee, 0xf6, 0x6d, 0xa1, 0x0e, + 0x91, 0x4d, 0xf5, 0xf4, 0xdf, 0xa9, 0xac, 0x89, 0x5e, 0xe6, 0x47, 0xa8, 0x8e, 0x7e, 0x21, 0xb8, + 0x38, 0xe6, 0xf1, 0x6b, 0x08, 0xd8, 0xae, 0xe9, 0xa6, 0xbf, 0x9a, 0x47, 0xff, 0xb9, 0x8c, 0x2c, + 0xac, 0x92, 0x7a, 0xc7, 0xfd, 0x34, 0xbd, 0xa3, 0x69, 0xc6, 0x10, 0xb8, 0xf8, 0xf6, 0x09, 0x86, + 0xd4, 0xa3, 0xe8, 0x25, 0x04, 0xce, 0x8d, 0xc7, 0x80, 0x17, 0xab, 0x4f, 0xe9, 0xed, 0xcd, 0xdd, + 0xe7, 0x9b, 0x8f, 0x59, 0xb2, 0x4a, 0xdf, 0xa6, 0xc9, 0x7a, 0xf4, 0x00, 0x0f, 0xa0, 0xbf, 0x58, + 0xaf, 0x47, 0x08, 0x03, 0x04, 0x34, 0x79, 0x7f, 0xbb, 0x49, 0x46, 0xbd, 0xe5, 0x0f, 0x04, 0x8f, + 0x77, 0x46, 0x9d, 0x86, 0x5a, 0xfa, 0x67, 0xc9, 0xda, 0x55, 0x66, 0xe8, 0xcb, 0x73, 0xcf, 0x0a, + 0x53, 0x30, 0x2d, 0x88, 0xa9, 0x44, 0x2c, 0xb8, 0xb6, 0x8b, 0x8e, 0x1d, 0xc5, 0x4a, 0x59, 0xfb, + 0x4f, 0xf3, 0x46, 0x32, 0xf5, 0x07, 0xa1, 0x9f, 0xbd, 0x27, 0xef, 0x9c, 0x6b, 0x55, 0x98, 0x6f, + 0x7b, 0x92, 0x32, 0x45, 0x36, 0xb3, 0xdf, 0x5d, 0x75, 0x6b, 0xab, 0xdb, 0x94, 0xa9, 0xed, 0x66, + 0x96, 0x07, 0xf6, 0xae, 0x17, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x18, 0xca, 0xaa, 0x7f, 0x02, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/logging/type/http_request.pb.go b/vendor/google.golang.org/genproto/googleapis/logging/type/http_request.pb.go index f0aa78d..ad4f289 100644 --- a/vendor/google.golang.org/genproto/googleapis/logging/type/http_request.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/logging/type/http_request.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/logging/type/http_request.proto -// DO NOT EDIT! /* Package ltype is a generated protocol buffer package. @@ -77,6 +76,8 @@ type HttpRequest struct { // The number of HTTP response bytes inserted into cache. Set only when a // cache fill was attempted. CacheFillBytes int64 `protobuf:"varint,12,opt,name=cache_fill_bytes,json=cacheFillBytes" json:"cache_fill_bytes,omitempty"` + // Protocol used for the request. Examples: "HTTP/1.1", "HTTP/2", "websocket" + Protocol string `protobuf:"bytes,15,opt,name=protocol" json:"protocol,omitempty"` } func (m *HttpRequest) Reset() { *m = HttpRequest{} } @@ -182,6 +183,13 @@ func (m *HttpRequest) GetCacheFillBytes() int64 { return 0 } +func (m *HttpRequest) GetProtocol() string { + if m != nil { + return m.Protocol + } + return "" +} + func init() { proto.RegisterType((*HttpRequest)(nil), "google.logging.type.HttpRequest") } @@ -189,36 +197,37 @@ func init() { func init() { proto.RegisterFile("google/logging/type/http_request.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 488 bytes of a gzipped FileDescriptorProto + // 511 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x92, 0x5b, 0x6b, 0x14, 0x31, - 0x14, 0xc7, 0x99, 0x5e, 0xf6, 0x92, 0xbd, 0x50, 0x22, 0x68, 0x5a, 0xb5, 0xae, 0x15, 0x65, 0x9e, - 0x66, 0xc0, 0xbe, 0x08, 0x3e, 0xb9, 0x8a, 0xb6, 0x52, 0xb1, 0x4c, 0xbd, 0x80, 0x2f, 0x43, 0x76, - 0xf7, 0x6c, 0x26, 0x98, 0x9d, 0xc4, 0x24, 0x53, 0xd9, 0xbe, 0xfa, 0x11, 0xfc, 0x16, 0x7e, 0x4a, - 0x99, 0x93, 0x0c, 0x28, 0xf4, 0x65, 0x21, 0xbf, 0xff, 0xef, 0x3f, 0x67, 0xf6, 0x4c, 0xc8, 0x33, - 0xa1, 0xb5, 0x50, 0x90, 0x2b, 0x2d, 0x84, 0xac, 0x45, 0xee, 0xb7, 0x06, 0xf2, 0xca, 0x7b, 0x53, - 0x5a, 0xf8, 0xd1, 0x80, 0xf3, 0x99, 0xb1, 0xda, 0x6b, 0x7a, 0x27, 0x78, 0x59, 0xf4, 0xb2, 0xd6, - 0x3b, 0x7a, 0x10, 0xcb, 0xdc, 0xc8, 0x9c, 0xd7, 0xb5, 0xf6, 0xdc, 0x4b, 0x5d, 0xbb, 0x50, 0x39, - 0x3a, 0x8e, 0x29, 0x9e, 0x16, 0xcd, 0x3a, 0x5f, 0x35, 0x16, 0x85, 0x90, 0x9f, 0xfc, 0xde, 0x23, - 0xa3, 0x33, 0xef, 0x4d, 0x11, 0x06, 0xd1, 0xa7, 0x64, 0x1a, 0x67, 0x96, 0x1b, 0xf0, 0x95, 0x5e, - 0xb1, 0x64, 0x96, 0xa4, 0xc3, 0x62, 0x12, 0xe9, 0x07, 0x84, 0xf4, 0x11, 0x19, 0x75, 0x5a, 0x63, - 0x15, 0xdb, 0x41, 0x87, 0x44, 0xf4, 0xd9, 0x2a, 0xfa, 0x98, 0x8c, 0x3b, 0xc1, 0xc9, 0x1b, 0x60, - 0xbb, 0xb3, 0x24, 0xdd, 0x2d, 0xba, 0xd2, 0x95, 0xbc, 0x01, 0x7a, 0x97, 0xf4, 0x9c, 0xe7, 0xbe, - 0x71, 0x6c, 0x6f, 0x96, 0xa4, 0xfb, 0x45, 0x3c, 0xd1, 0x27, 0x64, 0x62, 0xc1, 0x19, 0x5d, 0x3b, - 0x08, 0xdd, 0x7d, 0xec, 0x8e, 0x3b, 0x88, 0xe5, 0x87, 0x84, 0x34, 0x0e, 0x6c, 0xc9, 0x05, 0xd4, - 0x9e, 0xf5, 0x70, 0xfe, 0xb0, 0x25, 0xaf, 0x5a, 0x40, 0xef, 0x93, 0xa1, 0x85, 0x8d, 0xf6, 0x50, - 0x4a, 0xc3, 0xfa, 0x98, 0x0e, 0x02, 0x38, 0x37, 0x6d, 0xe8, 0xc0, 0x5e, 0x83, 0x6d, 0xc3, 0x49, - 0x08, 0x03, 0x38, 0x37, 0x94, 0x91, 0xbe, 0x85, 0x35, 0x58, 0xb0, 0x6c, 0x80, 0x51, 0x77, 0xa4, - 0xa7, 0xa4, 0xaf, 0xb8, 0x87, 0x7a, 0xb9, 0x65, 0xd3, 0x59, 0x92, 0x8e, 0x9e, 0x1f, 0x66, 0xf1, - 0x7b, 0x74, 0xcb, 0xcd, 0xde, 0xc4, 0xe5, 0x16, 0x9d, 0xd9, 0xee, 0x61, 0xc9, 0x97, 0x15, 0x94, - 0x4a, 0xeb, 0xef, 0x8d, 0x61, 0xa3, 0x59, 0x92, 0x0e, 0x8a, 0x11, 0xb2, 0x0b, 0x44, 0xed, 0xeb, - 0x04, 0xa5, 0x92, 0x9e, 0x0d, 0x31, 0x1f, 0x20, 0x38, 0x93, 0x9e, 0xbe, 0x27, 0x27, 0x21, 0xbc, - 0xe6, 0x4a, 0xae, 0xb8, 0x87, 0x55, 0xf9, 0x53, 0xfa, 0xaa, 0xd4, 0x56, 0x0a, 0x59, 0x97, 0xe1, - 0xb5, 0x19, 0xc1, 0xd6, 0x31, 0x9a, 0x5f, 0x3a, 0xf1, 0xab, 0xf4, 0xd5, 0x47, 0xd4, 0xae, 0xd0, - 0xa2, 0x29, 0x39, 0x08, 0xcf, 0x5a, 0x4b, 0xa5, 0xca, 0xc5, 0xd6, 0x83, 0x63, 0x63, 0xdc, 0xed, - 0x14, 0xf9, 0x5b, 0xa9, 0xd4, 0xbc, 0xa5, 0xf3, 0x5f, 0x09, 0xb9, 0xb7, 0xd4, 0x9b, 0xec, 0x96, - 0xfb, 0x36, 0x3f, 0xf8, 0xe7, 0xba, 0x5c, 0xb6, 0x7f, 0xfc, 0x32, 0xf9, 0xf6, 0x22, 0x8a, 0x42, - 0x2b, 0x5e, 0x8b, 0x4c, 0x5b, 0x91, 0x0b, 0xa8, 0x71, 0x2d, 0x79, 0x88, 0xb8, 0x91, 0xee, 0xbf, - 0xfb, 0xfd, 0x52, 0xb5, 0xbf, 0x7f, 0x76, 0x0e, 0xdf, 0x85, 0xea, 0x6b, 0xa5, 0x9b, 0x55, 0x76, - 0x11, 0x27, 0x7d, 0xda, 0x1a, 0x58, 0xf4, 0xf0, 0x01, 0xa7, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, - 0x6f, 0xb5, 0x28, 0xee, 0x1f, 0x03, 0x00, 0x00, + 0x18, 0x86, 0x99, 0x1e, 0xf6, 0x90, 0x3d, 0x58, 0x22, 0x68, 0xba, 0x6a, 0x5d, 0x2b, 0xca, 0x5c, + 0xcd, 0x80, 0xbd, 0x11, 0xbc, 0x72, 0x15, 0x6d, 0xa5, 0x62, 0x99, 0x7a, 0x00, 0x59, 0x18, 0x66, + 0x77, 0xbf, 0x9d, 0x09, 0x66, 0x27, 0x31, 0xc9, 0x54, 0xb6, 0x7f, 0xc6, 0x7b, 0x6f, 0xfc, 0x1f, + 0xfe, 0x2a, 0xc9, 0x97, 0x0c, 0x28, 0xf4, 0x66, 0x21, 0xef, 0xf3, 0xbc, 0x49, 0xf6, 0x9b, 0x90, + 0xa7, 0xa5, 0x94, 0xa5, 0x80, 0x54, 0xc8, 0xb2, 0xe4, 0x75, 0x99, 0xda, 0xad, 0x82, 0xb4, 0xb2, + 0x56, 0xe5, 0x1a, 0xbe, 0x37, 0x60, 0x6c, 0xa2, 0xb4, 0xb4, 0x92, 0xde, 0xf6, 0x5e, 0x12, 0xbc, + 0xc4, 0x79, 0x93, 0xfb, 0xa1, 0x5c, 0x28, 0x9e, 0x16, 0x75, 0x2d, 0x6d, 0x61, 0xb9, 0xac, 0x8d, + 0xaf, 0x4c, 0x8e, 0x02, 0xc5, 0xd5, 0xa2, 0x59, 0xa7, 0xab, 0x46, 0xa3, 0xe0, 0xf9, 0xf1, 0xef, + 0x3d, 0x32, 0x38, 0xb5, 0x56, 0x65, 0xfe, 0x20, 0xfa, 0x84, 0x8c, 0xc3, 0x99, 0xf9, 0x06, 0x6c, + 0x25, 0x57, 0x2c, 0x9a, 0x46, 0x71, 0x3f, 0x1b, 0x85, 0xf4, 0x3d, 0x86, 0xf4, 0x21, 0x19, 0xb4, + 0x5a, 0xa3, 0x05, 0xdb, 0x41, 0x87, 0x84, 0xe8, 0x93, 0x16, 0xf4, 0x11, 0x19, 0xb6, 0x82, 0xe1, + 0xd7, 0xc0, 0x76, 0xa7, 0x51, 0xbc, 0x9b, 0xb5, 0xa5, 0x4b, 0x7e, 0x0d, 0xf4, 0x0e, 0xe9, 0x18, + 0x5b, 0xd8, 0xc6, 0xb0, 0xbd, 0x69, 0x14, 0xef, 0x67, 0x61, 0x45, 0x1f, 0x93, 0x91, 0x06, 0xa3, + 0x64, 0x6d, 0xc0, 0x77, 0xf7, 0xb1, 0x3b, 0x6c, 0x43, 0x2c, 0x3f, 0x20, 0xa4, 0x31, 0xa0, 0xf3, + 0xa2, 0x84, 0xda, 0xb2, 0x0e, 0x9e, 0xdf, 0x77, 0xc9, 0x4b, 0x17, 0xd0, 0x7b, 0xa4, 0xaf, 0x61, + 0x23, 0x2d, 0xe4, 0x5c, 0xb1, 0x2e, 0xd2, 0x9e, 0x0f, 0xce, 0x94, 0x83, 0x06, 0xf4, 0x15, 0x68, + 0x07, 0x47, 0x1e, 0xfa, 0xe0, 0x4c, 0x51, 0x46, 0xba, 0x1a, 0xd6, 0xa0, 0x41, 0xb3, 0x1e, 0xa2, + 0x76, 0x49, 0x4f, 0x48, 0x57, 0x14, 0x16, 0xea, 0xe5, 0x96, 0x8d, 0xa7, 0x51, 0x3c, 0x78, 0x76, + 0x98, 0x84, 0xef, 0xd1, 0x0e, 0x37, 0x79, 0x1d, 0x86, 0x9b, 0xb5, 0xa6, 0x9b, 0xc3, 0xb2, 0x58, + 0x56, 0x90, 0x0b, 0x29, 0xbf, 0x35, 0x8a, 0x0d, 0xa6, 0x51, 0xdc, 0xcb, 0x06, 0x98, 0x9d, 0x63, + 0xe4, 0xae, 0xe3, 0x95, 0x8a, 0x5b, 0xd6, 0x47, 0xde, 0xc3, 0xe0, 0x94, 0x5b, 0xfa, 0x8e, 0x1c, + 0x7b, 0x78, 0x55, 0x08, 0xbe, 0x2a, 0x2c, 0xac, 0xf2, 0x1f, 0xdc, 0x56, 0xb9, 0xd4, 0xbc, 0xe4, + 0x75, 0xee, 0xaf, 0xcd, 0x08, 0xb6, 0x8e, 0xd0, 0xfc, 0xdc, 0x8a, 0x5f, 0xb8, 0xad, 0x3e, 0xa0, + 0x76, 0x89, 0x16, 0x8d, 0xc9, 0x81, 0xdf, 0x6b, 0xcd, 0x85, 0xc8, 0x17, 0x5b, 0x0b, 0x86, 0x0d, + 0x71, 0xb6, 0x63, 0xcc, 0xdf, 0x70, 0x21, 0x66, 0x2e, 0xa5, 0x13, 0xd2, 0xc3, 0xff, 0xb4, 0x94, + 0x82, 0xdd, 0xf2, 0x03, 0x6a, 0xd7, 0xb3, 0x9f, 0x11, 0xb9, 0xbb, 0x94, 0x9b, 0xe4, 0x86, 0xb7, + 0x38, 0x3b, 0xf8, 0xe7, 0x29, 0x5d, 0xb8, 0xc2, 0x45, 0xf4, 0xf5, 0x79, 0x10, 0x4b, 0x29, 0x8a, + 0xba, 0x4c, 0xa4, 0x2e, 0xd3, 0x12, 0x6a, 0xdc, 0x2e, 0xf5, 0xa8, 0x50, 0xdc, 0xfc, 0xf7, 0xf6, + 0x5f, 0x08, 0xf7, 0xfb, 0x6b, 0xe7, 0xf0, 0xad, 0xaf, 0xbe, 0x12, 0xb2, 0x59, 0x25, 0xe7, 0xe1, + 0xa4, 0x8f, 0x5b, 0x05, 0x7f, 0x5a, 0x36, 0x47, 0x36, 0x0f, 0x6c, 0xee, 0xd8, 0xa2, 0x83, 0x9b, + 0x9f, 0xfc, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x7d, 0xa3, 0x36, 0xbb, 0x57, 0x03, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/logging/type/log_severity.pb.go b/vendor/google.golang.org/genproto/googleapis/logging/type/log_severity.pb.go index 36cbe95..f489a27 100644 --- a/vendor/google.golang.org/genproto/googleapis/logging/type/log_severity.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/logging/type/log_severity.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/logging/type/log_severity.proto -// DO NOT EDIT! package ltype @@ -88,7 +87,7 @@ func init() { func init() { proto.RegisterFile("google/logging/type/log_severity.proto", fileDescriptor1) } var fileDescriptor1 = []byte{ - // 297 bytes of a gzipped FileDescriptorProto + // 309 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4b, 0xcf, 0xcf, 0x4f, 0xcf, 0x49, 0xd5, 0xcf, 0xc9, 0x4f, 0x4f, 0xcf, 0xcc, 0x4b, 0xd7, 0x2f, 0xa9, 0x2c, 0x00, 0x73, 0xe2, 0x8b, 0x53, 0xcb, 0x52, 0x8b, 0x32, 0x4b, 0x2a, 0xf5, 0x0a, 0x8a, 0xf2, 0x4b, 0xf2, 0x85, @@ -101,11 +100,12 @@ var fileDescriptor1 = []byte{ 0xe4, 0xe7, 0xe9, 0xe7, 0x2e, 0x30, 0x81, 0x59, 0x88, 0x8b, 0x8b, 0xd5, 0x35, 0x28, 0xc8, 0x3f, 0x48, 0xe0, 0x0b, 0xb3, 0x10, 0x2f, 0x17, 0x87, 0x73, 0x90, 0x67, 0x88, 0xa7, 0xb3, 0xa3, 0x8f, 0xc0, 0x0d, 0x16, 0x90, 0x94, 0xa3, 0x8f, 0x6b, 0x50, 0x88, 0xc0, 0x1e, 0x56, 0x21, 0x3e, 0x2e, - 0x4e, 0x57, 0x5f, 0xd7, 0x20, 0x77, 0x57, 0x3f, 0xe7, 0x48, 0x81, 0x05, 0x6c, 0x4e, 0xcd, 0x8c, - 0x5c, 0xe2, 0xc9, 0xf9, 0xb9, 0x7a, 0x58, 0x9c, 0xef, 0x24, 0x80, 0xe4, 0xba, 0x00, 0x90, 0x93, - 0x03, 0x18, 0xa3, 0x2c, 0xa0, 0x0a, 0xd3, 0xf3, 0x73, 0x12, 0xf3, 0xd2, 0xf5, 0xf2, 0x8b, 0xd2, - 0xf5, 0xd3, 0x53, 0xf3, 0xc0, 0x1e, 0xd2, 0x87, 0x48, 0x25, 0x16, 0x64, 0x16, 0xa3, 0x04, 0x97, - 0x75, 0x0e, 0x88, 0x5c, 0xc5, 0x24, 0xe9, 0x0e, 0xd1, 0xea, 0x9c, 0x93, 0x5f, 0x9a, 0xa2, 0xe7, - 0x03, 0xb5, 0x29, 0xa4, 0xb2, 0x20, 0x35, 0x89, 0x0d, 0x6c, 0x80, 0x31, 0x20, 0x00, 0x00, 0xff, - 0xff, 0x1b, 0x91, 0x99, 0x37, 0x6e, 0x01, 0x00, 0x00, + 0x4e, 0x57, 0x5f, 0xd7, 0x20, 0x77, 0x57, 0x3f, 0xe7, 0x48, 0x81, 0x05, 0x6c, 0x4e, 0xf3, 0x19, + 0xb9, 0xc4, 0x93, 0xf3, 0x73, 0xf5, 0xb0, 0x38, 0xdf, 0x49, 0x00, 0xc9, 0x75, 0x01, 0x20, 0x27, + 0x07, 0x30, 0x46, 0x59, 0x40, 0x15, 0xa6, 0xe7, 0xe7, 0x24, 0xe6, 0xa5, 0xeb, 0xe5, 0x17, 0xa5, + 0xeb, 0xa7, 0xa7, 0xe6, 0x81, 0x3d, 0xa4, 0x0f, 0x91, 0x4a, 0x2c, 0xc8, 0x2c, 0x46, 0x09, 0x2e, + 0xeb, 0x1c, 0x10, 0xb9, 0x8a, 0x49, 0xd2, 0x1d, 0xa2, 0xd5, 0x39, 0x27, 0xbf, 0x34, 0x45, 0xcf, + 0x07, 0x6a, 0x53, 0x48, 0x65, 0x41, 0xea, 0x29, 0x98, 0x5c, 0x0c, 0x58, 0x2e, 0x06, 0x2a, 0x17, + 0x03, 0x92, 0x4b, 0x62, 0x03, 0x1b, 0x6e, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0xea, 0x8a, 0xa7, + 0x20, 0x8a, 0x01, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/logging/v2/log_entry.pb.go b/vendor/google.golang.org/genproto/googleapis/logging/v2/log_entry.pb.go index d81b52c..002a837 100644 --- a/vendor/google.golang.org/genproto/googleapis/logging/v2/log_entry.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/logging/v2/log_entry.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/logging/v2/log_entry.proto -// DO NOT EDIT! /* Package logging is a generated protocol buffer package. @@ -32,6 +31,13 @@ It has these top-level messages: CreateSinkRequest UpdateSinkRequest DeleteSinkRequest + LogExclusion + ListExclusionsRequest + ListExclusionsResponse + GetExclusionRequest + CreateExclusionRequest + UpdateExclusionRequest + DeleteExclusionRequest LogMetric ListLogMetricsRequest ListLogMetricsResponse @@ -73,6 +79,10 @@ type LogEntry struct { // "billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]" // "folders/[FOLDER_ID]/logs/[LOG_ID]" // + // A project number may optionally be used in place of PROJECT_ID. The + // project number is translated to its corresponding PROJECT_ID internally + // and the `log_name` field will contain PROJECT_ID in queries and exports. + // // `[LOG_ID]` must be URL-encoded within `log_name`. Example: // `"organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity"`. // `[LOG_ID]` must be less than 512 characters long and can only include the @@ -97,11 +107,15 @@ type LogEntry struct { // *LogEntry_TextPayload // *LogEntry_JsonPayload Payload isLogEntry_Payload `protobuf_oneof:"payload"` - // Optional. The time the event described by the log entry occurred. If - // omitted in a new log entry, Stackdriver Logging will insert the time the - // log entry is received. Stackdriver Logging might reject log entries whose - // time stamps are more than a couple of hours in the future. Log entries - // with time stamps in the past are accepted. + // Optional. The time the event described by the log entry occurred. + // This time is used to compute the log entry's age and to enforce + // the logs retention period. If this field is omitted in a new log + // entry, then Stackdriver Logging assigns it the current time. + // + // Incoming log entries should have timestamps that are no more than + // the [logs retention period](/logging/quota-policy) in the past, + // and no more than 24 hours in the future. + // See the `entries.write` API method for more information. Timestamp *google_protobuf4.Timestamp `protobuf:"bytes,9,opt,name=timestamp" json:"timestamp,omitempty"` // Output only. The time the log entry was received by Stackdriver Logging. ReceiveTimestamp *google_protobuf4.Timestamp `protobuf:"bytes,24,opt,name=receive_timestamp,json=receiveTimestamp" json:"receive_timestamp,omitempty"` @@ -112,7 +126,7 @@ type LogEntry struct { // then Stackdriver Logging considers other log entries in the same project, // with the same `timestamp`, and with the same `insert_id` to be duplicates // which can be removed. If omitted in new log entries, then Stackdriver - // Logging will insert its own unique identifier. The `insert_id` is used + // Logging assigns its own unique identifier. The `insert_id` is also used // to order log entries that have the same `timestamp` value. InsertId string `protobuf:"bytes,4,opt,name=insert_id,json=insertId" json:"insert_id,omitempty"` // Optional. Information about the HTTP request associated with this @@ -129,6 +143,12 @@ type LogEntry struct { // to `//tracing.googleapis.com`. Example: // `projects/my-projectid/traces/06796866738c859f2f19b7cfb3214824` Trace string `protobuf:"bytes,22,opt,name=trace" json:"trace,omitempty"` + // Optional. Id of the span within the trace associated with the log entry. + // e.g. "0000000000000042" + // For Stackdriver trace spans, this is the same format that the Stackdriver + // trace API uses. + // The ID is a 16-character hexadecimal encoding of an 8-byte array. + SpanId string `protobuf:"bytes,27,opt,name=span_id,json=spanId" json:"span_id,omitempty"` // Optional. Source code location information associated with the log entry, // if any. SourceLocation *LogEntrySourceLocation `protobuf:"bytes,23,opt,name=source_location,json=sourceLocation" json:"source_location,omitempty"` @@ -255,6 +275,13 @@ func (m *LogEntry) GetTrace() string { return "" } +func (m *LogEntry) GetSpanId() string { + if m != nil { + return m.SpanId + } + return "" +} + func (m *LogEntry) GetSourceLocation() *LogEntrySourceLocation { if m != nil { return m.SourceLocation @@ -453,49 +480,51 @@ func init() { func init() { proto.RegisterFile("google/logging/v2/log_entry.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 699 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x54, 0x5f, 0x6f, 0xdb, 0x36, - 0x10, 0x8f, 0xec, 0xcc, 0x91, 0x69, 0xe7, 0x1f, 0x91, 0x25, 0x8a, 0x97, 0x61, 0x5e, 0x32, 0x6c, - 0xde, 0x8b, 0x0c, 0x78, 0x2f, 0xc9, 0x12, 0xa0, 0xa8, 0x83, 0x22, 0x29, 0xe0, 0xb6, 0x01, 0x53, - 0xf4, 0xa1, 0x28, 0x60, 0x30, 0x12, 0xad, 0xb0, 0x95, 0x49, 0x95, 0xa2, 0x8c, 0xfa, 0xa9, 0xdf, - 0xa7, 0x9f, 0xa8, 0x1f, 0xa5, 0x8f, 0x05, 0x8f, 0x94, 0xed, 0xda, 0x41, 0xfa, 0x76, 0x27, 0xfe, - 0xfe, 0xdc, 0x1d, 0x8f, 0x42, 0x7f, 0x26, 0x52, 0x26, 0x29, 0xeb, 0xa6, 0x32, 0x49, 0xb8, 0x48, - 0xba, 0x93, 0x9e, 0x09, 0x87, 0x4c, 0x68, 0x35, 0x0d, 0x33, 0x25, 0xb5, 0xc4, 0xbb, 0x16, 0x12, - 0x3a, 0x48, 0x38, 0xe9, 0xb5, 0x8e, 0x1c, 0x8b, 0x66, 0xbc, 0x4b, 0x85, 0x90, 0x9a, 0x6a, 0x2e, - 0x45, 0x6e, 0x09, 0xad, 0x93, 0x85, 0xd3, 0xb1, 0x14, 0x5c, 0x4b, 0xc5, 0xe2, 0xa1, 0x62, 0xb9, - 0x2c, 0x54, 0xc4, 0x1c, 0xe8, 0xef, 0x25, 0x63, 0x3d, 0xcd, 0x58, 0xf7, 0x5e, 0xeb, 0x6c, 0xa8, - 0xd8, 0xc7, 0x82, 0xe5, 0xfa, 0x31, 0x9c, 0x29, 0x31, 0x67, 0x13, 0xa6, 0xb8, 0x76, 0x55, 0xb6, - 0x0e, 0x1d, 0x0e, 0xb2, 0xbb, 0x62, 0xd4, 0xa5, 0xa2, 0x3c, 0x3a, 0x5a, 0x3e, 0xca, 0xb5, 0x2a, - 0xa2, 0xd2, 0xe0, 0x8f, 0xe5, 0x53, 0xcd, 0xc7, 0x2c, 0xd7, 0x74, 0x9c, 0x59, 0xc0, 0xf1, 0xd7, - 0x1a, 0xf2, 0x07, 0x32, 0x79, 0x66, 0x46, 0x82, 0x0f, 0x91, 0x6f, 0xcc, 0x05, 0x1d, 0xb3, 0xa0, - 0xd9, 0xf6, 0x3a, 0x75, 0xb2, 0x91, 0xca, 0xe4, 0x25, 0x1d, 0x33, 0x7c, 0x86, 0xfc, 0xb2, 0xc7, - 0xc0, 0x6f, 0x7b, 0x9d, 0x46, 0xef, 0xf7, 0xd0, 0x8d, 0x8e, 0x66, 0x3c, 0x7c, 0x51, 0x4e, 0x82, - 0x38, 0x10, 0x99, 0xc1, 0xf1, 0x39, 0xda, 0x04, 0xaf, 0x61, 0x46, 0xa7, 0xa9, 0xa4, 0x71, 0x50, - 0x01, 0xfe, 0x5e, 0xc9, 0x2f, 0x6b, 0x0b, 0x9f, 0x8a, 0xe9, 0xf5, 0x1a, 0x69, 0x42, 0x7e, 0x63, - 0xb1, 0xf8, 0x04, 0x35, 0x35, 0xfb, 0xa4, 0x67, 0xdc, 0xaa, 0x29, 0xeb, 0x7a, 0x8d, 0x34, 0xcc, - 0xd7, 0x12, 0x74, 0x81, 0x9a, 0xef, 0x73, 0x29, 0x66, 0xa0, 0x1a, 0x18, 0x1c, 0xac, 0x18, 0xdc, - 0xc2, 0x68, 0x0c, 0xdb, 0xc0, 0x4b, 0xf6, 0x29, 0xaa, 0xcf, 0xa6, 0x12, 0xd4, 0x81, 0xda, 0x5a, - 0xa1, 0xbe, 0x2e, 0x11, 0x64, 0x0e, 0xc6, 0x57, 0x68, 0x57, 0xb1, 0x88, 0xf1, 0x09, 0x1b, 0xce, - 0x15, 0x82, 0x9f, 0x2a, 0xec, 0x38, 0xd2, 0xec, 0x0b, 0xbe, 0x40, 0x7e, 0x79, 0xe3, 0x01, 0x6a, - 0x7b, 0x9d, 0xad, 0x5e, 0x3b, 0x5c, 0x5a, 0x4c, 0xb3, 0x1a, 0xe1, 0x40, 0x26, 0xb7, 0x0e, 0x47, - 0x66, 0x0c, 0xfc, 0x1b, 0xaa, 0x73, 0x91, 0x33, 0xa5, 0x87, 0x3c, 0x0e, 0xd6, 0xe1, 0xde, 0x7c, - 0xfb, 0xe1, 0x79, 0x8c, 0x2f, 0x51, 0x73, 0x71, 0xf1, 0x82, 0x0d, 0x28, 0xef, 0x61, 0xf9, 0x6b, - 0xad, 0x33, 0x62, 0x71, 0xa4, 0x71, 0x3f, 0x4f, 0xf0, 0x13, 0x54, 0x4b, 0xe9, 0x1d, 0x4b, 0xf3, - 0xa0, 0xd1, 0xae, 0x76, 0x1a, 0xbd, 0x7f, 0xc2, 0x95, 0x67, 0x13, 0x96, 0x5b, 0x14, 0x0e, 0x00, - 0x09, 0x31, 0x71, 0x34, 0xdc, 0x47, 0x75, 0x99, 0x31, 0x05, 0x2f, 0x29, 0xd8, 0x86, 0x12, 0xfe, - 0x7a, 0x44, 0xe3, 0x55, 0x89, 0x25, 0x73, 0x1a, 0xde, 0x43, 0xbf, 0x68, 0x45, 0x23, 0x16, 0xec, - 0x43, 0x8b, 0x36, 0xc1, 0x04, 0x6d, 0xdb, 0x3d, 0x1b, 0xa6, 0x32, 0xb2, 0xfa, 0x07, 0xa0, 0xff, - 0xef, 0x23, 0xfa, 0xb7, 0xc0, 0x18, 0x38, 0x02, 0xd9, 0xca, 0x7f, 0xc8, 0x5b, 0x67, 0xa8, 0xb1, - 0xd0, 0x04, 0xde, 0x41, 0xd5, 0x0f, 0x6c, 0x1a, 0x78, 0x60, 0x6b, 0x42, 0x53, 0xca, 0x84, 0xa6, - 0x05, 0x83, 0x55, 0xae, 0x13, 0x9b, 0xfc, 0x5f, 0x39, 0xf5, 0xfa, 0x75, 0xb4, 0xe1, 0xb6, 0xf0, - 0x98, 0xa3, 0xdd, 0x95, 0x7e, 0xf0, 0x16, 0xaa, 0xf0, 0xd8, 0x49, 0x55, 0x78, 0x8c, 0x5b, 0xc8, - 0xcf, 0x94, 0x8c, 0x8b, 0x88, 0x29, 0x27, 0x36, 0xcb, 0x8d, 0xcb, 0x88, 0xab, 0x5c, 0xc3, 0xd2, - 0xfb, 0xc4, 0x26, 0x18, 0xa3, 0xf5, 0x94, 0xe6, 0x1a, 0x2e, 0xda, 0x27, 0x10, 0x1f, 0xbf, 0x43, - 0xfb, 0x0f, 0xb7, 0x66, 0xd0, 0x23, 0x9e, 0x32, 0xe7, 0x08, 0x31, 0x28, 0x70, 0x61, 0x8b, 0xaf, - 0x12, 0x88, 0x4d, 0x1d, 0xa3, 0x42, 0x44, 0x30, 0xbf, 0xaa, 0xad, 0xa3, 0xcc, 0xfb, 0x9f, 0xd1, - 0xaf, 0x91, 0x1c, 0xaf, 0x8e, 0xb3, 0xbf, 0x59, 0x9a, 0xde, 0xc0, 0x93, 0xf5, 0xde, 0x9e, 0x3a, - 0x4c, 0x22, 0x53, 0x2a, 0x92, 0x50, 0xaa, 0xa4, 0x9b, 0x30, 0x01, 0x4f, 0xa0, 0x6b, 0x8f, 0x68, - 0xc6, 0xf3, 0x85, 0xff, 0xf1, 0xb9, 0x0b, 0xbf, 0x79, 0xde, 0x97, 0xca, 0xc1, 0x95, 0x65, 0x5f, - 0xa6, 0xb2, 0x88, 0xcd, 0x5d, 0x81, 0xcf, 0x9b, 0xde, 0x5d, 0x0d, 0x14, 0xfe, 0xfb, 0x1e, 0x00, - 0x00, 0xff, 0xff, 0xa9, 0x61, 0x44, 0xa8, 0xd0, 0x05, 0x00, 0x00, + // 729 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x54, 0xcd, 0x6e, 0xdb, 0x46, + 0x10, 0x36, 0x25, 0x57, 0xa2, 0x56, 0xf2, 0xdf, 0xc2, 0xb5, 0x68, 0xd9, 0x45, 0x55, 0xbb, 0x68, + 0xd5, 0x0b, 0x05, 0xa8, 0x17, 0xbb, 0x36, 0x50, 0x54, 0x46, 0x61, 0x1b, 0x50, 0x5b, 0x63, 0x5d, + 0xf8, 0x10, 0x08, 0x10, 0xd6, 0xe4, 0x8a, 0xde, 0x84, 0xda, 0x65, 0x96, 0x4b, 0x21, 0x7a, 0x94, + 0xbc, 0x42, 0x1e, 0x25, 0x6f, 0x93, 0x5b, 0x8e, 0xc1, 0x0e, 0x97, 0x92, 0x22, 0x19, 0xce, 0x6d, + 0x66, 0xe7, 0xfb, 0xe6, 0x9b, 0x19, 0xce, 0x10, 0xfd, 0x14, 0x49, 0x19, 0xc5, 0xac, 0x1b, 0xcb, + 0x28, 0xe2, 0x22, 0xea, 0x4e, 0x7b, 0xc6, 0x1c, 0x31, 0xa1, 0xd5, 0xcc, 0x4f, 0x94, 0xd4, 0x12, + 0xef, 0xe5, 0x10, 0xdf, 0x42, 0xfc, 0x69, 0xaf, 0x75, 0x6c, 0x59, 0x34, 0xe1, 0x5d, 0x2a, 0x84, + 0xd4, 0x54, 0x73, 0x29, 0xd2, 0x9c, 0xd0, 0x3a, 0x5d, 0x8a, 0x4e, 0xa4, 0xe0, 0x5a, 0x2a, 0x16, + 0x8e, 0x14, 0x4b, 0x65, 0xa6, 0x02, 0x66, 0x41, 0xbf, 0xac, 0x08, 0xeb, 0x59, 0xc2, 0xba, 0x4f, + 0x5a, 0x27, 0x23, 0xc5, 0xde, 0x66, 0x2c, 0xd5, 0x2f, 0xe1, 0x4c, 0x89, 0x29, 0x9b, 0x32, 0xc5, + 0xb5, 0xad, 0xb2, 0x75, 0x68, 0x71, 0xe0, 0x3d, 0x66, 0xe3, 0x2e, 0x15, 0x45, 0xe8, 0x78, 0x35, + 0x94, 0x6a, 0x95, 0x05, 0x85, 0xc0, 0x8f, 0xab, 0x51, 0xcd, 0x27, 0x2c, 0xd5, 0x74, 0x92, 0xe4, + 0x80, 0x93, 0x4f, 0x15, 0xe4, 0x0e, 0x64, 0xf4, 0xb7, 0x19, 0x09, 0x3e, 0x44, 0xae, 0x11, 0x17, + 0x74, 0xc2, 0xbc, 0x46, 0xdb, 0xe9, 0xd4, 0x48, 0x35, 0x96, 0xd1, 0xbf, 0x74, 0xc2, 0xf0, 0x39, + 0x72, 0x8b, 0x1e, 0x3d, 0xb7, 0xed, 0x74, 0xea, 0xbd, 0x1f, 0x7c, 0x3b, 0x3a, 0x9a, 0x70, 0xff, + 0x9f, 0x62, 0x12, 0xc4, 0x82, 0xc8, 0x1c, 0x8e, 0x2f, 0xd0, 0x16, 0x68, 0x8d, 0x12, 0x3a, 0x8b, + 0x25, 0x0d, 0xbd, 0x12, 0xf0, 0xf7, 0x0b, 0x7e, 0x51, 0x9b, 0xff, 0x97, 0x98, 0xdd, 0x6c, 0x90, + 0x06, 0xf8, 0x77, 0x39, 0x16, 0x9f, 0xa2, 0x86, 0x66, 0xef, 0xf4, 0x9c, 0x5b, 0x36, 0x65, 0xdd, + 0x6c, 0x90, 0xba, 0x79, 0x2d, 0x40, 0x97, 0xa8, 0xf1, 0x3a, 0x95, 0x62, 0x0e, 0xaa, 0x80, 0x40, + 0x73, 0x4d, 0xe0, 0x1e, 0x46, 0x63, 0xd8, 0x06, 0x5e, 0xb0, 0xcf, 0x50, 0x6d, 0x3e, 0x15, 0xaf, + 0x06, 0xd4, 0xd6, 0x1a, 0xf5, 0xff, 0x02, 0x41, 0x16, 0x60, 0x7c, 0x8d, 0xf6, 0x14, 0x0b, 0x18, + 0x9f, 0xb2, 0xd1, 0x22, 0x83, 0xf7, 0xcd, 0x0c, 0xbb, 0x96, 0x34, 0x7f, 0xc1, 0x97, 0xc8, 0x2d, + 0xbe, 0xb8, 0x87, 0xda, 0x4e, 0x67, 0xbb, 0xd7, 0xf6, 0x57, 0x16, 0xd3, 0xac, 0x86, 0x3f, 0x90, + 0xd1, 0xbd, 0xc5, 0x91, 0x39, 0x03, 0x1f, 0xa1, 0x1a, 0x17, 0x29, 0x53, 0x7a, 0xc4, 0x43, 0x6f, + 0x13, 0xbe, 0x9b, 0x9b, 0x3f, 0xdc, 0x86, 0xf8, 0x0a, 0x35, 0x96, 0x17, 0xcf, 0xab, 0x42, 0x79, + 0xcf, 0xa7, 0xbf, 0xd1, 0x3a, 0x21, 0x39, 0x8e, 0xd4, 0x9f, 0x16, 0x0e, 0xfe, 0x13, 0x55, 0x62, + 0xfa, 0xc8, 0xe2, 0xd4, 0xab, 0xb7, 0xcb, 0x9d, 0x7a, 0xef, 0x57, 0x7f, 0xed, 0x6c, 0xfc, 0x62, + 0x8b, 0xfc, 0x01, 0x20, 0xc1, 0x26, 0x96, 0x86, 0xfb, 0xa8, 0x26, 0x13, 0xa6, 0xe0, 0x92, 0xbc, + 0x1d, 0x28, 0xe1, 0xe7, 0x17, 0x72, 0xfc, 0x57, 0x60, 0xc9, 0x82, 0x86, 0xf7, 0xd1, 0x77, 0x5a, + 0xd1, 0x80, 0x79, 0x07, 0xd0, 0x62, 0xee, 0xe0, 0x26, 0xaa, 0xa6, 0x09, 0x15, 0xa6, 0xf5, 0x23, + 0x78, 0xaf, 0x18, 0xf7, 0x36, 0xc4, 0x04, 0xed, 0xe4, 0x0b, 0x38, 0x8a, 0x65, 0x90, 0x0b, 0x37, + 0x41, 0xf8, 0xb7, 0x17, 0x84, 0xef, 0x81, 0x31, 0xb0, 0x04, 0xb2, 0x9d, 0x7e, 0xe5, 0xb7, 0xce, + 0x51, 0x7d, 0xa9, 0x3b, 0xbc, 0x8b, 0xca, 0x6f, 0xd8, 0xcc, 0x73, 0x40, 0xd7, 0x98, 0xa6, 0xc6, + 0x29, 0x8d, 0x33, 0x06, 0x3b, 0x5e, 0x23, 0xb9, 0xf3, 0x47, 0xe9, 0xcc, 0xe9, 0xd7, 0x50, 0xd5, + 0xae, 0xe7, 0x09, 0x47, 0x7b, 0x6b, 0x8d, 0xe2, 0x6d, 0x54, 0xe2, 0xa1, 0x4d, 0x55, 0xe2, 0x21, + 0x6e, 0x21, 0x37, 0x51, 0x32, 0xcc, 0x02, 0xa6, 0x6c, 0xb2, 0xb9, 0x6f, 0x54, 0xc6, 0x5c, 0xa5, + 0x1a, 0xae, 0xc1, 0x25, 0xb9, 0x83, 0x31, 0xda, 0x8c, 0x69, 0xaa, 0x61, 0x03, 0x5c, 0x02, 0xf6, + 0xc9, 0x10, 0x1d, 0x3c, 0xdf, 0x9a, 0x41, 0x8f, 0x79, 0xcc, 0xac, 0x22, 0xd8, 0x90, 0x81, 0x8b, + 0xbc, 0xf8, 0x32, 0x01, 0xdb, 0xd4, 0x31, 0xce, 0x44, 0x00, 0xf3, 0x2b, 0xe7, 0x75, 0x14, 0x7e, + 0xff, 0xbd, 0x83, 0xbe, 0x0f, 0xe4, 0x64, 0x7d, 0x9e, 0xfd, 0xad, 0x42, 0xf5, 0x0e, 0x8e, 0xd9, + 0x79, 0x75, 0x66, 0x31, 0x91, 0x8c, 0xa9, 0x88, 0x7c, 0xa9, 0xa2, 0x6e, 0xc4, 0x04, 0x1c, 0x47, + 0x37, 0x0f, 0xd1, 0x84, 0xa7, 0x4b, 0x7f, 0xea, 0x0b, 0x6b, 0x7e, 0x76, 0x9c, 0x0f, 0xa5, 0xe6, + 0x75, 0xce, 0xbe, 0x8a, 0x65, 0x16, 0x9a, 0x8f, 0x05, 0x3a, 0x0f, 0xbd, 0x8f, 0x45, 0x64, 0x08, + 0x91, 0xa1, 0x8d, 0x0c, 0x1f, 0x7a, 0x8f, 0x15, 0xc8, 0xfd, 0xfb, 0x97, 0x00, 0x00, 0x00, 0xff, + 0xff, 0x80, 0x53, 0xd3, 0xff, 0x04, 0x06, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/logging/v2/logging.pb.go b/vendor/google.golang.org/genproto/googleapis/logging/v2/logging.pb.go index 06eeb23..12e712c 100644 --- a/vendor/google.golang.org/genproto/googleapis/logging/v2/logging.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/logging/v2/logging.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/logging/v2/logging.proto -// DO NOT EDIT! package logging @@ -83,21 +82,27 @@ type WriteLogEntriesRequest struct { // as a label in this parameter, then the log entry's label is not changed. // See [LogEntry][google.logging.v2.LogEntry]. Labels map[string]string `protobuf:"bytes,3,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - // Required. The log entries to write. Values supplied for the fields - // `log_name`, `resource`, and `labels` in this `entries.write` request are - // inserted into those log entries in this list that do not provide their own - // values. + // Required. The log entries to send to Stackdriver Logging. The order of log + // entries in this list does not matter. Values supplied in this method's + // `log_name`, `resource`, and `labels` fields are copied into those log + // entries in this list that do not include values for their corresponding + // fields. For more information, see the [LogEntry][google.logging.v2.LogEntry] type. // - // Stackdriver Logging also creates and inserts values for `timestamp` and - // `insert_id` if the entries do not provide them. The created `insert_id` for - // the N'th entry in this list will be greater than earlier entries and less - // than later entries. Otherwise, the order of log entries in this list does - // not matter. + // If the `timestamp` or `insert_id` fields are missing in log entries, then + // this method supplies the current time or a unique identifier, respectively. + // The supplied values are chosen so that, among the log entries that did not + // supply their own values, the entries earlier in the list will sort before + // the entries later in the list. See the `entries.list` method. + // + // Log entries with timestamps that are more than the + // [logs retention period](/logging/quota-policy) in the past or more than + // 24 hours in the future might be discarded. Discarding does not return + // an error. // // To improve throughput and to avoid exceeding the // [quota limit](/logging/quota-policy) for calls to `entries.write`, - // you should write multiple log entries at once rather than - // calling this method for each individual log entry. + // you should try to include several log entries in this list, + // rather than calling this method for each individual log entry. Entries []*LogEntry `protobuf:"bytes,4,rep,name=entries" json:"entries,omitempty"` // Optional. Whether valid entries should be written even if some other // entries fail due to INVALID_ARGUMENT or PERMISSION_DENIED errors. If any @@ -273,7 +278,9 @@ func (m *ListLogEntriesRequest) GetPageToken() string { // Result returned from `ListLogEntries`. type ListLogEntriesResponse struct { - // A list of log entries. + // A list of log entries. If `entries` is empty, `nextPageToken` may still be + // returned, indicating that more entries may exist. See `nextPageToken` for + // more information. Entries []*LogEntry `protobuf:"bytes,1,rep,name=entries" json:"entries,omitempty"` // If there might be more results than those appearing in this response, then // `nextPageToken` is included. To get the next set of results, call this @@ -482,7 +489,13 @@ type LoggingServiceV2Client interface { // Log entries written shortly before the delete operation might not be // deleted. DeleteLog(ctx context.Context, in *DeleteLogRequest, opts ...grpc.CallOption) (*google_protobuf5.Empty, error) - // Writes log entries to Stackdriver Logging. + // ## Log entry resources + // + // Writes log entries to Stackdriver Logging. This API method is the + // only way to send log entries to Stackdriver Logging. This method + // is used, directly or indirectly, by the Stackdriver Logging agent + // (fluentd) and all logging libraries configured to use Stackdriver + // Logging. WriteLogEntries(ctx context.Context, in *WriteLogEntriesRequest, opts ...grpc.CallOption) (*WriteLogEntriesResponse, error) // Lists log entries. Use this method to retrieve log entries from // Stackdriver Logging. For ways to export log entries, see @@ -557,7 +570,13 @@ type LoggingServiceV2Server interface { // Log entries written shortly before the delete operation might not be // deleted. DeleteLog(context.Context, *DeleteLogRequest) (*google_protobuf5.Empty, error) - // Writes log entries to Stackdriver Logging. + // ## Log entry resources + // + // Writes log entries to Stackdriver Logging. This API method is the + // only way to send log entries to Stackdriver Logging. This method + // is used, directly or indirectly, by the Stackdriver Logging agent + // (fluentd) and all logging libraries configured to use Stackdriver + // Logging. WriteLogEntries(context.Context, *WriteLogEntriesRequest) (*WriteLogEntriesResponse, error) // Lists log entries. Use this method to retrieve log entries from // Stackdriver Logging. For ways to export log entries, see @@ -697,66 +716,67 @@ var _LoggingServiceV2_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("google/logging/v2/logging.proto", fileDescriptor1) } var fileDescriptor1 = []byte{ - // 975 bytes of a gzipped FileDescriptorProto + // 991 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0xcd, 0x6e, 0xdb, 0x46, - 0x10, 0x06, 0xa5, 0xd8, 0x91, 0x46, 0x8d, 0xad, 0x6c, 0x62, 0x59, 0x91, 0x9c, 0x58, 0xa5, 0x9b, - 0x5a, 0x11, 0x10, 0x12, 0x55, 0x11, 0x20, 0x71, 0xd0, 0x8b, 0x13, 0xa3, 0x28, 0xe0, 0x14, 0x06, - 0xdd, 0x26, 0x40, 0x2e, 0x02, 0x25, 0x4d, 0x88, 0x6d, 0x28, 0x2e, 0xbb, 0xbb, 0x92, 0xab, 0x04, - 0xe9, 0x21, 0x87, 0xbe, 0x40, 0xdf, 0xa2, 0x87, 0xbe, 0x45, 0xaf, 0xbd, 0xf4, 0xd2, 0x43, 0x8f, - 0x79, 0x88, 0x1e, 0x0b, 0xee, 0x2e, 0x65, 0xea, 0x27, 0xb2, 0xdc, 0x9b, 0x76, 0xe6, 0xdb, 0x99, - 0xf9, 0x86, 0xdf, 0xcc, 0x0a, 0x76, 0x03, 0xc6, 0x82, 0x10, 0xdd, 0x90, 0x05, 0x01, 0x8d, 0x02, - 0x77, 0xd4, 0x4e, 0x7f, 0x3a, 0x31, 0x67, 0x92, 0x91, 0xeb, 0x1a, 0xe0, 0xa4, 0xd6, 0x51, 0xbb, - 0xb6, 0x63, 0xee, 0xf8, 0x31, 0x75, 0xfd, 0x28, 0x62, 0xd2, 0x97, 0x94, 0x45, 0x42, 0x5f, 0xa8, - 0xed, 0x65, 0xbc, 0x03, 0x16, 0x51, 0xc9, 0x38, 0xf6, 0x3b, 0x1c, 0x05, 0x1b, 0xf2, 0x1e, 0x1a, - 0xd0, 0xa7, 0x0b, 0xd3, 0x76, 0x30, 0x92, 0x7c, 0x6c, 0x20, 0x77, 0x0c, 0x44, 0x9d, 0xba, 0xc3, - 0x57, 0x6e, 0x7f, 0xc8, 0x55, 0x22, 0xe3, 0xaf, 0xcf, 0xfa, 0x71, 0x10, 0xcb, 0xf4, 0xf2, 0xee, - 0xac, 0x53, 0xd2, 0x01, 0x0a, 0xe9, 0x0f, 0x62, 0x03, 0xd8, 0x36, 0x00, 0x1e, 0xf7, 0x5c, 0x21, - 0x7d, 0x39, 0x34, 0xe5, 0xdb, 0xf7, 0xa1, 0xfc, 0x14, 0x43, 0x94, 0x78, 0xcc, 0x02, 0x0f, 0x7f, - 0x1c, 0xa2, 0x90, 0xe4, 0x16, 0x14, 0x92, 0xea, 0x22, 0x7f, 0x80, 0x55, 0xab, 0x61, 0x35, 0x8b, - 0xde, 0xd5, 0x90, 0x05, 0xdf, 0xfa, 0x03, 0xb4, 0xff, 0xce, 0x41, 0xe5, 0x05, 0xa7, 0x0a, 0x7e, - 0x14, 0x49, 0x4e, 0x51, 0x5c, 0x7c, 0x8b, 0x3c, 0x82, 0x42, 0xda, 0x90, 0x6a, 0xae, 0x61, 0x35, - 0x4b, 0xed, 0xdb, 0x8e, 0xe9, 0xb3, 0x1f, 0x53, 0xe7, 0x59, 0xda, 0x36, 0xcf, 0x80, 0xbc, 0x09, - 0x9c, 0x3c, 0x83, 0xf5, 0xd0, 0xef, 0x62, 0x28, 0xaa, 0xf9, 0x46, 0xbe, 0x59, 0x6a, 0x3f, 0x70, - 0xe6, 0x3e, 0x90, 0xb3, 0xb8, 0x20, 0xe7, 0x58, 0xdd, 0x4b, 0x8c, 0x63, 0xcf, 0x04, 0x21, 0x0f, - 0xe0, 0x2a, 0x6a, 0x54, 0xf5, 0x8a, 0x8a, 0x57, 0x5f, 0x10, 0xcf, 0x84, 0x1a, 0x7b, 0x29, 0x96, - 0xec, 0xc3, 0x66, 0xec, 0x73, 0x49, 0xfd, 0xb0, 0x23, 0x86, 0xbd, 0x1e, 0x0a, 0x51, 0x5d, 0x6b, - 0x58, 0xcd, 0x82, 0xb7, 0x61, 0xcc, 0xa7, 0xda, 0x5a, 0x7b, 0x04, 0xa5, 0x4c, 0x5a, 0x52, 0x86, - 0xfc, 0x6b, 0x1c, 0x9b, 0x76, 0x24, 0x3f, 0xc9, 0x4d, 0x58, 0x1b, 0xf9, 0xe1, 0x50, 0xf7, 0xa1, - 0xe8, 0xe9, 0xc3, 0x41, 0xee, 0xa1, 0x65, 0xdf, 0x82, 0xed, 0x39, 0x22, 0x22, 0x66, 0x91, 0x40, - 0xfb, 0x83, 0x05, 0x3b, 0x33, 0xbe, 0x13, 0x9d, 0xf7, 0x88, 0x73, 0xc6, 0x05, 0x19, 0x40, 0x79, - 0xa2, 0xa7, 0x0e, 0x2a, 0x5b, 0xd5, 0x52, 0xfc, 0x9e, 0x5c, 0xdc, 0xaf, 0xa9, 0x50, 0x13, 0xf2, - 0xfa, 0xa8, 0xfb, 0xb0, 0x11, 0x4e, 0x19, 0x6b, 0xdf, 0xc3, 0x8d, 0x05, 0xb0, 0x2c, 0xdb, 0x35, - 0xcd, 0xb6, 0x99, 0x65, 0x5b, 0x6a, 0x93, 0xb4, 0x18, 0x1e, 0xf7, 0x9c, 0x53, 0x25, 0xc3, 0x6c, - 0x07, 0xfe, 0xb4, 0x60, 0xeb, 0x98, 0x0a, 0x39, 0xaf, 0xad, 0x5d, 0x28, 0xc5, 0x9c, 0xfd, 0x80, - 0x3d, 0xd9, 0xa1, 0x7d, 0x4d, 0xad, 0xe8, 0x81, 0x31, 0x7d, 0xd3, 0x17, 0xe4, 0x2e, 0x6c, 0xa4, - 0x92, 0x51, 0x0a, 0x14, 0xd5, 0x82, 0xc2, 0x5c, 0x4b, 0xad, 0x89, 0x0e, 0x05, 0xa9, 0xc0, 0xfa, - 0x2b, 0x1a, 0x4a, 0xe4, 0xa6, 0xfd, 0xe6, 0x94, 0x68, 0x97, 0xf1, 0x3e, 0xf2, 0x4e, 0x77, 0x5c, - 0xcd, 0x6b, 0xed, 0xaa, 0xf3, 0xe1, 0x98, 0xd4, 0xa1, 0x18, 0xfb, 0x01, 0x76, 0x04, 0x7d, 0x83, - 0xd5, 0x2b, 0x8a, 0x5a, 0x21, 0x31, 0x9c, 0xd2, 0x37, 0x48, 0x6e, 0x03, 0x28, 0xa7, 0x64, 0xaf, - 0x31, 0x52, 0x92, 0x28, 0x7a, 0x0a, 0xfe, 0x5d, 0x62, 0xb0, 0xcf, 0xa0, 0x32, 0xcb, 0x47, 0x7f, - 0xd1, 0xac, 0x0e, 0xad, 0x4b, 0xe8, 0xf0, 0x73, 0xd8, 0x8c, 0xf0, 0x27, 0xd9, 0xc9, 0x24, 0xd5, - 0x44, 0xae, 0x25, 0xe6, 0x93, 0x49, 0x62, 0x84, 0xfd, 0x24, 0xf1, 0xdc, 0x60, 0x3d, 0x45, 0xd1, - 0xe3, 0x34, 0x96, 0x8c, 0x4f, 0x5a, 0x3b, 0xc5, 0xcf, 0x5a, 0xca, 0x2f, 0x37, 0xcb, 0xef, 0x77, - 0x0b, 0x9a, 0x17, 0xe7, 0x31, 0x94, 0x5f, 0xc2, 0xcd, 0xc9, 0x27, 0xea, 0x9f, 0xfb, 0x0d, 0xff, - 0xfd, 0xa5, 0x0b, 0xe1, 0x3c, 0x9e, 0x77, 0x83, 0xcf, 0xe7, 0xb8, 0x44, 0x5f, 0x36, 0xcd, 0x07, - 0x99, 0xf0, 0xaf, 0xc0, 0x7a, 0xec, 0x73, 0x8c, 0xa4, 0x99, 0x52, 0x73, 0x9a, 0xee, 0x4b, 0x6e, - 0x69, 0x5f, 0xf2, 0xb3, 0x7d, 0x79, 0x01, 0xe5, 0xf3, 0x34, 0x86, 0x7e, 0x1d, 0x8a, 0xe9, 0x7a, - 0xd4, 0xbb, 0xac, 0xe8, 0x15, 0xcc, 0x7e, 0x5c, 0xb9, 0xfe, 0xf6, 0x3f, 0x6b, 0x50, 0x3e, 0xd6, - 0x02, 0x39, 0x45, 0x3e, 0xa2, 0x3d, 0x7c, 0xde, 0x26, 0x67, 0x50, 0x9c, 0xac, 0x70, 0xb2, 0xb7, - 0x40, 0x47, 0xb3, 0x0b, 0xbe, 0x56, 0x49, 0x41, 0xe9, 0x7b, 0xe1, 0x1c, 0x25, 0x8f, 0x89, 0x7d, - 0xff, 0xfd, 0x5f, 0x1f, 0x7e, 0xcd, 0xed, 0xb7, 0xee, 0xba, 0xa3, 0x76, 0x17, 0xa5, 0xff, 0x85, - 0xfb, 0x36, 0xad, 0xf9, 0x2b, 0x33, 0x6c, 0xc2, 0x6d, 0x25, 0x4f, 0x97, 0x70, 0x5b, 0xef, 0xc8, - 0x2f, 0x16, 0x6c, 0xce, 0xec, 0x12, 0x72, 0x6f, 0xe5, 0xfd, 0x5c, 0x6b, 0xad, 0x02, 0x35, 0x1b, - 0x70, 0x47, 0x55, 0x56, 0xb1, 0xaf, 0x27, 0x4f, 0xa7, 0x99, 0x86, 0x83, 0xb3, 0x04, 0x7c, 0x60, - 0xb5, 0xc8, 0x7b, 0x0b, 0x36, 0xa6, 0x07, 0x8d, 0x34, 0x17, 0xcd, 0xd3, 0xa2, 0xdd, 0x52, 0xbb, - 0xb7, 0x02, 0xd2, 0x54, 0x51, 0x57, 0x55, 0x6c, 0xd9, 0xe5, 0x6c, 0x15, 0x21, 0x15, 0x32, 0x29, - 0xe2, 0x0f, 0x0b, 0x1a, 0x17, 0x0d, 0x03, 0x39, 0xf8, 0x48, 0xb2, 0x15, 0x26, 0xb5, 0xf6, 0xf8, - 0x7f, 0xdd, 0x35, 0xa5, 0x37, 0x55, 0xe9, 0x36, 0x69, 0x24, 0xa5, 0x0f, 0x96, 0x95, 0x38, 0x86, - 0x42, 0x2a, 0x5e, 0x62, 0x7f, 0xbc, 0x37, 0x93, 0xb2, 0xf6, 0x96, 0x62, 0x4c, 0xfa, 0xcf, 0x54, - 0xfa, 0x3b, 0x64, 0x27, 0x49, 0xff, 0x56, 0x8f, 0x58, 0x46, 0x52, 0xef, 0x94, 0xa6, 0x0e, 0x7f, - 0x86, 0xad, 0x1e, 0x1b, 0xcc, 0xc7, 0x3b, 0xfc, 0xc4, 0x88, 0xfe, 0x24, 0xd1, 0xeb, 0x89, 0xf5, - 0xf2, 0xa1, 0x81, 0x04, 0x2c, 0xf4, 0xa3, 0xc0, 0x61, 0x3c, 0x70, 0x03, 0x8c, 0x94, 0x9a, 0x5d, - 0xed, 0xf2, 0x63, 0x2a, 0x32, 0x7f, 0xb7, 0x1e, 0x9b, 0x9f, 0xff, 0x5a, 0xd6, 0x6f, 0xb9, 0xed, - 0xaf, 0xf5, 0xed, 0x27, 0x21, 0x1b, 0xf6, 0x1d, 0x13, 0xda, 0x79, 0xde, 0xee, 0xae, 0xab, 0x08, - 0x5f, 0xfe, 0x17, 0x00, 0x00, 0xff, 0xff, 0xe2, 0xc4, 0xaa, 0x91, 0x26, 0x0a, 0x00, 0x00, + 0x10, 0xc6, 0x4a, 0xb1, 0x23, 0x8d, 0x1a, 0x5b, 0xd9, 0xc4, 0xb2, 0x22, 0xd9, 0xb5, 0x4a, 0x23, + 0xb5, 0x22, 0x20, 0x24, 0xca, 0x22, 0x40, 0xe2, 0x20, 0x17, 0x27, 0x46, 0x51, 0xc0, 0x29, 0x0c, + 0xba, 0x75, 0x80, 0xc0, 0x80, 0x40, 0x49, 0x1b, 0x62, 0x1b, 0x8a, 0xcb, 0xee, 0xae, 0xe4, 0x2a, + 0x41, 0x2e, 0x39, 0xf4, 0x05, 0x7a, 0xe9, 0x33, 0xf4, 0xd0, 0xb7, 0xe8, 0xa5, 0x87, 0x5e, 0x8a, + 0x02, 0x7d, 0x80, 0x3c, 0x44, 0x8f, 0x05, 0x77, 0x97, 0x32, 0xf5, 0x13, 0x59, 0xee, 0x4d, 0x3b, + 0xf3, 0xed, 0xcc, 0x7c, 0xc3, 0x6f, 0x66, 0x05, 0x3b, 0x01, 0x63, 0x41, 0x48, 0x9c, 0x90, 0x05, + 0x01, 0x8d, 0x02, 0x67, 0xe8, 0xa6, 0x3f, 0xed, 0x98, 0x33, 0xc9, 0xf0, 0x4d, 0x0d, 0xb0, 0x53, + 0xeb, 0xd0, 0xad, 0x6d, 0x99, 0x3b, 0x7e, 0x4c, 0x1d, 0x3f, 0x8a, 0x98, 0xf4, 0x25, 0x65, 0x91, + 0xd0, 0x17, 0x6a, 0xbb, 0x19, 0x6f, 0x9f, 0x45, 0x54, 0x32, 0x4e, 0x7a, 0x6d, 0x4e, 0x04, 0x1b, + 0xf0, 0x2e, 0x31, 0xa0, 0xcf, 0xe6, 0xa6, 0x6d, 0x93, 0x48, 0xf2, 0x91, 0x81, 0x7c, 0x6a, 0x20, + 0xea, 0xd4, 0x19, 0xbc, 0x72, 0x7a, 0x03, 0xae, 0x12, 0x19, 0x7f, 0x7d, 0xda, 0x4f, 0xfa, 0xb1, + 0x4c, 0x2f, 0xef, 0x4c, 0x3b, 0x25, 0xed, 0x13, 0x21, 0xfd, 0x7e, 0x6c, 0x00, 0x9b, 0x06, 0xc0, + 0xe3, 0xae, 0x23, 0xa4, 0x2f, 0x07, 0xa6, 0x7c, 0xeb, 0x3e, 0x94, 0x9f, 0x91, 0x90, 0x48, 0x72, + 0xc4, 0x02, 0x8f, 0xfc, 0x30, 0x20, 0x42, 0xe2, 0x3b, 0x50, 0x48, 0xaa, 0x8b, 0xfc, 0x3e, 0xa9, + 0xa2, 0x06, 0x6a, 0x16, 0xbd, 0xeb, 0x21, 0x0b, 0xbe, 0xf1, 0xfb, 0xc4, 0xfa, 0x27, 0x07, 0x95, + 0x17, 0x9c, 0x2a, 0xf8, 0x61, 0x24, 0x39, 0x25, 0xe2, 0xf2, 0x5b, 0xf8, 0x11, 0x14, 0xd2, 0x86, + 0x54, 0x73, 0x0d, 0xd4, 0x2c, 0xb9, 0xdb, 0xb6, 0xe9, 0xb3, 0x1f, 0x53, 0xfb, 0x79, 0xda, 0x36, + 0xcf, 0x80, 0xbc, 0x31, 0x1c, 0x3f, 0x87, 0xd5, 0xd0, 0xef, 0x90, 0x50, 0x54, 0xf3, 0x8d, 0x7c, + 0xb3, 0xe4, 0x3e, 0xb0, 0x67, 0x3e, 0x90, 0x3d, 0xbf, 0x20, 0xfb, 0x48, 0xdd, 0x4b, 0x8c, 0x23, + 0xcf, 0x04, 0xc1, 0x0f, 0xe0, 0x3a, 0xd1, 0xa8, 0xea, 0x35, 0x15, 0xaf, 0x3e, 0x27, 0x9e, 0x09, + 0x35, 0xf2, 0x52, 0x2c, 0xde, 0x83, 0xf5, 0xd8, 0xe7, 0x92, 0xfa, 0x61, 0x5b, 0x0c, 0xba, 0x5d, + 0x22, 0x44, 0x75, 0xa5, 0x81, 0x9a, 0x05, 0x6f, 0xcd, 0x98, 0x4f, 0xb4, 0xb5, 0xf6, 0x08, 0x4a, + 0x99, 0xb4, 0xb8, 0x0c, 0xf9, 0xd7, 0x64, 0x64, 0xda, 0x91, 0xfc, 0xc4, 0xb7, 0x61, 0x65, 0xe8, + 0x87, 0x03, 0xdd, 0x87, 0xa2, 0xa7, 0x0f, 0xfb, 0xb9, 0x87, 0xc8, 0xba, 0x03, 0x9b, 0x33, 0x44, + 0x44, 0xcc, 0x22, 0x41, 0xac, 0x0f, 0x08, 0xb6, 0xa6, 0x7c, 0xc7, 0x3a, 0xef, 0x21, 0xe7, 0x8c, + 0x0b, 0xdc, 0x87, 0xf2, 0x58, 0x4f, 0x6d, 0xa2, 0x6c, 0x55, 0xa4, 0xf8, 0x3d, 0xbd, 0xbc, 0x5f, + 0x13, 0xa1, 0xc6, 0xe4, 0xf5, 0x51, 0xf7, 0x61, 0x2d, 0x9c, 0x30, 0xd6, 0xbe, 0x83, 0x5b, 0x73, + 0x60, 0x59, 0xb6, 0x2b, 0x9a, 0x6d, 0x33, 0xcb, 0xb6, 0xe4, 0xe2, 0xb4, 0x18, 0x1e, 0x77, 0xed, + 0x13, 0x25, 0xc3, 0x6c, 0x07, 0xfe, 0x44, 0xb0, 0x71, 0x44, 0x85, 0x9c, 0xd5, 0xd6, 0x0e, 0x94, + 0x62, 0xce, 0xbe, 0x27, 0x5d, 0xd9, 0xa6, 0x3d, 0x4d, 0xad, 0xe8, 0x81, 0x31, 0x7d, 0xdd, 0x13, + 0xf8, 0x2e, 0xac, 0xa5, 0x92, 0x51, 0x0a, 0x14, 0xd5, 0x82, 0xc2, 0xdc, 0x48, 0xad, 0x89, 0x0e, + 0x05, 0xae, 0xc0, 0xea, 0x2b, 0x1a, 0x4a, 0xc2, 0x4d, 0xfb, 0xcd, 0x29, 0xd1, 0x2e, 0xe3, 0x3d, + 0xc2, 0xdb, 0x9d, 0x51, 0x35, 0xaf, 0xb5, 0xab, 0xce, 0x07, 0x23, 0x5c, 0x87, 0x62, 0xec, 0x07, + 0xa4, 0x2d, 0xe8, 0x1b, 0x52, 0xbd, 0xa6, 0xa8, 0x15, 0x12, 0xc3, 0x09, 0x7d, 0x43, 0xf0, 0x36, + 0x80, 0x72, 0x4a, 0xf6, 0x9a, 0x44, 0x4a, 0x12, 0x45, 0x4f, 0xc1, 0xbf, 0x4d, 0x0c, 0xd6, 0x39, + 0x54, 0xa6, 0xf9, 0xe8, 0x2f, 0x9a, 0xd5, 0x21, 0xba, 0x82, 0x0e, 0x3f, 0x87, 0xf5, 0x88, 0xfc, + 0x28, 0xdb, 0x99, 0xa4, 0x9a, 0xc8, 0x8d, 0xc4, 0x7c, 0x3c, 0x4e, 0x4c, 0x60, 0x2f, 0x49, 0x3c, + 0x33, 0x58, 0xcf, 0x88, 0xe8, 0x72, 0x1a, 0x4b, 0xc6, 0xc7, 0xad, 0x9d, 0xe0, 0x87, 0x16, 0xf2, + 0xcb, 0x4d, 0xf3, 0xfb, 0x0d, 0x41, 0xf3, 0xf2, 0x3c, 0x86, 0xf2, 0x4b, 0xb8, 0x3d, 0xfe, 0x44, + 0xbd, 0x0b, 0xbf, 0xe1, 0xbf, 0xb7, 0x70, 0x21, 0x5c, 0xc4, 0xf3, 0x6e, 0xf1, 0xd9, 0x1c, 0x57, + 0xe8, 0xcb, 0xba, 0xf9, 0x20, 0x63, 0xfe, 0x15, 0x58, 0x8d, 0x7d, 0x4e, 0x22, 0x69, 0xa6, 0xd4, + 0x9c, 0x26, 0xfb, 0x92, 0x5b, 0xd8, 0x97, 0xfc, 0x74, 0x5f, 0x5e, 0x40, 0xf9, 0x22, 0x8d, 0xa1, + 0x5f, 0x87, 0x62, 0xba, 0x1e, 0xf5, 0x2e, 0x2b, 0x7a, 0x05, 0xb3, 0x1f, 0x97, 0xae, 0xdf, 0xfd, + 0x7b, 0x05, 0xca, 0x47, 0x5a, 0x20, 0x27, 0x84, 0x0f, 0x69, 0x97, 0x9c, 0xba, 0xf8, 0x1c, 0x8a, + 0xe3, 0x15, 0x8e, 0x77, 0xe7, 0xe8, 0x68, 0x7a, 0xc1, 0xd7, 0x2a, 0x29, 0x28, 0x7d, 0x2f, 0xec, + 0xc3, 0xe4, 0x31, 0xb1, 0xee, 0xbf, 0xff, 0xeb, 0xc3, 0xcf, 0xb9, 0xbd, 0xd6, 0x5d, 0x67, 0xe8, + 0x76, 0x88, 0xf4, 0xbf, 0x70, 0xde, 0xa6, 0x35, 0x3f, 0x31, 0xc3, 0x26, 0x9c, 0x56, 0xf2, 0x74, + 0x09, 0xa7, 0xf5, 0x0e, 0xff, 0x84, 0x60, 0x7d, 0x6a, 0x97, 0xe0, 0x7b, 0x4b, 0xef, 0xe7, 0x5a, + 0x6b, 0x19, 0xa8, 0xd9, 0x80, 0x5b, 0xaa, 0xb2, 0x8a, 0x75, 0x33, 0x79, 0x3a, 0xcd, 0x34, 0xec, + 0x9f, 0x27, 0xe0, 0x7d, 0xd4, 0xc2, 0xef, 0x11, 0xac, 0x4d, 0x0e, 0x1a, 0x6e, 0xce, 0x9b, 0xa7, + 0x79, 0xbb, 0xa5, 0x76, 0x6f, 0x09, 0xa4, 0xa9, 0xa2, 0xae, 0xaa, 0xd8, 0xb0, 0xca, 0xd9, 0x2a, + 0x42, 0x2a, 0x64, 0x52, 0xc4, 0xef, 0x08, 0x1a, 0x97, 0x0d, 0x03, 0xde, 0xff, 0x48, 0xb2, 0x25, + 0x26, 0xb5, 0xf6, 0xf8, 0x7f, 0xdd, 0x35, 0xa5, 0x37, 0x55, 0xe9, 0x16, 0x6e, 0x24, 0xa5, 0xf7, + 0x17, 0x95, 0xc8, 0xa1, 0x90, 0x8a, 0x17, 0x5b, 0x1f, 0xef, 0xcd, 0xb8, 0xac, 0xdd, 0x85, 0x18, + 0x93, 0x7e, 0x5b, 0xa5, 0xdf, 0xc4, 0x1b, 0x49, 0xfa, 0xb7, 0x7a, 0xc4, 0x9e, 0xb4, 0x9c, 0xd6, + 0x3b, 0x25, 0xa6, 0x83, 0x5f, 0x10, 0x6c, 0x74, 0x59, 0x7f, 0x36, 0xd2, 0xc1, 0x27, 0x46, 0xee, + 0xc7, 0x89, 0x52, 0x8f, 0xd1, 0xcb, 0x87, 0x06, 0x12, 0xb0, 0xd0, 0x8f, 0x02, 0x9b, 0xf1, 0xc0, + 0x09, 0x48, 0xa4, 0x74, 0xec, 0x68, 0x97, 0x1f, 0x53, 0x91, 0xf9, 0xa3, 0xf5, 0xd8, 0xfc, 0xfc, + 0x17, 0xa1, 0x5f, 0x73, 0x9b, 0x5f, 0xe9, 0xdb, 0x4f, 0x43, 0x36, 0xe8, 0xd9, 0x26, 0xb4, 0x7d, + 0xea, 0xfe, 0x91, 0x7a, 0xce, 0x94, 0xe7, 0xcc, 0x78, 0xce, 0x4e, 0xdd, 0xce, 0xaa, 0x8a, 0xfd, + 0xe5, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xfd, 0x96, 0xc5, 0x3e, 0x3a, 0x0a, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/logging/v2/logging_config.pb.go b/vendor/google.golang.org/genproto/googleapis/logging/v2/logging_config.pb.go index f96a1a5..00fd85e 100644 --- a/vendor/google.golang.org/genproto/googleapis/logging/v2/logging_config.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/logging/v2/logging_config.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/logging/v2/logging_config.proto -// DO NOT EDIT! package logging @@ -9,6 +8,7 @@ import fmt "fmt" import math "math" import _ "google.golang.org/genproto/googleapis/api/annotations" import google_protobuf5 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf6 "google.golang.org/genproto/protobuf/field_mask" import google_protobuf4 "github.com/golang/protobuf/ptypes/timestamp" import ( @@ -77,16 +77,12 @@ type LogSink struct { // Optional. // An [advanced logs filter](/logging/docs/view/advanced_filters). The only // exported log entries are those that are in the resource owning the sink and - // that match the filter. The filter must use the log entry format specified - // by the `output_version_format` parameter. For example, in the v2 format: + // that match the filter. For example: // // logName="projects/[PROJECT_ID]/logs/[LOG_ID]" AND severity>=ERROR Filter string `protobuf:"bytes,5,opt,name=filter" json:"filter,omitempty"` - // Optional. The log entry format to use for this sink's exported log - // entries. The v2 format is used by default. - // **The v1 format is deprecated** and should be used only as part of a - // migration effort to v2. - // See [Migration to the v2 API](/logging/docs/api/v2/migration-to-v2). + // Deprecated. The log entry format to use for this sink's exported log + // entries. The v2 format is used by default and cannot be changed. OutputVersionFormat LogSink_VersionFormat `protobuf:"varint,6,opt,name=output_version_format,json=outputVersionFormat,enum=google.logging.v2.LogSink_VersionFormat" json:"output_version_format,omitempty"` // Output only. An IAM identity—a service account or group—under // which Stackdriver Logging writes the exported log entries to the sink's @@ -117,16 +113,9 @@ type LogSink struct { // logName:("projects/test-project1/" OR "projects/test-project2/") AND // resource.type=gce_instance IncludeChildren bool `protobuf:"varint,9,opt,name=include_children,json=includeChildren" json:"include_children,omitempty"` - // Optional. The time at which this sink will begin exporting log entries. - // Log entries are exported only if their timestamp is not earlier than the - // start time. The default value of this field is the time the sink is - // created or updated. + // Deprecated. This field is ignored when creating or updating sinks. StartTime *google_protobuf4.Timestamp `protobuf:"bytes,10,opt,name=start_time,json=startTime" json:"start_time,omitempty"` - // Optional. The time at which this sink will stop exporting log entries. Log - // entries are exported only if their timestamp is earlier than the end time. - // If this field is not supplied, there is no end time. If both a start time - // and an end time are provided, then the end time must be later than the - // start time. + // Deprecated. This field is ignored when creating or updating sinks. EndTime *google_protobuf4.Timestamp `protobuf:"bytes,11,opt,name=end_time,json=endTime" json:"end_time,omitempty"` } @@ -358,8 +347,7 @@ type UpdateSinkRequest struct { // Example: `"projects/my-project-id/sinks/my-sink-id"`. SinkName string `protobuf:"bytes,1,opt,name=sink_name,json=sinkName" json:"sink_name,omitempty"` // Required. The updated sink, whose name is the same identifier that appears - // as part of `sink_name`. If `sink_name` does not exist, then - // this method creates a new sink. + // as part of `sink_name`. Sink *LogSink `protobuf:"bytes,2,opt,name=sink" json:"sink,omitempty"` // Optional. See // [sinks.create](/logging/docs/api/reference/rest/v2/projects.sinks/create) @@ -371,8 +359,24 @@ type UpdateSinkRequest struct { // then there is no change to the sink's `writer_identity`. // + If the old value is false and the new value is true, then // `writer_identity` is changed to a unique service account. - // + It is an error if the old value is true and the new value is false. + // + It is an error if the old value is true and the new value is + // set to false or defaulted to false. UniqueWriterIdentity bool `protobuf:"varint,3,opt,name=unique_writer_identity,json=uniqueWriterIdentity" json:"unique_writer_identity,omitempty"` + // Optional. Field mask that specifies the fields in `sink` that need + // an update. A sink field will be overwritten if, and only if, it is + // in the update mask. `name` and output only fields cannot be updated. + // + // An empty updateMask is temporarily treated as using the following mask + // for backwards compatibility purposes: + // destination,filter,includeChildren + // At some point in the future, behavior will be removed and specifying an + // empty updateMask will be an error. + // + // For a detailed `FieldMask` definition, see + // https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#fieldmask + // + // Example: `updateMask=filter`. + UpdateMask *google_protobuf6.FieldMask `protobuf:"bytes,4,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` } func (m *UpdateSinkRequest) Reset() { *m = UpdateSinkRequest{} } @@ -401,6 +405,13 @@ func (m *UpdateSinkRequest) GetUniqueWriterIdentity() bool { return false } +func (m *UpdateSinkRequest) GetUpdateMask() *google_protobuf6.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + // The parameters to `DeleteSink`. type DeleteSinkRequest struct { // Required. The full resource name of the sink to delete, including the @@ -427,6 +438,279 @@ func (m *DeleteSinkRequest) GetSinkName() string { return "" } +// Specifies a set of log entries that are not to be stored in Stackdriver +// Logging. If your project receives a large volume of logs, you might be able +// to use exclusions to reduce your chargeable logs. Exclusions are processed +// after log sinks, so you can export log entries before they are excluded. +// Audit log entries and log entries from Amazon Web Services are never +// excluded. +type LogExclusion struct { + // Required. A client-assigned identifier, such as + // `"load-balancer-exclusion"`. Identifiers are limited to 100 characters and + // can include only letters, digits, underscores, hyphens, and periods. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Optional. A description of this exclusion. + Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` + // Required. + // An [advanced logs filter](/logging/docs/view/advanced_filters) + // that matches the log entries to be excluded. By using the + // [sample function](/logging/docs/view/advanced_filters#sample), + // you can exclude less than 100% of the matching log entries. + // For example, the following filter matches 99% of low-severity log + // entries from load balancers: + // + // "resource.type=http_load_balancer severity= 0. Any values < 0 are treated as + // no data. While delta metrics are accepted by this alignment special care + // should be taken that the values for the metric will always be positive. + // The output is a gauge metric with value type + // [DOUBLE][google.api.MetricDescriptor.ValueType.DOUBLE]. + Aggregation_ALIGN_PERCENT_CHANGE Aggregation_Aligner = 23 ) var Aggregation_Aligner_name = map[int32]string{ @@ -177,36 +248,40 @@ var Aggregation_Aligner_name = map[int32]string{ 14: "ALIGN_SUM", 15: "ALIGN_STDDEV", 16: "ALIGN_COUNT_TRUE", + 24: "ALIGN_COUNT_FALSE", 17: "ALIGN_FRACTION_TRUE", 18: "ALIGN_PERCENTILE_99", 19: "ALIGN_PERCENTILE_95", 20: "ALIGN_PERCENTILE_50", 21: "ALIGN_PERCENTILE_05", + 23: "ALIGN_PERCENT_CHANGE", } var Aggregation_Aligner_value = map[string]int32{ - "ALIGN_NONE": 0, - "ALIGN_DELTA": 1, - "ALIGN_RATE": 2, - "ALIGN_INTERPOLATE": 3, - "ALIGN_NEXT_OLDER": 4, - "ALIGN_MIN": 10, - "ALIGN_MAX": 11, - "ALIGN_MEAN": 12, - "ALIGN_COUNT": 13, - "ALIGN_SUM": 14, - "ALIGN_STDDEV": 15, - "ALIGN_COUNT_TRUE": 16, - "ALIGN_FRACTION_TRUE": 17, - "ALIGN_PERCENTILE_99": 18, - "ALIGN_PERCENTILE_95": 19, - "ALIGN_PERCENTILE_50": 20, - "ALIGN_PERCENTILE_05": 21, + "ALIGN_NONE": 0, + "ALIGN_DELTA": 1, + "ALIGN_RATE": 2, + "ALIGN_INTERPOLATE": 3, + "ALIGN_NEXT_OLDER": 4, + "ALIGN_MIN": 10, + "ALIGN_MAX": 11, + "ALIGN_MEAN": 12, + "ALIGN_COUNT": 13, + "ALIGN_SUM": 14, + "ALIGN_STDDEV": 15, + "ALIGN_COUNT_TRUE": 16, + "ALIGN_COUNT_FALSE": 24, + "ALIGN_FRACTION_TRUE": 17, + "ALIGN_PERCENTILE_99": 18, + "ALIGN_PERCENTILE_95": 19, + "ALIGN_PERCENTILE_50": 20, + "ALIGN_PERCENTILE_05": 21, + "ALIGN_PERCENT_CHANGE": 23, } func (x Aggregation_Aligner) String() string { return proto.EnumName(Aggregation_Aligner_name, int32(x)) } -func (Aggregation_Aligner) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} } +func (Aggregation_Aligner) EnumDescriptor() ([]byte, []int) { return fileDescriptor2, []int{2, 0} } // A Reducer describes how to aggregate data points from multiple // time series into a single time series. @@ -252,6 +327,11 @@ const ( // and gauge metrics of Boolean value type. The value type of // the output is [INT64][google.api.MetricDescriptor.ValueType.INT64]. Aggregation_REDUCE_COUNT_TRUE Aggregation_Reducer = 7 + // Reduce by computing the count of False-valued data points across time + // series for each alignment period. This reducer is valid for delta + // and gauge metrics of Boolean value type. The value type of + // the output is [INT64][google.api.MetricDescriptor.ValueType.INT64]. + Aggregation_REDUCE_COUNT_FALSE Aggregation_Reducer = 15 // Reduce by computing the fraction of True-valued data points across time // series for each alignment period. This reducer is valid for delta // and gauge metrics of Boolean value type. The output value is in the @@ -289,6 +369,7 @@ var Aggregation_Reducer_name = map[int32]string{ 5: "REDUCE_STDDEV", 6: "REDUCE_COUNT", 7: "REDUCE_COUNT_TRUE", + 15: "REDUCE_COUNT_FALSE", 8: "REDUCE_FRACTION_TRUE", 9: "REDUCE_PERCENTILE_99", 10: "REDUCE_PERCENTILE_95", @@ -304,6 +385,7 @@ var Aggregation_Reducer_value = map[string]int32{ "REDUCE_STDDEV": 5, "REDUCE_COUNT": 6, "REDUCE_COUNT_TRUE": 7, + "REDUCE_COUNT_FALSE": 15, "REDUCE_FRACTION_TRUE": 8, "REDUCE_PERCENTILE_99": 9, "REDUCE_PERCENTILE_95": 10, @@ -314,7 +396,7 @@ var Aggregation_Reducer_value = map[string]int32{ func (x Aggregation_Reducer) String() string { return proto.EnumName(Aggregation_Reducer_name, int32(x)) } -func (Aggregation_Reducer) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 1} } +func (Aggregation_Reducer) EnumDescriptor() ([]byte, []int) { return fileDescriptor2, []int{2, 1} } // A single strongly-typed value. type TypedValue struct { @@ -332,7 +414,7 @@ type TypedValue struct { func (m *TypedValue) Reset() { *m = TypedValue{} } func (m *TypedValue) String() string { return proto.CompactTextString(m) } func (*TypedValue) ProtoMessage() {} -func (*TypedValue) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } +func (*TypedValue) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } type isTypedValue_Value interface { isTypedValue_Value() @@ -533,7 +615,7 @@ type TimeInterval struct { func (m *TimeInterval) Reset() { *m = TimeInterval{} } func (m *TimeInterval) String() string { return proto.CompactTextString(m) } func (*TimeInterval) ProtoMessage() {} -func (*TimeInterval) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } +func (*TimeInterval) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{1} } func (m *TimeInterval) GetEndTime() *google_protobuf2.Timestamp { if m != nil { @@ -551,8 +633,9 @@ func (m *TimeInterval) GetStartTime() *google_protobuf2.Timestamp { // Describes how to combine multiple time series to provide different views of // the data. Aggregation consists of an alignment step on individual time -// series (`per_series_aligner`) followed by an optional reduction of the data -// across different time series (`cross_series_reducer`). For more details, see +// series (`alignment_period` and `per_series_aligner`) followed by an optional +// reduction step of the data across the aligned time series +// (`cross_series_reducer` and `group_by_fields`). For more details, see // [Aggregation](/monitoring/api/learn_more#aggregation). type Aggregation struct { // The alignment period for per-[time series][google.monitoring.v3.TimeSeries] @@ -608,7 +691,7 @@ type Aggregation struct { func (m *Aggregation) Reset() { *m = Aggregation{} } func (m *Aggregation) String() string { return proto.CompactTextString(m) } func (*Aggregation) ProtoMessage() {} -func (*Aggregation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } +func (*Aggregation) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{2} } func (m *Aggregation) GetAlignmentPeriod() *google_protobuf3.Duration { if m != nil { @@ -642,61 +725,74 @@ func init() { proto.RegisterType((*TypedValue)(nil), "google.monitoring.v3.TypedValue") proto.RegisterType((*TimeInterval)(nil), "google.monitoring.v3.TimeInterval") proto.RegisterType((*Aggregation)(nil), "google.monitoring.v3.Aggregation") + proto.RegisterEnum("google.monitoring.v3.ComparisonType", ComparisonType_name, ComparisonType_value) + proto.RegisterEnum("google.monitoring.v3.ServiceTier", ServiceTier_name, ServiceTier_value) proto.RegisterEnum("google.monitoring.v3.Aggregation_Aligner", Aggregation_Aligner_name, Aggregation_Aligner_value) proto.RegisterEnum("google.monitoring.v3.Aggregation_Reducer", Aggregation_Reducer_name, Aggregation_Reducer_value) } -func init() { proto.RegisterFile("google/monitoring/v3/common.proto", fileDescriptor0) } - -var fileDescriptor0 = []byte{ - // 780 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x55, 0xdd, 0x6a, 0xe3, 0x46, - 0x14, 0xb6, 0xec, 0x64, 0x1d, 0x1f, 0x39, 0xf1, 0x64, 0xd6, 0x4b, 0xdd, 0x40, 0xbb, 0x5e, 0x17, - 0x8a, 0x7b, 0x23, 0x87, 0xa4, 0x2e, 0x84, 0x42, 0x41, 0xb1, 0xb5, 0x1b, 0x83, 0x23, 0x9b, 0x59, - 0x25, 0x0d, 0xed, 0x85, 0x90, 0xa3, 0x59, 0x21, 0x90, 0x35, 0x62, 0x24, 0x19, 0x72, 0xd7, 0xab, - 0xbe, 0x43, 0x5f, 0x61, 0x1f, 0xa9, 0x0f, 0xd1, 0x67, 0x28, 0x9a, 0x19, 0xad, 0x94, 0xd6, 0xa5, - 0x7b, 0xf9, 0xfd, 0x9c, 0x6f, 0x74, 0xbe, 0x91, 0x6c, 0x78, 0x13, 0x30, 0x16, 0x44, 0x74, 0xb2, - 0x65, 0x71, 0x98, 0x31, 0x1e, 0xc6, 0xc1, 0x64, 0x77, 0x39, 0x79, 0x64, 0xdb, 0x2d, 0x8b, 0x8d, - 0x84, 0xb3, 0x8c, 0xe1, 0xbe, 0xb4, 0x18, 0x95, 0xc5, 0xd8, 0x5d, 0x9e, 0x7d, 0xa5, 0x06, 0xbd, - 0x24, 0x9c, 0xf8, 0x61, 0x9a, 0xf1, 0x70, 0x93, 0x67, 0x61, 0x39, 0x74, 0xf6, 0xb5, 0x92, 0x05, - 0xda, 0xe4, 0x1f, 0x26, 0x7e, 0xce, 0xbd, 0x9a, 0xfe, 0xfa, 0x9f, 0x7a, 0x16, 0x6e, 0x69, 0x9a, - 0x79, 0xdb, 0x44, 0x1a, 0x46, 0x7f, 0x69, 0x00, 0xce, 0x53, 0x42, 0xfd, 0x7b, 0x2f, 0xca, 0x29, - 0x7e, 0x0d, 0xb0, 0x61, 0x2c, 0x72, 0x77, 0x05, 0x1a, 0x68, 0x43, 0x6d, 0x7c, 0x74, 0xd3, 0x20, - 0x9d, 0x82, 0x93, 0x86, 0x37, 0xa0, 0x87, 0x71, 0xf6, 0xc3, 0xf7, 0xca, 0xd1, 0x1c, 0x6a, 0xe3, - 0xd6, 0x4d, 0x83, 0x80, 0x20, 0xa5, 0xe5, 0x1b, 0xe8, 0xfa, 0x2c, 0xdf, 0x44, 0x54, 0x79, 0x5a, - 0x43, 0x6d, 0xac, 0xdd, 0x34, 0x88, 0x2e, 0xd9, 0x4f, 0xa6, 0x62, 0x99, 0x38, 0x50, 0xa6, 0x83, - 0xa1, 0x36, 0xee, 0x14, 0x26, 0xc9, 0x4a, 0xd3, 0x02, 0x70, 0x7d, 0x67, 0x65, 0x3d, 0x1c, 0x6a, - 0x63, 0xfd, 0x62, 0x60, 0xa8, 0xbe, 0xbc, 0x24, 0x34, 0xe6, 0x35, 0xd7, 0x4d, 0x83, 0x9c, 0xd6, - 0xa7, 0x44, 0xd4, 0x75, 0x1b, 0x0e, 0xc5, 0xf4, 0xe8, 0x37, 0x0d, 0xba, 0x4e, 0xb8, 0xa5, 0x8b, - 0x38, 0xa3, 0x7c, 0xe7, 0x45, 0x78, 0x0a, 0x47, 0x34, 0xf6, 0xdd, 0xa2, 0x18, 0xb1, 0x8e, 0x7e, - 0x71, 0x56, 0x46, 0x97, 0xad, 0x19, 0x4e, 0xd9, 0x1a, 0x69, 0xd3, 0xd8, 0x2f, 0x10, 0xbe, 0x02, - 0x48, 0x33, 0x8f, 0x67, 0x72, 0x50, 0xfb, 0xdf, 0xc1, 0x8e, 0x70, 0x17, 0x78, 0xf4, 0xb1, 0x0d, - 0xba, 0x19, 0x04, 0x9c, 0x06, 0xe2, 0xaa, 0xf0, 0x1c, 0x90, 0x17, 0x85, 0x41, 0xbc, 0xa5, 0x71, - 0xe6, 0x26, 0x94, 0x87, 0xcc, 0x57, 0x81, 0x5f, 0xfe, 0x2b, 0x70, 0xae, 0xee, 0x97, 0xf4, 0x3e, - 0x8d, 0xac, 0xc5, 0x04, 0xfe, 0x19, 0x70, 0x42, 0xb9, 0x9b, 0x52, 0x1e, 0xd2, 0xd4, 0x15, 0x2a, - 0xe5, 0x62, 0xa3, 0x93, 0x8b, 0xef, 0x8c, 0x7d, 0x2f, 0x97, 0x51, 0x7b, 0x08, 0xc3, 0x94, 0x03, - 0x04, 0x25, 0x94, 0xbf, 0x17, 0x19, 0x8a, 0xc1, 0xbf, 0x42, 0xff, 0x91, 0xb3, 0x34, 0x2d, 0xa3, - 0x39, 0xf5, 0xf3, 0x47, 0xca, 0xc5, 0x95, 0x7d, 0x56, 0x34, 0x91, 0x03, 0x04, 0x8b, 0x18, 0x19, - 0xae, 0x38, 0xfc, 0x2d, 0xf4, 0x02, 0xce, 0xf2, 0xc4, 0xdd, 0x3c, 0xb9, 0x1f, 0x42, 0x1a, 0xf9, - 0xe9, 0xe0, 0x70, 0xd8, 0x1a, 0x77, 0xc8, 0xb1, 0xa0, 0xaf, 0x9f, 0xde, 0x0a, 0x72, 0xf4, 0x67, - 0x13, 0xda, 0xe5, 0x03, 0x9d, 0x00, 0x98, 0xcb, 0xc5, 0x3b, 0xdb, 0xb5, 0x57, 0xb6, 0x85, 0x1a, - 0xb8, 0x07, 0xba, 0xc4, 0x73, 0x6b, 0xe9, 0x98, 0x48, 0xab, 0x0c, 0xc4, 0x74, 0x2c, 0xd4, 0xc4, - 0xaf, 0xe0, 0x54, 0xe2, 0x85, 0xed, 0x58, 0x64, 0xbd, 0x5a, 0x16, 0x74, 0x0b, 0xf7, 0x01, 0xa9, - 0x1c, 0xeb, 0xc1, 0x71, 0x57, 0xcb, 0xb9, 0x45, 0xd0, 0x01, 0x3e, 0x86, 0x8e, 0x64, 0x6f, 0x17, - 0x36, 0x82, 0x1a, 0x34, 0x1f, 0x90, 0x5e, 0x45, 0xdf, 0x5a, 0xa6, 0x8d, 0xba, 0xd5, 0xd9, 0xb3, - 0xd5, 0x9d, 0xed, 0xa0, 0xe3, 0xca, 0xff, 0xfe, 0xee, 0x16, 0x9d, 0x60, 0x04, 0x5d, 0x05, 0x9d, - 0xf9, 0xdc, 0xba, 0x47, 0xbd, 0xea, 0x54, 0x31, 0xe1, 0x3a, 0xe4, 0xce, 0x42, 0x08, 0x7f, 0x01, - 0x2f, 0x25, 0xfb, 0x96, 0x98, 0x33, 0x67, 0xb1, 0xb2, 0xa5, 0x70, 0x5a, 0x09, 0x6b, 0x8b, 0xcc, - 0x2c, 0xdb, 0x59, 0x2c, 0x2d, 0xf7, 0xea, 0x0a, 0xe1, 0xfd, 0xc2, 0x14, 0xbd, 0xdc, 0x2b, 0x4c, - 0xcf, 0x51, 0x7f, 0xaf, 0x70, 0x3e, 0x45, 0xaf, 0x46, 0x7f, 0x34, 0xa1, 0x5d, 0x5e, 0x48, 0x0f, - 0x74, 0x62, 0xcd, 0xef, 0x66, 0x56, 0xad, 0x5d, 0x45, 0x88, 0x95, 0x45, 0xbb, 0x25, 0xb1, 0xb0, - 0x51, 0xb3, 0x8e, 0xcd, 0x07, 0xd4, 0xaa, 0xe1, 0xa2, 0x82, 0x03, 0x7c, 0x0a, 0xc7, 0x25, 0x96, - 0x1d, 0x1c, 0x16, 0xad, 0x28, 0x4a, 0xd6, 0xf6, 0xa2, 0xb8, 0xa2, 0x3a, 0x23, 0xb7, 0x6f, 0xe3, - 0x01, 0xf4, 0x15, 0xfd, 0xbc, 0x97, 0xa3, 0x9a, 0xf2, 0xbc, 0x98, 0xce, 0x7f, 0x28, 0x53, 0x04, - 0xfb, 0x95, 0xe9, 0x39, 0xd2, 0xf7, 0x2b, 0xe7, 0x53, 0xd4, 0xbd, 0xfe, 0x5d, 0x83, 0xc1, 0x23, - 0xdb, 0xee, 0x7d, 0xcb, 0xaf, 0xf5, 0x99, 0xf8, 0x05, 0x5f, 0x17, 0x5f, 0xe7, 0x5a, 0xfb, 0xe5, - 0x27, 0x65, 0x0a, 0x58, 0xe4, 0xc5, 0x81, 0xc1, 0x78, 0x30, 0x09, 0x68, 0x2c, 0xbe, 0xdd, 0x89, - 0x94, 0xbc, 0x24, 0x4c, 0x9f, 0xff, 0x09, 0xfc, 0x58, 0xa1, 0x8f, 0xcd, 0xb3, 0x77, 0x32, 0x60, - 0x16, 0xb1, 0xdc, 0x37, 0x6e, 0xab, 0xb3, 0xee, 0x2f, 0x37, 0x2f, 0x44, 0xce, 0xe5, 0xdf, 0x01, - 0x00, 0x00, 0xff, 0xff, 0x53, 0x47, 0x59, 0x88, 0x4b, 0x06, 0x00, 0x00, +func init() { proto.RegisterFile("google/monitoring/v3/common.proto", fileDescriptor2) } + +var fileDescriptor2 = []byte{ + // 954 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x95, 0xc1, 0x6e, 0xe3, 0x44, + 0x18, 0xc7, 0xe3, 0xa4, 0x6d, 0x9a, 0xcf, 0x6d, 0x33, 0x9d, 0xed, 0x76, 0x43, 0xb5, 0xb0, 0xd9, + 0x22, 0xa1, 0xb0, 0x07, 0xa7, 0x6a, 0x09, 0x52, 0x85, 0x84, 0xe4, 0x3a, 0xd3, 0xd6, 0x52, 0xe2, + 0x84, 0x89, 0x53, 0x2a, 0x28, 0xb2, 0x9c, 0x66, 0xd6, 0xb2, 0x94, 0x78, 0x2c, 0xdb, 0xa9, 0xd4, + 0x1b, 0x77, 0xde, 0x81, 0x0b, 0x37, 0x6e, 0xbc, 0x06, 0x0f, 0xc3, 0x85, 0x17, 0x40, 0x9e, 0x71, + 0xd6, 0x4e, 0x08, 0x62, 0x8f, 0xdf, 0xef, 0xff, 0xff, 0xbe, 0x99, 0xf9, 0x8f, 0x35, 0x86, 0xb7, + 0x1e, 0xe7, 0xde, 0x8c, 0xb5, 0xe7, 0x3c, 0xf0, 0x13, 0x1e, 0xf9, 0x81, 0xd7, 0x7e, 0xba, 0x68, + 0x3f, 0xf2, 0xf9, 0x9c, 0x07, 0x5a, 0x18, 0xf1, 0x84, 0xe3, 0x23, 0x69, 0xd1, 0x72, 0x8b, 0xf6, + 0x74, 0x71, 0xf2, 0x3a, 0x6b, 0x74, 0x43, 0xbf, 0xed, 0x06, 0x01, 0x4f, 0xdc, 0xc4, 0xe7, 0x41, + 0x2c, 0x7b, 0x4e, 0x3e, 0x2d, 0xa8, 0x53, 0x3f, 0x4e, 0x22, 0x7f, 0xb2, 0x48, 0xf5, 0x4c, 0xfe, + 0x2c, 0x93, 0x45, 0x35, 0x59, 0xbc, 0x6f, 0x4f, 0x17, 0x91, 0x5b, 0xd0, 0xdf, 0xac, 0xeb, 0x89, + 0x3f, 0x67, 0x71, 0xe2, 0xce, 0x43, 0x69, 0x38, 0xfd, 0x4b, 0x01, 0xb0, 0x9f, 0x43, 0x36, 0xbd, + 0x73, 0x67, 0x0b, 0x86, 0xdf, 0x00, 0x4c, 0x38, 0x9f, 0x39, 0x4f, 0x69, 0xd5, 0x50, 0x9a, 0x4a, + 0x6b, 0xf7, 0xb6, 0x44, 0x6b, 0x29, 0x93, 0x86, 0xb7, 0xa0, 0xfa, 0x41, 0xf2, 0xf5, 0x57, 0x99, + 0xa3, 0xdc, 0x54, 0x5a, 0x95, 0xdb, 0x12, 0x05, 0x01, 0xa5, 0xe5, 0x73, 0xd8, 0x9b, 0xf2, 0xc5, + 0x64, 0xc6, 0x32, 0x4f, 0xa5, 0xa9, 0xb4, 0x94, 0xdb, 0x12, 0x55, 0x25, 0xfd, 0x60, 0x4a, 0x0f, + 0x13, 0x78, 0x99, 0x69, 0xab, 0xa9, 0xb4, 0x6a, 0xa9, 0x49, 0x52, 0x69, 0x32, 0x01, 0x17, 0xcf, + 0x9c, 0x59, 0xb7, 0x9b, 0x4a, 0x4b, 0x3d, 0x6f, 0x68, 0x59, 0x9a, 0x6e, 0xe8, 0x6b, 0xdd, 0x82, + 0xeb, 0xb6, 0x44, 0x0f, 0x8b, 0x5d, 0x62, 0xd4, 0x55, 0x15, 0xb6, 0x45, 0xf7, 0xe9, 0xcf, 0x0a, + 0xec, 0xd9, 0xfe, 0x9c, 0x99, 0x41, 0xc2, 0xa2, 0x27, 0x77, 0x86, 0x3b, 0xb0, 0xcb, 0x82, 0xa9, + 0x93, 0x06, 0x23, 0x8e, 0xa3, 0x9e, 0x9f, 0x2c, 0x47, 0x2f, 0x53, 0xd3, 0xec, 0x65, 0x6a, 0xb4, + 0xca, 0x82, 0x69, 0x5a, 0xe1, 0x4b, 0x80, 0x38, 0x71, 0xa3, 0x44, 0x36, 0x2a, 0xff, 0xdb, 0x58, + 0x13, 0xee, 0xb4, 0x3e, 0xfd, 0xbb, 0x0a, 0xaa, 0xee, 0x79, 0x11, 0xf3, 0xc4, 0x55, 0xe1, 0x2e, + 0x20, 0x77, 0xe6, 0x7b, 0xc1, 0x9c, 0x05, 0x89, 0x13, 0xb2, 0xc8, 0xe7, 0xd3, 0x6c, 0xe0, 0x27, + 0xff, 0x1a, 0xd8, 0xcd, 0xee, 0x97, 0xd6, 0x3f, 0xb4, 0x0c, 0x45, 0x07, 0xfe, 0x1e, 0x70, 0xc8, + 0x22, 0x27, 0x66, 0x91, 0xcf, 0x62, 0x47, 0xa8, 0x2c, 0x12, 0x27, 0x3a, 0x38, 0xff, 0x52, 0xdb, + 0xf4, 0xe9, 0x69, 0x85, 0x4d, 0x68, 0xba, 0x6c, 0xa0, 0x28, 0x64, 0xd1, 0x48, 0xcc, 0xc8, 0x08, + 0xfe, 0x11, 0x8e, 0x1e, 0x23, 0x1e, 0xc7, 0xcb, 0xd1, 0x11, 0x9b, 0x2e, 0x1e, 0x59, 0x24, 0xae, + 0xec, 0xa3, 0x46, 0x53, 0xd9, 0x40, 0xb1, 0x18, 0x23, 0x87, 0x67, 0x0c, 0x7f, 0x01, 0x75, 0x2f, + 0xe2, 0x8b, 0xd0, 0x99, 0x3c, 0x3b, 0xef, 0x7d, 0x36, 0x9b, 0xc6, 0x8d, 0xed, 0x66, 0xa5, 0x55, + 0xa3, 0xfb, 0x02, 0x5f, 0x3d, 0x5f, 0x0b, 0x78, 0xfa, 0x4b, 0x05, 0xaa, 0xcb, 0x0d, 0x1d, 0x00, + 0xe8, 0x3d, 0xf3, 0xc6, 0x72, 0xac, 0x81, 0x45, 0x50, 0x09, 0xd7, 0x41, 0x95, 0x75, 0x97, 0xf4, + 0x6c, 0x1d, 0x29, 0xb9, 0x81, 0xea, 0x36, 0x41, 0x65, 0xfc, 0x12, 0x0e, 0x65, 0x6d, 0x5a, 0x36, + 0xa1, 0xc3, 0x41, 0x2f, 0xc5, 0x15, 0x7c, 0x04, 0x28, 0x9b, 0x43, 0xee, 0x6d, 0x67, 0xd0, 0xeb, + 0x12, 0x8a, 0xb6, 0xf0, 0x3e, 0xd4, 0x24, 0xed, 0x9b, 0x16, 0x82, 0x42, 0xa9, 0xdf, 0x23, 0x35, + 0x1f, 0xdd, 0x27, 0xba, 0x85, 0xf6, 0xf2, 0xb5, 0x8d, 0xc1, 0xd8, 0xb2, 0xd1, 0x7e, 0xee, 0x1f, + 0x8d, 0xfb, 0xe8, 0x00, 0x23, 0xd8, 0xcb, 0x4a, 0xbb, 0xdb, 0x25, 0x77, 0xa8, 0x9e, 0xaf, 0x2a, + 0x3a, 0x1c, 0x9b, 0x8e, 0x09, 0x42, 0xf9, 0x16, 0x25, 0xbd, 0xd6, 0x7b, 0x23, 0x82, 0x1a, 0xf8, + 0x15, 0xbc, 0x90, 0xf8, 0x9a, 0xea, 0x86, 0x6d, 0x0e, 0x2c, 0xe9, 0x3f, 0xcc, 0x85, 0x21, 0xa1, + 0x06, 0xb1, 0x6c, 0xb3, 0x47, 0x9c, 0xcb, 0x4b, 0x84, 0x37, 0x0b, 0x1d, 0xf4, 0x62, 0xa3, 0xd0, + 0x39, 0x43, 0x47, 0x1b, 0x85, 0xb3, 0x0e, 0x7a, 0x89, 0x1b, 0x70, 0xb4, 0x22, 0x38, 0xc6, 0xad, + 0x6e, 0xdd, 0x10, 0xf4, 0xea, 0xf4, 0x8f, 0x32, 0x54, 0x97, 0x37, 0x58, 0x07, 0x95, 0x92, 0xee, + 0xd8, 0x20, 0x85, 0xeb, 0xc8, 0x80, 0xc8, 0x48, 0x5c, 0xc7, 0x12, 0x98, 0x16, 0x2a, 0x17, 0x6b, + 0xfd, 0x1e, 0x55, 0x0a, 0x75, 0x9a, 0xd9, 0x16, 0x3e, 0x84, 0xfd, 0x65, 0x2d, 0x43, 0xdb, 0x4e, + 0x63, 0xcc, 0x90, 0xcc, 0x79, 0x27, 0x0d, 0xac, 0x48, 0x64, 0x2e, 0x55, 0x7c, 0x0c, 0x78, 0x05, + 0xcb, 0x20, 0xeb, 0xe9, 0x59, 0x32, 0xbe, 0x9a, 0xe4, 0x6e, 0x41, 0x59, 0x8d, 0xb2, 0xf6, 0x1f, + 0x4a, 0x07, 0xc1, 0x66, 0xa5, 0x73, 0x86, 0xd4, 0xcd, 0xca, 0x59, 0x07, 0xed, 0xbd, 0xfb, 0x55, + 0x81, 0x03, 0x83, 0xcf, 0x43, 0x37, 0xf2, 0x63, 0x1e, 0xa4, 0x6f, 0x2e, 0x3e, 0x81, 0x63, 0x63, + 0xd0, 0x1f, 0xea, 0xd4, 0x1c, 0x0d, 0x2c, 0x67, 0x6c, 0x8d, 0x86, 0xc4, 0x30, 0xaf, 0x4d, 0xd2, + 0x45, 0xa5, 0x34, 0x84, 0x82, 0x76, 0x63, 0x23, 0x65, 0x1d, 0xa5, 0x5f, 0xf6, 0x2a, 0xea, 0xd9, + 0xa8, 0xb2, 0x8e, 0x88, 0x0c, 0xb4, 0x80, 0xc8, 0x77, 0x68, 0x7b, 0x0d, 0x59, 0x04, 0xed, 0xbc, + 0xfb, 0x09, 0xd4, 0x11, 0x8b, 0x9e, 0xfc, 0x47, 0x66, 0xfb, 0x2c, 0xc2, 0xaf, 0xa1, 0x31, 0x22, + 0xf4, 0xce, 0x34, 0x88, 0x63, 0x9b, 0x84, 0xae, 0x6d, 0xef, 0x18, 0xf0, 0x8a, 0x7a, 0xa5, 0x8f, + 0x4c, 0x03, 0x29, 0xe9, 0xf9, 0x57, 0xf8, 0x90, 0x92, 0xbe, 0x39, 0xee, 0xa3, 0xf2, 0xd5, 0x6f, + 0x0a, 0x34, 0x1e, 0xf9, 0x7c, 0xe3, 0x73, 0x71, 0xa5, 0x1a, 0xe2, 0x47, 0x39, 0x4c, 0x9f, 0xb9, + 0xa1, 0xf2, 0xc3, 0xb7, 0x99, 0xc9, 0xe3, 0x33, 0x37, 0xf0, 0x34, 0x1e, 0x79, 0x6d, 0x8f, 0x05, + 0xe2, 0x11, 0x6c, 0x4b, 0xc9, 0x0d, 0xfd, 0x78, 0xf5, 0x5f, 0xfb, 0x4d, 0x5e, 0xfd, 0x5e, 0x3e, + 0xb9, 0x91, 0x03, 0x8c, 0x19, 0x5f, 0x4c, 0xb5, 0x7e, 0xbe, 0xd6, 0xdd, 0xc5, 0x9f, 0x4b, 0xf1, + 0x41, 0x88, 0x0f, 0xb9, 0xf8, 0x70, 0x77, 0x31, 0xd9, 0x11, 0x8b, 0x5c, 0xfc, 0x13, 0x00, 0x00, + 0xff, 0xff, 0xe2, 0x9f, 0x67, 0xb2, 0xcf, 0x07, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/monitoring/v3/group.pb.go b/vendor/google.golang.org/genproto/googleapis/monitoring/v3/group.pb.go index f1cad54..0afad7a 100644 --- a/vendor/google.golang.org/genproto/googleapis/monitoring/v3/group.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/monitoring/v3/group.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/monitoring/v3/group.proto -// DO NOT EDIT! package monitoring @@ -62,7 +61,7 @@ type Group struct { func (m *Group) Reset() { *m = Group{} } func (m *Group) String() string { return proto.CompactTextString(m) } func (*Group) ProtoMessage() {} -func (*Group) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } +func (*Group) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0} } func (m *Group) GetName() string { if m != nil { @@ -103,24 +102,25 @@ func init() { proto.RegisterType((*Group)(nil), "google.monitoring.v3.Group") } -func init() { proto.RegisterFile("google/monitoring/v3/group.proto", fileDescriptor1) } +func init() { proto.RegisterFile("google/monitoring/v3/group.proto", fileDescriptor3) } -var fileDescriptor1 = []byte{ - // 248 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x90, 0xc1, 0x4a, 0x03, 0x31, - 0x10, 0x86, 0x49, 0xb5, 0x8b, 0x9d, 0x7a, 0x0a, 0x22, 0x8b, 0x20, 0xae, 0x9e, 0x7a, 0x4a, 0x0e, - 0x7b, 0x14, 0x3c, 0xb4, 0x87, 0x9e, 0x94, 0xd2, 0x83, 0x07, 0x2f, 0x25, 0xb6, 0x31, 0x04, 0xb2, - 0x99, 0x90, 0xec, 0x2e, 0xf8, 0x00, 0xbe, 0x82, 0x0f, 0xe1, 0x53, 0xca, 0x4e, 0x16, 0x16, 0xc1, - 0x5b, 0xe6, 0xff, 0x3e, 0x26, 0x33, 0x03, 0x95, 0x41, 0x34, 0x4e, 0xcb, 0x06, 0xbd, 0x6d, 0x31, - 0x5a, 0x6f, 0x64, 0x5f, 0x4b, 0x13, 0xb1, 0x0b, 0x22, 0x44, 0x6c, 0x91, 0x5f, 0x65, 0x43, 0x4c, - 0x86, 0xe8, 0xeb, 0x87, 0x6f, 0x06, 0xf3, 0xed, 0x60, 0x71, 0x0e, 0xe7, 0x5e, 0x35, 0xba, 0x64, - 0x15, 0x5b, 0x2d, 0xf6, 0xf4, 0xe6, 0xf7, 0x70, 0x79, 0xb2, 0x29, 0x38, 0xf5, 0x79, 0x20, 0x36, - 0x23, 0xb6, 0x1c, 0xb3, 0x97, 0x41, 0xb9, 0x83, 0x65, 0x50, 0x51, 0xfb, 0x36, 0x1b, 0x67, 0x64, - 0x40, 0x8e, 0x48, 0xb8, 0x86, 0xe2, 0xc3, 0xba, 0x56, 0xc7, 0x72, 0x4e, 0x6c, 0xac, 0xf8, 0x2d, - 0x80, 0x4d, 0x87, 0xa3, 0xeb, 0xd2, 0xc0, 0x8a, 0x8a, 0xad, 0x2e, 0xf6, 0x0b, 0x9b, 0x36, 0x39, - 0x58, 0x7f, 0x31, 0x28, 0x8f, 0xd8, 0x88, 0xff, 0xa6, 0x5e, 0x03, 0x8d, 0xbc, 0x1b, 0xf6, 0xda, - 0xb1, 0xb7, 0xa7, 0xd1, 0x31, 0xe8, 0x94, 0x37, 0x02, 0xa3, 0x91, 0x46, 0x7b, 0xda, 0x5a, 0x66, - 0xa4, 0x82, 0x4d, 0x7f, 0x4f, 0xf3, 0x38, 0x55, 0x3f, 0xb3, 0x9b, 0x6d, 0x6e, 0xb0, 0x71, 0xd8, - 0x9d, 0xc4, 0xf3, 0xf4, 0xd5, 0x6b, 0xfd, 0x5e, 0x50, 0x9f, 0xfa, 0x37, 0x00, 0x00, 0xff, 0xff, - 0x0c, 0x22, 0x2a, 0x57, 0x61, 0x01, 0x00, 0x00, +var fileDescriptor3 = []byte{ + // 261 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x90, 0xcf, 0x4a, 0x2b, 0x31, + 0x14, 0x87, 0x49, 0xef, 0xed, 0x60, 0x4f, 0x5d, 0x0d, 0x22, 0x83, 0x20, 0x8e, 0xae, 0xba, 0xca, + 0x2c, 0xb2, 0x14, 0x5c, 0xb4, 0x8b, 0xae, 0x94, 0xd2, 0x45, 0x17, 0x32, 0x50, 0x62, 0x1b, 0x43, + 0x20, 0x93, 0x13, 0x92, 0x99, 0x82, 0x2f, 0xe2, 0x03, 0xb8, 0xf4, 0x51, 0x7c, 0x2a, 0x99, 0x93, + 0x91, 0x41, 0x70, 0x97, 0xf3, 0xfb, 0x3e, 0x72, 0xfe, 0x40, 0xa9, 0x11, 0xb5, 0x55, 0x55, 0x83, + 0xce, 0xb4, 0x18, 0x8c, 0xd3, 0xd5, 0x49, 0x54, 0x3a, 0x60, 0xe7, 0xb9, 0x0f, 0xd8, 0x62, 0x7e, + 0x91, 0x0c, 0x3e, 0x1a, 0xfc, 0x24, 0xee, 0xde, 0x19, 0x4c, 0xd7, 0xbd, 0x95, 0xe7, 0xf0, 0xdf, + 0xc9, 0x46, 0x15, 0xac, 0x64, 0x8b, 0xd9, 0x96, 0xde, 0xf9, 0x2d, 0x9c, 0x1f, 0x4d, 0xf4, 0x56, + 0xbe, 0xed, 0x89, 0x4d, 0x88, 0xcd, 0x87, 0xec, 0xa9, 0x57, 0x6e, 0x60, 0xee, 0x65, 0x50, 0xae, + 0x4d, 0xc6, 0x3f, 0x32, 0x20, 0x45, 0x24, 0x5c, 0x42, 0xf6, 0x6a, 0x6c, 0xab, 0x42, 0x31, 0x25, + 0x36, 0x54, 0xf9, 0x35, 0x80, 0x89, 0xfb, 0x83, 0xed, 0x62, 0xcf, 0xb2, 0x92, 0x2d, 0xce, 0xb6, + 0x33, 0x13, 0x57, 0x29, 0x58, 0x7e, 0x30, 0x28, 0x0e, 0xd8, 0xf0, 0xbf, 0xa6, 0x5e, 0x02, 0x8d, + 0xbc, 0xe9, 0xf7, 0xda, 0xb0, 0xe7, 0x87, 0xc1, 0xd1, 0x68, 0xa5, 0xd3, 0x1c, 0x83, 0xae, 0xb4, + 0x72, 0xb4, 0x75, 0x95, 0x90, 0xf4, 0x26, 0xfe, 0x3e, 0xcd, 0xfd, 0x58, 0x7d, 0x4e, 0xae, 0xd6, + 0xe9, 0x83, 0x95, 0xc5, 0xee, 0xc8, 0x1f, 0xc7, 0x56, 0x3b, 0xf1, 0xf5, 0x03, 0x6b, 0x82, 0xf5, + 0x08, 0xeb, 0x9d, 0x78, 0xc9, 0xa8, 0x89, 0xf8, 0x0e, 0x00, 0x00, 0xff, 0xff, 0x95, 0xd1, 0xa1, + 0x34, 0x7e, 0x01, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/monitoring/v3/group_service.pb.go b/vendor/google.golang.org/genproto/googleapis/monitoring/v3/group_service.pb.go index 0ffc3b6..de212a5 100644 --- a/vendor/google.golang.org/genproto/googleapis/monitoring/v3/group_service.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/monitoring/v3/group_service.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/monitoring/v3/group_service.proto -// DO NOT EDIT! package monitoring @@ -9,7 +8,7 @@ import fmt "fmt" import math "math" import _ "google.golang.org/genproto/googleapis/api/annotations" import google_api4 "google.golang.org/genproto/googleapis/api/monitoredres" -import google_protobuf4 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf5 "github.com/golang/protobuf/ptypes/empty" import ( context "golang.org/x/net/context" @@ -46,7 +45,7 @@ type ListGroupsRequest struct { func (m *ListGroupsRequest) Reset() { *m = ListGroupsRequest{} } func (m *ListGroupsRequest) String() string { return proto.CompactTextString(m) } func (*ListGroupsRequest) ProtoMessage() {} -func (*ListGroupsRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } +func (*ListGroupsRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{0} } type isListGroupsRequest_Filter interface { isListGroupsRequest_Filter() @@ -209,7 +208,7 @@ type ListGroupsResponse struct { func (m *ListGroupsResponse) Reset() { *m = ListGroupsResponse{} } func (m *ListGroupsResponse) String() string { return proto.CompactTextString(m) } func (*ListGroupsResponse) ProtoMessage() {} -func (*ListGroupsResponse) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{1} } +func (*ListGroupsResponse) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{1} } func (m *ListGroupsResponse) GetGroup() []*Group { if m != nil { @@ -235,7 +234,7 @@ type GetGroupRequest struct { func (m *GetGroupRequest) Reset() { *m = GetGroupRequest{} } func (m *GetGroupRequest) String() string { return proto.CompactTextString(m) } func (*GetGroupRequest) ProtoMessage() {} -func (*GetGroupRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{2} } +func (*GetGroupRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{2} } func (m *GetGroupRequest) GetName() string { if m != nil { @@ -259,7 +258,7 @@ type CreateGroupRequest struct { func (m *CreateGroupRequest) Reset() { *m = CreateGroupRequest{} } func (m *CreateGroupRequest) String() string { return proto.CompactTextString(m) } func (*CreateGroupRequest) ProtoMessage() {} -func (*CreateGroupRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{3} } +func (*CreateGroupRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{3} } func (m *CreateGroupRequest) GetName() string { if m != nil { @@ -294,7 +293,7 @@ type UpdateGroupRequest struct { func (m *UpdateGroupRequest) Reset() { *m = UpdateGroupRequest{} } func (m *UpdateGroupRequest) String() string { return proto.CompactTextString(m) } func (*UpdateGroupRequest) ProtoMessage() {} -func (*UpdateGroupRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{4} } +func (*UpdateGroupRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{4} } func (m *UpdateGroupRequest) GetGroup() *Group { if m != nil { @@ -320,7 +319,7 @@ type DeleteGroupRequest struct { func (m *DeleteGroupRequest) Reset() { *m = DeleteGroupRequest{} } func (m *DeleteGroupRequest) String() string { return proto.CompactTextString(m) } func (*DeleteGroupRequest) ProtoMessage() {} -func (*DeleteGroupRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{5} } +func (*DeleteGroupRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{5} } func (m *DeleteGroupRequest) GetName() string { if m != nil { @@ -358,7 +357,7 @@ type ListGroupMembersRequest struct { func (m *ListGroupMembersRequest) Reset() { *m = ListGroupMembersRequest{} } func (m *ListGroupMembersRequest) String() string { return proto.CompactTextString(m) } func (*ListGroupMembersRequest) ProtoMessage() {} -func (*ListGroupMembersRequest) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{6} } +func (*ListGroupMembersRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{6} } func (m *ListGroupMembersRequest) GetName() string { if m != nil { @@ -410,7 +409,7 @@ type ListGroupMembersResponse struct { func (m *ListGroupMembersResponse) Reset() { *m = ListGroupMembersResponse{} } func (m *ListGroupMembersResponse) String() string { return proto.CompactTextString(m) } func (*ListGroupMembersResponse) ProtoMessage() {} -func (*ListGroupMembersResponse) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{7} } +func (*ListGroupMembersResponse) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{7} } func (m *ListGroupMembersResponse) GetMembers() []*google_api4.MonitoredResource { if m != nil { @@ -465,7 +464,7 @@ type GroupServiceClient interface { // You can change any group attributes except `name`. UpdateGroup(ctx context.Context, in *UpdateGroupRequest, opts ...grpc.CallOption) (*Group, error) // Deletes an existing group. - DeleteGroup(ctx context.Context, in *DeleteGroupRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) + DeleteGroup(ctx context.Context, in *DeleteGroupRequest, opts ...grpc.CallOption) (*google_protobuf5.Empty, error) // Lists the monitored resources that are members of a group. ListGroupMembers(ctx context.Context, in *ListGroupMembersRequest, opts ...grpc.CallOption) (*ListGroupMembersResponse, error) } @@ -514,8 +513,8 @@ func (c *groupServiceClient) UpdateGroup(ctx context.Context, in *UpdateGroupReq return out, nil } -func (c *groupServiceClient) DeleteGroup(ctx context.Context, in *DeleteGroupRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) { - out := new(google_protobuf4.Empty) +func (c *groupServiceClient) DeleteGroup(ctx context.Context, in *DeleteGroupRequest, opts ...grpc.CallOption) (*google_protobuf5.Empty, error) { + out := new(google_protobuf5.Empty) err := grpc.Invoke(ctx, "/google.monitoring.v3.GroupService/DeleteGroup", in, out, c.cc, opts...) if err != nil { return nil, err @@ -545,7 +544,7 @@ type GroupServiceServer interface { // You can change any group attributes except `name`. UpdateGroup(context.Context, *UpdateGroupRequest) (*Group, error) // Deletes an existing group. - DeleteGroup(context.Context, *DeleteGroupRequest) (*google_protobuf4.Empty, error) + DeleteGroup(context.Context, *DeleteGroupRequest) (*google_protobuf5.Empty, error) // Lists the monitored resources that are members of a group. ListGroupMembers(context.Context, *ListGroupMembersRequest) (*ListGroupMembersResponse, error) } @@ -695,60 +694,60 @@ var _GroupService_serviceDesc = grpc.ServiceDesc{ Metadata: "google/monitoring/v3/group_service.proto", } -func init() { proto.RegisterFile("google/monitoring/v3/group_service.proto", fileDescriptor2) } - -var fileDescriptor2 = []byte{ - // 818 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0xcd, 0x6e, 0xdb, 0x46, - 0x10, 0x2e, 0x2d, 0x59, 0x96, 0x46, 0x36, 0x6c, 0x2f, 0x0c, 0x57, 0xa0, 0x7f, 0xa0, 0xd2, 0x3f, - 0x15, 0xdc, 0x9a, 0x44, 0xa5, 0x43, 0x81, 0x16, 0xf5, 0xc1, 0x6e, 0xe1, 0x16, 0xa8, 0x61, 0x83, - 0x76, 0x7b, 0xe8, 0x45, 0xa0, 0xa5, 0x11, 0xcb, 0x96, 0xdc, 0x65, 0xc9, 0x95, 0x5a, 0xbb, 0x30, - 0x90, 0x04, 0xc8, 0x21, 0x40, 0x6e, 0xb9, 0xe5, 0x96, 0x6b, 0x5e, 0x21, 0xa7, 0x3c, 0x43, 0x5e, - 0x21, 0xef, 0x91, 0x80, 0xcb, 0x5d, 0x89, 0xfa, 0xb5, 0x2f, 0xb9, 0x91, 0xbb, 0xdf, 0xec, 0xf7, - 0xcd, 0xec, 0x37, 0xb3, 0x50, 0x73, 0x19, 0x73, 0x7d, 0xb4, 0x02, 0x46, 0x3d, 0xce, 0x22, 0x8f, - 0xba, 0x56, 0xaf, 0x61, 0xb9, 0x11, 0xeb, 0x86, 0xcd, 0x18, 0xa3, 0x9e, 0xd7, 0x42, 0x33, 0x8c, - 0x18, 0x67, 0x64, 0x2d, 0x45, 0x9a, 0x03, 0xa4, 0xd9, 0x6b, 0xe8, 0x9b, 0x32, 0xde, 0x09, 0x3d, - 0xcb, 0xa1, 0x94, 0x71, 0x87, 0x7b, 0x8c, 0xc6, 0x69, 0x8c, 0xbe, 0x93, 0xd9, 0x95, 0x71, 0xd8, - 0x6e, 0x46, 0x18, 0xb3, 0x6e, 0xa4, 0x0e, 0xd6, 0xbf, 0x98, 0x28, 0xa1, 0xc5, 0x82, 0x80, 0x51, - 0x09, 0xa9, 0x4e, 0x57, 0x29, 0x11, 0x1b, 0x12, 0x21, 0xfe, 0xae, 0xbb, 0x1d, 0x0b, 0x83, 0x90, - 0xdf, 0xa4, 0x9b, 0xc6, 0x07, 0x0d, 0x56, 0x7f, 0xf5, 0x62, 0x7e, 0x9a, 0x04, 0xc4, 0x36, 0xfe, - 0xd3, 0xc5, 0x98, 0x13, 0x02, 0x79, 0xea, 0x04, 0x58, 0x59, 0xa8, 0x6a, 0xb5, 0x92, 0x2d, 0xbe, - 0xc9, 0xd7, 0xb0, 0xda, 0xfa, 0xd3, 0xf3, 0xdb, 0x11, 0xd2, 0x26, 0xeb, 0x34, 0x05, 0x43, 0x65, - 0x2e, 0x01, 0xfc, 0xfc, 0x99, 0xbd, 0xac, 0xb6, 0xce, 0x3b, 0xe2, 0x24, 0x62, 0x02, 0x71, 0x68, - 0x0b, 0x63, 0xce, 0xa2, 0x78, 0x00, 0xcf, 0x49, 0xf8, 0x4a, 0x7f, 0x4f, 0xe1, 0xeb, 0xb0, 0xd6, - 0xc6, 0xb8, 0x85, 0xb4, 0xed, 0x50, 0x9e, 0x89, 0xc8, 0xcb, 0x08, 0x92, 0xd9, 0x55, 0x31, 0x1b, - 0x50, 0x0a, 0x1d, 0x17, 0x9b, 0xb1, 0x77, 0x8b, 0x95, 0xf9, 0xaa, 0x56, 0x9b, 0xb7, 0x8b, 0xc9, - 0xc2, 0xa5, 0x77, 0x8b, 0x64, 0x0b, 0x40, 0x6c, 0x72, 0xf6, 0x37, 0xd2, 0x4a, 0x41, 0x24, 0x22, - 0xe0, 0x57, 0xc9, 0xc2, 0x71, 0x11, 0x0a, 0x1d, 0xcf, 0xe7, 0x18, 0x19, 0x0c, 0x48, 0xb6, 0x00, - 0x71, 0xc8, 0x68, 0x8c, 0xe4, 0x1b, 0x98, 0x4f, 0x05, 0x68, 0xd5, 0x5c, 0xad, 0x5c, 0xdf, 0x30, - 0x27, 0x5d, 0xb1, 0x29, 0x82, 0xec, 0x14, 0x49, 0xf6, 0x61, 0x99, 0xe2, 0x7f, 0xbc, 0x99, 0xa1, - 0x15, 0xe5, 0xb1, 0x97, 0x92, 0xe5, 0x0b, 0x45, 0x6d, 0xec, 0xc1, 0xf2, 0x29, 0xa6, 0x7c, 0xa3, - 0xf5, 0xce, 0x0d, 0xea, 0x6d, 0x3c, 0xd2, 0x80, 0x9c, 0x44, 0xe8, 0x70, 0x9c, 0x08, 0xcd, 0x67, - 0xae, 0xa6, 0x2f, 0x36, 0xe1, 0x7b, 0x98, 0xd8, 0x1d, 0x58, 0xea, 0x39, 0xbe, 0xd7, 0x76, 0x38, - 0x36, 0x19, 0xf5, 0x6f, 0x04, 0x75, 0xd1, 0x5e, 0x54, 0x8b, 0xe7, 0xd4, 0xbf, 0x31, 0x7c, 0x20, - 0xbf, 0x85, 0xed, 0x51, 0x05, 0x9f, 0x8a, 0xad, 0x06, 0xe4, 0x47, 0xf4, 0x71, 0x4a, 0xbe, 0xd9, - 0xd2, 0xbc, 0xd5, 0xe0, 0xf3, 0xfe, 0x9d, 0x9d, 0x61, 0x70, 0x8d, 0xd1, 0x4c, 0xeb, 0x0e, 0x19, - 0x25, 0x37, 0xd3, 0x28, 0xf9, 0x11, 0xa3, 0x90, 0x75, 0x65, 0x14, 0xe1, 0xb0, 0x92, 0x2d, 0xff, - 0xc8, 0x11, 0x14, 0x3d, 0xca, 0x31, 0xea, 0x39, 0xbe, 0x70, 0x57, 0xb9, 0x6e, 0x4c, 0x2e, 0xc4, - 0x95, 0x17, 0xe0, 0x2f, 0x12, 0x69, 0xf7, 0x63, 0x8c, 0x97, 0x1a, 0x54, 0xc6, 0x73, 0x90, 0xee, - 0xfb, 0x16, 0x16, 0x82, 0x74, 0x49, 0xfa, 0x6f, 0x4b, 0x9d, 0xed, 0x84, 0x9e, 0x79, 0xa6, 0xc6, - 0x85, 0x2d, 0xa7, 0x85, 0xad, 0xd0, 0x0f, 0xf5, 0x60, 0x92, 0x34, 0x67, 0xdc, 0xf1, 0xb3, 0x25, - 0x29, 0x89, 0x95, 0xa4, 0x26, 0xf5, 0x37, 0x05, 0x58, 0x14, 0xc2, 0x2e, 0xd3, 0x39, 0x47, 0x9e, - 0x6a, 0x00, 0x83, 0x2e, 0x21, 0x5f, 0x4e, 0x4e, 0x75, 0x6c, 0x90, 0xe8, 0xb5, 0xfb, 0x81, 0x69, - 0xca, 0xc6, 0xee, 0x93, 0x77, 0xef, 0x5f, 0xcc, 0x6d, 0x93, 0xcd, 0x64, 0x7c, 0xfd, 0x9f, 0x5c, - 0xdb, 0x0f, 0x61, 0xc4, 0xfe, 0xc2, 0x16, 0x8f, 0xad, 0x83, 0xbb, 0x74, 0xa0, 0xc5, 0xa4, 0x07, - 0x45, 0xd5, 0x3b, 0x64, 0x6f, 0x8a, 0xf1, 0x86, 0x7b, 0x4b, 0x9f, 0xe5, 0x4f, 0x63, 0x5f, 0xb0, - 0x56, 0xc9, 0xf6, 0x24, 0x56, 0x49, 0x6a, 0x1d, 0xdc, 0x91, 0xc7, 0x1a, 0x94, 0x33, 0xcd, 0x48, - 0xa6, 0xe4, 0x35, 0xde, 0xaf, 0xb3, 0xe9, 0xbf, 0x12, 0xf4, 0x7b, 0xc6, 0xcc, 0xa4, 0xbf, 0x93, - 0x4d, 0xf4, 0x4c, 0x83, 0x72, 0xa6, 0x1d, 0xa7, 0x69, 0x18, 0xef, 0xd8, 0xd9, 0x1a, 0x1a, 0x42, - 0xc3, 0xa1, 0xbe, 0x2b, 0x34, 0xa4, 0x0f, 0xc7, 0xd4, 0x42, 0x28, 0x2d, 0xff, 0x42, 0x39, 0xd3, - 0xab, 0xd3, 0xa4, 0x8c, 0xb7, 0xb3, 0xbe, 0xae, 0x90, 0xea, 0x35, 0x32, 0x7f, 0x4a, 0x5e, 0x23, - 0x75, 0x11, 0x07, 0xf7, 0x5d, 0xc4, 0x2b, 0x0d, 0x56, 0x46, 0xdb, 0x86, 0x1c, 0xde, 0xe3, 0xb2, - 0xe1, 0x11, 0xa1, 0x9b, 0x0f, 0x85, 0x4b, 0x6b, 0x9a, 0x42, 0x5b, 0x8d, 0xec, 0xcf, 0xd6, 0x66, - 0xc9, 0x26, 0x3c, 0x7e, 0xae, 0x41, 0xa5, 0xc5, 0x82, 0x89, 0x2c, 0xc7, 0xab, 0xd9, 0xbe, 0xba, - 0x48, 0x8a, 0x70, 0xa1, 0xfd, 0x71, 0x24, 0xa1, 0x2e, 0xf3, 0x1d, 0xea, 0x9a, 0x2c, 0x72, 0x2d, - 0x17, 0xa9, 0x28, 0x91, 0x95, 0x6e, 0x39, 0xa1, 0x17, 0x0f, 0xbf, 0xf1, 0xdf, 0x0f, 0xfe, 0x5e, - 0xcf, 0xe9, 0xa7, 0xe9, 0x01, 0x27, 0x3e, 0xeb, 0xb6, 0xd5, 0x80, 0x48, 0x18, 0x7f, 0x6f, 0x5c, - 0x17, 0xc4, 0x39, 0x8d, 0x8f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x1b, 0xec, 0x77, 0x3f, 0xd0, 0x08, - 0x00, 0x00, +func init() { proto.RegisterFile("google/monitoring/v3/group_service.proto", fileDescriptor4) } + +var fileDescriptor4 = []byte{ + // 826 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0x4d, 0x6f, 0xd3, 0x4c, + 0x10, 0x7e, 0xdd, 0xa4, 0x69, 0xb2, 0x69, 0xd5, 0x76, 0x55, 0xf5, 0x8d, 0xdc, 0x0f, 0x05, 0xf7, + 0x83, 0xa8, 0x50, 0x5b, 0x24, 0x07, 0x24, 0x10, 0x3d, 0xb4, 0xa0, 0x82, 0x44, 0xd5, 0xca, 0x2d, + 0x3d, 0xa0, 0x4a, 0x91, 0x9b, 0x4c, 0x8c, 0xc1, 0xde, 0x35, 0xf6, 0x26, 0xd0, 0xa2, 0x4a, 0x80, + 0xc4, 0x81, 0x33, 0x37, 0x6e, 0x1c, 0xe1, 0x2f, 0x70, 0xe2, 0xca, 0x95, 0xbf, 0xc0, 0xff, 0x00, + 0x79, 0xbd, 0x9b, 0x38, 0x9f, 0xed, 0x85, 0x5b, 0xb2, 0xf3, 0x8c, 0x9f, 0x67, 0x66, 0x9f, 0x99, + 0x45, 0x25, 0x9b, 0x52, 0xdb, 0x05, 0xc3, 0xa3, 0xc4, 0x61, 0x34, 0x70, 0x88, 0x6d, 0xb4, 0x2a, + 0x86, 0x1d, 0xd0, 0xa6, 0x5f, 0x0d, 0x21, 0x68, 0x39, 0x35, 0xd0, 0xfd, 0x80, 0x32, 0x8a, 0xe7, + 0x62, 0xa4, 0xde, 0x41, 0xea, 0xad, 0x8a, 0xba, 0x28, 0xf2, 0x2d, 0xdf, 0x31, 0x2c, 0x42, 0x28, + 0xb3, 0x98, 0x43, 0x49, 0x18, 0xe7, 0xa8, 0x2b, 0x89, 0xa8, 0xc8, 0x83, 0x7a, 0x35, 0x80, 0x90, + 0x36, 0x03, 0xf9, 0x61, 0xf5, 0xda, 0x40, 0x09, 0x35, 0xea, 0x79, 0x94, 0x08, 0x48, 0x71, 0xb8, + 0x4a, 0x81, 0x58, 0x10, 0x08, 0xfe, 0xef, 0xb4, 0xd9, 0x30, 0xc0, 0xf3, 0xd9, 0x59, 0x1c, 0xd4, + 0xfe, 0x28, 0x68, 0xf6, 0xb1, 0x13, 0xb2, 0xdd, 0x28, 0x21, 0x34, 0xe1, 0x65, 0x13, 0x42, 0x86, + 0x31, 0x4a, 0x13, 0xcb, 0x83, 0xc2, 0x44, 0x51, 0x29, 0xe5, 0x4c, 0xfe, 0x1b, 0xdf, 0x44, 0xb3, + 0xb5, 0x67, 0x8e, 0x5b, 0x0f, 0x80, 0x54, 0x69, 0xa3, 0xca, 0x19, 0x0a, 0x63, 0x11, 0xe0, 0xe1, + 0x7f, 0xe6, 0xb4, 0x0c, 0xed, 0x37, 0xf8, 0x97, 0xb0, 0x8e, 0xb0, 0x45, 0x6a, 0x10, 0x32, 0x1a, + 0x84, 0x1d, 0x78, 0x4a, 0xc0, 0x67, 0xda, 0x31, 0x89, 0x2f, 0xa3, 0xb9, 0x3a, 0x84, 0x35, 0x20, + 0x75, 0x8b, 0xb0, 0x44, 0x46, 0x5a, 0x64, 0xe0, 0x44, 0x54, 0xe6, 0x2c, 0xa0, 0x9c, 0x6f, 0xd9, + 0x50, 0x0d, 0x9d, 0x73, 0x28, 0x8c, 0x17, 0x95, 0xd2, 0xb8, 0x99, 0x8d, 0x0e, 0x0e, 0x9d, 0x73, + 0xc0, 0x4b, 0x08, 0xf1, 0x20, 0xa3, 0x2f, 0x80, 0x14, 0x32, 0xbc, 0x10, 0x0e, 0x3f, 0x8a, 0x0e, + 0xb6, 0xb3, 0x28, 0xd3, 0x70, 0x5c, 0x06, 0x81, 0x46, 0x11, 0x4e, 0x36, 0x20, 0xf4, 0x29, 0x09, + 0x01, 0xdf, 0x42, 0xe3, 0xb1, 0x00, 0xa5, 0x98, 0x2a, 0xe5, 0xcb, 0x0b, 0xfa, 0xa0, 0x2b, 0xd6, + 0x79, 0x92, 0x19, 0x23, 0xf1, 0x3a, 0x9a, 0x26, 0xf0, 0x9a, 0x55, 0x13, 0xb4, 0xbc, 0x3d, 0xe6, + 0x54, 0x74, 0x7c, 0x20, 0xa9, 0xb5, 0x35, 0x34, 0xbd, 0x0b, 0x31, 0x5f, 0x6f, 0xbf, 0x53, 0x9d, + 0x7e, 0x6b, 0x6f, 0x15, 0x84, 0x77, 0x02, 0xb0, 0x18, 0x0c, 0x84, 0xa6, 0x13, 0x57, 0xd3, 0x16, + 0x1b, 0xf1, 0x5d, 0x4d, 0xec, 0x0a, 0x9a, 0x6a, 0x59, 0xae, 0x53, 0xb7, 0x18, 0x54, 0x29, 0x71, + 0xcf, 0x38, 0x75, 0xd6, 0x9c, 0x94, 0x87, 0xfb, 0xc4, 0x3d, 0xd3, 0x5c, 0x84, 0x9f, 0xf8, 0xf5, + 0x5e, 0x05, 0xff, 0x8a, 0xad, 0x84, 0xf0, 0x7d, 0x70, 0x61, 0x48, 0xbd, 0xc9, 0xd6, 0xfc, 0x50, + 0xd0, 0xff, 0xed, 0x3b, 0xdb, 0x03, 0xef, 0x14, 0x82, 0x91, 0xd6, 0xed, 0x32, 0x4a, 0x6a, 0xa4, + 0x51, 0xd2, 0x3d, 0x46, 0xc1, 0xf3, 0xd2, 0x28, 0xdc, 0x61, 0x39, 0x53, 0xfc, 0xc3, 0x5b, 0x28, + 0xeb, 0x10, 0x06, 0x41, 0xcb, 0x72, 0xb9, 0xbb, 0xf2, 0x65, 0x6d, 0x70, 0x23, 0x8e, 0x1c, 0x0f, + 0x1e, 0x09, 0xa4, 0xd9, 0xce, 0xd1, 0x3e, 0x2b, 0xa8, 0xd0, 0x5f, 0x83, 0x70, 0xdf, 0x6d, 0x34, + 0xe1, 0xc5, 0x47, 0xc2, 0x7f, 0x4b, 0xf2, 0xdb, 0x96, 0xef, 0xe8, 0x7b, 0x72, 0x5d, 0x98, 0x62, + 0x5b, 0x98, 0x12, 0x7d, 0x55, 0x0f, 0x46, 0x45, 0x33, 0xca, 0x2c, 0x37, 0xd9, 0x92, 0x1c, 0x3f, + 0x89, 0x7a, 0x52, 0xfe, 0x9e, 0x41, 0x93, 0x5c, 0xd8, 0x61, 0xbc, 0xe7, 0xf0, 0x07, 0x05, 0xa1, + 0xce, 0x94, 0xe0, 0xeb, 0x83, 0x4b, 0xed, 0x5b, 0x24, 0x6a, 0xe9, 0x72, 0x60, 0x5c, 0xb2, 0xb6, + 0xfa, 0xfe, 0xd7, 0xef, 0x4f, 0x63, 0xcb, 0x78, 0x31, 0x5a, 0x5f, 0x6f, 0xa2, 0x6b, 0xbb, 0xe7, + 0x07, 0xf4, 0x39, 0xd4, 0x58, 0x68, 0x6c, 0x5c, 0xc4, 0x0b, 0x2d, 0xc4, 0x2d, 0x94, 0x95, 0xb3, + 0x83, 0xd7, 0x86, 0x18, 0xaf, 0x7b, 0xb6, 0xd4, 0x51, 0xfe, 0xd4, 0xd6, 0x39, 0x6b, 0x11, 0x2f, + 0x0f, 0x62, 0x15, 0xa4, 0xc6, 0xc6, 0x05, 0x7e, 0xa7, 0xa0, 0x7c, 0x62, 0x18, 0xf1, 0x90, 0xba, + 0xfa, 0xe7, 0x75, 0x34, 0xfd, 0x0d, 0x4e, 0xbf, 0xa6, 0x8d, 0x2c, 0xfa, 0x8e, 0x18, 0xa2, 0x8f, + 0x0a, 0xca, 0x27, 0xc6, 0x71, 0x98, 0x86, 0xfe, 0x89, 0x1d, 0xad, 0xa1, 0xc2, 0x35, 0x6c, 0xaa, + 0xab, 0x5c, 0x43, 0xfc, 0x70, 0x0c, 0x6d, 0x84, 0xd4, 0xf2, 0x0a, 0xe5, 0x13, 0xb3, 0x3a, 0x4c, + 0x4a, 0xff, 0x38, 0xab, 0xf3, 0x12, 0x29, 0x5f, 0x23, 0xfd, 0x41, 0xf4, 0x1a, 0xc9, 0x8b, 0xd8, + 0xb8, 0xec, 0x22, 0xbe, 0x28, 0x68, 0xa6, 0x77, 0x6c, 0xf0, 0xe6, 0x25, 0x2e, 0xeb, 0x5e, 0x11, + 0xaa, 0x7e, 0x55, 0xb8, 0xb0, 0xa6, 0xce, 0xb5, 0x95, 0xf0, 0xfa, 0x68, 0x6d, 0x86, 0x18, 0xc2, + 0xed, 0xaf, 0x0a, 0x2a, 0xd4, 0xa8, 0x37, 0x90, 0x65, 0x7b, 0x36, 0x39, 0x57, 0x07, 0x51, 0x13, + 0x0e, 0x94, 0xa7, 0x5b, 0x02, 0x6a, 0x53, 0xd7, 0x22, 0xb6, 0x4e, 0x03, 0xdb, 0xb0, 0x81, 0xf0, + 0x16, 0x19, 0x71, 0xc8, 0xf2, 0x9d, 0xb0, 0xfb, 0x8d, 0xbf, 0xdb, 0xf9, 0xf7, 0x6d, 0x4c, 0xdd, + 0x8d, 0x3f, 0xb0, 0xe3, 0xd2, 0x66, 0x5d, 0x2e, 0x88, 0x88, 0xf1, 0xb8, 0xf2, 0x53, 0x06, 0x4f, + 0x78, 0xf0, 0xa4, 0x13, 0x3c, 0x39, 0xae, 0x9c, 0x66, 0x38, 0x49, 0xe5, 0x6f, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x86, 0x94, 0xf2, 0xde, 0xed, 0x08, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/monitoring/v3/metric.pb.go b/vendor/google.golang.org/genproto/googleapis/monitoring/v3/metric.pb.go index 83aca74..99e7451 100644 --- a/vendor/google.golang.org/genproto/googleapis/monitoring/v3/metric.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/monitoring/v3/metric.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/monitoring/v3/metric.proto -// DO NOT EDIT! package monitoring @@ -33,7 +32,7 @@ type Point struct { func (m *Point) Reset() { *m = Point{} } func (m *Point) String() string { return proto.CompactTextString(m) } func (*Point) ProtoMessage() {} -func (*Point) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0} } +func (*Point) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{0} } func (m *Point) GetInterval() *TimeInterval { if m != nil { @@ -91,7 +90,7 @@ type TimeSeries struct { func (m *TimeSeries) Reset() { *m = TimeSeries{} } func (m *TimeSeries) String() string { return proto.CompactTextString(m) } func (*TimeSeries) ProtoMessage() {} -func (*TimeSeries) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{1} } +func (*TimeSeries) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{1} } func (m *TimeSeries) GetMetric() *google_api5.Metric { if m != nil { @@ -133,32 +132,33 @@ func init() { proto.RegisterType((*TimeSeries)(nil), "google.monitoring.v3.TimeSeries") } -func init() { proto.RegisterFile("google/monitoring/v3/metric.proto", fileDescriptor3) } - -var fileDescriptor3 = []byte{ - // 384 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x51, 0x4b, 0xeb, 0x30, - 0x14, 0xc7, 0xe9, 0x76, 0x37, 0x76, 0x53, 0xb8, 0x0f, 0xe1, 0xc2, 0x2d, 0xbb, 0x08, 0x75, 0x82, - 0x0e, 0x1f, 0x5a, 0x58, 0x41, 0x10, 0x61, 0x0f, 0x53, 0x51, 0x11, 0x61, 0x44, 0xd9, 0x83, 0x2f, - 0xa3, 0xb6, 0xa1, 0x04, 0xdb, 0x9c, 0x90, 0x66, 0x85, 0x3d, 0xf9, 0xe6, 0x87, 0xf1, 0x1b, 0xf8, - 0xed, 0xa4, 0x49, 0xba, 0x39, 0xac, 0xbe, 0xa5, 0x3d, 0xbf, 0xff, 0xff, 0x9f, 0x73, 0x4e, 0xd0, - 0x7e, 0x06, 0x90, 0xe5, 0x34, 0x2c, 0x80, 0x33, 0x05, 0x92, 0xf1, 0x2c, 0xac, 0xa2, 0xb0, 0xa0, - 0x4a, 0xb2, 0x24, 0x10, 0x12, 0x14, 0xe0, 0xbf, 0x06, 0x09, 0xb6, 0x48, 0x50, 0x45, 0xc3, 0x7f, - 0x56, 0x18, 0x0b, 0xb6, 0x83, 0x0f, 0x0f, 0x3e, 0x17, 0x8c, 0x84, 0xa6, 0x4b, 0x49, 0x4b, 0x58, - 0xc9, 0x84, 0x5a, 0xa8, 0x3d, 0x36, 0x81, 0xa2, 0x00, 0x6e, 0x90, 0xd1, 0x0b, 0xea, 0xcd, 0x81, - 0x71, 0x85, 0xa7, 0x68, 0xc0, 0xb8, 0xa2, 0xb2, 0x8a, 0x73, 0xcf, 0xf1, 0x9d, 0xb1, 0x3b, 0x19, - 0x05, 0x6d, 0x57, 0x0a, 0x1e, 0x58, 0x41, 0x6f, 0x2c, 0x49, 0x36, 0x1a, 0x7c, 0x82, 0x7a, 0x55, - 0x9c, 0xaf, 0xa8, 0xd7, 0xd1, 0x62, 0xff, 0x1b, 0xf1, 0x5a, 0xd0, 0x74, 0x51, 0x73, 0xc4, 0xe0, - 0xa3, 0xf7, 0x0e, 0x42, 0xb5, 0xe5, 0x3d, 0x95, 0x8c, 0x96, 0xf8, 0x18, 0xf5, 0x4d, 0x9f, 0xf6, - 0x12, 0xb8, 0xf1, 0x89, 0x05, 0x0b, 0xee, 0x74, 0x85, 0x58, 0x02, 0x9f, 0xa2, 0x41, 0xd3, 0xb0, - 0x4d, 0xdd, 0xdb, 0xa1, 0x9b, 0xb1, 0x10, 0x0b, 0x91, 0x0d, 0x8e, 0xaf, 0x91, 0x6b, 0x4c, 0x96, - 0xcf, 0x8c, 0xa7, 0x5e, 0xd7, 0x77, 0xc6, 0x7f, 0x26, 0x47, 0x5f, 0xb3, 0x2e, 0x68, 0x99, 0x48, - 0x26, 0x14, 0x48, 0xfb, 0xe3, 0x96, 0xf1, 0x94, 0xa0, 0x62, 0x73, 0xc6, 0x97, 0x08, 0xe9, 0x46, - 0x96, 0x6a, 0x2d, 0xa8, 0xf7, 0x4b, 0x1b, 0x1d, 0xfe, 0x68, 0xa4, 0xdb, 0xaf, 0x07, 0x41, 0x7e, - 0x57, 0xcd, 0x11, 0x47, 0xa8, 0x2f, 0xea, 0x3d, 0x94, 0x5e, 0xcf, 0xef, 0x8e, 0xdd, 0xc9, 0xff, - 0xf6, 0xf9, 0xe9, 0x5d, 0x11, 0x8b, 0xce, 0x5e, 0x1d, 0xe4, 0x25, 0x50, 0xb4, 0xa2, 0x33, 0xd7, - 0x04, 0xcf, 0xeb, 0x35, 0xcf, 0x9d, 0xc7, 0xa9, 0x85, 0x32, 0xc8, 0x63, 0x9e, 0x05, 0x20, 0xb3, - 0x30, 0xa3, 0x5c, 0x3f, 0x82, 0xd0, 0x94, 0x62, 0xc1, 0xca, 0xdd, 0xa7, 0x72, 0xb6, 0xfd, 0x7a, - 0xeb, 0x0c, 0xaf, 0x8c, 0xc1, 0x79, 0x0e, 0xab, 0xb4, 0x19, 0x6e, 0x9d, 0xb5, 0x88, 0x9e, 0xfa, - 0xda, 0x27, 0xfa, 0x08, 0x00, 0x00, 0xff, 0xff, 0xd5, 0xab, 0x3f, 0xd9, 0xe8, 0x02, 0x00, 0x00, +func init() { proto.RegisterFile("google/monitoring/v3/metric.proto", fileDescriptor5) } + +var fileDescriptor5 = []byte{ + // 396 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xc1, 0x4a, 0xeb, 0x40, + 0x14, 0x86, 0x49, 0x7b, 0x5b, 0x7a, 0x27, 0x70, 0x17, 0xc3, 0x05, 0x43, 0x45, 0x88, 0x15, 0xb4, + 0xb8, 0x48, 0xa0, 0x01, 0x41, 0x84, 0x2e, 0xaa, 0xa2, 0x22, 0x42, 0x19, 0xa5, 0x0b, 0x29, 0x94, + 0x98, 0x0c, 0x61, 0x30, 0x99, 0x33, 0x4c, 0xd2, 0x40, 0x57, 0x3e, 0x8c, 0x3b, 0xdf, 0xc0, 0x57, + 0xf0, 0xa9, 0x24, 0x33, 0x93, 0xd6, 0x62, 0x74, 0x37, 0xc9, 0xff, 0x9d, 0xff, 0x9f, 0x73, 0xce, + 0xa0, 0xfd, 0x04, 0x20, 0x49, 0xa9, 0x9f, 0x01, 0x67, 0x05, 0x48, 0xc6, 0x13, 0xbf, 0x0c, 0xfc, + 0x8c, 0x16, 0x92, 0x45, 0x9e, 0x90, 0x50, 0x00, 0xfe, 0xaf, 0x11, 0x6f, 0x83, 0x78, 0x65, 0xd0, + 0xdf, 0x31, 0x85, 0xa1, 0x60, 0x5b, 0x78, 0xff, 0xe0, 0xab, 0xa0, 0x4b, 0x68, 0xbc, 0x90, 0x34, + 0x87, 0xa5, 0x8c, 0xa8, 0x81, 0x9a, 0x63, 0x23, 0xc8, 0x32, 0xe0, 0x1a, 0x19, 0xbc, 0xa0, 0xce, + 0x14, 0x18, 0x2f, 0xf0, 0x18, 0xf5, 0x18, 0x2f, 0xa8, 0x2c, 0xc3, 0xd4, 0xb1, 0x5c, 0x6b, 0x68, + 0x8f, 0x06, 0x5e, 0xd3, 0x95, 0xbc, 0x07, 0x96, 0xd1, 0x1b, 0x43, 0x92, 0x75, 0x0d, 0x3e, 0x41, + 0x9d, 0x32, 0x4c, 0x97, 0xd4, 0x69, 0xa9, 0x62, 0xf7, 0x87, 0xe2, 0x95, 0xa0, 0xf1, 0xac, 0xe2, + 0x88, 0xc6, 0x07, 0xef, 0x2d, 0x84, 0x2a, 0xcb, 0x7b, 0x2a, 0x19, 0xcd, 0xf1, 0x31, 0xea, 0xea, + 0x3e, 0xcd, 0x25, 0x70, 0xed, 0x13, 0x0a, 0xe6, 0xdd, 0x29, 0x85, 0x18, 0x02, 0x9f, 0xa2, 0x5e, + 0xdd, 0xb0, 0x49, 0xdd, 0xdb, 0xa2, 0xeb, 0xb1, 0x10, 0x03, 0x91, 0x35, 0x8e, 0xaf, 0x91, 0xad, + 0x4d, 0x16, 0xcf, 0x8c, 0xc7, 0x4e, 0xdb, 0xb5, 0x86, 0xff, 0x46, 0x47, 0xdf, 0xb3, 0x2e, 0x68, + 0x1e, 0x49, 0x26, 0x0a, 0x90, 0xe6, 0xc7, 0x2d, 0xe3, 0x31, 0x41, 0xd9, 0xfa, 0x8c, 0x2f, 0x11, + 0x52, 0x8d, 0x2c, 0x8a, 0x95, 0xa0, 0xce, 0x1f, 0x65, 0x74, 0xf8, 0xab, 0x91, 0x6a, 0xbf, 0x1a, + 0x04, 0xf9, 0x5b, 0xd6, 0x47, 0x1c, 0xa0, 0xae, 0xa8, 0xf6, 0x90, 0x3b, 0x1d, 0xb7, 0x3d, 0xb4, + 0x47, 0xbb, 0xcd, 0xf3, 0x53, 0xbb, 0x22, 0x06, 0x9d, 0xbc, 0x5a, 0xc8, 0x89, 0x20, 0x6b, 0x44, + 0x27, 0xb6, 0x0e, 0x9e, 0x56, 0x6b, 0x9e, 0x5a, 0x8f, 0x63, 0x03, 0x25, 0x90, 0x86, 0x3c, 0xf1, + 0x40, 0x26, 0x7e, 0x42, 0xb9, 0x7a, 0x04, 0xbe, 0x96, 0x42, 0xc1, 0xf2, 0xed, 0xa7, 0x72, 0xb6, + 0xf9, 0x7a, 0x6b, 0xf5, 0xaf, 0xb4, 0xc1, 0x79, 0x0a, 0xcb, 0xb8, 0x1e, 0x6e, 0x95, 0x35, 0x0b, + 0x3e, 0x6a, 0x71, 0xae, 0xc4, 0xf9, 0x46, 0x9c, 0xcf, 0x82, 0xa7, 0xae, 0x0a, 0x09, 0x3e, 0x03, + 0x00, 0x00, 0xff, 0xff, 0x28, 0x45, 0x7a, 0x13, 0x05, 0x03, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/monitoring/v3/metric_service.pb.go b/vendor/google.golang.org/genproto/googleapis/monitoring/v3/metric_service.pb.go index 41ffeb0..1673fec 100644 --- a/vendor/google.golang.org/genproto/googleapis/monitoring/v3/metric_service.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/monitoring/v3/metric_service.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/monitoring/v3/metric_service.proto -// DO NOT EDIT! package monitoring @@ -10,7 +9,7 @@ import math "math" import _ "google.golang.org/genproto/googleapis/api/annotations" import google_api5 "google.golang.org/genproto/googleapis/api/metric" import google_api4 "google.golang.org/genproto/googleapis/api/monitoredres" -import google_protobuf4 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf5 "github.com/golang/protobuf/ptypes/empty" import google_rpc "google.golang.org/genproto/googleapis/rpc/status" import ( @@ -48,7 +47,7 @@ func (x ListTimeSeriesRequest_TimeSeriesView) String() string { return proto.EnumName(ListTimeSeriesRequest_TimeSeriesView_name, int32(x)) } func (ListTimeSeriesRequest_TimeSeriesView) EnumDescriptor() ([]byte, []int) { - return fileDescriptor4, []int{8, 0} + return fileDescriptor6, []int{8, 0} } // The `ListMonitoredResourceDescriptors` request. @@ -78,7 +77,7 @@ func (m *ListMonitoredResourceDescriptorsRequest) Reset() { func (m *ListMonitoredResourceDescriptorsRequest) String() string { return proto.CompactTextString(m) } func (*ListMonitoredResourceDescriptorsRequest) ProtoMessage() {} func (*ListMonitoredResourceDescriptorsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor4, []int{0} + return fileDescriptor6, []int{0} } func (m *ListMonitoredResourceDescriptorsRequest) GetName() string { @@ -126,7 +125,7 @@ func (m *ListMonitoredResourceDescriptorsResponse) Reset() { func (m *ListMonitoredResourceDescriptorsResponse) String() string { return proto.CompactTextString(m) } func (*ListMonitoredResourceDescriptorsResponse) ProtoMessage() {} func (*ListMonitoredResourceDescriptorsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor4, []int{1} + return fileDescriptor6, []int{1} } func (m *ListMonitoredResourceDescriptorsResponse) GetResourceDescriptors() []*google_api4.MonitoredResourceDescriptor { @@ -156,7 +155,7 @@ func (m *GetMonitoredResourceDescriptorRequest) Reset() { *m = GetMonito func (m *GetMonitoredResourceDescriptorRequest) String() string { return proto.CompactTextString(m) } func (*GetMonitoredResourceDescriptorRequest) ProtoMessage() {} func (*GetMonitoredResourceDescriptorRequest) Descriptor() ([]byte, []int) { - return fileDescriptor4, []int{2} + return fileDescriptor6, []int{2} } func (m *GetMonitoredResourceDescriptorRequest) GetName() string { @@ -191,7 +190,7 @@ type ListMetricDescriptorsRequest struct { func (m *ListMetricDescriptorsRequest) Reset() { *m = ListMetricDescriptorsRequest{} } func (m *ListMetricDescriptorsRequest) String() string { return proto.CompactTextString(m) } func (*ListMetricDescriptorsRequest) ProtoMessage() {} -func (*ListMetricDescriptorsRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{3} } +func (*ListMetricDescriptorsRequest) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{3} } func (m *ListMetricDescriptorsRequest) GetName() string { if m != nil { @@ -235,7 +234,7 @@ type ListMetricDescriptorsResponse struct { func (m *ListMetricDescriptorsResponse) Reset() { *m = ListMetricDescriptorsResponse{} } func (m *ListMetricDescriptorsResponse) String() string { return proto.CompactTextString(m) } func (*ListMetricDescriptorsResponse) ProtoMessage() {} -func (*ListMetricDescriptorsResponse) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{4} } +func (*ListMetricDescriptorsResponse) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{4} } func (m *ListMetricDescriptorsResponse) GetMetricDescriptors() []*google_api5.MetricDescriptor { if m != nil { @@ -263,7 +262,7 @@ type GetMetricDescriptorRequest struct { func (m *GetMetricDescriptorRequest) Reset() { *m = GetMetricDescriptorRequest{} } func (m *GetMetricDescriptorRequest) String() string { return proto.CompactTextString(m) } func (*GetMetricDescriptorRequest) ProtoMessage() {} -func (*GetMetricDescriptorRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{5} } +func (*GetMetricDescriptorRequest) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{5} } func (m *GetMetricDescriptorRequest) GetName() string { if m != nil { @@ -285,7 +284,7 @@ type CreateMetricDescriptorRequest struct { func (m *CreateMetricDescriptorRequest) Reset() { *m = CreateMetricDescriptorRequest{} } func (m *CreateMetricDescriptorRequest) String() string { return proto.CompactTextString(m) } func (*CreateMetricDescriptorRequest) ProtoMessage() {} -func (*CreateMetricDescriptorRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{6} } +func (*CreateMetricDescriptorRequest) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{6} } func (m *CreateMetricDescriptorRequest) GetName() string { if m != nil { @@ -313,7 +312,7 @@ type DeleteMetricDescriptorRequest struct { func (m *DeleteMetricDescriptorRequest) Reset() { *m = DeleteMetricDescriptorRequest{} } func (m *DeleteMetricDescriptorRequest) String() string { return proto.CompactTextString(m) } func (*DeleteMetricDescriptorRequest) ProtoMessage() {} -func (*DeleteMetricDescriptorRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{7} } +func (*DeleteMetricDescriptorRequest) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{7} } func (m *DeleteMetricDescriptorRequest) GetName() string { if m != nil { @@ -363,7 +362,7 @@ type ListTimeSeriesRequest struct { func (m *ListTimeSeriesRequest) Reset() { *m = ListTimeSeriesRequest{} } func (m *ListTimeSeriesRequest) String() string { return proto.CompactTextString(m) } func (*ListTimeSeriesRequest) ProtoMessage() {} -func (*ListTimeSeriesRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{8} } +func (*ListTimeSeriesRequest) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{8} } func (m *ListTimeSeriesRequest) GetName() string { if m != nil { @@ -434,7 +433,7 @@ type ListTimeSeriesResponse struct { func (m *ListTimeSeriesResponse) Reset() { *m = ListTimeSeriesResponse{} } func (m *ListTimeSeriesResponse) String() string { return proto.CompactTextString(m) } func (*ListTimeSeriesResponse) ProtoMessage() {} -func (*ListTimeSeriesResponse) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{9} } +func (*ListTimeSeriesResponse) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{9} } func (m *ListTimeSeriesResponse) GetTimeSeries() []*TimeSeries { if m != nil { @@ -466,7 +465,7 @@ type CreateTimeSeriesRequest struct { func (m *CreateTimeSeriesRequest) Reset() { *m = CreateTimeSeriesRequest{} } func (m *CreateTimeSeriesRequest) String() string { return proto.CompactTextString(m) } func (*CreateTimeSeriesRequest) ProtoMessage() {} -func (*CreateTimeSeriesRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{10} } +func (*CreateTimeSeriesRequest) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{10} } func (m *CreateTimeSeriesRequest) GetName() string { if m != nil { @@ -496,7 +495,7 @@ type CreateTimeSeriesError struct { func (m *CreateTimeSeriesError) Reset() { *m = CreateTimeSeriesError{} } func (m *CreateTimeSeriesError) String() string { return proto.CompactTextString(m) } func (*CreateTimeSeriesError) ProtoMessage() {} -func (*CreateTimeSeriesError) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{11} } +func (*CreateTimeSeriesError) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{11} } func (m *CreateTimeSeriesError) GetTimeSeries() *TimeSeries { if m != nil { @@ -553,14 +552,14 @@ type MetricServiceClient interface { CreateMetricDescriptor(ctx context.Context, in *CreateMetricDescriptorRequest, opts ...grpc.CallOption) (*google_api5.MetricDescriptor, error) // Deletes a metric descriptor. Only user-created // [custom metrics](/monitoring/custom-metrics) can be deleted. - DeleteMetricDescriptor(ctx context.Context, in *DeleteMetricDescriptorRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) + DeleteMetricDescriptor(ctx context.Context, in *DeleteMetricDescriptorRequest, opts ...grpc.CallOption) (*google_protobuf5.Empty, error) // Lists time series that match a filter. This method does not require a Stackdriver account. ListTimeSeries(ctx context.Context, in *ListTimeSeriesRequest, opts ...grpc.CallOption) (*ListTimeSeriesResponse, error) // Creates or adds data to one or more time series. // The response is empty if all time series in the request were written. // If any time series could not be written, a corresponding failure message is // included in the error response. - CreateTimeSeries(ctx context.Context, in *CreateTimeSeriesRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) + CreateTimeSeries(ctx context.Context, in *CreateTimeSeriesRequest, opts ...grpc.CallOption) (*google_protobuf5.Empty, error) } type metricServiceClient struct { @@ -616,8 +615,8 @@ func (c *metricServiceClient) CreateMetricDescriptor(ctx context.Context, in *Cr return out, nil } -func (c *metricServiceClient) DeleteMetricDescriptor(ctx context.Context, in *DeleteMetricDescriptorRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) { - out := new(google_protobuf4.Empty) +func (c *metricServiceClient) DeleteMetricDescriptor(ctx context.Context, in *DeleteMetricDescriptorRequest, opts ...grpc.CallOption) (*google_protobuf5.Empty, error) { + out := new(google_protobuf5.Empty) err := grpc.Invoke(ctx, "/google.monitoring.v3.MetricService/DeleteMetricDescriptor", in, out, c.cc, opts...) if err != nil { return nil, err @@ -634,8 +633,8 @@ func (c *metricServiceClient) ListTimeSeries(ctx context.Context, in *ListTimeSe return out, nil } -func (c *metricServiceClient) CreateTimeSeries(ctx context.Context, in *CreateTimeSeriesRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) { - out := new(google_protobuf4.Empty) +func (c *metricServiceClient) CreateTimeSeries(ctx context.Context, in *CreateTimeSeriesRequest, opts ...grpc.CallOption) (*google_protobuf5.Empty, error) { + out := new(google_protobuf5.Empty) err := grpc.Invoke(ctx, "/google.monitoring.v3.MetricService/CreateTimeSeries", in, out, c.cc, opts...) if err != nil { return nil, err @@ -660,14 +659,14 @@ type MetricServiceServer interface { CreateMetricDescriptor(context.Context, *CreateMetricDescriptorRequest) (*google_api5.MetricDescriptor, error) // Deletes a metric descriptor. Only user-created // [custom metrics](/monitoring/custom-metrics) can be deleted. - DeleteMetricDescriptor(context.Context, *DeleteMetricDescriptorRequest) (*google_protobuf4.Empty, error) + DeleteMetricDescriptor(context.Context, *DeleteMetricDescriptorRequest) (*google_protobuf5.Empty, error) // Lists time series that match a filter. This method does not require a Stackdriver account. ListTimeSeries(context.Context, *ListTimeSeriesRequest) (*ListTimeSeriesResponse, error) // Creates or adds data to one or more time series. // The response is empty if all time series in the request were written. // If any time series could not be written, a corresponding failure message is // included in the error response. - CreateTimeSeries(context.Context, *CreateTimeSeriesRequest) (*google_protobuf4.Empty, error) + CreateTimeSeries(context.Context, *CreateTimeSeriesRequest) (*google_protobuf5.Empty, error) } func RegisterMetricServiceServer(s *grpc.Server, srv MetricServiceServer) { @@ -859,71 +858,72 @@ var _MetricService_serviceDesc = grpc.ServiceDesc{ Metadata: "google/monitoring/v3/metric_service.proto", } -func init() { proto.RegisterFile("google/monitoring/v3/metric_service.proto", fileDescriptor4) } - -var fileDescriptor4 = []byte{ - // 1001 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x57, 0x4f, 0x73, 0xdb, 0x44, - 0x14, 0x67, 0x93, 0x34, 0x71, 0x9e, 0xa7, 0x21, 0xdd, 0xb6, 0xae, 0x51, 0x13, 0xc6, 0x15, 0x53, - 0xe2, 0xba, 0x45, 0xea, 0xd8, 0x1d, 0x0e, 0x49, 0x9b, 0x99, 0xfc, 0xa3, 0x74, 0x08, 0x4c, 0x46, - 0x2e, 0x3d, 0xf4, 0xe2, 0x51, 0x9c, 0x57, 0xcd, 0x82, 0xa5, 0x15, 0xab, 0xb5, 0x4b, 0xca, 0x84, - 0x03, 0xcc, 0xe4, 0xc6, 0x81, 0x01, 0x66, 0xe0, 0x2b, 0x70, 0x80, 0xe1, 0x3b, 0xf0, 0x0d, 0x38, - 0x73, 0xe3, 0x2b, 0x70, 0x67, 0xb4, 0x92, 0x63, 0x5b, 0x96, 0x64, 0x9b, 0x4b, 0x6f, 0x96, 0xf6, - 0xfd, 0xf9, 0xbd, 0xdf, 0x7b, 0xfb, 0x7e, 0x32, 0xdc, 0x71, 0x38, 0x77, 0x3a, 0x68, 0xba, 0xdc, - 0x63, 0x92, 0x0b, 0xe6, 0x39, 0x66, 0xaf, 0x61, 0xba, 0x28, 0x05, 0x6b, 0xb7, 0x02, 0x14, 0x3d, - 0xd6, 0x46, 0xc3, 0x17, 0x5c, 0x72, 0x7a, 0x2d, 0x32, 0x35, 0x06, 0xa6, 0x46, 0xaf, 0xa1, 0xad, - 0xc5, 0x01, 0x6c, 0x9f, 0x99, 0xb6, 0xe7, 0x71, 0x69, 0x4b, 0xc6, 0xbd, 0x20, 0xf2, 0xd1, 0x6e, - 0x0c, 0x9d, 0x46, 0x41, 0xe3, 0x83, 0x77, 0x86, 0x0f, 0xa2, 0x80, 0x78, 0xd2, 0x12, 0x18, 0xf0, - 0xae, 0xe8, 0x67, 0xd4, 0x6e, 0xa5, 0x82, 0x6b, 0x73, 0xd7, 0xe5, 0x5e, 0xae, 0xc9, 0x48, 0xaa, - 0x9b, 0xb1, 0x89, 0x7a, 0x3a, 0xee, 0xbe, 0x30, 0xd1, 0xf5, 0xe5, 0x69, 0x02, 0xa0, 0xf0, 0xdb, - 0x66, 0x20, 0x6d, 0xd9, 0x8d, 0x91, 0xeb, 0xdf, 0x13, 0xd8, 0x38, 0x64, 0x81, 0xfc, 0xb8, 0x0f, - 0xce, 0x8a, 0xb1, 0xed, 0x63, 0xd0, 0x16, 0xcc, 0x97, 0x5c, 0x04, 0x16, 0x7e, 0xd1, 0xc5, 0x40, - 0x52, 0x0a, 0x0b, 0x9e, 0xed, 0x62, 0xf9, 0x52, 0x85, 0x54, 0x97, 0x2d, 0xf5, 0x9b, 0x96, 0x60, - 0xf1, 0x05, 0xeb, 0x48, 0x14, 0xe5, 0x39, 0xf5, 0x36, 0x7e, 0xa2, 0x37, 0x61, 0xd9, 0xb7, 0x1d, - 0x6c, 0x05, 0xec, 0x15, 0x96, 0xe7, 0x2b, 0xa4, 0x7a, 0xc9, 0x2a, 0x84, 0x2f, 0x9a, 0xec, 0x15, - 0xd2, 0x75, 0x00, 0x75, 0x28, 0xf9, 0xe7, 0xe8, 0x95, 0x17, 0x94, 0xa3, 0x32, 0x7f, 0x1a, 0xbe, - 0xd0, 0x7f, 0x23, 0x50, 0x9d, 0x8c, 0x29, 0xf0, 0xb9, 0x17, 0x20, 0x7d, 0x0e, 0xd7, 0xfa, 0x74, - 0xb6, 0x4e, 0x06, 0xe7, 0x65, 0x52, 0x99, 0xaf, 0x16, 0xeb, 0x1b, 0x46, 0xdc, 0x4d, 0xdb, 0x67, - 0x46, 0x4e, 0x3c, 0xeb, 0xaa, 0x18, 0xcf, 0x41, 0xdf, 0x85, 0x37, 0x3d, 0xfc, 0x52, 0xb6, 0x86, - 0xc0, 0x46, 0x55, 0x5e, 0x0e, 0x5f, 0x1f, 0x5d, 0x00, 0xde, 0x82, 0xdb, 0x8f, 0x31, 0x0f, 0x6e, - 0x92, 0xc1, 0xf9, 0x01, 0x83, 0xfa, 0x39, 0x81, 0x35, 0x55, 0xad, 0x6a, 0xe6, 0x6b, 0xa4, 0xfd, - 0x47, 0x02, 0xeb, 0x19, 0x40, 0x62, 0xae, 0x3f, 0x02, 0x1a, 0x5f, 0x99, 0x71, 0xa6, 0xd7, 0x46, - 0x98, 0x4e, 0x84, 0xb0, 0xae, 0xb8, 0xc9, 0xa0, 0x53, 0x93, 0x7b, 0x1f, 0xb4, 0x90, 0xdc, 0x64, - 0xc4, 0x1c, 0x46, 0xbf, 0x86, 0xf5, 0x3d, 0x81, 0xb6, 0xc4, 0x19, 0x9c, 0xe8, 0x13, 0xb8, 0x32, - 0x56, 0x9b, 0x02, 0x34, 0xa9, 0xb4, 0xd5, 0x64, 0x69, 0x7a, 0x03, 0xd6, 0xf7, 0xb1, 0x83, 0x33, - 0xe5, 0xd7, 0x7f, 0x9e, 0x87, 0xeb, 0x21, 0xfb, 0x4f, 0x99, 0x8b, 0x4d, 0x14, 0x0c, 0xc7, 0xfa, - 0x0f, 0x53, 0xf4, 0x7f, 0x1b, 0x0a, 0xcc, 0x93, 0x28, 0x7a, 0x76, 0x47, 0x35, 0xb8, 0x58, 0xd7, - 0x8d, 0xb4, 0x7d, 0x66, 0x84, 0x69, 0x9e, 0xc4, 0x96, 0xd6, 0x85, 0x0f, 0xdd, 0x83, 0xa2, 0xed, - 0x38, 0x02, 0x1d, 0xb5, 0xde, 0xd4, 0xc8, 0x15, 0xeb, 0xb7, 0xd2, 0x43, 0xec, 0x0c, 0x0c, 0xad, - 0x61, 0x2f, 0xfa, 0x16, 0x14, 0xb8, 0x38, 0x41, 0xd1, 0x3a, 0x3e, 0x2d, 0x2f, 0x2a, 0x78, 0x4b, - 0xea, 0x79, 0xf7, 0x94, 0x7e, 0x02, 0x0b, 0x3d, 0x86, 0x2f, 0xcb, 0x4b, 0x15, 0x52, 0x5d, 0xa9, - 0x6f, 0xa6, 0x07, 0x4e, 0xa5, 0xc1, 0x18, 0xbc, 0x79, 0xc6, 0xf0, 0xa5, 0xa5, 0xe2, 0x8c, 0xce, - 0x7b, 0x21, 0x77, 0xde, 0x97, 0x93, 0xf3, 0xbe, 0x01, 0x2b, 0xa3, 0x31, 0x69, 0x01, 0x16, 0x3e, - 0xf8, 0xf4, 0xf0, 0x70, 0xf5, 0x0d, 0x5a, 0x84, 0xa5, 0x0f, 0x0f, 0x76, 0xf6, 0x0f, 0xac, 0xe6, - 0x2a, 0xd1, 0xbf, 0x25, 0x50, 0x4a, 0x62, 0x8a, 0x6f, 0xc4, 0x0e, 0x14, 0x25, 0x73, 0x31, 0x94, - 0x10, 0x86, 0xfd, 0xab, 0x50, 0xc9, 0xa6, 0x3c, 0x76, 0x07, 0x79, 0xf1, 0x7b, 0xea, 0x7b, 0xe0, - 0xc3, 0x8d, 0x68, 0xaa, 0xb3, 0x27, 0x64, 0x78, 0x9e, 0x13, 0xc8, 0xe6, 0x66, 0x47, 0x16, 0x6e, - 0xa6, 0xeb, 0xc9, 0x94, 0x07, 0x42, 0x70, 0x31, 0x5e, 0x36, 0x99, 0xb9, 0xec, 0x1a, 0x2c, 0x46, - 0x42, 0x14, 0x5f, 0x32, 0xda, 0xf7, 0x16, 0x7e, 0xdb, 0x68, 0xaa, 0x13, 0x2b, 0xb6, 0xa8, 0xff, - 0x0b, 0x70, 0x39, 0xba, 0x4b, 0xcd, 0x48, 0xaa, 0xe9, 0xdf, 0x04, 0x2a, 0x93, 0x24, 0x82, 0x3e, - 0xca, 0x1e, 0xaf, 0x29, 0xe4, 0x4e, 0xdb, 0xfe, 0xbf, 0xee, 0xd1, 0x6c, 0xe8, 0x9b, 0xdf, 0xfc, - 0xf5, 0xcf, 0x0f, 0x73, 0x0f, 0x68, 0x3d, 0x94, 0xea, 0xaf, 0xc2, 0xa6, 0x3c, 0xf2, 0x05, 0xff, - 0x0c, 0xdb, 0x32, 0x30, 0x6b, 0x67, 0x83, 0xcf, 0x81, 0x34, 0xe8, 0x7f, 0x12, 0x78, 0x3b, 0x5f, - 0x52, 0xe8, 0x56, 0x3a, 0xbc, 0xa9, 0x84, 0x48, 0x9b, 0x56, 0x17, 0xf5, 0x87, 0xaa, 0x88, 0xf7, - 0xe9, 0x83, 0xb4, 0x22, 0x72, 0x6b, 0x30, 0x6b, 0x67, 0xf4, 0x0f, 0x12, 0x2d, 0xb5, 0x31, 0x49, - 0xa1, 0xf5, 0x1c, 0x72, 0x33, 0x84, 0x50, 0x6b, 0xcc, 0xe4, 0x13, 0x77, 0xc1, 0x54, 0x05, 0xdc, - 0xa1, 0x1b, 0x19, 0x5d, 0x18, 0x43, 0xf6, 0x0b, 0x81, 0xab, 0x29, 0x82, 0x43, 0xef, 0x67, 0xf3, - 0x9d, 0xbe, 0xe6, 0xb5, 0x5c, 0xdd, 0xd0, 0xeb, 0x0a, 0xd8, 0x3d, 0x5a, 0x4b, 0x67, 0x36, 0x89, - 0xcb, 0xac, 0xd5, 0xce, 0xe8, 0xef, 0x04, 0x4a, 0xe9, 0xd2, 0x46, 0x33, 0xc8, 0xc9, 0x15, 0xc2, - 0x09, 0x08, 0x77, 0x15, 0xc2, 0x87, 0xfa, 0xb4, 0xd4, 0x6d, 0x8e, 0x2b, 0x68, 0xc8, 0x66, 0x29, - 0x5d, 0x0c, 0xb3, 0x10, 0xe7, 0x4a, 0xa7, 0x56, 0xea, 0x3b, 0xf5, 0x3f, 0x73, 0x8d, 0x83, 0xf0, - 0x33, 0xb7, 0xcf, 0x66, 0x6d, 0x16, 0x36, 0x7f, 0x22, 0xb0, 0x32, 0xba, 0xd7, 0xe9, 0xdd, 0x19, - 0x14, 0x49, 0xbb, 0x37, 0x9d, 0x71, 0x3c, 0x88, 0x55, 0x85, 0x50, 0xa7, 0x95, 0x74, 0x36, 0x87, - 0x56, 0xe3, 0x39, 0x81, 0xd5, 0xe4, 0xde, 0xa5, 0xef, 0xe5, 0xf5, 0x77, 0x1c, 0x5b, 0x16, 0x4f, - 0x77, 0x15, 0x8a, 0xdb, 0xfa, 0x44, 0x14, 0x9b, 0xa4, 0xb6, 0xfb, 0x1d, 0x81, 0x72, 0x9b, 0xbb, - 0xa9, 0x99, 0x77, 0xe9, 0xc8, 0x46, 0x3e, 0x0a, 0xd3, 0x1c, 0x91, 0xe7, 0xdb, 0xb1, 0xad, 0xc3, - 0x3b, 0xb6, 0xe7, 0x18, 0x5c, 0x38, 0xa6, 0x83, 0x9e, 0x02, 0x61, 0x46, 0x47, 0xb6, 0xcf, 0x82, - 0xd1, 0xff, 0x31, 0x5b, 0x83, 0xa7, 0x5f, 0xe7, 0xb4, 0xc7, 0x51, 0x80, 0xbd, 0x0e, 0xef, 0x9e, - 0xf4, 0x57, 0x53, 0x98, 0xf2, 0x59, 0xe3, 0x78, 0x51, 0xc5, 0x69, 0xfc, 0x17, 0x00, 0x00, 0xff, - 0xff, 0x3c, 0x75, 0xce, 0xa1, 0xce, 0x0d, 0x00, 0x00, +func init() { proto.RegisterFile("google/monitoring/v3/metric_service.proto", fileDescriptor6) } + +var fileDescriptor6 = []byte{ + // 1011 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x57, 0x4d, 0x6f, 0x1b, 0x45, + 0x18, 0x66, 0x92, 0x34, 0x1f, 0xaf, 0xd5, 0x90, 0x4e, 0x5b, 0xd7, 0x6c, 0x13, 0xe4, 0x2e, 0x2a, + 0x71, 0xdd, 0xb2, 0x5b, 0xd9, 0x15, 0x87, 0xa4, 0x8d, 0x94, 0x2f, 0x4a, 0x45, 0x40, 0xd1, 0xba, + 0xe4, 0x50, 0x45, 0xb2, 0x36, 0xce, 0x74, 0x35, 0xe0, 0xdd, 0x59, 0x66, 0xc7, 0x2e, 0x29, 0x0a, + 0x07, 0x90, 0x7a, 0x47, 0x80, 0x04, 0x7f, 0xa1, 0x07, 0x10, 0xff, 0x81, 0x13, 0x57, 0xce, 0xdc, + 0xf8, 0x0b, 0xdc, 0xd1, 0xce, 0xce, 0xc6, 0xf6, 0x7e, 0xd9, 0xe6, 0xc2, 0xcd, 0xbb, 0xef, 0xd7, + 0xf3, 0x3e, 0xf3, 0xce, 0xfb, 0xac, 0xe1, 0x8e, 0xc3, 0x98, 0xd3, 0x25, 0xa6, 0xcb, 0x3c, 0x2a, + 0x18, 0xa7, 0x9e, 0x63, 0xf6, 0x9b, 0xa6, 0x4b, 0x04, 0xa7, 0x9d, 0x76, 0x40, 0x78, 0x9f, 0x76, + 0x88, 0xe1, 0x73, 0x26, 0x18, 0xbe, 0x16, 0xb9, 0x1a, 0x03, 0x57, 0xa3, 0xdf, 0xd4, 0x56, 0x55, + 0x02, 0xdb, 0xa7, 0xa6, 0xed, 0x79, 0x4c, 0xd8, 0x82, 0x32, 0x2f, 0x88, 0x62, 0xb4, 0x1b, 0x43, + 0xd6, 0x28, 0xa9, 0x32, 0xbc, 0x33, 0x6c, 0x88, 0x12, 0x92, 0xd3, 0x36, 0x27, 0x01, 0xeb, 0xf1, + 0xb8, 0xa2, 0x76, 0x2b, 0x13, 0x5c, 0x87, 0xb9, 0x2e, 0xf3, 0x0a, 0x5d, 0x46, 0x4a, 0xdd, 0x54, + 0x2e, 0xf2, 0xe9, 0xa4, 0xf7, 0xdc, 0x24, 0xae, 0x2f, 0xce, 0x12, 0x00, 0xb9, 0xdf, 0x31, 0x03, + 0x61, 0x8b, 0x9e, 0x42, 0xae, 0x7f, 0x87, 0x60, 0xfd, 0x80, 0x06, 0xe2, 0xe3, 0x18, 0x9c, 0xa5, + 0xb0, 0xed, 0x91, 0xa0, 0xc3, 0xa9, 0x2f, 0x18, 0x0f, 0x2c, 0xf2, 0x45, 0x8f, 0x04, 0x02, 0x63, + 0x98, 0xf3, 0x6c, 0x97, 0x54, 0x2e, 0x55, 0x51, 0x6d, 0xc9, 0x92, 0xbf, 0x71, 0x19, 0xe6, 0x9f, + 0xd3, 0xae, 0x20, 0xbc, 0x32, 0x23, 0xdf, 0xaa, 0x27, 0x7c, 0x13, 0x96, 0x7c, 0xdb, 0x21, 0xed, + 0x80, 0xbe, 0x24, 0x95, 0xd9, 0x2a, 0xaa, 0x5d, 0xb2, 0x16, 0xc3, 0x17, 0x2d, 0xfa, 0x92, 0xe0, + 0x35, 0x00, 0x69, 0x14, 0xec, 0x73, 0xe2, 0x55, 0xe6, 0x64, 0xa0, 0x74, 0x7f, 0x1a, 0xbe, 0xd0, + 0x7f, 0x41, 0x50, 0x1b, 0x8f, 0x29, 0xf0, 0x99, 0x17, 0x10, 0xfc, 0x0c, 0xae, 0xc5, 0x74, 0xb6, + 0x4f, 0x07, 0xf6, 0x0a, 0xaa, 0xce, 0xd6, 0x4a, 0x8d, 0x75, 0x43, 0x9d, 0xa6, 0xed, 0x53, 0xa3, + 0x20, 0x9f, 0x75, 0x95, 0xa7, 0x6b, 0xe0, 0x77, 0xe1, 0x4d, 0x8f, 0x7c, 0x29, 0xda, 0x43, 0x60, + 0xa3, 0x2e, 0x2f, 0x87, 0xaf, 0x0f, 0x2f, 0x00, 0x6f, 0xc2, 0xed, 0xc7, 0xa4, 0x08, 0x6e, 0x92, + 0xc1, 0xd9, 0x01, 0x83, 0xfa, 0x2b, 0x04, 0xab, 0xb2, 0x5b, 0x79, 0x98, 0xff, 0x23, 0xed, 0x3f, + 0x20, 0x58, 0xcb, 0x01, 0xa2, 0xb8, 0xfe, 0x08, 0xb0, 0xba, 0x32, 0x69, 0xa6, 0x57, 0x47, 0x98, + 0x4e, 0xa4, 0xb0, 0xae, 0xb8, 0xc9, 0xa4, 0x13, 0x93, 0x7b, 0x1f, 0xb4, 0x90, 0xdc, 0x64, 0xc6, + 0x02, 0x46, 0xbf, 0x86, 0xb5, 0x5d, 0x4e, 0x6c, 0x41, 0xa6, 0x08, 0xc2, 0x4f, 0xe0, 0x4a, 0xaa, + 0x37, 0x09, 0x68, 0x5c, 0x6b, 0x2b, 0xc9, 0xd6, 0xf4, 0x26, 0xac, 0xed, 0x91, 0x2e, 0x99, 0xaa, + 0xbe, 0xfe, 0xd3, 0x2c, 0x5c, 0x0f, 0xd9, 0x7f, 0x4a, 0x5d, 0xd2, 0x22, 0x9c, 0x92, 0xd4, 0xf9, + 0xc3, 0x04, 0xe7, 0xbf, 0x05, 0x8b, 0xd4, 0x13, 0x84, 0xf7, 0xed, 0xae, 0x3c, 0xe0, 0x52, 0x43, + 0x37, 0xb2, 0xf6, 0x99, 0x11, 0x96, 0x79, 0xa2, 0x3c, 0xad, 0x8b, 0x18, 0xbc, 0x0b, 0x25, 0xdb, + 0x71, 0x38, 0x71, 0xe4, 0x7a, 0x93, 0x23, 0x57, 0x6a, 0xdc, 0xca, 0x4e, 0xb1, 0x3d, 0x70, 0xb4, + 0x86, 0xa3, 0xf0, 0x5b, 0xb0, 0xc8, 0xf8, 0x29, 0xe1, 0xed, 0x93, 0xb3, 0xca, 0xbc, 0x84, 0xb7, + 0x20, 0x9f, 0x77, 0xce, 0xf0, 0x27, 0x30, 0xd7, 0xa7, 0xe4, 0x45, 0x65, 0xa1, 0x8a, 0x6a, 0xcb, + 0x8d, 0x8d, 0xec, 0xc4, 0x99, 0x34, 0x18, 0x83, 0x37, 0x47, 0x94, 0xbc, 0xb0, 0x64, 0x9e, 0xd1, + 0x79, 0x5f, 0x2c, 0x9c, 0xf7, 0xa5, 0xe4, 0xbc, 0xaf, 0xc3, 0xf2, 0x68, 0x4e, 0xbc, 0x08, 0x73, + 0x1f, 0x7c, 0x7a, 0x70, 0xb0, 0xf2, 0x06, 0x2e, 0xc1, 0xc2, 0x87, 0xfb, 0xdb, 0x7b, 0xfb, 0x56, + 0x6b, 0x05, 0xe9, 0xdf, 0x22, 0x28, 0x27, 0x31, 0xa9, 0x1b, 0xb1, 0x0d, 0x25, 0x41, 0x5d, 0x12, + 0x4a, 0x08, 0x25, 0xf1, 0x55, 0xa8, 0xe6, 0x53, 0xae, 0xc2, 0x41, 0x5c, 0xfc, 0x9e, 0xf8, 0x1e, + 0xf8, 0x70, 0x23, 0x9a, 0xea, 0xfc, 0x09, 0x19, 0x9e, 0xe7, 0x04, 0xb2, 0x99, 0xe9, 0x91, 0x85, + 0x9b, 0xe9, 0x7a, 0xb2, 0xe4, 0x3e, 0xe7, 0x8c, 0xa7, 0xdb, 0x46, 0x53, 0xb7, 0x5d, 0x87, 0xf9, + 0x48, 0x88, 0xd4, 0x25, 0xc3, 0x71, 0x34, 0xf7, 0x3b, 0x46, 0x4b, 0x5a, 0x2c, 0xe5, 0xd1, 0xf8, + 0x07, 0xe0, 0x72, 0x74, 0x97, 0x5a, 0x91, 0x54, 0xe3, 0xbf, 0x10, 0x54, 0xc7, 0x49, 0x04, 0x7e, + 0x94, 0x3f, 0x5e, 0x13, 0xc8, 0x9d, 0xb6, 0xf5, 0x5f, 0xc3, 0xa3, 0xd9, 0xd0, 0x37, 0xbe, 0xf9, + 0xf3, 0xef, 0xef, 0x67, 0x1e, 0xe0, 0x46, 0x28, 0xd5, 0x5f, 0x85, 0x87, 0xf2, 0xc8, 0xe7, 0xec, + 0x33, 0xd2, 0x11, 0x81, 0x59, 0x3f, 0x1f, 0x7c, 0x0e, 0x64, 0x41, 0xff, 0x1d, 0xc1, 0xdb, 0xc5, + 0x92, 0x82, 0x37, 0xb3, 0xe1, 0x4d, 0x24, 0x44, 0xda, 0xa4, 0xba, 0xa8, 0x3f, 0x94, 0x4d, 0xbc, + 0x8f, 0x1f, 0x64, 0x35, 0x51, 0xd8, 0x83, 0x59, 0x3f, 0xc7, 0xbf, 0xa1, 0x68, 0xa9, 0xa5, 0x24, + 0x05, 0x37, 0x0a, 0xc8, 0xcd, 0x11, 0x42, 0xad, 0x39, 0x55, 0x8c, 0x3a, 0x05, 0x53, 0x36, 0x70, + 0x07, 0xaf, 0xe7, 0x9c, 0x42, 0x0a, 0xd9, 0xcf, 0x08, 0xae, 0x66, 0x08, 0x0e, 0xbe, 0x9f, 0xcf, + 0x77, 0xf6, 0x9a, 0xd7, 0x0a, 0x75, 0x43, 0x6f, 0x48, 0x60, 0xf7, 0x70, 0x3d, 0x9b, 0xd9, 0x24, + 0x2e, 0xb3, 0x5e, 0x3f, 0xc7, 0xbf, 0x22, 0x28, 0x67, 0x4b, 0x1b, 0xce, 0x21, 0xa7, 0x50, 0x08, + 0xc7, 0x20, 0xdc, 0x91, 0x08, 0x1f, 0xea, 0x93, 0x52, 0xb7, 0x91, 0x56, 0xd0, 0x90, 0xcd, 0x72, + 0xb6, 0x18, 0xe6, 0x21, 0x2e, 0x94, 0x4e, 0xad, 0x1c, 0x07, 0xc5, 0x9f, 0xb9, 0xc6, 0x7e, 0xf8, + 0x99, 0x1b, 0xb3, 0x59, 0x9f, 0x86, 0xcd, 0x1f, 0x11, 0x2c, 0x8f, 0xee, 0x75, 0x7c, 0x77, 0x0a, + 0x45, 0xd2, 0xee, 0x4d, 0xe6, 0xac, 0x06, 0xb1, 0x26, 0x11, 0xea, 0xb8, 0x9a, 0xcd, 0xe6, 0xd0, + 0x6a, 0x7c, 0x85, 0x60, 0x25, 0xb9, 0x77, 0xf1, 0x7b, 0x45, 0xe7, 0x9b, 0xc6, 0x96, 0xc7, 0xd3, + 0x5d, 0x89, 0xe2, 0xb6, 0x3e, 0x16, 0xc5, 0x06, 0xaa, 0xef, 0xbc, 0x46, 0x50, 0xe9, 0x30, 0x37, + 0xb3, 0xf2, 0x0e, 0x1e, 0xd9, 0xc8, 0x87, 0x61, 0x99, 0x43, 0xf4, 0x6c, 0x4b, 0xf9, 0x3a, 0xac, + 0x6b, 0x7b, 0x8e, 0xc1, 0xb8, 0x63, 0x3a, 0xc4, 0x93, 0x20, 0xcc, 0xc8, 0x64, 0xfb, 0x34, 0x18, + 0xfd, 0x1f, 0xb3, 0x39, 0x78, 0x7a, 0x3d, 0xa3, 0x3d, 0x8e, 0x12, 0xec, 0x76, 0x59, 0xef, 0x34, + 0x5e, 0x4d, 0x61, 0xc9, 0xa3, 0xe6, 0x1f, 0xb1, 0xf1, 0x58, 0x1a, 0x8f, 0x07, 0xc6, 0xe3, 0xa3, + 0xe6, 0xc9, 0xbc, 0x2c, 0xd2, 0xfc, 0x37, 0x00, 0x00, 0xff, 0xff, 0x6b, 0x96, 0x3c, 0x74, 0xeb, + 0x0d, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/monitoring/v3/mutation_record.pb.go b/vendor/google.golang.org/genproto/googleapis/monitoring/v3/mutation_record.pb.go new file mode 100644 index 0000000..32f983d --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/monitoring/v3/mutation_record.pb.go @@ -0,0 +1,67 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/monitoring/v3/mutation_record.proto + +package monitoring + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import google_protobuf2 "github.com/golang/protobuf/ptypes/timestamp" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Describes a change made to a configuration. +type MutationRecord struct { + // When the change occurred. + MutateTime *google_protobuf2.Timestamp `protobuf:"bytes,1,opt,name=mutate_time,json=mutateTime" json:"mutate_time,omitempty"` + // The email address of the user making the change. + MutatedBy string `protobuf:"bytes,2,opt,name=mutated_by,json=mutatedBy" json:"mutated_by,omitempty"` +} + +func (m *MutationRecord) Reset() { *m = MutationRecord{} } +func (m *MutationRecord) String() string { return proto.CompactTextString(m) } +func (*MutationRecord) ProtoMessage() {} +func (*MutationRecord) Descriptor() ([]byte, []int) { return fileDescriptor7, []int{0} } + +func (m *MutationRecord) GetMutateTime() *google_protobuf2.Timestamp { + if m != nil { + return m.MutateTime + } + return nil +} + +func (m *MutationRecord) GetMutatedBy() string { + if m != nil { + return m.MutatedBy + } + return "" +} + +func init() { + proto.RegisterType((*MutationRecord)(nil), "google.monitoring.v3.MutationRecord") +} + +func init() { proto.RegisterFile("google/monitoring/v3/mutation_record.proto", fileDescriptor7) } + +var fileDescriptor7 = []byte{ + // 251 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4a, 0xcf, 0xcf, 0x4f, + 0xcf, 0x49, 0xd5, 0xcf, 0xcd, 0xcf, 0xcb, 0x2c, 0xc9, 0x2f, 0xca, 0xcc, 0x4b, 0xd7, 0x2f, 0x33, + 0xd6, 0xcf, 0x2d, 0x2d, 0x49, 0x2c, 0xc9, 0xcc, 0xcf, 0x8b, 0x2f, 0x4a, 0x4d, 0xce, 0x2f, 0x4a, + 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x81, 0xa8, 0xd5, 0x43, 0xa8, 0xd5, 0x2b, 0x33, + 0x96, 0x92, 0x87, 0x9a, 0x00, 0x56, 0x93, 0x54, 0x9a, 0xa6, 0x5f, 0x92, 0x99, 0x9b, 0x5a, 0x5c, + 0x92, 0x98, 0x5b, 0x00, 0xd1, 0xa6, 0x94, 0xc3, 0xc5, 0xe7, 0x0b, 0x35, 0x2f, 0x08, 0x6c, 0x9c, + 0x90, 0x35, 0x17, 0x37, 0xd8, 0x86, 0xd4, 0x78, 0x90, 0x5a, 0x09, 0x46, 0x05, 0x46, 0x0d, 0x6e, + 0x23, 0x29, 0x3d, 0xa8, 0xf1, 0x30, 0x83, 0xf4, 0x42, 0x60, 0x06, 0x05, 0x71, 0x41, 0x94, 0x83, + 0x04, 0x84, 0x64, 0xb9, 0xa0, 0xbc, 0x94, 0xf8, 0xa4, 0x4a, 0x09, 0x26, 0x05, 0x46, 0x0d, 0xce, + 0x20, 0x4e, 0xa8, 0x88, 0x53, 0xa5, 0xd3, 0x6a, 0x46, 0x2e, 0x89, 0xe4, 0xfc, 0x5c, 0x3d, 0x6c, + 0x6e, 0x75, 0x12, 0x46, 0x75, 0x48, 0x00, 0xc8, 0xa6, 0x00, 0xc6, 0x28, 0x3b, 0xa8, 0xe2, 0xf4, + 0xfc, 0x9c, 0xc4, 0xbc, 0x74, 0xbd, 0xfc, 0xa2, 0x74, 0xfd, 0xf4, 0xd4, 0x3c, 0xb0, 0x3b, 0xf4, + 0x21, 0x52, 0x89, 0x05, 0x99, 0xc5, 0xa8, 0x61, 0x64, 0x8d, 0xe0, 0xad, 0x62, 0x92, 0x72, 0x87, + 0x18, 0xe0, 0x9c, 0x93, 0x5f, 0x9a, 0xa2, 0xe7, 0x8b, 0xb0, 0x33, 0xcc, 0xf8, 0x14, 0x4c, 0x32, + 0x06, 0x2c, 0x19, 0x83, 0x90, 0x8c, 0x09, 0x33, 0x4e, 0x62, 0x03, 0x5b, 0x62, 0x0c, 0x08, 0x00, + 0x00, 0xff, 0xff, 0x95, 0xa7, 0xf3, 0xbd, 0x87, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/monitoring/v3/notification.pb.go b/vendor/google.golang.org/genproto/googleapis/monitoring/v3/notification.pb.go new file mode 100644 index 0000000..6d0534e --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/monitoring/v3/notification.pb.go @@ -0,0 +1,313 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/monitoring/v3/notification.proto + +package monitoring + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_api3 "google.golang.org/genproto/googleapis/api/label" +import google_protobuf4 "github.com/golang/protobuf/ptypes/wrappers" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Indicates whether the channel has been verified or not. It is illegal +// to specify this field in a +// [`CreateNotificationChannel`][google.monitoring.v3.NotificationChannelService.CreateNotificationChannel] +// or an +// [`UpdateNotificationChannel`][google.monitoring.v3.NotificationChannelService.UpdateNotificationChannel] +// operation. +type NotificationChannel_VerificationStatus int32 + +const ( + // Sentinel value used to indicate that the state is unknown, omitted, or + // is not applicable (as in the case of channels that neither support + // nor require verification in order to function). + NotificationChannel_VERIFICATION_STATUS_UNSPECIFIED NotificationChannel_VerificationStatus = 0 + // The channel has yet to be verified and requires verification to function. + // Note that this state also applies to the case where the verification + // process has been initiated by sending a verification code but where + // the verification code has not been submitted to complete the process. + NotificationChannel_UNVERIFIED NotificationChannel_VerificationStatus = 1 + // It has been proven that notifications can be received on this + // notification channel and that someone on the project has access + // to messages that are delivered to that channel. + NotificationChannel_VERIFIED NotificationChannel_VerificationStatus = 2 +) + +var NotificationChannel_VerificationStatus_name = map[int32]string{ + 0: "VERIFICATION_STATUS_UNSPECIFIED", + 1: "UNVERIFIED", + 2: "VERIFIED", +} +var NotificationChannel_VerificationStatus_value = map[string]int32{ + "VERIFICATION_STATUS_UNSPECIFIED": 0, + "UNVERIFIED": 1, + "VERIFIED": 2, +} + +func (x NotificationChannel_VerificationStatus) String() string { + return proto.EnumName(NotificationChannel_VerificationStatus_name, int32(x)) +} +func (NotificationChannel_VerificationStatus) EnumDescriptor() ([]byte, []int) { + return fileDescriptor8, []int{1, 0} +} + +// A description of a notification channel. The descriptor includes +// the properties of the channel and the set of labels or fields that +// must be specified to configure channels of a given type. +type NotificationChannelDescriptor struct { + // The full REST resource name for this descriptor. The syntax is: + // + // projects/[PROJECT_ID]/notificationChannelDescriptors/[TYPE] + // + // In the above, `[TYPE]` is the value of the `type` field. + Name string `protobuf:"bytes,6,opt,name=name" json:"name,omitempty"` + // The type of notification channel, such as "email", "sms", etc. + // Notification channel types are globally unique. + Type string `protobuf:"bytes,1,opt,name=type" json:"type,omitempty"` + // A human-readable name for the notification channel type. This + // form of the name is suitable for a user interface. + DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // A human-readable description of the notification channel + // type. The description may include a description of the properties + // of the channel and pointers to external documentation. + Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` + // The set of labels that must be defined to identify a particular + // channel of the corresponding type. Each label includes a + // description for how that field should be populated. + Labels []*google_api3.LabelDescriptor `protobuf:"bytes,4,rep,name=labels" json:"labels,omitempty"` + // The tiers that support this notification channel; the project service tier + // must be one of the supported_tiers. + SupportedTiers []ServiceTier `protobuf:"varint,5,rep,packed,name=supported_tiers,json=supportedTiers,enum=google.monitoring.v3.ServiceTier" json:"supported_tiers,omitempty"` +} + +func (m *NotificationChannelDescriptor) Reset() { *m = NotificationChannelDescriptor{} } +func (m *NotificationChannelDescriptor) String() string { return proto.CompactTextString(m) } +func (*NotificationChannelDescriptor) ProtoMessage() {} +func (*NotificationChannelDescriptor) Descriptor() ([]byte, []int) { return fileDescriptor8, []int{0} } + +func (m *NotificationChannelDescriptor) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *NotificationChannelDescriptor) GetType() string { + if m != nil { + return m.Type + } + return "" +} + +func (m *NotificationChannelDescriptor) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func (m *NotificationChannelDescriptor) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *NotificationChannelDescriptor) GetLabels() []*google_api3.LabelDescriptor { + if m != nil { + return m.Labels + } + return nil +} + +func (m *NotificationChannelDescriptor) GetSupportedTiers() []ServiceTier { + if m != nil { + return m.SupportedTiers + } + return nil +} + +// A `NotificationChannel` is a medium through which an alert is +// delivered when a policy violation is detected. Examples of channels +// include email, SMS, and third-party messaging applications. Fields +// containing sensitive information like authentication tokens or +// contact info are only partially populated on retrieval. +type NotificationChannel struct { + // The type of the notification channel. This field matches the + // value of the [NotificationChannelDescriptor.type][google.monitoring.v3.NotificationChannelDescriptor.type] field. + Type string `protobuf:"bytes,1,opt,name=type" json:"type,omitempty"` + // The full REST resource name for this channel. The syntax is: + // + // projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID] + // + // The `[CHANNEL_ID]` is automatically assigned by the server on creation. + Name string `protobuf:"bytes,6,opt,name=name" json:"name,omitempty"` + // An optional human-readable name for this notification channel. It is + // recommended that you specify a non-empty and unique name in order to + // make it easier to identify the channels in your project, though this is + // not enforced. The display name is limited to 512 Unicode characters. + DisplayName string `protobuf:"bytes,3,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // An optional human-readable description of this notification channel. This + // description may provide additional details, beyond the display + // name, for the channel. This may not exceeed 1024 Unicode characters. + Description string `protobuf:"bytes,4,opt,name=description" json:"description,omitempty"` + // Configuration fields that define the channel and its behavior. The + // permissible and required labels are specified in the + // [NotificationChannelDescriptor.labels][google.monitoring.v3.NotificationChannelDescriptor.labels] of the + // `NotificationChannelDescriptor` corresponding to the `type` field. + Labels map[string]string `protobuf:"bytes,5,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // User-supplied key/value data that does not need to conform to + // the corresponding `NotificationChannelDescriptor`'s schema, unlike + // the `labels` field. This field is intended to be used for organizing + // and identifying the `NotificationChannel` objects. + // + // The field can contain up to 64 entries. Each key and value is limited to + // 63 Unicode characters or 128 bytes, whichever is smaller. Labels and + // values can contain only lowercase letters, numerals, underscores, and + // dashes. Keys must begin with a letter. + UserLabels map[string]string `protobuf:"bytes,8,rep,name=user_labels,json=userLabels" json:"user_labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Indicates whether this channel has been verified or not. On a + // [`ListNotificationChannels`][google.monitoring.v3.NotificationChannelService.ListNotificationChannels] + // or + // [`GetNotificationChannel`][google.monitoring.v3.NotificationChannelService.GetNotificationChannel] + // operation, this field is expected to be populated. + // + // If the value is `UNVERIFIED`, then it indicates that the channel is + // non-functioning (it both requires verification and lacks verification); + // otherwise, it is assumed that the channel works. + // + // If the channel is neither `VERIFIED` nor `UNVERIFIED`, it implies that + // the channel is of a type that does not require verification or that + // this specific channel has been exempted from verification because it was + // created prior to verification being required for channels of this type. + // + // This field cannot be modified using a standard + // [`UpdateNotificationChannel`][google.monitoring.v3.NotificationChannelService.UpdateNotificationChannel] + // operation. To change the value of this field, you must call + // [`VerifyNotificationChannel`][google.monitoring.v3.NotificationChannelService.VerifyNotificationChannel]. + VerificationStatus NotificationChannel_VerificationStatus `protobuf:"varint,9,opt,name=verification_status,json=verificationStatus,enum=google.monitoring.v3.NotificationChannel_VerificationStatus" json:"verification_status,omitempty"` + // Whether notifications are forwarded to the described channel. This makes + // it possible to disable delivery of notifications to a particular channel + // without removing the channel from all alerting policies that reference + // the channel. This is a more convenient approach when the change is + // temporary and you want to receive notifications from the same set + // of alerting policies on the channel at some point in the future. + Enabled *google_protobuf4.BoolValue `protobuf:"bytes,11,opt,name=enabled" json:"enabled,omitempty"` +} + +func (m *NotificationChannel) Reset() { *m = NotificationChannel{} } +func (m *NotificationChannel) String() string { return proto.CompactTextString(m) } +func (*NotificationChannel) ProtoMessage() {} +func (*NotificationChannel) Descriptor() ([]byte, []int) { return fileDescriptor8, []int{1} } + +func (m *NotificationChannel) GetType() string { + if m != nil { + return m.Type + } + return "" +} + +func (m *NotificationChannel) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *NotificationChannel) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func (m *NotificationChannel) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *NotificationChannel) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +func (m *NotificationChannel) GetUserLabels() map[string]string { + if m != nil { + return m.UserLabels + } + return nil +} + +func (m *NotificationChannel) GetVerificationStatus() NotificationChannel_VerificationStatus { + if m != nil { + return m.VerificationStatus + } + return NotificationChannel_VERIFICATION_STATUS_UNSPECIFIED +} + +func (m *NotificationChannel) GetEnabled() *google_protobuf4.BoolValue { + if m != nil { + return m.Enabled + } + return nil +} + +func init() { + proto.RegisterType((*NotificationChannelDescriptor)(nil), "google.monitoring.v3.NotificationChannelDescriptor") + proto.RegisterType((*NotificationChannel)(nil), "google.monitoring.v3.NotificationChannel") + proto.RegisterEnum("google.monitoring.v3.NotificationChannel_VerificationStatus", NotificationChannel_VerificationStatus_name, NotificationChannel_VerificationStatus_value) +} + +func init() { proto.RegisterFile("google/monitoring/v3/notification.proto", fileDescriptor8) } + +var fileDescriptor8 = []byte{ + // 599 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x94, 0xdd, 0x6e, 0xd3, 0x30, + 0x14, 0xc7, 0x49, 0xbb, 0x8e, 0xcd, 0x99, 0xba, 0xe1, 0x4d, 0x28, 0x0a, 0x5f, 0xdd, 0xb8, 0xa0, + 0x57, 0x89, 0xd4, 0x82, 0xc4, 0xf8, 0x92, 0xb6, 0xae, 0x43, 0x45, 0xac, 0x4c, 0xfd, 0x42, 0x9a, + 0x26, 0x55, 0x6e, 0xeb, 0x05, 0x8b, 0xc4, 0x8e, 0x6c, 0x27, 0xa8, 0x0f, 0xc1, 0x63, 0x70, 0x01, + 0x8f, 0xc2, 0x53, 0xa1, 0x38, 0x6e, 0x12, 0xb6, 0x48, 0x8c, 0x3b, 0x9f, 0x73, 0xfe, 0xe7, 0x7f, + 0xce, 0xf9, 0x35, 0x2a, 0x78, 0xe6, 0x31, 0xe6, 0xf9, 0xd8, 0x0d, 0x18, 0x25, 0x92, 0x71, 0x42, + 0x3d, 0x37, 0x6e, 0xbb, 0x94, 0x49, 0x72, 0x45, 0xe6, 0x48, 0x12, 0x46, 0x9d, 0x90, 0x33, 0xc9, + 0xe0, 0x5e, 0x2a, 0x74, 0x72, 0xa1, 0x13, 0xb7, 0xed, 0x87, 0xba, 0x1d, 0x85, 0xc4, 0x45, 0x94, + 0x32, 0xa9, 0x5a, 0x44, 0xda, 0x63, 0xdf, 0x2f, 0x54, 0x7d, 0x34, 0xc3, 0xbe, 0xce, 0xef, 0x97, + 0x0e, 0x9d, 0xb3, 0x20, 0x58, 0x8d, 0xb3, 0x1f, 0x6b, 0x89, 0x8a, 0x66, 0xd1, 0x95, 0xfb, 0x8d, + 0xa3, 0x30, 0xc4, 0x5c, 0x5b, 0x1f, 0x7c, 0xaf, 0x80, 0x47, 0xfd, 0xc2, 0x96, 0x9d, 0x2f, 0x88, + 0x52, 0xec, 0x9f, 0x60, 0x31, 0xe7, 0x24, 0x94, 0x8c, 0x43, 0x08, 0xd6, 0x28, 0x0a, 0xb0, 0xb5, + 0xde, 0x30, 0x9a, 0x9b, 0x03, 0xf5, 0x4e, 0x72, 0x72, 0x19, 0x62, 0xcb, 0x48, 0x73, 0xc9, 0x1b, + 0xee, 0x83, 0xad, 0x05, 0x11, 0xa1, 0x8f, 0x96, 0x53, 0xa5, 0xaf, 0xa8, 0x9a, 0xa9, 0x73, 0xfd, + 0xa4, 0xad, 0x01, 0xcc, 0x85, 0x36, 0x26, 0x8c, 0x5a, 0x55, 0xad, 0xc8, 0x53, 0xb0, 0x0d, 0xd6, + 0xd5, 0x81, 0xc2, 0x5a, 0x6b, 0x54, 0x9b, 0x66, 0xeb, 0x81, 0xa3, 0x71, 0xa1, 0x90, 0x38, 0x1f, + 0x93, 0x4a, 0xbe, 0xd9, 0x40, 0x4b, 0xe1, 0x07, 0xb0, 0x2d, 0xa2, 0x30, 0x64, 0x5c, 0xe2, 0xc5, + 0x54, 0x12, 0xcc, 0x85, 0x55, 0x6b, 0x54, 0x9b, 0xf5, 0xd6, 0xbe, 0x53, 0x06, 0xdb, 0x19, 0x62, + 0x1e, 0x93, 0x39, 0x1e, 0x11, 0xcc, 0x07, 0xf5, 0xac, 0x33, 0x09, 0xc5, 0xc1, 0x8f, 0x1a, 0xd8, + 0x2d, 0xe1, 0x51, 0x7a, 0x71, 0x19, 0x99, 0xeb, 0x14, 0xaa, 0xff, 0xa4, 0xb0, 0x76, 0x93, 0xc2, + 0x59, 0x46, 0xa1, 0xa6, 0x28, 0xbc, 0x28, 0xbf, 0xa3, 0x64, 0xcf, 0x94, 0x91, 0xe8, 0x52, 0xc9, + 0x97, 0x19, 0x9f, 0x0b, 0x60, 0x46, 0x02, 0xf3, 0xa9, 0xf6, 0xdc, 0x50, 0x9e, 0x87, 0xb7, 0xf7, + 0x1c, 0x0b, 0xcc, 0x8b, 0xbe, 0x20, 0xca, 0x12, 0x30, 0x00, 0xbb, 0x31, 0xe6, 0x59, 0xcb, 0x54, + 0x48, 0x24, 0x23, 0x61, 0x6d, 0x36, 0x8c, 0x66, 0xbd, 0xf5, 0xe6, 0xf6, 0x33, 0x26, 0x05, 0x93, + 0xa1, 0xf2, 0x18, 0xc0, 0xf8, 0x46, 0x0e, 0x3e, 0x07, 0x77, 0x31, 0x45, 0x33, 0x1f, 0x2f, 0x2c, + 0xb3, 0x61, 0x34, 0xcd, 0x96, 0xbd, 0x1a, 0xb1, 0xfa, 0xc0, 0x9d, 0x63, 0xc6, 0xfc, 0x09, 0xf2, + 0x23, 0x3c, 0x58, 0x49, 0xed, 0x43, 0x60, 0x16, 0xf6, 0x87, 0x3b, 0xa0, 0xfa, 0x15, 0x2f, 0xf5, + 0x4f, 0x99, 0x3c, 0xe1, 0x1e, 0xa8, 0xc5, 0x49, 0x8b, 0xfe, 0x68, 0xd3, 0xe0, 0x55, 0xe5, 0xa5, + 0x61, 0xbf, 0x05, 0xdb, 0xd7, 0xce, 0xff, 0x9f, 0xf6, 0x83, 0xcf, 0x00, 0xde, 0xbc, 0x0c, 0x3e, + 0x05, 0x4f, 0x26, 0xdd, 0x41, 0xef, 0xb4, 0xd7, 0x39, 0x1a, 0xf5, 0x3e, 0xf5, 0xa7, 0xc3, 0xd1, + 0xd1, 0x68, 0x3c, 0x9c, 0x8e, 0xfb, 0xc3, 0xf3, 0x6e, 0xa7, 0x77, 0xda, 0xeb, 0x9e, 0xec, 0xdc, + 0x81, 0x75, 0x00, 0xc6, 0xfd, 0x54, 0xd6, 0x3d, 0xd9, 0x31, 0xe0, 0x16, 0xd8, 0xc8, 0xa2, 0xca, + 0xf1, 0x4f, 0x03, 0x58, 0x73, 0x16, 0x94, 0x02, 0x3e, 0xbe, 0x57, 0x24, 0x7c, 0x9e, 0x80, 0x39, + 0x37, 0x2e, 0xde, 0x69, 0xa9, 0xc7, 0x7c, 0x44, 0x3d, 0x87, 0x71, 0xcf, 0xf5, 0x30, 0x55, 0xd8, + 0xdc, 0xb4, 0x84, 0x42, 0x22, 0xfe, 0xfe, 0x2f, 0x79, 0x9d, 0x47, 0xbf, 0x2a, 0xf6, 0xfb, 0xd4, + 0xa0, 0xe3, 0xb3, 0x68, 0xe1, 0x9c, 0xe5, 0x13, 0x27, 0xed, 0xdf, 0xab, 0xe2, 0xa5, 0x2a, 0x5e, + 0xe6, 0xc5, 0xcb, 0x49, 0x7b, 0xb6, 0xae, 0x86, 0xb4, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0xdf, + 0xb9, 0x3f, 0x8b, 0x24, 0x05, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/monitoring/v3/notification_service.pb.go b/vendor/google.golang.org/genproto/googleapis/monitoring/v3/notification_service.pb.go new file mode 100644 index 0000000..ea5cf92 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/monitoring/v3/notification_service.pb.go @@ -0,0 +1,1035 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/monitoring/v3/notification_service.proto + +package monitoring + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf5 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf6 "google.golang.org/genproto/protobuf/field_mask" +import google_protobuf2 "github.com/golang/protobuf/ptypes/timestamp" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// The `ListNotificationChannelDescriptors` request. +type ListNotificationChannelDescriptorsRequest struct { + // The REST resource name of the parent from which to retrieve + // the notification channel descriptors. The expected syntax is: + // + // projects/[PROJECT_ID] + // + // Note that this names the parent container in which to look for the + // descriptors; to retrieve a single descriptor by name, use the + // [GetNotificationChannelDescriptor][google.monitoring.v3.NotificationChannelService.GetNotificationChannelDescriptor] + // operation, instead. + Name string `protobuf:"bytes,4,opt,name=name" json:"name,omitempty"` + // The maximum number of results to return in a single response. If + // not set to a positive number, a reasonable value will be chosen by the + // service. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // If non-empty, `page_token` must contain a value returned as the + // `next_page_token` in a previous response to request the next set + // of results. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListNotificationChannelDescriptorsRequest) Reset() { + *m = ListNotificationChannelDescriptorsRequest{} +} +func (m *ListNotificationChannelDescriptorsRequest) String() string { return proto.CompactTextString(m) } +func (*ListNotificationChannelDescriptorsRequest) ProtoMessage() {} +func (*ListNotificationChannelDescriptorsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor9, []int{0} +} + +func (m *ListNotificationChannelDescriptorsRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ListNotificationChannelDescriptorsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListNotificationChannelDescriptorsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// The `ListNotificationChannelDescriptors` response. +type ListNotificationChannelDescriptorsResponse struct { + // The monitored resource descriptors supported for the specified + // project, optionally filtered. + ChannelDescriptors []*NotificationChannelDescriptor `protobuf:"bytes,1,rep,name=channel_descriptors,json=channelDescriptors" json:"channel_descriptors,omitempty"` + // If not empty, indicates that there may be more results that match + // the request. Use the value in the `page_token` field in a + // subsequent request to fetch the next set of results. If empty, + // all results have been returned. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListNotificationChannelDescriptorsResponse) Reset() { + *m = ListNotificationChannelDescriptorsResponse{} +} +func (m *ListNotificationChannelDescriptorsResponse) String() string { + return proto.CompactTextString(m) +} +func (*ListNotificationChannelDescriptorsResponse) ProtoMessage() {} +func (*ListNotificationChannelDescriptorsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor9, []int{1} +} + +func (m *ListNotificationChannelDescriptorsResponse) GetChannelDescriptors() []*NotificationChannelDescriptor { + if m != nil { + return m.ChannelDescriptors + } + return nil +} + +func (m *ListNotificationChannelDescriptorsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The `GetNotificationChannelDescriptor` response. +type GetNotificationChannelDescriptorRequest struct { + // The channel type for which to execute the request. The format is + // `projects/[PROJECT_ID]/notificationChannelDescriptors/{channel_type}`. + Name string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` +} + +func (m *GetNotificationChannelDescriptorRequest) Reset() { + *m = GetNotificationChannelDescriptorRequest{} +} +func (m *GetNotificationChannelDescriptorRequest) String() string { return proto.CompactTextString(m) } +func (*GetNotificationChannelDescriptorRequest) ProtoMessage() {} +func (*GetNotificationChannelDescriptorRequest) Descriptor() ([]byte, []int) { + return fileDescriptor9, []int{2} +} + +func (m *GetNotificationChannelDescriptorRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The `CreateNotificationChannel` request. +type CreateNotificationChannelRequest struct { + // The project on which to execute the request. The format is: + // + // projects/[PROJECT_ID] + // + // Note that this names the container into which the channel will be + // written. This does not name the newly created channel. The resulting + // channel's name will have a normalized version of this field as a prefix, + // but will add `/notificationChannels/[CHANNEL_ID]` to identify the channel. + Name string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` + // The definition of the `NotificationChannel` to create. + NotificationChannel *NotificationChannel `protobuf:"bytes,2,opt,name=notification_channel,json=notificationChannel" json:"notification_channel,omitempty"` +} + +func (m *CreateNotificationChannelRequest) Reset() { *m = CreateNotificationChannelRequest{} } +func (m *CreateNotificationChannelRequest) String() string { return proto.CompactTextString(m) } +func (*CreateNotificationChannelRequest) ProtoMessage() {} +func (*CreateNotificationChannelRequest) Descriptor() ([]byte, []int) { + return fileDescriptor9, []int{3} +} + +func (m *CreateNotificationChannelRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *CreateNotificationChannelRequest) GetNotificationChannel() *NotificationChannel { + if m != nil { + return m.NotificationChannel + } + return nil +} + +// The `ListNotificationChannels` request. +type ListNotificationChannelsRequest struct { + // The project on which to execute the request. The format is + // `projects/[PROJECT_ID]`. That is, this names the container + // in which to look for the notification channels; it does not name a + // specific channel. To query a specific channel by REST resource name, use + // the + // [`GetNotificationChannel`][google.monitoring.v3.NotificationChannelService.GetNotificationChannel] operation. + Name string `protobuf:"bytes,5,opt,name=name" json:"name,omitempty"` + // If provided, this field specifies the criteria that must be met by + // notification channels to be included in the response. + // + // For more details, see [sorting and + // filtering](/monitoring/api/v3/sorting-and-filtering). + Filter string `protobuf:"bytes,6,opt,name=filter" json:"filter,omitempty"` + // A comma-separated list of fields by which to sort the result. Supports + // the same set of fields as in `filter`. Entries can be prefixed with + // a minus sign to sort in descending rather than ascending order. + // + // For more details, see [sorting and + // filtering](/monitoring/api/v3/sorting-and-filtering). + OrderBy string `protobuf:"bytes,7,opt,name=order_by,json=orderBy" json:"order_by,omitempty"` + // The maximum number of results to return in a single response. If + // not set to a positive number, a reasonable value will be chosen by the + // service. + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // If non-empty, `page_token` must contain a value returned as the + // `next_page_token` in a previous response to request the next set + // of results. + PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListNotificationChannelsRequest) Reset() { *m = ListNotificationChannelsRequest{} } +func (m *ListNotificationChannelsRequest) String() string { return proto.CompactTextString(m) } +func (*ListNotificationChannelsRequest) ProtoMessage() {} +func (*ListNotificationChannelsRequest) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{4} } + +func (m *ListNotificationChannelsRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ListNotificationChannelsRequest) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +func (m *ListNotificationChannelsRequest) GetOrderBy() string { + if m != nil { + return m.OrderBy + } + return "" +} + +func (m *ListNotificationChannelsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListNotificationChannelsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// The `ListNotificationChannels` response. +type ListNotificationChannelsResponse struct { + // The notification channels defined for the specified project. + NotificationChannels []*NotificationChannel `protobuf:"bytes,3,rep,name=notification_channels,json=notificationChannels" json:"notification_channels,omitempty"` + // If not empty, indicates that there may be more results that match + // the request. Use the value in the `page_token` field in a + // subsequent request to fetch the next set of results. If empty, + // all results have been returned. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListNotificationChannelsResponse) Reset() { *m = ListNotificationChannelsResponse{} } +func (m *ListNotificationChannelsResponse) String() string { return proto.CompactTextString(m) } +func (*ListNotificationChannelsResponse) ProtoMessage() {} +func (*ListNotificationChannelsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor9, []int{5} +} + +func (m *ListNotificationChannelsResponse) GetNotificationChannels() []*NotificationChannel { + if m != nil { + return m.NotificationChannels + } + return nil +} + +func (m *ListNotificationChannelsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The `GetNotificationChannel` request. +type GetNotificationChannelRequest struct { + // The channel for which to execute the request. The format is + // `projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID]`. + Name string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` +} + +func (m *GetNotificationChannelRequest) Reset() { *m = GetNotificationChannelRequest{} } +func (m *GetNotificationChannelRequest) String() string { return proto.CompactTextString(m) } +func (*GetNotificationChannelRequest) ProtoMessage() {} +func (*GetNotificationChannelRequest) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{6} } + +func (m *GetNotificationChannelRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The `UpdateNotificationChannel` request. +type UpdateNotificationChannelRequest struct { + // The fields to update. + UpdateMask *google_protobuf6.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` + // A description of the changes to be applied to the specified + // notification channel. The description must provide a definition for + // fields to be updated; the names of these fields should also be + // included in the `update_mask`. + NotificationChannel *NotificationChannel `protobuf:"bytes,3,opt,name=notification_channel,json=notificationChannel" json:"notification_channel,omitempty"` +} + +func (m *UpdateNotificationChannelRequest) Reset() { *m = UpdateNotificationChannelRequest{} } +func (m *UpdateNotificationChannelRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateNotificationChannelRequest) ProtoMessage() {} +func (*UpdateNotificationChannelRequest) Descriptor() ([]byte, []int) { + return fileDescriptor9, []int{7} +} + +func (m *UpdateNotificationChannelRequest) GetUpdateMask() *google_protobuf6.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +func (m *UpdateNotificationChannelRequest) GetNotificationChannel() *NotificationChannel { + if m != nil { + return m.NotificationChannel + } + return nil +} + +// The `DeleteNotificationChannel` request. +type DeleteNotificationChannelRequest struct { + // The channel for which to execute the request. The format is + // `projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID]`. + Name string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` + // If true, the notification channel will be deleted regardless of its + // use in alert policies (the policies will be updated to remove the + // channel). If false, channels that are still referenced by an existing + // alerting policy will fail to be deleted in a delete operation. + Force bool `protobuf:"varint,5,opt,name=force" json:"force,omitempty"` +} + +func (m *DeleteNotificationChannelRequest) Reset() { *m = DeleteNotificationChannelRequest{} } +func (m *DeleteNotificationChannelRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteNotificationChannelRequest) ProtoMessage() {} +func (*DeleteNotificationChannelRequest) Descriptor() ([]byte, []int) { + return fileDescriptor9, []int{8} +} + +func (m *DeleteNotificationChannelRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *DeleteNotificationChannelRequest) GetForce() bool { + if m != nil { + return m.Force + } + return false +} + +// The `SendNotificationChannelVerificationCode` request. +type SendNotificationChannelVerificationCodeRequest struct { + // The notification channel to which to send a verification code. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *SendNotificationChannelVerificationCodeRequest) Reset() { + *m = SendNotificationChannelVerificationCodeRequest{} +} +func (m *SendNotificationChannelVerificationCodeRequest) String() string { + return proto.CompactTextString(m) +} +func (*SendNotificationChannelVerificationCodeRequest) ProtoMessage() {} +func (*SendNotificationChannelVerificationCodeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor9, []int{9} +} + +func (m *SendNotificationChannelVerificationCodeRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The `GetNotificationChannelVerificationCode` request. +type GetNotificationChannelVerificationCodeRequest struct { + // The notification channel for which a verification code is to be generated + // and retrieved. This must name a channel that is already verified; if + // the specified channel is not verified, the request will fail. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The desired expiration time. If specified, the API will guarantee that + // the returned code will not be valid after the specified timestamp; + // however, the API cannot guarantee that the returned code will be + // valid for at least as long as the requested time (the API puts an upper + // bound on the amount of time for which a code may be valid). If omitted, + // a default expiration will be used, which may be less than the max + // permissible expiration (so specifying an expiration may extend the + // code's lifetime over omitting an expiration, even though the API does + // impose an upper limit on the maximum expiration that is permitted). + ExpireTime *google_protobuf2.Timestamp `protobuf:"bytes,2,opt,name=expire_time,json=expireTime" json:"expire_time,omitempty"` +} + +func (m *GetNotificationChannelVerificationCodeRequest) Reset() { + *m = GetNotificationChannelVerificationCodeRequest{} +} +func (m *GetNotificationChannelVerificationCodeRequest) String() string { + return proto.CompactTextString(m) +} +func (*GetNotificationChannelVerificationCodeRequest) ProtoMessage() {} +func (*GetNotificationChannelVerificationCodeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor9, []int{10} +} + +func (m *GetNotificationChannelVerificationCodeRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *GetNotificationChannelVerificationCodeRequest) GetExpireTime() *google_protobuf2.Timestamp { + if m != nil { + return m.ExpireTime + } + return nil +} + +// The `GetNotificationChannelVerificationCode` request. +type GetNotificationChannelVerificationCodeResponse struct { + // The verification code, which may be used to verify other channels + // that have an equivalent identity (i.e. other channels of the same + // type with the same fingerprint such as other email channels with + // the same email address or other sms channels with the same number). + Code string `protobuf:"bytes,1,opt,name=code" json:"code,omitempty"` + // The expiration time associated with the code that was returned. If + // an expiration was provided in the request, this is the minimum of the + // requested expiration in the request and the max permitted expiration. + ExpireTime *google_protobuf2.Timestamp `protobuf:"bytes,2,opt,name=expire_time,json=expireTime" json:"expire_time,omitempty"` +} + +func (m *GetNotificationChannelVerificationCodeResponse) Reset() { + *m = GetNotificationChannelVerificationCodeResponse{} +} +func (m *GetNotificationChannelVerificationCodeResponse) String() string { + return proto.CompactTextString(m) +} +func (*GetNotificationChannelVerificationCodeResponse) ProtoMessage() {} +func (*GetNotificationChannelVerificationCodeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor9, []int{11} +} + +func (m *GetNotificationChannelVerificationCodeResponse) GetCode() string { + if m != nil { + return m.Code + } + return "" +} + +func (m *GetNotificationChannelVerificationCodeResponse) GetExpireTime() *google_protobuf2.Timestamp { + if m != nil { + return m.ExpireTime + } + return nil +} + +// The `VerifyNotificationChannel` request. +type VerifyNotificationChannelRequest struct { + // The notification channel to verify. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The verification code that was delivered to the channel as + // a result of invoking the `SendNotificationChannelVerificationCode` API + // method or that was retrieved from a verified channel via + // `GetNotificationChannelVerificationCode`. For example, one might have + // "G-123456" or "TKNZGhhd2EyN3I1MnRnMjRv" (in general, one is only + // guaranteed that the code is valid UTF-8; one should not + // make any assumptions regarding the structure or format of the code). + Code string `protobuf:"bytes,2,opt,name=code" json:"code,omitempty"` +} + +func (m *VerifyNotificationChannelRequest) Reset() { *m = VerifyNotificationChannelRequest{} } +func (m *VerifyNotificationChannelRequest) String() string { return proto.CompactTextString(m) } +func (*VerifyNotificationChannelRequest) ProtoMessage() {} +func (*VerifyNotificationChannelRequest) Descriptor() ([]byte, []int) { + return fileDescriptor9, []int{12} +} + +func (m *VerifyNotificationChannelRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *VerifyNotificationChannelRequest) GetCode() string { + if m != nil { + return m.Code + } + return "" +} + +func init() { + proto.RegisterType((*ListNotificationChannelDescriptorsRequest)(nil), "google.monitoring.v3.ListNotificationChannelDescriptorsRequest") + proto.RegisterType((*ListNotificationChannelDescriptorsResponse)(nil), "google.monitoring.v3.ListNotificationChannelDescriptorsResponse") + proto.RegisterType((*GetNotificationChannelDescriptorRequest)(nil), "google.monitoring.v3.GetNotificationChannelDescriptorRequest") + proto.RegisterType((*CreateNotificationChannelRequest)(nil), "google.monitoring.v3.CreateNotificationChannelRequest") + proto.RegisterType((*ListNotificationChannelsRequest)(nil), "google.monitoring.v3.ListNotificationChannelsRequest") + proto.RegisterType((*ListNotificationChannelsResponse)(nil), "google.monitoring.v3.ListNotificationChannelsResponse") + proto.RegisterType((*GetNotificationChannelRequest)(nil), "google.monitoring.v3.GetNotificationChannelRequest") + proto.RegisterType((*UpdateNotificationChannelRequest)(nil), "google.monitoring.v3.UpdateNotificationChannelRequest") + proto.RegisterType((*DeleteNotificationChannelRequest)(nil), "google.monitoring.v3.DeleteNotificationChannelRequest") + proto.RegisterType((*SendNotificationChannelVerificationCodeRequest)(nil), "google.monitoring.v3.SendNotificationChannelVerificationCodeRequest") + proto.RegisterType((*GetNotificationChannelVerificationCodeRequest)(nil), "google.monitoring.v3.GetNotificationChannelVerificationCodeRequest") + proto.RegisterType((*GetNotificationChannelVerificationCodeResponse)(nil), "google.monitoring.v3.GetNotificationChannelVerificationCodeResponse") + proto.RegisterType((*VerifyNotificationChannelRequest)(nil), "google.monitoring.v3.VerifyNotificationChannelRequest") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for NotificationChannelService service + +type NotificationChannelServiceClient interface { + // Lists the descriptors for supported channel types. The use of descriptors + // makes it possible for new channel types to be dynamically added. + ListNotificationChannelDescriptors(ctx context.Context, in *ListNotificationChannelDescriptorsRequest, opts ...grpc.CallOption) (*ListNotificationChannelDescriptorsResponse, error) + // Gets a single channel descriptor. The descriptor indicates which fields + // are expected / permitted for a notification channel of the given type. + GetNotificationChannelDescriptor(ctx context.Context, in *GetNotificationChannelDescriptorRequest, opts ...grpc.CallOption) (*NotificationChannelDescriptor, error) + // Lists the notification channels that have been created for the project. + ListNotificationChannels(ctx context.Context, in *ListNotificationChannelsRequest, opts ...grpc.CallOption) (*ListNotificationChannelsResponse, error) + // Gets a single notification channel. The channel includes the relevant + // configuration details with which the channel was created. However, the + // response may truncate or omit passwords, API keys, or other private key + // matter and thus the response may not be 100% identical to the information + // that was supplied in the call to the create method. + GetNotificationChannel(ctx context.Context, in *GetNotificationChannelRequest, opts ...grpc.CallOption) (*NotificationChannel, error) + // Creates a new notification channel, representing a single notification + // endpoint such as an email address, SMS number, or pagerduty service. + CreateNotificationChannel(ctx context.Context, in *CreateNotificationChannelRequest, opts ...grpc.CallOption) (*NotificationChannel, error) + // Updates a notification channel. Fields not specified in the field mask + // remain unchanged. + UpdateNotificationChannel(ctx context.Context, in *UpdateNotificationChannelRequest, opts ...grpc.CallOption) (*NotificationChannel, error) + // Deletes a notification channel. + DeleteNotificationChannel(ctx context.Context, in *DeleteNotificationChannelRequest, opts ...grpc.CallOption) (*google_protobuf5.Empty, error) + // Causes a verification code to be delivered to the channel. The code + // can then be supplied in `VerifyNotificationChannel` to verify the channel. + SendNotificationChannelVerificationCode(ctx context.Context, in *SendNotificationChannelVerificationCodeRequest, opts ...grpc.CallOption) (*google_protobuf5.Empty, error) + // Requests a verification code for an already verified channel that can then + // be used in a call to VerifyNotificationChannel() on a different channel + // with an equivalent identity in the same or in a different project. This + // makes it possible to copy a channel between projects without requiring + // manual reverification of the channel. If the channel is not in the + // verified state, this method will fail (in other words, this may only be + // used if the SendNotificationChannelVerificationCode and + // VerifyNotificationChannel paths have already been used to put the given + // channel into the verified state). + // + // There is no guarantee that the verification codes returned by this method + // will be of a similar structure or form as the ones that are delivered + // to the channel via SendNotificationChannelVerificationCode; while + // VerifyNotificationChannel() will recognize both the codes delivered via + // SendNotificationChannelVerificationCode() and returned from + // GetNotificationChannelVerificationCode(), it is typically the case that + // the verification codes delivered via + // SendNotificationChannelVerificationCode() will be shorter and also + // have a shorter expiration (e.g. codes such as "G-123456") whereas + // GetVerificationCode() will typically return a much longer, websafe base + // 64 encoded string that has a longer expiration time. + GetNotificationChannelVerificationCode(ctx context.Context, in *GetNotificationChannelVerificationCodeRequest, opts ...grpc.CallOption) (*GetNotificationChannelVerificationCodeResponse, error) + // Verifies a `NotificationChannel` by proving receipt of the code + // delivered to the channel as a result of calling + // `SendNotificationChannelVerificationCode`. + VerifyNotificationChannel(ctx context.Context, in *VerifyNotificationChannelRequest, opts ...grpc.CallOption) (*NotificationChannel, error) +} + +type notificationChannelServiceClient struct { + cc *grpc.ClientConn +} + +func NewNotificationChannelServiceClient(cc *grpc.ClientConn) NotificationChannelServiceClient { + return ¬ificationChannelServiceClient{cc} +} + +func (c *notificationChannelServiceClient) ListNotificationChannelDescriptors(ctx context.Context, in *ListNotificationChannelDescriptorsRequest, opts ...grpc.CallOption) (*ListNotificationChannelDescriptorsResponse, error) { + out := new(ListNotificationChannelDescriptorsResponse) + err := grpc.Invoke(ctx, "/google.monitoring.v3.NotificationChannelService/ListNotificationChannelDescriptors", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *notificationChannelServiceClient) GetNotificationChannelDescriptor(ctx context.Context, in *GetNotificationChannelDescriptorRequest, opts ...grpc.CallOption) (*NotificationChannelDescriptor, error) { + out := new(NotificationChannelDescriptor) + err := grpc.Invoke(ctx, "/google.monitoring.v3.NotificationChannelService/GetNotificationChannelDescriptor", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *notificationChannelServiceClient) ListNotificationChannels(ctx context.Context, in *ListNotificationChannelsRequest, opts ...grpc.CallOption) (*ListNotificationChannelsResponse, error) { + out := new(ListNotificationChannelsResponse) + err := grpc.Invoke(ctx, "/google.monitoring.v3.NotificationChannelService/ListNotificationChannels", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *notificationChannelServiceClient) GetNotificationChannel(ctx context.Context, in *GetNotificationChannelRequest, opts ...grpc.CallOption) (*NotificationChannel, error) { + out := new(NotificationChannel) + err := grpc.Invoke(ctx, "/google.monitoring.v3.NotificationChannelService/GetNotificationChannel", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *notificationChannelServiceClient) CreateNotificationChannel(ctx context.Context, in *CreateNotificationChannelRequest, opts ...grpc.CallOption) (*NotificationChannel, error) { + out := new(NotificationChannel) + err := grpc.Invoke(ctx, "/google.monitoring.v3.NotificationChannelService/CreateNotificationChannel", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *notificationChannelServiceClient) UpdateNotificationChannel(ctx context.Context, in *UpdateNotificationChannelRequest, opts ...grpc.CallOption) (*NotificationChannel, error) { + out := new(NotificationChannel) + err := grpc.Invoke(ctx, "/google.monitoring.v3.NotificationChannelService/UpdateNotificationChannel", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *notificationChannelServiceClient) DeleteNotificationChannel(ctx context.Context, in *DeleteNotificationChannelRequest, opts ...grpc.CallOption) (*google_protobuf5.Empty, error) { + out := new(google_protobuf5.Empty) + err := grpc.Invoke(ctx, "/google.monitoring.v3.NotificationChannelService/DeleteNotificationChannel", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *notificationChannelServiceClient) SendNotificationChannelVerificationCode(ctx context.Context, in *SendNotificationChannelVerificationCodeRequest, opts ...grpc.CallOption) (*google_protobuf5.Empty, error) { + out := new(google_protobuf5.Empty) + err := grpc.Invoke(ctx, "/google.monitoring.v3.NotificationChannelService/SendNotificationChannelVerificationCode", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *notificationChannelServiceClient) GetNotificationChannelVerificationCode(ctx context.Context, in *GetNotificationChannelVerificationCodeRequest, opts ...grpc.CallOption) (*GetNotificationChannelVerificationCodeResponse, error) { + out := new(GetNotificationChannelVerificationCodeResponse) + err := grpc.Invoke(ctx, "/google.monitoring.v3.NotificationChannelService/GetNotificationChannelVerificationCode", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *notificationChannelServiceClient) VerifyNotificationChannel(ctx context.Context, in *VerifyNotificationChannelRequest, opts ...grpc.CallOption) (*NotificationChannel, error) { + out := new(NotificationChannel) + err := grpc.Invoke(ctx, "/google.monitoring.v3.NotificationChannelService/VerifyNotificationChannel", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for NotificationChannelService service + +type NotificationChannelServiceServer interface { + // Lists the descriptors for supported channel types. The use of descriptors + // makes it possible for new channel types to be dynamically added. + ListNotificationChannelDescriptors(context.Context, *ListNotificationChannelDescriptorsRequest) (*ListNotificationChannelDescriptorsResponse, error) + // Gets a single channel descriptor. The descriptor indicates which fields + // are expected / permitted for a notification channel of the given type. + GetNotificationChannelDescriptor(context.Context, *GetNotificationChannelDescriptorRequest) (*NotificationChannelDescriptor, error) + // Lists the notification channels that have been created for the project. + ListNotificationChannels(context.Context, *ListNotificationChannelsRequest) (*ListNotificationChannelsResponse, error) + // Gets a single notification channel. The channel includes the relevant + // configuration details with which the channel was created. However, the + // response may truncate or omit passwords, API keys, or other private key + // matter and thus the response may not be 100% identical to the information + // that was supplied in the call to the create method. + GetNotificationChannel(context.Context, *GetNotificationChannelRequest) (*NotificationChannel, error) + // Creates a new notification channel, representing a single notification + // endpoint such as an email address, SMS number, or pagerduty service. + CreateNotificationChannel(context.Context, *CreateNotificationChannelRequest) (*NotificationChannel, error) + // Updates a notification channel. Fields not specified in the field mask + // remain unchanged. + UpdateNotificationChannel(context.Context, *UpdateNotificationChannelRequest) (*NotificationChannel, error) + // Deletes a notification channel. + DeleteNotificationChannel(context.Context, *DeleteNotificationChannelRequest) (*google_protobuf5.Empty, error) + // Causes a verification code to be delivered to the channel. The code + // can then be supplied in `VerifyNotificationChannel` to verify the channel. + SendNotificationChannelVerificationCode(context.Context, *SendNotificationChannelVerificationCodeRequest) (*google_protobuf5.Empty, error) + // Requests a verification code for an already verified channel that can then + // be used in a call to VerifyNotificationChannel() on a different channel + // with an equivalent identity in the same or in a different project. This + // makes it possible to copy a channel between projects without requiring + // manual reverification of the channel. If the channel is not in the + // verified state, this method will fail (in other words, this may only be + // used if the SendNotificationChannelVerificationCode and + // VerifyNotificationChannel paths have already been used to put the given + // channel into the verified state). + // + // There is no guarantee that the verification codes returned by this method + // will be of a similar structure or form as the ones that are delivered + // to the channel via SendNotificationChannelVerificationCode; while + // VerifyNotificationChannel() will recognize both the codes delivered via + // SendNotificationChannelVerificationCode() and returned from + // GetNotificationChannelVerificationCode(), it is typically the case that + // the verification codes delivered via + // SendNotificationChannelVerificationCode() will be shorter and also + // have a shorter expiration (e.g. codes such as "G-123456") whereas + // GetVerificationCode() will typically return a much longer, websafe base + // 64 encoded string that has a longer expiration time. + GetNotificationChannelVerificationCode(context.Context, *GetNotificationChannelVerificationCodeRequest) (*GetNotificationChannelVerificationCodeResponse, error) + // Verifies a `NotificationChannel` by proving receipt of the code + // delivered to the channel as a result of calling + // `SendNotificationChannelVerificationCode`. + VerifyNotificationChannel(context.Context, *VerifyNotificationChannelRequest) (*NotificationChannel, error) +} + +func RegisterNotificationChannelServiceServer(s *grpc.Server, srv NotificationChannelServiceServer) { + s.RegisterService(&_NotificationChannelService_serviceDesc, srv) +} + +func _NotificationChannelService_ListNotificationChannelDescriptors_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListNotificationChannelDescriptorsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NotificationChannelServiceServer).ListNotificationChannelDescriptors(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.monitoring.v3.NotificationChannelService/ListNotificationChannelDescriptors", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NotificationChannelServiceServer).ListNotificationChannelDescriptors(ctx, req.(*ListNotificationChannelDescriptorsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _NotificationChannelService_GetNotificationChannelDescriptor_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetNotificationChannelDescriptorRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NotificationChannelServiceServer).GetNotificationChannelDescriptor(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.monitoring.v3.NotificationChannelService/GetNotificationChannelDescriptor", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NotificationChannelServiceServer).GetNotificationChannelDescriptor(ctx, req.(*GetNotificationChannelDescriptorRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _NotificationChannelService_ListNotificationChannels_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListNotificationChannelsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NotificationChannelServiceServer).ListNotificationChannels(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.monitoring.v3.NotificationChannelService/ListNotificationChannels", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NotificationChannelServiceServer).ListNotificationChannels(ctx, req.(*ListNotificationChannelsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _NotificationChannelService_GetNotificationChannel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetNotificationChannelRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NotificationChannelServiceServer).GetNotificationChannel(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.monitoring.v3.NotificationChannelService/GetNotificationChannel", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NotificationChannelServiceServer).GetNotificationChannel(ctx, req.(*GetNotificationChannelRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _NotificationChannelService_CreateNotificationChannel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateNotificationChannelRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NotificationChannelServiceServer).CreateNotificationChannel(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.monitoring.v3.NotificationChannelService/CreateNotificationChannel", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NotificationChannelServiceServer).CreateNotificationChannel(ctx, req.(*CreateNotificationChannelRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _NotificationChannelService_UpdateNotificationChannel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateNotificationChannelRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NotificationChannelServiceServer).UpdateNotificationChannel(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.monitoring.v3.NotificationChannelService/UpdateNotificationChannel", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NotificationChannelServiceServer).UpdateNotificationChannel(ctx, req.(*UpdateNotificationChannelRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _NotificationChannelService_DeleteNotificationChannel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteNotificationChannelRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NotificationChannelServiceServer).DeleteNotificationChannel(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.monitoring.v3.NotificationChannelService/DeleteNotificationChannel", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NotificationChannelServiceServer).DeleteNotificationChannel(ctx, req.(*DeleteNotificationChannelRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _NotificationChannelService_SendNotificationChannelVerificationCode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SendNotificationChannelVerificationCodeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NotificationChannelServiceServer).SendNotificationChannelVerificationCode(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.monitoring.v3.NotificationChannelService/SendNotificationChannelVerificationCode", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NotificationChannelServiceServer).SendNotificationChannelVerificationCode(ctx, req.(*SendNotificationChannelVerificationCodeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _NotificationChannelService_GetNotificationChannelVerificationCode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetNotificationChannelVerificationCodeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NotificationChannelServiceServer).GetNotificationChannelVerificationCode(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.monitoring.v3.NotificationChannelService/GetNotificationChannelVerificationCode", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NotificationChannelServiceServer).GetNotificationChannelVerificationCode(ctx, req.(*GetNotificationChannelVerificationCodeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _NotificationChannelService_VerifyNotificationChannel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(VerifyNotificationChannelRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NotificationChannelServiceServer).VerifyNotificationChannel(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.monitoring.v3.NotificationChannelService/VerifyNotificationChannel", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NotificationChannelServiceServer).VerifyNotificationChannel(ctx, req.(*VerifyNotificationChannelRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _NotificationChannelService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.monitoring.v3.NotificationChannelService", + HandlerType: (*NotificationChannelServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListNotificationChannelDescriptors", + Handler: _NotificationChannelService_ListNotificationChannelDescriptors_Handler, + }, + { + MethodName: "GetNotificationChannelDescriptor", + Handler: _NotificationChannelService_GetNotificationChannelDescriptor_Handler, + }, + { + MethodName: "ListNotificationChannels", + Handler: _NotificationChannelService_ListNotificationChannels_Handler, + }, + { + MethodName: "GetNotificationChannel", + Handler: _NotificationChannelService_GetNotificationChannel_Handler, + }, + { + MethodName: "CreateNotificationChannel", + Handler: _NotificationChannelService_CreateNotificationChannel_Handler, + }, + { + MethodName: "UpdateNotificationChannel", + Handler: _NotificationChannelService_UpdateNotificationChannel_Handler, + }, + { + MethodName: "DeleteNotificationChannel", + Handler: _NotificationChannelService_DeleteNotificationChannel_Handler, + }, + { + MethodName: "SendNotificationChannelVerificationCode", + Handler: _NotificationChannelService_SendNotificationChannelVerificationCode_Handler, + }, + { + MethodName: "GetNotificationChannelVerificationCode", + Handler: _NotificationChannelService_GetNotificationChannelVerificationCode_Handler, + }, + { + MethodName: "VerifyNotificationChannel", + Handler: _NotificationChannelService_VerifyNotificationChannel_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/monitoring/v3/notification_service.proto", +} + +func init() { proto.RegisterFile("google/monitoring/v3/notification_service.proto", fileDescriptor9) } + +var fileDescriptor9 = []byte{ + // 1011 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0x41, 0x6f, 0xdc, 0x44, + 0x14, 0xd6, 0xec, 0x26, 0x69, 0xfa, 0x22, 0x04, 0x9a, 0x86, 0xc8, 0xbb, 0xa5, 0xaa, 0xe5, 0x43, + 0x93, 0xae, 0x8a, 0x2d, 0xad, 0x4b, 0x84, 0x52, 0x52, 0xda, 0x64, 0xdb, 0x22, 0x48, 0x51, 0xb4, + 0x29, 0x91, 0x40, 0x11, 0x2b, 0xc7, 0x7e, 0x6b, 0x4c, 0x76, 0x67, 0x8c, 0x3d, 0x89, 0x9a, 0x56, + 0x95, 0x0a, 0x7f, 0x01, 0xfe, 0x00, 0x12, 0xa7, 0x1e, 0x10, 0x67, 0x50, 0x39, 0x23, 0xae, 0x08, + 0xae, 0x5c, 0xe0, 0x7f, 0x20, 0x8f, 0xbd, 0xd9, 0xcd, 0x66, 0xbc, 0x6b, 0x37, 0xdc, 0x3c, 0xf3, + 0xde, 0xbc, 0xf7, 0xbd, 0xef, 0x7d, 0x9e, 0x67, 0x83, 0xe5, 0x73, 0xee, 0xf7, 0xd0, 0xea, 0x73, + 0x16, 0x08, 0x1e, 0x05, 0xcc, 0xb7, 0x8e, 0x6c, 0x8b, 0x71, 0x11, 0x74, 0x03, 0xd7, 0x11, 0x01, + 0x67, 0x9d, 0x18, 0xa3, 0xa3, 0xc0, 0x45, 0x33, 0x8c, 0xb8, 0xe0, 0x74, 0x31, 0x3d, 0x60, 0x0e, + 0x0f, 0x98, 0x47, 0x76, 0xfd, 0xad, 0x2c, 0x8c, 0x13, 0x06, 0x96, 0xc3, 0x18, 0x17, 0xf2, 0x68, + 0x9c, 0x9e, 0xa9, 0x2f, 0x4f, 0x4d, 0x92, 0x39, 0x5e, 0xce, 0x1c, 0xe5, 0x6a, 0xff, 0xb0, 0x6b, + 0x61, 0x3f, 0x14, 0xc7, 0x99, 0x51, 0x1f, 0x37, 0x76, 0x03, 0xec, 0x79, 0x9d, 0xbe, 0x13, 0x1f, + 0x64, 0x1e, 0x57, 0xc7, 0x3d, 0x44, 0xd0, 0xc7, 0x58, 0x38, 0xfd, 0x30, 0x75, 0x30, 0x9e, 0xc2, + 0xf5, 0xad, 0x20, 0x16, 0x1f, 0x8f, 0x64, 0xde, 0xfc, 0xc2, 0x61, 0x0c, 0x7b, 0x2d, 0x8c, 0xdd, + 0x28, 0x08, 0x05, 0x8f, 0xe2, 0x36, 0x7e, 0x75, 0x88, 0xb1, 0xa0, 0x14, 0x66, 0x98, 0xd3, 0x47, + 0x6d, 0x46, 0x27, 0x2b, 0x17, 0xdb, 0xf2, 0x99, 0x5e, 0x86, 0x8b, 0xa1, 0xe3, 0x63, 0x27, 0x0e, + 0x9e, 0xa0, 0x56, 0xd1, 0xc9, 0xca, 0x6c, 0x7b, 0x3e, 0xd9, 0xd8, 0x09, 0x9e, 0x20, 0xbd, 0x02, + 0x20, 0x8d, 0x82, 0x1f, 0x20, 0xd3, 0xaa, 0xf2, 0x98, 0x74, 0x7f, 0x94, 0x6c, 0x18, 0x3f, 0x13, + 0x68, 0x14, 0xc9, 0x1e, 0x87, 0x9c, 0xc5, 0x48, 0x3d, 0xb8, 0xe4, 0xa6, 0xd6, 0x8e, 0x37, 0x34, + 0x6b, 0x44, 0xaf, 0xae, 0x2c, 0x34, 0x6d, 0x53, 0xd5, 0x06, 0x73, 0x62, 0xe8, 0x36, 0x75, 0xcf, + 0x64, 0xa3, 0xd7, 0xe0, 0x75, 0x86, 0x8f, 0x45, 0x67, 0x04, 0x78, 0x45, 0x02, 0x7f, 0x2d, 0xd9, + 0xde, 0x3e, 0x01, 0xbf, 0x0e, 0xcb, 0x0f, 0x70, 0x32, 0xf4, 0x71, 0xde, 0xaa, 0x43, 0xde, 0x8c, + 0xef, 0x08, 0xe8, 0x9b, 0x11, 0x3a, 0x02, 0x15, 0x21, 0x26, 0x1c, 0xa4, 0x7b, 0xb0, 0x78, 0x4a, + 0x8c, 0x59, 0x09, 0x12, 0xe4, 0x42, 0xf3, 0x7a, 0x61, 0x1a, 0xda, 0x97, 0xd8, 0xd9, 0x4d, 0xe3, + 0x07, 0x02, 0x57, 0x73, 0x5a, 0x72, 0x46, 0x06, 0xb3, 0x23, 0xa8, 0x96, 0x60, 0xae, 0x1b, 0xf4, + 0x04, 0x46, 0xda, 0x9c, 0xdc, 0xcd, 0x56, 0xb4, 0x06, 0xf3, 0x3c, 0xf2, 0x30, 0xea, 0xec, 0x1f, + 0x6b, 0x17, 0xa4, 0xe5, 0x82, 0x5c, 0x6f, 0x1c, 0x9f, 0x56, 0x4e, 0x75, 0xa2, 0x72, 0x66, 0xc6, + 0x95, 0xf3, 0x82, 0x80, 0x9e, 0x0f, 0x33, 0xd3, 0xcb, 0xe7, 0xf0, 0xa6, 0x8a, 0xa9, 0x58, 0xab, + 0x4a, 0xc5, 0x94, 0xa0, 0x6a, 0x51, 0x41, 0x55, 0x71, 0xa5, 0xd8, 0x70, 0x45, 0xad, 0x94, 0x49, + 0xfa, 0x78, 0x49, 0x40, 0xff, 0x24, 0xf4, 0x26, 0xeb, 0xe3, 0x16, 0x2c, 0x1c, 0x4a, 0x1f, 0xf9, + 0xce, 0x67, 0x12, 0xa8, 0x0f, 0xea, 0x1a, 0xbc, 0xf4, 0xe6, 0xfd, 0xe4, 0x5a, 0x78, 0xe8, 0xc4, + 0x07, 0x6d, 0x48, 0xdd, 0x93, 0xe7, 0x5c, 0x21, 0x55, 0xff, 0x17, 0x21, 0x6d, 0x81, 0xde, 0xc2, + 0x1e, 0x96, 0x96, 0xf7, 0x22, 0xcc, 0x76, 0x79, 0xe4, 0xa6, 0xea, 0x9a, 0x6f, 0xa7, 0x0b, 0xa3, + 0x05, 0xe6, 0x0e, 0x32, 0x4f, 0x11, 0x6b, 0x17, 0xa3, 0xe1, 0x16, 0xf7, 0x70, 0x3c, 0x36, 0x19, + 0xe1, 0xf4, 0x39, 0x81, 0xb7, 0xd5, 0x9d, 0x28, 0x11, 0x25, 0x21, 0x1d, 0x1f, 0x87, 0x41, 0x84, + 0x9d, 0xe4, 0x32, 0xcd, 0x25, 0xfd, 0xd1, 0xe0, 0xa6, 0x6d, 0x43, 0xea, 0x9e, 0x6c, 0x18, 0x5f, + 0x13, 0x30, 0x8b, 0x42, 0xc8, 0x64, 0x4c, 0x61, 0xc6, 0xe5, 0xde, 0x09, 0x86, 0xe4, 0xf9, 0x7c, + 0x18, 0x3e, 0x04, 0x5d, 0x26, 0x3b, 0x2e, 0xd0, 0x9a, 0xd1, 0xc2, 0x07, 0x40, 0x2a, 0x43, 0x20, + 0xcd, 0x5f, 0xde, 0x80, 0xba, 0x22, 0xcc, 0x4e, 0x3a, 0x21, 0xe9, 0xbf, 0x04, 0x8c, 0xe9, 0x37, + 0x3c, 0x7d, 0x5f, 0x2d, 0xb6, 0xc2, 0x93, 0xa9, 0x7e, 0xe7, 0xd5, 0x03, 0xa4, 0x2c, 0x1b, 0xef, + 0x7d, 0xf3, 0xc7, 0x3f, 0xdf, 0x56, 0x56, 0xe9, 0xcd, 0x64, 0x10, 0x3f, 0x4d, 0xea, 0x5d, 0x0f, + 0x23, 0xfe, 0x25, 0xba, 0x22, 0xb6, 0x1a, 0xcf, 0x2c, 0x36, 0xb9, 0x80, 0xbf, 0x08, 0xe8, 0xd3, + 0xa6, 0x01, 0x5d, 0x57, 0x83, 0x2c, 0x38, 0x45, 0xea, 0xaf, 0x32, 0xe1, 0x8c, 0xdb, 0xb2, 0xac, + 0x77, 0xe9, 0xaa, 0xaa, 0xac, 0x29, 0x55, 0x59, 0x8d, 0x67, 0xf4, 0x25, 0x01, 0x2d, 0xef, 0xa2, + 0xa5, 0xef, 0x94, 0x62, 0xfd, 0xa4, 0x59, 0xab, 0x65, 0x8f, 0x65, 0x2d, 0x6a, 0xca, 0x5a, 0x6e, + 0xd0, 0x46, 0xe1, 0x16, 0xc5, 0xf4, 0x47, 0x02, 0x4b, 0x6a, 0x82, 0xa9, 0x5d, 0xa6, 0x1d, 0x03, + 0xec, 0xc5, 0xaf, 0x45, 0xe3, 0xa6, 0x84, 0x6b, 0xd2, 0x1b, 0x45, 0xa9, 0x97, 0x84, 0xff, 0x46, + 0xa0, 0x96, 0xfb, 0x5d, 0x40, 0x73, 0xa8, 0x9b, 0xf6, 0x21, 0x51, 0x06, 0xf6, 0x07, 0x12, 0xf6, + 0x86, 0x51, 0x82, 0xe5, 0x35, 0xe5, 0x20, 0xa1, 0x7f, 0x13, 0xa8, 0xe5, 0x8e, 0xb0, 0xbc, 0x52, + 0xa6, 0xcd, 0xbc, 0x32, 0xa5, 0x74, 0x64, 0x29, 0x9f, 0x36, 0xef, 0xa6, 0xa5, 0x28, 0x30, 0x9a, + 0x05, 0xdb, 0x92, 0x53, 0xe1, 0xf7, 0x04, 0x6a, 0xb9, 0x53, 0x2e, 0xaf, 0xc2, 0x69, 0x63, 0xb1, + 0xbe, 0x74, 0xe6, 0x1e, 0xbf, 0x97, 0x7c, 0xf4, 0x0f, 0x04, 0xd5, 0x28, 0x27, 0xa8, 0x3f, 0x09, + 0x2c, 0x17, 0x9c, 0x9d, 0xb4, 0xa5, 0x46, 0x5c, 0x6e, 0xf4, 0xe6, 0xe2, 0xdf, 0x92, 0xf8, 0xef, + 0x1b, 0x77, 0xcb, 0xe0, 0x5f, 0x8b, 0x91, 0x79, 0xe3, 0x99, 0xd6, 0x48, 0x83, 0x3e, 0xaf, 0xc0, + 0xb5, 0x62, 0x93, 0x94, 0x6e, 0x96, 0x79, 0xd3, 0xf3, 0xaa, 0x6a, 0x9d, 0x2f, 0x48, 0x76, 0x87, + 0x7d, 0x24, 0x39, 0xb8, 0x67, 0xdc, 0x29, 0xc5, 0x81, 0x8f, 0x42, 0x45, 0xc1, 0xaf, 0x04, 0x6a, + 0xb9, 0x93, 0x3c, 0x4f, 0x7e, 0xd3, 0x46, 0x7f, 0x99, 0x17, 0x2c, 0x9b, 0x2e, 0x86, 0x5d, 0xaa, + 0x9a, 0x23, 0x89, 0x60, 0x8d, 0x34, 0x36, 0x7e, 0x22, 0xa0, 0xb9, 0xbc, 0xaf, 0x4c, 0xb8, 0xa1, + 0x8d, 0x66, 0xcc, 0x3e, 0x28, 0xb6, 0x13, 0x45, 0x6d, 0x93, 0xcf, 0x6e, 0x67, 0x27, 0x7c, 0xde, + 0x73, 0x98, 0x6f, 0xf2, 0xc8, 0xb7, 0x7c, 0x64, 0x52, 0x6f, 0xd9, 0xff, 0xbb, 0x13, 0x06, 0xf1, + 0xe9, 0xdf, 0xeb, 0x5b, 0xc3, 0xd5, 0x8b, 0x4a, 0xfd, 0x41, 0x1a, 0x60, 0xb3, 0xc7, 0x0f, 0x3d, + 0xf3, 0xe1, 0x30, 0xf1, 0xae, 0xfd, 0xfb, 0xc0, 0xb8, 0x27, 0x8d, 0x7b, 0x43, 0xe3, 0xde, 0xae, + 0xbd, 0x3f, 0x27, 0x93, 0xd8, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x3b, 0xf3, 0x96, 0xf5, 0x27, + 0x10, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/monitoring/v3/uptime.pb.go b/vendor/google.golang.org/genproto/googleapis/monitoring/v3/uptime.pb.go new file mode 100644 index 0000000..9357d35 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/monitoring/v3/uptime.pb.go @@ -0,0 +1,748 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/monitoring/v3/uptime.proto + +package monitoring + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import google_api4 "google.golang.org/genproto/googleapis/api/monitoredres" +import google_protobuf3 "github.com/golang/protobuf/ptypes/duration" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// The regions from which an uptime check can be run. +type UptimeCheckRegion int32 + +const ( + // Default value if no region is specified. Will result in uptime checks + // running from all regions. + UptimeCheckRegion_REGION_UNSPECIFIED UptimeCheckRegion = 0 + // Allows checks to run from locations within the United States of America. + UptimeCheckRegion_USA UptimeCheckRegion = 1 + // Allows checks to run from locations within the continent of Europe. + UptimeCheckRegion_EUROPE UptimeCheckRegion = 2 + // Allows checks to run from locations within the continent of South + // America. + UptimeCheckRegion_SOUTH_AMERICA UptimeCheckRegion = 3 + // Allows checks to run from locations within the Asia Pacific area (ex: + // Singapore). + UptimeCheckRegion_ASIA_PACIFIC UptimeCheckRegion = 4 +) + +var UptimeCheckRegion_name = map[int32]string{ + 0: "REGION_UNSPECIFIED", + 1: "USA", + 2: "EUROPE", + 3: "SOUTH_AMERICA", + 4: "ASIA_PACIFIC", +} +var UptimeCheckRegion_value = map[string]int32{ + "REGION_UNSPECIFIED": 0, + "USA": 1, + "EUROPE": 2, + "SOUTH_AMERICA": 3, + "ASIA_PACIFIC": 4, +} + +func (x UptimeCheckRegion) String() string { + return proto.EnumName(UptimeCheckRegion_name, int32(x)) +} +func (UptimeCheckRegion) EnumDescriptor() ([]byte, []int) { return fileDescriptor10, []int{0} } + +// The supported resource types that can be used as values of +// group_resource.resource_type. gae_app and uptime_url are not allowed +// because group checks on App Engine modules and URLs are not allowed. +type GroupResourceType int32 + +const ( + // Default value (not valid). + GroupResourceType_RESOURCE_TYPE_UNSPECIFIED GroupResourceType = 0 + // A group of instances (could be either GCE or AWS_EC2). + GroupResourceType_INSTANCE GroupResourceType = 1 + // A group of AWS load balancers. + GroupResourceType_AWS_ELB_LOAD_BALANCER GroupResourceType = 2 +) + +var GroupResourceType_name = map[int32]string{ + 0: "RESOURCE_TYPE_UNSPECIFIED", + 1: "INSTANCE", + 2: "AWS_ELB_LOAD_BALANCER", +} +var GroupResourceType_value = map[string]int32{ + "RESOURCE_TYPE_UNSPECIFIED": 0, + "INSTANCE": 1, + "AWS_ELB_LOAD_BALANCER": 2, +} + +func (x GroupResourceType) String() string { + return proto.EnumName(GroupResourceType_name, int32(x)) +} +func (GroupResourceType) EnumDescriptor() ([]byte, []int) { return fileDescriptor10, []int{1} } + +// This message configures which resources and services to monitor for +// availability. +type UptimeCheckConfig struct { + // A unique resource name for this UptimeCheckConfig. The format is: + // + // + // `projects/[PROJECT_ID]/uptimeCheckConfigs/[UPTIME_CHECK_ID]`. + // + // This field should be omitted when creating the uptime check configuration; + // on create, the resource name is assigned by the server and included in the + // response. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // A human-friendly name for the uptime check configuration. The display name + // should be unique within a Stackdriver Account in order to make it easier + // to identify; however, uniqueness is not enforced. Required. + DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // The resource the check is checking. Required. + // + // Types that are valid to be assigned to Resource: + // *UptimeCheckConfig_MonitoredResource + // *UptimeCheckConfig_ResourceGroup_ + Resource isUptimeCheckConfig_Resource `protobuf_oneof:"resource"` + // The type of uptime check request. + // + // Types that are valid to be assigned to CheckRequestType: + // *UptimeCheckConfig_HttpCheck_ + // *UptimeCheckConfig_TcpCheck_ + CheckRequestType isUptimeCheckConfig_CheckRequestType `protobuf_oneof:"check_request_type"` + // How often the uptime check is performed. + // Currently, only 1, 5, 10, and 15 minutes are supported. Required. + Period *google_protobuf3.Duration `protobuf:"bytes,7,opt,name=period" json:"period,omitempty"` + // The maximum amount of time to wait for the request to complete (must be + // between 1 and 60 seconds). Required. + Timeout *google_protobuf3.Duration `protobuf:"bytes,8,opt,name=timeout" json:"timeout,omitempty"` + // The expected content on the page the check is run against. + // Currently, only the first entry in the list is supported, and other entries + // will be ignored. The server will look for an exact match of the string in + // the page response's content. This field is optional and should only be + // specified if a content match is required. + ContentMatchers []*UptimeCheckConfig_ContentMatcher `protobuf:"bytes,9,rep,name=content_matchers,json=contentMatchers" json:"content_matchers,omitempty"` + // The list of regions from which the check will be run. + // If this field is specified, enough regions to include a minimum of + // 3 locations must be provided, or an error message is returned. + // Not specifying this field will result in uptime checks running from all + // regions. + SelectedRegions []UptimeCheckRegion `protobuf:"varint,10,rep,packed,name=selected_regions,json=selectedRegions,enum=google.monitoring.v3.UptimeCheckRegion" json:"selected_regions,omitempty"` + // The internal checkers that this check will egress from. + InternalCheckers []*UptimeCheckConfig_InternalChecker `protobuf:"bytes,14,rep,name=internal_checkers,json=internalCheckers" json:"internal_checkers,omitempty"` +} + +func (m *UptimeCheckConfig) Reset() { *m = UptimeCheckConfig{} } +func (m *UptimeCheckConfig) String() string { return proto.CompactTextString(m) } +func (*UptimeCheckConfig) ProtoMessage() {} +func (*UptimeCheckConfig) Descriptor() ([]byte, []int) { return fileDescriptor10, []int{0} } + +type isUptimeCheckConfig_Resource interface { + isUptimeCheckConfig_Resource() +} +type isUptimeCheckConfig_CheckRequestType interface { + isUptimeCheckConfig_CheckRequestType() +} + +type UptimeCheckConfig_MonitoredResource struct { + MonitoredResource *google_api4.MonitoredResource `protobuf:"bytes,3,opt,name=monitored_resource,json=monitoredResource,oneof"` +} +type UptimeCheckConfig_ResourceGroup_ struct { + ResourceGroup *UptimeCheckConfig_ResourceGroup `protobuf:"bytes,4,opt,name=resource_group,json=resourceGroup,oneof"` +} +type UptimeCheckConfig_HttpCheck_ struct { + HttpCheck *UptimeCheckConfig_HttpCheck `protobuf:"bytes,5,opt,name=http_check,json=httpCheck,oneof"` +} +type UptimeCheckConfig_TcpCheck_ struct { + TcpCheck *UptimeCheckConfig_TcpCheck `protobuf:"bytes,6,opt,name=tcp_check,json=tcpCheck,oneof"` +} + +func (*UptimeCheckConfig_MonitoredResource) isUptimeCheckConfig_Resource() {} +func (*UptimeCheckConfig_ResourceGroup_) isUptimeCheckConfig_Resource() {} +func (*UptimeCheckConfig_HttpCheck_) isUptimeCheckConfig_CheckRequestType() {} +func (*UptimeCheckConfig_TcpCheck_) isUptimeCheckConfig_CheckRequestType() {} + +func (m *UptimeCheckConfig) GetResource() isUptimeCheckConfig_Resource { + if m != nil { + return m.Resource + } + return nil +} +func (m *UptimeCheckConfig) GetCheckRequestType() isUptimeCheckConfig_CheckRequestType { + if m != nil { + return m.CheckRequestType + } + return nil +} + +func (m *UptimeCheckConfig) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *UptimeCheckConfig) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func (m *UptimeCheckConfig) GetMonitoredResource() *google_api4.MonitoredResource { + if x, ok := m.GetResource().(*UptimeCheckConfig_MonitoredResource); ok { + return x.MonitoredResource + } + return nil +} + +func (m *UptimeCheckConfig) GetResourceGroup() *UptimeCheckConfig_ResourceGroup { + if x, ok := m.GetResource().(*UptimeCheckConfig_ResourceGroup_); ok { + return x.ResourceGroup + } + return nil +} + +func (m *UptimeCheckConfig) GetHttpCheck() *UptimeCheckConfig_HttpCheck { + if x, ok := m.GetCheckRequestType().(*UptimeCheckConfig_HttpCheck_); ok { + return x.HttpCheck + } + return nil +} + +func (m *UptimeCheckConfig) GetTcpCheck() *UptimeCheckConfig_TcpCheck { + if x, ok := m.GetCheckRequestType().(*UptimeCheckConfig_TcpCheck_); ok { + return x.TcpCheck + } + return nil +} + +func (m *UptimeCheckConfig) GetPeriod() *google_protobuf3.Duration { + if m != nil { + return m.Period + } + return nil +} + +func (m *UptimeCheckConfig) GetTimeout() *google_protobuf3.Duration { + if m != nil { + return m.Timeout + } + return nil +} + +func (m *UptimeCheckConfig) GetContentMatchers() []*UptimeCheckConfig_ContentMatcher { + if m != nil { + return m.ContentMatchers + } + return nil +} + +func (m *UptimeCheckConfig) GetSelectedRegions() []UptimeCheckRegion { + if m != nil { + return m.SelectedRegions + } + return nil +} + +func (m *UptimeCheckConfig) GetInternalCheckers() []*UptimeCheckConfig_InternalChecker { + if m != nil { + return m.InternalCheckers + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*UptimeCheckConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _UptimeCheckConfig_OneofMarshaler, _UptimeCheckConfig_OneofUnmarshaler, _UptimeCheckConfig_OneofSizer, []interface{}{ + (*UptimeCheckConfig_MonitoredResource)(nil), + (*UptimeCheckConfig_ResourceGroup_)(nil), + (*UptimeCheckConfig_HttpCheck_)(nil), + (*UptimeCheckConfig_TcpCheck_)(nil), + } +} + +func _UptimeCheckConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*UptimeCheckConfig) + // resource + switch x := m.Resource.(type) { + case *UptimeCheckConfig_MonitoredResource: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.MonitoredResource); err != nil { + return err + } + case *UptimeCheckConfig_ResourceGroup_: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ResourceGroup); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("UptimeCheckConfig.Resource has unexpected type %T", x) + } + // check_request_type + switch x := m.CheckRequestType.(type) { + case *UptimeCheckConfig_HttpCheck_: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.HttpCheck); err != nil { + return err + } + case *UptimeCheckConfig_TcpCheck_: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.TcpCheck); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("UptimeCheckConfig.CheckRequestType has unexpected type %T", x) + } + return nil +} + +func _UptimeCheckConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*UptimeCheckConfig) + switch tag { + case 3: // resource.monitored_resource + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_api4.MonitoredResource) + err := b.DecodeMessage(msg) + m.Resource = &UptimeCheckConfig_MonitoredResource{msg} + return true, err + case 4: // resource.resource_group + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(UptimeCheckConfig_ResourceGroup) + err := b.DecodeMessage(msg) + m.Resource = &UptimeCheckConfig_ResourceGroup_{msg} + return true, err + case 5: // check_request_type.http_check + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(UptimeCheckConfig_HttpCheck) + err := b.DecodeMessage(msg) + m.CheckRequestType = &UptimeCheckConfig_HttpCheck_{msg} + return true, err + case 6: // check_request_type.tcp_check + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(UptimeCheckConfig_TcpCheck) + err := b.DecodeMessage(msg) + m.CheckRequestType = &UptimeCheckConfig_TcpCheck_{msg} + return true, err + default: + return false, nil + } +} + +func _UptimeCheckConfig_OneofSizer(msg proto.Message) (n int) { + m := msg.(*UptimeCheckConfig) + // resource + switch x := m.Resource.(type) { + case *UptimeCheckConfig_MonitoredResource: + s := proto.Size(x.MonitoredResource) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *UptimeCheckConfig_ResourceGroup_: + s := proto.Size(x.ResourceGroup) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + // check_request_type + switch x := m.CheckRequestType.(type) { + case *UptimeCheckConfig_HttpCheck_: + s := proto.Size(x.HttpCheck) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *UptimeCheckConfig_TcpCheck_: + s := proto.Size(x.TcpCheck) + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The resource submessage for group checks. It can be used instead of a +// monitored resource, when multiple resources are being monitored. +type UptimeCheckConfig_ResourceGroup struct { + // The group of resources being monitored. Should be only the + // group_id, not projects//groups/. + GroupId string `protobuf:"bytes,1,opt,name=group_id,json=groupId" json:"group_id,omitempty"` + // The resource type of the group members. + ResourceType GroupResourceType `protobuf:"varint,2,opt,name=resource_type,json=resourceType,enum=google.monitoring.v3.GroupResourceType" json:"resource_type,omitempty"` +} + +func (m *UptimeCheckConfig_ResourceGroup) Reset() { *m = UptimeCheckConfig_ResourceGroup{} } +func (m *UptimeCheckConfig_ResourceGroup) String() string { return proto.CompactTextString(m) } +func (*UptimeCheckConfig_ResourceGroup) ProtoMessage() {} +func (*UptimeCheckConfig_ResourceGroup) Descriptor() ([]byte, []int) { + return fileDescriptor10, []int{0, 0} +} + +func (m *UptimeCheckConfig_ResourceGroup) GetGroupId() string { + if m != nil { + return m.GroupId + } + return "" +} + +func (m *UptimeCheckConfig_ResourceGroup) GetResourceType() GroupResourceType { + if m != nil { + return m.ResourceType + } + return GroupResourceType_RESOURCE_TYPE_UNSPECIFIED +} + +// Information involved in an HTTP/HTTPS uptime check request. +type UptimeCheckConfig_HttpCheck struct { + // If true, use HTTPS instead of HTTP to run the check. + UseSsl bool `protobuf:"varint,1,opt,name=use_ssl,json=useSsl" json:"use_ssl,omitempty"` + // The path to the page to run the check against. Will be combined with the + // host (specified within the MonitoredResource) and port to construct the + // full URL. Optional (defaults to "/"). + Path string `protobuf:"bytes,2,opt,name=path" json:"path,omitempty"` + // The port to the page to run the check against. Will be combined with host + // (specified within the MonitoredResource) and path to construct the full + // URL. Optional (defaults to 80 without SSL, or 443 with SSL). + Port int32 `protobuf:"varint,3,opt,name=port" json:"port,omitempty"` + // The authentication information. Optional when creating an HTTP check; + // defaults to empty. + AuthInfo *UptimeCheckConfig_HttpCheck_BasicAuthentication `protobuf:"bytes,4,opt,name=auth_info,json=authInfo" json:"auth_info,omitempty"` + // Boolean specifiying whether to encrypt the header information. + // Encryption should be specified for any headers related to authentication + // that you do not wish to be seen when retrieving the configuration. The + // server will be responsible for encrypting the headers. + // On Get/List calls, if mask_headers is set to True then the headers + // will be obscured with ******. + MaskHeaders bool `protobuf:"varint,5,opt,name=mask_headers,json=maskHeaders" json:"mask_headers,omitempty"` + // The list of headers to send as part of the uptime check request. + // If two headers have the same key and different values, they should + // be entered as a single header, with the value being a comma-separated + // list of all the desired values as described at + // https://www.w3.org/Protocols/rfc2616/rfc2616.txt (page 31). + // Entering two separate headers with the same key in a Create call will + // cause the first to be overwritten by the second. + Headers map[string]string `protobuf:"bytes,6,rep,name=headers" json:"headers,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *UptimeCheckConfig_HttpCheck) Reset() { *m = UptimeCheckConfig_HttpCheck{} } +func (m *UptimeCheckConfig_HttpCheck) String() string { return proto.CompactTextString(m) } +func (*UptimeCheckConfig_HttpCheck) ProtoMessage() {} +func (*UptimeCheckConfig_HttpCheck) Descriptor() ([]byte, []int) { return fileDescriptor10, []int{0, 1} } + +func (m *UptimeCheckConfig_HttpCheck) GetUseSsl() bool { + if m != nil { + return m.UseSsl + } + return false +} + +func (m *UptimeCheckConfig_HttpCheck) GetPath() string { + if m != nil { + return m.Path + } + return "" +} + +func (m *UptimeCheckConfig_HttpCheck) GetPort() int32 { + if m != nil { + return m.Port + } + return 0 +} + +func (m *UptimeCheckConfig_HttpCheck) GetAuthInfo() *UptimeCheckConfig_HttpCheck_BasicAuthentication { + if m != nil { + return m.AuthInfo + } + return nil +} + +func (m *UptimeCheckConfig_HttpCheck) GetMaskHeaders() bool { + if m != nil { + return m.MaskHeaders + } + return false +} + +func (m *UptimeCheckConfig_HttpCheck) GetHeaders() map[string]string { + if m != nil { + return m.Headers + } + return nil +} + +// A type of authentication to perform against the specified resource or URL +// that uses username and password. +// Currently, only Basic authentication is supported in Uptime Monitoring. +type UptimeCheckConfig_HttpCheck_BasicAuthentication struct { + // The username to authenticate. + Username string `protobuf:"bytes,1,opt,name=username" json:"username,omitempty"` + // The password to authenticate. + Password string `protobuf:"bytes,2,opt,name=password" json:"password,omitempty"` +} + +func (m *UptimeCheckConfig_HttpCheck_BasicAuthentication) Reset() { + *m = UptimeCheckConfig_HttpCheck_BasicAuthentication{} +} +func (m *UptimeCheckConfig_HttpCheck_BasicAuthentication) String() string { + return proto.CompactTextString(m) +} +func (*UptimeCheckConfig_HttpCheck_BasicAuthentication) ProtoMessage() {} +func (*UptimeCheckConfig_HttpCheck_BasicAuthentication) Descriptor() ([]byte, []int) { + return fileDescriptor10, []int{0, 1, 0} +} + +func (m *UptimeCheckConfig_HttpCheck_BasicAuthentication) GetUsername() string { + if m != nil { + return m.Username + } + return "" +} + +func (m *UptimeCheckConfig_HttpCheck_BasicAuthentication) GetPassword() string { + if m != nil { + return m.Password + } + return "" +} + +// Information required for a TCP uptime check request. +type UptimeCheckConfig_TcpCheck struct { + // The port to the page to run the check against. Will be combined with host + // (specified within the MonitoredResource) to construct the full URL. + // Required. + Port int32 `protobuf:"varint,1,opt,name=port" json:"port,omitempty"` +} + +func (m *UptimeCheckConfig_TcpCheck) Reset() { *m = UptimeCheckConfig_TcpCheck{} } +func (m *UptimeCheckConfig_TcpCheck) String() string { return proto.CompactTextString(m) } +func (*UptimeCheckConfig_TcpCheck) ProtoMessage() {} +func (*UptimeCheckConfig_TcpCheck) Descriptor() ([]byte, []int) { return fileDescriptor10, []int{0, 2} } + +func (m *UptimeCheckConfig_TcpCheck) GetPort() int32 { + if m != nil { + return m.Port + } + return 0 +} + +// Used to perform string matching. Currently, this matches on the exact +// content. In the future, it can be expanded to allow for regular expressions +// and more complex matching. +type UptimeCheckConfig_ContentMatcher struct { + // String content to match + Content string `protobuf:"bytes,1,opt,name=content" json:"content,omitempty"` +} + +func (m *UptimeCheckConfig_ContentMatcher) Reset() { *m = UptimeCheckConfig_ContentMatcher{} } +func (m *UptimeCheckConfig_ContentMatcher) String() string { return proto.CompactTextString(m) } +func (*UptimeCheckConfig_ContentMatcher) ProtoMessage() {} +func (*UptimeCheckConfig_ContentMatcher) Descriptor() ([]byte, []int) { + return fileDescriptor10, []int{0, 3} +} + +func (m *UptimeCheckConfig_ContentMatcher) GetContent() string { + if m != nil { + return m.Content + } + return "" +} + +// Nimbus InternalCheckers. +type UptimeCheckConfig_InternalChecker struct { + // The GCP project ID. Not necessarily the same as the project_id for the config. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // The internal network to perform this uptime check on. + Network string `protobuf:"bytes,2,opt,name=network" json:"network,omitempty"` + // The GCP zone the uptime check should egress from. Only respected for + // internal uptime checks, where internal_network is specified. + GcpZone string `protobuf:"bytes,3,opt,name=gcp_zone,json=gcpZone" json:"gcp_zone,omitempty"` + // The checker ID. + CheckerId string `protobuf:"bytes,4,opt,name=checker_id,json=checkerId" json:"checker_id,omitempty"` + // The checker's human-readable name. + DisplayName string `protobuf:"bytes,5,opt,name=display_name,json=displayName" json:"display_name,omitempty"` +} + +func (m *UptimeCheckConfig_InternalChecker) Reset() { *m = UptimeCheckConfig_InternalChecker{} } +func (m *UptimeCheckConfig_InternalChecker) String() string { return proto.CompactTextString(m) } +func (*UptimeCheckConfig_InternalChecker) ProtoMessage() {} +func (*UptimeCheckConfig_InternalChecker) Descriptor() ([]byte, []int) { + return fileDescriptor10, []int{0, 4} +} + +func (m *UptimeCheckConfig_InternalChecker) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *UptimeCheckConfig_InternalChecker) GetNetwork() string { + if m != nil { + return m.Network + } + return "" +} + +func (m *UptimeCheckConfig_InternalChecker) GetGcpZone() string { + if m != nil { + return m.GcpZone + } + return "" +} + +func (m *UptimeCheckConfig_InternalChecker) GetCheckerId() string { + if m != nil { + return m.CheckerId + } + return "" +} + +func (m *UptimeCheckConfig_InternalChecker) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +// Contains the region, location, and list of IP +// addresses where checkers in the location run from. +type UptimeCheckIp struct { + // A broad region category in which the IP address is located. + Region UptimeCheckRegion `protobuf:"varint,1,opt,name=region,enum=google.monitoring.v3.UptimeCheckRegion" json:"region,omitempty"` + // A more specific location within the region that typically encodes + // a particular city/town/metro (and its containing state/province or country) + // within the broader umbrella region category. + Location string `protobuf:"bytes,2,opt,name=location" json:"location,omitempty"` + // The IP address from which the uptime check originates. This is a full + // IP address (not an IP address range). Most IP addresses, as of this + // publication, are in IPv4 format; however, one should not rely on the + // IP addresses being in IPv4 format indefinitely and should support + // interpreting this field in either IPv4 or IPv6 format. + IpAddress string `protobuf:"bytes,3,opt,name=ip_address,json=ipAddress" json:"ip_address,omitempty"` +} + +func (m *UptimeCheckIp) Reset() { *m = UptimeCheckIp{} } +func (m *UptimeCheckIp) String() string { return proto.CompactTextString(m) } +func (*UptimeCheckIp) ProtoMessage() {} +func (*UptimeCheckIp) Descriptor() ([]byte, []int) { return fileDescriptor10, []int{1} } + +func (m *UptimeCheckIp) GetRegion() UptimeCheckRegion { + if m != nil { + return m.Region + } + return UptimeCheckRegion_REGION_UNSPECIFIED +} + +func (m *UptimeCheckIp) GetLocation() string { + if m != nil { + return m.Location + } + return "" +} + +func (m *UptimeCheckIp) GetIpAddress() string { + if m != nil { + return m.IpAddress + } + return "" +} + +func init() { + proto.RegisterType((*UptimeCheckConfig)(nil), "google.monitoring.v3.UptimeCheckConfig") + proto.RegisterType((*UptimeCheckConfig_ResourceGroup)(nil), "google.monitoring.v3.UptimeCheckConfig.ResourceGroup") + proto.RegisterType((*UptimeCheckConfig_HttpCheck)(nil), "google.monitoring.v3.UptimeCheckConfig.HttpCheck") + proto.RegisterType((*UptimeCheckConfig_HttpCheck_BasicAuthentication)(nil), "google.monitoring.v3.UptimeCheckConfig.HttpCheck.BasicAuthentication") + proto.RegisterType((*UptimeCheckConfig_TcpCheck)(nil), "google.monitoring.v3.UptimeCheckConfig.TcpCheck") + proto.RegisterType((*UptimeCheckConfig_ContentMatcher)(nil), "google.monitoring.v3.UptimeCheckConfig.ContentMatcher") + proto.RegisterType((*UptimeCheckConfig_InternalChecker)(nil), "google.monitoring.v3.UptimeCheckConfig.InternalChecker") + proto.RegisterType((*UptimeCheckIp)(nil), "google.monitoring.v3.UptimeCheckIp") + proto.RegisterEnum("google.monitoring.v3.UptimeCheckRegion", UptimeCheckRegion_name, UptimeCheckRegion_value) + proto.RegisterEnum("google.monitoring.v3.GroupResourceType", GroupResourceType_name, GroupResourceType_value) +} + +func init() { proto.RegisterFile("google/monitoring/v3/uptime.proto", fileDescriptor10) } + +var fileDescriptor10 = []byte{ + // 1021 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0xdd, 0x4e, 0xe3, 0x46, + 0x14, 0x5e, 0x13, 0xc8, 0xcf, 0x21, 0xb0, 0x66, 0x4a, 0xdb, 0x60, 0x89, 0x15, 0xbb, 0xbd, 0x28, + 0xe2, 0xc2, 0xe9, 0x12, 0xf5, 0x47, 0x5b, 0x69, 0x2b, 0x27, 0xb8, 0xc4, 0x12, 0x24, 0xd1, 0x84, + 0x6c, 0xdb, 0x2d, 0xaa, 0x65, 0xec, 0x21, 0x71, 0x49, 0x3c, 0xae, 0x67, 0xcc, 0x96, 0xbe, 0x42, + 0x1f, 0xa3, 0x17, 0x95, 0xfa, 0x04, 0x7d, 0x86, 0xbe, 0x4d, 0xdf, 0xa0, 0x9a, 0xf1, 0x4c, 0x20, + 0x40, 0xb5, 0x70, 0x37, 0xdf, 0xf9, 0xf9, 0xe6, 0x1c, 0x9f, 0x9f, 0x31, 0x3c, 0x1f, 0x53, 0x3a, + 0x9e, 0x92, 0xe6, 0x8c, 0x26, 0x31, 0xa7, 0x59, 0x9c, 0x8c, 0x9b, 0x97, 0xad, 0x66, 0x9e, 0xf2, + 0x78, 0x46, 0xec, 0x34, 0xa3, 0x9c, 0xa2, 0xcd, 0xc2, 0xc4, 0xbe, 0x36, 0xb1, 0x2f, 0x5b, 0xd6, + 0x27, 0xca, 0x31, 0x48, 0x63, 0xed, 0x4c, 0x22, 0x3f, 0x23, 0x8c, 0xe6, 0x59, 0xa8, 0x5c, 0xad, + 0x67, 0xca, 0x48, 0xa2, 0xb3, 0xfc, 0xbc, 0x19, 0xe5, 0x59, 0xc0, 0x63, 0x9a, 0x14, 0xfa, 0x17, + 0xff, 0xd6, 0x61, 0x63, 0x24, 0xef, 0xea, 0x4c, 0x48, 0x78, 0xd1, 0xa1, 0xc9, 0x79, 0x3c, 0x46, + 0x08, 0x96, 0x93, 0x60, 0x46, 0x1a, 0xc6, 0x8e, 0xb1, 0x5b, 0xc3, 0xf2, 0x8c, 0x9e, 0x43, 0x3d, + 0x8a, 0x59, 0x3a, 0x0d, 0xae, 0x7c, 0xa9, 0x5b, 0x92, 0xba, 0x55, 0x25, 0xeb, 0x09, 0x93, 0x1e, + 0xa0, 0xbb, 0x81, 0x34, 0x4a, 0x3b, 0xc6, 0xee, 0xea, 0xfe, 0xb6, 0xad, 0x92, 0x08, 0xd2, 0xd8, + 0x3e, 0xd6, 0x56, 0x58, 0x19, 0x75, 0x9f, 0xe0, 0x8d, 0xd9, 0x6d, 0x21, 0xfa, 0x09, 0xd6, 0x35, + 0x8b, 0x3f, 0xce, 0x68, 0x9e, 0x36, 0x96, 0x25, 0xd7, 0xe7, 0xf6, 0x7d, 0x1f, 0xc4, 0xbe, 0x93, + 0x87, 0xad, 0x99, 0x0e, 0x85, 0x73, 0xf7, 0x09, 0x5e, 0xcb, 0x6e, 0x0a, 0x10, 0x06, 0x98, 0x70, + 0x9e, 0xfa, 0xa1, 0x70, 0x69, 0xac, 0x48, 0xee, 0x97, 0x0f, 0xe5, 0xee, 0x72, 0x9e, 0x4a, 0xdc, + 0x35, 0x70, 0x6d, 0xa2, 0x01, 0xea, 0x43, 0x8d, 0x87, 0x9a, 0xb2, 0x2c, 0x29, 0x3f, 0x7b, 0x28, + 0xe5, 0x49, 0x38, 0x67, 0xac, 0x72, 0x75, 0x46, 0x2f, 0xa1, 0x9c, 0x92, 0x2c, 0xa6, 0x51, 0xa3, + 0x22, 0xd9, 0xb6, 0x34, 0x9b, 0x2e, 0xa9, 0x7d, 0xa0, 0x4a, 0x8a, 0x95, 0x21, 0x6a, 0x41, 0x45, + 0x50, 0xd3, 0x9c, 0x37, 0xaa, 0xef, 0xf3, 0xd1, 0x96, 0x28, 0x00, 0x33, 0xa4, 0x09, 0x27, 0x09, + 0xf7, 0x67, 0x01, 0x0f, 0x27, 0x24, 0x63, 0x8d, 0xda, 0x4e, 0x69, 0x77, 0x75, 0xff, 0x8b, 0x87, + 0xc6, 0xdf, 0x29, 0xfc, 0x8f, 0x0b, 0x77, 0xfc, 0x34, 0x5c, 0xc0, 0x0c, 0x61, 0x30, 0x19, 0x99, + 0x92, 0x90, 0xcb, 0xf6, 0x18, 0xc7, 0x34, 0x61, 0x0d, 0xd8, 0x29, 0xed, 0xae, 0xef, 0x7f, 0xfa, + 0xde, 0x2b, 0xb0, 0xb4, 0xc7, 0x4f, 0x35, 0x41, 0x81, 0x19, 0x8a, 0x60, 0x23, 0x4e, 0x38, 0xc9, + 0x92, 0x60, 0x5a, 0x7c, 0x74, 0x11, 0xf7, 0xba, 0x8c, 0xfb, 0xcb, 0x87, 0xc6, 0xed, 0x29, 0x82, + 0x4e, 0xe1, 0x8f, 0xcd, 0x78, 0x51, 0xc0, 0xac, 0x5f, 0x61, 0x6d, 0xa1, 0x97, 0xd0, 0x16, 0x54, + 0x65, 0x47, 0xfa, 0x71, 0xa4, 0xa6, 0xa4, 0x22, 0xb1, 0x17, 0xa1, 0x23, 0x98, 0xb7, 0x99, 0xcf, + 0xaf, 0xd2, 0x62, 0x52, 0xfe, 0x37, 0x45, 0x49, 0xa7, 0xb9, 0x4f, 0xae, 0x52, 0x82, 0xeb, 0xd9, + 0x0d, 0x64, 0xfd, 0x5d, 0x82, 0xda, 0xbc, 0xd5, 0xd0, 0xc7, 0x50, 0xc9, 0x19, 0xf1, 0x19, 0x9b, + 0xca, 0x5b, 0xab, 0xb8, 0x9c, 0x33, 0x32, 0x64, 0x53, 0x31, 0xb1, 0x69, 0xc0, 0x27, 0x6a, 0x2a, + 0xe5, 0x59, 0xca, 0x68, 0xc6, 0xe5, 0x00, 0xae, 0x60, 0x79, 0x46, 0x67, 0x50, 0x0b, 0x72, 0x3e, + 0xf1, 0xe3, 0xe4, 0x9c, 0xaa, 0x69, 0x72, 0x1f, 0xdd, 0xf1, 0x76, 0x3b, 0x60, 0x71, 0xe8, 0xe4, + 0x7c, 0x42, 0x12, 0x1e, 0x87, 0x45, 0x23, 0x55, 0x05, 0xaf, 0x97, 0x9c, 0x53, 0xb1, 0x29, 0x66, + 0x01, 0xbb, 0xf0, 0x27, 0x24, 0x88, 0x44, 0x35, 0x56, 0x64, 0xa4, 0xab, 0x42, 0xd6, 0x2d, 0x44, + 0xe8, 0x7b, 0xa8, 0x68, 0x6d, 0x59, 0xd6, 0xea, 0xf5, 0xe3, 0x83, 0x50, 0x5c, 0x6e, 0xc2, 0xb3, + 0x2b, 0xac, 0xe9, 0xac, 0x63, 0xf8, 0xe0, 0x9e, 0xe8, 0x90, 0x05, 0xd5, 0x9c, 0x89, 0x9a, 0xce, + 0xb7, 0xda, 0x1c, 0x0b, 0x5d, 0x1a, 0x30, 0xf6, 0x8e, 0x66, 0x91, 0xfa, 0x7e, 0x73, 0x6c, 0xbd, + 0x82, 0xfa, 0xcd, 0x7b, 0x90, 0x09, 0xa5, 0x0b, 0x72, 0xa5, 0x28, 0xc4, 0x11, 0x6d, 0xc2, 0xca, + 0x65, 0x30, 0xcd, 0xf5, 0x42, 0x2c, 0xc0, 0xab, 0xa5, 0xaf, 0x0c, 0xeb, 0x19, 0x54, 0xf5, 0x44, + 0xcf, 0x6b, 0x61, 0x5c, 0xd7, 0xc2, 0xda, 0x83, 0xf5, 0xc5, 0x89, 0x41, 0x0d, 0xa8, 0xa8, 0x99, + 0xd1, 0x4d, 0xa5, 0xa0, 0xf5, 0xa7, 0x01, 0x4f, 0x6f, 0xb5, 0x29, 0xda, 0x06, 0x48, 0x33, 0xfa, + 0x33, 0x09, 0xf9, 0x75, 0x17, 0xd6, 0x94, 0xc4, 0x8b, 0x04, 0x59, 0x42, 0xf8, 0x3b, 0x9a, 0x5d, + 0xa8, 0xd0, 0x34, 0x94, 0xcd, 0x1b, 0xa6, 0xfe, 0x6f, 0x34, 0x29, 0xb6, 0xb3, 0x68, 0xde, 0x30, + 0x7d, 0x4b, 0x13, 0x22, 0x38, 0xd5, 0x14, 0x09, 0xce, 0xe5, 0x82, 0x53, 0x49, 0xbc, 0xe8, 0xce, + 0x23, 0xb0, 0x72, 0xe7, 0x11, 0x68, 0x03, 0x54, 0x75, 0x03, 0xb7, 0x37, 0x01, 0x49, 0x5f, 0x3f, + 0x23, 0xbf, 0xe4, 0x84, 0x71, 0x39, 0x0f, 0x2f, 0x7e, 0x37, 0x60, 0xed, 0x46, 0x61, 0xbd, 0x14, + 0x7d, 0x03, 0xe5, 0x62, 0x1f, 0xc8, 0x2c, 0x1e, 0xb1, 0x0e, 0x94, 0x9b, 0x28, 0xe1, 0x94, 0x16, + 0xa5, 0xd6, 0x25, 0xd4, 0x58, 0xa4, 0x14, 0xa7, 0x7e, 0x10, 0x45, 0x19, 0x61, 0x4c, 0xe5, 0x5b, + 0x8b, 0x53, 0xa7, 0x10, 0xec, 0x91, 0x85, 0x07, 0xb0, 0xe0, 0x45, 0x1f, 0x01, 0xc2, 0xee, 0xa1, + 0xd7, 0xef, 0xf9, 0xa3, 0xde, 0x70, 0xe0, 0x76, 0xbc, 0x6f, 0x3d, 0xf7, 0xc0, 0x7c, 0x82, 0x2a, + 0x50, 0x1a, 0x0d, 0x1d, 0xd3, 0x40, 0x00, 0x65, 0x77, 0x84, 0xfb, 0x03, 0xd7, 0x5c, 0x42, 0x1b, + 0xb0, 0x36, 0xec, 0x8f, 0x4e, 0xba, 0xbe, 0x73, 0xec, 0x62, 0xaf, 0xe3, 0x98, 0x25, 0x64, 0x42, + 0xdd, 0x19, 0x7a, 0x8e, 0x3f, 0x70, 0x84, 0x6b, 0xc7, 0x5c, 0xde, 0xfb, 0x11, 0x36, 0xee, 0x8c, + 0x3a, 0xda, 0x86, 0x2d, 0xec, 0x0e, 0xfb, 0x23, 0xdc, 0x71, 0xfd, 0x93, 0x1f, 0x06, 0xee, 0xad, + 0xdb, 0xea, 0x50, 0xf5, 0x7a, 0xc3, 0x13, 0xa7, 0xd7, 0x71, 0x4d, 0x03, 0x6d, 0xc1, 0x87, 0xce, + 0x77, 0x43, 0xdf, 0x3d, 0x6a, 0xfb, 0x47, 0x7d, 0xe7, 0xc0, 0x6f, 0x3b, 0x47, 0x42, 0x83, 0xcd, + 0xa5, 0xf6, 0x1f, 0x06, 0x34, 0x42, 0x3a, 0xbb, 0xf7, 0xab, 0xb5, 0x57, 0x8b, 0xf4, 0x06, 0x62, + 0xf5, 0x0f, 0x8c, 0xb7, 0xaf, 0x95, 0xd1, 0x98, 0x4e, 0x83, 0x64, 0x6c, 0xd3, 0x6c, 0xdc, 0x1c, + 0x93, 0x44, 0x3e, 0x0c, 0xcd, 0x42, 0x15, 0xa4, 0x31, 0x5b, 0xfc, 0x1d, 0xf9, 0xfa, 0x1a, 0xfd, + 0xb5, 0x64, 0x1d, 0x16, 0x04, 0x9d, 0x29, 0xcd, 0x23, 0xfd, 0x94, 0x8b, 0xbb, 0xde, 0xb4, 0xfe, + 0xd1, 0xca, 0x53, 0xa9, 0x3c, 0xbd, 0x56, 0x9e, 0xbe, 0x69, 0x9d, 0x95, 0xe5, 0x25, 0xad, 0xff, + 0x02, 0x00, 0x00, 0xff, 0xff, 0xc9, 0xa5, 0xbc, 0x87, 0xf2, 0x08, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/monitoring/v3/uptime_service.pb.go b/vendor/google.golang.org/genproto/googleapis/monitoring/v3/uptime_service.pb.go new file mode 100644 index 0000000..a2ee162 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/monitoring/v3/uptime_service.pb.go @@ -0,0 +1,591 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/monitoring/v3/uptime_service.proto + +package monitoring + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf5 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf6 "google.golang.org/genproto/protobuf/field_mask" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// The protocol for the `ListUptimeCheckConfigs` request. +type ListUptimeCheckConfigsRequest struct { + // The project whose uptime check configurations are listed. The format is + // + // `projects/[PROJECT_ID]`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The maximum number of results to return in a single response. The server + // may further constrain the maximum number of results returned in a single + // page. If the page_size is <=0, the server will decide the number of results + // to be returned. + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // If this field is not empty then it must contain the `nextPageToken` value + // returned by a previous call to this method. Using this field causes the + // method to return more results from the previous method call. + PageToken string `protobuf:"bytes,4,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListUptimeCheckConfigsRequest) Reset() { *m = ListUptimeCheckConfigsRequest{} } +func (m *ListUptimeCheckConfigsRequest) String() string { return proto.CompactTextString(m) } +func (*ListUptimeCheckConfigsRequest) ProtoMessage() {} +func (*ListUptimeCheckConfigsRequest) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{0} } + +func (m *ListUptimeCheckConfigsRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListUptimeCheckConfigsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListUptimeCheckConfigsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// The protocol for the `ListUptimeCheckConfigs` response. +type ListUptimeCheckConfigsResponse struct { + // The returned uptime check configurations. + UptimeCheckConfigs []*UptimeCheckConfig `protobuf:"bytes,1,rep,name=uptime_check_configs,json=uptimeCheckConfigs" json:"uptime_check_configs,omitempty"` + // This field represents the pagination token to retrieve the next page of + // results. If the value is empty, it means no further results for the + // request. To retrieve the next page of results, the value of the + // next_page_token is passed to the subsequent List method call (in the + // request message's page_token field). + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListUptimeCheckConfigsResponse) Reset() { *m = ListUptimeCheckConfigsResponse{} } +func (m *ListUptimeCheckConfigsResponse) String() string { return proto.CompactTextString(m) } +func (*ListUptimeCheckConfigsResponse) ProtoMessage() {} +func (*ListUptimeCheckConfigsResponse) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{1} } + +func (m *ListUptimeCheckConfigsResponse) GetUptimeCheckConfigs() []*UptimeCheckConfig { + if m != nil { + return m.UptimeCheckConfigs + } + return nil +} + +func (m *ListUptimeCheckConfigsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The protocol for the `GetUptimeCheckConfig` request. +type GetUptimeCheckConfigRequest struct { + // The uptime check configuration to retrieve. The format is + // + // `projects/[PROJECT_ID]/uptimeCheckConfigs/[UPTIME_CHECK_ID]`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetUptimeCheckConfigRequest) Reset() { *m = GetUptimeCheckConfigRequest{} } +func (m *GetUptimeCheckConfigRequest) String() string { return proto.CompactTextString(m) } +func (*GetUptimeCheckConfigRequest) ProtoMessage() {} +func (*GetUptimeCheckConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{2} } + +func (m *GetUptimeCheckConfigRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The protocol for the `CreateUptimeCheckConfig` request. +type CreateUptimeCheckConfigRequest struct { + // The project in which to create the uptime check. The format is: + // + // `projects/[PROJECT_ID]`. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The new uptime check configuration. + UptimeCheckConfig *UptimeCheckConfig `protobuf:"bytes,2,opt,name=uptime_check_config,json=uptimeCheckConfig" json:"uptime_check_config,omitempty"` +} + +func (m *CreateUptimeCheckConfigRequest) Reset() { *m = CreateUptimeCheckConfigRequest{} } +func (m *CreateUptimeCheckConfigRequest) String() string { return proto.CompactTextString(m) } +func (*CreateUptimeCheckConfigRequest) ProtoMessage() {} +func (*CreateUptimeCheckConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{3} } + +func (m *CreateUptimeCheckConfigRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateUptimeCheckConfigRequest) GetUptimeCheckConfig() *UptimeCheckConfig { + if m != nil { + return m.UptimeCheckConfig + } + return nil +} + +// The protocol for the `UpdateUptimeCheckConfig` request. +type UpdateUptimeCheckConfigRequest struct { + // Optional. If present, only the listed fields in the current uptime check + // configuration are updated with values from the new configuration. If this + // field is empty, then the current configuration is completely replaced with + // the new configuration. + UpdateMask *google_protobuf6.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` + // Required. If an `"updateMask"` has been specified, this field gives + // the values for the set of fields mentioned in the `"updateMask"`. If an + // `"updateMask"` has not been given, this uptime check configuration replaces + // the current configuration. If a field is mentioned in `"updateMask`" but + // the corresonding field is omitted in this partial uptime check + // configuration, it has the effect of deleting/clearing the field from the + // configuration on the server. + UptimeCheckConfig *UptimeCheckConfig `protobuf:"bytes,3,opt,name=uptime_check_config,json=uptimeCheckConfig" json:"uptime_check_config,omitempty"` +} + +func (m *UpdateUptimeCheckConfigRequest) Reset() { *m = UpdateUptimeCheckConfigRequest{} } +func (m *UpdateUptimeCheckConfigRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateUptimeCheckConfigRequest) ProtoMessage() {} +func (*UpdateUptimeCheckConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{4} } + +func (m *UpdateUptimeCheckConfigRequest) GetUpdateMask() *google_protobuf6.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +func (m *UpdateUptimeCheckConfigRequest) GetUptimeCheckConfig() *UptimeCheckConfig { + if m != nil { + return m.UptimeCheckConfig + } + return nil +} + +// The protocol for the `DeleteUptimeCheckConfig` request. +type DeleteUptimeCheckConfigRequest struct { + // The uptime check configuration to delete. The format is + // + // `projects/[PROJECT_ID]/uptimeCheckConfigs/[UPTIME_CHECK_ID]`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteUptimeCheckConfigRequest) Reset() { *m = DeleteUptimeCheckConfigRequest{} } +func (m *DeleteUptimeCheckConfigRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteUptimeCheckConfigRequest) ProtoMessage() {} +func (*DeleteUptimeCheckConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{5} } + +func (m *DeleteUptimeCheckConfigRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The protocol for the `ListUptimeCheckIps` request. +type ListUptimeCheckIpsRequest struct { + // The maximum number of results to return in a single response. The server + // may further constrain the maximum number of results returned in a single + // page. If the page_size is <=0, the server will decide the number of results + // to be returned. + // NOTE: this field is not yet implemented + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // If this field is not empty then it must contain the `nextPageToken` value + // returned by a previous call to this method. Using this field causes the + // method to return more results from the previous method call. + // NOTE: this field is not yet implemented + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` +} + +func (m *ListUptimeCheckIpsRequest) Reset() { *m = ListUptimeCheckIpsRequest{} } +func (m *ListUptimeCheckIpsRequest) String() string { return proto.CompactTextString(m) } +func (*ListUptimeCheckIpsRequest) ProtoMessage() {} +func (*ListUptimeCheckIpsRequest) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{6} } + +func (m *ListUptimeCheckIpsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListUptimeCheckIpsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +// The protocol for the `ListUptimeCheckIps` response. +type ListUptimeCheckIpsResponse struct { + // The returned list of IP addresses (including region and location) that the + // checkers run from. + UptimeCheckIps []*UptimeCheckIp `protobuf:"bytes,1,rep,name=uptime_check_ips,json=uptimeCheckIps" json:"uptime_check_ips,omitempty"` + // This field represents the pagination token to retrieve the next page of + // results. If the value is empty, it means no further results for the + // request. To retrieve the next page of results, the value of the + // next_page_token is passed to the subsequent List method call (in the + // request message's page_token field). + // NOTE: this field is not yet implemented + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListUptimeCheckIpsResponse) Reset() { *m = ListUptimeCheckIpsResponse{} } +func (m *ListUptimeCheckIpsResponse) String() string { return proto.CompactTextString(m) } +func (*ListUptimeCheckIpsResponse) ProtoMessage() {} +func (*ListUptimeCheckIpsResponse) Descriptor() ([]byte, []int) { return fileDescriptor11, []int{7} } + +func (m *ListUptimeCheckIpsResponse) GetUptimeCheckIps() []*UptimeCheckIp { + if m != nil { + return m.UptimeCheckIps + } + return nil +} + +func (m *ListUptimeCheckIpsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +func init() { + proto.RegisterType((*ListUptimeCheckConfigsRequest)(nil), "google.monitoring.v3.ListUptimeCheckConfigsRequest") + proto.RegisterType((*ListUptimeCheckConfigsResponse)(nil), "google.monitoring.v3.ListUptimeCheckConfigsResponse") + proto.RegisterType((*GetUptimeCheckConfigRequest)(nil), "google.monitoring.v3.GetUptimeCheckConfigRequest") + proto.RegisterType((*CreateUptimeCheckConfigRequest)(nil), "google.monitoring.v3.CreateUptimeCheckConfigRequest") + proto.RegisterType((*UpdateUptimeCheckConfigRequest)(nil), "google.monitoring.v3.UpdateUptimeCheckConfigRequest") + proto.RegisterType((*DeleteUptimeCheckConfigRequest)(nil), "google.monitoring.v3.DeleteUptimeCheckConfigRequest") + proto.RegisterType((*ListUptimeCheckIpsRequest)(nil), "google.monitoring.v3.ListUptimeCheckIpsRequest") + proto.RegisterType((*ListUptimeCheckIpsResponse)(nil), "google.monitoring.v3.ListUptimeCheckIpsResponse") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for UptimeCheckService service + +type UptimeCheckServiceClient interface { + // Lists the existing valid uptime check configurations for the project, + // leaving out any invalid configurations. + ListUptimeCheckConfigs(ctx context.Context, in *ListUptimeCheckConfigsRequest, opts ...grpc.CallOption) (*ListUptimeCheckConfigsResponse, error) + // Gets a single uptime check configuration. + GetUptimeCheckConfig(ctx context.Context, in *GetUptimeCheckConfigRequest, opts ...grpc.CallOption) (*UptimeCheckConfig, error) + // Creates a new uptime check configuration. + CreateUptimeCheckConfig(ctx context.Context, in *CreateUptimeCheckConfigRequest, opts ...grpc.CallOption) (*UptimeCheckConfig, error) + // Updates an uptime check configuration. You can either replace the entire + // configuration with a new one or replace only certain fields in the current + // configuration by specifying the fields to be updated via `"updateMask"`. + // Returns the updated configuration. + UpdateUptimeCheckConfig(ctx context.Context, in *UpdateUptimeCheckConfigRequest, opts ...grpc.CallOption) (*UptimeCheckConfig, error) + // Deletes an uptime check configuration. Note that this method will fail + // if the uptime check configuration is referenced by an alert policy or + // other dependent configs that would be rendered invalid by the deletion. + DeleteUptimeCheckConfig(ctx context.Context, in *DeleteUptimeCheckConfigRequest, opts ...grpc.CallOption) (*google_protobuf5.Empty, error) + // Returns the list of IPs that checkers run from + ListUptimeCheckIps(ctx context.Context, in *ListUptimeCheckIpsRequest, opts ...grpc.CallOption) (*ListUptimeCheckIpsResponse, error) +} + +type uptimeCheckServiceClient struct { + cc *grpc.ClientConn +} + +func NewUptimeCheckServiceClient(cc *grpc.ClientConn) UptimeCheckServiceClient { + return &uptimeCheckServiceClient{cc} +} + +func (c *uptimeCheckServiceClient) ListUptimeCheckConfigs(ctx context.Context, in *ListUptimeCheckConfigsRequest, opts ...grpc.CallOption) (*ListUptimeCheckConfigsResponse, error) { + out := new(ListUptimeCheckConfigsResponse) + err := grpc.Invoke(ctx, "/google.monitoring.v3.UptimeCheckService/ListUptimeCheckConfigs", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *uptimeCheckServiceClient) GetUptimeCheckConfig(ctx context.Context, in *GetUptimeCheckConfigRequest, opts ...grpc.CallOption) (*UptimeCheckConfig, error) { + out := new(UptimeCheckConfig) + err := grpc.Invoke(ctx, "/google.monitoring.v3.UptimeCheckService/GetUptimeCheckConfig", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *uptimeCheckServiceClient) CreateUptimeCheckConfig(ctx context.Context, in *CreateUptimeCheckConfigRequest, opts ...grpc.CallOption) (*UptimeCheckConfig, error) { + out := new(UptimeCheckConfig) + err := grpc.Invoke(ctx, "/google.monitoring.v3.UptimeCheckService/CreateUptimeCheckConfig", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *uptimeCheckServiceClient) UpdateUptimeCheckConfig(ctx context.Context, in *UpdateUptimeCheckConfigRequest, opts ...grpc.CallOption) (*UptimeCheckConfig, error) { + out := new(UptimeCheckConfig) + err := grpc.Invoke(ctx, "/google.monitoring.v3.UptimeCheckService/UpdateUptimeCheckConfig", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *uptimeCheckServiceClient) DeleteUptimeCheckConfig(ctx context.Context, in *DeleteUptimeCheckConfigRequest, opts ...grpc.CallOption) (*google_protobuf5.Empty, error) { + out := new(google_protobuf5.Empty) + err := grpc.Invoke(ctx, "/google.monitoring.v3.UptimeCheckService/DeleteUptimeCheckConfig", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *uptimeCheckServiceClient) ListUptimeCheckIps(ctx context.Context, in *ListUptimeCheckIpsRequest, opts ...grpc.CallOption) (*ListUptimeCheckIpsResponse, error) { + out := new(ListUptimeCheckIpsResponse) + err := grpc.Invoke(ctx, "/google.monitoring.v3.UptimeCheckService/ListUptimeCheckIps", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for UptimeCheckService service + +type UptimeCheckServiceServer interface { + // Lists the existing valid uptime check configurations for the project, + // leaving out any invalid configurations. + ListUptimeCheckConfigs(context.Context, *ListUptimeCheckConfigsRequest) (*ListUptimeCheckConfigsResponse, error) + // Gets a single uptime check configuration. + GetUptimeCheckConfig(context.Context, *GetUptimeCheckConfigRequest) (*UptimeCheckConfig, error) + // Creates a new uptime check configuration. + CreateUptimeCheckConfig(context.Context, *CreateUptimeCheckConfigRequest) (*UptimeCheckConfig, error) + // Updates an uptime check configuration. You can either replace the entire + // configuration with a new one or replace only certain fields in the current + // configuration by specifying the fields to be updated via `"updateMask"`. + // Returns the updated configuration. + UpdateUptimeCheckConfig(context.Context, *UpdateUptimeCheckConfigRequest) (*UptimeCheckConfig, error) + // Deletes an uptime check configuration. Note that this method will fail + // if the uptime check configuration is referenced by an alert policy or + // other dependent configs that would be rendered invalid by the deletion. + DeleteUptimeCheckConfig(context.Context, *DeleteUptimeCheckConfigRequest) (*google_protobuf5.Empty, error) + // Returns the list of IPs that checkers run from + ListUptimeCheckIps(context.Context, *ListUptimeCheckIpsRequest) (*ListUptimeCheckIpsResponse, error) +} + +func RegisterUptimeCheckServiceServer(s *grpc.Server, srv UptimeCheckServiceServer) { + s.RegisterService(&_UptimeCheckService_serviceDesc, srv) +} + +func _UptimeCheckService_ListUptimeCheckConfigs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListUptimeCheckConfigsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(UptimeCheckServiceServer).ListUptimeCheckConfigs(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.monitoring.v3.UptimeCheckService/ListUptimeCheckConfigs", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(UptimeCheckServiceServer).ListUptimeCheckConfigs(ctx, req.(*ListUptimeCheckConfigsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _UptimeCheckService_GetUptimeCheckConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetUptimeCheckConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(UptimeCheckServiceServer).GetUptimeCheckConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.monitoring.v3.UptimeCheckService/GetUptimeCheckConfig", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(UptimeCheckServiceServer).GetUptimeCheckConfig(ctx, req.(*GetUptimeCheckConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _UptimeCheckService_CreateUptimeCheckConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateUptimeCheckConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(UptimeCheckServiceServer).CreateUptimeCheckConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.monitoring.v3.UptimeCheckService/CreateUptimeCheckConfig", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(UptimeCheckServiceServer).CreateUptimeCheckConfig(ctx, req.(*CreateUptimeCheckConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _UptimeCheckService_UpdateUptimeCheckConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateUptimeCheckConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(UptimeCheckServiceServer).UpdateUptimeCheckConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.monitoring.v3.UptimeCheckService/UpdateUptimeCheckConfig", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(UptimeCheckServiceServer).UpdateUptimeCheckConfig(ctx, req.(*UpdateUptimeCheckConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _UptimeCheckService_DeleteUptimeCheckConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteUptimeCheckConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(UptimeCheckServiceServer).DeleteUptimeCheckConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.monitoring.v3.UptimeCheckService/DeleteUptimeCheckConfig", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(UptimeCheckServiceServer).DeleteUptimeCheckConfig(ctx, req.(*DeleteUptimeCheckConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _UptimeCheckService_ListUptimeCheckIps_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListUptimeCheckIpsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(UptimeCheckServiceServer).ListUptimeCheckIps(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.monitoring.v3.UptimeCheckService/ListUptimeCheckIps", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(UptimeCheckServiceServer).ListUptimeCheckIps(ctx, req.(*ListUptimeCheckIpsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _UptimeCheckService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.monitoring.v3.UptimeCheckService", + HandlerType: (*UptimeCheckServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListUptimeCheckConfigs", + Handler: _UptimeCheckService_ListUptimeCheckConfigs_Handler, + }, + { + MethodName: "GetUptimeCheckConfig", + Handler: _UptimeCheckService_GetUptimeCheckConfig_Handler, + }, + { + MethodName: "CreateUptimeCheckConfig", + Handler: _UptimeCheckService_CreateUptimeCheckConfig_Handler, + }, + { + MethodName: "UpdateUptimeCheckConfig", + Handler: _UptimeCheckService_UpdateUptimeCheckConfig_Handler, + }, + { + MethodName: "DeleteUptimeCheckConfig", + Handler: _UptimeCheckService_DeleteUptimeCheckConfig_Handler, + }, + { + MethodName: "ListUptimeCheckIps", + Handler: _UptimeCheckService_ListUptimeCheckIps_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/monitoring/v3/uptime_service.proto", +} + +func init() { proto.RegisterFile("google/monitoring/v3/uptime_service.proto", fileDescriptor11) } + +var fileDescriptor11 = []byte{ + // 735 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0xdf, 0x4e, 0x13, 0x4f, + 0x14, 0xce, 0xb4, 0xfc, 0x08, 0x1c, 0xf2, 0xf3, 0xcf, 0xd8, 0x40, 0x5d, 0xa4, 0xa9, 0x35, 0x51, + 0x6c, 0xcc, 0xae, 0xb4, 0x5c, 0x49, 0x24, 0x91, 0xaa, 0x84, 0x44, 0x12, 0x52, 0x04, 0xa2, 0x92, + 0x34, 0x4b, 0x19, 0xd6, 0xb5, 0xed, 0xce, 0xd8, 0x99, 0x25, 0x8a, 0xe1, 0xc6, 0x37, 0x30, 0x5c, + 0x7a, 0x69, 0xe2, 0x05, 0x0f, 0xa0, 0xd7, 0x5e, 0x99, 0x78, 0x6b, 0x7c, 0x03, 0x1f, 0xc4, 0xec, + 0xec, 0x2c, 0xa5, 0xed, 0xec, 0xba, 0x8d, 0x77, 0xdd, 0x39, 0x67, 0xce, 0xf9, 0xce, 0xb7, 0xdf, + 0xf9, 0xba, 0x70, 0xdb, 0xa1, 0xd4, 0x69, 0x13, 0xab, 0x43, 0x3d, 0x57, 0xd0, 0xae, 0xeb, 0x39, + 0xd6, 0x61, 0xd5, 0xf2, 0x99, 0x70, 0x3b, 0xa4, 0xc1, 0x49, 0xf7, 0xd0, 0x6d, 0x12, 0x93, 0x75, + 0xa9, 0xa0, 0x38, 0x17, 0xa6, 0x9a, 0xbd, 0x54, 0xf3, 0xb0, 0x6a, 0x5c, 0x53, 0x05, 0x6c, 0xe6, + 0x5a, 0xb6, 0xe7, 0x51, 0x61, 0x0b, 0x97, 0x7a, 0x3c, 0xbc, 0x63, 0x5c, 0x4f, 0x28, 0xaf, 0x52, + 0x66, 0x55, 0x8a, 0x7c, 0xda, 0xf3, 0x0f, 0x2c, 0xd2, 0x61, 0xe2, 0xad, 0x0a, 0x16, 0x07, 0x83, + 0x07, 0x2e, 0x69, 0xef, 0x37, 0x3a, 0x36, 0x6f, 0x85, 0x19, 0x25, 0x0e, 0x73, 0x4f, 0x5c, 0x2e, + 0xb6, 0x64, 0xc9, 0xda, 0x4b, 0xd2, 0x6c, 0xd5, 0xa8, 0x77, 0xe0, 0x3a, 0xbc, 0x4e, 0x5e, 0xfb, + 0x84, 0x0b, 0x3c, 0x0d, 0xe3, 0xcc, 0xee, 0x12, 0x4f, 0xe4, 0x51, 0x11, 0xcd, 0x4f, 0xd6, 0xd5, + 0x13, 0x9e, 0x85, 0x49, 0x66, 0x3b, 0xa4, 0xc1, 0xdd, 0x23, 0x92, 0xcf, 0x16, 0xd1, 0xfc, 0x7f, + 0xf5, 0x89, 0xe0, 0x60, 0xd3, 0x3d, 0x22, 0x78, 0x0e, 0x40, 0x06, 0x05, 0x6d, 0x11, 0x2f, 0x3f, + 0x26, 0x2f, 0xca, 0xf4, 0xa7, 0xc1, 0x41, 0xe9, 0x13, 0x82, 0x42, 0x5c, 0x57, 0xce, 0xa8, 0xc7, + 0x09, 0x7e, 0x06, 0x39, 0xc5, 0x62, 0x33, 0x08, 0x37, 0x9a, 0x61, 0x3c, 0x8f, 0x8a, 0xd9, 0xf9, + 0xa9, 0xca, 0x2d, 0x53, 0x47, 0xa6, 0x39, 0x54, 0xaf, 0x8e, 0xfd, 0xa1, 0x16, 0xf8, 0x26, 0x5c, + 0xf4, 0xc8, 0x1b, 0xd1, 0x38, 0x87, 0x30, 0x23, 0x11, 0xfe, 0x1f, 0x1c, 0x6f, 0x9c, 0xa1, 0x5c, + 0x80, 0xd9, 0x55, 0x32, 0x8c, 0x31, 0x22, 0x06, 0xc3, 0x98, 0x67, 0x77, 0x88, 0xa2, 0x45, 0xfe, + 0x2e, 0x7d, 0x40, 0x50, 0xa8, 0x75, 0x89, 0x2d, 0x48, 0xec, 0xb5, 0x38, 0x3e, 0x77, 0xe0, 0x8a, + 0x66, 0x60, 0x89, 0x6c, 0x84, 0x79, 0x2f, 0x0f, 0xcd, 0x5b, 0xfa, 0x82, 0xa0, 0xb0, 0xc5, 0xf6, + 0x93, 0x30, 0x2d, 0xc1, 0x94, 0x2f, 0x33, 0xa4, 0x32, 0x54, 0x4f, 0x23, 0xea, 0x19, 0x89, 0xc7, + 0x7c, 0x1c, 0x88, 0x67, 0xdd, 0xe6, 0xad, 0x3a, 0x84, 0xe9, 0xc1, 0xef, 0x38, 0xe0, 0xd9, 0x7f, + 0x06, 0xbe, 0x08, 0x85, 0x87, 0xa4, 0x4d, 0x12, 0x70, 0xeb, 0x5e, 0xc1, 0x0e, 0x5c, 0x1d, 0x90, + 0xd6, 0x1a, 0x3b, 0x13, 0x73, 0x9f, 0x68, 0x33, 0x89, 0xa2, 0xcd, 0x0e, 0x8a, 0xf6, 0x04, 0x81, + 0xa1, 0xab, 0xac, 0x04, 0xbb, 0x0e, 0x97, 0xfa, 0x68, 0x70, 0x59, 0x24, 0xd6, 0x1b, 0x7f, 0xe5, + 0x60, 0x8d, 0xd5, 0x2f, 0xf8, 0x7d, 0x65, 0xd3, 0x8a, 0xb4, 0xf2, 0x7d, 0x02, 0xf0, 0xb9, 0x4a, + 0x9b, 0xa1, 0xe5, 0xe0, 0xaf, 0x08, 0xa6, 0xf5, 0x1b, 0x86, 0xab, 0x7a, 0x38, 0x89, 0x2e, 0x60, + 0x2c, 0x8e, 0x76, 0x29, 0xe4, 0xa4, 0x54, 0x79, 0xff, 0xf3, 0xf7, 0x49, 0xe6, 0x0e, 0x2e, 0x07, + 0xae, 0xf5, 0x2e, 0x14, 0xfa, 0x7d, 0xd6, 0xa5, 0xaf, 0x48, 0x53, 0x70, 0xab, 0x7c, 0x6c, 0x69, + 0xb6, 0xf3, 0x33, 0x82, 0x9c, 0x6e, 0xed, 0xf0, 0x82, 0x1e, 0x42, 0xc2, 0x8a, 0x1a, 0x69, 0xd5, + 0x37, 0x00, 0x34, 0xd0, 0xd1, 0x39, 0x98, 0x1a, 0x94, 0x56, 0xf9, 0x18, 0x7f, 0x43, 0x30, 0x13, + 0xb3, 0xeb, 0x38, 0x86, 0xae, 0x64, 0x6b, 0x48, 0x0f, 0x77, 0x55, 0xc2, 0x7d, 0x50, 0x1a, 0x81, + 0xd7, 0x7b, 0xba, 0x25, 0xc5, 0xbf, 0x10, 0xcc, 0xc4, 0x78, 0x43, 0xdc, 0x0c, 0xc9, 0x56, 0x92, + 0x7e, 0x86, 0x17, 0x72, 0x86, 0xad, 0xca, 0xb2, 0x9c, 0x41, 0x03, 0xce, 0x4c, 0xf5, 0x1a, 0xf4, + 0x73, 0x7d, 0x44, 0x30, 0x13, 0xe3, 0x1d, 0x71, 0x73, 0x25, 0x5b, 0x8d, 0x31, 0x3d, 0xe4, 0x86, + 0x8f, 0x82, 0xff, 0xd9, 0x48, 0x39, 0xe5, 0x51, 0x94, 0x73, 0x82, 0x00, 0x0f, 0x3b, 0x09, 0xb6, + 0x52, 0xed, 0x58, 0xcf, 0xcd, 0x8c, 0xbb, 0xe9, 0x2f, 0xa8, 0x85, 0x34, 0x24, 0xda, 0x1c, 0xc6, + 0xbd, 0xcf, 0x88, 0x28, 0x67, 0xe5, 0x14, 0x41, 0xbe, 0x49, 0x3b, 0xda, 0x9a, 0x2b, 0xca, 0x63, + 0x94, 0xbd, 0x6c, 0x04, 0x1c, 0x6c, 0xa0, 0xe7, 0xcb, 0x2a, 0xd7, 0xa1, 0x6d, 0xdb, 0x73, 0x4c, + 0xda, 0x75, 0x2c, 0x87, 0x78, 0x92, 0x21, 0x2b, 0x0c, 0xd9, 0xcc, 0xe5, 0xfd, 0x5f, 0x2f, 0x4b, + 0xbd, 0xa7, 0xd3, 0x8c, 0xb1, 0x1a, 0x16, 0xa8, 0xb5, 0xa9, 0xbf, 0x6f, 0xae, 0xf7, 0x5a, 0x6e, + 0x57, 0x7f, 0x44, 0xc1, 0x5d, 0x19, 0xdc, 0xed, 0x05, 0x77, 0xb7, 0xab, 0x7b, 0xe3, 0xb2, 0x49, + 0xf5, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4a, 0x1d, 0x15, 0x69, 0x80, 0x09, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/privacy/dlp/v2/dlp.pb.go b/vendor/google.golang.org/genproto/googleapis/privacy/dlp/v2/dlp.pb.go new file mode 100644 index 0000000..96d5750 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/privacy/dlp/v2/dlp.pb.go @@ -0,0 +1,9624 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/privacy/dlp/v2/dlp.proto + +/* +Package dlp is a generated protocol buffer package. + +It is generated from these files: + google/privacy/dlp/v2/dlp.proto + google/privacy/dlp/v2/storage.proto + +It has these top-level messages: + InspectConfig + ByteContentItem + ContentItem + Table + InspectResult + Finding + Location + ContentLocation + DocumentLocation + RecordLocation + TableLocation + Range + ImageLocation + BoundingBox + RedactImageRequest + Color + RedactImageResponse + DeidentifyContentRequest + DeidentifyContentResponse + ReidentifyContentRequest + ReidentifyContentResponse + InspectContentRequest + InspectContentResponse + OutputStorageConfig + InfoTypeStats + InspectDataSourceDetails + InfoTypeDescription + ListInfoTypesRequest + ListInfoTypesResponse + RiskAnalysisJobConfig + PrivacyMetric + AnalyzeDataSourceRiskDetails + ValueFrequency + Value + QuoteInfo + DateTime + DeidentifyConfig + PrimitiveTransformation + TimePartConfig + CryptoHashConfig + ReplaceValueConfig + ReplaceWithInfoTypeConfig + RedactConfig + CharsToIgnore + CharacterMaskConfig + FixedSizeBucketingConfig + BucketingConfig + CryptoReplaceFfxFpeConfig + CryptoKey + TransientCryptoKey + UnwrappedCryptoKey + KmsWrappedCryptoKey + DateShiftConfig + InfoTypeTransformations + FieldTransformation + RecordTransformations + RecordSuppression + RecordCondition + TransformationOverview + TransformationSummary + Schedule + InspectTemplate + DeidentifyTemplate + Error + JobTrigger + Action + CreateInspectTemplateRequest + UpdateInspectTemplateRequest + GetInspectTemplateRequest + ListInspectTemplatesRequest + ListInspectTemplatesResponse + DeleteInspectTemplateRequest + CreateJobTriggerRequest + UpdateJobTriggerRequest + GetJobTriggerRequest + CreateDlpJobRequest + ListJobTriggersRequest + ListJobTriggersResponse + DeleteJobTriggerRequest + InspectJobConfig + DlpJob + GetDlpJobRequest + ListDlpJobsRequest + ListDlpJobsResponse + CancelDlpJobRequest + DeleteDlpJobRequest + CreateDeidentifyTemplateRequest + UpdateDeidentifyTemplateRequest + GetDeidentifyTemplateRequest + ListDeidentifyTemplatesRequest + ListDeidentifyTemplatesResponse + DeleteDeidentifyTemplateRequest + InfoType + CustomInfoType + FieldId + PartitionId + KindExpression + DatastoreOptions + CloudStorageOptions + BigQueryOptions + StorageConfig + BigQueryKey + DatastoreKey + Key + RecordKey + BigQueryTable +*/ +package dlp + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf2 "github.com/golang/protobuf/ptypes/duration" +import google_protobuf3 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf4 "google.golang.org/genproto/protobuf/field_mask" +import google_protobuf1 "github.com/golang/protobuf/ptypes/timestamp" +import google_rpc "google.golang.org/genproto/googleapis/rpc/status" +import google_type "google.golang.org/genproto/googleapis/type/date" +import google_type1 "google.golang.org/genproto/googleapis/type/dayofweek" +import google_type2 "google.golang.org/genproto/googleapis/type/timeofday" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Options describing which parts of the provided content should be scanned. +type ContentOption int32 + +const ( + // Includes entire content of a file or a data stream. + ContentOption_CONTENT_UNSPECIFIED ContentOption = 0 + // Text content within the data, excluding any metadata. + ContentOption_CONTENT_TEXT ContentOption = 1 + // Images found in the data. + ContentOption_CONTENT_IMAGE ContentOption = 2 +) + +var ContentOption_name = map[int32]string{ + 0: "CONTENT_UNSPECIFIED", + 1: "CONTENT_TEXT", + 2: "CONTENT_IMAGE", +} +var ContentOption_value = map[string]int32{ + "CONTENT_UNSPECIFIED": 0, + "CONTENT_TEXT": 1, + "CONTENT_IMAGE": 2, +} + +func (x ContentOption) String() string { + return proto.EnumName(ContentOption_name, int32(x)) +} +func (ContentOption) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +// Parts of the APIs which use certain infoTypes. +type InfoTypeSupportedBy int32 + +const ( + InfoTypeSupportedBy_ENUM_TYPE_UNSPECIFIED InfoTypeSupportedBy = 0 + // Supported by the inspect operations. + InfoTypeSupportedBy_INSPECT InfoTypeSupportedBy = 1 + // Supported by the risk analysis operations. + InfoTypeSupportedBy_RISK_ANALYSIS InfoTypeSupportedBy = 2 +) + +var InfoTypeSupportedBy_name = map[int32]string{ + 0: "ENUM_TYPE_UNSPECIFIED", + 1: "INSPECT", + 2: "RISK_ANALYSIS", +} +var InfoTypeSupportedBy_value = map[string]int32{ + "ENUM_TYPE_UNSPECIFIED": 0, + "INSPECT": 1, + "RISK_ANALYSIS": 2, +} + +func (x InfoTypeSupportedBy) String() string { + return proto.EnumName(InfoTypeSupportedBy_name, int32(x)) +} +func (InfoTypeSupportedBy) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +// Operators available for comparing the value of fields. +type RelationalOperator int32 + +const ( + RelationalOperator_RELATIONAL_OPERATOR_UNSPECIFIED RelationalOperator = 0 + // Equal. + RelationalOperator_EQUAL_TO RelationalOperator = 1 + // Not equal to. + RelationalOperator_NOT_EQUAL_TO RelationalOperator = 2 + // Greater than. + RelationalOperator_GREATER_THAN RelationalOperator = 3 + // Less than. + RelationalOperator_LESS_THAN RelationalOperator = 4 + // Greater than or equals. + RelationalOperator_GREATER_THAN_OR_EQUALS RelationalOperator = 5 + // Less than or equals. + RelationalOperator_LESS_THAN_OR_EQUALS RelationalOperator = 6 + // Exists + RelationalOperator_EXISTS RelationalOperator = 7 +) + +var RelationalOperator_name = map[int32]string{ + 0: "RELATIONAL_OPERATOR_UNSPECIFIED", + 1: "EQUAL_TO", + 2: "NOT_EQUAL_TO", + 3: "GREATER_THAN", + 4: "LESS_THAN", + 5: "GREATER_THAN_OR_EQUALS", + 6: "LESS_THAN_OR_EQUALS", + 7: "EXISTS", +} +var RelationalOperator_value = map[string]int32{ + "RELATIONAL_OPERATOR_UNSPECIFIED": 0, + "EQUAL_TO": 1, + "NOT_EQUAL_TO": 2, + "GREATER_THAN": 3, + "LESS_THAN": 4, + "GREATER_THAN_OR_EQUALS": 5, + "LESS_THAN_OR_EQUALS": 6, + "EXISTS": 7, +} + +func (x RelationalOperator) String() string { + return proto.EnumName(RelationalOperator_name, int32(x)) +} +func (RelationalOperator) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +// An enum to represent the various type of DLP jobs. +type DlpJobType int32 + +const ( + DlpJobType_DLP_JOB_TYPE_UNSPECIFIED DlpJobType = 0 + // The job inspected Google Cloud for sensitive data. + DlpJobType_INSPECT_JOB DlpJobType = 1 + // The job executed a Risk Analysis computation. + DlpJobType_RISK_ANALYSIS_JOB DlpJobType = 2 +) + +var DlpJobType_name = map[int32]string{ + 0: "DLP_JOB_TYPE_UNSPECIFIED", + 1: "INSPECT_JOB", + 2: "RISK_ANALYSIS_JOB", +} +var DlpJobType_value = map[string]int32{ + "DLP_JOB_TYPE_UNSPECIFIED": 0, + "INSPECT_JOB": 1, + "RISK_ANALYSIS_JOB": 2, +} + +func (x DlpJobType) String() string { + return proto.EnumName(DlpJobType_name, int32(x)) +} +func (DlpJobType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +type ByteContentItem_BytesType int32 + +const ( + ByteContentItem_BYTES_TYPE_UNSPECIFIED ByteContentItem_BytesType = 0 + ByteContentItem_IMAGE_JPEG ByteContentItem_BytesType = 1 + ByteContentItem_IMAGE_BMP ByteContentItem_BytesType = 2 + ByteContentItem_IMAGE_PNG ByteContentItem_BytesType = 3 + ByteContentItem_IMAGE_SVG ByteContentItem_BytesType = 4 + ByteContentItem_TEXT_UTF8 ByteContentItem_BytesType = 5 +) + +var ByteContentItem_BytesType_name = map[int32]string{ + 0: "BYTES_TYPE_UNSPECIFIED", + 1: "IMAGE_JPEG", + 2: "IMAGE_BMP", + 3: "IMAGE_PNG", + 4: "IMAGE_SVG", + 5: "TEXT_UTF8", +} +var ByteContentItem_BytesType_value = map[string]int32{ + "BYTES_TYPE_UNSPECIFIED": 0, + "IMAGE_JPEG": 1, + "IMAGE_BMP": 2, + "IMAGE_PNG": 3, + "IMAGE_SVG": 4, + "TEXT_UTF8": 5, +} + +func (x ByteContentItem_BytesType) String() string { + return proto.EnumName(ByteContentItem_BytesType_name, int32(x)) +} +func (ByteContentItem_BytesType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1, 0} } + +// Predefined schemas for storing findings. +type OutputStorageConfig_OutputSchema int32 + +const ( + OutputStorageConfig_OUTPUT_SCHEMA_UNSPECIFIED OutputStorageConfig_OutputSchema = 0 + // Basic schema including only `info_type`, `quote`, `certainty`, and + // `timestamp`. + OutputStorageConfig_BASIC_COLUMNS OutputStorageConfig_OutputSchema = 1 + // Schema tailored to findings from scanning Google Cloud Storage. + OutputStorageConfig_GCS_COLUMNS OutputStorageConfig_OutputSchema = 2 + // Schema tailored to findings from scanning Google Datastore. + OutputStorageConfig_DATASTORE_COLUMNS OutputStorageConfig_OutputSchema = 3 + // Schema tailored to findings from scanning Google BigQuery. + OutputStorageConfig_BIG_QUERY_COLUMNS OutputStorageConfig_OutputSchema = 4 + // Schema containing all columns. + OutputStorageConfig_ALL_COLUMNS OutputStorageConfig_OutputSchema = 5 +) + +var OutputStorageConfig_OutputSchema_name = map[int32]string{ + 0: "OUTPUT_SCHEMA_UNSPECIFIED", + 1: "BASIC_COLUMNS", + 2: "GCS_COLUMNS", + 3: "DATASTORE_COLUMNS", + 4: "BIG_QUERY_COLUMNS", + 5: "ALL_COLUMNS", +} +var OutputStorageConfig_OutputSchema_value = map[string]int32{ + "OUTPUT_SCHEMA_UNSPECIFIED": 0, + "BASIC_COLUMNS": 1, + "GCS_COLUMNS": 2, + "DATASTORE_COLUMNS": 3, + "BIG_QUERY_COLUMNS": 4, + "ALL_COLUMNS": 5, +} + +func (x OutputStorageConfig_OutputSchema) String() string { + return proto.EnumName(OutputStorageConfig_OutputSchema_name, int32(x)) +} +func (OutputStorageConfig_OutputSchema) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{23, 0} +} + +type TimePartConfig_TimePart int32 + +const ( + TimePartConfig_TIME_PART_UNSPECIFIED TimePartConfig_TimePart = 0 + // [0-9999] + TimePartConfig_YEAR TimePartConfig_TimePart = 1 + // [1-12] + TimePartConfig_MONTH TimePartConfig_TimePart = 2 + // [1-31] + TimePartConfig_DAY_OF_MONTH TimePartConfig_TimePart = 3 + // [1-7] + TimePartConfig_DAY_OF_WEEK TimePartConfig_TimePart = 4 + // [1-52] + TimePartConfig_WEEK_OF_YEAR TimePartConfig_TimePart = 5 + // [0-23] + TimePartConfig_HOUR_OF_DAY TimePartConfig_TimePart = 6 +) + +var TimePartConfig_TimePart_name = map[int32]string{ + 0: "TIME_PART_UNSPECIFIED", + 1: "YEAR", + 2: "MONTH", + 3: "DAY_OF_MONTH", + 4: "DAY_OF_WEEK", + 5: "WEEK_OF_YEAR", + 6: "HOUR_OF_DAY", +} +var TimePartConfig_TimePart_value = map[string]int32{ + "TIME_PART_UNSPECIFIED": 0, + "YEAR": 1, + "MONTH": 2, + "DAY_OF_MONTH": 3, + "DAY_OF_WEEK": 4, + "WEEK_OF_YEAR": 5, + "HOUR_OF_DAY": 6, +} + +func (x TimePartConfig_TimePart) String() string { + return proto.EnumName(TimePartConfig_TimePart_name, int32(x)) +} +func (TimePartConfig_TimePart) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{38, 0} } + +type CharsToIgnore_CommonCharsToIgnore int32 + +const ( + CharsToIgnore_COMMON_CHARS_TO_IGNORE_UNSPECIFIED CharsToIgnore_CommonCharsToIgnore = 0 + // 0-9 + CharsToIgnore_NUMERIC CharsToIgnore_CommonCharsToIgnore = 1 + // A-Z + CharsToIgnore_ALPHA_UPPER_CASE CharsToIgnore_CommonCharsToIgnore = 2 + // a-z + CharsToIgnore_ALPHA_LOWER_CASE CharsToIgnore_CommonCharsToIgnore = 3 + // US Punctuation, one of !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ + CharsToIgnore_PUNCTUATION CharsToIgnore_CommonCharsToIgnore = 4 + // Whitespace character, one of [ \t\n\x0B\f\r] + CharsToIgnore_WHITESPACE CharsToIgnore_CommonCharsToIgnore = 5 +) + +var CharsToIgnore_CommonCharsToIgnore_name = map[int32]string{ + 0: "COMMON_CHARS_TO_IGNORE_UNSPECIFIED", + 1: "NUMERIC", + 2: "ALPHA_UPPER_CASE", + 3: "ALPHA_LOWER_CASE", + 4: "PUNCTUATION", + 5: "WHITESPACE", +} +var CharsToIgnore_CommonCharsToIgnore_value = map[string]int32{ + "COMMON_CHARS_TO_IGNORE_UNSPECIFIED": 0, + "NUMERIC": 1, + "ALPHA_UPPER_CASE": 2, + "ALPHA_LOWER_CASE": 3, + "PUNCTUATION": 4, + "WHITESPACE": 5, +} + +func (x CharsToIgnore_CommonCharsToIgnore) String() string { + return proto.EnumName(CharsToIgnore_CommonCharsToIgnore_name, int32(x)) +} +func (CharsToIgnore_CommonCharsToIgnore) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{43, 0} +} + +// These are commonly used subsets of the alphabet that the FFX mode +// natively supports. In the algorithm, the alphabet is selected using +// the "radix". Therefore each corresponds to particular radix. +type CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet int32 + +const ( + CryptoReplaceFfxFpeConfig_FFX_COMMON_NATIVE_ALPHABET_UNSPECIFIED CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet = 0 + // [0-9] (radix of 10) + CryptoReplaceFfxFpeConfig_NUMERIC CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet = 1 + // [0-9A-F] (radix of 16) + CryptoReplaceFfxFpeConfig_HEXADECIMAL CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet = 2 + // [0-9A-Z] (radix of 36) + CryptoReplaceFfxFpeConfig_UPPER_CASE_ALPHA_NUMERIC CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet = 3 + // [0-9A-Za-z] (radix of 62) + CryptoReplaceFfxFpeConfig_ALPHA_NUMERIC CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet = 4 +) + +var CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet_name = map[int32]string{ + 0: "FFX_COMMON_NATIVE_ALPHABET_UNSPECIFIED", + 1: "NUMERIC", + 2: "HEXADECIMAL", + 3: "UPPER_CASE_ALPHA_NUMERIC", + 4: "ALPHA_NUMERIC", +} +var CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet_value = map[string]int32{ + "FFX_COMMON_NATIVE_ALPHABET_UNSPECIFIED": 0, + "NUMERIC": 1, + "HEXADECIMAL": 2, + "UPPER_CASE_ALPHA_NUMERIC": 3, + "ALPHA_NUMERIC": 4, +} + +func (x CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet) String() string { + return proto.EnumName(CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet_name, int32(x)) +} +func (CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{47, 0} +} + +type RecordCondition_Expressions_LogicalOperator int32 + +const ( + RecordCondition_Expressions_LOGICAL_OPERATOR_UNSPECIFIED RecordCondition_Expressions_LogicalOperator = 0 + RecordCondition_Expressions_AND RecordCondition_Expressions_LogicalOperator = 1 +) + +var RecordCondition_Expressions_LogicalOperator_name = map[int32]string{ + 0: "LOGICAL_OPERATOR_UNSPECIFIED", + 1: "AND", +} +var RecordCondition_Expressions_LogicalOperator_value = map[string]int32{ + "LOGICAL_OPERATOR_UNSPECIFIED": 0, + "AND": 1, +} + +func (x RecordCondition_Expressions_LogicalOperator) String() string { + return proto.EnumName(RecordCondition_Expressions_LogicalOperator_name, int32(x)) +} +func (RecordCondition_Expressions_LogicalOperator) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{57, 2, 0} +} + +// Possible outcomes of transformations. +type TransformationSummary_TransformationResultCode int32 + +const ( + TransformationSummary_TRANSFORMATION_RESULT_CODE_UNSPECIFIED TransformationSummary_TransformationResultCode = 0 + TransformationSummary_SUCCESS TransformationSummary_TransformationResultCode = 1 + TransformationSummary_ERROR TransformationSummary_TransformationResultCode = 2 +) + +var TransformationSummary_TransformationResultCode_name = map[int32]string{ + 0: "TRANSFORMATION_RESULT_CODE_UNSPECIFIED", + 1: "SUCCESS", + 2: "ERROR", +} +var TransformationSummary_TransformationResultCode_value = map[string]int32{ + "TRANSFORMATION_RESULT_CODE_UNSPECIFIED": 0, + "SUCCESS": 1, + "ERROR": 2, +} + +func (x TransformationSummary_TransformationResultCode) String() string { + return proto.EnumName(TransformationSummary_TransformationResultCode_name, int32(x)) +} +func (TransformationSummary_TransformationResultCode) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{59, 0} +} + +// Whether the trigger is currently active. If PAUSED or CANCELLED, no jobs +// will be created with this configuration. The service may automatically +// pause triggers experiencing frequent errors. To restart a job, set the +// status to HEALTHY after correcting user errors. +type JobTrigger_Status int32 + +const ( + JobTrigger_STATUS_UNSPECIFIED JobTrigger_Status = 0 + // Trigger is healthy. + JobTrigger_HEALTHY JobTrigger_Status = 1 + // Trigger is temporarily paused. + JobTrigger_PAUSED JobTrigger_Status = 2 + // Trigger is cancelled and can not be resumed. + JobTrigger_CANCELLED JobTrigger_Status = 3 +) + +var JobTrigger_Status_name = map[int32]string{ + 0: "STATUS_UNSPECIFIED", + 1: "HEALTHY", + 2: "PAUSED", + 3: "CANCELLED", +} +var JobTrigger_Status_value = map[string]int32{ + "STATUS_UNSPECIFIED": 0, + "HEALTHY": 1, + "PAUSED": 2, + "CANCELLED": 3, +} + +func (x JobTrigger_Status) String() string { + return proto.EnumName(JobTrigger_Status_name, int32(x)) +} +func (JobTrigger_Status) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{64, 0} } + +type DlpJob_JobState int32 + +const ( + DlpJob_JOB_STATE_UNSPECIFIED DlpJob_JobState = 0 + // The job has not yet started. + DlpJob_PENDING DlpJob_JobState = 1 + // The job is currently running. + DlpJob_RUNNING DlpJob_JobState = 2 + // The job is no longer running. + DlpJob_DONE DlpJob_JobState = 3 + // The job was canceled before it could complete. + DlpJob_CANCELED DlpJob_JobState = 4 + // The job had an error and did not complete. + DlpJob_FAILED DlpJob_JobState = 5 +) + +var DlpJob_JobState_name = map[int32]string{ + 0: "JOB_STATE_UNSPECIFIED", + 1: "PENDING", + 2: "RUNNING", + 3: "DONE", + 4: "CANCELED", + 5: "FAILED", +} +var DlpJob_JobState_value = map[string]int32{ + "JOB_STATE_UNSPECIFIED": 0, + "PENDING": 1, + "RUNNING": 2, + "DONE": 3, + "CANCELED": 4, + "FAILED": 5, +} + +func (x DlpJob_JobState) String() string { + return proto.EnumName(DlpJob_JobState_name, int32(x)) +} +func (DlpJob_JobState) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{80, 0} } + +// Configuration description of the scanning process. +// When used with redactContent only info_types and min_likelihood are currently +// used. +type InspectConfig struct { + // Restricts what info_types to look for. The values must correspond to + // InfoType values returned by ListInfoTypes or found in documentation. + // Empty info_types runs all enabled detectors. + InfoTypes []*InfoType `protobuf:"bytes,1,rep,name=info_types,json=infoTypes" json:"info_types,omitempty"` + // Only returns findings equal or above this threshold. The default is + // POSSIBLE. + MinLikelihood Likelihood `protobuf:"varint,2,opt,name=min_likelihood,json=minLikelihood,enum=google.privacy.dlp.v2.Likelihood" json:"min_likelihood,omitempty"` + Limits *InspectConfig_FindingLimits `protobuf:"bytes,3,opt,name=limits" json:"limits,omitempty"` + // When true, a contextual quote from the data that triggered a finding is + // included in the response; see Finding.quote. + IncludeQuote bool `protobuf:"varint,4,opt,name=include_quote,json=includeQuote" json:"include_quote,omitempty"` + // When true, excludes type information of the findings. + ExcludeInfoTypes bool `protobuf:"varint,5,opt,name=exclude_info_types,json=excludeInfoTypes" json:"exclude_info_types,omitempty"` + // Custom infoTypes provided by the user. + CustomInfoTypes []*CustomInfoType `protobuf:"bytes,6,rep,name=custom_info_types,json=customInfoTypes" json:"custom_info_types,omitempty"` + // List of options defining data content to scan. + // If empty, text, images, and other content will be included. + ContentOptions []ContentOption `protobuf:"varint,8,rep,packed,name=content_options,json=contentOptions,enum=google.privacy.dlp.v2.ContentOption" json:"content_options,omitempty"` +} + +func (m *InspectConfig) Reset() { *m = InspectConfig{} } +func (m *InspectConfig) String() string { return proto.CompactTextString(m) } +func (*InspectConfig) ProtoMessage() {} +func (*InspectConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *InspectConfig) GetInfoTypes() []*InfoType { + if m != nil { + return m.InfoTypes + } + return nil +} + +func (m *InspectConfig) GetMinLikelihood() Likelihood { + if m != nil { + return m.MinLikelihood + } + return Likelihood_LIKELIHOOD_UNSPECIFIED +} + +func (m *InspectConfig) GetLimits() *InspectConfig_FindingLimits { + if m != nil { + return m.Limits + } + return nil +} + +func (m *InspectConfig) GetIncludeQuote() bool { + if m != nil { + return m.IncludeQuote + } + return false +} + +func (m *InspectConfig) GetExcludeInfoTypes() bool { + if m != nil { + return m.ExcludeInfoTypes + } + return false +} + +func (m *InspectConfig) GetCustomInfoTypes() []*CustomInfoType { + if m != nil { + return m.CustomInfoTypes + } + return nil +} + +func (m *InspectConfig) GetContentOptions() []ContentOption { + if m != nil { + return m.ContentOptions + } + return nil +} + +type InspectConfig_FindingLimits struct { + // Max number of findings that will be returned for each item scanned. + // When set within `InspectDataSourceRequest`, + // the maximum returned is 1000 regardless if this is set higher. + // When set within `InspectContentRequest`, this field is ignored. + MaxFindingsPerItem int32 `protobuf:"varint,1,opt,name=max_findings_per_item,json=maxFindingsPerItem" json:"max_findings_per_item,omitempty"` + // Max number of findings that will be returned per request/job. + // When set within `InspectContentRequest`, the maximum returned is 1000 + // regardless if this is set higher. + MaxFindingsPerRequest int32 `protobuf:"varint,2,opt,name=max_findings_per_request,json=maxFindingsPerRequest" json:"max_findings_per_request,omitempty"` + // Configuration of findings limit given for specified infoTypes. + MaxFindingsPerInfoType []*InspectConfig_FindingLimits_InfoTypeLimit `protobuf:"bytes,3,rep,name=max_findings_per_info_type,json=maxFindingsPerInfoType" json:"max_findings_per_info_type,omitempty"` +} + +func (m *InspectConfig_FindingLimits) Reset() { *m = InspectConfig_FindingLimits{} } +func (m *InspectConfig_FindingLimits) String() string { return proto.CompactTextString(m) } +func (*InspectConfig_FindingLimits) ProtoMessage() {} +func (*InspectConfig_FindingLimits) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 0} } + +func (m *InspectConfig_FindingLimits) GetMaxFindingsPerItem() int32 { + if m != nil { + return m.MaxFindingsPerItem + } + return 0 +} + +func (m *InspectConfig_FindingLimits) GetMaxFindingsPerRequest() int32 { + if m != nil { + return m.MaxFindingsPerRequest + } + return 0 +} + +func (m *InspectConfig_FindingLimits) GetMaxFindingsPerInfoType() []*InspectConfig_FindingLimits_InfoTypeLimit { + if m != nil { + return m.MaxFindingsPerInfoType + } + return nil +} + +// Max findings configuration per infoType, per content item or long +// running DlpJob. +type InspectConfig_FindingLimits_InfoTypeLimit struct { + // Type of information the findings limit applies to. Only one limit per + // info_type should be provided. If InfoTypeLimit does not have an + // info_type, the DLP API applies the limit against all info_types that + // are found but not specified in another InfoTypeLimit. + InfoType *InfoType `protobuf:"bytes,1,opt,name=info_type,json=infoType" json:"info_type,omitempty"` + // Max findings limit for the given infoType. + MaxFindings int32 `protobuf:"varint,2,opt,name=max_findings,json=maxFindings" json:"max_findings,omitempty"` +} + +func (m *InspectConfig_FindingLimits_InfoTypeLimit) Reset() { + *m = InspectConfig_FindingLimits_InfoTypeLimit{} +} +func (m *InspectConfig_FindingLimits_InfoTypeLimit) String() string { return proto.CompactTextString(m) } +func (*InspectConfig_FindingLimits_InfoTypeLimit) ProtoMessage() {} +func (*InspectConfig_FindingLimits_InfoTypeLimit) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{0, 0, 0} +} + +func (m *InspectConfig_FindingLimits_InfoTypeLimit) GetInfoType() *InfoType { + if m != nil { + return m.InfoType + } + return nil +} + +func (m *InspectConfig_FindingLimits_InfoTypeLimit) GetMaxFindings() int32 { + if m != nil { + return m.MaxFindings + } + return 0 +} + +// Container for bytes to inspect or redact. +type ByteContentItem struct { + // The type of data stored in the bytes string. Default will be TEXT_UTF8. + Type ByteContentItem_BytesType `protobuf:"varint,1,opt,name=type,enum=google.privacy.dlp.v2.ByteContentItem_BytesType" json:"type,omitempty"` + // Content data to inspect or redact. + Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` +} + +func (m *ByteContentItem) Reset() { *m = ByteContentItem{} } +func (m *ByteContentItem) String() string { return proto.CompactTextString(m) } +func (*ByteContentItem) ProtoMessage() {} +func (*ByteContentItem) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *ByteContentItem) GetType() ByteContentItem_BytesType { + if m != nil { + return m.Type + } + return ByteContentItem_BYTES_TYPE_UNSPECIFIED +} + +func (m *ByteContentItem) GetData() []byte { + if m != nil { + return m.Data + } + return nil +} + +// Container structure for the content to inspect. +type ContentItem struct { + // Data of the item either in the byte array or UTF-8 string form, or table. + // + // Types that are valid to be assigned to DataItem: + // *ContentItem_Value + // *ContentItem_Table + // *ContentItem_ByteItem + DataItem isContentItem_DataItem `protobuf_oneof:"data_item"` +} + +func (m *ContentItem) Reset() { *m = ContentItem{} } +func (m *ContentItem) String() string { return proto.CompactTextString(m) } +func (*ContentItem) ProtoMessage() {} +func (*ContentItem) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +type isContentItem_DataItem interface { + isContentItem_DataItem() +} + +type ContentItem_Value struct { + Value string `protobuf:"bytes,3,opt,name=value,oneof"` +} +type ContentItem_Table struct { + Table *Table `protobuf:"bytes,4,opt,name=table,oneof"` +} +type ContentItem_ByteItem struct { + ByteItem *ByteContentItem `protobuf:"bytes,5,opt,name=byte_item,json=byteItem,oneof"` +} + +func (*ContentItem_Value) isContentItem_DataItem() {} +func (*ContentItem_Table) isContentItem_DataItem() {} +func (*ContentItem_ByteItem) isContentItem_DataItem() {} + +func (m *ContentItem) GetDataItem() isContentItem_DataItem { + if m != nil { + return m.DataItem + } + return nil +} + +func (m *ContentItem) GetValue() string { + if x, ok := m.GetDataItem().(*ContentItem_Value); ok { + return x.Value + } + return "" +} + +func (m *ContentItem) GetTable() *Table { + if x, ok := m.GetDataItem().(*ContentItem_Table); ok { + return x.Table + } + return nil +} + +func (m *ContentItem) GetByteItem() *ByteContentItem { + if x, ok := m.GetDataItem().(*ContentItem_ByteItem); ok { + return x.ByteItem + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ContentItem) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _ContentItem_OneofMarshaler, _ContentItem_OneofUnmarshaler, _ContentItem_OneofSizer, []interface{}{ + (*ContentItem_Value)(nil), + (*ContentItem_Table)(nil), + (*ContentItem_ByteItem)(nil), + } +} + +func _ContentItem_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ContentItem) + // data_item + switch x := m.DataItem.(type) { + case *ContentItem_Value: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Value) + case *ContentItem_Table: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Table); err != nil { + return err + } + case *ContentItem_ByteItem: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ByteItem); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("ContentItem.DataItem has unexpected type %T", x) + } + return nil +} + +func _ContentItem_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ContentItem) + switch tag { + case 3: // data_item.value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.DataItem = &ContentItem_Value{x} + return true, err + case 4: // data_item.table + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Table) + err := b.DecodeMessage(msg) + m.DataItem = &ContentItem_Table{msg} + return true, err + case 5: // data_item.byte_item + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ByteContentItem) + err := b.DecodeMessage(msg) + m.DataItem = &ContentItem_ByteItem{msg} + return true, err + default: + return false, nil + } +} + +func _ContentItem_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ContentItem) + // data_item + switch x := m.DataItem.(type) { + case *ContentItem_Value: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Value))) + n += len(x.Value) + case *ContentItem_Table: + s := proto.Size(x.Table) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *ContentItem_ByteItem: + s := proto.Size(x.ByteItem) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Structured content to inspect. Up to 50,000 `Value`s per request allowed. +type Table struct { + Headers []*FieldId `protobuf:"bytes,1,rep,name=headers" json:"headers,omitempty"` + Rows []*Table_Row `protobuf:"bytes,2,rep,name=rows" json:"rows,omitempty"` +} + +func (m *Table) Reset() { *m = Table{} } +func (m *Table) String() string { return proto.CompactTextString(m) } +func (*Table) ProtoMessage() {} +func (*Table) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *Table) GetHeaders() []*FieldId { + if m != nil { + return m.Headers + } + return nil +} + +func (m *Table) GetRows() []*Table_Row { + if m != nil { + return m.Rows + } + return nil +} + +type Table_Row struct { + Values []*Value `protobuf:"bytes,1,rep,name=values" json:"values,omitempty"` +} + +func (m *Table_Row) Reset() { *m = Table_Row{} } +func (m *Table_Row) String() string { return proto.CompactTextString(m) } +func (*Table_Row) ProtoMessage() {} +func (*Table_Row) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3, 0} } + +func (m *Table_Row) GetValues() []*Value { + if m != nil { + return m.Values + } + return nil +} + +// All the findings for a single scanned item. +type InspectResult struct { + // List of findings for an item. + Findings []*Finding `protobuf:"bytes,1,rep,name=findings" json:"findings,omitempty"` + // If true, then this item might have more findings than were returned, + // and the findings returned are an arbitrary subset of all findings. + // The findings list might be truncated because the input items were too + // large, or because the server reached the maximum amount of resources + // allowed for a single API call. For best results, divide the input into + // smaller batches. + FindingsTruncated bool `protobuf:"varint,2,opt,name=findings_truncated,json=findingsTruncated" json:"findings_truncated,omitempty"` +} + +func (m *InspectResult) Reset() { *m = InspectResult{} } +func (m *InspectResult) String() string { return proto.CompactTextString(m) } +func (*InspectResult) ProtoMessage() {} +func (*InspectResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *InspectResult) GetFindings() []*Finding { + if m != nil { + return m.Findings + } + return nil +} + +func (m *InspectResult) GetFindingsTruncated() bool { + if m != nil { + return m.FindingsTruncated + } + return false +} + +// Represents a piece of potentially sensitive content. +type Finding struct { + // The content that was found. Even if the content is not textual, it + // may be converted to a textual representation here. + // Provided if requested by the `InspectConfig` and the finding is + // less than or equal to 4096 bytes long. If the finding exceeds 4096 bytes + // in length, the quote may be omitted. + Quote string `protobuf:"bytes,1,opt,name=quote" json:"quote,omitempty"` + // The type of content that might have been found. + // Provided if requested by the `InspectConfig`. + InfoType *InfoType `protobuf:"bytes,2,opt,name=info_type,json=infoType" json:"info_type,omitempty"` + // Estimate of how likely it is that the `info_type` is correct. + Likelihood Likelihood `protobuf:"varint,3,opt,name=likelihood,enum=google.privacy.dlp.v2.Likelihood" json:"likelihood,omitempty"` + // Where the content was found. + Location *Location `protobuf:"bytes,4,opt,name=location" json:"location,omitempty"` + // Timestamp when finding was detected. + CreateTime *google_protobuf1.Timestamp `protobuf:"bytes,6,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // Contains data parsed from quotes. Only populated if include_quote was set + // to true and a supported infoType was requested. Currently supported + // infoTypes: DATE, DATE_OF_BIRTH and TIME. + QuoteInfo *QuoteInfo `protobuf:"bytes,7,opt,name=quote_info,json=quoteInfo" json:"quote_info,omitempty"` +} + +func (m *Finding) Reset() { *m = Finding{} } +func (m *Finding) String() string { return proto.CompactTextString(m) } +func (*Finding) ProtoMessage() {} +func (*Finding) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *Finding) GetQuote() string { + if m != nil { + return m.Quote + } + return "" +} + +func (m *Finding) GetInfoType() *InfoType { + if m != nil { + return m.InfoType + } + return nil +} + +func (m *Finding) GetLikelihood() Likelihood { + if m != nil { + return m.Likelihood + } + return Likelihood_LIKELIHOOD_UNSPECIFIED +} + +func (m *Finding) GetLocation() *Location { + if m != nil { + return m.Location + } + return nil +} + +func (m *Finding) GetCreateTime() *google_protobuf1.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *Finding) GetQuoteInfo() *QuoteInfo { + if m != nil { + return m.QuoteInfo + } + return nil +} + +// Specifies the location of the finding. +type Location struct { + // Zero-based byte offsets delimiting the finding. + // These are relative to the finding's containing element. + // Note that when the content is not textual, this references + // the UTF-8 encoded textual representation of the content. + // Omitted if content is an image. + ByteRange *Range `protobuf:"bytes,1,opt,name=byte_range,json=byteRange" json:"byte_range,omitempty"` + // Unicode character offsets delimiting the finding. + // These are relative to the finding's containing element. + // Provided when the content is text. + CodepointRange *Range `protobuf:"bytes,2,opt,name=codepoint_range,json=codepointRange" json:"codepoint_range,omitempty"` + // List of nested objects pointing to the precise location of the finding + // within the file or record. + ContentLocations []*ContentLocation `protobuf:"bytes,7,rep,name=content_locations,json=contentLocations" json:"content_locations,omitempty"` +} + +func (m *Location) Reset() { *m = Location{} } +func (m *Location) String() string { return proto.CompactTextString(m) } +func (*Location) ProtoMessage() {} +func (*Location) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *Location) GetByteRange() *Range { + if m != nil { + return m.ByteRange + } + return nil +} + +func (m *Location) GetCodepointRange() *Range { + if m != nil { + return m.CodepointRange + } + return nil +} + +func (m *Location) GetContentLocations() []*ContentLocation { + if m != nil { + return m.ContentLocations + } + return nil +} + +// Findings container location data. +type ContentLocation struct { + // Name of the container where the finding is located. + // The top level name is the source file name or table name. Nested names + // could be absent if the embedded object has no string identifier + // (for an example an image contained within a document). + ContainerName string `protobuf:"bytes,1,opt,name=container_name,json=containerName" json:"container_name,omitempty"` + // Type of the container within the file with location of the finding. + // + // Types that are valid to be assigned to Location: + // *ContentLocation_RecordLocation + // *ContentLocation_ImageLocation + // *ContentLocation_DocumentLocation + Location isContentLocation_Location `protobuf_oneof:"location"` + // Findings container modification timestamp, if applicable. + // For Google Cloud Storage contains last file modification timestamp. + // For BigQuery table contains last_modified_time property. + // For Datastore - not populated. + ContainerTimestamp *google_protobuf1.Timestamp `protobuf:"bytes,6,opt,name=container_timestamp,json=containerTimestamp" json:"container_timestamp,omitempty"` + // Findings container version, if available + // ("generation" for Google Cloud Storage). + ContainerVersion string `protobuf:"bytes,7,opt,name=container_version,json=containerVersion" json:"container_version,omitempty"` +} + +func (m *ContentLocation) Reset() { *m = ContentLocation{} } +func (m *ContentLocation) String() string { return proto.CompactTextString(m) } +func (*ContentLocation) ProtoMessage() {} +func (*ContentLocation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +type isContentLocation_Location interface { + isContentLocation_Location() +} + +type ContentLocation_RecordLocation struct { + RecordLocation *RecordLocation `protobuf:"bytes,2,opt,name=record_location,json=recordLocation,oneof"` +} +type ContentLocation_ImageLocation struct { + ImageLocation *ImageLocation `protobuf:"bytes,3,opt,name=image_location,json=imageLocation,oneof"` +} +type ContentLocation_DocumentLocation struct { + DocumentLocation *DocumentLocation `protobuf:"bytes,5,opt,name=document_location,json=documentLocation,oneof"` +} + +func (*ContentLocation_RecordLocation) isContentLocation_Location() {} +func (*ContentLocation_ImageLocation) isContentLocation_Location() {} +func (*ContentLocation_DocumentLocation) isContentLocation_Location() {} + +func (m *ContentLocation) GetLocation() isContentLocation_Location { + if m != nil { + return m.Location + } + return nil +} + +func (m *ContentLocation) GetContainerName() string { + if m != nil { + return m.ContainerName + } + return "" +} + +func (m *ContentLocation) GetRecordLocation() *RecordLocation { + if x, ok := m.GetLocation().(*ContentLocation_RecordLocation); ok { + return x.RecordLocation + } + return nil +} + +func (m *ContentLocation) GetImageLocation() *ImageLocation { + if x, ok := m.GetLocation().(*ContentLocation_ImageLocation); ok { + return x.ImageLocation + } + return nil +} + +func (m *ContentLocation) GetDocumentLocation() *DocumentLocation { + if x, ok := m.GetLocation().(*ContentLocation_DocumentLocation); ok { + return x.DocumentLocation + } + return nil +} + +func (m *ContentLocation) GetContainerTimestamp() *google_protobuf1.Timestamp { + if m != nil { + return m.ContainerTimestamp + } + return nil +} + +func (m *ContentLocation) GetContainerVersion() string { + if m != nil { + return m.ContainerVersion + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ContentLocation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _ContentLocation_OneofMarshaler, _ContentLocation_OneofUnmarshaler, _ContentLocation_OneofSizer, []interface{}{ + (*ContentLocation_RecordLocation)(nil), + (*ContentLocation_ImageLocation)(nil), + (*ContentLocation_DocumentLocation)(nil), + } +} + +func _ContentLocation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ContentLocation) + // location + switch x := m.Location.(type) { + case *ContentLocation_RecordLocation: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RecordLocation); err != nil { + return err + } + case *ContentLocation_ImageLocation: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ImageLocation); err != nil { + return err + } + case *ContentLocation_DocumentLocation: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DocumentLocation); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("ContentLocation.Location has unexpected type %T", x) + } + return nil +} + +func _ContentLocation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ContentLocation) + switch tag { + case 2: // location.record_location + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(RecordLocation) + err := b.DecodeMessage(msg) + m.Location = &ContentLocation_RecordLocation{msg} + return true, err + case 3: // location.image_location + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ImageLocation) + err := b.DecodeMessage(msg) + m.Location = &ContentLocation_ImageLocation{msg} + return true, err + case 5: // location.document_location + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(DocumentLocation) + err := b.DecodeMessage(msg) + m.Location = &ContentLocation_DocumentLocation{msg} + return true, err + default: + return false, nil + } +} + +func _ContentLocation_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ContentLocation) + // location + switch x := m.Location.(type) { + case *ContentLocation_RecordLocation: + s := proto.Size(x.RecordLocation) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *ContentLocation_ImageLocation: + s := proto.Size(x.ImageLocation) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *ContentLocation_DocumentLocation: + s := proto.Size(x.DocumentLocation) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Location of a finding within a document. +type DocumentLocation struct { + // Offset of the line, from the beginning of the file, where the finding + // is located. + FileOffset int64 `protobuf:"varint,1,opt,name=file_offset,json=fileOffset" json:"file_offset,omitempty"` +} + +func (m *DocumentLocation) Reset() { *m = DocumentLocation{} } +func (m *DocumentLocation) String() string { return proto.CompactTextString(m) } +func (*DocumentLocation) ProtoMessage() {} +func (*DocumentLocation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *DocumentLocation) GetFileOffset() int64 { + if m != nil { + return m.FileOffset + } + return 0 +} + +// Location of a finding within a row or record. +type RecordLocation struct { + // Key of the finding. + RecordKey *RecordKey `protobuf:"bytes,1,opt,name=record_key,json=recordKey" json:"record_key,omitempty"` + // Field id of the field containing the finding. + FieldId *FieldId `protobuf:"bytes,2,opt,name=field_id,json=fieldId" json:"field_id,omitempty"` + // Location within a `ContentItem.Table`. + TableLocation *TableLocation `protobuf:"bytes,3,opt,name=table_location,json=tableLocation" json:"table_location,omitempty"` +} + +func (m *RecordLocation) Reset() { *m = RecordLocation{} } +func (m *RecordLocation) String() string { return proto.CompactTextString(m) } +func (*RecordLocation) ProtoMessage() {} +func (*RecordLocation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *RecordLocation) GetRecordKey() *RecordKey { + if m != nil { + return m.RecordKey + } + return nil +} + +func (m *RecordLocation) GetFieldId() *FieldId { + if m != nil { + return m.FieldId + } + return nil +} + +func (m *RecordLocation) GetTableLocation() *TableLocation { + if m != nil { + return m.TableLocation + } + return nil +} + +// Location of a finding within a table. +type TableLocation struct { + // The zero-based index of the row where the finding is located. + RowIndex int64 `protobuf:"varint,1,opt,name=row_index,json=rowIndex" json:"row_index,omitempty"` +} + +func (m *TableLocation) Reset() { *m = TableLocation{} } +func (m *TableLocation) String() string { return proto.CompactTextString(m) } +func (*TableLocation) ProtoMessage() {} +func (*TableLocation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *TableLocation) GetRowIndex() int64 { + if m != nil { + return m.RowIndex + } + return 0 +} + +// Generic half-open interval [start, end) +type Range struct { + // Index of the first character of the range (inclusive). + Start int64 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` + // Index of the last character of the range (exclusive). + End int64 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` +} + +func (m *Range) Reset() { *m = Range{} } +func (m *Range) String() string { return proto.CompactTextString(m) } +func (*Range) ProtoMessage() {} +func (*Range) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *Range) GetStart() int64 { + if m != nil { + return m.Start + } + return 0 +} + +func (m *Range) GetEnd() int64 { + if m != nil { + return m.End + } + return 0 +} + +// Location of the finding within an image. +type ImageLocation struct { + // Bounding boxes locating the pixels within the image containing the finding. + BoundingBoxes []*BoundingBox `protobuf:"bytes,1,rep,name=bounding_boxes,json=boundingBoxes" json:"bounding_boxes,omitempty"` +} + +func (m *ImageLocation) Reset() { *m = ImageLocation{} } +func (m *ImageLocation) String() string { return proto.CompactTextString(m) } +func (*ImageLocation) ProtoMessage() {} +func (*ImageLocation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *ImageLocation) GetBoundingBoxes() []*BoundingBox { + if m != nil { + return m.BoundingBoxes + } + return nil +} + +// Bounding box encompassing detected text within an image. +type BoundingBox struct { + // Top coordinate of the bounding box. (0,0) is upper left. + Top int32 `protobuf:"varint,1,opt,name=top" json:"top,omitempty"` + // Left coordinate of the bounding box. (0,0) is upper left. + Left int32 `protobuf:"varint,2,opt,name=left" json:"left,omitempty"` + // Width of the bounding box in pixels. + Width int32 `protobuf:"varint,3,opt,name=width" json:"width,omitempty"` + // Height of the bounding box in pixels. + Height int32 `protobuf:"varint,4,opt,name=height" json:"height,omitempty"` +} + +func (m *BoundingBox) Reset() { *m = BoundingBox{} } +func (m *BoundingBox) String() string { return proto.CompactTextString(m) } +func (*BoundingBox) ProtoMessage() {} +func (*BoundingBox) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +func (m *BoundingBox) GetTop() int32 { + if m != nil { + return m.Top + } + return 0 +} + +func (m *BoundingBox) GetLeft() int32 { + if m != nil { + return m.Left + } + return 0 +} + +func (m *BoundingBox) GetWidth() int32 { + if m != nil { + return m.Width + } + return 0 +} + +func (m *BoundingBox) GetHeight() int32 { + if m != nil { + return m.Height + } + return 0 +} + +// Request to search for potentially sensitive info in a list of items +// and replace it with a default or provided content. +type RedactImageRequest struct { + // The parent resource name, for example projects/my-project-id. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Configuration for the inspector. + InspectConfig *InspectConfig `protobuf:"bytes,2,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"` + // The configuration for specifying what content to redact from images. + ImageRedactionConfigs []*RedactImageRequest_ImageRedactionConfig `protobuf:"bytes,5,rep,name=image_redaction_configs,json=imageRedactionConfigs" json:"image_redaction_configs,omitempty"` + // The content must be PNG, JPEG, SVG or BMP. + ByteItem *ByteContentItem `protobuf:"bytes,7,opt,name=byte_item,json=byteItem" json:"byte_item,omitempty"` +} + +func (m *RedactImageRequest) Reset() { *m = RedactImageRequest{} } +func (m *RedactImageRequest) String() string { return proto.CompactTextString(m) } +func (*RedactImageRequest) ProtoMessage() {} +func (*RedactImageRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +func (m *RedactImageRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *RedactImageRequest) GetInspectConfig() *InspectConfig { + if m != nil { + return m.InspectConfig + } + return nil +} + +func (m *RedactImageRequest) GetImageRedactionConfigs() []*RedactImageRequest_ImageRedactionConfig { + if m != nil { + return m.ImageRedactionConfigs + } + return nil +} + +func (m *RedactImageRequest) GetByteItem() *ByteContentItem { + if m != nil { + return m.ByteItem + } + return nil +} + +// Configuration for determining how redaction of images should occur. +type RedactImageRequest_ImageRedactionConfig struct { + // Type of information to redact from images. + // + // Types that are valid to be assigned to Target: + // *RedactImageRequest_ImageRedactionConfig_InfoType + // *RedactImageRequest_ImageRedactionConfig_RedactAllText + Target isRedactImageRequest_ImageRedactionConfig_Target `protobuf_oneof:"target"` + // The color to use when redacting content from an image. If not specified, + // the default is black. + RedactionColor *Color `protobuf:"bytes,3,opt,name=redaction_color,json=redactionColor" json:"redaction_color,omitempty"` +} + +func (m *RedactImageRequest_ImageRedactionConfig) Reset() { + *m = RedactImageRequest_ImageRedactionConfig{} +} +func (m *RedactImageRequest_ImageRedactionConfig) String() string { return proto.CompactTextString(m) } +func (*RedactImageRequest_ImageRedactionConfig) ProtoMessage() {} +func (*RedactImageRequest_ImageRedactionConfig) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{14, 0} +} + +type isRedactImageRequest_ImageRedactionConfig_Target interface { + isRedactImageRequest_ImageRedactionConfig_Target() +} + +type RedactImageRequest_ImageRedactionConfig_InfoType struct { + InfoType *InfoType `protobuf:"bytes,1,opt,name=info_type,json=infoType,oneof"` +} +type RedactImageRequest_ImageRedactionConfig_RedactAllText struct { + RedactAllText bool `protobuf:"varint,2,opt,name=redact_all_text,json=redactAllText,oneof"` +} + +func (*RedactImageRequest_ImageRedactionConfig_InfoType) isRedactImageRequest_ImageRedactionConfig_Target() { +} +func (*RedactImageRequest_ImageRedactionConfig_RedactAllText) isRedactImageRequest_ImageRedactionConfig_Target() { +} + +func (m *RedactImageRequest_ImageRedactionConfig) GetTarget() isRedactImageRequest_ImageRedactionConfig_Target { + if m != nil { + return m.Target + } + return nil +} + +func (m *RedactImageRequest_ImageRedactionConfig) GetInfoType() *InfoType { + if x, ok := m.GetTarget().(*RedactImageRequest_ImageRedactionConfig_InfoType); ok { + return x.InfoType + } + return nil +} + +func (m *RedactImageRequest_ImageRedactionConfig) GetRedactAllText() bool { + if x, ok := m.GetTarget().(*RedactImageRequest_ImageRedactionConfig_RedactAllText); ok { + return x.RedactAllText + } + return false +} + +func (m *RedactImageRequest_ImageRedactionConfig) GetRedactionColor() *Color { + if m != nil { + return m.RedactionColor + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*RedactImageRequest_ImageRedactionConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _RedactImageRequest_ImageRedactionConfig_OneofMarshaler, _RedactImageRequest_ImageRedactionConfig_OneofUnmarshaler, _RedactImageRequest_ImageRedactionConfig_OneofSizer, []interface{}{ + (*RedactImageRequest_ImageRedactionConfig_InfoType)(nil), + (*RedactImageRequest_ImageRedactionConfig_RedactAllText)(nil), + } +} + +func _RedactImageRequest_ImageRedactionConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*RedactImageRequest_ImageRedactionConfig) + // target + switch x := m.Target.(type) { + case *RedactImageRequest_ImageRedactionConfig_InfoType: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.InfoType); err != nil { + return err + } + case *RedactImageRequest_ImageRedactionConfig_RedactAllText: + t := uint64(0) + if x.RedactAllText { + t = 1 + } + b.EncodeVarint(2<<3 | proto.WireVarint) + b.EncodeVarint(t) + case nil: + default: + return fmt.Errorf("RedactImageRequest_ImageRedactionConfig.Target has unexpected type %T", x) + } + return nil +} + +func _RedactImageRequest_ImageRedactionConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*RedactImageRequest_ImageRedactionConfig) + switch tag { + case 1: // target.info_type + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(InfoType) + err := b.DecodeMessage(msg) + m.Target = &RedactImageRequest_ImageRedactionConfig_InfoType{msg} + return true, err + case 2: // target.redact_all_text + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Target = &RedactImageRequest_ImageRedactionConfig_RedactAllText{x != 0} + return true, err + default: + return false, nil + } +} + +func _RedactImageRequest_ImageRedactionConfig_OneofSizer(msg proto.Message) (n int) { + m := msg.(*RedactImageRequest_ImageRedactionConfig) + // target + switch x := m.Target.(type) { + case *RedactImageRequest_ImageRedactionConfig_InfoType: + s := proto.Size(x.InfoType) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *RedactImageRequest_ImageRedactionConfig_RedactAllText: + n += proto.SizeVarint(2<<3 | proto.WireVarint) + n += 1 + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Represents a color in the RGB color space. +type Color struct { + // The amount of red in the color as a value in the interval [0, 1]. + Red float32 `protobuf:"fixed32,1,opt,name=red" json:"red,omitempty"` + // The amount of green in the color as a value in the interval [0, 1]. + Green float32 `protobuf:"fixed32,2,opt,name=green" json:"green,omitempty"` + // The amount of blue in the color as a value in the interval [0, 1]. + Blue float32 `protobuf:"fixed32,3,opt,name=blue" json:"blue,omitempty"` +} + +func (m *Color) Reset() { *m = Color{} } +func (m *Color) String() string { return proto.CompactTextString(m) } +func (*Color) ProtoMessage() {} +func (*Color) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +func (m *Color) GetRed() float32 { + if m != nil { + return m.Red + } + return 0 +} + +func (m *Color) GetGreen() float32 { + if m != nil { + return m.Green + } + return 0 +} + +func (m *Color) GetBlue() float32 { + if m != nil { + return m.Blue + } + return 0 +} + +// Results of redacting an image. +type RedactImageResponse struct { + // The redacted image. The type will be the same as the original image. + RedactedImage []byte `protobuf:"bytes,1,opt,name=redacted_image,json=redactedImage,proto3" json:"redacted_image,omitempty"` + // If an image was being inspected and the InspectConfig's include_quote was + // set to true, then this field will include all text, if any, that was found + // in the image. + ExtractedText string `protobuf:"bytes,2,opt,name=extracted_text,json=extractedText" json:"extracted_text,omitempty"` +} + +func (m *RedactImageResponse) Reset() { *m = RedactImageResponse{} } +func (m *RedactImageResponse) String() string { return proto.CompactTextString(m) } +func (*RedactImageResponse) ProtoMessage() {} +func (*RedactImageResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } + +func (m *RedactImageResponse) GetRedactedImage() []byte { + if m != nil { + return m.RedactedImage + } + return nil +} + +func (m *RedactImageResponse) GetExtractedText() string { + if m != nil { + return m.ExtractedText + } + return "" +} + +// Request to de-identify a list of items. +type DeidentifyContentRequest struct { + // The parent resource name, for example projects/my-project-id. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Configuration for the de-identification of the content item. + // Items specified here will override the template referenced by the + // deidentify_template_name argument. + DeidentifyConfig *DeidentifyConfig `protobuf:"bytes,2,opt,name=deidentify_config,json=deidentifyConfig" json:"deidentify_config,omitempty"` + // Configuration for the inspector. + // Items specified here will override the template referenced by the + // inspect_template_name argument. + InspectConfig *InspectConfig `protobuf:"bytes,3,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"` + // The item to de-identify. Will be treated as text. + Item *ContentItem `protobuf:"bytes,4,opt,name=item" json:"item,omitempty"` + // Optional template to use. Any configuration directly specified in + // inspect_config will override those set in the template. Singular fields + // that are set in this request will replace their corresponding fields in the + // template. Repeated fields are appended. Singular sub-messages and groups + // are recursively merged. + InspectTemplateName string `protobuf:"bytes,5,opt,name=inspect_template_name,json=inspectTemplateName" json:"inspect_template_name,omitempty"` + // Optional template to use. Any configuration directly specified in + // deidentify_config will override those set in the template. Singular fields + // that are set in this request will replace their corresponding fields in the + // template. Repeated fields are appended. Singular sub-messages and groups + // are recursively merged. + DeidentifyTemplateName string `protobuf:"bytes,6,opt,name=deidentify_template_name,json=deidentifyTemplateName" json:"deidentify_template_name,omitempty"` +} + +func (m *DeidentifyContentRequest) Reset() { *m = DeidentifyContentRequest{} } +func (m *DeidentifyContentRequest) String() string { return proto.CompactTextString(m) } +func (*DeidentifyContentRequest) ProtoMessage() {} +func (*DeidentifyContentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } + +func (m *DeidentifyContentRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *DeidentifyContentRequest) GetDeidentifyConfig() *DeidentifyConfig { + if m != nil { + return m.DeidentifyConfig + } + return nil +} + +func (m *DeidentifyContentRequest) GetInspectConfig() *InspectConfig { + if m != nil { + return m.InspectConfig + } + return nil +} + +func (m *DeidentifyContentRequest) GetItem() *ContentItem { + if m != nil { + return m.Item + } + return nil +} + +func (m *DeidentifyContentRequest) GetInspectTemplateName() string { + if m != nil { + return m.InspectTemplateName + } + return "" +} + +func (m *DeidentifyContentRequest) GetDeidentifyTemplateName() string { + if m != nil { + return m.DeidentifyTemplateName + } + return "" +} + +// Results of de-identifying a ContentItem. +type DeidentifyContentResponse struct { + // The de-identified item. + Item *ContentItem `protobuf:"bytes,1,opt,name=item" json:"item,omitempty"` + // An overview of the changes that were made on the `item`. + Overview *TransformationOverview `protobuf:"bytes,2,opt,name=overview" json:"overview,omitempty"` +} + +func (m *DeidentifyContentResponse) Reset() { *m = DeidentifyContentResponse{} } +func (m *DeidentifyContentResponse) String() string { return proto.CompactTextString(m) } +func (*DeidentifyContentResponse) ProtoMessage() {} +func (*DeidentifyContentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } + +func (m *DeidentifyContentResponse) GetItem() *ContentItem { + if m != nil { + return m.Item + } + return nil +} + +func (m *DeidentifyContentResponse) GetOverview() *TransformationOverview { + if m != nil { + return m.Overview + } + return nil +} + +// Request to re-identify an item. +type ReidentifyContentRequest struct { + // The parent resource name. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Configuration for the re-identification of the content item. + // This field shares the same proto message type that is used for + // de-identification, however its usage here is for the reversal of the + // previous de-identification. Re-identification is performed by examining + // the transformations used to de-identify the items and executing the + // reverse. This requires that only reversible transformations + // be provided here. The reversible transformations are: + // + // - `CryptoReplaceFfxFpeConfig` + ReidentifyConfig *DeidentifyConfig `protobuf:"bytes,2,opt,name=reidentify_config,json=reidentifyConfig" json:"reidentify_config,omitempty"` + // Configuration for the inspector. + InspectConfig *InspectConfig `protobuf:"bytes,3,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"` + // The item to re-identify. Will be treated as text. + Item *ContentItem `protobuf:"bytes,4,opt,name=item" json:"item,omitempty"` + // Optional template to use. Any configuration directly specified in + // `inspect_config` will override those set in the template. Singular fields + // that are set in this request will replace their corresponding fields in the + // template. Repeated fields are appended. Singular sub-messages and groups + // are recursively merged. + InspectTemplateName string `protobuf:"bytes,5,opt,name=inspect_template_name,json=inspectTemplateName" json:"inspect_template_name,omitempty"` + // Optional template to use. References an instance of `DeidentifyTemplate`. + // Any configuration directly specified in `reidentify_config` or + // `inspect_config` will override those set in the template. Singular fields + // that are set in this request will replace their corresponding fields in the + // template. Repeated fields are appended. Singular sub-messages and groups + // are recursively merged. + ReidentifyTemplateName string `protobuf:"bytes,6,opt,name=reidentify_template_name,json=reidentifyTemplateName" json:"reidentify_template_name,omitempty"` +} + +func (m *ReidentifyContentRequest) Reset() { *m = ReidentifyContentRequest{} } +func (m *ReidentifyContentRequest) String() string { return proto.CompactTextString(m) } +func (*ReidentifyContentRequest) ProtoMessage() {} +func (*ReidentifyContentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } + +func (m *ReidentifyContentRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ReidentifyContentRequest) GetReidentifyConfig() *DeidentifyConfig { + if m != nil { + return m.ReidentifyConfig + } + return nil +} + +func (m *ReidentifyContentRequest) GetInspectConfig() *InspectConfig { + if m != nil { + return m.InspectConfig + } + return nil +} + +func (m *ReidentifyContentRequest) GetItem() *ContentItem { + if m != nil { + return m.Item + } + return nil +} + +func (m *ReidentifyContentRequest) GetInspectTemplateName() string { + if m != nil { + return m.InspectTemplateName + } + return "" +} + +func (m *ReidentifyContentRequest) GetReidentifyTemplateName() string { + if m != nil { + return m.ReidentifyTemplateName + } + return "" +} + +// Results of re-identifying a item. +type ReidentifyContentResponse struct { + // The re-identified item. + Item *ContentItem `protobuf:"bytes,1,opt,name=item" json:"item,omitempty"` + // An overview of the changes that were made to the `item`. + Overview *TransformationOverview `protobuf:"bytes,2,opt,name=overview" json:"overview,omitempty"` +} + +func (m *ReidentifyContentResponse) Reset() { *m = ReidentifyContentResponse{} } +func (m *ReidentifyContentResponse) String() string { return proto.CompactTextString(m) } +func (*ReidentifyContentResponse) ProtoMessage() {} +func (*ReidentifyContentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } + +func (m *ReidentifyContentResponse) GetItem() *ContentItem { + if m != nil { + return m.Item + } + return nil +} + +func (m *ReidentifyContentResponse) GetOverview() *TransformationOverview { + if m != nil { + return m.Overview + } + return nil +} + +// Request to search for potentially sensitive info in a ContentItem. +type InspectContentRequest struct { + // The parent resource name, for example projects/my-project-id. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Configuration for the inspector. What specified here will override + // the template referenced by the inspect_template_name argument. + InspectConfig *InspectConfig `protobuf:"bytes,2,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"` + // The item to inspect. + Item *ContentItem `protobuf:"bytes,3,opt,name=item" json:"item,omitempty"` + // Optional template to use. Any configuration directly specified in + // inspect_config will override those set in the template. Singular fields + // that are set in this request will replace their corresponding fields in the + // template. Repeated fields are appended. Singular sub-messages and groups + // are recursively merged. + InspectTemplateName string `protobuf:"bytes,4,opt,name=inspect_template_name,json=inspectTemplateName" json:"inspect_template_name,omitempty"` +} + +func (m *InspectContentRequest) Reset() { *m = InspectContentRequest{} } +func (m *InspectContentRequest) String() string { return proto.CompactTextString(m) } +func (*InspectContentRequest) ProtoMessage() {} +func (*InspectContentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } + +func (m *InspectContentRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *InspectContentRequest) GetInspectConfig() *InspectConfig { + if m != nil { + return m.InspectConfig + } + return nil +} + +func (m *InspectContentRequest) GetItem() *ContentItem { + if m != nil { + return m.Item + } + return nil +} + +func (m *InspectContentRequest) GetInspectTemplateName() string { + if m != nil { + return m.InspectTemplateName + } + return "" +} + +// Results of inspecting an item. +type InspectContentResponse struct { + // The findings. + Result *InspectResult `protobuf:"bytes,1,opt,name=result" json:"result,omitempty"` +} + +func (m *InspectContentResponse) Reset() { *m = InspectContentResponse{} } +func (m *InspectContentResponse) String() string { return proto.CompactTextString(m) } +func (*InspectContentResponse) ProtoMessage() {} +func (*InspectContentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } + +func (m *InspectContentResponse) GetResult() *InspectResult { + if m != nil { + return m.Result + } + return nil +} + +// Cloud repository for storing output. +type OutputStorageConfig struct { + // Types that are valid to be assigned to Type: + // *OutputStorageConfig_Table + Type isOutputStorageConfig_Type `protobuf_oneof:"type"` + // Schema used for writing the findings. Columns are derived from the + // `Finding` object. If appending to an existing table, any columns from the + // predefined schema that are missing will be added. No columns in the + // existing table will be deleted. + // + // If unspecified, then all available columns will be used for a new table, + // and no changes will be made to an existing table. + OutputSchema OutputStorageConfig_OutputSchema `protobuf:"varint,3,opt,name=output_schema,json=outputSchema,enum=google.privacy.dlp.v2.OutputStorageConfig_OutputSchema" json:"output_schema,omitempty"` +} + +func (m *OutputStorageConfig) Reset() { *m = OutputStorageConfig{} } +func (m *OutputStorageConfig) String() string { return proto.CompactTextString(m) } +func (*OutputStorageConfig) ProtoMessage() {} +func (*OutputStorageConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } + +type isOutputStorageConfig_Type interface { + isOutputStorageConfig_Type() +} + +type OutputStorageConfig_Table struct { + Table *BigQueryTable `protobuf:"bytes,1,opt,name=table,oneof"` +} + +func (*OutputStorageConfig_Table) isOutputStorageConfig_Type() {} + +func (m *OutputStorageConfig) GetType() isOutputStorageConfig_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *OutputStorageConfig) GetTable() *BigQueryTable { + if x, ok := m.GetType().(*OutputStorageConfig_Table); ok { + return x.Table + } + return nil +} + +func (m *OutputStorageConfig) GetOutputSchema() OutputStorageConfig_OutputSchema { + if m != nil { + return m.OutputSchema + } + return OutputStorageConfig_OUTPUT_SCHEMA_UNSPECIFIED +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*OutputStorageConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _OutputStorageConfig_OneofMarshaler, _OutputStorageConfig_OneofUnmarshaler, _OutputStorageConfig_OneofSizer, []interface{}{ + (*OutputStorageConfig_Table)(nil), + } +} + +func _OutputStorageConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*OutputStorageConfig) + // type + switch x := m.Type.(type) { + case *OutputStorageConfig_Table: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Table); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("OutputStorageConfig.Type has unexpected type %T", x) + } + return nil +} + +func _OutputStorageConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*OutputStorageConfig) + switch tag { + case 1: // type.table + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(BigQueryTable) + err := b.DecodeMessage(msg) + m.Type = &OutputStorageConfig_Table{msg} + return true, err + default: + return false, nil + } +} + +func _OutputStorageConfig_OneofSizer(msg proto.Message) (n int) { + m := msg.(*OutputStorageConfig) + // type + switch x := m.Type.(type) { + case *OutputStorageConfig_Table: + s := proto.Size(x.Table) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Statistics regarding a specific InfoType. +type InfoTypeStats struct { + // The type of finding this stat is for. + InfoType *InfoType `protobuf:"bytes,1,opt,name=info_type,json=infoType" json:"info_type,omitempty"` + // Number of findings for this infoType. + Count int64 `protobuf:"varint,2,opt,name=count" json:"count,omitempty"` +} + +func (m *InfoTypeStats) Reset() { *m = InfoTypeStats{} } +func (m *InfoTypeStats) String() string { return proto.CompactTextString(m) } +func (*InfoTypeStats) ProtoMessage() {} +func (*InfoTypeStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} } + +func (m *InfoTypeStats) GetInfoType() *InfoType { + if m != nil { + return m.InfoType + } + return nil +} + +func (m *InfoTypeStats) GetCount() int64 { + if m != nil { + return m.Count + } + return 0 +} + +// The results of an inspect DataSource job. +type InspectDataSourceDetails struct { + // The configuration used for this job. + RequestedOptions *InspectDataSourceDetails_RequestedOptions `protobuf:"bytes,2,opt,name=requested_options,json=requestedOptions" json:"requested_options,omitempty"` + // A summary of the outcome of this inspect job. + Result *InspectDataSourceDetails_Result `protobuf:"bytes,3,opt,name=result" json:"result,omitempty"` +} + +func (m *InspectDataSourceDetails) Reset() { *m = InspectDataSourceDetails{} } +func (m *InspectDataSourceDetails) String() string { return proto.CompactTextString(m) } +func (*InspectDataSourceDetails) ProtoMessage() {} +func (*InspectDataSourceDetails) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } + +func (m *InspectDataSourceDetails) GetRequestedOptions() *InspectDataSourceDetails_RequestedOptions { + if m != nil { + return m.RequestedOptions + } + return nil +} + +func (m *InspectDataSourceDetails) GetResult() *InspectDataSourceDetails_Result { + if m != nil { + return m.Result + } + return nil +} + +type InspectDataSourceDetails_RequestedOptions struct { + // If run with an inspect template, a snapshot of it's state at the time of + // this run. + SnapshotInspectTemplate *InspectTemplate `protobuf:"bytes,1,opt,name=snapshot_inspect_template,json=snapshotInspectTemplate" json:"snapshot_inspect_template,omitempty"` + JobConfig *InspectJobConfig `protobuf:"bytes,3,opt,name=job_config,json=jobConfig" json:"job_config,omitempty"` +} + +func (m *InspectDataSourceDetails_RequestedOptions) Reset() { + *m = InspectDataSourceDetails_RequestedOptions{} +} +func (m *InspectDataSourceDetails_RequestedOptions) String() string { return proto.CompactTextString(m) } +func (*InspectDataSourceDetails_RequestedOptions) ProtoMessage() {} +func (*InspectDataSourceDetails_RequestedOptions) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{25, 0} +} + +func (m *InspectDataSourceDetails_RequestedOptions) GetSnapshotInspectTemplate() *InspectTemplate { + if m != nil { + return m.SnapshotInspectTemplate + } + return nil +} + +func (m *InspectDataSourceDetails_RequestedOptions) GetJobConfig() *InspectJobConfig { + if m != nil { + return m.JobConfig + } + return nil +} + +type InspectDataSourceDetails_Result struct { + // Total size in bytes that were processed. + ProcessedBytes int64 `protobuf:"varint,1,opt,name=processed_bytes,json=processedBytes" json:"processed_bytes,omitempty"` + // Estimate of the number of bytes to process. + TotalEstimatedBytes int64 `protobuf:"varint,2,opt,name=total_estimated_bytes,json=totalEstimatedBytes" json:"total_estimated_bytes,omitempty"` + // Statistics of how many instances of each info type were found during + // inspect job. + InfoTypeStats []*InfoTypeStats `protobuf:"bytes,3,rep,name=info_type_stats,json=infoTypeStats" json:"info_type_stats,omitempty"` +} + +func (m *InspectDataSourceDetails_Result) Reset() { *m = InspectDataSourceDetails_Result{} } +func (m *InspectDataSourceDetails_Result) String() string { return proto.CompactTextString(m) } +func (*InspectDataSourceDetails_Result) ProtoMessage() {} +func (*InspectDataSourceDetails_Result) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{25, 1} +} + +func (m *InspectDataSourceDetails_Result) GetProcessedBytes() int64 { + if m != nil { + return m.ProcessedBytes + } + return 0 +} + +func (m *InspectDataSourceDetails_Result) GetTotalEstimatedBytes() int64 { + if m != nil { + return m.TotalEstimatedBytes + } + return 0 +} + +func (m *InspectDataSourceDetails_Result) GetInfoTypeStats() []*InfoTypeStats { + if m != nil { + return m.InfoTypeStats + } + return nil +} + +// InfoType description. +type InfoTypeDescription struct { + // Internal name of the infoType. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Human readable form of the infoType name. + DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // Which parts of the API supports this InfoType. + SupportedBy []InfoTypeSupportedBy `protobuf:"varint,3,rep,packed,name=supported_by,json=supportedBy,enum=google.privacy.dlp.v2.InfoTypeSupportedBy" json:"supported_by,omitempty"` +} + +func (m *InfoTypeDescription) Reset() { *m = InfoTypeDescription{} } +func (m *InfoTypeDescription) String() string { return proto.CompactTextString(m) } +func (*InfoTypeDescription) ProtoMessage() {} +func (*InfoTypeDescription) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} } + +func (m *InfoTypeDescription) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *InfoTypeDescription) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func (m *InfoTypeDescription) GetSupportedBy() []InfoTypeSupportedBy { + if m != nil { + return m.SupportedBy + } + return nil +} + +// Request for the list of infoTypes. +type ListInfoTypesRequest struct { + // Optional BCP-47 language code for localized infoType friendly + // names. If omitted, or if localized strings are not available, + // en-US strings will be returned. + LanguageCode string `protobuf:"bytes,1,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` + // Optional filter to only return infoTypes supported by certain parts of the + // API. Defaults to supported_by=INSPECT. + Filter string `protobuf:"bytes,2,opt,name=filter" json:"filter,omitempty"` +} + +func (m *ListInfoTypesRequest) Reset() { *m = ListInfoTypesRequest{} } +func (m *ListInfoTypesRequest) String() string { return proto.CompactTextString(m) } +func (*ListInfoTypesRequest) ProtoMessage() {} +func (*ListInfoTypesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} } + +func (m *ListInfoTypesRequest) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +func (m *ListInfoTypesRequest) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +// Response to the ListInfoTypes request. +type ListInfoTypesResponse struct { + // Set of sensitive infoTypes. + InfoTypes []*InfoTypeDescription `protobuf:"bytes,1,rep,name=info_types,json=infoTypes" json:"info_types,omitempty"` +} + +func (m *ListInfoTypesResponse) Reset() { *m = ListInfoTypesResponse{} } +func (m *ListInfoTypesResponse) String() string { return proto.CompactTextString(m) } +func (*ListInfoTypesResponse) ProtoMessage() {} +func (*ListInfoTypesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} } + +func (m *ListInfoTypesResponse) GetInfoTypes() []*InfoTypeDescription { + if m != nil { + return m.InfoTypes + } + return nil +} + +// Configuration for a risk analysis job. +type RiskAnalysisJobConfig struct { + // Privacy metric to compute. + PrivacyMetric *PrivacyMetric `protobuf:"bytes,1,opt,name=privacy_metric,json=privacyMetric" json:"privacy_metric,omitempty"` + // Input dataset to compute metrics over. + SourceTable *BigQueryTable `protobuf:"bytes,2,opt,name=source_table,json=sourceTable" json:"source_table,omitempty"` + // Actions to execute at the completion of the job. Are executed in the order + // provided. + Actions []*Action `protobuf:"bytes,3,rep,name=actions" json:"actions,omitempty"` +} + +func (m *RiskAnalysisJobConfig) Reset() { *m = RiskAnalysisJobConfig{} } +func (m *RiskAnalysisJobConfig) String() string { return proto.CompactTextString(m) } +func (*RiskAnalysisJobConfig) ProtoMessage() {} +func (*RiskAnalysisJobConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} } + +func (m *RiskAnalysisJobConfig) GetPrivacyMetric() *PrivacyMetric { + if m != nil { + return m.PrivacyMetric + } + return nil +} + +func (m *RiskAnalysisJobConfig) GetSourceTable() *BigQueryTable { + if m != nil { + return m.SourceTable + } + return nil +} + +func (m *RiskAnalysisJobConfig) GetActions() []*Action { + if m != nil { + return m.Actions + } + return nil +} + +// Privacy metric to compute for reidentification risk analysis. +type PrivacyMetric struct { + // Types that are valid to be assigned to Type: + // *PrivacyMetric_NumericalStatsConfig_ + // *PrivacyMetric_CategoricalStatsConfig_ + // *PrivacyMetric_KAnonymityConfig_ + // *PrivacyMetric_LDiversityConfig_ + // *PrivacyMetric_KMapEstimationConfig_ + Type isPrivacyMetric_Type `protobuf_oneof:"type"` +} + +func (m *PrivacyMetric) Reset() { *m = PrivacyMetric{} } +func (m *PrivacyMetric) String() string { return proto.CompactTextString(m) } +func (*PrivacyMetric) ProtoMessage() {} +func (*PrivacyMetric) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} } + +type isPrivacyMetric_Type interface { + isPrivacyMetric_Type() +} + +type PrivacyMetric_NumericalStatsConfig_ struct { + NumericalStatsConfig *PrivacyMetric_NumericalStatsConfig `protobuf:"bytes,1,opt,name=numerical_stats_config,json=numericalStatsConfig,oneof"` +} +type PrivacyMetric_CategoricalStatsConfig_ struct { + CategoricalStatsConfig *PrivacyMetric_CategoricalStatsConfig `protobuf:"bytes,2,opt,name=categorical_stats_config,json=categoricalStatsConfig,oneof"` +} +type PrivacyMetric_KAnonymityConfig_ struct { + KAnonymityConfig *PrivacyMetric_KAnonymityConfig `protobuf:"bytes,3,opt,name=k_anonymity_config,json=kAnonymityConfig,oneof"` +} +type PrivacyMetric_LDiversityConfig_ struct { + LDiversityConfig *PrivacyMetric_LDiversityConfig `protobuf:"bytes,4,opt,name=l_diversity_config,json=lDiversityConfig,oneof"` +} +type PrivacyMetric_KMapEstimationConfig_ struct { + KMapEstimationConfig *PrivacyMetric_KMapEstimationConfig `protobuf:"bytes,5,opt,name=k_map_estimation_config,json=kMapEstimationConfig,oneof"` +} + +func (*PrivacyMetric_NumericalStatsConfig_) isPrivacyMetric_Type() {} +func (*PrivacyMetric_CategoricalStatsConfig_) isPrivacyMetric_Type() {} +func (*PrivacyMetric_KAnonymityConfig_) isPrivacyMetric_Type() {} +func (*PrivacyMetric_LDiversityConfig_) isPrivacyMetric_Type() {} +func (*PrivacyMetric_KMapEstimationConfig_) isPrivacyMetric_Type() {} + +func (m *PrivacyMetric) GetType() isPrivacyMetric_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *PrivacyMetric) GetNumericalStatsConfig() *PrivacyMetric_NumericalStatsConfig { + if x, ok := m.GetType().(*PrivacyMetric_NumericalStatsConfig_); ok { + return x.NumericalStatsConfig + } + return nil +} + +func (m *PrivacyMetric) GetCategoricalStatsConfig() *PrivacyMetric_CategoricalStatsConfig { + if x, ok := m.GetType().(*PrivacyMetric_CategoricalStatsConfig_); ok { + return x.CategoricalStatsConfig + } + return nil +} + +func (m *PrivacyMetric) GetKAnonymityConfig() *PrivacyMetric_KAnonymityConfig { + if x, ok := m.GetType().(*PrivacyMetric_KAnonymityConfig_); ok { + return x.KAnonymityConfig + } + return nil +} + +func (m *PrivacyMetric) GetLDiversityConfig() *PrivacyMetric_LDiversityConfig { + if x, ok := m.GetType().(*PrivacyMetric_LDiversityConfig_); ok { + return x.LDiversityConfig + } + return nil +} + +func (m *PrivacyMetric) GetKMapEstimationConfig() *PrivacyMetric_KMapEstimationConfig { + if x, ok := m.GetType().(*PrivacyMetric_KMapEstimationConfig_); ok { + return x.KMapEstimationConfig + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*PrivacyMetric) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _PrivacyMetric_OneofMarshaler, _PrivacyMetric_OneofUnmarshaler, _PrivacyMetric_OneofSizer, []interface{}{ + (*PrivacyMetric_NumericalStatsConfig_)(nil), + (*PrivacyMetric_CategoricalStatsConfig_)(nil), + (*PrivacyMetric_KAnonymityConfig_)(nil), + (*PrivacyMetric_LDiversityConfig_)(nil), + (*PrivacyMetric_KMapEstimationConfig_)(nil), + } +} + +func _PrivacyMetric_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*PrivacyMetric) + // type + switch x := m.Type.(type) { + case *PrivacyMetric_NumericalStatsConfig_: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.NumericalStatsConfig); err != nil { + return err + } + case *PrivacyMetric_CategoricalStatsConfig_: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.CategoricalStatsConfig); err != nil { + return err + } + case *PrivacyMetric_KAnonymityConfig_: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.KAnonymityConfig); err != nil { + return err + } + case *PrivacyMetric_LDiversityConfig_: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.LDiversityConfig); err != nil { + return err + } + case *PrivacyMetric_KMapEstimationConfig_: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.KMapEstimationConfig); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("PrivacyMetric.Type has unexpected type %T", x) + } + return nil +} + +func _PrivacyMetric_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*PrivacyMetric) + switch tag { + case 1: // type.numerical_stats_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PrivacyMetric_NumericalStatsConfig) + err := b.DecodeMessage(msg) + m.Type = &PrivacyMetric_NumericalStatsConfig_{msg} + return true, err + case 2: // type.categorical_stats_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PrivacyMetric_CategoricalStatsConfig) + err := b.DecodeMessage(msg) + m.Type = &PrivacyMetric_CategoricalStatsConfig_{msg} + return true, err + case 3: // type.k_anonymity_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PrivacyMetric_KAnonymityConfig) + err := b.DecodeMessage(msg) + m.Type = &PrivacyMetric_KAnonymityConfig_{msg} + return true, err + case 4: // type.l_diversity_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PrivacyMetric_LDiversityConfig) + err := b.DecodeMessage(msg) + m.Type = &PrivacyMetric_LDiversityConfig_{msg} + return true, err + case 5: // type.k_map_estimation_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PrivacyMetric_KMapEstimationConfig) + err := b.DecodeMessage(msg) + m.Type = &PrivacyMetric_KMapEstimationConfig_{msg} + return true, err + default: + return false, nil + } +} + +func _PrivacyMetric_OneofSizer(msg proto.Message) (n int) { + m := msg.(*PrivacyMetric) + // type + switch x := m.Type.(type) { + case *PrivacyMetric_NumericalStatsConfig_: + s := proto.Size(x.NumericalStatsConfig) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrivacyMetric_CategoricalStatsConfig_: + s := proto.Size(x.CategoricalStatsConfig) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrivacyMetric_KAnonymityConfig_: + s := proto.Size(x.KAnonymityConfig) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrivacyMetric_LDiversityConfig_: + s := proto.Size(x.LDiversityConfig) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrivacyMetric_KMapEstimationConfig_: + s := proto.Size(x.KMapEstimationConfig) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Compute numerical stats over an individual column, including +// min, max, and quantiles. +type PrivacyMetric_NumericalStatsConfig struct { + // Field to compute numerical stats on. Supported types are + // integer, float, date, datetime, timestamp, time. + Field *FieldId `protobuf:"bytes,1,opt,name=field" json:"field,omitempty"` +} + +func (m *PrivacyMetric_NumericalStatsConfig) Reset() { *m = PrivacyMetric_NumericalStatsConfig{} } +func (m *PrivacyMetric_NumericalStatsConfig) String() string { return proto.CompactTextString(m) } +func (*PrivacyMetric_NumericalStatsConfig) ProtoMessage() {} +func (*PrivacyMetric_NumericalStatsConfig) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{30, 0} +} + +func (m *PrivacyMetric_NumericalStatsConfig) GetField() *FieldId { + if m != nil { + return m.Field + } + return nil +} + +// Compute numerical stats over an individual column, including +// number of distinct values and value count distribution. +type PrivacyMetric_CategoricalStatsConfig struct { + // Field to compute categorical stats on. All column types are + // supported except for arrays and structs. However, it may be more + // informative to use NumericalStats when the field type is supported, + // depending on the data. + Field *FieldId `protobuf:"bytes,1,opt,name=field" json:"field,omitempty"` +} + +func (m *PrivacyMetric_CategoricalStatsConfig) Reset() { *m = PrivacyMetric_CategoricalStatsConfig{} } +func (m *PrivacyMetric_CategoricalStatsConfig) String() string { return proto.CompactTextString(m) } +func (*PrivacyMetric_CategoricalStatsConfig) ProtoMessage() {} +func (*PrivacyMetric_CategoricalStatsConfig) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{30, 1} +} + +func (m *PrivacyMetric_CategoricalStatsConfig) GetField() *FieldId { + if m != nil { + return m.Field + } + return nil +} + +// k-anonymity metric, used for analysis of reidentification risk. +type PrivacyMetric_KAnonymityConfig struct { + // Set of fields to compute k-anonymity over. When multiple fields are + // specified, they are considered a single composite key. Structs and + // repeated data types are not supported; however, nested fields are + // supported so long as they are not structs themselves or nested within + // a repeated field. + QuasiIds []*FieldId `protobuf:"bytes,1,rep,name=quasi_ids,json=quasiIds" json:"quasi_ids,omitempty"` +} + +func (m *PrivacyMetric_KAnonymityConfig) Reset() { *m = PrivacyMetric_KAnonymityConfig{} } +func (m *PrivacyMetric_KAnonymityConfig) String() string { return proto.CompactTextString(m) } +func (*PrivacyMetric_KAnonymityConfig) ProtoMessage() {} +func (*PrivacyMetric_KAnonymityConfig) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{30, 2} +} + +func (m *PrivacyMetric_KAnonymityConfig) GetQuasiIds() []*FieldId { + if m != nil { + return m.QuasiIds + } + return nil +} + +// l-diversity metric, used for analysis of reidentification risk. +type PrivacyMetric_LDiversityConfig struct { + // Set of quasi-identifiers indicating how equivalence classes are + // defined for the l-diversity computation. When multiple fields are + // specified, they are considered a single composite key. + QuasiIds []*FieldId `protobuf:"bytes,1,rep,name=quasi_ids,json=quasiIds" json:"quasi_ids,omitempty"` + // Sensitive field for computing the l-value. + SensitiveAttribute *FieldId `protobuf:"bytes,2,opt,name=sensitive_attribute,json=sensitiveAttribute" json:"sensitive_attribute,omitempty"` +} + +func (m *PrivacyMetric_LDiversityConfig) Reset() { *m = PrivacyMetric_LDiversityConfig{} } +func (m *PrivacyMetric_LDiversityConfig) String() string { return proto.CompactTextString(m) } +func (*PrivacyMetric_LDiversityConfig) ProtoMessage() {} +func (*PrivacyMetric_LDiversityConfig) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{30, 3} +} + +func (m *PrivacyMetric_LDiversityConfig) GetQuasiIds() []*FieldId { + if m != nil { + return m.QuasiIds + } + return nil +} + +func (m *PrivacyMetric_LDiversityConfig) GetSensitiveAttribute() *FieldId { + if m != nil { + return m.SensitiveAttribute + } + return nil +} + +// Reidentifiability metric. This corresponds to a risk model similar to what +// is called "journalist risk" in the literature, except the attack dataset is +// statistically modeled instead of being perfectly known. This can be done +// using publicly available data (like the US Census), or using a custom +// statistical model (indicated as one or several BigQuery tables), or by +// extrapolating from the distribution of values in the input dataset. +type PrivacyMetric_KMapEstimationConfig struct { + // Fields considered to be quasi-identifiers. No two columns can have the + // same tag. [required] + QuasiIds []*PrivacyMetric_KMapEstimationConfig_TaggedField `protobuf:"bytes,1,rep,name=quasi_ids,json=quasiIds" json:"quasi_ids,omitempty"` + // ISO 3166-1 alpha-2 region code to use in the statistical modeling. + // Required if no column is tagged with a region-specific InfoType (like + // US_ZIP_5) or a region code. + RegionCode string `protobuf:"bytes,2,opt,name=region_code,json=regionCode" json:"region_code,omitempty"` + // Several auxiliary tables can be used in the analysis. Each custom_tag + // used to tag a quasi-identifiers column must appear in exactly one column + // of one auxiliary table. + AuxiliaryTables []*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable `protobuf:"bytes,3,rep,name=auxiliary_tables,json=auxiliaryTables" json:"auxiliary_tables,omitempty"` +} + +func (m *PrivacyMetric_KMapEstimationConfig) Reset() { *m = PrivacyMetric_KMapEstimationConfig{} } +func (m *PrivacyMetric_KMapEstimationConfig) String() string { return proto.CompactTextString(m) } +func (*PrivacyMetric_KMapEstimationConfig) ProtoMessage() {} +func (*PrivacyMetric_KMapEstimationConfig) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{30, 4} +} + +func (m *PrivacyMetric_KMapEstimationConfig) GetQuasiIds() []*PrivacyMetric_KMapEstimationConfig_TaggedField { + if m != nil { + return m.QuasiIds + } + return nil +} + +func (m *PrivacyMetric_KMapEstimationConfig) GetRegionCode() string { + if m != nil { + return m.RegionCode + } + return "" +} + +func (m *PrivacyMetric_KMapEstimationConfig) GetAuxiliaryTables() []*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable { + if m != nil { + return m.AuxiliaryTables + } + return nil +} + +// A column with a semantic tag attached. +type PrivacyMetric_KMapEstimationConfig_TaggedField struct { + // Identifies the column. [required] + Field *FieldId `protobuf:"bytes,1,opt,name=field" json:"field,omitempty"` + // Semantic tag that identifies what a column contains, to determine which + // statistical model to use to estimate the reidentifiability of each + // value. [required] + // + // Types that are valid to be assigned to Tag: + // *PrivacyMetric_KMapEstimationConfig_TaggedField_InfoType + // *PrivacyMetric_KMapEstimationConfig_TaggedField_CustomTag + // *PrivacyMetric_KMapEstimationConfig_TaggedField_Inferred + Tag isPrivacyMetric_KMapEstimationConfig_TaggedField_Tag `protobuf_oneof:"tag"` +} + +func (m *PrivacyMetric_KMapEstimationConfig_TaggedField) Reset() { + *m = PrivacyMetric_KMapEstimationConfig_TaggedField{} +} +func (m *PrivacyMetric_KMapEstimationConfig_TaggedField) String() string { + return proto.CompactTextString(m) +} +func (*PrivacyMetric_KMapEstimationConfig_TaggedField) ProtoMessage() {} +func (*PrivacyMetric_KMapEstimationConfig_TaggedField) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{30, 4, 0} +} + +type isPrivacyMetric_KMapEstimationConfig_TaggedField_Tag interface { + isPrivacyMetric_KMapEstimationConfig_TaggedField_Tag() +} + +type PrivacyMetric_KMapEstimationConfig_TaggedField_InfoType struct { + InfoType *InfoType `protobuf:"bytes,2,opt,name=info_type,json=infoType,oneof"` +} +type PrivacyMetric_KMapEstimationConfig_TaggedField_CustomTag struct { + CustomTag string `protobuf:"bytes,3,opt,name=custom_tag,json=customTag,oneof"` +} +type PrivacyMetric_KMapEstimationConfig_TaggedField_Inferred struct { + Inferred *google_protobuf3.Empty `protobuf:"bytes,4,opt,name=inferred,oneof"` +} + +func (*PrivacyMetric_KMapEstimationConfig_TaggedField_InfoType) isPrivacyMetric_KMapEstimationConfig_TaggedField_Tag() { +} +func (*PrivacyMetric_KMapEstimationConfig_TaggedField_CustomTag) isPrivacyMetric_KMapEstimationConfig_TaggedField_Tag() { +} +func (*PrivacyMetric_KMapEstimationConfig_TaggedField_Inferred) isPrivacyMetric_KMapEstimationConfig_TaggedField_Tag() { +} + +func (m *PrivacyMetric_KMapEstimationConfig_TaggedField) GetTag() isPrivacyMetric_KMapEstimationConfig_TaggedField_Tag { + if m != nil { + return m.Tag + } + return nil +} + +func (m *PrivacyMetric_KMapEstimationConfig_TaggedField) GetField() *FieldId { + if m != nil { + return m.Field + } + return nil +} + +func (m *PrivacyMetric_KMapEstimationConfig_TaggedField) GetInfoType() *InfoType { + if x, ok := m.GetTag().(*PrivacyMetric_KMapEstimationConfig_TaggedField_InfoType); ok { + return x.InfoType + } + return nil +} + +func (m *PrivacyMetric_KMapEstimationConfig_TaggedField) GetCustomTag() string { + if x, ok := m.GetTag().(*PrivacyMetric_KMapEstimationConfig_TaggedField_CustomTag); ok { + return x.CustomTag + } + return "" +} + +func (m *PrivacyMetric_KMapEstimationConfig_TaggedField) GetInferred() *google_protobuf3.Empty { + if x, ok := m.GetTag().(*PrivacyMetric_KMapEstimationConfig_TaggedField_Inferred); ok { + return x.Inferred + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*PrivacyMetric_KMapEstimationConfig_TaggedField) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _PrivacyMetric_KMapEstimationConfig_TaggedField_OneofMarshaler, _PrivacyMetric_KMapEstimationConfig_TaggedField_OneofUnmarshaler, _PrivacyMetric_KMapEstimationConfig_TaggedField_OneofSizer, []interface{}{ + (*PrivacyMetric_KMapEstimationConfig_TaggedField_InfoType)(nil), + (*PrivacyMetric_KMapEstimationConfig_TaggedField_CustomTag)(nil), + (*PrivacyMetric_KMapEstimationConfig_TaggedField_Inferred)(nil), + } +} + +func _PrivacyMetric_KMapEstimationConfig_TaggedField_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*PrivacyMetric_KMapEstimationConfig_TaggedField) + // tag + switch x := m.Tag.(type) { + case *PrivacyMetric_KMapEstimationConfig_TaggedField_InfoType: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.InfoType); err != nil { + return err + } + case *PrivacyMetric_KMapEstimationConfig_TaggedField_CustomTag: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeStringBytes(x.CustomTag) + case *PrivacyMetric_KMapEstimationConfig_TaggedField_Inferred: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Inferred); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("PrivacyMetric_KMapEstimationConfig_TaggedField.Tag has unexpected type %T", x) + } + return nil +} + +func _PrivacyMetric_KMapEstimationConfig_TaggedField_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*PrivacyMetric_KMapEstimationConfig_TaggedField) + switch tag { + case 2: // tag.info_type + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(InfoType) + err := b.DecodeMessage(msg) + m.Tag = &PrivacyMetric_KMapEstimationConfig_TaggedField_InfoType{msg} + return true, err + case 3: // tag.custom_tag + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Tag = &PrivacyMetric_KMapEstimationConfig_TaggedField_CustomTag{x} + return true, err + case 4: // tag.inferred + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf3.Empty) + err := b.DecodeMessage(msg) + m.Tag = &PrivacyMetric_KMapEstimationConfig_TaggedField_Inferred{msg} + return true, err + default: + return false, nil + } +} + +func _PrivacyMetric_KMapEstimationConfig_TaggedField_OneofSizer(msg proto.Message) (n int) { + m := msg.(*PrivacyMetric_KMapEstimationConfig_TaggedField) + // tag + switch x := m.Tag.(type) { + case *PrivacyMetric_KMapEstimationConfig_TaggedField_InfoType: + s := proto.Size(x.InfoType) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrivacyMetric_KMapEstimationConfig_TaggedField_CustomTag: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.CustomTag))) + n += len(x.CustomTag) + case *PrivacyMetric_KMapEstimationConfig_TaggedField_Inferred: + s := proto.Size(x.Inferred) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// An auxiliary table contains statistical information on the relative +// frequency of different quasi-identifiers values. It has one or several +// quasi-identifiers columns, and one column that indicates the relative +// frequency of each quasi-identifier tuple. +// If a tuple is present in the data but not in the auxiliary table, the +// corresponding relative frequency is assumed to be zero (and thus, the +// tuple is highly reidentifiable). +type PrivacyMetric_KMapEstimationConfig_AuxiliaryTable struct { + // Auxiliary table location. [required] + Table *BigQueryTable `protobuf:"bytes,3,opt,name=table" json:"table,omitempty"` + // Quasi-identifier columns. [required] + QuasiIds []*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField `protobuf:"bytes,1,rep,name=quasi_ids,json=quasiIds" json:"quasi_ids,omitempty"` + // The relative frequency column must contain a floating-point number + // between 0 and 1 (inclusive). Null values are assumed to be zero. + // [required] + RelativeFrequency *FieldId `protobuf:"bytes,2,opt,name=relative_frequency,json=relativeFrequency" json:"relative_frequency,omitempty"` +} + +func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable) Reset() { + *m = PrivacyMetric_KMapEstimationConfig_AuxiliaryTable{} +} +func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable) String() string { + return proto.CompactTextString(m) +} +func (*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable) ProtoMessage() {} +func (*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{30, 4, 1} +} + +func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable) GetTable() *BigQueryTable { + if m != nil { + return m.Table + } + return nil +} + +func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable) GetQuasiIds() []*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField { + if m != nil { + return m.QuasiIds + } + return nil +} + +func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable) GetRelativeFrequency() *FieldId { + if m != nil { + return m.RelativeFrequency + } + return nil +} + +// A quasi-identifier column has a custom_tag, used to know which column +// in the data corresponds to which column in the statistical model. +type PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField struct { + Field *FieldId `protobuf:"bytes,1,opt,name=field" json:"field,omitempty"` + CustomTag string `protobuf:"bytes,2,opt,name=custom_tag,json=customTag" json:"custom_tag,omitempty"` +} + +func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField) Reset() { + *m = PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField{} +} +func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField) String() string { + return proto.CompactTextString(m) +} +func (*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField) ProtoMessage() {} +func (*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{30, 4, 1, 0} +} + +func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField) GetField() *FieldId { + if m != nil { + return m.Field + } + return nil +} + +func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField) GetCustomTag() string { + if m != nil { + return m.CustomTag + } + return "" +} + +// Result of a risk analysis operation request. +type AnalyzeDataSourceRiskDetails struct { + // Privacy metric to compute. + RequestedPrivacyMetric *PrivacyMetric `protobuf:"bytes,1,opt,name=requested_privacy_metric,json=requestedPrivacyMetric" json:"requested_privacy_metric,omitempty"` + // Input dataset to compute metrics over. + RequestedSourceTable *BigQueryTable `protobuf:"bytes,2,opt,name=requested_source_table,json=requestedSourceTable" json:"requested_source_table,omitempty"` + // Values associated with this metric. + // + // Types that are valid to be assigned to Result: + // *AnalyzeDataSourceRiskDetails_NumericalStatsResult_ + // *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_ + // *AnalyzeDataSourceRiskDetails_KAnonymityResult_ + // *AnalyzeDataSourceRiskDetails_LDiversityResult_ + // *AnalyzeDataSourceRiskDetails_KMapEstimationResult_ + Result isAnalyzeDataSourceRiskDetails_Result `protobuf_oneof:"result"` +} + +func (m *AnalyzeDataSourceRiskDetails) Reset() { *m = AnalyzeDataSourceRiskDetails{} } +func (m *AnalyzeDataSourceRiskDetails) String() string { return proto.CompactTextString(m) } +func (*AnalyzeDataSourceRiskDetails) ProtoMessage() {} +func (*AnalyzeDataSourceRiskDetails) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} } + +type isAnalyzeDataSourceRiskDetails_Result interface { + isAnalyzeDataSourceRiskDetails_Result() +} + +type AnalyzeDataSourceRiskDetails_NumericalStatsResult_ struct { + NumericalStatsResult *AnalyzeDataSourceRiskDetails_NumericalStatsResult `protobuf:"bytes,3,opt,name=numerical_stats_result,json=numericalStatsResult,oneof"` +} +type AnalyzeDataSourceRiskDetails_CategoricalStatsResult_ struct { + CategoricalStatsResult *AnalyzeDataSourceRiskDetails_CategoricalStatsResult `protobuf:"bytes,4,opt,name=categorical_stats_result,json=categoricalStatsResult,oneof"` +} +type AnalyzeDataSourceRiskDetails_KAnonymityResult_ struct { + KAnonymityResult *AnalyzeDataSourceRiskDetails_KAnonymityResult `protobuf:"bytes,5,opt,name=k_anonymity_result,json=kAnonymityResult,oneof"` +} +type AnalyzeDataSourceRiskDetails_LDiversityResult_ struct { + LDiversityResult *AnalyzeDataSourceRiskDetails_LDiversityResult `protobuf:"bytes,6,opt,name=l_diversity_result,json=lDiversityResult,oneof"` +} +type AnalyzeDataSourceRiskDetails_KMapEstimationResult_ struct { + KMapEstimationResult *AnalyzeDataSourceRiskDetails_KMapEstimationResult `protobuf:"bytes,7,opt,name=k_map_estimation_result,json=kMapEstimationResult,oneof"` +} + +func (*AnalyzeDataSourceRiskDetails_NumericalStatsResult_) isAnalyzeDataSourceRiskDetails_Result() {} +func (*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_) isAnalyzeDataSourceRiskDetails_Result() {} +func (*AnalyzeDataSourceRiskDetails_KAnonymityResult_) isAnalyzeDataSourceRiskDetails_Result() {} +func (*AnalyzeDataSourceRiskDetails_LDiversityResult_) isAnalyzeDataSourceRiskDetails_Result() {} +func (*AnalyzeDataSourceRiskDetails_KMapEstimationResult_) isAnalyzeDataSourceRiskDetails_Result() {} + +func (m *AnalyzeDataSourceRiskDetails) GetResult() isAnalyzeDataSourceRiskDetails_Result { + if m != nil { + return m.Result + } + return nil +} + +func (m *AnalyzeDataSourceRiskDetails) GetRequestedPrivacyMetric() *PrivacyMetric { + if m != nil { + return m.RequestedPrivacyMetric + } + return nil +} + +func (m *AnalyzeDataSourceRiskDetails) GetRequestedSourceTable() *BigQueryTable { + if m != nil { + return m.RequestedSourceTable + } + return nil +} + +func (m *AnalyzeDataSourceRiskDetails) GetNumericalStatsResult() *AnalyzeDataSourceRiskDetails_NumericalStatsResult { + if x, ok := m.GetResult().(*AnalyzeDataSourceRiskDetails_NumericalStatsResult_); ok { + return x.NumericalStatsResult + } + return nil +} + +func (m *AnalyzeDataSourceRiskDetails) GetCategoricalStatsResult() *AnalyzeDataSourceRiskDetails_CategoricalStatsResult { + if x, ok := m.GetResult().(*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_); ok { + return x.CategoricalStatsResult + } + return nil +} + +func (m *AnalyzeDataSourceRiskDetails) GetKAnonymityResult() *AnalyzeDataSourceRiskDetails_KAnonymityResult { + if x, ok := m.GetResult().(*AnalyzeDataSourceRiskDetails_KAnonymityResult_); ok { + return x.KAnonymityResult + } + return nil +} + +func (m *AnalyzeDataSourceRiskDetails) GetLDiversityResult() *AnalyzeDataSourceRiskDetails_LDiversityResult { + if x, ok := m.GetResult().(*AnalyzeDataSourceRiskDetails_LDiversityResult_); ok { + return x.LDiversityResult + } + return nil +} + +func (m *AnalyzeDataSourceRiskDetails) GetKMapEstimationResult() *AnalyzeDataSourceRiskDetails_KMapEstimationResult { + if x, ok := m.GetResult().(*AnalyzeDataSourceRiskDetails_KMapEstimationResult_); ok { + return x.KMapEstimationResult + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*AnalyzeDataSourceRiskDetails) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _AnalyzeDataSourceRiskDetails_OneofMarshaler, _AnalyzeDataSourceRiskDetails_OneofUnmarshaler, _AnalyzeDataSourceRiskDetails_OneofSizer, []interface{}{ + (*AnalyzeDataSourceRiskDetails_NumericalStatsResult_)(nil), + (*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_)(nil), + (*AnalyzeDataSourceRiskDetails_KAnonymityResult_)(nil), + (*AnalyzeDataSourceRiskDetails_LDiversityResult_)(nil), + (*AnalyzeDataSourceRiskDetails_KMapEstimationResult_)(nil), + } +} + +func _AnalyzeDataSourceRiskDetails_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*AnalyzeDataSourceRiskDetails) + // result + switch x := m.Result.(type) { + case *AnalyzeDataSourceRiskDetails_NumericalStatsResult_: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.NumericalStatsResult); err != nil { + return err + } + case *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.CategoricalStatsResult); err != nil { + return err + } + case *AnalyzeDataSourceRiskDetails_KAnonymityResult_: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.KAnonymityResult); err != nil { + return err + } + case *AnalyzeDataSourceRiskDetails_LDiversityResult_: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.LDiversityResult); err != nil { + return err + } + case *AnalyzeDataSourceRiskDetails_KMapEstimationResult_: + b.EncodeVarint(7<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.KMapEstimationResult); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("AnalyzeDataSourceRiskDetails.Result has unexpected type %T", x) + } + return nil +} + +func _AnalyzeDataSourceRiskDetails_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*AnalyzeDataSourceRiskDetails) + switch tag { + case 3: // result.numerical_stats_result + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(AnalyzeDataSourceRiskDetails_NumericalStatsResult) + err := b.DecodeMessage(msg) + m.Result = &AnalyzeDataSourceRiskDetails_NumericalStatsResult_{msg} + return true, err + case 4: // result.categorical_stats_result + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(AnalyzeDataSourceRiskDetails_CategoricalStatsResult) + err := b.DecodeMessage(msg) + m.Result = &AnalyzeDataSourceRiskDetails_CategoricalStatsResult_{msg} + return true, err + case 5: // result.k_anonymity_result + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(AnalyzeDataSourceRiskDetails_KAnonymityResult) + err := b.DecodeMessage(msg) + m.Result = &AnalyzeDataSourceRiskDetails_KAnonymityResult_{msg} + return true, err + case 6: // result.l_diversity_result + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(AnalyzeDataSourceRiskDetails_LDiversityResult) + err := b.DecodeMessage(msg) + m.Result = &AnalyzeDataSourceRiskDetails_LDiversityResult_{msg} + return true, err + case 7: // result.k_map_estimation_result + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(AnalyzeDataSourceRiskDetails_KMapEstimationResult) + err := b.DecodeMessage(msg) + m.Result = &AnalyzeDataSourceRiskDetails_KMapEstimationResult_{msg} + return true, err + default: + return false, nil + } +} + +func _AnalyzeDataSourceRiskDetails_OneofSizer(msg proto.Message) (n int) { + m := msg.(*AnalyzeDataSourceRiskDetails) + // result + switch x := m.Result.(type) { + case *AnalyzeDataSourceRiskDetails_NumericalStatsResult_: + s := proto.Size(x.NumericalStatsResult) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_: + s := proto.Size(x.CategoricalStatsResult) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *AnalyzeDataSourceRiskDetails_KAnonymityResult_: + s := proto.Size(x.KAnonymityResult) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *AnalyzeDataSourceRiskDetails_LDiversityResult_: + s := proto.Size(x.LDiversityResult) + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *AnalyzeDataSourceRiskDetails_KMapEstimationResult_: + s := proto.Size(x.KMapEstimationResult) + n += proto.SizeVarint(7<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Result of the numerical stats computation. +type AnalyzeDataSourceRiskDetails_NumericalStatsResult struct { + // Minimum value appearing in the column. + MinValue *Value `protobuf:"bytes,1,opt,name=min_value,json=minValue" json:"min_value,omitempty"` + // Maximum value appearing in the column. + MaxValue *Value `protobuf:"bytes,2,opt,name=max_value,json=maxValue" json:"max_value,omitempty"` + // List of 99 values that partition the set of field values into 100 equal + // sized buckets. + QuantileValues []*Value `protobuf:"bytes,4,rep,name=quantile_values,json=quantileValues" json:"quantile_values,omitempty"` +} + +func (m *AnalyzeDataSourceRiskDetails_NumericalStatsResult) Reset() { + *m = AnalyzeDataSourceRiskDetails_NumericalStatsResult{} +} +func (m *AnalyzeDataSourceRiskDetails_NumericalStatsResult) String() string { + return proto.CompactTextString(m) +} +func (*AnalyzeDataSourceRiskDetails_NumericalStatsResult) ProtoMessage() {} +func (*AnalyzeDataSourceRiskDetails_NumericalStatsResult) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{31, 0} +} + +func (m *AnalyzeDataSourceRiskDetails_NumericalStatsResult) GetMinValue() *Value { + if m != nil { + return m.MinValue + } + return nil +} + +func (m *AnalyzeDataSourceRiskDetails_NumericalStatsResult) GetMaxValue() *Value { + if m != nil { + return m.MaxValue + } + return nil +} + +func (m *AnalyzeDataSourceRiskDetails_NumericalStatsResult) GetQuantileValues() []*Value { + if m != nil { + return m.QuantileValues + } + return nil +} + +// Result of the categorical stats computation. +type AnalyzeDataSourceRiskDetails_CategoricalStatsResult struct { + // Histogram of value frequencies in the column. + ValueFrequencyHistogramBuckets []*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket `protobuf:"bytes,5,rep,name=value_frequency_histogram_buckets,json=valueFrequencyHistogramBuckets" json:"value_frequency_histogram_buckets,omitempty"` +} + +func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult) Reset() { + *m = AnalyzeDataSourceRiskDetails_CategoricalStatsResult{} +} +func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult) String() string { + return proto.CompactTextString(m) +} +func (*AnalyzeDataSourceRiskDetails_CategoricalStatsResult) ProtoMessage() {} +func (*AnalyzeDataSourceRiskDetails_CategoricalStatsResult) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{31, 1} +} + +func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult) GetValueFrequencyHistogramBuckets() []*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket { + if m != nil { + return m.ValueFrequencyHistogramBuckets + } + return nil +} + +type AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket struct { + // Lower bound on the value frequency of the values in this bucket. + ValueFrequencyLowerBound int64 `protobuf:"varint,1,opt,name=value_frequency_lower_bound,json=valueFrequencyLowerBound" json:"value_frequency_lower_bound,omitempty"` + // Upper bound on the value frequency of the values in this bucket. + ValueFrequencyUpperBound int64 `protobuf:"varint,2,opt,name=value_frequency_upper_bound,json=valueFrequencyUpperBound" json:"value_frequency_upper_bound,omitempty"` + // Total number of values in this bucket. + BucketSize int64 `protobuf:"varint,3,opt,name=bucket_size,json=bucketSize" json:"bucket_size,omitempty"` + // Sample of value frequencies in this bucket. The total number of + // values returned per bucket is capped at 20. + BucketValues []*ValueFrequency `protobuf:"bytes,4,rep,name=bucket_values,json=bucketValues" json:"bucket_values,omitempty"` + // Total number of distinct values in this bucket. + BucketValueCount int64 `protobuf:"varint,5,opt,name=bucket_value_count,json=bucketValueCount" json:"bucket_value_count,omitempty"` +} + +func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) Reset() { + *m = AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket{} +} +func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) String() string { + return proto.CompactTextString(m) +} +func (*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) ProtoMessage() { +} +func (*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{31, 1, 0} +} + +func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) GetValueFrequencyLowerBound() int64 { + if m != nil { + return m.ValueFrequencyLowerBound + } + return 0 +} + +func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) GetValueFrequencyUpperBound() int64 { + if m != nil { + return m.ValueFrequencyUpperBound + } + return 0 +} + +func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) GetBucketSize() int64 { + if m != nil { + return m.BucketSize + } + return 0 +} + +func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) GetBucketValues() []*ValueFrequency { + if m != nil { + return m.BucketValues + } + return nil +} + +func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) GetBucketValueCount() int64 { + if m != nil { + return m.BucketValueCount + } + return 0 +} + +// Result of the k-anonymity computation. +type AnalyzeDataSourceRiskDetails_KAnonymityResult struct { + // Histogram of k-anonymity equivalence classes. + EquivalenceClassHistogramBuckets []*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket `protobuf:"bytes,5,rep,name=equivalence_class_histogram_buckets,json=equivalenceClassHistogramBuckets" json:"equivalence_class_histogram_buckets,omitempty"` +} + +func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult) Reset() { + *m = AnalyzeDataSourceRiskDetails_KAnonymityResult{} +} +func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult) String() string { + return proto.CompactTextString(m) +} +func (*AnalyzeDataSourceRiskDetails_KAnonymityResult) ProtoMessage() {} +func (*AnalyzeDataSourceRiskDetails_KAnonymityResult) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{31, 2} +} + +func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult) GetEquivalenceClassHistogramBuckets() []*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket { + if m != nil { + return m.EquivalenceClassHistogramBuckets + } + return nil +} + +// The set of columns' values that share the same ldiversity value +type AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass struct { + // Set of values defining the equivalence class. One value per + // quasi-identifier column in the original KAnonymity metric message. + // The order is always the same as the original request. + QuasiIdsValues []*Value `protobuf:"bytes,1,rep,name=quasi_ids_values,json=quasiIdsValues" json:"quasi_ids_values,omitempty"` + // Size of the equivalence class, for example number of rows with the + // above set of values. + EquivalenceClassSize int64 `protobuf:"varint,2,opt,name=equivalence_class_size,json=equivalenceClassSize" json:"equivalence_class_size,omitempty"` +} + +func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass) Reset() { + *m = AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass{} +} +func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass) String() string { + return proto.CompactTextString(m) +} +func (*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass) ProtoMessage() {} +func (*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{31, 2, 0} +} + +func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass) GetQuasiIdsValues() []*Value { + if m != nil { + return m.QuasiIdsValues + } + return nil +} + +func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass) GetEquivalenceClassSize() int64 { + if m != nil { + return m.EquivalenceClassSize + } + return 0 +} + +type AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket struct { + // Lower bound on the size of the equivalence classes in this bucket. + EquivalenceClassSizeLowerBound int64 `protobuf:"varint,1,opt,name=equivalence_class_size_lower_bound,json=equivalenceClassSizeLowerBound" json:"equivalence_class_size_lower_bound,omitempty"` + // Upper bound on the size of the equivalence classes in this bucket. + EquivalenceClassSizeUpperBound int64 `protobuf:"varint,2,opt,name=equivalence_class_size_upper_bound,json=equivalenceClassSizeUpperBound" json:"equivalence_class_size_upper_bound,omitempty"` + // Total number of equivalence classes in this bucket. + BucketSize int64 `protobuf:"varint,3,opt,name=bucket_size,json=bucketSize" json:"bucket_size,omitempty"` + // Sample of equivalence classes in this bucket. The total number of + // classes returned per bucket is capped at 20. + BucketValues []*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass `protobuf:"bytes,4,rep,name=bucket_values,json=bucketValues" json:"bucket_values,omitempty"` + // Total number of distinct equivalence classes in this bucket. + BucketValueCount int64 `protobuf:"varint,5,opt,name=bucket_value_count,json=bucketValueCount" json:"bucket_value_count,omitempty"` +} + +func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) Reset() { + *m = AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket{} +} +func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) String() string { + return proto.CompactTextString(m) +} +func (*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) ProtoMessage() {} +func (*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{31, 2, 1} +} + +func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) GetEquivalenceClassSizeLowerBound() int64 { + if m != nil { + return m.EquivalenceClassSizeLowerBound + } + return 0 +} + +func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) GetEquivalenceClassSizeUpperBound() int64 { + if m != nil { + return m.EquivalenceClassSizeUpperBound + } + return 0 +} + +func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) GetBucketSize() int64 { + if m != nil { + return m.BucketSize + } + return 0 +} + +func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) GetBucketValues() []*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass { + if m != nil { + return m.BucketValues + } + return nil +} + +func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) GetBucketValueCount() int64 { + if m != nil { + return m.BucketValueCount + } + return 0 +} + +// Result of the l-diversity computation. +type AnalyzeDataSourceRiskDetails_LDiversityResult struct { + // Histogram of l-diversity equivalence class sensitive value frequencies. + SensitiveValueFrequencyHistogramBuckets []*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket `protobuf:"bytes,5,rep,name=sensitive_value_frequency_histogram_buckets,json=sensitiveValueFrequencyHistogramBuckets" json:"sensitive_value_frequency_histogram_buckets,omitempty"` +} + +func (m *AnalyzeDataSourceRiskDetails_LDiversityResult) Reset() { + *m = AnalyzeDataSourceRiskDetails_LDiversityResult{} +} +func (m *AnalyzeDataSourceRiskDetails_LDiversityResult) String() string { + return proto.CompactTextString(m) +} +func (*AnalyzeDataSourceRiskDetails_LDiversityResult) ProtoMessage() {} +func (*AnalyzeDataSourceRiskDetails_LDiversityResult) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{31, 3} +} + +func (m *AnalyzeDataSourceRiskDetails_LDiversityResult) GetSensitiveValueFrequencyHistogramBuckets() []*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket { + if m != nil { + return m.SensitiveValueFrequencyHistogramBuckets + } + return nil +} + +// The set of columns' values that share the same ldiversity value. +type AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass struct { + // Quasi-identifier values defining the k-anonymity equivalence + // class. The order is always the same as the original request. + QuasiIdsValues []*Value `protobuf:"bytes,1,rep,name=quasi_ids_values,json=quasiIdsValues" json:"quasi_ids_values,omitempty"` + // Size of the k-anonymity equivalence class. + EquivalenceClassSize int64 `protobuf:"varint,2,opt,name=equivalence_class_size,json=equivalenceClassSize" json:"equivalence_class_size,omitempty"` + // Number of distinct sensitive values in this equivalence class. + NumDistinctSensitiveValues int64 `protobuf:"varint,3,opt,name=num_distinct_sensitive_values,json=numDistinctSensitiveValues" json:"num_distinct_sensitive_values,omitempty"` + // Estimated frequencies of top sensitive values. + TopSensitiveValues []*ValueFrequency `protobuf:"bytes,4,rep,name=top_sensitive_values,json=topSensitiveValues" json:"top_sensitive_values,omitempty"` +} + +func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass) Reset() { + *m = AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass{} +} +func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass) String() string { + return proto.CompactTextString(m) +} +func (*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass) ProtoMessage() {} +func (*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{31, 3, 0} +} + +func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass) GetQuasiIdsValues() []*Value { + if m != nil { + return m.QuasiIdsValues + } + return nil +} + +func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass) GetEquivalenceClassSize() int64 { + if m != nil { + return m.EquivalenceClassSize + } + return 0 +} + +func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass) GetNumDistinctSensitiveValues() int64 { + if m != nil { + return m.NumDistinctSensitiveValues + } + return 0 +} + +func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass) GetTopSensitiveValues() []*ValueFrequency { + if m != nil { + return m.TopSensitiveValues + } + return nil +} + +type AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket struct { + // Lower bound on the sensitive value frequencies of the equivalence + // classes in this bucket. + SensitiveValueFrequencyLowerBound int64 `protobuf:"varint,1,opt,name=sensitive_value_frequency_lower_bound,json=sensitiveValueFrequencyLowerBound" json:"sensitive_value_frequency_lower_bound,omitempty"` + // Upper bound on the sensitive value frequencies of the equivalence + // classes in this bucket. + SensitiveValueFrequencyUpperBound int64 `protobuf:"varint,2,opt,name=sensitive_value_frequency_upper_bound,json=sensitiveValueFrequencyUpperBound" json:"sensitive_value_frequency_upper_bound,omitempty"` + // Total number of equivalence classes in this bucket. + BucketSize int64 `protobuf:"varint,3,opt,name=bucket_size,json=bucketSize" json:"bucket_size,omitempty"` + // Sample of equivalence classes in this bucket. The total number of + // classes returned per bucket is capped at 20. + BucketValues []*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass `protobuf:"bytes,4,rep,name=bucket_values,json=bucketValues" json:"bucket_values,omitempty"` + // Total number of distinct equivalence classes in this bucket. + BucketValueCount int64 `protobuf:"varint,5,opt,name=bucket_value_count,json=bucketValueCount" json:"bucket_value_count,omitempty"` +} + +func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) Reset() { + *m = AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket{} +} +func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) String() string { + return proto.CompactTextString(m) +} +func (*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) ProtoMessage() {} +func (*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{31, 3, 1} +} + +func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) GetSensitiveValueFrequencyLowerBound() int64 { + if m != nil { + return m.SensitiveValueFrequencyLowerBound + } + return 0 +} + +func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) GetSensitiveValueFrequencyUpperBound() int64 { + if m != nil { + return m.SensitiveValueFrequencyUpperBound + } + return 0 +} + +func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) GetBucketSize() int64 { + if m != nil { + return m.BucketSize + } + return 0 +} + +func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) GetBucketValues() []*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass { + if m != nil { + return m.BucketValues + } + return nil +} + +func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) GetBucketValueCount() int64 { + if m != nil { + return m.BucketValueCount + } + return 0 +} + +// Result of the reidentifiability analysis. Note that these results are an +// estimation, not exact values. +type AnalyzeDataSourceRiskDetails_KMapEstimationResult struct { + // The intervals [min_anonymity, max_anonymity] do not overlap. If a value + // doesn't correspond to any such interval, the associated frequency is + // zero. For example, the following records: + // {min_anonymity: 1, max_anonymity: 1, frequency: 17} + // {min_anonymity: 2, max_anonymity: 3, frequency: 42} + // {min_anonymity: 5, max_anonymity: 10, frequency: 99} + // mean that there are no record with an estimated anonymity of 4, 5, or + // larger than 10. + KMapEstimationHistogram []*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket `protobuf:"bytes,1,rep,name=k_map_estimation_histogram,json=kMapEstimationHistogram" json:"k_map_estimation_histogram,omitempty"` +} + +func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult) Reset() { + *m = AnalyzeDataSourceRiskDetails_KMapEstimationResult{} +} +func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult) String() string { + return proto.CompactTextString(m) +} +func (*AnalyzeDataSourceRiskDetails_KMapEstimationResult) ProtoMessage() {} +func (*AnalyzeDataSourceRiskDetails_KMapEstimationResult) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{31, 4} +} + +func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult) GetKMapEstimationHistogram() []*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket { + if m != nil { + return m.KMapEstimationHistogram + } + return nil +} + +// A tuple of values for the quasi-identifier columns. +type AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues struct { + // The quasi-identifier values. + QuasiIdsValues []*Value `protobuf:"bytes,1,rep,name=quasi_ids_values,json=quasiIdsValues" json:"quasi_ids_values,omitempty"` + // The estimated anonymity for these quasi-identifier values. + EstimatedAnonymity int64 `protobuf:"varint,2,opt,name=estimated_anonymity,json=estimatedAnonymity" json:"estimated_anonymity,omitempty"` +} + +func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues) Reset() { + *m = AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues{} +} +func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues) String() string { + return proto.CompactTextString(m) +} +func (*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues) ProtoMessage() {} +func (*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{31, 4, 0} +} + +func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues) GetQuasiIdsValues() []*Value { + if m != nil { + return m.QuasiIdsValues + } + return nil +} + +func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues) GetEstimatedAnonymity() int64 { + if m != nil { + return m.EstimatedAnonymity + } + return 0 +} + +// A KMapEstimationHistogramBucket message with the following values: +// min_anonymity: 3 +// max_anonymity: 5 +// frequency: 42 +// means that there are 42 records whose quasi-identifier values correspond +// to 3, 4 or 5 people in the overlying population. An important particular +// case is when min_anonymity = max_anonymity = 1: the frequency field then +// corresponds to the number of uniquely identifiable records. +type AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket struct { + // Always positive. + MinAnonymity int64 `protobuf:"varint,1,opt,name=min_anonymity,json=minAnonymity" json:"min_anonymity,omitempty"` + // Always greater than or equal to min_anonymity. + MaxAnonymity int64 `protobuf:"varint,2,opt,name=max_anonymity,json=maxAnonymity" json:"max_anonymity,omitempty"` + // Number of records within these anonymity bounds. + BucketSize int64 `protobuf:"varint,5,opt,name=bucket_size,json=bucketSize" json:"bucket_size,omitempty"` + // Sample of quasi-identifier tuple values in this bucket. The total + // number of classes returned per bucket is capped at 20. + BucketValues []*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues `protobuf:"bytes,6,rep,name=bucket_values,json=bucketValues" json:"bucket_values,omitempty"` + // Total number of distinct quasi-identifier tuple values in this bucket. + BucketValueCount int64 `protobuf:"varint,7,opt,name=bucket_value_count,json=bucketValueCount" json:"bucket_value_count,omitempty"` +} + +func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) Reset() { + *m = AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket{} +} +func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) String() string { + return proto.CompactTextString(m) +} +func (*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) ProtoMessage() { +} +func (*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{31, 4, 1} +} + +func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) GetMinAnonymity() int64 { + if m != nil { + return m.MinAnonymity + } + return 0 +} + +func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) GetMaxAnonymity() int64 { + if m != nil { + return m.MaxAnonymity + } + return 0 +} + +func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) GetBucketSize() int64 { + if m != nil { + return m.BucketSize + } + return 0 +} + +func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) GetBucketValues() []*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues { + if m != nil { + return m.BucketValues + } + return nil +} + +func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) GetBucketValueCount() int64 { + if m != nil { + return m.BucketValueCount + } + return 0 +} + +// A value of a field, including its frequency. +type ValueFrequency struct { + // A value contained in the field in question. + Value *Value `protobuf:"bytes,1,opt,name=value" json:"value,omitempty"` + // How many times the value is contained in the field. + Count int64 `protobuf:"varint,2,opt,name=count" json:"count,omitempty"` +} + +func (m *ValueFrequency) Reset() { *m = ValueFrequency{} } +func (m *ValueFrequency) String() string { return proto.CompactTextString(m) } +func (*ValueFrequency) ProtoMessage() {} +func (*ValueFrequency) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} } + +func (m *ValueFrequency) GetValue() *Value { + if m != nil { + return m.Value + } + return nil +} + +func (m *ValueFrequency) GetCount() int64 { + if m != nil { + return m.Count + } + return 0 +} + +// Set of primitive values supported by the system. +// Note that for the purposes of inspection or transformation, the number +// of bytes considered to comprise a 'Value' is based on its representation +// as a UTF-8 encoded string. For example, if 'integer_value' is set to +// 123456789, the number of bytes would be counted as 9, even though an +// int64 only holds up to 8 bytes of data. +type Value struct { + // Types that are valid to be assigned to Type: + // *Value_IntegerValue + // *Value_FloatValue + // *Value_StringValue + // *Value_BooleanValue + // *Value_TimestampValue + // *Value_TimeValue + // *Value_DateValue + // *Value_DayOfWeekValue + Type isValue_Type `protobuf_oneof:"type"` +} + +func (m *Value) Reset() { *m = Value{} } +func (m *Value) String() string { return proto.CompactTextString(m) } +func (*Value) ProtoMessage() {} +func (*Value) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} } + +type isValue_Type interface { + isValue_Type() +} + +type Value_IntegerValue struct { + IntegerValue int64 `protobuf:"varint,1,opt,name=integer_value,json=integerValue,oneof"` +} +type Value_FloatValue struct { + FloatValue float64 `protobuf:"fixed64,2,opt,name=float_value,json=floatValue,oneof"` +} +type Value_StringValue struct { + StringValue string `protobuf:"bytes,3,opt,name=string_value,json=stringValue,oneof"` +} +type Value_BooleanValue struct { + BooleanValue bool `protobuf:"varint,4,opt,name=boolean_value,json=booleanValue,oneof"` +} +type Value_TimestampValue struct { + TimestampValue *google_protobuf1.Timestamp `protobuf:"bytes,5,opt,name=timestamp_value,json=timestampValue,oneof"` +} +type Value_TimeValue struct { + TimeValue *google_type2.TimeOfDay `protobuf:"bytes,6,opt,name=time_value,json=timeValue,oneof"` +} +type Value_DateValue struct { + DateValue *google_type.Date `protobuf:"bytes,7,opt,name=date_value,json=dateValue,oneof"` +} +type Value_DayOfWeekValue struct { + DayOfWeekValue google_type1.DayOfWeek `protobuf:"varint,8,opt,name=day_of_week_value,json=dayOfWeekValue,enum=google.type.DayOfWeek,oneof"` +} + +func (*Value_IntegerValue) isValue_Type() {} +func (*Value_FloatValue) isValue_Type() {} +func (*Value_StringValue) isValue_Type() {} +func (*Value_BooleanValue) isValue_Type() {} +func (*Value_TimestampValue) isValue_Type() {} +func (*Value_TimeValue) isValue_Type() {} +func (*Value_DateValue) isValue_Type() {} +func (*Value_DayOfWeekValue) isValue_Type() {} + +func (m *Value) GetType() isValue_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *Value) GetIntegerValue() int64 { + if x, ok := m.GetType().(*Value_IntegerValue); ok { + return x.IntegerValue + } + return 0 +} + +func (m *Value) GetFloatValue() float64 { + if x, ok := m.GetType().(*Value_FloatValue); ok { + return x.FloatValue + } + return 0 +} + +func (m *Value) GetStringValue() string { + if x, ok := m.GetType().(*Value_StringValue); ok { + return x.StringValue + } + return "" +} + +func (m *Value) GetBooleanValue() bool { + if x, ok := m.GetType().(*Value_BooleanValue); ok { + return x.BooleanValue + } + return false +} + +func (m *Value) GetTimestampValue() *google_protobuf1.Timestamp { + if x, ok := m.GetType().(*Value_TimestampValue); ok { + return x.TimestampValue + } + return nil +} + +func (m *Value) GetTimeValue() *google_type2.TimeOfDay { + if x, ok := m.GetType().(*Value_TimeValue); ok { + return x.TimeValue + } + return nil +} + +func (m *Value) GetDateValue() *google_type.Date { + if x, ok := m.GetType().(*Value_DateValue); ok { + return x.DateValue + } + return nil +} + +func (m *Value) GetDayOfWeekValue() google_type1.DayOfWeek { + if x, ok := m.GetType().(*Value_DayOfWeekValue); ok { + return x.DayOfWeekValue + } + return google_type1.DayOfWeek_DAY_OF_WEEK_UNSPECIFIED +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Value) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Value_OneofMarshaler, _Value_OneofUnmarshaler, _Value_OneofSizer, []interface{}{ + (*Value_IntegerValue)(nil), + (*Value_FloatValue)(nil), + (*Value_StringValue)(nil), + (*Value_BooleanValue)(nil), + (*Value_TimestampValue)(nil), + (*Value_TimeValue)(nil), + (*Value_DateValue)(nil), + (*Value_DayOfWeekValue)(nil), + } +} + +func _Value_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Value) + // type + switch x := m.Type.(type) { + case *Value_IntegerValue: + b.EncodeVarint(1<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.IntegerValue)) + case *Value_FloatValue: + b.EncodeVarint(2<<3 | proto.WireFixed64) + b.EncodeFixed64(math.Float64bits(x.FloatValue)) + case *Value_StringValue: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeStringBytes(x.StringValue) + case *Value_BooleanValue: + t := uint64(0) + if x.BooleanValue { + t = 1 + } + b.EncodeVarint(4<<3 | proto.WireVarint) + b.EncodeVarint(t) + case *Value_TimestampValue: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.TimestampValue); err != nil { + return err + } + case *Value_TimeValue: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.TimeValue); err != nil { + return err + } + case *Value_DateValue: + b.EncodeVarint(7<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DateValue); err != nil { + return err + } + case *Value_DayOfWeekValue: + b.EncodeVarint(8<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.DayOfWeekValue)) + case nil: + default: + return fmt.Errorf("Value.Type has unexpected type %T", x) + } + return nil +} + +func _Value_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Value) + switch tag { + case 1: // type.integer_value + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Type = &Value_IntegerValue{int64(x)} + return true, err + case 2: // type.float_value + if wire != proto.WireFixed64 { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeFixed64() + m.Type = &Value_FloatValue{math.Float64frombits(x)} + return true, err + case 3: // type.string_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Type = &Value_StringValue{x} + return true, err + case 4: // type.boolean_value + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Type = &Value_BooleanValue{x != 0} + return true, err + case 5: // type.timestamp_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf1.Timestamp) + err := b.DecodeMessage(msg) + m.Type = &Value_TimestampValue{msg} + return true, err + case 6: // type.time_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_type2.TimeOfDay) + err := b.DecodeMessage(msg) + m.Type = &Value_TimeValue{msg} + return true, err + case 7: // type.date_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_type.Date) + err := b.DecodeMessage(msg) + m.Type = &Value_DateValue{msg} + return true, err + case 8: // type.day_of_week_value + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Type = &Value_DayOfWeekValue{google_type1.DayOfWeek(x)} + return true, err + default: + return false, nil + } +} + +func _Value_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Value) + // type + switch x := m.Type.(type) { + case *Value_IntegerValue: + n += proto.SizeVarint(1<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.IntegerValue)) + case *Value_FloatValue: + n += proto.SizeVarint(2<<3 | proto.WireFixed64) + n += 8 + case *Value_StringValue: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.StringValue))) + n += len(x.StringValue) + case *Value_BooleanValue: + n += proto.SizeVarint(4<<3 | proto.WireVarint) + n += 1 + case *Value_TimestampValue: + s := proto.Size(x.TimestampValue) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Value_TimeValue: + s := proto.Size(x.TimeValue) + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Value_DateValue: + s := proto.Size(x.DateValue) + n += proto.SizeVarint(7<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Value_DayOfWeekValue: + n += proto.SizeVarint(8<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.DayOfWeekValue)) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Message for infoType-dependent details parsed from quote. +type QuoteInfo struct { + // Object representation of the quote. + // + // Types that are valid to be assigned to ParsedQuote: + // *QuoteInfo_DateTime + ParsedQuote isQuoteInfo_ParsedQuote `protobuf_oneof:"parsed_quote"` +} + +func (m *QuoteInfo) Reset() { *m = QuoteInfo{} } +func (m *QuoteInfo) String() string { return proto.CompactTextString(m) } +func (*QuoteInfo) ProtoMessage() {} +func (*QuoteInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} } + +type isQuoteInfo_ParsedQuote interface { + isQuoteInfo_ParsedQuote() +} + +type QuoteInfo_DateTime struct { + DateTime *DateTime `protobuf:"bytes,2,opt,name=date_time,json=dateTime,oneof"` +} + +func (*QuoteInfo_DateTime) isQuoteInfo_ParsedQuote() {} + +func (m *QuoteInfo) GetParsedQuote() isQuoteInfo_ParsedQuote { + if m != nil { + return m.ParsedQuote + } + return nil +} + +func (m *QuoteInfo) GetDateTime() *DateTime { + if x, ok := m.GetParsedQuote().(*QuoteInfo_DateTime); ok { + return x.DateTime + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*QuoteInfo) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _QuoteInfo_OneofMarshaler, _QuoteInfo_OneofUnmarshaler, _QuoteInfo_OneofSizer, []interface{}{ + (*QuoteInfo_DateTime)(nil), + } +} + +func _QuoteInfo_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*QuoteInfo) + // parsed_quote + switch x := m.ParsedQuote.(type) { + case *QuoteInfo_DateTime: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DateTime); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("QuoteInfo.ParsedQuote has unexpected type %T", x) + } + return nil +} + +func _QuoteInfo_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*QuoteInfo) + switch tag { + case 2: // parsed_quote.date_time + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(DateTime) + err := b.DecodeMessage(msg) + m.ParsedQuote = &QuoteInfo_DateTime{msg} + return true, err + default: + return false, nil + } +} + +func _QuoteInfo_OneofSizer(msg proto.Message) (n int) { + m := msg.(*QuoteInfo) + // parsed_quote + switch x := m.ParsedQuote.(type) { + case *QuoteInfo_DateTime: + s := proto.Size(x.DateTime) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Message for a date time object. +type DateTime struct { + // One or more of the following must be set. All fields are optional, but + // when set must be valid date or time values. + Date *google_type.Date `protobuf:"bytes,1,opt,name=date" json:"date,omitempty"` + DayOfWeek google_type1.DayOfWeek `protobuf:"varint,2,opt,name=day_of_week,json=dayOfWeek,enum=google.type.DayOfWeek" json:"day_of_week,omitempty"` + Time *google_type2.TimeOfDay `protobuf:"bytes,3,opt,name=time" json:"time,omitempty"` + TimeZone *DateTime_TimeZone `protobuf:"bytes,4,opt,name=time_zone,json=timeZone" json:"time_zone,omitempty"` +} + +func (m *DateTime) Reset() { *m = DateTime{} } +func (m *DateTime) String() string { return proto.CompactTextString(m) } +func (*DateTime) ProtoMessage() {} +func (*DateTime) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} } + +func (m *DateTime) GetDate() *google_type.Date { + if m != nil { + return m.Date + } + return nil +} + +func (m *DateTime) GetDayOfWeek() google_type1.DayOfWeek { + if m != nil { + return m.DayOfWeek + } + return google_type1.DayOfWeek_DAY_OF_WEEK_UNSPECIFIED +} + +func (m *DateTime) GetTime() *google_type2.TimeOfDay { + if m != nil { + return m.Time + } + return nil +} + +func (m *DateTime) GetTimeZone() *DateTime_TimeZone { + if m != nil { + return m.TimeZone + } + return nil +} + +type DateTime_TimeZone struct { + // Set only if the offset can be determined. Positive for time ahead of UTC. + // E.g. For "UTC-9", this value is -540. + OffsetMinutes int32 `protobuf:"varint,1,opt,name=offset_minutes,json=offsetMinutes" json:"offset_minutes,omitempty"` +} + +func (m *DateTime_TimeZone) Reset() { *m = DateTime_TimeZone{} } +func (m *DateTime_TimeZone) String() string { return proto.CompactTextString(m) } +func (*DateTime_TimeZone) ProtoMessage() {} +func (*DateTime_TimeZone) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35, 0} } + +func (m *DateTime_TimeZone) GetOffsetMinutes() int32 { + if m != nil { + return m.OffsetMinutes + } + return 0 +} + +// The configuration that controls how the data will change. +type DeidentifyConfig struct { + // Types that are valid to be assigned to Transformation: + // *DeidentifyConfig_InfoTypeTransformations + // *DeidentifyConfig_RecordTransformations + Transformation isDeidentifyConfig_Transformation `protobuf_oneof:"transformation"` +} + +func (m *DeidentifyConfig) Reset() { *m = DeidentifyConfig{} } +func (m *DeidentifyConfig) String() string { return proto.CompactTextString(m) } +func (*DeidentifyConfig) ProtoMessage() {} +func (*DeidentifyConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} } + +type isDeidentifyConfig_Transformation interface { + isDeidentifyConfig_Transformation() +} + +type DeidentifyConfig_InfoTypeTransformations struct { + InfoTypeTransformations *InfoTypeTransformations `protobuf:"bytes,1,opt,name=info_type_transformations,json=infoTypeTransformations,oneof"` +} +type DeidentifyConfig_RecordTransformations struct { + RecordTransformations *RecordTransformations `protobuf:"bytes,2,opt,name=record_transformations,json=recordTransformations,oneof"` +} + +func (*DeidentifyConfig_InfoTypeTransformations) isDeidentifyConfig_Transformation() {} +func (*DeidentifyConfig_RecordTransformations) isDeidentifyConfig_Transformation() {} + +func (m *DeidentifyConfig) GetTransformation() isDeidentifyConfig_Transformation { + if m != nil { + return m.Transformation + } + return nil +} + +func (m *DeidentifyConfig) GetInfoTypeTransformations() *InfoTypeTransformations { + if x, ok := m.GetTransformation().(*DeidentifyConfig_InfoTypeTransformations); ok { + return x.InfoTypeTransformations + } + return nil +} + +func (m *DeidentifyConfig) GetRecordTransformations() *RecordTransformations { + if x, ok := m.GetTransformation().(*DeidentifyConfig_RecordTransformations); ok { + return x.RecordTransformations + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*DeidentifyConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _DeidentifyConfig_OneofMarshaler, _DeidentifyConfig_OneofUnmarshaler, _DeidentifyConfig_OneofSizer, []interface{}{ + (*DeidentifyConfig_InfoTypeTransformations)(nil), + (*DeidentifyConfig_RecordTransformations)(nil), + } +} + +func _DeidentifyConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*DeidentifyConfig) + // transformation + switch x := m.Transformation.(type) { + case *DeidentifyConfig_InfoTypeTransformations: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.InfoTypeTransformations); err != nil { + return err + } + case *DeidentifyConfig_RecordTransformations: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RecordTransformations); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("DeidentifyConfig.Transformation has unexpected type %T", x) + } + return nil +} + +func _DeidentifyConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*DeidentifyConfig) + switch tag { + case 1: // transformation.info_type_transformations + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(InfoTypeTransformations) + err := b.DecodeMessage(msg) + m.Transformation = &DeidentifyConfig_InfoTypeTransformations{msg} + return true, err + case 2: // transformation.record_transformations + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(RecordTransformations) + err := b.DecodeMessage(msg) + m.Transformation = &DeidentifyConfig_RecordTransformations{msg} + return true, err + default: + return false, nil + } +} + +func _DeidentifyConfig_OneofSizer(msg proto.Message) (n int) { + m := msg.(*DeidentifyConfig) + // transformation + switch x := m.Transformation.(type) { + case *DeidentifyConfig_InfoTypeTransformations: + s := proto.Size(x.InfoTypeTransformations) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *DeidentifyConfig_RecordTransformations: + s := proto.Size(x.RecordTransformations) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A rule for transforming a value. +type PrimitiveTransformation struct { + // Types that are valid to be assigned to Transformation: + // *PrimitiveTransformation_ReplaceConfig + // *PrimitiveTransformation_RedactConfig + // *PrimitiveTransformation_CharacterMaskConfig + // *PrimitiveTransformation_CryptoReplaceFfxFpeConfig + // *PrimitiveTransformation_FixedSizeBucketingConfig + // *PrimitiveTransformation_BucketingConfig + // *PrimitiveTransformation_ReplaceWithInfoTypeConfig + // *PrimitiveTransformation_TimePartConfig + // *PrimitiveTransformation_CryptoHashConfig + // *PrimitiveTransformation_DateShiftConfig + Transformation isPrimitiveTransformation_Transformation `protobuf_oneof:"transformation"` +} + +func (m *PrimitiveTransformation) Reset() { *m = PrimitiveTransformation{} } +func (m *PrimitiveTransformation) String() string { return proto.CompactTextString(m) } +func (*PrimitiveTransformation) ProtoMessage() {} +func (*PrimitiveTransformation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} } + +type isPrimitiveTransformation_Transformation interface { + isPrimitiveTransformation_Transformation() +} + +type PrimitiveTransformation_ReplaceConfig struct { + ReplaceConfig *ReplaceValueConfig `protobuf:"bytes,1,opt,name=replace_config,json=replaceConfig,oneof"` +} +type PrimitiveTransformation_RedactConfig struct { + RedactConfig *RedactConfig `protobuf:"bytes,2,opt,name=redact_config,json=redactConfig,oneof"` +} +type PrimitiveTransformation_CharacterMaskConfig struct { + CharacterMaskConfig *CharacterMaskConfig `protobuf:"bytes,3,opt,name=character_mask_config,json=characterMaskConfig,oneof"` +} +type PrimitiveTransformation_CryptoReplaceFfxFpeConfig struct { + CryptoReplaceFfxFpeConfig *CryptoReplaceFfxFpeConfig `protobuf:"bytes,4,opt,name=crypto_replace_ffx_fpe_config,json=cryptoReplaceFfxFpeConfig,oneof"` +} +type PrimitiveTransformation_FixedSizeBucketingConfig struct { + FixedSizeBucketingConfig *FixedSizeBucketingConfig `protobuf:"bytes,5,opt,name=fixed_size_bucketing_config,json=fixedSizeBucketingConfig,oneof"` +} +type PrimitiveTransformation_BucketingConfig struct { + BucketingConfig *BucketingConfig `protobuf:"bytes,6,opt,name=bucketing_config,json=bucketingConfig,oneof"` +} +type PrimitiveTransformation_ReplaceWithInfoTypeConfig struct { + ReplaceWithInfoTypeConfig *ReplaceWithInfoTypeConfig `protobuf:"bytes,7,opt,name=replace_with_info_type_config,json=replaceWithInfoTypeConfig,oneof"` +} +type PrimitiveTransformation_TimePartConfig struct { + TimePartConfig *TimePartConfig `protobuf:"bytes,8,opt,name=time_part_config,json=timePartConfig,oneof"` +} +type PrimitiveTransformation_CryptoHashConfig struct { + CryptoHashConfig *CryptoHashConfig `protobuf:"bytes,9,opt,name=crypto_hash_config,json=cryptoHashConfig,oneof"` +} +type PrimitiveTransformation_DateShiftConfig struct { + DateShiftConfig *DateShiftConfig `protobuf:"bytes,11,opt,name=date_shift_config,json=dateShiftConfig,oneof"` +} + +func (*PrimitiveTransformation_ReplaceConfig) isPrimitiveTransformation_Transformation() {} +func (*PrimitiveTransformation_RedactConfig) isPrimitiveTransformation_Transformation() {} +func (*PrimitiveTransformation_CharacterMaskConfig) isPrimitiveTransformation_Transformation() {} +func (*PrimitiveTransformation_CryptoReplaceFfxFpeConfig) isPrimitiveTransformation_Transformation() {} +func (*PrimitiveTransformation_FixedSizeBucketingConfig) isPrimitiveTransformation_Transformation() {} +func (*PrimitiveTransformation_BucketingConfig) isPrimitiveTransformation_Transformation() {} +func (*PrimitiveTransformation_ReplaceWithInfoTypeConfig) isPrimitiveTransformation_Transformation() {} +func (*PrimitiveTransformation_TimePartConfig) isPrimitiveTransformation_Transformation() {} +func (*PrimitiveTransformation_CryptoHashConfig) isPrimitiveTransformation_Transformation() {} +func (*PrimitiveTransformation_DateShiftConfig) isPrimitiveTransformation_Transformation() {} + +func (m *PrimitiveTransformation) GetTransformation() isPrimitiveTransformation_Transformation { + if m != nil { + return m.Transformation + } + return nil +} + +func (m *PrimitiveTransformation) GetReplaceConfig() *ReplaceValueConfig { + if x, ok := m.GetTransformation().(*PrimitiveTransformation_ReplaceConfig); ok { + return x.ReplaceConfig + } + return nil +} + +func (m *PrimitiveTransformation) GetRedactConfig() *RedactConfig { + if x, ok := m.GetTransformation().(*PrimitiveTransformation_RedactConfig); ok { + return x.RedactConfig + } + return nil +} + +func (m *PrimitiveTransformation) GetCharacterMaskConfig() *CharacterMaskConfig { + if x, ok := m.GetTransformation().(*PrimitiveTransformation_CharacterMaskConfig); ok { + return x.CharacterMaskConfig + } + return nil +} + +func (m *PrimitiveTransformation) GetCryptoReplaceFfxFpeConfig() *CryptoReplaceFfxFpeConfig { + if x, ok := m.GetTransformation().(*PrimitiveTransformation_CryptoReplaceFfxFpeConfig); ok { + return x.CryptoReplaceFfxFpeConfig + } + return nil +} + +func (m *PrimitiveTransformation) GetFixedSizeBucketingConfig() *FixedSizeBucketingConfig { + if x, ok := m.GetTransformation().(*PrimitiveTransformation_FixedSizeBucketingConfig); ok { + return x.FixedSizeBucketingConfig + } + return nil +} + +func (m *PrimitiveTransformation) GetBucketingConfig() *BucketingConfig { + if x, ok := m.GetTransformation().(*PrimitiveTransformation_BucketingConfig); ok { + return x.BucketingConfig + } + return nil +} + +func (m *PrimitiveTransformation) GetReplaceWithInfoTypeConfig() *ReplaceWithInfoTypeConfig { + if x, ok := m.GetTransformation().(*PrimitiveTransformation_ReplaceWithInfoTypeConfig); ok { + return x.ReplaceWithInfoTypeConfig + } + return nil +} + +func (m *PrimitiveTransformation) GetTimePartConfig() *TimePartConfig { + if x, ok := m.GetTransformation().(*PrimitiveTransformation_TimePartConfig); ok { + return x.TimePartConfig + } + return nil +} + +func (m *PrimitiveTransformation) GetCryptoHashConfig() *CryptoHashConfig { + if x, ok := m.GetTransformation().(*PrimitiveTransformation_CryptoHashConfig); ok { + return x.CryptoHashConfig + } + return nil +} + +func (m *PrimitiveTransformation) GetDateShiftConfig() *DateShiftConfig { + if x, ok := m.GetTransformation().(*PrimitiveTransformation_DateShiftConfig); ok { + return x.DateShiftConfig + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*PrimitiveTransformation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _PrimitiveTransformation_OneofMarshaler, _PrimitiveTransformation_OneofUnmarshaler, _PrimitiveTransformation_OneofSizer, []interface{}{ + (*PrimitiveTransformation_ReplaceConfig)(nil), + (*PrimitiveTransformation_RedactConfig)(nil), + (*PrimitiveTransformation_CharacterMaskConfig)(nil), + (*PrimitiveTransformation_CryptoReplaceFfxFpeConfig)(nil), + (*PrimitiveTransformation_FixedSizeBucketingConfig)(nil), + (*PrimitiveTransformation_BucketingConfig)(nil), + (*PrimitiveTransformation_ReplaceWithInfoTypeConfig)(nil), + (*PrimitiveTransformation_TimePartConfig)(nil), + (*PrimitiveTransformation_CryptoHashConfig)(nil), + (*PrimitiveTransformation_DateShiftConfig)(nil), + } +} + +func _PrimitiveTransformation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*PrimitiveTransformation) + // transformation + switch x := m.Transformation.(type) { + case *PrimitiveTransformation_ReplaceConfig: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ReplaceConfig); err != nil { + return err + } + case *PrimitiveTransformation_RedactConfig: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RedactConfig); err != nil { + return err + } + case *PrimitiveTransformation_CharacterMaskConfig: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.CharacterMaskConfig); err != nil { + return err + } + case *PrimitiveTransformation_CryptoReplaceFfxFpeConfig: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.CryptoReplaceFfxFpeConfig); err != nil { + return err + } + case *PrimitiveTransformation_FixedSizeBucketingConfig: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.FixedSizeBucketingConfig); err != nil { + return err + } + case *PrimitiveTransformation_BucketingConfig: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.BucketingConfig); err != nil { + return err + } + case *PrimitiveTransformation_ReplaceWithInfoTypeConfig: + b.EncodeVarint(7<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ReplaceWithInfoTypeConfig); err != nil { + return err + } + case *PrimitiveTransformation_TimePartConfig: + b.EncodeVarint(8<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.TimePartConfig); err != nil { + return err + } + case *PrimitiveTransformation_CryptoHashConfig: + b.EncodeVarint(9<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.CryptoHashConfig); err != nil { + return err + } + case *PrimitiveTransformation_DateShiftConfig: + b.EncodeVarint(11<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DateShiftConfig); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("PrimitiveTransformation.Transformation has unexpected type %T", x) + } + return nil +} + +func _PrimitiveTransformation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*PrimitiveTransformation) + switch tag { + case 1: // transformation.replace_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ReplaceValueConfig) + err := b.DecodeMessage(msg) + m.Transformation = &PrimitiveTransformation_ReplaceConfig{msg} + return true, err + case 2: // transformation.redact_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(RedactConfig) + err := b.DecodeMessage(msg) + m.Transformation = &PrimitiveTransformation_RedactConfig{msg} + return true, err + case 3: // transformation.character_mask_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CharacterMaskConfig) + err := b.DecodeMessage(msg) + m.Transformation = &PrimitiveTransformation_CharacterMaskConfig{msg} + return true, err + case 4: // transformation.crypto_replace_ffx_fpe_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CryptoReplaceFfxFpeConfig) + err := b.DecodeMessage(msg) + m.Transformation = &PrimitiveTransformation_CryptoReplaceFfxFpeConfig{msg} + return true, err + case 5: // transformation.fixed_size_bucketing_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(FixedSizeBucketingConfig) + err := b.DecodeMessage(msg) + m.Transformation = &PrimitiveTransformation_FixedSizeBucketingConfig{msg} + return true, err + case 6: // transformation.bucketing_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(BucketingConfig) + err := b.DecodeMessage(msg) + m.Transformation = &PrimitiveTransformation_BucketingConfig{msg} + return true, err + case 7: // transformation.replace_with_info_type_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ReplaceWithInfoTypeConfig) + err := b.DecodeMessage(msg) + m.Transformation = &PrimitiveTransformation_ReplaceWithInfoTypeConfig{msg} + return true, err + case 8: // transformation.time_part_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TimePartConfig) + err := b.DecodeMessage(msg) + m.Transformation = &PrimitiveTransformation_TimePartConfig{msg} + return true, err + case 9: // transformation.crypto_hash_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CryptoHashConfig) + err := b.DecodeMessage(msg) + m.Transformation = &PrimitiveTransformation_CryptoHashConfig{msg} + return true, err + case 11: // transformation.date_shift_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(DateShiftConfig) + err := b.DecodeMessage(msg) + m.Transformation = &PrimitiveTransformation_DateShiftConfig{msg} + return true, err + default: + return false, nil + } +} + +func _PrimitiveTransformation_OneofSizer(msg proto.Message) (n int) { + m := msg.(*PrimitiveTransformation) + // transformation + switch x := m.Transformation.(type) { + case *PrimitiveTransformation_ReplaceConfig: + s := proto.Size(x.ReplaceConfig) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrimitiveTransformation_RedactConfig: + s := proto.Size(x.RedactConfig) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrimitiveTransformation_CharacterMaskConfig: + s := proto.Size(x.CharacterMaskConfig) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrimitiveTransformation_CryptoReplaceFfxFpeConfig: + s := proto.Size(x.CryptoReplaceFfxFpeConfig) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrimitiveTransformation_FixedSizeBucketingConfig: + s := proto.Size(x.FixedSizeBucketingConfig) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrimitiveTransformation_BucketingConfig: + s := proto.Size(x.BucketingConfig) + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrimitiveTransformation_ReplaceWithInfoTypeConfig: + s := proto.Size(x.ReplaceWithInfoTypeConfig) + n += proto.SizeVarint(7<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrimitiveTransformation_TimePartConfig: + s := proto.Size(x.TimePartConfig) + n += proto.SizeVarint(8<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrimitiveTransformation_CryptoHashConfig: + s := proto.Size(x.CryptoHashConfig) + n += proto.SizeVarint(9<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrimitiveTransformation_DateShiftConfig: + s := proto.Size(x.DateShiftConfig) + n += proto.SizeVarint(11<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// For use with `Date`, `Timestamp`, and `TimeOfDay`, extract or preserve a +// portion of the value. +type TimePartConfig struct { + PartToExtract TimePartConfig_TimePart `protobuf:"varint,1,opt,name=part_to_extract,json=partToExtract,enum=google.privacy.dlp.v2.TimePartConfig_TimePart" json:"part_to_extract,omitempty"` +} + +func (m *TimePartConfig) Reset() { *m = TimePartConfig{} } +func (m *TimePartConfig) String() string { return proto.CompactTextString(m) } +func (*TimePartConfig) ProtoMessage() {} +func (*TimePartConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} } + +func (m *TimePartConfig) GetPartToExtract() TimePartConfig_TimePart { + if m != nil { + return m.PartToExtract + } + return TimePartConfig_TIME_PART_UNSPECIFIED +} + +// Pseudonymization method that generates surrogates via cryptographic hashing. +// Uses SHA-256. +// The key size must be either 32 or 64 bytes. +// Outputs a 32 byte digest as an uppercase hex string +// (for example, 41D1567F7F99F1DC2A5FAB886DEE5BEE). +// Currently, only string and integer values can be hashed. +type CryptoHashConfig struct { + // The key used by the hash function. + CryptoKey *CryptoKey `protobuf:"bytes,1,opt,name=crypto_key,json=cryptoKey" json:"crypto_key,omitempty"` +} + +func (m *CryptoHashConfig) Reset() { *m = CryptoHashConfig{} } +func (m *CryptoHashConfig) String() string { return proto.CompactTextString(m) } +func (*CryptoHashConfig) ProtoMessage() {} +func (*CryptoHashConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} } + +func (m *CryptoHashConfig) GetCryptoKey() *CryptoKey { + if m != nil { + return m.CryptoKey + } + return nil +} + +// Replace each input value with a given `Value`. +type ReplaceValueConfig struct { + // Value to replace it with. + NewValue *Value `protobuf:"bytes,1,opt,name=new_value,json=newValue" json:"new_value,omitempty"` +} + +func (m *ReplaceValueConfig) Reset() { *m = ReplaceValueConfig{} } +func (m *ReplaceValueConfig) String() string { return proto.CompactTextString(m) } +func (*ReplaceValueConfig) ProtoMessage() {} +func (*ReplaceValueConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} } + +func (m *ReplaceValueConfig) GetNewValue() *Value { + if m != nil { + return m.NewValue + } + return nil +} + +// Replace each matching finding with the name of the info_type. +type ReplaceWithInfoTypeConfig struct { +} + +func (m *ReplaceWithInfoTypeConfig) Reset() { *m = ReplaceWithInfoTypeConfig{} } +func (m *ReplaceWithInfoTypeConfig) String() string { return proto.CompactTextString(m) } +func (*ReplaceWithInfoTypeConfig) ProtoMessage() {} +func (*ReplaceWithInfoTypeConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41} } + +// Redact a given value. For example, if used with an `InfoTypeTransformation` +// transforming PHONE_NUMBER, and input 'My phone number is 206-555-0123', the +// output would be 'My phone number is '. +type RedactConfig struct { +} + +func (m *RedactConfig) Reset() { *m = RedactConfig{} } +func (m *RedactConfig) String() string { return proto.CompactTextString(m) } +func (*RedactConfig) ProtoMessage() {} +func (*RedactConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{42} } + +// Characters to skip when doing deidentification of a value. These will be left +// alone and skipped. +type CharsToIgnore struct { + // Types that are valid to be assigned to Characters: + // *CharsToIgnore_CharactersToSkip + // *CharsToIgnore_CommonCharactersToIgnore + Characters isCharsToIgnore_Characters `protobuf_oneof:"characters"` +} + +func (m *CharsToIgnore) Reset() { *m = CharsToIgnore{} } +func (m *CharsToIgnore) String() string { return proto.CompactTextString(m) } +func (*CharsToIgnore) ProtoMessage() {} +func (*CharsToIgnore) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{43} } + +type isCharsToIgnore_Characters interface { + isCharsToIgnore_Characters() +} + +type CharsToIgnore_CharactersToSkip struct { + CharactersToSkip string `protobuf:"bytes,1,opt,name=characters_to_skip,json=charactersToSkip,oneof"` +} +type CharsToIgnore_CommonCharactersToIgnore struct { + CommonCharactersToIgnore CharsToIgnore_CommonCharsToIgnore `protobuf:"varint,2,opt,name=common_characters_to_ignore,json=commonCharactersToIgnore,enum=google.privacy.dlp.v2.CharsToIgnore_CommonCharsToIgnore,oneof"` +} + +func (*CharsToIgnore_CharactersToSkip) isCharsToIgnore_Characters() {} +func (*CharsToIgnore_CommonCharactersToIgnore) isCharsToIgnore_Characters() {} + +func (m *CharsToIgnore) GetCharacters() isCharsToIgnore_Characters { + if m != nil { + return m.Characters + } + return nil +} + +func (m *CharsToIgnore) GetCharactersToSkip() string { + if x, ok := m.GetCharacters().(*CharsToIgnore_CharactersToSkip); ok { + return x.CharactersToSkip + } + return "" +} + +func (m *CharsToIgnore) GetCommonCharactersToIgnore() CharsToIgnore_CommonCharsToIgnore { + if x, ok := m.GetCharacters().(*CharsToIgnore_CommonCharactersToIgnore); ok { + return x.CommonCharactersToIgnore + } + return CharsToIgnore_COMMON_CHARS_TO_IGNORE_UNSPECIFIED +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*CharsToIgnore) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _CharsToIgnore_OneofMarshaler, _CharsToIgnore_OneofUnmarshaler, _CharsToIgnore_OneofSizer, []interface{}{ + (*CharsToIgnore_CharactersToSkip)(nil), + (*CharsToIgnore_CommonCharactersToIgnore)(nil), + } +} + +func _CharsToIgnore_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*CharsToIgnore) + // characters + switch x := m.Characters.(type) { + case *CharsToIgnore_CharactersToSkip: + b.EncodeVarint(1<<3 | proto.WireBytes) + b.EncodeStringBytes(x.CharactersToSkip) + case *CharsToIgnore_CommonCharactersToIgnore: + b.EncodeVarint(2<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.CommonCharactersToIgnore)) + case nil: + default: + return fmt.Errorf("CharsToIgnore.Characters has unexpected type %T", x) + } + return nil +} + +func _CharsToIgnore_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*CharsToIgnore) + switch tag { + case 1: // characters.characters_to_skip + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Characters = &CharsToIgnore_CharactersToSkip{x} + return true, err + case 2: // characters.common_characters_to_ignore + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Characters = &CharsToIgnore_CommonCharactersToIgnore{CharsToIgnore_CommonCharsToIgnore(x)} + return true, err + default: + return false, nil + } +} + +func _CharsToIgnore_OneofSizer(msg proto.Message) (n int) { + m := msg.(*CharsToIgnore) + // characters + switch x := m.Characters.(type) { + case *CharsToIgnore_CharactersToSkip: + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.CharactersToSkip))) + n += len(x.CharactersToSkip) + case *CharsToIgnore_CommonCharactersToIgnore: + n += proto.SizeVarint(2<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.CommonCharactersToIgnore)) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Partially mask a string by replacing a given number of characters with a +// fixed character. Masking can start from the beginning or end of the string. +// This can be used on data of any type (numbers, longs, and so on) and when +// de-identifying structured data we'll attempt to preserve the original data's +// type. (This allows you to take a long like 123 and modify it to a string like +// **3. +type CharacterMaskConfig struct { + // Character to mask the sensitive values—for example, "*" for an + // alphabetic string such as name, or "0" for a numeric string such as ZIP + // code or credit card number. String must have length 1. If not supplied, we + // will default to "*" for strings, 0 for digits. + MaskingCharacter string `protobuf:"bytes,1,opt,name=masking_character,json=maskingCharacter" json:"masking_character,omitempty"` + // Number of characters to mask. If not set, all matching chars will be + // masked. Skipped characters do not count towards this tally. + NumberToMask int32 `protobuf:"varint,2,opt,name=number_to_mask,json=numberToMask" json:"number_to_mask,omitempty"` + // Mask characters in reverse order. For example, if `masking_character` is + // '0', number_to_mask is 14, and `reverse_order` is false, then + // 1234-5678-9012-3456 -> 00000000000000-3456 + // If `masking_character` is '*', `number_to_mask` is 3, and `reverse_order` + // is true, then 12345 -> 12*** + ReverseOrder bool `protobuf:"varint,3,opt,name=reverse_order,json=reverseOrder" json:"reverse_order,omitempty"` + // When masking a string, items in this list will be skipped when replacing. + // For example, if your string is 555-555-5555 and you ask us to skip `-` and + // mask 5 chars with * we would produce ***-*55-5555. + CharactersToIgnore []*CharsToIgnore `protobuf:"bytes,4,rep,name=characters_to_ignore,json=charactersToIgnore" json:"characters_to_ignore,omitempty"` +} + +func (m *CharacterMaskConfig) Reset() { *m = CharacterMaskConfig{} } +func (m *CharacterMaskConfig) String() string { return proto.CompactTextString(m) } +func (*CharacterMaskConfig) ProtoMessage() {} +func (*CharacterMaskConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{44} } + +func (m *CharacterMaskConfig) GetMaskingCharacter() string { + if m != nil { + return m.MaskingCharacter + } + return "" +} + +func (m *CharacterMaskConfig) GetNumberToMask() int32 { + if m != nil { + return m.NumberToMask + } + return 0 +} + +func (m *CharacterMaskConfig) GetReverseOrder() bool { + if m != nil { + return m.ReverseOrder + } + return false +} + +func (m *CharacterMaskConfig) GetCharactersToIgnore() []*CharsToIgnore { + if m != nil { + return m.CharactersToIgnore + } + return nil +} + +// Buckets values based on fixed size ranges. The +// Bucketing transformation can provide all of this functionality, +// but requires more configuration. This message is provided as a convenience to +// the user for simple bucketing strategies. +// +// The transformed value will be a hyphenated string of +// -, i.e if lower_bound = 10 and upper_bound = 20 +// all values that are within this bucket will be replaced with "10-20". +// +// This can be used on data of type: double, long. +// +// If the bound Value type differs from the type of data +// being transformed, we will first attempt converting the type of the data to +// be transformed to match the type of the bound before comparing. +type FixedSizeBucketingConfig struct { + // Lower bound value of buckets. All values less than `lower_bound` are + // grouped together into a single bucket; for example if `lower_bound` = 10, + // then all values less than 10 are replaced with the value “-10”. [Required]. + LowerBound *Value `protobuf:"bytes,1,opt,name=lower_bound,json=lowerBound" json:"lower_bound,omitempty"` + // Upper bound value of buckets. All values greater than upper_bound are + // grouped together into a single bucket; for example if `upper_bound` = 89, + // then all values greater than 89 are replaced with the value “89+”. + // [Required]. + UpperBound *Value `protobuf:"bytes,2,opt,name=upper_bound,json=upperBound" json:"upper_bound,omitempty"` + // Size of each bucket (except for minimum and maximum buckets). So if + // `lower_bound` = 10, `upper_bound` = 89, and `bucket_size` = 10, then the + // following buckets would be used: -10, 10-20, 20-30, 30-40, 40-50, 50-60, + // 60-70, 70-80, 80-89, 89+. Precision up to 2 decimals works. [Required]. + BucketSize float64 `protobuf:"fixed64,3,opt,name=bucket_size,json=bucketSize" json:"bucket_size,omitempty"` +} + +func (m *FixedSizeBucketingConfig) Reset() { *m = FixedSizeBucketingConfig{} } +func (m *FixedSizeBucketingConfig) String() string { return proto.CompactTextString(m) } +func (*FixedSizeBucketingConfig) ProtoMessage() {} +func (*FixedSizeBucketingConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{45} } + +func (m *FixedSizeBucketingConfig) GetLowerBound() *Value { + if m != nil { + return m.LowerBound + } + return nil +} + +func (m *FixedSizeBucketingConfig) GetUpperBound() *Value { + if m != nil { + return m.UpperBound + } + return nil +} + +func (m *FixedSizeBucketingConfig) GetBucketSize() float64 { + if m != nil { + return m.BucketSize + } + return 0 +} + +// Generalization function that buckets values based on ranges. The ranges and +// replacement values are dynamically provided by the user for custom behavior, +// such as 1-30 -> LOW 31-65 -> MEDIUM 66-100 -> HIGH +// This can be used on +// data of type: number, long, string, timestamp. +// If the bound `Value` type differs from the type of data being transformed, we +// will first attempt converting the type of the data to be transformed to match +// the type of the bound before comparing. +type BucketingConfig struct { + // Set of buckets. Ranges must be non-overlapping. + Buckets []*BucketingConfig_Bucket `protobuf:"bytes,1,rep,name=buckets" json:"buckets,omitempty"` +} + +func (m *BucketingConfig) Reset() { *m = BucketingConfig{} } +func (m *BucketingConfig) String() string { return proto.CompactTextString(m) } +func (*BucketingConfig) ProtoMessage() {} +func (*BucketingConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{46} } + +func (m *BucketingConfig) GetBuckets() []*BucketingConfig_Bucket { + if m != nil { + return m.Buckets + } + return nil +} + +// Bucket is represented as a range, along with replacement values. +type BucketingConfig_Bucket struct { + // Lower bound of the range, inclusive. Type should be the same as max if + // used. + Min *Value `protobuf:"bytes,1,opt,name=min" json:"min,omitempty"` + // Upper bound of the range, exclusive; type must match min. + Max *Value `protobuf:"bytes,2,opt,name=max" json:"max,omitempty"` + // Replacement value for this bucket. If not provided + // the default behavior will be to hyphenate the min-max range. + ReplacementValue *Value `protobuf:"bytes,3,opt,name=replacement_value,json=replacementValue" json:"replacement_value,omitempty"` +} + +func (m *BucketingConfig_Bucket) Reset() { *m = BucketingConfig_Bucket{} } +func (m *BucketingConfig_Bucket) String() string { return proto.CompactTextString(m) } +func (*BucketingConfig_Bucket) ProtoMessage() {} +func (*BucketingConfig_Bucket) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{46, 0} } + +func (m *BucketingConfig_Bucket) GetMin() *Value { + if m != nil { + return m.Min + } + return nil +} + +func (m *BucketingConfig_Bucket) GetMax() *Value { + if m != nil { + return m.Max + } + return nil +} + +func (m *BucketingConfig_Bucket) GetReplacementValue() *Value { + if m != nil { + return m.ReplacementValue + } + return nil +} + +// Replaces an identifier with a surrogate using FPE with the FFX +// mode of operation; however when used in the `ReidentifyContent` API method, +// it serves the opposite function by reversing the surrogate back into +// the original identifier. +// The identifier must be encoded as ASCII. +// For a given crypto key and context, the same identifier will be +// replaced with the same surrogate. +// Identifiers must be at least two characters long. +// In the case that the identifier is the empty string, it will be skipped. +// See [Pseudonymization](/dlp/docs/pseudonymization) for example usage. +type CryptoReplaceFfxFpeConfig struct { + // The key used by the encryption algorithm. [required] + CryptoKey *CryptoKey `protobuf:"bytes,1,opt,name=crypto_key,json=cryptoKey" json:"crypto_key,omitempty"` + // The 'tweak', a context may be used for higher security since the same + // identifier in two different contexts won't be given the same surrogate. If + // the context is not set, a default tweak will be used. + // + // If the context is set but: + // + // 1. there is no record present when transforming a given value or + // 1. the field is not present when transforming a given value, + // + // a default tweak will be used. + // + // Note that case (1) is expected when an `InfoTypeTransformation` is + // applied to both structured and non-structured `ContentItem`s. + // Currently, the referenced field may be of value type integer or string. + // + // The tweak is constructed as a sequence of bytes in big endian byte order + // such that: + // + // - a 64 bit integer is encoded followed by a single byte of value 1 + // - a string is encoded in UTF-8 format followed by a single byte of value + // å 2 + Context *FieldId `protobuf:"bytes,2,opt,name=context" json:"context,omitempty"` + // Types that are valid to be assigned to Alphabet: + // *CryptoReplaceFfxFpeConfig_CommonAlphabet + // *CryptoReplaceFfxFpeConfig_CustomAlphabet + // *CryptoReplaceFfxFpeConfig_Radix + Alphabet isCryptoReplaceFfxFpeConfig_Alphabet `protobuf_oneof:"alphabet"` + // The custom infoType to annotate the surrogate with. + // This annotation will be applied to the surrogate by prefixing it with + // the name of the custom infoType followed by the number of + // characters comprising the surrogate. The following scheme defines the + // format: info_type_name(surrogate_character_count):surrogate + // + // For example, if the name of custom infoType is 'MY_TOKEN_INFO_TYPE' and + // the surrogate is 'abc', the full replacement value + // will be: 'MY_TOKEN_INFO_TYPE(3):abc' + // + // This annotation identifies the surrogate when inspecting content using the + // custom infoType + // [`SurrogateType`](/dlp/docs/reference/rest/v2/InspectConfig#surrogatetype). + // This facilitates reversal of the surrogate when it occurs in free text. + // + // In order for inspection to work properly, the name of this infoType must + // not occur naturally anywhere in your data; otherwise, inspection may + // find a surrogate that does not correspond to an actual identifier. + // Therefore, choose your custom infoType name carefully after considering + // what your data looks like. One way to select a name that has a high chance + // of yielding reliable detection is to include one or more unicode characters + // that are highly improbable to exist in your data. + // For example, assuming your data is entered from a regular ASCII keyboard, + // the symbol with the hex code point 29DD might be used like so: + // ⧝MY_TOKEN_TYPE + SurrogateInfoType *InfoType `protobuf:"bytes,8,opt,name=surrogate_info_type,json=surrogateInfoType" json:"surrogate_info_type,omitempty"` +} + +func (m *CryptoReplaceFfxFpeConfig) Reset() { *m = CryptoReplaceFfxFpeConfig{} } +func (m *CryptoReplaceFfxFpeConfig) String() string { return proto.CompactTextString(m) } +func (*CryptoReplaceFfxFpeConfig) ProtoMessage() {} +func (*CryptoReplaceFfxFpeConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{47} } + +type isCryptoReplaceFfxFpeConfig_Alphabet interface { + isCryptoReplaceFfxFpeConfig_Alphabet() +} + +type CryptoReplaceFfxFpeConfig_CommonAlphabet struct { + CommonAlphabet CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet `protobuf:"varint,4,opt,name=common_alphabet,json=commonAlphabet,enum=google.privacy.dlp.v2.CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet,oneof"` +} +type CryptoReplaceFfxFpeConfig_CustomAlphabet struct { + CustomAlphabet string `protobuf:"bytes,5,opt,name=custom_alphabet,json=customAlphabet,oneof"` +} +type CryptoReplaceFfxFpeConfig_Radix struct { + Radix int32 `protobuf:"varint,6,opt,name=radix,oneof"` +} + +func (*CryptoReplaceFfxFpeConfig_CommonAlphabet) isCryptoReplaceFfxFpeConfig_Alphabet() {} +func (*CryptoReplaceFfxFpeConfig_CustomAlphabet) isCryptoReplaceFfxFpeConfig_Alphabet() {} +func (*CryptoReplaceFfxFpeConfig_Radix) isCryptoReplaceFfxFpeConfig_Alphabet() {} + +func (m *CryptoReplaceFfxFpeConfig) GetAlphabet() isCryptoReplaceFfxFpeConfig_Alphabet { + if m != nil { + return m.Alphabet + } + return nil +} + +func (m *CryptoReplaceFfxFpeConfig) GetCryptoKey() *CryptoKey { + if m != nil { + return m.CryptoKey + } + return nil +} + +func (m *CryptoReplaceFfxFpeConfig) GetContext() *FieldId { + if m != nil { + return m.Context + } + return nil +} + +func (m *CryptoReplaceFfxFpeConfig) GetCommonAlphabet() CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet { + if x, ok := m.GetAlphabet().(*CryptoReplaceFfxFpeConfig_CommonAlphabet); ok { + return x.CommonAlphabet + } + return CryptoReplaceFfxFpeConfig_FFX_COMMON_NATIVE_ALPHABET_UNSPECIFIED +} + +func (m *CryptoReplaceFfxFpeConfig) GetCustomAlphabet() string { + if x, ok := m.GetAlphabet().(*CryptoReplaceFfxFpeConfig_CustomAlphabet); ok { + return x.CustomAlphabet + } + return "" +} + +func (m *CryptoReplaceFfxFpeConfig) GetRadix() int32 { + if x, ok := m.GetAlphabet().(*CryptoReplaceFfxFpeConfig_Radix); ok { + return x.Radix + } + return 0 +} + +func (m *CryptoReplaceFfxFpeConfig) GetSurrogateInfoType() *InfoType { + if m != nil { + return m.SurrogateInfoType + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*CryptoReplaceFfxFpeConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _CryptoReplaceFfxFpeConfig_OneofMarshaler, _CryptoReplaceFfxFpeConfig_OneofUnmarshaler, _CryptoReplaceFfxFpeConfig_OneofSizer, []interface{}{ + (*CryptoReplaceFfxFpeConfig_CommonAlphabet)(nil), + (*CryptoReplaceFfxFpeConfig_CustomAlphabet)(nil), + (*CryptoReplaceFfxFpeConfig_Radix)(nil), + } +} + +func _CryptoReplaceFfxFpeConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*CryptoReplaceFfxFpeConfig) + // alphabet + switch x := m.Alphabet.(type) { + case *CryptoReplaceFfxFpeConfig_CommonAlphabet: + b.EncodeVarint(4<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.CommonAlphabet)) + case *CryptoReplaceFfxFpeConfig_CustomAlphabet: + b.EncodeVarint(5<<3 | proto.WireBytes) + b.EncodeStringBytes(x.CustomAlphabet) + case *CryptoReplaceFfxFpeConfig_Radix: + b.EncodeVarint(6<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.Radix)) + case nil: + default: + return fmt.Errorf("CryptoReplaceFfxFpeConfig.Alphabet has unexpected type %T", x) + } + return nil +} + +func _CryptoReplaceFfxFpeConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*CryptoReplaceFfxFpeConfig) + switch tag { + case 4: // alphabet.common_alphabet + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Alphabet = &CryptoReplaceFfxFpeConfig_CommonAlphabet{CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet(x)} + return true, err + case 5: // alphabet.custom_alphabet + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Alphabet = &CryptoReplaceFfxFpeConfig_CustomAlphabet{x} + return true, err + case 6: // alphabet.radix + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Alphabet = &CryptoReplaceFfxFpeConfig_Radix{int32(x)} + return true, err + default: + return false, nil + } +} + +func _CryptoReplaceFfxFpeConfig_OneofSizer(msg proto.Message) (n int) { + m := msg.(*CryptoReplaceFfxFpeConfig) + // alphabet + switch x := m.Alphabet.(type) { + case *CryptoReplaceFfxFpeConfig_CommonAlphabet: + n += proto.SizeVarint(4<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.CommonAlphabet)) + case *CryptoReplaceFfxFpeConfig_CustomAlphabet: + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.CustomAlphabet))) + n += len(x.CustomAlphabet) + case *CryptoReplaceFfxFpeConfig_Radix: + n += proto.SizeVarint(6<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.Radix)) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// This is a data encryption key (DEK) (as opposed to +// a key encryption key (KEK) stored by KMS). +// When using KMS to wrap/unwrap DEKs, be sure to set an appropriate +// IAM policy on the KMS CryptoKey (KEK) to ensure an attacker cannot +// unwrap the data crypto key. +type CryptoKey struct { + // Types that are valid to be assigned to Source: + // *CryptoKey_Transient + // *CryptoKey_Unwrapped + // *CryptoKey_KmsWrapped + Source isCryptoKey_Source `protobuf_oneof:"source"` +} + +func (m *CryptoKey) Reset() { *m = CryptoKey{} } +func (m *CryptoKey) String() string { return proto.CompactTextString(m) } +func (*CryptoKey) ProtoMessage() {} +func (*CryptoKey) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{48} } + +type isCryptoKey_Source interface { + isCryptoKey_Source() +} + +type CryptoKey_Transient struct { + Transient *TransientCryptoKey `protobuf:"bytes,1,opt,name=transient,oneof"` +} +type CryptoKey_Unwrapped struct { + Unwrapped *UnwrappedCryptoKey `protobuf:"bytes,2,opt,name=unwrapped,oneof"` +} +type CryptoKey_KmsWrapped struct { + KmsWrapped *KmsWrappedCryptoKey `protobuf:"bytes,3,opt,name=kms_wrapped,json=kmsWrapped,oneof"` +} + +func (*CryptoKey_Transient) isCryptoKey_Source() {} +func (*CryptoKey_Unwrapped) isCryptoKey_Source() {} +func (*CryptoKey_KmsWrapped) isCryptoKey_Source() {} + +func (m *CryptoKey) GetSource() isCryptoKey_Source { + if m != nil { + return m.Source + } + return nil +} + +func (m *CryptoKey) GetTransient() *TransientCryptoKey { + if x, ok := m.GetSource().(*CryptoKey_Transient); ok { + return x.Transient + } + return nil +} + +func (m *CryptoKey) GetUnwrapped() *UnwrappedCryptoKey { + if x, ok := m.GetSource().(*CryptoKey_Unwrapped); ok { + return x.Unwrapped + } + return nil +} + +func (m *CryptoKey) GetKmsWrapped() *KmsWrappedCryptoKey { + if x, ok := m.GetSource().(*CryptoKey_KmsWrapped); ok { + return x.KmsWrapped + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*CryptoKey) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _CryptoKey_OneofMarshaler, _CryptoKey_OneofUnmarshaler, _CryptoKey_OneofSizer, []interface{}{ + (*CryptoKey_Transient)(nil), + (*CryptoKey_Unwrapped)(nil), + (*CryptoKey_KmsWrapped)(nil), + } +} + +func _CryptoKey_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*CryptoKey) + // source + switch x := m.Source.(type) { + case *CryptoKey_Transient: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Transient); err != nil { + return err + } + case *CryptoKey_Unwrapped: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Unwrapped); err != nil { + return err + } + case *CryptoKey_KmsWrapped: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.KmsWrapped); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("CryptoKey.Source has unexpected type %T", x) + } + return nil +} + +func _CryptoKey_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*CryptoKey) + switch tag { + case 1: // source.transient + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TransientCryptoKey) + err := b.DecodeMessage(msg) + m.Source = &CryptoKey_Transient{msg} + return true, err + case 2: // source.unwrapped + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(UnwrappedCryptoKey) + err := b.DecodeMessage(msg) + m.Source = &CryptoKey_Unwrapped{msg} + return true, err + case 3: // source.kms_wrapped + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(KmsWrappedCryptoKey) + err := b.DecodeMessage(msg) + m.Source = &CryptoKey_KmsWrapped{msg} + return true, err + default: + return false, nil + } +} + +func _CryptoKey_OneofSizer(msg proto.Message) (n int) { + m := msg.(*CryptoKey) + // source + switch x := m.Source.(type) { + case *CryptoKey_Transient: + s := proto.Size(x.Transient) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *CryptoKey_Unwrapped: + s := proto.Size(x.Unwrapped) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *CryptoKey_KmsWrapped: + s := proto.Size(x.KmsWrapped) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Use this to have a random data crypto key generated. +// It will be discarded after the request finishes. +type TransientCryptoKey struct { + // Name of the key. [required] + // This is an arbitrary string used to differentiate different keys. + // A unique key is generated per name: two separate `TransientCryptoKey` + // protos share the same generated key if their names are the same. + // When the data crypto key is generated, this name is not used in any way + // (repeating the api call will result in a different key being generated). + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *TransientCryptoKey) Reset() { *m = TransientCryptoKey{} } +func (m *TransientCryptoKey) String() string { return proto.CompactTextString(m) } +func (*TransientCryptoKey) ProtoMessage() {} +func (*TransientCryptoKey) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{49} } + +func (m *TransientCryptoKey) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Using raw keys is prone to security risks due to accidentally +// leaking the key. Choose another type of key if possible. +type UnwrappedCryptoKey struct { + // The AES 128/192/256 bit key. [required] + Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` +} + +func (m *UnwrappedCryptoKey) Reset() { *m = UnwrappedCryptoKey{} } +func (m *UnwrappedCryptoKey) String() string { return proto.CompactTextString(m) } +func (*UnwrappedCryptoKey) ProtoMessage() {} +func (*UnwrappedCryptoKey) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{50} } + +func (m *UnwrappedCryptoKey) GetKey() []byte { + if m != nil { + return m.Key + } + return nil +} + +// Include to use an existing data crypto key wrapped by KMS. +// Authorization requires the following IAM permissions when sending a request +// to perform a crypto transformation using a kms-wrapped crypto key: +// dlp.kms.encrypt +type KmsWrappedCryptoKey struct { + // The wrapped data crypto key. [required] + WrappedKey []byte `protobuf:"bytes,1,opt,name=wrapped_key,json=wrappedKey,proto3" json:"wrapped_key,omitempty"` + // The resource name of the KMS CryptoKey to use for unwrapping. [required] + CryptoKeyName string `protobuf:"bytes,2,opt,name=crypto_key_name,json=cryptoKeyName" json:"crypto_key_name,omitempty"` +} + +func (m *KmsWrappedCryptoKey) Reset() { *m = KmsWrappedCryptoKey{} } +func (m *KmsWrappedCryptoKey) String() string { return proto.CompactTextString(m) } +func (*KmsWrappedCryptoKey) ProtoMessage() {} +func (*KmsWrappedCryptoKey) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{51} } + +func (m *KmsWrappedCryptoKey) GetWrappedKey() []byte { + if m != nil { + return m.WrappedKey + } + return nil +} + +func (m *KmsWrappedCryptoKey) GetCryptoKeyName() string { + if m != nil { + return m.CryptoKeyName + } + return "" +} + +// Shifts dates by random number of days, with option to be consistent for the +// same context. +type DateShiftConfig struct { + // Range of shift in days. Actual shift will be selected at random within this + // range (inclusive ends). Negative means shift to earlier in time. Must not + // be more than 365250 days (1000 years) each direction. + // + // For example, 3 means shift date to at most 3 days into the future. + // [Required] + UpperBoundDays int32 `protobuf:"varint,1,opt,name=upper_bound_days,json=upperBoundDays" json:"upper_bound_days,omitempty"` + // For example, -5 means shift date to at most 5 days back in the past. + // [Required] + LowerBoundDays int32 `protobuf:"varint,2,opt,name=lower_bound_days,json=lowerBoundDays" json:"lower_bound_days,omitempty"` + // Points to the field that contains the context, for example, an entity id. + // If set, must also set method. If set, shift will be consistent for the + // given context. + Context *FieldId `protobuf:"bytes,3,opt,name=context" json:"context,omitempty"` + // Method for calculating shift that takes context into consideration. If + // set, must also set context. Can only be applied to table items. + // + // Types that are valid to be assigned to Method: + // *DateShiftConfig_CryptoKey + Method isDateShiftConfig_Method `protobuf_oneof:"method"` +} + +func (m *DateShiftConfig) Reset() { *m = DateShiftConfig{} } +func (m *DateShiftConfig) String() string { return proto.CompactTextString(m) } +func (*DateShiftConfig) ProtoMessage() {} +func (*DateShiftConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{52} } + +type isDateShiftConfig_Method interface { + isDateShiftConfig_Method() +} + +type DateShiftConfig_CryptoKey struct { + CryptoKey *CryptoKey `protobuf:"bytes,4,opt,name=crypto_key,json=cryptoKey,oneof"` +} + +func (*DateShiftConfig_CryptoKey) isDateShiftConfig_Method() {} + +func (m *DateShiftConfig) GetMethod() isDateShiftConfig_Method { + if m != nil { + return m.Method + } + return nil +} + +func (m *DateShiftConfig) GetUpperBoundDays() int32 { + if m != nil { + return m.UpperBoundDays + } + return 0 +} + +func (m *DateShiftConfig) GetLowerBoundDays() int32 { + if m != nil { + return m.LowerBoundDays + } + return 0 +} + +func (m *DateShiftConfig) GetContext() *FieldId { + if m != nil { + return m.Context + } + return nil +} + +func (m *DateShiftConfig) GetCryptoKey() *CryptoKey { + if x, ok := m.GetMethod().(*DateShiftConfig_CryptoKey); ok { + return x.CryptoKey + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*DateShiftConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _DateShiftConfig_OneofMarshaler, _DateShiftConfig_OneofUnmarshaler, _DateShiftConfig_OneofSizer, []interface{}{ + (*DateShiftConfig_CryptoKey)(nil), + } +} + +func _DateShiftConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*DateShiftConfig) + // method + switch x := m.Method.(type) { + case *DateShiftConfig_CryptoKey: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.CryptoKey); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("DateShiftConfig.Method has unexpected type %T", x) + } + return nil +} + +func _DateShiftConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*DateShiftConfig) + switch tag { + case 4: // method.crypto_key + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CryptoKey) + err := b.DecodeMessage(msg) + m.Method = &DateShiftConfig_CryptoKey{msg} + return true, err + default: + return false, nil + } +} + +func _DateShiftConfig_OneofSizer(msg proto.Message) (n int) { + m := msg.(*DateShiftConfig) + // method + switch x := m.Method.(type) { + case *DateShiftConfig_CryptoKey: + s := proto.Size(x.CryptoKey) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A type of transformation that will scan unstructured text and +// apply various `PrimitiveTransformation`s to each finding, where the +// transformation is applied to only values that were identified as a specific +// info_type. +type InfoTypeTransformations struct { + // Transformation for each infoType. Cannot specify more than one + // for a given infoType. [required] + Transformations []*InfoTypeTransformations_InfoTypeTransformation `protobuf:"bytes,1,rep,name=transformations" json:"transformations,omitempty"` +} + +func (m *InfoTypeTransformations) Reset() { *m = InfoTypeTransformations{} } +func (m *InfoTypeTransformations) String() string { return proto.CompactTextString(m) } +func (*InfoTypeTransformations) ProtoMessage() {} +func (*InfoTypeTransformations) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{53} } + +func (m *InfoTypeTransformations) GetTransformations() []*InfoTypeTransformations_InfoTypeTransformation { + if m != nil { + return m.Transformations + } + return nil +} + +// A transformation to apply to text that is identified as a specific +// info_type. +type InfoTypeTransformations_InfoTypeTransformation struct { + // InfoTypes to apply the transformation to. Empty list will match all + // available infoTypes for this transformation. + InfoTypes []*InfoType `protobuf:"bytes,1,rep,name=info_types,json=infoTypes" json:"info_types,omitempty"` + // Primitive transformation to apply to the infoType. [required] + PrimitiveTransformation *PrimitiveTransformation `protobuf:"bytes,2,opt,name=primitive_transformation,json=primitiveTransformation" json:"primitive_transformation,omitempty"` +} + +func (m *InfoTypeTransformations_InfoTypeTransformation) Reset() { + *m = InfoTypeTransformations_InfoTypeTransformation{} +} +func (m *InfoTypeTransformations_InfoTypeTransformation) String() string { + return proto.CompactTextString(m) +} +func (*InfoTypeTransformations_InfoTypeTransformation) ProtoMessage() {} +func (*InfoTypeTransformations_InfoTypeTransformation) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{53, 0} +} + +func (m *InfoTypeTransformations_InfoTypeTransformation) GetInfoTypes() []*InfoType { + if m != nil { + return m.InfoTypes + } + return nil +} + +func (m *InfoTypeTransformations_InfoTypeTransformation) GetPrimitiveTransformation() *PrimitiveTransformation { + if m != nil { + return m.PrimitiveTransformation + } + return nil +} + +// The transformation to apply to the field. +type FieldTransformation struct { + // Input field(s) to apply the transformation to. [required] + Fields []*FieldId `protobuf:"bytes,1,rep,name=fields" json:"fields,omitempty"` + // Only apply the transformation if the condition evaluates to true for the + // given `RecordCondition`. The conditions are allowed to reference fields + // that are not used in the actual transformation. [optional] + // + // Example Use Cases: + // + // - Apply a different bucket transformation to an age column if the zip code + // column for the same record is within a specific range. + // - Redact a field if the date of birth field is greater than 85. + Condition *RecordCondition `protobuf:"bytes,3,opt,name=condition" json:"condition,omitempty"` + // Transformation to apply. [required] + // + // Types that are valid to be assigned to Transformation: + // *FieldTransformation_PrimitiveTransformation + // *FieldTransformation_InfoTypeTransformations + Transformation isFieldTransformation_Transformation `protobuf_oneof:"transformation"` +} + +func (m *FieldTransformation) Reset() { *m = FieldTransformation{} } +func (m *FieldTransformation) String() string { return proto.CompactTextString(m) } +func (*FieldTransformation) ProtoMessage() {} +func (*FieldTransformation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{54} } + +type isFieldTransformation_Transformation interface { + isFieldTransformation_Transformation() +} + +type FieldTransformation_PrimitiveTransformation struct { + PrimitiveTransformation *PrimitiveTransformation `protobuf:"bytes,4,opt,name=primitive_transformation,json=primitiveTransformation,oneof"` +} +type FieldTransformation_InfoTypeTransformations struct { + InfoTypeTransformations *InfoTypeTransformations `protobuf:"bytes,5,opt,name=info_type_transformations,json=infoTypeTransformations,oneof"` +} + +func (*FieldTransformation_PrimitiveTransformation) isFieldTransformation_Transformation() {} +func (*FieldTransformation_InfoTypeTransformations) isFieldTransformation_Transformation() {} + +func (m *FieldTransformation) GetTransformation() isFieldTransformation_Transformation { + if m != nil { + return m.Transformation + } + return nil +} + +func (m *FieldTransformation) GetFields() []*FieldId { + if m != nil { + return m.Fields + } + return nil +} + +func (m *FieldTransformation) GetCondition() *RecordCondition { + if m != nil { + return m.Condition + } + return nil +} + +func (m *FieldTransformation) GetPrimitiveTransformation() *PrimitiveTransformation { + if x, ok := m.GetTransformation().(*FieldTransformation_PrimitiveTransformation); ok { + return x.PrimitiveTransformation + } + return nil +} + +func (m *FieldTransformation) GetInfoTypeTransformations() *InfoTypeTransformations { + if x, ok := m.GetTransformation().(*FieldTransformation_InfoTypeTransformations); ok { + return x.InfoTypeTransformations + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*FieldTransformation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _FieldTransformation_OneofMarshaler, _FieldTransformation_OneofUnmarshaler, _FieldTransformation_OneofSizer, []interface{}{ + (*FieldTransformation_PrimitiveTransformation)(nil), + (*FieldTransformation_InfoTypeTransformations)(nil), + } +} + +func _FieldTransformation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*FieldTransformation) + // transformation + switch x := m.Transformation.(type) { + case *FieldTransformation_PrimitiveTransformation: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.PrimitiveTransformation); err != nil { + return err + } + case *FieldTransformation_InfoTypeTransformations: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.InfoTypeTransformations); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("FieldTransformation.Transformation has unexpected type %T", x) + } + return nil +} + +func _FieldTransformation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*FieldTransformation) + switch tag { + case 4: // transformation.primitive_transformation + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PrimitiveTransformation) + err := b.DecodeMessage(msg) + m.Transformation = &FieldTransformation_PrimitiveTransformation{msg} + return true, err + case 5: // transformation.info_type_transformations + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(InfoTypeTransformations) + err := b.DecodeMessage(msg) + m.Transformation = &FieldTransformation_InfoTypeTransformations{msg} + return true, err + default: + return false, nil + } +} + +func _FieldTransformation_OneofSizer(msg proto.Message) (n int) { + m := msg.(*FieldTransformation) + // transformation + switch x := m.Transformation.(type) { + case *FieldTransformation_PrimitiveTransformation: + s := proto.Size(x.PrimitiveTransformation) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *FieldTransformation_InfoTypeTransformations: + s := proto.Size(x.InfoTypeTransformations) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A type of transformation that is applied over structured data such as a +// table. +type RecordTransformations struct { + // Transform the record by applying various field transformations. + FieldTransformations []*FieldTransformation `protobuf:"bytes,1,rep,name=field_transformations,json=fieldTransformations" json:"field_transformations,omitempty"` + // Configuration defining which records get suppressed entirely. Records that + // match any suppression rule are omitted from the output [optional]. + RecordSuppressions []*RecordSuppression `protobuf:"bytes,2,rep,name=record_suppressions,json=recordSuppressions" json:"record_suppressions,omitempty"` +} + +func (m *RecordTransformations) Reset() { *m = RecordTransformations{} } +func (m *RecordTransformations) String() string { return proto.CompactTextString(m) } +func (*RecordTransformations) ProtoMessage() {} +func (*RecordTransformations) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{55} } + +func (m *RecordTransformations) GetFieldTransformations() []*FieldTransformation { + if m != nil { + return m.FieldTransformations + } + return nil +} + +func (m *RecordTransformations) GetRecordSuppressions() []*RecordSuppression { + if m != nil { + return m.RecordSuppressions + } + return nil +} + +// Configuration to suppress records whose suppression conditions evaluate to +// true. +type RecordSuppression struct { + // A condition that when it evaluates to true will result in the record being + // evaluated to be suppressed from the transformed content. + Condition *RecordCondition `protobuf:"bytes,1,opt,name=condition" json:"condition,omitempty"` +} + +func (m *RecordSuppression) Reset() { *m = RecordSuppression{} } +func (m *RecordSuppression) String() string { return proto.CompactTextString(m) } +func (*RecordSuppression) ProtoMessage() {} +func (*RecordSuppression) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{56} } + +func (m *RecordSuppression) GetCondition() *RecordCondition { + if m != nil { + return m.Condition + } + return nil +} + +// A condition for determining whether a transformation should be applied to +// a field. +type RecordCondition struct { + // An expression. + Expressions *RecordCondition_Expressions `protobuf:"bytes,3,opt,name=expressions" json:"expressions,omitempty"` +} + +func (m *RecordCondition) Reset() { *m = RecordCondition{} } +func (m *RecordCondition) String() string { return proto.CompactTextString(m) } +func (*RecordCondition) ProtoMessage() {} +func (*RecordCondition) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{57} } + +func (m *RecordCondition) GetExpressions() *RecordCondition_Expressions { + if m != nil { + return m.Expressions + } + return nil +} + +// The field type of `value` and `field` do not need to match to be +// considered equal, but not all comparisons are possible. +// +// A `value` of type: +// +// - `string` can be compared against all other types +// - `boolean` can only be compared against other booleans +// - `integer` can be compared against doubles or a string if the string value +// can be parsed as an integer. +// - `double` can be compared against integers or a string if the string can +// be parsed as a double. +// - `Timestamp` can be compared against strings in RFC 3339 date string +// format. +// - `TimeOfDay` can be compared against timestamps and strings in the format +// of 'HH:mm:ss'. +// +// If we fail to compare do to type mismatch, a warning will be given and +// the condition will evaluate to false. +type RecordCondition_Condition struct { + // Field within the record this condition is evaluated against. [required] + Field *FieldId `protobuf:"bytes,1,opt,name=field" json:"field,omitempty"` + // Operator used to compare the field or infoType to the value. [required] + Operator RelationalOperator `protobuf:"varint,3,opt,name=operator,enum=google.privacy.dlp.v2.RelationalOperator" json:"operator,omitempty"` + // Value to compare against. [Required, except for `EXISTS` tests.] + Value *Value `protobuf:"bytes,4,opt,name=value" json:"value,omitempty"` +} + +func (m *RecordCondition_Condition) Reset() { *m = RecordCondition_Condition{} } +func (m *RecordCondition_Condition) String() string { return proto.CompactTextString(m) } +func (*RecordCondition_Condition) ProtoMessage() {} +func (*RecordCondition_Condition) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{57, 0} } + +func (m *RecordCondition_Condition) GetField() *FieldId { + if m != nil { + return m.Field + } + return nil +} + +func (m *RecordCondition_Condition) GetOperator() RelationalOperator { + if m != nil { + return m.Operator + } + return RelationalOperator_RELATIONAL_OPERATOR_UNSPECIFIED +} + +func (m *RecordCondition_Condition) GetValue() *Value { + if m != nil { + return m.Value + } + return nil +} + +// A collection of conditions. +type RecordCondition_Conditions struct { + Conditions []*RecordCondition_Condition `protobuf:"bytes,1,rep,name=conditions" json:"conditions,omitempty"` +} + +func (m *RecordCondition_Conditions) Reset() { *m = RecordCondition_Conditions{} } +func (m *RecordCondition_Conditions) String() string { return proto.CompactTextString(m) } +func (*RecordCondition_Conditions) ProtoMessage() {} +func (*RecordCondition_Conditions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{57, 1} } + +func (m *RecordCondition_Conditions) GetConditions() []*RecordCondition_Condition { + if m != nil { + return m.Conditions + } + return nil +} + +// An expression, consisting or an operator and conditions. +type RecordCondition_Expressions struct { + // The operator to apply to the result of conditions. Default and currently + // only supported value is `AND`. + LogicalOperator RecordCondition_Expressions_LogicalOperator `protobuf:"varint,1,opt,name=logical_operator,json=logicalOperator,enum=google.privacy.dlp.v2.RecordCondition_Expressions_LogicalOperator" json:"logical_operator,omitempty"` + // Types that are valid to be assigned to Type: + // *RecordCondition_Expressions_Conditions + Type isRecordCondition_Expressions_Type `protobuf_oneof:"type"` +} + +func (m *RecordCondition_Expressions) Reset() { *m = RecordCondition_Expressions{} } +func (m *RecordCondition_Expressions) String() string { return proto.CompactTextString(m) } +func (*RecordCondition_Expressions) ProtoMessage() {} +func (*RecordCondition_Expressions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{57, 2} } + +type isRecordCondition_Expressions_Type interface { + isRecordCondition_Expressions_Type() +} + +type RecordCondition_Expressions_Conditions struct { + Conditions *RecordCondition_Conditions `protobuf:"bytes,3,opt,name=conditions,oneof"` +} + +func (*RecordCondition_Expressions_Conditions) isRecordCondition_Expressions_Type() {} + +func (m *RecordCondition_Expressions) GetType() isRecordCondition_Expressions_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *RecordCondition_Expressions) GetLogicalOperator() RecordCondition_Expressions_LogicalOperator { + if m != nil { + return m.LogicalOperator + } + return RecordCondition_Expressions_LOGICAL_OPERATOR_UNSPECIFIED +} + +func (m *RecordCondition_Expressions) GetConditions() *RecordCondition_Conditions { + if x, ok := m.GetType().(*RecordCondition_Expressions_Conditions); ok { + return x.Conditions + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*RecordCondition_Expressions) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _RecordCondition_Expressions_OneofMarshaler, _RecordCondition_Expressions_OneofUnmarshaler, _RecordCondition_Expressions_OneofSizer, []interface{}{ + (*RecordCondition_Expressions_Conditions)(nil), + } +} + +func _RecordCondition_Expressions_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*RecordCondition_Expressions) + // type + switch x := m.Type.(type) { + case *RecordCondition_Expressions_Conditions: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Conditions); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("RecordCondition_Expressions.Type has unexpected type %T", x) + } + return nil +} + +func _RecordCondition_Expressions_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*RecordCondition_Expressions) + switch tag { + case 3: // type.conditions + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(RecordCondition_Conditions) + err := b.DecodeMessage(msg) + m.Type = &RecordCondition_Expressions_Conditions{msg} + return true, err + default: + return false, nil + } +} + +func _RecordCondition_Expressions_OneofSizer(msg proto.Message) (n int) { + m := msg.(*RecordCondition_Expressions) + // type + switch x := m.Type.(type) { + case *RecordCondition_Expressions_Conditions: + s := proto.Size(x.Conditions) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Overview of the modifications that occurred. +type TransformationOverview struct { + // Total size in bytes that were transformed in some way. + TransformedBytes int64 `protobuf:"varint,2,opt,name=transformed_bytes,json=transformedBytes" json:"transformed_bytes,omitempty"` + // Transformations applied to the dataset. + TransformationSummaries []*TransformationSummary `protobuf:"bytes,3,rep,name=transformation_summaries,json=transformationSummaries" json:"transformation_summaries,omitempty"` +} + +func (m *TransformationOverview) Reset() { *m = TransformationOverview{} } +func (m *TransformationOverview) String() string { return proto.CompactTextString(m) } +func (*TransformationOverview) ProtoMessage() {} +func (*TransformationOverview) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{58} } + +func (m *TransformationOverview) GetTransformedBytes() int64 { + if m != nil { + return m.TransformedBytes + } + return 0 +} + +func (m *TransformationOverview) GetTransformationSummaries() []*TransformationSummary { + if m != nil { + return m.TransformationSummaries + } + return nil +} + +// Summary of a single tranformation. +// Only one of 'transformation', 'field_transformation', or 'record_suppress' +// will be set. +type TransformationSummary struct { + // Set if the transformation was limited to a specific info_type. + InfoType *InfoType `protobuf:"bytes,1,opt,name=info_type,json=infoType" json:"info_type,omitempty"` + // Set if the transformation was limited to a specific FieldId. + Field *FieldId `protobuf:"bytes,2,opt,name=field" json:"field,omitempty"` + // The specific transformation these stats apply to. + Transformation *PrimitiveTransformation `protobuf:"bytes,3,opt,name=transformation" json:"transformation,omitempty"` + // The field transformation that was applied. + // If multiple field transformations are requested for a single field, + // this list will contain all of them; otherwise, only one is supplied. + FieldTransformations []*FieldTransformation `protobuf:"bytes,5,rep,name=field_transformations,json=fieldTransformations" json:"field_transformations,omitempty"` + // The specific suppression option these stats apply to. + RecordSuppress *RecordSuppression `protobuf:"bytes,6,opt,name=record_suppress,json=recordSuppress" json:"record_suppress,omitempty"` + Results []*TransformationSummary_SummaryResult `protobuf:"bytes,4,rep,name=results" json:"results,omitempty"` + // Total size in bytes that were transformed in some way. + TransformedBytes int64 `protobuf:"varint,7,opt,name=transformed_bytes,json=transformedBytes" json:"transformed_bytes,omitempty"` +} + +func (m *TransformationSummary) Reset() { *m = TransformationSummary{} } +func (m *TransformationSummary) String() string { return proto.CompactTextString(m) } +func (*TransformationSummary) ProtoMessage() {} +func (*TransformationSummary) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{59} } + +func (m *TransformationSummary) GetInfoType() *InfoType { + if m != nil { + return m.InfoType + } + return nil +} + +func (m *TransformationSummary) GetField() *FieldId { + if m != nil { + return m.Field + } + return nil +} + +func (m *TransformationSummary) GetTransformation() *PrimitiveTransformation { + if m != nil { + return m.Transformation + } + return nil +} + +func (m *TransformationSummary) GetFieldTransformations() []*FieldTransformation { + if m != nil { + return m.FieldTransformations + } + return nil +} + +func (m *TransformationSummary) GetRecordSuppress() *RecordSuppression { + if m != nil { + return m.RecordSuppress + } + return nil +} + +func (m *TransformationSummary) GetResults() []*TransformationSummary_SummaryResult { + if m != nil { + return m.Results + } + return nil +} + +func (m *TransformationSummary) GetTransformedBytes() int64 { + if m != nil { + return m.TransformedBytes + } + return 0 +} + +// A collection that informs the user the number of times a particular +// `TransformationResultCode` and error details occurred. +type TransformationSummary_SummaryResult struct { + Count int64 `protobuf:"varint,1,opt,name=count" json:"count,omitempty"` + Code TransformationSummary_TransformationResultCode `protobuf:"varint,2,opt,name=code,enum=google.privacy.dlp.v2.TransformationSummary_TransformationResultCode" json:"code,omitempty"` + // A place for warnings or errors to show up if a transformation didn't + // work as expected. + Details string `protobuf:"bytes,3,opt,name=details" json:"details,omitempty"` +} + +func (m *TransformationSummary_SummaryResult) Reset() { *m = TransformationSummary_SummaryResult{} } +func (m *TransformationSummary_SummaryResult) String() string { return proto.CompactTextString(m) } +func (*TransformationSummary_SummaryResult) ProtoMessage() {} +func (*TransformationSummary_SummaryResult) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{59, 0} +} + +func (m *TransformationSummary_SummaryResult) GetCount() int64 { + if m != nil { + return m.Count + } + return 0 +} + +func (m *TransformationSummary_SummaryResult) GetCode() TransformationSummary_TransformationResultCode { + if m != nil { + return m.Code + } + return TransformationSummary_TRANSFORMATION_RESULT_CODE_UNSPECIFIED +} + +func (m *TransformationSummary_SummaryResult) GetDetails() string { + if m != nil { + return m.Details + } + return "" +} + +// Schedule for triggeredJobs. +type Schedule struct { + // Types that are valid to be assigned to Option: + // *Schedule_RecurrencePeriodDuration + Option isSchedule_Option `protobuf_oneof:"option"` +} + +func (m *Schedule) Reset() { *m = Schedule{} } +func (m *Schedule) String() string { return proto.CompactTextString(m) } +func (*Schedule) ProtoMessage() {} +func (*Schedule) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{60} } + +type isSchedule_Option interface { + isSchedule_Option() +} + +type Schedule_RecurrencePeriodDuration struct { + RecurrencePeriodDuration *google_protobuf2.Duration `protobuf:"bytes,1,opt,name=recurrence_period_duration,json=recurrencePeriodDuration,oneof"` +} + +func (*Schedule_RecurrencePeriodDuration) isSchedule_Option() {} + +func (m *Schedule) GetOption() isSchedule_Option { + if m != nil { + return m.Option + } + return nil +} + +func (m *Schedule) GetRecurrencePeriodDuration() *google_protobuf2.Duration { + if x, ok := m.GetOption().(*Schedule_RecurrencePeriodDuration); ok { + return x.RecurrencePeriodDuration + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Schedule) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Schedule_OneofMarshaler, _Schedule_OneofUnmarshaler, _Schedule_OneofSizer, []interface{}{ + (*Schedule_RecurrencePeriodDuration)(nil), + } +} + +func _Schedule_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Schedule) + // option + switch x := m.Option.(type) { + case *Schedule_RecurrencePeriodDuration: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RecurrencePeriodDuration); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Schedule.Option has unexpected type %T", x) + } + return nil +} + +func _Schedule_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Schedule) + switch tag { + case 1: // option.recurrence_period_duration + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf2.Duration) + err := b.DecodeMessage(msg) + m.Option = &Schedule_RecurrencePeriodDuration{msg} + return true, err + default: + return false, nil + } +} + +func _Schedule_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Schedule) + // option + switch x := m.Option.(type) { + case *Schedule_RecurrencePeriodDuration: + s := proto.Size(x.RecurrencePeriodDuration) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The inspectTemplate contains a configuration (set of types of sensitive data +// to be detected) to be used anywhere you otherwise would normally specify +// InspectConfig. +type InspectTemplate struct { + // The template name. Output only. + // + // The template will have one of the following formats: + // `projects/PROJECT_ID/inspectTemplates/TEMPLATE_ID` OR + // `organizations/ORGANIZATION_ID/inspectTemplates/TEMPLATE_ID` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Display name (max 256 chars). + DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // Short description (max 256 chars). + Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` + // The creation timestamp of a inspectTemplate, output only field. + CreateTime *google_protobuf1.Timestamp `protobuf:"bytes,4,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // The last update timestamp of a inspectTemplate, output only field. + UpdateTime *google_protobuf1.Timestamp `protobuf:"bytes,5,opt,name=update_time,json=updateTime" json:"update_time,omitempty"` + // The core content of the template. Configuration of the scanning process. + InspectConfig *InspectConfig `protobuf:"bytes,6,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"` +} + +func (m *InspectTemplate) Reset() { *m = InspectTemplate{} } +func (m *InspectTemplate) String() string { return proto.CompactTextString(m) } +func (*InspectTemplate) ProtoMessage() {} +func (*InspectTemplate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{61} } + +func (m *InspectTemplate) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *InspectTemplate) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func (m *InspectTemplate) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *InspectTemplate) GetCreateTime() *google_protobuf1.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *InspectTemplate) GetUpdateTime() *google_protobuf1.Timestamp { + if m != nil { + return m.UpdateTime + } + return nil +} + +func (m *InspectTemplate) GetInspectConfig() *InspectConfig { + if m != nil { + return m.InspectConfig + } + return nil +} + +// The DeidentifyTemplates contains instructions on how to deidentify content. +type DeidentifyTemplate struct { + // The template name. Output only. + // + // The template will have one of the following formats: + // `projects/PROJECT_ID/deidentifyTemplates/TEMPLATE_ID` OR + // `organizations/ORGANIZATION_ID/deidentifyTemplates/TEMPLATE_ID` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Display name (max 256 chars). + DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // Short description (max 256 chars). + Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` + // The creation timestamp of a inspectTemplate, output only field. + CreateTime *google_protobuf1.Timestamp `protobuf:"bytes,4,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // The last update timestamp of a inspectTemplate, output only field. + UpdateTime *google_protobuf1.Timestamp `protobuf:"bytes,5,opt,name=update_time,json=updateTime" json:"update_time,omitempty"` + // ///////////// // The core content of the template // /////////////// + DeidentifyConfig *DeidentifyConfig `protobuf:"bytes,6,opt,name=deidentify_config,json=deidentifyConfig" json:"deidentify_config,omitempty"` +} + +func (m *DeidentifyTemplate) Reset() { *m = DeidentifyTemplate{} } +func (m *DeidentifyTemplate) String() string { return proto.CompactTextString(m) } +func (*DeidentifyTemplate) ProtoMessage() {} +func (*DeidentifyTemplate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{62} } + +func (m *DeidentifyTemplate) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *DeidentifyTemplate) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func (m *DeidentifyTemplate) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *DeidentifyTemplate) GetCreateTime() *google_protobuf1.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *DeidentifyTemplate) GetUpdateTime() *google_protobuf1.Timestamp { + if m != nil { + return m.UpdateTime + } + return nil +} + +func (m *DeidentifyTemplate) GetDeidentifyConfig() *DeidentifyConfig { + if m != nil { + return m.DeidentifyConfig + } + return nil +} + +// Details information about an error encountered during job execution or +// the results of an unsuccessful activation of the JobTrigger. +// Output only field. +type Error struct { + Details *google_rpc.Status `protobuf:"bytes,1,opt,name=details" json:"details,omitempty"` + // The times the error occurred. + Timestamps []*google_protobuf1.Timestamp `protobuf:"bytes,2,rep,name=timestamps" json:"timestamps,omitempty"` +} + +func (m *Error) Reset() { *m = Error{} } +func (m *Error) String() string { return proto.CompactTextString(m) } +func (*Error) ProtoMessage() {} +func (*Error) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{63} } + +func (m *Error) GetDetails() *google_rpc.Status { + if m != nil { + return m.Details + } + return nil +} + +func (m *Error) GetTimestamps() []*google_protobuf1.Timestamp { + if m != nil { + return m.Timestamps + } + return nil +} + +// Contains a configuration to make dlp api calls on a repeating basis. +type JobTrigger struct { + // Unique resource name for the triggeredJob, assigned by the service when the + // triggeredJob is created, for example + // `projects/dlp-test-project/triggeredJobs/53234423`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Display name (max 100 chars) + DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // User provided description (max 256 chars) + Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` + // The configuration details for the specific type of job to run. + // + // Types that are valid to be assigned to Job: + // *JobTrigger_InspectJob + Job isJobTrigger_Job `protobuf_oneof:"job"` + // A list of triggers which will be OR'ed together. Only one in the list + // needs to trigger for a job to be started. The list may contain only + // a single Schedule trigger and must have at least one object. + Triggers []*JobTrigger_Trigger `protobuf:"bytes,5,rep,name=triggers" json:"triggers,omitempty"` + // A stream of errors encountered when the trigger was activated. Repeated + // errors may result in the JobTrigger automaticaly being paused. + // Will return the last 100 errors. Whenever the JobTrigger is modified + // this list will be cleared. Output only field. + Errors []*Error `protobuf:"bytes,6,rep,name=errors" json:"errors,omitempty"` + // The creation timestamp of a triggeredJob, output only field. + CreateTime *google_protobuf1.Timestamp `protobuf:"bytes,7,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // The last update timestamp of a triggeredJob, output only field. + UpdateTime *google_protobuf1.Timestamp `protobuf:"bytes,8,opt,name=update_time,json=updateTime" json:"update_time,omitempty"` + // The timestamp of the last time this trigger executed, output only field. + LastRunTime *google_protobuf1.Timestamp `protobuf:"bytes,9,opt,name=last_run_time,json=lastRunTime" json:"last_run_time,omitempty"` + // A status for this trigger. [required] + Status JobTrigger_Status `protobuf:"varint,10,opt,name=status,enum=google.privacy.dlp.v2.JobTrigger_Status" json:"status,omitempty"` +} + +func (m *JobTrigger) Reset() { *m = JobTrigger{} } +func (m *JobTrigger) String() string { return proto.CompactTextString(m) } +func (*JobTrigger) ProtoMessage() {} +func (*JobTrigger) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{64} } + +type isJobTrigger_Job interface { + isJobTrigger_Job() +} + +type JobTrigger_InspectJob struct { + InspectJob *InspectJobConfig `protobuf:"bytes,4,opt,name=inspect_job,json=inspectJob,oneof"` +} + +func (*JobTrigger_InspectJob) isJobTrigger_Job() {} + +func (m *JobTrigger) GetJob() isJobTrigger_Job { + if m != nil { + return m.Job + } + return nil +} + +func (m *JobTrigger) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *JobTrigger) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func (m *JobTrigger) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *JobTrigger) GetInspectJob() *InspectJobConfig { + if x, ok := m.GetJob().(*JobTrigger_InspectJob); ok { + return x.InspectJob + } + return nil +} + +func (m *JobTrigger) GetTriggers() []*JobTrigger_Trigger { + if m != nil { + return m.Triggers + } + return nil +} + +func (m *JobTrigger) GetErrors() []*Error { + if m != nil { + return m.Errors + } + return nil +} + +func (m *JobTrigger) GetCreateTime() *google_protobuf1.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *JobTrigger) GetUpdateTime() *google_protobuf1.Timestamp { + if m != nil { + return m.UpdateTime + } + return nil +} + +func (m *JobTrigger) GetLastRunTime() *google_protobuf1.Timestamp { + if m != nil { + return m.LastRunTime + } + return nil +} + +func (m *JobTrigger) GetStatus() JobTrigger_Status { + if m != nil { + return m.Status + } + return JobTrigger_STATUS_UNSPECIFIED +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*JobTrigger) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _JobTrigger_OneofMarshaler, _JobTrigger_OneofUnmarshaler, _JobTrigger_OneofSizer, []interface{}{ + (*JobTrigger_InspectJob)(nil), + } +} + +func _JobTrigger_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*JobTrigger) + // job + switch x := m.Job.(type) { + case *JobTrigger_InspectJob: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.InspectJob); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("JobTrigger.Job has unexpected type %T", x) + } + return nil +} + +func _JobTrigger_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*JobTrigger) + switch tag { + case 4: // job.inspect_job + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(InspectJobConfig) + err := b.DecodeMessage(msg) + m.Job = &JobTrigger_InspectJob{msg} + return true, err + default: + return false, nil + } +} + +func _JobTrigger_OneofSizer(msg proto.Message) (n int) { + m := msg.(*JobTrigger) + // job + switch x := m.Job.(type) { + case *JobTrigger_InspectJob: + s := proto.Size(x.InspectJob) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// What event needs to occur for a new job to be started. +type JobTrigger_Trigger struct { + // Types that are valid to be assigned to Trigger: + // *JobTrigger_Trigger_Schedule + Trigger isJobTrigger_Trigger_Trigger `protobuf_oneof:"trigger"` +} + +func (m *JobTrigger_Trigger) Reset() { *m = JobTrigger_Trigger{} } +func (m *JobTrigger_Trigger) String() string { return proto.CompactTextString(m) } +func (*JobTrigger_Trigger) ProtoMessage() {} +func (*JobTrigger_Trigger) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{64, 0} } + +type isJobTrigger_Trigger_Trigger interface { + isJobTrigger_Trigger_Trigger() +} + +type JobTrigger_Trigger_Schedule struct { + Schedule *Schedule `protobuf:"bytes,1,opt,name=schedule,oneof"` +} + +func (*JobTrigger_Trigger_Schedule) isJobTrigger_Trigger_Trigger() {} + +func (m *JobTrigger_Trigger) GetTrigger() isJobTrigger_Trigger_Trigger { + if m != nil { + return m.Trigger + } + return nil +} + +func (m *JobTrigger_Trigger) GetSchedule() *Schedule { + if x, ok := m.GetTrigger().(*JobTrigger_Trigger_Schedule); ok { + return x.Schedule + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*JobTrigger_Trigger) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _JobTrigger_Trigger_OneofMarshaler, _JobTrigger_Trigger_OneofUnmarshaler, _JobTrigger_Trigger_OneofSizer, []interface{}{ + (*JobTrigger_Trigger_Schedule)(nil), + } +} + +func _JobTrigger_Trigger_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*JobTrigger_Trigger) + // trigger + switch x := m.Trigger.(type) { + case *JobTrigger_Trigger_Schedule: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Schedule); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("JobTrigger_Trigger.Trigger has unexpected type %T", x) + } + return nil +} + +func _JobTrigger_Trigger_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*JobTrigger_Trigger) + switch tag { + case 1: // trigger.schedule + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Schedule) + err := b.DecodeMessage(msg) + m.Trigger = &JobTrigger_Trigger_Schedule{msg} + return true, err + default: + return false, nil + } +} + +func _JobTrigger_Trigger_OneofSizer(msg proto.Message) (n int) { + m := msg.(*JobTrigger_Trigger) + // trigger + switch x := m.Trigger.(type) { + case *JobTrigger_Trigger_Schedule: + s := proto.Size(x.Schedule) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A task to execute on the completion of a job. +type Action struct { + // Types that are valid to be assigned to Action: + // *Action_SaveFindings_ + // *Action_PubSub + Action isAction_Action `protobuf_oneof:"action"` +} + +func (m *Action) Reset() { *m = Action{} } +func (m *Action) String() string { return proto.CompactTextString(m) } +func (*Action) ProtoMessage() {} +func (*Action) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{65} } + +type isAction_Action interface { + isAction_Action() +} + +type Action_SaveFindings_ struct { + SaveFindings *Action_SaveFindings `protobuf:"bytes,1,opt,name=save_findings,json=saveFindings,oneof"` +} +type Action_PubSub struct { + PubSub *Action_PublishToPubSub `protobuf:"bytes,2,opt,name=pub_sub,json=pubSub,oneof"` +} + +func (*Action_SaveFindings_) isAction_Action() {} +func (*Action_PubSub) isAction_Action() {} + +func (m *Action) GetAction() isAction_Action { + if m != nil { + return m.Action + } + return nil +} + +func (m *Action) GetSaveFindings() *Action_SaveFindings { + if x, ok := m.GetAction().(*Action_SaveFindings_); ok { + return x.SaveFindings + } + return nil +} + +func (m *Action) GetPubSub() *Action_PublishToPubSub { + if x, ok := m.GetAction().(*Action_PubSub); ok { + return x.PubSub + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Action) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Action_OneofMarshaler, _Action_OneofUnmarshaler, _Action_OneofSizer, []interface{}{ + (*Action_SaveFindings_)(nil), + (*Action_PubSub)(nil), + } +} + +func _Action_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Action) + // action + switch x := m.Action.(type) { + case *Action_SaveFindings_: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.SaveFindings); err != nil { + return err + } + case *Action_PubSub: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.PubSub); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Action.Action has unexpected type %T", x) + } + return nil +} + +func _Action_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Action) + switch tag { + case 1: // action.save_findings + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Action_SaveFindings) + err := b.DecodeMessage(msg) + m.Action = &Action_SaveFindings_{msg} + return true, err + case 2: // action.pub_sub + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Action_PublishToPubSub) + err := b.DecodeMessage(msg) + m.Action = &Action_PubSub{msg} + return true, err + default: + return false, nil + } +} + +func _Action_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Action) + // action + switch x := m.Action.(type) { + case *Action_SaveFindings_: + s := proto.Size(x.SaveFindings) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Action_PubSub: + s := proto.Size(x.PubSub) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// If set, the detailed findings will be persisted to the specified +// OutputStorageConfig. Compatible with: Inspect +type Action_SaveFindings struct { + OutputConfig *OutputStorageConfig `protobuf:"bytes,1,opt,name=output_config,json=outputConfig" json:"output_config,omitempty"` +} + +func (m *Action_SaveFindings) Reset() { *m = Action_SaveFindings{} } +func (m *Action_SaveFindings) String() string { return proto.CompactTextString(m) } +func (*Action_SaveFindings) ProtoMessage() {} +func (*Action_SaveFindings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{65, 0} } + +func (m *Action_SaveFindings) GetOutputConfig() *OutputStorageConfig { + if m != nil { + return m.OutputConfig + } + return nil +} + +// Publish the results of a DlpJob to a pub sub channel. +// Compatible with: Inpect, Risk +type Action_PublishToPubSub struct { + // Cloud Pub/Sub topic to send notifications to. The topic must have given + // publishing access rights to the DLP API service account executing + // the long running DlpJob sending the notifications. + // Format is projects/{project}/topics/{topic}. + Topic string `protobuf:"bytes,1,opt,name=topic" json:"topic,omitempty"` +} + +func (m *Action_PublishToPubSub) Reset() { *m = Action_PublishToPubSub{} } +func (m *Action_PublishToPubSub) String() string { return proto.CompactTextString(m) } +func (*Action_PublishToPubSub) ProtoMessage() {} +func (*Action_PublishToPubSub) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{65, 1} } + +func (m *Action_PublishToPubSub) GetTopic() string { + if m != nil { + return m.Topic + } + return "" +} + +// Request message for CreateInspectTemplate. +type CreateInspectTemplateRequest struct { + // The parent resource name, for example projects/my-project-id or + // organizations/my-org-id. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The InspectTemplate to create. + InspectTemplate *InspectTemplate `protobuf:"bytes,2,opt,name=inspect_template,json=inspectTemplate" json:"inspect_template,omitempty"` + // The template id can contain uppercase and lowercase letters, + // numbers, and hyphens; that is, it must match the regular + // expression: `[a-zA-Z\\d-]+`. The maximum length is 100 + // characters. Can be empty to allow the system to generate one. + TemplateId string `protobuf:"bytes,3,opt,name=template_id,json=templateId" json:"template_id,omitempty"` +} + +func (m *CreateInspectTemplateRequest) Reset() { *m = CreateInspectTemplateRequest{} } +func (m *CreateInspectTemplateRequest) String() string { return proto.CompactTextString(m) } +func (*CreateInspectTemplateRequest) ProtoMessage() {} +func (*CreateInspectTemplateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{66} } + +func (m *CreateInspectTemplateRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateInspectTemplateRequest) GetInspectTemplate() *InspectTemplate { + if m != nil { + return m.InspectTemplate + } + return nil +} + +func (m *CreateInspectTemplateRequest) GetTemplateId() string { + if m != nil { + return m.TemplateId + } + return "" +} + +// Request message for UpdateInspectTemplate. +type UpdateInspectTemplateRequest struct { + // Resource name of organization and inspectTemplate to be updated, for + // example `organizations/433245324/inspectTemplates/432452342` or + // projects/project-id/inspectTemplates/432452342. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // New InspectTemplate value. + InspectTemplate *InspectTemplate `protobuf:"bytes,2,opt,name=inspect_template,json=inspectTemplate" json:"inspect_template,omitempty"` + // Mask to control which fields get updated. + UpdateMask *google_protobuf4.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateInspectTemplateRequest) Reset() { *m = UpdateInspectTemplateRequest{} } +func (m *UpdateInspectTemplateRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateInspectTemplateRequest) ProtoMessage() {} +func (*UpdateInspectTemplateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{67} } + +func (m *UpdateInspectTemplateRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *UpdateInspectTemplateRequest) GetInspectTemplate() *InspectTemplate { + if m != nil { + return m.InspectTemplate + } + return nil +} + +func (m *UpdateInspectTemplateRequest) GetUpdateMask() *google_protobuf4.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +// Request message for GetInspectTemplate. +type GetInspectTemplateRequest struct { + // Resource name of the organization and inspectTemplate to be read, for + // example `organizations/433245324/inspectTemplates/432452342` or + // projects/project-id/inspectTemplates/432452342. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetInspectTemplateRequest) Reset() { *m = GetInspectTemplateRequest{} } +func (m *GetInspectTemplateRequest) String() string { return proto.CompactTextString(m) } +func (*GetInspectTemplateRequest) ProtoMessage() {} +func (*GetInspectTemplateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{68} } + +func (m *GetInspectTemplateRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for ListInspectTemplates. +type ListInspectTemplatesRequest struct { + // The parent resource name, for example projects/my-project-id or + // organizations/my-org-id. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Optional page token to continue retrieval. Comes from previous call + // to `ListInspectTemplates`. + PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // Optional size of the page, can be limited by server. If zero server returns + // a page of max size 100. + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` +} + +func (m *ListInspectTemplatesRequest) Reset() { *m = ListInspectTemplatesRequest{} } +func (m *ListInspectTemplatesRequest) String() string { return proto.CompactTextString(m) } +func (*ListInspectTemplatesRequest) ProtoMessage() {} +func (*ListInspectTemplatesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{69} } + +func (m *ListInspectTemplatesRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListInspectTemplatesRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListInspectTemplatesRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +// Response message for ListInspectTemplates. +type ListInspectTemplatesResponse struct { + // List of inspectTemplates, up to page_size in ListInspectTemplatesRequest. + InspectTemplates []*InspectTemplate `protobuf:"bytes,1,rep,name=inspect_templates,json=inspectTemplates" json:"inspect_templates,omitempty"` + // If the next page is available then the next page token to be used + // in following ListInspectTemplates request. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListInspectTemplatesResponse) Reset() { *m = ListInspectTemplatesResponse{} } +func (m *ListInspectTemplatesResponse) String() string { return proto.CompactTextString(m) } +func (*ListInspectTemplatesResponse) ProtoMessage() {} +func (*ListInspectTemplatesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{70} } + +func (m *ListInspectTemplatesResponse) GetInspectTemplates() []*InspectTemplate { + if m != nil { + return m.InspectTemplates + } + return nil +} + +func (m *ListInspectTemplatesResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request message for DeleteInspectTemplate. +type DeleteInspectTemplateRequest struct { + // Resource name of the organization and inspectTemplate to be deleted, for + // example `organizations/433245324/inspectTemplates/432452342` or + // projects/project-id/inspectTemplates/432452342. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteInspectTemplateRequest) Reset() { *m = DeleteInspectTemplateRequest{} } +func (m *DeleteInspectTemplateRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteInspectTemplateRequest) ProtoMessage() {} +func (*DeleteInspectTemplateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{71} } + +func (m *DeleteInspectTemplateRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for CreateJobTrigger. +type CreateJobTriggerRequest struct { + // The parent resource name, for example projects/my-project-id. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The JobTrigger to create. + JobTrigger *JobTrigger `protobuf:"bytes,2,opt,name=job_trigger,json=jobTrigger" json:"job_trigger,omitempty"` + // The trigger id can contain uppercase and lowercase letters, + // numbers, and hyphens; that is, it must match the regular + // expression: `[a-zA-Z\\d-]+`. The maximum length is 100 + // characters. Can be empty to allow the system to generate one. + TriggerId string `protobuf:"bytes,3,opt,name=trigger_id,json=triggerId" json:"trigger_id,omitempty"` +} + +func (m *CreateJobTriggerRequest) Reset() { *m = CreateJobTriggerRequest{} } +func (m *CreateJobTriggerRequest) String() string { return proto.CompactTextString(m) } +func (*CreateJobTriggerRequest) ProtoMessage() {} +func (*CreateJobTriggerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{72} } + +func (m *CreateJobTriggerRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateJobTriggerRequest) GetJobTrigger() *JobTrigger { + if m != nil { + return m.JobTrigger + } + return nil +} + +func (m *CreateJobTriggerRequest) GetTriggerId() string { + if m != nil { + return m.TriggerId + } + return "" +} + +// Request message for UpdateJobTrigger. +type UpdateJobTriggerRequest struct { + // Resource name of the project and the triggeredJob, for example + // `projects/dlp-test-project/jobTriggers/53234423`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // New JobTrigger value. + JobTrigger *JobTrigger `protobuf:"bytes,2,opt,name=job_trigger,json=jobTrigger" json:"job_trigger,omitempty"` + // Mask to control which fields get updated. + UpdateMask *google_protobuf4.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateJobTriggerRequest) Reset() { *m = UpdateJobTriggerRequest{} } +func (m *UpdateJobTriggerRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateJobTriggerRequest) ProtoMessage() {} +func (*UpdateJobTriggerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{73} } + +func (m *UpdateJobTriggerRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *UpdateJobTriggerRequest) GetJobTrigger() *JobTrigger { + if m != nil { + return m.JobTrigger + } + return nil +} + +func (m *UpdateJobTriggerRequest) GetUpdateMask() *google_protobuf4.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +// Request message for GetJobTrigger. +type GetJobTriggerRequest struct { + // Resource name of the project and the triggeredJob, for example + // `projects/dlp-test-project/jobTriggers/53234423`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetJobTriggerRequest) Reset() { *m = GetJobTriggerRequest{} } +func (m *GetJobTriggerRequest) String() string { return proto.CompactTextString(m) } +func (*GetJobTriggerRequest) ProtoMessage() {} +func (*GetJobTriggerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{74} } + +func (m *GetJobTriggerRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for CreateDlpJobRequest. Used to initiate long running +// jobs such as calculating risk metrics or inspecting Google Cloud +// Storage. +type CreateDlpJobRequest struct { + // The parent resource name, for example projects/my-project-id. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The configuration details for the specific type of job to run. + // + // Types that are valid to be assigned to Job: + // *CreateDlpJobRequest_InspectJob + // *CreateDlpJobRequest_RiskJob + Job isCreateDlpJobRequest_Job `protobuf_oneof:"job"` + // The job id can contain uppercase and lowercase letters, + // numbers, and hyphens; that is, it must match the regular + // expression: `[a-zA-Z\\d-]+`. The maximum length is 100 + // characters. Can be empty to allow the system to generate one. + JobId string `protobuf:"bytes,4,opt,name=job_id,json=jobId" json:"job_id,omitempty"` +} + +func (m *CreateDlpJobRequest) Reset() { *m = CreateDlpJobRequest{} } +func (m *CreateDlpJobRequest) String() string { return proto.CompactTextString(m) } +func (*CreateDlpJobRequest) ProtoMessage() {} +func (*CreateDlpJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{75} } + +type isCreateDlpJobRequest_Job interface { + isCreateDlpJobRequest_Job() +} + +type CreateDlpJobRequest_InspectJob struct { + InspectJob *InspectJobConfig `protobuf:"bytes,2,opt,name=inspect_job,json=inspectJob,oneof"` +} +type CreateDlpJobRequest_RiskJob struct { + RiskJob *RiskAnalysisJobConfig `protobuf:"bytes,3,opt,name=risk_job,json=riskJob,oneof"` +} + +func (*CreateDlpJobRequest_InspectJob) isCreateDlpJobRequest_Job() {} +func (*CreateDlpJobRequest_RiskJob) isCreateDlpJobRequest_Job() {} + +func (m *CreateDlpJobRequest) GetJob() isCreateDlpJobRequest_Job { + if m != nil { + return m.Job + } + return nil +} + +func (m *CreateDlpJobRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateDlpJobRequest) GetInspectJob() *InspectJobConfig { + if x, ok := m.GetJob().(*CreateDlpJobRequest_InspectJob); ok { + return x.InspectJob + } + return nil +} + +func (m *CreateDlpJobRequest) GetRiskJob() *RiskAnalysisJobConfig { + if x, ok := m.GetJob().(*CreateDlpJobRequest_RiskJob); ok { + return x.RiskJob + } + return nil +} + +func (m *CreateDlpJobRequest) GetJobId() string { + if m != nil { + return m.JobId + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*CreateDlpJobRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _CreateDlpJobRequest_OneofMarshaler, _CreateDlpJobRequest_OneofUnmarshaler, _CreateDlpJobRequest_OneofSizer, []interface{}{ + (*CreateDlpJobRequest_InspectJob)(nil), + (*CreateDlpJobRequest_RiskJob)(nil), + } +} + +func _CreateDlpJobRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*CreateDlpJobRequest) + // job + switch x := m.Job.(type) { + case *CreateDlpJobRequest_InspectJob: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.InspectJob); err != nil { + return err + } + case *CreateDlpJobRequest_RiskJob: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RiskJob); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("CreateDlpJobRequest.Job has unexpected type %T", x) + } + return nil +} + +func _CreateDlpJobRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*CreateDlpJobRequest) + switch tag { + case 2: // job.inspect_job + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(InspectJobConfig) + err := b.DecodeMessage(msg) + m.Job = &CreateDlpJobRequest_InspectJob{msg} + return true, err + case 3: // job.risk_job + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(RiskAnalysisJobConfig) + err := b.DecodeMessage(msg) + m.Job = &CreateDlpJobRequest_RiskJob{msg} + return true, err + default: + return false, nil + } +} + +func _CreateDlpJobRequest_OneofSizer(msg proto.Message) (n int) { + m := msg.(*CreateDlpJobRequest) + // job + switch x := m.Job.(type) { + case *CreateDlpJobRequest_InspectJob: + s := proto.Size(x.InspectJob) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *CreateDlpJobRequest_RiskJob: + s := proto.Size(x.RiskJob) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Request message for ListJobTriggers. +type ListJobTriggersRequest struct { + // The parent resource name, for example projects/my-project-id. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Optional page token to continue retrieval. Comes from previous call + // to ListJobTriggers. `order_by` and `filter` should not change for + // subsequent calls, but can be omitted if token is specified. + PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // Optional size of the page, can be limited by a server. + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // Optional comma separated list of triggeredJob fields to order by, + // followed by 'asc/desc' postfix, i.e. + // `"create_time asc,name desc,schedule_mode asc"`. This list is + // case-insensitive. + // + // Example: `"name asc,schedule_mode desc, status desc"` + // + // Supported filters keys and values are: + // + // - `create_time`: corresponds to time the triggeredJob was created. + // - `update_time`: corresponds to time the triggeredJob was last updated. + // - `name`: corresponds to JobTrigger's display name. + // - `status`: corresponds to the triggeredJob status. + OrderBy string `protobuf:"bytes,4,opt,name=order_by,json=orderBy" json:"order_by,omitempty"` +} + +func (m *ListJobTriggersRequest) Reset() { *m = ListJobTriggersRequest{} } +func (m *ListJobTriggersRequest) String() string { return proto.CompactTextString(m) } +func (*ListJobTriggersRequest) ProtoMessage() {} +func (*ListJobTriggersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{76} } + +func (m *ListJobTriggersRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListJobTriggersRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListJobTriggersRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListJobTriggersRequest) GetOrderBy() string { + if m != nil { + return m.OrderBy + } + return "" +} + +// Response message for ListJobTriggers. +type ListJobTriggersResponse struct { + // List of triggeredJobs, up to page_size in ListJobTriggersRequest. + JobTriggers []*JobTrigger `protobuf:"bytes,1,rep,name=job_triggers,json=jobTriggers" json:"job_triggers,omitempty"` + // If the next page is available then the next page token to be used + // in following ListJobTriggers request. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListJobTriggersResponse) Reset() { *m = ListJobTriggersResponse{} } +func (m *ListJobTriggersResponse) String() string { return proto.CompactTextString(m) } +func (*ListJobTriggersResponse) ProtoMessage() {} +func (*ListJobTriggersResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{77} } + +func (m *ListJobTriggersResponse) GetJobTriggers() []*JobTrigger { + if m != nil { + return m.JobTriggers + } + return nil +} + +func (m *ListJobTriggersResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request message for DeleteJobTrigger. +type DeleteJobTriggerRequest struct { + // Resource name of the project and the triggeredJob, for example + // `projects/dlp-test-project/jobTriggers/53234423`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteJobTriggerRequest) Reset() { *m = DeleteJobTriggerRequest{} } +func (m *DeleteJobTriggerRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteJobTriggerRequest) ProtoMessage() {} +func (*DeleteJobTriggerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{78} } + +func (m *DeleteJobTriggerRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +type InspectJobConfig struct { + // The data to scan. + StorageConfig *StorageConfig `protobuf:"bytes,1,opt,name=storage_config,json=storageConfig" json:"storage_config,omitempty"` + // How and what to scan for. + InspectConfig *InspectConfig `protobuf:"bytes,2,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"` + // If provided, will be used as the default for all values in InspectConfig. + // `inspect_config` will be merged into the values persisted as part of the + // template. + InspectTemplateName string `protobuf:"bytes,3,opt,name=inspect_template_name,json=inspectTemplateName" json:"inspect_template_name,omitempty"` + // Actions to execute at the completion of the job. Are executed in the order + // provided. + Actions []*Action `protobuf:"bytes,4,rep,name=actions" json:"actions,omitempty"` +} + +func (m *InspectJobConfig) Reset() { *m = InspectJobConfig{} } +func (m *InspectJobConfig) String() string { return proto.CompactTextString(m) } +func (*InspectJobConfig) ProtoMessage() {} +func (*InspectJobConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{79} } + +func (m *InspectJobConfig) GetStorageConfig() *StorageConfig { + if m != nil { + return m.StorageConfig + } + return nil +} + +func (m *InspectJobConfig) GetInspectConfig() *InspectConfig { + if m != nil { + return m.InspectConfig + } + return nil +} + +func (m *InspectJobConfig) GetInspectTemplateName() string { + if m != nil { + return m.InspectTemplateName + } + return "" +} + +func (m *InspectJobConfig) GetActions() []*Action { + if m != nil { + return m.Actions + } + return nil +} + +// Combines all of the information about a DLP job. +type DlpJob struct { + // The server-assigned name. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The type of job. + Type DlpJobType `protobuf:"varint,2,opt,name=type,enum=google.privacy.dlp.v2.DlpJobType" json:"type,omitempty"` + // State of a job. + State DlpJob_JobState `protobuf:"varint,3,opt,name=state,enum=google.privacy.dlp.v2.DlpJob_JobState" json:"state,omitempty"` + // Types that are valid to be assigned to Details: + // *DlpJob_RiskDetails + // *DlpJob_InspectDetails + Details isDlpJob_Details `protobuf_oneof:"details"` + // Time when the job was created. + CreateTime *google_protobuf1.Timestamp `protobuf:"bytes,6,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // Time when the job started. + StartTime *google_protobuf1.Timestamp `protobuf:"bytes,7,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // Time when the job finished. + EndTime *google_protobuf1.Timestamp `protobuf:"bytes,8,opt,name=end_time,json=endTime" json:"end_time,omitempty"` + // If created by a job trigger, the resource name of the trigger that + // instantiated the job. + JobTriggerName string `protobuf:"bytes,10,opt,name=job_trigger_name,json=jobTriggerName" json:"job_trigger_name,omitempty"` + // A stream of errors encountered running the job. + Errors []*Error `protobuf:"bytes,11,rep,name=errors" json:"errors,omitempty"` +} + +func (m *DlpJob) Reset() { *m = DlpJob{} } +func (m *DlpJob) String() string { return proto.CompactTextString(m) } +func (*DlpJob) ProtoMessage() {} +func (*DlpJob) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{80} } + +type isDlpJob_Details interface { + isDlpJob_Details() +} + +type DlpJob_RiskDetails struct { + RiskDetails *AnalyzeDataSourceRiskDetails `protobuf:"bytes,4,opt,name=risk_details,json=riskDetails,oneof"` +} +type DlpJob_InspectDetails struct { + InspectDetails *InspectDataSourceDetails `protobuf:"bytes,5,opt,name=inspect_details,json=inspectDetails,oneof"` +} + +func (*DlpJob_RiskDetails) isDlpJob_Details() {} +func (*DlpJob_InspectDetails) isDlpJob_Details() {} + +func (m *DlpJob) GetDetails() isDlpJob_Details { + if m != nil { + return m.Details + } + return nil +} + +func (m *DlpJob) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *DlpJob) GetType() DlpJobType { + if m != nil { + return m.Type + } + return DlpJobType_DLP_JOB_TYPE_UNSPECIFIED +} + +func (m *DlpJob) GetState() DlpJob_JobState { + if m != nil { + return m.State + } + return DlpJob_JOB_STATE_UNSPECIFIED +} + +func (m *DlpJob) GetRiskDetails() *AnalyzeDataSourceRiskDetails { + if x, ok := m.GetDetails().(*DlpJob_RiskDetails); ok { + return x.RiskDetails + } + return nil +} + +func (m *DlpJob) GetInspectDetails() *InspectDataSourceDetails { + if x, ok := m.GetDetails().(*DlpJob_InspectDetails); ok { + return x.InspectDetails + } + return nil +} + +func (m *DlpJob) GetCreateTime() *google_protobuf1.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *DlpJob) GetStartTime() *google_protobuf1.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *DlpJob) GetEndTime() *google_protobuf1.Timestamp { + if m != nil { + return m.EndTime + } + return nil +} + +func (m *DlpJob) GetJobTriggerName() string { + if m != nil { + return m.JobTriggerName + } + return "" +} + +func (m *DlpJob) GetErrors() []*Error { + if m != nil { + return m.Errors + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*DlpJob) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _DlpJob_OneofMarshaler, _DlpJob_OneofUnmarshaler, _DlpJob_OneofSizer, []interface{}{ + (*DlpJob_RiskDetails)(nil), + (*DlpJob_InspectDetails)(nil), + } +} + +func _DlpJob_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*DlpJob) + // details + switch x := m.Details.(type) { + case *DlpJob_RiskDetails: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RiskDetails); err != nil { + return err + } + case *DlpJob_InspectDetails: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.InspectDetails); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("DlpJob.Details has unexpected type %T", x) + } + return nil +} + +func _DlpJob_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*DlpJob) + switch tag { + case 4: // details.risk_details + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(AnalyzeDataSourceRiskDetails) + err := b.DecodeMessage(msg) + m.Details = &DlpJob_RiskDetails{msg} + return true, err + case 5: // details.inspect_details + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(InspectDataSourceDetails) + err := b.DecodeMessage(msg) + m.Details = &DlpJob_InspectDetails{msg} + return true, err + default: + return false, nil + } +} + +func _DlpJob_OneofSizer(msg proto.Message) (n int) { + m := msg.(*DlpJob) + // details + switch x := m.Details.(type) { + case *DlpJob_RiskDetails: + s := proto.Size(x.RiskDetails) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *DlpJob_InspectDetails: + s := proto.Size(x.InspectDetails) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The request message for [DlpJobs.GetDlpJob][]. +type GetDlpJobRequest struct { + // The name of the DlpJob resource. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetDlpJobRequest) Reset() { *m = GetDlpJobRequest{} } +func (m *GetDlpJobRequest) String() string { return proto.CompactTextString(m) } +func (*GetDlpJobRequest) ProtoMessage() {} +func (*GetDlpJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{81} } + +func (m *GetDlpJobRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The request message for listing DLP jobs. +type ListDlpJobsRequest struct { + // The parent resource name, for example projects/my-project-id. + Parent string `protobuf:"bytes,4,opt,name=parent" json:"parent,omitempty"` + // Optional. Allows filtering. + // + // Supported syntax: + // + // * Filter expressions are made up of one or more restrictions. + // * Restrictions can be combined by `AND` or `OR` logical operators. A + // sequence of restrictions implicitly uses `AND`. + // * A restriction has the form of ` `. + // * Supported fields/values for inspect jobs: + // - `state` - PENDING|RUNNING|CANCELED|FINISHED|FAILED + // - `inspected_storage` - DATASTORE|CLOUD_STORAGE|BIGQUERY + // - `trigger_name` - The resource name of the trigger that created job. + // * Supported fields for risk analysis jobs: + // - `state` - RUNNING|CANCELED|FINISHED|FAILED + // * The operator must be `=` or `!=`. + // + // Examples: + // + // * inspected_storage = cloud_storage AND state = done + // * inspected_storage = cloud_storage OR inspected_storage = bigquery + // * inspected_storage = cloud_storage AND (state = done OR state = canceled) + // + // The length of this field should be no more than 500 characters. + Filter string `protobuf:"bytes,1,opt,name=filter" json:"filter,omitempty"` + // The standard list page size. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // The standard list page token. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // The type of job. Defaults to `DlpJobType.INSPECT` + Type DlpJobType `protobuf:"varint,5,opt,name=type,enum=google.privacy.dlp.v2.DlpJobType" json:"type,omitempty"` +} + +func (m *ListDlpJobsRequest) Reset() { *m = ListDlpJobsRequest{} } +func (m *ListDlpJobsRequest) String() string { return proto.CompactTextString(m) } +func (*ListDlpJobsRequest) ProtoMessage() {} +func (*ListDlpJobsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{82} } + +func (m *ListDlpJobsRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListDlpJobsRequest) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +func (m *ListDlpJobsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListDlpJobsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListDlpJobsRequest) GetType() DlpJobType { + if m != nil { + return m.Type + } + return DlpJobType_DLP_JOB_TYPE_UNSPECIFIED +} + +// The response message for listing DLP jobs. +type ListDlpJobsResponse struct { + // A list of DlpJobs that matches the specified filter in the request. + Jobs []*DlpJob `protobuf:"bytes,1,rep,name=jobs" json:"jobs,omitempty"` + // The standard List next-page token. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListDlpJobsResponse) Reset() { *m = ListDlpJobsResponse{} } +func (m *ListDlpJobsResponse) String() string { return proto.CompactTextString(m) } +func (*ListDlpJobsResponse) ProtoMessage() {} +func (*ListDlpJobsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{83} } + +func (m *ListDlpJobsResponse) GetJobs() []*DlpJob { + if m != nil { + return m.Jobs + } + return nil +} + +func (m *ListDlpJobsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The request message for canceling a DLP job. +type CancelDlpJobRequest struct { + // The name of the DlpJob resource to be cancelled. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *CancelDlpJobRequest) Reset() { *m = CancelDlpJobRequest{} } +func (m *CancelDlpJobRequest) String() string { return proto.CompactTextString(m) } +func (*CancelDlpJobRequest) ProtoMessage() {} +func (*CancelDlpJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{84} } + +func (m *CancelDlpJobRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The request message for deleting a DLP job. +type DeleteDlpJobRequest struct { + // The name of the DlpJob resource to be deleted. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteDlpJobRequest) Reset() { *m = DeleteDlpJobRequest{} } +func (m *DeleteDlpJobRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteDlpJobRequest) ProtoMessage() {} +func (*DeleteDlpJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{85} } + +func (m *DeleteDlpJobRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for CreateDeidentifyTemplate. +type CreateDeidentifyTemplateRequest struct { + // The parent resource name, for example projects/my-project-id or + // organizations/my-org-id. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The DeidentifyTemplate to create. + DeidentifyTemplate *DeidentifyTemplate `protobuf:"bytes,2,opt,name=deidentify_template,json=deidentifyTemplate" json:"deidentify_template,omitempty"` + // The template id can contain uppercase and lowercase letters, + // numbers, and hyphens; that is, it must match the regular + // expression: `[a-zA-Z\\d-]+`. The maximum length is 100 + // characters. Can be empty to allow the system to generate one. + TemplateId string `protobuf:"bytes,3,opt,name=template_id,json=templateId" json:"template_id,omitempty"` +} + +func (m *CreateDeidentifyTemplateRequest) Reset() { *m = CreateDeidentifyTemplateRequest{} } +func (m *CreateDeidentifyTemplateRequest) String() string { return proto.CompactTextString(m) } +func (*CreateDeidentifyTemplateRequest) ProtoMessage() {} +func (*CreateDeidentifyTemplateRequest) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{86} +} + +func (m *CreateDeidentifyTemplateRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateDeidentifyTemplateRequest) GetDeidentifyTemplate() *DeidentifyTemplate { + if m != nil { + return m.DeidentifyTemplate + } + return nil +} + +func (m *CreateDeidentifyTemplateRequest) GetTemplateId() string { + if m != nil { + return m.TemplateId + } + return "" +} + +// Request message for UpdateDeidentifyTemplate. +type UpdateDeidentifyTemplateRequest struct { + // Resource name of organization and deidentify template to be updated, for + // example `organizations/433245324/deidentifyTemplates/432452342` or + // projects/project-id/deidentifyTemplates/432452342. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // New DeidentifyTemplate value. + DeidentifyTemplate *DeidentifyTemplate `protobuf:"bytes,2,opt,name=deidentify_template,json=deidentifyTemplate" json:"deidentify_template,omitempty"` + // Mask to control which fields get updated. + UpdateMask *google_protobuf4.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateDeidentifyTemplateRequest) Reset() { *m = UpdateDeidentifyTemplateRequest{} } +func (m *UpdateDeidentifyTemplateRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateDeidentifyTemplateRequest) ProtoMessage() {} +func (*UpdateDeidentifyTemplateRequest) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{87} +} + +func (m *UpdateDeidentifyTemplateRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *UpdateDeidentifyTemplateRequest) GetDeidentifyTemplate() *DeidentifyTemplate { + if m != nil { + return m.DeidentifyTemplate + } + return nil +} + +func (m *UpdateDeidentifyTemplateRequest) GetUpdateMask() *google_protobuf4.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +// Request message for GetDeidentifyTemplate. +type GetDeidentifyTemplateRequest struct { + // Resource name of the organization and deidentify template to be read, for + // example `organizations/433245324/deidentifyTemplates/432452342` or + // projects/project-id/deidentifyTemplates/432452342. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetDeidentifyTemplateRequest) Reset() { *m = GetDeidentifyTemplateRequest{} } +func (m *GetDeidentifyTemplateRequest) String() string { return proto.CompactTextString(m) } +func (*GetDeidentifyTemplateRequest) ProtoMessage() {} +func (*GetDeidentifyTemplateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{88} } + +func (m *GetDeidentifyTemplateRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for ListDeidentifyTemplates. +type ListDeidentifyTemplatesRequest struct { + // The parent resource name, for example projects/my-project-id or + // organizations/my-org-id. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Optional page token to continue retrieval. Comes from previous call + // to `ListDeidentifyTemplates`. + PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // Optional size of the page, can be limited by server. If zero server returns + // a page of max size 100. + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` +} + +func (m *ListDeidentifyTemplatesRequest) Reset() { *m = ListDeidentifyTemplatesRequest{} } +func (m *ListDeidentifyTemplatesRequest) String() string { return proto.CompactTextString(m) } +func (*ListDeidentifyTemplatesRequest) ProtoMessage() {} +func (*ListDeidentifyTemplatesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{89} } + +func (m *ListDeidentifyTemplatesRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListDeidentifyTemplatesRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListDeidentifyTemplatesRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +// Response message for ListDeidentifyTemplates. +type ListDeidentifyTemplatesResponse struct { + // List of deidentify templates, up to page_size in + // ListDeidentifyTemplatesRequest. + DeidentifyTemplates []*DeidentifyTemplate `protobuf:"bytes,1,rep,name=deidentify_templates,json=deidentifyTemplates" json:"deidentify_templates,omitempty"` + // If the next page is available then the next page token to be used + // in following ListDeidentifyTemplates request. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListDeidentifyTemplatesResponse) Reset() { *m = ListDeidentifyTemplatesResponse{} } +func (m *ListDeidentifyTemplatesResponse) String() string { return proto.CompactTextString(m) } +func (*ListDeidentifyTemplatesResponse) ProtoMessage() {} +func (*ListDeidentifyTemplatesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{90} +} + +func (m *ListDeidentifyTemplatesResponse) GetDeidentifyTemplates() []*DeidentifyTemplate { + if m != nil { + return m.DeidentifyTemplates + } + return nil +} + +func (m *ListDeidentifyTemplatesResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request message for DeleteDeidentifyTemplate. +type DeleteDeidentifyTemplateRequest struct { + // Resource name of the organization and deidentify template to be deleted, + // for example `organizations/433245324/deidentifyTemplates/432452342` or + // projects/project-id/deidentifyTemplates/432452342. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteDeidentifyTemplateRequest) Reset() { *m = DeleteDeidentifyTemplateRequest{} } +func (m *DeleteDeidentifyTemplateRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteDeidentifyTemplateRequest) ProtoMessage() {} +func (*DeleteDeidentifyTemplateRequest) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{91} +} + +func (m *DeleteDeidentifyTemplateRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func init() { + proto.RegisterType((*InspectConfig)(nil), "google.privacy.dlp.v2.InspectConfig") + proto.RegisterType((*InspectConfig_FindingLimits)(nil), "google.privacy.dlp.v2.InspectConfig.FindingLimits") + proto.RegisterType((*InspectConfig_FindingLimits_InfoTypeLimit)(nil), "google.privacy.dlp.v2.InspectConfig.FindingLimits.InfoTypeLimit") + proto.RegisterType((*ByteContentItem)(nil), "google.privacy.dlp.v2.ByteContentItem") + proto.RegisterType((*ContentItem)(nil), "google.privacy.dlp.v2.ContentItem") + proto.RegisterType((*Table)(nil), "google.privacy.dlp.v2.Table") + proto.RegisterType((*Table_Row)(nil), "google.privacy.dlp.v2.Table.Row") + proto.RegisterType((*InspectResult)(nil), "google.privacy.dlp.v2.InspectResult") + proto.RegisterType((*Finding)(nil), "google.privacy.dlp.v2.Finding") + proto.RegisterType((*Location)(nil), "google.privacy.dlp.v2.Location") + proto.RegisterType((*ContentLocation)(nil), "google.privacy.dlp.v2.ContentLocation") + proto.RegisterType((*DocumentLocation)(nil), "google.privacy.dlp.v2.DocumentLocation") + proto.RegisterType((*RecordLocation)(nil), "google.privacy.dlp.v2.RecordLocation") + proto.RegisterType((*TableLocation)(nil), "google.privacy.dlp.v2.TableLocation") + proto.RegisterType((*Range)(nil), "google.privacy.dlp.v2.Range") + proto.RegisterType((*ImageLocation)(nil), "google.privacy.dlp.v2.ImageLocation") + proto.RegisterType((*BoundingBox)(nil), "google.privacy.dlp.v2.BoundingBox") + proto.RegisterType((*RedactImageRequest)(nil), "google.privacy.dlp.v2.RedactImageRequest") + proto.RegisterType((*RedactImageRequest_ImageRedactionConfig)(nil), "google.privacy.dlp.v2.RedactImageRequest.ImageRedactionConfig") + proto.RegisterType((*Color)(nil), "google.privacy.dlp.v2.Color") + proto.RegisterType((*RedactImageResponse)(nil), "google.privacy.dlp.v2.RedactImageResponse") + proto.RegisterType((*DeidentifyContentRequest)(nil), "google.privacy.dlp.v2.DeidentifyContentRequest") + proto.RegisterType((*DeidentifyContentResponse)(nil), "google.privacy.dlp.v2.DeidentifyContentResponse") + proto.RegisterType((*ReidentifyContentRequest)(nil), "google.privacy.dlp.v2.ReidentifyContentRequest") + proto.RegisterType((*ReidentifyContentResponse)(nil), "google.privacy.dlp.v2.ReidentifyContentResponse") + proto.RegisterType((*InspectContentRequest)(nil), "google.privacy.dlp.v2.InspectContentRequest") + proto.RegisterType((*InspectContentResponse)(nil), "google.privacy.dlp.v2.InspectContentResponse") + proto.RegisterType((*OutputStorageConfig)(nil), "google.privacy.dlp.v2.OutputStorageConfig") + proto.RegisterType((*InfoTypeStats)(nil), "google.privacy.dlp.v2.InfoTypeStats") + proto.RegisterType((*InspectDataSourceDetails)(nil), "google.privacy.dlp.v2.InspectDataSourceDetails") + proto.RegisterType((*InspectDataSourceDetails_RequestedOptions)(nil), "google.privacy.dlp.v2.InspectDataSourceDetails.RequestedOptions") + proto.RegisterType((*InspectDataSourceDetails_Result)(nil), "google.privacy.dlp.v2.InspectDataSourceDetails.Result") + proto.RegisterType((*InfoTypeDescription)(nil), "google.privacy.dlp.v2.InfoTypeDescription") + proto.RegisterType((*ListInfoTypesRequest)(nil), "google.privacy.dlp.v2.ListInfoTypesRequest") + proto.RegisterType((*ListInfoTypesResponse)(nil), "google.privacy.dlp.v2.ListInfoTypesResponse") + proto.RegisterType((*RiskAnalysisJobConfig)(nil), "google.privacy.dlp.v2.RiskAnalysisJobConfig") + proto.RegisterType((*PrivacyMetric)(nil), "google.privacy.dlp.v2.PrivacyMetric") + proto.RegisterType((*PrivacyMetric_NumericalStatsConfig)(nil), "google.privacy.dlp.v2.PrivacyMetric.NumericalStatsConfig") + proto.RegisterType((*PrivacyMetric_CategoricalStatsConfig)(nil), "google.privacy.dlp.v2.PrivacyMetric.CategoricalStatsConfig") + proto.RegisterType((*PrivacyMetric_KAnonymityConfig)(nil), "google.privacy.dlp.v2.PrivacyMetric.KAnonymityConfig") + proto.RegisterType((*PrivacyMetric_LDiversityConfig)(nil), "google.privacy.dlp.v2.PrivacyMetric.LDiversityConfig") + proto.RegisterType((*PrivacyMetric_KMapEstimationConfig)(nil), "google.privacy.dlp.v2.PrivacyMetric.KMapEstimationConfig") + proto.RegisterType((*PrivacyMetric_KMapEstimationConfig_TaggedField)(nil), "google.privacy.dlp.v2.PrivacyMetric.KMapEstimationConfig.TaggedField") + proto.RegisterType((*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable)(nil), "google.privacy.dlp.v2.PrivacyMetric.KMapEstimationConfig.AuxiliaryTable") + proto.RegisterType((*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField)(nil), "google.privacy.dlp.v2.PrivacyMetric.KMapEstimationConfig.AuxiliaryTable.QuasiIdField") + proto.RegisterType((*AnalyzeDataSourceRiskDetails)(nil), "google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails") + proto.RegisterType((*AnalyzeDataSourceRiskDetails_NumericalStatsResult)(nil), "google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.NumericalStatsResult") + proto.RegisterType((*AnalyzeDataSourceRiskDetails_CategoricalStatsResult)(nil), "google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.CategoricalStatsResult") + proto.RegisterType((*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket)(nil), "google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.CategoricalStatsResult.CategoricalStatsHistogramBucket") + proto.RegisterType((*AnalyzeDataSourceRiskDetails_KAnonymityResult)(nil), "google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.KAnonymityResult") + proto.RegisterType((*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass)(nil), "google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.KAnonymityResult.KAnonymityEquivalenceClass") + proto.RegisterType((*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket)(nil), "google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.KAnonymityResult.KAnonymityHistogramBucket") + proto.RegisterType((*AnalyzeDataSourceRiskDetails_LDiversityResult)(nil), "google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.LDiversityResult") + proto.RegisterType((*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass)(nil), "google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.LDiversityResult.LDiversityEquivalenceClass") + proto.RegisterType((*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket)(nil), "google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.LDiversityResult.LDiversityHistogramBucket") + proto.RegisterType((*AnalyzeDataSourceRiskDetails_KMapEstimationResult)(nil), "google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.KMapEstimationResult") + proto.RegisterType((*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues)(nil), "google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.KMapEstimationResult.KMapEstimationQuasiIdValues") + proto.RegisterType((*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket)(nil), "google.privacy.dlp.v2.AnalyzeDataSourceRiskDetails.KMapEstimationResult.KMapEstimationHistogramBucket") + proto.RegisterType((*ValueFrequency)(nil), "google.privacy.dlp.v2.ValueFrequency") + proto.RegisterType((*Value)(nil), "google.privacy.dlp.v2.Value") + proto.RegisterType((*QuoteInfo)(nil), "google.privacy.dlp.v2.QuoteInfo") + proto.RegisterType((*DateTime)(nil), "google.privacy.dlp.v2.DateTime") + proto.RegisterType((*DateTime_TimeZone)(nil), "google.privacy.dlp.v2.DateTime.TimeZone") + proto.RegisterType((*DeidentifyConfig)(nil), "google.privacy.dlp.v2.DeidentifyConfig") + proto.RegisterType((*PrimitiveTransformation)(nil), "google.privacy.dlp.v2.PrimitiveTransformation") + proto.RegisterType((*TimePartConfig)(nil), "google.privacy.dlp.v2.TimePartConfig") + proto.RegisterType((*CryptoHashConfig)(nil), "google.privacy.dlp.v2.CryptoHashConfig") + proto.RegisterType((*ReplaceValueConfig)(nil), "google.privacy.dlp.v2.ReplaceValueConfig") + proto.RegisterType((*ReplaceWithInfoTypeConfig)(nil), "google.privacy.dlp.v2.ReplaceWithInfoTypeConfig") + proto.RegisterType((*RedactConfig)(nil), "google.privacy.dlp.v2.RedactConfig") + proto.RegisterType((*CharsToIgnore)(nil), "google.privacy.dlp.v2.CharsToIgnore") + proto.RegisterType((*CharacterMaskConfig)(nil), "google.privacy.dlp.v2.CharacterMaskConfig") + proto.RegisterType((*FixedSizeBucketingConfig)(nil), "google.privacy.dlp.v2.FixedSizeBucketingConfig") + proto.RegisterType((*BucketingConfig)(nil), "google.privacy.dlp.v2.BucketingConfig") + proto.RegisterType((*BucketingConfig_Bucket)(nil), "google.privacy.dlp.v2.BucketingConfig.Bucket") + proto.RegisterType((*CryptoReplaceFfxFpeConfig)(nil), "google.privacy.dlp.v2.CryptoReplaceFfxFpeConfig") + proto.RegisterType((*CryptoKey)(nil), "google.privacy.dlp.v2.CryptoKey") + proto.RegisterType((*TransientCryptoKey)(nil), "google.privacy.dlp.v2.TransientCryptoKey") + proto.RegisterType((*UnwrappedCryptoKey)(nil), "google.privacy.dlp.v2.UnwrappedCryptoKey") + proto.RegisterType((*KmsWrappedCryptoKey)(nil), "google.privacy.dlp.v2.KmsWrappedCryptoKey") + proto.RegisterType((*DateShiftConfig)(nil), "google.privacy.dlp.v2.DateShiftConfig") + proto.RegisterType((*InfoTypeTransformations)(nil), "google.privacy.dlp.v2.InfoTypeTransformations") + proto.RegisterType((*InfoTypeTransformations_InfoTypeTransformation)(nil), "google.privacy.dlp.v2.InfoTypeTransformations.InfoTypeTransformation") + proto.RegisterType((*FieldTransformation)(nil), "google.privacy.dlp.v2.FieldTransformation") + proto.RegisterType((*RecordTransformations)(nil), "google.privacy.dlp.v2.RecordTransformations") + proto.RegisterType((*RecordSuppression)(nil), "google.privacy.dlp.v2.RecordSuppression") + proto.RegisterType((*RecordCondition)(nil), "google.privacy.dlp.v2.RecordCondition") + proto.RegisterType((*RecordCondition_Condition)(nil), "google.privacy.dlp.v2.RecordCondition.Condition") + proto.RegisterType((*RecordCondition_Conditions)(nil), "google.privacy.dlp.v2.RecordCondition.Conditions") + proto.RegisterType((*RecordCondition_Expressions)(nil), "google.privacy.dlp.v2.RecordCondition.Expressions") + proto.RegisterType((*TransformationOverview)(nil), "google.privacy.dlp.v2.TransformationOverview") + proto.RegisterType((*TransformationSummary)(nil), "google.privacy.dlp.v2.TransformationSummary") + proto.RegisterType((*TransformationSummary_SummaryResult)(nil), "google.privacy.dlp.v2.TransformationSummary.SummaryResult") + proto.RegisterType((*Schedule)(nil), "google.privacy.dlp.v2.Schedule") + proto.RegisterType((*InspectTemplate)(nil), "google.privacy.dlp.v2.InspectTemplate") + proto.RegisterType((*DeidentifyTemplate)(nil), "google.privacy.dlp.v2.DeidentifyTemplate") + proto.RegisterType((*Error)(nil), "google.privacy.dlp.v2.Error") + proto.RegisterType((*JobTrigger)(nil), "google.privacy.dlp.v2.JobTrigger") + proto.RegisterType((*JobTrigger_Trigger)(nil), "google.privacy.dlp.v2.JobTrigger.Trigger") + proto.RegisterType((*Action)(nil), "google.privacy.dlp.v2.Action") + proto.RegisterType((*Action_SaveFindings)(nil), "google.privacy.dlp.v2.Action.SaveFindings") + proto.RegisterType((*Action_PublishToPubSub)(nil), "google.privacy.dlp.v2.Action.PublishToPubSub") + proto.RegisterType((*CreateInspectTemplateRequest)(nil), "google.privacy.dlp.v2.CreateInspectTemplateRequest") + proto.RegisterType((*UpdateInspectTemplateRequest)(nil), "google.privacy.dlp.v2.UpdateInspectTemplateRequest") + proto.RegisterType((*GetInspectTemplateRequest)(nil), "google.privacy.dlp.v2.GetInspectTemplateRequest") + proto.RegisterType((*ListInspectTemplatesRequest)(nil), "google.privacy.dlp.v2.ListInspectTemplatesRequest") + proto.RegisterType((*ListInspectTemplatesResponse)(nil), "google.privacy.dlp.v2.ListInspectTemplatesResponse") + proto.RegisterType((*DeleteInspectTemplateRequest)(nil), "google.privacy.dlp.v2.DeleteInspectTemplateRequest") + proto.RegisterType((*CreateJobTriggerRequest)(nil), "google.privacy.dlp.v2.CreateJobTriggerRequest") + proto.RegisterType((*UpdateJobTriggerRequest)(nil), "google.privacy.dlp.v2.UpdateJobTriggerRequest") + proto.RegisterType((*GetJobTriggerRequest)(nil), "google.privacy.dlp.v2.GetJobTriggerRequest") + proto.RegisterType((*CreateDlpJobRequest)(nil), "google.privacy.dlp.v2.CreateDlpJobRequest") + proto.RegisterType((*ListJobTriggersRequest)(nil), "google.privacy.dlp.v2.ListJobTriggersRequest") + proto.RegisterType((*ListJobTriggersResponse)(nil), "google.privacy.dlp.v2.ListJobTriggersResponse") + proto.RegisterType((*DeleteJobTriggerRequest)(nil), "google.privacy.dlp.v2.DeleteJobTriggerRequest") + proto.RegisterType((*InspectJobConfig)(nil), "google.privacy.dlp.v2.InspectJobConfig") + proto.RegisterType((*DlpJob)(nil), "google.privacy.dlp.v2.DlpJob") + proto.RegisterType((*GetDlpJobRequest)(nil), "google.privacy.dlp.v2.GetDlpJobRequest") + proto.RegisterType((*ListDlpJobsRequest)(nil), "google.privacy.dlp.v2.ListDlpJobsRequest") + proto.RegisterType((*ListDlpJobsResponse)(nil), "google.privacy.dlp.v2.ListDlpJobsResponse") + proto.RegisterType((*CancelDlpJobRequest)(nil), "google.privacy.dlp.v2.CancelDlpJobRequest") + proto.RegisterType((*DeleteDlpJobRequest)(nil), "google.privacy.dlp.v2.DeleteDlpJobRequest") + proto.RegisterType((*CreateDeidentifyTemplateRequest)(nil), "google.privacy.dlp.v2.CreateDeidentifyTemplateRequest") + proto.RegisterType((*UpdateDeidentifyTemplateRequest)(nil), "google.privacy.dlp.v2.UpdateDeidentifyTemplateRequest") + proto.RegisterType((*GetDeidentifyTemplateRequest)(nil), "google.privacy.dlp.v2.GetDeidentifyTemplateRequest") + proto.RegisterType((*ListDeidentifyTemplatesRequest)(nil), "google.privacy.dlp.v2.ListDeidentifyTemplatesRequest") + proto.RegisterType((*ListDeidentifyTemplatesResponse)(nil), "google.privacy.dlp.v2.ListDeidentifyTemplatesResponse") + proto.RegisterType((*DeleteDeidentifyTemplateRequest)(nil), "google.privacy.dlp.v2.DeleteDeidentifyTemplateRequest") + proto.RegisterEnum("google.privacy.dlp.v2.ContentOption", ContentOption_name, ContentOption_value) + proto.RegisterEnum("google.privacy.dlp.v2.InfoTypeSupportedBy", InfoTypeSupportedBy_name, InfoTypeSupportedBy_value) + proto.RegisterEnum("google.privacy.dlp.v2.RelationalOperator", RelationalOperator_name, RelationalOperator_value) + proto.RegisterEnum("google.privacy.dlp.v2.DlpJobType", DlpJobType_name, DlpJobType_value) + proto.RegisterEnum("google.privacy.dlp.v2.ByteContentItem_BytesType", ByteContentItem_BytesType_name, ByteContentItem_BytesType_value) + proto.RegisterEnum("google.privacy.dlp.v2.OutputStorageConfig_OutputSchema", OutputStorageConfig_OutputSchema_name, OutputStorageConfig_OutputSchema_value) + proto.RegisterEnum("google.privacy.dlp.v2.TimePartConfig_TimePart", TimePartConfig_TimePart_name, TimePartConfig_TimePart_value) + proto.RegisterEnum("google.privacy.dlp.v2.CharsToIgnore_CommonCharsToIgnore", CharsToIgnore_CommonCharsToIgnore_name, CharsToIgnore_CommonCharsToIgnore_value) + proto.RegisterEnum("google.privacy.dlp.v2.CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet", CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet_name, CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet_value) + proto.RegisterEnum("google.privacy.dlp.v2.RecordCondition_Expressions_LogicalOperator", RecordCondition_Expressions_LogicalOperator_name, RecordCondition_Expressions_LogicalOperator_value) + proto.RegisterEnum("google.privacy.dlp.v2.TransformationSummary_TransformationResultCode", TransformationSummary_TransformationResultCode_name, TransformationSummary_TransformationResultCode_value) + proto.RegisterEnum("google.privacy.dlp.v2.JobTrigger_Status", JobTrigger_Status_name, JobTrigger_Status_value) + proto.RegisterEnum("google.privacy.dlp.v2.DlpJob_JobState", DlpJob_JobState_name, DlpJob_JobState_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for DlpService service + +type DlpServiceClient interface { + // Finds potentially sensitive info in content. + // This method has limits on input size, processing time, and output size. + // [How-to guide for text](/dlp/docs/inspecting-text), [How-to guide for + // images](/dlp/docs/inspecting-images) + InspectContent(ctx context.Context, in *InspectContentRequest, opts ...grpc.CallOption) (*InspectContentResponse, error) + // Redacts potentially sensitive info from an image. + // This method has limits on input size, processing time, and output size. + // [How-to guide](/dlp/docs/redacting-sensitive-data-images) + RedactImage(ctx context.Context, in *RedactImageRequest, opts ...grpc.CallOption) (*RedactImageResponse, error) + // De-identifies potentially sensitive info from a ContentItem. + // This method has limits on input size and output size. + // [How-to guide](/dlp/docs/deidentify-sensitive-data) + DeidentifyContent(ctx context.Context, in *DeidentifyContentRequest, opts ...grpc.CallOption) (*DeidentifyContentResponse, error) + // Re-identify content that has been de-identified. + ReidentifyContent(ctx context.Context, in *ReidentifyContentRequest, opts ...grpc.CallOption) (*ReidentifyContentResponse, error) + // Returns sensitive information types DLP supports. + ListInfoTypes(ctx context.Context, in *ListInfoTypesRequest, opts ...grpc.CallOption) (*ListInfoTypesResponse, error) + // Creates an inspect template for re-using frequently used configuration + // for inspecting content, images, and storage. + CreateInspectTemplate(ctx context.Context, in *CreateInspectTemplateRequest, opts ...grpc.CallOption) (*InspectTemplate, error) + // Updates the inspect template. + UpdateInspectTemplate(ctx context.Context, in *UpdateInspectTemplateRequest, opts ...grpc.CallOption) (*InspectTemplate, error) + // Gets an inspect template. + GetInspectTemplate(ctx context.Context, in *GetInspectTemplateRequest, opts ...grpc.CallOption) (*InspectTemplate, error) + // Lists inspect templates. + ListInspectTemplates(ctx context.Context, in *ListInspectTemplatesRequest, opts ...grpc.CallOption) (*ListInspectTemplatesResponse, error) + // Deletes inspect templates. + DeleteInspectTemplate(ctx context.Context, in *DeleteInspectTemplateRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) + // Creates an Deidentify template for re-using frequently used configuration + // for Deidentifying content, images, and storage. + CreateDeidentifyTemplate(ctx context.Context, in *CreateDeidentifyTemplateRequest, opts ...grpc.CallOption) (*DeidentifyTemplate, error) + // Updates the inspect template. + UpdateDeidentifyTemplate(ctx context.Context, in *UpdateDeidentifyTemplateRequest, opts ...grpc.CallOption) (*DeidentifyTemplate, error) + // Gets an inspect template. + GetDeidentifyTemplate(ctx context.Context, in *GetDeidentifyTemplateRequest, opts ...grpc.CallOption) (*DeidentifyTemplate, error) + // Lists inspect templates. + ListDeidentifyTemplates(ctx context.Context, in *ListDeidentifyTemplatesRequest, opts ...grpc.CallOption) (*ListDeidentifyTemplatesResponse, error) + // Deletes inspect templates. + DeleteDeidentifyTemplate(ctx context.Context, in *DeleteDeidentifyTemplateRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) + // Creates a job to run DLP actions such as scanning storage for sensitive + // information on a set schedule. + CreateJobTrigger(ctx context.Context, in *CreateJobTriggerRequest, opts ...grpc.CallOption) (*JobTrigger, error) + // Updates a job trigger. + UpdateJobTrigger(ctx context.Context, in *UpdateJobTriggerRequest, opts ...grpc.CallOption) (*JobTrigger, error) + // Gets a job trigger. + GetJobTrigger(ctx context.Context, in *GetJobTriggerRequest, opts ...grpc.CallOption) (*JobTrigger, error) + // Lists job triggers. + ListJobTriggers(ctx context.Context, in *ListJobTriggersRequest, opts ...grpc.CallOption) (*ListJobTriggersResponse, error) + // Deletes a job trigger. + DeleteJobTrigger(ctx context.Context, in *DeleteJobTriggerRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) + // Create a new job to inspect storage or calculate risk metrics [How-to + // guide](/dlp/docs/compute-risk-analysis). + CreateDlpJob(ctx context.Context, in *CreateDlpJobRequest, opts ...grpc.CallOption) (*DlpJob, error) + // Lists DlpJobs that match the specified filter in the request. + ListDlpJobs(ctx context.Context, in *ListDlpJobsRequest, opts ...grpc.CallOption) (*ListDlpJobsResponse, error) + // Gets the latest state of a long-running DlpJob. + GetDlpJob(ctx context.Context, in *GetDlpJobRequest, opts ...grpc.CallOption) (*DlpJob, error) + // Deletes a long-running DlpJob. This method indicates that the client is + // no longer interested in the DlpJob result. The job will be cancelled if + // possible. + DeleteDlpJob(ctx context.Context, in *DeleteDlpJobRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) + // Starts asynchronous cancellation on a long-running DlpJob. The server + // makes a best effort to cancel the DlpJob, but success is not + // guaranteed. + CancelDlpJob(ctx context.Context, in *CancelDlpJobRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) +} + +type dlpServiceClient struct { + cc *grpc.ClientConn +} + +func NewDlpServiceClient(cc *grpc.ClientConn) DlpServiceClient { + return &dlpServiceClient{cc} +} + +func (c *dlpServiceClient) InspectContent(ctx context.Context, in *InspectContentRequest, opts ...grpc.CallOption) (*InspectContentResponse, error) { + out := new(InspectContentResponse) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/InspectContent", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) RedactImage(ctx context.Context, in *RedactImageRequest, opts ...grpc.CallOption) (*RedactImageResponse, error) { + out := new(RedactImageResponse) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/RedactImage", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) DeidentifyContent(ctx context.Context, in *DeidentifyContentRequest, opts ...grpc.CallOption) (*DeidentifyContentResponse, error) { + out := new(DeidentifyContentResponse) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/DeidentifyContent", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) ReidentifyContent(ctx context.Context, in *ReidentifyContentRequest, opts ...grpc.CallOption) (*ReidentifyContentResponse, error) { + out := new(ReidentifyContentResponse) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/ReidentifyContent", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) ListInfoTypes(ctx context.Context, in *ListInfoTypesRequest, opts ...grpc.CallOption) (*ListInfoTypesResponse, error) { + out := new(ListInfoTypesResponse) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/ListInfoTypes", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) CreateInspectTemplate(ctx context.Context, in *CreateInspectTemplateRequest, opts ...grpc.CallOption) (*InspectTemplate, error) { + out := new(InspectTemplate) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/CreateInspectTemplate", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) UpdateInspectTemplate(ctx context.Context, in *UpdateInspectTemplateRequest, opts ...grpc.CallOption) (*InspectTemplate, error) { + out := new(InspectTemplate) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/UpdateInspectTemplate", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) GetInspectTemplate(ctx context.Context, in *GetInspectTemplateRequest, opts ...grpc.CallOption) (*InspectTemplate, error) { + out := new(InspectTemplate) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/GetInspectTemplate", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) ListInspectTemplates(ctx context.Context, in *ListInspectTemplatesRequest, opts ...grpc.CallOption) (*ListInspectTemplatesResponse, error) { + out := new(ListInspectTemplatesResponse) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/ListInspectTemplates", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) DeleteInspectTemplate(ctx context.Context, in *DeleteInspectTemplateRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) { + out := new(google_protobuf3.Empty) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/DeleteInspectTemplate", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) CreateDeidentifyTemplate(ctx context.Context, in *CreateDeidentifyTemplateRequest, opts ...grpc.CallOption) (*DeidentifyTemplate, error) { + out := new(DeidentifyTemplate) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/CreateDeidentifyTemplate", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) UpdateDeidentifyTemplate(ctx context.Context, in *UpdateDeidentifyTemplateRequest, opts ...grpc.CallOption) (*DeidentifyTemplate, error) { + out := new(DeidentifyTemplate) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/UpdateDeidentifyTemplate", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) GetDeidentifyTemplate(ctx context.Context, in *GetDeidentifyTemplateRequest, opts ...grpc.CallOption) (*DeidentifyTemplate, error) { + out := new(DeidentifyTemplate) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/GetDeidentifyTemplate", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) ListDeidentifyTemplates(ctx context.Context, in *ListDeidentifyTemplatesRequest, opts ...grpc.CallOption) (*ListDeidentifyTemplatesResponse, error) { + out := new(ListDeidentifyTemplatesResponse) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/ListDeidentifyTemplates", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) DeleteDeidentifyTemplate(ctx context.Context, in *DeleteDeidentifyTemplateRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) { + out := new(google_protobuf3.Empty) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/DeleteDeidentifyTemplate", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) CreateJobTrigger(ctx context.Context, in *CreateJobTriggerRequest, opts ...grpc.CallOption) (*JobTrigger, error) { + out := new(JobTrigger) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/CreateJobTrigger", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) UpdateJobTrigger(ctx context.Context, in *UpdateJobTriggerRequest, opts ...grpc.CallOption) (*JobTrigger, error) { + out := new(JobTrigger) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/UpdateJobTrigger", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) GetJobTrigger(ctx context.Context, in *GetJobTriggerRequest, opts ...grpc.CallOption) (*JobTrigger, error) { + out := new(JobTrigger) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/GetJobTrigger", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) ListJobTriggers(ctx context.Context, in *ListJobTriggersRequest, opts ...grpc.CallOption) (*ListJobTriggersResponse, error) { + out := new(ListJobTriggersResponse) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/ListJobTriggers", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) DeleteJobTrigger(ctx context.Context, in *DeleteJobTriggerRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) { + out := new(google_protobuf3.Empty) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/DeleteJobTrigger", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) CreateDlpJob(ctx context.Context, in *CreateDlpJobRequest, opts ...grpc.CallOption) (*DlpJob, error) { + out := new(DlpJob) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/CreateDlpJob", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) ListDlpJobs(ctx context.Context, in *ListDlpJobsRequest, opts ...grpc.CallOption) (*ListDlpJobsResponse, error) { + out := new(ListDlpJobsResponse) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/ListDlpJobs", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) GetDlpJob(ctx context.Context, in *GetDlpJobRequest, opts ...grpc.CallOption) (*DlpJob, error) { + out := new(DlpJob) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/GetDlpJob", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) DeleteDlpJob(ctx context.Context, in *DeleteDlpJobRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) { + out := new(google_protobuf3.Empty) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/DeleteDlpJob", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) CancelDlpJob(ctx context.Context, in *CancelDlpJobRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) { + out := new(google_protobuf3.Empty) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2.DlpService/CancelDlpJob", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for DlpService service + +type DlpServiceServer interface { + // Finds potentially sensitive info in content. + // This method has limits on input size, processing time, and output size. + // [How-to guide for text](/dlp/docs/inspecting-text), [How-to guide for + // images](/dlp/docs/inspecting-images) + InspectContent(context.Context, *InspectContentRequest) (*InspectContentResponse, error) + // Redacts potentially sensitive info from an image. + // This method has limits on input size, processing time, and output size. + // [How-to guide](/dlp/docs/redacting-sensitive-data-images) + RedactImage(context.Context, *RedactImageRequest) (*RedactImageResponse, error) + // De-identifies potentially sensitive info from a ContentItem. + // This method has limits on input size and output size. + // [How-to guide](/dlp/docs/deidentify-sensitive-data) + DeidentifyContent(context.Context, *DeidentifyContentRequest) (*DeidentifyContentResponse, error) + // Re-identify content that has been de-identified. + ReidentifyContent(context.Context, *ReidentifyContentRequest) (*ReidentifyContentResponse, error) + // Returns sensitive information types DLP supports. + ListInfoTypes(context.Context, *ListInfoTypesRequest) (*ListInfoTypesResponse, error) + // Creates an inspect template for re-using frequently used configuration + // for inspecting content, images, and storage. + CreateInspectTemplate(context.Context, *CreateInspectTemplateRequest) (*InspectTemplate, error) + // Updates the inspect template. + UpdateInspectTemplate(context.Context, *UpdateInspectTemplateRequest) (*InspectTemplate, error) + // Gets an inspect template. + GetInspectTemplate(context.Context, *GetInspectTemplateRequest) (*InspectTemplate, error) + // Lists inspect templates. + ListInspectTemplates(context.Context, *ListInspectTemplatesRequest) (*ListInspectTemplatesResponse, error) + // Deletes inspect templates. + DeleteInspectTemplate(context.Context, *DeleteInspectTemplateRequest) (*google_protobuf3.Empty, error) + // Creates an Deidentify template for re-using frequently used configuration + // for Deidentifying content, images, and storage. + CreateDeidentifyTemplate(context.Context, *CreateDeidentifyTemplateRequest) (*DeidentifyTemplate, error) + // Updates the inspect template. + UpdateDeidentifyTemplate(context.Context, *UpdateDeidentifyTemplateRequest) (*DeidentifyTemplate, error) + // Gets an inspect template. + GetDeidentifyTemplate(context.Context, *GetDeidentifyTemplateRequest) (*DeidentifyTemplate, error) + // Lists inspect templates. + ListDeidentifyTemplates(context.Context, *ListDeidentifyTemplatesRequest) (*ListDeidentifyTemplatesResponse, error) + // Deletes inspect templates. + DeleteDeidentifyTemplate(context.Context, *DeleteDeidentifyTemplateRequest) (*google_protobuf3.Empty, error) + // Creates a job to run DLP actions such as scanning storage for sensitive + // information on a set schedule. + CreateJobTrigger(context.Context, *CreateJobTriggerRequest) (*JobTrigger, error) + // Updates a job trigger. + UpdateJobTrigger(context.Context, *UpdateJobTriggerRequest) (*JobTrigger, error) + // Gets a job trigger. + GetJobTrigger(context.Context, *GetJobTriggerRequest) (*JobTrigger, error) + // Lists job triggers. + ListJobTriggers(context.Context, *ListJobTriggersRequest) (*ListJobTriggersResponse, error) + // Deletes a job trigger. + DeleteJobTrigger(context.Context, *DeleteJobTriggerRequest) (*google_protobuf3.Empty, error) + // Create a new job to inspect storage or calculate risk metrics [How-to + // guide](/dlp/docs/compute-risk-analysis). + CreateDlpJob(context.Context, *CreateDlpJobRequest) (*DlpJob, error) + // Lists DlpJobs that match the specified filter in the request. + ListDlpJobs(context.Context, *ListDlpJobsRequest) (*ListDlpJobsResponse, error) + // Gets the latest state of a long-running DlpJob. + GetDlpJob(context.Context, *GetDlpJobRequest) (*DlpJob, error) + // Deletes a long-running DlpJob. This method indicates that the client is + // no longer interested in the DlpJob result. The job will be cancelled if + // possible. + DeleteDlpJob(context.Context, *DeleteDlpJobRequest) (*google_protobuf3.Empty, error) + // Starts asynchronous cancellation on a long-running DlpJob. The server + // makes a best effort to cancel the DlpJob, but success is not + // guaranteed. + CancelDlpJob(context.Context, *CancelDlpJobRequest) (*google_protobuf3.Empty, error) +} + +func RegisterDlpServiceServer(s *grpc.Server, srv DlpServiceServer) { + s.RegisterService(&_DlpService_serviceDesc, srv) +} + +func _DlpService_InspectContent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(InspectContentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).InspectContent(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2.DlpService/InspectContent", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).InspectContent(ctx, req.(*InspectContentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_RedactImage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RedactImageRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).RedactImage(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2.DlpService/RedactImage", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).RedactImage(ctx, req.(*RedactImageRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_DeidentifyContent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeidentifyContentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).DeidentifyContent(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2.DlpService/DeidentifyContent", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).DeidentifyContent(ctx, req.(*DeidentifyContentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_ReidentifyContent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ReidentifyContentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).ReidentifyContent(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2.DlpService/ReidentifyContent", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).ReidentifyContent(ctx, req.(*ReidentifyContentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_ListInfoTypes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListInfoTypesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).ListInfoTypes(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2.DlpService/ListInfoTypes", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).ListInfoTypes(ctx, req.(*ListInfoTypesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_CreateInspectTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateInspectTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).CreateInspectTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2.DlpService/CreateInspectTemplate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).CreateInspectTemplate(ctx, req.(*CreateInspectTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_UpdateInspectTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateInspectTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).UpdateInspectTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2.DlpService/UpdateInspectTemplate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).UpdateInspectTemplate(ctx, req.(*UpdateInspectTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_GetInspectTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetInspectTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).GetInspectTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2.DlpService/GetInspectTemplate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).GetInspectTemplate(ctx, req.(*GetInspectTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_ListInspectTemplates_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListInspectTemplatesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).ListInspectTemplates(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2.DlpService/ListInspectTemplates", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).ListInspectTemplates(ctx, req.(*ListInspectTemplatesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_DeleteInspectTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteInspectTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).DeleteInspectTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2.DlpService/DeleteInspectTemplate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).DeleteInspectTemplate(ctx, req.(*DeleteInspectTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_CreateDeidentifyTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateDeidentifyTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).CreateDeidentifyTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2.DlpService/CreateDeidentifyTemplate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).CreateDeidentifyTemplate(ctx, req.(*CreateDeidentifyTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_UpdateDeidentifyTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateDeidentifyTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).UpdateDeidentifyTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2.DlpService/UpdateDeidentifyTemplate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).UpdateDeidentifyTemplate(ctx, req.(*UpdateDeidentifyTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_GetDeidentifyTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetDeidentifyTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).GetDeidentifyTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2.DlpService/GetDeidentifyTemplate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).GetDeidentifyTemplate(ctx, req.(*GetDeidentifyTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_ListDeidentifyTemplates_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListDeidentifyTemplatesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).ListDeidentifyTemplates(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2.DlpService/ListDeidentifyTemplates", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).ListDeidentifyTemplates(ctx, req.(*ListDeidentifyTemplatesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_DeleteDeidentifyTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteDeidentifyTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).DeleteDeidentifyTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2.DlpService/DeleteDeidentifyTemplate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).DeleteDeidentifyTemplate(ctx, req.(*DeleteDeidentifyTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_CreateJobTrigger_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateJobTriggerRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).CreateJobTrigger(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2.DlpService/CreateJobTrigger", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).CreateJobTrigger(ctx, req.(*CreateJobTriggerRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_UpdateJobTrigger_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateJobTriggerRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).UpdateJobTrigger(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2.DlpService/UpdateJobTrigger", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).UpdateJobTrigger(ctx, req.(*UpdateJobTriggerRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_GetJobTrigger_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetJobTriggerRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).GetJobTrigger(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2.DlpService/GetJobTrigger", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).GetJobTrigger(ctx, req.(*GetJobTriggerRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_ListJobTriggers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListJobTriggersRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).ListJobTriggers(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2.DlpService/ListJobTriggers", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).ListJobTriggers(ctx, req.(*ListJobTriggersRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_DeleteJobTrigger_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteJobTriggerRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).DeleteJobTrigger(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2.DlpService/DeleteJobTrigger", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).DeleteJobTrigger(ctx, req.(*DeleteJobTriggerRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_CreateDlpJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateDlpJobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).CreateDlpJob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2.DlpService/CreateDlpJob", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).CreateDlpJob(ctx, req.(*CreateDlpJobRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_ListDlpJobs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListDlpJobsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).ListDlpJobs(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2.DlpService/ListDlpJobs", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).ListDlpJobs(ctx, req.(*ListDlpJobsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_GetDlpJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetDlpJobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).GetDlpJob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2.DlpService/GetDlpJob", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).GetDlpJob(ctx, req.(*GetDlpJobRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_DeleteDlpJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteDlpJobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).DeleteDlpJob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2.DlpService/DeleteDlpJob", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).DeleteDlpJob(ctx, req.(*DeleteDlpJobRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_CancelDlpJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CancelDlpJobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).CancelDlpJob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2.DlpService/CancelDlpJob", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).CancelDlpJob(ctx, req.(*CancelDlpJobRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _DlpService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.privacy.dlp.v2.DlpService", + HandlerType: (*DlpServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "InspectContent", + Handler: _DlpService_InspectContent_Handler, + }, + { + MethodName: "RedactImage", + Handler: _DlpService_RedactImage_Handler, + }, + { + MethodName: "DeidentifyContent", + Handler: _DlpService_DeidentifyContent_Handler, + }, + { + MethodName: "ReidentifyContent", + Handler: _DlpService_ReidentifyContent_Handler, + }, + { + MethodName: "ListInfoTypes", + Handler: _DlpService_ListInfoTypes_Handler, + }, + { + MethodName: "CreateInspectTemplate", + Handler: _DlpService_CreateInspectTemplate_Handler, + }, + { + MethodName: "UpdateInspectTemplate", + Handler: _DlpService_UpdateInspectTemplate_Handler, + }, + { + MethodName: "GetInspectTemplate", + Handler: _DlpService_GetInspectTemplate_Handler, + }, + { + MethodName: "ListInspectTemplates", + Handler: _DlpService_ListInspectTemplates_Handler, + }, + { + MethodName: "DeleteInspectTemplate", + Handler: _DlpService_DeleteInspectTemplate_Handler, + }, + { + MethodName: "CreateDeidentifyTemplate", + Handler: _DlpService_CreateDeidentifyTemplate_Handler, + }, + { + MethodName: "UpdateDeidentifyTemplate", + Handler: _DlpService_UpdateDeidentifyTemplate_Handler, + }, + { + MethodName: "GetDeidentifyTemplate", + Handler: _DlpService_GetDeidentifyTemplate_Handler, + }, + { + MethodName: "ListDeidentifyTemplates", + Handler: _DlpService_ListDeidentifyTemplates_Handler, + }, + { + MethodName: "DeleteDeidentifyTemplate", + Handler: _DlpService_DeleteDeidentifyTemplate_Handler, + }, + { + MethodName: "CreateJobTrigger", + Handler: _DlpService_CreateJobTrigger_Handler, + }, + { + MethodName: "UpdateJobTrigger", + Handler: _DlpService_UpdateJobTrigger_Handler, + }, + { + MethodName: "GetJobTrigger", + Handler: _DlpService_GetJobTrigger_Handler, + }, + { + MethodName: "ListJobTriggers", + Handler: _DlpService_ListJobTriggers_Handler, + }, + { + MethodName: "DeleteJobTrigger", + Handler: _DlpService_DeleteJobTrigger_Handler, + }, + { + MethodName: "CreateDlpJob", + Handler: _DlpService_CreateDlpJob_Handler, + }, + { + MethodName: "ListDlpJobs", + Handler: _DlpService_ListDlpJobs_Handler, + }, + { + MethodName: "GetDlpJob", + Handler: _DlpService_GetDlpJob_Handler, + }, + { + MethodName: "DeleteDlpJob", + Handler: _DlpService_DeleteDlpJob_Handler, + }, + { + MethodName: "CancelDlpJob", + Handler: _DlpService_CancelDlpJob_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/privacy/dlp/v2/dlp.proto", +} + +func init() { proto.RegisterFile("google/privacy/dlp/v2/dlp.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 7980 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x7d, 0x6d, 0x6c, 0x1b, 0xd9, + 0x76, 0x98, 0x86, 0x14, 0x25, 0xea, 0x50, 0xa4, 0xa8, 0x2b, 0x4b, 0x96, 0x69, 0x7b, 0xed, 0x1d, + 0xef, 0x7a, 0xbd, 0x5a, 0x5b, 0xda, 0xd5, 0x7e, 0xbc, 0x5d, 0xef, 0xbe, 0x4d, 0x28, 0x92, 0x16, + 0xe9, 0x95, 0x44, 0x79, 0x48, 0x79, 0xd7, 0xce, 0x62, 0xa7, 0x23, 0xf2, 0x8a, 0x1a, 0x8b, 0xe4, + 0xd0, 0x33, 0x43, 0x5b, 0xda, 0x24, 0xc0, 0x4b, 0xd1, 0x36, 0x48, 0xd1, 0x87, 0x06, 0x68, 0x5f, + 0x1f, 0x9a, 0xb4, 0x41, 0xda, 0xfe, 0x28, 0x10, 0x20, 0x2d, 0x8a, 0xb6, 0x09, 0xd2, 0xa6, 0xfd, + 0x91, 0x7e, 0xa2, 0x28, 0x8a, 0x17, 0xbc, 0x5f, 0x45, 0x51, 0x20, 0x7d, 0xfd, 0x40, 0x81, 0xcd, + 0x9f, 0x02, 0xfd, 0xd1, 0x0f, 0xa0, 0x28, 0xee, 0xd7, 0x7c, 0x71, 0x86, 0x1f, 0xb2, 0x17, 0x09, + 0xf2, 0x4b, 0x9c, 0x73, 0xcf, 0x39, 0xf7, 0xdc, 0x73, 0xcf, 0x3d, 0xf7, 0xdc, 0x73, 0x3f, 0x04, + 0xd7, 0x5a, 0x86, 0xd1, 0x6a, 0xe3, 0x8d, 0x9e, 0xa9, 0x3f, 0xd3, 0x1a, 0x67, 0x1b, 0xcd, 0x76, + 0x6f, 0xe3, 0xd9, 0x26, 0xf9, 0xb3, 0xde, 0x33, 0x0d, 0xdb, 0x40, 0xcb, 0x0c, 0x61, 0x9d, 0x23, + 0xac, 0x93, 0x92, 0x67, 0x9b, 0xb9, 0x2b, 0x9c, 0x4e, 0xeb, 0xe9, 0x1b, 0x5a, 0xb7, 0x6b, 0xd8, + 0x9a, 0xad, 0x1b, 0x5d, 0x8b, 0x11, 0xe5, 0x6e, 0x84, 0x73, 0xb5, 0x6c, 0xc3, 0xd4, 0x5a, 0x98, + 0x23, 0xbd, 0xe2, 0x20, 0x19, 0xb6, 0x71, 0xd8, 0x3f, 0xda, 0x68, 0xf6, 0x4d, 0xca, 0x85, 0x97, + 0x5f, 0x0e, 0x96, 0xe3, 0x4e, 0xcf, 0x3e, 0xe3, 0x85, 0xd7, 0x83, 0x85, 0x47, 0x3a, 0x6e, 0x37, + 0xd5, 0x8e, 0x66, 0x9d, 0x70, 0x8c, 0x6b, 0x41, 0x0c, 0x5b, 0xef, 0x60, 0xcb, 0xd6, 0x3a, 0xbc, + 0x65, 0xb9, 0x8b, 0x1c, 0xc1, 0xec, 0x35, 0x36, 0x2c, 0x5b, 0xb3, 0xfb, 0x42, 0xfa, 0x15, 0x5e, + 0x60, 0x9f, 0xf5, 0xf0, 0x46, 0x53, 0xb3, 0x71, 0x40, 0x20, 0x0e, 0x3f, 0x33, 0x8e, 0x9e, 0x63, + 0x7c, 0x12, 0x56, 0x48, 0xaa, 0x32, 0x8e, 0x9a, 0x1a, 0x97, 0x56, 0xfe, 0xd7, 0x33, 0x90, 0xae, + 0x74, 0xad, 0x1e, 0x6e, 0xd8, 0x05, 0xa3, 0x7b, 0xa4, 0xb7, 0xd0, 0xa7, 0x00, 0x7a, 0xf7, 0xc8, + 0x50, 0x09, 0xba, 0xb5, 0x2a, 0x5d, 0x8f, 0xdf, 0x4a, 0x6d, 0x5e, 0x5b, 0x0f, 0xd5, 0xf5, 0x7a, + 0xa5, 0x7b, 0x64, 0xd4, 0xcf, 0x7a, 0x58, 0x99, 0xd3, 0xf9, 0x2f, 0x0b, 0x95, 0x21, 0xd3, 0xd1, + 0xbb, 0x6a, 0x5b, 0x3f, 0xc1, 0x6d, 0xfd, 0xd8, 0x30, 0x9a, 0xab, 0xb1, 0xeb, 0xd2, 0xad, 0xcc, + 0xe6, 0xab, 0x11, 0x3c, 0x76, 0x1c, 0x44, 0x25, 0xdd, 0xd1, 0xbb, 0xee, 0x27, 0xba, 0x0f, 0x33, + 0x6d, 0xbd, 0xa3, 0xdb, 0xd6, 0x6a, 0xfc, 0xba, 0x74, 0x2b, 0xb5, 0xb9, 0x19, 0x29, 0x85, 0x47, + 0xfe, 0xf5, 0x7b, 0x7a, 0xb7, 0xa9, 0x77, 0x5b, 0x3b, 0x94, 0x52, 0xe1, 0x1c, 0xd0, 0x0d, 0x48, + 0xeb, 0xdd, 0x46, 0xbb, 0xdf, 0xc4, 0xea, 0xd3, 0xbe, 0x61, 0xe3, 0xd5, 0xe9, 0xeb, 0xd2, 0xad, + 0xa4, 0x32, 0xcf, 0x81, 0x0f, 0x08, 0x0c, 0xdd, 0x06, 0x84, 0x4f, 0x19, 0x92, 0x47, 0x05, 0x09, + 0x8a, 0x99, 0xe5, 0x25, 0x15, 0xa7, 0xa1, 0x0f, 0x60, 0xb1, 0xd1, 0xb7, 0x6c, 0xa3, 0xe3, 0x45, + 0x9e, 0xa1, 0xfa, 0x7a, 0x3d, 0x42, 0xd2, 0x02, 0xc5, 0x77, 0xb4, 0xb6, 0xd0, 0xf0, 0x7d, 0x5b, + 0x68, 0x17, 0x16, 0x1a, 0x46, 0xd7, 0xc6, 0x5d, 0x5b, 0x35, 0x7a, 0xd4, 0x6c, 0x57, 0x93, 0xd7, + 0xe3, 0xb7, 0x32, 0x9b, 0xaf, 0x45, 0x31, 0x64, 0xd8, 0x55, 0x8a, 0xac, 0x64, 0x1a, 0xde, 0x4f, + 0x2b, 0xf7, 0x4d, 0x0c, 0xd2, 0x3e, 0x75, 0xa0, 0x77, 0x60, 0xb9, 0xa3, 0x9d, 0xaa, 0x47, 0x0c, + 0x68, 0xa9, 0x3d, 0x6c, 0xaa, 0xba, 0x8d, 0x3b, 0xab, 0xd2, 0x75, 0xe9, 0x56, 0x42, 0x41, 0x1d, + 0xed, 0x94, 0x13, 0x58, 0xfb, 0xd8, 0xac, 0xd8, 0xb8, 0x83, 0xbe, 0x03, 0xab, 0x03, 0x24, 0x26, + 0x7e, 0xda, 0xc7, 0x96, 0x4d, 0x7b, 0x36, 0xa1, 0x2c, 0xfb, 0xa9, 0x14, 0x56, 0x88, 0x7e, 0x0e, + 0x72, 0x83, 0x75, 0x09, 0x4d, 0xad, 0xc6, 0xa9, 0xa2, 0x7e, 0x7a, 0xf2, 0x2e, 0x75, 0x8c, 0x8e, + 0x7e, 0x2a, 0x2b, 0x01, 0x91, 0x79, 0x61, 0xae, 0x47, 0xec, 0xda, 0x83, 0x88, 0x3e, 0x81, 0x39, + 0xb7, 0x76, 0x89, 0x1a, 0xd4, 0x48, 0xb3, 0x4e, 0x0a, 0xb3, 0x46, 0xaf, 0xc2, 0xbc, 0xb7, 0x31, + 0xbc, 0xe5, 0x29, 0x4f, 0xe5, 0xf2, 0x1f, 0x48, 0xb0, 0xb0, 0x75, 0x66, 0x63, 0xde, 0x27, 0x54, + 0x79, 0x45, 0x98, 0x76, 0xea, 0xcb, 0x6c, 0xbe, 0x1d, 0x51, 0x5f, 0x80, 0x8a, 0x7e, 0x5b, 0x54, + 0x00, 0x4a, 0x8d, 0x10, 0x4c, 0x37, 0x35, 0x5b, 0xa3, 0x95, 0xce, 0x2b, 0xf4, 0xb7, 0x6c, 0xc1, + 0x9c, 0x83, 0x86, 0x72, 0xb0, 0xb2, 0xf5, 0xa8, 0x5e, 0xaa, 0xa9, 0xf5, 0x47, 0xfb, 0x25, 0xf5, + 0x60, 0xaf, 0xb6, 0x5f, 0x2a, 0x54, 0xee, 0x55, 0x4a, 0xc5, 0xec, 0x14, 0xca, 0x00, 0x54, 0x76, + 0xf3, 0xdb, 0x25, 0xf5, 0xfe, 0x7e, 0x69, 0x3b, 0x2b, 0xa1, 0x34, 0xcc, 0xb1, 0xef, 0xad, 0xdd, + 0xfd, 0x6c, 0xcc, 0xfd, 0xdc, 0xdf, 0xdb, 0xce, 0xc6, 0xdd, 0xcf, 0xda, 0xc3, 0xed, 0xec, 0x34, + 0xf9, 0xac, 0x97, 0xbe, 0xa8, 0xab, 0x07, 0xf5, 0x7b, 0x1f, 0x66, 0x13, 0xf2, 0xdf, 0x95, 0x20, + 0xe5, 0x6d, 0xde, 0x0a, 0x24, 0x9e, 0x69, 0xed, 0x3e, 0xa6, 0x03, 0x74, 0xae, 0x3c, 0xa5, 0xb0, + 0x4f, 0xf4, 0x1e, 0x24, 0x6c, 0xed, 0xb0, 0xcd, 0x46, 0x59, 0x6a, 0xf3, 0x4a, 0x44, 0xbb, 0xeb, + 0x04, 0x87, 0x50, 0x51, 0x64, 0x54, 0x82, 0xb9, 0xc3, 0x33, 0x1b, 0x33, 0x83, 0x4c, 0x50, 0xca, + 0x9b, 0xe3, 0x69, 0xac, 0x3c, 0xa5, 0x24, 0x09, 0x29, 0xf9, 0xbd, 0x95, 0x82, 0x39, 0xa2, 0x21, + 0xca, 0x46, 0xfe, 0x07, 0x12, 0x24, 0x68, 0x35, 0xe8, 0x43, 0x98, 0x3d, 0xc6, 0x5a, 0x13, 0x9b, + 0xc2, 0xa9, 0xbd, 0x12, 0xc1, 0xfb, 0x1e, 0xf1, 0xd7, 0x95, 0xa6, 0x22, 0xd0, 0xd1, 0x7b, 0x30, + 0x6d, 0x1a, 0xcf, 0x49, 0x9f, 0x13, 0xb2, 0xeb, 0xc3, 0x1a, 0xb3, 0xae, 0x18, 0xcf, 0x15, 0x8a, + 0x9d, 0xfb, 0x18, 0xe2, 0x8a, 0xf1, 0x1c, 0xbd, 0x07, 0x33, 0x54, 0x27, 0xa2, 0xd6, 0x28, 0x5d, + 0x3c, 0x24, 0x48, 0x0a, 0xc7, 0x95, 0xbf, 0x76, 0xbc, 0xb2, 0x82, 0xad, 0x7e, 0xdb, 0x46, 0x77, + 0x21, 0xe9, 0xd8, 0xde, 0x28, 0xf1, 0x29, 0x9a, 0xe2, 0xe0, 0xa3, 0x3b, 0x80, 0x9c, 0x41, 0x68, + 0x9b, 0xfd, 0x6e, 0x43, 0xb3, 0x31, 0xf3, 0xca, 0x49, 0x65, 0x51, 0x94, 0xd4, 0x45, 0x81, 0xfc, + 0x1f, 0x62, 0x30, 0xcb, 0x99, 0xa0, 0x0b, 0x90, 0x60, 0xee, 0x92, 0x18, 0xf0, 0x9c, 0xc2, 0x3e, + 0xfc, 0x43, 0x29, 0x36, 0xe9, 0x50, 0xca, 0x03, 0x78, 0x26, 0x87, 0xf8, 0xb8, 0x93, 0x83, 0x87, + 0x08, 0x7d, 0x0c, 0xc9, 0xb6, 0xd1, 0xa0, 0x53, 0x32, 0x37, 0xb1, 0xa8, 0xfa, 0x77, 0x38, 0x9a, + 0xe2, 0x10, 0xa0, 0x8f, 0x21, 0xd5, 0x30, 0xb1, 0x66, 0x63, 0x95, 0x4c, 0x86, 0xab, 0x33, 0x94, + 0x3e, 0xe7, 0xd2, 0xb3, 0x49, 0x79, 0xbd, 0x2e, 0x26, 0x65, 0x05, 0x18, 0x3a, 0x01, 0xa0, 0x9f, + 0x02, 0xa0, 0x3a, 0xa0, 0x9e, 0x6c, 0x75, 0x96, 0xd2, 0x46, 0x59, 0x04, 0x9d, 0x54, 0x88, 0x02, + 0x94, 0xb9, 0xa7, 0xe2, 0xa7, 0xfc, 0x9f, 0x25, 0x48, 0xee, 0xb8, 0xa2, 0x00, 0xb5, 0x78, 0x53, + 0xeb, 0xb6, 0x84, 0x53, 0x8a, 0x32, 0x10, 0x85, 0xe0, 0x28, 0x74, 0x84, 0xd0, 0x9f, 0xa8, 0x44, + 0x26, 0x8b, 0x26, 0xee, 0x19, 0x7a, 0xd7, 0xe6, 0x1c, 0x62, 0x63, 0x70, 0xc8, 0x38, 0x44, 0x8c, + 0x4d, 0x0d, 0x16, 0xc5, 0x9c, 0x23, 0x54, 0x64, 0xad, 0xce, 0x52, 0x13, 0xbb, 0x39, 0x7c, 0xd6, + 0x71, 0x74, 0x9b, 0x6d, 0xf8, 0x01, 0x96, 0xfc, 0xdb, 0x71, 0x58, 0x08, 0x60, 0xa1, 0xd7, 0x81, + 0xce, 0x4f, 0x9a, 0xde, 0xc5, 0xa6, 0xda, 0xd5, 0x3a, 0xc2, 0xa8, 0xd2, 0x0e, 0x74, 0x4f, 0xeb, + 0x60, 0xb4, 0x0f, 0x0b, 0x26, 0x6e, 0x18, 0x66, 0xd3, 0x11, 0x87, 0x37, 0x2b, 0x6a, 0x52, 0x55, + 0x28, 0xb6, 0xa8, 0xa6, 0x3c, 0xa5, 0x64, 0x4c, 0x1f, 0x04, 0xed, 0x42, 0x46, 0xef, 0x68, 0x2d, + 0xec, 0x32, 0x64, 0xf1, 0x44, 0xd4, 0xa4, 0x5a, 0x21, 0xc8, 0x1e, 0x7e, 0x69, 0xdd, 0x0b, 0x40, + 0x0f, 0x61, 0xb1, 0x69, 0x34, 0xfa, 0x1d, 0xaf, 0xc6, 0xb8, 0xbb, 0x7a, 0x23, 0x82, 0x63, 0x91, + 0xe3, 0x7b, 0x98, 0x66, 0x9b, 0x01, 0x18, 0xfa, 0x0c, 0x96, 0x5c, 0xfd, 0x38, 0x21, 0xe1, 0x18, + 0xf6, 0x89, 0x1c, 0x32, 0x07, 0x86, 0xde, 0x62, 0xbd, 0xca, 0x98, 0x3d, 0xc3, 0xa6, 0x45, 0x84, + 0x9c, 0xa5, 0xfa, 0xce, 0x3a, 0x05, 0x0f, 0x19, 0x7c, 0x0b, 0xdc, 0xe1, 0x24, 0xbf, 0x0b, 0xd9, + 0xa0, 0xb4, 0xe8, 0x1a, 0xa4, 0x8e, 0xf4, 0x36, 0x56, 0x8d, 0xa3, 0x23, 0x0b, 0xdb, 0xb4, 0xdb, + 0xe2, 0x0a, 0x10, 0x50, 0x95, 0x42, 0xe4, 0x7f, 0x2f, 0x41, 0xc6, 0xdf, 0x0d, 0x64, 0xa0, 0xf0, + 0x6e, 0x3c, 0xc1, 0x67, 0xdc, 0xb4, 0xaf, 0x0f, 0xed, 0xc1, 0xcf, 0xf0, 0x99, 0x32, 0x67, 0x8a, + 0x9f, 0xe8, 0x23, 0xe2, 0xf1, 0x48, 0xe4, 0xac, 0x37, 0xb9, 0x01, 0x8c, 0x74, 0xd8, 0x47, 0xec, + 0x07, 0xfa, 0x0c, 0x32, 0x74, 0x46, 0x19, 0xb7, 0xc3, 0xa9, 0xeb, 0x76, 0xac, 0x39, 0x6d, 0x7b, + 0x3f, 0xe5, 0xdb, 0x90, 0xf6, 0x95, 0xa3, 0xcb, 0x30, 0x67, 0x1a, 0xcf, 0x55, 0xbd, 0xdb, 0xc4, + 0xa7, 0x5c, 0x17, 0x49, 0xd3, 0x78, 0x5e, 0x21, 0xdf, 0xf2, 0x06, 0x24, 0xd8, 0xb0, 0xba, 0x00, + 0x09, 0xcb, 0xd6, 0x4c, 0xa1, 0x2d, 0xf6, 0x81, 0xb2, 0x10, 0xc7, 0x5d, 0xd6, 0x9e, 0xb8, 0x42, + 0x7e, 0xca, 0x8f, 0x21, 0xed, 0xb3, 0x37, 0x54, 0x81, 0xcc, 0xa1, 0xd1, 0xa7, 0xee, 0x57, 0x3d, + 0x34, 0x4e, 0x9d, 0x89, 0x43, 0x8e, 0x9a, 0x0a, 0x39, 0xf2, 0x96, 0x71, 0xaa, 0xa4, 0x0f, 0xdd, + 0x0f, 0x6c, 0xc9, 0x1a, 0xa4, 0x3c, 0xa5, 0xa4, 0x72, 0xdb, 0xe8, 0xf1, 0x50, 0x8f, 0xfc, 0x24, + 0x81, 0x45, 0x1b, 0x1f, 0x89, 0x38, 0x8e, 0xfe, 0x26, 0x82, 0x3f, 0xd7, 0x9b, 0xf6, 0x31, 0xd5, + 0x59, 0x42, 0x61, 0x1f, 0x68, 0x05, 0x66, 0x8e, 0xb1, 0xde, 0x3a, 0xb6, 0xa9, 0xbf, 0x4d, 0x28, + 0xfc, 0x4b, 0xfe, 0xf3, 0xd3, 0x80, 0x14, 0xdc, 0xd4, 0x1a, 0x36, 0x6d, 0x85, 0x88, 0xfd, 0x56, + 0x60, 0xa6, 0xa7, 0x99, 0xb8, 0x6b, 0xf3, 0x31, 0xce, 0xbf, 0x48, 0xcf, 0xe8, 0x6c, 0x5e, 0x53, + 0x1b, 0x34, 0xb6, 0xe3, 0x5d, 0xfb, 0xda, 0x38, 0x71, 0xa0, 0x92, 0xd6, 0x7d, 0x2b, 0x95, 0x67, + 0x70, 0x91, 0x8d, 0x6b, 0x93, 0x0a, 0xa0, 0x1b, 0x5d, 0xce, 0x94, 0xc4, 0xec, 0x44, 0x65, 0x9f, + 0x46, 0xda, 0x5b, 0x50, 0xe0, 0x75, 0xfe, 0xc1, 0xf9, 0xf0, 0xfa, 0x96, 0xf5, 0x10, 0xa8, 0x85, + 0x0a, 0xde, 0x38, 0x65, 0x76, 0x92, 0x38, 0xc5, 0x8d, 0x52, 0x72, 0xbf, 0x2f, 0xc1, 0x85, 0xb0, + 0x4a, 0xd1, 0xa7, 0x93, 0xc7, 0xa9, 0x24, 0xfc, 0x71, 0xa6, 0xd7, 0x5b, 0xc4, 0x7f, 0x12, 0x96, + 0xaa, 0xd6, 0x6e, 0xab, 0x36, 0x3e, 0x65, 0xdd, 0x9b, 0x24, 0x8e, 0x8c, 0x15, 0xe4, 0xdb, 0xed, + 0x3a, 0x3e, 0xb5, 0xc9, 0x04, 0xe2, 0xd5, 0x5c, 0xdb, 0x30, 0xf9, 0x38, 0xb9, 0x12, 0xe9, 0xf7, + 0xdb, 0x86, 0x49, 0xdc, 0xab, 0x23, 0x71, 0xdb, 0x30, 0xb7, 0x92, 0x30, 0x63, 0x6b, 0x66, 0x0b, + 0xdb, 0x72, 0x01, 0x12, 0x14, 0x44, 0x2c, 0xcd, 0xc4, 0x4d, 0x2a, 0x7d, 0x4c, 0x21, 0x3f, 0x89, + 0x55, 0xb5, 0x4c, 0x8c, 0x99, 0x2f, 0x8f, 0x29, 0xec, 0x83, 0xd8, 0xdf, 0xa1, 0x08, 0x1f, 0x63, + 0x0a, 0xfd, 0x2d, 0x37, 0x60, 0xc9, 0xd7, 0x3f, 0x56, 0xcf, 0xe8, 0x5a, 0x98, 0xcc, 0x1e, 0xac, + 0x5e, 0xdc, 0x54, 0x69, 0xb7, 0x50, 0xee, 0xf3, 0xa2, 0x4d, 0xb8, 0x49, 0xd1, 0x09, 0x1a, 0x3e, + 0xb5, 0x4d, 0x86, 0xe7, 0x34, 0x7e, 0x4e, 0x49, 0x3b, 0x50, 0xd2, 0x74, 0xf9, 0xff, 0xc6, 0x60, + 0xb5, 0x88, 0xf5, 0x26, 0xee, 0xda, 0xfa, 0xd1, 0x19, 0xef, 0xa1, 0x51, 0xc6, 0x5b, 0x87, 0xc5, + 0xa6, 0x43, 0xe3, 0xb7, 0xdf, 0x48, 0xc7, 0xef, 0xad, 0x83, 0x98, 0x54, 0xb6, 0x19, 0x80, 0x84, + 0x0c, 0x89, 0xf8, 0xf9, 0x87, 0xc4, 0x07, 0x30, 0x4d, 0xad, 0x92, 0x05, 0x45, 0xf2, 0xf0, 0xf9, + 0x9b, 0x5a, 0x24, 0xc5, 0x47, 0x9b, 0xb0, 0x2c, 0x84, 0xb0, 0x71, 0xa7, 0xd7, 0x26, 0xd1, 0x11, + 0x9d, 0xa2, 0x13, 0x54, 0x03, 0x4b, 0xbc, 0xb0, 0xce, 0xcb, 0xe8, 0x44, 0xfd, 0x21, 0xac, 0x7a, + 0xd4, 0xe1, 0x27, 0x9b, 0xa1, 0x64, 0x2b, 0x6e, 0xb9, 0x97, 0x52, 0xfe, 0x35, 0x09, 0x2e, 0x85, + 0x68, 0x9f, 0xf7, 0xb4, 0x68, 0x83, 0x34, 0x61, 0x1b, 0x2a, 0x90, 0x34, 0x9e, 0x61, 0xf3, 0x99, + 0x8e, 0x9f, 0xf3, 0x5e, 0xb9, 0x13, 0xe5, 0xef, 0x4d, 0xad, 0x6b, 0x1d, 0x19, 0x66, 0x87, 0x7a, + 0xdc, 0x2a, 0x27, 0x52, 0x1c, 0x72, 0x6a, 0x1e, 0xca, 0x39, 0xcc, 0xc3, 0x7c, 0x61, 0xf3, 0x30, + 0xff, 0x24, 0x99, 0x87, 0x39, 0xc2, 0x3c, 0xcc, 0x68, 0xf3, 0x50, 0xfe, 0x38, 0x9b, 0xc7, 0x7f, + 0x97, 0x60, 0xd9, 0xd5, 0xf3, 0x38, 0xb6, 0xf1, 0x52, 0xe7, 0x3d, 0xa1, 0x81, 0xf8, 0xcb, 0xea, + 0xc5, 0xe9, 0xc8, 0x5e, 0x94, 0x1f, 0xc2, 0x4a, 0xb0, 0xa5, 0xbc, 0x1f, 0x3e, 0x81, 0x19, 0x93, + 0xae, 0x4d, 0x79, 0x4f, 0x8c, 0x68, 0x0a, 0x5b, 0xc7, 0x2a, 0x9c, 0x46, 0xfe, 0xb7, 0x31, 0x58, + 0xaa, 0xf6, 0xed, 0x5e, 0xdf, 0xae, 0xb1, 0xd4, 0x2b, 0x6f, 0xdb, 0x27, 0x22, 0x73, 0x30, 0x9c, + 0xe9, 0x96, 0xde, 0x7a, 0xd0, 0xc7, 0xe6, 0x59, 0x20, 0x83, 0xf0, 0x25, 0xa4, 0x0d, 0xca, 0x54, + 0xb5, 0x1a, 0xc7, 0xb8, 0xa3, 0xf1, 0xd5, 0xe5, 0x77, 0x22, 0xb8, 0x84, 0x08, 0x20, 0x60, 0x94, + 0x5c, 0x99, 0x37, 0x3c, 0x5f, 0xf2, 0x2f, 0x4b, 0x30, 0xef, 0x2d, 0x46, 0x57, 0xe1, 0x52, 0xf5, + 0xa0, 0xbe, 0x7f, 0x50, 0x57, 0x6b, 0x85, 0x72, 0x69, 0x37, 0x1f, 0xc8, 0xbc, 0x2c, 0x42, 0x7a, + 0x2b, 0x5f, 0xab, 0x14, 0xd4, 0x42, 0x75, 0xe7, 0x60, 0x77, 0xaf, 0x96, 0x95, 0xd0, 0x02, 0xa4, + 0xb6, 0x0b, 0x35, 0x07, 0x10, 0x43, 0xcb, 0xb0, 0x58, 0xcc, 0xd7, 0xf3, 0xb5, 0x7a, 0x55, 0x29, + 0x39, 0xe0, 0x38, 0x01, 0x6f, 0x55, 0xb6, 0xd5, 0x07, 0x07, 0x25, 0xe5, 0x91, 0x03, 0x9e, 0x26, + 0xe4, 0xf9, 0x9d, 0x1d, 0x07, 0x90, 0xd8, 0x9a, 0x61, 0xf9, 0x25, 0xb9, 0xe1, 0x66, 0xbb, 0x6a, + 0xb6, 0x66, 0x5b, 0x2f, 0x98, 0xed, 0xba, 0x00, 0x89, 0x86, 0xd1, 0xef, 0xda, 0x3c, 0x50, 0x65, + 0x1f, 0xf2, 0x8f, 0xa6, 0x61, 0x95, 0xf7, 0x66, 0x51, 0xb3, 0xb5, 0x9a, 0xd1, 0x37, 0x1b, 0xb8, + 0x88, 0x6d, 0x4d, 0x6f, 0x5b, 0xa8, 0x43, 0xbc, 0x1f, 0x1d, 0x04, 0xb8, 0xe9, 0x24, 0x2f, 0x99, + 0x91, 0x8f, 0x48, 0xf2, 0x0d, 0xf0, 0x5a, 0x57, 0x04, 0x23, 0x9e, 0xc8, 0x24, 0x6e, 0xd1, 0x0f, + 0x41, 0x7b, 0x8e, 0xf5, 0xb1, 0x51, 0xf0, 0xc1, 0xe4, 0x75, 0x78, 0xed, 0x31, 0xf7, 0x4f, 0x25, + 0xc8, 0x06, 0xab, 0x45, 0x87, 0x70, 0xc9, 0xea, 0x6a, 0x3d, 0xeb, 0xd8, 0xb0, 0xd5, 0xe0, 0xc8, + 0xe1, 0x4a, 0xbd, 0x39, 0xbc, 0x5e, 0x31, 0x96, 0x94, 0x8b, 0x82, 0x51, 0xa0, 0x00, 0xdd, 0x03, + 0x78, 0x62, 0x1c, 0xfa, 0x7d, 0xfb, 0x1b, 0xc3, 0x99, 0xde, 0x37, 0x0e, 0xb9, 0x63, 0x98, 0x7b, + 0x22, 0x7e, 0xe6, 0xfe, 0xbe, 0x04, 0x33, 0x3c, 0x57, 0xf4, 0x06, 0x2c, 0xf4, 0x4c, 0xa3, 0x81, + 0x2d, 0x0b, 0x37, 0x55, 0x12, 0x70, 0x5a, 0x7c, 0x11, 0x92, 0x71, 0xc0, 0x34, 0x75, 0x48, 0x1c, + 0x82, 0x6d, 0xd8, 0x5a, 0x5b, 0xc5, 0x96, 0xad, 0x77, 0x34, 0xdb, 0x41, 0x67, 0xdd, 0xbe, 0x44, + 0x0b, 0x4b, 0xa2, 0x8c, 0xd1, 0xec, 0xc0, 0x82, 0x63, 0x58, 0xaa, 0x45, 0x6c, 0x8d, 0xa7, 0x72, + 0x5f, 0x1b, 0x61, 0x5e, 0xd4, 0x2e, 0x89, 0x2b, 0xf3, 0x7c, 0xca, 0xbf, 0x2a, 0xc1, 0x92, 0x40, + 0x28, 0x62, 0xab, 0x61, 0xea, 0x54, 0xf5, 0x24, 0x30, 0xf4, 0x64, 0x08, 0xe8, 0x6f, 0xf4, 0x2a, + 0xcc, 0x37, 0x75, 0xab, 0xd7, 0xd6, 0xce, 0x98, 0xd7, 0x62, 0x81, 0x5d, 0x8a, 0xc3, 0xe8, 0x9c, + 0xb3, 0x0b, 0xf3, 0x56, 0xbf, 0xd7, 0x33, 0x4c, 0xd6, 0x14, 0x2a, 0x59, 0x66, 0x73, 0x6d, 0x94, + 0x64, 0x82, 0x64, 0xeb, 0x4c, 0x49, 0x59, 0xee, 0x87, 0x5c, 0x83, 0x0b, 0x3b, 0xba, 0x65, 0x3b, + 0xf9, 0x79, 0xe1, 0xe5, 0x6f, 0x40, 0xba, 0xad, 0x75, 0x5b, 0x7d, 0xb2, 0xf6, 0x68, 0x18, 0x4d, + 0x21, 0xe6, 0xbc, 0x00, 0x16, 0x8c, 0x26, 0x26, 0x53, 0xc1, 0x91, 0xde, 0xb6, 0xb1, 0xc9, 0x05, + 0xe5, 0x5f, 0xf2, 0x21, 0x2c, 0x07, 0x98, 0x72, 0x87, 0x5a, 0x09, 0xd9, 0x78, 0x19, 0x25, 0xba, + 0x47, 0x67, 0x9e, 0x3d, 0x18, 0xf9, 0xbf, 0x49, 0xb0, 0xac, 0xe8, 0xd6, 0x49, 0xbe, 0xab, 0xb5, + 0xcf, 0x2c, 0xdd, 0x72, 0x2c, 0x86, 0x4c, 0x44, 0x9c, 0x95, 0xda, 0xc1, 0xb6, 0xa9, 0x37, 0x46, + 0x38, 0xda, 0x7d, 0xf6, 0xb9, 0x4b, 0x71, 0x95, 0x74, 0xcf, 0xfb, 0x89, 0xb6, 0x61, 0xde, 0xa2, + 0x83, 0x4a, 0x65, 0x3e, 0x3b, 0x36, 0xbe, 0xcf, 0x56, 0x52, 0x8c, 0x92, 0xe5, 0x66, 0xbf, 0x03, + 0xb3, 0x6c, 0x45, 0x21, 0x8c, 0xe9, 0x6a, 0x04, 0x8f, 0x3c, 0xc5, 0x52, 0x04, 0xb6, 0xfc, 0x2f, + 0x32, 0x90, 0xf6, 0x89, 0x88, 0x9e, 0xc2, 0x4a, 0xb7, 0xdf, 0xc1, 0xa6, 0xde, 0xd0, 0xda, 0xcc, + 0x3e, 0xc5, 0xd8, 0x62, 0x0d, 0xfd, 0x68, 0x9c, 0x86, 0xae, 0xef, 0x09, 0x16, 0xd4, 0x4c, 0x99, + 0xee, 0xca, 0x53, 0xca, 0x85, 0x6e, 0x08, 0x1c, 0x3d, 0x87, 0xd5, 0x86, 0x66, 0xe3, 0x96, 0x11, + 0x52, 0x29, 0x53, 0xc9, 0xc7, 0x63, 0x55, 0x5a, 0x70, 0x99, 0xf8, 0xab, 0x5d, 0x69, 0x84, 0x96, + 0x20, 0x0c, 0xe8, 0x44, 0xd5, 0xba, 0x46, 0xf7, 0xac, 0xa3, 0xdb, 0x67, 0x7e, 0x1f, 0xf2, 0xfe, + 0x58, 0x55, 0x7e, 0x96, 0x17, 0xd4, 0x4e, 0x65, 0xd9, 0x93, 0x00, 0x8c, 0x54, 0xd3, 0x56, 0x9b, + 0x3a, 0xcd, 0x22, 0xb9, 0xd5, 0x4c, 0x4f, 0x50, 0xcd, 0x4e, 0x51, 0x50, 0xbb, 0xd5, 0xb4, 0x03, + 0x30, 0x64, 0xc2, 0xc5, 0x13, 0xb5, 0xa3, 0xf5, 0x84, 0x37, 0x72, 0xd7, 0xf3, 0x3c, 0xbb, 0x36, + 0x5e, 0xd7, 0x7d, 0xb6, 0xab, 0xf5, 0x4a, 0x0e, 0x07, 0xb7, 0xeb, 0x4e, 0x42, 0xe0, 0xb9, 0x1d, + 0xb8, 0x10, 0xd6, 0xd5, 0xe8, 0x3d, 0x48, 0xd0, 0x64, 0x12, 0x37, 0x9a, 0x51, 0x99, 0x27, 0x86, + 0x9c, 0xdb, 0x83, 0x95, 0xf0, 0x3e, 0x3c, 0x27, 0xbf, 0x2a, 0x64, 0x83, 0x1d, 0x84, 0x3e, 0x86, + 0xb9, 0xa7, 0x7d, 0xcd, 0xd2, 0x55, 0xbd, 0x39, 0xee, 0x46, 0x46, 0x92, 0x12, 0x54, 0x9a, 0x56, + 0xee, 0xd7, 0x25, 0xc8, 0x06, 0xfb, 0xe2, 0x85, 0x38, 0xa2, 0x2a, 0x2c, 0x59, 0xb8, 0x6b, 0xe9, + 0xb6, 0xfe, 0x0c, 0xab, 0x9a, 0x6d, 0x9b, 0xfa, 0x61, 0xdf, 0xc6, 0x63, 0x26, 0xec, 0x90, 0x43, + 0x9a, 0x17, 0x94, 0xb9, 0x6f, 0x66, 0xe0, 0x42, 0x58, 0x17, 0xa2, 0xc3, 0x41, 0x31, 0x4b, 0xe7, + 0x36, 0x88, 0xf5, 0xba, 0xd6, 0x6a, 0xe1, 0x26, 0x15, 0xc4, 0xd3, 0x9a, 0x6b, 0x90, 0x32, 0x71, + 0x8b, 0x19, 0x5e, 0x53, 0xcc, 0x30, 0xc0, 0x40, 0xd4, 0xa9, 0x5b, 0x90, 0xd5, 0xfa, 0xa7, 0x7a, + 0x5b, 0xd7, 0xcc, 0x33, 0xe6, 0xf4, 0x84, 0xc7, 0x2a, 0x9f, 0x5f, 0x96, 0xbc, 0xe0, 0xc8, 0x3c, + 0xe3, 0x82, 0xe6, 0xfb, 0xb6, 0x72, 0xff, 0x49, 0x82, 0x94, 0x47, 0xde, 0xf3, 0x19, 0x93, 0x3f, + 0xaf, 0x14, 0x9b, 0x3c, 0xaf, 0x74, 0x0d, 0x80, 0x6f, 0x77, 0xdb, 0x5a, 0xcb, 0xd9, 0xf0, 0x9b, + 0x63, 0xb0, 0xba, 0x46, 0x6c, 0x9c, 0x20, 0x63, 0xd3, 0xc4, 0x4d, 0xee, 0x1c, 0x56, 0x06, 0x92, + 0xd6, 0xa5, 0x4e, 0xcf, 0x3e, 0xe3, 0x6c, 0x29, 0xe6, 0x56, 0x02, 0xe2, 0xb6, 0xd6, 0xca, 0xfd, + 0xcf, 0x18, 0x64, 0xfc, 0x7a, 0x40, 0x77, 0xc5, 0x52, 0x20, 0x3e, 0xc1, 0xb4, 0xc2, 0x17, 0x02, + 0xe6, 0xa0, 0xb1, 0x1c, 0xbc, 0xac, 0x0e, 0x5a, 0x7f, 0xc0, 0xcc, 0x25, 0x68, 0x3c, 0xbb, 0x80, + 0x4c, 0xdc, 0xd6, 0xe8, 0x48, 0x38, 0xa2, 0x01, 0x6b, 0xb7, 0x71, 0x36, 0xe6, 0x48, 0x58, 0x14, + 0x94, 0xf7, 0x04, 0x61, 0xae, 0x01, 0xf3, 0xde, 0x8a, 0xce, 0xd9, 0xeb, 0x57, 0x7d, 0xbd, 0xc6, + 0x0c, 0xda, 0xed, 0x33, 0x67, 0xfd, 0xf0, 0xbf, 0x5e, 0x81, 0x2b, 0x34, 0x58, 0xf8, 0x1a, 0xbb, + 0xa1, 0x32, 0x89, 0x20, 0x44, 0x78, 0xff, 0x15, 0x59, 0xcd, 0x8b, 0xf0, 0xfe, 0x05, 0x22, 0x88, + 0x15, 0x87, 0x8b, 0x7f, 0xda, 0x7e, 0x0c, 0x6e, 0x89, 0x7a, 0xee, 0xa0, 0xe2, 0x82, 0xc3, 0xa3, + 0xe6, 0x89, 0x2e, 0xbe, 0x27, 0x0d, 0xc6, 0x04, 0xbe, 0xc5, 0x43, 0xd4, 0xd8, 0x1d, 0xa6, 0x91, + 0x40, 0x88, 0xc0, 0x42, 0xef, 0xc1, 0x10, 0x81, 0x87, 0xe4, 0x7f, 0x4e, 0x0a, 0x8b, 0x11, 0xb8, + 0x10, 0x6c, 0xb0, 0xdc, 0x3f, 0x8f, 0x10, 0xc1, 0xe9, 0xc6, 0x11, 0x63, 0x20, 0x64, 0xe0, 0x82, + 0xd8, 0xfe, 0x90, 0x81, 0x4b, 0xc0, 0xe6, 0xd7, 0xe2, 0x79, 0x24, 0x70, 0x27, 0x28, 0xa7, 0x6e, + 0x4f, 0x04, 0xe1, 0xd6, 0xea, 0x8d, 0x20, 0x78, 0xad, 0x33, 0xe7, 0xaf, 0xd5, 0x9d, 0xc4, 0xdc, + 0x5a, 0xdb, 0x01, 0x18, 0xfa, 0x05, 0x29, 0x24, 0xa2, 0xe0, 0x75, 0xcf, 0x9e, 0xbf, 0xe3, 0xfd, + 0x2e, 0xc2, 0xed, 0xf8, 0x93, 0x10, 0x78, 0xee, 0xc7, 0x52, 0x30, 0xc2, 0xe0, 0xc2, 0x7d, 0x04, + 0x73, 0x1d, 0xbd, 0xab, 0xb2, 0xe3, 0x13, 0xc3, 0x77, 0x7e, 0xd9, 0xd1, 0x80, 0x64, 0x47, 0xef, + 0xd2, 0x5f, 0x94, 0x54, 0x3b, 0xe5, 0xa4, 0xb1, 0xb1, 0x48, 0xb5, 0x53, 0x46, 0x5a, 0x82, 0x85, + 0xa7, 0x7d, 0xad, 0x6b, 0xeb, 0x6d, 0xac, 0xf2, 0x63, 0x09, 0xd3, 0x63, 0x1c, 0x4b, 0xc8, 0x08, + 0x22, 0xfa, 0x69, 0xe5, 0xbe, 0x3f, 0x3d, 0x18, 0xe9, 0xf0, 0x76, 0xfd, 0x43, 0x09, 0x5e, 0xa5, + 0x9c, 0x5d, 0x1f, 0xa8, 0x1e, 0xeb, 0x96, 0x6d, 0xb4, 0x4c, 0xad, 0xa3, 0x1e, 0xf6, 0x1b, 0x27, + 0xd8, 0x16, 0xfb, 0x33, 0x4f, 0x5e, 0x9e, 0xc9, 0x0f, 0x80, 0xcb, 0xa2, 0xce, 0x2d, 0x5a, 0xa5, + 0xf2, 0x0a, 0x15, 0xca, 0x71, 0xaf, 0x81, 0x62, 0x2b, 0xf7, 0x8f, 0x62, 0x70, 0x6d, 0x04, 0x0f, + 0xf4, 0x5d, 0xb8, 0x1c, 0x6c, 0x5a, 0xdb, 0x78, 0x8e, 0x4d, 0x95, 0x6e, 0xbb, 0xf1, 0x45, 0xf6, + 0xaa, 0xbf, 0xa2, 0x1d, 0x82, 0x40, 0x77, 0xe1, 0xc2, 0xc8, 0xfb, 0xbd, 0x9e, 0x43, 0x1e, 0x0b, + 0x23, 0x3f, 0x20, 0x08, 0x8c, 0xfc, 0x1a, 0xa4, 0x98, 0xfa, 0x54, 0x4b, 0xff, 0x9a, 0xcd, 0x8a, + 0x71, 0x05, 0x18, 0xa8, 0xa6, 0x7f, 0x8d, 0xd1, 0x7d, 0x48, 0x73, 0x04, 0x5f, 0xd7, 0xbe, 0x3e, + 0xac, 0x6b, 0x9d, 0x8a, 0x94, 0x79, 0x46, 0xcb, 0x7a, 0x18, 0xdd, 0x06, 0xe4, 0xe5, 0xa5, 0xb2, + 0x74, 0x50, 0x82, 0xd6, 0x99, 0xf5, 0x60, 0x16, 0x08, 0x3c, 0xf7, 0x4d, 0xc2, 0x1b, 0xa9, 0x72, + 0x4b, 0xf8, 0x4d, 0x09, 0x6e, 0xe0, 0xa7, 0x7d, 0xfd, 0x99, 0xd6, 0xc6, 0xdd, 0x06, 0x56, 0x1b, + 0x6d, 0xcd, 0xb2, 0x22, 0x6d, 0xe1, 0xab, 0x97, 0xe1, 0x7c, 0x3c, 0x80, 0x60, 0xff, 0x5f, 0xf7, + 0x88, 0x52, 0x20, 0x92, 0x0c, 0x58, 0xc0, 0xaf, 0x48, 0x90, 0x73, 0xe9, 0x4b, 0x01, 0x74, 0x74, + 0x0f, 0xb2, 0x4e, 0x48, 0xa1, 0x4e, 0x70, 0xa4, 0x27, 0x23, 0x02, 0x04, 0xae, 0xd9, 0xf7, 0x60, + 0x65, 0x50, 0x2b, 0xb4, 0x47, 0x99, 0x01, 0x5c, 0x08, 0x0a, 0x4a, 0xfa, 0x36, 0xf7, 0x4b, 0x71, + 0xb8, 0x14, 0xd9, 0x38, 0x74, 0x1f, 0xe4, 0x70, 0x9e, 0x21, 0xf6, 0xf9, 0x4a, 0x18, 0x7f, 0x8f, + 0x95, 0x46, 0xf3, 0x1a, 0x34, 0xd6, 0x50, 0x5e, 0x93, 0x98, 0xec, 0x9f, 0x91, 0xc2, 0x6d, 0x56, + 0x7d, 0xc9, 0xd6, 0x10, 0xec, 0xcd, 0x17, 0xb2, 0xf6, 0xbf, 0x39, 0xeb, 0x5d, 0x45, 0x71, 0x6b, + 0xff, 0x5d, 0x09, 0xde, 0x72, 0x57, 0x42, 0xe3, 0x7a, 0xc0, 0xaf, 0x5e, 0xc6, 0xe4, 0xe7, 0x01, + 0x04, 0xad, 0xfe, 0x0d, 0x47, 0xa4, 0x87, 0xc3, 0xdd, 0xdf, 0x6f, 0xc5, 0x20, 0xe7, 0xb2, 0xf9, + 0xe3, 0x65, 0xfc, 0x28, 0x0f, 0x57, 0xbb, 0xfd, 0x8e, 0xda, 0xd4, 0x2d, 0x5b, 0xef, 0x36, 0x6c, + 0x35, 0xa0, 0x67, 0x8b, 0x1b, 0x56, 0xae, 0xdb, 0xef, 0x14, 0x39, 0x4e, 0xcd, 0xd7, 0x6e, 0x0b, + 0x7d, 0x0e, 0x17, 0x6c, 0xa3, 0x37, 0x48, 0x39, 0x91, 0x8b, 0x44, 0xb6, 0xd1, 0x0b, 0x30, 0xce, + 0xfd, 0x20, 0x0e, 0x97, 0x22, 0xf5, 0x8f, 0xf6, 0xe1, 0xf5, 0x68, 0xa3, 0x18, 0x1c, 0x9b, 0xaf, + 0x46, 0x74, 0x97, 0x67, 0x78, 0x0e, 0xe5, 0x38, 0x38, 0x42, 0xa3, 0x38, 0xfe, 0x91, 0x0d, 0xd2, + 0x21, 0xc6, 0xfb, 0x52, 0x07, 0xe9, 0x5f, 0x4b, 0x04, 0xf3, 0x08, 0x7c, 0xa0, 0xfe, 0x2d, 0x09, + 0x72, 0x03, 0x51, 0xa1, 0x33, 0x3e, 0xb9, 0x55, 0x1f, 0xbd, 0xac, 0xc0, 0x30, 0x00, 0x0c, 0x8e, + 0xcf, 0x8b, 0x27, 0xe1, 0xc5, 0xb9, 0xbf, 0x22, 0xc1, 0x65, 0x3f, 0x29, 0x5f, 0x0c, 0x72, 0x65, + 0xbc, 0xac, 0x01, 0xb9, 0x01, 0x4b, 0x6e, 0xf2, 0xdf, 0x59, 0x17, 0x70, 0xe3, 0x41, 0x4e, 0x91, + 0xe3, 0x48, 0x73, 0xff, 0x3c, 0x06, 0x57, 0x87, 0xb6, 0x09, 0xdd, 0x80, 0x34, 0x89, 0x6c, 0x5d, + 0x66, 0xcc, 0xb6, 0xe7, 0x3b, 0x7a, 0xd7, 0x61, 0x43, 0x91, 0xb4, 0xd3, 0x81, 0x1a, 0xe7, 0x3b, + 0xda, 0xa9, 0x8b, 0x14, 0xb0, 0xcc, 0xc4, 0x80, 0x65, 0xfe, 0xd2, 0x80, 0x65, 0xb2, 0xf3, 0xf7, + 0xcd, 0x6f, 0xa9, 0xfb, 0x7c, 0x7d, 0x30, 0x96, 0x79, 0xce, 0x86, 0x9b, 0xe7, 0x56, 0x52, 0xec, + 0x5f, 0xc9, 0x8f, 0x21, 0xe3, 0x1f, 0x9a, 0x68, 0x53, 0x9c, 0xaa, 0x1e, 0x67, 0x59, 0xc0, 0x4f, + 0x5c, 0x87, 0xef, 0xd8, 0xfd, 0x5a, 0x1c, 0x12, 0x2c, 0xf0, 0x7f, 0x1d, 0xd2, 0x7a, 0xd7, 0xc6, + 0x2d, 0x6c, 0x7a, 0x96, 0x1c, 0xf1, 0xf2, 0x94, 0x32, 0xcf, 0xc1, 0x0c, 0xed, 0x55, 0x48, 0x1d, + 0xb5, 0x0d, 0xcd, 0xf6, 0x2c, 0x2e, 0xa4, 0xf2, 0x94, 0x02, 0x14, 0xc8, 0x50, 0x6e, 0xc0, 0xbc, + 0x65, 0x9b, 0x7a, 0xb7, 0xa5, 0xfa, 0x8f, 0x7e, 0xa7, 0x18, 0xd4, 0xa9, 0xee, 0xd0, 0x30, 0xda, + 0x58, 0x13, 0x2b, 0x9c, 0x69, 0x7e, 0x04, 0x69, 0x9e, 0x83, 0x9d, 0xe5, 0x88, 0x73, 0xd0, 0x91, + 0x23, 0x26, 0x46, 0x1d, 0x77, 0x2c, 0x4f, 0x29, 0x19, 0x87, 0x88, 0xb1, 0xf9, 0x0e, 0x00, 0x81, + 0x70, 0x0e, 0x33, 0xfe, 0xdc, 0x93, 0x7d, 0xd6, 0xc3, 0x94, 0xba, 0x7a, 0x54, 0xd4, 0xce, 0xca, + 0x53, 0xca, 0x1c, 0xc1, 0x65, 0x84, 0x9b, 0x00, 0x4d, 0xcd, 0x16, 0x84, 0x6c, 0x4d, 0xb8, 0xe8, + 0x23, 0x2c, 0x6a, 0x36, 0x26, 0x34, 0x04, 0x8d, 0xd1, 0x14, 0x60, 0xb1, 0xa9, 0x9d, 0xa9, 0xc6, + 0x91, 0xfa, 0x1c, 0xe3, 0x13, 0x4e, 0x9a, 0xa4, 0xfb, 0xcc, 0x2b, 0x01, 0xd2, 0xb3, 0xea, 0xd1, + 0xe7, 0x18, 0x9f, 0x10, 0x89, 0x9b, 0xe2, 0x83, 0x32, 0x71, 0xf2, 0x2e, 0x3f, 0x03, 0x73, 0xce, + 0x29, 0x61, 0xf4, 0x29, 0x3d, 0xb8, 0xce, 0x8f, 0x25, 0x0f, 0xcf, 0xd0, 0x15, 0xf9, 0x79, 0xe4, + 0xf2, 0x94, 0x92, 0x6c, 0xf2, 0xdf, 0x5b, 0x19, 0x98, 0xef, 0x69, 0xa6, 0x85, 0x9b, 0xec, 0x8a, + 0x8b, 0xfc, 0x17, 0x63, 0x90, 0x14, 0x88, 0xe8, 0x75, 0x7a, 0x87, 0x40, 0xd8, 0xd4, 0x60, 0x23, + 0xe9, 0xb5, 0x02, 0x8c, 0x3e, 0x80, 0x94, 0xa7, 0x75, 0xfc, 0xea, 0x4e, 0x44, 0xbb, 0x88, 0x56, + 0xf8, 0x4f, 0xb4, 0x06, 0xd3, 0x54, 0xec, 0xf8, 0x30, 0xe5, 0x2b, 0x14, 0x07, 0x95, 0x80, 0x76, + 0x81, 0xfa, 0xb5, 0xd1, 0x15, 0x37, 0x04, 0x6e, 0x8d, 0x68, 0x27, 0xe5, 0xf1, 0xd8, 0xe8, 0x62, + 0x25, 0x69, 0xf3, 0x5f, 0xb9, 0x77, 0x20, 0x29, 0xa0, 0xe8, 0x75, 0xc8, 0xb0, 0xc3, 0xa9, 0x6a, + 0x47, 0xef, 0xf6, 0xc5, 0x8e, 0x67, 0x42, 0x49, 0x33, 0xe8, 0x2e, 0x03, 0xca, 0xff, 0x5b, 0x82, + 0x6c, 0xf0, 0xcc, 0x0d, 0x6a, 0xc3, 0x25, 0x77, 0x47, 0xd3, 0xf6, 0x9d, 0xfd, 0xb0, 0xb8, 0xba, + 0xd6, 0x47, 0x24, 0x4a, 0xfd, 0x27, 0x46, 0xac, 0xf2, 0x94, 0x72, 0x51, 0x0f, 0x2f, 0x42, 0x18, + 0x56, 0xf8, 0xb9, 0xd8, 0x60, 0x55, 0xac, 0xc7, 0x6f, 0x0f, 0x3d, 0x23, 0x3b, 0x58, 0xd1, 0xb2, + 0x19, 0x56, 0xb0, 0x95, 0x85, 0x8c, 0x9f, 0xbf, 0xfc, 0x93, 0x59, 0xb8, 0xb8, 0x6f, 0xea, 0x1d, + 0x1a, 0x0c, 0xf8, 0xd1, 0x91, 0x02, 0x19, 0x13, 0xf7, 0xda, 0x1a, 0x09, 0xc9, 0xbc, 0x9b, 0x65, + 0x6f, 0x46, 0x0a, 0x43, 0x91, 0xb9, 0x3f, 0xe3, 0x3b, 0x2c, 0x69, 0xce, 0x82, 0xab, 0xf5, 0x3e, + 0xf0, 0xa3, 0x79, 0xfe, 0xad, 0xb0, 0x1b, 0x43, 0xcf, 0x64, 0x3a, 0xcc, 0xe6, 0x4d, 0xcf, 0x37, + 0xfa, 0x53, 0xb0, 0xdc, 0x38, 0xd6, 0xe8, 0xf9, 0x3d, 0x93, 0xde, 0xa4, 0xf3, 0xef, 0x75, 0x45, + 0xed, 0x92, 0x16, 0x04, 0xcd, 0xae, 0x66, 0x9d, 0x38, 0xac, 0x97, 0x1a, 0x83, 0x60, 0x64, 0xc3, + 0xd5, 0x86, 0x79, 0xd6, 0xb3, 0x0d, 0x55, 0x28, 0xe2, 0xe8, 0xe8, 0x54, 0x3d, 0xea, 0x61, 0xff, + 0x76, 0x57, 0xd4, 0x0d, 0x9e, 0x02, 0xa5, 0xe5, 0x6a, 0xb9, 0x77, 0x74, 0x7a, 0xaf, 0xe7, 0xea, + 0xe5, 0x52, 0x23, 0xaa, 0x10, 0xf5, 0xe0, 0xf2, 0x91, 0x7e, 0x8a, 0x9b, 0x6c, 0x7d, 0xc5, 0x26, + 0x09, 0xe2, 0x59, 0x7d, 0xdb, 0x5e, 0x1b, 0x91, 0x99, 0xde, 0x53, 0xdc, 0x24, 0xd3, 0xe0, 0x96, + 0xa0, 0x73, 0xaa, 0x5c, 0x3d, 0x8a, 0x28, 0x43, 0x35, 0xc8, 0x0e, 0x54, 0x33, 0x33, 0xfc, 0x08, + 0xeb, 0x00, 0xf7, 0x85, 0xc3, 0x00, 0x53, 0x1b, 0xae, 0x0a, 0xad, 0x3d, 0xd7, 0xed, 0x63, 0xf7, + 0x96, 0x97, 0xa8, 0x61, 0x76, 0xa8, 0xf2, 0xb8, 0x66, 0x3e, 0xd7, 0xed, 0x63, 0x31, 0xa0, 0x5c, + 0xe5, 0x99, 0x51, 0x85, 0xe8, 0x01, 0x64, 0xa9, 0x1b, 0xe9, 0x69, 0xa6, 0x63, 0x63, 0xc9, 0xa1, + 0x37, 0x05, 0x88, 0xbb, 0xd8, 0xd7, 0x4c, 0xd7, 0xca, 0xe8, 0x44, 0xe2, 0x42, 0xd0, 0xe7, 0x80, + 0xb8, 0x15, 0x1c, 0x6b, 0xd6, 0xb1, 0x60, 0x3a, 0x37, 0xf4, 0x50, 0x06, 0xeb, 0xfa, 0xb2, 0x66, + 0x1d, 0xbb, 0x7b, 0x9b, 0x8d, 0x00, 0x8c, 0x1e, 0x1d, 0x25, 0xae, 0xdd, 0x3a, 0xd6, 0x8f, 0x1c, + 0x61, 0x53, 0x43, 0xf5, 0x4e, 0x5c, 0x5f, 0x8d, 0xa0, 0xbb, 0x7a, 0x6f, 0xfa, 0x41, 0x21, 0x83, + 0xfc, 0x1b, 0x09, 0x32, 0xfe, 0x56, 0xa2, 0x87, 0xb0, 0x40, 0x35, 0x64, 0x1b, 0x2a, 0x3f, 0x03, + 0xcb, 0x6f, 0xa3, 0xad, 0x8f, 0xa5, 0x25, 0xe7, 0x53, 0x49, 0x13, 0x36, 0x75, 0xa3, 0xc4, 0x98, + 0xc8, 0xdf, 0x93, 0x98, 0xff, 0x25, 0x65, 0xe8, 0x12, 0x2c, 0xd7, 0x2b, 0xbb, 0x25, 0x75, 0x3f, + 0xaf, 0xd4, 0x03, 0xa7, 0xa0, 0x92, 0x30, 0xfd, 0xa8, 0x94, 0x57, 0xb2, 0x12, 0x9a, 0x83, 0xc4, + 0x6e, 0x75, 0xaf, 0x5e, 0xce, 0xc6, 0x50, 0x16, 0xe6, 0x8b, 0xf9, 0x47, 0x6a, 0xf5, 0x9e, 0xca, + 0x20, 0x71, 0xb4, 0x00, 0x29, 0x0e, 0xf9, 0xbc, 0x54, 0xfa, 0x2c, 0x3b, 0x4d, 0x50, 0xc8, 0x2f, + 0x02, 0xa1, 0xf4, 0x09, 0x82, 0x52, 0xae, 0x1e, 0x28, 0x04, 0x52, 0xcc, 0x3f, 0xca, 0xce, 0xc8, + 0x35, 0xc8, 0x06, 0xb5, 0x8f, 0x7e, 0x0a, 0x80, 0x77, 0xe1, 0xe8, 0x7b, 0x07, 0x8c, 0x98, 0xde, + 0x3b, 0x68, 0x88, 0x9f, 0x72, 0x15, 0xd0, 0xa0, 0x7b, 0x43, 0x1f, 0xc1, 0x5c, 0x17, 0x3f, 0x9f, + 0x24, 0x5d, 0xdb, 0xc5, 0xcf, 0xe9, 0x2f, 0xf9, 0x32, 0x5c, 0x8a, 0xb4, 0x70, 0x39, 0x03, 0xf3, + 0x5e, 0xcf, 0x27, 0xff, 0x24, 0x06, 0x69, 0xe2, 0xb6, 0xac, 0xba, 0x51, 0x69, 0x75, 0x0d, 0x13, + 0xa3, 0x75, 0x40, 0x8e, 0xc3, 0xb2, 0x48, 0x2f, 0x5a, 0x27, 0x3a, 0x3b, 0xc4, 0x3f, 0x47, 0x4d, + 0xcd, 0x29, 0xab, 0x1b, 0xb5, 0x13, 0xbd, 0x87, 0xce, 0xe0, 0x72, 0xc3, 0xe8, 0x74, 0x8c, 0xae, + 0xea, 0x27, 0xd3, 0x29, 0x3b, 0x3e, 0xa3, 0x7f, 0x38, 0xc4, 0x63, 0x3a, 0x55, 0xaf, 0x17, 0x28, + 0x1f, 0x1f, 0x8c, 0x38, 0x97, 0x86, 0x03, 0x16, 0x15, 0xb3, 0x32, 0xf9, 0x87, 0x12, 0x2c, 0x85, + 0xd0, 0xa0, 0x9b, 0x20, 0x17, 0xaa, 0xbb, 0xbb, 0xd5, 0x3d, 0xb5, 0x50, 0xce, 0x2b, 0x35, 0xb5, + 0x5e, 0x55, 0x2b, 0xdb, 0x7b, 0x55, 0x25, 0x78, 0x55, 0x31, 0x05, 0xb3, 0x7b, 0x07, 0xbb, 0x25, + 0xa5, 0x52, 0xc8, 0x4a, 0xe8, 0x02, 0x64, 0xf3, 0x3b, 0xfb, 0xe5, 0xbc, 0x7a, 0xb0, 0xbf, 0x5f, + 0x52, 0xd4, 0x42, 0xbe, 0x56, 0xca, 0xc6, 0x5c, 0xe8, 0x4e, 0xf5, 0x73, 0x01, 0xa5, 0xc6, 0xb3, + 0x7f, 0xb0, 0x57, 0xa8, 0x1f, 0xe4, 0xeb, 0x95, 0xea, 0x5e, 0x76, 0x1a, 0x65, 0x00, 0x3e, 0x2f, + 0x57, 0xea, 0xa5, 0xda, 0x7e, 0xbe, 0x50, 0xca, 0x26, 0xb6, 0xe6, 0x01, 0x5c, 0x6d, 0xc8, 0xff, + 0x95, 0xc8, 0x19, 0x32, 0x09, 0xbc, 0x05, 0x8b, 0x64, 0x72, 0xa1, 0xae, 0x51, 0x14, 0xf3, 0xb3, + 0x3d, 0x59, 0x5e, 0xe0, 0x90, 0xa1, 0xd7, 0x20, 0xd3, 0xed, 0x77, 0x0e, 0xb1, 0x49, 0x94, 0x4b, + 0x4a, 0xf9, 0x2d, 0x8a, 0x79, 0x06, 0xad, 0x1b, 0x84, 0x31, 0x59, 0xe7, 0x98, 0x98, 0xac, 0x6f, + 0xb1, 0x6a, 0x98, 0x4d, 0xcc, 0x4e, 0xd8, 0x27, 0xc9, 0xf4, 0x46, 0x81, 0x55, 0x02, 0x43, 0x0f, + 0xe1, 0x42, 0x68, 0x5f, 0x4d, 0x0f, 0x3d, 0x58, 0xe5, 0xd3, 0xb1, 0x82, 0x1a, 0x83, 0xfd, 0xf1, + 0x3b, 0x12, 0xac, 0x46, 0xcd, 0x12, 0xe8, 0xbb, 0x90, 0x0a, 0x26, 0x20, 0x46, 0xd9, 0x34, 0xb4, + 0xbd, 0xc9, 0xec, 0x54, 0x30, 0xdb, 0x30, 0x92, 0xbc, 0x3f, 0x34, 0xe9, 0x20, 0x79, 0x97, 0x76, + 0xf2, 0x2f, 0xc7, 0x60, 0x21, 0x28, 0xf2, 0x36, 0xcc, 0x8a, 0xf4, 0x19, 0x5b, 0xeb, 0xde, 0x19, + 0x6f, 0xce, 0xe2, 0xdf, 0x8a, 0xa0, 0xa6, 0x87, 0xe5, 0xf8, 0x6a, 0x75, 0x1d, 0xe2, 0x1d, 0xbd, + 0x3b, 0x56, 0xf3, 0x09, 0x22, 0xc5, 0xd7, 0x4e, 0xc7, 0x6a, 0x2f, 0x41, 0x44, 0x15, 0x58, 0xe4, + 0x53, 0x18, 0xbd, 0x30, 0xe6, 0xae, 0x99, 0x46, 0x51, 0x67, 0x3d, 0x64, 0xcc, 0x91, 0xfc, 0xde, + 0x34, 0x5c, 0x8a, 0x0c, 0x34, 0x5e, 0xd8, 0xf1, 0xa1, 0x0f, 0x61, 0x96, 0xde, 0xe3, 0xe3, 0x77, + 0x26, 0xc6, 0xb8, 0x6f, 0xc5, 0xd1, 0x91, 0x05, 0x0b, 0xdc, 0xe5, 0x68, 0xed, 0xde, 0xb1, 0x76, + 0x88, 0xd9, 0x9e, 0x66, 0x26, 0x72, 0x7f, 0x2d, 0xb2, 0x15, 0xeb, 0xf7, 0x8e, 0x4e, 0x99, 0x07, + 0xd9, 0xa3, 0xdb, 0xe1, 0x79, 0xce, 0x8f, 0xcc, 0xd5, 0xac, 0x0a, 0x01, 0x41, 0x6f, 0x02, 0xbf, + 0x3e, 0xef, 0x56, 0x9a, 0xe0, 0x4e, 0x31, 0xc3, 0x0a, 0x1c, 0xd4, 0x15, 0x48, 0x98, 0x5a, 0x53, + 0x3f, 0xa5, 0x91, 0x4e, 0xa2, 0x3c, 0xa5, 0xb0, 0x4f, 0x7a, 0x78, 0xa5, 0x6f, 0x9a, 0x46, 0x4b, + 0xb3, 0x3d, 0x37, 0xfe, 0x79, 0x10, 0x31, 0xf2, 0xb8, 0xec, 0xa2, 0x43, 0x2b, 0x40, 0xf2, 0x5f, + 0x96, 0xe0, 0x62, 0x44, 0x0b, 0xd0, 0x1a, 0xdc, 0xbc, 0x77, 0xef, 0x0b, 0x95, 0x3b, 0xc2, 0xbd, + 0x7c, 0xbd, 0xf2, 0xb0, 0xa4, 0x52, 0x5f, 0xb6, 0x55, 0xaa, 0x0f, 0x73, 0x84, 0x64, 0xda, 0x2b, + 0x7d, 0x91, 0x2f, 0x96, 0x0a, 0x95, 0xdd, 0xfc, 0x4e, 0x36, 0x86, 0xae, 0xc0, 0xaa, 0xeb, 0x13, + 0x19, 0x0b, 0x55, 0xa0, 0xc7, 0xd1, 0x22, 0xa4, 0xfd, 0xa0, 0xe9, 0x2d, 0x80, 0xa4, 0xd0, 0x91, + 0xfc, 0x7f, 0x24, 0x98, 0x73, 0xba, 0x1f, 0x55, 0x60, 0x8e, 0x46, 0x10, 0xba, 0x38, 0xb2, 0x1e, + 0x1d, 0xf3, 0xd7, 0x05, 0x9e, 0x43, 0x4d, 0xd7, 0xd2, 0x02, 0x4a, 0x58, 0xf5, 0xbb, 0xcf, 0x4d, + 0xad, 0xd7, 0xc3, 0xc2, 0x1d, 0x44, 0xb1, 0x3a, 0x10, 0x78, 0x3e, 0x56, 0x0e, 0x35, 0xda, 0x85, + 0xd4, 0x49, 0xc7, 0x52, 0x05, 0xb3, 0xe1, 0x41, 0xfe, 0x67, 0x1d, 0xeb, 0xf3, 0x41, 0x6e, 0x70, + 0xe2, 0x80, 0xb7, 0x92, 0x30, 0xc3, 0x4e, 0x14, 0xc8, 0xb7, 0x00, 0x0d, 0x36, 0x23, 0xec, 0xb0, + 0xa9, 0x7c, 0x13, 0xd0, 0xa0, 0x94, 0x28, 0x0b, 0x71, 0x31, 0xb8, 0xe6, 0x15, 0xf2, 0x53, 0xfe, + 0x0a, 0x96, 0x42, 0x04, 0x20, 0xee, 0x8d, 0x13, 0xab, 0x2e, 0x01, 0x70, 0x10, 0x41, 0xb8, 0x09, + 0x0b, 0xee, 0x68, 0xf5, 0x9e, 0x67, 0x4d, 0x3b, 0x03, 0x92, 0x9e, 0xbf, 0xff, 0x43, 0x09, 0x16, + 0x02, 0x91, 0x20, 0xba, 0x05, 0x59, 0x8f, 0xeb, 0x55, 0x9b, 0xda, 0x99, 0x58, 0xee, 0x66, 0x5c, + 0x0f, 0x5b, 0xd4, 0xce, 0x2c, 0x82, 0xe9, 0xf1, 0xf1, 0x0c, 0x93, 0xcd, 0x52, 0x19, 0xd7, 0x95, + 0x53, 0x4c, 0xcf, 0xe0, 0x8f, 0x4f, 0x36, 0xf8, 0xf3, 0x3e, 0xbf, 0x33, 0x3d, 0x9e, 0xdf, 0xa1, + 0x27, 0x87, 0xc4, 0x07, 0xe9, 0xa0, 0x0e, 0xb6, 0x8f, 0x8d, 0xa6, 0xfc, 0xa3, 0x18, 0x5c, 0x8c, + 0x58, 0x54, 0x23, 0x03, 0x16, 0x06, 0x57, 0xe7, 0xc3, 0x8e, 0x81, 0x45, 0x30, 0x8a, 0x80, 0x2b, + 0x41, 0xee, 0xb9, 0x7f, 0x26, 0xc1, 0x4a, 0x38, 0xee, 0x0b, 0x3f, 0x92, 0xa2, 0xc3, 0x6a, 0x4f, + 0xac, 0xc5, 0x03, 0x89, 0x00, 0x3e, 0x76, 0xd6, 0xa3, 0x8f, 0xd3, 0x84, 0x2d, 0xe1, 0x95, 0x8b, + 0xbd, 0xf0, 0x02, 0xf9, 0x7b, 0x71, 0x58, 0xa2, 0x9d, 0x16, 0x68, 0xc2, 0x07, 0x30, 0x43, 0x8f, + 0x08, 0x8d, 0x7b, 0xe6, 0x8f, 0x63, 0xa3, 0x22, 0xcc, 0x35, 0x8c, 0x6e, 0x53, 0xf7, 0xdc, 0xab, + 0xbd, 0x39, 0x34, 0x67, 0x51, 0x10, 0xd8, 0x8a, 0x4b, 0x88, 0x4e, 0x86, 0x28, 0x60, 0xfa, 0x3c, + 0x0a, 0x28, 0x4f, 0x45, 0xaa, 0x60, 0x78, 0x86, 0x27, 0xf1, 0x92, 0x33, 0x3c, 0x21, 0xab, 0xb2, + 0x1f, 0x4b, 0xb0, 0x1c, 0x9a, 0xbf, 0x41, 0x2a, 0x2c, 0xb3, 0x4b, 0xce, 0xe1, 0x96, 0xbd, 0x36, + 0xac, 0x4f, 0x02, 0x06, 0x70, 0xe1, 0x68, 0x10, 0x68, 0xa1, 0x47, 0xb0, 0xc4, 0xd3, 0x4d, 0x56, + 0xbf, 0xd7, 0x33, 0xb1, 0x65, 0xf1, 0x5c, 0x53, 0x7c, 0x48, 0xd6, 0x8d, 0xc9, 0x5a, 0x73, 0x09, + 0x14, 0x64, 0x06, 0x41, 0x96, 0xfc, 0x08, 0x16, 0x07, 0x10, 0xfd, 0xd6, 0x21, 0x9d, 0xd3, 0x3a, + 0xe4, 0x5f, 0x4f, 0xc0, 0x42, 0xa0, 0x18, 0xd5, 0x21, 0x85, 0x4f, 0xdd, 0x16, 0x0c, 0x7f, 0x12, + 0x28, 0x40, 0xbc, 0x5e, 0x72, 0x29, 0x15, 0x2f, 0x9b, 0xdc, 0xef, 0x92, 0xe9, 0xd0, 0xa9, 0xe3, + 0x7c, 0x67, 0xec, 0x4a, 0x90, 0x34, 0x7a, 0xd8, 0xd4, 0x6c, 0x7e, 0x81, 0x36, 0x33, 0x24, 0x6f, + 0xd6, 0xa6, 0xfd, 0xa2, 0xb5, 0xab, 0x9c, 0x40, 0x71, 0x48, 0xdd, 0xb4, 0xff, 0xf4, 0xd8, 0x69, + 0xff, 0xdc, 0x57, 0x00, 0x8e, 0xf4, 0x16, 0xda, 0x07, 0x70, 0x74, 0x28, 0x4c, 0xe8, 0xed, 0x31, + 0x35, 0xe4, 0xf6, 0x83, 0x87, 0x47, 0xee, 0x87, 0x31, 0x48, 0x79, 0x74, 0x87, 0x3a, 0x64, 0x42, + 0x69, 0xd1, 0x23, 0x6c, 0x4e, 0x93, 0x59, 0x36, 0x61, 0x6b, 0xf2, 0x9e, 0x58, 0xdf, 0x61, 0xac, + 0x1c, 0x5d, 0x2c, 0xb4, 0xfd, 0x00, 0x54, 0xf3, 0x35, 0x88, 0x75, 0xf9, 0x3b, 0x93, 0x36, 0x88, + 0x0c, 0x56, 0x0f, 0x1b, 0xf9, 0x13, 0x58, 0x08, 0x54, 0x8c, 0xae, 0xc3, 0x95, 0x9d, 0xea, 0x76, + 0xa5, 0x90, 0xdf, 0x51, 0xab, 0xfb, 0x25, 0x25, 0x5f, 0xaf, 0x2a, 0x81, 0x88, 0x6c, 0x16, 0xe2, + 0xf9, 0xbd, 0x62, 0x56, 0x72, 0x32, 0xf7, 0x7f, 0x47, 0x82, 0x95, 0xf0, 0x8b, 0x82, 0x64, 0x19, + 0xe9, 0x0c, 0xe7, 0xc0, 0x95, 0x9a, 0xac, 0xa7, 0x80, 0xdd, 0xa7, 0x69, 0xc1, 0xaa, 0x7f, 0xec, + 0xab, 0x56, 0xbf, 0xd3, 0xd1, 0x4c, 0xdd, 0x39, 0x59, 0x7c, 0x7b, 0xac, 0x6b, 0x8a, 0x35, 0x4a, + 0x75, 0xa6, 0x5c, 0xb4, 0x43, 0xc0, 0x3a, 0xb6, 0xe4, 0x1f, 0xce, 0xc0, 0x72, 0x28, 0xc9, 0x0b, + 0xde, 0x15, 0x73, 0xc6, 0x4c, 0x6c, 0x92, 0x31, 0xf3, 0x30, 0xe8, 0x24, 0x79, 0xef, 0x4e, 0x3a, + 0xed, 0x05, 0xb8, 0x44, 0x3b, 0xd4, 0xc4, 0x4b, 0x72, 0xa8, 0x0f, 0x9c, 0xe7, 0x49, 0x84, 0x43, + 0xe5, 0xf9, 0xd3, 0xf1, 0x9d, 0x69, 0xc6, 0xef, 0x4c, 0x51, 0x1d, 0x66, 0xd9, 0x5e, 0xa0, 0xd8, + 0x58, 0xbf, 0x3b, 0x49, 0x8f, 0xaf, 0x8b, 0x9e, 0x67, 0x17, 0xda, 0x04, 0xab, 0x70, 0x2b, 0x9c, + 0x0d, 0xb7, 0xc2, 0xdc, 0xaf, 0x48, 0x90, 0xf6, 0xf1, 0x71, 0x37, 0x14, 0x25, 0xcf, 0x86, 0x22, + 0x7a, 0x04, 0xd3, 0xce, 0xc9, 0xf8, 0x4c, 0x64, 0xe0, 0x15, 0x2e, 0x67, 0x40, 0xbd, 0xb4, 0x9a, + 0x82, 0xd1, 0xc4, 0x0a, 0x65, 0x89, 0x56, 0x61, 0xb6, 0xc9, 0x76, 0x62, 0xd9, 0x96, 0xa2, 0x22, + 0x3e, 0xe5, 0xaf, 0x60, 0x35, 0x8a, 0x96, 0xac, 0xaa, 0xea, 0x4a, 0x7e, 0xaf, 0x76, 0xaf, 0xaa, + 0xec, 0xd2, 0xe4, 0x8f, 0xaa, 0x94, 0x6a, 0x07, 0x3b, 0x75, 0xb5, 0x50, 0x2d, 0x86, 0xa4, 0x97, + 0x6a, 0x07, 0x85, 0x42, 0xa9, 0x56, 0x63, 0xc9, 0xc8, 0x92, 0xa2, 0x54, 0x95, 0x6c, 0x4c, 0x36, + 0x20, 0x59, 0x6b, 0x1c, 0xe3, 0x66, 0xbf, 0x8d, 0xd1, 0x23, 0xc8, 0x99, 0xb8, 0xd1, 0x37, 0x4d, + 0x7a, 0x3e, 0xa5, 0x87, 0x4d, 0xdd, 0x68, 0xaa, 0xe2, 0xf9, 0x3f, 0x3e, 0x38, 0x2e, 0x0d, 0x6c, + 0x4e, 0x16, 0x39, 0x42, 0x79, 0x4a, 0x59, 0x75, 0xc9, 0xf7, 0x29, 0xb5, 0x28, 0x23, 0x51, 0x2e, + 0xbb, 0x17, 0x29, 0xff, 0xbd, 0x18, 0x2c, 0x04, 0xef, 0x01, 0x9e, 0xf3, 0xc6, 0xdb, 0x75, 0x48, + 0x35, 0xdd, 0x3b, 0x60, 0x5c, 0x73, 0x5e, 0x50, 0xf0, 0xb9, 0xa3, 0xe9, 0x89, 0x9e, 0x3b, 0xfa, + 0x18, 0x52, 0xfd, 0x9e, 0xbb, 0x29, 0x99, 0x18, 0x4d, 0xcc, 0xd0, 0x29, 0xf1, 0xe0, 0xa5, 0xe7, + 0x99, 0x73, 0x5f, 0x7a, 0x96, 0xff, 0x49, 0x0c, 0x50, 0x71, 0xe0, 0xbe, 0xf8, 0x9f, 0x44, 0xb5, + 0x85, 0x3e, 0x33, 0x31, 0xf3, 0x82, 0xcf, 0x4c, 0xc8, 0x4f, 0x21, 0x51, 0x32, 0x4d, 0xc3, 0x44, + 0xb7, 0xdd, 0x71, 0xc6, 0xcc, 0x19, 0x09, 0xa6, 0x66, 0xaf, 0xb1, 0x5e, 0xa3, 0xcf, 0x4d, 0x3a, + 0x63, 0x0f, 0xdd, 0x65, 0x5b, 0xeb, 0x54, 0x4a, 0x11, 0x36, 0x0e, 0x6d, 0x88, 0x8b, 0x2d, 0xff, + 0x28, 0x01, 0x70, 0xdf, 0x38, 0xac, 0x9b, 0x7a, 0xab, 0x85, 0xcd, 0x6f, 0xaf, 0xab, 0xee, 0x43, + 0x4a, 0xd8, 0xd9, 0x13, 0xe3, 0x90, 0x77, 0xd5, 0xb8, 0x77, 0x68, 0x49, 0x70, 0xa0, 0x3b, 0x30, + 0x12, 0xcb, 0xd9, 0x4c, 0x5e, 0x31, 0x65, 0x44, 0xc5, 0x72, 0x6e, 0xcb, 0xd6, 0xf9, 0x5f, 0xc5, + 0x21, 0x45, 0xef, 0xc1, 0x0c, 0x26, 0xda, 0x16, 0x07, 0x52, 0xa2, 0x82, 0x39, 0xda, 0x25, 0x0a, + 0xc7, 0x0d, 0xda, 0xdc, 0xec, 0x8b, 0xd8, 0x5c, 0x72, 0x22, 0x9b, 0xfb, 0x14, 0xd2, 0x6d, 0xcd, + 0xb2, 0x55, 0xb3, 0xdf, 0x65, 0xe4, 0x73, 0x23, 0xc9, 0x53, 0x84, 0x40, 0xe9, 0x77, 0x29, 0xfd, + 0x4f, 0xc3, 0x0c, 0x7b, 0xa8, 0x74, 0x15, 0xe8, 0xcc, 0x70, 0x6b, 0xb4, 0xd2, 0xb8, 0xa5, 0x71, + 0xba, 0x5c, 0x0d, 0x66, 0x85, 0xa1, 0x7c, 0x17, 0x92, 0x16, 0xf7, 0xc7, 0x23, 0xc2, 0x11, 0xe1, + 0xb6, 0xcb, 0x53, 0x8a, 0x43, 0xb2, 0x35, 0x07, 0xb3, 0xbc, 0x1f, 0xe4, 0x32, 0xcc, 0xb0, 0x6a, + 0xd0, 0x0a, 0xa0, 0x5a, 0x3d, 0x5f, 0x3f, 0xa8, 0x0d, 0xce, 0x09, 0xe5, 0x52, 0x7e, 0xa7, 0x5e, + 0x7e, 0x94, 0x95, 0x10, 0xc0, 0xcc, 0x7e, 0xfe, 0xa0, 0x56, 0x2a, 0xb2, 0x77, 0x11, 0x0b, 0xf9, + 0xbd, 0x42, 0x69, 0x67, 0xa7, 0x54, 0xcc, 0xc6, 0xb7, 0x12, 0x10, 0x7f, 0x62, 0x1c, 0xca, 0xbf, + 0x13, 0x83, 0x19, 0x76, 0x07, 0x15, 0x3d, 0x80, 0xb4, 0xa5, 0x3d, 0xc3, 0xaa, 0xe7, 0x59, 0xbe, + 0x61, 0x69, 0x2a, 0x46, 0xb5, 0x5e, 0xd3, 0x9e, 0x61, 0xf1, 0x62, 0x64, 0x79, 0x4a, 0x99, 0xb7, + 0x3c, 0xdf, 0xa8, 0x0c, 0xb3, 0xbd, 0xfe, 0xa1, 0x6a, 0xf5, 0x0f, 0x47, 0xbc, 0x50, 0xc1, 0x99, + 0xed, 0xf7, 0x0f, 0xdb, 0xba, 0x75, 0x5c, 0x37, 0xf6, 0xfb, 0x87, 0xb5, 0xfe, 0x61, 0x79, 0x4a, + 0x99, 0xe9, 0xd1, 0x5f, 0x39, 0x15, 0xe6, 0xbd, 0x35, 0xa1, 0xaa, 0xf3, 0x30, 0x82, 0x6f, 0x7f, + 0x7f, 0x6d, 0xfc, 0x87, 0x11, 0xc4, 0x5b, 0x08, 0xfc, 0xe2, 0xe4, 0x1b, 0xb0, 0x10, 0xa8, 0x9d, + 0x44, 0x0c, 0xb6, 0xd1, 0xe3, 0xf7, 0x81, 0xe6, 0x14, 0xf6, 0x41, 0x66, 0x3d, 0x76, 0x59, 0x57, + 0xfe, 0x0d, 0x09, 0xae, 0x14, 0xa8, 0xbd, 0x06, 0x2f, 0xc7, 0x8f, 0x78, 0x3c, 0xe3, 0x01, 0x64, + 0x07, 0x6e, 0xdf, 0xc7, 0x26, 0xba, 0x7d, 0xbf, 0x10, 0x78, 0xda, 0x02, 0x5d, 0x83, 0x94, 0xf3, + 0x04, 0x86, 0xde, 0xe4, 0x4e, 0x05, 0x04, 0xa8, 0xd2, 0x94, 0x7f, 0x4f, 0x82, 0x2b, 0x07, 0x74, + 0x7c, 0x44, 0x08, 0x1b, 0xe6, 0xcd, 0xbe, 0x05, 0x41, 0xdd, 0x51, 0x4d, 0xb7, 0x98, 0xe2, 0x11, + 0xc3, 0x92, 0xc6, 0xaf, 0xbb, 0x9a, 0x75, 0x22, 0x46, 0x35, 0xf9, 0x2d, 0x6f, 0xc0, 0xa5, 0x6d, + 0x6c, 0x8f, 0xdf, 0x00, 0xf9, 0x29, 0x5c, 0x66, 0x77, 0xd3, 0x7d, 0x14, 0xd6, 0xa8, 0x0e, 0xba, + 0x0a, 0xd0, 0xd3, 0x5a, 0x58, 0xb5, 0x8d, 0x13, 0xfe, 0xc2, 0xd3, 0x9c, 0x32, 0x47, 0x20, 0x75, + 0x02, 0x40, 0x97, 0x81, 0x7e, 0xb8, 0x3b, 0x3d, 0x09, 0x25, 0x49, 0x00, 0x74, 0x9f, 0xe7, 0x57, + 0x25, 0xb8, 0x12, 0x5e, 0x27, 0xbf, 0x16, 0x5f, 0x83, 0xc5, 0xa0, 0x52, 0xc5, 0xda, 0x76, 0x5c, + 0xad, 0x66, 0x03, 0x5a, 0xb5, 0xd0, 0x4d, 0x58, 0xe8, 0xe2, 0x53, 0x5b, 0x1d, 0x10, 0x3b, 0x4d, + 0xc0, 0xfb, 0x42, 0x74, 0x79, 0x13, 0xae, 0x14, 0x71, 0x1b, 0x4f, 0x62, 0x05, 0x74, 0x13, 0x80, + 0xd9, 0xb9, 0xeb, 0xed, 0x46, 0x69, 0x70, 0x0b, 0x52, 0x4f, 0x8c, 0x43, 0x95, 0xfb, 0x2d, 0x6e, + 0x34, 0xaf, 0x8e, 0x74, 0xa2, 0x0a, 0x3c, 0x71, 0xe7, 0xd7, 0xab, 0x00, 0x9c, 0xde, 0x35, 0xe9, + 0x39, 0x0e, 0xa9, 0x34, 0xc9, 0x82, 0xf5, 0x22, 0xb3, 0xe8, 0x41, 0xb1, 0xc2, 0x8c, 0xf9, 0x65, + 0x88, 0xf4, 0x42, 0xd6, 0xbb, 0x06, 0x17, 0xb6, 0xb1, 0x3d, 0x96, 0xb0, 0xf2, 0x4f, 0x24, 0x58, + 0x62, 0x3a, 0x2f, 0xb6, 0x7b, 0xf7, 0x8d, 0xc3, 0x51, 0xfa, 0x0e, 0x84, 0x0c, 0xb1, 0x17, 0x09, + 0x19, 0x2a, 0x90, 0x34, 0x75, 0xeb, 0x84, 0x32, 0x8a, 0x0f, 0x3f, 0xc3, 0x15, 0xf6, 0x24, 0x43, + 0x79, 0x4a, 0x99, 0x25, 0xf4, 0x84, 0xd5, 0x32, 0xcc, 0x10, 0x9d, 0xeb, 0x4d, 0xfe, 0x24, 0x4f, + 0xe2, 0x89, 0x71, 0x58, 0x69, 0x8a, 0xc9, 0xe7, 0x17, 0x25, 0x58, 0x21, 0x43, 0xc5, 0x55, 0xc9, + 0xb7, 0x39, 0x32, 0xd1, 0x25, 0x48, 0xd2, 0x2d, 0x6b, 0xf5, 0xf0, 0x8c, 0x8b, 0x33, 0x4b, 0xbf, + 0xb7, 0xce, 0x88, 0x24, 0x17, 0x07, 0x24, 0xe1, 0xe3, 0xb5, 0x08, 0xf3, 0x1e, 0xbb, 0x11, 0x43, + 0x75, 0x0c, 0xc3, 0x49, 0xb9, 0x86, 0x33, 0xfe, 0x00, 0xbd, 0x03, 0x17, 0xd9, 0x00, 0x1d, 0xcf, + 0x4e, 0xfe, 0x6a, 0x0c, 0xb2, 0xc1, 0xee, 0x24, 0xeb, 0x14, 0xfe, 0xfe, 0xbb, 0x7f, 0x76, 0x8c, + 0x5a, 0xa7, 0xf8, 0xe7, 0xc5, 0xb4, 0xe5, 0x7b, 0xc0, 0xe8, 0xa5, 0xbe, 0xf4, 0x14, 0xf9, 0x62, + 0x53, 0x3c, 0xfa, 0xdd, 0x2d, 0xcf, 0x5b, 0x1a, 0xd3, 0x13, 0xbd, 0xa5, 0xf1, 0x2f, 0x13, 0x30, + 0xc3, 0x46, 0x4f, 0xa8, 0x3f, 0x78, 0x9f, 0x3f, 0x65, 0x3d, 0xfc, 0x35, 0x77, 0xc6, 0xc0, 0xf3, + 0x76, 0xf5, 0x27, 0xf4, 0x1d, 0x4c, 0x1b, 0xf3, 0xcc, 0xe8, 0xcd, 0xa1, 0x74, 0xc4, 0x1c, 0x48, + 0xc0, 0x86, 0x15, 0x46, 0x84, 0xbe, 0x80, 0x79, 0x3a, 0xb6, 0xc4, 0x8a, 0x85, 0xc5, 0xf6, 0xef, + 0x9e, 0xe3, 0x78, 0x77, 0x79, 0x4a, 0x49, 0x99, 0x9e, 0x0b, 0xcd, 0x8f, 0x41, 0xcc, 0xb5, 0x0e, + 0xf3, 0xe1, 0xc7, 0xed, 0xa2, 0x5e, 0x12, 0x2a, 0x4f, 0x29, 0xa2, 0xc7, 0x05, 0xef, 0x17, 0x7a, + 0x61, 0xf8, 0x23, 0x00, 0xfa, 0x56, 0xe8, 0xb8, 0x6b, 0x80, 0x39, 0x8a, 0x4d, 0x49, 0xdf, 0x87, + 0x24, 0xee, 0x36, 0xc7, 0x8d, 0xff, 0x67, 0x71, 0xb7, 0x49, 0xc9, 0x6e, 0x41, 0xd6, 0x33, 0x62, + 0x99, 0x81, 0x01, 0xed, 0xf9, 0x8c, 0x3b, 0x24, 0xa9, 0x6d, 0xb9, 0xcb, 0x9a, 0xd4, 0xf8, 0xcb, + 0x1a, 0xb9, 0x01, 0x49, 0xd1, 0xaf, 0xe8, 0x12, 0x2c, 0xdf, 0xaf, 0x6e, 0xa9, 0x24, 0x16, 0x0f, + 0x49, 0xcf, 0xec, 0x97, 0xf6, 0x8a, 0x95, 0xbd, 0xed, 0xac, 0x44, 0x3e, 0x94, 0x83, 0xbd, 0x3d, + 0xf2, 0x11, 0x43, 0x49, 0x98, 0x2e, 0x56, 0xf7, 0x4a, 0xd9, 0x38, 0x9a, 0x87, 0x24, 0x8b, 0xca, + 0x4b, 0xc5, 0xec, 0x34, 0x89, 0xd7, 0xef, 0xe5, 0x2b, 0xe4, 0x77, 0x82, 0x44, 0xfd, 0x22, 0x5f, + 0x74, 0x13, 0xb2, 0xdb, 0xd8, 0xf6, 0x4f, 0x04, 0x61, 0xce, 0xe0, 0xb7, 0x25, 0x40, 0xc4, 0x8b, + 0x31, 0xcc, 0x10, 0x5f, 0x3a, 0xed, 0xf3, 0xa5, 0xee, 0x83, 0x3e, 0x92, 0xf7, 0x41, 0x1f, 0xbf, + 0x13, 0x8d, 0x05, 0x9c, 0xa8, 0xdf, 0x01, 0xc7, 0x83, 0x0e, 0x58, 0x0c, 0xaa, 0xc4, 0x44, 0x83, + 0x4a, 0xee, 0xc1, 0x92, 0x4f, 0x70, 0xee, 0x7a, 0xdf, 0x81, 0xe9, 0x27, 0xc6, 0xa1, 0x70, 0xb9, + 0x57, 0x87, 0x72, 0x53, 0x28, 0xea, 0xd8, 0x7e, 0xf6, 0x4d, 0x58, 0x2a, 0x68, 0xdd, 0x06, 0x6e, + 0x8f, 0x56, 0xeb, 0x9b, 0xb0, 0xc4, 0x5c, 0xf2, 0x68, 0xd4, 0xdf, 0x92, 0xe0, 0x1a, 0x9f, 0xb6, + 0x07, 0x52, 0x3b, 0xa3, 0xa6, 0xb6, 0xc7, 0xb0, 0x14, 0xf2, 0xfc, 0xe4, 0x88, 0x93, 0x07, 0x21, + 0xd5, 0xa0, 0xc1, 0x47, 0x2a, 0x47, 0x2f, 0x0f, 0xfe, 0x9d, 0x04, 0xd7, 0x58, 0x30, 0x15, 0x2d, + 0x78, 0x98, 0x13, 0xfd, 0x36, 0x85, 0x7e, 0xa1, 0x60, 0x6b, 0x13, 0xae, 0x90, 0x31, 0x33, 0x49, + 0x63, 0x64, 0x1b, 0x5e, 0xa1, 0x56, 0x38, 0x40, 0xf4, 0xad, 0x2e, 0x18, 0xfe, 0xb6, 0x04, 0xd7, + 0x22, 0xab, 0xe5, 0x03, 0xe1, 0x4b, 0xb8, 0x10, 0xa2, 0x66, 0x31, 0x30, 0x26, 0xd0, 0xf3, 0xd2, + 0xa0, 0x9e, 0xc7, 0x1f, 0x33, 0xef, 0xc3, 0x35, 0x3e, 0x10, 0x26, 0x51, 0xeb, 0xda, 0x2e, 0xa4, + 0x7d, 0xff, 0xd6, 0x03, 0x5d, 0x84, 0xa5, 0x42, 0x75, 0xaf, 0x5e, 0xda, 0x0b, 0x1e, 0x13, 0xca, + 0xc2, 0xbc, 0x28, 0xa8, 0x97, 0xbe, 0xa8, 0x67, 0x25, 0xb4, 0x08, 0x69, 0x01, 0xa1, 0xff, 0xc6, + 0x21, 0x1b, 0x5b, 0xdb, 0x77, 0x5f, 0x58, 0xf3, 0x3c, 0x74, 0x46, 0x1c, 0x71, 0x69, 0xef, 0x60, + 0x37, 0xec, 0x3f, 0x46, 0xa4, 0x60, 0xb6, 0x42, 0x01, 0x9c, 0xa3, 0x52, 0xa9, 0x7d, 0xa6, 0xe6, + 0xf7, 0xf2, 0x3b, 0x8f, 0x6a, 0x95, 0x5a, 0x36, 0xb6, 0xf6, 0x8f, 0x25, 0x40, 0x83, 0x3b, 0x99, + 0xe8, 0x06, 0x5c, 0x53, 0x4a, 0x3b, 0x34, 0x09, 0x1f, 0xbd, 0x8f, 0x36, 0x0f, 0xc9, 0xd2, 0x83, + 0x83, 0xfc, 0x8e, 0x5a, 0xaf, 0x66, 0x25, 0xd2, 0x80, 0xbd, 0x6a, 0x5d, 0x75, 0x20, 0xf4, 0x60, + 0xf0, 0xb6, 0x52, 0xca, 0xd7, 0x4b, 0x8a, 0x5a, 0x2f, 0xe7, 0xf7, 0xd8, 0x7f, 0xa4, 0xd8, 0x29, + 0xd5, 0x6a, 0xec, 0x73, 0x1a, 0xe5, 0x60, 0xc5, 0x8b, 0xa0, 0x56, 0x15, 0x46, 0x5e, 0xcb, 0x26, + 0x88, 0xa2, 0x1c, 0x54, 0x4f, 0xc1, 0x0c, 0x99, 0x28, 0x4a, 0x5f, 0x54, 0x6a, 0xf5, 0x5a, 0x76, + 0x76, 0x4d, 0x01, 0x70, 0xfd, 0x29, 0xba, 0x02, 0xab, 0xc5, 0x9d, 0x7d, 0x95, 0xcc, 0x49, 0x21, + 0x9a, 0x58, 0x80, 0x14, 0xd7, 0x04, 0xc1, 0xc8, 0x4a, 0x68, 0x19, 0x16, 0x7d, 0xda, 0xa0, 0xe0, + 0xd8, 0xe6, 0xff, 0x93, 0x29, 0xd3, 0x1a, 0x36, 0x9f, 0xe9, 0x0d, 0x8c, 0xfe, 0x86, 0x04, 0x19, + 0xff, 0xab, 0x99, 0xe8, 0xf6, 0xc8, 0xf0, 0xcf, 0xf3, 0x8c, 0x68, 0xee, 0xce, 0x98, 0xd8, 0xcc, + 0xdc, 0xe5, 0xcd, 0x3f, 0xfd, 0xe3, 0xff, 0xf2, 0x97, 0x62, 0xb7, 0xe5, 0x37, 0x36, 0x9e, 0x6d, + 0x6e, 0xfc, 0x2c, 0x1b, 0x63, 0xdf, 0xed, 0x99, 0xc6, 0x13, 0xdc, 0xb0, 0xad, 0x8d, 0xb5, 0x9f, + 0xdf, 0xe0, 0xef, 0xf3, 0xdf, 0xe5, 0x71, 0xca, 0x5d, 0x69, 0x0d, 0xfd, 0x40, 0x82, 0x94, 0xe7, + 0x9d, 0x65, 0xf4, 0xe6, 0xd8, 0x6f, 0x65, 0xe7, 0xd6, 0xc6, 0x41, 0xe5, 0xa2, 0x6d, 0x50, 0xd1, + 0xde, 0x94, 0x5f, 0x8b, 0x12, 0x8d, 0xbe, 0xe5, 0x7c, 0x97, 0xdd, 0xf6, 0x20, 0x72, 0xfd, 0xa6, + 0x04, 0x8b, 0x03, 0x6f, 0x03, 0xa3, 0x8d, 0x71, 0x12, 0xdf, 0x5e, 0x0d, 0xbe, 0x3d, 0x3e, 0x01, + 0x97, 0xf4, 0x7d, 0x2a, 0xe9, 0x86, 0xbc, 0x36, 0x4a, 0x89, 0xae, 0x4b, 0x10, 0xf2, 0x2a, 0x63, + 0xcb, 0xab, 0x4c, 0x2a, 0xaf, 0xf2, 0xe2, 0xf2, 0x9a, 0x3e, 0x79, 0x7f, 0x41, 0x82, 0xb4, 0xef, + 0xfd, 0x41, 0xf4, 0x56, 0xe4, 0xff, 0xde, 0x18, 0x7c, 0xfa, 0x30, 0x77, 0x7b, 0x3c, 0x64, 0x2e, + 0xe3, 0x32, 0x95, 0x71, 0x01, 0xa5, 0x89, 0x8c, 0xee, 0xe9, 0xa7, 0xff, 0x28, 0xc1, 0x72, 0x68, + 0x26, 0x10, 0xbd, 0x1b, 0x79, 0x70, 0x2c, 0x3a, 0x6f, 0x98, 0x1b, 0x33, 0x0d, 0x24, 0xb7, 0xa8, + 0x34, 0x9a, 0x7c, 0xc7, 0xab, 0x31, 0xc3, 0x6c, 0x69, 0x5d, 0xfd, 0x6b, 0xb6, 0xbb, 0x4b, 0x0d, + 0x32, 0x90, 0x2b, 0xba, 0x2b, 0xad, 0x3d, 0xbe, 0x23, 0xdf, 0x8a, 0xb4, 0xdf, 0x41, 0x74, 0xda, + 0xbe, 0xd0, 0xe4, 0x61, 0x64, 0xfb, 0x86, 0xa5, 0x1a, 0x27, 0x6d, 0xdf, 0x26, 0x6b, 0x1f, 0x99, + 0x4b, 0x82, 0xad, 0x1b, 0x90, 0x76, 0x63, 0xed, 0xe7, 0x69, 0xfb, 0x36, 0x6f, 0xb9, 0x34, 0x6e, + 0xeb, 0x22, 0xd0, 0xd1, 0xef, 0x4b, 0x80, 0x06, 0x13, 0x8b, 0x28, 0xca, 0x86, 0x23, 0x73, 0x90, + 0x63, 0xb7, 0x4c, 0xa3, 0x2d, 0xfb, 0x19, 0x34, 0x59, 0xcb, 0x1e, 0xaf, 0xa1, 0xb1, 0x9b, 0x85, + 0x7e, 0x22, 0x89, 0xc7, 0x3e, 0x03, 0xa9, 0xc2, 0xcd, 0xa1, 0x16, 0x1f, 0x9a, 0x28, 0xcd, 0xbd, + 0x3b, 0x11, 0x0d, 0x1f, 0x2c, 0xfe, 0x46, 0x8e, 0x6b, 0x9e, 0x4e, 0x23, 0xc7, 0xb0, 0x4d, 0xf4, + 0xaf, 0x24, 0x58, 0x0e, 0xcd, 0x67, 0x46, 0x1a, 0xe6, 0xb0, 0xec, 0x67, 0x2e, 0xe2, 0x7d, 0x37, + 0xd1, 0x92, 0xb5, 0x49, 0xbb, 0x6b, 0x6d, 0xfc, 0xee, 0xfa, 0x43, 0x09, 0x56, 0xa3, 0x56, 0x0e, + 0xe8, 0x83, 0xa1, 0x5e, 0x24, 0x32, 0x1a, 0xcb, 0x8d, 0x1f, 0x18, 0xca, 0x1d, 0xda, 0xc4, 0x96, + 0xfc, 0xf6, 0xd0, 0xce, 0x0a, 0x89, 0x1e, 0xc9, 0x70, 0x7b, 0x5b, 0x7e, 0x2b, 0xaa, 0xcb, 0xc2, + 0x29, 0x68, 0x73, 0xa3, 0xd6, 0x1b, 0x91, 0xcd, 0x1d, 0xb1, 0x40, 0x39, 0x47, 0x73, 0x37, 0xdf, + 0x8e, 0xee, 0xd1, 0x10, 0xc9, 0xb9, 0x77, 0x79, 0x7b, 0xf3, 0xad, 0xd0, 0x7e, 0x8d, 0xa4, 0x40, + 0x7f, 0x20, 0xc1, 0x72, 0xe8, 0x72, 0x24, 0xd2, 0x4e, 0x87, 0x2d, 0x5e, 0x26, 0x69, 0x28, 0xf7, + 0xa1, 0x68, 0xe2, 0x86, 0x3e, 0xbe, 0x83, 0x26, 0x69, 0x25, 0xfa, 0x1f, 0x3c, 0x85, 0x1a, 0xb2, + 0x8c, 0x41, 0xef, 0x0f, 0x71, 0x1f, 0xd1, 0xab, 0xad, 0xdc, 0x07, 0x93, 0x92, 0x71, 0xc7, 0xe3, + 0x6f, 0xf3, 0x04, 0xb6, 0xec, 0xb4, 0x79, 0x3c, 0x43, 0x46, 0x3f, 0x96, 0x60, 0x35, 0x6a, 0x45, + 0x14, 0x69, 0xc5, 0x23, 0x96, 0x50, 0x91, 0x4e, 0x88, 0xb7, 0x6a, 0xed, 0x1c, 0x3d, 0xb9, 0x36, + 0x51, 0x4f, 0xfe, 0x40, 0x82, 0x6c, 0x70, 0xbf, 0x07, 0xad, 0x0f, 0x75, 0x41, 0x03, 0xc9, 0xea, + 0xdc, 0xe8, 0xfc, 0xb8, 0xbc, 0x4e, 0x1b, 0x74, 0x4b, 0xbe, 0x11, 0xa5, 0x72, 0x4f, 0xfe, 0x9c, + 0x47, 0xf8, 0xd9, 0xe0, 0x86, 0x4f, 0xa4, 0x5c, 0x11, 0x3b, 0x43, 0x13, 0xc8, 0xb5, 0x79, 0x23, + 0x54, 0x69, 0x1e, 0xa1, 0xf8, 0xe0, 0xfe, 0x0b, 0x12, 0xa4, 0x7d, 0x1b, 0x3b, 0x91, 0x11, 0x68, + 0xd8, 0xf6, 0xcf, 0x38, 0x12, 0xbd, 0x45, 0x25, 0x7a, 0x1d, 0x8d, 0x23, 0x11, 0xfa, 0xeb, 0x12, + 0x2c, 0x04, 0xf6, 0x32, 0xd0, 0x9d, 0x21, 0x23, 0x69, 0x70, 0xf7, 0x25, 0xb7, 0x3e, 0x2e, 0x3a, + 0x1f, 0x70, 0x7e, 0xf9, 0x86, 0xf7, 0x24, 0xfa, 0x45, 0xfa, 0x66, 0x81, 0x7f, 0x8b, 0x23, 0xb2, + 0x1b, 0x23, 0xf6, 0x42, 0x22, 0x07, 0x09, 0x97, 0x64, 0x6d, 0x2c, 0x4d, 0xfd, 0x59, 0x09, 0xe6, + 0xbd, 0x9b, 0x6c, 0x68, 0x6d, 0xf8, 0x3c, 0xeb, 0x4d, 0xff, 0xe5, 0x86, 0x67, 0x23, 0xe5, 0x35, + 0x2a, 0xc8, 0x6b, 0xf2, 0xb5, 0x48, 0x7f, 0xc2, 0x72, 0x9d, 0xc4, 0x80, 0xbe, 0x2f, 0x41, 0xca, + 0x93, 0xfe, 0x8c, 0x5c, 0xba, 0x0e, 0xe6, 0x76, 0x23, 0x97, 0xae, 0x21, 0xd9, 0x54, 0xf9, 0x0d, + 0x2a, 0xd2, 0xab, 0x68, 0x94, 0x48, 0xe8, 0xe7, 0x60, 0xce, 0xc9, 0x37, 0xa3, 0x37, 0x86, 0x4c, + 0x50, 0x93, 0x28, 0xc4, 0x5f, 0xfb, 0x80, 0x2b, 0x62, 0x55, 0x93, 0x5e, 0xf9, 0x59, 0x98, 0xf7, + 0xa6, 0x5b, 0x23, 0x3b, 0x25, 0x24, 0x27, 0x1b, 0x69, 0x16, 0xbc, 0xf2, 0xb5, 0x91, 0x95, 0x53, + 0x93, 0xf0, 0xe4, 0x85, 0xa3, 0x4d, 0x62, 0x30, 0x79, 0x1c, 0x59, 0xfb, 0x3b, 0xb4, 0xf6, 0xb7, + 0xe4, 0x9b, 0x23, 0x6a, 0xbf, 0xdb, 0xa0, 0x4c, 0xef, 0x4a, 0x6b, 0x5b, 0xdf, 0x97, 0xe0, 0x52, + 0xc3, 0xe8, 0x84, 0x57, 0xbe, 0x95, 0x2c, 0xb6, 0x7b, 0xfb, 0xa4, 0x8e, 0x7d, 0xe9, 0xf1, 0x87, + 0x1c, 0xa5, 0x65, 0xb4, 0xb5, 0x6e, 0x6b, 0xdd, 0x30, 0x5b, 0x1b, 0x2d, 0xdc, 0xa5, 0x12, 0x6c, + 0xb0, 0x22, 0xad, 0xa7, 0x5b, 0x81, 0xff, 0x0f, 0xfd, 0x71, 0xb3, 0xdd, 0xfb, 0x8d, 0xd8, 0xd2, + 0x36, 0x23, 0x2d, 0xb4, 0x8d, 0x7e, 0x93, 0xf4, 0xd3, 0xfa, 0xc3, 0xcd, 0x7f, 0x23, 0xa0, 0x5f, + 0x52, 0xe8, 0x97, 0xc5, 0x76, 0xef, 0xcb, 0x87, 0x9b, 0x87, 0x33, 0x94, 0xe1, 0xbb, 0xff, 0x3f, + 0x00, 0x00, 0xff, 0xff, 0x1d, 0x42, 0x75, 0x5c, 0xc5, 0x7a, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/privacy/dlp/v2/storage.pb.go b/vendor/google.golang.org/genproto/googleapis/privacy/dlp/v2/storage.pb.go new file mode 100644 index 0000000..7431e17 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/privacy/dlp/v2/storage.pb.go @@ -0,0 +1,1614 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/privacy/dlp/v2/storage.proto + +package dlp + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/timestamp" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Categorization of results based on how likely they are to represent a match, +// based on the number of elements they contain which imply a match. +type Likelihood int32 + +const ( + // Default value; information with all likelihoods is included. + Likelihood_LIKELIHOOD_UNSPECIFIED Likelihood = 0 + // Few matching elements. + Likelihood_VERY_UNLIKELY Likelihood = 1 + Likelihood_UNLIKELY Likelihood = 2 + // Some matching elements. + Likelihood_POSSIBLE Likelihood = 3 + Likelihood_LIKELY Likelihood = 4 + // Many matching elements. + Likelihood_VERY_LIKELY Likelihood = 5 +) + +var Likelihood_name = map[int32]string{ + 0: "LIKELIHOOD_UNSPECIFIED", + 1: "VERY_UNLIKELY", + 2: "UNLIKELY", + 3: "POSSIBLE", + 4: "LIKELY", + 5: "VERY_LIKELY", +} +var Likelihood_value = map[string]int32{ + "LIKELIHOOD_UNSPECIFIED": 0, + "VERY_UNLIKELY": 1, + "UNLIKELY": 2, + "POSSIBLE": 3, + "LIKELY": 4, + "VERY_LIKELY": 5, +} + +func (x Likelihood) String() string { + return proto.EnumName(Likelihood_name, int32(x)) +} +func (Likelihood) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +// Type of information detected by the API. +type InfoType struct { + // Name of the information type. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *InfoType) Reset() { *m = InfoType{} } +func (m *InfoType) String() string { return proto.CompactTextString(m) } +func (*InfoType) ProtoMessage() {} +func (*InfoType) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *InfoType) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Custom information type provided by the user. Used to find domain-specific +// sensitive information configurable to the data in question. +type CustomInfoType struct { + // Info type configuration. All custom info types must have configurations + // that do not conflict with built-in info types or other custom info types. + InfoType *InfoType `protobuf:"bytes,1,opt,name=info_type,json=infoType" json:"info_type,omitempty"` + // Likelihood to return for this custom info type. This base value can be + // altered by a detection rule if the finding meets the criteria specified by + // the rule. Defaults to `VERY_LIKELY` if not specified. + Likelihood Likelihood `protobuf:"varint,6,opt,name=likelihood,enum=google.privacy.dlp.v2.Likelihood" json:"likelihood,omitempty"` + // Types that are valid to be assigned to Type: + // *CustomInfoType_Dictionary_ + // *CustomInfoType_Regex_ + // *CustomInfoType_SurrogateType_ + Type isCustomInfoType_Type `protobuf_oneof:"type"` + // Set of detection rules to apply to all findings of this custom info type. + // Rules are applied in order that they are specified. Not supported for the + // `surrogate_type` custom info type. + DetectionRules []*CustomInfoType_DetectionRule `protobuf:"bytes,7,rep,name=detection_rules,json=detectionRules" json:"detection_rules,omitempty"` +} + +func (m *CustomInfoType) Reset() { *m = CustomInfoType{} } +func (m *CustomInfoType) String() string { return proto.CompactTextString(m) } +func (*CustomInfoType) ProtoMessage() {} +func (*CustomInfoType) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +type isCustomInfoType_Type interface { + isCustomInfoType_Type() +} + +type CustomInfoType_Dictionary_ struct { + Dictionary *CustomInfoType_Dictionary `protobuf:"bytes,2,opt,name=dictionary,oneof"` +} +type CustomInfoType_Regex_ struct { + Regex *CustomInfoType_Regex `protobuf:"bytes,3,opt,name=regex,oneof"` +} +type CustomInfoType_SurrogateType_ struct { + SurrogateType *CustomInfoType_SurrogateType `protobuf:"bytes,4,opt,name=surrogate_type,json=surrogateType,oneof"` +} + +func (*CustomInfoType_Dictionary_) isCustomInfoType_Type() {} +func (*CustomInfoType_Regex_) isCustomInfoType_Type() {} +func (*CustomInfoType_SurrogateType_) isCustomInfoType_Type() {} + +func (m *CustomInfoType) GetType() isCustomInfoType_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *CustomInfoType) GetInfoType() *InfoType { + if m != nil { + return m.InfoType + } + return nil +} + +func (m *CustomInfoType) GetLikelihood() Likelihood { + if m != nil { + return m.Likelihood + } + return Likelihood_LIKELIHOOD_UNSPECIFIED +} + +func (m *CustomInfoType) GetDictionary() *CustomInfoType_Dictionary { + if x, ok := m.GetType().(*CustomInfoType_Dictionary_); ok { + return x.Dictionary + } + return nil +} + +func (m *CustomInfoType) GetRegex() *CustomInfoType_Regex { + if x, ok := m.GetType().(*CustomInfoType_Regex_); ok { + return x.Regex + } + return nil +} + +func (m *CustomInfoType) GetSurrogateType() *CustomInfoType_SurrogateType { + if x, ok := m.GetType().(*CustomInfoType_SurrogateType_); ok { + return x.SurrogateType + } + return nil +} + +func (m *CustomInfoType) GetDetectionRules() []*CustomInfoType_DetectionRule { + if m != nil { + return m.DetectionRules + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*CustomInfoType) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _CustomInfoType_OneofMarshaler, _CustomInfoType_OneofUnmarshaler, _CustomInfoType_OneofSizer, []interface{}{ + (*CustomInfoType_Dictionary_)(nil), + (*CustomInfoType_Regex_)(nil), + (*CustomInfoType_SurrogateType_)(nil), + } +} + +func _CustomInfoType_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*CustomInfoType) + // type + switch x := m.Type.(type) { + case *CustomInfoType_Dictionary_: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Dictionary); err != nil { + return err + } + case *CustomInfoType_Regex_: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Regex); err != nil { + return err + } + case *CustomInfoType_SurrogateType_: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.SurrogateType); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("CustomInfoType.Type has unexpected type %T", x) + } + return nil +} + +func _CustomInfoType_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*CustomInfoType) + switch tag { + case 2: // type.dictionary + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CustomInfoType_Dictionary) + err := b.DecodeMessage(msg) + m.Type = &CustomInfoType_Dictionary_{msg} + return true, err + case 3: // type.regex + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CustomInfoType_Regex) + err := b.DecodeMessage(msg) + m.Type = &CustomInfoType_Regex_{msg} + return true, err + case 4: // type.surrogate_type + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CustomInfoType_SurrogateType) + err := b.DecodeMessage(msg) + m.Type = &CustomInfoType_SurrogateType_{msg} + return true, err + default: + return false, nil + } +} + +func _CustomInfoType_OneofSizer(msg proto.Message) (n int) { + m := msg.(*CustomInfoType) + // type + switch x := m.Type.(type) { + case *CustomInfoType_Dictionary_: + s := proto.Size(x.Dictionary) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *CustomInfoType_Regex_: + s := proto.Size(x.Regex) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *CustomInfoType_SurrogateType_: + s := proto.Size(x.SurrogateType) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Custom information type based on a dictionary of words or phrases. This can +// be used to match sensitive information specific to the data, such as a list +// of employee IDs or job titles. +// +// Dictionary words are case-insensitive and all characters other than letters +// and digits in the unicode [Basic Multilingual +// Plane](https://en.wikipedia.org/wiki/Plane_%28Unicode%29#Basic_Multilingual_Plane) +// will be replaced with whitespace when scanning for matches, so the +// dictionary phrase "Sam Johnson" will match all three phrases "sam johnson", +// "Sam, Johnson", and "Sam (Johnson)". Additionally, the characters +// surrounding any match must be of a different type than the adjacent +// characters within the word, so letters must be next to non-letters and +// digits next to non-digits. For example, the dictionary word "jen" will +// match the first three letters of the text "jen123" but will return no +// matches for "jennifer". +// +// Dictionary words containing a large number of characters that are not +// letters or digits may result in unexpected findings because such characters +// are treated as whitespace. +type CustomInfoType_Dictionary struct { + // Types that are valid to be assigned to Source: + // *CustomInfoType_Dictionary_WordList_ + Source isCustomInfoType_Dictionary_Source `protobuf_oneof:"source"` +} + +func (m *CustomInfoType_Dictionary) Reset() { *m = CustomInfoType_Dictionary{} } +func (m *CustomInfoType_Dictionary) String() string { return proto.CompactTextString(m) } +func (*CustomInfoType_Dictionary) ProtoMessage() {} +func (*CustomInfoType_Dictionary) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1, 0} } + +type isCustomInfoType_Dictionary_Source interface { + isCustomInfoType_Dictionary_Source() +} + +type CustomInfoType_Dictionary_WordList_ struct { + WordList *CustomInfoType_Dictionary_WordList `protobuf:"bytes,1,opt,name=word_list,json=wordList,oneof"` +} + +func (*CustomInfoType_Dictionary_WordList_) isCustomInfoType_Dictionary_Source() {} + +func (m *CustomInfoType_Dictionary) GetSource() isCustomInfoType_Dictionary_Source { + if m != nil { + return m.Source + } + return nil +} + +func (m *CustomInfoType_Dictionary) GetWordList() *CustomInfoType_Dictionary_WordList { + if x, ok := m.GetSource().(*CustomInfoType_Dictionary_WordList_); ok { + return x.WordList + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*CustomInfoType_Dictionary) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _CustomInfoType_Dictionary_OneofMarshaler, _CustomInfoType_Dictionary_OneofUnmarshaler, _CustomInfoType_Dictionary_OneofSizer, []interface{}{ + (*CustomInfoType_Dictionary_WordList_)(nil), + } +} + +func _CustomInfoType_Dictionary_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*CustomInfoType_Dictionary) + // source + switch x := m.Source.(type) { + case *CustomInfoType_Dictionary_WordList_: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.WordList); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("CustomInfoType_Dictionary.Source has unexpected type %T", x) + } + return nil +} + +func _CustomInfoType_Dictionary_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*CustomInfoType_Dictionary) + switch tag { + case 1: // source.word_list + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CustomInfoType_Dictionary_WordList) + err := b.DecodeMessage(msg) + m.Source = &CustomInfoType_Dictionary_WordList_{msg} + return true, err + default: + return false, nil + } +} + +func _CustomInfoType_Dictionary_OneofSizer(msg proto.Message) (n int) { + m := msg.(*CustomInfoType_Dictionary) + // source + switch x := m.Source.(type) { + case *CustomInfoType_Dictionary_WordList_: + s := proto.Size(x.WordList) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Message defining a list of words or phrases to search for in the data. +type CustomInfoType_Dictionary_WordList struct { + // Words or phrases defining the dictionary. The dictionary must contain + // at least one phrase and every phrase must contain at least 2 characters + // that are letters or digits. [required] + Words []string `protobuf:"bytes,1,rep,name=words" json:"words,omitempty"` +} + +func (m *CustomInfoType_Dictionary_WordList) Reset() { *m = CustomInfoType_Dictionary_WordList{} } +func (m *CustomInfoType_Dictionary_WordList) String() string { return proto.CompactTextString(m) } +func (*CustomInfoType_Dictionary_WordList) ProtoMessage() {} +func (*CustomInfoType_Dictionary_WordList) Descriptor() ([]byte, []int) { + return fileDescriptor1, []int{1, 0, 0} +} + +func (m *CustomInfoType_Dictionary_WordList) GetWords() []string { + if m != nil { + return m.Words + } + return nil +} + +// Message defining a custom regular expression. +type CustomInfoType_Regex struct { + // Pattern defining the regular expression. + Pattern string `protobuf:"bytes,1,opt,name=pattern" json:"pattern,omitempty"` +} + +func (m *CustomInfoType_Regex) Reset() { *m = CustomInfoType_Regex{} } +func (m *CustomInfoType_Regex) String() string { return proto.CompactTextString(m) } +func (*CustomInfoType_Regex) ProtoMessage() {} +func (*CustomInfoType_Regex) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1, 1} } + +func (m *CustomInfoType_Regex) GetPattern() string { + if m != nil { + return m.Pattern + } + return "" +} + +// Message for detecting output from deidentification transformations +// such as +// [`CryptoReplaceFfxFpeConfig`](/dlp/docs/reference/rest/v2/content/deidentify#CryptoReplaceFfxFpeConfig). +// These types of transformations are +// those that perform pseudonymization, thereby producing a "surrogate" as +// output. This should be used in conjunction with a field on the +// transformation such as `surrogate_info_type`. This custom info type does +// not support the use of `detection_rules`. +type CustomInfoType_SurrogateType struct { +} + +func (m *CustomInfoType_SurrogateType) Reset() { *m = CustomInfoType_SurrogateType{} } +func (m *CustomInfoType_SurrogateType) String() string { return proto.CompactTextString(m) } +func (*CustomInfoType_SurrogateType) ProtoMessage() {} +func (*CustomInfoType_SurrogateType) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1, 2} } + +// Rule for modifying a custom info type to alter behavior under certain +// circumstances, depending on the specific details of the rule. Not supported +// for the `surrogate_type` custom info type. +type CustomInfoType_DetectionRule struct { + // Types that are valid to be assigned to Type: + // *CustomInfoType_DetectionRule_HotwordRule_ + Type isCustomInfoType_DetectionRule_Type `protobuf_oneof:"type"` +} + +func (m *CustomInfoType_DetectionRule) Reset() { *m = CustomInfoType_DetectionRule{} } +func (m *CustomInfoType_DetectionRule) String() string { return proto.CompactTextString(m) } +func (*CustomInfoType_DetectionRule) ProtoMessage() {} +func (*CustomInfoType_DetectionRule) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1, 3} } + +type isCustomInfoType_DetectionRule_Type interface { + isCustomInfoType_DetectionRule_Type() +} + +type CustomInfoType_DetectionRule_HotwordRule_ struct { + HotwordRule *CustomInfoType_DetectionRule_HotwordRule `protobuf:"bytes,1,opt,name=hotword_rule,json=hotwordRule,oneof"` +} + +func (*CustomInfoType_DetectionRule_HotwordRule_) isCustomInfoType_DetectionRule_Type() {} + +func (m *CustomInfoType_DetectionRule) GetType() isCustomInfoType_DetectionRule_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *CustomInfoType_DetectionRule) GetHotwordRule() *CustomInfoType_DetectionRule_HotwordRule { + if x, ok := m.GetType().(*CustomInfoType_DetectionRule_HotwordRule_); ok { + return x.HotwordRule + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*CustomInfoType_DetectionRule) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _CustomInfoType_DetectionRule_OneofMarshaler, _CustomInfoType_DetectionRule_OneofUnmarshaler, _CustomInfoType_DetectionRule_OneofSizer, []interface{}{ + (*CustomInfoType_DetectionRule_HotwordRule_)(nil), + } +} + +func _CustomInfoType_DetectionRule_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*CustomInfoType_DetectionRule) + // type + switch x := m.Type.(type) { + case *CustomInfoType_DetectionRule_HotwordRule_: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.HotwordRule); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("CustomInfoType_DetectionRule.Type has unexpected type %T", x) + } + return nil +} + +func _CustomInfoType_DetectionRule_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*CustomInfoType_DetectionRule) + switch tag { + case 1: // type.hotword_rule + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CustomInfoType_DetectionRule_HotwordRule) + err := b.DecodeMessage(msg) + m.Type = &CustomInfoType_DetectionRule_HotwordRule_{msg} + return true, err + default: + return false, nil + } +} + +func _CustomInfoType_DetectionRule_OneofSizer(msg proto.Message) (n int) { + m := msg.(*CustomInfoType_DetectionRule) + // type + switch x := m.Type.(type) { + case *CustomInfoType_DetectionRule_HotwordRule_: + s := proto.Size(x.HotwordRule) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Message for specifying a window around a finding to apply a detection +// rule. +type CustomInfoType_DetectionRule_Proximity struct { + // Number of characters before the finding to consider. + WindowBefore int32 `protobuf:"varint,1,opt,name=window_before,json=windowBefore" json:"window_before,omitempty"` + // Number of characters after the finding to consider. + WindowAfter int32 `protobuf:"varint,2,opt,name=window_after,json=windowAfter" json:"window_after,omitempty"` +} + +func (m *CustomInfoType_DetectionRule_Proximity) Reset() { + *m = CustomInfoType_DetectionRule_Proximity{} +} +func (m *CustomInfoType_DetectionRule_Proximity) String() string { return proto.CompactTextString(m) } +func (*CustomInfoType_DetectionRule_Proximity) ProtoMessage() {} +func (*CustomInfoType_DetectionRule_Proximity) Descriptor() ([]byte, []int) { + return fileDescriptor1, []int{1, 3, 0} +} + +func (m *CustomInfoType_DetectionRule_Proximity) GetWindowBefore() int32 { + if m != nil { + return m.WindowBefore + } + return 0 +} + +func (m *CustomInfoType_DetectionRule_Proximity) GetWindowAfter() int32 { + if m != nil { + return m.WindowAfter + } + return 0 +} + +// Message for specifying an adjustment to the likelihood of a finding as +// part of a detection rule. +type CustomInfoType_DetectionRule_LikelihoodAdjustment struct { + // Types that are valid to be assigned to Adjustment: + // *CustomInfoType_DetectionRule_LikelihoodAdjustment_FixedLikelihood + // *CustomInfoType_DetectionRule_LikelihoodAdjustment_RelativeLikelihood + Adjustment isCustomInfoType_DetectionRule_LikelihoodAdjustment_Adjustment `protobuf_oneof:"adjustment"` +} + +func (m *CustomInfoType_DetectionRule_LikelihoodAdjustment) Reset() { + *m = CustomInfoType_DetectionRule_LikelihoodAdjustment{} +} +func (m *CustomInfoType_DetectionRule_LikelihoodAdjustment) String() string { + return proto.CompactTextString(m) +} +func (*CustomInfoType_DetectionRule_LikelihoodAdjustment) ProtoMessage() {} +func (*CustomInfoType_DetectionRule_LikelihoodAdjustment) Descriptor() ([]byte, []int) { + return fileDescriptor1, []int{1, 3, 1} +} + +type isCustomInfoType_DetectionRule_LikelihoodAdjustment_Adjustment interface { + isCustomInfoType_DetectionRule_LikelihoodAdjustment_Adjustment() +} + +type CustomInfoType_DetectionRule_LikelihoodAdjustment_FixedLikelihood struct { + FixedLikelihood Likelihood `protobuf:"varint,1,opt,name=fixed_likelihood,json=fixedLikelihood,enum=google.privacy.dlp.v2.Likelihood,oneof"` +} +type CustomInfoType_DetectionRule_LikelihoodAdjustment_RelativeLikelihood struct { + RelativeLikelihood int32 `protobuf:"varint,2,opt,name=relative_likelihood,json=relativeLikelihood,oneof"` +} + +func (*CustomInfoType_DetectionRule_LikelihoodAdjustment_FixedLikelihood) isCustomInfoType_DetectionRule_LikelihoodAdjustment_Adjustment() { +} +func (*CustomInfoType_DetectionRule_LikelihoodAdjustment_RelativeLikelihood) isCustomInfoType_DetectionRule_LikelihoodAdjustment_Adjustment() { +} + +func (m *CustomInfoType_DetectionRule_LikelihoodAdjustment) GetAdjustment() isCustomInfoType_DetectionRule_LikelihoodAdjustment_Adjustment { + if m != nil { + return m.Adjustment + } + return nil +} + +func (m *CustomInfoType_DetectionRule_LikelihoodAdjustment) GetFixedLikelihood() Likelihood { + if x, ok := m.GetAdjustment().(*CustomInfoType_DetectionRule_LikelihoodAdjustment_FixedLikelihood); ok { + return x.FixedLikelihood + } + return Likelihood_LIKELIHOOD_UNSPECIFIED +} + +func (m *CustomInfoType_DetectionRule_LikelihoodAdjustment) GetRelativeLikelihood() int32 { + if x, ok := m.GetAdjustment().(*CustomInfoType_DetectionRule_LikelihoodAdjustment_RelativeLikelihood); ok { + return x.RelativeLikelihood + } + return 0 +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*CustomInfoType_DetectionRule_LikelihoodAdjustment) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _CustomInfoType_DetectionRule_LikelihoodAdjustment_OneofMarshaler, _CustomInfoType_DetectionRule_LikelihoodAdjustment_OneofUnmarshaler, _CustomInfoType_DetectionRule_LikelihoodAdjustment_OneofSizer, []interface{}{ + (*CustomInfoType_DetectionRule_LikelihoodAdjustment_FixedLikelihood)(nil), + (*CustomInfoType_DetectionRule_LikelihoodAdjustment_RelativeLikelihood)(nil), + } +} + +func _CustomInfoType_DetectionRule_LikelihoodAdjustment_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*CustomInfoType_DetectionRule_LikelihoodAdjustment) + // adjustment + switch x := m.Adjustment.(type) { + case *CustomInfoType_DetectionRule_LikelihoodAdjustment_FixedLikelihood: + b.EncodeVarint(1<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.FixedLikelihood)) + case *CustomInfoType_DetectionRule_LikelihoodAdjustment_RelativeLikelihood: + b.EncodeVarint(2<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.RelativeLikelihood)) + case nil: + default: + return fmt.Errorf("CustomInfoType_DetectionRule_LikelihoodAdjustment.Adjustment has unexpected type %T", x) + } + return nil +} + +func _CustomInfoType_DetectionRule_LikelihoodAdjustment_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*CustomInfoType_DetectionRule_LikelihoodAdjustment) + switch tag { + case 1: // adjustment.fixed_likelihood + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Adjustment = &CustomInfoType_DetectionRule_LikelihoodAdjustment_FixedLikelihood{Likelihood(x)} + return true, err + case 2: // adjustment.relative_likelihood + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Adjustment = &CustomInfoType_DetectionRule_LikelihoodAdjustment_RelativeLikelihood{int32(x)} + return true, err + default: + return false, nil + } +} + +func _CustomInfoType_DetectionRule_LikelihoodAdjustment_OneofSizer(msg proto.Message) (n int) { + m := msg.(*CustomInfoType_DetectionRule_LikelihoodAdjustment) + // adjustment + switch x := m.Adjustment.(type) { + case *CustomInfoType_DetectionRule_LikelihoodAdjustment_FixedLikelihood: + n += proto.SizeVarint(1<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.FixedLikelihood)) + case *CustomInfoType_DetectionRule_LikelihoodAdjustment_RelativeLikelihood: + n += proto.SizeVarint(2<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.RelativeLikelihood)) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Detection rule that adjusts the likelihood of findings within a certain +// proximity of hotwords. +type CustomInfoType_DetectionRule_HotwordRule struct { + // Regex pattern defining what qualifies as a hotword. + HotwordRegex *CustomInfoType_Regex `protobuf:"bytes,1,opt,name=hotword_regex,json=hotwordRegex" json:"hotword_regex,omitempty"` + // Proximity of the finding within which the entire hotword must reside. + // The total length of the window cannot exceed 1000 characters. Note that + // the finding itself will be included in the window, so that hotwords may + // be used to match substrings of the finding itself. For example, the + // certainty of a phone number regex "\(\d{3}\) \d{3}-\d{4}" could be + // adjusted upwards if the area code is known to be the local area code of + // a company office using the hotword regex "\(xxx\)", where "xxx" + // is the area code in question. + Proximity *CustomInfoType_DetectionRule_Proximity `protobuf:"bytes,2,opt,name=proximity" json:"proximity,omitempty"` + // Likelihood adjustment to apply to all matching findings. + LikelihoodAdjustment *CustomInfoType_DetectionRule_LikelihoodAdjustment `protobuf:"bytes,3,opt,name=likelihood_adjustment,json=likelihoodAdjustment" json:"likelihood_adjustment,omitempty"` +} + +func (m *CustomInfoType_DetectionRule_HotwordRule) Reset() { + *m = CustomInfoType_DetectionRule_HotwordRule{} +} +func (m *CustomInfoType_DetectionRule_HotwordRule) String() string { return proto.CompactTextString(m) } +func (*CustomInfoType_DetectionRule_HotwordRule) ProtoMessage() {} +func (*CustomInfoType_DetectionRule_HotwordRule) Descriptor() ([]byte, []int) { + return fileDescriptor1, []int{1, 3, 2} +} + +func (m *CustomInfoType_DetectionRule_HotwordRule) GetHotwordRegex() *CustomInfoType_Regex { + if m != nil { + return m.HotwordRegex + } + return nil +} + +func (m *CustomInfoType_DetectionRule_HotwordRule) GetProximity() *CustomInfoType_DetectionRule_Proximity { + if m != nil { + return m.Proximity + } + return nil +} + +func (m *CustomInfoType_DetectionRule_HotwordRule) GetLikelihoodAdjustment() *CustomInfoType_DetectionRule_LikelihoodAdjustment { + if m != nil { + return m.LikelihoodAdjustment + } + return nil +} + +// General identifier of a data field in a storage service. +type FieldId struct { + // Name describing the field. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *FieldId) Reset() { *m = FieldId{} } +func (m *FieldId) String() string { return proto.CompactTextString(m) } +func (*FieldId) ProtoMessage() {} +func (*FieldId) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +func (m *FieldId) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Datastore partition ID. +// A partition ID identifies a grouping of entities. The grouping is always +// by project and namespace, however the namespace ID may be empty. +// +// A partition ID contains several dimensions: +// project ID and namespace ID. +type PartitionId struct { + // The ID of the project to which the entities belong. + ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // If not empty, the ID of the namespace to which the entities belong. + NamespaceId string `protobuf:"bytes,4,opt,name=namespace_id,json=namespaceId" json:"namespace_id,omitempty"` +} + +func (m *PartitionId) Reset() { *m = PartitionId{} } +func (m *PartitionId) String() string { return proto.CompactTextString(m) } +func (*PartitionId) ProtoMessage() {} +func (*PartitionId) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } + +func (m *PartitionId) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *PartitionId) GetNamespaceId() string { + if m != nil { + return m.NamespaceId + } + return "" +} + +// A representation of a Datastore kind. +type KindExpression struct { + // The name of the kind. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *KindExpression) Reset() { *m = KindExpression{} } +func (m *KindExpression) String() string { return proto.CompactTextString(m) } +func (*KindExpression) ProtoMessage() {} +func (*KindExpression) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } + +func (m *KindExpression) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Options defining a data set within Google Cloud Datastore. +type DatastoreOptions struct { + // A partition ID identifies a grouping of entities. The grouping is always + // by project and namespace, however the namespace ID may be empty. + PartitionId *PartitionId `protobuf:"bytes,1,opt,name=partition_id,json=partitionId" json:"partition_id,omitempty"` + // The kind to process. + Kind *KindExpression `protobuf:"bytes,2,opt,name=kind" json:"kind,omitempty"` +} + +func (m *DatastoreOptions) Reset() { *m = DatastoreOptions{} } +func (m *DatastoreOptions) String() string { return proto.CompactTextString(m) } +func (*DatastoreOptions) ProtoMessage() {} +func (*DatastoreOptions) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } + +func (m *DatastoreOptions) GetPartitionId() *PartitionId { + if m != nil { + return m.PartitionId + } + return nil +} + +func (m *DatastoreOptions) GetKind() *KindExpression { + if m != nil { + return m.Kind + } + return nil +} + +// Options defining a file or a set of files (path ending with *) within +// a Google Cloud Storage bucket. +type CloudStorageOptions struct { + FileSet *CloudStorageOptions_FileSet `protobuf:"bytes,1,opt,name=file_set,json=fileSet" json:"file_set,omitempty"` + // Max number of bytes to scan from a file. If a scanned file's size is bigger + // than this value then the rest of the bytes are omitted. + BytesLimitPerFile int64 `protobuf:"varint,4,opt,name=bytes_limit_per_file,json=bytesLimitPerFile" json:"bytes_limit_per_file,omitempty"` +} + +func (m *CloudStorageOptions) Reset() { *m = CloudStorageOptions{} } +func (m *CloudStorageOptions) String() string { return proto.CompactTextString(m) } +func (*CloudStorageOptions) ProtoMessage() {} +func (*CloudStorageOptions) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } + +func (m *CloudStorageOptions) GetFileSet() *CloudStorageOptions_FileSet { + if m != nil { + return m.FileSet + } + return nil +} + +func (m *CloudStorageOptions) GetBytesLimitPerFile() int64 { + if m != nil { + return m.BytesLimitPerFile + } + return 0 +} + +// Set of files to scan. +type CloudStorageOptions_FileSet struct { + // The url, in the format `gs:///`. Trailing wildcard in the + // path is allowed. + Url string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"` +} + +func (m *CloudStorageOptions_FileSet) Reset() { *m = CloudStorageOptions_FileSet{} } +func (m *CloudStorageOptions_FileSet) String() string { return proto.CompactTextString(m) } +func (*CloudStorageOptions_FileSet) ProtoMessage() {} +func (*CloudStorageOptions_FileSet) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6, 0} } + +func (m *CloudStorageOptions_FileSet) GetUrl() string { + if m != nil { + return m.Url + } + return "" +} + +// Options defining BigQuery table and row identifiers. +type BigQueryOptions struct { + // Complete BigQuery table reference. + TableReference *BigQueryTable `protobuf:"bytes,1,opt,name=table_reference,json=tableReference" json:"table_reference,omitempty"` + // References to fields uniquely identifying rows within the table. + // Nested fields in the format, like `person.birthdate.year`, are allowed. + IdentifyingFields []*FieldId `protobuf:"bytes,2,rep,name=identifying_fields,json=identifyingFields" json:"identifying_fields,omitempty"` +} + +func (m *BigQueryOptions) Reset() { *m = BigQueryOptions{} } +func (m *BigQueryOptions) String() string { return proto.CompactTextString(m) } +func (*BigQueryOptions) ProtoMessage() {} +func (*BigQueryOptions) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} } + +func (m *BigQueryOptions) GetTableReference() *BigQueryTable { + if m != nil { + return m.TableReference + } + return nil +} + +func (m *BigQueryOptions) GetIdentifyingFields() []*FieldId { + if m != nil { + return m.IdentifyingFields + } + return nil +} + +// Shared message indicating Cloud storage type. +type StorageConfig struct { + // Types that are valid to be assigned to Type: + // *StorageConfig_DatastoreOptions + // *StorageConfig_CloudStorageOptions + // *StorageConfig_BigQueryOptions + Type isStorageConfig_Type `protobuf_oneof:"type"` + TimespanConfig *StorageConfig_TimespanConfig `protobuf:"bytes,6,opt,name=timespan_config,json=timespanConfig" json:"timespan_config,omitempty"` +} + +func (m *StorageConfig) Reset() { *m = StorageConfig{} } +func (m *StorageConfig) String() string { return proto.CompactTextString(m) } +func (*StorageConfig) ProtoMessage() {} +func (*StorageConfig) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} } + +type isStorageConfig_Type interface { + isStorageConfig_Type() +} + +type StorageConfig_DatastoreOptions struct { + DatastoreOptions *DatastoreOptions `protobuf:"bytes,2,opt,name=datastore_options,json=datastoreOptions,oneof"` +} +type StorageConfig_CloudStorageOptions struct { + CloudStorageOptions *CloudStorageOptions `protobuf:"bytes,3,opt,name=cloud_storage_options,json=cloudStorageOptions,oneof"` +} +type StorageConfig_BigQueryOptions struct { + BigQueryOptions *BigQueryOptions `protobuf:"bytes,4,opt,name=big_query_options,json=bigQueryOptions,oneof"` +} + +func (*StorageConfig_DatastoreOptions) isStorageConfig_Type() {} +func (*StorageConfig_CloudStorageOptions) isStorageConfig_Type() {} +func (*StorageConfig_BigQueryOptions) isStorageConfig_Type() {} + +func (m *StorageConfig) GetType() isStorageConfig_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *StorageConfig) GetDatastoreOptions() *DatastoreOptions { + if x, ok := m.GetType().(*StorageConfig_DatastoreOptions); ok { + return x.DatastoreOptions + } + return nil +} + +func (m *StorageConfig) GetCloudStorageOptions() *CloudStorageOptions { + if x, ok := m.GetType().(*StorageConfig_CloudStorageOptions); ok { + return x.CloudStorageOptions + } + return nil +} + +func (m *StorageConfig) GetBigQueryOptions() *BigQueryOptions { + if x, ok := m.GetType().(*StorageConfig_BigQueryOptions); ok { + return x.BigQueryOptions + } + return nil +} + +func (m *StorageConfig) GetTimespanConfig() *StorageConfig_TimespanConfig { + if m != nil { + return m.TimespanConfig + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*StorageConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _StorageConfig_OneofMarshaler, _StorageConfig_OneofUnmarshaler, _StorageConfig_OneofSizer, []interface{}{ + (*StorageConfig_DatastoreOptions)(nil), + (*StorageConfig_CloudStorageOptions)(nil), + (*StorageConfig_BigQueryOptions)(nil), + } +} + +func _StorageConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*StorageConfig) + // type + switch x := m.Type.(type) { + case *StorageConfig_DatastoreOptions: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DatastoreOptions); err != nil { + return err + } + case *StorageConfig_CloudStorageOptions: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.CloudStorageOptions); err != nil { + return err + } + case *StorageConfig_BigQueryOptions: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.BigQueryOptions); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("StorageConfig.Type has unexpected type %T", x) + } + return nil +} + +func _StorageConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*StorageConfig) + switch tag { + case 2: // type.datastore_options + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(DatastoreOptions) + err := b.DecodeMessage(msg) + m.Type = &StorageConfig_DatastoreOptions{msg} + return true, err + case 3: // type.cloud_storage_options + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CloudStorageOptions) + err := b.DecodeMessage(msg) + m.Type = &StorageConfig_CloudStorageOptions{msg} + return true, err + case 4: // type.big_query_options + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(BigQueryOptions) + err := b.DecodeMessage(msg) + m.Type = &StorageConfig_BigQueryOptions{msg} + return true, err + default: + return false, nil + } +} + +func _StorageConfig_OneofSizer(msg proto.Message) (n int) { + m := msg.(*StorageConfig) + // type + switch x := m.Type.(type) { + case *StorageConfig_DatastoreOptions: + s := proto.Size(x.DatastoreOptions) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *StorageConfig_CloudStorageOptions: + s := proto.Size(x.CloudStorageOptions) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *StorageConfig_BigQueryOptions: + s := proto.Size(x.BigQueryOptions) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Configuration of the timespan of the items to include in scanning. +// Currently only supported when inspecting Google Cloud Storage and BigQuery. +type StorageConfig_TimespanConfig struct { + // Exclude files older than this value. + StartTime *google_protobuf1.Timestamp `protobuf:"bytes,1,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // Exclude files newer than this value. + // If set to zero, no upper time limit is applied. + EndTime *google_protobuf1.Timestamp `protobuf:"bytes,2,opt,name=end_time,json=endTime" json:"end_time,omitempty"` + // Specification of the field containing the timestamp of scanned items. + // Required for data sources like Datastore or BigQuery. + // The valid data types of the timestamp field are: + // for BigQuery - timestamp, date, datetime; + // for Datastore - timestamp. + // Datastore entity will be scanned if the timestamp property does not exist + // or its value is empty or invalid. + TimestampField *FieldId `protobuf:"bytes,3,opt,name=timestamp_field,json=timestampField" json:"timestamp_field,omitempty"` + // When the job is started by a JobTrigger we will automatically figure out + // a valid start_time to avoid scanning files that have not been modified + // since the last time the JobTrigger executed. This will be based on the + // time of the execution of the last run of the JobTrigger. + EnableAutoPopulationOfTimespanConfig bool `protobuf:"varint,4,opt,name=enable_auto_population_of_timespan_config,json=enableAutoPopulationOfTimespanConfig" json:"enable_auto_population_of_timespan_config,omitempty"` +} + +func (m *StorageConfig_TimespanConfig) Reset() { *m = StorageConfig_TimespanConfig{} } +func (m *StorageConfig_TimespanConfig) String() string { return proto.CompactTextString(m) } +func (*StorageConfig_TimespanConfig) ProtoMessage() {} +func (*StorageConfig_TimespanConfig) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8, 0} } + +func (m *StorageConfig_TimespanConfig) GetStartTime() *google_protobuf1.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *StorageConfig_TimespanConfig) GetEndTime() *google_protobuf1.Timestamp { + if m != nil { + return m.EndTime + } + return nil +} + +func (m *StorageConfig_TimespanConfig) GetTimestampField() *FieldId { + if m != nil { + return m.TimestampField + } + return nil +} + +func (m *StorageConfig_TimespanConfig) GetEnableAutoPopulationOfTimespanConfig() bool { + if m != nil { + return m.EnableAutoPopulationOfTimespanConfig + } + return false +} + +// Row key for identifying a record in BigQuery table. +type BigQueryKey struct { + // Complete BigQuery table reference. + TableReference *BigQueryTable `protobuf:"bytes,1,opt,name=table_reference,json=tableReference" json:"table_reference,omitempty"` + // Absolute number of the row from the beginning of the table at the time + // of scanning. + RowNumber int64 `protobuf:"varint,2,opt,name=row_number,json=rowNumber" json:"row_number,omitempty"` +} + +func (m *BigQueryKey) Reset() { *m = BigQueryKey{} } +func (m *BigQueryKey) String() string { return proto.CompactTextString(m) } +func (*BigQueryKey) ProtoMessage() {} +func (*BigQueryKey) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{9} } + +func (m *BigQueryKey) GetTableReference() *BigQueryTable { + if m != nil { + return m.TableReference + } + return nil +} + +func (m *BigQueryKey) GetRowNumber() int64 { + if m != nil { + return m.RowNumber + } + return 0 +} + +// Record key for a finding in Cloud Datastore. +type DatastoreKey struct { + // Datastore entity key. + EntityKey *Key `protobuf:"bytes,1,opt,name=entity_key,json=entityKey" json:"entity_key,omitempty"` +} + +func (m *DatastoreKey) Reset() { *m = DatastoreKey{} } +func (m *DatastoreKey) String() string { return proto.CompactTextString(m) } +func (*DatastoreKey) ProtoMessage() {} +func (*DatastoreKey) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{10} } + +func (m *DatastoreKey) GetEntityKey() *Key { + if m != nil { + return m.EntityKey + } + return nil +} + +// A unique identifier for a Datastore entity. +// If a key's partition ID or any of its path kinds or names are +// reserved/read-only, the key is reserved/read-only. +// A reserved/read-only key is forbidden in certain documented contexts. +type Key struct { + // Entities are partitioned into subsets, currently identified by a project + // ID and namespace ID. + // Queries are scoped to a single partition. + PartitionId *PartitionId `protobuf:"bytes,1,opt,name=partition_id,json=partitionId" json:"partition_id,omitempty"` + // The entity path. + // An entity path consists of one or more elements composed of a kind and a + // string or numerical identifier, which identify entities. The first + // element identifies a _root entity_, the second element identifies + // a _child_ of the root entity, the third element identifies a child of the + // second entity, and so forth. The entities identified by all prefixes of + // the path are called the element's _ancestors_. + // + // A path can never be empty, and a path can have at most 100 elements. + Path []*Key_PathElement `protobuf:"bytes,2,rep,name=path" json:"path,omitempty"` +} + +func (m *Key) Reset() { *m = Key{} } +func (m *Key) String() string { return proto.CompactTextString(m) } +func (*Key) ProtoMessage() {} +func (*Key) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{11} } + +func (m *Key) GetPartitionId() *PartitionId { + if m != nil { + return m.PartitionId + } + return nil +} + +func (m *Key) GetPath() []*Key_PathElement { + if m != nil { + return m.Path + } + return nil +} + +// A (kind, ID/name) pair used to construct a key path. +// +// If either name or ID is set, the element is complete. +// If neither is set, the element is incomplete. +type Key_PathElement struct { + // The kind of the entity. + // A kind matching regex `__.*__` is reserved/read-only. + // A kind must not contain more than 1500 bytes when UTF-8 encoded. + // Cannot be `""`. + Kind string `protobuf:"bytes,1,opt,name=kind" json:"kind,omitempty"` + // The type of ID. + // + // Types that are valid to be assigned to IdType: + // *Key_PathElement_Id + // *Key_PathElement_Name + IdType isKey_PathElement_IdType `protobuf_oneof:"id_type"` +} + +func (m *Key_PathElement) Reset() { *m = Key_PathElement{} } +func (m *Key_PathElement) String() string { return proto.CompactTextString(m) } +func (*Key_PathElement) ProtoMessage() {} +func (*Key_PathElement) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{11, 0} } + +type isKey_PathElement_IdType interface { + isKey_PathElement_IdType() +} + +type Key_PathElement_Id struct { + Id int64 `protobuf:"varint,2,opt,name=id,oneof"` +} +type Key_PathElement_Name struct { + Name string `protobuf:"bytes,3,opt,name=name,oneof"` +} + +func (*Key_PathElement_Id) isKey_PathElement_IdType() {} +func (*Key_PathElement_Name) isKey_PathElement_IdType() {} + +func (m *Key_PathElement) GetIdType() isKey_PathElement_IdType { + if m != nil { + return m.IdType + } + return nil +} + +func (m *Key_PathElement) GetKind() string { + if m != nil { + return m.Kind + } + return "" +} + +func (m *Key_PathElement) GetId() int64 { + if x, ok := m.GetIdType().(*Key_PathElement_Id); ok { + return x.Id + } + return 0 +} + +func (m *Key_PathElement) GetName() string { + if x, ok := m.GetIdType().(*Key_PathElement_Name); ok { + return x.Name + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Key_PathElement) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Key_PathElement_OneofMarshaler, _Key_PathElement_OneofUnmarshaler, _Key_PathElement_OneofSizer, []interface{}{ + (*Key_PathElement_Id)(nil), + (*Key_PathElement_Name)(nil), + } +} + +func _Key_PathElement_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Key_PathElement) + // id_type + switch x := m.IdType.(type) { + case *Key_PathElement_Id: + b.EncodeVarint(2<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.Id)) + case *Key_PathElement_Name: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Name) + case nil: + default: + return fmt.Errorf("Key_PathElement.IdType has unexpected type %T", x) + } + return nil +} + +func _Key_PathElement_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Key_PathElement) + switch tag { + case 2: // id_type.id + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.IdType = &Key_PathElement_Id{int64(x)} + return true, err + case 3: // id_type.name + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.IdType = &Key_PathElement_Name{x} + return true, err + default: + return false, nil + } +} + +func _Key_PathElement_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Key_PathElement) + // id_type + switch x := m.IdType.(type) { + case *Key_PathElement_Id: + n += proto.SizeVarint(2<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.Id)) + case *Key_PathElement_Name: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Name))) + n += len(x.Name) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Message for a unique key indicating a record that contains a finding. +type RecordKey struct { + // Types that are valid to be assigned to Type: + // *RecordKey_DatastoreKey + // *RecordKey_BigQueryKey + Type isRecordKey_Type `protobuf_oneof:"type"` +} + +func (m *RecordKey) Reset() { *m = RecordKey{} } +func (m *RecordKey) String() string { return proto.CompactTextString(m) } +func (*RecordKey) ProtoMessage() {} +func (*RecordKey) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{12} } + +type isRecordKey_Type interface { + isRecordKey_Type() +} + +type RecordKey_DatastoreKey struct { + DatastoreKey *DatastoreKey `protobuf:"bytes,2,opt,name=datastore_key,json=datastoreKey,oneof"` +} +type RecordKey_BigQueryKey struct { + BigQueryKey *BigQueryKey `protobuf:"bytes,3,opt,name=big_query_key,json=bigQueryKey,oneof"` +} + +func (*RecordKey_DatastoreKey) isRecordKey_Type() {} +func (*RecordKey_BigQueryKey) isRecordKey_Type() {} + +func (m *RecordKey) GetType() isRecordKey_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *RecordKey) GetDatastoreKey() *DatastoreKey { + if x, ok := m.GetType().(*RecordKey_DatastoreKey); ok { + return x.DatastoreKey + } + return nil +} + +func (m *RecordKey) GetBigQueryKey() *BigQueryKey { + if x, ok := m.GetType().(*RecordKey_BigQueryKey); ok { + return x.BigQueryKey + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*RecordKey) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _RecordKey_OneofMarshaler, _RecordKey_OneofUnmarshaler, _RecordKey_OneofSizer, []interface{}{ + (*RecordKey_DatastoreKey)(nil), + (*RecordKey_BigQueryKey)(nil), + } +} + +func _RecordKey_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*RecordKey) + // type + switch x := m.Type.(type) { + case *RecordKey_DatastoreKey: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DatastoreKey); err != nil { + return err + } + case *RecordKey_BigQueryKey: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.BigQueryKey); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("RecordKey.Type has unexpected type %T", x) + } + return nil +} + +func _RecordKey_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*RecordKey) + switch tag { + case 2: // type.datastore_key + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(DatastoreKey) + err := b.DecodeMessage(msg) + m.Type = &RecordKey_DatastoreKey{msg} + return true, err + case 3: // type.big_query_key + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(BigQueryKey) + err := b.DecodeMessage(msg) + m.Type = &RecordKey_BigQueryKey{msg} + return true, err + default: + return false, nil + } +} + +func _RecordKey_OneofSizer(msg proto.Message) (n int) { + m := msg.(*RecordKey) + // type + switch x := m.Type.(type) { + case *RecordKey_DatastoreKey: + s := proto.Size(x.DatastoreKey) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *RecordKey_BigQueryKey: + s := proto.Size(x.BigQueryKey) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Message defining the location of a BigQuery table. A table is uniquely +// identified by its project_id, dataset_id, and table_name. Within a query +// a table is often referenced with a string in the format of: +// `:.` or +// `..`. +type BigQueryTable struct { + // The Google Cloud Platform project ID of the project containing the table. + // If omitted, project ID is inferred from the API call. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Dataset ID of the table. + DatasetId string `protobuf:"bytes,2,opt,name=dataset_id,json=datasetId" json:"dataset_id,omitempty"` + // Name of the table. + TableId string `protobuf:"bytes,3,opt,name=table_id,json=tableId" json:"table_id,omitempty"` +} + +func (m *BigQueryTable) Reset() { *m = BigQueryTable{} } +func (m *BigQueryTable) String() string { return proto.CompactTextString(m) } +func (*BigQueryTable) ProtoMessage() {} +func (*BigQueryTable) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{13} } + +func (m *BigQueryTable) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *BigQueryTable) GetDatasetId() string { + if m != nil { + return m.DatasetId + } + return "" +} + +func (m *BigQueryTable) GetTableId() string { + if m != nil { + return m.TableId + } + return "" +} + +func init() { + proto.RegisterType((*InfoType)(nil), "google.privacy.dlp.v2.InfoType") + proto.RegisterType((*CustomInfoType)(nil), "google.privacy.dlp.v2.CustomInfoType") + proto.RegisterType((*CustomInfoType_Dictionary)(nil), "google.privacy.dlp.v2.CustomInfoType.Dictionary") + proto.RegisterType((*CustomInfoType_Dictionary_WordList)(nil), "google.privacy.dlp.v2.CustomInfoType.Dictionary.WordList") + proto.RegisterType((*CustomInfoType_Regex)(nil), "google.privacy.dlp.v2.CustomInfoType.Regex") + proto.RegisterType((*CustomInfoType_SurrogateType)(nil), "google.privacy.dlp.v2.CustomInfoType.SurrogateType") + proto.RegisterType((*CustomInfoType_DetectionRule)(nil), "google.privacy.dlp.v2.CustomInfoType.DetectionRule") + proto.RegisterType((*CustomInfoType_DetectionRule_Proximity)(nil), "google.privacy.dlp.v2.CustomInfoType.DetectionRule.Proximity") + proto.RegisterType((*CustomInfoType_DetectionRule_LikelihoodAdjustment)(nil), "google.privacy.dlp.v2.CustomInfoType.DetectionRule.LikelihoodAdjustment") + proto.RegisterType((*CustomInfoType_DetectionRule_HotwordRule)(nil), "google.privacy.dlp.v2.CustomInfoType.DetectionRule.HotwordRule") + proto.RegisterType((*FieldId)(nil), "google.privacy.dlp.v2.FieldId") + proto.RegisterType((*PartitionId)(nil), "google.privacy.dlp.v2.PartitionId") + proto.RegisterType((*KindExpression)(nil), "google.privacy.dlp.v2.KindExpression") + proto.RegisterType((*DatastoreOptions)(nil), "google.privacy.dlp.v2.DatastoreOptions") + proto.RegisterType((*CloudStorageOptions)(nil), "google.privacy.dlp.v2.CloudStorageOptions") + proto.RegisterType((*CloudStorageOptions_FileSet)(nil), "google.privacy.dlp.v2.CloudStorageOptions.FileSet") + proto.RegisterType((*BigQueryOptions)(nil), "google.privacy.dlp.v2.BigQueryOptions") + proto.RegisterType((*StorageConfig)(nil), "google.privacy.dlp.v2.StorageConfig") + proto.RegisterType((*StorageConfig_TimespanConfig)(nil), "google.privacy.dlp.v2.StorageConfig.TimespanConfig") + proto.RegisterType((*BigQueryKey)(nil), "google.privacy.dlp.v2.BigQueryKey") + proto.RegisterType((*DatastoreKey)(nil), "google.privacy.dlp.v2.DatastoreKey") + proto.RegisterType((*Key)(nil), "google.privacy.dlp.v2.Key") + proto.RegisterType((*Key_PathElement)(nil), "google.privacy.dlp.v2.Key.PathElement") + proto.RegisterType((*RecordKey)(nil), "google.privacy.dlp.v2.RecordKey") + proto.RegisterType((*BigQueryTable)(nil), "google.privacy.dlp.v2.BigQueryTable") + proto.RegisterEnum("google.privacy.dlp.v2.Likelihood", Likelihood_name, Likelihood_value) +} + +func init() { proto.RegisterFile("google/privacy/dlp/v2/storage.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 1517 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xef, 0x6e, 0x1b, 0x37, + 0x12, 0xd7, 0x4a, 0x96, 0x2d, 0x8d, 0xac, 0x3f, 0xa6, 0x9d, 0x83, 0xa2, 0x3b, 0x27, 0x8e, 0x92, + 0xcb, 0xe5, 0x72, 0x80, 0x74, 0x75, 0x50, 0xa0, 0xee, 0x1f, 0x14, 0x96, 0xa5, 0x44, 0xaa, 0x1d, + 0x5b, 0xa5, 0x1d, 0xa7, 0x69, 0x0d, 0x6c, 0x57, 0x22, 0x25, 0x33, 0x59, 0x2d, 0xb7, 0xbb, 0x94, + 0x6d, 0xa1, 0xe8, 0x33, 0x14, 0x28, 0xfa, 0x08, 0x05, 0x8a, 0x16, 0x05, 0x0a, 0xf4, 0x63, 0xfb, + 0x06, 0x7d, 0x88, 0x3e, 0x45, 0x1f, 0xa0, 0x20, 0xb9, 0xbb, 0x92, 0x1c, 0xab, 0x76, 0x82, 0x7c, + 0xd2, 0xce, 0x70, 0x7e, 0xc3, 0xe1, 0x6f, 0x86, 0x33, 0x14, 0xdc, 0xee, 0x73, 0xde, 0xb7, 0x69, + 0xd5, 0xf5, 0xd8, 0x89, 0xd5, 0x1d, 0x55, 0x89, 0xed, 0x56, 0x4f, 0xd6, 0xab, 0xbe, 0xe0, 0x9e, + 0xd5, 0xa7, 0x15, 0xd7, 0xe3, 0x82, 0xa3, 0x6b, 0xda, 0xa8, 0x12, 0x18, 0x55, 0x88, 0xed, 0x56, + 0x4e, 0xd6, 0x4b, 0xff, 0x0a, 0xb0, 0x96, 0xcb, 0xaa, 0x96, 0xe3, 0x70, 0x61, 0x09, 0xc6, 0x1d, + 0x5f, 0x83, 0x4a, 0x37, 0x23, 0xcf, 0x5c, 0xf0, 0xce, 0xb0, 0x57, 0x15, 0x6c, 0x40, 0x7d, 0x61, + 0x0d, 0x5c, 0x6d, 0x50, 0xbe, 0x01, 0xa9, 0x96, 0xd3, 0xe3, 0x07, 0x23, 0x97, 0x22, 0x04, 0x73, + 0x8e, 0x35, 0xa0, 0x45, 0x63, 0xcd, 0xb8, 0x97, 0xc6, 0xea, 0xbb, 0xfc, 0x27, 0x40, 0x6e, 0x6b, + 0xe8, 0x0b, 0x3e, 0x88, 0xcc, 0xde, 0x87, 0x34, 0x73, 0x7a, 0xdc, 0x14, 0x23, 0x57, 0xdb, 0x66, + 0xd6, 0x6f, 0x56, 0x2e, 0x0c, 0xae, 0x12, 0x62, 0x70, 0x8a, 0x85, 0xe8, 0x4d, 0x00, 0x9b, 0xbd, + 0xa0, 0x36, 0x3b, 0xe6, 0x9c, 0x14, 0xe7, 0xd7, 0x8c, 0x7b, 0xb9, 0xf5, 0x5b, 0x33, 0xe0, 0x3b, + 0x91, 0x21, 0x9e, 0x00, 0x21, 0x0c, 0x40, 0x58, 0x57, 0x1e, 0xd3, 0xf2, 0x46, 0xc5, 0xb8, 0x8a, + 0xe0, 0xff, 0x33, 0x5c, 0x4c, 0xc7, 0x5e, 0xa9, 0x47, 0xb8, 0x66, 0x0c, 0x4f, 0x78, 0x41, 0x5b, + 0x90, 0xf4, 0x68, 0x9f, 0x9e, 0x15, 0x13, 0xca, 0xdd, 0xff, 0xae, 0xe6, 0x0e, 0x4b, 0x48, 0x33, + 0x86, 0x35, 0x16, 0x1d, 0x41, 0xce, 0x1f, 0x7a, 0x1e, 0xef, 0x5b, 0x82, 0x6a, 0x7a, 0xe6, 0x94, + 0xb7, 0x07, 0x57, 0xf3, 0xb6, 0x1f, 0x62, 0xa5, 0xd4, 0x8c, 0xe1, 0xac, 0x3f, 0xa9, 0x40, 0x47, + 0x90, 0x27, 0x54, 0x50, 0x15, 0xb2, 0xe9, 0x0d, 0x6d, 0xea, 0x17, 0x17, 0xd6, 0x12, 0x57, 0x77, + 0x5f, 0x0f, 0xc1, 0x78, 0x68, 0x53, 0x9c, 0x23, 0x93, 0xa2, 0x5f, 0xfa, 0xc6, 0x00, 0x18, 0xb3, + 0x83, 0x3e, 0x81, 0xf4, 0x29, 0xf7, 0x88, 0x69, 0x33, 0x5f, 0x04, 0x49, 0xde, 0x78, 0x55, 0x8a, + 0x2b, 0x4f, 0xb9, 0x47, 0x76, 0x98, 0x2f, 0x9a, 0x31, 0x9c, 0x3a, 0x0d, 0xbe, 0x4b, 0x6b, 0x90, + 0x0a, 0xf5, 0x68, 0x05, 0x92, 0x52, 0xef, 0x17, 0x8d, 0xb5, 0xc4, 0xbd, 0x34, 0xd6, 0x42, 0x2d, + 0x05, 0xf3, 0x3e, 0x1f, 0x7a, 0x5d, 0x5a, 0xba, 0x05, 0x49, 0x45, 0x31, 0x2a, 0xc2, 0x82, 0x6b, + 0x09, 0x41, 0x3d, 0x27, 0xa8, 0xce, 0x50, 0x2c, 0xe5, 0x21, 0x3b, 0xc5, 0x5b, 0xe9, 0xd7, 0x24, + 0x64, 0xa7, 0x8e, 0x8a, 0x08, 0x2c, 0x1e, 0x73, 0xa1, 0x8e, 0x23, 0x69, 0x0b, 0x8e, 0xf3, 0xe1, + 0x6b, 0xb0, 0x56, 0x69, 0x6a, 0x3f, 0xf2, 0xbb, 0x19, 0xc3, 0x99, 0xe3, 0xb1, 0x58, 0xda, 0x87, + 0x74, 0xdb, 0xe3, 0x67, 0x6c, 0xc0, 0xc4, 0x08, 0xdd, 0x86, 0xec, 0x29, 0x73, 0x08, 0x3f, 0x35, + 0x3b, 0xb4, 0xc7, 0x3d, 0xbd, 0x67, 0x12, 0x2f, 0x6a, 0x65, 0x4d, 0xe9, 0xd0, 0x2d, 0x08, 0x64, + 0xd3, 0xea, 0x09, 0xea, 0xa9, 0x4a, 0x4e, 0xe2, 0x8c, 0xd6, 0x6d, 0x4a, 0x55, 0xe9, 0x7b, 0x03, + 0x56, 0xc6, 0xb7, 0x60, 0x93, 0x3c, 0x1f, 0xfa, 0x62, 0x40, 0x1d, 0x81, 0x76, 0xa1, 0xd0, 0x63, + 0x67, 0x54, 0x26, 0x28, 0xba, 0x4c, 0xc6, 0x15, 0x2f, 0x53, 0x33, 0x86, 0xf3, 0x0a, 0x3c, 0x56, + 0xa1, 0xb7, 0x60, 0xd9, 0xa3, 0xb6, 0x25, 0xd8, 0x09, 0x9d, 0x74, 0xa9, 0x42, 0x6a, 0xc6, 0x30, + 0x0a, 0x17, 0xc7, 0x90, 0xda, 0x22, 0x80, 0x15, 0x05, 0x54, 0xfa, 0x2d, 0x0e, 0x99, 0x09, 0x76, + 0x50, 0x1b, 0xb2, 0x11, 0xe9, 0xea, 0x62, 0x19, 0xaf, 0x7c, 0xb1, 0x70, 0x98, 0x36, 0x5d, 0x03, + 0x9f, 0x41, 0xda, 0x0d, 0x09, 0x0e, 0x6e, 0xfd, 0x07, 0xaf, 0x93, 0xc3, 0x28, 0x4b, 0x78, 0xec, + 0x0f, 0x7d, 0x05, 0xd7, 0xc6, 0xc7, 0x36, 0xc7, 0xe7, 0x0a, 0xfa, 0x41, 0xf3, 0x75, 0x36, 0xba, + 0x28, 0x71, 0x78, 0xc5, 0xbe, 0x40, 0x5b, 0x9b, 0x87, 0x39, 0xd9, 0x2f, 0xc2, 0xdf, 0xf2, 0x2a, + 0x2c, 0x3c, 0x64, 0xd4, 0x26, 0x2d, 0x72, 0x61, 0x57, 0xde, 0x83, 0x4c, 0xdb, 0xf2, 0x04, 0x93, + 0x5b, 0xb5, 0x08, 0x5a, 0x05, 0x70, 0x3d, 0xfe, 0x9c, 0x76, 0x85, 0xc9, 0x74, 0xce, 0xd2, 0xea, + 0x6c, 0x52, 0xd3, 0x22, 0xb2, 0xce, 0x24, 0xca, 0x77, 0xad, 0x2e, 0x95, 0x06, 0x73, 0xca, 0x20, + 0x13, 0xe9, 0x5a, 0xa4, 0x7c, 0x07, 0x72, 0xdb, 0xcc, 0x21, 0x8d, 0x33, 0xd7, 0xa3, 0xbe, 0xcf, + 0xb8, 0x73, 0xe1, 0xb6, 0xdf, 0x1a, 0x50, 0xa8, 0x5b, 0xc2, 0x92, 0x83, 0x89, 0xee, 0xb9, 0x6a, + 0xd0, 0xa0, 0x06, 0x2c, 0xba, 0x61, 0x2c, 0xd2, 0xbb, 0xce, 0x73, 0x79, 0x06, 0x61, 0x13, 0x61, + 0xe3, 0x8c, 0x3b, 0x71, 0x86, 0x0d, 0x98, 0x7b, 0xc1, 0x1c, 0x12, 0x24, 0xf6, 0xdf, 0x33, 0xe0, + 0xd3, 0x41, 0x62, 0x05, 0x29, 0xff, 0x62, 0xc0, 0xf2, 0x96, 0xcd, 0x87, 0x64, 0x5f, 0x0f, 0xcc, + 0x30, 0xb2, 0xc7, 0x90, 0xea, 0x31, 0x9b, 0x9a, 0x3e, 0x0d, 0x5b, 0xd8, 0xfa, 0xac, 0x34, 0xbe, + 0x8c, 0xae, 0x3c, 0x64, 0x36, 0xdd, 0xa7, 0x02, 0x2f, 0xf4, 0xf4, 0x07, 0xaa, 0xc2, 0x4a, 0x67, + 0x24, 0xa8, 0x6f, 0xda, 0xb2, 0x64, 0x4c, 0x97, 0x7a, 0xa6, 0x5c, 0x52, 0x74, 0x26, 0xf0, 0x92, + 0x5a, 0xdb, 0x91, 0x4b, 0x6d, 0xea, 0x49, 0x70, 0xe9, 0x9f, 0x32, 0x89, 0x1a, 0x5b, 0x80, 0xc4, + 0xd0, 0xb3, 0x03, 0x32, 0xe5, 0x67, 0xf9, 0x67, 0x03, 0xf2, 0x35, 0xd6, 0xff, 0x78, 0x48, 0xbd, + 0xd1, 0x38, 0xe0, 0xbc, 0xb0, 0x3a, 0x36, 0x35, 0x3d, 0xda, 0xa3, 0x1e, 0x75, 0xba, 0x61, 0xaf, + 0xba, 0x33, 0x23, 0xee, 0xd0, 0xc1, 0x81, 0x44, 0xe1, 0x9c, 0x02, 0xe3, 0x10, 0x8b, 0x1e, 0x03, + 0x62, 0x84, 0x3a, 0x82, 0xf5, 0x46, 0xcc, 0xe9, 0x9b, 0x3d, 0x59, 0x50, 0x7e, 0x31, 0xae, 0x66, + 0xc6, 0x8d, 0x19, 0x1e, 0x83, 0xaa, 0xc3, 0x4b, 0x13, 0x48, 0xa5, 0xf3, 0xcb, 0x3f, 0x25, 0x21, + 0x1b, 0x70, 0xb4, 0xc5, 0x9d, 0x1e, 0xeb, 0xa3, 0x43, 0x58, 0x22, 0x61, 0x39, 0x98, 0x5c, 0x1f, + 0x22, 0x48, 0xe0, 0x7f, 0x66, 0xf8, 0x3f, 0x5f, 0x3e, 0xcd, 0x18, 0x2e, 0x90, 0xf3, 0x25, 0xf5, + 0x39, 0x5c, 0xeb, 0xca, 0x8c, 0x98, 0xc1, 0x0b, 0x28, 0xf2, 0xad, 0x2f, 0xe3, 0xfd, 0xab, 0x67, + 0xb1, 0x19, 0xc3, 0xcb, 0xdd, 0x0b, 0x4a, 0xe3, 0x00, 0x96, 0x3a, 0xac, 0x6f, 0x7e, 0x21, 0xc9, + 0x8b, 0xbc, 0xeb, 0x61, 0x7d, 0xf7, 0x12, 0xae, 0xc7, 0x9e, 0xf3, 0x9d, 0x73, 0xf9, 0x3b, 0x82, + 0xbc, 0x7a, 0x5f, 0xb9, 0x96, 0x63, 0x76, 0x15, 0x45, 0xea, 0x81, 0x33, 0x7b, 0x42, 0x4f, 0xd1, + 0x59, 0x39, 0x08, 0xb0, 0x5a, 0xc4, 0x39, 0x31, 0x25, 0x97, 0xbe, 0x8b, 0x43, 0x6e, 0xda, 0x04, + 0x6d, 0x00, 0xf8, 0xc2, 0xf2, 0x84, 0x29, 0x4d, 0x83, 0x5a, 0x29, 0x8d, 0xf7, 0xd2, 0x6f, 0x3e, + 0xed, 0x57, 0xbe, 0xf9, 0x70, 0x5a, 0x59, 0x4b, 0x19, 0xbd, 0x0d, 0x29, 0xea, 0x10, 0x0d, 0x8c, + 0x5f, 0x0a, 0x5c, 0xa0, 0x0e, 0x51, 0xb0, 0x47, 0xc1, 0x11, 0xa5, 0x56, 0x57, 0x54, 0x90, 0x94, + 0xcb, 0x0a, 0x2a, 0x17, 0xc1, 0x94, 0x06, 0x3d, 0x85, 0xff, 0x52, 0x47, 0x15, 0xbb, 0x35, 0x14, + 0xdc, 0x74, 0xb9, 0x3b, 0xb4, 0xd5, 0xd3, 0xd5, 0xe4, 0x3d, 0xf3, 0x3c, 0x8b, 0x32, 0x33, 0x29, + 0x7c, 0x47, 0x03, 0x36, 0x87, 0x82, 0xb7, 0x23, 0xf3, 0xbd, 0xde, 0x34, 0x27, 0x51, 0x0b, 0xfd, + 0x12, 0x32, 0x61, 0xca, 0xb6, 0xe9, 0xe8, 0x4d, 0xdf, 0xad, 0x55, 0x00, 0x8f, 0x9f, 0x9a, 0xce, + 0x70, 0xd0, 0x09, 0x26, 0x77, 0x02, 0xa7, 0x3d, 0x7e, 0xba, 0xab, 0x14, 0xe5, 0x16, 0x2c, 0x46, + 0x95, 0x2e, 0x77, 0xdf, 0x00, 0x90, 0xd7, 0x49, 0x8c, 0xcc, 0x17, 0x74, 0xf4, 0x72, 0xa2, 0xa6, + 0x7b, 0x1c, 0x1d, 0xe1, 0xb4, 0xb6, 0xde, 0xa6, 0xa3, 0xf2, 0x1f, 0x06, 0x24, 0xa4, 0x8b, 0x37, + 0xd4, 0x67, 0xdf, 0x85, 0x39, 0xd7, 0x12, 0xc7, 0x41, 0x1b, 0xb8, 0x3b, 0x3b, 0x86, 0x4a, 0xdb, + 0x12, 0xc7, 0x0d, 0x9b, 0xaa, 0xa9, 0xa5, 0x30, 0xa5, 0x03, 0x39, 0x76, 0x22, 0xa5, 0x1c, 0x11, + 0xaa, 0x65, 0x07, 0x23, 0x42, 0x7e, 0xa3, 0x02, 0xc4, 0x83, 0x11, 0x94, 0x68, 0xc6, 0x70, 0x9c, + 0x11, 0xb4, 0x12, 0x0c, 0x12, 0x59, 0x26, 0xe9, 0x66, 0x4c, 0x8f, 0x92, 0x5a, 0x1a, 0x16, 0x18, + 0x51, 0x6f, 0xe4, 0xf2, 0x0f, 0x06, 0xa4, 0x31, 0xed, 0x72, 0x8f, 0xc8, 0x63, 0x7e, 0x04, 0xd9, + 0x71, 0x4f, 0x91, 0x64, 0xe9, 0xe2, 0xbc, 0x7d, 0x59, 0x3f, 0xd9, 0xa6, 0xf2, 0x49, 0xbf, 0x48, + 0x26, 0x59, 0x6f, 0x42, 0x76, 0x7c, 0xcb, 0xa5, 0xaf, 0xc4, 0xdf, 0x72, 0x36, 0x51, 0x2e, 0xf2, + 0x71, 0xd7, 0x19, 0x8b, 0x51, 0x51, 0x1d, 0x43, 0x76, 0xaa, 0x2e, 0xce, 0x8d, 0x5e, 0xe3, 0xfc, + 0xe8, 0x5d, 0x05, 0x50, 0x11, 0xd1, 0xc9, 0xc9, 0x1c, 0x68, 0x5a, 0x04, 0x5d, 0x87, 0x94, 0x2e, + 0x4a, 0xa6, 0xaf, 0x51, 0x1a, 0x2f, 0x28, 0xb9, 0x45, 0xee, 0x0b, 0x80, 0x89, 0xe7, 0x59, 0x09, + 0xfe, 0xb1, 0xd3, 0xda, 0x6e, 0xec, 0xb4, 0x9a, 0x7b, 0x7b, 0x75, 0xf3, 0xc9, 0xee, 0x7e, 0xbb, + 0xb1, 0xd5, 0x7a, 0xd8, 0x6a, 0xd4, 0x0b, 0x31, 0xb4, 0x04, 0xd9, 0xc3, 0x06, 0x7e, 0x66, 0x3e, + 0xd9, 0x55, 0x26, 0xcf, 0x0a, 0x06, 0x5a, 0x84, 0x54, 0x24, 0xc5, 0xa5, 0xd4, 0xde, 0xdb, 0xdf, + 0x6f, 0xd5, 0x76, 0x1a, 0x85, 0x04, 0x02, 0x98, 0x0f, 0x56, 0xe6, 0x50, 0x1e, 0x32, 0x0a, 0x1a, + 0x28, 0x92, 0xb5, 0xaf, 0x0d, 0xb8, 0xde, 0xe5, 0x83, 0x8b, 0x09, 0xaa, 0x41, 0xdd, 0x76, 0x83, + 0x96, 0xd5, 0x36, 0x3e, 0x7d, 0x27, 0x30, 0xea, 0x73, 0xdb, 0x72, 0xfa, 0x15, 0xee, 0xf5, 0xab, + 0x7d, 0xea, 0xa8, 0xe6, 0x51, 0xd5, 0x4b, 0x96, 0xcb, 0xfc, 0x73, 0x7f, 0x6a, 0xdf, 0x23, 0xb6, + 0xfb, 0x63, 0x7c, 0xf9, 0x91, 0x86, 0xaa, 0x8e, 0x5d, 0xa9, 0xdb, 0x6e, 0xe5, 0x70, 0xfd, 0xf7, + 0x50, 0x7b, 0xa4, 0xb4, 0x47, 0x75, 0xdb, 0x3d, 0x3a, 0x5c, 0xef, 0xcc, 0x2b, 0x87, 0x0f, 0xfe, + 0x0a, 0x00, 0x00, 0xff, 0xff, 0x23, 0xed, 0x0b, 0x18, 0x24, 0x0f, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/privacy/dlp/v2beta1/dlp.pb.go b/vendor/google.golang.org/genproto/googleapis/privacy/dlp/v2beta1/dlp.pb.go index 2fce8ad..7d2fc2f 100644 --- a/vendor/google.golang.org/genproto/googleapis/privacy/dlp/v2beta1/dlp.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/privacy/dlp/v2beta1/dlp.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/privacy/dlp/v2beta1/dlp.proto -// DO NOT EDIT! /* Package dlp is a generated protocol buffer package. @@ -11,14 +10,20 @@ It is generated from these files: It has these top-level messages: InspectConfig + OperationConfig ContentItem + Table InspectResult Finding Location + TableLocation Range ImageLocation RedactContentRequest + Color RedactContentResponse + DeidentifyContentRequest + DeidentifyContentResponse InspectContentRequest InspectContentResponse CreateInspectOperationRequest @@ -34,7 +39,37 @@ It has these top-level messages: CategoryDescription ListRootCategoriesRequest ListRootCategoriesResponse + AnalyzeDataSourceRiskRequest + PrivacyMetric + RiskAnalysisOperationMetadata + RiskAnalysisOperationResult + ValueFrequency + Value + DeidentifyConfig + PrimitiveTransformation + TimePartConfig + CryptoHashConfig + ReplaceValueConfig + ReplaceWithInfoTypeConfig + RedactConfig + CharsToIgnore + CharacterMaskConfig + FixedSizeBucketingConfig + BucketingConfig + CryptoReplaceFfxFpeConfig + CryptoKey + TransientCryptoKey + UnwrappedCryptoKey + KmsWrappedCryptoKey + InfoTypeTransformations + FieldTransformation + RecordTransformations + RecordSuppression + RecordCondition + DeidentificationSummary + TransformationSummary InfoType + CustomInfoType FieldId PartitionId KindExpression @@ -43,11 +78,14 @@ It has these top-level messages: DatastoreOptions CloudStorageOptions CloudStoragePath + BigQueryOptions StorageConfig CloudStorageKey DatastoreKey Key RecordKey + BigQueryTable + EntityId */ package dlp @@ -56,7 +94,10 @@ import fmt "fmt" import math "math" import _ "google.golang.org/genproto/googleapis/api/annotations" import google_longrunning "google.golang.org/genproto/googleapis/longrunning" +import _ "github.com/golang/protobuf/ptypes/empty" import google_protobuf3 "github.com/golang/protobuf/ptypes/timestamp" +import google_type "google.golang.org/genproto/googleapis/type/date" +import google_type1 "google.golang.org/genproto/googleapis/type/timeofday" import ( context "golang.org/x/net/context" @@ -79,7 +120,7 @@ const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package type Likelihood int32 const ( - // Default value; information with all likelihoods will be included. + // Default value; information with all likelihoods is included. Likelihood_LIKELIHOOD_UNSPECIFIED Likelihood = 0 // Few matching elements. Likelihood_VERY_UNLIKELY Likelihood = 1 @@ -113,23 +154,245 @@ func (x Likelihood) String() string { } func (Likelihood) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } +// Operators available for comparing the value of fields. +type RelationalOperator int32 + +const ( + RelationalOperator_RELATIONAL_OPERATOR_UNSPECIFIED RelationalOperator = 0 + // Equal. + RelationalOperator_EQUAL_TO RelationalOperator = 1 + // Not equal to. + RelationalOperator_NOT_EQUAL_TO RelationalOperator = 2 + // Greater than. + RelationalOperator_GREATER_THAN RelationalOperator = 3 + // Less than. + RelationalOperator_LESS_THAN RelationalOperator = 4 + // Greater than or equals. + RelationalOperator_GREATER_THAN_OR_EQUALS RelationalOperator = 5 + // Less than or equals. + RelationalOperator_LESS_THAN_OR_EQUALS RelationalOperator = 6 + // Exists + RelationalOperator_EXISTS RelationalOperator = 7 +) + +var RelationalOperator_name = map[int32]string{ + 0: "RELATIONAL_OPERATOR_UNSPECIFIED", + 1: "EQUAL_TO", + 2: "NOT_EQUAL_TO", + 3: "GREATER_THAN", + 4: "LESS_THAN", + 5: "GREATER_THAN_OR_EQUALS", + 6: "LESS_THAN_OR_EQUALS", + 7: "EXISTS", +} +var RelationalOperator_value = map[string]int32{ + "RELATIONAL_OPERATOR_UNSPECIFIED": 0, + "EQUAL_TO": 1, + "NOT_EQUAL_TO": 2, + "GREATER_THAN": 3, + "LESS_THAN": 4, + "GREATER_THAN_OR_EQUALS": 5, + "LESS_THAN_OR_EQUALS": 6, + "EXISTS": 7, +} + +func (x RelationalOperator) String() string { + return proto.EnumName(RelationalOperator_name, int32(x)) +} +func (RelationalOperator) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +type TimePartConfig_TimePart int32 + +const ( + TimePartConfig_TIME_PART_UNSPECIFIED TimePartConfig_TimePart = 0 + // [000-9999] + TimePartConfig_YEAR TimePartConfig_TimePart = 1 + // [1-12] + TimePartConfig_MONTH TimePartConfig_TimePart = 2 + // [1-31] + TimePartConfig_DAY_OF_MONTH TimePartConfig_TimePart = 3 + // [1-7] + TimePartConfig_DAY_OF_WEEK TimePartConfig_TimePart = 4 + // [1-52] + TimePartConfig_WEEK_OF_YEAR TimePartConfig_TimePart = 5 + // [0-24] + TimePartConfig_HOUR_OF_DAY TimePartConfig_TimePart = 6 +) + +var TimePartConfig_TimePart_name = map[int32]string{ + 0: "TIME_PART_UNSPECIFIED", + 1: "YEAR", + 2: "MONTH", + 3: "DAY_OF_MONTH", + 4: "DAY_OF_WEEK", + 5: "WEEK_OF_YEAR", + 6: "HOUR_OF_DAY", +} +var TimePartConfig_TimePart_value = map[string]int32{ + "TIME_PART_UNSPECIFIED": 0, + "YEAR": 1, + "MONTH": 2, + "DAY_OF_MONTH": 3, + "DAY_OF_WEEK": 4, + "WEEK_OF_YEAR": 5, + "HOUR_OF_DAY": 6, +} + +func (x TimePartConfig_TimePart) String() string { + return proto.EnumName(TimePartConfig_TimePart_name, int32(x)) +} +func (TimePartConfig_TimePart) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{38, 0} } + +type CharsToIgnore_CharacterGroup int32 + +const ( + CharsToIgnore_CHARACTER_GROUP_UNSPECIFIED CharsToIgnore_CharacterGroup = 0 + // 0-9 + CharsToIgnore_NUMERIC CharsToIgnore_CharacterGroup = 1 + // A-Z + CharsToIgnore_ALPHA_UPPER_CASE CharsToIgnore_CharacterGroup = 2 + // a-z + CharsToIgnore_ALPHA_LOWER_CASE CharsToIgnore_CharacterGroup = 3 + // US Punctuation, one of !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ + CharsToIgnore_PUNCTUATION CharsToIgnore_CharacterGroup = 4 + // Whitespace character, one of [ \t\n\x0B\f\r] + CharsToIgnore_WHITESPACE CharsToIgnore_CharacterGroup = 5 +) + +var CharsToIgnore_CharacterGroup_name = map[int32]string{ + 0: "CHARACTER_GROUP_UNSPECIFIED", + 1: "NUMERIC", + 2: "ALPHA_UPPER_CASE", + 3: "ALPHA_LOWER_CASE", + 4: "PUNCTUATION", + 5: "WHITESPACE", +} +var CharsToIgnore_CharacterGroup_value = map[string]int32{ + "CHARACTER_GROUP_UNSPECIFIED": 0, + "NUMERIC": 1, + "ALPHA_UPPER_CASE": 2, + "ALPHA_LOWER_CASE": 3, + "PUNCTUATION": 4, + "WHITESPACE": 5, +} + +func (x CharsToIgnore_CharacterGroup) String() string { + return proto.EnumName(CharsToIgnore_CharacterGroup_name, int32(x)) +} +func (CharsToIgnore_CharacterGroup) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{43, 0} +} + +// These are commonly used subsets of the alphabet that the FFX mode +// natively supports. In the algorithm, the alphabet is selected using +// the "radix". Therefore each corresponds to particular radix. +type CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet int32 + +const ( + CryptoReplaceFfxFpeConfig_FFX_COMMON_NATIVE_ALPHABET_UNSPECIFIED CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet = 0 + // [0-9] (radix of 10) + CryptoReplaceFfxFpeConfig_NUMERIC CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet = 1 + // [0-9A-F] (radix of 16) + CryptoReplaceFfxFpeConfig_HEXADECIMAL CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet = 2 + // [0-9A-Z] (radix of 36) + CryptoReplaceFfxFpeConfig_UPPER_CASE_ALPHA_NUMERIC CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet = 3 + // [0-9A-Za-z] (radix of 62) + CryptoReplaceFfxFpeConfig_ALPHA_NUMERIC CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet = 4 +) + +var CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet_name = map[int32]string{ + 0: "FFX_COMMON_NATIVE_ALPHABET_UNSPECIFIED", + 1: "NUMERIC", + 2: "HEXADECIMAL", + 3: "UPPER_CASE_ALPHA_NUMERIC", + 4: "ALPHA_NUMERIC", +} +var CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet_value = map[string]int32{ + "FFX_COMMON_NATIVE_ALPHABET_UNSPECIFIED": 0, + "NUMERIC": 1, + "HEXADECIMAL": 2, + "UPPER_CASE_ALPHA_NUMERIC": 3, + "ALPHA_NUMERIC": 4, +} + +func (x CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet) String() string { + return proto.EnumName(CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet_name, int32(x)) +} +func (CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{47, 0} +} + +type RecordCondition_Expressions_LogicalOperator int32 + +const ( + RecordCondition_Expressions_LOGICAL_OPERATOR_UNSPECIFIED RecordCondition_Expressions_LogicalOperator = 0 + RecordCondition_Expressions_AND RecordCondition_Expressions_LogicalOperator = 1 +) + +var RecordCondition_Expressions_LogicalOperator_name = map[int32]string{ + 0: "LOGICAL_OPERATOR_UNSPECIFIED", + 1: "AND", +} +var RecordCondition_Expressions_LogicalOperator_value = map[string]int32{ + "LOGICAL_OPERATOR_UNSPECIFIED": 0, + "AND": 1, +} + +func (x RecordCondition_Expressions_LogicalOperator) String() string { + return proto.EnumName(RecordCondition_Expressions_LogicalOperator_name, int32(x)) +} +func (RecordCondition_Expressions_LogicalOperator) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{56, 2, 0} +} + +// Possible outcomes of transformations. +type TransformationSummary_TransformationResultCode int32 + +const ( + TransformationSummary_TRANSFORMATION_RESULT_CODE_UNSPECIFIED TransformationSummary_TransformationResultCode = 0 + TransformationSummary_SUCCESS TransformationSummary_TransformationResultCode = 1 + TransformationSummary_ERROR TransformationSummary_TransformationResultCode = 2 +) + +var TransformationSummary_TransformationResultCode_name = map[int32]string{ + 0: "TRANSFORMATION_RESULT_CODE_UNSPECIFIED", + 1: "SUCCESS", + 2: "ERROR", +} +var TransformationSummary_TransformationResultCode_value = map[string]int32{ + "TRANSFORMATION_RESULT_CODE_UNSPECIFIED": 0, + "SUCCESS": 1, + "ERROR": 2, +} + +func (x TransformationSummary_TransformationResultCode) String() string { + return proto.EnumName(TransformationSummary_TransformationResultCode_name, int32(x)) +} +func (TransformationSummary_TransformationResultCode) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{58, 0} +} + // Configuration description of the scanning process. // When used with redactContent only info_types and min_likelihood are currently // used. type InspectConfig struct { - // Restrict what info_types to look for. The values must correspond to + // Restricts what info_types to look for. The values must correspond to // InfoType values returned by ListInfoTypes or found in documentation. // Empty info_types runs all enabled detectors. InfoTypes []*InfoType `protobuf:"bytes,1,rep,name=info_types,json=infoTypes" json:"info_types,omitempty"` - // Only return findings equal or above this threshold. + // Only returns findings equal or above this threshold. MinLikelihood Likelihood `protobuf:"varint,2,opt,name=min_likelihood,json=minLikelihood,enum=google.privacy.dlp.v2beta1.Likelihood" json:"min_likelihood,omitempty"` - // Limit the number of findings per content item. + // Limits the number of findings per content item or long running operation. MaxFindings int32 `protobuf:"varint,3,opt,name=max_findings,json=maxFindings" json:"max_findings,omitempty"` - // When true, a contextual quote from the data that triggered a finding will - // be included in the response; see Finding.quote. + // When true, a contextual quote from the data that triggered a finding is + // included in the response; see Finding.quote. IncludeQuote bool `protobuf:"varint,4,opt,name=include_quote,json=includeQuote" json:"include_quote,omitempty"` - // When true, exclude type information of the findings. + // When true, excludes type information of the findings. ExcludeTypes bool `protobuf:"varint,6,opt,name=exclude_types,json=excludeTypes" json:"exclude_types,omitempty"` + // Configuration of findings limit given for specified info types. + InfoTypeLimits []*InspectConfig_InfoTypeLimit `protobuf:"bytes,7,rep,name=info_type_limits,json=infoTypeLimits" json:"info_type_limits,omitempty"` + // Custom info types provided by the user. + CustomInfoTypes []*CustomInfoType `protobuf:"bytes,8,rep,name=custom_info_types,json=customInfoTypes" json:"custom_info_types,omitempty"` } func (m *InspectConfig) Reset() { *m = InspectConfig{} } @@ -172,6 +435,69 @@ func (m *InspectConfig) GetExcludeTypes() bool { return false } +func (m *InspectConfig) GetInfoTypeLimits() []*InspectConfig_InfoTypeLimit { + if m != nil { + return m.InfoTypeLimits + } + return nil +} + +func (m *InspectConfig) GetCustomInfoTypes() []*CustomInfoType { + if m != nil { + return m.CustomInfoTypes + } + return nil +} + +// Max findings configuration per info type, per content item or long running +// operation. +type InspectConfig_InfoTypeLimit struct { + // Type of information the findings limit applies to. Only one limit per + // info_type should be provided. If InfoTypeLimit does not have an + // info_type, the DLP API applies the limit against all info_types that are + // found but not specified in another InfoTypeLimit. + InfoType *InfoType `protobuf:"bytes,1,opt,name=info_type,json=infoType" json:"info_type,omitempty"` + // Max findings limit for the given infoType. + MaxFindings int32 `protobuf:"varint,2,opt,name=max_findings,json=maxFindings" json:"max_findings,omitempty"` +} + +func (m *InspectConfig_InfoTypeLimit) Reset() { *m = InspectConfig_InfoTypeLimit{} } +func (m *InspectConfig_InfoTypeLimit) String() string { return proto.CompactTextString(m) } +func (*InspectConfig_InfoTypeLimit) ProtoMessage() {} +func (*InspectConfig_InfoTypeLimit) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 0} } + +func (m *InspectConfig_InfoTypeLimit) GetInfoType() *InfoType { + if m != nil { + return m.InfoType + } + return nil +} + +func (m *InspectConfig_InfoTypeLimit) GetMaxFindings() int32 { + if m != nil { + return m.MaxFindings + } + return 0 +} + +// Additional configuration for inspect long running operations. +type OperationConfig struct { + // Max number of findings per file, Datastore entity, or database row. + MaxItemFindings int64 `protobuf:"varint,1,opt,name=max_item_findings,json=maxItemFindings" json:"max_item_findings,omitempty"` +} + +func (m *OperationConfig) Reset() { *m = OperationConfig{} } +func (m *OperationConfig) String() string { return proto.CompactTextString(m) } +func (*OperationConfig) ProtoMessage() {} +func (*OperationConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *OperationConfig) GetMaxItemFindings() int64 { + if m != nil { + return m.MaxItemFindings + } + return 0 +} + // Container structure for the content to inspect. type ContentItem struct { // Type of the content, as defined in Content-Type HTTP header. @@ -183,13 +509,14 @@ type ContentItem struct { // Types that are valid to be assigned to DataItem: // *ContentItem_Data // *ContentItem_Value + // *ContentItem_Table DataItem isContentItem_DataItem `protobuf_oneof:"data_item"` } func (m *ContentItem) Reset() { *m = ContentItem{} } func (m *ContentItem) String() string { return proto.CompactTextString(m) } func (*ContentItem) ProtoMessage() {} -func (*ContentItem) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } +func (*ContentItem) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } type isContentItem_DataItem interface { isContentItem_DataItem() @@ -201,9 +528,13 @@ type ContentItem_Data struct { type ContentItem_Value struct { Value string `protobuf:"bytes,3,opt,name=value,oneof"` } +type ContentItem_Table struct { + Table *Table `protobuf:"bytes,4,opt,name=table,oneof"` +} func (*ContentItem_Data) isContentItem_DataItem() {} func (*ContentItem_Value) isContentItem_DataItem() {} +func (*ContentItem_Table) isContentItem_DataItem() {} func (m *ContentItem) GetDataItem() isContentItem_DataItem { if m != nil { @@ -233,11 +564,19 @@ func (m *ContentItem) GetValue() string { return "" } +func (m *ContentItem) GetTable() *Table { + if x, ok := m.GetDataItem().(*ContentItem_Table); ok { + return x.Table + } + return nil +} + // XXX_OneofFuncs is for the internal use of the proto package. func (*ContentItem) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { return _ContentItem_OneofMarshaler, _ContentItem_OneofUnmarshaler, _ContentItem_OneofSizer, []interface{}{ (*ContentItem_Data)(nil), (*ContentItem_Value)(nil), + (*ContentItem_Table)(nil), } } @@ -251,6 +590,11 @@ func _ContentItem_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { case *ContentItem_Value: b.EncodeVarint(3<<3 | proto.WireBytes) b.EncodeStringBytes(x.Value) + case *ContentItem_Table: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Table); err != nil { + return err + } case nil: default: return fmt.Errorf("ContentItem.DataItem has unexpected type %T", x) @@ -275,6 +619,14 @@ func _ContentItem_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Bu x, err := b.DecodeStringBytes() m.DataItem = &ContentItem_Value{x} return true, err + case 4: // data_item.table + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Table) + err := b.DecodeMessage(msg) + m.DataItem = &ContentItem_Table{msg} + return true, err default: return false, nil } @@ -292,6 +644,11 @@ func _ContentItem_OneofSizer(msg proto.Message) (n int) { n += proto.SizeVarint(3<<3 | proto.WireBytes) n += proto.SizeVarint(uint64(len(x.Value))) n += len(x.Value) + case *ContentItem_Table: + s := proto.Size(x.Table) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s case nil: default: panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) @@ -299,6 +656,47 @@ func _ContentItem_OneofSizer(msg proto.Message) (n int) { return n } +// Structured content to inspect. Up to 50,000 `Value`s per request allowed. +type Table struct { + Headers []*FieldId `protobuf:"bytes,1,rep,name=headers" json:"headers,omitempty"` + Rows []*Table_Row `protobuf:"bytes,2,rep,name=rows" json:"rows,omitempty"` +} + +func (m *Table) Reset() { *m = Table{} } +func (m *Table) String() string { return proto.CompactTextString(m) } +func (*Table) ProtoMessage() {} +func (*Table) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *Table) GetHeaders() []*FieldId { + if m != nil { + return m.Headers + } + return nil +} + +func (m *Table) GetRows() []*Table_Row { + if m != nil { + return m.Rows + } + return nil +} + +type Table_Row struct { + Values []*Value `protobuf:"bytes,1,rep,name=values" json:"values,omitempty"` +} + +func (m *Table_Row) Reset() { *m = Table_Row{} } +func (m *Table_Row) String() string { return proto.CompactTextString(m) } +func (*Table_Row) ProtoMessage() {} +func (*Table_Row) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3, 0} } + +func (m *Table_Row) GetValues() []*Value { + if m != nil { + return m.Values + } + return nil +} + // All the findings for a single scanned item. type InspectResult struct { // List of findings for an item. @@ -315,7 +713,7 @@ type InspectResult struct { func (m *InspectResult) Reset() { *m = InspectResult{} } func (m *InspectResult) String() string { return proto.CompactTextString(m) } func (*InspectResult) ProtoMessage() {} -func (*InspectResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } +func (*InspectResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } func (m *InspectResult) GetFindings() []*Finding { if m != nil { @@ -348,7 +746,7 @@ type Finding struct { func (m *Finding) Reset() { *m = Finding{} } func (m *Finding) String() string { return proto.CompactTextString(m) } func (*Finding) ProtoMessage() {} -func (*Finding) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } +func (*Finding) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } func (m *Finding) GetQuote() string { if m != nil { @@ -398,12 +796,14 @@ type Location struct { RecordKey *RecordKey `protobuf:"bytes,4,opt,name=record_key,json=recordKey" json:"record_key,omitempty"` // Field id of the field containing the finding. FieldId *FieldId `protobuf:"bytes,5,opt,name=field_id,json=fieldId" json:"field_id,omitempty"` + // Location within a `ContentItem.Table`. + TableLocation *TableLocation `protobuf:"bytes,6,opt,name=table_location,json=tableLocation" json:"table_location,omitempty"` } func (m *Location) Reset() { *m = Location{} } func (m *Location) String() string { return proto.CompactTextString(m) } func (*Location) ProtoMessage() {} -func (*Location) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } +func (*Location) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } func (m *Location) GetByteRange() *Range { if m != nil { @@ -440,6 +840,31 @@ func (m *Location) GetFieldId() *FieldId { return nil } +func (m *Location) GetTableLocation() *TableLocation { + if m != nil { + return m.TableLocation + } + return nil +} + +// Location of a finding within a `ContentItem.Table`. +type TableLocation struct { + // The zero-based index of the row where the finding is located. + RowIndex int64 `protobuf:"varint,1,opt,name=row_index,json=rowIndex" json:"row_index,omitempty"` +} + +func (m *TableLocation) Reset() { *m = TableLocation{} } +func (m *TableLocation) String() string { return proto.CompactTextString(m) } +func (*TableLocation) ProtoMessage() {} +func (*TableLocation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *TableLocation) GetRowIndex() int64 { + if m != nil { + return m.RowIndex + } + return 0 +} + // Generic half-open interval [start, end) type Range struct { // Index of the first character of the range (inclusive). @@ -451,7 +876,7 @@ type Range struct { func (m *Range) Reset() { *m = Range{} } func (m *Range) String() string { return proto.CompactTextString(m) } func (*Range) ProtoMessage() {} -func (*Range) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } +func (*Range) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } func (m *Range) GetStart() int64 { if m != nil { @@ -482,7 +907,7 @@ type ImageLocation struct { func (m *ImageLocation) Reset() { *m = ImageLocation{} } func (m *ImageLocation) String() string { return proto.CompactTextString(m) } func (*ImageLocation) ProtoMessage() {} -func (*ImageLocation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } +func (*ImageLocation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } func (m *ImageLocation) GetTop() int32 { if m != nil { @@ -519,14 +944,17 @@ type RedactContentRequest struct { InspectConfig *InspectConfig `protobuf:"bytes,1,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"` // The list of items to inspect. Up to 100 are allowed per request. Items []*ContentItem `protobuf:"bytes,2,rep,name=items" json:"items,omitempty"` - // The strings to replace findings with. Must specify at least one. + // The strings to replace findings text findings with. Must specify at least + // one of these or one ImageRedactionConfig if redacting images. ReplaceConfigs []*RedactContentRequest_ReplaceConfig `protobuf:"bytes,3,rep,name=replace_configs,json=replaceConfigs" json:"replace_configs,omitempty"` + // The configuration for specifying what content to redact from images. + ImageRedactionConfigs []*RedactContentRequest_ImageRedactionConfig `protobuf:"bytes,4,rep,name=image_redaction_configs,json=imageRedactionConfigs" json:"image_redaction_configs,omitempty"` } func (m *RedactContentRequest) Reset() { *m = RedactContentRequest{} } func (m *RedactContentRequest) String() string { return proto.CompactTextString(m) } func (*RedactContentRequest) ProtoMessage() {} -func (*RedactContentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } +func (*RedactContentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } func (m *RedactContentRequest) GetInspectConfig() *InspectConfig { if m != nil { @@ -549,10 +977,17 @@ func (m *RedactContentRequest) GetReplaceConfigs() []*RedactContentRequest_Repla return nil } +func (m *RedactContentRequest) GetImageRedactionConfigs() []*RedactContentRequest_ImageRedactionConfig { + if m != nil { + return m.ImageRedactionConfigs + } + return nil +} + type RedactContentRequest_ReplaceConfig struct { // Type of information to replace. Only one ReplaceConfig per info_type - // should be provided. If ReplaceConfig does not have an info_type, we'll - // match it against all info_types that are found but not specified in + // should be provided. If ReplaceConfig does not have an info_type, the DLP + // API matches it against all info_types that are found but not specified in // another ReplaceConfig. InfoType *InfoType `protobuf:"bytes,1,opt,name=info_type,json=infoType" json:"info_type,omitempty"` // Content replacing sensitive information of given type. Max 256 chars. @@ -563,7 +998,7 @@ func (m *RedactContentRequest_ReplaceConfig) Reset() { *m = RedactConten func (m *RedactContentRequest_ReplaceConfig) String() string { return proto.CompactTextString(m) } func (*RedactContentRequest_ReplaceConfig) ProtoMessage() {} func (*RedactContentRequest_ReplaceConfig) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{7, 0} + return fileDescriptor0, []int{10, 0} } func (m *RedactContentRequest_ReplaceConfig) GetInfoType() *InfoType { @@ -580,141 +1015,382 @@ func (m *RedactContentRequest_ReplaceConfig) GetReplaceWith() string { return "" } -// Results of deidentifying a list of items. -type RedactContentResponse struct { - // The redacted content. - Items []*ContentItem `protobuf:"bytes,1,rep,name=items" json:"items,omitempty"` +// Configuration for determining how redaction of images should occur. +type RedactContentRequest_ImageRedactionConfig struct { + // Type of information to redact from images. + // + // Types that are valid to be assigned to Target: + // *RedactContentRequest_ImageRedactionConfig_InfoType + // *RedactContentRequest_ImageRedactionConfig_RedactAllText + Target isRedactContentRequest_ImageRedactionConfig_Target `protobuf_oneof:"target"` + // The color to use when redacting content from an image. If not specified, + // the default is black. + RedactionColor *Color `protobuf:"bytes,3,opt,name=redaction_color,json=redactionColor" json:"redaction_color,omitempty"` } -func (m *RedactContentResponse) Reset() { *m = RedactContentResponse{} } -func (m *RedactContentResponse) String() string { return proto.CompactTextString(m) } -func (*RedactContentResponse) ProtoMessage() {} -func (*RedactContentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } +func (m *RedactContentRequest_ImageRedactionConfig) Reset() { + *m = RedactContentRequest_ImageRedactionConfig{} +} +func (m *RedactContentRequest_ImageRedactionConfig) String() string { return proto.CompactTextString(m) } +func (*RedactContentRequest_ImageRedactionConfig) ProtoMessage() {} +func (*RedactContentRequest_ImageRedactionConfig) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{10, 1} +} -func (m *RedactContentResponse) GetItems() []*ContentItem { - if m != nil { - return m.Items - } - return nil +type isRedactContentRequest_ImageRedactionConfig_Target interface { + isRedactContentRequest_ImageRedactionConfig_Target() } -// Request to search for potentially sensitive info in a list of items. -type InspectContentRequest struct { - // Configuration for the inspector. - InspectConfig *InspectConfig `protobuf:"bytes,1,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"` - // The list of items to inspect. Items in a single request are - // considered "related" unless inspect_config.independent_inputs is true. - // Up to 100 are allowed per request. - Items []*ContentItem `protobuf:"bytes,2,rep,name=items" json:"items,omitempty"` +type RedactContentRequest_ImageRedactionConfig_InfoType struct { + InfoType *InfoType `protobuf:"bytes,1,opt,name=info_type,json=infoType,oneof"` +} +type RedactContentRequest_ImageRedactionConfig_RedactAllText struct { + RedactAllText bool `protobuf:"varint,2,opt,name=redact_all_text,json=redactAllText,oneof"` } -func (m *InspectContentRequest) Reset() { *m = InspectContentRequest{} } -func (m *InspectContentRequest) String() string { return proto.CompactTextString(m) } -func (*InspectContentRequest) ProtoMessage() {} -func (*InspectContentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } +func (*RedactContentRequest_ImageRedactionConfig_InfoType) isRedactContentRequest_ImageRedactionConfig_Target() { +} +func (*RedactContentRequest_ImageRedactionConfig_RedactAllText) isRedactContentRequest_ImageRedactionConfig_Target() { +} -func (m *InspectContentRequest) GetInspectConfig() *InspectConfig { +func (m *RedactContentRequest_ImageRedactionConfig) GetTarget() isRedactContentRequest_ImageRedactionConfig_Target { if m != nil { - return m.InspectConfig + return m.Target } return nil } -func (m *InspectContentRequest) GetItems() []*ContentItem { - if m != nil { - return m.Items +func (m *RedactContentRequest_ImageRedactionConfig) GetInfoType() *InfoType { + if x, ok := m.GetTarget().(*RedactContentRequest_ImageRedactionConfig_InfoType); ok { + return x.InfoType } return nil } -// Results of inspecting a list of items. -type InspectContentResponse struct { - // Each content_item from the request will have a result in this list, in the - // same order as the request. - Results []*InspectResult `protobuf:"bytes,1,rep,name=results" json:"results,omitempty"` +func (m *RedactContentRequest_ImageRedactionConfig) GetRedactAllText() bool { + if x, ok := m.GetTarget().(*RedactContentRequest_ImageRedactionConfig_RedactAllText); ok { + return x.RedactAllText + } + return false } -func (m *InspectContentResponse) Reset() { *m = InspectContentResponse{} } -func (m *InspectContentResponse) String() string { return proto.CompactTextString(m) } -func (*InspectContentResponse) ProtoMessage() {} -func (*InspectContentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } - -func (m *InspectContentResponse) GetResults() []*InspectResult { +func (m *RedactContentRequest_ImageRedactionConfig) GetRedactionColor() *Color { if m != nil { - return m.Results + return m.RedactionColor } return nil } -// Request for scheduling a scan of a data subset from a Google Platform data -// repository. -type CreateInspectOperationRequest struct { - // Configuration for the inspector. - InspectConfig *InspectConfig `protobuf:"bytes,1,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"` - // Specification of the data set to process. - StorageConfig *StorageConfig `protobuf:"bytes,2,opt,name=storage_config,json=storageConfig" json:"storage_config,omitempty"` - // Optional location to store findings. The bucket must already exist and - // the Google APIs service account for DLP must have write permission to - // write to the given bucket. - // Results will be split over multiple csv files with each file name matching - // the pattern "[operation_id] + [count].csv". - // The operation_id will match the identifier for the Operation, - // and the [count] is a counter used for tracking the number of files written. - // The CSV file(s) contain the following columns regardless of storage type - // scanned: id, info_type, likelihood, byte size of finding, quote, time_stamp - // For cloud storage the next two columns are: file_path, start_offset - // For datastore the next two columns are: project_id, namespace_id, path, - // column_name, offset. - OutputConfig *OutputStorageConfig `protobuf:"bytes,3,opt,name=output_config,json=outputConfig" json:"output_config,omitempty"` +// XXX_OneofFuncs is for the internal use of the proto package. +func (*RedactContentRequest_ImageRedactionConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _RedactContentRequest_ImageRedactionConfig_OneofMarshaler, _RedactContentRequest_ImageRedactionConfig_OneofUnmarshaler, _RedactContentRequest_ImageRedactionConfig_OneofSizer, []interface{}{ + (*RedactContentRequest_ImageRedactionConfig_InfoType)(nil), + (*RedactContentRequest_ImageRedactionConfig_RedactAllText)(nil), + } } -func (m *CreateInspectOperationRequest) Reset() { *m = CreateInspectOperationRequest{} } -func (m *CreateInspectOperationRequest) String() string { return proto.CompactTextString(m) } -func (*CreateInspectOperationRequest) ProtoMessage() {} -func (*CreateInspectOperationRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } - -func (m *CreateInspectOperationRequest) GetInspectConfig() *InspectConfig { - if m != nil { - return m.InspectConfig +func _RedactContentRequest_ImageRedactionConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*RedactContentRequest_ImageRedactionConfig) + // target + switch x := m.Target.(type) { + case *RedactContentRequest_ImageRedactionConfig_InfoType: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.InfoType); err != nil { + return err + } + case *RedactContentRequest_ImageRedactionConfig_RedactAllText: + t := uint64(0) + if x.RedactAllText { + t = 1 + } + b.EncodeVarint(2<<3 | proto.WireVarint) + b.EncodeVarint(t) + case nil: + default: + return fmt.Errorf("RedactContentRequest_ImageRedactionConfig.Target has unexpected type %T", x) } return nil } -func (m *CreateInspectOperationRequest) GetStorageConfig() *StorageConfig { - if m != nil { - return m.StorageConfig +func _RedactContentRequest_ImageRedactionConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*RedactContentRequest_ImageRedactionConfig) + switch tag { + case 1: // target.info_type + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(InfoType) + err := b.DecodeMessage(msg) + m.Target = &RedactContentRequest_ImageRedactionConfig_InfoType{msg} + return true, err + case 2: // target.redact_all_text + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Target = &RedactContentRequest_ImageRedactionConfig_RedactAllText{x != 0} + return true, err + default: + return false, nil } - return nil } -func (m *CreateInspectOperationRequest) GetOutputConfig() *OutputStorageConfig { - if m != nil { - return m.OutputConfig +func _RedactContentRequest_ImageRedactionConfig_OneofSizer(msg proto.Message) (n int) { + m := msg.(*RedactContentRequest_ImageRedactionConfig) + // target + switch x := m.Target.(type) { + case *RedactContentRequest_ImageRedactionConfig_InfoType: + s := proto.Size(x.InfoType) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *RedactContentRequest_ImageRedactionConfig_RedactAllText: + n += proto.SizeVarint(2<<3 | proto.WireVarint) + n += 1 + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) } - return nil + return n } -// Cloud repository for storing output. -type OutputStorageConfig struct { - // Types that are valid to be assigned to Type: - // *OutputStorageConfig_StoragePath - Type isOutputStorageConfig_Type `protobuf_oneof:"type"` +// Represents a color in the RGB color space. +type Color struct { + // The amount of red in the color as a value in the interval [0, 1]. + Red float32 `protobuf:"fixed32,1,opt,name=red" json:"red,omitempty"` + // The amount of green in the color as a value in the interval [0, 1]. + Green float32 `protobuf:"fixed32,2,opt,name=green" json:"green,omitempty"` + // The amount of blue in the color as a value in the interval [0, 1]. + Blue float32 `protobuf:"fixed32,3,opt,name=blue" json:"blue,omitempty"` } -func (m *OutputStorageConfig) Reset() { *m = OutputStorageConfig{} } -func (m *OutputStorageConfig) String() string { return proto.CompactTextString(m) } -func (*OutputStorageConfig) ProtoMessage() {} -func (*OutputStorageConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } +func (m *Color) Reset() { *m = Color{} } +func (m *Color) String() string { return proto.CompactTextString(m) } +func (*Color) ProtoMessage() {} +func (*Color) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } -type isOutputStorageConfig_Type interface { - isOutputStorageConfig_Type() +func (m *Color) GetRed() float32 { + if m != nil { + return m.Red + } + return 0 } -type OutputStorageConfig_StoragePath struct { - StoragePath *CloudStoragePath `protobuf:"bytes,2,opt,name=storage_path,json=storagePath,oneof"` +func (m *Color) GetGreen() float32 { + if m != nil { + return m.Green + } + return 0 } -func (*OutputStorageConfig_StoragePath) isOutputStorageConfig_Type() {} +func (m *Color) GetBlue() float32 { + if m != nil { + return m.Blue + } + return 0 +} + +// Results of redacting a list of items. +type RedactContentResponse struct { + // The redacted content. + Items []*ContentItem `protobuf:"bytes,1,rep,name=items" json:"items,omitempty"` +} + +func (m *RedactContentResponse) Reset() { *m = RedactContentResponse{} } +func (m *RedactContentResponse) String() string { return proto.CompactTextString(m) } +func (*RedactContentResponse) ProtoMessage() {} +func (*RedactContentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *RedactContentResponse) GetItems() []*ContentItem { + if m != nil { + return m.Items + } + return nil +} + +// Request to de-identify a list of items. +type DeidentifyContentRequest struct { + // Configuration for the de-identification of the list of content items. + DeidentifyConfig *DeidentifyConfig `protobuf:"bytes,1,opt,name=deidentify_config,json=deidentifyConfig" json:"deidentify_config,omitempty"` + // Configuration for the inspector. + InspectConfig *InspectConfig `protobuf:"bytes,2,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"` + // The list of items to inspect. Up to 100 are allowed per request. + // All items will be treated as text/*. + Items []*ContentItem `protobuf:"bytes,3,rep,name=items" json:"items,omitempty"` +} + +func (m *DeidentifyContentRequest) Reset() { *m = DeidentifyContentRequest{} } +func (m *DeidentifyContentRequest) String() string { return proto.CompactTextString(m) } +func (*DeidentifyContentRequest) ProtoMessage() {} +func (*DeidentifyContentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +func (m *DeidentifyContentRequest) GetDeidentifyConfig() *DeidentifyConfig { + if m != nil { + return m.DeidentifyConfig + } + return nil +} + +func (m *DeidentifyContentRequest) GetInspectConfig() *InspectConfig { + if m != nil { + return m.InspectConfig + } + return nil +} + +func (m *DeidentifyContentRequest) GetItems() []*ContentItem { + if m != nil { + return m.Items + } + return nil +} + +// Results of de-identifying a list of items. +type DeidentifyContentResponse struct { + Items []*ContentItem `protobuf:"bytes,1,rep,name=items" json:"items,omitempty"` + // A review of the transformations that took place for each item. + Summaries []*DeidentificationSummary `protobuf:"bytes,2,rep,name=summaries" json:"summaries,omitempty"` +} + +func (m *DeidentifyContentResponse) Reset() { *m = DeidentifyContentResponse{} } +func (m *DeidentifyContentResponse) String() string { return proto.CompactTextString(m) } +func (*DeidentifyContentResponse) ProtoMessage() {} +func (*DeidentifyContentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +func (m *DeidentifyContentResponse) GetItems() []*ContentItem { + if m != nil { + return m.Items + } + return nil +} + +func (m *DeidentifyContentResponse) GetSummaries() []*DeidentificationSummary { + if m != nil { + return m.Summaries + } + return nil +} + +// Request to search for potentially sensitive info in a list of items. +type InspectContentRequest struct { + // Configuration for the inspector. + InspectConfig *InspectConfig `protobuf:"bytes,1,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"` + // The list of items to inspect. Items in a single request are + // considered "related" unless inspect_config.independent_inputs is true. + // Up to 100 are allowed per request. + Items []*ContentItem `protobuf:"bytes,2,rep,name=items" json:"items,omitempty"` +} + +func (m *InspectContentRequest) Reset() { *m = InspectContentRequest{} } +func (m *InspectContentRequest) String() string { return proto.CompactTextString(m) } +func (*InspectContentRequest) ProtoMessage() {} +func (*InspectContentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +func (m *InspectContentRequest) GetInspectConfig() *InspectConfig { + if m != nil { + return m.InspectConfig + } + return nil +} + +func (m *InspectContentRequest) GetItems() []*ContentItem { + if m != nil { + return m.Items + } + return nil +} + +// Results of inspecting a list of items. +type InspectContentResponse struct { + // Each content_item from the request has a result in this list, in the + // same order as the request. + Results []*InspectResult `protobuf:"bytes,1,rep,name=results" json:"results,omitempty"` +} + +func (m *InspectContentResponse) Reset() { *m = InspectContentResponse{} } +func (m *InspectContentResponse) String() string { return proto.CompactTextString(m) } +func (*InspectContentResponse) ProtoMessage() {} +func (*InspectContentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } + +func (m *InspectContentResponse) GetResults() []*InspectResult { + if m != nil { + return m.Results + } + return nil +} + +// Request for scheduling a scan of a data subset from a Google Platform data +// repository. +type CreateInspectOperationRequest struct { + // Configuration for the inspector. + InspectConfig *InspectConfig `protobuf:"bytes,1,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"` + // Specification of the data set to process. + StorageConfig *StorageConfig `protobuf:"bytes,2,opt,name=storage_config,json=storageConfig" json:"storage_config,omitempty"` + // Optional location to store findings. + OutputConfig *OutputStorageConfig `protobuf:"bytes,3,opt,name=output_config,json=outputConfig" json:"output_config,omitempty"` + // Additional configuration settings for long running operations. + OperationConfig *OperationConfig `protobuf:"bytes,5,opt,name=operation_config,json=operationConfig" json:"operation_config,omitempty"` +} + +func (m *CreateInspectOperationRequest) Reset() { *m = CreateInspectOperationRequest{} } +func (m *CreateInspectOperationRequest) String() string { return proto.CompactTextString(m) } +func (*CreateInspectOperationRequest) ProtoMessage() {} +func (*CreateInspectOperationRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } + +func (m *CreateInspectOperationRequest) GetInspectConfig() *InspectConfig { + if m != nil { + return m.InspectConfig + } + return nil +} + +func (m *CreateInspectOperationRequest) GetStorageConfig() *StorageConfig { + if m != nil { + return m.StorageConfig + } + return nil +} + +func (m *CreateInspectOperationRequest) GetOutputConfig() *OutputStorageConfig { + if m != nil { + return m.OutputConfig + } + return nil +} + +func (m *CreateInspectOperationRequest) GetOperationConfig() *OperationConfig { + if m != nil { + return m.OperationConfig + } + return nil +} + +// Cloud repository for storing output. +type OutputStorageConfig struct { + // Types that are valid to be assigned to Type: + // *OutputStorageConfig_Table + // *OutputStorageConfig_StoragePath + Type isOutputStorageConfig_Type `protobuf_oneof:"type"` +} + +func (m *OutputStorageConfig) Reset() { *m = OutputStorageConfig{} } +func (m *OutputStorageConfig) String() string { return proto.CompactTextString(m) } +func (*OutputStorageConfig) ProtoMessage() {} +func (*OutputStorageConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } + +type isOutputStorageConfig_Type interface { + isOutputStorageConfig_Type() +} + +type OutputStorageConfig_Table struct { + Table *BigQueryTable `protobuf:"bytes,1,opt,name=table,oneof"` +} +type OutputStorageConfig_StoragePath struct { + StoragePath *CloudStoragePath `protobuf:"bytes,2,opt,name=storage_path,json=storagePath,oneof"` +} + +func (*OutputStorageConfig_Table) isOutputStorageConfig_Type() {} +func (*OutputStorageConfig_StoragePath) isOutputStorageConfig_Type() {} func (m *OutputStorageConfig) GetType() isOutputStorageConfig_Type { if m != nil { @@ -723,6 +1399,13 @@ func (m *OutputStorageConfig) GetType() isOutputStorageConfig_Type { return nil } +func (m *OutputStorageConfig) GetTable() *BigQueryTable { + if x, ok := m.GetType().(*OutputStorageConfig_Table); ok { + return x.Table + } + return nil +} + func (m *OutputStorageConfig) GetStoragePath() *CloudStoragePath { if x, ok := m.GetType().(*OutputStorageConfig_StoragePath); ok { return x.StoragePath @@ -733,6 +1416,7 @@ func (m *OutputStorageConfig) GetStoragePath() *CloudStoragePath { // XXX_OneofFuncs is for the internal use of the proto package. func (*OutputStorageConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { return _OutputStorageConfig_OneofMarshaler, _OutputStorageConfig_OneofUnmarshaler, _OutputStorageConfig_OneofSizer, []interface{}{ + (*OutputStorageConfig_Table)(nil), (*OutputStorageConfig_StoragePath)(nil), } } @@ -741,6 +1425,11 @@ func _OutputStorageConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) err m := msg.(*OutputStorageConfig) // type switch x := m.Type.(type) { + case *OutputStorageConfig_Table: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Table); err != nil { + return err + } case *OutputStorageConfig_StoragePath: b.EncodeVarint(2<<3 | proto.WireBytes) if err := b.EncodeMessage(x.StoragePath); err != nil { @@ -756,6 +1445,14 @@ func _OutputStorageConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) err func _OutputStorageConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { m := msg.(*OutputStorageConfig) switch tag { + case 1: // type.table + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(BigQueryTable) + err := b.DecodeMessage(msg) + m.Type = &OutputStorageConfig_Table{msg} + return true, err case 2: // type.storage_path if wire != proto.WireBytes { return true, proto.ErrInternalBadWireType @@ -773,6 +1470,11 @@ func _OutputStorageConfig_OneofSizer(msg proto.Message) (n int) { m := msg.(*OutputStorageConfig) // type switch x := m.Type.(type) { + case *OutputStorageConfig_Table: + s := proto.Size(x.Table) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s case *OutputStorageConfig_StoragePath: s := proto.Size(x.StoragePath) n += proto.SizeVarint(2<<3 | proto.WireBytes) @@ -785,7 +1487,7 @@ func _OutputStorageConfig_OneofSizer(msg proto.Message) (n int) { return n } -// Stats regarding a specific InfoType. +// Statistics regarding a specific InfoType. type InfoTypeStatistics struct { // The type of finding this stat is for. InfoType *InfoType `protobuf:"bytes,1,opt,name=info_type,json=infoType" json:"info_type,omitempty"` @@ -796,7 +1498,7 @@ type InfoTypeStatistics struct { func (m *InfoTypeStatistics) Reset() { *m = InfoTypeStatistics{} } func (m *InfoTypeStatistics) String() string { return proto.CompactTextString(m) } func (*InfoTypeStatistics) ProtoMessage() {} -func (*InfoTypeStatistics) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } +func (*InfoTypeStatistics) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } func (m *InfoTypeStatistics) GetInfoType() *InfoType { if m != nil { @@ -832,7 +1534,7 @@ type InspectOperationMetadata struct { func (m *InspectOperationMetadata) Reset() { *m = InspectOperationMetadata{} } func (m *InspectOperationMetadata) String() string { return proto.CompactTextString(m) } func (*InspectOperationMetadata) ProtoMessage() {} -func (*InspectOperationMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } +func (*InspectOperationMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } func (m *InspectOperationMetadata) GetProcessedBytes() int64 { if m != nil { @@ -894,7 +1596,7 @@ type InspectOperationResult struct { func (m *InspectOperationResult) Reset() { *m = InspectOperationResult{} } func (m *InspectOperationResult) String() string { return proto.CompactTextString(m) } func (*InspectOperationResult) ProtoMessage() {} -func (*InspectOperationResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } +func (*InspectOperationResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } func (m *InspectOperationResult) GetName() string { if m != nil { @@ -906,22 +1608,32 @@ func (m *InspectOperationResult) GetName() string { // Request for the list of results in a given inspect operation. type ListInspectFindingsRequest struct { // Identifier of the results set returned as metadata of - // the longrunning operation created by a call to CreateInspectOperation. - // Should be in the format of `inspect/results/{id}. + // the longrunning operation created by a call to InspectDataSource. + // Should be in the format of `inspect/results/{id}`. Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` // Maximum number of results to return. - // If 0, the implementation will select a reasonable value. + // If 0, the implementation selects a reasonable value. PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` // The value returned by the last `ListInspectFindingsResponse`; indicates // that this is a continuation of a prior `ListInspectFindings` call, and that // the system should return the next page of data. PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // Restricts findings to items that match. Supports info_type and likelihood. + // + // Examples: + // + // - info_type=EMAIL_ADDRESS + // - info_type=PHONE_NUMBER,EMAIL_ADDRESS + // - likelihood=VERY_LIKELY + // - likelihood=VERY_LIKELY,LIKELY + // - info_type=EMAIL_ADDRESS,likelihood=VERY_LIKELY,LIKELY + Filter string `protobuf:"bytes,4,opt,name=filter" json:"filter,omitempty"` } func (m *ListInspectFindingsRequest) Reset() { *m = ListInspectFindingsRequest{} } func (m *ListInspectFindingsRequest) String() string { return proto.CompactTextString(m) } func (*ListInspectFindingsRequest) ProtoMessage() {} -func (*ListInspectFindingsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } +func (*ListInspectFindingsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } func (m *ListInspectFindingsRequest) GetName() string { if m != nil { @@ -944,6 +1656,13 @@ func (m *ListInspectFindingsRequest) GetPageToken() string { return "" } +func (m *ListInspectFindingsRequest) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + // Response to the ListInspectFindings request. type ListInspectFindingsResponse struct { // The results. @@ -956,7 +1675,7 @@ type ListInspectFindingsResponse struct { func (m *ListInspectFindingsResponse) Reset() { *m = ListInspectFindingsResponse{} } func (m *ListInspectFindingsResponse) String() string { return proto.CompactTextString(m) } func (*ListInspectFindingsResponse) ProtoMessage() {} -func (*ListInspectFindingsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } +func (*ListInspectFindingsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } func (m *ListInspectFindingsResponse) GetResult() *InspectResult { if m != nil { @@ -972,20 +1691,20 @@ func (m *ListInspectFindingsResponse) GetNextPageToken() string { return "" } -// Info type description. +// Description of the information type (infoType). type InfoTypeDescription struct { - // Internal name of the info type. + // Internal name of the infoType. Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - // Human readable form of the info type name. + // Human readable form of the infoType name. DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName" json:"display_name,omitempty"` - // List of categories this info type belongs to. + // List of categories this infoType belongs to. Categories []*CategoryDescription `protobuf:"bytes,3,rep,name=categories" json:"categories,omitempty"` } func (m *InfoTypeDescription) Reset() { *m = InfoTypeDescription{} } func (m *InfoTypeDescription) String() string { return proto.CompactTextString(m) } func (*InfoTypeDescription) ProtoMessage() {} -func (*InfoTypeDescription) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } +func (*InfoTypeDescription) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} } func (m *InfoTypeDescription) GetName() string { if m != nil { @@ -1022,7 +1741,7 @@ type ListInfoTypesRequest struct { func (m *ListInfoTypesRequest) Reset() { *m = ListInfoTypesRequest{} } func (m *ListInfoTypesRequest) String() string { return proto.CompactTextString(m) } func (*ListInfoTypesRequest) ProtoMessage() {} -func (*ListInfoTypesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } +func (*ListInfoTypesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } func (m *ListInfoTypesRequest) GetCategory() string { if m != nil { @@ -1047,7 +1766,7 @@ type ListInfoTypesResponse struct { func (m *ListInfoTypesResponse) Reset() { *m = ListInfoTypesResponse{} } func (m *ListInfoTypesResponse) String() string { return proto.CompactTextString(m) } func (*ListInfoTypesResponse) ProtoMessage() {} -func (*ListInfoTypesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } +func (*ListInfoTypesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} } func (m *ListInfoTypesResponse) GetInfoTypes() []*InfoTypeDescription { if m != nil { @@ -1067,7 +1786,7 @@ type CategoryDescription struct { func (m *CategoryDescription) Reset() { *m = CategoryDescription{} } func (m *CategoryDescription) String() string { return proto.CompactTextString(m) } func (*CategoryDescription) ProtoMessage() {} -func (*CategoryDescription) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } +func (*CategoryDescription) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} } func (m *CategoryDescription) GetName() string { if m != nil { @@ -1095,7 +1814,7 @@ type ListRootCategoriesRequest struct { func (m *ListRootCategoriesRequest) Reset() { *m = ListRootCategoriesRequest{} } func (m *ListRootCategoriesRequest) String() string { return proto.CompactTextString(m) } func (*ListRootCategoriesRequest) ProtoMessage() {} -func (*ListRootCategoriesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } +func (*ListRootCategoriesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} } func (m *ListRootCategoriesRequest) GetLanguageCode() string { if m != nil { @@ -1113,7 +1832,7 @@ type ListRootCategoriesResponse struct { func (m *ListRootCategoriesResponse) Reset() { *m = ListRootCategoriesResponse{} } func (m *ListRootCategoriesResponse) String() string { return proto.CompactTextString(m) } func (*ListRootCategoriesResponse) ProtoMessage() {} -func (*ListRootCategoriesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } +func (*ListRootCategoriesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} } func (m *ListRootCategoriesResponse) GetCategories() []*CategoryDescription { if m != nil { @@ -1122,80 +1841,3166 @@ func (m *ListRootCategoriesResponse) GetCategories() []*CategoryDescription { return nil } -func init() { - proto.RegisterType((*InspectConfig)(nil), "google.privacy.dlp.v2beta1.InspectConfig") - proto.RegisterType((*ContentItem)(nil), "google.privacy.dlp.v2beta1.ContentItem") - proto.RegisterType((*InspectResult)(nil), "google.privacy.dlp.v2beta1.InspectResult") - proto.RegisterType((*Finding)(nil), "google.privacy.dlp.v2beta1.Finding") - proto.RegisterType((*Location)(nil), "google.privacy.dlp.v2beta1.Location") - proto.RegisterType((*Range)(nil), "google.privacy.dlp.v2beta1.Range") - proto.RegisterType((*ImageLocation)(nil), "google.privacy.dlp.v2beta1.ImageLocation") - proto.RegisterType((*RedactContentRequest)(nil), "google.privacy.dlp.v2beta1.RedactContentRequest") - proto.RegisterType((*RedactContentRequest_ReplaceConfig)(nil), "google.privacy.dlp.v2beta1.RedactContentRequest.ReplaceConfig") - proto.RegisterType((*RedactContentResponse)(nil), "google.privacy.dlp.v2beta1.RedactContentResponse") - proto.RegisterType((*InspectContentRequest)(nil), "google.privacy.dlp.v2beta1.InspectContentRequest") - proto.RegisterType((*InspectContentResponse)(nil), "google.privacy.dlp.v2beta1.InspectContentResponse") - proto.RegisterType((*CreateInspectOperationRequest)(nil), "google.privacy.dlp.v2beta1.CreateInspectOperationRequest") - proto.RegisterType((*OutputStorageConfig)(nil), "google.privacy.dlp.v2beta1.OutputStorageConfig") - proto.RegisterType((*InfoTypeStatistics)(nil), "google.privacy.dlp.v2beta1.InfoTypeStatistics") - proto.RegisterType((*InspectOperationMetadata)(nil), "google.privacy.dlp.v2beta1.InspectOperationMetadata") - proto.RegisterType((*InspectOperationResult)(nil), "google.privacy.dlp.v2beta1.InspectOperationResult") - proto.RegisterType((*ListInspectFindingsRequest)(nil), "google.privacy.dlp.v2beta1.ListInspectFindingsRequest") - proto.RegisterType((*ListInspectFindingsResponse)(nil), "google.privacy.dlp.v2beta1.ListInspectFindingsResponse") - proto.RegisterType((*InfoTypeDescription)(nil), "google.privacy.dlp.v2beta1.InfoTypeDescription") - proto.RegisterType((*ListInfoTypesRequest)(nil), "google.privacy.dlp.v2beta1.ListInfoTypesRequest") - proto.RegisterType((*ListInfoTypesResponse)(nil), "google.privacy.dlp.v2beta1.ListInfoTypesResponse") - proto.RegisterType((*CategoryDescription)(nil), "google.privacy.dlp.v2beta1.CategoryDescription") - proto.RegisterType((*ListRootCategoriesRequest)(nil), "google.privacy.dlp.v2beta1.ListRootCategoriesRequest") - proto.RegisterType((*ListRootCategoriesResponse)(nil), "google.privacy.dlp.v2beta1.ListRootCategoriesResponse") - proto.RegisterEnum("google.privacy.dlp.v2beta1.Likelihood", Likelihood_name, Likelihood_value) +// Request for creating a risk analysis operation. +type AnalyzeDataSourceRiskRequest struct { + // Privacy metric to compute. + PrivacyMetric *PrivacyMetric `protobuf:"bytes,1,opt,name=privacy_metric,json=privacyMetric" json:"privacy_metric,omitempty"` + // Input dataset to compute metrics over. + SourceTable *BigQueryTable `protobuf:"bytes,3,opt,name=source_table,json=sourceTable" json:"source_table,omitempty"` } -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +func (m *AnalyzeDataSourceRiskRequest) Reset() { *m = AnalyzeDataSourceRiskRequest{} } +func (m *AnalyzeDataSourceRiskRequest) String() string { return proto.CompactTextString(m) } +func (*AnalyzeDataSourceRiskRequest) ProtoMessage() {} +func (*AnalyzeDataSourceRiskRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} } -// Client API for DlpService service +func (m *AnalyzeDataSourceRiskRequest) GetPrivacyMetric() *PrivacyMetric { + if m != nil { + return m.PrivacyMetric + } + return nil +} -type DlpServiceClient interface { - // Find potentially sensitive info in a list of strings. - // This method has limits on input size, processing time, and output size. - InspectContent(ctx context.Context, in *InspectContentRequest, opts ...grpc.CallOption) (*InspectContentResponse, error) - // Redact potentially sensitive info from a list of strings. - // This method has limits on input size, processing time, and output size. - RedactContent(ctx context.Context, in *RedactContentRequest, opts ...grpc.CallOption) (*RedactContentResponse, error) - // Schedule a job scanning content in a Google Cloud Platform data repository. - CreateInspectOperation(ctx context.Context, in *CreateInspectOperationRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) - // Returns list of results for given inspect operation result set id. - ListInspectFindings(ctx context.Context, in *ListInspectFindingsRequest, opts ...grpc.CallOption) (*ListInspectFindingsResponse, error) - // Returns sensitive information types for given category. - ListInfoTypes(ctx context.Context, in *ListInfoTypesRequest, opts ...grpc.CallOption) (*ListInfoTypesResponse, error) - // Returns the list of root categories of sensitive information. - ListRootCategories(ctx context.Context, in *ListRootCategoriesRequest, opts ...grpc.CallOption) (*ListRootCategoriesResponse, error) +func (m *AnalyzeDataSourceRiskRequest) GetSourceTable() *BigQueryTable { + if m != nil { + return m.SourceTable + } + return nil } -type dlpServiceClient struct { - cc *grpc.ClientConn +// Privacy metric to compute for reidentification risk analysis. +type PrivacyMetric struct { + // Types that are valid to be assigned to Type: + // *PrivacyMetric_NumericalStatsConfig_ + // *PrivacyMetric_CategoricalStatsConfig_ + // *PrivacyMetric_KAnonymityConfig_ + // *PrivacyMetric_LDiversityConfig_ + Type isPrivacyMetric_Type `protobuf_oneof:"type"` } -func NewDlpServiceClient(cc *grpc.ClientConn) DlpServiceClient { - return &dlpServiceClient{cc} +func (m *PrivacyMetric) Reset() { *m = PrivacyMetric{} } +func (m *PrivacyMetric) String() string { return proto.CompactTextString(m) } +func (*PrivacyMetric) ProtoMessage() {} +func (*PrivacyMetric) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} } + +type isPrivacyMetric_Type interface { + isPrivacyMetric_Type() } -func (c *dlpServiceClient) InspectContent(ctx context.Context, in *InspectContentRequest, opts ...grpc.CallOption) (*InspectContentResponse, error) { - out := new(InspectContentResponse) - err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta1.DlpService/InspectContent", in, out, c.cc, opts...) - if err != nil { - return nil, err - } - return out, nil +type PrivacyMetric_NumericalStatsConfig_ struct { + NumericalStatsConfig *PrivacyMetric_NumericalStatsConfig `protobuf:"bytes,1,opt,name=numerical_stats_config,json=numericalStatsConfig,oneof"` +} +type PrivacyMetric_CategoricalStatsConfig_ struct { + CategoricalStatsConfig *PrivacyMetric_CategoricalStatsConfig `protobuf:"bytes,2,opt,name=categorical_stats_config,json=categoricalStatsConfig,oneof"` +} +type PrivacyMetric_KAnonymityConfig_ struct { + KAnonymityConfig *PrivacyMetric_KAnonymityConfig `protobuf:"bytes,3,opt,name=k_anonymity_config,json=kAnonymityConfig,oneof"` +} +type PrivacyMetric_LDiversityConfig_ struct { + LDiversityConfig *PrivacyMetric_LDiversityConfig `protobuf:"bytes,4,opt,name=l_diversity_config,json=lDiversityConfig,oneof"` } -func (c *dlpServiceClient) RedactContent(ctx context.Context, in *RedactContentRequest, opts ...grpc.CallOption) (*RedactContentResponse, error) { +func (*PrivacyMetric_NumericalStatsConfig_) isPrivacyMetric_Type() {} +func (*PrivacyMetric_CategoricalStatsConfig_) isPrivacyMetric_Type() {} +func (*PrivacyMetric_KAnonymityConfig_) isPrivacyMetric_Type() {} +func (*PrivacyMetric_LDiversityConfig_) isPrivacyMetric_Type() {} + +func (m *PrivacyMetric) GetType() isPrivacyMetric_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *PrivacyMetric) GetNumericalStatsConfig() *PrivacyMetric_NumericalStatsConfig { + if x, ok := m.GetType().(*PrivacyMetric_NumericalStatsConfig_); ok { + return x.NumericalStatsConfig + } + return nil +} + +func (m *PrivacyMetric) GetCategoricalStatsConfig() *PrivacyMetric_CategoricalStatsConfig { + if x, ok := m.GetType().(*PrivacyMetric_CategoricalStatsConfig_); ok { + return x.CategoricalStatsConfig + } + return nil +} + +func (m *PrivacyMetric) GetKAnonymityConfig() *PrivacyMetric_KAnonymityConfig { + if x, ok := m.GetType().(*PrivacyMetric_KAnonymityConfig_); ok { + return x.KAnonymityConfig + } + return nil +} + +func (m *PrivacyMetric) GetLDiversityConfig() *PrivacyMetric_LDiversityConfig { + if x, ok := m.GetType().(*PrivacyMetric_LDiversityConfig_); ok { + return x.LDiversityConfig + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*PrivacyMetric) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _PrivacyMetric_OneofMarshaler, _PrivacyMetric_OneofUnmarshaler, _PrivacyMetric_OneofSizer, []interface{}{ + (*PrivacyMetric_NumericalStatsConfig_)(nil), + (*PrivacyMetric_CategoricalStatsConfig_)(nil), + (*PrivacyMetric_KAnonymityConfig_)(nil), + (*PrivacyMetric_LDiversityConfig_)(nil), + } +} + +func _PrivacyMetric_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*PrivacyMetric) + // type + switch x := m.Type.(type) { + case *PrivacyMetric_NumericalStatsConfig_: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.NumericalStatsConfig); err != nil { + return err + } + case *PrivacyMetric_CategoricalStatsConfig_: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.CategoricalStatsConfig); err != nil { + return err + } + case *PrivacyMetric_KAnonymityConfig_: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.KAnonymityConfig); err != nil { + return err + } + case *PrivacyMetric_LDiversityConfig_: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.LDiversityConfig); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("PrivacyMetric.Type has unexpected type %T", x) + } + return nil +} + +func _PrivacyMetric_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*PrivacyMetric) + switch tag { + case 1: // type.numerical_stats_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PrivacyMetric_NumericalStatsConfig) + err := b.DecodeMessage(msg) + m.Type = &PrivacyMetric_NumericalStatsConfig_{msg} + return true, err + case 2: // type.categorical_stats_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PrivacyMetric_CategoricalStatsConfig) + err := b.DecodeMessage(msg) + m.Type = &PrivacyMetric_CategoricalStatsConfig_{msg} + return true, err + case 3: // type.k_anonymity_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PrivacyMetric_KAnonymityConfig) + err := b.DecodeMessage(msg) + m.Type = &PrivacyMetric_KAnonymityConfig_{msg} + return true, err + case 4: // type.l_diversity_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PrivacyMetric_LDiversityConfig) + err := b.DecodeMessage(msg) + m.Type = &PrivacyMetric_LDiversityConfig_{msg} + return true, err + default: + return false, nil + } +} + +func _PrivacyMetric_OneofSizer(msg proto.Message) (n int) { + m := msg.(*PrivacyMetric) + // type + switch x := m.Type.(type) { + case *PrivacyMetric_NumericalStatsConfig_: + s := proto.Size(x.NumericalStatsConfig) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrivacyMetric_CategoricalStatsConfig_: + s := proto.Size(x.CategoricalStatsConfig) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrivacyMetric_KAnonymityConfig_: + s := proto.Size(x.KAnonymityConfig) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrivacyMetric_LDiversityConfig_: + s := proto.Size(x.LDiversityConfig) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Compute numerical stats over an individual column, including +// min, max, and quantiles. +type PrivacyMetric_NumericalStatsConfig struct { + // Field to compute numerical stats on. Supported types are + // integer, float, date, datetime, timestamp, time. + Field *FieldId `protobuf:"bytes,1,opt,name=field" json:"field,omitempty"` +} + +func (m *PrivacyMetric_NumericalStatsConfig) Reset() { *m = PrivacyMetric_NumericalStatsConfig{} } +func (m *PrivacyMetric_NumericalStatsConfig) String() string { return proto.CompactTextString(m) } +func (*PrivacyMetric_NumericalStatsConfig) ProtoMessage() {} +func (*PrivacyMetric_NumericalStatsConfig) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{31, 0} +} + +func (m *PrivacyMetric_NumericalStatsConfig) GetField() *FieldId { + if m != nil { + return m.Field + } + return nil +} + +// Compute numerical stats over an individual column, including +// number of distinct values and value count distribution. +type PrivacyMetric_CategoricalStatsConfig struct { + // Field to compute categorical stats on. All column types are + // supported except for arrays and structs. However, it may be more + // informative to use NumericalStats when the field type is supported, + // depending on the data. + Field *FieldId `protobuf:"bytes,1,opt,name=field" json:"field,omitempty"` +} + +func (m *PrivacyMetric_CategoricalStatsConfig) Reset() { *m = PrivacyMetric_CategoricalStatsConfig{} } +func (m *PrivacyMetric_CategoricalStatsConfig) String() string { return proto.CompactTextString(m) } +func (*PrivacyMetric_CategoricalStatsConfig) ProtoMessage() {} +func (*PrivacyMetric_CategoricalStatsConfig) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{31, 1} +} + +func (m *PrivacyMetric_CategoricalStatsConfig) GetField() *FieldId { + if m != nil { + return m.Field + } + return nil +} + +// k-anonymity metric, used for analysis of reidentification risk. +type PrivacyMetric_KAnonymityConfig struct { + // Set of fields to compute k-anonymity over. When multiple fields are + // specified, they are considered a single composite key. Structs and + // repeated data types are not supported; however, nested fields are + // supported so long as they are not structs themselves or nested within + // a repeated field. + QuasiIds []*FieldId `protobuf:"bytes,1,rep,name=quasi_ids,json=quasiIds" json:"quasi_ids,omitempty"` + // Optional message indicating that each distinct `EntityId` should not + // contribute to the k-anonymity count more than once per equivalence class. + EntityId *EntityId `protobuf:"bytes,2,opt,name=entity_id,json=entityId" json:"entity_id,omitempty"` +} + +func (m *PrivacyMetric_KAnonymityConfig) Reset() { *m = PrivacyMetric_KAnonymityConfig{} } +func (m *PrivacyMetric_KAnonymityConfig) String() string { return proto.CompactTextString(m) } +func (*PrivacyMetric_KAnonymityConfig) ProtoMessage() {} +func (*PrivacyMetric_KAnonymityConfig) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{31, 2} +} + +func (m *PrivacyMetric_KAnonymityConfig) GetQuasiIds() []*FieldId { + if m != nil { + return m.QuasiIds + } + return nil +} + +func (m *PrivacyMetric_KAnonymityConfig) GetEntityId() *EntityId { + if m != nil { + return m.EntityId + } + return nil +} + +// l-diversity metric, used for analysis of reidentification risk. +type PrivacyMetric_LDiversityConfig struct { + // Set of quasi-identifiers indicating how equivalence classes are + // defined for the l-diversity computation. When multiple fields are + // specified, they are considered a single composite key. + QuasiIds []*FieldId `protobuf:"bytes,1,rep,name=quasi_ids,json=quasiIds" json:"quasi_ids,omitempty"` + // Sensitive field for computing the l-value. + SensitiveAttribute *FieldId `protobuf:"bytes,2,opt,name=sensitive_attribute,json=sensitiveAttribute" json:"sensitive_attribute,omitempty"` +} + +func (m *PrivacyMetric_LDiversityConfig) Reset() { *m = PrivacyMetric_LDiversityConfig{} } +func (m *PrivacyMetric_LDiversityConfig) String() string { return proto.CompactTextString(m) } +func (*PrivacyMetric_LDiversityConfig) ProtoMessage() {} +func (*PrivacyMetric_LDiversityConfig) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{31, 3} +} + +func (m *PrivacyMetric_LDiversityConfig) GetQuasiIds() []*FieldId { + if m != nil { + return m.QuasiIds + } + return nil +} + +func (m *PrivacyMetric_LDiversityConfig) GetSensitiveAttribute() *FieldId { + if m != nil { + return m.SensitiveAttribute + } + return nil +} + +// Metadata returned within the +// [`riskAnalysis.operations.get`](/dlp/docs/reference/rest/v2beta1/riskAnalysis.operations/get) +// for risk analysis. +type RiskAnalysisOperationMetadata struct { + // The time which this request was started. + CreateTime *google_protobuf3.Timestamp `protobuf:"bytes,1,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // Privacy metric to compute. + RequestedPrivacyMetric *PrivacyMetric `protobuf:"bytes,2,opt,name=requested_privacy_metric,json=requestedPrivacyMetric" json:"requested_privacy_metric,omitempty"` + // Input dataset to compute metrics over. + RequestedSourceTable *BigQueryTable `protobuf:"bytes,3,opt,name=requested_source_table,json=requestedSourceTable" json:"requested_source_table,omitempty"` +} + +func (m *RiskAnalysisOperationMetadata) Reset() { *m = RiskAnalysisOperationMetadata{} } +func (m *RiskAnalysisOperationMetadata) String() string { return proto.CompactTextString(m) } +func (*RiskAnalysisOperationMetadata) ProtoMessage() {} +func (*RiskAnalysisOperationMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} } + +func (m *RiskAnalysisOperationMetadata) GetCreateTime() *google_protobuf3.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *RiskAnalysisOperationMetadata) GetRequestedPrivacyMetric() *PrivacyMetric { + if m != nil { + return m.RequestedPrivacyMetric + } + return nil +} + +func (m *RiskAnalysisOperationMetadata) GetRequestedSourceTable() *BigQueryTable { + if m != nil { + return m.RequestedSourceTable + } + return nil +} + +// Result of a risk analysis +// [`Operation`](/dlp/docs/reference/rest/v2beta1/inspect.operations) +// request. +type RiskAnalysisOperationResult struct { + // Values associated with this metric. + // + // Types that are valid to be assigned to Result: + // *RiskAnalysisOperationResult_NumericalStatsResult_ + // *RiskAnalysisOperationResult_CategoricalStatsResult_ + // *RiskAnalysisOperationResult_KAnonymityResult_ + // *RiskAnalysisOperationResult_LDiversityResult_ + Result isRiskAnalysisOperationResult_Result `protobuf_oneof:"result"` +} + +func (m *RiskAnalysisOperationResult) Reset() { *m = RiskAnalysisOperationResult{} } +func (m *RiskAnalysisOperationResult) String() string { return proto.CompactTextString(m) } +func (*RiskAnalysisOperationResult) ProtoMessage() {} +func (*RiskAnalysisOperationResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} } + +type isRiskAnalysisOperationResult_Result interface { + isRiskAnalysisOperationResult_Result() +} + +type RiskAnalysisOperationResult_NumericalStatsResult_ struct { + NumericalStatsResult *RiskAnalysisOperationResult_NumericalStatsResult `protobuf:"bytes,3,opt,name=numerical_stats_result,json=numericalStatsResult,oneof"` +} +type RiskAnalysisOperationResult_CategoricalStatsResult_ struct { + CategoricalStatsResult *RiskAnalysisOperationResult_CategoricalStatsResult `protobuf:"bytes,4,opt,name=categorical_stats_result,json=categoricalStatsResult,oneof"` +} +type RiskAnalysisOperationResult_KAnonymityResult_ struct { + KAnonymityResult *RiskAnalysisOperationResult_KAnonymityResult `protobuf:"bytes,5,opt,name=k_anonymity_result,json=kAnonymityResult,oneof"` +} +type RiskAnalysisOperationResult_LDiversityResult_ struct { + LDiversityResult *RiskAnalysisOperationResult_LDiversityResult `protobuf:"bytes,6,opt,name=l_diversity_result,json=lDiversityResult,oneof"` +} + +func (*RiskAnalysisOperationResult_NumericalStatsResult_) isRiskAnalysisOperationResult_Result() {} +func (*RiskAnalysisOperationResult_CategoricalStatsResult_) isRiskAnalysisOperationResult_Result() {} +func (*RiskAnalysisOperationResult_KAnonymityResult_) isRiskAnalysisOperationResult_Result() {} +func (*RiskAnalysisOperationResult_LDiversityResult_) isRiskAnalysisOperationResult_Result() {} + +func (m *RiskAnalysisOperationResult) GetResult() isRiskAnalysisOperationResult_Result { + if m != nil { + return m.Result + } + return nil +} + +func (m *RiskAnalysisOperationResult) GetNumericalStatsResult() *RiskAnalysisOperationResult_NumericalStatsResult { + if x, ok := m.GetResult().(*RiskAnalysisOperationResult_NumericalStatsResult_); ok { + return x.NumericalStatsResult + } + return nil +} + +func (m *RiskAnalysisOperationResult) GetCategoricalStatsResult() *RiskAnalysisOperationResult_CategoricalStatsResult { + if x, ok := m.GetResult().(*RiskAnalysisOperationResult_CategoricalStatsResult_); ok { + return x.CategoricalStatsResult + } + return nil +} + +func (m *RiskAnalysisOperationResult) GetKAnonymityResult() *RiskAnalysisOperationResult_KAnonymityResult { + if x, ok := m.GetResult().(*RiskAnalysisOperationResult_KAnonymityResult_); ok { + return x.KAnonymityResult + } + return nil +} + +func (m *RiskAnalysisOperationResult) GetLDiversityResult() *RiskAnalysisOperationResult_LDiversityResult { + if x, ok := m.GetResult().(*RiskAnalysisOperationResult_LDiversityResult_); ok { + return x.LDiversityResult + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*RiskAnalysisOperationResult) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _RiskAnalysisOperationResult_OneofMarshaler, _RiskAnalysisOperationResult_OneofUnmarshaler, _RiskAnalysisOperationResult_OneofSizer, []interface{}{ + (*RiskAnalysisOperationResult_NumericalStatsResult_)(nil), + (*RiskAnalysisOperationResult_CategoricalStatsResult_)(nil), + (*RiskAnalysisOperationResult_KAnonymityResult_)(nil), + (*RiskAnalysisOperationResult_LDiversityResult_)(nil), + } +} + +func _RiskAnalysisOperationResult_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*RiskAnalysisOperationResult) + // result + switch x := m.Result.(type) { + case *RiskAnalysisOperationResult_NumericalStatsResult_: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.NumericalStatsResult); err != nil { + return err + } + case *RiskAnalysisOperationResult_CategoricalStatsResult_: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.CategoricalStatsResult); err != nil { + return err + } + case *RiskAnalysisOperationResult_KAnonymityResult_: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.KAnonymityResult); err != nil { + return err + } + case *RiskAnalysisOperationResult_LDiversityResult_: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.LDiversityResult); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("RiskAnalysisOperationResult.Result has unexpected type %T", x) + } + return nil +} + +func _RiskAnalysisOperationResult_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*RiskAnalysisOperationResult) + switch tag { + case 3: // result.numerical_stats_result + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(RiskAnalysisOperationResult_NumericalStatsResult) + err := b.DecodeMessage(msg) + m.Result = &RiskAnalysisOperationResult_NumericalStatsResult_{msg} + return true, err + case 4: // result.categorical_stats_result + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(RiskAnalysisOperationResult_CategoricalStatsResult) + err := b.DecodeMessage(msg) + m.Result = &RiskAnalysisOperationResult_CategoricalStatsResult_{msg} + return true, err + case 5: // result.k_anonymity_result + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(RiskAnalysisOperationResult_KAnonymityResult) + err := b.DecodeMessage(msg) + m.Result = &RiskAnalysisOperationResult_KAnonymityResult_{msg} + return true, err + case 6: // result.l_diversity_result + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(RiskAnalysisOperationResult_LDiversityResult) + err := b.DecodeMessage(msg) + m.Result = &RiskAnalysisOperationResult_LDiversityResult_{msg} + return true, err + default: + return false, nil + } +} + +func _RiskAnalysisOperationResult_OneofSizer(msg proto.Message) (n int) { + m := msg.(*RiskAnalysisOperationResult) + // result + switch x := m.Result.(type) { + case *RiskAnalysisOperationResult_NumericalStatsResult_: + s := proto.Size(x.NumericalStatsResult) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *RiskAnalysisOperationResult_CategoricalStatsResult_: + s := proto.Size(x.CategoricalStatsResult) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *RiskAnalysisOperationResult_KAnonymityResult_: + s := proto.Size(x.KAnonymityResult) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *RiskAnalysisOperationResult_LDiversityResult_: + s := proto.Size(x.LDiversityResult) + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Result of the numerical stats computation. +type RiskAnalysisOperationResult_NumericalStatsResult struct { + // Minimum value appearing in the column. + MinValue *Value `protobuf:"bytes,1,opt,name=min_value,json=minValue" json:"min_value,omitempty"` + // Maximum value appearing in the column. + MaxValue *Value `protobuf:"bytes,2,opt,name=max_value,json=maxValue" json:"max_value,omitempty"` + // List of 99 values that partition the set of field values into 100 equal + // sized buckets. + QuantileValues []*Value `protobuf:"bytes,4,rep,name=quantile_values,json=quantileValues" json:"quantile_values,omitempty"` +} + +func (m *RiskAnalysisOperationResult_NumericalStatsResult) Reset() { + *m = RiskAnalysisOperationResult_NumericalStatsResult{} +} +func (m *RiskAnalysisOperationResult_NumericalStatsResult) String() string { + return proto.CompactTextString(m) +} +func (*RiskAnalysisOperationResult_NumericalStatsResult) ProtoMessage() {} +func (*RiskAnalysisOperationResult_NumericalStatsResult) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{33, 0} +} + +func (m *RiskAnalysisOperationResult_NumericalStatsResult) GetMinValue() *Value { + if m != nil { + return m.MinValue + } + return nil +} + +func (m *RiskAnalysisOperationResult_NumericalStatsResult) GetMaxValue() *Value { + if m != nil { + return m.MaxValue + } + return nil +} + +func (m *RiskAnalysisOperationResult_NumericalStatsResult) GetQuantileValues() []*Value { + if m != nil { + return m.QuantileValues + } + return nil +} + +// Result of the categorical stats computation. +type RiskAnalysisOperationResult_CategoricalStatsResult struct { + // Histogram of value frequencies in the column. + ValueFrequencyHistogramBuckets []*RiskAnalysisOperationResult_CategoricalStatsResult_CategoricalStatsHistogramBucket `protobuf:"bytes,5,rep,name=value_frequency_histogram_buckets,json=valueFrequencyHistogramBuckets" json:"value_frequency_histogram_buckets,omitempty"` +} + +func (m *RiskAnalysisOperationResult_CategoricalStatsResult) Reset() { + *m = RiskAnalysisOperationResult_CategoricalStatsResult{} +} +func (m *RiskAnalysisOperationResult_CategoricalStatsResult) String() string { + return proto.CompactTextString(m) +} +func (*RiskAnalysisOperationResult_CategoricalStatsResult) ProtoMessage() {} +func (*RiskAnalysisOperationResult_CategoricalStatsResult) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{33, 1} +} + +func (m *RiskAnalysisOperationResult_CategoricalStatsResult) GetValueFrequencyHistogramBuckets() []*RiskAnalysisOperationResult_CategoricalStatsResult_CategoricalStatsHistogramBucket { + if m != nil { + return m.ValueFrequencyHistogramBuckets + } + return nil +} + +// Histogram bucket of value frequencies in the column. +type RiskAnalysisOperationResult_CategoricalStatsResult_CategoricalStatsHistogramBucket struct { + // Lower bound on the value frequency of the values in this bucket. + ValueFrequencyLowerBound int64 `protobuf:"varint,1,opt,name=value_frequency_lower_bound,json=valueFrequencyLowerBound" json:"value_frequency_lower_bound,omitempty"` + // Upper bound on the value frequency of the values in this bucket. + ValueFrequencyUpperBound int64 `protobuf:"varint,2,opt,name=value_frequency_upper_bound,json=valueFrequencyUpperBound" json:"value_frequency_upper_bound,omitempty"` + // Total number of records in this bucket. + BucketSize int64 `protobuf:"varint,3,opt,name=bucket_size,json=bucketSize" json:"bucket_size,omitempty"` + // Sample of value frequencies in this bucket. The total number of + // values returned per bucket is capped at 20. + BucketValues []*ValueFrequency `protobuf:"bytes,4,rep,name=bucket_values,json=bucketValues" json:"bucket_values,omitempty"` +} + +func (m *RiskAnalysisOperationResult_CategoricalStatsResult_CategoricalStatsHistogramBucket) Reset() { + *m = RiskAnalysisOperationResult_CategoricalStatsResult_CategoricalStatsHistogramBucket{} +} +func (m *RiskAnalysisOperationResult_CategoricalStatsResult_CategoricalStatsHistogramBucket) String() string { + return proto.CompactTextString(m) +} +func (*RiskAnalysisOperationResult_CategoricalStatsResult_CategoricalStatsHistogramBucket) ProtoMessage() { +} +func (*RiskAnalysisOperationResult_CategoricalStatsResult_CategoricalStatsHistogramBucket) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{33, 1, 0} +} + +func (m *RiskAnalysisOperationResult_CategoricalStatsResult_CategoricalStatsHistogramBucket) GetValueFrequencyLowerBound() int64 { + if m != nil { + return m.ValueFrequencyLowerBound + } + return 0 +} + +func (m *RiskAnalysisOperationResult_CategoricalStatsResult_CategoricalStatsHistogramBucket) GetValueFrequencyUpperBound() int64 { + if m != nil { + return m.ValueFrequencyUpperBound + } + return 0 +} + +func (m *RiskAnalysisOperationResult_CategoricalStatsResult_CategoricalStatsHistogramBucket) GetBucketSize() int64 { + if m != nil { + return m.BucketSize + } + return 0 +} + +func (m *RiskAnalysisOperationResult_CategoricalStatsResult_CategoricalStatsHistogramBucket) GetBucketValues() []*ValueFrequency { + if m != nil { + return m.BucketValues + } + return nil +} + +// Result of the k-anonymity computation. +type RiskAnalysisOperationResult_KAnonymityResult struct { + // Histogram of k-anonymity equivalence classes. + EquivalenceClassHistogramBuckets []*RiskAnalysisOperationResult_KAnonymityResult_KAnonymityHistogramBucket `protobuf:"bytes,5,rep,name=equivalence_class_histogram_buckets,json=equivalenceClassHistogramBuckets" json:"equivalence_class_histogram_buckets,omitempty"` +} + +func (m *RiskAnalysisOperationResult_KAnonymityResult) Reset() { + *m = RiskAnalysisOperationResult_KAnonymityResult{} +} +func (m *RiskAnalysisOperationResult_KAnonymityResult) String() string { + return proto.CompactTextString(m) +} +func (*RiskAnalysisOperationResult_KAnonymityResult) ProtoMessage() {} +func (*RiskAnalysisOperationResult_KAnonymityResult) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{33, 2} +} + +func (m *RiskAnalysisOperationResult_KAnonymityResult) GetEquivalenceClassHistogramBuckets() []*RiskAnalysisOperationResult_KAnonymityResult_KAnonymityHistogramBucket { + if m != nil { + return m.EquivalenceClassHistogramBuckets + } + return nil +} + +// The set of columns' values that share the same k-anonymity value. +type RiskAnalysisOperationResult_KAnonymityResult_KAnonymityEquivalenceClass struct { + // Set of values defining the equivalence class. One value per + // quasi-identifier column in the original KAnonymity metric message. + // The order is always the same as the original request. + QuasiIdsValues []*Value `protobuf:"bytes,1,rep,name=quasi_ids_values,json=quasiIdsValues" json:"quasi_ids_values,omitempty"` + // Size of the equivalence class, for example number of rows with the + // above set of values. + EquivalenceClassSize int64 `protobuf:"varint,2,opt,name=equivalence_class_size,json=equivalenceClassSize" json:"equivalence_class_size,omitempty"` +} + +func (m *RiskAnalysisOperationResult_KAnonymityResult_KAnonymityEquivalenceClass) Reset() { + *m = RiskAnalysisOperationResult_KAnonymityResult_KAnonymityEquivalenceClass{} +} +func (m *RiskAnalysisOperationResult_KAnonymityResult_KAnonymityEquivalenceClass) String() string { + return proto.CompactTextString(m) +} +func (*RiskAnalysisOperationResult_KAnonymityResult_KAnonymityEquivalenceClass) ProtoMessage() {} +func (*RiskAnalysisOperationResult_KAnonymityResult_KAnonymityEquivalenceClass) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{33, 2, 0} +} + +func (m *RiskAnalysisOperationResult_KAnonymityResult_KAnonymityEquivalenceClass) GetQuasiIdsValues() []*Value { + if m != nil { + return m.QuasiIdsValues + } + return nil +} + +func (m *RiskAnalysisOperationResult_KAnonymityResult_KAnonymityEquivalenceClass) GetEquivalenceClassSize() int64 { + if m != nil { + return m.EquivalenceClassSize + } + return 0 +} + +// Histogram bucket of equivalence class sizes in the table. +type RiskAnalysisOperationResult_KAnonymityResult_KAnonymityHistogramBucket struct { + // Lower bound on the size of the equivalence classes in this bucket. + EquivalenceClassSizeLowerBound int64 `protobuf:"varint,1,opt,name=equivalence_class_size_lower_bound,json=equivalenceClassSizeLowerBound" json:"equivalence_class_size_lower_bound,omitempty"` + // Upper bound on the size of the equivalence classes in this bucket. + EquivalenceClassSizeUpperBound int64 `protobuf:"varint,2,opt,name=equivalence_class_size_upper_bound,json=equivalenceClassSizeUpperBound" json:"equivalence_class_size_upper_bound,omitempty"` + // Total number of records in this bucket. + BucketSize int64 `protobuf:"varint,3,opt,name=bucket_size,json=bucketSize" json:"bucket_size,omitempty"` + // Sample of equivalence classes in this bucket. The total number of + // classes returned per bucket is capped at 20. + BucketValues []*RiskAnalysisOperationResult_KAnonymityResult_KAnonymityEquivalenceClass `protobuf:"bytes,4,rep,name=bucket_values,json=bucketValues" json:"bucket_values,omitempty"` +} + +func (m *RiskAnalysisOperationResult_KAnonymityResult_KAnonymityHistogramBucket) Reset() { + *m = RiskAnalysisOperationResult_KAnonymityResult_KAnonymityHistogramBucket{} +} +func (m *RiskAnalysisOperationResult_KAnonymityResult_KAnonymityHistogramBucket) String() string { + return proto.CompactTextString(m) +} +func (*RiskAnalysisOperationResult_KAnonymityResult_KAnonymityHistogramBucket) ProtoMessage() {} +func (*RiskAnalysisOperationResult_KAnonymityResult_KAnonymityHistogramBucket) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{33, 2, 1} +} + +func (m *RiskAnalysisOperationResult_KAnonymityResult_KAnonymityHistogramBucket) GetEquivalenceClassSizeLowerBound() int64 { + if m != nil { + return m.EquivalenceClassSizeLowerBound + } + return 0 +} + +func (m *RiskAnalysisOperationResult_KAnonymityResult_KAnonymityHistogramBucket) GetEquivalenceClassSizeUpperBound() int64 { + if m != nil { + return m.EquivalenceClassSizeUpperBound + } + return 0 +} + +func (m *RiskAnalysisOperationResult_KAnonymityResult_KAnonymityHistogramBucket) GetBucketSize() int64 { + if m != nil { + return m.BucketSize + } + return 0 +} + +func (m *RiskAnalysisOperationResult_KAnonymityResult_KAnonymityHistogramBucket) GetBucketValues() []*RiskAnalysisOperationResult_KAnonymityResult_KAnonymityEquivalenceClass { + if m != nil { + return m.BucketValues + } + return nil +} + +// Result of the l-diversity computation. +type RiskAnalysisOperationResult_LDiversityResult struct { + // Histogram of l-diversity equivalence class sensitive value frequencies. + SensitiveValueFrequencyHistogramBuckets []*RiskAnalysisOperationResult_LDiversityResult_LDiversityHistogramBucket `protobuf:"bytes,5,rep,name=sensitive_value_frequency_histogram_buckets,json=sensitiveValueFrequencyHistogramBuckets" json:"sensitive_value_frequency_histogram_buckets,omitempty"` +} + +func (m *RiskAnalysisOperationResult_LDiversityResult) Reset() { + *m = RiskAnalysisOperationResult_LDiversityResult{} +} +func (m *RiskAnalysisOperationResult_LDiversityResult) String() string { + return proto.CompactTextString(m) +} +func (*RiskAnalysisOperationResult_LDiversityResult) ProtoMessage() {} +func (*RiskAnalysisOperationResult_LDiversityResult) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{33, 3} +} + +func (m *RiskAnalysisOperationResult_LDiversityResult) GetSensitiveValueFrequencyHistogramBuckets() []*RiskAnalysisOperationResult_LDiversityResult_LDiversityHistogramBucket { + if m != nil { + return m.SensitiveValueFrequencyHistogramBuckets + } + return nil +} + +// The set of columns' values that share the same l-diversity value. +type RiskAnalysisOperationResult_LDiversityResult_LDiversityEquivalenceClass struct { + // Quasi-identifier values defining the k-anonymity equivalence + // class. The order is always the same as the original request. + QuasiIdsValues []*Value `protobuf:"bytes,1,rep,name=quasi_ids_values,json=quasiIdsValues" json:"quasi_ids_values,omitempty"` + // Size of the k-anonymity equivalence class. + EquivalenceClassSize int64 `protobuf:"varint,2,opt,name=equivalence_class_size,json=equivalenceClassSize" json:"equivalence_class_size,omitempty"` + // Number of distinct sensitive values in this equivalence class. + NumDistinctSensitiveValues int64 `protobuf:"varint,3,opt,name=num_distinct_sensitive_values,json=numDistinctSensitiveValues" json:"num_distinct_sensitive_values,omitempty"` + // Estimated frequencies of top sensitive values. + TopSensitiveValues []*ValueFrequency `protobuf:"bytes,4,rep,name=top_sensitive_values,json=topSensitiveValues" json:"top_sensitive_values,omitempty"` +} + +func (m *RiskAnalysisOperationResult_LDiversityResult_LDiversityEquivalenceClass) Reset() { + *m = RiskAnalysisOperationResult_LDiversityResult_LDiversityEquivalenceClass{} +} +func (m *RiskAnalysisOperationResult_LDiversityResult_LDiversityEquivalenceClass) String() string { + return proto.CompactTextString(m) +} +func (*RiskAnalysisOperationResult_LDiversityResult_LDiversityEquivalenceClass) ProtoMessage() {} +func (*RiskAnalysisOperationResult_LDiversityResult_LDiversityEquivalenceClass) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{33, 3, 0} +} + +func (m *RiskAnalysisOperationResult_LDiversityResult_LDiversityEquivalenceClass) GetQuasiIdsValues() []*Value { + if m != nil { + return m.QuasiIdsValues + } + return nil +} + +func (m *RiskAnalysisOperationResult_LDiversityResult_LDiversityEquivalenceClass) GetEquivalenceClassSize() int64 { + if m != nil { + return m.EquivalenceClassSize + } + return 0 +} + +func (m *RiskAnalysisOperationResult_LDiversityResult_LDiversityEquivalenceClass) GetNumDistinctSensitiveValues() int64 { + if m != nil { + return m.NumDistinctSensitiveValues + } + return 0 +} + +func (m *RiskAnalysisOperationResult_LDiversityResult_LDiversityEquivalenceClass) GetTopSensitiveValues() []*ValueFrequency { + if m != nil { + return m.TopSensitiveValues + } + return nil +} + +// Histogram bucket of sensitive value frequencies in the table. +type RiskAnalysisOperationResult_LDiversityResult_LDiversityHistogramBucket struct { + // Lower bound on the sensitive value frequencies of the equivalence + // classes in this bucket. + SensitiveValueFrequencyLowerBound int64 `protobuf:"varint,1,opt,name=sensitive_value_frequency_lower_bound,json=sensitiveValueFrequencyLowerBound" json:"sensitive_value_frequency_lower_bound,omitempty"` + // Upper bound on the sensitive value frequencies of the equivalence + // classes in this bucket. + SensitiveValueFrequencyUpperBound int64 `protobuf:"varint,2,opt,name=sensitive_value_frequency_upper_bound,json=sensitiveValueFrequencyUpperBound" json:"sensitive_value_frequency_upper_bound,omitempty"` + // Total number of records in this bucket. + BucketSize int64 `protobuf:"varint,3,opt,name=bucket_size,json=bucketSize" json:"bucket_size,omitempty"` + // Sample of equivalence classes in this bucket. The total number of + // classes returned per bucket is capped at 20. + BucketValues []*RiskAnalysisOperationResult_LDiversityResult_LDiversityEquivalenceClass `protobuf:"bytes,4,rep,name=bucket_values,json=bucketValues" json:"bucket_values,omitempty"` +} + +func (m *RiskAnalysisOperationResult_LDiversityResult_LDiversityHistogramBucket) Reset() { + *m = RiskAnalysisOperationResult_LDiversityResult_LDiversityHistogramBucket{} +} +func (m *RiskAnalysisOperationResult_LDiversityResult_LDiversityHistogramBucket) String() string { + return proto.CompactTextString(m) +} +func (*RiskAnalysisOperationResult_LDiversityResult_LDiversityHistogramBucket) ProtoMessage() {} +func (*RiskAnalysisOperationResult_LDiversityResult_LDiversityHistogramBucket) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{33, 3, 1} +} + +func (m *RiskAnalysisOperationResult_LDiversityResult_LDiversityHistogramBucket) GetSensitiveValueFrequencyLowerBound() int64 { + if m != nil { + return m.SensitiveValueFrequencyLowerBound + } + return 0 +} + +func (m *RiskAnalysisOperationResult_LDiversityResult_LDiversityHistogramBucket) GetSensitiveValueFrequencyUpperBound() int64 { + if m != nil { + return m.SensitiveValueFrequencyUpperBound + } + return 0 +} + +func (m *RiskAnalysisOperationResult_LDiversityResult_LDiversityHistogramBucket) GetBucketSize() int64 { + if m != nil { + return m.BucketSize + } + return 0 +} + +func (m *RiskAnalysisOperationResult_LDiversityResult_LDiversityHistogramBucket) GetBucketValues() []*RiskAnalysisOperationResult_LDiversityResult_LDiversityEquivalenceClass { + if m != nil { + return m.BucketValues + } + return nil +} + +// A value of a field, including its frequency. +type ValueFrequency struct { + // A value contained in the field in question. + Value *Value `protobuf:"bytes,1,opt,name=value" json:"value,omitempty"` + // How many times the value is contained in the field. + Count int64 `protobuf:"varint,2,opt,name=count" json:"count,omitempty"` +} + +func (m *ValueFrequency) Reset() { *m = ValueFrequency{} } +func (m *ValueFrequency) String() string { return proto.CompactTextString(m) } +func (*ValueFrequency) ProtoMessage() {} +func (*ValueFrequency) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} } + +func (m *ValueFrequency) GetValue() *Value { + if m != nil { + return m.Value + } + return nil +} + +func (m *ValueFrequency) GetCount() int64 { + if m != nil { + return m.Count + } + return 0 +} + +// Set of primitive values supported by the system. +type Value struct { + // Types that are valid to be assigned to Type: + // *Value_IntegerValue + // *Value_FloatValue + // *Value_StringValue + // *Value_BooleanValue + // *Value_TimestampValue + // *Value_TimeValue + // *Value_DateValue + Type isValue_Type `protobuf_oneof:"type"` +} + +func (m *Value) Reset() { *m = Value{} } +func (m *Value) String() string { return proto.CompactTextString(m) } +func (*Value) ProtoMessage() {} +func (*Value) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} } + +type isValue_Type interface { + isValue_Type() +} + +type Value_IntegerValue struct { + IntegerValue int64 `protobuf:"varint,1,opt,name=integer_value,json=integerValue,oneof"` +} +type Value_FloatValue struct { + FloatValue float64 `protobuf:"fixed64,2,opt,name=float_value,json=floatValue,oneof"` +} +type Value_StringValue struct { + StringValue string `protobuf:"bytes,3,opt,name=string_value,json=stringValue,oneof"` +} +type Value_BooleanValue struct { + BooleanValue bool `protobuf:"varint,4,opt,name=boolean_value,json=booleanValue,oneof"` +} +type Value_TimestampValue struct { + TimestampValue *google_protobuf3.Timestamp `protobuf:"bytes,5,opt,name=timestamp_value,json=timestampValue,oneof"` +} +type Value_TimeValue struct { + TimeValue *google_type1.TimeOfDay `protobuf:"bytes,6,opt,name=time_value,json=timeValue,oneof"` +} +type Value_DateValue struct { + DateValue *google_type.Date `protobuf:"bytes,7,opt,name=date_value,json=dateValue,oneof"` +} + +func (*Value_IntegerValue) isValue_Type() {} +func (*Value_FloatValue) isValue_Type() {} +func (*Value_StringValue) isValue_Type() {} +func (*Value_BooleanValue) isValue_Type() {} +func (*Value_TimestampValue) isValue_Type() {} +func (*Value_TimeValue) isValue_Type() {} +func (*Value_DateValue) isValue_Type() {} + +func (m *Value) GetType() isValue_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *Value) GetIntegerValue() int64 { + if x, ok := m.GetType().(*Value_IntegerValue); ok { + return x.IntegerValue + } + return 0 +} + +func (m *Value) GetFloatValue() float64 { + if x, ok := m.GetType().(*Value_FloatValue); ok { + return x.FloatValue + } + return 0 +} + +func (m *Value) GetStringValue() string { + if x, ok := m.GetType().(*Value_StringValue); ok { + return x.StringValue + } + return "" +} + +func (m *Value) GetBooleanValue() bool { + if x, ok := m.GetType().(*Value_BooleanValue); ok { + return x.BooleanValue + } + return false +} + +func (m *Value) GetTimestampValue() *google_protobuf3.Timestamp { + if x, ok := m.GetType().(*Value_TimestampValue); ok { + return x.TimestampValue + } + return nil +} + +func (m *Value) GetTimeValue() *google_type1.TimeOfDay { + if x, ok := m.GetType().(*Value_TimeValue); ok { + return x.TimeValue + } + return nil +} + +func (m *Value) GetDateValue() *google_type.Date { + if x, ok := m.GetType().(*Value_DateValue); ok { + return x.DateValue + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Value) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Value_OneofMarshaler, _Value_OneofUnmarshaler, _Value_OneofSizer, []interface{}{ + (*Value_IntegerValue)(nil), + (*Value_FloatValue)(nil), + (*Value_StringValue)(nil), + (*Value_BooleanValue)(nil), + (*Value_TimestampValue)(nil), + (*Value_TimeValue)(nil), + (*Value_DateValue)(nil), + } +} + +func _Value_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Value) + // type + switch x := m.Type.(type) { + case *Value_IntegerValue: + b.EncodeVarint(1<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.IntegerValue)) + case *Value_FloatValue: + b.EncodeVarint(2<<3 | proto.WireFixed64) + b.EncodeFixed64(math.Float64bits(x.FloatValue)) + case *Value_StringValue: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeStringBytes(x.StringValue) + case *Value_BooleanValue: + t := uint64(0) + if x.BooleanValue { + t = 1 + } + b.EncodeVarint(4<<3 | proto.WireVarint) + b.EncodeVarint(t) + case *Value_TimestampValue: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.TimestampValue); err != nil { + return err + } + case *Value_TimeValue: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.TimeValue); err != nil { + return err + } + case *Value_DateValue: + b.EncodeVarint(7<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DateValue); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Value.Type has unexpected type %T", x) + } + return nil +} + +func _Value_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Value) + switch tag { + case 1: // type.integer_value + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Type = &Value_IntegerValue{int64(x)} + return true, err + case 2: // type.float_value + if wire != proto.WireFixed64 { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeFixed64() + m.Type = &Value_FloatValue{math.Float64frombits(x)} + return true, err + case 3: // type.string_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Type = &Value_StringValue{x} + return true, err + case 4: // type.boolean_value + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Type = &Value_BooleanValue{x != 0} + return true, err + case 5: // type.timestamp_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf3.Timestamp) + err := b.DecodeMessage(msg) + m.Type = &Value_TimestampValue{msg} + return true, err + case 6: // type.time_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_type1.TimeOfDay) + err := b.DecodeMessage(msg) + m.Type = &Value_TimeValue{msg} + return true, err + case 7: // type.date_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_type.Date) + err := b.DecodeMessage(msg) + m.Type = &Value_DateValue{msg} + return true, err + default: + return false, nil + } +} + +func _Value_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Value) + // type + switch x := m.Type.(type) { + case *Value_IntegerValue: + n += proto.SizeVarint(1<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.IntegerValue)) + case *Value_FloatValue: + n += proto.SizeVarint(2<<3 | proto.WireFixed64) + n += 8 + case *Value_StringValue: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.StringValue))) + n += len(x.StringValue) + case *Value_BooleanValue: + n += proto.SizeVarint(4<<3 | proto.WireVarint) + n += 1 + case *Value_TimestampValue: + s := proto.Size(x.TimestampValue) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Value_TimeValue: + s := proto.Size(x.TimeValue) + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Value_DateValue: + s := proto.Size(x.DateValue) + n += proto.SizeVarint(7<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The configuration that controls how the data will change. +type DeidentifyConfig struct { + // Types that are valid to be assigned to Transformation: + // *DeidentifyConfig_InfoTypeTransformations + // *DeidentifyConfig_RecordTransformations + Transformation isDeidentifyConfig_Transformation `protobuf_oneof:"transformation"` +} + +func (m *DeidentifyConfig) Reset() { *m = DeidentifyConfig{} } +func (m *DeidentifyConfig) String() string { return proto.CompactTextString(m) } +func (*DeidentifyConfig) ProtoMessage() {} +func (*DeidentifyConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} } + +type isDeidentifyConfig_Transformation interface { + isDeidentifyConfig_Transformation() +} + +type DeidentifyConfig_InfoTypeTransformations struct { + InfoTypeTransformations *InfoTypeTransformations `protobuf:"bytes,1,opt,name=info_type_transformations,json=infoTypeTransformations,oneof"` +} +type DeidentifyConfig_RecordTransformations struct { + RecordTransformations *RecordTransformations `protobuf:"bytes,2,opt,name=record_transformations,json=recordTransformations,oneof"` +} + +func (*DeidentifyConfig_InfoTypeTransformations) isDeidentifyConfig_Transformation() {} +func (*DeidentifyConfig_RecordTransformations) isDeidentifyConfig_Transformation() {} + +func (m *DeidentifyConfig) GetTransformation() isDeidentifyConfig_Transformation { + if m != nil { + return m.Transformation + } + return nil +} + +func (m *DeidentifyConfig) GetInfoTypeTransformations() *InfoTypeTransformations { + if x, ok := m.GetTransformation().(*DeidentifyConfig_InfoTypeTransformations); ok { + return x.InfoTypeTransformations + } + return nil +} + +func (m *DeidentifyConfig) GetRecordTransformations() *RecordTransformations { + if x, ok := m.GetTransformation().(*DeidentifyConfig_RecordTransformations); ok { + return x.RecordTransformations + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*DeidentifyConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _DeidentifyConfig_OneofMarshaler, _DeidentifyConfig_OneofUnmarshaler, _DeidentifyConfig_OneofSizer, []interface{}{ + (*DeidentifyConfig_InfoTypeTransformations)(nil), + (*DeidentifyConfig_RecordTransformations)(nil), + } +} + +func _DeidentifyConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*DeidentifyConfig) + // transformation + switch x := m.Transformation.(type) { + case *DeidentifyConfig_InfoTypeTransformations: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.InfoTypeTransformations); err != nil { + return err + } + case *DeidentifyConfig_RecordTransformations: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RecordTransformations); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("DeidentifyConfig.Transformation has unexpected type %T", x) + } + return nil +} + +func _DeidentifyConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*DeidentifyConfig) + switch tag { + case 1: // transformation.info_type_transformations + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(InfoTypeTransformations) + err := b.DecodeMessage(msg) + m.Transformation = &DeidentifyConfig_InfoTypeTransformations{msg} + return true, err + case 2: // transformation.record_transformations + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(RecordTransformations) + err := b.DecodeMessage(msg) + m.Transformation = &DeidentifyConfig_RecordTransformations{msg} + return true, err + default: + return false, nil + } +} + +func _DeidentifyConfig_OneofSizer(msg proto.Message) (n int) { + m := msg.(*DeidentifyConfig) + // transformation + switch x := m.Transformation.(type) { + case *DeidentifyConfig_InfoTypeTransformations: + s := proto.Size(x.InfoTypeTransformations) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *DeidentifyConfig_RecordTransformations: + s := proto.Size(x.RecordTransformations) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A rule for transforming a value. +type PrimitiveTransformation struct { + // Types that are valid to be assigned to Transformation: + // *PrimitiveTransformation_ReplaceConfig + // *PrimitiveTransformation_RedactConfig + // *PrimitiveTransformation_CharacterMaskConfig + // *PrimitiveTransformation_CryptoReplaceFfxFpeConfig + // *PrimitiveTransformation_FixedSizeBucketingConfig + // *PrimitiveTransformation_BucketingConfig + // *PrimitiveTransformation_ReplaceWithInfoTypeConfig + // *PrimitiveTransformation_TimePartConfig + // *PrimitiveTransformation_CryptoHashConfig + Transformation isPrimitiveTransformation_Transformation `protobuf_oneof:"transformation"` +} + +func (m *PrimitiveTransformation) Reset() { *m = PrimitiveTransformation{} } +func (m *PrimitiveTransformation) String() string { return proto.CompactTextString(m) } +func (*PrimitiveTransformation) ProtoMessage() {} +func (*PrimitiveTransformation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} } + +type isPrimitiveTransformation_Transformation interface { + isPrimitiveTransformation_Transformation() +} + +type PrimitiveTransformation_ReplaceConfig struct { + ReplaceConfig *ReplaceValueConfig `protobuf:"bytes,1,opt,name=replace_config,json=replaceConfig,oneof"` +} +type PrimitiveTransformation_RedactConfig struct { + RedactConfig *RedactConfig `protobuf:"bytes,2,opt,name=redact_config,json=redactConfig,oneof"` +} +type PrimitiveTransformation_CharacterMaskConfig struct { + CharacterMaskConfig *CharacterMaskConfig `protobuf:"bytes,3,opt,name=character_mask_config,json=characterMaskConfig,oneof"` +} +type PrimitiveTransformation_CryptoReplaceFfxFpeConfig struct { + CryptoReplaceFfxFpeConfig *CryptoReplaceFfxFpeConfig `protobuf:"bytes,4,opt,name=crypto_replace_ffx_fpe_config,json=cryptoReplaceFfxFpeConfig,oneof"` +} +type PrimitiveTransformation_FixedSizeBucketingConfig struct { + FixedSizeBucketingConfig *FixedSizeBucketingConfig `protobuf:"bytes,5,opt,name=fixed_size_bucketing_config,json=fixedSizeBucketingConfig,oneof"` +} +type PrimitiveTransformation_BucketingConfig struct { + BucketingConfig *BucketingConfig `protobuf:"bytes,6,opt,name=bucketing_config,json=bucketingConfig,oneof"` +} +type PrimitiveTransformation_ReplaceWithInfoTypeConfig struct { + ReplaceWithInfoTypeConfig *ReplaceWithInfoTypeConfig `protobuf:"bytes,7,opt,name=replace_with_info_type_config,json=replaceWithInfoTypeConfig,oneof"` +} +type PrimitiveTransformation_TimePartConfig struct { + TimePartConfig *TimePartConfig `protobuf:"bytes,8,opt,name=time_part_config,json=timePartConfig,oneof"` +} +type PrimitiveTransformation_CryptoHashConfig struct { + CryptoHashConfig *CryptoHashConfig `protobuf:"bytes,9,opt,name=crypto_hash_config,json=cryptoHashConfig,oneof"` +} + +func (*PrimitiveTransformation_ReplaceConfig) isPrimitiveTransformation_Transformation() {} +func (*PrimitiveTransformation_RedactConfig) isPrimitiveTransformation_Transformation() {} +func (*PrimitiveTransformation_CharacterMaskConfig) isPrimitiveTransformation_Transformation() {} +func (*PrimitiveTransformation_CryptoReplaceFfxFpeConfig) isPrimitiveTransformation_Transformation() {} +func (*PrimitiveTransformation_FixedSizeBucketingConfig) isPrimitiveTransformation_Transformation() {} +func (*PrimitiveTransformation_BucketingConfig) isPrimitiveTransformation_Transformation() {} +func (*PrimitiveTransformation_ReplaceWithInfoTypeConfig) isPrimitiveTransformation_Transformation() {} +func (*PrimitiveTransformation_TimePartConfig) isPrimitiveTransformation_Transformation() {} +func (*PrimitiveTransformation_CryptoHashConfig) isPrimitiveTransformation_Transformation() {} + +func (m *PrimitiveTransformation) GetTransformation() isPrimitiveTransformation_Transformation { + if m != nil { + return m.Transformation + } + return nil +} + +func (m *PrimitiveTransformation) GetReplaceConfig() *ReplaceValueConfig { + if x, ok := m.GetTransformation().(*PrimitiveTransformation_ReplaceConfig); ok { + return x.ReplaceConfig + } + return nil +} + +func (m *PrimitiveTransformation) GetRedactConfig() *RedactConfig { + if x, ok := m.GetTransformation().(*PrimitiveTransformation_RedactConfig); ok { + return x.RedactConfig + } + return nil +} + +func (m *PrimitiveTransformation) GetCharacterMaskConfig() *CharacterMaskConfig { + if x, ok := m.GetTransformation().(*PrimitiveTransformation_CharacterMaskConfig); ok { + return x.CharacterMaskConfig + } + return nil +} + +func (m *PrimitiveTransformation) GetCryptoReplaceFfxFpeConfig() *CryptoReplaceFfxFpeConfig { + if x, ok := m.GetTransformation().(*PrimitiveTransformation_CryptoReplaceFfxFpeConfig); ok { + return x.CryptoReplaceFfxFpeConfig + } + return nil +} + +func (m *PrimitiveTransformation) GetFixedSizeBucketingConfig() *FixedSizeBucketingConfig { + if x, ok := m.GetTransformation().(*PrimitiveTransformation_FixedSizeBucketingConfig); ok { + return x.FixedSizeBucketingConfig + } + return nil +} + +func (m *PrimitiveTransformation) GetBucketingConfig() *BucketingConfig { + if x, ok := m.GetTransformation().(*PrimitiveTransformation_BucketingConfig); ok { + return x.BucketingConfig + } + return nil +} + +func (m *PrimitiveTransformation) GetReplaceWithInfoTypeConfig() *ReplaceWithInfoTypeConfig { + if x, ok := m.GetTransformation().(*PrimitiveTransformation_ReplaceWithInfoTypeConfig); ok { + return x.ReplaceWithInfoTypeConfig + } + return nil +} + +func (m *PrimitiveTransformation) GetTimePartConfig() *TimePartConfig { + if x, ok := m.GetTransformation().(*PrimitiveTransformation_TimePartConfig); ok { + return x.TimePartConfig + } + return nil +} + +func (m *PrimitiveTransformation) GetCryptoHashConfig() *CryptoHashConfig { + if x, ok := m.GetTransformation().(*PrimitiveTransformation_CryptoHashConfig); ok { + return x.CryptoHashConfig + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*PrimitiveTransformation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _PrimitiveTransformation_OneofMarshaler, _PrimitiveTransformation_OneofUnmarshaler, _PrimitiveTransformation_OneofSizer, []interface{}{ + (*PrimitiveTransformation_ReplaceConfig)(nil), + (*PrimitiveTransformation_RedactConfig)(nil), + (*PrimitiveTransformation_CharacterMaskConfig)(nil), + (*PrimitiveTransformation_CryptoReplaceFfxFpeConfig)(nil), + (*PrimitiveTransformation_FixedSizeBucketingConfig)(nil), + (*PrimitiveTransformation_BucketingConfig)(nil), + (*PrimitiveTransformation_ReplaceWithInfoTypeConfig)(nil), + (*PrimitiveTransformation_TimePartConfig)(nil), + (*PrimitiveTransformation_CryptoHashConfig)(nil), + } +} + +func _PrimitiveTransformation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*PrimitiveTransformation) + // transformation + switch x := m.Transformation.(type) { + case *PrimitiveTransformation_ReplaceConfig: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ReplaceConfig); err != nil { + return err + } + case *PrimitiveTransformation_RedactConfig: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RedactConfig); err != nil { + return err + } + case *PrimitiveTransformation_CharacterMaskConfig: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.CharacterMaskConfig); err != nil { + return err + } + case *PrimitiveTransformation_CryptoReplaceFfxFpeConfig: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.CryptoReplaceFfxFpeConfig); err != nil { + return err + } + case *PrimitiveTransformation_FixedSizeBucketingConfig: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.FixedSizeBucketingConfig); err != nil { + return err + } + case *PrimitiveTransformation_BucketingConfig: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.BucketingConfig); err != nil { + return err + } + case *PrimitiveTransformation_ReplaceWithInfoTypeConfig: + b.EncodeVarint(7<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ReplaceWithInfoTypeConfig); err != nil { + return err + } + case *PrimitiveTransformation_TimePartConfig: + b.EncodeVarint(8<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.TimePartConfig); err != nil { + return err + } + case *PrimitiveTransformation_CryptoHashConfig: + b.EncodeVarint(9<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.CryptoHashConfig); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("PrimitiveTransformation.Transformation has unexpected type %T", x) + } + return nil +} + +func _PrimitiveTransformation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*PrimitiveTransformation) + switch tag { + case 1: // transformation.replace_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ReplaceValueConfig) + err := b.DecodeMessage(msg) + m.Transformation = &PrimitiveTransformation_ReplaceConfig{msg} + return true, err + case 2: // transformation.redact_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(RedactConfig) + err := b.DecodeMessage(msg) + m.Transformation = &PrimitiveTransformation_RedactConfig{msg} + return true, err + case 3: // transformation.character_mask_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CharacterMaskConfig) + err := b.DecodeMessage(msg) + m.Transformation = &PrimitiveTransformation_CharacterMaskConfig{msg} + return true, err + case 4: // transformation.crypto_replace_ffx_fpe_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CryptoReplaceFfxFpeConfig) + err := b.DecodeMessage(msg) + m.Transformation = &PrimitiveTransformation_CryptoReplaceFfxFpeConfig{msg} + return true, err + case 5: // transformation.fixed_size_bucketing_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(FixedSizeBucketingConfig) + err := b.DecodeMessage(msg) + m.Transformation = &PrimitiveTransformation_FixedSizeBucketingConfig{msg} + return true, err + case 6: // transformation.bucketing_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(BucketingConfig) + err := b.DecodeMessage(msg) + m.Transformation = &PrimitiveTransformation_BucketingConfig{msg} + return true, err + case 7: // transformation.replace_with_info_type_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ReplaceWithInfoTypeConfig) + err := b.DecodeMessage(msg) + m.Transformation = &PrimitiveTransformation_ReplaceWithInfoTypeConfig{msg} + return true, err + case 8: // transformation.time_part_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TimePartConfig) + err := b.DecodeMessage(msg) + m.Transformation = &PrimitiveTransformation_TimePartConfig{msg} + return true, err + case 9: // transformation.crypto_hash_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CryptoHashConfig) + err := b.DecodeMessage(msg) + m.Transformation = &PrimitiveTransformation_CryptoHashConfig{msg} + return true, err + default: + return false, nil + } +} + +func _PrimitiveTransformation_OneofSizer(msg proto.Message) (n int) { + m := msg.(*PrimitiveTransformation) + // transformation + switch x := m.Transformation.(type) { + case *PrimitiveTransformation_ReplaceConfig: + s := proto.Size(x.ReplaceConfig) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrimitiveTransformation_RedactConfig: + s := proto.Size(x.RedactConfig) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrimitiveTransformation_CharacterMaskConfig: + s := proto.Size(x.CharacterMaskConfig) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrimitiveTransformation_CryptoReplaceFfxFpeConfig: + s := proto.Size(x.CryptoReplaceFfxFpeConfig) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrimitiveTransformation_FixedSizeBucketingConfig: + s := proto.Size(x.FixedSizeBucketingConfig) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrimitiveTransformation_BucketingConfig: + s := proto.Size(x.BucketingConfig) + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrimitiveTransformation_ReplaceWithInfoTypeConfig: + s := proto.Size(x.ReplaceWithInfoTypeConfig) + n += proto.SizeVarint(7<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrimitiveTransformation_TimePartConfig: + s := proto.Size(x.TimePartConfig) + n += proto.SizeVarint(8<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrimitiveTransformation_CryptoHashConfig: + s := proto.Size(x.CryptoHashConfig) + n += proto.SizeVarint(9<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// For use with `Date`, `Timestamp`, and `TimeOfDay`, extract or preserve a +// portion of the value. +type TimePartConfig struct { + PartToExtract TimePartConfig_TimePart `protobuf:"varint,1,opt,name=part_to_extract,json=partToExtract,enum=google.privacy.dlp.v2beta1.TimePartConfig_TimePart" json:"part_to_extract,omitempty"` +} + +func (m *TimePartConfig) Reset() { *m = TimePartConfig{} } +func (m *TimePartConfig) String() string { return proto.CompactTextString(m) } +func (*TimePartConfig) ProtoMessage() {} +func (*TimePartConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} } + +func (m *TimePartConfig) GetPartToExtract() TimePartConfig_TimePart { + if m != nil { + return m.PartToExtract + } + return TimePartConfig_TIME_PART_UNSPECIFIED +} + +// Pseudonymization method that generates surrogates via cryptographic hashing. +// Uses SHA-256. +// Outputs a 32 byte digest as an uppercase hex string +// (for example, 41D1567F7F99F1DC2A5FAB886DEE5BEE). +// Currently, only string and integer values can be hashed. +type CryptoHashConfig struct { + // The key used by the hash function. + CryptoKey *CryptoKey `protobuf:"bytes,1,opt,name=crypto_key,json=cryptoKey" json:"crypto_key,omitempty"` +} + +func (m *CryptoHashConfig) Reset() { *m = CryptoHashConfig{} } +func (m *CryptoHashConfig) String() string { return proto.CompactTextString(m) } +func (*CryptoHashConfig) ProtoMessage() {} +func (*CryptoHashConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} } + +func (m *CryptoHashConfig) GetCryptoKey() *CryptoKey { + if m != nil { + return m.CryptoKey + } + return nil +} + +// Replace each input value with a given `Value`. +type ReplaceValueConfig struct { + // Value to replace it with. + NewValue *Value `protobuf:"bytes,1,opt,name=new_value,json=newValue" json:"new_value,omitempty"` +} + +func (m *ReplaceValueConfig) Reset() { *m = ReplaceValueConfig{} } +func (m *ReplaceValueConfig) String() string { return proto.CompactTextString(m) } +func (*ReplaceValueConfig) ProtoMessage() {} +func (*ReplaceValueConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} } + +func (m *ReplaceValueConfig) GetNewValue() *Value { + if m != nil { + return m.NewValue + } + return nil +} + +// Replace each matching finding with the name of the info_type. +type ReplaceWithInfoTypeConfig struct { +} + +func (m *ReplaceWithInfoTypeConfig) Reset() { *m = ReplaceWithInfoTypeConfig{} } +func (m *ReplaceWithInfoTypeConfig) String() string { return proto.CompactTextString(m) } +func (*ReplaceWithInfoTypeConfig) ProtoMessage() {} +func (*ReplaceWithInfoTypeConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41} } + +// Redact a given value. For example, if used with an `InfoTypeTransformation` +// transforming PHONE_NUMBER, and input 'My phone number is 206-555-0123', the +// output would be 'My phone number is '. +type RedactConfig struct { +} + +func (m *RedactConfig) Reset() { *m = RedactConfig{} } +func (m *RedactConfig) String() string { return proto.CompactTextString(m) } +func (*RedactConfig) ProtoMessage() {} +func (*RedactConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{42} } + +// Characters to skip when doing deidentification of a value. These will be left +// alone and skipped. +type CharsToIgnore struct { + // Types that are valid to be assigned to Characters: + // *CharsToIgnore_CharactersToSkip + // *CharsToIgnore_CommonCharactersToIgnore + Characters isCharsToIgnore_Characters `protobuf_oneof:"characters"` +} + +func (m *CharsToIgnore) Reset() { *m = CharsToIgnore{} } +func (m *CharsToIgnore) String() string { return proto.CompactTextString(m) } +func (*CharsToIgnore) ProtoMessage() {} +func (*CharsToIgnore) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{43} } + +type isCharsToIgnore_Characters interface { + isCharsToIgnore_Characters() +} + +type CharsToIgnore_CharactersToSkip struct { + CharactersToSkip string `protobuf:"bytes,1,opt,name=characters_to_skip,json=charactersToSkip,oneof"` +} +type CharsToIgnore_CommonCharactersToIgnore struct { + CommonCharactersToIgnore CharsToIgnore_CharacterGroup `protobuf:"varint,2,opt,name=common_characters_to_ignore,json=commonCharactersToIgnore,enum=google.privacy.dlp.v2beta1.CharsToIgnore_CharacterGroup,oneof"` +} + +func (*CharsToIgnore_CharactersToSkip) isCharsToIgnore_Characters() {} +func (*CharsToIgnore_CommonCharactersToIgnore) isCharsToIgnore_Characters() {} + +func (m *CharsToIgnore) GetCharacters() isCharsToIgnore_Characters { + if m != nil { + return m.Characters + } + return nil +} + +func (m *CharsToIgnore) GetCharactersToSkip() string { + if x, ok := m.GetCharacters().(*CharsToIgnore_CharactersToSkip); ok { + return x.CharactersToSkip + } + return "" +} + +func (m *CharsToIgnore) GetCommonCharactersToIgnore() CharsToIgnore_CharacterGroup { + if x, ok := m.GetCharacters().(*CharsToIgnore_CommonCharactersToIgnore); ok { + return x.CommonCharactersToIgnore + } + return CharsToIgnore_CHARACTER_GROUP_UNSPECIFIED +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*CharsToIgnore) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _CharsToIgnore_OneofMarshaler, _CharsToIgnore_OneofUnmarshaler, _CharsToIgnore_OneofSizer, []interface{}{ + (*CharsToIgnore_CharactersToSkip)(nil), + (*CharsToIgnore_CommonCharactersToIgnore)(nil), + } +} + +func _CharsToIgnore_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*CharsToIgnore) + // characters + switch x := m.Characters.(type) { + case *CharsToIgnore_CharactersToSkip: + b.EncodeVarint(1<<3 | proto.WireBytes) + b.EncodeStringBytes(x.CharactersToSkip) + case *CharsToIgnore_CommonCharactersToIgnore: + b.EncodeVarint(2<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.CommonCharactersToIgnore)) + case nil: + default: + return fmt.Errorf("CharsToIgnore.Characters has unexpected type %T", x) + } + return nil +} + +func _CharsToIgnore_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*CharsToIgnore) + switch tag { + case 1: // characters.characters_to_skip + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Characters = &CharsToIgnore_CharactersToSkip{x} + return true, err + case 2: // characters.common_characters_to_ignore + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Characters = &CharsToIgnore_CommonCharactersToIgnore{CharsToIgnore_CharacterGroup(x)} + return true, err + default: + return false, nil + } +} + +func _CharsToIgnore_OneofSizer(msg proto.Message) (n int) { + m := msg.(*CharsToIgnore) + // characters + switch x := m.Characters.(type) { + case *CharsToIgnore_CharactersToSkip: + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.CharactersToSkip))) + n += len(x.CharactersToSkip) + case *CharsToIgnore_CommonCharactersToIgnore: + n += proto.SizeVarint(2<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.CommonCharactersToIgnore)) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Partially mask a string by replacing a given number of characters with a +// fixed character. Masking can start from the beginning or end of the string. +// This can be used on data of any type (numbers, longs, and so on) and when +// de-identifying structured data we'll attempt to preserve the original data's +// type. (This allows you to take a long like 123 and modify it to a string like +// **3. +type CharacterMaskConfig struct { + // Character to mask the sensitive values—for example, "*" for an + // alphabetic string such as name, or "0" for a numeric string such as ZIP + // code or credit card number. String must have length 1. If not supplied, we + // will default to "*" for strings, 0 for digits. + MaskingCharacter string `protobuf:"bytes,1,opt,name=masking_character,json=maskingCharacter" json:"masking_character,omitempty"` + // Number of characters to mask. If not set, all matching chars will be + // masked. Skipped characters do not count towards this tally. + NumberToMask int32 `protobuf:"varint,2,opt,name=number_to_mask,json=numberToMask" json:"number_to_mask,omitempty"` + // Mask characters in reverse order. For example, if `masking_character` is + // '0', number_to_mask is 14, and `reverse_order` is false, then + // 1234-5678-9012-3456 -> 00000000000000-3456 + // If `masking_character` is '*', `number_to_mask` is 3, and `reverse_order` + // is true, then 12345 -> 12*** + ReverseOrder bool `protobuf:"varint,3,opt,name=reverse_order,json=reverseOrder" json:"reverse_order,omitempty"` + // When masking a string, items in this list will be skipped when replacing. + // For example, if your string is 555-555-5555 and you ask us to skip `-` and + // mask 5 chars with * we would produce ***-*55-5555. + CharactersToIgnore []*CharsToIgnore `protobuf:"bytes,4,rep,name=characters_to_ignore,json=charactersToIgnore" json:"characters_to_ignore,omitempty"` +} + +func (m *CharacterMaskConfig) Reset() { *m = CharacterMaskConfig{} } +func (m *CharacterMaskConfig) String() string { return proto.CompactTextString(m) } +func (*CharacterMaskConfig) ProtoMessage() {} +func (*CharacterMaskConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{44} } + +func (m *CharacterMaskConfig) GetMaskingCharacter() string { + if m != nil { + return m.MaskingCharacter + } + return "" +} + +func (m *CharacterMaskConfig) GetNumberToMask() int32 { + if m != nil { + return m.NumberToMask + } + return 0 +} + +func (m *CharacterMaskConfig) GetReverseOrder() bool { + if m != nil { + return m.ReverseOrder + } + return false +} + +func (m *CharacterMaskConfig) GetCharactersToIgnore() []*CharsToIgnore { + if m != nil { + return m.CharactersToIgnore + } + return nil +} + +// Buckets values based on fixed size ranges. The +// Bucketing transformation can provide all of this functionality, +// but requires more configuration. This message is provided as a convenience to +// the user for simple bucketing strategies. +// The resulting value will be a hyphenated string of +// lower_bound-upper_bound. +// This can be used on data of type: double, long. +// If the bound Value type differs from the type of data +// being transformed, we will first attempt converting the type of the data to +// be transformed to match the type of the bound before comparing. +type FixedSizeBucketingConfig struct { + // Lower bound value of buckets. All values less than `lower_bound` are + // grouped together into a single bucket; for example if `lower_bound` = 10, + // then all values less than 10 are replaced with the value “-10”. [Required]. + LowerBound *Value `protobuf:"bytes,1,opt,name=lower_bound,json=lowerBound" json:"lower_bound,omitempty"` + // Upper bound value of buckets. All values greater than upper_bound are + // grouped together into a single bucket; for example if `upper_bound` = 89, + // then all values greater than 89 are replaced with the value “89+”. + // [Required]. + UpperBound *Value `protobuf:"bytes,2,opt,name=upper_bound,json=upperBound" json:"upper_bound,omitempty"` + // Size of each bucket (except for minimum and maximum buckets). So if + // `lower_bound` = 10, `upper_bound` = 89, and `bucket_size` = 10, then the + // following buckets would be used: -10, 10-20, 20-30, 30-40, 40-50, 50-60, + // 60-70, 70-80, 80-89, 89+. Precision up to 2 decimals works. [Required]. + BucketSize float64 `protobuf:"fixed64,3,opt,name=bucket_size,json=bucketSize" json:"bucket_size,omitempty"` +} + +func (m *FixedSizeBucketingConfig) Reset() { *m = FixedSizeBucketingConfig{} } +func (m *FixedSizeBucketingConfig) String() string { return proto.CompactTextString(m) } +func (*FixedSizeBucketingConfig) ProtoMessage() {} +func (*FixedSizeBucketingConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{45} } + +func (m *FixedSizeBucketingConfig) GetLowerBound() *Value { + if m != nil { + return m.LowerBound + } + return nil +} + +func (m *FixedSizeBucketingConfig) GetUpperBound() *Value { + if m != nil { + return m.UpperBound + } + return nil +} + +func (m *FixedSizeBucketingConfig) GetBucketSize() float64 { + if m != nil { + return m.BucketSize + } + return 0 +} + +// Generalization function that buckets values based on ranges. The ranges and +// replacement values are dynamically provided by the user for custom behavior, +// such as 1-30 -> LOW 31-65 -> MEDIUM 66-100 -> HIGH +// This can be used on +// data of type: number, long, string, timestamp. +// If the bound `Value` type differs from the type of data being transformed, we +// will first attempt converting the type of the data to be transformed to match +// the type of the bound before comparing. +type BucketingConfig struct { + Buckets []*BucketingConfig_Bucket `protobuf:"bytes,1,rep,name=buckets" json:"buckets,omitempty"` +} + +func (m *BucketingConfig) Reset() { *m = BucketingConfig{} } +func (m *BucketingConfig) String() string { return proto.CompactTextString(m) } +func (*BucketingConfig) ProtoMessage() {} +func (*BucketingConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{46} } + +func (m *BucketingConfig) GetBuckets() []*BucketingConfig_Bucket { + if m != nil { + return m.Buckets + } + return nil +} + +// Buckets represented as ranges, along with replacement values. Ranges must +// be non-overlapping. +type BucketingConfig_Bucket struct { + // Lower bound of the range, inclusive. Type should be the same as max if + // used. + Min *Value `protobuf:"bytes,1,opt,name=min" json:"min,omitempty"` + // Upper bound of the range, exclusive; type must match min. + Max *Value `protobuf:"bytes,2,opt,name=max" json:"max,omitempty"` + // Replacement value for this bucket. If not provided + // the default behavior will be to hyphenate the min-max range. + ReplacementValue *Value `protobuf:"bytes,3,opt,name=replacement_value,json=replacementValue" json:"replacement_value,omitempty"` +} + +func (m *BucketingConfig_Bucket) Reset() { *m = BucketingConfig_Bucket{} } +func (m *BucketingConfig_Bucket) String() string { return proto.CompactTextString(m) } +func (*BucketingConfig_Bucket) ProtoMessage() {} +func (*BucketingConfig_Bucket) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{46, 0} } + +func (m *BucketingConfig_Bucket) GetMin() *Value { + if m != nil { + return m.Min + } + return nil +} + +func (m *BucketingConfig_Bucket) GetMax() *Value { + if m != nil { + return m.Max + } + return nil +} + +func (m *BucketingConfig_Bucket) GetReplacementValue() *Value { + if m != nil { + return m.ReplacementValue + } + return nil +} + +// Replaces an identifier with a surrogate using FPE with the FFX +// mode of operation. +// The identifier must be representable by the US-ASCII character set. +// For a given crypto key and context, the same identifier will be +// replaced with the same surrogate. +// Identifiers must be at least two characters long. +// In the case that the identifier is the empty string, it will be skipped. +type CryptoReplaceFfxFpeConfig struct { + // The key used by the encryption algorithm. [required] + CryptoKey *CryptoKey `protobuf:"bytes,1,opt,name=crypto_key,json=cryptoKey" json:"crypto_key,omitempty"` + // A context may be used for higher security since the same + // identifier in two different contexts likely will be given a distinct + // surrogate. The principle is that the likeliness is inversely related + // to the ratio of the number of distinct identifiers per context over the + // number of possible surrogates: As long as this ratio is small, the + // likehood is large. + // + // If the context is not set, a default tweak will be used. + // If the context is set but: + // + // 1. there is no record present when transforming a given value or + // 1. the field is not present when transforming a given value, + // + // a default tweak will be used. + // + // Note that case (1) is expected when an `InfoTypeTransformation` is + // applied to both structured and non-structured `ContentItem`s. + // Currently, the referenced field may be of value type integer or string. + // + // The tweak is constructed as a sequence of bytes in big endian byte order + // such that: + // + // - a 64 bit integer is encoded followed by a single byte of value 1 + // - a string is encoded in UTF-8 format followed by a single byte of value 2 + // + // This is also known as the 'tweak', as in tweakable encryption. + Context *FieldId `protobuf:"bytes,2,opt,name=context" json:"context,omitempty"` + // Types that are valid to be assigned to Alphabet: + // *CryptoReplaceFfxFpeConfig_CommonAlphabet + // *CryptoReplaceFfxFpeConfig_CustomAlphabet + // *CryptoReplaceFfxFpeConfig_Radix + Alphabet isCryptoReplaceFfxFpeConfig_Alphabet `protobuf_oneof:"alphabet"` +} + +func (m *CryptoReplaceFfxFpeConfig) Reset() { *m = CryptoReplaceFfxFpeConfig{} } +func (m *CryptoReplaceFfxFpeConfig) String() string { return proto.CompactTextString(m) } +func (*CryptoReplaceFfxFpeConfig) ProtoMessage() {} +func (*CryptoReplaceFfxFpeConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{47} } + +type isCryptoReplaceFfxFpeConfig_Alphabet interface { + isCryptoReplaceFfxFpeConfig_Alphabet() +} + +type CryptoReplaceFfxFpeConfig_CommonAlphabet struct { + CommonAlphabet CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet `protobuf:"varint,4,opt,name=common_alphabet,json=commonAlphabet,enum=google.privacy.dlp.v2beta1.CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet,oneof"` +} +type CryptoReplaceFfxFpeConfig_CustomAlphabet struct { + CustomAlphabet string `protobuf:"bytes,5,opt,name=custom_alphabet,json=customAlphabet,oneof"` +} +type CryptoReplaceFfxFpeConfig_Radix struct { + Radix int32 `protobuf:"varint,6,opt,name=radix,oneof"` +} + +func (*CryptoReplaceFfxFpeConfig_CommonAlphabet) isCryptoReplaceFfxFpeConfig_Alphabet() {} +func (*CryptoReplaceFfxFpeConfig_CustomAlphabet) isCryptoReplaceFfxFpeConfig_Alphabet() {} +func (*CryptoReplaceFfxFpeConfig_Radix) isCryptoReplaceFfxFpeConfig_Alphabet() {} + +func (m *CryptoReplaceFfxFpeConfig) GetAlphabet() isCryptoReplaceFfxFpeConfig_Alphabet { + if m != nil { + return m.Alphabet + } + return nil +} + +func (m *CryptoReplaceFfxFpeConfig) GetCryptoKey() *CryptoKey { + if m != nil { + return m.CryptoKey + } + return nil +} + +func (m *CryptoReplaceFfxFpeConfig) GetContext() *FieldId { + if m != nil { + return m.Context + } + return nil +} + +func (m *CryptoReplaceFfxFpeConfig) GetCommonAlphabet() CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet { + if x, ok := m.GetAlphabet().(*CryptoReplaceFfxFpeConfig_CommonAlphabet); ok { + return x.CommonAlphabet + } + return CryptoReplaceFfxFpeConfig_FFX_COMMON_NATIVE_ALPHABET_UNSPECIFIED +} + +func (m *CryptoReplaceFfxFpeConfig) GetCustomAlphabet() string { + if x, ok := m.GetAlphabet().(*CryptoReplaceFfxFpeConfig_CustomAlphabet); ok { + return x.CustomAlphabet + } + return "" +} + +func (m *CryptoReplaceFfxFpeConfig) GetRadix() int32 { + if x, ok := m.GetAlphabet().(*CryptoReplaceFfxFpeConfig_Radix); ok { + return x.Radix + } + return 0 +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*CryptoReplaceFfxFpeConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _CryptoReplaceFfxFpeConfig_OneofMarshaler, _CryptoReplaceFfxFpeConfig_OneofUnmarshaler, _CryptoReplaceFfxFpeConfig_OneofSizer, []interface{}{ + (*CryptoReplaceFfxFpeConfig_CommonAlphabet)(nil), + (*CryptoReplaceFfxFpeConfig_CustomAlphabet)(nil), + (*CryptoReplaceFfxFpeConfig_Radix)(nil), + } +} + +func _CryptoReplaceFfxFpeConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*CryptoReplaceFfxFpeConfig) + // alphabet + switch x := m.Alphabet.(type) { + case *CryptoReplaceFfxFpeConfig_CommonAlphabet: + b.EncodeVarint(4<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.CommonAlphabet)) + case *CryptoReplaceFfxFpeConfig_CustomAlphabet: + b.EncodeVarint(5<<3 | proto.WireBytes) + b.EncodeStringBytes(x.CustomAlphabet) + case *CryptoReplaceFfxFpeConfig_Radix: + b.EncodeVarint(6<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.Radix)) + case nil: + default: + return fmt.Errorf("CryptoReplaceFfxFpeConfig.Alphabet has unexpected type %T", x) + } + return nil +} + +func _CryptoReplaceFfxFpeConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*CryptoReplaceFfxFpeConfig) + switch tag { + case 4: // alphabet.common_alphabet + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Alphabet = &CryptoReplaceFfxFpeConfig_CommonAlphabet{CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet(x)} + return true, err + case 5: // alphabet.custom_alphabet + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Alphabet = &CryptoReplaceFfxFpeConfig_CustomAlphabet{x} + return true, err + case 6: // alphabet.radix + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Alphabet = &CryptoReplaceFfxFpeConfig_Radix{int32(x)} + return true, err + default: + return false, nil + } +} + +func _CryptoReplaceFfxFpeConfig_OneofSizer(msg proto.Message) (n int) { + m := msg.(*CryptoReplaceFfxFpeConfig) + // alphabet + switch x := m.Alphabet.(type) { + case *CryptoReplaceFfxFpeConfig_CommonAlphabet: + n += proto.SizeVarint(4<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.CommonAlphabet)) + case *CryptoReplaceFfxFpeConfig_CustomAlphabet: + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.CustomAlphabet))) + n += len(x.CustomAlphabet) + case *CryptoReplaceFfxFpeConfig_Radix: + n += proto.SizeVarint(6<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.Radix)) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// This is a data encryption key (DEK) (as opposed to +// a key encryption key (KEK) stored by KMS). +// When using KMS to wrap/unwrap DEKs, be sure to set an appropriate +// IAM policy on the KMS CryptoKey (KEK) to ensure an attacker cannot +// unwrap the data crypto key. +type CryptoKey struct { + // Types that are valid to be assigned to Source: + // *CryptoKey_Transient + // *CryptoKey_Unwrapped + // *CryptoKey_KmsWrapped + Source isCryptoKey_Source `protobuf_oneof:"source"` +} + +func (m *CryptoKey) Reset() { *m = CryptoKey{} } +func (m *CryptoKey) String() string { return proto.CompactTextString(m) } +func (*CryptoKey) ProtoMessage() {} +func (*CryptoKey) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{48} } + +type isCryptoKey_Source interface { + isCryptoKey_Source() +} + +type CryptoKey_Transient struct { + Transient *TransientCryptoKey `protobuf:"bytes,1,opt,name=transient,oneof"` +} +type CryptoKey_Unwrapped struct { + Unwrapped *UnwrappedCryptoKey `protobuf:"bytes,2,opt,name=unwrapped,oneof"` +} +type CryptoKey_KmsWrapped struct { + KmsWrapped *KmsWrappedCryptoKey `protobuf:"bytes,3,opt,name=kms_wrapped,json=kmsWrapped,oneof"` +} + +func (*CryptoKey_Transient) isCryptoKey_Source() {} +func (*CryptoKey_Unwrapped) isCryptoKey_Source() {} +func (*CryptoKey_KmsWrapped) isCryptoKey_Source() {} + +func (m *CryptoKey) GetSource() isCryptoKey_Source { + if m != nil { + return m.Source + } + return nil +} + +func (m *CryptoKey) GetTransient() *TransientCryptoKey { + if x, ok := m.GetSource().(*CryptoKey_Transient); ok { + return x.Transient + } + return nil +} + +func (m *CryptoKey) GetUnwrapped() *UnwrappedCryptoKey { + if x, ok := m.GetSource().(*CryptoKey_Unwrapped); ok { + return x.Unwrapped + } + return nil +} + +func (m *CryptoKey) GetKmsWrapped() *KmsWrappedCryptoKey { + if x, ok := m.GetSource().(*CryptoKey_KmsWrapped); ok { + return x.KmsWrapped + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*CryptoKey) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _CryptoKey_OneofMarshaler, _CryptoKey_OneofUnmarshaler, _CryptoKey_OneofSizer, []interface{}{ + (*CryptoKey_Transient)(nil), + (*CryptoKey_Unwrapped)(nil), + (*CryptoKey_KmsWrapped)(nil), + } +} + +func _CryptoKey_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*CryptoKey) + // source + switch x := m.Source.(type) { + case *CryptoKey_Transient: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Transient); err != nil { + return err + } + case *CryptoKey_Unwrapped: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Unwrapped); err != nil { + return err + } + case *CryptoKey_KmsWrapped: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.KmsWrapped); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("CryptoKey.Source has unexpected type %T", x) + } + return nil +} + +func _CryptoKey_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*CryptoKey) + switch tag { + case 1: // source.transient + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TransientCryptoKey) + err := b.DecodeMessage(msg) + m.Source = &CryptoKey_Transient{msg} + return true, err + case 2: // source.unwrapped + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(UnwrappedCryptoKey) + err := b.DecodeMessage(msg) + m.Source = &CryptoKey_Unwrapped{msg} + return true, err + case 3: // source.kms_wrapped + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(KmsWrappedCryptoKey) + err := b.DecodeMessage(msg) + m.Source = &CryptoKey_KmsWrapped{msg} + return true, err + default: + return false, nil + } +} + +func _CryptoKey_OneofSizer(msg proto.Message) (n int) { + m := msg.(*CryptoKey) + // source + switch x := m.Source.(type) { + case *CryptoKey_Transient: + s := proto.Size(x.Transient) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *CryptoKey_Unwrapped: + s := proto.Size(x.Unwrapped) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *CryptoKey_KmsWrapped: + s := proto.Size(x.KmsWrapped) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Use this to have a random data crypto key generated. +// It will be discarded after the operation/request finishes. +type TransientCryptoKey struct { + // Name of the key. [required] + // This is an arbitrary string used to differentiate different keys. + // A unique key is generated per name: two separate `TransientCryptoKey` + // protos share the same generated key if their names are the same. + // When the data crypto key is generated, this name is not used in any way + // (repeating the api call will result in a different key being generated). + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *TransientCryptoKey) Reset() { *m = TransientCryptoKey{} } +func (m *TransientCryptoKey) String() string { return proto.CompactTextString(m) } +func (*TransientCryptoKey) ProtoMessage() {} +func (*TransientCryptoKey) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{49} } + +func (m *TransientCryptoKey) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Using raw keys is prone to security risks due to accidentally +// leaking the key. Choose another type of key if possible. +type UnwrappedCryptoKey struct { + // The AES 128/192/256 bit key. [required] + Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` +} + +func (m *UnwrappedCryptoKey) Reset() { *m = UnwrappedCryptoKey{} } +func (m *UnwrappedCryptoKey) String() string { return proto.CompactTextString(m) } +func (*UnwrappedCryptoKey) ProtoMessage() {} +func (*UnwrappedCryptoKey) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{50} } + +func (m *UnwrappedCryptoKey) GetKey() []byte { + if m != nil { + return m.Key + } + return nil +} + +// Include to use an existing data crypto key wrapped by KMS. +// Authorization requires the following IAM permissions when sending a request +// to perform a crypto transformation using a kms-wrapped crypto key: +// dlp.kms.encrypt +type KmsWrappedCryptoKey struct { + // The wrapped data crypto key. [required] + WrappedKey []byte `protobuf:"bytes,1,opt,name=wrapped_key,json=wrappedKey,proto3" json:"wrapped_key,omitempty"` + // The resource name of the KMS CryptoKey to use for unwrapping. [required] + CryptoKeyName string `protobuf:"bytes,2,opt,name=crypto_key_name,json=cryptoKeyName" json:"crypto_key_name,omitempty"` +} + +func (m *KmsWrappedCryptoKey) Reset() { *m = KmsWrappedCryptoKey{} } +func (m *KmsWrappedCryptoKey) String() string { return proto.CompactTextString(m) } +func (*KmsWrappedCryptoKey) ProtoMessage() {} +func (*KmsWrappedCryptoKey) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{51} } + +func (m *KmsWrappedCryptoKey) GetWrappedKey() []byte { + if m != nil { + return m.WrappedKey + } + return nil +} + +func (m *KmsWrappedCryptoKey) GetCryptoKeyName() string { + if m != nil { + return m.CryptoKeyName + } + return "" +} + +// A type of transformation that will scan unstructured text and +// apply various `PrimitiveTransformation`s to each finding, where the +// transformation is applied to only values that were identified as a specific +// info_type. +type InfoTypeTransformations struct { + // Transformation for each info type. Cannot specify more than one + // for a given info type. [required] + Transformations []*InfoTypeTransformations_InfoTypeTransformation `protobuf:"bytes,1,rep,name=transformations" json:"transformations,omitempty"` +} + +func (m *InfoTypeTransformations) Reset() { *m = InfoTypeTransformations{} } +func (m *InfoTypeTransformations) String() string { return proto.CompactTextString(m) } +func (*InfoTypeTransformations) ProtoMessage() {} +func (*InfoTypeTransformations) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{52} } + +func (m *InfoTypeTransformations) GetTransformations() []*InfoTypeTransformations_InfoTypeTransformation { + if m != nil { + return m.Transformations + } + return nil +} + +// A transformation to apply to text that is identified as a specific +// info_type. +type InfoTypeTransformations_InfoTypeTransformation struct { + // Info types to apply the transformation to. Empty list will match all + // available info types for this transformation. + InfoTypes []*InfoType `protobuf:"bytes,1,rep,name=info_types,json=infoTypes" json:"info_types,omitempty"` + // Primitive transformation to apply to the info type. [required] + PrimitiveTransformation *PrimitiveTransformation `protobuf:"bytes,2,opt,name=primitive_transformation,json=primitiveTransformation" json:"primitive_transformation,omitempty"` +} + +func (m *InfoTypeTransformations_InfoTypeTransformation) Reset() { + *m = InfoTypeTransformations_InfoTypeTransformation{} +} +func (m *InfoTypeTransformations_InfoTypeTransformation) String() string { + return proto.CompactTextString(m) +} +func (*InfoTypeTransformations_InfoTypeTransformation) ProtoMessage() {} +func (*InfoTypeTransformations_InfoTypeTransformation) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{52, 0} +} + +func (m *InfoTypeTransformations_InfoTypeTransformation) GetInfoTypes() []*InfoType { + if m != nil { + return m.InfoTypes + } + return nil +} + +func (m *InfoTypeTransformations_InfoTypeTransformation) GetPrimitiveTransformation() *PrimitiveTransformation { + if m != nil { + return m.PrimitiveTransformation + } + return nil +} + +// The transformation to apply to the field. +type FieldTransformation struct { + // Input field(s) to apply the transformation to. [required] + Fields []*FieldId `protobuf:"bytes,1,rep,name=fields" json:"fields,omitempty"` + // Only apply the transformation if the condition evaluates to true for the + // given `RecordCondition`. The conditions are allowed to reference fields + // that are not used in the actual transformation. [optional] + // + // Example Use Cases: + // + // - Apply a different bucket transformation to an age column if the zip code + // column for the same record is within a specific range. + // - Redact a field if the date of birth field is greater than 85. + Condition *RecordCondition `protobuf:"bytes,3,opt,name=condition" json:"condition,omitempty"` + // Transformation to apply. [required] + // + // Types that are valid to be assigned to Transformation: + // *FieldTransformation_PrimitiveTransformation + // *FieldTransformation_InfoTypeTransformations + Transformation isFieldTransformation_Transformation `protobuf_oneof:"transformation"` +} + +func (m *FieldTransformation) Reset() { *m = FieldTransformation{} } +func (m *FieldTransformation) String() string { return proto.CompactTextString(m) } +func (*FieldTransformation) ProtoMessage() {} +func (*FieldTransformation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{53} } + +type isFieldTransformation_Transformation interface { + isFieldTransformation_Transformation() +} + +type FieldTransformation_PrimitiveTransformation struct { + PrimitiveTransformation *PrimitiveTransformation `protobuf:"bytes,4,opt,name=primitive_transformation,json=primitiveTransformation,oneof"` +} +type FieldTransformation_InfoTypeTransformations struct { + InfoTypeTransformations *InfoTypeTransformations `protobuf:"bytes,5,opt,name=info_type_transformations,json=infoTypeTransformations,oneof"` +} + +func (*FieldTransformation_PrimitiveTransformation) isFieldTransformation_Transformation() {} +func (*FieldTransformation_InfoTypeTransformations) isFieldTransformation_Transformation() {} + +func (m *FieldTransformation) GetTransformation() isFieldTransformation_Transformation { + if m != nil { + return m.Transformation + } + return nil +} + +func (m *FieldTransformation) GetFields() []*FieldId { + if m != nil { + return m.Fields + } + return nil +} + +func (m *FieldTransformation) GetCondition() *RecordCondition { + if m != nil { + return m.Condition + } + return nil +} + +func (m *FieldTransformation) GetPrimitiveTransformation() *PrimitiveTransformation { + if x, ok := m.GetTransformation().(*FieldTransformation_PrimitiveTransformation); ok { + return x.PrimitiveTransformation + } + return nil +} + +func (m *FieldTransformation) GetInfoTypeTransformations() *InfoTypeTransformations { + if x, ok := m.GetTransformation().(*FieldTransformation_InfoTypeTransformations); ok { + return x.InfoTypeTransformations + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*FieldTransformation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _FieldTransformation_OneofMarshaler, _FieldTransformation_OneofUnmarshaler, _FieldTransformation_OneofSizer, []interface{}{ + (*FieldTransformation_PrimitiveTransformation)(nil), + (*FieldTransformation_InfoTypeTransformations)(nil), + } +} + +func _FieldTransformation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*FieldTransformation) + // transformation + switch x := m.Transformation.(type) { + case *FieldTransformation_PrimitiveTransformation: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.PrimitiveTransformation); err != nil { + return err + } + case *FieldTransformation_InfoTypeTransformations: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.InfoTypeTransformations); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("FieldTransformation.Transformation has unexpected type %T", x) + } + return nil +} + +func _FieldTransformation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*FieldTransformation) + switch tag { + case 4: // transformation.primitive_transformation + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PrimitiveTransformation) + err := b.DecodeMessage(msg) + m.Transformation = &FieldTransformation_PrimitiveTransformation{msg} + return true, err + case 5: // transformation.info_type_transformations + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(InfoTypeTransformations) + err := b.DecodeMessage(msg) + m.Transformation = &FieldTransformation_InfoTypeTransformations{msg} + return true, err + default: + return false, nil + } +} + +func _FieldTransformation_OneofSizer(msg proto.Message) (n int) { + m := msg.(*FieldTransformation) + // transformation + switch x := m.Transformation.(type) { + case *FieldTransformation_PrimitiveTransformation: + s := proto.Size(x.PrimitiveTransformation) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *FieldTransformation_InfoTypeTransformations: + s := proto.Size(x.InfoTypeTransformations) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A type of transformation that is applied over structured data such as a +// table. +type RecordTransformations struct { + // Transform the record by applying various field transformations. + FieldTransformations []*FieldTransformation `protobuf:"bytes,1,rep,name=field_transformations,json=fieldTransformations" json:"field_transformations,omitempty"` + // Configuration defining which records get suppressed entirely. Records that + // match any suppression rule are omitted from the output [optional]. + RecordSuppressions []*RecordSuppression `protobuf:"bytes,2,rep,name=record_suppressions,json=recordSuppressions" json:"record_suppressions,omitempty"` +} + +func (m *RecordTransformations) Reset() { *m = RecordTransformations{} } +func (m *RecordTransformations) String() string { return proto.CompactTextString(m) } +func (*RecordTransformations) ProtoMessage() {} +func (*RecordTransformations) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{54} } + +func (m *RecordTransformations) GetFieldTransformations() []*FieldTransformation { + if m != nil { + return m.FieldTransformations + } + return nil +} + +func (m *RecordTransformations) GetRecordSuppressions() []*RecordSuppression { + if m != nil { + return m.RecordSuppressions + } + return nil +} + +// Configuration to suppress records whose suppression conditions evaluate to +// true. +type RecordSuppression struct { + Condition *RecordCondition `protobuf:"bytes,1,opt,name=condition" json:"condition,omitempty"` +} + +func (m *RecordSuppression) Reset() { *m = RecordSuppression{} } +func (m *RecordSuppression) String() string { return proto.CompactTextString(m) } +func (*RecordSuppression) ProtoMessage() {} +func (*RecordSuppression) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{55} } + +func (m *RecordSuppression) GetCondition() *RecordCondition { + if m != nil { + return m.Condition + } + return nil +} + +// A condition for determining whether a transformation should be applied to +// a field. +type RecordCondition struct { + Expressions *RecordCondition_Expressions `protobuf:"bytes,3,opt,name=expressions" json:"expressions,omitempty"` +} + +func (m *RecordCondition) Reset() { *m = RecordCondition{} } +func (m *RecordCondition) String() string { return proto.CompactTextString(m) } +func (*RecordCondition) ProtoMessage() {} +func (*RecordCondition) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{56} } + +func (m *RecordCondition) GetExpressions() *RecordCondition_Expressions { + if m != nil { + return m.Expressions + } + return nil +} + +// The field type of `value` and `field` do not need to match to be +// considered equal, but not all comparisons are possible. +// +// A `value` of type: +// +// - `string` can be compared against all other types +// - `boolean` can only be compared against other booleans +// - `integer` can be compared against doubles or a string if the string value +// can be parsed as an integer. +// - `double` can be compared against integers or a string if the string can +// be parsed as a double. +// - `Timestamp` can be compared against strings in RFC 3339 date string +// format. +// - `TimeOfDay` can be compared against timestamps and strings in the format +// of 'HH:mm:ss'. +// +// If we fail to compare do to type mismatch, a warning will be given and +// the condition will evaluate to false. +type RecordCondition_Condition struct { + // Field within the record this condition is evaluated against. [required] + Field *FieldId `protobuf:"bytes,1,opt,name=field" json:"field,omitempty"` + // Operator used to compare the field or info type to the value. [required] + Operator RelationalOperator `protobuf:"varint,3,opt,name=operator,enum=google.privacy.dlp.v2beta1.RelationalOperator" json:"operator,omitempty"` + // Value to compare against. [Required, except for `EXISTS` tests.] + Value *Value `protobuf:"bytes,4,opt,name=value" json:"value,omitempty"` +} + +func (m *RecordCondition_Condition) Reset() { *m = RecordCondition_Condition{} } +func (m *RecordCondition_Condition) String() string { return proto.CompactTextString(m) } +func (*RecordCondition_Condition) ProtoMessage() {} +func (*RecordCondition_Condition) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{56, 0} } + +func (m *RecordCondition_Condition) GetField() *FieldId { + if m != nil { + return m.Field + } + return nil +} + +func (m *RecordCondition_Condition) GetOperator() RelationalOperator { + if m != nil { + return m.Operator + } + return RelationalOperator_RELATIONAL_OPERATOR_UNSPECIFIED +} + +func (m *RecordCondition_Condition) GetValue() *Value { + if m != nil { + return m.Value + } + return nil +} + +type RecordCondition_Conditions struct { + Conditions []*RecordCondition_Condition `protobuf:"bytes,1,rep,name=conditions" json:"conditions,omitempty"` +} + +func (m *RecordCondition_Conditions) Reset() { *m = RecordCondition_Conditions{} } +func (m *RecordCondition_Conditions) String() string { return proto.CompactTextString(m) } +func (*RecordCondition_Conditions) ProtoMessage() {} +func (*RecordCondition_Conditions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{56, 1} } + +func (m *RecordCondition_Conditions) GetConditions() []*RecordCondition_Condition { + if m != nil { + return m.Conditions + } + return nil +} + +// A collection of expressions +type RecordCondition_Expressions struct { + // The operator to apply to the result of conditions. Default and currently + // only supported value is `AND`. + LogicalOperator RecordCondition_Expressions_LogicalOperator `protobuf:"varint,1,opt,name=logical_operator,json=logicalOperator,enum=google.privacy.dlp.v2beta1.RecordCondition_Expressions_LogicalOperator" json:"logical_operator,omitempty"` + // Types that are valid to be assigned to Type: + // *RecordCondition_Expressions_Conditions + Type isRecordCondition_Expressions_Type `protobuf_oneof:"type"` +} + +func (m *RecordCondition_Expressions) Reset() { *m = RecordCondition_Expressions{} } +func (m *RecordCondition_Expressions) String() string { return proto.CompactTextString(m) } +func (*RecordCondition_Expressions) ProtoMessage() {} +func (*RecordCondition_Expressions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{56, 2} } + +type isRecordCondition_Expressions_Type interface { + isRecordCondition_Expressions_Type() +} + +type RecordCondition_Expressions_Conditions struct { + Conditions *RecordCondition_Conditions `protobuf:"bytes,3,opt,name=conditions,oneof"` +} + +func (*RecordCondition_Expressions_Conditions) isRecordCondition_Expressions_Type() {} + +func (m *RecordCondition_Expressions) GetType() isRecordCondition_Expressions_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *RecordCondition_Expressions) GetLogicalOperator() RecordCondition_Expressions_LogicalOperator { + if m != nil { + return m.LogicalOperator + } + return RecordCondition_Expressions_LOGICAL_OPERATOR_UNSPECIFIED +} + +func (m *RecordCondition_Expressions) GetConditions() *RecordCondition_Conditions { + if x, ok := m.GetType().(*RecordCondition_Expressions_Conditions); ok { + return x.Conditions + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*RecordCondition_Expressions) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _RecordCondition_Expressions_OneofMarshaler, _RecordCondition_Expressions_OneofUnmarshaler, _RecordCondition_Expressions_OneofSizer, []interface{}{ + (*RecordCondition_Expressions_Conditions)(nil), + } +} + +func _RecordCondition_Expressions_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*RecordCondition_Expressions) + // type + switch x := m.Type.(type) { + case *RecordCondition_Expressions_Conditions: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Conditions); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("RecordCondition_Expressions.Type has unexpected type %T", x) + } + return nil +} + +func _RecordCondition_Expressions_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*RecordCondition_Expressions) + switch tag { + case 3: // type.conditions + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(RecordCondition_Conditions) + err := b.DecodeMessage(msg) + m.Type = &RecordCondition_Expressions_Conditions{msg} + return true, err + default: + return false, nil + } +} + +func _RecordCondition_Expressions_OneofSizer(msg proto.Message) (n int) { + m := msg.(*RecordCondition_Expressions) + // type + switch x := m.Type.(type) { + case *RecordCondition_Expressions_Conditions: + s := proto.Size(x.Conditions) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// High level summary of deidentification. +type DeidentificationSummary struct { + // Total size in bytes that were transformed in some way. + TransformedBytes int64 `protobuf:"varint,2,opt,name=transformed_bytes,json=transformedBytes" json:"transformed_bytes,omitempty"` + // Transformations applied to the dataset. + TransformationSummaries []*TransformationSummary `protobuf:"bytes,3,rep,name=transformation_summaries,json=transformationSummaries" json:"transformation_summaries,omitempty"` +} + +func (m *DeidentificationSummary) Reset() { *m = DeidentificationSummary{} } +func (m *DeidentificationSummary) String() string { return proto.CompactTextString(m) } +func (*DeidentificationSummary) ProtoMessage() {} +func (*DeidentificationSummary) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{57} } + +func (m *DeidentificationSummary) GetTransformedBytes() int64 { + if m != nil { + return m.TransformedBytes + } + return 0 +} + +func (m *DeidentificationSummary) GetTransformationSummaries() []*TransformationSummary { + if m != nil { + return m.TransformationSummaries + } + return nil +} + +// Summary of a single tranformation. +type TransformationSummary struct { + // Set if the transformation was limited to a specific info_type. + InfoType *InfoType `protobuf:"bytes,1,opt,name=info_type,json=infoType" json:"info_type,omitempty"` + // Set if the transformation was limited to a specific FieldId. + Field *FieldId `protobuf:"bytes,2,opt,name=field" json:"field,omitempty"` + // The specific transformation these stats apply to. + Transformation *PrimitiveTransformation `protobuf:"bytes,3,opt,name=transformation" json:"transformation,omitempty"` + // The field transformation that was applied. This list will contain + // multiple only in the case of errors. + FieldTransformations []*FieldTransformation `protobuf:"bytes,5,rep,name=field_transformations,json=fieldTransformations" json:"field_transformations,omitempty"` + // The specific suppression option these stats apply to. + RecordSuppress *RecordSuppression `protobuf:"bytes,6,opt,name=record_suppress,json=recordSuppress" json:"record_suppress,omitempty"` + Results []*TransformationSummary_SummaryResult `protobuf:"bytes,4,rep,name=results" json:"results,omitempty"` +} + +func (m *TransformationSummary) Reset() { *m = TransformationSummary{} } +func (m *TransformationSummary) String() string { return proto.CompactTextString(m) } +func (*TransformationSummary) ProtoMessage() {} +func (*TransformationSummary) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{58} } + +func (m *TransformationSummary) GetInfoType() *InfoType { + if m != nil { + return m.InfoType + } + return nil +} + +func (m *TransformationSummary) GetField() *FieldId { + if m != nil { + return m.Field + } + return nil +} + +func (m *TransformationSummary) GetTransformation() *PrimitiveTransformation { + if m != nil { + return m.Transformation + } + return nil +} + +func (m *TransformationSummary) GetFieldTransformations() []*FieldTransformation { + if m != nil { + return m.FieldTransformations + } + return nil +} + +func (m *TransformationSummary) GetRecordSuppress() *RecordSuppression { + if m != nil { + return m.RecordSuppress + } + return nil +} + +func (m *TransformationSummary) GetResults() []*TransformationSummary_SummaryResult { + if m != nil { + return m.Results + } + return nil +} + +// A collection that informs the user the number of times a particular +// `TransformationResultCode` and error details occurred. +type TransformationSummary_SummaryResult struct { + Count int64 `protobuf:"varint,1,opt,name=count" json:"count,omitempty"` + Code TransformationSummary_TransformationResultCode `protobuf:"varint,2,opt,name=code,enum=google.privacy.dlp.v2beta1.TransformationSummary_TransformationResultCode" json:"code,omitempty"` + // A place for warnings or errors to show up if a transformation didn't + // work as expected. + Details string `protobuf:"bytes,3,opt,name=details" json:"details,omitempty"` +} + +func (m *TransformationSummary_SummaryResult) Reset() { *m = TransformationSummary_SummaryResult{} } +func (m *TransformationSummary_SummaryResult) String() string { return proto.CompactTextString(m) } +func (*TransformationSummary_SummaryResult) ProtoMessage() {} +func (*TransformationSummary_SummaryResult) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{58, 0} +} + +func (m *TransformationSummary_SummaryResult) GetCount() int64 { + if m != nil { + return m.Count + } + return 0 +} + +func (m *TransformationSummary_SummaryResult) GetCode() TransformationSummary_TransformationResultCode { + if m != nil { + return m.Code + } + return TransformationSummary_TRANSFORMATION_RESULT_CODE_UNSPECIFIED +} + +func (m *TransformationSummary_SummaryResult) GetDetails() string { + if m != nil { + return m.Details + } + return "" +} + +func init() { + proto.RegisterType((*InspectConfig)(nil), "google.privacy.dlp.v2beta1.InspectConfig") + proto.RegisterType((*InspectConfig_InfoTypeLimit)(nil), "google.privacy.dlp.v2beta1.InspectConfig.InfoTypeLimit") + proto.RegisterType((*OperationConfig)(nil), "google.privacy.dlp.v2beta1.OperationConfig") + proto.RegisterType((*ContentItem)(nil), "google.privacy.dlp.v2beta1.ContentItem") + proto.RegisterType((*Table)(nil), "google.privacy.dlp.v2beta1.Table") + proto.RegisterType((*Table_Row)(nil), "google.privacy.dlp.v2beta1.Table.Row") + proto.RegisterType((*InspectResult)(nil), "google.privacy.dlp.v2beta1.InspectResult") + proto.RegisterType((*Finding)(nil), "google.privacy.dlp.v2beta1.Finding") + proto.RegisterType((*Location)(nil), "google.privacy.dlp.v2beta1.Location") + proto.RegisterType((*TableLocation)(nil), "google.privacy.dlp.v2beta1.TableLocation") + proto.RegisterType((*Range)(nil), "google.privacy.dlp.v2beta1.Range") + proto.RegisterType((*ImageLocation)(nil), "google.privacy.dlp.v2beta1.ImageLocation") + proto.RegisterType((*RedactContentRequest)(nil), "google.privacy.dlp.v2beta1.RedactContentRequest") + proto.RegisterType((*RedactContentRequest_ReplaceConfig)(nil), "google.privacy.dlp.v2beta1.RedactContentRequest.ReplaceConfig") + proto.RegisterType((*RedactContentRequest_ImageRedactionConfig)(nil), "google.privacy.dlp.v2beta1.RedactContentRequest.ImageRedactionConfig") + proto.RegisterType((*Color)(nil), "google.privacy.dlp.v2beta1.Color") + proto.RegisterType((*RedactContentResponse)(nil), "google.privacy.dlp.v2beta1.RedactContentResponse") + proto.RegisterType((*DeidentifyContentRequest)(nil), "google.privacy.dlp.v2beta1.DeidentifyContentRequest") + proto.RegisterType((*DeidentifyContentResponse)(nil), "google.privacy.dlp.v2beta1.DeidentifyContentResponse") + proto.RegisterType((*InspectContentRequest)(nil), "google.privacy.dlp.v2beta1.InspectContentRequest") + proto.RegisterType((*InspectContentResponse)(nil), "google.privacy.dlp.v2beta1.InspectContentResponse") + proto.RegisterType((*CreateInspectOperationRequest)(nil), "google.privacy.dlp.v2beta1.CreateInspectOperationRequest") + proto.RegisterType((*OutputStorageConfig)(nil), "google.privacy.dlp.v2beta1.OutputStorageConfig") + proto.RegisterType((*InfoTypeStatistics)(nil), "google.privacy.dlp.v2beta1.InfoTypeStatistics") + proto.RegisterType((*InspectOperationMetadata)(nil), "google.privacy.dlp.v2beta1.InspectOperationMetadata") + proto.RegisterType((*InspectOperationResult)(nil), "google.privacy.dlp.v2beta1.InspectOperationResult") + proto.RegisterType((*ListInspectFindingsRequest)(nil), "google.privacy.dlp.v2beta1.ListInspectFindingsRequest") + proto.RegisterType((*ListInspectFindingsResponse)(nil), "google.privacy.dlp.v2beta1.ListInspectFindingsResponse") + proto.RegisterType((*InfoTypeDescription)(nil), "google.privacy.dlp.v2beta1.InfoTypeDescription") + proto.RegisterType((*ListInfoTypesRequest)(nil), "google.privacy.dlp.v2beta1.ListInfoTypesRequest") + proto.RegisterType((*ListInfoTypesResponse)(nil), "google.privacy.dlp.v2beta1.ListInfoTypesResponse") + proto.RegisterType((*CategoryDescription)(nil), "google.privacy.dlp.v2beta1.CategoryDescription") + proto.RegisterType((*ListRootCategoriesRequest)(nil), "google.privacy.dlp.v2beta1.ListRootCategoriesRequest") + proto.RegisterType((*ListRootCategoriesResponse)(nil), "google.privacy.dlp.v2beta1.ListRootCategoriesResponse") + proto.RegisterType((*AnalyzeDataSourceRiskRequest)(nil), "google.privacy.dlp.v2beta1.AnalyzeDataSourceRiskRequest") + proto.RegisterType((*PrivacyMetric)(nil), "google.privacy.dlp.v2beta1.PrivacyMetric") + proto.RegisterType((*PrivacyMetric_NumericalStatsConfig)(nil), "google.privacy.dlp.v2beta1.PrivacyMetric.NumericalStatsConfig") + proto.RegisterType((*PrivacyMetric_CategoricalStatsConfig)(nil), "google.privacy.dlp.v2beta1.PrivacyMetric.CategoricalStatsConfig") + proto.RegisterType((*PrivacyMetric_KAnonymityConfig)(nil), "google.privacy.dlp.v2beta1.PrivacyMetric.KAnonymityConfig") + proto.RegisterType((*PrivacyMetric_LDiversityConfig)(nil), "google.privacy.dlp.v2beta1.PrivacyMetric.LDiversityConfig") + proto.RegisterType((*RiskAnalysisOperationMetadata)(nil), "google.privacy.dlp.v2beta1.RiskAnalysisOperationMetadata") + proto.RegisterType((*RiskAnalysisOperationResult)(nil), "google.privacy.dlp.v2beta1.RiskAnalysisOperationResult") + proto.RegisterType((*RiskAnalysisOperationResult_NumericalStatsResult)(nil), "google.privacy.dlp.v2beta1.RiskAnalysisOperationResult.NumericalStatsResult") + proto.RegisterType((*RiskAnalysisOperationResult_CategoricalStatsResult)(nil), "google.privacy.dlp.v2beta1.RiskAnalysisOperationResult.CategoricalStatsResult") + proto.RegisterType((*RiskAnalysisOperationResult_CategoricalStatsResult_CategoricalStatsHistogramBucket)(nil), "google.privacy.dlp.v2beta1.RiskAnalysisOperationResult.CategoricalStatsResult.CategoricalStatsHistogramBucket") + proto.RegisterType((*RiskAnalysisOperationResult_KAnonymityResult)(nil), "google.privacy.dlp.v2beta1.RiskAnalysisOperationResult.KAnonymityResult") + proto.RegisterType((*RiskAnalysisOperationResult_KAnonymityResult_KAnonymityEquivalenceClass)(nil), "google.privacy.dlp.v2beta1.RiskAnalysisOperationResult.KAnonymityResult.KAnonymityEquivalenceClass") + proto.RegisterType((*RiskAnalysisOperationResult_KAnonymityResult_KAnonymityHistogramBucket)(nil), "google.privacy.dlp.v2beta1.RiskAnalysisOperationResult.KAnonymityResult.KAnonymityHistogramBucket") + proto.RegisterType((*RiskAnalysisOperationResult_LDiversityResult)(nil), "google.privacy.dlp.v2beta1.RiskAnalysisOperationResult.LDiversityResult") + proto.RegisterType((*RiskAnalysisOperationResult_LDiversityResult_LDiversityEquivalenceClass)(nil), "google.privacy.dlp.v2beta1.RiskAnalysisOperationResult.LDiversityResult.LDiversityEquivalenceClass") + proto.RegisterType((*RiskAnalysisOperationResult_LDiversityResult_LDiversityHistogramBucket)(nil), "google.privacy.dlp.v2beta1.RiskAnalysisOperationResult.LDiversityResult.LDiversityHistogramBucket") + proto.RegisterType((*ValueFrequency)(nil), "google.privacy.dlp.v2beta1.ValueFrequency") + proto.RegisterType((*Value)(nil), "google.privacy.dlp.v2beta1.Value") + proto.RegisterType((*DeidentifyConfig)(nil), "google.privacy.dlp.v2beta1.DeidentifyConfig") + proto.RegisterType((*PrimitiveTransformation)(nil), "google.privacy.dlp.v2beta1.PrimitiveTransformation") + proto.RegisterType((*TimePartConfig)(nil), "google.privacy.dlp.v2beta1.TimePartConfig") + proto.RegisterType((*CryptoHashConfig)(nil), "google.privacy.dlp.v2beta1.CryptoHashConfig") + proto.RegisterType((*ReplaceValueConfig)(nil), "google.privacy.dlp.v2beta1.ReplaceValueConfig") + proto.RegisterType((*ReplaceWithInfoTypeConfig)(nil), "google.privacy.dlp.v2beta1.ReplaceWithInfoTypeConfig") + proto.RegisterType((*RedactConfig)(nil), "google.privacy.dlp.v2beta1.RedactConfig") + proto.RegisterType((*CharsToIgnore)(nil), "google.privacy.dlp.v2beta1.CharsToIgnore") + proto.RegisterType((*CharacterMaskConfig)(nil), "google.privacy.dlp.v2beta1.CharacterMaskConfig") + proto.RegisterType((*FixedSizeBucketingConfig)(nil), "google.privacy.dlp.v2beta1.FixedSizeBucketingConfig") + proto.RegisterType((*BucketingConfig)(nil), "google.privacy.dlp.v2beta1.BucketingConfig") + proto.RegisterType((*BucketingConfig_Bucket)(nil), "google.privacy.dlp.v2beta1.BucketingConfig.Bucket") + proto.RegisterType((*CryptoReplaceFfxFpeConfig)(nil), "google.privacy.dlp.v2beta1.CryptoReplaceFfxFpeConfig") + proto.RegisterType((*CryptoKey)(nil), "google.privacy.dlp.v2beta1.CryptoKey") + proto.RegisterType((*TransientCryptoKey)(nil), "google.privacy.dlp.v2beta1.TransientCryptoKey") + proto.RegisterType((*UnwrappedCryptoKey)(nil), "google.privacy.dlp.v2beta1.UnwrappedCryptoKey") + proto.RegisterType((*KmsWrappedCryptoKey)(nil), "google.privacy.dlp.v2beta1.KmsWrappedCryptoKey") + proto.RegisterType((*InfoTypeTransformations)(nil), "google.privacy.dlp.v2beta1.InfoTypeTransformations") + proto.RegisterType((*InfoTypeTransformations_InfoTypeTransformation)(nil), "google.privacy.dlp.v2beta1.InfoTypeTransformations.InfoTypeTransformation") + proto.RegisterType((*FieldTransformation)(nil), "google.privacy.dlp.v2beta1.FieldTransformation") + proto.RegisterType((*RecordTransformations)(nil), "google.privacy.dlp.v2beta1.RecordTransformations") + proto.RegisterType((*RecordSuppression)(nil), "google.privacy.dlp.v2beta1.RecordSuppression") + proto.RegisterType((*RecordCondition)(nil), "google.privacy.dlp.v2beta1.RecordCondition") + proto.RegisterType((*RecordCondition_Condition)(nil), "google.privacy.dlp.v2beta1.RecordCondition.Condition") + proto.RegisterType((*RecordCondition_Conditions)(nil), "google.privacy.dlp.v2beta1.RecordCondition.Conditions") + proto.RegisterType((*RecordCondition_Expressions)(nil), "google.privacy.dlp.v2beta1.RecordCondition.Expressions") + proto.RegisterType((*DeidentificationSummary)(nil), "google.privacy.dlp.v2beta1.DeidentificationSummary") + proto.RegisterType((*TransformationSummary)(nil), "google.privacy.dlp.v2beta1.TransformationSummary") + proto.RegisterType((*TransformationSummary_SummaryResult)(nil), "google.privacy.dlp.v2beta1.TransformationSummary.SummaryResult") + proto.RegisterEnum("google.privacy.dlp.v2beta1.Likelihood", Likelihood_name, Likelihood_value) + proto.RegisterEnum("google.privacy.dlp.v2beta1.RelationalOperator", RelationalOperator_name, RelationalOperator_value) + proto.RegisterEnum("google.privacy.dlp.v2beta1.TimePartConfig_TimePart", TimePartConfig_TimePart_name, TimePartConfig_TimePart_value) + proto.RegisterEnum("google.privacy.dlp.v2beta1.CharsToIgnore_CharacterGroup", CharsToIgnore_CharacterGroup_name, CharsToIgnore_CharacterGroup_value) + proto.RegisterEnum("google.privacy.dlp.v2beta1.CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet", CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet_name, CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet_value) + proto.RegisterEnum("google.privacy.dlp.v2beta1.RecordCondition_Expressions_LogicalOperator", RecordCondition_Expressions_LogicalOperator_name, RecordCondition_Expressions_LogicalOperator_value) + proto.RegisterEnum("google.privacy.dlp.v2beta1.TransformationSummary_TransformationResultCode", TransformationSummary_TransformationResultCode_name, TransformationSummary_TransformationResultCode_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for DlpService service + +type DlpServiceClient interface { + // Finds potentially sensitive info in a list of strings. + // This method has limits on input size, processing time, and output size. + InspectContent(ctx context.Context, in *InspectContentRequest, opts ...grpc.CallOption) (*InspectContentResponse, error) + // Redacts potentially sensitive info from a list of strings. + // This method has limits on input size, processing time, and output size. + RedactContent(ctx context.Context, in *RedactContentRequest, opts ...grpc.CallOption) (*RedactContentResponse, error) + // De-identifies potentially sensitive info from a list of strings. + // This method has limits on input size and output size. + DeidentifyContent(ctx context.Context, in *DeidentifyContentRequest, opts ...grpc.CallOption) (*DeidentifyContentResponse, error) + // Schedules a job scanning content in a Google Cloud Platform data + // repository. + CreateInspectOperation(ctx context.Context, in *CreateInspectOperationRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Schedules a job to compute risk analysis metrics over content in a Google + // Cloud Platform repository. + AnalyzeDataSourceRisk(ctx context.Context, in *AnalyzeDataSourceRiskRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) + // Returns list of results for given inspect operation result set id. + ListInspectFindings(ctx context.Context, in *ListInspectFindingsRequest, opts ...grpc.CallOption) (*ListInspectFindingsResponse, error) + // Returns sensitive information types for given category. + ListInfoTypes(ctx context.Context, in *ListInfoTypesRequest, opts ...grpc.CallOption) (*ListInfoTypesResponse, error) + // Returns the list of root categories of sensitive information. + ListRootCategories(ctx context.Context, in *ListRootCategoriesRequest, opts ...grpc.CallOption) (*ListRootCategoriesResponse, error) +} + +type dlpServiceClient struct { + cc *grpc.ClientConn +} + +func NewDlpServiceClient(cc *grpc.ClientConn) DlpServiceClient { + return &dlpServiceClient{cc} +} + +func (c *dlpServiceClient) InspectContent(ctx context.Context, in *InspectContentRequest, opts ...grpc.CallOption) (*InspectContentResponse, error) { + out := new(InspectContentResponse) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta1.DlpService/InspectContent", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) RedactContent(ctx context.Context, in *RedactContentRequest, opts ...grpc.CallOption) (*RedactContentResponse, error) { out := new(RedactContentResponse) err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta1.DlpService/RedactContent", in, out, c.cc, opts...) if err != nil { @@ -1204,6 +5009,15 @@ func (c *dlpServiceClient) RedactContent(ctx context.Context, in *RedactContentR return out, nil } +func (c *dlpServiceClient) DeidentifyContent(ctx context.Context, in *DeidentifyContentRequest, opts ...grpc.CallOption) (*DeidentifyContentResponse, error) { + out := new(DeidentifyContentResponse) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta1.DlpService/DeidentifyContent", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *dlpServiceClient) CreateInspectOperation(ctx context.Context, in *CreateInspectOperationRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { out := new(google_longrunning.Operation) err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta1.DlpService/CreateInspectOperation", in, out, c.cc, opts...) @@ -1213,6 +5027,15 @@ func (c *dlpServiceClient) CreateInspectOperation(ctx context.Context, in *Creat return out, nil } +func (c *dlpServiceClient) AnalyzeDataSourceRisk(ctx context.Context, in *AnalyzeDataSourceRiskRequest, opts ...grpc.CallOption) (*google_longrunning.Operation, error) { + out := new(google_longrunning.Operation) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta1.DlpService/AnalyzeDataSourceRisk", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *dlpServiceClient) ListInspectFindings(ctx context.Context, in *ListInspectFindingsRequest, opts ...grpc.CallOption) (*ListInspectFindingsResponse, error) { out := new(ListInspectFindingsResponse) err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta1.DlpService/ListInspectFindings", in, out, c.cc, opts...) @@ -1243,14 +5066,21 @@ func (c *dlpServiceClient) ListRootCategories(ctx context.Context, in *ListRootC // Server API for DlpService service type DlpServiceServer interface { - // Find potentially sensitive info in a list of strings. + // Finds potentially sensitive info in a list of strings. // This method has limits on input size, processing time, and output size. InspectContent(context.Context, *InspectContentRequest) (*InspectContentResponse, error) - // Redact potentially sensitive info from a list of strings. + // Redacts potentially sensitive info from a list of strings. // This method has limits on input size, processing time, and output size. RedactContent(context.Context, *RedactContentRequest) (*RedactContentResponse, error) - // Schedule a job scanning content in a Google Cloud Platform data repository. + // De-identifies potentially sensitive info from a list of strings. + // This method has limits on input size and output size. + DeidentifyContent(context.Context, *DeidentifyContentRequest) (*DeidentifyContentResponse, error) + // Schedules a job scanning content in a Google Cloud Platform data + // repository. CreateInspectOperation(context.Context, *CreateInspectOperationRequest) (*google_longrunning.Operation, error) + // Schedules a job to compute risk analysis metrics over content in a Google + // Cloud Platform repository. + AnalyzeDataSourceRisk(context.Context, *AnalyzeDataSourceRiskRequest) (*google_longrunning.Operation, error) // Returns list of results for given inspect operation result set id. ListInspectFindings(context.Context, *ListInspectFindingsRequest) (*ListInspectFindingsResponse, error) // Returns sensitive information types for given category. @@ -1299,6 +5129,24 @@ func _DlpService_RedactContent_Handler(srv interface{}, ctx context.Context, dec return interceptor(ctx, in, info, handler) } +func _DlpService_DeidentifyContent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeidentifyContentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).DeidentifyContent(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta1.DlpService/DeidentifyContent", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).DeidentifyContent(ctx, req.(*DeidentifyContentRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _DlpService_CreateInspectOperation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(CreateInspectOperationRequest) if err := dec(in); err != nil { @@ -1317,6 +5165,24 @@ func _DlpService_CreateInspectOperation_Handler(srv interface{}, ctx context.Con return interceptor(ctx, in, info, handler) } +func _DlpService_AnalyzeDataSourceRisk_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AnalyzeDataSourceRiskRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).AnalyzeDataSourceRisk(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta1.DlpService/AnalyzeDataSourceRisk", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).AnalyzeDataSourceRisk(ctx, req.(*AnalyzeDataSourceRiskRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _DlpService_ListInspectFindings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ListInspectFindingsRequest) if err := dec(in); err != nil { @@ -1383,10 +5249,18 @@ var _DlpService_serviceDesc = grpc.ServiceDesc{ MethodName: "RedactContent", Handler: _DlpService_RedactContent_Handler, }, + { + MethodName: "DeidentifyContent", + Handler: _DlpService_DeidentifyContent_Handler, + }, { MethodName: "CreateInspectOperation", Handler: _DlpService_CreateInspectOperation_Handler, }, + { + MethodName: "AnalyzeDataSourceRisk", + Handler: _DlpService_AnalyzeDataSourceRisk_Handler, + }, { MethodName: "ListInspectFindings", Handler: _DlpService_ListInspectFindings_Handler, @@ -1407,115 +5281,330 @@ var _DlpService_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("google/privacy/dlp/v2beta1/dlp.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 1759 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0xdd, 0x6f, 0xdb, 0xd6, - 0x15, 0x0f, 0x25, 0xcb, 0x96, 0x8e, 0x3e, 0x9c, 0x5e, 0x7f, 0x54, 0x55, 0x9a, 0xd5, 0x61, 0xba, - 0xd4, 0x33, 0x32, 0xa9, 0xd1, 0xb0, 0x0c, 0x6b, 0x91, 0x2e, 0xb5, 0xec, 0x20, 0x5a, 0xdd, 0x58, - 0xbd, 0x76, 0x53, 0x74, 0xd8, 0x40, 0xd0, 0xe4, 0x35, 0x7d, 0x11, 0x8a, 0x97, 0x25, 0xaf, 0x52, - 0xab, 0x45, 0x30, 0x60, 0x2f, 0xdb, 0xe3, 0x80, 0xbd, 0x6c, 0xc3, 0xf6, 0xb6, 0x87, 0x0d, 0xd8, - 0xdb, 0xde, 0xf6, 0x6f, 0xec, 0x5f, 0xd8, 0xd3, 0xfe, 0x80, 0x3d, 0x0f, 0xf7, 0x83, 0x14, 0xa5, - 0x28, 0xb4, 0xe5, 0x6d, 0x40, 0xdf, 0xee, 0xc7, 0x39, 0x87, 0xbf, 0xf3, 0xf5, 0xe3, 0x21, 0xe1, - 0x6d, 0x8f, 0x31, 0xcf, 0x27, 0x9d, 0x30, 0xa2, 0xcf, 0x6d, 0x67, 0xdc, 0x71, 0xfd, 0xb0, 0xf3, - 0xbc, 0x7b, 0x42, 0xb8, 0x7d, 0x4f, 0xac, 0xdb, 0x61, 0xc4, 0x38, 0x43, 0x2d, 0x25, 0xd5, 0xd6, - 0x52, 0x6d, 0x71, 0xa3, 0xa5, 0x5a, 0x6f, 0x6a, 0x0b, 0x76, 0x48, 0x3b, 0x76, 0x10, 0x30, 0x6e, - 0x73, 0xca, 0x82, 0x58, 0x69, 0xb6, 0x6e, 0xeb, 0x5b, 0x9f, 0x05, 0x5e, 0x34, 0x0a, 0x02, 0x1a, - 0x78, 0x1d, 0x16, 0x92, 0x68, 0x4a, 0x68, 0x3b, 0x07, 0x44, 0xcc, 0x59, 0x64, 0x7b, 0x44, 0x4b, - 0xbe, 0x95, 0x4a, 0x32, 0xce, 0x4e, 0x46, 0xa7, 0x1d, 0x4e, 0x87, 0x24, 0xe6, 0xf6, 0x50, 0x23, - 0x35, 0x7f, 0x5d, 0x80, 0x7a, 0x3f, 0x88, 0x43, 0xe2, 0xf0, 0x1e, 0x0b, 0x4e, 0xa9, 0x87, 0x7a, - 0x00, 0x34, 0x38, 0x65, 0x16, 0x1f, 0x87, 0x24, 0x6e, 0x1a, 0x5b, 0xc5, 0xed, 0x6a, 0xf7, 0xed, - 0xf6, 0xab, 0x1d, 0x6a, 0xf7, 0x83, 0x53, 0x76, 0x3c, 0x0e, 0x09, 0xae, 0x50, 0xbd, 0x8a, 0xd1, - 0xc7, 0xd0, 0x18, 0xd2, 0xc0, 0xf2, 0xe9, 0x33, 0xe2, 0xd3, 0x33, 0xc6, 0xdc, 0x66, 0x61, 0xcb, - 0xd8, 0x6e, 0x74, 0xef, 0xe4, 0x19, 0x3a, 0x48, 0xa5, 0x71, 0x7d, 0x48, 0x83, 0xc9, 0x16, 0xdd, - 0x82, 0xda, 0xd0, 0x3e, 0xb7, 0x4e, 0x69, 0xe0, 0xd2, 0xc0, 0x8b, 0x9b, 0xc5, 0x2d, 0x63, 0xbb, - 0x84, 0xab, 0x43, 0xfb, 0xfc, 0x91, 0x3e, 0x42, 0xb7, 0xa1, 0x4e, 0x03, 0xc7, 0x1f, 0xb9, 0xc4, - 0xfa, 0x62, 0xc4, 0x38, 0x69, 0x2e, 0x6d, 0x19, 0xdb, 0x65, 0x5c, 0xd3, 0x87, 0x9f, 0x88, 0x33, - 0x21, 0x44, 0xce, 0x95, 0x90, 0x72, 0x6f, 0x59, 0x09, 0xe9, 0x43, 0x89, 0xdd, 0xfc, 0x29, 0x54, - 0x7b, 0x2c, 0xe0, 0x24, 0xe0, 0x7d, 0x4e, 0x86, 0x08, 0xc1, 0x92, 0x90, 0x6d, 0x1a, 0x5b, 0xc6, - 0x76, 0x05, 0xcb, 0x35, 0x5a, 0x87, 0x25, 0xd7, 0xe6, 0xb6, 0x74, 0xaa, 0xf6, 0xf8, 0x1a, 0x96, - 0x3b, 0xb4, 0x09, 0xa5, 0xe7, 0xb6, 0x3f, 0x22, 0x12, 0x5e, 0xe5, 0xf1, 0x35, 0xac, 0xb6, 0xbb, - 0x55, 0xa8, 0x88, 0x7b, 0x8b, 0x72, 0x32, 0x34, 0x7f, 0x9e, 0xc6, 0x1b, 0x93, 0x78, 0xe4, 0x73, - 0xf4, 0x23, 0x28, 0xa7, 0x7e, 0xa9, 0x68, 0xdf, 0xce, 0x0b, 0x92, 0x76, 0x18, 0xa7, 0x4a, 0xe8, - 0xbb, 0x80, 0x92, 0xb5, 0xc5, 0xa3, 0x51, 0xe0, 0xd8, 0x9c, 0xa8, 0x78, 0x97, 0xf1, 0x6b, 0xc9, - 0xcd, 0x71, 0x72, 0x61, 0xfe, 0xa5, 0x00, 0x2b, 0xda, 0x08, 0x5a, 0x87, 0x92, 0x0a, 0x96, 0x72, - 0x4e, 0x6d, 0xd0, 0x87, 0x50, 0x49, 0x2b, 0x40, 0xda, 0xb9, 0x6c, 0x01, 0x94, 0x93, 0x02, 0x40, - 0x8f, 0x00, 0x32, 0xb9, 0x2f, 0x2e, 0x94, 0xfb, 0x8c, 0x26, 0x7a, 0x08, 0x65, 0x9f, 0x39, 0xb2, - 0xf8, 0x65, 0x42, 0x2f, 0x40, 0x72, 0xa0, 0x65, 0x71, 0xaa, 0x85, 0xde, 0x87, 0xaa, 0x13, 0x11, - 0x9b, 0x13, 0x4b, 0x94, 0xbe, 0x4c, 0x78, 0xb5, 0xdb, 0x9a, 0x18, 0x51, 0x7d, 0xd1, 0x3e, 0x4e, - 0xfa, 0x02, 0x83, 0x12, 0x17, 0x07, 0xe6, 0xbf, 0x0a, 0x50, 0x4e, 0x6c, 0xa2, 0x87, 0x00, 0x27, - 0x63, 0x4e, 0xac, 0xc8, 0x0e, 0x3c, 0x15, 0xb1, 0x6a, 0xf7, 0x56, 0x1e, 0x1a, 0x2c, 0x04, 0x71, - 0x45, 0x28, 0xc9, 0x25, 0xfa, 0x31, 0xac, 0x3a, 0xcc, 0x25, 0x21, 0xa3, 0x01, 0xd7, 0x66, 0x0a, - 0x97, 0x35, 0xd3, 0x48, 0x35, 0x13, 0x5b, 0x55, 0x3a, 0xb4, 0x3d, 0x62, 0x9d, 0xb0, 0x73, 0x22, - 0x3a, 0x42, 0x54, 0xce, 0x77, 0x72, 0xd3, 0x24, 0xc4, 0xd3, 0x08, 0x81, 0xd4, 0xde, 0x15, 0xca, - 0x68, 0x0f, 0x20, 0x22, 0x0e, 0x8b, 0x5c, 0xeb, 0x19, 0x19, 0xeb, 0x38, 0x7f, 0x3b, 0x17, 0x92, - 0x94, 0xfe, 0x88, 0x8c, 0x71, 0x25, 0x4a, 0x96, 0xe8, 0x03, 0x51, 0xc8, 0xc4, 0x77, 0x2d, 0xea, - 0x36, 0x4b, 0xd2, 0xc6, 0x05, 0x85, 0x4c, 0x7c, 0xb7, 0xef, 0xe2, 0x95, 0x53, 0xb5, 0x30, 0x3b, - 0x50, 0x52, 0xae, 0xad, 0x43, 0x29, 0xe6, 0x76, 0xc4, 0x65, 0x8c, 0x8b, 0x58, 0x6d, 0xd0, 0x75, - 0x28, 0x92, 0x40, 0xd5, 0x75, 0x11, 0x8b, 0xa5, 0xe9, 0x40, 0x7d, 0xca, 0x27, 0x21, 0xc2, 0x59, - 0x28, 0xd5, 0x4a, 0x58, 0x2c, 0x45, 0xf3, 0xfa, 0xe4, 0x94, 0x4b, 0xad, 0x12, 0x96, 0x6b, 0x61, - 0xfe, 0x4b, 0xea, 0xf2, 0x33, 0xcd, 0x22, 0x6a, 0x83, 0x36, 0x61, 0xf9, 0x8c, 0x50, 0xef, 0x8c, - 0x4b, 0xff, 0x4b, 0x58, 0xef, 0xcc, 0x5f, 0x16, 0x61, 0x1d, 0x13, 0xd7, 0x96, 0xfc, 0x28, 0x48, - 0x01, 0x93, 0x2f, 0x46, 0x24, 0xe6, 0x68, 0x00, 0x0d, 0xaa, 0x1a, 0xd9, 0x72, 0x24, 0x73, 0xea, - 0x92, 0xc8, 0xcf, 0x41, 0x96, 0x6a, 0x71, 0x9d, 0x4e, 0x31, 0xef, 0x03, 0x28, 0x09, 0x8a, 0x88, - 0x9b, 0x05, 0x99, 0xcc, 0x77, 0xf2, 0x0c, 0x65, 0x18, 0x0a, 0x2b, 0x2d, 0xe4, 0xc1, 0x6a, 0x44, - 0x42, 0xdf, 0x76, 0x88, 0x06, 0x94, 0x54, 0xc5, 0x07, 0xf9, 0xa9, 0x7c, 0xd9, 0xb7, 0x36, 0x56, - 0x76, 0x34, 0xcc, 0x46, 0x94, 0xdd, 0xc6, 0xad, 0x11, 0xd4, 0xa7, 0x04, 0xa6, 0x09, 0xc3, 0xb8, - 0x12, 0x61, 0xdc, 0x82, 0x5a, 0x02, 0xfe, 0x4b, 0xca, 0xcf, 0x64, 0xc2, 0x2a, 0xb8, 0xaa, 0xcf, - 0x3e, 0xa3, 0xfc, 0xcc, 0x7c, 0x0a, 0x1b, 0x33, 0x60, 0xe3, 0x90, 0x05, 0x31, 0x99, 0xc4, 0xcd, - 0xb8, 0x4a, 0xdc, 0xcc, 0x3f, 0x1b, 0xb0, 0x31, 0xc9, 0xcb, 0x37, 0x39, 0xc5, 0xe6, 0xcf, 0x60, - 0x73, 0x16, 0xa9, 0x8e, 0x41, 0x0f, 0x56, 0x22, 0xf9, 0x3e, 0x49, 0xa2, 0x70, 0x19, 0x8c, 0xea, - 0x0d, 0x84, 0x13, 0x4d, 0xf3, 0x77, 0x05, 0xb8, 0xd9, 0x93, 0xec, 0xa7, 0x05, 0x0e, 0x93, 0xc9, - 0xe3, 0xff, 0x17, 0x91, 0x01, 0x34, 0xf4, 0xc8, 0x92, 0x58, 0x2c, 0x5c, 0x6c, 0xf1, 0x48, 0x69, - 0x24, 0x16, 0xe3, 0xec, 0x16, 0x1d, 0x43, 0x9d, 0x8d, 0x78, 0x38, 0x4a, 0x21, 0x16, 0xa5, 0xc1, - 0x4e, 0x9e, 0xc1, 0x43, 0xa9, 0x30, 0x6d, 0xb6, 0xa6, 0xac, 0xa8, 0x9d, 0x19, 0xc2, 0xda, 0x1c, - 0x21, 0xf4, 0x09, 0xd4, 0x12, 0xf8, 0xa1, 0xad, 0xeb, 0xb6, 0xda, 0xbd, 0x9b, 0x9b, 0x57, 0x9f, - 0x8d, 0x5c, 0x6d, 0x65, 0x60, 0xf3, 0xb3, 0xc7, 0xd7, 0x70, 0x35, 0x9e, 0x6c, 0x77, 0x97, 0xd5, - 0xc0, 0x61, 0x0e, 0x01, 0x25, 0x8d, 0x72, 0x24, 0x86, 0xc4, 0x98, 0x53, 0x27, 0xfe, 0x5f, 0xf4, - 0xda, 0x3a, 0x94, 0x1c, 0x36, 0x0a, 0xb8, 0xe6, 0x52, 0xb5, 0x31, 0xff, 0xb6, 0x04, 0xcd, 0xd9, - 0xb4, 0x7f, 0x4c, 0xb8, 0x2d, 0x47, 0x9b, 0x77, 0x60, 0x35, 0x8c, 0x98, 0x43, 0xe2, 0x98, 0xb8, - 0x96, 0x78, 0xa1, 0xc5, 0x9a, 0x9c, 0x1b, 0xe9, 0xf1, 0xae, 0x38, 0x45, 0x5d, 0xd8, 0xe0, 0x8c, - 0xdb, 0xbe, 0x45, 0x62, 0x4e, 0x87, 0x62, 0xe0, 0xd0, 0xe2, 0x4b, 0x52, 0x7c, 0x4d, 0x5e, 0xee, - 0x27, 0x77, 0x4a, 0xe7, 0x29, 0xac, 0xa6, 0x2e, 0x59, 0x31, 0xb7, 0x79, 0xd2, 0x1e, 0xed, 0xcb, - 0x38, 0x36, 0x89, 0x8d, 0x28, 0xad, 0xc9, 0x59, 0x3c, 0xfb, 0xea, 0x2f, 0x2e, 0xf2, 0xea, 0x47, - 0x16, 0x6c, 0x46, 0xaa, 0xe8, 0xad, 0x99, 0x8a, 0x2f, 0x2d, 0x5a, 0xf1, 0xeb, 0xda, 0xd0, 0xf4, - 0x9c, 0x9d, 0x79, 0xc0, 0x4c, 0x03, 0x2c, 0x2f, 0xda, 0x00, 0xc9, 0x03, 0xa6, 0x4b, 0xd3, 0x81, - 0x8d, 0xe4, 0x01, 0xd3, 0xfd, 0xb0, 0x72, 0xb5, 0x7e, 0x58, 0xd3, 0xd6, 0x0e, 0xb3, 0x6d, 0x71, - 0x37, 0x65, 0xa4, 0x0c, 0x57, 0xc8, 0xb9, 0x16, 0xc1, 0x52, 0x60, 0x0f, 0xd3, 0xb9, 0x59, 0xac, - 0x4d, 0x1f, 0x5a, 0x07, 0x34, 0x0d, 0x44, 0x32, 0xbb, 0x27, 0xe4, 0x32, 0x47, 0x03, 0xdd, 0x80, - 0x4a, 0x28, 0x42, 0x13, 0xd3, 0xaf, 0x88, 0x7e, 0x8b, 0x97, 0xc5, 0xc1, 0x11, 0xfd, 0x8a, 0xa0, - 0x9b, 0x00, 0xf2, 0x92, 0xb3, 0x67, 0x24, 0x50, 0x53, 0x37, 0x96, 0xe2, 0xc7, 0xe2, 0xc0, 0xfc, - 0x95, 0x01, 0x37, 0xe6, 0x3e, 0x4e, 0x73, 0xe6, 0x87, 0xb0, 0xac, 0x98, 0x6f, 0x01, 0x12, 0xd3, - 0x94, 0xa9, 0x15, 0xd1, 0x1d, 0x58, 0x0d, 0xc8, 0x39, 0xb7, 0x32, 0x30, 0xd4, 0x9b, 0xab, 0x2e, - 0x8e, 0x07, 0x29, 0x94, 0x3f, 0x1a, 0xb0, 0x96, 0x14, 0xec, 0x1e, 0x89, 0x9d, 0x88, 0x86, 0x72, - 0x62, 0x99, 0xe7, 0xf2, 0x2d, 0xa8, 0xb9, 0x34, 0x0e, 0x7d, 0x7b, 0x6c, 0xc9, 0x3b, 0xfd, 0x2a, - 0xd4, 0x67, 0x4f, 0x84, 0xc8, 0x21, 0x80, 0x18, 0xe6, 0x3d, 0x16, 0xd1, 0x74, 0xf6, 0xcb, 0xcd, - 0x67, 0x4f, 0x49, 0x8f, 0x33, 0xcf, 0xc6, 0x19, 0x13, 0xe6, 0x67, 0xb0, 0xae, 0x22, 0xa5, 0x3f, - 0xe0, 0x92, 0x94, 0xb4, 0xa0, 0xac, 0xa5, 0xc6, 0x1a, 0x63, 0xba, 0x17, 0x1f, 0x53, 0xbe, 0x1d, - 0x78, 0x23, 0x55, 0xb9, 0x6e, 0x02, 0xb4, 0x96, 0x1c, 0xf6, 0x98, 0x4b, 0x4c, 0x0f, 0x36, 0x66, - 0x0c, 0xeb, 0xe0, 0x3f, 0x99, 0xf3, 0x99, 0xd9, 0xb9, 0x4c, 0xbf, 0x67, 0x5d, 0x98, 0x7c, 0x71, - 0x9a, 0x07, 0xb0, 0x36, 0xc7, 0xc9, 0x2b, 0x06, 0xd8, 0x7c, 0x08, 0x6f, 0x08, 0xd8, 0x98, 0x31, - 0xde, 0x4b, 0xa3, 0x94, 0x04, 0xe5, 0x25, 0xc7, 0x8d, 0x39, 0x8e, 0x0f, 0x55, 0xa9, 0xcf, 0x5a, - 0xd0, 0xde, 0x4f, 0x27, 0xd0, 0xf8, 0xaf, 0x13, 0xb8, 0xc3, 0x01, 0x32, 0xdf, 0xcb, 0x2d, 0xd8, - 0x3c, 0xe8, 0x7f, 0xb4, 0x7f, 0xd0, 0x7f, 0x7c, 0x78, 0xb8, 0x67, 0x7d, 0xfa, 0xe4, 0x68, 0xb0, - 0xdf, 0xeb, 0x3f, 0xea, 0xef, 0xef, 0x5d, 0xbf, 0x86, 0x5e, 0x83, 0xfa, 0xd3, 0x7d, 0xfc, 0xb9, - 0xf5, 0xe9, 0x13, 0x29, 0xf2, 0xf9, 0x75, 0x03, 0xd5, 0xa0, 0x9c, 0xee, 0x0a, 0x62, 0x37, 0x38, - 0x3c, 0x3a, 0xea, 0xef, 0x1e, 0xec, 0x5f, 0x2f, 0x22, 0x80, 0x65, 0x7d, 0xb3, 0x84, 0x56, 0xa1, - 0x2a, 0x55, 0xf5, 0x41, 0xa9, 0xfb, 0xef, 0x15, 0x80, 0x3d, 0x3f, 0x3c, 0x22, 0xd1, 0x73, 0xea, - 0x10, 0xf4, 0x07, 0x03, 0x1a, 0xd3, 0xf3, 0x09, 0xba, 0x77, 0x39, 0x9a, 0xcc, 0x4c, 0x5d, 0xad, - 0xee, 0x22, 0x2a, 0x2a, 0x9e, 0xe6, 0xed, 0x5f, 0xfc, 0xe3, 0x9f, 0xbf, 0x29, 0xdc, 0x34, 0x9b, - 0xe9, 0x7f, 0x10, 0x47, 0x49, 0xbc, 0xa7, 0xc9, 0xfb, 0x3d, 0x63, 0x07, 0xfd, 0xd6, 0x10, 0x83, - 0x6b, 0x66, 0x82, 0x44, 0xef, 0x2e, 0x3a, 0x19, 0xb7, 0xee, 0x2d, 0xa0, 0xa1, 0xb1, 0x99, 0x12, - 0xdb, 0x9b, 0xe6, 0xeb, 0x2f, 0x61, 0x8b, 0xa4, 0xbc, 0x80, 0xf6, 0x7b, 0x03, 0x36, 0xe7, 0x4f, - 0x5e, 0xe8, 0x87, 0xb9, 0x65, 0x91, 0x37, 0xad, 0xb5, 0x6e, 0x26, 0xaa, 0x99, 0xbf, 0x49, 0xed, - 0x54, 0xca, 0xbc, 0x23, 0x81, 0x6d, 0x99, 0x37, 0x52, 0x60, 0x3a, 0x58, 0x99, 0x3f, 0x4e, 0x02, - 0xdc, 0xdf, 0x0d, 0x58, 0x9b, 0xc3, 0xa3, 0xe8, 0x7e, 0xfe, 0x07, 0xfd, 0xab, 0x78, 0xbe, 0xf5, - 0x83, 0x85, 0xf5, 0x74, 0x24, 0xbb, 0x12, 0xf0, 0x5d, 0xb4, 0x93, 0x02, 0xfe, 0x5a, 0x34, 0xf0, - 0x83, 0x04, 0xb6, 0x9e, 0x63, 0x3b, 0x3b, 0x2f, 0x3a, 0xe9, 0xdf, 0x91, 0xbf, 0x1a, 0x50, 0x9f, - 0x62, 0xa0, 0xfc, 0xa4, 0xcf, 0x63, 0xc1, 0xfc, 0xa4, 0xcf, 0xa5, 0x37, 0xf3, 0xbe, 0x84, 0xfa, - 0x2e, 0x6a, 0xa7, 0x50, 0xa3, 0x29, 0x26, 0xe8, 0x7c, 0x9d, 0xf0, 0xe8, 0x83, 0x9d, 0x17, 0x9d, - 0xc9, 0x8f, 0xb3, 0x3f, 0x19, 0x80, 0x5e, 0xe6, 0x0d, 0xf4, 0xfd, 0x8b, 0x10, 0xcc, 0x65, 0xaa, - 0xd6, 0xfd, 0x45, 0xd5, 0x34, 0xfa, 0xb7, 0x24, 0xfa, 0x37, 0xd0, 0xeb, 0xaf, 0x40, 0xbf, 0xfb, - 0x0c, 0xbe, 0xe5, 0xb0, 0x61, 0x8e, 0xf5, 0xdd, 0xf2, 0x9e, 0x1f, 0x0e, 0xc4, 0x88, 0x35, 0x30, - 0x7e, 0xf2, 0x40, 0xcb, 0x79, 0x4c, 0x50, 0x64, 0x9b, 0x45, 0x5e, 0xc7, 0x23, 0x81, 0x1c, 0xc0, - 0x3a, 0xea, 0xca, 0x0e, 0x69, 0x3c, 0xef, 0x77, 0xe6, 0xfb, 0xae, 0x1f, 0x9e, 0x2c, 0x4b, 0xc9, - 0xef, 0xfd, 0x27, 0x00, 0x00, 0xff, 0xff, 0x5c, 0x0a, 0xe5, 0x73, 0x7c, 0x15, 0x00, 0x00, + // 5192 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x3c, 0x5d, 0x6f, 0x1b, 0xd9, + 0x75, 0x1a, 0x7e, 0x48, 0xe4, 0x91, 0x48, 0xd1, 0x57, 0x1f, 0xa6, 0xe9, 0x75, 0x6c, 0x8f, 0x77, + 0xbd, 0x5e, 0xef, 0x46, 0xca, 0x6a, 0xbf, 0xba, 0xbb, 0xf5, 0xc6, 0x14, 0x45, 0x99, 0x5a, 0x53, + 0xa2, 0x3c, 0xa4, 0x64, 0xbb, 0xbb, 0xdd, 0xc1, 0x88, 0xbc, 0xa2, 0x26, 0x1a, 0xce, 0xd0, 0x33, + 0x43, 0x5b, 0xdc, 0x74, 0xd1, 0xa0, 0x0d, 0x82, 0xb4, 0x45, 0x1f, 0x8a, 0x06, 0x48, 0x51, 0xb4, + 0x08, 0x52, 0xe4, 0x21, 0x0d, 0xda, 0x87, 0x22, 0x7d, 0x49, 0x1b, 0x14, 0x41, 0xf6, 0x2d, 0x45, + 0x9f, 0xfa, 0x01, 0x14, 0x45, 0x11, 0xa0, 0xc8, 0x43, 0xd1, 0xbe, 0xb4, 0xff, 0xa0, 0xb8, 0x1f, + 0xf3, 0xc9, 0x21, 0x45, 0x6a, 0xb5, 0x68, 0xde, 0x78, 0xcf, 0x3d, 0x5f, 0xf7, 0xdc, 0x73, 0xce, + 0x3d, 0xf7, 0xce, 0xbd, 0x84, 0xe7, 0xdb, 0x86, 0xd1, 0xd6, 0xf0, 0x6a, 0xd7, 0x54, 0x9f, 0x2a, + 0xcd, 0xfe, 0x6a, 0x4b, 0xeb, 0xae, 0x3e, 0x5d, 0x3b, 0xc0, 0xb6, 0xf2, 0x2a, 0xf9, 0xbd, 0xd2, + 0x35, 0x0d, 0xdb, 0x40, 0x05, 0x86, 0xb5, 0xc2, 0xb1, 0x56, 0x48, 0x0f, 0xc7, 0x2a, 0x3c, 0xc7, + 0x39, 0x28, 0x5d, 0x75, 0x55, 0xd1, 0x75, 0xc3, 0x56, 0x6c, 0xd5, 0xd0, 0x2d, 0x46, 0x59, 0xb8, + 0xc1, 0x7b, 0x35, 0x43, 0x6f, 0x9b, 0x3d, 0x5d, 0x57, 0xf5, 0xf6, 0xaa, 0xd1, 0xc5, 0x66, 0x00, + 0xe9, 0xd6, 0x08, 0x25, 0x2c, 0xdb, 0x30, 0x95, 0x36, 0xe6, 0x98, 0x97, 0x5d, 0x4c, 0xc3, 0x36, + 0x0e, 0x7a, 0x87, 0xab, 0xb8, 0xd3, 0xb5, 0xfb, 0xbc, 0xf3, 0x6a, 0xb8, 0xd3, 0x56, 0x3b, 0xd8, + 0xb2, 0x95, 0x0e, 0x1f, 0x46, 0x61, 0x99, 0x23, 0xd8, 0xfd, 0x2e, 0x5e, 0x6d, 0x29, 0x76, 0x98, + 0x2b, 0x85, 0x13, 0x22, 0xe3, 0xb0, 0xa5, 0x70, 0xae, 0xe2, 0x4f, 0x13, 0x90, 0xd9, 0xd2, 0xad, + 0x2e, 0x6e, 0xda, 0x25, 0x43, 0x3f, 0x54, 0xdb, 0xa8, 0x04, 0xa0, 0xea, 0x87, 0x86, 0x4c, 0xd0, + 0xad, 0xbc, 0x70, 0x2d, 0x7e, 0x6b, 0x76, 0xed, 0xf9, 0x95, 0xe1, 0x26, 0x5a, 0xd9, 0xd2, 0x0f, + 0x8d, 0x46, 0xbf, 0x8b, 0xa5, 0xb4, 0xca, 0x7f, 0x59, 0x68, 0x1b, 0xb2, 0x1d, 0x55, 0x97, 0x35, + 0xf5, 0x18, 0x6b, 0xea, 0x91, 0x61, 0xb4, 0xf2, 0xb1, 0x6b, 0xc2, 0xad, 0xec, 0xda, 0xcd, 0x51, + 0x8c, 0xaa, 0x2e, 0xb6, 0x94, 0xe9, 0xa8, 0xba, 0xd7, 0x44, 0xd7, 0x61, 0xae, 0xa3, 0x9c, 0xc8, + 0x87, 0xaa, 0xde, 0x52, 0xf5, 0xb6, 0x95, 0x8f, 0x5f, 0x13, 0x6e, 0x25, 0xa5, 0xd9, 0x8e, 0x72, + 0xb2, 0xc9, 0x41, 0xe8, 0x06, 0x64, 0x54, 0xbd, 0xa9, 0xf5, 0x5a, 0x58, 0x7e, 0xd2, 0x33, 0x6c, + 0x9c, 0x4f, 0x5c, 0x13, 0x6e, 0xa5, 0xa4, 0x39, 0x0e, 0x7c, 0x40, 0x60, 0x04, 0x09, 0x9f, 0x30, + 0x24, 0x36, 0xbc, 0x69, 0x86, 0xc4, 0x81, 0x4c, 0x77, 0x05, 0x72, 0xae, 0x01, 0x64, 0x4d, 0xed, + 0xa8, 0xb6, 0x95, 0x9f, 0xa1, 0x66, 0x78, 0x6b, 0xb4, 0x19, 0x7c, 0x56, 0x74, 0x8d, 0x52, 0x25, + 0xf4, 0x52, 0x56, 0xf5, 0x37, 0x2d, 0xb4, 0x0f, 0x17, 0x9a, 0x3d, 0xcb, 0x36, 0x3a, 0xb2, 0xcf, + 0xd4, 0x29, 0x2a, 0xe3, 0xf6, 0x28, 0x19, 0x25, 0x4a, 0xe4, 0x1a, 0x7c, 0xbe, 0x19, 0x68, 0x5b, + 0x85, 0x1e, 0x99, 0x4c, 0x9f, 0x24, 0x54, 0x84, 0xb4, 0x2b, 0x21, 0x2f, 0x5c, 0x13, 0xc6, 0x9e, + 0xcb, 0x94, 0xa3, 0xf1, 0x80, 0xed, 0x63, 0x03, 0xb6, 0x17, 0xef, 0xc0, 0x7c, 0xcd, 0xf1, 0x7a, + 0xee, 0x45, 0xb7, 0xe1, 0x02, 0xa1, 0x52, 0x6d, 0xdc, 0xf1, 0x48, 0x89, 0x02, 0x71, 0x69, 0xbe, + 0xa3, 0x9c, 0x6c, 0xd9, 0xb8, 0xe3, 0x92, 0x7f, 0x5b, 0x80, 0xd9, 0x92, 0xa1, 0xdb, 0x58, 0xb7, + 0x09, 0x1c, 0x21, 0x48, 0xb8, 0xfa, 0xa6, 0x25, 0xfa, 0x1b, 0x2d, 0x42, 0xa2, 0xa5, 0xd8, 0x0a, + 0x95, 0x3e, 0x57, 0x99, 0x92, 0x68, 0x0b, 0x2d, 0x43, 0xf2, 0xa9, 0xa2, 0xf5, 0x30, 0x75, 0x88, + 0x74, 0x65, 0x4a, 0x62, 0x4d, 0xf4, 0x36, 0x24, 0x6d, 0xe5, 0x40, 0x63, 0x4e, 0x30, 0xbb, 0x76, + 0x7d, 0xd4, 0x90, 0x1b, 0x04, 0x91, 0x90, 0x52, 0x8a, 0xf5, 0x59, 0x48, 0x13, 0xd6, 0x54, 0x73, + 0xf1, 0x53, 0x01, 0x92, 0xb4, 0x1f, 0xdd, 0x81, 0x99, 0x23, 0xac, 0xb4, 0xb0, 0xe9, 0x84, 0xc4, + 0x8d, 0x51, 0x3c, 0x37, 0x55, 0xac, 0xb5, 0xb6, 0x5a, 0x92, 0x43, 0x83, 0xde, 0x86, 0x84, 0x69, + 0x3c, 0x23, 0xc6, 0x23, 0xb4, 0x2f, 0x9c, 0xaa, 0xcf, 0x8a, 0x64, 0x3c, 0x93, 0x28, 0x49, 0xe1, + 0x2e, 0xc4, 0x25, 0xe3, 0x19, 0x7a, 0x1b, 0xa6, 0xe9, 0xd8, 0x1c, 0xf9, 0x23, 0xc7, 0xb4, 0x4f, + 0x30, 0x25, 0x4e, 0x20, 0xfe, 0xa6, 0x1b, 0xe2, 0x12, 0xb6, 0x7a, 0x9a, 0x8d, 0xbe, 0x0c, 0x29, + 0xdf, 0x9c, 0x8c, 0x31, 0x1a, 0x8a, 0x2b, 0xb9, 0x44, 0xe8, 0x8b, 0x80, 0x9c, 0xdf, 0xb2, 0x6d, + 0xf6, 0xf4, 0xa6, 0x62, 0x63, 0x16, 0xe2, 0x29, 0xe9, 0x82, 0xd3, 0xd3, 0x70, 0x3a, 0xc4, 0x3f, + 0x8f, 0xc1, 0x0c, 0x67, 0x82, 0x16, 0x21, 0xc9, 0xe2, 0x93, 0xcd, 0x2e, 0x6b, 0x04, 0xfd, 0x34, + 0x76, 0x26, 0x3f, 0xdd, 0x04, 0xf0, 0xa5, 0x9b, 0xf8, 0x44, 0xe9, 0xc6, 0x47, 0x89, 0xee, 0x42, + 0x4a, 0x33, 0x9a, 0xd4, 0x97, 0xb9, 0xfb, 0x8c, 0xd4, 0xa4, 0xca, 0x71, 0x25, 0x97, 0x0a, 0xbd, + 0x0b, 0xb3, 0x4d, 0x13, 0x2b, 0x36, 0x96, 0x49, 0xb6, 0xa5, 0x39, 0x66, 0x76, 0xad, 0xe0, 0x31, + 0x61, 0xf9, 0x7b, 0xa5, 0xe1, 0xe4, 0x6f, 0x09, 0x18, 0x3a, 0x01, 0x88, 0x3f, 0x8e, 0x43, 0xca, + 0xe1, 0x89, 0xee, 0x02, 0x1c, 0xf4, 0x6d, 0x2c, 0x9b, 0x8a, 0xde, 0x76, 0xe2, 0x77, 0xe4, 0xc4, + 0x4b, 0x04, 0x51, 0x4a, 0x13, 0x22, 0xfa, 0x13, 0xbd, 0x0f, 0xf3, 0x4d, 0xa3, 0x85, 0xbb, 0x86, + 0xaa, 0xdb, 0x9c, 0x4d, 0x6c, 0x5c, 0x36, 0x59, 0x97, 0xd2, 0xe1, 0x35, 0xab, 0x76, 0x94, 0x36, + 0x96, 0x0f, 0x8c, 0x13, 0x4c, 0x92, 0x30, 0xf1, 0x9c, 0x97, 0x46, 0x4e, 0x13, 0x41, 0x77, 0x2d, + 0x04, 0x94, 0x7a, 0x9d, 0x10, 0xa3, 0x0d, 0x00, 0x13, 0x37, 0x0d, 0xb3, 0x25, 0x1f, 0xe3, 0x3e, + 0xb7, 0xf3, 0xc8, 0xb0, 0x90, 0x28, 0xf6, 0x7d, 0xdc, 0x97, 0xd2, 0xa6, 0xf3, 0x13, 0xbd, 0x47, + 0x1c, 0x19, 0x6b, 0x2d, 0x59, 0x6d, 0xe5, 0x93, 0x94, 0xc7, 0x78, 0x61, 0x79, 0xc8, 0x7e, 0xa0, + 0x5d, 0xc8, 0xd2, 0xa8, 0x97, 0xdd, 0x19, 0x67, 0x93, 0xf5, 0xd2, 0xa9, 0x01, 0xea, 0x0e, 0x2a, + 0x63, 0xfb, 0x9b, 0xe2, 0x2b, 0x90, 0x09, 0xf4, 0xa3, 0xcb, 0x90, 0x36, 0x8d, 0x67, 0xb2, 0xaa, + 0xb7, 0xf0, 0x09, 0x4f, 0x80, 0x29, 0xd3, 0x78, 0xb6, 0x45, 0xda, 0xe2, 0x2a, 0x24, 0x99, 0x69, + 0x17, 0x21, 0x69, 0xd9, 0x8a, 0x69, 0x73, 0x0c, 0xd6, 0x40, 0x39, 0x88, 0x63, 0x9d, 0xc5, 0x55, + 0x5c, 0x22, 0x3f, 0xc5, 0x26, 0x64, 0x02, 0x36, 0x25, 0x28, 0xb6, 0xd1, 0xa5, 0x64, 0x49, 0x89, + 0xfc, 0x24, 0xd9, 0x53, 0xc3, 0x87, 0x36, 0xcf, 0xd3, 0xf4, 0x37, 0x61, 0xff, 0x4c, 0x6d, 0xd9, + 0x47, 0x7c, 0xe1, 0x64, 0x0d, 0xb4, 0x0c, 0xd3, 0x47, 0x58, 0x6d, 0x1f, 0xd9, 0xd4, 0xfe, 0x49, + 0x89, 0xb7, 0xc4, 0x5f, 0x24, 0x61, 0x51, 0xc2, 0x2d, 0x85, 0x2e, 0x66, 0x24, 0x2b, 0x4b, 0xf8, + 0x49, 0x0f, 0x5b, 0x36, 0x31, 0x97, 0xca, 0x12, 0x89, 0xdc, 0xa4, 0x69, 0x9e, 0xbb, 0xe4, 0x4b, + 0x63, 0xaf, 0x8b, 0x52, 0x46, 0x0d, 0x14, 0x1b, 0x77, 0x20, 0x49, 0x12, 0xad, 0x93, 0x18, 0x5f, + 0x1c, 0xb9, 0xf8, 0x79, 0x4b, 0x84, 0xc4, 0xa8, 0x50, 0x1b, 0xe6, 0x4d, 0xdc, 0xd5, 0x94, 0x26, + 0xe6, 0x0a, 0x39, 0x5e, 0xf9, 0xde, 0x68, 0x57, 0x1a, 0x1c, 0xdb, 0x8a, 0xc4, 0xf8, 0x70, 0x35, + 0xb3, 0xa6, 0xbf, 0x69, 0xa1, 0x4f, 0xe0, 0x22, 0x73, 0x7d, 0x93, 0xd2, 0xaa, 0x86, 0xee, 0x0a, + 0x4c, 0x50, 0x81, 0xe5, 0x89, 0x05, 0xd2, 0x79, 0x94, 0x1c, 0x76, 0x5c, 0xee, 0x92, 0x1a, 0x01, + 0xa5, 0xeb, 0x7a, 0x40, 0xbf, 0x73, 0x5a, 0xd7, 0x1d, 0xdb, 0x3d, 0x53, 0xed, 0x23, 0xea, 0x2f, + 0x69, 0x69, 0x96, 0xc3, 0x1e, 0xaa, 0xf6, 0x51, 0xe1, 0xdf, 0x04, 0x58, 0x8c, 0x52, 0x13, 0x95, + 0xce, 0x28, 0xbe, 0x32, 0xe5, 0x53, 0xe0, 0x16, 0x99, 0x3c, 0xc2, 0x57, 0x56, 0x34, 0x4d, 0xb6, + 0xf1, 0x09, 0xf3, 0xd9, 0x54, 0x65, 0x4a, 0xca, 0xb0, 0x8e, 0xa2, 0xa6, 0x35, 0xf0, 0x89, 0x4d, + 0x92, 0x98, 0xdf, 0xee, 0x9a, 0x61, 0x52, 0x47, 0x3e, 0x25, 0x89, 0x95, 0x08, 0x22, 0x99, 0x49, + 0x57, 0x77, 0xcd, 0x30, 0xd7, 0x53, 0x30, 0x6d, 0x2b, 0x66, 0x1b, 0xdb, 0x62, 0x09, 0x92, 0x14, + 0x44, 0x62, 0xc8, 0xc4, 0x2d, 0x3a, 0x8e, 0x98, 0x44, 0x7e, 0x92, 0x78, 0x69, 0x9b, 0x18, 0xeb, + 0x54, 0xa1, 0x98, 0xc4, 0x1a, 0x24, 0xb2, 0x0e, 0x9c, 0x62, 0x23, 0x26, 0xd1, 0xdf, 0xe2, 0x3e, + 0x2c, 0x85, 0x66, 0xd7, 0xea, 0x1a, 0xba, 0x85, 0x3d, 0xcf, 0x16, 0xce, 0xe2, 0xd9, 0xe2, 0x37, + 0x62, 0x90, 0xdf, 0xc0, 0x6a, 0x0b, 0xeb, 0xb6, 0x7a, 0xd8, 0x0f, 0xc5, 0xe1, 0x63, 0xb8, 0xd0, + 0x72, 0xfb, 0x82, 0xa1, 0xf8, 0xca, 0x28, 0x39, 0x01, 0x86, 0xc4, 0xdd, 0x72, 0xad, 0x10, 0x24, + 0x22, 0xc4, 0x63, 0xe7, 0x15, 0xe2, 0xf1, 0x33, 0x19, 0xe2, 0x2f, 0x05, 0xb8, 0x14, 0x61, 0x88, + 0x73, 0xb1, 0x32, 0x7a, 0x00, 0x69, 0xab, 0xd7, 0xe9, 0x28, 0xa6, 0x8a, 0x9d, 0x14, 0xf4, 0xda, + 0x58, 0x06, 0x54, 0x59, 0xfa, 0xad, 0x53, 0xe2, 0xbe, 0xe4, 0x71, 0x11, 0xbf, 0x2f, 0xc0, 0x92, + 0x67, 0x8f, 0x5f, 0xe6, 0xec, 0x29, 0xfe, 0x3a, 0x2c, 0x87, 0x35, 0xe5, 0x66, 0x2d, 0xc1, 0x8c, + 0x49, 0x4b, 0x45, 0xc7, 0xb0, 0xe3, 0xe8, 0xc8, 0x8a, 0x4b, 0xc9, 0xa1, 0x14, 0xff, 0x37, 0x06, + 0x57, 0x4a, 0xb4, 0xb0, 0xe1, 0x08, 0xee, 0x1e, 0xe1, 0xf3, 0xb3, 0xc8, 0x2e, 0x64, 0xf9, 0x96, + 0x7a, 0x02, 0xf7, 0xad, 0x33, 0x0a, 0x87, 0xa3, 0xe5, 0x6f, 0xa2, 0x06, 0x64, 0x8c, 0x9e, 0xdd, + 0xed, 0xb9, 0x2a, 0xb2, 0xcc, 0xb3, 0x3a, 0x8a, 0x61, 0x8d, 0x12, 0x04, 0xd9, 0xce, 0x31, 0x2e, + 0x9c, 0xeb, 0x3e, 0xe4, 0xdc, 0x73, 0x02, 0x87, 0x31, 0x2b, 0x60, 0x5e, 0x1e, 0xc9, 0x38, 0xb8, + 0xcb, 0x92, 0xe6, 0x8d, 0x20, 0x40, 0xfc, 0xa1, 0x00, 0x0b, 0x11, 0xd2, 0x51, 0xd1, 0xd9, 0x10, + 0x8d, 0x61, 0xe0, 0x75, 0xb5, 0xfd, 0xa0, 0x87, 0xcd, 0x7e, 0x70, 0x63, 0x84, 0x1e, 0xc0, 0x9c, + 0x63, 0xda, 0xae, 0xc2, 0xd7, 0x8b, 0x53, 0xf2, 0x4d, 0x49, 0x33, 0x7a, 0x2d, 0xae, 0xc8, 0xae, + 0x62, 0x1f, 0x55, 0xa6, 0xa4, 0x59, 0xcb, 0x6b, 0xae, 0x4f, 0xb3, 0x8d, 0x9e, 0xd8, 0x01, 0xe4, + 0xac, 0x10, 0x75, 0x5b, 0xb1, 0x55, 0xcb, 0x56, 0x9b, 0xd6, 0x79, 0xac, 0x71, 0x8b, 0x90, 0x6c, + 0x1a, 0x3d, 0xdd, 0xe6, 0x25, 0x14, 0x6b, 0x88, 0x3f, 0x4c, 0x40, 0x3e, 0xec, 0x92, 0xdb, 0xd8, + 0x56, 0xe8, 0x96, 0xf2, 0x45, 0x98, 0xef, 0x9a, 0x46, 0x13, 0x5b, 0x16, 0x6e, 0xc9, 0xa4, 0x8e, + 0x76, 0xb6, 0xad, 0x59, 0x17, 0xbc, 0x4e, 0xa0, 0x68, 0x0d, 0x96, 0x6c, 0xc3, 0x56, 0x34, 0x19, + 0x5b, 0xb6, 0xda, 0x21, 0xfb, 0x1c, 0x8e, 0x9e, 0xa0, 0xe8, 0x0b, 0xb4, 0xb3, 0xec, 0xf4, 0x31, + 0x9a, 0x7d, 0x98, 0xf7, 0x8e, 0x16, 0x2c, 0x5b, 0xb1, 0x9d, 0xd0, 0x5d, 0x19, 0x67, 0x60, 0x9e, + 0x6d, 0x88, 0xdb, 0x7b, 0x30, 0x2b, 0xbc, 0xe3, 0x88, 0x4f, 0xb2, 0xe3, 0x40, 0x32, 0x2c, 0x9b, + 0x2c, 0x20, 0xe5, 0x50, 0x34, 0x26, 0x27, 0x8d, 0xc6, 0x45, 0xce, 0x28, 0x78, 0xa2, 0xe4, 0x13, + 0x10, 0x0a, 0xce, 0xe9, 0x49, 0x83, 0xd3, 0x11, 0x10, 0xf4, 0xee, 0x26, 0x2c, 0x39, 0x02, 0x82, + 0xb1, 0x3a, 0x73, 0xb6, 0x58, 0x5d, 0xe0, 0xdc, 0x6a, 0xbe, 0x90, 0x15, 0x5f, 0x71, 0xb3, 0xa5, + 0x2f, 0x8f, 0xd1, 0xed, 0x34, 0x82, 0x84, 0xae, 0x74, 0xdc, 0xf3, 0x0a, 0xf2, 0x5b, 0xfc, 0xba, + 0x00, 0x85, 0xaa, 0xea, 0x5a, 0xc2, 0x39, 0xeb, 0x70, 0x32, 0x5f, 0x04, 0x09, 0xd9, 0x29, 0x74, + 0x89, 0x6d, 0x2c, 0xf5, 0x63, 0xcc, 0xab, 0xf7, 0x14, 0x01, 0xd4, 0xd5, 0x8f, 0x31, 0xba, 0x02, + 0x40, 0x3b, 0x6d, 0xe3, 0x18, 0xeb, 0xec, 0xb8, 0x43, 0xa2, 0xe8, 0x0d, 0x02, 0x20, 0xa5, 0xfc, + 0xa1, 0xaa, 0xd9, 0xd8, 0xa4, 0xde, 0x97, 0x96, 0x78, 0x4b, 0xfc, 0xa6, 0x00, 0x97, 0x23, 0xd5, + 0xe0, 0x89, 0xbe, 0x08, 0xd3, 0x2c, 0x5d, 0x4f, 0x90, 0x79, 0x79, 0x9e, 0xe7, 0x84, 0xe8, 0x26, + 0xcc, 0xeb, 0xf8, 0xc4, 0x96, 0x7d, 0xea, 0xb1, 0x52, 0x32, 0x43, 0xc0, 0xbb, 0x8e, 0x8a, 0xe2, + 0x9f, 0x0a, 0xb0, 0xe0, 0x78, 0xf2, 0x06, 0xb6, 0x9a, 0xa6, 0xda, 0xa5, 0x3b, 0x98, 0x28, 0x53, + 0x5c, 0x87, 0xb9, 0x96, 0x6a, 0x75, 0x35, 0xa5, 0x2f, 0xd3, 0x3e, 0x5e, 0x9b, 0x72, 0xd8, 0x0e, + 0x41, 0xa9, 0x01, 0x34, 0x15, 0x1b, 0xb7, 0x0d, 0xba, 0x76, 0xb3, 0xda, 0x62, 0xe4, 0x44, 0x97, + 0x18, 0x76, 0xdf, 0x27, 0x5b, 0xf2, 0xb1, 0x10, 0x1f, 0xc2, 0x22, 0xb3, 0x14, 0x3f, 0x4c, 0x73, + 0xa6, 0xaa, 0x00, 0x29, 0x8e, 0xd5, 0xe7, 0x3a, 0xba, 0x6d, 0x74, 0x03, 0x32, 0x9a, 0xa2, 0xb7, + 0x7b, 0xcc, 0xa5, 0x5b, 0x8e, 0xa2, 0x73, 0x0e, 0xb0, 0x64, 0xb4, 0xb0, 0xd8, 0x86, 0xa5, 0x10, + 0x63, 0x6e, 0xfc, 0x9d, 0x88, 0x93, 0xd6, 0xd5, 0x71, 0x12, 0x81, 0x7f, 0x08, 0xde, 0xa1, 0xab, + 0x58, 0x85, 0x85, 0x88, 0x41, 0x9e, 0xd1, 0xc0, 0xe2, 0x5d, 0xb8, 0x44, 0xd4, 0x96, 0x0c, 0xc3, + 0x2e, 0xb9, 0x56, 0x72, 0x8c, 0x32, 0x30, 0x70, 0x21, 0x62, 0xe0, 0x1d, 0x16, 0x02, 0x61, 0x0e, + 0x7c, 0xf4, 0xc1, 0x09, 0x14, 0x3e, 0xfb, 0x04, 0xfe, 0x9d, 0x00, 0xcf, 0x15, 0x75, 0x45, 0xeb, + 0x7f, 0x8c, 0x37, 0x14, 0x5b, 0xa9, 0x1b, 0x3d, 0xb3, 0x89, 0x25, 0xd5, 0x3a, 0xf6, 0x95, 0x1b, + 0x9c, 0xaf, 0xdc, 0xc1, 0xb6, 0xa9, 0x36, 0xc7, 0x71, 0xfa, 0x5d, 0x06, 0xdb, 0xa6, 0x04, 0x52, + 0xa6, 0xeb, 0x6f, 0xa2, 0x2a, 0xcc, 0x59, 0x54, 0x8c, 0xcc, 0x56, 0xd7, 0xf8, 0x84, 0xab, 0xab, + 0x34, 0xcb, 0xc8, 0x69, 0x43, 0xfc, 0xa7, 0x19, 0xc8, 0x04, 0xc4, 0xa1, 0xa7, 0xb0, 0xac, 0xf7, + 0x3a, 0xd8, 0x54, 0x9b, 0x8a, 0xc6, 0xd6, 0x8b, 0x60, 0xa1, 0xf4, 0xde, 0xd8, 0x9a, 0xaf, 0xec, + 0x38, 0x7c, 0xe8, 0x8a, 0xc1, 0x72, 0x5a, 0x65, 0x4a, 0x5a, 0xd4, 0x23, 0xe0, 0xe8, 0x37, 0x20, + 0xef, 0x18, 0x76, 0x40, 0x32, 0x5b, 0xf7, 0xef, 0x8e, 0x2f, 0xb9, 0xe4, 0x71, 0x0a, 0xca, 0x5e, + 0x6e, 0x46, 0xf6, 0xa0, 0xaf, 0x00, 0x3a, 0x96, 0x15, 0xdd, 0xd0, 0xfb, 0x1d, 0xd5, 0xee, 0x07, + 0xeb, 0xae, 0x77, 0xc6, 0x97, 0x7b, 0xbf, 0xe8, 0xb0, 0x70, 0x25, 0xe6, 0x8e, 0x43, 0x30, 0x22, + 0x4b, 0x93, 0x5b, 0xea, 0x53, 0x6c, 0x5a, 0x3e, 0x59, 0x89, 0x49, 0x65, 0x55, 0x37, 0x1c, 0x16, + 0x9e, 0x2c, 0x2d, 0x04, 0x2b, 0x3c, 0x80, 0xc5, 0xa8, 0x59, 0x40, 0x6f, 0x43, 0x92, 0x1e, 0x48, + 0xf1, 0x49, 0x1d, 0xeb, 0x08, 0x8b, 0x51, 0x14, 0xea, 0xb0, 0x1c, 0x6d, 0xde, 0xcf, 0xc2, 0xf4, + 0xdb, 0x02, 0xe4, 0xc2, 0xc6, 0x43, 0x77, 0x21, 0xfd, 0xa4, 0xa7, 0x58, 0xaa, 0xac, 0xb6, 0x26, + 0x3a, 0x02, 0x4f, 0x51, 0xaa, 0xad, 0x16, 0xad, 0xe7, 0xc8, 0xde, 0xc9, 0xee, 0xcb, 0x6a, 0x6b, + 0x9c, 0x33, 0xde, 0x32, 0x45, 0x26, 0x2c, 0x30, 0xff, 0x55, 0xf8, 0x81, 0x00, 0xb9, 0xb0, 0xa9, + 0xcf, 0x41, 0xb3, 0x06, 0x2c, 0x58, 0x58, 0xb7, 0x54, 0x5b, 0x7d, 0x8a, 0x65, 0xc5, 0xb6, 0x4d, + 0xf5, 0xa0, 0x67, 0x3b, 0x07, 0xa5, 0x63, 0xf1, 0x42, 0x2e, 0x7d, 0xd1, 0x21, 0x77, 0xab, 0xdb, + 0x3f, 0x8b, 0xc1, 0x15, 0x92, 0x86, 0x68, 0x6e, 0xb2, 0x54, 0x6b, 0xb0, 0xe6, 0x0c, 0x95, 0x6f, + 0xc2, 0x44, 0xe5, 0x5b, 0x13, 0xf2, 0xbc, 0x5c, 0xc1, 0x2d, 0x39, 0x94, 0xdf, 0x62, 0x93, 0xe6, + 0xb7, 0x65, 0x97, 0x55, 0x30, 0x11, 0x79, 0x25, 0x1c, 0x6e, 0xc9, 0x9f, 0x2d, 0xe5, 0x2d, 0xba, + 0x8c, 0xea, 0xbe, 0xdc, 0xf7, 0xcf, 0xcb, 0x70, 0x39, 0xd2, 0x48, 0xbc, 0xc6, 0xfa, 0xba, 0x30, + 0x98, 0x0a, 0x79, 0xe5, 0xc2, 0x34, 0xa8, 0x8e, 0x3c, 0x80, 0x1b, 0xce, 0x39, 0x94, 0x18, 0x19, + 0x70, 0x30, 0x31, 0x72, 0x35, 0x7e, 0x57, 0x88, 0xca, 0x8c, 0x5c, 0x11, 0x96, 0x35, 0x76, 0xce, + 0xaa, 0x48, 0x38, 0x90, 0x5d, 0x55, 0x06, 0xf2, 0x24, 0x57, 0xe6, 0x24, 0x98, 0x27, 0xb9, 0x16, + 0xac, 0x68, 0xaf, 0x9c, 0x55, 0x0b, 0x2f, 0xf0, 0x5d, 0xf9, 0xbe, 0xac, 0xe9, 0x49, 0xf6, 0x67, + 0x4d, 0x2e, 0x79, 0xfa, 0xb3, 0x49, 0xf6, 0x02, 0xdb, 0x93, 0xac, 0x85, 0x60, 0x85, 0xff, 0x10, + 0xc2, 0x49, 0x94, 0xab, 0xf4, 0x1e, 0xa4, 0x3b, 0xaa, 0x2e, 0xb3, 0xcf, 0x81, 0x63, 0x7c, 0x29, + 0x61, 0x9f, 0xc8, 0x52, 0x1d, 0x55, 0xa7, 0xbf, 0x28, 0xbd, 0x72, 0xc2, 0xe9, 0x63, 0xe3, 0xd3, + 0x2b, 0x27, 0x8c, 0xfe, 0x7d, 0x98, 0x7f, 0xd2, 0x53, 0x74, 0x5b, 0xd5, 0xb0, 0xcc, 0x3f, 0xd4, + 0x25, 0xc6, 0xfd, 0x50, 0x97, 0x75, 0x28, 0x69, 0xd3, 0x2a, 0xfc, 0x67, 0x7c, 0x30, 0xad, 0xf3, + 0x61, 0xfe, 0x48, 0x80, 0xeb, 0x94, 0xbd, 0x7c, 0x48, 0xe3, 0x48, 0x6f, 0xf6, 0xe5, 0x23, 0xd5, + 0xb2, 0x8d, 0xb6, 0xa9, 0x74, 0xe4, 0x83, 0x5e, 0xf3, 0x18, 0xdb, 0x56, 0x3e, 0x49, 0x25, 0xeb, + 0xe7, 0xeb, 0x89, 0x03, 0xe0, 0x8a, 0x23, 0x77, 0x9d, 0x8a, 0x95, 0xbe, 0x40, 0x15, 0xdb, 0x74, + 0xf4, 0x0a, 0x75, 0x5b, 0x85, 0x3f, 0x88, 0xc1, 0xd5, 0x53, 0x78, 0xa0, 0x3b, 0x70, 0x39, 0x3c, + 0x3c, 0xcd, 0x78, 0x86, 0x4d, 0xf9, 0xc0, 0xe8, 0xe9, 0x2d, 0xbe, 0x15, 0xcf, 0x07, 0x05, 0x55, + 0x09, 0xc2, 0x3a, 0xe9, 0x8f, 0x22, 0xef, 0x75, 0xbb, 0x2e, 0x79, 0x2c, 0x8a, 0x7c, 0x8f, 0x20, + 0x30, 0xf2, 0xab, 0x30, 0xcb, 0x4c, 0xc8, 0x36, 0x61, 0x71, 0x8a, 0x0e, 0x0c, 0x44, 0xb7, 0x61, + 0x35, 0xc8, 0x70, 0x84, 0xc0, 0x1c, 0xdf, 0x3e, 0x75, 0x8e, 0x5d, 0x69, 0xd2, 0x1c, 0x63, 0xc0, + 0xa7, 0xfa, 0x67, 0x49, 0xff, 0x5a, 0xcb, 0x27, 0xf9, 0xaf, 0x04, 0xb8, 0x81, 0x9f, 0xf4, 0xd4, + 0xa7, 0x8a, 0x86, 0xf5, 0x26, 0x96, 0x9b, 0x9a, 0x62, 0x59, 0x43, 0xa7, 0xf9, 0xe0, 0xbc, 0x42, + 0xdd, 0x07, 0x08, 0x4f, 0xed, 0x35, 0x9f, 0x3a, 0x25, 0xa2, 0xcd, 0xc0, 0xe4, 0x7e, 0x47, 0x80, + 0x82, 0x47, 0x5f, 0x0e, 0xa1, 0xa3, 0xfb, 0x90, 0x73, 0x17, 0x69, 0x79, 0xd2, 0x0f, 0xd9, 0x59, + 0x67, 0xa5, 0x66, 0x46, 0x43, 0xaf, 0xc3, 0xf2, 0xa0, 0x79, 0xdc, 0x6d, 0x73, 0x5c, 0x5a, 0x0c, + 0x6b, 0x4b, 0xe6, 0xae, 0xf0, 0xf3, 0x18, 0x5c, 0x1a, 0x3a, 0x42, 0xf4, 0x3e, 0x88, 0xd1, 0x3c, + 0x23, 0xfc, 0xef, 0x0b, 0x51, 0xfc, 0x7d, 0x5e, 0x38, 0x9c, 0xd7, 0xa0, 0x33, 0x46, 0xf2, 0x9a, + 0xc4, 0x25, 0xbf, 0x29, 0x44, 0xfb, 0x64, 0xf3, 0x73, 0x70, 0x8b, 0xf0, 0xb4, 0x86, 0x9c, 0xf9, + 0x1b, 0x33, 0xfe, 0xf2, 0x8c, 0x3b, 0xf3, 0x4f, 0x04, 0x78, 0xd9, 0xab, 0xae, 0xc6, 0xcd, 0x5d, + 0x07, 0xe7, 0xb5, 0x8a, 0xf8, 0x00, 0x61, 0xa7, 0x7e, 0xd1, 0x55, 0x6b, 0x7f, 0x74, 0xe2, 0xfa, + 0x49, 0x0c, 0x0a, 0x1e, 0x9b, 0x5f, 0x42, 0xdf, 0x46, 0x45, 0xb8, 0xa2, 0xf7, 0x3a, 0x72, 0x4b, + 0xb5, 0x6c, 0x55, 0x6f, 0xda, 0x72, 0xc8, 0xe0, 0x16, 0xf7, 0x9b, 0x82, 0xde, 0xeb, 0x6c, 0x70, + 0x9c, 0x7a, 0x60, 0xf0, 0x16, 0xfa, 0x10, 0x16, 0x6d, 0xa3, 0x3b, 0x48, 0x39, 0x79, 0x86, 0x43, + 0xb6, 0xd1, 0x0d, 0x71, 0x2f, 0xfc, 0x77, 0x0c, 0x2e, 0x0d, 0x9d, 0x09, 0xb4, 0x0b, 0x2f, 0x0c, + 0x77, 0x91, 0xc1, 0xf8, 0xbb, 0x3e, 0x64, 0xe2, 0x7c, 0x21, 0x38, 0x92, 0xe3, 0x60, 0x14, 0x0e, + 0xe3, 0xf8, 0xff, 0x1a, 0x88, 0x23, 0x5c, 0x79, 0x74, 0x20, 0xae, 0xa7, 0x9c, 0x63, 0x3d, 0x51, + 0x86, 0x6c, 0x70, 0x44, 0xe8, 0x2d, 0xe7, 0xce, 0xd4, 0xd8, 0x45, 0x12, 0xbf, 0x54, 0x15, 0x7d, + 0x98, 0xfe, 0xaf, 0x31, 0x48, 0xb2, 0x0a, 0xe8, 0x05, 0xc8, 0xa8, 0xba, 0x8d, 0xdb, 0xd8, 0xf4, + 0x55, 0x61, 0xf1, 0xca, 0x94, 0x34, 0xc7, 0xc1, 0x0c, 0xed, 0x3a, 0xcc, 0x1e, 0x6a, 0x86, 0x62, + 0xfb, 0x4a, 0x2d, 0xa1, 0x32, 0x25, 0x01, 0x05, 0x32, 0x94, 0x1b, 0x30, 0x67, 0xd9, 0xa6, 0xaa, + 0xb7, 0xe5, 0xe0, 0xed, 0xae, 0x59, 0x06, 0x75, 0xc5, 0x1d, 0x18, 0x86, 0x86, 0x15, 0xa7, 0xe8, + 0x4b, 0xf0, 0x8f, 0xc7, 0x73, 0x1c, 0xcc, 0xd0, 0xca, 0x30, 0xef, 0x5e, 0x94, 0xe4, 0x88, 0xc9, + 0xd3, 0xf6, 0x57, 0x95, 0x29, 0x29, 0xeb, 0x12, 0x31, 0x36, 0x6f, 0x01, 0x10, 0x08, 0xe7, 0xc0, + 0x2a, 0xdd, 0x65, 0x87, 0x03, 0xd9, 0xe6, 0x51, 0xea, 0xda, 0xe1, 0x86, 0xd2, 0xaf, 0x4c, 0x49, + 0x69, 0x82, 0xcb, 0x08, 0xd7, 0x00, 0x5a, 0x64, 0x67, 0xc7, 0x08, 0xd9, 0x81, 0xf4, 0x85, 0x00, + 0xe1, 0x86, 0x62, 0x63, 0x42, 0x43, 0xd0, 0x28, 0x8d, 0xbb, 0x73, 0xfc, 0xed, 0x18, 0xe4, 0xc2, + 0xdf, 0x6c, 0xd1, 0x13, 0xb8, 0xe4, 0x7d, 0x43, 0xb0, 0x4d, 0x45, 0xb7, 0x0e, 0x0d, 0xb3, 0xc3, + 0x6e, 0x9c, 0xf2, 0x39, 0x7d, 0x6d, 0x9c, 0x43, 0xc4, 0x46, 0x90, 0xb4, 0x32, 0x25, 0x5d, 0x54, + 0xa3, 0xbb, 0xd0, 0x57, 0xc8, 0xee, 0x8f, 0x5e, 0xd6, 0x09, 0xcb, 0x63, 0x85, 0xf2, 0xab, 0xa7, + 0x5f, 0xdc, 0x19, 0x94, 0xb6, 0x64, 0x46, 0x75, 0xac, 0xe7, 0x20, 0x1b, 0x14, 0x22, 0xfe, 0x68, + 0x06, 0x2e, 0xee, 0x9a, 0x6a, 0x87, 0x86, 0x67, 0x10, 0x1d, 0x3d, 0x84, 0x6c, 0xf0, 0x02, 0x08, + 0xb7, 0xc0, 0xca, 0x68, 0x8d, 0x28, 0x05, 0xb5, 0xb5, 0x7b, 0x5c, 0x93, 0x09, 0xdc, 0xf8, 0x20, + 0x85, 0x1e, 0xbf, 0x9c, 0x10, 0x38, 0xf6, 0xba, 0x35, 0xd6, 0x35, 0x0f, 0xc6, 0x71, 0xce, 0xf4, + 0xb5, 0x11, 0x86, 0xa5, 0xe6, 0x91, 0x62, 0x2a, 0x4d, 0x1b, 0x9b, 0x72, 0x47, 0xb1, 0x8e, 0x27, + 0xf8, 0x9e, 0x58, 0x72, 0x08, 0xb7, 0x15, 0xeb, 0xd8, 0xe5, 0xbf, 0xd0, 0x1c, 0x04, 0xa3, 0x3e, + 0x5c, 0x69, 0x9a, 0xfd, 0xae, 0x6d, 0xc8, 0x8e, 0x5d, 0x0e, 0x0f, 0x4f, 0xe4, 0xc3, 0x2e, 0x0e, + 0x1e, 0x6d, 0xbd, 0x31, 0x52, 0x1c, 0x65, 0xc0, 0xad, 0xb4, 0x79, 0x78, 0xb2, 0xd9, 0xf5, 0xcc, + 0x74, 0xa9, 0x39, 0xac, 0x13, 0xf5, 0xe0, 0xf2, 0xa1, 0x7a, 0x82, 0x5b, 0xac, 0xd2, 0x61, 0xf9, + 0x88, 0xc4, 0x70, 0xe0, 0x63, 0xd2, 0xeb, 0xa3, 0x4f, 0x53, 0x4e, 0x70, 0x8b, 0xe4, 0xd2, 0x75, + 0x87, 0xd8, 0x95, 0x9b, 0x3f, 0x1c, 0xd2, 0x87, 0x1e, 0x41, 0x6e, 0x40, 0xd6, 0xf4, 0xe9, 0x9f, + 0x52, 0x07, 0x45, 0xcc, 0x1f, 0x84, 0x38, 0xf7, 0xe1, 0x8a, 0xff, 0x86, 0x8c, 0x77, 0x57, 0x37, + 0xf8, 0x79, 0xe9, 0x8d, 0x31, 0x7c, 0xed, 0xa1, 0x6a, 0x1f, 0x39, 0x81, 0xe7, 0xd9, 0xd2, 0x1c, + 0xd6, 0x89, 0xf6, 0x21, 0x47, 0xd3, 0x4d, 0x57, 0x31, 0x5d, 0x0f, 0x4c, 0x51, 0x69, 0x23, 0x17, + 0x62, 0x92, 0x83, 0x76, 0x15, 0xd3, 0xf3, 0x41, 0x9a, 0xc6, 0x3c, 0x08, 0xfa, 0x10, 0x10, 0x77, + 0x8f, 0x23, 0xc5, 0x3a, 0x72, 0x38, 0xa7, 0xc7, 0xf8, 0x94, 0x4b, 0xa9, 0x2a, 0x8a, 0x75, 0xe4, + 0x1d, 0x70, 0x36, 0x43, 0xb0, 0x88, 0xd8, 0xfd, 0x1f, 0x01, 0xb2, 0x41, 0xa5, 0xd0, 0x07, 0x30, + 0x4f, 0x47, 0x65, 0x1b, 0x32, 0x3e, 0xb1, 0x89, 0x03, 0xd3, 0x98, 0xcd, 0x8e, 0xce, 0x5a, 0x41, + 0x26, 0x6e, 0x53, 0xca, 0x10, 0x5e, 0x0d, 0xa3, 0xcc, 0x38, 0x89, 0x5f, 0x13, 0x20, 0xe5, 0xf4, + 0xa1, 0x4b, 0xb0, 0xd4, 0xd8, 0xda, 0x2e, 0xcb, 0xbb, 0x45, 0xa9, 0x21, 0xef, 0xed, 0xd4, 0x77, + 0xcb, 0xa5, 0xad, 0xcd, 0xad, 0xf2, 0x46, 0x6e, 0x0a, 0xa5, 0x20, 0xf1, 0xb8, 0x5c, 0x94, 0x72, + 0x02, 0x4a, 0x43, 0x72, 0xbb, 0xb6, 0xd3, 0xa8, 0xe4, 0x62, 0x28, 0x07, 0x73, 0x1b, 0xc5, 0xc7, + 0x72, 0x6d, 0x53, 0x66, 0x90, 0x38, 0x9a, 0x87, 0x59, 0x0e, 0x79, 0x58, 0x2e, 0xdf, 0xcf, 0x25, + 0x08, 0x0a, 0xf9, 0x45, 0x20, 0x94, 0x3e, 0x49, 0x50, 0x2a, 0xb5, 0x3d, 0x89, 0x40, 0x36, 0x8a, + 0x8f, 0x73, 0xd3, 0xe2, 0x23, 0xc8, 0x85, 0x8d, 0x85, 0x36, 0x00, 0xb8, 0xd9, 0x8f, 0x71, 0x9f, + 0xa7, 0xa8, 0x17, 0x4e, 0x37, 0x37, 0xbd, 0xed, 0xd8, 0x74, 0x7e, 0x8a, 0x0d, 0x40, 0x83, 0xa9, + 0x0b, 0xbd, 0x07, 0x69, 0x1d, 0x3f, 0x9b, 0xf8, 0xe0, 0x43, 0xc7, 0xcf, 0xe8, 0x2f, 0xf1, 0x32, + 0x5c, 0x1a, 0xea, 0xa4, 0x62, 0x16, 0xe6, 0xfc, 0x59, 0x4d, 0xfc, 0x97, 0x18, 0x64, 0x48, 0x36, + 0xb2, 0x1a, 0xc6, 0x56, 0x5b, 0x37, 0x4c, 0x8c, 0x56, 0x00, 0xb9, 0x79, 0xc8, 0x22, 0x93, 0x6a, + 0x1d, 0xab, 0xec, 0x3e, 0x62, 0x9a, 0xfa, 0x88, 0xdb, 0xd7, 0x30, 0xea, 0xc7, 0x6a, 0x17, 0xf5, + 0xe1, 0x72, 0xd3, 0xe8, 0x74, 0x0c, 0x5d, 0x0e, 0x92, 0xa9, 0x94, 0x1d, 0x7f, 0x26, 0xf0, 0x2b, + 0xa7, 0x65, 0x43, 0x57, 0xbe, 0x97, 0x1b, 0xef, 0x99, 0x46, 0x8f, 0xac, 0xdc, 0x79, 0xc6, 0xbe, + 0xe4, 0x13, 0xcc, 0x50, 0xc5, 0xdf, 0x13, 0x20, 0x1b, 0x44, 0x47, 0x57, 0xe1, 0x72, 0xa9, 0x52, + 0x94, 0x8a, 0xa5, 0x46, 0x59, 0x92, 0xef, 0x49, 0xb5, 0xbd, 0xdd, 0x90, 0xa3, 0xcc, 0xc2, 0xcc, + 0xce, 0xde, 0x76, 0x59, 0xda, 0x2a, 0xe5, 0x04, 0xb4, 0x08, 0xb9, 0x62, 0x75, 0xb7, 0x52, 0x94, + 0xf7, 0x76, 0x77, 0xcb, 0x92, 0x5c, 0x2a, 0xd6, 0xcb, 0xb9, 0x98, 0x07, 0xad, 0xd6, 0x1e, 0x3a, + 0x50, 0xea, 0x3a, 0xbb, 0x7b, 0x3b, 0xa5, 0xc6, 0x5e, 0xb1, 0xb1, 0x55, 0xdb, 0xc9, 0x25, 0x50, + 0x16, 0xe0, 0x61, 0x65, 0xab, 0x51, 0xae, 0xef, 0x16, 0x4b, 0xe5, 0x5c, 0x72, 0x7d, 0x0e, 0xc0, + 0xb3, 0x80, 0xf8, 0x5f, 0x02, 0x2c, 0x44, 0xa4, 0x79, 0xf4, 0x32, 0x5c, 0x20, 0x8b, 0x05, 0xcd, + 0x6d, 0x4e, 0x37, 0xff, 0xd8, 0x96, 0xe3, 0x1d, 0x2e, 0x19, 0x7a, 0x1e, 0xb2, 0x7a, 0xaf, 0x73, + 0x80, 0x4d, 0x62, 0x50, 0xd2, 0xcb, 0x3f, 0x23, 0xcf, 0x31, 0x68, 0xc3, 0x20, 0x8c, 0xd1, 0x0d, + 0xb2, 0xb4, 0x91, 0x3a, 0x12, 0xcb, 0x86, 0xd9, 0xc2, 0xec, 0x2e, 0x5d, 0x8a, 0x2c, 0x57, 0x14, + 0x58, 0x23, 0x30, 0xf4, 0x01, 0x2c, 0x46, 0xce, 0x4f, 0xe2, 0xf4, 0xeb, 0x40, 0x81, 0xf9, 0x91, + 0x50, 0x73, 0x70, 0x22, 0x3e, 0x15, 0x20, 0x3f, 0x2c, 0xd7, 0xa3, 0x75, 0x98, 0x0d, 0x57, 0xfc, + 0x63, 0x79, 0x34, 0x68, 0x5e, 0xf5, 0xbf, 0x0e, 0xb3, 0xe1, 0x1a, 0x7f, 0x3c, 0x1e, 0xbd, 0x91, + 0xf5, 0xbe, 0xe0, 0xaf, 0xf7, 0xc5, 0xef, 0xc5, 0x60, 0x3e, 0xac, 0x7c, 0x15, 0x66, 0x9c, 0x7d, + 0x2c, 0xdb, 0x01, 0xae, 0x4d, 0xb0, 0x06, 0xf1, 0xb6, 0xe4, 0xb0, 0x28, 0xfc, 0x54, 0x80, 0x69, + 0xbe, 0x43, 0x7a, 0x0d, 0xe2, 0x1d, 0x55, 0x1f, 0xdf, 0x1a, 0x04, 0x9b, 0x12, 0x29, 0x27, 0xe3, + 0x0f, 0x9f, 0x60, 0xa3, 0x1d, 0xb8, 0xc0, 0xd7, 0xa5, 0x0e, 0xd6, 0x6d, 0x5f, 0x05, 0x3e, 0x16, + 0x8b, 0x9c, 0x8f, 0x96, 0xe5, 0x97, 0xaf, 0x25, 0xe0, 0xd2, 0xd0, 0x8a, 0xe2, 0x7c, 0x32, 0x23, + 0xba, 0x03, 0x33, 0x4d, 0x43, 0x77, 0xaf, 0x90, 0x8e, 0x7b, 0x0d, 0x9c, 0xd3, 0xa0, 0x13, 0x98, + 0xe7, 0x39, 0x49, 0xd1, 0xba, 0x47, 0xca, 0x01, 0x66, 0x67, 0xf9, 0xd9, 0xb5, 0xed, 0x33, 0x95, + 0x49, 0x2b, 0x9b, 0x87, 0x27, 0x25, 0xca, 0x6f, 0x47, 0xa1, 0x9f, 0x84, 0x38, 0x53, 0xb2, 0x1e, + 0x33, 0x39, 0x0e, 0x04, 0xbd, 0x04, 0xfc, 0x0d, 0x8f, 0x27, 0x39, 0xc9, 0x53, 0x67, 0x96, 0x75, + 0xb8, 0xa8, 0xcb, 0x90, 0x34, 0x95, 0x96, 0x7a, 0x42, 0x8b, 0x9b, 0x64, 0x65, 0x4a, 0x62, 0x4d, + 0xf1, 0x5b, 0x02, 0x5c, 0x1c, 0x22, 0x10, 0xdd, 0x86, 0x9b, 0x9b, 0x9b, 0x8f, 0xe4, 0x52, 0x6d, + 0x7b, 0xbb, 0xb6, 0x23, 0xef, 0x14, 0x1b, 0x5b, 0xfb, 0x65, 0x99, 0x26, 0xab, 0xf5, 0x72, 0x63, + 0x54, 0xa6, 0x23, 0xab, 0x5a, 0xf9, 0x51, 0x71, 0xa3, 0x5c, 0xda, 0xda, 0x2e, 0x56, 0x73, 0x31, + 0xf4, 0x1c, 0xe4, 0xbd, 0xa4, 0xc7, 0x58, 0xc8, 0x0e, 0x7a, 0x1c, 0x5d, 0x80, 0x4c, 0x10, 0x94, + 0x58, 0x07, 0x48, 0x39, 0x43, 0x12, 0x7f, 0x27, 0x06, 0x69, 0x77, 0xde, 0xd0, 0x0e, 0xa4, 0x69, + 0x95, 0xa0, 0x62, 0xdd, 0x1e, 0xa7, 0x5c, 0x6f, 0x38, 0xc8, 0x2e, 0x0b, 0xba, 0xc3, 0x72, 0xa0, + 0x84, 0x5f, 0x4f, 0x7f, 0x66, 0x2a, 0xdd, 0x2e, 0x76, 0x42, 0x7d, 0x24, 0xbf, 0x3d, 0x07, 0x39, + 0xc0, 0xcf, 0x65, 0x81, 0x24, 0x98, 0x3d, 0xee, 0x58, 0xb2, 0xc3, 0x71, 0x8c, 0xfa, 0xfc, 0x7e, + 0xc7, 0x7a, 0x38, 0xc8, 0x12, 0x8e, 0x5d, 0x30, 0xd9, 0x90, 0xb3, 0xaf, 0x66, 0xe2, 0x2d, 0x40, + 0x83, 0x03, 0x8a, 0xbc, 0x42, 0x74, 0x13, 0xd0, 0xa0, 0xaa, 0x28, 0x07, 0x71, 0x27, 0x52, 0xe6, + 0x24, 0xf2, 0x53, 0xfc, 0x08, 0x16, 0x22, 0x14, 0x20, 0xf9, 0x8b, 0x13, 0xcb, 0x1e, 0x01, 0x70, + 0x10, 0x41, 0xb8, 0x09, 0xf3, 0x5e, 0xe8, 0xf9, 0xaf, 0x81, 0x64, 0xdc, 0xc0, 0xa2, 0x17, 0x41, + 0x7e, 0x1e, 0x83, 0x8b, 0x43, 0x36, 0x8d, 0xc8, 0x86, 0xf9, 0xc1, 0x2d, 0x28, 0xc9, 0x7b, 0xef, + 0x9f, 0x61, 0x0b, 0x3a, 0x04, 0x2e, 0x85, 0x45, 0x14, 0xfe, 0x41, 0x80, 0xe5, 0x68, 0xdc, 0xf3, + 0x79, 0xbd, 0xa8, 0x43, 0xbe, 0xeb, 0x6c, 0x38, 0x43, 0x5b, 0x5e, 0xee, 0x60, 0xaf, 0x9d, 0xf2, + 0x49, 0x35, 0x6a, 0xb3, 0x2a, 0x5d, 0xec, 0x46, 0x77, 0x88, 0xdf, 0x8a, 0xc3, 0x02, 0x4d, 0x4a, + 0xa1, 0xc1, 0xbc, 0x0b, 0xd3, 0xf4, 0x8b, 0xfc, 0x44, 0x9f, 0xb5, 0x39, 0x09, 0xda, 0x82, 0x74, + 0xd3, 0xd0, 0x5b, 0x2a, 0xd5, 0x3a, 0x7e, 0xfa, 0x86, 0x88, 0xed, 0xd3, 0x4b, 0x0e, 0x89, 0xe4, + 0x51, 0xa3, 0xee, 0x08, 0x7b, 0x24, 0xce, 0x6c, 0x8f, 0xca, 0xd4, 0x50, 0x8b, 0x8c, 0x3e, 0xe4, + 0x48, 0x7e, 0x1e, 0x87, 0x1c, 0x11, 0x9b, 0x97, 0x7f, 0x17, 0x60, 0x29, 0xf2, 0xf4, 0x02, 0xb5, + 0x60, 0x89, 0xbd, 0x3b, 0x8a, 0x76, 0xfe, 0xd5, 0x53, 0xe7, 0x29, 0xe4, 0x19, 0x8b, 0x87, 0x83, + 0x40, 0x0b, 0x7d, 0x04, 0x0b, 0xfc, 0xd8, 0xc5, 0xea, 0x75, 0xbb, 0x26, 0xb6, 0x2c, 0x7e, 0xe6, + 0x42, 0x64, 0x7c, 0xf1, 0xf4, 0xb9, 0xac, 0x7b, 0x54, 0x12, 0x32, 0xc3, 0x20, 0x4b, 0xfc, 0x08, + 0x2e, 0x0c, 0x20, 0x06, 0xdd, 0x46, 0xf8, 0x2c, 0x6e, 0x23, 0x7e, 0x9a, 0x84, 0xf9, 0x50, 0x37, + 0x7a, 0x0c, 0xb3, 0xf8, 0xc4, 0x1b, 0x0b, 0xf3, 0xcb, 0xb7, 0x26, 0x10, 0xb0, 0x52, 0xf6, 0xc8, + 0x25, 0x3f, 0xaf, 0xc2, 0xdf, 0x0b, 0x90, 0xf6, 0x04, 0x9d, 0xfd, 0xfe, 0x0b, 0x7a, 0x1f, 0x52, + 0xec, 0x5e, 0x35, 0x7f, 0x67, 0x92, 0x3d, 0xed, 0x38, 0x49, 0xa3, 0x13, 0xa6, 0x68, 0x35, 0x4e, + 0x25, 0xb9, 0xf4, 0xde, 0x69, 0x6b, 0x62, 0xb2, 0xd3, 0xd6, 0x42, 0x13, 0xc0, 0x1d, 0x8c, 0x85, + 0xf6, 0x00, 0x5c, 0xbb, 0x3a, 0x5e, 0xf6, 0xc6, 0x24, 0x56, 0xf3, 0x26, 0xc8, 0xc7, 0xa8, 0xf0, + 0xdd, 0x18, 0xcc, 0xfa, 0xec, 0x89, 0x4c, 0xc8, 0x69, 0x46, 0x9b, 0xde, 0x6c, 0x70, 0x2d, 0xc0, + 0x36, 0xe7, 0xf7, 0xce, 0x38, 0x45, 0x2b, 0x55, 0xc6, 0xcf, 0x35, 0xcd, 0xbc, 0x16, 0x04, 0xa0, + 0x47, 0x81, 0xa1, 0x31, 0x87, 0x78, 0xf3, 0x4c, 0x43, 0x23, 0xe1, 0xed, 0xe3, 0x25, 0xfe, 0x2a, + 0xcc, 0x87, 0xa4, 0xa3, 0x6b, 0xf0, 0x5c, 0xb5, 0x76, 0x6f, 0xab, 0x54, 0xac, 0xca, 0xb5, 0xdd, + 0xb2, 0x54, 0x6c, 0xd4, 0xa4, 0x50, 0x19, 0x34, 0x03, 0xf1, 0xe2, 0xce, 0x46, 0x4e, 0x70, 0x0f, + 0x61, 0xff, 0x5a, 0x80, 0x8b, 0x43, 0xde, 0x7d, 0x90, 0xdd, 0x99, 0x9b, 0x01, 0xdc, 0xfb, 0xdf, + 0xec, 0x78, 0x3c, 0xe7, 0xeb, 0x60, 0x97, 0xbf, 0x35, 0xc8, 0x07, 0xd3, 0x85, 0xec, 0xbd, 0x3d, + 0x61, 0xf7, 0x57, 0x5f, 0x3d, 0xb5, 0x0c, 0x72, 0x69, 0x9d, 0x97, 0x27, 0x17, 0xed, 0x08, 0xb0, + 0x8a, 0x2d, 0xf1, 0xf7, 0xa7, 0x61, 0x29, 0x92, 0xe4, 0x3c, 0xee, 0xd5, 0xbb, 0xc1, 0x15, 0x9b, + 0x38, 0xb8, 0x3e, 0x08, 0xa7, 0x59, 0x3e, 0xe5, 0x67, 0x5a, 0x51, 0x43, 0xac, 0x86, 0xe7, 0xe5, + 0xe4, 0x79, 0xe6, 0xe5, 0x7d, 0x98, 0x0f, 0xe5, 0x65, 0x7e, 0xe0, 0x38, 0x61, 0x4e, 0xce, 0x06, + 0x73, 0x32, 0x7a, 0xec, 0xbd, 0xba, 0x61, 0xdb, 0xec, 0x2f, 0x4f, 0xec, 0x0f, 0x2b, 0x8e, 0x5f, + 0x04, 0xdf, 0xe2, 0x14, 0xbe, 0x23, 0x40, 0x26, 0xd0, 0xe5, 0x7d, 0xcd, 0x11, 0x7c, 0x5f, 0x73, + 0xd0, 0x47, 0x90, 0x70, 0xef, 0x31, 0x67, 0x47, 0x17, 0x71, 0xd1, 0xf2, 0x43, 0x06, 0xa4, 0xb2, + 0x4a, 0x46, 0x0b, 0x4b, 0x94, 0x2f, 0xca, 0xc3, 0x4c, 0x0b, 0xdb, 0x8a, 0xaa, 0x59, 0xfc, 0x0e, + 0xbb, 0xd3, 0x14, 0x3f, 0x82, 0xfc, 0x30, 0x5a, 0xb2, 0x8d, 0x69, 0x48, 0xc5, 0x9d, 0xfa, 0x66, + 0x4d, 0xda, 0xa6, 0xc7, 0x29, 0xb2, 0x54, 0xae, 0xef, 0x55, 0x1b, 0x72, 0xa9, 0xb6, 0x51, 0x1e, + 0xdc, 0xc6, 0xd4, 0xf7, 0x4a, 0xa5, 0x72, 0xbd, 0xce, 0x0e, 0xf7, 0xca, 0x92, 0x54, 0x93, 0x72, + 0xb1, 0xdb, 0x36, 0x80, 0xef, 0x0f, 0x25, 0x0a, 0xb0, 0x5c, 0xdd, 0xba, 0x5f, 0xae, 0x6e, 0x55, + 0x6a, 0xb5, 0x8d, 0x10, 0x87, 0x0b, 0x90, 0xd9, 0x2f, 0x4b, 0x8f, 0xe5, 0xbd, 0x1d, 0x8a, 0xf2, + 0x38, 0x27, 0xa0, 0x39, 0x48, 0xb9, 0xad, 0x18, 0x69, 0xed, 0xd6, 0xea, 0xf5, 0xad, 0xf5, 0x6a, + 0x39, 0x17, 0x47, 0x00, 0xd3, 0xbc, 0x27, 0x41, 0xb6, 0x4d, 0x94, 0x94, 0x03, 0x92, 0xb7, 0xff, + 0x56, 0x00, 0x34, 0xb8, 0x3e, 0xa0, 0x1b, 0x70, 0x55, 0x2a, 0x57, 0xe9, 0x50, 0x86, 0x67, 0xa2, + 0x39, 0x48, 0x95, 0x1f, 0xec, 0x15, 0xab, 0x72, 0xa3, 0x96, 0x13, 0x50, 0x0e, 0xe6, 0x76, 0x6a, + 0x0d, 0xd9, 0x85, 0xd0, 0xe3, 0xca, 0x7b, 0x52, 0xb9, 0xd8, 0x28, 0x4b, 0x72, 0xa3, 0x52, 0xdc, + 0xc9, 0xc5, 0x51, 0x06, 0xd2, 0xd5, 0x72, 0xbd, 0xce, 0x9a, 0x09, 0x32, 0x48, 0x3f, 0x82, 0x5c, + 0x93, 0x18, 0x79, 0x3d, 0x97, 0x44, 0x17, 0x61, 0xc1, 0x45, 0xf5, 0x75, 0x4c, 0x93, 0xe1, 0x94, + 0x1f, 0x6d, 0xd5, 0x1b, 0xf5, 0xdc, 0xcc, 0xda, 0x8f, 0x01, 0x60, 0x43, 0xeb, 0xd6, 0xb1, 0xf9, + 0x54, 0x6d, 0x62, 0xf4, 0x27, 0x02, 0x64, 0x83, 0x0f, 0xc6, 0xd0, 0xab, 0xe3, 0xbd, 0x0d, 0xf1, + 0x3d, 0x83, 0x2b, 0xac, 0x4d, 0x42, 0xc2, 0xee, 0x8a, 0x8b, 0x37, 0x7e, 0xeb, 0x1f, 0x7f, 0xf1, + 0x87, 0xb1, 0x2b, 0x62, 0xde, 0xfd, 0xe3, 0x94, 0x26, 0xc3, 0x78, 0x87, 0xbf, 0x58, 0x79, 0x47, + 0xb8, 0x8d, 0xfe, 0x48, 0x80, 0x4c, 0xe0, 0x2d, 0x26, 0xfa, 0xd2, 0xa4, 0x8f, 0x72, 0x0b, 0xaf, + 0x4e, 0x40, 0xc1, 0x75, 0x13, 0xa9, 0x6e, 0xcf, 0x89, 0x17, 0x07, 0x74, 0x63, 0xdf, 0x7f, 0x88, + 0x6a, 0xdf, 0x17, 0xe0, 0xc2, 0xc0, 0x23, 0x46, 0xf4, 0xfa, 0xd8, 0x6f, 0x35, 0xfd, 0x2a, 0xbe, + 0x31, 0x21, 0x15, 0x57, 0xf3, 0x26, 0x55, 0xf3, 0x9a, 0x78, 0x79, 0x40, 0x4d, 0xef, 0x0d, 0x28, + 0x51, 0xf5, 0x8f, 0x05, 0x58, 0x8e, 0x7e, 0xb5, 0x87, 0xde, 0x1e, 0x7d, 0x1a, 0x32, 0xe2, 0xa5, + 0x5f, 0xe1, 0x8a, 0x43, 0xea, 0xfb, 0xa7, 0x1c, 0xef, 0x35, 0x5b, 0x84, 0x72, 0x7c, 0x5e, 0x7d, + 0xff, 0xa6, 0xc3, 0xa7, 0x78, 0x29, 0xf2, 0x8a, 0x3f, 0x1a, 0x79, 0x62, 0x3c, 0xea, 0x55, 0xc0, + 0xe4, 0xaa, 0xb5, 0x5c, 0x36, 0xef, 0x28, 0x8c, 0x31, 0x51, 0xed, 0x6f, 0x04, 0x58, 0x88, 0x78, + 0x69, 0x83, 0xde, 0x1c, 0xfd, 0x17, 0x14, 0xc3, 0x5e, 0x08, 0x15, 0xde, 0x9a, 0x98, 0x8e, 0x4f, + 0xf4, 0x1a, 0x55, 0xf8, 0x15, 0x74, 0xdb, 0x55, 0xf8, 0xab, 0x64, 0x6f, 0x7f, 0xc7, 0xb1, 0x28, + 0x5f, 0x12, 0x56, 0x6f, 0x7f, 0xb2, 0xea, 0xfe, 0x9f, 0xc7, 0x5f, 0x08, 0x90, 0x09, 0xbc, 0x51, + 0x19, 0x1d, 0x3a, 0x51, 0xef, 0x64, 0x46, 0x87, 0x4e, 0xe4, 0x03, 0x18, 0xf1, 0x4d, 0xaa, 0xea, + 0x97, 0xd0, 0x8a, 0xab, 0xaa, 0x19, 0x78, 0x2b, 0xb2, 0xfa, 0x55, 0xe7, 0xa5, 0xcd, 0x9d, 0xdb, + 0x9f, 0xac, 0x7a, 0xfb, 0xf3, 0xef, 0x09, 0x80, 0x06, 0x5f, 0x96, 0xa0, 0x37, 0x4e, 0xd3, 0x20, + 0xf2, 0x2d, 0x4b, 0xe1, 0xcd, 0x49, 0xc9, 0xb8, 0xf6, 0x57, 0xa9, 0xf6, 0x97, 0xd0, 0xc5, 0x21, + 0xda, 0xaf, 0x7f, 0x57, 0x80, 0x2f, 0x34, 0x8d, 0xce, 0x08, 0xf6, 0xeb, 0xa9, 0x0d, 0xad, 0xbb, + 0x6b, 0x1a, 0xb6, 0xb1, 0x2b, 0xfc, 0xda, 0x1d, 0x8e, 0xd7, 0x36, 0x34, 0x45, 0x6f, 0xaf, 0x18, + 0x66, 0x7b, 0xb5, 0x8d, 0x75, 0x7a, 0x3b, 0x61, 0x95, 0x75, 0x29, 0x5d, 0xd5, 0x8a, 0xfa, 0x1b, + 0xa9, 0x77, 0x5b, 0x5a, 0xf7, 0x07, 0xb1, 0xfc, 0x3d, 0x46, 0x4f, 0x5f, 0x5d, 0xae, 0x6c, 0x68, + 0xdd, 0x95, 0xfd, 0xb5, 0x75, 0xd2, 0xfd, 0x33, 0xa7, 0xeb, 0x43, 0xda, 0xf5, 0xe1, 0x86, 0xd6, + 0xfd, 0x70, 0x9f, 0x51, 0x1e, 0x4c, 0x53, 0xfe, 0xaf, 0xfd, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xac, 0x11, 0x04, 0x57, 0x2a, 0x4b, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/privacy/dlp/v2beta1/storage.pb.go b/vendor/google.golang.org/genproto/googleapis/privacy/dlp/v2beta1/storage.pb.go index dc6c894..7ec5a39 100644 --- a/vendor/google.golang.org/genproto/googleapis/privacy/dlp/v2beta1/storage.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/privacy/dlp/v2beta1/storage.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/privacy/dlp/v2beta1/storage.proto -// DO NOT EDIT! package dlp @@ -8,6 +7,7 @@ import proto "github.com/golang/protobuf/proto" import fmt "fmt" import math "math" import _ "google.golang.org/genproto/googleapis/api/annotations" +import _ "github.com/golang/protobuf/ptypes/timestamp" // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -16,7 +16,7 @@ var _ = math.Inf // Type of information detected by the API. type InfoType struct { - // Name of the information type, provided by the API call ListInfoTypes. + // Name of the information type. Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` } @@ -32,16 +32,249 @@ func (m *InfoType) GetName() string { return "" } +// Custom information type provided by the user. Used to find domain-specific +// sensitive information configurable to the data in question. +type CustomInfoType struct { + // Info type configuration. All custom info types must have configurations + // that do not conflict with built-in info types or other custom info types. + InfoType *InfoType `protobuf:"bytes,1,opt,name=info_type,json=infoType" json:"info_type,omitempty"` + // Types that are valid to be assigned to Type: + // *CustomInfoType_Dictionary_ + Type isCustomInfoType_Type `protobuf_oneof:"type"` +} + +func (m *CustomInfoType) Reset() { *m = CustomInfoType{} } +func (m *CustomInfoType) String() string { return proto.CompactTextString(m) } +func (*CustomInfoType) ProtoMessage() {} +func (*CustomInfoType) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +type isCustomInfoType_Type interface { + isCustomInfoType_Type() +} + +type CustomInfoType_Dictionary_ struct { + Dictionary *CustomInfoType_Dictionary `protobuf:"bytes,2,opt,name=dictionary,oneof"` +} + +func (*CustomInfoType_Dictionary_) isCustomInfoType_Type() {} + +func (m *CustomInfoType) GetType() isCustomInfoType_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *CustomInfoType) GetInfoType() *InfoType { + if m != nil { + return m.InfoType + } + return nil +} + +func (m *CustomInfoType) GetDictionary() *CustomInfoType_Dictionary { + if x, ok := m.GetType().(*CustomInfoType_Dictionary_); ok { + return x.Dictionary + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*CustomInfoType) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _CustomInfoType_OneofMarshaler, _CustomInfoType_OneofUnmarshaler, _CustomInfoType_OneofSizer, []interface{}{ + (*CustomInfoType_Dictionary_)(nil), + } +} + +func _CustomInfoType_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*CustomInfoType) + // type + switch x := m.Type.(type) { + case *CustomInfoType_Dictionary_: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Dictionary); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("CustomInfoType.Type has unexpected type %T", x) + } + return nil +} + +func _CustomInfoType_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*CustomInfoType) + switch tag { + case 2: // type.dictionary + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CustomInfoType_Dictionary) + err := b.DecodeMessage(msg) + m.Type = &CustomInfoType_Dictionary_{msg} + return true, err + default: + return false, nil + } +} + +func _CustomInfoType_OneofSizer(msg proto.Message) (n int) { + m := msg.(*CustomInfoType) + // type + switch x := m.Type.(type) { + case *CustomInfoType_Dictionary_: + s := proto.Size(x.Dictionary) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Custom information type based on a dictionary of words or phrases. This can +// be used to match sensitive information specific to the data, such as a list +// of employee IDs or job titles. +// +// Dictionary words are case-insensitive and all characters other than letters +// and digits in the unicode [Basic Multilingual +// Plane](https://en.wikipedia.org/wiki/Plane_%28Unicode%29#Basic_Multilingual_Plane) +// will be replaced with whitespace when scanning for matches, so the +// dictionary phrase "Sam Johnson" will match all three phrases "sam johnson", +// "Sam, Johnson", and "Sam (Johnson)". Additionally, the characters +// surrounding any match must be of a different type than the adjacent +// characters within the word, so letters must be next to non-letters and +// digits next to non-digits. For example, the dictionary word "jen" will +// match the first three letters of the text "jen123" but will return no +// matches for "jennifer". +// +// Dictionary words containing a large number of characters that are not +// letters or digits may result in unexpected findings because such characters +// are treated as whitespace. +type CustomInfoType_Dictionary struct { + // Types that are valid to be assigned to Source: + // *CustomInfoType_Dictionary_WordList_ + Source isCustomInfoType_Dictionary_Source `protobuf_oneof:"source"` +} + +func (m *CustomInfoType_Dictionary) Reset() { *m = CustomInfoType_Dictionary{} } +func (m *CustomInfoType_Dictionary) String() string { return proto.CompactTextString(m) } +func (*CustomInfoType_Dictionary) ProtoMessage() {} +func (*CustomInfoType_Dictionary) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1, 0} } + +type isCustomInfoType_Dictionary_Source interface { + isCustomInfoType_Dictionary_Source() +} + +type CustomInfoType_Dictionary_WordList_ struct { + WordList *CustomInfoType_Dictionary_WordList `protobuf:"bytes,1,opt,name=word_list,json=wordList,oneof"` +} + +func (*CustomInfoType_Dictionary_WordList_) isCustomInfoType_Dictionary_Source() {} + +func (m *CustomInfoType_Dictionary) GetSource() isCustomInfoType_Dictionary_Source { + if m != nil { + return m.Source + } + return nil +} + +func (m *CustomInfoType_Dictionary) GetWordList() *CustomInfoType_Dictionary_WordList { + if x, ok := m.GetSource().(*CustomInfoType_Dictionary_WordList_); ok { + return x.WordList + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*CustomInfoType_Dictionary) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _CustomInfoType_Dictionary_OneofMarshaler, _CustomInfoType_Dictionary_OneofUnmarshaler, _CustomInfoType_Dictionary_OneofSizer, []interface{}{ + (*CustomInfoType_Dictionary_WordList_)(nil), + } +} + +func _CustomInfoType_Dictionary_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*CustomInfoType_Dictionary) + // source + switch x := m.Source.(type) { + case *CustomInfoType_Dictionary_WordList_: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.WordList); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("CustomInfoType_Dictionary.Source has unexpected type %T", x) + } + return nil +} + +func _CustomInfoType_Dictionary_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*CustomInfoType_Dictionary) + switch tag { + case 1: // source.word_list + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CustomInfoType_Dictionary_WordList) + err := b.DecodeMessage(msg) + m.Source = &CustomInfoType_Dictionary_WordList_{msg} + return true, err + default: + return false, nil + } +} + +func _CustomInfoType_Dictionary_OneofSizer(msg proto.Message) (n int) { + m := msg.(*CustomInfoType_Dictionary) + // source + switch x := m.Source.(type) { + case *CustomInfoType_Dictionary_WordList_: + s := proto.Size(x.WordList) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Message defining a list of words or phrases to search for in the data. +type CustomInfoType_Dictionary_WordList struct { + // Words or phrases defining the dictionary. The dictionary must contain + // at least one phrase and every phrase must contain at least 2 characters + // that are letters or digits. [required] + Words []string `protobuf:"bytes,1,rep,name=words" json:"words,omitempty"` +} + +func (m *CustomInfoType_Dictionary_WordList) Reset() { *m = CustomInfoType_Dictionary_WordList{} } +func (m *CustomInfoType_Dictionary_WordList) String() string { return proto.CompactTextString(m) } +func (*CustomInfoType_Dictionary_WordList) ProtoMessage() {} +func (*CustomInfoType_Dictionary_WordList) Descriptor() ([]byte, []int) { + return fileDescriptor1, []int{1, 0, 0} +} + +func (m *CustomInfoType_Dictionary_WordList) GetWords() []string { + if m != nil { + return m.Words + } + return nil +} + // General identifier of a data field in a storage service. type FieldId struct { - // Column name describing the field. + // Name describing the field. ColumnName string `protobuf:"bytes,1,opt,name=column_name,json=columnName" json:"column_name,omitempty"` } func (m *FieldId) Reset() { *m = FieldId{} } func (m *FieldId) String() string { return proto.CompactTextString(m) } func (*FieldId) ProtoMessage() {} -func (*FieldId) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } +func (*FieldId) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } func (m *FieldId) GetColumnName() string { if m != nil { @@ -66,7 +299,7 @@ type PartitionId struct { func (m *PartitionId) Reset() { *m = PartitionId{} } func (m *PartitionId) String() string { return proto.CompactTextString(m) } func (*PartitionId) ProtoMessage() {} -func (*PartitionId) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } +func (*PartitionId) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } func (m *PartitionId) GetProjectId() string { if m != nil { @@ -91,7 +324,7 @@ type KindExpression struct { func (m *KindExpression) Reset() { *m = KindExpression{} } func (m *KindExpression) String() string { return proto.CompactTextString(m) } func (*KindExpression) ProtoMessage() {} -func (*KindExpression) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } +func (*KindExpression) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } func (m *KindExpression) GetName() string { if m != nil { @@ -110,7 +343,7 @@ type PropertyReference struct { func (m *PropertyReference) Reset() { *m = PropertyReference{} } func (m *PropertyReference) String() string { return proto.CompactTextString(m) } func (*PropertyReference) ProtoMessage() {} -func (*PropertyReference) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } +func (*PropertyReference) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } func (m *PropertyReference) GetName() string { if m != nil { @@ -128,7 +361,7 @@ type Projection struct { func (m *Projection) Reset() { *m = Projection{} } func (m *Projection) String() string { return proto.CompactTextString(m) } func (*Projection) ProtoMessage() {} -func (*Projection) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } +func (*Projection) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } func (m *Projection) GetProperty() *PropertyReference { if m != nil { @@ -152,7 +385,7 @@ type DatastoreOptions struct { func (m *DatastoreOptions) Reset() { *m = DatastoreOptions{} } func (m *DatastoreOptions) String() string { return proto.CompactTextString(m) } func (*DatastoreOptions) ProtoMessage() {} -func (*DatastoreOptions) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } +func (*DatastoreOptions) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} } func (m *DatastoreOptions) GetPartitionId() *PartitionId { if m != nil { @@ -184,7 +417,7 @@ type CloudStorageOptions struct { func (m *CloudStorageOptions) Reset() { *m = CloudStorageOptions{} } func (m *CloudStorageOptions) String() string { return proto.CompactTextString(m) } func (*CloudStorageOptions) ProtoMessage() {} -func (*CloudStorageOptions) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} } +func (*CloudStorageOptions) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} } func (m *CloudStorageOptions) GetFileSet() *CloudStorageOptions_FileSet { if m != nil { @@ -195,7 +428,7 @@ func (m *CloudStorageOptions) GetFileSet() *CloudStorageOptions_FileSet { // Set of files to scan. type CloudStorageOptions_FileSet struct { - // The url, in the format gs:///. Trailing wildcard in the + // The url, in the format `gs:///`. Trailing wildcard in the // path is allowed. Url string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"` } @@ -203,7 +436,7 @@ type CloudStorageOptions_FileSet struct { func (m *CloudStorageOptions_FileSet) Reset() { *m = CloudStorageOptions_FileSet{} } func (m *CloudStorageOptions_FileSet) String() string { return proto.CompactTextString(m) } func (*CloudStorageOptions_FileSet) ProtoMessage() {} -func (*CloudStorageOptions_FileSet) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7, 0} } +func (*CloudStorageOptions_FileSet) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8, 0} } func (m *CloudStorageOptions_FileSet) GetUrl() string { if m != nil { @@ -214,14 +447,14 @@ func (m *CloudStorageOptions_FileSet) GetUrl() string { // A location in Cloud Storage. type CloudStoragePath struct { - // The url, in the format of gs://bucket/. + // The url, in the format of `gs://bucket/`. Path string `protobuf:"bytes,1,opt,name=path" json:"path,omitempty"` } func (m *CloudStoragePath) Reset() { *m = CloudStoragePath{} } func (m *CloudStoragePath) String() string { return proto.CompactTextString(m) } func (*CloudStoragePath) ProtoMessage() {} -func (*CloudStoragePath) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} } +func (*CloudStoragePath) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{9} } func (m *CloudStoragePath) GetPath() string { if m != nil { @@ -230,18 +463,47 @@ func (m *CloudStoragePath) GetPath() string { return "" } +// Options defining BigQuery table and row identifiers. +type BigQueryOptions struct { + // Complete BigQuery table reference. + TableReference *BigQueryTable `protobuf:"bytes,1,opt,name=table_reference,json=tableReference" json:"table_reference,omitempty"` + // References to fields uniquely identifying rows within the table. + // Nested fields in the format, like `person.birthdate.year`, are allowed. + IdentifyingFields []*FieldId `protobuf:"bytes,2,rep,name=identifying_fields,json=identifyingFields" json:"identifying_fields,omitempty"` +} + +func (m *BigQueryOptions) Reset() { *m = BigQueryOptions{} } +func (m *BigQueryOptions) String() string { return proto.CompactTextString(m) } +func (*BigQueryOptions) ProtoMessage() {} +func (*BigQueryOptions) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{10} } + +func (m *BigQueryOptions) GetTableReference() *BigQueryTable { + if m != nil { + return m.TableReference + } + return nil +} + +func (m *BigQueryOptions) GetIdentifyingFields() []*FieldId { + if m != nil { + return m.IdentifyingFields + } + return nil +} + // Shared message indicating Cloud storage type. type StorageConfig struct { // Types that are valid to be assigned to Type: // *StorageConfig_DatastoreOptions // *StorageConfig_CloudStorageOptions + // *StorageConfig_BigQueryOptions Type isStorageConfig_Type `protobuf_oneof:"type"` } func (m *StorageConfig) Reset() { *m = StorageConfig{} } func (m *StorageConfig) String() string { return proto.CompactTextString(m) } func (*StorageConfig) ProtoMessage() {} -func (*StorageConfig) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{9} } +func (*StorageConfig) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{11} } type isStorageConfig_Type interface { isStorageConfig_Type() @@ -253,9 +515,13 @@ type StorageConfig_DatastoreOptions struct { type StorageConfig_CloudStorageOptions struct { CloudStorageOptions *CloudStorageOptions `protobuf:"bytes,3,opt,name=cloud_storage_options,json=cloudStorageOptions,oneof"` } +type StorageConfig_BigQueryOptions struct { + BigQueryOptions *BigQueryOptions `protobuf:"bytes,4,opt,name=big_query_options,json=bigQueryOptions,oneof"` +} func (*StorageConfig_DatastoreOptions) isStorageConfig_Type() {} func (*StorageConfig_CloudStorageOptions) isStorageConfig_Type() {} +func (*StorageConfig_BigQueryOptions) isStorageConfig_Type() {} func (m *StorageConfig) GetType() isStorageConfig_Type { if m != nil { @@ -278,11 +544,19 @@ func (m *StorageConfig) GetCloudStorageOptions() *CloudStorageOptions { return nil } +func (m *StorageConfig) GetBigQueryOptions() *BigQueryOptions { + if x, ok := m.GetType().(*StorageConfig_BigQueryOptions); ok { + return x.BigQueryOptions + } + return nil +} + // XXX_OneofFuncs is for the internal use of the proto package. func (*StorageConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { return _StorageConfig_OneofMarshaler, _StorageConfig_OneofUnmarshaler, _StorageConfig_OneofSizer, []interface{}{ (*StorageConfig_DatastoreOptions)(nil), (*StorageConfig_CloudStorageOptions)(nil), + (*StorageConfig_BigQueryOptions)(nil), } } @@ -300,6 +574,11 @@ func _StorageConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { if err := b.EncodeMessage(x.CloudStorageOptions); err != nil { return err } + case *StorageConfig_BigQueryOptions: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.BigQueryOptions); err != nil { + return err + } case nil: default: return fmt.Errorf("StorageConfig.Type has unexpected type %T", x) @@ -326,6 +605,14 @@ func _StorageConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto. err := b.DecodeMessage(msg) m.Type = &StorageConfig_CloudStorageOptions{msg} return true, err + case 4: // type.big_query_options + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(BigQueryOptions) + err := b.DecodeMessage(msg) + m.Type = &StorageConfig_BigQueryOptions{msg} + return true, err default: return false, nil } @@ -345,6 +632,11 @@ func _StorageConfig_OneofSizer(msg proto.Message) (n int) { n += proto.SizeVarint(3<<3 | proto.WireBytes) n += proto.SizeVarint(uint64(s)) n += s + case *StorageConfig_BigQueryOptions: + s := proto.Size(x.BigQueryOptions) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s case nil: default: panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) @@ -363,7 +655,7 @@ type CloudStorageKey struct { func (m *CloudStorageKey) Reset() { *m = CloudStorageKey{} } func (m *CloudStorageKey) String() string { return proto.CompactTextString(m) } func (*CloudStorageKey) ProtoMessage() {} -func (*CloudStorageKey) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{10} } +func (*CloudStorageKey) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{12} } func (m *CloudStorageKey) GetFilePath() string { if m != nil { @@ -388,7 +680,7 @@ type DatastoreKey struct { func (m *DatastoreKey) Reset() { *m = DatastoreKey{} } func (m *DatastoreKey) String() string { return proto.CompactTextString(m) } func (*DatastoreKey) ProtoMessage() {} -func (*DatastoreKey) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{11} } +func (*DatastoreKey) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{13} } func (m *DatastoreKey) GetEntityKey() *Key { if m != nil { @@ -421,7 +713,7 @@ type Key struct { func (m *Key) Reset() { *m = Key{} } func (m *Key) String() string { return proto.CompactTextString(m) } func (*Key) ProtoMessage() {} -func (*Key) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{12} } +func (*Key) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{14} } func (m *Key) GetPartitionId() *PartitionId { if m != nil { @@ -458,7 +750,7 @@ type Key_PathElement struct { func (m *Key_PathElement) Reset() { *m = Key_PathElement{} } func (m *Key_PathElement) String() string { return proto.CompactTextString(m) } func (*Key_PathElement) ProtoMessage() {} -func (*Key_PathElement) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{12, 0} } +func (*Key_PathElement) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{14, 0} } type isKey_PathElement_IdType interface { isKey_PathElement_IdType() @@ -578,7 +870,7 @@ type RecordKey struct { func (m *RecordKey) Reset() { *m = RecordKey{} } func (m *RecordKey) String() string { return proto.CompactTextString(m) } func (*RecordKey) ProtoMessage() {} -func (*RecordKey) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{13} } +func (*RecordKey) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{15} } type isRecordKey_Type interface { isRecordKey_Type() @@ -689,8 +981,74 @@ func _RecordKey_OneofSizer(msg proto.Message) (n int) { return n } +// Message defining the location of a BigQuery table. A table is uniquely +// identified by its project_id, dataset_id, and table_name. Within a query +// a table is often referenced with a string in the format of: +// `:.` or +// `..`. +type BigQueryTable struct { + // The Google Cloud Platform project ID of the project containing the table. + // If omitted, project ID is inferred from the API call. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Dataset ID of the table. + DatasetId string `protobuf:"bytes,2,opt,name=dataset_id,json=datasetId" json:"dataset_id,omitempty"` + // Name of the table. + TableId string `protobuf:"bytes,3,opt,name=table_id,json=tableId" json:"table_id,omitempty"` +} + +func (m *BigQueryTable) Reset() { *m = BigQueryTable{} } +func (m *BigQueryTable) String() string { return proto.CompactTextString(m) } +func (*BigQueryTable) ProtoMessage() {} +func (*BigQueryTable) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{16} } + +func (m *BigQueryTable) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *BigQueryTable) GetDatasetId() string { + if m != nil { + return m.DatasetId + } + return "" +} + +func (m *BigQueryTable) GetTableId() string { + if m != nil { + return m.TableId + } + return "" +} + +// An entity in a dataset is a field or set of fields that correspond to a +// single person. For example, in medical records the `EntityId` might be +// a patient identifier, or for financial records it might be an account +// identifier. This message is used when generalizations or analysis must be +// consistent across multiple rows pertaining to the same entity. +type EntityId struct { + // Composite key indicating which field contains the entity identifier. + Field *FieldId `protobuf:"bytes,1,opt,name=field" json:"field,omitempty"` +} + +func (m *EntityId) Reset() { *m = EntityId{} } +func (m *EntityId) String() string { return proto.CompactTextString(m) } +func (*EntityId) ProtoMessage() {} +func (*EntityId) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{17} } + +func (m *EntityId) GetField() *FieldId { + if m != nil { + return m.Field + } + return nil +} + func init() { proto.RegisterType((*InfoType)(nil), "google.privacy.dlp.v2beta1.InfoType") + proto.RegisterType((*CustomInfoType)(nil), "google.privacy.dlp.v2beta1.CustomInfoType") + proto.RegisterType((*CustomInfoType_Dictionary)(nil), "google.privacy.dlp.v2beta1.CustomInfoType.Dictionary") + proto.RegisterType((*CustomInfoType_Dictionary_WordList)(nil), "google.privacy.dlp.v2beta1.CustomInfoType.Dictionary.WordList") proto.RegisterType((*FieldId)(nil), "google.privacy.dlp.v2beta1.FieldId") proto.RegisterType((*PartitionId)(nil), "google.privacy.dlp.v2beta1.PartitionId") proto.RegisterType((*KindExpression)(nil), "google.privacy.dlp.v2beta1.KindExpression") @@ -700,63 +1058,86 @@ func init() { proto.RegisterType((*CloudStorageOptions)(nil), "google.privacy.dlp.v2beta1.CloudStorageOptions") proto.RegisterType((*CloudStorageOptions_FileSet)(nil), "google.privacy.dlp.v2beta1.CloudStorageOptions.FileSet") proto.RegisterType((*CloudStoragePath)(nil), "google.privacy.dlp.v2beta1.CloudStoragePath") + proto.RegisterType((*BigQueryOptions)(nil), "google.privacy.dlp.v2beta1.BigQueryOptions") proto.RegisterType((*StorageConfig)(nil), "google.privacy.dlp.v2beta1.StorageConfig") proto.RegisterType((*CloudStorageKey)(nil), "google.privacy.dlp.v2beta1.CloudStorageKey") proto.RegisterType((*DatastoreKey)(nil), "google.privacy.dlp.v2beta1.DatastoreKey") proto.RegisterType((*Key)(nil), "google.privacy.dlp.v2beta1.Key") proto.RegisterType((*Key_PathElement)(nil), "google.privacy.dlp.v2beta1.Key.PathElement") proto.RegisterType((*RecordKey)(nil), "google.privacy.dlp.v2beta1.RecordKey") + proto.RegisterType((*BigQueryTable)(nil), "google.privacy.dlp.v2beta1.BigQueryTable") + proto.RegisterType((*EntityId)(nil), "google.privacy.dlp.v2beta1.EntityId") } func init() { proto.RegisterFile("google/privacy/dlp/v2beta1/storage.proto", fileDescriptor1) } var fileDescriptor1 = []byte{ - // 740 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0xdd, 0x6e, 0xf3, 0x44, - 0x10, 0x8d, 0x93, 0xa8, 0x6d, 0xc6, 0x29, 0x4d, 0x5d, 0x90, 0xaa, 0x14, 0xfa, 0x63, 0xa1, 0x36, - 0x6a, 0xc1, 0x16, 0xe1, 0x82, 0x0b, 0x44, 0x91, 0xd2, 0x1f, 0x25, 0x44, 0x6a, 0x82, 0x5b, 0x09, - 0x01, 0x17, 0xd6, 0xd6, 0xbb, 0x71, 0x97, 0x3a, 0xbb, 0x2b, 0x7b, 0x5b, 0xe1, 0x17, 0xe0, 0xb5, - 0x78, 0x10, 0xee, 0x11, 0x8f, 0x81, 0x76, 0xbd, 0x49, 0xdc, 0x1f, 0xd2, 0x22, 0x7d, 0x77, 0x9b, - 0xc9, 0x99, 0x33, 0x3b, 0x73, 0xce, 0xac, 0xa1, 0x13, 0x73, 0x1e, 0x27, 0xc4, 0x17, 0x29, 0x7d, - 0x44, 0x51, 0xee, 0xe3, 0x44, 0xf8, 0x8f, 0xdd, 0x5b, 0x22, 0xd1, 0x57, 0x7e, 0x26, 0x79, 0x8a, - 0x62, 0xe2, 0x89, 0x94, 0x4b, 0xee, 0xb4, 0x0b, 0xa4, 0x67, 0x90, 0x1e, 0x4e, 0x84, 0x67, 0x90, - 0xed, 0x4f, 0x0d, 0x0b, 0x12, 0xd4, 0x47, 0x8c, 0x71, 0x89, 0x24, 0xe5, 0x2c, 0x2b, 0x32, 0xdd, - 0x5d, 0x58, 0x1b, 0xb0, 0x09, 0xbf, 0xc9, 0x05, 0x71, 0x1c, 0xa8, 0x33, 0x34, 0x25, 0xdb, 0xd6, - 0xbe, 0xd5, 0x69, 0x04, 0xfa, 0xec, 0x1e, 0xc3, 0xea, 0x25, 0x25, 0x09, 0x1e, 0x60, 0x67, 0x0f, - 0xec, 0x88, 0x27, 0x0f, 0x53, 0x16, 0x96, 0x50, 0x50, 0x84, 0xae, 0x14, 0x76, 0x04, 0xf6, 0x18, - 0xa5, 0x92, 0x2a, 0xfe, 0x01, 0x76, 0x3e, 0x03, 0x10, 0x29, 0xff, 0x8d, 0x44, 0x32, 0xa4, 0x78, - 0xbb, 0xaa, 0xe1, 0x0d, 0x13, 0x19, 0x60, 0xe7, 0x00, 0x9a, 0x8a, 0x27, 0x13, 0x28, 0x22, 0x0a, - 0x50, 0xd7, 0x00, 0x7b, 0x1e, 0x1b, 0x60, 0xf7, 0x73, 0xf8, 0x68, 0x48, 0x19, 0xbe, 0xf8, 0x5d, - 0xa4, 0x24, 0xcb, 0x28, 0x67, 0xaf, 0x5e, 0xf1, 0x08, 0x36, 0xc7, 0x29, 0x17, 0x24, 0x95, 0x79, - 0x40, 0x26, 0x24, 0x25, 0x2c, 0x5a, 0xf4, 0x52, 0x2d, 0x01, 0x7f, 0x02, 0x18, 0x17, 0xe5, 0x15, - 0xd5, 0x00, 0xd6, 0x84, 0x49, 0xd3, 0x74, 0x76, 0xf7, 0x4b, 0xef, 0xbf, 0xc7, 0xe8, 0xbd, 0x28, - 0x11, 0xcc, 0xd3, 0xdd, 0xbf, 0x2d, 0x68, 0x9d, 0x23, 0x89, 0x94, 0x28, 0x64, 0x24, 0xf4, 0x7c, - 0x9d, 0x1f, 0xa0, 0x29, 0x66, 0xd3, 0x50, 0xfd, 0x15, 0x35, 0x8e, 0x96, 0xd6, 0x58, 0x4c, 0x2f, - 0xb0, 0x45, 0x69, 0x94, 0xa7, 0x50, 0xbf, 0xa7, 0xac, 0x18, 0xa2, 0xdd, 0x3d, 0x5e, 0xc6, 0xf1, - 0x74, 0x60, 0x81, 0xce, 0x73, 0x2e, 0xe7, 0x52, 0x50, 0xce, 0xb6, 0x6b, 0xfb, 0xb5, 0x8e, 0xdd, - 0x3d, 0x7c, 0xa3, 0x5b, 0x83, 0x0e, 0x4a, 0x99, 0xee, 0x1f, 0x16, 0x6c, 0x9d, 0x25, 0xfc, 0x01, - 0x5f, 0x17, 0xf6, 0x9b, 0xf5, 0x1a, 0xc0, 0xda, 0x84, 0x26, 0x24, 0xcc, 0x88, 0x34, 0x7d, 0x7e, - 0xb3, 0x8c, 0xfd, 0x15, 0x0a, 0xef, 0x92, 0x26, 0xe4, 0x9a, 0xc8, 0x60, 0x75, 0x52, 0x1c, 0xda, - 0x3b, 0xca, 0x79, 0xfa, 0xe8, 0xb4, 0xa0, 0xf6, 0x90, 0x26, 0x46, 0x74, 0x75, 0x74, 0x0f, 0xa1, - 0x55, 0x26, 0x19, 0x23, 0x79, 0xa7, 0x24, 0x17, 0x48, 0xde, 0xcd, 0xbc, 0xa1, 0xce, 0xee, 0x5f, - 0x16, 0xac, 0x1b, 0xcc, 0x19, 0x67, 0x13, 0x1a, 0x3b, 0xbf, 0xc2, 0x26, 0x9e, 0x49, 0x15, 0xf2, - 0xa2, 0xb8, 0x99, 0xeb, 0x17, 0xcb, 0xee, 0xfc, 0x5c, 0xdf, 0x7e, 0x25, 0x68, 0xe1, 0xe7, 0x9a, - 0x13, 0xf8, 0x24, 0x52, 0xd7, 0x0a, 0xcd, 0x7a, 0xce, 0x0b, 0xd4, 0x74, 0x01, 0xff, 0x7f, 0x0e, - 0xa5, 0x5f, 0x09, 0xb6, 0xa2, 0x97, 0xe1, 0xde, 0x0a, 0xd4, 0x65, 0x2e, 0x88, 0xfb, 0x23, 0x6c, - 0x94, 0xb3, 0x86, 0x24, 0x77, 0x76, 0xa0, 0xa1, 0x95, 0x28, 0x4d, 0x42, 0x4b, 0xa3, 0x27, 0x74, - 0x00, 0xcd, 0x4c, 0xa2, 0x54, 0x86, 0x7c, 0x32, 0x51, 0x52, 0xa9, 0xb6, 0x6b, 0x81, 0xad, 0x63, - 0x23, 0x1d, 0x72, 0xaf, 0xa0, 0x39, 0xef, 0x54, 0xf1, 0x9d, 0x02, 0x10, 0x26, 0xa9, 0xcc, 0xc3, - 0x7b, 0x32, 0xdb, 0x93, 0xbd, 0xa5, 0xfe, 0x23, 0x79, 0xd0, 0x28, 0x52, 0x86, 0x24, 0x77, 0xff, - 0xb1, 0xa0, 0xa6, 0x78, 0x3e, 0xe4, 0x36, 0x7c, 0x6f, 0x84, 0xae, 0x6a, 0x1f, 0x9f, 0xbc, 0x71, - 0x1b, 0x4f, 0xb5, 0x7e, 0x91, 0x90, 0x29, 0x61, 0xb2, 0x70, 0x45, 0xfb, 0x46, 0x3d, 0x54, 0xf3, - 0xa0, 0x32, 0x8e, 0xde, 0x2e, 0x63, 0x1c, 0xbd, 0x31, 0x2d, 0xa8, 0x9a, 0x47, 0xab, 0xd6, 0xaf, - 0x04, 0x55, 0x8a, 0x9d, 0x8f, 0xcd, 0x8b, 0xa2, 0xa4, 0x6c, 0xf4, 0x2b, 0xc5, 0x9b, 0xd2, 0x6b, - 0xc0, 0x2a, 0xc5, 0xa1, 0x56, 0xe3, 0x4f, 0x0b, 0x1a, 0x01, 0x89, 0x78, 0x8a, 0x55, 0xc3, 0x3f, - 0xc3, 0xe6, 0x53, 0x2b, 0x2c, 0xe6, 0x77, 0xf2, 0x5e, 0x1b, 0x0c, 0x49, 0xde, 0xaf, 0x04, 0x1b, - 0xd1, 0x33, 0x8d, 0x47, 0xb0, 0xbe, 0xb0, 0xb0, 0xa2, 0x2d, 0xec, 0xdb, 0x79, 0x97, 0x7d, 0x0b, - 0xce, 0x26, 0x2e, 0xfd, 0x9e, 0xf9, 0xa9, 0x37, 0x85, 0xdd, 0x88, 0x4f, 0x97, 0xd0, 0xf4, 0xe0, - 0x3c, 0x11, 0xb3, 0x9d, 0xb3, 0x7e, 0xf9, 0xce, 0x20, 0x63, 0x9e, 0x20, 0x16, 0x7b, 0x3c, 0x8d, - 0xfd, 0x98, 0x30, 0xfd, 0x61, 0xf1, 0x8b, 0xbf, 0x90, 0xa0, 0xd9, 0x6b, 0xdf, 0xaf, 0x6f, 0x71, - 0x22, 0x6e, 0x57, 0x34, 0xf2, 0xeb, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xd1, 0x60, 0x71, 0xcc, - 0xe8, 0x06, 0x00, 0x00, + // 1068 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0xdd, 0x6e, 0xdc, 0xc4, + 0x17, 0x5f, 0xef, 0xa6, 0xcd, 0xee, 0xd9, 0x7c, 0xba, 0xfd, 0x4b, 0xfb, 0xdf, 0xd2, 0x26, 0x35, + 0x55, 0x1b, 0x1a, 0xf0, 0x8a, 0x20, 0x84, 0x10, 0x22, 0x88, 0xcd, 0x07, 0xbb, 0x04, 0x35, 0xe9, + 0x34, 0x6a, 0x54, 0x08, 0xb2, 0xbc, 0x9e, 0xb1, 0x33, 0xd4, 0xeb, 0x19, 0xec, 0xd9, 0x16, 0xbf, + 0x00, 0xaf, 0xc0, 0x03, 0x70, 0xc7, 0x03, 0x20, 0x71, 0xc5, 0x3d, 0x17, 0x3c, 0x06, 0xe2, 0x31, + 0xd0, 0x7c, 0xd8, 0xeb, 0xa4, 0x61, 0x1b, 0x10, 0x77, 0xe3, 0x33, 0xe7, 0xfc, 0xce, 0x99, 0xdf, + 0xfc, 0xce, 0x19, 0xc3, 0x46, 0xc4, 0x58, 0x14, 0x93, 0x1e, 0x4f, 0xe9, 0x0b, 0x3f, 0xc8, 0x7b, + 0x38, 0xe6, 0xbd, 0x17, 0x5b, 0x23, 0x22, 0xfc, 0x77, 0x7b, 0x99, 0x60, 0xa9, 0x1f, 0x11, 0x97, + 0xa7, 0x4c, 0x30, 0xbb, 0xab, 0x3d, 0x5d, 0xe3, 0xe9, 0xe2, 0x98, 0xbb, 0xc6, 0xb3, 0xfb, 0x86, + 0x41, 0xf1, 0x39, 0xed, 0xf9, 0x49, 0xc2, 0x84, 0x2f, 0x28, 0x4b, 0x32, 0x1d, 0xd9, 0x5d, 0x2b, + 0x73, 0x30, 0xc1, 0x46, 0x93, 0xb0, 0x27, 0xe8, 0x98, 0x64, 0xc2, 0x1f, 0x73, 0xed, 0xe0, 0xdc, + 0x81, 0xe6, 0x30, 0x09, 0xd9, 0x71, 0xce, 0x89, 0x6d, 0xc3, 0x5c, 0xe2, 0x8f, 0x49, 0xc7, 0x5a, + 0xb7, 0x36, 0x5a, 0x48, 0xad, 0x9d, 0xdf, 0xeb, 0xb0, 0xb4, 0x33, 0xc9, 0x04, 0x1b, 0x97, 0x6e, + 0x9f, 0x42, 0x8b, 0x26, 0x21, 0xf3, 0x44, 0xce, 0xb5, 0x6f, 0x7b, 0xeb, 0x9e, 0xfb, 0xf7, 0x15, + 0xba, 0x45, 0x20, 0x6a, 0xd2, 0x02, 0xe2, 0x04, 0x00, 0xd3, 0x40, 0x16, 0xea, 0xa7, 0x79, 0xa7, + 0xae, 0x30, 0xde, 0x9f, 0x85, 0x71, 0xbe, 0x04, 0x77, 0xb7, 0x0c, 0x1e, 0xd4, 0x50, 0x05, 0xaa, + 0xfb, 0x83, 0x05, 0x30, 0xdd, 0xb4, 0xbf, 0x86, 0xd6, 0x4b, 0x96, 0x62, 0x2f, 0xa6, 0x99, 0x30, + 0xa5, 0x6e, 0xff, 0xab, 0x34, 0xee, 0x09, 0x4b, 0xf1, 0x17, 0x34, 0x13, 0x83, 0x1a, 0x6a, 0xbe, + 0x34, 0xeb, 0xee, 0x3a, 0x34, 0x0b, 0xbb, 0x7d, 0x13, 0xae, 0x49, 0x7b, 0xd6, 0xb1, 0xd6, 0x1b, + 0x1b, 0x2d, 0xa4, 0x3f, 0xfa, 0x4d, 0xb8, 0x9e, 0xb1, 0x49, 0x1a, 0x90, 0xfe, 0x75, 0x98, 0x93, + 0x84, 0x39, 0x0f, 0x61, 0x7e, 0x9f, 0x92, 0x18, 0x0f, 0xb1, 0xbd, 0x06, 0xed, 0x80, 0xc5, 0x93, + 0x71, 0xe2, 0x55, 0x68, 0x07, 0x6d, 0x7a, 0x24, 0xc9, 0x3f, 0x84, 0xf6, 0x91, 0x9f, 0x0a, 0x2a, + 0x8b, 0x18, 0x62, 0xfb, 0x36, 0x00, 0x4f, 0xd9, 0x37, 0x24, 0x10, 0x1e, 0xc5, 0x8a, 0xb5, 0x16, + 0x6a, 0x19, 0xcb, 0x10, 0xdb, 0x77, 0x61, 0x41, 0xe2, 0x64, 0xdc, 0x0f, 0x88, 0x74, 0x98, 0x53, + 0x0e, 0xed, 0xd2, 0x36, 0xc4, 0xce, 0x3d, 0x58, 0x3a, 0xa0, 0x09, 0xde, 0xfb, 0x8e, 0xa7, 0x24, + 0xcb, 0x28, 0x4b, 0x2e, 0xbd, 0xf3, 0x07, 0xb0, 0x7a, 0x94, 0x32, 0x4e, 0x52, 0x91, 0x23, 0x12, + 0x92, 0x94, 0x24, 0xc1, 0x54, 0x1c, 0xf5, 0x8a, 0xe3, 0x09, 0xc0, 0x91, 0x4e, 0x2f, 0xa1, 0x86, + 0xd0, 0xe4, 0x26, 0xcc, 0x70, 0xfd, 0xce, 0x2c, 0xae, 0x5f, 0x49, 0x81, 0xca, 0x70, 0xe7, 0x0f, + 0x0b, 0x56, 0x76, 0x7d, 0xe1, 0xcb, 0x36, 0x20, 0x87, 0x5c, 0x29, 0xda, 0xfe, 0x1c, 0x16, 0x78, + 0xc1, 0x86, 0x3c, 0x9f, 0xce, 0xf1, 0x60, 0x66, 0x8e, 0x29, 0x7b, 0xa8, 0xcd, 0x2b, 0x54, 0x6e, + 0xc3, 0xdc, 0x73, 0x9a, 0x60, 0x23, 0xbd, 0x87, 0xb3, 0x30, 0xce, 0x13, 0x86, 0x54, 0x9c, 0xbd, + 0x5f, 0x5e, 0x05, 0x65, 0x49, 0xa7, 0xb1, 0xde, 0xd8, 0x68, 0x6f, 0xdd, 0x7f, 0xcd, 0x69, 0x8d, + 0x37, 0xaa, 0x44, 0x3a, 0xdf, 0x5b, 0x70, 0x63, 0x27, 0x66, 0x13, 0xfc, 0x44, 0x37, 0x7c, 0x71, + 0x56, 0x04, 0xcd, 0x90, 0xc6, 0xc4, 0xcb, 0x48, 0xa1, 0xdb, 0x0f, 0x66, 0xea, 0xf6, 0x55, 0x08, + 0x77, 0x9f, 0xc6, 0xe4, 0x09, 0x11, 0x68, 0x3e, 0xd4, 0x8b, 0xee, 0x2d, 0xa9, 0x3c, 0xb5, 0xb4, + 0x57, 0xa0, 0x31, 0x49, 0x63, 0x73, 0xe9, 0x72, 0xe9, 0xdc, 0x87, 0x95, 0x2a, 0xc8, 0x91, 0x2f, + 0xce, 0xe4, 0x95, 0x73, 0x5f, 0x9c, 0x15, 0xda, 0x90, 0x6b, 0xe7, 0x17, 0x0b, 0x96, 0xfb, 0x34, + 0x7a, 0x3c, 0x21, 0x69, 0x3e, 0x2d, 0x76, 0x59, 0xf8, 0xa3, 0x98, 0x78, 0x69, 0x71, 0x95, 0xa6, + 0xe6, 0xb7, 0x66, 0xd5, 0x5c, 0xa0, 0x1c, 0xcb, 0x50, 0xb4, 0xa4, 0x10, 0xa6, 0x72, 0x43, 0x60, + 0x53, 0x4c, 0x12, 0x41, 0xc3, 0x9c, 0x26, 0x91, 0x17, 0xca, 0x96, 0xc9, 0x3a, 0x75, 0x45, 0xf4, + 0x9b, 0xb3, 0x60, 0x4d, 0x73, 0xa1, 0xd5, 0x4a, 0xb8, 0xb2, 0x65, 0xce, 0xcf, 0x75, 0x58, 0x34, + 0xe7, 0xdb, 0x61, 0x49, 0x48, 0x23, 0xfb, 0x2b, 0x58, 0xc5, 0x85, 0xcc, 0x3c, 0xa6, 0x8f, 0x63, + 0x34, 0xf1, 0xf6, 0xac, 0x24, 0x17, 0xb5, 0x39, 0xa8, 0xa1, 0x15, 0x7c, 0x51, 0xaf, 0x04, 0xfe, + 0x17, 0x48, 0x4a, 0x3d, 0x33, 0xcc, 0xcb, 0x04, 0x0d, 0x95, 0xa0, 0xf7, 0x0f, 0x2f, 0x74, 0x50, + 0x43, 0x37, 0x82, 0x4b, 0xa4, 0xf2, 0x0c, 0x56, 0x47, 0x34, 0xf2, 0xbe, 0x95, 0x5c, 0x96, 0x29, + 0xe6, 0x54, 0x8a, 0xcd, 0xab, 0xf0, 0x3f, 0x85, 0x5f, 0x1e, 0x9d, 0x37, 0x95, 0x33, 0xeb, 0x31, + 0x2c, 0x57, 0x0b, 0x3a, 0x20, 0xb9, 0x7d, 0x0b, 0x5a, 0x4a, 0xa0, 0x15, 0x81, 0x28, 0xc5, 0x2a, + 0xe1, 0xdc, 0x85, 0x85, 0x4c, 0xf8, 0xa9, 0xf0, 0x58, 0x18, 0x4a, 0x05, 0x4b, 0x46, 0x1b, 0xa8, + 0xad, 0x6c, 0x87, 0xca, 0xe4, 0x3c, 0x82, 0x85, 0x92, 0x44, 0x89, 0xb7, 0x0d, 0x20, 0xaf, 0x4b, + 0xe4, 0xde, 0x73, 0x52, 0x8c, 0x8f, 0xb5, 0x99, 0x6d, 0x49, 0x72, 0xd4, 0xd2, 0x21, 0x07, 0x24, + 0x77, 0xfe, 0xb4, 0xa0, 0x21, 0x71, 0xfe, 0xcb, 0x21, 0xf1, 0x89, 0xd1, 0xbf, 0x56, 0xdd, 0xe6, + 0x6b, 0xaa, 0x71, 0xe5, 0xd1, 0xf7, 0x62, 0x32, 0x26, 0x89, 0xd0, 0xcd, 0xd2, 0x3d, 0x96, 0xf3, + 0xbb, 0x34, 0xca, 0x7e, 0x52, 0x43, 0xc7, 0xf4, 0x93, 0x1a, 0x24, 0x2b, 0x50, 0x37, 0xb3, 0xbc, + 0x31, 0xa8, 0xa1, 0x3a, 0xc5, 0xf6, 0x4d, 0x33, 0x68, 0xa5, 0x4a, 0x5a, 0x83, 0x9a, 0x1e, 0xb5, + 0xfd, 0x16, 0xcc, 0x53, 0xac, 0x9e, 0x5c, 0xe7, 0x57, 0x0b, 0x5a, 0x88, 0x04, 0x2c, 0xc5, 0xf2, + 0xc0, 0xcf, 0x60, 0xf5, 0xbc, 0xca, 0xa6, 0xfc, 0x6d, 0x5e, 0x55, 0x61, 0x07, 0x44, 0xbe, 0xa3, + 0xcb, 0xc1, 0x85, 0x3b, 0x3e, 0x84, 0xc5, 0x69, 0x77, 0x48, 0x58, 0xdd, 0x19, 0x1b, 0x57, 0xea, + 0x0c, 0x8d, 0xb9, 0x80, 0x2b, 0xdf, 0xa5, 0x9e, 0xce, 0x60, 0xf1, 0x5c, 0xf7, 0x5f, 0x78, 0xd9, + 0xac, 0x8b, 0x2f, 0xdb, 0x6d, 0x00, 0x85, 0x43, 0xaa, 0x0f, 0x9f, 0xb1, 0x0c, 0xb1, 0xfd, 0x7f, + 0x68, 0xea, 0xf9, 0x43, 0xb1, 0x66, 0x0d, 0xcd, 0xab, 0xef, 0x21, 0x76, 0xf6, 0xa0, 0xb9, 0xa7, + 0x34, 0x32, 0xc4, 0xf6, 0x87, 0x70, 0x4d, 0x8d, 0x11, 0xc3, 0xce, 0x95, 0xa6, 0x88, 0x8e, 0xe8, + 0xff, 0x68, 0xc1, 0x9d, 0x80, 0x8d, 0x67, 0x44, 0xf4, 0x61, 0x37, 0xe6, 0xc5, 0xf0, 0xb4, 0xbe, + 0xfc, 0xd8, 0x78, 0x46, 0x2c, 0xf6, 0x93, 0xc8, 0x65, 0x69, 0xd4, 0x8b, 0x48, 0xa2, 0x7e, 0xb9, + 0x7a, 0x7a, 0xcb, 0xe7, 0x34, 0xbb, 0xec, 0xd7, 0xef, 0x23, 0x1c, 0xf3, 0x9f, 0xea, 0x9d, 0xcf, + 0x74, 0xbc, 0xba, 0x25, 0x77, 0x37, 0xe6, 0xee, 0xd3, 0xad, 0xbe, 0xdc, 0xfe, 0xad, 0xd8, 0x3a, + 0x55, 0x5b, 0xa7, 0xbb, 0x31, 0x3f, 0x7d, 0xaa, 0x23, 0x47, 0xd7, 0x15, 0xfe, 0x7b, 0x7f, 0x05, + 0x00, 0x00, 0xff, 0xff, 0x05, 0x77, 0xdf, 0xed, 0x59, 0x0a, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/privacy/dlp/v2beta2/dlp.pb.go b/vendor/google.golang.org/genproto/googleapis/privacy/dlp/v2beta2/dlp.pb.go new file mode 100644 index 0000000..fe6e1f4 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/privacy/dlp/v2beta2/dlp.pb.go @@ -0,0 +1,9242 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/privacy/dlp/v2beta2/dlp.proto + +/* +Package dlp is a generated protocol buffer package. + +It is generated from these files: + google/privacy/dlp/v2beta2/dlp.proto + google/privacy/dlp/v2beta2/storage.proto + +It has these top-level messages: + InspectConfig + ContentItem + Table + InspectResult + Finding + Location + TableLocation + Range + ImageLocation + RedactImageRequest + Color + RedactImageResponse + DeidentifyContentRequest + DeidentifyContentResponse + ReidentifyContentRequest + ReidentifyContentResponse + InspectContentRequest + InspectContentResponse + InspectDataSourceRequest + OutputStorageConfig + InfoTypeStatistics + InspectDataSourceDetails + InfoTypeDescription + ListInfoTypesRequest + ListInfoTypesResponse + AnalyzeDataSourceRiskRequest + RiskAnalysisJobConfig + PrivacyMetric + AnalyzeDataSourceRiskDetails + ValueFrequency + Value + QuoteInfo + DateTime + DeidentifyConfig + PrimitiveTransformation + TimePartConfig + CryptoHashConfig + ReplaceValueConfig + ReplaceWithInfoTypeConfig + RedactConfig + CharsToIgnore + CharacterMaskConfig + FixedSizeBucketingConfig + BucketingConfig + CryptoReplaceFfxFpeConfig + CryptoKey + TransientCryptoKey + UnwrappedCryptoKey + KmsWrappedCryptoKey + DateShiftConfig + InfoTypeTransformations + FieldTransformation + RecordTransformations + RecordSuppression + RecordCondition + TransformationOverview + TransformationSummary + Schedule + InspectTemplate + DeidentifyTemplate + JobTrigger + Action + CreateInspectTemplateRequest + UpdateInspectTemplateRequest + GetInspectTemplateRequest + ListInspectTemplatesRequest + ListInspectTemplatesResponse + DeleteInspectTemplateRequest + CreateJobTriggerRequest + UpdateJobTriggerRequest + GetJobTriggerRequest + ListJobTriggersRequest + ListJobTriggersResponse + DeleteJobTriggerRequest + InspectJobConfig + DlpJob + GetDlpJobRequest + ListDlpJobsRequest + ListDlpJobsResponse + CancelDlpJobRequest + DeleteDlpJobRequest + CreateDeidentifyTemplateRequest + UpdateDeidentifyTemplateRequest + GetDeidentifyTemplateRequest + ListDeidentifyTemplatesRequest + ListDeidentifyTemplatesResponse + DeleteDeidentifyTemplateRequest + InfoType + CustomInfoType + FieldId + PartitionId + KindExpression + DatastoreOptions + CloudStorageOptions + BigQueryOptions + StorageConfig + BigQueryKey + CloudStorageKey + DatastoreKey + Key + RecordKey + BigQueryTable + EntityId +*/ +package dlp + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf2 "github.com/golang/protobuf/ptypes/duration" +import google_protobuf3 "github.com/golang/protobuf/ptypes/empty" +import google_protobuf4 "google.golang.org/genproto/protobuf/field_mask" +import google_protobuf1 "github.com/golang/protobuf/ptypes/timestamp" +import google_rpc "google.golang.org/genproto/googleapis/rpc/status" +import google_type "google.golang.org/genproto/googleapis/type/date" +import google_type1 "google.golang.org/genproto/googleapis/type/dayofweek" +import google_type2 "google.golang.org/genproto/googleapis/type/timeofday" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Parts of the APIs which use certain infoTypes. +type InfoTypeSupportedBy int32 + +const ( + InfoTypeSupportedBy_ENUM_TYPE_UNSPECIFIED InfoTypeSupportedBy = 0 + // Supported by the inspect operations. + InfoTypeSupportedBy_INSPECT InfoTypeSupportedBy = 1 + // Supported by the risk analysis operations. + InfoTypeSupportedBy_RISK_ANALYSIS InfoTypeSupportedBy = 2 +) + +var InfoTypeSupportedBy_name = map[int32]string{ + 0: "ENUM_TYPE_UNSPECIFIED", + 1: "INSPECT", + 2: "RISK_ANALYSIS", +} +var InfoTypeSupportedBy_value = map[string]int32{ + "ENUM_TYPE_UNSPECIFIED": 0, + "INSPECT": 1, + "RISK_ANALYSIS": 2, +} + +func (x InfoTypeSupportedBy) String() string { + return proto.EnumName(InfoTypeSupportedBy_name, int32(x)) +} +func (InfoTypeSupportedBy) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +// Operators available for comparing the value of fields. +type RelationalOperator int32 + +const ( + RelationalOperator_RELATIONAL_OPERATOR_UNSPECIFIED RelationalOperator = 0 + // Equal. + RelationalOperator_EQUAL_TO RelationalOperator = 1 + // Not equal to. + RelationalOperator_NOT_EQUAL_TO RelationalOperator = 2 + // Greater than. + RelationalOperator_GREATER_THAN RelationalOperator = 3 + // Less than. + RelationalOperator_LESS_THAN RelationalOperator = 4 + // Greater than or equals. + RelationalOperator_GREATER_THAN_OR_EQUALS RelationalOperator = 5 + // Less than or equals. + RelationalOperator_LESS_THAN_OR_EQUALS RelationalOperator = 6 + // Exists + RelationalOperator_EXISTS RelationalOperator = 7 +) + +var RelationalOperator_name = map[int32]string{ + 0: "RELATIONAL_OPERATOR_UNSPECIFIED", + 1: "EQUAL_TO", + 2: "NOT_EQUAL_TO", + 3: "GREATER_THAN", + 4: "LESS_THAN", + 5: "GREATER_THAN_OR_EQUALS", + 6: "LESS_THAN_OR_EQUALS", + 7: "EXISTS", +} +var RelationalOperator_value = map[string]int32{ + "RELATIONAL_OPERATOR_UNSPECIFIED": 0, + "EQUAL_TO": 1, + "NOT_EQUAL_TO": 2, + "GREATER_THAN": 3, + "LESS_THAN": 4, + "GREATER_THAN_OR_EQUALS": 5, + "LESS_THAN_OR_EQUALS": 6, + "EXISTS": 7, +} + +func (x RelationalOperator) String() string { + return proto.EnumName(RelationalOperator_name, int32(x)) +} +func (RelationalOperator) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +// An enum to represent the various type of DLP jobs. +type DlpJobType int32 + +const ( + DlpJobType_DLP_JOB_TYPE_UNSPECIFIED DlpJobType = 0 + // The job inspected Google Cloud for sensitive data. + DlpJobType_INSPECT_JOB DlpJobType = 1 + // The job executed a Risk Analysis computation. + DlpJobType_RISK_ANALYSIS_JOB DlpJobType = 2 +) + +var DlpJobType_name = map[int32]string{ + 0: "DLP_JOB_TYPE_UNSPECIFIED", + 1: "INSPECT_JOB", + 2: "RISK_ANALYSIS_JOB", +} +var DlpJobType_value = map[string]int32{ + "DLP_JOB_TYPE_UNSPECIFIED": 0, + "INSPECT_JOB": 1, + "RISK_ANALYSIS_JOB": 2, +} + +func (x DlpJobType) String() string { + return proto.EnumName(DlpJobType_name, int32(x)) +} +func (DlpJobType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +// Predefined schemas for storing findings. +type OutputStorageConfig_OutputSchema int32 + +const ( + OutputStorageConfig_OUTPUT_SCHEMA_UNSPECIFIED OutputStorageConfig_OutputSchema = 0 + // Basic schema including only `info_type`, `quote`, `certainty`, and + // `timestamp`. + OutputStorageConfig_BASIC_COLUMNS OutputStorageConfig_OutputSchema = 1 + // Schema tailored to findings from scanning Google Cloud Storage. + OutputStorageConfig_GCS_COLUMNS OutputStorageConfig_OutputSchema = 2 + // Schema tailored to findings from scanning Google Datastore. + OutputStorageConfig_DATASTORE_COLUMNS OutputStorageConfig_OutputSchema = 3 + // Schema tailored to findings from scanning Google BigQuery. + OutputStorageConfig_BIG_QUERY_COLUMNS OutputStorageConfig_OutputSchema = 4 + // Schema containing all columns. + OutputStorageConfig_ALL_COLUMNS OutputStorageConfig_OutputSchema = 5 +) + +var OutputStorageConfig_OutputSchema_name = map[int32]string{ + 0: "OUTPUT_SCHEMA_UNSPECIFIED", + 1: "BASIC_COLUMNS", + 2: "GCS_COLUMNS", + 3: "DATASTORE_COLUMNS", + 4: "BIG_QUERY_COLUMNS", + 5: "ALL_COLUMNS", +} +var OutputStorageConfig_OutputSchema_value = map[string]int32{ + "OUTPUT_SCHEMA_UNSPECIFIED": 0, + "BASIC_COLUMNS": 1, + "GCS_COLUMNS": 2, + "DATASTORE_COLUMNS": 3, + "BIG_QUERY_COLUMNS": 4, + "ALL_COLUMNS": 5, +} + +func (x OutputStorageConfig_OutputSchema) String() string { + return proto.EnumName(OutputStorageConfig_OutputSchema_name, int32(x)) +} +func (OutputStorageConfig_OutputSchema) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{19, 0} +} + +type TimePartConfig_TimePart int32 + +const ( + TimePartConfig_TIME_PART_UNSPECIFIED TimePartConfig_TimePart = 0 + // [0-9999] + TimePartConfig_YEAR TimePartConfig_TimePart = 1 + // [1-12] + TimePartConfig_MONTH TimePartConfig_TimePart = 2 + // [1-31] + TimePartConfig_DAY_OF_MONTH TimePartConfig_TimePart = 3 + // [1-7] + TimePartConfig_DAY_OF_WEEK TimePartConfig_TimePart = 4 + // [1-52] + TimePartConfig_WEEK_OF_YEAR TimePartConfig_TimePart = 5 + // [0-23] + TimePartConfig_HOUR_OF_DAY TimePartConfig_TimePart = 6 +) + +var TimePartConfig_TimePart_name = map[int32]string{ + 0: "TIME_PART_UNSPECIFIED", + 1: "YEAR", + 2: "MONTH", + 3: "DAY_OF_MONTH", + 4: "DAY_OF_WEEK", + 5: "WEEK_OF_YEAR", + 6: "HOUR_OF_DAY", +} +var TimePartConfig_TimePart_value = map[string]int32{ + "TIME_PART_UNSPECIFIED": 0, + "YEAR": 1, + "MONTH": 2, + "DAY_OF_MONTH": 3, + "DAY_OF_WEEK": 4, + "WEEK_OF_YEAR": 5, + "HOUR_OF_DAY": 6, +} + +func (x TimePartConfig_TimePart) String() string { + return proto.EnumName(TimePartConfig_TimePart_name, int32(x)) +} +func (TimePartConfig_TimePart) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{35, 0} } + +type CharsToIgnore_CommonCharsToIgnore int32 + +const ( + CharsToIgnore_COMMON_CHARS_TO_IGNORE_UNSPECIFIED CharsToIgnore_CommonCharsToIgnore = 0 + // 0-9 + CharsToIgnore_NUMERIC CharsToIgnore_CommonCharsToIgnore = 1 + // A-Z + CharsToIgnore_ALPHA_UPPER_CASE CharsToIgnore_CommonCharsToIgnore = 2 + // a-z + CharsToIgnore_ALPHA_LOWER_CASE CharsToIgnore_CommonCharsToIgnore = 3 + // US Punctuation, one of !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ + CharsToIgnore_PUNCTUATION CharsToIgnore_CommonCharsToIgnore = 4 + // Whitespace character, one of [ \t\n\x0B\f\r] + CharsToIgnore_WHITESPACE CharsToIgnore_CommonCharsToIgnore = 5 +) + +var CharsToIgnore_CommonCharsToIgnore_name = map[int32]string{ + 0: "COMMON_CHARS_TO_IGNORE_UNSPECIFIED", + 1: "NUMERIC", + 2: "ALPHA_UPPER_CASE", + 3: "ALPHA_LOWER_CASE", + 4: "PUNCTUATION", + 5: "WHITESPACE", +} +var CharsToIgnore_CommonCharsToIgnore_value = map[string]int32{ + "COMMON_CHARS_TO_IGNORE_UNSPECIFIED": 0, + "NUMERIC": 1, + "ALPHA_UPPER_CASE": 2, + "ALPHA_LOWER_CASE": 3, + "PUNCTUATION": 4, + "WHITESPACE": 5, +} + +func (x CharsToIgnore_CommonCharsToIgnore) String() string { + return proto.EnumName(CharsToIgnore_CommonCharsToIgnore_name, int32(x)) +} +func (CharsToIgnore_CommonCharsToIgnore) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{40, 0} +} + +// These are commonly used subsets of the alphabet that the FFX mode +// natively supports. In the algorithm, the alphabet is selected using +// the "radix". Therefore each corresponds to particular radix. +type CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet int32 + +const ( + CryptoReplaceFfxFpeConfig_FFX_COMMON_NATIVE_ALPHABET_UNSPECIFIED CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet = 0 + // [0-9] (radix of 10) + CryptoReplaceFfxFpeConfig_NUMERIC CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet = 1 + // [0-9A-F] (radix of 16) + CryptoReplaceFfxFpeConfig_HEXADECIMAL CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet = 2 + // [0-9A-Z] (radix of 36) + CryptoReplaceFfxFpeConfig_UPPER_CASE_ALPHA_NUMERIC CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet = 3 + // [0-9A-Za-z] (radix of 62) + CryptoReplaceFfxFpeConfig_ALPHA_NUMERIC CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet = 4 +) + +var CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet_name = map[int32]string{ + 0: "FFX_COMMON_NATIVE_ALPHABET_UNSPECIFIED", + 1: "NUMERIC", + 2: "HEXADECIMAL", + 3: "UPPER_CASE_ALPHA_NUMERIC", + 4: "ALPHA_NUMERIC", +} +var CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet_value = map[string]int32{ + "FFX_COMMON_NATIVE_ALPHABET_UNSPECIFIED": 0, + "NUMERIC": 1, + "HEXADECIMAL": 2, + "UPPER_CASE_ALPHA_NUMERIC": 3, + "ALPHA_NUMERIC": 4, +} + +func (x CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet) String() string { + return proto.EnumName(CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet_name, int32(x)) +} +func (CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{44, 0} +} + +type RecordCondition_Expressions_LogicalOperator int32 + +const ( + RecordCondition_Expressions_LOGICAL_OPERATOR_UNSPECIFIED RecordCondition_Expressions_LogicalOperator = 0 + RecordCondition_Expressions_AND RecordCondition_Expressions_LogicalOperator = 1 +) + +var RecordCondition_Expressions_LogicalOperator_name = map[int32]string{ + 0: "LOGICAL_OPERATOR_UNSPECIFIED", + 1: "AND", +} +var RecordCondition_Expressions_LogicalOperator_value = map[string]int32{ + "LOGICAL_OPERATOR_UNSPECIFIED": 0, + "AND": 1, +} + +func (x RecordCondition_Expressions_LogicalOperator) String() string { + return proto.EnumName(RecordCondition_Expressions_LogicalOperator_name, int32(x)) +} +func (RecordCondition_Expressions_LogicalOperator) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{54, 2, 0} +} + +// Possible outcomes of transformations. +type TransformationSummary_TransformationResultCode int32 + +const ( + TransformationSummary_TRANSFORMATION_RESULT_CODE_UNSPECIFIED TransformationSummary_TransformationResultCode = 0 + TransformationSummary_SUCCESS TransformationSummary_TransformationResultCode = 1 + TransformationSummary_ERROR TransformationSummary_TransformationResultCode = 2 +) + +var TransformationSummary_TransformationResultCode_name = map[int32]string{ + 0: "TRANSFORMATION_RESULT_CODE_UNSPECIFIED", + 1: "SUCCESS", + 2: "ERROR", +} +var TransformationSummary_TransformationResultCode_value = map[string]int32{ + "TRANSFORMATION_RESULT_CODE_UNSPECIFIED": 0, + "SUCCESS": 1, + "ERROR": 2, +} + +func (x TransformationSummary_TransformationResultCode) String() string { + return proto.EnumName(TransformationSummary_TransformationResultCode_name, int32(x)) +} +func (TransformationSummary_TransformationResultCode) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{56, 0} +} + +// Whether the trigger is currently active. If PAUSED or CANCELLED, no jobs +// will be created with this configuration. The service may automatically +// pause triggers experiencing frequent errors. To restart a job, set the +// status to HEALTHY after correcting user errors. +type JobTrigger_Status int32 + +const ( + JobTrigger_STATUS_UNSPECIFIED JobTrigger_Status = 0 + // Trigger is healthy. + JobTrigger_HEALTHY JobTrigger_Status = 1 + // Trigger is temporarily paused. + JobTrigger_PAUSED JobTrigger_Status = 2 + // Trigger is cancelled and can not be resumed. + JobTrigger_CANCELLED JobTrigger_Status = 3 +) + +var JobTrigger_Status_name = map[int32]string{ + 0: "STATUS_UNSPECIFIED", + 1: "HEALTHY", + 2: "PAUSED", + 3: "CANCELLED", +} +var JobTrigger_Status_value = map[string]int32{ + "STATUS_UNSPECIFIED": 0, + "HEALTHY": 1, + "PAUSED": 2, + "CANCELLED": 3, +} + +func (x JobTrigger_Status) String() string { + return proto.EnumName(JobTrigger_Status_name, int32(x)) +} +func (JobTrigger_Status) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{60, 0} } + +type DlpJob_JobState int32 + +const ( + DlpJob_JOB_STATE_UNSPECIFIED DlpJob_JobState = 0 + // The job has not yet started. + DlpJob_PENDING DlpJob_JobState = 1 + // The job is currently running. + DlpJob_RUNNING DlpJob_JobState = 2 + // The job is no longer running. + DlpJob_DONE DlpJob_JobState = 3 + // The job was canceled before it could complete. + DlpJob_CANCELED DlpJob_JobState = 4 + // The job had an error and did not complete. + DlpJob_FAILED DlpJob_JobState = 5 +) + +var DlpJob_JobState_name = map[int32]string{ + 0: "JOB_STATE_UNSPECIFIED", + 1: "PENDING", + 2: "RUNNING", + 3: "DONE", + 4: "CANCELED", + 5: "FAILED", +} +var DlpJob_JobState_value = map[string]int32{ + "JOB_STATE_UNSPECIFIED": 0, + "PENDING": 1, + "RUNNING": 2, + "DONE": 3, + "CANCELED": 4, + "FAILED": 5, +} + +func (x DlpJob_JobState) String() string { + return proto.EnumName(DlpJob_JobState_name, int32(x)) +} +func (DlpJob_JobState) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{75, 0} } + +// Configuration description of the scanning process. +// When used with redactContent only info_types and min_likelihood are currently +// used. +type InspectConfig struct { + // Restricts what info_types to look for. The values must correspond to + // InfoType values returned by ListInfoTypes or found in documentation. + // Empty info_types runs all enabled detectors. + InfoTypes []*InfoType `protobuf:"bytes,1,rep,name=info_types,json=infoTypes" json:"info_types,omitempty"` + // Only returns findings equal or above this threshold. The default is + // POSSIBLE. + MinLikelihood Likelihood `protobuf:"varint,2,opt,name=min_likelihood,json=minLikelihood,enum=google.privacy.dlp.v2beta2.Likelihood" json:"min_likelihood,omitempty"` + Limits *InspectConfig_FindingLimits `protobuf:"bytes,3,opt,name=limits" json:"limits,omitempty"` + // When true, a contextual quote from the data that triggered a finding is + // included in the response; see Finding.quote. + IncludeQuote bool `protobuf:"varint,4,opt,name=include_quote,json=includeQuote" json:"include_quote,omitempty"` + // When true, excludes type information of the findings. + ExcludeInfoTypes bool `protobuf:"varint,5,opt,name=exclude_info_types,json=excludeInfoTypes" json:"exclude_info_types,omitempty"` + // Custom infoTypes provided by the user. + CustomInfoTypes []*CustomInfoType `protobuf:"bytes,6,rep,name=custom_info_types,json=customInfoTypes" json:"custom_info_types,omitempty"` +} + +func (m *InspectConfig) Reset() { *m = InspectConfig{} } +func (m *InspectConfig) String() string { return proto.CompactTextString(m) } +func (*InspectConfig) ProtoMessage() {} +func (*InspectConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *InspectConfig) GetInfoTypes() []*InfoType { + if m != nil { + return m.InfoTypes + } + return nil +} + +func (m *InspectConfig) GetMinLikelihood() Likelihood { + if m != nil { + return m.MinLikelihood + } + return Likelihood_LIKELIHOOD_UNSPECIFIED +} + +func (m *InspectConfig) GetLimits() *InspectConfig_FindingLimits { + if m != nil { + return m.Limits + } + return nil +} + +func (m *InspectConfig) GetIncludeQuote() bool { + if m != nil { + return m.IncludeQuote + } + return false +} + +func (m *InspectConfig) GetExcludeInfoTypes() bool { + if m != nil { + return m.ExcludeInfoTypes + } + return false +} + +func (m *InspectConfig) GetCustomInfoTypes() []*CustomInfoType { + if m != nil { + return m.CustomInfoTypes + } + return nil +} + +type InspectConfig_FindingLimits struct { + // Max number of findings that will be returned for each item scanned. + MaxFindingsPerItem int32 `protobuf:"varint,1,opt,name=max_findings_per_item,json=maxFindingsPerItem" json:"max_findings_per_item,omitempty"` + // Max total number of findings that will be returned per request/job. + MaxFindingsPerRequest int32 `protobuf:"varint,2,opt,name=max_findings_per_request,json=maxFindingsPerRequest" json:"max_findings_per_request,omitempty"` + // Configuration of findings limit given for specified infoTypes. + MaxFindingsPerInfoType []*InspectConfig_FindingLimits_InfoTypeLimit `protobuf:"bytes,3,rep,name=max_findings_per_info_type,json=maxFindingsPerInfoType" json:"max_findings_per_info_type,omitempty"` +} + +func (m *InspectConfig_FindingLimits) Reset() { *m = InspectConfig_FindingLimits{} } +func (m *InspectConfig_FindingLimits) String() string { return proto.CompactTextString(m) } +func (*InspectConfig_FindingLimits) ProtoMessage() {} +func (*InspectConfig_FindingLimits) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 0} } + +func (m *InspectConfig_FindingLimits) GetMaxFindingsPerItem() int32 { + if m != nil { + return m.MaxFindingsPerItem + } + return 0 +} + +func (m *InspectConfig_FindingLimits) GetMaxFindingsPerRequest() int32 { + if m != nil { + return m.MaxFindingsPerRequest + } + return 0 +} + +func (m *InspectConfig_FindingLimits) GetMaxFindingsPerInfoType() []*InspectConfig_FindingLimits_InfoTypeLimit { + if m != nil { + return m.MaxFindingsPerInfoType + } + return nil +} + +// Max findings configuration per infoType, per content item or long +// running DlpJob. +type InspectConfig_FindingLimits_InfoTypeLimit struct { + // Type of information the findings limit applies to. Only one limit per + // info_type should be provided. If InfoTypeLimit does not have an + // info_type, the DLP API applies the limit against all info_types that + // are found but not specified in another InfoTypeLimit. + InfoType *InfoType `protobuf:"bytes,1,opt,name=info_type,json=infoType" json:"info_type,omitempty"` + // Max findings limit for the given infoType. + MaxFindings int32 `protobuf:"varint,2,opt,name=max_findings,json=maxFindings" json:"max_findings,omitempty"` +} + +func (m *InspectConfig_FindingLimits_InfoTypeLimit) Reset() { + *m = InspectConfig_FindingLimits_InfoTypeLimit{} +} +func (m *InspectConfig_FindingLimits_InfoTypeLimit) String() string { return proto.CompactTextString(m) } +func (*InspectConfig_FindingLimits_InfoTypeLimit) ProtoMessage() {} +func (*InspectConfig_FindingLimits_InfoTypeLimit) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{0, 0, 0} +} + +func (m *InspectConfig_FindingLimits_InfoTypeLimit) GetInfoType() *InfoType { + if m != nil { + return m.InfoType + } + return nil +} + +func (m *InspectConfig_FindingLimits_InfoTypeLimit) GetMaxFindings() int32 { + if m != nil { + return m.MaxFindings + } + return 0 +} + +// Container structure for the content to inspect. +type ContentItem struct { + // Type of the content, as defined in Content-Type HTTP header. + // Supported types are: all "text" types, octet streams, PNG images, + // JPEG images. + Type string `protobuf:"bytes,1,opt,name=type" json:"type,omitempty"` + // Data of the item either in the byte array or UTF-8 string form. + // + // Types that are valid to be assigned to DataItem: + // *ContentItem_Data + // *ContentItem_Value + // *ContentItem_Table + DataItem isContentItem_DataItem `protobuf_oneof:"data_item"` +} + +func (m *ContentItem) Reset() { *m = ContentItem{} } +func (m *ContentItem) String() string { return proto.CompactTextString(m) } +func (*ContentItem) ProtoMessage() {} +func (*ContentItem) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +type isContentItem_DataItem interface { + isContentItem_DataItem() +} + +type ContentItem_Data struct { + Data []byte `protobuf:"bytes,2,opt,name=data,proto3,oneof"` +} +type ContentItem_Value struct { + Value string `protobuf:"bytes,3,opt,name=value,oneof"` +} +type ContentItem_Table struct { + Table *Table `protobuf:"bytes,4,opt,name=table,oneof"` +} + +func (*ContentItem_Data) isContentItem_DataItem() {} +func (*ContentItem_Value) isContentItem_DataItem() {} +func (*ContentItem_Table) isContentItem_DataItem() {} + +func (m *ContentItem) GetDataItem() isContentItem_DataItem { + if m != nil { + return m.DataItem + } + return nil +} + +func (m *ContentItem) GetType() string { + if m != nil { + return m.Type + } + return "" +} + +func (m *ContentItem) GetData() []byte { + if x, ok := m.GetDataItem().(*ContentItem_Data); ok { + return x.Data + } + return nil +} + +func (m *ContentItem) GetValue() string { + if x, ok := m.GetDataItem().(*ContentItem_Value); ok { + return x.Value + } + return "" +} + +func (m *ContentItem) GetTable() *Table { + if x, ok := m.GetDataItem().(*ContentItem_Table); ok { + return x.Table + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ContentItem) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _ContentItem_OneofMarshaler, _ContentItem_OneofUnmarshaler, _ContentItem_OneofSizer, []interface{}{ + (*ContentItem_Data)(nil), + (*ContentItem_Value)(nil), + (*ContentItem_Table)(nil), + } +} + +func _ContentItem_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ContentItem) + // data_item + switch x := m.DataItem.(type) { + case *ContentItem_Data: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeRawBytes(x.Data) + case *ContentItem_Value: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Value) + case *ContentItem_Table: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Table); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("ContentItem.DataItem has unexpected type %T", x) + } + return nil +} + +func _ContentItem_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ContentItem) + switch tag { + case 2: // data_item.data + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.DataItem = &ContentItem_Data{x} + return true, err + case 3: // data_item.value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.DataItem = &ContentItem_Value{x} + return true, err + case 4: // data_item.table + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Table) + err := b.DecodeMessage(msg) + m.DataItem = &ContentItem_Table{msg} + return true, err + default: + return false, nil + } +} + +func _ContentItem_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ContentItem) + // data_item + switch x := m.DataItem.(type) { + case *ContentItem_Data: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Data))) + n += len(x.Data) + case *ContentItem_Value: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Value))) + n += len(x.Value) + case *ContentItem_Table: + s := proto.Size(x.Table) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Structured content to inspect. Up to 50,000 `Value`s per request allowed. +type Table struct { + Headers []*FieldId `protobuf:"bytes,1,rep,name=headers" json:"headers,omitempty"` + Rows []*Table_Row `protobuf:"bytes,2,rep,name=rows" json:"rows,omitempty"` +} + +func (m *Table) Reset() { *m = Table{} } +func (m *Table) String() string { return proto.CompactTextString(m) } +func (*Table) ProtoMessage() {} +func (*Table) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *Table) GetHeaders() []*FieldId { + if m != nil { + return m.Headers + } + return nil +} + +func (m *Table) GetRows() []*Table_Row { + if m != nil { + return m.Rows + } + return nil +} + +type Table_Row struct { + Values []*Value `protobuf:"bytes,1,rep,name=values" json:"values,omitempty"` +} + +func (m *Table_Row) Reset() { *m = Table_Row{} } +func (m *Table_Row) String() string { return proto.CompactTextString(m) } +func (*Table_Row) ProtoMessage() {} +func (*Table_Row) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} } + +func (m *Table_Row) GetValues() []*Value { + if m != nil { + return m.Values + } + return nil +} + +// All the findings for a single scanned item. +type InspectResult struct { + // List of findings for an item. + Findings []*Finding `protobuf:"bytes,1,rep,name=findings" json:"findings,omitempty"` + // If true, then this item might have more findings than were returned, + // and the findings returned are an arbitrary subset of all findings. + // The findings list might be truncated because the input items were too + // large, or because the server reached the maximum amount of resources + // allowed for a single API call. For best results, divide the input into + // smaller batches. + FindingsTruncated bool `protobuf:"varint,2,opt,name=findings_truncated,json=findingsTruncated" json:"findings_truncated,omitempty"` +} + +func (m *InspectResult) Reset() { *m = InspectResult{} } +func (m *InspectResult) String() string { return proto.CompactTextString(m) } +func (*InspectResult) ProtoMessage() {} +func (*InspectResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *InspectResult) GetFindings() []*Finding { + if m != nil { + return m.Findings + } + return nil +} + +func (m *InspectResult) GetFindingsTruncated() bool { + if m != nil { + return m.FindingsTruncated + } + return false +} + +// Represents a piece of potentially sensitive content. +type Finding struct { + // The content that was found. Even if the content is not textual, it + // may be converted to a textual representation here. + // Provided if requested by the `InspectConfig` and the finding is + // less than or equal to 4096 bytes long. If the finding exceeds 4096 bytes + // in length, the quote may be omitted. + Quote string `protobuf:"bytes,1,opt,name=quote" json:"quote,omitempty"` + // The type of content that might have been found. + // Provided if requested by the `InspectConfig`. + InfoType *InfoType `protobuf:"bytes,2,opt,name=info_type,json=infoType" json:"info_type,omitempty"` + // Estimate of how likely it is that the `info_type` is correct. + Likelihood Likelihood `protobuf:"varint,3,opt,name=likelihood,enum=google.privacy.dlp.v2beta2.Likelihood" json:"likelihood,omitempty"` + // Where the content was found. + Location *Location `protobuf:"bytes,4,opt,name=location" json:"location,omitempty"` + // Timestamp when finding was detected. + CreateTime *google_protobuf1.Timestamp `protobuf:"bytes,6,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // InfoType-dependent details parsed from quote. + QuoteInfo *QuoteInfo `protobuf:"bytes,7,opt,name=quote_info,json=quoteInfo" json:"quote_info,omitempty"` +} + +func (m *Finding) Reset() { *m = Finding{} } +func (m *Finding) String() string { return proto.CompactTextString(m) } +func (*Finding) ProtoMessage() {} +func (*Finding) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *Finding) GetQuote() string { + if m != nil { + return m.Quote + } + return "" +} + +func (m *Finding) GetInfoType() *InfoType { + if m != nil { + return m.InfoType + } + return nil +} + +func (m *Finding) GetLikelihood() Likelihood { + if m != nil { + return m.Likelihood + } + return Likelihood_LIKELIHOOD_UNSPECIFIED +} + +func (m *Finding) GetLocation() *Location { + if m != nil { + return m.Location + } + return nil +} + +func (m *Finding) GetCreateTime() *google_protobuf1.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *Finding) GetQuoteInfo() *QuoteInfo { + if m != nil { + return m.QuoteInfo + } + return nil +} + +// Specifies the location of the finding. +type Location struct { + // Zero-based byte offsets delimiting the finding. + // These are relative to the finding's containing element. + // Note that when the content is not textual, this references + // the UTF-8 encoded textual representation of the content. + // Omitted if content is an image. + ByteRange *Range `protobuf:"bytes,1,opt,name=byte_range,json=byteRange" json:"byte_range,omitempty"` + // Unicode character offsets delimiting the finding. + // These are relative to the finding's containing element. + // Provided when the content is text. + CodepointRange *Range `protobuf:"bytes,2,opt,name=codepoint_range,json=codepointRange" json:"codepoint_range,omitempty"` + // The area within the image that contained the finding. + // Provided when the content is an image. + ImageBoxes []*ImageLocation `protobuf:"bytes,3,rep,name=image_boxes,json=imageBoxes" json:"image_boxes,omitempty"` + // The pointer to the record in storage that contained the field the + // finding was found in. + // Provided when the finding's containing element is a property + // of a storage object. + RecordKey *RecordKey `protobuf:"bytes,4,opt,name=record_key,json=recordKey" json:"record_key,omitempty"` + // The pointer to the property or cell that contained the finding. + // Provided when the finding's containing element is a cell in a table + // or a property of storage object. + FieldId *FieldId `protobuf:"bytes,5,opt,name=field_id,json=fieldId" json:"field_id,omitempty"` + // The pointer to the row of the table that contained the finding. + // Provided when the finding's containing element is a cell of a table. + TableLocation *TableLocation `protobuf:"bytes,6,opt,name=table_location,json=tableLocation" json:"table_location,omitempty"` +} + +func (m *Location) Reset() { *m = Location{} } +func (m *Location) String() string { return proto.CompactTextString(m) } +func (*Location) ProtoMessage() {} +func (*Location) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *Location) GetByteRange() *Range { + if m != nil { + return m.ByteRange + } + return nil +} + +func (m *Location) GetCodepointRange() *Range { + if m != nil { + return m.CodepointRange + } + return nil +} + +func (m *Location) GetImageBoxes() []*ImageLocation { + if m != nil { + return m.ImageBoxes + } + return nil +} + +func (m *Location) GetRecordKey() *RecordKey { + if m != nil { + return m.RecordKey + } + return nil +} + +func (m *Location) GetFieldId() *FieldId { + if m != nil { + return m.FieldId + } + return nil +} + +func (m *Location) GetTableLocation() *TableLocation { + if m != nil { + return m.TableLocation + } + return nil +} + +// Location of a finding within a table. +type TableLocation struct { + // The zero-based index of the row where the finding is located. + RowIndex int64 `protobuf:"varint,1,opt,name=row_index,json=rowIndex" json:"row_index,omitempty"` +} + +func (m *TableLocation) Reset() { *m = TableLocation{} } +func (m *TableLocation) String() string { return proto.CompactTextString(m) } +func (*TableLocation) ProtoMessage() {} +func (*TableLocation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *TableLocation) GetRowIndex() int64 { + if m != nil { + return m.RowIndex + } + return 0 +} + +// Generic half-open interval [start, end) +type Range struct { + // Index of the first character of the range (inclusive). + Start int64 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` + // Index of the last character of the range (exclusive). + End int64 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` +} + +func (m *Range) Reset() { *m = Range{} } +func (m *Range) String() string { return proto.CompactTextString(m) } +func (*Range) ProtoMessage() {} +func (*Range) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *Range) GetStart() int64 { + if m != nil { + return m.Start + } + return 0 +} + +func (m *Range) GetEnd() int64 { + if m != nil { + return m.End + } + return 0 +} + +// Bounding box encompassing detected text within an image. +type ImageLocation struct { + // Top coordinate of the bounding box. (0,0) is upper left. + Top int32 `protobuf:"varint,1,opt,name=top" json:"top,omitempty"` + // Left coordinate of the bounding box. (0,0) is upper left. + Left int32 `protobuf:"varint,2,opt,name=left" json:"left,omitempty"` + // Width of the bounding box in pixels. + Width int32 `protobuf:"varint,3,opt,name=width" json:"width,omitempty"` + // Height of the bounding box in pixels. + Height int32 `protobuf:"varint,4,opt,name=height" json:"height,omitempty"` +} + +func (m *ImageLocation) Reset() { *m = ImageLocation{} } +func (m *ImageLocation) String() string { return proto.CompactTextString(m) } +func (*ImageLocation) ProtoMessage() {} +func (*ImageLocation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *ImageLocation) GetTop() int32 { + if m != nil { + return m.Top + } + return 0 +} + +func (m *ImageLocation) GetLeft() int32 { + if m != nil { + return m.Left + } + return 0 +} + +func (m *ImageLocation) GetWidth() int32 { + if m != nil { + return m.Width + } + return 0 +} + +func (m *ImageLocation) GetHeight() int32 { + if m != nil { + return m.Height + } + return 0 +} + +// Request to search for potentially sensitive info in a list of items +// and replace it with a default or provided content. +type RedactImageRequest struct { + // The parent resource name, for example projects/my-project-id. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Configuration for the inspector. + InspectConfig *InspectConfig `protobuf:"bytes,2,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"` + // Type of the content, as defined in Content-Type HTTP header. + // Supported types are: PNG, JPEG, SVG, & BMP. + ImageType string `protobuf:"bytes,3,opt,name=image_type,json=imageType" json:"image_type,omitempty"` + // The bytes of the image to redact. + ImageData []byte `protobuf:"bytes,4,opt,name=image_data,json=imageData,proto3" json:"image_data,omitempty"` + // The configuration for specifying what content to redact from images. + ImageRedactionConfigs []*RedactImageRequest_ImageRedactionConfig `protobuf:"bytes,5,rep,name=image_redaction_configs,json=imageRedactionConfigs" json:"image_redaction_configs,omitempty"` +} + +func (m *RedactImageRequest) Reset() { *m = RedactImageRequest{} } +func (m *RedactImageRequest) String() string { return proto.CompactTextString(m) } +func (*RedactImageRequest) ProtoMessage() {} +func (*RedactImageRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *RedactImageRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *RedactImageRequest) GetInspectConfig() *InspectConfig { + if m != nil { + return m.InspectConfig + } + return nil +} + +func (m *RedactImageRequest) GetImageType() string { + if m != nil { + return m.ImageType + } + return "" +} + +func (m *RedactImageRequest) GetImageData() []byte { + if m != nil { + return m.ImageData + } + return nil +} + +func (m *RedactImageRequest) GetImageRedactionConfigs() []*RedactImageRequest_ImageRedactionConfig { + if m != nil { + return m.ImageRedactionConfigs + } + return nil +} + +// Configuration for determining how redaction of images should occur. +type RedactImageRequest_ImageRedactionConfig struct { + // Type of information to redact from images. + // + // Types that are valid to be assigned to Target: + // *RedactImageRequest_ImageRedactionConfig_InfoType + // *RedactImageRequest_ImageRedactionConfig_RedactAllText + Target isRedactImageRequest_ImageRedactionConfig_Target `protobuf_oneof:"target"` + // The color to use when redacting content from an image. If not specified, + // the default is black. + RedactionColor *Color `protobuf:"bytes,3,opt,name=redaction_color,json=redactionColor" json:"redaction_color,omitempty"` +} + +func (m *RedactImageRequest_ImageRedactionConfig) Reset() { + *m = RedactImageRequest_ImageRedactionConfig{} +} +func (m *RedactImageRequest_ImageRedactionConfig) String() string { return proto.CompactTextString(m) } +func (*RedactImageRequest_ImageRedactionConfig) ProtoMessage() {} +func (*RedactImageRequest_ImageRedactionConfig) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{9, 0} +} + +type isRedactImageRequest_ImageRedactionConfig_Target interface { + isRedactImageRequest_ImageRedactionConfig_Target() +} + +type RedactImageRequest_ImageRedactionConfig_InfoType struct { + InfoType *InfoType `protobuf:"bytes,1,opt,name=info_type,json=infoType,oneof"` +} +type RedactImageRequest_ImageRedactionConfig_RedactAllText struct { + RedactAllText bool `protobuf:"varint,2,opt,name=redact_all_text,json=redactAllText,oneof"` +} + +func (*RedactImageRequest_ImageRedactionConfig_InfoType) isRedactImageRequest_ImageRedactionConfig_Target() { +} +func (*RedactImageRequest_ImageRedactionConfig_RedactAllText) isRedactImageRequest_ImageRedactionConfig_Target() { +} + +func (m *RedactImageRequest_ImageRedactionConfig) GetTarget() isRedactImageRequest_ImageRedactionConfig_Target { + if m != nil { + return m.Target + } + return nil +} + +func (m *RedactImageRequest_ImageRedactionConfig) GetInfoType() *InfoType { + if x, ok := m.GetTarget().(*RedactImageRequest_ImageRedactionConfig_InfoType); ok { + return x.InfoType + } + return nil +} + +func (m *RedactImageRequest_ImageRedactionConfig) GetRedactAllText() bool { + if x, ok := m.GetTarget().(*RedactImageRequest_ImageRedactionConfig_RedactAllText); ok { + return x.RedactAllText + } + return false +} + +func (m *RedactImageRequest_ImageRedactionConfig) GetRedactionColor() *Color { + if m != nil { + return m.RedactionColor + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*RedactImageRequest_ImageRedactionConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _RedactImageRequest_ImageRedactionConfig_OneofMarshaler, _RedactImageRequest_ImageRedactionConfig_OneofUnmarshaler, _RedactImageRequest_ImageRedactionConfig_OneofSizer, []interface{}{ + (*RedactImageRequest_ImageRedactionConfig_InfoType)(nil), + (*RedactImageRequest_ImageRedactionConfig_RedactAllText)(nil), + } +} + +func _RedactImageRequest_ImageRedactionConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*RedactImageRequest_ImageRedactionConfig) + // target + switch x := m.Target.(type) { + case *RedactImageRequest_ImageRedactionConfig_InfoType: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.InfoType); err != nil { + return err + } + case *RedactImageRequest_ImageRedactionConfig_RedactAllText: + t := uint64(0) + if x.RedactAllText { + t = 1 + } + b.EncodeVarint(2<<3 | proto.WireVarint) + b.EncodeVarint(t) + case nil: + default: + return fmt.Errorf("RedactImageRequest_ImageRedactionConfig.Target has unexpected type %T", x) + } + return nil +} + +func _RedactImageRequest_ImageRedactionConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*RedactImageRequest_ImageRedactionConfig) + switch tag { + case 1: // target.info_type + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(InfoType) + err := b.DecodeMessage(msg) + m.Target = &RedactImageRequest_ImageRedactionConfig_InfoType{msg} + return true, err + case 2: // target.redact_all_text + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Target = &RedactImageRequest_ImageRedactionConfig_RedactAllText{x != 0} + return true, err + default: + return false, nil + } +} + +func _RedactImageRequest_ImageRedactionConfig_OneofSizer(msg proto.Message) (n int) { + m := msg.(*RedactImageRequest_ImageRedactionConfig) + // target + switch x := m.Target.(type) { + case *RedactImageRequest_ImageRedactionConfig_InfoType: + s := proto.Size(x.InfoType) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *RedactImageRequest_ImageRedactionConfig_RedactAllText: + n += proto.SizeVarint(2<<3 | proto.WireVarint) + n += 1 + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Represents a color in the RGB color space. +type Color struct { + // The amount of red in the color as a value in the interval [0, 1]. + Red float32 `protobuf:"fixed32,1,opt,name=red" json:"red,omitempty"` + // The amount of green in the color as a value in the interval [0, 1]. + Green float32 `protobuf:"fixed32,2,opt,name=green" json:"green,omitempty"` + // The amount of blue in the color as a value in the interval [0, 1]. + Blue float32 `protobuf:"fixed32,3,opt,name=blue" json:"blue,omitempty"` +} + +func (m *Color) Reset() { *m = Color{} } +func (m *Color) String() string { return proto.CompactTextString(m) } +func (*Color) ProtoMessage() {} +func (*Color) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *Color) GetRed() float32 { + if m != nil { + return m.Red + } + return 0 +} + +func (m *Color) GetGreen() float32 { + if m != nil { + return m.Green + } + return 0 +} + +func (m *Color) GetBlue() float32 { + if m != nil { + return m.Blue + } + return 0 +} + +// Results of redacting an image. +type RedactImageResponse struct { + // The redacted image. The type will be the same as the original image. + RedactedImage []byte `protobuf:"bytes,1,opt,name=redacted_image,json=redactedImage,proto3" json:"redacted_image,omitempty"` + // If an image was being inspected and the InspectConfig's include_quote was + // set to true, then this field will include all text, if any, that was found + // in the image. + ExtractedText string `protobuf:"bytes,2,opt,name=extracted_text,json=extractedText" json:"extracted_text,omitempty"` +} + +func (m *RedactImageResponse) Reset() { *m = RedactImageResponse{} } +func (m *RedactImageResponse) String() string { return proto.CompactTextString(m) } +func (*RedactImageResponse) ProtoMessage() {} +func (*RedactImageResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *RedactImageResponse) GetRedactedImage() []byte { + if m != nil { + return m.RedactedImage + } + return nil +} + +func (m *RedactImageResponse) GetExtractedText() string { + if m != nil { + return m.ExtractedText + } + return "" +} + +// Request to de-identify a list of items. +type DeidentifyContentRequest struct { + // The parent resource name, for example projects/my-project-id. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Configuration for the de-identification of the content item. + // Items specified here will override the template referenced by the + // deidentify_template_name argument. + DeidentifyConfig *DeidentifyConfig `protobuf:"bytes,2,opt,name=deidentify_config,json=deidentifyConfig" json:"deidentify_config,omitempty"` + // Configuration for the inspector. + // Items specified here will override the template referenced by the + // inspect_template_name argument. + InspectConfig *InspectConfig `protobuf:"bytes,3,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"` + // The item to de-identify. Will be treated as text. + Item *ContentItem `protobuf:"bytes,4,opt,name=item" json:"item,omitempty"` + // Optional template to use. Any configuration directly specified in + // inspect_config will override those set in the template. Singular fields + // that are set in this request will replace their corresponding fields in the + // template. Repeated fields are appended. Singular sub-messages and groups + // are recursively merged. + InspectTemplateName string `protobuf:"bytes,5,opt,name=inspect_template_name,json=inspectTemplateName" json:"inspect_template_name,omitempty"` + // Optional template to use. Any configuration directly specified in + // deidentify_config will override those set in the template. Singular fields + // that are set in this request will replace their corresponding fields in the + // template. Repeated fields are appended. Singular sub-messages and groups + // are recursively merged. + DeidentifyTemplateName string `protobuf:"bytes,6,opt,name=deidentify_template_name,json=deidentifyTemplateName" json:"deidentify_template_name,omitempty"` +} + +func (m *DeidentifyContentRequest) Reset() { *m = DeidentifyContentRequest{} } +func (m *DeidentifyContentRequest) String() string { return proto.CompactTextString(m) } +func (*DeidentifyContentRequest) ProtoMessage() {} +func (*DeidentifyContentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *DeidentifyContentRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *DeidentifyContentRequest) GetDeidentifyConfig() *DeidentifyConfig { + if m != nil { + return m.DeidentifyConfig + } + return nil +} + +func (m *DeidentifyContentRequest) GetInspectConfig() *InspectConfig { + if m != nil { + return m.InspectConfig + } + return nil +} + +func (m *DeidentifyContentRequest) GetItem() *ContentItem { + if m != nil { + return m.Item + } + return nil +} + +func (m *DeidentifyContentRequest) GetInspectTemplateName() string { + if m != nil { + return m.InspectTemplateName + } + return "" +} + +func (m *DeidentifyContentRequest) GetDeidentifyTemplateName() string { + if m != nil { + return m.DeidentifyTemplateName + } + return "" +} + +// Results of de-identifying a ContentItem. +type DeidentifyContentResponse struct { + // The de-identified item. + Item *ContentItem `protobuf:"bytes,1,opt,name=item" json:"item,omitempty"` + // An overview of the changes that were made on the `item`. + Overview *TransformationOverview `protobuf:"bytes,2,opt,name=overview" json:"overview,omitempty"` +} + +func (m *DeidentifyContentResponse) Reset() { *m = DeidentifyContentResponse{} } +func (m *DeidentifyContentResponse) String() string { return proto.CompactTextString(m) } +func (*DeidentifyContentResponse) ProtoMessage() {} +func (*DeidentifyContentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +func (m *DeidentifyContentResponse) GetItem() *ContentItem { + if m != nil { + return m.Item + } + return nil +} + +func (m *DeidentifyContentResponse) GetOverview() *TransformationOverview { + if m != nil { + return m.Overview + } + return nil +} + +// Request to re-identify an item. +type ReidentifyContentRequest struct { + // The parent resource name. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Configuration for the re-identification of the content item. + // This field shares the same proto message type that is used for + // de-identification, however its usage here is for the reversal of the + // previous de-identification. Re-identification is performed by examining + // the transformations used to de-identify the items and executing the + // reverse. This requires that only reversible transformations + // be provided here. The reversible transformations are: + // + // - `CryptoReplaceFfxFpeConfig` + ReidentifyConfig *DeidentifyConfig `protobuf:"bytes,2,opt,name=reidentify_config,json=reidentifyConfig" json:"reidentify_config,omitempty"` + // Configuration for the inspector. + InspectConfig *InspectConfig `protobuf:"bytes,3,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"` + // The item to re-identify. Will be treated as text. + Item *ContentItem `protobuf:"bytes,4,opt,name=item" json:"item,omitempty"` + // Optional template to use. Any configuration directly specified in + // `inspect_config` will override those set in the template. Singular fields + // that are set in this request will replace their corresponding fields in the + // template. Repeated fields are appended. Singular sub-messages and groups + // are recursively merged. + InspectTemplateName string `protobuf:"bytes,5,opt,name=inspect_template_name,json=inspectTemplateName" json:"inspect_template_name,omitempty"` + // Optional template to use. References an instance of `DeidentifyTemplate`. + // Any configuration directly specified in `reidentify_config` or + // `inspect_config` will override those set in the template. Singular fields + // that are set in this request will replace their corresponding fields in the + // template. Repeated fields are appended. Singular sub-messages and groups + // are recursively merged. + ReidentifyTemplateName string `protobuf:"bytes,6,opt,name=reidentify_template_name,json=reidentifyTemplateName" json:"reidentify_template_name,omitempty"` +} + +func (m *ReidentifyContentRequest) Reset() { *m = ReidentifyContentRequest{} } +func (m *ReidentifyContentRequest) String() string { return proto.CompactTextString(m) } +func (*ReidentifyContentRequest) ProtoMessage() {} +func (*ReidentifyContentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +func (m *ReidentifyContentRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ReidentifyContentRequest) GetReidentifyConfig() *DeidentifyConfig { + if m != nil { + return m.ReidentifyConfig + } + return nil +} + +func (m *ReidentifyContentRequest) GetInspectConfig() *InspectConfig { + if m != nil { + return m.InspectConfig + } + return nil +} + +func (m *ReidentifyContentRequest) GetItem() *ContentItem { + if m != nil { + return m.Item + } + return nil +} + +func (m *ReidentifyContentRequest) GetInspectTemplateName() string { + if m != nil { + return m.InspectTemplateName + } + return "" +} + +func (m *ReidentifyContentRequest) GetReidentifyTemplateName() string { + if m != nil { + return m.ReidentifyTemplateName + } + return "" +} + +// Results of re-identifying a item. +type ReidentifyContentResponse struct { + // The re-identified item. + Item *ContentItem `protobuf:"bytes,1,opt,name=item" json:"item,omitempty"` + // An overview of the changes that were made to the `item`. + Overview *TransformationOverview `protobuf:"bytes,2,opt,name=overview" json:"overview,omitempty"` +} + +func (m *ReidentifyContentResponse) Reset() { *m = ReidentifyContentResponse{} } +func (m *ReidentifyContentResponse) String() string { return proto.CompactTextString(m) } +func (*ReidentifyContentResponse) ProtoMessage() {} +func (*ReidentifyContentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +func (m *ReidentifyContentResponse) GetItem() *ContentItem { + if m != nil { + return m.Item + } + return nil +} + +func (m *ReidentifyContentResponse) GetOverview() *TransformationOverview { + if m != nil { + return m.Overview + } + return nil +} + +// Request to search for potentially sensitive info in a ContentItem. +type InspectContentRequest struct { + // The parent resource name, for example projects/my-project-id. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Configuration for the inspector. What specified here will override + // the template referenced by the inspect_template_name argument. + InspectConfig *InspectConfig `protobuf:"bytes,2,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"` + // The item to inspect. + Item *ContentItem `protobuf:"bytes,3,opt,name=item" json:"item,omitempty"` + // Optional template to use. Any configuration directly specified in + // inspect_config will override those set in the template. Singular fields + // that are set in this request will replace their corresponding fields in the + // template. Repeated fields are appended. Singular sub-messages and groups + // are recursively merged. + InspectTemplateName string `protobuf:"bytes,4,opt,name=inspect_template_name,json=inspectTemplateName" json:"inspect_template_name,omitempty"` +} + +func (m *InspectContentRequest) Reset() { *m = InspectContentRequest{} } +func (m *InspectContentRequest) String() string { return proto.CompactTextString(m) } +func (*InspectContentRequest) ProtoMessage() {} +func (*InspectContentRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } + +func (m *InspectContentRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *InspectContentRequest) GetInspectConfig() *InspectConfig { + if m != nil { + return m.InspectConfig + } + return nil +} + +func (m *InspectContentRequest) GetItem() *ContentItem { + if m != nil { + return m.Item + } + return nil +} + +func (m *InspectContentRequest) GetInspectTemplateName() string { + if m != nil { + return m.InspectTemplateName + } + return "" +} + +// Results of inspecting an item. +type InspectContentResponse struct { + // The findings. + Result *InspectResult `protobuf:"bytes,1,opt,name=result" json:"result,omitempty"` +} + +func (m *InspectContentResponse) Reset() { *m = InspectContentResponse{} } +func (m *InspectContentResponse) String() string { return proto.CompactTextString(m) } +func (*InspectContentResponse) ProtoMessage() {} +func (*InspectContentResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } + +func (m *InspectContentResponse) GetResult() *InspectResult { + if m != nil { + return m.Result + } + return nil +} + +// Request for scheduling a scan of a data subset from a Google Platform data +// repository. +type InspectDataSourceRequest struct { + // The parent resource name, for example projects/my-project-id. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // A configuration for the job. + JobConfig *InspectJobConfig `protobuf:"bytes,2,opt,name=job_config,json=jobConfig" json:"job_config,omitempty"` + // Optional job ID to use for the created job. If not provided, a job ID will + // automatically be generated. Must be unique within the project. The job ID + // can contain uppercase and lowercase letters, numbers, and hyphens; that is, + // it must match the regular expression: `[a-zA-Z\\d-]+`. The maximum length + // is 100 characters. Can be empty to allow the system to generate one. + JobId string `protobuf:"bytes,3,opt,name=job_id,json=jobId" json:"job_id,omitempty"` +} + +func (m *InspectDataSourceRequest) Reset() { *m = InspectDataSourceRequest{} } +func (m *InspectDataSourceRequest) String() string { return proto.CompactTextString(m) } +func (*InspectDataSourceRequest) ProtoMessage() {} +func (*InspectDataSourceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } + +func (m *InspectDataSourceRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *InspectDataSourceRequest) GetJobConfig() *InspectJobConfig { + if m != nil { + return m.JobConfig + } + return nil +} + +func (m *InspectDataSourceRequest) GetJobId() string { + if m != nil { + return m.JobId + } + return "" +} + +// Cloud repository for storing output. +type OutputStorageConfig struct { + // Types that are valid to be assigned to Type: + // *OutputStorageConfig_Table + Type isOutputStorageConfig_Type `protobuf_oneof:"type"` + // Schema used for writing the findings. Columns are derived from the + // `Finding` object. If appending to an existing table, any columns from the + // predefined schema that are missing will be added. No columns in the + // existing table will be deleted. + // + // If unspecified, then all available columns will be used for a new table, + // and no changes will be made to an existing table. + OutputSchema OutputStorageConfig_OutputSchema `protobuf:"varint,3,opt,name=output_schema,json=outputSchema,enum=google.privacy.dlp.v2beta2.OutputStorageConfig_OutputSchema" json:"output_schema,omitempty"` +} + +func (m *OutputStorageConfig) Reset() { *m = OutputStorageConfig{} } +func (m *OutputStorageConfig) String() string { return proto.CompactTextString(m) } +func (*OutputStorageConfig) ProtoMessage() {} +func (*OutputStorageConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } + +type isOutputStorageConfig_Type interface { + isOutputStorageConfig_Type() +} + +type OutputStorageConfig_Table struct { + Table *BigQueryTable `protobuf:"bytes,1,opt,name=table,oneof"` +} + +func (*OutputStorageConfig_Table) isOutputStorageConfig_Type() {} + +func (m *OutputStorageConfig) GetType() isOutputStorageConfig_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *OutputStorageConfig) GetTable() *BigQueryTable { + if x, ok := m.GetType().(*OutputStorageConfig_Table); ok { + return x.Table + } + return nil +} + +func (m *OutputStorageConfig) GetOutputSchema() OutputStorageConfig_OutputSchema { + if m != nil { + return m.OutputSchema + } + return OutputStorageConfig_OUTPUT_SCHEMA_UNSPECIFIED +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*OutputStorageConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _OutputStorageConfig_OneofMarshaler, _OutputStorageConfig_OneofUnmarshaler, _OutputStorageConfig_OneofSizer, []interface{}{ + (*OutputStorageConfig_Table)(nil), + } +} + +func _OutputStorageConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*OutputStorageConfig) + // type + switch x := m.Type.(type) { + case *OutputStorageConfig_Table: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Table); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("OutputStorageConfig.Type has unexpected type %T", x) + } + return nil +} + +func _OutputStorageConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*OutputStorageConfig) + switch tag { + case 1: // type.table + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(BigQueryTable) + err := b.DecodeMessage(msg) + m.Type = &OutputStorageConfig_Table{msg} + return true, err + default: + return false, nil + } +} + +func _OutputStorageConfig_OneofSizer(msg proto.Message) (n int) { + m := msg.(*OutputStorageConfig) + // type + switch x := m.Type.(type) { + case *OutputStorageConfig_Table: + s := proto.Size(x.Table) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Statistics regarding a specific InfoType. +type InfoTypeStatistics struct { + // The type of finding this stat is for. + InfoType *InfoType `protobuf:"bytes,1,opt,name=info_type,json=infoType" json:"info_type,omitempty"` + // Number of findings for this infoType. + Count int64 `protobuf:"varint,2,opt,name=count" json:"count,omitempty"` +} + +func (m *InfoTypeStatistics) Reset() { *m = InfoTypeStatistics{} } +func (m *InfoTypeStatistics) String() string { return proto.CompactTextString(m) } +func (*InfoTypeStatistics) ProtoMessage() {} +func (*InfoTypeStatistics) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } + +func (m *InfoTypeStatistics) GetInfoType() *InfoType { + if m != nil { + return m.InfoType + } + return nil +} + +func (m *InfoTypeStatistics) GetCount() int64 { + if m != nil { + return m.Count + } + return 0 +} + +// The results of an inspect DataSource job. +type InspectDataSourceDetails struct { + // The configuration used for this job. + RequestedOptions *InspectDataSourceDetails_RequestedOptions `protobuf:"bytes,2,opt,name=requested_options,json=requestedOptions" json:"requested_options,omitempty"` + // A summary of the outcome of this inspect job. + Result *InspectDataSourceDetails_Result `protobuf:"bytes,3,opt,name=result" json:"result,omitempty"` +} + +func (m *InspectDataSourceDetails) Reset() { *m = InspectDataSourceDetails{} } +func (m *InspectDataSourceDetails) String() string { return proto.CompactTextString(m) } +func (*InspectDataSourceDetails) ProtoMessage() {} +func (*InspectDataSourceDetails) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } + +func (m *InspectDataSourceDetails) GetRequestedOptions() *InspectDataSourceDetails_RequestedOptions { + if m != nil { + return m.RequestedOptions + } + return nil +} + +func (m *InspectDataSourceDetails) GetResult() *InspectDataSourceDetails_Result { + if m != nil { + return m.Result + } + return nil +} + +type InspectDataSourceDetails_RequestedOptions struct { + // If run with an inspect template, a snapshot of it's state at the time of + // this run. + SnapshotInspectTemplate *InspectTemplate `protobuf:"bytes,1,opt,name=snapshot_inspect_template,json=snapshotInspectTemplate" json:"snapshot_inspect_template,omitempty"` + JobConfig *InspectJobConfig `protobuf:"bytes,3,opt,name=job_config,json=jobConfig" json:"job_config,omitempty"` +} + +func (m *InspectDataSourceDetails_RequestedOptions) Reset() { + *m = InspectDataSourceDetails_RequestedOptions{} +} +func (m *InspectDataSourceDetails_RequestedOptions) String() string { return proto.CompactTextString(m) } +func (*InspectDataSourceDetails_RequestedOptions) ProtoMessage() {} +func (*InspectDataSourceDetails_RequestedOptions) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{21, 0} +} + +func (m *InspectDataSourceDetails_RequestedOptions) GetSnapshotInspectTemplate() *InspectTemplate { + if m != nil { + return m.SnapshotInspectTemplate + } + return nil +} + +func (m *InspectDataSourceDetails_RequestedOptions) GetJobConfig() *InspectJobConfig { + if m != nil { + return m.JobConfig + } + return nil +} + +type InspectDataSourceDetails_Result struct { + // Total size in bytes that were processed. + ProcessedBytes int64 `protobuf:"varint,1,opt,name=processed_bytes,json=processedBytes" json:"processed_bytes,omitempty"` + // Estimate of the number of bytes to process. + TotalEstimatedBytes int64 `protobuf:"varint,2,opt,name=total_estimated_bytes,json=totalEstimatedBytes" json:"total_estimated_bytes,omitempty"` + // Statistics of how many instances of each info type were found during + // inspect job. + InfoTypeStats []*InfoTypeStatistics `protobuf:"bytes,3,rep,name=info_type_stats,json=infoTypeStats" json:"info_type_stats,omitempty"` +} + +func (m *InspectDataSourceDetails_Result) Reset() { *m = InspectDataSourceDetails_Result{} } +func (m *InspectDataSourceDetails_Result) String() string { return proto.CompactTextString(m) } +func (*InspectDataSourceDetails_Result) ProtoMessage() {} +func (*InspectDataSourceDetails_Result) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{21, 1} +} + +func (m *InspectDataSourceDetails_Result) GetProcessedBytes() int64 { + if m != nil { + return m.ProcessedBytes + } + return 0 +} + +func (m *InspectDataSourceDetails_Result) GetTotalEstimatedBytes() int64 { + if m != nil { + return m.TotalEstimatedBytes + } + return 0 +} + +func (m *InspectDataSourceDetails_Result) GetInfoTypeStats() []*InfoTypeStatistics { + if m != nil { + return m.InfoTypeStats + } + return nil +} + +// InfoType description. +type InfoTypeDescription struct { + // Internal name of the infoType. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Human readable form of the infoType name. + DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // Which parts of the API supports this InfoType. + SupportedBy []InfoTypeSupportedBy `protobuf:"varint,3,rep,packed,name=supported_by,json=supportedBy,enum=google.privacy.dlp.v2beta2.InfoTypeSupportedBy" json:"supported_by,omitempty"` +} + +func (m *InfoTypeDescription) Reset() { *m = InfoTypeDescription{} } +func (m *InfoTypeDescription) String() string { return proto.CompactTextString(m) } +func (*InfoTypeDescription) ProtoMessage() {} +func (*InfoTypeDescription) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } + +func (m *InfoTypeDescription) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *InfoTypeDescription) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func (m *InfoTypeDescription) GetSupportedBy() []InfoTypeSupportedBy { + if m != nil { + return m.SupportedBy + } + return nil +} + +// Request for the list of infoTypes. +type ListInfoTypesRequest struct { + // Optional BCP-47 language code for localized infoType friendly + // names. If omitted, or if localized strings are not available, + // en-US strings will be returned. + LanguageCode string `protobuf:"bytes,1,opt,name=language_code,json=languageCode" json:"language_code,omitempty"` + // Optional filter to only return infoTypes supported by certain parts of the + // API. Defaults to supported_by=INSPECT. + Filter string `protobuf:"bytes,2,opt,name=filter" json:"filter,omitempty"` +} + +func (m *ListInfoTypesRequest) Reset() { *m = ListInfoTypesRequest{} } +func (m *ListInfoTypesRequest) String() string { return proto.CompactTextString(m) } +func (*ListInfoTypesRequest) ProtoMessage() {} +func (*ListInfoTypesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } + +func (m *ListInfoTypesRequest) GetLanguageCode() string { + if m != nil { + return m.LanguageCode + } + return "" +} + +func (m *ListInfoTypesRequest) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +// Response to the ListInfoTypes request. +type ListInfoTypesResponse struct { + // Set of sensitive infoTypes. + InfoTypes []*InfoTypeDescription `protobuf:"bytes,1,rep,name=info_types,json=infoTypes" json:"info_types,omitempty"` +} + +func (m *ListInfoTypesResponse) Reset() { *m = ListInfoTypesResponse{} } +func (m *ListInfoTypesResponse) String() string { return proto.CompactTextString(m) } +func (*ListInfoTypesResponse) ProtoMessage() {} +func (*ListInfoTypesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} } + +func (m *ListInfoTypesResponse) GetInfoTypes() []*InfoTypeDescription { + if m != nil { + return m.InfoTypes + } + return nil +} + +// Request for creating a risk analysis DlpJob. +type AnalyzeDataSourceRiskRequest struct { + // The parent resource name, for example projects/my-project-id. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Configuration for this risk analysis job. + JobConfig *RiskAnalysisJobConfig `protobuf:"bytes,2,opt,name=job_config,json=jobConfig" json:"job_config,omitempty"` + // Optional job ID to use for the created job. If not provided, a job ID will + // automatically be generated. Must be unique within the project. The job ID + // can contain uppercase and lowercase letters, numbers, and hyphens; that is, + // it must match the regular expression: `[a-zA-Z\\d-]+`. The maximum length + // is 100 characters. Can be empty to allow the system to generate one. + JobId string `protobuf:"bytes,3,opt,name=job_id,json=jobId" json:"job_id,omitempty"` +} + +func (m *AnalyzeDataSourceRiskRequest) Reset() { *m = AnalyzeDataSourceRiskRequest{} } +func (m *AnalyzeDataSourceRiskRequest) String() string { return proto.CompactTextString(m) } +func (*AnalyzeDataSourceRiskRequest) ProtoMessage() {} +func (*AnalyzeDataSourceRiskRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } + +func (m *AnalyzeDataSourceRiskRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *AnalyzeDataSourceRiskRequest) GetJobConfig() *RiskAnalysisJobConfig { + if m != nil { + return m.JobConfig + } + return nil +} + +func (m *AnalyzeDataSourceRiskRequest) GetJobId() string { + if m != nil { + return m.JobId + } + return "" +} + +// Configuration for a risk analysis job. +type RiskAnalysisJobConfig struct { + // Privacy metric to compute. + PrivacyMetric *PrivacyMetric `protobuf:"bytes,1,opt,name=privacy_metric,json=privacyMetric" json:"privacy_metric,omitempty"` + // Input dataset to compute metrics over. + SourceTable *BigQueryTable `protobuf:"bytes,2,opt,name=source_table,json=sourceTable" json:"source_table,omitempty"` + // Actions to execute at the completion of the job. Are executed in the order + // provided. + Actions []*Action `protobuf:"bytes,3,rep,name=actions" json:"actions,omitempty"` +} + +func (m *RiskAnalysisJobConfig) Reset() { *m = RiskAnalysisJobConfig{} } +func (m *RiskAnalysisJobConfig) String() string { return proto.CompactTextString(m) } +func (*RiskAnalysisJobConfig) ProtoMessage() {} +func (*RiskAnalysisJobConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} } + +func (m *RiskAnalysisJobConfig) GetPrivacyMetric() *PrivacyMetric { + if m != nil { + return m.PrivacyMetric + } + return nil +} + +func (m *RiskAnalysisJobConfig) GetSourceTable() *BigQueryTable { + if m != nil { + return m.SourceTable + } + return nil +} + +func (m *RiskAnalysisJobConfig) GetActions() []*Action { + if m != nil { + return m.Actions + } + return nil +} + +// Privacy metric to compute for reidentification risk analysis. +type PrivacyMetric struct { + // Types that are valid to be assigned to Type: + // *PrivacyMetric_NumericalStatsConfig_ + // *PrivacyMetric_CategoricalStatsConfig_ + // *PrivacyMetric_KAnonymityConfig_ + // *PrivacyMetric_LDiversityConfig_ + // *PrivacyMetric_KMapEstimationConfig_ + Type isPrivacyMetric_Type `protobuf_oneof:"type"` +} + +func (m *PrivacyMetric) Reset() { *m = PrivacyMetric{} } +func (m *PrivacyMetric) String() string { return proto.CompactTextString(m) } +func (*PrivacyMetric) ProtoMessage() {} +func (*PrivacyMetric) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} } + +type isPrivacyMetric_Type interface { + isPrivacyMetric_Type() +} + +type PrivacyMetric_NumericalStatsConfig_ struct { + NumericalStatsConfig *PrivacyMetric_NumericalStatsConfig `protobuf:"bytes,1,opt,name=numerical_stats_config,json=numericalStatsConfig,oneof"` +} +type PrivacyMetric_CategoricalStatsConfig_ struct { + CategoricalStatsConfig *PrivacyMetric_CategoricalStatsConfig `protobuf:"bytes,2,opt,name=categorical_stats_config,json=categoricalStatsConfig,oneof"` +} +type PrivacyMetric_KAnonymityConfig_ struct { + KAnonymityConfig *PrivacyMetric_KAnonymityConfig `protobuf:"bytes,3,opt,name=k_anonymity_config,json=kAnonymityConfig,oneof"` +} +type PrivacyMetric_LDiversityConfig_ struct { + LDiversityConfig *PrivacyMetric_LDiversityConfig `protobuf:"bytes,4,opt,name=l_diversity_config,json=lDiversityConfig,oneof"` +} +type PrivacyMetric_KMapEstimationConfig_ struct { + KMapEstimationConfig *PrivacyMetric_KMapEstimationConfig `protobuf:"bytes,5,opt,name=k_map_estimation_config,json=kMapEstimationConfig,oneof"` +} + +func (*PrivacyMetric_NumericalStatsConfig_) isPrivacyMetric_Type() {} +func (*PrivacyMetric_CategoricalStatsConfig_) isPrivacyMetric_Type() {} +func (*PrivacyMetric_KAnonymityConfig_) isPrivacyMetric_Type() {} +func (*PrivacyMetric_LDiversityConfig_) isPrivacyMetric_Type() {} +func (*PrivacyMetric_KMapEstimationConfig_) isPrivacyMetric_Type() {} + +func (m *PrivacyMetric) GetType() isPrivacyMetric_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *PrivacyMetric) GetNumericalStatsConfig() *PrivacyMetric_NumericalStatsConfig { + if x, ok := m.GetType().(*PrivacyMetric_NumericalStatsConfig_); ok { + return x.NumericalStatsConfig + } + return nil +} + +func (m *PrivacyMetric) GetCategoricalStatsConfig() *PrivacyMetric_CategoricalStatsConfig { + if x, ok := m.GetType().(*PrivacyMetric_CategoricalStatsConfig_); ok { + return x.CategoricalStatsConfig + } + return nil +} + +func (m *PrivacyMetric) GetKAnonymityConfig() *PrivacyMetric_KAnonymityConfig { + if x, ok := m.GetType().(*PrivacyMetric_KAnonymityConfig_); ok { + return x.KAnonymityConfig + } + return nil +} + +func (m *PrivacyMetric) GetLDiversityConfig() *PrivacyMetric_LDiversityConfig { + if x, ok := m.GetType().(*PrivacyMetric_LDiversityConfig_); ok { + return x.LDiversityConfig + } + return nil +} + +func (m *PrivacyMetric) GetKMapEstimationConfig() *PrivacyMetric_KMapEstimationConfig { + if x, ok := m.GetType().(*PrivacyMetric_KMapEstimationConfig_); ok { + return x.KMapEstimationConfig + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*PrivacyMetric) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _PrivacyMetric_OneofMarshaler, _PrivacyMetric_OneofUnmarshaler, _PrivacyMetric_OneofSizer, []interface{}{ + (*PrivacyMetric_NumericalStatsConfig_)(nil), + (*PrivacyMetric_CategoricalStatsConfig_)(nil), + (*PrivacyMetric_KAnonymityConfig_)(nil), + (*PrivacyMetric_LDiversityConfig_)(nil), + (*PrivacyMetric_KMapEstimationConfig_)(nil), + } +} + +func _PrivacyMetric_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*PrivacyMetric) + // type + switch x := m.Type.(type) { + case *PrivacyMetric_NumericalStatsConfig_: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.NumericalStatsConfig); err != nil { + return err + } + case *PrivacyMetric_CategoricalStatsConfig_: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.CategoricalStatsConfig); err != nil { + return err + } + case *PrivacyMetric_KAnonymityConfig_: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.KAnonymityConfig); err != nil { + return err + } + case *PrivacyMetric_LDiversityConfig_: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.LDiversityConfig); err != nil { + return err + } + case *PrivacyMetric_KMapEstimationConfig_: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.KMapEstimationConfig); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("PrivacyMetric.Type has unexpected type %T", x) + } + return nil +} + +func _PrivacyMetric_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*PrivacyMetric) + switch tag { + case 1: // type.numerical_stats_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PrivacyMetric_NumericalStatsConfig) + err := b.DecodeMessage(msg) + m.Type = &PrivacyMetric_NumericalStatsConfig_{msg} + return true, err + case 2: // type.categorical_stats_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PrivacyMetric_CategoricalStatsConfig) + err := b.DecodeMessage(msg) + m.Type = &PrivacyMetric_CategoricalStatsConfig_{msg} + return true, err + case 3: // type.k_anonymity_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PrivacyMetric_KAnonymityConfig) + err := b.DecodeMessage(msg) + m.Type = &PrivacyMetric_KAnonymityConfig_{msg} + return true, err + case 4: // type.l_diversity_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PrivacyMetric_LDiversityConfig) + err := b.DecodeMessage(msg) + m.Type = &PrivacyMetric_LDiversityConfig_{msg} + return true, err + case 5: // type.k_map_estimation_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PrivacyMetric_KMapEstimationConfig) + err := b.DecodeMessage(msg) + m.Type = &PrivacyMetric_KMapEstimationConfig_{msg} + return true, err + default: + return false, nil + } +} + +func _PrivacyMetric_OneofSizer(msg proto.Message) (n int) { + m := msg.(*PrivacyMetric) + // type + switch x := m.Type.(type) { + case *PrivacyMetric_NumericalStatsConfig_: + s := proto.Size(x.NumericalStatsConfig) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrivacyMetric_CategoricalStatsConfig_: + s := proto.Size(x.CategoricalStatsConfig) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrivacyMetric_KAnonymityConfig_: + s := proto.Size(x.KAnonymityConfig) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrivacyMetric_LDiversityConfig_: + s := proto.Size(x.LDiversityConfig) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrivacyMetric_KMapEstimationConfig_: + s := proto.Size(x.KMapEstimationConfig) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Compute numerical stats over an individual column, including +// min, max, and quantiles. +type PrivacyMetric_NumericalStatsConfig struct { + // Field to compute numerical stats on. Supported types are + // integer, float, date, datetime, timestamp, time. + Field *FieldId `protobuf:"bytes,1,opt,name=field" json:"field,omitempty"` +} + +func (m *PrivacyMetric_NumericalStatsConfig) Reset() { *m = PrivacyMetric_NumericalStatsConfig{} } +func (m *PrivacyMetric_NumericalStatsConfig) String() string { return proto.CompactTextString(m) } +func (*PrivacyMetric_NumericalStatsConfig) ProtoMessage() {} +func (*PrivacyMetric_NumericalStatsConfig) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{27, 0} +} + +func (m *PrivacyMetric_NumericalStatsConfig) GetField() *FieldId { + if m != nil { + return m.Field + } + return nil +} + +// Compute numerical stats over an individual column, including +// number of distinct values and value count distribution. +type PrivacyMetric_CategoricalStatsConfig struct { + // Field to compute categorical stats on. All column types are + // supported except for arrays and structs. However, it may be more + // informative to use NumericalStats when the field type is supported, + // depending on the data. + Field *FieldId `protobuf:"bytes,1,opt,name=field" json:"field,omitempty"` +} + +func (m *PrivacyMetric_CategoricalStatsConfig) Reset() { *m = PrivacyMetric_CategoricalStatsConfig{} } +func (m *PrivacyMetric_CategoricalStatsConfig) String() string { return proto.CompactTextString(m) } +func (*PrivacyMetric_CategoricalStatsConfig) ProtoMessage() {} +func (*PrivacyMetric_CategoricalStatsConfig) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{27, 1} +} + +func (m *PrivacyMetric_CategoricalStatsConfig) GetField() *FieldId { + if m != nil { + return m.Field + } + return nil +} + +// k-anonymity metric, used for analysis of reidentification risk. +type PrivacyMetric_KAnonymityConfig struct { + // Set of fields to compute k-anonymity over. When multiple fields are + // specified, they are considered a single composite key. Structs and + // repeated data types are not supported; however, nested fields are + // supported so long as they are not structs themselves or nested within + // a repeated field. + QuasiIds []*FieldId `protobuf:"bytes,1,rep,name=quasi_ids,json=quasiIds" json:"quasi_ids,omitempty"` + // Optional message indicating that each distinct entity_id should not + // contribute to the k-anonymity count more than once per equivalence class. + // If an entity_id appears on several rows with different quasi-identifier + // tuples, it will contribute to each count exactly once. + // + // This can lead to unexpected results. Consider a table where ID 1 is + // associated to quasi-identifier "foo", ID 2 to "bar", and ID 3 to *both* + // quasi-identifiers "foo" and "bar" (on separate rows), and where this ID + // is used as entity_id. Then, the anonymity value associated to ID 3 will + // be 2, even if it is the only ID to be associated to both values "foo" and + // "bar". + EntityId *EntityId `protobuf:"bytes,2,opt,name=entity_id,json=entityId" json:"entity_id,omitempty"` +} + +func (m *PrivacyMetric_KAnonymityConfig) Reset() { *m = PrivacyMetric_KAnonymityConfig{} } +func (m *PrivacyMetric_KAnonymityConfig) String() string { return proto.CompactTextString(m) } +func (*PrivacyMetric_KAnonymityConfig) ProtoMessage() {} +func (*PrivacyMetric_KAnonymityConfig) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{27, 2} +} + +func (m *PrivacyMetric_KAnonymityConfig) GetQuasiIds() []*FieldId { + if m != nil { + return m.QuasiIds + } + return nil +} + +func (m *PrivacyMetric_KAnonymityConfig) GetEntityId() *EntityId { + if m != nil { + return m.EntityId + } + return nil +} + +// l-diversity metric, used for analysis of reidentification risk. +type PrivacyMetric_LDiversityConfig struct { + // Set of quasi-identifiers indicating how equivalence classes are + // defined for the l-diversity computation. When multiple fields are + // specified, they are considered a single composite key. + QuasiIds []*FieldId `protobuf:"bytes,1,rep,name=quasi_ids,json=quasiIds" json:"quasi_ids,omitempty"` + // Sensitive field for computing the l-value. + SensitiveAttribute *FieldId `protobuf:"bytes,2,opt,name=sensitive_attribute,json=sensitiveAttribute" json:"sensitive_attribute,omitempty"` +} + +func (m *PrivacyMetric_LDiversityConfig) Reset() { *m = PrivacyMetric_LDiversityConfig{} } +func (m *PrivacyMetric_LDiversityConfig) String() string { return proto.CompactTextString(m) } +func (*PrivacyMetric_LDiversityConfig) ProtoMessage() {} +func (*PrivacyMetric_LDiversityConfig) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{27, 3} +} + +func (m *PrivacyMetric_LDiversityConfig) GetQuasiIds() []*FieldId { + if m != nil { + return m.QuasiIds + } + return nil +} + +func (m *PrivacyMetric_LDiversityConfig) GetSensitiveAttribute() *FieldId { + if m != nil { + return m.SensitiveAttribute + } + return nil +} + +// Reidentifiability metric. This corresponds to a risk model similar to what +// is called "journalist risk" in the literature, except the attack dataset is +// statistically modeled instead of being perfectly known. This can be done +// using publicly available data (like the US Census), or using a custom +// statistical model (indicated as one or several BigQuery tables), or by +// extrapolating from the distribution of values in the input dataset. +type PrivacyMetric_KMapEstimationConfig struct { + // Fields considered to be quasi-identifiers. No two columns can have the + // same tag. [required] + QuasiIds []*PrivacyMetric_KMapEstimationConfig_TaggedField `protobuf:"bytes,1,rep,name=quasi_ids,json=quasiIds" json:"quasi_ids,omitempty"` + // ISO 3166-1 alpha-2 region code to use in the statistical modeling. + // Required if no column is tagged with a region-specific InfoType (like + // US_ZIP_5) or a region code. + RegionCode string `protobuf:"bytes,2,opt,name=region_code,json=regionCode" json:"region_code,omitempty"` + // Several auxiliary tables can be used in the analysis. Each custom_tag + // used to tag a quasi-identifiers column must appear in exactly one column + // of one auxiliary table. + AuxiliaryTables []*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable `protobuf:"bytes,3,rep,name=auxiliary_tables,json=auxiliaryTables" json:"auxiliary_tables,omitempty"` +} + +func (m *PrivacyMetric_KMapEstimationConfig) Reset() { *m = PrivacyMetric_KMapEstimationConfig{} } +func (m *PrivacyMetric_KMapEstimationConfig) String() string { return proto.CompactTextString(m) } +func (*PrivacyMetric_KMapEstimationConfig) ProtoMessage() {} +func (*PrivacyMetric_KMapEstimationConfig) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{27, 4} +} + +func (m *PrivacyMetric_KMapEstimationConfig) GetQuasiIds() []*PrivacyMetric_KMapEstimationConfig_TaggedField { + if m != nil { + return m.QuasiIds + } + return nil +} + +func (m *PrivacyMetric_KMapEstimationConfig) GetRegionCode() string { + if m != nil { + return m.RegionCode + } + return "" +} + +func (m *PrivacyMetric_KMapEstimationConfig) GetAuxiliaryTables() []*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable { + if m != nil { + return m.AuxiliaryTables + } + return nil +} + +// A column with a semantic tag attached. +type PrivacyMetric_KMapEstimationConfig_TaggedField struct { + // Identifies the column. [required] + Field *FieldId `protobuf:"bytes,1,opt,name=field" json:"field,omitempty"` + // Semantic tag that identifies what a column contains, to determine which + // statistical model to use to estimate the reidentifiability of each + // value. [required] + // + // Types that are valid to be assigned to Tag: + // *PrivacyMetric_KMapEstimationConfig_TaggedField_InfoType + // *PrivacyMetric_KMapEstimationConfig_TaggedField_CustomTag + // *PrivacyMetric_KMapEstimationConfig_TaggedField_Inferred + Tag isPrivacyMetric_KMapEstimationConfig_TaggedField_Tag `protobuf_oneof:"tag"` +} + +func (m *PrivacyMetric_KMapEstimationConfig_TaggedField) Reset() { + *m = PrivacyMetric_KMapEstimationConfig_TaggedField{} +} +func (m *PrivacyMetric_KMapEstimationConfig_TaggedField) String() string { + return proto.CompactTextString(m) +} +func (*PrivacyMetric_KMapEstimationConfig_TaggedField) ProtoMessage() {} +func (*PrivacyMetric_KMapEstimationConfig_TaggedField) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{27, 4, 0} +} + +type isPrivacyMetric_KMapEstimationConfig_TaggedField_Tag interface { + isPrivacyMetric_KMapEstimationConfig_TaggedField_Tag() +} + +type PrivacyMetric_KMapEstimationConfig_TaggedField_InfoType struct { + InfoType *InfoType `protobuf:"bytes,2,opt,name=info_type,json=infoType,oneof"` +} +type PrivacyMetric_KMapEstimationConfig_TaggedField_CustomTag struct { + CustomTag string `protobuf:"bytes,3,opt,name=custom_tag,json=customTag,oneof"` +} +type PrivacyMetric_KMapEstimationConfig_TaggedField_Inferred struct { + Inferred *google_protobuf3.Empty `protobuf:"bytes,4,opt,name=inferred,oneof"` +} + +func (*PrivacyMetric_KMapEstimationConfig_TaggedField_InfoType) isPrivacyMetric_KMapEstimationConfig_TaggedField_Tag() { +} +func (*PrivacyMetric_KMapEstimationConfig_TaggedField_CustomTag) isPrivacyMetric_KMapEstimationConfig_TaggedField_Tag() { +} +func (*PrivacyMetric_KMapEstimationConfig_TaggedField_Inferred) isPrivacyMetric_KMapEstimationConfig_TaggedField_Tag() { +} + +func (m *PrivacyMetric_KMapEstimationConfig_TaggedField) GetTag() isPrivacyMetric_KMapEstimationConfig_TaggedField_Tag { + if m != nil { + return m.Tag + } + return nil +} + +func (m *PrivacyMetric_KMapEstimationConfig_TaggedField) GetField() *FieldId { + if m != nil { + return m.Field + } + return nil +} + +func (m *PrivacyMetric_KMapEstimationConfig_TaggedField) GetInfoType() *InfoType { + if x, ok := m.GetTag().(*PrivacyMetric_KMapEstimationConfig_TaggedField_InfoType); ok { + return x.InfoType + } + return nil +} + +func (m *PrivacyMetric_KMapEstimationConfig_TaggedField) GetCustomTag() string { + if x, ok := m.GetTag().(*PrivacyMetric_KMapEstimationConfig_TaggedField_CustomTag); ok { + return x.CustomTag + } + return "" +} + +func (m *PrivacyMetric_KMapEstimationConfig_TaggedField) GetInferred() *google_protobuf3.Empty { + if x, ok := m.GetTag().(*PrivacyMetric_KMapEstimationConfig_TaggedField_Inferred); ok { + return x.Inferred + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*PrivacyMetric_KMapEstimationConfig_TaggedField) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _PrivacyMetric_KMapEstimationConfig_TaggedField_OneofMarshaler, _PrivacyMetric_KMapEstimationConfig_TaggedField_OneofUnmarshaler, _PrivacyMetric_KMapEstimationConfig_TaggedField_OneofSizer, []interface{}{ + (*PrivacyMetric_KMapEstimationConfig_TaggedField_InfoType)(nil), + (*PrivacyMetric_KMapEstimationConfig_TaggedField_CustomTag)(nil), + (*PrivacyMetric_KMapEstimationConfig_TaggedField_Inferred)(nil), + } +} + +func _PrivacyMetric_KMapEstimationConfig_TaggedField_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*PrivacyMetric_KMapEstimationConfig_TaggedField) + // tag + switch x := m.Tag.(type) { + case *PrivacyMetric_KMapEstimationConfig_TaggedField_InfoType: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.InfoType); err != nil { + return err + } + case *PrivacyMetric_KMapEstimationConfig_TaggedField_CustomTag: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeStringBytes(x.CustomTag) + case *PrivacyMetric_KMapEstimationConfig_TaggedField_Inferred: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Inferred); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("PrivacyMetric_KMapEstimationConfig_TaggedField.Tag has unexpected type %T", x) + } + return nil +} + +func _PrivacyMetric_KMapEstimationConfig_TaggedField_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*PrivacyMetric_KMapEstimationConfig_TaggedField) + switch tag { + case 2: // tag.info_type + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(InfoType) + err := b.DecodeMessage(msg) + m.Tag = &PrivacyMetric_KMapEstimationConfig_TaggedField_InfoType{msg} + return true, err + case 3: // tag.custom_tag + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Tag = &PrivacyMetric_KMapEstimationConfig_TaggedField_CustomTag{x} + return true, err + case 4: // tag.inferred + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf3.Empty) + err := b.DecodeMessage(msg) + m.Tag = &PrivacyMetric_KMapEstimationConfig_TaggedField_Inferred{msg} + return true, err + default: + return false, nil + } +} + +func _PrivacyMetric_KMapEstimationConfig_TaggedField_OneofSizer(msg proto.Message) (n int) { + m := msg.(*PrivacyMetric_KMapEstimationConfig_TaggedField) + // tag + switch x := m.Tag.(type) { + case *PrivacyMetric_KMapEstimationConfig_TaggedField_InfoType: + s := proto.Size(x.InfoType) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrivacyMetric_KMapEstimationConfig_TaggedField_CustomTag: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.CustomTag))) + n += len(x.CustomTag) + case *PrivacyMetric_KMapEstimationConfig_TaggedField_Inferred: + s := proto.Size(x.Inferred) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// An auxiliary table contains statistical information on the relative +// frequency of different quasi-identifiers values. It has one or several +// quasi-identifiers columns, and one column that indicates the relative +// frequency of each quasi-identifier tuple. +// If a tuple is present in the data but not in the auxiliary table, the +// corresponding relative frequency is assumed to be zero (and thus, the +// tuple is highly reidentifiable). +type PrivacyMetric_KMapEstimationConfig_AuxiliaryTable struct { + // Auxiliary table location. [required] + Table *BigQueryTable `protobuf:"bytes,3,opt,name=table" json:"table,omitempty"` + // Quasi-identifier columns. [required] + QuasiIds []*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField `protobuf:"bytes,1,rep,name=quasi_ids,json=quasiIds" json:"quasi_ids,omitempty"` + // The relative frequency column must contain a floating-point number + // between 0 and 1 (inclusive). Null values are assumed to be zero. + // [required] + RelativeFrequency *FieldId `protobuf:"bytes,2,opt,name=relative_frequency,json=relativeFrequency" json:"relative_frequency,omitempty"` +} + +func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable) Reset() { + *m = PrivacyMetric_KMapEstimationConfig_AuxiliaryTable{} +} +func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable) String() string { + return proto.CompactTextString(m) +} +func (*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable) ProtoMessage() {} +func (*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{27, 4, 1} +} + +func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable) GetTable() *BigQueryTable { + if m != nil { + return m.Table + } + return nil +} + +func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable) GetQuasiIds() []*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField { + if m != nil { + return m.QuasiIds + } + return nil +} + +func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable) GetRelativeFrequency() *FieldId { + if m != nil { + return m.RelativeFrequency + } + return nil +} + +// A quasi-identifier column has a custom_tag, used to know which column +// in the data corresponds to which column in the statistical model. +type PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField struct { + Field *FieldId `protobuf:"bytes,1,opt,name=field" json:"field,omitempty"` + CustomTag string `protobuf:"bytes,2,opt,name=custom_tag,json=customTag" json:"custom_tag,omitempty"` +} + +func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField) Reset() { + *m = PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField{} +} +func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField) String() string { + return proto.CompactTextString(m) +} +func (*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField) ProtoMessage() {} +func (*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{27, 4, 1, 0} +} + +func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField) GetField() *FieldId { + if m != nil { + return m.Field + } + return nil +} + +func (m *PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField) GetCustomTag() string { + if m != nil { + return m.CustomTag + } + return "" +} + +// Result of a risk analysis operation request. +type AnalyzeDataSourceRiskDetails struct { + // Privacy metric to compute. + RequestedPrivacyMetric *PrivacyMetric `protobuf:"bytes,1,opt,name=requested_privacy_metric,json=requestedPrivacyMetric" json:"requested_privacy_metric,omitempty"` + // Input dataset to compute metrics over. + RequestedSourceTable *BigQueryTable `protobuf:"bytes,2,opt,name=requested_source_table,json=requestedSourceTable" json:"requested_source_table,omitempty"` + // Values associated with this metric. + // + // Types that are valid to be assigned to Result: + // *AnalyzeDataSourceRiskDetails_NumericalStatsResult_ + // *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_ + // *AnalyzeDataSourceRiskDetails_KAnonymityResult_ + // *AnalyzeDataSourceRiskDetails_LDiversityResult_ + // *AnalyzeDataSourceRiskDetails_KMapEstimationResult_ + Result isAnalyzeDataSourceRiskDetails_Result `protobuf_oneof:"result"` +} + +func (m *AnalyzeDataSourceRiskDetails) Reset() { *m = AnalyzeDataSourceRiskDetails{} } +func (m *AnalyzeDataSourceRiskDetails) String() string { return proto.CompactTextString(m) } +func (*AnalyzeDataSourceRiskDetails) ProtoMessage() {} +func (*AnalyzeDataSourceRiskDetails) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} } + +type isAnalyzeDataSourceRiskDetails_Result interface { + isAnalyzeDataSourceRiskDetails_Result() +} + +type AnalyzeDataSourceRiskDetails_NumericalStatsResult_ struct { + NumericalStatsResult *AnalyzeDataSourceRiskDetails_NumericalStatsResult `protobuf:"bytes,3,opt,name=numerical_stats_result,json=numericalStatsResult,oneof"` +} +type AnalyzeDataSourceRiskDetails_CategoricalStatsResult_ struct { + CategoricalStatsResult *AnalyzeDataSourceRiskDetails_CategoricalStatsResult `protobuf:"bytes,4,opt,name=categorical_stats_result,json=categoricalStatsResult,oneof"` +} +type AnalyzeDataSourceRiskDetails_KAnonymityResult_ struct { + KAnonymityResult *AnalyzeDataSourceRiskDetails_KAnonymityResult `protobuf:"bytes,5,opt,name=k_anonymity_result,json=kAnonymityResult,oneof"` +} +type AnalyzeDataSourceRiskDetails_LDiversityResult_ struct { + LDiversityResult *AnalyzeDataSourceRiskDetails_LDiversityResult `protobuf:"bytes,6,opt,name=l_diversity_result,json=lDiversityResult,oneof"` +} +type AnalyzeDataSourceRiskDetails_KMapEstimationResult_ struct { + KMapEstimationResult *AnalyzeDataSourceRiskDetails_KMapEstimationResult `protobuf:"bytes,7,opt,name=k_map_estimation_result,json=kMapEstimationResult,oneof"` +} + +func (*AnalyzeDataSourceRiskDetails_NumericalStatsResult_) isAnalyzeDataSourceRiskDetails_Result() {} +func (*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_) isAnalyzeDataSourceRiskDetails_Result() {} +func (*AnalyzeDataSourceRiskDetails_KAnonymityResult_) isAnalyzeDataSourceRiskDetails_Result() {} +func (*AnalyzeDataSourceRiskDetails_LDiversityResult_) isAnalyzeDataSourceRiskDetails_Result() {} +func (*AnalyzeDataSourceRiskDetails_KMapEstimationResult_) isAnalyzeDataSourceRiskDetails_Result() {} + +func (m *AnalyzeDataSourceRiskDetails) GetResult() isAnalyzeDataSourceRiskDetails_Result { + if m != nil { + return m.Result + } + return nil +} + +func (m *AnalyzeDataSourceRiskDetails) GetRequestedPrivacyMetric() *PrivacyMetric { + if m != nil { + return m.RequestedPrivacyMetric + } + return nil +} + +func (m *AnalyzeDataSourceRiskDetails) GetRequestedSourceTable() *BigQueryTable { + if m != nil { + return m.RequestedSourceTable + } + return nil +} + +func (m *AnalyzeDataSourceRiskDetails) GetNumericalStatsResult() *AnalyzeDataSourceRiskDetails_NumericalStatsResult { + if x, ok := m.GetResult().(*AnalyzeDataSourceRiskDetails_NumericalStatsResult_); ok { + return x.NumericalStatsResult + } + return nil +} + +func (m *AnalyzeDataSourceRiskDetails) GetCategoricalStatsResult() *AnalyzeDataSourceRiskDetails_CategoricalStatsResult { + if x, ok := m.GetResult().(*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_); ok { + return x.CategoricalStatsResult + } + return nil +} + +func (m *AnalyzeDataSourceRiskDetails) GetKAnonymityResult() *AnalyzeDataSourceRiskDetails_KAnonymityResult { + if x, ok := m.GetResult().(*AnalyzeDataSourceRiskDetails_KAnonymityResult_); ok { + return x.KAnonymityResult + } + return nil +} + +func (m *AnalyzeDataSourceRiskDetails) GetLDiversityResult() *AnalyzeDataSourceRiskDetails_LDiversityResult { + if x, ok := m.GetResult().(*AnalyzeDataSourceRiskDetails_LDiversityResult_); ok { + return x.LDiversityResult + } + return nil +} + +func (m *AnalyzeDataSourceRiskDetails) GetKMapEstimationResult() *AnalyzeDataSourceRiskDetails_KMapEstimationResult { + if x, ok := m.GetResult().(*AnalyzeDataSourceRiskDetails_KMapEstimationResult_); ok { + return x.KMapEstimationResult + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*AnalyzeDataSourceRiskDetails) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _AnalyzeDataSourceRiskDetails_OneofMarshaler, _AnalyzeDataSourceRiskDetails_OneofUnmarshaler, _AnalyzeDataSourceRiskDetails_OneofSizer, []interface{}{ + (*AnalyzeDataSourceRiskDetails_NumericalStatsResult_)(nil), + (*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_)(nil), + (*AnalyzeDataSourceRiskDetails_KAnonymityResult_)(nil), + (*AnalyzeDataSourceRiskDetails_LDiversityResult_)(nil), + (*AnalyzeDataSourceRiskDetails_KMapEstimationResult_)(nil), + } +} + +func _AnalyzeDataSourceRiskDetails_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*AnalyzeDataSourceRiskDetails) + // result + switch x := m.Result.(type) { + case *AnalyzeDataSourceRiskDetails_NumericalStatsResult_: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.NumericalStatsResult); err != nil { + return err + } + case *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.CategoricalStatsResult); err != nil { + return err + } + case *AnalyzeDataSourceRiskDetails_KAnonymityResult_: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.KAnonymityResult); err != nil { + return err + } + case *AnalyzeDataSourceRiskDetails_LDiversityResult_: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.LDiversityResult); err != nil { + return err + } + case *AnalyzeDataSourceRiskDetails_KMapEstimationResult_: + b.EncodeVarint(7<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.KMapEstimationResult); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("AnalyzeDataSourceRiskDetails.Result has unexpected type %T", x) + } + return nil +} + +func _AnalyzeDataSourceRiskDetails_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*AnalyzeDataSourceRiskDetails) + switch tag { + case 3: // result.numerical_stats_result + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(AnalyzeDataSourceRiskDetails_NumericalStatsResult) + err := b.DecodeMessage(msg) + m.Result = &AnalyzeDataSourceRiskDetails_NumericalStatsResult_{msg} + return true, err + case 4: // result.categorical_stats_result + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(AnalyzeDataSourceRiskDetails_CategoricalStatsResult) + err := b.DecodeMessage(msg) + m.Result = &AnalyzeDataSourceRiskDetails_CategoricalStatsResult_{msg} + return true, err + case 5: // result.k_anonymity_result + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(AnalyzeDataSourceRiskDetails_KAnonymityResult) + err := b.DecodeMessage(msg) + m.Result = &AnalyzeDataSourceRiskDetails_KAnonymityResult_{msg} + return true, err + case 6: // result.l_diversity_result + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(AnalyzeDataSourceRiskDetails_LDiversityResult) + err := b.DecodeMessage(msg) + m.Result = &AnalyzeDataSourceRiskDetails_LDiversityResult_{msg} + return true, err + case 7: // result.k_map_estimation_result + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(AnalyzeDataSourceRiskDetails_KMapEstimationResult) + err := b.DecodeMessage(msg) + m.Result = &AnalyzeDataSourceRiskDetails_KMapEstimationResult_{msg} + return true, err + default: + return false, nil + } +} + +func _AnalyzeDataSourceRiskDetails_OneofSizer(msg proto.Message) (n int) { + m := msg.(*AnalyzeDataSourceRiskDetails) + // result + switch x := m.Result.(type) { + case *AnalyzeDataSourceRiskDetails_NumericalStatsResult_: + s := proto.Size(x.NumericalStatsResult) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_: + s := proto.Size(x.CategoricalStatsResult) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *AnalyzeDataSourceRiskDetails_KAnonymityResult_: + s := proto.Size(x.KAnonymityResult) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *AnalyzeDataSourceRiskDetails_LDiversityResult_: + s := proto.Size(x.LDiversityResult) + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *AnalyzeDataSourceRiskDetails_KMapEstimationResult_: + s := proto.Size(x.KMapEstimationResult) + n += proto.SizeVarint(7<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Result of the numerical stats computation. +type AnalyzeDataSourceRiskDetails_NumericalStatsResult struct { + // Minimum value appearing in the column. + MinValue *Value `protobuf:"bytes,1,opt,name=min_value,json=minValue" json:"min_value,omitempty"` + // Maximum value appearing in the column. + MaxValue *Value `protobuf:"bytes,2,opt,name=max_value,json=maxValue" json:"max_value,omitempty"` + // List of 99 values that partition the set of field values into 100 equal + // sized buckets. + QuantileValues []*Value `protobuf:"bytes,4,rep,name=quantile_values,json=quantileValues" json:"quantile_values,omitempty"` +} + +func (m *AnalyzeDataSourceRiskDetails_NumericalStatsResult) Reset() { + *m = AnalyzeDataSourceRiskDetails_NumericalStatsResult{} +} +func (m *AnalyzeDataSourceRiskDetails_NumericalStatsResult) String() string { + return proto.CompactTextString(m) +} +func (*AnalyzeDataSourceRiskDetails_NumericalStatsResult) ProtoMessage() {} +func (*AnalyzeDataSourceRiskDetails_NumericalStatsResult) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{28, 0} +} + +func (m *AnalyzeDataSourceRiskDetails_NumericalStatsResult) GetMinValue() *Value { + if m != nil { + return m.MinValue + } + return nil +} + +func (m *AnalyzeDataSourceRiskDetails_NumericalStatsResult) GetMaxValue() *Value { + if m != nil { + return m.MaxValue + } + return nil +} + +func (m *AnalyzeDataSourceRiskDetails_NumericalStatsResult) GetQuantileValues() []*Value { + if m != nil { + return m.QuantileValues + } + return nil +} + +// Result of the categorical stats computation. +type AnalyzeDataSourceRiskDetails_CategoricalStatsResult struct { + // Histogram of value frequencies in the column. + ValueFrequencyHistogramBuckets []*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket `protobuf:"bytes,5,rep,name=value_frequency_histogram_buckets,json=valueFrequencyHistogramBuckets" json:"value_frequency_histogram_buckets,omitempty"` +} + +func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult) Reset() { + *m = AnalyzeDataSourceRiskDetails_CategoricalStatsResult{} +} +func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult) String() string { + return proto.CompactTextString(m) +} +func (*AnalyzeDataSourceRiskDetails_CategoricalStatsResult) ProtoMessage() {} +func (*AnalyzeDataSourceRiskDetails_CategoricalStatsResult) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{28, 1} +} + +func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult) GetValueFrequencyHistogramBuckets() []*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket { + if m != nil { + return m.ValueFrequencyHistogramBuckets + } + return nil +} + +type AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket struct { + // Lower bound on the value frequency of the values in this bucket. + ValueFrequencyLowerBound int64 `protobuf:"varint,1,opt,name=value_frequency_lower_bound,json=valueFrequencyLowerBound" json:"value_frequency_lower_bound,omitempty"` + // Upper bound on the value frequency of the values in this bucket. + ValueFrequencyUpperBound int64 `protobuf:"varint,2,opt,name=value_frequency_upper_bound,json=valueFrequencyUpperBound" json:"value_frequency_upper_bound,omitempty"` + // Total number of values in this bucket. + BucketSize int64 `protobuf:"varint,3,opt,name=bucket_size,json=bucketSize" json:"bucket_size,omitempty"` + // Sample of value frequencies in this bucket. The total number of + // values returned per bucket is capped at 20. + BucketValues []*ValueFrequency `protobuf:"bytes,4,rep,name=bucket_values,json=bucketValues" json:"bucket_values,omitempty"` +} + +func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) Reset() { + *m = AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket{} +} +func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) String() string { + return proto.CompactTextString(m) +} +func (*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) ProtoMessage() { +} +func (*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{28, 1, 0} +} + +func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) GetValueFrequencyLowerBound() int64 { + if m != nil { + return m.ValueFrequencyLowerBound + } + return 0 +} + +func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) GetValueFrequencyUpperBound() int64 { + if m != nil { + return m.ValueFrequencyUpperBound + } + return 0 +} + +func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) GetBucketSize() int64 { + if m != nil { + return m.BucketSize + } + return 0 +} + +func (m *AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket) GetBucketValues() []*ValueFrequency { + if m != nil { + return m.BucketValues + } + return nil +} + +// Result of the k-anonymity computation. +type AnalyzeDataSourceRiskDetails_KAnonymityResult struct { + // Histogram of k-anonymity equivalence classes. + EquivalenceClassHistogramBuckets []*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket `protobuf:"bytes,5,rep,name=equivalence_class_histogram_buckets,json=equivalenceClassHistogramBuckets" json:"equivalence_class_histogram_buckets,omitempty"` +} + +func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult) Reset() { + *m = AnalyzeDataSourceRiskDetails_KAnonymityResult{} +} +func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult) String() string { + return proto.CompactTextString(m) +} +func (*AnalyzeDataSourceRiskDetails_KAnonymityResult) ProtoMessage() {} +func (*AnalyzeDataSourceRiskDetails_KAnonymityResult) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{28, 2} +} + +func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult) GetEquivalenceClassHistogramBuckets() []*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket { + if m != nil { + return m.EquivalenceClassHistogramBuckets + } + return nil +} + +// The set of columns' values that share the same ldiversity value +type AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass struct { + // Set of values defining the equivalence class. One value per + // quasi-identifier column in the original KAnonymity metric message. + // The order is always the same as the original request. + QuasiIdsValues []*Value `protobuf:"bytes,1,rep,name=quasi_ids_values,json=quasiIdsValues" json:"quasi_ids_values,omitempty"` + // Size of the equivalence class, for example number of rows with the + // above set of values. + EquivalenceClassSize int64 `protobuf:"varint,2,opt,name=equivalence_class_size,json=equivalenceClassSize" json:"equivalence_class_size,omitempty"` +} + +func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass) Reset() { + *m = AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass{} +} +func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass) String() string { + return proto.CompactTextString(m) +} +func (*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass) ProtoMessage() {} +func (*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{28, 2, 0} +} + +func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass) GetQuasiIdsValues() []*Value { + if m != nil { + return m.QuasiIdsValues + } + return nil +} + +func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass) GetEquivalenceClassSize() int64 { + if m != nil { + return m.EquivalenceClassSize + } + return 0 +} + +type AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket struct { + // Lower bound on the size of the equivalence classes in this bucket. + EquivalenceClassSizeLowerBound int64 `protobuf:"varint,1,opt,name=equivalence_class_size_lower_bound,json=equivalenceClassSizeLowerBound" json:"equivalence_class_size_lower_bound,omitempty"` + // Upper bound on the size of the equivalence classes in this bucket. + EquivalenceClassSizeUpperBound int64 `protobuf:"varint,2,opt,name=equivalence_class_size_upper_bound,json=equivalenceClassSizeUpperBound" json:"equivalence_class_size_upper_bound,omitempty"` + // Total number of equivalence classes in this bucket. + BucketSize int64 `protobuf:"varint,3,opt,name=bucket_size,json=bucketSize" json:"bucket_size,omitempty"` + // Sample of equivalence classes in this bucket. The total number of + // classes returned per bucket is capped at 20. + BucketValues []*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass `protobuf:"bytes,4,rep,name=bucket_values,json=bucketValues" json:"bucket_values,omitempty"` +} + +func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) Reset() { + *m = AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket{} +} +func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) String() string { + return proto.CompactTextString(m) +} +func (*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) ProtoMessage() {} +func (*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{28, 2, 1} +} + +func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) GetEquivalenceClassSizeLowerBound() int64 { + if m != nil { + return m.EquivalenceClassSizeLowerBound + } + return 0 +} + +func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) GetEquivalenceClassSizeUpperBound() int64 { + if m != nil { + return m.EquivalenceClassSizeUpperBound + } + return 0 +} + +func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) GetBucketSize() int64 { + if m != nil { + return m.BucketSize + } + return 0 +} + +func (m *AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket) GetBucketValues() []*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass { + if m != nil { + return m.BucketValues + } + return nil +} + +// Result of the l-diversity computation. +type AnalyzeDataSourceRiskDetails_LDiversityResult struct { + // Histogram of l-diversity equivalence class sensitive value frequencies. + SensitiveValueFrequencyHistogramBuckets []*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket `protobuf:"bytes,5,rep,name=sensitive_value_frequency_histogram_buckets,json=sensitiveValueFrequencyHistogramBuckets" json:"sensitive_value_frequency_histogram_buckets,omitempty"` +} + +func (m *AnalyzeDataSourceRiskDetails_LDiversityResult) Reset() { + *m = AnalyzeDataSourceRiskDetails_LDiversityResult{} +} +func (m *AnalyzeDataSourceRiskDetails_LDiversityResult) String() string { + return proto.CompactTextString(m) +} +func (*AnalyzeDataSourceRiskDetails_LDiversityResult) ProtoMessage() {} +func (*AnalyzeDataSourceRiskDetails_LDiversityResult) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{28, 3} +} + +func (m *AnalyzeDataSourceRiskDetails_LDiversityResult) GetSensitiveValueFrequencyHistogramBuckets() []*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket { + if m != nil { + return m.SensitiveValueFrequencyHistogramBuckets + } + return nil +} + +// The set of columns' values that share the same ldiversity value. +type AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass struct { + // Quasi-identifier values defining the k-anonymity equivalence + // class. The order is always the same as the original request. + QuasiIdsValues []*Value `protobuf:"bytes,1,rep,name=quasi_ids_values,json=quasiIdsValues" json:"quasi_ids_values,omitempty"` + // Size of the k-anonymity equivalence class. + EquivalenceClassSize int64 `protobuf:"varint,2,opt,name=equivalence_class_size,json=equivalenceClassSize" json:"equivalence_class_size,omitempty"` + // Number of distinct sensitive values in this equivalence class. + NumDistinctSensitiveValues int64 `protobuf:"varint,3,opt,name=num_distinct_sensitive_values,json=numDistinctSensitiveValues" json:"num_distinct_sensitive_values,omitempty"` + // Estimated frequencies of top sensitive values. + TopSensitiveValues []*ValueFrequency `protobuf:"bytes,4,rep,name=top_sensitive_values,json=topSensitiveValues" json:"top_sensitive_values,omitempty"` +} + +func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass) Reset() { + *m = AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass{} +} +func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass) String() string { + return proto.CompactTextString(m) +} +func (*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass) ProtoMessage() {} +func (*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{28, 3, 0} +} + +func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass) GetQuasiIdsValues() []*Value { + if m != nil { + return m.QuasiIdsValues + } + return nil +} + +func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass) GetEquivalenceClassSize() int64 { + if m != nil { + return m.EquivalenceClassSize + } + return 0 +} + +func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass) GetNumDistinctSensitiveValues() int64 { + if m != nil { + return m.NumDistinctSensitiveValues + } + return 0 +} + +func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass) GetTopSensitiveValues() []*ValueFrequency { + if m != nil { + return m.TopSensitiveValues + } + return nil +} + +type AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket struct { + // Lower bound on the sensitive value frequencies of the equivalence + // classes in this bucket. + SensitiveValueFrequencyLowerBound int64 `protobuf:"varint,1,opt,name=sensitive_value_frequency_lower_bound,json=sensitiveValueFrequencyLowerBound" json:"sensitive_value_frequency_lower_bound,omitempty"` + // Upper bound on the sensitive value frequencies of the equivalence + // classes in this bucket. + SensitiveValueFrequencyUpperBound int64 `protobuf:"varint,2,opt,name=sensitive_value_frequency_upper_bound,json=sensitiveValueFrequencyUpperBound" json:"sensitive_value_frequency_upper_bound,omitempty"` + // Total number of equivalence classes in this bucket. + BucketSize int64 `protobuf:"varint,3,opt,name=bucket_size,json=bucketSize" json:"bucket_size,omitempty"` + // Sample of equivalence classes in this bucket. The total number of + // classes returned per bucket is capped at 20. + BucketValues []*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass `protobuf:"bytes,4,rep,name=bucket_values,json=bucketValues" json:"bucket_values,omitempty"` +} + +func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) Reset() { + *m = AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket{} +} +func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) String() string { + return proto.CompactTextString(m) +} +func (*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) ProtoMessage() {} +func (*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{28, 3, 1} +} + +func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) GetSensitiveValueFrequencyLowerBound() int64 { + if m != nil { + return m.SensitiveValueFrequencyLowerBound + } + return 0 +} + +func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) GetSensitiveValueFrequencyUpperBound() int64 { + if m != nil { + return m.SensitiveValueFrequencyUpperBound + } + return 0 +} + +func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) GetBucketSize() int64 { + if m != nil { + return m.BucketSize + } + return 0 +} + +func (m *AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket) GetBucketValues() []*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass { + if m != nil { + return m.BucketValues + } + return nil +} + +// Result of the reidentifiability analysis. Note that these results are an +// estimation, not exact values. +type AnalyzeDataSourceRiskDetails_KMapEstimationResult struct { + // The intervals [min_anonymity, max_anonymity] do not overlap. If a value + // doesn't correspond to any such interval, the associated frequency is + // zero. For example, the following records: + // {min_anonymity: 1, max_anonymity: 1, frequency: 17} + // {min_anonymity: 2, max_anonymity: 3, frequency: 42} + // {min_anonymity: 5, max_anonymity: 10, frequency: 99} + // mean that there are no record with an estimated anonymity of 4, 5, or + // larger than 10. + KMapEstimationHistogram []*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket `protobuf:"bytes,1,rep,name=k_map_estimation_histogram,json=kMapEstimationHistogram" json:"k_map_estimation_histogram,omitempty"` +} + +func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult) Reset() { + *m = AnalyzeDataSourceRiskDetails_KMapEstimationResult{} +} +func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult) String() string { + return proto.CompactTextString(m) +} +func (*AnalyzeDataSourceRiskDetails_KMapEstimationResult) ProtoMessage() {} +func (*AnalyzeDataSourceRiskDetails_KMapEstimationResult) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{28, 4} +} + +func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult) GetKMapEstimationHistogram() []*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket { + if m != nil { + return m.KMapEstimationHistogram + } + return nil +} + +// A tuple of values for the quasi-identifier columns. +type AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues struct { + // The quasi-identifier values. + QuasiIdsValues []*Value `protobuf:"bytes,1,rep,name=quasi_ids_values,json=quasiIdsValues" json:"quasi_ids_values,omitempty"` + // The estimated anonymity for these quasi-identifier values. + EstimatedAnonymity int64 `protobuf:"varint,2,opt,name=estimated_anonymity,json=estimatedAnonymity" json:"estimated_anonymity,omitempty"` +} + +func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues) Reset() { + *m = AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues{} +} +func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues) String() string { + return proto.CompactTextString(m) +} +func (*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues) ProtoMessage() {} +func (*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{28, 4, 0} +} + +func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues) GetQuasiIdsValues() []*Value { + if m != nil { + return m.QuasiIdsValues + } + return nil +} + +func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues) GetEstimatedAnonymity() int64 { + if m != nil { + return m.EstimatedAnonymity + } + return 0 +} + +// A KMapEstimationHistogramBucket message with the following values: +// min_anonymity: 3 +// max_anonymity: 5 +// frequency: 42 +// means that there are 42 records whose quasi-identifier values correspond +// to 3, 4 or 5 people in the overlying population. An important particular +// case is when min_anonymity = max_anonymity = 1: the frequency field then +// corresponds to the number of uniquely identifiable records. +type AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket struct { + // Always positive. + MinAnonymity int64 `protobuf:"varint,1,opt,name=min_anonymity,json=minAnonymity" json:"min_anonymity,omitempty"` + // Always greater than or equal to min_anonymity. + MaxAnonymity int64 `protobuf:"varint,2,opt,name=max_anonymity,json=maxAnonymity" json:"max_anonymity,omitempty"` + // Number of records within these anonymity bounds. + BucketSize int64 `protobuf:"varint,5,opt,name=bucket_size,json=bucketSize" json:"bucket_size,omitempty"` + // Sample of quasi-identifier tuple values in this bucket. The total + // number of classes returned per bucket is capped at 20. + BucketValues []*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues `protobuf:"bytes,6,rep,name=bucket_values,json=bucketValues" json:"bucket_values,omitempty"` +} + +func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) Reset() { + *m = AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket{} +} +func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) String() string { + return proto.CompactTextString(m) +} +func (*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) ProtoMessage() { +} +func (*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{28, 4, 1} +} + +func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) GetMinAnonymity() int64 { + if m != nil { + return m.MinAnonymity + } + return 0 +} + +func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) GetMaxAnonymity() int64 { + if m != nil { + return m.MaxAnonymity + } + return 0 +} + +func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) GetBucketSize() int64 { + if m != nil { + return m.BucketSize + } + return 0 +} + +func (m *AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket) GetBucketValues() []*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues { + if m != nil { + return m.BucketValues + } + return nil +} + +// A value of a field, including its frequency. +type ValueFrequency struct { + // A value contained in the field in question. + Value *Value `protobuf:"bytes,1,opt,name=value" json:"value,omitempty"` + // How many times the value is contained in the field. + Count int64 `protobuf:"varint,2,opt,name=count" json:"count,omitempty"` +} + +func (m *ValueFrequency) Reset() { *m = ValueFrequency{} } +func (m *ValueFrequency) String() string { return proto.CompactTextString(m) } +func (*ValueFrequency) ProtoMessage() {} +func (*ValueFrequency) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} } + +func (m *ValueFrequency) GetValue() *Value { + if m != nil { + return m.Value + } + return nil +} + +func (m *ValueFrequency) GetCount() int64 { + if m != nil { + return m.Count + } + return 0 +} + +// Set of primitive values supported by the system. +// Note that for the purposes of inspection or transformation, the number +// of bytes considered to comprise a 'Value' is based on its representation +// as a UTF-8 encoded string. For example, if 'integer_value' is set to +// 123456789, the number of bytes would be counted as 9, even though an +// int64 only holds up to 8 bytes of data. +type Value struct { + // Types that are valid to be assigned to Type: + // *Value_IntegerValue + // *Value_FloatValue + // *Value_StringValue + // *Value_BooleanValue + // *Value_TimestampValue + // *Value_TimeValue + // *Value_DateValue + // *Value_DayOfWeekValue + Type isValue_Type `protobuf_oneof:"type"` +} + +func (m *Value) Reset() { *m = Value{} } +func (m *Value) String() string { return proto.CompactTextString(m) } +func (*Value) ProtoMessage() {} +func (*Value) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} } + +type isValue_Type interface { + isValue_Type() +} + +type Value_IntegerValue struct { + IntegerValue int64 `protobuf:"varint,1,opt,name=integer_value,json=integerValue,oneof"` +} +type Value_FloatValue struct { + FloatValue float64 `protobuf:"fixed64,2,opt,name=float_value,json=floatValue,oneof"` +} +type Value_StringValue struct { + StringValue string `protobuf:"bytes,3,opt,name=string_value,json=stringValue,oneof"` +} +type Value_BooleanValue struct { + BooleanValue bool `protobuf:"varint,4,opt,name=boolean_value,json=booleanValue,oneof"` +} +type Value_TimestampValue struct { + TimestampValue *google_protobuf1.Timestamp `protobuf:"bytes,5,opt,name=timestamp_value,json=timestampValue,oneof"` +} +type Value_TimeValue struct { + TimeValue *google_type2.TimeOfDay `protobuf:"bytes,6,opt,name=time_value,json=timeValue,oneof"` +} +type Value_DateValue struct { + DateValue *google_type.Date `protobuf:"bytes,7,opt,name=date_value,json=dateValue,oneof"` +} +type Value_DayOfWeekValue struct { + DayOfWeekValue google_type1.DayOfWeek `protobuf:"varint,8,opt,name=day_of_week_value,json=dayOfWeekValue,enum=google.type.DayOfWeek,oneof"` +} + +func (*Value_IntegerValue) isValue_Type() {} +func (*Value_FloatValue) isValue_Type() {} +func (*Value_StringValue) isValue_Type() {} +func (*Value_BooleanValue) isValue_Type() {} +func (*Value_TimestampValue) isValue_Type() {} +func (*Value_TimeValue) isValue_Type() {} +func (*Value_DateValue) isValue_Type() {} +func (*Value_DayOfWeekValue) isValue_Type() {} + +func (m *Value) GetType() isValue_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *Value) GetIntegerValue() int64 { + if x, ok := m.GetType().(*Value_IntegerValue); ok { + return x.IntegerValue + } + return 0 +} + +func (m *Value) GetFloatValue() float64 { + if x, ok := m.GetType().(*Value_FloatValue); ok { + return x.FloatValue + } + return 0 +} + +func (m *Value) GetStringValue() string { + if x, ok := m.GetType().(*Value_StringValue); ok { + return x.StringValue + } + return "" +} + +func (m *Value) GetBooleanValue() bool { + if x, ok := m.GetType().(*Value_BooleanValue); ok { + return x.BooleanValue + } + return false +} + +func (m *Value) GetTimestampValue() *google_protobuf1.Timestamp { + if x, ok := m.GetType().(*Value_TimestampValue); ok { + return x.TimestampValue + } + return nil +} + +func (m *Value) GetTimeValue() *google_type2.TimeOfDay { + if x, ok := m.GetType().(*Value_TimeValue); ok { + return x.TimeValue + } + return nil +} + +func (m *Value) GetDateValue() *google_type.Date { + if x, ok := m.GetType().(*Value_DateValue); ok { + return x.DateValue + } + return nil +} + +func (m *Value) GetDayOfWeekValue() google_type1.DayOfWeek { + if x, ok := m.GetType().(*Value_DayOfWeekValue); ok { + return x.DayOfWeekValue + } + return google_type1.DayOfWeek_DAY_OF_WEEK_UNSPECIFIED +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Value) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Value_OneofMarshaler, _Value_OneofUnmarshaler, _Value_OneofSizer, []interface{}{ + (*Value_IntegerValue)(nil), + (*Value_FloatValue)(nil), + (*Value_StringValue)(nil), + (*Value_BooleanValue)(nil), + (*Value_TimestampValue)(nil), + (*Value_TimeValue)(nil), + (*Value_DateValue)(nil), + (*Value_DayOfWeekValue)(nil), + } +} + +func _Value_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Value) + // type + switch x := m.Type.(type) { + case *Value_IntegerValue: + b.EncodeVarint(1<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.IntegerValue)) + case *Value_FloatValue: + b.EncodeVarint(2<<3 | proto.WireFixed64) + b.EncodeFixed64(math.Float64bits(x.FloatValue)) + case *Value_StringValue: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeStringBytes(x.StringValue) + case *Value_BooleanValue: + t := uint64(0) + if x.BooleanValue { + t = 1 + } + b.EncodeVarint(4<<3 | proto.WireVarint) + b.EncodeVarint(t) + case *Value_TimestampValue: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.TimestampValue); err != nil { + return err + } + case *Value_TimeValue: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.TimeValue); err != nil { + return err + } + case *Value_DateValue: + b.EncodeVarint(7<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DateValue); err != nil { + return err + } + case *Value_DayOfWeekValue: + b.EncodeVarint(8<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.DayOfWeekValue)) + case nil: + default: + return fmt.Errorf("Value.Type has unexpected type %T", x) + } + return nil +} + +func _Value_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Value) + switch tag { + case 1: // type.integer_value + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Type = &Value_IntegerValue{int64(x)} + return true, err + case 2: // type.float_value + if wire != proto.WireFixed64 { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeFixed64() + m.Type = &Value_FloatValue{math.Float64frombits(x)} + return true, err + case 3: // type.string_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Type = &Value_StringValue{x} + return true, err + case 4: // type.boolean_value + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Type = &Value_BooleanValue{x != 0} + return true, err + case 5: // type.timestamp_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf1.Timestamp) + err := b.DecodeMessage(msg) + m.Type = &Value_TimestampValue{msg} + return true, err + case 6: // type.time_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_type2.TimeOfDay) + err := b.DecodeMessage(msg) + m.Type = &Value_TimeValue{msg} + return true, err + case 7: // type.date_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_type.Date) + err := b.DecodeMessage(msg) + m.Type = &Value_DateValue{msg} + return true, err + case 8: // type.day_of_week_value + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Type = &Value_DayOfWeekValue{google_type1.DayOfWeek(x)} + return true, err + default: + return false, nil + } +} + +func _Value_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Value) + // type + switch x := m.Type.(type) { + case *Value_IntegerValue: + n += proto.SizeVarint(1<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.IntegerValue)) + case *Value_FloatValue: + n += proto.SizeVarint(2<<3 | proto.WireFixed64) + n += 8 + case *Value_StringValue: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.StringValue))) + n += len(x.StringValue) + case *Value_BooleanValue: + n += proto.SizeVarint(4<<3 | proto.WireVarint) + n += 1 + case *Value_TimestampValue: + s := proto.Size(x.TimestampValue) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Value_TimeValue: + s := proto.Size(x.TimeValue) + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Value_DateValue: + s := proto.Size(x.DateValue) + n += proto.SizeVarint(7<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Value_DayOfWeekValue: + n += proto.SizeVarint(8<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.DayOfWeekValue)) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Message for infoType-dependent details parsed from quote. +type QuoteInfo struct { + // Object representation of the quote. + // + // Types that are valid to be assigned to ParsedQuote: + // *QuoteInfo_DateTime + ParsedQuote isQuoteInfo_ParsedQuote `protobuf_oneof:"parsed_quote"` +} + +func (m *QuoteInfo) Reset() { *m = QuoteInfo{} } +func (m *QuoteInfo) String() string { return proto.CompactTextString(m) } +func (*QuoteInfo) ProtoMessage() {} +func (*QuoteInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} } + +type isQuoteInfo_ParsedQuote interface { + isQuoteInfo_ParsedQuote() +} + +type QuoteInfo_DateTime struct { + DateTime *DateTime `protobuf:"bytes,2,opt,name=date_time,json=dateTime,oneof"` +} + +func (*QuoteInfo_DateTime) isQuoteInfo_ParsedQuote() {} + +func (m *QuoteInfo) GetParsedQuote() isQuoteInfo_ParsedQuote { + if m != nil { + return m.ParsedQuote + } + return nil +} + +func (m *QuoteInfo) GetDateTime() *DateTime { + if x, ok := m.GetParsedQuote().(*QuoteInfo_DateTime); ok { + return x.DateTime + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*QuoteInfo) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _QuoteInfo_OneofMarshaler, _QuoteInfo_OneofUnmarshaler, _QuoteInfo_OneofSizer, []interface{}{ + (*QuoteInfo_DateTime)(nil), + } +} + +func _QuoteInfo_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*QuoteInfo) + // parsed_quote + switch x := m.ParsedQuote.(type) { + case *QuoteInfo_DateTime: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DateTime); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("QuoteInfo.ParsedQuote has unexpected type %T", x) + } + return nil +} + +func _QuoteInfo_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*QuoteInfo) + switch tag { + case 2: // parsed_quote.date_time + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(DateTime) + err := b.DecodeMessage(msg) + m.ParsedQuote = &QuoteInfo_DateTime{msg} + return true, err + default: + return false, nil + } +} + +func _QuoteInfo_OneofSizer(msg proto.Message) (n int) { + m := msg.(*QuoteInfo) + // parsed_quote + switch x := m.ParsedQuote.(type) { + case *QuoteInfo_DateTime: + s := proto.Size(x.DateTime) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Message for a date time object. +type DateTime struct { + // One or more of the following must be set. All fields are optional, but + // when set must be valid date or time values. + Date *google_type.Date `protobuf:"bytes,1,opt,name=date" json:"date,omitempty"` + DayOfWeek google_type1.DayOfWeek `protobuf:"varint,2,opt,name=day_of_week,json=dayOfWeek,enum=google.type.DayOfWeek" json:"day_of_week,omitempty"` + Time *google_type2.TimeOfDay `protobuf:"bytes,3,opt,name=time" json:"time,omitempty"` + TimeZone *DateTime_TimeZone `protobuf:"bytes,4,opt,name=time_zone,json=timeZone" json:"time_zone,omitempty"` +} + +func (m *DateTime) Reset() { *m = DateTime{} } +func (m *DateTime) String() string { return proto.CompactTextString(m) } +func (*DateTime) ProtoMessage() {} +func (*DateTime) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} } + +func (m *DateTime) GetDate() *google_type.Date { + if m != nil { + return m.Date + } + return nil +} + +func (m *DateTime) GetDayOfWeek() google_type1.DayOfWeek { + if m != nil { + return m.DayOfWeek + } + return google_type1.DayOfWeek_DAY_OF_WEEK_UNSPECIFIED +} + +func (m *DateTime) GetTime() *google_type2.TimeOfDay { + if m != nil { + return m.Time + } + return nil +} + +func (m *DateTime) GetTimeZone() *DateTime_TimeZone { + if m != nil { + return m.TimeZone + } + return nil +} + +type DateTime_TimeZone struct { + // Set only if the offset can be determined. Positive for time ahead of UTC. + // E.g. For "UTC-9", this value is -540. + OffsetMinutes int32 `protobuf:"varint,1,opt,name=offset_minutes,json=offsetMinutes" json:"offset_minutes,omitempty"` +} + +func (m *DateTime_TimeZone) Reset() { *m = DateTime_TimeZone{} } +func (m *DateTime_TimeZone) String() string { return proto.CompactTextString(m) } +func (*DateTime_TimeZone) ProtoMessage() {} +func (*DateTime_TimeZone) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32, 0} } + +func (m *DateTime_TimeZone) GetOffsetMinutes() int32 { + if m != nil { + return m.OffsetMinutes + } + return 0 +} + +// The configuration that controls how the data will change. +type DeidentifyConfig struct { + // Types that are valid to be assigned to Transformation: + // *DeidentifyConfig_InfoTypeTransformations + // *DeidentifyConfig_RecordTransformations + Transformation isDeidentifyConfig_Transformation `protobuf_oneof:"transformation"` +} + +func (m *DeidentifyConfig) Reset() { *m = DeidentifyConfig{} } +func (m *DeidentifyConfig) String() string { return proto.CompactTextString(m) } +func (*DeidentifyConfig) ProtoMessage() {} +func (*DeidentifyConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} } + +type isDeidentifyConfig_Transformation interface { + isDeidentifyConfig_Transformation() +} + +type DeidentifyConfig_InfoTypeTransformations struct { + InfoTypeTransformations *InfoTypeTransformations `protobuf:"bytes,1,opt,name=info_type_transformations,json=infoTypeTransformations,oneof"` +} +type DeidentifyConfig_RecordTransformations struct { + RecordTransformations *RecordTransformations `protobuf:"bytes,2,opt,name=record_transformations,json=recordTransformations,oneof"` +} + +func (*DeidentifyConfig_InfoTypeTransformations) isDeidentifyConfig_Transformation() {} +func (*DeidentifyConfig_RecordTransformations) isDeidentifyConfig_Transformation() {} + +func (m *DeidentifyConfig) GetTransformation() isDeidentifyConfig_Transformation { + if m != nil { + return m.Transformation + } + return nil +} + +func (m *DeidentifyConfig) GetInfoTypeTransformations() *InfoTypeTransformations { + if x, ok := m.GetTransformation().(*DeidentifyConfig_InfoTypeTransformations); ok { + return x.InfoTypeTransformations + } + return nil +} + +func (m *DeidentifyConfig) GetRecordTransformations() *RecordTransformations { + if x, ok := m.GetTransformation().(*DeidentifyConfig_RecordTransformations); ok { + return x.RecordTransformations + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*DeidentifyConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _DeidentifyConfig_OneofMarshaler, _DeidentifyConfig_OneofUnmarshaler, _DeidentifyConfig_OneofSizer, []interface{}{ + (*DeidentifyConfig_InfoTypeTransformations)(nil), + (*DeidentifyConfig_RecordTransformations)(nil), + } +} + +func _DeidentifyConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*DeidentifyConfig) + // transformation + switch x := m.Transformation.(type) { + case *DeidentifyConfig_InfoTypeTransformations: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.InfoTypeTransformations); err != nil { + return err + } + case *DeidentifyConfig_RecordTransformations: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RecordTransformations); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("DeidentifyConfig.Transformation has unexpected type %T", x) + } + return nil +} + +func _DeidentifyConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*DeidentifyConfig) + switch tag { + case 1: // transformation.info_type_transformations + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(InfoTypeTransformations) + err := b.DecodeMessage(msg) + m.Transformation = &DeidentifyConfig_InfoTypeTransformations{msg} + return true, err + case 2: // transformation.record_transformations + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(RecordTransformations) + err := b.DecodeMessage(msg) + m.Transformation = &DeidentifyConfig_RecordTransformations{msg} + return true, err + default: + return false, nil + } +} + +func _DeidentifyConfig_OneofSizer(msg proto.Message) (n int) { + m := msg.(*DeidentifyConfig) + // transformation + switch x := m.Transformation.(type) { + case *DeidentifyConfig_InfoTypeTransformations: + s := proto.Size(x.InfoTypeTransformations) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *DeidentifyConfig_RecordTransformations: + s := proto.Size(x.RecordTransformations) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A rule for transforming a value. +type PrimitiveTransformation struct { + // Types that are valid to be assigned to Transformation: + // *PrimitiveTransformation_ReplaceConfig + // *PrimitiveTransformation_RedactConfig + // *PrimitiveTransformation_CharacterMaskConfig + // *PrimitiveTransformation_CryptoReplaceFfxFpeConfig + // *PrimitiveTransformation_FixedSizeBucketingConfig + // *PrimitiveTransformation_BucketingConfig + // *PrimitiveTransformation_ReplaceWithInfoTypeConfig + // *PrimitiveTransformation_TimePartConfig + // *PrimitiveTransformation_CryptoHashConfig + // *PrimitiveTransformation_DateShiftConfig + Transformation isPrimitiveTransformation_Transformation `protobuf_oneof:"transformation"` +} + +func (m *PrimitiveTransformation) Reset() { *m = PrimitiveTransformation{} } +func (m *PrimitiveTransformation) String() string { return proto.CompactTextString(m) } +func (*PrimitiveTransformation) ProtoMessage() {} +func (*PrimitiveTransformation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} } + +type isPrimitiveTransformation_Transformation interface { + isPrimitiveTransformation_Transformation() +} + +type PrimitiveTransformation_ReplaceConfig struct { + ReplaceConfig *ReplaceValueConfig `protobuf:"bytes,1,opt,name=replace_config,json=replaceConfig,oneof"` +} +type PrimitiveTransformation_RedactConfig struct { + RedactConfig *RedactConfig `protobuf:"bytes,2,opt,name=redact_config,json=redactConfig,oneof"` +} +type PrimitiveTransformation_CharacterMaskConfig struct { + CharacterMaskConfig *CharacterMaskConfig `protobuf:"bytes,3,opt,name=character_mask_config,json=characterMaskConfig,oneof"` +} +type PrimitiveTransformation_CryptoReplaceFfxFpeConfig struct { + CryptoReplaceFfxFpeConfig *CryptoReplaceFfxFpeConfig `protobuf:"bytes,4,opt,name=crypto_replace_ffx_fpe_config,json=cryptoReplaceFfxFpeConfig,oneof"` +} +type PrimitiveTransformation_FixedSizeBucketingConfig struct { + FixedSizeBucketingConfig *FixedSizeBucketingConfig `protobuf:"bytes,5,opt,name=fixed_size_bucketing_config,json=fixedSizeBucketingConfig,oneof"` +} +type PrimitiveTransformation_BucketingConfig struct { + BucketingConfig *BucketingConfig `protobuf:"bytes,6,opt,name=bucketing_config,json=bucketingConfig,oneof"` +} +type PrimitiveTransformation_ReplaceWithInfoTypeConfig struct { + ReplaceWithInfoTypeConfig *ReplaceWithInfoTypeConfig `protobuf:"bytes,7,opt,name=replace_with_info_type_config,json=replaceWithInfoTypeConfig,oneof"` +} +type PrimitiveTransformation_TimePartConfig struct { + TimePartConfig *TimePartConfig `protobuf:"bytes,8,opt,name=time_part_config,json=timePartConfig,oneof"` +} +type PrimitiveTransformation_CryptoHashConfig struct { + CryptoHashConfig *CryptoHashConfig `protobuf:"bytes,9,opt,name=crypto_hash_config,json=cryptoHashConfig,oneof"` +} +type PrimitiveTransformation_DateShiftConfig struct { + DateShiftConfig *DateShiftConfig `protobuf:"bytes,11,opt,name=date_shift_config,json=dateShiftConfig,oneof"` +} + +func (*PrimitiveTransformation_ReplaceConfig) isPrimitiveTransformation_Transformation() {} +func (*PrimitiveTransformation_RedactConfig) isPrimitiveTransformation_Transformation() {} +func (*PrimitiveTransformation_CharacterMaskConfig) isPrimitiveTransformation_Transformation() {} +func (*PrimitiveTransformation_CryptoReplaceFfxFpeConfig) isPrimitiveTransformation_Transformation() {} +func (*PrimitiveTransformation_FixedSizeBucketingConfig) isPrimitiveTransformation_Transformation() {} +func (*PrimitiveTransformation_BucketingConfig) isPrimitiveTransformation_Transformation() {} +func (*PrimitiveTransformation_ReplaceWithInfoTypeConfig) isPrimitiveTransformation_Transformation() {} +func (*PrimitiveTransformation_TimePartConfig) isPrimitiveTransformation_Transformation() {} +func (*PrimitiveTransformation_CryptoHashConfig) isPrimitiveTransformation_Transformation() {} +func (*PrimitiveTransformation_DateShiftConfig) isPrimitiveTransformation_Transformation() {} + +func (m *PrimitiveTransformation) GetTransformation() isPrimitiveTransformation_Transformation { + if m != nil { + return m.Transformation + } + return nil +} + +func (m *PrimitiveTransformation) GetReplaceConfig() *ReplaceValueConfig { + if x, ok := m.GetTransformation().(*PrimitiveTransformation_ReplaceConfig); ok { + return x.ReplaceConfig + } + return nil +} + +func (m *PrimitiveTransformation) GetRedactConfig() *RedactConfig { + if x, ok := m.GetTransformation().(*PrimitiveTransformation_RedactConfig); ok { + return x.RedactConfig + } + return nil +} + +func (m *PrimitiveTransformation) GetCharacterMaskConfig() *CharacterMaskConfig { + if x, ok := m.GetTransformation().(*PrimitiveTransformation_CharacterMaskConfig); ok { + return x.CharacterMaskConfig + } + return nil +} + +func (m *PrimitiveTransformation) GetCryptoReplaceFfxFpeConfig() *CryptoReplaceFfxFpeConfig { + if x, ok := m.GetTransformation().(*PrimitiveTransformation_CryptoReplaceFfxFpeConfig); ok { + return x.CryptoReplaceFfxFpeConfig + } + return nil +} + +func (m *PrimitiveTransformation) GetFixedSizeBucketingConfig() *FixedSizeBucketingConfig { + if x, ok := m.GetTransformation().(*PrimitiveTransformation_FixedSizeBucketingConfig); ok { + return x.FixedSizeBucketingConfig + } + return nil +} + +func (m *PrimitiveTransformation) GetBucketingConfig() *BucketingConfig { + if x, ok := m.GetTransformation().(*PrimitiveTransformation_BucketingConfig); ok { + return x.BucketingConfig + } + return nil +} + +func (m *PrimitiveTransformation) GetReplaceWithInfoTypeConfig() *ReplaceWithInfoTypeConfig { + if x, ok := m.GetTransformation().(*PrimitiveTransformation_ReplaceWithInfoTypeConfig); ok { + return x.ReplaceWithInfoTypeConfig + } + return nil +} + +func (m *PrimitiveTransformation) GetTimePartConfig() *TimePartConfig { + if x, ok := m.GetTransformation().(*PrimitiveTransformation_TimePartConfig); ok { + return x.TimePartConfig + } + return nil +} + +func (m *PrimitiveTransformation) GetCryptoHashConfig() *CryptoHashConfig { + if x, ok := m.GetTransformation().(*PrimitiveTransformation_CryptoHashConfig); ok { + return x.CryptoHashConfig + } + return nil +} + +func (m *PrimitiveTransformation) GetDateShiftConfig() *DateShiftConfig { + if x, ok := m.GetTransformation().(*PrimitiveTransformation_DateShiftConfig); ok { + return x.DateShiftConfig + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*PrimitiveTransformation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _PrimitiveTransformation_OneofMarshaler, _PrimitiveTransformation_OneofUnmarshaler, _PrimitiveTransformation_OneofSizer, []interface{}{ + (*PrimitiveTransformation_ReplaceConfig)(nil), + (*PrimitiveTransformation_RedactConfig)(nil), + (*PrimitiveTransformation_CharacterMaskConfig)(nil), + (*PrimitiveTransformation_CryptoReplaceFfxFpeConfig)(nil), + (*PrimitiveTransformation_FixedSizeBucketingConfig)(nil), + (*PrimitiveTransformation_BucketingConfig)(nil), + (*PrimitiveTransformation_ReplaceWithInfoTypeConfig)(nil), + (*PrimitiveTransformation_TimePartConfig)(nil), + (*PrimitiveTransformation_CryptoHashConfig)(nil), + (*PrimitiveTransformation_DateShiftConfig)(nil), + } +} + +func _PrimitiveTransformation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*PrimitiveTransformation) + // transformation + switch x := m.Transformation.(type) { + case *PrimitiveTransformation_ReplaceConfig: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ReplaceConfig); err != nil { + return err + } + case *PrimitiveTransformation_RedactConfig: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RedactConfig); err != nil { + return err + } + case *PrimitiveTransformation_CharacterMaskConfig: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.CharacterMaskConfig); err != nil { + return err + } + case *PrimitiveTransformation_CryptoReplaceFfxFpeConfig: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.CryptoReplaceFfxFpeConfig); err != nil { + return err + } + case *PrimitiveTransformation_FixedSizeBucketingConfig: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.FixedSizeBucketingConfig); err != nil { + return err + } + case *PrimitiveTransformation_BucketingConfig: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.BucketingConfig); err != nil { + return err + } + case *PrimitiveTransformation_ReplaceWithInfoTypeConfig: + b.EncodeVarint(7<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ReplaceWithInfoTypeConfig); err != nil { + return err + } + case *PrimitiveTransformation_TimePartConfig: + b.EncodeVarint(8<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.TimePartConfig); err != nil { + return err + } + case *PrimitiveTransformation_CryptoHashConfig: + b.EncodeVarint(9<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.CryptoHashConfig); err != nil { + return err + } + case *PrimitiveTransformation_DateShiftConfig: + b.EncodeVarint(11<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DateShiftConfig); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("PrimitiveTransformation.Transformation has unexpected type %T", x) + } + return nil +} + +func _PrimitiveTransformation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*PrimitiveTransformation) + switch tag { + case 1: // transformation.replace_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ReplaceValueConfig) + err := b.DecodeMessage(msg) + m.Transformation = &PrimitiveTransformation_ReplaceConfig{msg} + return true, err + case 2: // transformation.redact_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(RedactConfig) + err := b.DecodeMessage(msg) + m.Transformation = &PrimitiveTransformation_RedactConfig{msg} + return true, err + case 3: // transformation.character_mask_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CharacterMaskConfig) + err := b.DecodeMessage(msg) + m.Transformation = &PrimitiveTransformation_CharacterMaskConfig{msg} + return true, err + case 4: // transformation.crypto_replace_ffx_fpe_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CryptoReplaceFfxFpeConfig) + err := b.DecodeMessage(msg) + m.Transformation = &PrimitiveTransformation_CryptoReplaceFfxFpeConfig{msg} + return true, err + case 5: // transformation.fixed_size_bucketing_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(FixedSizeBucketingConfig) + err := b.DecodeMessage(msg) + m.Transformation = &PrimitiveTransformation_FixedSizeBucketingConfig{msg} + return true, err + case 6: // transformation.bucketing_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(BucketingConfig) + err := b.DecodeMessage(msg) + m.Transformation = &PrimitiveTransformation_BucketingConfig{msg} + return true, err + case 7: // transformation.replace_with_info_type_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ReplaceWithInfoTypeConfig) + err := b.DecodeMessage(msg) + m.Transformation = &PrimitiveTransformation_ReplaceWithInfoTypeConfig{msg} + return true, err + case 8: // transformation.time_part_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TimePartConfig) + err := b.DecodeMessage(msg) + m.Transformation = &PrimitiveTransformation_TimePartConfig{msg} + return true, err + case 9: // transformation.crypto_hash_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CryptoHashConfig) + err := b.DecodeMessage(msg) + m.Transformation = &PrimitiveTransformation_CryptoHashConfig{msg} + return true, err + case 11: // transformation.date_shift_config + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(DateShiftConfig) + err := b.DecodeMessage(msg) + m.Transformation = &PrimitiveTransformation_DateShiftConfig{msg} + return true, err + default: + return false, nil + } +} + +func _PrimitiveTransformation_OneofSizer(msg proto.Message) (n int) { + m := msg.(*PrimitiveTransformation) + // transformation + switch x := m.Transformation.(type) { + case *PrimitiveTransformation_ReplaceConfig: + s := proto.Size(x.ReplaceConfig) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrimitiveTransformation_RedactConfig: + s := proto.Size(x.RedactConfig) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrimitiveTransformation_CharacterMaskConfig: + s := proto.Size(x.CharacterMaskConfig) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrimitiveTransformation_CryptoReplaceFfxFpeConfig: + s := proto.Size(x.CryptoReplaceFfxFpeConfig) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrimitiveTransformation_FixedSizeBucketingConfig: + s := proto.Size(x.FixedSizeBucketingConfig) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrimitiveTransformation_BucketingConfig: + s := proto.Size(x.BucketingConfig) + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrimitiveTransformation_ReplaceWithInfoTypeConfig: + s := proto.Size(x.ReplaceWithInfoTypeConfig) + n += proto.SizeVarint(7<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrimitiveTransformation_TimePartConfig: + s := proto.Size(x.TimePartConfig) + n += proto.SizeVarint(8<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrimitiveTransformation_CryptoHashConfig: + s := proto.Size(x.CryptoHashConfig) + n += proto.SizeVarint(9<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *PrimitiveTransformation_DateShiftConfig: + s := proto.Size(x.DateShiftConfig) + n += proto.SizeVarint(11<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// For use with `Date`, `Timestamp`, and `TimeOfDay`, extract or preserve a +// portion of the value. +type TimePartConfig struct { + PartToExtract TimePartConfig_TimePart `protobuf:"varint,1,opt,name=part_to_extract,json=partToExtract,enum=google.privacy.dlp.v2beta2.TimePartConfig_TimePart" json:"part_to_extract,omitempty"` +} + +func (m *TimePartConfig) Reset() { *m = TimePartConfig{} } +func (m *TimePartConfig) String() string { return proto.CompactTextString(m) } +func (*TimePartConfig) ProtoMessage() {} +func (*TimePartConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} } + +func (m *TimePartConfig) GetPartToExtract() TimePartConfig_TimePart { + if m != nil { + return m.PartToExtract + } + return TimePartConfig_TIME_PART_UNSPECIFIED +} + +// Pseudonymization method that generates surrogates via cryptographic hashing. +// Uses SHA-256. +// The key size must be either 32 or 64 bytes. +// Outputs a 32 byte digest as an uppercase hex string +// (for example, 41D1567F7F99F1DC2A5FAB886DEE5BEE). +// Currently, only string and integer values can be hashed. +type CryptoHashConfig struct { + // The key used by the hash function. + CryptoKey *CryptoKey `protobuf:"bytes,1,opt,name=crypto_key,json=cryptoKey" json:"crypto_key,omitempty"` +} + +func (m *CryptoHashConfig) Reset() { *m = CryptoHashConfig{} } +func (m *CryptoHashConfig) String() string { return proto.CompactTextString(m) } +func (*CryptoHashConfig) ProtoMessage() {} +func (*CryptoHashConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} } + +func (m *CryptoHashConfig) GetCryptoKey() *CryptoKey { + if m != nil { + return m.CryptoKey + } + return nil +} + +// Replace each input value with a given `Value`. +type ReplaceValueConfig struct { + // Value to replace it with. + NewValue *Value `protobuf:"bytes,1,opt,name=new_value,json=newValue" json:"new_value,omitempty"` +} + +func (m *ReplaceValueConfig) Reset() { *m = ReplaceValueConfig{} } +func (m *ReplaceValueConfig) String() string { return proto.CompactTextString(m) } +func (*ReplaceValueConfig) ProtoMessage() {} +func (*ReplaceValueConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} } + +func (m *ReplaceValueConfig) GetNewValue() *Value { + if m != nil { + return m.NewValue + } + return nil +} + +// Replace each matching finding with the name of the info_type. +type ReplaceWithInfoTypeConfig struct { +} + +func (m *ReplaceWithInfoTypeConfig) Reset() { *m = ReplaceWithInfoTypeConfig{} } +func (m *ReplaceWithInfoTypeConfig) String() string { return proto.CompactTextString(m) } +func (*ReplaceWithInfoTypeConfig) ProtoMessage() {} +func (*ReplaceWithInfoTypeConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} } + +// Redact a given value. For example, if used with an `InfoTypeTransformation` +// transforming PHONE_NUMBER, and input 'My phone number is 206-555-0123', the +// output would be 'My phone number is '. +type RedactConfig struct { +} + +func (m *RedactConfig) Reset() { *m = RedactConfig{} } +func (m *RedactConfig) String() string { return proto.CompactTextString(m) } +func (*RedactConfig) ProtoMessage() {} +func (*RedactConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} } + +// Characters to skip when doing deidentification of a value. These will be left +// alone and skipped. +type CharsToIgnore struct { + // Types that are valid to be assigned to Characters: + // *CharsToIgnore_CharactersToSkip + // *CharsToIgnore_CommonCharactersToIgnore + Characters isCharsToIgnore_Characters `protobuf_oneof:"characters"` +} + +func (m *CharsToIgnore) Reset() { *m = CharsToIgnore{} } +func (m *CharsToIgnore) String() string { return proto.CompactTextString(m) } +func (*CharsToIgnore) ProtoMessage() {} +func (*CharsToIgnore) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} } + +type isCharsToIgnore_Characters interface { + isCharsToIgnore_Characters() +} + +type CharsToIgnore_CharactersToSkip struct { + CharactersToSkip string `protobuf:"bytes,1,opt,name=characters_to_skip,json=charactersToSkip,oneof"` +} +type CharsToIgnore_CommonCharactersToIgnore struct { + CommonCharactersToIgnore CharsToIgnore_CommonCharsToIgnore `protobuf:"varint,2,opt,name=common_characters_to_ignore,json=commonCharactersToIgnore,enum=google.privacy.dlp.v2beta2.CharsToIgnore_CommonCharsToIgnore,oneof"` +} + +func (*CharsToIgnore_CharactersToSkip) isCharsToIgnore_Characters() {} +func (*CharsToIgnore_CommonCharactersToIgnore) isCharsToIgnore_Characters() {} + +func (m *CharsToIgnore) GetCharacters() isCharsToIgnore_Characters { + if m != nil { + return m.Characters + } + return nil +} + +func (m *CharsToIgnore) GetCharactersToSkip() string { + if x, ok := m.GetCharacters().(*CharsToIgnore_CharactersToSkip); ok { + return x.CharactersToSkip + } + return "" +} + +func (m *CharsToIgnore) GetCommonCharactersToIgnore() CharsToIgnore_CommonCharsToIgnore { + if x, ok := m.GetCharacters().(*CharsToIgnore_CommonCharactersToIgnore); ok { + return x.CommonCharactersToIgnore + } + return CharsToIgnore_COMMON_CHARS_TO_IGNORE_UNSPECIFIED +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*CharsToIgnore) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _CharsToIgnore_OneofMarshaler, _CharsToIgnore_OneofUnmarshaler, _CharsToIgnore_OneofSizer, []interface{}{ + (*CharsToIgnore_CharactersToSkip)(nil), + (*CharsToIgnore_CommonCharactersToIgnore)(nil), + } +} + +func _CharsToIgnore_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*CharsToIgnore) + // characters + switch x := m.Characters.(type) { + case *CharsToIgnore_CharactersToSkip: + b.EncodeVarint(1<<3 | proto.WireBytes) + b.EncodeStringBytes(x.CharactersToSkip) + case *CharsToIgnore_CommonCharactersToIgnore: + b.EncodeVarint(2<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.CommonCharactersToIgnore)) + case nil: + default: + return fmt.Errorf("CharsToIgnore.Characters has unexpected type %T", x) + } + return nil +} + +func _CharsToIgnore_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*CharsToIgnore) + switch tag { + case 1: // characters.characters_to_skip + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Characters = &CharsToIgnore_CharactersToSkip{x} + return true, err + case 2: // characters.common_characters_to_ignore + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Characters = &CharsToIgnore_CommonCharactersToIgnore{CharsToIgnore_CommonCharsToIgnore(x)} + return true, err + default: + return false, nil + } +} + +func _CharsToIgnore_OneofSizer(msg proto.Message) (n int) { + m := msg.(*CharsToIgnore) + // characters + switch x := m.Characters.(type) { + case *CharsToIgnore_CharactersToSkip: + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.CharactersToSkip))) + n += len(x.CharactersToSkip) + case *CharsToIgnore_CommonCharactersToIgnore: + n += proto.SizeVarint(2<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.CommonCharactersToIgnore)) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Partially mask a string by replacing a given number of characters with a +// fixed character. Masking can start from the beginning or end of the string. +// This can be used on data of any type (numbers, longs, and so on) and when +// de-identifying structured data we'll attempt to preserve the original data's +// type. (This allows you to take a long like 123 and modify it to a string like +// **3. +type CharacterMaskConfig struct { + // Character to mask the sensitive values—for example, "*" for an + // alphabetic string such as name, or "0" for a numeric string such as ZIP + // code or credit card number. String must have length 1. If not supplied, we + // will default to "*" for strings, 0 for digits. + MaskingCharacter string `protobuf:"bytes,1,opt,name=masking_character,json=maskingCharacter" json:"masking_character,omitempty"` + // Number of characters to mask. If not set, all matching chars will be + // masked. Skipped characters do not count towards this tally. + NumberToMask int32 `protobuf:"varint,2,opt,name=number_to_mask,json=numberToMask" json:"number_to_mask,omitempty"` + // Mask characters in reverse order. For example, if `masking_character` is + // '0', number_to_mask is 14, and `reverse_order` is false, then + // 1234-5678-9012-3456 -> 00000000000000-3456 + // If `masking_character` is '*', `number_to_mask` is 3, and `reverse_order` + // is true, then 12345 -> 12*** + ReverseOrder bool `protobuf:"varint,3,opt,name=reverse_order,json=reverseOrder" json:"reverse_order,omitempty"` + // When masking a string, items in this list will be skipped when replacing. + // For example, if your string is 555-555-5555 and you ask us to skip `-` and + // mask 5 chars with * we would produce ***-*55-5555. + CharactersToIgnore []*CharsToIgnore `protobuf:"bytes,4,rep,name=characters_to_ignore,json=charactersToIgnore" json:"characters_to_ignore,omitempty"` +} + +func (m *CharacterMaskConfig) Reset() { *m = CharacterMaskConfig{} } +func (m *CharacterMaskConfig) String() string { return proto.CompactTextString(m) } +func (*CharacterMaskConfig) ProtoMessage() {} +func (*CharacterMaskConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41} } + +func (m *CharacterMaskConfig) GetMaskingCharacter() string { + if m != nil { + return m.MaskingCharacter + } + return "" +} + +func (m *CharacterMaskConfig) GetNumberToMask() int32 { + if m != nil { + return m.NumberToMask + } + return 0 +} + +func (m *CharacterMaskConfig) GetReverseOrder() bool { + if m != nil { + return m.ReverseOrder + } + return false +} + +func (m *CharacterMaskConfig) GetCharactersToIgnore() []*CharsToIgnore { + if m != nil { + return m.CharactersToIgnore + } + return nil +} + +// Buckets values based on fixed size ranges. The +// Bucketing transformation can provide all of this functionality, +// but requires more configuration. This message is provided as a convenience to +// the user for simple bucketing strategies. +// +// The transformed value will be a hyphenated string of +// -, i.e if lower_bound = 10 and upper_bound = 20 +// all values that are within this bucket will be replaced with "10-20". +// +// This can be used on data of type: double, long. +// +// If the bound Value type differs from the type of data +// being transformed, we will first attempt converting the type of the data to +// be transformed to match the type of the bound before comparing. +type FixedSizeBucketingConfig struct { + // Lower bound value of buckets. All values less than `lower_bound` are + // grouped together into a single bucket; for example if `lower_bound` = 10, + // then all values less than 10 are replaced with the value “-10”. [Required]. + LowerBound *Value `protobuf:"bytes,1,opt,name=lower_bound,json=lowerBound" json:"lower_bound,omitempty"` + // Upper bound value of buckets. All values greater than upper_bound are + // grouped together into a single bucket; for example if `upper_bound` = 89, + // then all values greater than 89 are replaced with the value “89+”. + // [Required]. + UpperBound *Value `protobuf:"bytes,2,opt,name=upper_bound,json=upperBound" json:"upper_bound,omitempty"` + // Size of each bucket (except for minimum and maximum buckets). So if + // `lower_bound` = 10, `upper_bound` = 89, and `bucket_size` = 10, then the + // following buckets would be used: -10, 10-20, 20-30, 30-40, 40-50, 50-60, + // 60-70, 70-80, 80-89, 89+. Precision up to 2 decimals works. [Required]. + BucketSize float64 `protobuf:"fixed64,3,opt,name=bucket_size,json=bucketSize" json:"bucket_size,omitempty"` +} + +func (m *FixedSizeBucketingConfig) Reset() { *m = FixedSizeBucketingConfig{} } +func (m *FixedSizeBucketingConfig) String() string { return proto.CompactTextString(m) } +func (*FixedSizeBucketingConfig) ProtoMessage() {} +func (*FixedSizeBucketingConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{42} } + +func (m *FixedSizeBucketingConfig) GetLowerBound() *Value { + if m != nil { + return m.LowerBound + } + return nil +} + +func (m *FixedSizeBucketingConfig) GetUpperBound() *Value { + if m != nil { + return m.UpperBound + } + return nil +} + +func (m *FixedSizeBucketingConfig) GetBucketSize() float64 { + if m != nil { + return m.BucketSize + } + return 0 +} + +// Generalization function that buckets values based on ranges. The ranges and +// replacement values are dynamically provided by the user for custom behavior, +// such as 1-30 -> LOW 31-65 -> MEDIUM 66-100 -> HIGH +// This can be used on +// data of type: number, long, string, timestamp. +// If the bound `Value` type differs from the type of data being transformed, we +// will first attempt converting the type of the data to be transformed to match +// the type of the bound before comparing. +type BucketingConfig struct { + // Set of buckets. Ranges must be non-overlapping. + Buckets []*BucketingConfig_Bucket `protobuf:"bytes,1,rep,name=buckets" json:"buckets,omitempty"` +} + +func (m *BucketingConfig) Reset() { *m = BucketingConfig{} } +func (m *BucketingConfig) String() string { return proto.CompactTextString(m) } +func (*BucketingConfig) ProtoMessage() {} +func (*BucketingConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{43} } + +func (m *BucketingConfig) GetBuckets() []*BucketingConfig_Bucket { + if m != nil { + return m.Buckets + } + return nil +} + +// Bucket is represented as a range, along with replacement values. +type BucketingConfig_Bucket struct { + // Lower bound of the range, inclusive. Type should be the same as max if + // used. + Min *Value `protobuf:"bytes,1,opt,name=min" json:"min,omitempty"` + // Upper bound of the range, exclusive; type must match min. + Max *Value `protobuf:"bytes,2,opt,name=max" json:"max,omitempty"` + // Replacement value for this bucket. If not provided + // the default behavior will be to hyphenate the min-max range. + ReplacementValue *Value `protobuf:"bytes,3,opt,name=replacement_value,json=replacementValue" json:"replacement_value,omitempty"` +} + +func (m *BucketingConfig_Bucket) Reset() { *m = BucketingConfig_Bucket{} } +func (m *BucketingConfig_Bucket) String() string { return proto.CompactTextString(m) } +func (*BucketingConfig_Bucket) ProtoMessage() {} +func (*BucketingConfig_Bucket) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{43, 0} } + +func (m *BucketingConfig_Bucket) GetMin() *Value { + if m != nil { + return m.Min + } + return nil +} + +func (m *BucketingConfig_Bucket) GetMax() *Value { + if m != nil { + return m.Max + } + return nil +} + +func (m *BucketingConfig_Bucket) GetReplacementValue() *Value { + if m != nil { + return m.ReplacementValue + } + return nil +} + +// Replaces an identifier with a surrogate using FPE with the FFX +// mode of operation; however when used in the `ReidentifyContent` API method, +// it serves the opposite function by reversing the surrogate back into +// the original identifier. +// The identifier must be encoded as ASCII. +// For a given crypto key and context, the same identifier will be +// replaced with the same surrogate. +// Identifiers must be at least two characters long. +// In the case that the identifier is the empty string, it will be skipped. +type CryptoReplaceFfxFpeConfig struct { + // The key used by the encryption algorithm. [required] + CryptoKey *CryptoKey `protobuf:"bytes,1,opt,name=crypto_key,json=cryptoKey" json:"crypto_key,omitempty"` + // The 'tweak', a context may be used for higher security since the same + // identifier in two different contexts won't be given the same surrogate. If + // the context is not set, a default tweak will be used. + // + // If the context is set but: + // + // 1. there is no record present when transforming a given value or + // 1. the field is not present when transforming a given value, + // + // a default tweak will be used. + // + // Note that case (1) is expected when an `InfoTypeTransformation` is + // applied to both structured and non-structured `ContentItem`s. + // Currently, the referenced field may be of value type integer or string. + // + // The tweak is constructed as a sequence of bytes in big endian byte order + // such that: + // + // - a 64 bit integer is encoded followed by a single byte of value 1 + // - a string is encoded in UTF-8 format followed by a single byte of value + // å 2 + Context *FieldId `protobuf:"bytes,2,opt,name=context" json:"context,omitempty"` + // Types that are valid to be assigned to Alphabet: + // *CryptoReplaceFfxFpeConfig_CommonAlphabet + // *CryptoReplaceFfxFpeConfig_CustomAlphabet + // *CryptoReplaceFfxFpeConfig_Radix + Alphabet isCryptoReplaceFfxFpeConfig_Alphabet `protobuf_oneof:"alphabet"` + // The custom infoType to annotate the surrogate with. + // This annotation will be applied to the surrogate by prefixing it with + // the name of the custom infoType followed by the number of + // characters comprising the surrogate. The following scheme defines the + // format: info_type_name(surrogate_character_count):surrogate + // + // For example, if the name of custom infoType is 'MY_TOKEN_INFO_TYPE' and + // the surrogate is 'abc', the full replacement value + // will be: 'MY_TOKEN_INFO_TYPE(3):abc' + // + // This annotation identifies the surrogate when inspecting content using the + // custom infoType + // [`SurrogateType`](/dlp/docs/reference/rest/v2beta2/InspectConfig#surrogatetype). + // This facilitates reversal of the surrogate when it occurs in free text. + // + // In order for inspection to work properly, the name of this infoType must + // not occur naturally anywhere in your data; otherwise, inspection may + // find a surrogate that does not correspond to an actual identifier. + // Therefore, choose your custom infoType name carefully after considering + // what your data looks like. One way to select a name that has a high chance + // of yielding reliable detection is to include one or more unicode characters + // that are highly improbable to exist in your data. + // For example, assuming your data is entered from a regular ASCII keyboard, + // the symbol with the hex code point 29DD might be used like so: + // ⧝MY_TOKEN_TYPE + SurrogateInfoType *InfoType `protobuf:"bytes,8,opt,name=surrogate_info_type,json=surrogateInfoType" json:"surrogate_info_type,omitempty"` +} + +func (m *CryptoReplaceFfxFpeConfig) Reset() { *m = CryptoReplaceFfxFpeConfig{} } +func (m *CryptoReplaceFfxFpeConfig) String() string { return proto.CompactTextString(m) } +func (*CryptoReplaceFfxFpeConfig) ProtoMessage() {} +func (*CryptoReplaceFfxFpeConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{44} } + +type isCryptoReplaceFfxFpeConfig_Alphabet interface { + isCryptoReplaceFfxFpeConfig_Alphabet() +} + +type CryptoReplaceFfxFpeConfig_CommonAlphabet struct { + CommonAlphabet CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet `protobuf:"varint,4,opt,name=common_alphabet,json=commonAlphabet,enum=google.privacy.dlp.v2beta2.CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet,oneof"` +} +type CryptoReplaceFfxFpeConfig_CustomAlphabet struct { + CustomAlphabet string `protobuf:"bytes,5,opt,name=custom_alphabet,json=customAlphabet,oneof"` +} +type CryptoReplaceFfxFpeConfig_Radix struct { + Radix int32 `protobuf:"varint,6,opt,name=radix,oneof"` +} + +func (*CryptoReplaceFfxFpeConfig_CommonAlphabet) isCryptoReplaceFfxFpeConfig_Alphabet() {} +func (*CryptoReplaceFfxFpeConfig_CustomAlphabet) isCryptoReplaceFfxFpeConfig_Alphabet() {} +func (*CryptoReplaceFfxFpeConfig_Radix) isCryptoReplaceFfxFpeConfig_Alphabet() {} + +func (m *CryptoReplaceFfxFpeConfig) GetAlphabet() isCryptoReplaceFfxFpeConfig_Alphabet { + if m != nil { + return m.Alphabet + } + return nil +} + +func (m *CryptoReplaceFfxFpeConfig) GetCryptoKey() *CryptoKey { + if m != nil { + return m.CryptoKey + } + return nil +} + +func (m *CryptoReplaceFfxFpeConfig) GetContext() *FieldId { + if m != nil { + return m.Context + } + return nil +} + +func (m *CryptoReplaceFfxFpeConfig) GetCommonAlphabet() CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet { + if x, ok := m.GetAlphabet().(*CryptoReplaceFfxFpeConfig_CommonAlphabet); ok { + return x.CommonAlphabet + } + return CryptoReplaceFfxFpeConfig_FFX_COMMON_NATIVE_ALPHABET_UNSPECIFIED +} + +func (m *CryptoReplaceFfxFpeConfig) GetCustomAlphabet() string { + if x, ok := m.GetAlphabet().(*CryptoReplaceFfxFpeConfig_CustomAlphabet); ok { + return x.CustomAlphabet + } + return "" +} + +func (m *CryptoReplaceFfxFpeConfig) GetRadix() int32 { + if x, ok := m.GetAlphabet().(*CryptoReplaceFfxFpeConfig_Radix); ok { + return x.Radix + } + return 0 +} + +func (m *CryptoReplaceFfxFpeConfig) GetSurrogateInfoType() *InfoType { + if m != nil { + return m.SurrogateInfoType + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*CryptoReplaceFfxFpeConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _CryptoReplaceFfxFpeConfig_OneofMarshaler, _CryptoReplaceFfxFpeConfig_OneofUnmarshaler, _CryptoReplaceFfxFpeConfig_OneofSizer, []interface{}{ + (*CryptoReplaceFfxFpeConfig_CommonAlphabet)(nil), + (*CryptoReplaceFfxFpeConfig_CustomAlphabet)(nil), + (*CryptoReplaceFfxFpeConfig_Radix)(nil), + } +} + +func _CryptoReplaceFfxFpeConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*CryptoReplaceFfxFpeConfig) + // alphabet + switch x := m.Alphabet.(type) { + case *CryptoReplaceFfxFpeConfig_CommonAlphabet: + b.EncodeVarint(4<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.CommonAlphabet)) + case *CryptoReplaceFfxFpeConfig_CustomAlphabet: + b.EncodeVarint(5<<3 | proto.WireBytes) + b.EncodeStringBytes(x.CustomAlphabet) + case *CryptoReplaceFfxFpeConfig_Radix: + b.EncodeVarint(6<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.Radix)) + case nil: + default: + return fmt.Errorf("CryptoReplaceFfxFpeConfig.Alphabet has unexpected type %T", x) + } + return nil +} + +func _CryptoReplaceFfxFpeConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*CryptoReplaceFfxFpeConfig) + switch tag { + case 4: // alphabet.common_alphabet + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Alphabet = &CryptoReplaceFfxFpeConfig_CommonAlphabet{CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet(x)} + return true, err + case 5: // alphabet.custom_alphabet + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Alphabet = &CryptoReplaceFfxFpeConfig_CustomAlphabet{x} + return true, err + case 6: // alphabet.radix + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Alphabet = &CryptoReplaceFfxFpeConfig_Radix{int32(x)} + return true, err + default: + return false, nil + } +} + +func _CryptoReplaceFfxFpeConfig_OneofSizer(msg proto.Message) (n int) { + m := msg.(*CryptoReplaceFfxFpeConfig) + // alphabet + switch x := m.Alphabet.(type) { + case *CryptoReplaceFfxFpeConfig_CommonAlphabet: + n += proto.SizeVarint(4<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.CommonAlphabet)) + case *CryptoReplaceFfxFpeConfig_CustomAlphabet: + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.CustomAlphabet))) + n += len(x.CustomAlphabet) + case *CryptoReplaceFfxFpeConfig_Radix: + n += proto.SizeVarint(6<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.Radix)) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// This is a data encryption key (DEK) (as opposed to +// a key encryption key (KEK) stored by KMS). +// When using KMS to wrap/unwrap DEKs, be sure to set an appropriate +// IAM policy on the KMS CryptoKey (KEK) to ensure an attacker cannot +// unwrap the data crypto key. +type CryptoKey struct { + // Types that are valid to be assigned to Source: + // *CryptoKey_Transient + // *CryptoKey_Unwrapped + // *CryptoKey_KmsWrapped + Source isCryptoKey_Source `protobuf_oneof:"source"` +} + +func (m *CryptoKey) Reset() { *m = CryptoKey{} } +func (m *CryptoKey) String() string { return proto.CompactTextString(m) } +func (*CryptoKey) ProtoMessage() {} +func (*CryptoKey) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{45} } + +type isCryptoKey_Source interface { + isCryptoKey_Source() +} + +type CryptoKey_Transient struct { + Transient *TransientCryptoKey `protobuf:"bytes,1,opt,name=transient,oneof"` +} +type CryptoKey_Unwrapped struct { + Unwrapped *UnwrappedCryptoKey `protobuf:"bytes,2,opt,name=unwrapped,oneof"` +} +type CryptoKey_KmsWrapped struct { + KmsWrapped *KmsWrappedCryptoKey `protobuf:"bytes,3,opt,name=kms_wrapped,json=kmsWrapped,oneof"` +} + +func (*CryptoKey_Transient) isCryptoKey_Source() {} +func (*CryptoKey_Unwrapped) isCryptoKey_Source() {} +func (*CryptoKey_KmsWrapped) isCryptoKey_Source() {} + +func (m *CryptoKey) GetSource() isCryptoKey_Source { + if m != nil { + return m.Source + } + return nil +} + +func (m *CryptoKey) GetTransient() *TransientCryptoKey { + if x, ok := m.GetSource().(*CryptoKey_Transient); ok { + return x.Transient + } + return nil +} + +func (m *CryptoKey) GetUnwrapped() *UnwrappedCryptoKey { + if x, ok := m.GetSource().(*CryptoKey_Unwrapped); ok { + return x.Unwrapped + } + return nil +} + +func (m *CryptoKey) GetKmsWrapped() *KmsWrappedCryptoKey { + if x, ok := m.GetSource().(*CryptoKey_KmsWrapped); ok { + return x.KmsWrapped + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*CryptoKey) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _CryptoKey_OneofMarshaler, _CryptoKey_OneofUnmarshaler, _CryptoKey_OneofSizer, []interface{}{ + (*CryptoKey_Transient)(nil), + (*CryptoKey_Unwrapped)(nil), + (*CryptoKey_KmsWrapped)(nil), + } +} + +func _CryptoKey_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*CryptoKey) + // source + switch x := m.Source.(type) { + case *CryptoKey_Transient: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Transient); err != nil { + return err + } + case *CryptoKey_Unwrapped: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Unwrapped); err != nil { + return err + } + case *CryptoKey_KmsWrapped: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.KmsWrapped); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("CryptoKey.Source has unexpected type %T", x) + } + return nil +} + +func _CryptoKey_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*CryptoKey) + switch tag { + case 1: // source.transient + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TransientCryptoKey) + err := b.DecodeMessage(msg) + m.Source = &CryptoKey_Transient{msg} + return true, err + case 2: // source.unwrapped + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(UnwrappedCryptoKey) + err := b.DecodeMessage(msg) + m.Source = &CryptoKey_Unwrapped{msg} + return true, err + case 3: // source.kms_wrapped + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(KmsWrappedCryptoKey) + err := b.DecodeMessage(msg) + m.Source = &CryptoKey_KmsWrapped{msg} + return true, err + default: + return false, nil + } +} + +func _CryptoKey_OneofSizer(msg proto.Message) (n int) { + m := msg.(*CryptoKey) + // source + switch x := m.Source.(type) { + case *CryptoKey_Transient: + s := proto.Size(x.Transient) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *CryptoKey_Unwrapped: + s := proto.Size(x.Unwrapped) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *CryptoKey_KmsWrapped: + s := proto.Size(x.KmsWrapped) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Use this to have a random data crypto key generated. +// It will be discarded after the request finishes. +type TransientCryptoKey struct { + // Name of the key. [required] + // This is an arbitrary string used to differentiate different keys. + // A unique key is generated per name: two separate `TransientCryptoKey` + // protos share the same generated key if their names are the same. + // When the data crypto key is generated, this name is not used in any way + // (repeating the api call will result in a different key being generated). + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *TransientCryptoKey) Reset() { *m = TransientCryptoKey{} } +func (m *TransientCryptoKey) String() string { return proto.CompactTextString(m) } +func (*TransientCryptoKey) ProtoMessage() {} +func (*TransientCryptoKey) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{46} } + +func (m *TransientCryptoKey) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Using raw keys is prone to security risks due to accidentally +// leaking the key. Choose another type of key if possible. +type UnwrappedCryptoKey struct { + // The AES 128/192/256 bit key. [required] + Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` +} + +func (m *UnwrappedCryptoKey) Reset() { *m = UnwrappedCryptoKey{} } +func (m *UnwrappedCryptoKey) String() string { return proto.CompactTextString(m) } +func (*UnwrappedCryptoKey) ProtoMessage() {} +func (*UnwrappedCryptoKey) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{47} } + +func (m *UnwrappedCryptoKey) GetKey() []byte { + if m != nil { + return m.Key + } + return nil +} + +// Include to use an existing data crypto key wrapped by KMS. +// Authorization requires the following IAM permissions when sending a request +// to perform a crypto transformation using a kms-wrapped crypto key: +// dlp.kms.encrypt +type KmsWrappedCryptoKey struct { + // The wrapped data crypto key. [required] + WrappedKey []byte `protobuf:"bytes,1,opt,name=wrapped_key,json=wrappedKey,proto3" json:"wrapped_key,omitempty"` + // The resource name of the KMS CryptoKey to use for unwrapping. [required] + CryptoKeyName string `protobuf:"bytes,2,opt,name=crypto_key_name,json=cryptoKeyName" json:"crypto_key_name,omitempty"` +} + +func (m *KmsWrappedCryptoKey) Reset() { *m = KmsWrappedCryptoKey{} } +func (m *KmsWrappedCryptoKey) String() string { return proto.CompactTextString(m) } +func (*KmsWrappedCryptoKey) ProtoMessage() {} +func (*KmsWrappedCryptoKey) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{48} } + +func (m *KmsWrappedCryptoKey) GetWrappedKey() []byte { + if m != nil { + return m.WrappedKey + } + return nil +} + +func (m *KmsWrappedCryptoKey) GetCryptoKeyName() string { + if m != nil { + return m.CryptoKeyName + } + return "" +} + +// Shifts dates by random number of days, with option to be consistent for the +// same context. +type DateShiftConfig struct { + // Range of shift in days. Actual shift will be selected at random within this + // range (inclusive ends). Negative means shift to earlier in time. Must not + // be more than 365250 days (1000 years) each direction. + // + // For example, 3 means shift date to at most 3 days into the future. + // [Required] + UpperBoundDays int32 `protobuf:"varint,1,opt,name=upper_bound_days,json=upperBoundDays" json:"upper_bound_days,omitempty"` + // For example, -5 means shift date to at most 5 days back in the past. + // [Required] + LowerBoundDays int32 `protobuf:"varint,2,opt,name=lower_bound_days,json=lowerBoundDays" json:"lower_bound_days,omitempty"` + // Points to the field that contains the context, for example, an entity id. + // If set, must also set method. If set, shift will be consistent for the + // given context. + Context *FieldId `protobuf:"bytes,3,opt,name=context" json:"context,omitempty"` + // Method for calculating shift that takes context into consideration. If + // set, must also set context. Can only be applied to table items. + // + // Types that are valid to be assigned to Method: + // *DateShiftConfig_CryptoKey + Method isDateShiftConfig_Method `protobuf_oneof:"method"` +} + +func (m *DateShiftConfig) Reset() { *m = DateShiftConfig{} } +func (m *DateShiftConfig) String() string { return proto.CompactTextString(m) } +func (*DateShiftConfig) ProtoMessage() {} +func (*DateShiftConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{49} } + +type isDateShiftConfig_Method interface { + isDateShiftConfig_Method() +} + +type DateShiftConfig_CryptoKey struct { + CryptoKey *CryptoKey `protobuf:"bytes,4,opt,name=crypto_key,json=cryptoKey,oneof"` +} + +func (*DateShiftConfig_CryptoKey) isDateShiftConfig_Method() {} + +func (m *DateShiftConfig) GetMethod() isDateShiftConfig_Method { + if m != nil { + return m.Method + } + return nil +} + +func (m *DateShiftConfig) GetUpperBoundDays() int32 { + if m != nil { + return m.UpperBoundDays + } + return 0 +} + +func (m *DateShiftConfig) GetLowerBoundDays() int32 { + if m != nil { + return m.LowerBoundDays + } + return 0 +} + +func (m *DateShiftConfig) GetContext() *FieldId { + if m != nil { + return m.Context + } + return nil +} + +func (m *DateShiftConfig) GetCryptoKey() *CryptoKey { + if x, ok := m.GetMethod().(*DateShiftConfig_CryptoKey); ok { + return x.CryptoKey + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*DateShiftConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _DateShiftConfig_OneofMarshaler, _DateShiftConfig_OneofUnmarshaler, _DateShiftConfig_OneofSizer, []interface{}{ + (*DateShiftConfig_CryptoKey)(nil), + } +} + +func _DateShiftConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*DateShiftConfig) + // method + switch x := m.Method.(type) { + case *DateShiftConfig_CryptoKey: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.CryptoKey); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("DateShiftConfig.Method has unexpected type %T", x) + } + return nil +} + +func _DateShiftConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*DateShiftConfig) + switch tag { + case 4: // method.crypto_key + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CryptoKey) + err := b.DecodeMessage(msg) + m.Method = &DateShiftConfig_CryptoKey{msg} + return true, err + default: + return false, nil + } +} + +func _DateShiftConfig_OneofSizer(msg proto.Message) (n int) { + m := msg.(*DateShiftConfig) + // method + switch x := m.Method.(type) { + case *DateShiftConfig_CryptoKey: + s := proto.Size(x.CryptoKey) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A type of transformation that will scan unstructured text and +// apply various `PrimitiveTransformation`s to each finding, where the +// transformation is applied to only values that were identified as a specific +// info_type. +type InfoTypeTransformations struct { + // Transformation for each infoType. Cannot specify more than one + // for a given infoType. [required] + Transformations []*InfoTypeTransformations_InfoTypeTransformation `protobuf:"bytes,1,rep,name=transformations" json:"transformations,omitempty"` +} + +func (m *InfoTypeTransformations) Reset() { *m = InfoTypeTransformations{} } +func (m *InfoTypeTransformations) String() string { return proto.CompactTextString(m) } +func (*InfoTypeTransformations) ProtoMessage() {} +func (*InfoTypeTransformations) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{50} } + +func (m *InfoTypeTransformations) GetTransformations() []*InfoTypeTransformations_InfoTypeTransformation { + if m != nil { + return m.Transformations + } + return nil +} + +// A transformation to apply to text that is identified as a specific +// info_type. +type InfoTypeTransformations_InfoTypeTransformation struct { + // InfoTypes to apply the transformation to. Empty list will match all + // available infoTypes for this transformation. + InfoTypes []*InfoType `protobuf:"bytes,1,rep,name=info_types,json=infoTypes" json:"info_types,omitempty"` + // Primitive transformation to apply to the infoType. [required] + PrimitiveTransformation *PrimitiveTransformation `protobuf:"bytes,2,opt,name=primitive_transformation,json=primitiveTransformation" json:"primitive_transformation,omitempty"` +} + +func (m *InfoTypeTransformations_InfoTypeTransformation) Reset() { + *m = InfoTypeTransformations_InfoTypeTransformation{} +} +func (m *InfoTypeTransformations_InfoTypeTransformation) String() string { + return proto.CompactTextString(m) +} +func (*InfoTypeTransformations_InfoTypeTransformation) ProtoMessage() {} +func (*InfoTypeTransformations_InfoTypeTransformation) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{50, 0} +} + +func (m *InfoTypeTransformations_InfoTypeTransformation) GetInfoTypes() []*InfoType { + if m != nil { + return m.InfoTypes + } + return nil +} + +func (m *InfoTypeTransformations_InfoTypeTransformation) GetPrimitiveTransformation() *PrimitiveTransformation { + if m != nil { + return m.PrimitiveTransformation + } + return nil +} + +// The transformation to apply to the field. +type FieldTransformation struct { + // Input field(s) to apply the transformation to. [required] + Fields []*FieldId `protobuf:"bytes,1,rep,name=fields" json:"fields,omitempty"` + // Only apply the transformation if the condition evaluates to true for the + // given `RecordCondition`. The conditions are allowed to reference fields + // that are not used in the actual transformation. [optional] + // + // Example Use Cases: + // + // - Apply a different bucket transformation to an age column if the zip code + // column for the same record is within a specific range. + // - Redact a field if the date of birth field is greater than 85. + Condition *RecordCondition `protobuf:"bytes,3,opt,name=condition" json:"condition,omitempty"` + // Transformation to apply. [required] + // + // Types that are valid to be assigned to Transformation: + // *FieldTransformation_PrimitiveTransformation + // *FieldTransformation_InfoTypeTransformations + Transformation isFieldTransformation_Transformation `protobuf_oneof:"transformation"` +} + +func (m *FieldTransformation) Reset() { *m = FieldTransformation{} } +func (m *FieldTransformation) String() string { return proto.CompactTextString(m) } +func (*FieldTransformation) ProtoMessage() {} +func (*FieldTransformation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{51} } + +type isFieldTransformation_Transformation interface { + isFieldTransformation_Transformation() +} + +type FieldTransformation_PrimitiveTransformation struct { + PrimitiveTransformation *PrimitiveTransformation `protobuf:"bytes,4,opt,name=primitive_transformation,json=primitiveTransformation,oneof"` +} +type FieldTransformation_InfoTypeTransformations struct { + InfoTypeTransformations *InfoTypeTransformations `protobuf:"bytes,5,opt,name=info_type_transformations,json=infoTypeTransformations,oneof"` +} + +func (*FieldTransformation_PrimitiveTransformation) isFieldTransformation_Transformation() {} +func (*FieldTransformation_InfoTypeTransformations) isFieldTransformation_Transformation() {} + +func (m *FieldTransformation) GetTransformation() isFieldTransformation_Transformation { + if m != nil { + return m.Transformation + } + return nil +} + +func (m *FieldTransformation) GetFields() []*FieldId { + if m != nil { + return m.Fields + } + return nil +} + +func (m *FieldTransformation) GetCondition() *RecordCondition { + if m != nil { + return m.Condition + } + return nil +} + +func (m *FieldTransformation) GetPrimitiveTransformation() *PrimitiveTransformation { + if x, ok := m.GetTransformation().(*FieldTransformation_PrimitiveTransformation); ok { + return x.PrimitiveTransformation + } + return nil +} + +func (m *FieldTransformation) GetInfoTypeTransformations() *InfoTypeTransformations { + if x, ok := m.GetTransformation().(*FieldTransformation_InfoTypeTransformations); ok { + return x.InfoTypeTransformations + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*FieldTransformation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _FieldTransformation_OneofMarshaler, _FieldTransformation_OneofUnmarshaler, _FieldTransformation_OneofSizer, []interface{}{ + (*FieldTransformation_PrimitiveTransformation)(nil), + (*FieldTransformation_InfoTypeTransformations)(nil), + } +} + +func _FieldTransformation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*FieldTransformation) + // transformation + switch x := m.Transformation.(type) { + case *FieldTransformation_PrimitiveTransformation: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.PrimitiveTransformation); err != nil { + return err + } + case *FieldTransformation_InfoTypeTransformations: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.InfoTypeTransformations); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("FieldTransformation.Transformation has unexpected type %T", x) + } + return nil +} + +func _FieldTransformation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*FieldTransformation) + switch tag { + case 4: // transformation.primitive_transformation + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PrimitiveTransformation) + err := b.DecodeMessage(msg) + m.Transformation = &FieldTransformation_PrimitiveTransformation{msg} + return true, err + case 5: // transformation.info_type_transformations + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(InfoTypeTransformations) + err := b.DecodeMessage(msg) + m.Transformation = &FieldTransformation_InfoTypeTransformations{msg} + return true, err + default: + return false, nil + } +} + +func _FieldTransformation_OneofSizer(msg proto.Message) (n int) { + m := msg.(*FieldTransformation) + // transformation + switch x := m.Transformation.(type) { + case *FieldTransformation_PrimitiveTransformation: + s := proto.Size(x.PrimitiveTransformation) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *FieldTransformation_InfoTypeTransformations: + s := proto.Size(x.InfoTypeTransformations) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// A type of transformation that is applied over structured data such as a +// table. +type RecordTransformations struct { + // Transform the record by applying various field transformations. + FieldTransformations []*FieldTransformation `protobuf:"bytes,1,rep,name=field_transformations,json=fieldTransformations" json:"field_transformations,omitempty"` + // Configuration defining which records get suppressed entirely. Records that + // match any suppression rule are omitted from the output [optional]. + RecordSuppressions []*RecordSuppression `protobuf:"bytes,2,rep,name=record_suppressions,json=recordSuppressions" json:"record_suppressions,omitempty"` +} + +func (m *RecordTransformations) Reset() { *m = RecordTransformations{} } +func (m *RecordTransformations) String() string { return proto.CompactTextString(m) } +func (*RecordTransformations) ProtoMessage() {} +func (*RecordTransformations) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{52} } + +func (m *RecordTransformations) GetFieldTransformations() []*FieldTransformation { + if m != nil { + return m.FieldTransformations + } + return nil +} + +func (m *RecordTransformations) GetRecordSuppressions() []*RecordSuppression { + if m != nil { + return m.RecordSuppressions + } + return nil +} + +// Configuration to suppress records whose suppression conditions evaluate to +// true. +type RecordSuppression struct { + // A condition that when it evaluates to true will result in the record being + // evaluated to be suppressed from the transformed content. + Condition *RecordCondition `protobuf:"bytes,1,opt,name=condition" json:"condition,omitempty"` +} + +func (m *RecordSuppression) Reset() { *m = RecordSuppression{} } +func (m *RecordSuppression) String() string { return proto.CompactTextString(m) } +func (*RecordSuppression) ProtoMessage() {} +func (*RecordSuppression) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{53} } + +func (m *RecordSuppression) GetCondition() *RecordCondition { + if m != nil { + return m.Condition + } + return nil +} + +// A condition for determining whether a transformation should be applied to +// a field. +type RecordCondition struct { + // An expression. + Expressions *RecordCondition_Expressions `protobuf:"bytes,3,opt,name=expressions" json:"expressions,omitempty"` +} + +func (m *RecordCondition) Reset() { *m = RecordCondition{} } +func (m *RecordCondition) String() string { return proto.CompactTextString(m) } +func (*RecordCondition) ProtoMessage() {} +func (*RecordCondition) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{54} } + +func (m *RecordCondition) GetExpressions() *RecordCondition_Expressions { + if m != nil { + return m.Expressions + } + return nil +} + +// The field type of `value` and `field` do not need to match to be +// considered equal, but not all comparisons are possible. +// +// A `value` of type: +// +// - `string` can be compared against all other types +// - `boolean` can only be compared against other booleans +// - `integer` can be compared against doubles or a string if the string value +// can be parsed as an integer. +// - `double` can be compared against integers or a string if the string can +// be parsed as a double. +// - `Timestamp` can be compared against strings in RFC 3339 date string +// format. +// - `TimeOfDay` can be compared against timestamps and strings in the format +// of 'HH:mm:ss'. +// +// If we fail to compare do to type mismatch, a warning will be given and +// the condition will evaluate to false. +type RecordCondition_Condition struct { + // Field within the record this condition is evaluated against. [required] + Field *FieldId `protobuf:"bytes,1,opt,name=field" json:"field,omitempty"` + // Operator used to compare the field or infoType to the value. [required] + Operator RelationalOperator `protobuf:"varint,3,opt,name=operator,enum=google.privacy.dlp.v2beta2.RelationalOperator" json:"operator,omitempty"` + // Value to compare against. [Required, except for `EXISTS` tests.] + Value *Value `protobuf:"bytes,4,opt,name=value" json:"value,omitempty"` +} + +func (m *RecordCondition_Condition) Reset() { *m = RecordCondition_Condition{} } +func (m *RecordCondition_Condition) String() string { return proto.CompactTextString(m) } +func (*RecordCondition_Condition) ProtoMessage() {} +func (*RecordCondition_Condition) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{54, 0} } + +func (m *RecordCondition_Condition) GetField() *FieldId { + if m != nil { + return m.Field + } + return nil +} + +func (m *RecordCondition_Condition) GetOperator() RelationalOperator { + if m != nil { + return m.Operator + } + return RelationalOperator_RELATIONAL_OPERATOR_UNSPECIFIED +} + +func (m *RecordCondition_Condition) GetValue() *Value { + if m != nil { + return m.Value + } + return nil +} + +// A collection of conditions. +type RecordCondition_Conditions struct { + Conditions []*RecordCondition_Condition `protobuf:"bytes,1,rep,name=conditions" json:"conditions,omitempty"` +} + +func (m *RecordCondition_Conditions) Reset() { *m = RecordCondition_Conditions{} } +func (m *RecordCondition_Conditions) String() string { return proto.CompactTextString(m) } +func (*RecordCondition_Conditions) ProtoMessage() {} +func (*RecordCondition_Conditions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{54, 1} } + +func (m *RecordCondition_Conditions) GetConditions() []*RecordCondition_Condition { + if m != nil { + return m.Conditions + } + return nil +} + +// An expression, consisting or an operator and conditions. +type RecordCondition_Expressions struct { + // The operator to apply to the result of conditions. Default and currently + // only supported value is `AND`. + LogicalOperator RecordCondition_Expressions_LogicalOperator `protobuf:"varint,1,opt,name=logical_operator,json=logicalOperator,enum=google.privacy.dlp.v2beta2.RecordCondition_Expressions_LogicalOperator" json:"logical_operator,omitempty"` + // Types that are valid to be assigned to Type: + // *RecordCondition_Expressions_Conditions + Type isRecordCondition_Expressions_Type `protobuf_oneof:"type"` +} + +func (m *RecordCondition_Expressions) Reset() { *m = RecordCondition_Expressions{} } +func (m *RecordCondition_Expressions) String() string { return proto.CompactTextString(m) } +func (*RecordCondition_Expressions) ProtoMessage() {} +func (*RecordCondition_Expressions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{54, 2} } + +type isRecordCondition_Expressions_Type interface { + isRecordCondition_Expressions_Type() +} + +type RecordCondition_Expressions_Conditions struct { + Conditions *RecordCondition_Conditions `protobuf:"bytes,3,opt,name=conditions,oneof"` +} + +func (*RecordCondition_Expressions_Conditions) isRecordCondition_Expressions_Type() {} + +func (m *RecordCondition_Expressions) GetType() isRecordCondition_Expressions_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *RecordCondition_Expressions) GetLogicalOperator() RecordCondition_Expressions_LogicalOperator { + if m != nil { + return m.LogicalOperator + } + return RecordCondition_Expressions_LOGICAL_OPERATOR_UNSPECIFIED +} + +func (m *RecordCondition_Expressions) GetConditions() *RecordCondition_Conditions { + if x, ok := m.GetType().(*RecordCondition_Expressions_Conditions); ok { + return x.Conditions + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*RecordCondition_Expressions) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _RecordCondition_Expressions_OneofMarshaler, _RecordCondition_Expressions_OneofUnmarshaler, _RecordCondition_Expressions_OneofSizer, []interface{}{ + (*RecordCondition_Expressions_Conditions)(nil), + } +} + +func _RecordCondition_Expressions_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*RecordCondition_Expressions) + // type + switch x := m.Type.(type) { + case *RecordCondition_Expressions_Conditions: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Conditions); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("RecordCondition_Expressions.Type has unexpected type %T", x) + } + return nil +} + +func _RecordCondition_Expressions_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*RecordCondition_Expressions) + switch tag { + case 3: // type.conditions + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(RecordCondition_Conditions) + err := b.DecodeMessage(msg) + m.Type = &RecordCondition_Expressions_Conditions{msg} + return true, err + default: + return false, nil + } +} + +func _RecordCondition_Expressions_OneofSizer(msg proto.Message) (n int) { + m := msg.(*RecordCondition_Expressions) + // type + switch x := m.Type.(type) { + case *RecordCondition_Expressions_Conditions: + s := proto.Size(x.Conditions) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Overview of the modifications that occurred. +type TransformationOverview struct { + // Total size in bytes that were transformed in some way. + TransformedBytes int64 `protobuf:"varint,2,opt,name=transformed_bytes,json=transformedBytes" json:"transformed_bytes,omitempty"` + // Transformations applied to the dataset. + TransformationSummaries []*TransformationSummary `protobuf:"bytes,3,rep,name=transformation_summaries,json=transformationSummaries" json:"transformation_summaries,omitempty"` +} + +func (m *TransformationOverview) Reset() { *m = TransformationOverview{} } +func (m *TransformationOverview) String() string { return proto.CompactTextString(m) } +func (*TransformationOverview) ProtoMessage() {} +func (*TransformationOverview) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{55} } + +func (m *TransformationOverview) GetTransformedBytes() int64 { + if m != nil { + return m.TransformedBytes + } + return 0 +} + +func (m *TransformationOverview) GetTransformationSummaries() []*TransformationSummary { + if m != nil { + return m.TransformationSummaries + } + return nil +} + +// Summary of a single tranformation. +// Only one of 'transformation', 'field_transformation', or 'record_suppress' +// will be set. +type TransformationSummary struct { + // Set if the transformation was limited to a specific info_type. + InfoType *InfoType `protobuf:"bytes,1,opt,name=info_type,json=infoType" json:"info_type,omitempty"` + // Set if the transformation was limited to a specific FieldId. + Field *FieldId `protobuf:"bytes,2,opt,name=field" json:"field,omitempty"` + // The specific transformation these stats apply to. + Transformation *PrimitiveTransformation `protobuf:"bytes,3,opt,name=transformation" json:"transformation,omitempty"` + // The field transformation that was applied. + // If multiple field transformations are requested for a single field, + // this list will contain all of them; otherwise, only one is supplied. + FieldTransformations []*FieldTransformation `protobuf:"bytes,5,rep,name=field_transformations,json=fieldTransformations" json:"field_transformations,omitempty"` + // The specific suppression option these stats apply to. + RecordSuppress *RecordSuppression `protobuf:"bytes,6,opt,name=record_suppress,json=recordSuppress" json:"record_suppress,omitempty"` + Results []*TransformationSummary_SummaryResult `protobuf:"bytes,4,rep,name=results" json:"results,omitempty"` + // Total size in bytes that were transformed in some way. + TransformedBytes int64 `protobuf:"varint,7,opt,name=transformed_bytes,json=transformedBytes" json:"transformed_bytes,omitempty"` +} + +func (m *TransformationSummary) Reset() { *m = TransformationSummary{} } +func (m *TransformationSummary) String() string { return proto.CompactTextString(m) } +func (*TransformationSummary) ProtoMessage() {} +func (*TransformationSummary) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{56} } + +func (m *TransformationSummary) GetInfoType() *InfoType { + if m != nil { + return m.InfoType + } + return nil +} + +func (m *TransformationSummary) GetField() *FieldId { + if m != nil { + return m.Field + } + return nil +} + +func (m *TransformationSummary) GetTransformation() *PrimitiveTransformation { + if m != nil { + return m.Transformation + } + return nil +} + +func (m *TransformationSummary) GetFieldTransformations() []*FieldTransformation { + if m != nil { + return m.FieldTransformations + } + return nil +} + +func (m *TransformationSummary) GetRecordSuppress() *RecordSuppression { + if m != nil { + return m.RecordSuppress + } + return nil +} + +func (m *TransformationSummary) GetResults() []*TransformationSummary_SummaryResult { + if m != nil { + return m.Results + } + return nil +} + +func (m *TransformationSummary) GetTransformedBytes() int64 { + if m != nil { + return m.TransformedBytes + } + return 0 +} + +// A collection that informs the user the number of times a particular +// `TransformationResultCode` and error details occurred. +type TransformationSummary_SummaryResult struct { + Count int64 `protobuf:"varint,1,opt,name=count" json:"count,omitempty"` + Code TransformationSummary_TransformationResultCode `protobuf:"varint,2,opt,name=code,enum=google.privacy.dlp.v2beta2.TransformationSummary_TransformationResultCode" json:"code,omitempty"` + // A place for warnings or errors to show up if a transformation didn't + // work as expected. + Details string `protobuf:"bytes,3,opt,name=details" json:"details,omitempty"` +} + +func (m *TransformationSummary_SummaryResult) Reset() { *m = TransformationSummary_SummaryResult{} } +func (m *TransformationSummary_SummaryResult) String() string { return proto.CompactTextString(m) } +func (*TransformationSummary_SummaryResult) ProtoMessage() {} +func (*TransformationSummary_SummaryResult) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{56, 0} +} + +func (m *TransformationSummary_SummaryResult) GetCount() int64 { + if m != nil { + return m.Count + } + return 0 +} + +func (m *TransformationSummary_SummaryResult) GetCode() TransformationSummary_TransformationResultCode { + if m != nil { + return m.Code + } + return TransformationSummary_TRANSFORMATION_RESULT_CODE_UNSPECIFIED +} + +func (m *TransformationSummary_SummaryResult) GetDetails() string { + if m != nil { + return m.Details + } + return "" +} + +// Schedule for triggeredJobs. +type Schedule struct { + // Types that are valid to be assigned to Option: + // *Schedule_ReccurrencePeriodDuration + Option isSchedule_Option `protobuf_oneof:"option"` +} + +func (m *Schedule) Reset() { *m = Schedule{} } +func (m *Schedule) String() string { return proto.CompactTextString(m) } +func (*Schedule) ProtoMessage() {} +func (*Schedule) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{57} } + +type isSchedule_Option interface { + isSchedule_Option() +} + +type Schedule_ReccurrencePeriodDuration struct { + ReccurrencePeriodDuration *google_protobuf2.Duration `protobuf:"bytes,1,opt,name=reccurrence_period_duration,json=reccurrencePeriodDuration,oneof"` +} + +func (*Schedule_ReccurrencePeriodDuration) isSchedule_Option() {} + +func (m *Schedule) GetOption() isSchedule_Option { + if m != nil { + return m.Option + } + return nil +} + +func (m *Schedule) GetReccurrencePeriodDuration() *google_protobuf2.Duration { + if x, ok := m.GetOption().(*Schedule_ReccurrencePeriodDuration); ok { + return x.ReccurrencePeriodDuration + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Schedule) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Schedule_OneofMarshaler, _Schedule_OneofUnmarshaler, _Schedule_OneofSizer, []interface{}{ + (*Schedule_ReccurrencePeriodDuration)(nil), + } +} + +func _Schedule_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Schedule) + // option + switch x := m.Option.(type) { + case *Schedule_ReccurrencePeriodDuration: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ReccurrencePeriodDuration); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Schedule.Option has unexpected type %T", x) + } + return nil +} + +func _Schedule_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Schedule) + switch tag { + case 1: // option.reccurrence_period_duration + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(google_protobuf2.Duration) + err := b.DecodeMessage(msg) + m.Option = &Schedule_ReccurrencePeriodDuration{msg} + return true, err + default: + return false, nil + } +} + +func _Schedule_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Schedule) + // option + switch x := m.Option.(type) { + case *Schedule_ReccurrencePeriodDuration: + s := proto.Size(x.ReccurrencePeriodDuration) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The inspectTemplate contains a configuration (set of types of sensitive data +// to be detected) to be used anywhere you otherwise would normally specify +// InspectConfig. +type InspectTemplate struct { + // The template name. Output only. + // + // The template will have one of the following formats: + // `projects/PROJECT_ID/inspectTemplates/TEMPLATE_ID` OR + // `organizations/ORGANIZATION_ID/inspectTemplates/TEMPLATE_ID` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Display name (max 256 chars). + DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // Short description (max 256 chars). + Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` + // The creation timestamp of a inspectTemplate, output only field. + CreateTime *google_protobuf1.Timestamp `protobuf:"bytes,4,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // The last update timestamp of a inspectTemplate, output only field. + UpdateTime *google_protobuf1.Timestamp `protobuf:"bytes,5,opt,name=update_time,json=updateTime" json:"update_time,omitempty"` + // The core content of the template. Configuration of the scanning process. + InspectConfig *InspectConfig `protobuf:"bytes,6,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"` +} + +func (m *InspectTemplate) Reset() { *m = InspectTemplate{} } +func (m *InspectTemplate) String() string { return proto.CompactTextString(m) } +func (*InspectTemplate) ProtoMessage() {} +func (*InspectTemplate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{58} } + +func (m *InspectTemplate) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *InspectTemplate) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func (m *InspectTemplate) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *InspectTemplate) GetCreateTime() *google_protobuf1.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *InspectTemplate) GetUpdateTime() *google_protobuf1.Timestamp { + if m != nil { + return m.UpdateTime + } + return nil +} + +func (m *InspectTemplate) GetInspectConfig() *InspectConfig { + if m != nil { + return m.InspectConfig + } + return nil +} + +// The DeidentifyTemplates contains instructions on how to deidentify content. +type DeidentifyTemplate struct { + // The template name. Output only. + // + // The template will have one of the following formats: + // `projects/PROJECT_ID/deidentifyTemplates/TEMPLATE_ID` OR + // `organizations/ORGANIZATION_ID/deidentifyTemplates/TEMPLATE_ID` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Display name (max 256 chars). + DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // Short description (max 256 chars). + Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` + // The creation timestamp of a inspectTemplate, output only field. + CreateTime *google_protobuf1.Timestamp `protobuf:"bytes,4,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // The last update timestamp of a inspectTemplate, output only field. + UpdateTime *google_protobuf1.Timestamp `protobuf:"bytes,5,opt,name=update_time,json=updateTime" json:"update_time,omitempty"` + // ///////////// // The core content of the template // /////////////// + DeidentifyConfig *DeidentifyConfig `protobuf:"bytes,6,opt,name=deidentify_config,json=deidentifyConfig" json:"deidentify_config,omitempty"` +} + +func (m *DeidentifyTemplate) Reset() { *m = DeidentifyTemplate{} } +func (m *DeidentifyTemplate) String() string { return proto.CompactTextString(m) } +func (*DeidentifyTemplate) ProtoMessage() {} +func (*DeidentifyTemplate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{59} } + +func (m *DeidentifyTemplate) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *DeidentifyTemplate) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func (m *DeidentifyTemplate) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *DeidentifyTemplate) GetCreateTime() *google_protobuf1.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *DeidentifyTemplate) GetUpdateTime() *google_protobuf1.Timestamp { + if m != nil { + return m.UpdateTime + } + return nil +} + +func (m *DeidentifyTemplate) GetDeidentifyConfig() *DeidentifyConfig { + if m != nil { + return m.DeidentifyConfig + } + return nil +} + +// Contains a configuration to make dlp api calls on a repeating basis. +type JobTrigger struct { + // Unique resource name for the triggeredJob, assigned by the service when the + // triggeredJob is created, for example + // `projects/dlp-test-project/triggeredJobs/53234423`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Display name (max 100 chars) + DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName" json:"display_name,omitempty"` + // User provided description (max 256 chars) + Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` + // The configuration details for the specific type of job to run. + // + // Types that are valid to be assigned to Job: + // *JobTrigger_InspectJob + Job isJobTrigger_Job `protobuf_oneof:"job"` + // A list of triggers which will be OR'ed together. Only one in the list + // needs to trigger for a job to be started. The list may contain only + // a single Schedule trigger and must have at least one object. + Triggers []*JobTrigger_Trigger `protobuf:"bytes,5,rep,name=triggers" json:"triggers,omitempty"` + // A stream of errors encountered when the trigger was activated. Repeated + // errors may result in the JobTrigger automaticaly being paused. + // Will return the last 100 errors. Whenever the JobTrigger is modified + // this list will be cleared. Output only field. + Errors []*JobTrigger_Error `protobuf:"bytes,6,rep,name=errors" json:"errors,omitempty"` + // The creation timestamp of a triggeredJob, output only field. + CreateTime *google_protobuf1.Timestamp `protobuf:"bytes,7,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // The last update timestamp of a triggeredJob, output only field. + UpdateTime *google_protobuf1.Timestamp `protobuf:"bytes,8,opt,name=update_time,json=updateTime" json:"update_time,omitempty"` + // The timestamp of the last time this trigger executed. + LastRunTime *google_protobuf1.Timestamp `protobuf:"bytes,9,opt,name=last_run_time,json=lastRunTime" json:"last_run_time,omitempty"` + // A status for this trigger. [required] + Status JobTrigger_Status `protobuf:"varint,10,opt,name=status,enum=google.privacy.dlp.v2beta2.JobTrigger_Status" json:"status,omitempty"` +} + +func (m *JobTrigger) Reset() { *m = JobTrigger{} } +func (m *JobTrigger) String() string { return proto.CompactTextString(m) } +func (*JobTrigger) ProtoMessage() {} +func (*JobTrigger) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{60} } + +type isJobTrigger_Job interface { + isJobTrigger_Job() +} + +type JobTrigger_InspectJob struct { + InspectJob *InspectJobConfig `protobuf:"bytes,4,opt,name=inspect_job,json=inspectJob,oneof"` +} + +func (*JobTrigger_InspectJob) isJobTrigger_Job() {} + +func (m *JobTrigger) GetJob() isJobTrigger_Job { + if m != nil { + return m.Job + } + return nil +} + +func (m *JobTrigger) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *JobTrigger) GetDisplayName() string { + if m != nil { + return m.DisplayName + } + return "" +} + +func (m *JobTrigger) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *JobTrigger) GetInspectJob() *InspectJobConfig { + if x, ok := m.GetJob().(*JobTrigger_InspectJob); ok { + return x.InspectJob + } + return nil +} + +func (m *JobTrigger) GetTriggers() []*JobTrigger_Trigger { + if m != nil { + return m.Triggers + } + return nil +} + +func (m *JobTrigger) GetErrors() []*JobTrigger_Error { + if m != nil { + return m.Errors + } + return nil +} + +func (m *JobTrigger) GetCreateTime() *google_protobuf1.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *JobTrigger) GetUpdateTime() *google_protobuf1.Timestamp { + if m != nil { + return m.UpdateTime + } + return nil +} + +func (m *JobTrigger) GetLastRunTime() *google_protobuf1.Timestamp { + if m != nil { + return m.LastRunTime + } + return nil +} + +func (m *JobTrigger) GetStatus() JobTrigger_Status { + if m != nil { + return m.Status + } + return JobTrigger_STATUS_UNSPECIFIED +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*JobTrigger) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _JobTrigger_OneofMarshaler, _JobTrigger_OneofUnmarshaler, _JobTrigger_OneofSizer, []interface{}{ + (*JobTrigger_InspectJob)(nil), + } +} + +func _JobTrigger_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*JobTrigger) + // job + switch x := m.Job.(type) { + case *JobTrigger_InspectJob: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.InspectJob); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("JobTrigger.Job has unexpected type %T", x) + } + return nil +} + +func _JobTrigger_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*JobTrigger) + switch tag { + case 4: // job.inspect_job + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(InspectJobConfig) + err := b.DecodeMessage(msg) + m.Job = &JobTrigger_InspectJob{msg} + return true, err + default: + return false, nil + } +} + +func _JobTrigger_OneofSizer(msg proto.Message) (n int) { + m := msg.(*JobTrigger) + // job + switch x := m.Job.(type) { + case *JobTrigger_InspectJob: + s := proto.Size(x.InspectJob) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// What event needs to occur for a new job to be started. +type JobTrigger_Trigger struct { + // Types that are valid to be assigned to Trigger: + // *JobTrigger_Trigger_Schedule + Trigger isJobTrigger_Trigger_Trigger `protobuf_oneof:"trigger"` +} + +func (m *JobTrigger_Trigger) Reset() { *m = JobTrigger_Trigger{} } +func (m *JobTrigger_Trigger) String() string { return proto.CompactTextString(m) } +func (*JobTrigger_Trigger) ProtoMessage() {} +func (*JobTrigger_Trigger) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{60, 0} } + +type isJobTrigger_Trigger_Trigger interface { + isJobTrigger_Trigger_Trigger() +} + +type JobTrigger_Trigger_Schedule struct { + Schedule *Schedule `protobuf:"bytes,1,opt,name=schedule,oneof"` +} + +func (*JobTrigger_Trigger_Schedule) isJobTrigger_Trigger_Trigger() {} + +func (m *JobTrigger_Trigger) GetTrigger() isJobTrigger_Trigger_Trigger { + if m != nil { + return m.Trigger + } + return nil +} + +func (m *JobTrigger_Trigger) GetSchedule() *Schedule { + if x, ok := m.GetTrigger().(*JobTrigger_Trigger_Schedule); ok { + return x.Schedule + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*JobTrigger_Trigger) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _JobTrigger_Trigger_OneofMarshaler, _JobTrigger_Trigger_OneofUnmarshaler, _JobTrigger_Trigger_OneofSizer, []interface{}{ + (*JobTrigger_Trigger_Schedule)(nil), + } +} + +func _JobTrigger_Trigger_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*JobTrigger_Trigger) + // trigger + switch x := m.Trigger.(type) { + case *JobTrigger_Trigger_Schedule: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Schedule); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("JobTrigger_Trigger.Trigger has unexpected type %T", x) + } + return nil +} + +func _JobTrigger_Trigger_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*JobTrigger_Trigger) + switch tag { + case 1: // trigger.schedule + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Schedule) + err := b.DecodeMessage(msg) + m.Trigger = &JobTrigger_Trigger_Schedule{msg} + return true, err + default: + return false, nil + } +} + +func _JobTrigger_Trigger_OneofSizer(msg proto.Message) (n int) { + m := msg.(*JobTrigger_Trigger) + // trigger + switch x := m.Trigger.(type) { + case *JobTrigger_Trigger_Schedule: + s := proto.Size(x.Schedule) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The results of an unsuccessful activation of the JobTrigger. +type JobTrigger_Error struct { + Details *google_rpc.Status `protobuf:"bytes,1,opt,name=details" json:"details,omitempty"` + // The times the error occurred. + Timestamps []*google_protobuf1.Timestamp `protobuf:"bytes,2,rep,name=timestamps" json:"timestamps,omitempty"` +} + +func (m *JobTrigger_Error) Reset() { *m = JobTrigger_Error{} } +func (m *JobTrigger_Error) String() string { return proto.CompactTextString(m) } +func (*JobTrigger_Error) ProtoMessage() {} +func (*JobTrigger_Error) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{60, 1} } + +func (m *JobTrigger_Error) GetDetails() *google_rpc.Status { + if m != nil { + return m.Details + } + return nil +} + +func (m *JobTrigger_Error) GetTimestamps() []*google_protobuf1.Timestamp { + if m != nil { + return m.Timestamps + } + return nil +} + +// A task to execute on the completion of a job. +type Action struct { + // Types that are valid to be assigned to Action: + // *Action_SaveFindings_ + // *Action_PubSub + Action isAction_Action `protobuf_oneof:"action"` +} + +func (m *Action) Reset() { *m = Action{} } +func (m *Action) String() string { return proto.CompactTextString(m) } +func (*Action) ProtoMessage() {} +func (*Action) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{61} } + +type isAction_Action interface { + isAction_Action() +} + +type Action_SaveFindings_ struct { + SaveFindings *Action_SaveFindings `protobuf:"bytes,1,opt,name=save_findings,json=saveFindings,oneof"` +} +type Action_PubSub struct { + PubSub *Action_PublishToPubSub `protobuf:"bytes,2,opt,name=pub_sub,json=pubSub,oneof"` +} + +func (*Action_SaveFindings_) isAction_Action() {} +func (*Action_PubSub) isAction_Action() {} + +func (m *Action) GetAction() isAction_Action { + if m != nil { + return m.Action + } + return nil +} + +func (m *Action) GetSaveFindings() *Action_SaveFindings { + if x, ok := m.GetAction().(*Action_SaveFindings_); ok { + return x.SaveFindings + } + return nil +} + +func (m *Action) GetPubSub() *Action_PublishToPubSub { + if x, ok := m.GetAction().(*Action_PubSub); ok { + return x.PubSub + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Action) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Action_OneofMarshaler, _Action_OneofUnmarshaler, _Action_OneofSizer, []interface{}{ + (*Action_SaveFindings_)(nil), + (*Action_PubSub)(nil), + } +} + +func _Action_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Action) + // action + switch x := m.Action.(type) { + case *Action_SaveFindings_: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.SaveFindings); err != nil { + return err + } + case *Action_PubSub: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.PubSub); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Action.Action has unexpected type %T", x) + } + return nil +} + +func _Action_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Action) + switch tag { + case 1: // action.save_findings + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Action_SaveFindings) + err := b.DecodeMessage(msg) + m.Action = &Action_SaveFindings_{msg} + return true, err + case 2: // action.pub_sub + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Action_PublishToPubSub) + err := b.DecodeMessage(msg) + m.Action = &Action_PubSub{msg} + return true, err + default: + return false, nil + } +} + +func _Action_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Action) + // action + switch x := m.Action.(type) { + case *Action_SaveFindings_: + s := proto.Size(x.SaveFindings) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Action_PubSub: + s := proto.Size(x.PubSub) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// If set, the detailed findings will be persisted to the specified +// OutputStorageConfig. Compatible with: Inspect +type Action_SaveFindings struct { + OutputConfig *OutputStorageConfig `protobuf:"bytes,1,opt,name=output_config,json=outputConfig" json:"output_config,omitempty"` +} + +func (m *Action_SaveFindings) Reset() { *m = Action_SaveFindings{} } +func (m *Action_SaveFindings) String() string { return proto.CompactTextString(m) } +func (*Action_SaveFindings) ProtoMessage() {} +func (*Action_SaveFindings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{61, 0} } + +func (m *Action_SaveFindings) GetOutputConfig() *OutputStorageConfig { + if m != nil { + return m.OutputConfig + } + return nil +} + +// Publish the results of a DlpJob to a pub sub channel. +// Compatible with: Inpect, Risk +type Action_PublishToPubSub struct { + // Cloud Pub/Sub topic to send notifications to. The topic must have given + // publishing access rights to the DLP API service account executing + // the long running DlpJob sending the notifications. + // Format is projects/{project}/topics/{topic}. + Topic string `protobuf:"bytes,1,opt,name=topic" json:"topic,omitempty"` +} + +func (m *Action_PublishToPubSub) Reset() { *m = Action_PublishToPubSub{} } +func (m *Action_PublishToPubSub) String() string { return proto.CompactTextString(m) } +func (*Action_PublishToPubSub) ProtoMessage() {} +func (*Action_PublishToPubSub) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{61, 1} } + +func (m *Action_PublishToPubSub) GetTopic() string { + if m != nil { + return m.Topic + } + return "" +} + +// Request message for CreateInspectTemplate. +type CreateInspectTemplateRequest struct { + // The parent resource name, for example projects/my-project-id or + // organizations/my-org-id. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The InspectTemplate to create. + InspectTemplate *InspectTemplate `protobuf:"bytes,2,opt,name=inspect_template,json=inspectTemplate" json:"inspect_template,omitempty"` + // The template id can contain uppercase and lowercase letters, + // numbers, and hyphens; that is, it must match the regular + // expression: `[a-zA-Z\\d-]+`. The maximum length is 100 + // characters. Can be empty to allow the system to generate one. + TemplateId string `protobuf:"bytes,3,opt,name=template_id,json=templateId" json:"template_id,omitempty"` +} + +func (m *CreateInspectTemplateRequest) Reset() { *m = CreateInspectTemplateRequest{} } +func (m *CreateInspectTemplateRequest) String() string { return proto.CompactTextString(m) } +func (*CreateInspectTemplateRequest) ProtoMessage() {} +func (*CreateInspectTemplateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{62} } + +func (m *CreateInspectTemplateRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateInspectTemplateRequest) GetInspectTemplate() *InspectTemplate { + if m != nil { + return m.InspectTemplate + } + return nil +} + +func (m *CreateInspectTemplateRequest) GetTemplateId() string { + if m != nil { + return m.TemplateId + } + return "" +} + +// Request message for UpdateInspectTemplate. +type UpdateInspectTemplateRequest struct { + // Resource name of organization and inspectTemplate to be updated, for + // example `organizations/433245324/inspectTemplates/432452342` or + // projects/project-id/inspectTemplates/432452342. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // New InspectTemplate value. + InspectTemplate *InspectTemplate `protobuf:"bytes,2,opt,name=inspect_template,json=inspectTemplate" json:"inspect_template,omitempty"` + // Mask to control which fields get updated. + UpdateMask *google_protobuf4.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateInspectTemplateRequest) Reset() { *m = UpdateInspectTemplateRequest{} } +func (m *UpdateInspectTemplateRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateInspectTemplateRequest) ProtoMessage() {} +func (*UpdateInspectTemplateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{63} } + +func (m *UpdateInspectTemplateRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *UpdateInspectTemplateRequest) GetInspectTemplate() *InspectTemplate { + if m != nil { + return m.InspectTemplate + } + return nil +} + +func (m *UpdateInspectTemplateRequest) GetUpdateMask() *google_protobuf4.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +// Request message for GetInspectTemplate. +type GetInspectTemplateRequest struct { + // Resource name of the organization and inspectTemplate to be read, for + // example `organizations/433245324/inspectTemplates/432452342` or + // projects/project-id/inspectTemplates/432452342. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetInspectTemplateRequest) Reset() { *m = GetInspectTemplateRequest{} } +func (m *GetInspectTemplateRequest) String() string { return proto.CompactTextString(m) } +func (*GetInspectTemplateRequest) ProtoMessage() {} +func (*GetInspectTemplateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{64} } + +func (m *GetInspectTemplateRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for ListInspectTemplates. +type ListInspectTemplatesRequest struct { + // The parent resource name, for example projects/my-project-id or + // organizations/my-org-id. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Optional page token to continue retrieval. Comes from previous call + // to `ListInspectTemplates`. + PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // Optional size of the page, can be limited by server. If zero server returns + // a page of max size 100. + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` +} + +func (m *ListInspectTemplatesRequest) Reset() { *m = ListInspectTemplatesRequest{} } +func (m *ListInspectTemplatesRequest) String() string { return proto.CompactTextString(m) } +func (*ListInspectTemplatesRequest) ProtoMessage() {} +func (*ListInspectTemplatesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{65} } + +func (m *ListInspectTemplatesRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListInspectTemplatesRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListInspectTemplatesRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +// Response message for ListInspectTemplates. +type ListInspectTemplatesResponse struct { + // List of inspectTemplates, up to page_size in ListInspectTemplatesRequest. + InspectTemplates []*InspectTemplate `protobuf:"bytes,1,rep,name=inspect_templates,json=inspectTemplates" json:"inspect_templates,omitempty"` + // If the next page is available then the next page token to be used + // in following ListInspectTemplates request. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListInspectTemplatesResponse) Reset() { *m = ListInspectTemplatesResponse{} } +func (m *ListInspectTemplatesResponse) String() string { return proto.CompactTextString(m) } +func (*ListInspectTemplatesResponse) ProtoMessage() {} +func (*ListInspectTemplatesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{66} } + +func (m *ListInspectTemplatesResponse) GetInspectTemplates() []*InspectTemplate { + if m != nil { + return m.InspectTemplates + } + return nil +} + +func (m *ListInspectTemplatesResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request message for DeleteInspectTemplate. +type DeleteInspectTemplateRequest struct { + // Resource name of the organization and inspectTemplate to be deleted, for + // example `organizations/433245324/inspectTemplates/432452342` or + // projects/project-id/inspectTemplates/432452342. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteInspectTemplateRequest) Reset() { *m = DeleteInspectTemplateRequest{} } +func (m *DeleteInspectTemplateRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteInspectTemplateRequest) ProtoMessage() {} +func (*DeleteInspectTemplateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{67} } + +func (m *DeleteInspectTemplateRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for CreateJobTrigger. +type CreateJobTriggerRequest struct { + // The parent resource name, for example projects/my-project-id. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The JobTrigger to create. + JobTrigger *JobTrigger `protobuf:"bytes,2,opt,name=job_trigger,json=jobTrigger" json:"job_trigger,omitempty"` + // The trigger id can contain uppercase and lowercase letters, + // numbers, and hyphens; that is, it must match the regular + // expression: `[a-zA-Z\\d-]+`. The maximum length is 100 + // characters. Can be empty to allow the system to generate one. + TriggerId string `protobuf:"bytes,3,opt,name=trigger_id,json=triggerId" json:"trigger_id,omitempty"` +} + +func (m *CreateJobTriggerRequest) Reset() { *m = CreateJobTriggerRequest{} } +func (m *CreateJobTriggerRequest) String() string { return proto.CompactTextString(m) } +func (*CreateJobTriggerRequest) ProtoMessage() {} +func (*CreateJobTriggerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{68} } + +func (m *CreateJobTriggerRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateJobTriggerRequest) GetJobTrigger() *JobTrigger { + if m != nil { + return m.JobTrigger + } + return nil +} + +func (m *CreateJobTriggerRequest) GetTriggerId() string { + if m != nil { + return m.TriggerId + } + return "" +} + +// Request message for UpdateJobTrigger. +type UpdateJobTriggerRequest struct { + // Resource name of the project and the triggeredJob, for example + // `projects/dlp-test-project/jobTriggers/53234423`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // New JobTrigger value. + JobTrigger *JobTrigger `protobuf:"bytes,2,opt,name=job_trigger,json=jobTrigger" json:"job_trigger,omitempty"` + // Mask to control which fields get updated. + UpdateMask *google_protobuf4.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateJobTriggerRequest) Reset() { *m = UpdateJobTriggerRequest{} } +func (m *UpdateJobTriggerRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateJobTriggerRequest) ProtoMessage() {} +func (*UpdateJobTriggerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{69} } + +func (m *UpdateJobTriggerRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *UpdateJobTriggerRequest) GetJobTrigger() *JobTrigger { + if m != nil { + return m.JobTrigger + } + return nil +} + +func (m *UpdateJobTriggerRequest) GetUpdateMask() *google_protobuf4.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +// Request message for GetJobTrigger. +type GetJobTriggerRequest struct { + // Resource name of the project and the triggeredJob, for example + // `projects/dlp-test-project/jobTriggers/53234423`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetJobTriggerRequest) Reset() { *m = GetJobTriggerRequest{} } +func (m *GetJobTriggerRequest) String() string { return proto.CompactTextString(m) } +func (*GetJobTriggerRequest) ProtoMessage() {} +func (*GetJobTriggerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{70} } + +func (m *GetJobTriggerRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for ListJobTriggers. +type ListJobTriggersRequest struct { + // The parent resource name, for example projects/my-project-id. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Optional page token to continue retrieval. Comes from previous call + // to ListJobTriggers. `order_by` and `filter` should not change for + // subsequent calls, but can be omitted if token is specified. + PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // Optional size of the page, can be limited by a server. + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // Optional comma separated list of triggeredJob fields to order by, + // followed by 'asc/desc' postfix, i.e. + // `"create_time asc,name desc,schedule_mode asc"`. This list is + // case-insensitive. + // + // Example: `"name asc,schedule_mode desc, status desc"` + // + // Supported filters keys and values are: + // + // - `create_time`: corresponds to time the triggeredJob was created. + // - `update_time`: corresponds to time the triggeredJob was last updated. + // - `name`: corresponds to JobTrigger's display name. + // - `status`: corresponds to the triggeredJob status. + OrderBy string `protobuf:"bytes,4,opt,name=order_by,json=orderBy" json:"order_by,omitempty"` +} + +func (m *ListJobTriggersRequest) Reset() { *m = ListJobTriggersRequest{} } +func (m *ListJobTriggersRequest) String() string { return proto.CompactTextString(m) } +func (*ListJobTriggersRequest) ProtoMessage() {} +func (*ListJobTriggersRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{71} } + +func (m *ListJobTriggersRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListJobTriggersRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListJobTriggersRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListJobTriggersRequest) GetOrderBy() string { + if m != nil { + return m.OrderBy + } + return "" +} + +// Response message for ListJobTriggers. +type ListJobTriggersResponse struct { + // List of triggeredJobs, up to page_size in ListJobTriggersRequest. + JobTriggers []*JobTrigger `protobuf:"bytes,1,rep,name=job_triggers,json=jobTriggers" json:"job_triggers,omitempty"` + // If the next page is available then the next page token to be used + // in following ListJobTriggers request. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListJobTriggersResponse) Reset() { *m = ListJobTriggersResponse{} } +func (m *ListJobTriggersResponse) String() string { return proto.CompactTextString(m) } +func (*ListJobTriggersResponse) ProtoMessage() {} +func (*ListJobTriggersResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{72} } + +func (m *ListJobTriggersResponse) GetJobTriggers() []*JobTrigger { + if m != nil { + return m.JobTriggers + } + return nil +} + +func (m *ListJobTriggersResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request message for DeleteJobTrigger. +type DeleteJobTriggerRequest struct { + // Resource name of the project and the triggeredJob, for example + // `projects/dlp-test-project/jobTriggers/53234423`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteJobTriggerRequest) Reset() { *m = DeleteJobTriggerRequest{} } +func (m *DeleteJobTriggerRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteJobTriggerRequest) ProtoMessage() {} +func (*DeleteJobTriggerRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{73} } + +func (m *DeleteJobTriggerRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +type InspectJobConfig struct { + // The data to scan. + StorageConfig *StorageConfig `protobuf:"bytes,1,opt,name=storage_config,json=storageConfig" json:"storage_config,omitempty"` + // Where to put the findings. + OutputConfig *OutputStorageConfig `protobuf:"bytes,2,opt,name=output_config,json=outputConfig" json:"output_config,omitempty"` + // How and what to scan for. + InspectConfig *InspectConfig `protobuf:"bytes,3,opt,name=inspect_config,json=inspectConfig" json:"inspect_config,omitempty"` + // If provided, will be used as the default for all values in InspectConfig. + // `inspect_config` will be merged into the values persisted as part of the + // template. + InspectTemplateName string `protobuf:"bytes,4,opt,name=inspect_template_name,json=inspectTemplateName" json:"inspect_template_name,omitempty"` + // Actions to execute at the completion of the job. Are executed in the order + // provided. + Actions []*Action `protobuf:"bytes,5,rep,name=actions" json:"actions,omitempty"` +} + +func (m *InspectJobConfig) Reset() { *m = InspectJobConfig{} } +func (m *InspectJobConfig) String() string { return proto.CompactTextString(m) } +func (*InspectJobConfig) ProtoMessage() {} +func (*InspectJobConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{74} } + +func (m *InspectJobConfig) GetStorageConfig() *StorageConfig { + if m != nil { + return m.StorageConfig + } + return nil +} + +func (m *InspectJobConfig) GetOutputConfig() *OutputStorageConfig { + if m != nil { + return m.OutputConfig + } + return nil +} + +func (m *InspectJobConfig) GetInspectConfig() *InspectConfig { + if m != nil { + return m.InspectConfig + } + return nil +} + +func (m *InspectJobConfig) GetInspectTemplateName() string { + if m != nil { + return m.InspectTemplateName + } + return "" +} + +func (m *InspectJobConfig) GetActions() []*Action { + if m != nil { + return m.Actions + } + return nil +} + +// Combines all of the information about a DLP job. +type DlpJob struct { + // The server-assigned name. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The type of job. + Type DlpJobType `protobuf:"varint,2,opt,name=type,enum=google.privacy.dlp.v2beta2.DlpJobType" json:"type,omitempty"` + // State of a job. + State DlpJob_JobState `protobuf:"varint,3,opt,name=state,enum=google.privacy.dlp.v2beta2.DlpJob_JobState" json:"state,omitempty"` + // Types that are valid to be assigned to Details: + // *DlpJob_RiskDetails + // *DlpJob_InspectDetails + Details isDlpJob_Details `protobuf_oneof:"details"` + // Time when the job was created. + CreateTime *google_protobuf1.Timestamp `protobuf:"bytes,6,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // Time when the job started. + StartTime *google_protobuf1.Timestamp `protobuf:"bytes,7,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // Time when the job finished. + EndTime *google_protobuf1.Timestamp `protobuf:"bytes,8,opt,name=end_time,json=endTime" json:"end_time,omitempty"` + // A stream of errors encountered running the job. + ErrorResults []*google_rpc.Status `protobuf:"bytes,9,rep,name=error_results,json=errorResults" json:"error_results,omitempty"` + // If created by a job trigger, the resource name of the trigger that + // instantiated the job. + JobTriggerName string `protobuf:"bytes,10,opt,name=job_trigger_name,json=jobTriggerName" json:"job_trigger_name,omitempty"` +} + +func (m *DlpJob) Reset() { *m = DlpJob{} } +func (m *DlpJob) String() string { return proto.CompactTextString(m) } +func (*DlpJob) ProtoMessage() {} +func (*DlpJob) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{75} } + +type isDlpJob_Details interface { + isDlpJob_Details() +} + +type DlpJob_RiskDetails struct { + RiskDetails *AnalyzeDataSourceRiskDetails `protobuf:"bytes,4,opt,name=risk_details,json=riskDetails,oneof"` +} +type DlpJob_InspectDetails struct { + InspectDetails *InspectDataSourceDetails `protobuf:"bytes,5,opt,name=inspect_details,json=inspectDetails,oneof"` +} + +func (*DlpJob_RiskDetails) isDlpJob_Details() {} +func (*DlpJob_InspectDetails) isDlpJob_Details() {} + +func (m *DlpJob) GetDetails() isDlpJob_Details { + if m != nil { + return m.Details + } + return nil +} + +func (m *DlpJob) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *DlpJob) GetType() DlpJobType { + if m != nil { + return m.Type + } + return DlpJobType_DLP_JOB_TYPE_UNSPECIFIED +} + +func (m *DlpJob) GetState() DlpJob_JobState { + if m != nil { + return m.State + } + return DlpJob_JOB_STATE_UNSPECIFIED +} + +func (m *DlpJob) GetRiskDetails() *AnalyzeDataSourceRiskDetails { + if x, ok := m.GetDetails().(*DlpJob_RiskDetails); ok { + return x.RiskDetails + } + return nil +} + +func (m *DlpJob) GetInspectDetails() *InspectDataSourceDetails { + if x, ok := m.GetDetails().(*DlpJob_InspectDetails); ok { + return x.InspectDetails + } + return nil +} + +func (m *DlpJob) GetCreateTime() *google_protobuf1.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *DlpJob) GetStartTime() *google_protobuf1.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *DlpJob) GetEndTime() *google_protobuf1.Timestamp { + if m != nil { + return m.EndTime + } + return nil +} + +func (m *DlpJob) GetErrorResults() []*google_rpc.Status { + if m != nil { + return m.ErrorResults + } + return nil +} + +func (m *DlpJob) GetJobTriggerName() string { + if m != nil { + return m.JobTriggerName + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*DlpJob) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _DlpJob_OneofMarshaler, _DlpJob_OneofUnmarshaler, _DlpJob_OneofSizer, []interface{}{ + (*DlpJob_RiskDetails)(nil), + (*DlpJob_InspectDetails)(nil), + } +} + +func _DlpJob_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*DlpJob) + // details + switch x := m.Details.(type) { + case *DlpJob_RiskDetails: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RiskDetails); err != nil { + return err + } + case *DlpJob_InspectDetails: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.InspectDetails); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("DlpJob.Details has unexpected type %T", x) + } + return nil +} + +func _DlpJob_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*DlpJob) + switch tag { + case 4: // details.risk_details + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(AnalyzeDataSourceRiskDetails) + err := b.DecodeMessage(msg) + m.Details = &DlpJob_RiskDetails{msg} + return true, err + case 5: // details.inspect_details + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(InspectDataSourceDetails) + err := b.DecodeMessage(msg) + m.Details = &DlpJob_InspectDetails{msg} + return true, err + default: + return false, nil + } +} + +func _DlpJob_OneofSizer(msg proto.Message) (n int) { + m := msg.(*DlpJob) + // details + switch x := m.Details.(type) { + case *DlpJob_RiskDetails: + s := proto.Size(x.RiskDetails) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *DlpJob_InspectDetails: + s := proto.Size(x.InspectDetails) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// The request message for [DlpJobs.GetDlpJob][]. +type GetDlpJobRequest struct { + // The name of the DlpJob resource. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetDlpJobRequest) Reset() { *m = GetDlpJobRequest{} } +func (m *GetDlpJobRequest) String() string { return proto.CompactTextString(m) } +func (*GetDlpJobRequest) ProtoMessage() {} +func (*GetDlpJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{76} } + +func (m *GetDlpJobRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The request message for listing DLP jobs. +type ListDlpJobsRequest struct { + // The parent resource name, for example projects/my-project-id. + Parent string `protobuf:"bytes,4,opt,name=parent" json:"parent,omitempty"` + // Optional. Allows filtering. + // + // Supported syntax: + // + // * Filter expressions are made up of one or more restrictions. + // * Restrictions can be combined by `AND` or `OR` logical operators. A + // sequence of restrictions implicitly uses `AND`. + // * A restriction has the form of ` `. + // * Supported fields/values for inspect jobs: + // - `state` - PENDING|RUNNING|CANCELED|FINISHED|FAILED + // - `inspected_storage` - DATASTORE|CLOUD_STORAGE|BIGQUERY + // - `trigger_name` - The resource name of the trigger that created job. + // * Supported fields for risk analysis jobs: + // - `state` - RUNNING|CANCELED|FINISHED|FAILED + // * The operator must be `=` or `!=`. + // + // Examples: + // + // * inspected_storage = cloud_storage AND state = done + // * inspected_storage = cloud_storage OR inspected_storage = bigquery + // * inspected_storage = cloud_storage AND (state = done OR state = canceled) + // + // The length of this field should be no more than 500 characters. + Filter string `protobuf:"bytes,1,opt,name=filter" json:"filter,omitempty"` + // The standard list page size. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // The standard list page token. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // The type of job. Defaults to `DlpJobType.INSPECT` + Type DlpJobType `protobuf:"varint,5,opt,name=type,enum=google.privacy.dlp.v2beta2.DlpJobType" json:"type,omitempty"` +} + +func (m *ListDlpJobsRequest) Reset() { *m = ListDlpJobsRequest{} } +func (m *ListDlpJobsRequest) String() string { return proto.CompactTextString(m) } +func (*ListDlpJobsRequest) ProtoMessage() {} +func (*ListDlpJobsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{77} } + +func (m *ListDlpJobsRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListDlpJobsRequest) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +func (m *ListDlpJobsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListDlpJobsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListDlpJobsRequest) GetType() DlpJobType { + if m != nil { + return m.Type + } + return DlpJobType_DLP_JOB_TYPE_UNSPECIFIED +} + +// The response message for listing DLP jobs. +type ListDlpJobsResponse struct { + // A list of DlpJobs that matches the specified filter in the request. + Jobs []*DlpJob `protobuf:"bytes,1,rep,name=jobs" json:"jobs,omitempty"` + // The standard List next-page token. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListDlpJobsResponse) Reset() { *m = ListDlpJobsResponse{} } +func (m *ListDlpJobsResponse) String() string { return proto.CompactTextString(m) } +func (*ListDlpJobsResponse) ProtoMessage() {} +func (*ListDlpJobsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{78} } + +func (m *ListDlpJobsResponse) GetJobs() []*DlpJob { + if m != nil { + return m.Jobs + } + return nil +} + +func (m *ListDlpJobsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// The request message for canceling a DLP job. +type CancelDlpJobRequest struct { + // The name of the DlpJob resource to be cancelled. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *CancelDlpJobRequest) Reset() { *m = CancelDlpJobRequest{} } +func (m *CancelDlpJobRequest) String() string { return proto.CompactTextString(m) } +func (*CancelDlpJobRequest) ProtoMessage() {} +func (*CancelDlpJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{79} } + +func (m *CancelDlpJobRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// The request message for deleting a DLP job. +type DeleteDlpJobRequest struct { + // The name of the DlpJob resource to be deleted. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteDlpJobRequest) Reset() { *m = DeleteDlpJobRequest{} } +func (m *DeleteDlpJobRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteDlpJobRequest) ProtoMessage() {} +func (*DeleteDlpJobRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{80} } + +func (m *DeleteDlpJobRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for CreateDeidentifyTemplate. +type CreateDeidentifyTemplateRequest struct { + // The parent resource name, for example projects/my-project-id or + // organizations/my-org-id. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // The DeidentifyTemplate to create. + DeidentifyTemplate *DeidentifyTemplate `protobuf:"bytes,2,opt,name=deidentify_template,json=deidentifyTemplate" json:"deidentify_template,omitempty"` + // The template id can contain uppercase and lowercase letters, + // numbers, and hyphens; that is, it must match the regular + // expression: `[a-zA-Z\\d-]+`. The maximum length is 100 + // characters. Can be empty to allow the system to generate one. + TemplateId string `protobuf:"bytes,3,opt,name=template_id,json=templateId" json:"template_id,omitempty"` +} + +func (m *CreateDeidentifyTemplateRequest) Reset() { *m = CreateDeidentifyTemplateRequest{} } +func (m *CreateDeidentifyTemplateRequest) String() string { return proto.CompactTextString(m) } +func (*CreateDeidentifyTemplateRequest) ProtoMessage() {} +func (*CreateDeidentifyTemplateRequest) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{81} +} + +func (m *CreateDeidentifyTemplateRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *CreateDeidentifyTemplateRequest) GetDeidentifyTemplate() *DeidentifyTemplate { + if m != nil { + return m.DeidentifyTemplate + } + return nil +} + +func (m *CreateDeidentifyTemplateRequest) GetTemplateId() string { + if m != nil { + return m.TemplateId + } + return "" +} + +// Request message for UpdateDeidentifyTemplate. +type UpdateDeidentifyTemplateRequest struct { + // Resource name of organization and deidentify template to be updated, for + // example `organizations/433245324/deidentifyTemplates/432452342` or + // projects/project-id/deidentifyTemplates/432452342. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // New DeidentifyTemplate value. + DeidentifyTemplate *DeidentifyTemplate `protobuf:"bytes,2,opt,name=deidentify_template,json=deidentifyTemplate" json:"deidentify_template,omitempty"` + // Mask to control which fields get updated. + UpdateMask *google_protobuf4.FieldMask `protobuf:"bytes,3,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateDeidentifyTemplateRequest) Reset() { *m = UpdateDeidentifyTemplateRequest{} } +func (m *UpdateDeidentifyTemplateRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateDeidentifyTemplateRequest) ProtoMessage() {} +func (*UpdateDeidentifyTemplateRequest) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{82} +} + +func (m *UpdateDeidentifyTemplateRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *UpdateDeidentifyTemplateRequest) GetDeidentifyTemplate() *DeidentifyTemplate { + if m != nil { + return m.DeidentifyTemplate + } + return nil +} + +func (m *UpdateDeidentifyTemplateRequest) GetUpdateMask() *google_protobuf4.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +// Request message for GetDeidentifyTemplate. +type GetDeidentifyTemplateRequest struct { + // Resource name of the organization and deidentify template to be read, for + // example `organizations/433245324/deidentifyTemplates/432452342` or + // projects/project-id/deidentifyTemplates/432452342. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *GetDeidentifyTemplateRequest) Reset() { *m = GetDeidentifyTemplateRequest{} } +func (m *GetDeidentifyTemplateRequest) String() string { return proto.CompactTextString(m) } +func (*GetDeidentifyTemplateRequest) ProtoMessage() {} +func (*GetDeidentifyTemplateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{83} } + +func (m *GetDeidentifyTemplateRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Request message for ListDeidentifyTemplates. +type ListDeidentifyTemplatesRequest struct { + // The parent resource name, for example projects/my-project-id or + // organizations/my-org-id. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Optional page token to continue retrieval. Comes from previous call + // to `ListDeidentifyTemplates`. + PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // Optional size of the page, can be limited by server. If zero server returns + // a page of max size 100. + PageSize int32 `protobuf:"varint,3,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` +} + +func (m *ListDeidentifyTemplatesRequest) Reset() { *m = ListDeidentifyTemplatesRequest{} } +func (m *ListDeidentifyTemplatesRequest) String() string { return proto.CompactTextString(m) } +func (*ListDeidentifyTemplatesRequest) ProtoMessage() {} +func (*ListDeidentifyTemplatesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{84} } + +func (m *ListDeidentifyTemplatesRequest) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *ListDeidentifyTemplatesRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListDeidentifyTemplatesRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +// Response message for ListDeidentifyTemplates. +type ListDeidentifyTemplatesResponse struct { + // List of deidentify templates, up to page_size in + // ListDeidentifyTemplatesRequest. + DeidentifyTemplates []*DeidentifyTemplate `protobuf:"bytes,1,rep,name=deidentify_templates,json=deidentifyTemplates" json:"deidentify_templates,omitempty"` + // If the next page is available then the next page token to be used + // in following ListDeidentifyTemplates request. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListDeidentifyTemplatesResponse) Reset() { *m = ListDeidentifyTemplatesResponse{} } +func (m *ListDeidentifyTemplatesResponse) String() string { return proto.CompactTextString(m) } +func (*ListDeidentifyTemplatesResponse) ProtoMessage() {} +func (*ListDeidentifyTemplatesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{85} +} + +func (m *ListDeidentifyTemplatesResponse) GetDeidentifyTemplates() []*DeidentifyTemplate { + if m != nil { + return m.DeidentifyTemplates + } + return nil +} + +func (m *ListDeidentifyTemplatesResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request message for DeleteDeidentifyTemplate. +type DeleteDeidentifyTemplateRequest struct { + // Resource name of the organization and deidentify template to be deleted, + // for example `organizations/433245324/deidentifyTemplates/432452342` or + // projects/project-id/deidentifyTemplates/432452342. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *DeleteDeidentifyTemplateRequest) Reset() { *m = DeleteDeidentifyTemplateRequest{} } +func (m *DeleteDeidentifyTemplateRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteDeidentifyTemplateRequest) ProtoMessage() {} +func (*DeleteDeidentifyTemplateRequest) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{86} +} + +func (m *DeleteDeidentifyTemplateRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func init() { + proto.RegisterType((*InspectConfig)(nil), "google.privacy.dlp.v2beta2.InspectConfig") + proto.RegisterType((*InspectConfig_FindingLimits)(nil), "google.privacy.dlp.v2beta2.InspectConfig.FindingLimits") + proto.RegisterType((*InspectConfig_FindingLimits_InfoTypeLimit)(nil), "google.privacy.dlp.v2beta2.InspectConfig.FindingLimits.InfoTypeLimit") + proto.RegisterType((*ContentItem)(nil), "google.privacy.dlp.v2beta2.ContentItem") + proto.RegisterType((*Table)(nil), "google.privacy.dlp.v2beta2.Table") + proto.RegisterType((*Table_Row)(nil), "google.privacy.dlp.v2beta2.Table.Row") + proto.RegisterType((*InspectResult)(nil), "google.privacy.dlp.v2beta2.InspectResult") + proto.RegisterType((*Finding)(nil), "google.privacy.dlp.v2beta2.Finding") + proto.RegisterType((*Location)(nil), "google.privacy.dlp.v2beta2.Location") + proto.RegisterType((*TableLocation)(nil), "google.privacy.dlp.v2beta2.TableLocation") + proto.RegisterType((*Range)(nil), "google.privacy.dlp.v2beta2.Range") + proto.RegisterType((*ImageLocation)(nil), "google.privacy.dlp.v2beta2.ImageLocation") + proto.RegisterType((*RedactImageRequest)(nil), "google.privacy.dlp.v2beta2.RedactImageRequest") + proto.RegisterType((*RedactImageRequest_ImageRedactionConfig)(nil), "google.privacy.dlp.v2beta2.RedactImageRequest.ImageRedactionConfig") + proto.RegisterType((*Color)(nil), "google.privacy.dlp.v2beta2.Color") + proto.RegisterType((*RedactImageResponse)(nil), "google.privacy.dlp.v2beta2.RedactImageResponse") + proto.RegisterType((*DeidentifyContentRequest)(nil), "google.privacy.dlp.v2beta2.DeidentifyContentRequest") + proto.RegisterType((*DeidentifyContentResponse)(nil), "google.privacy.dlp.v2beta2.DeidentifyContentResponse") + proto.RegisterType((*ReidentifyContentRequest)(nil), "google.privacy.dlp.v2beta2.ReidentifyContentRequest") + proto.RegisterType((*ReidentifyContentResponse)(nil), "google.privacy.dlp.v2beta2.ReidentifyContentResponse") + proto.RegisterType((*InspectContentRequest)(nil), "google.privacy.dlp.v2beta2.InspectContentRequest") + proto.RegisterType((*InspectContentResponse)(nil), "google.privacy.dlp.v2beta2.InspectContentResponse") + proto.RegisterType((*InspectDataSourceRequest)(nil), "google.privacy.dlp.v2beta2.InspectDataSourceRequest") + proto.RegisterType((*OutputStorageConfig)(nil), "google.privacy.dlp.v2beta2.OutputStorageConfig") + proto.RegisterType((*InfoTypeStatistics)(nil), "google.privacy.dlp.v2beta2.InfoTypeStatistics") + proto.RegisterType((*InspectDataSourceDetails)(nil), "google.privacy.dlp.v2beta2.InspectDataSourceDetails") + proto.RegisterType((*InspectDataSourceDetails_RequestedOptions)(nil), "google.privacy.dlp.v2beta2.InspectDataSourceDetails.RequestedOptions") + proto.RegisterType((*InspectDataSourceDetails_Result)(nil), "google.privacy.dlp.v2beta2.InspectDataSourceDetails.Result") + proto.RegisterType((*InfoTypeDescription)(nil), "google.privacy.dlp.v2beta2.InfoTypeDescription") + proto.RegisterType((*ListInfoTypesRequest)(nil), "google.privacy.dlp.v2beta2.ListInfoTypesRequest") + proto.RegisterType((*ListInfoTypesResponse)(nil), "google.privacy.dlp.v2beta2.ListInfoTypesResponse") + proto.RegisterType((*AnalyzeDataSourceRiskRequest)(nil), "google.privacy.dlp.v2beta2.AnalyzeDataSourceRiskRequest") + proto.RegisterType((*RiskAnalysisJobConfig)(nil), "google.privacy.dlp.v2beta2.RiskAnalysisJobConfig") + proto.RegisterType((*PrivacyMetric)(nil), "google.privacy.dlp.v2beta2.PrivacyMetric") + proto.RegisterType((*PrivacyMetric_NumericalStatsConfig)(nil), "google.privacy.dlp.v2beta2.PrivacyMetric.NumericalStatsConfig") + proto.RegisterType((*PrivacyMetric_CategoricalStatsConfig)(nil), "google.privacy.dlp.v2beta2.PrivacyMetric.CategoricalStatsConfig") + proto.RegisterType((*PrivacyMetric_KAnonymityConfig)(nil), "google.privacy.dlp.v2beta2.PrivacyMetric.KAnonymityConfig") + proto.RegisterType((*PrivacyMetric_LDiversityConfig)(nil), "google.privacy.dlp.v2beta2.PrivacyMetric.LDiversityConfig") + proto.RegisterType((*PrivacyMetric_KMapEstimationConfig)(nil), "google.privacy.dlp.v2beta2.PrivacyMetric.KMapEstimationConfig") + proto.RegisterType((*PrivacyMetric_KMapEstimationConfig_TaggedField)(nil), "google.privacy.dlp.v2beta2.PrivacyMetric.KMapEstimationConfig.TaggedField") + proto.RegisterType((*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable)(nil), "google.privacy.dlp.v2beta2.PrivacyMetric.KMapEstimationConfig.AuxiliaryTable") + proto.RegisterType((*PrivacyMetric_KMapEstimationConfig_AuxiliaryTable_QuasiIdField)(nil), "google.privacy.dlp.v2beta2.PrivacyMetric.KMapEstimationConfig.AuxiliaryTable.QuasiIdField") + proto.RegisterType((*AnalyzeDataSourceRiskDetails)(nil), "google.privacy.dlp.v2beta2.AnalyzeDataSourceRiskDetails") + proto.RegisterType((*AnalyzeDataSourceRiskDetails_NumericalStatsResult)(nil), "google.privacy.dlp.v2beta2.AnalyzeDataSourceRiskDetails.NumericalStatsResult") + proto.RegisterType((*AnalyzeDataSourceRiskDetails_CategoricalStatsResult)(nil), "google.privacy.dlp.v2beta2.AnalyzeDataSourceRiskDetails.CategoricalStatsResult") + proto.RegisterType((*AnalyzeDataSourceRiskDetails_CategoricalStatsResult_CategoricalStatsHistogramBucket)(nil), "google.privacy.dlp.v2beta2.AnalyzeDataSourceRiskDetails.CategoricalStatsResult.CategoricalStatsHistogramBucket") + proto.RegisterType((*AnalyzeDataSourceRiskDetails_KAnonymityResult)(nil), "google.privacy.dlp.v2beta2.AnalyzeDataSourceRiskDetails.KAnonymityResult") + proto.RegisterType((*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityEquivalenceClass)(nil), "google.privacy.dlp.v2beta2.AnalyzeDataSourceRiskDetails.KAnonymityResult.KAnonymityEquivalenceClass") + proto.RegisterType((*AnalyzeDataSourceRiskDetails_KAnonymityResult_KAnonymityHistogramBucket)(nil), "google.privacy.dlp.v2beta2.AnalyzeDataSourceRiskDetails.KAnonymityResult.KAnonymityHistogramBucket") + proto.RegisterType((*AnalyzeDataSourceRiskDetails_LDiversityResult)(nil), "google.privacy.dlp.v2beta2.AnalyzeDataSourceRiskDetails.LDiversityResult") + proto.RegisterType((*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityEquivalenceClass)(nil), "google.privacy.dlp.v2beta2.AnalyzeDataSourceRiskDetails.LDiversityResult.LDiversityEquivalenceClass") + proto.RegisterType((*AnalyzeDataSourceRiskDetails_LDiversityResult_LDiversityHistogramBucket)(nil), "google.privacy.dlp.v2beta2.AnalyzeDataSourceRiskDetails.LDiversityResult.LDiversityHistogramBucket") + proto.RegisterType((*AnalyzeDataSourceRiskDetails_KMapEstimationResult)(nil), "google.privacy.dlp.v2beta2.AnalyzeDataSourceRiskDetails.KMapEstimationResult") + proto.RegisterType((*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationQuasiIdValues)(nil), "google.privacy.dlp.v2beta2.AnalyzeDataSourceRiskDetails.KMapEstimationResult.KMapEstimationQuasiIdValues") + proto.RegisterType((*AnalyzeDataSourceRiskDetails_KMapEstimationResult_KMapEstimationHistogramBucket)(nil), "google.privacy.dlp.v2beta2.AnalyzeDataSourceRiskDetails.KMapEstimationResult.KMapEstimationHistogramBucket") + proto.RegisterType((*ValueFrequency)(nil), "google.privacy.dlp.v2beta2.ValueFrequency") + proto.RegisterType((*Value)(nil), "google.privacy.dlp.v2beta2.Value") + proto.RegisterType((*QuoteInfo)(nil), "google.privacy.dlp.v2beta2.QuoteInfo") + proto.RegisterType((*DateTime)(nil), "google.privacy.dlp.v2beta2.DateTime") + proto.RegisterType((*DateTime_TimeZone)(nil), "google.privacy.dlp.v2beta2.DateTime.TimeZone") + proto.RegisterType((*DeidentifyConfig)(nil), "google.privacy.dlp.v2beta2.DeidentifyConfig") + proto.RegisterType((*PrimitiveTransformation)(nil), "google.privacy.dlp.v2beta2.PrimitiveTransformation") + proto.RegisterType((*TimePartConfig)(nil), "google.privacy.dlp.v2beta2.TimePartConfig") + proto.RegisterType((*CryptoHashConfig)(nil), "google.privacy.dlp.v2beta2.CryptoHashConfig") + proto.RegisterType((*ReplaceValueConfig)(nil), "google.privacy.dlp.v2beta2.ReplaceValueConfig") + proto.RegisterType((*ReplaceWithInfoTypeConfig)(nil), "google.privacy.dlp.v2beta2.ReplaceWithInfoTypeConfig") + proto.RegisterType((*RedactConfig)(nil), "google.privacy.dlp.v2beta2.RedactConfig") + proto.RegisterType((*CharsToIgnore)(nil), "google.privacy.dlp.v2beta2.CharsToIgnore") + proto.RegisterType((*CharacterMaskConfig)(nil), "google.privacy.dlp.v2beta2.CharacterMaskConfig") + proto.RegisterType((*FixedSizeBucketingConfig)(nil), "google.privacy.dlp.v2beta2.FixedSizeBucketingConfig") + proto.RegisterType((*BucketingConfig)(nil), "google.privacy.dlp.v2beta2.BucketingConfig") + proto.RegisterType((*BucketingConfig_Bucket)(nil), "google.privacy.dlp.v2beta2.BucketingConfig.Bucket") + proto.RegisterType((*CryptoReplaceFfxFpeConfig)(nil), "google.privacy.dlp.v2beta2.CryptoReplaceFfxFpeConfig") + proto.RegisterType((*CryptoKey)(nil), "google.privacy.dlp.v2beta2.CryptoKey") + proto.RegisterType((*TransientCryptoKey)(nil), "google.privacy.dlp.v2beta2.TransientCryptoKey") + proto.RegisterType((*UnwrappedCryptoKey)(nil), "google.privacy.dlp.v2beta2.UnwrappedCryptoKey") + proto.RegisterType((*KmsWrappedCryptoKey)(nil), "google.privacy.dlp.v2beta2.KmsWrappedCryptoKey") + proto.RegisterType((*DateShiftConfig)(nil), "google.privacy.dlp.v2beta2.DateShiftConfig") + proto.RegisterType((*InfoTypeTransformations)(nil), "google.privacy.dlp.v2beta2.InfoTypeTransformations") + proto.RegisterType((*InfoTypeTransformations_InfoTypeTransformation)(nil), "google.privacy.dlp.v2beta2.InfoTypeTransformations.InfoTypeTransformation") + proto.RegisterType((*FieldTransformation)(nil), "google.privacy.dlp.v2beta2.FieldTransformation") + proto.RegisterType((*RecordTransformations)(nil), "google.privacy.dlp.v2beta2.RecordTransformations") + proto.RegisterType((*RecordSuppression)(nil), "google.privacy.dlp.v2beta2.RecordSuppression") + proto.RegisterType((*RecordCondition)(nil), "google.privacy.dlp.v2beta2.RecordCondition") + proto.RegisterType((*RecordCondition_Condition)(nil), "google.privacy.dlp.v2beta2.RecordCondition.Condition") + proto.RegisterType((*RecordCondition_Conditions)(nil), "google.privacy.dlp.v2beta2.RecordCondition.Conditions") + proto.RegisterType((*RecordCondition_Expressions)(nil), "google.privacy.dlp.v2beta2.RecordCondition.Expressions") + proto.RegisterType((*TransformationOverview)(nil), "google.privacy.dlp.v2beta2.TransformationOverview") + proto.RegisterType((*TransformationSummary)(nil), "google.privacy.dlp.v2beta2.TransformationSummary") + proto.RegisterType((*TransformationSummary_SummaryResult)(nil), "google.privacy.dlp.v2beta2.TransformationSummary.SummaryResult") + proto.RegisterType((*Schedule)(nil), "google.privacy.dlp.v2beta2.Schedule") + proto.RegisterType((*InspectTemplate)(nil), "google.privacy.dlp.v2beta2.InspectTemplate") + proto.RegisterType((*DeidentifyTemplate)(nil), "google.privacy.dlp.v2beta2.DeidentifyTemplate") + proto.RegisterType((*JobTrigger)(nil), "google.privacy.dlp.v2beta2.JobTrigger") + proto.RegisterType((*JobTrigger_Trigger)(nil), "google.privacy.dlp.v2beta2.JobTrigger.Trigger") + proto.RegisterType((*JobTrigger_Error)(nil), "google.privacy.dlp.v2beta2.JobTrigger.Error") + proto.RegisterType((*Action)(nil), "google.privacy.dlp.v2beta2.Action") + proto.RegisterType((*Action_SaveFindings)(nil), "google.privacy.dlp.v2beta2.Action.SaveFindings") + proto.RegisterType((*Action_PublishToPubSub)(nil), "google.privacy.dlp.v2beta2.Action.PublishToPubSub") + proto.RegisterType((*CreateInspectTemplateRequest)(nil), "google.privacy.dlp.v2beta2.CreateInspectTemplateRequest") + proto.RegisterType((*UpdateInspectTemplateRequest)(nil), "google.privacy.dlp.v2beta2.UpdateInspectTemplateRequest") + proto.RegisterType((*GetInspectTemplateRequest)(nil), "google.privacy.dlp.v2beta2.GetInspectTemplateRequest") + proto.RegisterType((*ListInspectTemplatesRequest)(nil), "google.privacy.dlp.v2beta2.ListInspectTemplatesRequest") + proto.RegisterType((*ListInspectTemplatesResponse)(nil), "google.privacy.dlp.v2beta2.ListInspectTemplatesResponse") + proto.RegisterType((*DeleteInspectTemplateRequest)(nil), "google.privacy.dlp.v2beta2.DeleteInspectTemplateRequest") + proto.RegisterType((*CreateJobTriggerRequest)(nil), "google.privacy.dlp.v2beta2.CreateJobTriggerRequest") + proto.RegisterType((*UpdateJobTriggerRequest)(nil), "google.privacy.dlp.v2beta2.UpdateJobTriggerRequest") + proto.RegisterType((*GetJobTriggerRequest)(nil), "google.privacy.dlp.v2beta2.GetJobTriggerRequest") + proto.RegisterType((*ListJobTriggersRequest)(nil), "google.privacy.dlp.v2beta2.ListJobTriggersRequest") + proto.RegisterType((*ListJobTriggersResponse)(nil), "google.privacy.dlp.v2beta2.ListJobTriggersResponse") + proto.RegisterType((*DeleteJobTriggerRequest)(nil), "google.privacy.dlp.v2beta2.DeleteJobTriggerRequest") + proto.RegisterType((*InspectJobConfig)(nil), "google.privacy.dlp.v2beta2.InspectJobConfig") + proto.RegisterType((*DlpJob)(nil), "google.privacy.dlp.v2beta2.DlpJob") + proto.RegisterType((*GetDlpJobRequest)(nil), "google.privacy.dlp.v2beta2.GetDlpJobRequest") + proto.RegisterType((*ListDlpJobsRequest)(nil), "google.privacy.dlp.v2beta2.ListDlpJobsRequest") + proto.RegisterType((*ListDlpJobsResponse)(nil), "google.privacy.dlp.v2beta2.ListDlpJobsResponse") + proto.RegisterType((*CancelDlpJobRequest)(nil), "google.privacy.dlp.v2beta2.CancelDlpJobRequest") + proto.RegisterType((*DeleteDlpJobRequest)(nil), "google.privacy.dlp.v2beta2.DeleteDlpJobRequest") + proto.RegisterType((*CreateDeidentifyTemplateRequest)(nil), "google.privacy.dlp.v2beta2.CreateDeidentifyTemplateRequest") + proto.RegisterType((*UpdateDeidentifyTemplateRequest)(nil), "google.privacy.dlp.v2beta2.UpdateDeidentifyTemplateRequest") + proto.RegisterType((*GetDeidentifyTemplateRequest)(nil), "google.privacy.dlp.v2beta2.GetDeidentifyTemplateRequest") + proto.RegisterType((*ListDeidentifyTemplatesRequest)(nil), "google.privacy.dlp.v2beta2.ListDeidentifyTemplatesRequest") + proto.RegisterType((*ListDeidentifyTemplatesResponse)(nil), "google.privacy.dlp.v2beta2.ListDeidentifyTemplatesResponse") + proto.RegisterType((*DeleteDeidentifyTemplateRequest)(nil), "google.privacy.dlp.v2beta2.DeleteDeidentifyTemplateRequest") + proto.RegisterEnum("google.privacy.dlp.v2beta2.InfoTypeSupportedBy", InfoTypeSupportedBy_name, InfoTypeSupportedBy_value) + proto.RegisterEnum("google.privacy.dlp.v2beta2.RelationalOperator", RelationalOperator_name, RelationalOperator_value) + proto.RegisterEnum("google.privacy.dlp.v2beta2.DlpJobType", DlpJobType_name, DlpJobType_value) + proto.RegisterEnum("google.privacy.dlp.v2beta2.OutputStorageConfig_OutputSchema", OutputStorageConfig_OutputSchema_name, OutputStorageConfig_OutputSchema_value) + proto.RegisterEnum("google.privacy.dlp.v2beta2.TimePartConfig_TimePart", TimePartConfig_TimePart_name, TimePartConfig_TimePart_value) + proto.RegisterEnum("google.privacy.dlp.v2beta2.CharsToIgnore_CommonCharsToIgnore", CharsToIgnore_CommonCharsToIgnore_name, CharsToIgnore_CommonCharsToIgnore_value) + proto.RegisterEnum("google.privacy.dlp.v2beta2.CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet", CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet_name, CryptoReplaceFfxFpeConfig_FfxCommonNativeAlphabet_value) + proto.RegisterEnum("google.privacy.dlp.v2beta2.RecordCondition_Expressions_LogicalOperator", RecordCondition_Expressions_LogicalOperator_name, RecordCondition_Expressions_LogicalOperator_value) + proto.RegisterEnum("google.privacy.dlp.v2beta2.TransformationSummary_TransformationResultCode", TransformationSummary_TransformationResultCode_name, TransformationSummary_TransformationResultCode_value) + proto.RegisterEnum("google.privacy.dlp.v2beta2.JobTrigger_Status", JobTrigger_Status_name, JobTrigger_Status_value) + proto.RegisterEnum("google.privacy.dlp.v2beta2.DlpJob_JobState", DlpJob_JobState_name, DlpJob_JobState_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for DlpService service + +type DlpServiceClient interface { + // Finds potentially sensitive info in content. + // This method has limits on input size, processing time, and output size. + // [How-to guide for text](/dlp/docs/inspecting-text), [How-to guide for + // images](/dlp/docs/inspecting-images) + InspectContent(ctx context.Context, in *InspectContentRequest, opts ...grpc.CallOption) (*InspectContentResponse, error) + // Redacts potentially sensitive info from an image. + // This method has limits on input size, processing time, and output size. + // [How-to guide](/dlp/docs/redacting-sensitive-data-images) + RedactImage(ctx context.Context, in *RedactImageRequest, opts ...grpc.CallOption) (*RedactImageResponse, error) + // De-identifies potentially sensitive info from a ContentItem. + // This method has limits on input size and output size. + // [How-to guide](/dlp/docs/deidentify-sensitive-data) + DeidentifyContent(ctx context.Context, in *DeidentifyContentRequest, opts ...grpc.CallOption) (*DeidentifyContentResponse, error) + // Re-identify content that has been de-identified. + ReidentifyContent(ctx context.Context, in *ReidentifyContentRequest, opts ...grpc.CallOption) (*ReidentifyContentResponse, error) + // Schedules a job scanning content in a Google Cloud Platform data + // repository. [How-to guide](/dlp/docs/inspecting-storage) + InspectDataSource(ctx context.Context, in *InspectDataSourceRequest, opts ...grpc.CallOption) (*DlpJob, error) + // Schedules a job to compute risk analysis metrics over content in a Google + // Cloud Platform repository. [How-to guide](/dlp/docs/compute-risk-analysis) + AnalyzeDataSourceRisk(ctx context.Context, in *AnalyzeDataSourceRiskRequest, opts ...grpc.CallOption) (*DlpJob, error) + // Returns sensitive information types DLP supports. + ListInfoTypes(ctx context.Context, in *ListInfoTypesRequest, opts ...grpc.CallOption) (*ListInfoTypesResponse, error) + // Creates an inspect template for re-using frequently used configuration + // for inspecting content, images, and storage. + CreateInspectTemplate(ctx context.Context, in *CreateInspectTemplateRequest, opts ...grpc.CallOption) (*InspectTemplate, error) + // Updates the inspect template. + UpdateInspectTemplate(ctx context.Context, in *UpdateInspectTemplateRequest, opts ...grpc.CallOption) (*InspectTemplate, error) + // Gets an inspect template. + GetInspectTemplate(ctx context.Context, in *GetInspectTemplateRequest, opts ...grpc.CallOption) (*InspectTemplate, error) + // Lists inspect templates. + ListInspectTemplates(ctx context.Context, in *ListInspectTemplatesRequest, opts ...grpc.CallOption) (*ListInspectTemplatesResponse, error) + // Deletes inspect templates. + DeleteInspectTemplate(ctx context.Context, in *DeleteInspectTemplateRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) + // Creates an Deidentify template for re-using frequently used configuration + // for Deidentifying content, images, and storage. + CreateDeidentifyTemplate(ctx context.Context, in *CreateDeidentifyTemplateRequest, opts ...grpc.CallOption) (*DeidentifyTemplate, error) + // Updates the inspect template. + UpdateDeidentifyTemplate(ctx context.Context, in *UpdateDeidentifyTemplateRequest, opts ...grpc.CallOption) (*DeidentifyTemplate, error) + // Gets an inspect template. + GetDeidentifyTemplate(ctx context.Context, in *GetDeidentifyTemplateRequest, opts ...grpc.CallOption) (*DeidentifyTemplate, error) + // Lists inspect templates. + ListDeidentifyTemplates(ctx context.Context, in *ListDeidentifyTemplatesRequest, opts ...grpc.CallOption) (*ListDeidentifyTemplatesResponse, error) + // Deletes inspect templates. + DeleteDeidentifyTemplate(ctx context.Context, in *DeleteDeidentifyTemplateRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) + // Creates a job to run DLP actions such as scanning storage for sensitive + // information on a set schedule. + CreateJobTrigger(ctx context.Context, in *CreateJobTriggerRequest, opts ...grpc.CallOption) (*JobTrigger, error) + // Updates a job trigger. + UpdateJobTrigger(ctx context.Context, in *UpdateJobTriggerRequest, opts ...grpc.CallOption) (*JobTrigger, error) + // Gets a job trigger. + GetJobTrigger(ctx context.Context, in *GetJobTriggerRequest, opts ...grpc.CallOption) (*JobTrigger, error) + // Lists job triggers. + ListJobTriggers(ctx context.Context, in *ListJobTriggersRequest, opts ...grpc.CallOption) (*ListJobTriggersResponse, error) + // Deletes a job trigger. + DeleteJobTrigger(ctx context.Context, in *DeleteJobTriggerRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) + // Lists DlpJobs that match the specified filter in the request. + ListDlpJobs(ctx context.Context, in *ListDlpJobsRequest, opts ...grpc.CallOption) (*ListDlpJobsResponse, error) + // Gets the latest state of a long-running DlpJob. + GetDlpJob(ctx context.Context, in *GetDlpJobRequest, opts ...grpc.CallOption) (*DlpJob, error) + // Deletes a long-running DlpJob. This method indicates that the client is + // no longer interested in the DlpJob result. The job will be cancelled if + // possible. + DeleteDlpJob(ctx context.Context, in *DeleteDlpJobRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) + // Starts asynchronous cancellation on a long-running DlpJob. The server + // makes a best effort to cancel the DlpJob, but success is not + // guaranteed. + CancelDlpJob(ctx context.Context, in *CancelDlpJobRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) +} + +type dlpServiceClient struct { + cc *grpc.ClientConn +} + +func NewDlpServiceClient(cc *grpc.ClientConn) DlpServiceClient { + return &dlpServiceClient{cc} +} + +func (c *dlpServiceClient) InspectContent(ctx context.Context, in *InspectContentRequest, opts ...grpc.CallOption) (*InspectContentResponse, error) { + out := new(InspectContentResponse) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/InspectContent", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) RedactImage(ctx context.Context, in *RedactImageRequest, opts ...grpc.CallOption) (*RedactImageResponse, error) { + out := new(RedactImageResponse) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/RedactImage", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) DeidentifyContent(ctx context.Context, in *DeidentifyContentRequest, opts ...grpc.CallOption) (*DeidentifyContentResponse, error) { + out := new(DeidentifyContentResponse) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/DeidentifyContent", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) ReidentifyContent(ctx context.Context, in *ReidentifyContentRequest, opts ...grpc.CallOption) (*ReidentifyContentResponse, error) { + out := new(ReidentifyContentResponse) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/ReidentifyContent", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) InspectDataSource(ctx context.Context, in *InspectDataSourceRequest, opts ...grpc.CallOption) (*DlpJob, error) { + out := new(DlpJob) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/InspectDataSource", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) AnalyzeDataSourceRisk(ctx context.Context, in *AnalyzeDataSourceRiskRequest, opts ...grpc.CallOption) (*DlpJob, error) { + out := new(DlpJob) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/AnalyzeDataSourceRisk", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) ListInfoTypes(ctx context.Context, in *ListInfoTypesRequest, opts ...grpc.CallOption) (*ListInfoTypesResponse, error) { + out := new(ListInfoTypesResponse) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/ListInfoTypes", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) CreateInspectTemplate(ctx context.Context, in *CreateInspectTemplateRequest, opts ...grpc.CallOption) (*InspectTemplate, error) { + out := new(InspectTemplate) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/CreateInspectTemplate", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) UpdateInspectTemplate(ctx context.Context, in *UpdateInspectTemplateRequest, opts ...grpc.CallOption) (*InspectTemplate, error) { + out := new(InspectTemplate) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/UpdateInspectTemplate", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) GetInspectTemplate(ctx context.Context, in *GetInspectTemplateRequest, opts ...grpc.CallOption) (*InspectTemplate, error) { + out := new(InspectTemplate) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/GetInspectTemplate", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) ListInspectTemplates(ctx context.Context, in *ListInspectTemplatesRequest, opts ...grpc.CallOption) (*ListInspectTemplatesResponse, error) { + out := new(ListInspectTemplatesResponse) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/ListInspectTemplates", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) DeleteInspectTemplate(ctx context.Context, in *DeleteInspectTemplateRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) { + out := new(google_protobuf3.Empty) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/DeleteInspectTemplate", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) CreateDeidentifyTemplate(ctx context.Context, in *CreateDeidentifyTemplateRequest, opts ...grpc.CallOption) (*DeidentifyTemplate, error) { + out := new(DeidentifyTemplate) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/CreateDeidentifyTemplate", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) UpdateDeidentifyTemplate(ctx context.Context, in *UpdateDeidentifyTemplateRequest, opts ...grpc.CallOption) (*DeidentifyTemplate, error) { + out := new(DeidentifyTemplate) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/UpdateDeidentifyTemplate", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) GetDeidentifyTemplate(ctx context.Context, in *GetDeidentifyTemplateRequest, opts ...grpc.CallOption) (*DeidentifyTemplate, error) { + out := new(DeidentifyTemplate) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/GetDeidentifyTemplate", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) ListDeidentifyTemplates(ctx context.Context, in *ListDeidentifyTemplatesRequest, opts ...grpc.CallOption) (*ListDeidentifyTemplatesResponse, error) { + out := new(ListDeidentifyTemplatesResponse) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/ListDeidentifyTemplates", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) DeleteDeidentifyTemplate(ctx context.Context, in *DeleteDeidentifyTemplateRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) { + out := new(google_protobuf3.Empty) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/DeleteDeidentifyTemplate", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) CreateJobTrigger(ctx context.Context, in *CreateJobTriggerRequest, opts ...grpc.CallOption) (*JobTrigger, error) { + out := new(JobTrigger) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/CreateJobTrigger", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) UpdateJobTrigger(ctx context.Context, in *UpdateJobTriggerRequest, opts ...grpc.CallOption) (*JobTrigger, error) { + out := new(JobTrigger) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/UpdateJobTrigger", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) GetJobTrigger(ctx context.Context, in *GetJobTriggerRequest, opts ...grpc.CallOption) (*JobTrigger, error) { + out := new(JobTrigger) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/GetJobTrigger", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) ListJobTriggers(ctx context.Context, in *ListJobTriggersRequest, opts ...grpc.CallOption) (*ListJobTriggersResponse, error) { + out := new(ListJobTriggersResponse) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/ListJobTriggers", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) DeleteJobTrigger(ctx context.Context, in *DeleteJobTriggerRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) { + out := new(google_protobuf3.Empty) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/DeleteJobTrigger", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) ListDlpJobs(ctx context.Context, in *ListDlpJobsRequest, opts ...grpc.CallOption) (*ListDlpJobsResponse, error) { + out := new(ListDlpJobsResponse) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/ListDlpJobs", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) GetDlpJob(ctx context.Context, in *GetDlpJobRequest, opts ...grpc.CallOption) (*DlpJob, error) { + out := new(DlpJob) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/GetDlpJob", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) DeleteDlpJob(ctx context.Context, in *DeleteDlpJobRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) { + out := new(google_protobuf3.Empty) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/DeleteDlpJob", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dlpServiceClient) CancelDlpJob(ctx context.Context, in *CancelDlpJobRequest, opts ...grpc.CallOption) (*google_protobuf3.Empty, error) { + out := new(google_protobuf3.Empty) + err := grpc.Invoke(ctx, "/google.privacy.dlp.v2beta2.DlpService/CancelDlpJob", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for DlpService service + +type DlpServiceServer interface { + // Finds potentially sensitive info in content. + // This method has limits on input size, processing time, and output size. + // [How-to guide for text](/dlp/docs/inspecting-text), [How-to guide for + // images](/dlp/docs/inspecting-images) + InspectContent(context.Context, *InspectContentRequest) (*InspectContentResponse, error) + // Redacts potentially sensitive info from an image. + // This method has limits on input size, processing time, and output size. + // [How-to guide](/dlp/docs/redacting-sensitive-data-images) + RedactImage(context.Context, *RedactImageRequest) (*RedactImageResponse, error) + // De-identifies potentially sensitive info from a ContentItem. + // This method has limits on input size and output size. + // [How-to guide](/dlp/docs/deidentify-sensitive-data) + DeidentifyContent(context.Context, *DeidentifyContentRequest) (*DeidentifyContentResponse, error) + // Re-identify content that has been de-identified. + ReidentifyContent(context.Context, *ReidentifyContentRequest) (*ReidentifyContentResponse, error) + // Schedules a job scanning content in a Google Cloud Platform data + // repository. [How-to guide](/dlp/docs/inspecting-storage) + InspectDataSource(context.Context, *InspectDataSourceRequest) (*DlpJob, error) + // Schedules a job to compute risk analysis metrics over content in a Google + // Cloud Platform repository. [How-to guide](/dlp/docs/compute-risk-analysis) + AnalyzeDataSourceRisk(context.Context, *AnalyzeDataSourceRiskRequest) (*DlpJob, error) + // Returns sensitive information types DLP supports. + ListInfoTypes(context.Context, *ListInfoTypesRequest) (*ListInfoTypesResponse, error) + // Creates an inspect template for re-using frequently used configuration + // for inspecting content, images, and storage. + CreateInspectTemplate(context.Context, *CreateInspectTemplateRequest) (*InspectTemplate, error) + // Updates the inspect template. + UpdateInspectTemplate(context.Context, *UpdateInspectTemplateRequest) (*InspectTemplate, error) + // Gets an inspect template. + GetInspectTemplate(context.Context, *GetInspectTemplateRequest) (*InspectTemplate, error) + // Lists inspect templates. + ListInspectTemplates(context.Context, *ListInspectTemplatesRequest) (*ListInspectTemplatesResponse, error) + // Deletes inspect templates. + DeleteInspectTemplate(context.Context, *DeleteInspectTemplateRequest) (*google_protobuf3.Empty, error) + // Creates an Deidentify template for re-using frequently used configuration + // for Deidentifying content, images, and storage. + CreateDeidentifyTemplate(context.Context, *CreateDeidentifyTemplateRequest) (*DeidentifyTemplate, error) + // Updates the inspect template. + UpdateDeidentifyTemplate(context.Context, *UpdateDeidentifyTemplateRequest) (*DeidentifyTemplate, error) + // Gets an inspect template. + GetDeidentifyTemplate(context.Context, *GetDeidentifyTemplateRequest) (*DeidentifyTemplate, error) + // Lists inspect templates. + ListDeidentifyTemplates(context.Context, *ListDeidentifyTemplatesRequest) (*ListDeidentifyTemplatesResponse, error) + // Deletes inspect templates. + DeleteDeidentifyTemplate(context.Context, *DeleteDeidentifyTemplateRequest) (*google_protobuf3.Empty, error) + // Creates a job to run DLP actions such as scanning storage for sensitive + // information on a set schedule. + CreateJobTrigger(context.Context, *CreateJobTriggerRequest) (*JobTrigger, error) + // Updates a job trigger. + UpdateJobTrigger(context.Context, *UpdateJobTriggerRequest) (*JobTrigger, error) + // Gets a job trigger. + GetJobTrigger(context.Context, *GetJobTriggerRequest) (*JobTrigger, error) + // Lists job triggers. + ListJobTriggers(context.Context, *ListJobTriggersRequest) (*ListJobTriggersResponse, error) + // Deletes a job trigger. + DeleteJobTrigger(context.Context, *DeleteJobTriggerRequest) (*google_protobuf3.Empty, error) + // Lists DlpJobs that match the specified filter in the request. + ListDlpJobs(context.Context, *ListDlpJobsRequest) (*ListDlpJobsResponse, error) + // Gets the latest state of a long-running DlpJob. + GetDlpJob(context.Context, *GetDlpJobRequest) (*DlpJob, error) + // Deletes a long-running DlpJob. This method indicates that the client is + // no longer interested in the DlpJob result. The job will be cancelled if + // possible. + DeleteDlpJob(context.Context, *DeleteDlpJobRequest) (*google_protobuf3.Empty, error) + // Starts asynchronous cancellation on a long-running DlpJob. The server + // makes a best effort to cancel the DlpJob, but success is not + // guaranteed. + CancelDlpJob(context.Context, *CancelDlpJobRequest) (*google_protobuf3.Empty, error) +} + +func RegisterDlpServiceServer(s *grpc.Server, srv DlpServiceServer) { + s.RegisterService(&_DlpService_serviceDesc, srv) +} + +func _DlpService_InspectContent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(InspectContentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).InspectContent(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta2.DlpService/InspectContent", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).InspectContent(ctx, req.(*InspectContentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_RedactImage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RedactImageRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).RedactImage(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta2.DlpService/RedactImage", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).RedactImage(ctx, req.(*RedactImageRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_DeidentifyContent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeidentifyContentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).DeidentifyContent(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta2.DlpService/DeidentifyContent", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).DeidentifyContent(ctx, req.(*DeidentifyContentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_ReidentifyContent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ReidentifyContentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).ReidentifyContent(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta2.DlpService/ReidentifyContent", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).ReidentifyContent(ctx, req.(*ReidentifyContentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_InspectDataSource_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(InspectDataSourceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).InspectDataSource(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta2.DlpService/InspectDataSource", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).InspectDataSource(ctx, req.(*InspectDataSourceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_AnalyzeDataSourceRisk_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AnalyzeDataSourceRiskRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).AnalyzeDataSourceRisk(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta2.DlpService/AnalyzeDataSourceRisk", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).AnalyzeDataSourceRisk(ctx, req.(*AnalyzeDataSourceRiskRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_ListInfoTypes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListInfoTypesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).ListInfoTypes(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta2.DlpService/ListInfoTypes", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).ListInfoTypes(ctx, req.(*ListInfoTypesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_CreateInspectTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateInspectTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).CreateInspectTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta2.DlpService/CreateInspectTemplate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).CreateInspectTemplate(ctx, req.(*CreateInspectTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_UpdateInspectTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateInspectTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).UpdateInspectTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta2.DlpService/UpdateInspectTemplate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).UpdateInspectTemplate(ctx, req.(*UpdateInspectTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_GetInspectTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetInspectTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).GetInspectTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta2.DlpService/GetInspectTemplate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).GetInspectTemplate(ctx, req.(*GetInspectTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_ListInspectTemplates_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListInspectTemplatesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).ListInspectTemplates(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta2.DlpService/ListInspectTemplates", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).ListInspectTemplates(ctx, req.(*ListInspectTemplatesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_DeleteInspectTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteInspectTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).DeleteInspectTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta2.DlpService/DeleteInspectTemplate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).DeleteInspectTemplate(ctx, req.(*DeleteInspectTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_CreateDeidentifyTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateDeidentifyTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).CreateDeidentifyTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta2.DlpService/CreateDeidentifyTemplate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).CreateDeidentifyTemplate(ctx, req.(*CreateDeidentifyTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_UpdateDeidentifyTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateDeidentifyTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).UpdateDeidentifyTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta2.DlpService/UpdateDeidentifyTemplate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).UpdateDeidentifyTemplate(ctx, req.(*UpdateDeidentifyTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_GetDeidentifyTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetDeidentifyTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).GetDeidentifyTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta2.DlpService/GetDeidentifyTemplate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).GetDeidentifyTemplate(ctx, req.(*GetDeidentifyTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_ListDeidentifyTemplates_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListDeidentifyTemplatesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).ListDeidentifyTemplates(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta2.DlpService/ListDeidentifyTemplates", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).ListDeidentifyTemplates(ctx, req.(*ListDeidentifyTemplatesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_DeleteDeidentifyTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteDeidentifyTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).DeleteDeidentifyTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta2.DlpService/DeleteDeidentifyTemplate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).DeleteDeidentifyTemplate(ctx, req.(*DeleteDeidentifyTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_CreateJobTrigger_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateJobTriggerRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).CreateJobTrigger(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta2.DlpService/CreateJobTrigger", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).CreateJobTrigger(ctx, req.(*CreateJobTriggerRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_UpdateJobTrigger_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateJobTriggerRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).UpdateJobTrigger(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta2.DlpService/UpdateJobTrigger", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).UpdateJobTrigger(ctx, req.(*UpdateJobTriggerRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_GetJobTrigger_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetJobTriggerRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).GetJobTrigger(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta2.DlpService/GetJobTrigger", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).GetJobTrigger(ctx, req.(*GetJobTriggerRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_ListJobTriggers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListJobTriggersRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).ListJobTriggers(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta2.DlpService/ListJobTriggers", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).ListJobTriggers(ctx, req.(*ListJobTriggersRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_DeleteJobTrigger_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteJobTriggerRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).DeleteJobTrigger(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta2.DlpService/DeleteJobTrigger", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).DeleteJobTrigger(ctx, req.(*DeleteJobTriggerRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_ListDlpJobs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListDlpJobsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).ListDlpJobs(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta2.DlpService/ListDlpJobs", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).ListDlpJobs(ctx, req.(*ListDlpJobsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_GetDlpJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetDlpJobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).GetDlpJob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta2.DlpService/GetDlpJob", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).GetDlpJob(ctx, req.(*GetDlpJobRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_DeleteDlpJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteDlpJobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).DeleteDlpJob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta2.DlpService/DeleteDlpJob", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).DeleteDlpJob(ctx, req.(*DeleteDlpJobRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _DlpService_CancelDlpJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CancelDlpJobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DlpServiceServer).CancelDlpJob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.privacy.dlp.v2beta2.DlpService/CancelDlpJob", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DlpServiceServer).CancelDlpJob(ctx, req.(*CancelDlpJobRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _DlpService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.privacy.dlp.v2beta2.DlpService", + HandlerType: (*DlpServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "InspectContent", + Handler: _DlpService_InspectContent_Handler, + }, + { + MethodName: "RedactImage", + Handler: _DlpService_RedactImage_Handler, + }, + { + MethodName: "DeidentifyContent", + Handler: _DlpService_DeidentifyContent_Handler, + }, + { + MethodName: "ReidentifyContent", + Handler: _DlpService_ReidentifyContent_Handler, + }, + { + MethodName: "InspectDataSource", + Handler: _DlpService_InspectDataSource_Handler, + }, + { + MethodName: "AnalyzeDataSourceRisk", + Handler: _DlpService_AnalyzeDataSourceRisk_Handler, + }, + { + MethodName: "ListInfoTypes", + Handler: _DlpService_ListInfoTypes_Handler, + }, + { + MethodName: "CreateInspectTemplate", + Handler: _DlpService_CreateInspectTemplate_Handler, + }, + { + MethodName: "UpdateInspectTemplate", + Handler: _DlpService_UpdateInspectTemplate_Handler, + }, + { + MethodName: "GetInspectTemplate", + Handler: _DlpService_GetInspectTemplate_Handler, + }, + { + MethodName: "ListInspectTemplates", + Handler: _DlpService_ListInspectTemplates_Handler, + }, + { + MethodName: "DeleteInspectTemplate", + Handler: _DlpService_DeleteInspectTemplate_Handler, + }, + { + MethodName: "CreateDeidentifyTemplate", + Handler: _DlpService_CreateDeidentifyTemplate_Handler, + }, + { + MethodName: "UpdateDeidentifyTemplate", + Handler: _DlpService_UpdateDeidentifyTemplate_Handler, + }, + { + MethodName: "GetDeidentifyTemplate", + Handler: _DlpService_GetDeidentifyTemplate_Handler, + }, + { + MethodName: "ListDeidentifyTemplates", + Handler: _DlpService_ListDeidentifyTemplates_Handler, + }, + { + MethodName: "DeleteDeidentifyTemplate", + Handler: _DlpService_DeleteDeidentifyTemplate_Handler, + }, + { + MethodName: "CreateJobTrigger", + Handler: _DlpService_CreateJobTrigger_Handler, + }, + { + MethodName: "UpdateJobTrigger", + Handler: _DlpService_UpdateJobTrigger_Handler, + }, + { + MethodName: "GetJobTrigger", + Handler: _DlpService_GetJobTrigger_Handler, + }, + { + MethodName: "ListJobTriggers", + Handler: _DlpService_ListJobTriggers_Handler, + }, + { + MethodName: "DeleteJobTrigger", + Handler: _DlpService_DeleteJobTrigger_Handler, + }, + { + MethodName: "ListDlpJobs", + Handler: _DlpService_ListDlpJobs_Handler, + }, + { + MethodName: "GetDlpJob", + Handler: _DlpService_GetDlpJob_Handler, + }, + { + MethodName: "DeleteDlpJob", + Handler: _DlpService_DeleteDlpJob_Handler, + }, + { + MethodName: "CancelDlpJob", + Handler: _DlpService_CancelDlpJob_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/privacy/dlp/v2beta2/dlp.proto", +} + +func init() { proto.RegisterFile("google/privacy/dlp/v2beta2/dlp.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 7722 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x7d, 0x5b, 0x6c, 0x23, 0x57, + 0x96, 0x98, 0x8a, 0x14, 0x25, 0xf2, 0x90, 0x94, 0xa8, 0xab, 0x47, 0xab, 0xd9, 0xdd, 0xee, 0x76, + 0x79, 0xdc, 0xd3, 0x96, 0x6d, 0xc9, 0x96, 0xdd, 0xe3, 0x71, 0x7b, 0xec, 0x31, 0x45, 0xb1, 0x5b, + 0x6a, 0x4b, 0xa2, 0x5c, 0xa4, 0xda, 0x6e, 0xdb, 0x71, 0xa5, 0x44, 0x5e, 0x51, 0xd5, 0x22, 0xab, + 0xd8, 0x55, 0xc5, 0x96, 0xe8, 0xcd, 0x26, 0x9b, 0x04, 0x9b, 0xec, 0x66, 0x83, 0x64, 0x17, 0x3b, + 0xc8, 0x24, 0x98, 0x20, 0xb3, 0x0b, 0xcc, 0xc7, 0x66, 0xb1, 0xc8, 0x13, 0xc8, 0xc7, 0xee, 0x04, + 0x48, 0x76, 0x3e, 0xb2, 0xc8, 0xe3, 0x6b, 0x81, 0x01, 0x82, 0x60, 0x91, 0x60, 0x93, 0x60, 0x91, + 0x07, 0xf2, 0x42, 0x32, 0x7f, 0x09, 0x82, 0xfb, 0xa8, 0x27, 0x8b, 0xc5, 0xa2, 0xa4, 0x46, 0xb2, + 0xfb, 0x25, 0xd6, 0xb9, 0xe7, 0x9c, 0x7b, 0xee, 0xb9, 0xe7, 0x9e, 0x7b, 0xee, 0xb9, 0x0f, 0xc1, + 0xd7, 0x5a, 0xba, 0xde, 0x6a, 0xe3, 0xb5, 0xae, 0xa1, 0x3e, 0x53, 0x1a, 0xfd, 0xb5, 0x66, 0xbb, + 0xbb, 0xf6, 0x6c, 0xfd, 0x10, 0x5b, 0xca, 0x3a, 0xf9, 0xbd, 0xda, 0x35, 0x74, 0x4b, 0x47, 0x45, + 0x86, 0xb5, 0xca, 0xb1, 0x56, 0x49, 0x09, 0xc7, 0x2a, 0x5e, 0xe7, 0x1c, 0x94, 0xae, 0xba, 0xa6, + 0x68, 0x9a, 0x6e, 0x29, 0x96, 0xaa, 0x6b, 0x26, 0xa3, 0x2c, 0xde, 0x89, 0xe0, 0x6f, 0x5a, 0xba, + 0xa1, 0xb4, 0x30, 0xc7, 0x7c, 0xc1, 0xc1, 0xd4, 0x2d, 0xfd, 0xb0, 0x77, 0xb4, 0xd6, 0xec, 0x19, + 0x94, 0x15, 0x2f, 0xbf, 0x16, 0x2c, 0xc7, 0x9d, 0xae, 0xd5, 0xe7, 0x85, 0xb7, 0x82, 0x85, 0x47, + 0x2a, 0x6e, 0x37, 0xe5, 0x8e, 0x62, 0x9e, 0x70, 0x8c, 0x9b, 0x41, 0x0c, 0x4b, 0xed, 0x60, 0xd3, + 0x52, 0x3a, 0xbc, 0x8d, 0xc5, 0x2b, 0x1c, 0xc1, 0xe8, 0x36, 0xd6, 0x4c, 0x4b, 0xb1, 0x7a, 0x76, + 0x13, 0x96, 0x78, 0x81, 0xd5, 0xef, 0xe2, 0xb5, 0xa6, 0x62, 0xe1, 0x80, 0x40, 0x1c, 0xde, 0xd7, + 0x8f, 0x4e, 0x31, 0x3e, 0x09, 0x2b, 0x24, 0x55, 0xe9, 0x47, 0x4d, 0x85, 0x4b, 0x2b, 0xfe, 0xd5, + 0x29, 0xc8, 0x6f, 0x6b, 0x66, 0x17, 0x37, 0xac, 0xb2, 0xae, 0x1d, 0xa9, 0x2d, 0x54, 0x06, 0x50, + 0xb5, 0x23, 0x5d, 0x26, 0xe8, 0xe6, 0xb2, 0x70, 0x2b, 0x79, 0x27, 0xbb, 0xfe, 0xb5, 0xd5, 0xe1, + 0x5a, 0x5f, 0xdd, 0xd6, 0x8e, 0xf4, 0x7a, 0xbf, 0x8b, 0xa5, 0x8c, 0xca, 0x7f, 0x99, 0x68, 0x17, + 0x66, 0x3a, 0xaa, 0x26, 0xb7, 0xd5, 0x13, 0xdc, 0x56, 0x8f, 0x75, 0xbd, 0xb9, 0x9c, 0xb8, 0x25, + 0xdc, 0x99, 0x59, 0xbf, 0x1d, 0xc5, 0x68, 0xc7, 0xc1, 0x96, 0xf2, 0x1d, 0x55, 0x73, 0x3f, 0x51, + 0x15, 0xa6, 0xda, 0x6a, 0x47, 0xb5, 0xcc, 0xe5, 0xe4, 0x2d, 0xe1, 0x4e, 0x76, 0xfd, 0x9d, 0x68, + 0x79, 0x3c, 0xcd, 0x59, 0xbd, 0xaf, 0x6a, 0x4d, 0x55, 0x6b, 0xed, 0x50, 0x72, 0x89, 0xb3, 0x41, + 0x2f, 0x41, 0x5e, 0xd5, 0x1a, 0xed, 0x5e, 0x13, 0xcb, 0x4f, 0x7b, 0xba, 0x85, 0x97, 0x27, 0x6f, + 0x09, 0x77, 0xd2, 0x52, 0x8e, 0x03, 0x3f, 0x26, 0x30, 0xf4, 0x1a, 0x20, 0x7c, 0xc6, 0x90, 0x3c, + 0x1a, 0x49, 0x51, 0xcc, 0x02, 0x2f, 0xd9, 0x76, 0x9a, 0xfc, 0x08, 0xe6, 0x1a, 0x3d, 0xd3, 0xd2, + 0x3b, 0x5e, 0xe4, 0x29, 0xaa, 0xbe, 0x95, 0x28, 0x71, 0xcb, 0x94, 0xc8, 0x51, 0xe2, 0x6c, 0xc3, + 0xf7, 0x6d, 0x16, 0x7f, 0x92, 0x80, 0xbc, 0xaf, 0x11, 0xe8, 0x4d, 0x58, 0xec, 0x28, 0x67, 0xf2, + 0x11, 0x03, 0x9a, 0x72, 0x17, 0x1b, 0xb2, 0x6a, 0xe1, 0xce, 0xb2, 0x70, 0x4b, 0xb8, 0x93, 0x92, + 0x50, 0x47, 0x39, 0xe3, 0x04, 0xe6, 0x3e, 0x36, 0xb6, 0x2d, 0xdc, 0x41, 0xef, 0xc0, 0xf2, 0x00, + 0x89, 0x81, 0x9f, 0xf6, 0xb0, 0x69, 0xd1, 0x9e, 0x49, 0x49, 0x8b, 0x7e, 0x2a, 0x89, 0x15, 0xa2, + 0x3f, 0x2d, 0x40, 0x71, 0xb0, 0x32, 0xbb, 0x81, 0xcb, 0x49, 0xda, 0xbe, 0xca, 0x39, 0xbb, 0xc3, + 0x31, 0x1d, 0xfa, 0x29, 0x2d, 0x05, 0x04, 0xe7, 0x85, 0xc5, 0x1e, 0x31, 0x51, 0x0f, 0x22, 0x2a, + 0x41, 0xc6, 0x15, 0x41, 0xa0, 0x16, 0x11, 0xcf, 0x42, 0xd3, 0xb6, 0x85, 0xa2, 0x17, 0x21, 0xe7, + 0x6d, 0x16, 0x57, 0x42, 0xd6, 0x23, 0x81, 0xf8, 0x5d, 0x01, 0xb2, 0x65, 0x5d, 0xb3, 0xb0, 0x66, + 0x51, 0x1d, 0x22, 0x98, 0x74, 0x2a, 0xcc, 0x48, 0xf4, 0x37, 0x5a, 0x80, 0xc9, 0xa6, 0x62, 0x29, + 0x94, 0x3c, 0xb7, 0x35, 0x21, 0xd1, 0x2f, 0xb4, 0x04, 0xa9, 0x67, 0x4a, 0xbb, 0x87, 0xa9, 0xb5, + 0x66, 0xb6, 0x26, 0x24, 0xf6, 0x89, 0xde, 0x85, 0x94, 0xa5, 0x1c, 0xb6, 0x99, 0xb5, 0x65, 0xd7, + 0x5f, 0x8c, 0x92, 0xb9, 0x4e, 0x10, 0x09, 0x29, 0xa5, 0xd8, 0xc8, 0x42, 0x86, 0xb0, 0xa6, 0xfd, + 0x2c, 0xfe, 0x48, 0x80, 0x14, 0x2d, 0x47, 0xef, 0xc3, 0xf4, 0x31, 0x56, 0x9a, 0xd8, 0xb0, 0x47, + 0xea, 0x4b, 0x51, 0x3c, 0xef, 0x13, 0x4f, 0xb4, 0xdd, 0x94, 0x6c, 0x1a, 0xf4, 0x2e, 0x4c, 0x1a, + 0xfa, 0x29, 0x69, 0x3d, 0xa1, 0x7d, 0x79, 0xa4, 0x3c, 0xab, 0x92, 0x7e, 0x2a, 0x51, 0x92, 0xe2, + 0x87, 0x90, 0x94, 0xf4, 0x53, 0xf4, 0x2e, 0x4c, 0xd1, 0xb6, 0xd9, 0xf5, 0x47, 0xb6, 0xe9, 0x11, + 0xc1, 0x94, 0x38, 0x81, 0xf8, 0xa7, 0x1c, 0xcf, 0x23, 0x61, 0xb3, 0xd7, 0xb6, 0xd0, 0xb7, 0x21, + 0xed, 0xf4, 0x47, 0xac, 0xd6, 0x50, 0x5c, 0xc9, 0x21, 0x42, 0xaf, 0x03, 0x72, 0xec, 0xd4, 0x32, + 0x7a, 0x5a, 0x43, 0xb1, 0x30, 0xf3, 0x3c, 0x69, 0x69, 0xce, 0x2e, 0xa9, 0xdb, 0x05, 0xe2, 0x7f, + 0x4d, 0xc0, 0x34, 0x67, 0x82, 0x16, 0x20, 0xc5, 0x1c, 0x01, 0xeb, 0x5d, 0xf6, 0xe1, 0x37, 0xb4, + 0xc4, 0xb9, 0x0c, 0xed, 0x3e, 0x80, 0xc7, 0x0b, 0x26, 0xc7, 0xf2, 0x82, 0x1e, 0x4a, 0xf4, 0x21, + 0xa4, 0xdb, 0x7a, 0x83, 0xce, 0x42, 0xdc, 0x7c, 0x22, 0x25, 0xd9, 0xe1, 0xb8, 0x92, 0x43, 0x85, + 0xde, 0x83, 0x6c, 0xc3, 0xc0, 0x8a, 0x85, 0x65, 0x32, 0x09, 0x2c, 0x4f, 0x51, 0x26, 0x45, 0x97, + 0x09, 0x9b, 0x8c, 0x56, 0xeb, 0xf6, 0x64, 0x24, 0x01, 0x43, 0x27, 0x00, 0xb4, 0x09, 0x40, 0x55, + 0x42, 0xc7, 0xfe, 0xf2, 0x34, 0xa5, 0x8d, 0xb4, 0x17, 0xea, 0x42, 0x89, 0x3e, 0xa4, 0xcc, 0x53, + 0xfb, 0xa7, 0xf8, 0xc3, 0x24, 0xa4, 0x6d, 0xc9, 0xd0, 0x87, 0x00, 0x87, 0x7d, 0x0b, 0xcb, 0x86, + 0xa2, 0xb5, 0xec, 0x61, 0x1c, 0x69, 0x3e, 0x12, 0x41, 0x94, 0x32, 0x84, 0x88, 0xfe, 0x44, 0x0f, + 0x61, 0xb6, 0xa1, 0x37, 0x71, 0x57, 0x57, 0x35, 0x8b, 0xb3, 0x49, 0xc4, 0x65, 0x33, 0xe3, 0x50, + 0xda, 0xbc, 0xb2, 0x6a, 0x47, 0x69, 0x61, 0xf9, 0x50, 0x3f, 0xc3, 0x26, 0x77, 0x6c, 0xaf, 0x44, + 0x76, 0x36, 0x41, 0x77, 0xf4, 0x0c, 0x94, 0x7a, 0x83, 0x10, 0x13, 0x65, 0x19, 0xb8, 0xa1, 0x1b, + 0x4d, 0xf9, 0x04, 0xf7, 0x79, 0x6f, 0x45, 0x2a, 0x4b, 0xa2, 0xd8, 0x1f, 0xe1, 0xbe, 0x94, 0x31, + 0xec, 0x9f, 0xe8, 0x03, 0x32, 0x1c, 0x48, 0xe8, 0xa0, 0x36, 0xe9, 0xa4, 0x13, 0x77, 0x70, 0x1f, + 0xb1, 0x1f, 0x68, 0x1f, 0x66, 0xa8, 0xef, 0x90, 0x1d, 0xbb, 0x61, 0x5d, 0xfe, 0xca, 0xc8, 0x61, + 0xee, 0x34, 0x2a, 0x6f, 0x79, 0x3f, 0xc5, 0xd7, 0x20, 0xef, 0x2b, 0x47, 0xd7, 0x20, 0x63, 0xe8, + 0xa7, 0xb2, 0xaa, 0x35, 0xf1, 0x19, 0xed, 0xc1, 0xa4, 0x94, 0x36, 0xf4, 0xd3, 0x6d, 0xf2, 0x2d, + 0xae, 0x41, 0x8a, 0xa9, 0x76, 0x01, 0x52, 0xa6, 0xa5, 0x18, 0x16, 0xc7, 0x60, 0x1f, 0xa8, 0x00, + 0x49, 0xac, 0xb1, 0xd1, 0x99, 0x94, 0xc8, 0x4f, 0xb1, 0x01, 0x79, 0x9f, 0x4e, 0x09, 0x8a, 0xa5, + 0x77, 0xf9, 0xb4, 0x46, 0x7e, 0x12, 0x1f, 0xdc, 0xc6, 0x47, 0xf6, 0x9c, 0x45, 0x7f, 0x13, 0xf6, + 0xa7, 0x6a, 0xd3, 0x3a, 0xa6, 0x83, 0x2b, 0x25, 0xb1, 0x0f, 0xb4, 0x04, 0x53, 0xc7, 0x58, 0x6d, + 0x1d, 0x5b, 0x54, 0xff, 0x29, 0x89, 0x7f, 0x89, 0xdf, 0x9d, 0x04, 0x24, 0xe1, 0xa6, 0xd2, 0xb0, + 0x68, 0x5d, 0xf6, 0x3c, 0xb7, 0x04, 0x53, 0x5d, 0xc5, 0xc0, 0x9a, 0xc5, 0x1d, 0x00, 0xff, 0x22, + 0x4a, 0x54, 0x99, 0x93, 0x92, 0x1b, 0x74, 0x06, 0xe3, 0x16, 0xf6, 0x4a, 0xec, 0x29, 0x4f, 0xca, + 0xab, 0xbe, 0xf8, 0xea, 0x06, 0x30, 0x53, 0xb1, 0x27, 0x50, 0x52, 0x5b, 0x86, 0x42, 0xa8, 0xbf, + 0x70, 0x8a, 0xe9, 0xbc, 0x42, 0x64, 0xcf, 0xf1, 0xe2, 0x4d, 0x32, 0xb5, 0xfc, 0x14, 0x5c, 0x61, + 0xc5, 0x06, 0x6d, 0x83, 0xaa, 0x6b, 0x5c, 0x2e, 0x12, 0x98, 0x10, 0x93, 0x2d, 0x47, 0xdb, 0x59, + 0xb0, 0xe1, 0xab, 0xfc, 0x83, 0x33, 0xe3, 0x22, 0x2f, 0xaa, 0x21, 0x50, 0xb3, 0xf8, 0xaf, 0x04, + 0x58, 0x08, 0xc3, 0x47, 0xe5, 0x73, 0x4e, 0xc8, 0x5b, 0x13, 0x1e, 0x4f, 0x79, 0x07, 0x66, 0x59, + 0xa3, 0x64, 0xa5, 0xdd, 0x96, 0x2d, 0x7c, 0xc6, 0xba, 0x39, 0xbd, 0x35, 0x21, 0xe5, 0x59, 0x41, + 0xa9, 0xdd, 0xae, 0xe3, 0x33, 0x8b, 0x8c, 0x7b, 0x6f, 0xf3, 0xdb, 0xba, 0xc1, 0xe3, 0xc2, 0xc8, + 0x71, 0x5f, 0x26, 0x88, 0xd2, 0x8c, 0xe1, 0xca, 0xde, 0xd6, 0x8d, 0x8d, 0x34, 0x4c, 0x59, 0x8a, + 0xd1, 0xc2, 0x96, 0x58, 0x86, 0x14, 0x05, 0x11, 0xb3, 0x33, 0x70, 0x93, 0xb6, 0x23, 0x21, 0x91, + 0x9f, 0xc4, 0xc4, 0x5a, 0x06, 0xc6, 0x1a, 0x15, 0x28, 0x21, 0xb1, 0x0f, 0x62, 0x8c, 0x87, 0xf6, + 0x2c, 0x9f, 0x90, 0xe8, 0x6f, 0xb1, 0x01, 0xf3, 0x3e, 0x25, 0x9b, 0x5d, 0x5d, 0x33, 0x31, 0x7a, + 0x19, 0x78, 0xbd, 0xb8, 0x29, 0x53, 0xdd, 0x52, 0xee, 0x39, 0xbb, 0x61, 0xb8, 0x49, 0xd1, 0x09, + 0x1a, 0x3e, 0xb3, 0x0c, 0x86, 0xe7, 0x68, 0x20, 0x23, 0xe5, 0x1d, 0x28, 0x69, 0xbf, 0xf8, 0x17, + 0x92, 0xb0, 0xbc, 0x89, 0xd5, 0x26, 0xd6, 0x2c, 0xf5, 0xa8, 0xcf, 0x63, 0x94, 0x51, 0x96, 0xfc, + 0x18, 0xe6, 0x9a, 0x0e, 0x8d, 0xdf, 0x98, 0x5f, 0x8b, 0x52, 0x9b, 0xaf, 0x22, 0x62, 0x1c, 0x85, + 0x66, 0x00, 0x12, 0x32, 0x48, 0x92, 0x17, 0x1c, 0x24, 0xef, 0xc1, 0x24, 0x8d, 0x68, 0x99, 0xef, + 0xfc, 0x7a, 0x74, 0xb7, 0x3a, 0x21, 0x9a, 0x44, 0x89, 0xd0, 0x3a, 0x2c, 0xda, 0xe2, 0x58, 0xb8, + 0xd3, 0x6d, 0x93, 0x29, 0x4f, 0x53, 0x3a, 0x98, 0x7a, 0xd1, 0x8c, 0x34, 0xcf, 0x0b, 0xeb, 0xbc, + 0x6c, 0x4f, 0xe9, 0x60, 0xf4, 0x4d, 0x58, 0xf6, 0x68, 0xc7, 0x4f, 0x36, 0x45, 0xc9, 0x96, 0xdc, + 0x72, 0x2f, 0xa5, 0xf8, 0x6b, 0x02, 0x5c, 0x0d, 0xe9, 0x0c, 0xde, 0xf1, 0x76, 0x43, 0x84, 0xf3, + 0x34, 0x64, 0x0f, 0xd2, 0xfa, 0x33, 0x6c, 0x3c, 0x53, 0xf1, 0x29, 0xef, 0xa9, 0xf5, 0x48, 0xdf, + 0x6d, 0x28, 0x9a, 0x79, 0xa4, 0x1b, 0x1d, 0xea, 0x3d, 0xab, 0x9c, 0x52, 0x72, 0x78, 0x50, 0xbb, + 0x91, 0xce, 0x61, 0x37, 0xc6, 0xe5, 0xd8, 0x8d, 0xf1, 0x47, 0xd3, 0x6e, 0x8c, 0x11, 0x76, 0x63, + 0x0c, 0xb7, 0x1b, 0xe9, 0x0f, 0x87, 0xdd, 0xfc, 0x0f, 0x01, 0x16, 0x5d, 0xb5, 0xc7, 0x31, 0x9a, + 0xcb, 0x9f, 0x36, 0x6d, 0x85, 0x24, 0x2f, 0xb5, 0x67, 0x27, 0x87, 0xf6, 0xac, 0xf8, 0x39, 0x2c, + 0x05, 0xdb, 0xcc, 0xfb, 0xa6, 0x04, 0x53, 0x06, 0x5d, 0xb1, 0xf0, 0xde, 0x89, 0xd3, 0x28, 0xb6, + 0xc4, 0x91, 0x38, 0xa1, 0xf8, 0x57, 0x04, 0x58, 0xe6, 0x25, 0x64, 0x5a, 0xaf, 0xe9, 0x3d, 0xa3, + 0x31, 0x32, 0x16, 0xf9, 0x08, 0xe0, 0x89, 0x7e, 0x38, 0xc6, 0x10, 0xe4, 0x35, 0x3c, 0xd4, 0x0f, + 0xb9, 0x4e, 0x33, 0x4f, 0xec, 0x9f, 0x68, 0x11, 0xa6, 0x08, 0x33, 0xb5, 0xc9, 0x43, 0x90, 0xd4, + 0x13, 0xfd, 0x70, 0xbb, 0x29, 0xfe, 0x38, 0x01, 0xf3, 0xd5, 0x9e, 0xd5, 0xed, 0x59, 0x35, 0x96, + 0x12, 0xe3, 0xe8, 0x25, 0x7b, 0xe9, 0x1a, 0xa3, 0xc9, 0x1b, 0x6a, 0xeb, 0xe3, 0x1e, 0x36, 0xfa, + 0xfe, 0x25, 0x2c, 0x52, 0x20, 0xaf, 0x53, 0xce, 0xb2, 0xd9, 0x38, 0xc6, 0x1d, 0x85, 0x2f, 0x86, + 0xbe, 0x15, 0xc5, 0x2a, 0x44, 0x14, 0x1b, 0x46, 0x79, 0x48, 0x39, 0xdd, 0xf3, 0x25, 0xfe, 0xa2, + 0x00, 0x39, 0x6f, 0x31, 0xba, 0x01, 0x57, 0xab, 0x07, 0xf5, 0xfd, 0x83, 0xba, 0x5c, 0x2b, 0x6f, + 0x55, 0x76, 0x4b, 0xf2, 0xc1, 0x5e, 0x6d, 0xbf, 0x52, 0xde, 0xbe, 0xbf, 0x5d, 0xd9, 0x2c, 0x4c, + 0xa0, 0x39, 0xc8, 0x6f, 0x94, 0x6a, 0xdb, 0x65, 0xb9, 0x5c, 0xdd, 0x39, 0xd8, 0xdd, 0xab, 0x15, + 0x04, 0x34, 0x0b, 0xd9, 0x07, 0xe5, 0x9a, 0x03, 0x48, 0xa0, 0x45, 0x98, 0xdb, 0x2c, 0xd5, 0x4b, + 0xb5, 0x7a, 0x55, 0xaa, 0x38, 0xe0, 0x24, 0x01, 0x6f, 0x6c, 0x3f, 0x90, 0x3f, 0x3e, 0xa8, 0x48, + 0x8f, 0x1d, 0xf0, 0x24, 0x21, 0x2f, 0xed, 0xec, 0x38, 0x80, 0xd4, 0xc6, 0x14, 0xcb, 0x1a, 0x88, + 0x1d, 0x40, 0x76, 0xd4, 0x53, 0xb3, 0x14, 0x4b, 0x35, 0x2d, 0xb5, 0x61, 0x5e, 0x46, 0x26, 0x63, + 0x01, 0x52, 0x0d, 0xbd, 0xa7, 0x59, 0x3c, 0x92, 0x66, 0x1f, 0xe2, 0x7f, 0x99, 0x0c, 0x31, 0xb0, + 0x4d, 0x6c, 0x29, 0x6a, 0xdb, 0x44, 0x06, 0x71, 0xe9, 0xd4, 0xd6, 0x70, 0x53, 0xd6, 0xbb, 0x34, + 0x49, 0xca, 0xed, 0x29, 0x4e, 0x2a, 0x67, 0x80, 0xe1, 0xaa, 0x64, 0x73, 0xab, 0x32, 0x66, 0xc4, + 0xd7, 0xfb, 0x21, 0xa8, 0xe6, 0x0c, 0x1a, 0x36, 0x82, 0xdf, 0x3b, 0x67, 0x45, 0xde, 0x61, 0x54, + 0xfc, 0x1d, 0x01, 0x0a, 0xc1, 0xba, 0x51, 0x0b, 0xae, 0x9a, 0x9a, 0xd2, 0x35, 0x8f, 0x75, 0x4b, + 0x0e, 0x8e, 0x7a, 0xae, 0xe3, 0x57, 0x63, 0x54, 0x6e, 0x3b, 0x03, 0xe9, 0x8a, 0xcd, 0x2d, 0x50, + 0x10, 0x18, 0x8f, 0xc9, 0x0b, 0x8d, 0xc7, 0xe2, 0x3f, 0x14, 0x60, 0x8a, 0xe7, 0x41, 0xbe, 0x0e, + 0xb3, 0x5d, 0x43, 0x6f, 0x60, 0xd3, 0xc4, 0x4d, 0x99, 0xac, 0x76, 0x4d, 0xbe, 0x72, 0x9a, 0x71, + 0xc0, 0x1b, 0x04, 0x4a, 0xdc, 0x9a, 0xa5, 0x5b, 0x4a, 0x5b, 0xc6, 0xa6, 0xa5, 0x76, 0x14, 0xcb, + 0x41, 0x67, 0xa6, 0x30, 0x4f, 0x0b, 0x2b, 0x76, 0x19, 0xa3, 0x79, 0x04, 0xb3, 0x8e, 0xc5, 0xc9, + 0xa6, 0xa5, 0x58, 0xf6, 0x5a, 0x77, 0x35, 0x8e, 0xdd, 0xb9, 0xa6, 0x4b, 0xfc, 0xb3, 0x0b, 0x33, + 0xc5, 0x5f, 0x11, 0x60, 0xde, 0xc6, 0xda, 0xc4, 0x66, 0xc3, 0x50, 0x69, 0x77, 0x90, 0x20, 0x99, + 0x7a, 0x5a, 0x9e, 0x35, 0x23, 0xbf, 0xd1, 0x8b, 0x90, 0x6b, 0xaa, 0x66, 0xb7, 0xad, 0xf4, 0x99, + 0x17, 0x66, 0x41, 0x6e, 0x96, 0xc3, 0xe8, 0xbc, 0x2a, 0x41, 0xce, 0xec, 0x75, 0xbb, 0xba, 0xc1, + 0x1a, 0x45, 0x65, 0x9c, 0x59, 0x5f, 0x8b, 0x25, 0xa3, 0x4d, 0xb7, 0xd1, 0x97, 0xb2, 0xa6, 0xfb, + 0x21, 0xd6, 0x60, 0x61, 0x47, 0x35, 0x2d, 0x27, 0xb5, 0x6a, 0xfb, 0xdb, 0x97, 0x20, 0xdf, 0x56, + 0xb4, 0x56, 0x8f, 0x2c, 0xab, 0x1a, 0x7a, 0xd3, 0x96, 0x35, 0x67, 0x03, 0xcb, 0x7a, 0x13, 0x13, + 0xa7, 0x7c, 0xa4, 0xb6, 0x2d, 0x6c, 0x70, 0x69, 0xf9, 0x97, 0xd8, 0x82, 0xc5, 0x00, 0x53, 0x3e, + 0x4b, 0xec, 0x85, 0xe4, 0xd1, 0x63, 0xc9, 0xef, 0xd1, 0x9e, 0x27, 0xa5, 0x2e, 0x7e, 0x5f, 0x80, + 0xeb, 0x25, 0x4d, 0x69, 0xf7, 0xbf, 0xc2, 0x9e, 0x29, 0x43, 0x35, 0x4f, 0x46, 0xcf, 0xc5, 0x83, + 0xd3, 0xc6, 0x9b, 0x91, 0xab, 0x44, 0xd5, 0x3c, 0xa1, 0x35, 0x99, 0xaa, 0x39, 0xce, 0xdc, 0xf1, + 0xbf, 0x04, 0x58, 0x0c, 0xa5, 0x25, 0xe1, 0x00, 0xaf, 0x48, 0xee, 0x60, 0xcb, 0x50, 0x1b, 0x71, + 0xa6, 0x91, 0x7d, 0x06, 0xdb, 0xa5, 0x04, 0x52, 0xbe, 0xeb, 0xfd, 0x44, 0x3b, 0x90, 0x33, 0xa9, + 0x06, 0x64, 0x36, 0x2d, 0x25, 0xc6, 0x9c, 0x96, 0xa4, 0x2c, 0x23, 0x67, 0x69, 0xd4, 0x6f, 0xc1, + 0x34, 0x5b, 0x13, 0xda, 0x83, 0x41, 0x8c, 0x62, 0x54, 0xa2, 0xa8, 0x92, 0x4d, 0x22, 0xfe, 0xdb, + 0x59, 0xc8, 0xfb, 0x84, 0x45, 0xcf, 0x60, 0x49, 0xeb, 0x75, 0xb0, 0xa1, 0x36, 0x94, 0x36, 0x1b, + 0x64, 0xb6, 0xfa, 0x59, 0xbb, 0x3f, 0x88, 0xdd, 0xee, 0xd5, 0x3d, 0x9b, 0x0f, 0x1d, 0x66, 0x4c, + 0x9f, 0x5b, 0x13, 0xd2, 0x82, 0x16, 0x02, 0x47, 0x7f, 0x02, 0x96, 0x1b, 0x8a, 0x85, 0x5b, 0x7a, + 0x48, 0xcd, 0x4c, 0x43, 0x1f, 0xc6, 0xaf, 0xb9, 0xec, 0x72, 0xf2, 0xd7, 0xbd, 0xd4, 0x08, 0x2d, + 0x41, 0x4f, 0x00, 0x9d, 0xc8, 0x8a, 0xa6, 0x6b, 0xfd, 0x8e, 0x6a, 0xf5, 0xfd, 0x7e, 0xf1, 0x5e, + 0xfc, 0x7a, 0x3f, 0x2a, 0xd9, 0x2c, 0x9c, 0x1a, 0x0b, 0x27, 0x01, 0x18, 0xa9, 0xab, 0x2d, 0x37, + 0xd5, 0x67, 0xd8, 0x30, 0x3d, 0x75, 0x4d, 0x8e, 0x5b, 0xd7, 0xce, 0xa6, 0xcd, 0xc2, 0xad, 0xab, + 0x1d, 0x80, 0xa1, 0x53, 0xb8, 0x72, 0x22, 0x77, 0x94, 0xae, 0xed, 0x66, 0xdd, 0xa4, 0x0b, 0xcf, + 0xcb, 0x8d, 0xd1, 0x9d, 0x1f, 0xed, 0x2a, 0xdd, 0x8a, 0xc3, 0xc6, 0xed, 0xce, 0x93, 0x10, 0x78, + 0xf1, 0x63, 0x58, 0x08, 0xeb, 0x7e, 0xf4, 0x2e, 0xa4, 0x68, 0x92, 0x8f, 0x5b, 0x53, 0xac, 0xb4, + 0x20, 0xa3, 0x28, 0xd6, 0x60, 0x29, 0xbc, 0x5f, 0x2f, 0xc2, 0xf4, 0xbb, 0x02, 0x14, 0x82, 0xbd, + 0x86, 0x3e, 0x84, 0xcc, 0xd3, 0x9e, 0x62, 0xaa, 0xb2, 0xda, 0x1c, 0x6b, 0x73, 0x22, 0x4d, 0xa9, + 0xb6, 0x9b, 0x34, 0x38, 0x22, 0x8b, 0x23, 0xab, 0x4f, 0x3c, 0x4d, 0x8c, 0xec, 0x7b, 0x85, 0x22, + 0x13, 0x16, 0x98, 0xff, 0x2a, 0xfe, 0xba, 0x00, 0x85, 0x60, 0x1f, 0x5f, 0x82, 0x64, 0x75, 0x98, + 0x37, 0xb1, 0x66, 0xaa, 0x96, 0xfa, 0x0c, 0xcb, 0x8a, 0x65, 0x19, 0xea, 0x61, 0xcf, 0xb2, 0x9d, + 0x50, 0x2c, 0x5e, 0xc8, 0xa1, 0x2f, 0xd9, 0xe4, 0xc5, 0x5f, 0x9e, 0x86, 0x85, 0x30, 0xfb, 0x40, + 0xad, 0x41, 0x81, 0x1f, 0x5e, 0xcc, 0xe4, 0x56, 0xeb, 0x4a, 0xab, 0x85, 0x9b, 0x54, 0x1a, 0x4f, + 0xbb, 0x6e, 0x42, 0xd6, 0xc0, 0x2d, 0x66, 0xdf, 0x4d, 0x7b, 0x5e, 0x06, 0x06, 0xa2, 0xb3, 0xe0, + 0x19, 0x14, 0x94, 0xde, 0x99, 0xda, 0x56, 0x15, 0xa3, 0xcf, 0x3c, 0xaf, 0xed, 0x31, 0x77, 0x2f, + 0x28, 0x50, 0xc9, 0x66, 0xcb, 0xdc, 0xf3, 0xac, 0xe2, 0xfb, 0x36, 0x8b, 0xff, 0x49, 0x80, 0xac, + 0x47, 0xe8, 0x0b, 0x98, 0xab, 0x3f, 0x5b, 0x99, 0x38, 0x67, 0xb6, 0xf2, 0x26, 0x00, 0xdf, 0xee, + 0xb5, 0x94, 0x96, 0xb3, 0xd1, 0x97, 0x61, 0xb0, 0xba, 0xd2, 0x42, 0x6f, 0x03, 0x41, 0xc6, 0x86, + 0x81, 0x9b, 0xdc, 0x2f, 0x2d, 0x0d, 0xec, 0xb5, 0x54, 0x3a, 0x5d, 0xab, 0xcf, 0xd9, 0x52, 0xcc, + 0x8d, 0x14, 0x24, 0x2d, 0xa5, 0x55, 0xfc, 0xb9, 0x24, 0xcc, 0xf8, 0x35, 0x82, 0xbe, 0x6d, 0xaf, + 0xc0, 0x92, 0xe3, 0x4e, 0x75, 0x7c, 0xfd, 0x75, 0x3a, 0x68, 0x45, 0x9f, 0x5d, 0x6a, 0xa7, 0xad, + 0x7e, 0xcc, 0xec, 0x28, 0x68, 0x55, 0x12, 0x20, 0x03, 0xb7, 0x15, 0x3a, 0x58, 0x8e, 0xe8, 0xc2, + 0x40, 0x6b, 0xf4, 0xc7, 0x19, 0x2c, 0x73, 0x36, 0xf9, 0x7d, 0x9b, 0xba, 0x78, 0x0c, 0x39, 0x6f, + 0x6d, 0x17, 0x31, 0x87, 0x1b, 0xbe, 0x9e, 0x64, 0x36, 0xef, 0xf6, 0xa3, 0xb3, 0x80, 0xfb, 0x5b, + 0x2f, 0x0c, 0x89, 0xbf, 0xec, 0x55, 0x55, 0x03, 0x96, 0xdd, 0x55, 0xd5, 0x45, 0xc3, 0x9d, 0x25, + 0x87, 0x95, 0x3f, 0xb2, 0x90, 0xc1, 0x2d, 0x91, 0x2f, 0x16, 0x01, 0x2d, 0x38, 0x8c, 0x6a, 0x9e, + 0x50, 0xe8, 0x67, 0x85, 0xc1, 0xd8, 0xc5, 0xb7, 0x70, 0x8b, 0x1c, 0xe8, 0x51, 0x0a, 0x0a, 0x84, + 0x32, 0x6c, 0xb1, 0x33, 0x18, 0xca, 0xf0, 0x45, 0xd0, 0x2f, 0x08, 0x61, 0xb1, 0x0c, 0x97, 0x84, + 0x8d, 0xa7, 0xea, 0xb9, 0x25, 0x09, 0x4e, 0x81, 0x8e, 0x2c, 0x03, 0xa1, 0x0d, 0x97, 0xa6, 0xef, + 0x0f, 0x6d, 0xb8, 0x18, 0x6c, 0xf6, 0xdf, 0x3e, 0xb7, 0x18, 0xee, 0x9c, 0xe9, 0x08, 0xe0, 0x89, + 0x74, 0xdc, 0xaa, 0xbd, 0x91, 0x0e, 0xaf, 0x7a, 0xea, 0x82, 0x55, 0xbb, 0x93, 0xa2, 0x5b, 0x75, + 0x3b, 0x00, 0x43, 0x7f, 0x4e, 0x08, 0x89, 0x7c, 0xb8, 0x00, 0xd3, 0x17, 0x34, 0x06, 0xbf, 0x3f, + 0x71, 0x8d, 0xe1, 0x24, 0x04, 0x5e, 0xfc, 0x7d, 0x21, 0x18, 0x09, 0x71, 0x09, 0x3f, 0x80, 0x4c, + 0x47, 0xd5, 0x64, 0x76, 0xda, 0x22, 0xc6, 0x16, 0x32, 0x3b, 0x81, 0x90, 0xee, 0xa8, 0x1a, 0xfd, + 0x45, 0xe9, 0x95, 0x33, 0x4e, 0x9f, 0x88, 0x4f, 0xaf, 0x9c, 0x31, 0xfa, 0x87, 0x30, 0xfb, 0xb4, + 0xa7, 0x68, 0x96, 0xda, 0xc6, 0x32, 0x3f, 0x07, 0x31, 0x19, 0xf7, 0x1c, 0xc4, 0x8c, 0x4d, 0x49, + 0x3f, 0xcd, 0xe2, 0x7f, 0x48, 0x0e, 0xc6, 0x66, 0xbc, 0x99, 0xbf, 0x29, 0xc0, 0x8b, 0x94, 0xbd, + 0xeb, 0x3f, 0xe5, 0x63, 0xd5, 0xb4, 0xf4, 0x96, 0xa1, 0x74, 0xe4, 0xc3, 0x5e, 0xe3, 0x04, 0x5b, + 0xf6, 0x06, 0xa0, 0x7e, 0xc9, 0xa3, 0x62, 0x00, 0xbc, 0x65, 0x57, 0xbc, 0x41, 0xeb, 0x95, 0x5e, + 0xa0, 0x92, 0x39, 0xae, 0x39, 0x50, 0x6c, 0x16, 0x7f, 0x29, 0x01, 0x37, 0x47, 0xf0, 0x40, 0xef, + 0xc3, 0xb5, 0x60, 0xfb, 0xda, 0xfa, 0x29, 0x36, 0xe4, 0x43, 0xbd, 0xa7, 0x35, 0x79, 0xfa, 0x63, + 0xd9, 0x5f, 0xd1, 0x0e, 0x41, 0xd8, 0x20, 0xe5, 0x61, 0xe4, 0xbd, 0x6e, 0xd7, 0x21, 0x4f, 0x84, + 0x91, 0x1f, 0x10, 0x04, 0x46, 0x7e, 0x13, 0xb2, 0x4c, 0x87, 0xb2, 0xa9, 0x7e, 0xc5, 0x26, 0xd8, + 0xa4, 0x04, 0x0c, 0x54, 0x53, 0xbf, 0xc2, 0xa8, 0x0a, 0x79, 0x8e, 0xe0, 0xeb, 0xe4, 0x95, 0x91, + 0x9d, 0xec, 0xd4, 0x26, 0xe5, 0x18, 0x03, 0xde, 0xd7, 0xff, 0x3c, 0xe5, 0x8d, 0x98, 0x79, 0x2f, + 0xff, 0x3d, 0x01, 0x5e, 0xc2, 0x4f, 0x7b, 0xea, 0x33, 0xa5, 0x8d, 0xb5, 0x06, 0x96, 0x1b, 0x6d, + 0xc5, 0x34, 0x87, 0xf6, 0x73, 0xe3, 0xd2, 0xdc, 0x8e, 0x07, 0x10, 0xec, 0xdb, 0x5b, 0x1e, 0x79, + 0xca, 0x44, 0x9c, 0x81, 0xde, 0xfd, 0xbe, 0x00, 0x45, 0x97, 0xbe, 0x12, 0x40, 0x47, 0x1f, 0x41, + 0xc1, 0x09, 0x3a, 0xe4, 0x71, 0x4f, 0x0a, 0xcd, 0xd8, 0x21, 0x04, 0xd3, 0x1a, 0x7a, 0x1b, 0x96, + 0x06, 0xf5, 0x43, 0xbb, 0x8c, 0xf5, 0xf0, 0x42, 0x50, 0x5a, 0xd2, 0x79, 0xc5, 0x7f, 0x93, 0x80, + 0xab, 0x43, 0x5b, 0x88, 0x1e, 0x82, 0x18, 0xce, 0x33, 0xc4, 0x00, 0x5f, 0x08, 0xe3, 0xef, 0x31, + 0xc3, 0xe1, 0xbc, 0x06, 0xad, 0x31, 0x94, 0xd7, 0x38, 0x36, 0xf9, 0xf3, 0x42, 0xb8, 0x51, 0x36, + 0x9f, 0x87, 0x5d, 0x04, 0xfb, 0x35, 0x60, 0xce, 0x3f, 0x37, 0xed, 0x5d, 0x66, 0x71, 0x73, 0xfe, + 0xc7, 0x02, 0xbc, 0xea, 0xae, 0x92, 0xe2, 0xba, 0xaf, 0xc6, 0xa5, 0x4d, 0x69, 0x1e, 0x40, 0xd0, + 0xac, 0xbf, 0xee, 0xc8, 0xf5, 0x28, 0xda, 0x77, 0xfd, 0xa3, 0x04, 0x14, 0x5d, 0x36, 0xff, 0x1f, + 0x5a, 0x37, 0x2a, 0xc1, 0x0d, 0xad, 0xd7, 0x91, 0x9b, 0xaa, 0x69, 0xa9, 0x5a, 0xc3, 0x92, 0x03, + 0x1a, 0x37, 0xb9, 0xe5, 0x14, 0xb5, 0x5e, 0x67, 0x93, 0xe3, 0xd4, 0x7c, 0x8d, 0x37, 0xd1, 0x17, + 0xb0, 0x60, 0xe9, 0xdd, 0x41, 0xca, 0xf1, 0x9d, 0x1c, 0xb2, 0xf4, 0x6e, 0x80, 0x7b, 0xf1, 0x3f, + 0x27, 0xe0, 0xea, 0xd0, 0x9e, 0x40, 0xfb, 0xf0, 0xf2, 0x70, 0x1b, 0x19, 0x1c, 0x81, 0x2f, 0x0e, + 0xe9, 0x38, 0xcf, 0x20, 0x8c, 0xe4, 0x38, 0x38, 0x0e, 0x87, 0x71, 0xfc, 0x7f, 0x3b, 0x14, 0x23, + 0x6c, 0x79, 0xc4, 0x50, 0xfc, 0xdf, 0x93, 0xc1, 0x24, 0x02, 0x1f, 0x8e, 0xbf, 0x26, 0x40, 0x71, + 0x20, 0x98, 0x73, 0x46, 0x21, 0x37, 0xdb, 0x93, 0x4b, 0x8d, 0xe7, 0x02, 0xc0, 0xe0, 0x28, 0xbc, + 0x72, 0x12, 0x5e, 0x5c, 0xfc, 0x9e, 0x00, 0xd7, 0xfc, 0xa4, 0x7c, 0xad, 0xc7, 0x0d, 0xf6, 0x52, + 0x87, 0xdd, 0x1a, 0xcc, 0xbb, 0xdb, 0x27, 0x4e, 0x88, 0xcf, 0xad, 0x03, 0x39, 0x45, 0x8e, 0x2b, + 0x2c, 0x7e, 0x2f, 0x01, 0x37, 0x22, 0x1b, 0x86, 0x5e, 0x82, 0x3c, 0x89, 0x4a, 0x5d, 0x66, 0xcc, + 0x78, 0x73, 0x1d, 0x55, 0x73, 0xd8, 0x50, 0x24, 0xe5, 0x6c, 0xa0, 0xc6, 0x5c, 0x47, 0x39, 0x73, + 0x91, 0x02, 0xa6, 0x97, 0x1a, 0x30, 0xbd, 0xbf, 0x34, 0x60, 0x7a, 0xec, 0xc8, 0xb9, 0xfa, 0x3c, + 0x3b, 0xd2, 0xd7, 0x1b, 0x7e, 0xfb, 0xdb, 0x48, 0xdb, 0xfb, 0x7c, 0xa2, 0x0c, 0x33, 0xfe, 0x21, + 0x85, 0xde, 0xb1, 0xcf, 0x45, 0xc7, 0x8e, 0xd4, 0xf9, 0xc1, 0xe9, 0xf0, 0x3d, 0xce, 0xbf, 0x91, + 0x84, 0x14, 0x0b, 0xc3, 0x5f, 0x86, 0xbc, 0xaa, 0x59, 0xb8, 0x85, 0x0d, 0xcf, 0x52, 0x20, 0xb9, + 0x35, 0x21, 0xe5, 0x38, 0x98, 0xa1, 0xbd, 0x08, 0xd9, 0xa3, 0xb6, 0xae, 0x58, 0x9e, 0x78, 0x5f, + 0xd8, 0x9a, 0x90, 0x80, 0x02, 0x19, 0xca, 0x4b, 0x90, 0x33, 0x2d, 0x43, 0xd5, 0x5a, 0xb2, 0xff, + 0x04, 0x77, 0x96, 0x41, 0x9d, 0xea, 0x0e, 0x75, 0xbd, 0x8d, 0x15, 0x7b, 0xe5, 0x31, 0xc9, 0xcf, + 0xa9, 0xe5, 0x38, 0x98, 0xa1, 0x55, 0x60, 0xd6, 0xb9, 0xd9, 0xc1, 0x11, 0x53, 0xa3, 0x0e, 0xdd, + 0x6e, 0x4d, 0x48, 0x33, 0x0e, 0x11, 0x63, 0xf3, 0x0e, 0x00, 0x81, 0x70, 0x0e, 0x53, 0xfe, 0x54, + 0x92, 0xd5, 0xef, 0x62, 0x4a, 0x5d, 0x3d, 0xda, 0x54, 0xfa, 0x5b, 0x13, 0x52, 0x86, 0xe0, 0x32, + 0xc2, 0x75, 0x80, 0xa6, 0x62, 0xd9, 0x84, 0x6c, 0xc1, 0x36, 0xe7, 0x23, 0xdc, 0x54, 0x2c, 0x4c, + 0x68, 0x08, 0x1a, 0xa3, 0x29, 0xc3, 0x5c, 0x53, 0xe9, 0xcb, 0xfa, 0x91, 0x7c, 0x8a, 0xf1, 0x09, + 0x27, 0x4d, 0xd3, 0x8d, 0xfa, 0xa5, 0x00, 0x69, 0xbf, 0x7a, 0xf4, 0x09, 0xc6, 0x27, 0x44, 0xe2, + 0xa6, 0xfd, 0x41, 0x99, 0x38, 0x29, 0x93, 0x3f, 0x0e, 0x19, 0xe7, 0x18, 0x30, 0x2a, 0xd3, 0x13, + 0xec, 0xfc, 0xf0, 0x71, 0x8c, 0xac, 0xdb, 0x26, 0x3f, 0x7a, 0xbc, 0x35, 0x21, 0xa5, 0x9b, 0xfc, + 0xf7, 0xc6, 0x0c, 0xe4, 0xba, 0x8a, 0x61, 0xe2, 0x26, 0xbb, 0xb6, 0x21, 0x7e, 0x27, 0x01, 0x69, + 0x1b, 0x11, 0xbd, 0x4c, 0x0f, 0xe3, 0xdb, 0xd6, 0x35, 0xd8, 0x52, 0x7a, 0x3a, 0x1f, 0xa3, 0x6f, + 0x40, 0xd6, 0xd3, 0x44, 0x7e, 0x31, 0x65, 0x48, 0xe3, 0x88, 0x6a, 0xf8, 0x4f, 0xb4, 0x02, 0x93, + 0x54, 0xf6, 0x64, 0x54, 0x0f, 0x48, 0x14, 0x07, 0x3d, 0x04, 0xda, 0x0f, 0xf2, 0x57, 0xba, 0x66, + 0x9f, 0xf6, 0x7f, 0x3d, 0x4e, 0x63, 0x29, 0xa3, 0xcf, 0x74, 0x0d, 0x4b, 0x69, 0x8b, 0xff, 0x2a, + 0xbe, 0x09, 0x69, 0x1b, 0x8a, 0x5e, 0x86, 0x19, 0xfd, 0xe8, 0xc8, 0xc4, 0x96, 0xdc, 0x51, 0xb5, + 0x9e, 0xbd, 0x33, 0x9c, 0x92, 0xf2, 0x0c, 0xba, 0xcb, 0x80, 0xe2, 0x9f, 0x4d, 0x40, 0x21, 0x78, + 0xfe, 0x0a, 0x3d, 0x85, 0xab, 0xee, 0xce, 0xaf, 0xe5, 0x3b, 0xf3, 0x63, 0x72, 0x9d, 0xbd, 0x15, + 0x27, 0x0d, 0xea, 0x3f, 0x2e, 0x64, 0x6e, 0x4d, 0x48, 0x57, 0xd4, 0xf0, 0x22, 0xf4, 0x04, 0x96, + 0xf8, 0x41, 0xe8, 0x60, 0x7d, 0x71, 0xb6, 0x21, 0x29, 0xe5, 0x60, 0x6d, 0x8b, 0x46, 0x58, 0xc1, + 0x46, 0x01, 0x66, 0xfc, 0x95, 0x88, 0xdf, 0x49, 0xc3, 0x95, 0x7d, 0x43, 0xed, 0xd0, 0xd9, 0xdd, + 0x8f, 0x8e, 0x3e, 0x81, 0x19, 0x03, 0x77, 0xdb, 0x0a, 0x09, 0xb4, 0xbc, 0x3b, 0x73, 0xab, 0xd1, + 0x12, 0x51, 0x0a, 0x6a, 0xe4, 0xce, 0xd6, 0x4d, 0x9e, 0xf3, 0xe1, 0x5a, 0xae, 0x02, 0x3f, 0xd3, + 0xe9, 0xdf, 0x77, 0xbb, 0x33, 0xfa, 0x58, 0xae, 0xc3, 0x31, 0x67, 0x78, 0xbe, 0x11, 0x86, 0xc5, + 0xc6, 0xb1, 0x42, 0x4f, 0x7f, 0x1a, 0xf4, 0x16, 0x99, 0x7f, 0x63, 0x2d, 0x72, 0x4b, 0xb9, 0x6c, + 0x13, 0xee, 0x2a, 0xe6, 0x89, 0xc3, 0x7f, 0xbe, 0x31, 0x08, 0x46, 0x7d, 0xb8, 0xd1, 0x30, 0xfa, + 0x5d, 0x4b, 0x97, 0x6d, 0xbd, 0x1c, 0x1d, 0x9d, 0xc9, 0x47, 0x5d, 0xec, 0xdf, 0x5b, 0xbb, 0x1b, + 0x59, 0x1d, 0x65, 0xc0, 0xb5, 0x74, 0xff, 0xe8, 0xec, 0x7e, 0xd7, 0x55, 0xd3, 0xd5, 0xc6, 0xb0, + 0x42, 0xd4, 0x83, 0x6b, 0x47, 0xea, 0x19, 0x6e, 0xb2, 0xa5, 0x12, 0x9b, 0x4d, 0x88, 0x07, 0xf6, + 0xed, 0xb1, 0xbd, 0x1d, 0x9d, 0xd1, 0x3d, 0xc3, 0x4d, 0x32, 0x1f, 0x6e, 0xd8, 0xc4, 0x4e, 0xbd, + 0xcb, 0x47, 0x43, 0xca, 0xd0, 0xa7, 0x50, 0x18, 0xa8, 0x6b, 0x6a, 0xf4, 0xf1, 0x90, 0xc1, 0x2a, + 0x66, 0x0f, 0x03, 0x9c, 0xfb, 0x70, 0xc3, 0x56, 0xe2, 0xa9, 0x6a, 0x1d, 0xbb, 0xf7, 0xa5, 0xec, + 0x6a, 0xa6, 0x47, 0xeb, 0x92, 0x2b, 0xea, 0x13, 0xd5, 0x3a, 0xb6, 0x07, 0x9e, 0xab, 0x4b, 0x63, + 0x58, 0x21, 0x7a, 0x04, 0x05, 0xea, 0x78, 0xba, 0x8a, 0xe1, 0x58, 0x60, 0x9a, 0xd6, 0x16, 0x19, + 0xc7, 0x13, 0x07, 0xb3, 0xaf, 0x18, 0xae, 0x0d, 0xd2, 0x49, 0xc8, 0x85, 0xa0, 0x2f, 0x00, 0x71, + 0xf3, 0x38, 0x56, 0xcc, 0x63, 0x9b, 0x73, 0x66, 0xf4, 0x99, 0x17, 0x66, 0x13, 0x5b, 0x8a, 0x79, + 0xec, 0xee, 0xb0, 0x36, 0x02, 0x30, 0x7a, 0x36, 0x99, 0xcc, 0x0d, 0xe6, 0xb1, 0x7a, 0xe4, 0x88, + 0x9d, 0x1d, 0xdd, 0x17, 0xc4, 0x6d, 0xd6, 0x08, 0x8d, 0xdb, 0x17, 0x4d, 0x3f, 0x28, 0xc4, 0x2d, + 0xfc, 0x37, 0x01, 0x66, 0xfc, 0xed, 0x45, 0x9f, 0xc3, 0x2c, 0x55, 0x98, 0xa5, 0xcb, 0xfc, 0xa4, + 0x35, 0x75, 0x07, 0x33, 0xd1, 0x0e, 0xd1, 0xcf, 0xc4, 0xf9, 0x94, 0xf2, 0x84, 0x57, 0x5d, 0xaf, + 0x30, 0x4e, 0xe2, 0xcf, 0x08, 0xcc, 0x81, 0x93, 0x32, 0x74, 0x15, 0x16, 0xeb, 0xdb, 0xbb, 0x15, + 0x79, 0xbf, 0x24, 0xd5, 0x03, 0x87, 0xd1, 0xd2, 0x30, 0xf9, 0xb8, 0x52, 0x92, 0x0a, 0x02, 0xca, + 0x40, 0x6a, 0xb7, 0xba, 0x57, 0xdf, 0x2a, 0x24, 0x50, 0x01, 0x72, 0x9b, 0xa5, 0xc7, 0x72, 0xf5, + 0xbe, 0xcc, 0x20, 0x49, 0x34, 0x0b, 0x59, 0x0e, 0xf9, 0xa4, 0x52, 0xf9, 0xa8, 0x30, 0x49, 0x50, + 0xc8, 0x2f, 0x02, 0xa1, 0xf4, 0x29, 0x82, 0xb2, 0x55, 0x3d, 0x90, 0x08, 0x64, 0xb3, 0xf4, 0xb8, + 0x30, 0x25, 0x7e, 0x0a, 0x85, 0x60, 0x3f, 0xa0, 0x4d, 0x00, 0xde, 0xa3, 0x27, 0xb8, 0xcf, 0xbd, + 0xdf, 0xcb, 0xa3, 0x7b, 0x92, 0x5e, 0x52, 0x69, 0xd8, 0x3f, 0xc5, 0x3a, 0xa0, 0x41, 0xaf, 0x88, + 0x3e, 0x80, 0x8c, 0x86, 0x4f, 0xc7, 0x4e, 0xcb, 0x6a, 0xf8, 0x94, 0xfe, 0x12, 0xaf, 0xc1, 0xd5, + 0xa1, 0xf6, 0x2f, 0xce, 0x40, 0xce, 0xeb, 0x30, 0xc5, 0x3f, 0x48, 0x40, 0x9e, 0x38, 0x3a, 0xb3, + 0xae, 0x6f, 0xb7, 0x34, 0xdd, 0xc0, 0x68, 0x15, 0x90, 0xe3, 0xe2, 0x4c, 0xd2, 0xa9, 0xe6, 0x89, + 0xca, 0xae, 0x91, 0x64, 0xa8, 0xf9, 0x39, 0x65, 0x75, 0xbd, 0x76, 0xa2, 0x76, 0xd1, 0x9f, 0x84, + 0x6b, 0x0d, 0xbd, 0xd3, 0xd1, 0x35, 0xd9, 0x4f, 0xa6, 0x52, 0x76, 0x3c, 0x42, 0x78, 0x7f, 0x94, + 0xa3, 0x75, 0xea, 0x5f, 0x2d, 0x53, 0x66, 0x3e, 0x18, 0xf1, 0x44, 0x0d, 0x07, 0x6c, 0xd7, 0xce, + 0xca, 0xc4, 0xef, 0x0a, 0x30, 0x1f, 0x42, 0x83, 0x6e, 0x83, 0x58, 0xae, 0xee, 0xee, 0x56, 0xf7, + 0xe4, 0xf2, 0x56, 0x49, 0xaa, 0xc9, 0xf5, 0xaa, 0xbc, 0xfd, 0x60, 0xaf, 0x2a, 0x55, 0x02, 0x96, + 0x93, 0x85, 0xe9, 0xbd, 0x83, 0xdd, 0x8a, 0xb4, 0x5d, 0x2e, 0x08, 0x68, 0x01, 0x0a, 0xa5, 0x9d, + 0xfd, 0xad, 0x92, 0x7c, 0xb0, 0xbf, 0x5f, 0x91, 0xe4, 0x72, 0xa9, 0x56, 0x29, 0x24, 0x5c, 0xe8, + 0x4e, 0xf5, 0x13, 0x1b, 0x4a, 0x6d, 0x69, 0xff, 0x60, 0xaf, 0x5c, 0x3f, 0x28, 0xd5, 0xb7, 0xab, + 0x7b, 0x85, 0x49, 0x34, 0x03, 0xf0, 0xc9, 0xd6, 0x76, 0xbd, 0x52, 0xdb, 0x2f, 0x95, 0x2b, 0x85, + 0xd4, 0x46, 0x0e, 0xc0, 0x55, 0x89, 0xf8, 0x1f, 0x89, 0x9c, 0x21, 0x73, 0xc7, 0xab, 0x30, 0x47, + 0x26, 0x26, 0xea, 0x47, 0xed, 0x62, 0x7e, 0x08, 0xa9, 0xc0, 0x0b, 0x1c, 0x32, 0xf4, 0x35, 0x98, + 0xd1, 0x7a, 0x9d, 0x43, 0x6c, 0x10, 0x0d, 0x93, 0x52, 0x7e, 0x99, 0x27, 0xc7, 0xa0, 0x75, 0x9d, + 0x30, 0x26, 0xab, 0x23, 0x03, 0x93, 0x15, 0x2f, 0x96, 0x75, 0xa3, 0x89, 0xd9, 0x05, 0x8f, 0x34, + 0x99, 0x1a, 0x29, 0xb0, 0x4a, 0x60, 0xe8, 0x73, 0x58, 0x08, 0xed, 0xb0, 0xc9, 0xd1, 0x97, 0xb7, + 0x7c, 0x8a, 0x96, 0x50, 0x63, 0xb0, 0x53, 0x7e, 0x24, 0xc0, 0xf2, 0xb0, 0x79, 0x05, 0x6d, 0x40, + 0x36, 0x98, 0x9c, 0x88, 0x65, 0xe2, 0xd0, 0x76, 0x13, 0x15, 0x1b, 0x90, 0x0d, 0xa6, 0x23, 0xe2, + 0xf1, 0xe8, 0x45, 0xa6, 0x26, 0x04, 0xef, 0xfa, 0x50, 0xfc, 0x41, 0x02, 0x66, 0x83, 0xc2, 0xef, + 0xc0, 0xb4, 0x9d, 0x73, 0x63, 0xab, 0xe6, 0xf5, 0x31, 0xe6, 0x3b, 0xfe, 0x2d, 0xd9, 0x2c, 0x8a, + 0xbf, 0x2d, 0xc0, 0x14, 0x5f, 0xf7, 0xbe, 0x05, 0xc9, 0x8e, 0xaa, 0xc5, 0xd7, 0x06, 0xc1, 0xa6, + 0x44, 0xca, 0x59, 0xfc, 0xe6, 0x13, 0x6c, 0xb4, 0x07, 0x73, 0x7c, 0x0e, 0xec, 0x60, 0xcd, 0xf2, + 0xac, 0xd5, 0x62, 0xb1, 0x28, 0x78, 0x68, 0x99, 0xc3, 0xf9, 0xf1, 0x24, 0x5c, 0x1d, 0x1a, 0xbd, + 0x5c, 0x8e, 0xab, 0x44, 0xef, 0xc3, 0x74, 0x43, 0xd7, 0x9c, 0x5b, 0x3d, 0x71, 0xaf, 0xf3, 0x71, + 0x1a, 0x74, 0x06, 0xb3, 0xdc, 0x49, 0x29, 0xed, 0xee, 0xb1, 0x72, 0x88, 0xd9, 0x36, 0xe8, 0x4c, + 0xf4, 0x1e, 0xdc, 0xd0, 0x46, 0xad, 0xde, 0x3f, 0x3a, 0x63, 0x3e, 0x67, 0x8f, 0x6e, 0xad, 0x97, + 0x38, 0x53, 0x32, 0xf7, 0xb3, 0x7a, 0x6c, 0x08, 0x7a, 0x05, 0xf8, 0xa5, 0x74, 0xb7, 0xe6, 0x14, + 0xf7, 0xa5, 0x33, 0xac, 0xc0, 0x41, 0x5d, 0x82, 0x94, 0xa1, 0x34, 0xd5, 0x33, 0x1a, 0x48, 0xa5, + 0xb6, 0x26, 0x24, 0xf6, 0x49, 0x0f, 0xcc, 0xf4, 0x0c, 0x43, 0x6f, 0x29, 0x96, 0xe7, 0x32, 0x3d, + 0x8f, 0x4c, 0xe2, 0x9d, 0x78, 0x9e, 0x73, 0x18, 0xd8, 0x20, 0xf1, 0x3b, 0x02, 0x5c, 0x19, 0xd2, + 0x0c, 0xb4, 0x02, 0xb7, 0xef, 0xdf, 0xff, 0x54, 0xe6, 0xfe, 0x73, 0xaf, 0x54, 0xdf, 0x7e, 0x54, + 0x91, 0xa9, 0x0b, 0xdc, 0xa8, 0xd4, 0xa3, 0xfc, 0x27, 0x99, 0x3c, 0x2b, 0x9f, 0x96, 0x36, 0x2b, + 0xe5, 0xed, 0xdd, 0xd2, 0x4e, 0x21, 0x81, 0xae, 0xc3, 0xb2, 0xeb, 0x4a, 0x19, 0x0b, 0xd9, 0x46, + 0x4f, 0xa2, 0x39, 0xc8, 0xfb, 0x41, 0x93, 0x1b, 0x00, 0x69, 0x5b, 0x51, 0xe2, 0xcf, 0x27, 0x20, + 0xe3, 0x58, 0x03, 0xda, 0x83, 0x0c, 0x0d, 0x46, 0x54, 0xfb, 0x94, 0xe6, 0x88, 0x05, 0x47, 0xdd, + 0x46, 0x76, 0x58, 0xd0, 0x15, 0xbe, 0x0d, 0x25, 0xfc, 0x7a, 0xda, 0xa9, 0xa1, 0x74, 0xbb, 0xd8, + 0x76, 0x20, 0x91, 0xfc, 0x0e, 0x6c, 0x64, 0x1f, 0x3f, 0x87, 0x05, 0x92, 0x20, 0x7b, 0xd2, 0x31, + 0x65, 0x9b, 0x63, 0x8c, 0x15, 0xc6, 0x47, 0x1d, 0xf3, 0x93, 0x41, 0x96, 0x70, 0xe2, 0x80, 0x37, + 0xd2, 0x30, 0xc5, 0xce, 0x29, 0x88, 0x77, 0x00, 0x0d, 0x36, 0x28, 0xec, 0x80, 0xb0, 0x78, 0x1b, + 0xd0, 0xa0, 0xa8, 0xa8, 0x00, 0x49, 0x7b, 0xfc, 0xe5, 0x24, 0xf2, 0x53, 0xfc, 0x12, 0xe6, 0x43, + 0x04, 0x20, 0x5e, 0x91, 0x13, 0xcb, 0x2e, 0x01, 0x70, 0x10, 0x41, 0xb8, 0x0d, 0xb3, 0xee, 0x80, + 0xf6, 0x9e, 0x41, 0xce, 0x3b, 0xc3, 0x95, 0xde, 0x01, 0xf9, 0x89, 0x00, 0xb3, 0x81, 0x18, 0x13, + 0xdd, 0x81, 0x82, 0xc7, 0x6d, 0xcb, 0x4d, 0xa5, 0x6f, 0x2f, 0xc2, 0x67, 0x5c, 0xc7, 0xbc, 0xa9, + 0xf4, 0x4d, 0x82, 0xe9, 0x99, 0x24, 0x18, 0x26, 0x9b, 0xeb, 0x66, 0xdc, 0x69, 0x80, 0x62, 0x7a, + 0x5c, 0x43, 0xf2, 0x1c, 0xae, 0xe1, 0xbe, 0xcf, 0x3f, 0x4d, 0x8e, 0xe1, 0x9f, 0xe8, 0x91, 0x25, + 0xfb, 0x83, 0x74, 0x55, 0x07, 0x5b, 0xc7, 0x7a, 0x53, 0xfc, 0xd7, 0x09, 0xb8, 0x32, 0x64, 0xbd, + 0x8f, 0x2c, 0x98, 0x1d, 0xcc, 0x1e, 0x8c, 0x3c, 0x93, 0x36, 0x84, 0xdb, 0x10, 0xb8, 0x14, 0xac, + 0xa2, 0xf8, 0x2f, 0x04, 0x58, 0x0a, 0xc7, 0xbd, 0x9c, 0x17, 0x4b, 0x34, 0x58, 0xee, 0xda, 0xb9, + 0x82, 0x40, 0xb6, 0x82, 0x8f, 0xac, 0xb7, 0x46, 0x9c, 0xde, 0x09, 0xcb, 0x33, 0x48, 0x57, 0xba, + 0xe1, 0x05, 0xe2, 0x77, 0x92, 0x30, 0x4f, 0x3b, 0x32, 0xd0, 0x98, 0xf7, 0x60, 0x8a, 0x1e, 0x4b, + 0x1a, 0xeb, 0x64, 0x22, 0x27, 0x41, 0xdb, 0x90, 0x69, 0xe8, 0x5a, 0x53, 0xa5, 0x52, 0x27, 0x47, + 0xaf, 0x9f, 0x58, 0x8a, 0xa5, 0x6c, 0x93, 0x48, 0x2e, 0x35, 0xea, 0x46, 0xe8, 0x63, 0xf2, 0xdc, + 0xfa, 0xd8, 0x9a, 0x18, 0xaa, 0x91, 0xe8, 0xfc, 0x54, 0xea, 0x79, 0xe4, 0xa7, 0x42, 0x16, 0x87, + 0xbf, 0x27, 0xc0, 0x62, 0x68, 0xe2, 0x09, 0x35, 0x61, 0x91, 0x5d, 0xc7, 0x0f, 0x37, 0xfe, 0xb5, + 0x91, 0xfd, 0x14, 0xb0, 0x8c, 0x85, 0xa3, 0x41, 0xa0, 0x89, 0xbe, 0x84, 0x79, 0x9e, 0x31, 0x33, + 0x7b, 0xdd, 0xae, 0x81, 0x4d, 0x93, 0xa7, 0xcb, 0x92, 0xa3, 0x52, 0x88, 0x4c, 0xea, 0x9a, 0x4b, + 0x25, 0x21, 0x23, 0x08, 0x32, 0xc5, 0x2f, 0x61, 0x6e, 0x00, 0xd1, 0x6f, 0x36, 0xc2, 0x45, 0xcc, + 0x46, 0xfc, 0x51, 0x0a, 0x66, 0x03, 0xc5, 0xe8, 0x31, 0x64, 0xf1, 0x99, 0xdb, 0x96, 0x18, 0x4f, + 0xf8, 0x04, 0x38, 0xac, 0x56, 0x5c, 0x72, 0xc9, 0xcb, 0xab, 0xf8, 0xcf, 0x04, 0xc8, 0xb8, 0x15, + 0x5d, 0xe0, 0x10, 0xe0, 0x43, 0x48, 0xeb, 0x5d, 0x6c, 0x28, 0x16, 0xbf, 0x4b, 0x3e, 0x33, 0x2a, + 0x13, 0xd8, 0xa6, 0x1d, 0xa6, 0xb4, 0xab, 0x9c, 0x4a, 0x72, 0xe8, 0xdd, 0x6d, 0x8e, 0xc9, 0xf1, + 0xb6, 0x39, 0x8a, 0x0d, 0x00, 0xa7, 0x31, 0x26, 0x3a, 0x00, 0x70, 0xf4, 0x6a, 0x5b, 0xd9, 0xdd, + 0x71, 0xb4, 0xe6, 0x76, 0x90, 0x87, 0x51, 0xf1, 0x57, 0x13, 0x90, 0xf5, 0xe8, 0x13, 0x19, 0x64, + 0x96, 0x6a, 0xd1, 0x33, 0x76, 0x8e, 0x06, 0x58, 0xf2, 0xe3, 0xc1, 0x39, 0xbb, 0x68, 0x75, 0x87, + 0xf1, 0x73, 0x54, 0x33, 0xdb, 0xf6, 0x03, 0xd0, 0xa7, 0xbe, 0xa6, 0x31, 0x83, 0xf8, 0xc6, 0xb9, + 0x9a, 0x46, 0x86, 0xb7, 0x87, 0x97, 0xf8, 0x2d, 0x98, 0x0d, 0xd4, 0x8e, 0x6e, 0xc1, 0xf5, 0x9d, + 0xea, 0x83, 0xed, 0x72, 0x69, 0x47, 0xae, 0xee, 0x57, 0xa4, 0x52, 0xbd, 0x2a, 0x05, 0xe2, 0xbf, + 0x69, 0x48, 0x96, 0xf6, 0x36, 0x0b, 0x82, 0xb3, 0x71, 0xf1, 0xf7, 0x05, 0x58, 0x0a, 0xbf, 0x15, + 0x4b, 0xd6, 0xba, 0x8e, 0x03, 0x08, 0xdc, 0xb7, 0x2a, 0x78, 0x0a, 0xd8, 0x65, 0xab, 0x36, 0x2c, + 0xfb, 0xbd, 0x85, 0x6c, 0xf6, 0x3a, 0x1d, 0xc5, 0x50, 0x9d, 0x63, 0xd3, 0x6f, 0xc6, 0xbf, 0x98, + 0x5b, 0xa3, 0xa4, 0x7d, 0xe9, 0x8a, 0x15, 0x02, 0x56, 0xb1, 0x29, 0xfe, 0xe6, 0x14, 0x2c, 0x86, + 0x92, 0x5c, 0xc6, 0x35, 0x43, 0x67, 0x6c, 0x25, 0xc6, 0x1e, 0x5b, 0x9f, 0x07, 0xbd, 0x2c, 0xef, + 0xf1, 0x73, 0x4d, 0xa8, 0x01, 0x56, 0xc3, 0xdd, 0x72, 0xea, 0x32, 0xdd, 0xf2, 0x23, 0x98, 0x0d, + 0xb8, 0x65, 0x9e, 0x2a, 0x1e, 0xd3, 0x25, 0xcf, 0xf8, 0x5d, 0x32, 0x7a, 0x0c, 0xd3, 0x6c, 0xb7, + 0xd4, 0x3e, 0x32, 0xf0, 0xed, 0xb1, 0xed, 0x61, 0xd5, 0xb6, 0x0b, 0x76, 0x35, 0xd2, 0xe6, 0x17, + 0x6e, 0xa8, 0xd3, 0xe1, 0x86, 0x5a, 0xfc, 0xbe, 0x00, 0x79, 0x1f, 0x1f, 0x77, 0xcb, 0x55, 0xf0, + 0x6c, 0xb9, 0xa2, 0x2f, 0x61, 0xd2, 0xb9, 0x19, 0x30, 0x13, 0x1d, 0xf0, 0x85, 0x0b, 0x1b, 0xd0, + 0x36, 0xad, 0xab, 0xac, 0x37, 0xb1, 0x44, 0xf9, 0xa2, 0x65, 0x98, 0x6e, 0xb2, 0x7d, 0x68, 0x7e, + 0xb5, 0xcc, 0xfe, 0x14, 0xbf, 0x84, 0xe5, 0x61, 0xb4, 0x64, 0xad, 0x57, 0x97, 0x4a, 0x7b, 0xb5, + 0xfb, 0x55, 0x69, 0x97, 0x66, 0xb2, 0x64, 0xa9, 0x52, 0x3b, 0xd8, 0xa9, 0xcb, 0xe5, 0xea, 0x66, + 0x48, 0xae, 0xac, 0x76, 0x50, 0x2e, 0x57, 0x6a, 0x35, 0x96, 0x68, 0xad, 0x48, 0x52, 0x55, 0x2a, + 0x24, 0xc4, 0xa7, 0x90, 0xae, 0x35, 0x8e, 0x71, 0xb3, 0xd7, 0xc6, 0xe8, 0x73, 0xb8, 0x66, 0xe0, + 0x46, 0xa3, 0x67, 0x18, 0xf4, 0x24, 0x4e, 0x17, 0x1b, 0xaa, 0xde, 0x94, 0xed, 0x47, 0x00, 0xf9, + 0x00, 0xba, 0x3a, 0xb0, 0x89, 0xbb, 0xc9, 0x11, 0x58, 0x86, 0xde, 0xa1, 0xdf, 0xa7, 0xe4, 0x76, + 0x21, 0x09, 0xb2, 0xd9, 0x95, 0x5b, 0xf1, 0x1f, 0x24, 0x60, 0x36, 0x78, 0xa7, 0xf4, 0x9c, 0xd7, + 0x25, 0x6f, 0x41, 0xb6, 0xe9, 0x5e, 0x1b, 0xe4, 0xba, 0xf3, 0x82, 0x82, 0xaf, 0x3f, 0x4d, 0x8e, + 0xf5, 0xfa, 0xd3, 0x7b, 0x90, 0xed, 0x75, 0xdd, 0xdd, 0xdb, 0xd4, 0x68, 0x62, 0x86, 0x4e, 0x89, + 0x07, 0xdf, 0x02, 0x98, 0xba, 0xd8, 0x5b, 0x00, 0xe2, 0x6f, 0x27, 0x00, 0x6d, 0x0e, 0xbc, 0xaa, + 0xf0, 0x47, 0x51, 0x77, 0xa1, 0x8f, 0xb6, 0x4c, 0x5d, 0xc6, 0xa3, 0x2d, 0xe2, 0x1f, 0x4c, 0x01, + 0x3c, 0xd4, 0x0f, 0xeb, 0x86, 0xda, 0x6a, 0x61, 0xe3, 0xf9, 0x29, 0xaf, 0x0a, 0x59, 0xbb, 0xfb, + 0x9f, 0xe8, 0x87, 0x5c, 0x79, 0x63, 0x5d, 0x93, 0x26, 0x53, 0xbc, 0xea, 0xc0, 0x48, 0xa8, 0x66, + 0x31, 0xa1, 0x6d, 0x27, 0x1f, 0x19, 0xaa, 0xb9, 0x6d, 0x5c, 0xe5, 0x7f, 0x25, 0x87, 0x1e, 0x6d, + 0xc2, 0x14, 0x36, 0x0c, 0xdd, 0xb0, 0x8f, 0xcd, 0xbc, 0x16, 0x93, 0x53, 0x85, 0x10, 0x49, 0x9c, + 0x36, 0x68, 0x1f, 0xd3, 0x17, 0xb1, 0x8f, 0xf4, 0x58, 0xf6, 0xf1, 0x01, 0xe4, 0xdb, 0x8a, 0x69, + 0xc9, 0x46, 0x4f, 0x63, 0xe4, 0x99, 0x91, 0xe4, 0x59, 0x42, 0x20, 0xf5, 0x34, 0x4a, 0x5f, 0x81, + 0x29, 0xf6, 0xc0, 0xe8, 0x32, 0x50, 0x8f, 0xfe, 0x7a, 0xcc, 0xf6, 0xd7, 0x28, 0x91, 0xc4, 0x89, + 0x8b, 0x9f, 0xc2, 0xb4, 0x6d, 0x47, 0x1b, 0x90, 0x36, 0xb9, 0x1f, 0x8d, 0x13, 0x69, 0xd8, 0x3e, + 0x77, 0x6b, 0x42, 0x72, 0xe8, 0x36, 0x32, 0x30, 0xcd, 0x7b, 0xa8, 0xf8, 0x14, 0x52, 0x54, 0xd7, + 0xe8, 0x35, 0x77, 0x66, 0x60, 0x6c, 0x91, 0xcd, 0xd6, 0xe8, 0x36, 0x6c, 0x79, 0x6c, 0x14, 0x74, + 0x8f, 0x9d, 0x99, 0xa1, 0x2d, 0xb6, 0x57, 0x4f, 0x91, 0x3a, 0x75, 0xb1, 0xc5, 0x2d, 0x98, 0x62, + 0xec, 0xd0, 0x12, 0xa0, 0x5a, 0xbd, 0x54, 0x3f, 0xa8, 0x0d, 0xce, 0x21, 0x5b, 0x95, 0xd2, 0x4e, + 0x7d, 0xeb, 0x71, 0x41, 0x40, 0x00, 0x53, 0xfb, 0xa5, 0x83, 0x5a, 0x65, 0xb3, 0x90, 0x40, 0x79, + 0xc8, 0x94, 0x4b, 0x7b, 0xe5, 0xca, 0xce, 0x4e, 0x65, 0xb3, 0x90, 0xdc, 0x48, 0x41, 0xf2, 0x89, + 0x7e, 0x28, 0xfe, 0x4e, 0x02, 0xa6, 0xd8, 0x9d, 0x61, 0xf4, 0x08, 0xf2, 0xa6, 0xf2, 0x0c, 0xcb, + 0x9e, 0x77, 0x0e, 0x47, 0xa6, 0xd8, 0x18, 0xe9, 0x6a, 0x4d, 0x79, 0x86, 0xed, 0xb7, 0x29, 0xb7, + 0x26, 0xa4, 0x9c, 0xe9, 0xf9, 0x46, 0xbb, 0x30, 0xdd, 0xed, 0x1d, 0xca, 0x66, 0xef, 0x30, 0xce, + 0x83, 0x2f, 0x9c, 0xe3, 0x7e, 0xef, 0xb0, 0xad, 0x9a, 0xc7, 0x75, 0x7d, 0xbf, 0x77, 0x58, 0xeb, + 0x1d, 0x6e, 0x4d, 0x48, 0x53, 0x5d, 0xfa, 0xab, 0xd8, 0x84, 0x9c, 0xb7, 0x3a, 0x54, 0x77, 0x9e, + 0xee, 0xf0, 0x1d, 0x96, 0x58, 0x1b, 0xf3, 0xe9, 0x0e, 0xfb, 0xb5, 0x0e, 0x7e, 0xbd, 0xf5, 0xeb, + 0x30, 0x1b, 0x10, 0x81, 0x44, 0x1d, 0x96, 0xde, 0xe5, 0x17, 0xa6, 0x32, 0x12, 0xfb, 0x20, 0x53, + 0x26, 0xbb, 0x6b, 0x2d, 0xfe, 0x6d, 0x01, 0xae, 0x97, 0xe9, 0xd8, 0x09, 0xbe, 0xd2, 0x30, 0xe2, + 0x12, 0xfc, 0x23, 0x28, 0x0c, 0xbc, 0x05, 0x91, 0x18, 0xff, 0x2d, 0x88, 0xd9, 0xc0, 0x4b, 0x31, + 0xe8, 0x26, 0x64, 0x9d, 0x17, 0x65, 0x9c, 0xfb, 0xf0, 0x60, 0x83, 0xb6, 0x9b, 0xe2, 0x3f, 0x11, + 0xe0, 0xfa, 0x01, 0x1d, 0xb0, 0x43, 0x24, 0x0e, 0x73, 0xbc, 0xcf, 0x4b, 0x5a, 0xd7, 0xd7, 0xd0, + 0x8d, 0xb7, 0xe4, 0x10, 0x67, 0x41, 0xe3, 0xe2, 0x5d, 0xc5, 0x3c, 0xb1, 0x7d, 0x0d, 0xf9, 0x2d, + 0xae, 0xc1, 0xd5, 0x07, 0xd8, 0x8a, 0xdf, 0x0a, 0xf1, 0x29, 0x5c, 0x63, 0x4f, 0x23, 0xf8, 0x28, + 0xcc, 0x51, 0x5d, 0x75, 0x03, 0xa0, 0x4b, 0xdf, 0xc7, 0xd3, 0x4f, 0xf8, 0x8b, 0x6b, 0x19, 0x29, + 0x43, 0x20, 0x75, 0x02, 0x40, 0xd7, 0x80, 0x7e, 0xb8, 0x1b, 0x5e, 0x29, 0x29, 0x4d, 0x00, 0x74, + 0xbb, 0xeb, 0x57, 0x04, 0xb8, 0x1e, 0x5e, 0x27, 0x7f, 0x95, 0xe1, 0x53, 0x98, 0x0b, 0x6a, 0xd6, + 0x5e, 0x5b, 0x8f, 0xa5, 0xda, 0x42, 0x40, 0xb5, 0x26, 0xba, 0x0d, 0xb3, 0x1a, 0x3e, 0xb3, 0xe4, + 0x01, 0xd9, 0xf3, 0x04, 0xbc, 0x6f, 0xcb, 0x2f, 0xae, 0xc3, 0xf5, 0x4d, 0xdc, 0xc6, 0xe3, 0xd8, + 0x83, 0xf8, 0xd7, 0x04, 0xb8, 0xc2, 0xcc, 0xde, 0xf5, 0xc1, 0xa3, 0xd4, 0xf8, 0x00, 0xb2, 0x4f, + 0xf4, 0x43, 0x99, 0x3b, 0x52, 0x6e, 0x3e, 0xb7, 0xe3, 0xf9, 0x77, 0x09, 0x9e, 0xb8, 0x91, 0xc1, + 0x0d, 0x00, 0xce, 0xc4, 0xb5, 0xf0, 0x0c, 0x87, 0x6c, 0x37, 0xc9, 0x5a, 0xf9, 0x0a, 0x33, 0xf0, + 0x41, 0xd9, 0xc2, 0x6c, 0xfb, 0xd2, 0xe4, 0xba, 0x90, 0x31, 0xaf, 0xc0, 0xc2, 0x03, 0x6c, 0xc5, + 0x92, 0x58, 0xfc, 0xf3, 0x02, 0x2c, 0x11, 0xa3, 0x72, 0xb1, 0x9f, 0xa7, 0x0d, 0xa3, 0xab, 0x90, + 0xa6, 0x5b, 0xde, 0xf2, 0x61, 0x9f, 0xbf, 0x4f, 0x35, 0x4d, 0xbf, 0x37, 0xfa, 0xe2, 0x5f, 0x14, + 0xe0, 0xca, 0x80, 0x24, 0xdc, 0xb2, 0xb7, 0x21, 0xe7, 0xd1, 0xab, 0x6d, 0xd4, 0x71, 0x15, 0x9b, + 0x75, 0x15, 0x1b, 0xdf, 0x94, 0x5f, 0x87, 0x2b, 0xcc, 0x94, 0xe3, 0xe9, 0xf1, 0xff, 0x24, 0xa0, + 0x10, 0x8c, 0xed, 0xc8, 0xea, 0x80, 0x3f, 0xbe, 0xee, 0x9f, 0x5b, 0x22, 0x57, 0x07, 0xfe, 0x59, + 0x25, 0x6f, 0xfa, 0x9e, 0xaa, 0x1a, 0x98, 0xac, 0x12, 0x97, 0x30, 0x59, 0x3d, 0x87, 0xb7, 0xea, + 0xce, 0xf1, 0x28, 0x99, 0xf7, 0xa1, 0x92, 0xd4, 0xf8, 0x0f, 0x95, 0xfc, 0x5e, 0x0a, 0xa6, 0x36, + 0xdb, 0x5d, 0x12, 0x44, 0x87, 0x8d, 0xcc, 0x7b, 0xfc, 0x81, 0xeb, 0x18, 0x4f, 0xb5, 0x33, 0x2e, + 0x34, 0x45, 0xc4, 0x1e, 0xc2, 0x2e, 0xd1, 0x37, 0x5e, 0x2d, 0xcc, 0x93, 0xa7, 0xaf, 0x8e, 0x26, + 0x26, 0xd6, 0x47, 0xe2, 0x2c, 0x2c, 0x31, 0x4a, 0xf4, 0xc7, 0x20, 0x67, 0xa8, 0xe6, 0x89, 0x6c, + 0x87, 0x79, 0x6c, 0xa5, 0xf0, 0xcd, 0xf3, 0x1e, 0x64, 0xdf, 0x9a, 0x90, 0xb2, 0x86, 0xe7, 0x7a, + 0xb6, 0x0c, 0xf6, 0x74, 0xe8, 0xd4, 0x10, 0xe3, 0x64, 0xe1, 0xb0, 0x97, 0xa8, 0xb6, 0x26, 0x24, + 0xdb, 0x1e, 0xec, 0x0a, 0x2e, 0xf4, 0xbe, 0xf2, 0xbb, 0x00, 0xf4, 0x59, 0xdc, 0xb8, 0x2b, 0x88, + 0x0c, 0xc5, 0xa6, 0xa4, 0x77, 0x21, 0x8d, 0xb5, 0x66, 0xdc, 0xd5, 0xc3, 0x34, 0xd6, 0x9a, 0x94, + 0xec, 0x1d, 0xc8, 0xd3, 0xe5, 0x8b, 0x6c, 0x27, 0xa0, 0x32, 0xd4, 0xa0, 0xc2, 0xc2, 0xea, 0x1c, + 0x45, 0x94, 0x78, 0x62, 0xe9, 0x0e, 0x14, 0x3c, 0x8e, 0x86, 0x99, 0x2c, 0x50, 0x33, 0x9a, 0x71, + 0x9d, 0x08, 0xdd, 0x3e, 0x6d, 0x40, 0xda, 0xee, 0x64, 0x74, 0x15, 0x16, 0x1f, 0x56, 0x37, 0x64, + 0x12, 0x4f, 0x87, 0xa4, 0x64, 0xf6, 0x2b, 0x7b, 0x9b, 0xdb, 0x7b, 0x0f, 0x0a, 0x02, 0xf9, 0x90, + 0x0e, 0xf6, 0xf6, 0xc8, 0x47, 0x02, 0xa5, 0x61, 0x72, 0xb3, 0xba, 0x57, 0x29, 0x24, 0x51, 0x0e, + 0xd2, 0x2c, 0xb2, 0xae, 0x6c, 0x16, 0x26, 0x49, 0xcc, 0x7d, 0xbf, 0xb4, 0x4d, 0x7e, 0xa7, 0xc8, + 0x62, 0xc1, 0xce, 0x11, 0xdd, 0x86, 0xc2, 0x03, 0x6c, 0x31, 0xf3, 0x8a, 0x72, 0x44, 0x3f, 0x14, + 0x00, 0x11, 0x37, 0xca, 0x30, 0x43, 0x9c, 0xf9, 0xa4, 0xcf, 0x99, 0xbb, 0x4f, 0x3f, 0x09, 0xde, + 0xa7, 0x9f, 0xfc, 0x5e, 0x3c, 0x11, 0xf0, 0xe2, 0xfe, 0x19, 0x20, 0x19, 0x9c, 0x01, 0xec, 0xb1, + 0x96, 0x1a, 0x7f, 0xac, 0x89, 0x3d, 0x98, 0xf7, 0x49, 0xcf, 0x27, 0x80, 0x6f, 0xc0, 0xe4, 0x13, + 0xfd, 0xd0, 0x76, 0xfc, 0xe2, 0x68, 0x96, 0x12, 0xc5, 0x8f, 0xed, 0xed, 0x5f, 0x81, 0xf9, 0xb2, + 0xa2, 0x35, 0x70, 0x7b, 0xb4, 0x82, 0x5f, 0x81, 0x79, 0x36, 0x31, 0x8c, 0x46, 0xfd, 0x2d, 0x01, + 0x6e, 0xb2, 0xd0, 0x66, 0x30, 0xa3, 0x33, 0x6a, 0x96, 0x95, 0x61, 0x3e, 0xe4, 0xd1, 0xd6, 0x38, + 0x07, 0x21, 0x42, 0xea, 0x42, 0x83, 0xef, 0xbb, 0x8e, 0x8e, 0xee, 0x7f, 0x57, 0x80, 0x9b, 0x2c, + 0xf8, 0x19, 0x2e, 0x7d, 0x98, 0xab, 0x7d, 0xee, 0x92, 0x5f, 0x28, 0x38, 0x5a, 0x87, 0xeb, 0x64, + 0x1c, 0x8d, 0xd3, 0x22, 0xd1, 0x82, 0x17, 0xa8, 0x51, 0x0e, 0x10, 0x3d, 0xd7, 0x78, 0xff, 0x37, + 0x04, 0xb8, 0x39, 0xb4, 0x5a, 0x3e, 0x2e, 0x14, 0x58, 0x08, 0xd1, 0xb5, 0x3d, 0x4e, 0xc6, 0x55, + 0xf6, 0xfc, 0xa0, 0xb2, 0xe3, 0x0f, 0xa1, 0xbb, 0x70, 0x93, 0x8f, 0x8b, 0x71, 0x74, 0xbb, 0xb2, + 0xef, 0x3e, 0xad, 0xe7, 0x79, 0xdc, 0x8e, 0xb8, 0xd4, 0xca, 0xde, 0xc1, 0xae, 0x5c, 0x7f, 0xbc, + 0x1f, 0xe2, 0x52, 0xb7, 0x29, 0xa0, 0x5e, 0x10, 0xd0, 0x1c, 0xe4, 0xa5, 0xed, 0xda, 0x47, 0x72, + 0x69, 0xaf, 0xb4, 0xf3, 0xb8, 0xb6, 0x5d, 0x2b, 0x24, 0x56, 0x7e, 0x4b, 0x00, 0x34, 0xb8, 0x87, + 0x89, 0x5e, 0x82, 0x9b, 0x52, 0x65, 0x87, 0xa6, 0xd0, 0x87, 0xef, 0x96, 0xe5, 0x20, 0x5d, 0xf9, + 0xf8, 0xa0, 0xb4, 0x23, 0xd7, 0xab, 0x05, 0x01, 0x15, 0x20, 0xb7, 0x57, 0xad, 0xcb, 0x0e, 0x84, + 0x1e, 0x59, 0x7e, 0x20, 0x55, 0x4a, 0xf5, 0x8a, 0x24, 0xd7, 0xb7, 0x4a, 0x7b, 0x85, 0x24, 0xca, + 0x43, 0x66, 0xa7, 0x52, 0xab, 0xb1, 0xcf, 0x49, 0x54, 0x84, 0x25, 0x2f, 0x82, 0x5c, 0x95, 0x18, + 0x79, 0xad, 0x90, 0x42, 0x57, 0x60, 0xde, 0x41, 0xf5, 0x14, 0x4c, 0x11, 0x97, 0x5f, 0xf9, 0x74, + 0xbb, 0x56, 0xaf, 0x15, 0xa6, 0x57, 0x24, 0x00, 0xd7, 0x29, 0xa2, 0xeb, 0xb0, 0xbc, 0xb9, 0xb3, + 0x2f, 0x93, 0xd9, 0x25, 0x44, 0x13, 0xb3, 0x90, 0xe5, 0x9a, 0x20, 0x18, 0x05, 0x01, 0x2d, 0xc2, + 0x9c, 0x4f, 0x1b, 0x14, 0x9c, 0x58, 0xff, 0x97, 0x5f, 0xa7, 0x4c, 0x6b, 0xd8, 0x78, 0xa6, 0x36, + 0x30, 0xfa, 0x3b, 0x02, 0xcc, 0xf8, 0x9f, 0x7f, 0x45, 0x6f, 0xc6, 0x8b, 0xf4, 0x3c, 0xcf, 0xe3, + 0x16, 0xd7, 0xc7, 0x21, 0x61, 0xe6, 0x2a, 0xbe, 0xf3, 0x67, 0x7e, 0xf7, 0xdf, 0xfd, 0x72, 0xe2, + 0x4d, 0xf1, 0x35, 0xe7, 0x9f, 0x13, 0xfd, 0x14, 0x1b, 0x28, 0xef, 0x77, 0x0d, 0xfd, 0x09, 0x6e, + 0x58, 0xe6, 0xda, 0xca, 0x4f, 0xaf, 0x35, 0x18, 0xd5, 0x3d, 0x1e, 0x83, 0xdc, 0x13, 0x56, 0xd0, + 0x0f, 0x04, 0xc8, 0x7a, 0xde, 0x1e, 0x47, 0xab, 0xe3, 0xbd, 0x04, 0x5f, 0x5c, 0x8b, 0x8d, 0xcf, + 0x25, 0x7d, 0x9b, 0x4a, 0xba, 0x2a, 0xbe, 0x12, 0x29, 0x29, 0x7d, 0xee, 0xfc, 0x1e, 0xbb, 0xd2, + 0x42, 0xc4, 0xfc, 0xa1, 0x00, 0x73, 0x03, 0xef, 0x65, 0xa3, 0xb7, 0x63, 0x67, 0xb3, 0xbd, 0xfa, + 0xbd, 0x3b, 0x26, 0x15, 0x17, 0xfc, 0x1e, 0x15, 0xfc, 0x6d, 0x71, 0x2d, 0x96, 0x8a, 0xdd, 0x01, + 0x6f, 0x8b, 0x2f, 0x8d, 0x27, 0xbe, 0x74, 0x2e, 0xf1, 0xa5, 0x4b, 0x12, 0xdf, 0xf0, 0x89, 0xff, + 0x37, 0x05, 0x98, 0x1b, 0x88, 0x69, 0xd1, 0x78, 0x21, 0xb0, 0x2d, 0x7e, 0x8c, 0x10, 0x23, 0xa6, + 0xac, 0x4d, 0x87, 0xb7, 0xd7, 0xa0, 0xff, 0xae, 0x00, 0x8b, 0xa1, 0x11, 0x3e, 0x1a, 0x7f, 0x51, + 0xf0, 0x5c, 0x65, 0x56, 0x58, 0x8d, 0x44, 0xe6, 0x5f, 0x14, 0x20, 0xef, 0x7b, 0x0f, 0x14, 0xbd, + 0x11, 0xfd, 0xcf, 0x5e, 0x06, 0xdf, 0x23, 0x2d, 0xbe, 0x39, 0x06, 0x05, 0x37, 0x89, 0x22, 0x15, + 0x79, 0x01, 0x21, 0x47, 0x64, 0xf7, 0x64, 0xdb, 0x7f, 0x17, 0x60, 0x31, 0x34, 0x67, 0x1a, 0xad, + 0xc6, 0xa8, 0x34, 0x6b, 0x71, 0x9c, 0x5c, 0x99, 0xf8, 0x94, 0x0a, 0x77, 0x22, 0xae, 0x0f, 0xe8, + 0x53, 0x37, 0x5a, 0x8a, 0xa6, 0x7e, 0xc5, 0x36, 0xd9, 0xa9, 0xb3, 0x08, 0x64, 0xd5, 0xee, 0x09, + 0x2b, 0x9f, 0xad, 0x8b, 0xaf, 0x47, 0x3b, 0x98, 0x41, 0x1a, 0xda, 0xe6, 0xd0, 0xac, 0x6b, 0x74, + 0x9b, 0xa3, 0x12, 0xb5, 0xe7, 0x6a, 0xf3, 0xba, 0xa7, 0xcd, 0x64, 0x2a, 0x0f, 0xb6, 0x78, 0x40, + 0xf8, 0xb5, 0x95, 0x9f, 0xa6, 0x6d, 0x5e, 0x7f, 0x3d, 0x40, 0xe8, 0xb6, 0x78, 0x08, 0x0d, 0xfa, + 0xf7, 0x02, 0xa0, 0xc1, 0x04, 0x2d, 0x8a, 0x74, 0x32, 0x43, 0x13, 0xba, 0xe3, 0xb5, 0xf6, 0x84, + 0xb6, 0x16, 0xa3, 0x73, 0xb4, 0xf6, 0xb3, 0x35, 0x34, 0x5e, 0x53, 0xd1, 0x4f, 0x04, 0xfb, 0x1d, + 0xdf, 0x40, 0x06, 0xf6, 0x9d, 0xd1, 0xe3, 0x26, 0x34, 0x13, 0x5d, 0xfc, 0xe6, 0xf8, 0x84, 0x7c, + 0xdc, 0x85, 0x34, 0x3c, 0xae, 0x69, 0xfb, 0x1b, 0x1e, 0xc3, 0xae, 0xd1, 0x8f, 0x05, 0x58, 0x0c, + 0x4d, 0x1d, 0x47, 0x1b, 0x75, 0x54, 0xb6, 0xb9, 0x38, 0xe4, 0x4d, 0x42, 0xbb, 0x61, 0x2b, 0xe7, + 0xea, 0xd1, 0x95, 0x31, 0x7b, 0xf4, 0x67, 0x12, 0xb0, 0x3c, 0x6c, 0x0d, 0x88, 0xde, 0x1b, 0xed, + 0xa4, 0x86, 0x46, 0xd3, 0xc5, 0x31, 0xa3, 0x7b, 0xf1, 0x94, 0x36, 0xfb, 0xa9, 0x78, 0x77, 0x74, + 0x7f, 0x86, 0xac, 0x03, 0xc8, 0xc8, 0xbd, 0x2b, 0xbe, 0x11, 0x3d, 0x6d, 0x84, 0x92, 0x51, 0x15, + 0x0c, 0x5b, 0x48, 0x46, 0xab, 0x60, 0xc4, 0xf2, 0xf3, 0xbc, 0x2a, 0x58, 0xbf, 0x3b, 0xa2, 0xe7, + 0x43, 0x1a, 0xc2, 0x9d, 0xd7, 0xdd, 0xf5, 0x37, 0x86, 0xf7, 0xff, 0x50, 0x32, 0xf4, 0x3f, 0x05, + 0x58, 0x0c, 0x5d, 0x76, 0x46, 0x9b, 0x77, 0xd4, 0x4a, 0x75, 0xec, 0xc6, 0x73, 0xb7, 0x8d, 0xce, + 0xd7, 0xf8, 0xcf, 0xd6, 0xd1, 0xd8, 0x2d, 0x47, 0x3f, 0x9b, 0x60, 0x39, 0xfd, 0x90, 0x25, 0x2c, + 0xba, 0x37, 0xca, 0x31, 0x0d, 0x5f, 0x6e, 0x17, 0xdf, 0x3b, 0x17, 0x2d, 0xf7, 0x6b, 0x21, 0x7a, + 0x18, 0x63, 0x1c, 0xf8, 0xf5, 0x10, 0x6f, 0x10, 0xa0, 0xdf, 0x17, 0x60, 0x79, 0xd8, 0xe2, 0x38, + 0x7a, 0x04, 0x8c, 0x58, 0x52, 0x0f, 0xf5, 0x71, 0xbc, 0x91, 0x2b, 0xe7, 0xed, 0xec, 0x95, 0xf1, + 0x3b, 0xfb, 0x07, 0x02, 0x14, 0x82, 0x1b, 0x79, 0xe8, 0xad, 0xd1, 0x1e, 0x6e, 0x60, 0x83, 0xa5, + 0x18, 0x73, 0x63, 0x47, 0x7c, 0x8b, 0x36, 0xf2, 0x75, 0xf1, 0x4e, 0x64, 0x87, 0x78, 0x76, 0x7f, + 0xf8, 0x52, 0xb2, 0x10, 0xdc, 0xd3, 0x8b, 0x16, 0x73, 0xc8, 0x0e, 0xe0, 0xb8, 0x62, 0xae, 0xdf, + 0x19, 0xae, 0x52, 0x8f, 0x8c, 0xdc, 0x63, 0x7c, 0x4f, 0x80, 0xbc, 0x6f, 0x17, 0x2f, 0x3a, 0xd8, + 0x0e, 0xdb, 0xf0, 0x8b, 0x2d, 0xe0, 0x1b, 0x54, 0xc0, 0x15, 0x14, 0x5b, 0x40, 0xf4, 0x1b, 0x02, + 0xcc, 0x06, 0x36, 0xeb, 0xd0, 0xfa, 0xa8, 0x41, 0x39, 0xb8, 0xc7, 0x58, 0x7c, 0x6b, 0x2c, 0x1a, + 0x3e, 0x80, 0x43, 0xc4, 0x8d, 0xee, 0x76, 0xf4, 0x4b, 0x02, 0x14, 0x82, 0xbb, 0x79, 0xd1, 0x7d, + 0x3e, 0x64, 0xef, 0x6f, 0xe8, 0x78, 0xe3, 0x32, 0xad, 0xc4, 0x57, 0xe1, 0x5f, 0x17, 0x20, 0xeb, + 0x49, 0x75, 0x47, 0xa7, 0x34, 0x06, 0x33, 0xfa, 0xd1, 0x29, 0x8d, 0x90, 0x1c, 0xba, 0xf8, 0x1a, + 0x15, 0xf1, 0x36, 0xfa, 0x5a, 0xb4, 0xfb, 0xe2, 0xe2, 0xfc, 0x82, 0x00, 0x19, 0x67, 0xc3, 0x01, + 0xbd, 0x36, 0x6a, 0x96, 0xf2, 0xe6, 0xc2, 0x63, 0x2d, 0x44, 0x43, 0xa4, 0x19, 0xf0, 0x33, 0x4c, + 0x14, 0x3a, 0x91, 0x08, 0x90, 0xf3, 0x66, 0xdd, 0xd1, 0x5a, 0x0c, 0xa7, 0xe9, 0x93, 0x69, 0x58, + 0xc7, 0x71, 0x39, 0x56, 0xe2, 0xc9, 0xf1, 0x97, 0x05, 0xc8, 0x79, 0x37, 0x0a, 0xa2, 0xe5, 0x08, + 0xd9, 0x52, 0x18, 0x2a, 0xc7, 0x37, 0xa8, 0x1c, 0x6f, 0x88, 0xaf, 0xc6, 0x91, 0xe3, 0x5e, 0x83, + 0x72, 0xbe, 0x27, 0xac, 0x6c, 0xfc, 0xaa, 0x00, 0x2f, 0x34, 0xf4, 0x4e, 0x84, 0x18, 0x1b, 0xe9, + 0xcd, 0x76, 0x77, 0x9f, 0xd4, 0xb6, 0x2f, 0x7c, 0xf6, 0x3e, 0xc7, 0x6b, 0xe9, 0x6d, 0x45, 0x6b, + 0xad, 0xea, 0x46, 0x6b, 0xad, 0x85, 0x35, 0x2a, 0xcb, 0x1a, 0x2b, 0x52, 0xba, 0xaa, 0x19, 0xf6, + 0x7f, 0xc4, 0xdf, 0x6b, 0xb6, 0xbb, 0xbf, 0x9e, 0x58, 0x7e, 0xc0, 0xe8, 0xcb, 0x6d, 0xbd, 0xd7, + 0x24, 0x7d, 0xb9, 0xfa, 0x68, 0x7d, 0x83, 0x14, 0xff, 0x53, 0xbb, 0xe8, 0x0b, 0x5a, 0xf4, 0xc5, + 0x66, 0xbb, 0xfb, 0xc5, 0x23, 0x46, 0x79, 0x38, 0x45, 0xf9, 0xbf, 0xf5, 0x7f, 0x03, 0x00, 0x00, + 0xff, 0xff, 0x25, 0x3f, 0xe2, 0xc3, 0x06, 0x7d, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/privacy/dlp/v2beta2/storage.pb.go b/vendor/google.golang.org/genproto/googleapis/privacy/dlp/v2beta2/storage.pb.go new file mode 100644 index 0000000..02bf327 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/privacy/dlp/v2beta2/storage.pb.go @@ -0,0 +1,1686 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/privacy/dlp/v2beta2/storage.proto + +package dlp + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/timestamp" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Categorization of results based on how likely they are to represent a match, +// based on the number of elements they contain which imply a match. +type Likelihood int32 + +const ( + // Default value; information with all likelihoods is included. + Likelihood_LIKELIHOOD_UNSPECIFIED Likelihood = 0 + // Few matching elements. + Likelihood_VERY_UNLIKELY Likelihood = 1 + Likelihood_UNLIKELY Likelihood = 2 + // Some matching elements. + Likelihood_POSSIBLE Likelihood = 3 + Likelihood_LIKELY Likelihood = 4 + // Many matching elements. + Likelihood_VERY_LIKELY Likelihood = 5 +) + +var Likelihood_name = map[int32]string{ + 0: "LIKELIHOOD_UNSPECIFIED", + 1: "VERY_UNLIKELY", + 2: "UNLIKELY", + 3: "POSSIBLE", + 4: "LIKELY", + 5: "VERY_LIKELY", +} +var Likelihood_value = map[string]int32{ + "LIKELIHOOD_UNSPECIFIED": 0, + "VERY_UNLIKELY": 1, + "UNLIKELY": 2, + "POSSIBLE": 3, + "LIKELY": 4, + "VERY_LIKELY": 5, +} + +func (x Likelihood) String() string { + return proto.EnumName(Likelihood_name, int32(x)) +} +func (Likelihood) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +// Type of information detected by the API. +type InfoType struct { + // Name of the information type. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *InfoType) Reset() { *m = InfoType{} } +func (m *InfoType) String() string { return proto.CompactTextString(m) } +func (*InfoType) ProtoMessage() {} +func (*InfoType) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *InfoType) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Custom information type provided by the user. Used to find domain-specific +// sensitive information configurable to the data in question. +type CustomInfoType struct { + // Info type configuration. All custom info types must have configurations + // that do not conflict with built-in info types or other custom info types. + InfoType *InfoType `protobuf:"bytes,1,opt,name=info_type,json=infoType" json:"info_type,omitempty"` + // Likelihood to return for this custom info type. This base value can be + // altered by a detection rule if the finding meets the criteria specified by + // the rule. Defaults to `VERY_LIKELY` if not specified. + Likelihood Likelihood `protobuf:"varint,6,opt,name=likelihood,enum=google.privacy.dlp.v2beta2.Likelihood" json:"likelihood,omitempty"` + // Types that are valid to be assigned to Type: + // *CustomInfoType_Dictionary_ + // *CustomInfoType_Regex_ + // *CustomInfoType_SurrogateType_ + Type isCustomInfoType_Type `protobuf_oneof:"type"` + // Set of detection rules to apply to all findings of this custom info type. + // Rules are applied in order that they are specified. Not supported for the + // `surrogate_type` custom info type. + DetectionRules []*CustomInfoType_DetectionRule `protobuf:"bytes,7,rep,name=detection_rules,json=detectionRules" json:"detection_rules,omitempty"` +} + +func (m *CustomInfoType) Reset() { *m = CustomInfoType{} } +func (m *CustomInfoType) String() string { return proto.CompactTextString(m) } +func (*CustomInfoType) ProtoMessage() {} +func (*CustomInfoType) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +type isCustomInfoType_Type interface { + isCustomInfoType_Type() +} + +type CustomInfoType_Dictionary_ struct { + Dictionary *CustomInfoType_Dictionary `protobuf:"bytes,2,opt,name=dictionary,oneof"` +} +type CustomInfoType_Regex_ struct { + Regex *CustomInfoType_Regex `protobuf:"bytes,3,opt,name=regex,oneof"` +} +type CustomInfoType_SurrogateType_ struct { + SurrogateType *CustomInfoType_SurrogateType `protobuf:"bytes,4,opt,name=surrogate_type,json=surrogateType,oneof"` +} + +func (*CustomInfoType_Dictionary_) isCustomInfoType_Type() {} +func (*CustomInfoType_Regex_) isCustomInfoType_Type() {} +func (*CustomInfoType_SurrogateType_) isCustomInfoType_Type() {} + +func (m *CustomInfoType) GetType() isCustomInfoType_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *CustomInfoType) GetInfoType() *InfoType { + if m != nil { + return m.InfoType + } + return nil +} + +func (m *CustomInfoType) GetLikelihood() Likelihood { + if m != nil { + return m.Likelihood + } + return Likelihood_LIKELIHOOD_UNSPECIFIED +} + +func (m *CustomInfoType) GetDictionary() *CustomInfoType_Dictionary { + if x, ok := m.GetType().(*CustomInfoType_Dictionary_); ok { + return x.Dictionary + } + return nil +} + +func (m *CustomInfoType) GetRegex() *CustomInfoType_Regex { + if x, ok := m.GetType().(*CustomInfoType_Regex_); ok { + return x.Regex + } + return nil +} + +func (m *CustomInfoType) GetSurrogateType() *CustomInfoType_SurrogateType { + if x, ok := m.GetType().(*CustomInfoType_SurrogateType_); ok { + return x.SurrogateType + } + return nil +} + +func (m *CustomInfoType) GetDetectionRules() []*CustomInfoType_DetectionRule { + if m != nil { + return m.DetectionRules + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*CustomInfoType) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _CustomInfoType_OneofMarshaler, _CustomInfoType_OneofUnmarshaler, _CustomInfoType_OneofSizer, []interface{}{ + (*CustomInfoType_Dictionary_)(nil), + (*CustomInfoType_Regex_)(nil), + (*CustomInfoType_SurrogateType_)(nil), + } +} + +func _CustomInfoType_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*CustomInfoType) + // type + switch x := m.Type.(type) { + case *CustomInfoType_Dictionary_: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Dictionary); err != nil { + return err + } + case *CustomInfoType_Regex_: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Regex); err != nil { + return err + } + case *CustomInfoType_SurrogateType_: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.SurrogateType); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("CustomInfoType.Type has unexpected type %T", x) + } + return nil +} + +func _CustomInfoType_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*CustomInfoType) + switch tag { + case 2: // type.dictionary + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CustomInfoType_Dictionary) + err := b.DecodeMessage(msg) + m.Type = &CustomInfoType_Dictionary_{msg} + return true, err + case 3: // type.regex + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CustomInfoType_Regex) + err := b.DecodeMessage(msg) + m.Type = &CustomInfoType_Regex_{msg} + return true, err + case 4: // type.surrogate_type + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CustomInfoType_SurrogateType) + err := b.DecodeMessage(msg) + m.Type = &CustomInfoType_SurrogateType_{msg} + return true, err + default: + return false, nil + } +} + +func _CustomInfoType_OneofSizer(msg proto.Message) (n int) { + m := msg.(*CustomInfoType) + // type + switch x := m.Type.(type) { + case *CustomInfoType_Dictionary_: + s := proto.Size(x.Dictionary) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *CustomInfoType_Regex_: + s := proto.Size(x.Regex) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *CustomInfoType_SurrogateType_: + s := proto.Size(x.SurrogateType) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Custom information type based on a dictionary of words or phrases. This can +// be used to match sensitive information specific to the data, such as a list +// of employee IDs or job titles. +// +// Dictionary words are case-insensitive and all characters other than letters +// and digits in the unicode [Basic Multilingual +// Plane](https://en.wikipedia.org/wiki/Plane_%28Unicode%29#Basic_Multilingual_Plane) +// will be replaced with whitespace when scanning for matches, so the +// dictionary phrase "Sam Johnson" will match all three phrases "sam johnson", +// "Sam, Johnson", and "Sam (Johnson)". Additionally, the characters +// surrounding any match must be of a different type than the adjacent +// characters within the word, so letters must be next to non-letters and +// digits next to non-digits. For example, the dictionary word "jen" will +// match the first three letters of the text "jen123" but will return no +// matches for "jennifer". +// +// Dictionary words containing a large number of characters that are not +// letters or digits may result in unexpected findings because such characters +// are treated as whitespace. +type CustomInfoType_Dictionary struct { + // Types that are valid to be assigned to Source: + // *CustomInfoType_Dictionary_WordList_ + Source isCustomInfoType_Dictionary_Source `protobuf_oneof:"source"` +} + +func (m *CustomInfoType_Dictionary) Reset() { *m = CustomInfoType_Dictionary{} } +func (m *CustomInfoType_Dictionary) String() string { return proto.CompactTextString(m) } +func (*CustomInfoType_Dictionary) ProtoMessage() {} +func (*CustomInfoType_Dictionary) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1, 0} } + +type isCustomInfoType_Dictionary_Source interface { + isCustomInfoType_Dictionary_Source() +} + +type CustomInfoType_Dictionary_WordList_ struct { + WordList *CustomInfoType_Dictionary_WordList `protobuf:"bytes,1,opt,name=word_list,json=wordList,oneof"` +} + +func (*CustomInfoType_Dictionary_WordList_) isCustomInfoType_Dictionary_Source() {} + +func (m *CustomInfoType_Dictionary) GetSource() isCustomInfoType_Dictionary_Source { + if m != nil { + return m.Source + } + return nil +} + +func (m *CustomInfoType_Dictionary) GetWordList() *CustomInfoType_Dictionary_WordList { + if x, ok := m.GetSource().(*CustomInfoType_Dictionary_WordList_); ok { + return x.WordList + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*CustomInfoType_Dictionary) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _CustomInfoType_Dictionary_OneofMarshaler, _CustomInfoType_Dictionary_OneofUnmarshaler, _CustomInfoType_Dictionary_OneofSizer, []interface{}{ + (*CustomInfoType_Dictionary_WordList_)(nil), + } +} + +func _CustomInfoType_Dictionary_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*CustomInfoType_Dictionary) + // source + switch x := m.Source.(type) { + case *CustomInfoType_Dictionary_WordList_: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.WordList); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("CustomInfoType_Dictionary.Source has unexpected type %T", x) + } + return nil +} + +func _CustomInfoType_Dictionary_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*CustomInfoType_Dictionary) + switch tag { + case 1: // source.word_list + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CustomInfoType_Dictionary_WordList) + err := b.DecodeMessage(msg) + m.Source = &CustomInfoType_Dictionary_WordList_{msg} + return true, err + default: + return false, nil + } +} + +func _CustomInfoType_Dictionary_OneofSizer(msg proto.Message) (n int) { + m := msg.(*CustomInfoType_Dictionary) + // source + switch x := m.Source.(type) { + case *CustomInfoType_Dictionary_WordList_: + s := proto.Size(x.WordList) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Message defining a list of words or phrases to search for in the data. +type CustomInfoType_Dictionary_WordList struct { + // Words or phrases defining the dictionary. The dictionary must contain + // at least one phrase and every phrase must contain at least 2 characters + // that are letters or digits. [required] + Words []string `protobuf:"bytes,1,rep,name=words" json:"words,omitempty"` +} + +func (m *CustomInfoType_Dictionary_WordList) Reset() { *m = CustomInfoType_Dictionary_WordList{} } +func (m *CustomInfoType_Dictionary_WordList) String() string { return proto.CompactTextString(m) } +func (*CustomInfoType_Dictionary_WordList) ProtoMessage() {} +func (*CustomInfoType_Dictionary_WordList) Descriptor() ([]byte, []int) { + return fileDescriptor1, []int{1, 0, 0} +} + +func (m *CustomInfoType_Dictionary_WordList) GetWords() []string { + if m != nil { + return m.Words + } + return nil +} + +// Message defining a custom regular expression. +type CustomInfoType_Regex struct { + // Pattern defining the regular expression. + Pattern string `protobuf:"bytes,1,opt,name=pattern" json:"pattern,omitempty"` +} + +func (m *CustomInfoType_Regex) Reset() { *m = CustomInfoType_Regex{} } +func (m *CustomInfoType_Regex) String() string { return proto.CompactTextString(m) } +func (*CustomInfoType_Regex) ProtoMessage() {} +func (*CustomInfoType_Regex) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1, 1} } + +func (m *CustomInfoType_Regex) GetPattern() string { + if m != nil { + return m.Pattern + } + return "" +} + +// Message for detecting output from deidentification transformations +// such as +// [`CryptoReplaceFfxFpeConfig`](/dlp/docs/reference/rest/v2beta1/content/deidentify#CryptoReplaceFfxFpeConfig). +// These types of transformations are +// those that perform pseudonymization, thereby producing a "surrogate" as +// output. This should be used in conjunction with a field on the +// transformation such as `surrogate_info_type`. This custom info type does +// not support the use of `detection_rules`. +type CustomInfoType_SurrogateType struct { +} + +func (m *CustomInfoType_SurrogateType) Reset() { *m = CustomInfoType_SurrogateType{} } +func (m *CustomInfoType_SurrogateType) String() string { return proto.CompactTextString(m) } +func (*CustomInfoType_SurrogateType) ProtoMessage() {} +func (*CustomInfoType_SurrogateType) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1, 2} } + +// Rule for modifying a custom info type to alter behavior under certain +// circumstances, depending on the specific details of the rule. Not supported +// for the `surrogate_type` custom info type. +type CustomInfoType_DetectionRule struct { + // Types that are valid to be assigned to Type: + // *CustomInfoType_DetectionRule_HotwordRule_ + Type isCustomInfoType_DetectionRule_Type `protobuf_oneof:"type"` +} + +func (m *CustomInfoType_DetectionRule) Reset() { *m = CustomInfoType_DetectionRule{} } +func (m *CustomInfoType_DetectionRule) String() string { return proto.CompactTextString(m) } +func (*CustomInfoType_DetectionRule) ProtoMessage() {} +func (*CustomInfoType_DetectionRule) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1, 3} } + +type isCustomInfoType_DetectionRule_Type interface { + isCustomInfoType_DetectionRule_Type() +} + +type CustomInfoType_DetectionRule_HotwordRule_ struct { + HotwordRule *CustomInfoType_DetectionRule_HotwordRule `protobuf:"bytes,1,opt,name=hotword_rule,json=hotwordRule,oneof"` +} + +func (*CustomInfoType_DetectionRule_HotwordRule_) isCustomInfoType_DetectionRule_Type() {} + +func (m *CustomInfoType_DetectionRule) GetType() isCustomInfoType_DetectionRule_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *CustomInfoType_DetectionRule) GetHotwordRule() *CustomInfoType_DetectionRule_HotwordRule { + if x, ok := m.GetType().(*CustomInfoType_DetectionRule_HotwordRule_); ok { + return x.HotwordRule + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*CustomInfoType_DetectionRule) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _CustomInfoType_DetectionRule_OneofMarshaler, _CustomInfoType_DetectionRule_OneofUnmarshaler, _CustomInfoType_DetectionRule_OneofSizer, []interface{}{ + (*CustomInfoType_DetectionRule_HotwordRule_)(nil), + } +} + +func _CustomInfoType_DetectionRule_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*CustomInfoType_DetectionRule) + // type + switch x := m.Type.(type) { + case *CustomInfoType_DetectionRule_HotwordRule_: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.HotwordRule); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("CustomInfoType_DetectionRule.Type has unexpected type %T", x) + } + return nil +} + +func _CustomInfoType_DetectionRule_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*CustomInfoType_DetectionRule) + switch tag { + case 1: // type.hotword_rule + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CustomInfoType_DetectionRule_HotwordRule) + err := b.DecodeMessage(msg) + m.Type = &CustomInfoType_DetectionRule_HotwordRule_{msg} + return true, err + default: + return false, nil + } +} + +func _CustomInfoType_DetectionRule_OneofSizer(msg proto.Message) (n int) { + m := msg.(*CustomInfoType_DetectionRule) + // type + switch x := m.Type.(type) { + case *CustomInfoType_DetectionRule_HotwordRule_: + s := proto.Size(x.HotwordRule) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Message for specifying a window around a finding to apply a detection +// rule. +type CustomInfoType_DetectionRule_Proximity struct { + // Number of characters before the finding to consider. + WindowBefore int32 `protobuf:"varint,1,opt,name=window_before,json=windowBefore" json:"window_before,omitempty"` + // Number of characters after the finding to consider. + WindowAfter int32 `protobuf:"varint,2,opt,name=window_after,json=windowAfter" json:"window_after,omitempty"` +} + +func (m *CustomInfoType_DetectionRule_Proximity) Reset() { + *m = CustomInfoType_DetectionRule_Proximity{} +} +func (m *CustomInfoType_DetectionRule_Proximity) String() string { return proto.CompactTextString(m) } +func (*CustomInfoType_DetectionRule_Proximity) ProtoMessage() {} +func (*CustomInfoType_DetectionRule_Proximity) Descriptor() ([]byte, []int) { + return fileDescriptor1, []int{1, 3, 0} +} + +func (m *CustomInfoType_DetectionRule_Proximity) GetWindowBefore() int32 { + if m != nil { + return m.WindowBefore + } + return 0 +} + +func (m *CustomInfoType_DetectionRule_Proximity) GetWindowAfter() int32 { + if m != nil { + return m.WindowAfter + } + return 0 +} + +// Message for specifying an adjustment to the likelihood of a finding as +// part of a detection rule. +type CustomInfoType_DetectionRule_LikelihoodAdjustment struct { + // Types that are valid to be assigned to Adjustment: + // *CustomInfoType_DetectionRule_LikelihoodAdjustment_FixedLikelihood + // *CustomInfoType_DetectionRule_LikelihoodAdjustment_RelativeLikelihood + Adjustment isCustomInfoType_DetectionRule_LikelihoodAdjustment_Adjustment `protobuf_oneof:"adjustment"` +} + +func (m *CustomInfoType_DetectionRule_LikelihoodAdjustment) Reset() { + *m = CustomInfoType_DetectionRule_LikelihoodAdjustment{} +} +func (m *CustomInfoType_DetectionRule_LikelihoodAdjustment) String() string { + return proto.CompactTextString(m) +} +func (*CustomInfoType_DetectionRule_LikelihoodAdjustment) ProtoMessage() {} +func (*CustomInfoType_DetectionRule_LikelihoodAdjustment) Descriptor() ([]byte, []int) { + return fileDescriptor1, []int{1, 3, 1} +} + +type isCustomInfoType_DetectionRule_LikelihoodAdjustment_Adjustment interface { + isCustomInfoType_DetectionRule_LikelihoodAdjustment_Adjustment() +} + +type CustomInfoType_DetectionRule_LikelihoodAdjustment_FixedLikelihood struct { + FixedLikelihood Likelihood `protobuf:"varint,1,opt,name=fixed_likelihood,json=fixedLikelihood,enum=google.privacy.dlp.v2beta2.Likelihood,oneof"` +} +type CustomInfoType_DetectionRule_LikelihoodAdjustment_RelativeLikelihood struct { + RelativeLikelihood int32 `protobuf:"varint,2,opt,name=relative_likelihood,json=relativeLikelihood,oneof"` +} + +func (*CustomInfoType_DetectionRule_LikelihoodAdjustment_FixedLikelihood) isCustomInfoType_DetectionRule_LikelihoodAdjustment_Adjustment() { +} +func (*CustomInfoType_DetectionRule_LikelihoodAdjustment_RelativeLikelihood) isCustomInfoType_DetectionRule_LikelihoodAdjustment_Adjustment() { +} + +func (m *CustomInfoType_DetectionRule_LikelihoodAdjustment) GetAdjustment() isCustomInfoType_DetectionRule_LikelihoodAdjustment_Adjustment { + if m != nil { + return m.Adjustment + } + return nil +} + +func (m *CustomInfoType_DetectionRule_LikelihoodAdjustment) GetFixedLikelihood() Likelihood { + if x, ok := m.GetAdjustment().(*CustomInfoType_DetectionRule_LikelihoodAdjustment_FixedLikelihood); ok { + return x.FixedLikelihood + } + return Likelihood_LIKELIHOOD_UNSPECIFIED +} + +func (m *CustomInfoType_DetectionRule_LikelihoodAdjustment) GetRelativeLikelihood() int32 { + if x, ok := m.GetAdjustment().(*CustomInfoType_DetectionRule_LikelihoodAdjustment_RelativeLikelihood); ok { + return x.RelativeLikelihood + } + return 0 +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*CustomInfoType_DetectionRule_LikelihoodAdjustment) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _CustomInfoType_DetectionRule_LikelihoodAdjustment_OneofMarshaler, _CustomInfoType_DetectionRule_LikelihoodAdjustment_OneofUnmarshaler, _CustomInfoType_DetectionRule_LikelihoodAdjustment_OneofSizer, []interface{}{ + (*CustomInfoType_DetectionRule_LikelihoodAdjustment_FixedLikelihood)(nil), + (*CustomInfoType_DetectionRule_LikelihoodAdjustment_RelativeLikelihood)(nil), + } +} + +func _CustomInfoType_DetectionRule_LikelihoodAdjustment_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*CustomInfoType_DetectionRule_LikelihoodAdjustment) + // adjustment + switch x := m.Adjustment.(type) { + case *CustomInfoType_DetectionRule_LikelihoodAdjustment_FixedLikelihood: + b.EncodeVarint(1<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.FixedLikelihood)) + case *CustomInfoType_DetectionRule_LikelihoodAdjustment_RelativeLikelihood: + b.EncodeVarint(2<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.RelativeLikelihood)) + case nil: + default: + return fmt.Errorf("CustomInfoType_DetectionRule_LikelihoodAdjustment.Adjustment has unexpected type %T", x) + } + return nil +} + +func _CustomInfoType_DetectionRule_LikelihoodAdjustment_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*CustomInfoType_DetectionRule_LikelihoodAdjustment) + switch tag { + case 1: // adjustment.fixed_likelihood + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Adjustment = &CustomInfoType_DetectionRule_LikelihoodAdjustment_FixedLikelihood{Likelihood(x)} + return true, err + case 2: // adjustment.relative_likelihood + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Adjustment = &CustomInfoType_DetectionRule_LikelihoodAdjustment_RelativeLikelihood{int32(x)} + return true, err + default: + return false, nil + } +} + +func _CustomInfoType_DetectionRule_LikelihoodAdjustment_OneofSizer(msg proto.Message) (n int) { + m := msg.(*CustomInfoType_DetectionRule_LikelihoodAdjustment) + // adjustment + switch x := m.Adjustment.(type) { + case *CustomInfoType_DetectionRule_LikelihoodAdjustment_FixedLikelihood: + n += proto.SizeVarint(1<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.FixedLikelihood)) + case *CustomInfoType_DetectionRule_LikelihoodAdjustment_RelativeLikelihood: + n += proto.SizeVarint(2<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.RelativeLikelihood)) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Detection rule that adjusts the likelihood of findings within a certain +// proximity of hotwords. +type CustomInfoType_DetectionRule_HotwordRule struct { + // Regex pattern defining what qualifies as a hotword. + HotwordRegex *CustomInfoType_Regex `protobuf:"bytes,1,opt,name=hotword_regex,json=hotwordRegex" json:"hotword_regex,omitempty"` + // Proximity of the finding within which the entire hotword must reside. + // The total length of the window cannot exceed 1000 characters. Note that + // the finding itself will be included in the window, so that hotwords may + // be used to match substrings of the finding itself. For example, the + // certainty of a phone number regex "\(\d{3}\) \d{3}-\d{4}" could be + // adjusted upwards if the area code is known to be the local area code of + // a company office using the hotword regex "\(xxx\)", where "xxx" + // is the area code in question. + Proximity *CustomInfoType_DetectionRule_Proximity `protobuf:"bytes,2,opt,name=proximity" json:"proximity,omitempty"` + // Likelihood adjustment to apply to all matching findings. + LikelihoodAdjustment *CustomInfoType_DetectionRule_LikelihoodAdjustment `protobuf:"bytes,3,opt,name=likelihood_adjustment,json=likelihoodAdjustment" json:"likelihood_adjustment,omitempty"` +} + +func (m *CustomInfoType_DetectionRule_HotwordRule) Reset() { + *m = CustomInfoType_DetectionRule_HotwordRule{} +} +func (m *CustomInfoType_DetectionRule_HotwordRule) String() string { return proto.CompactTextString(m) } +func (*CustomInfoType_DetectionRule_HotwordRule) ProtoMessage() {} +func (*CustomInfoType_DetectionRule_HotwordRule) Descriptor() ([]byte, []int) { + return fileDescriptor1, []int{1, 3, 2} +} + +func (m *CustomInfoType_DetectionRule_HotwordRule) GetHotwordRegex() *CustomInfoType_Regex { + if m != nil { + return m.HotwordRegex + } + return nil +} + +func (m *CustomInfoType_DetectionRule_HotwordRule) GetProximity() *CustomInfoType_DetectionRule_Proximity { + if m != nil { + return m.Proximity + } + return nil +} + +func (m *CustomInfoType_DetectionRule_HotwordRule) GetLikelihoodAdjustment() *CustomInfoType_DetectionRule_LikelihoodAdjustment { + if m != nil { + return m.LikelihoodAdjustment + } + return nil +} + +// General identifier of a data field in a storage service. +type FieldId struct { + // Name describing the field. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *FieldId) Reset() { *m = FieldId{} } +func (m *FieldId) String() string { return proto.CompactTextString(m) } +func (*FieldId) ProtoMessage() {} +func (*FieldId) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +func (m *FieldId) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Datastore partition ID. +// A partition ID identifies a grouping of entities. The grouping is always +// by project and namespace, however the namespace ID may be empty. +// +// A partition ID contains several dimensions: +// project ID and namespace ID. +type PartitionId struct { + // The ID of the project to which the entities belong. + ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // If not empty, the ID of the namespace to which the entities belong. + NamespaceId string `protobuf:"bytes,4,opt,name=namespace_id,json=namespaceId" json:"namespace_id,omitempty"` +} + +func (m *PartitionId) Reset() { *m = PartitionId{} } +func (m *PartitionId) String() string { return proto.CompactTextString(m) } +func (*PartitionId) ProtoMessage() {} +func (*PartitionId) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } + +func (m *PartitionId) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *PartitionId) GetNamespaceId() string { + if m != nil { + return m.NamespaceId + } + return "" +} + +// A representation of a Datastore kind. +type KindExpression struct { + // The name of the kind. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *KindExpression) Reset() { *m = KindExpression{} } +func (m *KindExpression) String() string { return proto.CompactTextString(m) } +func (*KindExpression) ProtoMessage() {} +func (*KindExpression) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } + +func (m *KindExpression) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Options defining a data set within Google Cloud Datastore. +type DatastoreOptions struct { + // A partition ID identifies a grouping of entities. The grouping is always + // by project and namespace, however the namespace ID may be empty. + PartitionId *PartitionId `protobuf:"bytes,1,opt,name=partition_id,json=partitionId" json:"partition_id,omitempty"` + // The kind to process. + Kind *KindExpression `protobuf:"bytes,2,opt,name=kind" json:"kind,omitempty"` +} + +func (m *DatastoreOptions) Reset() { *m = DatastoreOptions{} } +func (m *DatastoreOptions) String() string { return proto.CompactTextString(m) } +func (*DatastoreOptions) ProtoMessage() {} +func (*DatastoreOptions) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } + +func (m *DatastoreOptions) GetPartitionId() *PartitionId { + if m != nil { + return m.PartitionId + } + return nil +} + +func (m *DatastoreOptions) GetKind() *KindExpression { + if m != nil { + return m.Kind + } + return nil +} + +// Options defining a file or a set of files (path ending with *) within +// a Google Cloud Storage bucket. +type CloudStorageOptions struct { + FileSet *CloudStorageOptions_FileSet `protobuf:"bytes,1,opt,name=file_set,json=fileSet" json:"file_set,omitempty"` + // Max number of bytes to scan from a file. If a scanned file's size is bigger + // than this value then the rest of the bytes are omitted. + BytesLimitPerFile int64 `protobuf:"varint,4,opt,name=bytes_limit_per_file,json=bytesLimitPerFile" json:"bytes_limit_per_file,omitempty"` +} + +func (m *CloudStorageOptions) Reset() { *m = CloudStorageOptions{} } +func (m *CloudStorageOptions) String() string { return proto.CompactTextString(m) } +func (*CloudStorageOptions) ProtoMessage() {} +func (*CloudStorageOptions) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } + +func (m *CloudStorageOptions) GetFileSet() *CloudStorageOptions_FileSet { + if m != nil { + return m.FileSet + } + return nil +} + +func (m *CloudStorageOptions) GetBytesLimitPerFile() int64 { + if m != nil { + return m.BytesLimitPerFile + } + return 0 +} + +// Set of files to scan. +type CloudStorageOptions_FileSet struct { + // The url, in the format `gs:///`. Trailing wildcard in the + // path is allowed. + Url string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"` +} + +func (m *CloudStorageOptions_FileSet) Reset() { *m = CloudStorageOptions_FileSet{} } +func (m *CloudStorageOptions_FileSet) String() string { return proto.CompactTextString(m) } +func (*CloudStorageOptions_FileSet) ProtoMessage() {} +func (*CloudStorageOptions_FileSet) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6, 0} } + +func (m *CloudStorageOptions_FileSet) GetUrl() string { + if m != nil { + return m.Url + } + return "" +} + +// Options defining BigQuery table and row identifiers. +type BigQueryOptions struct { + // Complete BigQuery table reference. + TableReference *BigQueryTable `protobuf:"bytes,1,opt,name=table_reference,json=tableReference" json:"table_reference,omitempty"` + // References to fields uniquely identifying rows within the table. + // Nested fields in the format, like `person.birthdate.year`, are allowed. + IdentifyingFields []*FieldId `protobuf:"bytes,2,rep,name=identifying_fields,json=identifyingFields" json:"identifying_fields,omitempty"` +} + +func (m *BigQueryOptions) Reset() { *m = BigQueryOptions{} } +func (m *BigQueryOptions) String() string { return proto.CompactTextString(m) } +func (*BigQueryOptions) ProtoMessage() {} +func (*BigQueryOptions) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} } + +func (m *BigQueryOptions) GetTableReference() *BigQueryTable { + if m != nil { + return m.TableReference + } + return nil +} + +func (m *BigQueryOptions) GetIdentifyingFields() []*FieldId { + if m != nil { + return m.IdentifyingFields + } + return nil +} + +// Shared message indicating Cloud storage type. +type StorageConfig struct { + // Types that are valid to be assigned to Type: + // *StorageConfig_DatastoreOptions + // *StorageConfig_CloudStorageOptions + // *StorageConfig_BigQueryOptions + Type isStorageConfig_Type `protobuf_oneof:"type"` + TimespanConfig *StorageConfig_TimespanConfig `protobuf:"bytes,6,opt,name=timespan_config,json=timespanConfig" json:"timespan_config,omitempty"` +} + +func (m *StorageConfig) Reset() { *m = StorageConfig{} } +func (m *StorageConfig) String() string { return proto.CompactTextString(m) } +func (*StorageConfig) ProtoMessage() {} +func (*StorageConfig) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} } + +type isStorageConfig_Type interface { + isStorageConfig_Type() +} + +type StorageConfig_DatastoreOptions struct { + DatastoreOptions *DatastoreOptions `protobuf:"bytes,2,opt,name=datastore_options,json=datastoreOptions,oneof"` +} +type StorageConfig_CloudStorageOptions struct { + CloudStorageOptions *CloudStorageOptions `protobuf:"bytes,3,opt,name=cloud_storage_options,json=cloudStorageOptions,oneof"` +} +type StorageConfig_BigQueryOptions struct { + BigQueryOptions *BigQueryOptions `protobuf:"bytes,4,opt,name=big_query_options,json=bigQueryOptions,oneof"` +} + +func (*StorageConfig_DatastoreOptions) isStorageConfig_Type() {} +func (*StorageConfig_CloudStorageOptions) isStorageConfig_Type() {} +func (*StorageConfig_BigQueryOptions) isStorageConfig_Type() {} + +func (m *StorageConfig) GetType() isStorageConfig_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *StorageConfig) GetDatastoreOptions() *DatastoreOptions { + if x, ok := m.GetType().(*StorageConfig_DatastoreOptions); ok { + return x.DatastoreOptions + } + return nil +} + +func (m *StorageConfig) GetCloudStorageOptions() *CloudStorageOptions { + if x, ok := m.GetType().(*StorageConfig_CloudStorageOptions); ok { + return x.CloudStorageOptions + } + return nil +} + +func (m *StorageConfig) GetBigQueryOptions() *BigQueryOptions { + if x, ok := m.GetType().(*StorageConfig_BigQueryOptions); ok { + return x.BigQueryOptions + } + return nil +} + +func (m *StorageConfig) GetTimespanConfig() *StorageConfig_TimespanConfig { + if m != nil { + return m.TimespanConfig + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*StorageConfig) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _StorageConfig_OneofMarshaler, _StorageConfig_OneofUnmarshaler, _StorageConfig_OneofSizer, []interface{}{ + (*StorageConfig_DatastoreOptions)(nil), + (*StorageConfig_CloudStorageOptions)(nil), + (*StorageConfig_BigQueryOptions)(nil), + } +} + +func _StorageConfig_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*StorageConfig) + // type + switch x := m.Type.(type) { + case *StorageConfig_DatastoreOptions: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DatastoreOptions); err != nil { + return err + } + case *StorageConfig_CloudStorageOptions: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.CloudStorageOptions); err != nil { + return err + } + case *StorageConfig_BigQueryOptions: + b.EncodeVarint(4<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.BigQueryOptions); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("StorageConfig.Type has unexpected type %T", x) + } + return nil +} + +func _StorageConfig_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*StorageConfig) + switch tag { + case 2: // type.datastore_options + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(DatastoreOptions) + err := b.DecodeMessage(msg) + m.Type = &StorageConfig_DatastoreOptions{msg} + return true, err + case 3: // type.cloud_storage_options + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CloudStorageOptions) + err := b.DecodeMessage(msg) + m.Type = &StorageConfig_CloudStorageOptions{msg} + return true, err + case 4: // type.big_query_options + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(BigQueryOptions) + err := b.DecodeMessage(msg) + m.Type = &StorageConfig_BigQueryOptions{msg} + return true, err + default: + return false, nil + } +} + +func _StorageConfig_OneofSizer(msg proto.Message) (n int) { + m := msg.(*StorageConfig) + // type + switch x := m.Type.(type) { + case *StorageConfig_DatastoreOptions: + s := proto.Size(x.DatastoreOptions) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *StorageConfig_CloudStorageOptions: + s := proto.Size(x.CloudStorageOptions) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *StorageConfig_BigQueryOptions: + s := proto.Size(x.BigQueryOptions) + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Configuration of the timespan of the items to include in scanning. +// Currently only supported when inspecting Google Cloud Storage and BigQuery. +type StorageConfig_TimespanConfig struct { + // Exclude files older than this value. + StartTime *google_protobuf1.Timestamp `protobuf:"bytes,1,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + // Exclude files newer than this value. + // If set to zero, no upper time limit is applied. + EndTime *google_protobuf1.Timestamp `protobuf:"bytes,2,opt,name=end_time,json=endTime" json:"end_time,omitempty"` + // When the job is started by a JobTrigger we will automatically figure out + // a valid start_time to avoid scanning files that have not been modified + // since the last time the JobTrigger executed. This will be based on the + // time of the execution of the last run of the JobTrigger. + EnableAutoPopulationOfTimespanConfig bool `protobuf:"varint,4,opt,name=enable_auto_population_of_timespan_config,json=enableAutoPopulationOfTimespanConfig" json:"enable_auto_population_of_timespan_config,omitempty"` +} + +func (m *StorageConfig_TimespanConfig) Reset() { *m = StorageConfig_TimespanConfig{} } +func (m *StorageConfig_TimespanConfig) String() string { return proto.CompactTextString(m) } +func (*StorageConfig_TimespanConfig) ProtoMessage() {} +func (*StorageConfig_TimespanConfig) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8, 0} } + +func (m *StorageConfig_TimespanConfig) GetStartTime() *google_protobuf1.Timestamp { + if m != nil { + return m.StartTime + } + return nil +} + +func (m *StorageConfig_TimespanConfig) GetEndTime() *google_protobuf1.Timestamp { + if m != nil { + return m.EndTime + } + return nil +} + +func (m *StorageConfig_TimespanConfig) GetEnableAutoPopulationOfTimespanConfig() bool { + if m != nil { + return m.EnableAutoPopulationOfTimespanConfig + } + return false +} + +// Row key for identifying a record in BigQuery table. +type BigQueryKey struct { + // Complete BigQuery table reference. + TableReference *BigQueryTable `protobuf:"bytes,1,opt,name=table_reference,json=tableReference" json:"table_reference,omitempty"` + // Absolute number of the row from the beginning of the table at the time + // of scanning. + RowNumber int64 `protobuf:"varint,2,opt,name=row_number,json=rowNumber" json:"row_number,omitempty"` +} + +func (m *BigQueryKey) Reset() { *m = BigQueryKey{} } +func (m *BigQueryKey) String() string { return proto.CompactTextString(m) } +func (*BigQueryKey) ProtoMessage() {} +func (*BigQueryKey) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{9} } + +func (m *BigQueryKey) GetTableReference() *BigQueryTable { + if m != nil { + return m.TableReference + } + return nil +} + +func (m *BigQueryKey) GetRowNumber() int64 { + if m != nil { + return m.RowNumber + } + return 0 +} + +// Record key for a finding in a Cloud Storage file. +type CloudStorageKey struct { + // Path to the file. + FilePath string `protobuf:"bytes,1,opt,name=file_path,json=filePath" json:"file_path,omitempty"` + // Byte offset of the referenced data in the file. + StartOffset int64 `protobuf:"varint,2,opt,name=start_offset,json=startOffset" json:"start_offset,omitempty"` +} + +func (m *CloudStorageKey) Reset() { *m = CloudStorageKey{} } +func (m *CloudStorageKey) String() string { return proto.CompactTextString(m) } +func (*CloudStorageKey) ProtoMessage() {} +func (*CloudStorageKey) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{10} } + +func (m *CloudStorageKey) GetFilePath() string { + if m != nil { + return m.FilePath + } + return "" +} + +func (m *CloudStorageKey) GetStartOffset() int64 { + if m != nil { + return m.StartOffset + } + return 0 +} + +// Record key for a finding in Cloud Datastore. +type DatastoreKey struct { + // Datastore entity key. + EntityKey *Key `protobuf:"bytes,1,opt,name=entity_key,json=entityKey" json:"entity_key,omitempty"` +} + +func (m *DatastoreKey) Reset() { *m = DatastoreKey{} } +func (m *DatastoreKey) String() string { return proto.CompactTextString(m) } +func (*DatastoreKey) ProtoMessage() {} +func (*DatastoreKey) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{11} } + +func (m *DatastoreKey) GetEntityKey() *Key { + if m != nil { + return m.EntityKey + } + return nil +} + +// A unique identifier for a Datastore entity. +// If a key's partition ID or any of its path kinds or names are +// reserved/read-only, the key is reserved/read-only. +// A reserved/read-only key is forbidden in certain documented contexts. +type Key struct { + // Entities are partitioned into subsets, currently identified by a project + // ID and namespace ID. + // Queries are scoped to a single partition. + PartitionId *PartitionId `protobuf:"bytes,1,opt,name=partition_id,json=partitionId" json:"partition_id,omitempty"` + // The entity path. + // An entity path consists of one or more elements composed of a kind and a + // string or numerical identifier, which identify entities. The first + // element identifies a _root entity_, the second element identifies + // a _child_ of the root entity, the third element identifies a child of the + // second entity, and so forth. The entities identified by all prefixes of + // the path are called the element's _ancestors_. + // + // A path can never be empty, and a path can have at most 100 elements. + Path []*Key_PathElement `protobuf:"bytes,2,rep,name=path" json:"path,omitempty"` +} + +func (m *Key) Reset() { *m = Key{} } +func (m *Key) String() string { return proto.CompactTextString(m) } +func (*Key) ProtoMessage() {} +func (*Key) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{12} } + +func (m *Key) GetPartitionId() *PartitionId { + if m != nil { + return m.PartitionId + } + return nil +} + +func (m *Key) GetPath() []*Key_PathElement { + if m != nil { + return m.Path + } + return nil +} + +// A (kind, ID/name) pair used to construct a key path. +// +// If either name or ID is set, the element is complete. +// If neither is set, the element is incomplete. +type Key_PathElement struct { + // The kind of the entity. + // A kind matching regex `__.*__` is reserved/read-only. + // A kind must not contain more than 1500 bytes when UTF-8 encoded. + // Cannot be `""`. + Kind string `protobuf:"bytes,1,opt,name=kind" json:"kind,omitempty"` + // The type of ID. + // + // Types that are valid to be assigned to IdType: + // *Key_PathElement_Id + // *Key_PathElement_Name + IdType isKey_PathElement_IdType `protobuf_oneof:"id_type"` +} + +func (m *Key_PathElement) Reset() { *m = Key_PathElement{} } +func (m *Key_PathElement) String() string { return proto.CompactTextString(m) } +func (*Key_PathElement) ProtoMessage() {} +func (*Key_PathElement) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{12, 0} } + +type isKey_PathElement_IdType interface { + isKey_PathElement_IdType() +} + +type Key_PathElement_Id struct { + Id int64 `protobuf:"varint,2,opt,name=id,oneof"` +} +type Key_PathElement_Name struct { + Name string `protobuf:"bytes,3,opt,name=name,oneof"` +} + +func (*Key_PathElement_Id) isKey_PathElement_IdType() {} +func (*Key_PathElement_Name) isKey_PathElement_IdType() {} + +func (m *Key_PathElement) GetIdType() isKey_PathElement_IdType { + if m != nil { + return m.IdType + } + return nil +} + +func (m *Key_PathElement) GetKind() string { + if m != nil { + return m.Kind + } + return "" +} + +func (m *Key_PathElement) GetId() int64 { + if x, ok := m.GetIdType().(*Key_PathElement_Id); ok { + return x.Id + } + return 0 +} + +func (m *Key_PathElement) GetName() string { + if x, ok := m.GetIdType().(*Key_PathElement_Name); ok { + return x.Name + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Key_PathElement) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Key_PathElement_OneofMarshaler, _Key_PathElement_OneofUnmarshaler, _Key_PathElement_OneofSizer, []interface{}{ + (*Key_PathElement_Id)(nil), + (*Key_PathElement_Name)(nil), + } +} + +func _Key_PathElement_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Key_PathElement) + // id_type + switch x := m.IdType.(type) { + case *Key_PathElement_Id: + b.EncodeVarint(2<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.Id)) + case *Key_PathElement_Name: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Name) + case nil: + default: + return fmt.Errorf("Key_PathElement.IdType has unexpected type %T", x) + } + return nil +} + +func _Key_PathElement_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Key_PathElement) + switch tag { + case 2: // id_type.id + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.IdType = &Key_PathElement_Id{int64(x)} + return true, err + case 3: // id_type.name + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.IdType = &Key_PathElement_Name{x} + return true, err + default: + return false, nil + } +} + +func _Key_PathElement_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Key_PathElement) + // id_type + switch x := m.IdType.(type) { + case *Key_PathElement_Id: + n += proto.SizeVarint(2<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.Id)) + case *Key_PathElement_Name: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Name))) + n += len(x.Name) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Message for a unique key indicating a record that contains a finding. +type RecordKey struct { + // Types that are valid to be assigned to Type: + // *RecordKey_CloudStorageKey + // *RecordKey_DatastoreKey + // *RecordKey_BigQueryKey + Type isRecordKey_Type `protobuf_oneof:"type"` +} + +func (m *RecordKey) Reset() { *m = RecordKey{} } +func (m *RecordKey) String() string { return proto.CompactTextString(m) } +func (*RecordKey) ProtoMessage() {} +func (*RecordKey) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{13} } + +type isRecordKey_Type interface { + isRecordKey_Type() +} + +type RecordKey_CloudStorageKey struct { + CloudStorageKey *CloudStorageKey `protobuf:"bytes,1,opt,name=cloud_storage_key,json=cloudStorageKey,oneof"` +} +type RecordKey_DatastoreKey struct { + DatastoreKey *DatastoreKey `protobuf:"bytes,2,opt,name=datastore_key,json=datastoreKey,oneof"` +} +type RecordKey_BigQueryKey struct { + BigQueryKey *BigQueryKey `protobuf:"bytes,3,opt,name=big_query_key,json=bigQueryKey,oneof"` +} + +func (*RecordKey_CloudStorageKey) isRecordKey_Type() {} +func (*RecordKey_DatastoreKey) isRecordKey_Type() {} +func (*RecordKey_BigQueryKey) isRecordKey_Type() {} + +func (m *RecordKey) GetType() isRecordKey_Type { + if m != nil { + return m.Type + } + return nil +} + +func (m *RecordKey) GetCloudStorageKey() *CloudStorageKey { + if x, ok := m.GetType().(*RecordKey_CloudStorageKey); ok { + return x.CloudStorageKey + } + return nil +} + +func (m *RecordKey) GetDatastoreKey() *DatastoreKey { + if x, ok := m.GetType().(*RecordKey_DatastoreKey); ok { + return x.DatastoreKey + } + return nil +} + +func (m *RecordKey) GetBigQueryKey() *BigQueryKey { + if x, ok := m.GetType().(*RecordKey_BigQueryKey); ok { + return x.BigQueryKey + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*RecordKey) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _RecordKey_OneofMarshaler, _RecordKey_OneofUnmarshaler, _RecordKey_OneofSizer, []interface{}{ + (*RecordKey_CloudStorageKey)(nil), + (*RecordKey_DatastoreKey)(nil), + (*RecordKey_BigQueryKey)(nil), + } +} + +func _RecordKey_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*RecordKey) + // type + switch x := m.Type.(type) { + case *RecordKey_CloudStorageKey: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.CloudStorageKey); err != nil { + return err + } + case *RecordKey_DatastoreKey: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.DatastoreKey); err != nil { + return err + } + case *RecordKey_BigQueryKey: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.BigQueryKey); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("RecordKey.Type has unexpected type %T", x) + } + return nil +} + +func _RecordKey_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*RecordKey) + switch tag { + case 1: // type.cloud_storage_key + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(CloudStorageKey) + err := b.DecodeMessage(msg) + m.Type = &RecordKey_CloudStorageKey{msg} + return true, err + case 2: // type.datastore_key + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(DatastoreKey) + err := b.DecodeMessage(msg) + m.Type = &RecordKey_DatastoreKey{msg} + return true, err + case 3: // type.big_query_key + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(BigQueryKey) + err := b.DecodeMessage(msg) + m.Type = &RecordKey_BigQueryKey{msg} + return true, err + default: + return false, nil + } +} + +func _RecordKey_OneofSizer(msg proto.Message) (n int) { + m := msg.(*RecordKey) + // type + switch x := m.Type.(type) { + case *RecordKey_CloudStorageKey: + s := proto.Size(x.CloudStorageKey) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *RecordKey_DatastoreKey: + s := proto.Size(x.DatastoreKey) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *RecordKey_BigQueryKey: + s := proto.Size(x.BigQueryKey) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Message defining the location of a BigQuery table. A table is uniquely +// identified by its project_id, dataset_id, and table_name. Within a query +// a table is often referenced with a string in the format of: +// `:.` or +// `..`. +type BigQueryTable struct { + // The Google Cloud Platform project ID of the project containing the table. + // If omitted, project ID is inferred from the API call. + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId" json:"project_id,omitempty"` + // Dataset ID of the table. + DatasetId string `protobuf:"bytes,2,opt,name=dataset_id,json=datasetId" json:"dataset_id,omitempty"` + // Name of the table. + TableId string `protobuf:"bytes,3,opt,name=table_id,json=tableId" json:"table_id,omitempty"` +} + +func (m *BigQueryTable) Reset() { *m = BigQueryTable{} } +func (m *BigQueryTable) String() string { return proto.CompactTextString(m) } +func (*BigQueryTable) ProtoMessage() {} +func (*BigQueryTable) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{14} } + +func (m *BigQueryTable) GetProjectId() string { + if m != nil { + return m.ProjectId + } + return "" +} + +func (m *BigQueryTable) GetDatasetId() string { + if m != nil { + return m.DatasetId + } + return "" +} + +func (m *BigQueryTable) GetTableId() string { + if m != nil { + return m.TableId + } + return "" +} + +// An entity in a dataset is a field or set of fields that correspond to a +// single person. For example, in medical records the `EntityId` might be +// a patient identifier, or for financial records it might be an account +// identifier. This message is used when generalizations or analysis must be +// consistent across multiple rows pertaining to the same entity. +type EntityId struct { + // Composite key indicating which field contains the entity identifier. + Field *FieldId `protobuf:"bytes,1,opt,name=field" json:"field,omitempty"` +} + +func (m *EntityId) Reset() { *m = EntityId{} } +func (m *EntityId) String() string { return proto.CompactTextString(m) } +func (*EntityId) ProtoMessage() {} +func (*EntityId) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{15} } + +func (m *EntityId) GetField() *FieldId { + if m != nil { + return m.Field + } + return nil +} + +func init() { + proto.RegisterType((*InfoType)(nil), "google.privacy.dlp.v2beta2.InfoType") + proto.RegisterType((*CustomInfoType)(nil), "google.privacy.dlp.v2beta2.CustomInfoType") + proto.RegisterType((*CustomInfoType_Dictionary)(nil), "google.privacy.dlp.v2beta2.CustomInfoType.Dictionary") + proto.RegisterType((*CustomInfoType_Dictionary_WordList)(nil), "google.privacy.dlp.v2beta2.CustomInfoType.Dictionary.WordList") + proto.RegisterType((*CustomInfoType_Regex)(nil), "google.privacy.dlp.v2beta2.CustomInfoType.Regex") + proto.RegisterType((*CustomInfoType_SurrogateType)(nil), "google.privacy.dlp.v2beta2.CustomInfoType.SurrogateType") + proto.RegisterType((*CustomInfoType_DetectionRule)(nil), "google.privacy.dlp.v2beta2.CustomInfoType.DetectionRule") + proto.RegisterType((*CustomInfoType_DetectionRule_Proximity)(nil), "google.privacy.dlp.v2beta2.CustomInfoType.DetectionRule.Proximity") + proto.RegisterType((*CustomInfoType_DetectionRule_LikelihoodAdjustment)(nil), "google.privacy.dlp.v2beta2.CustomInfoType.DetectionRule.LikelihoodAdjustment") + proto.RegisterType((*CustomInfoType_DetectionRule_HotwordRule)(nil), "google.privacy.dlp.v2beta2.CustomInfoType.DetectionRule.HotwordRule") + proto.RegisterType((*FieldId)(nil), "google.privacy.dlp.v2beta2.FieldId") + proto.RegisterType((*PartitionId)(nil), "google.privacy.dlp.v2beta2.PartitionId") + proto.RegisterType((*KindExpression)(nil), "google.privacy.dlp.v2beta2.KindExpression") + proto.RegisterType((*DatastoreOptions)(nil), "google.privacy.dlp.v2beta2.DatastoreOptions") + proto.RegisterType((*CloudStorageOptions)(nil), "google.privacy.dlp.v2beta2.CloudStorageOptions") + proto.RegisterType((*CloudStorageOptions_FileSet)(nil), "google.privacy.dlp.v2beta2.CloudStorageOptions.FileSet") + proto.RegisterType((*BigQueryOptions)(nil), "google.privacy.dlp.v2beta2.BigQueryOptions") + proto.RegisterType((*StorageConfig)(nil), "google.privacy.dlp.v2beta2.StorageConfig") + proto.RegisterType((*StorageConfig_TimespanConfig)(nil), "google.privacy.dlp.v2beta2.StorageConfig.TimespanConfig") + proto.RegisterType((*BigQueryKey)(nil), "google.privacy.dlp.v2beta2.BigQueryKey") + proto.RegisterType((*CloudStorageKey)(nil), "google.privacy.dlp.v2beta2.CloudStorageKey") + proto.RegisterType((*DatastoreKey)(nil), "google.privacy.dlp.v2beta2.DatastoreKey") + proto.RegisterType((*Key)(nil), "google.privacy.dlp.v2beta2.Key") + proto.RegisterType((*Key_PathElement)(nil), "google.privacy.dlp.v2beta2.Key.PathElement") + proto.RegisterType((*RecordKey)(nil), "google.privacy.dlp.v2beta2.RecordKey") + proto.RegisterType((*BigQueryTable)(nil), "google.privacy.dlp.v2beta2.BigQueryTable") + proto.RegisterType((*EntityId)(nil), "google.privacy.dlp.v2beta2.EntityId") + proto.RegisterEnum("google.privacy.dlp.v2beta2.Likelihood", Likelihood_name, Likelihood_value) +} + +func init() { proto.RegisterFile("google/privacy/dlp/v2beta2/storage.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 1585 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x58, 0xcd, 0x72, 0x23, 0x49, + 0x11, 0x56, 0xeb, 0xc7, 0x96, 0x52, 0xd6, 0x8f, 0x6b, 0xbc, 0x84, 0xe8, 0xc5, 0xbb, 0x5e, 0xed, + 0x04, 0x78, 0x77, 0x08, 0x09, 0x4c, 0x6c, 0xc0, 0x06, 0xc1, 0x10, 0x96, 0x25, 0x23, 0x61, 0xaf, + 0xa5, 0x2d, 0x79, 0x66, 0xc2, 0x30, 0x44, 0xd3, 0x52, 0x55, 0xcb, 0x35, 0xd3, 0xea, 0x6a, 0xba, + 0x4b, 0x63, 0xeb, 0x46, 0xf0, 0x00, 0x5c, 0xb9, 0x71, 0xe1, 0x46, 0x70, 0xe1, 0x44, 0xf0, 0x0a, + 0x70, 0xe5, 0xc6, 0x0b, 0xf0, 0x06, 0x5c, 0x89, 0xaa, 0xea, 0x6e, 0x49, 0xc6, 0xc8, 0x3f, 0xc1, + 0x9e, 0xdc, 0x99, 0x95, 0xf9, 0x55, 0xfe, 0x67, 0x59, 0xb0, 0x3f, 0xe1, 0x7c, 0xe2, 0xd2, 0xa6, + 0x1f, 0xb0, 0x77, 0xf6, 0x78, 0xde, 0x24, 0xae, 0xdf, 0x7c, 0x77, 0x30, 0xa2, 0xc2, 0x3e, 0x68, + 0x86, 0x82, 0x07, 0xf6, 0x84, 0x36, 0xfc, 0x80, 0x0b, 0x8e, 0x4c, 0x2d, 0xd9, 0x88, 0x24, 0x1b, + 0xc4, 0xf5, 0x1b, 0x91, 0xa4, 0xf9, 0x8d, 0x08, 0xc5, 0xf6, 0x59, 0xd3, 0xf6, 0x3c, 0x2e, 0x6c, + 0xc1, 0xb8, 0x17, 0x6a, 0x4d, 0xf3, 0xc3, 0xe4, 0x0e, 0x2e, 0xf8, 0x68, 0xe6, 0x34, 0x05, 0x9b, + 0xd2, 0x50, 0xd8, 0x53, 0x5f, 0x0b, 0xd4, 0x3f, 0x80, 0x7c, 0xcf, 0x73, 0xf8, 0xf9, 0xdc, 0xa7, + 0x08, 0x41, 0xd6, 0xb3, 0xa7, 0xb4, 0x66, 0xec, 0x19, 0xfb, 0x05, 0xac, 0xbe, 0xeb, 0x7f, 0x2e, + 0x42, 0xf9, 0x68, 0x16, 0x0a, 0x3e, 0x4d, 0xc4, 0x0e, 0xa1, 0xc0, 0x3c, 0x87, 0x5b, 0x62, 0xee, + 0x6b, 0xd9, 0xe2, 0xc1, 0xd3, 0xc6, 0xff, 0xb6, 0xb0, 0x11, 0x2b, 0xe2, 0x3c, 0x8b, 0x21, 0x8e, + 0x01, 0x5c, 0xf6, 0x96, 0xba, 0xec, 0x92, 0x73, 0x52, 0xdb, 0xd8, 0x33, 0xf6, 0xcb, 0x07, 0xdf, + 0x5c, 0x87, 0x71, 0x9a, 0x48, 0xe3, 0x25, 0x4d, 0xf4, 0x0a, 0x80, 0xb0, 0xb1, 0x74, 0xd8, 0x0e, + 0xe6, 0xb5, 0xb4, 0xb2, 0xe5, 0xb3, 0x75, 0x38, 0xab, 0xae, 0x34, 0xda, 0x89, 0x72, 0x37, 0x85, + 0x97, 0xa0, 0x50, 0x17, 0x72, 0x01, 0x9d, 0xd0, 0xeb, 0x5a, 0x46, 0x61, 0x7e, 0xe7, 0x01, 0x98, + 0x58, 0xea, 0x75, 0x53, 0x58, 0x03, 0x20, 0x1b, 0xca, 0xe1, 0x2c, 0x08, 0xf8, 0xc4, 0x16, 0x54, + 0x87, 0x2c, 0xab, 0x20, 0x7f, 0xf0, 0x00, 0xc8, 0x61, 0x0c, 0x20, 0xa9, 0x6e, 0x0a, 0x97, 0xc2, + 0x65, 0x06, 0xb2, 0xa1, 0x42, 0xa8, 0xa0, 0xca, 0x78, 0x2b, 0x98, 0xb9, 0x34, 0xac, 0x6d, 0xee, + 0x65, 0x1e, 0x78, 0x47, 0x3b, 0x46, 0xc0, 0x33, 0x97, 0xe2, 0x32, 0x59, 0x26, 0x43, 0xf3, 0x77, + 0x06, 0xc0, 0x22, 0x58, 0xe8, 0x17, 0x50, 0xb8, 0xe2, 0x01, 0xb1, 0x5c, 0x16, 0x8a, 0xa8, 0x04, + 0x9e, 0x3f, 0x2a, 0xec, 0x8d, 0x57, 0x3c, 0x20, 0xa7, 0x2c, 0x14, 0xdd, 0x14, 0xce, 0x5f, 0x45, + 0xdf, 0xe6, 0x1e, 0xe4, 0x63, 0x3e, 0xda, 0x81, 0x9c, 0xe4, 0x87, 0x35, 0x63, 0x2f, 0xb3, 0x5f, + 0xc0, 0x9a, 0x68, 0xe5, 0x61, 0x23, 0xe4, 0xb3, 0x60, 0x4c, 0xcd, 0x8f, 0x20, 0xa7, 0x22, 0x8e, + 0x6a, 0xb0, 0xe9, 0xdb, 0x42, 0xd0, 0xc0, 0x8b, 0x0a, 0x38, 0x26, 0xcd, 0x0a, 0x94, 0x56, 0x22, + 0x68, 0xfe, 0x23, 0x07, 0xa5, 0x15, 0x7f, 0x11, 0x83, 0xad, 0x4b, 0x2e, 0x94, 0x4f, 0x32, 0x80, + 0x91, 0x4f, 0xed, 0xc7, 0xc6, 0xaf, 0xd1, 0xd5, 0x60, 0xf2, 0xbb, 0x9b, 0xc2, 0xc5, 0xcb, 0x05, + 0x69, 0x0e, 0xa1, 0x30, 0x08, 0xf8, 0x35, 0x9b, 0x32, 0x31, 0x47, 0x1f, 0x43, 0xe9, 0x8a, 0x79, + 0x84, 0x5f, 0x59, 0x23, 0xea, 0xf0, 0x40, 0x5f, 0x9c, 0xc3, 0x5b, 0x9a, 0xd9, 0x52, 0x3c, 0xf4, + 0x11, 0x44, 0xb4, 0x65, 0x3b, 0x82, 0x06, 0xaa, 0xce, 0x73, 0xb8, 0xa8, 0x79, 0x87, 0x92, 0x65, + 0xfe, 0xc9, 0x80, 0x9d, 0x45, 0x8f, 0x1c, 0x92, 0x37, 0xb3, 0x50, 0x4c, 0xa9, 0x27, 0xd0, 0x10, + 0xaa, 0x0e, 0xbb, 0xa6, 0x32, 0x55, 0x49, 0xbf, 0x19, 0x0f, 0xe9, 0xb7, 0x6e, 0x0a, 0x57, 0x14, + 0xc2, 0x82, 0x85, 0xbe, 0x0b, 0x4f, 0x02, 0xea, 0xda, 0x82, 0xbd, 0xa3, 0xcb, 0xb8, 0xca, 0xae, + 0x6e, 0x0a, 0xa3, 0xf8, 0x70, 0xa1, 0xd2, 0xda, 0x02, 0xb0, 0x13, 0xab, 0xcc, 0xbf, 0xa7, 0xa1, + 0xb8, 0x14, 0x22, 0xf4, 0x02, 0x4a, 0x49, 0xf8, 0x55, 0xdb, 0x19, 0x8f, 0x6b, 0x3b, 0x1c, 0x67, + 0x51, 0x97, 0xc4, 0x2f, 0xa1, 0xe0, 0xc7, 0xa1, 0x8e, 0xa6, 0x43, 0xeb, 0xd1, 0x29, 0x4d, 0x92, + 0x86, 0x17, 0xa0, 0xe8, 0x37, 0x06, 0xbc, 0xb7, 0x88, 0x80, 0xb5, 0x70, 0x31, 0x1a, 0x1c, 0x5f, + 0x3c, 0xfa, 0xba, 0xdb, 0xb2, 0x89, 0x77, 0xdc, 0x5b, 0xb8, 0xad, 0x0d, 0xc8, 0xca, 0xc1, 0x12, + 0xff, 0xad, 0xef, 0xc2, 0xe6, 0x31, 0xa3, 0x2e, 0xe9, 0x91, 0x5b, 0x47, 0x7a, 0x1f, 0x8a, 0x03, + 0x3b, 0x10, 0x4c, 0x5e, 0xd5, 0x23, 0x68, 0x17, 0xc0, 0x0f, 0xf8, 0x1b, 0x3a, 0x16, 0x16, 0xd3, + 0x39, 0x2c, 0x28, 0x0f, 0x25, 0xa7, 0x47, 0x64, 0xf1, 0x49, 0xad, 0xd0, 0xb7, 0xc7, 0x54, 0x0a, + 0x64, 0x95, 0x40, 0x31, 0xe1, 0xf5, 0x48, 0xfd, 0x29, 0x94, 0x4f, 0x98, 0x47, 0x3a, 0xd7, 0x7e, + 0x40, 0xc3, 0x90, 0x71, 0xef, 0xd6, 0x6b, 0x7f, 0x6f, 0x40, 0xb5, 0x6d, 0x0b, 0x5b, 0xae, 0x36, + 0xda, 0xf7, 0xd5, 0x96, 0x42, 0x3f, 0x85, 0x2d, 0x3f, 0xb6, 0x45, 0xa2, 0xeb, 0xbc, 0x7f, 0x6b, + 0x5d, 0xd4, 0x96, 0x6c, 0xc7, 0x45, 0x7f, 0xc9, 0x91, 0xe7, 0x90, 0x7d, 0xcb, 0x3c, 0x12, 0x25, + 0xfa, 0xd3, 0x75, 0x18, 0xab, 0xe6, 0x62, 0xa5, 0x57, 0xff, 0x8b, 0x01, 0x4f, 0x8e, 0x5c, 0x3e, + 0x23, 0x43, 0xbd, 0x7c, 0x63, 0x1b, 0x31, 0xe4, 0x1d, 0xe6, 0x52, 0x2b, 0xa4, 0xf1, 0xac, 0xfb, + 0xfe, 0xda, 0xac, 0xfe, 0x37, 0x44, 0xe3, 0x98, 0xb9, 0x74, 0x48, 0x05, 0xde, 0x74, 0xf4, 0x07, + 0x6a, 0xc2, 0xce, 0x68, 0x2e, 0x68, 0x68, 0xb9, 0xb2, 0x8e, 0x2c, 0x9f, 0x06, 0x96, 0x3c, 0x52, + 0xd1, 0xcd, 0xe0, 0x6d, 0x75, 0x76, 0x2a, 0x8f, 0x06, 0x34, 0x90, 0xca, 0xe6, 0xfb, 0x32, 0xa7, + 0x5a, 0xb7, 0x0a, 0x99, 0x59, 0xe0, 0x46, 0xb1, 0x95, 0x9f, 0xf5, 0xbf, 0x1a, 0x50, 0x69, 0xb1, + 0xc9, 0x97, 0x33, 0x1a, 0xcc, 0x17, 0x56, 0x57, 0x84, 0x3d, 0x72, 0xa9, 0x15, 0x50, 0x87, 0x06, + 0xd4, 0x1b, 0xc7, 0x43, 0xed, 0x93, 0x75, 0xc6, 0xc7, 0x28, 0xe7, 0x52, 0x15, 0x97, 0x15, 0x02, + 0x8e, 0x01, 0x10, 0x06, 0xc4, 0x08, 0xf5, 0x04, 0x73, 0xe6, 0xcc, 0x9b, 0x58, 0x8e, 0x2c, 0xb2, + 0xb0, 0x96, 0x56, 0xbb, 0xe6, 0xe3, 0x75, 0xb0, 0x51, 0x39, 0xe2, 0xed, 0x25, 0x75, 0xc5, 0x0b, + 0xeb, 0xff, 0xce, 0x42, 0x29, 0x8a, 0xd6, 0x11, 0xf7, 0x1c, 0x36, 0x41, 0x3f, 0x87, 0x6d, 0x12, + 0xd7, 0x89, 0xc5, 0xb5, 0x3b, 0x51, 0x52, 0xbf, 0xbd, 0xee, 0x92, 0x9b, 0xc5, 0xd5, 0x4d, 0xe1, + 0x2a, 0xb9, 0x59, 0x70, 0x14, 0xde, 0x1b, 0xcb, 0x04, 0x59, 0xd1, 0x0b, 0x2b, 0xb9, 0x40, 0xf7, + 0x6b, 0xf3, 0x81, 0x99, 0xed, 0xa6, 0xf0, 0x93, 0xf1, 0x2d, 0x35, 0x73, 0x01, 0xdb, 0x23, 0x36, + 0xb1, 0x7e, 0x25, 0x63, 0x99, 0x5c, 0xa1, 0x17, 0xff, 0xb3, 0xfb, 0xc4, 0x7f, 0x01, 0x5f, 0x19, + 0xdd, 0x48, 0xac, 0x0d, 0x15, 0xf5, 0x88, 0xf3, 0x6d, 0xcf, 0x1a, 0xab, 0x88, 0xa9, 0x07, 0xd4, + 0x1d, 0xdb, 0x7e, 0x25, 0xc4, 0x8d, 0xf3, 0x08, 0x40, 0x93, 0xb8, 0x2c, 0x56, 0x68, 0xf3, 0x9f, + 0x06, 0x94, 0x57, 0x45, 0xd0, 0xe7, 0x00, 0xa1, 0xb0, 0x03, 0x61, 0x49, 0xd1, 0xa8, 0x92, 0xcc, + 0xc5, 0x85, 0xfa, 0x75, 0xa9, 0x71, 0xe5, 0xeb, 0x12, 0x17, 0x94, 0xb4, 0xa4, 0xd1, 0x67, 0x90, + 0xa7, 0x1e, 0xd1, 0x8a, 0xe9, 0x3b, 0x15, 0x37, 0xa9, 0x47, 0x94, 0xda, 0x2b, 0xf8, 0x84, 0x7a, + 0xaa, 0x82, 0xed, 0x99, 0xe0, 0x96, 0xcf, 0xfd, 0x99, 0xab, 0xde, 0xb6, 0x16, 0x77, 0xac, 0x9b, + 0x11, 0x90, 0xa1, 0xcd, 0xe3, 0xa7, 0x5a, 0xe1, 0x70, 0x26, 0xf8, 0x20, 0x11, 0xef, 0x3b, 0xab, + 0xae, 0x24, 0x63, 0xf2, 0xd7, 0x06, 0x14, 0xe3, 0x78, 0x9f, 0xd0, 0xf9, 0x57, 0xd2, 0x31, 0xbb, + 0x00, 0x01, 0xbf, 0xb2, 0xbc, 0xd9, 0x74, 0x14, 0x2d, 0xee, 0x0c, 0x2e, 0x04, 0xfc, 0xea, 0x4c, + 0x31, 0xea, 0x5f, 0x42, 0x65, 0xb9, 0xa8, 0xa4, 0x15, 0xef, 0x43, 0x41, 0x4d, 0x1b, 0xdf, 0x16, + 0x97, 0x51, 0x8f, 0xab, 0xf1, 0x33, 0xb0, 0xc5, 0xa5, 0x1c, 0xc6, 0x3a, 0x0b, 0xdc, 0x71, 0xe4, + 0x38, 0xd2, 0x80, 0x45, 0xc5, 0xeb, 0x2b, 0x56, 0xfd, 0x0c, 0xb6, 0x92, 0x46, 0x90, 0x78, 0xcf, + 0x01, 0x64, 0xcb, 0x89, 0xb9, 0xf5, 0x96, 0xce, 0x23, 0x87, 0x3e, 0x5c, 0x3b, 0x1b, 0xe9, 0x1c, + 0x17, 0xb4, 0xca, 0x09, 0x9d, 0xd7, 0xff, 0x65, 0x40, 0x46, 0xe2, 0xfc, 0x3f, 0x27, 0xf5, 0x8f, + 0x21, 0xab, 0xdc, 0xd3, 0x93, 0xe3, 0xd9, 0x1d, 0xd6, 0x34, 0xa4, 0xeb, 0x1d, 0x97, 0xaa, 0x0d, + 0xa8, 0x14, 0xcd, 0x73, 0xb9, 0xc2, 0x12, 0xa6, 0x5c, 0x37, 0x6a, 0xf2, 0x47, 0xeb, 0x46, 0x7e, + 0xa3, 0x2a, 0xa4, 0xa3, 0x75, 0x96, 0xe9, 0xa6, 0x70, 0x9a, 0x11, 0xb4, 0x13, 0x2d, 0x25, 0xd9, + 0xe9, 0x85, 0x6e, 0x4a, 0xaf, 0xa5, 0x56, 0x01, 0x36, 0x19, 0x51, 0x0f, 0xf3, 0xfa, 0x6f, 0xd3, + 0x50, 0xc0, 0x74, 0xcc, 0x03, 0x22, 0x1d, 0xbe, 0x80, 0xed, 0xd5, 0x49, 0xb1, 0x88, 0xdf, 0xb3, + 0xfb, 0x4e, 0x89, 0x13, 0x2a, 0xff, 0xb1, 0xa8, 0x8c, 0x6f, 0xe4, 0xb8, 0x0f, 0xa5, 0xc5, 0x84, + 0x93, 0xb0, 0xba, 0x2d, 0xf6, 0xef, 0x35, 0xdd, 0x34, 0xe6, 0x16, 0x59, 0x4e, 0xf2, 0x17, 0x50, + 0x5a, 0x8c, 0x1b, 0x09, 0x98, 0xb9, 0x3b, 0x3b, 0x4b, 0xa5, 0x2f, 0x9f, 0xa8, 0xa3, 0x05, 0x99, + 0x74, 0xc8, 0x25, 0x94, 0x56, 0xca, 0xfb, 0xc6, 0x5b, 0xc1, 0xb8, 0xf9, 0x56, 0xd8, 0x05, 0x50, + 0x66, 0xd1, 0xe5, 0xa7, 0x44, 0xc4, 0xe9, 0x11, 0xf4, 0x75, 0xc8, 0xeb, 0x06, 0x63, 0x44, 0x27, + 0x01, 0x6f, 0x2a, 0xba, 0x47, 0xea, 0x1d, 0xc8, 0x77, 0x54, 0xc9, 0xf5, 0x08, 0xfa, 0x1c, 0x72, + 0x6a, 0xb3, 0x44, 0xc1, 0xbe, 0xd7, 0x62, 0xd1, 0x1a, 0x9f, 0x0a, 0x80, 0xa5, 0x67, 0xaa, 0x09, + 0x5f, 0x3b, 0xed, 0x9d, 0x74, 0x4e, 0x7b, 0xdd, 0x7e, 0xbf, 0x6d, 0xbd, 0x38, 0x1b, 0x0e, 0x3a, + 0x47, 0xbd, 0xe3, 0x5e, 0xa7, 0x5d, 0x4d, 0xa1, 0x6d, 0x28, 0xbd, 0xec, 0xe0, 0x0b, 0xeb, 0xc5, + 0x99, 0x12, 0xb9, 0xa8, 0x1a, 0x68, 0x0b, 0xf2, 0x09, 0x95, 0x96, 0xd4, 0xa0, 0x3f, 0x1c, 0xf6, + 0x5a, 0xa7, 0x9d, 0x6a, 0x06, 0x01, 0x6c, 0x44, 0x27, 0x59, 0x54, 0x81, 0xa2, 0x52, 0x8d, 0x18, + 0xb9, 0xd6, 0x1f, 0x0c, 0xf8, 0x60, 0xcc, 0xa7, 0x6b, 0xec, 0x6c, 0x41, 0xdb, 0xf5, 0xa3, 0x02, + 0x18, 0x18, 0x3f, 0xfb, 0x51, 0x24, 0x39, 0xe1, 0xae, 0xed, 0x4d, 0x1a, 0x3c, 0x98, 0x34, 0x27, + 0xd4, 0x53, 0xc3, 0xb0, 0xa9, 0x8f, 0x6c, 0x9f, 0x85, 0xb7, 0xfd, 0x30, 0xf0, 0x43, 0xe2, 0xfa, + 0x7f, 0x4c, 0xd7, 0x7e, 0xa2, 0xf5, 0x55, 0xa9, 0x35, 0xda, 0xae, 0xdf, 0x78, 0x79, 0xd0, 0x92, + 0xc7, 0x7f, 0x8b, 0x8f, 0x5e, 0xab, 0xa3, 0xd7, 0x6d, 0xd7, 0x7f, 0xfd, 0x52, 0x6b, 0x8e, 0x36, + 0x14, 0xfe, 0xf7, 0xfe, 0x13, 0x00, 0x00, 0xff, 0xff, 0x78, 0x92, 0xfd, 0x26, 0x77, 0x10, 0x00, + 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/pubsub/v1/pubsub.pb.go b/vendor/google.golang.org/genproto/googleapis/pubsub/v1/pubsub.pb.go index 7256608..0689b3c 100644 --- a/vendor/google.golang.org/genproto/googleapis/pubsub/v1/pubsub.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/pubsub/v1/pubsub.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/pubsub/v1/pubsub.proto -// DO NOT EDIT! /* Package pubsub is a generated protocol buffer package. @@ -12,6 +11,7 @@ It has these top-level messages: Topic PubsubMessage GetTopicRequest + UpdateTopicRequest PublishRequest PublishResponse ListTopicsRequest @@ -35,6 +35,7 @@ It has these top-level messages: StreamingPullRequest StreamingPullResponse CreateSnapshotRequest + UpdateSnapshotRequest Snapshot ListSnapshotsRequest ListSnapshotsResponse @@ -78,6 +79,8 @@ type Topic struct { // signs (`%`). It must be between 3 and 255 characters in length, and it // must not start with `"goog"`. Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // User labels. + Labels map[string]string `protobuf:"bytes,2,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` } func (m *Topic) Reset() { *m = Topic{} } @@ -92,6 +95,13 @@ func (m *Topic) GetName() string { return "" } +func (m *Topic) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + // A message data and its attributes. The message payload must not be empty; // it must contain either a non-empty data field, or at least one attribute. type PubsubMessage struct { @@ -162,6 +172,34 @@ func (m *GetTopicRequest) GetTopic() string { return "" } +// Request for the UpdateTopic method. +type UpdateTopicRequest struct { + // The topic to update. + Topic *Topic `protobuf:"bytes,1,opt,name=topic" json:"topic,omitempty"` + // Indicates which fields in the provided topic to update. + // Must be specified and non-empty. + UpdateMask *google_protobuf3.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateTopicRequest) Reset() { *m = UpdateTopicRequest{} } +func (m *UpdateTopicRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateTopicRequest) ProtoMessage() {} +func (*UpdateTopicRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *UpdateTopicRequest) GetTopic() *Topic { + if m != nil { + return m.Topic + } + return nil +} + +func (m *UpdateTopicRequest) GetUpdateMask() *google_protobuf3.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + // Request for the Publish method. type PublishRequest struct { // The messages in the request will be published on this topic. @@ -174,7 +212,7 @@ type PublishRequest struct { func (m *PublishRequest) Reset() { *m = PublishRequest{} } func (m *PublishRequest) String() string { return proto.CompactTextString(m) } func (*PublishRequest) ProtoMessage() {} -func (*PublishRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } +func (*PublishRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } func (m *PublishRequest) GetTopic() string { if m != nil { @@ -201,7 +239,7 @@ type PublishResponse struct { func (m *PublishResponse) Reset() { *m = PublishResponse{} } func (m *PublishResponse) String() string { return proto.CompactTextString(m) } func (*PublishResponse) ProtoMessage() {} -func (*PublishResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } +func (*PublishResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } func (m *PublishResponse) GetMessageIds() []string { if m != nil { @@ -226,7 +264,7 @@ type ListTopicsRequest struct { func (m *ListTopicsRequest) Reset() { *m = ListTopicsRequest{} } func (m *ListTopicsRequest) String() string { return proto.CompactTextString(m) } func (*ListTopicsRequest) ProtoMessage() {} -func (*ListTopicsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } +func (*ListTopicsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } func (m *ListTopicsRequest) GetProject() string { if m != nil { @@ -261,7 +299,7 @@ type ListTopicsResponse struct { func (m *ListTopicsResponse) Reset() { *m = ListTopicsResponse{} } func (m *ListTopicsResponse) String() string { return proto.CompactTextString(m) } func (*ListTopicsResponse) ProtoMessage() {} -func (*ListTopicsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } +func (*ListTopicsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } func (m *ListTopicsResponse) GetTopics() []*Topic { if m != nil { @@ -293,7 +331,7 @@ type ListTopicSubscriptionsRequest struct { func (m *ListTopicSubscriptionsRequest) Reset() { *m = ListTopicSubscriptionsRequest{} } func (m *ListTopicSubscriptionsRequest) String() string { return proto.CompactTextString(m) } func (*ListTopicSubscriptionsRequest) ProtoMessage() {} -func (*ListTopicSubscriptionsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } +func (*ListTopicSubscriptionsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } func (m *ListTopicSubscriptionsRequest) GetTopic() string { if m != nil { @@ -329,7 +367,7 @@ type ListTopicSubscriptionsResponse struct { func (m *ListTopicSubscriptionsResponse) Reset() { *m = ListTopicSubscriptionsResponse{} } func (m *ListTopicSubscriptionsResponse) String() string { return proto.CompactTextString(m) } func (*ListTopicSubscriptionsResponse) ProtoMessage() {} -func (*ListTopicSubscriptionsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } +func (*ListTopicSubscriptionsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } func (m *ListTopicSubscriptionsResponse) GetSubscriptions() []string { if m != nil { @@ -355,7 +393,7 @@ type DeleteTopicRequest struct { func (m *DeleteTopicRequest) Reset() { *m = DeleteTopicRequest{} } func (m *DeleteTopicRequest) String() string { return proto.CompactTextString(m) } func (*DeleteTopicRequest) ProtoMessage() {} -func (*DeleteTopicRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } +func (*DeleteTopicRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } func (m *DeleteTopicRequest) GetTopic() string { if m != nil { @@ -414,12 +452,14 @@ type Subscription struct { // can be done. Defaults to 7 days. Cannot be more than 7 days or less than 10 // minutes. MessageRetentionDuration *google_protobuf1.Duration `protobuf:"bytes,8,opt,name=message_retention_duration,json=messageRetentionDuration" json:"message_retention_duration,omitempty"` + // User labels. + Labels map[string]string `protobuf:"bytes,9,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` } func (m *Subscription) Reset() { *m = Subscription{} } func (m *Subscription) String() string { return proto.CompactTextString(m) } func (*Subscription) ProtoMessage() {} -func (*Subscription) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } +func (*Subscription) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } func (m *Subscription) GetName() string { if m != nil { @@ -463,6 +503,13 @@ func (m *Subscription) GetMessageRetentionDuration() *google_protobuf1.Duration return nil } +func (m *Subscription) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + // Configuration for a push delivery endpoint. type PushConfig struct { // A URL locating the endpoint to which messages should be pushed. @@ -495,7 +542,7 @@ type PushConfig struct { func (m *PushConfig) Reset() { *m = PushConfig{} } func (m *PushConfig) String() string { return proto.CompactTextString(m) } func (*PushConfig) ProtoMessage() {} -func (*PushConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } +func (*PushConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } func (m *PushConfig) GetPushEndpoint() string { if m != nil { @@ -522,7 +569,7 @@ type ReceivedMessage struct { func (m *ReceivedMessage) Reset() { *m = ReceivedMessage{} } func (m *ReceivedMessage) String() string { return proto.CompactTextString(m) } func (*ReceivedMessage) ProtoMessage() {} -func (*ReceivedMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } +func (*ReceivedMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } func (m *ReceivedMessage) GetAckId() string { if m != nil { @@ -548,7 +595,7 @@ type GetSubscriptionRequest struct { func (m *GetSubscriptionRequest) Reset() { *m = GetSubscriptionRequest{} } func (m *GetSubscriptionRequest) String() string { return proto.CompactTextString(m) } func (*GetSubscriptionRequest) ProtoMessage() {} -func (*GetSubscriptionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } +func (*GetSubscriptionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } func (m *GetSubscriptionRequest) GetSubscription() string { if m != nil { @@ -569,7 +616,7 @@ type UpdateSubscriptionRequest struct { func (m *UpdateSubscriptionRequest) Reset() { *m = UpdateSubscriptionRequest{} } func (m *UpdateSubscriptionRequest) String() string { return proto.CompactTextString(m) } func (*UpdateSubscriptionRequest) ProtoMessage() {} -func (*UpdateSubscriptionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } +func (*UpdateSubscriptionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } func (m *UpdateSubscriptionRequest) GetSubscription() *Subscription { if m != nil { @@ -601,7 +648,7 @@ type ListSubscriptionsRequest struct { func (m *ListSubscriptionsRequest) Reset() { *m = ListSubscriptionsRequest{} } func (m *ListSubscriptionsRequest) String() string { return proto.CompactTextString(m) } func (*ListSubscriptionsRequest) ProtoMessage() {} -func (*ListSubscriptionsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } +func (*ListSubscriptionsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } func (m *ListSubscriptionsRequest) GetProject() string { if m != nil { @@ -637,7 +684,7 @@ type ListSubscriptionsResponse struct { func (m *ListSubscriptionsResponse) Reset() { *m = ListSubscriptionsResponse{} } func (m *ListSubscriptionsResponse) String() string { return proto.CompactTextString(m) } func (*ListSubscriptionsResponse) ProtoMessage() {} -func (*ListSubscriptionsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } +func (*ListSubscriptionsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } func (m *ListSubscriptionsResponse) GetSubscriptions() []*Subscription { if m != nil { @@ -663,7 +710,7 @@ type DeleteSubscriptionRequest struct { func (m *DeleteSubscriptionRequest) Reset() { *m = DeleteSubscriptionRequest{} } func (m *DeleteSubscriptionRequest) String() string { return proto.CompactTextString(m) } func (*DeleteSubscriptionRequest) ProtoMessage() {} -func (*DeleteSubscriptionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } +func (*DeleteSubscriptionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } func (m *DeleteSubscriptionRequest) GetSubscription() string { if m != nil { @@ -689,7 +736,7 @@ type ModifyPushConfigRequest struct { func (m *ModifyPushConfigRequest) Reset() { *m = ModifyPushConfigRequest{} } func (m *ModifyPushConfigRequest) String() string { return proto.CompactTextString(m) } func (*ModifyPushConfigRequest) ProtoMessage() {} -func (*ModifyPushConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } +func (*ModifyPushConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } func (m *ModifyPushConfigRequest) GetSubscription() string { if m != nil { @@ -725,7 +772,7 @@ type PullRequest struct { func (m *PullRequest) Reset() { *m = PullRequest{} } func (m *PullRequest) String() string { return proto.CompactTextString(m) } func (*PullRequest) ProtoMessage() {} -func (*PullRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } +func (*PullRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } func (m *PullRequest) GetSubscription() string { if m != nil { @@ -760,7 +807,7 @@ type PullResponse struct { func (m *PullResponse) Reset() { *m = PullResponse{} } func (m *PullResponse) String() string { return proto.CompactTextString(m) } func (*PullResponse) ProtoMessage() {} -func (*PullResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } +func (*PullResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } func (m *PullResponse) GetReceivedMessages() []*ReceivedMessage { if m != nil { @@ -789,7 +836,7 @@ type ModifyAckDeadlineRequest struct { func (m *ModifyAckDeadlineRequest) Reset() { *m = ModifyAckDeadlineRequest{} } func (m *ModifyAckDeadlineRequest) String() string { return proto.CompactTextString(m) } func (*ModifyAckDeadlineRequest) ProtoMessage() {} -func (*ModifyAckDeadlineRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } +func (*ModifyAckDeadlineRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } func (m *ModifyAckDeadlineRequest) GetSubscription() string { if m != nil { @@ -825,7 +872,7 @@ type AcknowledgeRequest struct { func (m *AcknowledgeRequest) Reset() { *m = AcknowledgeRequest{} } func (m *AcknowledgeRequest) String() string { return proto.CompactTextString(m) } func (*AcknowledgeRequest) ProtoMessage() {} -func (*AcknowledgeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } +func (*AcknowledgeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } func (m *AcknowledgeRequest) GetSubscription() string { if m != nil { @@ -884,7 +931,7 @@ type StreamingPullRequest struct { func (m *StreamingPullRequest) Reset() { *m = StreamingPullRequest{} } func (m *StreamingPullRequest) String() string { return proto.CompactTextString(m) } func (*StreamingPullRequest) ProtoMessage() {} -func (*StreamingPullRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } +func (*StreamingPullRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} } func (m *StreamingPullRequest) GetSubscription() string { if m != nil { @@ -931,7 +978,7 @@ type StreamingPullResponse struct { func (m *StreamingPullResponse) Reset() { *m = StreamingPullResponse{} } func (m *StreamingPullResponse) String() string { return proto.CompactTextString(m) } func (*StreamingPullResponse) ProtoMessage() {} -func (*StreamingPullResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} } +func (*StreamingPullResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } func (m *StreamingPullResponse) GetReceivedMessages() []*ReceivedMessage { if m != nil { @@ -963,7 +1010,7 @@ type CreateSnapshotRequest struct { func (m *CreateSnapshotRequest) Reset() { *m = CreateSnapshotRequest{} } func (m *CreateSnapshotRequest) String() string { return proto.CompactTextString(m) } func (*CreateSnapshotRequest) ProtoMessage() {} -func (*CreateSnapshotRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } +func (*CreateSnapshotRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} } func (m *CreateSnapshotRequest) GetName() string { if m != nil { @@ -979,6 +1026,34 @@ func (m *CreateSnapshotRequest) GetSubscription() string { return "" } +// Request for the UpdateSnapshot method. +type UpdateSnapshotRequest struct { + // The updated snpashot object. + Snapshot *Snapshot `protobuf:"bytes,1,opt,name=snapshot" json:"snapshot,omitempty"` + // Indicates which fields in the provided snapshot to update. + // Must be specified and non-empty. + UpdateMask *google_protobuf3.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdateSnapshotRequest) Reset() { *m = UpdateSnapshotRequest{} } +func (m *UpdateSnapshotRequest) String() string { return proto.CompactTextString(m) } +func (*UpdateSnapshotRequest) ProtoMessage() {} +func (*UpdateSnapshotRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} } + +func (m *UpdateSnapshotRequest) GetSnapshot() *Snapshot { + if m != nil { + return m.Snapshot + } + return nil +} + +func (m *UpdateSnapshotRequest) GetUpdateMask() *google_protobuf3.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + // A snapshot resource. type Snapshot struct { // The name of the snapshot. @@ -995,12 +1070,14 @@ type Snapshot struct { // will always capture this 3-day-old backlog as long as the snapshot // exists -- will expire in 4 days. ExpireTime *google_protobuf4.Timestamp `protobuf:"bytes,3,opt,name=expire_time,json=expireTime" json:"expire_time,omitempty"` + // User labels. + Labels map[string]string `protobuf:"bytes,4,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` } func (m *Snapshot) Reset() { *m = Snapshot{} } func (m *Snapshot) String() string { return proto.CompactTextString(m) } func (*Snapshot) ProtoMessage() {} -func (*Snapshot) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} } +func (*Snapshot) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} } func (m *Snapshot) GetName() string { if m != nil { @@ -1023,6 +1100,13 @@ func (m *Snapshot) GetExpireTime() *google_protobuf4.Timestamp { return nil } +func (m *Snapshot) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + // Request for the `ListSnapshots` method. type ListSnapshotsRequest struct { // The name of the cloud project that snapshots belong to. @@ -1039,7 +1123,7 @@ type ListSnapshotsRequest struct { func (m *ListSnapshotsRequest) Reset() { *m = ListSnapshotsRequest{} } func (m *ListSnapshotsRequest) String() string { return proto.CompactTextString(m) } func (*ListSnapshotsRequest) ProtoMessage() {} -func (*ListSnapshotsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} } +func (*ListSnapshotsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} } func (m *ListSnapshotsRequest) GetProject() string { if m != nil { @@ -1074,7 +1158,7 @@ type ListSnapshotsResponse struct { func (m *ListSnapshotsResponse) Reset() { *m = ListSnapshotsResponse{} } func (m *ListSnapshotsResponse) String() string { return proto.CompactTextString(m) } func (*ListSnapshotsResponse) ProtoMessage() {} -func (*ListSnapshotsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} } +func (*ListSnapshotsResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} } func (m *ListSnapshotsResponse) GetSnapshots() []*Snapshot { if m != nil { @@ -1100,7 +1184,7 @@ type DeleteSnapshotRequest struct { func (m *DeleteSnapshotRequest) Reset() { *m = DeleteSnapshotRequest{} } func (m *DeleteSnapshotRequest) String() string { return proto.CompactTextString(m) } func (*DeleteSnapshotRequest) ProtoMessage() {} -func (*DeleteSnapshotRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} } +func (*DeleteSnapshotRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} } func (m *DeleteSnapshotRequest) GetSnapshot() string { if m != nil { @@ -1122,7 +1206,7 @@ type SeekRequest struct { func (m *SeekRequest) Reset() { *m = SeekRequest{} } func (m *SeekRequest) String() string { return proto.CompactTextString(m) } func (*SeekRequest) ProtoMessage() {} -func (*SeekRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} } +func (*SeekRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} } type isSeekRequest_Target interface { isSeekRequest_Target() @@ -1242,12 +1326,13 @@ type SeekResponse struct { func (m *SeekResponse) Reset() { *m = SeekResponse{} } func (m *SeekResponse) String() string { return proto.CompactTextString(m) } func (*SeekResponse) ProtoMessage() {} -func (*SeekResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} } +func (*SeekResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} } func init() { proto.RegisterType((*Topic)(nil), "google.pubsub.v1.Topic") proto.RegisterType((*PubsubMessage)(nil), "google.pubsub.v1.PubsubMessage") proto.RegisterType((*GetTopicRequest)(nil), "google.pubsub.v1.GetTopicRequest") + proto.RegisterType((*UpdateTopicRequest)(nil), "google.pubsub.v1.UpdateTopicRequest") proto.RegisterType((*PublishRequest)(nil), "google.pubsub.v1.PublishRequest") proto.RegisterType((*PublishResponse)(nil), "google.pubsub.v1.PublishResponse") proto.RegisterType((*ListTopicsRequest)(nil), "google.pubsub.v1.ListTopicsRequest") @@ -1271,6 +1356,7 @@ func init() { proto.RegisterType((*StreamingPullRequest)(nil), "google.pubsub.v1.StreamingPullRequest") proto.RegisterType((*StreamingPullResponse)(nil), "google.pubsub.v1.StreamingPullResponse") proto.RegisterType((*CreateSnapshotRequest)(nil), "google.pubsub.v1.CreateSnapshotRequest") + proto.RegisterType((*UpdateSnapshotRequest)(nil), "google.pubsub.v1.UpdateSnapshotRequest") proto.RegisterType((*Snapshot)(nil), "google.pubsub.v1.Snapshot") proto.RegisterType((*ListSnapshotsRequest)(nil), "google.pubsub.v1.ListSnapshotsRequest") proto.RegisterType((*ListSnapshotsResponse)(nil), "google.pubsub.v1.ListSnapshotsResponse") @@ -1305,6 +1391,10 @@ type SubscriberClient interface { GetSubscription(ctx context.Context, in *GetSubscriptionRequest, opts ...grpc.CallOption) (*Subscription, error) // Updates an existing subscription. Note that certain properties of a // subscription, such as its topic, are not modifiable. + // NOTE: The style guide requires body: "subscription" instead of body: "*". + // Keeping the latter for internal consistency in V1, however it should be + // corrected in V2. See + // https://cloud.google.com/apis/design/standard_methods#update for details. UpdateSubscription(ctx context.Context, in *UpdateSubscriptionRequest, opts ...grpc.CallOption) (*Subscription, error) // Lists matching subscriptions. ListSubscriptions(ctx context.Context, in *ListSubscriptionsRequest, opts ...grpc.CallOption) (*ListSubscriptionsResponse, error) @@ -1366,6 +1456,13 @@ type SubscriberClient interface { // The generated name is populated in the returned Snapshot object. // Note that for REST API requests, you must specify a name in the request. CreateSnapshot(ctx context.Context, in *CreateSnapshotRequest, opts ...grpc.CallOption) (*Snapshot, error) + // Updates an existing snapshot. Note that certain properties of a snapshot + // are not modifiable. + // NOTE: The style guide requires body: "snapshot" instead of body: "*". + // Keeping the latter for internal consistency in V1, however it should be + // corrected in V2. See + // https://cloud.google.com/apis/design/standard_methods#update for details. + UpdateSnapshot(ctx context.Context, in *UpdateSnapshotRequest, opts ...grpc.CallOption) (*Snapshot, error) // Removes an existing snapshot. All messages retained in the snapshot // are immediately dropped. After a snapshot is deleted, a new one may be // created with the same name, but the new one has no association with the old @@ -1514,6 +1611,15 @@ func (c *subscriberClient) CreateSnapshot(ctx context.Context, in *CreateSnapsho return out, nil } +func (c *subscriberClient) UpdateSnapshot(ctx context.Context, in *UpdateSnapshotRequest, opts ...grpc.CallOption) (*Snapshot, error) { + out := new(Snapshot) + err := grpc.Invoke(ctx, "/google.pubsub.v1.Subscriber/UpdateSnapshot", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *subscriberClient) DeleteSnapshot(ctx context.Context, in *DeleteSnapshotRequest, opts ...grpc.CallOption) (*google_protobuf2.Empty, error) { out := new(google_protobuf2.Empty) err := grpc.Invoke(ctx, "/google.pubsub.v1.Subscriber/DeleteSnapshot", in, out, c.cc, opts...) @@ -1550,6 +1656,10 @@ type SubscriberServer interface { GetSubscription(context.Context, *GetSubscriptionRequest) (*Subscription, error) // Updates an existing subscription. Note that certain properties of a // subscription, such as its topic, are not modifiable. + // NOTE: The style guide requires body: "subscription" instead of body: "*". + // Keeping the latter for internal consistency in V1, however it should be + // corrected in V2. See + // https://cloud.google.com/apis/design/standard_methods#update for details. UpdateSubscription(context.Context, *UpdateSubscriptionRequest) (*Subscription, error) // Lists matching subscriptions. ListSubscriptions(context.Context, *ListSubscriptionsRequest) (*ListSubscriptionsResponse, error) @@ -1611,6 +1721,13 @@ type SubscriberServer interface { // The generated name is populated in the returned Snapshot object. // Note that for REST API requests, you must specify a name in the request. CreateSnapshot(context.Context, *CreateSnapshotRequest) (*Snapshot, error) + // Updates an existing snapshot. Note that certain properties of a snapshot + // are not modifiable. + // NOTE: The style guide requires body: "snapshot" instead of body: "*". + // Keeping the latter for internal consistency in V1, however it should be + // corrected in V2. See + // https://cloud.google.com/apis/design/standard_methods#update for details. + UpdateSnapshot(context.Context, *UpdateSnapshotRequest) (*Snapshot, error) // Removes an existing snapshot. All messages retained in the snapshot // are immediately dropped. After a snapshot is deleted, a new one may be // created with the same name, but the new one has no association with the old @@ -1849,6 +1966,24 @@ func _Subscriber_CreateSnapshot_Handler(srv interface{}, ctx context.Context, de return interceptor(ctx, in, info, handler) } +func _Subscriber_UpdateSnapshot_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateSnapshotRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SubscriberServer).UpdateSnapshot(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1.Subscriber/UpdateSnapshot", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SubscriberServer).UpdateSnapshot(ctx, req.(*UpdateSnapshotRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Subscriber_DeleteSnapshot_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(DeleteSnapshotRequest) if err := dec(in); err != nil { @@ -1933,6 +2068,10 @@ var _Subscriber_serviceDesc = grpc.ServiceDesc{ MethodName: "CreateSnapshot", Handler: _Subscriber_CreateSnapshot_Handler, }, + { + MethodName: "UpdateSnapshot", + Handler: _Subscriber_UpdateSnapshot_Handler, + }, { MethodName: "DeleteSnapshot", Handler: _Subscriber_DeleteSnapshot_Handler, @@ -1958,6 +2097,13 @@ var _Subscriber_serviceDesc = grpc.ServiceDesc{ type PublisherClient interface { // Creates the given topic with the given name. CreateTopic(ctx context.Context, in *Topic, opts ...grpc.CallOption) (*Topic, error) + // Updates an existing topic. Note that certain properties of a topic are not + // modifiable. Options settings follow the style guide: + // NOTE: The style guide requires body: "topic" instead of body: "*". + // Keeping the latter for internal consistency in V1, however it should be + // corrected in V2. See + // https://cloud.google.com/apis/design/standard_methods#update for details. + UpdateTopic(ctx context.Context, in *UpdateTopicRequest, opts ...grpc.CallOption) (*Topic, error) // Adds one or more messages to the topic. Returns `NOT_FOUND` if the topic // does not exist. The message payload must not be empty; it must contain // either a non-empty data field, or at least one attribute. @@ -1993,6 +2139,15 @@ func (c *publisherClient) CreateTopic(ctx context.Context, in *Topic, opts ...gr return out, nil } +func (c *publisherClient) UpdateTopic(ctx context.Context, in *UpdateTopicRequest, opts ...grpc.CallOption) (*Topic, error) { + out := new(Topic) + err := grpc.Invoke(ctx, "/google.pubsub.v1.Publisher/UpdateTopic", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *publisherClient) Publish(ctx context.Context, in *PublishRequest, opts ...grpc.CallOption) (*PublishResponse, error) { out := new(PublishResponse) err := grpc.Invoke(ctx, "/google.pubsub.v1.Publisher/Publish", in, out, c.cc, opts...) @@ -2043,6 +2198,13 @@ func (c *publisherClient) DeleteTopic(ctx context.Context, in *DeleteTopicReques type PublisherServer interface { // Creates the given topic with the given name. CreateTopic(context.Context, *Topic) (*Topic, error) + // Updates an existing topic. Note that certain properties of a topic are not + // modifiable. Options settings follow the style guide: + // NOTE: The style guide requires body: "topic" instead of body: "*". + // Keeping the latter for internal consistency in V1, however it should be + // corrected in V2. See + // https://cloud.google.com/apis/design/standard_methods#update for details. + UpdateTopic(context.Context, *UpdateTopicRequest) (*Topic, error) // Adds one or more messages to the topic. Returns `NOT_FOUND` if the topic // does not exist. The message payload must not be empty; it must contain // either a non-empty data field, or at least one attribute. @@ -2083,6 +2245,24 @@ func _Publisher_CreateTopic_Handler(srv interface{}, ctx context.Context, dec fu return interceptor(ctx, in, info, handler) } +func _Publisher_UpdateTopic_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateTopicRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PublisherServer).UpdateTopic(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.pubsub.v1.Publisher/UpdateTopic", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PublisherServer).UpdateTopic(ctx, req.(*UpdateTopicRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Publisher_Publish_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(PublishRequest) if err := dec(in); err != nil { @@ -2181,6 +2361,10 @@ var _Publisher_serviceDesc = grpc.ServiceDesc{ MethodName: "CreateTopic", Handler: _Publisher_CreateTopic_Handler, }, + { + MethodName: "UpdateTopic", + Handler: _Publisher_UpdateTopic_Handler, + }, { MethodName: "Publish", Handler: _Publisher_Publish_Handler, @@ -2209,122 +2393,132 @@ var _Publisher_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("google/pubsub/v1/pubsub.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 1867 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x59, 0xcb, 0x73, 0xdb, 0xc6, - 0x19, 0x0f, 0x48, 0x3d, 0xa8, 0x0f, 0x94, 0x65, 0x6f, 0x25, 0x9b, 0x86, 0x5f, 0x12, 0xec, 0x5a, - 0x0c, 0x63, 0x93, 0x32, 0x33, 0x49, 0x13, 0xbb, 0x4a, 0x46, 0x96, 0x5c, 0x47, 0x9d, 0xb8, 0x51, - 0x21, 0xb7, 0x9d, 0xe9, 0xa1, 0x1c, 0x90, 0x58, 0x51, 0x08, 0x89, 0x87, 0xb1, 0x80, 0x2a, 0xa6, - 0xcd, 0x4c, 0x9b, 0x74, 0x3a, 0xd3, 0x69, 0x0f, 0x4d, 0x7b, 0x6c, 0x0e, 0x9d, 0xe9, 0xad, 0xc7, - 0x1e, 0x7a, 0xec, 0x3f, 0xd1, 0x7f, 0xa1, 0x87, 0xfe, 0x09, 0x3d, 0x76, 0xf6, 0x01, 0x12, 0x20, - 0x16, 0x7c, 0x28, 0xe3, 0x1b, 0xb8, 0xfb, 0xed, 0xfe, 0x7e, 0xdf, 0xfb, 0xd3, 0x0a, 0x6e, 0x75, - 0x3d, 0xaf, 0xdb, 0xc7, 0x0d, 0x3f, 0x6a, 0x93, 0xa8, 0xdd, 0x38, 0x7b, 0x24, 0xbe, 0xea, 0x7e, - 0xe0, 0x85, 0x1e, 0xba, 0xcc, 0xb7, 0xeb, 0x62, 0xf1, 0xec, 0x91, 0x76, 0x53, 0x1c, 0x30, 0x7d, - 0xbb, 0x61, 0xba, 0xae, 0x17, 0x9a, 0xa1, 0xed, 0xb9, 0x84, 0xcb, 0x6b, 0xb7, 0xe3, 0xeb, 0xe8, - 0xaf, 0x76, 0x74, 0xd2, 0xb0, 0xa2, 0x80, 0x09, 0x88, 0xfd, 0x1b, 0xe3, 0xfb, 0xd8, 0xf1, 0xc3, - 0x81, 0xd8, 0xdc, 0x1c, 0xdf, 0x3c, 0xb1, 0x71, 0xdf, 0x6a, 0x39, 0x26, 0xe9, 0x09, 0x89, 0x3b, - 0xe3, 0x12, 0xa1, 0xed, 0x60, 0x12, 0x9a, 0x8e, 0xcf, 0x05, 0xf4, 0x1b, 0xb0, 0xf8, 0xd2, 0xf3, - 0xed, 0x0e, 0x42, 0xb0, 0xe0, 0x9a, 0x0e, 0xae, 0x28, 0x9b, 0x4a, 0x75, 0xc5, 0x60, 0xdf, 0xfa, - 0x57, 0x05, 0x58, 0x3d, 0x62, 0x8a, 0xbc, 0xc0, 0x84, 0x98, 0x5d, 0x4c, 0xa5, 0x2c, 0x33, 0x34, - 0x99, 0x54, 0xd9, 0x60, 0xdf, 0xe8, 0x13, 0x00, 0x33, 0x0c, 0x03, 0xbb, 0x1d, 0x85, 0x98, 0x54, - 0x0a, 0x9b, 0xc5, 0xaa, 0xda, 0x6c, 0xd4, 0xc7, 0xed, 0x50, 0x4f, 0x5d, 0x54, 0xdf, 0x1b, 0x9e, - 0x78, 0xe6, 0x86, 0xc1, 0xc0, 0x48, 0x5c, 0x81, 0x6e, 0x01, 0x38, 0x5c, 0xac, 0x65, 0x5b, 0x95, - 0x22, 0x23, 0xb4, 0x22, 0x56, 0x0e, 0x2d, 0xb4, 0x0b, 0x65, 0x3f, 0x6a, 0xf7, 0x6d, 0x72, 0xda, - 0xa2, 0xda, 0x54, 0x16, 0x36, 0x95, 0xaa, 0xda, 0xd4, 0x86, 0x88, 0x42, 0xd5, 0xfa, 0xcb, 0x58, - 0x55, 0x43, 0x15, 0xf2, 0x74, 0x45, 0xdb, 0x85, 0xb5, 0x31, 0x70, 0x74, 0x19, 0x8a, 0x3d, 0x3c, - 0x10, 0xaa, 0xd3, 0x4f, 0xb4, 0x0e, 0x8b, 0x67, 0x66, 0x3f, 0xc2, 0x95, 0x02, 0x5b, 0xe3, 0x3f, - 0x1e, 0x17, 0xde, 0x53, 0xf4, 0x6d, 0x58, 0x7b, 0x8e, 0x43, 0x66, 0x33, 0x03, 0xbf, 0x8a, 0x30, - 0x09, 0xa9, 0x70, 0x48, 0x7f, 0x8b, 0x0b, 0xf8, 0x0f, 0xbd, 0x03, 0x97, 0x8e, 0x38, 0xec, 0x44, - 0x39, 0xf4, 0x04, 0x4a, 0x42, 0xb7, 0xd8, 0x78, 0x77, 0xa6, 0x18, 0xcf, 0x18, 0x1e, 0xd0, 0x9b, - 0xb0, 0x36, 0x04, 0x21, 0xbe, 0xe7, 0x12, 0x8c, 0xee, 0x80, 0x3a, 0xb2, 0x1e, 0xa9, 0x28, 0x9b, - 0xc5, 0xea, 0x8a, 0x01, 0x43, 0xf3, 0x11, 0xdd, 0x86, 0x2b, 0x1f, 0xdb, 0x84, 0xab, 0x40, 0x62, - 0x6e, 0x15, 0x58, 0xf6, 0x03, 0xef, 0x53, 0xdc, 0x09, 0x05, 0xbb, 0xf8, 0x27, 0xba, 0x01, 0x2b, - 0x3e, 0xbd, 0x8c, 0xd8, 0x9f, 0x71, 0x73, 0x2c, 0x1a, 0x25, 0xba, 0x70, 0x6c, 0x7f, 0x86, 0xa9, - 0xab, 0xd8, 0x66, 0xe8, 0xf5, 0xb0, 0x1b, 0xbb, 0x8a, 0xae, 0xbc, 0xa4, 0x0b, 0xba, 0x03, 0x28, - 0x09, 0x25, 0x18, 0x36, 0x60, 0x89, 0xa9, 0xce, 0xc9, 0xa9, 0xcd, 0x6b, 0x59, 0x7d, 0xb9, 0x7d, - 0x85, 0x18, 0xba, 0x0f, 0x6b, 0x2e, 0x3e, 0x0f, 0x5b, 0x09, 0x28, 0xee, 0x97, 0x55, 0xba, 0x7c, - 0x34, 0x84, 0x7b, 0x05, 0xb7, 0x86, 0x70, 0xc7, 0x51, 0x9b, 0x74, 0x02, 0xdb, 0x67, 0xc9, 0x36, - 0xd9, 0x03, 0xdf, 0x44, 0x43, 0x17, 0x6e, 0xe7, 0x41, 0x0a, 0x6d, 0xef, 0xc1, 0x2a, 0x49, 0x6e, - 0x08, 0x8f, 0xa4, 0x17, 0x67, 0x56, 0xb1, 0x06, 0xe8, 0x00, 0xf7, 0x71, 0x88, 0x67, 0x88, 0xc0, - 0x7f, 0x16, 0xa0, 0x9c, 0xe4, 0x24, 0xcb, 0xf1, 0xd1, 0xd1, 0x42, 0xd2, 0x24, 0xbb, 0xa0, 0xfa, - 0x11, 0x39, 0x6d, 0x75, 0x3c, 0xf7, 0xc4, 0xee, 0x8a, 0x14, 0xbb, 0x29, 0x8b, 0x4b, 0x72, 0xba, - 0xcf, 0x64, 0x0c, 0xf0, 0x87, 0xdf, 0x68, 0x07, 0xd6, 0xcd, 0x4e, 0xaf, 0x65, 0x61, 0xd3, 0xea, - 0xdb, 0x2e, 0x6e, 0x11, 0xdc, 0xf1, 0x5c, 0x8b, 0x54, 0x16, 0x99, 0x71, 0x91, 0xd9, 0xe9, 0x1d, - 0x88, 0xad, 0x63, 0xbe, 0x83, 0x9a, 0xb0, 0x11, 0xe0, 0xd0, 0xb4, 0xdd, 0x96, 0xd9, 0xe9, 0x61, - 0xab, 0x35, 0x4c, 0x89, 0xe5, 0x4d, 0xa5, 0x5a, 0x32, 0xbe, 0xc5, 0x37, 0xf7, 0xe8, 0x9e, 0xc8, - 0x02, 0x82, 0x7e, 0x02, 0x5a, 0x1c, 0xe9, 0x01, 0x0e, 0xb1, 0x4b, 0x75, 0x6c, 0xc5, 0xf5, 0xb3, - 0x52, 0x62, 0x9c, 0xaf, 0x67, 0xca, 0xc2, 0x81, 0x10, 0x30, 0x2a, 0xe2, 0xb0, 0x11, 0x9f, 0x8d, - 0x77, 0xf4, 0x7f, 0x29, 0x00, 0x23, 0xcd, 0xd0, 0x5d, 0x58, 0x65, 0xc6, 0xc0, 0xae, 0xe5, 0x7b, - 0xb6, 0x1b, 0x67, 0x48, 0x99, 0x2e, 0x3e, 0x13, 0x6b, 0xe8, 0x63, 0x49, 0x15, 0x7c, 0x30, 0xc9, - 0x60, 0x93, 0x4a, 0xe0, 0x37, 0x2d, 0x52, 0x1d, 0x58, 0x33, 0x70, 0x07, 0xdb, 0x67, 0x43, 0x6b, - 0xa1, 0x0d, 0x58, 0xa2, 0x2e, 0xb1, 0xad, 0x38, 0x46, 0xcc, 0x4e, 0xef, 0xd0, 0x42, 0xef, 0xc3, - 0xb2, 0x30, 0x03, 0xbb, 0x65, 0x86, 0xe2, 0x13, 0xcb, 0xeb, 0xdf, 0x85, 0xab, 0xcf, 0x71, 0x98, - 0x0c, 0xb0, 0x38, 0x1c, 0x75, 0x28, 0x27, 0xa3, 0x3b, 0xb6, 0x57, 0x72, 0x4d, 0xff, 0x5a, 0x81, - 0xeb, 0x3f, 0xf2, 0x2d, 0x33, 0xc4, 0xb2, 0x1b, 0x9e, 0x4a, 0x6e, 0x50, 0x9b, 0xb7, 0xb3, 0xdc, - 0x52, 0x87, 0x53, 0x67, 0xd0, 0x13, 0x50, 0x23, 0x06, 0xc0, 0x1a, 0xa2, 0x50, 0x2f, 0xdb, 0x26, - 0xbe, 0x47, 0x7b, 0xe6, 0x0b, 0x93, 0xf4, 0x0c, 0xe0, 0xe2, 0xf4, 0x5b, 0xf7, 0xa1, 0x42, 0xf3, - 0x5a, 0x5a, 0x45, 0x5e, 0x4f, 0xad, 0xfc, 0x9d, 0x02, 0xd7, 0x25, 0x90, 0xa2, 0x8a, 0x1c, 0xc8, - 0xaa, 0xc8, 0x74, 0x8b, 0x5c, 0xb0, 0xca, 0x7c, 0x08, 0xd7, 0x79, 0x95, 0xb9, 0xa8, 0x77, 0x7f, - 0x09, 0xd7, 0x5e, 0x78, 0x96, 0x7d, 0x32, 0x48, 0x14, 0x88, 0xd9, 0x8f, 0x8f, 0x97, 0x9f, 0xc2, - 0x7c, 0xe5, 0x47, 0xff, 0x52, 0x01, 0xf5, 0x28, 0xea, 0xf7, 0xe7, 0x81, 0x7c, 0x08, 0x28, 0xc0, - 0x61, 0x14, 0xb8, 0x2d, 0xdb, 0x71, 0xb0, 0x65, 0x9b, 0x21, 0xee, 0x0f, 0x18, 0x72, 0xc9, 0xb8, - 0xc2, 0x77, 0x0e, 0x47, 0x1b, 0x68, 0x0b, 0xca, 0x8e, 0x79, 0x3e, 0x2a, 0x53, 0x45, 0xe6, 0x6c, - 0xd5, 0x31, 0xcf, 0xe3, 0xf2, 0xa4, 0xff, 0x0c, 0xca, 0x9c, 0x84, 0x70, 0xe1, 0x0f, 0xe0, 0x4a, - 0x20, 0x92, 0x72, 0x74, 0x8e, 0xbb, 0x71, 0x2b, 0xab, 0xda, 0x58, 0xfe, 0x1a, 0x97, 0x83, 0xf4, - 0x02, 0xa1, 0x01, 0x53, 0xe1, 0x46, 0xde, 0x1b, 0xd5, 0xd3, 0x79, 0x54, 0xbe, 0x06, 0xcb, 0xbc, - 0x24, 0x90, 0xca, 0x02, 0xeb, 0x49, 0x4b, 0xac, 0x26, 0x90, 0xdc, 0xf2, 0x5d, 0xcc, 0x2b, 0xdf, - 0xfa, 0x0f, 0x01, 0xed, 0x75, 0x7a, 0xae, 0xf7, 0xf3, 0x3e, 0xb6, 0xba, 0x17, 0x25, 0x51, 0x48, - 0x92, 0xd0, 0x7f, 0x5d, 0x80, 0xf5, 0xe3, 0x30, 0xc0, 0xa6, 0x63, 0xbb, 0xdd, 0x79, 0xbd, 0x99, - 0x77, 0x2b, 0x7a, 0x17, 0xae, 0x39, 0xcc, 0x66, 0x32, 0xed, 0x8a, 0xd5, 0x45, 0x63, 0x83, 0x6f, - 0x8f, 0xf7, 0xa7, 0x77, 0xb2, 0xe7, 0xd2, 0xb6, 0x5b, 0x4f, 0x9f, 0xdb, 0xe3, 0x70, 0xbb, 0x70, - 0x83, 0x30, 0x1d, 0x5a, 0x13, 0xfa, 0x61, 0x85, 0x8b, 0xec, 0x65, 0xcd, 0xda, 0x85, 0x8d, 0x31, - 0x13, 0xbc, 0xa6, 0x58, 0xfa, 0x04, 0x36, 0xf6, 0x03, 0x4c, 0x8b, 0xb1, 0x6b, 0xfa, 0xe4, 0xd4, - 0x0b, 0x63, 0x63, 0xcb, 0x46, 0x86, 0x71, 0x07, 0x14, 0x24, 0x05, 0xe0, 0x15, 0x94, 0xe2, 0xab, - 0xe6, 0x18, 0x3b, 0x9e, 0x80, 0x8a, 0xcf, 0x7d, 0x3b, 0xc0, 0x7c, 0xb2, 0x2f, 0x4e, 0x9d, 0xec, - 0x81, 0x8b, 0xd3, 0x05, 0xbd, 0x0f, 0xeb, 0xac, 0x7e, 0x0a, 0xd8, 0xd7, 0x5c, 0xae, 0x07, 0xb0, - 0x31, 0x86, 0x26, 0x5c, 0xf3, 0x1e, 0xac, 0x90, 0x78, 0x51, 0xb8, 0x44, 0x93, 0x54, 0xe9, 0xd8, - 0xce, 0x23, 0xe1, 0x99, 0xab, 0xf3, 0xdb, 0xb0, 0x21, 0xaa, 0xf3, 0x98, 0xb3, 0x34, 0x28, 0xc5, - 0xb7, 0x09, 0x55, 0x87, 0xbf, 0xf5, 0xdf, 0x2b, 0xa0, 0x1e, 0x63, 0xdc, 0x9b, 0x27, 0x8b, 0x76, - 0x60, 0x81, 0xf9, 0xa1, 0x30, 0xcd, 0x0f, 0x1f, 0xbd, 0x61, 0x30, 0x49, 0x74, 0x33, 0xc1, 0x80, - 0x99, 0xec, 0xa3, 0x37, 0x46, 0x1c, 0x9e, 0x96, 0x60, 0x29, 0x34, 0x83, 0x2e, 0x0e, 0xf5, 0x4b, - 0x50, 0xe6, 0x64, 0xb8, 0xd1, 0x9a, 0xff, 0x5d, 0x03, 0x10, 0xbd, 0xa6, 0x8d, 0x03, 0xf4, 0x5b, - 0x05, 0x90, 0x88, 0xc7, 0x24, 0x9f, 0x29, 0xdd, 0x4e, 0x9b, 0xb2, 0xaf, 0xef, 0x7c, 0xf1, 0xef, - 0xff, 0xfc, 0xb9, 0x50, 0xd3, 0xbe, 0x4d, 0xff, 0x6c, 0xff, 0x05, 0x8d, 0xc3, 0x5d, 0x11, 0x0a, - 0xa4, 0x51, 0x6b, 0xa4, 0x5a, 0x65, 0xa3, 0xf6, 0xf9, 0x63, 0xa5, 0x86, 0xfe, 0xa4, 0xb0, 0x3f, - 0xf7, 0x52, 0x2c, 0xaa, 0x59, 0x14, 0xf9, 0x1c, 0x34, 0x95, 0xcf, 0x3b, 0x8c, 0x4f, 0x03, 0x3d, - 0x64, 0x7c, 0x92, 0xf8, 0x93, 0x78, 0xa1, 0xbf, 0x2a, 0x80, 0xb2, 0xa3, 0x13, 0x7a, 0x2b, 0x8b, - 0x96, 0x3b, 0x60, 0x4d, 0xa5, 0xb6, 0xcb, 0xa8, 0x7d, 0xa7, 0xd9, 0xcc, 0x50, 0xab, 0xcf, 0x62, - 0xb7, 0xaf, 0x15, 0xfe, 0x47, 0x66, 0x6a, 0x98, 0x41, 0xb5, 0x2c, 0x68, 0xde, 0x90, 0xa5, 0xbd, - 0x35, 0x93, 0x2c, 0x0f, 0x1f, 0xbd, 0xce, 0xd8, 0x56, 0xd1, 0x7d, 0xc6, 0x56, 0x70, 0x4b, 0x70, - 0xfc, 0x3c, 0x4d, 0x12, 0xfd, 0x51, 0x89, 0xff, 0x8c, 0x9a, 0x66, 0xc1, 0xdc, 0x31, 0x48, 0xbb, - 0x9a, 0x49, 0x87, 0x67, 0x8e, 0x1f, 0x0e, 0x62, 0xa7, 0xd6, 0xe6, 0x74, 0xea, 0xdf, 0x14, 0xb8, - 0x92, 0xe9, 0xe6, 0x32, 0x8b, 0xe5, 0xb5, 0xfc, 0x5c, 0x42, 0xdf, 0x67, 0x84, 0x0e, 0xf4, 0x0f, - 0xe7, 0x22, 0xf4, 0xd8, 0x19, 0xc7, 0xa1, 0x7e, 0xfd, 0x4a, 0x01, 0x35, 0xd1, 0xe8, 0xd1, 0xbd, - 0x2c, 0xbf, 0xec, 0x1c, 0x90, 0xcb, 0xec, 0x80, 0x31, 0xfb, 0x40, 0x7f, 0x7f, 0x3e, 0x66, 0xe6, - 0x08, 0x81, 0x72, 0xfa, 0x8d, 0x02, 0x0b, 0xb4, 0x39, 0xa2, 0x5b, 0xb2, 0x01, 0x71, 0x38, 0x37, - 0xc8, 0x42, 0x3e, 0xd9, 0x53, 0xe3, 0x90, 0xd7, 0x9b, 0xf3, 0xb1, 0xf1, 0xa3, 0x7e, 0x9f, 0xd2, - 0xb0, 0x60, 0x35, 0xd5, 0xab, 0xd1, 0x7d, 0x49, 0x8a, 0x49, 0xe6, 0x19, 0x6d, 0x7b, 0xaa, 0x1c, - 0x27, 0x58, 0x55, 0x76, 0x14, 0x9a, 0xfb, 0x97, 0xc7, 0x27, 0x6b, 0xf4, 0x66, 0x5e, 0x94, 0x64, - 0xa6, 0xef, 0x5c, 0x57, 0x1c, 0x32, 0xe5, 0xf7, 0xf5, 0x0f, 0x2e, 0x12, 0x24, 0x23, 0x18, 0x6a, - 0x88, 0x3f, 0x28, 0xb0, 0x9a, 0x6a, 0x8d, 0x32, 0x4b, 0xc8, 0x3a, 0xb5, 0xcc, 0x12, 0xd2, 0x1e, - 0xab, 0xd7, 0x18, 0xdb, 0x7b, 0x48, 0xcf, 0xcf, 0xf7, 0x21, 0xf8, 0x97, 0x0a, 0x5c, 0x4a, 0xcf, - 0x36, 0x48, 0x82, 0x23, 0x9d, 0x7e, 0xb4, 0x09, 0x8d, 0x5b, 0x7f, 0xc0, 0x38, 0xdc, 0xd7, 0xb6, - 0xe4, 0xcd, 0x24, 0xc6, 0x17, 0x05, 0xf1, 0x57, 0x0a, 0x5c, 0x4a, 0x37, 0x6d, 0x19, 0x0b, 0x69, - 0x5b, 0xcf, 0xf5, 0xd9, 0x43, 0xc6, 0x60, 0xbb, 0xc6, 0xdb, 0x59, 0x8c, 0x98, 0xc7, 0x82, 0xe5, - 0x09, 0x6d, 0xba, 0xb2, 0x3c, 0x49, 0x4c, 0x06, 0xd2, 0xd6, 0x90, 0xe8, 0xd5, 0x17, 0xcd, 0x13, - 0x82, 0x71, 0xef, 0xb1, 0x52, 0x6b, 0xfe, 0x65, 0x09, 0x56, 0xc4, 0x9b, 0x25, 0x0e, 0xd0, 0xa7, - 0xa0, 0x72, 0xd3, 0xf3, 0x57, 0xe8, 0xbc, 0xa7, 0x40, 0x2d, 0x6f, 0x43, 0x7f, 0x93, 0xb1, 0xb9, - 0xab, 0xdd, 0x96, 0xba, 0x81, 0x3f, 0x20, 0x0a, 0x1f, 0x7c, 0xa1, 0xc0, 0xb2, 0x40, 0x46, 0x9b, - 0xd2, 0x67, 0x8e, 0xc4, 0x6b, 0xad, 0xb6, 0x35, 0x41, 0x42, 0x58, 0xa2, 0xc9, 0xb0, 0x1f, 0xe8, - 0xdb, 0x0c, 0x9b, 0x61, 0xc9, 0xc1, 0xc5, 0xfb, 0x33, 0x25, 0xe1, 0x41, 0x29, 0x7e, 0x3f, 0x46, - 0x5b, 0xd2, 0x49, 0x22, 0xf9, 0xb2, 0x97, 0xaf, 0xf7, 0x36, 0xc3, 0xde, 0x42, 0x77, 0xa6, 0x60, - 0xd3, 0xc8, 0x83, 0xd1, 0x23, 0x2c, 0xba, 0x2b, 0xcf, 0xb1, 0xd4, 0x6b, 0xb0, 0x76, 0x6f, 0xb2, - 0x90, 0x50, 0x3f, 0x4d, 0x41, 0x96, 0x85, 0xe2, 0xfd, 0xf6, 0x1f, 0x0a, 0x5c, 0x95, 0xbf, 0x92, - 0xa2, 0xc6, 0x04, 0x24, 0xe9, 0x5c, 0xb0, 0x33, 0xfb, 0x01, 0x41, 0x33, 0x3d, 0x65, 0xe5, 0x5b, - 0x6a, 0x6c, 0x46, 0x08, 0x41, 0x4d, 0xbc, 0xb4, 0xca, 0x3a, 0x5d, 0xf6, 0x21, 0x36, 0x37, 0x55, - 0x85, 0xa9, 0x6a, 0xd3, 0xbc, 0xf5, 0x74, 0x00, 0xeb, 0x1d, 0xcf, 0xc9, 0x60, 0x3d, 0x55, 0xf9, - 0x23, 0xdc, 0x11, 0xbd, 0xf6, 0x48, 0xf9, 0xe9, 0xbb, 0x42, 0xa0, 0xeb, 0xf5, 0x4d, 0xb7, 0x5b, - 0xf7, 0x82, 0x6e, 0xa3, 0x8b, 0x5d, 0x06, 0xda, 0xe0, 0x5b, 0xa6, 0x6f, 0x93, 0xd1, 0x3f, 0xa9, - 0x9e, 0xf0, 0xaf, 0xff, 0x29, 0xca, 0xdf, 0x0b, 0x57, 0x9f, 0xf3, 0xb3, 0xfb, 0x7d, 0x2f, 0xb2, - 0x68, 0x4c, 0x1f, 0x47, 0xed, 0xfa, 0x8f, 0x1f, 0xb5, 0x97, 0xd8, 0xf1, 0xb7, 0xff, 0x1f, 0x00, - 0x00, 0xff, 0xff, 0x93, 0x6b, 0x90, 0xee, 0xe2, 0x1a, 0x00, 0x00, + // 2026 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x59, 0xdb, 0x6f, 0xdb, 0xd6, + 0x19, 0xef, 0x91, 0x6f, 0xf2, 0x47, 0xdf, 0x72, 0x66, 0x27, 0x0a, 0x73, 0xb3, 0x19, 0x37, 0x56, + 0xd4, 0x44, 0xb2, 0x55, 0x34, 0x6b, 0xe2, 0x39, 0x85, 0x1d, 0x67, 0x69, 0x86, 0x64, 0xf5, 0xe8, + 0xac, 0x03, 0x86, 0x60, 0x02, 0x25, 0x9e, 0x28, 0xac, 0x24, 0x92, 0x25, 0x29, 0x2f, 0xee, 0x16, + 0xa0, 0x6b, 0x87, 0x01, 0xc3, 0xf2, 0xb0, 0xb6, 0x6f, 0x43, 0x1f, 0x06, 0xec, 0x6d, 0x8f, 0x03, + 0xf6, 0xba, 0x3f, 0x60, 0xaf, 0xfb, 0x17, 0xf6, 0xb8, 0xf7, 0xed, 0x71, 0x38, 0x17, 0x52, 0xbc, + 0x1c, 0x4a, 0x96, 0xd3, 0xbc, 0x91, 0xe7, 0xfb, 0xce, 0xf9, 0x7e, 0xdf, 0xfd, 0x23, 0x0f, 0x5c, + 0x6a, 0x3b, 0x4e, 0xbb, 0x4b, 0x6a, 0x6e, 0xbf, 0xe9, 0xf7, 0x9b, 0xb5, 0xa3, 0x2d, 0xf1, 0x54, + 0x75, 0x3d, 0x27, 0x70, 0xf0, 0x12, 0x27, 0x57, 0xc5, 0xe2, 0xd1, 0x96, 0x7a, 0x51, 0x6c, 0x30, + 0x5c, 0xab, 0x66, 0xd8, 0xb6, 0x13, 0x18, 0x81, 0xe5, 0xd8, 0x3e, 0xe7, 0x57, 0x2f, 0x87, 0xc7, + 0xd1, 0xb7, 0x66, 0xff, 0x59, 0xcd, 0xec, 0x7b, 0x8c, 0x41, 0xd0, 0x2f, 0xa4, 0xe9, 0xa4, 0xe7, + 0x06, 0xc7, 0x82, 0xb8, 0x9a, 0x26, 0x3e, 0xb3, 0x48, 0xd7, 0x6c, 0xf4, 0x0c, 0xbf, 0x23, 0x38, + 0xae, 0xa4, 0x39, 0x02, 0xab, 0x47, 0xfc, 0xc0, 0xe8, 0xb9, 0x9c, 0x41, 0xfb, 0x06, 0xc1, 0xd4, + 0x13, 0xc7, 0xb5, 0x5a, 0x18, 0xc3, 0xa4, 0x6d, 0xf4, 0x48, 0x09, 0xad, 0xa2, 0xf2, 0xac, 0xce, + 0x9e, 0xf1, 0x36, 0x4c, 0x77, 0x8d, 0x26, 0xe9, 0xfa, 0xa5, 0xc2, 0xea, 0x44, 0x59, 0xa9, 0x5f, + 0xad, 0xa6, 0xd5, 0xab, 0xb2, 0xcd, 0xd5, 0x47, 0x8c, 0xeb, 0xbe, 0x1d, 0x78, 0xc7, 0xba, 0xd8, + 0xa2, 0xde, 0x06, 0x25, 0xb6, 0x8c, 0x97, 0x60, 0xa2, 0x43, 0x8e, 0xc5, 0xf1, 0xf4, 0x11, 0x2f, + 0xc3, 0xd4, 0x91, 0xd1, 0xed, 0x93, 0x52, 0x81, 0xad, 0xf1, 0x97, 0x3b, 0x85, 0xf7, 0x91, 0xf6, + 0x55, 0x01, 0xe6, 0x0f, 0x98, 0x88, 0xc7, 0xc4, 0xf7, 0x8d, 0x36, 0xa1, 0xe8, 0x4c, 0x23, 0x30, + 0xd8, 0xf6, 0x39, 0x9d, 0x3d, 0xe3, 0x8f, 0x00, 0x8c, 0x20, 0xf0, 0xac, 0x66, 0x3f, 0x20, 0x21, + 0xc2, 0x5a, 0x16, 0x61, 0xe2, 0xa0, 0xea, 0x6e, 0xb4, 0x83, 0xa3, 0x8d, 0x1d, 0x81, 0x2f, 0x01, + 0xf4, 0x38, 0x5b, 0xc3, 0x32, 0x4b, 0x13, 0x0c, 0xd5, 0xac, 0x58, 0x79, 0x68, 0xe2, 0x1d, 0x98, + 0x73, 0xfb, 0xcd, 0xae, 0xe5, 0x3f, 0x6f, 0x50, 0x33, 0x96, 0x26, 0x57, 0x51, 0x59, 0xa9, 0xab, + 0x91, 0x44, 0x61, 0xe3, 0xea, 0x93, 0xd0, 0xc6, 0xba, 0x22, 0xf8, 0xe9, 0x8a, 0xba, 0x03, 0x8b, + 0x29, 0xe1, 0x63, 0xd9, 0x64, 0x03, 0x16, 0x1f, 0x90, 0x80, 0x99, 0x5b, 0x27, 0x9f, 0xf6, 0x89, + 0x1f, 0x50, 0xe6, 0x80, 0xbe, 0x8b, 0x03, 0xf8, 0x8b, 0xf6, 0x39, 0x02, 0xfc, 0x53, 0xd7, 0x34, + 0x02, 0x92, 0x60, 0xbe, 0x19, 0x67, 0x56, 0xea, 0xe7, 0x72, 0x5c, 0x29, 0x4e, 0xc1, 0xdb, 0xa0, + 0xf4, 0xd9, 0x21, 0x2c, 0x9c, 0x18, 0x1c, 0x99, 0xae, 0x3f, 0xa4, 0x11, 0xf7, 0xd8, 0xf0, 0x3b, + 0x3a, 0x70, 0x76, 0xfa, 0xac, 0xb5, 0x60, 0xe1, 0x80, 0x6b, 0x3e, 0x14, 0x2a, 0xde, 0x86, 0xa2, + 0x30, 0x6f, 0xe8, 0xbf, 0x2b, 0x23, 0xfc, 0xa7, 0x47, 0x1b, 0xb4, 0x3a, 0x2c, 0x46, 0x42, 0x7c, + 0xd7, 0xb1, 0x7d, 0x82, 0xaf, 0x80, 0x32, 0x70, 0xa0, 0x5f, 0x42, 0xab, 0x13, 0xe5, 0x59, 0x1d, + 0x22, 0x0f, 0xfa, 0x9a, 0x05, 0x67, 0x1e, 0x59, 0x3e, 0xb7, 0xa2, 0x1f, 0x62, 0x2b, 0xc1, 0x8c, + 0xeb, 0x39, 0x9f, 0x90, 0x56, 0x20, 0xd0, 0x85, 0xaf, 0xf8, 0x02, 0xcc, 0xba, 0xf4, 0x30, 0xdf, + 0xfa, 0x8c, 0x7b, 0x64, 0x4a, 0x2f, 0xd2, 0x85, 0x43, 0xeb, 0x33, 0x42, 0xa3, 0x85, 0x11, 0x03, + 0xa7, 0x43, 0xec, 0x30, 0x5a, 0xe8, 0xca, 0x13, 0xba, 0xa0, 0xf5, 0x00, 0xc7, 0x45, 0x09, 0x84, + 0x35, 0x98, 0x66, 0xaa, 0x73, 0x70, 0x43, 0xdc, 0x20, 0xd8, 0xf0, 0x35, 0x58, 0xb4, 0xc9, 0x8b, + 0xa0, 0x11, 0x13, 0xc5, 0x43, 0x63, 0x9e, 0x2e, 0x1f, 0x44, 0xe2, 0x3e, 0x85, 0x4b, 0x91, 0xb8, + 0xc3, 0x7e, 0xd3, 0x6f, 0x79, 0x96, 0xcb, 0x0a, 0xcd, 0x70, 0x0f, 0xbc, 0x8e, 0x86, 0x36, 0x5c, + 0xce, 0x13, 0x29, 0xb4, 0x5d, 0x87, 0x79, 0x3f, 0x4e, 0x10, 0x1e, 0x49, 0x2e, 0x9e, 0x58, 0xc5, + 0x0a, 0xe0, 0x7d, 0xd2, 0x25, 0xa9, 0xb8, 0x96, 0x27, 0xc1, 0xdf, 0x27, 0x60, 0x2e, 0x8e, 0x49, + 0x5a, 0xde, 0xa2, 0xad, 0x85, 0xb8, 0x49, 0x76, 0x40, 0x71, 0xfb, 0xfe, 0xf3, 0x46, 0xcb, 0xb1, + 0x9f, 0x59, 0x6d, 0x91, 0xe5, 0x17, 0x65, 0x71, 0xe9, 0x3f, 0xbf, 0xc7, 0x78, 0x74, 0x70, 0xa3, + 0x67, 0xbc, 0x09, 0xcb, 0x46, 0xab, 0xd3, 0x30, 0x89, 0x61, 0x76, 0x2d, 0x9b, 0x34, 0x7c, 0xd2, + 0x72, 0x6c, 0xd3, 0x2f, 0x4d, 0x31, 0xe3, 0x62, 0xa3, 0xd5, 0xd9, 0x17, 0xa4, 0x43, 0x4e, 0xc1, + 0x75, 0x58, 0xf1, 0x48, 0x60, 0x58, 0x76, 0xc3, 0x68, 0x75, 0x88, 0xd9, 0x88, 0x52, 0x62, 0x66, + 0x15, 0x95, 0x8b, 0xfa, 0xf7, 0x38, 0x71, 0x97, 0xd2, 0x44, 0x16, 0xf8, 0xf8, 0x67, 0xa0, 0x86, + 0x91, 0xee, 0x91, 0x80, 0xd8, 0x54, 0xc7, 0x46, 0xd8, 0x3b, 0x4a, 0x45, 0x86, 0xf9, 0x7c, 0x26, + 0x5b, 0xf7, 0x05, 0x83, 0x5e, 0x12, 0x9b, 0xf5, 0x70, 0x6f, 0x48, 0xc1, 0x7b, 0x51, 0xc9, 0x9f, + 0x65, 0x01, 0x5a, 0xc9, 0x2a, 0x1e, 0xb7, 0xeb, 0x77, 0x5d, 0xf9, 0xff, 0x81, 0x00, 0x06, 0x86, + 0xc5, 0x57, 0x61, 0x9e, 0xf9, 0x82, 0xd8, 0xa6, 0xeb, 0x58, 0x76, 0x98, 0xa0, 0x73, 0x74, 0xf1, + 0xbe, 0x58, 0xc3, 0x8f, 0x24, 0x7d, 0xe0, 0xc6, 0x30, 0x7f, 0x0d, 0x6b, 0x02, 0xaf, 0x5b, 0xa6, + 0x5b, 0xb0, 0xa8, 0x93, 0x16, 0xb1, 0x8e, 0x22, 0x67, 0xe1, 0x15, 0x98, 0xa6, 0x11, 0x61, 0x99, + 0x61, 0x88, 0x1a, 0xad, 0xce, 0x43, 0x13, 0xdf, 0x86, 0x19, 0xe1, 0x05, 0x51, 0x5d, 0x47, 0xd6, + 0xbe, 0x90, 0x5f, 0xfb, 0x01, 0x9c, 0x7d, 0x40, 0x82, 0xb8, 0x1f, 0xc2, 0x6c, 0xd0, 0x60, 0x2e, + 0x9e, 0x5c, 0xa1, 0xbd, 0xe2, 0x6b, 0xda, 0xb7, 0x08, 0xce, 0xf3, 0x06, 0x21, 0x3b, 0x61, 0x4f, + 0x72, 0x82, 0x52, 0xbf, 0x3c, 0x3c, 0x0c, 0x92, 0x12, 0x5e, 0xaf, 0x79, 0xb8, 0x50, 0xa2, 0x65, + 0x45, 0x5a, 0xc4, 0xde, 0x4c, 0xa9, 0xfe, 0x3d, 0x82, 0xf3, 0x12, 0x91, 0xa2, 0x88, 0xed, 0xcb, + 0x8a, 0xd8, 0x68, 0x8b, 0x9c, 0xb2, 0xc8, 0x7d, 0x00, 0xe7, 0x79, 0x91, 0x3b, 0xad, 0x77, 0x7f, + 0x0d, 0xe7, 0x1e, 0x3b, 0xa6, 0xf5, 0xec, 0x38, 0x56, 0x9f, 0x4e, 0xbe, 0x3d, 0x5d, 0xfd, 0x0a, + 0xe3, 0x55, 0x3f, 0xed, 0x4b, 0x04, 0xca, 0x41, 0xbf, 0xdb, 0x1d, 0x47, 0xe4, 0x4d, 0xc0, 0x1e, + 0x09, 0xfa, 0x9e, 0xdd, 0xb0, 0x7a, 0x3d, 0x62, 0x5a, 0x46, 0x40, 0xba, 0xc7, 0x4c, 0x72, 0x51, + 0x3f, 0xc3, 0x29, 0x0f, 0x07, 0x04, 0xbc, 0x06, 0x73, 0x3d, 0xe3, 0xc5, 0xa0, 0x4a, 0x4e, 0x30, + 0x67, 0x2b, 0x3d, 0xe3, 0x45, 0x58, 0x1d, 0xb5, 0x5f, 0xc0, 0x1c, 0x07, 0x21, 0x5c, 0xf8, 0x63, + 0x38, 0xe3, 0x89, 0xa4, 0x1c, 0xec, 0xe3, 0x6e, 0x5c, 0xcb, 0xaa, 0x96, 0xca, 0x5f, 0x7d, 0xc9, + 0x4b, 0x2e, 0xf8, 0x34, 0x60, 0x4a, 0xdc, 0xc8, 0xbb, 0x83, 0x72, 0x3e, 0x8e, 0xca, 0xe7, 0x60, + 0x86, 0x97, 0x04, 0xbf, 0x34, 0xc9, 0x5a, 0xe2, 0x34, 0xab, 0x09, 0x7e, 0x6e, 0xf7, 0x98, 0xc8, + 0xeb, 0x1e, 0xda, 0x4f, 0x00, 0xef, 0xb6, 0x3a, 0xb6, 0xf3, 0xcb, 0x2e, 0x31, 0xdb, 0xa7, 0x05, + 0x51, 0x88, 0x83, 0xd0, 0x7e, 0x53, 0x80, 0xe5, 0xc3, 0xc0, 0x23, 0x46, 0xcf, 0xb2, 0xdb, 0xe3, + 0x7a, 0x33, 0xef, 0x54, 0x7c, 0x0b, 0xce, 0xf5, 0x98, 0xcd, 0x64, 0xda, 0x4d, 0x94, 0xa7, 0xf4, + 0x15, 0x4e, 0x4e, 0xb7, 0xc7, 0xf7, 0xb2, 0xfb, 0x92, 0xb6, 0x5b, 0x4e, 0xee, 0xdb, 0xe5, 0xe2, + 0x76, 0xe0, 0x82, 0xcf, 0x74, 0x68, 0x0c, 0x69, 0xc7, 0x25, 0xce, 0xb2, 0x9b, 0x35, 0x6b, 0x1b, + 0x56, 0x52, 0x26, 0x78, 0x43, 0xb1, 0xf4, 0x11, 0xac, 0xdc, 0xf3, 0x08, 0x2d, 0xc6, 0xb6, 0xe1, + 0xfa, 0xcf, 0x9d, 0x20, 0x34, 0xb6, 0x6c, 0x62, 0x49, 0x3b, 0xa0, 0x20, 0x29, 0x00, 0xaf, 0x10, + 0xac, 0x88, 0xf2, 0x9e, 0x3a, 0xf1, 0x16, 0x14, 0x7d, 0xb1, 0x24, 0xca, 0xba, 0x2a, 0x29, 0x62, + 0xe1, 0xa6, 0x88, 0xf7, 0xf5, 0xca, 0xf9, 0x7f, 0x10, 0x14, 0xc3, 0x33, 0xc7, 0x98, 0xc2, 0xb6, + 0x41, 0x21, 0x2f, 0x5c, 0xcb, 0x23, 0xfc, 0x5b, 0x6b, 0x62, 0xe4, 0xb7, 0x16, 0x70, 0x76, 0xba, + 0x80, 0xef, 0x46, 0x43, 0xcc, 0x24, 0x73, 0xcc, 0xb5, 0x7c, 0x35, 0xbf, 0xeb, 0x01, 0xa6, 0x0b, + 0xcb, 0xac, 0x95, 0x88, 0xe3, 0xdf, 0x70, 0xe7, 0x3a, 0x86, 0x95, 0x94, 0x34, 0x11, 0xa5, 0xef, + 0xc3, 0x6c, 0xe8, 0xbe, 0x30, 0x3a, 0x87, 0xf9, 0x7a, 0xc0, 0x7c, 0xe2, 0x46, 0xf5, 0x2e, 0xac, + 0x88, 0x46, 0x95, 0x8a, 0x32, 0x35, 0x15, 0x65, 0xb3, 0x83, 0x48, 0xd2, 0xfe, 0x80, 0x40, 0x39, + 0x24, 0xa4, 0x33, 0x4e, 0x41, 0xd9, 0x84, 0x49, 0x16, 0x02, 0x85, 0x51, 0x21, 0xf0, 0xe1, 0x5b, + 0x3a, 0xe3, 0xc4, 0x17, 0x63, 0x08, 0x98, 0xc9, 0x3e, 0x7c, 0x6b, 0x80, 0x61, 0xaf, 0x08, 0xd3, + 0x81, 0xe1, 0xb5, 0x49, 0xa0, 0x2d, 0xc0, 0x1c, 0x07, 0xc3, 0x8d, 0x56, 0xff, 0xef, 0x12, 0x80, + 0x68, 0xbb, 0x4d, 0xe2, 0xe1, 0xdf, 0x21, 0xc0, 0x22, 0x35, 0xe3, 0x78, 0x46, 0x34, 0x7e, 0x75, + 0x04, 0x5d, 0xdb, 0xfc, 0xe2, 0x5f, 0xff, 0xfe, 0xa6, 0x50, 0x51, 0xdf, 0xae, 0x1d, 0x6d, 0xd5, + 0x7e, 0x45, 0x53, 0x60, 0x47, 0x84, 0x82, 0x5f, 0xab, 0xd4, 0x12, 0x53, 0x43, 0xad, 0xf2, 0xf2, + 0x0e, 0xaa, 0xe0, 0xaf, 0x11, 0xfb, 0xf6, 0x4f, 0xa0, 0x28, 0x67, 0xa5, 0xc8, 0x47, 0xc2, 0x91, + 0x78, 0xde, 0x63, 0x78, 0x6a, 0xf8, 0x26, 0xc3, 0x13, 0x97, 0x3f, 0x0c, 0x17, 0xfe, 0x73, 0xf4, + 0x9b, 0x21, 0x81, 0xeb, 0x9d, 0xac, 0xb4, 0xdc, 0x59, 0x73, 0x24, 0xb4, 0x1d, 0x06, 0xed, 0xfb, + 0xf5, 0x7a, 0x06, 0x5a, 0xf5, 0x24, 0x76, 0xfb, 0x16, 0xf1, 0xcf, 0xfd, 0xc4, 0x5c, 0x87, 0x25, + 0x5f, 0x34, 0x79, 0xf3, 0xa6, 0xfa, 0xce, 0x89, 0x78, 0x79, 0xf8, 0x68, 0x55, 0x86, 0xb6, 0x8c, + 0xaf, 0x31, 0xb4, 0x02, 0x5b, 0x0c, 0xe3, 0xcb, 0x24, 0x48, 0xfc, 0x47, 0x14, 0x7e, 0xd0, 0x8e, + 0xb2, 0x60, 0xee, 0x44, 0xa8, 0x9e, 0xcd, 0xa4, 0xc3, 0xfd, 0x9e, 0x1b, 0x1c, 0x87, 0x4e, 0xad, + 0x8c, 0xe9, 0xd4, 0xbf, 0x20, 0x38, 0x93, 0x19, 0x6c, 0x64, 0x16, 0xcb, 0x9b, 0x7e, 0x72, 0x01, + 0xfd, 0x88, 0x01, 0xda, 0xd7, 0x3e, 0x18, 0x0b, 0xd0, 0x9d, 0x5e, 0x5a, 0x0e, 0xf5, 0xeb, 0x57, + 0x08, 0x94, 0xd8, 0xcc, 0x83, 0xd7, 0xb3, 0xf8, 0xb2, 0x23, 0x51, 0x2e, 0xb2, 0x7d, 0x86, 0xec, + 0xae, 0x76, 0x7b, 0x3c, 0x64, 0xc6, 0x40, 0x02, 0xc5, 0xf4, 0x5b, 0x04, 0x93, 0x74, 0x4e, 0xc0, + 0x97, 0x64, 0xb3, 0x72, 0x34, 0x42, 0xc9, 0x42, 0x3e, 0x3e, 0x5e, 0x84, 0x21, 0xaf, 0xd5, 0xc7, + 0x43, 0xe3, 0xf6, 0xbb, 0x5d, 0x0a, 0xc3, 0x84, 0xf9, 0xc4, 0xd8, 0x82, 0x65, 0xad, 0x4f, 0x32, + 0xda, 0xa9, 0x1b, 0x23, 0xf9, 0x38, 0xc0, 0x32, 0xda, 0x44, 0x34, 0xf7, 0x97, 0xd2, 0x1f, 0x19, + 0xf8, 0x7a, 0x5e, 0x94, 0x64, 0x3e, 0x44, 0x72, 0x5d, 0xf1, 0x90, 0x29, 0x7f, 0x4f, 0xbb, 0x7b, + 0x9a, 0x20, 0x19, 0x88, 0xa1, 0x86, 0x78, 0x85, 0x60, 0x3e, 0xd1, 0x1a, 0x65, 0x96, 0x90, 0x75, + 0x6a, 0x99, 0x25, 0xa4, 0x3d, 0x56, 0xab, 0x30, 0xb4, 0xeb, 0x58, 0xcb, 0xcf, 0xf7, 0x48, 0xf8, + 0x97, 0x08, 0x16, 0x92, 0x63, 0x1e, 0x96, 0xc8, 0x91, 0x0e, 0x82, 0xea, 0x90, 0xc6, 0xad, 0xdd, + 0x60, 0x18, 0xae, 0xa9, 0x6b, 0xf2, 0x66, 0x12, 0xca, 0x17, 0x05, 0xf1, 0x15, 0x82, 0x85, 0xe4, + 0x68, 0x28, 0x43, 0x21, 0x1d, 0x1e, 0x87, 0xa2, 0x10, 0xd5, 0xa6, 0x5e, 0xe1, 0x7e, 0x0b, 0x47, + 0xab, 0x51, 0x70, 0x3e, 0x47, 0xb0, 0x90, 0x9c, 0x21, 0x64, 0x70, 0xa4, 0x53, 0x46, 0x6e, 0x08, + 0xdd, 0x64, 0x50, 0x36, 0x2a, 0x6f, 0x27, 0xa0, 0xe4, 0xa1, 0x60, 0x69, 0x4b, 0x67, 0x00, 0x59, + 0xda, 0xc6, 0x06, 0x15, 0x69, 0xa7, 0x8a, 0x8d, 0x0e, 0xa7, 0x4d, 0x5b, 0x9f, 0x90, 0xce, 0x1d, + 0x54, 0xa9, 0xff, 0x69, 0x06, 0x66, 0xc5, 0xcf, 0x6c, 0xe2, 0xe1, 0x4f, 0x40, 0xe1, 0x91, 0xc0, + 0x6f, 0x66, 0xf2, 0xfe, 0x11, 0xab, 0x79, 0x04, 0xed, 0x3a, 0x43, 0x73, 0x55, 0xbd, 0x2c, 0x8d, + 0x0a, 0xfe, 0x67, 0x59, 0xf8, 0xe0, 0x25, 0x28, 0xb1, 0xcb, 0x02, 0x59, 0x29, 0xcd, 0xde, 0x25, + 0xe4, 0x0b, 0xae, 0x31, 0xc1, 0xd7, 0xeb, 0xeb, 0x4c, 0x30, 0x13, 0x54, 0x1d, 0x2a, 0xfe, 0x0b, + 0x04, 0x33, 0x42, 0x71, 0xbc, 0x2a, 0xfd, 0xff, 0x15, 0xbb, 0x45, 0x50, 0xd7, 0x86, 0x70, 0x08, + 0x47, 0xd4, 0x19, 0x82, 0x1b, 0xda, 0xc6, 0x00, 0x81, 0x5c, 0xb8, 0xb8, 0x9a, 0xa1, 0x20, 0x1c, + 0x28, 0x86, 0x57, 0x2b, 0x78, 0x4d, 0x3a, 0x57, 0x9d, 0x4c, 0xfb, 0x0d, 0x26, 0x7b, 0x0d, 0x5f, + 0x19, 0x21, 0x9b, 0x06, 0x3e, 0x0c, 0x2e, 0x07, 0xf0, 0x55, 0x79, 0xc5, 0x49, 0xdc, 0x52, 0xa8, + 0xeb, 0xc3, 0x99, 0x84, 0xfa, 0x49, 0x08, 0xb2, 0x9a, 0x24, 0xee, 0x15, 0xfe, 0x86, 0xe0, 0xac, + 0xfc, 0xef, 0x3d, 0xae, 0x0d, 0x91, 0x24, 0x9d, 0x92, 0x36, 0x4f, 0xbe, 0x41, 0xc0, 0x4c, 0xce, + 0x9c, 0xf9, 0x96, 0x4a, 0x4d, 0x4c, 0x01, 0x28, 0xb1, 0x1b, 0x00, 0x59, 0xb0, 0x66, 0x2f, 0x08, + 0x72, 0x2b, 0x85, 0x30, 0x55, 0x65, 0x94, 0xb7, 0xf6, 0xbe, 0x46, 0xb0, 0xdc, 0x72, 0x7a, 0x19, + 0x61, 0x7b, 0x0a, 0xff, 0x3d, 0x7b, 0x40, 0xcf, 0x3d, 0x40, 0x3f, 0xbf, 0x25, 0x18, 0xda, 0x4e, + 0xd7, 0xb0, 0xdb, 0x55, 0xc7, 0x6b, 0xd7, 0xda, 0xc4, 0x66, 0x52, 0x6b, 0x9c, 0x64, 0xb8, 0x96, + 0x3f, 0xb8, 0x39, 0xde, 0xe6, 0x4f, 0xff, 0x43, 0xe8, 0xaf, 0x85, 0xb3, 0x0f, 0xf8, 0xde, 0x7b, + 0x5d, 0xa7, 0x6f, 0xd2, 0xa0, 0x3e, 0xec, 0x37, 0xab, 0x1f, 0x6f, 0xfd, 0x33, 0x24, 0x3c, 0x65, + 0x84, 0xa7, 0x9c, 0xf0, 0xf4, 0xe3, 0xad, 0xe6, 0x34, 0x3b, 0xf7, 0xdd, 0xff, 0x07, 0x00, 0x00, + 0xff, 0xff, 0xcb, 0xe1, 0xb8, 0xca, 0x90, 0x1e, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/pubsub/v1beta2/pubsub.pb.go b/vendor/google.golang.org/genproto/googleapis/pubsub/v1beta2/pubsub.pb.go index 21621f0..75d044a 100644 --- a/vendor/google.golang.org/genproto/googleapis/pubsub/v1beta2/pubsub.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/pubsub/v1beta2/pubsub.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/pubsub/v1beta2/pubsub.proto -// DO NOT EDIT! /* Package pubsub is a generated protocol buffer package. diff --git a/vendor/google.golang.org/genproto/googleapis/rpc/code/code.pb.go b/vendor/google.golang.org/genproto/googleapis/rpc/code/code.pb.go index 304006d..dbd73b3 100644 --- a/vendor/google.golang.org/genproto/googleapis/rpc/code/code.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/rpc/code/code.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/rpc/code.proto -// DO NOT EDIT! /* Package code is a generated protocol buffer package. @@ -69,9 +68,12 @@ const ( // HTTP Mapping: 504 Gateway Timeout Code_DEADLINE_EXCEEDED Code = 4 // Some requested entity (e.g., file or directory) was not found. - // For privacy reasons, this code *may* be returned when the client - // does not have the access rights to the entity, though such usage is - // discouraged. + // + // Note to server developers: if a request is denied for an entire class + // of users, such as gradual feature rollout or undocumented whitelist, + // `NOT_FOUND` may be used. If a request is denied for some users within + // a class of users, such as user-based access control, `PERMISSION_DENIED` + // must be used. // // HTTP Mapping: 404 Not Found Code_NOT_FOUND Code = 5 @@ -85,7 +87,9 @@ const ( // caused by exhausting some resource (use `RESOURCE_EXHAUSTED` // instead for those errors). `PERMISSION_DENIED` must not be // used if the caller can not be identified (use `UNAUTHENTICATED` - // instead for those errors). + // instead for those errors). This error code does not imply the + // request is valid or the requested entity exists or satisfies + // other pre-conditions. // // HTTP Mapping: 403 Forbidden Code_PERMISSION_DENIED Code = 7 @@ -108,7 +112,8 @@ const ( // between `FAILED_PRECONDITION`, `ABORTED`, and `UNAVAILABLE`: // (a) Use `UNAVAILABLE` if the client can retry just the failing call. // (b) Use `ABORTED` if the client should retry at a higher level - // (e.g., restarting a read-modify-write sequence). + // (e.g., when a client-specified test-and-set fails, indicating the + // client should restart a read-modify-write sequence). // (c) Use `FAILED_PRECONDITION` if the client should not retry until // the system state has been explicitly fixed. E.g., if an "rmdir" // fails because the directory is non-empty, `FAILED_PRECONDITION` diff --git a/vendor/google.golang.org/genproto/googleapis/rpc/errdetails/error_details.pb.go b/vendor/google.golang.org/genproto/googleapis/rpc/errdetails/error_details.pb.go index 8eda666..068bfb2 100644 --- a/vendor/google.golang.org/genproto/googleapis/rpc/errdetails/error_details.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/rpc/errdetails/error_details.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/rpc/error_details.proto -// DO NOT EDIT! /* Package errdetails is a generated protocol buffer package. @@ -12,6 +11,7 @@ It has these top-level messages: RetryInfo DebugInfo QuotaFailure + PreconditionFailure BadRequest RequestInfo ResourceInfo @@ -157,6 +157,73 @@ func (m *QuotaFailure_Violation) GetDescription() string { return "" } +// Describes what preconditions have failed. +// +// For example, if an RPC failed because it required the Terms of Service to be +// acknowledged, it could list the terms of service violation in the +// PreconditionFailure message. +type PreconditionFailure struct { + // Describes all precondition violations. + Violations []*PreconditionFailure_Violation `protobuf:"bytes,1,rep,name=violations" json:"violations,omitempty"` +} + +func (m *PreconditionFailure) Reset() { *m = PreconditionFailure{} } +func (m *PreconditionFailure) String() string { return proto.CompactTextString(m) } +func (*PreconditionFailure) ProtoMessage() {} +func (*PreconditionFailure) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *PreconditionFailure) GetViolations() []*PreconditionFailure_Violation { + if m != nil { + return m.Violations + } + return nil +} + +// A message type used to describe a single precondition failure. +type PreconditionFailure_Violation struct { + // The type of PreconditionFailure. We recommend using a service-specific + // enum type to define the supported precondition violation types. For + // example, "TOS" for "Terms of Service violation". + Type string `protobuf:"bytes,1,opt,name=type" json:"type,omitempty"` + // The subject, relative to the type, that failed. + // For example, "google.com/cloud" relative to the "TOS" type would + // indicate which terms of service is being referenced. + Subject string `protobuf:"bytes,2,opt,name=subject" json:"subject,omitempty"` + // A description of how the precondition failed. Developers can use this + // description to understand how to fix the failure. + // + // For example: "Terms of service not accepted". + Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` +} + +func (m *PreconditionFailure_Violation) Reset() { *m = PreconditionFailure_Violation{} } +func (m *PreconditionFailure_Violation) String() string { return proto.CompactTextString(m) } +func (*PreconditionFailure_Violation) ProtoMessage() {} +func (*PreconditionFailure_Violation) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{3, 0} +} + +func (m *PreconditionFailure_Violation) GetType() string { + if m != nil { + return m.Type + } + return "" +} + +func (m *PreconditionFailure_Violation) GetSubject() string { + if m != nil { + return m.Subject + } + return "" +} + +func (m *PreconditionFailure_Violation) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + // Describes violations in a client request. This error type focuses on the // syntactic aspects of the request. type BadRequest struct { @@ -167,7 +234,7 @@ type BadRequest struct { func (m *BadRequest) Reset() { *m = BadRequest{} } func (m *BadRequest) String() string { return proto.CompactTextString(m) } func (*BadRequest) ProtoMessage() {} -func (*BadRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } +func (*BadRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } func (m *BadRequest) GetFieldViolations() []*BadRequest_FieldViolation { if m != nil { @@ -189,7 +256,7 @@ type BadRequest_FieldViolation struct { func (m *BadRequest_FieldViolation) Reset() { *m = BadRequest_FieldViolation{} } func (m *BadRequest_FieldViolation) String() string { return proto.CompactTextString(m) } func (*BadRequest_FieldViolation) ProtoMessage() {} -func (*BadRequest_FieldViolation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3, 0} } +func (*BadRequest_FieldViolation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4, 0} } func (m *BadRequest_FieldViolation) GetField() string { if m != nil { @@ -219,7 +286,7 @@ type RequestInfo struct { func (m *RequestInfo) Reset() { *m = RequestInfo{} } func (m *RequestInfo) String() string { return proto.CompactTextString(m) } func (*RequestInfo) ProtoMessage() {} -func (*RequestInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } +func (*RequestInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } func (m *RequestInfo) GetRequestId() string { if m != nil { @@ -258,7 +325,7 @@ type ResourceInfo struct { func (m *ResourceInfo) Reset() { *m = ResourceInfo{} } func (m *ResourceInfo) String() string { return proto.CompactTextString(m) } func (*ResourceInfo) ProtoMessage() {} -func (*ResourceInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } +func (*ResourceInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } func (m *ResourceInfo) GetResourceType() string { if m != nil { @@ -301,7 +368,7 @@ type Help struct { func (m *Help) Reset() { *m = Help{} } func (m *Help) String() string { return proto.CompactTextString(m) } func (*Help) ProtoMessage() {} -func (*Help) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } +func (*Help) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } func (m *Help) GetLinks() []*Help_Link { if m != nil { @@ -321,7 +388,7 @@ type Help_Link struct { func (m *Help_Link) Reset() { *m = Help_Link{} } func (m *Help_Link) String() string { return proto.CompactTextString(m) } func (*Help_Link) ProtoMessage() {} -func (*Help_Link) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6, 0} } +func (*Help_Link) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7, 0} } func (m *Help_Link) GetDescription() string { if m != nil { @@ -351,7 +418,7 @@ type LocalizedMessage struct { func (m *LocalizedMessage) Reset() { *m = LocalizedMessage{} } func (m *LocalizedMessage) String() string { return proto.CompactTextString(m) } func (*LocalizedMessage) ProtoMessage() {} -func (*LocalizedMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } +func (*LocalizedMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } func (m *LocalizedMessage) GetLocale() string { if m != nil { @@ -372,6 +439,8 @@ func init() { proto.RegisterType((*DebugInfo)(nil), "google.rpc.DebugInfo") proto.RegisterType((*QuotaFailure)(nil), "google.rpc.QuotaFailure") proto.RegisterType((*QuotaFailure_Violation)(nil), "google.rpc.QuotaFailure.Violation") + proto.RegisterType((*PreconditionFailure)(nil), "google.rpc.PreconditionFailure") + proto.RegisterType((*PreconditionFailure_Violation)(nil), "google.rpc.PreconditionFailure.Violation") proto.RegisterType((*BadRequest)(nil), "google.rpc.BadRequest") proto.RegisterType((*BadRequest_FieldViolation)(nil), "google.rpc.BadRequest.FieldViolation") proto.RegisterType((*RequestInfo)(nil), "google.rpc.RequestInfo") @@ -384,40 +453,43 @@ func init() { func init() { proto.RegisterFile("google/rpc/error_details.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 551 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x94, 0xc1, 0x6f, 0xd3, 0x3e, - 0x14, 0xc7, 0x95, 0x75, 0xdb, 0x4f, 0x79, 0xed, 0x6f, 0x94, 0x08, 0x50, 0xa9, 0x04, 0x2a, 0x41, - 0x48, 0x95, 0x90, 0x52, 0x69, 0xdc, 0xc6, 0x01, 0xa9, 0x64, 0x5b, 0x27, 0x0d, 0x28, 0x11, 0xe2, - 0xc0, 0x25, 0x72, 0x93, 0xd7, 0xc8, 0xd4, 0x8d, 0x83, 0xed, 0x0c, 0x95, 0xbf, 0x82, 0x3b, 0x37, - 0x4e, 0xfc, 0x99, 0xc8, 0xb1, 0xbd, 0xa6, 0xeb, 0x85, 0x5b, 0xbe, 0xcf, 0x1f, 0x7f, 0xf3, 0x7d, - 0x89, 0x9f, 0xe1, 0x69, 0xc1, 0x79, 0xc1, 0x70, 0x22, 0xaa, 0x6c, 0x82, 0x42, 0x70, 0x91, 0xe6, - 0xa8, 0x08, 0x65, 0x32, 0xaa, 0x04, 0x57, 0x3c, 0x00, 0xb3, 0x1e, 0x89, 0x2a, 0x1b, 0x3a, 0xb6, - 0x59, 0x59, 0xd4, 0xcb, 0x49, 0x5e, 0x0b, 0xa2, 0x28, 0x2f, 0x0d, 0x1b, 0x5e, 0x82, 0x9f, 0xa0, - 0x12, 0x9b, 0xab, 0x72, 0xc9, 0x83, 0x33, 0xe8, 0x0a, 0x2d, 0xd2, 0x1c, 0x19, 0xd9, 0x0c, 0xbc, - 0x91, 0x37, 0xee, 0x9e, 0x3e, 0x8e, 0xac, 0x9d, 0xb3, 0x88, 0x62, 0x6b, 0x91, 0x40, 0x43, 0xc7, - 0x1a, 0x0e, 0x67, 0xe0, 0xc7, 0xb8, 0xa8, 0x8b, 0xc6, 0xe8, 0x39, 0xfc, 0x2f, 0x15, 0xc9, 0x56, - 0x29, 0x96, 0x4a, 0x50, 0x94, 0x03, 0x6f, 0xd4, 0x19, 0xfb, 0x49, 0xaf, 0x29, 0x9e, 0x9b, 0x5a, - 0xf0, 0x08, 0x8e, 0x4d, 0xee, 0xc1, 0xc1, 0xc8, 0x1b, 0xfb, 0x89, 0x55, 0xe1, 0x2f, 0x0f, 0x7a, - 0x1f, 0x6b, 0xae, 0xc8, 0x05, 0xa1, 0xac, 0x16, 0x18, 0x4c, 0x01, 0x6e, 0x28, 0x67, 0xcd, 0x3b, - 0x8d, 0x55, 0xf7, 0x34, 0x8c, 0xb6, 0x4d, 0x46, 0x6d, 0x3a, 0xfa, 0xec, 0xd0, 0xa4, 0xb5, 0x6b, - 0x78, 0x09, 0xfe, 0xed, 0x42, 0x30, 0x80, 0xff, 0x64, 0xbd, 0xf8, 0x8a, 0x99, 0x6a, 0x7a, 0xf4, - 0x13, 0x27, 0x83, 0x11, 0x74, 0x73, 0x94, 0x99, 0xa0, 0x95, 0x06, 0x6d, 0xb0, 0x76, 0x29, 0xfc, - 0xe3, 0x01, 0x4c, 0x49, 0x9e, 0xe0, 0xb7, 0x1a, 0xa5, 0x0a, 0xe6, 0xd0, 0x5f, 0x52, 0x64, 0x79, - 0xba, 0x97, 0xf0, 0x45, 0x3b, 0xe1, 0x76, 0x47, 0x74, 0xa1, 0xf1, 0x6d, 0xc8, 0x7b, 0xcb, 0x1d, - 0x2d, 0x87, 0x33, 0x38, 0xd9, 0x45, 0x82, 0x07, 0x70, 0xd4, 0x40, 0x36, 0xac, 0x11, 0xff, 0x10, - 0xf5, 0x03, 0x74, 0xed, 0x4b, 0x9b, 0x9f, 0xf2, 0x04, 0x40, 0x18, 0x99, 0x52, 0xe7, 0xe5, 0xdb, - 0xca, 0x55, 0x1e, 0x3c, 0x83, 0x9e, 0x44, 0x71, 0x43, 0xcb, 0x22, 0xcd, 0x89, 0x22, 0xce, 0xd0, - 0xd6, 0x62, 0xa2, 0x48, 0xf8, 0xd3, 0x83, 0x5e, 0x82, 0x92, 0xd7, 0x22, 0x43, 0xf7, 0x9f, 0x85, - 0xd5, 0xa9, 0xda, 0x54, 0x68, 0x5d, 0x7b, 0xae, 0xf8, 0x69, 0x53, 0xe1, 0x0e, 0x54, 0x92, 0x35, - 0x5a, 0xe7, 0x5b, 0xe8, 0x3d, 0x59, 0xa3, 0xee, 0x91, 0x7f, 0x2f, 0x51, 0x0c, 0x3a, 0xa6, 0xc7, - 0x46, 0xdc, 0xed, 0xf1, 0x70, 0xbf, 0x47, 0x0e, 0x87, 0x33, 0x64, 0x55, 0xf0, 0x12, 0x8e, 0x18, - 0x2d, 0x57, 0xee, 0xe3, 0x3f, 0x6c, 0x7f, 0x7c, 0x0d, 0x44, 0xd7, 0xb4, 0x5c, 0x25, 0x86, 0x19, - 0x9e, 0xc1, 0xa1, 0x96, 0x77, 0xed, 0xbd, 0x3d, 0xfb, 0xa0, 0x0f, 0x9d, 0x5a, 0xb8, 0x03, 0xaa, - 0x1f, 0xc3, 0x18, 0xfa, 0xd7, 0x3c, 0x23, 0x8c, 0xfe, 0xc0, 0xfc, 0x1d, 0x4a, 0x49, 0x0a, 0xd4, - 0x27, 0x99, 0xe9, 0x9a, 0xeb, 0xdf, 0x2a, 0x7d, 0xce, 0xd6, 0x06, 0xb1, 0x0e, 0x4e, 0x4e, 0x19, - 0x9c, 0x64, 0x7c, 0xdd, 0x0a, 0x39, 0xbd, 0x7f, 0xae, 0x27, 0x39, 0x36, 0x83, 0x3c, 0xd7, 0xa3, - 0x36, 0xf7, 0xbe, 0xbc, 0xb1, 0x40, 0xc1, 0x19, 0x29, 0x8b, 0x88, 0x8b, 0x62, 0x52, 0x60, 0xd9, - 0x0c, 0xe2, 0xc4, 0x2c, 0x91, 0x8a, 0x4a, 0x77, 0x11, 0xd8, 0x5b, 0xe0, 0xf5, 0xf6, 0xf1, 0xf7, - 0x41, 0x27, 0x99, 0xbf, 0x5d, 0x1c, 0x37, 0x3b, 0x5e, 0xfd, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xc0, - 0x5e, 0xc6, 0x6f, 0x39, 0x04, 0x00, 0x00, + // 595 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xcd, 0x6e, 0xd3, 0x4c, + 0x14, 0x95, 0x9b, 0xb4, 0x9f, 0x7c, 0x93, 0xaf, 0x14, 0xf3, 0xa3, 0x10, 0x09, 0x14, 0x8c, 0x90, + 0x8a, 0x90, 0x1c, 0xa9, 0xec, 0xca, 0x02, 0x29, 0xb8, 0x7f, 0x52, 0x81, 0x60, 0x21, 0x16, 0xb0, + 0xb0, 0x26, 0xf6, 0x8d, 0x35, 0x74, 0xe2, 0x31, 0x33, 0xe3, 0xa2, 0xf0, 0x14, 0xec, 0xd9, 0xb1, + 0xe2, 0x25, 0x78, 0x37, 0x34, 0x9e, 0x99, 0xc6, 0x6d, 0x0a, 0x62, 0x37, 0xe7, 0xcc, 0x99, 0xe3, + 0x73, 0xaf, 0xae, 0x2f, 0x3c, 0x28, 0x38, 0x2f, 0x18, 0x8e, 0x45, 0x95, 0x8d, 0x51, 0x08, 0x2e, + 0xd2, 0x1c, 0x15, 0xa1, 0x4c, 0x46, 0x95, 0xe0, 0x8a, 0x07, 0x60, 0xee, 0x23, 0x51, 0x65, 0x43, + 0xa7, 0x6d, 0x6e, 0x66, 0xf5, 0x7c, 0x9c, 0xd7, 0x82, 0x28, 0xca, 0x4b, 0xa3, 0x0d, 0x8f, 0xc0, + 0x4f, 0x50, 0x89, 0xe5, 0x49, 0x39, 0xe7, 0xc1, 0x3e, 0xf4, 0x84, 0x06, 0x69, 0x8e, 0x8c, 0x2c, + 0x07, 0xde, 0xc8, 0xdb, 0xed, 0xed, 0xdd, 0x8b, 0xac, 0x9d, 0xb3, 0x88, 0x62, 0x6b, 0x91, 0x40, + 0xa3, 0x8e, 0xb5, 0x38, 0x3c, 0x06, 0x3f, 0xc6, 0x59, 0x5d, 0x34, 0x46, 0x8f, 0xe0, 0x7f, 0xa9, + 0x48, 0x76, 0x96, 0x62, 0xa9, 0x04, 0x45, 0x39, 0xf0, 0x46, 0x9d, 0x5d, 0x3f, 0xe9, 0x37, 0xe4, + 0x81, 0xe1, 0x82, 0xbb, 0xb0, 0x65, 0x72, 0x0f, 0x36, 0x46, 0xde, 0xae, 0x9f, 0x58, 0x14, 0x7e, + 0xf7, 0xa0, 0xff, 0xb6, 0xe6, 0x8a, 0x1c, 0x12, 0xca, 0x6a, 0x81, 0xc1, 0x04, 0xe0, 0x9c, 0x72, + 0xd6, 0x7c, 0xd3, 0x58, 0xf5, 0xf6, 0xc2, 0x68, 0x55, 0x64, 0xd4, 0x56, 0x47, 0xef, 0x9d, 0x34, + 0x69, 0xbd, 0x1a, 0x1e, 0x81, 0x7f, 0x71, 0x11, 0x0c, 0xe0, 0x3f, 0x59, 0xcf, 0x3e, 0x61, 0xa6, + 0x9a, 0x1a, 0xfd, 0xc4, 0xc1, 0x60, 0x04, 0xbd, 0x1c, 0x65, 0x26, 0x68, 0xa5, 0x85, 0x36, 0x58, + 0x9b, 0x0a, 0x7f, 0x79, 0x70, 0x6b, 0x2a, 0x30, 0xe3, 0x65, 0x4e, 0x35, 0xe1, 0x42, 0x9e, 0x5c, + 0x13, 0xf2, 0x49, 0x3b, 0xe4, 0x35, 0x8f, 0xfe, 0x90, 0xf5, 0x63, 0x3b, 0x6b, 0x00, 0x5d, 0xb5, + 0xac, 0xd0, 0x06, 0x6d, 0xce, 0xed, 0xfc, 0x1b, 0x7f, 0xcd, 0xdf, 0x59, 0xcf, 0xff, 0xd3, 0x03, + 0x98, 0x90, 0x3c, 0xc1, 0xcf, 0x35, 0x4a, 0x15, 0x4c, 0x61, 0x67, 0x4e, 0x91, 0xe5, 0xe9, 0x5a, + 0xf8, 0xc7, 0xed, 0xf0, 0xab, 0x17, 0xd1, 0xa1, 0x96, 0xaf, 0x82, 0xdf, 0x98, 0x5f, 0xc2, 0x72, + 0x78, 0x0c, 0xdb, 0x97, 0x25, 0xc1, 0x6d, 0xd8, 0x6c, 0x44, 0xb6, 0x06, 0x03, 0xfe, 0xa1, 0xd5, + 0x6f, 0xa0, 0x67, 0x3f, 0xda, 0x0c, 0xd5, 0x7d, 0x00, 0x61, 0x60, 0x4a, 0x9d, 0x97, 0x6f, 0x99, + 0x93, 0x3c, 0x78, 0x08, 0x7d, 0x89, 0xe2, 0x9c, 0x96, 0x45, 0x9a, 0x13, 0x45, 0x9c, 0xa1, 0xe5, + 0x62, 0xa2, 0x48, 0xf8, 0xcd, 0x83, 0x7e, 0x82, 0x92, 0xd7, 0x22, 0x43, 0x37, 0xa7, 0xc2, 0xe2, + 0xb4, 0xd5, 0xe5, 0xbe, 0x23, 0xdf, 0xe9, 0x6e, 0xb7, 0x45, 0x25, 0x59, 0xa0, 0x75, 0xbe, 0x10, + 0xbd, 0x26, 0x0b, 0xd4, 0x35, 0xf2, 0x2f, 0x25, 0x0a, 0xdb, 0x72, 0x03, 0xae, 0xd6, 0xd8, 0x5d, + 0xaf, 0x91, 0x43, 0xf7, 0x18, 0x59, 0x15, 0x3c, 0x85, 0x4d, 0x46, 0xcb, 0x33, 0xd7, 0xfc, 0x3b, + 0xed, 0xe6, 0x6b, 0x41, 0x74, 0x4a, 0xcb, 0xb3, 0xc4, 0x68, 0x86, 0xfb, 0xd0, 0xd5, 0xf0, 0xaa, + 0xbd, 0xb7, 0x66, 0x1f, 0xec, 0x40, 0xa7, 0x16, 0xee, 0x07, 0xd3, 0xc7, 0x30, 0x86, 0x9d, 0x53, + 0x9e, 0x11, 0x46, 0xbf, 0x62, 0xfe, 0x0a, 0xa5, 0x24, 0x05, 0xea, 0x3f, 0x91, 0x69, 0xce, 0xd5, + 0x6f, 0x91, 0x9e, 0xb3, 0x85, 0x91, 0xb8, 0x39, 0xb3, 0x70, 0xc2, 0x60, 0x3b, 0xe3, 0x8b, 0x56, + 0xc8, 0xc9, 0xcd, 0x03, 0xbd, 0x89, 0x62, 0xb3, 0x88, 0xa6, 0x7a, 0x55, 0x4c, 0xbd, 0x0f, 0x2f, + 0xac, 0xa0, 0xe0, 0x8c, 0x94, 0x45, 0xc4, 0x45, 0x31, 0x2e, 0xb0, 0x6c, 0x16, 0xc9, 0xd8, 0x5c, + 0x91, 0x8a, 0x4a, 0xb7, 0xc8, 0xec, 0x16, 0x7b, 0xbe, 0x3a, 0xfe, 0xd8, 0xe8, 0x24, 0xd3, 0x97, + 0xb3, 0xad, 0xe6, 0xc5, 0xb3, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x90, 0x15, 0x46, 0x2d, 0xf9, + 0x04, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/rpc/status/status.pb.go b/vendor/google.golang.org/genproto/googleapis/rpc/status/status.pb.go index ec26060..8867ae7 100644 --- a/vendor/google.golang.org/genproto/googleapis/rpc/status/status.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/rpc/status/status.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/rpc/status.proto -// DO NOT EDIT! /* Package status is a generated protocol buffer package. @@ -46,7 +45,7 @@ const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package // error message is needed, put the localized message in the error details or // localize it in the client. The optional error details may contain arbitrary // information about the error. There is a predefined set of error detail types -// in the package `google.rpc` which can be used for common error conditions. +// in the package `google.rpc` that can be used for common error conditions. // // # Language mapping // @@ -69,7 +68,7 @@ const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package // errors. // // - Workflow errors. A typical workflow has multiple steps. Each step may -// have a `Status` message for error reporting purpose. +// have a `Status` message for error reporting. // // - Batch operations. If a client uses batch request and batch response, the // `Status` message should be used directly inside batch response, one for @@ -88,8 +87,8 @@ type Status struct { // user-facing error message should be localized and sent in the // [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client. Message string `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` - // A list of messages that carry the error details. There will be a - // common set of message types for APIs to use. + // A list of messages that carry the error details. There is a common set of + // message types for APIs to use. Details []*google_protobuf.Any `protobuf:"bytes,3,rep,name=details" json:"details,omitempty"` } diff --git a/vendor/google.golang.org/genproto/googleapis/spanner/admin/database/v1/spanner_database_admin.pb.go b/vendor/google.golang.org/genproto/googleapis/spanner/admin/database/v1/spanner_database_admin.pb.go index c9ef3bd..93f12e1 100644 --- a/vendor/google.golang.org/genproto/googleapis/spanner/admin/database/v1/spanner_database_admin.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/spanner/admin/database/v1/spanner_database_admin.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/spanner/admin/database/v1/spanner_database_admin.proto -// DO NOT EDIT! /* Package database is a generated protocol buffer package. @@ -27,7 +26,6 @@ import proto "github.com/golang/protobuf/proto" import fmt "fmt" import math "math" import _ "google.golang.org/genproto/googleapis/api/annotations" -import _ "google.golang.org/genproto/googleapis/api/serviceconfig" import google_iam_v11 "google.golang.org/genproto/googleapis/iam/v1" import google_iam_v1 "google.golang.org/genproto/googleapis/iam/v1" import google_longrunning "google.golang.org/genproto/googleapis/longrunning" @@ -187,6 +185,8 @@ type CreateDatabaseRequest struct { // Required. A `CREATE DATABASE` statement, which specifies the ID of the // new database. The database ID must conform to the regular expression // `[a-z][a-z0-9_\-]*[a-z0-9]` and be between 2 and 30 characters in length. + // If the database ID is a reserved word or if it contains a hyphen, the + // database ID must be enclosed in backticks (`` ` ``). CreateStatement string `protobuf:"bytes,2,opt,name=create_statement,json=createStatement" json:"create_statement,omitempty"` // An optional list of DDL statements to run inside the newly created // database. Statements can create tables, indexes, etc. These @@ -853,69 +853,70 @@ func init() { } var fileDescriptor0 = []byte{ - // 1020 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x96, 0x4d, 0x6f, 0x1b, 0x45, - 0x18, 0xc7, 0x19, 0xa7, 0xa9, 0x92, 0x27, 0x2f, 0x4d, 0x06, 0x1c, 0xb9, 0x5b, 0x5a, 0xcc, 0x82, + // 1033 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x96, 0xcf, 0x6f, 0x1b, 0x45, + 0x14, 0xc7, 0x19, 0xa7, 0xa9, 0x92, 0x17, 0x27, 0x75, 0x06, 0x1c, 0xb9, 0x5b, 0x5a, 0xcc, 0x82, 0x2a, 0xd7, 0x12, 0xbb, 0xd8, 0x69, 0x48, 0x30, 0x0a, 0x22, 0xb5, 0x5d, 0xd7, 0x12, 0xb4, 0x96, - 0xed, 0x22, 0xc1, 0xc5, 0x9a, 0xd8, 0xc3, 0xb2, 0xc5, 0xbb, 0xb3, 0xec, 0x8c, 0xab, 0xb6, 0xa8, - 0x17, 0x24, 0x0e, 0x9c, 0x01, 0x89, 0x1b, 0x88, 0x03, 0x07, 0x4e, 0x9c, 0x40, 0xe2, 0xc8, 0x57, - 0xe0, 0x2b, 0xf0, 0x41, 0xd0, 0xcc, 0xee, 0xd8, 0xeb, 0x75, 0x12, 0xdb, 0x1c, 0x7a, 0xf3, 0x3e, - 0xaf, 0xbf, 0xe7, 0xd9, 0xf9, 0x8f, 0x17, 0x8e, 0x1d, 0xc6, 0x9c, 0x21, 0xb5, 0x79, 0x40, 0x7c, - 0x9f, 0x86, 0x36, 0x19, 0x78, 0xae, 0x6f, 0x0f, 0x88, 0x20, 0xa7, 0x84, 0x53, 0xfb, 0x71, 0x49, - 0x7b, 0x7a, 0xda, 0xd6, 0x53, 0x21, 0x56, 0x10, 0x32, 0xc1, 0x70, 0x3e, 0x4a, 0xb7, 0xe2, 0x20, - 0x2b, 0xf2, 0xe9, 0x50, 0xeb, 0x71, 0xc9, 0x78, 0x35, 0x6e, 0x40, 0x02, 0xd7, 0x26, 0xbe, 0xcf, - 0x04, 0x11, 0x2e, 0xf3, 0x79, 0x94, 0x6f, 0x64, 0x93, 0xde, 0x91, 0xf8, 0x3c, 0x36, 0xdf, 0x88, - 0xcd, 0x2e, 0xf1, 0x24, 0x82, 0x4b, 0xbc, 0x5e, 0xc0, 0x86, 0x6e, 0xff, 0x69, 0xec, 0x37, 0xa6, - 0xfd, 0x53, 0xbe, 0x37, 0x62, 0xdf, 0x90, 0xf9, 0x4e, 0x38, 0xf2, 0x7d, 0xd7, 0x77, 0x6c, 0x16, - 0xd0, 0x70, 0xaa, 0xef, 0xb5, 0x38, 0x48, 0x3d, 0x9d, 0x8e, 0x3e, 0xb3, 0xa9, 0x17, 0x08, 0x5d, - 0xe1, 0xb5, 0xb4, 0x53, 0xb8, 0x1e, 0xe5, 0x82, 0x78, 0x41, 0x14, 0x60, 0xfe, 0x84, 0x60, 0xad, - 0x16, 0xcf, 0x88, 0x31, 0x5c, 0xf2, 0x89, 0x47, 0x73, 0x28, 0x8f, 0x0a, 0xeb, 0x6d, 0xf5, 0x1b, - 0xdf, 0x85, 0x55, 0x2e, 0x88, 0xa0, 0xb9, 0x4c, 0x1e, 0x15, 0xb6, 0xcb, 0x6f, 0x5b, 0xf3, 0xd6, - 0x64, 0xe9, 0x72, 0x56, 0x47, 0xe6, 0xb5, 0xa3, 0x74, 0xf3, 0x10, 0x56, 0xd5, 0x33, 0xce, 0xc2, - 0x6e, 0xa7, 0x7b, 0xd2, 0xad, 0xf7, 0x1e, 0xde, 0xef, 0xb4, 0xea, 0xd5, 0xe6, 0xdd, 0x66, 0xbd, - 0xb6, 0xf3, 0x12, 0xde, 0x84, 0xb5, 0x6a, 0xbb, 0x7e, 0xd2, 0x6d, 0xde, 0x6f, 0xec, 0x20, 0xbc, - 0x0e, 0xab, 0xed, 0xfa, 0x49, 0xed, 0x93, 0x9d, 0x8c, 0xf9, 0x08, 0x5e, 0xf9, 0xd0, 0xe5, 0x42, - 0x57, 0xe5, 0x6d, 0xfa, 0xe5, 0x88, 0x72, 0x81, 0xf7, 0xe0, 0x72, 0x40, 0x42, 0xea, 0x8b, 0x18, - 0x37, 0x7e, 0xc2, 0xd7, 0x60, 0x3d, 0x20, 0x0e, 0xed, 0x71, 0xf7, 0x19, 0xcd, 0xad, 0xe4, 0x51, - 0x61, 0xb5, 0xbd, 0x26, 0x0d, 0x1d, 0xf7, 0x19, 0xc5, 0xd7, 0x01, 0x94, 0x53, 0xb0, 0x2f, 0xa8, - 0x9f, 0xbb, 0xa4, 0x12, 0x55, 0x78, 0x57, 0x1a, 0xcc, 0x6f, 0x11, 0x64, 0x53, 0xcd, 0x78, 0xc0, - 0x7c, 0x4e, 0xf1, 0x3d, 0x58, 0xd7, 0x33, 0xf2, 0x1c, 0xca, 0xaf, 0x14, 0x36, 0xca, 0xc5, 0xc5, - 0x57, 0xd1, 0x9e, 0x24, 0xe3, 0x9b, 0x70, 0xc5, 0xa7, 0x4f, 0x44, 0x2f, 0xc1, 0x91, 0x51, 0x1c, - 0x5b, 0xd2, 0xdc, 0x1a, 0xb3, 0x7c, 0x83, 0x20, 0x5b, 0x0d, 0x29, 0x11, 0x74, 0x5c, 0x65, 0xce, - 0xe4, 0xb7, 0x60, 0xa7, 0xaf, 0x12, 0x7a, 0x6a, 0xe5, 0x9e, 0x8c, 0x88, 0x4a, 0x5f, 0x89, 0xec, - 0x1d, 0x6d, 0x96, 0xa1, 0xf4, 0x89, 0x08, 0xc9, 0x24, 0x92, 0xe7, 0x56, 0xf2, 0x2b, 0x32, 0x54, - 0xd9, 0xc7, 0x91, 0xdc, 0xbc, 0x0d, 0x7b, 0xd3, 0x18, 0x1f, 0x51, 0x41, 0xe4, 0x38, 0xd8, 0x80, - 0x35, 0x3d, 0x56, 0x4c, 0x32, 0x7e, 0x36, 0x0b, 0x80, 0x1b, 0x54, 0xa4, 0xc9, 0xcf, 0x38, 0x60, - 0xe6, 0x53, 0xc8, 0x3d, 0x0c, 0x06, 0x89, 0xfa, 0xb5, 0xc1, 0x50, 0xc7, 0x5f, 0xd0, 0x01, 0xdf, - 0x00, 0x48, 0xc0, 0x67, 0x14, 0x7c, 0xc2, 0x82, 0x5f, 0x87, 0xcd, 0xb1, 0x56, 0x7a, 0xee, 0x40, - 0x1d, 0x85, 0xf5, 0xf6, 0xc6, 0xd8, 0xd6, 0x1c, 0x98, 0x3f, 0x23, 0xb8, 0x3a, 0xd3, 0x7b, 0x91, - 0xf1, 0xe6, 0x36, 0x6f, 0xc0, 0x6e, 0x9f, 0x79, 0x9e, 0x2b, 0x7a, 0x63, 0xc1, 0x45, 0x0b, 0xde, - 0x28, 0x1b, 0xfa, 0xd8, 0x68, 0x4d, 0x5a, 0x5d, 0x1d, 0xd2, 0xde, 0x89, 0x92, 0xc6, 0x06, 0x6e, - 0x96, 0xe0, 0xe5, 0x5a, 0xc8, 0x82, 0xf4, 0x22, 0x2f, 0x5a, 0xfd, 0x3e, 0x64, 0x13, 0xab, 0x5f, - 0x6c, 0x9b, 0xe6, 0x11, 0xec, 0xa5, 0x93, 0xe2, 0x93, 0x3f, 0x3d, 0x2a, 0x4a, 0x8f, 0x5a, 0xfe, - 0x61, 0x13, 0xb6, 0x74, 0xde, 0x89, 0x54, 0x00, 0xfe, 0x13, 0xc1, 0xd6, 0x94, 0x8a, 0xf0, 0x3b, - 0xf3, 0xa5, 0x72, 0x96, 0xc6, 0x8d, 0xc3, 0xa5, 0xf3, 0x22, 0x68, 0xf3, 0xe0, 0xeb, 0x7f, 0xfe, - 0xfd, 0x2e, 0x63, 0xe3, 0xb7, 0xe4, 0x9d, 0xfa, 0x55, 0xa4, 0x8f, 0xe3, 0x20, 0x64, 0x8f, 0x68, - 0x5f, 0x70, 0xbb, 0x68, 0xbb, 0x3e, 0x17, 0xc4, 0xef, 0x53, 0x6e, 0x17, 0x9f, 0xdb, 0x13, 0x6d, - 0xfe, 0x82, 0x60, 0x7b, 0xfa, 0xb0, 0xe3, 0x05, 0x10, 0xce, 0x54, 0xa9, 0x71, 0x5d, 0x27, 0x26, - 0x6e, 0x6f, 0xeb, 0x81, 0x3e, 0x7d, 0xe6, 0x91, 0x22, 0x2c, 0x9b, 0xcb, 0x11, 0x56, 0x50, 0x11, - 0xff, 0x8a, 0x60, 0x23, 0xf1, 0xae, 0xf0, 0xed, 0xf9, 0x84, 0xb3, 0x52, 0x34, 0x96, 0xb8, 0xbd, - 0x52, 0xdb, 0x94, 0xaa, 0x3d, 0x87, 0x74, 0x02, 0x6a, 0x17, 0x9f, 0xe3, 0xdf, 0x11, 0xec, 0xce, - 0xc8, 0x0b, 0x57, 0xe6, 0x37, 0x3e, 0xef, 0x3e, 0x98, 0xb7, 0xd3, 0x0f, 0x14, 0x67, 0xa5, 0x7c, - 0xa0, 0x38, 0x75, 0xc5, 0x45, 0x58, 0xed, 0xc1, 0x60, 0x28, 0x77, 0xfb, 0x23, 0x82, 0xcd, 0xa4, - 0xde, 0xf0, 0xc1, 0x02, 0x6b, 0x9a, 0xd5, 0xa7, 0xb1, 0x37, 0x23, 0xf2, 0xba, 0xfc, 0x57, 0x36, - 0xdf, 0x55, 0x84, 0xfb, 0xc5, 0xd2, 0xd2, 0x84, 0xf8, 0x6f, 0x04, 0xdb, 0xd3, 0x12, 0x5d, 0xe4, - 0x6c, 0x9e, 0x79, 0x13, 0x18, 0x47, 0xcb, 0x27, 0xc6, 0xc2, 0x3a, 0x56, 0x03, 0x1c, 0xe2, 0xff, - 0xb7, 0x62, 0xfc, 0x3d, 0x82, 0xcd, 0x0e, 0x15, 0x4d, 0xe2, 0xb5, 0xd4, 0x87, 0x0e, 0x36, 0x35, - 0x89, 0x4b, 0x3c, 0xd9, 0x36, 0xe9, 0xd4, 0xb4, 0xd9, 0x54, 0x4c, 0xe4, 0x35, 0x9b, 0x0a, 0xa5, - 0x6a, 0xbe, 0xaf, 0x50, 0x42, 0xca, 0xd9, 0x28, 0xec, 0x2f, 0x84, 0x52, 0xe1, 0x89, 0x2e, 0xf2, - 0xb5, 0x4b, 0xac, 0xc6, 0x45, 0x58, 0x8d, 0x17, 0x82, 0xe5, 0xa4, 0xb0, 0xfe, 0x42, 0x80, 0xbb, - 0x94, 0x2b, 0x23, 0x0d, 0x3d, 0x97, 0x73, 0xf9, 0xdd, 0x87, 0x0b, 0xa9, 0xc6, 0xb3, 0x21, 0x1a, - 0xf1, 0xd6, 0x02, 0x91, 0xf1, 0x8b, 0x7d, 0xa0, 0xb0, 0x9b, 0x66, 0x6d, 0x79, 0x6c, 0x31, 0x53, - 0xb5, 0x82, 0x8a, 0x77, 0xfe, 0x40, 0xf0, 0x66, 0x9f, 0x79, 0x73, 0x4f, 0xda, 0x9d, 0xab, 0x9d, - 0xc8, 0x35, 0xf5, 0x27, 0xd2, 0x92, 0xba, 0x69, 0xa1, 0x4f, 0xef, 0xc5, 0xe9, 0x0e, 0x1b, 0x12, - 0xdf, 0xb1, 0x58, 0xe8, 0xd8, 0x0e, 0xf5, 0x95, 0xaa, 0xec, 0xc8, 0x45, 0x02, 0x97, 0x9f, 0xff, - 0xcd, 0xff, 0x9e, 0xfe, 0xfd, 0x5b, 0xe6, 0x66, 0x23, 0x2a, 0x55, 0x1d, 0xb2, 0xd1, 0xc0, 0x8a, - 0x9b, 0x5a, 0xaa, 0xdb, 0xe4, 0x9b, 0xf5, 0xe3, 0xd2, 0xe9, 0x65, 0x55, 0x7d, 0xff, 0xbf, 0x00, - 0x00, 0x00, 0xff, 0xff, 0xdc, 0xc4, 0xc8, 0x83, 0x50, 0x0c, 0x00, 0x00, + 0xed, 0x56, 0x02, 0x59, 0xb2, 0x26, 0xf6, 0xb0, 0xda, 0xe2, 0xfd, 0xc1, 0xce, 0xb8, 0x6a, 0x8b, + 0x7a, 0x41, 0xe2, 0xc0, 0x19, 0x90, 0xb8, 0x81, 0x38, 0x70, 0xe0, 0xc4, 0x0d, 0x89, 0x23, 0x47, + 0xae, 0xfc, 0x01, 0x5c, 0xf8, 0x43, 0xd0, 0xcc, 0xee, 0xd8, 0xeb, 0x75, 0x12, 0xdb, 0x1c, 0xb8, + 0x79, 0xdf, 0xfb, 0xbe, 0x79, 0x9f, 0x79, 0x3b, 0xdf, 0xf1, 0xc2, 0xb1, 0xe5, 0x79, 0xd6, 0x88, + 0x9a, 0xcc, 0x27, 0xae, 0x4b, 0x03, 0x93, 0x0c, 0x1d, 0xdb, 0x35, 0x87, 0x84, 0x93, 0x53, 0xc2, + 0xa8, 0xf9, 0xa4, 0xa4, 0x32, 0x7d, 0x15, 0xeb, 0x4b, 0x89, 0xe1, 0x07, 0x1e, 0xf7, 0x70, 0x3e, + 0x2c, 0x37, 0x22, 0x91, 0x11, 0xe6, 0x94, 0xd4, 0x78, 0x52, 0xd2, 0x5e, 0x8d, 0x1a, 0x10, 0xdf, + 0x36, 0x89, 0xeb, 0x7a, 0x9c, 0x70, 0xdb, 0x73, 0x59, 0x58, 0xaf, 0xdd, 0x88, 0xb2, 0x36, 0x71, + 0x44, 0x2f, 0x9b, 0x38, 0x7d, 0xdf, 0x1b, 0xd9, 0x83, 0x67, 0x51, 0x5e, 0x9b, 0xcd, 0xcf, 0xe4, + 0xde, 0x88, 0x72, 0x23, 0xcf, 0xb5, 0x82, 0xb1, 0xeb, 0xda, 0xae, 0x65, 0x7a, 0x3e, 0x0d, 0x66, + 0x1a, 0x5c, 0x8b, 0x44, 0xf2, 0xe9, 0x74, 0xfc, 0xa9, 0x49, 0x1d, 0x9f, 0xab, 0x15, 0x5e, 0x4b, + 0x26, 0xb9, 0xed, 0x50, 0xc6, 0x89, 0xe3, 0x87, 0x02, 0xfd, 0x07, 0x04, 0x1b, 0xb5, 0x68, 0x33, + 0x18, 0xc3, 0x25, 0x97, 0x38, 0x34, 0x87, 0xf2, 0xa8, 0xb0, 0xd9, 0x96, 0xbf, 0xf1, 0x5d, 0x58, + 0x67, 0x9c, 0x70, 0x9a, 0x4b, 0xe5, 0x51, 0x61, 0xa7, 0xfc, 0xb6, 0xb1, 0x68, 0x1e, 0x86, 0x5a, + 0xce, 0xe8, 0x88, 0xba, 0x76, 0x58, 0xae, 0x1f, 0xc2, 0xba, 0x7c, 0xc6, 0x59, 0xd8, 0xed, 0x74, + 0x4f, 0xba, 0xf5, 0xfe, 0xc3, 0xfb, 0x9d, 0x56, 0xbd, 0xda, 0xbc, 0xdb, 0xac, 0xd7, 0x32, 0x2f, + 0xe1, 0x34, 0x6c, 0x54, 0xdb, 0xf5, 0x93, 0x6e, 0xf3, 0x7e, 0x23, 0x83, 0xf0, 0x26, 0xac, 0xb7, + 0xeb, 0x27, 0xb5, 0x8f, 0x33, 0x29, 0xfd, 0x31, 0xbc, 0xf2, 0xa1, 0xcd, 0xb8, 0x5a, 0x95, 0xb5, + 0xe9, 0xe7, 0x63, 0xca, 0x38, 0xde, 0x83, 0xcb, 0x3e, 0x09, 0xa8, 0xcb, 0x23, 0xdc, 0xe8, 0x09, + 0x5f, 0x83, 0x4d, 0x9f, 0x58, 0xb4, 0xcf, 0xec, 0xe7, 0x34, 0xb7, 0x96, 0x47, 0x85, 0xf5, 0xf6, + 0x86, 0x08, 0x74, 0xec, 0xe7, 0x14, 0x5f, 0x07, 0x90, 0x49, 0xee, 0x7d, 0x46, 0xdd, 0xdc, 0x25, + 0x59, 0x28, 0xe5, 0x5d, 0x11, 0xd0, 0xbf, 0x46, 0x90, 0x4d, 0x34, 0x63, 0xbe, 0xe7, 0x32, 0x8a, + 0xef, 0xc1, 0xa6, 0xda, 0x23, 0xcb, 0xa1, 0xfc, 0x5a, 0x61, 0xab, 0x5c, 0x5c, 0x7e, 0x14, 0xed, + 0x69, 0x31, 0xbe, 0x09, 0x57, 0x5c, 0xfa, 0x94, 0xf7, 0x63, 0x1c, 0x29, 0xc9, 0xb1, 0x2d, 0xc2, + 0xad, 0x09, 0xcb, 0x57, 0x08, 0xb2, 0xd5, 0x80, 0x12, 0x4e, 0x27, 0xab, 0x2c, 0xd8, 0xf9, 0x2d, + 0xc8, 0x0c, 0x64, 0x41, 0x5f, 0x8e, 0xdc, 0x11, 0x8a, 0x70, 0xe9, 0x2b, 0x61, 0xbc, 0xa3, 0xc2, + 0x42, 0x4a, 0x9f, 0xf2, 0x80, 0x4c, 0x95, 0x2c, 0xb7, 0x96, 0x5f, 0x13, 0x52, 0x19, 0x9f, 0x28, + 0x99, 0x7e, 0x1b, 0xf6, 0x66, 0x31, 0x3e, 0xa2, 0x9c, 0x88, 0xed, 0x60, 0x0d, 0x36, 0xd4, 0xb6, + 0x22, 0x92, 0xc9, 0xb3, 0x5e, 0x00, 0xdc, 0xa0, 0x3c, 0x49, 0x7e, 0xc6, 0x01, 0xd3, 0x9f, 0x41, + 0xee, 0xa1, 0x3f, 0x8c, 0xad, 0x5f, 0x1b, 0x8e, 0x94, 0xfe, 0x82, 0x0e, 0xf8, 0x06, 0x40, 0x0c, + 0x3e, 0x25, 0xe1, 0x63, 0x11, 0xfc, 0x3a, 0xa4, 0x27, 0x5e, 0xe9, 0xdb, 0x43, 0x79, 0x14, 0x36, + 0xdb, 0x5b, 0x93, 0x58, 0x73, 0xa8, 0xff, 0x88, 0xe0, 0xea, 0x5c, 0xef, 0x65, 0xb6, 0xb7, 0xb0, + 0x79, 0x03, 0x76, 0x07, 0x9e, 0xe3, 0xd8, 0xbc, 0x3f, 0x31, 0x5c, 0x38, 0xe0, 0xad, 0xb2, 0xa6, + 0x8e, 0x8d, 0xf2, 0xa4, 0xd1, 0x55, 0x92, 0x76, 0x26, 0x2c, 0x9a, 0x04, 0x98, 0x5e, 0x82, 0x97, + 0x6b, 0x81, 0xe7, 0x27, 0x07, 0x79, 0xd1, 0xe8, 0xf7, 0x21, 0x1b, 0x1b, 0xfd, 0x72, 0xd3, 0xd4, + 0x8f, 0x60, 0x2f, 0x59, 0x14, 0x9d, 0xfc, 0xd9, 0xad, 0xa2, 0xe4, 0x56, 0xcb, 0xdf, 0xa5, 0x61, + 0x5b, 0xd5, 0x9d, 0x08, 0x07, 0xe0, 0xdf, 0x10, 0x6c, 0xcf, 0xb8, 0x08, 0xbf, 0xb3, 0xd8, 0x2a, + 0x67, 0x79, 0x5c, 0x3b, 0x5c, 0xb9, 0x2e, 0x84, 0xd6, 0x0f, 0xbe, 0xfc, 0xeb, 0x9f, 0x6f, 0x52, + 0x26, 0x7e, 0x4b, 0xdc, 0xa9, 0x5f, 0x84, 0xfe, 0x38, 0xf6, 0x03, 0xef, 0x31, 0x1d, 0x70, 0x66, + 0x16, 0x4d, 0xdb, 0x65, 0x9c, 0xb8, 0x03, 0xca, 0xcc, 0xe2, 0x0b, 0x73, 0xea, 0xcd, 0x9f, 0x10, + 0xec, 0xcc, 0x1e, 0x76, 0xbc, 0x04, 0xc2, 0x99, 0x2e, 0xd5, 0xae, 0xab, 0xc2, 0xd8, 0xed, 0x6d, + 0x3c, 0x50, 0xa7, 0x4f, 0x3f, 0x92, 0x84, 0x65, 0x7d, 0x35, 0xc2, 0x0a, 0x2a, 0xe2, 0x9f, 0x11, + 0x6c, 0xc5, 0xde, 0x15, 0xbe, 0xbd, 0x98, 0x70, 0xde, 0x8a, 0xda, 0x0a, 0xb7, 0x57, 0x62, 0x9a, + 0xc2, 0xb5, 0xe7, 0x90, 0x4e, 0x41, 0xcd, 0xe2, 0x0b, 0xfc, 0x2b, 0x82, 0xdd, 0x39, 0x7b, 0xe1, + 0xca, 0xe2, 0xc6, 0xe7, 0xdd, 0x07, 0x8b, 0x66, 0xfa, 0x81, 0xe4, 0xac, 0x94, 0x0f, 0x24, 0xa7, + 0x5a, 0x71, 0x19, 0x56, 0x73, 0x38, 0x1c, 0x89, 0xd9, 0x7e, 0x8f, 0x20, 0x1d, 0xf7, 0x1b, 0x3e, + 0x58, 0x62, 0x4c, 0xf3, 0xfe, 0xd4, 0xf6, 0xe6, 0x4c, 0x5e, 0x17, 0xff, 0xca, 0xfa, 0xbb, 0x92, + 0x70, 0xbf, 0x58, 0x5a, 0x99, 0x10, 0xff, 0x81, 0x60, 0x67, 0xd6, 0xa2, 0xcb, 0x9c, 0xcd, 0x33, + 0x6f, 0x02, 0xed, 0x68, 0xf5, 0xc2, 0xc8, 0x58, 0xc7, 0x72, 0x03, 0x87, 0xf8, 0xbf, 0x8d, 0x18, + 0x7f, 0x8b, 0x20, 0xdd, 0xa1, 0xbc, 0x49, 0x9c, 0x96, 0xfc, 0xd0, 0xc1, 0xba, 0x22, 0xb1, 0x89, + 0x23, 0xda, 0xc6, 0x93, 0x8a, 0x36, 0x9b, 0xd0, 0x84, 0x59, 0xbd, 0x29, 0x51, 0xaa, 0xfa, 0xfb, + 0x12, 0x25, 0xa0, 0xcc, 0x1b, 0x07, 0x83, 0xa5, 0x50, 0x2a, 0x2c, 0xd6, 0x45, 0xbc, 0x76, 0x81, + 0xd5, 0xb8, 0x08, 0xab, 0xf1, 0xbf, 0x60, 0x59, 0x09, 0xac, 0xdf, 0x11, 0xe0, 0x2e, 0x65, 0x32, + 0x48, 0x03, 0xc7, 0x66, 0x4c, 0x7c, 0xf7, 0xe1, 0x42, 0xa2, 0xf1, 0xbc, 0x44, 0x21, 0xde, 0x5a, + 0x42, 0x19, 0xbd, 0xd8, 0x07, 0x12, 0xbb, 0xa9, 0xd7, 0x56, 0xc7, 0xe6, 0x73, 0xab, 0x56, 0x50, + 0xf1, 0xce, 0xdf, 0x08, 0xde, 0x1c, 0x78, 0xce, 0xc2, 0x93, 0x76, 0xe7, 0x6a, 0x27, 0x4c, 0xcd, + 0xfc, 0x89, 0xb4, 0x84, 0x6f, 0x5a, 0xe8, 0x93, 0x7b, 0x51, 0xb9, 0xe5, 0x8d, 0x88, 0x6b, 0x19, + 0x5e, 0x60, 0x99, 0x16, 0x75, 0xa5, 0xab, 0xcc, 0x30, 0x45, 0x7c, 0x9b, 0x9d, 0xff, 0x71, 0xff, + 0x9e, 0xfa, 0xfd, 0x4b, 0xea, 0x66, 0x23, 0x5c, 0xaa, 0x3a, 0xf2, 0xc6, 0x43, 0x23, 0x6a, 0x6a, + 0xc8, 0x6e, 0xd3, 0x6f, 0xd6, 0x47, 0xa5, 0x3f, 0x95, 0xb0, 0x27, 0x85, 0xbd, 0x48, 0xd8, 0x93, + 0xc2, 0x9e, 0x12, 0xf6, 0x1e, 0x95, 0x4e, 0x2f, 0x4b, 0x8c, 0xfd, 0x7f, 0x03, 0x00, 0x00, 0xff, + 0xff, 0x1d, 0xbc, 0x89, 0x54, 0x62, 0x0c, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/spanner/admin/instance/v1/spanner_instance_admin.pb.go b/vendor/google.golang.org/genproto/googleapis/spanner/admin/instance/v1/spanner_instance_admin.pb.go index 0bcb338..aeff94a 100644 --- a/vendor/google.golang.org/genproto/googleapis/spanner/admin/instance/v1/spanner_instance_admin.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/spanner/admin/instance/v1/spanner_instance_admin.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto -// DO NOT EDIT! /* Package instance is a generated protocol buffer package. @@ -29,7 +28,6 @@ import proto "github.com/golang/protobuf/proto" import fmt "fmt" import math "math" import _ "google.golang.org/genproto/googleapis/api/annotations" -import _ "google.golang.org/genproto/googleapis/api/serviceconfig" import google_iam_v11 "google.golang.org/genproto/googleapis/iam/v1" import google_iam_v1 "google.golang.org/genproto/googleapis/iam/v1" import google_longrunning "google.golang.org/genproto/googleapis/longrunning" @@ -129,7 +127,11 @@ type Instance struct { // Required. The descriptive name for this instance as it appears in UIs. // Must be unique per project and between 4 and 30 characters in length. DisplayName string `protobuf:"bytes,3,opt,name=display_name,json=displayName" json:"display_name,omitempty"` - // Required. The number of nodes allocated to this instance. + // Required. The number of nodes allocated to this instance. This may be zero + // in API responses for instances that are not yet in state `READY`. + // + // See [the documentation](https://cloud.google.com/spanner/docs/instances#node_count) + // for more information about nodes. NodeCount int32 `protobuf:"varint,5,opt,name=node_count,json=nodeCount" json:"node_count,omitempty"` // Output only. The current instance state. For // [CreateInstance][google.spanner.admin.instance.v1.InstanceAdmin.CreateInstance], the state must be @@ -372,20 +374,20 @@ type ListInstancesRequest struct { // An expression for filtering the results of the request. Filter rules are // case insensitive. The fields eligible for filtering are: // - // * name - // * display_name - // * labels.key where key is the name of a label + // * `name` + // * `display_name` + // * `labels.key` where key is the name of a label // // Some examples of using filters are: // - // * name:* --> The instance has a name. - // * name:Howl --> The instance's name contains the string "howl". - // * name:HOWL --> Equivalent to above. - // * NAME:howl --> Equivalent to above. - // * labels.env:* --> The instance has the label "env". - // * labels.env:dev --> The instance has the label "env" and the value of + // * `name:*` --> The instance has a name. + // * `name:Howl` --> The instance's name contains the string "howl". + // * `name:HOWL` --> Equivalent to above. + // * `NAME:howl` --> Equivalent to above. + // * `labels.env:*` --> The instance has the label "env". + // * `labels.env:dev` --> The instance has the label "env" and the value of // the label contains the string "dev". - // * name:howl labels.env:dev --> The instance's name contains "howl" and + // * `name:howl labels.env:dev` --> The instance's name contains "howl" and // it has the label "env" with its value // containing "dev". Filter string `protobuf:"bytes,4,opt,name=filter" json:"filter,omitempty"` @@ -1203,80 +1205,81 @@ func init() { } var fileDescriptor0 = []byte{ - // 1198 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x57, 0xcf, 0x8f, 0xdb, 0xc4, - 0x17, 0xff, 0xce, 0x6e, 0xb3, 0xdd, 0xbc, 0x6c, 0xb7, 0xdb, 0xf9, 0x36, 0x55, 0x48, 0x29, 0x4d, - 0x5d, 0x54, 0xd2, 0x80, 0x6c, 0x1a, 0xe8, 0xaf, 0x2d, 0x7b, 0xd8, 0xa6, 0xd9, 0x34, 0x52, 0xbb, - 0xac, 0x9c, 0x14, 0x09, 0x38, 0x44, 0xd3, 0x64, 0x36, 0x98, 0xb5, 0xc7, 0xc6, 0x33, 0xa9, 0xd8, - 0xa2, 0x5e, 0x2a, 0x0e, 0x20, 0x21, 0x71, 0x40, 0x42, 0xa8, 0x17, 0x24, 0x8e, 0x20, 0x71, 0xe0, - 0xc0, 0x3f, 0xc0, 0x9f, 0xc0, 0xbf, 0x80, 0xf8, 0x3b, 0xd0, 0x8c, 0x3d, 0x69, 0xec, 0x24, 0x9b, - 0xa4, 0xa2, 0x27, 0x6e, 0x9e, 0xf7, 0xf3, 0xe3, 0xcf, 0x7b, 0x7e, 0xcf, 0x03, 0x5b, 0x7d, 0xdf, - 0xef, 0xbb, 0xd4, 0xe2, 0x01, 0x61, 0x8c, 0x86, 0x16, 0xe9, 0x79, 0x0e, 0xb3, 0x1c, 0xc6, 0x05, - 0x61, 0x5d, 0x6a, 0x3d, 0xba, 0xa2, 0x35, 0x1d, 0x2d, 0xeb, 0x28, 0x13, 0x33, 0x08, 0x7d, 0xe1, - 0xe3, 0x52, 0xe4, 0x6e, 0xc6, 0x46, 0x66, 0xa4, 0xd3, 0xa6, 0xe6, 0xa3, 0x2b, 0xc5, 0x57, 0xe3, - 0x04, 0x24, 0x70, 0x2c, 0xc2, 0x98, 0x2f, 0x88, 0x70, 0x7c, 0xc6, 0x23, 0xff, 0x62, 0x7e, 0x54, - 0x3b, 0x10, 0x9f, 0xc4, 0xe2, 0xd7, 0x62, 0xb1, 0x43, 0x3c, 0x09, 0xc1, 0x21, 0x5e, 0x27, 0xf0, - 0x5d, 0xa7, 0x7b, 0x18, 0xeb, 0x8b, 0x49, 0x7d, 0x42, 0x77, 0x31, 0xd6, 0xb9, 0x3e, 0xeb, 0x87, - 0x03, 0xc6, 0x1c, 0xd6, 0xb7, 0xfc, 0x80, 0x86, 0x89, 0xbc, 0x67, 0x63, 0x23, 0x75, 0x7a, 0x38, - 0xd8, 0xb7, 0xa8, 0x17, 0x08, 0x1d, 0xa1, 0x94, 0x56, 0xee, 0x3b, 0xd4, 0xed, 0x75, 0x3c, 0xc2, - 0x0f, 0x62, 0x8b, 0xf3, 0x69, 0x0b, 0xe1, 0x78, 0x94, 0x0b, 0xe2, 0x05, 0x91, 0x81, 0xd1, 0x80, - 0xf5, 0x66, 0x4c, 0x42, 0xcd, 0x67, 0xfb, 0x4e, 0x1f, 0x63, 0x38, 0xc6, 0x88, 0x47, 0x0b, 0xa8, - 0x84, 0xca, 0x59, 0x5b, 0x3d, 0xe3, 0x0b, 0xb0, 0xd6, 0x73, 0x78, 0xe0, 0x92, 0xc3, 0x8e, 0xd2, - 0x2d, 0x29, 0x5d, 0x2e, 0x96, 0xed, 0x12, 0x8f, 0x1a, 0x5f, 0x2e, 0xc3, 0xaa, 0x8e, 0x34, 0x31, - 0xc6, 0x19, 0x58, 0xe9, 0xaa, 0x0c, 0xb1, 0x77, 0x7c, 0x1a, 0x8b, 0xbd, 0x3c, 0x16, 0x1b, 0x9f, - 0x03, 0x60, 0x7e, 0x8f, 0x76, 0xba, 0xfe, 0x80, 0x89, 0x42, 0xa6, 0x84, 0xca, 0x19, 0x3b, 0x2b, - 0x25, 0x35, 0x29, 0xc0, 0x3b, 0x90, 0xe1, 0x82, 0x08, 0x5a, 0x58, 0x29, 0xa1, 0xf2, 0x7a, 0xf5, - 0x6d, 0x73, 0x56, 0xad, 0x4d, 0x0d, 0xd4, 0x6c, 0x49, 0x3f, 0x3b, 0x72, 0xc7, 0xbb, 0xb0, 0xe2, - 0x92, 0x87, 0xd4, 0xe5, 0x85, 0xe3, 0xa5, 0xe5, 0x72, 0xae, 0x7a, 0x6d, 0x81, 0x40, 0xf7, 0x94, - 0x63, 0x9d, 0x89, 0xf0, 0xd0, 0x8e, 0xa3, 0x14, 0x6f, 0x42, 0x6e, 0x44, 0x8c, 0x37, 0x60, 0xf9, - 0x80, 0x1e, 0xc6, 0x9c, 0xc8, 0x47, 0x7c, 0x1a, 0x32, 0x8f, 0x88, 0x3b, 0xd0, 0x7c, 0x46, 0x87, - 0xcd, 0xa5, 0x1b, 0xc8, 0xb8, 0x0e, 0x19, 0x05, 0x0d, 0xe7, 0xe1, 0x54, 0xab, 0xbd, 0xdd, 0xae, - 0x77, 0x1e, 0xec, 0xb6, 0xf6, 0xea, 0xb5, 0xe6, 0x4e, 0xb3, 0x7e, 0x67, 0xe3, 0x7f, 0x78, 0x0d, - 0x56, 0x6b, 0x76, 0x7d, 0xbb, 0xdd, 0xdc, 0x6d, 0x6c, 0x20, 0x9c, 0x85, 0x8c, 0x5d, 0xdf, 0xbe, - 0xf3, 0xe1, 0xc6, 0x92, 0x11, 0x40, 0xf1, 0x9e, 0xc3, 0x45, 0xb2, 0xa6, 0xdc, 0xa6, 0x9f, 0x0d, - 0x28, 0x17, 0xb2, 0x06, 0x01, 0x09, 0x29, 0x13, 0x31, 0x8a, 0xf8, 0x84, 0xcf, 0x42, 0x36, 0x20, - 0x7d, 0xda, 0xe1, 0xce, 0xe3, 0x08, 0x4c, 0xc6, 0x5e, 0x95, 0x82, 0x96, 0xf3, 0x58, 0xb1, 0xaf, - 0x94, 0xc2, 0x3f, 0xa0, 0x2c, 0x2e, 0x8f, 0x32, 0x6f, 0x4b, 0x81, 0xf1, 0x13, 0x82, 0xb3, 0x13, - 0x53, 0xf2, 0xc0, 0x67, 0x9c, 0xe2, 0x8f, 0x61, 0x63, 0xf8, 0x45, 0x46, 0x25, 0xe7, 0x05, 0xa4, - 0xf8, 0x5d, 0xa0, 0x50, 0x51, 0x50, 0xfb, 0xa4, 0x93, 0x4c, 0x82, 0x2f, 0xc1, 0x49, 0x46, 0x3f, - 0x17, 0x9d, 0x11, 0x80, 0x11, 0x97, 0x27, 0xa4, 0x78, 0x6f, 0x08, 0xd2, 0x84, 0x42, 0x83, 0xa6, - 0x20, 0x6a, 0x52, 0x26, 0x34, 0xab, 0x51, 0x06, 0x3c, 0x62, 0x7f, 0x94, 0xe5, 0x0f, 0x08, 0xf2, - 0xb5, 0x90, 0x12, 0x41, 0xd3, 0xd6, 0xd3, 0xc8, 0x3e, 0x0f, 0xb9, 0x21, 0x21, 0x4e, 0x2f, 0xc6, - 0x0b, 0x5a, 0xd4, 0xec, 0xe1, 0x1d, 0x58, 0xd5, 0x27, 0x45, 0x77, 0xae, 0x5a, 0x99, 0x9f, 0x29, - 0x7b, 0xe8, 0x6b, 0x3c, 0x45, 0x70, 0x7a, 0xb4, 0x32, 0x2f, 0xb3, 0x0d, 0x64, 0xcc, 0x7d, 0xc7, - 0x15, 0x34, 0x2c, 0x1c, 0x8b, 0x62, 0x46, 0x27, 0xe3, 0x6b, 0x04, 0xf9, 0x14, 0x88, 0xb8, 0x31, - 0xee, 0x42, 0x56, 0x43, 0xd5, 0x1d, 0xb1, 0xc8, 0x7b, 0x3e, 0x77, 0x9e, 0xbb, 0x0b, 0x9e, 0x21, - 0xc8, 0x3f, 0x08, 0x7a, 0x13, 0x6a, 0x35, 0x4a, 0x39, 0x7a, 0x71, 0xca, 0xf1, 0x4d, 0x80, 0xe7, - 0x33, 0x58, 0x81, 0xc8, 0x55, 0x8b, 0x3a, 0x92, 0x1e, 0xc2, 0xe6, 0x8e, 0x34, 0xb9, 0x4f, 0xf8, - 0x81, 0x9d, 0xdd, 0xd7, 0x8f, 0xc6, 0x9b, 0x90, 0xbf, 0x43, 0x5d, 0x3a, 0x8e, 0x6d, 0x52, 0xd7, - 0x7d, 0xbb, 0x04, 0x67, 0x92, 0x5d, 0x77, 0x9f, 0x0a, 0xd2, 0x23, 0x82, 0xfc, 0x9b, 0xaf, 0xc2, - 0x05, 0x09, 0x45, 0x47, 0xae, 0x8c, 0xa9, 0xaf, 0xd2, 0xd6, 0xfb, 0xc4, 0xce, 0x2a, 0x6b, 0x79, - 0xc6, 0xb7, 0x20, 0xd7, 0x95, 0x31, 0xdc, 0xc8, 0x77, 0x79, 0xa6, 0x2f, 0x44, 0xe6, 0xca, 0xf9, - 0x2a, 0xac, 0x52, 0xd6, 0x8b, 0x3c, 0x8f, 0xcd, 0xf4, 0x3c, 0x4e, 0x59, 0x4f, 0x9e, 0x14, 0x23, - 0xc9, 0xda, 0xfe, 0xc7, 0x19, 0xa9, 0xfe, 0xbd, 0x06, 0x27, 0xf4, 0x5b, 0x6c, 0xcb, 0xf7, 0xc3, - 0x7f, 0x20, 0xf8, 0xff, 0x84, 0x51, 0x8d, 0xdf, 0x9b, 0x4d, 0xc7, 0xf4, 0xa5, 0x52, 0xdc, 0x7a, - 0x41, 0xef, 0x68, 0x0c, 0x18, 0xd6, 0xd3, 0x3f, 0xff, 0xfa, 0x6e, 0xe9, 0x32, 0x7e, 0x43, 0xfe, - 0x20, 0x7d, 0x11, 0x4d, 0xa2, 0xad, 0x20, 0xf4, 0x3f, 0xa5, 0x5d, 0xc1, 0xad, 0xca, 0x13, 0x2b, - 0x3d, 0xf3, 0x7f, 0x43, 0x70, 0x6a, 0x6c, 0x98, 0xe3, 0xcd, 0xd9, 0x28, 0xa6, 0x6d, 0x80, 0xe2, - 0xc2, 0x8b, 0x28, 0x05, 0x5a, 0x7e, 0x92, 0x23, 0x90, 0xd3, 0x88, 0xad, 0xca, 0x13, 0xfc, 0x0b, - 0x82, 0x13, 0x89, 0x31, 0x88, 0xaf, 0x2d, 0x46, 0xdb, 0x90, 0xee, 0xeb, 0x0b, 0xfb, 0xc5, 0x44, - 0x5f, 0x56, 0x98, 0x2f, 0xe2, 0x0b, 0xb3, 0x88, 0xe6, 0xf8, 0x19, 0x82, 0xdc, 0x08, 0x5b, 0xf8, - 0xdd, 0x85, 0xc8, 0xd5, 0x48, 0x17, 0xf8, 0xca, 0x52, 0xe0, 0xa6, 0x11, 0xaa, 0xa8, 0xfc, 0x1e, - 0xc1, 0x7a, 0x72, 0xf6, 0xe1, 0x39, 0x38, 0x99, 0xb8, 0xa3, 0x8b, 0xe7, 0xb4, 0xe3, 0xc8, 0x4f, - 0xb8, 0xf9, 0xbe, 0xfe, 0x09, 0x37, 0xde, 0x52, 0xa8, 0x2e, 0x19, 0xb3, 0x29, 0xdb, 0x44, 0x15, - 0xfc, 0x23, 0x82, 0xf5, 0xe4, 0x08, 0x9a, 0x07, 0xd8, 0xc4, 0x85, 0x34, 0x0b, 0xd8, 0x55, 0x05, - 0xcc, 0xaa, 0x56, 0x14, 0xb0, 0x61, 0xb8, 0xa3, 0x78, 0x93, 0x08, 0xbf, 0x41, 0xb0, 0x9e, 0x5c, - 0x32, 0xf3, 0x20, 0x9c, 0xb8, 0x96, 0x8a, 0x67, 0xc6, 0x66, 0x50, 0x5d, 0x5e, 0x4d, 0x74, 0x25, - 0x2b, 0x73, 0x54, 0xf2, 0x2b, 0x04, 0x6b, 0x2d, 0x2a, 0x9a, 0xc4, 0xdb, 0x53, 0x17, 0x23, 0x6c, - 0xe8, 0x98, 0x0e, 0xf1, 0x64, 0xe6, 0x51, 0xa5, 0xce, 0x9b, 0x4f, 0xd9, 0x44, 0x5a, 0x63, 0x4b, - 0xa5, 0xbd, 0x6e, 0x54, 0x55, 0xda, 0x90, 0x72, 0x7f, 0x10, 0x76, 0xa7, 0x93, 0xc1, 0x47, 0x22, - 0x4b, 0x66, 0x24, 0x94, 0xc6, 0x51, 0x50, 0x1a, 0x2f, 0x0d, 0x4a, 0x3f, 0x05, 0xe5, 0x57, 0x04, - 0xb8, 0x4d, 0xb9, 0x12, 0xd2, 0xd0, 0x73, 0x38, 0x97, 0xf7, 0x41, 0x5c, 0x4e, 0x25, 0x1b, 0x37, - 0xd1, 0xb0, 0x2e, 0xcf, 0x61, 0x19, 0xcf, 0x84, 0x9a, 0x82, 0xba, 0x65, 0xdc, 0x98, 0x0f, 0xaa, - 0x18, 0x8b, 0xb4, 0x89, 0x2a, 0xb7, 0x7f, 0x47, 0xf0, 0x7a, 0xd7, 0xf7, 0x66, 0x36, 0xd2, 0xed, - 0x57, 0x5a, 0x91, 0x2a, 0xb1, 0x95, 0xf6, 0x64, 0xfb, 0xec, 0xa1, 0x8f, 0xee, 0xc6, 0xee, 0x7d, - 0xdf, 0x25, 0xac, 0x6f, 0xfa, 0x61, 0xdf, 0xea, 0x53, 0xa6, 0x9a, 0xcb, 0x8a, 0x54, 0x24, 0x70, - 0xf8, 0xf4, 0xfb, 0xff, 0x2d, 0xfd, 0xfc, 0xf3, 0xd2, 0xa5, 0x46, 0x14, 0xaa, 0xe6, 0xfa, 0x83, - 0x9e, 0x19, 0x27, 0x35, 0x55, 0xb6, 0xe7, 0x37, 0xb6, 0x0f, 0xae, 0x3c, 0x5c, 0x51, 0xd1, 0xdf, - 0xf9, 0x27, 0x00, 0x00, 0xff, 0xff, 0xbf, 0x53, 0x3b, 0xf8, 0x5c, 0x10, 0x00, 0x00, + // 1210 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x57, 0x4f, 0x6f, 0x1b, 0x45, + 0x14, 0x67, 0x92, 0x3a, 0x8d, 0x9f, 0xd3, 0x34, 0x1d, 0x9a, 0xca, 0xb8, 0x94, 0xa6, 0x5b, 0x54, + 0x5c, 0x83, 0x76, 0x89, 0xa1, 0xff, 0x52, 0x72, 0x48, 0x5d, 0xc7, 0xb5, 0xd4, 0x86, 0x68, 0xed, + 0x56, 0x02, 0x22, 0x59, 0x53, 0x7b, 0x62, 0x2d, 0xd9, 0x9d, 0x5d, 0x76, 0xc6, 0x15, 0x29, 0xea, + 0xa5, 0xe2, 0x00, 0x12, 0x12, 0x07, 0x24, 0x84, 0x7a, 0x41, 0xe2, 0x08, 0x12, 0x07, 0xbe, 0x02, + 0x37, 0xae, 0x7c, 0x00, 0x2e, 0x88, 0xcf, 0x81, 0x66, 0x76, 0xc7, 0xf5, 0xae, 0xed, 0xd8, 0xae, + 0xe8, 0x89, 0xdb, 0xce, 0xbc, 0xdf, 0x7b, 0xef, 0x37, 0xbf, 0x37, 0xfb, 0xde, 0x2e, 0x6c, 0x76, + 0x7d, 0xbf, 0xeb, 0x52, 0x8b, 0x07, 0x84, 0x31, 0x1a, 0x5a, 0xa4, 0xe3, 0x39, 0xcc, 0x72, 0x18, + 0x17, 0x84, 0xb5, 0xa9, 0xf5, 0x68, 0x5d, 0x5b, 0x5a, 0x7a, 0xaf, 0xa5, 0x20, 0x66, 0x10, 0xfa, + 0xc2, 0xc7, 0x6b, 0x91, 0xbb, 0x19, 0x83, 0xcc, 0xc8, 0xa6, 0xa1, 0xe6, 0xa3, 0xf5, 0xc2, 0xeb, + 0x71, 0x02, 0x12, 0x38, 0x16, 0x61, 0xcc, 0x17, 0x44, 0x38, 0x3e, 0xe3, 0x91, 0x7f, 0xe1, 0x8d, + 0xd8, 0xea, 0x10, 0x4f, 0xe6, 0x72, 0x88, 0xd7, 0x0a, 0x7c, 0xd7, 0x69, 0x1f, 0xc6, 0xf6, 0x42, + 0xd2, 0x9e, 0xb0, 0x5d, 0x8c, 0x6d, 0xae, 0xcf, 0xba, 0x61, 0x8f, 0x31, 0x87, 0x75, 0x2d, 0x3f, + 0xa0, 0x61, 0x22, 0xc1, 0xd9, 0x18, 0xa4, 0x56, 0x0f, 0x7b, 0xfb, 0x16, 0xf5, 0x02, 0xa1, 0x23, + 0xac, 0xa5, 0x8d, 0xfb, 0x0e, 0x75, 0x3b, 0x2d, 0x8f, 0xf0, 0x83, 0x18, 0x71, 0x3e, 0x8d, 0x10, + 0x8e, 0x47, 0xb9, 0x20, 0x5e, 0x10, 0x01, 0x8c, 0x1a, 0x2c, 0xd7, 0xe3, 0xd3, 0x56, 0x7c, 0xb6, + 0xef, 0x74, 0x31, 0x86, 0x63, 0x8c, 0x78, 0x34, 0x8f, 0xd6, 0x50, 0x31, 0x6b, 0xab, 0x67, 0x7c, + 0x01, 0x96, 0x3a, 0x0e, 0x0f, 0x5c, 0x72, 0xd8, 0x52, 0xb6, 0x39, 0x65, 0xcb, 0xc5, 0x7b, 0x3b, + 0xc4, 0xa3, 0xc6, 0x97, 0xf3, 0xb0, 0xa8, 0x23, 0x8d, 0x8c, 0x71, 0x06, 0x16, 0xda, 0x2a, 0x43, + 0xec, 0x1d, 0xaf, 0x86, 0x62, 0xcf, 0x0f, 0xc5, 0xc6, 0xe7, 0x00, 0x98, 0xdf, 0xa1, 0xad, 0xb6, + 0xdf, 0x63, 0x22, 0x9f, 0x59, 0x43, 0xc5, 0x8c, 0x9d, 0x95, 0x3b, 0x15, 0xb9, 0x81, 0xb7, 0x21, + 0xc3, 0x05, 0x11, 0x34, 0xbf, 0xb0, 0x86, 0x8a, 0xcb, 0xe5, 0x77, 0xcd, 0x49, 0x45, 0x35, 0x35, + 0x51, 0xb3, 0x21, 0xfd, 0xec, 0xc8, 0x1d, 0xef, 0xc0, 0x82, 0x4b, 0x1e, 0x52, 0x97, 0xe7, 0x8f, + 0xaf, 0xcd, 0x17, 0x73, 0xe5, 0xab, 0x33, 0x04, 0xba, 0xab, 0x1c, 0xab, 0x4c, 0x84, 0x87, 0x76, + 0x1c, 0xa5, 0x70, 0x03, 0x72, 0x03, 0xdb, 0x78, 0x05, 0xe6, 0x0f, 0xe8, 0x61, 0xac, 0x89, 0x7c, + 0xc4, 0xa7, 0x21, 0xf3, 0x88, 0xb8, 0x3d, 0xad, 0x67, 0xb4, 0xd8, 0x98, 0xbb, 0x8e, 0x8c, 0x6b, + 0x90, 0x51, 0xd4, 0xf0, 0x2a, 0x9c, 0x6a, 0x34, 0xb7, 0x9a, 0xd5, 0xd6, 0xfd, 0x9d, 0xc6, 0x6e, + 0xb5, 0x52, 0xdf, 0xae, 0x57, 0x6f, 0xaf, 0xbc, 0x82, 0x97, 0x60, 0xb1, 0x62, 0x57, 0xb7, 0x9a, + 0xf5, 0x9d, 0xda, 0x0a, 0xc2, 0x59, 0xc8, 0xd8, 0xd5, 0xad, 0xdb, 0x1f, 0xad, 0xcc, 0x19, 0x01, + 0x14, 0xee, 0x3a, 0x5c, 0x24, 0x6b, 0xca, 0x6d, 0xfa, 0x59, 0x8f, 0x72, 0x21, 0x6b, 0x10, 0x90, + 0x90, 0x32, 0x11, 0xb3, 0x88, 0x57, 0xf8, 0x2c, 0x64, 0x03, 0xd2, 0xa5, 0x2d, 0xee, 0x3c, 0x8e, + 0xc8, 0x64, 0xec, 0x45, 0xb9, 0xd1, 0x70, 0x1e, 0x2b, 0xf5, 0x95, 0x51, 0xf8, 0x07, 0x94, 0xc5, + 0xe5, 0x51, 0xf0, 0xa6, 0xdc, 0x30, 0x7e, 0x42, 0x70, 0x76, 0x64, 0x4a, 0x1e, 0xf8, 0x8c, 0x53, + 0xfc, 0x09, 0xac, 0xf4, 0x5f, 0xbd, 0xa8, 0xe4, 0x3c, 0x8f, 0x94, 0xbe, 0x33, 0x14, 0x2a, 0x0a, + 0x6a, 0x9f, 0x74, 0x92, 0x49, 0xf0, 0x25, 0x38, 0xc9, 0xe8, 0xe7, 0xa2, 0x35, 0x40, 0x30, 0xd2, + 0xf2, 0x84, 0xdc, 0xde, 0xed, 0x93, 0x34, 0x21, 0x5f, 0xa3, 0x29, 0x8a, 0x5a, 0x94, 0x11, 0x97, + 0xd5, 0x28, 0x02, 0x1e, 0xc0, 0x1f, 0x85, 0xfc, 0x01, 0xc1, 0x6a, 0x25, 0xa4, 0x44, 0xd0, 0x34, + 0x7a, 0x9c, 0xd8, 0xe7, 0x21, 0xd7, 0x17, 0xc4, 0xe9, 0xc4, 0x7c, 0x41, 0x6f, 0xd5, 0x3b, 0x78, + 0x1b, 0x16, 0xf5, 0x4a, 0xc9, 0x9d, 0x2b, 0x97, 0xa6, 0x57, 0xca, 0xee, 0xfb, 0x1a, 0x4f, 0x11, + 0x9c, 0x1e, 0xac, 0xcc, 0xcb, 0xbc, 0x06, 0x32, 0xe6, 0xbe, 0xe3, 0x0a, 0x1a, 0xe6, 0x8f, 0x45, + 0x31, 0xa3, 0x95, 0xf1, 0x35, 0x82, 0xd5, 0x14, 0x89, 0xf8, 0x62, 0xdc, 0x81, 0xac, 0xa6, 0xaa, + 0x6f, 0xc4, 0x2c, 0xe7, 0x7c, 0xee, 0x3c, 0xf5, 0x2d, 0x78, 0x86, 0x60, 0xf5, 0x7e, 0xd0, 0x19, + 0x51, 0xab, 0x41, 0xc9, 0xd1, 0x8b, 0x4b, 0x8e, 0x6f, 0x00, 0x3c, 0xef, 0xc1, 0x8a, 0x44, 0xae, + 0x5c, 0xd0, 0x91, 0x74, 0x13, 0x36, 0xb7, 0x25, 0xe4, 0x1e, 0xe1, 0x07, 0x76, 0x76, 0x5f, 0x3f, + 0x1a, 0x6f, 0xc3, 0xea, 0x6d, 0xea, 0xd2, 0x61, 0x6e, 0xa3, 0x6e, 0xdd, 0xb7, 0x73, 0x70, 0x26, + 0x79, 0xeb, 0xee, 0x51, 0x41, 0x3a, 0x44, 0x90, 0xff, 0xf2, 0x28, 0x5c, 0x90, 0x50, 0xb4, 0xe4, + 0xc8, 0x18, 0x7b, 0x94, 0xa6, 0x9e, 0x27, 0x76, 0x56, 0xa1, 0xe5, 0x1a, 0xdf, 0x84, 0x5c, 0x5b, + 0xc6, 0x70, 0x23, 0xdf, 0xf9, 0x89, 0xbe, 0x10, 0xc1, 0x95, 0xf3, 0x15, 0x58, 0xa4, 0xac, 0x13, + 0x79, 0x1e, 0x9b, 0xe8, 0x79, 0x9c, 0xb2, 0x8e, 0x5c, 0x29, 0x45, 0x92, 0xb5, 0xfd, 0x9f, 0x2b, + 0x52, 0xfe, 0x67, 0x09, 0x4e, 0xe8, 0x53, 0x6c, 0xc9, 0xf3, 0xe1, 0xdf, 0x11, 0xbc, 0x3a, 0xa2, + 0x55, 0xe3, 0x0f, 0x26, 0xcb, 0x31, 0x7e, 0xa8, 0x14, 0x36, 0x5f, 0xd0, 0x3b, 0x6a, 0x03, 0x86, + 0xf5, 0xf4, 0xcf, 0xbf, 0xbf, 0x9b, 0xbb, 0x8c, 0xdf, 0x92, 0x1f, 0x48, 0x5f, 0x44, 0x9d, 0x68, + 0x33, 0x08, 0xfd, 0x4f, 0x69, 0x5b, 0x70, 0xab, 0xf4, 0xc4, 0x4a, 0xf7, 0xfc, 0xdf, 0x10, 0x9c, + 0x1a, 0x6a, 0xe6, 0x78, 0x63, 0x32, 0x8b, 0x71, 0x13, 0xa0, 0x30, 0xf3, 0x20, 0x4a, 0x91, 0x96, + 0xaf, 0xe4, 0x00, 0xe5, 0x34, 0x63, 0xab, 0xf4, 0x04, 0xff, 0x82, 0xe0, 0x44, 0xa2, 0x0d, 0xe2, + 0xab, 0xb3, 0xc9, 0xd6, 0x97, 0xfb, 0xda, 0xcc, 0x7e, 0xb1, 0xd0, 0x97, 0x15, 0xe7, 0x8b, 0xf8, + 0xc2, 0x24, 0xa1, 0x39, 0x7e, 0x86, 0x20, 0x37, 0xa0, 0x16, 0x7e, 0x7f, 0x26, 0x71, 0x35, 0xd3, + 0x19, 0xde, 0xb2, 0x14, 0xb9, 0x71, 0x82, 0x2a, 0x29, 0xbf, 0x47, 0xb0, 0x9c, 0xec, 0x7d, 0x78, + 0x0a, 0x4d, 0x46, 0xce, 0xe8, 0xc2, 0x39, 0xed, 0x38, 0xf0, 0x11, 0x6e, 0x7e, 0xa8, 0x3f, 0xc2, + 0x8d, 0x77, 0x14, 0xab, 0x4b, 0xc6, 0x64, 0xc9, 0x36, 0x50, 0x09, 0xff, 0x88, 0x60, 0x39, 0xd9, + 0x82, 0xa6, 0x21, 0x36, 0x72, 0x20, 0x4d, 0x22, 0x76, 0x45, 0x11, 0xb3, 0xca, 0x25, 0x45, 0xac, + 0x1f, 0xee, 0x28, 0xdd, 0x24, 0xc3, 0x6f, 0x10, 0x2c, 0x27, 0x87, 0xcc, 0x34, 0x0c, 0x47, 0x8e, + 0xa5, 0xc2, 0x99, 0xa1, 0x1e, 0x54, 0x95, 0xbf, 0x26, 0xba, 0x92, 0xa5, 0x29, 0x2a, 0xf9, 0x15, + 0x82, 0xa5, 0x06, 0x15, 0x75, 0xe2, 0xed, 0xaa, 0x1f, 0x23, 0x6c, 0xe8, 0x98, 0x0e, 0xf1, 0x64, + 0xe6, 0x41, 0xa3, 0xce, 0xbb, 0x9a, 0xc2, 0x44, 0x56, 0x63, 0x53, 0xa5, 0xbd, 0x66, 0x94, 0x55, + 0xda, 0x90, 0x72, 0xbf, 0x17, 0xb6, 0xc7, 0x8b, 0xc1, 0x07, 0x22, 0x4b, 0x65, 0x24, 0x95, 0xda, + 0x51, 0x54, 0x6a, 0x2f, 0x8d, 0x4a, 0x37, 0x45, 0xe5, 0x57, 0x04, 0xb8, 0x49, 0xb9, 0xda, 0xa4, + 0xa1, 0xe7, 0x70, 0x2e, 0xff, 0x07, 0x71, 0x31, 0x95, 0x6c, 0x18, 0xa2, 0x69, 0x5d, 0x9e, 0x02, + 0x19, 0xf7, 0x84, 0x8a, 0xa2, 0xba, 0x69, 0x5c, 0x9f, 0x8e, 0xaa, 0x18, 0x8a, 0xb4, 0x81, 0x4a, + 0xb7, 0xfe, 0x42, 0xf0, 0x66, 0xdb, 0xf7, 0x26, 0x5e, 0xa4, 0x5b, 0xaf, 0x35, 0x22, 0x53, 0x62, + 0x2a, 0xed, 0xca, 0xeb, 0xb3, 0x8b, 0x3e, 0xbe, 0x13, 0xbb, 0x77, 0x7d, 0x97, 0xb0, 0xae, 0xe9, + 0x87, 0x5d, 0xab, 0x4b, 0x99, 0xba, 0x5c, 0x56, 0x64, 0x22, 0x81, 0xc3, 0xc7, 0xff, 0xe8, 0xdf, + 0xd4, 0xcf, 0x3f, 0xcf, 0x5d, 0xaa, 0x45, 0xa1, 0x2a, 0xae, 0xdf, 0xeb, 0x98, 0x71, 0x52, 0x53, + 0x65, 0x7b, 0xfe, 0xc7, 0xf6, 0x60, 0xfd, 0x0f, 0x0d, 0xdc, 0x53, 0xc0, 0xbd, 0x18, 0xb8, 0xa7, + 0x80, 0x7b, 0x1a, 0xb8, 0xf7, 0x60, 0xfd, 0xe1, 0x82, 0xa2, 0xf1, 0xde, 0xbf, 0x01, 0x00, 0x00, + 0xff, 0xff, 0x23, 0xcc, 0x85, 0xa9, 0x6e, 0x10, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/spanner/v1/keys.pb.go b/vendor/google.golang.org/genproto/googleapis/spanner/v1/keys.pb.go index e822f02..66728be 100644 --- a/vendor/google.golang.org/genproto/googleapis/spanner/v1/keys.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/spanner/v1/keys.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/spanner/v1/keys.proto -// DO NOT EDIT! /* Package spanner is a generated protocol buffer package. @@ -27,8 +26,15 @@ It has these top-level messages: CreateSessionRequest Session GetSessionRequest + ListSessionsRequest + ListSessionsResponse DeleteSessionRequest ExecuteSqlRequest + PartitionOptions + PartitionQueryRequest + PartitionReadRequest + Partition + PartitionResponse ReadRequest BeginTransactionRequest CommitRequest @@ -412,28 +418,29 @@ func init() { func init() { proto.RegisterFile("google/spanner/v1/keys.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 356 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x41, 0x6b, 0xf2, 0x30, - 0x18, 0xc7, 0xdf, 0x56, 0xf1, 0xd5, 0x28, 0xe2, 0x5b, 0x78, 0x59, 0x71, 0x3b, 0x88, 0xa7, 0x9d, - 0x52, 0x9c, 0x87, 0x0d, 0x3c, 0x0c, 0xea, 0x61, 0x03, 0x07, 0x93, 0x0a, 0x1e, 0x76, 0x91, 0x68, - 0x9f, 0x85, 0x62, 0x96, 0x84, 0x26, 0x95, 0xf5, 0xb4, 0xaf, 0xb2, 0xf3, 0x3e, 0xe5, 0x48, 0x9a, - 0x8e, 0x81, 0xb0, 0x79, 0x4b, 0xf8, 0x3f, 0xbf, 0xe7, 0x97, 0x3e, 0x4f, 0xd1, 0x05, 0x15, 0x82, - 0x32, 0x88, 0x94, 0x24, 0x9c, 0x43, 0x1e, 0x1d, 0x26, 0xd1, 0x1e, 0x4a, 0x85, 0x65, 0x2e, 0xb4, - 0x08, 0xfe, 0x55, 0x29, 0x76, 0x29, 0x3e, 0x4c, 0x86, 0x35, 0x40, 0x64, 0x16, 0x11, 0xce, 0x85, - 0x26, 0x3a, 0x13, 0xdc, 0x01, 0x5f, 0xa9, 0xbd, 0x6d, 0x8b, 0xe7, 0x48, 0xe9, 0xbc, 0xd8, 0xe9, - 0x2a, 0x1d, 0xbf, 0xfb, 0xa8, 0xbd, 0x80, 0x32, 0x21, 0x9c, 0x42, 0x70, 0x8b, 0x7a, 0x4a, 0x93, - 0x5c, 0x6f, 0x76, 0x4c, 0x28, 0x48, 0x43, 0x6f, 0xe4, 0x5d, 0x76, 0xaf, 0x86, 0xd8, 0x29, 0xeb, - 0x0e, 0xf8, 0x21, 0x53, 0x7a, 0x4d, 0x58, 0x01, 0xf7, 0x7f, 0x92, 0xae, 0x25, 0xe6, 0x16, 0x08, - 0x66, 0x08, 0x55, 0x0d, 0x84, 0x04, 0x1e, 0xfa, 0x27, 0xe0, 0x1d, 0x5b, 0xff, 0x28, 0x81, 0x1b, - 0x18, 0x78, 0x5a, 0xbb, 0x1b, 0xbf, 0xc2, 0x5e, 0xd2, 0x01, 0x9e, 0x3a, 0xf3, 0x35, 0x6a, 0x1b, - 0xd8, 0x7a, 0x9b, 0x27, 0xa0, 0x7f, 0x81, 0xa7, 0xc6, 0x1a, 0x0f, 0x50, 0xbf, 0x7a, 0xf2, 0x1e, - 0xca, 0x8d, 0x2e, 0x25, 0xc4, 0x7d, 0xd4, 0x33, 0xad, 0xea, 0xfb, 0xf8, 0x0d, 0xb5, 0x16, 0x50, - 0xae, 0x40, 0x07, 0x18, 0x35, 0xcd, 0x26, 0x42, 0x6f, 0xd4, 0xf8, 0x59, 0x90, 0xd8, 0xba, 0x60, - 0x8a, 0x5a, 0xb9, 0x19, 0xac, 0x0a, 0x7d, 0x4b, 0x9c, 0xe3, 0xa3, 0xe5, 0xe1, 0x7a, 0xf8, 0x89, - 0x2b, 0x0d, 0x06, 0xa8, 0x41, 0x18, 0xb3, 0xdf, 0xdf, 0x4e, 0xcc, 0x31, 0x7e, 0x45, 0xff, 0x77, - 0xe2, 0xe5, 0x98, 0x8d, 0x3b, 0x0b, 0x28, 0xd5, 0xd2, 0xd8, 0x97, 0xde, 0xd3, 0x8d, 0xcb, 0xa9, - 0x60, 0x84, 0x53, 0x2c, 0x72, 0x1a, 0x51, 0xe0, 0xf6, 0x6d, 0x51, 0x15, 0x11, 0x99, 0xa9, 0x6f, - 0x7f, 0xd5, 0xcc, 0x1d, 0x3f, 0xfc, 0xb3, 0xbb, 0x0a, 0x9d, 0x33, 0x51, 0xa4, 0x78, 0xe5, 0x04, - 0xeb, 0xc9, 0xb6, 0x65, 0xf1, 0xe9, 0x67, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0x78, 0x80, 0x47, - 0x93, 0x02, 0x00, 0x00, + // 371 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xc1, 0x6b, 0xea, 0x30, + 0x1c, 0xc7, 0x5f, 0xab, 0xf8, 0x34, 0x8a, 0xf8, 0x0a, 0x8f, 0x57, 0x7c, 0x3b, 0x88, 0xa7, 0x9d, + 0x52, 0x3a, 0x0f, 0x1b, 0x78, 0x18, 0xd4, 0xc3, 0x06, 0x0e, 0x26, 0x15, 0x3c, 0x0c, 0x41, 0xa2, + 0xfd, 0xad, 0x14, 0xb3, 0x24, 0x34, 0xa9, 0xd0, 0xd3, 0xfe, 0x87, 0xfd, 0x05, 0x3b, 0xef, 0x4f, + 0xd9, 0x5f, 0x35, 0x92, 0xa6, 0x63, 0x20, 0x6c, 0xde, 0x12, 0x3e, 0xbf, 0xcf, 0xf7, 0x9b, 0x26, + 0x45, 0x67, 0x29, 0xe7, 0x29, 0x85, 0x40, 0x0a, 0xc2, 0x18, 0xe4, 0xc1, 0x21, 0x0c, 0xf6, 0x50, + 0x4a, 0x2c, 0x72, 0xae, 0xb8, 0xf7, 0xa7, 0xa2, 0xd8, 0x52, 0x7c, 0x08, 0x87, 0xb5, 0x40, 0x44, + 0x16, 0x10, 0xc6, 0xb8, 0x22, 0x2a, 0xe3, 0xcc, 0x0a, 0x9f, 0xd4, 0xec, 0xb6, 0xc5, 0x63, 0x20, + 0x55, 0x5e, 0xec, 0x54, 0x45, 0xc7, 0xaf, 0x2e, 0x6a, 0xcf, 0xa1, 0x8c, 0x09, 0x4b, 0xc1, 0xbb, + 0x46, 0x3d, 0xa9, 0x48, 0xae, 0x36, 0x3b, 0xca, 0x25, 0x24, 0xbe, 0x33, 0x72, 0xce, 0xbb, 0x17, + 0x43, 0x6c, 0x2b, 0xeb, 0x04, 0x7c, 0x97, 0x49, 0xb5, 0x22, 0xb4, 0x80, 0xdb, 0x5f, 0x71, 0xd7, + 0x18, 0x33, 0x23, 0x78, 0x53, 0x84, 0xaa, 0x00, 0x2e, 0x80, 0xf9, 0xee, 0x09, 0x7a, 0xc7, 0xcc, + 0xdf, 0x0b, 0x60, 0x5a, 0x06, 0x96, 0xd4, 0xdd, 0x8d, 0x1f, 0x65, 0x27, 0xee, 0x00, 0x4b, 0x6c, + 0xf3, 0x25, 0x6a, 0x6b, 0xd9, 0xf4, 0x36, 0x4f, 0x50, 0x7f, 0x03, 0x4b, 0x74, 0x6b, 0x34, 0x40, + 0xfd, 0xea, 0xc8, 0x7b, 0x28, 0x37, 0xaa, 0x14, 0x10, 0xf5, 0x51, 0x4f, 0x47, 0xd5, 0xfb, 0xf1, + 0x33, 0x6a, 0xcd, 0xa1, 0x5c, 0x82, 0xf2, 0x30, 0x6a, 0xea, 0x97, 0xf0, 0x9d, 0x51, 0xe3, 0xfb, + 0x82, 0xd8, 0xcc, 0x79, 0x13, 0xd4, 0xca, 0xf5, 0xc5, 0x4a, 0xdf, 0x35, 0xc6, 0x7f, 0x7c, 0xf4, + 0x78, 0xb8, 0xbe, 0xfc, 0xd8, 0x8e, 0x7a, 0x03, 0xd4, 0x20, 0x94, 0x9a, 0xef, 0x6f, 0xc7, 0x7a, + 0x19, 0xbd, 0x38, 0xe8, 0xef, 0x8e, 0x3f, 0x1d, 0xcb, 0x51, 0x67, 0x0e, 0xa5, 0x5c, 0xe8, 0xfa, + 0x85, 0xf3, 0x70, 0x65, 0x79, 0xca, 0x29, 0x61, 0x29, 0xe6, 0x79, 0x1a, 0xa4, 0xc0, 0xcc, 0xe1, + 0x82, 0x0a, 0x11, 0x91, 0xc9, 0x2f, 0xbf, 0xd5, 0xd4, 0x2e, 0xdf, 0xdc, 0x7f, 0x37, 0x95, 0x3a, + 0xa3, 0xbc, 0x48, 0xf0, 0xd2, 0x16, 0xac, 0xc2, 0xf7, 0x9a, 0xac, 0x0d, 0x59, 0x5b, 0xb2, 0x5e, + 0x85, 0xdb, 0x96, 0x09, 0x9e, 0x7c, 0x04, 0x00, 0x00, 0xff, 0xff, 0x27, 0x88, 0xea, 0x11, 0xae, + 0x02, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/spanner/v1/mutation.pb.go b/vendor/google.golang.org/genproto/googleapis/spanner/v1/mutation.pb.go index bda605f..2f82779 100644 --- a/vendor/google.golang.org/genproto/googleapis/spanner/v1/mutation.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/spanner/v1/mutation.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/spanner/v1/mutation.proto -// DO NOT EDIT! package spanner @@ -287,6 +286,8 @@ type Mutation_Delete struct { // Required. The table whose rows will be deleted. Table string `protobuf:"bytes,1,opt,name=table" json:"table,omitempty"` // Required. The primary keys of the rows within [table][google.spanner.v1.Mutation.Delete.table] to delete. + // Delete is idempotent. The transaction will succeed even if some or all + // rows do not exist. KeySet *KeySet `protobuf:"bytes,2,opt,name=key_set,json=keySet" json:"key_set,omitempty"` } @@ -318,31 +319,31 @@ func init() { func init() { proto.RegisterFile("google/spanner/v1/mutation.proto", fileDescriptor1) } var fileDescriptor1 = []byte{ - // 402 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0x41, 0x6b, 0xdb, 0x30, - 0x14, 0xc7, 0x97, 0x38, 0x71, 0x16, 0x85, 0x8d, 0xcd, 0x6c, 0xcc, 0x33, 0x3b, 0x78, 0x39, 0xe5, - 0x24, 0x13, 0xef, 0x32, 0xc8, 0x76, 0xc9, 0x06, 0x1b, 0x6c, 0xa1, 0xc1, 0xa1, 0x29, 0xf4, 0x12, - 0x14, 0xe7, 0xd5, 0x18, 0x2b, 0x92, 0x91, 0xe4, 0x40, 0xa0, 0x9f, 0xa5, 0x1f, 0xa0, 0x9f, 0xb2, - 0x58, 0x92, 0x4b, 0x68, 0xda, 0x92, 0x9e, 0xec, 0xc7, 0xfb, 0xff, 0xfe, 0xff, 0xf7, 0x24, 0xa1, - 0x30, 0xe3, 0x3c, 0xa3, 0x10, 0xc9, 0x92, 0x30, 0x06, 0x22, 0xda, 0x8d, 0xa3, 0x6d, 0xa5, 0x88, - 0xca, 0x39, 0xc3, 0xa5, 0xe0, 0x8a, 0x7b, 0xef, 0x8d, 0x02, 0x5b, 0x05, 0xde, 0x8d, 0x83, 0x2f, - 0x16, 0x22, 0x65, 0x1e, 0x11, 0xc6, 0xb8, 0xd1, 0x4b, 0x03, 0xdc, 0x77, 0x75, 0xb5, 0xae, 0xae, - 0x22, 0xa9, 0x44, 0x95, 0xaa, 0x07, 0xdd, 0x83, 0xc0, 0x02, 0xf6, 0x96, 0x1d, 0xde, 0x74, 0xd0, - 0xeb, 0x99, 0xcd, 0xf7, 0x26, 0xc8, 0xcd, 0x99, 0x04, 0xa1, 0xfc, 0x56, 0xd8, 0x1a, 0x0d, 0xe2, - 0xaf, 0xf8, 0x68, 0x14, 0xdc, 0x88, 0xf1, 0x85, 0xc8, 0x15, 0xfc, 0x7d, 0x95, 0x58, 0xa4, 0x86, - 0xab, 0x72, 0x43, 0x14, 0xf8, 0xed, 0x17, 0xc0, 0x06, 0xf1, 0x66, 0xe8, 0x9d, 0xb1, 0x59, 0x71, - 0xb1, 0xb2, 0x36, 0xce, 0xe9, 0x36, 0x6f, 0x0d, 0x7c, 0x26, 0xce, 0x8d, 0xdd, 0x4f, 0xd4, 0x13, - 0x50, 0x52, 0x92, 0x82, 0xdf, 0x39, 0xdd, 0xa5, 0x61, 0xbc, 0x1f, 0xc8, 0xdd, 0x00, 0x05, 0x05, - 0x7e, 0x57, 0xd3, 0xc3, 0xe7, 0xe8, 0xdf, 0x5a, 0x59, 0xef, 0x62, 0x98, 0xa0, 0x40, 0x5d, 0xed, - 0xe8, 0x7d, 0x40, 0x5d, 0x45, 0xd6, 0x14, 0xf4, 0x69, 0xf6, 0x13, 0x53, 0x78, 0x3e, 0xea, 0xa5, - 0x9c, 0x56, 0x5b, 0x26, 0xfd, 0x76, 0xe8, 0x8c, 0xfa, 0x49, 0x53, 0x7a, 0x31, 0x72, 0x77, 0x84, - 0x56, 0x20, 0x7d, 0x27, 0x74, 0x46, 0x83, 0x38, 0x68, 0x62, 0x9b, 0x8b, 0xc5, 0xff, 0x73, 0xa9, - 0x96, 0xb5, 0x24, 0xb1, 0xca, 0x20, 0x41, 0xae, 0x19, 0xe0, 0x89, 0xb4, 0x18, 0xf5, 0x0a, 0xd8, - 0xaf, 0x24, 0x28, 0x7b, 0x2d, 0x9f, 0x1f, 0xd9, 0xe5, 0x1f, 0xec, 0x17, 0xa0, 0x12, 0xb7, 0xd0, - 0xdf, 0xe9, 0x00, 0xf5, 0x79, 0x09, 0x42, 0xaf, 0x37, 0xbd, 0x46, 0x1f, 0x53, 0xbe, 0x3d, 0x86, - 0xa6, 0x6f, 0x9a, 0x13, 0x98, 0xd7, 0xd3, 0xcd, 0x5b, 0x97, 0xdf, 0xad, 0x26, 0xe3, 0x94, 0xb0, - 0x0c, 0x73, 0x91, 0x45, 0x19, 0x30, 0x3d, 0x7b, 0x64, 0x5a, 0xa4, 0xcc, 0xe5, 0xc1, 0x3b, 0x9c, - 0xd8, 0xdf, 0xdb, 0xf6, 0xa7, 0x3f, 0x06, 0xfd, 0x45, 0x79, 0xb5, 0xc1, 0x0b, 0x1b, 0xb2, 0x1c, - 0xaf, 0x5d, 0x8d, 0x7f, 0xbb, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x94, 0x52, 0x99, 0xf3, 0x36, 0x03, - 0x00, 0x00, + // 413 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0xd1, 0xea, 0xd3, 0x30, + 0x14, 0xc6, 0xed, 0xba, 0x75, 0x2e, 0x43, 0xd1, 0xa2, 0x58, 0x8b, 0x17, 0x75, 0x57, 0xbb, 0x4a, + 0x69, 0xbd, 0x11, 0xa6, 0x37, 0x53, 0x50, 0xd0, 0xe1, 0xe8, 0x70, 0x82, 0x0c, 0x46, 0xd6, 0x1d, + 0x4b, 0x69, 0x96, 0x94, 0x24, 0x1d, 0xec, 0x45, 0xbc, 0xf4, 0x01, 0x7c, 0x14, 0x9f, 0x4a, 0x9a, + 0xa4, 0x32, 0x9c, 0xfe, 0xd9, 0xff, 0xaa, 0x3d, 0x7c, 0xdf, 0xef, 0x3b, 0xe7, 0x24, 0x41, 0x51, + 0xc1, 0x79, 0x41, 0x21, 0x96, 0x35, 0x61, 0x0c, 0x44, 0x7c, 0x4c, 0xe2, 0x43, 0xa3, 0x88, 0x2a, + 0x39, 0xc3, 0xb5, 0xe0, 0x8a, 0xfb, 0x0f, 0x8d, 0x03, 0x5b, 0x07, 0x3e, 0x26, 0xe1, 0x33, 0x0b, + 0x91, 0xba, 0x8c, 0x09, 0x63, 0xdc, 0xf8, 0xa5, 0x01, 0xfe, 0xa8, 0xba, 0xda, 0x35, 0xdf, 0x62, + 0xa9, 0x44, 0x93, 0xab, 0xbf, 0xd4, 0xb3, 0x86, 0x15, 0x9c, 0x2c, 0x3b, 0xf9, 0xd1, 0x47, 0x77, + 0x17, 0xb6, 0xbf, 0x3f, 0x43, 0x5e, 0xc9, 0x24, 0x08, 0x15, 0x38, 0x91, 0x33, 0x1d, 0xa7, 0xcf, + 0xf1, 0xc5, 0x28, 0xb8, 0x33, 0xe3, 0x2f, 0xa2, 0x54, 0xf0, 0xfe, 0x4e, 0x66, 0x91, 0x16, 0x6e, + 0xea, 0x3d, 0x51, 0x10, 0xf4, 0x6e, 0x01, 0x1b, 0xc4, 0x5f, 0xa0, 0x07, 0x26, 0x66, 0xcb, 0xc5, + 0xd6, 0xc6, 0xb8, 0xd7, 0xc7, 0xdc, 0x37, 0xf0, 0x27, 0xf1, 0xd9, 0xc4, 0xbd, 0x46, 0x43, 0x01, + 0x35, 0x25, 0x39, 0x04, 0xfd, 0xeb, 0x53, 0x3a, 0xc6, 0x7f, 0x85, 0xbc, 0x3d, 0x50, 0x50, 0x10, + 0x0c, 0x34, 0x3d, 0xb9, 0x89, 0x7e, 0xab, 0x9d, 0xed, 0x2e, 0x86, 0x09, 0x2b, 0x34, 0xd0, 0x89, + 0xfe, 0x23, 0x34, 0x50, 0x64, 0x47, 0x41, 0x9f, 0xe6, 0x28, 0x33, 0x85, 0x1f, 0xa0, 0x61, 0xce, + 0x69, 0x73, 0x60, 0x32, 0xe8, 0x45, 0xee, 0x74, 0x94, 0x75, 0xa5, 0x9f, 0x22, 0xef, 0x48, 0x68, + 0x03, 0x32, 0x70, 0x23, 0x77, 0x3a, 0x4e, 0xc3, 0xae, 0x6d, 0x77, 0xb1, 0xf8, 0x63, 0x29, 0xd5, + 0xba, 0xb5, 0x64, 0xd6, 0x19, 0x66, 0xc8, 0x33, 0x03, 0xfc, 0xa7, 0x5b, 0x8a, 0x86, 0x15, 0x9c, + 0xb6, 0x12, 0x94, 0xbd, 0x96, 0xa7, 0xff, 0xd8, 0xe5, 0x03, 0x9c, 0x56, 0xa0, 0x32, 0xaf, 0xd2, + 0xdf, 0xf9, 0x18, 0x8d, 0x78, 0x0d, 0x42, 0xaf, 0x37, 0xff, 0xee, 0xa0, 0xc7, 0x39, 0x3f, 0x5c, + 0x52, 0xf3, 0x7b, 0xdd, 0x11, 0x2c, 0xdb, 0xf1, 0x96, 0xce, 0xd7, 0x97, 0xd6, 0x53, 0x70, 0x4a, + 0x58, 0x81, 0xb9, 0x28, 0xe2, 0x02, 0x98, 0x1e, 0x3e, 0x36, 0x12, 0xa9, 0x4b, 0x79, 0xf6, 0x10, + 0x67, 0xf6, 0xf7, 0x67, 0xef, 0xc9, 0x3b, 0x83, 0xbe, 0xa1, 0xbc, 0xd9, 0xe3, 0x95, 0x6d, 0xb2, + 0x4e, 0x7e, 0x75, 0xca, 0x46, 0x2b, 0x1b, 0xab, 0x6c, 0xd6, 0xc9, 0xce, 0xd3, 0xc1, 0x2f, 0x7e, + 0x07, 0x00, 0x00, 0xff, 0xff, 0x6b, 0x69, 0x1c, 0xbc, 0x51, 0x03, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/spanner/v1/query_plan.pb.go b/vendor/google.golang.org/genproto/googleapis/spanner/v1/query_plan.pb.go index 18a7ea3..b42db0f 100644 --- a/vendor/google.golang.org/genproto/googleapis/spanner/v1/query_plan.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/spanner/v1/query_plan.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/spanner/v1/query_plan.proto -// DO NOT EDIT! package spanner @@ -245,42 +244,43 @@ func init() { func init() { proto.RegisterFile("google/spanner/v1/query_plan.proto", fileDescriptor2) } var fileDescriptor2 = []byte{ - // 588 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0xd1, 0x6e, 0xd3, 0x30, - 0x14, 0x25, 0x5d, 0x5b, 0xd6, 0x5b, 0xd4, 0x15, 0x6f, 0x68, 0x51, 0x41, 0x22, 0x54, 0x42, 0xea, - 0x53, 0xa2, 0x6d, 0x3c, 0x4c, 0x43, 0x08, 0xba, 0xae, 0x9b, 0xaa, 0x55, 0xa5, 0x38, 0xc0, 0x03, - 0x42, 0x8a, 0xdc, 0xc6, 0x74, 0x56, 0x53, 0x3b, 0xc4, 0x4e, 0xb5, 0x3e, 0xf0, 0x0b, 0x7c, 0x08, - 0x3f, 0xc4, 0xef, 0x20, 0x3b, 0x69, 0x18, 0x14, 0x55, 0xe2, 0xed, 0x5e, 0xdf, 0x73, 0x4f, 0x7c, - 0xcf, 0xb9, 0x0e, 0xb4, 0x67, 0x42, 0xcc, 0x22, 0xea, 0xc9, 0x98, 0x70, 0x4e, 0x13, 0x6f, 0x79, - 0xe4, 0x7d, 0x4d, 0x69, 0xb2, 0x0a, 0xe2, 0x88, 0x70, 0x37, 0x4e, 0x84, 0x12, 0xe8, 0x61, 0x86, - 0x71, 0x73, 0x8c, 0xbb, 0x3c, 0x6a, 0x3d, 0xc9, 0xdb, 0x48, 0xcc, 0x3c, 0xc2, 0xb9, 0x50, 0x44, - 0x31, 0xc1, 0x65, 0xd6, 0x50, 0x54, 0x4d, 0x36, 0x49, 0xbf, 0x78, 0x52, 0x25, 0xe9, 0x54, 0x65, - 0xd5, 0xf6, 0xf7, 0x2a, 0xec, 0x8e, 0x23, 0xc2, 0x47, 0x22, 0xa4, 0xe8, 0x00, 0x2a, 0x8c, 0x87, - 0xf4, 0xd6, 0xb6, 0x1c, 0xab, 0x53, 0xc1, 0x59, 0x82, 0x5e, 0x40, 0x79, 0xce, 0x78, 0x68, 0x97, - 0x1c, 0xab, 0xd3, 0x38, 0x76, 0xdc, 0x8d, 0x0b, 0xb8, 0x6b, 0x02, 0xf7, 0x9a, 0xf1, 0x10, 0x1b, - 0x34, 0x7a, 0x06, 0x0f, 0x42, 0x26, 0xe3, 0x88, 0xac, 0x02, 0x4e, 0x16, 0xd4, 0xde, 0x71, 0xac, - 0x4e, 0x0d, 0xd7, 0xf3, 0xb3, 0x11, 0x59, 0x50, 0x74, 0x09, 0xf5, 0xe9, 0x0d, 0x8b, 0xc2, 0x20, - 0x62, 0x7c, 0x2e, 0xed, 0xb2, 0xb3, 0xd3, 0xa9, 0x1f, 0x3f, 0xdf, 0xc6, 0xdf, 0xd3, 0xf0, 0x21, - 0xe3, 0x73, 0x0c, 0xd3, 0x75, 0x28, 0xd1, 0x04, 0x0e, 0xe4, 0x8d, 0x48, 0x54, 0x90, 0xd0, 0x38, - 0xa1, 0x92, 0xf2, 0x4c, 0x00, 0xbb, 0xe2, 0x58, 0x9d, 0xfa, 0xb1, 0xb7, 0x8d, 0xd0, 0xd7, 0x7d, - 0xf8, 0x8f, 0x36, 0xbc, 0x2f, 0x37, 0x0f, 0xd1, 0x09, 0xec, 0x2e, 0xa8, 0x22, 0x21, 0x51, 0xc4, - 0xae, 0x1a, 0xde, 0xc3, 0x35, 0xef, 0x5a, 0x58, 0xd7, 0x37, 0xc2, 0xe2, 0x02, 0x88, 0xde, 0xc0, - 0x1e, 0xbd, 0xa5, 0xd3, 0x54, 0x33, 0x04, 0x52, 0x11, 0x25, 0xed, 0xfb, 0xdb, 0x7b, 0x1b, 0x05, - 0xde, 0xd7, 0xf0, 0xd6, 0x67, 0xa8, 0x15, 0x33, 0xa3, 0xa7, 0x6b, 0xbd, 0xee, 0x9a, 0x94, 0x09, - 0x31, 0x30, 0x4e, 0x21, 0x28, 0xab, 0x55, 0x4c, 0x8d, 0x53, 0x35, 0x6c, 0x62, 0xd4, 0x82, 0xdd, - 0x25, 0x49, 0x18, 0x99, 0x44, 0x6b, 0x0f, 0x8a, 0xbc, 0xf5, 0xd3, 0x82, 0xfd, 0x7f, 0x28, 0x80, - 0x1c, 0xa8, 0x87, 0x54, 0x4e, 0x13, 0x16, 0x1b, 0x1d, 0xad, 0xdc, 0xba, 0xdf, 0x47, 0x28, 0x00, - 0x90, 0xe9, 0x44, 0x2f, 0x27, 0xa3, 0xd2, 0x2e, 0x19, 0xe7, 0x5e, 0xff, 0xa7, 0xd0, 0xae, 0x5f, - 0x30, 0xf4, 0xb9, 0x4a, 0x56, 0xf8, 0x0e, 0x65, 0xeb, 0x15, 0xec, 0xfd, 0x55, 0x46, 0x4d, 0xd8, - 0x99, 0xd3, 0x55, 0x7e, 0x1b, 0x1d, 0xea, 0x7d, 0x5d, 0x92, 0x28, 0xcd, 0x06, 0xae, 0xe0, 0x2c, - 0x39, 0x2b, 0x9d, 0x5a, 0xed, 0x53, 0x28, 0xeb, 0x5d, 0x44, 0x07, 0xd0, 0xbc, 0x1e, 0x8c, 0x2e, - 0x82, 0x0f, 0x23, 0x7f, 0xdc, 0xef, 0x0d, 0x2e, 0x07, 0xfd, 0x8b, 0xe6, 0x3d, 0xd4, 0x00, 0xc0, - 0xfd, 0x61, 0xf7, 0xfd, 0xe0, 0xed, 0xa8, 0x3b, 0x6c, 0x5a, 0x08, 0xa0, 0xea, 0xf7, 0xba, 0xc3, - 0x2e, 0x6e, 0x96, 0xda, 0x57, 0x50, 0x7b, 0xa7, 0xdf, 0x9c, 0xbe, 0x39, 0x3a, 0x03, 0xd0, 0x4f, - 0x2f, 0xe0, 0x22, 0xa4, 0xd2, 0xb6, 0xcc, 0x98, 0x8f, 0xb7, 0x8c, 0x89, 0x6b, 0x71, 0x1e, 0xc9, - 0xf3, 0x6f, 0xf0, 0x68, 0x2a, 0x16, 0x9b, 0xe0, 0xf3, 0x46, 0xc1, 0x3f, 0xd6, 0xee, 0x8f, 0xad, - 0x4f, 0xa7, 0x39, 0x68, 0x26, 0x22, 0xc2, 0x67, 0xae, 0x48, 0x66, 0xde, 0x8c, 0x72, 0xb3, 0x1b, - 0x5e, 0x56, 0x22, 0x31, 0x93, 0x77, 0x7e, 0x0b, 0x2f, 0xf3, 0xf0, 0x47, 0xe9, 0xf0, 0x2a, 0x6b, - 0xed, 0x45, 0x22, 0x0d, 0x5d, 0x3f, 0xff, 0xca, 0xc7, 0xa3, 0x49, 0xd5, 0xb4, 0x9f, 0xfc, 0x0a, - 0x00, 0x00, 0xff, 0xff, 0xcc, 0x06, 0x5f, 0x9c, 0x54, 0x04, 0x00, 0x00, + // 604 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0xdd, 0x6e, 0xd3, 0x4c, + 0x10, 0xfd, 0x9c, 0x26, 0xf9, 0x9a, 0x09, 0x4a, 0xc3, 0xb6, 0xa8, 0x56, 0x40, 0xc2, 0x44, 0x42, + 0xca, 0x95, 0xad, 0xb4, 0x5c, 0x54, 0x45, 0x08, 0xd2, 0x34, 0xad, 0xa2, 0x46, 0x21, 0xac, 0xa1, + 0x17, 0x28, 0x92, 0xb5, 0x89, 0x97, 0x74, 0x15, 0x67, 0xd7, 0x78, 0xed, 0xa8, 0x79, 0x09, 0x6e, + 0x79, 0x07, 0x1e, 0x85, 0x17, 0xe0, 0x75, 0xd0, 0xae, 0x7f, 0x28, 0x14, 0x45, 0xe2, 0x6e, 0x66, + 0xe7, 0xcc, 0xf1, 0xce, 0x39, 0xb3, 0x86, 0xf6, 0x42, 0x88, 0x45, 0x40, 0x1d, 0x19, 0x12, 0xce, + 0x69, 0xe4, 0xac, 0xbb, 0xce, 0xe7, 0x84, 0x46, 0x1b, 0x2f, 0x0c, 0x08, 0xb7, 0xc3, 0x48, 0xc4, + 0x02, 0x3d, 0x4c, 0x31, 0x76, 0x86, 0xb1, 0xd7, 0xdd, 0xd6, 0x93, 0xac, 0x8d, 0x84, 0xcc, 0x21, + 0x9c, 0x8b, 0x98, 0xc4, 0x4c, 0x70, 0x99, 0x36, 0x14, 0x55, 0x9d, 0xcd, 0x92, 0x4f, 0x8e, 0x8c, + 0xa3, 0x64, 0x1e, 0xa7, 0xd5, 0xf6, 0x97, 0x2a, 0xec, 0x4e, 0x02, 0xc2, 0xc7, 0xc2, 0xa7, 0xe8, + 0x00, 0x2a, 0x8c, 0xfb, 0xf4, 0xd6, 0x34, 0x2c, 0xa3, 0x53, 0xc1, 0x69, 0x82, 0x5e, 0x40, 0x79, + 0xc9, 0xb8, 0x6f, 0x96, 0x2c, 0xa3, 0xd3, 0x38, 0xb2, 0xec, 0x7b, 0x17, 0xb0, 0x73, 0x02, 0xfb, + 0x8a, 0x71, 0x1f, 0x6b, 0x34, 0x7a, 0x06, 0x0f, 0x7c, 0x26, 0xc3, 0x80, 0x6c, 0x3c, 0x4e, 0x56, + 0xd4, 0xdc, 0xb1, 0x8c, 0x4e, 0x0d, 0xd7, 0xb3, 0xb3, 0x31, 0x59, 0x51, 0x74, 0x01, 0xf5, 0xf9, + 0x0d, 0x0b, 0x7c, 0x2f, 0x60, 0x7c, 0x29, 0xcd, 0xb2, 0xb5, 0xd3, 0xa9, 0x1f, 0x3d, 0xdf, 0xc6, + 0xdf, 0x57, 0xf0, 0x11, 0xe3, 0x4b, 0x0c, 0xf3, 0x3c, 0x94, 0x68, 0x06, 0x07, 0xf2, 0x46, 0x44, + 0xb1, 0x17, 0xd1, 0x30, 0xa2, 0x92, 0xf2, 0x54, 0x00, 0xb3, 0x62, 0x19, 0x9d, 0xfa, 0x91, 0xb3, + 0x8d, 0xd0, 0x55, 0x7d, 0xf8, 0xb7, 0x36, 0xbc, 0x2f, 0xef, 0x1f, 0xa2, 0x63, 0xd8, 0x5d, 0xd1, + 0x98, 0xf8, 0x24, 0x26, 0x66, 0x55, 0xf3, 0x1e, 0xe6, 0xbc, 0xb9, 0xb0, 0xb6, 0xab, 0x85, 0xc5, + 0x05, 0x10, 0xbd, 0x81, 0x3d, 0x7a, 0x4b, 0xe7, 0x89, 0x62, 0xf0, 0x64, 0x4c, 0x62, 0x69, 0xfe, + 0xbf, 0xbd, 0xb7, 0x51, 0xe0, 0x5d, 0x05, 0x6f, 0x4d, 0xa1, 0x56, 0xcc, 0x8c, 0x9e, 0xe6, 0x7a, + 0xdd, 0x35, 0x29, 0x15, 0x62, 0xa8, 0x9d, 0x42, 0x50, 0x8e, 0x37, 0x21, 0xd5, 0x4e, 0xd5, 0xb0, + 0x8e, 0x51, 0x0b, 0x76, 0xd7, 0x24, 0x62, 0x64, 0x16, 0xe4, 0x1e, 0x14, 0x79, 0xeb, 0x87, 0x01, + 0xfb, 0x7f, 0x51, 0x00, 0x59, 0x50, 0xf7, 0xa9, 0x9c, 0x47, 0x2c, 0xd4, 0x3a, 0x1a, 0x99, 0x75, + 0xbf, 0x8e, 0x90, 0x07, 0x20, 0x93, 0x99, 0x5a, 0x4e, 0x46, 0xa5, 0x59, 0xd2, 0xce, 0xbd, 0xfe, + 0x47, 0xa1, 0x6d, 0xb7, 0x60, 0x18, 0xf0, 0x38, 0xda, 0xe0, 0x3b, 0x94, 0xad, 0x57, 0xb0, 0xf7, + 0x47, 0x19, 0x35, 0x61, 0x67, 0x49, 0x37, 0xd9, 0x6d, 0x54, 0xa8, 0xf6, 0x75, 0x4d, 0x82, 0x24, + 0x1d, 0xb8, 0x82, 0xd3, 0xe4, 0xb4, 0x74, 0x62, 0xb4, 0x4f, 0xa0, 0xac, 0x76, 0x11, 0x1d, 0x40, + 0xf3, 0x6a, 0x38, 0x3e, 0xf7, 0x3e, 0x8c, 0xdd, 0xc9, 0xa0, 0x3f, 0xbc, 0x18, 0x0e, 0xce, 0x9b, + 0xff, 0xa1, 0x06, 0x00, 0x1e, 0x8c, 0x7a, 0xef, 0x87, 0x6f, 0xc7, 0xbd, 0x51, 0xd3, 0x40, 0x00, + 0x55, 0xb7, 0xdf, 0x1b, 0xf5, 0x70, 0xb3, 0xd4, 0xbe, 0x84, 0xda, 0x3b, 0xf5, 0xe6, 0xd4, 0xcd, + 0xd1, 0x29, 0x80, 0x7a, 0x7a, 0x1e, 0x17, 0x3e, 0x95, 0xa6, 0xa1, 0xc7, 0x7c, 0xbc, 0x65, 0x4c, + 0x5c, 0x0b, 0xb3, 0x48, 0x9e, 0x7d, 0x35, 0xe0, 0xd1, 0x5c, 0xac, 0xee, 0xa3, 0xcf, 0x1a, 0xc5, + 0x07, 0x26, 0xca, 0xfe, 0x89, 0xf1, 0xf1, 0x24, 0x03, 0x2d, 0x44, 0x40, 0xf8, 0xc2, 0x16, 0xd1, + 0xc2, 0x59, 0x50, 0xae, 0x97, 0xc3, 0x49, 0x4b, 0x24, 0x64, 0xf2, 0xce, 0x7f, 0xe1, 0x65, 0x16, + 0x7e, 0x2b, 0x1d, 0x5e, 0xa6, 0xad, 0xfd, 0x40, 0x24, 0xbe, 0xed, 0x66, 0x5f, 0xb9, 0xee, 0x7e, + 0xcf, 0x2b, 0x53, 0x5d, 0x99, 0x66, 0x95, 0xe9, 0x75, 0x77, 0x56, 0xd5, 0xc4, 0xc7, 0x3f, 0x03, + 0x00, 0x00, 0xff, 0xff, 0x53, 0xdb, 0x51, 0xa6, 0x6f, 0x04, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/spanner/v1/result_set.pb.go b/vendor/google.golang.org/genproto/googleapis/spanner/v1/result_set.pb.go index 1ea9bcd..18b53a0 100644 --- a/vendor/google.golang.org/genproto/googleapis/spanner/v1/result_set.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/spanner/v1/result_set.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/spanner/v1/result_set.proto -// DO NOT EDIT! package spanner @@ -277,36 +276,37 @@ func init() { func init() { proto.RegisterFile("google/spanner/v1/result_set.proto", fileDescriptor3) } var fileDescriptor3 = []byte{ - // 482 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x93, 0xcb, 0x6e, 0x13, 0x31, - 0x14, 0x86, 0x35, 0xe9, 0x85, 0xd4, 0x13, 0x10, 0xb5, 0x04, 0x1d, 0x45, 0x05, 0xa5, 0x29, 0x8b, - 0xac, 0x3c, 0x4a, 0x59, 0x10, 0xa9, 0x9b, 0xaa, 0x2c, 0xd8, 0x80, 0x14, 0x9c, 0xa8, 0x0b, 0x36, - 0xa3, 0xd3, 0xc4, 0x0c, 0xa3, 0x3a, 0xf6, 0xd4, 0xf6, 0x24, 0xca, 0x82, 0x25, 0x62, 0xc9, 0x7b, - 0xf0, 0x00, 0x3c, 0x1f, 0xf2, 0x25, 0x17, 0x98, 0x08, 0x09, 0xa9, 0x3b, 0xc7, 0xfe, 0xfe, 0xf3, - 0x9f, 0xff, 0xcc, 0x09, 0xea, 0xe6, 0x52, 0xe6, 0x9c, 0xa5, 0xba, 0x04, 0x21, 0x98, 0x4a, 0xe7, - 0xfd, 0x54, 0x31, 0x5d, 0x71, 0x93, 0x69, 0x66, 0x48, 0xa9, 0xa4, 0x91, 0xf8, 0xd8, 0x33, 0x24, - 0x30, 0x64, 0xde, 0x6f, 0x9f, 0x06, 0x19, 0x94, 0x45, 0x0a, 0x42, 0x48, 0x03, 0xa6, 0x90, 0x42, - 0x7b, 0xc1, 0xfa, 0xd5, 0xfd, 0xba, 0xad, 0x3e, 0xa7, 0xda, 0xa8, 0x6a, 0x12, 0xca, 0xb5, 0x77, - 0x58, 0xde, 0x57, 0x4c, 0x2d, 0xb3, 0x92, 0x83, 0x08, 0xcc, 0x79, 0x9d, 0x31, 0x0a, 0x84, 0x86, - 0x89, 0xf5, 0xf9, 0xcb, 0x66, 0x1b, 0x5a, 0x96, 0xcc, 0xbf, 0x76, 0x7f, 0x45, 0xe8, 0x88, 0xba, - 0x28, 0x23, 0x66, 0xf0, 0x15, 0x6a, 0xce, 0x98, 0x81, 0x29, 0x18, 0x48, 0xa2, 0x4e, 0xd4, 0x8b, - 0x2f, 0x5e, 0x91, 0x5a, 0x2c, 0xb2, 0xe6, 0x3f, 0x04, 0x96, 0xae, 0x55, 0x98, 0xa0, 0x7d, 0x25, - 0x17, 0x3a, 0x69, 0x74, 0xf6, 0x7a, 0xf1, 0x45, 0x7b, 0xa5, 0x5e, 0x65, 0x24, 0xef, 0x0b, 0x6d, - 0x6e, 0x80, 0x57, 0x8c, 0x3a, 0x0e, 0xbf, 0x41, 0x07, 0xda, 0x80, 0xd1, 0xc9, 0x9e, 0xb3, 0x3b, - 0xfb, 0x97, 0xdd, 0xc8, 0x82, 0xd4, 0xf3, 0xdd, 0x6f, 0x0d, 0xf4, 0x74, 0x08, 0xca, 0x14, 0xc0, - 0x1f, 0xb6, 0xff, 0xc3, 0xb9, 0x6d, 0x6f, 0x95, 0xe0, 0x79, 0x2d, 0x81, 0xef, 0x3e, 0x50, 0xf8, - 0x1c, 0x3d, 0x9e, 0x7c, 0xa9, 0xc4, 0x1d, 0x9b, 0x66, 0xee, 0xc6, 0xe5, 0x68, 0xd2, 0x56, 0xb8, - 0x74, 0x30, 0x3e, 0x43, 0x2d, 0xbb, 0x2e, 0x33, 0x96, 0x19, 0x79, 0xc7, 0x44, 0xb2, 0xdf, 0x89, - 0x7a, 0x2d, 0x1a, 0xfb, 0xbb, 0xb1, 0xbd, 0xda, 0xcc, 0xe1, 0xe0, 0x3f, 0xe7, 0xf0, 0x23, 0x42, - 0xc7, 0xb5, 0x40, 0x78, 0x80, 0x9a, 0x4a, 0x2e, 0x32, 0xfb, 0xa1, 0xc3, 0x20, 0x5e, 0xec, 0xa8, - 0x38, 0x72, 0x0b, 0x37, 0x5e, 0x96, 0x8c, 0x3e, 0x52, 0x72, 0x61, 0x0f, 0xf8, 0x0a, 0xc5, 0x5b, - 0x3b, 0x94, 0x34, 0x9c, 0xf8, 0xe5, 0x0e, 0xf1, 0x78, 0x43, 0xd1, 0x6d, 0x49, 0xf7, 0x7b, 0x84, - 0x9e, 0xfc, 0xd9, 0x2b, 0xbe, 0x44, 0x68, 0xb3, 0xbc, 0xa1, 0xa1, 0xd3, 0x1d, 0x35, 0x3f, 0x5a, - 0x68, 0xc8, 0x41, 0xd0, 0xa3, 0xfb, 0xd5, 0x11, 0x0f, 0x50, 0xec, 0xc5, 0x7e, 0x40, 0xbe, 0xa3, - 0x93, 0xda, 0x77, 0xf1, 0x61, 0xa8, 0x37, 0x72, 0xb6, 0xd7, 0x5f, 0xd1, 0xb3, 0x89, 0x9c, 0xd5, - 0x7d, 0xae, 0x37, 0xfd, 0x0d, 0xad, 0x7c, 0x18, 0x7d, 0x1a, 0x04, 0x28, 0x97, 0x1c, 0x44, 0x4e, - 0xa4, 0xca, 0xd3, 0x9c, 0x09, 0x57, 0x3c, 0xf5, 0x4f, 0x50, 0x16, 0x7a, 0xeb, 0x4f, 0x74, 0x19, - 0x8e, 0x3f, 0x1b, 0x27, 0xef, 0xbc, 0xf4, 0x2d, 0x97, 0xd5, 0x94, 0x8c, 0x82, 0xcb, 0x4d, 0xff, - 0xf6, 0xd0, 0xc9, 0x5f, 0xff, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xe1, 0x15, 0x1f, 0xa6, 0x3e, 0x04, - 0x00, 0x00, + // 501 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x93, 0xcd, 0x6e, 0x13, 0x31, + 0x14, 0x85, 0xe5, 0xf4, 0x87, 0xd4, 0x13, 0x10, 0xb5, 0x04, 0x1d, 0x45, 0x05, 0xa5, 0x29, 0x8b, + 0xac, 0x3c, 0x4a, 0x59, 0x10, 0xa9, 0x9b, 0xaa, 0x2c, 0xd8, 0x80, 0x14, 0x9c, 0x28, 0x0b, 0x14, + 0x69, 0xe4, 0x26, 0x66, 0x18, 0x75, 0x62, 0x4f, 0x6d, 0x4f, 0xa2, 0x3c, 0x00, 0x62, 0xc9, 0x9e, + 0x47, 0xe0, 0x01, 0x78, 0x08, 0x9e, 0x88, 0x25, 0xf2, 0xcf, 0x24, 0x81, 0x19, 0x21, 0x21, 0x75, + 0xe7, 0xf8, 0x7e, 0xe7, 0x9e, 0x7b, 0x3c, 0x37, 0xb0, 0x9b, 0x08, 0x91, 0x64, 0x2c, 0x52, 0x39, + 0xe5, 0x9c, 0xc9, 0x68, 0xd9, 0x8f, 0x24, 0x53, 0x45, 0xa6, 0x63, 0xc5, 0x34, 0xce, 0xa5, 0xd0, + 0x02, 0x1d, 0x3b, 0x06, 0x7b, 0x06, 0x2f, 0xfb, 0xed, 0x53, 0x2f, 0xa3, 0x79, 0x1a, 0x51, 0xce, + 0x85, 0xa6, 0x3a, 0x15, 0x5c, 0x39, 0xc1, 0xa6, 0x6a, 0x7f, 0xdd, 0x14, 0x1f, 0x23, 0xa5, 0x65, + 0x31, 0xf3, 0xed, 0xda, 0x35, 0x96, 0x77, 0x05, 0x93, 0xeb, 0x38, 0xcf, 0x28, 0xf7, 0xcc, 0x79, + 0x95, 0xd1, 0x92, 0x72, 0x45, 0x67, 0xc6, 0xe7, 0x2f, 0x9b, 0x5d, 0x68, 0x9d, 0x33, 0x57, 0xed, + 0xfe, 0x00, 0xf0, 0x88, 0xd8, 0x28, 0x23, 0xa6, 0xd1, 0x15, 0x6c, 0x2e, 0x98, 0xa6, 0x73, 0xaa, + 0x69, 0x08, 0x3a, 0xa0, 0x17, 0x5c, 0xbc, 0xc0, 0x95, 0x58, 0x78, 0xc3, 0xbf, 0xf3, 0x2c, 0xd9, + 0xa8, 0x10, 0x86, 0xfb, 0x52, 0xac, 0x54, 0xd8, 0xe8, 0xec, 0xf5, 0x82, 0x8b, 0x76, 0xa9, 0x2e, + 0x33, 0xe2, 0xb7, 0xa9, 0xd2, 0x13, 0x9a, 0x15, 0x8c, 0x58, 0x0e, 0xbd, 0x82, 0x07, 0x4a, 0x53, + 0xad, 0xc2, 0x3d, 0x6b, 0x77, 0xf6, 0x2f, 0xbb, 0x91, 0x01, 0x89, 0xe3, 0xbb, 0x9f, 0x1b, 0xf0, + 0xf1, 0x90, 0x4a, 0x9d, 0xd2, 0xec, 0x7e, 0xe7, 0x3f, 0x5c, 0x9a, 0xf1, 0xca, 0x04, 0x4f, 0x2b, + 0x09, 0xdc, 0xf4, 0x9e, 0x42, 0xe7, 0xf0, 0xe1, 0xec, 0x53, 0xc1, 0x6f, 0xd9, 0x3c, 0xb6, 0x37, + 0x36, 0x47, 0x93, 0xb4, 0xfc, 0xa5, 0x85, 0xd1, 0x19, 0x6c, 0x99, 0x75, 0x59, 0xb0, 0x58, 0x8b, + 0x5b, 0xc6, 0xc3, 0xfd, 0x0e, 0xe8, 0xb5, 0x48, 0xe0, 0xee, 0xc6, 0xe6, 0x6a, 0xfb, 0x0e, 0x07, + 0xff, 0xf9, 0x0e, 0x5f, 0x01, 0x3c, 0xae, 0x04, 0x42, 0x03, 0xd8, 0x94, 0x62, 0x15, 0x9b, 0x0f, + 0xed, 0x1f, 0xe2, 0x59, 0x4d, 0xc7, 0x91, 0x5d, 0xb8, 0xf1, 0x3a, 0x67, 0xe4, 0x81, 0x14, 0x2b, + 0x73, 0x40, 0x57, 0x30, 0xd8, 0xd9, 0xa1, 0xb0, 0x61, 0xc5, 0xcf, 0x6b, 0xc4, 0xe3, 0x2d, 0x45, + 0x76, 0x25, 0xdd, 0x2f, 0x00, 0x3e, 0xfa, 0x73, 0x56, 0x74, 0x09, 0xe1, 0x76, 0x79, 0xfd, 0x40, + 0xa7, 0x35, 0x3d, 0xdf, 0x1b, 0x68, 0x98, 0x51, 0x4e, 0x8e, 0xee, 0xca, 0x23, 0x1a, 0xc0, 0xc0, + 0x89, 0xdd, 0x03, 0xb9, 0x89, 0x4e, 0x2a, 0xdf, 0xc5, 0x85, 0x21, 0xce, 0xc8, 0xda, 0x5e, 0x7f, + 0x03, 0xf0, 0xc9, 0x4c, 0x2c, 0xaa, 0x46, 0xd7, 0xdb, 0x01, 0x87, 0x46, 0x3f, 0x04, 0x1f, 0x06, + 0x1e, 0x4a, 0x44, 0x46, 0x79, 0x82, 0x85, 0x4c, 0xa2, 0x84, 0x71, 0xdb, 0x3d, 0x72, 0x25, 0x9a, + 0xa7, 0x6a, 0xe7, 0x5f, 0x74, 0xe9, 0x8f, 0xbf, 0x00, 0xf8, 0xde, 0x38, 0x79, 0xe3, 0xd4, 0xaf, + 0x33, 0x51, 0xcc, 0xf1, 0xc8, 0x1b, 0x4d, 0xfa, 0x3f, 0xcb, 0xca, 0xd4, 0x56, 0xa6, 0xbe, 0x32, + 0x9d, 0xf4, 0x6f, 0x0e, 0x6d, 0xef, 0x97, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x06, 0x67, 0x6c, + 0xee, 0x5c, 0x04, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/spanner/v1/spanner.pb.go b/vendor/google.golang.org/genproto/googleapis/spanner/v1/spanner.pb.go index d6e3bd6..6feb97a 100644 --- a/vendor/google.golang.org/genproto/googleapis/spanner/v1/spanner.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/spanner/v1/spanner.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/spanner/v1/spanner.proto -// DO NOT EDIT! package spanner @@ -8,7 +7,6 @@ import proto "github.com/golang/protobuf/proto" import fmt "fmt" import math "math" import _ "google.golang.org/genproto/googleapis/api/annotations" -import _ "google.golang.org/genproto/googleapis/api/serviceconfig" import google_protobuf4 "github.com/golang/protobuf/ptypes/empty" import google_protobuf1 "github.com/golang/protobuf/ptypes/struct" import google_protobuf3 "github.com/golang/protobuf/ptypes/timestamp" @@ -53,13 +51,15 @@ func (x ExecuteSqlRequest_QueryMode) String() string { return proto.EnumName(ExecuteSqlRequest_QueryMode_name, int32(x)) } func (ExecuteSqlRequest_QueryMode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor4, []int{4, 0} + return fileDescriptor4, []int{6, 0} } // The request for [CreateSession][google.spanner.v1.Spanner.CreateSession]. type CreateSessionRequest struct { // Required. The database in which the new session is created. Database string `protobuf:"bytes,1,opt,name=database" json:"database,omitempty"` + // The session to create. + Session *Session `protobuf:"bytes,2,opt,name=session" json:"session,omitempty"` } func (m *CreateSessionRequest) Reset() { *m = CreateSessionRequest{} } @@ -74,10 +74,33 @@ func (m *CreateSessionRequest) GetDatabase() string { return "" } +func (m *CreateSessionRequest) GetSession() *Session { + if m != nil { + return m.Session + } + return nil +} + // A session in the Cloud Spanner API. type Session struct { - // Required. The name of the session. + // The name of the session. This is always system-assigned; values provided + // when creating a session are ignored. Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The labels for the session. + // + // * Label keys must be between 1 and 63 characters long and must conform to + // the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`. + // * Label values must be between 0 and 63 characters long and must conform + // to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`. + // * No more than 64 labels can be associated with a given session. + // + // See https://goo.gl/xmQnxf for more information on and examples of labels. + Labels map[string]string `protobuf:"bytes,2,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Output only. The timestamp when the session is created. + CreateTime *google_protobuf3.Timestamp `protobuf:"bytes,3,opt,name=create_time,json=createTime" json:"create_time,omitempty"` + // Output only. The approximate timestamp when the session is last used. It is + // typically earlier than the actual last use time. + ApproximateLastUseTime *google_protobuf3.Timestamp `protobuf:"bytes,4,opt,name=approximate_last_use_time,json=approximateLastUseTime" json:"approximate_last_use_time,omitempty"` } func (m *Session) Reset() { *m = Session{} } @@ -92,6 +115,27 @@ func (m *Session) GetName() string { return "" } +func (m *Session) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +func (m *Session) GetCreateTime() *google_protobuf3.Timestamp { + if m != nil { + return m.CreateTime + } + return nil +} + +func (m *Session) GetApproximateLastUseTime() *google_protobuf3.Timestamp { + if m != nil { + return m.ApproximateLastUseTime + } + return nil +} + // The request for [GetSession][google.spanner.v1.Spanner.GetSession]. type GetSessionRequest struct { // Required. The name of the session to retrieve. @@ -110,6 +154,92 @@ func (m *GetSessionRequest) GetName() string { return "" } +// The request for [ListSessions][google.spanner.v1.Spanner.ListSessions]. +type ListSessionsRequest struct { + // Required. The database in which to list sessions. + Database string `protobuf:"bytes,1,opt,name=database" json:"database,omitempty"` + // Number of sessions to be returned in the response. If 0 or less, defaults + // to the server's maximum allowed page size. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // If non-empty, `page_token` should contain a + // [next_page_token][google.spanner.v1.ListSessionsResponse.next_page_token] from a previous + // [ListSessionsResponse][google.spanner.v1.ListSessionsResponse]. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // An expression for filtering the results of the request. Filter rules are + // case insensitive. The fields eligible for filtering are: + // + // * `labels.key` where key is the name of a label + // + // Some examples of using filters are: + // + // * `labels.env:*` --> The session has the label "env". + // * `labels.env:dev` --> The session has the label "env" and the value of + // the label contains the string "dev". + Filter string `protobuf:"bytes,4,opt,name=filter" json:"filter,omitempty"` +} + +func (m *ListSessionsRequest) Reset() { *m = ListSessionsRequest{} } +func (m *ListSessionsRequest) String() string { return proto.CompactTextString(m) } +func (*ListSessionsRequest) ProtoMessage() {} +func (*ListSessionsRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{3} } + +func (m *ListSessionsRequest) GetDatabase() string { + if m != nil { + return m.Database + } + return "" +} + +func (m *ListSessionsRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListSessionsRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListSessionsRequest) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +// The response for [ListSessions][google.spanner.v1.Spanner.ListSessions]. +type ListSessionsResponse struct { + // The list of requested sessions. + Sessions []*Session `protobuf:"bytes,1,rep,name=sessions" json:"sessions,omitempty"` + // `next_page_token` can be sent in a subsequent + // [ListSessions][google.spanner.v1.Spanner.ListSessions] call to fetch more of the matching + // sessions. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListSessionsResponse) Reset() { *m = ListSessionsResponse{} } +func (m *ListSessionsResponse) String() string { return proto.CompactTextString(m) } +func (*ListSessionsResponse) ProtoMessage() {} +func (*ListSessionsResponse) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{4} } + +func (m *ListSessionsResponse) GetSessions() []*Session { + if m != nil { + return m.Sessions + } + return nil +} + +func (m *ListSessionsResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + // The request for [DeleteSession][google.spanner.v1.Spanner.DeleteSession]. type DeleteSessionRequest struct { // Required. The name of the session to delete. @@ -119,7 +249,7 @@ type DeleteSessionRequest struct { func (m *DeleteSessionRequest) Reset() { *m = DeleteSessionRequest{} } func (m *DeleteSessionRequest) String() string { return proto.CompactTextString(m) } func (*DeleteSessionRequest) ProtoMessage() {} -func (*DeleteSessionRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{3} } +func (*DeleteSessionRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{5} } func (m *DeleteSessionRequest) GetName() string { if m != nil { @@ -170,14 +300,20 @@ type ExecuteSqlRequest struct { // request that yielded this token. ResumeToken []byte `protobuf:"bytes,6,opt,name=resume_token,json=resumeToken,proto3" json:"resume_token,omitempty"` // Used to control the amount of debugging information returned in - // [ResultSetStats][google.spanner.v1.ResultSetStats]. + // [ResultSetStats][google.spanner.v1.ResultSetStats]. If [partition_token][google.spanner.v1.ExecuteSqlRequest.partition_token] is set, [query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode] can only + // be set to [QueryMode.NORMAL][google.spanner.v1.ExecuteSqlRequest.QueryMode.NORMAL]. QueryMode ExecuteSqlRequest_QueryMode `protobuf:"varint,7,opt,name=query_mode,json=queryMode,enum=google.spanner.v1.ExecuteSqlRequest_QueryMode" json:"query_mode,omitempty"` + // If present, results will be restricted to the specified partition + // previously created using PartitionQuery(). There must be an exact + // match for the values of fields common to this message and the + // PartitionQueryRequest message used to create this partition_token. + PartitionToken []byte `protobuf:"bytes,8,opt,name=partition_token,json=partitionToken,proto3" json:"partition_token,omitempty"` } func (m *ExecuteSqlRequest) Reset() { *m = ExecuteSqlRequest{} } func (m *ExecuteSqlRequest) String() string { return proto.CompactTextString(m) } func (*ExecuteSqlRequest) ProtoMessage() {} -func (*ExecuteSqlRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{4} } +func (*ExecuteSqlRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{6} } func (m *ExecuteSqlRequest) GetSession() string { if m != nil { @@ -228,6 +364,273 @@ func (m *ExecuteSqlRequest) GetQueryMode() ExecuteSqlRequest_QueryMode { return ExecuteSqlRequest_NORMAL } +func (m *ExecuteSqlRequest) GetPartitionToken() []byte { + if m != nil { + return m.PartitionToken + } + return nil +} + +// Options for a PartitionQueryRequest and +// PartitionReadRequest. +type PartitionOptions struct { + // **Note:** This hint is currently ignored by PartitionQuery and + // PartitionRead requests. + // + // The desired data size for each partition generated. The default for this + // option is currently 1 GiB. This is only a hint. The actual size of each + // partition may be smaller or larger than this size request. + PartitionSizeBytes int64 `protobuf:"varint,1,opt,name=partition_size_bytes,json=partitionSizeBytes" json:"partition_size_bytes,omitempty"` + // **Note:** This hint is currently ignored by PartitionQuery and + // PartitionRead requests. + // + // The desired maximum number of partitions to return. For example, this may + // be set to the number of workers available. The default for this option + // is currently 10,000. The maximum value is currently 200,000. This is only + // a hint. The actual number of partitions returned may be smaller or larger + // than this maximum count request. + MaxPartitions int64 `protobuf:"varint,2,opt,name=max_partitions,json=maxPartitions" json:"max_partitions,omitempty"` +} + +func (m *PartitionOptions) Reset() { *m = PartitionOptions{} } +func (m *PartitionOptions) String() string { return proto.CompactTextString(m) } +func (*PartitionOptions) ProtoMessage() {} +func (*PartitionOptions) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{7} } + +func (m *PartitionOptions) GetPartitionSizeBytes() int64 { + if m != nil { + return m.PartitionSizeBytes + } + return 0 +} + +func (m *PartitionOptions) GetMaxPartitions() int64 { + if m != nil { + return m.MaxPartitions + } + return 0 +} + +// The request for [PartitionQuery][google.spanner.v1.Spanner.PartitionQuery] +type PartitionQueryRequest struct { + // Required. The session used to create the partitions. + Session string `protobuf:"bytes,1,opt,name=session" json:"session,omitempty"` + // Read only snapshot transactions are supported, read/write and single use + // transactions are not. + Transaction *TransactionSelector `protobuf:"bytes,2,opt,name=transaction" json:"transaction,omitempty"` + // The query request to generate partitions for. The request will fail if + // the query is not root partitionable. The query plan of a root + // partitionable query has a single distributed union operator. A distributed + // union operator conceptually divides one or more tables into multiple + // splits, remotely evaluates a subquery independently on each split, and + // then unions all results. + Sql string `protobuf:"bytes,3,opt,name=sql" json:"sql,omitempty"` + // The SQL query string can contain parameter placeholders. A parameter + // placeholder consists of `'@'` followed by the parameter + // name. Parameter names consist of any combination of letters, + // numbers, and underscores. + // + // Parameters can appear anywhere that a literal value is expected. The same + // parameter name can be used more than once, for example: + // `"WHERE id > @msg_id AND id < @msg_id + 100"` + // + // It is an error to execute an SQL query with unbound parameters. + // + // Parameter values are specified using `params`, which is a JSON + // object whose keys are parameter names, and whose values are the + // corresponding parameter values. + Params *google_protobuf1.Struct `protobuf:"bytes,4,opt,name=params" json:"params,omitempty"` + // It is not always possible for Cloud Spanner to infer the right SQL type + // from a JSON value. For example, values of type `BYTES` and values + // of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. + // + // In these cases, `param_types` can be used to specify the exact + // SQL type for some or all of the SQL query parameters. See the + // definition of [Type][google.spanner.v1.Type] for more information + // about SQL types. + ParamTypes map[string]*Type `protobuf:"bytes,5,rep,name=param_types,json=paramTypes" json:"param_types,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Additional options that affect how many partitions are created. + PartitionOptions *PartitionOptions `protobuf:"bytes,6,opt,name=partition_options,json=partitionOptions" json:"partition_options,omitempty"` +} + +func (m *PartitionQueryRequest) Reset() { *m = PartitionQueryRequest{} } +func (m *PartitionQueryRequest) String() string { return proto.CompactTextString(m) } +func (*PartitionQueryRequest) ProtoMessage() {} +func (*PartitionQueryRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{8} } + +func (m *PartitionQueryRequest) GetSession() string { + if m != nil { + return m.Session + } + return "" +} + +func (m *PartitionQueryRequest) GetTransaction() *TransactionSelector { + if m != nil { + return m.Transaction + } + return nil +} + +func (m *PartitionQueryRequest) GetSql() string { + if m != nil { + return m.Sql + } + return "" +} + +func (m *PartitionQueryRequest) GetParams() *google_protobuf1.Struct { + if m != nil { + return m.Params + } + return nil +} + +func (m *PartitionQueryRequest) GetParamTypes() map[string]*Type { + if m != nil { + return m.ParamTypes + } + return nil +} + +func (m *PartitionQueryRequest) GetPartitionOptions() *PartitionOptions { + if m != nil { + return m.PartitionOptions + } + return nil +} + +// The request for [PartitionRead][google.spanner.v1.Spanner.PartitionRead] +type PartitionReadRequest struct { + // Required. The session used to create the partitions. + Session string `protobuf:"bytes,1,opt,name=session" json:"session,omitempty"` + // Read only snapshot transactions are supported, read/write and single use + // transactions are not. + Transaction *TransactionSelector `protobuf:"bytes,2,opt,name=transaction" json:"transaction,omitempty"` + // Required. The name of the table in the database to be read. + Table string `protobuf:"bytes,3,opt,name=table" json:"table,omitempty"` + // If non-empty, the name of an index on [table][google.spanner.v1.PartitionReadRequest.table]. This index is + // used instead of the table primary key when interpreting [key_set][google.spanner.v1.PartitionReadRequest.key_set] + // and sorting result rows. See [key_set][google.spanner.v1.PartitionReadRequest.key_set] for further information. + Index string `protobuf:"bytes,4,opt,name=index" json:"index,omitempty"` + // The columns of [table][google.spanner.v1.PartitionReadRequest.table] to be returned for each row matching + // this request. + Columns []string `protobuf:"bytes,5,rep,name=columns" json:"columns,omitempty"` + // Required. `key_set` identifies the rows to be yielded. `key_set` names the + // primary keys of the rows in [table][google.spanner.v1.PartitionReadRequest.table] to be yielded, unless [index][google.spanner.v1.PartitionReadRequest.index] + // is present. If [index][google.spanner.v1.PartitionReadRequest.index] is present, then [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names + // index keys in [index][google.spanner.v1.PartitionReadRequest.index]. + // + // It is not an error for the `key_set` to name rows that do not + // exist in the database. Read yields nothing for nonexistent rows. + KeySet *KeySet `protobuf:"bytes,6,opt,name=key_set,json=keySet" json:"key_set,omitempty"` + // Additional options that affect how many partitions are created. + PartitionOptions *PartitionOptions `protobuf:"bytes,9,opt,name=partition_options,json=partitionOptions" json:"partition_options,omitempty"` +} + +func (m *PartitionReadRequest) Reset() { *m = PartitionReadRequest{} } +func (m *PartitionReadRequest) String() string { return proto.CompactTextString(m) } +func (*PartitionReadRequest) ProtoMessage() {} +func (*PartitionReadRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{9} } + +func (m *PartitionReadRequest) GetSession() string { + if m != nil { + return m.Session + } + return "" +} + +func (m *PartitionReadRequest) GetTransaction() *TransactionSelector { + if m != nil { + return m.Transaction + } + return nil +} + +func (m *PartitionReadRequest) GetTable() string { + if m != nil { + return m.Table + } + return "" +} + +func (m *PartitionReadRequest) GetIndex() string { + if m != nil { + return m.Index + } + return "" +} + +func (m *PartitionReadRequest) GetColumns() []string { + if m != nil { + return m.Columns + } + return nil +} + +func (m *PartitionReadRequest) GetKeySet() *KeySet { + if m != nil { + return m.KeySet + } + return nil +} + +func (m *PartitionReadRequest) GetPartitionOptions() *PartitionOptions { + if m != nil { + return m.PartitionOptions + } + return nil +} + +// Information returned for each partition returned in a +// PartitionResponse. +type Partition struct { + // This token can be passed to Read, StreamingRead, ExecuteSql, or + // ExecuteStreamingSql requests to restrict the results to those identified by + // this partition token. + PartitionToken []byte `protobuf:"bytes,1,opt,name=partition_token,json=partitionToken,proto3" json:"partition_token,omitempty"` +} + +func (m *Partition) Reset() { *m = Partition{} } +func (m *Partition) String() string { return proto.CompactTextString(m) } +func (*Partition) ProtoMessage() {} +func (*Partition) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{10} } + +func (m *Partition) GetPartitionToken() []byte { + if m != nil { + return m.PartitionToken + } + return nil +} + +// The response for [PartitionQuery][google.spanner.v1.Spanner.PartitionQuery] +// or [PartitionRead][google.spanner.v1.Spanner.PartitionRead] +type PartitionResponse struct { + // Partitions created by this request. + Partitions []*Partition `protobuf:"bytes,1,rep,name=partitions" json:"partitions,omitempty"` + // Transaction created by this request. + Transaction *Transaction `protobuf:"bytes,2,opt,name=transaction" json:"transaction,omitempty"` +} + +func (m *PartitionResponse) Reset() { *m = PartitionResponse{} } +func (m *PartitionResponse) String() string { return proto.CompactTextString(m) } +func (*PartitionResponse) ProtoMessage() {} +func (*PartitionResponse) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{11} } + +func (m *PartitionResponse) GetPartitions() []*Partition { + if m != nil { + return m.Partitions + } + return nil +} + +func (m *PartitionResponse) GetTransaction() *Transaction { + if m != nil { + return m.Transaction + } + return nil +} + // The request for [Read][google.spanner.v1.Spanner.Read] and // [StreamingRead][google.spanner.v1.Spanner.StreamingRead]. type ReadRequest struct { @@ -250,14 +653,17 @@ type ReadRequest struct { // is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names // index keys in [index][google.spanner.v1.ReadRequest.index]. // - // Rows are yielded in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) - // or index key order (if [index][google.spanner.v1.ReadRequest.index] is non-empty). + // If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is empty, rows are yielded + // in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) or index key order + // (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is not + // empty, rows will be yielded in an unspecified order. // // It is not an error for the `key_set` to name rows that do not // exist in the database. Read yields nothing for nonexistent rows. KeySet *KeySet `protobuf:"bytes,6,opt,name=key_set,json=keySet" json:"key_set,omitempty"` // If greater than zero, only the first `limit` rows are yielded. If `limit` - // is zero, the default is no limit. + // is zero, the default is no limit. A limit cannot be specified if + // `partition_token` is set. Limit int64 `protobuf:"varint,8,opt,name=limit" json:"limit,omitempty"` // If this request is resuming a previously interrupted read, // `resume_token` should be copied from the last @@ -266,12 +672,17 @@ type ReadRequest struct { // rest of the request parameters must exactly match the request // that yielded this token. ResumeToken []byte `protobuf:"bytes,9,opt,name=resume_token,json=resumeToken,proto3" json:"resume_token,omitempty"` + // If present, results will be restricted to the specified partition + // previously created using PartitionRead(). There must be an exact + // match for the values of fields common to this message and the + // PartitionReadRequest message used to create this partition_token. + PartitionToken []byte `protobuf:"bytes,10,opt,name=partition_token,json=partitionToken,proto3" json:"partition_token,omitempty"` } func (m *ReadRequest) Reset() { *m = ReadRequest{} } func (m *ReadRequest) String() string { return proto.CompactTextString(m) } func (*ReadRequest) ProtoMessage() {} -func (*ReadRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{5} } +func (*ReadRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{12} } func (m *ReadRequest) GetSession() string { if m != nil { @@ -329,6 +740,13 @@ func (m *ReadRequest) GetResumeToken() []byte { return nil } +func (m *ReadRequest) GetPartitionToken() []byte { + if m != nil { + return m.PartitionToken + } + return nil +} + // The request for [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction]. type BeginTransactionRequest struct { // Required. The session in which the transaction runs. @@ -340,7 +758,7 @@ type BeginTransactionRequest struct { func (m *BeginTransactionRequest) Reset() { *m = BeginTransactionRequest{} } func (m *BeginTransactionRequest) String() string { return proto.CompactTextString(m) } func (*BeginTransactionRequest) ProtoMessage() {} -func (*BeginTransactionRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{6} } +func (*BeginTransactionRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{13} } func (m *BeginTransactionRequest) GetSession() string { if m != nil { @@ -375,7 +793,7 @@ type CommitRequest struct { func (m *CommitRequest) Reset() { *m = CommitRequest{} } func (m *CommitRequest) String() string { return proto.CompactTextString(m) } func (*CommitRequest) ProtoMessage() {} -func (*CommitRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{7} } +func (*CommitRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{14} } type isCommitRequest_Transaction interface { isCommitRequest_Transaction() @@ -505,7 +923,7 @@ type CommitResponse struct { func (m *CommitResponse) Reset() { *m = CommitResponse{} } func (m *CommitResponse) String() string { return proto.CompactTextString(m) } func (*CommitResponse) ProtoMessage() {} -func (*CommitResponse) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{8} } +func (*CommitResponse) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{15} } func (m *CommitResponse) GetCommitTimestamp() *google_protobuf3.Timestamp { if m != nil { @@ -525,7 +943,7 @@ type RollbackRequest struct { func (m *RollbackRequest) Reset() { *m = RollbackRequest{} } func (m *RollbackRequest) String() string { return proto.CompactTextString(m) } func (*RollbackRequest) ProtoMessage() {} -func (*RollbackRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{9} } +func (*RollbackRequest) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{16} } func (m *RollbackRequest) GetSession() string { if m != nil { @@ -545,8 +963,15 @@ func init() { proto.RegisterType((*CreateSessionRequest)(nil), "google.spanner.v1.CreateSessionRequest") proto.RegisterType((*Session)(nil), "google.spanner.v1.Session") proto.RegisterType((*GetSessionRequest)(nil), "google.spanner.v1.GetSessionRequest") + proto.RegisterType((*ListSessionsRequest)(nil), "google.spanner.v1.ListSessionsRequest") + proto.RegisterType((*ListSessionsResponse)(nil), "google.spanner.v1.ListSessionsResponse") proto.RegisterType((*DeleteSessionRequest)(nil), "google.spanner.v1.DeleteSessionRequest") proto.RegisterType((*ExecuteSqlRequest)(nil), "google.spanner.v1.ExecuteSqlRequest") + proto.RegisterType((*PartitionOptions)(nil), "google.spanner.v1.PartitionOptions") + proto.RegisterType((*PartitionQueryRequest)(nil), "google.spanner.v1.PartitionQueryRequest") + proto.RegisterType((*PartitionReadRequest)(nil), "google.spanner.v1.PartitionReadRequest") + proto.RegisterType((*Partition)(nil), "google.spanner.v1.Partition") + proto.RegisterType((*PartitionResponse)(nil), "google.spanner.v1.PartitionResponse") proto.RegisterType((*ReadRequest)(nil), "google.spanner.v1.ReadRequest") proto.RegisterType((*BeginTransactionRequest)(nil), "google.spanner.v1.BeginTransactionRequest") proto.RegisterType((*CommitRequest)(nil), "google.spanner.v1.CommitRequest") @@ -590,6 +1015,8 @@ type SpannerClient interface { // This is mainly useful for determining whether a session is still // alive. GetSession(ctx context.Context, in *GetSessionRequest, opts ...grpc.CallOption) (*Session, error) + // Lists all sessions in a given database. + ListSessions(ctx context.Context, in *ListSessionsRequest, opts ...grpc.CallOption) (*ListSessionsResponse, error) // Ends a session, releasing server resources associated with it. DeleteSession(ctx context.Context, in *DeleteSessionRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) // Executes an SQL query, returning all rows in a single reply. This @@ -653,6 +1080,24 @@ type SpannerClient interface { // transaction was already aborted, or the transaction is not // found. `Rollback` never returns `ABORTED`. Rollback(ctx context.Context, in *RollbackRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) + // Creates a set of partition tokens that can be used to execute a query + // operation in parallel. Each of the returned partition tokens can be used + // by [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] to specify a subset + // of the query result to read. The same session and read-only transaction + // must be used by the PartitionQueryRequest used to create the + // partition tokens and the ExecuteSqlRequests that use the partition tokens. + // Partition tokens become invalid when the session used to create them + // is deleted or begins a new transaction. + PartitionQuery(ctx context.Context, in *PartitionQueryRequest, opts ...grpc.CallOption) (*PartitionResponse, error) + // Creates a set of partition tokens that can be used to execute a read + // operation in parallel. Each of the returned partition tokens can be used + // by [StreamingRead][google.spanner.v1.Spanner.StreamingRead] to specify a subset of the read + // result to read. The same session and read-only transaction must be used by + // the PartitionReadRequest used to create the partition tokens and the + // ReadRequests that use the partition tokens. + // Partition tokens become invalid when the session used to create them + // is deleted or begins a new transaction. + PartitionRead(ctx context.Context, in *PartitionReadRequest, opts ...grpc.CallOption) (*PartitionResponse, error) } type spannerClient struct { @@ -681,6 +1126,15 @@ func (c *spannerClient) GetSession(ctx context.Context, in *GetSessionRequest, o return out, nil } +func (c *spannerClient) ListSessions(ctx context.Context, in *ListSessionsRequest, opts ...grpc.CallOption) (*ListSessionsResponse, error) { + out := new(ListSessionsResponse) + err := grpc.Invoke(ctx, "/google.spanner.v1.Spanner/ListSessions", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *spannerClient) DeleteSession(ctx context.Context, in *DeleteSessionRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) { out := new(google_protobuf4.Empty) err := grpc.Invoke(ctx, "/google.spanner.v1.Spanner/DeleteSession", in, out, c.cc, opts...) @@ -799,6 +1253,24 @@ func (c *spannerClient) Rollback(ctx context.Context, in *RollbackRequest, opts return out, nil } +func (c *spannerClient) PartitionQuery(ctx context.Context, in *PartitionQueryRequest, opts ...grpc.CallOption) (*PartitionResponse, error) { + out := new(PartitionResponse) + err := grpc.Invoke(ctx, "/google.spanner.v1.Spanner/PartitionQuery", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *spannerClient) PartitionRead(ctx context.Context, in *PartitionReadRequest, opts ...grpc.CallOption) (*PartitionResponse, error) { + out := new(PartitionResponse) + err := grpc.Invoke(ctx, "/google.spanner.v1.Spanner/PartitionRead", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // Server API for Spanner service type SpannerServer interface { @@ -826,6 +1298,8 @@ type SpannerServer interface { // This is mainly useful for determining whether a session is still // alive. GetSession(context.Context, *GetSessionRequest) (*Session, error) + // Lists all sessions in a given database. + ListSessions(context.Context, *ListSessionsRequest) (*ListSessionsResponse, error) // Ends a session, releasing server resources associated with it. DeleteSession(context.Context, *DeleteSessionRequest) (*google_protobuf4.Empty, error) // Executes an SQL query, returning all rows in a single reply. This @@ -889,6 +1363,24 @@ type SpannerServer interface { // transaction was already aborted, or the transaction is not // found. `Rollback` never returns `ABORTED`. Rollback(context.Context, *RollbackRequest) (*google_protobuf4.Empty, error) + // Creates a set of partition tokens that can be used to execute a query + // operation in parallel. Each of the returned partition tokens can be used + // by [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] to specify a subset + // of the query result to read. The same session and read-only transaction + // must be used by the PartitionQueryRequest used to create the + // partition tokens and the ExecuteSqlRequests that use the partition tokens. + // Partition tokens become invalid when the session used to create them + // is deleted or begins a new transaction. + PartitionQuery(context.Context, *PartitionQueryRequest) (*PartitionResponse, error) + // Creates a set of partition tokens that can be used to execute a read + // operation in parallel. Each of the returned partition tokens can be used + // by [StreamingRead][google.spanner.v1.Spanner.StreamingRead] to specify a subset of the read + // result to read. The same session and read-only transaction must be used by + // the PartitionReadRequest used to create the partition tokens and the + // ReadRequests that use the partition tokens. + // Partition tokens become invalid when the session used to create them + // is deleted or begins a new transaction. + PartitionRead(context.Context, *PartitionReadRequest) (*PartitionResponse, error) } func RegisterSpannerServer(s *grpc.Server, srv SpannerServer) { @@ -931,6 +1423,24 @@ func _Spanner_GetSession_Handler(srv interface{}, ctx context.Context, dec func( return interceptor(ctx, in, info, handler) } +func _Spanner_ListSessions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListSessionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SpannerServer).ListSessions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.spanner.v1.Spanner/ListSessions", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SpannerServer).ListSessions(ctx, req.(*ListSessionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Spanner_DeleteSession_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(DeleteSessionRequest) if err := dec(in); err != nil { @@ -1081,6 +1591,42 @@ func _Spanner_Rollback_Handler(srv interface{}, ctx context.Context, dec func(in return interceptor(ctx, in, info, handler) } +func _Spanner_PartitionQuery_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PartitionQueryRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SpannerServer).PartitionQuery(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.spanner.v1.Spanner/PartitionQuery", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SpannerServer).PartitionQuery(ctx, req.(*PartitionQueryRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Spanner_PartitionRead_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PartitionReadRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SpannerServer).PartitionRead(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.spanner.v1.Spanner/PartitionRead", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SpannerServer).PartitionRead(ctx, req.(*PartitionReadRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _Spanner_serviceDesc = grpc.ServiceDesc{ ServiceName: "google.spanner.v1.Spanner", HandlerType: (*SpannerServer)(nil), @@ -1093,6 +1639,10 @@ var _Spanner_serviceDesc = grpc.ServiceDesc{ MethodName: "GetSession", Handler: _Spanner_GetSession_Handler, }, + { + MethodName: "ListSessions", + Handler: _Spanner_ListSessions_Handler, + }, { MethodName: "DeleteSession", Handler: _Spanner_DeleteSession_Handler, @@ -1117,6 +1667,14 @@ var _Spanner_serviceDesc = grpc.ServiceDesc{ MethodName: "Rollback", Handler: _Spanner_Rollback_Handler, }, + { + MethodName: "PartitionQuery", + Handler: _Spanner_PartitionQuery_Handler, + }, + { + MethodName: "PartitionRead", + Handler: _Spanner_PartitionRead_Handler, + }, }, Streams: []grpc.StreamDesc{ { @@ -1136,81 +1694,109 @@ var _Spanner_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("google/spanner/v1/spanner.proto", fileDescriptor4) } var fileDescriptor4 = []byte{ - // 1202 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x97, 0xcd, 0x6f, 0x1b, 0xc5, - 0x1b, 0xc7, 0xbb, 0x4e, 0x6a, 0xc7, 0x8f, 0x93, 0xd6, 0x9d, 0x5f, 0xda, 0xf8, 0xe7, 0x96, 0xd6, - 0xdd, 0x52, 0x6a, 0x59, 0xc2, 0x4b, 0x0d, 0x87, 0x62, 0x40, 0xb4, 0x6e, 0xdd, 0x36, 0x6a, 0x5e, - 0x9c, 0xb5, 0xdb, 0x4a, 0x95, 0x90, 0x35, 0xb6, 0x1f, 0xcc, 0xe2, 0x7d, 0xcb, 0xce, 0x6c, 0x54, - 0xab, 0xea, 0x85, 0x2b, 0x17, 0x5e, 0x0e, 0x70, 0xe0, 0x06, 0x27, 0xc4, 0x9d, 0x1b, 0xff, 0x04, - 0xff, 0x02, 0x17, 0xfe, 0x06, 0x2e, 0x68, 0x66, 0x77, 0x9d, 0x8d, 0x77, 0x9b, 0xa4, 0x04, 0x71, - 0xca, 0xbc, 0x7c, 0x9f, 0x79, 0x3e, 0xf3, 0x9d, 0xd9, 0x79, 0x1c, 0xb8, 0x32, 0x76, 0x9c, 0xb1, - 0x89, 0x1a, 0x73, 0xa9, 0x6d, 0xa3, 0xa7, 0xed, 0xdd, 0x8c, 0x9a, 0x75, 0xd7, 0x73, 0xb8, 0x43, - 0xce, 0x05, 0x82, 0x7a, 0x34, 0xba, 0x77, 0xb3, 0x7c, 0x29, 0x8c, 0xa1, 0xae, 0xa1, 0x51, 0xdb, - 0x76, 0x38, 0xe5, 0x86, 0x63, 0xb3, 0x20, 0xa0, 0x7c, 0x3e, 0x3e, 0xeb, 0xf3, 0xcf, 0xc2, 0xe1, - 0x8b, 0xe1, 0xb0, 0xec, 0x0d, 0xfc, 0x4f, 0x35, 0xb4, 0x5c, 0x3e, 0x0d, 0x27, 0x2f, 0xcd, 0x4f, - 0x32, 0xee, 0xf9, 0x43, 0x1e, 0xce, 0x5e, 0x99, 0x9f, 0xe5, 0x86, 0x85, 0x8c, 0x53, 0xcb, 0x9d, - 0x0b, 0x8f, 0x6d, 0x62, 0x82, 0xd3, 0x08, 0xa8, 0x92, 0x9c, 0xb5, 0xfc, 0x80, 0x39, 0x54, 0xa8, - 0x49, 0x85, 0x87, 0xcc, 0x37, 0x79, 0x9f, 0x61, 0x04, 0x71, 0x2d, 0xa9, 0xe1, 0x1e, 0xb5, 0x19, - 0x1d, 0xc6, 0x16, 0x4a, 0x01, 0xe1, 0x53, 0x17, 0x83, 0x59, 0xb5, 0x01, 0xab, 0x77, 0x3d, 0xa4, - 0x1c, 0xbb, 0xc8, 0x98, 0xe1, 0xd8, 0x3a, 0xee, 0xfa, 0xc8, 0x38, 0x29, 0xc3, 0xd2, 0x88, 0x72, - 0x3a, 0xa0, 0x0c, 0x4b, 0x4a, 0x45, 0xa9, 0xe6, 0xf5, 0x59, 0x5f, 0x7d, 0x03, 0x72, 0xa1, 0x9a, - 0x10, 0x58, 0xb4, 0xa9, 0x15, 0x49, 0x64, 0x5b, 0xbd, 0x01, 0xe7, 0x1e, 0x20, 0x9f, 0x5b, 0x2f, - 0x4d, 0x58, 0x83, 0xd5, 0x7b, 0x68, 0x62, 0x22, 0x77, 0x9a, 0xf6, 0xcb, 0x45, 0x38, 0xd7, 0x7e, - 0x8e, 0x43, 0x9f, 0x63, 0x77, 0xd7, 0x8c, 0x94, 0x25, 0xc8, 0xb1, 0x20, 0x36, 0x14, 0x47, 0x5d, - 0xf2, 0x10, 0x0a, 0x31, 0x2b, 0x4a, 0x99, 0x8a, 0x52, 0x2d, 0x34, 0xde, 0xaa, 0x27, 0x2e, 0x4e, - 0xbd, 0xb7, 0xaf, 0xea, 0xa2, 0x89, 0x43, 0xee, 0x78, 0x7a, 0x3c, 0x94, 0x14, 0x61, 0x81, 0xed, - 0x9a, 0xa5, 0x05, 0xb9, 0xbe, 0x68, 0x12, 0x0d, 0xb2, 0x2e, 0xf5, 0xa8, 0xc5, 0x4a, 0x8b, 0x72, - 0xd9, 0xb5, 0x68, 0xd9, 0xe8, 0x32, 0xd4, 0xbb, 0xf2, 0xaa, 0xe8, 0xa1, 0x8c, 0x3c, 0x86, 0x82, - 0x6c, 0xf5, 0x85, 0xf1, 0xac, 0x74, 0xba, 0xb2, 0x50, 0x2d, 0x34, 0xde, 0x4b, 0x81, 0x49, 0xec, - 0xb0, 0xde, 0x11, 0x71, 0x3d, 0x11, 0xd6, 0xb6, 0xb9, 0x37, 0xd5, 0xc1, 0x9d, 0x0d, 0x90, 0xab, - 0xb0, 0x2c, 0xae, 0x84, 0x85, 0x7d, 0xee, 0x4c, 0xd0, 0x2e, 0x65, 0x2b, 0x4a, 0x75, 0x59, 0x2f, - 0x04, 0x63, 0x3d, 0x31, 0x44, 0x36, 0x01, 0x76, 0x7d, 0xf4, 0xa6, 0x7d, 0xcb, 0x19, 0x61, 0x29, - 0x57, 0x51, 0xaa, 0x67, 0x1a, 0xf5, 0x63, 0x25, 0xde, 0x11, 0x61, 0x9b, 0xce, 0x08, 0xf5, 0xfc, - 0x6e, 0xd4, 0x2c, 0x3f, 0x81, 0xb3, 0x73, 0x40, 0xc2, 0x9e, 0x09, 0x4e, 0x43, 0xfb, 0x45, 0x93, - 0xbc, 0x0d, 0xa7, 0xf7, 0xa8, 0xe9, 0x63, 0x68, 0xfa, 0x5a, 0x9a, 0xe9, 0x53, 0x17, 0xf5, 0x40, - 0xd5, 0xcc, 0xdc, 0x52, 0xd4, 0x3a, 0xe4, 0x67, 0xf9, 0x08, 0x40, 0x76, 0x6b, 0x5b, 0xdf, 0xbc, - 0xb3, 0x51, 0x3c, 0x45, 0x96, 0x60, 0xb1, 0xb3, 0x71, 0x67, 0xab, 0xa8, 0x90, 0x02, 0xe4, 0x3a, - 0xfa, 0xf6, 0xfd, 0xf5, 0x8d, 0x76, 0x31, 0xa3, 0xfe, 0x94, 0x81, 0x82, 0x8e, 0x74, 0xf4, 0x5f, - 0xde, 0x83, 0x55, 0x38, 0xcd, 0xe9, 0xc0, 0xc4, 0xf0, 0x26, 0x04, 0x1d, 0x31, 0x6a, 0xd8, 0x23, - 0x7c, 0x2e, 0xaf, 0x42, 0x5e, 0x0f, 0x3a, 0x82, 0x67, 0xe8, 0x98, 0xbe, 0x65, 0x07, 0x87, 0x9d, - 0xd7, 0xa3, 0x2e, 0x69, 0x40, 0x6e, 0x82, 0x53, 0xf1, 0x0d, 0xcb, 0xe3, 0x2a, 0x34, 0xfe, 0x9f, - 0xc2, 0xf2, 0x08, 0xa7, 0x5d, 0xe4, 0x7a, 0x76, 0x22, 0xff, 0x8a, 0x1c, 0xa6, 0x61, 0x19, 0xbc, - 0xb4, 0x54, 0x51, 0xaa, 0x0b, 0x7a, 0xd0, 0x49, 0x9c, 0x7e, 0x3e, 0x71, 0xfa, 0x2a, 0x87, 0xb5, - 0x16, 0x8e, 0x0d, 0x3b, 0xb6, 0xb7, 0xa3, 0x1d, 0xfb, 0x18, 0x72, 0x8e, 0x2b, 0x1f, 0xcf, 0xd0, - 0xad, 0xeb, 0x87, 0xbb, 0xb5, 0x1d, 0x88, 0xf5, 0x28, 0x4a, 0xfd, 0x4b, 0x81, 0x95, 0xbb, 0x8e, - 0x65, 0x19, 0xfc, 0xe8, 0x64, 0x37, 0xe0, 0x4c, 0xcc, 0xe3, 0xbe, 0x31, 0x92, 0x39, 0x97, 0x1f, - 0x9e, 0xd2, 0x57, 0x62, 0xe3, 0xeb, 0x23, 0xf2, 0x09, 0x5c, 0x60, 0x86, 0x3d, 0x36, 0xb1, 0xef, - 0x33, 0xec, 0xc7, 0x8f, 0x74, 0xe1, 0x35, 0x20, 0x1f, 0x9e, 0xd2, 0x57, 0x83, 0x65, 0x1e, 0x33, - 0x8c, 0x4d, 0x93, 0xf7, 0x21, 0x1f, 0xbd, 0xbf, 0xe2, 0xab, 0x16, 0xdf, 0xe7, 0xc5, 0x94, 0x15, - 0x37, 0x43, 0x8d, 0xbe, 0xaf, 0x6e, 0xad, 0x1c, 0xb8, 0x61, 0xea, 0x53, 0x38, 0x13, 0x6d, 0x9e, - 0xb9, 0x8e, 0xcd, 0x90, 0xb4, 0xa1, 0x38, 0x94, 0x23, 0xfd, 0x59, 0x8d, 0x90, 0x36, 0x14, 0x1a, - 0xe5, 0xc4, 0xc3, 0xd1, 0x8b, 0x14, 0xfa, 0xd9, 0x20, 0x66, 0x36, 0xa0, 0xea, 0x70, 0x56, 0x77, - 0x4c, 0x73, 0x40, 0x87, 0x93, 0xa3, 0x7d, 0xbd, 0x9e, 0xee, 0xeb, 0x9c, 0xab, 0x8d, 0x3f, 0x97, - 0x21, 0xd7, 0x0d, 0xb6, 0x47, 0xbe, 0x17, 0xc7, 0x16, 0x2f, 0x05, 0xe4, 0x46, 0x8a, 0x03, 0x69, - 0xc5, 0xa2, 0x5c, 0x4e, 0x11, 0x86, 0x12, 0xb5, 0xf5, 0xc5, 0xef, 0x7f, 0x7c, 0x9b, 0xf9, 0x50, - 0x6d, 0x8a, 0xc2, 0xf3, 0x22, 0xaa, 0x21, 0x1f, 0xb9, 0x9e, 0xf3, 0x39, 0x0e, 0x39, 0xd3, 0x6a, - 0x9a, 0x61, 0x33, 0x4e, 0xed, 0x21, 0x8a, 0x76, 0x34, 0xcf, 0xb4, 0xda, 0x4b, 0x2d, 0xdc, 0x0c, - 0x23, 0x5f, 0x29, 0x00, 0xfb, 0x25, 0x85, 0xbc, 0x99, 0x92, 0x2e, 0x51, 0x71, 0x0e, 0x85, 0xba, - 0x2d, 0xa1, 0x9a, 0xe4, 0x96, 0x84, 0x12, 0x05, 0xe6, 0x18, 0x40, 0x33, 0x1e, 0xad, 0xf6, 0x92, - 0x7c, 0xa3, 0xc0, 0xca, 0x81, 0xe2, 0x95, 0xea, 0x56, 0x5a, 0x79, 0x2b, 0x5f, 0x48, 0x9c, 0x7a, - 0x5b, 0xfc, 0xec, 0x88, 0xa0, 0x6a, 0xff, 0x1c, 0xea, 0x47, 0x05, 0x60, 0xff, 0x25, 0x4f, 0xf5, - 0x29, 0xf1, 0xd0, 0x97, 0x2f, 0xa5, 0xa8, 0x74, 0xf9, 0x4b, 0xa3, 0x8b, 0x5c, 0xdd, 0x91, 0x50, - 0x8f, 0xd4, 0xfb, 0x12, 0x2a, 0x4c, 0xf6, 0x9a, 0x5c, 0x4d, 0x9c, 0x25, 0x6d, 0x2a, 0x35, 0xf2, - 0x9b, 0x02, 0xff, 0x8b, 0x30, 0xb8, 0x87, 0xd4, 0x32, 0xec, 0xf1, 0xf1, 0x71, 0xaf, 0xa5, 0xa8, - 0x3a, 0xd4, 0xe3, 0x06, 0x35, 0xf7, 0xa9, 0x9f, 0x49, 0xea, 0x9e, 0xba, 0xfd, 0x6f, 0x50, 0xc7, - 0x18, 0x9b, 0x4a, 0xed, 0x1d, 0x85, 0x7c, 0xad, 0xc0, 0xa2, 0xa8, 0x3e, 0xe4, 0x72, 0xaa, 0x75, - 0xb3, 0xb2, 0x74, 0x84, 0xb5, 0x8f, 0x24, 0x64, 0x5b, 0xbd, 0x7d, 0x12, 0x48, 0x0f, 0xe9, 0x48, - 0x98, 0xfa, 0x8b, 0x02, 0x2b, 0x33, 0xd2, 0x63, 0xc1, 0x1d, 0xcb, 0xc8, 0x9e, 0x64, 0xdc, 0x52, - 0xd7, 0x4f, 0xc2, 0xc8, 0xe2, 0x5c, 0x81, 0x85, 0xbf, 0x2a, 0x50, 0x9c, 0x2f, 0x4d, 0xa4, 0x96, - 0x42, 0xf4, 0x8a, 0xfa, 0x55, 0xbe, 0x7c, 0xf8, 0x7b, 0xaf, 0x3e, 0x95, 0xe0, 0x3b, 0xea, 0xc6, - 0x49, 0xc0, 0x07, 0x73, 0xc9, 0x85, 0xd1, 0x3f, 0x28, 0x90, 0x0d, 0x1e, 0x78, 0x52, 0x49, 0x7b, - 0x1f, 0xe3, 0x85, 0xaf, 0x7c, 0xf5, 0x10, 0x45, 0x50, 0x1d, 0xd4, 0x4d, 0x09, 0xfa, 0x40, 0x6d, - 0x9d, 0x04, 0x34, 0xa8, 0x15, 0x02, 0xef, 0x3b, 0x05, 0x96, 0xa2, 0x32, 0x41, 0xd4, 0xb4, 0x2b, - 0x70, 0xb0, 0x86, 0xbc, 0xf2, 0x35, 0xda, 0x96, 0x5c, 0xeb, 0xea, 0xbd, 0x13, 0xdd, 0xce, 0x30, - 0x59, 0x53, 0xa9, 0xb5, 0x5e, 0xc0, 0xf9, 0xa1, 0x63, 0x25, 0x89, 0x5a, 0xcb, 0x61, 0x05, 0xea, - 0x08, 0x80, 0x8e, 0xf2, 0xec, 0x56, 0x28, 0x19, 0x3b, 0x26, 0xb5, 0xc7, 0x75, 0xc7, 0x1b, 0x6b, - 0x63, 0xb4, 0x25, 0x9e, 0x16, 0x4c, 0x51, 0xd7, 0x60, 0xb1, 0xff, 0x67, 0x3e, 0x08, 0x9b, 0x3f, - 0x67, 0xd6, 0x1e, 0x04, 0xa1, 0x77, 0x4d, 0xc7, 0x1f, 0xd5, 0xc3, 0x75, 0xeb, 0x4f, 0x6e, 0x0e, - 0xb2, 0x32, 0xfc, 0xdd, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x1c, 0x21, 0x25, 0x65, 0x5b, 0x0e, - 0x00, 0x00, + // 1657 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0xdd, 0x6f, 0x53, 0xc9, + 0x15, 0xe7, 0xda, 0x89, 0x13, 0x1f, 0xc7, 0x89, 0x33, 0x98, 0x60, 0x0c, 0x85, 0x70, 0xf9, 0x48, + 0x64, 0xa9, 0x36, 0x49, 0x51, 0x15, 0x02, 0x2d, 0x10, 0x08, 0x90, 0x92, 0x10, 0x73, 0x9d, 0x80, + 0x8a, 0xa8, 0xac, 0xb1, 0x3d, 0xb8, 0xb7, 0xb9, 0x5f, 0xb9, 0x33, 0x8e, 0x62, 0x2a, 0x5e, 0x5a, + 0xf5, 0xbd, 0x2d, 0xaa, 0xfa, 0xd0, 0xbe, 0xed, 0xdb, 0x8a, 0x47, 0x24, 0xde, 0xf6, 0x65, 0xa5, + 0x7d, 0x58, 0x69, 0x9f, 0xf6, 0x5f, 0xd8, 0xff, 0x62, 0x5f, 0x56, 0x33, 0xf7, 0xc3, 0xd7, 0xf6, + 0xc4, 0x31, 0x32, 0xbb, 0xd2, 0x6a, 0x9f, 0x3c, 0x33, 0xe7, 0xcc, 0x9c, 0xdf, 0xfd, 0x9d, 0x33, + 0x73, 0xce, 0x31, 0x5c, 0x68, 0xda, 0x76, 0xd3, 0x20, 0x25, 0xea, 0x60, 0xcb, 0x22, 0x6e, 0xe9, + 0x60, 0x29, 0x18, 0x16, 0x1d, 0xd7, 0x66, 0x36, 0x9a, 0xf5, 0x14, 0x8a, 0xc1, 0xea, 0xc1, 0x52, + 0xfe, 0x9c, 0xbf, 0x07, 0x3b, 0x7a, 0x09, 0x5b, 0x96, 0xcd, 0x30, 0xd3, 0x6d, 0x8b, 0x7a, 0x1b, + 0xf2, 0x67, 0x7d, 0xa9, 0x98, 0xd5, 0x5a, 0xaf, 0x4a, 0xc4, 0x74, 0x58, 0xdb, 0x17, 0x9e, 0xeb, + 0x15, 0x52, 0xe6, 0xb6, 0xea, 0xcc, 0x97, 0x5e, 0xe8, 0x95, 0x32, 0xdd, 0x24, 0x94, 0x61, 0xd3, + 0xe9, 0xd9, 0x1e, 0x41, 0xbb, 0x47, 0xda, 0x81, 0xe5, 0xf9, 0x7e, 0xa9, 0xd9, 0xf2, 0xc0, 0xf9, + 0x1a, 0x6a, 0xbf, 0x86, 0x4b, 0x68, 0xcb, 0x60, 0x55, 0x4a, 0x02, 0x10, 0x97, 0xfa, 0x75, 0x98, + 0x8b, 0x2d, 0x8a, 0xeb, 0x91, 0x83, 0x24, 0x40, 0x58, 0xdb, 0x21, 0x9e, 0x54, 0xfd, 0x33, 0x64, + 0xef, 0xb9, 0x04, 0x33, 0x52, 0x21, 0x94, 0xea, 0xb6, 0xa5, 0x91, 0xfd, 0x16, 0xa1, 0x0c, 0xe5, + 0x61, 0xb2, 0x81, 0x19, 0xae, 0x61, 0x4a, 0x72, 0xca, 0xbc, 0xb2, 0x98, 0xd4, 0xc2, 0x39, 0xba, + 0x0e, 0x13, 0xd4, 0xd3, 0xce, 0xc5, 0xe6, 0x95, 0xc5, 0xd4, 0x72, 0xbe, 0xd8, 0xc7, 0x7c, 0x31, + 0x38, 0x2f, 0x50, 0x55, 0xdf, 0xc5, 0x60, 0xc2, 0x5f, 0x44, 0x08, 0xc6, 0x2c, 0x6c, 0x06, 0x27, + 0x8b, 0x31, 0xfa, 0x3d, 0x24, 0x0c, 0x5c, 0x23, 0x06, 0xcd, 0xc5, 0xe6, 0xe3, 0x8b, 0xa9, 0xe5, + 0xab, 0x47, 0x1f, 0x5a, 0xdc, 0x14, 0x8a, 0xeb, 0x16, 0x73, 0xdb, 0x9a, 0xbf, 0x0b, 0xdd, 0x84, + 0x54, 0x5d, 0x7c, 0x49, 0x95, 0xbb, 0x22, 0x17, 0xef, 0x46, 0x16, 0xf8, 0xa9, 0xb8, 0x13, 0xf8, + 0x49, 0x03, 0x4f, 0x9d, 0x2f, 0xa0, 0x5d, 0x38, 0x83, 0x1d, 0xc7, 0xb5, 0x0f, 0x75, 0x93, 0x9f, + 0x60, 0x60, 0xca, 0xaa, 0x2d, 0xea, 0x1f, 0x35, 0x76, 0xec, 0x51, 0x73, 0x91, 0xcd, 0x9b, 0x98, + 0xb2, 0x5d, 0x2a, 0x8e, 0xcd, 0xdf, 0x80, 0x54, 0x04, 0x2a, 0xca, 0x40, 0x7c, 0x8f, 0xb4, 0xfd, + 0xaf, 0xe6, 0x43, 0x94, 0x85, 0xf1, 0x03, 0x6c, 0xb4, 0x88, 0x20, 0x32, 0xa9, 0x79, 0x93, 0xd5, + 0xd8, 0x8a, 0xa2, 0x2e, 0xc0, 0xec, 0x43, 0xc2, 0x7a, 0xbc, 0x22, 0xe1, 0x4d, 0xfd, 0x87, 0x02, + 0x27, 0x37, 0x75, 0x1a, 0xa8, 0xd2, 0x61, 0x3c, 0x78, 0x16, 0x92, 0x0e, 0x6e, 0x92, 0x2a, 0xd5, + 0x5f, 0x7b, 0xa6, 0xc7, 0xb5, 0x49, 0xbe, 0x50, 0xd1, 0x5f, 0x13, 0xf4, 0x2b, 0x00, 0x21, 0x64, + 0xf6, 0x1e, 0xb1, 0x04, 0x8f, 0x49, 0x4d, 0xa8, 0xef, 0xf0, 0x05, 0x34, 0x07, 0x89, 0x57, 0xba, + 0xc1, 0x88, 0x2b, 0x78, 0x49, 0x6a, 0xfe, 0x4c, 0x3d, 0x80, 0x6c, 0x37, 0x0c, 0xea, 0xd8, 0x16, + 0x25, 0xe8, 0xb7, 0x30, 0xe9, 0x87, 0x00, 0xcd, 0x29, 0xc2, 0xb3, 0x83, 0xc2, 0x25, 0xd4, 0x45, + 0x57, 0x61, 0xc6, 0x22, 0x87, 0xac, 0x1a, 0xc1, 0xe2, 0x91, 0x94, 0xe6, 0xcb, 0xe5, 0x00, 0x8f, + 0x5a, 0x80, 0xec, 0x7d, 0x62, 0x90, 0xbe, 0x08, 0x96, 0x71, 0xf5, 0x7e, 0x0c, 0x66, 0xd7, 0x0f, + 0x49, 0xbd, 0xc5, 0x48, 0x65, 0xdf, 0x08, 0x34, 0x73, 0x9d, 0x78, 0xf6, 0x94, 0x83, 0x29, 0x7a, + 0x04, 0xa9, 0xc8, 0x85, 0xf2, 0xa3, 0x5d, 0x16, 0x98, 0x3b, 0x1d, 0xad, 0x0a, 0x31, 0x48, 0x9d, + 0xd9, 0xae, 0x16, 0xdd, 0xca, 0x5d, 0x4f, 0xf7, 0x0d, 0x9f, 0x4d, 0x3e, 0x44, 0x25, 0x48, 0x38, + 0xd8, 0xc5, 0x26, 0xf5, 0xe3, 0xeb, 0x74, 0x5f, 0x7c, 0x55, 0xc4, 0x83, 0xa3, 0xf9, 0x6a, 0x68, + 0x17, 0x52, 0x62, 0x54, 0xe5, 0xd7, 0x97, 0xe6, 0xc6, 0x05, 0x97, 0xd7, 0x25, 0x60, 0xfa, 0xbe, + 0xb0, 0x58, 0xe6, 0xfb, 0x76, 0xf8, 0x36, 0xef, 0xce, 0x80, 0x13, 0x2e, 0xa0, 0x8b, 0x30, 0xc5, + 0x1f, 0x16, 0x33, 0x20, 0x39, 0x31, 0xaf, 0x2c, 0x4e, 0x69, 0x29, 0x6f, 0xcd, 0x73, 0xf9, 0x16, + 0xc0, 0x7e, 0x8b, 0xb8, 0xed, 0xaa, 0x69, 0x37, 0x48, 0x6e, 0x62, 0x5e, 0x59, 0x9c, 0x5e, 0x2e, + 0x0e, 0x65, 0xf8, 0x29, 0xdf, 0xb6, 0x65, 0x37, 0x88, 0x96, 0xdc, 0x0f, 0x86, 0x68, 0x01, 0x66, + 0x1c, 0xec, 0x32, 0x9d, 0x13, 0xe3, 0x1b, 0x9d, 0x14, 0x46, 0xa7, 0xc3, 0x65, 0x61, 0x37, 0xff, + 0x0c, 0x66, 0x7a, 0x90, 0x4b, 0xae, 0xd0, 0xaf, 0xa3, 0x57, 0x28, 0x42, 0x63, 0xd4, 0x3b, 0x6d, + 0x87, 0x44, 0xef, 0x56, 0x11, 0x92, 0x21, 0x30, 0x04, 0x90, 0x78, 0xb2, 0xad, 0x6d, 0xdd, 0xdd, + 0xcc, 0x9c, 0x40, 0x93, 0x30, 0x56, 0xde, 0xbc, 0xfb, 0x24, 0xa3, 0xa0, 0x14, 0x4c, 0x94, 0xb5, + 0xed, 0x07, 0x1b, 0x9b, 0xeb, 0x99, 0x98, 0xba, 0x07, 0x99, 0x72, 0x80, 0x6c, 0xdb, 0x11, 0x19, + 0x04, 0x5d, 0x83, 0x6c, 0xe7, 0x23, 0xf8, 0x3d, 0xaa, 0xd6, 0xda, 0x8c, 0x50, 0x81, 0x2c, 0xae, + 0xa1, 0x50, 0xc6, 0xaf, 0xd4, 0x1a, 0x97, 0xa0, 0x2b, 0x30, 0x6d, 0xe2, 0xc3, 0x6a, 0x28, 0xa1, + 0x02, 0x71, 0x5c, 0x4b, 0x9b, 0xf8, 0x30, 0x3c, 0x9e, 0xaa, 0x5f, 0xc6, 0xe1, 0x54, 0x38, 0x15, + 0x30, 0x7f, 0x66, 0x71, 0xfa, 0x47, 0x59, 0x9c, 0xae, 0x48, 0xc0, 0x48, 0xbf, 0x72, 0x60, 0xac, + 0x96, 0x61, 0xb6, 0x43, 0xba, 0xed, 0x79, 0x42, 0x04, 0x6c, 0x6a, 0xf9, 0xd2, 0x20, 0x03, 0xbe, + 0xd3, 0xb4, 0x8c, 0xd3, 0xb3, 0xf2, 0xa3, 0x85, 0xd8, 0x57, 0x31, 0xc8, 0x86, 0xe6, 0x35, 0x82, + 0x1b, 0x3f, 0xa5, 0x13, 0xb3, 0x30, 0xce, 0x70, 0xcd, 0x20, 0xbe, 0x1b, 0xbd, 0x09, 0x5f, 0xd5, + 0xad, 0x06, 0x39, 0xf4, 0xdf, 0x6d, 0x6f, 0xc2, 0xf1, 0xd4, 0x6d, 0xa3, 0x65, 0x5a, 0x9e, 0xa7, + 0x92, 0x5a, 0x30, 0x45, 0xcb, 0x30, 0xb1, 0x47, 0xda, 0xbc, 0xdc, 0xf0, 0x29, 0x3e, 0x23, 0xc1, + 0xf2, 0x98, 0xb4, 0x2b, 0x84, 0x69, 0x89, 0x3d, 0xf1, 0x2b, 0x77, 0x50, 0x72, 0x04, 0x07, 0xa9, + 0xd7, 0x21, 0x19, 0x6a, 0xc9, 0x5e, 0x0e, 0x45, 0xf6, 0x72, 0xa8, 0x6f, 0x15, 0x98, 0x8d, 0xd0, + 0xef, 0xa7, 0xa2, 0x5b, 0x3c, 0xb3, 0x85, 0xb7, 0xcf, 0x4b, 0x46, 0xe7, 0x06, 0xc1, 0xd2, 0x22, + 0xfa, 0xe8, 0x8e, 0xcc, 0x3f, 0xe7, 0x07, 0xfb, 0xa7, 0xcb, 0x2f, 0xea, 0x37, 0x31, 0x48, 0xfd, + 0x72, 0x62, 0x21, 0x0b, 0xe3, 0x86, 0x6e, 0xea, 0x4c, 0x3c, 0xee, 0x71, 0xcd, 0x9b, 0xf4, 0xa5, + 0x9b, 0x64, 0x7f, 0xba, 0x91, 0x78, 0x19, 0xa4, 0x5e, 0x66, 0x70, 0x7a, 0x8d, 0x34, 0x75, 0x2b, + 0x4a, 0xf8, 0xb1, 0xd4, 0xde, 0x86, 0x89, 0x20, 0x30, 0x3d, 0x5a, 0xaf, 0x0c, 0xa6, 0x35, 0x08, + 0xcd, 0x60, 0x97, 0xfa, 0xbd, 0x02, 0xe9, 0x7b, 0xb6, 0x69, 0xea, 0xec, 0x78, 0x63, 0x0b, 0x30, + 0x1d, 0x71, 0x46, 0x55, 0x6f, 0x08, 0x9b, 0x53, 0x8f, 0x4e, 0x68, 0xe9, 0xc8, 0xfa, 0x46, 0x03, + 0xfd, 0x09, 0xe6, 0xa8, 0x6e, 0x35, 0x0d, 0xe2, 0x95, 0x9d, 0x11, 0xdf, 0xc7, 0x3f, 0x02, 0xe4, + 0xa3, 0x13, 0x5a, 0xd6, 0x3b, 0x86, 0x57, 0xa0, 0x91, 0x28, 0xb8, 0x01, 0xc9, 0xa0, 0xbf, 0xe0, + 0xef, 0x38, 0x0f, 0xfc, 0xb3, 0x92, 0x13, 0xb7, 0x7c, 0x1d, 0xad, 0xa3, 0xbd, 0x96, 0xee, 0x0a, + 0x45, 0xf5, 0x39, 0x4c, 0x07, 0x1f, 0xef, 0xdf, 0xaa, 0x75, 0xc8, 0xd4, 0xc5, 0x4a, 0x35, 0xec, + 0x81, 0x04, 0x0d, 0x83, 0x4b, 0xe6, 0x19, 0x6f, 0x4f, 0xb8, 0xa0, 0x6a, 0x30, 0xa3, 0xd9, 0x86, + 0x51, 0xc3, 0xf5, 0xbd, 0xe3, 0x79, 0xbd, 0x22, 0xe7, 0xb5, 0x87, 0xd5, 0xe5, 0xbf, 0xcf, 0xc2, + 0x44, 0xc5, 0xfb, 0x3c, 0xf4, 0x3f, 0xee, 0xb6, 0x68, 0xab, 0x83, 0x16, 0x24, 0x0c, 0xc8, 0x9a, + 0xa1, 0xfc, 0x80, 0x82, 0x55, 0x5d, 0xff, 0xdb, 0xb7, 0xdf, 0xbd, 0x8d, 0xdd, 0x56, 0x57, 0x79, + 0x63, 0xf5, 0xd7, 0xa0, 0xc2, 0xfe, 0x9d, 0xe3, 0xda, 0x7f, 0x21, 0x75, 0x46, 0x4b, 0x85, 0x92, + 0x6e, 0x51, 0x86, 0xad, 0x3a, 0xe1, 0xe3, 0x40, 0x4e, 0x4b, 0x85, 0x37, 0xa5, 0xa0, 0xd4, 0x5d, + 0x55, 0x0a, 0xe8, 0x9f, 0x0a, 0x40, 0xa7, 0xde, 0x47, 0x97, 0x25, 0x16, 0xfb, 0xda, 0x81, 0x81, + 0xb8, 0xee, 0x08, 0x5c, 0xab, 0x68, 0x45, 0xe0, 0xe2, 0xd5, 0xef, 0x10, 0x98, 0x42, 0x48, 0xa5, + 0xc2, 0x1b, 0xf4, 0x99, 0x02, 0x53, 0xd1, 0x8a, 0x1e, 0xc9, 0xde, 0x1f, 0x49, 0xe7, 0x91, 0x5f, + 0x38, 0x56, 0xcf, 0x8b, 0x1c, 0x75, 0x4d, 0x60, 0xbc, 0x85, 0x46, 0xe0, 0x0e, 0xfd, 0x5b, 0x81, + 0x74, 0x57, 0xfd, 0x2f, 0x75, 0xab, 0xac, 0x43, 0xc8, 0xcf, 0xf5, 0x85, 0xe7, 0x3a, 0xef, 0xff, + 0x03, 0xea, 0x0a, 0x23, 0x51, 0x07, 0x9d, 0x62, 0x58, 0xea, 0xcd, 0xbe, 0x5a, 0x39, 0x2f, 0xcb, + 0x44, 0x9a, 0x68, 0xf9, 0x2b, 0x84, 0xa9, 0x4f, 0x05, 0xa8, 0xc7, 0xea, 0x03, 0x01, 0xca, 0x37, + 0xf6, 0x91, 0xb8, 0x56, 0x49, 0x68, 0x94, 0xc7, 0xdc, 0x17, 0x0a, 0x9c, 0x0c, 0x60, 0x30, 0x97, + 0x60, 0x53, 0xb7, 0x9a, 0xc3, 0xc3, 0x3d, 0x32, 0x9f, 0x63, 0xa3, 0x83, 0xfa, 0x85, 0x40, 0xbd, + 0xa3, 0x6e, 0x7f, 0x0a, 0xd4, 0x11, 0x8c, 0xab, 0x4a, 0xe1, 0x9a, 0x82, 0xfe, 0xa5, 0xc0, 0x18, + 0xcf, 0xa7, 0xe8, 0xbc, 0x94, 0xba, 0x30, 0xd1, 0x1e, 0x43, 0xed, 0x63, 0x01, 0x72, 0x5d, 0xbd, + 0x33, 0x0a, 0x48, 0x97, 0xe0, 0x06, 0x27, 0xf5, 0x9d, 0x02, 0xe9, 0x10, 0xe9, 0x50, 0xe0, 0x86, + 0x22, 0x72, 0x47, 0x60, 0x7c, 0xa2, 0x6e, 0x8c, 0x82, 0x91, 0x46, 0x71, 0x79, 0x14, 0x7e, 0x50, + 0x20, 0xd3, 0x9b, 0x43, 0x51, 0x41, 0x82, 0xe8, 0x88, 0x44, 0x9b, 0x3f, 0xa6, 0x00, 0x52, 0x9f, + 0x0b, 0xe0, 0x4f, 0xd5, 0xcd, 0x51, 0x80, 0xd7, 0x7a, 0x8c, 0x73, 0xa2, 0xff, 0xaf, 0x40, 0xc2, + 0xcb, 0x44, 0x68, 0x5e, 0xf6, 0x90, 0x47, 0x33, 0x74, 0xfe, 0xe2, 0x00, 0x0d, 0xff, 0x31, 0xda, + 0x12, 0x40, 0x1f, 0xaa, 0x6b, 0xa3, 0x00, 0xf5, 0x92, 0x1a, 0x87, 0xf7, 0x5f, 0x05, 0x26, 0x83, + 0x7c, 0x86, 0x54, 0x59, 0x08, 0x74, 0x27, 0xbb, 0x23, 0x5f, 0xa3, 0x6d, 0x81, 0x6b, 0x43, 0xbd, + 0x3f, 0x52, 0x74, 0xfa, 0xc6, 0x38, 0xb2, 0x0f, 0x0a, 0x4c, 0x77, 0xb7, 0x5e, 0x68, 0x71, 0xd8, + 0xee, 0x2c, 0x7f, 0x79, 0x60, 0xb9, 0x1c, 0x70, 0xb9, 0x2b, 0x30, 0x6f, 0xab, 0x7f, 0x18, 0x05, + 0xb3, 0xd3, 0x05, 0x80, 0x23, 0x7f, 0xaf, 0x40, 0xba, 0xab, 0xa9, 0x92, 0xbe, 0xf5, 0xb2, 0xb6, + 0x6b, 0x48, 0xdc, 0x9f, 0xe4, 0x96, 0x39, 0x51, 0xfb, 0xab, 0x4a, 0x61, 0xed, 0x3f, 0x0a, 0x9c, + 0xaa, 0xdb, 0x66, 0x3f, 0x82, 0xb5, 0x29, 0xbf, 0x38, 0x29, 0x73, 0x97, 0x97, 0x95, 0x17, 0x2b, + 0xbe, 0x4a, 0xd3, 0x36, 0xb0, 0xd5, 0x2c, 0xda, 0x6e, 0xb3, 0xd4, 0x24, 0x96, 0x08, 0x88, 0x92, + 0x27, 0xc2, 0x8e, 0x4e, 0x23, 0x7f, 0xe5, 0xde, 0xf4, 0x87, 0x9f, 0xc7, 0x4e, 0x3f, 0xf4, 0xb6, + 0xde, 0x33, 0xec, 0x56, 0xa3, 0xe8, 0x9f, 0x5b, 0x7c, 0xb6, 0xf4, 0x75, 0x20, 0x79, 0x29, 0x24, + 0x2f, 0x7d, 0xc9, 0xcb, 0x67, 0x4b, 0xb5, 0x84, 0x38, 0xf8, 0x37, 0x3f, 0x04, 0x00, 0x00, 0xff, + 0xff, 0x92, 0x18, 0x4b, 0x1c, 0x59, 0x17, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/spanner/v1/transaction.pb.go b/vendor/google.golang.org/genproto/googleapis/spanner/v1/transaction.pb.go index d29b1eb..f63797d 100644 --- a/vendor/google.golang.org/genproto/googleapis/spanner/v1/transaction.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/spanner/v1/transaction.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/spanner/v1/transaction.proto -// DO NOT EDIT! package spanner @@ -356,7 +355,8 @@ func _TransactionOptions_OneofSizer(msg proto.Message) (n int) { return n } -// Options for read-write transactions. +// Message type to initiate a read-write transaction. Currently this +// transaction type has no options. type TransactionOptions_ReadWrite struct { } @@ -365,7 +365,7 @@ func (m *TransactionOptions_ReadWrite) String() string { return proto func (*TransactionOptions_ReadWrite) ProtoMessage() {} func (*TransactionOptions_ReadWrite) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{0, 0} } -// Options for read-only transactions. +// Message type to initiate a read-only transaction. type TransactionOptions_ReadOnly struct { // How to choose the timestamp for the read-only transaction. // @@ -605,6 +605,9 @@ type Transaction struct { // For snapshot read-only transactions, the read timestamp chosen // for the transaction. Not returned by default: see // [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. + // + // A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. + // Example: `"2014-10-02T15:01:23.045123456Z"`. ReadTimestamp *google_protobuf3.Timestamp `protobuf:"bytes,2,opt,name=read_timestamp,json=readTimestamp" json:"read_timestamp,omitempty"` } @@ -794,38 +797,39 @@ func init() { func init() { proto.RegisterFile("google/spanner/v1/transaction.proto", fileDescriptor5) } var fileDescriptor5 = []byte{ - // 522 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x94, 0xd1, 0x6e, 0xd3, 0x30, - 0x14, 0x86, 0xd3, 0x6e, 0xab, 0xba, 0xd3, 0xae, 0xeb, 0x3c, 0x4d, 0x94, 0x08, 0x01, 0x2a, 0x42, - 0xe2, 0xca, 0x51, 0xc7, 0x0d, 0x12, 0x42, 0x82, 0x6e, 0x82, 0x08, 0x09, 0xad, 0x4a, 0x07, 0x48, - 0xdc, 0x04, 0xb7, 0x31, 0x91, 0xa5, 0xc4, 0x8e, 0x6c, 0x67, 0x74, 0x57, 0xdc, 0xf0, 0x34, 0x3c, - 0x02, 0x6f, 0xc1, 0x1b, 0xa1, 0x38, 0x4e, 0x9b, 0x35, 0x17, 0xeb, 0x5d, 0xdc, 0xf3, 0xff, 0xff, - 0xf9, 0x7c, 0x8e, 0x55, 0x78, 0x16, 0x0b, 0x11, 0x27, 0xd4, 0x53, 0x19, 0xe1, 0x9c, 0x4a, 0xef, - 0x66, 0xe2, 0x69, 0x49, 0xb8, 0x22, 0x4b, 0xcd, 0x04, 0xc7, 0x99, 0x14, 0x5a, 0xa0, 0x93, 0x52, - 0x84, 0xad, 0x08, 0xdf, 0x4c, 0xdc, 0x47, 0xd6, 0x47, 0x32, 0xe6, 0x11, 0xce, 0x85, 0x26, 0x85, - 0x5e, 0x95, 0x06, 0xf7, 0xb1, 0xad, 0x9a, 0xd3, 0x22, 0xff, 0xe1, 0x45, 0xb9, 0x24, 0x9b, 0x40, - 0xf7, 0xc9, 0x76, 0x5d, 0xb3, 0x94, 0x2a, 0x4d, 0xd2, 0xac, 0x14, 0x8c, 0xff, 0xed, 0x03, 0xba, - 0xde, 0x70, 0x5c, 0x65, 0x26, 0x1d, 0xcd, 0x00, 0x24, 0x25, 0x51, 0xf8, 0x53, 0x32, 0x4d, 0x47, - 0xad, 0xa7, 0xad, 0x17, 0xbd, 0x73, 0x0f, 0x37, 0xe8, 0x70, 0xd3, 0x8a, 0x03, 0x4a, 0xa2, 0xaf, - 0x85, 0xcd, 0x77, 0x82, 0x43, 0x59, 0x1d, 0xd0, 0x27, 0x30, 0x87, 0x50, 0xf0, 0xe4, 0x76, 0xd4, - 0x36, 0x81, 0x78, 0xf7, 0xc0, 0x2b, 0x9e, 0xdc, 0xfa, 0x4e, 0xd0, 0x95, 0xf6, 0xdb, 0xed, 0xc1, - 0xe1, 0xba, 0x91, 0xfb, 0x7b, 0x0f, 0xba, 0x95, 0x0a, 0x8d, 0xa0, 0xa3, 0xb4, 0x14, 0x3c, 0x36, - 0xd8, 0x5d, 0xdf, 0x09, 0xec, 0x19, 0x7d, 0x04, 0x94, 0x32, 0x1e, 0x1a, 0x8c, 0xf5, 0x1c, 0x2c, - 0x8b, 0x5b, 0xb1, 0x54, 0x93, 0xc2, 0xd7, 0x95, 0xc2, 0x77, 0x82, 0x61, 0xca, 0x78, 0xd1, 0x60, - 0xfd, 0x1b, 0x7a, 0x0b, 0x47, 0x29, 0x59, 0x85, 0x4a, 0x93, 0x84, 0x72, 0xaa, 0xd4, 0x68, 0xcf, - 0xc4, 0x3c, 0x6c, 0xc4, 0x5c, 0xda, 0x85, 0xf8, 0x4e, 0xd0, 0x4f, 0xc9, 0x6a, 0x5e, 0x19, 0xd0, - 0x05, 0x0c, 0xb6, 0x48, 0xf6, 0x77, 0x20, 0x39, 0x92, 0x77, 0x30, 0x2e, 0xe1, 0x98, 0xae, 0xc8, - 0x52, 0xd7, 0x40, 0x0e, 0xee, 0x07, 0x19, 0x18, 0xcf, 0x06, 0xe5, 0x1c, 0xce, 0x24, 0xd5, 0xb9, - 0x6c, 0xcc, 0xa6, 0x53, 0x4c, 0x30, 0x38, 0x2d, 0x8b, 0x77, 0x06, 0x30, 0x3d, 0x81, 0xe3, 0xb5, - 0x2e, 0x5c, 0x88, 0x9c, 0x47, 0xd3, 0x0e, 0xec, 0xa7, 0x22, 0xa2, 0xe3, 0xef, 0xd0, 0xab, 0xad, - 0x11, 0x0d, 0xa0, 0xcd, 0x22, 0xb3, 0x8c, 0x7e, 0xd0, 0x66, 0x11, 0x7a, 0xd7, 0xb8, 0xf8, 0xbd, - 0x2b, 0xd8, 0xba, 0xf6, 0xf8, 0x6f, 0x0b, 0x4e, 0x6b, 0x2d, 0xe6, 0x34, 0xa1, 0x4b, 0x2d, 0x24, - 0x7a, 0x0f, 0xa0, 0x18, 0x8f, 0x13, 0x1a, 0xe6, 0xaa, 0x7a, 0xb6, 0xcf, 0x77, 0x7a, 0x65, 0xc5, - 0x63, 0x2d, 0xad, 0x9f, 0x15, 0x45, 0x43, 0x83, 0x5c, 0x60, 0xf5, 0x7d, 0xc7, 0x40, 0xbf, 0x81, - 0x83, 0x05, 0x8d, 0x19, 0xb7, 0x7b, 0xde, 0x39, 0xb4, 0x74, 0x4d, 0x01, 0xba, 0xca, 0x42, 0x4e, - 0x7f, 0xc1, 0xd9, 0x52, 0xa4, 0xcd, 0x80, 0xe9, 0xb0, 0x96, 0x30, 0x2b, 0x66, 0x30, 0x6b, 0x7d, - 0x7b, 0x65, 0x65, 0xb1, 0x48, 0x08, 0x8f, 0xb1, 0x90, 0xb1, 0x17, 0x53, 0x6e, 0x26, 0xe4, 0x95, - 0x25, 0x92, 0x31, 0x55, 0xfb, 0x57, 0x79, 0x6d, 0x3f, 0xff, 0xb4, 0x1f, 0x7c, 0x28, 0xad, 0x17, - 0x89, 0xc8, 0x23, 0x3c, 0xb7, 0x7d, 0xbe, 0x4c, 0x16, 0x1d, 0x63, 0x7f, 0xf9, 0x3f, 0x00, 0x00, - 0xff, 0xff, 0xeb, 0x34, 0x76, 0xbe, 0x93, 0x04, 0x00, 0x00, + // 537 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x94, 0xd1, 0x8a, 0xd3, 0x40, + 0x14, 0x86, 0xd3, 0x6e, 0xb7, 0x74, 0x4f, 0xbb, 0xdd, 0xee, 0x2c, 0x8b, 0x35, 0x88, 0x4a, 0x45, + 0xf0, 0x2a, 0xa1, 0xeb, 0x8d, 0x20, 0x82, 0x76, 0x17, 0x0d, 0x82, 0x6c, 0x49, 0xd7, 0x15, 0xa4, + 0x10, 0xa7, 0xcd, 0x18, 0x06, 0x92, 0x99, 0x30, 0x33, 0x59, 0xbb, 0xf7, 0xbe, 0x84, 0xaf, 0xe0, + 0x23, 0xf8, 0x08, 0xde, 0xf9, 0x46, 0x92, 0xc9, 0xa4, 0xcd, 0x36, 0x17, 0xdb, 0xbb, 0x4c, 0xcf, + 0xff, 0xff, 0xe7, 0x9b, 0x73, 0x86, 0xc2, 0xb3, 0x88, 0xf3, 0x28, 0x26, 0xae, 0x4c, 0x31, 0x63, + 0x44, 0xb8, 0x37, 0x63, 0x57, 0x09, 0xcc, 0x24, 0x5e, 0x2a, 0xca, 0x99, 0x93, 0x0a, 0xae, 0x38, + 0x3a, 0x2e, 0x44, 0x8e, 0x11, 0x39, 0x37, 0x63, 0xfb, 0x91, 0xf1, 0xe1, 0x94, 0xba, 0x98, 0x31, + 0xae, 0x70, 0xae, 0x97, 0x85, 0xc1, 0x7e, 0x6c, 0xaa, 0xfa, 0xb4, 0xc8, 0xbe, 0xbb, 0x61, 0x26, + 0xf0, 0x26, 0xd0, 0x7e, 0xb2, 0x5d, 0x57, 0x34, 0x21, 0x52, 0xe1, 0x24, 0x2d, 0x04, 0xa3, 0x7f, + 0x2d, 0x40, 0x57, 0x1b, 0x8e, 0xcb, 0x54, 0xa7, 0xa3, 0x29, 0x80, 0x20, 0x38, 0x0c, 0x7e, 0x08, + 0xaa, 0xc8, 0xb0, 0xf1, 0xb4, 0xf1, 0xa2, 0x7b, 0xe6, 0x3a, 0x35, 0x3a, 0xa7, 0x6e, 0x75, 0x7c, + 0x82, 0xc3, 0x2f, 0xb9, 0xcd, 0xb3, 0xfc, 0x03, 0x51, 0x1e, 0xd0, 0x27, 0xd0, 0x87, 0x80, 0xb3, + 0xf8, 0x76, 0xd8, 0xd4, 0x81, 0xce, 0xee, 0x81, 0x97, 0x2c, 0xbe, 0xf5, 0x2c, 0xbf, 0x23, 0xcc, + 0xb7, 0xdd, 0x85, 0x83, 0x75, 0x23, 0xfb, 0xe7, 0x1e, 0x74, 0x4a, 0x15, 0x1a, 0x42, 0x5b, 0x2a, + 0xc1, 0x59, 0xa4, 0xb1, 0x3b, 0x9e, 0xe5, 0x9b, 0x33, 0xfa, 0x08, 0x28, 0xa1, 0x2c, 0xd0, 0x18, + 0xeb, 0x39, 0x18, 0x16, 0xbb, 0x64, 0x29, 0x27, 0xe5, 0x5c, 0x95, 0x0a, 0xcf, 0xf2, 0x07, 0x09, + 0x65, 0x79, 0x83, 0xf5, 0x6f, 0xe8, 0x2d, 0x1c, 0x26, 0x78, 0x15, 0x48, 0x85, 0x63, 0xc2, 0x88, + 0x94, 0xc3, 0x3d, 0x1d, 0xf3, 0xb0, 0x16, 0x73, 0x61, 0x16, 0xe2, 0x59, 0x7e, 0x2f, 0xc1, 0xab, + 0x59, 0x69, 0x40, 0xe7, 0xd0, 0xdf, 0x22, 0x69, 0xed, 0x40, 0x72, 0x28, 0xee, 0x60, 0x5c, 0xc0, + 0x11, 0x59, 0xe1, 0xa5, 0xaa, 0x80, 0xec, 0xdf, 0x0f, 0xd2, 0xd7, 0x9e, 0x0d, 0xca, 0x19, 0x9c, + 0x0a, 0xa2, 0x32, 0x51, 0x9b, 0x4d, 0x3b, 0x9f, 0xa0, 0x7f, 0x52, 0x14, 0xef, 0x0c, 0x60, 0x72, + 0x0c, 0x47, 0x6b, 0x5d, 0xb0, 0xe0, 0x19, 0x0b, 0x27, 0x6d, 0x68, 0x25, 0x3c, 0x24, 0xa3, 0x6f, + 0xd0, 0xad, 0xac, 0x11, 0xf5, 0xa1, 0x49, 0x43, 0xbd, 0x8c, 0x9e, 0xdf, 0xa4, 0x21, 0x7a, 0x57, + 0xbb, 0xf8, 0xbd, 0x2b, 0xd8, 0xba, 0xf6, 0xe8, 0x4f, 0x03, 0x4e, 0x2a, 0x2d, 0x66, 0x24, 0x26, + 0x4b, 0xc5, 0x05, 0x7a, 0x0f, 0x20, 0x29, 0x8b, 0x62, 0x12, 0x64, 0xb2, 0x7c, 0xb6, 0xcf, 0x77, + 0x7a, 0x65, 0xf9, 0x63, 0x2d, 0xac, 0x9f, 0x25, 0x41, 0x03, 0x8d, 0x9c, 0x63, 0xf5, 0x3c, 0x4b, + 0x43, 0xbf, 0x81, 0xfd, 0x05, 0x89, 0x28, 0x33, 0x7b, 0xde, 0x39, 0xb4, 0x70, 0x4d, 0x00, 0x3a, + 0xd2, 0x40, 0x4e, 0x7e, 0x35, 0xe0, 0x74, 0xc9, 0x93, 0x7a, 0xc2, 0x64, 0x50, 0x89, 0x98, 0xe6, + 0x43, 0x98, 0x36, 0xbe, 0xbe, 0x32, 0xb2, 0x88, 0xc7, 0x98, 0x45, 0x0e, 0x17, 0x91, 0x1b, 0x11, + 0xa6, 0x47, 0xe4, 0x16, 0x25, 0x9c, 0x52, 0x59, 0xf9, 0x5b, 0x79, 0x6d, 0x3e, 0x7f, 0x37, 0x1f, + 0x7c, 0x28, 0xac, 0xe7, 0x31, 0xcf, 0x42, 0x67, 0x66, 0xfa, 0x5c, 0x8f, 0xff, 0x96, 0x95, 0xb9, + 0xae, 0xcc, 0x4d, 0x65, 0x7e, 0x3d, 0x5e, 0xb4, 0x75, 0xf0, 0xcb, 0xff, 0x01, 0x00, 0x00, 0xff, + 0xff, 0xa6, 0x28, 0x2f, 0x4a, 0xae, 0x04, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/spanner/v1/type.pb.go b/vendor/google.golang.org/genproto/googleapis/spanner/v1/type.pb.go index 1df292f..3fd4475 100644 --- a/vendor/google.golang.org/genproto/googleapis/spanner/v1/type.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/spanner/v1/type.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/spanner/v1/type.proto -// DO NOT EDIT! package spanner @@ -35,6 +34,12 @@ const ( TypeCode_FLOAT64 TypeCode = 3 // Encoded as `string` in RFC 3339 timestamp format. The time zone // must be present, and must be `"Z"`. + // + // If the schema has the column option + // `allow_commit_timestamp=true`, the placeholder string + // `"spanner.commit_timestamp()"` can be used to instruct the system + // to insert the commit timestamp associated with the transaction + // commit. TypeCode_TIMESTAMP TypeCode = 4 // Encoded as `string` in RFC 3339 date format. TypeCode_DATE TypeCode = 5 @@ -186,32 +191,33 @@ func init() { func init() { proto.RegisterFile("google/spanner/v1/type.proto", fileDescriptor6) } var fileDescriptor6 = []byte{ - // 430 bytes of a gzipped FileDescriptorProto + // 444 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xd1, 0x8a, 0xd3, 0x40, - 0x14, 0x86, 0x9d, 0x36, 0xed, 0x36, 0xa7, 0x28, 0xe3, 0xc0, 0xb2, 0x75, 0x55, 0x28, 0xeb, 0x4d, - 0x51, 0x48, 0x68, 0x15, 0x11, 0x16, 0x84, 0x34, 0x9d, 0xae, 0x81, 0xdd, 0x36, 0x24, 0xb3, 0x42, - 0xbd, 0x29, 0x63, 0x3b, 0x86, 0x40, 0x3a, 0x13, 0x92, 0xec, 0x62, 0x5f, 0xc2, 0x1b, 0xdf, 0xc2, - 0x87, 0xf0, 0xd9, 0x64, 0x26, 0x59, 0x15, 0xaa, 0xe2, 0xdd, 0x9f, 0xfc, 0xff, 0x77, 0xce, 0x99, - 0xc3, 0x81, 0x27, 0x89, 0x52, 0x49, 0x26, 0xdc, 0x32, 0xe7, 0x52, 0x8a, 0xc2, 0xbd, 0x1d, 0xbb, - 0xd5, 0x3e, 0x17, 0x4e, 0x5e, 0xa8, 0x4a, 0x91, 0x87, 0xb5, 0xeb, 0x34, 0xae, 0x73, 0x3b, 0x3e, - 0xbd, 0x03, 0x78, 0x9e, 0xba, 0x5c, 0x4a, 0x55, 0xf1, 0x2a, 0x55, 0xb2, 0xac, 0x81, 0xb3, 0xef, - 0x08, 0x2c, 0xb6, 0xcf, 0x05, 0x71, 0xc1, 0xda, 0xa8, 0xad, 0x18, 0xa0, 0x21, 0x1a, 0x3d, 0x98, - 0x3c, 0x76, 0x0e, 0x0a, 0x39, 0x3a, 0xe6, 0xab, 0xad, 0x88, 0x4c, 0x90, 0x50, 0x20, 0xbc, 0x28, - 0xf8, 0x7e, 0x2d, 0x32, 0xb1, 0x13, 0xb2, 0x5a, 0xeb, 0x31, 0x06, 0xad, 0x21, 0x1a, 0xf5, 0x27, - 0x27, 0x7f, 0xc1, 0x23, 0x6c, 0x10, 0x5a, 0x13, 0xa6, 0xef, 0x5b, 0xe8, 0x97, 0x55, 0x71, 0xb3, - 0x69, 0xf8, 0xb6, 0xe1, 0x9f, 0xfe, 0x81, 0x8f, 0x4d, 0xca, 0x54, 0x81, 0xf2, 0xa7, 0x3e, 0xfb, - 0x8a, 0x00, 0x7e, 0x59, 0xe4, 0x1c, 0xba, 0x9f, 0x52, 0x91, 0x6d, 0xcb, 0x01, 0x1a, 0xb6, 0x47, - 0xfd, 0xc9, 0xb3, 0x7f, 0x56, 0x72, 0xe6, 0x3a, 0x1b, 0x35, 0xc8, 0xe9, 0x3b, 0xe8, 0x98, 0x1f, - 0x84, 0x80, 0x25, 0xf9, 0xae, 0x5e, 0x86, 0x1d, 0x19, 0x4d, 0x5e, 0x80, 0xf5, 0x3f, 0x2f, 0x34, - 0xa1, 0xe7, 0x5f, 0x10, 0xf4, 0xee, 0xf6, 0x45, 0x1e, 0xc1, 0x31, 0x5b, 0x85, 0x74, 0xed, 0x2f, - 0x67, 0x74, 0x7d, 0xbd, 0x88, 0x43, 0xea, 0x07, 0xf3, 0x80, 0xce, 0xf0, 0x3d, 0xd2, 0x03, 0x6b, - 0xba, 0x5c, 0x5e, 0x62, 0x44, 0x6c, 0xe8, 0x04, 0x0b, 0xf6, 0xfa, 0x15, 0x6e, 0x91, 0x3e, 0x1c, - 0xcd, 0x2f, 0x97, 0x9e, 0xfe, 0x68, 0x93, 0xfb, 0x60, 0xb3, 0xe0, 0x8a, 0xc6, 0xcc, 0xbb, 0x0a, - 0xb1, 0xa5, 0x81, 0x99, 0xc7, 0x28, 0xee, 0x10, 0x80, 0x6e, 0xcc, 0xa2, 0x60, 0x71, 0x81, 0xbb, - 0x1a, 0x9e, 0xae, 0x18, 0x8d, 0xf1, 0x91, 0x96, 0x5e, 0x14, 0x79, 0x2b, 0xdc, 0x6b, 0x12, 0xd7, - 0x3e, 0xc3, 0xf6, 0xf4, 0x33, 0x1c, 0x6f, 0xd4, 0xee, 0x70, 0xe8, 0xa9, 0xad, 0xc7, 0x0c, 0xf5, - 0x2d, 0x84, 0xe8, 0xc3, 0x9b, 0xc6, 0x4f, 0x54, 0xc6, 0x65, 0xe2, 0xa8, 0x22, 0x71, 0x13, 0x21, - 0xcd, 0xa5, 0xb8, 0xb5, 0xc5, 0xf3, 0xb4, 0xfc, 0xed, 0xf6, 0xce, 0x1b, 0xf9, 0xad, 0x75, 0x72, - 0x51, 0xa3, 0x7e, 0xa6, 0x6e, 0xb6, 0x4e, 0xdc, 0x34, 0x78, 0x3f, 0xfe, 0xd8, 0x35, 0xf8, 0xcb, - 0x1f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xf4, 0xaa, 0xcb, 0xef, 0xb9, 0x02, 0x00, 0x00, + 0x14, 0x86, 0x9d, 0x6d, 0xda, 0x6d, 0x4e, 0x51, 0xc6, 0x81, 0x65, 0xeb, 0xaa, 0x50, 0xd6, 0x9b, + 0xa2, 0x90, 0xd0, 0x2a, 0x22, 0x2c, 0x08, 0x69, 0x3a, 0x5d, 0x03, 0xbb, 0x6d, 0x48, 0x66, 0x17, + 0x2a, 0x85, 0x32, 0xb6, 0x63, 0x28, 0xa4, 0x33, 0x21, 0xc9, 0x2e, 0xf4, 0x25, 0xbc, 0xd0, 0xb7, + 0xf0, 0x21, 0x7c, 0x00, 0x9f, 0x4a, 0x66, 0x92, 0xaa, 0xb0, 0x2a, 0xde, 0x9d, 0xe4, 0xfb, 0xbf, + 0x33, 0x67, 0x86, 0x03, 0x4f, 0x12, 0xa5, 0x92, 0x54, 0xb8, 0x45, 0xc6, 0xa5, 0x14, 0xb9, 0x7b, + 0x3b, 0x70, 0xcb, 0x5d, 0x26, 0x9c, 0x2c, 0x57, 0xa5, 0x22, 0x0f, 0x2b, 0xea, 0xd4, 0xd4, 0xb9, + 0x1d, 0x9c, 0xec, 0x05, 0x9e, 0x6d, 0x5c, 0x2e, 0xa5, 0x2a, 0x79, 0xb9, 0x51, 0xb2, 0xa8, 0x84, + 0xd3, 0x6f, 0x08, 0x2c, 0xb6, 0xcb, 0x04, 0x71, 0xc1, 0x5a, 0xa9, 0xb5, 0xe8, 0xa2, 0x1e, 0xea, + 0x3f, 0x18, 0x3e, 0x76, 0xee, 0x34, 0x72, 0x74, 0xcc, 0x57, 0x6b, 0x11, 0x99, 0x20, 0xa1, 0x40, + 0x78, 0x9e, 0xf3, 0xdd, 0x52, 0xa4, 0x62, 0x2b, 0x64, 0xb9, 0xd4, 0x63, 0x74, 0x0f, 0x7a, 0xa8, + 0xdf, 0x19, 0x1e, 0xff, 0x45, 0x8f, 0xb0, 0x51, 0x68, 0x65, 0x98, 0x73, 0xdf, 0x42, 0xa7, 0x28, + 0xf3, 0x9b, 0x55, 0xed, 0x37, 0x8c, 0xff, 0xf4, 0x0f, 0x7e, 0x6c, 0x52, 0xa6, 0x0b, 0x14, 0x3f, + 0xeb, 0xd3, 0x2f, 0x08, 0xe0, 0x17, 0x22, 0x67, 0xd0, 0xfa, 0xb8, 0x11, 0xe9, 0xba, 0xe8, 0xa2, + 0x5e, 0xa3, 0xdf, 0x19, 0x3e, 0xfb, 0x67, 0x27, 0x67, 0xa2, 0xb3, 0x51, 0xad, 0x9c, 0xbc, 0x83, + 0xa6, 0xf9, 0x41, 0x08, 0x58, 0x92, 0x6f, 0xab, 0xc7, 0xb0, 0x23, 0x53, 0x93, 0x17, 0x60, 0xfd, + 0xcf, 0x0d, 0x4d, 0xe8, 0xf9, 0x27, 0x04, 0xed, 0xfd, 0x7b, 0x91, 0x47, 0x70, 0xc4, 0xe6, 0x21, + 0x5d, 0xfa, 0xb3, 0x31, 0x5d, 0x5e, 0x4d, 0xe3, 0x90, 0xfa, 0xc1, 0x24, 0xa0, 0x63, 0x7c, 0x8f, + 0xb4, 0xc1, 0x1a, 0xcd, 0x66, 0x17, 0x18, 0x11, 0x1b, 0x9a, 0xc1, 0x94, 0xbd, 0x7e, 0x85, 0x0f, + 0x48, 0x07, 0x0e, 0x27, 0x17, 0x33, 0x4f, 0x7f, 0x34, 0xc8, 0x7d, 0xb0, 0x59, 0x70, 0x49, 0x63, + 0xe6, 0x5d, 0x86, 0xd8, 0xd2, 0xc2, 0xd8, 0x63, 0x14, 0x37, 0x09, 0x40, 0x2b, 0x66, 0x51, 0x30, + 0x3d, 0xc7, 0x2d, 0x2d, 0x8f, 0xe6, 0x8c, 0xc6, 0xf8, 0x50, 0x97, 0x5e, 0x14, 0x79, 0x73, 0xdc, + 0xae, 0x13, 0x57, 0x3e, 0xc3, 0xf6, 0xe8, 0x33, 0x82, 0xa3, 0x95, 0xda, 0xde, 0x9d, 0x7a, 0x64, + 0xeb, 0x39, 0x43, 0xbd, 0x0c, 0x21, 0x7a, 0xff, 0xa6, 0xe6, 0x89, 0x4a, 0xb9, 0x4c, 0x1c, 0x95, + 0x27, 0x6e, 0x22, 0xa4, 0x59, 0x15, 0xb7, 0x42, 0x3c, 0xdb, 0x14, 0xbf, 0x2d, 0xdf, 0x59, 0x5d, + 0x7e, 0x3d, 0x38, 0x3e, 0xaf, 0x54, 0x3f, 0x55, 0x37, 0x6b, 0x27, 0xae, 0x0f, 0xb8, 0x1e, 0x7c, + 0xdf, 0x93, 0x85, 0x21, 0x8b, 0x9a, 0x2c, 0xae, 0x07, 0x1f, 0x5a, 0xa6, 0xf1, 0xcb, 0x1f, 0x01, + 0x00, 0x00, 0xff, 0xff, 0x55, 0xc4, 0x6e, 0xd4, 0xd4, 0x02, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/storagetransfer/v1/transfer.pb.go b/vendor/google.golang.org/genproto/googleapis/storagetransfer/v1/transfer.pb.go index d53abbe..8b6625b 100644 --- a/vendor/google.golang.org/genproto/googleapis/storagetransfer/v1/transfer.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/storagetransfer/v1/transfer.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/storagetransfer/v1/transfer.proto -// DO NOT EDIT! /* Package storagetransfer is a generated protocol buffer package. @@ -105,7 +104,10 @@ type UpdateTransferJobRequest struct { // The ID of the Google Cloud Platform Console project that owns the job. // Required. ProjectId string `protobuf:"bytes,2,opt,name=project_id,json=projectId" json:"project_id,omitempty"` - // The job to update. + // The job to update. `transferJob` is expected to specify only three fields: + // `description`, `transferSpec`, and `status`. An UpdateTransferJobRequest + // that specifies other fields will be rejected with an error + // `INVALID_ARGUMENT`. // Required. TransferJob *TransferJob `protobuf:"bytes,3,opt,name=transfer_job,json=transferJob" json:"transfer_job,omitempty"` // The field mask of the fields in `transferJob` that are to be updated in @@ -604,53 +606,55 @@ var _StorageTransferService_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("google/storagetransfer/v1/transfer.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 755 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x96, 0xdd, 0x4e, 0x13, 0x5b, - 0x14, 0xc7, 0xb3, 0xf9, 0x3a, 0xb0, 0x80, 0x73, 0x60, 0x27, 0xa7, 0x0c, 0xe5, 0xd0, 0x34, 0x43, - 0xd2, 0x83, 0xd5, 0xcc, 0x48, 0xeb, 0x85, 0x62, 0x8c, 0x11, 0xa3, 0x88, 0x9f, 0x58, 0xf0, 0xc6, - 0x0b, 0x27, 0xbb, 0xed, 0xea, 0x64, 0x4a, 0x3b, 0x7b, 0x9c, 0xbd, 0x4b, 0x04, 0xc2, 0x85, 0xbe, - 0x80, 0x89, 0xc6, 0xc4, 0xc4, 0x98, 0xf8, 0x12, 0x3e, 0x89, 0xaf, 0xe0, 0x43, 0xe8, 0x95, 0x66, - 0x76, 0x67, 0xca, 0xd0, 0x8f, 0x01, 0xd4, 0xbb, 0xd9, 0x7b, 0xaf, 0x8f, 0xdf, 0x5a, 0x8b, 0xff, - 0xa2, 0xb0, 0x6c, 0x73, 0x6e, 0x37, 0xd0, 0x14, 0x92, 0xfb, 0xcc, 0x46, 0xe9, 0x33, 0x57, 0xd4, - 0xd0, 0x37, 0x77, 0x57, 0xcc, 0xe8, 0xdb, 0xf0, 0x7c, 0x2e, 0x39, 0x9d, 0x6f, 0x5b, 0x1a, 0x5d, - 0x96, 0xc6, 0xee, 0x4a, 0xfa, 0xbf, 0x30, 0x08, 0xf3, 0x1c, 0x93, 0xb9, 0x2e, 0x97, 0x4c, 0x3a, - 0xdc, 0x15, 0x6d, 0xc7, 0xf4, 0x42, 0xf8, 0xaa, 0x4e, 0xe5, 0x56, 0xcd, 0xc4, 0xa6, 0x27, 0xf7, - 0xc2, 0xc7, 0x6c, 0xf7, 0x63, 0xcd, 0xc1, 0x46, 0xd5, 0x6a, 0x32, 0xb1, 0x13, 0x5a, 0x18, 0x27, - 0x13, 0x5a, 0x72, 0xcf, 0xc3, 0x30, 0x9d, 0x7e, 0x1d, 0x32, 0xeb, 0x28, 0xd7, 0x95, 0xd3, 0x16, - 0xfa, 0xbb, 0x4e, 0x05, 0x6f, 0x54, 0x2a, 0xbc, 0xe5, 0xca, 0x12, 0x3e, 0x6f, 0xa1, 0x90, 0x74, - 0x11, 0xc0, 0xf3, 0x79, 0x1d, 0x2b, 0xd2, 0x72, 0xaa, 0x1a, 0xc9, 0x92, 0xe5, 0x89, 0xd2, 0x44, - 0x78, 0xb3, 0x51, 0xd5, 0x11, 0xb4, 0x9b, 0x3e, 0x32, 0x89, 0xdb, 0x61, 0xf8, 0xbb, 0xbc, 0x1c, - 0xb9, 0x6e, 0xc0, 0x54, 0x27, 0x69, 0x9d, 0x97, 0x95, 0xf3, 0x64, 0x21, 0x67, 0x0c, 0xec, 0x8d, - 0x11, 0x0f, 0x32, 0x29, 0x8f, 0x0e, 0xfa, 0x0f, 0x02, 0xda, 0x13, 0xaf, 0xda, 0x3f, 0xcf, 0x3c, - 0x8c, 0xd7, 0x79, 0xd9, 0x72, 0x59, 0x13, 0x43, 0xc0, 0xbf, 0xea, 0xbc, 0xfc, 0x90, 0x35, 0xb1, - 0x8b, 0x7e, 0xa8, 0x8b, 0xbe, 0x87, 0x70, 0xf8, 0x97, 0x09, 0xe9, 0x33, 0xc8, 0xb4, 0x14, 0xa0, - 0x15, 0x8f, 0x68, 0x1d, 0x4d, 0x48, 0x1b, 0x51, 0xc1, 0xa3, 0x11, 0x19, 0xd1, 0x10, 0x8d, 0xdb, - 0x81, 0xc9, 0x03, 0x26, 0x76, 0x4a, 0xe9, 0x56, 0x77, 0x89, 0x9d, 0x37, 0xfd, 0x31, 0xfc, 0xbb, - 0x8e, 0xf2, 0x4f, 0x56, 0xaf, 0x37, 0x61, 0xee, 0xbe, 0x23, 0xe2, 0x31, 0x45, 0x14, 0x34, 0x05, - 0x63, 0x35, 0xa7, 0x21, 0xd1, 0x0f, 0x43, 0x86, 0x27, 0xba, 0x00, 0x13, 0x1e, 0xb3, 0xd1, 0x12, - 0xce, 0x3e, 0xaa, 0x82, 0x46, 0x4b, 0xe3, 0xc1, 0xc5, 0x96, 0xb3, 0xdf, 0x4e, 0x17, 0x3c, 0x4a, - 0xbe, 0x83, 0xae, 0x36, 0x1a, 0xa6, 0x63, 0x36, 0x6e, 0x07, 0x17, 0xfa, 0x6b, 0x02, 0x5a, 0x6f, - 0x3e, 0xe1, 0x71, 0x57, 0x20, 0xbd, 0x07, 0xd3, 0xf1, 0xbe, 0x09, 0x8d, 0x64, 0x87, 0xcf, 0x30, - 0x8a, 0xa9, 0xd8, 0x28, 0x04, 0xcd, 0xc1, 0x3f, 0x2e, 0xbe, 0x90, 0x56, 0x8c, 0xa6, 0x5d, 0xfc, - 0x74, 0x70, 0xbd, 0xd9, 0x21, 0x2a, 0xc2, 0xe2, 0x26, 0x6b, 0x89, 0x4e, 0xc3, 0x1f, 0x79, 0xe8, - 0x2b, 0x35, 0x46, 0x6d, 0xa0, 0x30, 0x12, 0xeb, 0xab, 0xfa, 0xd6, 0x2f, 0x41, 0xa6, 0x84, 0xa2, - 0xd5, 0x3c, 0x93, 0x57, 0xe1, 0xfb, 0x38, 0xa4, 0xb6, 0xda, 0x35, 0x44, 0x7e, 0xa1, 0xde, 0xe8, - 0x67, 0x02, 0x73, 0x03, 0x44, 0x48, 0xaf, 0x24, 0xd4, 0x9f, 0x2c, 0xdc, 0xb4, 0x99, 0xe4, 0xda, - 0xc7, 0x4f, 0x37, 0x5e, 0x7d, 0xf9, 0xfa, 0x76, 0x68, 0x99, 0xe6, 0x82, 0x6d, 0x61, 0xf7, 0xb1, - 0x10, 0xe6, 0xc1, 0xd1, 0x9f, 0xd3, 0x21, 0x7d, 0x4f, 0x60, 0xb6, 0x47, 0xfb, 0xb4, 0x98, 0x90, - 0x76, 0xd0, 0xa6, 0x48, 0x9f, 0x72, 0xcc, 0x7a, 0x4e, 0x21, 0x66, 0xf5, 0x99, 0xf8, 0x42, 0x0b, - 0x46, 0xbe, 0x7a, 0x4c, 0xc7, 0xf4, 0x03, 0x81, 0xd9, 0x9e, 0x75, 0x91, 0x88, 0x36, 0x68, 0xb9, - 0x9c, 0x1a, 0xed, 0x9c, 0x42, 0x5b, 0x2a, 0x64, 0x02, 0xb4, 0x83, 0x48, 0x91, 0xd7, 0xe2, 0x90, - 0x66, 0x3e, 0x7f, 0xb8, 0x4a, 0xf2, 0xf4, 0x0d, 0x81, 0xbf, 0x8f, 0x6b, 0x99, 0x5e, 0x4c, 0x9e, - 0xf3, 0xef, 0xb7, 0x8c, 0x9e, 0xc0, 0x45, 0xdf, 0x11, 0x98, 0xe9, 0x56, 0x27, 0x2d, 0x24, 0x24, - 0x19, 0xb0, 0x3a, 0xd2, 0xc5, 0x33, 0xf9, 0xb4, 0xe5, 0xaf, 0x6b, 0x8a, 0x92, 0xd2, 0x9e, 0xc1, - 0xd2, 0x8f, 0x04, 0x52, 0xfd, 0x45, 0x4a, 0x2f, 0x27, 0x64, 0x4a, 0xd4, 0x75, 0x3a, 0xd5, 0xb3, - 0x84, 0x6f, 0x05, 0xff, 0x66, 0xf5, 0x15, 0x85, 0x71, 0x5e, 0x57, 0x12, 0x38, 0x38, 0xd6, 0xa8, - 0x4e, 0x8c, 0xf6, 0x18, 0xbd, 0x20, 0x7e, 0x30, 0xcc, 0x4f, 0x04, 0xe6, 0x06, 0xec, 0x83, 0x44, - 0xf5, 0x26, 0xef, 0x90, 0x81, 0x84, 0x05, 0x45, 0x78, 0x41, 0xff, 0xff, 0x44, 0x42, 0x5f, 0x25, - 0x58, 0x25, 0xf9, 0xb5, 0x97, 0x04, 0x96, 0x2a, 0xbc, 0x99, 0x00, 0xa3, 0x92, 0xac, 0x4d, 0x47, - 0x34, 0x9b, 0xc1, 0xf1, 0xe9, 0x9d, 0xd0, 0xde, 0xe6, 0x0d, 0xe6, 0xda, 0x06, 0xf7, 0x6d, 0xd3, - 0x46, 0x57, 0x99, 0x86, 0xeb, 0x81, 0x79, 0x8e, 0xe8, 0xf3, 0x53, 0xe3, 0x6a, 0xd7, 0xd5, 0x37, - 0x42, 0xca, 0x63, 0xca, 0xaf, 0xf8, 0x33, 0x00, 0x00, 0xff, 0xff, 0x18, 0x96, 0x62, 0x38, 0x43, - 0x09, 0x00, 0x00, + // 786 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0xdf, 0x4e, 0x13, 0x4f, + 0x14, 0xce, 0xf0, 0xef, 0x07, 0x03, 0xfc, 0x84, 0x49, 0x2c, 0x4b, 0x91, 0xda, 0x2c, 0x49, 0xc5, + 0x6a, 0x76, 0x6d, 0xeb, 0x85, 0x62, 0x8c, 0x11, 0xa2, 0x88, 0x7f, 0xb1, 0x20, 0x17, 0x86, 0xb8, + 0x99, 0xb6, 0xd3, 0xcd, 0x96, 0x76, 0x67, 0xdd, 0x99, 0x25, 0x02, 0xe1, 0xc6, 0x17, 0x30, 0xd1, + 0x98, 0x98, 0x18, 0x13, 0xaf, 0xbd, 0xf7, 0x11, 0xbc, 0xf1, 0xd6, 0x57, 0xf0, 0x21, 0xf4, 0x4a, + 0xb3, 0xb3, 0xb3, 0x65, 0xd9, 0xb6, 0x0b, 0xa8, 0x77, 0x3b, 0x33, 0xe7, 0x9c, 0xef, 0x3b, 0xe7, + 0xf0, 0x7d, 0x14, 0xce, 0x9b, 0x94, 0x9a, 0x4d, 0xa2, 0x33, 0x4e, 0x5d, 0x6c, 0x12, 0xee, 0x62, + 0x9b, 0xd5, 0x89, 0xab, 0x6f, 0x17, 0xf4, 0xf0, 0x5b, 0x73, 0x5c, 0xca, 0x29, 0x9a, 0x0e, 0x22, + 0xb5, 0x58, 0xa4, 0xb6, 0x5d, 0x48, 0x9f, 0x91, 0x45, 0xb0, 0x63, 0xe9, 0xd8, 0xb6, 0x29, 0xc7, + 0xdc, 0xa2, 0x36, 0x0b, 0x12, 0xd3, 0x33, 0xf2, 0x55, 0x9c, 0x2a, 0x5e, 0x5d, 0x27, 0x2d, 0x87, + 0xef, 0xc8, 0xc7, 0x6c, 0xfc, 0xb1, 0x6e, 0x91, 0x66, 0xcd, 0x68, 0x61, 0xb6, 0x25, 0x23, 0xb4, + 0xa3, 0x19, 0x1a, 0x7c, 0xc7, 0x21, 0x12, 0x4e, 0xbd, 0x01, 0x33, 0xcb, 0x84, 0x2f, 0x8b, 0xa4, + 0x35, 0xe2, 0x6e, 0x5b, 0x55, 0x72, 0xb3, 0x5a, 0xa5, 0x9e, 0xcd, 0xcb, 0xe4, 0xb9, 0x47, 0x18, + 0x47, 0xb3, 0x10, 0x3a, 0x2e, 0x6d, 0x90, 0x2a, 0x37, 0xac, 0x9a, 0x02, 0xb2, 0x60, 0x7e, 0xa4, + 0x3c, 0x22, 0x6f, 0x56, 0x6a, 0x2a, 0x81, 0xca, 0x92, 0x4b, 0x30, 0x27, 0xeb, 0xb2, 0xfc, 0x5d, + 0x5a, 0x09, 0x53, 0x57, 0xe0, 0x58, 0x1b, 0xb4, 0x41, 0x2b, 0x22, 0x79, 0xb4, 0x98, 0xd3, 0x7a, + 0xce, 0x46, 0x8b, 0x16, 0x19, 0xe5, 0x07, 0x07, 0xf5, 0x17, 0x80, 0xca, 0x13, 0xa7, 0xd6, 0x1d, + 0x67, 0x1a, 0x0e, 0x37, 0x68, 0xc5, 0xb0, 0x71, 0x8b, 0x48, 0x82, 0xff, 0x35, 0x68, 0xe5, 0x21, + 0x6e, 0x91, 0x18, 0xfb, 0xbe, 0x18, 0xfb, 0x0e, 0x86, 0xfd, 0x7f, 0xcc, 0x10, 0x3d, 0x83, 0x19, + 0x4f, 0x10, 0x34, 0xa2, 0x15, 0x8d, 0x83, 0x0d, 0x29, 0x03, 0xa2, 0x78, 0xb8, 0x22, 0x2d, 0x5c, + 0xa2, 0x76, 0xdb, 0x0f, 0x79, 0x80, 0xd9, 0x56, 0x39, 0xed, 0xc5, 0x5b, 0x6c, 0xbf, 0xa9, 0x8f, + 0xe1, 0xe9, 0x65, 0xc2, 0xff, 0x65, 0xf7, 0x6a, 0x0b, 0x4e, 0xdd, 0xb7, 0x58, 0xb4, 0x26, 0x0b, + 0x8b, 0xa6, 0xe0, 0x50, 0xdd, 0x6a, 0x72, 0xe2, 0xca, 0x92, 0xf2, 0x84, 0x66, 0xe0, 0x88, 0x83, + 0x4d, 0x62, 0x30, 0x6b, 0x97, 0x88, 0x86, 0x06, 0xcb, 0xc3, 0xfe, 0xc5, 0x9a, 0xb5, 0x1b, 0xc0, + 0xf9, 0x8f, 0x9c, 0x6e, 0x11, 0x5b, 0x19, 0x94, 0x70, 0xd8, 0x24, 0xeb, 0xfe, 0x85, 0xfa, 0x0a, + 0x40, 0xa5, 0x13, 0x8f, 0x39, 0xd4, 0x66, 0x04, 0xdd, 0x83, 0xe3, 0xd1, 0xb9, 0x31, 0x05, 0x64, + 0xfb, 0x4f, 0xb0, 0x8a, 0xb1, 0xc8, 0x2a, 0x18, 0xca, 0xc1, 0x53, 0x36, 0x79, 0xc1, 0x8d, 0x08, + 0x9b, 0xa0, 0xf9, 0x71, 0xff, 0x7a, 0xb5, 0xcd, 0xa8, 0x04, 0x67, 0x57, 0xb1, 0xc7, 0xda, 0x03, + 0x7f, 0xe4, 0x10, 0x57, 0xa8, 0x31, 0x1c, 0x03, 0x82, 0x03, 0x91, 0xb9, 0x8a, 0x6f, 0xf5, 0x32, + 0xcc, 0x94, 0x09, 0xf3, 0x5a, 0x27, 0xca, 0x2a, 0xfe, 0x1c, 0x86, 0xa9, 0xb5, 0xa0, 0x87, 0x30, + 0x4f, 0xea, 0x0d, 0x7d, 0x06, 0x70, 0xaa, 0x87, 0x08, 0xd1, 0xd5, 0x84, 0xfe, 0x93, 0x85, 0x9b, + 0xd6, 0x93, 0x52, 0xbb, 0xe4, 0xa9, 0xda, 0xcb, 0x6f, 0xdf, 0xdf, 0xf4, 0xcd, 0xa3, 0x9c, 0xef, + 0x16, 0x66, 0x97, 0x08, 0xa6, 0xef, 0x1d, 0xfc, 0x39, 0xed, 0xa3, 0x77, 0x00, 0x4e, 0x76, 0x68, + 0x1f, 0x95, 0x12, 0x60, 0x7b, 0x39, 0x45, 0xfa, 0x98, 0x6b, 0x56, 0x73, 0x82, 0x62, 0x56, 0x9d, + 0x88, 0x1a, 0x9a, 0xbf, 0xf2, 0x85, 0x43, 0x3a, 0x46, 0xef, 0x01, 0x9c, 0xec, 0xb0, 0x8b, 0x44, + 0x6a, 0xbd, 0xcc, 0xe5, 0xd8, 0xd4, 0xce, 0x0b, 0x6a, 0x73, 0xc5, 0x8c, 0x4f, 0x6d, 0x2f, 0x54, + 0xe4, 0xf5, 0x28, 0x49, 0x3d, 0x9f, 0xdf, 0x5f, 0x00, 0x79, 0xf4, 0x1a, 0xc0, 0xff, 0x0f, 0x6b, + 0x19, 0x5d, 0x4a, 0xde, 0xf3, 0xdf, 0x8f, 0x0c, 0x1d, 0xc1, 0x0b, 0xbd, 0x05, 0x70, 0x22, 0xae, + 0x4e, 0x54, 0x4c, 0x00, 0xe9, 0x61, 0x1d, 0xe9, 0xd2, 0x89, 0x72, 0x02, 0xf9, 0xab, 0x8a, 0x60, + 0x89, 0x50, 0xc7, 0x62, 0xd1, 0x07, 0x00, 0x53, 0xdd, 0x45, 0x8a, 0xae, 0x24, 0x20, 0x25, 0xea, + 0x3a, 0x9d, 0xea, 0x30, 0xe1, 0x5b, 0xfe, 0xbf, 0x59, 0xb5, 0x20, 0x68, 0x5c, 0x50, 0x85, 0x04, + 0xf6, 0x0e, 0x0d, 0xaa, 0x5d, 0x23, 0x58, 0xa3, 0xe3, 0xd7, 0xf7, 0x97, 0xf9, 0x11, 0xc0, 0xa9, + 0x1e, 0x7e, 0x90, 0xa8, 0xde, 0x64, 0x0f, 0xe9, 0xc9, 0xb0, 0x28, 0x18, 0x5e, 0x54, 0xcf, 0x1d, + 0xc9, 0xd0, 0x15, 0x00, 0x0b, 0x20, 0xbf, 0xf8, 0x05, 0xc0, 0xb9, 0x2a, 0x6d, 0x25, 0x90, 0x11, + 0x20, 0x8b, 0xe3, 0x21, 0x9b, 0x55, 0xff, 0xf8, 0xf4, 0x8e, 0x8c, 0x37, 0x69, 0x13, 0xdb, 0xa6, + 0x46, 0x5d, 0x53, 0x37, 0x89, 0x2d, 0x42, 0xa5, 0x3d, 0x60, 0xc7, 0x62, 0x5d, 0x7e, 0x6a, 0x5c, + 0x8b, 0x5d, 0xfd, 0x00, 0xe0, 0x53, 0xdf, 0xd9, 0xc0, 0x73, 0xb4, 0xa5, 0x26, 0xf5, 0x6a, 0x5a, + 0xcc, 0x0a, 0xb5, 0x8d, 0xc2, 0xd7, 0x30, 0x62, 0x53, 0x44, 0x6c, 0xc6, 0x22, 0x36, 0x37, 0x0a, + 0x95, 0x21, 0x81, 0x5d, 0xfa, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x9e, 0x71, 0x04, 0x73, 0x87, 0x09, + 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/storagetransfer/v1/transfer_types.pb.go b/vendor/google.golang.org/genproto/googleapis/storagetransfer/v1/transfer_types.pb.go index 29f3a0e..0d94273 100644 --- a/vendor/google.golang.org/genproto/googleapis/storagetransfer/v1/transfer_types.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/storagetransfer/v1/transfer_types.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/storagetransfer/v1/transfer_types.proto -// DO NOT EDIT! package storagetransfer @@ -186,12 +185,12 @@ type ObjectConditions struct { // * If `includePrefixes` is specified, then each exclude-prefix must start // with the value of a path explicitly included by `includePrefixes`. // - // The max size of `includePrefixes` is 20. + // The max size of `includePrefixes` is 1000. IncludePrefixes []string `protobuf:"bytes,3,rep,name=include_prefixes,json=includePrefixes" json:"include_prefixes,omitempty"` // `excludePrefixes` must follow the requirements described for // `includePrefixes`. // - // The max size of `excludePrefixes` is 20. + // The max size of `excludePrefixes` is 1000. ExcludePrefixes []string `protobuf:"bytes,4,rep,name=exclude_prefixes,json=excludePrefixes" json:"exclude_prefixes,omitempty"` } @@ -297,7 +296,7 @@ func (m *AwsS3Data) GetAwsAccessKey() *AwsAccessKey { // * MD5 - The base64-encoded MD5 hash of the object. // // For an example of a valid TSV file, see -// [Transferring data from URLs](https://cloud.google.com/storage/transfer/#urls) +// [Transferring data from URLs](https://cloud.google.com/storage/transfer/create-url-list). // // When transferring data based on a URL list, keep the following in mind: // @@ -349,10 +348,13 @@ func (m *HttpData) GetListUrl() string { type TransferOptions struct { // Whether overwriting objects that already exist in the sink is allowed. OverwriteObjectsAlreadyExistingInSink bool `protobuf:"varint,1,opt,name=overwrite_objects_already_existing_in_sink,json=overwriteObjectsAlreadyExistingInSink" json:"overwrite_objects_already_existing_in_sink,omitempty"` - // Whether objects that exist only in the sink should be deleted. + // Whether objects that exist only in the sink should be deleted. Note that + // this option and `deleteObjectsFromSourceAfterTransfer` are mutually + // exclusive. DeleteObjectsUniqueInSink bool `protobuf:"varint,2,opt,name=delete_objects_unique_in_sink,json=deleteObjectsUniqueInSink" json:"delete_objects_unique_in_sink,omitempty"` // Whether objects should be deleted from the source after they are - // transferred to the sink. + // transferred to the sink. Note that this option and + // `deleteObjectsUniqueInSink` are mutually exclusive. DeleteObjectsFromSourceAfterTransfer bool `protobuf:"varint,3,opt,name=delete_objects_from_source_after_transfer,json=deleteObjectsFromSourceAfterTransfer" json:"delete_objects_from_source_after_transfer,omitempty"` } @@ -674,13 +676,10 @@ type TransferJob struct { // bytes when Unicode-encoded. Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` // The ID of the Google Cloud Platform Console project that owns the job. - // Required. ProjectId string `protobuf:"bytes,3,opt,name=project_id,json=projectId" json:"project_id,omitempty"` // Transfer specification. - // Required. TransferSpec *TransferSpec `protobuf:"bytes,4,opt,name=transfer_spec,json=transferSpec" json:"transfer_spec,omitempty"` // Schedule specification. - // Required. Schedule *Schedule `protobuf:"bytes,5,opt,name=schedule" json:"schedule,omitempty"` // Status of the job. This value MUST be specified for // `CreateTransferJobRequests`. @@ -836,12 +835,12 @@ func (m *ErrorSummary) GetErrorLogEntries() []*ErrorLogEntry { // A collection of counters that report the progress of a transfer operation. type TransferCounters struct { // Objects found in the data source that are scheduled to be transferred, - // which will be copied, excluded based on conditions, or skipped due to - // failures. + // excluding any that are filtered based on object conditions or skipped due + // to sync. ObjectsFoundFromSource int64 `protobuf:"varint,1,opt,name=objects_found_from_source,json=objectsFoundFromSource" json:"objects_found_from_source,omitempty"` // Bytes found in the data source that are scheduled to be transferred, - // which will be copied, excluded based on conditions, or skipped due to - // failures. + // excluding any that are filtered based on object conditions or skipped due + // to sync. BytesFoundFromSource int64 `protobuf:"varint,2,opt,name=bytes_found_from_source,json=bytesFoundFromSource" json:"bytes_found_from_source,omitempty"` // Objects found only in the data sink that are scheduled to be deleted. ObjectsFoundOnlyFromSink int64 `protobuf:"varint,3,opt,name=objects_found_only_from_sink,json=objectsFoundOnlyFromSink" json:"objects_found_only_from_sink,omitempty"` @@ -1106,114 +1105,116 @@ func init() { func init() { proto.RegisterFile("google/storagetransfer/v1/transfer_types.proto", fileDescriptor1) } var fileDescriptor1 = []byte{ - // 1729 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0xdd, 0x72, 0xdb, 0xc6, - 0x15, 0x36, 0x45, 0x59, 0x22, 0x0f, 0x49, 0x91, 0xda, 0x38, 0x0a, 0x25, 0xdb, 0x89, 0x0b, 0x25, - 0x63, 0xc7, 0x99, 0x92, 0x13, 0x69, 0x32, 0x1d, 0xd7, 0x93, 0xba, 0x94, 0x48, 0x49, 0x8c, 0x15, - 0x4b, 0x03, 0x50, 0xd3, 0x9f, 0x8b, 0x62, 0x96, 0xc0, 0x92, 0x46, 0x04, 0x62, 0x51, 0xec, 0xd2, - 0x12, 0xa6, 0x57, 0xb9, 0xea, 0x33, 0xf4, 0x45, 0xfa, 0x14, 0x9d, 0xe9, 0x5d, 0x9f, 0xa3, 0x97, - 0xbd, 0xec, 0xec, 0x0f, 0x40, 0x10, 0xa2, 0x49, 0xcd, 0xe4, 0x0e, 0x38, 0xe7, 0x7c, 0xdf, 0xd9, - 0xf3, 0xc3, 0x73, 0x16, 0x84, 0xd6, 0x98, 0xd2, 0xb1, 0x4f, 0xda, 0x8c, 0xd3, 0x08, 0x8f, 0x09, - 0x8f, 0x70, 0xc0, 0x46, 0x24, 0x6a, 0x7f, 0xf8, 0xb6, 0x9d, 0x3c, 0xdb, 0x3c, 0x0e, 0x09, 0x6b, - 0x85, 0x11, 0xe5, 0x14, 0xed, 0x2a, 0xfb, 0x56, 0xce, 0xbe, 0xf5, 0xe1, 0xdb, 0xbd, 0x27, 0x9a, - 0x0a, 0x87, 0x5e, 0x1b, 0x07, 0x01, 0xe5, 0x98, 0x7b, 0x34, 0xd0, 0xc0, 0xbd, 0xcf, 0xb5, 0x56, - 0xbe, 0x0d, 0xa7, 0xa3, 0xb6, 0x3b, 0x8d, 0xa4, 0x81, 0xd6, 0x7f, 0x91, 0xd7, 0x73, 0x6f, 0x42, - 0x18, 0xc7, 0x93, 0x50, 0x1b, 0x7c, 0xaa, 0x0d, 0xa2, 0xd0, 0x69, 0x3b, 0xd4, 0x25, 0x5a, 0xbc, - 0xa3, 0xc5, 0xe2, 0x90, 0x6d, 0x17, 0xf3, 0x44, 0xfe, 0x38, 0x2b, 0x17, 0x5c, 0x74, 0xe4, 0xe2, - 0x58, 0x29, 0x8d, 0xd7, 0xf0, 0xe8, 0x54, 0xaa, 0x2d, 0x12, 0x7d, 0xf0, 0x1c, 0xd2, 0x71, 0x1c, - 0x3a, 0x0d, 0x38, 0xda, 0x87, 0x1a, 0x56, 0x8f, 0x36, 0x99, 0x60, 0xcf, 0x6f, 0x16, 0x9e, 0x15, - 0x5e, 0x94, 0xcd, 0xaa, 0x16, 0xf6, 0x84, 0xcc, 0xf8, 0x0b, 0x54, 0x3b, 0x37, 0xac, 0xe3, 0x38, - 0x84, 0xb1, 0xb7, 0x24, 0x46, 0x86, 0x04, 0x11, 0xc6, 0xec, 0x6b, 0x12, 0xdb, 0x9e, 0xab, 0x41, - 0x15, 0x9c, 0x58, 0xf4, 0x5d, 0xf4, 0x12, 0xb6, 0x19, 0x71, 0x22, 0xc2, 0xed, 0x99, 0x69, 0x73, - 0x4d, 0xda, 0xd5, 0x95, 0x22, 0xe5, 0x33, 0xfe, 0xb5, 0x06, 0x8d, 0x8b, 0xe1, 0x4f, 0xc4, 0xe1, - 0xc7, 0x34, 0x70, 0x3d, 0x99, 0x44, 0x14, 0xc2, 0x8b, 0x89, 0x17, 0xd8, 0x22, 0x10, 0x9b, 0xf8, - 0x38, 0x64, 0xc4, 0xb5, 0x99, 0x17, 0x38, 0xc4, 0xf6, 0x31, 0xe3, 0xf6, 0x84, 0xba, 0xde, 0xc8, - 0x73, 0x64, 0x42, 0xa5, 0xff, 0xca, 0xc1, 0xae, 0x2e, 0x6d, 0x2b, 0xc9, 0x68, 0xab, 0xab, 0x33, - 0x6e, 0xee, 0x4f, 0xbc, 0x60, 0xe0, 0x4d, 0x48, 0x4f, 0x11, 0x59, 0x82, 0xe7, 0x1c, 0x33, 0xfe, - 0x63, 0x86, 0x45, 0x7a, 0xc4, 0xb7, 0xf7, 0xf3, 0xb8, 0xb6, 0xda, 0x23, 0xbe, 0x5d, 0xe9, 0xf1, - 0x6b, 0x68, 0x78, 0x81, 0xe3, 0x4f, 0x5d, 0x62, 0x87, 0x11, 0x19, 0x79, 0xb7, 0x84, 0x35, 0x8b, - 0xcf, 0x8a, 0x22, 0x47, 0x5a, 0x7e, 0xa9, 0xc5, 0xc2, 0x94, 0xdc, 0xe6, 0x4c, 0xd7, 0x95, 0xa9, - 0x96, 0x27, 0xa6, 0xc6, 0x4b, 0xd8, 0x3c, 0x75, 0x58, 0x17, 0x73, 0x8c, 0xbe, 0x80, 0xca, 0x70, - 0xea, 0x5c, 0x13, 0x6e, 0x07, 0x78, 0x42, 0x74, 0x9d, 0x40, 0x89, 0xde, 0xe1, 0x09, 0x31, 0xfe, - 0x06, 0xe5, 0xce, 0x0d, 0xb3, 0x0e, 0xef, 0x65, 0x8d, 0x7e, 0x84, 0x2d, 0x7c, 0xc3, 0xf2, 0x15, - 0xad, 0x1c, 0x3c, 0x6f, 0x7d, 0xf4, 0x47, 0xd2, 0xca, 0x76, 0x8e, 0x59, 0xc5, 0x99, 0x37, 0xe3, - 0x2b, 0x28, 0x9d, 0x71, 0x1e, 0x4a, 0xdf, 0xbb, 0x50, 0xf2, 0x3d, 0xc6, 0xed, 0x69, 0x94, 0xf4, - 0xe0, 0xa6, 0x78, 0xbf, 0x8a, 0x7c, 0xe3, 0xef, 0x6b, 0x50, 0x1f, 0x68, 0xc6, 0x8b, 0x50, 0x75, - 0xc7, 0x9f, 0xe0, 0x25, 0xfd, 0x40, 0xa2, 0x9b, 0xc8, 0xe3, 0xc4, 0xa6, 0xb2, 0x77, 0x98, 0x8d, - 0xfd, 0x88, 0x60, 0x37, 0xb6, 0xc9, 0xad, 0xc7, 0xb8, 0x17, 0x8c, 0x6d, 0x2f, 0x10, 0x05, 0xbc, - 0x96, 0x84, 0x25, 0xf3, 0xab, 0x14, 0xa1, 0x9a, 0x8d, 0x75, 0x94, 0x7d, 0x4f, 0x9b, 0xf7, 0x03, - 0xcb, 0x0b, 0xae, 0xd1, 0xef, 0xe1, 0xa9, 0x4b, 0x7c, 0x92, 0xe1, 0x9d, 0x06, 0xde, 0x5f, 0xa7, - 0x24, 0x65, 0x5b, 0x93, 0x6c, 0xbb, 0xca, 0x48, 0x53, 0x5d, 0x49, 0x13, 0xcd, 0xf0, 0x07, 0xf8, - 0x3a, 0xc7, 0x30, 0x8a, 0xe8, 0xc4, 0x66, 0x74, 0x1a, 0x39, 0xc4, 0xc6, 0x23, 0x2e, 0x46, 0x8c, - 0x0e, 0xa8, 0x59, 0x94, 0x6c, 0x5f, 0xce, 0xb1, 0x9d, 0x44, 0x74, 0x62, 0x49, 0xeb, 0x8e, 0x30, - 0x4e, 0x82, 0x37, 0xfe, 0xb1, 0x0e, 0xd5, 0xe4, 0xc5, 0x0a, 0x89, 0x83, 0xce, 0xa1, 0x3e, 0x76, - 0x98, 0xed, 0x62, 0x8e, 0x35, 0xbd, 0xfe, 0x2d, 0x18, 0x4b, 0x2a, 0xa2, 0x9b, 0xe3, 0xec, 0x81, - 0x59, 0x1b, 0xab, 0x47, 0xe5, 0x0b, 0x59, 0x80, 0x44, 0x79, 0xd9, 0xe1, 0x1c, 0xa1, 0x2a, 0xf1, - 0x97, 0xcb, 0x4b, 0xac, 0x3a, 0xe8, 0xec, 0x81, 0x59, 0xc7, 0xc9, 0x8b, 0x26, 0xbd, 0x80, 0xc6, - 0x7b, 0xce, 0xc3, 0x39, 0xca, 0xa2, 0xa4, 0xdc, 0x5f, 0x42, 0x99, 0xf4, 0xc5, 0xd9, 0x03, 0x73, - 0xeb, 0xbd, 0x7e, 0xd6, 0x84, 0x67, 0x50, 0x9b, 0xc5, 0x2c, 0xea, 0xb1, 0x7e, 0xef, 0x88, 0x0b, - 0x66, 0x25, 0x89, 0x58, 0xd4, 0xe9, 0x8f, 0xb0, 0xad, 0x0a, 0x64, 0x3b, 0xe9, 0xdc, 0x69, 0x3e, - 0x94, 0x6c, 0xdf, 0x2c, 0x61, 0xcb, 0x8f, 0x2a, 0xb3, 0x41, 0xf3, 0xc3, 0xeb, 0x0a, 0x1a, 0xe9, - 0x32, 0xa1, 0xaa, 0x65, 0x9b, 0x1b, 0x92, 0xf8, 0xe5, 0x12, 0xe2, 0x5c, 0x93, 0x9b, 0x75, 0x3e, - 0x2f, 0x38, 0xaa, 0x41, 0x25, 0x93, 0xc6, 0xa3, 0x0a, 0x94, 0xd3, 0x2c, 0x18, 0xff, 0x2e, 0x40, - 0xc9, 0x72, 0xde, 0x13, 0x77, 0xea, 0x13, 0xd4, 0x81, 0x4f, 0x98, 0x7e, 0xb6, 0x19, 0xc7, 0x11, - 0x17, 0xe9, 0x4a, 0x7a, 0x63, 0x3b, 0x39, 0x82, 0xd8, 0x14, 0xad, 0x2e, 0xe6, 0xc4, 0xdc, 0x4e, - 0xac, 0x2d, 0x61, 0x2c, 0x44, 0xe8, 0x7b, 0x48, 0x85, 0x36, 0x09, 0x5c, 0x45, 0xb0, 0xf6, 0x31, - 0x82, 0x7a, 0x62, 0xdb, 0x0b, 0x5c, 0x09, 0xef, 0xc0, 0xb6, 0x72, 0x2c, 0xc7, 0x29, 0x1d, 0xd9, - 0x2e, 0x8e, 0x75, 0xdd, 0x77, 0xe6, 0xe0, 0x62, 0x48, 0x5e, 0x8c, 0xba, 0x38, 0x36, 0xb7, 0x24, - 0x20, 0x7d, 0x37, 0xfe, 0xb3, 0x0e, 0x95, 0x24, 0x25, 0x3f, 0xd0, 0x21, 0x42, 0xb0, 0x9e, 0x99, - 0x4b, 0xf2, 0x19, 0x3d, 0x83, 0x8a, 0x4b, 0x98, 0x13, 0x79, 0x61, 0x3a, 0x96, 0xcb, 0x66, 0x56, - 0x84, 0x9e, 0x02, 0x84, 0x11, 0x95, 0x55, 0xf6, 0x5c, 0x79, 0x82, 0xb2, 0x59, 0xd6, 0x92, 0xbe, - 0x8b, 0xce, 0xa1, 0x96, 0x56, 0x8a, 0x85, 0xc4, 0xd1, 0xdd, 0xf4, 0xfc, 0x1e, 0x65, 0x12, 0xbf, - 0x40, 0xb3, 0xca, 0xb3, 0xbf, 0xc7, 0x37, 0x50, 0x4a, 0x12, 0xa1, 0x1b, 0x69, 0x59, 0x93, 0x27, - 0xe5, 0x32, 0x53, 0x10, 0xea, 0xc1, 0x06, 0xe3, 0x98, 0x4f, 0x55, 0xbb, 0x6c, 0x1d, 0xfc, 0xfa, - 0x1e, 0xe7, 0xf8, 0x81, 0x0e, 0x5b, 0x96, 0x04, 0x99, 0x1a, 0x8c, 0xde, 0x40, 0xcd, 0x89, 0x88, - 0x5c, 0x32, 0xb2, 0x00, 0xcd, 0x4d, 0x79, 0x98, 0xbd, 0x3b, 0xfb, 0x6a, 0x90, 0xdc, 0x39, 0xcc, - 0x6a, 0x02, 0x10, 0x22, 0x74, 0x09, 0x3b, 0x77, 0x96, 0x9e, 0x62, 0x2a, 0xad, 0x64, 0x7a, 0xe4, - 0xe7, 0xf6, 0x9c, 0x64, 0x7c, 0x03, 0x35, 0x39, 0xe3, 0x52, 0xa2, 0xf2, 0xea, 0x23, 0x25, 0x00, - 0x21, 0x32, 0xce, 0x60, 0x43, 0x45, 0x89, 0x76, 0x00, 0x59, 0x83, 0xce, 0xe0, 0xca, 0xb2, 0xaf, - 0xde, 0x59, 0x97, 0xbd, 0xe3, 0xfe, 0x49, 0xbf, 0xd7, 0x6d, 0x3c, 0x40, 0x15, 0xd8, 0xec, 0xbd, - 0xeb, 0x1c, 0x9d, 0xf7, 0xba, 0x8d, 0x02, 0xaa, 0x42, 0xa9, 0xdb, 0xb7, 0xd4, 0xdb, 0x9a, 0x50, - 0x75, 0x7b, 0xe7, 0xbd, 0x41, 0xaf, 0xdb, 0x28, 0x1a, 0x27, 0x50, 0xeb, 0x45, 0x11, 0x8d, 0xce, - 0xe9, 0xb8, 0x17, 0xf0, 0x28, 0x46, 0x0d, 0x28, 0xce, 0xf6, 0x8e, 0x78, 0x14, 0xf7, 0x22, 0x22, - 0x4c, 0x6c, 0x97, 0x70, 0xec, 0xf9, 0xc9, 0x5a, 0xae, 0x4a, 0x61, 0x57, 0xc9, 0x8c, 0x7f, 0x16, - 0xa0, 0x2a, 0x89, 0xac, 0xe9, 0x64, 0x82, 0xa3, 0x18, 0xb5, 0x01, 0x14, 0x4a, 0x5c, 0xd7, 0x24, - 0xdd, 0xd6, 0x41, 0x23, 0x09, 0x30, 0x0a, 0x9d, 0xd6, 0x31, 0x75, 0x89, 0x59, 0x96, 0x36, 0xe2, - 0x51, 0x6c, 0xdc, 0x04, 0x30, 0x0d, 0xb8, 0x6c, 0xdf, 0xa2, 0x09, 0x5a, 0x2f, 0xee, 0x67, 0x03, - 0xd8, 0x56, 0x06, 0x3e, 0x1d, 0xdb, 0x24, 0xe0, 0x91, 0xa7, 0xaf, 0x08, 0x95, 0x83, 0x17, 0x4b, - 0x5a, 0x63, 0x2e, 0x3c, 0xb3, 0x4e, 0x32, 0xaf, 0x1e, 0x61, 0xc6, 0x7f, 0x37, 0xa1, 0x91, 0x74, - 0x8f, 0xf4, 0x43, 0x22, 0x86, 0x5e, 0xc1, 0x6e, 0xba, 0xae, 0xe8, 0x34, 0x70, 0xb3, 0x4b, 0x4b, - 0xc6, 0x52, 0x34, 0x77, 0xb4, 0xc1, 0x89, 0xd0, 0xcf, 0x96, 0x14, 0xfa, 0x0e, 0x3e, 0x1b, 0xc6, - 0x9c, 0x2c, 0x02, 0xaa, 0x90, 0x1e, 0x49, 0x75, 0x1e, 0xf6, 0x3b, 0x78, 0x32, 0xef, 0x91, 0x06, - 0x7e, 0xac, 0xd1, 0x62, 0xb0, 0x17, 0x25, 0xb6, 0x99, 0x75, 0x7a, 0x11, 0xf8, 0xb1, 0x64, 0x10, - 0xf3, 0xfb, 0xb7, 0xb0, 0x97, 0x75, 0x9b, 0x43, 0xaf, 0xab, 0x23, 0xcf, 0x3c, 0xcf, 0x61, 0xdf, - 0xc2, 0xfe, 0xa2, 0xe5, 0xcc, 0xae, 0xbd, 0x30, 0x24, 0xae, 0x3d, 0x8c, 0x6d, 0x16, 0x07, 0x8e, - 0xfc, 0x11, 0x17, 0xcd, 0xcf, 0x69, 0x7e, 0x2f, 0x5b, 0xca, 0xee, 0x28, 0xb6, 0xe2, 0xc0, 0x41, - 0xa7, 0xf0, 0x2b, 0x7d, 0x90, 0x25, 0x54, 0x1b, 0x92, 0xea, 0x89, 0x3a, 0xcf, 0x47, 0x88, 0x0e, - 0x21, 0x49, 0xb1, 0xed, 0xd0, 0xd0, 0x23, 0xae, 0xcd, 0xa9, 0x8a, 0x66, 0x53, 0xa2, 0x3f, 0xd1, - 0xda, 0x63, 0xa9, 0x1c, 0x50, 0x19, 0x4a, 0x1b, 0x54, 0x7a, 0xf3, 0x90, 0x92, 0x84, 0x6c, 0x4b, - 0xdd, 0x1c, 0xe0, 0x7b, 0x78, 0x9c, 0x78, 0x51, 0xd7, 0x8e, 0xf9, 0x92, 0x95, 0xe7, 0xd2, 0xde, - 0x55, 0x16, 0x99, 0xb2, 0xbd, 0x82, 0x5d, 0xe5, 0x6f, 0x11, 0x18, 0x32, 0x59, 0x5f, 0x08, 0x5d, - 0xec, 0x59, 0x9c, 0xb7, 0x32, 0xd7, 0x63, 0x59, 0xb0, 0x38, 0x74, 0xda, 0x63, 0x77, 0x81, 0xd5, - 0x4c, 0x8f, 0xe5, 0x61, 0xaf, 0x61, 0x6f, 0x51, 0x9d, 0x47, 0xd8, 0xf3, 0x89, 0xdb, 0xac, 0x49, - 0xe4, 0x67, 0x77, 0xca, 0x7b, 0x22, 0xd5, 0xe8, 0x37, 0xd0, 0xbc, 0x5b, 0x57, 0x0d, 0xdd, 0x92, - 0xd0, 0x4f, 0x73, 0xe5, 0xd4, 0xc0, 0x3e, 0x18, 0xa9, 0x57, 0x29, 0x11, 0x45, 0xd1, 0x77, 0xc2, - 0xd9, 0xb9, 0xeb, 0x92, 0xe2, 0x69, 0xe2, 0x5d, 0x1a, 0x0e, 0xa8, 0x8a, 0x20, 0x0d, 0xa0, 0x07, - 0xcf, 0xf4, 0x19, 0x3e, 0x4e, 0xd4, 0x90, 0x44, 0x8f, 0xd5, 0x59, 0x16, 0xd2, 0x18, 0x3f, 0x3f, - 0x84, 0xed, 0xd9, 0xfd, 0x82, 0xa8, 0xaf, 0x94, 0x85, 0x2b, 0x75, 0x7e, 0x61, 0xae, 0xad, 0x5c, - 0x98, 0xc5, 0x5f, 0xb2, 0x30, 0x5f, 0x01, 0xcc, 0xae, 0x09, 0x7a, 0xf7, 0x2e, 0x5b, 0x09, 0xe5, - 0xf4, 0x8e, 0x80, 0xbe, 0x83, 0x92, 0xb8, 0x97, 0x48, 0xe0, 0xc3, 0x95, 0xc0, 0x4d, 0x12, 0xb8, - 0x12, 0xf6, 0x36, 0xb7, 0x61, 0x0f, 0xef, 0x75, 0x21, 0xd3, 0x09, 0xcb, 0xef, 0xd9, 0x53, 0x28, - 0x39, 0x7a, 0x7e, 0xea, 0x15, 0xfb, 0xcd, 0x3d, 0xe8, 0x92, 0x91, 0x6b, 0xa6, 0x60, 0x64, 0x42, - 0x43, 0xcd, 0xf9, 0x61, 0x44, 0xf0, 0xb5, 0x4b, 0x6f, 0x02, 0xd6, 0x2c, 0xc9, 0x31, 0xff, 0x7c, - 0xd5, 0x98, 0xd7, 0xcb, 0x47, 0x4f, 0xf9, 0xa3, 0x14, 0x2f, 0x3e, 0xc1, 0xd3, 0x4a, 0xfd, 0x44, - 0x87, 0xea, 0xa3, 0xae, 0xac, 0x3e, 0xc1, 0xf9, 0xec, 0xee, 0x20, 0xbf, 0x03, 0x9d, 0x95, 0xcb, - 0xb5, 0x0e, 0x95, 0xfe, 0x3b, 0xfb, 0xd2, 0xbc, 0x38, 0x35, 0x7b, 0x96, 0xd5, 0x28, 0x20, 0x80, - 0x8d, 0xcb, 0xce, 0x95, 0x95, 0xac, 0x57, 0xeb, 0xea, 0xf8, 0x58, 0x28, 0x8a, 0x42, 0x71, 0xd2, - 0xe9, 0x8b, 0xbd, 0xbb, 0x2e, 0x14, 0x9d, 0xa3, 0x0b, 0x53, 0xec, 0xdd, 0x87, 0x47, 0x3f, 0x17, - 0x60, 0xdf, 0xa1, 0x93, 0x25, 0x01, 0xc9, 0xc2, 0x1d, 0xd5, 0x92, 0x44, 0x0d, 0xe2, 0x90, 0xb0, - 0x3f, 0x9f, 0x69, 0xfb, 0x31, 0xf5, 0x71, 0x30, 0x6e, 0xd1, 0x68, 0xdc, 0x1e, 0x93, 0x40, 0x9a, - 0xb6, 0x95, 0x0a, 0x87, 0x1e, 0x5b, 0xf0, 0x87, 0xce, 0xeb, 0x9c, 0xe8, 0x7f, 0x85, 0xc2, 0x70, - 0x43, 0xe2, 0x0e, 0xff, 0x1f, 0x00, 0x00, 0xff, 0xff, 0xed, 0xb3, 0x1d, 0xf0, 0x07, 0x12, 0x00, - 0x00, + // 1767 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0xdd, 0x6e, 0xdb, 0xc8, + 0x15, 0x8e, 0x24, 0xc7, 0x96, 0x8e, 0x24, 0x4b, 0x9e, 0xcd, 0x7a, 0x65, 0x27, 0xd9, 0xa4, 0xf4, + 0x2e, 0x92, 0xcd, 0xa2, 0x12, 0x62, 0x63, 0x51, 0xa4, 0xc1, 0x36, 0x95, 0x2d, 0xd9, 0xd6, 0xc6, + 0x1b, 0x1b, 0xa4, 0xbc, 0xfd, 0x41, 0x50, 0x62, 0x44, 0x8e, 0x14, 0xae, 0x29, 0x0e, 0xcb, 0x19, + 0xc5, 0x16, 0x7a, 0xd5, 0xab, 0x3e, 0x43, 0x5f, 0xa1, 0x0f, 0xd0, 0x37, 0xe8, 0x4d, 0x51, 0xa0, + 0x77, 0x7d, 0x8e, 0x5e, 0xf6, 0xb2, 0x98, 0x1f, 0x52, 0x14, 0x2d, 0xcb, 0x06, 0xf6, 0x8e, 0x3c, + 0xe7, 0xfb, 0xbe, 0x33, 0x33, 0xe7, 0xe8, 0x9c, 0xa1, 0xa0, 0x39, 0xa2, 0x74, 0xe4, 0x93, 0x16, + 0xe3, 0x34, 0xc2, 0x23, 0xc2, 0x23, 0x1c, 0xb0, 0x21, 0x89, 0x5a, 0x1f, 0x5f, 0xb6, 0xe2, 0x67, + 0x9b, 0x4f, 0x43, 0xc2, 0x9a, 0x61, 0x44, 0x39, 0x45, 0x5b, 0x0a, 0xdf, 0xcc, 0xe0, 0x9b, 0x1f, + 0x5f, 0x6e, 0x3f, 0xd2, 0x52, 0x38, 0xf4, 0x5a, 0x38, 0x08, 0x28, 0xc7, 0xdc, 0xa3, 0x81, 0x26, + 0x6e, 0x7f, 0xae, 0xbd, 0xf2, 0x6d, 0x30, 0x19, 0xb6, 0xdc, 0x49, 0x24, 0x01, 0xda, 0xff, 0x24, + 0xeb, 0xe7, 0xde, 0x98, 0x30, 0x8e, 0xc7, 0xa1, 0x06, 0x7c, 0xaa, 0x01, 0x51, 0xe8, 0xb4, 0x1c, + 0xea, 0x12, 0x6d, 0xde, 0xd4, 0x66, 0xb1, 0xc8, 0x96, 0x8b, 0x79, 0x6c, 0x7f, 0x98, 0xb6, 0x0b, + 0x2d, 0x3a, 0x74, 0xf1, 0x54, 0x39, 0x8d, 0xd7, 0xf0, 0xe0, 0x48, 0xba, 0x2d, 0x12, 0x7d, 0xf4, + 0x1c, 0xd2, 0x76, 0x1c, 0x3a, 0x09, 0x38, 0xda, 0x81, 0x2a, 0x56, 0x8f, 0x36, 0x19, 0x63, 0xcf, + 0x6f, 0xe4, 0x9e, 0xe6, 0x9e, 0x97, 0xcc, 0x8a, 0x36, 0x76, 0x85, 0xcd, 0xf8, 0x03, 0x54, 0xda, + 0x97, 0xac, 0xed, 0x38, 0x84, 0xb1, 0xb7, 0x64, 0x8a, 0x0c, 0x49, 0x22, 0x8c, 0xd9, 0x17, 0x64, + 0x6a, 0x7b, 0xae, 0x26, 0x95, 0x71, 0x8c, 0xe8, 0xb9, 0xe8, 0x05, 0x6c, 0x30, 0xe2, 0x44, 0x84, + 0xdb, 0x33, 0x68, 0x23, 0x2f, 0x71, 0x35, 0xe5, 0x48, 0xf4, 0x8c, 0x7f, 0xe5, 0xa1, 0x7e, 0x3a, + 0xf8, 0x91, 0x38, 0xfc, 0x80, 0x06, 0xae, 0x27, 0x0f, 0x11, 0x85, 0xf0, 0x7c, 0xec, 0x05, 0xb6, + 0xd8, 0x88, 0x4d, 0x7c, 0x1c, 0x32, 0xe2, 0xda, 0xcc, 0x0b, 0x1c, 0x62, 0xfb, 0x98, 0x71, 0x7b, + 0x4c, 0x5d, 0x6f, 0xe8, 0x39, 0xf2, 0x40, 0x65, 0xfc, 0xf2, 0xee, 0x96, 0x4e, 0x6d, 0x33, 0x3e, + 0xd1, 0x66, 0x47, 0x9f, 0xb8, 0xb9, 0x33, 0xf6, 0x82, 0xbe, 0x37, 0x26, 0x5d, 0x25, 0x64, 0x09, + 0x9d, 0x13, 0xcc, 0xf8, 0xf7, 0x29, 0x15, 0x19, 0x11, 0x5f, 0xdd, 0x2d, 0x62, 0xfe, 0xf6, 0x88, + 0xf8, 0xea, 0xd6, 0x88, 0x5f, 0x41, 0xdd, 0x0b, 0x1c, 0x7f, 0xe2, 0x12, 0x3b, 0x8c, 0xc8, 0xd0, + 0xbb, 0x22, 0xac, 0x51, 0x78, 0x5a, 0x10, 0x67, 0xa4, 0xed, 0x67, 0xda, 0x2c, 0xa0, 0xe4, 0x2a, + 0x03, 0x5d, 0x51, 0x50, 0x6d, 0x8f, 0xa1, 0xc6, 0x0b, 0x58, 0x3b, 0x72, 0x58, 0x07, 0x73, 0x8c, + 0x9e, 0x40, 0x79, 0x30, 0x71, 0x2e, 0x08, 0xb7, 0x03, 0x3c, 0x26, 0x3a, 0x4f, 0xa0, 0x4c, 0xef, + 0xf0, 0x98, 0x18, 0x7f, 0x82, 0x52, 0xfb, 0x92, 0x59, 0x7b, 0x77, 0x42, 0xa3, 0xef, 0x61, 0x1d, + 0x5f, 0xb2, 0x6c, 0x46, 0xcb, 0xbb, 0xcf, 0x9a, 0x37, 0xfe, 0x48, 0x9a, 0xe9, 0xca, 0x31, 0x2b, + 0x38, 0xf5, 0x66, 0x7c, 0x09, 0xc5, 0x63, 0xce, 0x43, 0x19, 0x7b, 0x0b, 0x8a, 0xbe, 0xc7, 0xb8, + 0x3d, 0x89, 0xe2, 0x1a, 0x5c, 0x13, 0xef, 0xe7, 0x91, 0x6f, 0xfc, 0x25, 0x0f, 0xb5, 0xbe, 0x56, + 0x3c, 0x0d, 0x55, 0x75, 0xfc, 0x0e, 0x5e, 0xd0, 0x8f, 0x24, 0xba, 0x8c, 0x3c, 0x4e, 0x6c, 0x2a, + 0x6b, 0x87, 0xd9, 0xd8, 0x8f, 0x08, 0x76, 0xa7, 0x36, 0xb9, 0xf2, 0x18, 0xf7, 0x82, 0x91, 0xed, + 0x05, 0x22, 0x81, 0x17, 0x52, 0xb0, 0x68, 0x7e, 0x99, 0x30, 0x54, 0xb1, 0xb1, 0xb6, 0xc2, 0x77, + 0x35, 0xbc, 0x17, 0x58, 0x5e, 0x70, 0x81, 0x7e, 0x0d, 0x8f, 0x5d, 0xe2, 0x93, 0x94, 0xee, 0x24, + 0xf0, 0xfe, 0x38, 0x21, 0x89, 0x5a, 0x5e, 0xaa, 0x6d, 0x29, 0x90, 0x96, 0x3a, 0x97, 0x10, 0xad, + 0xf0, 0x1b, 0xf8, 0x2a, 0xa3, 0x30, 0x8c, 0xe8, 0xd8, 0x66, 0x74, 0x12, 0x39, 0xc4, 0xc6, 0x43, + 0x2e, 0x5a, 0x8c, 0xde, 0x50, 0xa3, 0x20, 0xd5, 0xbe, 0x98, 0x53, 0x3b, 0x8c, 0xe8, 0xd8, 0x92, + 0xe8, 0xb6, 0x00, 0xc7, 0x9b, 0x37, 0xfe, 0xba, 0x02, 0x95, 0xf8, 0xc5, 0x0a, 0x89, 0x83, 0x4e, + 0xa0, 0x36, 0x72, 0x98, 0xed, 0x62, 0x8e, 0xb5, 0xbc, 0xfe, 0x2d, 0x18, 0x4b, 0x32, 0xa2, 0x8b, + 0xe3, 0xf8, 0x9e, 0x59, 0x1d, 0xa9, 0x47, 0x15, 0x0b, 0x59, 0x80, 0x44, 0x7a, 0xd9, 0xde, 0x9c, + 0xa0, 0x4a, 0xf1, 0x17, 0xcb, 0x53, 0xac, 0x2a, 0xe8, 0xf8, 0x9e, 0x59, 0xc3, 0xf1, 0x8b, 0x16, + 0x3d, 0x85, 0xfa, 0x07, 0xce, 0xc3, 0x39, 0xc9, 0x82, 0x94, 0xdc, 0x59, 0x22, 0x19, 0xd7, 0xc5, + 0xf1, 0x3d, 0x73, 0xfd, 0x83, 0x7e, 0xd6, 0x82, 0xc7, 0x50, 0x9d, 0xed, 0x59, 0xe4, 0x63, 0xe5, + 0xce, 0x3b, 0xce, 0x99, 0xe5, 0x78, 0xc7, 0x22, 0x4f, 0xbf, 0x85, 0x0d, 0x95, 0x20, 0xdb, 0x49, + 0xfa, 0x4e, 0xe3, 0xbe, 0x54, 0xfb, 0x7a, 0x89, 0x5a, 0xb6, 0x55, 0x99, 0x75, 0x9a, 0x6d, 0x5e, + 0xe7, 0x50, 0x4f, 0x86, 0x09, 0x55, 0x25, 0xdb, 0x58, 0x95, 0xc2, 0x2f, 0x96, 0x08, 0x67, 0x8a, + 0xdc, 0xac, 0xf1, 0x79, 0xc3, 0x7e, 0x15, 0xca, 0xa9, 0x63, 0xdc, 0x2f, 0x43, 0x29, 0x39, 0x05, + 0xe3, 0xdf, 0x39, 0x28, 0x5a, 0xce, 0x07, 0xe2, 0x4e, 0x7c, 0x82, 0xda, 0xf0, 0x09, 0xd3, 0xcf, + 0x36, 0xe3, 0x38, 0xe2, 0xe2, 0xb8, 0xe2, 0xda, 0xd8, 0x88, 0x97, 0x20, 0x26, 0x45, 0xb3, 0x83, + 0x39, 0x31, 0x37, 0x62, 0xb4, 0x25, 0xc0, 0xc2, 0x84, 0xbe, 0x85, 0xc4, 0x68, 0x93, 0xc0, 0x55, + 0x02, 0xf9, 0x9b, 0x04, 0x6a, 0x31, 0xb6, 0x1b, 0xb8, 0x92, 0xde, 0x86, 0x0d, 0x15, 0x58, 0xb6, + 0x53, 0x3a, 0xb4, 0x5d, 0x3c, 0xd5, 0x79, 0xdf, 0x9c, 0xa3, 0x8b, 0x26, 0x79, 0x3a, 0xec, 0xe0, + 0xa9, 0xb9, 0x2e, 0x09, 0xc9, 0xbb, 0xf1, 0x9f, 0x15, 0x28, 0xc7, 0x47, 0xf2, 0x1d, 0x1d, 0x20, + 0x04, 0x2b, 0xa9, 0xbe, 0x24, 0x9f, 0xd1, 0x53, 0x28, 0xbb, 0x84, 0x39, 0x91, 0x17, 0x26, 0x6d, + 0xb9, 0x64, 0xa6, 0x4d, 0xe8, 0x31, 0x40, 0x18, 0x51, 0x99, 0x65, 0xcf, 0x95, 0x2b, 0x28, 0x99, + 0x25, 0x6d, 0xe9, 0xb9, 0xe8, 0x04, 0xaa, 0x49, 0xa6, 0x58, 0x48, 0x1c, 0x5d, 0x4d, 0xcf, 0xee, + 0x90, 0x26, 0xf1, 0x0b, 0x34, 0x2b, 0x3c, 0xfd, 0x7b, 0x7c, 0x03, 0xc5, 0xf8, 0x20, 0x74, 0x21, + 0x2d, 0x2b, 0xf2, 0x38, 0x5d, 0x66, 0x42, 0x42, 0x5d, 0x58, 0x65, 0x1c, 0xf3, 0x89, 0x2a, 0x97, + 0xf5, 0xdd, 0x9f, 0xdf, 0x61, 0x1d, 0xdf, 0xd1, 0x41, 0xd3, 0x92, 0x24, 0x53, 0x93, 0xd1, 0x1b, + 0xa8, 0x3a, 0x11, 0x91, 0x43, 0x46, 0x26, 0xa0, 0xb1, 0x26, 0x17, 0xb3, 0x7d, 0x6d, 0x5e, 0xf5, + 0xe3, 0x3b, 0x87, 0x59, 0x89, 0x09, 0xc2, 0x84, 0xce, 0x60, 0xf3, 0xda, 0xd0, 0x53, 0x4a, 0xc5, + 0x5b, 0x95, 0x1e, 0xf8, 0x99, 0x39, 0x27, 0x15, 0xdf, 0x40, 0x55, 0xf6, 0xb8, 0x44, 0xa8, 0x74, + 0xfb, 0x92, 0x62, 0x82, 0x30, 0x19, 0xc7, 0xb0, 0xaa, 0x76, 0x89, 0x36, 0x01, 0x59, 0xfd, 0x76, + 0xff, 0xdc, 0xb2, 0xcf, 0xdf, 0x59, 0x67, 0xdd, 0x83, 0xde, 0x61, 0xaf, 0xdb, 0xa9, 0xdf, 0x43, + 0x65, 0x58, 0xeb, 0xbe, 0x6b, 0xef, 0x9f, 0x74, 0x3b, 0xf5, 0x1c, 0xaa, 0x40, 0xb1, 0xd3, 0xb3, + 0xd4, 0x5b, 0x5e, 0xb8, 0x3a, 0xdd, 0x93, 0x6e, 0xbf, 0xdb, 0xa9, 0x17, 0x8c, 0x43, 0xa8, 0x76, + 0xa3, 0x88, 0x46, 0x27, 0x74, 0xd4, 0x0d, 0x78, 0x34, 0x45, 0x75, 0x28, 0xcc, 0xe6, 0x8e, 0x78, + 0x14, 0xf7, 0x22, 0x22, 0x20, 0xb6, 0x4b, 0x38, 0xf6, 0xfc, 0x78, 0x2c, 0x57, 0xa4, 0xb1, 0xa3, + 0x6c, 0xc6, 0xdf, 0x73, 0x50, 0x91, 0x42, 0xd6, 0x64, 0x3c, 0xc6, 0xd1, 0x14, 0xb5, 0x00, 0x14, + 0x4b, 0x5c, 0xd7, 0xa4, 0xdc, 0xfa, 0x6e, 0x3d, 0xde, 0x60, 0x14, 0x3a, 0xcd, 0x03, 0xea, 0x12, + 0xb3, 0x24, 0x31, 0xe2, 0x51, 0x4c, 0xdc, 0x98, 0x30, 0x09, 0xb8, 0x2c, 0xdf, 0x82, 0x09, 0xda, + 0x2f, 0xee, 0x67, 0x7d, 0xd8, 0x50, 0x00, 0x9f, 0x8e, 0x6c, 0x12, 0xf0, 0xc8, 0xd3, 0x57, 0x84, + 0xf2, 0xee, 0xf3, 0x25, 0xa5, 0x31, 0xb7, 0x3d, 0xb3, 0x46, 0x52, 0xaf, 0x1e, 0x61, 0xc6, 0x7f, + 0xd7, 0xa0, 0x1e, 0x57, 0x8f, 0x8c, 0x43, 0x22, 0x86, 0x5e, 0xc1, 0x56, 0x32, 0xae, 0xe8, 0x24, + 0x70, 0xd3, 0x43, 0x4b, 0xee, 0xa5, 0x60, 0x6e, 0x6a, 0xc0, 0xa1, 0xf0, 0xcf, 0x86, 0x14, 0xfa, + 0x06, 0x3e, 0x1b, 0x4c, 0x39, 0x59, 0x44, 0x54, 0x5b, 0x7a, 0x20, 0xdd, 0x59, 0xda, 0xaf, 0xe0, + 0xd1, 0x7c, 0x44, 0x1a, 0xf8, 0x53, 0xcd, 0x16, 0x8d, 0xbd, 0x20, 0xb9, 0x8d, 0x74, 0xd0, 0xd3, + 0xc0, 0x9f, 0x4a, 0x05, 0xd1, 0xbf, 0x7f, 0x09, 0xdb, 0xe9, 0xb0, 0x19, 0xf6, 0x8a, 0x5a, 0xf2, + 0x2c, 0xf2, 0x1c, 0xf7, 0x2d, 0xec, 0x2c, 0x1a, 0xce, 0xec, 0xc2, 0x0b, 0x43, 0xe2, 0xda, 0x83, + 0xa9, 0xcd, 0xa6, 0x81, 0x23, 0x7f, 0xc4, 0x05, 0xf3, 0x73, 0x9a, 0x9d, 0xcb, 0x96, 0xc2, 0xed, + 0x4f, 0xad, 0x69, 0xe0, 0xa0, 0x23, 0xf8, 0x99, 0x5e, 0xc8, 0x12, 0xa9, 0x55, 0x29, 0xf5, 0x48, + 0xad, 0xe7, 0x06, 0xa1, 0x3d, 0x88, 0x8f, 0xd8, 0x76, 0x68, 0xe8, 0x11, 0xd7, 0xe6, 0x54, 0xed, + 0x66, 0x4d, 0xb2, 0x3f, 0xd1, 0xde, 0x03, 0xe9, 0xec, 0x53, 0xb9, 0x95, 0x16, 0xa8, 0xe3, 0xcd, + 0x52, 0x8a, 0x92, 0xb2, 0x21, 0x7d, 0x73, 0x84, 0x6f, 0xe1, 0x61, 0x1c, 0x45, 0x5d, 0x3b, 0xe6, + 0x53, 0x56, 0x9a, 0x3b, 0xf6, 0x8e, 0x42, 0xa4, 0xd2, 0xf6, 0x0a, 0xb6, 0x54, 0xbc, 0x45, 0x64, + 0x48, 0x9d, 0xfa, 0x42, 0xea, 0xe2, 0xc8, 0x62, 0xbd, 0xe5, 0xb9, 0x1a, 0x4b, 0x93, 0xc5, 0xa2, + 0x93, 0x1a, 0xbb, 0x4e, 0xac, 0xa4, 0x6a, 0x2c, 0x4b, 0x7b, 0x0d, 0xdb, 0x8b, 0xf2, 0x3c, 0xc4, + 0x9e, 0x4f, 0xdc, 0x46, 0x55, 0x32, 0x3f, 0xbb, 0x96, 0xde, 0x43, 0xe9, 0x46, 0xbf, 0x80, 0xc6, + 0xf5, 0xbc, 0x6a, 0xea, 0xba, 0xa4, 0x7e, 0x9a, 0x49, 0xa7, 0x26, 0xf6, 0xc0, 0x48, 0xa2, 0x4a, + 0x8b, 0x48, 0x8a, 0xbe, 0x13, 0xce, 0xd6, 0x5d, 0x93, 0x12, 0x8f, 0xe3, 0xe8, 0x12, 0xd8, 0xa7, + 0x6a, 0x07, 0xc9, 0x06, 0xba, 0xf0, 0x54, 0xaf, 0xe1, 0x66, 0xa1, 0xba, 0x14, 0x7a, 0xa8, 0xd6, + 0xb2, 0x50, 0xc6, 0xf8, 0xf3, 0x7d, 0xd8, 0x98, 0xdd, 0x2f, 0x88, 0xfa, 0x4a, 0x59, 0x38, 0x52, + 0xe7, 0x07, 0x66, 0xfe, 0xd6, 0x81, 0x59, 0xf8, 0x29, 0x03, 0xf3, 0x15, 0xc0, 0xec, 0x9a, 0xa0, + 0x67, 0xef, 0xb2, 0x91, 0x50, 0x4a, 0xee, 0x08, 0xe8, 0x1b, 0x28, 0x8a, 0x7b, 0x89, 0x24, 0xde, + 0xbf, 0x95, 0xb8, 0x46, 0x02, 0x57, 0xd2, 0xde, 0x66, 0x26, 0xec, 0xde, 0x9d, 0x2e, 0x64, 0xfa, + 0xc0, 0xb2, 0x73, 0xf6, 0x08, 0x8a, 0x8e, 0xee, 0x9f, 0x7a, 0xc4, 0x7e, 0x7d, 0x07, 0xb9, 0xb8, + 0xe5, 0x9a, 0x09, 0x19, 0x99, 0x50, 0x57, 0x7d, 0x7e, 0x10, 0x11, 0x7c, 0xe1, 0xd2, 0xcb, 0x80, + 0x35, 0x8a, 0xb2, 0xcd, 0x3f, 0xbb, 0xad, 0xcd, 0xeb, 0xe1, 0xa3, 0xbb, 0xfc, 0x7e, 0xc2, 0x17, + 0x9f, 0xe0, 0x49, 0xa6, 0x7e, 0xa4, 0x03, 0xf5, 0x51, 0x57, 0x52, 0x9f, 0xe0, 0x7c, 0x76, 0x77, + 0x90, 0xdf, 0x81, 0xce, 0xad, 0xc3, 0xb5, 0x06, 0xe5, 0xde, 0x3b, 0xfb, 0xcc, 0x3c, 0x3d, 0x32, + 0xbb, 0x96, 0x55, 0xcf, 0x21, 0x80, 0xd5, 0xb3, 0xf6, 0xb9, 0x15, 0x8f, 0x57, 0xeb, 0xfc, 0xe0, + 0x40, 0x38, 0x0a, 0xc2, 0x71, 0xd8, 0xee, 0x89, 0xb9, 0xbb, 0x22, 0x1c, 0xed, 0xfd, 0x53, 0x53, + 0xcc, 0xdd, 0xfb, 0xfb, 0xff, 0xc8, 0xc1, 0x8e, 0x43, 0xc7, 0x4b, 0x36, 0x24, 0x13, 0xb7, 0x5f, + 0x8d, 0x0f, 0xaa, 0x3f, 0x0d, 0x09, 0xfb, 0xfd, 0xb1, 0xc6, 0x8f, 0xa8, 0x8f, 0x83, 0x51, 0x93, + 0x46, 0xa3, 0xd6, 0x88, 0x04, 0x12, 0xda, 0x52, 0x2e, 0x1c, 0x7a, 0x6c, 0xc1, 0x1f, 0x3a, 0xaf, + 0x33, 0xa6, 0xff, 0xe5, 0x72, 0x7f, 0xcb, 0x3f, 0x51, 0xff, 0x83, 0x34, 0x0f, 0x7c, 0x3a, 0x71, + 0x9b, 0x96, 0x42, 0xc4, 0x01, 0x9b, 0x3f, 0xbc, 0xfc, 0x67, 0x8c, 0x78, 0x2f, 0x11, 0xef, 0x33, + 0x88, 0xf7, 0x3f, 0xbc, 0x1c, 0xac, 0xca, 0xd8, 0x7b, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x0c, + 0xec, 0x5b, 0x90, 0x4b, 0x12, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/googleapis/streetview/publish/v1/resources.pb.go b/vendor/google.golang.org/genproto/googleapis/streetview/publish/v1/resources.pb.go new file mode 100644 index 0000000..a92e9ea --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/streetview/publish/v1/resources.pb.go @@ -0,0 +1,398 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/streetview/publish/v1/resources.proto + +/* +Package publish is a generated protocol buffer package. + +It is generated from these files: + google/streetview/publish/v1/resources.proto + google/streetview/publish/v1/rpcmessages.proto + google/streetview/publish/v1/streetview_publish.proto + +It has these top-level messages: + UploadRef + PhotoId + Level + Pose + Place + Connection + Photo + CreatePhotoRequest + GetPhotoRequest + BatchGetPhotosRequest + BatchGetPhotosResponse + PhotoResponse + ListPhotosRequest + ListPhotosResponse + UpdatePhotoRequest + BatchUpdatePhotosRequest + BatchUpdatePhotosResponse + DeletePhotoRequest + BatchDeletePhotosRequest + BatchDeletePhotosResponse +*/ +package publish + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf1 "github.com/golang/protobuf/ptypes/timestamp" +import google_type "google.golang.org/genproto/googleapis/type/latlng" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Upload reference for media files. +type UploadRef struct { + // Required. An upload reference should be unique for each user. It follows + // the form: + // "https://streetviewpublish.googleapis.com/media/user//photo/" + UploadUrl string `protobuf:"bytes,1,opt,name=upload_url,json=uploadUrl" json:"upload_url,omitempty"` +} + +func (m *UploadRef) Reset() { *m = UploadRef{} } +func (m *UploadRef) String() string { return proto.CompactTextString(m) } +func (*UploadRef) ProtoMessage() {} +func (*UploadRef) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *UploadRef) GetUploadUrl() string { + if m != nil { + return m.UploadUrl + } + return "" +} + +// Identifier for a photo. +type PhotoId struct { + // Required. A base64 encoded identifier. + Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` +} + +func (m *PhotoId) Reset() { *m = PhotoId{} } +func (m *PhotoId) String() string { return proto.CompactTextString(m) } +func (*PhotoId) ProtoMessage() {} +func (*PhotoId) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *PhotoId) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +// Level information containing level number and its corresponding name. +type Level struct { + // Floor number, used for ordering. 0 indicates the ground level, 1 indicates + // the first level above ground level, -1 indicates the first level under + // ground level. Non-integer values are OK. + Number float64 `protobuf:"fixed64,1,opt,name=number" json:"number,omitempty"` + // Required. A name assigned to this Level, restricted to 3 characters. + // Consider how the elevator buttons would be labeled for this level if there + // was an elevator. + Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` +} + +func (m *Level) Reset() { *m = Level{} } +func (m *Level) String() string { return proto.CompactTextString(m) } +func (*Level) ProtoMessage() {} +func (*Level) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *Level) GetNumber() float64 { + if m != nil { + return m.Number + } + return 0 +} + +func (m *Level) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Raw pose measurement for an entity. +type Pose struct { + // Latitude and longitude pair of the pose, as explained here: + // https://cloud.google.com/datastore/docs/reference/rest/Shared.Types/LatLng + // When creating a photo, if the latitude and longitude pair are not provided + // here, the geolocation from the exif header will be used. + // If the latitude and longitude pair is not provided and cannot be found in + // the exif header, the create photo process will fail. + LatLngPair *google_type.LatLng `protobuf:"bytes,1,opt,name=lat_lng_pair,json=latLngPair" json:"lat_lng_pair,omitempty"` + // Altitude of the pose in meters above ground level (as defined by WGS84). + // NaN indicates an unmeasured quantity. + Altitude float64 `protobuf:"fixed64,2,opt,name=altitude" json:"altitude,omitempty"` + // Compass heading, measured at the center of the photo in degrees clockwise + // from North. Value must be >=0 and <360. + // NaN indicates an unmeasured quantity. + Heading float64 `protobuf:"fixed64,3,opt,name=heading" json:"heading,omitempty"` + // Pitch, measured at the center of the photo in degrees. Value must be >=-90 + // and <= 90. A value of -90 means looking directly down, and a value of 90 + // means looking directly up. + // NaN indicates an unmeasured quantity. + Pitch float64 `protobuf:"fixed64,4,opt,name=pitch" json:"pitch,omitempty"` + // Roll, measured in degrees. Value must be >= 0 and <360. A value of 0 + // means level with the horizon. + // NaN indicates an unmeasured quantity. + Roll float64 `protobuf:"fixed64,5,opt,name=roll" json:"roll,omitempty"` + // Level (the floor in a building) used to configure vertical navigation. + Level *Level `protobuf:"bytes,7,opt,name=level" json:"level,omitempty"` +} + +func (m *Pose) Reset() { *m = Pose{} } +func (m *Pose) String() string { return proto.CompactTextString(m) } +func (*Pose) ProtoMessage() {} +func (*Pose) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *Pose) GetLatLngPair() *google_type.LatLng { + if m != nil { + return m.LatLngPair + } + return nil +} + +func (m *Pose) GetAltitude() float64 { + if m != nil { + return m.Altitude + } + return 0 +} + +func (m *Pose) GetHeading() float64 { + if m != nil { + return m.Heading + } + return 0 +} + +func (m *Pose) GetPitch() float64 { + if m != nil { + return m.Pitch + } + return 0 +} + +func (m *Pose) GetRoll() float64 { + if m != nil { + return m.Roll + } + return 0 +} + +func (m *Pose) GetLevel() *Level { + if m != nil { + return m.Level + } + return nil +} + +// Place metadata for an entity. +type Place struct { + // Required. Place identifier, as described in + // https://developers.google.com/places/place-id. + PlaceId string `protobuf:"bytes,1,opt,name=place_id,json=placeId" json:"place_id,omitempty"` +} + +func (m *Place) Reset() { *m = Place{} } +func (m *Place) String() string { return proto.CompactTextString(m) } +func (*Place) ProtoMessage() {} +func (*Place) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *Place) GetPlaceId() string { + if m != nil { + return m.PlaceId + } + return "" +} + +// A connection is the link from a source photo to a destination photo. +type Connection struct { + // Required. The destination of the connection from the containing photo to + // another photo. + Target *PhotoId `protobuf:"bytes,1,opt,name=target" json:"target,omitempty"` +} + +func (m *Connection) Reset() { *m = Connection{} } +func (m *Connection) String() string { return proto.CompactTextString(m) } +func (*Connection) ProtoMessage() {} +func (*Connection) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *Connection) GetTarget() *PhotoId { + if m != nil { + return m.Target + } + return nil +} + +// Photo is used to store 360 photos along with photo metadata. +type Photo struct { + // Output only. Identifier for the photo, which is unique among all photos in + // Google. + PhotoId *PhotoId `protobuf:"bytes,1,opt,name=photo_id,json=photoId" json:"photo_id,omitempty"` + // Required (when creating photo). Input only. The resource URL where the + // photo bytes are uploaded to. + UploadReference *UploadRef `protobuf:"bytes,2,opt,name=upload_reference,json=uploadReference" json:"upload_reference,omitempty"` + // Output only. The download URL for the photo bytes. This field is set only + // when the `view` parameter in a `GetPhotoRequest` is set to + // `INCLUDE_DOWNLOAD_URL`. + DownloadUrl string `protobuf:"bytes,3,opt,name=download_url,json=downloadUrl" json:"download_url,omitempty"` + // Output only. The thumbnail URL for showing a preview of the given photo. + ThumbnailUrl string `protobuf:"bytes,9,opt,name=thumbnail_url,json=thumbnailUrl" json:"thumbnail_url,omitempty"` + // Output only. The share link for the photo. + ShareLink string `protobuf:"bytes,11,opt,name=share_link,json=shareLink" json:"share_link,omitempty"` + // Pose of the photo. + Pose *Pose `protobuf:"bytes,4,opt,name=pose" json:"pose,omitempty"` + // Connections to other photos. A connection represents the link from this + // photo to another photo. + Connections []*Connection `protobuf:"bytes,5,rep,name=connections" json:"connections,omitempty"` + // Absolute time when the photo was captured. + // When the photo has no exif timestamp, this is used to set a timestamp in + // the photo metadata. + CaptureTime *google_protobuf1.Timestamp `protobuf:"bytes,6,opt,name=capture_time,json=captureTime" json:"capture_time,omitempty"` + // Places where this photo belongs. + Places []*Place `protobuf:"bytes,7,rep,name=places" json:"places,omitempty"` + // Output only. View count of the photo. + ViewCount int64 `protobuf:"varint,10,opt,name=view_count,json=viewCount" json:"view_count,omitempty"` +} + +func (m *Photo) Reset() { *m = Photo{} } +func (m *Photo) String() string { return proto.CompactTextString(m) } +func (*Photo) ProtoMessage() {} +func (*Photo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *Photo) GetPhotoId() *PhotoId { + if m != nil { + return m.PhotoId + } + return nil +} + +func (m *Photo) GetUploadReference() *UploadRef { + if m != nil { + return m.UploadReference + } + return nil +} + +func (m *Photo) GetDownloadUrl() string { + if m != nil { + return m.DownloadUrl + } + return "" +} + +func (m *Photo) GetThumbnailUrl() string { + if m != nil { + return m.ThumbnailUrl + } + return "" +} + +func (m *Photo) GetShareLink() string { + if m != nil { + return m.ShareLink + } + return "" +} + +func (m *Photo) GetPose() *Pose { + if m != nil { + return m.Pose + } + return nil +} + +func (m *Photo) GetConnections() []*Connection { + if m != nil { + return m.Connections + } + return nil +} + +func (m *Photo) GetCaptureTime() *google_protobuf1.Timestamp { + if m != nil { + return m.CaptureTime + } + return nil +} + +func (m *Photo) GetPlaces() []*Place { + if m != nil { + return m.Places + } + return nil +} + +func (m *Photo) GetViewCount() int64 { + if m != nil { + return m.ViewCount + } + return 0 +} + +func init() { + proto.RegisterType((*UploadRef)(nil), "google.streetview.publish.v1.UploadRef") + proto.RegisterType((*PhotoId)(nil), "google.streetview.publish.v1.PhotoId") + proto.RegisterType((*Level)(nil), "google.streetview.publish.v1.Level") + proto.RegisterType((*Pose)(nil), "google.streetview.publish.v1.Pose") + proto.RegisterType((*Place)(nil), "google.streetview.publish.v1.Place") + proto.RegisterType((*Connection)(nil), "google.streetview.publish.v1.Connection") + proto.RegisterType((*Photo)(nil), "google.streetview.publish.v1.Photo") +} + +func init() { proto.RegisterFile("google/streetview/publish/v1/resources.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 651 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xdb, 0x6a, 0xdb, 0x4c, + 0x10, 0xc6, 0xf1, 0x29, 0x1e, 0xf9, 0x3f, 0xb0, 0xff, 0x4f, 0x51, 0x4c, 0x43, 0x53, 0x85, 0x52, + 0x53, 0x8a, 0x44, 0x1c, 0x5a, 0x28, 0x21, 0x50, 0x92, 0xab, 0xb4, 0xbe, 0x30, 0xdb, 0xa6, 0x17, + 0xbd, 0x11, 0x6b, 0x69, 0x22, 0x2f, 0x59, 0xef, 0x2e, 0xab, 0x95, 0x43, 0x9f, 0xa1, 0x8f, 0xd1, + 0x97, 0xea, 0xe3, 0x14, 0xad, 0x56, 0x4e, 0x2f, 0x82, 0xd3, 0x2b, 0xcf, 0x7c, 0xf3, 0x7d, 0xe3, + 0x39, 0xad, 0xe0, 0x75, 0xa1, 0x54, 0x21, 0x30, 0x29, 0xad, 0x41, 0xb4, 0x1b, 0x8e, 0x77, 0x89, + 0xae, 0x96, 0x82, 0x97, 0xab, 0x64, 0x73, 0x92, 0x18, 0x2c, 0x55, 0x65, 0x32, 0x2c, 0x63, 0x6d, + 0x94, 0x55, 0xe4, 0x69, 0xc3, 0x8e, 0xef, 0xd9, 0xb1, 0x67, 0xc7, 0x9b, 0x93, 0x89, 0x8f, 0x26, + 0x4c, 0xf3, 0x84, 0x49, 0xa9, 0x2c, 0xb3, 0x5c, 0x49, 0xaf, 0x9d, 0x3c, 0xf3, 0x51, 0xe7, 0x2d, + 0xab, 0x9b, 0xc4, 0xf2, 0x35, 0x96, 0x96, 0xad, 0xb5, 0x27, 0x84, 0x9e, 0x60, 0xbf, 0x69, 0x4c, + 0x04, 0xb3, 0x42, 0x16, 0x4d, 0x24, 0x7a, 0x05, 0xa3, 0x6b, 0x2d, 0x14, 0xcb, 0x29, 0xde, 0x90, + 0x43, 0x80, 0xca, 0x39, 0x69, 0x65, 0x44, 0xd8, 0x39, 0xea, 0x4c, 0x47, 0x74, 0xd4, 0x20, 0xd7, + 0x46, 0x44, 0x07, 0x30, 0x5c, 0xac, 0x94, 0x55, 0x57, 0x39, 0xf9, 0x1b, 0xf6, 0x78, 0xee, 0x19, + 0x7b, 0x3c, 0x8f, 0x4e, 0xa1, 0x3f, 0xc7, 0x0d, 0x0a, 0xf2, 0x04, 0x06, 0xb2, 0x5a, 0x2f, 0xd1, + 0xb8, 0x60, 0x87, 0x7a, 0x8f, 0x10, 0xe8, 0x49, 0xb6, 0xc6, 0x70, 0xcf, 0x49, 0x9c, 0x1d, 0xfd, + 0xec, 0x40, 0x6f, 0xa1, 0x4a, 0x24, 0x6f, 0x60, 0x2c, 0x98, 0x4d, 0x85, 0x2c, 0x52, 0xcd, 0x78, + 0x23, 0x0d, 0x66, 0xff, 0xc5, 0x7e, 0x24, 0x75, 0xd5, 0xf1, 0x9c, 0xd9, 0xb9, 0x2c, 0x28, 0x08, + 0xf7, 0xbb, 0x60, 0xdc, 0x90, 0x09, 0xec, 0x33, 0x61, 0xb9, 0xad, 0xf2, 0x26, 0x6f, 0x87, 0x6e, + 0x7d, 0x12, 0xc2, 0x70, 0x85, 0x2c, 0xe7, 0xb2, 0x08, 0xbb, 0x2e, 0xd4, 0xba, 0xe4, 0x7f, 0xe8, + 0x6b, 0x6e, 0xb3, 0x55, 0xd8, 0x73, 0x78, 0xe3, 0xd4, 0xf5, 0x19, 0x25, 0x44, 0xd8, 0x77, 0xa0, + 0xb3, 0xc9, 0x3b, 0xe8, 0x8b, 0xba, 0xa9, 0x70, 0xe8, 0xea, 0x39, 0x8e, 0x77, 0xad, 0x28, 0x76, + 0xfd, 0xd3, 0x46, 0x11, 0x45, 0xd0, 0x5f, 0x08, 0x96, 0x21, 0x39, 0x80, 0x7d, 0x5d, 0x1b, 0xe9, + 0x76, 0x5c, 0x43, 0xe7, 0x5f, 0xe5, 0xd1, 0x47, 0x80, 0x4b, 0x25, 0x25, 0x66, 0xf5, 0x2a, 0xc9, + 0x39, 0x0c, 0x2c, 0x33, 0x05, 0x5a, 0xdf, 0xfd, 0x8b, 0xdd, 0xff, 0xe6, 0x17, 0x41, 0xbd, 0x28, + 0xfa, 0xd1, 0x83, 0xbe, 0xc3, 0xc8, 0x7b, 0xd8, 0xd7, 0xb5, 0xd1, 0xfe, 0xe3, 0x1f, 0xa7, 0x1a, + 0x6a, 0xbf, 0x5c, 0x0a, 0xff, 0xfa, 0x33, 0x30, 0x78, 0x83, 0x06, 0x65, 0xd6, 0xcc, 0x37, 0x98, + 0xbd, 0xdc, 0x9d, 0x69, 0x7b, 0x49, 0xf4, 0x9f, 0xaa, 0x35, 0x1b, 0x3d, 0x79, 0x0e, 0xe3, 0x5c, + 0xdd, 0xc9, 0xed, 0x71, 0x75, 0xdd, 0x2c, 0x82, 0x16, 0xbb, 0x36, 0x82, 0x1c, 0xc3, 0x5f, 0x76, + 0x55, 0xad, 0x97, 0x92, 0x71, 0xe1, 0x38, 0x23, 0xc7, 0x19, 0x6f, 0xc1, 0x9a, 0x74, 0x08, 0x50, + 0xae, 0x98, 0xc1, 0x54, 0x70, 0x79, 0x1b, 0x06, 0xcd, 0x89, 0x3a, 0x64, 0xce, 0xe5, 0x2d, 0x79, + 0x0b, 0x3d, 0xad, 0x4a, 0x74, 0xbb, 0x0d, 0x66, 0xd1, 0x23, 0x8d, 0xab, 0x12, 0xa9, 0xe3, 0x93, + 0x0f, 0x10, 0x64, 0xdb, 0x5d, 0x94, 0x61, 0xff, 0xa8, 0x3b, 0x0d, 0x66, 0xd3, 0xdd, 0xf2, 0xfb, + 0xe5, 0xd1, 0xdf, 0xc5, 0xe4, 0x1c, 0xc6, 0x19, 0xd3, 0xb6, 0x32, 0x98, 0xd6, 0xef, 0x30, 0x1c, + 0xb8, 0x5a, 0x26, 0x6d, 0xb2, 0xf6, 0x91, 0xc6, 0x9f, 0xdb, 0x47, 0x4a, 0x03, 0xcf, 0xaf, 0x11, + 0x72, 0x06, 0x03, 0x77, 0x21, 0x65, 0x38, 0x74, 0x55, 0x3c, 0x72, 0x76, 0xee, 0xcc, 0xa8, 0x97, + 0xd4, 0xe3, 0xa9, 0x09, 0x69, 0xa6, 0x2a, 0x69, 0x43, 0x38, 0xea, 0x4c, 0xbb, 0x74, 0x54, 0x23, + 0x97, 0x35, 0x70, 0xf1, 0xbd, 0x03, 0xd3, 0x4c, 0xad, 0xdb, 0x8c, 0x05, 0xaa, 0xb8, 0x2a, 0xb2, + 0x87, 0x33, 0x5f, 0x4c, 0x3e, 0x39, 0xf8, 0x0b, 0xc7, 0xbb, 0x45, 0x83, 0xd2, 0xf6, 0x9b, 0xf5, + 0xf5, 0xb2, 0xcd, 0xa0, 0x04, 0x93, 0x45, 0xac, 0x4c, 0x91, 0x14, 0x28, 0x5d, 0x6b, 0x49, 0x13, + 0x62, 0x9a, 0x97, 0x0f, 0x7f, 0xfa, 0xce, 0xbc, 0xb9, 0x1c, 0x38, 0xfe, 0xe9, 0xaf, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xad, 0x4e, 0x7a, 0x51, 0x29, 0x05, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/streetview/publish/v1/rpcmessages.pb.go b/vendor/google.golang.org/genproto/googleapis/streetview/publish/v1/rpcmessages.pb.go new file mode 100644 index 0000000..4a96824 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/streetview/publish/v1/rpcmessages.pb.go @@ -0,0 +1,470 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/streetview/publish/v1/rpcmessages.proto + +package publish + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import google_protobuf2 "google.golang.org/genproto/protobuf/field_mask" +import google_rpc "google.golang.org/genproto/googleapis/rpc/status" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Specifies which view of the `Photo` should be included in the response. +type PhotoView int32 + +const ( + // Server reponses do not include the download URL for the photo bytes. + // The default value. + PhotoView_BASIC PhotoView = 0 + // Server responses include the download URL for the photo bytes. + PhotoView_INCLUDE_DOWNLOAD_URL PhotoView = 1 +) + +var PhotoView_name = map[int32]string{ + 0: "BASIC", + 1: "INCLUDE_DOWNLOAD_URL", +} +var PhotoView_value = map[string]int32{ + "BASIC": 0, + "INCLUDE_DOWNLOAD_URL": 1, +} + +func (x PhotoView) String() string { + return proto.EnumName(PhotoView_name, int32(x)) +} +func (PhotoView) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +// Request to create a photo. +type CreatePhotoRequest struct { + // Required. Photo to create. + Photo *Photo `protobuf:"bytes,1,opt,name=photo" json:"photo,omitempty"` +} + +func (m *CreatePhotoRequest) Reset() { *m = CreatePhotoRequest{} } +func (m *CreatePhotoRequest) String() string { return proto.CompactTextString(m) } +func (*CreatePhotoRequest) ProtoMessage() {} +func (*CreatePhotoRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *CreatePhotoRequest) GetPhoto() *Photo { + if m != nil { + return m.Photo + } + return nil +} + +// Request to get a photo. +// +// By default +// - does not return the download URL for the photo bytes. +// +// Parameters: +// - 'view' controls if the download URL for the photo bytes will be returned. +type GetPhotoRequest struct { + // Required. ID of the photo. + PhotoId string `protobuf:"bytes,1,opt,name=photo_id,json=photoId" json:"photo_id,omitempty"` + // Specifies if a download URL for the photo bytes should be returned in the + // Photo response. + View PhotoView `protobuf:"varint,2,opt,name=view,enum=google.streetview.publish.v1.PhotoView" json:"view,omitempty"` +} + +func (m *GetPhotoRequest) Reset() { *m = GetPhotoRequest{} } +func (m *GetPhotoRequest) String() string { return proto.CompactTextString(m) } +func (*GetPhotoRequest) ProtoMessage() {} +func (*GetPhotoRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +func (m *GetPhotoRequest) GetPhotoId() string { + if m != nil { + return m.PhotoId + } + return "" +} + +func (m *GetPhotoRequest) GetView() PhotoView { + if m != nil { + return m.View + } + return PhotoView_BASIC +} + +// Request to get one or more photos. +// By default +// - does not return the download URL for the photo bytes. +// +// Parameters: +// - 'view' controls if the download URL for the photo bytes will be returned. +type BatchGetPhotosRequest struct { + // Required. IDs of the photos. + PhotoIds []string `protobuf:"bytes,1,rep,name=photo_ids,json=photoIds" json:"photo_ids,omitempty"` + // Specifies if a download URL for the photo bytes should be returned in the + // Photo response. + View PhotoView `protobuf:"varint,2,opt,name=view,enum=google.streetview.publish.v1.PhotoView" json:"view,omitempty"` +} + +func (m *BatchGetPhotosRequest) Reset() { *m = BatchGetPhotosRequest{} } +func (m *BatchGetPhotosRequest) String() string { return proto.CompactTextString(m) } +func (*BatchGetPhotosRequest) ProtoMessage() {} +func (*BatchGetPhotosRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +func (m *BatchGetPhotosRequest) GetPhotoIds() []string { + if m != nil { + return m.PhotoIds + } + return nil +} + +func (m *BatchGetPhotosRequest) GetView() PhotoView { + if m != nil { + return m.View + } + return PhotoView_BASIC +} + +// Response to batch get of photos. +type BatchGetPhotosResponse struct { + // List of results for each individual photo requested, in the same order as + // the request. + Results []*PhotoResponse `protobuf:"bytes,1,rep,name=results" json:"results,omitempty"` +} + +func (m *BatchGetPhotosResponse) Reset() { *m = BatchGetPhotosResponse{} } +func (m *BatchGetPhotosResponse) String() string { return proto.CompactTextString(m) } +func (*BatchGetPhotosResponse) ProtoMessage() {} +func (*BatchGetPhotosResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } + +func (m *BatchGetPhotosResponse) GetResults() []*PhotoResponse { + if m != nil { + return m.Results + } + return nil +} + +// Response payload for a single `Photo` in batch operations including +// `BatchGetPhotosRequest` and `BatchUpdatePhotosRequest`. +type PhotoResponse struct { + // The status for the operation to get or update a single photo in the batch + // request. + Status *google_rpc.Status `protobuf:"bytes,1,opt,name=status" json:"status,omitempty"` + // The photo resource, if the request was successful. + Photo *Photo `protobuf:"bytes,2,opt,name=photo" json:"photo,omitempty"` +} + +func (m *PhotoResponse) Reset() { *m = PhotoResponse{} } +func (m *PhotoResponse) String() string { return proto.CompactTextString(m) } +func (*PhotoResponse) ProtoMessage() {} +func (*PhotoResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } + +func (m *PhotoResponse) GetStatus() *google_rpc.Status { + if m != nil { + return m.Status + } + return nil +} + +func (m *PhotoResponse) GetPhoto() *Photo { + if m != nil { + return m.Photo + } + return nil +} + +// Request to list all photos that belong to the user sending the request. +// +// By default +// - does not return the download URL for the photo bytes. +// +// Parameters: +// - 'view' controls if the download URL for the photo bytes will be returned. +// - 'page_size' determines the maximum number of photos to return. +// - 'page_token' is the next page token value returned from a previous List +// request, if any. +type ListPhotosRequest struct { + // Specifies if a download URL for the photos bytes should be returned in the + // Photos response. + View PhotoView `protobuf:"varint,1,opt,name=view,enum=google.streetview.publish.v1.PhotoView" json:"view,omitempty"` + // The maximum number of photos to return. + // `page_size` must be non-negative. If `page_size` is zero or is not + // provided, the default page size of 100 will be used. + // The number of photos returned in the response may be less than `page_size` + // if the number of photos that belong to the user is less than `page_size`. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize" json:"page_size,omitempty"` + // The next_page_token value returned from a previous List request, if any. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken" json:"page_token,omitempty"` + // The filter expression. + // Example: `placeId=ChIJj61dQgK6j4AR4GeTYWZsKWw` + Filter string `protobuf:"bytes,4,opt,name=filter" json:"filter,omitempty"` +} + +func (m *ListPhotosRequest) Reset() { *m = ListPhotosRequest{} } +func (m *ListPhotosRequest) String() string { return proto.CompactTextString(m) } +func (*ListPhotosRequest) ProtoMessage() {} +func (*ListPhotosRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } + +func (m *ListPhotosRequest) GetView() PhotoView { + if m != nil { + return m.View + } + return PhotoView_BASIC +} + +func (m *ListPhotosRequest) GetPageSize() int32 { + if m != nil { + return m.PageSize + } + return 0 +} + +func (m *ListPhotosRequest) GetPageToken() string { + if m != nil { + return m.PageToken + } + return "" +} + +func (m *ListPhotosRequest) GetFilter() string { + if m != nil { + return m.Filter + } + return "" +} + +// Response to list all photos that belong to a user. +type ListPhotosResponse struct { + // List of photos. There will be a maximum number of items returned based on + // the page_size field in the request. + Photos []*Photo `protobuf:"bytes,1,rep,name=photos" json:"photos,omitempty"` + // Token to retrieve the next page of results, or empty if there are no + // more results in the list. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken" json:"next_page_token,omitempty"` +} + +func (m *ListPhotosResponse) Reset() { *m = ListPhotosResponse{} } +func (m *ListPhotosResponse) String() string { return proto.CompactTextString(m) } +func (*ListPhotosResponse) ProtoMessage() {} +func (*ListPhotosResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } + +func (m *ListPhotosResponse) GetPhotos() []*Photo { + if m != nil { + return m.Photos + } + return nil +} + +func (m *ListPhotosResponse) GetNextPageToken() string { + if m != nil { + return m.NextPageToken + } + return "" +} + +// Request to update the metadata of a photo. +// Updating the pixels of a photo is not supported. +type UpdatePhotoRequest struct { + // Required. Photo object containing the new metadata. Only the fields + // specified in `update_mask` are used. If `update_mask` is not present, the + // update applies to all fields. + // **Note:** To update `pose.altitude`, `pose.latlngpair` has to be filled as + // well. Otherwise, the request will fail. + Photo *Photo `protobuf:"bytes,1,opt,name=photo" json:"photo,omitempty"` + // Mask that identifies fields on the photo metadata to update. + // If not present, the old Photo metadata will be entirely replaced with the + // new Photo metadata in this request. The update fails if invalid fields are + // specified. Multiple fields can be specified in a comma-delimited list. + // + // The following fields are valid: + // + // * `pose.heading` + // * `pose.latlngpair` + // * `pose.pitch` + // * `pose.roll` + // * `pose.level` + // * `pose.altitude` + // * `connections` + // * `places` + // + // + // **Note:** Repeated fields in `update_mask` mean the entire set of repeated + // values will be replaced with the new contents. For example, if + // `UpdatePhotoRequest.photo.update_mask` contains `connections` and + // `UpdatePhotoRequest.photo.connections` is empty, all connections will be + // removed. + UpdateMask *google_protobuf2.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask" json:"update_mask,omitempty"` +} + +func (m *UpdatePhotoRequest) Reset() { *m = UpdatePhotoRequest{} } +func (m *UpdatePhotoRequest) String() string { return proto.CompactTextString(m) } +func (*UpdatePhotoRequest) ProtoMessage() {} +func (*UpdatePhotoRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} } + +func (m *UpdatePhotoRequest) GetPhoto() *Photo { + if m != nil { + return m.Photo + } + return nil +} + +func (m *UpdatePhotoRequest) GetUpdateMask() *google_protobuf2.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +// Request to update the metadata of photos. +// Updating the pixels of photos is not supported. +type BatchUpdatePhotosRequest struct { + // Required. List of update photo requests. + UpdatePhotoRequests []*UpdatePhotoRequest `protobuf:"bytes,1,rep,name=update_photo_requests,json=updatePhotoRequests" json:"update_photo_requests,omitempty"` +} + +func (m *BatchUpdatePhotosRequest) Reset() { *m = BatchUpdatePhotosRequest{} } +func (m *BatchUpdatePhotosRequest) String() string { return proto.CompactTextString(m) } +func (*BatchUpdatePhotosRequest) ProtoMessage() {} +func (*BatchUpdatePhotosRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} } + +func (m *BatchUpdatePhotosRequest) GetUpdatePhotoRequests() []*UpdatePhotoRequest { + if m != nil { + return m.UpdatePhotoRequests + } + return nil +} + +// Response to batch update of metadata of one or more photos. +type BatchUpdatePhotosResponse struct { + // List of results for each individual photo updated, in the same order as + // the request. + Results []*PhotoResponse `protobuf:"bytes,1,rep,name=results" json:"results,omitempty"` +} + +func (m *BatchUpdatePhotosResponse) Reset() { *m = BatchUpdatePhotosResponse{} } +func (m *BatchUpdatePhotosResponse) String() string { return proto.CompactTextString(m) } +func (*BatchUpdatePhotosResponse) ProtoMessage() {} +func (*BatchUpdatePhotosResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{9} } + +func (m *BatchUpdatePhotosResponse) GetResults() []*PhotoResponse { + if m != nil { + return m.Results + } + return nil +} + +// Request to delete a photo. +type DeletePhotoRequest struct { + // Required. ID of the photo. + PhotoId string `protobuf:"bytes,1,opt,name=photo_id,json=photoId" json:"photo_id,omitempty"` +} + +func (m *DeletePhotoRequest) Reset() { *m = DeletePhotoRequest{} } +func (m *DeletePhotoRequest) String() string { return proto.CompactTextString(m) } +func (*DeletePhotoRequest) ProtoMessage() {} +func (*DeletePhotoRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{10} } + +func (m *DeletePhotoRequest) GetPhotoId() string { + if m != nil { + return m.PhotoId + } + return "" +} + +// Request to delete multiple photos. +type BatchDeletePhotosRequest struct { + // Required. List of delete photo requests. + PhotoIds []string `protobuf:"bytes,1,rep,name=photo_ids,json=photoIds" json:"photo_ids,omitempty"` +} + +func (m *BatchDeletePhotosRequest) Reset() { *m = BatchDeletePhotosRequest{} } +func (m *BatchDeletePhotosRequest) String() string { return proto.CompactTextString(m) } +func (*BatchDeletePhotosRequest) ProtoMessage() {} +func (*BatchDeletePhotosRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{11} } + +func (m *BatchDeletePhotosRequest) GetPhotoIds() []string { + if m != nil { + return m.PhotoIds + } + return nil +} + +// Response to batch delete of one or more photos. +type BatchDeletePhotosResponse struct { + // The status for the operation to delete a single photo in the batch request. + Status []*google_rpc.Status `protobuf:"bytes,1,rep,name=status" json:"status,omitempty"` +} + +func (m *BatchDeletePhotosResponse) Reset() { *m = BatchDeletePhotosResponse{} } +func (m *BatchDeletePhotosResponse) String() string { return proto.CompactTextString(m) } +func (*BatchDeletePhotosResponse) ProtoMessage() {} +func (*BatchDeletePhotosResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{12} } + +func (m *BatchDeletePhotosResponse) GetStatus() []*google_rpc.Status { + if m != nil { + return m.Status + } + return nil +} + +func init() { + proto.RegisterType((*CreatePhotoRequest)(nil), "google.streetview.publish.v1.CreatePhotoRequest") + proto.RegisterType((*GetPhotoRequest)(nil), "google.streetview.publish.v1.GetPhotoRequest") + proto.RegisterType((*BatchGetPhotosRequest)(nil), "google.streetview.publish.v1.BatchGetPhotosRequest") + proto.RegisterType((*BatchGetPhotosResponse)(nil), "google.streetview.publish.v1.BatchGetPhotosResponse") + proto.RegisterType((*PhotoResponse)(nil), "google.streetview.publish.v1.PhotoResponse") + proto.RegisterType((*ListPhotosRequest)(nil), "google.streetview.publish.v1.ListPhotosRequest") + proto.RegisterType((*ListPhotosResponse)(nil), "google.streetview.publish.v1.ListPhotosResponse") + proto.RegisterType((*UpdatePhotoRequest)(nil), "google.streetview.publish.v1.UpdatePhotoRequest") + proto.RegisterType((*BatchUpdatePhotosRequest)(nil), "google.streetview.publish.v1.BatchUpdatePhotosRequest") + proto.RegisterType((*BatchUpdatePhotosResponse)(nil), "google.streetview.publish.v1.BatchUpdatePhotosResponse") + proto.RegisterType((*DeletePhotoRequest)(nil), "google.streetview.publish.v1.DeletePhotoRequest") + proto.RegisterType((*BatchDeletePhotosRequest)(nil), "google.streetview.publish.v1.BatchDeletePhotosRequest") + proto.RegisterType((*BatchDeletePhotosResponse)(nil), "google.streetview.publish.v1.BatchDeletePhotosResponse") + proto.RegisterEnum("google.streetview.publish.v1.PhotoView", PhotoView_name, PhotoView_value) +} + +func init() { proto.RegisterFile("google/streetview/publish/v1/rpcmessages.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 639 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0xcb, 0x6e, 0xd3, 0x40, + 0x14, 0xc5, 0x7d, 0xa4, 0xcd, 0xad, 0x4a, 0xcb, 0x40, 0x8b, 0x1b, 0x8a, 0x14, 0x19, 0x09, 0xa2, + 0x82, 0xec, 0xb6, 0x2c, 0x10, 0xca, 0xaa, 0x49, 0x4a, 0x55, 0x29, 0x7d, 0xc8, 0xa1, 0x20, 0xb1, + 0xb1, 0x1c, 0xe7, 0xc6, 0xb1, 0xe2, 0x64, 0x5c, 0xcf, 0x38, 0x85, 0xae, 0xf8, 0x00, 0xf8, 0x0b, + 0x3e, 0x14, 0x79, 0x3c, 0xd3, 0x26, 0x69, 0x88, 0x02, 0x74, 0x67, 0xdf, 0xc7, 0xb9, 0x67, 0xce, + 0x9d, 0x63, 0x83, 0xe9, 0x53, 0xea, 0x87, 0x68, 0x31, 0x1e, 0x23, 0xf2, 0x41, 0x80, 0x57, 0x56, + 0x94, 0x34, 0xc3, 0x80, 0x75, 0xac, 0xc1, 0x9e, 0x15, 0x47, 0x5e, 0x0f, 0x19, 0x73, 0x7d, 0x64, + 0x66, 0x14, 0x53, 0x4e, 0xc9, 0x76, 0x56, 0x6f, 0xde, 0xd6, 0x9b, 0xb2, 0xde, 0x1c, 0xec, 0x15, + 0x8a, 0x12, 0x4d, 0xd4, 0x36, 0x93, 0xb6, 0xd5, 0x0e, 0x30, 0x6c, 0x39, 0x3d, 0x97, 0x75, 0xb3, + 0xfe, 0xc2, 0x53, 0x59, 0x11, 0x47, 0x9e, 0xc5, 0xb8, 0xcb, 0x13, 0x09, 0x5c, 0x78, 0x33, 0x9d, + 0x08, 0x32, 0x9a, 0xc4, 0x9e, 0xa2, 0x61, 0x9c, 0x01, 0xa9, 0xc6, 0xe8, 0x72, 0x3c, 0xef, 0x50, + 0x4e, 0x6d, 0xbc, 0x4c, 0x90, 0x71, 0xf2, 0x1e, 0x16, 0xa3, 0xf4, 0x5d, 0xd7, 0x8a, 0x5a, 0x69, + 0x65, 0xff, 0x85, 0x39, 0x8d, 0xac, 0x99, 0xb5, 0x66, 0x1d, 0x46, 0x00, 0x6b, 0x47, 0xc8, 0x47, + 0xd0, 0xb6, 0x60, 0x59, 0xe4, 0x9c, 0xa0, 0x25, 0x00, 0xf3, 0xf6, 0x92, 0x78, 0x3f, 0x6e, 0x91, + 0x32, 0x2c, 0xa4, 0x68, 0xfa, 0x5c, 0x51, 0x2b, 0x3d, 0xdc, 0x7f, 0x35, 0xc3, 0x9c, 0x4f, 0x01, + 0x5e, 0xd9, 0xa2, 0xc9, 0xb8, 0x84, 0x8d, 0x8a, 0xcb, 0xbd, 0x8e, 0x9a, 0xc7, 0xd4, 0xc0, 0x67, + 0x90, 0x57, 0x03, 0x99, 0xae, 0x15, 0xe7, 0x4b, 0x79, 0x7b, 0x59, 0x4e, 0x64, 0xff, 0x37, 0xd2, + 0x81, 0xcd, 0xf1, 0x91, 0x2c, 0xa2, 0x7d, 0x86, 0xe4, 0x10, 0x96, 0x62, 0x64, 0x49, 0xc8, 0xb3, + 0x89, 0x2b, 0xfb, 0xaf, 0x67, 0x11, 0x4d, 0x76, 0xdb, 0xaa, 0xd7, 0x18, 0xc0, 0xea, 0x48, 0x86, + 0xec, 0x40, 0x2e, 0x5b, 0xaf, 0xdc, 0x05, 0x51, 0xb0, 0x71, 0xe4, 0x99, 0x0d, 0x91, 0xb1, 0x65, + 0xc5, 0xed, 0xda, 0xe6, 0xfe, 0x7a, 0x6d, 0xbf, 0x34, 0x78, 0x54, 0x0f, 0xd8, 0x98, 0x90, 0x4a, + 0x2b, 0xed, 0x1f, 0xb4, 0x12, 0x5b, 0x70, 0x7d, 0x74, 0x58, 0x70, 0x8d, 0x82, 0xd1, 0xa2, 0xbd, + 0x9c, 0x06, 0x1a, 0xc1, 0x35, 0x92, 0xe7, 0x00, 0x22, 0xc9, 0x69, 0x17, 0xfb, 0xfa, 0xbc, 0xb8, + 0x15, 0xa2, 0xfc, 0x63, 0x1a, 0x20, 0x9b, 0x90, 0x6b, 0x07, 0x21, 0xc7, 0x58, 0x5f, 0x10, 0x29, + 0xf9, 0x66, 0x7c, 0x03, 0x32, 0xcc, 0x52, 0x6a, 0x54, 0x86, 0x9c, 0x38, 0x85, 0x92, 0x7e, 0xa6, + 0x83, 0xcb, 0x16, 0xf2, 0x12, 0xd6, 0xfa, 0xf8, 0x95, 0x3b, 0x43, 0x74, 0xe6, 0xc4, 0xcc, 0xd5, + 0x34, 0x7c, 0xae, 0x28, 0x19, 0x3f, 0x34, 0x20, 0x17, 0x51, 0xeb, 0xfe, 0xac, 0x42, 0xca, 0xb0, + 0x92, 0x08, 0x40, 0xe1, 0x6b, 0xb9, 0xb4, 0x82, 0x02, 0x50, 0xd6, 0x37, 0x3f, 0xa4, 0xd6, 0x3f, + 0x71, 0x59, 0xd7, 0x86, 0xac, 0x3c, 0x7d, 0x36, 0xbe, 0x6b, 0xa0, 0x8b, 0xab, 0x38, 0xc4, 0xe9, + 0x66, 0x6f, 0x2d, 0xd8, 0x90, 0xc8, 0x99, 0x0f, 0xe2, 0x2c, 0xae, 0xf4, 0xd9, 0x9d, 0x4e, 0xf2, + 0xee, 0x29, 0xed, 0xc7, 0xc9, 0x9d, 0x18, 0x33, 0x9a, 0xb0, 0x35, 0x81, 0xc1, 0xfd, 0xfa, 0xc1, + 0x02, 0x52, 0xc3, 0x10, 0xc7, 0x44, 0xff, 0xf3, 0x17, 0xc5, 0x78, 0x27, 0x65, 0x19, 0xea, 0x9a, + 0xe9, 0xbb, 0x60, 0x1c, 0xc9, 0xd3, 0x8c, 0x36, 0x4e, 0x70, 0xe1, 0xfc, 0x74, 0x17, 0xee, 0xec, + 0x42, 0xfe, 0xc6, 0x0a, 0x24, 0x0f, 0x8b, 0x95, 0x83, 0xc6, 0x71, 0x75, 0xfd, 0x01, 0xd1, 0xe1, + 0xc9, 0xf1, 0x69, 0xb5, 0x7e, 0x51, 0x3b, 0x74, 0x6a, 0x67, 0x9f, 0x4f, 0xeb, 0x67, 0x07, 0x35, + 0xe7, 0xc2, 0xae, 0xaf, 0x6b, 0x95, 0x9f, 0x1a, 0x94, 0x3c, 0xda, 0x53, 0x98, 0x3e, 0x52, 0x33, + 0xf1, 0xbd, 0xc9, 0x42, 0x55, 0xb6, 0x1b, 0x22, 0x9c, 0xa2, 0x9f, 0x67, 0x51, 0x3b, 0xf2, 0x4e, + 0xe4, 0xcf, 0xe5, 0x4b, 0x55, 0x61, 0xd0, 0xd0, 0xed, 0xfb, 0x26, 0x8d, 0x7d, 0xcb, 0xc7, 0xbe, + 0xb8, 0x4b, 0x56, 0x96, 0x72, 0xa3, 0x80, 0x4d, 0xfe, 0x39, 0x94, 0xe5, 0x63, 0x33, 0x27, 0xea, + 0xdf, 0xfe, 0x0e, 0x00, 0x00, 0xff, 0xff, 0x5c, 0x7c, 0xa0, 0x45, 0xd4, 0x06, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/streetview/publish/v1/streetview_publish.pb.go b/vendor/google.golang.org/genproto/googleapis/streetview/publish/v1/streetview_publish.pb.go new file mode 100644 index 0000000..63849b6 --- /dev/null +++ b/vendor/google.golang.org/genproto/googleapis/streetview/publish/v1/streetview_publish.pb.go @@ -0,0 +1,524 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/streetview/publish/v1/streetview_publish.proto + +package publish + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import google_protobuf4 "github.com/golang/protobuf/ptypes/empty" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for StreetViewPublishService service + +type StreetViewPublishServiceClient interface { + // Creates an upload session to start uploading photo data. The upload URL of + // the returned `UploadRef` is used to upload the data for the photo. + // + // After the upload is complete, the `UploadRef` is used with + // `StreetViewPublishService:CreatePhoto()` to create the `Photo` object + // entry. + StartUpload(ctx context.Context, in *google_protobuf4.Empty, opts ...grpc.CallOption) (*UploadRef, error) + // After the client finishes uploading the photo with the returned + // `UploadRef`, `photo.create` publishes the uploaded photo to Street View on + // Google Maps. + // + // This method returns the following error codes: + // + // * `INVALID_ARGUMENT` if the request is malformed. + // * `NOT_FOUND` if the upload reference does not exist. + CreatePhoto(ctx context.Context, in *CreatePhotoRequest, opts ...grpc.CallOption) (*Photo, error) + // Gets the metadata of the specified `Photo`. + // + // This method returns the following error codes: + // + // * `PERMISSION_DENIED` if the requesting user did not create the requested + // photo. + // * `NOT_FOUND` if the requested photo does not exist. + GetPhoto(ctx context.Context, in *GetPhotoRequest, opts ...grpc.CallOption) (*Photo, error) + // Gets the metadata of the specified `Photo` batch. + // + // Note that if `photos.batchGet` fails, either critical fields are + // missing or there was an authentication error. + // Even if `photos.batchGet` succeeds, there may have been failures + // for single photos in the batch. These failures will be specified in + // `BatchGetPhotosResponse.results.status`. + // See `photo.get` for specific failures that will occur per photo. + BatchGetPhotos(ctx context.Context, in *BatchGetPhotosRequest, opts ...grpc.CallOption) (*BatchGetPhotosResponse, error) + // Lists all the photos that belong to the user. + ListPhotos(ctx context.Context, in *ListPhotosRequest, opts ...grpc.CallOption) (*ListPhotosResponse, error) + // Updates the metadata of a photo, such as pose, place association, etc. + // Changing the pixels of a photo is not supported. + // + // This method returns the following error codes: + // + // * `PERMISSION_DENIED` if the requesting user did not create the requested + // photo. + // * `INVALID_ARGUMENT` if the request is malformed. + // * `NOT_FOUND` if the photo ID does not exist. + UpdatePhoto(ctx context.Context, in *UpdatePhotoRequest, opts ...grpc.CallOption) (*Photo, error) + // Updates the metadata of photos, such as pose, place association, etc. + // Changing the pixels of a photo is not supported. + // + // Note that if `photos.batchUpdate` fails, either critical fields + // are missing or there was an authentication error. + // Even if `photos.batchUpdate` succeeds, there may have been + // failures for single photos in the batch. These failures will be specified + // in `BatchUpdatePhotosResponse.results.status`. + // See `UpdatePhoto` for specific failures that will occur per photo. + BatchUpdatePhotos(ctx context.Context, in *BatchUpdatePhotosRequest, opts ...grpc.CallOption) (*BatchUpdatePhotosResponse, error) + // Deletes a photo and its metadata. + // + // This method returns the following error codes: + // + // * `PERMISSION_DENIED` if the requesting user did not create the requested + // photo. + // * `NOT_FOUND` if the photo ID does not exist. + DeletePhoto(ctx context.Context, in *DeletePhotoRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) + // Deletes a list of photos and their metadata. + // + // Note that if `photos.batchDelete` fails, either critical fields + // are missing or there was an authentication error. + // Even if `photos.batchDelete` succeeds, there may have been + // failures for single photos in the batch. These failures will be specified + // in `BatchDeletePhotosResponse.status`. + // See `photo.update` for specific failures that will occur per photo. + BatchDeletePhotos(ctx context.Context, in *BatchDeletePhotosRequest, opts ...grpc.CallOption) (*BatchDeletePhotosResponse, error) +} + +type streetViewPublishServiceClient struct { + cc *grpc.ClientConn +} + +func NewStreetViewPublishServiceClient(cc *grpc.ClientConn) StreetViewPublishServiceClient { + return &streetViewPublishServiceClient{cc} +} + +func (c *streetViewPublishServiceClient) StartUpload(ctx context.Context, in *google_protobuf4.Empty, opts ...grpc.CallOption) (*UploadRef, error) { + out := new(UploadRef) + err := grpc.Invoke(ctx, "/google.streetview.publish.v1.StreetViewPublishService/StartUpload", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *streetViewPublishServiceClient) CreatePhoto(ctx context.Context, in *CreatePhotoRequest, opts ...grpc.CallOption) (*Photo, error) { + out := new(Photo) + err := grpc.Invoke(ctx, "/google.streetview.publish.v1.StreetViewPublishService/CreatePhoto", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *streetViewPublishServiceClient) GetPhoto(ctx context.Context, in *GetPhotoRequest, opts ...grpc.CallOption) (*Photo, error) { + out := new(Photo) + err := grpc.Invoke(ctx, "/google.streetview.publish.v1.StreetViewPublishService/GetPhoto", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *streetViewPublishServiceClient) BatchGetPhotos(ctx context.Context, in *BatchGetPhotosRequest, opts ...grpc.CallOption) (*BatchGetPhotosResponse, error) { + out := new(BatchGetPhotosResponse) + err := grpc.Invoke(ctx, "/google.streetview.publish.v1.StreetViewPublishService/BatchGetPhotos", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *streetViewPublishServiceClient) ListPhotos(ctx context.Context, in *ListPhotosRequest, opts ...grpc.CallOption) (*ListPhotosResponse, error) { + out := new(ListPhotosResponse) + err := grpc.Invoke(ctx, "/google.streetview.publish.v1.StreetViewPublishService/ListPhotos", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *streetViewPublishServiceClient) UpdatePhoto(ctx context.Context, in *UpdatePhotoRequest, opts ...grpc.CallOption) (*Photo, error) { + out := new(Photo) + err := grpc.Invoke(ctx, "/google.streetview.publish.v1.StreetViewPublishService/UpdatePhoto", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *streetViewPublishServiceClient) BatchUpdatePhotos(ctx context.Context, in *BatchUpdatePhotosRequest, opts ...grpc.CallOption) (*BatchUpdatePhotosResponse, error) { + out := new(BatchUpdatePhotosResponse) + err := grpc.Invoke(ctx, "/google.streetview.publish.v1.StreetViewPublishService/BatchUpdatePhotos", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *streetViewPublishServiceClient) DeletePhoto(ctx context.Context, in *DeletePhotoRequest, opts ...grpc.CallOption) (*google_protobuf4.Empty, error) { + out := new(google_protobuf4.Empty) + err := grpc.Invoke(ctx, "/google.streetview.publish.v1.StreetViewPublishService/DeletePhoto", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *streetViewPublishServiceClient) BatchDeletePhotos(ctx context.Context, in *BatchDeletePhotosRequest, opts ...grpc.CallOption) (*BatchDeletePhotosResponse, error) { + out := new(BatchDeletePhotosResponse) + err := grpc.Invoke(ctx, "/google.streetview.publish.v1.StreetViewPublishService/BatchDeletePhotos", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for StreetViewPublishService service + +type StreetViewPublishServiceServer interface { + // Creates an upload session to start uploading photo data. The upload URL of + // the returned `UploadRef` is used to upload the data for the photo. + // + // After the upload is complete, the `UploadRef` is used with + // `StreetViewPublishService:CreatePhoto()` to create the `Photo` object + // entry. + StartUpload(context.Context, *google_protobuf4.Empty) (*UploadRef, error) + // After the client finishes uploading the photo with the returned + // `UploadRef`, `photo.create` publishes the uploaded photo to Street View on + // Google Maps. + // + // This method returns the following error codes: + // + // * `INVALID_ARGUMENT` if the request is malformed. + // * `NOT_FOUND` if the upload reference does not exist. + CreatePhoto(context.Context, *CreatePhotoRequest) (*Photo, error) + // Gets the metadata of the specified `Photo`. + // + // This method returns the following error codes: + // + // * `PERMISSION_DENIED` if the requesting user did not create the requested + // photo. + // * `NOT_FOUND` if the requested photo does not exist. + GetPhoto(context.Context, *GetPhotoRequest) (*Photo, error) + // Gets the metadata of the specified `Photo` batch. + // + // Note that if `photos.batchGet` fails, either critical fields are + // missing or there was an authentication error. + // Even if `photos.batchGet` succeeds, there may have been failures + // for single photos in the batch. These failures will be specified in + // `BatchGetPhotosResponse.results.status`. + // See `photo.get` for specific failures that will occur per photo. + BatchGetPhotos(context.Context, *BatchGetPhotosRequest) (*BatchGetPhotosResponse, error) + // Lists all the photos that belong to the user. + ListPhotos(context.Context, *ListPhotosRequest) (*ListPhotosResponse, error) + // Updates the metadata of a photo, such as pose, place association, etc. + // Changing the pixels of a photo is not supported. + // + // This method returns the following error codes: + // + // * `PERMISSION_DENIED` if the requesting user did not create the requested + // photo. + // * `INVALID_ARGUMENT` if the request is malformed. + // * `NOT_FOUND` if the photo ID does not exist. + UpdatePhoto(context.Context, *UpdatePhotoRequest) (*Photo, error) + // Updates the metadata of photos, such as pose, place association, etc. + // Changing the pixels of a photo is not supported. + // + // Note that if `photos.batchUpdate` fails, either critical fields + // are missing or there was an authentication error. + // Even if `photos.batchUpdate` succeeds, there may have been + // failures for single photos in the batch. These failures will be specified + // in `BatchUpdatePhotosResponse.results.status`. + // See `UpdatePhoto` for specific failures that will occur per photo. + BatchUpdatePhotos(context.Context, *BatchUpdatePhotosRequest) (*BatchUpdatePhotosResponse, error) + // Deletes a photo and its metadata. + // + // This method returns the following error codes: + // + // * `PERMISSION_DENIED` if the requesting user did not create the requested + // photo. + // * `NOT_FOUND` if the photo ID does not exist. + DeletePhoto(context.Context, *DeletePhotoRequest) (*google_protobuf4.Empty, error) + // Deletes a list of photos and their metadata. + // + // Note that if `photos.batchDelete` fails, either critical fields + // are missing or there was an authentication error. + // Even if `photos.batchDelete` succeeds, there may have been + // failures for single photos in the batch. These failures will be specified + // in `BatchDeletePhotosResponse.status`. + // See `photo.update` for specific failures that will occur per photo. + BatchDeletePhotos(context.Context, *BatchDeletePhotosRequest) (*BatchDeletePhotosResponse, error) +} + +func RegisterStreetViewPublishServiceServer(s *grpc.Server, srv StreetViewPublishServiceServer) { + s.RegisterService(&_StreetViewPublishService_serviceDesc, srv) +} + +func _StreetViewPublishService_StartUpload_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(google_protobuf4.Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(StreetViewPublishServiceServer).StartUpload(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.streetview.publish.v1.StreetViewPublishService/StartUpload", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(StreetViewPublishServiceServer).StartUpload(ctx, req.(*google_protobuf4.Empty)) + } + return interceptor(ctx, in, info, handler) +} + +func _StreetViewPublishService_CreatePhoto_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreatePhotoRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(StreetViewPublishServiceServer).CreatePhoto(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.streetview.publish.v1.StreetViewPublishService/CreatePhoto", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(StreetViewPublishServiceServer).CreatePhoto(ctx, req.(*CreatePhotoRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _StreetViewPublishService_GetPhoto_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetPhotoRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(StreetViewPublishServiceServer).GetPhoto(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.streetview.publish.v1.StreetViewPublishService/GetPhoto", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(StreetViewPublishServiceServer).GetPhoto(ctx, req.(*GetPhotoRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _StreetViewPublishService_BatchGetPhotos_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BatchGetPhotosRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(StreetViewPublishServiceServer).BatchGetPhotos(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.streetview.publish.v1.StreetViewPublishService/BatchGetPhotos", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(StreetViewPublishServiceServer).BatchGetPhotos(ctx, req.(*BatchGetPhotosRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _StreetViewPublishService_ListPhotos_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListPhotosRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(StreetViewPublishServiceServer).ListPhotos(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.streetview.publish.v1.StreetViewPublishService/ListPhotos", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(StreetViewPublishServiceServer).ListPhotos(ctx, req.(*ListPhotosRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _StreetViewPublishService_UpdatePhoto_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdatePhotoRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(StreetViewPublishServiceServer).UpdatePhoto(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.streetview.publish.v1.StreetViewPublishService/UpdatePhoto", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(StreetViewPublishServiceServer).UpdatePhoto(ctx, req.(*UpdatePhotoRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _StreetViewPublishService_BatchUpdatePhotos_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BatchUpdatePhotosRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(StreetViewPublishServiceServer).BatchUpdatePhotos(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.streetview.publish.v1.StreetViewPublishService/BatchUpdatePhotos", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(StreetViewPublishServiceServer).BatchUpdatePhotos(ctx, req.(*BatchUpdatePhotosRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _StreetViewPublishService_DeletePhoto_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeletePhotoRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(StreetViewPublishServiceServer).DeletePhoto(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.streetview.publish.v1.StreetViewPublishService/DeletePhoto", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(StreetViewPublishServiceServer).DeletePhoto(ctx, req.(*DeletePhotoRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _StreetViewPublishService_BatchDeletePhotos_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BatchDeletePhotosRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(StreetViewPublishServiceServer).BatchDeletePhotos(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.streetview.publish.v1.StreetViewPublishService/BatchDeletePhotos", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(StreetViewPublishServiceServer).BatchDeletePhotos(ctx, req.(*BatchDeletePhotosRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _StreetViewPublishService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "google.streetview.publish.v1.StreetViewPublishService", + HandlerType: (*StreetViewPublishServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "StartUpload", + Handler: _StreetViewPublishService_StartUpload_Handler, + }, + { + MethodName: "CreatePhoto", + Handler: _StreetViewPublishService_CreatePhoto_Handler, + }, + { + MethodName: "GetPhoto", + Handler: _StreetViewPublishService_GetPhoto_Handler, + }, + { + MethodName: "BatchGetPhotos", + Handler: _StreetViewPublishService_BatchGetPhotos_Handler, + }, + { + MethodName: "ListPhotos", + Handler: _StreetViewPublishService_ListPhotos_Handler, + }, + { + MethodName: "UpdatePhoto", + Handler: _StreetViewPublishService_UpdatePhoto_Handler, + }, + { + MethodName: "BatchUpdatePhotos", + Handler: _StreetViewPublishService_BatchUpdatePhotos_Handler, + }, + { + MethodName: "DeletePhoto", + Handler: _StreetViewPublishService_DeletePhoto_Handler, + }, + { + MethodName: "BatchDeletePhotos", + Handler: _StreetViewPublishService_BatchDeletePhotos_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "google/streetview/publish/v1/streetview_publish.proto", +} + +func init() { + proto.RegisterFile("google/streetview/publish/v1/streetview_publish.proto", fileDescriptor2) +} + +var fileDescriptor2 = []byte{ + // 533 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x94, 0x4f, 0x6f, 0xd3, 0x30, + 0x18, 0xc6, 0x15, 0x24, 0x10, 0xb8, 0x08, 0x69, 0x86, 0x55, 0x53, 0x3a, 0x24, 0x08, 0x12, 0xa0, + 0x6a, 0xd8, 0x1b, 0xe3, 0x8f, 0x54, 0x6e, 0x1d, 0x88, 0x0b, 0x87, 0x69, 0xd5, 0x38, 0x70, 0x99, + 0xdc, 0xf4, 0x5d, 0x6a, 0x29, 0x8d, 0x4d, 0xec, 0x74, 0x42, 0x30, 0x0e, 0xe3, 0xc8, 0x0d, 0x2e, + 0x7c, 0x03, 0x3e, 0x10, 0x5f, 0x81, 0x0f, 0x82, 0xea, 0xd8, 0x4d, 0x36, 0x8a, 0x49, 0x4e, 0x69, + 0xf3, 0x3e, 0xcf, 0xfb, 0xfc, 0xfa, 0xbe, 0xae, 0xd1, 0xd3, 0x44, 0x88, 0x24, 0x05, 0xaa, 0x74, + 0x0e, 0xa0, 0xe7, 0x1c, 0x4e, 0xa8, 0x2c, 0xc6, 0x29, 0x57, 0x53, 0x3a, 0xdf, 0xa9, 0xbd, 0x3d, + 0xb2, 0x6f, 0x89, 0xcc, 0x85, 0x16, 0x78, 0xb3, 0xb4, 0x91, 0x4a, 0x40, 0x9c, 0x60, 0xbe, 0x13, + 0xda, 0x2a, 0x65, 0x92, 0x53, 0x96, 0x65, 0x42, 0x33, 0xcd, 0x45, 0xa6, 0x4a, 0x6f, 0xd8, 0xb3, + 0x55, 0xf3, 0x6d, 0x5c, 0x1c, 0x53, 0x98, 0x49, 0xfd, 0xc1, 0x16, 0xb7, 0xbc, 0x3c, 0x39, 0x28, + 0x51, 0xe4, 0x31, 0xb8, 0x56, 0xc4, 0xaf, 0x96, 0xf1, 0x0c, 0x94, 0x62, 0x89, 0xd3, 0x3f, 0xfe, + 0x8a, 0xd0, 0xc6, 0xc8, 0x68, 0xdf, 0x72, 0x38, 0xd9, 0x2f, 0xa5, 0x23, 0xc8, 0xe7, 0x3c, 0x06, + 0x2c, 0x51, 0x67, 0xa4, 0x59, 0xae, 0x0f, 0x65, 0x2a, 0xd8, 0x04, 0x77, 0x6d, 0x73, 0xe2, 0x38, + 0xc9, 0xab, 0x05, 0x67, 0xf8, 0x80, 0xf8, 0x7e, 0x3b, 0x29, 0xdd, 0x07, 0x70, 0x1c, 0xdd, 0x39, + 0xfb, 0xf5, 0xfb, 0xfb, 0xa5, 0x30, 0x5a, 0x5f, 0xb0, 0xc8, 0xa9, 0xd0, 0x62, 0xa0, 0xaa, 0xfe, + 0x83, 0xa0, 0x8f, 0x3f, 0xa3, 0xce, 0x5e, 0x0e, 0x4c, 0xc3, 0xfe, 0xa2, 0x8a, 0xb7, 0xfd, 0x9d, + 0x6b, 0xd2, 0x03, 0x78, 0x5f, 0x80, 0xd2, 0xe1, 0x3d, 0xbf, 0xc3, 0x68, 0xa3, 0x0d, 0xc3, 0x81, + 0xa3, 0x6b, 0x15, 0xc7, 0x65, 0xf3, 0xc0, 0x9f, 0xd0, 0xd5, 0xd7, 0xa0, 0xcb, 0xf0, 0x47, 0xfe, + 0x56, 0x4e, 0xd7, 0x2a, 0x79, 0xd3, 0x24, 0x77, 0xf1, 0xad, 0x65, 0x32, 0xfd, 0x68, 0x1e, 0x47, + 0x7c, 0x72, 0x8a, 0x7f, 0x04, 0xe8, 0xc6, 0x90, 0xe9, 0x78, 0xea, 0x7a, 0x2b, 0xbc, 0xeb, 0xef, + 0x7a, 0x5e, 0xed, 0x50, 0x9e, 0xb4, 0x33, 0x29, 0x29, 0x32, 0x05, 0x51, 0xcf, 0xb0, 0xad, 0xe3, + 0x9b, 0x4b, 0x36, 0x35, 0x18, 0x5b, 0x29, 0xfe, 0x12, 0x20, 0xf4, 0x86, 0x2b, 0x87, 0x45, 0xfd, + 0x09, 0x95, 0xd2, 0x21, 0x6d, 0x37, 0x37, 0x58, 0x1c, 0x6c, 0x70, 0xae, 0x63, 0x54, 0xe1, 0xe0, + 0x6f, 0x01, 0xea, 0x1c, 0xca, 0x49, 0xd3, 0xf3, 0x51, 0x93, 0xb6, 0xda, 0xd2, 0x96, 0x89, 0xbe, + 0x1f, 0xde, 0xbe, 0xb8, 0x25, 0xe2, 0x76, 0x45, 0xf8, 0xe4, 0xd4, 0x9d, 0x99, 0x9f, 0x01, 0x5a, + 0x33, 0x23, 0xad, 0xc5, 0x29, 0xfc, 0xac, 0xc1, 0x0e, 0xea, 0x06, 0x07, 0xf8, 0xbc, 0xb5, 0xcf, + 0xce, 0xeb, 0xae, 0x81, 0xee, 0x45, 0xdd, 0x8b, 0xeb, 0x2b, 0xd5, 0x8b, 0x7f, 0x57, 0x81, 0x3a, + 0x2f, 0x21, 0x85, 0x86, 0xd3, 0xab, 0x49, 0x1d, 0xdc, 0x3f, 0x6e, 0x00, 0x77, 0xac, 0xfb, 0xab, + 0x8f, 0xf5, 0x72, 0x40, 0xb5, 0x8e, 0xcd, 0x06, 0x54, 0x37, 0xb4, 0x19, 0xd0, 0x79, 0xdf, 0xff, + 0x06, 0x54, 0xaa, 0x07, 0x41, 0x7f, 0x78, 0x16, 0xa0, 0x87, 0xb1, 0x98, 0xb9, 0x84, 0x04, 0x04, + 0x29, 0x92, 0x78, 0x75, 0xd2, 0x70, 0xed, 0xaf, 0x7b, 0xf3, 0xdd, 0x9e, 0x33, 0x8a, 0x94, 0x65, + 0x09, 0x11, 0x79, 0x42, 0x13, 0xc8, 0xcc, 0xb0, 0x68, 0x59, 0x62, 0x92, 0xab, 0xd5, 0x97, 0xf3, + 0x0b, 0xfb, 0x71, 0x7c, 0xc5, 0xe8, 0x77, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x7d, 0x9d, 0xfe, + 0x1c, 0x89, 0x06, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/genproto/googleapis/tracing/v1/trace.pb.go b/vendor/google.golang.org/genproto/googleapis/tracing/v1/trace.pb.go deleted file mode 100644 index 01f9722..0000000 --- a/vendor/google.golang.org/genproto/googleapis/tracing/v1/trace.pb.go +++ /dev/null @@ -1,889 +0,0 @@ -// Code generated by protoc-gen-go. -// source: google/tracing/trace.proto -// DO NOT EDIT! - -/* -Package tracing is a generated protocol buffer package. - -It is generated from these files: - google/tracing/trace.proto - -It has these top-level messages: - TraceId - Module - StackTrace - LabelValue - Span - Trace -*/ -package tracing - -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" -import _ "google.golang.org/genproto/googleapis/api/annotations" -import google_protobuf1 "github.com/golang/protobuf/ptypes/timestamp" -import google_rpc "google.golang.org/genproto/googleapis/rpc/status" - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package - -// The type of the network event. SENT or RECV event. -type Span_TimeEvent_NetworkEvent_Type int32 - -const ( - Span_TimeEvent_NetworkEvent_UNSPECIFIED Span_TimeEvent_NetworkEvent_Type = 0 - Span_TimeEvent_NetworkEvent_SENT Span_TimeEvent_NetworkEvent_Type = 1 - Span_TimeEvent_NetworkEvent_RECV Span_TimeEvent_NetworkEvent_Type = 2 -) - -var Span_TimeEvent_NetworkEvent_Type_name = map[int32]string{ - 0: "UNSPECIFIED", - 1: "SENT", - 2: "RECV", -} -var Span_TimeEvent_NetworkEvent_Type_value = map[string]int32{ - "UNSPECIFIED": 0, - "SENT": 1, - "RECV": 2, -} - -func (x Span_TimeEvent_NetworkEvent_Type) String() string { - return proto.EnumName(Span_TimeEvent_NetworkEvent_Type_name, int32(x)) -} -func (Span_TimeEvent_NetworkEvent_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{4, 0, 1, 0} -} - -// The type of the link. -type Span_Link_Type int32 - -const ( - Span_Link_UNSPECIFIED Span_Link_Type = 0 - Span_Link_CHILD Span_Link_Type = 1 - Span_Link_PARENT Span_Link_Type = 2 -) - -var Span_Link_Type_name = map[int32]string{ - 0: "UNSPECIFIED", - 1: "CHILD", - 2: "PARENT", -} -var Span_Link_Type_value = map[string]int32{ - "UNSPECIFIED": 0, - "CHILD": 1, - "PARENT": 2, -} - -func (x Span_Link_Type) String() string { - return proto.EnumName(Span_Link_Type_name, int32(x)) -} -func (Span_Link_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{4, 1, 0} } - -// A TraceId uniquely identifies a Trace. It is conceptually a 128-bit value, -// represented as a string, containing the hex-encoded value. -type TraceId struct { - // Trace ID specified as a hex-encoded string. *Must* be 32 bytes long. - HexEncoded string `protobuf:"bytes,1,opt,name=hex_encoded,json=hexEncoded" json:"hex_encoded,omitempty"` -} - -func (m *TraceId) Reset() { *m = TraceId{} } -func (m *TraceId) String() string { return proto.CompactTextString(m) } -func (*TraceId) ProtoMessage() {} -func (*TraceId) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } - -func (m *TraceId) GetHexEncoded() string { - if m != nil { - return m.HexEncoded - } - return "" -} - -type Module struct { - // Binary module. - // E.g. main binary, kernel modules, and dynamic libraries - // such as libc.so, sharedlib.so - Module string `protobuf:"bytes,1,opt,name=module" json:"module,omitempty"` - // Build_id is a unique identifier for the module, - // probably a hash of its contents - BuildId string `protobuf:"bytes,2,opt,name=build_id,json=buildId" json:"build_id,omitempty"` -} - -func (m *Module) Reset() { *m = Module{} } -func (m *Module) String() string { return proto.CompactTextString(m) } -func (*Module) ProtoMessage() {} -func (*Module) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } - -func (m *Module) GetModule() string { - if m != nil { - return m.Module - } - return "" -} - -func (m *Module) GetBuildId() string { - if m != nil { - return m.BuildId - } - return "" -} - -type StackTrace struct { - // Stack frames of this stack trace. - StackFrame []*StackTrace_StackFrame `protobuf:"bytes,1,rep,name=stack_frame,json=stackFrame" json:"stack_frame,omitempty"` - // User can choose to use his own hash function to hash large labels to save - // network bandwidth and storage. - // Typical usage is to pass both initially to inform the storage of the - // mapping. And in subsequent calls, pass in stack_trace_hash_id only. - // User shall verify the hash value is successfully stored. - StackTraceHashId uint64 `protobuf:"varint,2,opt,name=stack_trace_hash_id,json=stackTraceHashId" json:"stack_trace_hash_id,omitempty"` -} - -func (m *StackTrace) Reset() { *m = StackTrace{} } -func (m *StackTrace) String() string { return proto.CompactTextString(m) } -func (*StackTrace) ProtoMessage() {} -func (*StackTrace) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } - -func (m *StackTrace) GetStackFrame() []*StackTrace_StackFrame { - if m != nil { - return m.StackFrame - } - return nil -} - -func (m *StackTrace) GetStackTraceHashId() uint64 { - if m != nil { - return m.StackTraceHashId - } - return 0 -} - -// Presents a single stack frame in a stack trace. -type StackTrace_StackFrame struct { - // Fully qualified names which uniquely identify function/method/etc. - FunctionName string `protobuf:"bytes,1,opt,name=function_name,json=functionName" json:"function_name,omitempty"` - // Used when function name is ‘mangled’. Not guaranteed to be fully - // qualified but usually it is. - OrigFunctionName string `protobuf:"bytes,2,opt,name=orig_function_name,json=origFunctionName" json:"orig_function_name,omitempty"` - // File name of the frame. - FileName string `protobuf:"bytes,3,opt,name=file_name,json=fileName" json:"file_name,omitempty"` - // Line number of the frame. - LineNumber int64 `protobuf:"varint,4,opt,name=line_number,json=lineNumber" json:"line_number,omitempty"` - // Column number is important in JavaScript(anonymous functions), - // Might not be available in some languages. - ColumnNumber int64 `protobuf:"varint,5,opt,name=column_number,json=columnNumber" json:"column_number,omitempty"` - // Binary module the code is loaded from. - LoadModule *Module `protobuf:"bytes,6,opt,name=load_module,json=loadModule" json:"load_module,omitempty"` - // source_version is deployment specific. It might be - // better to be stored in deployment metadata. - // However, in distributed tracing, it’s hard to keep track of - // source/binary versions at one place for all spans. - SourceVersion string `protobuf:"bytes,7,opt,name=source_version,json=sourceVersion" json:"source_version,omitempty"` -} - -func (m *StackTrace_StackFrame) Reset() { *m = StackTrace_StackFrame{} } -func (m *StackTrace_StackFrame) String() string { return proto.CompactTextString(m) } -func (*StackTrace_StackFrame) ProtoMessage() {} -func (*StackTrace_StackFrame) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} } - -func (m *StackTrace_StackFrame) GetFunctionName() string { - if m != nil { - return m.FunctionName - } - return "" -} - -func (m *StackTrace_StackFrame) GetOrigFunctionName() string { - if m != nil { - return m.OrigFunctionName - } - return "" -} - -func (m *StackTrace_StackFrame) GetFileName() string { - if m != nil { - return m.FileName - } - return "" -} - -func (m *StackTrace_StackFrame) GetLineNumber() int64 { - if m != nil { - return m.LineNumber - } - return 0 -} - -func (m *StackTrace_StackFrame) GetColumnNumber() int64 { - if m != nil { - return m.ColumnNumber - } - return 0 -} - -func (m *StackTrace_StackFrame) GetLoadModule() *Module { - if m != nil { - return m.LoadModule - } - return nil -} - -func (m *StackTrace_StackFrame) GetSourceVersion() string { - if m != nil { - return m.SourceVersion - } - return "" -} - -// Allowed label values. -type LabelValue struct { - // The value of the label. - // - // Types that are valid to be assigned to Value: - // *LabelValue_StringValue - // *LabelValue_IntValue - // *LabelValue_BoolValue - Value isLabelValue_Value `protobuf_oneof:"value"` -} - -func (m *LabelValue) Reset() { *m = LabelValue{} } -func (m *LabelValue) String() string { return proto.CompactTextString(m) } -func (*LabelValue) ProtoMessage() {} -func (*LabelValue) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } - -type isLabelValue_Value interface { - isLabelValue_Value() -} - -type LabelValue_StringValue struct { - StringValue string `protobuf:"bytes,1,opt,name=string_value,json=stringValue,oneof"` -} -type LabelValue_IntValue struct { - IntValue int64 `protobuf:"varint,2,opt,name=int_value,json=intValue,oneof"` -} -type LabelValue_BoolValue struct { - BoolValue bool `protobuf:"varint,3,opt,name=bool_value,json=boolValue,oneof"` -} - -func (*LabelValue_StringValue) isLabelValue_Value() {} -func (*LabelValue_IntValue) isLabelValue_Value() {} -func (*LabelValue_BoolValue) isLabelValue_Value() {} - -func (m *LabelValue) GetValue() isLabelValue_Value { - if m != nil { - return m.Value - } - return nil -} - -func (m *LabelValue) GetStringValue() string { - if x, ok := m.GetValue().(*LabelValue_StringValue); ok { - return x.StringValue - } - return "" -} - -func (m *LabelValue) GetIntValue() int64 { - if x, ok := m.GetValue().(*LabelValue_IntValue); ok { - return x.IntValue - } - return 0 -} - -func (m *LabelValue) GetBoolValue() bool { - if x, ok := m.GetValue().(*LabelValue_BoolValue); ok { - return x.BoolValue - } - return false -} - -// XXX_OneofFuncs is for the internal use of the proto package. -func (*LabelValue) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _LabelValue_OneofMarshaler, _LabelValue_OneofUnmarshaler, _LabelValue_OneofSizer, []interface{}{ - (*LabelValue_StringValue)(nil), - (*LabelValue_IntValue)(nil), - (*LabelValue_BoolValue)(nil), - } -} - -func _LabelValue_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*LabelValue) - // value - switch x := m.Value.(type) { - case *LabelValue_StringValue: - b.EncodeVarint(1<<3 | proto.WireBytes) - b.EncodeStringBytes(x.StringValue) - case *LabelValue_IntValue: - b.EncodeVarint(2<<3 | proto.WireVarint) - b.EncodeVarint(uint64(x.IntValue)) - case *LabelValue_BoolValue: - t := uint64(0) - if x.BoolValue { - t = 1 - } - b.EncodeVarint(3<<3 | proto.WireVarint) - b.EncodeVarint(t) - case nil: - default: - return fmt.Errorf("LabelValue.Value has unexpected type %T", x) - } - return nil -} - -func _LabelValue_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*LabelValue) - switch tag { - case 1: // value.string_value - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.Value = &LabelValue_StringValue{x} - return true, err - case 2: // value.int_value - if wire != proto.WireVarint { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeVarint() - m.Value = &LabelValue_IntValue{int64(x)} - return true, err - case 3: // value.bool_value - if wire != proto.WireVarint { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeVarint() - m.Value = &LabelValue_BoolValue{x != 0} - return true, err - default: - return false, nil - } -} - -func _LabelValue_OneofSizer(msg proto.Message) (n int) { - m := msg.(*LabelValue) - // value - switch x := m.Value.(type) { - case *LabelValue_StringValue: - n += proto.SizeVarint(1<<3 | proto.WireBytes) - n += proto.SizeVarint(uint64(len(x.StringValue))) - n += len(x.StringValue) - case *LabelValue_IntValue: - n += proto.SizeVarint(2<<3 | proto.WireVarint) - n += proto.SizeVarint(uint64(x.IntValue)) - case *LabelValue_BoolValue: - n += proto.SizeVarint(3<<3 | proto.WireVarint) - n += 1 - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -// A span represents a single operation within a trace. Spans can be nested -// and form a trace tree. Often, a trace contains a root span that describes the -// end-to-end latency and, optionally, one or more subspans for -// its sub-operations. Spans do not need to be contiguous. There may be gaps -// between spans in a trace. -type Span struct { - // Identifier for the span. Must be a 64-bit integer other than 0 and - // unique within a trace. - Id uint64 `protobuf:"fixed64,1,opt,name=id" json:"id,omitempty"` - // Name of the span. The span name is sanitized and displayed in the - // Stackdriver Trace tool in the {% dynamic print site_values.console_name %}. - // The name may be a method name or some other per-call site name. - // For the same executable and the same call point, a best practice is - // to use a consistent name, which makes it easier to correlate - // cross-trace spans. - Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` - // ID of parent span. 0 or missing if this is a root span. - ParentId uint64 `protobuf:"fixed64,3,opt,name=parent_id,json=parentId" json:"parent_id,omitempty"` - // Local machine clock in nanoseconds from the UNIX epoch, - // at which span execution started. - // On the server side these are the times when the server application - // handler starts running. - LocalStartTime *google_protobuf1.Timestamp `protobuf:"bytes,4,opt,name=local_start_time,json=localStartTime" json:"local_start_time,omitempty"` - // Local machine clock in nanoseconds from the UNIX epoch, - // at which span execution ended. - // On the server side these are the times when the server application - // handler finishes running. - LocalEndTime *google_protobuf1.Timestamp `protobuf:"bytes,5,opt,name=local_end_time,json=localEndTime" json:"local_end_time,omitempty"` - // Properties of a span. Labels at the span level. - // E.g. - // "/instance_id": "my-instance" - // "/zone": "us-central1-a" - // "/grpc/peer_address": "ip:port" (dns, etc.) - // "/grpc/deadline": "Duration" - // "/http/user_agent" - // "/http/request_bytes": 300 - // "/http/response_bytes": 1200 - // "/http/url": google.com/apis - // "/pid" - // "abc.com/mylabel": "my label value" - Labels map[string]*LabelValue `protobuf:"bytes,6,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - // Stack trace captured at the start of the span. This is optional. - StackTrace *StackTrace `protobuf:"bytes,7,opt,name=stack_trace,json=stackTrace" json:"stack_trace,omitempty"` - // A collection of time-stamped events. - TimeEvents []*Span_TimeEvent `protobuf:"bytes,8,rep,name=time_events,json=timeEvents" json:"time_events,omitempty"` - // A collection of links. - Links []*Span_Link `protobuf:"bytes,9,rep,name=links" json:"links,omitempty"` - // The final status of the Span. This is optional. - Status *google_rpc.Status `protobuf:"bytes,10,opt,name=status" json:"status,omitempty"` - // True if this Span has a remote parent (is an RPC server Span). - HasRemoteParent bool `protobuf:"varint,11,opt,name=has_remote_parent,json=hasRemoteParent" json:"has_remote_parent,omitempty"` -} - -func (m *Span) Reset() { *m = Span{} } -func (m *Span) String() string { return proto.CompactTextString(m) } -func (*Span) ProtoMessage() {} -func (*Span) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } - -func (m *Span) GetId() uint64 { - if m != nil { - return m.Id - } - return 0 -} - -func (m *Span) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *Span) GetParentId() uint64 { - if m != nil { - return m.ParentId - } - return 0 -} - -func (m *Span) GetLocalStartTime() *google_protobuf1.Timestamp { - if m != nil { - return m.LocalStartTime - } - return nil -} - -func (m *Span) GetLocalEndTime() *google_protobuf1.Timestamp { - if m != nil { - return m.LocalEndTime - } - return nil -} - -func (m *Span) GetLabels() map[string]*LabelValue { - if m != nil { - return m.Labels - } - return nil -} - -func (m *Span) GetStackTrace() *StackTrace { - if m != nil { - return m.StackTrace - } - return nil -} - -func (m *Span) GetTimeEvents() []*Span_TimeEvent { - if m != nil { - return m.TimeEvents - } - return nil -} - -func (m *Span) GetLinks() []*Span_Link { - if m != nil { - return m.Links - } - return nil -} - -func (m *Span) GetStatus() *google_rpc.Status { - if m != nil { - return m.Status - } - return nil -} - -func (m *Span) GetHasRemoteParent() bool { - if m != nil { - return m.HasRemoteParent - } - return false -} - -// A time-stamped annotation in the Span. -type Span_TimeEvent struct { - // The local machine absolute timestamp when this event happened. - LocalTime *google_protobuf1.Timestamp `protobuf:"bytes,1,opt,name=local_time,json=localTime" json:"local_time,omitempty"` - // Types that are valid to be assigned to Value: - // *Span_TimeEvent_Annotation_ - // *Span_TimeEvent_NetworkEvent_ - Value isSpan_TimeEvent_Value `protobuf_oneof:"value"` -} - -func (m *Span_TimeEvent) Reset() { *m = Span_TimeEvent{} } -func (m *Span_TimeEvent) String() string { return proto.CompactTextString(m) } -func (*Span_TimeEvent) ProtoMessage() {} -func (*Span_TimeEvent) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4, 0} } - -type isSpan_TimeEvent_Value interface { - isSpan_TimeEvent_Value() -} - -type Span_TimeEvent_Annotation_ struct { - Annotation *Span_TimeEvent_Annotation `protobuf:"bytes,2,opt,name=annotation,oneof"` -} -type Span_TimeEvent_NetworkEvent_ struct { - NetworkEvent *Span_TimeEvent_NetworkEvent `protobuf:"bytes,3,opt,name=network_event,json=networkEvent,oneof"` -} - -func (*Span_TimeEvent_Annotation_) isSpan_TimeEvent_Value() {} -func (*Span_TimeEvent_NetworkEvent_) isSpan_TimeEvent_Value() {} - -func (m *Span_TimeEvent) GetValue() isSpan_TimeEvent_Value { - if m != nil { - return m.Value - } - return nil -} - -func (m *Span_TimeEvent) GetLocalTime() *google_protobuf1.Timestamp { - if m != nil { - return m.LocalTime - } - return nil -} - -func (m *Span_TimeEvent) GetAnnotation() *Span_TimeEvent_Annotation { - if x, ok := m.GetValue().(*Span_TimeEvent_Annotation_); ok { - return x.Annotation - } - return nil -} - -func (m *Span_TimeEvent) GetNetworkEvent() *Span_TimeEvent_NetworkEvent { - if x, ok := m.GetValue().(*Span_TimeEvent_NetworkEvent_); ok { - return x.NetworkEvent - } - return nil -} - -// XXX_OneofFuncs is for the internal use of the proto package. -func (*Span_TimeEvent) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _Span_TimeEvent_OneofMarshaler, _Span_TimeEvent_OneofUnmarshaler, _Span_TimeEvent_OneofSizer, []interface{}{ - (*Span_TimeEvent_Annotation_)(nil), - (*Span_TimeEvent_NetworkEvent_)(nil), - } -} - -func _Span_TimeEvent_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*Span_TimeEvent) - // value - switch x := m.Value.(type) { - case *Span_TimeEvent_Annotation_: - b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Annotation); err != nil { - return err - } - case *Span_TimeEvent_NetworkEvent_: - b.EncodeVarint(3<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.NetworkEvent); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("Span_TimeEvent.Value has unexpected type %T", x) - } - return nil -} - -func _Span_TimeEvent_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*Span_TimeEvent) - switch tag { - case 2: // value.annotation - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(Span_TimeEvent_Annotation) - err := b.DecodeMessage(msg) - m.Value = &Span_TimeEvent_Annotation_{msg} - return true, err - case 3: // value.network_event - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(Span_TimeEvent_NetworkEvent) - err := b.DecodeMessage(msg) - m.Value = &Span_TimeEvent_NetworkEvent_{msg} - return true, err - default: - return false, nil - } -} - -func _Span_TimeEvent_OneofSizer(msg proto.Message) (n int) { - m := msg.(*Span_TimeEvent) - // value - switch x := m.Value.(type) { - case *Span_TimeEvent_Annotation_: - s := proto.Size(x.Annotation) - n += proto.SizeVarint(2<<3 | proto.WireBytes) - n += proto.SizeVarint(uint64(s)) - n += s - case *Span_TimeEvent_NetworkEvent_: - s := proto.Size(x.NetworkEvent) - n += proto.SizeVarint(3<<3 | proto.WireBytes) - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -// Text annotation with a set of labels. -type Span_TimeEvent_Annotation struct { - // A user-supplied message describing the event. - Description string `protobuf:"bytes,1,opt,name=description" json:"description,omitempty"` - // A set of labels on the annotation. - Labels map[string]*LabelValue `protobuf:"bytes,2,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` -} - -func (m *Span_TimeEvent_Annotation) Reset() { *m = Span_TimeEvent_Annotation{} } -func (m *Span_TimeEvent_Annotation) String() string { return proto.CompactTextString(m) } -func (*Span_TimeEvent_Annotation) ProtoMessage() {} -func (*Span_TimeEvent_Annotation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4, 0, 0} } - -func (m *Span_TimeEvent_Annotation) GetDescription() string { - if m != nil { - return m.Description - } - return "" -} - -func (m *Span_TimeEvent_Annotation) GetLabels() map[string]*LabelValue { - if m != nil { - return m.Labels - } - return nil -} - -// An event describing an RPC message sent/received on the network. -type Span_TimeEvent_NetworkEvent struct { - // If available, this is the kernel time: - // For sent messages, this is the time at which the first bit was sent. - // For received messages, this is the time at which the last bit was - // received. - KernelTime *google_protobuf1.Timestamp `protobuf:"bytes,1,opt,name=kernel_time,json=kernelTime" json:"kernel_time,omitempty"` - Type Span_TimeEvent_NetworkEvent_Type `protobuf:"varint,2,opt,name=type,enum=google.tracing.v1.Span_TimeEvent_NetworkEvent_Type" json:"type,omitempty"` - // Every message has an identifier, that must be different from all the - // network messages in this span. - // This is very important when the request/response are streamed. - MessageId uint64 `protobuf:"varint,3,opt,name=message_id,json=messageId" json:"message_id,omitempty"` - // Number of bytes send/receive. - MessageSize uint64 `protobuf:"varint,4,opt,name=message_size,json=messageSize" json:"message_size,omitempty"` -} - -func (m *Span_TimeEvent_NetworkEvent) Reset() { *m = Span_TimeEvent_NetworkEvent{} } -func (m *Span_TimeEvent_NetworkEvent) String() string { return proto.CompactTextString(m) } -func (*Span_TimeEvent_NetworkEvent) ProtoMessage() {} -func (*Span_TimeEvent_NetworkEvent) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{4, 0, 1} -} - -func (m *Span_TimeEvent_NetworkEvent) GetKernelTime() *google_protobuf1.Timestamp { - if m != nil { - return m.KernelTime - } - return nil -} - -func (m *Span_TimeEvent_NetworkEvent) GetType() Span_TimeEvent_NetworkEvent_Type { - if m != nil { - return m.Type - } - return Span_TimeEvent_NetworkEvent_UNSPECIFIED -} - -func (m *Span_TimeEvent_NetworkEvent) GetMessageId() uint64 { - if m != nil { - return m.MessageId - } - return 0 -} - -func (m *Span_TimeEvent_NetworkEvent) GetMessageSize() uint64 { - if m != nil { - return m.MessageSize - } - return 0 -} - -// Link one span with another which may be in a different Trace. Used (for -// example) in batching operations, where a single batch handler processes -// multiple requests from different traces. -type Span_Link struct { - // The trace and span identifier of the linked span. - TraceId *TraceId `protobuf:"bytes,1,opt,name=trace_id,json=traceId" json:"trace_id,omitempty"` - SpanId uint64 `protobuf:"fixed64,2,opt,name=span_id,json=spanId" json:"span_id,omitempty"` - Type Span_Link_Type `protobuf:"varint,3,opt,name=type,enum=google.tracing.v1.Span_Link_Type" json:"type,omitempty"` -} - -func (m *Span_Link) Reset() { *m = Span_Link{} } -func (m *Span_Link) String() string { return proto.CompactTextString(m) } -func (*Span_Link) ProtoMessage() {} -func (*Span_Link) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4, 1} } - -func (m *Span_Link) GetTraceId() *TraceId { - if m != nil { - return m.TraceId - } - return nil -} - -func (m *Span_Link) GetSpanId() uint64 { - if m != nil { - return m.SpanId - } - return 0 -} - -func (m *Span_Link) GetType() Span_Link_Type { - if m != nil { - return m.Type - } - return Span_Link_UNSPECIFIED -} - -// A trace describes how long it takes for an application to perform some -// operations. It consists of a tree of spans, each of which contains details -// about an operation with time information and operation details. -type Trace struct { - // Globally unique identifier for the trace. Common to all the spans. - TraceId *TraceId `protobuf:"bytes,1,opt,name=trace_id,json=traceId" json:"trace_id,omitempty"` - // Collection of spans in the trace. The root span has parent_id == 0. - Spans []*Span `protobuf:"bytes,2,rep,name=spans" json:"spans,omitempty"` -} - -func (m *Trace) Reset() { *m = Trace{} } -func (m *Trace) String() string { return proto.CompactTextString(m) } -func (*Trace) ProtoMessage() {} -func (*Trace) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } - -func (m *Trace) GetTraceId() *TraceId { - if m != nil { - return m.TraceId - } - return nil -} - -func (m *Trace) GetSpans() []*Span { - if m != nil { - return m.Spans - } - return nil -} - -func init() { - proto.RegisterType((*TraceId)(nil), "google.tracing.v1.TraceId") - proto.RegisterType((*Module)(nil), "google.tracing.v1.Module") - proto.RegisterType((*StackTrace)(nil), "google.tracing.v1.StackTrace") - proto.RegisterType((*StackTrace_StackFrame)(nil), "google.tracing.v1.StackTrace.StackFrame") - proto.RegisterType((*LabelValue)(nil), "google.tracing.v1.LabelValue") - proto.RegisterType((*Span)(nil), "google.tracing.v1.Span") - proto.RegisterType((*Span_TimeEvent)(nil), "google.tracing.v1.Span.TimeEvent") - proto.RegisterType((*Span_TimeEvent_Annotation)(nil), "google.tracing.v1.Span.TimeEvent.Annotation") - proto.RegisterType((*Span_TimeEvent_NetworkEvent)(nil), "google.tracing.v1.Span.TimeEvent.NetworkEvent") - proto.RegisterType((*Span_Link)(nil), "google.tracing.v1.Span.Link") - proto.RegisterType((*Trace)(nil), "google.tracing.v1.Trace") - proto.RegisterEnum("google.tracing.v1.Span_TimeEvent_NetworkEvent_Type", Span_TimeEvent_NetworkEvent_Type_name, Span_TimeEvent_NetworkEvent_Type_value) - proto.RegisterEnum("google.tracing.v1.Span_Link_Type", Span_Link_Type_name, Span_Link_Type_value) -} - -func init() { proto.RegisterFile("google/tracing/trace.proto", fileDescriptor0) } - -var fileDescriptor0 = []byte{ - // 1102 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xdd, 0x6e, 0x1a, 0x47, - 0x14, 0x66, 0xf9, 0x59, 0xe0, 0x2c, 0x76, 0xc8, 0x54, 0xad, 0x09, 0x8d, 0x65, 0x9b, 0xa8, 0x92, - 0xe5, 0x26, 0x8b, 0x82, 0x15, 0xc9, 0x8d, 0xa5, 0xaa, 0xb1, 0x8d, 0x0b, 0x52, 0x8a, 0xd0, 0xe0, - 0x58, 0x55, 0x6f, 0x56, 0xc3, 0xee, 0x18, 0x56, 0x2c, 0xb3, 0xab, 0x9d, 0x81, 0xc6, 0xbe, 0xed, - 0x1b, 0xf4, 0x1d, 0x7a, 0xdb, 0x37, 0xe8, 0x83, 0xb4, 0x4f, 0x53, 0xcd, 0xcf, 0x62, 0xaa, 0xd8, - 0x71, 0x53, 0xa9, 0x57, 0xcc, 0x7c, 0xe7, 0x3b, 0x67, 0xce, 0x7c, 0xe7, 0x9c, 0x59, 0xa0, 0x39, - 0x89, 0xe3, 0x49, 0x44, 0xdb, 0x22, 0x25, 0x7e, 0xc8, 0x26, 0xea, 0x97, 0xba, 0x49, 0x1a, 0x8b, - 0x18, 0x3d, 0xd6, 0x36, 0xd7, 0xd8, 0xdc, 0xe5, 0xcb, 0xe6, 0x53, 0x43, 0x27, 0x49, 0xd8, 0x26, - 0x8c, 0xc5, 0x82, 0x88, 0x30, 0x66, 0x5c, 0x3b, 0x34, 0x77, 0x8c, 0x55, 0xed, 0xc6, 0x8b, 0xab, - 0xb6, 0x08, 0xe7, 0x94, 0x0b, 0x32, 0x4f, 0x0c, 0x61, 0xcb, 0x10, 0xd2, 0xc4, 0x6f, 0x73, 0x41, - 0xc4, 0xc2, 0x78, 0xb6, 0x0e, 0xa0, 0x7c, 0x21, 0x4f, 0xee, 0x07, 0x68, 0x07, 0x9c, 0x29, 0x7d, - 0xef, 0x51, 0xe6, 0xc7, 0x01, 0x0d, 0x1a, 0xd6, 0xae, 0xb5, 0x5f, 0xc5, 0x30, 0xa5, 0xef, 0xbb, - 0x1a, 0x69, 0x1d, 0x83, 0xfd, 0x43, 0x1c, 0x2c, 0x22, 0x8a, 0xbe, 0x00, 0x7b, 0xae, 0x56, 0x86, - 0x65, 0x76, 0xe8, 0x09, 0x54, 0xc6, 0x8b, 0x30, 0x0a, 0xbc, 0x30, 0x68, 0xe4, 0x95, 0xa5, 0xac, - 0xf6, 0xfd, 0xa0, 0xf5, 0x7b, 0x01, 0x60, 0x24, 0x88, 0x3f, 0x53, 0xc7, 0xa1, 0x3e, 0x38, 0x5c, - 0xee, 0xbc, 0xab, 0x94, 0xcc, 0x65, 0x98, 0xc2, 0xbe, 0xd3, 0xd9, 0x77, 0x3f, 0xb8, 0xb8, 0x7b, - 0xeb, 0xa3, 0x97, 0xe7, 0x92, 0x8f, 0x81, 0xaf, 0xd6, 0xe8, 0x05, 0x7c, 0xa6, 0x43, 0x29, 0x09, - 0xbd, 0x29, 0xe1, 0xd3, 0xec, 0xfc, 0x22, 0xae, 0xf3, 0x95, 0x7f, 0x8f, 0xf0, 0x69, 0x3f, 0x68, - 0xfe, 0x96, 0x37, 0x89, 0x68, 0xef, 0x67, 0xb0, 0x71, 0xb5, 0x60, 0xbe, 0x54, 0xd3, 0x63, 0x3a, - 0x15, 0x99, 0x77, 0x2d, 0x03, 0x07, 0x92, 0xf4, 0x1c, 0x50, 0x9c, 0x86, 0x13, 0xef, 0x9f, 0x4c, - 0x7d, 0xc3, 0xba, 0xb4, 0x9c, 0xaf, 0xb3, 0xbf, 0x84, 0xea, 0x55, 0x18, 0x51, 0x4d, 0x2a, 0x28, - 0x52, 0x45, 0x02, 0xca, 0xb8, 0x03, 0x4e, 0x14, 0x32, 0xea, 0xb1, 0xc5, 0x7c, 0x4c, 0xd3, 0x46, - 0x71, 0xd7, 0xda, 0x2f, 0x60, 0x90, 0xd0, 0x40, 0x21, 0x32, 0x21, 0x3f, 0x8e, 0x16, 0x73, 0x96, - 0x51, 0x4a, 0x8a, 0x52, 0xd3, 0xa0, 0x21, 0xbd, 0x06, 0x27, 0x8a, 0x49, 0xe0, 0x99, 0x2a, 0xd8, - 0xbb, 0xd6, 0xbe, 0xd3, 0x79, 0x72, 0x87, 0x7c, 0xba, 0x60, 0x18, 0x24, 0xdb, 0x14, 0xef, 0x2b, - 0xd8, 0xe4, 0xf1, 0x22, 0xf5, 0xa9, 0xb7, 0xa4, 0x29, 0x0f, 0x63, 0xd6, 0x28, 0xab, 0x1c, 0x37, - 0x34, 0x7a, 0xa9, 0xc1, 0xd6, 0x0d, 0xc0, 0x5b, 0x32, 0xa6, 0xd1, 0x25, 0x89, 0x16, 0x52, 0xa6, - 0x1a, 0x17, 0x69, 0xc8, 0x26, 0xde, 0x52, 0xee, 0xb5, 0x4a, 0xbd, 0x1c, 0x76, 0x34, 0xaa, 0x49, - 0xdb, 0x50, 0x0d, 0x99, 0x30, 0x0c, 0xa9, 0x4e, 0xa1, 0x97, 0xc3, 0x95, 0x90, 0x09, 0x6d, 0xde, - 0x01, 0x18, 0xc7, 0x71, 0x64, 0xec, 0x52, 0x98, 0x4a, 0x2f, 0x87, 0xab, 0x12, 0x53, 0x84, 0x93, - 0x32, 0x94, 0x94, 0xad, 0xf5, 0x6b, 0x0d, 0x8a, 0xa3, 0x84, 0x30, 0xb4, 0x09, 0xf9, 0x50, 0xb7, - 0xa2, 0x8d, 0xf3, 0x61, 0x80, 0x10, 0x14, 0xd7, 0xa4, 0x57, 0x6b, 0x29, 0x77, 0x42, 0x52, 0xca, - 0x84, 0xac, 0x7a, 0x41, 0x51, 0x2b, 0x1a, 0xe8, 0x07, 0xe8, 0x0c, 0xea, 0x51, 0xec, 0x93, 0xc8, - 0xe3, 0x82, 0xa4, 0xc2, 0x93, 0x73, 0xa1, 0x34, 0x77, 0x3a, 0xcd, 0x4c, 0xad, 0x6c, 0x68, 0xdc, - 0x8b, 0x6c, 0x68, 0xf0, 0xa6, 0xf2, 0x19, 0x49, 0x17, 0x09, 0xa2, 0xef, 0x40, 0x23, 0x1e, 0x65, - 0x81, 0x8e, 0x51, 0x7a, 0x30, 0x46, 0x4d, 0x79, 0x74, 0x59, 0xa0, 0x22, 0x1c, 0x83, 0x1d, 0x49, - 0x35, 0x79, 0xc3, 0x56, 0xad, 0xfe, 0xec, 0xae, 0x56, 0x4f, 0x08, 0x73, 0x95, 0xe6, 0xbc, 0xcb, - 0x44, 0x7a, 0x8d, 0x8d, 0x0b, 0xfa, 0x36, 0x1b, 0x16, 0xd5, 0xe1, 0xaa, 0x5c, 0x4e, 0x67, 0xfb, - 0xa3, 0xc3, 0x62, 0x26, 0x44, 0x0f, 0xdb, 0x09, 0x38, 0x32, 0x69, 0x8f, 0x2e, 0x29, 0x13, 0xbc, - 0x51, 0x51, 0x19, 0xec, 0xdd, 0x97, 0x81, 0xcc, 0xb7, 0x2b, 0x99, 0x18, 0x44, 0xb6, 0xe4, 0xa8, - 0x03, 0xa5, 0x28, 0x64, 0x33, 0xde, 0xa8, 0x2a, 0xef, 0xa7, 0xf7, 0xe6, 0x1f, 0xb2, 0x19, 0xd6, - 0x54, 0x74, 0x00, 0xb6, 0x7e, 0x6c, 0x1a, 0xa0, 0x52, 0x46, 0x99, 0x53, 0x9a, 0xf8, 0x32, 0x57, - 0xb1, 0xe0, 0xd8, 0x30, 0xd0, 0x01, 0x3c, 0x9e, 0x12, 0xee, 0xa5, 0x74, 0x1e, 0x0b, 0xea, 0xe9, - 0xfa, 0x35, 0x1c, 0xd9, 0x23, 0xf8, 0xd1, 0x94, 0x70, 0xac, 0xf0, 0xa1, 0x82, 0x9b, 0x7f, 0x96, - 0xa0, 0xba, 0xca, 0x12, 0x7d, 0x03, 0xa0, 0x8b, 0xa3, 0x0a, 0x63, 0x3d, 0x58, 0x98, 0xaa, 0x62, - 0xab, 0xaa, 0x0c, 0x00, 0x6e, 0x1f, 0x53, 0xd5, 0x54, 0x4e, 0xe7, 0xf9, 0x83, 0xba, 0xb8, 0x6f, - 0x56, 0x3e, 0xbd, 0x1c, 0x5e, 0x8b, 0x80, 0xde, 0xc1, 0x06, 0xa3, 0xe2, 0xe7, 0x38, 0x9d, 0x69, - 0xad, 0x55, 0x3b, 0x3a, 0x1d, 0xf7, 0xe1, 0x90, 0x03, 0xed, 0xa6, 0x36, 0xbd, 0x1c, 0xae, 0xb1, - 0xb5, 0x7d, 0xf3, 0x2f, 0x0b, 0xe0, 0xf6, 0x4c, 0xb4, 0x0b, 0x4e, 0x40, 0xb9, 0x9f, 0x86, 0x89, - 0x4a, 0x5b, 0x3f, 0x58, 0xeb, 0x10, 0x1a, 0xae, 0xba, 0x2d, 0xaf, 0xaa, 0x75, 0xf4, 0x29, 0x77, - 0xba, 0xab, 0x05, 0x9b, 0x3f, 0x82, 0xb3, 0x06, 0xa3, 0x3a, 0x14, 0x66, 0xf4, 0xda, 0x1c, 0x2d, - 0x97, 0xe8, 0xd0, 0xcc, 0xae, 0x51, 0xf1, 0xae, 0xee, 0xbc, 0x7d, 0x4e, 0xb0, 0xe6, 0xbe, 0xce, - 0x1f, 0x59, 0xcd, 0x5f, 0xf2, 0x50, 0x5b, 0xbf, 0x3d, 0x3a, 0x06, 0x67, 0x46, 0x53, 0x46, 0xff, - 0x75, 0x41, 0x41, 0xd3, 0x55, 0x45, 0xbf, 0x87, 0xa2, 0xb8, 0x4e, 0x74, 0x16, 0x9b, 0x9d, 0xc3, - 0x4f, 0x13, 0xde, 0xbd, 0xb8, 0x4e, 0x28, 0x56, 0x01, 0xd0, 0x36, 0xc0, 0x9c, 0x72, 0x4e, 0x26, - 0x34, 0x7b, 0x56, 0x8a, 0xb8, 0x6a, 0x90, 0x7e, 0x80, 0xf6, 0xa0, 0x96, 0x99, 0x79, 0x78, 0xa3, - 0xdf, 0x94, 0x22, 0x76, 0x0c, 0x36, 0x0a, 0x6f, 0x68, 0xeb, 0x6b, 0x28, 0xca, 0x78, 0xe8, 0x11, - 0x38, 0xef, 0x06, 0xa3, 0x61, 0xf7, 0xb4, 0x7f, 0xde, 0xef, 0x9e, 0xd5, 0x73, 0xa8, 0x02, 0xc5, - 0x51, 0x77, 0x70, 0x51, 0xb7, 0xe4, 0x0a, 0x77, 0x4f, 0x2f, 0xeb, 0xf9, 0xd5, 0xd3, 0xd7, 0xfc, - 0xc3, 0x82, 0xa2, 0x9c, 0x21, 0xf4, 0x0a, 0x2a, 0xfa, 0x83, 0x66, 0x1e, 0xc0, 0x35, 0x0d, 0xd6, - 0x6e, 0x63, 0x3e, 0xde, 0xb8, 0x2c, 0xcc, 0x57, 0x7c, 0x0b, 0xca, 0x3c, 0x21, 0x2c, 0xfb, 0x02, - 0xda, 0xd8, 0x96, 0xdb, 0x7e, 0x80, 0x5e, 0x19, 0x65, 0x0a, 0x4a, 0x99, 0xbd, 0x8f, 0xcd, 0xef, - 0x9a, 0x0e, 0x2d, 0xf7, 0xbe, 0x5b, 0x54, 0xa1, 0x74, 0xda, 0xeb, 0xbf, 0x3d, 0xab, 0x5b, 0x08, - 0xc0, 0x1e, 0xbe, 0xc1, 0xf2, 0x4a, 0xf9, 0xff, 0xaf, 0x51, 0x5a, 0x73, 0x28, 0xe9, 0xe7, 0xec, - 0x3f, 0x2a, 0xf3, 0x02, 0x4a, 0x52, 0x8a, 0x6c, 0x26, 0xb6, 0xee, 0x51, 0x00, 0x6b, 0xd6, 0x89, - 0x07, 0x9f, 0xfb, 0xf1, 0xfc, 0x43, 0xd2, 0x09, 0xa8, 0xc8, 0x43, 0xd9, 0x87, 0x43, 0xeb, 0xa7, - 0x23, 0x43, 0x98, 0xc4, 0x11, 0x61, 0x13, 0x37, 0x4e, 0x27, 0xed, 0x09, 0x65, 0xaa, 0x4b, 0xdb, - 0xda, 0x44, 0x92, 0x90, 0xaf, 0xfe, 0xe6, 0x2d, 0x5f, 0x1e, 0x9b, 0xe5, 0xd8, 0x56, 0xa4, 0xc3, - 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0xdc, 0x30, 0x5b, 0x04, 0x0a, 0x0a, 0x00, 0x00, -} diff --git a/vendor/google.golang.org/genproto/googleapis/type/color/color.pb.go b/vendor/google.golang.org/genproto/googleapis/type/color/color.pb.go index 1f31b6d..4f201b8 100644 --- a/vendor/google.golang.org/genproto/googleapis/type/color/color.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/type/color/color.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/type/color.proto -// DO NOT EDIT! /* Package color is a generated protocol buffer package. diff --git a/vendor/google.golang.org/genproto/googleapis/type/date/date.pb.go b/vendor/google.golang.org/genproto/googleapis/type/date/date.pb.go index 97ed47c..40beaab 100644 --- a/vendor/google.golang.org/genproto/googleapis/type/date/date.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/type/date/date.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/type/date.proto -// DO NOT EDIT! /* Package date is a generated protocol buffer package. diff --git a/vendor/google.golang.org/genproto/googleapis/type/dayofweek/dayofweek.pb.go b/vendor/google.golang.org/genproto/googleapis/type/dayofweek/dayofweek.pb.go index 77803c1..eecd403 100644 --- a/vendor/google.golang.org/genproto/googleapis/type/dayofweek/dayofweek.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/type/dayofweek/dayofweek.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/type/dayofweek.proto -// DO NOT EDIT! /* Package dayofweek is a generated protocol buffer package. diff --git a/vendor/google.golang.org/genproto/googleapis/type/latlng/latlng.pb.go b/vendor/google.golang.org/genproto/googleapis/type/latlng/latlng.pb.go index 82229f0..9a845f9 100644 --- a/vendor/google.golang.org/genproto/googleapis/type/latlng/latlng.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/type/latlng/latlng.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/type/latlng.proto -// DO NOT EDIT! /* Package latlng is a generated protocol buffer package. diff --git a/vendor/google.golang.org/genproto/googleapis/type/money/money.pb.go b/vendor/google.golang.org/genproto/googleapis/type/money/money.pb.go index 5013df6..34bf8ab 100644 --- a/vendor/google.golang.org/genproto/googleapis/type/money/money.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/type/money/money.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/type/money.proto -// DO NOT EDIT! /* Package money is a generated protocol buffer package. diff --git a/vendor/google.golang.org/genproto/googleapis/type/postaladdress/postal_address.pb.go b/vendor/google.golang.org/genproto/googleapis/type/postaladdress/postal_address.pb.go index 747112f..430f3b4 100644 --- a/vendor/google.golang.org/genproto/googleapis/type/postaladdress/postal_address.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/type/postaladdress/postal_address.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/type/postal_address.proto -// DO NOT EDIT! /* Package postaladdress is a generated protocol buffer package. diff --git a/vendor/google.golang.org/genproto/googleapis/type/timeofday/timeofday.pb.go b/vendor/google.golang.org/genproto/googleapis/type/timeofday/timeofday.pb.go index 7c1e743..703c74c 100644 --- a/vendor/google.golang.org/genproto/googleapis/type/timeofday/timeofday.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/type/timeofday/timeofday.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/type/timeofday.proto -// DO NOT EDIT! /* Package timeofday is a generated protocol buffer package. diff --git a/vendor/google.golang.org/genproto/googleapis/watcher/v1/watch.pb.go b/vendor/google.golang.org/genproto/googleapis/watcher/v1/watch.pb.go index 25ed420..c312814 100644 --- a/vendor/google.golang.org/genproto/googleapis/watcher/v1/watch.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/watcher/v1/watch.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: google/watcher/v1/watch.proto -// DO NOT EDIT! /* Package watcher is a generated protocol buffer package. @@ -344,33 +343,34 @@ var _Watcher_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("google/watcher/v1/watch.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 445 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x52, 0x51, 0x6f, 0xd3, 0x30, - 0x10, 0xc6, 0xdd, 0x92, 0xd2, 0xeb, 0x98, 0x3a, 0x0b, 0x50, 0x5a, 0x06, 0x44, 0xe1, 0x25, 0x4f, - 0x09, 0xeb, 0x84, 0x84, 0xc4, 0x53, 0xcb, 0x82, 0x88, 0x60, 0x6b, 0xe5, 0x44, 0x62, 0xe2, 0x25, - 0xf2, 0x3a, 0xe3, 0x55, 0xb4, 0x76, 0x49, 0x9c, 0xa1, 0xbd, 0xf2, 0x17, 0x10, 0xbf, 0x8c, 0xbf, - 0xc0, 0x0f, 0x41, 0xb5, 0x1d, 0x40, 0x74, 0x7d, 0xbb, 0xfb, 0xbe, 0xef, 0xce, 0xf7, 0x9d, 0x0f, - 0x1e, 0x73, 0x29, 0xf9, 0x82, 0xc5, 0x5f, 0xa9, 0x9a, 0x5d, 0xb1, 0x32, 0xbe, 0x3e, 0x32, 0x61, - 0xb4, 0x2a, 0xa5, 0x92, 0xf8, 0xc0, 0xd0, 0x91, 0xa5, 0xa3, 0xeb, 0xa3, 0xc1, 0xa1, 0xad, 0xa0, - 0xab, 0x79, 0x4c, 0x85, 0x90, 0x8a, 0xaa, 0xb9, 0x14, 0x95, 0x29, 0x18, 0xf4, 0x2d, 0xab, 0xb3, - 0x8b, 0xfa, 0x53, 0x4c, 0xc5, 0x8d, 0xa5, 0x1e, 0xfd, 0x4f, 0xb1, 0xe5, 0x4a, 0x59, 0x32, 0x78, - 0x03, 0x6d, 0xc2, 0xbe, 0xd4, 0xac, 0x52, 0xf8, 0x21, 0xb8, 0x8a, 0x96, 0x9c, 0x29, 0x0f, 0xf9, - 0x28, 0xec, 0x10, 0x9b, 0xe1, 0x67, 0x70, 0xaf, 0x64, 0x55, 0xbd, 0x64, 0xc5, 0x92, 0x96, 0x9f, - 0x59, 0xe9, 0xb5, 0x7c, 0x14, 0xee, 0x91, 0x3d, 0x03, 0x9e, 0x6a, 0x2c, 0x18, 0x43, 0xf7, 0xf5, - 0x15, 0x15, 0x9c, 0x8d, 0xd7, 0x13, 0xe3, 0x63, 0x68, 0xcf, 0x74, 0x5a, 0x79, 0xc8, 0xdf, 0x09, - 0xbb, 0xc3, 0x7e, 0xb4, 0xe1, 0x28, 0x32, 0x05, 0xa4, 0x51, 0x06, 0x3f, 0x5a, 0xe0, 0x1a, 0x0c, - 0x7b, 0xd0, 0x66, 0x0b, 0xb6, 0x64, 0xa2, 0x19, 0xa6, 0x49, 0xf1, 0x0b, 0x70, 0x2a, 0x45, 0x15, - 0xd3, 0x53, 0xec, 0x0f, 0x9f, 0x6e, 0xed, 0x1b, 0x65, 0x6b, 0x19, 0x31, 0x6a, 0x1c, 0xc2, 0xee, - 0x25, 0x55, 0xd4, 0x73, 0x7d, 0x14, 0x76, 0x87, 0xf7, 0x9b, 0xaa, 0x66, 0x27, 0xd1, 0x48, 0xdc, - 0x10, 0xad, 0xd8, 0xb4, 0xbb, 0xbb, 0x69, 0x17, 0x1f, 0x42, 0x67, 0x26, 0x85, 0x9a, 0x8b, 0x9a, - 0x5d, 0x7a, 0x8e, 0x8f, 0xc2, 0xbb, 0xe4, 0x2f, 0x10, 0x9c, 0x82, 0xa3, 0x1f, 0xc7, 0x00, 0x6e, - 0x72, 0x9e, 0x66, 0x79, 0xd6, 0xbb, 0x83, 0x31, 0xec, 0x9f, 0x4c, 0x92, 0xac, 0x38, 0x9b, 0xe4, - 0x85, 0x06, 0x7b, 0x08, 0xf7, 0xe1, 0x41, 0x7a, 0x96, 0xe6, 0xe9, 0xe8, 0x7d, 0x91, 0xe5, 0xa3, - 0x3c, 0x29, 0xb2, 0x77, 0xe9, 0x74, 0x9a, 0x9c, 0xf4, 0x5a, 0xb8, 0x03, 0x4e, 0x42, 0xc8, 0x84, - 0xf4, 0x76, 0x86, 0x33, 0x68, 0x7f, 0x30, 0xee, 0xf0, 0x39, 0x38, 0x3a, 0xc4, 0x83, 0x5b, 0x7c, - 0xdb, 0x8f, 0x1c, 0x3c, 0xd9, 0xba, 0x13, 0xfd, 0x39, 0xc1, 0xc1, 0xb7, 0x9f, 0xbf, 0xbe, 0xb7, - 0xba, 0xb8, 0xf3, 0xe7, 0xea, 0x9e, 0xa3, 0xf1, 0xdb, 0x31, 0xe8, 0xce, 0xd3, 0xf5, 0x46, 0xa6, - 0xe8, 0xe3, 0x4b, 0xdb, 0x83, 0xcb, 0x05, 0x15, 0x3c, 0x92, 0x25, 0x8f, 0x39, 0x13, 0x7a, 0x5f, - 0xb1, 0xa1, 0xe8, 0x6a, 0x5e, 0xfd, 0x73, 0xbf, 0xaf, 0x6c, 0x78, 0xe1, 0x6a, 0xd1, 0xf1, 0xef, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x4f, 0x60, 0xe9, 0x84, 0xe3, 0x02, 0x00, 0x00, + // 449 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x52, 0xdd, 0x6e, 0xd3, 0x30, + 0x14, 0xc6, 0xdd, 0x92, 0xd2, 0xd3, 0x31, 0x75, 0x16, 0x43, 0x69, 0x19, 0x10, 0x85, 0x9b, 0x5c, + 0x25, 0xac, 0x13, 0x12, 0x12, 0x57, 0x2d, 0x0b, 0x52, 0x04, 0x5b, 0x2b, 0x27, 0x12, 0x13, 0x37, + 0x91, 0x97, 0x99, 0xac, 0xa2, 0xb1, 0x4b, 0xe2, 0x0e, 0xed, 0x96, 0x57, 0x40, 0x3c, 0x19, 0xaf, + 0xc0, 0x83, 0xa0, 0xda, 0x0e, 0x20, 0xb2, 0xde, 0x9d, 0xf3, 0xfd, 0xd8, 0xe7, 0x3b, 0x36, 0x3c, + 0x29, 0x84, 0x28, 0x96, 0x2c, 0xfc, 0x4a, 0x65, 0x7e, 0xcd, 0xaa, 0xf0, 0xe6, 0x58, 0x97, 0xc1, + 0xaa, 0x12, 0x52, 0xe0, 0x03, 0x4d, 0x07, 0x86, 0x0e, 0x6e, 0x8e, 0x47, 0x47, 0xc6, 0x41, 0x57, + 0x8b, 0x90, 0x72, 0x2e, 0x24, 0x95, 0x0b, 0xc1, 0x6b, 0x6d, 0x18, 0x0d, 0x0d, 0xab, 0xba, 0xcb, + 0xf5, 0xa7, 0x90, 0xf2, 0x5b, 0x43, 0x3d, 0xfe, 0x9f, 0x62, 0xe5, 0x4a, 0x1a, 0xd2, 0x7b, 0x0b, + 0x5d, 0xc2, 0xbe, 0xac, 0x59, 0x2d, 0xf1, 0x23, 0xb0, 0x25, 0xad, 0x0a, 0x26, 0x1d, 0xe4, 0x22, + 0xbf, 0x47, 0x4c, 0x87, 0x9f, 0xc3, 0x83, 0x8a, 0xd5, 0xeb, 0x92, 0x65, 0x25, 0xad, 0x3e, 0xb3, + 0xca, 0xe9, 0xb8, 0xc8, 0xdf, 0x23, 0x7b, 0x1a, 0x3c, 0x53, 0x98, 0x37, 0x85, 0xfe, 0x9b, 0x6b, + 0xca, 0x0b, 0x36, 0xdd, 0x4c, 0x8c, 0x4f, 0xa0, 0x9b, 0xab, 0xb6, 0x76, 0x90, 0xbb, 0xe3, 0xf7, + 0xc7, 0xc3, 0xa0, 0x95, 0x28, 0xd0, 0x06, 0xd2, 0x28, 0xbd, 0x1f, 0x1d, 0xb0, 0x35, 0x86, 0x1d, + 0xe8, 0xb2, 0x25, 0x2b, 0x19, 0x6f, 0x86, 0x69, 0x5a, 0xfc, 0x12, 0xac, 0x5a, 0x52, 0xc9, 0xd4, + 0x14, 0xfb, 0xe3, 0x67, 0x5b, 0xcf, 0x0d, 0x92, 0x8d, 0x8c, 0x68, 0x35, 0xf6, 0x61, 0xf7, 0x8a, + 0x4a, 0xea, 0xd8, 0x2e, 0xf2, 0xfb, 0xe3, 0x87, 0x8d, 0xab, 0xd9, 0x49, 0x30, 0xe1, 0xb7, 0x44, + 0x29, 0xda, 0x71, 0x77, 0xdb, 0x71, 0xf1, 0x11, 0xf4, 0x72, 0xc1, 0xe5, 0x82, 0xaf, 0xd9, 0x95, + 0x63, 0xb9, 0xc8, 0xbf, 0x4f, 0xfe, 0x02, 0xde, 0x19, 0x58, 0xea, 0x72, 0x0c, 0x60, 0x47, 0x17, + 0x71, 0x92, 0x26, 0x83, 0x7b, 0x18, 0xc3, 0xfe, 0xe9, 0x2c, 0x4a, 0xb2, 0xf3, 0x59, 0x9a, 0x29, + 0x70, 0x80, 0xf0, 0x10, 0x0e, 0xe3, 0xf3, 0x38, 0x8d, 0x27, 0xef, 0xb3, 0x24, 0x9d, 0xa4, 0x51, + 0x96, 0xbc, 0x8b, 0xe7, 0xf3, 0xe8, 0x74, 0xd0, 0xc1, 0x3d, 0xb0, 0x22, 0x42, 0x66, 0x64, 0xb0, + 0x33, 0xce, 0xa1, 0xfb, 0x41, 0xa7, 0xc3, 0x17, 0x60, 0xa9, 0x12, 0x8f, 0xee, 0xc8, 0x6d, 0x1e, + 0x72, 0xf4, 0x74, 0xeb, 0x4e, 0xd4, 0xe3, 0x78, 0x07, 0xdf, 0x7e, 0xfe, 0xfa, 0xde, 0xe9, 0xe3, + 0xde, 0x9f, 0x5f, 0xf7, 0x02, 0x4d, 0x33, 0x38, 0xcc, 0x45, 0xd9, 0x76, 0x4e, 0x41, 0x5d, 0x38, + 0xdf, 0x2c, 0x6a, 0x8e, 0x3e, 0xbe, 0x32, 0x82, 0x42, 0x2c, 0x29, 0x2f, 0x02, 0x51, 0x15, 0x61, + 0xc1, 0xb8, 0x5a, 0x63, 0xa8, 0x29, 0xba, 0x5a, 0xd4, 0xff, 0x7c, 0xeb, 0xd7, 0xa6, 0xbc, 0xb4, + 0x95, 0xe8, 0xe4, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x48, 0x0a, 0xba, 0x6c, 0xfa, 0x02, 0x00, + 0x00, } diff --git a/vendor/google.golang.org/genproto/protobuf/api/api.pb.go b/vendor/google.golang.org/genproto/protobuf/api/api.pb.go index 7cb3f38..d41ce3c 100644 --- a/vendor/google.golang.org/genproto/protobuf/api/api.pb.go +++ b/vendor/google.golang.org/genproto/protobuf/api/api.pb.go @@ -1,12 +1,11 @@ -// Code generated by protoc-gen-go. -// source: src/google/protobuf/api.proto -// DO NOT EDIT! +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/protobuf/api.proto /* Package api is a generated protocol buffer package. It is generated from these files: - src/google/protobuf/api.proto + google/protobuf/api.proto It has these top-level messages: Api @@ -32,22 +31,29 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package -// Api is a light-weight descriptor for a protocol buffer service. +// Api is a light-weight descriptor for an API Interface. +// +// Interfaces are also described as "protocol buffer services" in some contexts, +// such as by the "service" keyword in a .proto file, but they are different +// from API Services, which represent a concrete implementation of an interface +// as opposed to simply a description of methods and bindings. They are also +// sometimes simply referred to as "APIs" in other contexts, such as the name of +// this message itself. See https://cloud.google.com/apis/design/glossary for +// detailed terminology. type Api struct { - // The fully qualified name of this api, including package name - // followed by the api's simple name. + // The fully qualified name of this interface, including package name + // followed by the interface's simple name. Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - // The methods of this api, in unspecified order. + // The methods of this interface, in unspecified order. Methods []*Method `protobuf:"bytes,2,rep,name=methods" json:"methods,omitempty"` - // Any metadata attached to the API. + // Any metadata attached to the interface. Options []*google_protobuf2.Option `protobuf:"bytes,3,rep,name=options" json:"options,omitempty"` - // A version string for this api. If specified, must have the form - // `major-version.minor-version`, as in `1.10`. If the minor version - // is omitted, it defaults to zero. If the entire version field is - // empty, the major version is derived from the package name, as - // outlined below. If the field is not empty, the version in the - // package name will be verified to be consistent with what is - // provided here. + // A version string for this interface. If specified, must have the form + // `major-version.minor-version`, as in `1.10`. If the minor version is + // omitted, it defaults to zero. If the entire version field is empty, the + // major version is derived from the package name, as outlined below. If the + // field is not empty, the version in the package name will be verified to be + // consistent with what is provided here. // // The versioning schema uses [semantic // versioning](http://semver.org) where the major version number @@ -57,17 +63,17 @@ type Api struct { // chosen based on the product plan. // // The major version is also reflected in the package name of the - // API, which must end in `v`, as in + // interface, which must end in `v`, as in // `google.feature.v1`. For major versions 0 and 1, the suffix can // be omitted. Zero major versions must only be used for - // experimental, none-GA apis. + // experimental, non-GA interfaces. // // Version string `protobuf:"bytes,4,opt,name=version" json:"version,omitempty"` // Source context for the protocol buffer service represented by this // message. SourceContext *google_protobuf.SourceContext `protobuf:"bytes,5,opt,name=source_context,json=sourceContext" json:"source_context,omitempty"` - // Included APIs. See [Mixin][]. + // Included interfaces. See [Mixin][]. Mixins []*Mixin `protobuf:"bytes,6,rep,name=mixins" json:"mixins,omitempty"` // The source syntax of the service. Syntax google_protobuf2.Syntax `protobuf:"varint,7,opt,name=syntax,enum=google.protobuf.Syntax" json:"syntax,omitempty"` @@ -127,7 +133,7 @@ func (m *Api) GetSyntax() google_protobuf2.Syntax { return google_protobuf2.Syntax_SYNTAX_PROTO2 } -// Method represents a method of an api. +// Method represents a method of an API interface. type Method struct { // The simple name of this method. Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` @@ -199,9 +205,9 @@ func (m *Method) GetSyntax() google_protobuf2.Syntax { return google_protobuf2.Syntax_SYNTAX_PROTO2 } -// Declares an API to be included in this API. The including API must -// redeclare all the methods from the included API, but documentation -// and options are inherited as follows: +// Declares an API Interface to be included in this interface. The including +// interface must redeclare all the methods from the included interface, but +// documentation and options are inherited as follows: // // - If after comment and whitespace stripping, the documentation // string of the redeclared method is empty, it will be inherited @@ -213,7 +219,8 @@ func (m *Method) GetSyntax() google_protobuf2.Syntax { // // - If an http annotation is inherited, the path pattern will be // modified as follows. Any version prefix will be replaced by the -// version of the including API plus the [root][] path if specified. +// version of the including interface plus the [root][] path if +// specified. // // Example of a simple mixin: // @@ -277,7 +284,7 @@ func (m *Method) GetSyntax() google_protobuf2.Syntax { // ... // } type Mixin struct { - // The fully qualified name of the API which is included. + // The fully qualified name of the interface which is included. Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` // If non-empty specifies a path under which inherited HTTP paths // are rooted. @@ -309,36 +316,35 @@ func init() { proto.RegisterType((*Mixin)(nil), "google.protobuf.Mixin") } -func init() { proto.RegisterFile("src/google/protobuf/api.proto", fileDescriptor0) } +func init() { proto.RegisterFile("google/protobuf/api.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 435 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x93, 0x4f, 0x8b, 0xd3, 0x40, - 0x18, 0xc6, 0x49, 0xd2, 0xa6, 0xeb, 0x2c, 0x76, 0x75, 0x04, 0x1d, 0x0a, 0x2e, 0x61, 0xf1, 0x10, - 0x5c, 0x4c, 0x70, 0x3d, 0x7a, 0x6a, 0x45, 0x7a, 0x10, 0x31, 0xa4, 0x8a, 0xe0, 0xa5, 0xa4, 0x71, - 0x8c, 0x03, 0xc9, 0xbc, 0xe3, 0xcc, 0x44, 0xdb, 0xaf, 0xe3, 0xd1, 0xa3, 0xdf, 0xc0, 0x6f, 0x26, - 0x99, 0x64, 0xfa, 0x27, 0xad, 0xe0, 0xde, 0xe6, 0x9d, 0xe7, 0xf7, 0x3e, 0x79, 0xdf, 0x67, 0x08, - 0x7a, 0xac, 0x64, 0x1e, 0x17, 0x00, 0x45, 0x49, 0x63, 0x21, 0x41, 0xc3, 0xaa, 0xfe, 0x12, 0x67, - 0x82, 0x45, 0xa6, 0xc0, 0x17, 0xad, 0x14, 0x59, 0x69, 0xf2, 0xa4, 0xcf, 0x2a, 0xa8, 0x65, 0x4e, - 0x97, 0x39, 0x70, 0x4d, 0xd7, 0xba, 0x05, 0x27, 0x93, 0x3e, 0xa5, 0x37, 0xa2, 0x33, 0xb9, 0xfa, - 0xe3, 0x22, 0x6f, 0x2a, 0x18, 0xc6, 0x68, 0xc0, 0xb3, 0x8a, 0x12, 0x27, 0x70, 0xc2, 0x3b, 0xa9, - 0x39, 0xe3, 0xe7, 0x68, 0x54, 0x51, 0xfd, 0x15, 0x3e, 0x2b, 0xe2, 0x06, 0x5e, 0x78, 0x7e, 0xf3, - 0x28, 0xea, 0x0d, 0x10, 0xbd, 0x35, 0x7a, 0x6a, 0xb9, 0xa6, 0x05, 0x84, 0x66, 0xc0, 0x15, 0xf1, - 0xfe, 0xd1, 0xf2, 0xce, 0xe8, 0xa9, 0xe5, 0x30, 0x41, 0xa3, 0xef, 0x54, 0x2a, 0x06, 0x9c, 0x0c, - 0xcc, 0xc7, 0x6d, 0x89, 0x5f, 0xa3, 0xf1, 0xe1, 0x3e, 0x64, 0x18, 0x38, 0xe1, 0xf9, 0xcd, 0xe5, - 0x91, 0xe7, 0xc2, 0x60, 0xaf, 0x5a, 0x2a, 0xbd, 0xab, 0xf6, 0x4b, 0x1c, 0x21, 0xbf, 0x62, 0x6b, - 0xc6, 0x15, 0xf1, 0xcd, 0x48, 0x0f, 0x8f, 0xb7, 0x68, 0xe4, 0xb4, 0xa3, 0x70, 0x8c, 0x7c, 0xb5, - 0xe1, 0x3a, 0x5b, 0x93, 0x51, 0xe0, 0x84, 0xe3, 0x13, 0x2b, 0x2c, 0x8c, 0x9c, 0x76, 0xd8, 0xd5, - 0x6f, 0x17, 0xf9, 0x6d, 0x10, 0x27, 0x63, 0x0c, 0xd1, 0x3d, 0x49, 0xbf, 0xd5, 0x54, 0xe9, 0x65, - 0x13, 0xfc, 0xb2, 0x96, 0x25, 0x71, 0x8d, 0x3e, 0xee, 0xee, 0xdf, 0x6f, 0x04, 0xfd, 0x20, 0x4b, - 0x7c, 0x8d, 0xee, 0x5b, 0x52, 0x69, 0x49, 0xb3, 0x8a, 0xf1, 0x82, 0x78, 0x81, 0x13, 0x9e, 0xa5, - 0xd6, 0x62, 0x61, 0xef, 0xf1, 0xd3, 0x06, 0x56, 0x02, 0xb8, 0xa2, 0x3b, 0xdf, 0x36, 0xc1, 0x0b, - 0x2b, 0x58, 0xe3, 0x67, 0x08, 0x6f, 0xd9, 0x9d, 0xf3, 0xd0, 0x38, 0x6f, 0x5d, 0x76, 0xd6, 0x7b, - 0xaf, 0xe8, 0xff, 0xe7, 0x2b, 0xde, 0x3a, 0xb4, 0x18, 0x0d, 0x4d, 0xec, 0x27, 0x23, 0xc3, 0x68, - 0x20, 0x01, 0x74, 0x17, 0x93, 0x39, 0xcf, 0x6a, 0xf4, 0x20, 0x87, 0xaa, 0x6f, 0x3b, 0x3b, 0x9b, - 0x0a, 0x96, 0x34, 0x45, 0xe2, 0x7c, 0xba, 0xee, 0xc4, 0x02, 0xca, 0x8c, 0x17, 0x11, 0xc8, 0x22, - 0x2e, 0x28, 0x37, 0xe8, 0xc1, 0xef, 0xf4, 0x32, 0x13, 0xec, 0xa7, 0xeb, 0xcd, 0x93, 0xd9, 0x2f, - 0xf7, 0x72, 0xde, 0xf6, 0x24, 0x76, 0xce, 0x8f, 0xb4, 0x2c, 0xdf, 0x70, 0xf8, 0xc1, 0x9b, 0xf0, - 0xd4, 0xca, 0x37, 0x8d, 0x2f, 0xfe, 0x06, 0x00, 0x00, 0xff, 0xff, 0xbc, 0x42, 0xe4, 0x4b, 0x9b, - 0x03, 0x00, 0x00, + // 432 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x93, 0xcf, 0x8e, 0xd3, 0x30, + 0x10, 0xc6, 0x95, 0xa4, 0x4d, 0x17, 0xaf, 0xe8, 0x82, 0x91, 0xc0, 0xf4, 0xb0, 0x8a, 0x56, 0x1c, + 0x22, 0x2a, 0x12, 0x51, 0x8e, 0x9c, 0x5a, 0x84, 0x7a, 0x40, 0x88, 0x28, 0x05, 0x21, 0x71, 0xa9, + 0xd2, 0x62, 0x82, 0xa5, 0xc4, 0x63, 0x6c, 0x07, 0xda, 0xd7, 0xe1, 0xc8, 0x91, 0x37, 0xe0, 0xcd, + 0x50, 0x9c, 0xb8, 0x7f, 0xd2, 0x22, 0xb1, 0x37, 0x8f, 0xbf, 0xdf, 0x7c, 0x99, 0xf9, 0xac, 0xa0, + 0xc7, 0x39, 0x40, 0x5e, 0xd0, 0x58, 0x48, 0xd0, 0xb0, 0xaa, 0xbe, 0xc4, 0x99, 0x60, 0x91, 0x29, + 0xf0, 0x55, 0x23, 0x45, 0x56, 0x1a, 0x3d, 0xe9, 0xb2, 0x0a, 0x2a, 0xb9, 0xa6, 0xcb, 0x35, 0x70, + 0x4d, 0x37, 0xba, 0x01, 0x47, 0xa3, 0x2e, 0xa5, 0xb7, 0xa2, 0x35, 0xb9, 0xf9, 0xe3, 0x22, 0x6f, + 0x2a, 0x18, 0xc6, 0xa8, 0xc7, 0xb3, 0x92, 0x12, 0x27, 0x70, 0xc2, 0x3b, 0xa9, 0x39, 0xe3, 0xe7, + 0x68, 0x50, 0x52, 0xfd, 0x15, 0x3e, 0x2b, 0xe2, 0x06, 0x5e, 0x78, 0x39, 0x79, 0x14, 0x75, 0x06, + 0x88, 0xde, 0x1a, 0x3d, 0xb5, 0x5c, 0xdd, 0x02, 0x42, 0x33, 0xe0, 0x8a, 0x78, 0xff, 0x68, 0x79, + 0x67, 0xf4, 0xd4, 0x72, 0x98, 0xa0, 0xc1, 0x77, 0x2a, 0x15, 0x03, 0x4e, 0x7a, 0xe6, 0xe3, 0xb6, + 0xc4, 0xaf, 0xd1, 0xf0, 0x78, 0x1f, 0xd2, 0x0f, 0x9c, 0xf0, 0x72, 0x72, 0x7d, 0xe2, 0xb9, 0x30, + 0xd8, 0xab, 0x86, 0x4a, 0xef, 0xaa, 0xc3, 0x12, 0x47, 0xc8, 0x2f, 0xd9, 0x86, 0x71, 0x45, 0x7c, + 0x33, 0xd2, 0xc3, 0xd3, 0x2d, 0x6a, 0x39, 0x6d, 0x29, 0x1c, 0x23, 0x5f, 0x6d, 0xb9, 0xce, 0x36, + 0x64, 0x10, 0x38, 0xe1, 0xf0, 0xcc, 0x0a, 0x0b, 0x23, 0xa7, 0x2d, 0x76, 0xf3, 0xdb, 0x45, 0x7e, + 0x13, 0xc4, 0xd9, 0x18, 0x43, 0x74, 0x4f, 0xd2, 0x6f, 0x15, 0x55, 0x7a, 0x59, 0x07, 0xbf, 0xac, + 0x64, 0x41, 0x5c, 0xa3, 0x0f, 0xdb, 0xfb, 0xf7, 0x5b, 0x41, 0x3f, 0xc8, 0x02, 0x8f, 0xd1, 0x7d, + 0x4b, 0x2a, 0x2d, 0x69, 0x56, 0x32, 0x9e, 0x13, 0x2f, 0x70, 0xc2, 0x8b, 0xd4, 0x5a, 0x2c, 0xec, + 0x3d, 0x7e, 0x5a, 0xc3, 0x4a, 0x00, 0x57, 0x74, 0xef, 0xdb, 0x24, 0x78, 0x65, 0x05, 0x6b, 0xfc, + 0x0c, 0xe1, 0x1d, 0xbb, 0x77, 0xee, 0x1b, 0xe7, 0x9d, 0xcb, 0xde, 0xfa, 0xe0, 0x15, 0xfd, 0xff, + 0x7c, 0xc5, 0x5b, 0x87, 0x16, 0xa3, 0xbe, 0x89, 0xfd, 0x6c, 0x64, 0x18, 0xf5, 0x24, 0x80, 0x6e, + 0x63, 0x32, 0xe7, 0x59, 0x85, 0x1e, 0xac, 0xa1, 0xec, 0xda, 0xce, 0x2e, 0xa6, 0x82, 0x25, 0x75, + 0x91, 0x38, 0x9f, 0xc6, 0xad, 0x98, 0x43, 0x91, 0xf1, 0x3c, 0x02, 0x99, 0xc7, 0x39, 0xe5, 0x06, + 0x3d, 0xfa, 0x9d, 0x5e, 0x66, 0x82, 0xfd, 0x74, 0xbd, 0x79, 0x32, 0xfb, 0xe5, 0x5e, 0xcf, 0x9b, + 0x9e, 0xc4, 0xce, 0xf9, 0x91, 0x16, 0xc5, 0x1b, 0x0e, 0x3f, 0x78, 0x1d, 0x9e, 0x5a, 0xf9, 0xa6, + 0xf1, 0xc5, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x07, 0x73, 0x11, 0x97, 0x03, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/protobuf/field_mask/field_mask.pb.go b/vendor/google.golang.org/genproto/protobuf/field_mask/field_mask.pb.go index 8330ee3..485bf00 100644 --- a/vendor/google.golang.org/genproto/protobuf/field_mask/field_mask.pb.go +++ b/vendor/google.golang.org/genproto/protobuf/field_mask/field_mask.pb.go @@ -1,12 +1,11 @@ -// Code generated by protoc-gen-go. -// source: src/google/protobuf/field_mask.proto -// DO NOT EDIT! +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/protobuf/field_mask.proto /* Package field_mask is a generated protocol buffer package. It is generated from these files: - src/google/protobuf/field_mask.proto + google/protobuf/field_mask.proto It has these top-level messages: FieldMask @@ -250,19 +249,19 @@ func init() { proto.RegisterType((*FieldMask)(nil), "google.protobuf.FieldMask") } -func init() { proto.RegisterFile("src/google/protobuf/field_mask.proto", fileDescriptor0) } +func init() { proto.RegisterFile("google/protobuf/field_mask.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 175 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x29, 0x2e, 0x4a, 0xd6, - 0x4f, 0xcf, 0xcf, 0x4f, 0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, - 0x4f, 0xcb, 0x4c, 0xcd, 0x49, 0x89, 0xcf, 0x4d, 0x2c, 0xce, 0xd6, 0x03, 0x8b, 0x09, 0xf1, 0x43, - 0x54, 0xe8, 0xc1, 0x54, 0x28, 0x29, 0x72, 0x71, 0xba, 0x81, 0x14, 0xf9, 0x26, 0x16, 0x67, 0x0b, - 0x89, 0x70, 0xb1, 0x16, 0x24, 0x96, 0x64, 0x14, 0x4b, 0x30, 0x2a, 0x30, 0x6b, 0x70, 0x06, 0x41, - 0x38, 0x4e, 0x9d, 0x8c, 0x5c, 0xc2, 0xc9, 0xf9, 0xb9, 0x7a, 0x68, 0x5a, 0x9d, 0xf8, 0xe0, 0x1a, - 0x03, 0x40, 0x42, 0x01, 0x8c, 0x51, 0x96, 0x50, 0x25, 0xe9, 0xf9, 0x39, 0x89, 0x79, 0xe9, 0x7a, - 0xf9, 0x45, 0xe9, 0xfa, 0xe9, 0xa9, 0x79, 0x60, 0x0d, 0xd8, 0xdc, 0x64, 0x8d, 0x60, 0x2e, 0x62, - 0x62, 0x76, 0x0f, 0x70, 0x5a, 0xc5, 0x24, 0xe7, 0x0e, 0x31, 0x21, 0x00, 0xaa, 0x5a, 0x2f, 0x3c, - 0x35, 0x27, 0xc7, 0x3b, 0x2f, 0xbf, 0x3c, 0x2f, 0xa4, 0xb2, 0x20, 0xb5, 0x38, 0x89, 0x0d, 0x6c, - 0x8c, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0xf0, 0xdc, 0x73, 0xcf, 0xee, 0x00, 0x00, 0x00, + // 171 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x48, 0xcf, 0xcf, 0x4f, + 0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x4f, 0xcb, 0x4c, 0xcd, + 0x49, 0x89, 0xcf, 0x4d, 0x2c, 0xce, 0xd6, 0x03, 0x8b, 0x09, 0xf1, 0x43, 0x54, 0xe8, 0xc1, 0x54, + 0x28, 0x29, 0x72, 0x71, 0xba, 0x81, 0x14, 0xf9, 0x26, 0x16, 0x67, 0x0b, 0x89, 0x70, 0xb1, 0x16, + 0x24, 0x96, 0x64, 0x14, 0x4b, 0x30, 0x2a, 0x30, 0x6b, 0x70, 0x06, 0x41, 0x38, 0x4e, 0x9d, 0x8c, + 0x5c, 0xc2, 0xc9, 0xf9, 0xb9, 0x7a, 0x68, 0x5a, 0x9d, 0xf8, 0xe0, 0x1a, 0x03, 0x40, 0x42, 0x01, + 0x8c, 0x51, 0x96, 0x50, 0x25, 0xe9, 0xf9, 0x39, 0x89, 0x79, 0xe9, 0x7a, 0xf9, 0x45, 0xe9, 0xfa, + 0xe9, 0xa9, 0x79, 0x60, 0x0d, 0xd8, 0xdc, 0x64, 0x8d, 0x60, 0x2e, 0x62, 0x62, 0x76, 0x0f, 0x70, + 0x5a, 0xc5, 0x24, 0xe7, 0x0e, 0x31, 0x21, 0x00, 0xaa, 0x5a, 0x2f, 0x3c, 0x35, 0x27, 0xc7, 0x3b, + 0x2f, 0xbf, 0x3c, 0x2f, 0xa4, 0xb2, 0x20, 0xb5, 0x38, 0x89, 0x0d, 0x6c, 0x8c, 0x31, 0x20, 0x00, + 0x00, 0xff, 0xff, 0x5a, 0xdb, 0x3a, 0xc0, 0xea, 0x00, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/protobuf/ptype/type.pb.go b/vendor/google.golang.org/genproto/protobuf/ptype/type.pb.go index 7f9033d..b9ad3f1 100644 --- a/vendor/google.golang.org/genproto/protobuf/ptype/type.pb.go +++ b/vendor/google.golang.org/genproto/protobuf/ptype/type.pb.go @@ -1,12 +1,11 @@ -// Code generated by protoc-gen-go. -// source: src/google/protobuf/type.proto -// DO NOT EDIT! +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/protobuf/type.proto /* Package ptype is a generated protocol buffer package. It is generated from these files: - src/google/protobuf/type.proto + google/protobuf/type.proto It has these top-level messages: Type @@ -481,59 +480,59 @@ func init() { proto.RegisterEnum("google.protobuf.Field_Cardinality", Field_Cardinality_name, Field_Cardinality_value) } -func init() { proto.RegisterFile("src/google/protobuf/type.proto", fileDescriptor0) } +func init() { proto.RegisterFile("google/protobuf/type.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 813 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0x4f, 0x8f, 0xda, 0x46, - 0x14, 0x8f, 0x8d, 0xf1, 0xe2, 0xc7, 0xc2, 0x4e, 0x26, 0x51, 0xe2, 0x6c, 0xa4, 0x2d, 0xa2, 0x3d, - 0xa0, 0x1c, 0x8c, 0x0a, 0xab, 0x55, 0xa5, 0x9e, 0x60, 0xf1, 0x52, 0xb4, 0xc4, 0x76, 0x07, 0xd3, - 0x64, 0x7b, 0x41, 0x5e, 0x98, 0x45, 0x24, 0x66, 0x8c, 0xb0, 0xdd, 0x2e, 0x87, 0x7e, 0x84, 0x7e, - 0x89, 0x1e, 0x7b, 0xee, 0x87, 0xe8, 0x47, 0xea, 0xad, 0xd5, 0x8c, 0xc1, 0x98, 0x3f, 0x95, 0xd2, - 0xe6, 0x82, 0x78, 0xbf, 0xf7, 0x7b, 0xff, 0x9f, 0xdf, 0xc0, 0x45, 0xb8, 0x1c, 0xd7, 0xa7, 0x41, - 0x30, 0xf5, 0x69, 0x7d, 0xb1, 0x0c, 0xa2, 0xe0, 0x3e, 0x7e, 0xa8, 0x47, 0xab, 0x05, 0x35, 0x84, - 0x84, 0xcf, 0x12, 0x9d, 0xb1, 0xd1, 0x9d, 0xbf, 0xda, 0x27, 0x7b, 0x6c, 0x95, 0x68, 0xcf, 0xbf, - 0xda, 0x57, 0x85, 0x41, 0xbc, 0x1c, 0xd3, 0xd1, 0x38, 0x60, 0x11, 0x7d, 0x8c, 0x12, 0x56, 0xf5, - 0x57, 0x19, 0x14, 0x77, 0xb5, 0xa0, 0x18, 0x83, 0xc2, 0xbc, 0x39, 0xd5, 0xa5, 0x8a, 0x54, 0xd3, - 0x88, 0xf8, 0x8f, 0x0d, 0x50, 0x1f, 0x66, 0xd4, 0x9f, 0x84, 0xba, 0x5c, 0xc9, 0xd5, 0x8a, 0x8d, - 0x17, 0xc6, 0x5e, 0x7c, 0xe3, 0x86, 0xab, 0xc9, 0x9a, 0x85, 0x5f, 0x80, 0x1a, 0x30, 0x1a, 0x3c, - 0x84, 0x7a, 0xae, 0x92, 0xab, 0x69, 0x64, 0x2d, 0xe1, 0xaf, 0xe1, 0x24, 0x58, 0x44, 0xb3, 0x80, - 0x85, 0xba, 0x22, 0x1c, 0xbd, 0x3c, 0x70, 0x64, 0x0b, 0x3d, 0xd9, 0xf0, 0xb0, 0x09, 0xe5, 0xdd, - 0x7c, 0xf5, 0x7c, 0x45, 0xaa, 0x15, 0x1b, 0x17, 0x07, 0x96, 0x03, 0x41, 0xbb, 0x4e, 0x58, 0xa4, - 0x14, 0x66, 0x45, 0x5c, 0x07, 0x35, 0x5c, 0xb1, 0xc8, 0x7b, 0xd4, 0xd5, 0x8a, 0x54, 0x2b, 0x1f, - 0x09, 0x3c, 0x10, 0x6a, 0xb2, 0xa6, 0x55, 0xff, 0x50, 0x21, 0x2f, 0x8a, 0xc2, 0x75, 0x50, 0x3e, - 0xce, 0xd8, 0x44, 0x34, 0xa4, 0xdc, 0x78, 0x7d, 0xbc, 0x74, 0xe3, 0x76, 0xc6, 0x26, 0x44, 0x10, - 0x71, 0x07, 0x8a, 0x63, 0x6f, 0x39, 0x99, 0x31, 0xcf, 0x9f, 0x45, 0x2b, 0x5d, 0x16, 0x76, 0xd5, - 0x7f, 0xb1, 0xbb, 0xde, 0x32, 0x49, 0xd6, 0x8c, 0xf7, 0x90, 0xc5, 0xf3, 0x7b, 0xba, 0xd4, 0x73, - 0x15, 0xa9, 0x96, 0x27, 0x6b, 0x29, 0x9d, 0x8f, 0x92, 0x99, 0xcf, 0x2b, 0x28, 0xf0, 0xe5, 0x18, - 0xc5, 0x4b, 0x5f, 0xd4, 0xa7, 0x91, 0x13, 0x2e, 0x0f, 0x97, 0x3e, 0xfe, 0x02, 0x8a, 0xa2, 0xf9, - 0xa3, 0x19, 0x9b, 0xd0, 0x47, 0xfd, 0x44, 0xf8, 0x02, 0x01, 0xf5, 0x38, 0xc2, 0xe3, 0x2c, 0xbc, - 0xf1, 0x47, 0x3a, 0xd1, 0x0b, 0x15, 0xa9, 0x56, 0x20, 0x6b, 0x29, 0x3b, 0x2b, 0xed, 0x13, 0x67, - 0xf5, 0x1a, 0xb4, 0x0f, 0x61, 0xc0, 0x46, 0x22, 0x3f, 0x10, 0x79, 0x14, 0x38, 0x60, 0xf1, 0x1c, - 0xbf, 0x84, 0xd2, 0x84, 0x3e, 0x78, 0xb1, 0x1f, 0x8d, 0x7e, 0xf2, 0xfc, 0x98, 0xea, 0x45, 0x41, - 0x38, 0x5d, 0x83, 0x3f, 0x70, 0xac, 0xfa, 0xa7, 0x0c, 0x0a, 0xef, 0x24, 0x46, 0x70, 0xea, 0xde, - 0x39, 0xe6, 0x68, 0x68, 0xdd, 0x5a, 0xf6, 0x3b, 0x0b, 0x3d, 0xc1, 0x67, 0x50, 0x14, 0x48, 0xc7, - 0x1e, 0xb6, 0xfb, 0x26, 0x92, 0x70, 0x19, 0x40, 0x00, 0x37, 0x7d, 0xbb, 0xe5, 0x22, 0x39, 0x95, - 0x7b, 0x96, 0x7b, 0x75, 0x89, 0x72, 0xa9, 0xc1, 0x30, 0x01, 0x94, 0x2c, 0xa1, 0xd9, 0x40, 0xf9, - 0x34, 0xc6, 0x4d, 0xef, 0xbd, 0xd9, 0xb9, 0xba, 0x44, 0xea, 0x2e, 0xd2, 0x6c, 0xa0, 0x13, 0x5c, - 0x02, 0x4d, 0x20, 0x6d, 0xdb, 0xee, 0xa3, 0x42, 0xea, 0x73, 0xe0, 0x92, 0x9e, 0xd5, 0x45, 0x5a, - 0xea, 0xb3, 0x4b, 0xec, 0xa1, 0x83, 0x20, 0xf5, 0xf0, 0xd6, 0x1c, 0x0c, 0x5a, 0x5d, 0x13, 0x15, - 0x53, 0x46, 0xfb, 0xce, 0x35, 0x07, 0xe8, 0x74, 0x27, 0xad, 0x66, 0x03, 0x95, 0xd2, 0x10, 0xa6, - 0x35, 0x7c, 0x8b, 0xca, 0xf8, 0x29, 0x94, 0x92, 0x10, 0x9b, 0x24, 0xce, 0xf6, 0xa0, 0xab, 0x4b, - 0x84, 0xb6, 0x89, 0x24, 0x5e, 0x9e, 0xee, 0x00, 0x57, 0x97, 0x08, 0x57, 0x23, 0x28, 0x66, 0x76, - 0x0b, 0xbf, 0x84, 0x67, 0xd7, 0x2d, 0xd2, 0xe9, 0x59, 0xad, 0x7e, 0xcf, 0xbd, 0xcb, 0xf4, 0x55, - 0x87, 0xe7, 0x59, 0x85, 0xed, 0xb8, 0x3d, 0xdb, 0x6a, 0xf5, 0x91, 0xb4, 0xaf, 0x21, 0xe6, 0xf7, - 0xc3, 0x1e, 0x31, 0x3b, 0x48, 0x3e, 0xd4, 0x38, 0x66, 0xcb, 0x35, 0x3b, 0x28, 0x57, 0xfd, 0x5b, - 0x02, 0xc5, 0x64, 0xf1, 0xfc, 0xe8, 0x19, 0xf9, 0x06, 0x34, 0xca, 0xe2, 0x79, 0x32, 0xfe, 0xe4, - 0x92, 0x9c, 0x1f, 0x2c, 0x15, 0xb7, 0x16, 0xcb, 0x40, 0xb6, 0xe4, 0xec, 0x32, 0xe6, 0xfe, 0xf7, - 0xe1, 0x50, 0x3e, 0xef, 0x70, 0xe4, 0x3f, 0xed, 0x70, 0x7c, 0x00, 0x2d, 0x2d, 0xe1, 0x68, 0x17, - 0xb6, 0x1f, 0xb6, 0xbc, 0xf3, 0x61, 0xff, 0xf7, 0x1a, 0xab, 0xdf, 0x81, 0x9a, 0x40, 0x47, 0x03, - 0xbd, 0x81, 0xfc, 0xa6, 0xd5, 0xbc, 0xf0, 0xe7, 0x07, 0xee, 0x5a, 0x6c, 0x45, 0x12, 0xca, 0x1b, - 0x03, 0xd4, 0xa4, 0x0e, 0xbe, 0x6c, 0x83, 0x3b, 0xcb, 0x6d, 0xbd, 0x1f, 0x39, 0xc4, 0x76, 0xed, - 0x06, 0x7a, 0xb2, 0x0f, 0x35, 0x91, 0xd4, 0xfe, 0x05, 0x9e, 0x8d, 0x83, 0xf9, 0xbe, 0xc7, 0xb6, - 0xc6, 0x9f, 0x10, 0x87, 0x4b, 0x8e, 0xf4, 0xe3, 0xfa, 0x01, 0x33, 0xa6, 0x81, 0xef, 0xb1, 0xa9, - 0x11, 0x2c, 0xa7, 0xf5, 0x29, 0x65, 0x82, 0xbb, 0x7d, 0x8c, 0x16, 0xfc, 0x50, 0x7d, 0x2b, 0x7e, - 0xff, 0x92, 0xa4, 0xdf, 0xe4, 0x5c, 0xd7, 0x69, 0xff, 0x2e, 0x5f, 0x74, 0x13, 0x53, 0x67, 0x93, - 0xea, 0x3b, 0xea, 0xfb, 0xb7, 0x2c, 0xf8, 0x99, 0xf1, 0x00, 0xe1, 0xbd, 0x2a, 0xec, 0x9b, 0xff, - 0x04, 0x00, 0x00, 0xff, 0xff, 0xe4, 0x0a, 0x14, 0x97, 0x28, 0x07, 0x00, 0x00, + // 810 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0xcd, 0x8e, 0xda, 0x56, + 0x14, 0x8e, 0x8d, 0xf1, 0xe0, 0xc3, 0xc0, 0xdc, 0xdc, 0x44, 0x89, 0x33, 0x91, 0x52, 0x44, 0xbb, + 0x40, 0x59, 0x80, 0x0a, 0xa3, 0x51, 0xa5, 0xae, 0x60, 0xf0, 0x50, 0x6b, 0x88, 0xed, 0x5e, 0x4c, + 0x93, 0xe9, 0x06, 0x79, 0xe0, 0x0e, 0x22, 0x31, 0xd7, 0x08, 0xdb, 0xed, 0xb0, 0xe8, 0x23, 0xf4, + 0x25, 0xba, 0xec, 0xba, 0x0f, 0xd1, 0x47, 0xea, 0xae, 0xd5, 0xbd, 0x06, 0x63, 0x7e, 0x2a, 0x4d, + 0x9b, 0xcd, 0x68, 0xce, 0xf7, 0x7d, 0xe7, 0xf7, 0x1e, 0x8e, 0xe1, 0x7c, 0x1a, 0x04, 0x53, 0x9f, + 0x36, 0x16, 0xcb, 0x20, 0x0a, 0xee, 0xe2, 0xfb, 0x46, 0xb4, 0x5a, 0xd0, 0xba, 0xb0, 0xf0, 0x59, + 0xc2, 0xd5, 0x37, 0xdc, 0xf9, 0xab, 0x7d, 0xb1, 0xc7, 0x56, 0x09, 0x7b, 0xfe, 0xd5, 0x3e, 0x15, + 0x06, 0xf1, 0x72, 0x4c, 0x47, 0xe3, 0x80, 0x45, 0xf4, 0x21, 0x4a, 0x54, 0xd5, 0x5f, 0x65, 0x50, + 0xdc, 0xd5, 0x82, 0x62, 0x0c, 0x0a, 0xf3, 0xe6, 0x54, 0x97, 0x2a, 0x52, 0x4d, 0x23, 0xe2, 0x7f, + 0x5c, 0x07, 0xf5, 0x7e, 0x46, 0xfd, 0x49, 0xa8, 0xcb, 0x95, 0x5c, 0xad, 0xd8, 0x7c, 0x51, 0xdf, + 0xcb, 0x5f, 0xbf, 0xe6, 0x34, 0x59, 0xab, 0xf0, 0x0b, 0x50, 0x03, 0x46, 0x83, 0xfb, 0x50, 0xcf, + 0x55, 0x72, 0x35, 0x8d, 0xac, 0x2d, 0xfc, 0x35, 0x9c, 0x04, 0x8b, 0x68, 0x16, 0xb0, 0x50, 0x57, + 0x44, 0xa0, 0x97, 0x07, 0x81, 0x6c, 0xc1, 0x93, 0x8d, 0x0e, 0x1b, 0x50, 0xde, 0xad, 0x57, 0xcf, + 0x57, 0xa4, 0x5a, 0xb1, 0xf9, 0xe6, 0xc0, 0x73, 0x20, 0x64, 0x57, 0x89, 0x8a, 0x94, 0xc2, 0xac, + 0x89, 0x1b, 0xa0, 0x86, 0x2b, 0x16, 0x79, 0x0f, 0xba, 0x5a, 0x91, 0x6a, 0xe5, 0x23, 0x89, 0x07, + 0x82, 0x26, 0x6b, 0x59, 0xf5, 0x0f, 0x15, 0xf2, 0xa2, 0x29, 0xdc, 0x00, 0xe5, 0xd3, 0x8c, 0x4d, + 0xc4, 0x40, 0xca, 0xcd, 0xd7, 0xc7, 0x5b, 0xaf, 0xdf, 0xcc, 0xd8, 0x84, 0x08, 0x21, 0xee, 0x42, + 0x71, 0xec, 0x2d, 0x27, 0x33, 0xe6, 0xf9, 0xb3, 0x68, 0xa5, 0xcb, 0xc2, 0xaf, 0xfa, 0x2f, 0x7e, + 0x57, 0x5b, 0x25, 0xc9, 0xba, 0xf1, 0x19, 0xb2, 0x78, 0x7e, 0x47, 0x97, 0x7a, 0xae, 0x22, 0xd5, + 0xf2, 0x64, 0x6d, 0xa5, 0xef, 0xa3, 0x64, 0xde, 0xe7, 0x15, 0x14, 0xf8, 0x72, 0x8c, 0xe2, 0xa5, + 0x2f, 0xfa, 0xd3, 0xc8, 0x09, 0xb7, 0x87, 0x4b, 0x1f, 0x7f, 0x01, 0x45, 0x31, 0xfc, 0xd1, 0x8c, + 0x4d, 0xe8, 0x83, 0x7e, 0x22, 0x62, 0x81, 0x80, 0x4c, 0x8e, 0xf0, 0x3c, 0x0b, 0x6f, 0xfc, 0x89, + 0x4e, 0xf4, 0x42, 0x45, 0xaa, 0x15, 0xc8, 0xda, 0xca, 0xbe, 0x95, 0xf6, 0xc8, 0xb7, 0x7a, 0x0d, + 0xda, 0xc7, 0x30, 0x60, 0x23, 0x51, 0x1f, 0x88, 0x3a, 0x0a, 0x1c, 0xb0, 0x78, 0x8d, 0x5f, 0x42, + 0x69, 0x42, 0xef, 0xbd, 0xd8, 0x8f, 0x46, 0x3f, 0x79, 0x7e, 0x4c, 0xf5, 0xa2, 0x10, 0x9c, 0xae, + 0xc1, 0x1f, 0x38, 0x56, 0xfd, 0x53, 0x06, 0x85, 0x4f, 0x12, 0x23, 0x38, 0x75, 0x6f, 0x1d, 0x63, + 0x34, 0xb4, 0x6e, 0x2c, 0xfb, 0xbd, 0x85, 0x9e, 0xe0, 0x33, 0x28, 0x0a, 0xa4, 0x6b, 0x0f, 0x3b, + 0x7d, 0x03, 0x49, 0xb8, 0x0c, 0x20, 0x80, 0xeb, 0xbe, 0xdd, 0x76, 0x91, 0x9c, 0xda, 0xa6, 0xe5, + 0x5e, 0x5e, 0xa0, 0x5c, 0xea, 0x30, 0x4c, 0x00, 0x25, 0x2b, 0x68, 0x35, 0x51, 0x3e, 0xcd, 0x71, + 0x6d, 0x7e, 0x30, 0xba, 0x97, 0x17, 0x48, 0xdd, 0x45, 0x5a, 0x4d, 0x74, 0x82, 0x4b, 0xa0, 0x09, + 0xa4, 0x63, 0xdb, 0x7d, 0x54, 0x48, 0x63, 0x0e, 0x5c, 0x62, 0x5a, 0x3d, 0xa4, 0xa5, 0x31, 0x7b, + 0xc4, 0x1e, 0x3a, 0x08, 0xd2, 0x08, 0xef, 0x8c, 0xc1, 0xa0, 0xdd, 0x33, 0x50, 0x31, 0x55, 0x74, + 0x6e, 0x5d, 0x63, 0x80, 0x4e, 0x77, 0xca, 0x6a, 0x35, 0x51, 0x29, 0x4d, 0x61, 0x58, 0xc3, 0x77, + 0xa8, 0x8c, 0x9f, 0x42, 0x29, 0x49, 0xb1, 0x29, 0xe2, 0x6c, 0x0f, 0xba, 0xbc, 0x40, 0x68, 0x5b, + 0x48, 0x12, 0xe5, 0xe9, 0x0e, 0x70, 0x79, 0x81, 0x70, 0x35, 0x82, 0x62, 0x66, 0xb7, 0xf0, 0x4b, + 0x78, 0x76, 0xd5, 0x26, 0x5d, 0xd3, 0x6a, 0xf7, 0x4d, 0xf7, 0x36, 0x33, 0x57, 0x1d, 0x9e, 0x67, + 0x09, 0xdb, 0x71, 0x4d, 0xdb, 0x6a, 0xf7, 0x91, 0xb4, 0xcf, 0x10, 0xe3, 0xfb, 0xa1, 0x49, 0x8c, + 0x2e, 0x92, 0x0f, 0x19, 0xc7, 0x68, 0xbb, 0x46, 0x17, 0xe5, 0xaa, 0x7f, 0x4b, 0xa0, 0x18, 0x2c, + 0x9e, 0x1f, 0x3d, 0x23, 0xdf, 0x80, 0x46, 0x59, 0x3c, 0x4f, 0x9e, 0x3f, 0xb9, 0x24, 0xe7, 0x07, + 0x4b, 0xc5, 0xbd, 0xc5, 0x32, 0x90, 0xad, 0x38, 0xbb, 0x8c, 0xb9, 0xff, 0x7d, 0x38, 0x94, 0xcf, + 0x3b, 0x1c, 0xf9, 0xc7, 0x1d, 0x8e, 0x8f, 0xa0, 0xa5, 0x2d, 0x1c, 0x9d, 0xc2, 0xf6, 0x87, 0x2d, + 0xef, 0xfc, 0xb0, 0xff, 0x7b, 0x8f, 0xd5, 0xef, 0x40, 0x4d, 0xa0, 0xa3, 0x89, 0xde, 0x42, 0x7e, + 0x33, 0x6a, 0xde, 0xf8, 0xf3, 0x83, 0x70, 0x6d, 0xb6, 0x22, 0x89, 0xe4, 0x6d, 0x1d, 0xd4, 0xa4, + 0x0f, 0xbe, 0x6c, 0x83, 0x5b, 0xcb, 0x6d, 0x7f, 0x18, 0x39, 0xc4, 0x76, 0xed, 0x26, 0x7a, 0xb2, + 0x0f, 0xb5, 0x90, 0xd4, 0xf9, 0x05, 0x9e, 0x8d, 0x83, 0xf9, 0x7e, 0xc4, 0x8e, 0xc6, 0x3f, 0x21, + 0x0e, 0xb7, 0x1c, 0xe9, 0xc7, 0xc6, 0x9a, 0x9d, 0x06, 0xbe, 0xc7, 0xa6, 0xf5, 0x60, 0x39, 0x6d, + 0x4c, 0x29, 0x13, 0xda, 0xed, 0xc7, 0x68, 0xc1, 0x0f, 0xd5, 0xb7, 0xe2, 0xef, 0x5f, 0x92, 0xf4, + 0x9b, 0x9c, 0xeb, 0x39, 0x9d, 0xdf, 0xe5, 0x37, 0xbd, 0xc4, 0xd5, 0xd9, 0x94, 0xfa, 0x9e, 0xfa, + 0xfe, 0x0d, 0x0b, 0x7e, 0x66, 0x3c, 0x41, 0x78, 0xa7, 0x0a, 0xff, 0xd6, 0x3f, 0x01, 0x00, 0x00, + 0xff, 0xff, 0x6d, 0x2b, 0xc0, 0xd8, 0x24, 0x07, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/protobuf/source_context/source_context.pb.go b/vendor/google.golang.org/genproto/protobuf/source_context/source_context.pb.go index 49b7014..0cedee0 100644 --- a/vendor/google.golang.org/genproto/protobuf/source_context/source_context.pb.go +++ b/vendor/google.golang.org/genproto/protobuf/source_context/source_context.pb.go @@ -1,12 +1,11 @@ -// Code generated by protoc-gen-go. -// source: src/google/protobuf/source_context.proto -// DO NOT EDIT! +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/protobuf/source_context.proto /* Package source_context is a generated protocol buffer package. It is generated from these files: - src/google/protobuf/source_context.proto + google/protobuf/source_context.proto It has these top-level messages: SourceContext @@ -52,20 +51,20 @@ func init() { proto.RegisterType((*SourceContext)(nil), "google.protobuf.SourceContext") } -func init() { proto.RegisterFile("src/google/protobuf/source_context.proto", fileDescriptor0) } +func init() { proto.RegisterFile("google/protobuf/source_context.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 188 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x28, 0x2e, 0x4a, 0xd6, - 0x4f, 0xcf, 0xcf, 0x4f, 0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, - 0x2f, 0xce, 0x2f, 0x2d, 0x4a, 0x4e, 0x8d, 0x4f, 0xce, 0xcf, 0x2b, 0x49, 0xad, 0x28, 0xd1, 0x03, - 0x8b, 0x0b, 0xf1, 0x43, 0x54, 0xe9, 0xc1, 0x54, 0x29, 0xe9, 0x70, 0xf1, 0x06, 0x83, 0x15, 0x3a, - 0x43, 0xd4, 0x09, 0x49, 0x73, 0x71, 0xa6, 0x65, 0xe6, 0xa4, 0xc6, 0xe7, 0x25, 0xe6, 0xa6, 0x4a, - 0x30, 0x2a, 0x30, 0x6a, 0x70, 0x06, 0x71, 0x80, 0x04, 0xfc, 0x12, 0x73, 0x53, 0x9d, 0xa6, 0x32, - 0x72, 0x09, 0x27, 0xe7, 0xe7, 0xea, 0xa1, 0x99, 0xe2, 0x24, 0x84, 0x62, 0x46, 0x00, 0x48, 0x38, - 0x80, 0x31, 0xca, 0x11, 0xaa, 0x2c, 0x3d, 0x3f, 0x27, 0x31, 0x2f, 0x5d, 0x2f, 0xbf, 0x28, 0x5d, - 0x3f, 0x3d, 0x35, 0x0f, 0xac, 0x09, 0x97, 0x33, 0xad, 0x51, 0xb9, 0x8b, 0x98, 0x98, 0xdd, 0x03, - 0x9c, 0x56, 0x31, 0xc9, 0xb9, 0x43, 0x4c, 0x0a, 0x80, 0xea, 0xd2, 0x0b, 0x4f, 0xcd, 0xc9, 0xf1, - 0xce, 0xcb, 0x2f, 0xcf, 0x0b, 0xa9, 0x2c, 0x48, 0x2d, 0x4e, 0x62, 0x03, 0x1b, 0x67, 0x0c, 0x08, - 0x00, 0x00, 0xff, 0xff, 0xc7, 0xbc, 0xab, 0x7f, 0x09, 0x01, 0x00, 0x00, + // 184 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x49, 0xcf, 0xcf, 0x4f, + 0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x2f, 0xce, 0x2f, 0x2d, + 0x4a, 0x4e, 0x8d, 0x4f, 0xce, 0xcf, 0x2b, 0x49, 0xad, 0x28, 0xd1, 0x03, 0x8b, 0x0b, 0xf1, 0x43, + 0x54, 0xe9, 0xc1, 0x54, 0x29, 0xe9, 0x70, 0xf1, 0x06, 0x83, 0x15, 0x3a, 0x43, 0xd4, 0x09, 0x49, + 0x73, 0x71, 0xa6, 0x65, 0xe6, 0xa4, 0xc6, 0xe7, 0x25, 0xe6, 0xa6, 0x4a, 0x30, 0x2a, 0x30, 0x6a, + 0x70, 0x06, 0x71, 0x80, 0x04, 0xfc, 0x12, 0x73, 0x53, 0x9d, 0xa6, 0x32, 0x72, 0x09, 0x27, 0xe7, + 0xe7, 0xea, 0xa1, 0x99, 0xe2, 0x24, 0x84, 0x62, 0x46, 0x00, 0x48, 0x38, 0x80, 0x31, 0xca, 0x11, + 0xaa, 0x2c, 0x3d, 0x3f, 0x27, 0x31, 0x2f, 0x5d, 0x2f, 0xbf, 0x28, 0x5d, 0x3f, 0x3d, 0x35, 0x0f, + 0xac, 0x09, 0x97, 0x33, 0xad, 0x51, 0xb9, 0x8b, 0x98, 0x98, 0xdd, 0x03, 0x9c, 0x56, 0x31, 0xc9, + 0xb9, 0x43, 0x4c, 0x0a, 0x80, 0xea, 0xd2, 0x0b, 0x4f, 0xcd, 0xc9, 0xf1, 0xce, 0xcb, 0x2f, 0xcf, + 0x0b, 0xa9, 0x2c, 0x48, 0x2d, 0x4e, 0x62, 0x03, 0x1b, 0x67, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, + 0x5c, 0xbd, 0xa4, 0x22, 0x05, 0x01, 0x00, 0x00, } diff --git a/vendor/google.golang.org/genproto/regen.sh b/vendor/google.golang.org/genproto/regen.sh index 58c900c..8d9c731 100755 --- a/vendor/google.golang.org/genproto/regen.sh +++ b/vendor/google.golang.org/genproto/regen.sh @@ -52,7 +52,7 @@ if [ -z "$PROTOBUF" ]; then # The protoc include directory is actually the "src" directory of the repo. protodir="$proto_repo_dir/src" else - protodir="$PROTOBUF" + protodir="$PROTOBUF/src" fi if [ -z "$GOOGLEAPIS" ]; then @@ -75,4 +75,3 @@ echo 1>&2 "Checking that the libraries build..." go build -v ./... echo 1>&2 "All done!" - diff --git a/vendor/google.golang.org/grpc/.github/ISSUE_TEMPLATE b/vendor/google.golang.org/grpc/.github/ISSUE_TEMPLATE new file mode 100644 index 0000000..642f85a --- /dev/null +++ b/vendor/google.golang.org/grpc/.github/ISSUE_TEMPLATE @@ -0,0 +1,14 @@ +Please answer these questions before submitting your issue. + +### What version of gRPC are you using? + +### What version of Go are you using (`go version`)? + +### What operating system (Linux, Windows, …) and version? + +### What did you do? +If possible, provide a recipe for reproducing the error. + +### What did you expect to see? + +### What did you see instead? diff --git a/vendor/google.golang.org/grpc/.travis.yml b/vendor/google.golang.org/grpc/.travis.yml index 9032f8d..65ae29e 100644 --- a/vendor/google.golang.org/grpc/.travis.yml +++ b/vendor/google.golang.org/grpc/.travis.yml @@ -4,17 +4,21 @@ go: - 1.6.x - 1.7.x - 1.8.x + - 1.9.x + - 1.10.x + +matrix: + include: + - go: 1.10.x + env: RUN386=1 go_import_path: google.golang.org/grpc before_install: - - if [[ $TRAVIS_GO_VERSION = 1.8* ]]; then go get -u github.com/golang/lint/golint honnef.co/go/tools/cmd/staticcheck; fi - - go get -u golang.org/x/tools/cmd/goimports github.com/axw/gocov/gocov github.com/mattn/goveralls golang.org/x/tools/cmd/cover + - if [[ "$TRAVIS_GO_VERSION" = 1.10* && "$GOARCH" != "386" ]]; then ./vet.sh -install || exit 1; fi script: - - '! gofmt -s -d -l . 2>&1 | read' - - '! goimports -l . | read' - - 'if [[ $TRAVIS_GO_VERSION = 1.8* ]]; then ! golint ./... | grep -vE "(_mock|_string|\.pb)\.go:"; fi' - - 'if [[ $TRAVIS_GO_VERSION = 1.8* ]]; then ! go tool vet -all . 2>&1 | grep -vF .pb.go:; fi' # https://github.com/golang/protobuf/issues/214 - - make test testrace - - 'if [[ $TRAVIS_GO_VERSION = 1.8* ]]; then staticcheck -ignore google.golang.org/grpc/transport/transport_test.go:SA2002 ./...; fi' # TODO(menghanl): fix these + - if [[ -n "$RUN386" ]]; then export GOARCH=386; fi + - if [[ "$TRAVIS_GO_VERSION" = 1.10* && "$GOARCH" != "386" ]]; then ./vet.sh || exit 1; fi + - make test || exit 1 + - if [[ "$GOARCH" != "386" ]]; then make testrace; fi diff --git a/vendor/google.golang.org/grpc/AUTHORS b/vendor/google.golang.org/grpc/AUTHORS new file mode 100644 index 0000000..e491a9e --- /dev/null +++ b/vendor/google.golang.org/grpc/AUTHORS @@ -0,0 +1 @@ +Google Inc. diff --git a/vendor/google.golang.org/grpc/CONTRIBUTING.md b/vendor/google.golang.org/grpc/CONTRIBUTING.md index 36cd6f7..8ec6c95 100644 --- a/vendor/google.golang.org/grpc/CONTRIBUTING.md +++ b/vendor/google.golang.org/grpc/CONTRIBUTING.md @@ -1,46 +1,32 @@ # How to contribute -We definitely welcome patches and contribution to grpc! Here are some guidelines -and information about how to do so. +We definitely welcome your patches and contributions to gRPC! -## Sending patches - -### Getting started - -1. Check out the code: - - $ go get google.golang.org/grpc - $ cd $GOPATH/src/google.golang.org/grpc - -1. Create a fork of the grpc-go repository. -1. Add your fork as a remote: - - $ git remote add fork git@github.com:$YOURGITHUBUSERNAME/grpc-go.git - -1. Make changes, commit them. -1. Run the test suite: - - $ make test - -1. Push your changes to your fork: - - $ git push fork ... - -1. Open a pull request. +If you are new to github, please start by reading [Pull Request howto](https://help.github.com/articles/about-pull-requests/) ## Legal requirements In order to protect both you and ourselves, you will need to sign the -[Contributor License Agreement](https://cla.developers.google.com/clas). - -## Filing Issues -When filing an issue, make sure to answer these five questions: - -1. What version of Go are you using (`go version`)? -2. What operating system and processor architecture are you using? -3. What did you do? -4. What did you expect to see? -5. What did you see instead? - -### Contributing code -Unless otherwise noted, the Go source files are distributed under the BSD-style license found in the LICENSE file. +[Contributor License Agreement](https://identity.linuxfoundation.org/projects/cncf). + +## Guidelines for Pull Requests +How to get your contributions merged smoothly and quickly. + +- Create **small PRs** that are narrowly focused on **addressing a single concern**. We often times receive PRs that are trying to fix several things at a time, but only one fix is considered acceptable, nothing gets merged and both author's & review's time is wasted. Create more PRs to address different concerns and everyone will be happy. + +- For speculative changes, consider opening an issue and discussing it first. If you are suggesting a behavioral or API change, consider starting with a [gRFC proposal](https://github.com/grpc/proposal). + +- Provide a good **PR description** as a record of **what** change is being made and **why** it was made. Link to a github issue if it exists. + +- Don't fix code style and formatting unless you are already changing that line to address an issue. PRs with irrelevant changes won't be merged. If you do want to fix formatting or style, do that in a separate PR. + +- Unless your PR is trivial, you should expect there will be reviewer comments that you'll need to address before merging. We expect you to be reasonably responsive to those comments, otherwise the PR will be closed after 2-3 weeks of inactivity. + +- Maintain **clean commit history** and use **meaningful commit messages**. PRs with messy commit history are difficult to review and won't be merged. Use `rebase -i upstream/master` to curate your commit history and/or to bring in latest changes from master (but avoid rebasing in the middle of a code review). + +- Keep your PR up to date with upstream/master (if there are merge conflicts, we can't really merge your change). + +- **All tests need to be passing** before your change can be merged. We recommend you **run tests locally** before creating your PR to catch breakages early on. + +- Exceptions to the rules can be made if there's a compelling reason for doing so. + diff --git a/vendor/google.golang.org/grpc/Documentation/compression.md b/vendor/google.golang.org/grpc/Documentation/compression.md new file mode 100644 index 0000000..204f880 --- /dev/null +++ b/vendor/google.golang.org/grpc/Documentation/compression.md @@ -0,0 +1,80 @@ +# Compression + +The preferred method for configuring message compression on both clients and +servers is to use +[`encoding.RegisterCompressor`](https://godoc.org/google.golang.org/grpc/encoding#RegisterCompressor) +to register an implementation of a compression algorithm. See +`grpc/encoding/gzip/gzip.go` for an example of how to implement one. + +Once a compressor has been registered on the client-side, RPCs may be sent using +it via the +[`UseCompressor`](https://godoc.org/google.golang.org/grpc#UseCompressor) +`CallOption`. Remember that `CallOption`s may be turned into defaults for all +calls from a `ClientConn` by using the +[`WithDefaultCallOptions`](https://godoc.org/google.golang.org/grpc#WithDefaultCallOptions) +`DialOption`. If `UseCompressor` is used and the corresponding compressor has +not been installed, an `Internal` error will be returned to the application +before the RPC is sent. + +Server-side, registered compressors will be used automatically to decode request +messages and encode the responses. Servers currently always respond using the +same compression method specified by the client. If the corresponding +compressor has not been registered, an `Unimplemented` status will be returned +to the client. + +## Deprecated API + +There is a deprecated API for setting compression as well. It is not +recommended for use. However, if you were previously using it, the following +section may be helpful in understanding how it works in combination with the new +API. + +### Client-Side + +There are two legacy functions and one new function to configure compression: + +```go +func WithCompressor(grpc.Compressor) DialOption {} +func WithDecompressor(grpc.Decompressor) DialOption {} +func UseCompressor(name) CallOption {} +``` + +For outgoing requests, the following rules are applied in order: +1. If `UseCompressor` is used, messages will be compressed using the compressor + named. + * If the compressor named is not registered, an Internal error is returned + back to the client before sending the RPC. + * If UseCompressor("identity"), no compressor will be used, but "identity" + will be sent in the header to the server. +1. If `WithCompressor` is used, messages will be compressed using that + compressor implementation. +1. Otherwise, outbound messages will be uncompressed. + +For incoming responses, the following rules are applied in order: +1. If `WithDecompressor` is used and it matches the message's encoding, it will + be used. +1. If a registered compressor matches the response's encoding, it will be used. +1. Otherwise, the stream will be closed and an `Unimplemented` status error will + be returned to the application. + +### Server-Side + +There are two legacy functions to configure compression: +```go +func RPCCompressor(grpc.Compressor) ServerOption {} +func RPCDecompressor(grpc.Decompressor) ServerOption {} +``` + +For incoming requests, the following rules are applied in order: +1. If `RPCDecompressor` is used and that decompressor matches the request's + encoding: it will be used. +1. If a registered compressor matches the request's encoding, it will be used. +1. Otherwise, an `Unimplemented` status will be returned to the client. + +For outgoing responses, the following rules are applied in order: +1. If `RPCCompressor` is used, that compressor will be used to compress all + response messages. +1. If compression was used for the incoming request and a registered compressor + supports it, that same compression method will be used for the outgoing + response. +1. Otherwise, no compression will be used for the outgoing response. diff --git a/vendor/google.golang.org/grpc/Documentation/encoding.md b/vendor/google.golang.org/grpc/Documentation/encoding.md new file mode 100644 index 0000000..3143660 --- /dev/null +++ b/vendor/google.golang.org/grpc/Documentation/encoding.md @@ -0,0 +1,146 @@ +# Encoding + +The gRPC API for sending and receiving is based upon *messages*. However, +messages cannot be transmitted directly over a network; they must first be +converted into *bytes*. This document describes how gRPC-Go converts messages +into bytes and vice-versa for the purposes of network transmission. + +## Codecs (Serialization and Deserialization) + +A `Codec` contains code to serialize a message into a byte slice (`Marshal`) and +deserialize a byte slice back into a message (`Unmarshal`). `Codec`s are +registered by name into a global registry maintained in the `encoding` package. + +### Implementing a `Codec` + +A typical `Codec` will be implemented in its own package with an `init` function +that registers itself, and is imported anonymously. For example: + +```go +package proto + +import "google.golang.org/grpc/encoding" + +func init() { + encoding.RegisterCodec(protoCodec{}) +} + +// ... implementation of protoCodec ... +``` + +For an example, gRPC's implementation of the `proto` codec can be found in +[`encoding/proto`](https://godoc.org/google.golang.org/grpc/encoding/proto). + +### Using a `Codec` + +By default, gRPC registers and uses the "proto" codec, so it is not necessary to +do this in your own code to send and receive proto messages. To use another +`Codec` from a client or server: + +```go +package myclient + +import _ "path/to/another/codec" +``` + +`Codec`s, by definition, must be symmetric, so the same desired `Codec` should +be registered in both client and server binaries. + +On the client-side, to specify a `Codec` to use for message transmission, the +`CallOption` `CallContentSubtype` should be used as follows: + +```go + response, err := myclient.MyCall(ctx, request, grpc.CallContentSubtype("mycodec")) +``` + +As a reminder, all `CallOption`s may be converted into `DialOption`s that become +the default for all RPCs sent through a client using `grpc.WithDefaultCallOptions`: + +```go + myclient := grpc.Dial(ctx, target, grpc.WithDefaultCallOptions(grpc.CallContentSubtype("mycodec"))) +``` + +When specified in either of these ways, messages will be encoded using this +codec and sent along with headers indicating the codec (`content-type` set to +`application/grpc+`). + +On the server-side, using a `Codec` is as simple as registering it into the +global registry (i.e. `import`ing it). If a message is encoded with the content +sub-type supported by a registered `Codec`, it will be used automatically for +decoding the request and encoding the response. Otherwise, for +backward-compatibility reasons, gRPC will attempt to use the "proto" codec. In +an upcoming change (tracked in [this +issue](https://github.com/grpc/grpc-go/issues/1824)), such requests will be +rejected with status code `Unimplemented` instead. + +## Compressors (Compression and Decompression) + +Sometimes, the resulting serialization of a message is not space-efficient, and +it may be beneficial to compress this byte stream before transmitting it over +the network. To facilitate this operation, gRPC supports a mechanism for +performing compression and decompression. + +A `Compressor` contains code to compress and decompress by wrapping `io.Writer`s +and `io.Reader`s, respectively. (The form of `Compress` and `Decompress` were +chosen to most closely match Go's standard package +[implementations](https://golang.org/pkg/compress/) of compressors. Like +`Codec`s, `Compressor`s are registered by name into a global registry maintained +in the `encoding` package. + +### Implementing a `Compressor` + +A typical `Compressor` will be implemented in its own package with an `init` +function that registers itself, and is imported anonymously. For example: + +```go +package gzip + +import "google.golang.org/grpc/encoding" + +func init() { + encoding.RegisterCompressor(compressor{}) +} + +// ... implementation of compressor ... +``` + +An implementation of a `gzip` compressor can be found in +[`encoding/gzip`](https://godoc.org/google.golang.org/grpc/encoding/gzip). + +### Using a `Compressor` + +By default, gRPC does not register or use any compressors. To use a +`Compressor` from a client or server: + +```go +package myclient + +import _ "google.golang.org/grpc/encoding/gzip" +``` + +`Compressor`s, by definition, must be symmetric, so the same desired +`Compressor` should be registered in both client and server binaries. + +On the client-side, to specify a `Compressor` to use for message transmission, +the `CallOption` `UseCompressor` should be used as follows: + +```go + response, err := myclient.MyCall(ctx, request, grpc.UseCompressor("gzip")) +``` + +As a reminder, all `CallOption`s may be converted into `DialOption`s that become +the default for all RPCs sent through a client using `grpc.WithDefaultCallOptions`: + +```go + myclient := grpc.Dial(ctx, target, grpc.WithDefaultCallOptions(grpc.UseCompresor("gzip"))) +``` + +When specified in either of these ways, messages will be compressed using this +compressor and sent along with headers indicating the compressor +(`content-coding` set to ``). + +On the server-side, using a `Compressor` is as simple as registering it into the +global registry (i.e. `import`ing it). If a message is compressed with the +content coding supported by a registered `Compressor`, it will be used +automatically for decompressing the request and compressing the response. +Otherwise, the request will be rejected with status code `Unimplemented`. diff --git a/vendor/google.golang.org/grpc/Documentation/grpc-auth-support.md b/vendor/google.golang.org/grpc/Documentation/grpc-auth-support.md index 248d272..1b6b14e 100644 --- a/vendor/google.golang.org/grpc/Documentation/grpc-auth-support.md +++ b/vendor/google.golang.org/grpc/Documentation/grpc-auth-support.md @@ -1,6 +1,6 @@ # Authentication -As outlined in the [gRPC authentication guide](http://www.grpc.io/docs/guides/auth.html) there are a number of different mechanisms for asserting identity between an client and server. We'll present some code-samples here demonstrating how to provide TLS support encryption and identity assertions as well as passing OAuth2 tokens to services that support it. +As outlined in the [gRPC authentication guide](https://grpc.io/docs/guides/auth.html) there are a number of different mechanisms for asserting identity between an client and server. We'll present some code-samples here demonstrating how to provide TLS support encryption and identity assertions as well as passing OAuth2 tokens to services that support it. # Enabling TLS on a gRPC client diff --git a/vendor/google.golang.org/grpc/Documentation/grpc-metadata.md b/vendor/google.golang.org/grpc/Documentation/grpc-metadata.md index c264352..971c469 100644 --- a/vendor/google.golang.org/grpc/Documentation/grpc-metadata.md +++ b/vendor/google.golang.org/grpc/Documentation/grpc-metadata.md @@ -7,12 +7,12 @@ This doc shows how to send and receive metadata in gRPC-go. Four kinds of service method: -- [Unary RPC](http://www.grpc.io/docs/guides/concepts.html#unary-rpc) -- [Server streaming RPC](http://www.grpc.io/docs/guides/concepts.html#server-streaming-rpc) -- [Client streaming RPC](http://www.grpc.io/docs/guides/concepts.html#client-streaming-rpc) -- [Bidirectional streaming RPC](http://www.grpc.io/docs/guides/concepts.html#bidirectional-streaming-rpc) +- [Unary RPC](https://grpc.io/docs/guides/concepts.html#unary-rpc) +- [Server streaming RPC](https://grpc.io/docs/guides/concepts.html#server-streaming-rpc) +- [Client streaming RPC](https://grpc.io/docs/guides/concepts.html#client-streaming-rpc) +- [Bidirectional streaming RPC](https://grpc.io/docs/guides/concepts.html#bidirectional-streaming-rpc) -And concept of [metadata](http://www.grpc.io/docs/guides/concepts.html#metadata). +And concept of [metadata](https://grpc.io/docs/guides/concepts.html#metadata). ## Constructing metadata @@ -82,13 +82,16 @@ func (s *server) SomeRPC(ctx context.Context, in *pb.SomeRequest) (*pb.SomeRespo ### Sending metadata -To send metadata to server, the client can wrap the metadata into a context using `NewContext`, and make the RPC with this context: +There are two ways to send metadata to the server. The recommended way is to append kv pairs to the context using +`AppendToOutgoingContext`. This can be used with or without existing metadata on the context. When there is no prior +metadata, metadata is added; when metadata already exists on the context, kv pairs are merged in. ```go -md := metadata.Pairs("key", "val") +// create a new context with some metadata +ctx := metadata.AppendToOutgoingContext(ctx, "k1", "v1", "k1", "v2", "k2", "v3") -// create a new context with this metadata -ctx := metadata.NewOutgoingContext(context.Background(), md) +// later, add some more metadata to the context (e.g. in an interceptor) +ctx := metadata.AppendToOutgoingContext(ctx, "k3", "v4") // make unary RPC response, err := client.SomeRPC(ctx, someRequest) @@ -97,7 +100,27 @@ response, err := client.SomeRPC(ctx, someRequest) stream, err := client.SomeStreamingRPC(ctx) ``` -To read this back from the context on the client (e.g. in an interceptor) before the RPC is sent, use `FromOutgoingContext`. +Alternatively, metadata may be attached to the context using `NewOutgoingContext`. However, this +replaces any existing metadata in the context, so care must be taken to preserve the existing +metadata if desired. This is slower than using `AppendToOutgoingContext`. An example of this +is below: + +```go +// create a new context with some metadata +md := metadata.Pairs("k1", "v1", "k1", "v2", "k2", "v3") +ctx := metadata.NewOutgoingContext(context.Background(), md) + +// later, add some more metadata to the context (e.g. in an interceptor) +md, _ := metadata.FromOutgoingContext(ctx) +newMD := metadata.Pairs("k3", "v3") +ctx = metadata.NewContext(ctx, metadata.Join(metadata.New(send), newMD)) + +// make unary RPC +response, err := client.SomeRPC(ctx, someRequest) + +// or make streaming RPC +stream, err := client.SomeStreamingRPC(ctx) +``` ### Receiving metadata diff --git a/vendor/google.golang.org/grpc/Documentation/rpc-errors.md b/vendor/google.golang.org/grpc/Documentation/rpc-errors.md new file mode 100644 index 0000000..669d197 --- /dev/null +++ b/vendor/google.golang.org/grpc/Documentation/rpc-errors.md @@ -0,0 +1,68 @@ +# RPC Errors + +All service method handlers should return `nil` or errors from the +`status.Status` type. Clients have direct access to the errors. + +Upon encountering an error, a gRPC server method handler should create a +`status.Status`. In typical usage, one would use [status.New][new-status] +passing in an appropriate [codes.Code][code] as well as a description of the +error to produce a `status.Status`. Calling [status.Err][status-err] converts +the `status.Status` type into an `error`. As a convenience method, there is also +[status.Error][status-error] which obviates the conversion step. Compare: + +``` +st := status.New(codes.NotFound, "some description") +err := st.Err() + +// vs. + +err := status.Error(codes.NotFound, "some description") +``` + +## Adding additional details to errors + +In some cases, it may be necessary to add details for a particular error on the +server side. The [status.WithDetails][with-details] method exists for this +purpose. Clients may then read those details by first converting the plain +`error` type back to a [status.Status][status] and then using +[status.Details][details]. + +## Example + +The [example][example] demonstrates the API discussed above and shows how to add +information about rate limits to the error message using `status.Status`. + +To run the example, first start the server: + +``` +$ go run examples/rpc_errors/server/main.go +``` + +In a separate sesssion, run the client: + +``` +$ go run examples/rpc_errors/client/main.go +``` + +On the first run of the client, all is well: + +``` +2018/03/12 19:39:33 Greeting: Hello world +``` + +Upon running the client a second time, the client exceeds the rate limit and +receives an error with details: + +``` +2018/03/19 16:42:01 Quota failure: violations: +exit status 1 +``` + +[status]: https://godoc.org/google.golang.org/grpc/status#Status +[new-status]: https://godoc.org/google.golang.org/grpc/status#New +[code]: https://godoc.org/google.golang.org/grpc/codes#Code +[with-details]: https://godoc.org/google.golang.org/grpc/status#Status.WithDetails +[details]: https://godoc.org/google.golang.org/grpc/status#Status.Details +[status-err]: https://godoc.org/google.golang.org/grpc/status#Status.Err +[status-error]: https://godoc.org/google.golang.org/grpc/status#Error +[example]: https://github.com/grpc/grpc-go/blob/master/examples/rpc_errors diff --git a/vendor/google.golang.org/grpc/Documentation/versioning.md b/vendor/google.golang.org/grpc/Documentation/versioning.md new file mode 100644 index 0000000..03e868c --- /dev/null +++ b/vendor/google.golang.org/grpc/Documentation/versioning.md @@ -0,0 +1,34 @@ +# Versioning and Releases + +Note: This document references terminology defined at http://semver.org. + +## Release Frequency + +Regular MINOR releases of gRPC-Go are performed every six weeks. Patch releases +to the previous two MINOR releases may be performed on demand or if serious +security problems are discovered. + +## Versioning Policy + +The gRPC-Go versioning policy follows the Semantic Versioning 2.0.0 +specification, with the following exceptions: + +- A MINOR version will not _necessarily_ add new functionality. + +- MINOR releases will not break backward compatibility, except in the following +circumstances: + + - An API was marked as EXPERIMENTAL upon its introduction. + - An API was marked as DEPRECATED in the initial MAJOR release. + - An API is inherently flawed and cannot provide correct or secure behavior. + + In these cases, APIs MAY be changed or removed without a MAJOR release. +Otherwise, backward compatibility will be preserved by MINOR releases. + + For an API marked as DEPRECATED, an alternative will be available (if +appropriate) for at least three months prior to its removal. + +## Release History + +Please see our release history on GitHub: +https://github.com/grpc/grpc-go/releases diff --git a/vendor/google.golang.org/grpc/LICENSE b/vendor/google.golang.org/grpc/LICENSE index f4988b4..d645695 100644 --- a/vendor/google.golang.org/grpc/LICENSE +++ b/vendor/google.golang.org/grpc/LICENSE @@ -1,28 +1,202 @@ -Copyright 2014, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + 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/google.golang.org/grpc/Makefile b/vendor/google.golang.org/grpc/Makefile index 03bb01f..c445343 100644 --- a/vendor/google.golang.org/grpc/Makefile +++ b/vendor/google.golang.org/grpc/Makefile @@ -20,24 +20,17 @@ proto: echo "error: protoc not installed" >&2; \ exit 1; \ fi - go get -u -v github.com/golang/protobuf/protoc-gen-go - # use $$dir as the root for all proto files in the same directory - for dir in $$(git ls-files '*.proto' | xargs -n1 dirname | uniq); do \ - protoc -I $$dir --go_out=plugins=grpc:$$dir $$dir/*.proto; \ - done + go generate google.golang.org/grpc/... test: testdeps - go test -v -cpu 1,4 google.golang.org/grpc/... + go test -cpu 1,4 -timeout 5m google.golang.org/grpc/... testrace: testdeps - go test -v -race -cpu 1,4 google.golang.org/grpc/... + go test -race -cpu 1,4 -timeout 7m google.golang.org/grpc/... clean: go clean -i google.golang.org/grpc/... -coverage: testdeps - ./coverage.sh --coveralls - .PHONY: \ all \ deps \ diff --git a/vendor/google.golang.org/grpc/PATENTS b/vendor/google.golang.org/grpc/PATENTS deleted file mode 100644 index 69b4795..0000000 --- a/vendor/google.golang.org/grpc/PATENTS +++ /dev/null @@ -1,22 +0,0 @@ -Additional IP Rights Grant (Patents) - -"This implementation" means the copyrightable works distributed by -Google as part of the gRPC project. - -Google 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, -transfer and otherwise run, modify and propagate the contents of this -implementation of gRPC, where such license applies only to those patent -claims, both currently owned or controlled by Google and acquired in -the future, licensable by Google that are necessarily infringed by this -implementation of gRPC. This grant does not include claims that would be -infringed only as a consequence of further modification of this -implementation. If you or your agent or exclusive licensee institute or -order or agree to the institution of patent litigation against any -entity (including a cross-claim or counterclaim in a lawsuit) alleging -that this implementation of gRPC or any code incorporated within this -implementation of gRPC constitutes direct or contributory patent -infringement, or inducement of patent infringement, then any patent -rights granted to you under this License for this implementation of gRPC -shall terminate as of the date such litigation is filed. diff --git a/vendor/google.golang.org/grpc/README.md b/vendor/google.golang.org/grpc/README.md index c1e43c7..789adfd 100644 --- a/vendor/google.golang.org/grpc/README.md +++ b/vendor/google.golang.org/grpc/README.md @@ -1,8 +1,8 @@ # gRPC-Go -[![Build Status](https://travis-ci.org/grpc/grpc-go.svg)](https://travis-ci.org/grpc/grpc-go) [![GoDoc](https://godoc.org/google.golang.org/grpc?status.svg)](https://godoc.org/google.golang.org/grpc) +[![Build Status](https://travis-ci.org/grpc/grpc-go.svg)](https://travis-ci.org/grpc/grpc-go) [![GoDoc](https://godoc.org/google.golang.org/grpc?status.svg)](https://godoc.org/google.golang.org/grpc) [![GoReportCard](https://goreportcard.com/badge/grpc/grpc-go)](https://goreportcard.com/report/github.com/grpc/grpc-go) -The Go implementation of [gRPC](http://www.grpc.io/): A high performance, open source, general RPC framework that puts mobile and HTTP/2 first. For more information see the [gRPC Quick Start](http://www.grpc.io/docs/) guide. +The Go implementation of [gRPC](https://grpc.io/): A high performance, open source, general RPC framework that puts mobile and HTTP/2 first. For more information see the [gRPC Quick Start: Go](https://grpc.io/docs/quickstart/go.html) guide. Installation ------------ @@ -10,13 +10,13 @@ Installation To install this package, you need to install Go and setup your Go workspace on your computer. The simplest way to install the library is to run: ``` -$ go get google.golang.org/grpc +$ go get -u google.golang.org/grpc ``` Prerequisites ------------- -This requires Go 1.6 or later. +This requires Go 1.6 or later. Go 1.7 will be required soon. Constraints ----------- diff --git a/vendor/google.golang.org/grpc/backoff.go b/vendor/google.golang.org/grpc/backoff.go index c99024e..c40facc 100644 --- a/vendor/google.golang.org/grpc/backoff.go +++ b/vendor/google.golang.org/grpc/backoff.go @@ -1,3 +1,21 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + package grpc import ( @@ -7,14 +25,12 @@ import ( // DefaultBackoffConfig uses values specified for backoff in // https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md. -var ( - DefaultBackoffConfig = BackoffConfig{ - MaxDelay: 120 * time.Second, - baseDelay: 1.0 * time.Second, - factor: 1.6, - jitter: 0.2, - } -) +var DefaultBackoffConfig = BackoffConfig{ + MaxDelay: 120 * time.Second, + baseDelay: 1.0 * time.Second, + factor: 1.6, + jitter: 0.2, +} // backoffStrategy defines the methodology for backing off after a grpc // connection failure. diff --git a/vendor/google.golang.org/grpc/backoff_test.go b/vendor/google.golang.org/grpc/backoff_test.go index bfca7b1..37e8e3f 100644 --- a/vendor/google.golang.org/grpc/backoff_test.go +++ b/vendor/google.golang.org/grpc/backoff_test.go @@ -1,3 +1,21 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + package grpc import "testing" diff --git a/vendor/google.golang.org/grpc/balancer.go b/vendor/google.golang.org/grpc/balancer.go index 9af4ee7..300da6c 100644 --- a/vendor/google.golang.org/grpc/balancer.go +++ b/vendor/google.golang.org/grpc/balancer.go @@ -1,33 +1,18 @@ /* * - * Copyright 2016, Google Inc. - * All rights reserved. + * Copyright 2016 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -43,6 +28,7 @@ import ( "google.golang.org/grpc/credentials" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/naming" + "google.golang.org/grpc/status" ) // Address represents a server the client connects to. @@ -172,7 +158,7 @@ type roundRobin struct { func (rr *roundRobin) watchAddrUpdates() error { updates, err := rr.w.Next() if err != nil { - grpclog.Printf("grpc: the naming watcher stops working due to %v.\n", err) + grpclog.Warningf("grpc: the naming watcher stops working due to %v.", err) return err } rr.mu.Lock() @@ -188,7 +174,7 @@ func (rr *roundRobin) watchAddrUpdates() error { for _, v := range rr.addrs { if addr == v.addr { exist = true - grpclog.Println("grpc: The name resolver wanted to add an existing address: ", addr) + grpclog.Infoln("grpc: The name resolver wanted to add an existing address: ", addr) break } } @@ -205,7 +191,7 @@ func (rr *roundRobin) watchAddrUpdates() error { } } default: - grpclog.Println("Unknown update.Op ", update.Op) + grpclog.Errorln("Unknown update.Op ", update.Op) } } // Make a copy of rr.addrs and write it onto rr.addrCh so that gRPC internals gets notified. @@ -216,6 +202,10 @@ func (rr *roundRobin) watchAddrUpdates() error { if rr.done { return ErrClientConnClosing } + select { + case <-rr.addrCh: + default: + } rr.addrCh <- open return nil } @@ -238,7 +228,7 @@ func (rr *roundRobin) Start(target string, config BalancerConfig) error { return err } rr.w = w - rr.addrCh = make(chan []Address) + rr.addrCh = make(chan []Address, 1) go func() { for { if err := rr.watchAddrUpdates(); err != nil { @@ -321,7 +311,7 @@ func (rr *roundRobin) Get(ctx context.Context, opts BalancerGetOptions) (addr Ad if !opts.BlockingWait { if len(rr.addrs) == 0 { rr.mu.Unlock() - err = Errorf(codes.Unavailable, "there is no address available") + err = status.Errorf(codes.Unavailable, "there is no address available") return } // Returns the next addr on rr.addrs for failfast RPCs. @@ -406,3 +396,14 @@ func (rr *roundRobin) Close() error { } return nil } + +// pickFirst is used to test multi-addresses in one addrConn in which all addresses share the same addrConn. +// It is a wrapper around roundRobin balancer. The logic of all methods works fine because balancer.Get() +// returns the only address Up by resetTransport(). +type pickFirst struct { + *roundRobin +} + +func pickFirstBalancerV1(r naming.Resolver) Balancer { + return &pickFirst{&roundRobin{r: r}} +} diff --git a/vendor/google.golang.org/grpc/balancer/balancer.go b/vendor/google.golang.org/grpc/balancer/balancer.go new file mode 100644 index 0000000..219a294 --- /dev/null +++ b/vendor/google.golang.org/grpc/balancer/balancer.go @@ -0,0 +1,223 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Package balancer defines APIs for load balancing in gRPC. +// All APIs in this package are experimental. +package balancer + +import ( + "errors" + "net" + "strings" + + "golang.org/x/net/context" + "google.golang.org/grpc/connectivity" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/resolver" +) + +var ( + // m is a map from name to balancer builder. + m = make(map[string]Builder) +) + +// Register registers the balancer builder to the balancer map. +// b.Name (lowercased) will be used as the name registered with +// this builder. +func Register(b Builder) { + m[strings.ToLower(b.Name())] = b +} + +// Get returns the resolver builder registered with the given name. +// Note that the compare is done in a case-insenstive fashion. +// If no builder is register with the name, nil will be returned. +func Get(name string) Builder { + if b, ok := m[strings.ToLower(name)]; ok { + return b + } + return nil +} + +// SubConn represents a gRPC sub connection. +// Each sub connection contains a list of addresses. gRPC will +// try to connect to them (in sequence), and stop trying the +// remainder once one connection is successful. +// +// The reconnect backoff will be applied on the list, not a single address. +// For example, try_on_all_addresses -> backoff -> try_on_all_addresses. +// +// All SubConns start in IDLE, and will not try to connect. To trigger +// the connecting, Balancers must call Connect. +// When the connection encounters an error, it will reconnect immediately. +// When the connection becomes IDLE, it will not reconnect unless Connect is +// called. +// +// This interface is to be implemented by gRPC. Users should not need a +// brand new implementation of this interface. For the situations like +// testing, the new implementation should embed this interface. This allows +// gRPC to add new methods to this interface. +type SubConn interface { + // UpdateAddresses updates the addresses used in this SubConn. + // gRPC checks if currently-connected address is still in the new list. + // If it's in the list, the connection will be kept. + // If it's not in the list, the connection will gracefully closed, and + // a new connection will be created. + // + // This will trigger a state transition for the SubConn. + UpdateAddresses([]resolver.Address) + // Connect starts the connecting for this SubConn. + Connect() +} + +// NewSubConnOptions contains options to create new SubConn. +type NewSubConnOptions struct{} + +// ClientConn represents a gRPC ClientConn. +// +// This interface is to be implemented by gRPC. Users should not need a +// brand new implementation of this interface. For the situations like +// testing, the new implementation should embed this interface. This allows +// gRPC to add new methods to this interface. +type ClientConn interface { + // NewSubConn is called by balancer to create a new SubConn. + // It doesn't block and wait for the connections to be established. + // Behaviors of the SubConn can be controlled by options. + NewSubConn([]resolver.Address, NewSubConnOptions) (SubConn, error) + // RemoveSubConn removes the SubConn from ClientConn. + // The SubConn will be shutdown. + RemoveSubConn(SubConn) + + // UpdateBalancerState is called by balancer to nofity gRPC that some internal + // state in balancer has changed. + // + // gRPC will update the connectivity state of the ClientConn, and will call pick + // on the new picker to pick new SubConn. + UpdateBalancerState(s connectivity.State, p Picker) + + // ResolveNow is called by balancer to notify gRPC to do a name resolving. + ResolveNow(resolver.ResolveNowOption) + + // Target returns the dial target for this ClientConn. + Target() string +} + +// BuildOptions contains additional information for Build. +type BuildOptions struct { + // DialCreds is the transport credential the Balancer implementation can + // use to dial to a remote load balancer server. The Balancer implementations + // can ignore this if it does not need to talk to another party securely. + DialCreds credentials.TransportCredentials + // Dialer is the custom dialer the Balancer implementation can use to dial + // to a remote load balancer server. The Balancer implementations + // can ignore this if it doesn't need to talk to remote balancer. + Dialer func(context.Context, string) (net.Conn, error) +} + +// Builder creates a balancer. +type Builder interface { + // Build creates a new balancer with the ClientConn. + Build(cc ClientConn, opts BuildOptions) Balancer + // Name returns the name of balancers built by this builder. + // It will be used to pick balancers (for example in service config). + Name() string +} + +// PickOptions contains addition information for the Pick operation. +type PickOptions struct{} + +// DoneInfo contains additional information for done. +type DoneInfo struct { + // Err is the rpc error the RPC finished with. It could be nil. + Err error + // BytesSent indicates if any bytes have been sent to the server. + BytesSent bool + // BytesReceived indicates if any byte has been received from the server. + BytesReceived bool +} + +var ( + // ErrNoSubConnAvailable indicates no SubConn is available for pick(). + // gRPC will block the RPC until a new picker is available via UpdateBalancerState(). + ErrNoSubConnAvailable = errors.New("no SubConn is available") + // ErrTransientFailure indicates all SubConns are in TransientFailure. + // WaitForReady RPCs will block, non-WaitForReady RPCs will fail. + ErrTransientFailure = errors.New("all SubConns are in TransientFailure") +) + +// Picker is used by gRPC to pick a SubConn to send an RPC. +// Balancer is expected to generate a new picker from its snapshot everytime its +// internal state has changed. +// +// The pickers used by gRPC can be updated by ClientConn.UpdateBalancerState(). +type Picker interface { + // Pick returns the SubConn to be used to send the RPC. + // The returned SubConn must be one returned by NewSubConn(). + // + // This functions is expected to return: + // - a SubConn that is known to be READY; + // - ErrNoSubConnAvailable if no SubConn is available, but progress is being + // made (for example, some SubConn is in CONNECTING mode); + // - other errors if no active connecting is happening (for example, all SubConn + // are in TRANSIENT_FAILURE mode). + // + // If a SubConn is returned: + // - If it is READY, gRPC will send the RPC on it; + // - If it is not ready, or becomes not ready after it's returned, gRPC will block + // until UpdateBalancerState() is called and will call pick on the new picker. + // + // If the returned error is not nil: + // - If the error is ErrNoSubConnAvailable, gRPC will block until UpdateBalancerState() + // - If the error is ErrTransientFailure: + // - If the RPC is wait-for-ready, gRPC will block until UpdateBalancerState() + // is called to pick again; + // - Otherwise, RPC will fail with unavailable error. + // - Else (error is other non-nil error): + // - The RPC will fail with unavailable error. + // + // The returned done() function will be called once the rpc has finished, with the + // final status of that RPC. + // done may be nil if balancer doesn't care about the RPC status. + Pick(ctx context.Context, opts PickOptions) (conn SubConn, done func(DoneInfo), err error) +} + +// Balancer takes input from gRPC, manages SubConns, and collects and aggregates +// the connectivity states. +// +// It also generates and updates the Picker used by gRPC to pick SubConns for RPCs. +// +// HandleSubConnectionStateChange, HandleResolvedAddrs and Close are guaranteed +// to be called synchronously from the same goroutine. +// There's no guarantee on picker.Pick, it may be called anytime. +type Balancer interface { + // HandleSubConnStateChange is called by gRPC when the connectivity state + // of sc has changed. + // Balancer is expected to aggregate all the state of SubConn and report + // that back to gRPC. + // Balancer should also generate and update Pickers when its internal state has + // been changed by the new state. + HandleSubConnStateChange(sc SubConn, state connectivity.State) + // HandleResolvedAddrs is called by gRPC to send updated resolved addresses to + // balancers. + // Balancer can create new SubConn or remove SubConn with the addresses. + // An empty address slice and a non-nil error will be passed if the resolver returns + // non-nil error to gRPC. + HandleResolvedAddrs([]resolver.Address, error) + // Close closes the balancer. The balancer is not required to call + // ClientConn.RemoveSubConn for its existing SubConns. + Close() +} diff --git a/vendor/google.golang.org/grpc/balancer/base/balancer.go b/vendor/google.golang.org/grpc/balancer/base/balancer.go new file mode 100644 index 0000000..1e962b7 --- /dev/null +++ b/vendor/google.golang.org/grpc/balancer/base/balancer.go @@ -0,0 +1,209 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package base + +import ( + "golang.org/x/net/context" + "google.golang.org/grpc/balancer" + "google.golang.org/grpc/connectivity" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/resolver" +) + +type baseBuilder struct { + name string + pickerBuilder PickerBuilder +} + +func (bb *baseBuilder) Build(cc balancer.ClientConn, opt balancer.BuildOptions) balancer.Balancer { + return &baseBalancer{ + cc: cc, + pickerBuilder: bb.pickerBuilder, + + subConns: make(map[resolver.Address]balancer.SubConn), + scStates: make(map[balancer.SubConn]connectivity.State), + csEvltr: &connectivityStateEvaluator{}, + // Initialize picker to a picker that always return + // ErrNoSubConnAvailable, because when state of a SubConn changes, we + // may call UpdateBalancerState with this picker. + picker: NewErrPicker(balancer.ErrNoSubConnAvailable), + } +} + +func (bb *baseBuilder) Name() string { + return bb.name +} + +type baseBalancer struct { + cc balancer.ClientConn + pickerBuilder PickerBuilder + + csEvltr *connectivityStateEvaluator + state connectivity.State + + subConns map[resolver.Address]balancer.SubConn + scStates map[balancer.SubConn]connectivity.State + picker balancer.Picker +} + +func (b *baseBalancer) HandleResolvedAddrs(addrs []resolver.Address, err error) { + if err != nil { + grpclog.Infof("base.baseBalancer: HandleResolvedAddrs called with error %v", err) + return + } + grpclog.Infoln("base.baseBalancer: got new resolved addresses: ", addrs) + // addrsSet is the set converted from addrs, it's used for quick lookup of an address. + addrsSet := make(map[resolver.Address]struct{}) + for _, a := range addrs { + addrsSet[a] = struct{}{} + if _, ok := b.subConns[a]; !ok { + // a is a new address (not existing in b.subConns). + sc, err := b.cc.NewSubConn([]resolver.Address{a}, balancer.NewSubConnOptions{}) + if err != nil { + grpclog.Warningf("base.baseBalancer: failed to create new SubConn: %v", err) + continue + } + b.subConns[a] = sc + b.scStates[sc] = connectivity.Idle + sc.Connect() + } + } + for a, sc := range b.subConns { + // a was removed by resolver. + if _, ok := addrsSet[a]; !ok { + b.cc.RemoveSubConn(sc) + delete(b.subConns, a) + // Keep the state of this sc in b.scStates until sc's state becomes Shutdown. + // The entry will be deleted in HandleSubConnStateChange. + } + } +} + +// regeneratePicker takes a snapshot of the balancer, and generates a picker +// from it. The picker is +// - errPicker with ErrTransientFailure if the balancer is in TransientFailure, +// - built by the pickerBuilder with all READY SubConns otherwise. +func (b *baseBalancer) regeneratePicker() { + if b.state == connectivity.TransientFailure { + b.picker = NewErrPicker(balancer.ErrTransientFailure) + return + } + readySCs := make(map[resolver.Address]balancer.SubConn) + + // Filter out all ready SCs from full subConn map. + for addr, sc := range b.subConns { + if st, ok := b.scStates[sc]; ok && st == connectivity.Ready { + readySCs[addr] = sc + } + } + b.picker = b.pickerBuilder.Build(readySCs) +} + +func (b *baseBalancer) HandleSubConnStateChange(sc balancer.SubConn, s connectivity.State) { + grpclog.Infof("base.baseBalancer: handle SubConn state change: %p, %v", sc, s) + oldS, ok := b.scStates[sc] + if !ok { + grpclog.Infof("base.baseBalancer: got state changes for an unknown SubConn: %p, %v", sc, s) + return + } + b.scStates[sc] = s + switch s { + case connectivity.Idle: + sc.Connect() + case connectivity.Shutdown: + // When an address was removed by resolver, b called RemoveSubConn but + // kept the sc's state in scStates. Remove state for this sc here. + delete(b.scStates, sc) + } + + oldAggrState := b.state + b.state = b.csEvltr.recordTransition(oldS, s) + + // Regenerate picker when one of the following happens: + // - this sc became ready from not-ready + // - this sc became not-ready from ready + // - the aggregated state of balancer became TransientFailure from non-TransientFailure + // - the aggregated state of balancer became non-TransientFailure from TransientFailure + if (s == connectivity.Ready) != (oldS == connectivity.Ready) || + (b.state == connectivity.TransientFailure) != (oldAggrState == connectivity.TransientFailure) { + b.regeneratePicker() + } + + b.cc.UpdateBalancerState(b.state, b.picker) + return +} + +// Close is a nop because base balancer doesn't have internal state to clean up, +// and it doesn't need to call RemoveSubConn for the SubConns. +func (b *baseBalancer) Close() { +} + +// NewErrPicker returns a picker that always returns err on Pick(). +func NewErrPicker(err error) balancer.Picker { + return &errPicker{err: err} +} + +type errPicker struct { + err error // Pick() always returns this err. +} + +func (p *errPicker) Pick(ctx context.Context, opts balancer.PickOptions) (balancer.SubConn, func(balancer.DoneInfo), error) { + return nil, nil, p.err +} + +// connectivityStateEvaluator gets updated by addrConns when their +// states transition, based on which it evaluates the state of +// ClientConn. +type connectivityStateEvaluator struct { + numReady uint64 // Number of addrConns in ready state. + numConnecting uint64 // Number of addrConns in connecting state. + numTransientFailure uint64 // Number of addrConns in transientFailure. +} + +// recordTransition records state change happening in every subConn and based on +// that it evaluates what aggregated state should be. +// It can only transition between Ready, Connecting and TransientFailure. Other states, +// Idle and Shutdown are transitioned into by ClientConn; in the beginning of the connection +// before any subConn is created ClientConn is in idle state. In the end when ClientConn +// closes it is in Shutdown state. +// +// recordTransition should only be called synchronously from the same goroutine. +func (cse *connectivityStateEvaluator) recordTransition(oldState, newState connectivity.State) connectivity.State { + // Update counters. + for idx, state := range []connectivity.State{oldState, newState} { + updateVal := 2*uint64(idx) - 1 // -1 for oldState and +1 for new. + switch state { + case connectivity.Ready: + cse.numReady += updateVal + case connectivity.Connecting: + cse.numConnecting += updateVal + case connectivity.TransientFailure: + cse.numTransientFailure += updateVal + } + } + + // Evaluate. + if cse.numReady > 0 { + return connectivity.Ready + } + if cse.numConnecting > 0 { + return connectivity.Connecting + } + return connectivity.TransientFailure +} diff --git a/vendor/google.golang.org/grpc/balancer/base/base.go b/vendor/google.golang.org/grpc/balancer/base/base.go new file mode 100644 index 0000000..012ace2 --- /dev/null +++ b/vendor/google.golang.org/grpc/balancer/base/base.go @@ -0,0 +1,52 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Package base defines a balancer base that can be used to build balancers with +// different picking algorithms. +// +// The base balancer creates a new SubConn for each resolved address. The +// provided picker will only be notified about READY SubConns. +// +// This package is the base of round_robin balancer, its purpose is to be used +// to build round_robin like balancers with complex picking algorithms. +// Balancers with more complicated logic should try to implement a balancer +// builder from scratch. +// +// All APIs in this package are experimental. +package base + +import ( + "google.golang.org/grpc/balancer" + "google.golang.org/grpc/resolver" +) + +// PickerBuilder creates balancer.Picker. +type PickerBuilder interface { + // Build takes a slice of ready SubConns, and returns a picker that will be + // used by gRPC to pick a SubConn. + Build(readySCs map[resolver.Address]balancer.SubConn) balancer.Picker +} + +// NewBalancerBuilder returns a balancer builder. The balancers +// built by this builder will use the picker builder to build pickers. +func NewBalancerBuilder(name string, pb PickerBuilder) balancer.Builder { + return &baseBuilder{ + name: name, + pickerBuilder: pb, + } +} diff --git a/vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin.go b/vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin.go new file mode 100644 index 0000000..2eda0a1 --- /dev/null +++ b/vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin.go @@ -0,0 +1,79 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Package roundrobin defines a roundrobin balancer. Roundrobin balancer is +// installed as one of the default balancers in gRPC, users don't need to +// explicitly install this balancer. +package roundrobin + +import ( + "sync" + + "golang.org/x/net/context" + "google.golang.org/grpc/balancer" + "google.golang.org/grpc/balancer/base" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/resolver" +) + +// Name is the name of round_robin balancer. +const Name = "round_robin" + +// newBuilder creates a new roundrobin balancer builder. +func newBuilder() balancer.Builder { + return base.NewBalancerBuilder(Name, &rrPickerBuilder{}) +} + +func init() { + balancer.Register(newBuilder()) +} + +type rrPickerBuilder struct{} + +func (*rrPickerBuilder) Build(readySCs map[resolver.Address]balancer.SubConn) balancer.Picker { + grpclog.Infof("roundrobinPicker: newPicker called with readySCs: %v", readySCs) + var scs []balancer.SubConn + for _, sc := range readySCs { + scs = append(scs, sc) + } + return &rrPicker{ + subConns: scs, + } +} + +type rrPicker struct { + // subConns is the snapshot of the roundrobin balancer when this picker was + // created. The slice is immutable. Each Get() will do a round robin + // selection from it and return the selected SubConn. + subConns []balancer.SubConn + + mu sync.Mutex + next int +} + +func (p *rrPicker) Pick(ctx context.Context, opts balancer.PickOptions) (balancer.SubConn, func(balancer.DoneInfo), error) { + if len(p.subConns) <= 0 { + return nil, nil, balancer.ErrNoSubConnAvailable + } + + p.mu.Lock() + sc := p.subConns[p.next] + p.next = (p.next + 1) % len(p.subConns) + p.mu.Unlock() + return sc, nil, nil +} diff --git a/vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin_test.go b/vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin_test.go new file mode 100644 index 0000000..59cac4b --- /dev/null +++ b/vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin_test.go @@ -0,0 +1,477 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package roundrobin_test + +import ( + "fmt" + "net" + "sync" + "testing" + "time" + + "golang.org/x/net/context" + "google.golang.org/grpc" + "google.golang.org/grpc/balancer/roundrobin" + "google.golang.org/grpc/codes" + _ "google.golang.org/grpc/grpclog/glogger" + "google.golang.org/grpc/peer" + "google.golang.org/grpc/resolver" + "google.golang.org/grpc/resolver/manual" + "google.golang.org/grpc/status" + testpb "google.golang.org/grpc/test/grpc_testing" + "google.golang.org/grpc/test/leakcheck" +) + +type testServer struct { + testpb.TestServiceServer +} + +func (s *testServer) EmptyCall(ctx context.Context, in *testpb.Empty) (*testpb.Empty, error) { + return &testpb.Empty{}, nil +} + +func (s *testServer) FullDuplexCall(stream testpb.TestService_FullDuplexCallServer) error { + return nil +} + +type test struct { + servers []*grpc.Server + addresses []string +} + +func (t *test) cleanup() { + for _, s := range t.servers { + s.Stop() + } +} + +func startTestServers(count int) (_ *test, err error) { + t := &test{} + + defer func() { + if err != nil { + for _, s := range t.servers { + s.Stop() + } + } + }() + for i := 0; i < count; i++ { + lis, err := net.Listen("tcp", "localhost:0") + if err != nil { + return nil, fmt.Errorf("Failed to listen %v", err) + } + + s := grpc.NewServer() + testpb.RegisterTestServiceServer(s, &testServer{}) + t.servers = append(t.servers, s) + t.addresses = append(t.addresses, lis.Addr().String()) + + go func(s *grpc.Server, l net.Listener) { + s.Serve(l) + }(s, lis) + } + + return t, nil +} + +func TestOneBackend(t *testing.T) { + defer leakcheck.Check(t) + r, cleanup := manual.GenerateAndRegisterManualResolver() + defer cleanup() + + test, err := startTestServers(1) + if err != nil { + t.Fatalf("failed to start servers: %v", err) + } + defer test.cleanup() + + cc, err := grpc.Dial(r.Scheme()+":///test.server", grpc.WithInsecure(), grpc.WithBalancerName(roundrobin.Name)) + if err != nil { + t.Fatalf("failed to dial: %v", err) + } + defer cc.Close() + testc := testpb.NewTestServiceClient(cc) + // The first RPC should fail because there's no address. + ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond) + defer cancel() + if _, err := testc.EmptyCall(ctx, &testpb.Empty{}); err == nil || status.Code(err) != codes.DeadlineExceeded { + t.Fatalf("EmptyCall() = _, %v, want _, DeadlineExceeded", err) + } + + r.NewAddress([]resolver.Address{{Addr: test.addresses[0]}}) + // The second RPC should succeed. + if _, err := testc.EmptyCall(context.Background(), &testpb.Empty{}); err != nil { + t.Fatalf("EmptyCall() = _, %v, want _, ", err) + } +} + +func TestBackendsRoundRobin(t *testing.T) { + defer leakcheck.Check(t) + r, cleanup := manual.GenerateAndRegisterManualResolver() + defer cleanup() + + backendCount := 5 + test, err := startTestServers(backendCount) + if err != nil { + t.Fatalf("failed to start servers: %v", err) + } + defer test.cleanup() + + cc, err := grpc.Dial(r.Scheme()+":///test.server", grpc.WithInsecure(), grpc.WithBalancerName(roundrobin.Name)) + if err != nil { + t.Fatalf("failed to dial: %v", err) + } + defer cc.Close() + testc := testpb.NewTestServiceClient(cc) + // The first RPC should fail because there's no address. + ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond) + defer cancel() + if _, err := testc.EmptyCall(ctx, &testpb.Empty{}); err == nil || status.Code(err) != codes.DeadlineExceeded { + t.Fatalf("EmptyCall() = _, %v, want _, DeadlineExceeded", err) + } + + var resolvedAddrs []resolver.Address + for i := 0; i < backendCount; i++ { + resolvedAddrs = append(resolvedAddrs, resolver.Address{Addr: test.addresses[i]}) + } + + r.NewAddress(resolvedAddrs) + var p peer.Peer + // Make sure connections to all servers are up. + for si := 0; si < backendCount; si++ { + var connected bool + for i := 0; i < 1000; i++ { + if _, err := testc.EmptyCall(context.Background(), &testpb.Empty{}, grpc.Peer(&p)); err != nil { + t.Fatalf("EmptyCall() = _, %v, want _, ", err) + } + if p.Addr.String() == test.addresses[si] { + connected = true + break + } + time.Sleep(time.Millisecond) + } + if !connected { + t.Fatalf("Connection to %v was not up after more than 1 second", test.addresses[si]) + } + } + + for i := 0; i < 3*backendCount; i++ { + if _, err := testc.EmptyCall(context.Background(), &testpb.Empty{}, grpc.Peer(&p)); err != nil { + t.Fatalf("EmptyCall() = _, %v, want _, ", err) + } + if p.Addr.String() != test.addresses[i%backendCount] { + t.Fatalf("Index %d: want peer %v, got peer %v", i, test.addresses[i%backendCount], p.Addr.String()) + } + } +} + +func TestAddressesRemoved(t *testing.T) { + defer leakcheck.Check(t) + r, cleanup := manual.GenerateAndRegisterManualResolver() + defer cleanup() + + test, err := startTestServers(1) + if err != nil { + t.Fatalf("failed to start servers: %v", err) + } + defer test.cleanup() + + cc, err := grpc.Dial(r.Scheme()+":///test.server", grpc.WithInsecure(), grpc.WithBalancerName(roundrobin.Name)) + if err != nil { + t.Fatalf("failed to dial: %v", err) + } + defer cc.Close() + testc := testpb.NewTestServiceClient(cc) + // The first RPC should fail because there's no address. + ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond) + defer cancel() + if _, err := testc.EmptyCall(ctx, &testpb.Empty{}); err == nil || status.Code(err) != codes.DeadlineExceeded { + t.Fatalf("EmptyCall() = _, %v, want _, DeadlineExceeded", err) + } + + r.NewAddress([]resolver.Address{{Addr: test.addresses[0]}}) + // The second RPC should succeed. + if _, err := testc.EmptyCall(context.Background(), &testpb.Empty{}); err != nil { + t.Fatalf("EmptyCall() = _, %v, want _, ", err) + } + + r.NewAddress([]resolver.Address{}) + for i := 0; i < 1000; i++ { + ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond) + defer cancel() + if _, err := testc.EmptyCall(ctx, &testpb.Empty{}, grpc.FailFast(false)); status.Code(err) == codes.DeadlineExceeded { + return + } + time.Sleep(time.Millisecond) + } + t.Fatalf("No RPC failed after removing all addresses, want RPC to fail with DeadlineExceeded") +} + +func TestCloseWithPendingRPC(t *testing.T) { + defer leakcheck.Check(t) + r, cleanup := manual.GenerateAndRegisterManualResolver() + defer cleanup() + + test, err := startTestServers(1) + if err != nil { + t.Fatalf("failed to start servers: %v", err) + } + defer test.cleanup() + + cc, err := grpc.Dial(r.Scheme()+":///test.server", grpc.WithInsecure(), grpc.WithBalancerName(roundrobin.Name)) + if err != nil { + t.Fatalf("failed to dial: %v", err) + } + testc := testpb.NewTestServiceClient(cc) + + var wg sync.WaitGroup + for i := 0; i < 3; i++ { + wg.Add(1) + go func() { + defer wg.Done() + // This RPC blocks until cc is closed. + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + if _, err := testc.EmptyCall(ctx, &testpb.Empty{}); status.Code(err) == codes.DeadlineExceeded { + t.Errorf("RPC failed because of deadline after cc is closed; want error the client connection is closing") + } + cancel() + }() + } + cc.Close() + wg.Wait() +} + +func TestNewAddressWhileBlocking(t *testing.T) { + defer leakcheck.Check(t) + r, cleanup := manual.GenerateAndRegisterManualResolver() + defer cleanup() + + test, err := startTestServers(1) + if err != nil { + t.Fatalf("failed to start servers: %v", err) + } + defer test.cleanup() + + cc, err := grpc.Dial(r.Scheme()+":///test.server", grpc.WithInsecure(), grpc.WithBalancerName(roundrobin.Name)) + if err != nil { + t.Fatalf("failed to dial: %v", err) + } + defer cc.Close() + testc := testpb.NewTestServiceClient(cc) + // The first RPC should fail because there's no address. + ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond) + defer cancel() + if _, err := testc.EmptyCall(ctx, &testpb.Empty{}); err == nil || status.Code(err) != codes.DeadlineExceeded { + t.Fatalf("EmptyCall() = _, %v, want _, DeadlineExceeded", err) + } + + r.NewAddress([]resolver.Address{{Addr: test.addresses[0]}}) + // The second RPC should succeed. + ctx, cancel = context.WithTimeout(context.Background(), 2*time.Second) + defer cancel() + if _, err := testc.EmptyCall(ctx, &testpb.Empty{}); err != nil { + t.Fatalf("EmptyCall() = _, %v, want _, nil", err) + } + + r.NewAddress([]resolver.Address{}) + + var wg sync.WaitGroup + for i := 0; i < 3; i++ { + wg.Add(1) + go func() { + defer wg.Done() + // This RPC blocks until NewAddress is called. + testc.EmptyCall(context.Background(), &testpb.Empty{}) + }() + } + time.Sleep(50 * time.Millisecond) + r.NewAddress([]resolver.Address{{Addr: test.addresses[0]}}) + wg.Wait() +} + +func TestOneServerDown(t *testing.T) { + defer leakcheck.Check(t) + r, cleanup := manual.GenerateAndRegisterManualResolver() + defer cleanup() + + backendCount := 3 + test, err := startTestServers(backendCount) + if err != nil { + t.Fatalf("failed to start servers: %v", err) + } + defer test.cleanup() + + cc, err := grpc.Dial(r.Scheme()+":///test.server", grpc.WithInsecure(), grpc.WithBalancerName(roundrobin.Name), grpc.WithWaitForHandshake()) + if err != nil { + t.Fatalf("failed to dial: %v", err) + } + defer cc.Close() + testc := testpb.NewTestServiceClient(cc) + // The first RPC should fail because there's no address. + ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond) + defer cancel() + if _, err := testc.EmptyCall(ctx, &testpb.Empty{}); err == nil || status.Code(err) != codes.DeadlineExceeded { + t.Fatalf("EmptyCall() = _, %v, want _, DeadlineExceeded", err) + } + + var resolvedAddrs []resolver.Address + for i := 0; i < backendCount; i++ { + resolvedAddrs = append(resolvedAddrs, resolver.Address{Addr: test.addresses[i]}) + } + + r.NewAddress(resolvedAddrs) + var p peer.Peer + // Make sure connections to all servers are up. + for si := 0; si < backendCount; si++ { + var connected bool + for i := 0; i < 1000; i++ { + if _, err := testc.EmptyCall(context.Background(), &testpb.Empty{}, grpc.Peer(&p)); err != nil { + t.Fatalf("EmptyCall() = _, %v, want _, ", err) + } + if p.Addr.String() == test.addresses[si] { + connected = true + break + } + time.Sleep(time.Millisecond) + } + if !connected { + t.Fatalf("Connection to %v was not up after more than 1 second", test.addresses[si]) + } + } + + for i := 0; i < 3*backendCount; i++ { + if _, err := testc.EmptyCall(context.Background(), &testpb.Empty{}, grpc.Peer(&p)); err != nil { + t.Fatalf("EmptyCall() = _, %v, want _, ", err) + } + if p.Addr.String() != test.addresses[i%backendCount] { + t.Fatalf("Index %d: want peer %v, got peer %v", i, test.addresses[i%backendCount], p.Addr.String()) + } + } + + // Stop one server, RPCs should roundrobin among the remaining servers. + backendCount-- + test.servers[backendCount].Stop() + // Loop until see server[backendCount-1] twice without seeing server[backendCount]. + var targetSeen int + for i := 0; i < 1000; i++ { + if _, err := testc.EmptyCall(context.Background(), &testpb.Empty{}, grpc.Peer(&p)); err != nil { + targetSeen = 0 + t.Logf("EmptyCall() = _, %v, want _, ", err) + // Due to a race, this RPC could possibly get the connection that + // was closing, and this RPC may fail. Keep trying when this + // happens. + continue + } + switch p.Addr.String() { + case test.addresses[backendCount-1]: + targetSeen++ + case test.addresses[backendCount]: + // Reset targetSeen if peer is server[backendCount]. + targetSeen = 0 + } + // Break to make sure the last picked address is server[-1], so the following for loop won't be flaky. + if targetSeen >= 2 { + break + } + } + if targetSeen != 2 { + t.Fatal("Failed to see server[backendCount-1] twice without seeing server[backendCount]") + } + for i := 0; i < 3*backendCount; i++ { + if _, err := testc.EmptyCall(context.Background(), &testpb.Empty{}, grpc.Peer(&p)); err != nil { + t.Fatalf("EmptyCall() = _, %v, want _, ", err) + } + if p.Addr.String() != test.addresses[i%backendCount] { + t.Errorf("Index %d: want peer %v, got peer %v", i, test.addresses[i%backendCount], p.Addr.String()) + } + } +} + +func TestAllServersDown(t *testing.T) { + defer leakcheck.Check(t) + r, cleanup := manual.GenerateAndRegisterManualResolver() + defer cleanup() + + backendCount := 3 + test, err := startTestServers(backendCount) + if err != nil { + t.Fatalf("failed to start servers: %v", err) + } + defer test.cleanup() + + cc, err := grpc.Dial(r.Scheme()+":///test.server", grpc.WithInsecure(), grpc.WithBalancerName(roundrobin.Name), grpc.WithWaitForHandshake()) + if err != nil { + t.Fatalf("failed to dial: %v", err) + } + defer cc.Close() + testc := testpb.NewTestServiceClient(cc) + // The first RPC should fail because there's no address. + ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond) + defer cancel() + if _, err := testc.EmptyCall(ctx, &testpb.Empty{}); err == nil || status.Code(err) != codes.DeadlineExceeded { + t.Fatalf("EmptyCall() = _, %v, want _, DeadlineExceeded", err) + } + + var resolvedAddrs []resolver.Address + for i := 0; i < backendCount; i++ { + resolvedAddrs = append(resolvedAddrs, resolver.Address{Addr: test.addresses[i]}) + } + + r.NewAddress(resolvedAddrs) + var p peer.Peer + // Make sure connections to all servers are up. + for si := 0; si < backendCount; si++ { + var connected bool + for i := 0; i < 1000; i++ { + if _, err := testc.EmptyCall(context.Background(), &testpb.Empty{}, grpc.Peer(&p)); err != nil { + t.Fatalf("EmptyCall() = _, %v, want _, ", err) + } + if p.Addr.String() == test.addresses[si] { + connected = true + break + } + time.Sleep(time.Millisecond) + } + if !connected { + t.Fatalf("Connection to %v was not up after more than 1 second", test.addresses[si]) + } + } + + for i := 0; i < 3*backendCount; i++ { + if _, err := testc.EmptyCall(context.Background(), &testpb.Empty{}, grpc.Peer(&p)); err != nil { + t.Fatalf("EmptyCall() = _, %v, want _, ", err) + } + if p.Addr.String() != test.addresses[i%backendCount] { + t.Fatalf("Index %d: want peer %v, got peer %v", i, test.addresses[i%backendCount], p.Addr.String()) + } + } + + // All servers are stopped, failfast RPC should fail with unavailable. + for i := 0; i < backendCount; i++ { + test.servers[i].Stop() + } + time.Sleep(100 * time.Millisecond) + for i := 0; i < 1000; i++ { + if _, err := testc.EmptyCall(context.Background(), &testpb.Empty{}); status.Code(err) == codes.Unavailable { + return + } + time.Sleep(time.Millisecond) + } + t.Fatalf("Failfast RPCs didn't fail with Unavailable after all servers are stopped") +} diff --git a/vendor/google.golang.org/grpc/balancer_conn_wrappers.go b/vendor/google.golang.org/grpc/balancer_conn_wrappers.go new file mode 100644 index 0000000..db6f0ae --- /dev/null +++ b/vendor/google.golang.org/grpc/balancer_conn_wrappers.go @@ -0,0 +1,300 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package grpc + +import ( + "fmt" + "sync" + + "google.golang.org/grpc/balancer" + "google.golang.org/grpc/connectivity" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/resolver" +) + +// scStateUpdate contains the subConn and the new state it changed to. +type scStateUpdate struct { + sc balancer.SubConn + state connectivity.State +} + +// scStateUpdateBuffer is an unbounded channel for scStateChangeTuple. +// TODO make a general purpose buffer that uses interface{}. +type scStateUpdateBuffer struct { + c chan *scStateUpdate + mu sync.Mutex + backlog []*scStateUpdate +} + +func newSCStateUpdateBuffer() *scStateUpdateBuffer { + return &scStateUpdateBuffer{ + c: make(chan *scStateUpdate, 1), + } +} + +func (b *scStateUpdateBuffer) put(t *scStateUpdate) { + b.mu.Lock() + defer b.mu.Unlock() + if len(b.backlog) == 0 { + select { + case b.c <- t: + return + default: + } + } + b.backlog = append(b.backlog, t) +} + +func (b *scStateUpdateBuffer) load() { + b.mu.Lock() + defer b.mu.Unlock() + if len(b.backlog) > 0 { + select { + case b.c <- b.backlog[0]: + b.backlog[0] = nil + b.backlog = b.backlog[1:] + default: + } + } +} + +// get returns the channel that the scStateUpdate will be sent to. +// +// Upon receiving, the caller should call load to send another +// scStateChangeTuple onto the channel if there is any. +func (b *scStateUpdateBuffer) get() <-chan *scStateUpdate { + return b.c +} + +// resolverUpdate contains the new resolved addresses or error if there's +// any. +type resolverUpdate struct { + addrs []resolver.Address + err error +} + +// ccBalancerWrapper is a wrapper on top of cc for balancers. +// It implements balancer.ClientConn interface. +type ccBalancerWrapper struct { + cc *ClientConn + balancer balancer.Balancer + stateChangeQueue *scStateUpdateBuffer + resolverUpdateCh chan *resolverUpdate + done chan struct{} + + mu sync.Mutex + subConns map[*acBalancerWrapper]struct{} +} + +func newCCBalancerWrapper(cc *ClientConn, b balancer.Builder, bopts balancer.BuildOptions) *ccBalancerWrapper { + ccb := &ccBalancerWrapper{ + cc: cc, + stateChangeQueue: newSCStateUpdateBuffer(), + resolverUpdateCh: make(chan *resolverUpdate, 1), + done: make(chan struct{}), + subConns: make(map[*acBalancerWrapper]struct{}), + } + go ccb.watcher() + ccb.balancer = b.Build(ccb, bopts) + return ccb +} + +// watcher balancer functions sequencially, so the balancer can be implemeneted +// lock-free. +func (ccb *ccBalancerWrapper) watcher() { + for { + select { + case t := <-ccb.stateChangeQueue.get(): + ccb.stateChangeQueue.load() + select { + case <-ccb.done: + ccb.balancer.Close() + return + default: + } + ccb.balancer.HandleSubConnStateChange(t.sc, t.state) + case t := <-ccb.resolverUpdateCh: + select { + case <-ccb.done: + ccb.balancer.Close() + return + default: + } + ccb.balancer.HandleResolvedAddrs(t.addrs, t.err) + case <-ccb.done: + } + + select { + case <-ccb.done: + ccb.balancer.Close() + ccb.mu.Lock() + scs := ccb.subConns + ccb.subConns = nil + ccb.mu.Unlock() + for acbw := range scs { + ccb.cc.removeAddrConn(acbw.getAddrConn(), errConnDrain) + } + return + default: + } + } +} + +func (ccb *ccBalancerWrapper) close() { + close(ccb.done) +} + +func (ccb *ccBalancerWrapper) handleSubConnStateChange(sc balancer.SubConn, s connectivity.State) { + // When updating addresses for a SubConn, if the address in use is not in + // the new addresses, the old ac will be tearDown() and a new ac will be + // created. tearDown() generates a state change with Shutdown state, we + // don't want the balancer to receive this state change. So before + // tearDown() on the old ac, ac.acbw (acWrapper) will be set to nil, and + // this function will be called with (nil, Shutdown). We don't need to call + // balancer method in this case. + if sc == nil { + return + } + ccb.stateChangeQueue.put(&scStateUpdate{ + sc: sc, + state: s, + }) +} + +func (ccb *ccBalancerWrapper) handleResolvedAddrs(addrs []resolver.Address, err error) { + select { + case <-ccb.resolverUpdateCh: + default: + } + ccb.resolverUpdateCh <- &resolverUpdate{ + addrs: addrs, + err: err, + } +} + +func (ccb *ccBalancerWrapper) NewSubConn(addrs []resolver.Address, opts balancer.NewSubConnOptions) (balancer.SubConn, error) { + if len(addrs) <= 0 { + return nil, fmt.Errorf("grpc: cannot create SubConn with empty address list") + } + ccb.mu.Lock() + defer ccb.mu.Unlock() + if ccb.subConns == nil { + return nil, fmt.Errorf("grpc: ClientConn balancer wrapper was closed") + } + ac, err := ccb.cc.newAddrConn(addrs) + if err != nil { + return nil, err + } + acbw := &acBalancerWrapper{ac: ac} + acbw.ac.mu.Lock() + ac.acbw = acbw + acbw.ac.mu.Unlock() + ccb.subConns[acbw] = struct{}{} + return acbw, nil +} + +func (ccb *ccBalancerWrapper) RemoveSubConn(sc balancer.SubConn) { + acbw, ok := sc.(*acBalancerWrapper) + if !ok { + return + } + ccb.mu.Lock() + defer ccb.mu.Unlock() + if ccb.subConns == nil { + return + } + delete(ccb.subConns, acbw) + ccb.cc.removeAddrConn(acbw.getAddrConn(), errConnDrain) +} + +func (ccb *ccBalancerWrapper) UpdateBalancerState(s connectivity.State, p balancer.Picker) { + ccb.mu.Lock() + defer ccb.mu.Unlock() + if ccb.subConns == nil { + return + } + ccb.cc.csMgr.updateState(s) + ccb.cc.blockingpicker.updatePicker(p) +} + +func (ccb *ccBalancerWrapper) ResolveNow(o resolver.ResolveNowOption) { + ccb.cc.resolveNow(o) +} + +func (ccb *ccBalancerWrapper) Target() string { + return ccb.cc.target +} + +// acBalancerWrapper is a wrapper on top of ac for balancers. +// It implements balancer.SubConn interface. +type acBalancerWrapper struct { + mu sync.Mutex + ac *addrConn +} + +func (acbw *acBalancerWrapper) UpdateAddresses(addrs []resolver.Address) { + acbw.mu.Lock() + defer acbw.mu.Unlock() + if len(addrs) <= 0 { + acbw.ac.tearDown(errConnDrain) + return + } + if !acbw.ac.tryUpdateAddrs(addrs) { + cc := acbw.ac.cc + acbw.ac.mu.Lock() + // Set old ac.acbw to nil so the Shutdown state update will be ignored + // by balancer. + // + // TODO(bar) the state transition could be wrong when tearDown() old ac + // and creating new ac, fix the transition. + acbw.ac.acbw = nil + acbw.ac.mu.Unlock() + acState := acbw.ac.getState() + acbw.ac.tearDown(errConnDrain) + + if acState == connectivity.Shutdown { + return + } + + ac, err := cc.newAddrConn(addrs) + if err != nil { + grpclog.Warningf("acBalancerWrapper: UpdateAddresses: failed to newAddrConn: %v", err) + return + } + acbw.ac = ac + ac.mu.Lock() + ac.acbw = acbw + ac.mu.Unlock() + if acState != connectivity.Idle { + ac.connect() + } + } +} + +func (acbw *acBalancerWrapper) Connect() { + acbw.mu.Lock() + defer acbw.mu.Unlock() + acbw.ac.connect() +} + +func (acbw *acBalancerWrapper) getAddrConn() *addrConn { + acbw.mu.Lock() + defer acbw.mu.Unlock() + return acbw.ac +} diff --git a/vendor/google.golang.org/grpc/balancer_switching_test.go b/vendor/google.golang.org/grpc/balancer_switching_test.go new file mode 100644 index 0000000..0d8b2a5 --- /dev/null +++ b/vendor/google.golang.org/grpc/balancer_switching_test.go @@ -0,0 +1,443 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package grpc + +import ( + "fmt" + "math" + "testing" + "time" + + "golang.org/x/net/context" + "google.golang.org/grpc/balancer/roundrobin" + _ "google.golang.org/grpc/grpclog/glogger" + "google.golang.org/grpc/resolver" + "google.golang.org/grpc/resolver/manual" + "google.golang.org/grpc/test/leakcheck" +) + +func checkPickFirst(cc *ClientConn, servers []*server) error { + var ( + req = "port" + reply string + err error + ) + connected := false + for i := 0; i < 5000; i++ { + if err = Invoke(context.Background(), "/foo/bar", &req, &reply, cc); errorDesc(err) == servers[0].port { + if connected { + // connected is set to false if peer is not server[0]. So if + // connected is true here, this is the second time we saw + // server[0] in a row. Break because pickfirst is in effect. + break + } + connected = true + } else { + connected = false + } + time.Sleep(time.Millisecond) + } + if !connected { + return fmt.Errorf("pickfirst is not in effect after 5 second, EmptyCall() = _, %v, want _, %v", err, servers[0].port) + } + // The following RPCs should all succeed with the first server. + for i := 0; i < 3; i++ { + err = Invoke(context.Background(), "/foo/bar", &req, &reply, cc) + if errorDesc(err) != servers[0].port { + return fmt.Errorf("Index %d: want peer %v, got peer %v", i, servers[0].port, err) + } + } + return nil +} + +func checkRoundRobin(cc *ClientConn, servers []*server) error { + var ( + req = "port" + reply string + err error + ) + + // Make sure connections to all servers are up. + for i := 0; i < 2; i++ { + // Do this check twice, otherwise the first RPC's transport may still be + // picked by the closing pickfirst balancer, and the test becomes flaky. + for _, s := range servers { + var up bool + for i := 0; i < 5000; i++ { + if err = Invoke(context.Background(), "/foo/bar", &req, &reply, cc); errorDesc(err) == s.port { + up = true + break + } + time.Sleep(time.Millisecond) + } + if !up { + return fmt.Errorf("server %v is not up within 5 second", s.port) + } + } + } + + serverCount := len(servers) + for i := 0; i < 3*serverCount; i++ { + err = Invoke(context.Background(), "/foo/bar", &req, &reply, cc) + if errorDesc(err) != servers[i%serverCount].port { + return fmt.Errorf("Index %d: want peer %v, got peer %v", i, servers[i%serverCount].port, err) + } + } + return nil +} + +func TestSwitchBalancer(t *testing.T) { + defer leakcheck.Check(t) + r, rcleanup := manual.GenerateAndRegisterManualResolver() + defer rcleanup() + + numServers := 2 + servers, _, scleanup := startServers(t, numServers, math.MaxInt32) + defer scleanup() + + cc, err := Dial(r.Scheme()+":///test.server", WithInsecure(), WithCodec(testCodec{})) + if err != nil { + t.Fatalf("failed to dial: %v", err) + } + defer cc.Close() + r.NewAddress([]resolver.Address{{Addr: servers[0].addr}, {Addr: servers[1].addr}}) + // The default balancer is pickfirst. + if err := checkPickFirst(cc, servers); err != nil { + t.Fatalf("check pickfirst returned non-nil error: %v", err) + } + // Switch to roundrobin. + cc.handleServiceConfig(`{"loadBalancingPolicy": "round_robin"}`) + if err := checkRoundRobin(cc, servers); err != nil { + t.Fatalf("check roundrobin returned non-nil error: %v", err) + } + // Switch to pickfirst. + cc.handleServiceConfig(`{"loadBalancingPolicy": "pick_first"}`) + if err := checkPickFirst(cc, servers); err != nil { + t.Fatalf("check pickfirst returned non-nil error: %v", err) + } +} + +// Test that balancer specified by dial option will not be overridden. +func TestBalancerDialOption(t *testing.T) { + defer leakcheck.Check(t) + r, rcleanup := manual.GenerateAndRegisterManualResolver() + defer rcleanup() + + numServers := 2 + servers, _, scleanup := startServers(t, numServers, math.MaxInt32) + defer scleanup() + + cc, err := Dial(r.Scheme()+":///test.server", WithInsecure(), WithCodec(testCodec{}), WithBalancerName(roundrobin.Name)) + if err != nil { + t.Fatalf("failed to dial: %v", err) + } + defer cc.Close() + r.NewAddress([]resolver.Address{{Addr: servers[0].addr}, {Addr: servers[1].addr}}) + // The init balancer is roundrobin. + if err := checkRoundRobin(cc, servers); err != nil { + t.Fatalf("check roundrobin returned non-nil error: %v", err) + } + // Switch to pickfirst. + cc.handleServiceConfig(`{"loadBalancingPolicy": "pick_first"}`) + // Balancer is still roundrobin. + if err := checkRoundRobin(cc, servers); err != nil { + t.Fatalf("check roundrobin returned non-nil error: %v", err) + } +} + +// First addr update contains grpclb. +func TestSwitchBalancerGRPCLBFirst(t *testing.T) { + defer leakcheck.Check(t) + r, rcleanup := manual.GenerateAndRegisterManualResolver() + defer rcleanup() + + cc, err := Dial(r.Scheme()+":///test.server", WithInsecure(), WithCodec(testCodec{})) + if err != nil { + t.Fatalf("failed to dial: %v", err) + } + defer cc.Close() + + // ClientConn will switch balancer to grpclb when receives an address of + // type GRPCLB. + r.NewAddress([]resolver.Address{{Addr: "backend"}, {Addr: "grpclb", Type: resolver.GRPCLB}}) + var isGRPCLB bool + for i := 0; i < 5000; i++ { + cc.mu.Lock() + isGRPCLB = cc.curBalancerName == "grpclb" + cc.mu.Unlock() + if isGRPCLB { + break + } + time.Sleep(time.Millisecond) + } + if !isGRPCLB { + t.Fatalf("after 5 second, cc.balancer is of type %v, not grpclb", cc.curBalancerName) + } + + // New update containing new backend and new grpclb. Should not switch + // balancer. + r.NewAddress([]resolver.Address{{Addr: "backend2"}, {Addr: "grpclb2", Type: resolver.GRPCLB}}) + for i := 0; i < 200; i++ { + cc.mu.Lock() + isGRPCLB = cc.curBalancerName == "grpclb" + cc.mu.Unlock() + if !isGRPCLB { + break + } + time.Sleep(time.Millisecond) + } + if !isGRPCLB { + t.Fatalf("within 200 ms, cc.balancer switched to !grpclb, want grpclb") + } + + var isPickFirst bool + // Switch balancer to pickfirst. + r.NewAddress([]resolver.Address{{Addr: "backend"}}) + for i := 0; i < 5000; i++ { + cc.mu.Lock() + isPickFirst = cc.curBalancerName == PickFirstBalancerName + cc.mu.Unlock() + if isPickFirst { + break + } + time.Sleep(time.Millisecond) + } + if !isPickFirst { + t.Fatalf("after 5 second, cc.balancer is of type %v, not pick_first", cc.curBalancerName) + } +} + +// First addr update does not contain grpclb. +func TestSwitchBalancerGRPCLBSecond(t *testing.T) { + defer leakcheck.Check(t) + r, rcleanup := manual.GenerateAndRegisterManualResolver() + defer rcleanup() + + cc, err := Dial(r.Scheme()+":///test.server", WithInsecure(), WithCodec(testCodec{})) + if err != nil { + t.Fatalf("failed to dial: %v", err) + } + defer cc.Close() + + r.NewAddress([]resolver.Address{{Addr: "backend"}}) + var isPickFirst bool + for i := 0; i < 5000; i++ { + cc.mu.Lock() + isPickFirst = cc.curBalancerName == PickFirstBalancerName + cc.mu.Unlock() + if isPickFirst { + break + } + time.Sleep(time.Millisecond) + } + if !isPickFirst { + t.Fatalf("after 5 second, cc.balancer is of type %v, not pick_first", cc.curBalancerName) + } + + // ClientConn will switch balancer to grpclb when receives an address of + // type GRPCLB. + r.NewAddress([]resolver.Address{{Addr: "backend"}, {Addr: "grpclb", Type: resolver.GRPCLB}}) + var isGRPCLB bool + for i := 0; i < 5000; i++ { + cc.mu.Lock() + isGRPCLB = cc.curBalancerName == "grpclb" + cc.mu.Unlock() + if isGRPCLB { + break + } + time.Sleep(time.Millisecond) + } + if !isGRPCLB { + t.Fatalf("after 5 second, cc.balancer is of type %v, not grpclb", cc.curBalancerName) + } + + // New update containing new backend and new grpclb. Should not switch + // balancer. + r.NewAddress([]resolver.Address{{Addr: "backend2"}, {Addr: "grpclb2", Type: resolver.GRPCLB}}) + for i := 0; i < 200; i++ { + cc.mu.Lock() + isGRPCLB = cc.curBalancerName == "grpclb" + cc.mu.Unlock() + if !isGRPCLB { + break + } + time.Sleep(time.Millisecond) + } + if !isGRPCLB { + t.Fatalf("within 200 ms, cc.balancer switched to !grpclb, want grpclb") + } + + // Switch balancer back. + r.NewAddress([]resolver.Address{{Addr: "backend"}}) + for i := 0; i < 5000; i++ { + cc.mu.Lock() + isPickFirst = cc.curBalancerName == PickFirstBalancerName + cc.mu.Unlock() + if isPickFirst { + break + } + time.Sleep(time.Millisecond) + } + if !isPickFirst { + t.Fatalf("after 5 second, cc.balancer is of type %v, not pick_first", cc.curBalancerName) + } +} + +// Test that if the current balancer is roundrobin, after switching to grpclb, +// when the resolved address doesn't contain grpclb addresses, balancer will be +// switched back to roundrobin. +func TestSwitchBalancerGRPCLBRoundRobin(t *testing.T) { + defer leakcheck.Check(t) + r, rcleanup := manual.GenerateAndRegisterManualResolver() + defer rcleanup() + + cc, err := Dial(r.Scheme()+":///test.server", WithInsecure(), WithCodec(testCodec{})) + if err != nil { + t.Fatalf("failed to dial: %v", err) + } + defer cc.Close() + + r.NewServiceConfig(`{"loadBalancingPolicy": "round_robin"}`) + + r.NewAddress([]resolver.Address{{Addr: "backend"}}) + var isRoundRobin bool + for i := 0; i < 5000; i++ { + cc.mu.Lock() + isRoundRobin = cc.curBalancerName == "round_robin" + cc.mu.Unlock() + if isRoundRobin { + break + } + time.Sleep(time.Millisecond) + } + if !isRoundRobin { + t.Fatalf("after 5 second, cc.balancer is of type %v, not round_robin", cc.curBalancerName) + } + + // ClientConn will switch balancer to grpclb when receives an address of + // type GRPCLB. + r.NewAddress([]resolver.Address{{Addr: "grpclb", Type: resolver.GRPCLB}}) + var isGRPCLB bool + for i := 0; i < 5000; i++ { + cc.mu.Lock() + isGRPCLB = cc.curBalancerName == "grpclb" + cc.mu.Unlock() + if isGRPCLB { + break + } + time.Sleep(time.Millisecond) + } + if !isGRPCLB { + t.Fatalf("after 5 second, cc.balancer is of type %v, not grpclb", cc.curBalancerName) + } + + // Switch balancer back. + r.NewAddress([]resolver.Address{{Addr: "backend"}}) + for i := 0; i < 5000; i++ { + cc.mu.Lock() + isRoundRobin = cc.curBalancerName == "round_robin" + cc.mu.Unlock() + if isRoundRobin { + break + } + time.Sleep(time.Millisecond) + } + if !isRoundRobin { + t.Fatalf("after 5 second, cc.balancer is of type %v, not round_robin", cc.curBalancerName) + } +} + +// Test that if resolved address list contains grpclb, the balancer option in +// service config won't take effect. But when there's no grpclb address in a new +// resolved address list, balancer will be switched to the new one. +func TestSwitchBalancerGRPCLBServiceConfig(t *testing.T) { + defer leakcheck.Check(t) + r, rcleanup := manual.GenerateAndRegisterManualResolver() + defer rcleanup() + + cc, err := Dial(r.Scheme()+":///test.server", WithInsecure(), WithCodec(testCodec{})) + if err != nil { + t.Fatalf("failed to dial: %v", err) + } + defer cc.Close() + + r.NewAddress([]resolver.Address{{Addr: "backend"}}) + var isPickFirst bool + for i := 0; i < 5000; i++ { + cc.mu.Lock() + isPickFirst = cc.curBalancerName == PickFirstBalancerName + cc.mu.Unlock() + if isPickFirst { + break + } + time.Sleep(time.Millisecond) + } + if !isPickFirst { + t.Fatalf("after 5 second, cc.balancer is of type %v, not pick_first", cc.curBalancerName) + } + + // ClientConn will switch balancer to grpclb when receives an address of + // type GRPCLB. + r.NewAddress([]resolver.Address{{Addr: "grpclb", Type: resolver.GRPCLB}}) + var isGRPCLB bool + for i := 0; i < 5000; i++ { + cc.mu.Lock() + isGRPCLB = cc.curBalancerName == "grpclb" + cc.mu.Unlock() + if isGRPCLB { + break + } + time.Sleep(time.Millisecond) + } + if !isGRPCLB { + t.Fatalf("after 5 second, cc.balancer is of type %v, not grpclb", cc.curBalancerName) + } + + r.NewServiceConfig(`{"loadBalancingPolicy": "round_robin"}`) + var isRoundRobin bool + for i := 0; i < 200; i++ { + cc.mu.Lock() + isRoundRobin = cc.curBalancerName == "round_robin" + cc.mu.Unlock() + if isRoundRobin { + break + } + time.Sleep(time.Millisecond) + } + // Balancer should NOT switch to round_robin because resolved list contains + // grpclb. + if isRoundRobin { + t.Fatalf("within 200 ms, cc.balancer switched to round_robin, want grpclb") + } + + // Switch balancer back. + r.NewAddress([]resolver.Address{{Addr: "backend"}}) + for i := 0; i < 5000; i++ { + cc.mu.Lock() + isRoundRobin = cc.curBalancerName == "round_robin" + cc.mu.Unlock() + if isRoundRobin { + break + } + time.Sleep(time.Millisecond) + } + if !isRoundRobin { + t.Fatalf("after 5 second, cc.balancer is of type %v, not round_robin", cc.curBalancerName) + } +} diff --git a/vendor/google.golang.org/grpc/balancer_test.go b/vendor/google.golang.org/grpc/balancer_test.go index 48f8b27..3e0fa19 100644 --- a/vendor/google.golang.org/grpc/balancer_test.go +++ b/vendor/google.golang.org/grpc/balancer_test.go @@ -1,33 +1,18 @@ /* * - * Copyright 2016, Google Inc. - * All rights reserved. + * Copyright 2016 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -36,13 +21,22 @@ package grpc import ( "fmt" "math" + "strconv" "sync" "testing" "time" "golang.org/x/net/context" "google.golang.org/grpc/codes" + _ "google.golang.org/grpc/grpclog/glogger" "google.golang.org/grpc/naming" + "google.golang.org/grpc/status" + "google.golang.org/grpc/test/leakcheck" + + // V1 balancer tests use passthrough resolver instead of dns. + // TODO(bar) remove this when removing v1 balaner entirely. + + _ "google.golang.org/grpc/resolver/passthrough" ) type testWatcher struct { @@ -70,6 +64,7 @@ func (w *testWatcher) Next() (updates []*naming.Update, err error) { } func (w *testWatcher) Close() { + close(w.side) } // Inject naming resolution updates to the testWatcher. @@ -103,7 +98,7 @@ func (r *testNameResolver) Resolve(target string) (naming.Watcher, error) { return r.w, nil } -func startServers(t *testing.T, numServers int, maxStreams uint32) ([]*server, *testNameResolver) { +func startServers(t *testing.T, numServers int, maxStreams uint32) ([]*server, *testNameResolver, func()) { var servers []*server for i := 0; i < numServers; i++ { s := newTestServer() @@ -112,55 +107,61 @@ func startServers(t *testing.T, numServers int, maxStreams uint32) ([]*server, * s.wait(t, 2*time.Second) } // Point to server[0] - addr := "127.0.0.1:" + servers[0].port + addr := "localhost:" + servers[0].port return servers, &testNameResolver{ - addr: addr, - } + addr: addr, + }, func() { + for i := 0; i < numServers; i++ { + servers[i].stop() + } + } } func TestNameDiscovery(t *testing.T) { + defer leakcheck.Check(t) // Start 2 servers on 2 ports. numServers := 2 - servers, r := startServers(t, numServers, math.MaxUint32) - cc, err := Dial("foo.bar.com", WithBalancer(RoundRobin(r)), WithBlock(), WithInsecure(), WithCodec(testCodec{})) + servers, r, cleanup := startServers(t, numServers, math.MaxUint32) + defer cleanup() + cc, err := Dial("passthrough:///foo.bar.com", WithBalancer(RoundRobin(r)), WithBlock(), WithInsecure(), WithCodec(testCodec{})) if err != nil { t.Fatalf("Failed to create ClientConn: %v", err) } + defer cc.Close() req := "port" var reply string - if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err == nil || ErrorDesc(err) != servers[0].port { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err == nil || errorDesc(err) != servers[0].port { t.Fatalf("grpc.Invoke(_, _, _, _, _) = %v, want %s", err, servers[0].port) } // Inject the name resolution change to remove servers[0] and add servers[1]. var updates []*naming.Update updates = append(updates, &naming.Update{ Op: naming.Delete, - Addr: "127.0.0.1:" + servers[0].port, + Addr: "localhost:" + servers[0].port, }) updates = append(updates, &naming.Update{ Op: naming.Add, - Addr: "127.0.0.1:" + servers[1].port, + Addr: "localhost:" + servers[1].port, }) r.w.inject(updates) // Loop until the rpcs in flight talks to servers[1]. for { - if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err != nil && ErrorDesc(err) == servers[1].port { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err != nil && errorDesc(err) == servers[1].port { break } time.Sleep(10 * time.Millisecond) } - cc.Close() - for i := 0; i < numServers; i++ { - servers[i].stop() - } } func TestEmptyAddrs(t *testing.T) { - servers, r := startServers(t, 1, math.MaxUint32) - cc, err := Dial("foo.bar.com", WithBalancer(RoundRobin(r)), WithBlock(), WithInsecure(), WithCodec(testCodec{})) + defer leakcheck.Check(t) + servers, r, cleanup := startServers(t, 1, math.MaxUint32) + defer cleanup() + cc, err := Dial("passthrough:///foo.bar.com", WithBalancer(RoundRobin(r)), WithBlock(), WithInsecure(), WithCodec(testCodec{})) if err != nil { t.Fatalf("Failed to create ClientConn: %v", err) } + defer cc.Close() var reply string if err := Invoke(context.Background(), "/foo/bar", &expectedRequest, &reply, cc); err != nil || reply != expectedResponse { t.Fatalf("grpc.Invoke(_, _, _, _, _) = %v, reply = %q, want %q, ", err, reply, expectedResponse) @@ -169,40 +170,43 @@ func TestEmptyAddrs(t *testing.T) { // available after that. u := &naming.Update{ Op: naming.Delete, - Addr: "127.0.0.1:" + servers[0].port, + Addr: "localhost:" + servers[0].port, } r.w.inject([]*naming.Update{u}) // Loop until the above updates apply. for { time.Sleep(10 * time.Millisecond) - ctx, _ := context.WithTimeout(context.Background(), 10*time.Millisecond) + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Millisecond) if err := Invoke(ctx, "/foo/bar", &expectedRequest, &reply, cc); err != nil { + cancel() break } + cancel() } - cc.Close() - servers[0].stop() } func TestRoundRobin(t *testing.T) { + defer leakcheck.Check(t) // Start 3 servers on 3 ports. numServers := 3 - servers, r := startServers(t, numServers, math.MaxUint32) - cc, err := Dial("foo.bar.com", WithBalancer(RoundRobin(r)), WithBlock(), WithInsecure(), WithCodec(testCodec{})) + servers, r, cleanup := startServers(t, numServers, math.MaxUint32) + defer cleanup() + cc, err := Dial("passthrough:///foo.bar.com", WithBalancer(RoundRobin(r)), WithBlock(), WithInsecure(), WithCodec(testCodec{})) if err != nil { t.Fatalf("Failed to create ClientConn: %v", err) } + defer cc.Close() // Add servers[1] to the service discovery. u := &naming.Update{ Op: naming.Add, - Addr: "127.0.0.1:" + servers[1].port, + Addr: "localhost:" + servers[1].port, } r.w.inject([]*naming.Update{u}) req := "port" var reply string // Loop until servers[1] is up for { - if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err != nil && ErrorDesc(err) == servers[1].port { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err != nil && errorDesc(err) == servers[1].port { break } time.Sleep(10 * time.Millisecond) @@ -210,34 +214,33 @@ func TestRoundRobin(t *testing.T) { // Add server2[2] to the service discovery. u = &naming.Update{ Op: naming.Add, - Addr: "127.0.0.1:" + servers[2].port, + Addr: "localhost:" + servers[2].port, } r.w.inject([]*naming.Update{u}) // Loop until both servers[2] are up. for { - if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err != nil && ErrorDesc(err) == servers[2].port { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err != nil && errorDesc(err) == servers[2].port { break } time.Sleep(10 * time.Millisecond) } // Check the incoming RPCs served in a round-robin manner. for i := 0; i < 10; i++ { - if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err == nil || ErrorDesc(err) != servers[i%numServers].port { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err == nil || errorDesc(err) != servers[i%numServers].port { t.Fatalf("Index %d: Invoke(_, _, _, _, _) = %v, want %s", i, err, servers[i%numServers].port) } } - cc.Close() - for i := 0; i < numServers; i++ { - servers[i].stop() - } } func TestCloseWithPendingRPC(t *testing.T) { - servers, r := startServers(t, 1, math.MaxUint32) - cc, err := Dial("foo.bar.com", WithBalancer(RoundRobin(r)), WithBlock(), WithInsecure(), WithCodec(testCodec{})) + defer leakcheck.Check(t) + servers, r, cleanup := startServers(t, 1, math.MaxUint32) + defer cleanup() + cc, err := Dial("passthrough:///foo.bar.com", WithBalancer(RoundRobin(r)), WithBlock(), WithInsecure(), WithCodec(testCodec{})) if err != nil { t.Fatalf("Failed to create ClientConn: %v", err) } + defer cc.Close() var reply string if err := Invoke(context.Background(), "/foo/bar", &expectedRequest, &reply, cc, FailFast(false)); err != nil { t.Fatalf("grpc.Invoke(_, _, _, _, _) = %v, want %s", err, servers[0].port) @@ -245,16 +248,18 @@ func TestCloseWithPendingRPC(t *testing.T) { // Remove the server. updates := []*naming.Update{{ Op: naming.Delete, - Addr: "127.0.0.1:" + servers[0].port, + Addr: "localhost:" + servers[0].port, }} r.w.inject(updates) // Loop until the above update applies. for { - ctx, _ := context.WithTimeout(context.Background(), 10*time.Millisecond) - if err := Invoke(ctx, "/foo/bar", &expectedRequest, &reply, cc, FailFast(false)); Code(err) == codes.DeadlineExceeded { + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Millisecond) + if err := Invoke(ctx, "/foo/bar", &expectedRequest, &reply, cc, FailFast(false)); status.Code(err) == codes.DeadlineExceeded { + cancel() break } time.Sleep(10 * time.Millisecond) + cancel() } // Issue 2 RPCs which should be completed with error status once cc is closed. var wg sync.WaitGroup @@ -277,27 +282,31 @@ func TestCloseWithPendingRPC(t *testing.T) { time.Sleep(5 * time.Millisecond) cc.Close() wg.Wait() - servers[0].stop() } func TestGetOnWaitChannel(t *testing.T) { - servers, r := startServers(t, 1, math.MaxUint32) - cc, err := Dial("foo.bar.com", WithBalancer(RoundRobin(r)), WithBlock(), WithInsecure(), WithCodec(testCodec{})) + defer leakcheck.Check(t) + servers, r, cleanup := startServers(t, 1, math.MaxUint32) + defer cleanup() + cc, err := Dial("passthrough:///foo.bar.com", WithBalancer(RoundRobin(r)), WithBlock(), WithInsecure(), WithCodec(testCodec{})) if err != nil { t.Fatalf("Failed to create ClientConn: %v", err) } + defer cc.Close() // Remove all servers so that all upcoming RPCs will block on waitCh. updates := []*naming.Update{{ Op: naming.Delete, - Addr: "127.0.0.1:" + servers[0].port, + Addr: "localhost:" + servers[0].port, }} r.w.inject(updates) for { var reply string - ctx, _ := context.WithTimeout(context.Background(), 10*time.Millisecond) - if err := Invoke(ctx, "/foo/bar", &expectedRequest, &reply, cc, FailFast(false)); Code(err) == codes.DeadlineExceeded { + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Millisecond) + if err := Invoke(ctx, "/foo/bar", &expectedRequest, &reply, cc, FailFast(false)); status.Code(err) == codes.DeadlineExceeded { + cancel() break } + cancel() time.Sleep(10 * time.Millisecond) } var wg sync.WaitGroup @@ -312,35 +321,36 @@ func TestGetOnWaitChannel(t *testing.T) { // Add a connected server to get the above RPC through. updates = []*naming.Update{{ Op: naming.Add, - Addr: "127.0.0.1:" + servers[0].port, + Addr: "localhost:" + servers[0].port, }} r.w.inject(updates) // Wait until the above RPC succeeds. wg.Wait() - cc.Close() - servers[0].stop() } func TestOneServerDown(t *testing.T) { + defer leakcheck.Check(t) // Start 2 servers. numServers := 2 - servers, r := startServers(t, numServers, math.MaxUint32) - cc, err := Dial("foo.bar.com", WithBalancer(RoundRobin(r)), WithBlock(), WithInsecure(), WithCodec(testCodec{})) + servers, r, cleanup := startServers(t, numServers, math.MaxUint32) + defer cleanup() + cc, err := Dial("passthrough:///foo.bar.com", WithBalancer(RoundRobin(r)), WithBlock(), WithInsecure(), WithCodec(testCodec{}), WithWaitForHandshake()) if err != nil { t.Fatalf("Failed to create ClientConn: %v", err) } + defer cc.Close() // Add servers[1] to the service discovery. var updates []*naming.Update updates = append(updates, &naming.Update{ Op: naming.Add, - Addr: "127.0.0.1:" + servers[1].port, + Addr: "localhost:" + servers[1].port, }) r.w.inject(updates) req := "port" var reply string // Loop until servers[1] is up for { - if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err != nil && ErrorDesc(err) == servers[1].port { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err != nil && errorDesc(err) == servers[1].port { break } time.Sleep(10 * time.Millisecond) @@ -369,32 +379,31 @@ func TestOneServerDown(t *testing.T) { }() } wg.Wait() - cc.Close() - for i := 0; i < numServers; i++ { - servers[i].stop() - } } func TestOneAddressRemoval(t *testing.T) { + defer leakcheck.Check(t) // Start 2 servers. numServers := 2 - servers, r := startServers(t, numServers, math.MaxUint32) - cc, err := Dial("foo.bar.com", WithBalancer(RoundRobin(r)), WithBlock(), WithInsecure(), WithCodec(testCodec{})) + servers, r, cleanup := startServers(t, numServers, math.MaxUint32) + defer cleanup() + cc, err := Dial("passthrough:///foo.bar.com", WithBalancer(RoundRobin(r)), WithBlock(), WithInsecure(), WithCodec(testCodec{})) if err != nil { t.Fatalf("Failed to create ClientConn: %v", err) } + defer cc.Close() // Add servers[1] to the service discovery. var updates []*naming.Update updates = append(updates, &naming.Update{ Op: naming.Add, - Addr: "127.0.0.1:" + servers[1].port, + Addr: "localhost:" + servers[1].port, }) r.w.inject(updates) req := "port" var reply string // Loop until servers[1] is up for { - if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err != nil && ErrorDesc(err) == servers[1].port { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err != nil && errorDesc(err) == servers[1].port { break } time.Sleep(10 * time.Millisecond) @@ -410,7 +419,7 @@ func TestOneAddressRemoval(t *testing.T) { var updates []*naming.Update updates = append(updates, &naming.Update{ Op: naming.Delete, - Addr: "127.0.0.1:" + servers[0].port, + Addr: "localhost:" + servers[0].port, }) r.w.inject(updates) wg.Done() @@ -431,8 +440,365 @@ func TestOneAddressRemoval(t *testing.T) { }() } wg.Wait() +} + +func checkServerUp(t *testing.T, currentServer *server) { + req := "port" + port := currentServer.port + cc, err := Dial("passthrough:///localhost:"+port, WithBlock(), WithInsecure(), WithCodec(testCodec{})) + if err != nil { + t.Fatalf("Failed to create ClientConn: %v", err) + } + defer cc.Close() + var reply string + for { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err != nil && errorDesc(err) == port { + break + } + time.Sleep(10 * time.Millisecond) + } +} + +func TestPickFirstEmptyAddrs(t *testing.T) { + defer leakcheck.Check(t) + servers, r, cleanup := startServers(t, 1, math.MaxUint32) + defer cleanup() + cc, err := Dial("passthrough:///foo.bar.com", WithBalancer(pickFirstBalancerV1(r)), WithBlock(), WithInsecure(), WithCodec(testCodec{})) + if err != nil { + t.Fatalf("Failed to create ClientConn: %v", err) + } + defer cc.Close() + var reply string + if err := Invoke(context.Background(), "/foo/bar", &expectedRequest, &reply, cc); err != nil || reply != expectedResponse { + t.Fatalf("grpc.Invoke(_, _, _, _, _) = %v, reply = %q, want %q, ", err, reply, expectedResponse) + } + // Inject name resolution change to remove the server so that there is no address + // available after that. + u := &naming.Update{ + Op: naming.Delete, + Addr: "localhost:" + servers[0].port, + } + r.w.inject([]*naming.Update{u}) + // Loop until the above updates apply. + for { + time.Sleep(10 * time.Millisecond) + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Millisecond) + if err := Invoke(ctx, "/foo/bar", &expectedRequest, &reply, cc); err != nil { + cancel() + break + } + cancel() + } +} + +func TestPickFirstCloseWithPendingRPC(t *testing.T) { + defer leakcheck.Check(t) + servers, r, cleanup := startServers(t, 1, math.MaxUint32) + defer cleanup() + cc, err := Dial("passthrough:///foo.bar.com", WithBalancer(pickFirstBalancerV1(r)), WithBlock(), WithInsecure(), WithCodec(testCodec{})) + if err != nil { + t.Fatalf("Failed to create ClientConn: %v", err) + } + defer cc.Close() + var reply string + if err := Invoke(context.Background(), "/foo/bar", &expectedRequest, &reply, cc, FailFast(false)); err != nil { + t.Fatalf("grpc.Invoke(_, _, _, _, _) = %v, want %s", err, servers[0].port) + } + // Remove the server. + updates := []*naming.Update{{ + Op: naming.Delete, + Addr: "localhost:" + servers[0].port, + }} + r.w.inject(updates) + // Loop until the above update applies. + for { + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Millisecond) + if err := Invoke(ctx, "/foo/bar", &expectedRequest, &reply, cc, FailFast(false)); status.Code(err) == codes.DeadlineExceeded { + cancel() + break + } + time.Sleep(10 * time.Millisecond) + cancel() + } + // Issue 2 RPCs which should be completed with error status once cc is closed. + var wg sync.WaitGroup + wg.Add(2) + go func() { + defer wg.Done() + var reply string + if err := Invoke(context.Background(), "/foo/bar", &expectedRequest, &reply, cc, FailFast(false)); err == nil { + t.Errorf("grpc.Invoke(_, _, _, _, _) = %v, want not nil", err) + } + }() + go func() { + defer wg.Done() + var reply string + time.Sleep(5 * time.Millisecond) + if err := Invoke(context.Background(), "/foo/bar", &expectedRequest, &reply, cc, FailFast(false)); err == nil { + t.Errorf("grpc.Invoke(_, _, _, _, _) = %v, want not nil", err) + } + }() + time.Sleep(5 * time.Millisecond) cc.Close() - for i := 0; i < numServers; i++ { - servers[i].stop() + wg.Wait() +} + +func TestPickFirstOrderAllServerUp(t *testing.T) { + defer leakcheck.Check(t) + // Start 3 servers on 3 ports. + numServers := 3 + servers, r, cleanup := startServers(t, numServers, math.MaxUint32) + defer cleanup() + cc, err := Dial("passthrough:///foo.bar.com", WithBalancer(pickFirstBalancerV1(r)), WithBlock(), WithInsecure(), WithCodec(testCodec{})) + if err != nil { + t.Fatalf("Failed to create ClientConn: %v", err) + } + defer cc.Close() + // Add servers[1] and [2] to the service discovery. + u := &naming.Update{ + Op: naming.Add, + Addr: "localhost:" + servers[1].port, + } + r.w.inject([]*naming.Update{u}) + + u = &naming.Update{ + Op: naming.Add, + Addr: "localhost:" + servers[2].port, + } + r.w.inject([]*naming.Update{u}) + + // Loop until all 3 servers are up + checkServerUp(t, servers[0]) + checkServerUp(t, servers[1]) + checkServerUp(t, servers[2]) + + // Check the incoming RPCs served in server[0] + req := "port" + var reply string + for i := 0; i < 20; i++ { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err == nil || errorDesc(err) != servers[0].port { + t.Fatalf("Index %d: Invoke(_, _, _, _, _) = %v, want %s", 0, err, servers[0].port) + } + time.Sleep(10 * time.Millisecond) + } + + // Delete server[0] in the balancer, the incoming RPCs served in server[1] + // For test addrconn, close server[0] instead + u = &naming.Update{ + Op: naming.Delete, + Addr: "localhost:" + servers[0].port, + } + r.w.inject([]*naming.Update{u}) + // Loop until it changes to server[1] + for { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err != nil && errorDesc(err) == servers[1].port { + break + } + time.Sleep(10 * time.Millisecond) + } + for i := 0; i < 20; i++ { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err == nil || errorDesc(err) != servers[1].port { + t.Fatalf("Index %d: Invoke(_, _, _, _, _) = %v, want %s", 1, err, servers[1].port) + } + time.Sleep(10 * time.Millisecond) + } + + // Add server[0] back to the balancer, the incoming RPCs served in server[1] + // Add is append operation, the order of Notify now is {server[1].port server[2].port server[0].port} + u = &naming.Update{ + Op: naming.Add, + Addr: "localhost:" + servers[0].port, + } + r.w.inject([]*naming.Update{u}) + for i := 0; i < 20; i++ { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err == nil || errorDesc(err) != servers[1].port { + t.Fatalf("Index %d: Invoke(_, _, _, _, _) = %v, want %s", 1, err, servers[1].port) + } + time.Sleep(10 * time.Millisecond) + } + + // Delete server[1] in the balancer, the incoming RPCs served in server[2] + u = &naming.Update{ + Op: naming.Delete, + Addr: "localhost:" + servers[1].port, + } + r.w.inject([]*naming.Update{u}) + for { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err != nil && errorDesc(err) == servers[2].port { + break + } + time.Sleep(1 * time.Second) + } + for i := 0; i < 20; i++ { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err == nil || errorDesc(err) != servers[2].port { + t.Fatalf("Index %d: Invoke(_, _, _, _, _) = %v, want %s", 2, err, servers[2].port) + } + time.Sleep(10 * time.Millisecond) + } + + // Delete server[2] in the balancer, the incoming RPCs served in server[0] + u = &naming.Update{ + Op: naming.Delete, + Addr: "localhost:" + servers[2].port, + } + r.w.inject([]*naming.Update{u}) + for { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err != nil && errorDesc(err) == servers[0].port { + break + } + time.Sleep(1 * time.Second) + } + for i := 0; i < 20; i++ { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err == nil || errorDesc(err) != servers[0].port { + t.Fatalf("Index %d: Invoke(_, _, _, _, _) = %v, want %s", 0, err, servers[0].port) + } + time.Sleep(10 * time.Millisecond) + } +} + +func TestPickFirstOrderOneServerDown(t *testing.T) { + defer leakcheck.Check(t) + // Start 3 servers on 3 ports. + numServers := 3 + servers, r, cleanup := startServers(t, numServers, math.MaxUint32) + defer cleanup() + cc, err := Dial("passthrough:///foo.bar.com", WithBalancer(pickFirstBalancerV1(r)), WithBlock(), WithInsecure(), WithCodec(testCodec{}), WithWaitForHandshake()) + if err != nil { + t.Fatalf("Failed to create ClientConn: %v", err) + } + defer cc.Close() + // Add servers[1] and [2] to the service discovery. + u := &naming.Update{ + Op: naming.Add, + Addr: "localhost:" + servers[1].port, + } + r.w.inject([]*naming.Update{u}) + + u = &naming.Update{ + Op: naming.Add, + Addr: "localhost:" + servers[2].port, + } + r.w.inject([]*naming.Update{u}) + + // Loop until all 3 servers are up + checkServerUp(t, servers[0]) + checkServerUp(t, servers[1]) + checkServerUp(t, servers[2]) + + // Check the incoming RPCs served in server[0] + req := "port" + var reply string + for i := 0; i < 20; i++ { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err == nil || errorDesc(err) != servers[0].port { + t.Fatalf("Index %d: Invoke(_, _, _, _, _) = %v, want %s", 0, err, servers[0].port) + } + time.Sleep(10 * time.Millisecond) + } + + // server[0] down, incoming RPCs served in server[1], but the order of Notify still remains + // {server[0] server[1] server[2]} + servers[0].stop() + // Loop until it changes to server[1] + for { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err != nil && errorDesc(err) == servers[1].port { + break + } + time.Sleep(10 * time.Millisecond) + } + for i := 0; i < 20; i++ { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err == nil || errorDesc(err) != servers[1].port { + t.Fatalf("Index %d: Invoke(_, _, _, _, _) = %v, want %s", 1, err, servers[1].port) + } + time.Sleep(10 * time.Millisecond) + } + + // up the server[0] back, the incoming RPCs served in server[1] + p, _ := strconv.Atoi(servers[0].port) + servers[0] = newTestServer() + go servers[0].start(t, p, math.MaxUint32) + defer servers[0].stop() + servers[0].wait(t, 2*time.Second) + checkServerUp(t, servers[0]) + + for i := 0; i < 20; i++ { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err == nil || errorDesc(err) != servers[1].port { + t.Fatalf("Index %d: Invoke(_, _, _, _, _) = %v, want %s", 1, err, servers[1].port) + } + time.Sleep(10 * time.Millisecond) + } + + // Delete server[1] in the balancer, the incoming RPCs served in server[0] + u = &naming.Update{ + Op: naming.Delete, + Addr: "localhost:" + servers[1].port, + } + r.w.inject([]*naming.Update{u}) + for { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err != nil && errorDesc(err) == servers[0].port { + break + } + time.Sleep(1 * time.Second) + } + for i := 0; i < 20; i++ { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err == nil || errorDesc(err) != servers[0].port { + t.Fatalf("Index %d: Invoke(_, _, _, _, _) = %v, want %s", 0, err, servers[0].port) + } + time.Sleep(10 * time.Millisecond) + } +} + +func TestPickFirstOneAddressRemoval(t *testing.T) { + defer leakcheck.Check(t) + // Start 2 servers. + numServers := 2 + servers, r, cleanup := startServers(t, numServers, math.MaxUint32) + defer cleanup() + cc, err := Dial("passthrough:///localhost:"+servers[0].port, WithBalancer(pickFirstBalancerV1(r)), WithBlock(), WithInsecure(), WithCodec(testCodec{})) + if err != nil { + t.Fatalf("Failed to create ClientConn: %v", err) + } + defer cc.Close() + // Add servers[1] to the service discovery. + var updates []*naming.Update + updates = append(updates, &naming.Update{ + Op: naming.Add, + Addr: "localhost:" + servers[1].port, + }) + r.w.inject(updates) + + // Create a new cc to Loop until servers[1] is up + checkServerUp(t, servers[0]) + checkServerUp(t, servers[1]) + + var wg sync.WaitGroup + numRPC := 100 + sleepDuration := 10 * time.Millisecond + wg.Add(1) + go func() { + time.Sleep(sleepDuration) + // After sleepDuration, delete server[0]. + var updates []*naming.Update + updates = append(updates, &naming.Update{ + Op: naming.Delete, + Addr: "localhost:" + servers[0].port, + }) + r.w.inject(updates) + wg.Done() + }() + + // All non-failfast RPCs should not fail because there's at least one connection available. + for i := 0; i < numRPC; i++ { + wg.Add(1) + go func() { + var reply string + time.Sleep(sleepDuration) + // After sleepDuration, invoke RPC. + // server[0] is removed around the same time to make it racy between balancer and gRPC internals. + if err := Invoke(context.Background(), "/foo/bar", &expectedRequest, &reply, cc, FailFast(false)); err != nil { + t.Errorf("grpc.Invoke(_, _, _, _, _) = %v, want not nil", err) + } + wg.Done() + }() } + wg.Wait() } diff --git a/vendor/google.golang.org/grpc/balancer_v1_wrapper.go b/vendor/google.golang.org/grpc/balancer_v1_wrapper.go new file mode 100644 index 0000000..faabf87 --- /dev/null +++ b/vendor/google.golang.org/grpc/balancer_v1_wrapper.go @@ -0,0 +1,375 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package grpc + +import ( + "strings" + "sync" + + "golang.org/x/net/context" + "google.golang.org/grpc/balancer" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/connectivity" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/resolver" + "google.golang.org/grpc/status" +) + +type balancerWrapperBuilder struct { + b Balancer // The v1 balancer. +} + +func (bwb *balancerWrapperBuilder) Build(cc balancer.ClientConn, opts balancer.BuildOptions) balancer.Balancer { + targetAddr := cc.Target() + targetSplitted := strings.Split(targetAddr, ":///") + if len(targetSplitted) >= 2 { + targetAddr = targetSplitted[1] + } + + bwb.b.Start(targetAddr, BalancerConfig{ + DialCreds: opts.DialCreds, + Dialer: opts.Dialer, + }) + _, pickfirst := bwb.b.(*pickFirst) + bw := &balancerWrapper{ + balancer: bwb.b, + pickfirst: pickfirst, + cc: cc, + targetAddr: targetAddr, + startCh: make(chan struct{}), + conns: make(map[resolver.Address]balancer.SubConn), + connSt: make(map[balancer.SubConn]*scState), + csEvltr: &connectivityStateEvaluator{}, + state: connectivity.Idle, + } + cc.UpdateBalancerState(connectivity.Idle, bw) + go bw.lbWatcher() + return bw +} + +func (bwb *balancerWrapperBuilder) Name() string { + return "wrapper" +} + +type scState struct { + addr Address // The v1 address type. + s connectivity.State + down func(error) +} + +type balancerWrapper struct { + balancer Balancer // The v1 balancer. + pickfirst bool + + cc balancer.ClientConn + targetAddr string // Target without the scheme. + + // To aggregate the connectivity state. + csEvltr *connectivityStateEvaluator + state connectivity.State + + mu sync.Mutex + conns map[resolver.Address]balancer.SubConn + connSt map[balancer.SubConn]*scState + // This channel is closed when handling the first resolver result. + // lbWatcher blocks until this is closed, to avoid race between + // - NewSubConn is created, cc wants to notify balancer of state changes; + // - Build hasn't return, cc doesn't have access to balancer. + startCh chan struct{} +} + +// lbWatcher watches the Notify channel of the balancer and manages +// connections accordingly. +func (bw *balancerWrapper) lbWatcher() { + <-bw.startCh + notifyCh := bw.balancer.Notify() + if notifyCh == nil { + // There's no resolver in the balancer. Connect directly. + a := resolver.Address{ + Addr: bw.targetAddr, + Type: resolver.Backend, + } + sc, err := bw.cc.NewSubConn([]resolver.Address{a}, balancer.NewSubConnOptions{}) + if err != nil { + grpclog.Warningf("Error creating connection to %v. Err: %v", a, err) + } else { + bw.mu.Lock() + bw.conns[a] = sc + bw.connSt[sc] = &scState{ + addr: Address{Addr: bw.targetAddr}, + s: connectivity.Idle, + } + bw.mu.Unlock() + sc.Connect() + } + return + } + + for addrs := range notifyCh { + grpclog.Infof("balancerWrapper: got update addr from Notify: %v\n", addrs) + if bw.pickfirst { + var ( + oldA resolver.Address + oldSC balancer.SubConn + ) + bw.mu.Lock() + for oldA, oldSC = range bw.conns { + break + } + bw.mu.Unlock() + if len(addrs) <= 0 { + if oldSC != nil { + // Teardown old sc. + bw.mu.Lock() + delete(bw.conns, oldA) + delete(bw.connSt, oldSC) + bw.mu.Unlock() + bw.cc.RemoveSubConn(oldSC) + } + continue + } + + var newAddrs []resolver.Address + for _, a := range addrs { + newAddr := resolver.Address{ + Addr: a.Addr, + Type: resolver.Backend, // All addresses from balancer are all backends. + ServerName: "", + Metadata: a.Metadata, + } + newAddrs = append(newAddrs, newAddr) + } + if oldSC == nil { + // Create new sc. + sc, err := bw.cc.NewSubConn(newAddrs, balancer.NewSubConnOptions{}) + if err != nil { + grpclog.Warningf("Error creating connection to %v. Err: %v", newAddrs, err) + } else { + bw.mu.Lock() + // For pickfirst, there should be only one SubConn, so the + // address doesn't matter. All states updating (up and down) + // and picking should all happen on that only SubConn. + bw.conns[resolver.Address{}] = sc + bw.connSt[sc] = &scState{ + addr: addrs[0], // Use the first address. + s: connectivity.Idle, + } + bw.mu.Unlock() + sc.Connect() + } + } else { + bw.mu.Lock() + bw.connSt[oldSC].addr = addrs[0] + bw.mu.Unlock() + oldSC.UpdateAddresses(newAddrs) + } + } else { + var ( + add []resolver.Address // Addresses need to setup connections. + del []balancer.SubConn // Connections need to tear down. + ) + resAddrs := make(map[resolver.Address]Address) + for _, a := range addrs { + resAddrs[resolver.Address{ + Addr: a.Addr, + Type: resolver.Backend, // All addresses from balancer are all backends. + ServerName: "", + Metadata: a.Metadata, + }] = a + } + bw.mu.Lock() + for a := range resAddrs { + if _, ok := bw.conns[a]; !ok { + add = append(add, a) + } + } + for a, c := range bw.conns { + if _, ok := resAddrs[a]; !ok { + del = append(del, c) + delete(bw.conns, a) + // Keep the state of this sc in bw.connSt until its state becomes Shutdown. + } + } + bw.mu.Unlock() + for _, a := range add { + sc, err := bw.cc.NewSubConn([]resolver.Address{a}, balancer.NewSubConnOptions{}) + if err != nil { + grpclog.Warningf("Error creating connection to %v. Err: %v", a, err) + } else { + bw.mu.Lock() + bw.conns[a] = sc + bw.connSt[sc] = &scState{ + addr: resAddrs[a], + s: connectivity.Idle, + } + bw.mu.Unlock() + sc.Connect() + } + } + for _, c := range del { + bw.cc.RemoveSubConn(c) + } + } + } +} + +func (bw *balancerWrapper) HandleSubConnStateChange(sc balancer.SubConn, s connectivity.State) { + bw.mu.Lock() + defer bw.mu.Unlock() + scSt, ok := bw.connSt[sc] + if !ok { + return + } + if s == connectivity.Idle { + sc.Connect() + } + oldS := scSt.s + scSt.s = s + if oldS != connectivity.Ready && s == connectivity.Ready { + scSt.down = bw.balancer.Up(scSt.addr) + } else if oldS == connectivity.Ready && s != connectivity.Ready { + if scSt.down != nil { + scSt.down(errConnClosing) + } + } + sa := bw.csEvltr.recordTransition(oldS, s) + if bw.state != sa { + bw.state = sa + } + bw.cc.UpdateBalancerState(bw.state, bw) + if s == connectivity.Shutdown { + // Remove state for this sc. + delete(bw.connSt, sc) + } + return +} + +func (bw *balancerWrapper) HandleResolvedAddrs([]resolver.Address, error) { + bw.mu.Lock() + defer bw.mu.Unlock() + select { + case <-bw.startCh: + default: + close(bw.startCh) + } + // There should be a resolver inside the balancer. + // All updates here, if any, are ignored. + return +} + +func (bw *balancerWrapper) Close() { + bw.mu.Lock() + defer bw.mu.Unlock() + select { + case <-bw.startCh: + default: + close(bw.startCh) + } + bw.balancer.Close() + return +} + +// The picker is the balancerWrapper itself. +// Pick should never return ErrNoSubConnAvailable. +// It either blocks or returns error, consistent with v1 balancer Get(). +func (bw *balancerWrapper) Pick(ctx context.Context, opts balancer.PickOptions) (balancer.SubConn, func(balancer.DoneInfo), error) { + failfast := true // Default failfast is true. + if ss, ok := rpcInfoFromContext(ctx); ok { + failfast = ss.failfast + } + a, p, err := bw.balancer.Get(ctx, BalancerGetOptions{BlockingWait: !failfast}) + if err != nil { + return nil, nil, err + } + var done func(balancer.DoneInfo) + if p != nil { + done = func(i balancer.DoneInfo) { p() } + } + var sc balancer.SubConn + bw.mu.Lock() + defer bw.mu.Unlock() + if bw.pickfirst { + // Get the first sc in conns. + for _, sc = range bw.conns { + break + } + } else { + var ok bool + sc, ok = bw.conns[resolver.Address{ + Addr: a.Addr, + Type: resolver.Backend, + ServerName: "", + Metadata: a.Metadata, + }] + if !ok && failfast { + return nil, nil, status.Errorf(codes.Unavailable, "there is no connection available") + } + if s, ok := bw.connSt[sc]; failfast && (!ok || s.s != connectivity.Ready) { + // If the returned sc is not ready and RPC is failfast, + // return error, and this RPC will fail. + return nil, nil, status.Errorf(codes.Unavailable, "there is no connection available") + } + } + + return sc, done, nil +} + +// connectivityStateEvaluator gets updated by addrConns when their +// states transition, based on which it evaluates the state of +// ClientConn. +type connectivityStateEvaluator struct { + mu sync.Mutex + numReady uint64 // Number of addrConns in ready state. + numConnecting uint64 // Number of addrConns in connecting state. + numTransientFailure uint64 // Number of addrConns in transientFailure. +} + +// recordTransition records state change happening in every subConn and based on +// that it evaluates what aggregated state should be. +// It can only transition between Ready, Connecting and TransientFailure. Other states, +// Idle and Shutdown are transitioned into by ClientConn; in the beginning of the connection +// before any subConn is created ClientConn is in idle state. In the end when ClientConn +// closes it is in Shutdown state. +// TODO Note that in later releases, a ClientConn with no activity will be put into an Idle state. +func (cse *connectivityStateEvaluator) recordTransition(oldState, newState connectivity.State) connectivity.State { + cse.mu.Lock() + defer cse.mu.Unlock() + + // Update counters. + for idx, state := range []connectivity.State{oldState, newState} { + updateVal := 2*uint64(idx) - 1 // -1 for oldState and +1 for new. + switch state { + case connectivity.Ready: + cse.numReady += updateVal + case connectivity.Connecting: + cse.numConnecting += updateVal + case connectivity.TransientFailure: + cse.numTransientFailure += updateVal + } + } + + // Evaluate. + if cse.numReady > 0 { + return connectivity.Ready + } + if cse.numConnecting > 0 { + return connectivity.Connecting + } + return connectivity.TransientFailure +} diff --git a/vendor/google.golang.org/grpc/benchmark/benchmain/main.go b/vendor/google.golang.org/grpc/benchmark/benchmain/main.go new file mode 100644 index 0000000..d9c63ae --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/benchmain/main.go @@ -0,0 +1,539 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +/* +Package main provides benchmark with setting flags. + +An example to run some benchmarks with profiling enabled: + +go run benchmark/benchmain/main.go -benchtime=10s -workloads=all \ + -compression=on -maxConcurrentCalls=1 -trace=off \ + -reqSizeBytes=1,1048576 -respSizeBytes=1,1048576 -networkMode=Local \ + -cpuProfile=cpuProf -memProfile=memProf -memProfileRate=10000 -resultFile=result + +As a suggestion, when creating a branch, you can run this benchmark and save the result +file "-resultFile=basePerf", and later when you at the middle of the work or finish the +work, you can get the benchmark result and compare it with the base anytime. + +Assume there are two result files names as "basePerf" and "curPerf" created by adding +-resultFile=basePerf and -resultFile=curPerf. + To format the curPerf, run: + go run benchmark/benchresult/main.go curPerf + To observe how the performance changes based on a base result, run: + go run benchmark/benchresult/main.go basePerf curPerf +*/ +package main + +import ( + "encoding/gob" + "errors" + "flag" + "fmt" + "io" + "io/ioutil" + "log" + "net" + "os" + "reflect" + "runtime" + "runtime/pprof" + "strconv" + "strings" + "sync" + "sync/atomic" + "testing" + "time" + + "golang.org/x/net/context" + "google.golang.org/grpc" + bm "google.golang.org/grpc/benchmark" + testpb "google.golang.org/grpc/benchmark/grpc_testing" + "google.golang.org/grpc/benchmark/latency" + "google.golang.org/grpc/benchmark/stats" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/test/bufconn" +) + +const ( + modeOn = "on" + modeOff = "off" + modeBoth = "both" +) + +var allCompressionModes = []string{modeOn, modeOff, modeBoth} +var allTraceModes = []string{modeOn, modeOff, modeBoth} + +const ( + workloadsUnary = "unary" + workloadsStreaming = "streaming" + workloadsAll = "all" +) + +var allWorkloads = []string{workloadsUnary, workloadsStreaming, workloadsAll} + +var ( + runMode = []bool{true, true} // {runUnary, runStream} + // When set the latency to 0 (no delay), the result is slower than the real result with no delay + // because latency simulation section has extra operations + ltc = []time.Duration{0, 40 * time.Millisecond} // if non-positive, no delay. + kbps = []int{0, 10240} // if non-positive, infinite + mtu = []int{0} // if non-positive, infinite + maxConcurrentCalls = []int{1, 8, 64, 512} + reqSizeBytes = []int{1, 1024, 1024 * 1024} + respSizeBytes = []int{1, 1024, 1024 * 1024} + enableTrace []bool + benchtime time.Duration + memProfile, cpuProfile string + memProfileRate int + enableCompressor []bool + networkMode string + benchmarkResultFile string + networks = map[string]latency.Network{ + "Local": latency.Local, + "LAN": latency.LAN, + "WAN": latency.WAN, + "Longhaul": latency.Longhaul, + } +) + +func unaryBenchmark(startTimer func(), stopTimer func(int32), benchFeatures stats.Features, benchtime time.Duration, s *stats.Stats) { + caller, close := makeFuncUnary(benchFeatures) + defer close() + runBenchmark(caller, startTimer, stopTimer, benchFeatures, benchtime, s) +} + +func streamBenchmark(startTimer func(), stopTimer func(int32), benchFeatures stats.Features, benchtime time.Duration, s *stats.Stats) { + caller, close := makeFuncStream(benchFeatures) + defer close() + runBenchmark(caller, startTimer, stopTimer, benchFeatures, benchtime, s) +} + +func makeFuncUnary(benchFeatures stats.Features) (func(int), func()) { + nw := &latency.Network{Kbps: benchFeatures.Kbps, Latency: benchFeatures.Latency, MTU: benchFeatures.Mtu} + opts := []grpc.DialOption{} + sopts := []grpc.ServerOption{} + if benchFeatures.EnableCompressor { + sopts = append(sopts, + grpc.RPCCompressor(nopCompressor{}), + grpc.RPCDecompressor(nopDecompressor{}), + ) + opts = append(opts, + grpc.WithCompressor(nopCompressor{}), + grpc.WithDecompressor(nopDecompressor{}), + ) + } + sopts = append(sopts, grpc.MaxConcurrentStreams(uint32(benchFeatures.MaxConcurrentCalls+1))) + opts = append(opts, grpc.WithInsecure()) + + var lis net.Listener + if *useBufconn { + bcLis := bufconn.Listen(256 * 1024) + lis = bcLis + opts = append(opts, grpc.WithDialer(func(string, time.Duration) (net.Conn, error) { + return nw.TimeoutDialer( + func(string, string, time.Duration) (net.Conn, error) { + return bcLis.Dial() + })("", "", 0) + })) + } else { + var err error + lis, err = net.Listen("tcp", "localhost:0") + if err != nil { + grpclog.Fatalf("Failed to listen: %v", err) + } + opts = append(opts, grpc.WithDialer(func(_ string, timeout time.Duration) (net.Conn, error) { + return nw.TimeoutDialer(net.DialTimeout)("tcp", lis.Addr().String(), timeout) + })) + } + lis = nw.Listener(lis) + stopper := bm.StartServer(bm.ServerInfo{Type: "protobuf", Listener: lis}, sopts...) + conn := bm.NewClientConn("" /* target not used */, opts...) + tc := testpb.NewBenchmarkServiceClient(conn) + return func(int) { + unaryCaller(tc, benchFeatures.ReqSizeBytes, benchFeatures.RespSizeBytes) + }, func() { + conn.Close() + stopper() + } +} + +func makeFuncStream(benchFeatures stats.Features) (func(int), func()) { + // TODO: Refactor to remove duplication with makeFuncUnary. + nw := &latency.Network{Kbps: benchFeatures.Kbps, Latency: benchFeatures.Latency, MTU: benchFeatures.Mtu} + opts := []grpc.DialOption{} + sopts := []grpc.ServerOption{} + if benchFeatures.EnableCompressor { + sopts = append(sopts, + grpc.RPCCompressor(grpc.NewGZIPCompressor()), + grpc.RPCDecompressor(grpc.NewGZIPDecompressor()), + ) + opts = append(opts, + grpc.WithCompressor(grpc.NewGZIPCompressor()), + grpc.WithDecompressor(grpc.NewGZIPDecompressor()), + ) + } + sopts = append(sopts, grpc.MaxConcurrentStreams(uint32(benchFeatures.MaxConcurrentCalls+1))) + opts = append(opts, grpc.WithInsecure()) + + var lis net.Listener + if *useBufconn { + bcLis := bufconn.Listen(256 * 1024) + lis = bcLis + opts = append(opts, grpc.WithDialer(func(string, time.Duration) (net.Conn, error) { + return nw.TimeoutDialer( + func(string, string, time.Duration) (net.Conn, error) { + return bcLis.Dial() + })("", "", 0) + })) + } else { + var err error + lis, err = net.Listen("tcp", "localhost:0") + if err != nil { + grpclog.Fatalf("Failed to listen: %v", err) + } + opts = append(opts, grpc.WithDialer(func(_ string, timeout time.Duration) (net.Conn, error) { + return nw.TimeoutDialer(net.DialTimeout)("tcp", lis.Addr().String(), timeout) + })) + } + lis = nw.Listener(lis) + stopper := bm.StartServer(bm.ServerInfo{Type: "protobuf", Listener: lis}, sopts...) + conn := bm.NewClientConn("" /* target not used */, opts...) + tc := testpb.NewBenchmarkServiceClient(conn) + streams := make([]testpb.BenchmarkService_StreamingCallClient, benchFeatures.MaxConcurrentCalls) + for i := 0; i < benchFeatures.MaxConcurrentCalls; i++ { + stream, err := tc.StreamingCall(context.Background()) + if err != nil { + grpclog.Fatalf("%v.StreamingCall(_) = _, %v", tc, err) + } + streams[i] = stream + } + return func(pos int) { + streamCaller(streams[pos], benchFeatures.ReqSizeBytes, benchFeatures.RespSizeBytes) + }, func() { + conn.Close() + stopper() + } +} + +func unaryCaller(client testpb.BenchmarkServiceClient, reqSize, respSize int) { + if err := bm.DoUnaryCall(client, reqSize, respSize); err != nil { + grpclog.Fatalf("DoUnaryCall failed: %v", err) + } +} + +func streamCaller(stream testpb.BenchmarkService_StreamingCallClient, reqSize, respSize int) { + if err := bm.DoStreamingRoundTrip(stream, reqSize, respSize); err != nil { + grpclog.Fatalf("DoStreamingRoundTrip failed: %v", err) + } +} + +func runBenchmark(caller func(int), startTimer func(), stopTimer func(int32), benchFeatures stats.Features, benchtime time.Duration, s *stats.Stats) { + // Warm up connection. + for i := 0; i < 10; i++ { + caller(0) + } + // Run benchmark. + startTimer() + var ( + mu sync.Mutex + wg sync.WaitGroup + ) + wg.Add(benchFeatures.MaxConcurrentCalls) + bmEnd := time.Now().Add(benchtime) + var count int32 + for i := 0; i < benchFeatures.MaxConcurrentCalls; i++ { + go func(pos int) { + for { + t := time.Now() + if t.After(bmEnd) { + break + } + start := time.Now() + caller(pos) + elapse := time.Since(start) + atomic.AddInt32(&count, 1) + mu.Lock() + s.Add(elapse) + mu.Unlock() + } + wg.Done() + }(i) + } + wg.Wait() + stopTimer(count) +} + +var useBufconn = flag.Bool("bufconn", false, "Use in-memory connection instead of system network I/O") + +// Initiate main function to get settings of features. +func init() { + var ( + workloads, traceMode, compressorMode, readLatency string + readKbps, readMtu, readMaxConcurrentCalls intSliceType + readReqSizeBytes, readRespSizeBytes intSliceType + ) + flag.StringVar(&workloads, "workloads", workloadsAll, + fmt.Sprintf("Workloads to execute - One of: %v", strings.Join(allWorkloads, ", "))) + flag.StringVar(&traceMode, "trace", modeOff, + fmt.Sprintf("Trace mode - One of: %v", strings.Join(allTraceModes, ", "))) + flag.StringVar(&readLatency, "latency", "", "Simulated one-way network latency - may be a comma-separated list") + flag.DurationVar(&benchtime, "benchtime", time.Second, "Configures the amount of time to run each benchmark") + flag.Var(&readKbps, "kbps", "Simulated network throughput (in kbps) - may be a comma-separated list") + flag.Var(&readMtu, "mtu", "Simulated network MTU (Maximum Transmission Unit) - may be a comma-separated list") + flag.Var(&readMaxConcurrentCalls, "maxConcurrentCalls", "Number of concurrent RPCs during benchmarks") + flag.Var(&readReqSizeBytes, "reqSizeBytes", "Request size in bytes - may be a comma-separated list") + flag.Var(&readRespSizeBytes, "respSizeBytes", "Response size in bytes - may be a comma-separated list") + flag.StringVar(&memProfile, "memProfile", "", "Enables memory profiling output to the filename provided.") + flag.IntVar(&memProfileRate, "memProfileRate", 512*1024, "Configures the memory profiling rate. \n"+ + "memProfile should be set before setting profile rate. To include every allocated block in the profile, "+ + "set MemProfileRate to 1. To turn off profiling entirely, set MemProfileRate to 0. 512 * 1024 by default.") + flag.StringVar(&cpuProfile, "cpuProfile", "", "Enables CPU profiling output to the filename provided") + flag.StringVar(&compressorMode, "compression", modeOff, + fmt.Sprintf("Compression mode - One of: %v", strings.Join(allCompressionModes, ", "))) + flag.StringVar(&benchmarkResultFile, "resultFile", "", "Save the benchmark result into a binary file") + flag.StringVar(&networkMode, "networkMode", "", "Network mode includes LAN, WAN, Local and Longhaul") + flag.Parse() + if flag.NArg() != 0 { + log.Fatal("Error: unparsed arguments: ", flag.Args()) + } + switch workloads { + case workloadsUnary: + runMode[0] = true + runMode[1] = false + case workloadsStreaming: + runMode[0] = false + runMode[1] = true + case workloadsAll: + runMode[0] = true + runMode[1] = true + default: + log.Fatalf("Unknown workloads setting: %v (want one of: %v)", + workloads, strings.Join(allWorkloads, ", ")) + } + enableCompressor = setMode(compressorMode) + enableTrace = setMode(traceMode) + // Time input formats as (time + unit). + readTimeFromInput(<c, readLatency) + readIntFromIntSlice(&kbps, readKbps) + readIntFromIntSlice(&mtu, readMtu) + readIntFromIntSlice(&maxConcurrentCalls, readMaxConcurrentCalls) + readIntFromIntSlice(&reqSizeBytes, readReqSizeBytes) + readIntFromIntSlice(&respSizeBytes, readRespSizeBytes) + // Re-write latency, kpbs and mtu if network mode is set. + if network, ok := networks[networkMode]; ok { + ltc = []time.Duration{network.Latency} + kbps = []int{network.Kbps} + mtu = []int{network.MTU} + } +} + +func setMode(name string) []bool { + switch name { + case modeOn: + return []bool{true} + case modeOff: + return []bool{false} + case modeBoth: + return []bool{false, true} + default: + log.Fatalf("Unknown %s setting: %v (want one of: %v)", + name, name, strings.Join(allCompressionModes, ", ")) + return []bool{} + } +} + +type intSliceType []int + +func (intSlice *intSliceType) String() string { + return fmt.Sprintf("%v", *intSlice) +} + +func (intSlice *intSliceType) Set(value string) error { + if len(*intSlice) > 0 { + return errors.New("interval flag already set") + } + for _, num := range strings.Split(value, ",") { + next, err := strconv.Atoi(num) + if err != nil { + return err + } + *intSlice = append(*intSlice, next) + } + return nil +} + +func readIntFromIntSlice(values *[]int, replace intSliceType) { + // If not set replace in the flag, just return to run the default settings. + if len(replace) == 0 { + return + } + *values = replace +} + +func readTimeFromInput(values *[]time.Duration, replace string) { + if strings.Compare(replace, "") != 0 { + *values = []time.Duration{} + for _, ltc := range strings.Split(replace, ",") { + duration, err := time.ParseDuration(ltc) + if err != nil { + log.Fatal(err.Error()) + } + *values = append(*values, duration) + } + } +} + +func main() { + before() + featuresPos := make([]int, 8) + // 0:enableTracing 1:ltc 2:kbps 3:mtu 4:maxC 5:reqSize 6:respSize + featuresNum := []int{len(enableTrace), len(ltc), len(kbps), len(mtu), + len(maxConcurrentCalls), len(reqSizeBytes), len(respSizeBytes), len(enableCompressor)} + initalPos := make([]int, len(featuresPos)) + s := stats.NewStats(10) + s.SortLatency() + var memStats runtime.MemStats + var results testing.BenchmarkResult + var startAllocs, startBytes uint64 + var startTime time.Time + start := true + var startTimer = func() { + runtime.ReadMemStats(&memStats) + startAllocs = memStats.Mallocs + startBytes = memStats.TotalAlloc + startTime = time.Now() + } + var stopTimer = func(count int32) { + runtime.ReadMemStats(&memStats) + results = testing.BenchmarkResult{N: int(count), T: time.Now().Sub(startTime), + Bytes: 0, MemAllocs: memStats.Mallocs - startAllocs, MemBytes: memStats.TotalAlloc - startBytes} + } + sharedPos := make([]bool, len(featuresPos)) + for i := 0; i < len(featuresPos); i++ { + if featuresNum[i] <= 1 { + sharedPos[i] = true + } + } + + // Run benchmarks + resultSlice := []stats.BenchResults{} + for !reflect.DeepEqual(featuresPos, initalPos) || start { + start = false + benchFeature := stats.Features{ + NetworkMode: networkMode, + EnableTrace: enableTrace[featuresPos[0]], + Latency: ltc[featuresPos[1]], + Kbps: kbps[featuresPos[2]], + Mtu: mtu[featuresPos[3]], + MaxConcurrentCalls: maxConcurrentCalls[featuresPos[4]], + ReqSizeBytes: reqSizeBytes[featuresPos[5]], + RespSizeBytes: respSizeBytes[featuresPos[6]], + EnableCompressor: enableCompressor[featuresPos[7]], + } + + grpc.EnableTracing = enableTrace[featuresPos[0]] + if runMode[0] { + unaryBenchmark(startTimer, stopTimer, benchFeature, benchtime, s) + s.SetBenchmarkResult("Unary", benchFeature, results.N, + results.AllocedBytesPerOp(), results.AllocsPerOp(), sharedPos) + fmt.Println(s.BenchString()) + fmt.Println(s.String()) + resultSlice = append(resultSlice, s.GetBenchmarkResults()) + s.Clear() + } + if runMode[1] { + streamBenchmark(startTimer, stopTimer, benchFeature, benchtime, s) + s.SetBenchmarkResult("Stream", benchFeature, results.N, + results.AllocedBytesPerOp(), results.AllocsPerOp(), sharedPos) + fmt.Println(s.BenchString()) + fmt.Println(s.String()) + resultSlice = append(resultSlice, s.GetBenchmarkResults()) + s.Clear() + } + bm.AddOne(featuresPos, featuresNum) + } + after(resultSlice) +} + +func before() { + if memProfile != "" { + runtime.MemProfileRate = memProfileRate + } + if cpuProfile != "" { + f, err := os.Create(cpuProfile) + if err != nil { + fmt.Fprintf(os.Stderr, "testing: %s\n", err) + return + } + if err := pprof.StartCPUProfile(f); err != nil { + fmt.Fprintf(os.Stderr, "testing: can't start cpu profile: %s\n", err) + f.Close() + return + } + } +} + +func after(data []stats.BenchResults) { + if cpuProfile != "" { + pprof.StopCPUProfile() // flushes profile to disk + } + if memProfile != "" { + f, err := os.Create(memProfile) + if err != nil { + fmt.Fprintf(os.Stderr, "testing: %s\n", err) + os.Exit(2) + } + runtime.GC() // materialize all statistics + if err = pprof.WriteHeapProfile(f); err != nil { + fmt.Fprintf(os.Stderr, "testing: can't write heap profile %s: %s\n", memProfile, err) + os.Exit(2) + } + f.Close() + } + if benchmarkResultFile != "" { + f, err := os.Create(benchmarkResultFile) + if err != nil { + log.Fatalf("testing: can't write benchmark result %s: %s\n", benchmarkResultFile, err) + } + dataEncoder := gob.NewEncoder(f) + dataEncoder.Encode(data) + f.Close() + } +} + +// nopCompressor is a compressor that just copies data. +type nopCompressor struct{} + +func (nopCompressor) Do(w io.Writer, p []byte) error { + n, err := w.Write(p) + if err != nil { + return err + } + if n != len(p) { + return fmt.Errorf("nopCompressor.Write: wrote %v bytes; want %v", n, len(p)) + } + return nil +} + +func (nopCompressor) Type() string { return "nop" } + +// nopDecompressor is a decompressor that just copies data. +type nopDecompressor struct{} + +func (nopDecompressor) Do(r io.Reader) ([]byte, error) { return ioutil.ReadAll(r) } +func (nopDecompressor) Type() string { return "nop" } diff --git a/vendor/google.golang.org/grpc/benchmark/benchmark.go b/vendor/google.golang.org/grpc/benchmark/benchmark.go index fc3304a..956ae35 100644 --- a/vendor/google.golang.org/grpc/benchmark/benchmark.go +++ b/vendor/google.golang.org/grpc/benchmark/benchmark.go @@ -1,36 +1,23 @@ /* * - * Copyright 2014, Google Inc. - * All rights reserved. + * Copyright 2014 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ +//go:generate protoc -I grpc_testing --go_out=plugins=grpc:grpc_testing grpc_testing/control.proto grpc_testing/messages.proto grpc_testing/payloads.proto grpc_testing/services.proto grpc_testing/stats.proto + /* Package benchmark implements the building blocks to setup end-to-end gRPC benchmarks. */ @@ -40,13 +27,29 @@ import ( "fmt" "io" "net" + "sync" + "testing" + "time" "golang.org/x/net/context" "google.golang.org/grpc" testpb "google.golang.org/grpc/benchmark/grpc_testing" + "google.golang.org/grpc/benchmark/latency" + "google.golang.org/grpc/benchmark/stats" "google.golang.org/grpc/grpclog" ) +// AddOne add 1 to the features slice +func AddOne(features []int, featuresMaxPosition []int) { + for i := len(features) - 1; i >= 0; i-- { + features[i] = (features[i] + 1) + if features[i]/featuresMaxPosition[i] == 0 { + break + } + features[i] = features[i] % featuresMaxPosition[i] + } +} + // Allows reuse of the same testpb.Payload object. func setPayload(p *testpb.Payload, t testpb.PayloadType, size int) { if size < 0 { @@ -133,9 +136,6 @@ func (s *byteBufServer) StreamingCall(stream testpb.BenchmarkService_StreamingCa // ServerInfo contains the information to create a gRPC benchmark server. type ServerInfo struct { - // Addr is the address of the server. - Addr string - // Type is the type of the server. // It should be "protobuf" or "bytebuf". Type string @@ -144,15 +144,16 @@ type ServerInfo struct { // For "protobuf", it's ignored. // For "bytebuf", it should be an int representing response size. Metadata interface{} + + // Listener is the network listener for the server to use + Listener net.Listener } // StartServer starts a gRPC server serving a benchmark service according to info. -// It returns its listen address and a function to stop the server. -func StartServer(info ServerInfo, opts ...grpc.ServerOption) (string, func()) { - lis, err := net.Listen("tcp", info.Addr) - if err != nil { - grpclog.Fatalf("Failed to listen: %v", err) - } +// It returns a function to stop the server. +func StartServer(info ServerInfo, opts ...grpc.ServerOption) func() { + opts = append(opts, grpc.WriteBufferSize(128*1024)) + opts = append(opts, grpc.ReadBufferSize(128*1024)) s := grpc.NewServer(opts...) switch info.Type { case "protobuf": @@ -166,8 +167,8 @@ func StartServer(info ServerInfo, opts ...grpc.ServerOption) (string, func()) { default: grpclog.Fatalf("failed to StartServer, unknown Type: %v", info.Type) } - go s.Serve(lis) - return lis.Addr().String(), func() { + go s.Serve(info.Listener) + return func() { s.Stop() } } @@ -226,9 +227,139 @@ func DoByteBufStreamingRoundTrip(stream testpb.BenchmarkService_StreamingCallCli // NewClientConn creates a gRPC client connection to addr. func NewClientConn(addr string, opts ...grpc.DialOption) *grpc.ClientConn { + opts = append(opts, grpc.WithWriteBufferSize(128*1024)) + opts = append(opts, grpc.WithReadBufferSize(128*1024)) conn, err := grpc.Dial(addr, opts...) if err != nil { grpclog.Fatalf("NewClientConn(%q) failed to create a ClientConn %v", addr, err) } return conn } + +func runUnary(b *testing.B, benchFeatures stats.Features) { + s := stats.AddStats(b, 38) + nw := &latency.Network{Kbps: benchFeatures.Kbps, Latency: benchFeatures.Latency, MTU: benchFeatures.Mtu} + lis, err := net.Listen("tcp", "localhost:0") + if err != nil { + grpclog.Fatalf("Failed to listen: %v", err) + } + target := lis.Addr().String() + lis = nw.Listener(lis) + stopper := StartServer(ServerInfo{Type: "protobuf", Listener: lis}, grpc.MaxConcurrentStreams(uint32(benchFeatures.MaxConcurrentCalls+1))) + defer stopper() + conn := NewClientConn( + target, grpc.WithInsecure(), + grpc.WithDialer(func(address string, timeout time.Duration) (net.Conn, error) { + return nw.TimeoutDialer(net.DialTimeout)("tcp", address, timeout) + }), + ) + tc := testpb.NewBenchmarkServiceClient(conn) + + // Warm up connection. + for i := 0; i < 10; i++ { + unaryCaller(tc, benchFeatures.ReqSizeBytes, benchFeatures.RespSizeBytes) + } + ch := make(chan int, benchFeatures.MaxConcurrentCalls*4) + var ( + mu sync.Mutex + wg sync.WaitGroup + ) + wg.Add(benchFeatures.MaxConcurrentCalls) + + // Distribute the b.N calls over maxConcurrentCalls workers. + for i := 0; i < benchFeatures.MaxConcurrentCalls; i++ { + go func() { + for range ch { + start := time.Now() + unaryCaller(tc, benchFeatures.ReqSizeBytes, benchFeatures.RespSizeBytes) + elapse := time.Since(start) + mu.Lock() + s.Add(elapse) + mu.Unlock() + } + wg.Done() + }() + } + b.ResetTimer() + for i := 0; i < b.N; i++ { + ch <- i + } + close(ch) + wg.Wait() + b.StopTimer() + conn.Close() +} + +func runStream(b *testing.B, benchFeatures stats.Features) { + s := stats.AddStats(b, 38) + nw := &latency.Network{Kbps: benchFeatures.Kbps, Latency: benchFeatures.Latency, MTU: benchFeatures.Mtu} + lis, err := net.Listen("tcp", "localhost:0") + if err != nil { + grpclog.Fatalf("Failed to listen: %v", err) + } + target := lis.Addr().String() + lis = nw.Listener(lis) + stopper := StartServer(ServerInfo{Type: "protobuf", Listener: lis}, grpc.MaxConcurrentStreams(uint32(benchFeatures.MaxConcurrentCalls+1))) + defer stopper() + conn := NewClientConn( + target, grpc.WithInsecure(), + grpc.WithDialer(func(address string, timeout time.Duration) (net.Conn, error) { + return nw.TimeoutDialer(net.DialTimeout)("tcp", address, timeout) + }), + ) + tc := testpb.NewBenchmarkServiceClient(conn) + + // Warm up connection. + stream, err := tc.StreamingCall(context.Background()) + if err != nil { + b.Fatalf("%v.StreamingCall(_) = _, %v", tc, err) + } + for i := 0; i < 10; i++ { + streamCaller(stream, benchFeatures.ReqSizeBytes, benchFeatures.RespSizeBytes) + } + + ch := make(chan struct{}, benchFeatures.MaxConcurrentCalls*4) + var ( + mu sync.Mutex + wg sync.WaitGroup + ) + wg.Add(benchFeatures.MaxConcurrentCalls) + + // Distribute the b.N calls over maxConcurrentCalls workers. + for i := 0; i < benchFeatures.MaxConcurrentCalls; i++ { + stream, err := tc.StreamingCall(context.Background()) + if err != nil { + b.Fatalf("%v.StreamingCall(_) = _, %v", tc, err) + } + go func() { + for range ch { + start := time.Now() + streamCaller(stream, benchFeatures.ReqSizeBytes, benchFeatures.RespSizeBytes) + elapse := time.Since(start) + mu.Lock() + s.Add(elapse) + mu.Unlock() + } + wg.Done() + }() + } + b.ResetTimer() + for i := 0; i < b.N; i++ { + ch <- struct{}{} + } + close(ch) + wg.Wait() + b.StopTimer() + conn.Close() +} +func unaryCaller(client testpb.BenchmarkServiceClient, reqSize, respSize int) { + if err := DoUnaryCall(client, reqSize, respSize); err != nil { + grpclog.Fatalf("DoUnaryCall failed: %v", err) + } +} + +func streamCaller(stream testpb.BenchmarkService_StreamingCallClient, reqSize, respSize int) { + if err := DoStreamingRoundTrip(stream, reqSize, respSize); err != nil { + grpclog.Fatalf("DoStreamingRoundTrip failed: %v", err) + } +} diff --git a/vendor/google.golang.org/grpc/benchmark/benchmark16_test.go b/vendor/google.golang.org/grpc/benchmark/benchmark16_test.go new file mode 100644 index 0000000..fc33e80 --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/benchmark16_test.go @@ -0,0 +1,112 @@ +// +build go1.6,!go1.7 + +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package benchmark + +import ( + "os" + "testing" + + "google.golang.org/grpc" + "google.golang.org/grpc/benchmark/stats" +) + +func BenchmarkClientStreamc1(b *testing.B) { + grpc.EnableTracing = true + runStream(b, stats.Features{"", true, 0, 0, 0, 1, 1, 1, false}) +} + +func BenchmarkClientStreamc8(b *testing.B) { + grpc.EnableTracing = true + runStream(b, stats.Features{"", true, 0, 0, 0, 8, 1, 1, false}) +} + +func BenchmarkClientStreamc64(b *testing.B) { + grpc.EnableTracing = true + runStream(b, stats.Features{"", true, 0, 0, 0, 64, 1, 1, false}) +} + +func BenchmarkClientStreamc512(b *testing.B) { + grpc.EnableTracing = true + runStream(b, stats.Features{"", true, 0, 0, 0, 512, 1, 1, false}) +} +func BenchmarkClientUnaryc1(b *testing.B) { + grpc.EnableTracing = true + runStream(b, stats.Features{"", true, 0, 0, 0, 1, 1, 1, false}) +} + +func BenchmarkClientUnaryc8(b *testing.B) { + grpc.EnableTracing = true + runStream(b, stats.Features{"", true, 0, 0, 0, 8, 1, 1, false}) +} + +func BenchmarkClientUnaryc64(b *testing.B) { + grpc.EnableTracing = true + runStream(b, stats.Features{"", true, 0, 0, 0, 64, 1, 1, false}) +} + +func BenchmarkClientUnaryc512(b *testing.B) { + grpc.EnableTracing = true + runStream(b, stats.Features{"", true, 0, 0, 0, 512, 1, 1, false}) +} + +func BenchmarkClientStreamNoTracec1(b *testing.B) { + grpc.EnableTracing = false + runStream(b, stats.Features{"", false, 0, 0, 0, 1, 1, 1, false}) +} + +func BenchmarkClientStreamNoTracec8(b *testing.B) { + grpc.EnableTracing = false + runStream(b, stats.Features{"", false, 0, 0, 0, 8, 1, 1, false}) +} + +func BenchmarkClientStreamNoTracec64(b *testing.B) { + grpc.EnableTracing = false + runStream(b, stats.Features{"", false, 0, 0, 0, 64, 1, 1, false}) +} + +func BenchmarkClientStreamNoTracec512(b *testing.B) { + grpc.EnableTracing = false + runStream(b, stats.Features{"", false, 0, 0, 0, 512, 1, 1, false}) +} +func BenchmarkClientUnaryNoTracec1(b *testing.B) { + grpc.EnableTracing = false + runStream(b, stats.Features{"", false, 0, 0, 0, 1, 1, 1, false}) +} + +func BenchmarkClientUnaryNoTracec8(b *testing.B) { + grpc.EnableTracing = false + runStream(b, stats.Features{"", false, 0, 0, 0, 8, 1, 1, false}) +} + +func BenchmarkClientUnaryNoTracec64(b *testing.B) { + grpc.EnableTracing = false + runStream(b, stats.Features{"", false, 0, 0, 0, 64, 1, 1, false}) +} + +func BenchmarkClientUnaryNoTracec512(b *testing.B) { + grpc.EnableTracing = false + runStream(b, stats.Features{"", false, 0, 0, 0, 512, 1, 1, false}) + runStream(b, stats.Features{"", false, 0, 0, 0, 512, 1, 1, false}) +} + +func TestMain(m *testing.M) { + os.Exit(stats.RunTestMain(m)) +} diff --git a/vendor/google.golang.org/grpc/benchmark/benchmark17_test.go b/vendor/google.golang.org/grpc/benchmark/benchmark17_test.go new file mode 100644 index 0000000..8dc7d3c --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/benchmark17_test.go @@ -0,0 +1,85 @@ +// +build go1.7 + +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package benchmark + +import ( + "fmt" + "os" + "reflect" + "testing" + "time" + + "google.golang.org/grpc" + "google.golang.org/grpc/benchmark/stats" +) + +func BenchmarkClient(b *testing.B) { + enableTrace := []bool{true, false} // run both enable and disable by default + // When set the latency to 0 (no delay), the result is slower than the real result with no delay + // because latency simulation section has extra operations + latency := []time.Duration{0, 40 * time.Millisecond} // if non-positive, no delay. + kbps := []int{0, 10240} // if non-positive, infinite + mtu := []int{0} // if non-positive, infinite + maxConcurrentCalls := []int{1, 8, 64, 512} + reqSizeBytes := []int{1, 1024 * 1024} + respSizeBytes := []int{1, 1024 * 1024} + featuresCurPos := make([]int, 7) + + // 0:enableTracing 1:md 2:ltc 3:kbps 4:mtu 5:maxC 6:connCount 7:reqSize 8:respSize + featuresMaxPosition := []int{len(enableTrace), len(latency), len(kbps), len(mtu), len(maxConcurrentCalls), len(reqSizeBytes), len(respSizeBytes)} + initalPos := make([]int, len(featuresCurPos)) + + // run benchmarks + start := true + for !reflect.DeepEqual(featuresCurPos, initalPos) || start { + start = false + tracing := "Trace" + if !enableTrace[featuresCurPos[0]] { + tracing = "noTrace" + } + + benchFeature := stats.Features{ + EnableTrace: enableTrace[featuresCurPos[0]], + Latency: latency[featuresCurPos[1]], + Kbps: kbps[featuresCurPos[2]], + Mtu: mtu[featuresCurPos[3]], + MaxConcurrentCalls: maxConcurrentCalls[featuresCurPos[4]], + ReqSizeBytes: reqSizeBytes[featuresCurPos[5]], + RespSizeBytes: respSizeBytes[featuresCurPos[6]], + } + + grpc.EnableTracing = enableTrace[featuresCurPos[0]] + b.Run(fmt.Sprintf("Unary-%s-%s", + tracing, benchFeature.String()), func(b *testing.B) { + runUnary(b, benchFeature) + }) + + b.Run(fmt.Sprintf("Stream-%s-%s", + tracing, benchFeature.String()), func(b *testing.B) { + runStream(b, benchFeature) + }) + AddOne(featuresCurPos, featuresMaxPosition) + } +} + +func TestMain(m *testing.M) { + os.Exit(stats.RunTestMain(m)) +} diff --git a/vendor/google.golang.org/grpc/benchmark/benchmark_test.go b/vendor/google.golang.org/grpc/benchmark/benchmark_test.go deleted file mode 100644 index b0c3030..0000000 --- a/vendor/google.golang.org/grpc/benchmark/benchmark_test.go +++ /dev/null @@ -1,202 +0,0 @@ -package benchmark - -import ( - "os" - "sync" - "testing" - "time" - - "golang.org/x/net/context" - "google.golang.org/grpc" - testpb "google.golang.org/grpc/benchmark/grpc_testing" - "google.golang.org/grpc/benchmark/stats" - "google.golang.org/grpc/grpclog" -) - -func runUnary(b *testing.B, maxConcurrentCalls int) { - s := stats.AddStats(b, 38) - b.StopTimer() - target, stopper := StartServer(ServerInfo{Addr: "localhost:0", Type: "protobuf"}) - defer stopper() - conn := NewClientConn(target, grpc.WithInsecure()) - tc := testpb.NewBenchmarkServiceClient(conn) - - // Warm up connection. - for i := 0; i < 10; i++ { - unaryCaller(tc) - } - ch := make(chan int, maxConcurrentCalls*4) - var ( - mu sync.Mutex - wg sync.WaitGroup - ) - wg.Add(maxConcurrentCalls) - - // Distribute the b.N calls over maxConcurrentCalls workers. - for i := 0; i < maxConcurrentCalls; i++ { - go func() { - for range ch { - start := time.Now() - unaryCaller(tc) - elapse := time.Since(start) - mu.Lock() - s.Add(elapse) - mu.Unlock() - } - wg.Done() - }() - } - b.StartTimer() - for i := 0; i < b.N; i++ { - ch <- i - } - b.StopTimer() - close(ch) - wg.Wait() - conn.Close() -} - -func runStream(b *testing.B, maxConcurrentCalls int) { - s := stats.AddStats(b, 38) - b.StopTimer() - target, stopper := StartServer(ServerInfo{Addr: "localhost:0", Type: "protobuf"}) - defer stopper() - conn := NewClientConn(target, grpc.WithInsecure()) - tc := testpb.NewBenchmarkServiceClient(conn) - - // Warm up connection. - stream, err := tc.StreamingCall(context.Background()) - if err != nil { - b.Fatalf("%v.StreamingCall(_) = _, %v", tc, err) - } - for i := 0; i < 10; i++ { - streamCaller(stream) - } - - ch := make(chan struct{}, maxConcurrentCalls*4) - var ( - mu sync.Mutex - wg sync.WaitGroup - ) - wg.Add(maxConcurrentCalls) - - // Distribute the b.N calls over maxConcurrentCalls workers. - for i := 0; i < maxConcurrentCalls; i++ { - stream, err := tc.StreamingCall(context.Background()) - if err != nil { - b.Fatalf("%v.StreamingCall(_) = _, %v", tc, err) - } - go func() { - for range ch { - start := time.Now() - streamCaller(stream) - elapse := time.Since(start) - mu.Lock() - s.Add(elapse) - mu.Unlock() - } - wg.Done() - }() - } - b.StartTimer() - for i := 0; i < b.N; i++ { - ch <- struct{}{} - } - b.StopTimer() - close(ch) - wg.Wait() - conn.Close() -} -func unaryCaller(client testpb.BenchmarkServiceClient) { - if err := DoUnaryCall(client, 1, 1); err != nil { - grpclog.Fatalf("DoUnaryCall failed: %v", err) - } -} - -func streamCaller(stream testpb.BenchmarkService_StreamingCallClient) { - if err := DoStreamingRoundTrip(stream, 1, 1); err != nil { - grpclog.Fatalf("DoStreamingRoundTrip failed: %v", err) - } -} - -func BenchmarkClientStreamc1(b *testing.B) { - grpc.EnableTracing = true - runStream(b, 1) -} - -func BenchmarkClientStreamc8(b *testing.B) { - grpc.EnableTracing = true - runStream(b, 8) -} - -func BenchmarkClientStreamc64(b *testing.B) { - grpc.EnableTracing = true - runStream(b, 64) -} - -func BenchmarkClientStreamc512(b *testing.B) { - grpc.EnableTracing = true - runStream(b, 512) -} -func BenchmarkClientUnaryc1(b *testing.B) { - grpc.EnableTracing = true - runUnary(b, 1) -} - -func BenchmarkClientUnaryc8(b *testing.B) { - grpc.EnableTracing = true - runUnary(b, 8) -} - -func BenchmarkClientUnaryc64(b *testing.B) { - grpc.EnableTracing = true - runUnary(b, 64) -} - -func BenchmarkClientUnaryc512(b *testing.B) { - grpc.EnableTracing = true - runUnary(b, 512) -} - -func BenchmarkClientStreamNoTracec1(b *testing.B) { - grpc.EnableTracing = false - runStream(b, 1) -} - -func BenchmarkClientStreamNoTracec8(b *testing.B) { - grpc.EnableTracing = false - runStream(b, 8) -} - -func BenchmarkClientStreamNoTracec64(b *testing.B) { - grpc.EnableTracing = false - runStream(b, 64) -} - -func BenchmarkClientStreamNoTracec512(b *testing.B) { - grpc.EnableTracing = false - runStream(b, 512) -} -func BenchmarkClientUnaryNoTracec1(b *testing.B) { - grpc.EnableTracing = false - runUnary(b, 1) -} - -func BenchmarkClientUnaryNoTracec8(b *testing.B) { - grpc.EnableTracing = false - runUnary(b, 8) -} - -func BenchmarkClientUnaryNoTracec64(b *testing.B) { - grpc.EnableTracing = false - runUnary(b, 64) -} - -func BenchmarkClientUnaryNoTracec512(b *testing.B) { - grpc.EnableTracing = false - runUnary(b, 512) -} - -func TestMain(m *testing.M) { - os.Exit(stats.RunTestMain(m)) -} diff --git a/vendor/google.golang.org/grpc/benchmark/benchresult/main.go b/vendor/google.golang.org/grpc/benchmark/benchresult/main.go new file mode 100644 index 0000000..40226cf --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/benchresult/main.go @@ -0,0 +1,133 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +/* +To format the benchmark result: + go run benchmark/benchresult/main.go resultfile + +To see the performance change based on a old result: + go run benchmark/benchresult/main.go resultfile_old resultfile +It will print the comparison result of intersection benchmarks between two files. + +*/ +package main + +import ( + "encoding/gob" + "fmt" + "log" + "os" + "strconv" + "strings" + "time" + + "google.golang.org/grpc/benchmark/stats" +) + +func createMap(fileName string, m map[string]stats.BenchResults) { + f, err := os.Open(fileName) + if err != nil { + log.Fatalf("Read file %s error: %s\n", fileName, err) + } + defer f.Close() + var data []stats.BenchResults + decoder := gob.NewDecoder(f) + if err = decoder.Decode(&data); err != nil { + log.Fatalf("Decode file %s error: %s\n", fileName, err) + } + for _, d := range data { + m[d.RunMode+"-"+d.Features.String()] = d + } +} + +func intChange(title string, val1, val2 int64) string { + return fmt.Sprintf("%10s %12s %12s %8.2f%%\n", title, strconv.FormatInt(val1, 10), + strconv.FormatInt(val2, 10), float64(val2-val1)*100/float64(val1)) +} + +func timeChange(title int, val1, val2 time.Duration) string { + return fmt.Sprintf("%10s %12s %12s %8.2f%%\n", strconv.Itoa(title)+" latency", val1.String(), + val2.String(), float64(val2-val1)*100/float64(val1)) +} + +func compareTwoMap(m1, m2 map[string]stats.BenchResults) { + for k2, v2 := range m2 { + if v1, ok := m1[k2]; ok { + changes := k2 + "\n" + changes += fmt.Sprintf("%10s %12s %12s %8s\n", "Title", "Before", "After", "Percentage") + changes += intChange("Bytes/op", v1.AllocedBytesPerOp, v2.AllocedBytesPerOp) + changes += intChange("Allocs/op", v1.AllocsPerOp, v2.AllocsPerOp) + changes += timeChange(v1.Latency[1].Percent, v1.Latency[1].Value, v2.Latency[1].Value) + changes += timeChange(v1.Latency[2].Percent, v1.Latency[2].Value, v2.Latency[2].Value) + fmt.Printf("%s\n", changes) + } + } +} + +func compareBenchmark(file1, file2 string) { + var BenchValueFile1 map[string]stats.BenchResults + var BenchValueFile2 map[string]stats.BenchResults + BenchValueFile1 = make(map[string]stats.BenchResults) + BenchValueFile2 = make(map[string]stats.BenchResults) + + createMap(file1, BenchValueFile1) + createMap(file2, BenchValueFile2) + + compareTwoMap(BenchValueFile1, BenchValueFile2) +} + +func printline(benchName, ltc50, ltc90, allocByte, allocsOp interface{}) { + fmt.Printf("%-80v%12v%12v%12v%12v\n", benchName, ltc50, ltc90, allocByte, allocsOp) +} + +func formatBenchmark(fileName string) { + f, err := os.Open(fileName) + if err != nil { + log.Fatalf("Read file %s error: %s\n", fileName, err) + } + defer f.Close() + var data []stats.BenchResults + decoder := gob.NewDecoder(f) + if err = decoder.Decode(&data); err != nil { + log.Fatalf("Decode file %s error: %s\n", fileName, err) + } + if len(data) == 0 { + log.Fatalf("No data in file %s\n", fileName) + } + printPos := data[0].SharedPosion + fmt.Println("\nShared features:\n" + strings.Repeat("-", 20)) + fmt.Print(stats.PartialPrintString(printPos, data[0].Features, true)) + fmt.Println(strings.Repeat("-", 35)) + for i := 0; i < len(data[0].SharedPosion); i++ { + printPos[i] = !printPos[i] + } + printline("Name", "latency-50", "latency-90", "Alloc (B)", "Alloc (#)") + for _, d := range data { + name := d.RunMode + stats.PartialPrintString(printPos, d.Features, false) + printline(name, d.Latency[1].Value.String(), d.Latency[2].Value.String(), + d.AllocedBytesPerOp, d.AllocsPerOp) + } +} + +func main() { + if len(os.Args) == 2 { + formatBenchmark(os.Args[1]) + } else { + compareBenchmark(os.Args[1], os.Args[2]) + } +} diff --git a/vendor/google.golang.org/grpc/benchmark/client/main.go b/vendor/google.golang.org/grpc/benchmark/client/main.go index c63d521..9aa587e 100644 --- a/vendor/google.golang.org/grpc/benchmark/client/main.go +++ b/vendor/google.golang.org/grpc/benchmark/client/main.go @@ -1,3 +1,21 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + package main import ( diff --git a/vendor/google.golang.org/grpc/benchmark/grpc_testing/control.pb.go b/vendor/google.golang.org/grpc/benchmark/grpc_testing/control.pb.go index 8afae81..b88832f 100644 --- a/vendor/google.golang.org/grpc/benchmark/grpc_testing/control.pb.go +++ b/vendor/google.golang.org/grpc/benchmark/grpc_testing/control.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: control.proto -// DO NOT EDIT! /* Package grpc_testing is a generated protocol buffer package. @@ -147,6 +146,13 @@ func (m *PoissonParams) String() string { return proto.CompactTextStr func (*PoissonParams) ProtoMessage() {} func (*PoissonParams) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } +func (m *PoissonParams) GetOfferedLoad() float64 { + if m != nil { + return m.OfferedLoad + } + return 0 +} + type UniformParams struct { InterarrivalLo float64 `protobuf:"fixed64,1,opt,name=interarrival_lo,json=interarrivalLo" json:"interarrival_lo,omitempty"` InterarrivalHi float64 `protobuf:"fixed64,2,opt,name=interarrival_hi,json=interarrivalHi" json:"interarrival_hi,omitempty"` @@ -157,6 +163,20 @@ func (m *UniformParams) String() string { return proto.CompactTextStr func (*UniformParams) ProtoMessage() {} func (*UniformParams) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } +func (m *UniformParams) GetInterarrivalLo() float64 { + if m != nil { + return m.InterarrivalLo + } + return 0 +} + +func (m *UniformParams) GetInterarrivalHi() float64 { + if m != nil { + return m.InterarrivalHi + } + return 0 +} + type DeterministicParams struct { OfferedLoad float64 `protobuf:"fixed64,1,opt,name=offered_load,json=offeredLoad" json:"offered_load,omitempty"` } @@ -166,6 +186,13 @@ func (m *DeterministicParams) String() string { return proto.CompactT func (*DeterministicParams) ProtoMessage() {} func (*DeterministicParams) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } +func (m *DeterministicParams) GetOfferedLoad() float64 { + if m != nil { + return m.OfferedLoad + } + return 0 +} + type ParetoParams struct { InterarrivalBase float64 `protobuf:"fixed64,1,opt,name=interarrival_base,json=interarrivalBase" json:"interarrival_base,omitempty"` Alpha float64 `protobuf:"fixed64,2,opt,name=alpha" json:"alpha,omitempty"` @@ -176,6 +203,20 @@ func (m *ParetoParams) String() string { return proto.CompactTextStri func (*ParetoParams) ProtoMessage() {} func (*ParetoParams) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } +func (m *ParetoParams) GetInterarrivalBase() float64 { + if m != nil { + return m.InterarrivalBase + } + return 0 +} + +func (m *ParetoParams) GetAlpha() float64 { + if m != nil { + return m.Alpha + } + return 0 +} + // Once an RPC finishes, immediately start a new one. // No configuration parameters needed. type ClosedLoopParams struct { @@ -411,6 +452,20 @@ func (m *SecurityParams) String() string { return proto.CompactTextSt func (*SecurityParams) ProtoMessage() {} func (*SecurityParams) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } +func (m *SecurityParams) GetUseTestCa() bool { + if m != nil { + return m.UseTestCa + } + return false +} + +func (m *SecurityParams) GetServerHostOverride() string { + if m != nil { + return m.ServerHostOverride + } + return "" +} + type ClientConfig struct { // List of targets to connect to. At least one target needs to be specified. ServerTargets []string `protobuf:"bytes,1,rep,name=server_targets,json=serverTargets" json:"server_targets,omitempty"` @@ -430,7 +485,7 @@ type ClientConfig struct { PayloadConfig *PayloadConfig `protobuf:"bytes,11,opt,name=payload_config,json=payloadConfig" json:"payload_config,omitempty"` HistogramParams *HistogramParams `protobuf:"bytes,12,opt,name=histogram_params,json=histogramParams" json:"histogram_params,omitempty"` // Specify the cores we should run the client on, if desired - CoreList []int32 `protobuf:"varint,13,rep,name=core_list,json=coreList" json:"core_list,omitempty"` + CoreList []int32 `protobuf:"varint,13,rep,packed,name=core_list,json=coreList" json:"core_list,omitempty"` CoreLimit int32 `protobuf:"varint,14,opt,name=core_limit,json=coreLimit" json:"core_limit,omitempty"` } @@ -439,6 +494,20 @@ func (m *ClientConfig) String() string { return proto.CompactTextStri func (*ClientConfig) ProtoMessage() {} func (*ClientConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } +func (m *ClientConfig) GetServerTargets() []string { + if m != nil { + return m.ServerTargets + } + return nil +} + +func (m *ClientConfig) GetClientType() ClientType { + if m != nil { + return m.ClientType + } + return ClientType_SYNC_CLIENT +} + func (m *ClientConfig) GetSecurityParams() *SecurityParams { if m != nil { return m.SecurityParams @@ -446,6 +515,34 @@ func (m *ClientConfig) GetSecurityParams() *SecurityParams { return nil } +func (m *ClientConfig) GetOutstandingRpcsPerChannel() int32 { + if m != nil { + return m.OutstandingRpcsPerChannel + } + return 0 +} + +func (m *ClientConfig) GetClientChannels() int32 { + if m != nil { + return m.ClientChannels + } + return 0 +} + +func (m *ClientConfig) GetAsyncClientThreads() int32 { + if m != nil { + return m.AsyncClientThreads + } + return 0 +} + +func (m *ClientConfig) GetRpcType() RpcType { + if m != nil { + return m.RpcType + } + return RpcType_UNARY +} + func (m *ClientConfig) GetLoadParams() *LoadParams { if m != nil { return m.LoadParams @@ -467,6 +564,20 @@ func (m *ClientConfig) GetHistogramParams() *HistogramParams { return nil } +func (m *ClientConfig) GetCoreList() []int32 { + if m != nil { + return m.CoreList + } + return nil +} + +func (m *ClientConfig) GetCoreLimit() int32 { + if m != nil { + return m.CoreLimit + } + return 0 +} + type ClientStatus struct { Stats *ClientStats `protobuf:"bytes,1,opt,name=stats" json:"stats,omitempty"` } @@ -494,6 +605,13 @@ func (m *Mark) String() string { return proto.CompactTextString(m) } func (*Mark) ProtoMessage() {} func (*Mark) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } +func (m *Mark) GetReset_() bool { + if m != nil { + return m.Reset_ + } + return false +} + type ClientArgs struct { // Types that are valid to be assigned to Argtype: // *ClientArgs_Setup @@ -627,7 +745,7 @@ type ServerConfig struct { // payload config, used in generic server PayloadConfig *PayloadConfig `protobuf:"bytes,9,opt,name=payload_config,json=payloadConfig" json:"payload_config,omitempty"` // Specify the cores we should run the server on, if desired - CoreList []int32 `protobuf:"varint,10,rep,name=core_list,json=coreList" json:"core_list,omitempty"` + CoreList []int32 `protobuf:"varint,10,rep,packed,name=core_list,json=coreList" json:"core_list,omitempty"` } func (m *ServerConfig) Reset() { *m = ServerConfig{} } @@ -635,6 +753,13 @@ func (m *ServerConfig) String() string { return proto.CompactTextStri func (*ServerConfig) ProtoMessage() {} func (*ServerConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } +func (m *ServerConfig) GetServerType() ServerType { + if m != nil { + return m.ServerType + } + return ServerType_SYNC_SERVER +} + func (m *ServerConfig) GetSecurityParams() *SecurityParams { if m != nil { return m.SecurityParams @@ -642,6 +767,27 @@ func (m *ServerConfig) GetSecurityParams() *SecurityParams { return nil } +func (m *ServerConfig) GetPort() int32 { + if m != nil { + return m.Port + } + return 0 +} + +func (m *ServerConfig) GetAsyncServerThreads() int32 { + if m != nil { + return m.AsyncServerThreads + } + return 0 +} + +func (m *ServerConfig) GetCoreLimit() int32 { + if m != nil { + return m.CoreLimit + } + return 0 +} + func (m *ServerConfig) GetPayloadConfig() *PayloadConfig { if m != nil { return m.PayloadConfig @@ -649,6 +795,13 @@ func (m *ServerConfig) GetPayloadConfig() *PayloadConfig { return nil } +func (m *ServerConfig) GetCoreList() []int32 { + if m != nil { + return m.CoreList + } + return nil +} + type ServerArgs struct { // Types that are valid to be assigned to Argtype: // *ServerArgs_Setup @@ -790,6 +943,20 @@ func (m *ServerStatus) GetStats() *ServerStats { return nil } +func (m *ServerStatus) GetPort() int32 { + if m != nil { + return m.Port + } + return 0 +} + +func (m *ServerStatus) GetCores() int32 { + if m != nil { + return m.Cores + } + return 0 +} + type CoreRequest struct { } @@ -808,6 +975,13 @@ func (m *CoreResponse) String() string { return proto.CompactTextStri func (*CoreResponse) ProtoMessage() {} func (*CoreResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } +func (m *CoreResponse) GetCores() int32 { + if m != nil { + return m.Cores + } + return 0 +} + type Void struct { } @@ -841,6 +1015,13 @@ func (m *Scenario) String() string { return proto.CompactTextString(m func (*Scenario) ProtoMessage() {} func (*Scenario) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } +func (m *Scenario) GetName() string { + if m != nil { + return m.Name + } + return "" +} + func (m *Scenario) GetClientConfig() *ClientConfig { if m != nil { return m.ClientConfig @@ -848,6 +1029,13 @@ func (m *Scenario) GetClientConfig() *ClientConfig { return nil } +func (m *Scenario) GetNumClients() int32 { + if m != nil { + return m.NumClients + } + return 0 +} + func (m *Scenario) GetServerConfig() *ServerConfig { if m != nil { return m.ServerConfig @@ -855,6 +1043,34 @@ func (m *Scenario) GetServerConfig() *ServerConfig { return nil } +func (m *Scenario) GetNumServers() int32 { + if m != nil { + return m.NumServers + } + return 0 +} + +func (m *Scenario) GetWarmupSeconds() int32 { + if m != nil { + return m.WarmupSeconds + } + return 0 +} + +func (m *Scenario) GetBenchmarkSeconds() int32 { + if m != nil { + return m.BenchmarkSeconds + } + return 0 +} + +func (m *Scenario) GetSpawnLocalWorkerCount() int32 { + if m != nil { + return m.SpawnLocalWorkerCount + } + return 0 +} + // A set of scenarios to be run with qps_json_driver type Scenarios struct { Scenarios []*Scenario `protobuf:"bytes,1,rep,name=scenarios" json:"scenarios,omitempty"` @@ -900,78 +1116,79 @@ func init() { func init() { proto.RegisterFile("control.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 1162 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xa4, 0x56, 0xdd, 0x6e, 0xdb, 0x46, - 0x13, 0x8d, 0x14, 0xc9, 0x96, 0x86, 0x92, 0xac, 0x6f, 0xbf, 0xa4, 0x60, 0x1c, 0x27, 0x6d, 0xd8, - 0x16, 0x0d, 0x5c, 0xc0, 0x29, 0xd4, 0x02, 0x69, 0xd1, 0x8b, 0x40, 0x56, 0x85, 0xd8, 0x80, 0xe3, - 0xba, 0x2b, 0x27, 0x45, 0xae, 0x08, 0x9a, 0x5a, 0x4b, 0x44, 0x24, 0x2e, 0xbb, 0x4b, 0xc6, 0xf0, - 0x2b, 0xf4, 0x99, 0xfa, 0x1c, 0x7d, 0x8d, 0xbe, 0x42, 0x67, 0xff, 0x64, 0x52, 0x11, 0x10, 0xb7, - 0xbd, 0xe3, 0xce, 0x9c, 0xb3, 0x3b, 0x3b, 0x67, 0x66, 0x96, 0xd0, 0x8d, 0x79, 0x9a, 0x0b, 0xbe, - 0x38, 0xc8, 0x04, 0xcf, 0x39, 0xe9, 0xcc, 0x44, 0x16, 0x1f, 0xe4, 0x4c, 0xe6, 0x49, 0x3a, 0xdb, - 0xed, 0x65, 0xd1, 0xf5, 0x82, 0x47, 0x53, 0x69, 0xbc, 0xbb, 0x9e, 0xcc, 0xa3, 0xdc, 0x2e, 0x82, - 0x01, 0x74, 0xcf, 0x78, 0x22, 0x25, 0x4f, 0xcf, 0x22, 0x11, 0x2d, 0x25, 0x79, 0x02, 0x1d, 0x7e, - 0x79, 0xc9, 0x04, 0x9b, 0x86, 0x8a, 0xe4, 0xd7, 0x3e, 0xab, 0x3d, 0xad, 0x51, 0xcf, 0xda, 0x4e, - 0xd0, 0x14, 0x44, 0xd0, 0x7d, 0x9d, 0x26, 0x97, 0x5c, 0x2c, 0x2d, 0xe7, 0x2b, 0xd8, 0x49, 0xd2, - 0x9c, 0x89, 0x48, 0x88, 0xe4, 0x7d, 0xb4, 0x40, 0xa2, 0xa5, 0xf5, 0xca, 0xe6, 0x13, 0xfe, 0x01, - 0x70, 0x9e, 0xf8, 0xf5, 0x0f, 0x81, 0x47, 0x49, 0xf0, 0x3d, 0xfc, 0xff, 0x27, 0x86, 0x96, 0x65, - 0x92, 0x26, 0x78, 0x8b, 0xf8, 0xf6, 0xc1, 0xfd, 0x02, 0x1d, 0x04, 0xb3, 0x9c, 0x5b, 0xca, 0xd7, - 0xf0, 0xbf, 0xca, 0x91, 0x17, 0x91, 0x64, 0x96, 0xd7, 0x2f, 0x3b, 0x0e, 0xd1, 0x4e, 0xee, 0x41, - 0x33, 0x5a, 0x64, 0xf3, 0xc8, 0x46, 0x65, 0x16, 0x01, 0x81, 0xfe, 0x68, 0xc1, 0xa5, 0x3a, 0x80, - 0x67, 0x66, 0xdb, 0xe0, 0x8f, 0x3a, 0x80, 0x3a, 0xcf, 0x9e, 0x32, 0x04, 0x2f, 0xd6, 0x10, 0x8c, - 0x8b, 0x67, 0x7a, 0x7f, 0x6f, 0xf0, 0xf8, 0xa0, 0xac, 0xc3, 0xc1, 0xfa, 0x1e, 0x47, 0x77, 0x28, - 0xc4, 0x2b, 0x1b, 0x79, 0x0e, 0xdb, 0x99, 0x51, 0x42, 0x9f, 0xee, 0x0d, 0x1e, 0x56, 0xe9, 0x15, - 0x99, 0x90, 0xeb, 0xd0, 0x8a, 0x58, 0x18, 0x39, 0xfc, 0xbb, 0x9b, 0x88, 0x15, 0xad, 0x14, 0xd1, - 0xa2, 0xc9, 0x8f, 0xb0, 0x35, 0xd5, 0x49, 0xf6, 0x1b, 0x9a, 0xf7, 0xa4, 0xca, 0xdb, 0x20, 0x00, - 0xb2, 0x2d, 0x85, 0x7c, 0x07, 0x5b, 0x99, 0xce, 0xb3, 0xdf, 0xd4, 0xe4, 0xdd, 0xb5, 0x68, 0x4b, - 0x1a, 0x28, 0x96, 0xc1, 0x1e, 0x6e, 0x41, 0x43, 0x09, 0x17, 0x5c, 0x40, 0x6f, 0xc2, 0xe2, 0x42, - 0x24, 0xf9, 0xb5, 0xcd, 0xe0, 0x63, 0xf0, 0x0a, 0xc9, 0x42, 0xc5, 0x0f, 0xe3, 0x48, 0x67, 0xb0, - 0x45, 0xdb, 0x68, 0x3a, 0x47, 0xcb, 0x28, 0x22, 0xdf, 0xc0, 0x3d, 0xc9, 0xc4, 0x7b, 0x26, 0xc2, - 0x39, 0x47, 0x08, 0xc7, 0x2f, 0x91, 0x4c, 0x99, 0xce, 0x55, 0x9b, 0x12, 0xe3, 0x3b, 0x42, 0xd7, - 0xcf, 0xd6, 0x13, 0xfc, 0xde, 0x84, 0xce, 0x68, 0x91, 0xb0, 0x34, 0x1f, 0xf1, 0xf4, 0x32, 0x99, - 0x91, 0x2f, 0xa1, 0x67, 0xb7, 0xc8, 0x23, 0x31, 0x63, 0xb9, 0xc4, 0x53, 0xee, 0x22, 0xb9, 0x6b, - 0xac, 0xe7, 0xc6, 0x48, 0x7e, 0x50, 0x5a, 0x2a, 0x5a, 0x98, 0x5f, 0x67, 0xe6, 0x80, 0xde, 0xc0, - 0x5f, 0xd7, 0x52, 0x01, 0xce, 0xd1, 0xaf, 0x34, 0x74, 0xdf, 0x64, 0x0c, 0x3b, 0xd2, 0x5e, 0x2b, - 0xcc, 0xf4, 0xbd, 0xac, 0x24, 0x7b, 0x55, 0x7a, 0xf5, 0xee, 0xb4, 0x27, 0xab, 0xb9, 0x78, 0x01, - 0x7b, 0xbc, 0xc8, 0xb1, 0x4d, 0xd3, 0x29, 0xa2, 0x43, 0x64, 0xca, 0x30, 0xc3, 0xb0, 0xe3, 0x79, - 0x94, 0xa6, 0x6c, 0xa1, 0xe5, 0x6a, 0xd2, 0x07, 0x25, 0x0c, 0x45, 0xc8, 0x19, 0x13, 0x23, 0x03, - 0x50, 0x7d, 0x66, 0xaf, 0x60, 0x29, 0x52, 0xab, 0xd4, 0xa4, 0x3d, 0x63, 0xb6, 0x38, 0xa9, 0xb2, - 0x1a, 0xc9, 0xeb, 0x34, 0x0e, 0xdd, 0x8d, 0xe7, 0x82, 0xe1, 0xa4, 0xf0, 0xb7, 0x35, 0x9a, 0x68, - 0x9f, 0xbd, 0xab, 0xf1, 0x20, 0xa3, 0x85, 0xf1, 0x98, 0xd4, 0xb4, 0x74, 0x6a, 0xee, 0x57, 0xef, - 0x86, 0xa1, 0xe8, 0xbc, 0x6c, 0x0b, 0xf3, 0xa1, 0xf2, 0xa9, 0x34, 0x77, 0x09, 0x01, 0x9d, 0x90, - 0xb5, 0x7c, 0xde, 0xb4, 0x12, 0x85, 0xc5, 0x4d, 0x5b, 0x1d, 0x82, 0x1b, 0x5e, 0x61, 0xac, 0x35, - 0xf4, 0xbd, 0x8d, 0xad, 0x61, 0x30, 0x46, 0x66, 0xda, 0xcd, 0xca, 0x4b, 0x72, 0x04, 0xfd, 0x39, - 0x96, 0x30, 0x9f, 0xe1, 0x8e, 0x2e, 0x86, 0x8e, 0xde, 0xe5, 0x51, 0x75, 0x97, 0x23, 0x87, 0xb2, - 0x81, 0xec, 0xcc, 0xab, 0x06, 0xf2, 0x10, 0xda, 0x31, 0x17, 0x2c, 0x5c, 0xa0, 0xdd, 0xef, 0x62, - 0xe9, 0x34, 0x69, 0x4b, 0x19, 0x4e, 0x70, 0x4d, 0x1e, 0x01, 0x58, 0xe7, 0x32, 0xc9, 0xfd, 0x9e, - 0xce, 0x5f, 0xdb, 0x78, 0xd1, 0x10, 0xbc, 0x70, 0xb5, 0x38, 0xc1, 0xe1, 0x5b, 0x48, 0xf2, 0x0c, - 0x9a, 0x7a, 0x0c, 0xdb, 0x51, 0xf1, 0x60, 0x53, 0x79, 0x29, 0xa8, 0xa4, 0x06, 0x17, 0xec, 0x41, - 0xe3, 0x55, 0x24, 0xde, 0xa9, 0x11, 0x25, 0x98, 0x64, 0xb9, 0xed, 0x10, 0xb3, 0x08, 0x0a, 0x00, - 0xc3, 0x19, 0x8a, 0x99, 0x24, 0x03, 0xdc, 0x9c, 0xe5, 0x85, 0x9b, 0x43, 0xbb, 0x9b, 0x36, 0x37, - 0xd9, 0xc1, 0xd6, 0x34, 0x50, 0xf2, 0x14, 0x1a, 0x4b, 0xdc, 0xdf, 0xce, 0x1e, 0x52, 0xa5, 0xa8, - 0x93, 0x11, 0xaa, 0x11, 0x87, 0x6d, 0xd8, 0xc6, 0x4e, 0x51, 0x05, 0x10, 0xfc, 0x59, 0x87, 0xce, - 0x44, 0x37, 0x8f, 0x4d, 0x36, 0x6a, 0xed, 0x5a, 0x4c, 0x15, 0x48, 0x6d, 0x53, 0xef, 0x18, 0x82, - 0xe9, 0x1d, 0xb9, 0xfa, 0xde, 0xd4, 0x3b, 0xf5, 0x7f, 0xd1, 0x3b, 0x04, 0x1a, 0x19, 0x17, 0xb9, - 0xed, 0x11, 0xfd, 0x7d, 0x53, 0xe5, 0x2e, 0xb6, 0x0d, 0x55, 0x6e, 0xa3, 0xb2, 0x55, 0x5e, 0x55, - 0xb3, 0xb5, 0xa6, 0xe6, 0x86, 0xba, 0x6c, 0xff, 0xe3, 0xba, 0xac, 0x54, 0x13, 0x54, 0xab, 0x49, - 0xe9, 0x69, 0x02, 0xba, 0x85, 0x9e, 0x65, 0x01, 0xfe, 0xa3, 0x9e, 0x89, 0x93, 0xf3, 0x56, 0x55, - 0x7a, 0x03, 0x75, 0x55, 0xba, 0xca, 0x7e, 0xbd, 0x94, 0x7d, 0xac, 0x58, 0x75, 0x2f, 0x33, 0x0a, - 0x9b, 0xd4, 0x2c, 0x82, 0x2e, 0x78, 0x23, 0xfc, 0xa0, 0xec, 0xb7, 0x02, 0xb7, 0x0b, 0xbe, 0xc0, - 0xfe, 0xd0, 0x4b, 0x99, 0xf1, 0xd4, 0xbc, 0xc4, 0x86, 0x54, 0x2b, 0x93, 0xf0, 0xf9, 0x78, 0xc3, - 0x93, 0x69, 0xf0, 0x57, 0x1d, 0x5a, 0x93, 0x98, 0xa5, 0x91, 0x48, 0xb8, 0x3a, 0x33, 0x8d, 0x96, - 0xa6, 0xd8, 0xda, 0x54, 0x7f, 0xe3, 0x04, 0xed, 0xba, 0x01, 0x68, 0xf4, 0xa9, 0x7f, 0xac, 0x13, - 0x68, 0x27, 0x2e, 0xbf, 0x15, 0x9f, 0x82, 0x97, 0x16, 0x4b, 0x3b, 0x16, 0x5d, 0xe8, 0x80, 0x26, - 0xc3, 0x51, 0x33, 0xda, 0x3e, 0x1b, 0xee, 0x84, 0xc6, 0xc7, 0xb4, 0xa1, 0x1d, 0x59, 0x6e, 0x15, - 0x7b, 0x82, 0xb1, 0xb9, 0xf9, 0xac, 0x4e, 0x30, 0x1c, 0xa9, 0x9e, 0xab, 0xab, 0x48, 0x2c, 0x8b, - 0x0c, 0x31, 0x78, 0x06, 0xd6, 0xeb, 0x96, 0xc6, 0x74, 0x8d, 0x75, 0x62, 0x8c, 0xea, 0x07, 0xe7, - 0x82, 0xa5, 0xf1, 0x5c, 0x69, 0xb9, 0x42, 0x9a, 0xca, 0xee, 0xaf, 0x1c, 0x0e, 0xfc, 0x1c, 0x7c, - 0x99, 0x45, 0x57, 0x29, 0xfe, 0xa6, 0xc4, 0xf8, 0x33, 0x74, 0xc5, 0xc5, 0x3b, 0x7d, 0x83, 0x22, - 0x75, 0x55, 0x7e, 0x5f, 0xfb, 0x4f, 0x94, 0xfb, 0x57, 0xed, 0x1d, 0x29, 0x67, 0x30, 0x84, 0xb6, - 0x4b, 0xb8, 0xc4, 0xb7, 0xbf, 0x2d, 0xdd, 0x42, 0xbf, 0xa1, 0xde, 0xe0, 0x93, 0xb5, 0x7b, 0x5b, - 0x37, 0xbd, 0x01, 0xee, 0x3f, 0x73, 0x33, 0x4a, 0xb7, 0xfb, 0x0e, 0x78, 0x93, 0xb7, 0xa7, 0xa3, - 0x70, 0x74, 0x72, 0x3c, 0x3e, 0x3d, 0xef, 0xdf, 0x21, 0x7d, 0xe8, 0x0c, 0xcb, 0x96, 0xda, 0xfe, - 0xb1, 0x6b, 0x82, 0x0a, 0x61, 0x32, 0xa6, 0x6f, 0xc6, 0xb4, 0x4c, 0xb0, 0x96, 0x1a, 0xf1, 0xe1, - 0x9e, 0xb1, 0xbc, 0x1c, 0x9f, 0x8e, 0xe9, 0xf1, 0xca, 0x53, 0xdf, 0xff, 0x1c, 0xb6, 0xed, 0xbb, - 0x44, 0xda, 0xd0, 0x7c, 0x7d, 0x3a, 0xa4, 0x6f, 0x71, 0x87, 0x2e, 0x5e, 0xea, 0x9c, 0x8e, 0x87, - 0xaf, 0x8e, 0x4f, 0x5f, 0xf6, 0x6b, 0x17, 0x5b, 0xfa, 0x97, 0xf8, 0xdb, 0xbf, 0x03, 0x00, 0x00, - 0xff, 0xff, 0x75, 0x59, 0xf4, 0x03, 0x4e, 0x0b, 0x00, 0x00, + // 1179 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0x6f, 0x6f, 0xdb, 0xb6, + 0x13, 0xb6, 0x1d, 0xdb, 0xb1, 0x4e, 0xb6, 0xe3, 0x1f, 0x7f, 0xe9, 0xa0, 0xa6, 0x69, 0x97, 0x6a, + 0x1b, 0x16, 0x64, 0x40, 0x5a, 0x78, 0x05, 0xba, 0x62, 0x2f, 0x02, 0xc7, 0x33, 0xea, 0x00, 0x69, + 0x96, 0xd1, 0x69, 0x87, 0xbe, 0x12, 0x18, 0x99, 0xb1, 0x85, 0xc8, 0xa2, 0x46, 0x52, 0x09, 0xf2, + 0x15, 0xf6, 0x99, 0xf6, 0x39, 0xf6, 0x35, 0xf6, 0x15, 0x06, 0xfe, 0x91, 0x23, 0xb9, 0x06, 0x9a, + 0x6d, 0xef, 0xc4, 0xbb, 0xe7, 0xe1, 0x91, 0xf7, 0xdc, 0x1d, 0x05, 0x9d, 0x90, 0x25, 0x92, 0xb3, + 0xf8, 0x30, 0xe5, 0x4c, 0x32, 0xd4, 0x9e, 0xf1, 0x34, 0x3c, 0x94, 0x54, 0xc8, 0x28, 0x99, 0xed, + 0x74, 0x53, 0x72, 0x17, 0x33, 0x32, 0x15, 0xc6, 0xbb, 0xe3, 0x0a, 0x49, 0xa4, 0x5d, 0xf8, 0x7d, + 0xe8, 0x9c, 0xb3, 0x48, 0x08, 0x96, 0x9c, 0x13, 0x4e, 0x16, 0x02, 0x3d, 0x87, 0x36, 0xbb, 0xba, + 0xa2, 0x9c, 0x4e, 0x03, 0x45, 0xf2, 0xaa, 0x7b, 0xd5, 0xfd, 0x2a, 0x76, 0xad, 0xed, 0x94, 0x91, + 0xa9, 0x4f, 0xa0, 0xf3, 0x3e, 0x89, 0xae, 0x18, 0x5f, 0x58, 0xce, 0xb7, 0xb0, 0x15, 0x25, 0x92, + 0x72, 0xc2, 0x79, 0x74, 0x43, 0xe2, 0x20, 0x66, 0x96, 0xd6, 0x2d, 0x9a, 0x4f, 0xd9, 0x27, 0xc0, + 0x79, 0xe4, 0xd5, 0x3e, 0x05, 0x8e, 0x23, 0xff, 0x07, 0xf8, 0xff, 0x4f, 0x54, 0x52, 0xbe, 0x88, + 0x92, 0x48, 0xc8, 0x28, 0x7c, 0xf8, 0xe1, 0x7e, 0x81, 0xf6, 0x39, 0xe1, 0x54, 0x32, 0x4b, 0xf9, + 0x0e, 0xfe, 0x57, 0x0a, 0x79, 0x49, 0x04, 0xb5, 0xbc, 0x5e, 0xd1, 0x71, 0x4c, 0x04, 0x45, 0xdb, + 0xd0, 0x20, 0x71, 0x3a, 0x27, 0xf6, 0x54, 0x66, 0xe1, 0x23, 0xe8, 0x0d, 0x63, 0x26, 0x54, 0x00, + 0x96, 0x9a, 0x6d, 0xfd, 0x3f, 0x6a, 0x00, 0x2a, 0x9e, 0x8d, 0x32, 0x00, 0x37, 0xd4, 0x90, 0x20, + 0x66, 0x2c, 0xd5, 0xfb, 0xbb, 0xfd, 0x67, 0x87, 0x45, 0x1d, 0x0e, 0x57, 0xf7, 0x18, 0x57, 0x30, + 0x84, 0x4b, 0x1b, 0x7a, 0x0d, 0x9b, 0xa9, 0x51, 0x42, 0x47, 0x77, 0xfb, 0x4f, 0xca, 0xf4, 0x92, + 0x4c, 0xe3, 0x0a, 0xce, 0xd1, 0x8a, 0x98, 0x19, 0x39, 0xbc, 0x8d, 0x75, 0xc4, 0x92, 0x56, 0x8a, + 0x68, 0xd1, 0xe8, 0x47, 0x68, 0x4e, 0x75, 0x92, 0xbd, 0xba, 0xe6, 0x3d, 0x2f, 0xf3, 0xd6, 0x08, + 0x30, 0xae, 0x60, 0x4b, 0x41, 0xaf, 0xa0, 0x99, 0xea, 0x3c, 0x7b, 0x0d, 0x4d, 0xde, 0x59, 0x39, + 0x6d, 0x41, 0x03, 0xc5, 0x32, 0xd8, 0xe3, 0x26, 0xd4, 0x95, 0x70, 0xfe, 0x25, 0x74, 0x27, 0x34, + 0xcc, 0x78, 0x24, 0xef, 0x6c, 0x06, 0x9f, 0x81, 0x9b, 0x09, 0x1a, 0x28, 0x7e, 0x10, 0x12, 0x9d, + 0xc1, 0x16, 0x76, 0x32, 0x41, 0x2f, 0xa8, 0x90, 0x43, 0x82, 0x5e, 0xc2, 0xb6, 0xa0, 0xfc, 0x86, + 0xf2, 0x60, 0xce, 0x84, 0x0c, 0xd8, 0x0d, 0xe5, 0x3c, 0x9a, 0x52, 0x9d, 0x2b, 0x07, 0x23, 0xe3, + 0x1b, 0x33, 0x21, 0x7f, 0xb6, 0x1e, 0xff, 0xf7, 0x06, 0xb4, 0x87, 0x71, 0x44, 0x13, 0x39, 0x64, + 0xc9, 0x55, 0x34, 0x43, 0xdf, 0x40, 0xd7, 0x6e, 0x21, 0x09, 0x9f, 0x51, 0x29, 0xbc, 0xea, 0xde, + 0xc6, 0xbe, 0x83, 0x3b, 0xc6, 0x7a, 0x61, 0x8c, 0xe8, 0x8d, 0xd2, 0x52, 0xd1, 0x02, 0x79, 0x97, + 0x9a, 0x00, 0xdd, 0xbe, 0xb7, 0xaa, 0xa5, 0x02, 0x5c, 0xdc, 0xa5, 0x54, 0x69, 0x98, 0x7f, 0xa3, + 0x11, 0x6c, 0x09, 0x7b, 0xad, 0x20, 0xd5, 0xf7, 0xb2, 0x92, 0xec, 0x96, 0xe9, 0xe5, 0xbb, 0xe3, + 0xae, 0x28, 0xe7, 0xe2, 0x08, 0x76, 0x59, 0x26, 0x85, 0x24, 0xc9, 0x34, 0x4a, 0x66, 0x01, 0x4f, + 0x43, 0x11, 0xa4, 0x94, 0x07, 0xe1, 0x9c, 0x24, 0x09, 0x8d, 0xb5, 0x5c, 0x0d, 0xfc, 0xb8, 0x80, + 0xc1, 0x69, 0x28, 0xce, 0x29, 0x1f, 0x1a, 0x80, 0xea, 0x33, 0x7b, 0x05, 0x4b, 0x11, 0x5a, 0xa5, + 0x06, 0xee, 0x1a, 0xb3, 0xc5, 0x09, 0x95, 0x55, 0x22, 0xee, 0x92, 0x30, 0xc8, 0x6f, 0x3c, 0xe7, + 0x94, 0x4c, 0x85, 0xb7, 0xa9, 0xd1, 0x48, 0xfb, 0xec, 0x5d, 0x8d, 0x07, 0xbd, 0x84, 0x16, 0x4f, + 0x43, 0x93, 0x9a, 0x96, 0x4e, 0xcd, 0xa3, 0xf2, 0xdd, 0x70, 0x1a, 0xea, 0xbc, 0x6c, 0x72, 0xf3, + 0xa1, 0xf2, 0xa9, 0x34, 0xcf, 0x13, 0x02, 0x3a, 0x21, 0x2b, 0xf9, 0xbc, 0x6f, 0x25, 0x0c, 0xf1, + 0x7d, 0x5b, 0x1d, 0x43, 0x3e, 0xbc, 0x82, 0x50, 0x6b, 0xe8, 0xb9, 0x6b, 0x5b, 0xc3, 0x60, 0x8c, + 0xcc, 0xb8, 0x93, 0x16, 0x97, 0x68, 0x0c, 0xbd, 0x79, 0x24, 0x24, 0x9b, 0x71, 0xb2, 0xc8, 0xcf, + 0xd0, 0xd6, 0xbb, 0x3c, 0x2d, 0xef, 0x32, 0xce, 0x51, 0xf6, 0x20, 0x5b, 0xf3, 0xb2, 0x01, 0x3d, + 0x01, 0x27, 0x64, 0x9c, 0x06, 0x71, 0x24, 0xa4, 0xd7, 0xd9, 0xdb, 0xd8, 0x6f, 0xe0, 0x96, 0x32, + 0x9c, 0x46, 0x42, 0xa2, 0xa7, 0x00, 0xd6, 0xb9, 0x88, 0xa4, 0xd7, 0xd5, 0xf9, 0x73, 0x8c, 0x77, + 0x11, 0x49, 0xff, 0x28, 0xaf, 0xc5, 0x89, 0x24, 0x32, 0x13, 0xe8, 0x05, 0x34, 0xf4, 0x18, 0xb6, + 0xa3, 0xe2, 0xf1, 0xba, 0xf2, 0x52, 0x50, 0x81, 0x0d, 0xce, 0xdf, 0x85, 0xfa, 0x3b, 0xc2, 0xaf, + 0xd5, 0x88, 0xe2, 0x54, 0x50, 0x69, 0x3b, 0xc4, 0x2c, 0xfc, 0x0c, 0xc0, 0x70, 0x06, 0x7c, 0x26, + 0x50, 0x1f, 0x1a, 0x82, 0xca, 0x2c, 0x9f, 0x43, 0x3b, 0xeb, 0x36, 0x37, 0xd9, 0x19, 0x57, 0xb0, + 0x81, 0xa2, 0x7d, 0xa8, 0x2f, 0x08, 0xbf, 0xb6, 0xb3, 0x07, 0x95, 0x29, 0x2a, 0xf2, 0xb8, 0x82, + 0x35, 0xe2, 0xd8, 0x81, 0x4d, 0xc2, 0x67, 0xaa, 0x00, 0xfc, 0x3f, 0x6b, 0xd0, 0x9e, 0xe8, 0xe6, + 0xb1, 0xc9, 0x7e, 0x03, 0x6e, 0xde, 0x62, 0xaa, 0x40, 0xaa, 0xeb, 0x7a, 0xc7, 0x10, 0x4c, 0xef, + 0x88, 0xe5, 0xf7, 0xba, 0xde, 0xa9, 0xfd, 0x8b, 0xde, 0x41, 0x50, 0x4f, 0x19, 0x97, 0xb6, 0x47, + 0xf4, 0xf7, 0x7d, 0x95, 0xe7, 0x67, 0x5b, 0x53, 0xe5, 0xf6, 0x54, 0xb6, 0xca, 0xcb, 0x6a, 0xb6, + 0x56, 0xd4, 0x5c, 0x53, 0x97, 0xce, 0x3f, 0xae, 0xcb, 0x52, 0x35, 0x41, 0xb9, 0x9a, 0x94, 0x9e, + 0xe6, 0x40, 0x0f, 0xd0, 0xb3, 0x28, 0xc0, 0x7f, 0xd4, 0x33, 0xca, 0xe5, 0x7c, 0x50, 0x95, 0xde, + 0x43, 0xf3, 0x2a, 0x5d, 0x66, 0xbf, 0x56, 0xc8, 0xfe, 0x36, 0x34, 0xd4, 0xbd, 0xcc, 0x28, 0x6c, + 0x60, 0xb3, 0xf0, 0x3b, 0xe0, 0x0e, 0x19, 0xa7, 0x98, 0xfe, 0x96, 0x51, 0x21, 0xfd, 0xaf, 0xa1, + 0x6d, 0x96, 0x22, 0x65, 0x89, 0x79, 0x89, 0x0d, 0xa9, 0x5a, 0x24, 0x35, 0xa1, 0xfe, 0x81, 0x45, + 0x53, 0xff, 0xaf, 0x1a, 0xb4, 0x26, 0x21, 0x4d, 0x08, 0x8f, 0x98, 0x8a, 0x99, 0x90, 0x85, 0x29, + 0x36, 0x07, 0xeb, 0x6f, 0x74, 0x04, 0x9d, 0x7c, 0x00, 0x1a, 0x7d, 0x6a, 0x9f, 0xeb, 0x04, 0xdc, + 0x0e, 0x8b, 0x6f, 0xc5, 0x97, 0xe0, 0x26, 0xd9, 0xc2, 0x8e, 0xc5, 0xfc, 0xe8, 0x90, 0x64, 0x0b, + 0xc3, 0x51, 0x33, 0xda, 0x3e, 0x1b, 0x79, 0x84, 0xfa, 0xe7, 0xb4, 0xc1, 0x6d, 0x51, 0x6c, 0x15, + 0x1b, 0xc1, 0xd8, 0xf2, 0xf9, 0xac, 0x22, 0x18, 0x8e, 0x50, 0xcf, 0xd5, 0x2d, 0xe1, 0x8b, 0x2c, + 0x0d, 0x04, 0x0d, 0x59, 0x32, 0x15, 0x5e, 0x53, 0x63, 0x3a, 0xc6, 0x3a, 0x31, 0x46, 0xf5, 0x83, + 0x73, 0x49, 0x93, 0x70, 0xae, 0xb4, 0x5c, 0x22, 0x4d, 0x65, 0xf7, 0x96, 0x8e, 0x1c, 0xfc, 0x1a, + 0x3c, 0x91, 0x92, 0xdb, 0x24, 0x88, 0x59, 0x48, 0xe2, 0xe0, 0x96, 0xf1, 0x6b, 0x7d, 0x83, 0x2c, + 0xc9, 0xab, 0xfc, 0x91, 0xf6, 0x9f, 0x2a, 0xf7, 0xaf, 0xda, 0x3b, 0x54, 0x4e, 0x7f, 0x00, 0x4e, + 0x9e, 0x70, 0x81, 0x5e, 0x81, 0x23, 0xf2, 0x85, 0x7e, 0x43, 0xdd, 0xfe, 0x17, 0x2b, 0xf7, 0xb6, + 0x6e, 0x7c, 0x0f, 0x3c, 0x78, 0x91, 0xcf, 0x28, 0xdd, 0xee, 0x5b, 0xe0, 0x4e, 0x3e, 0x9e, 0x0d, + 0x83, 0xe1, 0xe9, 0xc9, 0xe8, 0xec, 0xa2, 0x57, 0x41, 0x3d, 0x68, 0x0f, 0x8a, 0x96, 0xea, 0xc1, + 0x49, 0xde, 0x04, 0x25, 0xc2, 0x64, 0x84, 0x3f, 0x8c, 0x70, 0x91, 0x60, 0x2d, 0x55, 0xe4, 0xc1, + 0xb6, 0xb1, 0xbc, 0x1d, 0x9d, 0x8d, 0xf0, 0xc9, 0xd2, 0x53, 0x3b, 0xf8, 0x0a, 0x36, 0xed, 0xbb, + 0x84, 0x1c, 0x68, 0xbc, 0x3f, 0x1b, 0xe0, 0x8f, 0xbd, 0x0a, 0xea, 0x80, 0x33, 0xb9, 0xc0, 0xa3, + 0xc1, 0xbb, 0x93, 0xb3, 0xb7, 0xbd, 0xea, 0x65, 0x53, 0xff, 0x12, 0x7f, 0xff, 0x77, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x75, 0x59, 0xf4, 0x03, 0x4e, 0x0b, 0x00, 0x00, } diff --git a/vendor/google.golang.org/grpc/benchmark/grpc_testing/control.proto b/vendor/google.golang.org/grpc/benchmark/grpc_testing/control.proto index e0fe0ec..9379ef4 100644 --- a/vendor/google.golang.org/grpc/benchmark/grpc_testing/control.proto +++ b/vendor/google.golang.org/grpc/benchmark/grpc_testing/control.proto @@ -1,31 +1,16 @@ -// Copyright 2016, Google Inc. -// All rights reserved. +// Copyright 2016 gRPC authors. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// 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 // -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// http://www.apache.org/licenses/LICENSE-2.0 // -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// 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. syntax = "proto3"; diff --git a/vendor/google.golang.org/grpc/benchmark/grpc_testing/messages.pb.go b/vendor/google.golang.org/grpc/benchmark/grpc_testing/messages.pb.go index b3c8cff..b34c5d5 100644 --- a/vendor/google.golang.org/grpc/benchmark/grpc_testing/messages.pb.go +++ b/vendor/google.golang.org/grpc/benchmark/grpc_testing/messages.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: messages.proto -// DO NOT EDIT! package grpc_testing @@ -80,6 +79,20 @@ func (m *Payload) String() string { return proto.CompactTextString(m) func (*Payload) ProtoMessage() {} func (*Payload) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } +func (m *Payload) GetType() PayloadType { + if m != nil { + return m.Type + } + return PayloadType_COMPRESSABLE +} + +func (m *Payload) GetBody() []byte { + if m != nil { + return m.Body + } + return nil +} + // A protobuf representation for grpc status. This is used by test // clients to specify a status that the server should attempt to return. type EchoStatus struct { @@ -92,6 +105,20 @@ func (m *EchoStatus) String() string { return proto.CompactTextString func (*EchoStatus) ProtoMessage() {} func (*EchoStatus) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } +func (m *EchoStatus) GetCode() int32 { + if m != nil { + return m.Code + } + return 0 +} + +func (m *EchoStatus) GetMessage() string { + if m != nil { + return m.Message + } + return "" +} + // Unary request. type SimpleRequest struct { // Desired payload type in the response from the server. @@ -117,6 +144,20 @@ func (m *SimpleRequest) String() string { return proto.CompactTextStr func (*SimpleRequest) ProtoMessage() {} func (*SimpleRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } +func (m *SimpleRequest) GetResponseType() PayloadType { + if m != nil { + return m.ResponseType + } + return PayloadType_COMPRESSABLE +} + +func (m *SimpleRequest) GetResponseSize() int32 { + if m != nil { + return m.ResponseSize + } + return 0 +} + func (m *SimpleRequest) GetPayload() *Payload { if m != nil { return m.Payload @@ -124,6 +165,27 @@ func (m *SimpleRequest) GetPayload() *Payload { return nil } +func (m *SimpleRequest) GetFillUsername() bool { + if m != nil { + return m.FillUsername + } + return false +} + +func (m *SimpleRequest) GetFillOauthScope() bool { + if m != nil { + return m.FillOauthScope + } + return false +} + +func (m *SimpleRequest) GetResponseCompression() CompressionType { + if m != nil { + return m.ResponseCompression + } + return CompressionType_NONE +} + func (m *SimpleRequest) GetResponseStatus() *EchoStatus { if m != nil { return m.ResponseStatus @@ -154,6 +216,20 @@ func (m *SimpleResponse) GetPayload() *Payload { return nil } +func (m *SimpleResponse) GetUsername() string { + if m != nil { + return m.Username + } + return "" +} + +func (m *SimpleResponse) GetOauthScope() string { + if m != nil { + return m.OauthScope + } + return "" +} + // Client-streaming request. type StreamingInputCallRequest struct { // Optional input payload sent along with the request. @@ -183,6 +259,13 @@ func (m *StreamingInputCallResponse) String() string { return proto.C func (*StreamingInputCallResponse) ProtoMessage() {} func (*StreamingInputCallResponse) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } +func (m *StreamingInputCallResponse) GetAggregatedPayloadSize() int32 { + if m != nil { + return m.AggregatedPayloadSize + } + return 0 +} + // Configuration for a particular response. type ResponseParameters struct { // Desired payload sizes in responses from the server. @@ -198,6 +281,20 @@ func (m *ResponseParameters) String() string { return proto.CompactTe func (*ResponseParameters) ProtoMessage() {} func (*ResponseParameters) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } +func (m *ResponseParameters) GetSize() int32 { + if m != nil { + return m.Size + } + return 0 +} + +func (m *ResponseParameters) GetIntervalUs() int32 { + if m != nil { + return m.IntervalUs + } + return 0 +} + // Server-streaming request. type StreamingOutputCallRequest struct { // Desired payload type in the response from the server. @@ -220,6 +317,13 @@ func (m *StreamingOutputCallRequest) String() string { return proto.C func (*StreamingOutputCallRequest) ProtoMessage() {} func (*StreamingOutputCallRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} } +func (m *StreamingOutputCallRequest) GetResponseType() PayloadType { + if m != nil { + return m.ResponseType + } + return PayloadType_COMPRESSABLE +} + func (m *StreamingOutputCallRequest) GetResponseParameters() []*ResponseParameters { if m != nil { return m.ResponseParameters @@ -234,6 +338,13 @@ func (m *StreamingOutputCallRequest) GetPayload() *Payload { return nil } +func (m *StreamingOutputCallRequest) GetResponseCompression() CompressionType { + if m != nil { + return m.ResponseCompression + } + return CompressionType_NONE +} + func (m *StreamingOutputCallRequest) GetResponseStatus() *EchoStatus { if m != nil { return m.ResponseStatus @@ -270,12 +381,19 @@ func (m *ReconnectParams) String() string { return proto.CompactTextS func (*ReconnectParams) ProtoMessage() {} func (*ReconnectParams) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{9} } +func (m *ReconnectParams) GetMaxReconnectBackoffMs() int32 { + if m != nil { + return m.MaxReconnectBackoffMs + } + return 0 +} + // For reconnect interop test only. // Server tells client whether its reconnects are following the spec and the // reconnect backoffs it saw. type ReconnectInfo struct { Passed bool `protobuf:"varint,1,opt,name=passed" json:"passed,omitempty"` - BackoffMs []int32 `protobuf:"varint,2,rep,name=backoff_ms,json=backoffMs" json:"backoff_ms,omitempty"` + BackoffMs []int32 `protobuf:"varint,2,rep,packed,name=backoff_ms,json=backoffMs" json:"backoff_ms,omitempty"` } func (m *ReconnectInfo) Reset() { *m = ReconnectInfo{} } @@ -283,6 +401,20 @@ func (m *ReconnectInfo) String() string { return proto.CompactTextStr func (*ReconnectInfo) ProtoMessage() {} func (*ReconnectInfo) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{10} } +func (m *ReconnectInfo) GetPassed() bool { + if m != nil { + return m.Passed + } + return false +} + +func (m *ReconnectInfo) GetBackoffMs() []int32 { + if m != nil { + return m.BackoffMs + } + return nil +} + func init() { proto.RegisterType((*Payload)(nil), "grpc.testing.Payload") proto.RegisterType((*EchoStatus)(nil), "grpc.testing.EchoStatus") @@ -302,46 +434,46 @@ func init() { func init() { proto.RegisterFile("messages.proto", fileDescriptor1) } var fileDescriptor1 = []byte{ - // 645 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xcc, 0x55, 0x4d, 0x6f, 0xd3, 0x40, - 0x10, 0x25, 0xdf, 0xe9, 0x24, 0x4d, 0xa3, 0x85, 0x82, 0x5b, 0x54, 0x51, 0x99, 0x4b, 0x55, 0x89, - 0x20, 0x15, 0x09, 0x24, 0x0e, 0xa0, 0xb4, 0x4d, 0x51, 0x50, 0x9b, 0x84, 0x75, 0x7b, 0xe1, 0x62, - 0x6d, 0x9c, 0x4d, 0x1a, 0x11, 0x7b, 0x8d, 0x77, 0x8d, 0x28, 0x07, 0xee, 0xfc, 0x60, 0xee, 0xec, - 0xae, 0xbd, 0x8e, 0xd3, 0xf6, 0xd0, 0xc2, 0x85, 0xdb, 0xce, 0xcc, 0x9b, 0x97, 0x79, 0x33, 0xcf, - 0x0a, 0xb4, 0x7c, 0xca, 0x39, 0x99, 0x51, 0xde, 0x09, 0x23, 0x26, 0x18, 0x6a, 0xce, 0xa2, 0xd0, - 0xeb, 0x08, 0xca, 0xc5, 0x3c, 0x98, 0xd9, 0xa7, 0x50, 0x1b, 0x91, 0xab, 0x05, 0x23, 0x13, 0xf4, - 0x02, 0xca, 0xe2, 0x2a, 0xa4, 0x56, 0x61, 0xb7, 0xb0, 0xd7, 0x3a, 0xd8, 0xea, 0xe4, 0x71, 0x9d, - 0x14, 0x74, 0x2e, 0x01, 0x58, 0xc3, 0x10, 0x82, 0xf2, 0x98, 0x4d, 0xae, 0xac, 0xa2, 0x84, 0x37, - 0xb1, 0x7e, 0xdb, 0x6f, 0x01, 0x7a, 0xde, 0x25, 0x73, 0x04, 0x11, 0x31, 0x57, 0x08, 0x8f, 0x4d, - 0x12, 0xc2, 0x0a, 0xd6, 0x6f, 0x64, 0x41, 0x2d, 0x9d, 0x47, 0x37, 0xae, 0x61, 0x13, 0xda, 0xbf, - 0x4a, 0xb0, 0xee, 0xcc, 0xfd, 0x70, 0x41, 0x31, 0xfd, 0x1a, 0xcb, 0x9f, 0x45, 0xef, 0x60, 0x3d, - 0xa2, 0x3c, 0x64, 0x01, 0xa7, 0xee, 0xdd, 0x26, 0x6b, 0x1a, 0xbc, 0x8a, 0xd0, 0xf3, 0x5c, 0x3f, - 0x9f, 0xff, 0x48, 0x7e, 0xb1, 0xb2, 0x04, 0x39, 0x32, 0x87, 0x5e, 0x42, 0x2d, 0x4c, 0x18, 0xac, - 0x92, 0x2c, 0x37, 0x0e, 0x36, 0x6f, 0xa5, 0xc7, 0x06, 0xa5, 0x58, 0xa7, 0xf3, 0xc5, 0xc2, 0x8d, - 0x39, 0x8d, 0x02, 0xe2, 0x53, 0xab, 0x2c, 0xdb, 0xea, 0xb8, 0xa9, 0x92, 0x17, 0x69, 0x0e, 0xed, - 0x41, 0x5b, 0x83, 0x18, 0x89, 0xc5, 0xa5, 0xcb, 0x3d, 0x26, 0xa7, 0xaf, 0x68, 0x5c, 0x4b, 0xe5, - 0x87, 0x2a, 0xed, 0xa8, 0x2c, 0x1a, 0xc1, 0xa3, 0x6c, 0x48, 0x8f, 0xf9, 0xa1, 0x0c, 0xf8, 0x9c, - 0x05, 0x56, 0x55, 0x6b, 0xdd, 0x59, 0x1d, 0xe6, 0x68, 0x09, 0xd0, 0x7a, 0x1f, 0x9a, 0xd6, 0x5c, - 0x01, 0x75, 0x61, 0x63, 0x29, 0x5b, 0x5f, 0xc2, 0xaa, 0x69, 0x65, 0xd6, 0x2a, 0xd9, 0xf2, 0x52, - 0xb8, 0x95, 0xad, 0x44, 0xc7, 0xf6, 0x4f, 0x68, 0x99, 0x53, 0x24, 0xf9, 0xfc, 0x9a, 0x0a, 0x77, - 0x5a, 0xd3, 0x36, 0xd4, 0xb3, 0x0d, 0x25, 0x97, 0xce, 0x62, 0xf4, 0x0c, 0x1a, 0xf9, 0xc5, 0x94, - 0x74, 0x19, 0x58, 0xb6, 0x14, 0xe9, 0xca, 0x2d, 0x47, 0x44, 0x94, 0xf8, 0x92, 0xba, 0x1f, 0x84, - 0xb1, 0x38, 0x22, 0x8b, 0x85, 0xb1, 0xc5, 0x7d, 0x47, 0xb1, 0xcf, 0x61, 0xfb, 0x36, 0xb6, 0x54, - 0xd9, 0x6b, 0x78, 0x42, 0x66, 0xb3, 0x88, 0xce, 0x88, 0xa0, 0x13, 0x37, 0xed, 0x49, 0xfc, 0x92, - 0x18, 0x77, 0x73, 0x59, 0x4e, 0xa9, 0x95, 0x71, 0xec, 0x3e, 0x20, 0xc3, 0x31, 0x22, 0x91, 0x94, - 0x25, 0x68, 0xa4, 0x3d, 0x9f, 0x6b, 0xd5, 0x6f, 0x25, 0x77, 0x1e, 0xc8, 0xea, 0x37, 0xa2, 0x5c, - 0x93, 0xba, 0x10, 0x4c, 0xea, 0x82, 0xdb, 0xbf, 0x8b, 0xb9, 0x09, 0x87, 0xb1, 0xb8, 0x26, 0xf8, - 0x5f, 0xbf, 0x83, 0x4f, 0x90, 0xf9, 0x44, 0xea, 0x33, 0xa3, 0xca, 0x39, 0x4a, 0x72, 0x79, 0xbb, - 0xab, 0x2c, 0x37, 0x25, 0x61, 0x14, 0xdd, 0x94, 0x79, 0xef, 0xaf, 0xe6, 0xbf, 0xb4, 0xf9, 0x00, - 0x9e, 0xde, 0xba, 0xf6, 0xbf, 0xf4, 0xbc, 0xfd, 0x11, 0x36, 0x30, 0xf5, 0x58, 0x10, 0x50, 0x4f, - 0xe8, 0x65, 0x71, 0xf4, 0x06, 0x2c, 0x9f, 0x7c, 0x77, 0x23, 0x93, 0x76, 0xc7, 0xc4, 0xfb, 0xc2, - 0xa6, 0x53, 0xd7, 0xe7, 0xc6, 0x5e, 0xb2, 0x9e, 0x75, 0x1d, 0x26, 0xd5, 0x33, 0x6e, 0x9f, 0xc0, - 0x7a, 0x96, 0xed, 0x07, 0x53, 0x86, 0x1e, 0x43, 0x35, 0x24, 0x9c, 0xd3, 0x64, 0x98, 0x3a, 0x4e, - 0x23, 0xb4, 0x03, 0x90, 0xe3, 0x54, 0x47, 0xad, 0xe0, 0xb5, 0xb1, 0xe1, 0xd9, 0x7f, 0x0f, 0x8d, - 0x9c, 0x33, 0x50, 0x1b, 0x9a, 0x47, 0xc3, 0xb3, 0x11, 0xee, 0x39, 0x4e, 0xf7, 0xf0, 0xb4, 0xd7, - 0x7e, 0x20, 0x1d, 0xdb, 0xba, 0x18, 0xac, 0xe4, 0x0a, 0x08, 0xa0, 0x8a, 0xbb, 0x83, 0xe3, 0xe1, - 0x59, 0xbb, 0xb8, 0x7f, 0x00, 0x1b, 0xd7, 0xee, 0x81, 0xea, 0x50, 0x1e, 0x0c, 0x07, 0xaa, 0x59, - 0xbe, 0x3e, 0x7c, 0xee, 0x8f, 0x64, 0x4b, 0x03, 0x6a, 0xc7, 0xbd, 0x93, 0xd3, 0xee, 0x79, 0xaf, - 0x5d, 0x1c, 0x57, 0xf5, 0x5f, 0xcd, 0xab, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xc2, 0x6a, 0xce, - 0x1e, 0x7c, 0x06, 0x00, 0x00, + // 652 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x55, 0x4d, 0x6f, 0xd3, 0x40, + 0x10, 0xc5, 0xf9, 0xee, 0x24, 0x4d, 0xa3, 0x85, 0x82, 0x5b, 0x54, 0x11, 0x99, 0x4b, 0x54, 0x89, + 0x20, 0x05, 0x09, 0x24, 0x0e, 0xa0, 0xb4, 0x4d, 0x51, 0x50, 0x9a, 0x84, 0x75, 0x7b, 0xe1, 0x62, + 0x6d, 0x9c, 0x8d, 0x6b, 0x11, 0x7b, 0x8d, 0x77, 0x8d, 0x9a, 0x1e, 0xb8, 0xf3, 0x83, 0xb9, 0xa3, + 0x5d, 0x7f, 0xc4, 0x69, 0x7b, 0x68, 0xe1, 0xc2, 0x6d, 0xf7, 0xed, 0x9b, 0x97, 0x79, 0x33, 0xcf, + 0x0a, 0x34, 0x3d, 0xca, 0x39, 0x71, 0x28, 0xef, 0x06, 0x21, 0x13, 0x0c, 0x35, 0x9c, 0x30, 0xb0, + 0xbb, 0x82, 0x72, 0xe1, 0xfa, 0x8e, 0x31, 0x82, 0xea, 0x94, 0xac, 0x96, 0x8c, 0xcc, 0xd1, 0x2b, + 0x28, 0x89, 0x55, 0x40, 0x75, 0xad, 0xad, 0x75, 0x9a, 0xbd, 0xbd, 0x6e, 0x9e, 0xd7, 0x4d, 0x48, + 0xe7, 0xab, 0x80, 0x62, 0x45, 0x43, 0x08, 0x4a, 0x33, 0x36, 0x5f, 0xe9, 0x85, 0xb6, 0xd6, 0x69, + 0x60, 0x75, 0x36, 0xde, 0x03, 0x0c, 0xec, 0x4b, 0x66, 0x0a, 0x22, 0x22, 0x2e, 0x19, 0x36, 0x9b, + 0xc7, 0x82, 0x65, 0xac, 0xce, 0x48, 0x87, 0x6a, 0xd2, 0x8f, 0x2a, 0xdc, 0xc2, 0xe9, 0xd5, 0xf8, + 0x55, 0x84, 0x6d, 0xd3, 0xf5, 0x82, 0x25, 0xc5, 0xf4, 0x7b, 0x44, 0xb9, 0x40, 0x1f, 0x60, 0x3b, + 0xa4, 0x3c, 0x60, 0x3e, 0xa7, 0xd6, 0xfd, 0x3a, 0x6b, 0xa4, 0x7c, 0x79, 0x43, 0x2f, 0x73, 0xf5, + 0xdc, 0xbd, 0x8e, 0x7f, 0xb1, 0xbc, 0x26, 0x99, 0xee, 0x35, 0x45, 0xaf, 0xa1, 0x1a, 0xc4, 0x0a, + 0x7a, 0xb1, 0xad, 0x75, 0xea, 0xbd, 0xdd, 0x3b, 0xe5, 0x71, 0xca, 0x92, 0xaa, 0x0b, 0x77, 0xb9, + 0xb4, 0x22, 0x4e, 0x43, 0x9f, 0x78, 0x54, 0x2f, 0xb5, 0xb5, 0x4e, 0x0d, 0x37, 0x24, 0x78, 0x91, + 0x60, 0xa8, 0x03, 0x2d, 0x45, 0x62, 0x24, 0x12, 0x97, 0x16, 0xb7, 0x59, 0x40, 0xf5, 0xb2, 0xe2, + 0x35, 0x25, 0x3e, 0x91, 0xb0, 0x29, 0x51, 0x34, 0x85, 0x27, 0x59, 0x93, 0x36, 0xf3, 0x82, 0x90, + 0x72, 0xee, 0x32, 0x5f, 0xaf, 0x28, 0xaf, 0x07, 0x9b, 0xcd, 0x1c, 0xaf, 0x09, 0xca, 0xef, 0xe3, + 0xb4, 0x34, 0xf7, 0x80, 0xfa, 0xb0, 0xb3, 0xb6, 0xad, 0x36, 0xa1, 0x57, 0x95, 0x33, 0x7d, 0x53, + 0x6c, 0xbd, 0x29, 0xdc, 0xcc, 0x46, 0xa2, 0xee, 0xc6, 0x4f, 0x68, 0xa6, 0xab, 0x88, 0xf1, 0xfc, + 0x98, 0xb4, 0x7b, 0x8d, 0x69, 0x1f, 0x6a, 0xd9, 0x84, 0xe2, 0x4d, 0x67, 0x77, 0xf4, 0x02, 0xea, + 0xf9, 0xc1, 0x14, 0xd5, 0x33, 0xb0, 0x6c, 0x28, 0xc6, 0x08, 0xf6, 0x4c, 0x11, 0x52, 0xe2, 0xb9, + 0xbe, 0x33, 0xf4, 0x83, 0x48, 0x1c, 0x93, 0xe5, 0x32, 0x8d, 0xc5, 0x43, 0x5b, 0x31, 0xce, 0x61, + 0xff, 0x2e, 0xb5, 0xc4, 0xd9, 0x5b, 0x78, 0x46, 0x1c, 0x27, 0xa4, 0x0e, 0x11, 0x74, 0x6e, 0x25, + 0x35, 0x71, 0x5e, 0xe2, 0xe0, 0xee, 0xae, 0x9f, 0x13, 0x69, 0x19, 0x1c, 0x63, 0x08, 0x28, 0xd5, + 0x98, 0x92, 0x90, 0x78, 0x54, 0xd0, 0x50, 0x65, 0x3e, 0x57, 0xaa, 0xce, 0xd2, 0xae, 0xeb, 0x0b, + 0x1a, 0xfe, 0x20, 0x32, 0x35, 0x49, 0x0a, 0x21, 0x85, 0x2e, 0xb8, 0xf1, 0xbb, 0x90, 0xeb, 0x70, + 0x12, 0x89, 0x1b, 0x86, 0xff, 0xf5, 0x3b, 0xf8, 0x02, 0x59, 0x4e, 0xac, 0x20, 0x6b, 0x55, 0x2f, + 0xb4, 0x8b, 0x9d, 0x7a, 0xaf, 0xbd, 0xa9, 0x72, 0xdb, 0x12, 0x46, 0xe1, 0x6d, 0x9b, 0x0f, 0xfe, + 0x6a, 0xfe, 0xcb, 0x98, 0x8f, 0xe1, 0xf9, 0x9d, 0x63, 0xff, 0xcb, 0xcc, 0x1b, 0x9f, 0x61, 0x07, + 0x53, 0x9b, 0xf9, 0x3e, 0xb5, 0x85, 0x1a, 0x16, 0x47, 0xef, 0x40, 0xf7, 0xc8, 0x95, 0x15, 0xa6, + 0xb0, 0x35, 0x23, 0xf6, 0x37, 0xb6, 0x58, 0x58, 0x1e, 0x4f, 0xe3, 0xe5, 0x91, 0xab, 0xac, 0xea, + 0x28, 0x7e, 0x3d, 0xe3, 0xc6, 0x29, 0x6c, 0x67, 0xe8, 0xd0, 0x5f, 0x30, 0xf4, 0x14, 0x2a, 0x01, + 0xe1, 0x9c, 0xc6, 0xcd, 0xd4, 0x70, 0x72, 0x43, 0x07, 0x00, 0x39, 0x4d, 0xb9, 0xd4, 0x32, 0xde, + 0x9a, 0xa5, 0x3a, 0x87, 0x1f, 0xa1, 0x9e, 0x4b, 0x06, 0x6a, 0x41, 0xe3, 0x78, 0x72, 0x36, 0xc5, + 0x03, 0xd3, 0xec, 0x1f, 0x8d, 0x06, 0xad, 0x47, 0x08, 0x41, 0xf3, 0x62, 0xbc, 0x81, 0x69, 0x08, + 0xa0, 0x82, 0xfb, 0xe3, 0x93, 0xc9, 0x59, 0xab, 0x70, 0xd8, 0x83, 0x9d, 0x1b, 0xfb, 0x40, 0x35, + 0x28, 0x8d, 0x27, 0x63, 0x59, 0x5c, 0x83, 0xd2, 0xa7, 0xaf, 0xc3, 0x69, 0x4b, 0x43, 0x75, 0xa8, + 0x9e, 0x0c, 0x4e, 0x47, 0xfd, 0xf3, 0x41, 0xab, 0x30, 0xab, 0xa8, 0xbf, 0x9a, 0x37, 0x7f, 0x02, + 0x00, 0x00, 0xff, 0xff, 0xc2, 0x6a, 0xce, 0x1e, 0x7c, 0x06, 0x00, 0x00, } diff --git a/vendor/google.golang.org/grpc/benchmark/grpc_testing/messages.proto b/vendor/google.golang.org/grpc/benchmark/grpc_testing/messages.proto index b1abc9e..bd83f09 100644 --- a/vendor/google.golang.org/grpc/benchmark/grpc_testing/messages.proto +++ b/vendor/google.golang.org/grpc/benchmark/grpc_testing/messages.proto @@ -1,31 +1,16 @@ -// Copyright 2016, Google Inc. -// All rights reserved. +// Copyright 2016 gRPC authors. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// 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 // -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// http://www.apache.org/licenses/LICENSE-2.0 // -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// 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. // Message definitions to be used by integration test service definitions. diff --git a/vendor/google.golang.org/grpc/benchmark/grpc_testing/payloads.pb.go b/vendor/google.golang.org/grpc/benchmark/grpc_testing/payloads.pb.go index ffc357d..d70d1f7 100644 --- a/vendor/google.golang.org/grpc/benchmark/grpc_testing/payloads.pb.go +++ b/vendor/google.golang.org/grpc/benchmark/grpc_testing/payloads.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: payloads.proto -// DO NOT EDIT! package grpc_testing @@ -23,6 +22,20 @@ func (m *ByteBufferParams) String() string { return proto.CompactText func (*ByteBufferParams) ProtoMessage() {} func (*ByteBufferParams) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } +func (m *ByteBufferParams) GetReqSize() int32 { + if m != nil { + return m.ReqSize + } + return 0 +} + +func (m *ByteBufferParams) GetRespSize() int32 { + if m != nil { + return m.RespSize + } + return 0 +} + type SimpleProtoParams struct { ReqSize int32 `protobuf:"varint,1,opt,name=req_size,json=reqSize" json:"req_size,omitempty"` RespSize int32 `protobuf:"varint,2,opt,name=resp_size,json=respSize" json:"resp_size,omitempty"` @@ -33,6 +46,20 @@ func (m *SimpleProtoParams) String() string { return proto.CompactTex func (*SimpleProtoParams) ProtoMessage() {} func (*SimpleProtoParams) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{1} } +func (m *SimpleProtoParams) GetReqSize() int32 { + if m != nil { + return m.ReqSize + } + return 0 +} + +func (m *SimpleProtoParams) GetRespSize() int32 { + if m != nil { + return m.RespSize + } + return 0 +} + type ComplexProtoParams struct { } @@ -203,21 +230,21 @@ func init() { func init() { proto.RegisterFile("payloads.proto", fileDescriptor2) } var fileDescriptor2 = []byte{ - // 250 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xe2, 0x2b, 0x48, 0xac, 0xcc, + // 254 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x2b, 0x48, 0xac, 0xcc, 0xc9, 0x4f, 0x4c, 0x29, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x49, 0x2f, 0x2a, 0x48, 0xd6, 0x2b, 0x49, 0x2d, 0x2e, 0xc9, 0xcc, 0x4b, 0x57, 0xf2, 0xe2, 0x12, 0x70, 0xaa, 0x2c, 0x49, 0x75, 0x2a, 0x4d, 0x4b, 0x4b, 0x2d, 0x0a, 0x48, 0x2c, 0x4a, 0xcc, 0x2d, 0x16, 0x92, 0xe4, 0xe2, 0x28, 0x4a, 0x2d, 0x8c, 0x2f, 0xce, 0xac, 0x4a, 0x95, 0x60, 0x54, 0x60, 0xd4, 0x60, 0x0d, 0x62, - 0x07, 0xf2, 0x83, 0x81, 0x5c, 0x21, 0x69, 0x2e, 0xce, 0xa2, 0xd4, 0xe2, 0x02, 0x88, 0x1c, 0x13, - 0x58, 0x8e, 0x03, 0x24, 0x00, 0x92, 0x54, 0xf2, 0xe6, 0x12, 0x0c, 0xce, 0xcc, 0x2d, 0xc8, 0x49, - 0x0d, 0x00, 0x59, 0x44, 0xa1, 0x61, 0x22, 0x5c, 0x42, 0xce, 0xf9, 0x20, 0xc3, 0x2a, 0x90, 0x4c, - 0x53, 0xfa, 0xc6, 0xc8, 0xc5, 0x1b, 0x00, 0xf1, 0x8f, 0x73, 0x7e, 0x5e, 0x5a, 0x66, 0xba, 0x90, - 0x3b, 0x17, 0x5f, 0x12, 0xd0, 0x03, 0x49, 0xa5, 0x69, 0xf1, 0x05, 0x60, 0x35, 0x60, 0x5b, 0xb8, - 0x8d, 0xe4, 0xf4, 0x90, 0xfd, 0xa9, 0x87, 0xee, 0x49, 0x0f, 0x86, 0x20, 0x5e, 0xa8, 0x3e, 0xa8, - 0x43, 0xdd, 0xb8, 0x78, 0x8b, 0xc1, 0xae, 0x87, 0x99, 0xc3, 0x04, 0x36, 0x47, 0x1e, 0xd5, 0x1c, - 0x0c, 0x0f, 0x02, 0x0d, 0xe2, 0x81, 0xe8, 0x83, 0x9a, 0xe3, 0xc9, 0xc5, 0x97, 0x0c, 0x71, 0x38, - 0xcc, 0x20, 0x66, 0xb0, 0x41, 0x0a, 0xa8, 0x06, 0x61, 0x7a, 0x0e, 0xe4, 0x24, 0xa8, 0x4e, 0x88, - 0x80, 0x13, 0x27, 0x17, 0x3b, 0x34, 0xf2, 0x92, 0xd8, 0xc0, 0x91, 0x67, 0x0c, 0x08, 0x00, 0x00, - 0xff, 0xff, 0xb0, 0x8c, 0x18, 0x4e, 0xce, 0x01, 0x00, 0x00, + 0x2f, 0x4a, 0x2d, 0x0c, 0xce, 0xac, 0x4a, 0x15, 0x92, 0xe6, 0xe2, 0x2c, 0x4a, 0x2d, 0x2e, 0x80, + 0xc8, 0x31, 0x81, 0xe5, 0x38, 0x40, 0x02, 0x20, 0x49, 0x25, 0x6f, 0x2e, 0xc1, 0xe0, 0xcc, 0xdc, + 0x82, 0x9c, 0xd4, 0x00, 0x90, 0x45, 0x14, 0x1a, 0x26, 0xc2, 0x25, 0xe4, 0x9c, 0x0f, 0x32, 0xac, + 0x02, 0xc9, 0x34, 0xa5, 0x6f, 0x8c, 0x5c, 0xbc, 0x01, 0x10, 0xff, 0x38, 0xe7, 0xe7, 0xa5, 0x65, + 0xa6, 0x0b, 0xb9, 0x73, 0xf1, 0x25, 0x55, 0x96, 0xa4, 0x26, 0x95, 0xa6, 0xc5, 0x17, 0x80, 0xd5, + 0x80, 0x6d, 0xe1, 0x36, 0x92, 0xd3, 0x43, 0xf6, 0xa7, 0x1e, 0xba, 0x27, 0x3d, 0x18, 0x82, 0x78, + 0xa1, 0xfa, 0xa0, 0x0e, 0x75, 0xe3, 0xe2, 0x2d, 0x06, 0xbb, 0x1e, 0x66, 0x0e, 0x13, 0xd8, 0x1c, + 0x79, 0x54, 0x73, 0x30, 0x3c, 0xe8, 0xc1, 0x10, 0xc4, 0x03, 0xd1, 0x07, 0x35, 0xc7, 0x93, 0x8b, + 0x2f, 0x19, 0xe2, 0x70, 0x98, 0x41, 0xcc, 0x60, 0x83, 0x14, 0x50, 0x0d, 0xc2, 0xf4, 0x1c, 0xc8, + 0x49, 0x50, 0x9d, 0x10, 0x01, 0x27, 0x4e, 0x2e, 0x76, 0x68, 0xe4, 0x25, 0xb1, 0x81, 0x23, 0xcf, + 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0xb0, 0x8c, 0x18, 0x4e, 0xce, 0x01, 0x00, 0x00, } diff --git a/vendor/google.golang.org/grpc/benchmark/grpc_testing/payloads.proto b/vendor/google.golang.org/grpc/benchmark/grpc_testing/payloads.proto index 056fe0c..5d4871f 100644 --- a/vendor/google.golang.org/grpc/benchmark/grpc_testing/payloads.proto +++ b/vendor/google.golang.org/grpc/benchmark/grpc_testing/payloads.proto @@ -1,31 +1,16 @@ -// Copyright 2016, Google Inc. -// All rights reserved. +// Copyright 2016 gRPC authors. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// 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 // -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// http://www.apache.org/licenses/LICENSE-2.0 // -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// 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. syntax = "proto3"; diff --git a/vendor/google.golang.org/grpc/benchmark/grpc_testing/services.pb.go b/vendor/google.golang.org/grpc/benchmark/grpc_testing/services.pb.go index 2aae317..50e3505 100644 --- a/vendor/google.golang.org/grpc/benchmark/grpc_testing/services.pb.go +++ b/vendor/google.golang.org/grpc/benchmark/grpc_testing/services.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: services.proto -// DO NOT EDIT! package grpc_testing @@ -423,21 +422,21 @@ var _WorkerService_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("services.proto", fileDescriptor3) } var fileDescriptor3 = []byte{ - // 254 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xa4, 0x91, 0xc1, 0x4a, 0xc4, 0x30, + // 255 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x91, 0xc1, 0x4a, 0xc4, 0x30, 0x10, 0x86, 0xa9, 0x07, 0xa1, 0xc1, 0x2e, 0x92, 0x93, 0x46, 0x1f, 0xc0, 0x53, 0x91, 0xd5, 0x17, - 0x70, 0x8b, 0x1e, 0x05, 0xb7, 0xa8, 0xe7, 0x58, 0x87, 0x1a, 0x36, 0x4d, 0xea, 0xcc, 0x44, 0xf0, - 0x49, 0x7c, 0x07, 0x9f, 0xd2, 0xee, 0x66, 0x0b, 0xb5, 0xe4, 0xb6, 0xc7, 0xf9, 0xbf, 0xe1, 0x23, - 0x7f, 0x46, 0x2c, 0x08, 0xf0, 0xcb, 0x34, 0x40, 0x65, 0x8f, 0x9e, 0xbd, 0x3c, 0x69, 0xb1, 0x6f, - 0x4a, 0x06, 0x62, 0xe3, 0x5a, 0xb5, 0xe8, 0x80, 0x48, 0xb7, 0x23, 0x55, 0x45, 0xe3, 0x1d, 0xa3, - 0xb7, 0x71, 0x5c, 0xfe, 0x66, 0xe2, 0x74, 0x05, 0xae, 0xf9, 0xe8, 0x34, 0x6e, 0xea, 0x28, 0x92, - 0x0f, 0x22, 0x7f, 0x76, 0x1a, 0xbf, 0x2b, 0x6d, 0xad, 0xbc, 0x28, 0xa7, 0xbe, 0xb2, 0x36, 0x5d, - 0x6f, 0x61, 0x0d, 0x9f, 0x61, 0x08, 0xd4, 0x65, 0x1a, 0x52, 0xef, 0x1d, 0x81, 0x7c, 0x14, 0x45, - 0xcd, 0x08, 0xba, 0x1b, 0xd8, 0x81, 0xae, 0xab, 0xec, 0x3a, 0x5b, 0xfe, 0x1c, 0x89, 0xe2, 0xd5, - 0xe3, 0x06, 0x70, 0x7c, 0xe9, 0xbd, 0xc8, 0xd7, 0xc1, 0x6d, 0x27, 0x40, 0x79, 0x36, 0x13, 0xec, - 0xd2, 0x3b, 0x6c, 0x49, 0xa9, 0x14, 0xa9, 0x59, 0x73, 0xa0, 0xad, 0x78, 0xaf, 0xa9, 0xac, 0x01, - 0xc7, 0x73, 0x4d, 0x4c, 0x53, 0x9a, 0x48, 0x26, 0x9a, 0x95, 0xc8, 0x2b, 0x8f, 0x50, 0xf9, 0x30, - 0x68, 0xce, 0x67, 0xcb, 0x03, 0x18, 0x9b, 0xaa, 0x14, 0xda, 0xff, 0xd9, 0xad, 0x10, 0x4f, 0xc1, - 0x70, 0xac, 0x29, 0xe5, 0xff, 0xcd, 0x17, 0x6f, 0xde, 0x55, 0x22, 0x7b, 0x3b, 0xde, 0x5d, 0xf3, - 0xe6, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x3b, 0x84, 0x02, 0xe3, 0x0c, 0x02, 0x00, 0x00, + 0x70, 0x8b, 0x1e, 0x05, 0xb7, 0xa8, 0xe7, 0x58, 0x87, 0x1a, 0x36, 0xcd, 0xd4, 0x99, 0x89, 0xe0, + 0x93, 0xf8, 0x0e, 0x3e, 0xa5, 0xec, 0x66, 0x57, 0xd6, 0x92, 0x9b, 0xc7, 0xf9, 0xbf, 0xe1, 0x23, + 0x7f, 0x46, 0xcd, 0x18, 0xe8, 0xc3, 0x75, 0xc0, 0xf5, 0x48, 0x28, 0xa8, 0x8f, 0x7a, 0x1a, 0xbb, + 0x5a, 0x80, 0xc5, 0x85, 0xde, 0xcc, 0x06, 0x60, 0xb6, 0xfd, 0x8e, 0x9a, 0xaa, 0xc3, 0x20, 0x84, + 0x3e, 0x8d, 0xf3, 0xef, 0x42, 0x1d, 0x2f, 0x20, 0x74, 0x6f, 0x83, 0xa5, 0x55, 0x9b, 0x44, 0xfa, + 0x4e, 0x95, 0x8f, 0xc1, 0xd2, 0x67, 0x63, 0xbd, 0xd7, 0x67, 0xf5, 0xbe, 0xaf, 0x6e, 0xdd, 0x30, + 0x7a, 0x58, 0xc2, 0x7b, 0x04, 0x16, 0x73, 0x9e, 0x87, 0x3c, 0x62, 0x60, 0xd0, 0xf7, 0xaa, 0x6a, + 0x85, 0xc0, 0x0e, 0x2e, 0xf4, 0xff, 0x74, 0x5d, 0x14, 0x97, 0xc5, 0xfc, 0xeb, 0x40, 0x55, 0xcf, + 0x48, 0x2b, 0xa0, 0xdd, 0x4b, 0x6f, 0x55, 0xb9, 0x8c, 0x61, 0x3d, 0x01, 0xe9, 0x93, 0x89, 0x60, + 0x93, 0xde, 0x50, 0xcf, 0xc6, 0xe4, 0x48, 0x2b, 0x56, 0x22, 0xaf, 0xc5, 0x5b, 0x4d, 0xe3, 0x1d, + 0x04, 0x99, 0x6a, 0x52, 0x9a, 0xd3, 0x24, 0xb2, 0xa7, 0x59, 0xa8, 0xb2, 0x41, 0x82, 0x06, 0x63, + 0x10, 0x7d, 0x3a, 0x59, 0x46, 0xfa, 0x6d, 0x6a, 0x72, 0x68, 0xfb, 0x67, 0xd7, 0x4a, 0x3d, 0x44, + 0x27, 0xa9, 0xa6, 0xd6, 0x7f, 0x37, 0x9f, 0xd0, 0xbd, 0x9a, 0x4c, 0xf6, 0x72, 0xb8, 0xb9, 0xe6, + 0xd5, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3b, 0x84, 0x02, 0xe3, 0x0c, 0x02, 0x00, 0x00, } diff --git a/vendor/google.golang.org/grpc/benchmark/grpc_testing/services.proto b/vendor/google.golang.org/grpc/benchmark/grpc_testing/services.proto index c2acca7..f4e7907 100644 --- a/vendor/google.golang.org/grpc/benchmark/grpc_testing/services.proto +++ b/vendor/google.golang.org/grpc/benchmark/grpc_testing/services.proto @@ -1,31 +1,16 @@ -// Copyright 2016, Google Inc. -// All rights reserved. +// Copyright 2016 gRPC authors. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// 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 // -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// http://www.apache.org/licenses/LICENSE-2.0 // -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// 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. // An integration test service that covers all the method signature permutations // of unary/streaming requests/responses. diff --git a/vendor/google.golang.org/grpc/benchmark/grpc_testing/stats.pb.go b/vendor/google.golang.org/grpc/benchmark/grpc_testing/stats.pb.go index 45b9b4a..d69cb74 100644 --- a/vendor/google.golang.org/grpc/benchmark/grpc_testing/stats.pb.go +++ b/vendor/google.golang.org/grpc/benchmark/grpc_testing/stats.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: stats.proto -// DO NOT EDIT! package grpc_testing @@ -28,6 +27,27 @@ func (m *ServerStats) String() string { return proto.CompactTextStrin func (*ServerStats) ProtoMessage() {} func (*ServerStats) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{0} } +func (m *ServerStats) GetTimeElapsed() float64 { + if m != nil { + return m.TimeElapsed + } + return 0 +} + +func (m *ServerStats) GetTimeUser() float64 { + if m != nil { + return m.TimeUser + } + return 0 +} + +func (m *ServerStats) GetTimeSystem() float64 { + if m != nil { + return m.TimeSystem + } + return 0 +} + // Histogram params based on grpc/support/histogram.c type HistogramParams struct { Resolution float64 `protobuf:"fixed64,1,opt,name=resolution" json:"resolution,omitempty"` @@ -39,9 +59,23 @@ func (m *HistogramParams) String() string { return proto.CompactTextS func (*HistogramParams) ProtoMessage() {} func (*HistogramParams) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{1} } +func (m *HistogramParams) GetResolution() float64 { + if m != nil { + return m.Resolution + } + return 0 +} + +func (m *HistogramParams) GetMaxPossible() float64 { + if m != nil { + return m.MaxPossible + } + return 0 +} + // Histogram data based on grpc/support/histogram.c type HistogramData struct { - Bucket []uint32 `protobuf:"varint,1,rep,name=bucket" json:"bucket,omitempty"` + Bucket []uint32 `protobuf:"varint,1,rep,packed,name=bucket" json:"bucket,omitempty"` MinSeen float64 `protobuf:"fixed64,2,opt,name=min_seen,json=minSeen" json:"min_seen,omitempty"` MaxSeen float64 `protobuf:"fixed64,3,opt,name=max_seen,json=maxSeen" json:"max_seen,omitempty"` Sum float64 `protobuf:"fixed64,4,opt,name=sum" json:"sum,omitempty"` @@ -54,6 +88,48 @@ func (m *HistogramData) String() string { return proto.CompactTextStr func (*HistogramData) ProtoMessage() {} func (*HistogramData) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{2} } +func (m *HistogramData) GetBucket() []uint32 { + if m != nil { + return m.Bucket + } + return nil +} + +func (m *HistogramData) GetMinSeen() float64 { + if m != nil { + return m.MinSeen + } + return 0 +} + +func (m *HistogramData) GetMaxSeen() float64 { + if m != nil { + return m.MaxSeen + } + return 0 +} + +func (m *HistogramData) GetSum() float64 { + if m != nil { + return m.Sum + } + return 0 +} + +func (m *HistogramData) GetSumOfSquares() float64 { + if m != nil { + return m.SumOfSquares + } + return 0 +} + +func (m *HistogramData) GetCount() float64 { + if m != nil { + return m.Count + } + return 0 +} + type ClientStats struct { // Latency histogram. Data points are in nanoseconds. Latencies *HistogramData `protobuf:"bytes,1,opt,name=latencies" json:"latencies,omitempty"` @@ -75,6 +151,27 @@ func (m *ClientStats) GetLatencies() *HistogramData { return nil } +func (m *ClientStats) GetTimeElapsed() float64 { + if m != nil { + return m.TimeElapsed + } + return 0 +} + +func (m *ClientStats) GetTimeUser() float64 { + if m != nil { + return m.TimeUser + } + return 0 +} + +func (m *ClientStats) GetTimeSystem() float64 { + if m != nil { + return m.TimeSystem + } + return 0 +} + func init() { proto.RegisterType((*ServerStats)(nil), "grpc.testing.ServerStats") proto.RegisterType((*HistogramParams)(nil), "grpc.testing.HistogramParams") @@ -85,27 +182,27 @@ func init() { func init() { proto.RegisterFile("stats.proto", fileDescriptor4) } var fileDescriptor4 = []byte{ - // 342 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x84, 0x92, 0x4f, 0x4f, 0xe3, 0x30, - 0x10, 0xc5, 0x95, 0xa6, 0xed, 0xb6, 0x93, 0x76, 0x77, 0x65, 0xad, 0x56, 0x41, 0x95, 0xf8, 0x13, - 0x71, 0xe8, 0x29, 0x07, 0x38, 0x71, 0x06, 0x24, 0x6e, 0x54, 0x0d, 0x9c, 0x23, 0x37, 0x4c, 0x2b, - 0x8b, 0xc4, 0x0e, 0x99, 0x09, 0x2a, 0x1f, 0x09, 0xf1, 0x25, 0x71, 0x9c, 0x08, 0x0a, 0x48, 0x70, - 0x49, 0xf2, 0x7e, 0x6f, 0x34, 0xe3, 0xc9, 0x33, 0x04, 0xc4, 0x92, 0x29, 0x2e, 0x2b, 0xc3, 0x46, - 0x4c, 0x36, 0x55, 0x99, 0xc5, 0x8c, 0xc4, 0x4a, 0x6f, 0x22, 0x0d, 0x41, 0x82, 0xd5, 0x23, 0x56, - 0x49, 0x53, 0x22, 0x8e, 0x60, 0xc2, 0xaa, 0xc0, 0x14, 0x73, 0x59, 0x12, 0xde, 0x85, 0xde, 0xa1, - 0x37, 0xf7, 0x96, 0x41, 0xc3, 0x2e, 0x5b, 0x24, 0x66, 0x30, 0x76, 0x25, 0x35, 0x61, 0x15, 0xf6, - 0x9c, 0x3f, 0x6a, 0xc0, 0xad, 0xd5, 0xe2, 0x00, 0x5c, 0x6d, 0x4a, 0x4f, 0xc4, 0x58, 0x84, 0xbe, - 0xb3, 0xa1, 0x41, 0x89, 0x23, 0xd1, 0x0d, 0xfc, 0xb9, 0x52, 0xc4, 0x66, 0x53, 0xc9, 0x62, 0x21, - 0xed, 0x83, 0xc4, 0x3e, 0x40, 0x85, 0x64, 0xf2, 0x9a, 0x95, 0xd1, 0xdd, 0xc4, 0x1d, 0xd2, 0x9c, - 0xa9, 0x90, 0xdb, 0xb4, 0x34, 0x44, 0x6a, 0x95, 0x63, 0x37, 0x33, 0xb0, 0x6c, 0xd1, 0xa1, 0xe8, - 0xc5, 0x83, 0xe9, 0x5b, 0xdb, 0x0b, 0xc9, 0x52, 0xfc, 0x87, 0xe1, 0xaa, 0xce, 0xee, 0x91, 0x6d, - 0x43, 0x7f, 0x3e, 0x5d, 0x76, 0x4a, 0xec, 0xc1, 0xa8, 0x50, 0x3a, 0x25, 0x44, 0xdd, 0x35, 0xfa, - 0x65, 0x75, 0x62, 0xa5, 0xb3, 0xec, 0x1c, 0x67, 0xf9, 0x9d, 0x25, 0xb7, 0xce, 0xfa, 0x0b, 0x3e, - 0xd5, 0x45, 0xd8, 0x77, 0xb4, 0xf9, 0x14, 0xc7, 0xf0, 0xdb, 0xbe, 0x52, 0xb3, 0x4e, 0xe9, 0xa1, - 0x96, 0xf6, 0xb4, 0xe1, 0xc0, 0x99, 0x13, 0x4b, 0xaf, 0xd7, 0x49, 0xcb, 0xc4, 0x3f, 0x18, 0x64, - 0xa6, 0xd6, 0x1c, 0x0e, 0x9d, 0xd9, 0x8a, 0xe8, 0xd9, 0x83, 0xe0, 0x3c, 0x57, 0xa8, 0xb9, 0xfd, - 0xe9, 0x67, 0x30, 0xce, 0x25, 0xa3, 0xce, 0x94, 0x6d, 0xd3, 0xec, 0x1f, 0x9c, 0xcc, 0xe2, 0xdd, - 0x94, 0xe2, 0x0f, 0xbb, 0x2d, 0xdf, 0xab, 0xbf, 0xe4, 0xd5, 0xfb, 0x21, 0x2f, 0xff, 0xfb, 0xbc, - 0xfa, 0x9f, 0xf3, 0x5a, 0x0d, 0xdd, 0xa5, 0x39, 0x7d, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xea, 0x75, - 0x34, 0x90, 0x43, 0x02, 0x00, 0x00, + // 341 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0xc1, 0x4a, 0xeb, 0x40, + 0x14, 0x86, 0x49, 0xd3, 0xf6, 0xb6, 0x27, 0xed, 0xbd, 0x97, 0x41, 0x24, 0x52, 0xd0, 0x1a, 0x5c, + 0x74, 0x95, 0x85, 0xae, 0x5c, 0xab, 0xe0, 0xce, 0xd2, 0xe8, 0x3a, 0x4c, 0xe3, 0x69, 0x19, 0xcc, + 0xcc, 0xc4, 0x39, 0x33, 0x12, 0x1f, 0x49, 0x7c, 0x49, 0xc9, 0x24, 0x68, 0x55, 0xd0, 0x5d, 0xe6, + 0xfb, 0x7e, 0xe6, 0xe4, 0xe4, 0x0f, 0x44, 0x64, 0xb9, 0xa5, 0xb4, 0x32, 0xda, 0x6a, 0x36, 0xd9, + 0x9a, 0xaa, 0x48, 0x2d, 0x92, 0x15, 0x6a, 0x9b, 0x28, 0x88, 0x32, 0x34, 0x4f, 0x68, 0xb2, 0x26, + 0xc2, 0x8e, 0x61, 0x62, 0x85, 0xc4, 0x1c, 0x4b, 0x5e, 0x11, 0xde, 0xc7, 0xc1, 0x3c, 0x58, 0x04, + 0xab, 0xa8, 0x61, 0x57, 0x2d, 0x62, 0x33, 0x18, 0xfb, 0x88, 0x23, 0x34, 0x71, 0xcf, 0xfb, 0x51, + 0x03, 0xee, 0x08, 0x0d, 0x3b, 0x02, 0x9f, 0xcd, 0xe9, 0x99, 0x2c, 0xca, 0x38, 0xf4, 0x1a, 0x1a, + 0x94, 0x79, 0x92, 0xdc, 0xc2, 0xbf, 0x6b, 0x41, 0x56, 0x6f, 0x0d, 0x97, 0x4b, 0x6e, 0xb8, 0x24, + 0x76, 0x08, 0x60, 0x90, 0x74, 0xe9, 0xac, 0xd0, 0xaa, 0x9b, 0xb8, 0x43, 0x9a, 0x77, 0x92, 0xbc, + 0xce, 0x2b, 0x4d, 0x24, 0xd6, 0x25, 0x76, 0x33, 0x23, 0xc9, 0xeb, 0x65, 0x87, 0x92, 0xd7, 0x00, + 0xa6, 0xef, 0xd7, 0x5e, 0x72, 0xcb, 0xd9, 0x3e, 0x0c, 0xd7, 0xae, 0x78, 0x40, 0x1b, 0x07, 0xf3, + 0x70, 0x31, 0x5d, 0x75, 0x27, 0x76, 0x00, 0x23, 0x29, 0x54, 0x4e, 0x88, 0xaa, 0xbb, 0xe8, 0x8f, + 0x14, 0x2a, 0x43, 0x54, 0x5e, 0xf1, 0xba, 0x55, 0x61, 0xa7, 0x78, 0xed, 0xd5, 0x7f, 0x08, 0xc9, + 0xc9, 0xb8, 0xef, 0x69, 0xf3, 0xc8, 0x4e, 0xe0, 0x2f, 0x39, 0x99, 0xeb, 0x4d, 0x4e, 0x8f, 0x8e, + 0x1b, 0xa4, 0x78, 0xe0, 0xe5, 0x84, 0x9c, 0xbc, 0xd9, 0x64, 0x2d, 0x63, 0x7b, 0x30, 0x28, 0xb4, + 0x53, 0x36, 0x1e, 0x7a, 0xd9, 0x1e, 0x92, 0x97, 0x00, 0xa2, 0x8b, 0x52, 0xa0, 0xb2, 0xed, 0x47, + 0x3f, 0x87, 0x71, 0xc9, 0x2d, 0xaa, 0x42, 0x20, 0xf9, 0xfd, 0xa3, 0xd3, 0x59, 0xba, 0xdb, 0x52, + 0xfa, 0x69, 0xb7, 0xd5, 0x47, 0xfa, 0x5b, 0x5f, 0xbd, 0x5f, 0xfa, 0x0a, 0x7f, 0xee, 0xab, 0xff, + 0xb5, 0xaf, 0xf5, 0xd0, 0xff, 0x34, 0x67, 0x6f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xea, 0x75, 0x34, + 0x90, 0x43, 0x02, 0x00, 0x00, } diff --git a/vendor/google.golang.org/grpc/benchmark/grpc_testing/stats.proto b/vendor/google.golang.org/grpc/benchmark/grpc_testing/stats.proto index 9bc3cb2..baf3610 100644 --- a/vendor/google.golang.org/grpc/benchmark/grpc_testing/stats.proto +++ b/vendor/google.golang.org/grpc/benchmark/grpc_testing/stats.proto @@ -1,31 +1,16 @@ -// Copyright 2016, Google Inc. -// All rights reserved. +// Copyright 2016 gRPC authors. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// 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 // -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// http://www.apache.org/licenses/LICENSE-2.0 // -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// 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. syntax = "proto3"; diff --git a/vendor/google.golang.org/grpc/benchmark/latency/latency.go b/vendor/google.golang.org/grpc/benchmark/latency/latency.go new file mode 100644 index 0000000..5839a5c --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/latency/latency.go @@ -0,0 +1,316 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Package latency provides wrappers for net.Conn, net.Listener, and +// net.Dialers, designed to interoperate to inject real-world latency into +// network connections. +package latency + +import ( + "bytes" + "encoding/binary" + "fmt" + "io" + "net" + "time" + + "golang.org/x/net/context" +) + +// Dialer is a function matching the signature of net.Dial. +type Dialer func(network, address string) (net.Conn, error) + +// TimeoutDialer is a function matching the signature of net.DialTimeout. +type TimeoutDialer func(network, address string, timeout time.Duration) (net.Conn, error) + +// ContextDialer is a function matching the signature of +// net.Dialer.DialContext. +type ContextDialer func(ctx context.Context, network, address string) (net.Conn, error) + +// Network represents a network with the given bandwidth, latency, and MTU +// (Maximum Transmission Unit) configuration, and can produce wrappers of +// net.Listeners, net.Conn, and various forms of dialing functions. The +// Listeners and Dialers/Conns on both sides of connections must come from this +// package, but need not be created from the same Network. Latency is computed +// when sending (in Write), and is injected when receiving (in Read). This +// allows senders' Write calls to be non-blocking, as in real-world +// applications. +// +// Note: Latency is injected by the sender specifying the absolute time data +// should be available, and the reader delaying until that time arrives to +// provide the data. This package attempts to counter-act the effects of clock +// drift and existing network latency by measuring the delay between the +// sender's transmission time and the receiver's reception time during startup. +// No attempt is made to measure the existing bandwidth of the connection. +type Network struct { + Kbps int // Kilobits per second; if non-positive, infinite + Latency time.Duration // One-way latency (sending); if non-positive, no delay + MTU int // Bytes per packet; if non-positive, infinite +} + +var ( + //Local simulates local network. + Local = Network{0, 0, 0} + //LAN simulates local area network network. + LAN = Network{100 * 1024, 2 * time.Millisecond, 1500} + //WAN simulates wide area network. + WAN = Network{20 * 1024, 30 * time.Millisecond, 1500} + //Longhaul simulates bad network. + Longhaul = Network{1000 * 1024, 200 * time.Millisecond, 9000} +) + +// Conn returns a net.Conn that wraps c and injects n's latency into that +// connection. This function also imposes latency for connection creation. +// If n's Latency is lower than the measured latency in c, an error is +// returned. +func (n *Network) Conn(c net.Conn) (net.Conn, error) { + start := now() + nc := &conn{Conn: c, network: n, readBuf: new(bytes.Buffer)} + if err := nc.sync(); err != nil { + return nil, err + } + sleep(start.Add(nc.delay).Sub(now())) + return nc, nil +} + +type conn struct { + net.Conn + network *Network + + readBuf *bytes.Buffer // one packet worth of data received + lastSendEnd time.Time // time the previous Write should be fully on the wire + delay time.Duration // desired latency - measured latency +} + +// header is sent before all data transmitted by the application. +type header struct { + ReadTime int64 // Time the reader is allowed to read this packet (UnixNano) + Sz int32 // Size of the data in the packet +} + +func (c *conn) Write(p []byte) (n int, err error) { + tNow := now() + if c.lastSendEnd.Before(tNow) { + c.lastSendEnd = tNow + } + for len(p) > 0 { + pkt := p + if c.network.MTU > 0 && len(pkt) > c.network.MTU { + pkt = pkt[:c.network.MTU] + p = p[c.network.MTU:] + } else { + p = nil + } + if c.network.Kbps > 0 { + if congestion := c.lastSendEnd.Sub(tNow) - c.delay; congestion > 0 { + // The network is full; sleep until this packet can be sent. + sleep(congestion) + tNow = tNow.Add(congestion) + } + } + c.lastSendEnd = c.lastSendEnd.Add(c.network.pktTime(len(pkt))) + hdr := header{ReadTime: c.lastSendEnd.Add(c.delay).UnixNano(), Sz: int32(len(pkt))} + if err := binary.Write(c.Conn, binary.BigEndian, hdr); err != nil { + return n, err + } + x, err := c.Conn.Write(pkt) + n += x + if err != nil { + return n, err + } + } + return n, nil +} + +func (c *conn) Read(p []byte) (n int, err error) { + if c.readBuf.Len() == 0 { + var hdr header + if err := binary.Read(c.Conn, binary.BigEndian, &hdr); err != nil { + return 0, err + } + defer func() { sleep(time.Unix(0, hdr.ReadTime).Sub(now())) }() + + if _, err := io.CopyN(c.readBuf, c.Conn, int64(hdr.Sz)); err != nil { + return 0, err + } + } + // Read from readBuf. + return c.readBuf.Read(p) +} + +// sync does a handshake and then measures the latency on the network in +// coordination with the other side. +func (c *conn) sync() error { + const ( + pingMsg = "syncPing" + warmup = 10 // minimum number of iterations to measure latency + giveUp = 50 // maximum number of iterations to measure latency + accuracy = time.Millisecond // req'd accuracy to stop early + goodRun = 3 // stop early if latency within accuracy this many times + ) + + type syncMsg struct { + SendT int64 // Time sent. If zero, stop. + RecvT int64 // Time received. If zero, fill in and respond. + } + + // A trivial handshake + if err := binary.Write(c.Conn, binary.BigEndian, []byte(pingMsg)); err != nil { + return err + } + var ping [8]byte + if err := binary.Read(c.Conn, binary.BigEndian, &ping); err != nil { + return err + } else if string(ping[:]) != pingMsg { + return fmt.Errorf("malformed handshake message: %v (want %q)", ping, pingMsg) + } + + // Both sides are alive and syncing. Calculate network delay / clock skew. + att := 0 + good := 0 + var latency time.Duration + localDone, remoteDone := false, false + send := true + for !localDone || !remoteDone { + if send { + if err := binary.Write(c.Conn, binary.BigEndian, syncMsg{SendT: now().UnixNano()}); err != nil { + return err + } + att++ + send = false + } + + // Block until we get a syncMsg + m := syncMsg{} + if err := binary.Read(c.Conn, binary.BigEndian, &m); err != nil { + return err + } + + if m.RecvT == 0 { + // Message initiated from other side. + if m.SendT == 0 { + remoteDone = true + continue + } + // Send response. + m.RecvT = now().UnixNano() + if err := binary.Write(c.Conn, binary.BigEndian, m); err != nil { + return err + } + continue + } + + lag := time.Duration(m.RecvT - m.SendT) + latency += lag + avgLatency := latency / time.Duration(att) + if e := lag - avgLatency; e > -accuracy && e < accuracy { + good++ + } else { + good = 0 + } + if att < giveUp && (att < warmup || good < goodRun) { + send = true + continue + } + localDone = true + latency = avgLatency + // Tell the other side we're done. + if err := binary.Write(c.Conn, binary.BigEndian, syncMsg{}); err != nil { + return err + } + } + if c.network.Latency <= 0 { + return nil + } + c.delay = c.network.Latency - latency + if c.delay < 0 { + return fmt.Errorf("measured network latency (%v) higher than desired latency (%v)", latency, c.network.Latency) + } + return nil +} + +// Listener returns a net.Listener that wraps l and injects n's latency in its +// connections. +func (n *Network) Listener(l net.Listener) net.Listener { + return &listener{Listener: l, network: n} +} + +type listener struct { + net.Listener + network *Network +} + +func (l *listener) Accept() (net.Conn, error) { + c, err := l.Listener.Accept() + if err != nil { + return nil, err + } + return l.network.Conn(c) +} + +// Dialer returns a Dialer that wraps d and injects n's latency in its +// connections. n's Latency is also injected to the connection's creation. +func (n *Network) Dialer(d Dialer) Dialer { + return func(network, address string) (net.Conn, error) { + conn, err := d(network, address) + if err != nil { + return nil, err + } + return n.Conn(conn) + } +} + +// TimeoutDialer returns a TimeoutDialer that wraps d and injects n's latency +// in its connections. n's Latency is also injected to the connection's +// creation. +func (n *Network) TimeoutDialer(d TimeoutDialer) TimeoutDialer { + return func(network, address string, timeout time.Duration) (net.Conn, error) { + conn, err := d(network, address, timeout) + if err != nil { + return nil, err + } + return n.Conn(conn) + } +} + +// ContextDialer returns a ContextDialer that wraps d and injects n's latency +// in its connections. n's Latency is also injected to the connection's +// creation. +func (n *Network) ContextDialer(d ContextDialer) ContextDialer { + return func(ctx context.Context, network, address string) (net.Conn, error) { + conn, err := d(ctx, network, address) + if err != nil { + return nil, err + } + return n.Conn(conn) + } +} + +// pktTime returns the time it takes to transmit one packet of data of size b +// in bytes. +func (n *Network) pktTime(b int) time.Duration { + if n.Kbps <= 0 { + return time.Duration(0) + } + return time.Duration(b) * time.Second / time.Duration(n.Kbps*(1024/8)) +} + +// Wrappers for testing + +var now = time.Now +var sleep = time.Sleep diff --git a/vendor/google.golang.org/grpc/benchmark/latency/latency_test.go b/vendor/google.golang.org/grpc/benchmark/latency/latency_test.go new file mode 100644 index 0000000..ab2625b --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/latency/latency_test.go @@ -0,0 +1,353 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package latency + +import ( + "bytes" + "fmt" + "net" + "reflect" + "sync" + "testing" + "time" +) + +// bufConn is a net.Conn implemented by a bytes.Buffer (which is a ReadWriter). +type bufConn struct { + *bytes.Buffer +} + +func (bufConn) Close() error { panic("unimplemented") } +func (bufConn) LocalAddr() net.Addr { panic("unimplemented") } +func (bufConn) RemoteAddr() net.Addr { panic("unimplemented") } +func (bufConn) SetDeadline(t time.Time) error { panic("unimplemneted") } +func (bufConn) SetReadDeadline(t time.Time) error { panic("unimplemneted") } +func (bufConn) SetWriteDeadline(t time.Time) error { panic("unimplemneted") } + +func restoreHooks() func() { + s := sleep + n := now + return func() { + sleep = s + now = n + } +} + +func TestConn(t *testing.T) { + defer restoreHooks()() + + // Constant time. + now = func() time.Time { return time.Unix(123, 456) } + + // Capture sleep times for checking later. + var sleepTimes []time.Duration + sleep = func(t time.Duration) { sleepTimes = append(sleepTimes, t) } + + wantSleeps := func(want ...time.Duration) { + if !reflect.DeepEqual(want, sleepTimes) { + t.Fatalf("sleepTimes = %v; want %v", sleepTimes, want) + } + sleepTimes = nil + } + + // Use a fairly high latency to cause a large BDP and avoid sleeps while + // writing due to simulation of full buffers. + latency := 1 * time.Second + c, err := (&Network{Kbps: 1, Latency: latency, MTU: 5}).Conn(bufConn{&bytes.Buffer{}}) + if err != nil { + t.Fatalf("Unexpected error creating connection: %v", err) + } + wantSleeps(latency) // Connection creation delay. + + // 1 kbps = 128 Bps. Divides evenly by 1 second using nanos. + byteLatency := time.Duration(time.Second / 128) + + write := func(b []byte) { + n, err := c.Write(b) + if n != len(b) || err != nil { + t.Fatalf("c.Write(%v) = %v, %v; want %v, nil", b, n, err, len(b)) + } + } + + write([]byte{1, 2, 3, 4, 5}) // One full packet + pkt1Time := latency + byteLatency*5 + write([]byte{6}) // One partial packet + pkt2Time := pkt1Time + byteLatency + write([]byte{7, 8, 9, 10, 11, 12, 13}) // Two packets + pkt3Time := pkt2Time + byteLatency*5 + pkt4Time := pkt3Time + byteLatency*2 + + // No reads, so no sleeps yet. + wantSleeps() + + read := func(n int, want []byte) { + b := make([]byte, n) + if rd, err := c.Read(b); err != nil || rd != len(want) { + t.Fatalf("c.Read(<%v bytes>) = %v, %v; want %v, nil", n, rd, err, len(want)) + } + if !reflect.DeepEqual(b[:len(want)], want) { + t.Fatalf("read %v; want %v", b, want) + } + } + + read(1, []byte{1}) + wantSleeps(pkt1Time) + read(1, []byte{2}) + wantSleeps() + read(3, []byte{3, 4, 5}) + wantSleeps() + read(2, []byte{6}) + wantSleeps(pkt2Time) + read(2, []byte{7, 8}) + wantSleeps(pkt3Time) + read(10, []byte{9, 10, 11}) + wantSleeps() + read(10, []byte{12, 13}) + wantSleeps(pkt4Time) +} + +func TestSync(t *testing.T) { + defer restoreHooks()() + + // Infinitely fast CPU: time doesn't pass unless sleep is called. + tn := time.Unix(123, 0) + now = func() time.Time { return tn } + sleep = func(d time.Duration) { tn = tn.Add(d) } + + // Simulate a 20ms latency network, then run sync across that and expect to + // measure 20ms latency, or 10ms additional delay for a 30ms network. + slowConn, err := (&Network{Kbps: 0, Latency: 20 * time.Millisecond, MTU: 5}).Conn(bufConn{&bytes.Buffer{}}) + if err != nil { + t.Fatalf("Unexpected error creating connection: %v", err) + } + c, err := (&Network{Latency: 30 * time.Millisecond}).Conn(slowConn) + if err != nil { + t.Fatalf("Unexpected error creating connection: %v", err) + } + if c.(*conn).delay != 10*time.Millisecond { + t.Fatalf("c.delay = %v; want 10ms", c.(*conn).delay) + } +} + +func TestSyncTooSlow(t *testing.T) { + defer restoreHooks()() + + // Infinitely fast CPU: time doesn't pass unless sleep is called. + tn := time.Unix(123, 0) + now = func() time.Time { return tn } + sleep = func(d time.Duration) { tn = tn.Add(d) } + + // Simulate a 10ms latency network, then attempt to simulate a 5ms latency + // network and expect an error. + slowConn, err := (&Network{Kbps: 0, Latency: 10 * time.Millisecond, MTU: 5}).Conn(bufConn{&bytes.Buffer{}}) + if err != nil { + t.Fatalf("Unexpected error creating connection: %v", err) + } + + errWant := "measured network latency (10ms) higher than desired latency (5ms)" + if _, err := (&Network{Latency: 5 * time.Millisecond}).Conn(slowConn); err == nil || err.Error() != errWant { + t.Fatalf("Conn() = _, %q; want _, %q", err, errWant) + } +} + +func TestListenerAndDialer(t *testing.T) { + defer restoreHooks()() + + tn := time.Unix(123, 0) + startTime := tn + mu := &sync.Mutex{} + now = func() time.Time { + mu.Lock() + defer mu.Unlock() + return tn + } + + // Use a fairly high latency to cause a large BDP and avoid sleeps while + // writing due to simulation of full buffers. + n := &Network{Kbps: 2, Latency: 1 * time.Second, MTU: 10} + // 2 kbps = .25 kBps = 256 Bps + byteLatency := func(n int) time.Duration { + return time.Duration(n) * time.Second / 256 + } + + // Create a real listener and wrap it. + l, err := net.Listen("tcp", "localhost:0") + if err != nil { + t.Fatalf("Unexpected error creating listener: %v", err) + } + defer l.Close() + l = n.Listener(l) + + var serverConn net.Conn + var scErr error + scDone := make(chan struct{}) + go func() { + serverConn, scErr = l.Accept() + close(scDone) + }() + + // Create a dialer and use it. + clientConn, err := n.TimeoutDialer(net.DialTimeout)("tcp", l.Addr().String(), 2*time.Second) + if err != nil { + t.Fatalf("Unexpected error dialing: %v", err) + } + defer clientConn.Close() + + // Block until server's Conn is available. + <-scDone + if scErr != nil { + t.Fatalf("Unexpected error listening: %v", scErr) + } + defer serverConn.Close() + + // sleep (only) advances tn. Done after connections established so sync detects zero delay. + sleep = func(d time.Duration) { + mu.Lock() + defer mu.Unlock() + if d > 0 { + tn = tn.Add(d) + } + } + + seq := func(a, b int) []byte { + buf := make([]byte, b-a) + for i := 0; i < b-a; i++ { + buf[i] = byte(i + a) + } + return buf + } + + pkt1 := seq(0, 10) + pkt2 := seq(10, 30) + pkt3 := seq(30, 35) + + write := func(c net.Conn, b []byte) { + n, err := c.Write(b) + if n != len(b) || err != nil { + t.Fatalf("c.Write(%v) = %v, %v; want %v, nil", b, n, err, len(b)) + } + } + + write(serverConn, pkt1) + write(serverConn, pkt2) + write(serverConn, pkt3) + write(clientConn, pkt3) + write(clientConn, pkt1) + write(clientConn, pkt2) + + if tn != startTime { + t.Fatalf("unexpected sleep in write; tn = %v; want %v", tn, startTime) + } + + read := func(c net.Conn, n int, want []byte, timeWant time.Time) { + b := make([]byte, n) + if rd, err := c.Read(b); err != nil || rd != len(want) { + t.Fatalf("c.Read(<%v bytes>) = %v, %v; want %v, nil (read: %v)", n, rd, err, len(want), b[:rd]) + } + if !reflect.DeepEqual(b[:len(want)], want) { + t.Fatalf("read %v; want %v", b, want) + } + if !tn.Equal(timeWant) { + t.Errorf("tn after read(%v) = %v; want %v", want, tn, timeWant) + } + } + + read(clientConn, len(pkt1)+1, pkt1, startTime.Add(n.Latency+byteLatency(len(pkt1)))) + read(serverConn, len(pkt3)+1, pkt3, tn) // tn was advanced by the above read; pkt3 is shorter than pkt1 + + read(clientConn, len(pkt2), pkt2[:10], startTime.Add(n.Latency+byteLatency(len(pkt1)+10))) + read(clientConn, len(pkt2), pkt2[10:], startTime.Add(n.Latency+byteLatency(len(pkt1)+len(pkt2)))) + read(clientConn, len(pkt3), pkt3, startTime.Add(n.Latency+byteLatency(len(pkt1)+len(pkt2)+len(pkt3)))) + + read(serverConn, len(pkt1), pkt1, tn) // tn already past the arrival time due to prior reads + read(serverConn, len(pkt2), pkt2[:10], tn) + read(serverConn, len(pkt2), pkt2[10:], tn) + + // Sleep awhile and make sure the read happens disregarding previous writes + // (lastSendEnd handling). + sleep(10 * time.Second) + write(clientConn, pkt1) + read(serverConn, len(pkt1), pkt1, tn.Add(n.Latency+byteLatency(len(pkt1)))) + + // Send, sleep longer than the network delay, then make sure the read happens + // instantly. + write(serverConn, pkt1) + sleep(10 * time.Second) + read(clientConn, len(pkt1), pkt1, tn) +} + +func TestBufferBloat(t *testing.T) { + defer restoreHooks()() + + // Infinitely fast CPU: time doesn't pass unless sleep is called. + tn := time.Unix(123, 0) + now = func() time.Time { return tn } + // Capture sleep times for checking later. + var sleepTimes []time.Duration + sleep = func(d time.Duration) { + sleepTimes = append(sleepTimes, d) + tn = tn.Add(d) + } + + wantSleeps := func(want ...time.Duration) error { + if !reflect.DeepEqual(want, sleepTimes) { + return fmt.Errorf("sleepTimes = %v; want %v", sleepTimes, want) + } + sleepTimes = nil + return nil + } + + n := &Network{Kbps: 8 /* 1KBps */, Latency: time.Second, MTU: 8} + bdpBytes := (n.Kbps * 1024 / 8) * int(n.Latency/time.Second) // 1024 + c, err := n.Conn(bufConn{&bytes.Buffer{}}) + if err != nil { + t.Fatalf("Unexpected error creating connection: %v", err) + } + wantSleeps(n.Latency) // Connection creation delay. + + write := func(n int, sleeps ...time.Duration) { + if wt, err := c.Write(make([]byte, n)); err != nil || wt != n { + t.Fatalf("c.Write(<%v bytes>) = %v, %v; want %v, nil", n, wt, err, n) + } + if err := wantSleeps(sleeps...); err != nil { + t.Fatalf("After writing %v bytes: %v", n, err) + } + } + + read := func(n int, sleeps ...time.Duration) { + if rd, err := c.Read(make([]byte, n)); err != nil || rd != n { + t.Fatalf("c.Read(_) = %v, %v; want %v, nil", rd, err, n) + } + if err := wantSleeps(sleeps...); err != nil { + t.Fatalf("After reading %v bytes: %v", n, err) + } + } + + write(8) // No reads and buffer not full, so no sleeps yet. + read(8, time.Second+n.pktTime(8)) + + write(bdpBytes) // Fill the buffer. + write(1) // We can send one extra packet even when the buffer is full. + write(n.MTU, n.pktTime(1)) // Make sure we sleep to clear the previous write. + write(1, n.pktTime(n.MTU)) + write(n.MTU+1, n.pktTime(1), n.pktTime(n.MTU)) + + tn = tn.Add(10 * time.Second) // Wait long enough for the buffer to clear. + write(bdpBytes) // No sleeps required. +} diff --git a/vendor/google.golang.org/grpc/benchmark/primitives/code_string_test.go b/vendor/google.golang.org/grpc/benchmark/primitives/code_string_test.go new file mode 100644 index 0000000..51b1ee4 --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/primitives/code_string_test.go @@ -0,0 +1,135 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package primitives_test + +import ( + "strconv" + "testing" + + "google.golang.org/grpc/codes" +) + +type codeBench uint32 + +const ( + OK codeBench = iota + Canceled + Unknown + InvalidArgument + DeadlineExceeded + NotFound + AlreadyExists + PermissionDenied + ResourceExhausted + FailedPrecondition + Aborted + OutOfRange + Unimplemented + Internal + Unavailable + DataLoss + Unauthenticated +) + +// The following String() function was generated by stringer. +const _Code_name = "OKCanceledUnknownInvalidArgumentDeadlineExceededNotFoundAlreadyExistsPermissionDeniedResourceExhaustedFailedPreconditionAbortedOutOfRangeUnimplementedInternalUnavailableDataLossUnauthenticated" + +var _Code_index = [...]uint8{0, 2, 10, 17, 32, 48, 56, 69, 85, 102, 120, 127, 137, 150, 158, 169, 177, 192} + +func (i codeBench) String() string { + if i >= codeBench(len(_Code_index)-1) { + return "Code(" + strconv.FormatInt(int64(i), 10) + ")" + } + return _Code_name[_Code_index[i]:_Code_index[i+1]] +} + +var nameMap = map[codeBench]string{ + OK: "OK", + Canceled: "Canceled", + Unknown: "Unknown", + InvalidArgument: "InvalidArgument", + DeadlineExceeded: "DeadlineExceeded", + NotFound: "NotFound", + AlreadyExists: "AlreadyExists", + PermissionDenied: "PermissionDenied", + ResourceExhausted: "ResourceExhausted", + FailedPrecondition: "FailedPrecondition", + Aborted: "Aborted", + OutOfRange: "OutOfRange", + Unimplemented: "Unimplemented", + Internal: "Internal", + Unavailable: "Unavailable", + DataLoss: "DataLoss", + Unauthenticated: "Unauthenticated", +} + +func (i codeBench) StringUsingMap() string { + if s, ok := nameMap[i]; ok { + return s + } + return "Code(" + strconv.FormatInt(int64(i), 10) + ")" +} + +func BenchmarkCodeStringStringer(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + c := codeBench(uint32(i % 17)) + _ = c.String() + } + b.StopTimer() +} + +func BenchmarkCodeStringMap(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + c := codeBench(uint32(i % 17)) + _ = c.StringUsingMap() + } + b.StopTimer() +} + +// codes.Code.String() does a switch. +func BenchmarkCodeStringSwitch(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + c := codes.Code(uint32(i % 17)) + _ = c.String() + } + b.StopTimer() +} + +// Testing all codes (0<=c<=16) and also one overflow (17). +func BenchmarkCodeStringStringerWithOverflow(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + c := codeBench(uint32(i % 18)) + _ = c.String() + } + b.StopTimer() +} + +// Testing all codes (0<=c<=16) and also one overflow (17). +func BenchmarkCodeStringSwitchWithOverflow(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + c := codes.Code(uint32(i % 18)) + _ = c.String() + } + b.StopTimer() +} diff --git a/vendor/google.golang.org/grpc/benchmark/primitives/context_test.go b/vendor/google.golang.org/grpc/benchmark/primitives/context_test.go new file mode 100644 index 0000000..e1d6c04 --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/primitives/context_test.go @@ -0,0 +1,120 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package primitives_test + +import ( + "testing" + "time" + + "golang.org/x/net/context" +) + +func BenchmarkCancelContextErrNoErr(b *testing.B) { + ctx, cancel := context.WithCancel(context.Background()) + for i := 0; i < b.N; i++ { + if err := ctx.Err(); err != nil { + b.Fatal("error") + } + } + cancel() +} + +func BenchmarkCancelContextErrGotErr(b *testing.B) { + ctx, cancel := context.WithCancel(context.Background()) + cancel() + for i := 0; i < b.N; i++ { + if err := ctx.Err(); err == nil { + b.Fatal("error") + } + } +} + +func BenchmarkCancelContextChannelNoErr(b *testing.B) { + ctx, cancel := context.WithCancel(context.Background()) + for i := 0; i < b.N; i++ { + select { + case <-ctx.Done(): + b.Fatal("error: ctx.Done():", ctx.Err()) + default: + } + } + cancel() +} + +func BenchmarkCancelContextChannelGotErr(b *testing.B) { + ctx, cancel := context.WithCancel(context.Background()) + cancel() + for i := 0; i < b.N; i++ { + select { + case <-ctx.Done(): + if err := ctx.Err(); err == nil { + b.Fatal("error") + } + default: + b.Fatal("error: !ctx.Done()") + } + } +} + +func BenchmarkTimerContextErrNoErr(b *testing.B) { + ctx, cancel := context.WithTimeout(context.Background(), 24*time.Hour) + for i := 0; i < b.N; i++ { + if err := ctx.Err(); err != nil { + b.Fatal("error") + } + } + cancel() +} + +func BenchmarkTimerContextErrGotErr(b *testing.B) { + ctx, cancel := context.WithTimeout(context.Background(), time.Microsecond) + cancel() + for i := 0; i < b.N; i++ { + if err := ctx.Err(); err == nil { + b.Fatal("error") + } + } +} + +func BenchmarkTimerContextChannelNoErr(b *testing.B) { + ctx, cancel := context.WithTimeout(context.Background(), 24*time.Hour) + for i := 0; i < b.N; i++ { + select { + case <-ctx.Done(): + b.Fatal("error: ctx.Done():", ctx.Err()) + default: + } + } + cancel() +} + +func BenchmarkTimerContextChannelGotErr(b *testing.B) { + ctx, cancel := context.WithTimeout(context.Background(), time.Microsecond) + cancel() + for i := 0; i < b.N; i++ { + select { + case <-ctx.Done(): + if err := ctx.Err(); err == nil { + b.Fatal("error") + } + default: + b.Fatal("error: !ctx.Done()") + } + } +} diff --git a/vendor/google.golang.org/grpc/benchmark/primitives/primitives_test.go b/vendor/google.golang.org/grpc/benchmark/primitives/primitives_test.go new file mode 100644 index 0000000..846813d --- /dev/null +++ b/vendor/google.golang.org/grpc/benchmark/primitives/primitives_test.go @@ -0,0 +1,403 @@ +// +build go1.7 + +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Package primitives_test contains benchmarks for various synchronization primitives +// available in Go. +package primitives_test + +import ( + "fmt" + "sync" + "sync/atomic" + "testing" + "time" + "unsafe" +) + +func BenchmarkSelectClosed(b *testing.B) { + c := make(chan struct{}) + close(c) + x := 0 + b.ResetTimer() + for i := 0; i < b.N; i++ { + select { + case <-c: + x++ + default: + } + } + b.StopTimer() + if x != b.N { + b.Fatal("error") + } +} + +func BenchmarkSelectOpen(b *testing.B) { + c := make(chan struct{}) + x := 0 + b.ResetTimer() + for i := 0; i < b.N; i++ { + select { + case <-c: + default: + x++ + } + } + b.StopTimer() + if x != b.N { + b.Fatal("error") + } +} + +func BenchmarkAtomicBool(b *testing.B) { + c := int32(0) + x := 0 + b.ResetTimer() + for i := 0; i < b.N; i++ { + if atomic.LoadInt32(&c) == 0 { + x++ + } + } + b.StopTimer() + if x != b.N { + b.Fatal("error") + } +} + +func BenchmarkAtomicValueLoad(b *testing.B) { + c := atomic.Value{} + c.Store(0) + x := 0 + b.ResetTimer() + for i := 0; i < b.N; i++ { + if c.Load().(int) == 0 { + x++ + } + } + b.StopTimer() + if x != b.N { + b.Fatal("error") + } +} + +func BenchmarkAtomicValueStore(b *testing.B) { + c := atomic.Value{} + v := 123 + b.ResetTimer() + for i := 0; i < b.N; i++ { + c.Store(v) + } + b.StopTimer() +} + +func BenchmarkMutex(b *testing.B) { + c := sync.Mutex{} + x := 0 + b.ResetTimer() + for i := 0; i < b.N; i++ { + c.Lock() + x++ + c.Unlock() + } + b.StopTimer() + if x != b.N { + b.Fatal("error") + } +} + +func BenchmarkRWMutex(b *testing.B) { + c := sync.RWMutex{} + x := 0 + b.ResetTimer() + for i := 0; i < b.N; i++ { + c.RLock() + x++ + c.RUnlock() + } + b.StopTimer() + if x != b.N { + b.Fatal("error") + } +} + +func BenchmarkRWMutexW(b *testing.B) { + c := sync.RWMutex{} + x := 0 + b.ResetTimer() + for i := 0; i < b.N; i++ { + c.Lock() + x++ + c.Unlock() + } + b.StopTimer() + if x != b.N { + b.Fatal("error") + } +} + +func BenchmarkMutexWithDefer(b *testing.B) { + c := sync.Mutex{} + x := 0 + b.ResetTimer() + for i := 0; i < b.N; i++ { + func() { + c.Lock() + defer c.Unlock() + x++ + }() + } + b.StopTimer() + if x != b.N { + b.Fatal("error") + } +} + +func BenchmarkMutexWithClosureDefer(b *testing.B) { + c := sync.Mutex{} + x := 0 + b.ResetTimer() + for i := 0; i < b.N; i++ { + func() { + c.Lock() + defer func() { c.Unlock() }() + x++ + }() + } + b.StopTimer() + if x != b.N { + b.Fatal("error") + } +} + +func BenchmarkMutexWithoutDefer(b *testing.B) { + c := sync.Mutex{} + x := 0 + b.ResetTimer() + for i := 0; i < b.N; i++ { + func() { + c.Lock() + x++ + c.Unlock() + }() + } + b.StopTimer() + if x != b.N { + b.Fatal("error") + } +} + +func BenchmarkAtomicAddInt64(b *testing.B) { + var c int64 + b.ResetTimer() + for i := 0; i < b.N; i++ { + atomic.AddInt64(&c, 1) + } + b.StopTimer() + if c != int64(b.N) { + b.Fatal("error") + } +} + +func BenchmarkAtomicTimeValueStore(b *testing.B) { + var c atomic.Value + t := time.Now() + b.ResetTimer() + for i := 0; i < b.N; i++ { + c.Store(t) + } + b.StopTimer() +} + +func BenchmarkAtomic16BValueStore(b *testing.B) { + var c atomic.Value + t := struct { + a int64 + b int64 + }{ + 123, 123, + } + b.ResetTimer() + for i := 0; i < b.N; i++ { + c.Store(t) + } + b.StopTimer() +} + +func BenchmarkAtomic32BValueStore(b *testing.B) { + var c atomic.Value + t := struct { + a int64 + b int64 + c int64 + d int64 + }{ + 123, 123, 123, 123, + } + b.ResetTimer() + for i := 0; i < b.N; i++ { + c.Store(t) + } + b.StopTimer() +} + +func BenchmarkAtomicPointerStore(b *testing.B) { + t := 123 + var up unsafe.Pointer + b.ResetTimer() + for i := 0; i < b.N; i++ { + atomic.StorePointer(&up, unsafe.Pointer(&t)) + } + b.StopTimer() +} + +func BenchmarkAtomicTimePointerStore(b *testing.B) { + t := time.Now() + var up unsafe.Pointer + b.ResetTimer() + for i := 0; i < b.N; i++ { + atomic.StorePointer(&up, unsafe.Pointer(&t)) + } + b.StopTimer() +} + +func BenchmarkStoreContentionWithAtomic(b *testing.B) { + t := 123 + var c unsafe.Pointer + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + atomic.StorePointer(&c, unsafe.Pointer(&t)) + } + }) +} + +func BenchmarkStoreContentionWithMutex(b *testing.B) { + t := 123 + var mu sync.Mutex + var c int + + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + mu.Lock() + c = t + mu.Unlock() + } + }) + _ = c +} + +type dummyStruct struct { + a int64 + b time.Time +} + +func BenchmarkStructStoreContention(b *testing.B) { + d := dummyStruct{} + dp := unsafe.Pointer(&d) + t := time.Now() + for _, j := range []int{100000000, 10000, 0} { + for _, i := range []int{100000, 10} { + b.Run(fmt.Sprintf("CAS/%v/%v", j, i), func(b *testing.B) { + b.SetParallelism(i) + b.RunParallel(func(pb *testing.PB) { + n := &dummyStruct{ + b: t, + } + for pb.Next() { + for y := 0; y < j; y++ { + } + for { + v := (*dummyStruct)(atomic.LoadPointer(&dp)) + n.a = v.a + 1 + if atomic.CompareAndSwapPointer(&dp, unsafe.Pointer(v), unsafe.Pointer(n)) { + n = v + break + } + } + } + }) + }) + } + } + + var mu sync.Mutex + for _, j := range []int{100000000, 10000, 0} { + for _, i := range []int{100000, 10} { + b.Run(fmt.Sprintf("Mutex/%v/%v", j, i), func(b *testing.B) { + b.SetParallelism(i) + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + for y := 0; y < j; y++ { + } + mu.Lock() + d.a++ + d.b = t + mu.Unlock() + } + }) + }) + } + } +} + +type myFooer struct{} + +func (myFooer) Foo() {} + +type fooer interface { + Foo() +} + +func BenchmarkInterfaceTypeAssertion(b *testing.B) { + // Call a separate function to avoid compiler optimizations. + runInterfaceTypeAssertion(b, myFooer{}) +} + +func runInterfaceTypeAssertion(b *testing.B, fer interface{}) { + x := 0 + b.ResetTimer() + for i := 0; i < b.N; i++ { + if _, ok := fer.(fooer); ok { + x++ + } + } + b.StopTimer() + if x != b.N { + b.Fatal("error") + } +} + +func BenchmarkStructTypeAssertion(b *testing.B) { + // Call a separate function to avoid compiler optimizations. + runStructTypeAssertion(b, myFooer{}) +} + +func runStructTypeAssertion(b *testing.B, fer interface{}) { + x := 0 + b.ResetTimer() + for i := 0; i < b.N; i++ { + if _, ok := fer.(myFooer); ok { + x++ + } + } + b.StopTimer() + if x != b.N { + b.Fatal("error") + } +} diff --git a/vendor/google.golang.org/grpc/benchmark/server/main.go b/vendor/google.golang.org/grpc/benchmark/server/main.go index d43aad0..b6e87aa 100644 --- a/vendor/google.golang.org/grpc/benchmark/server/main.go +++ b/vendor/google.golang.org/grpc/benchmark/server/main.go @@ -1,3 +1,21 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + package main import ( @@ -12,9 +30,7 @@ import ( "google.golang.org/grpc/grpclog" ) -var ( - duration = flag.Int("duration", math.MaxInt32, "The duration in seconds to run the benchmark server") -) +var duration = flag.Int("duration", math.MaxInt32, "The duration in seconds to run the benchmark server") func main() { flag.Parse() @@ -28,7 +44,12 @@ func main() { grpclog.Fatalf("Failed to serve: %v", err) } }() - addr, stopper := benchmark.StartServer(benchmark.ServerInfo{Addr: ":0", Type: "protobuf"}) // listen on all interfaces + lis, err := net.Listen("tcp", "localhost:0") + if err != nil { + grpclog.Fatalf("Failed to listen: %v", err) + } + addr := lis.Addr().String() + stopper := benchmark.StartServer(benchmark.ServerInfo{Type: "protobuf", Listener: lis}) // listen on all interfaces grpclog.Println("Server Address: ", addr) <-time.After(time.Duration(*duration) * time.Second) stopper() diff --git a/vendor/google.golang.org/grpc/benchmark/server/testdata/ca.pem b/vendor/google.golang.org/grpc/benchmark/server/testdata/ca.pem deleted file mode 100644 index 6c8511a..0000000 --- a/vendor/google.golang.org/grpc/benchmark/server/testdata/ca.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICSjCCAbOgAwIBAgIJAJHGGR4dGioHMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV -BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX -aWRnaXRzIFB0eSBMdGQxDzANBgNVBAMTBnRlc3RjYTAeFw0xNDExMTEyMjMxMjla -Fw0yNDExMDgyMjMxMjlaMFYxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0 -YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDzANBgNVBAMT -BnRlc3RjYTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwEDfBV5MYdlHVHJ7 -+L4nxrZy7mBfAVXpOc5vMYztssUI7mL2/iYujiIXM+weZYNTEpLdjyJdu7R5gGUu -g1jSVK/EPHfc74O7AyZU34PNIP4Sh33N+/A5YexrNgJlPY+E3GdVYi4ldWJjgkAd -Qah2PH5ACLrIIC6tRka9hcaBlIECAwEAAaMgMB4wDAYDVR0TBAUwAwEB/zAOBgNV -HQ8BAf8EBAMCAgQwDQYJKoZIhvcNAQELBQADgYEAHzC7jdYlzAVmddi/gdAeKPau -sPBG/C2HCWqHzpCUHcKuvMzDVkY/MP2o6JIW2DBbY64bO/FceExhjcykgaYtCH/m -oIU63+CFOTtR7otyQAWHqXa7q4SbCDlG7DyRFxqG0txPtGvy12lgldA2+RgcigQG -Dfcog5wrJytaQ6UA0wE= ------END CERTIFICATE----- diff --git a/vendor/google.golang.org/grpc/benchmark/server/testdata/server1.key b/vendor/google.golang.org/grpc/benchmark/server/testdata/server1.key deleted file mode 100644 index 143a5b8..0000000 --- a/vendor/google.golang.org/grpc/benchmark/server/testdata/server1.key +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAOHDFScoLCVJpYDD -M4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlumN+fm+AjPEK5GHhGn1BgzkWF+slf -3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wHNVX77fBZOgp9VlSMVfyd9N8YwbBY -AckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAECgYAn7qGnM2vbjJNBm0VZCkOkTIWm -V10okw7EPJrdL2mkre9NasghNXbE1y5zDshx5Nt3KsazKOxTT8d0Jwh/3KbaN+YY -tTCbKGW0pXDRBhwUHRcuRzScjli8Rih5UOCiZkhefUTcRb6xIhZJuQy71tjaSy0p -dHZRmYyBYO2YEQ8xoQJBAPrJPhMBkzmEYFtyIEqAxQ/o/A6E+E4w8i+KM7nQCK7q -K4JXzyXVAjLfyBZWHGM2uro/fjqPggGD6QH1qXCkI4MCQQDmdKeb2TrKRh5BY1LR -81aJGKcJ2XbcDu6wMZK4oqWbTX2KiYn9GB0woM6nSr/Y6iy1u145YzYxEV/iMwff -DJULAkB8B2MnyzOg0pNFJqBJuH29bKCcHa8gHJzqXhNO5lAlEbMK95p/P2Wi+4Hd -aiEIAF1BF326QJcvYKmwSmrORp85AkAlSNxRJ50OWrfMZnBgzVjDx3xG6KsFQVk2 -ol6VhqL6dFgKUORFUWBvnKSyhjJxurlPEahV6oo6+A+mPhFY8eUvAkAZQyTdupP3 -XEFQKctGz+9+gKkemDp7LBBMEMBXrGTLPhpEfcjv/7KPdnFHYmhYeBTBnuVmTVWe -F98XJ7tIFfJq ------END PRIVATE KEY----- diff --git a/vendor/google.golang.org/grpc/benchmark/server/testdata/server1.pem b/vendor/google.golang.org/grpc/benchmark/server/testdata/server1.pem deleted file mode 100644 index f3d43fc..0000000 --- a/vendor/google.golang.org/grpc/benchmark/server/testdata/server1.pem +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICnDCCAgWgAwIBAgIBBzANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJBVTET -MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQ -dHkgTHRkMQ8wDQYDVQQDEwZ0ZXN0Y2EwHhcNMTUxMTA0MDIyMDI0WhcNMjUxMTAx -MDIyMDI0WjBlMQswCQYDVQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNV -BAcTB0NoaWNhZ28xFTATBgNVBAoTDEV4YW1wbGUsIENvLjEaMBgGA1UEAxQRKi50 -ZXN0Lmdvb2dsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOHDFSco -LCVJpYDDM4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlumN+fm+AjPEK5GHhGn1Bg -zkWF+slf3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wHNVX77fBZOgp9VlSMVfyd -9N8YwbBYAckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAGjazBpMAkGA1UdEwQCMAAw -CwYDVR0PBAQDAgXgME8GA1UdEQRIMEaCECoudGVzdC5nb29nbGUuZnKCGHdhdGVy -em9vaS50ZXN0Lmdvb2dsZS5iZYISKi50ZXN0LnlvdXR1YmUuY29thwTAqAEDMA0G -CSqGSIb3DQEBCwUAA4GBAJFXVifQNub1LUP4JlnX5lXNlo8FxZ2a12AFQs+bzoJ6 -hM044EDjqyxUqSbVePK0ni3w1fHQB5rY9yYC5f8G7aqqTY1QOhoUk8ZTSTRpnkTh -y4jjdvTZeLDVBlueZUTDRmy2feY5aZIU18vFDK08dTG0A87pppuv1LNIR3loveU8 ------END CERTIFICATE----- diff --git a/vendor/google.golang.org/grpc/benchmark/stats/histogram.go b/vendor/google.golang.org/grpc/benchmark/stats/histogram.go index 918bead..f038d26 100644 --- a/vendor/google.golang.org/grpc/benchmark/stats/histogram.go +++ b/vendor/google.golang.org/grpc/benchmark/stats/histogram.go @@ -1,3 +1,21 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + package stats import ( @@ -86,8 +104,14 @@ func NewHistogram(opts HistogramOptions) *Histogram { // Print writes textual output of the histogram values. func (h *Histogram) Print(w io.Writer) { + h.PrintWithUnit(w, 1) +} + +// PrintWithUnit writes textual output of the histogram values . +// Data in histogram is divided by a Unit before print. +func (h *Histogram) PrintWithUnit(w io.Writer, unit float64) { avg := float64(h.Sum) / float64(h.Count) - fmt.Fprintf(w, "Count: %d Min: %d Max: %d Avg: %.2f\n", h.Count, h.Min, h.Max, avg) + fmt.Fprintf(w, "Count: %d Min: %5.1f Max: %5.1f Avg: %.2f\n", h.Count, float64(h.Min)/unit, float64(h.Max)/unit, avg/unit) fmt.Fprintf(w, "%s\n", strings.Repeat("-", 60)) if h.Count <= 0 { return @@ -103,9 +127,9 @@ func (h *Histogram) Print(w io.Writer) { accCount := int64(0) for i, b := range h.Buckets { - fmt.Fprintf(w, "[%*f, ", maxBucketDigitLen, b.LowBound) + fmt.Fprintf(w, "[%*f, ", maxBucketDigitLen, b.LowBound/unit) if i+1 < len(h.Buckets) { - fmt.Fprintf(w, "%*f)", maxBucketDigitLen, h.Buckets[i+1].LowBound) + fmt.Fprintf(w, "%*f)", maxBucketDigitLen, h.Buckets[i+1].LowBound/unit) } else { fmt.Fprintf(w, "%*s)", maxBucketDigitLen, "inf") } diff --git a/vendor/google.golang.org/grpc/benchmark/stats/stats.go b/vendor/google.golang.org/grpc/benchmark/stats/stats.go index e0edb17..2f98861 100644 --- a/vendor/google.golang.org/grpc/benchmark/stats/stats.go +++ b/vendor/google.golang.org/grpc/benchmark/stats/stats.go @@ -1,3 +1,21 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + package stats import ( @@ -5,9 +23,132 @@ import ( "fmt" "io" "math" + "sort" + "strconv" "time" ) +// Features contains most fields for a benchmark +type Features struct { + NetworkMode string + EnableTrace bool + Latency time.Duration + Kbps int + Mtu int + MaxConcurrentCalls int + ReqSizeBytes int + RespSizeBytes int + EnableCompressor bool +} + +// String returns the textual output of the Features as string. +func (f Features) String() string { + return fmt.Sprintf("traceMode_%t-latency_%s-kbps_%#v-MTU_%#v-maxConcurrentCalls_"+ + "%#v-reqSize_%#vB-respSize_%#vB-Compressor_%t", f.EnableTrace, + f.Latency.String(), f.Kbps, f.Mtu, f.MaxConcurrentCalls, f.ReqSizeBytes, f.RespSizeBytes, f.EnableCompressor) +} + +// PartialPrintString can print certain features with different format. +func PartialPrintString(noneEmptyPos []bool, f Features, shared bool) string { + s := "" + var ( + prefix, suffix, linker string + isNetwork bool + ) + if shared { + suffix = "\n" + linker = ": " + } else { + prefix = "-" + linker = "_" + } + if noneEmptyPos[0] { + s += fmt.Sprintf("%sTrace%s%t%s", prefix, linker, f.EnableCompressor, suffix) + } + if shared && f.NetworkMode != "" { + s += fmt.Sprintf("Network: %s \n", f.NetworkMode) + isNetwork = true + } + if !isNetwork { + if noneEmptyPos[1] { + s += fmt.Sprintf("%slatency%s%s%s", prefix, linker, f.Latency.String(), suffix) + } + if noneEmptyPos[2] { + s += fmt.Sprintf("%skbps%s%#v%s", prefix, linker, f.Kbps, suffix) + } + if noneEmptyPos[3] { + s += fmt.Sprintf("%sMTU%s%#v%s", prefix, linker, f.Mtu, suffix) + } + } + if noneEmptyPos[4] { + s += fmt.Sprintf("%sCallers%s%#v%s", prefix, linker, f.MaxConcurrentCalls, suffix) + } + if noneEmptyPos[5] { + s += fmt.Sprintf("%sreqSize%s%#vB%s", prefix, linker, f.ReqSizeBytes, suffix) + } + if noneEmptyPos[6] { + s += fmt.Sprintf("%srespSize%s%#vB%s", prefix, linker, f.RespSizeBytes, suffix) + } + if noneEmptyPos[7] { + s += fmt.Sprintf("%sCompressor%s%t%s", prefix, linker, f.EnableCompressor, suffix) + } + return s +} + +type percentLatency struct { + Percent int + Value time.Duration +} + +// BenchResults records features and result of a benchmark. +type BenchResults struct { + RunMode string + Features Features + Latency []percentLatency + Operations int + NsPerOp int64 + AllocedBytesPerOp int64 + AllocsPerOp int64 + SharedPosion []bool +} + +// SetBenchmarkResult sets features of benchmark and basic results. +func (stats *Stats) SetBenchmarkResult(mode string, features Features, o int, allocdBytes, allocs int64, sharedPos []bool) { + stats.result.RunMode = mode + stats.result.Features = features + stats.result.Operations = o + stats.result.AllocedBytesPerOp = allocdBytes + stats.result.AllocsPerOp = allocs + stats.result.SharedPosion = sharedPos +} + +// GetBenchmarkResults returns the result of the benchmark including features and result. +func (stats *Stats) GetBenchmarkResults() BenchResults { + return stats.result +} + +// BenchString output latency stats as the format as time + unit. +func (stats *Stats) BenchString() string { + stats.maybeUpdate() + s := stats.result + res := s.RunMode + "-" + s.Features.String() + ": \n" + if len(s.Latency) != 0 { + var statsUnit = s.Latency[0].Value + var timeUnit = fmt.Sprintf("%v", statsUnit)[1:] + for i := 1; i < len(s.Latency)-1; i++ { + res += fmt.Sprintf("%d_Latency: %s %s \t", s.Latency[i].Percent, + strconv.FormatFloat(float64(s.Latency[i].Value)/float64(statsUnit), 'f', 4, 64), timeUnit) + } + res += fmt.Sprintf("Avg latency: %s %s \t", + strconv.FormatFloat(float64(s.Latency[len(s.Latency)-1].Value)/float64(statsUnit), 'f', 4, 64), timeUnit) + } + res += fmt.Sprintf("Count: %v \t", s.Operations) + res += fmt.Sprintf("%v Bytes/op\t", s.AllocedBytesPerOp) + res += fmt.Sprintf("%v Allocs/op\t", s.AllocsPerOp) + + return res +} + // Stats is a simple helper for gathering additional statistics like histogram // during benchmarks. This is not thread safe. type Stats struct { @@ -18,6 +159,9 @@ type Stats struct { durations durationSlice dirty bool + + sortLatency bool + result BenchResults } type durationSlice []time.Duration @@ -46,6 +190,18 @@ func (stats *Stats) Clear() { stats.durations = stats.durations[:0] stats.histogram = nil stats.dirty = false + stats.result = BenchResults{} +} + +//Sort method for durations +func (a durationSlice) Len() int { return len(a) } +func (a durationSlice) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a durationSlice) Less(i, j int) bool { return a[i] < a[j] } +func max(a, b int64) int64 { + if a > b { + return a + } + return b } // maybeUpdate updates internal stat data if there was any newly added @@ -55,6 +211,12 @@ func (stats *Stats) maybeUpdate() { return } + if stats.sortLatency { + sort.Sort(stats.durations) + stats.min = int64(stats.durations[0]) + stats.max = int64(stats.durations[len(stats.durations)-1]) + } + stats.min = math.MaxInt64 stats.max = 0 for _, d := range stats.durations { @@ -75,9 +237,6 @@ func (stats *Stats) maybeUpdate() { stats.unit = u } - // Adjust the min/max according to the new unit. - stats.min /= int64(stats.unit) - stats.max /= int64(stats.unit) numBuckets := stats.numBuckets if n := int(stats.max - stats.min + 1); n < numBuckets { numBuckets = n @@ -90,21 +249,37 @@ func (stats *Stats) maybeUpdate() { MinValue: stats.min}) for _, d := range stats.durations { - stats.histogram.Add(int64(d / stats.unit)) + stats.histogram.Add(int64(d)) } stats.dirty = false + + if stats.durations.Len() != 0 { + var percentToObserve = []int{50, 90, 99} + // First data record min unit from the latency result. + stats.result.Latency = append(stats.result.Latency, percentLatency{Percent: -1, Value: stats.unit}) + for _, position := range percentToObserve { + stats.result.Latency = append(stats.result.Latency, percentLatency{Percent: position, Value: stats.durations[max(stats.histogram.Count*int64(position)/100-1, 0)]}) + } + // Last data record the average latency. + avg := float64(stats.histogram.Sum) / float64(stats.histogram.Count) + stats.result.Latency = append(stats.result.Latency, percentLatency{Percent: -1, Value: time.Duration(avg)}) + } +} + +// SortLatency blocks the output +func (stats *Stats) SortLatency() { + stats.sortLatency = true } // Print writes textual output of the Stats. func (stats *Stats) Print(w io.Writer) { stats.maybeUpdate() - if stats.histogram == nil { fmt.Fprint(w, "Histogram (empty)\n") } else { fmt.Fprintf(w, "Histogram (unit: %s)\n", fmt.Sprintf("%v", stats.unit)[1:]) - stats.histogram.Print(w) + stats.histogram.PrintWithUnit(w, float64(stats.unit)) } } diff --git a/vendor/google.golang.org/grpc/benchmark/stats/util.go b/vendor/google.golang.org/grpc/benchmark/stats/util.go index a9922f9..f3bb3a3 100644 --- a/vendor/google.golang.org/grpc/benchmark/stats/util.go +++ b/vendor/google.golang.org/grpc/benchmark/stats/util.go @@ -1,3 +1,21 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + package stats import ( @@ -50,7 +68,7 @@ func AddStatsWithName(b *testing.B, name string, numBuckets int) *Stats { } p := strings.Split(runtime.FuncForPC(pc).Name(), ".") benchName = p[len(p)-1] - if strings.HasPrefix(benchName, "Benchmark") { + if strings.HasPrefix(benchName, "run") { break } } @@ -148,9 +166,8 @@ func splitLines(data []byte, eof bool) (advance int, token []byte, err error) { func injectStatsIfFinished(line string) { injectCond.L.Lock() defer injectCond.L.Unlock() - - // We assume that the benchmark results start with the benchmark name. - if curB == nil || !strings.HasPrefix(line, curBenchName) { + // We assume that the benchmark results start with "Benchmark". + if curB == nil || !strings.HasPrefix(line, "Benchmark") { return } diff --git a/vendor/google.golang.org/grpc/benchmark/worker/benchmark_client.go b/vendor/google.golang.org/grpc/benchmark/worker/benchmark_client.go index dfe8c8f..d0e8f05 100644 --- a/vendor/google.golang.org/grpc/benchmark/worker/benchmark_client.go +++ b/vendor/google.golang.org/grpc/benchmark/worker/benchmark_client.go @@ -1,39 +1,25 @@ /* * - * Copyright 2016, Google Inc. - * All rights reserved. + * Copyright 2016 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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 main import ( + "flag" "math" "runtime" "sync" @@ -48,11 +34,11 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/credentials" "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/status" + "google.golang.org/grpc/testdata" ) -var ( - caFile = "benchmark/server/testdata/ca.pem" -) +var caFile = flag.String("ca_file", "", "The file containing the CA root cert file") type lockingHistogram struct { mu sync.Mutex @@ -132,14 +118,17 @@ func createConns(config *testpb.ClientConfig) ([]*grpc.ClientConn, func(), error case testpb.ClientType_SYNC_CLIENT: case testpb.ClientType_ASYNC_CLIENT: default: - return nil, nil, grpc.Errorf(codes.InvalidArgument, "unknow client type: %v", config.ClientType) + return nil, nil, status.Errorf(codes.InvalidArgument, "unknown client type: %v", config.ClientType) } // Check and set security options. if config.SecurityParams != nil { - creds, err := credentials.NewClientTLSFromFile(abs(caFile), config.SecurityParams.ServerHostOverride) + if *caFile == "" { + *caFile = testdata.Path("ca.pem") + } + creds, err := credentials.NewClientTLSFromFile(*caFile, config.SecurityParams.ServerHostOverride) if err != nil { - return nil, nil, grpc.Errorf(codes.InvalidArgument, "failed to create TLS credentials %v", err) + return nil, nil, status.Errorf(codes.InvalidArgument, "failed to create TLS credentials %v", err) } opts = append(opts, grpc.WithTransportCredentials(creds)) } else { @@ -150,10 +139,10 @@ func createConns(config *testpb.ClientConfig) ([]*grpc.ClientConn, func(), error if config.PayloadConfig != nil { switch config.PayloadConfig.Payload.(type) { case *testpb.PayloadConfig_BytebufParams: - opts = append(opts, grpc.WithCodec(byteBufCodec{})) + opts = append(opts, grpc.WithDefaultCallOptions(grpc.CallCustomCodec(byteBufCodec{}))) case *testpb.PayloadConfig_SimpleParams: default: - return nil, nil, grpc.Errorf(codes.InvalidArgument, "unknow payload config: %v", config.PayloadConfig) + return nil, nil, status.Errorf(codes.InvalidArgument, "unknown payload config: %v", config.PayloadConfig) } } @@ -188,7 +177,7 @@ func performRPCs(config *testpb.ClientConfig, conns []*grpc.ClientConn, bc *benc payloadRespSize = int(c.SimpleParams.RespSize) payloadType = "protobuf" default: - return grpc.Errorf(codes.InvalidArgument, "unknow payload config: %v", config.PayloadConfig) + return status.Errorf(codes.InvalidArgument, "unknown payload config: %v", config.PayloadConfig) } } @@ -196,9 +185,9 @@ func performRPCs(config *testpb.ClientConfig, conns []*grpc.ClientConn, bc *benc switch config.LoadParams.Load.(type) { case *testpb.LoadParams_ClosedLoop: case *testpb.LoadParams_Poisson: - return grpc.Errorf(codes.Unimplemented, "unsupported load params: %v", config.LoadParams) + return status.Errorf(codes.Unimplemented, "unsupported load params: %v", config.LoadParams) default: - return grpc.Errorf(codes.InvalidArgument, "unknown load params: %v", config.LoadParams) + return status.Errorf(codes.InvalidArgument, "unknown load params: %v", config.LoadParams) } rpcCountPerConn := int(config.OutstandingRpcsPerChannel) @@ -211,7 +200,7 @@ func performRPCs(config *testpb.ClientConfig, conns []*grpc.ClientConn, bc *benc bc.doCloseLoopStreaming(conns, rpcCountPerConn, payloadReqSize, payloadRespSize, payloadType) // TODO open loop. default: - return grpc.Errorf(codes.InvalidArgument, "unknown rpc type: %v", config.RpcType) + return status.Errorf(codes.InvalidArgument, "unknown rpc type: %v", config.RpcType) } return nil diff --git a/vendor/google.golang.org/grpc/benchmark/worker/benchmark_server.go b/vendor/google.golang.org/grpc/benchmark/worker/benchmark_server.go index 0d20581..639c0fe 100644 --- a/vendor/google.golang.org/grpc/benchmark/worker/benchmark_server.go +++ b/vendor/google.golang.org/grpc/benchmark/worker/benchmark_server.go @@ -1,39 +1,27 @@ /* * - * Copyright 2016, Google Inc. - * All rights reserved. + * Copyright 2016 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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 main import ( + "flag" + "fmt" + "net" "runtime" "strconv" "strings" @@ -47,12 +35,13 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/credentials" "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/status" + "google.golang.org/grpc/testdata" ) var ( - // File path related to google.golang.org/grpc. - certFile = "benchmark/server/testdata/server1.pem" - keyFile = "benchmark/server/testdata/server1.key" + certFile = flag.String("tls_cert_file", "", "The TLS cert file") + keyFile = flag.String("tls_key_file", "", "The TLS key file") ) type benchmarkServer struct { @@ -100,12 +89,18 @@ func startBenchmarkServer(config *testpb.ServerConfig, serverPort int) (*benchma case testpb.ServerType_ASYNC_SERVER: case testpb.ServerType_ASYNC_GENERIC_SERVER: default: - return nil, grpc.Errorf(codes.InvalidArgument, "unknow server type: %v", config.ServerType) + return nil, status.Errorf(codes.InvalidArgument, "unknown server type: %v", config.ServerType) } // Set security options. if config.SecurityParams != nil { - creds, err := credentials.NewServerTLSFromFile(abs(certFile), abs(keyFile)) + if *certFile == "" { + *certFile = testdata.Path("server1.pem") + } + if *keyFile == "" { + *keyFile = testdata.Path("server1.key") + } + creds, err := credentials.NewServerTLSFromFile(*certFile, *keyFile) if err != nil { grpclog.Fatalf("failed to generate credentials %v", err) } @@ -117,37 +112,38 @@ func startBenchmarkServer(config *testpb.ServerConfig, serverPort int) (*benchma if port == 0 { port = serverPort } + lis, err := net.Listen("tcp", fmt.Sprintf("localhost:%d", port)) + if err != nil { + grpclog.Fatalf("Failed to listen: %v", err) + } + addr := lis.Addr().String() // Create different benchmark server according to config. - var ( - addr string - closeFunc func() - err error - ) + var closeFunc func() if config.PayloadConfig != nil { switch payload := config.PayloadConfig.Payload.(type) { case *testpb.PayloadConfig_BytebufParams: opts = append(opts, grpc.CustomCodec(byteBufCodec{})) - addr, closeFunc = benchmark.StartServer(benchmark.ServerInfo{ - Addr: ":" + strconv.Itoa(port), + closeFunc = benchmark.StartServer(benchmark.ServerInfo{ Type: "bytebuf", Metadata: payload.BytebufParams.RespSize, + Listener: lis, }, opts...) case *testpb.PayloadConfig_SimpleParams: - addr, closeFunc = benchmark.StartServer(benchmark.ServerInfo{ - Addr: ":" + strconv.Itoa(port), - Type: "protobuf", + closeFunc = benchmark.StartServer(benchmark.ServerInfo{ + Type: "protobuf", + Listener: lis, }, opts...) case *testpb.PayloadConfig_ComplexParams: - return nil, grpc.Errorf(codes.Unimplemented, "unsupported payload config: %v", config.PayloadConfig) + return nil, status.Errorf(codes.Unimplemented, "unsupported payload config: %v", config.PayloadConfig) default: - return nil, grpc.Errorf(codes.InvalidArgument, "unknow payload config: %v", config.PayloadConfig) + return nil, status.Errorf(codes.InvalidArgument, "unknown payload config: %v", config.PayloadConfig) } } else { // Start protobuf server if payload config is nil. - addr, closeFunc = benchmark.StartServer(benchmark.ServerInfo{ - Addr: ":" + strconv.Itoa(port), - Type: "protobuf", + closeFunc = benchmark.StartServer(benchmark.ServerInfo{ + Type: "protobuf", + Listener: lis, }, opts...) } diff --git a/vendor/google.golang.org/grpc/benchmark/worker/main.go b/vendor/google.golang.org/grpc/benchmark/worker/main.go index 8a80406..246d452 100644 --- a/vendor/google.golang.org/grpc/benchmark/worker/main.go +++ b/vendor/google.golang.org/grpc/benchmark/worker/main.go @@ -1,33 +1,18 @@ /* * - * Copyright 2016, Google Inc. - * All rights reserved. + * Copyright 2016 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -49,6 +34,7 @@ import ( testpb "google.golang.org/grpc/benchmark/grpc_testing" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/status" ) var ( @@ -129,7 +115,7 @@ func (s *workerServer) RunServer(stream testpb.WorkerService_RunServerServer) er grpclog.Printf("server mark received:") grpclog.Printf(" - %v", argtype) if bs == nil { - return grpc.Errorf(codes.InvalidArgument, "server does not exist when mark received") + return status.Error(codes.InvalidArgument, "server does not exist when mark received") } out = &testpb.ServerStatus{ Stats: bs.getStats(argtype.Mark.Reset_), @@ -182,7 +168,7 @@ func (s *workerServer) RunClient(stream testpb.WorkerService_RunClientServer) er grpclog.Printf("client mark received:") grpclog.Printf(" - %v", t) if bc == nil { - return grpc.Errorf(codes.InvalidArgument, "client does not exist when mark received") + return status.Error(codes.InvalidArgument, "client does not exist when mark received") } out = &testpb.ClientStatus{ Stats: bc.getStats(t.Mark.Reset_), diff --git a/vendor/google.golang.org/grpc/benchmark/worker/util.go b/vendor/google.golang.org/grpc/benchmark/worker/util.go index 6f9b2b0..f26993e 100644 --- a/vendor/google.golang.org/grpc/benchmark/worker/util.go +++ b/vendor/google.golang.org/grpc/benchmark/worker/util.go @@ -1,57 +1,24 @@ /* - * Copyright 2016, Google Inc. - * All rights reserved. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * Copyright 2016 gRPC authors. * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * 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 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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 main -import ( - "log" - "os" - "path/filepath" - "syscall" -) - -// abs returns the absolute path the given relative file or directory path, -// relative to the google.golang.org/grpc directory in the user's GOPATH. -// If rel is already absolute, it is returned unmodified. -func abs(rel string) string { - if filepath.IsAbs(rel) { - return rel - } - v, err := goPackagePath("google.golang.org/grpc") - if err != nil { - log.Fatalf("Error finding google.golang.org/grpc/testdata directory: %v", err) - } - return filepath.Join(v, rel) -} +import "syscall" func cpuTimeDiff(first *syscall.Rusage, latest *syscall.Rusage) (float64, float64) { var ( @@ -66,25 +33,3 @@ func cpuTimeDiff(first *syscall.Rusage, latest *syscall.Rusage) (float64, float6 return uTimeElapsed, sTimeElapsed } - -func goPackagePath(pkg string) (path string, err error) { - gp := os.Getenv("GOPATH") - if gp == "" { - return path, os.ErrNotExist - } - for _, p := range filepath.SplitList(gp) { - dir := filepath.Join(p, "src", filepath.FromSlash(pkg)) - fi, err := os.Stat(dir) - if os.IsNotExist(err) { - continue - } - if err != nil { - return "", err - } - if !fi.IsDir() { - continue - } - return dir, nil - } - return path, os.ErrNotExist -} diff --git a/vendor/google.golang.org/grpc/call.go b/vendor/google.golang.org/grpc/call.go index a2b89ac..b2590e9 100644 --- a/vendor/google.golang.org/grpc/call.go +++ b/vendor/google.golang.org/grpc/call.go @@ -1,324 +1,78 @@ /* * - * Copyright 2014, Google Inc. - * All rights reserved. + * Copyright 2014 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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 grpc import ( - "bytes" - "io" - "time" - "golang.org/x/net/context" - "golang.org/x/net/trace" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/peer" - "google.golang.org/grpc/stats" - "google.golang.org/grpc/status" - "google.golang.org/grpc/transport" ) -// recvResponse receives and parses an RPC response. -// On error, it returns the error and indicates whether the call should be retried. +// Invoke sends the RPC request on the wire and returns after response is +// received. This is typically called by generated code. // -// TODO(zhaoq): Check whether the received message sequence is valid. -// TODO ctx is used for stats collection and processing. It is the context passed from the application. -func recvResponse(ctx context.Context, dopts dialOptions, t transport.ClientTransport, c *callInfo, stream *transport.Stream, reply interface{}) (err error) { - // Try to acquire header metadata from the server if there is any. - defer func() { - if err != nil { - if _, ok := err.(transport.ConnectionError); !ok { - t.CloseStream(stream, err) - } - } - }() - c.headerMD, err = stream.Header() - if err != nil { - return - } - p := &parser{r: stream} - var inPayload *stats.InPayload - if dopts.copts.StatsHandler != nil { - inPayload = &stats.InPayload{ - Client: true, - } - } - for { - if c.maxReceiveMessageSize == nil { - return Errorf(codes.Internal, "callInfo maxReceiveMessageSize field uninitialized(nil)") - } - if err = recv(p, dopts.codec, stream, dopts.dc, reply, *c.maxReceiveMessageSize, inPayload); err != nil { - if err == io.EOF { - break - } - return - } - } - if inPayload != nil && err == io.EOF && stream.Status().Code() == codes.OK { - // TODO in the current implementation, inTrailer may be handled before inPayload in some cases. - // Fix the order if necessary. - dopts.copts.StatsHandler.HandleRPC(ctx, inPayload) - } - c.trailerMD = stream.Trailer() - if peer, ok := peer.FromContext(stream.Context()); ok { - c.peer = peer - } - return nil -} - -// sendRequest writes out various information of an RPC such as Context and Message. -func sendRequest(ctx context.Context, dopts dialOptions, compressor Compressor, c *callInfo, callHdr *transport.CallHdr, stream *transport.Stream, t transport.ClientTransport, args interface{}, opts *transport.Options) (err error) { - defer func() { - if err != nil { - // If err is connection error, t will be closed, no need to close stream here. - if _, ok := err.(transport.ConnectionError); !ok { - t.CloseStream(stream, err) - } - } - }() - var ( - cbuf *bytes.Buffer - outPayload *stats.OutPayload - ) - if compressor != nil { - cbuf = new(bytes.Buffer) - } - if dopts.copts.StatsHandler != nil { - outPayload = &stats.OutPayload{ - Client: true, - } - } - outBuf, err := encode(dopts.codec, args, compressor, cbuf, outPayload) - if err != nil { - return Errorf(codes.Internal, "grpc: %v", err) - } - if c.maxSendMessageSize == nil { - return Errorf(codes.Internal, "callInfo maxSendMessageSize field uninitialized(nil)") - } - if len(outBuf) > *c.maxSendMessageSize { - return Errorf(codes.ResourceExhausted, "grpc: trying to send message larger than max (%d vs. %d)", len(outBuf), *c.maxSendMessageSize) - } - err = t.Write(stream, outBuf, opts) - if err == nil && outPayload != nil { - outPayload.SentTime = time.Now() - dopts.copts.StatsHandler.HandleRPC(ctx, outPayload) - } - // t.NewStream(...) could lead to an early rejection of the RPC (e.g., the service/method - // does not exist.) so that t.Write could get io.EOF from wait(...). Leave the following - // recvResponse to get the final status. - if err != nil && err != io.EOF { - return err - } - // Sent successfully. - return nil -} +// All errors returned by Invoke are compatible with the status package. +func (cc *ClientConn) Invoke(ctx context.Context, method string, args, reply interface{}, opts ...CallOption) error { + // allow interceptor to see all applicable call options, which means those + // configured as defaults from dial option as well as per-call options + opts = append(cc.dopts.callOptions, opts...) -// Invoke sends the RPC request on the wire and returns after response is received. -// Invoke is called by generated code. Also users can call Invoke directly when it -// is really needed in their use cases. -func Invoke(ctx context.Context, method string, args, reply interface{}, cc *ClientConn, opts ...CallOption) error { if cc.dopts.unaryInt != nil { return cc.dopts.unaryInt(ctx, method, args, reply, cc, invoke, opts...) } return invoke(ctx, method, args, reply, cc, opts...) } -func invoke(ctx context.Context, method string, args, reply interface{}, cc *ClientConn, opts ...CallOption) (e error) { - c := defaultCallInfo - mc := cc.GetMethodConfig(method) - if mc.WaitForReady != nil { - c.failFast = !*mc.WaitForReady - } - - if mc.Timeout != nil && *mc.Timeout >= 0 { - var cancel context.CancelFunc - ctx, cancel = context.WithTimeout(ctx, *mc.Timeout) - defer cancel() - } - - opts = append(cc.dopts.callOptions, opts...) - for _, o := range opts { - if err := o.before(&c); err != nil { - return toRPCErr(err) - } - } - defer func() { - for _, o := range opts { - o.after(&c) - } - }() +// Invoke sends the RPC request on the wire and returns after response is +// received. This is typically called by generated code. +// +// DEPRECATED: Use ClientConn.Invoke instead. +func Invoke(ctx context.Context, method string, args, reply interface{}, cc *ClientConn, opts ...CallOption) error { + return cc.Invoke(ctx, method, args, reply, opts...) +} - c.maxSendMessageSize = getMaxSize(mc.MaxReqSize, c.maxSendMessageSize, defaultClientMaxSendMessageSize) - c.maxReceiveMessageSize = getMaxSize(mc.MaxRespSize, c.maxReceiveMessageSize, defaultClientMaxReceiveMessageSize) +var unaryStreamDesc = &StreamDesc{ServerStreams: false, ClientStreams: false} - if EnableTracing { - c.traceInfo.tr = trace.New("grpc.Sent."+methodFamily(method), method) - defer c.traceInfo.tr.Finish() - c.traceInfo.firstLine.client = true - if deadline, ok := ctx.Deadline(); ok { - c.traceInfo.firstLine.deadline = deadline.Sub(time.Now()) - } - c.traceInfo.tr.LazyLog(&c.traceInfo.firstLine, false) - // TODO(dsymonds): Arrange for c.traceInfo.firstLine.remoteAddr to be set. - defer func() { - if e != nil { - c.traceInfo.tr.LazyLog(&fmtStringer{"%v", []interface{}{e}}, true) - c.traceInfo.tr.SetError() - } - }() - } - ctx = newContextWithRPCInfo(ctx) - sh := cc.dopts.copts.StatsHandler - if sh != nil { - ctx = sh.TagRPC(ctx, &stats.RPCTagInfo{FullMethodName: method, FailFast: c.failFast}) - begin := &stats.Begin{ - Client: true, - BeginTime: time.Now(), - FailFast: c.failFast, - } - sh.HandleRPC(ctx, begin) - defer func() { - end := &stats.End{ - Client: true, - EndTime: time.Now(), - Error: e, - } - sh.HandleRPC(ctx, end) - }() - } - topts := &transport.Options{ - Last: true, - Delay: false, - } +func invoke(ctx context.Context, method string, req, reply interface{}, cc *ClientConn, opts ...CallOption) error { + // TODO: implement retries in clientStream and make this simply + // newClientStream, SendMsg, RecvMsg. + firstAttempt := true for { - var ( - err error - t transport.ClientTransport - stream *transport.Stream - // Record the put handler from Balancer.Get(...). It is called once the - // RPC has completed or failed. - put func() - ) - // TODO(zhaoq): Need a formal spec of fail-fast. - callHdr := &transport.CallHdr{ - Host: cc.authority, - Method: method, - } - if cc.dopts.cp != nil { - callHdr.SendCompress = cc.dopts.cp.Type() - } - if c.creds != nil { - callHdr.Creds = c.creds - } - - gopts := BalancerGetOptions{ - BlockingWait: !c.failFast, - } - t, put, err = cc.getTransport(ctx, gopts) + csInt, err := newClientStream(ctx, unaryStreamDesc, cc, method, opts...) if err != nil { - // TODO(zhaoq): Probably revisit the error handling. - if _, ok := status.FromError(err); ok { - return err - } - if err == errConnClosing || err == errConnUnavailable { - if c.failFast { - return Errorf(codes.Unavailable, "%v", err) - } - continue - } - // All the other errors are treated as Internal errors. - return Errorf(codes.Internal, "%v", err) + return err } - if c.traceInfo.tr != nil { - c.traceInfo.tr.LazyLog(&payload{sent: true, msg: args}, true) - } - stream, err = t.NewStream(ctx, callHdr) - if err != nil { - if put != nil { - if _, ok := err.(transport.ConnectionError); ok { - // If error is connection error, transport was sending data on wire, - // and we are not sure if anything has been sent on wire. - // If error is not connection error, we are sure nothing has been sent. - updateRPCInfoInContext(ctx, rpcInfo{bytesSent: true, bytesReceived: false}) - } - put() - } - if _, ok := err.(transport.ConnectionError); (ok || err == transport.ErrStreamDrain) && !c.failFast { + cs := csInt.(*clientStream) + if err := cs.SendMsg(req); err != nil { + if !cs.c.failFast && cs.attempt.s.Unprocessed() && firstAttempt { + // TODO: Add a field to header for grpc-transparent-retry-attempts + firstAttempt = false continue } - return toRPCErr(err) + return err } - err = sendRequest(ctx, cc.dopts, cc.dopts.cp, &c, callHdr, stream, t, args, topts) - if err != nil { - if put != nil { - updateRPCInfoInContext(ctx, rpcInfo{ - bytesSent: stream.BytesSent(), - bytesReceived: stream.BytesReceived(), - }) - put() - } - // Retry a non-failfast RPC when - // i) there is a connection error; or - // ii) the server started to drain before this RPC was initiated. - if _, ok := err.(transport.ConnectionError); (ok || err == transport.ErrStreamDrain) && !c.failFast { - continue - } - return toRPCErr(err) - } - err = recvResponse(ctx, cc.dopts, t, &c, stream, reply) - if err != nil { - if put != nil { - updateRPCInfoInContext(ctx, rpcInfo{ - bytesSent: stream.BytesSent(), - bytesReceived: stream.BytesReceived(), - }) - put() - } - if _, ok := err.(transport.ConnectionError); (ok || err == transport.ErrStreamDrain) && !c.failFast { + if err := cs.RecvMsg(reply); err != nil { + if !cs.c.failFast && cs.attempt.s.Unprocessed() && firstAttempt { + // TODO: Add a field to header for grpc-transparent-retry-attempts + firstAttempt = false continue } - return toRPCErr(err) - } - if c.traceInfo.tr != nil { - c.traceInfo.tr.LazyLog(&payload{sent: false, msg: reply}, true) - } - t.CloseStream(stream, nil) - if put != nil { - updateRPCInfoInContext(ctx, rpcInfo{ - bytesSent: stream.BytesSent(), - bytesReceived: stream.BytesReceived(), - }) - put() + return err } - return stream.Status().Err() + return nil } } diff --git a/vendor/google.golang.org/grpc/call_test.go b/vendor/google.golang.org/grpc/call_test.go index 437197c..b95ade8 100644 --- a/vendor/google.golang.org/grpc/call_test.go +++ b/vendor/google.golang.org/grpc/call_test.go @@ -1,33 +1,18 @@ /* * - * Copyright 2014, Google Inc. - * All rights reserved. + * Copyright 2014 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -47,6 +32,7 @@ import ( "golang.org/x/net/context" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" + "google.golang.org/grpc/test/leakcheck" "google.golang.org/grpc/transport" ) @@ -119,18 +105,19 @@ func (h *testStreamHandler) handleStream(t *testing.T, s *transport.Stream) { } } // send a response back to end the stream. - reply, err := encode(testCodec{}, &expectedResponse, nil, nil, nil) + hdr, data, err := encode(testCodec{}, &expectedResponse, nil, nil, nil) if err != nil { t.Errorf("Failed to encode the response: %v", err) return } - h.t.Write(s, reply, &transport.Options{}) + h.t.Write(s, hdr, data, &transport.Options{}) h.t.WriteStatus(s, status.New(codes.OK, "")) } type server struct { lis net.Listener port string + addr string startedErr chan error // sent nil or an error after server starts mu sync.Mutex conns map[transport.ServerTransport]bool @@ -152,7 +139,8 @@ func (s *server) start(t *testing.T, port int, maxStreams uint32) { s.startedErr <- fmt.Errorf("failed to listen: %v", err) return } - _, p, err := net.SplitHostPort(s.lis.Addr().String()) + s.addr = s.lis.Addr().String() + _, p, err := net.SplitHostPort(s.addr) if err != nil { s.startedErr <- fmt.Errorf("failed to parse listener address: %v", err) return @@ -226,6 +214,7 @@ func setUp(t *testing.T, port int, maxStreams uint32) (*server, *ClientConn) { } func TestInvoke(t *testing.T) { + defer leakcheck.Check(t) server, cc := setUp(t, 0, math.MaxUint32) var reply string if err := Invoke(context.Background(), "/foo/bar", &expectedRequest, &reply, cc); err != nil || reply != expectedResponse { @@ -236,6 +225,7 @@ func TestInvoke(t *testing.T) { } func TestInvokeLargeErr(t *testing.T) { + defer leakcheck.Check(t) server, cc := setUp(t, 0, math.MaxUint32) var reply string req := "hello" @@ -243,7 +233,7 @@ func TestInvokeLargeErr(t *testing.T) { if _, ok := status.FromError(err); !ok { t.Fatalf("grpc.Invoke(_, _, _, _, _) receives non rpc error.") } - if Code(err) != codes.Internal || len(ErrorDesc(err)) != sizeLargeErr { + if status.Code(err) != codes.Internal || len(errorDesc(err)) != sizeLargeErr { t.Fatalf("grpc.Invoke(_, _, _, _, _) = %v, want an error of code %d and desc size %d", err, codes.Internal, sizeLargeErr) } cc.Close() @@ -252,6 +242,7 @@ func TestInvokeLargeErr(t *testing.T) { // TestInvokeErrorSpecialChars checks that error messages don't get mangled. func TestInvokeErrorSpecialChars(t *testing.T) { + defer leakcheck.Check(t) server, cc := setUp(t, 0, math.MaxUint32) var reply string req := "weird error" @@ -259,7 +250,7 @@ func TestInvokeErrorSpecialChars(t *testing.T) { if _, ok := status.FromError(err); !ok { t.Fatalf("grpc.Invoke(_, _, _, _, _) receives non rpc error.") } - if got, want := ErrorDesc(err), weirdError; got != want { + if got, want := errorDesc(err), weirdError; got != want { t.Fatalf("grpc.Invoke(_, _, _, _, _) error = %q, want %q", got, want) } cc.Close() @@ -268,6 +259,7 @@ func TestInvokeErrorSpecialChars(t *testing.T) { // TestInvokeCancel checks that an Invoke with a canceled context is not sent. func TestInvokeCancel(t *testing.T) { + defer leakcheck.Check(t) server, cc := setUp(t, 0, math.MaxUint32) var reply string req := "canceled" @@ -286,6 +278,7 @@ func TestInvokeCancel(t *testing.T) { // TestInvokeCancelClosedNonFail checks that a canceled non-failfast RPC // on a closed client will terminate. func TestInvokeCancelClosedNonFailFast(t *testing.T) { + defer leakcheck.Check(t) server, cc := setUp(t, 0, math.MaxUint32) var reply string cc.Close() diff --git a/vendor/google.golang.org/grpc/clientconn.go b/vendor/google.golang.org/grpc/clientconn.go index 04c1652..096d943 100644 --- a/vendor/google.golang.org/grpc/clientconn.go +++ b/vendor/google.golang.org/grpc/clientconn.go @@ -1,33 +1,18 @@ /* * - * Copyright 2014, Google Inc. - * All rights reserved. + * Copyright 2014 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -36,29 +21,59 @@ package grpc import ( "errors" "fmt" + "math" "net" + "reflect" "strings" "sync" "time" "golang.org/x/net/context" "golang.org/x/net/trace" + "google.golang.org/grpc/balancer" + _ "google.golang.org/grpc/balancer/roundrobin" // To register roundrobin. + "google.golang.org/grpc/codes" + "google.golang.org/grpc/connectivity" "google.golang.org/grpc/credentials" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/keepalive" + "google.golang.org/grpc/resolver" + _ "google.golang.org/grpc/resolver/dns" // To register dns resolver. + _ "google.golang.org/grpc/resolver/passthrough" // To register passthrough resolver. "google.golang.org/grpc/stats" + "google.golang.org/grpc/status" "google.golang.org/grpc/transport" ) +const ( + // minimum time to give a connection to complete + minConnectTimeout = 20 * time.Second +) + var ( // ErrClientConnClosing indicates that the operation is illegal because // the ClientConn is closing. - ErrClientConnClosing = errors.New("grpc: the client connection is closing") - // ErrClientConnTimeout indicates that the ClientConn cannot establish the - // underlying connections within the specified timeout. - // DEPRECATED: Please use context.DeadlineExceeded instead. - ErrClientConnTimeout = errors.New("grpc: timed out when dialing") + // + // Deprecated: this error should not be relied upon by users; use the status + // code of Canceled instead. + ErrClientConnClosing = status.Error(codes.Canceled, "grpc: the client connection is closing") + // errConnDrain indicates that the connection starts to be drained and does not accept any new RPCs. + errConnDrain = errors.New("grpc: the connection is drained") + // errConnClosing indicates that the connection is closing. + errConnClosing = errors.New("grpc: the connection is closing") + // errConnUnavailable indicates that the connection is unavailable. + errConnUnavailable = errors.New("grpc: the connection is unavailable") + // errBalancerClosed indicates that the balancer is closed. + errBalancerClosed = errors.New("grpc: balancer is closed") + // We use an accessor so that minConnectTimeout can be + // atomically read and updated while testing. + getMinConnectTimeout = func() time.Duration { + return minConnectTimeout + } +) +// The following errors are returned from Dial and DialContext +var ( // errNoTransportSecurity indicates that there is no transport security // being set for ClientConn. Users should either set one or explicitly // call WithInsecure DialOption to disable security. @@ -72,16 +87,6 @@ var ( errCredentialsConflict = errors.New("grpc: transport credentials are set for an insecure connection (grpc.WithTransportCredentials() and grpc.WithInsecure() are both called)") // errNetworkIO indicates that the connection is down due to some network I/O error. errNetworkIO = errors.New("grpc: failed with network I/O error") - // errConnDrain indicates that the connection starts to be drained and does not accept any new RPCs. - errConnDrain = errors.New("grpc: the connection is drained") - // errConnClosing indicates that the connection is closing. - errConnClosing = errors.New("grpc: the connection is closing") - // errConnUnavailable indicates that the connection is unavailable. - errConnUnavailable = errors.New("grpc: the connection is unavailable") - // errBalancerClosed indicates that the balancer is closed. - errBalancerClosed = errors.New("grpc: balancer is closed") - // minimum time to give a connection to complete - minConnectTimeout = 20 * time.Second ) // dialOptions configure a Dial call. dialOptions are set by the DialOption @@ -89,27 +94,56 @@ var ( type dialOptions struct { unaryInt UnaryClientInterceptor streamInt StreamClientInterceptor - codec Codec cp Compressor dc Decompressor bs backoffStrategy - balancer Balancer block bool insecure bool timeout time.Duration scChan <-chan ServiceConfig copts transport.ConnectOptions callOptions []CallOption + // This is used by v1 balancer dial option WithBalancer to support v1 + // balancer, and also by WithBalancerName dial option. + balancerBuilder balancer.Builder + // This is to support grpclb. + resolverBuilder resolver.Builder + waitForHandshake bool } const ( defaultClientMaxReceiveMessageSize = 1024 * 1024 * 4 - defaultClientMaxSendMessageSize = 1024 * 1024 * 4 + defaultClientMaxSendMessageSize = math.MaxInt32 ) // DialOption configures how we set up the connection. type DialOption func(*dialOptions) +// WithWaitForHandshake blocks until the initial settings frame is received from the +// server before assigning RPCs to the connection. +// Experimental API. +func WithWaitForHandshake() DialOption { + return func(o *dialOptions) { + o.waitForHandshake = true + } +} + +// WithWriteBufferSize lets you set the size of write buffer, this determines how much data can be batched +// before doing a write on the wire. +func WithWriteBufferSize(s int) DialOption { + return func(o *dialOptions) { + o.copts.WriteBufferSize = s + } +} + +// WithReadBufferSize lets you set the size of read buffer, this determines how much data can be read at most +// for each read syscall. +func WithReadBufferSize(s int) DialOption { + return func(o *dialOptions) { + o.copts.ReadBufferSize = s + } +} + // WithInitialWindowSize returns a DialOption which sets the value for initial window size on a stream. // The lower bound for window size is 64K and any value smaller than that will be ignored. func WithInitialWindowSize(s int32) DialOption { @@ -139,36 +173,78 @@ func WithDefaultCallOptions(cos ...CallOption) DialOption { } // WithCodec returns a DialOption which sets a codec for message marshaling and unmarshaling. +// +// Deprecated: use WithDefaultCallOptions(CallCustomCodec(c)) instead. func WithCodec(c Codec) DialOption { - return func(o *dialOptions) { - o.codec = c - } + return WithDefaultCallOptions(CallCustomCodec(c)) } -// WithCompressor returns a DialOption which sets a CompressorGenerator for generating message -// compressor. +// WithCompressor returns a DialOption which sets a Compressor to use for +// message compression. It has lower priority than the compressor set by +// the UseCompressor CallOption. +// +// Deprecated: use UseCompressor instead. func WithCompressor(cp Compressor) DialOption { return func(o *dialOptions) { o.cp = cp } } -// WithDecompressor returns a DialOption which sets a DecompressorGenerator for generating -// message decompressor. +// WithDecompressor returns a DialOption which sets a Decompressor to use for +// incoming message decompression. If incoming response messages are encoded +// using the decompressor's Type(), it will be used. Otherwise, the message +// encoding will be used to look up the compressor registered via +// encoding.RegisterCompressor, which will then be used to decompress the +// message. If no compressor is registered for the encoding, an Unimplemented +// status error will be returned. +// +// Deprecated: use encoding.RegisterCompressor instead. func WithDecompressor(dc Decompressor) DialOption { return func(o *dialOptions) { o.dc = dc } } -// WithBalancer returns a DialOption which sets a load balancer. +// WithBalancer returns a DialOption which sets a load balancer with the v1 API. +// Name resolver will be ignored if this DialOption is specified. +// +// Deprecated: use the new balancer APIs in balancer package and WithBalancerName. func WithBalancer(b Balancer) DialOption { return func(o *dialOptions) { - o.balancer = b + o.balancerBuilder = &balancerWrapperBuilder{ + b: b, + } + } +} + +// WithBalancerName sets the balancer that the ClientConn will be initialized +// with. Balancer registered with balancerName will be used. This function +// panics if no balancer was registered by balancerName. +// +// The balancer cannot be overridden by balancer option specified by service +// config. +// +// This is an EXPERIMENTAL API. +func WithBalancerName(balancerName string) DialOption { + builder := balancer.Get(balancerName) + if builder == nil { + panic(fmt.Sprintf("grpc.WithBalancerName: no balancer is registered for name %v", balancerName)) + } + return func(o *dialOptions) { + o.balancerBuilder = builder + } +} + +// withResolverBuilder is only for grpclb. +func withResolverBuilder(b resolver.Builder) DialOption { + return func(o *dialOptions) { + o.resolverBuilder = b } } // WithServiceConfig returns a DialOption which has a channel to read the service configuration. +// DEPRECATED: service config should be received through name resolver, as specified here. +// https://github.com/grpc/grpc/blob/master/doc/service_config.md func WithServiceConfig(c <-chan ServiceConfig) DialOption { return func(o *dialOptions) { o.scChan = c @@ -193,7 +269,7 @@ func WithBackoffConfig(b BackoffConfig) DialOption { return withBackoff(b) } -// withBackoff sets the backoff strategy used for retries after a +// withBackoff sets the backoff strategy used for connectRetryNum after a // failed connection attempt. // // This can be exported if arbitrary backoff strategies are allowed by gRPC. @@ -238,24 +314,30 @@ func WithPerRPCCredentials(creds credentials.PerRPCCredentials) DialOption { // WithTimeout returns a DialOption that configures a timeout for dialing a ClientConn // initially. This is valid if and only if WithBlock() is present. +// Deprecated: use DialContext and context.WithTimeout instead. func WithTimeout(d time.Duration) DialOption { return func(o *dialOptions) { o.timeout = d } } +func withContextDialer(f func(context.Context, string) (net.Conn, error)) DialOption { + return func(o *dialOptions) { + o.copts.Dialer = f + } +} + // WithDialer returns a DialOption that specifies a function to use for dialing network addresses. // If FailOnNonTempDialError() is set to true, and an error is returned by f, gRPC checks the error's // Temporary() method to decide if it should try to reconnect to the network address. func WithDialer(f func(string, time.Duration) (net.Conn, error)) DialOption { - return func(o *dialOptions) { - o.copts.Dialer = func(ctx context.Context, addr string) (net.Conn, error) { + return withContextDialer( + func(ctx context.Context, addr string) (net.Conn, error) { if deadline, ok := ctx.Deadline(); ok { return f(addr, deadline.Sub(time.Now())) } return f(addr, 0) - } - } + }) } // WithStatsHandler returns a DialOption that specifies the stats handler @@ -284,7 +366,7 @@ func WithUserAgent(s string) DialOption { } } -// WithKeepaliveParams returns a DialOption that specifies keepalive paramaters for the client transport. +// WithKeepaliveParams returns a DialOption that specifies keepalive parameters for the client transport. func WithKeepaliveParams(kp keepalive.ClientParameters) DialOption { return func(o *dialOptions) { o.copts.KeepaliveParams = kp @@ -323,16 +405,39 @@ func Dial(target string, opts ...DialOption) (*ClientConn, error) { // cancel or expire the pending connection. Once this function returns, the // cancellation and expiration of ctx will be noop. Users should call ClientConn.Close // to terminate all the pending operations after this function returns. +// +// The target name syntax is defined in +// https://github.com/grpc/grpc/blob/master/doc/naming.md. +// e.g. to use dns resolver, a "dns:///" prefix should be applied to the target. func DialContext(ctx context.Context, target string, opts ...DialOption) (conn *ClientConn, err error) { cc := &ClientConn{ target: target, - conns: make(map[Address]*addrConn), + csMgr: &connectivityStateManager{}, + conns: make(map[*addrConn]struct{}), + + blockingpicker: newPickerWrapper(), } cc.ctx, cc.cancel = context.WithCancel(context.Background()) for _, opt := range opts { opt(&cc.dopts) } + + if !cc.dopts.insecure { + if cc.dopts.copts.TransportCredentials == nil { + return nil, errNoTransportSecurity + } + } else { + if cc.dopts.copts.TransportCredentials != nil { + return nil, errCredentialsConflict + } + for _, cd := range cc.dopts.copts.PerRPCCredentials { + if cd.RequireTransportSecurity() { + return nil, errTransportCredentialsMissing + } + } + } + cc.mkp = cc.dopts.copts.KeepaliveParams if cc.dopts.copts.Dialer == nil { @@ -379,66 +484,21 @@ func DialContext(ctx context.Context, target string, opts ...DialOption) (conn * default: } } - // Set defaults. - if cc.dopts.codec == nil { - cc.dopts.codec = protoCodec{} - } if cc.dopts.bs == nil { cc.dopts.bs = DefaultBackoffConfig } + cc.parsedTarget = parseTarget(cc.target) creds := cc.dopts.copts.TransportCredentials if creds != nil && creds.Info().ServerName != "" { cc.authority = creds.Info().ServerName } else if cc.dopts.insecure && cc.dopts.copts.Authority != "" { cc.authority = cc.dopts.copts.Authority } else { - cc.authority = target - } - waitC := make(chan error, 1) - go func() { - defer close(waitC) - if cc.dopts.balancer == nil && cc.sc.LB != nil { - cc.dopts.balancer = cc.sc.LB - } - if cc.dopts.balancer != nil { - var credsClone credentials.TransportCredentials - if creds != nil { - credsClone = creds.Clone() - } - config := BalancerConfig{ - DialCreds: credsClone, - Dialer: cc.dopts.copts.Dialer, - } - if err := cc.dopts.balancer.Start(target, config); err != nil { - waitC <- err - return - } - ch := cc.dopts.balancer.Notify() - if ch != nil { - if cc.dopts.block { - doneChan := make(chan struct{}) - go cc.lbWatcher(doneChan) - <-doneChan - } else { - go cc.lbWatcher(nil) - } - return - } - } - // No balancer, or no resolver within the balancer. Connect directly. - if err := cc.resetAddrConn(Address{Addr: target}, cc.dopts.block, nil); err != nil { - waitC <- err - return - } - }() - select { - case <-ctx.Done(): - return nil, ctx.Err() - case err := <-waitC: - if err != nil { - return nil, err - } + // Use endpoint from "scheme://authority/endpoint" as the default + // authority for ClientConn. + cc.authority = cc.parsedTarget.Endpoint } + if cc.dopts.scChan != nil && !scSet { // Blocking wait for the initial service config. select { @@ -454,40 +514,87 @@ func DialContext(ctx context.Context, target string, opts ...DialOption) (conn * go cc.scWatcher() } + var credsClone credentials.TransportCredentials + if creds := cc.dopts.copts.TransportCredentials; creds != nil { + credsClone = creds.Clone() + } + cc.balancerBuildOpts = balancer.BuildOptions{ + DialCreds: credsClone, + Dialer: cc.dopts.copts.Dialer, + } + + // Build the resolver. + cc.resolverWrapper, err = newCCResolverWrapper(cc) + if err != nil { + return nil, fmt.Errorf("failed to build resolver: %v", err) + } + // Start the resolver wrapper goroutine after resolverWrapper is created. + // + // If the goroutine is started before resolverWrapper is ready, the + // following may happen: The goroutine sends updates to cc. cc forwards + // those to balancer. Balancer creates new addrConn. addrConn fails to + // connect, and calls resolveNow(). resolveNow() tries to use the non-ready + // resolverWrapper. + cc.resolverWrapper.start() + + // A blocking dial blocks until the clientConn is ready. + if cc.dopts.block { + for { + s := cc.GetState() + if s == connectivity.Ready { + break + } + if !cc.WaitForStateChange(ctx, s) { + // ctx got timeout or canceled. + return nil, ctx.Err() + } + } + } + return cc, nil } -// ConnectivityState indicates the state of a client connection. -type ConnectivityState int +// connectivityStateManager keeps the connectivity.State of ClientConn. +// This struct will eventually be exported so the balancers can access it. +type connectivityStateManager struct { + mu sync.Mutex + state connectivity.State + notifyChan chan struct{} +} -const ( - // Idle indicates the ClientConn is idle. - Idle ConnectivityState = iota - // Connecting indicates the ClienConn is connecting. - Connecting - // Ready indicates the ClientConn is ready for work. - Ready - // TransientFailure indicates the ClientConn has seen a failure but expects to recover. - TransientFailure - // Shutdown indicates the ClientConn has started shutting down. - Shutdown -) +// updateState updates the connectivity.State of ClientConn. +// If there's a change it notifies goroutines waiting on state change to +// happen. +func (csm *connectivityStateManager) updateState(state connectivity.State) { + csm.mu.Lock() + defer csm.mu.Unlock() + if csm.state == connectivity.Shutdown { + return + } + if csm.state == state { + return + } + csm.state = state + if csm.notifyChan != nil { + // There are other goroutines waiting on this channel. + close(csm.notifyChan) + csm.notifyChan = nil + } +} + +func (csm *connectivityStateManager) getState() connectivity.State { + csm.mu.Lock() + defer csm.mu.Unlock() + return csm.state +} -func (s ConnectivityState) String() string { - switch s { - case Idle: - return "IDLE" - case Connecting: - return "CONNECTING" - case Ready: - return "READY" - case TransientFailure: - return "TRANSIENT_FAILURE" - case Shutdown: - return "SHUTDOWN" - default: - panic(fmt.Sprintf("unknown connectivity state: %d", s)) +func (csm *connectivityStateManager) getNotifyChan() <-chan struct{} { + csm.mu.Lock() + defer csm.mu.Unlock() + if csm.notifyChan == nil { + csm.notifyChan = make(chan struct{}) } + return csm.notifyChan } // ClientConn represents a client connection to an RPC server. @@ -495,63 +602,50 @@ type ClientConn struct { ctx context.Context cancel context.CancelFunc - target string - authority string - dopts dialOptions + target string + parsedTarget resolver.Target + authority string + dopts dialOptions + csMgr *connectivityStateManager + + balancerBuildOpts balancer.BuildOptions + resolverWrapper *ccResolverWrapper + blockingpicker *pickerWrapper mu sync.RWMutex sc ServiceConfig - conns map[Address]*addrConn - // Keepalive parameter can be udated if a GoAway is received. - mkp keepalive.ClientParameters -} - -// lbWatcher watches the Notify channel of the balancer in cc and manages -// connections accordingly. If doneChan is not nil, it is closed after the -// first successfull connection is made. -func (cc *ClientConn) lbWatcher(doneChan chan struct{}) { - for addrs := range cc.dopts.balancer.Notify() { - var ( - add []Address // Addresses need to setup connections. - del []*addrConn // Connections need to tear down. - ) - cc.mu.Lock() - for _, a := range addrs { - if _, ok := cc.conns[a]; !ok { - add = append(add, a) - } - } - for k, c := range cc.conns { - var keep bool - for _, a := range addrs { - if k == a { - keep = true - break - } - } - if !keep { - del = append(del, c) - delete(cc.conns, c.addr) - } - } - cc.mu.Unlock() - for _, a := range add { - if doneChan != nil { - err := cc.resetAddrConn(a, true, nil) - if err == nil { - close(doneChan) - doneChan = nil - } - } else { - cc.resetAddrConn(a, false, nil) - } - } - for _, c := range del { - c.tearDown(errConnDrain) - } + scRaw string + conns map[*addrConn]struct{} + // Keepalive parameter can be updated if a GoAway is received. + mkp keepalive.ClientParameters + curBalancerName string + preBalancerName string // previous balancer name. + curAddresses []resolver.Address + balancerWrapper *ccBalancerWrapper +} + +// WaitForStateChange waits until the connectivity.State of ClientConn changes from sourceState or +// ctx expires. A true value is returned in former case and false in latter. +// This is an EXPERIMENTAL API. +func (cc *ClientConn) WaitForStateChange(ctx context.Context, sourceState connectivity.State) bool { + ch := cc.csMgr.getNotifyChan() + if cc.csMgr.getState() != sourceState { + return true + } + select { + case <-ctx.Done(): + return false + case <-ch: + return true } } +// GetState returns the connectivity.State of ClientConn. +// This is an EXPERIMENTAL API. +func (cc *ClientConn) GetState() connectivity.State { + return cc.csMgr.getState() +} + func (cc *ClientConn) scWatcher() { for { select { @@ -563,6 +657,7 @@ func (cc *ClientConn) scWatcher() { // TODO: load balance policy runtime change is ignored. // We may revist this decision in the future. cc.sc = sc + cc.scRaw = "" cc.mu.Unlock() case <-cc.ctx.Done(): return @@ -570,101 +665,215 @@ func (cc *ClientConn) scWatcher() { } } -// resetAddrConn creates an addrConn for addr and adds it to cc.conns. -// If there is an old addrConn for addr, it will be torn down, using tearDownErr as the reason. -// If tearDownErr is nil, errConnDrain will be used instead. -func (cc *ClientConn) resetAddrConn(addr Address, block bool, tearDownErr error) error { - ac := &addrConn{ - cc: cc, - addr: addr, - dopts: cc.dopts, +func (cc *ClientConn) handleResolvedAddrs(addrs []resolver.Address, err error) { + cc.mu.Lock() + defer cc.mu.Unlock() + if cc.conns == nil { + // cc was closed. + return } - cc.mu.RLock() - ac.dopts.copts.KeepaliveParams = cc.mkp - cc.mu.RUnlock() - ac.ctx, ac.cancel = context.WithCancel(cc.ctx) - ac.stateCV = sync.NewCond(&ac.mu) - if EnableTracing { - ac.events = trace.NewEventLog("grpc.ClientConn", ac.addr.Addr) + + if reflect.DeepEqual(cc.curAddresses, addrs) { + return } - if !ac.dopts.insecure { - if ac.dopts.copts.TransportCredentials == nil { - return errNoTransportSecurity - } - } else { - if ac.dopts.copts.TransportCredentials != nil { - return errCredentialsConflict + + cc.curAddresses = addrs + + if cc.dopts.balancerBuilder == nil { + // Only look at balancer types and switch balancer if balancer dial + // option is not set. + var isGRPCLB bool + for _, a := range addrs { + if a.Type == resolver.GRPCLB { + isGRPCLB = true + break + } } - for _, cd := range ac.dopts.copts.PerRPCCredentials { - if cd.RequireTransportSecurity() { - return errTransportCredentialsMissing + var newBalancerName string + if isGRPCLB { + newBalancerName = grpclbName + } else { + // Address list doesn't contain grpclb address. Try to pick a + // non-grpclb balancer. + newBalancerName = cc.curBalancerName + // If current balancer is grpclb, switch to the previous one. + if newBalancerName == grpclbName { + newBalancerName = cc.preBalancerName + } + // The following could be true in two cases: + // - the first time handling resolved addresses + // (curBalancerName="") + // - the first time handling non-grpclb addresses + // (curBalancerName="grpclb", preBalancerName="") + if newBalancerName == "" { + newBalancerName = PickFirstBalancerName } } + cc.switchBalancer(newBalancerName) + } else if cc.balancerWrapper == nil { + // Balancer dial option was set, and this is the first time handling + // resolved addresses. Build a balancer with dopts.balancerBuilder. + cc.balancerWrapper = newCCBalancerWrapper(cc, cc.dopts.balancerBuilder, cc.balancerBuildOpts) + } + + cc.balancerWrapper.handleResolvedAddrs(addrs, nil) +} + +// switchBalancer starts the switching from current balancer to the balancer +// with the given name. +// +// It will NOT send the current address list to the new balancer. If needed, +// caller of this function should send address list to the new balancer after +// this function returns. +// +// Caller must hold cc.mu. +func (cc *ClientConn) switchBalancer(name string) { + if cc.conns == nil { + return + } + + if strings.ToLower(cc.curBalancerName) == strings.ToLower(name) { + return + } + + grpclog.Infof("ClientConn switching balancer to %q", name) + if cc.dopts.balancerBuilder != nil { + grpclog.Infoln("ignoring balancer switching: Balancer DialOption used instead") + return + } + // TODO(bar switching) change this to two steps: drain and close. + // Keep track of sc in wrapper. + if cc.balancerWrapper != nil { + cc.balancerWrapper.close() + } + + builder := balancer.Get(name) + if builder == nil { + grpclog.Infof("failed to get balancer builder for: %v, using pick_first instead", name) + builder = newPickfirstBuilder() + } + cc.preBalancerName = cc.curBalancerName + cc.curBalancerName = builder.Name() + cc.balancerWrapper = newCCBalancerWrapper(cc, builder, cc.balancerBuildOpts) +} + +func (cc *ClientConn) handleSubConnStateChange(sc balancer.SubConn, s connectivity.State) { + cc.mu.Lock() + if cc.conns == nil { + cc.mu.Unlock() + return + } + // TODO(bar switching) send updates to all balancer wrappers when balancer + // gracefully switching is supported. + cc.balancerWrapper.handleSubConnStateChange(sc, s) + cc.mu.Unlock() +} + +// newAddrConn creates an addrConn for addrs and adds it to cc.conns. +// +// Caller needs to make sure len(addrs) > 0. +func (cc *ClientConn) newAddrConn(addrs []resolver.Address) (*addrConn, error) { + ac := &addrConn{ + cc: cc, + addrs: addrs, + dopts: cc.dopts, } + ac.ctx, ac.cancel = context.WithCancel(cc.ctx) // Track ac in cc. This needs to be done before any getTransport(...) is called. cc.mu.Lock() if cc.conns == nil { cc.mu.Unlock() - return ErrClientConnClosing + return nil, ErrClientConnClosing } - stale := cc.conns[ac.addr] - cc.conns[ac.addr] = ac + cc.conns[ac] = struct{}{} cc.mu.Unlock() - if stale != nil { - // There is an addrConn alive on ac.addr already. This could be due to - // 1) a buggy Balancer notifies duplicated Addresses; - // 2) goaway was received, a new ac will replace the old ac. - // The old ac should be deleted from cc.conns, but the - // underlying transport should drain rather than close. - if tearDownErr == nil { - // tearDownErr is nil if resetAddrConn is called by - // 1) Dial - // 2) lbWatcher - // In both cases, the stale ac should drain, not close. - stale.tearDown(errConnDrain) - } else { - stale.tearDown(tearDownErr) - } + return ac, nil +} + +// removeAddrConn removes the addrConn in the subConn from clientConn. +// It also tears down the ac with the given error. +func (cc *ClientConn) removeAddrConn(ac *addrConn, err error) { + cc.mu.Lock() + if cc.conns == nil { + cc.mu.Unlock() + return + } + delete(cc.conns, ac) + cc.mu.Unlock() + ac.tearDown(err) +} + +// connect starts to creating transport and also starts the transport monitor +// goroutine for this ac. +// It does nothing if the ac is not IDLE. +// TODO(bar) Move this to the addrConn section. +// This was part of resetAddrConn, keep it here to make the diff look clean. +func (ac *addrConn) connect() error { + ac.mu.Lock() + if ac.state == connectivity.Shutdown { + ac.mu.Unlock() + return errConnClosing + } + if ac.state != connectivity.Idle { + ac.mu.Unlock() + return nil } - if block { - if err := ac.resetTransport(false); err != nil { + ac.state = connectivity.Connecting + ac.cc.handleSubConnStateChange(ac.acbw, ac.state) + ac.mu.Unlock() + + // Start a goroutine connecting to the server asynchronously. + go func() { + if err := ac.resetTransport(); err != nil { + grpclog.Warningf("Failed to dial %s: %v; please retry.", ac.addrs[0].Addr, err) if err != errConnClosing { - // Tear down ac and delete it from cc.conns. - cc.mu.Lock() - delete(cc.conns, ac.addr) - cc.mu.Unlock() + // Keep this ac in cc.conns, to get the reason it's torn down. ac.tearDown(err) } - if e, ok := err.(transport.ConnectionError); ok && !e.Temporary() { - return e.Origin() - } - return err + return } - // Start to monitor the error status of transport. - go ac.transportMonitor() - } else { - // Start a goroutine connecting to the server asynchronously. - go func() { - if err := ac.resetTransport(false); err != nil { - grpclog.Printf("Failed to dial %s: %v; please retry.", ac.addr.Addr, err) - if err != errConnClosing { - // Keep this ac in cc.conns, to get the reason it's torn down. - ac.tearDown(err) - } - return - } - ac.transportMonitor() - }() - } + ac.transportMonitor() + }() return nil } +// tryUpdateAddrs tries to update ac.addrs with the new addresses list. +// +// It checks whether current connected address of ac is in the new addrs list. +// - If true, it updates ac.addrs and returns true. The ac will keep using +// the existing connection. +// - If false, it does nothing and returns false. +func (ac *addrConn) tryUpdateAddrs(addrs []resolver.Address) bool { + ac.mu.Lock() + defer ac.mu.Unlock() + grpclog.Infof("addrConn: tryUpdateAddrs curAddr: %v, addrs: %v", ac.curAddr, addrs) + if ac.state == connectivity.Shutdown { + ac.addrs = addrs + return true + } + + var curAddrFound bool + for _, a := range addrs { + if reflect.DeepEqual(ac.curAddr, a) { + curAddrFound = true + break + } + } + grpclog.Infof("addrConn: tryUpdateAddrs curAddrFound: %v", curAddrFound) + if curAddrFound { + ac.addrs = addrs + ac.reconnectIdx = 0 // Start reconnecting from beginning in the new list. + } + + return curAddrFound +} + // GetMethodConfig gets the method config of the input method. // If there's an exact match for input method (i.e. /service/method), we return // the corresponding MethodConfig. // If there isn't an exact match for the input method, we look for the default config // under the service (i.e /service/). If there is a default MethodConfig for -// the serivce, we return it. +// the service, we return it. // Otherwise, we return an empty MethodConfig. func (cc *ClientConn) GetMethodConfig(method string) MethodConfig { // TODO: Avoid the locking here. @@ -678,63 +887,54 @@ func (cc *ClientConn) GetMethodConfig(method string) MethodConfig { return m } -func (cc *ClientConn) getTransport(ctx context.Context, opts BalancerGetOptions) (transport.ClientTransport, func(), error) { - var ( - ac *addrConn - ok bool - put func() - ) - if cc.dopts.balancer == nil { - // If balancer is nil, there should be only one addrConn available. - cc.mu.RLock() - if cc.conns == nil { - cc.mu.RUnlock() - return nil, nil, toRPCErr(ErrClientConnClosing) - } - for _, ac = range cc.conns { - // Break after the first iteration to get the first addrConn. - ok = true - break - } - cc.mu.RUnlock() - } else { - var ( - addr Address - err error - ) - addr, put, err = cc.dopts.balancer.Get(ctx, opts) - if err != nil { - return nil, nil, toRPCErr(err) - } - cc.mu.RLock() - if cc.conns == nil { - cc.mu.RUnlock() - return nil, nil, toRPCErr(ErrClientConnClosing) - } - ac, ok = cc.conns[addr] - cc.mu.RUnlock() - } - if !ok { - if put != nil { - updateRPCInfoInContext(ctx, rpcInfo{bytesSent: false, bytesReceived: false}) - put() - } - return nil, nil, errConnClosing +func (cc *ClientConn) getTransport(ctx context.Context, failfast bool) (transport.ClientTransport, func(balancer.DoneInfo), error) { + t, done, err := cc.blockingpicker.pick(ctx, failfast, balancer.PickOptions{}) + if err != nil { + return nil, nil, toRPCErr(err) } - t, err := ac.wait(ctx, cc.dopts.balancer != nil, !opts.BlockingWait) + return t, done, nil +} + +// handleServiceConfig parses the service config string in JSON format to Go native +// struct ServiceConfig, and store both the struct and the JSON string in ClientConn. +func (cc *ClientConn) handleServiceConfig(js string) error { + sc, err := parseServiceConfig(js) if err != nil { - if put != nil { - updateRPCInfoInContext(ctx, rpcInfo{bytesSent: false, bytesReceived: false}) - put() + return err + } + cc.mu.Lock() + cc.scRaw = js + cc.sc = sc + if sc.LB != nil && *sc.LB != grpclbName { // "grpclb" is not a valid balancer option in service config. + if cc.curBalancerName == grpclbName { + // If current balancer is grpclb, there's at least one grpclb + // balancer address in the resolved list. Don't switch the balancer, + // but change the previous balancer name, so if a new resolved + // address list doesn't contain grpclb address, balancer will be + // switched to *sc.LB. + cc.preBalancerName = *sc.LB + } else { + cc.switchBalancer(*sc.LB) + cc.balancerWrapper.handleResolvedAddrs(cc.curAddresses, nil) } - return nil, nil, err } - return t, put, nil + cc.mu.Unlock() + return nil +} + +func (cc *ClientConn) resolveNow(o resolver.ResolveNowOption) { + cc.mu.Lock() + r := cc.resolverWrapper + cc.mu.Unlock() + if r == nil { + return + } + go r.resolveNow(o) } // Close tears down the ClientConn and all underlying connections. func (cc *ClientConn) Close() error { - cc.cancel() + defer cc.cancel() cc.mu.Lock() if cc.conns == nil { @@ -743,11 +943,21 @@ func (cc *ClientConn) Close() error { } conns := cc.conns cc.conns = nil + cc.csMgr.updateState(connectivity.Shutdown) + + rWrapper := cc.resolverWrapper + cc.resolverWrapper = nil + bWrapper := cc.balancerWrapper + cc.balancerWrapper = nil cc.mu.Unlock() - if cc.dopts.balancer != nil { - cc.dopts.balancer.Close() + cc.blockingpicker.close() + if rWrapper != nil { + rWrapper.close() } - for _, ac := range conns { + if bWrapper != nil { + bWrapper.close() + } + for ac := range conns { ac.tearDown(ErrClientConnClosing) } return nil @@ -759,14 +969,15 @@ type addrConn struct { cancel context.CancelFunc cc *ClientConn - addr Address + addrs []resolver.Address dopts dialOptions events trace.EventLog + acbw balancer.SubConn - mu sync.Mutex - state ConnectivityState - stateCV *sync.Cond - down func(error) // the handler called when a connection is down. + mu sync.Mutex + curAddr resolver.Address + reconnectIdx int // The index in addrs list to start reconnecting from. + state connectivity.State // ready is closed and becomes nil when a new transport is up or failed // due to timeout. ready chan struct{} @@ -774,13 +985,21 @@ type addrConn struct { // The reason this addrConn is torn down. tearDownErr error + + connectRetryNum int + // backoffDeadline is the time until which resetTransport needs to + // wait before increasing connectRetryNum count. + backoffDeadline time.Time + // connectDeadline is the time by which all connection + // negotiations must complete. + connectDeadline time.Time } // adjustParams updates parameters used to create transports upon // receiving a GoAway. func (ac *addrConn) adjustParams(r transport.GoAwayReason) { switch r { - case transport.TooManyPings: + case transport.GoAwayTooManyPings: v := 2 * ac.dopts.copts.KeepaliveParams.Time ac.cc.mu.Lock() if v > ac.cc.mkp.Time { @@ -806,205 +1025,262 @@ func (ac *addrConn) errorf(format string, a ...interface{}) { } } -// getState returns the connectivity state of the Conn -func (ac *addrConn) getState() ConnectivityState { - ac.mu.Lock() - defer ac.mu.Unlock() - return ac.state -} - -// waitForStateChange blocks until the state changes to something other than the sourceState. -func (ac *addrConn) waitForStateChange(ctx context.Context, sourceState ConnectivityState) (ConnectivityState, error) { +// resetTransport recreates a transport to the address for ac. The old +// transport will close itself on error or when the clientconn is closed. +// The created transport must receive initial settings frame from the server. +// In case that doesnt happen, transportMonitor will kill the newly created +// transport after connectDeadline has expired. +// In case there was an error on the transport before the settings frame was +// received, resetTransport resumes connecting to backends after the one that +// was previously connected to. In case end of the list is reached, resetTransport +// backs off until the original deadline. +// If the DialOption WithWaitForHandshake was set, resetTrasport returns +// successfully only after server settings are received. +// +// TODO(bar) make sure all state transitions are valid. +func (ac *addrConn) resetTransport() error { ac.mu.Lock() - defer ac.mu.Unlock() - if sourceState != ac.state { - return ac.state, nil + if ac.state == connectivity.Shutdown { + ac.mu.Unlock() + return errConnClosing } - done := make(chan struct{}) - var err error - go func() { - select { - case <-ctx.Done(): - ac.mu.Lock() - err = ctx.Err() - ac.stateCV.Broadcast() - ac.mu.Unlock() - case <-done: - } - }() - defer close(done) - for sourceState == ac.state { - ac.stateCV.Wait() - if err != nil { - return ac.state, err - } + if ac.ready != nil { + close(ac.ready) + ac.ready = nil } - return ac.state, nil -} - -func (ac *addrConn) resetTransport(closeTransport bool) error { - for retries := 0; ; retries++ { + ac.transport = nil + ridx := ac.reconnectIdx + ac.mu.Unlock() + ac.cc.mu.RLock() + ac.dopts.copts.KeepaliveParams = ac.cc.mkp + ac.cc.mu.RUnlock() + var backoffDeadline, connectDeadline time.Time + for connectRetryNum := 0; ; connectRetryNum++ { ac.mu.Lock() - ac.printf("connecting") - if ac.state == Shutdown { - // ac.tearDown(...) has been invoked. + if ac.backoffDeadline.IsZero() { + // This means either a successful HTTP2 connection was established + // or this is the first time this addrConn is trying to establish a + // connection. + backoffFor := ac.dopts.bs.backoff(connectRetryNum) // time.Duration. + // This will be the duration that dial gets to finish. + dialDuration := getMinConnectTimeout() + if backoffFor > dialDuration { + // Give dial more time as we keep failing to connect. + dialDuration = backoffFor + } + start := time.Now() + backoffDeadline = start.Add(backoffFor) + connectDeadline = start.Add(dialDuration) + ridx = 0 // Start connecting from the beginning. + } else { + // Continue trying to conect with the same deadlines. + connectRetryNum = ac.connectRetryNum + backoffDeadline = ac.backoffDeadline + connectDeadline = ac.connectDeadline + ac.backoffDeadline = time.Time{} + ac.connectDeadline = time.Time{} + ac.connectRetryNum = 0 + } + if ac.state == connectivity.Shutdown { ac.mu.Unlock() return errConnClosing } - if ac.down != nil { - ac.down(downErrorf(false, true, "%v", errNetworkIO)) - ac.down = nil + ac.printf("connecting") + if ac.state != connectivity.Connecting { + ac.state = connectivity.Connecting + ac.cc.handleSubConnStateChange(ac.acbw, ac.state) } - ac.state = Connecting - ac.stateCV.Broadcast() - t := ac.transport + // copy ac.addrs in case of race + addrsIter := make([]resolver.Address, len(ac.addrs)) + copy(addrsIter, ac.addrs) + copts := ac.dopts.copts ac.mu.Unlock() - if closeTransport && t != nil { - t.Close() + connected, err := ac.createTransport(connectRetryNum, ridx, backoffDeadline, connectDeadline, addrsIter, copts) + if err != nil { + return err } - sleepTime := ac.dopts.bs.backoff(retries) - timeout := minConnectTimeout - if timeout < sleepTime { - timeout = sleepTime + if connected { + return nil } - ctx, cancel := context.WithTimeout(ac.ctx, timeout) - connectTime := time.Now() - sinfo := transport.TargetInfo{ - Addr: ac.addr.Addr, - Metadata: ac.addr.Metadata, + } +} + +// createTransport creates a connection to one of the backends in addrs. +// It returns true if a connection was established. +func (ac *addrConn) createTransport(connectRetryNum, ridx int, backoffDeadline, connectDeadline time.Time, addrs []resolver.Address, copts transport.ConnectOptions) (bool, error) { + for i := ridx; i < len(addrs); i++ { + addr := addrs[i] + target := transport.TargetInfo{ + Addr: addr.Addr, + Metadata: addr.Metadata, + Authority: ac.cc.authority, } - newTransport, err := transport.NewClientTransport(ctx, sinfo, ac.dopts.copts) - // Don't call cancel in success path due to a race in Go 1.6: - // https://github.com/golang/go/issues/15078. + done := make(chan struct{}) + onPrefaceReceipt := func() { + ac.mu.Lock() + close(done) + if !ac.backoffDeadline.IsZero() { + // If we haven't already started reconnecting to + // other backends. + // Note, this can happen when writer notices an error + // and triggers resetTransport while at the same time + // reader receives the preface and invokes this closure. + ac.backoffDeadline = time.Time{} + ac.connectDeadline = time.Time{} + ac.connectRetryNum = 0 + } + ac.mu.Unlock() + } + // Do not cancel in the success path because of + // this issue in Go1.6: https://github.com/golang/go/issues/15078. + connectCtx, cancel := context.WithDeadline(ac.ctx, connectDeadline) + newTr, err := transport.NewClientTransport(connectCtx, ac.cc.ctx, target, copts, onPrefaceReceipt) if err != nil { cancel() - - if e, ok := err.(transport.ConnectionError); ok && !e.Temporary() { - return err - } - grpclog.Printf("grpc: addrConn.resetTransport failed to create client transport: %v; Reconnecting to %v", err, ac.addr) + ac.cc.blockingpicker.updateConnectionError(err) ac.mu.Lock() - if ac.state == Shutdown { + if ac.state == connectivity.Shutdown { // ac.tearDown(...) has been invoked. ac.mu.Unlock() - return errConnClosing - } - ac.errorf("transient failure: %v", err) - ac.state = TransientFailure - ac.stateCV.Broadcast() - if ac.ready != nil { - close(ac.ready) - ac.ready = nil + return false, errConnClosing } ac.mu.Unlock() - closeTransport = false - timer := time.NewTimer(sleepTime - time.Since(connectTime)) + grpclog.Warningf("grpc: addrConn.createTransport failed to connect to %v. Err :%v. Reconnecting...", addr, err) + continue + } + if ac.dopts.waitForHandshake { select { - case <-timer.C: + case <-done: + case <-connectCtx.Done(): + // Didn't receive server preface, must kill this new transport now. + grpclog.Warningf("grpc: addrConn.createTransport failed to receive server preface before deadline.") + newTr.Close() + break case <-ac.ctx.Done(): - timer.Stop() - return ac.ctx.Err() } - timer.Stop() - continue } ac.mu.Lock() - ac.printf("ready") - if ac.state == Shutdown { - // ac.tearDown(...) has been invoked. + if ac.state == connectivity.Shutdown { ac.mu.Unlock() - newTransport.Close() - return errConnClosing + // ac.tearDonn(...) has been invoked. + newTr.Close() + return false, errConnClosing } - ac.state = Ready - ac.stateCV.Broadcast() - ac.transport = newTransport + ac.printf("ready") + ac.state = connectivity.Ready + ac.cc.handleSubConnStateChange(ac.acbw, ac.state) + ac.transport = newTr + ac.curAddr = addr if ac.ready != nil { close(ac.ready) ac.ready = nil } - if ac.cc.dopts.balancer != nil { - ac.down = ac.cc.dopts.balancer.Up(ac.addr) + select { + case <-done: + // If the server has responded back with preface already, + // don't set the reconnect parameters. + default: + ac.connectRetryNum = connectRetryNum + ac.backoffDeadline = backoffDeadline + ac.connectDeadline = connectDeadline + ac.reconnectIdx = i + 1 // Start reconnecting from the next backend in the list. } ac.mu.Unlock() - return nil + return true, nil + } + ac.mu.Lock() + ac.state = connectivity.TransientFailure + ac.cc.handleSubConnStateChange(ac.acbw, ac.state) + ac.cc.resolveNow(resolver.ResolveNowOption{}) + if ac.ready != nil { + close(ac.ready) + ac.ready = nil } + ac.mu.Unlock() + timer := time.NewTimer(backoffDeadline.Sub(time.Now())) + select { + case <-timer.C: + case <-ac.ctx.Done(): + timer.Stop() + return false, ac.ctx.Err() + } + return false, nil } // Run in a goroutine to track the error in transport and create the // new transport if an error happens. It returns when the channel is closing. func (ac *addrConn) transportMonitor() { for { + var timer *time.Timer + var cdeadline <-chan time.Time ac.mu.Lock() t := ac.transport + if !ac.connectDeadline.IsZero() { + timer = time.NewTimer(ac.connectDeadline.Sub(time.Now())) + cdeadline = timer.C + } ac.mu.Unlock() + // Block until we receive a goaway or an error occurs. select { - // This is needed to detect the teardown when - // the addrConn is idle (i.e., no RPC in flight). - case <-ac.ctx.Done(): - select { - case <-t.Error(): - t.Close() - default: - } - return case <-t.GoAway(): - ac.adjustParams(t.GetGoAwayReason()) - // If GoAway happens without any network I/O error, ac is closed without shutting down the - // underlying transport (the transport will be closed when all the pending RPCs finished or - // failed.). - // If GoAway and some network I/O error happen concurrently, ac and its underlying transport - // are closed. - // In both cases, a new ac is created. - select { - case <-t.Error(): - ac.cc.resetAddrConn(ac.addr, false, errNetworkIO) - default: - ac.cc.resetAddrConn(ac.addr, false, errConnDrain) - } - return case <-t.Error(): - select { - case <-ac.ctx.Done(): - t.Close() - return - case <-t.GoAway(): - ac.adjustParams(t.GetGoAwayReason()) - ac.cc.resetAddrConn(ac.addr, false, errNetworkIO) - return - default: - } + case <-cdeadline: ac.mu.Lock() - if ac.state == Shutdown { - // ac has been shutdown. + // This implies that client received server preface. + if ac.backoffDeadline.IsZero() { ac.mu.Unlock() - return + continue } - ac.state = TransientFailure - ac.stateCV.Broadcast() ac.mu.Unlock() - if err := ac.resetTransport(true); err != nil { - ac.mu.Lock() - ac.printf("transport exiting: %v", err) - ac.mu.Unlock() - grpclog.Printf("grpc: addrConn.transportMonitor exits due to: %v", err) - if err != errConnClosing { - // Keep this ac in cc.conns, to get the reason it's torn down. - ac.tearDown(err) - } - return + timer = nil + // No server preface received until deadline. + // Kill the connection. + grpclog.Warningf("grpc: addrConn.transportMonitor didn't get server preface after waiting. Closing the new transport now.") + t.Close() + } + if timer != nil { + timer.Stop() + } + // If a GoAway happened, regardless of error, adjust our keepalive + // parameters as appropriate. + select { + case <-t.GoAway(): + ac.adjustParams(t.GetGoAwayReason()) + default: + } + ac.mu.Lock() + if ac.state == connectivity.Shutdown { + ac.mu.Unlock() + return + } + // Set connectivity state to TransientFailure before calling + // resetTransport. Transition READY->CONNECTING is not valid. + ac.state = connectivity.TransientFailure + ac.cc.handleSubConnStateChange(ac.acbw, ac.state) + ac.cc.resolveNow(resolver.ResolveNowOption{}) + ac.curAddr = resolver.Address{} + ac.mu.Unlock() + if err := ac.resetTransport(); err != nil { + ac.mu.Lock() + ac.printf("transport exiting: %v", err) + ac.mu.Unlock() + grpclog.Warningf("grpc: addrConn.transportMonitor exits due to: %v", err) + if err != errConnClosing { + // Keep this ac in cc.conns, to get the reason it's torn down. + ac.tearDown(err) } + return } } } // wait blocks until i) the new transport is up or ii) ctx is done or iii) ac is closed or -// iv) transport is in TransientFailure and there is a balancer/failfast is true. +// iv) transport is in connectivity.TransientFailure and there is a balancer/failfast is true. func (ac *addrConn) wait(ctx context.Context, hasBalancer, failfast bool) (transport.ClientTransport, error) { for { ac.mu.Lock() switch { - case ac.state == Shutdown: + case ac.state == connectivity.Shutdown: if failfast || !hasBalancer { // RPC is failfast or balancer is nil. This RPC should fail with ac.tearDownErr. err := ac.tearDownErr @@ -1013,11 +1289,11 @@ func (ac *addrConn) wait(ctx context.Context, hasBalancer, failfast bool) (trans } ac.mu.Unlock() return nil, errConnClosing - case ac.state == Ready: + case ac.state == connectivity.Ready: ct := ac.transport ac.mu.Unlock() return ct, nil - case ac.state == TransientFailure: + case ac.state == connectivity.TransientFailure: if failfast || hasBalancer { ac.mu.Unlock() return nil, errConnUnavailable @@ -1038,6 +1314,28 @@ func (ac *addrConn) wait(ctx context.Context, hasBalancer, failfast bool) (trans } } +// getReadyTransport returns the transport if ac's state is READY. +// Otherwise it returns nil, false. +// If ac's state is IDLE, it will trigger ac to connect. +func (ac *addrConn) getReadyTransport() (transport.ClientTransport, bool) { + ac.mu.Lock() + if ac.state == connectivity.Ready { + t := ac.transport + ac.mu.Unlock() + return t, true + } + var idle bool + if ac.state == connectivity.Idle { + idle = true + } + ac.mu.Unlock() + // Trigger idle ac to connect. + if idle { + ac.connect() + } + return nil, false +} + // tearDown starts to tear down the addrConn. // TODO(zhaoq): Make this synchronous to avoid unbounded memory consumption in // some edge cases (e.g., the caller opens and closes many addrConn's in a @@ -1045,13 +1343,12 @@ func (ac *addrConn) wait(ctx context.Context, hasBalancer, failfast bool) (trans // tearDown doesn't remove ac from ac.cc.conns. func (ac *addrConn) tearDown(err error) { ac.cancel() - ac.mu.Lock() defer ac.mu.Unlock() - if ac.down != nil { - ac.down(downErrorf(false, false, "%v", err)) - ac.down = nil + if ac.state == connectivity.Shutdown { + return } + ac.curAddr = resolver.Address{} if err == errConnDrain && ac.transport != nil { // GracefulClose(...) may be executed multiple times when // i) receiving multiple GoAway frames from the server; or @@ -1059,12 +1356,9 @@ func (ac *addrConn) tearDown(err error) { // address removal and GoAway. ac.transport.GracefulClose() } - if ac.state == Shutdown { - return - } - ac.state = Shutdown + ac.state = connectivity.Shutdown ac.tearDownErr = err - ac.stateCV.Broadcast() + ac.cc.handleSubConnStateChange(ac.acbw, ac.state) if ac.events != nil { ac.events.Finish() ac.events = nil @@ -1073,8 +1367,18 @@ func (ac *addrConn) tearDown(err error) { close(ac.ready) ac.ready = nil } - if ac.transport != nil && err != errConnDrain { - ac.transport.Close() - } return } + +func (ac *addrConn) getState() connectivity.State { + ac.mu.Lock() + defer ac.mu.Unlock() + return ac.state +} + +// ErrClientConnTimeout indicates that the ClientConn cannot establish the +// underlying connections within the specified timeout. +// +// Deprecated: This error is never returned by grpc and should not be +// referenced by users. +var ErrClientConnTimeout = errors.New("grpc: timed out when dialing") diff --git a/vendor/google.golang.org/grpc/clientconn_test.go b/vendor/google.golang.org/grpc/clientconn_test.go index fdb261a..c69cfbe 100644 --- a/vendor/google.golang.org/grpc/clientconn_test.go +++ b/vendor/google.golang.org/grpc/clientconn_test.go @@ -1,53 +1,341 @@ /* * - * Copyright 2014, Google Inc. - * All rights reserved. + * Copyright 2014 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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 grpc import ( + "math" "net" + "sync/atomic" "testing" "time" "golang.org/x/net/context" + "golang.org/x/net/http2" + "google.golang.org/grpc/connectivity" "google.golang.org/grpc/credentials" "google.golang.org/grpc/keepalive" + "google.golang.org/grpc/naming" + "google.golang.org/grpc/resolver" + "google.golang.org/grpc/resolver/manual" + _ "google.golang.org/grpc/resolver/passthrough" + "google.golang.org/grpc/test/leakcheck" + "google.golang.org/grpc/testdata" ) -const tlsDir = "testdata/" +var ( + mutableMinConnectTimeout = time.Second * 20 +) + +func init() { + getMinConnectTimeout = func() time.Duration { + return time.Duration(atomic.LoadInt64((*int64)(&mutableMinConnectTimeout))) + } +} + +func assertState(wantState connectivity.State, cc *ClientConn) (connectivity.State, bool) { + ctx, cancel := context.WithTimeout(context.Background(), time.Second) + defer cancel() + var state connectivity.State + for state = cc.GetState(); state != wantState && cc.WaitForStateChange(ctx, state); state = cc.GetState() { + } + return state, state == wantState +} + +func TestDialWithMultipleBackendsNotSendingServerPreface(t *testing.T) { + defer leakcheck.Check(t) + numServers := 2 + servers := make([]net.Listener, numServers) + var err error + for i := 0; i < numServers; i++ { + servers[i], err = net.Listen("tcp", "localhost:0") + if err != nil { + t.Fatalf("Error while listening. Err: %v", err) + } + } + dones := make([]chan struct{}, numServers) + for i := 0; i < numServers; i++ { + dones[i] = make(chan struct{}) + } + for i := 0; i < numServers; i++ { + go func(i int) { + defer func() { + close(dones[i]) + }() + conn, err := servers[i].Accept() + if err != nil { + t.Errorf("Error while accepting. Err: %v", err) + return + } + defer conn.Close() + switch i { + case 0: // 1st server accepts the connection and immediately closes it. + case 1: // 2nd server accepts the connection and sends settings frames. + framer := http2.NewFramer(conn, conn) + if err := framer.WriteSettings(http2.Setting{}); err != nil { + t.Errorf("Error while writing settings frame. %v", err) + return + } + conn.SetDeadline(time.Now().Add(time.Second)) + buf := make([]byte, 1024) + for { // Make sure the connection stays healthy. + _, err = conn.Read(buf) + if err == nil { + continue + } + if nerr, ok := err.(net.Error); !ok || !nerr.Timeout() { + t.Errorf("Server expected the conn.Read(_) to timeout instead got error: %v", err) + } + return + } + } + }(i) + } + r, cleanup := manual.GenerateAndRegisterManualResolver() + defer cleanup() + resolvedAddrs := make([]resolver.Address, numServers) + for i := 0; i < numServers; i++ { + resolvedAddrs[i] = resolver.Address{Addr: servers[i].Addr().String()} + } + r.InitialAddrs(resolvedAddrs) + client, err := Dial(r.Scheme()+":///test.server", WithInsecure()) + if err != nil { + t.Errorf("Dial failed. Err: %v", err) + } else { + defer client.Close() + } + time.Sleep(time.Second) // Close the servers after a second for cleanup. + for _, s := range servers { + s.Close() + } + for _, done := range dones { + <-done + } +} + +func TestDialWaitsForServerSettings(t *testing.T) { + defer leakcheck.Check(t) + server, err := net.Listen("tcp", "localhost:0") + if err != nil { + t.Fatalf("Error while listening. Err: %v", err) + } + defer server.Close() + done := make(chan struct{}) + sent := make(chan struct{}) + dialDone := make(chan struct{}) + go func() { // Launch the server. + defer func() { + close(done) + }() + conn, err := server.Accept() + if err != nil { + t.Errorf("Error while accepting. Err: %v", err) + return + } + defer conn.Close() + // Sleep for a little bit to make sure that Dial on client + // side blocks until settings are received. + time.Sleep(500 * time.Millisecond) + framer := http2.NewFramer(conn, conn) + close(sent) + if err := framer.WriteSettings(http2.Setting{}); err != nil { + t.Errorf("Error while writing settings. Err: %v", err) + return + } + <-dialDone // Close conn only after dial returns. + }() + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + client, err := DialContext(ctx, server.Addr().String(), WithInsecure(), WithWaitForHandshake(), WithBlock()) + close(dialDone) + if err != nil { + cancel() + t.Fatalf("Error while dialing. Err: %v", err) + } + defer client.Close() + select { + case <-sent: + default: + t.Fatalf("Dial returned before server settings were sent") + } + <-done + +} + +func TestCloseConnectionWhenServerPrefaceNotReceived(t *testing.T) { + mctBkp := getMinConnectTimeout() + // Call this only after transportMonitor goroutine has ended. + defer func() { + atomic.StoreInt64((*int64)(&mutableMinConnectTimeout), int64(mctBkp)) + + }() + defer leakcheck.Check(t) + atomic.StoreInt64((*int64)(&mutableMinConnectTimeout), int64(time.Millisecond)*500) + lis, err := net.Listen("tcp", "localhost:0") + if err != nil { + t.Fatalf("Error while listening. Err: %v", err) + } + var ( + conn2 net.Conn + over uint32 + ) + defer func() { + lis.Close() + // conn2 shouldn't be closed until the client has + // observed a successful test. + if conn2 != nil { + conn2.Close() + } + }() + done := make(chan struct{}) + go func() { // Launch the server. + defer close(done) + conn1, err := lis.Accept() + if err != nil { + t.Errorf("Error while accepting. Err: %v", err) + return + } + defer conn1.Close() + // Don't send server settings and the client should close the connection and try again. + conn2, err = lis.Accept() // Accept a reconnection request from client. + if err != nil { + t.Errorf("Error while accepting. Err: %v", err) + return + } + framer := http2.NewFramer(conn2, conn2) + if err = framer.WriteSettings(http2.Setting{}); err != nil { + t.Errorf("Error while writing settings. Err: %v", err) + return + } + b := make([]byte, 8) + for { + _, err = conn2.Read(b) + if err == nil { + continue + } + if atomic.LoadUint32(&over) == 1 { + // The connection stayed alive for the timer. + // Success. + return + } + t.Errorf("Unexpected error while reading. Err: %v, want timeout error", err) + break + } + }() + client, err := Dial(lis.Addr().String(), WithInsecure()) + if err != nil { + t.Fatalf("Error while dialing. Err: %v", err) + } + time.Sleep(time.Second * 2) // Let things play out. + atomic.StoreUint32(&over, 1) + lis.Close() + client.Close() + <-done +} + +func TestBackoffWhenNoServerPrefaceReceived(t *testing.T) { + defer leakcheck.Check(t) + server, err := net.Listen("tcp", "localhost:0") + if err != nil { + t.Fatalf("Error while listening. Err: %v", err) + } + defer server.Close() + done := make(chan struct{}) + go func() { // Launch the server. + defer func() { + close(done) + }() + conn, err := server.Accept() // Accept the connection only to close it immediately. + if err != nil { + t.Errorf("Error while accepting. Err: %v", err) + return + } + prevAt := time.Now() + conn.Close() + var prevDuration time.Duration + // Make sure the retry attempts are backed off properly. + for i := 0; i < 3; i++ { + conn, err := server.Accept() + if err != nil { + t.Errorf("Error while accepting. Err: %v", err) + return + } + meow := time.Now() + conn.Close() + dr := meow.Sub(prevAt) + if dr <= prevDuration { + t.Errorf("Client backoff did not increase with retries. Previous duration: %v, current duration: %v", prevDuration, dr) + return + } + prevDuration = dr + prevAt = meow + } + }() + client, err := Dial(server.Addr().String(), WithInsecure()) + if err != nil { + t.Fatalf("Error while dialing. Err: %v", err) + } + defer client.Close() + <-done + +} + +func TestConnectivityStates(t *testing.T) { + defer leakcheck.Check(t) + servers, resolver, cleanup := startServers(t, 2, math.MaxUint32) + defer cleanup() + cc, err := Dial("passthrough:///foo.bar.com", WithBalancer(RoundRobin(resolver)), WithInsecure()) + if err != nil { + t.Fatalf("Dial(\"foo.bar.com\", WithBalancer(_)) = _, %v, want _ ", err) + } + defer cc.Close() + wantState := connectivity.Ready + if state, ok := assertState(wantState, cc); !ok { + t.Fatalf("asserState(%s) = %s, false, want %s, true", wantState, state, wantState) + } + // Send an update to delete the server connection (tearDown addrConn). + update := []*naming.Update{ + { + Op: naming.Delete, + Addr: "localhost:" + servers[0].port, + }, + } + resolver.w.inject(update) + wantState = connectivity.TransientFailure + if state, ok := assertState(wantState, cc); !ok { + t.Fatalf("asserState(%s) = %s, false, want %s, true", wantState, state, wantState) + } + update[0] = &naming.Update{ + Op: naming.Add, + Addr: "localhost:" + servers[1].port, + } + resolver.w.inject(update) + wantState = connectivity.Ready + if state, ok := assertState(wantState, cc); !ok { + t.Fatalf("asserState(%s) = %s, false, want %s, true", wantState, state, wantState) + } + +} func TestDialTimeout(t *testing.T) { - conn, err := Dial("Non-Existent.Server:80", WithTimeout(time.Millisecond), WithBlock(), WithInsecure()) + defer leakcheck.Check(t) + conn, err := Dial("passthrough:///Non-Existent.Server:80", WithTimeout(time.Millisecond), WithBlock(), WithInsecure()) if err == nil { conn.Close() } @@ -57,11 +345,12 @@ func TestDialTimeout(t *testing.T) { } func TestTLSDialTimeout(t *testing.T) { - creds, err := credentials.NewClientTLSFromFile(tlsDir+"ca.pem", "x.test.youtube.com") + defer leakcheck.Check(t) + creds, err := credentials.NewClientTLSFromFile(testdata.Path("ca.pem"), "x.test.youtube.com") if err != nil { t.Fatalf("Failed to create credentials %v", err) } - conn, err := Dial("Non-Existent.Server:80", WithTransportCredentials(creds), WithTimeout(time.Millisecond), WithBlock()) + conn, err := Dial("passthrough:///Non-Existent.Server:80", WithTransportCredentials(creds), WithTimeout(time.Millisecond), WithBlock()) if err == nil { conn.Close() } @@ -71,62 +360,67 @@ func TestTLSDialTimeout(t *testing.T) { } func TestDefaultAuthority(t *testing.T) { + defer leakcheck.Check(t) target := "Non-Existent.Server:8080" conn, err := Dial(target, WithInsecure()) if err != nil { t.Fatalf("Dial(_, _) = _, %v, want _, ", err) } - conn.Close() + defer conn.Close() if conn.authority != target { t.Fatalf("%v.authority = %v, want %v", conn, conn.authority, target) } } func TestTLSServerNameOverwrite(t *testing.T) { + defer leakcheck.Check(t) overwriteServerName := "over.write.server.name" - creds, err := credentials.NewClientTLSFromFile(tlsDir+"ca.pem", overwriteServerName) + creds, err := credentials.NewClientTLSFromFile(testdata.Path("ca.pem"), overwriteServerName) if err != nil { t.Fatalf("Failed to create credentials %v", err) } - conn, err := Dial("Non-Existent.Server:80", WithTransportCredentials(creds)) + conn, err := Dial("passthrough:///Non-Existent.Server:80", WithTransportCredentials(creds)) if err != nil { t.Fatalf("Dial(_, _) = _, %v, want _, ", err) } - conn.Close() + defer conn.Close() if conn.authority != overwriteServerName { t.Fatalf("%v.authority = %v, want %v", conn, conn.authority, overwriteServerName) } } func TestWithAuthority(t *testing.T) { + defer leakcheck.Check(t) overwriteServerName := "over.write.server.name" - conn, err := Dial("Non-Existent.Server:80", WithInsecure(), WithAuthority(overwriteServerName)) + conn, err := Dial("passthrough:///Non-Existent.Server:80", WithInsecure(), WithAuthority(overwriteServerName)) if err != nil { t.Fatalf("Dial(_, _) = _, %v, want _, ", err) } - conn.Close() + defer conn.Close() if conn.authority != overwriteServerName { t.Fatalf("%v.authority = %v, want %v", conn, conn.authority, overwriteServerName) } } func TestWithAuthorityAndTLS(t *testing.T) { + defer leakcheck.Check(t) overwriteServerName := "over.write.server.name" - creds, err := credentials.NewClientTLSFromFile(tlsDir+"ca.pem", overwriteServerName) + creds, err := credentials.NewClientTLSFromFile(testdata.Path("ca.pem"), overwriteServerName) if err != nil { t.Fatalf("Failed to create credentials %v", err) } - conn, err := Dial("Non-Existent.Server:80", WithTransportCredentials(creds), WithAuthority("no.effect.authority")) + conn, err := Dial("passthrough:///Non-Existent.Server:80", WithTransportCredentials(creds), WithAuthority("no.effect.authority")) if err != nil { t.Fatalf("Dial(_, _) = _, %v, want _, ", err) } - conn.Close() + defer conn.Close() if conn.authority != overwriteServerName { t.Fatalf("%v.authority = %v, want %v", conn, conn.authority, overwriteServerName) } } func TestDialContextCancel(t *testing.T) { + defer leakcheck.Check(t) ctx, cancel := context.WithCancel(context.Background()) cancel() if _, err := DialContext(ctx, "Non-Existent.Server:80", WithBlock(), WithInsecure()); err != context.Canceled { @@ -161,6 +455,7 @@ func (b *blockingBalancer) Close() error { } func TestDialWithBlockingBalancer(t *testing.T) { + defer leakcheck.Check(t) ctx, cancel := context.WithCancel(context.Background()) dialDone := make(chan struct{}) go func() { @@ -183,25 +478,28 @@ func (c securePerRPCCredentials) RequireTransportSecurity() bool { } func TestCredentialsMisuse(t *testing.T) { - tlsCreds, err := credentials.NewClientTLSFromFile(tlsDir+"ca.pem", "x.test.youtube.com") + defer leakcheck.Check(t) + tlsCreds, err := credentials.NewClientTLSFromFile(testdata.Path("ca.pem"), "x.test.youtube.com") if err != nil { t.Fatalf("Failed to create authenticator %v", err) } // Two conflicting credential configurations - if _, err := Dial("Non-Existent.Server:80", WithTransportCredentials(tlsCreds), WithBlock(), WithInsecure()); err != errCredentialsConflict { + if _, err := Dial("passthrough:///Non-Existent.Server:80", WithTransportCredentials(tlsCreds), WithBlock(), WithInsecure()); err != errCredentialsConflict { t.Fatalf("Dial(_, _) = _, %v, want _, %v", err, errCredentialsConflict) } // security info on insecure connection - if _, err := Dial("Non-Existent.Server:80", WithPerRPCCredentials(securePerRPCCredentials{}), WithBlock(), WithInsecure()); err != errTransportCredentialsMissing { + if _, err := Dial("passthrough:///Non-Existent.Server:80", WithPerRPCCredentials(securePerRPCCredentials{}), WithBlock(), WithInsecure()); err != errTransportCredentialsMissing { t.Fatalf("Dial(_, _) = _, %v, want _, %v", err, errTransportCredentialsMissing) } } func TestWithBackoffConfigDefault(t *testing.T) { + defer leakcheck.Check(t) testBackoffConfigSet(t, &DefaultBackoffConfig) } func TestWithBackoffConfig(t *testing.T) { + defer leakcheck.Check(t) b := BackoffConfig{MaxDelay: DefaultBackoffConfig.MaxDelay / 2} expected := b setDefaults(&expected) // defaults should be set @@ -209,6 +507,7 @@ func TestWithBackoffConfig(t *testing.T) { } func TestWithBackoffMaxDelay(t *testing.T) { + defer leakcheck.Check(t) md := DefaultBackoffConfig.MaxDelay / 2 expected := BackoffConfig{MaxDelay: md} setDefaults(&expected) @@ -217,10 +516,11 @@ func TestWithBackoffMaxDelay(t *testing.T) { func testBackoffConfigSet(t *testing.T, expected *BackoffConfig, opts ...DialOption) { opts = append(opts, WithInsecure()) - conn, err := Dial("foo:80", opts...) + conn, err := Dial("passthrough:///foo:80", opts...) if err != nil { t.Fatalf("unexpected error dialing connection: %v", err) } + defer conn.Close() if conn.dopts.bs == nil { t.Fatalf("backoff config not set") @@ -234,37 +534,6 @@ func testBackoffConfigSet(t *testing.T, expected *BackoffConfig, opts ...DialOpt if actual != *expected { t.Fatalf("unexpected backoff config on connection: %v, want %v", actual, expected) } - conn.Close() -} - -type testErr struct { - temp bool -} - -func (e *testErr) Error() string { - return "test error" -} - -func (e *testErr) Temporary() bool { - return e.temp -} - -var nonTemporaryError = &testErr{false} - -func nonTemporaryErrorDialer(addr string, timeout time.Duration) (net.Conn, error) { - return nil, nonTemporaryError -} - -func TestDialWithBlockErrorOnNonTemporaryErrorDialer(t *testing.T) { - ctx, _ := context.WithTimeout(context.Background(), 100*time.Millisecond) - if _, err := DialContext(ctx, "", WithInsecure(), WithDialer(nonTemporaryErrorDialer), WithBlock(), FailOnNonTempDialError(true)); err != nonTemporaryError { - t.Fatalf("Dial(%q) = %v, want %v", "", err, nonTemporaryError) - } - - // Without FailOnNonTempDialError, gRPC will retry to connect, and dial should exit with time out error. - if _, err := DialContext(ctx, "", WithInsecure(), WithDialer(nonTemporaryErrorDialer), WithBlock()); err != context.DeadlineExceeded { - t.Fatalf("Dial(%q) = %v, want %v", "", err, context.DeadlineExceeded) - } } // emptyBalancer returns an empty set of servers. @@ -294,6 +563,7 @@ func (b *emptyBalancer) Close() error { } func TestNonblockingDialWithEmptyBalancer(t *testing.T) { + defer leakcheck.Check(t) ctx, cancel := context.WithCancel(context.Background()) defer cancel() dialDone := make(chan error) @@ -311,7 +581,43 @@ func TestNonblockingDialWithEmptyBalancer(t *testing.T) { } } +func TestResolverServiceConfigBeforeAddressNotPanic(t *testing.T) { + defer leakcheck.Check(t) + r, rcleanup := manual.GenerateAndRegisterManualResolver() + defer rcleanup() + + cc, err := Dial(r.Scheme()+":///test.server", WithInsecure()) + if err != nil { + t.Fatalf("failed to dial: %v", err) + } + defer cc.Close() + + // SwitchBalancer before NewAddress. There was no balancer created, this + // makes sure we don't call close on nil balancerWrapper. + r.NewServiceConfig(`{"loadBalancingPolicy": "round_robin"}`) // This should not panic. + + time.Sleep(time.Second) // Sleep to make sure the service config is handled by ClientConn. +} + +func TestResolverEmptyUpdateNotPanic(t *testing.T) { + defer leakcheck.Check(t) + r, rcleanup := manual.GenerateAndRegisterManualResolver() + defer rcleanup() + + cc, err := Dial(r.Scheme()+":///test.server", WithInsecure()) + if err != nil { + t.Fatalf("failed to dial: %v", err) + } + defer cc.Close() + + // This make sure we don't create addrConn with empty address list. + r.NewAddress([]resolver.Address{}) // This should not panic. + + time.Sleep(time.Second) // Sleep to make sure the service config is handled by ClientConn. +} + func TestClientUpdatesParamsAfterGoAway(t *testing.T) { + defer leakcheck.Check(t) lis, err := net.Listen("tcp", "localhost:0") if err != nil { t.Fatalf("Failed to listen. Err: %v", err) @@ -323,7 +629,7 @@ func TestClientUpdatesParamsAfterGoAway(t *testing.T) { defer s.Stop() cc, err := Dial(addr, WithBlock(), WithInsecure(), WithKeepaliveParams(keepalive.ClientParameters{ Time: 50 * time.Millisecond, - Timeout: 1 * time.Millisecond, + Timeout: 100 * time.Millisecond, PermitWithoutStream: true, })) if err != nil { diff --git a/vendor/google.golang.org/grpc/codec.go b/vendor/google.golang.org/grpc/codec.go index 001804d..1297765 100644 --- a/vendor/google.golang.org/grpc/codec.go +++ b/vendor/google.golang.org/grpc/codec.go @@ -1,119 +1,50 @@ /* -* - * Copyright 2014, Google Inc. - * All rights reserved. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * Copyright 2014 gRPC authors. * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * 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 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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 grpc import ( - "math" - "sync" - - "github.com/golang/protobuf/proto" + "google.golang.org/grpc/encoding" + _ "google.golang.org/grpc/encoding/proto" // to register the Codec for "proto" ) +// baseCodec contains the functionality of both Codec and encoding.Codec, but +// omits the name/string, which vary between the two and are not needed for +// anything besides the registry in the encoding package. +type baseCodec interface { + Marshal(v interface{}) ([]byte, error) + Unmarshal(data []byte, v interface{}) error +} + +var _ baseCodec = Codec(nil) +var _ baseCodec = encoding.Codec(nil) + // Codec defines the interface gRPC uses to encode and decode messages. // Note that implementations of this interface must be thread safe; // a Codec's methods can be called from concurrent goroutines. +// +// Deprecated: use encoding.Codec instead. type Codec interface { // Marshal returns the wire format of v. Marshal(v interface{}) ([]byte, error) // Unmarshal parses the wire format into v. Unmarshal(data []byte, v interface{}) error - // String returns the name of the Codec implementation. The returned - // string will be used as part of content type in transmission. + // String returns the name of the Codec implementation. This is unused by + // gRPC. String() string } - -// protoCodec is a Codec implementation with protobuf. It is the default codec for gRPC. -type protoCodec struct { -} - -type cachedProtoBuffer struct { - lastMarshaledSize uint32 - proto.Buffer -} - -func capToMaxInt32(val int) uint32 { - if val > math.MaxInt32 { - return uint32(math.MaxInt32) - } - return uint32(val) -} - -func (p protoCodec) marshal(v interface{}, cb *cachedProtoBuffer) ([]byte, error) { - protoMsg := v.(proto.Message) - newSlice := make([]byte, 0, cb.lastMarshaledSize) - - cb.SetBuf(newSlice) - cb.Reset() - if err := cb.Marshal(protoMsg); err != nil { - return nil, err - } - out := cb.Bytes() - cb.lastMarshaledSize = capToMaxInt32(len(out)) - return out, nil -} - -func (p protoCodec) Marshal(v interface{}) ([]byte, error) { - cb := protoBufferPool.Get().(*cachedProtoBuffer) - out, err := p.marshal(v, cb) - - // put back buffer and lose the ref to the slice - cb.SetBuf(nil) - protoBufferPool.Put(cb) - return out, err -} - -func (p protoCodec) Unmarshal(data []byte, v interface{}) error { - cb := protoBufferPool.Get().(*cachedProtoBuffer) - cb.SetBuf(data) - v.(proto.Message).Reset() - err := cb.Unmarshal(v.(proto.Message)) - cb.SetBuf(nil) - protoBufferPool.Put(cb) - return err -} - -func (protoCodec) String() string { - return "proto" -} - -var ( - protoBufferPool = &sync.Pool{ - New: func() interface{} { - return &cachedProtoBuffer{ - Buffer: proto.Buffer{}, - lastMarshaledSize: 16, - } - }, - } -) diff --git a/vendor/google.golang.org/grpc/codec_benchmark_test.go b/vendor/google.golang.org/grpc/codec_benchmark_test.go deleted file mode 100644 index 6726a53..0000000 --- a/vendor/google.golang.org/grpc/codec_benchmark_test.go +++ /dev/null @@ -1,115 +0,0 @@ -// +build go1.7 - -/* - * - * Copyright 2014, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -package grpc - -import ( - "fmt" - "testing" - - "github.com/golang/protobuf/proto" - "google.golang.org/grpc/test/codec_perf" -) - -func setupBenchmarkProtoCodecInputs(b *testing.B, payloadBaseSize uint32) []proto.Message { - payloadBase := make([]byte, payloadBaseSize) - // arbitrary byte slices - payloadSuffixes := [][]byte{ - []byte("one"), - []byte("two"), - []byte("three"), - []byte("four"), - []byte("five"), - } - protoStructs := make([]proto.Message, 0) - - for _, p := range payloadSuffixes { - ps := &codec_perf.Buffer{} - ps.Body = append(payloadBase, p...) - protoStructs = append(protoStructs, ps) - } - - return protoStructs -} - -// The possible use of certain protobuf APIs like the proto.Buffer API potentially involves caching -// on our side. This can add checks around memory allocations and possible contention. -// Example run: go test -v -run=^$ -bench=BenchmarkProtoCodec -benchmem -func BenchmarkProtoCodec(b *testing.B) { - // range of message sizes - payloadBaseSizes := make([]uint32, 0) - for i := uint32(0); i <= 12; i += 4 { - payloadBaseSizes = append(payloadBaseSizes, 1<= Code(len(_Code_index)) { - return fmt.Sprintf("Code(%d)", i) +func (c Code) String() string { + switch c { + case OK: + return "OK" + case Canceled: + return "Canceled" + case Unknown: + return "Unknown" + case InvalidArgument: + return "InvalidArgument" + case DeadlineExceeded: + return "DeadlineExceeded" + case NotFound: + return "NotFound" + case AlreadyExists: + return "AlreadyExists" + case PermissionDenied: + return "PermissionDenied" + case ResourceExhausted: + return "ResourceExhausted" + case FailedPrecondition: + return "FailedPrecondition" + case Aborted: + return "Aborted" + case OutOfRange: + return "OutOfRange" + case Unimplemented: + return "Unimplemented" + case Internal: + return "Internal" + case Unavailable: + return "Unavailable" + case DataLoss: + return "DataLoss" + case Unauthenticated: + return "Unauthenticated" + default: + return "Code(" + strconv.FormatInt(int64(c), 10) + ")" } - return _Code_name[_Code_index[i]:_Code_index[i+1]] } diff --git a/vendor/google.golang.org/grpc/codes/codes.go b/vendor/google.golang.org/grpc/codes/codes.go index dcae5cc..a8280ae 100644 --- a/vendor/google.golang.org/grpc/codes/codes.go +++ b/vendor/google.golang.org/grpc/codes/codes.go @@ -1,33 +1,18 @@ /* * - * Copyright 2014, Google Inc. - * All rights reserved. + * Copyright 2014 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -35,11 +20,13 @@ // consistent across various languages. package codes // import "google.golang.org/grpc/codes" +import ( + "fmt" +) + // A Code is an unsigned 32-bit error code as defined in the gRPC spec. type Code uint32 -//go:generate stringer -type=Code - const ( // OK is returned on success. OK Code = 0 @@ -47,9 +34,9 @@ const ( // Canceled indicates the operation was canceled (typically by the caller). Canceled Code = 1 - // Unknown error. An example of where this error may be returned is + // Unknown error. An example of where this error may be returned is // if a Status value received from another address space belongs to - // an error-space that is not known in this address space. Also + // an error-space that is not known in this address space. Also // errors raised by APIs that do not return enough error information // may be converted to this error. Unknown Code = 2 @@ -78,15 +65,11 @@ const ( // PermissionDenied indicates the caller does not have permission to // execute the specified operation. It must not be used for rejections // caused by exhausting some resource (use ResourceExhausted - // instead for those errors). It must not be + // instead for those errors). It must not be // used if the caller cannot be identified (use Unauthenticated // instead for those errors). PermissionDenied Code = 7 - // Unauthenticated indicates the request does not have valid - // authentication credentials for the operation. - Unauthenticated Code = 16 - // ResourceExhausted indicates some resource has been exhausted, perhaps // a per-user quota, or perhaps the entire file system is out of space. ResourceExhausted Code = 8 @@ -102,7 +85,7 @@ const ( // (b) Use Aborted if the client should retry at a higher-level // (e.g., restarting a read-modify-write sequence). // (c) Use FailedPrecondition if the client should not retry until - // the system state has been explicitly fixed. E.g., if an "rmdir" + // the system state has been explicitly fixed. E.g., if an "rmdir" // fails because the directory is non-empty, FailedPrecondition // should be returned since the client should not retry unless // they have first fixed up the directory by deleting files from it. @@ -131,7 +114,7 @@ const ( // file size. // // There is a fair bit of overlap between FailedPrecondition and - // OutOfRange. We recommend using OutOfRange (the more specific + // OutOfRange. We recommend using OutOfRange (the more specific // error) when it applies so that callers who are iterating through // a space can easily look for an OutOfRange error to detect when // they are done. @@ -141,8 +124,8 @@ const ( // supported/enabled in this service. Unimplemented Code = 12 - // Internal errors. Means some invariants expected by underlying - // system has been broken. If you see one of these errors, + // Internal errors. Means some invariants expected by underlying + // system has been broken. If you see one of these errors, // something is very broken. Internal Code = 13 @@ -156,4 +139,46 @@ const ( // DataLoss indicates unrecoverable data loss or corruption. DataLoss Code = 15 + + // Unauthenticated indicates the request does not have valid + // authentication credentials for the operation. + Unauthenticated Code = 16 ) + +var strToCode = map[string]Code{ + `"OK"`: OK, + `"CANCELLED"`:/* [sic] */ Canceled, + `"UNKNOWN"`: Unknown, + `"INVALID_ARGUMENT"`: InvalidArgument, + `"DEADLINE_EXCEEDED"`: DeadlineExceeded, + `"NOT_FOUND"`: NotFound, + `"ALREADY_EXISTS"`: AlreadyExists, + `"PERMISSION_DENIED"`: PermissionDenied, + `"RESOURCE_EXHAUSTED"`: ResourceExhausted, + `"FAILED_PRECONDITION"`: FailedPrecondition, + `"ABORTED"`: Aborted, + `"OUT_OF_RANGE"`: OutOfRange, + `"UNIMPLEMENTED"`: Unimplemented, + `"INTERNAL"`: Internal, + `"UNAVAILABLE"`: Unavailable, + `"DATA_LOSS"`: DataLoss, + `"UNAUTHENTICATED"`: Unauthenticated, +} + +// UnmarshalJSON unmarshals b into the Code. +func (c *Code) UnmarshalJSON(b []byte) error { + // From json.Unmarshaler: By convention, to approximate the behavior of + // Unmarshal itself, Unmarshalers implement UnmarshalJSON([]byte("null")) as + // a no-op. + if string(b) == "null" { + return nil + } + if c == nil { + return fmt.Errorf("nil receiver passed to UnmarshalJSON") + } + if jc, ok := strToCode[string(b)]; ok { + *c = jc + return nil + } + return fmt.Errorf("invalid code: %q", string(b)) +} diff --git a/vendor/google.golang.org/grpc/codes/codes_test.go b/vendor/google.golang.org/grpc/codes/codes_test.go new file mode 100644 index 0000000..1e3b991 --- /dev/null +++ b/vendor/google.golang.org/grpc/codes/codes_test.go @@ -0,0 +1,64 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package codes + +import ( + "encoding/json" + "reflect" + "testing" + + cpb "google.golang.org/genproto/googleapis/rpc/code" +) + +func TestUnmarshalJSON(t *testing.T) { + for s, v := range cpb.Code_value { + want := Code(v) + var got Code + if err := got.UnmarshalJSON([]byte(`"` + s + `"`)); err != nil || got != want { + t.Errorf("got.UnmarshalJSON(%q) = %v; want . got=%v; want %v", s, err, got, want) + } + } +} + +func TestJSONUnmarshal(t *testing.T) { + var got []Code + want := []Code{OK, NotFound, Internal, Canceled} + in := `["OK", "NOT_FOUND", "INTERNAL", "CANCELLED"]` + err := json.Unmarshal([]byte(in), &got) + if err != nil || !reflect.DeepEqual(got, want) { + t.Fatalf("json.Unmarshal(%q, &got) = %v; want . got=%v; want %v", in, err, got, want) + } +} + +func TestUnmarshalJSON_NilReceiver(t *testing.T) { + var got *Code + in := OK.String() + if err := got.UnmarshalJSON([]byte(in)); err == nil { + t.Errorf("got.UnmarshalJSON(%q) = nil; want . got=%v", in, got) + } +} + +func TestUnmarshalJSON_UnknownInput(t *testing.T) { + var got Code + for _, in := range [][]byte{[]byte(""), []byte("xxx"), []byte("Code(17)"), nil} { + if err := got.UnmarshalJSON([]byte(in)); err == nil { + t.Errorf("got.UnmarshalJSON(%q) = nil; want . got=%v", in, got) + } + } +} diff --git a/vendor/google.golang.org/grpc/connectivity/connectivity.go b/vendor/google.golang.org/grpc/connectivity/connectivity.go new file mode 100644 index 0000000..568ef5d --- /dev/null +++ b/vendor/google.golang.org/grpc/connectivity/connectivity.go @@ -0,0 +1,72 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Package connectivity defines connectivity semantics. +// For details, see https://github.com/grpc/grpc/blob/master/doc/connectivity-semantics-and-api.md. +// All APIs in this package are experimental. +package connectivity + +import ( + "golang.org/x/net/context" + "google.golang.org/grpc/grpclog" +) + +// State indicates the state of connectivity. +// It can be the state of a ClientConn or SubConn. +type State int + +func (s State) String() string { + switch s { + case Idle: + return "IDLE" + case Connecting: + return "CONNECTING" + case Ready: + return "READY" + case TransientFailure: + return "TRANSIENT_FAILURE" + case Shutdown: + return "SHUTDOWN" + default: + grpclog.Errorf("unknown connectivity state: %d", s) + return "Invalid-State" + } +} + +const ( + // Idle indicates the ClientConn is idle. + Idle State = iota + // Connecting indicates the ClienConn is connecting. + Connecting + // Ready indicates the ClientConn is ready for work. + Ready + // TransientFailure indicates the ClientConn has seen a failure but expects to recover. + TransientFailure + // Shutdown indicates the ClientConn has started shutting down. + Shutdown +) + +// Reporter reports the connectivity states. +type Reporter interface { + // CurrentState returns the current state of the reporter. + CurrentState() State + // WaitForStateChange blocks until the reporter's state is different from the given state, + // and returns true. + // It returns false if <-ctx.Done() can proceed (ctx got timeout or got canceled). + WaitForStateChange(context.Context, State) bool +} diff --git a/vendor/google.golang.org/grpc/coverage.sh b/vendor/google.golang.org/grpc/coverage.sh deleted file mode 100755 index b85f918..0000000 --- a/vendor/google.golang.org/grpc/coverage.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env bash - - -set -e - -workdir=.cover -profile="$workdir/cover.out" -mode=set -end2endtest="google.golang.org/grpc/test" - -generate_cover_data() { - rm -rf "$workdir" - mkdir "$workdir" - - for pkg in "$@"; do - if [ $pkg == "google.golang.org/grpc" -o $pkg == "google.golang.org/grpc/transport" -o $pkg == "google.golang.org/grpc/metadata" -o $pkg == "google.golang.org/grpc/credentials" ] - then - f="$workdir/$(echo $pkg | tr / -)" - go test -covermode="$mode" -coverprofile="$f.cover" "$pkg" - go test -covermode="$mode" -coverpkg "$pkg" -coverprofile="$f.e2e.cover" "$end2endtest" - fi - done - - echo "mode: $mode" >"$profile" - grep -h -v "^mode:" "$workdir"/*.cover >>"$profile" -} - -show_cover_report() { - go tool cover -${1}="$profile" -} - -push_to_coveralls() { - goveralls -coverprofile="$profile" -} - -generate_cover_data $(go list ./...) -show_cover_report func -case "$1" in -"") - ;; ---html) - show_cover_report html ;; ---coveralls) - push_to_coveralls ;; -*) - echo >&2 "error: invalid option: $1" ;; -esac -rm -rf "$workdir" diff --git a/vendor/google.golang.org/grpc/credentials/alts/alts.go b/vendor/google.golang.org/grpc/credentials/alts/alts.go new file mode 100644 index 0000000..24d8b6c --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/alts/alts.go @@ -0,0 +1,287 @@ +/* + * + * Copyright 2018 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Package alts implements the ALTS credential support by gRPC library, which +// encapsulates all the state needed by a client to authenticate with a server +// using ALTS and make various assertions, e.g., about the client's identity, +// role, or whether it is authorized to make a particular call. +// This package is experimental. +package alts + +import ( + "errors" + "fmt" + "net" + "sync" + "time" + + "golang.org/x/net/context" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/credentials/alts/core" + "google.golang.org/grpc/credentials/alts/core/handshaker" + "google.golang.org/grpc/credentials/alts/core/handshaker/service" + altspb "google.golang.org/grpc/credentials/alts/core/proto/grpc_gcp" + "google.golang.org/grpc/grpclog" +) + +const ( + // defaultTimeout specifies the server handshake timeout. + defaultTimeout = 30.0 * time.Second + // The following constants specify the minimum and maximum acceptable + // protocol versions. + protocolVersionMaxMajor = 2 + protocolVersionMaxMinor = 1 + protocolVersionMinMajor = 2 + protocolVersionMinMinor = 1 +) + +var ( + once sync.Once + maxRPCVersion = &altspb.RpcProtocolVersions_Version{ + Major: protocolVersionMaxMajor, + Minor: protocolVersionMaxMinor, + } + minRPCVersion = &altspb.RpcProtocolVersions_Version{ + Major: protocolVersionMinMajor, + Minor: protocolVersionMinMinor, + } + // ErrUntrustedPlatform is returned from ClientHandshake and + // ServerHandshake is running on a platform where the trustworthiness of + // the handshaker service is not guaranteed. + ErrUntrustedPlatform = errors.New("untrusted platform") +) + +// AuthInfo exposes security information from the ALTS handshake to the +// application. This interface is to be implemented by ALTS. Users should not +// need a brand new implementation of this interface. For situations like +// testing, any new implementation should embed this interface. This allows +// ALTS to add new methods to this interface. +type AuthInfo interface { + // ApplicationProtocol returns application protocol negotiated for the + // ALTS connection. + ApplicationProtocol() string + // RecordProtocol returns the record protocol negotiated for the ALTS + // connection. + RecordProtocol() string + // SecurityLevel returns the security level of the created ALTS secure + // channel. + SecurityLevel() altspb.SecurityLevel + // PeerServiceAccount returns the peer service account. + PeerServiceAccount() string + // LocalServiceAccount returns the local service account. + LocalServiceAccount() string + // PeerRPCVersions returns the RPC version supported by the peer. + PeerRPCVersions() *altspb.RpcProtocolVersions +} + +// ClientOptions contains the client-side options of an ALTS channel. These +// options will be passed to the underlying ALTS handshaker. +type ClientOptions struct { + // TargetServiceAccounts contains a list of expected target service + // accounts. + TargetServiceAccounts []string +} + +// altsTC is the credentials required for authenticating a connection using ALTS. +// It implements credentials.TransportCredentials interface. +type altsTC struct { + info *credentials.ProtocolInfo + hsAddr string + side core.Side + accounts []string +} + +// NewClientCreds constructs a client-side ALTS TransportCredentials object. +func NewClientCreds(opts *ClientOptions) credentials.TransportCredentials { + return newALTS(core.ClientSide, opts.TargetServiceAccounts) +} + +// NewServerCreds constructs a server-side ALTS TransportCredentials object. +func NewServerCreds() credentials.TransportCredentials { + return newALTS(core.ServerSide, nil) +} + +func newALTS(side core.Side, accounts []string) credentials.TransportCredentials { + once.Do(func() { + vmOnGCP = isRunningOnGCP() + }) + + return &altsTC{ + info: &credentials.ProtocolInfo{ + SecurityProtocol: "alts", + SecurityVersion: "1.0", + }, + side: side, + accounts: accounts, + } +} + +// ClientHandshake implements the client side handshake protocol. +func (g *altsTC) ClientHandshake(ctx context.Context, addr string, rawConn net.Conn) (_ net.Conn, _ credentials.AuthInfo, err error) { + if !vmOnGCP { + return nil, nil, ErrUntrustedPlatform + } + + // Connecting to ALTS handshaker service. + hsConn, err := service.Dial() + if err != nil { + return nil, nil, err + } + // Do not close hsConn since it is shared with other handshakes. + + // Possible context leak: + // The cancel function for the child context we create will only be + // called a non-nil error is returned. + var cancel context.CancelFunc + ctx, cancel = context.WithCancel(ctx) + defer func() { + if err != nil { + cancel() + } + }() + + opts := handshaker.DefaultClientHandshakerOptions() + opts.TargetServiceAccounts = g.accounts + opts.RPCVersions = &altspb.RpcProtocolVersions{ + MaxRpcVersion: maxRPCVersion, + MinRpcVersion: minRPCVersion, + } + chs, err := handshaker.NewClientHandshaker(ctx, hsConn, rawConn, opts) + defer func() { + if err != nil { + chs.Close() + } + }() + if err != nil { + return nil, nil, err + } + secConn, authInfo, err := chs.ClientHandshake(ctx) + if err != nil { + return nil, nil, err + } + altsAuthInfo, ok := authInfo.(AuthInfo) + if !ok { + return nil, nil, errors.New("client-side auth info is not of type alts.AuthInfo") + } + match, _ := checkRPCVersions(opts.RPCVersions, altsAuthInfo.PeerRPCVersions()) + if !match { + return nil, nil, fmt.Errorf("server-side RPC versions are not compatible with this client, local versions: %v, peer versions: %v", opts.RPCVersions, altsAuthInfo.PeerRPCVersions()) + } + return secConn, authInfo, nil +} + +// ServerHandshake implements the server side ALTS handshaker. +func (g *altsTC) ServerHandshake(rawConn net.Conn) (_ net.Conn, _ credentials.AuthInfo, err error) { + if !vmOnGCP { + return nil, nil, ErrUntrustedPlatform + } + // Connecting to ALTS handshaker service. + hsConn, err := service.Dial() + if err != nil { + return nil, nil, err + } + // Do not close hsConn since it's shared with other handshakes. + + ctx, cancel := context.WithTimeout(context.Background(), defaultTimeout) + defer cancel() + opts := handshaker.DefaultServerHandshakerOptions() + opts.RPCVersions = &altspb.RpcProtocolVersions{ + MaxRpcVersion: maxRPCVersion, + MinRpcVersion: minRPCVersion, + } + shs, err := handshaker.NewServerHandshaker(ctx, hsConn, rawConn, opts) + defer func() { + if err != nil { + shs.Close() + } + }() + if err != nil { + return nil, nil, err + } + secConn, authInfo, err := shs.ServerHandshake(ctx) + if err != nil { + return nil, nil, err + } + altsAuthInfo, ok := authInfo.(AuthInfo) + if !ok { + return nil, nil, errors.New("server-side auth info is not of type alts.AuthInfo") + } + match, _ := checkRPCVersions(opts.RPCVersions, altsAuthInfo.PeerRPCVersions()) + if !match { + return nil, nil, fmt.Errorf("client-side RPC versions is not compatible with this server, local versions: %v, peer versions: %v", opts.RPCVersions, altsAuthInfo.PeerRPCVersions()) + } + return secConn, authInfo, nil +} + +func (g *altsTC) Info() credentials.ProtocolInfo { + return *g.info +} + +func (g *altsTC) Clone() credentials.TransportCredentials { + info := *g.info + return &altsTC{ + info: &info, + } +} + +func (g *altsTC) OverrideServerName(serverNameOverride string) error { + g.info.ServerName = serverNameOverride + return nil +} + +// compareRPCVersion returns 0 if v1 == v2, 1 if v1 > v2 and -1 if v1 < v2. +func compareRPCVersions(v1, v2 *altspb.RpcProtocolVersions_Version) int { + switch { + case v1.GetMajor() > v2.GetMajor(), + v1.GetMajor() == v2.GetMajor() && v1.GetMinor() > v2.GetMinor(): + return 1 + case v1.GetMajor() < v2.GetMajor(), + v1.GetMajor() == v2.GetMajor() && v1.GetMinor() < v2.GetMinor(): + return -1 + } + return 0 +} + +// checkRPCVersions performs a version check between local and peer rpc protocol +// versions. This function returns true if the check passes which means both +// parties agreed on a common rpc protocol to use, and false otherwise. The +// function also returns the highest common RPC protocol version both parties +// agreed on. +func checkRPCVersions(local, peer *altspb.RpcProtocolVersions) (bool, *altspb.RpcProtocolVersions_Version) { + if local == nil || peer == nil { + grpclog.Error("invalid checkRPCVersions argument, either local or peer is nil.") + return false, nil + } + + // maxCommonVersion is MIN(local.max, peer.max). + maxCommonVersion := local.GetMaxRpcVersion() + if compareRPCVersions(local.GetMaxRpcVersion(), peer.GetMaxRpcVersion()) > 0 { + maxCommonVersion = peer.GetMaxRpcVersion() + } + + // minCommonVersion is MAX(local.min, peer.min). + minCommonVersion := peer.GetMinRpcVersion() + if compareRPCVersions(local.GetMinRpcVersion(), peer.GetMinRpcVersion()) > 0 { + minCommonVersion = local.GetMinRpcVersion() + } + + if compareRPCVersions(maxCommonVersion, minCommonVersion) < 0 { + return false, nil + } + return true, maxCommonVersion +} diff --git a/vendor/google.golang.org/grpc/credentials/alts/alts_test.go b/vendor/google.golang.org/grpc/credentials/alts/alts_test.go new file mode 100644 index 0000000..4e953b2 --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/alts/alts_test.go @@ -0,0 +1,246 @@ +/* + * + * Copyright 2018 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package alts + +import ( + "testing" + + "github.com/golang/protobuf/proto" + altspb "google.golang.org/grpc/credentials/alts/core/proto/grpc_gcp" +) + +func TestInfoServerName(t *testing.T) { + // This is not testing any handshaker functionality, so it's fine to only + // use NewServerCreds and not NewClientCreds. + alts := NewServerCreds() + if got, want := alts.Info().ServerName, ""; got != want { + t.Fatalf("%v.Info().ServerName = %v, want %v", alts, got, want) + } +} + +func TestOverrideServerName(t *testing.T) { + wantServerName := "server.name" + // This is not testing any handshaker functionality, so it's fine to only + // use NewServerCreds and not NewClientCreds. + c := NewServerCreds() + c.OverrideServerName(wantServerName) + if got, want := c.Info().ServerName, wantServerName; got != want { + t.Fatalf("c.Info().ServerName = %v, want %v", got, want) + } +} + +func TestClone(t *testing.T) { + wantServerName := "server.name" + // This is not testing any handshaker functionality, so it's fine to only + // use NewServerCreds and not NewClientCreds. + c := NewServerCreds() + c.OverrideServerName(wantServerName) + cc := c.Clone() + if got, want := cc.Info().ServerName, wantServerName; got != want { + t.Fatalf("cc.Info().ServerName = %v, want %v", got, want) + } + cc.OverrideServerName("") + if got, want := c.Info().ServerName, wantServerName; got != want { + t.Fatalf("Change in clone should not affect the original, c.Info().ServerName = %v, want %v", got, want) + } + if got, want := cc.Info().ServerName, ""; got != want { + t.Fatalf("cc.Info().ServerName = %v, want %v", got, want) + } +} + +func TestInfo(t *testing.T) { + // This is not testing any handshaker functionality, so it's fine to only + // use NewServerCreds and not NewClientCreds. + c := NewServerCreds() + info := c.Info() + if got, want := info.ProtocolVersion, ""; got != want { + t.Errorf("info.ProtocolVersion=%v, want %v", got, want) + } + if got, want := info.SecurityProtocol, "alts"; got != want { + t.Errorf("info.SecurityProtocol=%v, want %v", got, want) + } + if got, want := info.SecurityVersion, "1.0"; got != want { + t.Errorf("info.SecurityVersion=%v, want %v", got, want) + } + if got, want := info.ServerName, ""; got != want { + t.Errorf("info.ServerName=%v, want %v", got, want) + } +} + +func TestCompareRPCVersions(t *testing.T) { + for _, tc := range []struct { + v1 *altspb.RpcProtocolVersions_Version + v2 *altspb.RpcProtocolVersions_Version + output int + }{ + { + version(3, 2), + version(2, 1), + 1, + }, + { + version(3, 2), + version(3, 1), + 1, + }, + { + version(2, 1), + version(3, 2), + -1, + }, + { + version(3, 1), + version(3, 2), + -1, + }, + { + version(3, 2), + version(3, 2), + 0, + }, + } { + if got, want := compareRPCVersions(tc.v1, tc.v2), tc.output; got != want { + t.Errorf("compareRPCVersions(%v, %v)=%v, want %v", tc.v1, tc.v2, got, want) + } + } +} + +func TestCheckRPCVersions(t *testing.T) { + for _, tc := range []struct { + desc string + local *altspb.RpcProtocolVersions + peer *altspb.RpcProtocolVersions + output bool + maxCommonVersion *altspb.RpcProtocolVersions_Version + }{ + { + "local.max > peer.max and local.min > peer.min", + versions(2, 1, 3, 2), + versions(1, 2, 2, 1), + true, + version(2, 1), + }, + { + "local.max > peer.max and local.min < peer.min", + versions(1, 2, 3, 2), + versions(2, 1, 2, 1), + true, + version(2, 1), + }, + { + "local.max > peer.max and local.min = peer.min", + versions(2, 1, 3, 2), + versions(2, 1, 2, 1), + true, + version(2, 1), + }, + { + "local.max < peer.max and local.min > peer.min", + versions(2, 1, 2, 1), + versions(1, 2, 3, 2), + true, + version(2, 1), + }, + { + "local.max = peer.max and local.min > peer.min", + versions(2, 1, 2, 1), + versions(1, 2, 2, 1), + true, + version(2, 1), + }, + { + "local.max < peer.max and local.min < peer.min", + versions(1, 2, 2, 1), + versions(2, 1, 3, 2), + true, + version(2, 1), + }, + { + "local.max < peer.max and local.min = peer.min", + versions(1, 2, 2, 1), + versions(1, 2, 3, 2), + true, + version(2, 1), + }, + { + "local.max = peer.max and local.min < peer.min", + versions(1, 2, 2, 1), + versions(2, 1, 2, 1), + true, + version(2, 1), + }, + { + "all equal", + versions(2, 1, 2, 1), + versions(2, 1, 2, 1), + true, + version(2, 1), + }, + { + "max is smaller than min", + versions(2, 1, 1, 2), + versions(2, 1, 1, 2), + false, + nil, + }, + { + "no overlap, local > peer", + versions(4, 3, 6, 5), + versions(1, 0, 2, 1), + false, + nil, + }, + { + "no overlap, local < peer", + versions(1, 0, 2, 1), + versions(4, 3, 6, 5), + false, + nil, + }, + { + "no overlap, max < min", + versions(6, 5, 4, 3), + versions(2, 1, 1, 0), + false, + nil, + }, + } { + output, maxCommonVersion := checkRPCVersions(tc.local, tc.peer) + if got, want := output, tc.output; got != want { + t.Errorf("%v: checkRPCVersions(%v, %v)=(%v, _), want (%v, _)", tc.desc, tc.local, tc.peer, got, want) + } + if got, want := maxCommonVersion, tc.maxCommonVersion; !proto.Equal(got, want) { + t.Errorf("%v: checkRPCVersions(%v, %v)=(_, %v), want (_, %v)", tc.desc, tc.local, tc.peer, got, want) + } + } +} + +func version(major, minor uint32) *altspb.RpcProtocolVersions_Version { + return &altspb.RpcProtocolVersions_Version{ + Major: major, + Minor: minor, + } +} + +func versions(minMajor, minMinor, maxMajor, maxMinor uint32) *altspb.RpcProtocolVersions { + return &altspb.RpcProtocolVersions{ + MinRpcVersion: version(minMajor, minMinor), + MaxRpcVersion: version(maxMajor, maxMinor), + } +} diff --git a/vendor/google.golang.org/grpc/credentials/alts/core/authinfo/authinfo.go b/vendor/google.golang.org/grpc/credentials/alts/core/authinfo/authinfo.go new file mode 100644 index 0000000..2fe54b7 --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/alts/core/authinfo/authinfo.go @@ -0,0 +1,87 @@ +/* + * + * Copyright 2018 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Package authinfo provide authentication information returned by handshakers. +package authinfo + +import ( + "google.golang.org/grpc/credentials" + altspb "google.golang.org/grpc/credentials/alts/core/proto/grpc_gcp" +) + +var _ credentials.AuthInfo = (*altsAuthInfo)(nil) + +// altsAuthInfo exposes security information from the ALTS handshake to the +// application. altsAuthInfo is immutable and implements credentials.AuthInfo. +type altsAuthInfo struct { + p *altspb.AltsContext +} + +// New returns a new altsAuthInfo object given handshaker results. +func New(result *altspb.HandshakerResult) credentials.AuthInfo { + return newAuthInfo(result) +} + +func newAuthInfo(result *altspb.HandshakerResult) *altsAuthInfo { + return &altsAuthInfo{ + p: &altspb.AltsContext{ + ApplicationProtocol: result.GetApplicationProtocol(), + RecordProtocol: result.GetRecordProtocol(), + // TODO: assign security level from result. + SecurityLevel: altspb.SecurityLevel_INTEGRITY_AND_PRIVACY, + PeerServiceAccount: result.GetPeerIdentity().GetServiceAccount(), + LocalServiceAccount: result.GetLocalIdentity().GetServiceAccount(), + PeerRpcVersions: result.GetPeerRpcVersions(), + }, + } +} + +// AuthType identifies the context as providing ALTS authentication information. +func (s *altsAuthInfo) AuthType() string { + return "alts" +} + +// ApplicationProtocol returns the context's application protocol. +func (s *altsAuthInfo) ApplicationProtocol() string { + return s.p.GetApplicationProtocol() +} + +// RecordProtocol returns the context's record protocol. +func (s *altsAuthInfo) RecordProtocol() string { + return s.p.GetRecordProtocol() +} + +// SecurityLevel returns the context's security level. +func (s *altsAuthInfo) SecurityLevel() altspb.SecurityLevel { + return s.p.GetSecurityLevel() +} + +// PeerServiceAccount returns the context's peer service account. +func (s *altsAuthInfo) PeerServiceAccount() string { + return s.p.GetPeerServiceAccount() +} + +// LocalServiceAccount returns the context's local service account. +func (s *altsAuthInfo) LocalServiceAccount() string { + return s.p.GetLocalServiceAccount() +} + +// PeerRPCVersions returns the context's peer RPC versions. +func (s *altsAuthInfo) PeerRPCVersions() *altspb.RpcProtocolVersions { + return s.p.GetPeerRpcVersions() +} diff --git a/vendor/google.golang.org/grpc/credentials/alts/core/authinfo/authinfo_test.go b/vendor/google.golang.org/grpc/credentials/alts/core/authinfo/authinfo_test.go new file mode 100644 index 0000000..635d804 --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/alts/core/authinfo/authinfo_test.go @@ -0,0 +1,134 @@ +/* + * + * Copyright 2018 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package authinfo + +import ( + "reflect" + "testing" + + altspb "google.golang.org/grpc/credentials/alts/core/proto/grpc_gcp" +) + +const ( + testAppProtocol = "my_app" + testRecordProtocol = "very_secure_protocol" + testPeerAccount = "peer_service_account" + testLocalAccount = "local_service_account" + testPeerHostname = "peer_hostname" + testLocalHostname = "local_hostname" +) + +func TestALTSAuthInfo(t *testing.T) { + for _, tc := range []struct { + result *altspb.HandshakerResult + outAppProtocol string + outRecordProtocol string + outSecurityLevel altspb.SecurityLevel + outPeerAccount string + outLocalAccount string + outPeerRPCVersions *altspb.RpcProtocolVersions + }{ + { + &altspb.HandshakerResult{ + ApplicationProtocol: testAppProtocol, + RecordProtocol: testRecordProtocol, + PeerIdentity: &altspb.Identity{ + IdentityOneof: &altspb.Identity_ServiceAccount{ + ServiceAccount: testPeerAccount, + }, + }, + LocalIdentity: &altspb.Identity{ + IdentityOneof: &altspb.Identity_ServiceAccount{ + ServiceAccount: testLocalAccount, + }, + }, + }, + testAppProtocol, + testRecordProtocol, + altspb.SecurityLevel_INTEGRITY_AND_PRIVACY, + testPeerAccount, + testLocalAccount, + nil, + }, + { + &altspb.HandshakerResult{ + ApplicationProtocol: testAppProtocol, + RecordProtocol: testRecordProtocol, + PeerIdentity: &altspb.Identity{ + IdentityOneof: &altspb.Identity_Hostname{ + Hostname: testPeerHostname, + }, + }, + LocalIdentity: &altspb.Identity{ + IdentityOneof: &altspb.Identity_Hostname{ + Hostname: testLocalHostname, + }, + }, + PeerRpcVersions: &altspb.RpcProtocolVersions{ + MaxRpcVersion: &altspb.RpcProtocolVersions_Version{ + Major: 20, + Minor: 21, + }, + MinRpcVersion: &altspb.RpcProtocolVersions_Version{ + Major: 10, + Minor: 11, + }, + }, + }, + testAppProtocol, + testRecordProtocol, + altspb.SecurityLevel_INTEGRITY_AND_PRIVACY, + "", + "", + &altspb.RpcProtocolVersions{ + MaxRpcVersion: &altspb.RpcProtocolVersions_Version{ + Major: 20, + Minor: 21, + }, + MinRpcVersion: &altspb.RpcProtocolVersions_Version{ + Major: 10, + Minor: 11, + }, + }, + }, + } { + authInfo := newAuthInfo(tc.result) + if got, want := authInfo.AuthType(), "alts"; got != want { + t.Errorf("authInfo.AuthType()=%v, want %v", got, want) + } + if got, want := authInfo.ApplicationProtocol(), tc.outAppProtocol; got != want { + t.Errorf("authInfo.ApplicationProtocol()=%v, want %v", got, want) + } + if got, want := authInfo.RecordProtocol(), tc.outRecordProtocol; got != want { + t.Errorf("authInfo.RecordProtocol()=%v, want %v", got, want) + } + if got, want := authInfo.SecurityLevel(), tc.outSecurityLevel; got != want { + t.Errorf("authInfo.SecurityLevel()=%v, want %v", got, want) + } + if got, want := authInfo.PeerServiceAccount(), tc.outPeerAccount; got != want { + t.Errorf("authInfo.PeerServiceAccount()=%v, want %v", got, want) + } + if got, want := authInfo.LocalServiceAccount(), tc.outLocalAccount; got != want { + t.Errorf("authInfo.LocalServiceAccount()=%v, want %v", got, want) + } + if got, want := authInfo.PeerRPCVersions(), tc.outPeerRPCVersions; !reflect.DeepEqual(got, want) { + t.Errorf("authinfo.PeerRpcVersions()=%v, want %v", got, want) + } + } +} diff --git a/vendor/google.golang.org/grpc/credentials/alts/core/common.go b/vendor/google.golang.org/grpc/credentials/alts/core/common.go new file mode 100644 index 0000000..0112d51 --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/alts/core/common.go @@ -0,0 +1,68 @@ +/* + * + * Copyright 2018 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Package core contains common core functionality for ALTS. +// Disclaimer: users should NEVER reference this package directly. +package core + +import ( + "net" + + "golang.org/x/net/context" + "google.golang.org/grpc/credentials" +) + +const ( + // ClientSide identifies the client in this communication. + ClientSide Side = iota + // ServerSide identifies the server in this communication. + ServerSide +) + +// PeerNotRespondingError is returned when a peer server is not responding +// after a channel has been established. It is treated as a temporary connection +// error and re-connection to the server should be attempted. +var PeerNotRespondingError = &peerNotRespondingError{} + +// Side identifies the party's role: client or server. +type Side int + +type peerNotRespondingError struct{} + +// Return an error message for the purpose of logging. +func (e *peerNotRespondingError) Error() string { + return "peer server is not responding and re-connection should be attempted." +} + +// Temporary indicates if this connection error is temporary or fatal. +func (e *peerNotRespondingError) Temporary() bool { + return true +} + +// Handshaker defines a ALTS handshaker interface. +type Handshaker interface { + // ClientHandshake starts and completes a client-side handshaking and + // returns a secure connection and corresponding auth information. + ClientHandshake(ctx context.Context) (net.Conn, credentials.AuthInfo, error) + // ServerHandshake starts and completes a server-side handshaking and + // returns a secure connection and corresponding auth information. + ServerHandshake(ctx context.Context) (net.Conn, credentials.AuthInfo, error) + // Close terminates the Handshaker. It should be called when the caller + // obtains the secure connection. + Close() +} diff --git a/vendor/google.golang.org/grpc/credentials/alts/core/conn/aeadrekey.go b/vendor/google.golang.org/grpc/credentials/alts/core/conn/aeadrekey.go new file mode 100644 index 0000000..43726e8 --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/alts/core/conn/aeadrekey.go @@ -0,0 +1,131 @@ +/* + * + * Copyright 2018 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package conn + +import ( + "bytes" + "crypto/aes" + "crypto/cipher" + "crypto/hmac" + "crypto/sha256" + "encoding/binary" + "fmt" + "strconv" +) + +// rekeyAEAD holds the necessary information for an AEAD based on +// AES-GCM that performs nonce-based key derivation and XORs the +// nonce with a random mask. +type rekeyAEAD struct { + kdfKey []byte + kdfCounter []byte + nonceMask []byte + nonceBuf []byte + gcmAEAD cipher.AEAD +} + +// KeySizeError signals that the given key does not have the correct size. +type KeySizeError int + +func (k KeySizeError) Error() string { + return "alts/conn: invalid key size " + strconv.Itoa(int(k)) +} + +// newRekeyAEAD creates a new instance of aes128gcm with rekeying. +// The key argument should be 44 bytes, the first 32 bytes are used as a key +// for HKDF-expand and the remainining 12 bytes are used as a random mask for +// the counter. +func newRekeyAEAD(key []byte) (*rekeyAEAD, error) { + k := len(key) + if k != kdfKeyLen+nonceLen { + return nil, KeySizeError(k) + } + return &rekeyAEAD{ + kdfKey: key[:kdfKeyLen], + kdfCounter: make([]byte, kdfCounterLen), + nonceMask: key[kdfKeyLen:], + nonceBuf: make([]byte, nonceLen), + gcmAEAD: nil, + }, nil +} + +// Seal rekeys if nonce[2:8] is different than in the last call, masks the nonce, +// and calls Seal for aes128gcm. +func (s *rekeyAEAD) Seal(dst, nonce, plaintext, additionalData []byte) []byte { + if err := s.rekeyIfRequired(nonce); err != nil { + panic(fmt.Sprintf("Rekeying failed with: %s", err.Error())) + } + maskNonce(s.nonceBuf, nonce, s.nonceMask) + return s.gcmAEAD.Seal(dst, s.nonceBuf, plaintext, additionalData) +} + +// Open rekeys if nonce[2:8] is different than in the last call, masks the nonce, +// and calls Open for aes128gcm. +func (s *rekeyAEAD) Open(dst, nonce, ciphertext, additionalData []byte) ([]byte, error) { + if err := s.rekeyIfRequired(nonce); err != nil { + return nil, err + } + maskNonce(s.nonceBuf, nonce, s.nonceMask) + return s.gcmAEAD.Open(dst, s.nonceBuf, ciphertext, additionalData) +} + +// rekeyIfRequired creates a new aes128gcm AEAD if the existing AEAD is nil +// or cannot be used with given nonce. +func (s *rekeyAEAD) rekeyIfRequired(nonce []byte) error { + newKdfCounter := nonce[kdfCounterOffset : kdfCounterOffset+kdfCounterLen] + if s.gcmAEAD != nil && bytes.Equal(newKdfCounter, s.kdfCounter) { + return nil + } + copy(s.kdfCounter, newKdfCounter) + a, err := aes.NewCipher(hkdfExpand(s.kdfKey, s.kdfCounter)) + if err != nil { + return err + } + s.gcmAEAD, err = cipher.NewGCM(a) + return err +} + +// maskNonce XORs the given nonce with the mask and stores the result in dst. +func maskNonce(dst, nonce, mask []byte) { + nonce1 := binary.LittleEndian.Uint64(nonce[:sizeUint64]) + nonce2 := binary.LittleEndian.Uint32(nonce[sizeUint64:]) + mask1 := binary.LittleEndian.Uint64(mask[:sizeUint64]) + mask2 := binary.LittleEndian.Uint32(mask[sizeUint64:]) + binary.LittleEndian.PutUint64(dst[:sizeUint64], nonce1^mask1) + binary.LittleEndian.PutUint32(dst[sizeUint64:], nonce2^mask2) +} + +// NonceSize returns the required nonce size. +func (s *rekeyAEAD) NonceSize() int { + return s.gcmAEAD.NonceSize() +} + +// Overhead returns the ciphertext overhead. +func (s *rekeyAEAD) Overhead() int { + return s.gcmAEAD.Overhead() +} + +// hkdfExpand computes the first 16 bytes of the HKDF-expand function +// defined in RFC5869. +func hkdfExpand(key, info []byte) []byte { + mac := hmac.New(sha256.New, key) + mac.Write(info) + mac.Write([]byte{0x01}[:]) + return mac.Sum(nil)[:aeadKeyLen] +} diff --git a/vendor/google.golang.org/grpc/credentials/alts/core/conn/aeadrekey_test.go b/vendor/google.golang.org/grpc/credentials/alts/core/conn/aeadrekey_test.go new file mode 100644 index 0000000..d639b38 --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/alts/core/conn/aeadrekey_test.go @@ -0,0 +1,263 @@ +/* + * + * Copyright 2018 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package conn + +import ( + "bytes" + "encoding/hex" + "testing" +) + +// cryptoTestVector is struct for a rekey test vector +type rekeyAEADTestVector struct { + desc string + key, nonce, plaintext, aad, ciphertext []byte +} + +// Test encrypt and decrypt using (adapted) test vectors for AES-GCM. +func TestAES128GCMRekeyEncrypt(t *testing.T) { + for _, test := range []rekeyAEADTestVector{ + // NIST vectors from: + // http://csrc.nist.gov/groups/ST/toolkit/BCM/documents/proposedmodes/gcm/gcm-revised-spec.pdf + // + // IEEE vectors from: + // http://www.ieee802.org/1/files/public/docs2011/bn-randall-test-vectors-0511-v1.pdf + // + // Key expanded by setting + // expandedKey = (key || + // key ^ {0x01,..,0x01} || + // key ^ {0x02,..,0x02})[0:44]. + { + desc: "Derived from NIST test vector 1", + key: dehex("0000000000000000000000000000000001010101010101010101010101010101020202020202020202020202"), + nonce: dehex("000000000000000000000000"), + aad: dehex(""), + plaintext: dehex(""), + ciphertext: dehex("85e873e002f6ebdc4060954eb8675508"), + }, + { + desc: "Derived from NIST test vector 2", + key: dehex("0000000000000000000000000000000001010101010101010101010101010101020202020202020202020202"), + nonce: dehex("000000000000000000000000"), + aad: dehex(""), + plaintext: dehex("00000000000000000000000000000000"), + ciphertext: dehex("51e9a8cb23ca2512c8256afff8e72d681aca19a1148ac115e83df4888cc00d11"), + }, + { + desc: "Derived from NIST test vector 3", + key: dehex("feffe9928665731c6d6a8f9467308308fffee8938764721d6c6b8e9566318209fcfdeb908467711e6f688d96"), + nonce: dehex("cafebabefacedbaddecaf888"), + aad: dehex(""), + plaintext: dehex("d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b391aafd255"), + ciphertext: dehex("1018ed5a1402a86516d6576d70b2ffccca261b94df88b58f53b64dfba435d18b2f6e3b7869f9353d4ac8cf09afb1663daa7b4017e6fc2c177c0c087c0df1162129952213cee1bc6e9c8495dd705e1f3d"), + }, + { + desc: "Derived from NIST test vector 4", + key: dehex("feffe9928665731c6d6a8f9467308308fffee8938764721d6c6b8e9566318209fcfdeb908467711e6f688d96"), + nonce: dehex("cafebabefacedbaddecaf888"), + aad: dehex("feedfacedeadbeeffeedfacedeadbeefabaddad2"), + plaintext: dehex("d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39"), + ciphertext: dehex("1018ed5a1402a86516d6576d70b2ffccca261b94df88b58f53b64dfba435d18b2f6e3b7869f9353d4ac8cf09afb1663daa7b4017e6fc2c177c0c087c4764565d077e9124001ddb27fc0848c5"), + }, + { + desc: "Derived from adapted NIST test vector 4 for KDF counter boundary (flip nonce bit 15)", + key: dehex("feffe9928665731c6d6a8f9467308308fffee8938764721d6c6b8e9566318209fcfdeb908467711e6f688d96"), + nonce: dehex("ca7ebabefacedbaddecaf888"), + aad: dehex("feedfacedeadbeeffeedfacedeadbeefabaddad2"), + plaintext: dehex("d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39"), + ciphertext: dehex("e650d3c0fb879327f2d03287fa93cd07342b136215adbca00c3bd5099ec41832b1d18e0423ed26bb12c6cd09debb29230a94c0cee15903656f85edb6fc509b1b28216382172ecbcc31e1e9b1"), + }, + { + desc: "Derived from adapted NIST test vector 4 for KDF counter boundary (flip nonce bit 16)", + key: dehex("feffe9928665731c6d6a8f9467308308fffee8938764721d6c6b8e9566318209fcfdeb908467711e6f688d96"), + nonce: dehex("cafebbbefacedbaddecaf888"), + aad: dehex("feedfacedeadbeeffeedfacedeadbeefabaddad2"), + plaintext: dehex("d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39"), + ciphertext: dehex("c0121e6c954d0767f96630c33450999791b2da2ad05c4190169ccad9ac86ff1c721e3d82f2ad22ab463bab4a0754b7dd68ca4de7ea2531b625eda01f89312b2ab957d5c7f8568dd95fcdcd1f"), + }, + { + desc: "Derived from adapted NIST test vector 4 for KDF counter boundary (flip nonce bit 63)", + key: dehex("feffe9928665731c6d6a8f9467308308fffee8938764721d6c6b8e9566318209fcfdeb908467711e6f688d96"), + nonce: dehex("cafebabefacedb2ddecaf888"), + aad: dehex("feedfacedeadbeeffeedfacedeadbeefabaddad2"), + plaintext: dehex("d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39"), + ciphertext: dehex("8af37ea5684a4d81d4fd817261fd9743099e7e6a025eaacf8e54b124fb5743149e05cb89f4a49467fe2e5e5965f29a19f99416b0016b54585d12553783ba59e9f782e82e097c336bf7989f08"), + }, + { + desc: "Derived from adapted NIST test vector 4 for KDF counter boundary (flip nonce bit 64)", + key: dehex("feffe9928665731c6d6a8f9467308308fffee8938764721d6c6b8e9566318209fcfdeb908467711e6f688d96"), + nonce: dehex("cafebabefacedbaddfcaf888"), + aad: dehex("feedfacedeadbeeffeedfacedeadbeefabaddad2"), + plaintext: dehex("d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39"), + ciphertext: dehex("fbd528448d0346bfa878634864d407a35a039de9db2f1feb8e965b3ae9356ce6289441d77f8f0df294891f37ea438b223e3bf2bdc53d4c5a74fb680bb312a8dec6f7252cbcd7f5799750ad78"), + }, + { + desc: "Derived from IEEE 2.1.1 54-byte auth", + key: dehex("ad7a2bd03eac835a6f620fdcb506b345ac7b2ad13fad825b6e630eddb407b244af7829d23cae81586d600dde"), + nonce: dehex("12153524c0895e81b2c28465"), + aad: dehex("d609b1f056637a0d46df998d88e5222ab2c2846512153524c0895e8108000f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233340001"), + plaintext: dehex(""), + ciphertext: dehex("3ea0b584f3c85e93f9320ea591699efb"), + }, + { + desc: "Derived from IEEE 2.1.2 54-byte auth", + key: dehex("e3c08a8f06c6e3ad95a70557b23f75483ce33021a9c72b7025666204c69c0b72e1c2888d04c4e1af97a50755"), + nonce: dehex("12153524c0895e81b2c28465"), + aad: dehex("d609b1f056637a0d46df998d88e5222ab2c2846512153524c0895e8108000f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233340001"), + plaintext: dehex(""), + ciphertext: dehex("294e028bf1fe6f14c4e8f7305c933eb5"), + }, + { + desc: "Derived from IEEE 2.2.1 60-byte crypt", + key: dehex("ad7a2bd03eac835a6f620fdcb506b345ac7b2ad13fad825b6e630eddb407b244af7829d23cae81586d600dde"), + nonce: dehex("12153524c0895e81b2c28465"), + aad: dehex("d609b1f056637a0d46df998d88e52e00b2c2846512153524c0895e81"), + plaintext: dehex("08000f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a0002"), + ciphertext: dehex("db3d25719c6b0a3ca6145c159d5c6ed9aff9c6e0b79f17019ea923b8665ddf52137ad611f0d1bf417a7ca85e45afe106ff9c7569d335d086ae6c03f00987ccd6"), + }, + { + desc: "Derived from IEEE 2.2.2 60-byte crypt", + key: dehex("e3c08a8f06c6e3ad95a70557b23f75483ce33021a9c72b7025666204c69c0b72e1c2888d04c4e1af97a50755"), + nonce: dehex("12153524c0895e81b2c28465"), + aad: dehex("d609b1f056637a0d46df998d88e52e00b2c2846512153524c0895e81"), + plaintext: dehex("08000f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a0002"), + ciphertext: dehex("1641f28ec13afcc8f7903389787201051644914933e9202bb9d06aa020c2a67ef51dfe7bc00a856c55b8f8133e77f659132502bad63f5713d57d0c11e0f871ed"), + }, + { + desc: "Derived from IEEE 2.3.1 60-byte auth", + key: dehex("071b113b0ca743fecccf3d051f737382061a103a0da642ffcdce3c041e727283051913390ea541fccecd3f07"), + nonce: dehex("f0761e8dcd3d000176d457ed"), + aad: dehex("e20106d7cd0df0761e8dcd3d88e5400076d457ed08000f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a0003"), + plaintext: dehex(""), + ciphertext: dehex("58837a10562b0f1f8edbe58ca55811d3"), + }, + { + desc: "Derived from IEEE 2.3.2 60-byte auth", + key: dehex("691d3ee909d7f54167fd1ca0b5d769081f2bde1aee655fdbab80bd5295ae6be76b1f3ceb0bd5f74365ff1ea2"), + nonce: dehex("f0761e8dcd3d000176d457ed"), + aad: dehex("e20106d7cd0df0761e8dcd3d88e5400076d457ed08000f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a0003"), + plaintext: dehex(""), + ciphertext: dehex("c2722ff6ca29a257718a529d1f0c6a3b"), + }, + { + desc: "Derived from IEEE 2.4.1 54-byte crypt", + key: dehex("071b113b0ca743fecccf3d051f737382061a103a0da642ffcdce3c041e727283051913390ea541fccecd3f07"), + nonce: dehex("f0761e8dcd3d000176d457ed"), + aad: dehex("e20106d7cd0df0761e8dcd3d88e54c2a76d457ed"), + plaintext: dehex("08000f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233340004"), + ciphertext: dehex("fd96b715b93a13346af51e8acdf792cdc7b2686f8574c70e6b0cbf16291ded427ad73fec48cd298e0528a1f4c644a949fc31dc9279706ddba33f"), + }, + { + desc: "Derived from IEEE 2.4.2 54-byte crypt", + key: dehex("691d3ee909d7f54167fd1ca0b5d769081f2bde1aee655fdbab80bd5295ae6be76b1f3ceb0bd5f74365ff1ea2"), + nonce: dehex("f0761e8dcd3d000176d457ed"), + aad: dehex("e20106d7cd0df0761e8dcd3d88e54c2a76d457ed"), + plaintext: dehex("08000f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233340004"), + ciphertext: dehex("b68f6300c2e9ae833bdc070e24021a3477118e78ccf84e11a485d861476c300f175353d5cdf92008a4f878e6cc3577768085c50a0e98fda6cbb8"), + }, + { + desc: "Derived from IEEE 2.5.1 65-byte auth", + key: dehex("013fe00b5f11be7f866d0cbbc55a7a90003ee10a5e10bf7e876c0dbac45b7b91033de2095d13bc7d846f0eb9"), + nonce: dehex("7cfde9f9e33724c68932d612"), + aad: dehex("84c5d513d2aaf6e5bbd2727788e523008932d6127cfde9f9e33724c608000f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f0005"), + plaintext: dehex(""), + ciphertext: dehex("cca20eecda6283f09bb3543dd99edb9b"), + }, + { + desc: "Derived from IEEE 2.5.2 65-byte auth", + key: dehex("83c093b58de7ffe1c0da926ac43fb3609ac1c80fee1b624497ef942e2f79a82381c291b78fe5fde3c2d89068"), + nonce: dehex("7cfde9f9e33724c68932d612"), + aad: dehex("84c5d513d2aaf6e5bbd2727788e523008932d6127cfde9f9e33724c608000f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f0005"), + plaintext: dehex(""), + ciphertext: dehex("b232cc1da5117bf15003734fa599d271"), + }, + { + desc: "Derived from IEEE 2.6.1 61-byte crypt", + key: dehex("013fe00b5f11be7f866d0cbbc55a7a90003ee10a5e10bf7e876c0dbac45b7b91033de2095d13bc7d846f0eb9"), + nonce: dehex("7cfde9f9e33724c68932d612"), + aad: dehex("84c5d513d2aaf6e5bbd2727788e52f008932d6127cfde9f9e33724c6"), + plaintext: dehex("08000f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b0006"), + ciphertext: dehex("ff1910d35ad7e5657890c7c560146fd038707f204b66edbc3d161f8ace244b985921023c436e3a1c3532ecd5d09a056d70be583f0d10829d9387d07d33d872e490"), + }, + { + desc: "Derived from IEEE 2.6.2 61-byte crypt", + key: dehex("83c093b58de7ffe1c0da926ac43fb3609ac1c80fee1b624497ef942e2f79a82381c291b78fe5fde3c2d89068"), + nonce: dehex("7cfde9f9e33724c68932d612"), + aad: dehex("84c5d513d2aaf6e5bbd2727788e52f008932d6127cfde9f9e33724c6"), + plaintext: dehex("08000f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b0006"), + ciphertext: dehex("0db4cf956b5f97eca4eab82a6955307f9ae02a32dd7d93f83d66ad04e1cfdc5182ad12abdea5bbb619a1bd5fb9a573590fba908e9c7a46c1f7ba0905d1b55ffda4"), + }, + { + desc: "Derived from IEEE 2.7.1 79-byte crypt", + key: dehex("88ee087fd95da9fbf6725aa9d757b0cd89ef097ed85ca8faf7735ba8d656b1cc8aec0a7ddb5fabf9f47058ab"), + nonce: dehex("7ae8e2ca4ec500012e58495c"), + aad: dehex("68f2e77696ce7ae8e2ca4ec588e541002e58495c08000f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d0007"), + plaintext: dehex(""), + ciphertext: dehex("813f0e630f96fb2d030f58d83f5cdfd0"), + }, + { + desc: "Derived from IEEE 2.7.2 79-byte crypt", + key: dehex("4c973dbc7364621674f8b5b89e5c15511fced9216490fb1c1a2caa0ffe0407e54e953fbe7166601476fab7ba"), + nonce: dehex("7ae8e2ca4ec500012e58495c"), + aad: dehex("68f2e77696ce7ae8e2ca4ec588e541002e58495c08000f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d0007"), + plaintext: dehex(""), + ciphertext: dehex("77e5a44c21eb07188aacbd74d1980e97"), + }, + { + desc: "Derived from IEEE 2.8.1 61-byte crypt", + key: dehex("88ee087fd95da9fbf6725aa9d757b0cd89ef097ed85ca8faf7735ba8d656b1cc8aec0a7ddb5fabf9f47058ab"), + nonce: dehex("7ae8e2ca4ec500012e58495c"), + aad: dehex("68f2e77696ce7ae8e2ca4ec588e54d002e58495c"), + plaintext: dehex("08000f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748490008"), + ciphertext: dehex("958ec3f6d60afeda99efd888f175e5fcd4c87b9bcc5c2f5426253a8b506296c8c43309ab2adb5939462541d95e80811e04e706b1498f2c407c7fb234f8cc01a647550ee6b557b35a7e3945381821f4"), + }, + { + desc: "Derived from IEEE 2.8.2 61-byte crypt", + key: dehex("4c973dbc7364621674f8b5b89e5c15511fced9216490fb1c1a2caa0ffe0407e54e953fbe7166601476fab7ba"), + nonce: dehex("7ae8e2ca4ec500012e58495c"), + aad: dehex("68f2e77696ce7ae8e2ca4ec588e54d002e58495c"), + plaintext: dehex("08000f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748490008"), + ciphertext: dehex("b44d072011cd36d272a9b7a98db9aa90cbc5c67b93ddce67c854503214e2e896ec7e9db649ed4bcf6f850aac0223d0cf92c83db80795c3a17ecc1248bb00591712b1ae71e268164196252162810b00"), + }} { + aead, err := newRekeyAEAD(test.key) + if err != nil { + t.Fatal("unexpected failure in newRekeyAEAD: ", err.Error()) + } + if got := aead.Seal(nil, test.nonce, test.plaintext, test.aad); !bytes.Equal(got, test.ciphertext) { + t.Errorf("Unexpected ciphertext for test vector '%s':\nciphertext=%s\nwant= %s", + test.desc, hex.EncodeToString(got), hex.EncodeToString(test.ciphertext)) + } + if got, err := aead.Open(nil, test.nonce, test.ciphertext, test.aad); err != nil || !bytes.Equal(got, test.plaintext) { + t.Errorf("Unexpected plaintext for test vector '%s':\nplaintext=%s (err=%v)\nwant= %s", + test.desc, hex.EncodeToString(got), err, hex.EncodeToString(test.plaintext)) + } + + } +} + +func dehex(s string) []byte { + if len(s) == 0 { + return make([]byte, 0) + } + b, err := hex.DecodeString(s) + if err != nil { + panic(err) + } + return b +} diff --git a/vendor/google.golang.org/grpc/credentials/alts/core/conn/aes128gcm.go b/vendor/google.golang.org/grpc/credentials/alts/core/conn/aes128gcm.go new file mode 100644 index 0000000..0c4fe33 --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/alts/core/conn/aes128gcm.go @@ -0,0 +1,105 @@ +/* + * + * Copyright 2018 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package conn + +import ( + "crypto/aes" + "crypto/cipher" + + "google.golang.org/grpc/credentials/alts/core" +) + +const ( + // Overflow length n in bytes, never encrypt more than 2^(n*8) frames (in + // each direction). + overflowLenAES128GCM = 5 +) + +// aes128gcm is the struct that holds necessary information for ALTS record. +// The counter value is NOT included in the payload during the encryption and +// decryption operations. +type aes128gcm struct { + // inCounter is used in ALTS record to check that incoming counters are + // as expected, since ALTS record guarantees that messages are unwrapped + // in the same order that the peer wrapped them. + inCounter counter + outCounter counter + aead cipher.AEAD +} + +// NewAES128GCM creates an instance that uses aes128gcm for ALTS record. +func NewAES128GCM(side core.Side, key []byte) (ALTSRecordCrypto, error) { + c, err := aes.NewCipher(key) + if err != nil { + return nil, err + } + a, err := cipher.NewGCM(c) + if err != nil { + return nil, err + } + return &aes128gcm{ + inCounter: newInCounter(side, overflowLenAES128GCM), + outCounter: newOutCounter(side, overflowLenAES128GCM), + aead: a, + }, nil +} + +// Encrypt is the encryption function. dst can contain bytes at the beginning of +// the ciphertext that will not be encrypted but will be authenticated. If dst +// has enough capacity to hold these bytes, the ciphertext and the tag, no +// allocation and copy operations will be performed. dst and plaintext do not +// overlap. +func (s *aes128gcm) Encrypt(dst, plaintext []byte) ([]byte, error) { + // If we need to allocate an output buffer, we want to include space for + // GCM tag to avoid forcing ALTS record to reallocate as well. + dlen := len(dst) + dst, out := SliceForAppend(dst, len(plaintext)+GcmTagSize) + seq, err := s.outCounter.Value() + if err != nil { + return nil, err + } + data := out[:len(plaintext)] + copy(data, plaintext) // data may alias plaintext + + // Seal appends the ciphertext and the tag to its first argument and + // returns the updated slice. However, SliceForAppend above ensures that + // dst has enough capacity to avoid a reallocation and copy due to the + // append. + dst = s.aead.Seal(dst[:dlen], seq, data, nil) + s.outCounter.Inc() + return dst, nil +} + +func (s *aes128gcm) EncryptionOverhead() int { + return GcmTagSize +} + +func (s *aes128gcm) Decrypt(dst, ciphertext []byte) ([]byte, error) { + seq, err := s.inCounter.Value() + if err != nil { + return nil, err + } + // If dst is equal to ciphertext[:0], ciphertext storage is reused. + plaintext, err := s.aead.Open(dst, seq, ciphertext, nil) + if err != nil { + return nil, ErrAuth + } + s.inCounter.Inc() + return plaintext, nil +} diff --git a/vendor/google.golang.org/grpc/credentials/alts/core/conn/aes128gcm_test.go b/vendor/google.golang.org/grpc/credentials/alts/core/conn/aes128gcm_test.go new file mode 100644 index 0000000..c2fca4d --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/alts/core/conn/aes128gcm_test.go @@ -0,0 +1,223 @@ +/* + * + * Copyright 2018 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package conn + +import ( + "bytes" + "testing" + + "google.golang.org/grpc/credentials/alts/core" +) + +// cryptoTestVector is struct for a GCM test vector +type cryptoTestVector struct { + key, counter, plaintext, ciphertext, tag []byte + allocateDst bool +} + +// getGCMCryptoPair outputs a client/server pair on aes128gcm. +func getGCMCryptoPair(key []byte, counter []byte, t *testing.T) (ALTSRecordCrypto, ALTSRecordCrypto) { + client, err := NewAES128GCM(core.ClientSide, key) + if err != nil { + t.Fatalf("NewAES128GCM(ClientSide, key) = %v", err) + } + server, err := NewAES128GCM(core.ServerSide, key) + if err != nil { + t.Fatalf("NewAES128GCM(ServerSide, key) = %v", err) + } + // set counter if provided. + if counter != nil { + if counterSide(counter) == core.ClientSide { + client.(*aes128gcm).outCounter = counterFromValue(counter, overflowLenAES128GCM) + server.(*aes128gcm).inCounter = counterFromValue(counter, overflowLenAES128GCM) + } else { + server.(*aes128gcm).outCounter = counterFromValue(counter, overflowLenAES128GCM) + client.(*aes128gcm).inCounter = counterFromValue(counter, overflowLenAES128GCM) + } + } + return client, server +} + +func testGCMEncryptionDecryption(sender ALTSRecordCrypto, receiver ALTSRecordCrypto, test *cryptoTestVector, withCounter bool, t *testing.T) { + // Ciphertext is: counter + encrypted text + tag. + ciphertext := []byte(nil) + if withCounter { + ciphertext = append(ciphertext, test.counter...) + } + ciphertext = append(ciphertext, test.ciphertext...) + ciphertext = append(ciphertext, test.tag...) + + // Decrypt. + if got, err := receiver.Decrypt(nil, ciphertext); err != nil || !bytes.Equal(got, test.plaintext) { + t.Errorf("key=%v\ncounter=%v\ntag=%v\nciphertext=%v\nDecrypt = %v, %v\nwant: %v", + test.key, test.counter, test.tag, test.ciphertext, got, err, test.plaintext) + } + + // Encrypt. + var dst []byte + if test.allocateDst { + dst = make([]byte, len(test.plaintext)+sender.EncryptionOverhead()) + } + if got, err := sender.Encrypt(dst[:0], test.plaintext); err != nil || !bytes.Equal(got, ciphertext) { + t.Errorf("key=%v\ncounter=%v\nplaintext=%v\nEncrypt = %v, %v\nwant: %v", + test.key, test.counter, test.plaintext, got, err, ciphertext) + } +} + +// Test encrypt and decrypt using test vectors for aes128gcm. +func TestAES128GCMEncrypt(t *testing.T) { + for _, test := range []cryptoTestVector{ + { + key: dehex("11754cd72aec309bf52f7687212e8957"), + counter: dehex("3c819d9a9bed087615030b65"), + plaintext: nil, + ciphertext: nil, + tag: dehex("250327c674aaf477aef2675748cf6971"), + allocateDst: false, + }, + { + key: dehex("ca47248ac0b6f8372a97ac43508308ed"), + counter: dehex("ffd2b598feabc9019262d2be"), + plaintext: nil, + ciphertext: nil, + tag: dehex("60d20404af527d248d893ae495707d1a"), + allocateDst: false, + }, + { + key: dehex("7fddb57453c241d03efbed3ac44e371c"), + counter: dehex("ee283a3fc75575e33efd4887"), + plaintext: dehex("d5de42b461646c255c87bd2962d3b9a2"), + ciphertext: dehex("2ccda4a5415cb91e135c2a0f78c9b2fd"), + tag: dehex("b36d1df9b9d5e596f83e8b7f52971cb3"), + allocateDst: false, + }, + { + key: dehex("ab72c77b97cb5fe9a382d9fe81ffdbed"), + counter: dehex("54cc7dc2c37ec006bcc6d1da"), + plaintext: dehex("007c5e5b3e59df24a7c355584fc1518d"), + ciphertext: dehex("0e1bde206a07a9c2c1b65300f8c64997"), + tag: dehex("2b4401346697138c7a4891ee59867d0c"), + allocateDst: false, + }, + { + key: dehex("11754cd72aec309bf52f7687212e8957"), + counter: dehex("3c819d9a9bed087615030b65"), + plaintext: nil, + ciphertext: nil, + tag: dehex("250327c674aaf477aef2675748cf6971"), + allocateDst: true, + }, + { + key: dehex("ca47248ac0b6f8372a97ac43508308ed"), + counter: dehex("ffd2b598feabc9019262d2be"), + plaintext: nil, + ciphertext: nil, + tag: dehex("60d20404af527d248d893ae495707d1a"), + allocateDst: true, + }, + { + key: dehex("7fddb57453c241d03efbed3ac44e371c"), + counter: dehex("ee283a3fc75575e33efd4887"), + plaintext: dehex("d5de42b461646c255c87bd2962d3b9a2"), + ciphertext: dehex("2ccda4a5415cb91e135c2a0f78c9b2fd"), + tag: dehex("b36d1df9b9d5e596f83e8b7f52971cb3"), + allocateDst: true, + }, + { + key: dehex("ab72c77b97cb5fe9a382d9fe81ffdbed"), + counter: dehex("54cc7dc2c37ec006bcc6d1da"), + plaintext: dehex("007c5e5b3e59df24a7c355584fc1518d"), + ciphertext: dehex("0e1bde206a07a9c2c1b65300f8c64997"), + tag: dehex("2b4401346697138c7a4891ee59867d0c"), + allocateDst: true, + }, + } { + // Test encryption and decryption for aes128gcm. + client, server := getGCMCryptoPair(test.key, test.counter, t) + if counterSide(test.counter) == core.ClientSide { + testGCMEncryptionDecryption(client, server, &test, false, t) + } else { + testGCMEncryptionDecryption(server, client, &test, false, t) + } + } +} + +func testGCMEncryptRoundtrip(client ALTSRecordCrypto, server ALTSRecordCrypto, t *testing.T) { + // Encrypt. + const plaintext = "This is plaintext." + var err error + buf := []byte(plaintext) + buf, err = client.Encrypt(buf[:0], buf) + if err != nil { + t.Fatal("Encrypting with client-side context: unexpected error", err, "\n", + "Plaintext:", []byte(plaintext)) + } + + // Encrypt a second message. + const plaintext2 = "This is a second plaintext." + buf2 := []byte(plaintext2) + buf2, err = client.Encrypt(buf2[:0], buf2) + if err != nil { + t.Fatal("Encrypting with client-side context: unexpected error", err, "\n", + "Plaintext:", []byte(plaintext2)) + } + + // Decryption fails: cannot decrypt second message before first. + if got, err := server.Decrypt(nil, buf2); err == nil { + t.Error("Decrypting client-side ciphertext with a client-side context unexpectedly succeeded; want unexpected counter error:\n", + " Original plaintext:", []byte(plaintext2), "\n", + " Ciphertext:", buf2, "\n", + " Decrypted plaintext:", got) + } + + // Decryption fails: wrong counter space. + if got, err := client.Decrypt(nil, buf); err == nil { + t.Error("Decrypting client-side ciphertext with a client-side context unexpectedly succeeded; want counter space error:\n", + " Original plaintext:", []byte(plaintext), "\n", + " Ciphertext:", buf, "\n", + " Decrypted plaintext:", got) + } + + // Decrypt first message. + ciphertext := append([]byte(nil), buf...) + buf, err = server.Decrypt(buf[:0], buf) + if err != nil || string(buf) != plaintext { + t.Fatal("Decrypting client-side ciphertext with a server-side context did not produce original content:\n", + " Original plaintext:", []byte(plaintext), "\n", + " Ciphertext:", ciphertext, "\n", + " Decryption error:", err, "\n", + " Decrypted plaintext:", buf) + } + + // Decryption fails: replay attack. + if got, err := server.Decrypt(nil, buf); err == nil { + t.Error("Decrypting client-side ciphertext with a client-side context unexpectedly succeeded; want unexpected counter error:\n", + " Original plaintext:", []byte(plaintext), "\n", + " Ciphertext:", buf, "\n", + " Decrypted plaintext:", got) + } +} + +// Test encrypt and decrypt on roundtrip messages for aes128gcm. +func TestAES128GCMEncryptRoundtrip(t *testing.T) { + // Test for aes128gcm. + key := make([]byte, 16) + client, server := getGCMCryptoPair(key, nil, t) + testGCMEncryptRoundtrip(client, server, t) +} diff --git a/vendor/google.golang.org/grpc/credentials/alts/core/conn/aes128gcmrekey.go b/vendor/google.golang.org/grpc/credentials/alts/core/conn/aes128gcmrekey.go new file mode 100644 index 0000000..4b5ecf4 --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/alts/core/conn/aes128gcmrekey.go @@ -0,0 +1,116 @@ +/* + * + * Copyright 2018 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package conn + +import ( + "crypto/cipher" + + "google.golang.org/grpc/credentials/alts/core" +) + +const ( + // Overflow length n in bytes, never encrypt more than 2^(n*8) frames (in + // each direction). + overflowLenAES128GCMRekey = 8 + nonceLen = 12 + aeadKeyLen = 16 + kdfKeyLen = 32 + kdfCounterOffset = 2 + kdfCounterLen = 6 + sizeUint64 = 8 +) + +// aes128gcmRekey is the struct that holds necessary information for ALTS record. +// The counter value is NOT included in the payload during the encryption and +// decryption operations. +type aes128gcmRekey struct { + // inCounter is used in ALTS record to check that incoming counters are + // as expected, since ALTS record guarantees that messages are unwrapped + // in the same order that the peer wrapped them. + inCounter counter + outCounter counter + inAEAD cipher.AEAD + outAEAD cipher.AEAD +} + +// NewAES128GCMRekey creates an instance that uses aes128gcm with rekeying +// for ALTS record. The key argument should be 44 bytes, the first 32 bytes +// are used as a key for HKDF-expand and the remainining 12 bytes are used +// as a random mask for the counter. +func NewAES128GCMRekey(side core.Side, key []byte) (ALTSRecordCrypto, error) { + inCounter := newInCounter(side, overflowLenAES128GCMRekey) + outCounter := newOutCounter(side, overflowLenAES128GCMRekey) + inAEAD, err := newRekeyAEAD(key) + if err != nil { + return nil, err + } + outAEAD, err := newRekeyAEAD(key) + if err != nil { + return nil, err + } + return &aes128gcmRekey{ + inCounter, + outCounter, + inAEAD, + outAEAD, + }, nil +} + +// Encrypt is the encryption function. dst can contain bytes at the beginning of +// the ciphertext that will not be encrypted but will be authenticated. If dst +// has enough capacity to hold these bytes, the ciphertext and the tag, no +// allocation and copy operations will be performed. dst and plaintext do not +// overlap. +func (s *aes128gcmRekey) Encrypt(dst, plaintext []byte) ([]byte, error) { + // If we need to allocate an output buffer, we want to include space for + // GCM tag to avoid forcing ALTS record to reallocate as well. + dlen := len(dst) + dst, out := SliceForAppend(dst, len(plaintext)+GcmTagSize) + seq, err := s.outCounter.Value() + if err != nil { + return nil, err + } + data := out[:len(plaintext)] + copy(data, plaintext) // data may alias plaintext + + // Seal appends the ciphertext and the tag to its first argument and + // returns the updated slice. However, SliceForAppend above ensures that + // dst has enough capacity to avoid a reallocation and copy due to the + // append. + dst = s.outAEAD.Seal(dst[:dlen], seq, data, nil) + s.outCounter.Inc() + return dst, nil +} + +func (s *aes128gcmRekey) EncryptionOverhead() int { + return GcmTagSize +} + +func (s *aes128gcmRekey) Decrypt(dst, ciphertext []byte) ([]byte, error) { + seq, err := s.inCounter.Value() + if err != nil { + return nil, err + } + plaintext, err := s.inAEAD.Open(dst, seq, ciphertext, nil) + if err != nil { + return nil, ErrAuth + } + s.inCounter.Inc() + return plaintext, nil +} diff --git a/vendor/google.golang.org/grpc/credentials/alts/core/conn/aes128gcmrekey_test.go b/vendor/google.golang.org/grpc/credentials/alts/core/conn/aes128gcmrekey_test.go new file mode 100644 index 0000000..9f31a0f --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/alts/core/conn/aes128gcmrekey_test.go @@ -0,0 +1,117 @@ +/* + * + * Copyright 2018 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package conn + +import ( + "testing" + + "google.golang.org/grpc/credentials/alts/core" +) + +// cryptoTestVector is struct for a rekey test vector +type rekeyTestVector struct { + key, nonce, plaintext, ciphertext []byte +} + +// getGCMCryptoPair outputs a client/server pair on aes128gcmRekey. +func getRekeyCryptoPair(key []byte, counter []byte, t *testing.T) (ALTSRecordCrypto, ALTSRecordCrypto) { + client, err := NewAES128GCMRekey(core.ClientSide, key) + if err != nil { + t.Fatalf("NewAES128GCMRekey(ClientSide, key) = %v", err) + } + server, err := NewAES128GCMRekey(core.ServerSide, key) + if err != nil { + t.Fatalf("NewAES128GCMRekey(ServerSide, key) = %v", err) + } + // set counter if provided. + if counter != nil { + if counterSide(counter) == core.ClientSide { + client.(*aes128gcmRekey).outCounter = counterFromValue(counter, overflowLenAES128GCMRekey) + server.(*aes128gcmRekey).inCounter = counterFromValue(counter, overflowLenAES128GCMRekey) + } else { + server.(*aes128gcmRekey).outCounter = counterFromValue(counter, overflowLenAES128GCMRekey) + client.(*aes128gcmRekey).inCounter = counterFromValue(counter, overflowLenAES128GCMRekey) + } + } + return client, server +} + +func testRekeyEncryptRoundtrip(client ALTSRecordCrypto, server ALTSRecordCrypto, t *testing.T) { + // Encrypt. + const plaintext = "This is plaintext." + var err error + buf := []byte(plaintext) + buf, err = client.Encrypt(buf[:0], buf) + if err != nil { + t.Fatal("Encrypting with client-side context: unexpected error", err, "\n", + "Plaintext:", []byte(plaintext)) + } + + // Encrypt a second message. + const plaintext2 = "This is a second plaintext." + buf2 := []byte(plaintext2) + buf2, err = client.Encrypt(buf2[:0], buf2) + if err != nil { + t.Fatal("Encrypting with client-side context: unexpected error", err, "\n", + "Plaintext:", []byte(plaintext2)) + } + + // Decryption fails: cannot decrypt second message before first. + if got, err := server.Decrypt(nil, buf2); err == nil { + t.Error("Decrypting client-side ciphertext with a client-side context unexpectedly succeeded; want unexpected counter error:\n", + " Original plaintext:", []byte(plaintext2), "\n", + " Ciphertext:", buf2, "\n", + " Decrypted plaintext:", got) + } + + // Decryption fails: wrong counter space. + if got, err := client.Decrypt(nil, buf); err == nil { + t.Error("Decrypting client-side ciphertext with a client-side context unexpectedly succeeded; want counter space error:\n", + " Original plaintext:", []byte(plaintext), "\n", + " Ciphertext:", buf, "\n", + " Decrypted plaintext:", got) + } + + // Decrypt first message. + ciphertext := append([]byte(nil), buf...) + buf, err = server.Decrypt(buf[:0], buf) + if err != nil || string(buf) != plaintext { + t.Fatal("Decrypting client-side ciphertext with a server-side context did not produce original content:\n", + " Original plaintext:", []byte(plaintext), "\n", + " Ciphertext:", ciphertext, "\n", + " Decryption error:", err, "\n", + " Decrypted plaintext:", buf) + } + + // Decryption fails: replay attack. + if got, err := server.Decrypt(nil, buf); err == nil { + t.Error("Decrypting client-side ciphertext with a client-side context unexpectedly succeeded; want unexpected counter error:\n", + " Original plaintext:", []byte(plaintext), "\n", + " Ciphertext:", buf, "\n", + " Decrypted plaintext:", got) + } +} + +// Test encrypt and decrypt on roundtrip messages for aes128gcmRekey. +func TestAES128GCMRekeyEncryptRoundtrip(t *testing.T) { + // Test for aes128gcmRekey. + key := make([]byte, 44) + client, server := getRekeyCryptoPair(key, nil, t) + testRekeyEncryptRoundtrip(client, server, t) +} diff --git a/vendor/google.golang.org/grpc/credentials/alts/core/conn/common.go b/vendor/google.golang.org/grpc/credentials/alts/core/conn/common.go new file mode 100644 index 0000000..1795d0c --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/alts/core/conn/common.go @@ -0,0 +1,70 @@ +/* + * + * Copyright 2018 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package conn + +import ( + "encoding/binary" + "errors" + "fmt" +) + +const ( + // GcmTagSize is the GCM tag size is the difference in length between + // plaintext and ciphertext. From crypto/cipher/gcm.go in Go crypto + // library. + GcmTagSize = 16 +) + +// ErrAuth occurs on authentication failure. +var ErrAuth = errors.New("message authentication failed") + +// SliceForAppend takes a slice and a requested number of bytes. It returns a +// slice with the contents of the given slice followed by that many bytes and a +// second slice that aliases into it and contains only the extra bytes. If the +// original slice has sufficient capacity then no allocation is performed. +func SliceForAppend(in []byte, n int) (head, tail []byte) { + if total := len(in) + n; cap(in) >= total { + head = in[:total] + } else { + head = make([]byte, total) + copy(head, in) + } + tail = head[len(in):] + return head, tail +} + +// ParseFramedMsg parse the provided buffer and returns a frame of the format +// msgLength+msg and any remaining bytes in that buffer. +func ParseFramedMsg(b []byte, maxLen uint32) ([]byte, []byte, error) { + // If the size field is not complete, return the provided buffer as + // remaining buffer. + if len(b) < MsgLenFieldSize { + return nil, b, nil + } + msgLenField := b[:MsgLenFieldSize] + length := binary.LittleEndian.Uint32(msgLenField) + if length > maxLen { + return nil, nil, fmt.Errorf("received the frame length %d larger than the limit %d", length, maxLen) + } + if len(b) < int(length)+4 { // account for the first 4 msg length bytes. + // Frame is not complete yet. + return nil, b, nil + } + return b[:MsgLenFieldSize+length], b[MsgLenFieldSize+length:], nil +} diff --git a/vendor/google.golang.org/grpc/credentials/alts/core/conn/counter.go b/vendor/google.golang.org/grpc/credentials/alts/core/conn/counter.go new file mode 100644 index 0000000..754dcfa --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/alts/core/conn/counter.go @@ -0,0 +1,106 @@ +/* + * + * Copyright 2018 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package conn + +import ( + "errors" + + "google.golang.org/grpc/credentials/alts/core" +) + +const counterLen = 12 + +var ( + errInvalidCounter = errors.New("invalid counter") +) + +// counter is a 96-bit, little-endian counter. +type counter struct { + value [counterLen]byte + invalid bool + overflowLen int +} + +// newOutCounter returns an outgoing counter initialized to the starting sequence +// number for the client/server side of a connection. +func newOutCounter(s core.Side, overflowLen int) (c counter) { + c.overflowLen = overflowLen + if s == core.ServerSide { + // Server counters in ALTS record have the little-endian high bit + // set. + c.value[counterLen-1] = 0x80 + } + return +} + +// newInCounter returns an incoming counter initialized to the starting sequence +// number for the client/server side of a connection. This is used in ALTS record +// to check that incoming counters are as expected, since ALTS record guarantees +// that messages are unwrapped in the same order that the peer wrapped them. +func newInCounter(s core.Side, overflowLen int) (c counter) { + c.overflowLen = overflowLen + if s == core.ClientSide { + // Server counters in ALTS record have the little-endian high bit + // set. + c.value[counterLen-1] = 0x80 + } + return +} + +// counterFromValue creates a new counter given an initial value. +func counterFromValue(value []byte, overflowLen int) (c counter) { + c.overflowLen = overflowLen + copy(c.value[:], value) + return +} + +// Value returns the current value of the counter as a byte slice. +func (c *counter) Value() ([]byte, error) { + if c.invalid { + return nil, errInvalidCounter + } + return c.value[:], nil +} + +// Inc increments the counter and checks for overflow. +func (c *counter) Inc() { + // If the counter is already invalid, there is not need to increase it. + if c.invalid { + return + } + i := 0 + for ; i < c.overflowLen; i++ { + c.value[i]++ + if c.value[i] != 0 { + break + } + } + if i == c.overflowLen { + c.invalid = true + } +} + +// counterSide returns the connection side (client/server) a sequence counter is +// associated with. +func counterSide(c []byte) core.Side { + if c[counterLen-1]&0x80 == 0x80 { + return core.ServerSide + } + return core.ClientSide +} diff --git a/vendor/google.golang.org/grpc/credentials/alts/core/conn/counter_test.go b/vendor/google.golang.org/grpc/credentials/alts/core/conn/counter_test.go new file mode 100644 index 0000000..faf5636 --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/alts/core/conn/counter_test.go @@ -0,0 +1,141 @@ +/* + * + * Copyright 2018 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package conn + +import ( + "bytes" + "testing" + + "google.golang.org/grpc/credentials/alts/core" +) + +const ( + testOverflowLen = 5 +) + +func TestCounterSides(t *testing.T) { + for _, side := range []core.Side{core.ClientSide, core.ServerSide} { + outCounter := newOutCounter(side, testOverflowLen) + inCounter := newInCounter(side, testOverflowLen) + for i := 0; i < 1024; i++ { + value, _ := outCounter.Value() + if g, w := counterSide(value), side; g != w { + t.Errorf("after %d iterations, counterSide(outCounter.Value()) = %v, want %v", i, g, w) + break + } + value, _ = inCounter.Value() + if g, w := counterSide(value), side; g == w { + t.Errorf("after %d iterations, counterSide(inCounter.Value()) = %v, want %v", i, g, w) + break + } + outCounter.Inc() + inCounter.Inc() + } + } +} + +func TestCounterInc(t *testing.T) { + for _, test := range []struct { + counter []byte + want []byte + }{ + { + counter: []byte{0x00, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + want: []byte{0x01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + }, + { + counter: []byte{0x00, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x80}, + want: []byte{0x01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x80}, + }, + { + counter: []byte{0xff, 0x00, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + want: []byte{0x00, 0x01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + }, + { + counter: []byte{0x42, 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + want: []byte{0x43, 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + }, + { + counter: []byte{0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + want: []byte{0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + }, + { + counter: []byte{0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80}, + want: []byte{0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80}, + }, + } { + c := counterFromValue(test.counter, overflowLenAES128GCM) + c.Inc() + value, _ := c.Value() + if g, w := value, test.want; !bytes.Equal(g, w) || c.invalid { + t.Errorf("counter(%v).Inc() =\n%v, want\n%v", test.counter, g, w) + } + } +} + +func TestRolloverCounter(t *testing.T) { + for _, test := range []struct { + desc string + value []byte + overflowLen int + }{ + { + desc: "testing overflow without rekeying 1", + value: []byte{0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80}, + overflowLen: 5, + }, + { + desc: "testing overflow without rekeying 2", + value: []byte{0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + overflowLen: 5, + }, + { + desc: "testing overflow for rekeying mode 1", + value: []byte{0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x80}, + overflowLen: 8, + }, + { + desc: "testing overflow for rekeying mode 2", + value: []byte{0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00}, + overflowLen: 8, + }, + } { + c := counterFromValue(test.value, overflowLenAES128GCM) + + // First Inc() + Value() should work. + c.Inc() + _, err := c.Value() + if err != nil { + t.Errorf("%v: first Inc() + Value() unexpectedly failed: %v, want error", test.desc, err) + } + // Second Inc() + Value() should fail. + c.Inc() + _, err = c.Value() + if err != errInvalidCounter { + t.Errorf("%v: second Inc() + Value() unexpectedly succeeded: want %v", test.desc, errInvalidCounter) + } + // Third Inc() + Value() should also fail because the counter is + // already in an invalid state. + c.Inc() + _, err = c.Value() + if err != errInvalidCounter { + t.Errorf("%v: Third Inc() + Value() unexpectedly succeeded: want %v", test.desc, errInvalidCounter) + } + } +} diff --git a/vendor/google.golang.org/grpc/credentials/alts/core/conn/record.go b/vendor/google.golang.org/grpc/credentials/alts/core/conn/record.go new file mode 100644 index 0000000..cb514eb --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/alts/core/conn/record.go @@ -0,0 +1,271 @@ +/* + * + * Copyright 2018 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Package conn contains an implementation of a secure channel created by gRPC +// handshakers. +package conn + +import ( + "encoding/binary" + "fmt" + "math" + "net" + + "google.golang.org/grpc/credentials/alts/core" +) + +// ALTSRecordCrypto is the interface for gRPC ALTS record protocol. +type ALTSRecordCrypto interface { + // Encrypt encrypts the plaintext and computes the tag (if any) of dst + // and plaintext, dst and plaintext do not overlap. + Encrypt(dst, plaintext []byte) ([]byte, error) + // EncryptionOverhead returns the tag size (if any) in bytes. + EncryptionOverhead() int + // Decrypt decrypts ciphertext and verify the tag (if any). dst and + // ciphertext may alias exactly or not at all. To reuse ciphertext's + // storage for the decrypted output, use ciphertext[:0] as dst. + Decrypt(dst, ciphertext []byte) ([]byte, error) +} + +// ALTSRecordFunc is a function type for factory functions that create +// ALTSRecordCrypto instances. +type ALTSRecordFunc func(s core.Side, keyData []byte) (ALTSRecordCrypto, error) + +const ( + // MsgLenFieldSize is the byte size of the frame length field of a + // framed message. + MsgLenFieldSize = 4 + // The byte size of the message type field of a framed message. + msgTypeFieldSize = 4 + // The bytes size limit for a ALTS record message. + altsRecordLengthLimit = 1024 * 1024 // 1 MiB + // The default bytes size of a ALTS record message. + altsRecordDefaultLength = 4 * 1024 // 4KiB + // Message type value included in ALTS record framing. + altsRecordMsgType = uint32(0x06) + // The initial write buffer size. + altsWriteBufferInitialSize = 32 * 1024 // 32KiB + // The maximum write buffer size. This *must* be multiple of + // altsRecordDefaultLength. + altsWriteBufferMaxSize = 512 * 1024 // 512KiB +) + +var ( + protocols = make(map[string]ALTSRecordFunc) +) + +// RegisterProtocol register a ALTS record encryption protocol. +func RegisterProtocol(protocol string, f ALTSRecordFunc) error { + if _, ok := protocols[protocol]; ok { + return fmt.Errorf("protocol %v is already registered", protocol) + } + protocols[protocol] = f + return nil +} + +// conn represents a secured connection. It implements the net.Conn interface. +type conn struct { + net.Conn + crypto ALTSRecordCrypto + // buf holds data that has been read from the connection and decrypted, + // but has not yet been returned by Read. + buf []byte + payloadLengthLimit int + // protected holds data read from the network but have not yet been + // decrypted. This data might not compose a complete frame. + protected []byte + // writeBuf is a buffer used to contain encrypted frames before being + // written to the network. + writeBuf []byte + // nextFrame stores the next frame (in protected buffer) info. + nextFrame []byte + // overhead is the calculated overhead of each frame. + overhead int +} + +// NewConn creates a new secure channel instance given the other party role and +// handshaking result. +func NewConn(c net.Conn, side core.Side, recordProtocol string, key []byte, protected []byte) (net.Conn, error) { + newCrypto := protocols[recordProtocol] + if newCrypto == nil { + return nil, fmt.Errorf("negotiated unknown next_protocol %q", recordProtocol) + } + crypto, err := newCrypto(side, key) + if err != nil { + return nil, fmt.Errorf("protocol %q: %v", recordProtocol, err) + } + overhead := MsgLenFieldSize + msgTypeFieldSize + crypto.EncryptionOverhead() + payloadLengthLimit := altsRecordDefaultLength - overhead + if protected == nil { + // We pre-allocate protected to be of size + // 2*altsRecordDefaultLength-1 during initialization. We only + // read from the network into protected when protected does not + // contain a complete frame, which is at most + // altsRecordDefaultLength-1 (bytes). And we read at most + // altsRecordDefaultLength (bytes) data into protected at one + // time. Therefore, 2*altsRecordDefaultLength-1 is large enough + // to buffer data read from the network. + protected = make([]byte, 0, 2*altsRecordDefaultLength-1) + } + + altsConn := &conn{ + Conn: c, + crypto: crypto, + payloadLengthLimit: payloadLengthLimit, + protected: protected, + writeBuf: make([]byte, altsWriteBufferInitialSize), + nextFrame: protected, + overhead: overhead, + } + return altsConn, nil +} + +// Read reads and decrypts a frame from the underlying connection, and copies the +// decrypted payload into b. If the size of the payload is greater than len(b), +// Read retains the remaining bytes in an internal buffer, and subsequent calls +// to Read will read from this buffer until it is exhausted. +func (p *conn) Read(b []byte) (n int, err error) { + if len(p.buf) == 0 { + var framedMsg []byte + framedMsg, p.nextFrame, err = ParseFramedMsg(p.nextFrame, altsRecordLengthLimit) + if err != nil { + return n, err + } + // Check whether the next frame to be decrypted has been + // completely received yet. + if len(framedMsg) == 0 { + copy(p.protected, p.nextFrame) + p.protected = p.protected[:len(p.nextFrame)] + // Always copy next incomplete frame to the beginning of + // the protected buffer and reset nextFrame to it. + p.nextFrame = p.protected + } + // Check whether a complete frame has been received yet. + for len(framedMsg) == 0 { + if len(p.protected) == cap(p.protected) { + tmp := make([]byte, len(p.protected), cap(p.protected)+altsRecordDefaultLength) + copy(tmp, p.protected) + p.protected = tmp + } + n, err = p.Conn.Read(p.protected[len(p.protected):min(cap(p.protected), len(p.protected)+altsRecordDefaultLength)]) + if err != nil { + return 0, err + } + p.protected = p.protected[:len(p.protected)+n] + framedMsg, p.nextFrame, err = ParseFramedMsg(p.protected, altsRecordLengthLimit) + if err != nil { + return 0, err + } + } + // Now we have a complete frame, decrypted it. + msg := framedMsg[MsgLenFieldSize:] + msgType := binary.LittleEndian.Uint32(msg[:msgTypeFieldSize]) + if msgType&0xff != altsRecordMsgType { + return 0, fmt.Errorf("received frame with incorrect message type %v, expected lower byte %v", + msgType, altsRecordMsgType) + } + ciphertext := msg[msgTypeFieldSize:] + + // Decrypt requires that if the dst and ciphertext alias, they + // must alias exactly. Code here used to use msg[:0], but msg + // starts MsgLenFieldSize+msgTypeFieldSize bytes earlier than + // ciphertext, so they alias inexactly. Using ciphertext[:0] + // arranges the appropriate aliasing without needing to copy + // ciphertext or use a separate destination buffer. For more info + // check: https://golang.org/pkg/crypto/cipher/#AEAD. + p.buf, err = p.crypto.Decrypt(ciphertext[:0], ciphertext) + if err != nil { + return 0, err + } + } + + n = copy(b, p.buf) + p.buf = p.buf[n:] + return n, nil +} + +// Write encrypts, frames, and writes bytes from b to the underlying connection. +func (p *conn) Write(b []byte) (n int, err error) { + n = len(b) + // Calculate the output buffer size with framing and encryption overhead. + numOfFrames := int(math.Ceil(float64(len(b)) / float64(p.payloadLengthLimit))) + size := len(b) + numOfFrames*p.overhead + // If writeBuf is too small, increase its size up to the maximum size. + partialBSize := len(b) + if size > altsWriteBufferMaxSize { + size = altsWriteBufferMaxSize + const numOfFramesInMaxWriteBuf = altsWriteBufferMaxSize / altsRecordDefaultLength + partialBSize = numOfFramesInMaxWriteBuf * p.payloadLengthLimit + } + if len(p.writeBuf) < size { + p.writeBuf = make([]byte, size) + } + + for partialBStart := 0; partialBStart < len(b); partialBStart += partialBSize { + partialBEnd := partialBStart + partialBSize + if partialBEnd > len(b) { + partialBEnd = len(b) + } + partialB := b[partialBStart:partialBEnd] + writeBufIndex := 0 + for len(partialB) > 0 { + payloadLen := len(partialB) + if payloadLen > p.payloadLengthLimit { + payloadLen = p.payloadLengthLimit + } + buf := partialB[:payloadLen] + partialB = partialB[payloadLen:] + + // Write buffer contains: length, type, payload, and tag + // if any. + + // 1. Fill in type field. + msg := p.writeBuf[writeBufIndex+MsgLenFieldSize:] + binary.LittleEndian.PutUint32(msg, altsRecordMsgType) + + // 2. Encrypt the payload and create a tag if any. + msg, err = p.crypto.Encrypt(msg[:msgTypeFieldSize], buf) + if err != nil { + return n, err + } + + // 3. Fill in the size field. + binary.LittleEndian.PutUint32(p.writeBuf[writeBufIndex:], uint32(len(msg))) + + // 4. Increase writeBufIndex. + writeBufIndex += len(buf) + p.overhead + } + nn, err := p.Conn.Write(p.writeBuf[:writeBufIndex]) + if err != nil { + // We need to calculate the actual data size that was + // written. This means we need to remove header, + // encryption overheads, and any partially-written + // frame data. + numOfWrittenFrames := int(math.Floor(float64(nn) / float64(altsRecordDefaultLength))) + return partialBStart + numOfWrittenFrames*p.payloadLengthLimit, err + } + } + return n, nil +} + +func min(a, b int) int { + if a < b { + return a + } + return b +} diff --git a/vendor/google.golang.org/grpc/credentials/alts/core/conn/record_test.go b/vendor/google.golang.org/grpc/credentials/alts/core/conn/record_test.go new file mode 100644 index 0000000..5c3b8e2 --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/alts/core/conn/record_test.go @@ -0,0 +1,274 @@ +/* + * + * Copyright 2018 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package conn + +import ( + "bytes" + "encoding/binary" + "fmt" + "io" + "math" + "net" + "reflect" + "testing" + + "google.golang.org/grpc/credentials/alts/core" +) + +var ( + nextProtocols = []string{"ALTSRP_GCM_AES128"} + altsRecordFuncs = map[string]ALTSRecordFunc{ + // ALTS handshaker protocols. + "ALTSRP_GCM_AES128": func(s core.Side, keyData []byte) (ALTSRecordCrypto, error) { + return NewAES128GCM(s, keyData) + }, + } +) + +func init() { + for protocol, f := range altsRecordFuncs { + if err := RegisterProtocol(protocol, f); err != nil { + panic(err) + } + } +} + +// testConn mimics a net.Conn to the peer. +type testConn struct { + net.Conn + in *bytes.Buffer + out *bytes.Buffer +} + +func (c *testConn) Read(b []byte) (n int, err error) { + return c.in.Read(b) +} + +func (c *testConn) Write(b []byte) (n int, err error) { + return c.out.Write(b) +} + +func (c *testConn) Close() error { + return nil +} + +func newTestALTSRecordConn(in, out *bytes.Buffer, side core.Side, np string) *conn { + key := []byte{ + // 16 arbitrary bytes. + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xd2, 0x4c, 0xce, 0x4f, 0x49} + tc := testConn{ + in: in, + out: out, + } + c, err := NewConn(&tc, side, np, key, nil) + if err != nil { + panic(fmt.Sprintf("Unexpected error creating test ALTS record connection: %v", err)) + } + return c.(*conn) +} + +func newConnPair(np string) (client, server *conn) { + clientBuf := new(bytes.Buffer) + serverBuf := new(bytes.Buffer) + clientConn := newTestALTSRecordConn(clientBuf, serverBuf, core.ClientSide, np) + serverConn := newTestALTSRecordConn(serverBuf, clientBuf, core.ServerSide, np) + return clientConn, serverConn +} + +func testPingPong(t *testing.T, np string) { + clientConn, serverConn := newConnPair(np) + clientMsg := []byte("Client Message") + if n, err := clientConn.Write(clientMsg); n != len(clientMsg) || err != nil { + t.Fatalf("Client Write() = %v, %v; want %v, ", n, err, len(clientMsg)) + } + rcvClientMsg := make([]byte, len(clientMsg)) + if n, err := serverConn.Read(rcvClientMsg); n != len(rcvClientMsg) || err != nil { + t.Fatalf("Server Read() = %v, %v; want %v, ", n, err, len(rcvClientMsg)) + } + if !reflect.DeepEqual(clientMsg, rcvClientMsg) { + t.Fatalf("Client Write()/Server Read() = %v, want %v", rcvClientMsg, clientMsg) + } + + serverMsg := []byte("Server Message") + if n, err := serverConn.Write(serverMsg); n != len(serverMsg) || err != nil { + t.Fatalf("Server Write() = %v, %v; want %v, ", n, err, len(serverMsg)) + } + rcvServerMsg := make([]byte, len(serverMsg)) + if n, err := clientConn.Read(rcvServerMsg); n != len(rcvServerMsg) || err != nil { + t.Fatalf("Client Read() = %v, %v; want %v, ", n, err, len(rcvServerMsg)) + } + if !reflect.DeepEqual(serverMsg, rcvServerMsg) { + t.Fatalf("Server Write()/Client Read() = %v, want %v", rcvServerMsg, serverMsg) + } +} + +func TestPingPong(t *testing.T) { + for _, np := range nextProtocols { + testPingPong(t, np) + } +} + +func testSmallReadBuffer(t *testing.T, np string) { + clientConn, serverConn := newConnPair(np) + msg := []byte("Very Important Message") + if n, err := clientConn.Write(msg); err != nil { + t.Fatalf("Write() = %v, %v; want %v, ", n, err, len(msg)) + } + rcvMsg := make([]byte, len(msg)) + n := 2 // Arbitrary index to break rcvMsg in two. + rcvMsg1 := rcvMsg[:n] + rcvMsg2 := rcvMsg[n:] + if n, err := serverConn.Read(rcvMsg1); n != len(rcvMsg1) || err != nil { + t.Fatalf("Read() = %v, %v; want %v, ", n, err, len(rcvMsg1)) + } + if n, err := serverConn.Read(rcvMsg2); n != len(rcvMsg2) || err != nil { + t.Fatalf("Read() = %v, %v; want %v, ", n, err, len(rcvMsg2)) + } + if !reflect.DeepEqual(msg, rcvMsg) { + t.Fatalf("Write()/Read() = %v, want %v", rcvMsg, msg) + } +} + +func TestSmallReadBuffer(t *testing.T) { + for _, np := range nextProtocols { + testSmallReadBuffer(t, np) + } +} + +func testLargeMsg(t *testing.T, np string) { + clientConn, serverConn := newConnPair(np) + // msgLen is such that the length in the framing is larger than the + // default size of one frame. + msgLen := altsRecordDefaultLength - msgTypeFieldSize - clientConn.crypto.EncryptionOverhead() + 1 + msg := make([]byte, msgLen) + if n, err := clientConn.Write(msg); n != len(msg) || err != nil { + t.Fatalf("Write() = %v, %v; want %v, ", n, err, len(msg)) + } + rcvMsg := make([]byte, len(msg)) + if n, err := io.ReadFull(serverConn, rcvMsg); n != len(rcvMsg) || err != nil { + t.Fatalf("Read() = %v, %v; want %v, ", n, err, len(rcvMsg)) + } + if !reflect.DeepEqual(msg, rcvMsg) { + t.Fatalf("Write()/Server Read() = %v, want %v", rcvMsg, msg) + } +} + +func TestLargeMsg(t *testing.T) { + for _, np := range nextProtocols { + testLargeMsg(t, np) + } +} + +func testIncorrectMsgType(t *testing.T, np string) { + // framedMsg is an empty ciphertext with correct framing but wrong + // message type. + framedMsg := make([]byte, MsgLenFieldSize+msgTypeFieldSize) + binary.LittleEndian.PutUint32(framedMsg[:MsgLenFieldSize], msgTypeFieldSize) + wrongMsgType := uint32(0x22) + binary.LittleEndian.PutUint32(framedMsg[MsgLenFieldSize:], wrongMsgType) + + in := bytes.NewBuffer(framedMsg) + c := newTestALTSRecordConn(in, nil, core.ClientSide, np) + b := make([]byte, 1) + if n, err := c.Read(b); n != 0 || err == nil { + t.Fatalf("Read() = , want %v", fmt.Errorf("received frame with incorrect message type %v", wrongMsgType)) + } +} + +func TestIncorrectMsgType(t *testing.T) { + for _, np := range nextProtocols { + testIncorrectMsgType(t, np) + } +} + +func testFrameTooLarge(t *testing.T, np string) { + buf := new(bytes.Buffer) + clientConn := newTestALTSRecordConn(nil, buf, core.ClientSide, np) + serverConn := newTestALTSRecordConn(buf, nil, core.ServerSide, np) + // payloadLen is such that the length in the framing is larger than + // allowed in one frame. + payloadLen := altsRecordLengthLimit - msgTypeFieldSize - clientConn.crypto.EncryptionOverhead() + 1 + payload := make([]byte, payloadLen) + c, err := clientConn.crypto.Encrypt(nil, payload) + if err != nil { + t.Fatalf(fmt.Sprintf("Error encrypting message: %v", err)) + } + msgLen := msgTypeFieldSize + len(c) + framedMsg := make([]byte, MsgLenFieldSize+msgLen) + binary.LittleEndian.PutUint32(framedMsg[:MsgLenFieldSize], uint32(msgTypeFieldSize+len(c))) + msg := framedMsg[MsgLenFieldSize:] + binary.LittleEndian.PutUint32(msg[:msgTypeFieldSize], altsRecordMsgType) + copy(msg[msgTypeFieldSize:], c) + if _, err = buf.Write(framedMsg); err != nil { + t.Fatal(fmt.Sprintf("Unexpected error writing to buffer: %v", err)) + } + b := make([]byte, 1) + if n, err := serverConn.Read(b); n != 0 || err == nil { + t.Fatalf("Read() = , want %v", fmt.Errorf("received the frame length %d larger than the limit %d", altsRecordLengthLimit+1, altsRecordLengthLimit)) + } +} + +func TestFrameTooLarge(t *testing.T) { + for _, np := range nextProtocols { + testFrameTooLarge(t, np) + } +} + +func testWriteLargeData(t *testing.T, np string) { + // Test sending and receiving messages larger than the maximum write + // buffer size. + clientConn, serverConn := newConnPair(np) + // Message size is intentionally chosen to not be multiple of + // payloadLengthLimtit. + msgSize := altsWriteBufferMaxSize + (100 * 1024) + clientMsg := make([]byte, msgSize) + for i := 0; i < msgSize; i++ { + clientMsg[i] = 0xAA + } + if n, err := clientConn.Write(clientMsg); n != len(clientMsg) || err != nil { + t.Fatalf("Client Write() = %v, %v; want %v, ", n, err, len(clientMsg)) + } + // We need to keep reading until the entire message is received. The + // reason we set all bytes of the message to a value other than zero is + // to avoid ambiguous zero-init value of rcvClientMsg buffer and the + // actual received data. + rcvClientMsg := make([]byte, 0, msgSize) + numberOfExpectedFrames := int(math.Ceil(float64(msgSize) / float64(serverConn.payloadLengthLimit))) + for i := 0; i < numberOfExpectedFrames; i++ { + expectedRcvSize := serverConn.payloadLengthLimit + if i == numberOfExpectedFrames-1 { + // Last frame might be smaller. + expectedRcvSize = msgSize % serverConn.payloadLengthLimit + } + tmpBuf := make([]byte, expectedRcvSize) + if n, err := serverConn.Read(tmpBuf); n != len(tmpBuf) || err != nil { + t.Fatalf("Server Read() = %v, %v; want %v, ", n, err, len(tmpBuf)) + } + rcvClientMsg = append(rcvClientMsg, tmpBuf...) + } + if !reflect.DeepEqual(clientMsg, rcvClientMsg) { + t.Fatalf("Client Write()/Server Read() = %v, want %v", rcvClientMsg, clientMsg) + } +} + +func TestWriteLargeData(t *testing.T) { + for _, np := range nextProtocols { + testWriteLargeData(t, np) + } +} diff --git a/vendor/google.golang.org/grpc/credentials/alts/core/handshaker/handshaker.go b/vendor/google.golang.org/grpc/credentials/alts/core/handshaker/handshaker.go new file mode 100644 index 0000000..d656846 --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/alts/core/handshaker/handshaker.go @@ -0,0 +1,364 @@ +/* + * + * Copyright 2018 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Package handshaker provides ALTS handshaking functionality for GCP. +package handshaker + +import ( + "errors" + "fmt" + "io" + "net" + "sync" + + "golang.org/x/net/context" + grpc "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/credentials/alts/core" + "google.golang.org/grpc/credentials/alts/core/authinfo" + "google.golang.org/grpc/credentials/alts/core/conn" + altspb "google.golang.org/grpc/credentials/alts/core/proto/grpc_gcp" +) + +const ( + // The maximum byte size of receive frames. + frameLimit = 64 * 1024 // 64 KB + rekeyRecordProtocolName = "ALTSRP_GCM_AES128_REKEY" + // maxPendingHandshakes represents the maximum number of concurrent + // handshakes. + maxPendingHandshakes = 100 +) + +var ( + hsProtocol = altspb.HandshakeProtocol_ALTS + appProtocols = []string{"grpc"} + recordProtocols = []string{rekeyRecordProtocolName} + keyLength = map[string]int{ + rekeyRecordProtocolName: 44, + } + altsRecordFuncs = map[string]conn.ALTSRecordFunc{ + // ALTS handshaker protocols. + rekeyRecordProtocolName: func(s core.Side, keyData []byte) (conn.ALTSRecordCrypto, error) { + return conn.NewAES128GCMRekey(s, keyData) + }, + } + // control number of concurrent created (but not closed) handshakers. + mu sync.Mutex + concurrentHandshakes = int64(0) + // errDropped occurs when maxPendingHandshakes is reached. + errDropped = errors.New("maximum number of concurrent ALTS handshakes is reached") +) + +func init() { + for protocol, f := range altsRecordFuncs { + if err := conn.RegisterProtocol(protocol, f); err != nil { + panic(err) + } + } +} + +func acquire(n int64) bool { + mu.Lock() + success := maxPendingHandshakes-concurrentHandshakes >= n + if success { + concurrentHandshakes += n + } + mu.Unlock() + return success +} + +func release(n int64) { + mu.Lock() + concurrentHandshakes -= n + if concurrentHandshakes < 0 { + mu.Unlock() + panic("bad release") + } + mu.Unlock() +} + +// ClientHandshakerOptions contains the client handshaker options that can +// provided by the caller. +type ClientHandshakerOptions struct { + // ClientIdentity is the handshaker client local identity. + ClientIdentity *altspb.Identity + // TargetName is the server service account name for secure name + // checking. + TargetName string + // TargetServiceAccounts contains a list of expected target service + // accounts. One of these accounts should match one of the accounts in + // the handshaker results. Otherwise, the handshake fails. + TargetServiceAccounts []string + // RPCVersions specifies the gRPC versions accepted by the client. + RPCVersions *altspb.RpcProtocolVersions +} + +// ServerHandshakerOptions contains the server handshaker options that can +// provided by the caller. +type ServerHandshakerOptions struct { + // RPCVersions specifies the gRPC versions accepted by the server. + RPCVersions *altspb.RpcProtocolVersions +} + +// DefaultClientHandshakerOptions returns the default client handshaker options. +func DefaultClientHandshakerOptions() *ClientHandshakerOptions { + return &ClientHandshakerOptions{} +} + +// DefaultServerHandshakerOptions returns the default client handshaker options. +func DefaultServerHandshakerOptions() *ServerHandshakerOptions { + return &ServerHandshakerOptions{} +} + +// TODO: add support for future local and remote endpoint in both client options +// and server options (server options struct does not exist now. When +// caller can provide endpoints, it should be created. + +// altsHandshaker is used to complete a ALTS handshaking between client and +// server. This handshaker talks to the ALTS handshaker service in the metadata +// server. +type altsHandshaker struct { + // RPC stream used to access the ALTS Handshaker service. + stream altspb.HandshakerService_DoHandshakeClient + // the connection to the peer. + conn net.Conn + // client handshake options. + clientOpts *ClientHandshakerOptions + // server handshake options. + serverOpts *ServerHandshakerOptions + // defines the side doing the handshake, client or server. + side core.Side +} + +// NewClientHandshaker creates a ALTS handshaker for GCP which contains an RPC +// stub created using the passed conn and used to talk to the ALTS Handshaker +// service in the metadata server. +func NewClientHandshaker(ctx context.Context, conn *grpc.ClientConn, c net.Conn, opts *ClientHandshakerOptions) (core.Handshaker, error) { + stream, err := altspb.NewHandshakerServiceClient(conn).DoHandshake(ctx, grpc.FailFast(false)) + if err != nil { + return nil, err + } + return &altsHandshaker{ + stream: stream, + conn: c, + clientOpts: opts, + side: core.ClientSide, + }, nil +} + +// NewServerHandshaker creates a ALTS handshaker for GCP which contains an RPC +// stub created using the passed conn and used to talk to the ALTS Handshaker +// service in the metadata server. +func NewServerHandshaker(ctx context.Context, conn *grpc.ClientConn, c net.Conn, opts *ServerHandshakerOptions) (core.Handshaker, error) { + stream, err := altspb.NewHandshakerServiceClient(conn).DoHandshake(ctx, grpc.FailFast(false)) + if err != nil { + return nil, err + } + return &altsHandshaker{ + stream: stream, + conn: c, + serverOpts: opts, + side: core.ServerSide, + }, nil +} + +// ClientHandshake starts and completes a client ALTS handshaking for GCP. Once +// done, ClientHandshake returns a secure connection. +func (h *altsHandshaker) ClientHandshake(ctx context.Context) (net.Conn, credentials.AuthInfo, error) { + if !acquire(1) { + return nil, nil, errDropped + } + defer release(1) + + if h.side != core.ClientSide { + return nil, nil, errors.New("only handshakers created using NewClientHandshaker can perform a client handshaker") + } + + // Create target identities from service account list. + targetIdentities := make([]*altspb.Identity, 0, len(h.clientOpts.TargetServiceAccounts)) + for _, account := range h.clientOpts.TargetServiceAccounts { + targetIdentities = append(targetIdentities, &altspb.Identity{ + IdentityOneof: &altspb.Identity_ServiceAccount{ + ServiceAccount: account, + }, + }) + } + req := &altspb.HandshakerReq{ + ReqOneof: &altspb.HandshakerReq_ClientStart{ + ClientStart: &altspb.StartClientHandshakeReq{ + HandshakeSecurityProtocol: hsProtocol, + ApplicationProtocols: appProtocols, + RecordProtocols: recordProtocols, + TargetIdentities: targetIdentities, + LocalIdentity: h.clientOpts.ClientIdentity, + TargetName: h.clientOpts.TargetName, + RpcVersions: h.clientOpts.RPCVersions, + }, + }, + } + + conn, result, err := h.doHandshake(req) + if err != nil { + return nil, nil, err + } + authInfo := authinfo.New(result) + return conn, authInfo, nil +} + +// ServerHandshake starts and completes a server ALTS handshaking for GCP. Once +// done, ServerHandshake returns a secure connection. +func (h *altsHandshaker) ServerHandshake(ctx context.Context) (net.Conn, credentials.AuthInfo, error) { + if !acquire(1) { + return nil, nil, errDropped + } + defer release(1) + + if h.side != core.ServerSide { + return nil, nil, errors.New("only handshakers created using NewServerHandshaker can perform a server handshaker") + } + + p := make([]byte, frameLimit) + n, err := h.conn.Read(p) + if err != nil { + return nil, nil, err + } + + // Prepare server parameters. + // TODO: currently only ALTS parameters are provided. Might need to use + // more options in the future. + params := make(map[int32]*altspb.ServerHandshakeParameters) + params[int32(altspb.HandshakeProtocol_ALTS)] = &altspb.ServerHandshakeParameters{ + RecordProtocols: recordProtocols, + } + req := &altspb.HandshakerReq{ + ReqOneof: &altspb.HandshakerReq_ServerStart{ + ServerStart: &altspb.StartServerHandshakeReq{ + ApplicationProtocols: appProtocols, + HandshakeParameters: params, + InBytes: p[:n], + RpcVersions: h.serverOpts.RPCVersions, + }, + }, + } + + conn, result, err := h.doHandshake(req) + if err != nil { + return nil, nil, err + } + authInfo := authinfo.New(result) + return conn, authInfo, nil +} + +func (h *altsHandshaker) doHandshake(req *altspb.HandshakerReq) (net.Conn, *altspb.HandshakerResult, error) { + resp, err := h.accessHandshakerService(req) + if err != nil { + return nil, nil, err + } + // Check of the returned status is an error. + if resp.GetStatus() != nil { + if got, want := resp.GetStatus().Code, uint32(codes.OK); got != want { + return nil, nil, fmt.Errorf("%v", resp.GetStatus().Details) + } + } + + var extra []byte + if req.GetServerStart() != nil { + extra = req.GetServerStart().GetInBytes()[resp.GetBytesConsumed():] + } + result, extra, err := h.processUntilDone(resp, extra) + if err != nil { + return nil, nil, err + } + // The handshaker returns a 128 bytes key. It should be truncated based + // on the returned record protocol. + keyLen, ok := keyLength[result.RecordProtocol] + if !ok { + return nil, nil, fmt.Errorf("unknown resulted record protocol %v", result.RecordProtocol) + } + sc, err := conn.NewConn(h.conn, h.side, result.GetRecordProtocol(), result.KeyData[:keyLen], extra) + if err != nil { + return nil, nil, err + } + return sc, result, nil +} + +func (h *altsHandshaker) accessHandshakerService(req *altspb.HandshakerReq) (*altspb.HandshakerResp, error) { + if err := h.stream.Send(req); err != nil { + return nil, err + } + resp, err := h.stream.Recv() + if err != nil { + return nil, err + } + return resp, nil +} + +// processUntilDone processes the handshake until the handshaker service returns +// the results. Handshaker service takes care of frame parsing, so we read +// whatever received from the network and send it to the handshaker service. +func (h *altsHandshaker) processUntilDone(resp *altspb.HandshakerResp, extra []byte) (*altspb.HandshakerResult, []byte, error) { + for { + if len(resp.OutFrames) > 0 { + if _, err := h.conn.Write(resp.OutFrames); err != nil { + return nil, nil, err + } + } + if resp.Result != nil { + return resp.Result, extra, nil + } + buf := make([]byte, frameLimit) + n, err := h.conn.Read(buf) + if err != nil && err != io.EOF { + return nil, nil, err + } + // If there is nothing to send to the handshaker service, and + // nothing is received from the peer, then we are stuck. + // This covers the case when the peer is not responding. Note + // that handshaker service connection issues are caught in + // accessHandshakerService before we even get here. + if len(resp.OutFrames) == 0 && n == 0 { + return nil, nil, core.PeerNotRespondingError + } + // Append extra bytes from the previous interaction with the + // handshaker service with the current buffer read from conn. + p := append(extra, buf[:n]...) + resp, err = h.accessHandshakerService(&altspb.HandshakerReq{ + ReqOneof: &altspb.HandshakerReq_Next{ + Next: &altspb.NextHandshakeMessageReq{ + InBytes: p, + }, + }, + }) + if err != nil { + return nil, nil, err + } + // Set extra based on handshaker service response. + if n == 0 { + extra = nil + } else { + extra = buf[resp.GetBytesConsumed():n] + } + } +} + +// Close terminates the Handshaker. It should be called when the caller obtains +// the secure connection. +func (h *altsHandshaker) Close() { + h.stream.CloseSend() +} diff --git a/vendor/google.golang.org/grpc/credentials/alts/core/handshaker/handshaker_test.go b/vendor/google.golang.org/grpc/credentials/alts/core/handshaker/handshaker_test.go new file mode 100644 index 0000000..322fcb4 --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/alts/core/handshaker/handshaker_test.go @@ -0,0 +1,261 @@ +/* + * + * Copyright 2018 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package handshaker + +import ( + "bytes" + "testing" + "time" + + "golang.org/x/net/context" + grpc "google.golang.org/grpc" + "google.golang.org/grpc/credentials/alts/core" + altspb "google.golang.org/grpc/credentials/alts/core/proto/grpc_gcp" + "google.golang.org/grpc/credentials/alts/core/testutil" +) + +var ( + testAppProtocols = []string{"grpc"} + testRecordProtocol = rekeyRecordProtocolName + testKey = []byte{ + // 44 arbitrary bytes. + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xd2, 0x4c, 0xce, 0x4f, 0x49, + 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xd2, 0x4c, 0xce, 0x4f, 0x49, 0x1f, 0x8b, + 0xd2, 0x4c, 0xce, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, + } + testServiceAccount = "test_service_account" + testTargetServiceAccounts = []string{testServiceAccount} + testClientIdentity = &altspb.Identity{ + IdentityOneof: &altspb.Identity_Hostname{ + Hostname: "i_am_a_client", + }, + } +) + +// testRPCStream mimics a altspb.HandshakerService_DoHandshakeClient object. +type testRPCStream struct { + grpc.ClientStream + t *testing.T + isClient bool + // The resp expected to be returned by Recv(). Make sure this is set to + // the content the test requires before Recv() is invoked. + recvBuf *altspb.HandshakerResp + // false if it is the first access to Handshaker service on Envelope. + first bool + // useful for testing concurrent calls. + delay time.Duration +} + +func (t *testRPCStream) Recv() (*altspb.HandshakerResp, error) { + resp := t.recvBuf + t.recvBuf = nil + return resp, nil +} + +func (t *testRPCStream) Send(req *altspb.HandshakerReq) error { + var resp *altspb.HandshakerResp + if !t.first { + // Generate the bytes to be returned by Recv() for the initial + // handshaking. + t.first = true + if t.isClient { + resp = &altspb.HandshakerResp{ + OutFrames: testutil.MakeFrame("ClientInit"), + // Simulate consuming ServerInit. + BytesConsumed: 14, + } + } else { + resp = &altspb.HandshakerResp{ + OutFrames: testutil.MakeFrame("ServerInit"), + // Simulate consuming ClientInit. + BytesConsumed: 14, + } + } + } else { + // Add delay to test concurrent calls. + close := stat.Update() + defer close() + time.Sleep(t.delay) + + // Generate the response to be returned by Recv() for the + // follow-up handshaking. + result := &altspb.HandshakerResult{ + RecordProtocol: testRecordProtocol, + KeyData: testKey, + } + resp = &altspb.HandshakerResp{ + Result: result, + // Simulate consuming ClientFinished or ServerFinished. + BytesConsumed: 18, + } + } + t.recvBuf = resp + return nil +} + +func (t *testRPCStream) CloseSend() error { + return nil +} + +var stat testutil.Stats + +func TestClientHandshake(t *testing.T) { + for _, testCase := range []struct { + delay time.Duration + numberOfHandshakes int + }{ + {0 * time.Millisecond, 1}, + {100 * time.Millisecond, 10 * maxPendingHandshakes}, + } { + errc := make(chan error) + stat.Reset() + for i := 0; i < testCase.numberOfHandshakes; i++ { + stream := &testRPCStream{ + t: t, + isClient: true, + } + // Preload the inbound frames. + f1 := testutil.MakeFrame("ServerInit") + f2 := testutil.MakeFrame("ServerFinished") + in := bytes.NewBuffer(f1) + in.Write(f2) + out := new(bytes.Buffer) + tc := testutil.NewTestConn(in, out) + chs := &altsHandshaker{ + stream: stream, + conn: tc, + clientOpts: &ClientHandshakerOptions{ + TargetServiceAccounts: testTargetServiceAccounts, + ClientIdentity: testClientIdentity, + }, + side: core.ClientSide, + } + go func() { + _, context, err := chs.ClientHandshake(context.Background()) + if err == nil && context == nil { + panic("expected non-nil ALTS context") + } + errc <- err + chs.Close() + }() + } + + // Ensure all errors are expected. + for i := 0; i < testCase.numberOfHandshakes; i++ { + if err := <-errc; err != nil && err != errDropped { + t.Errorf("ClientHandshake() = _, %v, want _, or %v", err, errDropped) + } + } + + // Ensure that there are no concurrent calls more than the limit. + if stat.MaxConcurrentCalls > maxPendingHandshakes { + t.Errorf("Observed %d concurrent handshakes; want <= %d", stat.MaxConcurrentCalls, maxPendingHandshakes) + } + } +} + +func TestServerHandshake(t *testing.T) { + for _, testCase := range []struct { + delay time.Duration + numberOfHandshakes int + }{ + {0 * time.Millisecond, 1}, + {100 * time.Millisecond, 10 * maxPendingHandshakes}, + } { + errc := make(chan error) + stat.Reset() + for i := 0; i < testCase.numberOfHandshakes; i++ { + stream := &testRPCStream{ + t: t, + isClient: false, + } + // Preload the inbound frames. + f1 := testutil.MakeFrame("ClientInit") + f2 := testutil.MakeFrame("ClientFinished") + in := bytes.NewBuffer(f1) + in.Write(f2) + out := new(bytes.Buffer) + tc := testutil.NewTestConn(in, out) + shs := &altsHandshaker{ + stream: stream, + conn: tc, + serverOpts: DefaultServerHandshakerOptions(), + side: core.ServerSide, + } + go func() { + _, context, err := shs.ServerHandshake(context.Background()) + if err == nil && context == nil { + panic("expected non-nil ALTS context") + } + errc <- err + shs.Close() + }() + } + + // Ensure all errors are expected. + for i := 0; i < testCase.numberOfHandshakes; i++ { + if err := <-errc; err != nil && err != errDropped { + t.Errorf("ServerHandshake() = _, %v, want _, or %v", err, errDropped) + } + } + + // Ensure that there are no concurrent calls more than the limit. + if stat.MaxConcurrentCalls > maxPendingHandshakes { + t.Errorf("Observed %d concurrent handshakes; want <= %d", stat.MaxConcurrentCalls, maxPendingHandshakes) + } + } +} + +// testUnresponsiveRPCStream is used for testing the PeerNotResponding case. +type testUnresponsiveRPCStream struct { + grpc.ClientStream +} + +func (t *testUnresponsiveRPCStream) Recv() (*altspb.HandshakerResp, error) { + return &altspb.HandshakerResp{}, nil +} + +func (t *testUnresponsiveRPCStream) Send(req *altspb.HandshakerReq) error { + return nil +} + +func (t *testUnresponsiveRPCStream) CloseSend() error { + return nil +} + +func TestPeerNotResponding(t *testing.T) { + stream := &testUnresponsiveRPCStream{} + chs := &altsHandshaker{ + stream: stream, + conn: testutil.NewUnresponsiveTestConn(), + clientOpts: &ClientHandshakerOptions{ + TargetServiceAccounts: testTargetServiceAccounts, + ClientIdentity: testClientIdentity, + }, + side: core.ClientSide, + } + _, context, err := chs.ClientHandshake(context.Background()) + chs.Close() + if context != nil { + t.Error("expected non-nil ALTS context") + } + if got, want := err, core.PeerNotRespondingError; got != want { + t.Errorf("ClientHandshake() = %v, want %v", got, want) + } +} diff --git a/vendor/google.golang.org/grpc/credentials/alts/core/handshaker/service/service.go b/vendor/google.golang.org/grpc/credentials/alts/core/handshaker/service/service.go new file mode 100644 index 0000000..a839369 --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/alts/core/handshaker/service/service.go @@ -0,0 +1,60 @@ +/* + * + * Copyright 2018 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Package service manages connections between the VM application and the ALTS +// handshaker service. +package service + +import ( + "flag" + "sync" + + grpc "google.golang.org/grpc" +) + +var ( + // hsServiceAddr specifies the default ALTS handshaker service address in + // the hypervisor. + hsServiceAddr = flag.String("handshaker_service_address", "metadata.google.internal:8080", "ALTS handshaker gRPC service address") + // hsConn represents a connection to hypervisor handshaker service. + hsConn *grpc.ClientConn + mu sync.Mutex + // hsDialer will be reassigned in tests. + hsDialer = grpc.Dial +) + +type dialer func(target string, opts ...grpc.DialOption) (*grpc.ClientConn, error) + +// Dial dials the handshake service in the hypervisor. If a connection has +// already been established, this function returns it. Otherwise, a new +// connection is created, +func Dial() (*grpc.ClientConn, error) { + mu.Lock() + defer mu.Unlock() + + if hsConn == nil { + // Create a new connection to the handshaker service. Note that + // this connection stays open until the application is closed. + var err error + hsConn, err = hsDialer(*hsServiceAddr, grpc.WithInsecure()) + if err != nil { + return nil, err + } + } + return hsConn, nil +} diff --git a/vendor/google.golang.org/grpc/credentials/alts/core/handshaker/service/service_test.go b/vendor/google.golang.org/grpc/credentials/alts/core/handshaker/service/service_test.go new file mode 100644 index 0000000..2f33def --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/alts/core/handshaker/service/service_test.go @@ -0,0 +1,64 @@ +/* + * + * Copyright 2018 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package service + +import ( + "testing" + + grpc "google.golang.org/grpc" +) + +func TestDial(t *testing.T) { + defer func() func() { + temp := hsDialer + hsDialer = func(target string, opts ...grpc.DialOption) (*grpc.ClientConn, error) { + return &grpc.ClientConn{}, nil + } + return func() { + hsDialer = temp + } + }() + + // Ensure that hsConn is nil at first. + hsConn = nil + + // First call to Dial, it should create set hsConn. + conn1, err := Dial() + if err != nil { + t.Fatalf("first call to Dial failed: %v", err) + } + if conn1 == nil { + t.Fatal("first call to Dial()=(nil, _), want not nil") + } + if got, want := hsConn, conn1; got != want { + t.Fatalf("hsConn=%v, want %v", got, want) + } + + // Second call to Dial() should return conn1 above. + conn2, err := Dial() + if err != nil { + t.Fatalf("second call to Dial() failed: %v", err) + } + if got, want := conn2, conn1; got != want { + t.Fatalf("second call to Dial()=(%v, _), want (%v,. _)", got, want) + } + if got, want := hsConn, conn1; got != want { + t.Fatalf("hsConn=%v, want %v", got, want) + } +} diff --git a/vendor/google.golang.org/grpc/credentials/alts/core/proto/grpc_gcp/altscontext.pb.go b/vendor/google.golang.org/grpc/credentials/alts/core/proto/grpc_gcp/altscontext.pb.go new file mode 100644 index 0000000..4375ed1 --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/alts/core/proto/grpc_gcp/altscontext.pb.go @@ -0,0 +1,131 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: altscontext.proto + +/* +Package grpc_gcp is a generated protocol buffer package. + +It is generated from these files: + altscontext.proto + handshaker.proto + transport_security_common.proto + +It has these top-level messages: + AltsContext + Endpoint + Identity + StartClientHandshakeReq + ServerHandshakeParameters + StartServerHandshakeReq + NextHandshakeMessageReq + HandshakerReq + HandshakerResult + HandshakerStatus + HandshakerResp + RpcProtocolVersions +*/ +package grpc_gcp + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +type AltsContext struct { + // The application protocol negotiated for this connection. + ApplicationProtocol string `protobuf:"bytes,1,opt,name=application_protocol,json=applicationProtocol" json:"application_protocol,omitempty"` + // The record protocol negotiated for this connection. + RecordProtocol string `protobuf:"bytes,2,opt,name=record_protocol,json=recordProtocol" json:"record_protocol,omitempty"` + // The security level of the created secure channel. + SecurityLevel SecurityLevel `protobuf:"varint,3,opt,name=security_level,json=securityLevel,enum=grpc.gcp.SecurityLevel" json:"security_level,omitempty"` + // The peer service account. + PeerServiceAccount string `protobuf:"bytes,4,opt,name=peer_service_account,json=peerServiceAccount" json:"peer_service_account,omitempty"` + // The local service account. + LocalServiceAccount string `protobuf:"bytes,5,opt,name=local_service_account,json=localServiceAccount" json:"local_service_account,omitempty"` + // The RPC protocol versions supported by the peer. + PeerRpcVersions *RpcProtocolVersions `protobuf:"bytes,6,opt,name=peer_rpc_versions,json=peerRpcVersions" json:"peer_rpc_versions,omitempty"` +} + +func (m *AltsContext) Reset() { *m = AltsContext{} } +func (m *AltsContext) String() string { return proto.CompactTextString(m) } +func (*AltsContext) ProtoMessage() {} +func (*AltsContext) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *AltsContext) GetApplicationProtocol() string { + if m != nil { + return m.ApplicationProtocol + } + return "" +} + +func (m *AltsContext) GetRecordProtocol() string { + if m != nil { + return m.RecordProtocol + } + return "" +} + +func (m *AltsContext) GetSecurityLevel() SecurityLevel { + if m != nil { + return m.SecurityLevel + } + return SecurityLevel_SECURITY_NONE +} + +func (m *AltsContext) GetPeerServiceAccount() string { + if m != nil { + return m.PeerServiceAccount + } + return "" +} + +func (m *AltsContext) GetLocalServiceAccount() string { + if m != nil { + return m.LocalServiceAccount + } + return "" +} + +func (m *AltsContext) GetPeerRpcVersions() *RpcProtocolVersions { + if m != nil { + return m.PeerRpcVersions + } + return nil +} + +func init() { + proto.RegisterType((*AltsContext)(nil), "grpc.gcp.AltsContext") +} + +func init() { proto.RegisterFile("altscontext.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 284 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x91, 0xc1, 0x4a, 0x03, 0x31, + 0x10, 0x86, 0xd9, 0xaa, 0x45, 0x53, 0x6c, 0x69, 0x6c, 0xe9, 0x22, 0x88, 0xc5, 0x8b, 0x3d, 0x2d, + 0xba, 0xde, 0x85, 0xea, 0x49, 0xf0, 0x20, 0x5b, 0xf0, 0x1a, 0xe2, 0x18, 0x4a, 0x20, 0xcd, 0x84, + 0x49, 0xba, 0xe8, 0xab, 0xfa, 0x34, 0xb2, 0xc9, 0x6e, 0x5b, 0xf4, 0x98, 0xf9, 0xbe, 0x3f, 0x33, + 0x93, 0xb0, 0xb1, 0x34, 0xc1, 0x03, 0xda, 0xa0, 0xbe, 0x42, 0xe1, 0x08, 0x03, 0xf2, 0xd3, 0x35, + 0x39, 0x28, 0xd6, 0xe0, 0x2e, 0xaf, 0x03, 0x49, 0xeb, 0x1d, 0x52, 0x10, 0x5e, 0xc1, 0x96, 0x74, + 0xf8, 0x16, 0x80, 0x9b, 0x0d, 0xda, 0xa4, 0xde, 0xfc, 0xf4, 0xd8, 0x60, 0x69, 0x82, 0x7f, 0x4e, + 0x17, 0xf0, 0x7b, 0x36, 0x91, 0xce, 0x19, 0x0d, 0x32, 0x68, 0xb4, 0x22, 0x4a, 0x80, 0x26, 0xcf, + 0xe6, 0xd9, 0xe2, 0xac, 0xba, 0x38, 0x60, 0x6f, 0x2d, 0xe2, 0xb7, 0x6c, 0x44, 0x0a, 0x90, 0x3e, + 0xf7, 0x76, 0x2f, 0xda, 0xc3, 0x54, 0xde, 0x89, 0x8f, 0x6c, 0xb8, 0x1b, 0xc2, 0xa8, 0x5a, 0x99, + 0xfc, 0x68, 0x9e, 0x2d, 0x86, 0xe5, 0xac, 0xe8, 0xe6, 0x2d, 0x56, 0x2d, 0x7f, 0x6d, 0x70, 0x75, + 0xee, 0x0f, 0x8f, 0xfc, 0x8e, 0x4d, 0x9c, 0x52, 0x24, 0xbc, 0xa2, 0x5a, 0x83, 0x12, 0x12, 0x00, + 0xb7, 0x36, 0xe4, 0xc7, 0xb1, 0x1b, 0x6f, 0xd8, 0x2a, 0xa1, 0x65, 0x22, 0xbc, 0x64, 0x53, 0x83, + 0x20, 0xcd, 0xbf, 0xc8, 0x49, 0x5a, 0x27, 0xc2, 0x3f, 0x99, 0x17, 0x36, 0x8e, 0x5d, 0xc8, 0x81, + 0xa8, 0x15, 0x79, 0x8d, 0xd6, 0xe7, 0xfd, 0x79, 0xb6, 0x18, 0x94, 0x57, 0xfb, 0x41, 0x2b, 0x07, + 0xdd, 0x5e, 0xef, 0xad, 0x54, 0x8d, 0x9a, 0x5c, 0xe5, 0xa0, 0x2b, 0x3c, 0xcd, 0xd8, 0x54, 0x63, + 0xca, 0x34, 0x9f, 0x54, 0x68, 0x1b, 0x14, 0x59, 0x69, 0x3e, 0xfa, 0xf1, 0xa5, 0x1e, 0x7e, 0x03, + 0x00, 0x00, 0xff, 0xff, 0x36, 0xd0, 0xe1, 0x63, 0xbc, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/grpc/credentials/alts/core/proto/grpc_gcp/altscontext.proto b/vendor/google.golang.org/grpc/credentials/alts/core/proto/grpc_gcp/altscontext.proto new file mode 100644 index 0000000..9a1dad5 --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/alts/core/proto/grpc_gcp/altscontext.proto @@ -0,0 +1,41 @@ +// Copyright 2018 gRPC authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +import "transport_security_common.proto"; + +package grpc.gcp; + +option java_package = "io.grpc.alts.internal"; + +message AltsContext { + // The application protocol negotiated for this connection. + string application_protocol = 1; + + // The record protocol negotiated for this connection. + string record_protocol = 2; + + // The security level of the created secure channel. + SecurityLevel security_level = 3; + + // The peer service account. + string peer_service_account = 4; + + // The local service account. + string local_service_account = 5; + + // The RPC protocol versions supported by the peer. + RpcProtocolVersions peer_rpc_versions = 6; +} diff --git a/vendor/google.golang.org/grpc/credentials/alts/core/proto/grpc_gcp/handshaker.pb.go b/vendor/google.golang.org/grpc/credentials/alts/core/proto/grpc_gcp/handshaker.pb.go new file mode 100644 index 0000000..9c3e860 --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/alts/core/proto/grpc_gcp/handshaker.pb.go @@ -0,0 +1,942 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: handshaker.proto + +package grpc_gcp + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +type HandshakeProtocol int32 + +const ( + // Default value. + HandshakeProtocol_HANDSHAKE_PROTOCOL_UNSPECIFIED HandshakeProtocol = 0 + // TLS handshake protocol. + HandshakeProtocol_TLS HandshakeProtocol = 1 + // Application Layer Transport Security handshake protocol. + HandshakeProtocol_ALTS HandshakeProtocol = 2 +) + +var HandshakeProtocol_name = map[int32]string{ + 0: "HANDSHAKE_PROTOCOL_UNSPECIFIED", + 1: "TLS", + 2: "ALTS", +} +var HandshakeProtocol_value = map[string]int32{ + "HANDSHAKE_PROTOCOL_UNSPECIFIED": 0, + "TLS": 1, + "ALTS": 2, +} + +func (x HandshakeProtocol) String() string { + return proto.EnumName(HandshakeProtocol_name, int32(x)) +} +func (HandshakeProtocol) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +type NetworkProtocol int32 + +const ( + NetworkProtocol_NETWORK_PROTOCOL_UNSPECIFIED NetworkProtocol = 0 + NetworkProtocol_TCP NetworkProtocol = 1 + NetworkProtocol_UDP NetworkProtocol = 2 +) + +var NetworkProtocol_name = map[int32]string{ + 0: "NETWORK_PROTOCOL_UNSPECIFIED", + 1: "TCP", + 2: "UDP", +} +var NetworkProtocol_value = map[string]int32{ + "NETWORK_PROTOCOL_UNSPECIFIED": 0, + "TCP": 1, + "UDP": 2, +} + +func (x NetworkProtocol) String() string { + return proto.EnumName(NetworkProtocol_name, int32(x)) +} +func (NetworkProtocol) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +type Endpoint struct { + // IP address. It should contain an IPv4 or IPv6 string literal, e.g. + // "192.168.0.1" or "2001:db8::1". + IpAddress string `protobuf:"bytes,1,opt,name=ip_address,json=ipAddress" json:"ip_address,omitempty"` + // Port number. + Port int32 `protobuf:"varint,2,opt,name=port" json:"port,omitempty"` + // Network protocol (e.g., TCP, UDP) associated with this endpoint. + Protocol NetworkProtocol `protobuf:"varint,3,opt,name=protocol,enum=grpc.gcp.NetworkProtocol" json:"protocol,omitempty"` +} + +func (m *Endpoint) Reset() { *m = Endpoint{} } +func (m *Endpoint) String() string { return proto.CompactTextString(m) } +func (*Endpoint) ProtoMessage() {} +func (*Endpoint) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *Endpoint) GetIpAddress() string { + if m != nil { + return m.IpAddress + } + return "" +} + +func (m *Endpoint) GetPort() int32 { + if m != nil { + return m.Port + } + return 0 +} + +func (m *Endpoint) GetProtocol() NetworkProtocol { + if m != nil { + return m.Protocol + } + return NetworkProtocol_NETWORK_PROTOCOL_UNSPECIFIED +} + +type Identity struct { + // Types that are valid to be assigned to IdentityOneof: + // *Identity_ServiceAccount + // *Identity_Hostname + IdentityOneof isIdentity_IdentityOneof `protobuf_oneof:"identity_oneof"` +} + +func (m *Identity) Reset() { *m = Identity{} } +func (m *Identity) String() string { return proto.CompactTextString(m) } +func (*Identity) ProtoMessage() {} +func (*Identity) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +type isIdentity_IdentityOneof interface { + isIdentity_IdentityOneof() +} + +type Identity_ServiceAccount struct { + ServiceAccount string `protobuf:"bytes,1,opt,name=service_account,json=serviceAccount,oneof"` +} +type Identity_Hostname struct { + Hostname string `protobuf:"bytes,2,opt,name=hostname,oneof"` +} + +func (*Identity_ServiceAccount) isIdentity_IdentityOneof() {} +func (*Identity_Hostname) isIdentity_IdentityOneof() {} + +func (m *Identity) GetIdentityOneof() isIdentity_IdentityOneof { + if m != nil { + return m.IdentityOneof + } + return nil +} + +func (m *Identity) GetServiceAccount() string { + if x, ok := m.GetIdentityOneof().(*Identity_ServiceAccount); ok { + return x.ServiceAccount + } + return "" +} + +func (m *Identity) GetHostname() string { + if x, ok := m.GetIdentityOneof().(*Identity_Hostname); ok { + return x.Hostname + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Identity) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Identity_OneofMarshaler, _Identity_OneofUnmarshaler, _Identity_OneofSizer, []interface{}{ + (*Identity_ServiceAccount)(nil), + (*Identity_Hostname)(nil), + } +} + +func _Identity_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Identity) + // identity_oneof + switch x := m.IdentityOneof.(type) { + case *Identity_ServiceAccount: + b.EncodeVarint(1<<3 | proto.WireBytes) + b.EncodeStringBytes(x.ServiceAccount) + case *Identity_Hostname: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Hostname) + case nil: + default: + return fmt.Errorf("Identity.IdentityOneof has unexpected type %T", x) + } + return nil +} + +func _Identity_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Identity) + switch tag { + case 1: // identity_oneof.service_account + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.IdentityOneof = &Identity_ServiceAccount{x} + return true, err + case 2: // identity_oneof.hostname + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.IdentityOneof = &Identity_Hostname{x} + return true, err + default: + return false, nil + } +} + +func _Identity_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Identity) + // identity_oneof + switch x := m.IdentityOneof.(type) { + case *Identity_ServiceAccount: + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.ServiceAccount))) + n += len(x.ServiceAccount) + case *Identity_Hostname: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Hostname))) + n += len(x.Hostname) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type StartClientHandshakeReq struct { + // Handshake security protocol requested by the client. + HandshakeSecurityProtocol HandshakeProtocol `protobuf:"varint,1,opt,name=handshake_security_protocol,json=handshakeSecurityProtocol,enum=grpc.gcp.HandshakeProtocol" json:"handshake_security_protocol,omitempty"` + // The application protocols supported by the client, e.g., "h2" (for http2), + // "grpc". + ApplicationProtocols []string `protobuf:"bytes,2,rep,name=application_protocols,json=applicationProtocols" json:"application_protocols,omitempty"` + // The record protocols supported by the client, e.g., + // "ALTSRP_GCM_AES128". + RecordProtocols []string `protobuf:"bytes,3,rep,name=record_protocols,json=recordProtocols" json:"record_protocols,omitempty"` + // (Optional) Describes which server identities are acceptable by the client. + // If target identities are provided and none of them matches the peer + // identity of the server, handshake will fail. + TargetIdentities []*Identity `protobuf:"bytes,4,rep,name=target_identities,json=targetIdentities" json:"target_identities,omitempty"` + // (Optional) Application may specify a local identity. Otherwise, the + // handshaker chooses a default local identity. + LocalIdentity *Identity `protobuf:"bytes,5,opt,name=local_identity,json=localIdentity" json:"local_identity,omitempty"` + // (Optional) Local endpoint information of the connection to the server, + // such as local IP address, port number, and network protocol. + LocalEndpoint *Endpoint `protobuf:"bytes,6,opt,name=local_endpoint,json=localEndpoint" json:"local_endpoint,omitempty"` + // (Optional) Endpoint information of the remote server, such as IP address, + // port number, and network protocol. + RemoteEndpoint *Endpoint `protobuf:"bytes,7,opt,name=remote_endpoint,json=remoteEndpoint" json:"remote_endpoint,omitempty"` + // (Optional) If target name is provided, a secure naming check is performed + // to verify that the peer authenticated identity is indeed authorized to run + // the target name. + TargetName string `protobuf:"bytes,8,opt,name=target_name,json=targetName" json:"target_name,omitempty"` + // (Optional) RPC protocol versions supported by the client. + RpcVersions *RpcProtocolVersions `protobuf:"bytes,9,opt,name=rpc_versions,json=rpcVersions" json:"rpc_versions,omitempty"` +} + +func (m *StartClientHandshakeReq) Reset() { *m = StartClientHandshakeReq{} } +func (m *StartClientHandshakeReq) String() string { return proto.CompactTextString(m) } +func (*StartClientHandshakeReq) ProtoMessage() {} +func (*StartClientHandshakeReq) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +func (m *StartClientHandshakeReq) GetHandshakeSecurityProtocol() HandshakeProtocol { + if m != nil { + return m.HandshakeSecurityProtocol + } + return HandshakeProtocol_HANDSHAKE_PROTOCOL_UNSPECIFIED +} + +func (m *StartClientHandshakeReq) GetApplicationProtocols() []string { + if m != nil { + return m.ApplicationProtocols + } + return nil +} + +func (m *StartClientHandshakeReq) GetRecordProtocols() []string { + if m != nil { + return m.RecordProtocols + } + return nil +} + +func (m *StartClientHandshakeReq) GetTargetIdentities() []*Identity { + if m != nil { + return m.TargetIdentities + } + return nil +} + +func (m *StartClientHandshakeReq) GetLocalIdentity() *Identity { + if m != nil { + return m.LocalIdentity + } + return nil +} + +func (m *StartClientHandshakeReq) GetLocalEndpoint() *Endpoint { + if m != nil { + return m.LocalEndpoint + } + return nil +} + +func (m *StartClientHandshakeReq) GetRemoteEndpoint() *Endpoint { + if m != nil { + return m.RemoteEndpoint + } + return nil +} + +func (m *StartClientHandshakeReq) GetTargetName() string { + if m != nil { + return m.TargetName + } + return "" +} + +func (m *StartClientHandshakeReq) GetRpcVersions() *RpcProtocolVersions { + if m != nil { + return m.RpcVersions + } + return nil +} + +type ServerHandshakeParameters struct { + // The record protocols supported by the server, e.g., + // "ALTSRP_GCM_AES128". + RecordProtocols []string `protobuf:"bytes,1,rep,name=record_protocols,json=recordProtocols" json:"record_protocols,omitempty"` + // (Optional) A list of local identities supported by the server, if + // specified. Otherwise, the handshaker chooses a default local identity. + LocalIdentities []*Identity `protobuf:"bytes,2,rep,name=local_identities,json=localIdentities" json:"local_identities,omitempty"` +} + +func (m *ServerHandshakeParameters) Reset() { *m = ServerHandshakeParameters{} } +func (m *ServerHandshakeParameters) String() string { return proto.CompactTextString(m) } +func (*ServerHandshakeParameters) ProtoMessage() {} +func (*ServerHandshakeParameters) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } + +func (m *ServerHandshakeParameters) GetRecordProtocols() []string { + if m != nil { + return m.RecordProtocols + } + return nil +} + +func (m *ServerHandshakeParameters) GetLocalIdentities() []*Identity { + if m != nil { + return m.LocalIdentities + } + return nil +} + +type StartServerHandshakeReq struct { + // The application protocols supported by the server, e.g., "h2" (for http2), + // "grpc". + ApplicationProtocols []string `protobuf:"bytes,1,rep,name=application_protocols,json=applicationProtocols" json:"application_protocols,omitempty"` + // Handshake parameters (record protocols and local identities supported by + // the server) mapped by the handshake protocol. Each handshake security + // protocol (e.g., TLS or ALTS) has its own set of record protocols and local + // identities. Since protobuf does not support enum as key to the map, the key + // to handshake_parameters is the integer value of HandshakeProtocol enum. + HandshakeParameters map[int32]*ServerHandshakeParameters `protobuf:"bytes,2,rep,name=handshake_parameters,json=handshakeParameters" json:"handshake_parameters,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Bytes in out_frames returned from the peer's HandshakerResp. It is possible + // that the peer's out_frames are split into multiple HandshakReq messages. + InBytes []byte `protobuf:"bytes,3,opt,name=in_bytes,json=inBytes,proto3" json:"in_bytes,omitempty"` + // (Optional) Local endpoint information of the connection to the client, + // such as local IP address, port number, and network protocol. + LocalEndpoint *Endpoint `protobuf:"bytes,4,opt,name=local_endpoint,json=localEndpoint" json:"local_endpoint,omitempty"` + // (Optional) Endpoint information of the remote client, such as IP address, + // port number, and network protocol. + RemoteEndpoint *Endpoint `protobuf:"bytes,5,opt,name=remote_endpoint,json=remoteEndpoint" json:"remote_endpoint,omitempty"` + // (Optional) RPC protocol versions supported by the server. + RpcVersions *RpcProtocolVersions `protobuf:"bytes,6,opt,name=rpc_versions,json=rpcVersions" json:"rpc_versions,omitempty"` +} + +func (m *StartServerHandshakeReq) Reset() { *m = StartServerHandshakeReq{} } +func (m *StartServerHandshakeReq) String() string { return proto.CompactTextString(m) } +func (*StartServerHandshakeReq) ProtoMessage() {} +func (*StartServerHandshakeReq) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } + +func (m *StartServerHandshakeReq) GetApplicationProtocols() []string { + if m != nil { + return m.ApplicationProtocols + } + return nil +} + +func (m *StartServerHandshakeReq) GetHandshakeParameters() map[int32]*ServerHandshakeParameters { + if m != nil { + return m.HandshakeParameters + } + return nil +} + +func (m *StartServerHandshakeReq) GetInBytes() []byte { + if m != nil { + return m.InBytes + } + return nil +} + +func (m *StartServerHandshakeReq) GetLocalEndpoint() *Endpoint { + if m != nil { + return m.LocalEndpoint + } + return nil +} + +func (m *StartServerHandshakeReq) GetRemoteEndpoint() *Endpoint { + if m != nil { + return m.RemoteEndpoint + } + return nil +} + +func (m *StartServerHandshakeReq) GetRpcVersions() *RpcProtocolVersions { + if m != nil { + return m.RpcVersions + } + return nil +} + +type NextHandshakeMessageReq struct { + // Bytes in out_frames returned from the peer's HandshakerResp. It is possible + // that the peer's out_frames are split into multiple NextHandshakerMessageReq + // messages. + InBytes []byte `protobuf:"bytes,1,opt,name=in_bytes,json=inBytes,proto3" json:"in_bytes,omitempty"` +} + +func (m *NextHandshakeMessageReq) Reset() { *m = NextHandshakeMessageReq{} } +func (m *NextHandshakeMessageReq) String() string { return proto.CompactTextString(m) } +func (*NextHandshakeMessageReq) ProtoMessage() {} +func (*NextHandshakeMessageReq) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } + +func (m *NextHandshakeMessageReq) GetInBytes() []byte { + if m != nil { + return m.InBytes + } + return nil +} + +type HandshakerReq struct { + // Types that are valid to be assigned to ReqOneof: + // *HandshakerReq_ClientStart + // *HandshakerReq_ServerStart + // *HandshakerReq_Next + ReqOneof isHandshakerReq_ReqOneof `protobuf_oneof:"req_oneof"` +} + +func (m *HandshakerReq) Reset() { *m = HandshakerReq{} } +func (m *HandshakerReq) String() string { return proto.CompactTextString(m) } +func (*HandshakerReq) ProtoMessage() {} +func (*HandshakerReq) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } + +type isHandshakerReq_ReqOneof interface { + isHandshakerReq_ReqOneof() +} + +type HandshakerReq_ClientStart struct { + ClientStart *StartClientHandshakeReq `protobuf:"bytes,1,opt,name=client_start,json=clientStart,oneof"` +} +type HandshakerReq_ServerStart struct { + ServerStart *StartServerHandshakeReq `protobuf:"bytes,2,opt,name=server_start,json=serverStart,oneof"` +} +type HandshakerReq_Next struct { + Next *NextHandshakeMessageReq `protobuf:"bytes,3,opt,name=next,oneof"` +} + +func (*HandshakerReq_ClientStart) isHandshakerReq_ReqOneof() {} +func (*HandshakerReq_ServerStart) isHandshakerReq_ReqOneof() {} +func (*HandshakerReq_Next) isHandshakerReq_ReqOneof() {} + +func (m *HandshakerReq) GetReqOneof() isHandshakerReq_ReqOneof { + if m != nil { + return m.ReqOneof + } + return nil +} + +func (m *HandshakerReq) GetClientStart() *StartClientHandshakeReq { + if x, ok := m.GetReqOneof().(*HandshakerReq_ClientStart); ok { + return x.ClientStart + } + return nil +} + +func (m *HandshakerReq) GetServerStart() *StartServerHandshakeReq { + if x, ok := m.GetReqOneof().(*HandshakerReq_ServerStart); ok { + return x.ServerStart + } + return nil +} + +func (m *HandshakerReq) GetNext() *NextHandshakeMessageReq { + if x, ok := m.GetReqOneof().(*HandshakerReq_Next); ok { + return x.Next + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*HandshakerReq) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _HandshakerReq_OneofMarshaler, _HandshakerReq_OneofUnmarshaler, _HandshakerReq_OneofSizer, []interface{}{ + (*HandshakerReq_ClientStart)(nil), + (*HandshakerReq_ServerStart)(nil), + (*HandshakerReq_Next)(nil), + } +} + +func _HandshakerReq_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*HandshakerReq) + // req_oneof + switch x := m.ReqOneof.(type) { + case *HandshakerReq_ClientStart: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ClientStart); err != nil { + return err + } + case *HandshakerReq_ServerStart: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ServerStart); err != nil { + return err + } + case *HandshakerReq_Next: + b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Next); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("HandshakerReq.ReqOneof has unexpected type %T", x) + } + return nil +} + +func _HandshakerReq_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*HandshakerReq) + switch tag { + case 1: // req_oneof.client_start + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(StartClientHandshakeReq) + err := b.DecodeMessage(msg) + m.ReqOneof = &HandshakerReq_ClientStart{msg} + return true, err + case 2: // req_oneof.server_start + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(StartServerHandshakeReq) + err := b.DecodeMessage(msg) + m.ReqOneof = &HandshakerReq_ServerStart{msg} + return true, err + case 3: // req_oneof.next + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(NextHandshakeMessageReq) + err := b.DecodeMessage(msg) + m.ReqOneof = &HandshakerReq_Next{msg} + return true, err + default: + return false, nil + } +} + +func _HandshakerReq_OneofSizer(msg proto.Message) (n int) { + m := msg.(*HandshakerReq) + // req_oneof + switch x := m.ReqOneof.(type) { + case *HandshakerReq_ClientStart: + s := proto.Size(x.ClientStart) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *HandshakerReq_ServerStart: + s := proto.Size(x.ServerStart) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *HandshakerReq_Next: + s := proto.Size(x.Next) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type HandshakerResult struct { + // The application protocol negotiated for this connection. + ApplicationProtocol string `protobuf:"bytes,1,opt,name=application_protocol,json=applicationProtocol" json:"application_protocol,omitempty"` + // The record protocol negotiated for this connection. + RecordProtocol string `protobuf:"bytes,2,opt,name=record_protocol,json=recordProtocol" json:"record_protocol,omitempty"` + // Cryptographic key data. The key data may be more than the key length + // required for the record protocol, thus the client of the handshaker + // service needs to truncate the key data into the right key length. + KeyData []byte `protobuf:"bytes,3,opt,name=key_data,json=keyData,proto3" json:"key_data,omitempty"` + // The authenticated identity of the peer. + PeerIdentity *Identity `protobuf:"bytes,4,opt,name=peer_identity,json=peerIdentity" json:"peer_identity,omitempty"` + // The local identity used in the handshake. + LocalIdentity *Identity `protobuf:"bytes,5,opt,name=local_identity,json=localIdentity" json:"local_identity,omitempty"` + // Indicate whether the handshaker service client should keep the channel + // between the handshaker service open, e.g., in order to handle + // post-handshake messages in the future. + KeepChannelOpen bool `protobuf:"varint,6,opt,name=keep_channel_open,json=keepChannelOpen" json:"keep_channel_open,omitempty"` + // The RPC protocol versions supported by the peer. + PeerRpcVersions *RpcProtocolVersions `protobuf:"bytes,7,opt,name=peer_rpc_versions,json=peerRpcVersions" json:"peer_rpc_versions,omitempty"` +} + +func (m *HandshakerResult) Reset() { *m = HandshakerResult{} } +func (m *HandshakerResult) String() string { return proto.CompactTextString(m) } +func (*HandshakerResult) ProtoMessage() {} +func (*HandshakerResult) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} } + +func (m *HandshakerResult) GetApplicationProtocol() string { + if m != nil { + return m.ApplicationProtocol + } + return "" +} + +func (m *HandshakerResult) GetRecordProtocol() string { + if m != nil { + return m.RecordProtocol + } + return "" +} + +func (m *HandshakerResult) GetKeyData() []byte { + if m != nil { + return m.KeyData + } + return nil +} + +func (m *HandshakerResult) GetPeerIdentity() *Identity { + if m != nil { + return m.PeerIdentity + } + return nil +} + +func (m *HandshakerResult) GetLocalIdentity() *Identity { + if m != nil { + return m.LocalIdentity + } + return nil +} + +func (m *HandshakerResult) GetKeepChannelOpen() bool { + if m != nil { + return m.KeepChannelOpen + } + return false +} + +func (m *HandshakerResult) GetPeerRpcVersions() *RpcProtocolVersions { + if m != nil { + return m.PeerRpcVersions + } + return nil +} + +type HandshakerStatus struct { + // The status code. This could be the gRPC status code. + Code uint32 `protobuf:"varint,1,opt,name=code" json:"code,omitempty"` + // The status details. + Details string `protobuf:"bytes,2,opt,name=details" json:"details,omitempty"` +} + +func (m *HandshakerStatus) Reset() { *m = HandshakerStatus{} } +func (m *HandshakerStatus) String() string { return proto.CompactTextString(m) } +func (*HandshakerStatus) ProtoMessage() {} +func (*HandshakerStatus) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} } + +func (m *HandshakerStatus) GetCode() uint32 { + if m != nil { + return m.Code + } + return 0 +} + +func (m *HandshakerStatus) GetDetails() string { + if m != nil { + return m.Details + } + return "" +} + +type HandshakerResp struct { + // Frames to be given to the peer for the NextHandshakeMessageReq. May be + // empty if no out_frames have to be sent to the peer or if in_bytes in the + // HandshakerReq are incomplete. All the non-empty out frames must be sent to + // the peer even if the handshaker status is not OK as these frames may + // contain the alert frames. + OutFrames []byte `protobuf:"bytes,1,opt,name=out_frames,json=outFrames,proto3" json:"out_frames,omitempty"` + // Number of bytes in the in_bytes consumed by the handshaker. It is possible + // that part of in_bytes in HandshakerReq was unrelated to the handshake + // process. + BytesConsumed uint32 `protobuf:"varint,2,opt,name=bytes_consumed,json=bytesConsumed" json:"bytes_consumed,omitempty"` + // This is set iff the handshake was successful. out_frames may still be set + // to frames that needs to be forwarded to the peer. + Result *HandshakerResult `protobuf:"bytes,3,opt,name=result" json:"result,omitempty"` + // Status of the handshaker. + Status *HandshakerStatus `protobuf:"bytes,4,opt,name=status" json:"status,omitempty"` +} + +func (m *HandshakerResp) Reset() { *m = HandshakerResp{} } +func (m *HandshakerResp) String() string { return proto.CompactTextString(m) } +func (*HandshakerResp) ProtoMessage() {} +func (*HandshakerResp) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{9} } + +func (m *HandshakerResp) GetOutFrames() []byte { + if m != nil { + return m.OutFrames + } + return nil +} + +func (m *HandshakerResp) GetBytesConsumed() uint32 { + if m != nil { + return m.BytesConsumed + } + return 0 +} + +func (m *HandshakerResp) GetResult() *HandshakerResult { + if m != nil { + return m.Result + } + return nil +} + +func (m *HandshakerResp) GetStatus() *HandshakerStatus { + if m != nil { + return m.Status + } + return nil +} + +func init() { + proto.RegisterType((*Endpoint)(nil), "grpc.gcp.Endpoint") + proto.RegisterType((*Identity)(nil), "grpc.gcp.Identity") + proto.RegisterType((*StartClientHandshakeReq)(nil), "grpc.gcp.StartClientHandshakeReq") + proto.RegisterType((*ServerHandshakeParameters)(nil), "grpc.gcp.ServerHandshakeParameters") + proto.RegisterType((*StartServerHandshakeReq)(nil), "grpc.gcp.StartServerHandshakeReq") + proto.RegisterType((*NextHandshakeMessageReq)(nil), "grpc.gcp.NextHandshakeMessageReq") + proto.RegisterType((*HandshakerReq)(nil), "grpc.gcp.HandshakerReq") + proto.RegisterType((*HandshakerResult)(nil), "grpc.gcp.HandshakerResult") + proto.RegisterType((*HandshakerStatus)(nil), "grpc.gcp.HandshakerStatus") + proto.RegisterType((*HandshakerResp)(nil), "grpc.gcp.HandshakerResp") + proto.RegisterEnum("grpc.gcp.HandshakeProtocol", HandshakeProtocol_name, HandshakeProtocol_value) + proto.RegisterEnum("grpc.gcp.NetworkProtocol", NetworkProtocol_name, NetworkProtocol_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for HandshakerService service + +type HandshakerServiceClient interface { + // Handshaker service accepts a stream of handshaker request, returning a + // stream of handshaker response. Client is expected to send exactly one + // message with either client_start or server_start followed by one or more + // messages with next. Each time client sends a request, the handshaker + // service expects to respond. Client does not have to wait for service's + // response before sending next request. + DoHandshake(ctx context.Context, opts ...grpc.CallOption) (HandshakerService_DoHandshakeClient, error) +} + +type handshakerServiceClient struct { + cc *grpc.ClientConn +} + +func NewHandshakerServiceClient(cc *grpc.ClientConn) HandshakerServiceClient { + return &handshakerServiceClient{cc} +} + +func (c *handshakerServiceClient) DoHandshake(ctx context.Context, opts ...grpc.CallOption) (HandshakerService_DoHandshakeClient, error) { + stream, err := grpc.NewClientStream(ctx, &_HandshakerService_serviceDesc.Streams[0], c.cc, "/grpc.gcp.HandshakerService/DoHandshake", opts...) + if err != nil { + return nil, err + } + x := &handshakerServiceDoHandshakeClient{stream} + return x, nil +} + +type HandshakerService_DoHandshakeClient interface { + Send(*HandshakerReq) error + Recv() (*HandshakerResp, error) + grpc.ClientStream +} + +type handshakerServiceDoHandshakeClient struct { + grpc.ClientStream +} + +func (x *handshakerServiceDoHandshakeClient) Send(m *HandshakerReq) error { + return x.ClientStream.SendMsg(m) +} + +func (x *handshakerServiceDoHandshakeClient) Recv() (*HandshakerResp, error) { + m := new(HandshakerResp) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// Server API for HandshakerService service + +type HandshakerServiceServer interface { + // Handshaker service accepts a stream of handshaker request, returning a + // stream of handshaker response. Client is expected to send exactly one + // message with either client_start or server_start followed by one or more + // messages with next. Each time client sends a request, the handshaker + // service expects to respond. Client does not have to wait for service's + // response before sending next request. + DoHandshake(HandshakerService_DoHandshakeServer) error +} + +func RegisterHandshakerServiceServer(s *grpc.Server, srv HandshakerServiceServer) { + s.RegisterService(&_HandshakerService_serviceDesc, srv) +} + +func _HandshakerService_DoHandshake_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(HandshakerServiceServer).DoHandshake(&handshakerServiceDoHandshakeServer{stream}) +} + +type HandshakerService_DoHandshakeServer interface { + Send(*HandshakerResp) error + Recv() (*HandshakerReq, error) + grpc.ServerStream +} + +type handshakerServiceDoHandshakeServer struct { + grpc.ServerStream +} + +func (x *handshakerServiceDoHandshakeServer) Send(m *HandshakerResp) error { + return x.ServerStream.SendMsg(m) +} + +func (x *handshakerServiceDoHandshakeServer) Recv() (*HandshakerReq, error) { + m := new(HandshakerReq) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +var _HandshakerService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "grpc.gcp.HandshakerService", + HandlerType: (*HandshakerServiceServer)(nil), + Methods: []grpc.MethodDesc{}, + Streams: []grpc.StreamDesc{ + { + StreamName: "DoHandshake", + Handler: _HandshakerService_DoHandshake_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: "handshaker.proto", +} + +func init() { proto.RegisterFile("handshaker.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 1073 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0xdd, 0x6e, 0x1a, 0x47, + 0x14, 0xf6, 0x02, 0xb6, 0xe1, 0x60, 0x60, 0x3d, 0x49, 0x64, 0xec, 0x24, 0x0d, 0xa5, 0xaa, 0x4a, + 0x72, 0x81, 0x5a, 0xd2, 0x2a, 0x4d, 0xaa, 0xaa, 0xb1, 0x31, 0x16, 0x6e, 0x5c, 0x6c, 0x0d, 0x4e, + 0x7b, 0x91, 0x8b, 0xd5, 0x64, 0x39, 0xb1, 0x57, 0xc0, 0xcc, 0x7a, 0x66, 0x70, 0xc3, 0x03, 0xf4, + 0x71, 0xfa, 0x0a, 0x7d, 0x9b, 0xbe, 0x41, 0xef, 0x5b, 0xed, 0xec, 0x1f, 0xc6, 0x4b, 0x94, 0xa8, + 0x77, 0xbb, 0x67, 0xbf, 0xef, 0xec, 0x9c, 0xef, 0x7c, 0x73, 0x66, 0xc0, 0xbe, 0x64, 0x7c, 0xa4, + 0x2e, 0xd9, 0x18, 0x65, 0xdb, 0x97, 0x42, 0x0b, 0x52, 0xbc, 0x90, 0xbe, 0xdb, 0xbe, 0x70, 0xfd, + 0xbd, 0x47, 0x5a, 0x32, 0xae, 0x7c, 0x21, 0xb5, 0xa3, 0xd0, 0x9d, 0x49, 0x4f, 0xcf, 0x1d, 0x57, + 0x4c, 0xa7, 0x82, 0x87, 0xd0, 0xa6, 0x86, 0x62, 0x8f, 0x8f, 0x7c, 0xe1, 0x71, 0x4d, 0x1e, 0x02, + 0x78, 0xbe, 0xc3, 0x46, 0x23, 0x89, 0x4a, 0xd5, 0xad, 0x86, 0xd5, 0x2a, 0xd1, 0x92, 0xe7, 0xef, + 0x87, 0x01, 0x42, 0xa0, 0x10, 0x24, 0xaa, 0xe7, 0x1a, 0x56, 0x6b, 0x9d, 0x9a, 0x67, 0xf2, 0x1d, + 0x14, 0x4d, 0x1e, 0x57, 0x4c, 0xea, 0xf9, 0x86, 0xd5, 0xaa, 0x76, 0x76, 0xdb, 0xf1, 0xcf, 0xdb, + 0x03, 0xd4, 0xbf, 0x0b, 0x39, 0x3e, 0x8b, 0x00, 0x34, 0x81, 0x36, 0x11, 0x8a, 0xc7, 0x23, 0xe4, + 0xda, 0xd3, 0x73, 0xf2, 0x18, 0x6a, 0x0a, 0xe5, 0xb5, 0xe7, 0xa2, 0xc3, 0x5c, 0x57, 0xcc, 0xb8, + 0x0e, 0x7f, 0xdd, 0x5f, 0xa3, 0xd5, 0xe8, 0xc3, 0x7e, 0x18, 0x27, 0x0f, 0xa0, 0x78, 0x29, 0x94, + 0xe6, 0x6c, 0x8a, 0x66, 0x15, 0x01, 0x26, 0x89, 0x1c, 0xd8, 0x50, 0xf5, 0xa2, 0xa4, 0x8e, 0xe0, + 0x28, 0xde, 0x35, 0xff, 0x2c, 0xc0, 0xce, 0x50, 0x33, 0xa9, 0xbb, 0x13, 0x0f, 0xb9, 0xee, 0xc7, + 0x3a, 0x51, 0xbc, 0x22, 0x6f, 0xe0, 0x7e, 0xa2, 0x5b, 0xaa, 0x4d, 0x52, 0x8c, 0x65, 0x8a, 0xb9, + 0x9f, 0x16, 0x93, 0x90, 0x93, 0x72, 0x76, 0x13, 0xfe, 0x30, 0xa2, 0xc7, 0x9f, 0xc8, 0x53, 0xb8, + 0xc7, 0x7c, 0x7f, 0xe2, 0xb9, 0x4c, 0x7b, 0x82, 0x27, 0x59, 0x55, 0x3d, 0xd7, 0xc8, 0xb7, 0x4a, + 0xf4, 0xee, 0xc2, 0xc7, 0x98, 0xa3, 0xc8, 0x63, 0xb0, 0x25, 0xba, 0x42, 0x8e, 0x16, 0xf0, 0x79, + 0x83, 0xaf, 0x85, 0xf1, 0x14, 0xfa, 0x13, 0x6c, 0x6b, 0x26, 0x2f, 0x50, 0x3b, 0x51, 0xc5, 0x1e, + 0xaa, 0x7a, 0xa1, 0x91, 0x6f, 0x95, 0x3b, 0x24, 0x5d, 0x72, 0x2c, 0x31, 0xb5, 0x43, 0xf0, 0x71, + 0x82, 0x25, 0xcf, 0xa1, 0x3a, 0x11, 0x2e, 0x9b, 0xc4, 0xfc, 0x79, 0x7d, 0xbd, 0x61, 0xad, 0x60, + 0x57, 0x0c, 0x32, 0xe9, 0x57, 0x42, 0xc5, 0xc8, 0x37, 0xf5, 0x8d, 0x65, 0x6a, 0xec, 0xa8, 0x88, + 0x9a, 0x18, 0xec, 0x07, 0xa8, 0x49, 0x9c, 0x0a, 0x8d, 0x29, 0x77, 0x73, 0x25, 0xb7, 0x1a, 0x42, + 0x13, 0xf2, 0x23, 0x28, 0x47, 0x35, 0x9b, 0xfe, 0x17, 0x8d, 0x3d, 0x21, 0x0c, 0x0d, 0xd8, 0x14, + 0xc9, 0x4b, 0xd8, 0x92, 0xbe, 0xeb, 0x5c, 0xa3, 0x54, 0x9e, 0xe0, 0xaa, 0x5e, 0x32, 0xa9, 0x1f, + 0xa6, 0xa9, 0xa9, 0xef, 0xc6, 0x12, 0xfe, 0x1a, 0x81, 0x68, 0x59, 0xfa, 0x6e, 0xfc, 0xd2, 0xfc, + 0xc3, 0x82, 0xdd, 0x21, 0xca, 0x6b, 0x94, 0x69, 0xb7, 0x99, 0x64, 0x53, 0xd4, 0x28, 0xb3, 0xfb, + 0x63, 0x65, 0xf7, 0xe7, 0x47, 0xb0, 0x6f, 0xc8, 0x1b, 0xb4, 0x27, 0xb7, 0xb2, 0x3d, 0xb5, 0x45, + 0x81, 0x3d, 0x54, 0xcd, 0x7f, 0xf3, 0x91, 0x6f, 0x97, 0x16, 0x13, 0xf8, 0x76, 0xa5, 0xb5, 0xac, + 0x0f, 0x58, 0x6b, 0x0a, 0x77, 0x53, 0xb3, 0xfb, 0x49, 0x49, 0xd1, 0x9a, 0x5e, 0xa4, 0x6b, 0x5a, + 0xf1, 0xd7, 0x76, 0x86, 0x1e, 0x3d, 0xae, 0xe5, 0x9c, 0xde, 0xb9, 0xcc, 0x50, 0x6a, 0x17, 0x8a, + 0x1e, 0x77, 0xde, 0xce, 0x35, 0x2a, 0x33, 0x15, 0xb6, 0xe8, 0xa6, 0xc7, 0x0f, 0x82, 0xd7, 0x0c, + 0xf7, 0x14, 0xfe, 0x87, 0x7b, 0xd6, 0x3f, 0xda, 0x3d, 0xcb, 0xe6, 0xd8, 0xf8, 0x54, 0x73, 0xec, + 0x8d, 0xa1, 0xbe, 0x4a, 0x05, 0x62, 0x43, 0x7e, 0x8c, 0x73, 0x33, 0x34, 0xd6, 0x69, 0xf0, 0x48, + 0x9e, 0xc3, 0xfa, 0x35, 0x9b, 0xcc, 0xc2, 0x39, 0x55, 0xee, 0x7c, 0xb1, 0x20, 0xf1, 0x2a, 0x83, + 0xd1, 0x90, 0xf1, 0x22, 0xf7, 0xbd, 0xd5, 0xfc, 0x16, 0x76, 0x06, 0xf8, 0x3e, 0x9d, 0x58, 0xbf, + 0xa0, 0x52, 0xec, 0xc2, 0x18, 0x60, 0x51, 0x5c, 0xeb, 0x86, 0xb8, 0xcd, 0xbf, 0x2d, 0xa8, 0x24, + 0x14, 0x19, 0x80, 0x8f, 0x60, 0xcb, 0x35, 0xb3, 0xcf, 0x51, 0x41, 0x67, 0x0d, 0xa1, 0xdc, 0xf9, + 0x7c, 0xa9, 0xe1, 0xb7, 0xc7, 0x63, 0x7f, 0x8d, 0x96, 0x43, 0xa2, 0x01, 0x04, 0x79, 0x94, 0x59, + 0x77, 0x94, 0x27, 0x97, 0x99, 0xe7, 0xb6, 0x71, 0x82, 0x3c, 0x21, 0x31, 0xcc, 0xf3, 0x0c, 0x0a, + 0x1c, 0xdf, 0x6b, 0xe3, 0x8a, 0x1b, 0xfc, 0x15, 0xd5, 0xf6, 0xd7, 0xa8, 0x21, 0x1c, 0x94, 0xa1, + 0x24, 0xf1, 0x2a, 0x9a, 0xeb, 0xff, 0xe4, 0xc0, 0x5e, 0xac, 0x53, 0xcd, 0x26, 0x9a, 0x7c, 0x03, + 0x77, 0xb3, 0x36, 0x46, 0x74, 0x8e, 0xdd, 0xc9, 0xd8, 0x17, 0xe4, 0x2b, 0xa8, 0x2d, 0xed, 0xe8, + 0xf0, 0x58, 0x09, 0xdc, 0xb3, 0xb8, 0xa1, 0x03, 0xcd, 0xc7, 0x38, 0x77, 0x46, 0x4c, 0xb3, 0xd8, + 0xd0, 0x63, 0x9c, 0x1f, 0x32, 0xcd, 0xc8, 0x33, 0xa8, 0xf8, 0x88, 0x32, 0x1d, 0xa4, 0x85, 0x95, + 0x83, 0x74, 0x2b, 0x00, 0xde, 0x9e, 0xa3, 0x9f, 0x3e, 0x82, 0x9f, 0xc0, 0xf6, 0x18, 0xd1, 0x77, + 0xdc, 0x4b, 0xc6, 0x39, 0x4e, 0x1c, 0xe1, 0x23, 0x37, 0x8e, 0x2e, 0xd2, 0x5a, 0xf0, 0xa1, 0x1b, + 0xc6, 0x4f, 0x7d, 0xe4, 0xe4, 0x18, 0xb6, 0xcd, 0xfa, 0x6e, 0xb8, 0x7f, 0xf3, 0x63, 0xdc, 0x5f, + 0x0b, 0x78, 0x74, 0x61, 0x3c, 0xbe, 0x5c, 0x54, 0x7d, 0xa8, 0x99, 0x9e, 0x99, 0x4b, 0x81, 0x2b, + 0x46, 0x68, 0x54, 0xae, 0x50, 0xf3, 0x4c, 0xea, 0xb0, 0x39, 0x42, 0xcd, 0x3c, 0x73, 0xde, 0x05, + 0x72, 0xc6, 0xaf, 0xcd, 0xbf, 0x2c, 0xa8, 0xde, 0x68, 0x9c, 0x1f, 0x5c, 0x3a, 0xc4, 0x4c, 0x3b, + 0xef, 0x82, 0x5d, 0x10, 0x1b, 0xba, 0x24, 0x66, 0xfa, 0xc8, 0x04, 0xc8, 0x97, 0x50, 0x35, 0x56, + 0x77, 0x5c, 0xc1, 0xd5, 0x6c, 0x8a, 0x23, 0x93, 0xb2, 0x42, 0x2b, 0x26, 0xda, 0x8d, 0x82, 0xa4, + 0x03, 0x1b, 0xd2, 0xd8, 0x20, 0x72, 0xd6, 0x5e, 0xc6, 0xc1, 0x1d, 0x19, 0x85, 0x46, 0xc8, 0x80, + 0xa3, 0x4c, 0x11, 0x51, 0xcb, 0x32, 0x39, 0x61, 0x99, 0x34, 0x42, 0x3e, 0xf9, 0x19, 0xb6, 0x6f, + 0x5d, 0x04, 0x48, 0x13, 0x3e, 0xeb, 0xef, 0x0f, 0x0e, 0x87, 0xfd, 0xfd, 0x57, 0x3d, 0xe7, 0x8c, + 0x9e, 0x9e, 0x9f, 0x76, 0x4f, 0x4f, 0x9c, 0xd7, 0x83, 0xe1, 0x59, 0xaf, 0x7b, 0x7c, 0x74, 0xdc, + 0x3b, 0xb4, 0xd7, 0xc8, 0x26, 0xe4, 0xcf, 0x4f, 0x86, 0xb6, 0x45, 0x8a, 0x50, 0xd8, 0x3f, 0x39, + 0x1f, 0xda, 0xb9, 0x27, 0x3d, 0xa8, 0x2d, 0xdd, 0x90, 0x48, 0x03, 0x1e, 0x0c, 0x7a, 0xe7, 0xbf, + 0x9d, 0xd2, 0x57, 0x1f, 0xca, 0xd3, 0x3d, 0xb3, 0xad, 0xe0, 0xe1, 0xf5, 0xe1, 0x99, 0x9d, 0xeb, + 0xbc, 0x59, 0x58, 0x92, 0x1c, 0x86, 0x17, 0x26, 0x72, 0x04, 0xe5, 0x43, 0x91, 0x84, 0xc9, 0x4e, + 0xb6, 0x1c, 0x57, 0x7b, 0xf5, 0x15, 0x3a, 0xf9, 0xcd, 0xb5, 0x96, 0xf5, 0xb5, 0x75, 0xb0, 0x03, + 0xf7, 0x3c, 0x11, 0x62, 0xd8, 0x44, 0xab, 0xb6, 0xc7, 0x35, 0x4a, 0xce, 0x26, 0x6f, 0x37, 0xcc, + 0x8e, 0x79, 0xfa, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x76, 0x65, 0x6f, 0x3a, 0x7d, 0x0a, 0x00, + 0x00, +} diff --git a/vendor/google.golang.org/grpc/credentials/alts/core/proto/grpc_gcp/handshaker.proto b/vendor/google.golang.org/grpc/credentials/alts/core/proto/grpc_gcp/handshaker.proto new file mode 100644 index 0000000..84a4153 --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/alts/core/proto/grpc_gcp/handshaker.proto @@ -0,0 +1,224 @@ +// Copyright 2018 gRPC authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +import "transport_security_common.proto"; + +package grpc.gcp; + +option java_package = "io.grpc.alts.internal"; + +enum HandshakeProtocol { + // Default value. + HANDSHAKE_PROTOCOL_UNSPECIFIED = 0; + + // TLS handshake protocol. + TLS = 1; + + // Application Layer Transport Security handshake protocol. + ALTS = 2; +} + +enum NetworkProtocol { + NETWORK_PROTOCOL_UNSPECIFIED = 0; + TCP = 1; + UDP = 2; +} + +message Endpoint { + // IP address. It should contain an IPv4 or IPv6 string literal, e.g. + // "192.168.0.1" or "2001:db8::1". + string ip_address = 1; + + // Port number. + int32 port = 2; + + // Network protocol (e.g., TCP, UDP) associated with this endpoint. + NetworkProtocol protocol = 3; +} + +message Identity { + oneof identity_oneof { + // Service account of a connection endpoint. + string service_account = 1; + + // Hostname of a connection endpoint. + string hostname = 2; + } +} + +message StartClientHandshakeReq { + // Handshake security protocol requested by the client. + HandshakeProtocol handshake_security_protocol = 1; + + // The application protocols supported by the client, e.g., "h2" (for http2), + // "grpc". + repeated string application_protocols = 2; + + // The record protocols supported by the client, e.g., + // "ALTSRP_GCM_AES128". + repeated string record_protocols = 3; + + // (Optional) Describes which server identities are acceptable by the client. + // If target identities are provided and none of them matches the peer + // identity of the server, handshake will fail. + repeated Identity target_identities = 4; + + // (Optional) Application may specify a local identity. Otherwise, the + // handshaker chooses a default local identity. + Identity local_identity = 5; + + // (Optional) Local endpoint information of the connection to the server, + // such as local IP address, port number, and network protocol. + Endpoint local_endpoint = 6; + + // (Optional) Endpoint information of the remote server, such as IP address, + // port number, and network protocol. + Endpoint remote_endpoint = 7; + + // (Optional) If target name is provided, a secure naming check is performed + // to verify that the peer authenticated identity is indeed authorized to run + // the target name. + string target_name = 8; + + // (Optional) RPC protocol versions supported by the client. + RpcProtocolVersions rpc_versions = 9; +} + +message ServerHandshakeParameters { + // The record protocols supported by the server, e.g., + // "ALTSRP_GCM_AES128". + repeated string record_protocols = 1; + + // (Optional) A list of local identities supported by the server, if + // specified. Otherwise, the handshaker chooses a default local identity. + repeated Identity local_identities = 2; +} + +message StartServerHandshakeReq { + // The application protocols supported by the server, e.g., "h2" (for http2), + // "grpc". + repeated string application_protocols = 1; + + // Handshake parameters (record protocols and local identities supported by + // the server) mapped by the handshake protocol. Each handshake security + // protocol (e.g., TLS or ALTS) has its own set of record protocols and local + // identities. Since protobuf does not support enum as key to the map, the key + // to handshake_parameters is the integer value of HandshakeProtocol enum. + map handshake_parameters = 2; + + // Bytes in out_frames returned from the peer's HandshakerResp. It is possible + // that the peer's out_frames are split into multiple HandshakReq messages. + bytes in_bytes = 3; + + // (Optional) Local endpoint information of the connection to the client, + // such as local IP address, port number, and network protocol. + Endpoint local_endpoint = 4; + + // (Optional) Endpoint information of the remote client, such as IP address, + // port number, and network protocol. + Endpoint remote_endpoint = 5; + + // (Optional) RPC protocol versions supported by the server. + RpcProtocolVersions rpc_versions = 6; +} + +message NextHandshakeMessageReq { + // Bytes in out_frames returned from the peer's HandshakerResp. It is possible + // that the peer's out_frames are split into multiple NextHandshakerMessageReq + // messages. + bytes in_bytes = 1; +} + +message HandshakerReq { + oneof req_oneof { + // The start client handshake request message. + StartClientHandshakeReq client_start = 1; + + // The start server handshake request message. + StartServerHandshakeReq server_start = 2; + + // The next handshake request message. + NextHandshakeMessageReq next = 3; + } +} + +message HandshakerResult { + // The application protocol negotiated for this connection. + string application_protocol = 1; + + // The record protocol negotiated for this connection. + string record_protocol = 2; + + // Cryptographic key data. The key data may be more than the key length + // required for the record protocol, thus the client of the handshaker + // service needs to truncate the key data into the right key length. + bytes key_data = 3; + + // The authenticated identity of the peer. + Identity peer_identity = 4; + + // The local identity used in the handshake. + Identity local_identity = 5; + + // Indicate whether the handshaker service client should keep the channel + // between the handshaker service open, e.g., in order to handle + // post-handshake messages in the future. + bool keep_channel_open = 6; + + // The RPC protocol versions supported by the peer. + RpcProtocolVersions peer_rpc_versions = 7; +} + +message HandshakerStatus { + // The status code. This could be the gRPC status code. + uint32 code = 1; + + // The status details. + string details = 2; +} + +message HandshakerResp { + // Frames to be given to the peer for the NextHandshakeMessageReq. May be + // empty if no out_frames have to be sent to the peer or if in_bytes in the + // HandshakerReq are incomplete. All the non-empty out frames must be sent to + // the peer even if the handshaker status is not OK as these frames may + // contain the alert frames. + bytes out_frames = 1; + + // Number of bytes in the in_bytes consumed by the handshaker. It is possible + // that part of in_bytes in HandshakerReq was unrelated to the handshake + // process. + uint32 bytes_consumed = 2; + + // This is set iff the handshake was successful. out_frames may still be set + // to frames that needs to be forwarded to the peer. + HandshakerResult result = 3; + + // Status of the handshaker. + HandshakerStatus status = 4; +} + +service HandshakerService { + // Handshaker service accepts a stream of handshaker request, returning a + // stream of handshaker response. Client is expected to send exactly one + // message with either client_start or server_start followed by one or more + // messages with next. Each time client sends a request, the handshaker + // service expects to respond. Client does not have to wait for service's + // response before sending next request. + rpc DoHandshake(stream HandshakerReq) + returns (stream HandshakerResp) { + } +} diff --git a/vendor/google.golang.org/grpc/credentials/alts/core/proto/grpc_gcp/transport_security_common.pb.go b/vendor/google.golang.org/grpc/credentials/alts/core/proto/grpc_gcp/transport_security_common.pb.go new file mode 100644 index 0000000..4e5f2e1 --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/alts/core/proto/grpc_gcp/transport_security_common.pb.go @@ -0,0 +1,120 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: transport_security_common.proto + +package grpc_gcp + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// The security level of the created channel. The list is sorted in increasing +// level of security. This order must always be maintained. +type SecurityLevel int32 + +const ( + SecurityLevel_SECURITY_NONE SecurityLevel = 0 + SecurityLevel_INTEGRITY_ONLY SecurityLevel = 1 + SecurityLevel_INTEGRITY_AND_PRIVACY SecurityLevel = 2 +) + +var SecurityLevel_name = map[int32]string{ + 0: "SECURITY_NONE", + 1: "INTEGRITY_ONLY", + 2: "INTEGRITY_AND_PRIVACY", +} +var SecurityLevel_value = map[string]int32{ + "SECURITY_NONE": 0, + "INTEGRITY_ONLY": 1, + "INTEGRITY_AND_PRIVACY": 2, +} + +func (x SecurityLevel) String() string { + return proto.EnumName(SecurityLevel_name, int32(x)) +} +func (SecurityLevel) EnumDescriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } + +// Max and min supported RPC protocol versions. +type RpcProtocolVersions struct { + // Maximum supported RPC version. + MaxRpcVersion *RpcProtocolVersions_Version `protobuf:"bytes,1,opt,name=max_rpc_version,json=maxRpcVersion" json:"max_rpc_version,omitempty"` + // Minimum supported RPC version. + MinRpcVersion *RpcProtocolVersions_Version `protobuf:"bytes,2,opt,name=min_rpc_version,json=minRpcVersion" json:"min_rpc_version,omitempty"` +} + +func (m *RpcProtocolVersions) Reset() { *m = RpcProtocolVersions{} } +func (m *RpcProtocolVersions) String() string { return proto.CompactTextString(m) } +func (*RpcProtocolVersions) ProtoMessage() {} +func (*RpcProtocolVersions) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } + +func (m *RpcProtocolVersions) GetMaxRpcVersion() *RpcProtocolVersions_Version { + if m != nil { + return m.MaxRpcVersion + } + return nil +} + +func (m *RpcProtocolVersions) GetMinRpcVersion() *RpcProtocolVersions_Version { + if m != nil { + return m.MinRpcVersion + } + return nil +} + +// RPC version contains a major version and a minor version. +type RpcProtocolVersions_Version struct { + Major uint32 `protobuf:"varint,1,opt,name=major" json:"major,omitempty"` + Minor uint32 `protobuf:"varint,2,opt,name=minor" json:"minor,omitempty"` +} + +func (m *RpcProtocolVersions_Version) Reset() { *m = RpcProtocolVersions_Version{} } +func (m *RpcProtocolVersions_Version) String() string { return proto.CompactTextString(m) } +func (*RpcProtocolVersions_Version) ProtoMessage() {} +func (*RpcProtocolVersions_Version) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0, 0} } + +func (m *RpcProtocolVersions_Version) GetMajor() uint32 { + if m != nil { + return m.Major + } + return 0 +} + +func (m *RpcProtocolVersions_Version) GetMinor() uint32 { + if m != nil { + return m.Minor + } + return 0 +} + +func init() { + proto.RegisterType((*RpcProtocolVersions)(nil), "grpc.gcp.RpcProtocolVersions") + proto.RegisterType((*RpcProtocolVersions_Version)(nil), "grpc.gcp.RpcProtocolVersions.Version") + proto.RegisterEnum("grpc.gcp.SecurityLevel", SecurityLevel_name, SecurityLevel_value) +} + +func init() { proto.RegisterFile("transport_security_common.proto", fileDescriptor2) } + +var fileDescriptor2 = []byte{ + // 269 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x90, 0xdf, 0x4a, 0xf3, 0x30, + 0x18, 0xc6, 0xbf, 0x0e, 0x3e, 0x95, 0x48, 0xb5, 0x46, 0x87, 0x7f, 0x4e, 0x14, 0x41, 0x10, 0x0f, + 0x72, 0xa0, 0x78, 0x01, 0x73, 0x16, 0x29, 0xcc, 0x6e, 0x66, 0x73, 0xd0, 0xa3, 0x10, 0x43, 0x19, + 0x91, 0x36, 0x6f, 0x78, 0x13, 0xc7, 0xbc, 0x65, 0xaf, 0x42, 0x9a, 0x76, 0x0c, 0xc1, 0x13, 0xcf, + 0xf2, 0xfc, 0xe0, 0xf9, 0x25, 0x79, 0xc8, 0xb9, 0x47, 0x69, 0x9c, 0x05, 0xf4, 0xc2, 0x95, 0xea, + 0x03, 0xb5, 0xff, 0x14, 0x0a, 0xea, 0x1a, 0x0c, 0xb3, 0x08, 0x1e, 0xe8, 0xce, 0x02, 0xad, 0x62, + 0x0b, 0x65, 0x2f, 0xbf, 0x22, 0x72, 0xc8, 0xad, 0x9a, 0x34, 0x58, 0x41, 0x35, 0x2f, 0xd1, 0x69, + 0x30, 0x8e, 0x3e, 0x93, 0xfd, 0x5a, 0xae, 0x04, 0x5a, 0x25, 0x96, 0x2d, 0x3b, 0x89, 0x2e, 0xa2, + 0xeb, 0xdd, 0xdb, 0x2b, 0xb6, 0xee, 0xb2, 0x5f, 0x7a, 0xac, 0x3b, 0xf0, 0xb8, 0x96, 0x2b, 0x6e, + 0x55, 0x17, 0x83, 0x4e, 0x9b, 0x1f, 0xba, 0xde, 0xdf, 0x74, 0xda, 0x6c, 0x74, 0x67, 0xf7, 0x64, + 0x7b, 0x6d, 0x3e, 0x22, 0xff, 0x6b, 0xf9, 0x0e, 0x18, 0x9e, 0x17, 0xf3, 0x36, 0x04, 0xaa, 0x0d, + 0x60, 0xb8, 0xa5, 0xa1, 0x4d, 0xb8, 0x79, 0x21, 0xf1, 0xb4, 0xdb, 0x63, 0x54, 0x2e, 0xcb, 0x8a, + 0x1e, 0x90, 0x78, 0x9a, 0x0e, 0x5f, 0x79, 0x36, 0x2b, 0x44, 0x3e, 0xce, 0xd3, 0xe4, 0x1f, 0xa5, + 0x64, 0x2f, 0xcb, 0x67, 0xe9, 0x53, 0x60, 0xe3, 0x7c, 0x54, 0x24, 0x11, 0x3d, 0x25, 0xfd, 0x0d, + 0x1b, 0xe4, 0x8f, 0x62, 0xc2, 0xb3, 0xf9, 0x60, 0x58, 0x24, 0xbd, 0x87, 0x63, 0xd2, 0xd7, 0xd0, + 0xfe, 0x41, 0x56, 0xde, 0x31, 0x6d, 0x7c, 0x89, 0x46, 0x56, 0x6f, 0x5b, 0x61, 0xe9, 0xbb, 0xef, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x1f, 0x4d, 0xc2, 0xf0, 0x8c, 0x01, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/grpc/credentials/alts/core/proto/grpc_gcp/transport_security_common.proto b/vendor/google.golang.org/grpc/credentials/alts/core/proto/grpc_gcp/transport_security_common.proto new file mode 100644 index 0000000..d0f861e --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/alts/core/proto/grpc_gcp/transport_security_common.proto @@ -0,0 +1,40 @@ +// Copyright 2018 gRPC authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package grpc.gcp; + +option java_package = "io.grpc.alts.internal"; + +// The security level of the created channel. The list is sorted in increasing +// level of security. This order must always be maintained. +enum SecurityLevel { + SECURITY_NONE = 0; + INTEGRITY_ONLY = 1; + INTEGRITY_AND_PRIVACY = 2; +} + +// Max and min supported RPC protocol versions. +message RpcProtocolVersions { + // RPC version contains a major version and a minor version. + message Version { + uint32 major = 1; + uint32 minor = 2; + } + // Maximum supported RPC version. + Version max_rpc_version = 1; + // Minimum supported RPC version. + Version min_rpc_version = 2; +} diff --git a/vendor/google.golang.org/grpc/credentials/alts/core/testutil/testutil.go b/vendor/google.golang.org/grpc/credentials/alts/core/testutil/testutil.go new file mode 100644 index 0000000..91cbd03 --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/alts/core/testutil/testutil.go @@ -0,0 +1,125 @@ +/* + * + * Copyright 2018 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Package testutil include useful test utilities for the handshaker. +package testutil + +import ( + "bytes" + "encoding/binary" + "io" + "net" + "sync" + + "google.golang.org/grpc/credentials/alts/core/conn" +) + +// Stats is used to collect statistics about concurrent handshake calls. +type Stats struct { + mu sync.Mutex + calls int + MaxConcurrentCalls int +} + +// Update updates the statistics by adding one call. +func (s *Stats) Update() func() { + s.mu.Lock() + s.calls++ + if s.calls > s.MaxConcurrentCalls { + s.MaxConcurrentCalls = s.calls + } + s.mu.Unlock() + + return func() { + s.mu.Lock() + s.calls-- + s.mu.Unlock() + } +} + +// Reset resets the statistics. +func (s *Stats) Reset() { + s.mu.Lock() + defer s.mu.Unlock() + s.calls = 0 + s.MaxConcurrentCalls = 0 +} + +// testConn mimics a net.Conn to the peer. +type testConn struct { + net.Conn + in *bytes.Buffer + out *bytes.Buffer +} + +// NewTestConn creates a new instance of testConn object. +func NewTestConn(in *bytes.Buffer, out *bytes.Buffer) net.Conn { + return &testConn{ + in: in, + out: out, + } +} + +// Read reads from the in buffer. +func (c *testConn) Read(b []byte) (n int, err error) { + return c.in.Read(b) +} + +// Write writes to the out buffer. +func (c *testConn) Write(b []byte) (n int, err error) { + return c.out.Write(b) +} + +// Close closes the testConn object. +func (c *testConn) Close() error { + return nil +} + +// unresponsiveTestConn mimics a net.Conn for an unresponsive peer. It is used +// for testing the PeerNotResponding case. +type unresponsiveTestConn struct { + net.Conn +} + +// NewUnresponsiveTestConn creates a new instance of unresponsiveTestConn object. +func NewUnresponsiveTestConn() net.Conn { + return &unresponsiveTestConn{} +} + +// Read reads from the in buffer. +func (c *unresponsiveTestConn) Read(b []byte) (n int, err error) { + return 0, io.EOF +} + +// Write writes to the out buffer. +func (c *unresponsiveTestConn) Write(b []byte) (n int, err error) { + return 0, nil +} + +// Close closes the TestConn object. +func (c *unresponsiveTestConn) Close() error { + return nil +} + +// MakeFrame creates a handshake frame. +func MakeFrame(pl string) []byte { + f := make([]byte, len(pl)+conn.MsgLenFieldSize) + binary.LittleEndian.PutUint32(f, uint32(len(pl))) + copy(f[conn.MsgLenFieldSize:], []byte(pl)) + return f +} diff --git a/vendor/google.golang.org/grpc/credentials/alts/utils.go b/vendor/google.golang.org/grpc/credentials/alts/utils.go new file mode 100644 index 0000000..86d0a21 --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/alts/utils.go @@ -0,0 +1,117 @@ +/* + * + * Copyright 2018 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package alts + +import ( + "errors" + "fmt" + "io" + "io/ioutil" + "log" + "os" + "os/exec" + "regexp" + "runtime" + "strings" + "time" +) + +const ( + linuxProductNameFile = "/sys/class/dmi/id/product_name" + windowsCheckCommand = "powershell.exe" + windowsCheckCommandArgs = "Get-WmiObject -Class Win32_BIOS" + powershellOutputFilter = "Manufacturer" + windowsManufacturerRegex = ":(.*)" + windowsCheckTimeout = 30 * time.Second +) + +type platformError string + +func (k platformError) Error() string { + return fmt.Sprintf("%s is not supported", string(k)) +} + +var ( + // The following two variables will be reassigned in tests. + runningOS = runtime.GOOS + manufacturerReader = func() (io.Reader, error) { + switch runningOS { + case "linux": + return os.Open(linuxProductNameFile) + case "windows": + cmd := exec.Command(windowsCheckCommand, windowsCheckCommandArgs) + out, err := cmd.Output() + if err != nil { + return nil, err + } + + for _, line := range strings.Split(strings.TrimSuffix(string(out), "\n"), "\n") { + if strings.HasPrefix(line, powershellOutputFilter) { + re := regexp.MustCompile(windowsManufacturerRegex) + name := re.FindString(line) + name = strings.TrimLeft(name, ":") + return strings.NewReader(name), nil + } + } + + return nil, errors.New("cannot determine the machine's manufacturer") + default: + return nil, platformError(runningOS) + } + } + vmOnGCP bool +) + +// isRunningOnGCP checks whether the local system, without doing a network request is +// running on GCP. +func isRunningOnGCP() bool { + manufacturer, err := readManufacturer() + if err != nil { + log.Fatalf("failure to read manufacturer information: %v", err) + } + name := string(manufacturer) + switch runningOS { + case "linux": + name = strings.TrimSpace(name) + return name == "Google" || name == "Google Compute Engine" + case "windows": + name = strings.Replace(name, " ", "", -1) + name = strings.Replace(name, "\n", "", -1) + name = strings.Replace(name, "\r", "", -1) + return name == "Google" + default: + log.Fatal(platformError(runningOS)) + } + return false +} + +func readManufacturer() ([]byte, error) { + reader, err := manufacturerReader() + if err != nil { + return nil, err + } + if reader == nil { + return nil, errors.New("got nil reader") + } + manufacturer, err := ioutil.ReadAll(reader) + if err != nil { + return nil, fmt.Errorf("failed reading %v: %v", linuxProductNameFile, err) + } + return manufacturer, nil +} diff --git a/vendor/google.golang.org/grpc/credentials/alts/utils_test.go b/vendor/google.golang.org/grpc/credentials/alts/utils_test.go new file mode 100644 index 0000000..32c5e1b --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/alts/utils_test.go @@ -0,0 +1,66 @@ +/* + * + * Copyright 2018 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package alts + +import ( + "io" + "strings" + "testing" +) + +func TestIsRunningOnGCP(t *testing.T) { + for _, tc := range []struct { + description string + testOS string + testReader io.Reader + out bool + }{ + // Linux tests. + {"linux: not a GCP platform", "linux", strings.NewReader("not GCP"), false}, + {"Linux: GCP platform (Google)", "linux", strings.NewReader("Google"), true}, + {"Linux: GCP platform (Google Compute Engine)", "linux", strings.NewReader("Google Compute Engine"), true}, + {"Linux: GCP platform (Google Compute Engine) with extra spaces", "linux", strings.NewReader(" Google Compute Engine "), true}, + // Windows tests. + {"windows: not a GCP platform", "windows", strings.NewReader("not GCP"), false}, + {"windows: GCP platform (Google)", "windows", strings.NewReader("Google"), true}, + {"windows: GCP platform (Google) with extra spaces", "windows", strings.NewReader(" Google "), true}, + } { + reverseFunc := setup(tc.testOS, tc.testReader) + if got, want := isRunningOnGCP(), tc.out; got != want { + t.Errorf("%v: isRunningOnGCP()=%v, want %v", tc.description, got, want) + } + reverseFunc() + } +} + +func setup(testOS string, testReader io.Reader) func() { + tmpOS := runningOS + tmpReader := manufacturerReader + + // Set test OS and reader function. + runningOS = testOS + manufacturerReader = func() (io.Reader, error) { + return testReader, nil + } + + return func() { + runningOS = tmpOS + manufacturerReader = tmpReader + } +} diff --git a/vendor/google.golang.org/grpc/credentials/credentials.go b/vendor/google.golang.org/grpc/credentials/credentials.go index b16dbd6..3351bf0 100644 --- a/vendor/google.golang.org/grpc/credentials/credentials.go +++ b/vendor/google.golang.org/grpc/credentials/credentials.go @@ -1,33 +1,18 @@ /* * - * Copyright 2014, Google Inc. - * All rights reserved. + * Copyright 2014 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -49,10 +34,8 @@ import ( "golang.org/x/net/context" ) -var ( - // alpnProtoStr are the specified application level protocols for gRPC. - alpnProtoStr = []string{"h2"} -) +// alpnProtoStr are the specified application level protocols for gRPC. +var alpnProtoStr = []string{"h2"} // PerRPCCredentials defines the common interface for the credentials which need to // attach security information to every RPC (e.g., oauth2). @@ -60,8 +43,9 @@ type PerRPCCredentials interface { // GetRequestMetadata gets the current request metadata, refreshing // tokens if required. This should be called by the transport layer on // each request, and the data should be populated in headers or other - // context. uri is the URI of the entry point for the request. When - // supported by the underlying implementation, ctx can be used for + // context. If a status code is returned, it will be used as the status + // for the RPC. uri is the URI of the entry point for the request. + // When supported by the underlying implementation, ctx can be used for // timeout and cancellation. // TODO(zhaoq): Define the set of the qualified keys instead of leaving // it as an arbitrary string. @@ -89,11 +73,9 @@ type AuthInfo interface { AuthType() string } -var ( - // ErrConnDispatched indicates that rawConn has been dispatched out of gRPC - // and the caller should not close rawConn. - ErrConnDispatched = errors.New("credentials: rawConn is dispatched out of gRPC") -) +// ErrConnDispatched indicates that rawConn has been dispatched out of gRPC +// and the caller should not close rawConn. +var ErrConnDispatched = errors.New("credentials: rawConn is dispatched out of gRPC") // TransportCredentials defines the common interface for all the live gRPC wire // protocols and supported transport security protocols (e.g., TLS, SSL). @@ -106,10 +88,14 @@ type TransportCredentials interface { // (io.EOF, context.DeadlineExceeded or err.Temporary() == true). // If the returned error is a wrapper error, implementations should make sure that // the error implements Temporary() to have the correct retry behaviors. + // + // If the returned net.Conn is closed, it MUST close the net.Conn provided. ClientHandshake(context.Context, string, net.Conn) (net.Conn, AuthInfo, error) // ServerHandshake does the authentication handshake for servers. It returns // the authenticated connection and the corresponding auth information about // the connection. + // + // If the returned net.Conn is closed, it MUST close the net.Conn provided. ServerHandshake(net.Conn) (net.Conn, AuthInfo, error) // Info provides the ProtocolInfo of this TransportCredentials. Info() ProtocolInfo @@ -146,15 +132,15 @@ func (c tlsCreds) Info() ProtocolInfo { } } -func (c *tlsCreds) ClientHandshake(ctx context.Context, addr string, rawConn net.Conn) (_ net.Conn, _ AuthInfo, err error) { +func (c *tlsCreds) ClientHandshake(ctx context.Context, authority string, rawConn net.Conn) (_ net.Conn, _ AuthInfo, err error) { // use local cfg to avoid clobbering ServerName if using multiple endpoints cfg := cloneTLSConfig(c.config) if cfg.ServerName == "" { - colonPos := strings.LastIndex(addr, ":") + colonPos := strings.LastIndex(authority, ":") if colonPos == -1 { - colonPos = len(addr) + colonPos = len(authority) } - cfg.ServerName = addr[:colonPos] + cfg.ServerName = authority[:colonPos] } conn := tls.Client(rawConn, cfg) errChannel := make(chan error, 1) diff --git a/vendor/google.golang.org/grpc/credentials/credentials_test.go b/vendor/google.golang.org/grpc/credentials/credentials_test.go index 1609374..9b13db5 100644 --- a/vendor/google.golang.org/grpc/credentials/credentials_test.go +++ b/vendor/google.golang.org/grpc/credentials/credentials_test.go @@ -1,33 +1,18 @@ /* * - * Copyright 2016, Google Inc. - * All rights reserved. + * Copyright 2016 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -39,6 +24,7 @@ import ( "testing" "golang.org/x/net/context" + "google.golang.org/grpc/testdata" ) func TestTLSOverrideServerName(t *testing.T) { @@ -65,8 +51,6 @@ func TestTLSClone(t *testing.T) { } -const tlsDir = "../test/testdata/" - type serverHandshake func(net.Conn) (AuthInfo, error) func TestClientHandshakeReturnsAuthInfo(t *testing.T) { @@ -144,7 +128,7 @@ func launchServer(t *testing.T, hs serverHandshake, done chan AuthInfo) net.List return lis } -// Is run in a seperate goroutine. +// Is run in a separate goroutine. func serverHandle(t *testing.T, hs serverHandshake, done chan AuthInfo, lis net.Listener) { serverRawConn, err := lis.Accept() if err != nil { @@ -177,7 +161,7 @@ func clientHandle(t *testing.T, hs func(net.Conn, string) (AuthInfo, error), lis // Server handshake implementation in gRPC. func gRPCServerHandshake(conn net.Conn) (AuthInfo, error) { - serverTLS, err := NewServerTLSFromFile(tlsDir+"server1.pem", tlsDir+"server1.key") + serverTLS, err := NewServerTLSFromFile(testdata.Path("server1.pem"), testdata.Path("server1.key")) if err != nil { return nil, err } @@ -199,7 +183,7 @@ func gRPCClientHandshake(conn net.Conn, lisAddr string) (AuthInfo, error) { } func tlsServerHandshake(conn net.Conn) (AuthInfo, error) { - cert, err := tls.LoadX509KeyPair(tlsDir+"server1.pem", tlsDir+"server1.key") + cert, err := tls.LoadX509KeyPair(testdata.Path("server1.pem"), testdata.Path("server1.key")) if err != nil { return nil, err } diff --git a/vendor/google.golang.org/grpc/credentials/credentials_util_go17.go b/vendor/google.golang.org/grpc/credentials/credentials_util_go17.go index 7597b09..60409aa 100644 --- a/vendor/google.golang.org/grpc/credentials/credentials_util_go17.go +++ b/vendor/google.golang.org/grpc/credentials/credentials_util_go17.go @@ -3,34 +3,19 @@ /* * - * Copyright 2016, Google Inc. - * All rights reserved. + * Copyright 2016 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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/google.golang.org/grpc/credentials/credentials_util_go18.go b/vendor/google.golang.org/grpc/credentials/credentials_util_go18.go index 0ecf342..93f0e1d 100644 --- a/vendor/google.golang.org/grpc/credentials/credentials_util_go18.go +++ b/vendor/google.golang.org/grpc/credentials/credentials_util_go18.go @@ -2,34 +2,19 @@ /* * - * Copyright 2017, Google Inc. - * All rights reserved. + * Copyright 2017 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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/google.golang.org/grpc/credentials/credentials_util_pre_go17.go b/vendor/google.golang.org/grpc/credentials/credentials_util_pre_go17.go index cfd40df..d6bbcc9 100644 --- a/vendor/google.golang.org/grpc/credentials/credentials_util_pre_go17.go +++ b/vendor/google.golang.org/grpc/credentials/credentials_util_pre_go17.go @@ -2,34 +2,19 @@ /* * - * Copyright 2016, Google Inc. - * All rights reserved. + * Copyright 2016 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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/google.golang.org/grpc/credentials/oauth/oauth.go b/vendor/google.golang.org/grpc/credentials/oauth/oauth.go index 126bc78..f6d597a 100644 --- a/vendor/google.golang.org/grpc/credentials/oauth/oauth.go +++ b/vendor/google.golang.org/grpc/credentials/oauth/oauth.go @@ -1,33 +1,18 @@ /* * - * Copyright 2015, Google Inc. - * All rights reserved. + * Copyright 2015 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -95,7 +80,7 @@ func (j jwtAccess) GetRequestMetadata(ctx context.Context, uri ...string) (map[s return nil, err } return map[string]string{ - "authorization": token.TokenType + " " + token.AccessToken, + "authorization": token.Type() + " " + token.AccessToken, }, nil } @@ -115,7 +100,7 @@ func NewOauthAccess(token *oauth2.Token) credentials.PerRPCCredentials { func (oa oauthAccess) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) { return map[string]string{ - "authorization": oa.token.TokenType + " " + oa.token.AccessToken, + "authorization": oa.token.Type() + " " + oa.token.AccessToken, }, nil } @@ -149,7 +134,7 @@ func (s *serviceAccount) GetRequestMetadata(ctx context.Context, uri ...string) } } return map[string]string{ - "authorization": s.t.TokenType + " " + s.t.AccessToken, + "authorization": s.t.Type() + " " + s.t.AccessToken, }, nil } diff --git a/vendor/google.golang.org/grpc/doc.go b/vendor/google.golang.org/grpc/doc.go index a35f218..187adbb 100644 --- a/vendor/google.golang.org/grpc/doc.go +++ b/vendor/google.golang.org/grpc/doc.go @@ -1,6 +1,24 @@ +/* + * + * Copyright 2015 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + /* Package grpc implements an RPC system called gRPC. -See www.grpc.io for more information about gRPC. +See grpc.io for more information about gRPC. */ package grpc // import "google.golang.org/grpc" diff --git a/vendor/google.golang.org/grpc/encoding/encoding.go b/vendor/google.golang.org/grpc/encoding/encoding.go new file mode 100644 index 0000000..8e26c19 --- /dev/null +++ b/vendor/google.golang.org/grpc/encoding/encoding.go @@ -0,0 +1,118 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Package encoding defines the interface for the compressor and codec, and +// functions to register and retrieve compressors and codecs. +// +// This package is EXPERIMENTAL. +package encoding + +import ( + "io" + "strings" +) + +// Identity specifies the optional encoding for uncompressed streams. +// It is intended for grpc internal use only. +const Identity = "identity" + +// Compressor is used for compressing and decompressing when sending or +// receiving messages. +type Compressor interface { + // Compress writes the data written to wc to w after compressing it. If an + // error occurs while initializing the compressor, that error is returned + // instead. + Compress(w io.Writer) (io.WriteCloser, error) + // Decompress reads data from r, decompresses it, and provides the + // uncompressed data via the returned io.Reader. If an error occurs while + // initializing the decompressor, that error is returned instead. + Decompress(r io.Reader) (io.Reader, error) + // Name is the name of the compression codec and is used to set the content + // coding header. The result must be static; the result cannot change + // between calls. + Name() string +} + +var registeredCompressor = make(map[string]Compressor) + +// RegisterCompressor registers the compressor with gRPC by its name. It can +// be activated when sending an RPC via grpc.UseCompressor(). It will be +// automatically accessed when receiving a message based on the content coding +// header. Servers also use it to send a response with the same encoding as +// the request. +// +// NOTE: this function must only be called during initialization time (i.e. in +// an init() function), and is not thread-safe. If multiple Compressors are +// registered with the same name, the one registered last will take effect. +func RegisterCompressor(c Compressor) { + registeredCompressor[c.Name()] = c +} + +// GetCompressor returns Compressor for the given compressor name. +func GetCompressor(name string) Compressor { + return registeredCompressor[name] +} + +// Codec defines the interface gRPC uses to encode and decode messages. Note +// that implementations of this interface must be thread safe; a Codec's +// methods can be called from concurrent goroutines. +type Codec interface { + // Marshal returns the wire format of v. + Marshal(v interface{}) ([]byte, error) + // Unmarshal parses the wire format into v. + Unmarshal(data []byte, v interface{}) error + // Name returns the name of the Codec implementation. The returned string + // will be used as part of content type in transmission. The result must be + // static; the result cannot change between calls. + Name() string +} + +var registeredCodecs = make(map[string]Codec, 0) + +// RegisterCodec registers the provided Codec for use with all gRPC clients and +// servers. +// +// The Codec will be stored and looked up by result of its Name() method, which +// should match the content-subtype of the encoding handled by the Codec. This +// is case-insensitive, and is stored and looked up as lowercase. If the +// result of calling Name() is an empty string, RegisterCodec will panic. See +// Content-Type on +// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests for +// more details. +// +// NOTE: this function must only be called during initialization time (i.e. in +// an init() function), and is not thread-safe. If multiple Compressors are +// registered with the same name, the one registered last will take effect. +func RegisterCodec(codec Codec) { + if codec == nil { + panic("cannot register a nil Codec") + } + contentSubtype := strings.ToLower(codec.Name()) + if contentSubtype == "" { + panic("cannot register Codec with empty string result for String()") + } + registeredCodecs[contentSubtype] = codec +} + +// GetCodec gets a registered Codec by content-subtype, or nil if no Codec is +// registered for the content-subtype. +// +// The content-subtype is expected to be lowercase. +func GetCodec(contentSubtype string) Codec { + return registeredCodecs[contentSubtype] +} diff --git a/vendor/google.golang.org/grpc/encoding/gzip/gzip.go b/vendor/google.golang.org/grpc/encoding/gzip/gzip.go new file mode 100644 index 0000000..09564db --- /dev/null +++ b/vendor/google.golang.org/grpc/encoding/gzip/gzip.go @@ -0,0 +1,117 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Package gzip implements and registers the gzip compressor +// during the initialization. +// This package is EXPERIMENTAL. +package gzip + +import ( + "compress/gzip" + "fmt" + "io" + "io/ioutil" + "sync" + + "google.golang.org/grpc/encoding" +) + +// Name is the name registered for the gzip compressor. +const Name = "gzip" + +func init() { + c := &compressor{} + c.poolCompressor.New = func() interface{} { + return &writer{Writer: gzip.NewWriter(ioutil.Discard), pool: &c.poolCompressor} + } + encoding.RegisterCompressor(c) +} + +type writer struct { + *gzip.Writer + pool *sync.Pool +} + +// SetLevel updates the registered gzip compressor to use the compression level specified (gzip.HuffmanOnly is not supported). +// NOTE: this function must only be called during initialization time (i.e. in an init() function), +// and is not thread-safe. +// +// The error returned will be nil if the specified level is valid. +func SetLevel(level int) error { + if level < gzip.DefaultCompression || level > gzip.BestCompression { + return fmt.Errorf("grpc: invalid gzip compression level: %d", level) + } + c := encoding.GetCompressor(Name).(*compressor) + c.poolCompressor.New = func() interface{} { + w, err := gzip.NewWriterLevel(ioutil.Discard, level) + if err != nil { + panic(err) + } + return &writer{Writer: w, pool: &c.poolCompressor} + } + return nil +} + +func (c *compressor) Compress(w io.Writer) (io.WriteCloser, error) { + z := c.poolCompressor.Get().(*writer) + z.Writer.Reset(w) + return z, nil +} + +func (z *writer) Close() error { + defer z.pool.Put(z) + return z.Writer.Close() +} + +type reader struct { + *gzip.Reader + pool *sync.Pool +} + +func (c *compressor) Decompress(r io.Reader) (io.Reader, error) { + z, inPool := c.poolDecompressor.Get().(*reader) + if !inPool { + newZ, err := gzip.NewReader(r) + if err != nil { + return nil, err + } + return &reader{Reader: newZ, pool: &c.poolDecompressor}, nil + } + if err := z.Reset(r); err != nil { + c.poolDecompressor.Put(z) + return nil, err + } + return z, nil +} + +func (z *reader) Read(p []byte) (n int, err error) { + n, err = z.Reader.Read(p) + if err == io.EOF { + z.pool.Put(z) + } + return n, err +} + +func (c *compressor) Name() string { + return Name +} + +type compressor struct { + poolCompressor sync.Pool + poolDecompressor sync.Pool +} diff --git a/vendor/google.golang.org/grpc/encoding/proto/proto.go b/vendor/google.golang.org/grpc/encoding/proto/proto.go new file mode 100644 index 0000000..66b97a6 --- /dev/null +++ b/vendor/google.golang.org/grpc/encoding/proto/proto.go @@ -0,0 +1,110 @@ +/* + * + * Copyright 2018 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Package proto defines the protobuf codec. Importing this package will +// register the codec. +package proto + +import ( + "math" + "sync" + + "github.com/golang/protobuf/proto" + "google.golang.org/grpc/encoding" +) + +// Name is the name registered for the proto compressor. +const Name = "proto" + +func init() { + encoding.RegisterCodec(codec{}) +} + +// codec is a Codec implementation with protobuf. It is the default codec for gRPC. +type codec struct{} + +type cachedProtoBuffer struct { + lastMarshaledSize uint32 + proto.Buffer +} + +func capToMaxInt32(val int) uint32 { + if val > math.MaxInt32 { + return uint32(math.MaxInt32) + } + return uint32(val) +} + +func marshal(v interface{}, cb *cachedProtoBuffer) ([]byte, error) { + protoMsg := v.(proto.Message) + newSlice := make([]byte, 0, cb.lastMarshaledSize) + + cb.SetBuf(newSlice) + cb.Reset() + if err := cb.Marshal(protoMsg); err != nil { + return nil, err + } + out := cb.Bytes() + cb.lastMarshaledSize = capToMaxInt32(len(out)) + return out, nil +} + +func (codec) Marshal(v interface{}) ([]byte, error) { + if pm, ok := v.(proto.Marshaler); ok { + // object can marshal itself, no need for buffer + return pm.Marshal() + } + + cb := protoBufferPool.Get().(*cachedProtoBuffer) + out, err := marshal(v, cb) + + // put back buffer and lose the ref to the slice + cb.SetBuf(nil) + protoBufferPool.Put(cb) + return out, err +} + +func (codec) Unmarshal(data []byte, v interface{}) error { + protoMsg := v.(proto.Message) + protoMsg.Reset() + + if pu, ok := protoMsg.(proto.Unmarshaler); ok { + // object can unmarshal itself, no need for buffer + return pu.Unmarshal(data) + } + + cb := protoBufferPool.Get().(*cachedProtoBuffer) + cb.SetBuf(data) + err := cb.Unmarshal(protoMsg) + cb.SetBuf(nil) + protoBufferPool.Put(cb) + return err +} + +func (codec) Name() string { + return Name +} + +var protoBufferPool = &sync.Pool{ + New: func() interface{} { + return &cachedProtoBuffer{ + Buffer: proto.Buffer{}, + lastMarshaledSize: 16, + } + }, +} diff --git a/vendor/google.golang.org/grpc/encoding/proto/proto_benchmark_test.go b/vendor/google.golang.org/grpc/encoding/proto/proto_benchmark_test.go new file mode 100644 index 0000000..63ea57d --- /dev/null +++ b/vendor/google.golang.org/grpc/encoding/proto/proto_benchmark_test.go @@ -0,0 +1,100 @@ +// +build go1.7 + +/* + * + * Copyright 2014 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package proto + +import ( + "fmt" + "testing" + + "github.com/golang/protobuf/proto" + "google.golang.org/grpc/encoding" + "google.golang.org/grpc/test/codec_perf" +) + +func setupBenchmarkProtoCodecInputs(payloadBaseSize uint32) []proto.Message { + payloadBase := make([]byte, payloadBaseSize) + // arbitrary byte slices + payloadSuffixes := [][]byte{ + []byte("one"), + []byte("two"), + []byte("three"), + []byte("four"), + []byte("five"), + } + protoStructs := make([]proto.Message, 0) + + for _, p := range payloadSuffixes { + ps := &codec_perf.Buffer{} + ps.Body = append(payloadBase, p...) + protoStructs = append(protoStructs, ps) + } + + return protoStructs +} + +// The possible use of certain protobuf APIs like the proto.Buffer API potentially involves caching +// on our side. This can add checks around memory allocations and possible contention. +// Example run: go test -v -run=^$ -bench=BenchmarkProtoCodec -benchmem +func BenchmarkProtoCodec(b *testing.B) { + // range of message sizes + payloadBaseSizes := make([]uint32, 0) + for i := uint32(0); i <= 12; i += 4 { + payloadBaseSizes = append(payloadBaseSizes, 1< 1 { name = os.Args[1] } - r, err := c.SayHello(context.Background(), &pb.HelloRequest{Name: name}) + ctx, cancel := context.WithTimeout(context.Background(), time.Second) + defer cancel() + r, err := c.SayHello(ctx, &pb.HelloRequest{Name: name}) if err != nil { log.Fatalf("could not greet: %v", err) } diff --git a/vendor/google.golang.org/grpc/examples/helloworld/greeter_server/main.go b/vendor/google.golang.org/grpc/examples/helloworld/greeter_server/main.go index 162cf90..702a3b6 100644 --- a/vendor/google.golang.org/grpc/examples/helloworld/greeter_server/main.go +++ b/vendor/google.golang.org/grpc/examples/helloworld/greeter_server/main.go @@ -1,36 +1,23 @@ /* * - * Copyright 2015, Google Inc. - * All rights reserved. + * Copyright 2015 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ +//go:generate protoc -I ../helloworld --go_out=plugins=grpc:../helloworld ../helloworld/helloworld.proto + package main import ( diff --git a/vendor/google.golang.org/grpc/examples/helloworld/helloworld/helloworld.pb.go b/vendor/google.golang.org/grpc/examples/helloworld/helloworld/helloworld.pb.go index c8c8942..64bd1ef 100644 --- a/vendor/google.golang.org/grpc/examples/helloworld/helloworld/helloworld.pb.go +++ b/vendor/google.golang.org/grpc/examples/helloworld/helloworld/helloworld.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: helloworld.proto -// DO NOT EDIT! /* Package helloworld is a generated protocol buffer package. @@ -44,6 +43,13 @@ func (m *HelloRequest) String() string { return proto.CompactTextStri func (*HelloRequest) ProtoMessage() {} func (*HelloRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } +func (m *HelloRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + // The response message containing the greetings type HelloReply struct { Message string `protobuf:"bytes,1,opt,name=message" json:"message,omitempty"` @@ -54,6 +60,13 @@ func (m *HelloReply) String() string { return proto.CompactTextString func (*HelloReply) ProtoMessage() {} func (*HelloReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } +func (m *HelloReply) GetMessage() string { + if m != nil { + return m.Message + } + return "" +} + func init() { proto.RegisterType((*HelloRequest)(nil), "helloworld.HelloRequest") proto.RegisterType((*HelloReply)(nil), "helloworld.HelloReply") @@ -136,16 +149,16 @@ var _Greeter_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("helloworld.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 174 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0x12, 0xc8, 0x48, 0xcd, 0xc9, + // 175 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0xc8, 0x48, 0xcd, 0xc9, 0xc9, 0x2f, 0xcf, 0x2f, 0xca, 0x49, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x42, 0x88, 0x28, 0x29, 0x71, 0xf1, 0x78, 0x80, 0x78, 0x41, 0xa9, 0x85, 0xa5, 0xa9, 0xc5, 0x25, 0x42, 0x42, 0x5c, 0x2c, 0x79, 0x89, 0xb9, 0xa9, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x9c, 0x41, 0x60, 0xb6, 0x92, 0x1a, 0x17, 0x17, 0x54, 0x4d, 0x41, 0x4e, 0xa5, 0x90, 0x04, 0x17, 0x7b, 0x6e, 0x6a, 0x71, 0x71, 0x62, 0x3a, 0x4c, 0x11, 0x8c, 0x6b, 0xe4, 0xc9, 0xc5, 0xee, 0x5e, 0x94, 0x9a, 0x5a, 0x92, 0x5a, 0x24, 0x64, 0xc7, 0xc5, 0x11, 0x9c, 0x58, 0x09, 0xd6, 0x25, 0x24, 0xa1, 0x87, 0xe4, 0x02, 0x64, - 0xcb, 0xa4, 0xc4, 0xb0, 0xc8, 0x00, 0xad, 0x50, 0x62, 0x70, 0x32, 0xe0, 0x92, 0xce, 0xcc, 0xd7, - 0x4b, 0x2f, 0x2a, 0x48, 0xd6, 0x4b, 0xad, 0x48, 0xcc, 0x2d, 0xc8, 0x49, 0x2d, 0x46, 0x52, 0xeb, - 0xc4, 0x0f, 0x56, 0x1c, 0x0e, 0x62, 0x07, 0x80, 0xbc, 0x14, 0xc0, 0x98, 0xc4, 0x06, 0xf6, 0x9b, - 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x0f, 0xb7, 0xcd, 0xf2, 0xef, 0x00, 0x00, 0x00, + 0xcb, 0xa4, 0xc4, 0xb0, 0xc8, 0x14, 0xe4, 0x54, 0x2a, 0x31, 0x38, 0x19, 0x70, 0x49, 0x67, 0xe6, + 0xeb, 0xa5, 0x17, 0x15, 0x24, 0xeb, 0xa5, 0x56, 0x24, 0xe6, 0x16, 0xe4, 0xa4, 0x16, 0x23, 0xa9, + 0x75, 0xe2, 0x07, 0x2b, 0x0e, 0x07, 0xb1, 0x03, 0x40, 0x5e, 0x0a, 0x60, 0x4c, 0x62, 0x03, 0xfb, + 0xcd, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x0f, 0xb7, 0xcd, 0xf2, 0xef, 0x00, 0x00, 0x00, } diff --git a/vendor/google.golang.org/grpc/examples/helloworld/helloworld/helloworld.proto b/vendor/google.golang.org/grpc/examples/helloworld/helloworld/helloworld.proto index c3ddd4a..d79a6a0 100644 --- a/vendor/google.golang.org/grpc/examples/helloworld/helloworld/helloworld.proto +++ b/vendor/google.golang.org/grpc/examples/helloworld/helloworld/helloworld.proto @@ -1,31 +1,16 @@ -// Copyright 2015, Google Inc. -// All rights reserved. +// Copyright 2015 gRPC authors. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// 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 // -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// http://www.apache.org/licenses/LICENSE-2.0 // -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// 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. syntax = "proto3"; diff --git a/vendor/google.golang.org/grpc/examples/helloworld/mock_helloworld/hw_mock_test.go b/vendor/google.golang.org/grpc/examples/helloworld/mock_helloworld/hw_mock_test.go index ecda342..3966763 100644 --- a/vendor/google.golang.org/grpc/examples/helloworld/mock_helloworld/hw_mock_test.go +++ b/vendor/google.golang.org/grpc/examples/helloworld/mock_helloworld/hw_mock_test.go @@ -1,8 +1,27 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + package mock_helloworld_test import ( "fmt" "testing" + "time" "github.com/golang/mock/gomock" "github.com/golang/protobuf/proto" @@ -41,7 +60,9 @@ func TestSayHello(t *testing.T) { } func testSayHello(t *testing.T, client helloworld.GreeterClient) { - r, err := client.SayHello(context.Background(), &helloworld.HelloRequest{Name: "unit_test"}) + ctx, cancel := context.WithTimeout(context.Background(), time.Second) + defer cancel() + r, err := client.SayHello(ctx, &helloworld.HelloRequest{Name: "unit_test"}) if err != nil || r.Message != "Mocked Interface" { t.Errorf("mocking failed") } diff --git a/vendor/google.golang.org/grpc/examples/route_guide/README.md b/vendor/google.golang.org/grpc/examples/route_guide/README.md index a7c0c2b..ddec3a0 100644 --- a/vendor/google.golang.org/grpc/examples/route_guide/README.md +++ b/vendor/google.golang.org/grpc/examples/route_guide/README.md @@ -2,9 +2,9 @@ The route guide server and client demonstrate how to use grpc go libraries to perform unary, client streaming, server streaming and full duplex RPCs. -Please refer to [gRPC Basics: Go] (http://www.grpc.io/docs/tutorials/basic/go.html) for more information. +Please refer to [gRPC Basics: Go](https://grpc.io/docs/tutorials/basic/go.html) for more information. -See the definition of the route guide service in proto/route_guide.proto. +See the definition of the route guide service in routeguide/route_guide.proto. # Run the sample code To compile and run the server, assuming you are in the root of the route_guide diff --git a/vendor/google.golang.org/grpc/examples/route_guide/client/client.go b/vendor/google.golang.org/grpc/examples/route_guide/client/client.go index fff6398..1ad1c17 100644 --- a/vendor/google.golang.org/grpc/examples/route_guide/client/client.go +++ b/vendor/google.golang.org/grpc/examples/route_guide/client/client.go @@ -1,45 +1,31 @@ /* * - * Copyright 2015, Google Inc. - * All rights reserved. + * Copyright 2015 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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 main implements a simple gRPC client that demonstrates how to use gRPC-Go libraries // to perform unary, client streaming, server streaming and full duplex RPCs. // -// It interacts with the route guide service whose definition can be found in proto/route_guide.proto. +// It interacts with the route guide service whose definition can be found in routeguide/route_guide.proto. package main import ( "flag" "io" + "log" "math/rand" "time" @@ -47,32 +33,36 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/credentials" pb "google.golang.org/grpc/examples/route_guide/routeguide" - "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/testdata" ) var ( tls = flag.Bool("tls", false, "Connection uses TLS if true, else plain TCP") - caFile = flag.String("ca_file", "testdata/ca.pem", "The file containning the CA root cert file") + caFile = flag.String("ca_file", "", "The file containning the CA root cert file") serverAddr = flag.String("server_addr", "127.0.0.1:10000", "The server address in the format of host:port") serverHostOverride = flag.String("server_host_override", "x.test.youtube.com", "The server name use to verify the hostname returned by TLS handshake") ) // printFeature gets the feature for the given point. func printFeature(client pb.RouteGuideClient, point *pb.Point) { - grpclog.Printf("Getting feature for point (%d, %d)", point.Latitude, point.Longitude) - feature, err := client.GetFeature(context.Background(), point) + log.Printf("Getting feature for point (%d, %d)", point.Latitude, point.Longitude) + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + feature, err := client.GetFeature(ctx, point) if err != nil { - grpclog.Fatalf("%v.GetFeatures(_) = _, %v: ", client, err) + log.Fatalf("%v.GetFeatures(_) = _, %v: ", client, err) } - grpclog.Println(feature) + log.Println(feature) } // printFeatures lists all the features within the given bounding Rectangle. func printFeatures(client pb.RouteGuideClient, rect *pb.Rectangle) { - grpclog.Printf("Looking for features within %v", rect) - stream, err := client.ListFeatures(context.Background(), rect) + log.Printf("Looking for features within %v", rect) + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + stream, err := client.ListFeatures(ctx, rect) if err != nil { - grpclog.Fatalf("%v.ListFeatures(_) = _, %v", client, err) + log.Fatalf("%v.ListFeatures(_) = _, %v", client, err) } for { feature, err := stream.Recv() @@ -80,9 +70,9 @@ func printFeatures(client pb.RouteGuideClient, rect *pb.Rectangle) { break } if err != nil { - grpclog.Fatalf("%v.ListFeatures(_) = _, %v", client, err) + log.Fatalf("%v.ListFeatures(_) = _, %v", client, err) } - grpclog.Println(feature) + log.Println(feature) } } @@ -95,36 +85,40 @@ func runRecordRoute(client pb.RouteGuideClient) { for i := 0; i < pointCount; i++ { points = append(points, randomPoint(r)) } - grpclog.Printf("Traversing %d points.", len(points)) - stream, err := client.RecordRoute(context.Background()) + log.Printf("Traversing %d points.", len(points)) + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + stream, err := client.RecordRoute(ctx) if err != nil { - grpclog.Fatalf("%v.RecordRoute(_) = _, %v", client, err) + log.Fatalf("%v.RecordRoute(_) = _, %v", client, err) } for _, point := range points { if err := stream.Send(point); err != nil { - grpclog.Fatalf("%v.Send(%v) = %v", stream, point, err) + log.Fatalf("%v.Send(%v) = %v", stream, point, err) } } reply, err := stream.CloseAndRecv() if err != nil { - grpclog.Fatalf("%v.CloseAndRecv() got error %v, want %v", stream, err, nil) + log.Fatalf("%v.CloseAndRecv() got error %v, want %v", stream, err, nil) } - grpclog.Printf("Route summary: %v", reply) + log.Printf("Route summary: %v", reply) } // runRouteChat receives a sequence of route notes, while sending notes for various locations. func runRouteChat(client pb.RouteGuideClient) { notes := []*pb.RouteNote{ - {&pb.Point{Latitude: 0, Longitude: 1}, "First message"}, - {&pb.Point{Latitude: 0, Longitude: 2}, "Second message"}, - {&pb.Point{Latitude: 0, Longitude: 3}, "Third message"}, - {&pb.Point{Latitude: 0, Longitude: 1}, "Fourth message"}, - {&pb.Point{Latitude: 0, Longitude: 2}, "Fifth message"}, - {&pb.Point{Latitude: 0, Longitude: 3}, "Sixth message"}, + {Location: &pb.Point{Latitude: 0, Longitude: 1}, Message: "First message"}, + {Location: &pb.Point{Latitude: 0, Longitude: 2}, Message: "Second message"}, + {Location: &pb.Point{Latitude: 0, Longitude: 3}, Message: "Third message"}, + {Location: &pb.Point{Latitude: 0, Longitude: 1}, Message: "Fourth message"}, + {Location: &pb.Point{Latitude: 0, Longitude: 2}, Message: "Fifth message"}, + {Location: &pb.Point{Latitude: 0, Longitude: 3}, Message: "Sixth message"}, } - stream, err := client.RouteChat(context.Background()) + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + stream, err := client.RouteChat(ctx) if err != nil { - grpclog.Fatalf("%v.RouteChat(_) = _, %v", client, err) + log.Fatalf("%v.RouteChat(_) = _, %v", client, err) } waitc := make(chan struct{}) go func() { @@ -136,14 +130,14 @@ func runRouteChat(client pb.RouteGuideClient) { return } if err != nil { - grpclog.Fatalf("Failed to receive a note : %v", err) + log.Fatalf("Failed to receive a note : %v", err) } - grpclog.Printf("Got message %s at point(%d, %d)", in.Message, in.Location.Latitude, in.Location.Longitude) + log.Printf("Got message %s at point(%d, %d)", in.Message, in.Location.Latitude, in.Location.Longitude) } }() for _, note := range notes { if err := stream.Send(note); err != nil { - grpclog.Fatalf("Failed to send a note: %v", err) + log.Fatalf("Failed to send a note: %v", err) } } stream.CloseSend() @@ -160,19 +154,12 @@ func main() { flag.Parse() var opts []grpc.DialOption if *tls { - var sn string - if *serverHostOverride != "" { - sn = *serverHostOverride + if *caFile == "" { + *caFile = testdata.Path("ca.pem") } - var creds credentials.TransportCredentials - if *caFile != "" { - var err error - creds, err = credentials.NewClientTLSFromFile(*caFile, sn) - if err != nil { - grpclog.Fatalf("Failed to create TLS credentials %v", err) - } - } else { - creds = credentials.NewClientTLSFromCert(nil, sn) + creds, err := credentials.NewClientTLSFromFile(*caFile, *serverHostOverride) + if err != nil { + log.Fatalf("Failed to create TLS credentials %v", err) } opts = append(opts, grpc.WithTransportCredentials(creds)) } else { @@ -180,7 +167,7 @@ func main() { } conn, err := grpc.Dial(*serverAddr, opts...) if err != nil { - grpclog.Fatalf("fail to dial: %v", err) + log.Fatalf("fail to dial: %v", err) } defer conn.Close() client := pb.NewRouteGuideClient(conn) diff --git a/vendor/google.golang.org/grpc/examples/route_guide/mock_routeguide/rg_mock_test.go b/vendor/google.golang.org/grpc/examples/route_guide/mock_routeguide/rg_mock_test.go index 247399b..8525cd5 100644 --- a/vendor/google.golang.org/grpc/examples/route_guide/mock_routeguide/rg_mock_test.go +++ b/vendor/google.golang.org/grpc/examples/route_guide/mock_routeguide/rg_mock_test.go @@ -1,8 +1,27 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + package mock_routeguide_test import ( "fmt" "testing" + "time" "github.com/golang/mock/gomock" "github.com/golang/protobuf/proto" @@ -11,12 +30,10 @@ import ( rgpb "google.golang.org/grpc/examples/route_guide/routeguide" ) -var ( - msg = &rgpb.RouteNote{ - Location: &rgpb.Point{Latitude: 17, Longitude: 29}, - Message: "Taxi-cab", - } -) +var msg = &rgpb.RouteNote{ + Location: &rgpb.Point{Latitude: 17, Longitude: 29}, + Message: "Taxi-cab", +} func TestRouteChat(t *testing.T) { ctrl := gomock.NewController(t) @@ -43,7 +60,9 @@ func TestRouteChat(t *testing.T) { } func testRouteChat(client rgpb.RouteGuideClient) error { - stream, err := client.RouteChat(context.Background()) + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + stream, err := client.RouteChat(ctx) if err != nil { return err } diff --git a/vendor/google.golang.org/grpc/examples/route_guide/routeguide/route_guide.pb.go b/vendor/google.golang.org/grpc/examples/route_guide/routeguide/route_guide.pb.go index cbcf2f3..cf7f393 100644 --- a/vendor/google.golang.org/grpc/examples/route_guide/routeguide/route_guide.pb.go +++ b/vendor/google.golang.org/grpc/examples/route_guide/routeguide/route_guide.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: route_guide.proto -// DO NOT EDIT! /* Package routeguide is a generated protocol buffer package. @@ -51,6 +50,20 @@ func (m *Point) String() string { return proto.CompactTextString(m) } func (*Point) ProtoMessage() {} func (*Point) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } +func (m *Point) GetLatitude() int32 { + if m != nil { + return m.Latitude + } + return 0 +} + +func (m *Point) GetLongitude() int32 { + if m != nil { + return m.Longitude + } + return 0 +} + // A latitude-longitude rectangle, represented as two diagonally opposite // points "lo" and "hi". type Rectangle struct { @@ -94,6 +107,13 @@ func (m *Feature) String() string { return proto.CompactTextString(m) func (*Feature) ProtoMessage() {} func (*Feature) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } +func (m *Feature) GetName() string { + if m != nil { + return m.Name + } + return "" +} + func (m *Feature) GetLocation() *Point { if m != nil { return m.Location @@ -121,6 +141,13 @@ func (m *RouteNote) GetLocation() *Point { return nil } +func (m *RouteNote) GetMessage() string { + if m != nil { + return m.Message + } + return "" +} + // A RouteSummary is received in response to a RecordRoute rpc. // // It contains the number of individual points received, the number of @@ -142,6 +169,34 @@ func (m *RouteSummary) String() string { return proto.CompactTextStri func (*RouteSummary) ProtoMessage() {} func (*RouteSummary) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } +func (m *RouteSummary) GetPointCount() int32 { + if m != nil { + return m.PointCount + } + return 0 +} + +func (m *RouteSummary) GetFeatureCount() int32 { + if m != nil { + return m.FeatureCount + } + return 0 +} + +func (m *RouteSummary) GetDistance() int32 { + if m != nil { + return m.Distance + } + return 0 +} + +func (m *RouteSummary) GetElapsedTime() int32 { + if m != nil { + return m.ElapsedTime + } + return 0 +} + func init() { proto.RegisterType((*Point)(nil), "routeguide.Point") proto.RegisterType((*Rectangle)(nil), "routeguide.Rectangle") @@ -459,30 +514,30 @@ func init() { proto.RegisterFile("route_guide.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ // 404 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x84, 0x53, 0xc1, 0x4a, 0xeb, 0x40, - 0x14, 0xed, 0xf4, 0xb5, 0xaf, 0x2f, 0x37, 0x79, 0x3c, 0x3a, 0x0f, 0x21, 0x54, 0x41, 0x8d, 0x9b, - 0x6e, 0x0c, 0xa5, 0x82, 0x4b, 0xc5, 0x16, 0xec, 0xa6, 0x48, 0x8d, 0xdd, 0x97, 0x31, 0x19, 0xd3, - 0x81, 0x24, 0x13, 0x92, 0x09, 0xe8, 0x07, 0xf8, 0x05, 0xfe, 0xb0, 0x93, 0xc9, 0xa4, 0x4d, 0xb5, - 0xc5, 0x5d, 0xe6, 0xdc, 0x73, 0xee, 0x3d, 0xf7, 0x5c, 0x02, 0xfd, 0x8c, 0x17, 0x82, 0xae, 0xc2, - 0x82, 0x05, 0xd4, 0x4d, 0x33, 0x2e, 0x38, 0x06, 0x05, 0x29, 0xc4, 0xb9, 0x83, 0xee, 0x82, 0xb3, - 0x44, 0xe0, 0x01, 0xfc, 0x89, 0x88, 0x60, 0xa2, 0x08, 0xa8, 0x8d, 0xce, 0xd0, 0xb0, 0xeb, 0x6d, - 0xde, 0xf8, 0x04, 0x8c, 0x88, 0x27, 0x61, 0x55, 0x6c, 0xab, 0xe2, 0x16, 0x70, 0x1e, 0xc1, 0xf0, - 0xa8, 0x2f, 0x48, 0x12, 0x46, 0x14, 0x9f, 0x43, 0x3b, 0xe2, 0xaa, 0x81, 0x39, 0xee, 0xbb, 0xdb, - 0x41, 0xae, 0x9a, 0xe2, 0xc9, 0x62, 0x49, 0x59, 0x33, 0xd5, 0x66, 0x3f, 0x65, 0xcd, 0x9c, 0x39, - 0xf4, 0xee, 0x29, 0x11, 0x45, 0x46, 0x31, 0x86, 0x4e, 0x42, 0xe2, 0xca, 0x93, 0xe1, 0xa9, 0x6f, - 0x7c, 0x29, 0xbd, 0x72, 0x5f, 0xba, 0xe3, 0xc9, 0xe1, 0x3e, 0x1b, 0x8a, 0xb3, 0x94, 0x06, 0xcb, - 0xea, 0x03, 0x17, 0xbb, 0x5a, 0xf4, 0xa3, 0x16, 0xdb, 0xd0, 0x8b, 0x69, 0x9e, 0x93, 0xb0, 0x5a, - 0xdc, 0xf0, 0xea, 0xa7, 0xf3, 0x81, 0xc0, 0x52, 0x6d, 0x9f, 0x8a, 0x38, 0x26, 0xd9, 0x1b, 0x3e, - 0x05, 0x33, 0x2d, 0xd5, 0x2b, 0x9f, 0x17, 0x89, 0xd0, 0x21, 0x82, 0x82, 0xa6, 0x25, 0x82, 0x2f, - 0xe0, 0xef, 0x4b, 0xb5, 0x95, 0xa6, 0x54, 0x51, 0x5a, 0x1a, 0xac, 0x48, 0xf2, 0x0e, 0x01, 0xcb, - 0x65, 0x9a, 0x3e, 0xb5, 0x7f, 0x55, 0x77, 0xa8, 0xdf, 0x32, 0x39, 0x8b, 0x46, 0x24, 0xcd, 0x69, - 0xb0, 0x12, 0x4c, 0x66, 0xd2, 0x51, 0x75, 0x53, 0x63, 0x4b, 0x09, 0x8d, 0xdf, 0xdb, 0x00, 0xca, - 0xd5, 0xac, 0x5c, 0x07, 0x5f, 0x03, 0xcc, 0xa8, 0xa8, 0xb3, 0xfc, 0xbe, 0xe9, 0xe0, 0x7f, 0x13, - 0xd2, 0x3c, 0xa7, 0x85, 0x6f, 0xc0, 0x9a, 0xcb, 0xa9, 0x1a, 0xc8, 0xf1, 0x51, 0x93, 0xb6, 0xb9, - 0xf6, 0x01, 0xf5, 0x08, 0x49, 0xbd, 0x29, 0x59, 0x3c, 0x0b, 0x94, 0x97, 0x7d, 0x83, 0xed, 0x9d, - 0x8e, 0x8d, 0x1c, 0x9d, 0xd6, 0x10, 0xe1, 0x5b, 0x7d, 0xb2, 0xe9, 0x9a, 0x88, 0x2f, 0xc3, 0xeb, - 0x4b, 0x0e, 0xf6, 0xc3, 0xa5, 0x7c, 0x84, 0x26, 0x23, 0x38, 0x66, 0xdc, 0x0d, 0xb3, 0xd4, 0x77, - 0xe9, 0x2b, 0x89, 0xd3, 0x88, 0xe6, 0x0d, 0xfa, 0xe4, 0xdf, 0x36, 0xa3, 0x45, 0xf9, 0x4f, 0x2c, - 0xd0, 0xf3, 0x6f, 0xf5, 0x73, 0x5c, 0x7d, 0x06, 0x00, 0x00, 0xff, 0xff, 0xc8, 0xe4, 0xef, 0xe6, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x53, 0xdd, 0xca, 0xd3, 0x40, + 0x10, 0xfd, 0x36, 0x7e, 0x9f, 0x6d, 0x26, 0x11, 0xe9, 0x88, 0x10, 0xa2, 0xa0, 0x8d, 0x37, 0xbd, + 0x31, 0x94, 0x0a, 0x5e, 0x56, 0x6c, 0xc1, 0xde, 0x14, 0xa9, 0xb1, 0xf7, 0x65, 0x4d, 0xc6, 0x74, + 0x61, 0x93, 0x0d, 0xc9, 0x06, 0xf4, 0x01, 0x7c, 0x02, 0x5f, 0x58, 0xb2, 0x49, 0xda, 0x54, 0x5b, + 0xbc, 0xdb, 0x39, 0x73, 0xce, 0xfc, 0x9c, 0x61, 0x61, 0x52, 0xaa, 0x5a, 0xd3, 0x21, 0xad, 0x45, + 0x42, 0x61, 0x51, 0x2a, 0xad, 0x10, 0x0c, 0x64, 0x90, 0xe0, 0x23, 0x3c, 0xec, 0x94, 0xc8, 0x35, + 0xfa, 0x30, 0x96, 0x5c, 0x0b, 0x5d, 0x27, 0xe4, 0xb1, 0xd7, 0x6c, 0xf6, 0x10, 0x9d, 0x62, 0x7c, + 0x09, 0xb6, 0x54, 0x79, 0xda, 0x26, 0x2d, 0x93, 0x3c, 0x03, 0xc1, 0x17, 0xb0, 0x23, 0x8a, 0x35, + 0xcf, 0x53, 0x49, 0x38, 0x05, 0x4b, 0x2a, 0x53, 0xc0, 0x59, 0x4c, 0xc2, 0x73, 0xa3, 0xd0, 0x74, + 0x89, 0x2c, 0xa9, 0x1a, 0xca, 0x51, 0x98, 0x32, 0xd7, 0x29, 0x47, 0x11, 0x6c, 0x61, 0xf4, 0x89, + 0xb8, 0xae, 0x4b, 0x42, 0x84, 0xfb, 0x9c, 0x67, 0xed, 0x4c, 0x76, 0x64, 0xde, 0xf8, 0x16, 0xc6, + 0x52, 0xc5, 0x5c, 0x0b, 0x95, 0xdf, 0xae, 0x73, 0xa2, 0x04, 0x7b, 0xb0, 0xa3, 0x26, 0xfb, 0x59, + 0xe9, 0x4b, 0x2d, 0xfb, 0xaf, 0x16, 0x3d, 0x18, 0x65, 0x54, 0x55, 0x3c, 0x6d, 0x17, 0xb7, 0xa3, + 0x3e, 0x0c, 0x7e, 0x33, 0x70, 0x4d, 0xd9, 0xaf, 0x75, 0x96, 0xf1, 0xf2, 0x27, 0xbe, 0x02, 0xa7, + 0x68, 0xd4, 0x87, 0x58, 0xd5, 0xb9, 0xee, 0x4c, 0x04, 0x03, 0xad, 0x1b, 0x04, 0xdf, 0xc0, 0x93, + 0xef, 0xed, 0x56, 0x1d, 0xa5, 0xb5, 0xd2, 0xed, 0xc0, 0x96, 0xe4, 0xc3, 0x38, 0x11, 0x95, 0xe6, + 0x79, 0x4c, 0xde, 0xa3, 0xf6, 0x0e, 0x7d, 0x8c, 0x53, 0x70, 0x49, 0xf2, 0xa2, 0xa2, 0xe4, 0xa0, + 0x45, 0x46, 0xde, 0xbd, 0xc9, 0x3b, 0x1d, 0xb6, 0x17, 0x19, 0x2d, 0x7e, 0x59, 0x00, 0x66, 0xaa, + 0x4d, 0xb3, 0x0e, 0xbe, 0x07, 0xd8, 0x90, 0xee, 0xbd, 0xfc, 0x77, 0x53, 0xff, 0xd9, 0x10, 0xea, + 0x78, 0xc1, 0x1d, 0x2e, 0xc1, 0xdd, 0x8a, 0xaa, 0x17, 0x56, 0xf8, 0x7c, 0x48, 0x3b, 0x5d, 0xfb, + 0x86, 0x7a, 0xce, 0x70, 0x09, 0x4e, 0x44, 0xb1, 0x2a, 0x13, 0x33, 0xcb, 0xb5, 0xc6, 0xde, 0x45, + 0xc5, 0x81, 0x8f, 0xc1, 0xdd, 0x8c, 0xe1, 0x87, 0xee, 0x64, 0xeb, 0x23, 0xd7, 0x7f, 0x35, 0xef, + 0x2f, 0xe9, 0x5f, 0x87, 0x1b, 0xf9, 0x9c, 0xad, 0xe6, 0xf0, 0x42, 0xa8, 0x30, 0x2d, 0x8b, 0x38, + 0xa4, 0x1f, 0x3c, 0x2b, 0x24, 0x55, 0x03, 0xfa, 0xea, 0xe9, 0xd9, 0xa3, 0x5d, 0xf3, 0x27, 0x76, + 0xec, 0xdb, 0x63, 0xf3, 0x39, 0xde, 0xfd, 0x09, 0x00, 0x00, 0xff, 0xff, 0xc8, 0xe4, 0xef, 0xe6, 0x31, 0x03, 0x00, 0x00, } diff --git a/vendor/google.golang.org/grpc/examples/route_guide/routeguide/route_guide.proto b/vendor/google.golang.org/grpc/examples/route_guide/routeguide/route_guide.proto index 5a782aa..fe21e43 100644 --- a/vendor/google.golang.org/grpc/examples/route_guide/routeguide/route_guide.proto +++ b/vendor/google.golang.org/grpc/examples/route_guide/routeguide/route_guide.proto @@ -1,31 +1,16 @@ -// Copyright 2015, Google Inc. -// All rights reserved. +// Copyright 2015 gRPC authors. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// 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 // -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// http://www.apache.org/licenses/LICENSE-2.0 // -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// 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. syntax = "proto3"; diff --git a/vendor/google.golang.org/grpc/examples/route_guide/server/server.go b/vendor/google.golang.org/grpc/examples/route_guide/server/server.go index 5932722..ececfa7 100644 --- a/vendor/google.golang.org/grpc/examples/route_guide/server/server.go +++ b/vendor/google.golang.org/grpc/examples/route_guide/server/server.go @@ -1,40 +1,27 @@ /* * - * Copyright 2015, Google Inc. - * All rights reserved. + * Copyright 2015 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ +//go:generate protoc -I ../routeguide --go_out=plugins=grpc:../routeguide ../routeguide/route_guide.proto + // Package main implements a simple gRPC server that demonstrates how to use gRPC-Go libraries // to perform unary, client streaming, server streaming and full duplex RPCs. // -// It implements the route guide service whose definition can be found in proto/route_guide.proto. +// It implements the route guide service whose definition can be found in routeguide/route_guide.proto. package main import ( @@ -43,15 +30,17 @@ import ( "fmt" "io" "io/ioutil" + "log" "math" "net" + "sync" "time" "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/credentials" - "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/testdata" "github.com/golang/protobuf/proto" @@ -60,15 +49,17 @@ import ( var ( tls = flag.Bool("tls", false, "Connection uses TLS if true, else plain TCP") - certFile = flag.String("cert_file", "testdata/server1.pem", "The TLS cert file") - keyFile = flag.String("key_file", "testdata/server1.key", "The TLS key file") + certFile = flag.String("cert_file", "", "The TLS cert file") + keyFile = flag.String("key_file", "", "The TLS key file") jsonDBFile = flag.String("json_db_file", "testdata/route_guide_db.json", "A json file containing a list of features") port = flag.Int("port", 10000, "The server port") ) type routeGuideServer struct { - savedFeatures []*pb.Feature - routeNotes map[string][]*pb.RouteNote + savedFeatures []*pb.Feature // read-only after initialized + + mu sync.Mutex // protects routeNotes + routeNotes map[string][]*pb.RouteNote } // GetFeature returns the feature at the given point. @@ -142,12 +133,17 @@ func (s *routeGuideServer) RouteChat(stream pb.RouteGuide_RouteChatServer) error return err } key := serialize(in.Location) - if _, present := s.routeNotes[key]; !present { - s.routeNotes[key] = []*pb.RouteNote{in} - } else { - s.routeNotes[key] = append(s.routeNotes[key], in) - } - for _, note := range s.routeNotes[key] { + + s.mu.Lock() + s.routeNotes[key] = append(s.routeNotes[key], in) + // Note: this copy prevents blocking other clients while serving this one. + // We don't need to do a deep copy, because elements in the slice are + // insert-only and never modified. + rn := make([]*pb.RouteNote, len(s.routeNotes[key])) + copy(rn, s.routeNotes[key]) + s.mu.Unlock() + + for _, note := range rn { if err := stream.Send(note); err != nil { return err } @@ -159,10 +155,10 @@ func (s *routeGuideServer) RouteChat(stream pb.RouteGuide_RouteChatServer) error func (s *routeGuideServer) loadFeatures(filePath string) { file, err := ioutil.ReadFile(filePath) if err != nil { - grpclog.Fatalf("Failed to load default features: %v", err) + log.Fatalf("Failed to load default features: %v", err) } if err := json.Unmarshal(file, &s.savedFeatures); err != nil { - grpclog.Fatalf("Failed to load default features: %v", err) + log.Fatalf("Failed to load default features: %v", err) } } @@ -171,22 +167,20 @@ func toRadians(num float64) float64 { } // calcDistance calculates the distance between two points using the "haversine" formula. -// This code was taken from http://www.movable-type.co.uk/scripts/latlong.html. +// The formula is based on http://mathforum.org/library/drmath/view/51879.html. func calcDistance(p1 *pb.Point, p2 *pb.Point) int32 { const CordFactor float64 = 1e7 - const R float64 = float64(6371000) // metres - lat1 := float64(p1.Latitude) / CordFactor - lat2 := float64(p2.Latitude) / CordFactor - lng1 := float64(p1.Longitude) / CordFactor - lng2 := float64(p2.Longitude) / CordFactor - φ1 := toRadians(lat1) - φ2 := toRadians(lat2) - Δφ := toRadians(lat2 - lat1) - Δλ := toRadians(lng2 - lng1) - - a := math.Sin(Δφ/2)*math.Sin(Δφ/2) + - math.Cos(φ1)*math.Cos(φ2)* - math.Sin(Δλ/2)*math.Sin(Δλ/2) + const R float64 = float64(6371000) // earth radius in metres + lat1 := toRadians(float64(p1.Latitude) / CordFactor) + lat2 := toRadians(float64(p2.Latitude) / CordFactor) + lng1 := toRadians(float64(p1.Longitude) / CordFactor) + lng2 := toRadians(float64(p2.Longitude) / CordFactor) + dlat := lat2 - lat1 + dlng := lng2 - lng1 + + a := math.Sin(dlat/2)*math.Sin(dlat/2) + + math.Cos(lat1)*math.Cos(lat2)* + math.Sin(dlng/2)*math.Sin(dlng/2) c := 2 * math.Atan2(math.Sqrt(a), math.Sqrt(1-a)) distance := R * c @@ -213,23 +207,28 @@ func serialize(point *pb.Point) string { } func newServer() *routeGuideServer { - s := new(routeGuideServer) + s := &routeGuideServer{routeNotes: make(map[string][]*pb.RouteNote)} s.loadFeatures(*jsonDBFile) - s.routeNotes = make(map[string][]*pb.RouteNote) return s } func main() { flag.Parse() - lis, err := net.Listen("tcp", fmt.Sprintf(":%d", *port)) + lis, err := net.Listen("tcp", fmt.Sprintf("localhost:%d", *port)) if err != nil { - grpclog.Fatalf("failed to listen: %v", err) + log.Fatalf("failed to listen: %v", err) } var opts []grpc.ServerOption if *tls { + if *certFile == "" { + *certFile = testdata.Path("server1.pem") + } + if *keyFile == "" { + *keyFile = testdata.Path("server1.key") + } creds, err := credentials.NewServerTLSFromFile(*certFile, *keyFile) if err != nil { - grpclog.Fatalf("Failed to generate credentials %v", err) + log.Fatalf("Failed to generate credentials %v", err) } opts = []grpc.ServerOption{grpc.Creds(creds)} } diff --git a/vendor/google.golang.org/grpc/examples/route_guide/testdata/ca.pem b/vendor/google.golang.org/grpc/examples/route_guide/testdata/ca.pem deleted file mode 100644 index 6c8511a..0000000 --- a/vendor/google.golang.org/grpc/examples/route_guide/testdata/ca.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICSjCCAbOgAwIBAgIJAJHGGR4dGioHMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV -BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX -aWRnaXRzIFB0eSBMdGQxDzANBgNVBAMTBnRlc3RjYTAeFw0xNDExMTEyMjMxMjla -Fw0yNDExMDgyMjMxMjlaMFYxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0 -YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDzANBgNVBAMT -BnRlc3RjYTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwEDfBV5MYdlHVHJ7 -+L4nxrZy7mBfAVXpOc5vMYztssUI7mL2/iYujiIXM+weZYNTEpLdjyJdu7R5gGUu -g1jSVK/EPHfc74O7AyZU34PNIP4Sh33N+/A5YexrNgJlPY+E3GdVYi4ldWJjgkAd -Qah2PH5ACLrIIC6tRka9hcaBlIECAwEAAaMgMB4wDAYDVR0TBAUwAwEB/zAOBgNV -HQ8BAf8EBAMCAgQwDQYJKoZIhvcNAQELBQADgYEAHzC7jdYlzAVmddi/gdAeKPau -sPBG/C2HCWqHzpCUHcKuvMzDVkY/MP2o6JIW2DBbY64bO/FceExhjcykgaYtCH/m -oIU63+CFOTtR7otyQAWHqXa7q4SbCDlG7DyRFxqG0txPtGvy12lgldA2+RgcigQG -Dfcog5wrJytaQ6UA0wE= ------END CERTIFICATE----- diff --git a/vendor/google.golang.org/grpc/examples/route_guide/testdata/server1.key b/vendor/google.golang.org/grpc/examples/route_guide/testdata/server1.key deleted file mode 100644 index 143a5b8..0000000 --- a/vendor/google.golang.org/grpc/examples/route_guide/testdata/server1.key +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAOHDFScoLCVJpYDD -M4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlumN+fm+AjPEK5GHhGn1BgzkWF+slf -3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wHNVX77fBZOgp9VlSMVfyd9N8YwbBY -AckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAECgYAn7qGnM2vbjJNBm0VZCkOkTIWm -V10okw7EPJrdL2mkre9NasghNXbE1y5zDshx5Nt3KsazKOxTT8d0Jwh/3KbaN+YY -tTCbKGW0pXDRBhwUHRcuRzScjli8Rih5UOCiZkhefUTcRb6xIhZJuQy71tjaSy0p -dHZRmYyBYO2YEQ8xoQJBAPrJPhMBkzmEYFtyIEqAxQ/o/A6E+E4w8i+KM7nQCK7q -K4JXzyXVAjLfyBZWHGM2uro/fjqPggGD6QH1qXCkI4MCQQDmdKeb2TrKRh5BY1LR -81aJGKcJ2XbcDu6wMZK4oqWbTX2KiYn9GB0woM6nSr/Y6iy1u145YzYxEV/iMwff -DJULAkB8B2MnyzOg0pNFJqBJuH29bKCcHa8gHJzqXhNO5lAlEbMK95p/P2Wi+4Hd -aiEIAF1BF326QJcvYKmwSmrORp85AkAlSNxRJ50OWrfMZnBgzVjDx3xG6KsFQVk2 -ol6VhqL6dFgKUORFUWBvnKSyhjJxurlPEahV6oo6+A+mPhFY8eUvAkAZQyTdupP3 -XEFQKctGz+9+gKkemDp7LBBMEMBXrGTLPhpEfcjv/7KPdnFHYmhYeBTBnuVmTVWe -F98XJ7tIFfJq ------END PRIVATE KEY----- diff --git a/vendor/google.golang.org/grpc/examples/route_guide/testdata/server1.pem b/vendor/google.golang.org/grpc/examples/route_guide/testdata/server1.pem deleted file mode 100644 index f3d43fc..0000000 --- a/vendor/google.golang.org/grpc/examples/route_guide/testdata/server1.pem +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICnDCCAgWgAwIBAgIBBzANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJBVTET -MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQ -dHkgTHRkMQ8wDQYDVQQDEwZ0ZXN0Y2EwHhcNMTUxMTA0MDIyMDI0WhcNMjUxMTAx -MDIyMDI0WjBlMQswCQYDVQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNV -BAcTB0NoaWNhZ28xFTATBgNVBAoTDEV4YW1wbGUsIENvLjEaMBgGA1UEAxQRKi50 -ZXN0Lmdvb2dsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOHDFSco -LCVJpYDDM4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlumN+fm+AjPEK5GHhGn1Bg -zkWF+slf3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wHNVX77fBZOgp9VlSMVfyd -9N8YwbBYAckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAGjazBpMAkGA1UdEwQCMAAw -CwYDVR0PBAQDAgXgME8GA1UdEQRIMEaCECoudGVzdC5nb29nbGUuZnKCGHdhdGVy -em9vaS50ZXN0Lmdvb2dsZS5iZYISKi50ZXN0LnlvdXR1YmUuY29thwTAqAEDMA0G -CSqGSIb3DQEBCwUAA4GBAJFXVifQNub1LUP4JlnX5lXNlo8FxZ2a12AFQs+bzoJ6 -hM044EDjqyxUqSbVePK0ni3w1fHQB5rY9yYC5f8G7aqqTY1QOhoUk8ZTSTRpnkTh -y4jjdvTZeLDVBlueZUTDRmy2feY5aZIU18vFDK08dTG0A87pppuv1LNIR3loveU8 ------END CERTIFICATE----- diff --git a/vendor/google.golang.org/grpc/examples/rpc_errors/client/main.go b/vendor/google.golang.org/grpc/examples/rpc_errors/client/main.go new file mode 100644 index 0000000..b50fa8c --- /dev/null +++ b/vendor/google.golang.org/grpc/examples/rpc_errors/client/main.go @@ -0,0 +1,62 @@ +/* + * + * Copyright 2018 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package main + +import ( + "log" + "os" + "time" + + "golang.org/x/net/context" + epb "google.golang.org/genproto/googleapis/rpc/errdetails" + "google.golang.org/grpc" + pb "google.golang.org/grpc/examples/helloworld/helloworld" + "google.golang.org/grpc/status" +) + +func main() { + // Set up a connection to the server. + conn, err := grpc.Dial("localhost:50051", grpc.WithInsecure()) + if err != nil { + log.Fatalf("did not connect: %v", err) + } + defer func() { + if e := conn.Close(); e != nil { + log.Printf("failed to close connection: %s", e) + } + }() + c := pb.NewGreeterClient(conn) + + ctx, cancel := context.WithTimeout(context.Background(), time.Second) + defer cancel() + r, err := c.SayHello(ctx, &pb.HelloRequest{Name: "world"}) + if err != nil { + s := status.Convert(err) + for _, d := range s.Details() { + switch info := d.(type) { + case *epb.QuotaFailure: + log.Printf("Quota failure: %s", info) + default: + log.Printf("Unexpected type: %s", info) + } + } + os.Exit(1) + } + log.Printf("Greeting: %s", r.Message) +} diff --git a/vendor/google.golang.org/grpc/examples/rpc_errors/server/main.go b/vendor/google.golang.org/grpc/examples/rpc_errors/server/main.go new file mode 100644 index 0000000..ced95d3 --- /dev/null +++ b/vendor/google.golang.org/grpc/examples/rpc_errors/server/main.go @@ -0,0 +1,80 @@ +/* + * + * Copyright 2018 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package main + +import ( + "fmt" + "log" + "net" + "sync" + + "golang.org/x/net/context" + epb "google.golang.org/genproto/googleapis/rpc/errdetails" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + pb "google.golang.org/grpc/examples/helloworld/helloworld" + "google.golang.org/grpc/status" +) + +const ( + port = ":50051" +) + +// server is used to implement helloworld.GreeterServer. +type server struct { + mu sync.Mutex + count map[string]int +} + +// SayHello implements helloworld.GreeterServer +func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) { + s.mu.Lock() + defer s.mu.Unlock() + // Track the number of times the user has been greeted. + s.count[in.Name]++ + if s.count[in.Name] > 1 { + st := status.New(codes.ResourceExhausted, "Request limit exceeded.") + ds, err := st.WithDetails( + &epb.QuotaFailure{ + Violations: []*epb.QuotaFailure_Violation{{ + Subject: fmt.Sprintf("name:%s", in.Name), + Description: "Limit one greeting per person", + }}, + }, + ) + if err != nil { + return nil, st.Err() + } + return nil, ds.Err() + } + return &pb.HelloReply{Message: "Hello " + in.Name}, nil +} + +func main() { + log.Printf("server starting on port %s...", port) + lis, err := net.Listen("tcp", port) + if err != nil { + log.Fatalf("failed to listen: %v", err) + } + s := grpc.NewServer() + pb.RegisterGreeterServer(s, &server{count: make(map[string]int)}) + if err := s.Serve(lis); err != nil { + log.Fatalf("failed to serve: %v", err) + } +} diff --git a/vendor/google.golang.org/grpc/go16.go b/vendor/google.golang.org/grpc/go16.go index eb40203..535ee93 100644 --- a/vendor/google.golang.org/grpc/go16.go +++ b/vendor/google.golang.org/grpc/go16.go @@ -1,34 +1,20 @@ // +build go1.6,!go1.7 /* - * Copyright 2016, Google Inc. - * All rights reserved. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * Copyright 2016 gRPC authors. * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * 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 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -39,13 +25,11 @@ import ( "io" "net" "net/http" - "os" + "golang.org/x/net/context" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" "google.golang.org/grpc/transport" - - "golang.org/x/net/context" ) // dialContext connects to the address on the named network. @@ -63,6 +47,9 @@ func sendHTTPRequest(ctx context.Context, req *http.Request, conn net.Conn) erro // toRPCErr converts an error into an error from the status package. func toRPCErr(err error) error { + if err == nil || err == io.EOF { + return err + } if _, ok := status.FromError(err); ok { return err } @@ -70,44 +57,14 @@ func toRPCErr(err error) error { case transport.StreamError: return status.Error(e.Code, e.Desc) case transport.ConnectionError: - return status.Error(codes.Internal, e.Desc) + return status.Error(codes.Unavailable, e.Desc) default: switch err { case context.DeadlineExceeded: return status.Error(codes.DeadlineExceeded, err.Error()) case context.Canceled: return status.Error(codes.Canceled, err.Error()) - case ErrClientConnClosing: - return status.Error(codes.FailedPrecondition, err.Error()) } } return status.Error(codes.Unknown, err.Error()) } - -// convertCode converts a standard Go error into its canonical code. Note that -// this is only used to translate the error returned by the server applications. -func convertCode(err error) codes.Code { - switch err { - case nil: - return codes.OK - case io.EOF: - return codes.OutOfRange - case io.ErrClosedPipe, io.ErrNoProgress, io.ErrShortBuffer, io.ErrShortWrite, io.ErrUnexpectedEOF: - return codes.FailedPrecondition - case os.ErrInvalid: - return codes.InvalidArgument - case context.Canceled: - return codes.Canceled - case context.DeadlineExceeded: - return codes.DeadlineExceeded - } - switch { - case os.IsExist(err): - return codes.AlreadyExists - case os.IsNotExist(err): - return codes.NotFound - case os.IsPermission(err): - return codes.PermissionDenied - } - return codes.Unknown -} diff --git a/vendor/google.golang.org/grpc/go17.go b/vendor/google.golang.org/grpc/go17.go index b9eb781..ec676a9 100644 --- a/vendor/google.golang.org/grpc/go17.go +++ b/vendor/google.golang.org/grpc/go17.go @@ -1,34 +1,20 @@ // +build go1.7 /* - * Copyright 2016, Google Inc. - * All rights reserved. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * Copyright 2016 gRPC authors. * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * 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 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -36,16 +22,15 @@ package grpc import ( "context" + "fmt" "io" "net" "net/http" - "os" + netctx "golang.org/x/net/context" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" "google.golang.org/grpc/transport" - - netctx "golang.org/x/net/context" ) // dialContext connects to the address on the named network. @@ -56,13 +41,16 @@ func dialContext(ctx context.Context, network, address string) (net.Conn, error) func sendHTTPRequest(ctx context.Context, req *http.Request, conn net.Conn) error { req = req.WithContext(ctx) if err := req.Write(conn); err != nil { - return err + return fmt.Errorf("failed to write the HTTP request: %v", err) } return nil } // toRPCErr converts an error into an error from the status package. func toRPCErr(err error) error { + if err == nil || err == io.EOF { + return err + } if _, ok := status.FromError(err); ok { return err } @@ -70,44 +58,14 @@ func toRPCErr(err error) error { case transport.StreamError: return status.Error(e.Code, e.Desc) case transport.ConnectionError: - return status.Error(codes.Internal, e.Desc) + return status.Error(codes.Unavailable, e.Desc) default: switch err { case context.DeadlineExceeded, netctx.DeadlineExceeded: return status.Error(codes.DeadlineExceeded, err.Error()) case context.Canceled, netctx.Canceled: return status.Error(codes.Canceled, err.Error()) - case ErrClientConnClosing: - return status.Error(codes.FailedPrecondition, err.Error()) } } return status.Error(codes.Unknown, err.Error()) } - -// convertCode converts a standard Go error into its canonical code. Note that -// this is only used to translate the error returned by the server applications. -func convertCode(err error) codes.Code { - switch err { - case nil: - return codes.OK - case io.EOF: - return codes.OutOfRange - case io.ErrClosedPipe, io.ErrNoProgress, io.ErrShortBuffer, io.ErrShortWrite, io.ErrUnexpectedEOF: - return codes.FailedPrecondition - case os.ErrInvalid: - return codes.InvalidArgument - case context.Canceled, netctx.Canceled: - return codes.Canceled - case context.DeadlineExceeded, netctx.DeadlineExceeded: - return codes.DeadlineExceeded - } - switch { - case os.IsExist(err): - return codes.AlreadyExists - case os.IsNotExist(err): - return codes.NotFound - case os.IsPermission(err): - return codes.PermissionDenied - } - return codes.Unknown -} diff --git a/vendor/google.golang.org/grpc/grpclb.go b/vendor/google.golang.org/grpc/grpclb.go index 8638fc9..d14a5d4 100644 --- a/vendor/google.golang.org/grpc/grpclb.go +++ b/vendor/google.golang.org/grpc/grpclb.go @@ -1,54 +1,50 @@ /* * - * Copyright 2016, Google Inc. - * All rights reserved. + * Copyright 2016 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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 grpc import ( - "errors" - "fmt" - "math/rand" - "net" + "strconv" + "strings" "sync" "time" "golang.org/x/net/context" - "google.golang.org/grpc/codes" - lbpb "google.golang.org/grpc/grpclb/grpc_lb_v1" + "google.golang.org/grpc/balancer" + "google.golang.org/grpc/connectivity" + lbpb "google.golang.org/grpc/grpclb/grpc_lb_v1/messages" "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/naming" + "google.golang.org/grpc/resolver" ) +const ( + lbTokeyKey = "lb-token" + defaultFallbackTimeout = 10 * time.Second + grpclbName = "grpclb" +) + +func convertDuration(d *lbpb.Duration) time.Duration { + if d == nil { + return 0 + } + return time.Duration(d.Seconds)*time.Second + time.Duration(d.Nanos)*time.Nanosecond +} + // Client API for LoadBalancer service. // Mostly copied from generated pb.go file. // To avoid circular dependency. @@ -86,680 +82,261 @@ func (x *balanceLoadClientStream) Recv() (*lbpb.LoadBalanceResponse, error) { return m, nil } -// AddressType indicates the address type returned by name resolution. -type AddressType uint8 - -const ( - // Backend indicates the server is a backend server. - Backend AddressType = iota - // GRPCLB indicates the server is a grpclb load balancer. - GRPCLB -) - -// AddrMetadataGRPCLB contains the information the name resolver for grpclb should provide. The -// name resolver used by the grpclb balancer is required to provide this type of metadata in -// its address updates. -type AddrMetadataGRPCLB struct { - // AddrType is the type of server (grpc load balancer or backend). - AddrType AddressType - // ServerName is the name of the grpc load balancer. Used for authentication. - ServerName string +func init() { + balancer.Register(newLBBuilder()) } -// NewGRPCLBBalancer creates a grpclb load balancer. -func NewGRPCLBBalancer(r naming.Resolver) Balancer { - return &balancer{ - r: r, - } +// newLBBuilder creates a builder for grpclb. +func newLBBuilder() balancer.Builder { + return NewLBBuilderWithFallbackTimeout(defaultFallbackTimeout) } -type remoteBalancerInfo struct { - addr string - // the server name used for authentication with the remote LB server. - name string +// NewLBBuilderWithFallbackTimeout creates a grpclb builder with the given +// fallbackTimeout. If no response is received from the remote balancer within +// fallbackTimeout, the backend addresses from the resolved address list will be +// used. +// +// Only call this function when a non-default fallback timeout is needed. +func NewLBBuilderWithFallbackTimeout(fallbackTimeout time.Duration) balancer.Builder { + return &lbBuilder{ + fallbackTimeout: fallbackTimeout, + } } -// grpclbAddrInfo consists of the information of a backend server. -type grpclbAddrInfo struct { - addr Address - connected bool - // dropForRateLimiting indicates whether this particular request should be - // dropped by the client for rate limiting. - dropForRateLimiting bool - // dropForLoadBalancing indicates whether this particular request should be - // dropped by the client for load balancing. - dropForLoadBalancing bool +type lbBuilder struct { + fallbackTimeout time.Duration } -type balancer struct { - r naming.Resolver - target string - mu sync.Mutex - seq int // a sequence number to make sure addrCh does not get stale addresses. - w naming.Watcher - addrCh chan []Address - rbs []remoteBalancerInfo - addrs []*grpclbAddrInfo - next int - waitCh chan struct{} - done bool - expTimer *time.Timer - rand *rand.Rand - - clientStats lbpb.ClientStats +func (b *lbBuilder) Name() string { + return grpclbName } -func (b *balancer) watchAddrUpdates(w naming.Watcher, ch chan []remoteBalancerInfo) error { - updates, err := w.Next() - if err != nil { - grpclog.Printf("grpclb: failed to get next addr update from watcher: %v", err) - return err - } - b.mu.Lock() - defer b.mu.Unlock() - if b.done { - return ErrClientConnClosing - } - for _, update := range updates { - switch update.Op { - case naming.Add: - var exist bool - for _, v := range b.rbs { - // TODO: Is the same addr with different server name a different balancer? - if update.Addr == v.addr { - exist = true - break - } - } - if exist { - continue - } - md, ok := update.Metadata.(*AddrMetadataGRPCLB) - if !ok { - // TODO: Revisit the handling here and may introduce some fallback mechanism. - grpclog.Printf("The name resolution contains unexpected metadata %v", update.Metadata) - continue - } - switch md.AddrType { - case Backend: - // TODO: Revisit the handling here and may introduce some fallback mechanism. - grpclog.Printf("The name resolution does not give grpclb addresses") - continue - case GRPCLB: - b.rbs = append(b.rbs, remoteBalancerInfo{ - addr: update.Addr, - name: md.ServerName, - }) - default: - grpclog.Printf("Received unknow address type %d", md.AddrType) - continue - } - case naming.Delete: - for i, v := range b.rbs { - if update.Addr == v.addr { - copy(b.rbs[i:], b.rbs[i+1:]) - b.rbs = b.rbs[:len(b.rbs)-1] - break - } - } - default: - grpclog.Println("Unknown update.Op ", update.Op) - } - } - // TODO: Fall back to the basic round-robin load balancing if the resulting address is - // not a load balancer. - select { - case <-ch: - default: +func (b *lbBuilder) Build(cc balancer.ClientConn, opt balancer.BuildOptions) balancer.Balancer { + // This generates a manual resolver builder with a random scheme. This + // scheme will be used to dial to remote LB, so we can send filtered address + // updates to remote LB ClientConn using this manual resolver. + scheme := "grpclb_internal_" + strconv.FormatInt(time.Now().UnixNano(), 36) + r := &lbManualResolver{scheme: scheme, ccb: cc} + + var target string + targetSplitted := strings.Split(cc.Target(), ":///") + if len(targetSplitted) < 2 { + target = cc.Target() + } else { + target = targetSplitted[1] } - ch <- b.rbs - return nil -} -func (b *balancer) serverListExpire(seq int) { - b.mu.Lock() - defer b.mu.Unlock() - // TODO: gRPC interanls do not clear the connections when the server list is stale. - // This means RPCs will keep using the existing server list until b receives new - // server list even though the list is expired. Revisit this behavior later. - if b.done || seq < b.seq { - return + lb := &lbBalancer{ + cc: cc, + target: target, + opt: opt, + fallbackTimeout: b.fallbackTimeout, + doneCh: make(chan struct{}), + + manualResolver: r, + csEvltr: &connectivityStateEvaluator{}, + subConns: make(map[resolver.Address]balancer.SubConn), + scStates: make(map[balancer.SubConn]connectivity.State), + picker: &errPicker{err: balancer.ErrNoSubConnAvailable}, + clientStats: &rpcStats{}, } - b.next = 0 - b.addrs = nil - // Ask grpc internals to close all the corresponding connections. - b.addrCh <- nil + + return lb } -func convertDuration(d *lbpb.Duration) time.Duration { - if d == nil { - return 0 - } - return time.Duration(d.Seconds)*time.Second + time.Duration(d.Nanos)*time.Nanosecond +type lbBalancer struct { + cc balancer.ClientConn + target string + opt balancer.BuildOptions + fallbackTimeout time.Duration + doneCh chan struct{} + + // manualResolver is used in the remote LB ClientConn inside grpclb. When + // resolved address updates are received by grpclb, filtered updates will be + // send to remote LB ClientConn through this resolver. + manualResolver *lbManualResolver + // The ClientConn to talk to the remote balancer. + ccRemoteLB *ClientConn + + // Support client side load reporting. Each picker gets a reference to this, + // and will update its content. + clientStats *rpcStats + + mu sync.Mutex // guards everything following. + // The full server list including drops, used to check if the newly received + // serverList contains anything new. Each generate picker will also have + // reference to this list to do the first layer pick. + fullServerList []*lbpb.Server + // All backends addresses, with metadata set to nil. This list contains all + // backend addresses in the same order and with the same duplicates as in + // serverlist. When generating picker, a SubConn slice with the same order + // but with only READY SCs will be gerenated. + backendAddrs []resolver.Address + // Roundrobin functionalities. + csEvltr *connectivityStateEvaluator + state connectivity.State + subConns map[resolver.Address]balancer.SubConn // Used to new/remove SubConn. + scStates map[balancer.SubConn]connectivity.State // Used to filter READY SubConns. + picker balancer.Picker + // Support fallback to resolved backend addresses if there's no response + // from remote balancer within fallbackTimeout. + fallbackTimerExpired bool + serverListReceived bool + // resolvedBackendAddrs is resolvedAddrs minus remote balancers. It's set + // when resolved address updates are received, and read in the goroutine + // handling fallback. + resolvedBackendAddrs []resolver.Address } -func (b *balancer) processServerList(l *lbpb.ServerList, seq int) { - if l == nil { - return - } - servers := l.GetServers() - expiration := convertDuration(l.GetExpirationInterval()) - var ( - sl []*grpclbAddrInfo - addrs []Address - ) - for _, s := range servers { - md := metadata.Pairs("lb-token", s.LoadBalanceToken) - addr := Address{ - Addr: fmt.Sprintf("%s:%d", net.IP(s.IpAddress), s.Port), - Metadata: &md, - } - sl = append(sl, &grpclbAddrInfo{ - addr: addr, - dropForRateLimiting: s.DropForRateLimiting, - dropForLoadBalancing: s.DropForLoadBalancing, - }) - addrs = append(addrs, addr) - } - b.mu.Lock() - defer b.mu.Unlock() - if b.done || seq < b.seq { +// regeneratePicker takes a snapshot of the balancer, and generates a picker from +// it. The picker +// - always returns ErrTransientFailure if the balancer is in TransientFailure, +// - does two layer roundrobin pick otherwise. +// Caller must hold lb.mu. +func (lb *lbBalancer) regeneratePicker() { + if lb.state == connectivity.TransientFailure { + lb.picker = &errPicker{err: balancer.ErrTransientFailure} return } - if len(sl) > 0 { - // reset b.next to 0 when replacing the server list. - b.next = 0 - b.addrs = sl - b.addrCh <- addrs - if b.expTimer != nil { - b.expTimer.Stop() - b.expTimer = nil - } - if expiration > 0 { - b.expTimer = time.AfterFunc(expiration, func() { - b.serverListExpire(seq) - }) + var readySCs []balancer.SubConn + for _, a := range lb.backendAddrs { + if sc, ok := lb.subConns[a]; ok { + if st, ok := lb.scStates[sc]; ok && st == connectivity.Ready { + readySCs = append(readySCs, sc) + } } } - return -} -func (b *balancer) sendLoadReport(s *balanceLoadClientStream, interval time.Duration, done <-chan struct{}) { - ticker := time.NewTicker(interval) - defer ticker.Stop() - for { - select { - case <-ticker.C: - case <-done: - return - } - b.mu.Lock() - stats := b.clientStats - b.clientStats = lbpb.ClientStats{} // Clear the stats. - b.mu.Unlock() - t := time.Now() - stats.Timestamp = &lbpb.Timestamp{ - Seconds: t.Unix(), - Nanos: int32(t.Nanosecond()), - } - if err := s.Send(&lbpb.LoadBalanceRequest{ - LoadBalanceRequestType: &lbpb.LoadBalanceRequest_ClientStats{ - ClientStats: &stats, - }, - }); err != nil { - grpclog.Printf("grpclb: failed to send load report: %v", err) + if len(lb.fullServerList) <= 0 { + if len(readySCs) <= 0 { + lb.picker = &errPicker{err: balancer.ErrNoSubConnAvailable} return } - } -} - -func (b *balancer) callRemoteBalancer(lbc *loadBalancerClient, seq int) (retry bool) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - stream, err := lbc.BalanceLoad(ctx) - if err != nil { - grpclog.Printf("grpclb: failed to perform RPC to the remote balancer %v", err) - return - } - b.mu.Lock() - if b.done { - b.mu.Unlock() - return - } - b.mu.Unlock() - initReq := &lbpb.LoadBalanceRequest{ - LoadBalanceRequestType: &lbpb.LoadBalanceRequest_InitialRequest{ - InitialRequest: &lbpb.InitialLoadBalanceRequest{ - Name: b.target, - }, - }, - } - if err := stream.Send(initReq); err != nil { - grpclog.Printf("grpclb: failed to send init request: %v", err) - // TODO: backoff on retry? - return true - } - reply, err := stream.Recv() - if err != nil { - grpclog.Printf("grpclb: failed to recv init response: %v", err) - // TODO: backoff on retry? - return true - } - initResp := reply.GetInitialResponse() - if initResp == nil { - grpclog.Println("grpclb: reply from remote balancer did not include initial response.") - return - } - // TODO: Support delegation. - if initResp.LoadBalancerDelegate != "" { - // delegation - grpclog.Println("TODO: Delegation is not supported yet.") + lb.picker = &rrPicker{subConns: readySCs} return } - streamDone := make(chan struct{}) - defer close(streamDone) - b.mu.Lock() - b.clientStats = lbpb.ClientStats{} // Clear client stats. - b.mu.Unlock() - if d := convertDuration(initResp.ClientStatsReportInterval); d > 0 { - go b.sendLoadReport(stream, d, streamDone) + lb.picker = &lbPicker{ + serverList: lb.fullServerList, + subConns: readySCs, + stats: lb.clientStats, } - // Retrieve the server list. - for { - reply, err := stream.Recv() - if err != nil { - grpclog.Printf("grpclb: failed to recv server list: %v", err) - break - } - b.mu.Lock() - if b.done || seq < b.seq { - b.mu.Unlock() - return - } - b.seq++ // tick when receiving a new list of servers. - seq = b.seq - b.mu.Unlock() - if serverList := reply.GetServerList(); serverList != nil { - b.processServerList(serverList, seq) - } - } - return true + return } -func (b *balancer) Start(target string, config BalancerConfig) error { - b.rand = rand.New(rand.NewSource(time.Now().Unix())) - // TODO: Fall back to the basic direct connection if there is no name resolver. - if b.r == nil { - return errors.New("there is no name resolver installed") - } - b.target = target - b.mu.Lock() - if b.done { - b.mu.Unlock() - return ErrClientConnClosing +func (lb *lbBalancer) HandleSubConnStateChange(sc balancer.SubConn, s connectivity.State) { + grpclog.Infof("lbBalancer: handle SubConn state change: %p, %v", sc, s) + lb.mu.Lock() + defer lb.mu.Unlock() + + oldS, ok := lb.scStates[sc] + if !ok { + grpclog.Infof("lbBalancer: got state changes for an unknown SubConn: %p, %v", sc, s) + return } - b.addrCh = make(chan []Address) - w, err := b.r.Resolve(target) - if err != nil { - b.mu.Unlock() - grpclog.Printf("grpclb: failed to resolve address: %v, err: %v", target, err) - return err + lb.scStates[sc] = s + switch s { + case connectivity.Idle: + sc.Connect() + case connectivity.Shutdown: + // When an address was removed by resolver, b called RemoveSubConn but + // kept the sc's state in scStates. Remove state for this sc here. + delete(lb.scStates, sc) } - b.w = w - b.mu.Unlock() - balancerAddrsCh := make(chan []remoteBalancerInfo, 1) - // Spawn a goroutine to monitor the name resolution of remote load balancer. - go func() { - for { - if err := b.watchAddrUpdates(w, balancerAddrsCh); err != nil { - grpclog.Printf("grpclb: the naming watcher stops working due to %v.\n", err) - close(balancerAddrsCh) - return - } - } - }() - // Spawn a goroutine to talk to the remote load balancer. - go func() { - var ( - cc *ClientConn - // ccError is closed when there is an error in the current cc. - // A new rb should be picked from rbs and connected. - ccError chan struct{} - rb *remoteBalancerInfo - rbs []remoteBalancerInfo - rbIdx int - ) - - defer func() { - if ccError != nil { - select { - case <-ccError: - default: - close(ccError) - } - } - if cc != nil { - cc.Close() - } - }() - - for { - var ok bool - select { - case rbs, ok = <-balancerAddrsCh: - if !ok { - return - } - foundIdx := -1 - if rb != nil { - for i, trb := range rbs { - if trb == *rb { - foundIdx = i - break - } - } - } - if foundIdx >= 0 { - if foundIdx >= 1 { - // Move the address in use to the beginning of the list. - b.rbs[0], b.rbs[foundIdx] = b.rbs[foundIdx], b.rbs[0] - rbIdx = 0 - } - continue // If found, don't dial new cc. - } else if len(rbs) > 0 { - // Pick a random one from the list, instead of always using the first one. - if l := len(rbs); l > 1 && rb != nil { - tmpIdx := b.rand.Intn(l - 1) - b.rbs[0], b.rbs[tmpIdx] = b.rbs[tmpIdx], b.rbs[0] - } - rbIdx = 0 - rb = &rbs[0] - } else { - // foundIdx < 0 && len(rbs) <= 0. - rb = nil - } - case <-ccError: - ccError = nil - if rbIdx < len(rbs)-1 { - rbIdx++ - rb = &rbs[rbIdx] - } else { - rb = nil - } - } - - if rb == nil { - continue - } - if cc != nil { - cc.Close() - } - // Talk to the remote load balancer to get the server list. - var ( - err error - dopts []DialOption - ) - if creds := config.DialCreds; creds != nil { - if rb.name != "" { - if err := creds.OverrideServerName(rb.name); err != nil { - grpclog.Printf("grpclb: failed to override the server name in the credentials: %v", err) - continue - } - } - dopts = append(dopts, WithTransportCredentials(creds)) - } else { - dopts = append(dopts, WithInsecure()) - } - if dialer := config.Dialer; dialer != nil { - // WithDialer takes a different type of function, so we instead use a special DialOption here. - dopts = append(dopts, func(o *dialOptions) { o.copts.Dialer = dialer }) - } - ccError = make(chan struct{}) - cc, err = Dial(rb.addr, dopts...) - if err != nil { - grpclog.Printf("grpclb: failed to setup a connection to the remote balancer %v: %v", rb.addr, err) - close(ccError) - continue - } - b.mu.Lock() - b.seq++ // tick when getting a new balancer address - seq := b.seq - b.next = 0 - b.mu.Unlock() - go func(cc *ClientConn, ccError chan struct{}) { - lbc := &loadBalancerClient{cc} - b.callRemoteBalancer(lbc, seq) - cc.Close() - select { - case <-ccError: - default: - close(ccError) - } - }(cc, ccError) - } - }() - return nil -} + oldAggrState := lb.state + lb.state = lb.csEvltr.recordTransition(oldS, s) -func (b *balancer) down(addr Address, err error) { - b.mu.Lock() - defer b.mu.Unlock() - for _, a := range b.addrs { - if addr == a.addr { - a.connected = false - break - } + // Regenerate picker when one of the following happens: + // - this sc became ready from not-ready + // - this sc became not-ready from ready + // - the aggregated state of balancer became TransientFailure from non-TransientFailure + // - the aggregated state of balancer became non-TransientFailure from TransientFailure + if (oldS == connectivity.Ready) != (s == connectivity.Ready) || + (lb.state == connectivity.TransientFailure) != (oldAggrState == connectivity.TransientFailure) { + lb.regeneratePicker() } + + lb.cc.UpdateBalancerState(lb.state, lb.picker) + return } -func (b *balancer) Up(addr Address) func(error) { - b.mu.Lock() - defer b.mu.Unlock() - if b.done { - return nil - } - var cnt int - for _, a := range b.addrs { - if a.addr == addr { - if a.connected { - return nil - } - a.connected = true - } - if a.connected && !a.dropForRateLimiting && !a.dropForLoadBalancing { - cnt++ - } - } - // addr is the only one which is connected. Notify the Get() callers who are blocking. - if cnt == 1 && b.waitCh != nil { - close(b.waitCh) - b.waitCh = nil +// fallbackToBackendsAfter blocks for fallbackTimeout and falls back to use +// resolved backends (backends received from resolver, not from remote balancer) +// if no connection to remote balancers was successful. +func (lb *lbBalancer) fallbackToBackendsAfter(fallbackTimeout time.Duration) { + timer := time.NewTimer(fallbackTimeout) + defer timer.Stop() + select { + case <-timer.C: + case <-lb.doneCh: + return } - return func(err error) { - b.down(addr, err) + lb.mu.Lock() + if lb.serverListReceived { + lb.mu.Unlock() + return } + lb.fallbackTimerExpired = true + lb.refreshSubConns(lb.resolvedBackendAddrs) + lb.mu.Unlock() } -func (b *balancer) Get(ctx context.Context, opts BalancerGetOptions) (addr Address, put func(), err error) { - var ch chan struct{} - b.mu.Lock() - if b.done { - b.mu.Unlock() - err = ErrClientConnClosing +// HandleResolvedAddrs sends the updated remoteLB addresses to remoteLB +// clientConn. The remoteLB clientConn will handle creating/removing remoteLB +// connections. +func (lb *lbBalancer) HandleResolvedAddrs(addrs []resolver.Address, err error) { + grpclog.Infof("lbBalancer: handleResolvedResult: %+v", addrs) + if len(addrs) <= 0 { return } - seq := b.seq - - defer func() { - if err != nil { - return - } - put = func() { - s, ok := rpcInfoFromContext(ctx) - if !ok { - return - } - b.mu.Lock() - defer b.mu.Unlock() - if b.done || seq < b.seq { - return - } - b.clientStats.NumCallsFinished++ - if !s.bytesSent { - b.clientStats.NumCallsFinishedWithClientFailedToSend++ - } else if s.bytesReceived { - b.clientStats.NumCallsFinishedKnownReceived++ - } - } - }() - b.clientStats.NumCallsStarted++ - if len(b.addrs) > 0 { - if b.next >= len(b.addrs) { - b.next = 0 + var remoteBalancerAddrs, backendAddrs []resolver.Address + for _, a := range addrs { + if a.Type == resolver.GRPCLB { + remoteBalancerAddrs = append(remoteBalancerAddrs, a) + } else { + backendAddrs = append(backendAddrs, a) } - next := b.next - for { - a := b.addrs[next] - next = (next + 1) % len(b.addrs) - if a.connected { - if !a.dropForRateLimiting && !a.dropForLoadBalancing { - addr = a.addr - b.next = next - b.mu.Unlock() - return - } - if !opts.BlockingWait { - b.next = next - if a.dropForLoadBalancing { - b.clientStats.NumCallsFinished++ - b.clientStats.NumCallsFinishedWithDropForLoadBalancing++ - } else if a.dropForRateLimiting { - b.clientStats.NumCallsFinished++ - b.clientStats.NumCallsFinishedWithDropForRateLimiting++ - } - b.mu.Unlock() - err = Errorf(codes.Unavailable, "%s drops requests", a.addr.Addr) - return - } - } - if next == b.next { - // Has iterated all the possible address but none is connected. - break - } - } - } - if !opts.BlockingWait { - if len(b.addrs) == 0 { - b.clientStats.NumCallsFinished++ - b.clientStats.NumCallsFinishedWithClientFailedToSend++ - b.mu.Unlock() - err = Errorf(codes.Unavailable, "there is no address available") - return - } - // Returns the next addr on b.addrs for a failfast RPC. - addr = b.addrs[b.next].addr - b.next++ - b.mu.Unlock() - return } - // Wait on b.waitCh for non-failfast RPCs. - if b.waitCh == nil { - ch = make(chan struct{}) - b.waitCh = ch - } else { - ch = b.waitCh - } - b.mu.Unlock() - for { - select { - case <-ctx.Done(): - b.mu.Lock() - b.clientStats.NumCallsFinished++ - b.clientStats.NumCallsFinishedWithClientFailedToSend++ - b.mu.Unlock() - err = ctx.Err() - return - case <-ch: - b.mu.Lock() - if b.done { - b.clientStats.NumCallsFinished++ - b.clientStats.NumCallsFinishedWithClientFailedToSend++ - b.mu.Unlock() - err = ErrClientConnClosing - return - } - if len(b.addrs) > 0 { - if b.next >= len(b.addrs) { - b.next = 0 - } - next := b.next - for { - a := b.addrs[next] - next = (next + 1) % len(b.addrs) - if a.connected { - if !a.dropForRateLimiting && !a.dropForLoadBalancing { - addr = a.addr - b.next = next - b.mu.Unlock() - return - } - if !opts.BlockingWait { - b.next = next - if a.dropForLoadBalancing { - b.clientStats.NumCallsFinished++ - b.clientStats.NumCallsFinishedWithDropForLoadBalancing++ - } else if a.dropForRateLimiting { - b.clientStats.NumCallsFinished++ - b.clientStats.NumCallsFinishedWithDropForRateLimiting++ - } - b.mu.Unlock() - err = Errorf(codes.Unavailable, "drop requests for the addreess %s", a.addr.Addr) - return - } - } - if next == b.next { - // Has iterated all the possible address but none is connected. - break - } - } - } - // The newly added addr got removed by Down() again. - if b.waitCh == nil { - ch = make(chan struct{}) - b.waitCh = ch - } else { - ch = b.waitCh - } - b.mu.Unlock() + if lb.ccRemoteLB == nil { + if len(remoteBalancerAddrs) <= 0 { + grpclog.Errorf("grpclb: no remote balancer address is available, should never happen") + return } - } + // First time receiving resolved addresses, create a cc to remote + // balancers. + lb.dialRemoteLB(remoteBalancerAddrs[0].ServerName) + // Start the fallback goroutine. + go lb.fallbackToBackendsAfter(lb.fallbackTimeout) + } + + // cc to remote balancers uses lb.manualResolver. Send the updated remote + // balancer addresses to it through manualResolver. + lb.manualResolver.NewAddress(remoteBalancerAddrs) + + lb.mu.Lock() + lb.resolvedBackendAddrs = backendAddrs + // If serverListReceived is true, connection to remote balancer was + // successful and there's no need to do fallback anymore. + // If fallbackTimerExpired is false, fallback hasn't happened yet. + if !lb.serverListReceived && lb.fallbackTimerExpired { + // This means we received a new list of resolved backends, and we are + // still in fallback mode. Need to update the list of backends we are + // using to the new list of backends. + lb.refreshSubConns(lb.resolvedBackendAddrs) + } + lb.mu.Unlock() } -func (b *balancer) Notify() <-chan []Address { - return b.addrCh -} - -func (b *balancer) Close() error { - b.mu.Lock() - defer b.mu.Unlock() - if b.done { - return errBalancerClosed - } - b.done = true - if b.expTimer != nil { - b.expTimer.Stop() - } - if b.waitCh != nil { - close(b.waitCh) - } - if b.addrCh != nil { - close(b.addrCh) +func (lb *lbBalancer) Close() { + select { + case <-lb.doneCh: + return + default: } - if b.w != nil { - b.w.Close() + close(lb.doneCh) + if lb.ccRemoteLB != nil { + lb.ccRemoteLB.Close() } - return nil } diff --git a/vendor/google.golang.org/grpc/grpclb/grpc_lb_v1/grpclb.pb.go b/vendor/google.golang.org/grpc/grpclb/grpc_lb_v1/grpclb.pb.go deleted file mode 100644 index f63941b..0000000 --- a/vendor/google.golang.org/grpc/grpclb/grpc_lb_v1/grpclb.pb.go +++ /dev/null @@ -1,629 +0,0 @@ -// Code generated by protoc-gen-go. -// source: grpclb.proto -// DO NOT EDIT! - -/* -Package grpc_lb_v1 is a generated protocol buffer package. - -It is generated from these files: - grpclb.proto - -It has these top-level messages: - Duration - Timestamp - LoadBalanceRequest - InitialLoadBalanceRequest - ClientStats - LoadBalanceResponse - InitialLoadBalanceResponse - ServerList - Server -*/ -package grpc_lb_v1 - -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package - -type Duration struct { - // Signed seconds of the span of time. Must be from -315,576,000,000 - // to +315,576,000,000 inclusive. - Seconds int64 `protobuf:"varint,1,opt,name=seconds" json:"seconds,omitempty"` - // Signed fractions of a second at nanosecond resolution of the span - // of time. Durations less than one second are represented with a 0 - // `seconds` field and a positive or negative `nanos` field. For durations - // of one second or more, a non-zero value for the `nanos` field must be - // of the same sign as the `seconds` field. Must be from -999,999,999 - // to +999,999,999 inclusive. - Nanos int32 `protobuf:"varint,2,opt,name=nanos" json:"nanos,omitempty"` -} - -func (m *Duration) Reset() { *m = Duration{} } -func (m *Duration) String() string { return proto.CompactTextString(m) } -func (*Duration) ProtoMessage() {} -func (*Duration) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } - -func (m *Duration) GetSeconds() int64 { - if m != nil { - return m.Seconds - } - return 0 -} - -func (m *Duration) GetNanos() int32 { - if m != nil { - return m.Nanos - } - return 0 -} - -type Timestamp struct { - // Represents seconds of UTC time since Unix epoch - // 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to - // 9999-12-31T23:59:59Z inclusive. - Seconds int64 `protobuf:"varint,1,opt,name=seconds" json:"seconds,omitempty"` - // Non-negative fractions of a second at nanosecond resolution. Negative - // second values with fractions must still have non-negative nanos values - // that count forward in time. Must be from 0 to 999,999,999 - // inclusive. - Nanos int32 `protobuf:"varint,2,opt,name=nanos" json:"nanos,omitempty"` -} - -func (m *Timestamp) Reset() { *m = Timestamp{} } -func (m *Timestamp) String() string { return proto.CompactTextString(m) } -func (*Timestamp) ProtoMessage() {} -func (*Timestamp) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } - -func (m *Timestamp) GetSeconds() int64 { - if m != nil { - return m.Seconds - } - return 0 -} - -func (m *Timestamp) GetNanos() int32 { - if m != nil { - return m.Nanos - } - return 0 -} - -type LoadBalanceRequest struct { - // Types that are valid to be assigned to LoadBalanceRequestType: - // *LoadBalanceRequest_InitialRequest - // *LoadBalanceRequest_ClientStats - LoadBalanceRequestType isLoadBalanceRequest_LoadBalanceRequestType `protobuf_oneof:"load_balance_request_type"` -} - -func (m *LoadBalanceRequest) Reset() { *m = LoadBalanceRequest{} } -func (m *LoadBalanceRequest) String() string { return proto.CompactTextString(m) } -func (*LoadBalanceRequest) ProtoMessage() {} -func (*LoadBalanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } - -type isLoadBalanceRequest_LoadBalanceRequestType interface { - isLoadBalanceRequest_LoadBalanceRequestType() -} - -type LoadBalanceRequest_InitialRequest struct { - InitialRequest *InitialLoadBalanceRequest `protobuf:"bytes,1,opt,name=initial_request,json=initialRequest,oneof"` -} -type LoadBalanceRequest_ClientStats struct { - ClientStats *ClientStats `protobuf:"bytes,2,opt,name=client_stats,json=clientStats,oneof"` -} - -func (*LoadBalanceRequest_InitialRequest) isLoadBalanceRequest_LoadBalanceRequestType() {} -func (*LoadBalanceRequest_ClientStats) isLoadBalanceRequest_LoadBalanceRequestType() {} - -func (m *LoadBalanceRequest) GetLoadBalanceRequestType() isLoadBalanceRequest_LoadBalanceRequestType { - if m != nil { - return m.LoadBalanceRequestType - } - return nil -} - -func (m *LoadBalanceRequest) GetInitialRequest() *InitialLoadBalanceRequest { - if x, ok := m.GetLoadBalanceRequestType().(*LoadBalanceRequest_InitialRequest); ok { - return x.InitialRequest - } - return nil -} - -func (m *LoadBalanceRequest) GetClientStats() *ClientStats { - if x, ok := m.GetLoadBalanceRequestType().(*LoadBalanceRequest_ClientStats); ok { - return x.ClientStats - } - return nil -} - -// XXX_OneofFuncs is for the internal use of the proto package. -func (*LoadBalanceRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _LoadBalanceRequest_OneofMarshaler, _LoadBalanceRequest_OneofUnmarshaler, _LoadBalanceRequest_OneofSizer, []interface{}{ - (*LoadBalanceRequest_InitialRequest)(nil), - (*LoadBalanceRequest_ClientStats)(nil), - } -} - -func _LoadBalanceRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*LoadBalanceRequest) - // load_balance_request_type - switch x := m.LoadBalanceRequestType.(type) { - case *LoadBalanceRequest_InitialRequest: - b.EncodeVarint(1<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.InitialRequest); err != nil { - return err - } - case *LoadBalanceRequest_ClientStats: - b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.ClientStats); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("LoadBalanceRequest.LoadBalanceRequestType has unexpected type %T", x) - } - return nil -} - -func _LoadBalanceRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*LoadBalanceRequest) - switch tag { - case 1: // load_balance_request_type.initial_request - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(InitialLoadBalanceRequest) - err := b.DecodeMessage(msg) - m.LoadBalanceRequestType = &LoadBalanceRequest_InitialRequest{msg} - return true, err - case 2: // load_balance_request_type.client_stats - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(ClientStats) - err := b.DecodeMessage(msg) - m.LoadBalanceRequestType = &LoadBalanceRequest_ClientStats{msg} - return true, err - default: - return false, nil - } -} - -func _LoadBalanceRequest_OneofSizer(msg proto.Message) (n int) { - m := msg.(*LoadBalanceRequest) - // load_balance_request_type - switch x := m.LoadBalanceRequestType.(type) { - case *LoadBalanceRequest_InitialRequest: - s := proto.Size(x.InitialRequest) - n += proto.SizeVarint(1<<3 | proto.WireBytes) - n += proto.SizeVarint(uint64(s)) - n += s - case *LoadBalanceRequest_ClientStats: - s := proto.Size(x.ClientStats) - n += proto.SizeVarint(2<<3 | proto.WireBytes) - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -type InitialLoadBalanceRequest struct { - // Name of load balanced service (IE, balancer.service.com) - // length should be less than 256 bytes. - Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` -} - -func (m *InitialLoadBalanceRequest) Reset() { *m = InitialLoadBalanceRequest{} } -func (m *InitialLoadBalanceRequest) String() string { return proto.CompactTextString(m) } -func (*InitialLoadBalanceRequest) ProtoMessage() {} -func (*InitialLoadBalanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } - -func (m *InitialLoadBalanceRequest) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -// Contains client level statistics that are useful to load balancing. Each -// count except the timestamp should be reset to zero after reporting the stats. -type ClientStats struct { - // The timestamp of generating the report. - Timestamp *Timestamp `protobuf:"bytes,1,opt,name=timestamp" json:"timestamp,omitempty"` - // The total number of RPCs that started. - NumCallsStarted int64 `protobuf:"varint,2,opt,name=num_calls_started,json=numCallsStarted" json:"num_calls_started,omitempty"` - // The total number of RPCs that finished. - NumCallsFinished int64 `protobuf:"varint,3,opt,name=num_calls_finished,json=numCallsFinished" json:"num_calls_finished,omitempty"` - // The total number of RPCs that were dropped by the client because of rate - // limiting. - NumCallsFinishedWithDropForRateLimiting int64 `protobuf:"varint,4,opt,name=num_calls_finished_with_drop_for_rate_limiting,json=numCallsFinishedWithDropForRateLimiting" json:"num_calls_finished_with_drop_for_rate_limiting,omitempty"` - // The total number of RPCs that were dropped by the client because of load - // balancing. - NumCallsFinishedWithDropForLoadBalancing int64 `protobuf:"varint,5,opt,name=num_calls_finished_with_drop_for_load_balancing,json=numCallsFinishedWithDropForLoadBalancing" json:"num_calls_finished_with_drop_for_load_balancing,omitempty"` - // The total number of RPCs that failed to reach a server except dropped RPCs. - NumCallsFinishedWithClientFailedToSend int64 `protobuf:"varint,6,opt,name=num_calls_finished_with_client_failed_to_send,json=numCallsFinishedWithClientFailedToSend" json:"num_calls_finished_with_client_failed_to_send,omitempty"` - // The total number of RPCs that finished and are known to have been received - // by a server. - NumCallsFinishedKnownReceived int64 `protobuf:"varint,7,opt,name=num_calls_finished_known_received,json=numCallsFinishedKnownReceived" json:"num_calls_finished_known_received,omitempty"` -} - -func (m *ClientStats) Reset() { *m = ClientStats{} } -func (m *ClientStats) String() string { return proto.CompactTextString(m) } -func (*ClientStats) ProtoMessage() {} -func (*ClientStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } - -func (m *ClientStats) GetTimestamp() *Timestamp { - if m != nil { - return m.Timestamp - } - return nil -} - -func (m *ClientStats) GetNumCallsStarted() int64 { - if m != nil { - return m.NumCallsStarted - } - return 0 -} - -func (m *ClientStats) GetNumCallsFinished() int64 { - if m != nil { - return m.NumCallsFinished - } - return 0 -} - -func (m *ClientStats) GetNumCallsFinishedWithDropForRateLimiting() int64 { - if m != nil { - return m.NumCallsFinishedWithDropForRateLimiting - } - return 0 -} - -func (m *ClientStats) GetNumCallsFinishedWithDropForLoadBalancing() int64 { - if m != nil { - return m.NumCallsFinishedWithDropForLoadBalancing - } - return 0 -} - -func (m *ClientStats) GetNumCallsFinishedWithClientFailedToSend() int64 { - if m != nil { - return m.NumCallsFinishedWithClientFailedToSend - } - return 0 -} - -func (m *ClientStats) GetNumCallsFinishedKnownReceived() int64 { - if m != nil { - return m.NumCallsFinishedKnownReceived - } - return 0 -} - -type LoadBalanceResponse struct { - // Types that are valid to be assigned to LoadBalanceResponseType: - // *LoadBalanceResponse_InitialResponse - // *LoadBalanceResponse_ServerList - LoadBalanceResponseType isLoadBalanceResponse_LoadBalanceResponseType `protobuf_oneof:"load_balance_response_type"` -} - -func (m *LoadBalanceResponse) Reset() { *m = LoadBalanceResponse{} } -func (m *LoadBalanceResponse) String() string { return proto.CompactTextString(m) } -func (*LoadBalanceResponse) ProtoMessage() {} -func (*LoadBalanceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } - -type isLoadBalanceResponse_LoadBalanceResponseType interface { - isLoadBalanceResponse_LoadBalanceResponseType() -} - -type LoadBalanceResponse_InitialResponse struct { - InitialResponse *InitialLoadBalanceResponse `protobuf:"bytes,1,opt,name=initial_response,json=initialResponse,oneof"` -} -type LoadBalanceResponse_ServerList struct { - ServerList *ServerList `protobuf:"bytes,2,opt,name=server_list,json=serverList,oneof"` -} - -func (*LoadBalanceResponse_InitialResponse) isLoadBalanceResponse_LoadBalanceResponseType() {} -func (*LoadBalanceResponse_ServerList) isLoadBalanceResponse_LoadBalanceResponseType() {} - -func (m *LoadBalanceResponse) GetLoadBalanceResponseType() isLoadBalanceResponse_LoadBalanceResponseType { - if m != nil { - return m.LoadBalanceResponseType - } - return nil -} - -func (m *LoadBalanceResponse) GetInitialResponse() *InitialLoadBalanceResponse { - if x, ok := m.GetLoadBalanceResponseType().(*LoadBalanceResponse_InitialResponse); ok { - return x.InitialResponse - } - return nil -} - -func (m *LoadBalanceResponse) GetServerList() *ServerList { - if x, ok := m.GetLoadBalanceResponseType().(*LoadBalanceResponse_ServerList); ok { - return x.ServerList - } - return nil -} - -// XXX_OneofFuncs is for the internal use of the proto package. -func (*LoadBalanceResponse) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _LoadBalanceResponse_OneofMarshaler, _LoadBalanceResponse_OneofUnmarshaler, _LoadBalanceResponse_OneofSizer, []interface{}{ - (*LoadBalanceResponse_InitialResponse)(nil), - (*LoadBalanceResponse_ServerList)(nil), - } -} - -func _LoadBalanceResponse_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*LoadBalanceResponse) - // load_balance_response_type - switch x := m.LoadBalanceResponseType.(type) { - case *LoadBalanceResponse_InitialResponse: - b.EncodeVarint(1<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.InitialResponse); err != nil { - return err - } - case *LoadBalanceResponse_ServerList: - b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.ServerList); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("LoadBalanceResponse.LoadBalanceResponseType has unexpected type %T", x) - } - return nil -} - -func _LoadBalanceResponse_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*LoadBalanceResponse) - switch tag { - case 1: // load_balance_response_type.initial_response - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(InitialLoadBalanceResponse) - err := b.DecodeMessage(msg) - m.LoadBalanceResponseType = &LoadBalanceResponse_InitialResponse{msg} - return true, err - case 2: // load_balance_response_type.server_list - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(ServerList) - err := b.DecodeMessage(msg) - m.LoadBalanceResponseType = &LoadBalanceResponse_ServerList{msg} - return true, err - default: - return false, nil - } -} - -func _LoadBalanceResponse_OneofSizer(msg proto.Message) (n int) { - m := msg.(*LoadBalanceResponse) - // load_balance_response_type - switch x := m.LoadBalanceResponseType.(type) { - case *LoadBalanceResponse_InitialResponse: - s := proto.Size(x.InitialResponse) - n += proto.SizeVarint(1<<3 | proto.WireBytes) - n += proto.SizeVarint(uint64(s)) - n += s - case *LoadBalanceResponse_ServerList: - s := proto.Size(x.ServerList) - n += proto.SizeVarint(2<<3 | proto.WireBytes) - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - -type InitialLoadBalanceResponse struct { - // This is an application layer redirect that indicates the client should use - // the specified server for load balancing. When this field is non-empty in - // the response, the client should open a separate connection to the - // load_balancer_delegate and call the BalanceLoad method. Its length should - // be less than 64 bytes. - LoadBalancerDelegate string `protobuf:"bytes,1,opt,name=load_balancer_delegate,json=loadBalancerDelegate" json:"load_balancer_delegate,omitempty"` - // This interval defines how often the client should send the client stats - // to the load balancer. Stats should only be reported when the duration is - // positive. - ClientStatsReportInterval *Duration `protobuf:"bytes,2,opt,name=client_stats_report_interval,json=clientStatsReportInterval" json:"client_stats_report_interval,omitempty"` -} - -func (m *InitialLoadBalanceResponse) Reset() { *m = InitialLoadBalanceResponse{} } -func (m *InitialLoadBalanceResponse) String() string { return proto.CompactTextString(m) } -func (*InitialLoadBalanceResponse) ProtoMessage() {} -func (*InitialLoadBalanceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } - -func (m *InitialLoadBalanceResponse) GetLoadBalancerDelegate() string { - if m != nil { - return m.LoadBalancerDelegate - } - return "" -} - -func (m *InitialLoadBalanceResponse) GetClientStatsReportInterval() *Duration { - if m != nil { - return m.ClientStatsReportInterval - } - return nil -} - -type ServerList struct { - // Contains a list of servers selected by the load balancer. The list will - // be updated when server resolutions change or as needed to balance load - // across more servers. The client should consume the server list in order - // unless instructed otherwise via the client_config. - Servers []*Server `protobuf:"bytes,1,rep,name=servers" json:"servers,omitempty"` - // Indicates the amount of time that the client should consider this server - // list as valid. It may be considered stale after waiting this interval of - // time after receiving the list. If the interval is not positive, the - // client can assume the list is valid until the next list is received. - ExpirationInterval *Duration `protobuf:"bytes,3,opt,name=expiration_interval,json=expirationInterval" json:"expiration_interval,omitempty"` -} - -func (m *ServerList) Reset() { *m = ServerList{} } -func (m *ServerList) String() string { return proto.CompactTextString(m) } -func (*ServerList) ProtoMessage() {} -func (*ServerList) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } - -func (m *ServerList) GetServers() []*Server { - if m != nil { - return m.Servers - } - return nil -} - -func (m *ServerList) GetExpirationInterval() *Duration { - if m != nil { - return m.ExpirationInterval - } - return nil -} - -// Contains server information. When none of the [drop_for_*] fields are true, -// use the other fields. When drop_for_rate_limiting is true, ignore all other -// fields. Use drop_for_load_balancing only when it is true and -// drop_for_rate_limiting is false. -type Server struct { - // A resolved address for the server, serialized in network-byte-order. It may - // either be an IPv4 or IPv6 address. - IpAddress []byte `protobuf:"bytes,1,opt,name=ip_address,json=ipAddress,proto3" json:"ip_address,omitempty"` - // A resolved port number for the server. - Port int32 `protobuf:"varint,2,opt,name=port" json:"port,omitempty"` - // An opaque but printable token given to the frontend for each pick. All - // frontend requests for that pick must include the token in its initial - // metadata. The token is used by the backend to verify the request and to - // allow the backend to report load to the gRPC LB system. - // - // Its length is variable but less than 50 bytes. - LoadBalanceToken string `protobuf:"bytes,3,opt,name=load_balance_token,json=loadBalanceToken" json:"load_balance_token,omitempty"` - // Indicates whether this particular request should be dropped by the client - // for rate limiting. - DropForRateLimiting bool `protobuf:"varint,4,opt,name=drop_for_rate_limiting,json=dropForRateLimiting" json:"drop_for_rate_limiting,omitempty"` - // Indicates whether this particular request should be dropped by the client - // for load balancing. - DropForLoadBalancing bool `protobuf:"varint,5,opt,name=drop_for_load_balancing,json=dropForLoadBalancing" json:"drop_for_load_balancing,omitempty"` -} - -func (m *Server) Reset() { *m = Server{} } -func (m *Server) String() string { return proto.CompactTextString(m) } -func (*Server) ProtoMessage() {} -func (*Server) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } - -func (m *Server) GetIpAddress() []byte { - if m != nil { - return m.IpAddress - } - return nil -} - -func (m *Server) GetPort() int32 { - if m != nil { - return m.Port - } - return 0 -} - -func (m *Server) GetLoadBalanceToken() string { - if m != nil { - return m.LoadBalanceToken - } - return "" -} - -func (m *Server) GetDropForRateLimiting() bool { - if m != nil { - return m.DropForRateLimiting - } - return false -} - -func (m *Server) GetDropForLoadBalancing() bool { - if m != nil { - return m.DropForLoadBalancing - } - return false -} - -func init() { - proto.RegisterType((*Duration)(nil), "grpc.lb.v1.Duration") - proto.RegisterType((*Timestamp)(nil), "grpc.lb.v1.Timestamp") - proto.RegisterType((*LoadBalanceRequest)(nil), "grpc.lb.v1.LoadBalanceRequest") - proto.RegisterType((*InitialLoadBalanceRequest)(nil), "grpc.lb.v1.InitialLoadBalanceRequest") - proto.RegisterType((*ClientStats)(nil), "grpc.lb.v1.ClientStats") - proto.RegisterType((*LoadBalanceResponse)(nil), "grpc.lb.v1.LoadBalanceResponse") - proto.RegisterType((*InitialLoadBalanceResponse)(nil), "grpc.lb.v1.InitialLoadBalanceResponse") - proto.RegisterType((*ServerList)(nil), "grpc.lb.v1.ServerList") - proto.RegisterType((*Server)(nil), "grpc.lb.v1.Server") -} - -func init() { proto.RegisterFile("grpclb.proto", fileDescriptor0) } - -var fileDescriptor0 = []byte{ - // 733 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x55, 0xdd, 0x4e, 0x1b, 0x39, - 0x14, 0x66, 0x36, 0xfc, 0xe5, 0x24, 0x5a, 0x58, 0x93, 0x85, 0xc0, 0xc2, 0x2e, 0x1b, 0xa9, 0x34, - 0xaa, 0x68, 0x68, 0x43, 0x7b, 0xd1, 0x9f, 0x9b, 0x02, 0x45, 0x41, 0xe5, 0xa2, 0x72, 0xa8, 0x7a, - 0x55, 0x59, 0x4e, 0xc6, 0x80, 0xc5, 0xc4, 0x9e, 0xda, 0x4e, 0x68, 0x2f, 0x7b, 0xd9, 0x47, 0xe9, - 0x63, 0x54, 0x7d, 0x86, 0xbe, 0x4f, 0x65, 0x7b, 0x26, 0x33, 0x90, 0x1f, 0xd4, 0xbb, 0xf1, 0xf1, - 0x77, 0xbe, 0xf3, 0xf9, 0xd8, 0xdf, 0x19, 0x28, 0x5f, 0xa8, 0xb8, 0x1b, 0x75, 0x1a, 0xb1, 0x92, - 0x46, 0x22, 0xb0, 0xab, 0x46, 0xd4, 0x69, 0x0c, 0x1e, 0xd7, 0x9e, 0xc3, 0xe2, 0x51, 0x5f, 0x51, - 0xc3, 0xa5, 0x40, 0x55, 0x58, 0xd0, 0xac, 0x2b, 0x45, 0xa8, 0xab, 0xc1, 0x76, 0x50, 0x2f, 0xe0, - 0x74, 0x89, 0x2a, 0x30, 0x27, 0xa8, 0x90, 0xba, 0xfa, 0xc7, 0x76, 0x50, 0x9f, 0xc3, 0x7e, 0x51, - 0x7b, 0x01, 0xc5, 0x33, 0xde, 0x63, 0xda, 0xd0, 0x5e, 0xfc, 0xdb, 0xc9, 0xdf, 0x03, 0x40, 0xa7, - 0x92, 0x86, 0x07, 0x34, 0xa2, 0xa2, 0xcb, 0x30, 0xfb, 0xd8, 0x67, 0xda, 0xa0, 0xb7, 0xb0, 0xc4, - 0x05, 0x37, 0x9c, 0x46, 0x44, 0xf9, 0x90, 0xa3, 0x2b, 0x35, 0xef, 0x35, 0x32, 0xd5, 0x8d, 0x13, - 0x0f, 0x19, 0xcd, 0x6f, 0xcd, 0xe0, 0x3f, 0x93, 0xfc, 0x94, 0xf1, 0x25, 0x94, 0xbb, 0x11, 0x67, - 0xc2, 0x10, 0x6d, 0xa8, 0xf1, 0x2a, 0x4a, 0xcd, 0xb5, 0x3c, 0xdd, 0xa1, 0xdb, 0x6f, 0xdb, 0xed, - 0xd6, 0x0c, 0x2e, 0x75, 0xb3, 0xe5, 0xc1, 0x3f, 0xb0, 0x1e, 0x49, 0x1a, 0x92, 0x8e, 0x2f, 0x93, - 0x8a, 0x22, 0xe6, 0x73, 0xcc, 0x6a, 0x7b, 0xb0, 0x3e, 0x51, 0x09, 0x42, 0x30, 0x2b, 0x68, 0x8f, - 0x39, 0xf9, 0x45, 0xec, 0xbe, 0x6b, 0x5f, 0x67, 0xa1, 0x94, 0x2b, 0x86, 0xf6, 0xa1, 0x68, 0xd2, - 0x0e, 0x26, 0xe7, 0xfc, 0x3b, 0x2f, 0x6c, 0xd8, 0x5e, 0x9c, 0xe1, 0xd0, 0x03, 0xf8, 0x4b, 0xf4, - 0x7b, 0xa4, 0x4b, 0xa3, 0x48, 0xdb, 0x33, 0x29, 0xc3, 0x42, 0x77, 0xaa, 0x02, 0x5e, 0x12, 0xfd, - 0xde, 0xa1, 0x8d, 0xb7, 0x7d, 0x18, 0xed, 0x02, 0xca, 0xb0, 0xe7, 0x5c, 0x70, 0x7d, 0xc9, 0xc2, - 0x6a, 0xc1, 0x81, 0x97, 0x53, 0xf0, 0x71, 0x12, 0x47, 0x04, 0x1a, 0xa3, 0x68, 0x72, 0xcd, 0xcd, - 0x25, 0x09, 0x95, 0x8c, 0xc9, 0xb9, 0x54, 0x44, 0x51, 0xc3, 0x48, 0xc4, 0x7b, 0xdc, 0x70, 0x71, - 0x51, 0x9d, 0x75, 0x4c, 0xf7, 0x6f, 0x33, 0xbd, 0xe7, 0xe6, 0xf2, 0x48, 0xc9, 0xf8, 0x58, 0x2a, - 0x4c, 0x0d, 0x3b, 0x4d, 0xe0, 0x88, 0xc2, 0xde, 0x9d, 0x05, 0x72, 0xed, 0xb6, 0x15, 0xe6, 0x5c, - 0x85, 0xfa, 0x94, 0x0a, 0x59, 0xef, 0x6d, 0x89, 0x0f, 0xf0, 0x70, 0x52, 0x89, 0xe4, 0x19, 0x9c, - 0x53, 0x1e, 0xb1, 0x90, 0x18, 0x49, 0x34, 0x13, 0x61, 0x75, 0xde, 0x15, 0xd8, 0x19, 0x57, 0xc0, - 0x5f, 0xd5, 0xb1, 0xc3, 0x9f, 0xc9, 0x36, 0x13, 0x21, 0x6a, 0xc1, 0xff, 0x63, 0xe8, 0xaf, 0x84, - 0xbc, 0x16, 0x44, 0xb1, 0x2e, 0xe3, 0x03, 0x16, 0x56, 0x17, 0x1c, 0xe5, 0xd6, 0x6d, 0xca, 0x37, - 0x16, 0x85, 0x13, 0x50, 0xed, 0x47, 0x00, 0x2b, 0x37, 0x9e, 0x8d, 0x8e, 0xa5, 0xd0, 0x0c, 0xb5, - 0x61, 0x39, 0x73, 0x80, 0x8f, 0x25, 0x4f, 0x63, 0xe7, 0x2e, 0x0b, 0x78, 0x74, 0x6b, 0x06, 0x2f, - 0x0d, 0x3d, 0x90, 0x90, 0x3e, 0x83, 0x92, 0x66, 0x6a, 0xc0, 0x14, 0x89, 0xb8, 0x36, 0x89, 0x07, - 0x56, 0xf3, 0x7c, 0x6d, 0xb7, 0x7d, 0xca, 0x9d, 0x87, 0x40, 0x0f, 0x57, 0x07, 0x9b, 0xb0, 0x71, - 0xcb, 0x01, 0x9e, 0xd3, 0x5b, 0xe0, 0x5b, 0x00, 0x1b, 0x93, 0xa5, 0xa0, 0x27, 0xb0, 0x9a, 0x4f, - 0x56, 0x24, 0x64, 0x11, 0xbb, 0xa0, 0x26, 0xb5, 0x45, 0x25, 0xca, 0x92, 0xd4, 0x51, 0xb2, 0x87, - 0xde, 0xc1, 0x66, 0xde, 0xb2, 0x44, 0xb1, 0x58, 0x2a, 0x43, 0xb8, 0x30, 0x4c, 0x0d, 0x68, 0x94, - 0xc8, 0xaf, 0xe4, 0xe5, 0xa7, 0x43, 0x0c, 0xaf, 0xe7, 0xdc, 0x8b, 0x5d, 0xde, 0x49, 0x92, 0x56, - 0xfb, 0x12, 0x00, 0x64, 0xc7, 0x44, 0xbb, 0x76, 0x62, 0xd9, 0x95, 0x9d, 0x58, 0x85, 0x7a, 0xa9, - 0x89, 0x46, 0xfb, 0x81, 0x53, 0x08, 0x7a, 0x0d, 0x2b, 0xec, 0x53, 0xcc, 0x7d, 0x95, 0x4c, 0x4a, - 0x61, 0x8a, 0x14, 0x94, 0x25, 0x0c, 0x35, 0xfc, 0x0c, 0x60, 0xde, 0x53, 0xa3, 0x2d, 0x00, 0x1e, - 0x13, 0x1a, 0x86, 0x8a, 0x69, 0x3f, 0x34, 0xcb, 0xb8, 0xc8, 0xe3, 0x57, 0x3e, 0x60, 0xe7, 0x87, - 0x55, 0x9f, 0x4c, 0x4d, 0xf7, 0x6d, 0xed, 0x7c, 0xe3, 0x2e, 0x8c, 0xbc, 0x62, 0xc2, 0x69, 0x28, - 0xe2, 0xe5, 0x5c, 0x2b, 0xcf, 0x6c, 0x1c, 0xed, 0xc3, 0xea, 0x14, 0xdb, 0x2e, 0xe2, 0x95, 0x70, - 0x8c, 0x45, 0x9f, 0xc2, 0xda, 0x34, 0x2b, 0x2e, 0xe2, 0x4a, 0x38, 0xc6, 0x76, 0xcd, 0x0e, 0x94, - 0x73, 0xf7, 0xaf, 0x10, 0x86, 0x52, 0xf2, 0x6d, 0xc3, 0xe8, 0xdf, 0x7c, 0x83, 0x46, 0x87, 0xe5, - 0xc6, 0x7f, 0x13, 0xf7, 0xfd, 0x43, 0xaa, 0x07, 0x8f, 0x82, 0xce, 0xbc, 0xfb, 0x7d, 0xed, 0xff, - 0x0a, 0x00, 0x00, 0xff, 0xff, 0x64, 0xbf, 0xda, 0x5e, 0xce, 0x06, 0x00, 0x00, -} diff --git a/vendor/google.golang.org/grpc/grpclb/grpc_lb_v1/grpclb.proto b/vendor/google.golang.org/grpc/grpclb/grpc_lb_v1/grpclb.proto deleted file mode 100644 index a2502fb..0000000 --- a/vendor/google.golang.org/grpc/grpclb/grpc_lb_v1/grpclb.proto +++ /dev/null @@ -1,179 +0,0 @@ -// Copyright 2016, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -syntax = "proto3"; - -package grpc.lb.v1; - -message Duration { - // Signed seconds of the span of time. Must be from -315,576,000,000 - // to +315,576,000,000 inclusive. - int64 seconds = 1; - - // Signed fractions of a second at nanosecond resolution of the span - // of time. Durations less than one second are represented with a 0 - // `seconds` field and a positive or negative `nanos` field. For durations - // of one second or more, a non-zero value for the `nanos` field must be - // of the same sign as the `seconds` field. Must be from -999,999,999 - // to +999,999,999 inclusive. - int32 nanos = 2; -} - -message Timestamp { - - // Represents seconds of UTC time since Unix epoch - // 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to - // 9999-12-31T23:59:59Z inclusive. - int64 seconds = 1; - - // Non-negative fractions of a second at nanosecond resolution. Negative - // second values with fractions must still have non-negative nanos values - // that count forward in time. Must be from 0 to 999,999,999 - // inclusive. - int32 nanos = 2; -} - -service LoadBalancer { - // Bidirectional rpc to get a list of servers. - rpc BalanceLoad(stream LoadBalanceRequest) - returns (stream LoadBalanceResponse); -} - -message LoadBalanceRequest { - oneof load_balance_request_type { - // This message should be sent on the first request to the load balancer. - InitialLoadBalanceRequest initial_request = 1; - - // The client stats should be periodically reported to the load balancer - // based on the duration defined in the InitialLoadBalanceResponse. - ClientStats client_stats = 2; - } -} - -message InitialLoadBalanceRequest { - // Name of load balanced service (IE, balancer.service.com) - // length should be less than 256 bytes. - string name = 1; -} - -// Contains client level statistics that are useful to load balancing. Each -// count except the timestamp should be reset to zero after reporting the stats. -message ClientStats { - // The timestamp of generating the report. - Timestamp timestamp = 1; - - // The total number of RPCs that started. - int64 num_calls_started = 2; - - // The total number of RPCs that finished. - int64 num_calls_finished = 3; - - // The total number of RPCs that were dropped by the client because of rate - // limiting. - int64 num_calls_finished_with_drop_for_rate_limiting = 4; - - // The total number of RPCs that were dropped by the client because of load - // balancing. - int64 num_calls_finished_with_drop_for_load_balancing = 5; - - // The total number of RPCs that failed to reach a server except dropped RPCs. - int64 num_calls_finished_with_client_failed_to_send = 6; - - // The total number of RPCs that finished and are known to have been received - // by a server. - int64 num_calls_finished_known_received = 7; -} - -message LoadBalanceResponse { - oneof load_balance_response_type { - // This message should be sent on the first response to the client. - InitialLoadBalanceResponse initial_response = 1; - - // Contains the list of servers selected by the load balancer. The client - // should send requests to these servers in the specified order. - ServerList server_list = 2; - } -} - -message InitialLoadBalanceResponse { - // This is an application layer redirect that indicates the client should use - // the specified server for load balancing. When this field is non-empty in - // the response, the client should open a separate connection to the - // load_balancer_delegate and call the BalanceLoad method. Its length should - // be less than 64 bytes. - string load_balancer_delegate = 1; - - // This interval defines how often the client should send the client stats - // to the load balancer. Stats should only be reported when the duration is - // positive. - Duration client_stats_report_interval = 2; -} - -message ServerList { - // Contains a list of servers selected by the load balancer. The list will - // be updated when server resolutions change or as needed to balance load - // across more servers. The client should consume the server list in order - // unless instructed otherwise via the client_config. - repeated Server servers = 1; - - // Indicates the amount of time that the client should consider this server - // list as valid. It may be considered stale after waiting this interval of - // time after receiving the list. If the interval is not positive, the - // client can assume the list is valid until the next list is received. - Duration expiration_interval = 3; -} - -// Contains server information. When none of the [drop_for_*] fields are true, -// use the other fields. When drop_for_rate_limiting is true, ignore all other -// fields. Use drop_for_load_balancing only when it is true and -// drop_for_rate_limiting is false. -message Server { - // A resolved address for the server, serialized in network-byte-order. It may - // either be an IPv4 or IPv6 address. - bytes ip_address = 1; - - // A resolved port number for the server. - int32 port = 2; - - // An opaque but printable token given to the frontend for each pick. All - // frontend requests for that pick must include the token in its initial - // metadata. The token is used by the backend to verify the request and to - // allow the backend to report load to the gRPC LB system. - // - // Its length is variable but less than 50 bytes. - string load_balance_token = 3; - - // Indicates whether this particular request should be dropped by the client - // for rate limiting. - bool drop_for_rate_limiting = 4; - - // Indicates whether this particular request should be dropped by the client - // for load balancing. - bool drop_for_load_balancing = 5; -} diff --git a/vendor/google.golang.org/grpc/grpclb/grpc_lb_v1/messages/messages.pb.go b/vendor/google.golang.org/grpc/grpclb/grpc_lb_v1/messages/messages.pb.go new file mode 100644 index 0000000..f4a2712 --- /dev/null +++ b/vendor/google.golang.org/grpc/grpclb/grpc_lb_v1/messages/messages.pb.go @@ -0,0 +1,615 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: grpc_lb_v1/messages/messages.proto + +/* +Package messages is a generated protocol buffer package. + +It is generated from these files: + grpc_lb_v1/messages/messages.proto + +It has these top-level messages: + Duration + Timestamp + LoadBalanceRequest + InitialLoadBalanceRequest + ClientStats + LoadBalanceResponse + InitialLoadBalanceResponse + ServerList + Server +*/ +package messages + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +type Duration struct { + // Signed seconds of the span of time. Must be from -315,576,000,000 + // to +315,576,000,000 inclusive. + Seconds int64 `protobuf:"varint,1,opt,name=seconds" json:"seconds,omitempty"` + // Signed fractions of a second at nanosecond resolution of the span + // of time. Durations less than one second are represented with a 0 + // `seconds` field and a positive or negative `nanos` field. For durations + // of one second or more, a non-zero value for the `nanos` field must be + // of the same sign as the `seconds` field. Must be from -999,999,999 + // to +999,999,999 inclusive. + Nanos int32 `protobuf:"varint,2,opt,name=nanos" json:"nanos,omitempty"` +} + +func (m *Duration) Reset() { *m = Duration{} } +func (m *Duration) String() string { return proto.CompactTextString(m) } +func (*Duration) ProtoMessage() {} +func (*Duration) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *Duration) GetSeconds() int64 { + if m != nil { + return m.Seconds + } + return 0 +} + +func (m *Duration) GetNanos() int32 { + if m != nil { + return m.Nanos + } + return 0 +} + +type Timestamp struct { + // Represents seconds of UTC time since Unix epoch + // 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to + // 9999-12-31T23:59:59Z inclusive. + Seconds int64 `protobuf:"varint,1,opt,name=seconds" json:"seconds,omitempty"` + // Non-negative fractions of a second at nanosecond resolution. Negative + // second values with fractions must still have non-negative nanos values + // that count forward in time. Must be from 0 to 999,999,999 + // inclusive. + Nanos int32 `protobuf:"varint,2,opt,name=nanos" json:"nanos,omitempty"` +} + +func (m *Timestamp) Reset() { *m = Timestamp{} } +func (m *Timestamp) String() string { return proto.CompactTextString(m) } +func (*Timestamp) ProtoMessage() {} +func (*Timestamp) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *Timestamp) GetSeconds() int64 { + if m != nil { + return m.Seconds + } + return 0 +} + +func (m *Timestamp) GetNanos() int32 { + if m != nil { + return m.Nanos + } + return 0 +} + +type LoadBalanceRequest struct { + // Types that are valid to be assigned to LoadBalanceRequestType: + // *LoadBalanceRequest_InitialRequest + // *LoadBalanceRequest_ClientStats + LoadBalanceRequestType isLoadBalanceRequest_LoadBalanceRequestType `protobuf_oneof:"load_balance_request_type"` +} + +func (m *LoadBalanceRequest) Reset() { *m = LoadBalanceRequest{} } +func (m *LoadBalanceRequest) String() string { return proto.CompactTextString(m) } +func (*LoadBalanceRequest) ProtoMessage() {} +func (*LoadBalanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +type isLoadBalanceRequest_LoadBalanceRequestType interface { + isLoadBalanceRequest_LoadBalanceRequestType() +} + +type LoadBalanceRequest_InitialRequest struct { + InitialRequest *InitialLoadBalanceRequest `protobuf:"bytes,1,opt,name=initial_request,json=initialRequest,oneof"` +} +type LoadBalanceRequest_ClientStats struct { + ClientStats *ClientStats `protobuf:"bytes,2,opt,name=client_stats,json=clientStats,oneof"` +} + +func (*LoadBalanceRequest_InitialRequest) isLoadBalanceRequest_LoadBalanceRequestType() {} +func (*LoadBalanceRequest_ClientStats) isLoadBalanceRequest_LoadBalanceRequestType() {} + +func (m *LoadBalanceRequest) GetLoadBalanceRequestType() isLoadBalanceRequest_LoadBalanceRequestType { + if m != nil { + return m.LoadBalanceRequestType + } + return nil +} + +func (m *LoadBalanceRequest) GetInitialRequest() *InitialLoadBalanceRequest { + if x, ok := m.GetLoadBalanceRequestType().(*LoadBalanceRequest_InitialRequest); ok { + return x.InitialRequest + } + return nil +} + +func (m *LoadBalanceRequest) GetClientStats() *ClientStats { + if x, ok := m.GetLoadBalanceRequestType().(*LoadBalanceRequest_ClientStats); ok { + return x.ClientStats + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*LoadBalanceRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _LoadBalanceRequest_OneofMarshaler, _LoadBalanceRequest_OneofUnmarshaler, _LoadBalanceRequest_OneofSizer, []interface{}{ + (*LoadBalanceRequest_InitialRequest)(nil), + (*LoadBalanceRequest_ClientStats)(nil), + } +} + +func _LoadBalanceRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*LoadBalanceRequest) + // load_balance_request_type + switch x := m.LoadBalanceRequestType.(type) { + case *LoadBalanceRequest_InitialRequest: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.InitialRequest); err != nil { + return err + } + case *LoadBalanceRequest_ClientStats: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ClientStats); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("LoadBalanceRequest.LoadBalanceRequestType has unexpected type %T", x) + } + return nil +} + +func _LoadBalanceRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*LoadBalanceRequest) + switch tag { + case 1: // load_balance_request_type.initial_request + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(InitialLoadBalanceRequest) + err := b.DecodeMessage(msg) + m.LoadBalanceRequestType = &LoadBalanceRequest_InitialRequest{msg} + return true, err + case 2: // load_balance_request_type.client_stats + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ClientStats) + err := b.DecodeMessage(msg) + m.LoadBalanceRequestType = &LoadBalanceRequest_ClientStats{msg} + return true, err + default: + return false, nil + } +} + +func _LoadBalanceRequest_OneofSizer(msg proto.Message) (n int) { + m := msg.(*LoadBalanceRequest) + // load_balance_request_type + switch x := m.LoadBalanceRequestType.(type) { + case *LoadBalanceRequest_InitialRequest: + s := proto.Size(x.InitialRequest) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *LoadBalanceRequest_ClientStats: + s := proto.Size(x.ClientStats) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type InitialLoadBalanceRequest struct { + // Name of load balanced service (IE, balancer.service.com) + // length should be less than 256 bytes. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` +} + +func (m *InitialLoadBalanceRequest) Reset() { *m = InitialLoadBalanceRequest{} } +func (m *InitialLoadBalanceRequest) String() string { return proto.CompactTextString(m) } +func (*InitialLoadBalanceRequest) ProtoMessage() {} +func (*InitialLoadBalanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *InitialLoadBalanceRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +// Contains client level statistics that are useful to load balancing. Each +// count except the timestamp should be reset to zero after reporting the stats. +type ClientStats struct { + // The timestamp of generating the report. + Timestamp *Timestamp `protobuf:"bytes,1,opt,name=timestamp" json:"timestamp,omitempty"` + // The total number of RPCs that started. + NumCallsStarted int64 `protobuf:"varint,2,opt,name=num_calls_started,json=numCallsStarted" json:"num_calls_started,omitempty"` + // The total number of RPCs that finished. + NumCallsFinished int64 `protobuf:"varint,3,opt,name=num_calls_finished,json=numCallsFinished" json:"num_calls_finished,omitempty"` + // The total number of RPCs that were dropped by the client because of rate + // limiting. + NumCallsFinishedWithDropForRateLimiting int64 `protobuf:"varint,4,opt,name=num_calls_finished_with_drop_for_rate_limiting,json=numCallsFinishedWithDropForRateLimiting" json:"num_calls_finished_with_drop_for_rate_limiting,omitempty"` + // The total number of RPCs that were dropped by the client because of load + // balancing. + NumCallsFinishedWithDropForLoadBalancing int64 `protobuf:"varint,5,opt,name=num_calls_finished_with_drop_for_load_balancing,json=numCallsFinishedWithDropForLoadBalancing" json:"num_calls_finished_with_drop_for_load_balancing,omitempty"` + // The total number of RPCs that failed to reach a server except dropped RPCs. + NumCallsFinishedWithClientFailedToSend int64 `protobuf:"varint,6,opt,name=num_calls_finished_with_client_failed_to_send,json=numCallsFinishedWithClientFailedToSend" json:"num_calls_finished_with_client_failed_to_send,omitempty"` + // The total number of RPCs that finished and are known to have been received + // by a server. + NumCallsFinishedKnownReceived int64 `protobuf:"varint,7,opt,name=num_calls_finished_known_received,json=numCallsFinishedKnownReceived" json:"num_calls_finished_known_received,omitempty"` +} + +func (m *ClientStats) Reset() { *m = ClientStats{} } +func (m *ClientStats) String() string { return proto.CompactTextString(m) } +func (*ClientStats) ProtoMessage() {} +func (*ClientStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *ClientStats) GetTimestamp() *Timestamp { + if m != nil { + return m.Timestamp + } + return nil +} + +func (m *ClientStats) GetNumCallsStarted() int64 { + if m != nil { + return m.NumCallsStarted + } + return 0 +} + +func (m *ClientStats) GetNumCallsFinished() int64 { + if m != nil { + return m.NumCallsFinished + } + return 0 +} + +func (m *ClientStats) GetNumCallsFinishedWithDropForRateLimiting() int64 { + if m != nil { + return m.NumCallsFinishedWithDropForRateLimiting + } + return 0 +} + +func (m *ClientStats) GetNumCallsFinishedWithDropForLoadBalancing() int64 { + if m != nil { + return m.NumCallsFinishedWithDropForLoadBalancing + } + return 0 +} + +func (m *ClientStats) GetNumCallsFinishedWithClientFailedToSend() int64 { + if m != nil { + return m.NumCallsFinishedWithClientFailedToSend + } + return 0 +} + +func (m *ClientStats) GetNumCallsFinishedKnownReceived() int64 { + if m != nil { + return m.NumCallsFinishedKnownReceived + } + return 0 +} + +type LoadBalanceResponse struct { + // Types that are valid to be assigned to LoadBalanceResponseType: + // *LoadBalanceResponse_InitialResponse + // *LoadBalanceResponse_ServerList + LoadBalanceResponseType isLoadBalanceResponse_LoadBalanceResponseType `protobuf_oneof:"load_balance_response_type"` +} + +func (m *LoadBalanceResponse) Reset() { *m = LoadBalanceResponse{} } +func (m *LoadBalanceResponse) String() string { return proto.CompactTextString(m) } +func (*LoadBalanceResponse) ProtoMessage() {} +func (*LoadBalanceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +type isLoadBalanceResponse_LoadBalanceResponseType interface { + isLoadBalanceResponse_LoadBalanceResponseType() +} + +type LoadBalanceResponse_InitialResponse struct { + InitialResponse *InitialLoadBalanceResponse `protobuf:"bytes,1,opt,name=initial_response,json=initialResponse,oneof"` +} +type LoadBalanceResponse_ServerList struct { + ServerList *ServerList `protobuf:"bytes,2,opt,name=server_list,json=serverList,oneof"` +} + +func (*LoadBalanceResponse_InitialResponse) isLoadBalanceResponse_LoadBalanceResponseType() {} +func (*LoadBalanceResponse_ServerList) isLoadBalanceResponse_LoadBalanceResponseType() {} + +func (m *LoadBalanceResponse) GetLoadBalanceResponseType() isLoadBalanceResponse_LoadBalanceResponseType { + if m != nil { + return m.LoadBalanceResponseType + } + return nil +} + +func (m *LoadBalanceResponse) GetInitialResponse() *InitialLoadBalanceResponse { + if x, ok := m.GetLoadBalanceResponseType().(*LoadBalanceResponse_InitialResponse); ok { + return x.InitialResponse + } + return nil +} + +func (m *LoadBalanceResponse) GetServerList() *ServerList { + if x, ok := m.GetLoadBalanceResponseType().(*LoadBalanceResponse_ServerList); ok { + return x.ServerList + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*LoadBalanceResponse) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _LoadBalanceResponse_OneofMarshaler, _LoadBalanceResponse_OneofUnmarshaler, _LoadBalanceResponse_OneofSizer, []interface{}{ + (*LoadBalanceResponse_InitialResponse)(nil), + (*LoadBalanceResponse_ServerList)(nil), + } +} + +func _LoadBalanceResponse_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*LoadBalanceResponse) + // load_balance_response_type + switch x := m.LoadBalanceResponseType.(type) { + case *LoadBalanceResponse_InitialResponse: + b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.InitialResponse); err != nil { + return err + } + case *LoadBalanceResponse_ServerList: + b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ServerList); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("LoadBalanceResponse.LoadBalanceResponseType has unexpected type %T", x) + } + return nil +} + +func _LoadBalanceResponse_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*LoadBalanceResponse) + switch tag { + case 1: // load_balance_response_type.initial_response + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(InitialLoadBalanceResponse) + err := b.DecodeMessage(msg) + m.LoadBalanceResponseType = &LoadBalanceResponse_InitialResponse{msg} + return true, err + case 2: // load_balance_response_type.server_list + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ServerList) + err := b.DecodeMessage(msg) + m.LoadBalanceResponseType = &LoadBalanceResponse_ServerList{msg} + return true, err + default: + return false, nil + } +} + +func _LoadBalanceResponse_OneofSizer(msg proto.Message) (n int) { + m := msg.(*LoadBalanceResponse) + // load_balance_response_type + switch x := m.LoadBalanceResponseType.(type) { + case *LoadBalanceResponse_InitialResponse: + s := proto.Size(x.InitialResponse) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *LoadBalanceResponse_ServerList: + s := proto.Size(x.ServerList) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type InitialLoadBalanceResponse struct { + // This is an application layer redirect that indicates the client should use + // the specified server for load balancing. When this field is non-empty in + // the response, the client should open a separate connection to the + // load_balancer_delegate and call the BalanceLoad method. Its length should + // be less than 64 bytes. + LoadBalancerDelegate string `protobuf:"bytes,1,opt,name=load_balancer_delegate,json=loadBalancerDelegate" json:"load_balancer_delegate,omitempty"` + // This interval defines how often the client should send the client stats + // to the load balancer. Stats should only be reported when the duration is + // positive. + ClientStatsReportInterval *Duration `protobuf:"bytes,2,opt,name=client_stats_report_interval,json=clientStatsReportInterval" json:"client_stats_report_interval,omitempty"` +} + +func (m *InitialLoadBalanceResponse) Reset() { *m = InitialLoadBalanceResponse{} } +func (m *InitialLoadBalanceResponse) String() string { return proto.CompactTextString(m) } +func (*InitialLoadBalanceResponse) ProtoMessage() {} +func (*InitialLoadBalanceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *InitialLoadBalanceResponse) GetLoadBalancerDelegate() string { + if m != nil { + return m.LoadBalancerDelegate + } + return "" +} + +func (m *InitialLoadBalanceResponse) GetClientStatsReportInterval() *Duration { + if m != nil { + return m.ClientStatsReportInterval + } + return nil +} + +type ServerList struct { + // Contains a list of servers selected by the load balancer. The list will + // be updated when server resolutions change or as needed to balance load + // across more servers. The client should consume the server list in order + // unless instructed otherwise via the client_config. + Servers []*Server `protobuf:"bytes,1,rep,name=servers" json:"servers,omitempty"` +} + +func (m *ServerList) Reset() { *m = ServerList{} } +func (m *ServerList) String() string { return proto.CompactTextString(m) } +func (*ServerList) ProtoMessage() {} +func (*ServerList) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *ServerList) GetServers() []*Server { + if m != nil { + return m.Servers + } + return nil +} + +// Contains server information. When none of the [drop_for_*] fields are true, +// use the other fields. When drop_for_rate_limiting is true, ignore all other +// fields. Use drop_for_load_balancing only when it is true and +// drop_for_rate_limiting is false. +type Server struct { + // A resolved address for the server, serialized in network-byte-order. It may + // either be an IPv4 or IPv6 address. + IpAddress []byte `protobuf:"bytes,1,opt,name=ip_address,json=ipAddress,proto3" json:"ip_address,omitempty"` + // A resolved port number for the server. + Port int32 `protobuf:"varint,2,opt,name=port" json:"port,omitempty"` + // An opaque but printable token given to the frontend for each pick. All + // frontend requests for that pick must include the token in its initial + // metadata. The token is used by the backend to verify the request and to + // allow the backend to report load to the gRPC LB system. + // + // Its length is variable but less than 50 bytes. + LoadBalanceToken string `protobuf:"bytes,3,opt,name=load_balance_token,json=loadBalanceToken" json:"load_balance_token,omitempty"` + // Indicates whether this particular request should be dropped by the client + // for rate limiting. + DropForRateLimiting bool `protobuf:"varint,4,opt,name=drop_for_rate_limiting,json=dropForRateLimiting" json:"drop_for_rate_limiting,omitempty"` + // Indicates whether this particular request should be dropped by the client + // for load balancing. + DropForLoadBalancing bool `protobuf:"varint,5,opt,name=drop_for_load_balancing,json=dropForLoadBalancing" json:"drop_for_load_balancing,omitempty"` +} + +func (m *Server) Reset() { *m = Server{} } +func (m *Server) String() string { return proto.CompactTextString(m) } +func (*Server) ProtoMessage() {} +func (*Server) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *Server) GetIpAddress() []byte { + if m != nil { + return m.IpAddress + } + return nil +} + +func (m *Server) GetPort() int32 { + if m != nil { + return m.Port + } + return 0 +} + +func (m *Server) GetLoadBalanceToken() string { + if m != nil { + return m.LoadBalanceToken + } + return "" +} + +func (m *Server) GetDropForRateLimiting() bool { + if m != nil { + return m.DropForRateLimiting + } + return false +} + +func (m *Server) GetDropForLoadBalancing() bool { + if m != nil { + return m.DropForLoadBalancing + } + return false +} + +func init() { + proto.RegisterType((*Duration)(nil), "grpc.lb.v1.Duration") + proto.RegisterType((*Timestamp)(nil), "grpc.lb.v1.Timestamp") + proto.RegisterType((*LoadBalanceRequest)(nil), "grpc.lb.v1.LoadBalanceRequest") + proto.RegisterType((*InitialLoadBalanceRequest)(nil), "grpc.lb.v1.InitialLoadBalanceRequest") + proto.RegisterType((*ClientStats)(nil), "grpc.lb.v1.ClientStats") + proto.RegisterType((*LoadBalanceResponse)(nil), "grpc.lb.v1.LoadBalanceResponse") + proto.RegisterType((*InitialLoadBalanceResponse)(nil), "grpc.lb.v1.InitialLoadBalanceResponse") + proto.RegisterType((*ServerList)(nil), "grpc.lb.v1.ServerList") + proto.RegisterType((*Server)(nil), "grpc.lb.v1.Server") +} + +func init() { proto.RegisterFile("grpc_lb_v1/messages/messages.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 709 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x55, 0xdd, 0x4e, 0x1b, 0x3b, + 0x10, 0x26, 0x27, 0x01, 0x92, 0x09, 0x3a, 0xe4, 0x98, 0x1c, 0x08, 0x14, 0x24, 0xba, 0x52, 0x69, + 0x54, 0xd1, 0x20, 0xa0, 0xbd, 0xe8, 0xcf, 0x45, 0x1b, 0x10, 0x0a, 0x2d, 0x17, 0x95, 0x43, 0x55, + 0xa9, 0x52, 0x65, 0x39, 0xd9, 0x21, 0x58, 0x6c, 0xec, 0xad, 0xed, 0x04, 0xf5, 0x11, 0xfa, 0x28, + 0x7d, 0x8c, 0xaa, 0xcf, 0xd0, 0xf7, 0xa9, 0xd6, 0xbb, 0x9b, 0x5d, 0x20, 0x80, 0x7a, 0x67, 0x8f, + 0xbf, 0xf9, 0xbe, 0xf1, 0xac, 0xbf, 0x59, 0xf0, 0x06, 0x3a, 0xec, 0xb3, 0xa0, 0xc7, 0xc6, 0xbb, + 0x3b, 0x43, 0x34, 0x86, 0x0f, 0xd0, 0x4c, 0x16, 0xad, 0x50, 0x2b, 0xab, 0x08, 0x44, 0x98, 0x56, + 0xd0, 0x6b, 0x8d, 0x77, 0xbd, 0x97, 0x50, 0x3e, 0x1c, 0x69, 0x6e, 0x85, 0x92, 0xa4, 0x01, 0xf3, + 0x06, 0xfb, 0x4a, 0xfa, 0xa6, 0x51, 0xd8, 0x2c, 0x34, 0x8b, 0x34, 0xdd, 0x92, 0x3a, 0xcc, 0x4a, + 0x2e, 0x95, 0x69, 0xfc, 0xb3, 0x59, 0x68, 0xce, 0xd2, 0x78, 0xe3, 0xbd, 0x82, 0xca, 0xa9, 0x18, + 0xa2, 0xb1, 0x7c, 0x18, 0xfe, 0x75, 0xf2, 0xcf, 0x02, 0x90, 0x13, 0xc5, 0xfd, 0x36, 0x0f, 0xb8, + 0xec, 0x23, 0xc5, 0xaf, 0x23, 0x34, 0x96, 0x7c, 0x80, 0x45, 0x21, 0x85, 0x15, 0x3c, 0x60, 0x3a, + 0x0e, 0x39, 0xba, 0xea, 0xde, 0xa3, 0x56, 0x56, 0x75, 0xeb, 0x38, 0x86, 0xdc, 0xcc, 0xef, 0xcc, + 0xd0, 0x7f, 0x93, 0xfc, 0x94, 0xf1, 0x35, 0x2c, 0xf4, 0x03, 0x81, 0xd2, 0x32, 0x63, 0xb9, 0x8d, + 0xab, 0xa8, 0xee, 0xad, 0xe4, 0xe9, 0x0e, 0xdc, 0x79, 0x37, 0x3a, 0xee, 0xcc, 0xd0, 0x6a, 0x3f, + 0xdb, 0xb6, 0x1f, 0xc0, 0x6a, 0xa0, 0xb8, 0xcf, 0x7a, 0xb1, 0x4c, 0x5a, 0x14, 0xb3, 0xdf, 0x42, + 0xf4, 0x76, 0x60, 0xf5, 0xd6, 0x4a, 0x08, 0x81, 0x92, 0xe4, 0x43, 0x74, 0xe5, 0x57, 0xa8, 0x5b, + 0x7b, 0xdf, 0x4b, 0x50, 0xcd, 0x89, 0x91, 0x7d, 0xa8, 0xd8, 0xb4, 0x83, 0xc9, 0x3d, 0xff, 0xcf, + 0x17, 0x36, 0x69, 0x2f, 0xcd, 0x70, 0xe4, 0x09, 0xfc, 0x27, 0x47, 0x43, 0xd6, 0xe7, 0x41, 0x60, + 0xa2, 0x3b, 0x69, 0x8b, 0xbe, 0xbb, 0x55, 0x91, 0x2e, 0xca, 0xd1, 0xf0, 0x20, 0x8a, 0x77, 0xe3, + 0x30, 0xd9, 0x06, 0x92, 0x61, 0xcf, 0x84, 0x14, 0xe6, 0x1c, 0xfd, 0x46, 0xd1, 0x81, 0x6b, 0x29, + 0xf8, 0x28, 0x89, 0x13, 0x06, 0xad, 0x9b, 0x68, 0x76, 0x29, 0xec, 0x39, 0xf3, 0xb5, 0x0a, 0xd9, + 0x99, 0xd2, 0x4c, 0x73, 0x8b, 0x2c, 0x10, 0x43, 0x61, 0x85, 0x1c, 0x34, 0x4a, 0x8e, 0xe9, 0xf1, + 0x75, 0xa6, 0x4f, 0xc2, 0x9e, 0x1f, 0x6a, 0x15, 0x1e, 0x29, 0x4d, 0xb9, 0xc5, 0x93, 0x04, 0x4e, + 0x38, 0xec, 0xdc, 0x2b, 0x90, 0x6b, 0x77, 0xa4, 0x30, 0xeb, 0x14, 0x9a, 0x77, 0x28, 0x64, 0xbd, + 0x8f, 0x24, 0xbe, 0xc0, 0xd3, 0xdb, 0x24, 0x92, 0x67, 0x70, 0xc6, 0x45, 0x80, 0x3e, 0xb3, 0x8a, + 0x19, 0x94, 0x7e, 0x63, 0xce, 0x09, 0x6c, 0x4d, 0x13, 0x88, 0x3f, 0xd5, 0x91, 0xc3, 0x9f, 0xaa, + 0x2e, 0x4a, 0x9f, 0x74, 0xe0, 0xe1, 0x14, 0xfa, 0x0b, 0xa9, 0x2e, 0x25, 0xd3, 0xd8, 0x47, 0x31, + 0x46, 0xbf, 0x31, 0xef, 0x28, 0x37, 0xae, 0x53, 0xbe, 0x8f, 0x50, 0x34, 0x01, 0x79, 0xbf, 0x0a, + 0xb0, 0x74, 0xe5, 0xd9, 0x98, 0x50, 0x49, 0x83, 0xa4, 0x0b, 0xb5, 0xcc, 0x01, 0x71, 0x2c, 0x79, + 0x1a, 0x5b, 0xf7, 0x59, 0x20, 0x46, 0x77, 0x66, 0xe8, 0xe2, 0xc4, 0x03, 0x09, 0xe9, 0x0b, 0xa8, + 0x1a, 0xd4, 0x63, 0xd4, 0x2c, 0x10, 0xc6, 0x26, 0x1e, 0x58, 0xce, 0xf3, 0x75, 0xdd, 0xf1, 0x89, + 0x70, 0x1e, 0x02, 0x33, 0xd9, 0xb5, 0xd7, 0x61, 0xed, 0x9a, 0x03, 0x62, 0xce, 0xd8, 0x02, 0x3f, + 0x0a, 0xb0, 0x76, 0x7b, 0x29, 0xe4, 0x19, 0x2c, 0xe7, 0x93, 0x35, 0xf3, 0x31, 0xc0, 0x01, 0xb7, + 0xa9, 0x2d, 0xea, 0x41, 0x96, 0xa4, 0x0f, 0x93, 0x33, 0xf2, 0x11, 0xd6, 0xf3, 0x96, 0x65, 0x1a, + 0x43, 0xa5, 0x2d, 0x13, 0xd2, 0xa2, 0x1e, 0xf3, 0x20, 0x29, 0xbf, 0x9e, 0x2f, 0x3f, 0x1d, 0x62, + 0x74, 0x35, 0xe7, 0x5e, 0xea, 0xf2, 0x8e, 0x93, 0x34, 0xef, 0x0d, 0x40, 0x76, 0x4b, 0xb2, 0x1d, + 0x0d, 0xac, 0x68, 0x17, 0x0d, 0xac, 0x62, 0xb3, 0xba, 0x47, 0x6e, 0xb6, 0x83, 0xa6, 0x90, 0x77, + 0xa5, 0x72, 0xb1, 0x56, 0xf2, 0x7e, 0x17, 0x60, 0x2e, 0x3e, 0x21, 0x1b, 0x00, 0x22, 0x64, 0xdc, + 0xf7, 0x35, 0x9a, 0x78, 0xe4, 0x2d, 0xd0, 0x8a, 0x08, 0xdf, 0xc6, 0x81, 0xc8, 0xfd, 0x91, 0x76, + 0x32, 0xf3, 0xdc, 0x3a, 0x32, 0xe3, 0x95, 0x4e, 0x5a, 0x75, 0x81, 0xd2, 0x99, 0xb1, 0x42, 0x6b, + 0xb9, 0x46, 0x9c, 0x46, 0x71, 0xb2, 0x0f, 0xcb, 0x77, 0x98, 0xae, 0x4c, 0x97, 0xfc, 0x29, 0x06, + 0x7b, 0x0e, 0x2b, 0x77, 0x19, 0xa9, 0x4c, 0xeb, 0xfe, 0x14, 0xd3, 0xb4, 0xe1, 0x73, 0x39, 0xfd, + 0x47, 0xf4, 0xe6, 0xdc, 0x4f, 0x62, 0xff, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa3, 0x36, 0x86, + 0xa6, 0x4a, 0x06, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/grpc/grpclb/grpc_lb_v1/messages/messages.proto b/vendor/google.golang.org/grpc/grpclb/grpc_lb_v1/messages/messages.proto new file mode 100644 index 0000000..42d99c1 --- /dev/null +++ b/vendor/google.golang.org/grpc/grpclb/grpc_lb_v1/messages/messages.proto @@ -0,0 +1,155 @@ +// Copyright 2016 gRPC authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package grpc.lb.v1; +option go_package = "google.golang.org/grpc/grpclb/grpc_lb_v1/messages"; + +message Duration { + // Signed seconds of the span of time. Must be from -315,576,000,000 + // to +315,576,000,000 inclusive. + int64 seconds = 1; + + // Signed fractions of a second at nanosecond resolution of the span + // of time. Durations less than one second are represented with a 0 + // `seconds` field and a positive or negative `nanos` field. For durations + // of one second or more, a non-zero value for the `nanos` field must be + // of the same sign as the `seconds` field. Must be from -999,999,999 + // to +999,999,999 inclusive. + int32 nanos = 2; +} + +message Timestamp { + // Represents seconds of UTC time since Unix epoch + // 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to + // 9999-12-31T23:59:59Z inclusive. + int64 seconds = 1; + + // Non-negative fractions of a second at nanosecond resolution. Negative + // second values with fractions must still have non-negative nanos values + // that count forward in time. Must be from 0 to 999,999,999 + // inclusive. + int32 nanos = 2; +} + +message LoadBalanceRequest { + oneof load_balance_request_type { + // This message should be sent on the first request to the load balancer. + InitialLoadBalanceRequest initial_request = 1; + + // The client stats should be periodically reported to the load balancer + // based on the duration defined in the InitialLoadBalanceResponse. + ClientStats client_stats = 2; + } +} + +message InitialLoadBalanceRequest { + // Name of load balanced service (IE, balancer.service.com) + // length should be less than 256 bytes. + string name = 1; +} + +// Contains client level statistics that are useful to load balancing. Each +// count except the timestamp should be reset to zero after reporting the stats. +message ClientStats { + // The timestamp of generating the report. + Timestamp timestamp = 1; + + // The total number of RPCs that started. + int64 num_calls_started = 2; + + // The total number of RPCs that finished. + int64 num_calls_finished = 3; + + // The total number of RPCs that were dropped by the client because of rate + // limiting. + int64 num_calls_finished_with_drop_for_rate_limiting = 4; + + // The total number of RPCs that were dropped by the client because of load + // balancing. + int64 num_calls_finished_with_drop_for_load_balancing = 5; + + // The total number of RPCs that failed to reach a server except dropped RPCs. + int64 num_calls_finished_with_client_failed_to_send = 6; + + // The total number of RPCs that finished and are known to have been received + // by a server. + int64 num_calls_finished_known_received = 7; +} + +message LoadBalanceResponse { + oneof load_balance_response_type { + // This message should be sent on the first response to the client. + InitialLoadBalanceResponse initial_response = 1; + + // Contains the list of servers selected by the load balancer. The client + // should send requests to these servers in the specified order. + ServerList server_list = 2; + } +} + +message InitialLoadBalanceResponse { + // This is an application layer redirect that indicates the client should use + // the specified server for load balancing. When this field is non-empty in + // the response, the client should open a separate connection to the + // load_balancer_delegate and call the BalanceLoad method. Its length should + // be less than 64 bytes. + string load_balancer_delegate = 1; + + // This interval defines how often the client should send the client stats + // to the load balancer. Stats should only be reported when the duration is + // positive. + Duration client_stats_report_interval = 2; +} + +message ServerList { + // Contains a list of servers selected by the load balancer. The list will + // be updated when server resolutions change or as needed to balance load + // across more servers. The client should consume the server list in order + // unless instructed otherwise via the client_config. + repeated Server servers = 1; + + // Was google.protobuf.Duration expiration_interval. + reserved 3; +} + +// Contains server information. When none of the [drop_for_*] fields are true, +// use the other fields. When drop_for_rate_limiting is true, ignore all other +// fields. Use drop_for_load_balancing only when it is true and +// drop_for_rate_limiting is false. +message Server { + // A resolved address for the server, serialized in network-byte-order. It may + // either be an IPv4 or IPv6 address. + bytes ip_address = 1; + + // A resolved port number for the server. + int32 port = 2; + + // An opaque but printable token given to the frontend for each pick. All + // frontend requests for that pick must include the token in its initial + // metadata. The token is used by the backend to verify the request and to + // allow the backend to report load to the gRPC LB system. + // + // Its length is variable but less than 50 bytes. + string load_balance_token = 3; + + // Indicates whether this particular request should be dropped by the client + // for rate limiting. + bool drop_for_rate_limiting = 4; + + // Indicates whether this particular request should be dropped by the client + // for load balancing. + bool drop_for_load_balancing = 5; +} diff --git a/vendor/google.golang.org/grpc/grpclb/grpc_lb_v1/service/service.pb.go b/vendor/google.golang.org/grpc/grpclb/grpc_lb_v1/service/service.pb.go new file mode 100644 index 0000000..ebcbe56 --- /dev/null +++ b/vendor/google.golang.org/grpc/grpclb/grpc_lb_v1/service/service.pb.go @@ -0,0 +1,154 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: grpc_lb_v1/service/service.proto + +/* +Package service is a generated protocol buffer package. + +It is generated from these files: + grpc_lb_v1/service/service.proto + +It has these top-level messages: +*/ +package service + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import grpc_lb_v1 "google.golang.org/grpc/grpclb/grpc_lb_v1/messages" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// Client API for LoadBalancer service + +type LoadBalancerClient interface { + // Bidirectional rpc to get a list of servers. + BalanceLoad(ctx context.Context, opts ...grpc.CallOption) (LoadBalancer_BalanceLoadClient, error) +} + +type loadBalancerClient struct { + cc *grpc.ClientConn +} + +func NewLoadBalancerClient(cc *grpc.ClientConn) LoadBalancerClient { + return &loadBalancerClient{cc} +} + +func (c *loadBalancerClient) BalanceLoad(ctx context.Context, opts ...grpc.CallOption) (LoadBalancer_BalanceLoadClient, error) { + stream, err := grpc.NewClientStream(ctx, &_LoadBalancer_serviceDesc.Streams[0], c.cc, "/grpc.lb.v1.LoadBalancer/BalanceLoad", opts...) + if err != nil { + return nil, err + } + x := &loadBalancerBalanceLoadClient{stream} + return x, nil +} + +type LoadBalancer_BalanceLoadClient interface { + Send(*grpc_lb_v1.LoadBalanceRequest) error + Recv() (*grpc_lb_v1.LoadBalanceResponse, error) + grpc.ClientStream +} + +type loadBalancerBalanceLoadClient struct { + grpc.ClientStream +} + +func (x *loadBalancerBalanceLoadClient) Send(m *grpc_lb_v1.LoadBalanceRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *loadBalancerBalanceLoadClient) Recv() (*grpc_lb_v1.LoadBalanceResponse, error) { + m := new(grpc_lb_v1.LoadBalanceResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// Server API for LoadBalancer service + +type LoadBalancerServer interface { + // Bidirectional rpc to get a list of servers. + BalanceLoad(LoadBalancer_BalanceLoadServer) error +} + +func RegisterLoadBalancerServer(s *grpc.Server, srv LoadBalancerServer) { + s.RegisterService(&_LoadBalancer_serviceDesc, srv) +} + +func _LoadBalancer_BalanceLoad_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(LoadBalancerServer).BalanceLoad(&loadBalancerBalanceLoadServer{stream}) +} + +type LoadBalancer_BalanceLoadServer interface { + Send(*grpc_lb_v1.LoadBalanceResponse) error + Recv() (*grpc_lb_v1.LoadBalanceRequest, error) + grpc.ServerStream +} + +type loadBalancerBalanceLoadServer struct { + grpc.ServerStream +} + +func (x *loadBalancerBalanceLoadServer) Send(m *grpc_lb_v1.LoadBalanceResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *loadBalancerBalanceLoadServer) Recv() (*grpc_lb_v1.LoadBalanceRequest, error) { + m := new(grpc_lb_v1.LoadBalanceRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +var _LoadBalancer_serviceDesc = grpc.ServiceDesc{ + ServiceName: "grpc.lb.v1.LoadBalancer", + HandlerType: (*LoadBalancerServer)(nil), + Methods: []grpc.MethodDesc{}, + Streams: []grpc.StreamDesc{ + { + StreamName: "BalanceLoad", + Handler: _LoadBalancer_BalanceLoad_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: "grpc_lb_v1/service/service.proto", +} + +func init() { proto.RegisterFile("grpc_lb_v1/service/service.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 142 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x48, 0x2f, 0x2a, 0x48, + 0x8e, 0xcf, 0x49, 0x8a, 0x2f, 0x33, 0xd4, 0x2f, 0x4e, 0x2d, 0x2a, 0xcb, 0x4c, 0x4e, 0x85, 0xd1, + 0x7a, 0x05, 0x45, 0xf9, 0x25, 0xf9, 0x42, 0x5c, 0x20, 0x15, 0x7a, 0x39, 0x49, 0x7a, 0x65, 0x86, + 0x52, 0x4a, 0x48, 0xaa, 0x73, 0x53, 0x8b, 0x8b, 0x13, 0xd3, 0x53, 0x8b, 0xe1, 0x0c, 0x88, 0x7a, + 0xa3, 0x24, 0x2e, 0x1e, 0x9f, 0xfc, 0xc4, 0x14, 0xa7, 0xc4, 0x9c, 0xc4, 0xbc, 0xe4, 0xd4, 0x22, + 0xa1, 0x20, 0x2e, 0x6e, 0x28, 0x1b, 0x24, 0x2c, 0x24, 0xa7, 0x87, 0x30, 0x4f, 0x0f, 0x49, 0x61, + 0x50, 0x6a, 0x61, 0x69, 0x6a, 0x71, 0x89, 0x94, 0x3c, 0x4e, 0xf9, 0xe2, 0x82, 0xfc, 0xbc, 0xe2, + 0x54, 0x0d, 0x46, 0x03, 0x46, 0x27, 0xce, 0x28, 0x76, 0xa8, 0x23, 0x93, 0xd8, 0xc0, 0xb6, 0x1a, + 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x39, 0x4e, 0xb0, 0xf8, 0xc9, 0x00, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/grpc/grpclb/grpc_lb_v1/service/service.proto b/vendor/google.golang.org/grpc/grpclb/grpc_lb_v1/service/service.proto new file mode 100644 index 0000000..6971fdb --- /dev/null +++ b/vendor/google.golang.org/grpc/grpclb/grpc_lb_v1/service/service.proto @@ -0,0 +1,26 @@ +// Copyright 2016 gRPC authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package grpc.lb.v1; +option go_package = "google.golang.org/grpc/grpclb/grpc_lb_v1/service"; + +import "grpc_lb_v1/messages/messages.proto"; + +service LoadBalancer { + // Bidirectional rpc to get a list of servers. + rpc BalanceLoad(stream LoadBalanceRequest) + returns (stream LoadBalanceResponse); +} diff --git a/vendor/google.golang.org/grpc/grpclb/grpclb_server_generated.go b/vendor/google.golang.org/grpc/grpclb/grpclb_server_generated.go deleted file mode 100644 index 65ce636..0000000 --- a/vendor/google.golang.org/grpc/grpclb/grpclb_server_generated.go +++ /dev/null @@ -1,54 +0,0 @@ -// This file contains the generated server side code. -// It's only used for grpclb testing. - -package grpclb - -import ( - "google.golang.org/grpc" - lbpb "google.golang.org/grpc/grpclb/grpc_lb_v1" -) - -// Server API for LoadBalancer service - -type loadBalancerServer interface { - // Bidirectional rpc to get a list of servers. - BalanceLoad(*loadBalancerBalanceLoadServer) error -} - -func registerLoadBalancerServer(s *grpc.Server, srv loadBalancerServer) { - s.RegisterService( - &grpc.ServiceDesc{ - ServiceName: "grpc.lb.v1.LoadBalancer", - HandlerType: (*loadBalancerServer)(nil), - Methods: []grpc.MethodDesc{}, - Streams: []grpc.StreamDesc{ - { - StreamName: "BalanceLoad", - Handler: balanceLoadHandler, - ServerStreams: true, - ClientStreams: true, - }, - }, - Metadata: "grpclb.proto", - }, srv) -} - -func balanceLoadHandler(srv interface{}, stream grpc.ServerStream) error { - return srv.(loadBalancerServer).BalanceLoad(&loadBalancerBalanceLoadServer{stream}) -} - -type loadBalancerBalanceLoadServer struct { - grpc.ServerStream -} - -func (x *loadBalancerBalanceLoadServer) Send(m *lbpb.LoadBalanceResponse) error { - return x.ServerStream.SendMsg(m) -} - -func (x *loadBalancerBalanceLoadServer) Recv() (*lbpb.LoadBalanceRequest, error) { - m := new(lbpb.LoadBalanceRequest) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} diff --git a/vendor/google.golang.org/grpc/grpclb/grpclb_test.go b/vendor/google.golang.org/grpc/grpclb/grpclb_test.go index bc37785..d83ea6b 100644 --- a/vendor/google.golang.org/grpc/grpclb/grpclb_test.go +++ b/vendor/google.golang.org/grpc/grpclb/grpclb_test.go @@ -1,38 +1,26 @@ /* * - * Copyright 2016, Google Inc. - * All rights reserved. + * Copyright 2016 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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 grpclb is currently used only for grpclb testing. -package grpclb +//go:generate protoc --go_out=plugins=:$GOPATH grpc_lb_v1/messages/messages.proto +//go:generate protoc --go_out=plugins=grpc:$GOPATH grpc_lb_v1/service/service.proto + +// Package grpclb_test is currently used only for grpclb testing. +package grpclb_test import ( "errors" @@ -48,104 +36,38 @@ import ( "github.com/golang/protobuf/proto" "golang.org/x/net/context" "google.golang.org/grpc" + "google.golang.org/grpc/balancer" "google.golang.org/grpc/codes" "google.golang.org/grpc/credentials" - lbpb "google.golang.org/grpc/grpclb/grpc_lb_v1" + lbmpb "google.golang.org/grpc/grpclb/grpc_lb_v1/messages" + lbspb "google.golang.org/grpc/grpclb/grpc_lb_v1/service" + _ "google.golang.org/grpc/grpclog/glogger" "google.golang.org/grpc/metadata" - "google.golang.org/grpc/naming" + "google.golang.org/grpc/peer" + "google.golang.org/grpc/resolver" + "google.golang.org/grpc/resolver/manual" + "google.golang.org/grpc/status" testpb "google.golang.org/grpc/test/grpc_testing" + "google.golang.org/grpc/test/leakcheck" + + _ "google.golang.org/grpc/grpclog/glogger" ) var ( - lbsn = "bar.com" - besn = "foo.com" - lbToken = "iamatoken" + lbServerName = "bar.com" + beServerName = "foo.com" + lbToken = "iamatoken" - // Resolver replaces 127.0.0.1 with fakeName in Next(). - // Dialer replaces fakeName with 127.0.0.1 when dialing. + // Resolver replaces localhost with fakeName in Next(). + // Dialer replaces fakeName with localhost when dialing. // This will test that custom dialer is passed from Dial to grpclb. fakeName = "fake.Name" ) -type testWatcher struct { - // the channel to receives name resolution updates - update chan *naming.Update - // the side channel to get to know how many updates in a batch - side chan int - // the channel to notifiy update injector that the update reading is done - readDone chan int -} - -func (w *testWatcher) Next() (updates []*naming.Update, err error) { - n, ok := <-w.side - if !ok { - return nil, fmt.Errorf("w.side is closed") - } - for i := 0; i < n; i++ { - u, ok := <-w.update - if !ok { - break - } - if u != nil { - // Resolver replaces 127.0.0.1 with fakeName in Next(). - // Custom dialer will replace fakeName with 127.0.0.1 when dialing. - u.Addr = strings.Replace(u.Addr, "127.0.0.1", fakeName, 1) - updates = append(updates, u) - } - } - w.readDone <- 0 - return -} - -func (w *testWatcher) Close() { -} - -// Inject naming resolution updates to the testWatcher. -func (w *testWatcher) inject(updates []*naming.Update) { - w.side <- len(updates) - for _, u := range updates { - w.update <- u - } - <-w.readDone -} - -type testNameResolver struct { - w *testWatcher - addrs []string -} - -func (r *testNameResolver) Resolve(target string) (naming.Watcher, error) { - r.w = &testWatcher{ - update: make(chan *naming.Update, len(r.addrs)), - side: make(chan int, 1), - readDone: make(chan int), - } - r.w.side <- len(r.addrs) - for _, addr := range r.addrs { - r.w.update <- &naming.Update{ - Op: naming.Add, - Addr: addr, - Metadata: &grpc.AddrMetadataGRPCLB{ - AddrType: grpc.GRPCLB, - ServerName: lbsn, - }, - } - } - go func() { - <-r.w.readDone - }() - return r.w, nil -} - -func (r *testNameResolver) inject(updates []*naming.Update) { - if r.w != nil { - r.w.inject(updates) - } -} - type serverNameCheckCreds struct { - expected string + mu sync.Mutex sn string + expected string } func (c *serverNameCheckCreds) ServerHandshake(rawConn net.Conn) (net.Conn, credentials.AuthInfo, error) { @@ -156,10 +78,22 @@ func (c *serverNameCheckCreds) ServerHandshake(rawConn net.Conn) (net.Conn, cred return rawConn, nil, nil } func (c *serverNameCheckCreds) ClientHandshake(ctx context.Context, addr string, rawConn net.Conn) (net.Conn, credentials.AuthInfo, error) { + c.mu.Lock() + defer c.mu.Unlock() b := make([]byte, len(c.expected)) - if _, err := rawConn.Read(b); err != nil { - fmt.Printf("Failed to read the server name from the server %v", err) - return nil, nil, err + errCh := make(chan error, 1) + go func() { + _, err := rawConn.Read(b) + errCh <- err + }() + select { + case err := <-errCh: + if err != nil { + fmt.Printf("Failed to read the server name from the server %v", err) + return nil, nil, err + } + case <-ctx.Done(): + return nil, nil, ctx.Err() } if c.expected != string(b) { fmt.Printf("Read the server name %s want %s", string(b), c.expected) @@ -168,59 +102,64 @@ func (c *serverNameCheckCreds) ClientHandshake(ctx context.Context, addr string, return rawConn, nil, nil } func (c *serverNameCheckCreds) Info() credentials.ProtocolInfo { + c.mu.Lock() + defer c.mu.Unlock() return credentials.ProtocolInfo{} } func (c *serverNameCheckCreds) Clone() credentials.TransportCredentials { + c.mu.Lock() + defer c.mu.Unlock() return &serverNameCheckCreds{ expected: c.expected, } } func (c *serverNameCheckCreds) OverrideServerName(s string) error { + c.mu.Lock() + defer c.mu.Unlock() c.expected = s return nil } -// fakeNameDialer replaces fakeName with 127.0.0.1 when dialing. +// fakeNameDialer replaces fakeName with localhost when dialing. // This will test that custom dialer is passed from Dial to grpclb. func fakeNameDialer(addr string, timeout time.Duration) (net.Conn, error) { - addr = strings.Replace(addr, fakeName, "127.0.0.1", 1) + addr = strings.Replace(addr, fakeName, "localhost", 1) return net.DialTimeout("tcp", addr, timeout) } type remoteBalancer struct { - sls []*lbpb.ServerList - intervals []time.Duration + sls chan *lbmpb.ServerList statsDura time.Duration done chan struct{} mu sync.Mutex - stats lbpb.ClientStats + stats lbmpb.ClientStats } -func newRemoteBalancer(sls []*lbpb.ServerList, intervals []time.Duration) *remoteBalancer { +func newRemoteBalancer(intervals []time.Duration) *remoteBalancer { return &remoteBalancer{ - sls: sls, - intervals: intervals, - done: make(chan struct{}), + sls: make(chan *lbmpb.ServerList, 1), + done: make(chan struct{}), } } func (b *remoteBalancer) stop() { + close(b.sls) close(b.done) } -func (b *remoteBalancer) BalanceLoad(stream *loadBalancerBalanceLoadServer) error { +func (b *remoteBalancer) BalanceLoad(stream lbspb.LoadBalancer_BalanceLoadServer) error { req, err := stream.Recv() if err != nil { return err } initReq := req.GetInitialRequest() - if initReq.Name != besn { - return grpc.Errorf(codes.InvalidArgument, "invalid service name: %v", initReq.Name) + if initReq.Name != beServerName { + return status.Errorf(codes.InvalidArgument, "invalid service name: %v", initReq.Name) } - resp := &lbpb.LoadBalanceResponse{ - LoadBalanceResponseType: &lbpb.LoadBalanceResponse_InitialResponse{ - InitialResponse: &lbpb.InitialLoadBalanceResponse{ - ClientStatsReportInterval: &lbpb.Duration{ + resp := &lbmpb.LoadBalanceResponse{ + LoadBalanceResponseType: &lbmpb.LoadBalanceResponse_InitialResponse{ + InitialResponse: &lbmpb.InitialLoadBalanceResponse{ + ClientStatsReportInterval: &lbmpb.Duration{ Seconds: int64(b.statsDura.Seconds()), Nanos: int32(b.statsDura.Nanoseconds() - int64(b.statsDura.Seconds())*1e9), }, @@ -233,7 +172,7 @@ func (b *remoteBalancer) BalanceLoad(stream *loadBalancerBalanceLoadServer) erro go func() { for { var ( - req *lbpb.LoadBalanceRequest + req *lbmpb.LoadBalanceRequest err error ) if req, err = stream.Recv(); err != nil { @@ -249,10 +188,9 @@ func (b *remoteBalancer) BalanceLoad(stream *loadBalancerBalanceLoadServer) erro b.mu.Unlock() } }() - for k, v := range b.sls { - time.Sleep(b.intervals[k]) - resp = &lbpb.LoadBalanceResponse{ - LoadBalanceResponseType: &lbpb.LoadBalanceResponse_ServerList{ + for v := range b.sls { + resp = &lbmpb.LoadBalanceResponse{ + LoadBalanceResponseType: &lbmpb.LoadBalanceResponse_ServerList{ ServerList: v, }, } @@ -267,7 +205,8 @@ func (b *remoteBalancer) BalanceLoad(stream *loadBalancerBalanceLoadServer) erro type testServer struct { testpb.TestServiceServer - addr string + addr string + fallback bool } const testmdkey = "testmd" @@ -275,10 +214,10 @@ const testmdkey = "testmd" func (s *testServer) EmptyCall(ctx context.Context, in *testpb.Empty) (*testpb.Empty, error) { md, ok := metadata.FromIncomingContext(ctx) if !ok { - return nil, grpc.Errorf(codes.Internal, "failed to receive metadata") + return nil, status.Error(codes.Internal, "failed to receive metadata") } - if md == nil || md["lb-token"][0] != lbToken { - return nil, grpc.Errorf(codes.Internal, "received unexpected metadata: %v", md) + if !s.fallback && (md == nil || md["lb-token"][0] != lbToken) { + return nil, status.Errorf(codes.Internal, "received unexpected metadata: %v", md) } grpc.SetTrailer(ctx, metadata.Pairs(testmdkey, s.addr)) return &testpb.Empty{}, nil @@ -288,13 +227,13 @@ func (s *testServer) FullDuplexCall(stream testpb.TestService_FullDuplexCallServ return nil } -func startBackends(sn string, lis ...net.Listener) (servers []*grpc.Server) { +func startBackends(sn string, fallback bool, lis ...net.Listener) (servers []*grpc.Server) { for _, l := range lis { creds := &serverNameCheckCreds{ sn: sn, } s := grpc.NewServer(grpc.Creds(creds)) - testpb.RegisterTestServiceServer(s, &testServer{addr: l.Addr().String()}) + testpb.RegisterTestServiceServer(s, &testServer{addr: l.Addr().String(), fallback: fallback}) servers = append(servers, s) go func(s *grpc.Server, l net.Listener) { s.Serve(l) @@ -333,14 +272,11 @@ func newLoadBalancer(numberOfBackends int) (tss *testServers, cleanup func(), er return } beIPs = append(beIPs, beLis.Addr().(*net.TCPAddr).IP) - - beAddr := strings.Split(beLis.Addr().String(), ":") - bePort, _ := strconv.Atoi(beAddr[1]) - bePorts = append(bePorts, bePort) + bePorts = append(bePorts, beLis.Addr().(*net.TCPAddr).Port) beListeners = append(beListeners, beLis) } - backends := startBackends(besn, beListeners...) + backends := startBackends(beServerName, false, beListeners...) // Start a load balancer. lbLis, err := net.Listen("tcp", "localhost:0") @@ -349,21 +285,21 @@ func newLoadBalancer(numberOfBackends int) (tss *testServers, cleanup func(), er return } lbCreds := &serverNameCheckCreds{ - sn: lbsn, + sn: lbServerName, } lb = grpc.NewServer(grpc.Creds(lbCreds)) if err != nil { err = fmt.Errorf("Failed to generate the port number %v", err) return } - ls = newRemoteBalancer(nil, nil) - registerLoadBalancerServer(lb, ls) + ls = newRemoteBalancer(nil) + lbspb.RegisterLoadBalancerServer(lb, ls) go func() { lb.Serve(lbLis) }() tss = &testServers{ - lbAddr: lbLis.Addr().String(), + lbAddr: fakeName + ":" + strconv.Itoa(lbLis.Addr().(*net.TCPAddr).Port), ls: ls, lb: lb, beIPs: beIPs, @@ -380,288 +316,372 @@ func newLoadBalancer(numberOfBackends int) (tss *testServers, cleanup func(), er } func TestGRPCLB(t *testing.T) { + defer leakcheck.Check(t) + + r, cleanup := manual.GenerateAndRegisterManualResolver() + defer cleanup() + tss, cleanup, err := newLoadBalancer(1) if err != nil { t.Fatalf("failed to create new load balancer: %v", err) } defer cleanup() - be := &lbpb.Server{ + be := &lbmpb.Server{ IpAddress: tss.beIPs[0], Port: int32(tss.bePorts[0]), LoadBalanceToken: lbToken, } - var bes []*lbpb.Server + var bes []*lbmpb.Server bes = append(bes, be) - sl := &lbpb.ServerList{ + sl := &lbmpb.ServerList{ Servers: bes, } - tss.ls.sls = []*lbpb.ServerList{sl} - tss.ls.intervals = []time.Duration{0} + tss.ls.sls <- sl creds := serverNameCheckCreds{ - expected: besn, + expected: beServerName, } ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() - cc, err := grpc.DialContext(ctx, besn, - grpc.WithBalancer(grpc.NewGRPCLBBalancer(&testNameResolver{addrs: []string{tss.lbAddr}})), - grpc.WithBlock(), grpc.WithTransportCredentials(&creds), grpc.WithDialer(fakeNameDialer)) + cc, err := grpc.DialContext(ctx, r.Scheme()+":///"+beServerName, + grpc.WithTransportCredentials(&creds), grpc.WithDialer(fakeNameDialer)) if err != nil { t.Fatalf("Failed to dial to the backend %v", err) } + defer cc.Close() testC := testpb.NewTestServiceClient(cc) - if _, err := testC.EmptyCall(context.Background(), &testpb.Empty{}); err != nil { + + r.NewAddress([]resolver.Address{{ + Addr: tss.lbAddr, + Type: resolver.GRPCLB, + ServerName: lbServerName, + }}) + + if _, err := testC.EmptyCall(context.Background(), &testpb.Empty{}, grpc.FailFast(false)); err != nil { t.Fatalf("%v.EmptyCall(_, _) = _, %v, want _, ", testC, err) } - cc.Close() } -func TestDropRequest(t *testing.T) { +// The remote balancer sends response with duplicates to grpclb client. +func TestGRPCLBWeighted(t *testing.T) { + defer leakcheck.Check(t) + + r, cleanup := manual.GenerateAndRegisterManualResolver() + defer cleanup() + tss, cleanup, err := newLoadBalancer(2) if err != nil { t.Fatalf("failed to create new load balancer: %v", err) } defer cleanup() - tss.ls.sls = []*lbpb.ServerList{{ - Servers: []*lbpb.Server{{ - IpAddress: tss.beIPs[0], - Port: int32(tss.bePorts[0]), - LoadBalanceToken: lbToken, - DropForLoadBalancing: true, - }, { - IpAddress: tss.beIPs[1], - Port: int32(tss.bePorts[1]), - LoadBalanceToken: lbToken, - DropForLoadBalancing: false, - }}, + + beServers := []*lbmpb.Server{{ + IpAddress: tss.beIPs[0], + Port: int32(tss.bePorts[0]), + LoadBalanceToken: lbToken, + }, { + IpAddress: tss.beIPs[1], + Port: int32(tss.bePorts[1]), + LoadBalanceToken: lbToken, }} - tss.ls.intervals = []time.Duration{0} + portsToIndex := make(map[int]int) + for i := range beServers { + portsToIndex[tss.bePorts[i]] = i + } + creds := serverNameCheckCreds{ - expected: besn, + expected: beServerName, } ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() - cc, err := grpc.DialContext(ctx, besn, - grpc.WithBalancer(grpc.NewGRPCLBBalancer(&testNameResolver{addrs: []string{tss.lbAddr}})), - grpc.WithBlock(), grpc.WithTransportCredentials(&creds), grpc.WithDialer(fakeNameDialer)) + cc, err := grpc.DialContext(ctx, r.Scheme()+":///"+beServerName, + grpc.WithTransportCredentials(&creds), grpc.WithDialer(fakeNameDialer)) if err != nil { t.Fatalf("Failed to dial to the backend %v", err) } + defer cc.Close() testC := testpb.NewTestServiceClient(cc) - // The 1st, non-fail-fast RPC should succeed. This ensures both server - // connections are made, because the first one has DropForLoadBalancing set to true. - if _, err := testC.EmptyCall(context.Background(), &testpb.Empty{}, grpc.FailFast(false)); err != nil { - t.Fatalf("%v.SayHello(_, _) = _, %v, want _, ", testC, err) - } - for i := 0; i < 3; i++ { - // Odd fail-fast RPCs should fail, because the 1st backend has DropForLoadBalancing - // set to true. - if _, err := testC.EmptyCall(context.Background(), &testpb.Empty{}); grpc.Code(err) != codes.Unavailable { - t.Fatalf("%v.EmptyCall(_, _) = _, %v, want _, %s", testC, err, codes.Unavailable) + + r.NewAddress([]resolver.Address{{ + Addr: tss.lbAddr, + Type: resolver.GRPCLB, + ServerName: lbServerName, + }}) + + sequences := []string{"00101", "00011"} + for _, seq := range sequences { + var ( + bes []*lbmpb.Server + p peer.Peer + result string + ) + for _, s := range seq { + bes = append(bes, beServers[s-'0']) + } + tss.ls.sls <- &lbmpb.ServerList{Servers: bes} + + for i := 0; i < 1000; i++ { + if _, err := testC.EmptyCall(context.Background(), &testpb.Empty{}, grpc.FailFast(false), grpc.Peer(&p)); err != nil { + t.Fatalf("%v.EmptyCall(_, _) = _, %v, want _, ", testC, err) + } + result += strconv.Itoa(portsToIndex[p.Addr.(*net.TCPAddr).Port]) } - // Even fail-fast RPCs should succeed since they choose the - // non-drop-request backend according to the round robin policy. - if _, err := testC.EmptyCall(context.Background(), &testpb.Empty{}); err != nil { - t.Fatalf("%v.EmptyCall(_, _) = _, %v, want _, ", testC, err) + // The generated result will be in format of "0010100101". + if !strings.Contains(result, strings.Repeat(seq, 2)) { + t.Errorf("got result sequence %q, want patten %q", result, seq) } } - cc.Close() } -func TestDropRequestFailedNonFailFast(t *testing.T) { - tss, cleanup, err := newLoadBalancer(1) - if err != nil { - t.Fatalf("failed to create new load balancer: %v", err) - } +func TestDropRequest(t *testing.T) { + defer leakcheck.Check(t) + + r, cleanup := manual.GenerateAndRegisterManualResolver() defer cleanup() - be := &lbpb.Server{ - IpAddress: tss.beIPs[0], - Port: int32(tss.bePorts[0]), - LoadBalanceToken: lbToken, - DropForLoadBalancing: true, - } - var bes []*lbpb.Server - bes = append(bes, be) - sl := &lbpb.ServerList{ - Servers: bes, - } - tss.ls.sls = []*lbpb.ServerList{sl} - tss.ls.intervals = []time.Duration{0} - creds := serverNameCheckCreds{ - expected: besn, - } - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() - cc, err := grpc.DialContext(ctx, besn, - grpc.WithBalancer(grpc.NewGRPCLBBalancer(&testNameResolver{addrs: []string{tss.lbAddr}})), - grpc.WithBlock(), grpc.WithTransportCredentials(&creds), grpc.WithDialer(fakeNameDialer)) - if err != nil { - t.Fatalf("Failed to dial to the backend %v", err) - } - testC := testpb.NewTestServiceClient(cc) - ctx, cancel = context.WithTimeout(context.Background(), 10*time.Millisecond) - defer cancel() - if _, err := testC.EmptyCall(ctx, &testpb.Empty{}, grpc.FailFast(false)); grpc.Code(err) != codes.DeadlineExceeded { - t.Fatalf("%v.EmptyCall(_, _) = _, %v, want _, %s", testC, err, codes.DeadlineExceeded) - } - cc.Close() -} -func TestServerExpiration(t *testing.T) { tss, cleanup, err := newLoadBalancer(1) if err != nil { t.Fatalf("failed to create new load balancer: %v", err) } defer cleanup() - be := &lbpb.Server{ - IpAddress: tss.beIPs[0], - Port: int32(tss.bePorts[0]), - LoadBalanceToken: lbToken, - } - var bes []*lbpb.Server - bes = append(bes, be) - exp := &lbpb.Duration{ - Seconds: 0, - Nanos: 100000000, // 100ms - } - var sls []*lbpb.ServerList - sl := &lbpb.ServerList{ - Servers: bes, - ExpirationInterval: exp, - } - sls = append(sls, sl) - sl = &lbpb.ServerList{ - Servers: bes, + tss.ls.sls <- &lbmpb.ServerList{ + Servers: []*lbmpb.Server{{ + IpAddress: tss.beIPs[0], + Port: int32(tss.bePorts[0]), + LoadBalanceToken: lbToken, + DropForLoadBalancing: false, + }, { + DropForLoadBalancing: true, + }}, } - sls = append(sls, sl) - var intervals []time.Duration - intervals = append(intervals, 0) - intervals = append(intervals, 500*time.Millisecond) - tss.ls.sls = sls - tss.ls.intervals = intervals creds := serverNameCheckCreds{ - expected: besn, + expected: beServerName, } ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() - cc, err := grpc.DialContext(ctx, besn, - grpc.WithBalancer(grpc.NewGRPCLBBalancer(&testNameResolver{addrs: []string{tss.lbAddr}})), - grpc.WithBlock(), grpc.WithTransportCredentials(&creds), grpc.WithDialer(fakeNameDialer)) + cc, err := grpc.DialContext(ctx, r.Scheme()+":///"+beServerName, + grpc.WithTransportCredentials(&creds), grpc.WithDialer(fakeNameDialer)) if err != nil { t.Fatalf("Failed to dial to the backend %v", err) } + defer cc.Close() testC := testpb.NewTestServiceClient(cc) - if _, err := testC.EmptyCall(context.Background(), &testpb.Empty{}); err != nil { - t.Fatalf("%v.EmptyCall(_, _) = _, %v, want _, ", testC, err) - } - // Sleep and wake up when the first server list gets expired. - time.Sleep(150 * time.Millisecond) - if _, err := testC.EmptyCall(context.Background(), &testpb.Empty{}); grpc.Code(err) != codes.Unavailable { - t.Fatalf("%v.EmptyCall(_, _) = _, %v, want _, %s", testC, err, codes.Unavailable) - } - // A non-failfast rpc should be succeeded after the second server list is received from - // the remote load balancer. + + r.NewAddress([]resolver.Address{{ + Addr: tss.lbAddr, + Type: resolver.GRPCLB, + ServerName: lbServerName, + }}) + + // The 1st, non-fail-fast RPC should succeed. This ensures both server + // connections are made, because the first one has DropForLoadBalancing set to true. if _, err := testC.EmptyCall(context.Background(), &testpb.Empty{}, grpc.FailFast(false)); err != nil { - t.Fatalf("%v.EmptyCall(_, _) = _, %v, want _, ", testC, err) + t.Fatalf("%v.SayHello(_, _) = _, %v, want _, ", testC, err) + } + for _, failfast := range []bool{true, false} { + for i := 0; i < 3; i++ { + // Even RPCs should fail, because the 2st backend has + // DropForLoadBalancing set to true. + if _, err := testC.EmptyCall(context.Background(), &testpb.Empty{}, grpc.FailFast(failfast)); status.Code(err) != codes.Unavailable { + t.Errorf("%v.EmptyCall(_, _) = _, %v, want _, %s", testC, err, codes.Unavailable) + } + // Odd RPCs should succeed since they choose the non-drop-request + // backend according to the round robin policy. + if _, err := testC.EmptyCall(context.Background(), &testpb.Empty{}, grpc.FailFast(failfast)); err != nil { + t.Errorf("%v.EmptyCall(_, _) = _, %v, want _, ", testC, err) + } + } } - cc.Close() } // When the balancer in use disconnects, grpclb should connect to the next address from resolved balancer address list. func TestBalancerDisconnects(t *testing.T) { + defer leakcheck.Check(t) + + r, cleanup := manual.GenerateAndRegisterManualResolver() + defer cleanup() + var ( - lbAddrs []string - lbs []*grpc.Server + tests []*testServers + lbs []*grpc.Server ) - for i := 0; i < 3; i++ { + for i := 0; i < 2; i++ { tss, cleanup, err := newLoadBalancer(1) if err != nil { t.Fatalf("failed to create new load balancer: %v", err) } defer cleanup() - be := &lbpb.Server{ + be := &lbmpb.Server{ IpAddress: tss.beIPs[0], Port: int32(tss.bePorts[0]), LoadBalanceToken: lbToken, } - var bes []*lbpb.Server + var bes []*lbmpb.Server bes = append(bes, be) - sl := &lbpb.ServerList{ + sl := &lbmpb.ServerList{ Servers: bes, } - tss.ls.sls = []*lbpb.ServerList{sl} - tss.ls.intervals = []time.Duration{0} + tss.ls.sls <- sl - lbAddrs = append(lbAddrs, tss.lbAddr) + tests = append(tests, tss) lbs = append(lbs, tss.lb) } creds := serverNameCheckCreds{ - expected: besn, + expected: beServerName, } ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() - resolver := &testNameResolver{ - addrs: lbAddrs[:2], - } - cc, err := grpc.DialContext(ctx, besn, - grpc.WithBalancer(grpc.NewGRPCLBBalancer(resolver)), - grpc.WithBlock(), grpc.WithTransportCredentials(&creds), grpc.WithDialer(fakeNameDialer)) + cc, err := grpc.DialContext(ctx, r.Scheme()+":///"+beServerName, + grpc.WithTransportCredentials(&creds), grpc.WithDialer(fakeNameDialer)) if err != nil { t.Fatalf("Failed to dial to the backend %v", err) } + defer cc.Close() testC := testpb.NewTestServiceClient(cc) - var previousTrailer string - trailer := metadata.MD{} - if _, err := testC.EmptyCall(context.Background(), &testpb.Empty{}, grpc.Trailer(&trailer)); err != nil { + + r.NewAddress([]resolver.Address{{ + Addr: tests[0].lbAddr, + Type: resolver.GRPCLB, + ServerName: lbServerName, + }, { + Addr: tests[1].lbAddr, + Type: resolver.GRPCLB, + ServerName: lbServerName, + }}) + + var p peer.Peer + if _, err := testC.EmptyCall(context.Background(), &testpb.Empty{}, grpc.FailFast(false), grpc.Peer(&p)); err != nil { t.Fatalf("%v.EmptyCall(_, _) = _, %v, want _, ", testC, err) - } else { - previousTrailer = trailer[testmdkey][0] } - // The initial resolver update contains lbs[0] and lbs[1]. - // When lbs[0] is stopped, lbs[1] should be used. + if p.Addr.(*net.TCPAddr).Port != tests[0].bePorts[0] { + t.Fatalf("got peer: %v, want peer port: %v", p.Addr, tests[0].bePorts[0]) + } + lbs[0].Stop() - for { - if _, err := testC.EmptyCall(context.Background(), &testpb.Empty{}, grpc.Trailer(&trailer)); err != nil { + // Stop balancer[0], balancer[1] should be used by grpclb. + // Check peer address to see if that happened. + for i := 0; i < 1000; i++ { + if _, err := testC.EmptyCall(context.Background(), &testpb.Empty{}, grpc.FailFast(false), grpc.Peer(&p)); err != nil { t.Fatalf("%v.EmptyCall(_, _) = _, %v, want _, ", testC, err) - } else if trailer[testmdkey][0] != previousTrailer { - // A new backend server should receive the request. - // The trailer contains the backend address, so the trailer should be different from the previous one. - previousTrailer = trailer[testmdkey][0] - break - } - time.Sleep(100 * time.Millisecond) - } - // Inject a update to add lbs[2] to resolved addresses. - resolver.inject([]*naming.Update{ - {Op: naming.Add, - Addr: lbAddrs[2], - Metadata: &grpc.AddrMetadataGRPCLB{ - AddrType: grpc.GRPCLB, - ServerName: lbsn, - }, - }, + } + if p.Addr.(*net.TCPAddr).Port == tests[1].bePorts[0] { + return + } + time.Sleep(time.Millisecond) + } + t.Fatalf("No RPC sent to second backend after 1 second") +} + +type customGRPCLBBuilder struct { + balancer.Builder + name string +} + +func (b *customGRPCLBBuilder) Name() string { + return b.name +} + +const grpclbCustomFallbackName = "grpclb_with_custom_fallback_timeout" + +func init() { + balancer.Register(&customGRPCLBBuilder{ + Builder: grpc.NewLBBuilderWithFallbackTimeout(100 * time.Millisecond), + name: grpclbCustomFallbackName, }) - // Stop lbs[1]. Now lbs[0] and lbs[1] are all stopped. lbs[2] should be used. - lbs[1].Stop() - for { - if _, err := testC.EmptyCall(context.Background(), &testpb.Empty{}, grpc.Trailer(&trailer)); err != nil { +} + +func TestFallback(t *testing.T) { + defer leakcheck.Check(t) + + r, cleanup := manual.GenerateAndRegisterManualResolver() + defer cleanup() + + tss, cleanup, err := newLoadBalancer(1) + if err != nil { + t.Fatalf("failed to create new load balancer: %v", err) + } + defer cleanup() + + // Start a standalone backend. + beLis, err := net.Listen("tcp", "localhost:0") + if err != nil { + t.Fatalf("Failed to listen %v", err) + } + defer beLis.Close() + standaloneBEs := startBackends(beServerName, true, beLis) + defer stopBackends(standaloneBEs) + + be := &lbmpb.Server{ + IpAddress: tss.beIPs[0], + Port: int32(tss.bePorts[0]), + LoadBalanceToken: lbToken, + } + var bes []*lbmpb.Server + bes = append(bes, be) + sl := &lbmpb.ServerList{ + Servers: bes, + } + tss.ls.sls <- sl + creds := serverNameCheckCreds{ + expected: beServerName, + } + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + cc, err := grpc.DialContext(ctx, r.Scheme()+":///"+beServerName, + grpc.WithBalancerName(grpclbCustomFallbackName), + grpc.WithTransportCredentials(&creds), grpc.WithDialer(fakeNameDialer)) + if err != nil { + t.Fatalf("Failed to dial to the backend %v", err) + } + defer cc.Close() + testC := testpb.NewTestServiceClient(cc) + + r.NewAddress([]resolver.Address{{ + Addr: "", + Type: resolver.GRPCLB, + ServerName: lbServerName, + }, { + Addr: beLis.Addr().String(), + Type: resolver.Backend, + ServerName: beServerName, + }}) + + var p peer.Peer + if _, err := testC.EmptyCall(context.Background(), &testpb.Empty{}, grpc.FailFast(false), grpc.Peer(&p)); err != nil { + t.Fatalf("%v.EmptyCall(_, _) = _, %v, want _, ", testC, err) + } + if p.Addr.String() != beLis.Addr().String() { + t.Fatalf("got peer: %v, want peer: %v", p.Addr, beLis.Addr()) + } + + r.NewAddress([]resolver.Address{{ + Addr: tss.lbAddr, + Type: resolver.GRPCLB, + ServerName: lbServerName, + }, { + Addr: beLis.Addr().String(), + Type: resolver.Backend, + ServerName: beServerName, + }}) + + for i := 0; i < 1000; i++ { + if _, err := testC.EmptyCall(context.Background(), &testpb.Empty{}, grpc.FailFast(false), grpc.Peer(&p)); err != nil { t.Fatalf("%v.EmptyCall(_, _) = _, %v, want _, ", testC, err) - } else if trailer[testmdkey][0] != previousTrailer { - // A new backend server should receive the request. - // The trailer contains the backend address, so the trailer should be different from the previous one. - break } - time.Sleep(100 * time.Millisecond) + if p.Addr.(*net.TCPAddr).Port == tss.bePorts[0] { + return + } + time.Sleep(time.Millisecond) } - cc.Close() + t.Fatalf("No RPC sent to backend behind remote balancer after 1 second") } type failPreRPCCred struct{} func (failPreRPCCred) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) { - if strings.Contains(uri[0], "failtosend") { + if strings.Contains(uri[0], failtosendURI) { return nil, fmt.Errorf("rpc should fail to send") } return nil, nil @@ -671,43 +691,53 @@ func (failPreRPCCred) RequireTransportSecurity() bool { return false } -func checkStats(stats *lbpb.ClientStats, expected *lbpb.ClientStats) error { +func checkStats(stats *lbmpb.ClientStats, expected *lbmpb.ClientStats) error { if !proto.Equal(stats, expected) { return fmt.Errorf("stats not equal: got %+v, want %+v", stats, expected) } return nil } -func runAndGetStats(t *testing.T, dropForLoadBalancing, dropForRateLimiting bool, runRPCs func(*grpc.ClientConn)) lbpb.ClientStats { - tss, cleanup, err := newLoadBalancer(3) +func runAndGetStats(t *testing.T, dropForLoadBalancing, dropForRateLimiting bool, runRPCs func(*grpc.ClientConn)) lbmpb.ClientStats { + defer leakcheck.Check(t) + + r, cleanup := manual.GenerateAndRegisterManualResolver() + defer cleanup() + + tss, cleanup, err := newLoadBalancer(1) if err != nil { t.Fatalf("failed to create new load balancer: %v", err) } defer cleanup() - tss.ls.sls = []*lbpb.ServerList{{ - Servers: []*lbpb.Server{{ - IpAddress: tss.beIPs[2], - Port: int32(tss.bePorts[2]), + tss.ls.sls <- &lbmpb.ServerList{ + Servers: []*lbmpb.Server{{ + IpAddress: tss.beIPs[0], + Port: int32(tss.bePorts[0]), LoadBalanceToken: lbToken, DropForLoadBalancing: dropForLoadBalancing, DropForRateLimiting: dropForRateLimiting, }}, - }} - tss.ls.intervals = []time.Duration{0} + } tss.ls.statsDura = 100 * time.Millisecond - creds := serverNameCheckCreds{expected: besn} + creds := serverNameCheckCreds{expected: beServerName} ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() - cc, err := grpc.DialContext(ctx, besn, - grpc.WithBalancer(grpc.NewGRPCLBBalancer(&testNameResolver{addrs: []string{tss.lbAddr}})), - grpc.WithTransportCredentials(&creds), grpc.WithPerRPCCredentials(failPreRPCCred{}), - grpc.WithBlock(), grpc.WithDialer(fakeNameDialer)) + cc, err := grpc.DialContext(ctx, r.Scheme()+":///"+beServerName, + grpc.WithTransportCredentials(&creds), + grpc.WithPerRPCCredentials(failPreRPCCred{}), + grpc.WithDialer(fakeNameDialer)) if err != nil { t.Fatalf("Failed to dial to the backend %v", err) } defer cc.Close() + r.NewAddress([]resolver.Address{{ + Addr: tss.lbAddr, + Type: resolver.GRPCLB, + ServerName: lbServerName, + }}) + runRPCs(cc) time.Sleep(1 * time.Second) tss.ls.mu.Lock() @@ -716,9 +746,14 @@ func runAndGetStats(t *testing.T, dropForLoadBalancing, dropForRateLimiting bool return stats } -const countRPC = 40 +const ( + countRPC = 40 + failtosendURI = "failtosend" + dropErrDesc = "request dropped by grpclb" +) func TestGRPCLBStatsUnarySuccess(t *testing.T) { + defer leakcheck.Check(t) stats := runAndGetStats(t, false, false, func(cc *grpc.ClientConn) { testC := testpb.NewTestServiceClient(cc) // The first non-failfast RPC succeeds, all connections are up. @@ -730,7 +765,7 @@ func TestGRPCLBStatsUnarySuccess(t *testing.T) { } }) - if err := checkStats(&stats, &lbpb.ClientStats{ + if err := checkStats(&stats, &lbmpb.ClientStats{ NumCallsStarted: int64(countRPC), NumCallsFinished: int64(countRPC), NumCallsFinishedKnownReceived: int64(countRPC), @@ -740,13 +775,14 @@ func TestGRPCLBStatsUnarySuccess(t *testing.T) { } func TestGRPCLBStatsUnaryDropLoadBalancing(t *testing.T) { + defer leakcheck.Check(t) c := 0 stats := runAndGetStats(t, true, false, func(cc *grpc.ClientConn) { testC := testpb.NewTestServiceClient(cc) for { c++ if _, err := testC.EmptyCall(context.Background(), &testpb.Empty{}); err != nil { - if strings.Contains(err.Error(), "drops requests") { + if strings.Contains(err.Error(), dropErrDesc) { break } } @@ -756,7 +792,7 @@ func TestGRPCLBStatsUnaryDropLoadBalancing(t *testing.T) { } }) - if err := checkStats(&stats, &lbpb.ClientStats{ + if err := checkStats(&stats, &lbmpb.ClientStats{ NumCallsStarted: int64(countRPC + c), NumCallsFinished: int64(countRPC + c), NumCallsFinishedWithDropForLoadBalancing: int64(countRPC + 1), @@ -767,13 +803,14 @@ func TestGRPCLBStatsUnaryDropLoadBalancing(t *testing.T) { } func TestGRPCLBStatsUnaryDropRateLimiting(t *testing.T) { + defer leakcheck.Check(t) c := 0 stats := runAndGetStats(t, false, true, func(cc *grpc.ClientConn) { testC := testpb.NewTestServiceClient(cc) for { c++ if _, err := testC.EmptyCall(context.Background(), &testpb.Empty{}); err != nil { - if strings.Contains(err.Error(), "drops requests") { + if strings.Contains(err.Error(), dropErrDesc) { break } } @@ -783,7 +820,7 @@ func TestGRPCLBStatsUnaryDropRateLimiting(t *testing.T) { } }) - if err := checkStats(&stats, &lbpb.ClientStats{ + if err := checkStats(&stats, &lbmpb.ClientStats{ NumCallsStarted: int64(countRPC + c), NumCallsFinished: int64(countRPC + c), NumCallsFinishedWithDropForRateLimiting: int64(countRPC + 1), @@ -794,6 +831,7 @@ func TestGRPCLBStatsUnaryDropRateLimiting(t *testing.T) { } func TestGRPCLBStatsUnaryFailedToSend(t *testing.T) { + defer leakcheck.Check(t) stats := runAndGetStats(t, false, false, func(cc *grpc.ClientConn) { testC := testpb.NewTestServiceClient(cc) // The first non-failfast RPC succeeds, all connections are up. @@ -801,11 +839,11 @@ func TestGRPCLBStatsUnaryFailedToSend(t *testing.T) { t.Fatalf("%v.EmptyCall(_, _) = _, %v, want _, ", testC, err) } for i := 0; i < countRPC-1; i++ { - grpc.Invoke(context.Background(), "failtosend", &testpb.Empty{}, nil, cc) + grpc.Invoke(context.Background(), failtosendURI, &testpb.Empty{}, nil, cc) } }) - if err := checkStats(&stats, &lbpb.ClientStats{ + if err := checkStats(&stats, &lbmpb.ClientStats{ NumCallsStarted: int64(countRPC), NumCallsFinished: int64(countRPC), NumCallsFinishedWithClientFailedToSend: int64(countRPC - 1), @@ -816,6 +854,7 @@ func TestGRPCLBStatsUnaryFailedToSend(t *testing.T) { } func TestGRPCLBStatsStreamingSuccess(t *testing.T) { + defer leakcheck.Check(t) stats := runAndGetStats(t, false, false, func(cc *grpc.ClientConn) { testC := testpb.NewTestServiceClient(cc) // The first non-failfast RPC succeeds, all connections are up. @@ -841,7 +880,7 @@ func TestGRPCLBStatsStreamingSuccess(t *testing.T) { } }) - if err := checkStats(&stats, &lbpb.ClientStats{ + if err := checkStats(&stats, &lbmpb.ClientStats{ NumCallsStarted: int64(countRPC), NumCallsFinished: int64(countRPC), NumCallsFinishedKnownReceived: int64(countRPC), @@ -851,13 +890,14 @@ func TestGRPCLBStatsStreamingSuccess(t *testing.T) { } func TestGRPCLBStatsStreamingDropLoadBalancing(t *testing.T) { + defer leakcheck.Check(t) c := 0 stats := runAndGetStats(t, true, false, func(cc *grpc.ClientConn) { testC := testpb.NewTestServiceClient(cc) for { c++ if _, err := testC.EmptyCall(context.Background(), &testpb.Empty{}); err != nil { - if strings.Contains(err.Error(), "drops requests") { + if strings.Contains(err.Error(), dropErrDesc) { break } } @@ -867,7 +907,7 @@ func TestGRPCLBStatsStreamingDropLoadBalancing(t *testing.T) { } }) - if err := checkStats(&stats, &lbpb.ClientStats{ + if err := checkStats(&stats, &lbmpb.ClientStats{ NumCallsStarted: int64(countRPC + c), NumCallsFinished: int64(countRPC + c), NumCallsFinishedWithDropForLoadBalancing: int64(countRPC + 1), @@ -878,13 +918,14 @@ func TestGRPCLBStatsStreamingDropLoadBalancing(t *testing.T) { } func TestGRPCLBStatsStreamingDropRateLimiting(t *testing.T) { + defer leakcheck.Check(t) c := 0 stats := runAndGetStats(t, false, true, func(cc *grpc.ClientConn) { testC := testpb.NewTestServiceClient(cc) for { c++ if _, err := testC.EmptyCall(context.Background(), &testpb.Empty{}); err != nil { - if strings.Contains(err.Error(), "drops requests") { + if strings.Contains(err.Error(), dropErrDesc) { break } } @@ -894,7 +935,7 @@ func TestGRPCLBStatsStreamingDropRateLimiting(t *testing.T) { } }) - if err := checkStats(&stats, &lbpb.ClientStats{ + if err := checkStats(&stats, &lbmpb.ClientStats{ NumCallsStarted: int64(countRPC + c), NumCallsFinished: int64(countRPC + c), NumCallsFinishedWithDropForRateLimiting: int64(countRPC + 1), @@ -905,6 +946,7 @@ func TestGRPCLBStatsStreamingDropRateLimiting(t *testing.T) { } func TestGRPCLBStatsStreamingFailedToSend(t *testing.T) { + defer leakcheck.Check(t) stats := runAndGetStats(t, false, false, func(cc *grpc.ClientConn) { testC := testpb.NewTestServiceClient(cc) // The first non-failfast RPC succeeds, all connections are up. @@ -918,11 +960,11 @@ func TestGRPCLBStatsStreamingFailedToSend(t *testing.T) { } } for i := 0; i < countRPC-1; i++ { - grpc.NewClientStream(context.Background(), &grpc.StreamDesc{}, cc, "failtosend") + grpc.NewClientStream(context.Background(), &grpc.StreamDesc{}, cc, failtosendURI) } }) - if err := checkStats(&stats, &lbpb.ClientStats{ + if err := checkStats(&stats, &lbmpb.ClientStats{ NumCallsStarted: int64(countRPC), NumCallsFinished: int64(countRPC), NumCallsFinishedWithClientFailedToSend: int64(countRPC - 1), diff --git a/vendor/google.golang.org/grpc/grpclb_picker.go b/vendor/google.golang.org/grpc/grpclb_picker.go new file mode 100644 index 0000000..872c7cc --- /dev/null +++ b/vendor/google.golang.org/grpc/grpclb_picker.go @@ -0,0 +1,159 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package grpc + +import ( + "sync" + "sync/atomic" + + "golang.org/x/net/context" + "google.golang.org/grpc/balancer" + "google.golang.org/grpc/codes" + lbpb "google.golang.org/grpc/grpclb/grpc_lb_v1/messages" + "google.golang.org/grpc/status" +) + +type rpcStats struct { + NumCallsStarted int64 + NumCallsFinished int64 + NumCallsFinishedWithDropForRateLimiting int64 + NumCallsFinishedWithDropForLoadBalancing int64 + NumCallsFinishedWithClientFailedToSend int64 + NumCallsFinishedKnownReceived int64 +} + +// toClientStats converts rpcStats to lbpb.ClientStats, and clears rpcStats. +func (s *rpcStats) toClientStats() *lbpb.ClientStats { + stats := &lbpb.ClientStats{ + NumCallsStarted: atomic.SwapInt64(&s.NumCallsStarted, 0), + NumCallsFinished: atomic.SwapInt64(&s.NumCallsFinished, 0), + NumCallsFinishedWithDropForRateLimiting: atomic.SwapInt64(&s.NumCallsFinishedWithDropForRateLimiting, 0), + NumCallsFinishedWithDropForLoadBalancing: atomic.SwapInt64(&s.NumCallsFinishedWithDropForLoadBalancing, 0), + NumCallsFinishedWithClientFailedToSend: atomic.SwapInt64(&s.NumCallsFinishedWithClientFailedToSend, 0), + NumCallsFinishedKnownReceived: atomic.SwapInt64(&s.NumCallsFinishedKnownReceived, 0), + } + return stats +} + +func (s *rpcStats) dropForRateLimiting() { + atomic.AddInt64(&s.NumCallsStarted, 1) + atomic.AddInt64(&s.NumCallsFinishedWithDropForRateLimiting, 1) + atomic.AddInt64(&s.NumCallsFinished, 1) +} + +func (s *rpcStats) dropForLoadBalancing() { + atomic.AddInt64(&s.NumCallsStarted, 1) + atomic.AddInt64(&s.NumCallsFinishedWithDropForLoadBalancing, 1) + atomic.AddInt64(&s.NumCallsFinished, 1) +} + +func (s *rpcStats) failedToSend() { + atomic.AddInt64(&s.NumCallsStarted, 1) + atomic.AddInt64(&s.NumCallsFinishedWithClientFailedToSend, 1) + atomic.AddInt64(&s.NumCallsFinished, 1) +} + +func (s *rpcStats) knownReceived() { + atomic.AddInt64(&s.NumCallsStarted, 1) + atomic.AddInt64(&s.NumCallsFinishedKnownReceived, 1) + atomic.AddInt64(&s.NumCallsFinished, 1) +} + +type errPicker struct { + // Pick always returns this err. + err error +} + +func (p *errPicker) Pick(ctx context.Context, opts balancer.PickOptions) (balancer.SubConn, func(balancer.DoneInfo), error) { + return nil, nil, p.err +} + +// rrPicker does roundrobin on subConns. It's typically used when there's no +// response from remote balancer, and grpclb falls back to the resolved +// backends. +// +// It guaranteed that len(subConns) > 0. +type rrPicker struct { + mu sync.Mutex + subConns []balancer.SubConn // The subConns that were READY when taking the snapshot. + subConnsNext int +} + +func (p *rrPicker) Pick(ctx context.Context, opts balancer.PickOptions) (balancer.SubConn, func(balancer.DoneInfo), error) { + p.mu.Lock() + defer p.mu.Unlock() + sc := p.subConns[p.subConnsNext] + p.subConnsNext = (p.subConnsNext + 1) % len(p.subConns) + return sc, nil, nil +} + +// lbPicker does two layers of picks: +// +// First layer: roundrobin on all servers in serverList, including drops and backends. +// - If it picks a drop, the RPC will fail as being dropped. +// - If it picks a backend, do a second layer pick to pick the real backend. +// +// Second layer: roundrobin on all READY backends. +// +// It's guaranteed that len(serverList) > 0. +type lbPicker struct { + mu sync.Mutex + serverList []*lbpb.Server + serverListNext int + subConns []balancer.SubConn // The subConns that were READY when taking the snapshot. + subConnsNext int + + stats *rpcStats +} + +func (p *lbPicker) Pick(ctx context.Context, opts balancer.PickOptions) (balancer.SubConn, func(balancer.DoneInfo), error) { + p.mu.Lock() + defer p.mu.Unlock() + + // Layer one roundrobin on serverList. + s := p.serverList[p.serverListNext] + p.serverListNext = (p.serverListNext + 1) % len(p.serverList) + + // If it's a drop, return an error and fail the RPC. + if s.DropForRateLimiting { + p.stats.dropForRateLimiting() + return nil, nil, status.Errorf(codes.Unavailable, "request dropped by grpclb") + } + if s.DropForLoadBalancing { + p.stats.dropForLoadBalancing() + return nil, nil, status.Errorf(codes.Unavailable, "request dropped by grpclb") + } + + // If not a drop but there's no ready subConns. + if len(p.subConns) <= 0 { + return nil, nil, balancer.ErrNoSubConnAvailable + } + + // Return the next ready subConn in the list, also collect rpc stats. + sc := p.subConns[p.subConnsNext] + p.subConnsNext = (p.subConnsNext + 1) % len(p.subConns) + done := func(info balancer.DoneInfo) { + if !info.BytesSent { + p.stats.failedToSend() + } else if info.BytesReceived { + p.stats.knownReceived() + } + } + return sc, done, nil +} diff --git a/vendor/google.golang.org/grpc/grpclb_remote_balancer.go b/vendor/google.golang.org/grpc/grpclb_remote_balancer.go new file mode 100644 index 0000000..1b580df --- /dev/null +++ b/vendor/google.golang.org/grpc/grpclb_remote_balancer.go @@ -0,0 +1,254 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package grpc + +import ( + "fmt" + "net" + "reflect" + "time" + + "golang.org/x/net/context" + "google.golang.org/grpc/balancer" + "google.golang.org/grpc/connectivity" + lbpb "google.golang.org/grpc/grpclb/grpc_lb_v1/messages" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/resolver" +) + +// processServerList updates balaner's internal state, create/remove SubConns +// and regenerates picker using the received serverList. +func (lb *lbBalancer) processServerList(l *lbpb.ServerList) { + grpclog.Infof("lbBalancer: processing server list: %+v", l) + lb.mu.Lock() + defer lb.mu.Unlock() + + // Set serverListReceived to true so fallback will not take effect if it has + // not hit timeout. + lb.serverListReceived = true + + // If the new server list == old server list, do nothing. + if reflect.DeepEqual(lb.fullServerList, l.Servers) { + grpclog.Infof("lbBalancer: new serverlist same as the previous one, ignoring") + return + } + lb.fullServerList = l.Servers + + var backendAddrs []resolver.Address + for _, s := range l.Servers { + if s.DropForLoadBalancing || s.DropForRateLimiting { + continue + } + + md := metadata.Pairs(lbTokeyKey, s.LoadBalanceToken) + ip := net.IP(s.IpAddress) + ipStr := ip.String() + if ip.To4() == nil { + // Add square brackets to ipv6 addresses, otherwise net.Dial() and + // net.SplitHostPort() will return too many colons error. + ipStr = fmt.Sprintf("[%s]", ipStr) + } + addr := resolver.Address{ + Addr: fmt.Sprintf("%s:%d", ipStr, s.Port), + Metadata: &md, + } + + backendAddrs = append(backendAddrs, addr) + } + + // Call refreshSubConns to create/remove SubConns. + backendsUpdated := lb.refreshSubConns(backendAddrs) + // If no backend was updated, no SubConn will be newed/removed. But since + // the full serverList was different, there might be updates in drops or + // pick weights(different number of duplicates). We need to update picker + // with the fulllist. + if !backendsUpdated { + lb.regeneratePicker() + lb.cc.UpdateBalancerState(lb.state, lb.picker) + } +} + +// refreshSubConns creates/removes SubConns with backendAddrs. It returns a bool +// indicating whether the backendAddrs are different from the cached +// backendAddrs (whether any SubConn was newed/removed). +// Caller must hold lb.mu. +func (lb *lbBalancer) refreshSubConns(backendAddrs []resolver.Address) bool { + lb.backendAddrs = nil + var backendsUpdated bool + // addrsSet is the set converted from backendAddrs, it's used to quick + // lookup for an address. + addrsSet := make(map[resolver.Address]struct{}) + // Create new SubConns. + for _, addr := range backendAddrs { + addrWithoutMD := addr + addrWithoutMD.Metadata = nil + addrsSet[addrWithoutMD] = struct{}{} + lb.backendAddrs = append(lb.backendAddrs, addrWithoutMD) + + if _, ok := lb.subConns[addrWithoutMD]; !ok { + backendsUpdated = true + + // Use addrWithMD to create the SubConn. + sc, err := lb.cc.NewSubConn([]resolver.Address{addr}, balancer.NewSubConnOptions{}) + if err != nil { + grpclog.Warningf("roundrobinBalancer: failed to create new SubConn: %v", err) + continue + } + lb.subConns[addrWithoutMD] = sc // Use the addr without MD as key for the map. + lb.scStates[sc] = connectivity.Idle + sc.Connect() + } + } + + for a, sc := range lb.subConns { + // a was removed by resolver. + if _, ok := addrsSet[a]; !ok { + backendsUpdated = true + + lb.cc.RemoveSubConn(sc) + delete(lb.subConns, a) + // Keep the state of this sc in b.scStates until sc's state becomes Shutdown. + // The entry will be deleted in HandleSubConnStateChange. + } + } + + return backendsUpdated +} + +func (lb *lbBalancer) readServerList(s *balanceLoadClientStream) error { + for { + reply, err := s.Recv() + if err != nil { + return fmt.Errorf("grpclb: failed to recv server list: %v", err) + } + if serverList := reply.GetServerList(); serverList != nil { + lb.processServerList(serverList) + } + } +} + +func (lb *lbBalancer) sendLoadReport(s *balanceLoadClientStream, interval time.Duration) { + ticker := time.NewTicker(interval) + defer ticker.Stop() + for { + select { + case <-ticker.C: + case <-s.Context().Done(): + return + } + stats := lb.clientStats.toClientStats() + t := time.Now() + stats.Timestamp = &lbpb.Timestamp{ + Seconds: t.Unix(), + Nanos: int32(t.Nanosecond()), + } + if err := s.Send(&lbpb.LoadBalanceRequest{ + LoadBalanceRequestType: &lbpb.LoadBalanceRequest_ClientStats{ + ClientStats: stats, + }, + }); err != nil { + return + } + } +} +func (lb *lbBalancer) callRemoteBalancer() error { + lbClient := &loadBalancerClient{cc: lb.ccRemoteLB} + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + stream, err := lbClient.BalanceLoad(ctx, FailFast(false)) + if err != nil { + return fmt.Errorf("grpclb: failed to perform RPC to the remote balancer %v", err) + } + + // grpclb handshake on the stream. + initReq := &lbpb.LoadBalanceRequest{ + LoadBalanceRequestType: &lbpb.LoadBalanceRequest_InitialRequest{ + InitialRequest: &lbpb.InitialLoadBalanceRequest{ + Name: lb.target, + }, + }, + } + if err := stream.Send(initReq); err != nil { + return fmt.Errorf("grpclb: failed to send init request: %v", err) + } + reply, err := stream.Recv() + if err != nil { + return fmt.Errorf("grpclb: failed to recv init response: %v", err) + } + initResp := reply.GetInitialResponse() + if initResp == nil { + return fmt.Errorf("grpclb: reply from remote balancer did not include initial response") + } + if initResp.LoadBalancerDelegate != "" { + return fmt.Errorf("grpclb: Delegation is not supported") + } + + go func() { + if d := convertDuration(initResp.ClientStatsReportInterval); d > 0 { + lb.sendLoadReport(stream, d) + } + }() + return lb.readServerList(stream) +} + +func (lb *lbBalancer) watchRemoteBalancer() { + for { + err := lb.callRemoteBalancer() + select { + case <-lb.doneCh: + return + default: + if err != nil { + grpclog.Error(err) + } + } + + } +} + +func (lb *lbBalancer) dialRemoteLB(remoteLBName string) { + var dopts []DialOption + if creds := lb.opt.DialCreds; creds != nil { + if err := creds.OverrideServerName(remoteLBName); err == nil { + dopts = append(dopts, WithTransportCredentials(creds)) + } else { + grpclog.Warningf("grpclb: failed to override the server name in the credentials: %v, using Insecure", err) + dopts = append(dopts, WithInsecure()) + } + } else { + dopts = append(dopts, WithInsecure()) + } + if lb.opt.Dialer != nil { + // WithDialer takes a different type of function, so we instead use a + // special DialOption here. + dopts = append(dopts, withContextDialer(lb.opt.Dialer)) + } + // Explicitly set pickfirst as the balancer. + dopts = append(dopts, WithBalancerName(PickFirstBalancerName)) + dopts = append(dopts, withResolverBuilder(lb.manualResolver)) + // Dial using manualResolver.Scheme, which is a random scheme generated + // when init grpclb. The target name is not important. + cc, err := Dial("grpclb:///grpclb.server", dopts...) + if err != nil { + grpclog.Fatalf("failed to dial: %v", err) + } + lb.ccRemoteLB = cc + go lb.watchRemoteBalancer() +} diff --git a/vendor/google.golang.org/grpc/grpclb_util.go b/vendor/google.golang.org/grpc/grpclb_util.go new file mode 100644 index 0000000..93ab2db --- /dev/null +++ b/vendor/google.golang.org/grpc/grpclb_util.go @@ -0,0 +1,90 @@ +/* + * + * Copyright 2016 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package grpc + +import ( + "google.golang.org/grpc/balancer" + "google.golang.org/grpc/resolver" +) + +// The parent ClientConn should re-resolve when grpclb loses connection to the +// remote balancer. When the ClientConn inside grpclb gets a TransientFailure, +// it calls lbManualResolver.ResolveNow(), which calls parent ClientConn's +// ResolveNow, and eventually results in re-resolve happening in parent +// ClientConn's resolver (DNS for example). +// +// parent +// ClientConn +// +-----------------------------------------------------------------+ +// | parent +---------------------------------+ | +// | DNS ClientConn | grpclb | | +// | resolver balancerWrapper | | | +// | + + | grpclb grpclb | | +// | | | | ManualResolver ClientConn | | +// | | | | + + | | +// | | | | | | Transient | | +// | | | | | | Failure | | +// | | | | | <--------- | | | +// | | | <--------------- | ResolveNow | | | +// | | <--------- | ResolveNow | | | | | +// | | ResolveNow | | | | | | +// | | | | | | | | +// | + + | + + | | +// | +---------------------------------+ | +// +-----------------------------------------------------------------+ + +// lbManualResolver is used by the ClientConn inside grpclb. It's a manual +// resolver with a special ResolveNow() function. +// +// When ResolveNow() is called, it calls ResolveNow() on the parent ClientConn, +// so when grpclb client lose contact with remote balancers, the parent +// ClientConn's resolver will re-resolve. +type lbManualResolver struct { + scheme string + ccr resolver.ClientConn + + ccb balancer.ClientConn +} + +func (r *lbManualResolver) Build(_ resolver.Target, cc resolver.ClientConn, _ resolver.BuildOption) (resolver.Resolver, error) { + r.ccr = cc + return r, nil +} + +func (r *lbManualResolver) Scheme() string { + return r.scheme +} + +// ResolveNow calls resolveNow on the parent ClientConn. +func (r *lbManualResolver) ResolveNow(o resolver.ResolveNowOption) { + r.ccb.ResolveNow(o) +} + +// Close is a noop for Resolver. +func (*lbManualResolver) Close() {} + +// NewAddress calls cc.NewAddress. +func (r *lbManualResolver) NewAddress(addrs []resolver.Address) { + r.ccr.NewAddress(addrs) +} + +// NewServiceConfig calls cc.NewServiceConfig. +func (r *lbManualResolver) NewServiceConfig(sc string) { + r.ccr.NewServiceConfig(sc) +} diff --git a/vendor/google.golang.org/grpc/grpclog/glogger/glogger.go b/vendor/google.golang.org/grpc/grpclog/glogger/glogger.go index 43b886c..e5498f8 100644 --- a/vendor/google.golang.org/grpc/grpclog/glogger/glogger.go +++ b/vendor/google.golang.org/grpc/grpclog/glogger/glogger.go @@ -1,39 +1,23 @@ /* * - * Copyright 2015, Google Inc. - * All rights reserved. + * Copyright 2015 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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 glogger defines glog-based logging for grpc. -*/ +// Package glogger defines glog-based logging for grpc. +// Importing this package will install glog as the logger used by grpclog. package glogger import ( @@ -44,31 +28,59 @@ import ( ) func init() { - grpclog.SetLogger(&glogger{}) + grpclog.SetLoggerV2(&glogger{}) } type glogger struct{} -func (g *glogger) Fatal(args ...interface{}) { - glog.FatalDepth(2, args...) +func (g *glogger) Info(args ...interface{}) { + glog.InfoDepth(2, args...) } -func (g *glogger) Fatalf(format string, args ...interface{}) { - glog.FatalDepth(2, fmt.Sprintf(format, args...)) +func (g *glogger) Infoln(args ...interface{}) { + glog.InfoDepth(2, fmt.Sprintln(args...)) } -func (g *glogger) Fatalln(args ...interface{}) { - glog.FatalDepth(2, fmt.Sprintln(args...)) +func (g *glogger) Infof(format string, args ...interface{}) { + glog.InfoDepth(2, fmt.Sprintf(format, args...)) } -func (g *glogger) Print(args ...interface{}) { - glog.InfoDepth(2, args...) +func (g *glogger) Warning(args ...interface{}) { + glog.WarningDepth(2, args...) } -func (g *glogger) Printf(format string, args ...interface{}) { - glog.InfoDepth(2, fmt.Sprintf(format, args...)) +func (g *glogger) Warningln(args ...interface{}) { + glog.WarningDepth(2, fmt.Sprintln(args...)) } -func (g *glogger) Println(args ...interface{}) { - glog.InfoDepth(2, fmt.Sprintln(args...)) +func (g *glogger) Warningf(format string, args ...interface{}) { + glog.WarningDepth(2, fmt.Sprintf(format, args...)) +} + +func (g *glogger) Error(args ...interface{}) { + glog.ErrorDepth(2, args...) +} + +func (g *glogger) Errorln(args ...interface{}) { + glog.ErrorDepth(2, fmt.Sprintln(args...)) +} + +func (g *glogger) Errorf(format string, args ...interface{}) { + glog.ErrorDepth(2, fmt.Sprintf(format, args...)) +} + +func (g *glogger) Fatal(args ...interface{}) { + glog.FatalDepth(2, args...) +} + +func (g *glogger) Fatalln(args ...interface{}) { + glog.FatalDepth(2, fmt.Sprintln(args...)) +} + +func (g *glogger) Fatalf(format string, args ...interface{}) { + glog.FatalDepth(2, fmt.Sprintf(format, args...)) +} + +func (g *glogger) V(l int) bool { + return bool(glog.V(glog.Level(l))) } diff --git a/vendor/google.golang.org/grpc/grpclog/grpclog.go b/vendor/google.golang.org/grpc/grpclog/grpclog.go new file mode 100644 index 0000000..16a7d88 --- /dev/null +++ b/vendor/google.golang.org/grpc/grpclog/grpclog.go @@ -0,0 +1,123 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Package grpclog defines logging for grpc. +// +// All logs in transport package only go to verbose level 2. +// All logs in other packages in grpc are logged in spite of the verbosity level. +// +// In the default logger, +// severity level can be set by environment variable GRPC_GO_LOG_SEVERITY_LEVEL, +// verbosity level can be set by GRPC_GO_LOG_VERBOSITY_LEVEL. +package grpclog // import "google.golang.org/grpc/grpclog" + +import "os" + +var logger = newLoggerV2() + +// V reports whether verbosity level l is at least the requested verbose level. +func V(l int) bool { + return logger.V(l) +} + +// Info logs to the INFO log. +func Info(args ...interface{}) { + logger.Info(args...) +} + +// Infof logs to the INFO log. Arguments are handled in the manner of fmt.Printf. +func Infof(format string, args ...interface{}) { + logger.Infof(format, args...) +} + +// Infoln logs to the INFO log. Arguments are handled in the manner of fmt.Println. +func Infoln(args ...interface{}) { + logger.Infoln(args...) +} + +// Warning logs to the WARNING log. +func Warning(args ...interface{}) { + logger.Warning(args...) +} + +// Warningf logs to the WARNING log. Arguments are handled in the manner of fmt.Printf. +func Warningf(format string, args ...interface{}) { + logger.Warningf(format, args...) +} + +// Warningln logs to the WARNING log. Arguments are handled in the manner of fmt.Println. +func Warningln(args ...interface{}) { + logger.Warningln(args...) +} + +// Error logs to the ERROR log. +func Error(args ...interface{}) { + logger.Error(args...) +} + +// Errorf logs to the ERROR log. Arguments are handled in the manner of fmt.Printf. +func Errorf(format string, args ...interface{}) { + logger.Errorf(format, args...) +} + +// Errorln logs to the ERROR log. Arguments are handled in the manner of fmt.Println. +func Errorln(args ...interface{}) { + logger.Errorln(args...) +} + +// Fatal logs to the FATAL log. Arguments are handled in the manner of fmt.Print. +// It calls os.Exit() with exit code 1. +func Fatal(args ...interface{}) { + logger.Fatal(args...) + // Make sure fatal logs will exit. + os.Exit(1) +} + +// Fatalf logs to the FATAL log. Arguments are handled in the manner of fmt.Printf. +// It calles os.Exit() with exit code 1. +func Fatalf(format string, args ...interface{}) { + logger.Fatalf(format, args...) + // Make sure fatal logs will exit. + os.Exit(1) +} + +// Fatalln logs to the FATAL log. Arguments are handled in the manner of fmt.Println. +// It calle os.Exit()) with exit code 1. +func Fatalln(args ...interface{}) { + logger.Fatalln(args...) + // Make sure fatal logs will exit. + os.Exit(1) +} + +// Print prints to the logger. Arguments are handled in the manner of fmt.Print. +// Deprecated: use Info. +func Print(args ...interface{}) { + logger.Info(args...) +} + +// Printf prints to the logger. Arguments are handled in the manner of fmt.Printf. +// Deprecated: use Infof. +func Printf(format string, args ...interface{}) { + logger.Infof(format, args...) +} + +// Println prints to the logger. Arguments are handled in the manner of fmt.Println. +// Deprecated: use Infoln. +func Println(args ...interface{}) { + logger.Infoln(args...) +} diff --git a/vendor/google.golang.org/grpc/grpclog/logger.go b/vendor/google.golang.org/grpc/grpclog/logger.go index 3b29330..d03b239 100644 --- a/vendor/google.golang.org/grpc/grpclog/logger.go +++ b/vendor/google.golang.org/grpc/grpclog/logger.go @@ -1,52 +1,25 @@ /* * - * Copyright 2015, Google Inc. - * All rights reserved. + * Copyright 2015 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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 grpclog defines logging for grpc. -*/ -package grpclog // import "google.golang.org/grpc/grpclog" - -import ( - "log" - "os" -) - -// Use golang's standard logger by default. -// Access is not mutex-protected: do not modify except in init() -// functions. -var logger Logger = log.New(os.Stderr, "", log.LstdFlags) +package grpclog // Logger mimics golang's standard Logger as an interface. +// Deprecated: use LoggerV2. type Logger interface { Fatal(args ...interface{}) Fatalf(format string, args ...interface{}) @@ -58,36 +31,53 @@ type Logger interface { // SetLogger sets the logger that is used in grpc. Call only from // init() functions. +// Deprecated: use SetLoggerV2. func SetLogger(l Logger) { - logger = l + logger = &loggerWrapper{Logger: l} +} + +// loggerWrapper wraps Logger into a LoggerV2. +type loggerWrapper struct { + Logger +} + +func (g *loggerWrapper) Info(args ...interface{}) { + g.Logger.Print(args...) +} + +func (g *loggerWrapper) Infoln(args ...interface{}) { + g.Logger.Println(args...) +} + +func (g *loggerWrapper) Infof(format string, args ...interface{}) { + g.Logger.Printf(format, args...) +} + +func (g *loggerWrapper) Warning(args ...interface{}) { + g.Logger.Print(args...) } -// Fatal is equivalent to Print() followed by a call to os.Exit() with a non-zero exit code. -func Fatal(args ...interface{}) { - logger.Fatal(args...) +func (g *loggerWrapper) Warningln(args ...interface{}) { + g.Logger.Println(args...) } -// Fatalf is equivalent to Printf() followed by a call to os.Exit() with a non-zero exit code. -func Fatalf(format string, args ...interface{}) { - logger.Fatalf(format, args...) +func (g *loggerWrapper) Warningf(format string, args ...interface{}) { + g.Logger.Printf(format, args...) } -// Fatalln is equivalent to Println() followed by a call to os.Exit()) with a non-zero exit code. -func Fatalln(args ...interface{}) { - logger.Fatalln(args...) +func (g *loggerWrapper) Error(args ...interface{}) { + g.Logger.Print(args...) } -// Print prints to the logger. Arguments are handled in the manner of fmt.Print. -func Print(args ...interface{}) { - logger.Print(args...) +func (g *loggerWrapper) Errorln(args ...interface{}) { + g.Logger.Println(args...) } -// Printf prints to the logger. Arguments are handled in the manner of fmt.Printf. -func Printf(format string, args ...interface{}) { - logger.Printf(format, args...) +func (g *loggerWrapper) Errorf(format string, args ...interface{}) { + g.Logger.Printf(format, args...) } -// Println prints to the logger. Arguments are handled in the manner of fmt.Println. -func Println(args ...interface{}) { - logger.Println(args...) +func (g *loggerWrapper) V(l int) bool { + // Returns true for all verbose level. + return true } diff --git a/vendor/google.golang.org/grpc/grpclog/loggerv2.go b/vendor/google.golang.org/grpc/grpclog/loggerv2.go new file mode 100644 index 0000000..d493257 --- /dev/null +++ b/vendor/google.golang.org/grpc/grpclog/loggerv2.go @@ -0,0 +1,195 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package grpclog + +import ( + "io" + "io/ioutil" + "log" + "os" + "strconv" +) + +// LoggerV2 does underlying logging work for grpclog. +type LoggerV2 interface { + // Info logs to INFO log. Arguments are handled in the manner of fmt.Print. + Info(args ...interface{}) + // Infoln logs to INFO log. Arguments are handled in the manner of fmt.Println. + Infoln(args ...interface{}) + // Infof logs to INFO log. Arguments are handled in the manner of fmt.Printf. + Infof(format string, args ...interface{}) + // Warning logs to WARNING log. Arguments are handled in the manner of fmt.Print. + Warning(args ...interface{}) + // Warningln logs to WARNING log. Arguments are handled in the manner of fmt.Println. + Warningln(args ...interface{}) + // Warningf logs to WARNING log. Arguments are handled in the manner of fmt.Printf. + Warningf(format string, args ...interface{}) + // Error logs to ERROR log. Arguments are handled in the manner of fmt.Print. + Error(args ...interface{}) + // Errorln logs to ERROR log. Arguments are handled in the manner of fmt.Println. + Errorln(args ...interface{}) + // Errorf logs to ERROR log. Arguments are handled in the manner of fmt.Printf. + Errorf(format string, args ...interface{}) + // Fatal logs to ERROR log. Arguments are handled in the manner of fmt.Print. + // gRPC ensures that all Fatal logs will exit with os.Exit(1). + // Implementations may also call os.Exit() with a non-zero exit code. + Fatal(args ...interface{}) + // Fatalln logs to ERROR log. Arguments are handled in the manner of fmt.Println. + // gRPC ensures that all Fatal logs will exit with os.Exit(1). + // Implementations may also call os.Exit() with a non-zero exit code. + Fatalln(args ...interface{}) + // Fatalf logs to ERROR log. Arguments are handled in the manner of fmt.Printf. + // gRPC ensures that all Fatal logs will exit with os.Exit(1). + // Implementations may also call os.Exit() with a non-zero exit code. + Fatalf(format string, args ...interface{}) + // V reports whether verbosity level l is at least the requested verbose level. + V(l int) bool +} + +// SetLoggerV2 sets logger that is used in grpc to a V2 logger. +// Not mutex-protected, should be called before any gRPC functions. +func SetLoggerV2(l LoggerV2) { + logger = l +} + +const ( + // infoLog indicates Info severity. + infoLog int = iota + // warningLog indicates Warning severity. + warningLog + // errorLog indicates Error severity. + errorLog + // fatalLog indicates Fatal severity. + fatalLog +) + +// severityName contains the string representation of each severity. +var severityName = []string{ + infoLog: "INFO", + warningLog: "WARNING", + errorLog: "ERROR", + fatalLog: "FATAL", +} + +// loggerT is the default logger used by grpclog. +type loggerT struct { + m []*log.Logger + v int +} + +// NewLoggerV2 creates a loggerV2 with the provided writers. +// Fatal logs will be written to errorW, warningW, infoW, followed by exit(1). +// Error logs will be written to errorW, warningW and infoW. +// Warning logs will be written to warningW and infoW. +// Info logs will be written to infoW. +func NewLoggerV2(infoW, warningW, errorW io.Writer) LoggerV2 { + return NewLoggerV2WithVerbosity(infoW, warningW, errorW, 0) +} + +// NewLoggerV2WithVerbosity creates a loggerV2 with the provided writers and +// verbosity level. +func NewLoggerV2WithVerbosity(infoW, warningW, errorW io.Writer, v int) LoggerV2 { + var m []*log.Logger + m = append(m, log.New(infoW, severityName[infoLog]+": ", log.LstdFlags)) + m = append(m, log.New(io.MultiWriter(infoW, warningW), severityName[warningLog]+": ", log.LstdFlags)) + ew := io.MultiWriter(infoW, warningW, errorW) // ew will be used for error and fatal. + m = append(m, log.New(ew, severityName[errorLog]+": ", log.LstdFlags)) + m = append(m, log.New(ew, severityName[fatalLog]+": ", log.LstdFlags)) + return &loggerT{m: m, v: v} +} + +// newLoggerV2 creates a loggerV2 to be used as default logger. +// All logs are written to stderr. +func newLoggerV2() LoggerV2 { + errorW := ioutil.Discard + warningW := ioutil.Discard + infoW := ioutil.Discard + + logLevel := os.Getenv("GRPC_GO_LOG_SEVERITY_LEVEL") + switch logLevel { + case "", "ERROR", "error": // If env is unset, set level to ERROR. + errorW = os.Stderr + case "WARNING", "warning": + warningW = os.Stderr + case "INFO", "info": + infoW = os.Stderr + } + + var v int + vLevel := os.Getenv("GRPC_GO_LOG_VERBOSITY_LEVEL") + if vl, err := strconv.Atoi(vLevel); err == nil { + v = vl + } + return NewLoggerV2WithVerbosity(infoW, warningW, errorW, v) +} + +func (g *loggerT) Info(args ...interface{}) { + g.m[infoLog].Print(args...) +} + +func (g *loggerT) Infoln(args ...interface{}) { + g.m[infoLog].Println(args...) +} + +func (g *loggerT) Infof(format string, args ...interface{}) { + g.m[infoLog].Printf(format, args...) +} + +func (g *loggerT) Warning(args ...interface{}) { + g.m[warningLog].Print(args...) +} + +func (g *loggerT) Warningln(args ...interface{}) { + g.m[warningLog].Println(args...) +} + +func (g *loggerT) Warningf(format string, args ...interface{}) { + g.m[warningLog].Printf(format, args...) +} + +func (g *loggerT) Error(args ...interface{}) { + g.m[errorLog].Print(args...) +} + +func (g *loggerT) Errorln(args ...interface{}) { + g.m[errorLog].Println(args...) +} + +func (g *loggerT) Errorf(format string, args ...interface{}) { + g.m[errorLog].Printf(format, args...) +} + +func (g *loggerT) Fatal(args ...interface{}) { + g.m[fatalLog].Fatal(args...) + // No need to call os.Exit() again because log.Logger.Fatal() calls os.Exit(). +} + +func (g *loggerT) Fatalln(args ...interface{}) { + g.m[fatalLog].Fatalln(args...) + // No need to call os.Exit() again because log.Logger.Fatal() calls os.Exit(). +} + +func (g *loggerT) Fatalf(format string, args ...interface{}) { + g.m[fatalLog].Fatalf(format, args...) + // No need to call os.Exit() again because log.Logger.Fatal() calls os.Exit(). +} + +func (g *loggerT) V(l int) bool { + return l <= g.v +} diff --git a/vendor/google.golang.org/grpc/grpclog/loggerv2_test.go b/vendor/google.golang.org/grpc/grpclog/loggerv2_test.go new file mode 100644 index 0000000..756f215 --- /dev/null +++ b/vendor/google.golang.org/grpc/grpclog/loggerv2_test.go @@ -0,0 +1,62 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package grpclog + +import ( + "bytes" + "fmt" + "regexp" + "testing" +) + +func TestLoggerV2Severity(t *testing.T) { + buffers := []*bytes.Buffer{new(bytes.Buffer), new(bytes.Buffer), new(bytes.Buffer)} + SetLoggerV2(NewLoggerV2(buffers[infoLog], buffers[warningLog], buffers[errorLog])) + + Info(severityName[infoLog]) + Warning(severityName[warningLog]) + Error(severityName[errorLog]) + + for i := 0; i < fatalLog; i++ { + buf := buffers[i] + // The content of info buffer should be something like: + // INFO: 2017/04/07 14:55:42 INFO + // WARNING: 2017/04/07 14:55:42 WARNING + // ERROR: 2017/04/07 14:55:42 ERROR + for j := i; j < fatalLog; j++ { + b, err := buf.ReadBytes('\n') + if err != nil { + t.Fatal(err) + } + if err := checkLogForSeverity(j, b); err != nil { + t.Fatal(err) + } + } + } +} + +// check if b is in the format of: +// WARNING: 2017/04/07 14:55:42 WARNING +func checkLogForSeverity(s int, b []byte) error { + expected := regexp.MustCompile(fmt.Sprintf(`^%s: [0-9]{4}/[0-9]{2}/[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2} %s\n$`, severityName[s], severityName[s])) + if m := expected.Match(b); !m { + return fmt.Errorf("got: %v, want string in format of: %v", string(b), severityName[s]+": 2016/10/05 17:09:26 "+severityName[s]) + } + return nil +} diff --git a/vendor/google.golang.org/grpc/health/grpc_health_v1/health.pb.go b/vendor/google.golang.org/grpc/health/grpc_health_v1/health.pb.go index 89c4d45..fdcbb9e 100644 --- a/vendor/google.golang.org/grpc/health/grpc_health_v1/health.pb.go +++ b/vendor/google.golang.org/grpc/health/grpc_health_v1/health.pb.go @@ -1,12 +1,11 @@ -// Code generated by protoc-gen-go. -// source: health.proto -// DO NOT EDIT! +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: grpc_health_v1/health.proto /* Package grpc_health_v1 is a generated protocol buffer package. It is generated from these files: - health.proto + grpc_health_v1/health.proto It has these top-level messages: HealthCheckRequest @@ -69,6 +68,13 @@ func (m *HealthCheckRequest) String() string { return proto.CompactTe func (*HealthCheckRequest) ProtoMessage() {} func (*HealthCheckRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } +func (m *HealthCheckRequest) GetService() string { + if m != nil { + return m.Service + } + return "" +} + type HealthCheckResponse struct { Status HealthCheckResponse_ServingStatus `protobuf:"varint,1,opt,name=status,enum=grpc.health.v1.HealthCheckResponse_ServingStatus" json:"status,omitempty"` } @@ -78,6 +84,13 @@ func (m *HealthCheckResponse) String() string { return proto.CompactT func (*HealthCheckResponse) ProtoMessage() {} func (*HealthCheckResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } +func (m *HealthCheckResponse) GetStatus() HealthCheckResponse_ServingStatus { + if m != nil { + return m.Status + } + return HealthCheckResponse_UNKNOWN +} + func init() { proto.RegisterType((*HealthCheckRequest)(nil), "grpc.health.v1.HealthCheckRequest") proto.RegisterType((*HealthCheckResponse)(nil), "grpc.health.v1.HealthCheckResponse") @@ -153,24 +166,25 @@ var _Health_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "health.proto", + Metadata: "grpc_health_v1/health.proto", } -func init() { proto.RegisterFile("health.proto", fileDescriptor0) } +func init() { proto.RegisterFile("grpc_health_v1/health.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 204 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xe2, 0xc9, 0x48, 0x4d, 0xcc, - 0x29, 0xc9, 0xd0, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x4b, 0x2f, 0x2a, 0x48, 0xd6, 0x83, - 0x0a, 0x95, 0x19, 0x2a, 0xe9, 0x71, 0x09, 0x79, 0x80, 0x39, 0xce, 0x19, 0xa9, 0xc9, 0xd9, 0x41, - 0xa9, 0x85, 0xa5, 0xa9, 0xc5, 0x25, 0x42, 0x12, 0x5c, 0xec, 0xc5, 0xa9, 0x45, 0x65, 0x99, 0xc9, - 0xa9, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x9c, 0x41, 0x30, 0xae, 0xd2, 0x1c, 0x46, 0x2e, 0x61, 0x14, - 0x0d, 0xc5, 0x05, 0xf9, 0x79, 0xc5, 0xa9, 0x42, 0x9e, 0x5c, 0x6c, 0xc5, 0x25, 0x89, 0x25, 0xa5, - 0xc5, 0x60, 0x0d, 0x7c, 0x46, 0x86, 0x7a, 0xa8, 0x16, 0xe9, 0x61, 0xd1, 0xa4, 0x17, 0x0c, 0x32, - 0x34, 0x2f, 0x3d, 0x18, 0xac, 0x31, 0x08, 0x6a, 0x80, 0x92, 0x15, 0x17, 0x2f, 0x8a, 0x84, 0x10, - 0x37, 0x17, 0x7b, 0xa8, 0x9f, 0xb7, 0x9f, 0x7f, 0xb8, 0x9f, 0x00, 0x03, 0x88, 0x13, 0xec, 0x1a, - 0x14, 0xe6, 0xe9, 0xe7, 0x2e, 0xc0, 0x28, 0xc4, 0xcf, 0xc5, 0xed, 0xe7, 0x1f, 0x12, 0x0f, 0x13, - 0x60, 0x32, 0x8a, 0xe2, 0x62, 0x83, 0x58, 0x24, 0x14, 0xc0, 0xc5, 0x0a, 0xb6, 0x4c, 0x48, 0x09, - 0xaf, 0x4b, 0xc0, 0xfe, 0x95, 0x52, 0x26, 0xc2, 0xb5, 0x49, 0x6c, 0xe0, 0x10, 0x34, 0x06, 0x04, - 0x00, 0x00, 0xff, 0xff, 0xac, 0x56, 0x2a, 0xcb, 0x51, 0x01, 0x00, 0x00, + // 213 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4e, 0x2f, 0x2a, 0x48, + 0x8e, 0xcf, 0x48, 0x4d, 0xcc, 0x29, 0xc9, 0x88, 0x2f, 0x33, 0xd4, 0x87, 0xb0, 0xf4, 0x0a, 0x8a, + 0xf2, 0x4b, 0xf2, 0x85, 0xf8, 0x40, 0x92, 0x7a, 0x50, 0xa1, 0x32, 0x43, 0x25, 0x3d, 0x2e, 0x21, + 0x0f, 0x30, 0xc7, 0x39, 0x23, 0x35, 0x39, 0x3b, 0x28, 0xb5, 0xb0, 0x34, 0xb5, 0xb8, 0x44, 0x48, + 0x82, 0x8b, 0xbd, 0x38, 0xb5, 0xa8, 0x2c, 0x33, 0x39, 0x55, 0x82, 0x51, 0x81, 0x51, 0x83, 0x33, + 0x08, 0xc6, 0x55, 0x9a, 0xc3, 0xc8, 0x25, 0x8c, 0xa2, 0xa1, 0xb8, 0x20, 0x3f, 0xaf, 0x38, 0x55, + 0xc8, 0x93, 0x8b, 0xad, 0xb8, 0x24, 0xb1, 0xa4, 0xb4, 0x18, 0xac, 0x81, 0xcf, 0xc8, 0x50, 0x0f, + 0xd5, 0x22, 0x3d, 0x2c, 0x9a, 0xf4, 0x82, 0x41, 0x86, 0xe6, 0xa5, 0x07, 0x83, 0x35, 0x06, 0x41, + 0x0d, 0x50, 0xb2, 0xe2, 0xe2, 0x45, 0x91, 0x10, 0xe2, 0xe6, 0x62, 0x0f, 0xf5, 0xf3, 0xf6, 0xf3, + 0x0f, 0xf7, 0x13, 0x60, 0x00, 0x71, 0x82, 0x5d, 0x83, 0xc2, 0x3c, 0xfd, 0xdc, 0x05, 0x18, 0x85, + 0xf8, 0xb9, 0xb8, 0xfd, 0xfc, 0x43, 0xe2, 0x61, 0x02, 0x4c, 0x46, 0x51, 0x5c, 0x6c, 0x10, 0x8b, + 0x84, 0x02, 0xb8, 0x58, 0xc1, 0x96, 0x09, 0x29, 0xe1, 0x75, 0x09, 0xd8, 0xbf, 0x52, 0xca, 0x44, + 0xb8, 0x36, 0x89, 0x0d, 0x1c, 0x82, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x53, 0x2b, 0x65, + 0x20, 0x60, 0x01, 0x00, 0x00, } diff --git a/vendor/google.golang.org/grpc/health/grpc_health_v1/health.proto b/vendor/google.golang.org/grpc/health/grpc_health_v1/health.proto index e2dc088..6072fdc 100644 --- a/vendor/google.golang.org/grpc/health/grpc_health_v1/health.proto +++ b/vendor/google.golang.org/grpc/health/grpc_health_v1/health.proto @@ -1,3 +1,17 @@ +// Copyright 2017 gRPC authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + syntax = "proto3"; package grpc.health.v1; diff --git a/vendor/google.golang.org/grpc/health/health.go b/vendor/google.golang.org/grpc/health/health.go index 3425529..30a7866 100644 --- a/vendor/google.golang.org/grpc/health/health.go +++ b/vendor/google.golang.org/grpc/health/health.go @@ -1,3 +1,23 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +//go:generate protoc --go_out=plugins=grpc:. grpc_health_v1/health.proto + // Package health provides some utility functions to health-check a server. The implementation // is based on protobuf. Users need to write their own implementations if other IDLs are used. package health @@ -6,9 +26,9 @@ import ( "sync" "golang.org/x/net/context" - "google.golang.org/grpc" "google.golang.org/grpc/codes" healthpb "google.golang.org/grpc/health/grpc_health_v1" + "google.golang.org/grpc/status" ) // Server implements `service Health`. @@ -40,7 +60,7 @@ func (s *Server) Check(ctx context.Context, in *healthpb.HealthCheckRequest) (*h Status: status, }, nil } - return nil, grpc.Errorf(codes.NotFound, "unknown service") + return nil, status.Error(codes.NotFound, "unknown service") } // SetServingStatus is called when need to reset the serving status of a service diff --git a/vendor/google.golang.org/grpc/interceptor.go b/vendor/google.golang.org/grpc/interceptor.go index 19893be..1f6ef67 100644 --- a/vendor/google.golang.org/grpc/interceptor.go +++ b/vendor/google.golang.org/grpc/interceptor.go @@ -1,33 +1,18 @@ /* * - * Copyright 2016, Google Inc. - * All rights reserved. + * Copyright 2016 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -63,7 +48,9 @@ type UnaryServerInfo struct { } // UnaryHandler defines the handler invoked by UnaryServerInterceptor to complete the normal -// execution of a unary RPC. +// execution of a unary RPC. If a UnaryHandler returns an error, it should be produced by the +// status package, or else gRPC will use codes.Unknown as the status code and err.Error() as +// the status message of the RPC. type UnaryHandler func(ctx context.Context, req interface{}) (interface{}, error) // UnaryServerInterceptor provides a hook to intercept the execution of a unary RPC on the server. info diff --git a/vendor/google.golang.org/grpc/internal/internal.go b/vendor/google.golang.org/grpc/internal/internal.go index 5489143..53f1775 100644 --- a/vendor/google.golang.org/grpc/internal/internal.go +++ b/vendor/google.golang.org/grpc/internal/internal.go @@ -1,32 +1,17 @@ /* - * Copyright 2016, Google Inc. - * All rights reserved. + * Copyright 2016 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -34,13 +19,6 @@ // the godoc of the top-level grpc package. package internal -// TestingCloseConns closes all existing transports but keeps -// grpcServer.lis accepting new connections. -// -// The provided grpcServer must be of type *grpc.Server. It is untyped -// for circular dependency reasons. -var TestingCloseConns func(grpcServer interface{}) - // TestingUseHandlerImpl enables the http.Handler-based server implementation. // It must be called before Serve and requires TLS credentials. // diff --git a/vendor/google.golang.org/grpc/interop/alts/client/client.go b/vendor/google.golang.org/grpc/interop/alts/client/client.go new file mode 100644 index 0000000..917586a --- /dev/null +++ b/vendor/google.golang.org/grpc/interop/alts/client/client.go @@ -0,0 +1,64 @@ +/* + * + * Copyright 2018 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// This binary can only run on Google Cloud Platform (GCP). +package main + +import ( + "flag" + "time" + + "golang.org/x/net/context" + grpc "google.golang.org/grpc" + "google.golang.org/grpc/credentials/alts" + "google.golang.org/grpc/grpclog" + testpb "google.golang.org/grpc/interop/grpc_testing" +) + +const ( + value = "test_value" +) + +var ( + serverAddr = flag.String("server_address", ":8080", "The port on which the server is listening") +) + +func main() { + flag.Parse() + + altsTC := alts.NewClientCreds(&alts.ClientOptions{}) + // Block until the server is ready. + conn, err := grpc.Dial(*serverAddr, grpc.WithTransportCredentials(altsTC), grpc.WithBlock()) + if err != nil { + grpclog.Fatalf("gRPC Client: failed to dial the server at %v: %v", *serverAddr, err) + } + defer conn.Close() + grpcClient := testpb.NewTestServiceClient(conn) + + // Call the EmptyCall API. + ctx := context.Background() + request := &testpb.Empty{} + if _, err := grpcClient.EmptyCall(ctx, request); err != nil { + grpclog.Fatalf("grpc Client: EmptyCall(_, %v) failed: %v", request, err) + } + grpclog.Info("grpc Client: empty call succeeded") + + // This sleep prevents the connection from being abruptly disconnected + // when running this binary (along with grpc_server) on GCP dev cluster. + time.Sleep(1 * time.Second) +} diff --git a/vendor/google.golang.org/grpc/interop/alts/server/server.go b/vendor/google.golang.org/grpc/interop/alts/server/server.go new file mode 100644 index 0000000..57602ec --- /dev/null +++ b/vendor/google.golang.org/grpc/interop/alts/server/server.go @@ -0,0 +1,48 @@ +/* + * + * Copyright 2018 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// This binary can only run on Google Cloud Platform (GCP). +package main + +import ( + "flag" + "net" + + grpc "google.golang.org/grpc" + "google.golang.org/grpc/credentials/alts" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/interop" + testpb "google.golang.org/grpc/interop/grpc_testing" +) + +var ( + serverAddr = flag.String("server_address", ":8080", "The port on which the server is listening") +) + +func main() { + flag.Parse() + + lis, err := net.Listen("tcp", *serverAddr) + if err != nil { + grpclog.Fatalf("gRPC Server: failed to start the server at %v: %v", *serverAddr, err) + } + altsTC := alts.NewServerCreds() + grpcServer := grpc.NewServer(grpc.Creds(altsTC)) + testpb.RegisterTestServiceServer(grpcServer, interop.NewTestServer()) + grpcServer.Serve(lis) +} diff --git a/vendor/google.golang.org/grpc/interop/client/client.go b/vendor/google.golang.org/grpc/interop/client/client.go index 38bad3f..6f3a033 100644 --- a/vendor/google.golang.org/grpc/interop/client/client.go +++ b/vendor/google.golang.org/grpc/interop/client/client.go @@ -1,33 +1,18 @@ /* * - * Copyright 2014, Google Inc. - * All rights reserved. + * Copyright 2014 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -40,14 +25,18 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/credentials" + "google.golang.org/grpc/credentials/alts" "google.golang.org/grpc/credentials/oauth" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/interop" testpb "google.golang.org/grpc/interop/grpc_testing" + "google.golang.org/grpc/testdata" ) var ( - useTLS = flag.Bool("use_tls", false, "Connection uses TLS if true, else plain TCP") + caFile = flag.String("ca_file", "", "The file containning the CA root cert file") + useTLS = flag.Bool("use_tls", false, "Connection uses TLS if true") + useALTS = flag.Bool("use_alts", false, "Connection uses ALTS if true (this option can only be used on GCP)") testCA = flag.Bool("use_test_ca", false, "Whether to replace platform root CAs with test CA as the CA root") serviceAccountKeyFile = flag.String("service_account_key_file", "", "Path to service account json key file") oauthScope = flag.String("oauth_scope", "", "The scope for OAuth2 tokens") @@ -75,13 +64,13 @@ var ( custom_metadata: server will echo custom metadata; unimplemented_method: client attempts to call unimplemented method; unimplemented_service: client attempts to call unimplemented service.`) - - // The test CA root cert file - testCAFile = "testdata/ca.pem" ) func main() { flag.Parse() + if *useTLS && *useALTS { + grpclog.Fatalf("use_tls and use_alts cannot be both set to true") + } serverAddr := net.JoinHostPort(*serverHost, strconv.Itoa(*serverPort)) var opts []grpc.DialOption if *useTLS { @@ -92,7 +81,10 @@ func main() { var creds credentials.TransportCredentials if *testCA { var err error - creds, err = credentials.NewClientTLSFromFile(testCAFile, sn) + if *caFile == "" { + *caFile = testdata.Path("ca.pem") + } + creds, err = credentials.NewClientTLSFromFile(*caFile, sn) if err != nil { grpclog.Fatalf("Failed to create TLS credentials %v", err) } @@ -117,9 +109,13 @@ func main() { } else if *testCase == "oauth2_auth_token" { opts = append(opts, grpc.WithPerRPCCredentials(oauth.NewOauthAccess(interop.GetToken(*serviceAccountKeyFile, *oauthScope)))) } + } else if *useALTS { + altsTC := alts.NewClientCreds(&alts.ClientOptions{}) + opts = append(opts, grpc.WithTransportCredentials(altsTC)) } else { opts = append(opts, grpc.WithInsecure()) } + opts = append(opts, grpc.WithBlock()) conn, err := grpc.Dial(serverAddr, opts...) if err != nil { grpclog.Fatalf("Fail to dial: %v", err) diff --git a/vendor/google.golang.org/grpc/interop/client/testdata/ca.pem b/vendor/google.golang.org/grpc/interop/client/testdata/ca.pem deleted file mode 100644 index 6c8511a..0000000 --- a/vendor/google.golang.org/grpc/interop/client/testdata/ca.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICSjCCAbOgAwIBAgIJAJHGGR4dGioHMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV -BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX -aWRnaXRzIFB0eSBMdGQxDzANBgNVBAMTBnRlc3RjYTAeFw0xNDExMTEyMjMxMjla -Fw0yNDExMDgyMjMxMjlaMFYxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0 -YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDzANBgNVBAMT -BnRlc3RjYTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwEDfBV5MYdlHVHJ7 -+L4nxrZy7mBfAVXpOc5vMYztssUI7mL2/iYujiIXM+weZYNTEpLdjyJdu7R5gGUu -g1jSVK/EPHfc74O7AyZU34PNIP4Sh33N+/A5YexrNgJlPY+E3GdVYi4ldWJjgkAd -Qah2PH5ACLrIIC6tRka9hcaBlIECAwEAAaMgMB4wDAYDVR0TBAUwAwEB/zAOBgNV -HQ8BAf8EBAMCAgQwDQYJKoZIhvcNAQELBQADgYEAHzC7jdYlzAVmddi/gdAeKPau -sPBG/C2HCWqHzpCUHcKuvMzDVkY/MP2o6JIW2DBbY64bO/FceExhjcykgaYtCH/m -oIU63+CFOTtR7otyQAWHqXa7q4SbCDlG7DyRFxqG0txPtGvy12lgldA2+RgcigQG -Dfcog5wrJytaQ6UA0wE= ------END CERTIFICATE----- diff --git a/vendor/google.golang.org/grpc/interop/client/testdata/server1.key b/vendor/google.golang.org/grpc/interop/client/testdata/server1.key deleted file mode 100644 index 143a5b8..0000000 --- a/vendor/google.golang.org/grpc/interop/client/testdata/server1.key +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAOHDFScoLCVJpYDD -M4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlumN+fm+AjPEK5GHhGn1BgzkWF+slf -3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wHNVX77fBZOgp9VlSMVfyd9N8YwbBY -AckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAECgYAn7qGnM2vbjJNBm0VZCkOkTIWm -V10okw7EPJrdL2mkre9NasghNXbE1y5zDshx5Nt3KsazKOxTT8d0Jwh/3KbaN+YY -tTCbKGW0pXDRBhwUHRcuRzScjli8Rih5UOCiZkhefUTcRb6xIhZJuQy71tjaSy0p -dHZRmYyBYO2YEQ8xoQJBAPrJPhMBkzmEYFtyIEqAxQ/o/A6E+E4w8i+KM7nQCK7q -K4JXzyXVAjLfyBZWHGM2uro/fjqPggGD6QH1qXCkI4MCQQDmdKeb2TrKRh5BY1LR -81aJGKcJ2XbcDu6wMZK4oqWbTX2KiYn9GB0woM6nSr/Y6iy1u145YzYxEV/iMwff -DJULAkB8B2MnyzOg0pNFJqBJuH29bKCcHa8gHJzqXhNO5lAlEbMK95p/P2Wi+4Hd -aiEIAF1BF326QJcvYKmwSmrORp85AkAlSNxRJ50OWrfMZnBgzVjDx3xG6KsFQVk2 -ol6VhqL6dFgKUORFUWBvnKSyhjJxurlPEahV6oo6+A+mPhFY8eUvAkAZQyTdupP3 -XEFQKctGz+9+gKkemDp7LBBMEMBXrGTLPhpEfcjv/7KPdnFHYmhYeBTBnuVmTVWe -F98XJ7tIFfJq ------END PRIVATE KEY----- diff --git a/vendor/google.golang.org/grpc/interop/client/testdata/server1.pem b/vendor/google.golang.org/grpc/interop/client/testdata/server1.pem deleted file mode 100644 index f3d43fc..0000000 --- a/vendor/google.golang.org/grpc/interop/client/testdata/server1.pem +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICnDCCAgWgAwIBAgIBBzANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJBVTET -MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQ -dHkgTHRkMQ8wDQYDVQQDEwZ0ZXN0Y2EwHhcNMTUxMTA0MDIyMDI0WhcNMjUxMTAx -MDIyMDI0WjBlMQswCQYDVQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNV -BAcTB0NoaWNhZ28xFTATBgNVBAoTDEV4YW1wbGUsIENvLjEaMBgGA1UEAxQRKi50 -ZXN0Lmdvb2dsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOHDFSco -LCVJpYDDM4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlumN+fm+AjPEK5GHhGn1Bg -zkWF+slf3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wHNVX77fBZOgp9VlSMVfyd -9N8YwbBYAckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAGjazBpMAkGA1UdEwQCMAAw -CwYDVR0PBAQDAgXgME8GA1UdEQRIMEaCECoudGVzdC5nb29nbGUuZnKCGHdhdGVy -em9vaS50ZXN0Lmdvb2dsZS5iZYISKi50ZXN0LnlvdXR1YmUuY29thwTAqAEDMA0G -CSqGSIb3DQEBCwUAA4GBAJFXVifQNub1LUP4JlnX5lXNlo8FxZ2a12AFQs+bzoJ6 -hM044EDjqyxUqSbVePK0ni3w1fHQB5rY9yYC5f8G7aqqTY1QOhoUk8ZTSTRpnkTh -y4jjdvTZeLDVBlueZUTDRmy2feY5aZIU18vFDK08dTG0A87pppuv1LNIR3loveU8 ------END CERTIFICATE----- diff --git a/vendor/google.golang.org/grpc/interop/grpc_testing/test.pb.go b/vendor/google.golang.org/grpc/interop/grpc_testing/test.pb.go old mode 100755 new mode 100644 index 76ae564..1e7a9ab --- a/vendor/google.golang.org/grpc/interop/grpc_testing/test.pb.go +++ b/vendor/google.golang.org/grpc/interop/grpc_testing/test.pb.go @@ -1,12 +1,11 @@ -// Code generated by protoc-gen-go. -// source: test.proto -// DO NOT EDIT! +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: grpc_testing/test.proto /* Package grpc_testing is a generated protocol buffer package. It is generated from these files: - test.proto + grpc_testing/test.proto It has these top-level messages: Empty @@ -65,26 +64,12 @@ var PayloadType_value = map[string]int32{ "RANDOM": 2, } -func (x PayloadType) Enum() *PayloadType { - p := new(PayloadType) - *p = x - return p -} func (x PayloadType) String() string { return proto.EnumName(PayloadType_name, int32(x)) } -func (x *PayloadType) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(PayloadType_value, data, "PayloadType") - if err != nil { - return err - } - *x = PayloadType(value) - return nil -} func (PayloadType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } type Empty struct { - XXX_unrecognized []byte `json:"-"` } func (m *Empty) Reset() { *m = Empty{} } @@ -95,10 +80,9 @@ func (*Empty) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } // A block of data, to simply increase gRPC message size. type Payload struct { // The type of data in body. - Type *PayloadType `protobuf:"varint,1,opt,name=type,enum=grpc.testing.PayloadType" json:"type,omitempty"` + Type PayloadType `protobuf:"varint,1,opt,name=type,enum=grpc.testing.PayloadType" json:"type,omitempty"` // Primary contents of payload. - Body []byte `protobuf:"bytes,2,opt,name=body" json:"body,omitempty"` - XXX_unrecognized []byte `json:"-"` + Body []byte `protobuf:"bytes,2,opt,name=body,proto3" json:"body,omitempty"` } func (m *Payload) Reset() { *m = Payload{} } @@ -107,8 +91,8 @@ func (*Payload) ProtoMessage() {} func (*Payload) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } func (m *Payload) GetType() PayloadType { - if m != nil && m.Type != nil { - return *m.Type + if m != nil { + return m.Type } return PayloadType_COMPRESSABLE } @@ -123,9 +107,8 @@ func (m *Payload) GetBody() []byte { // A protobuf representation for grpc status. This is used by test // clients to specify a status that the server should attempt to return. type EchoStatus struct { - Code *int32 `protobuf:"varint,1,opt,name=code" json:"code,omitempty"` - Message *string `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` - XXX_unrecognized []byte `json:"-"` + Code int32 `protobuf:"varint,1,opt,name=code" json:"code,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` } func (m *EchoStatus) Reset() { *m = EchoStatus{} } @@ -134,15 +117,15 @@ func (*EchoStatus) ProtoMessage() {} func (*EchoStatus) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } func (m *EchoStatus) GetCode() int32 { - if m != nil && m.Code != nil { - return *m.Code + if m != nil { + return m.Code } return 0 } func (m *EchoStatus) GetMessage() string { - if m != nil && m.Message != nil { - return *m.Message + if m != nil { + return m.Message } return "" } @@ -151,19 +134,18 @@ func (m *EchoStatus) GetMessage() string { type SimpleRequest struct { // Desired payload type in the response from the server. // If response_type is RANDOM, server randomly chooses one from other formats. - ResponseType *PayloadType `protobuf:"varint,1,opt,name=response_type,json=responseType,enum=grpc.testing.PayloadType" json:"response_type,omitempty"` + ResponseType PayloadType `protobuf:"varint,1,opt,name=response_type,json=responseType,enum=grpc.testing.PayloadType" json:"response_type,omitempty"` // Desired payload size in the response from the server. // If response_type is COMPRESSABLE, this denotes the size before compression. - ResponseSize *int32 `protobuf:"varint,2,opt,name=response_size,json=responseSize" json:"response_size,omitempty"` + ResponseSize int32 `protobuf:"varint,2,opt,name=response_size,json=responseSize" json:"response_size,omitempty"` // Optional input payload sent along with the request. Payload *Payload `protobuf:"bytes,3,opt,name=payload" json:"payload,omitempty"` // Whether SimpleResponse should include username. - FillUsername *bool `protobuf:"varint,4,opt,name=fill_username,json=fillUsername" json:"fill_username,omitempty"` + FillUsername bool `protobuf:"varint,4,opt,name=fill_username,json=fillUsername" json:"fill_username,omitempty"` // Whether SimpleResponse should include OAuth scope. - FillOauthScope *bool `protobuf:"varint,5,opt,name=fill_oauth_scope,json=fillOauthScope" json:"fill_oauth_scope,omitempty"` + FillOauthScope bool `protobuf:"varint,5,opt,name=fill_oauth_scope,json=fillOauthScope" json:"fill_oauth_scope,omitempty"` // Whether server should return a given status - ResponseStatus *EchoStatus `protobuf:"bytes,7,opt,name=response_status,json=responseStatus" json:"response_status,omitempty"` - XXX_unrecognized []byte `json:"-"` + ResponseStatus *EchoStatus `protobuf:"bytes,7,opt,name=response_status,json=responseStatus" json:"response_status,omitempty"` } func (m *SimpleRequest) Reset() { *m = SimpleRequest{} } @@ -172,15 +154,15 @@ func (*SimpleRequest) ProtoMessage() {} func (*SimpleRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } func (m *SimpleRequest) GetResponseType() PayloadType { - if m != nil && m.ResponseType != nil { - return *m.ResponseType + if m != nil { + return m.ResponseType } return PayloadType_COMPRESSABLE } func (m *SimpleRequest) GetResponseSize() int32 { - if m != nil && m.ResponseSize != nil { - return *m.ResponseSize + if m != nil { + return m.ResponseSize } return 0 } @@ -193,15 +175,15 @@ func (m *SimpleRequest) GetPayload() *Payload { } func (m *SimpleRequest) GetFillUsername() bool { - if m != nil && m.FillUsername != nil { - return *m.FillUsername + if m != nil { + return m.FillUsername } return false } func (m *SimpleRequest) GetFillOauthScope() bool { - if m != nil && m.FillOauthScope != nil { - return *m.FillOauthScope + if m != nil { + return m.FillOauthScope } return false } @@ -219,10 +201,9 @@ type SimpleResponse struct { Payload *Payload `protobuf:"bytes,1,opt,name=payload" json:"payload,omitempty"` // The user the request came from, for verifying authentication was // successful when the client expected it. - Username *string `protobuf:"bytes,2,opt,name=username" json:"username,omitempty"` + Username string `protobuf:"bytes,2,opt,name=username" json:"username,omitempty"` // OAuth scope. - OauthScope *string `protobuf:"bytes,3,opt,name=oauth_scope,json=oauthScope" json:"oauth_scope,omitempty"` - XXX_unrecognized []byte `json:"-"` + OauthScope string `protobuf:"bytes,3,opt,name=oauth_scope,json=oauthScope" json:"oauth_scope,omitempty"` } func (m *SimpleResponse) Reset() { *m = SimpleResponse{} } @@ -238,15 +219,15 @@ func (m *SimpleResponse) GetPayload() *Payload { } func (m *SimpleResponse) GetUsername() string { - if m != nil && m.Username != nil { - return *m.Username + if m != nil { + return m.Username } return "" } func (m *SimpleResponse) GetOauthScope() string { - if m != nil && m.OauthScope != nil { - return *m.OauthScope + if m != nil { + return m.OauthScope } return "" } @@ -254,8 +235,7 @@ func (m *SimpleResponse) GetOauthScope() string { // Client-streaming request. type StreamingInputCallRequest struct { // Optional input payload sent along with the request. - Payload *Payload `protobuf:"bytes,1,opt,name=payload" json:"payload,omitempty"` - XXX_unrecognized []byte `json:"-"` + Payload *Payload `protobuf:"bytes,1,opt,name=payload" json:"payload,omitempty"` } func (m *StreamingInputCallRequest) Reset() { *m = StreamingInputCallRequest{} } @@ -273,8 +253,7 @@ func (m *StreamingInputCallRequest) GetPayload() *Payload { // Client-streaming response. type StreamingInputCallResponse struct { // Aggregated size of payloads received from the client. - AggregatedPayloadSize *int32 `protobuf:"varint,1,opt,name=aggregated_payload_size,json=aggregatedPayloadSize" json:"aggregated_payload_size,omitempty"` - XXX_unrecognized []byte `json:"-"` + AggregatedPayloadSize int32 `protobuf:"varint,1,opt,name=aggregated_payload_size,json=aggregatedPayloadSize" json:"aggregated_payload_size,omitempty"` } func (m *StreamingInputCallResponse) Reset() { *m = StreamingInputCallResponse{} } @@ -283,8 +262,8 @@ func (*StreamingInputCallResponse) ProtoMessage() {} func (*StreamingInputCallResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } func (m *StreamingInputCallResponse) GetAggregatedPayloadSize() int32 { - if m != nil && m.AggregatedPayloadSize != nil { - return *m.AggregatedPayloadSize + if m != nil { + return m.AggregatedPayloadSize } return 0 } @@ -293,11 +272,10 @@ func (m *StreamingInputCallResponse) GetAggregatedPayloadSize() int32 { type ResponseParameters struct { // Desired payload sizes in responses from the server. // If response_type is COMPRESSABLE, this denotes the size before compression. - Size *int32 `protobuf:"varint,1,opt,name=size" json:"size,omitempty"` + Size int32 `protobuf:"varint,1,opt,name=size" json:"size,omitempty"` // Desired interval between consecutive responses in the response stream in // microseconds. - IntervalUs *int32 `protobuf:"varint,2,opt,name=interval_us,json=intervalUs" json:"interval_us,omitempty"` - XXX_unrecognized []byte `json:"-"` + IntervalUs int32 `protobuf:"varint,2,opt,name=interval_us,json=intervalUs" json:"interval_us,omitempty"` } func (m *ResponseParameters) Reset() { *m = ResponseParameters{} } @@ -306,15 +284,15 @@ func (*ResponseParameters) ProtoMessage() {} func (*ResponseParameters) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } func (m *ResponseParameters) GetSize() int32 { - if m != nil && m.Size != nil { - return *m.Size + if m != nil { + return m.Size } return 0 } func (m *ResponseParameters) GetIntervalUs() int32 { - if m != nil && m.IntervalUs != nil { - return *m.IntervalUs + if m != nil { + return m.IntervalUs } return 0 } @@ -325,14 +303,13 @@ type StreamingOutputCallRequest struct { // If response_type is RANDOM, the payload from each response in the stream // might be of different types. This is to simulate a mixed type of payload // stream. - ResponseType *PayloadType `protobuf:"varint,1,opt,name=response_type,json=responseType,enum=grpc.testing.PayloadType" json:"response_type,omitempty"` + ResponseType PayloadType `protobuf:"varint,1,opt,name=response_type,json=responseType,enum=grpc.testing.PayloadType" json:"response_type,omitempty"` // Configuration for each expected response message. ResponseParameters []*ResponseParameters `protobuf:"bytes,2,rep,name=response_parameters,json=responseParameters" json:"response_parameters,omitempty"` // Optional input payload sent along with the request. Payload *Payload `protobuf:"bytes,3,opt,name=payload" json:"payload,omitempty"` // Whether server should return a given status - ResponseStatus *EchoStatus `protobuf:"bytes,7,opt,name=response_status,json=responseStatus" json:"response_status,omitempty"` - XXX_unrecognized []byte `json:"-"` + ResponseStatus *EchoStatus `protobuf:"bytes,7,opt,name=response_status,json=responseStatus" json:"response_status,omitempty"` } func (m *StreamingOutputCallRequest) Reset() { *m = StreamingOutputCallRequest{} } @@ -341,8 +318,8 @@ func (*StreamingOutputCallRequest) ProtoMessage() {} func (*StreamingOutputCallRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } func (m *StreamingOutputCallRequest) GetResponseType() PayloadType { - if m != nil && m.ResponseType != nil { - return *m.ResponseType + if m != nil { + return m.ResponseType } return PayloadType_COMPRESSABLE } @@ -371,8 +348,7 @@ func (m *StreamingOutputCallRequest) GetResponseStatus() *EchoStatus { // Server-streaming response, as configured by the request and parameters. type StreamingOutputCallResponse struct { // Payload to increase response size. - Payload *Payload `protobuf:"bytes,1,opt,name=payload" json:"payload,omitempty"` - XXX_unrecognized []byte `json:"-"` + Payload *Payload `protobuf:"bytes,1,opt,name=payload" json:"payload,omitempty"` } func (m *StreamingOutputCallResponse) Reset() { *m = StreamingOutputCallResponse{} } @@ -789,7 +765,7 @@ var _TestService_serviceDesc = grpc.ServiceDesc{ ClientStreams: true, }, }, - Metadata: "test.proto", + Metadata: "grpc_testing/test.proto", } // Client API for UnimplementedService service @@ -855,52 +831,53 @@ var _UnimplementedService_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: fileDescriptor0, + Metadata: "grpc_testing/test.proto", } -func init() { proto.RegisterFile("test.proto", fileDescriptor0) } +func init() { proto.RegisterFile("grpc_testing/test.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 649 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xbc, 0x54, 0x4d, 0x6f, 0xd3, 0x40, - 0x10, 0xc5, 0x69, 0x42, 0xda, 0x49, 0x6a, 0xc2, 0x94, 0x0a, 0x37, 0x45, 0x22, 0x32, 0x07, 0x0c, - 0x12, 0x01, 0x45, 0x82, 0x03, 0x12, 0xa0, 0xd2, 0xa6, 0xa2, 0x52, 0xdb, 0x14, 0xbb, 0x39, 0x47, - 0x4b, 0x32, 0x75, 0x2d, 0xf9, 0x0b, 0x7b, 0x5d, 0x91, 0x1e, 0xf8, 0x33, 0xfc, 0x08, 0x0e, 0xfc, - 0x39, 0xb4, 0x6b, 0x3b, 0x71, 0xd2, 0x54, 0x34, 0x7c, 0xdd, 0x76, 0xdf, 0xbe, 0xf9, 0x78, 0x33, - 0xcf, 0x06, 0xe0, 0x14, 0xf3, 0x76, 0x18, 0x05, 0x3c, 0xc0, 0xba, 0x1d, 0x85, 0xc3, 0xb6, 0x00, - 0x1c, 0xdf, 0xd6, 0xab, 0x50, 0xe9, 0x7a, 0x21, 0x1f, 0xeb, 0x87, 0x50, 0x3d, 0x61, 0x63, 0x37, - 0x60, 0x23, 0x7c, 0x06, 0x65, 0x3e, 0x0e, 0x49, 0x53, 0x5a, 0x8a, 0xa1, 0x76, 0xb6, 0xda, 0xc5, - 0x80, 0x76, 0x46, 0x3a, 0x1d, 0x87, 0x64, 0x4a, 0x1a, 0x22, 0x94, 0x3f, 0x05, 0xa3, 0xb1, 0x56, - 0x6a, 0x29, 0x46, 0xdd, 0x94, 0x67, 0xfd, 0x35, 0x40, 0x77, 0x78, 0x1e, 0x58, 0x9c, 0xf1, 0x24, - 0x16, 0x8c, 0x61, 0x30, 0x4a, 0x13, 0x56, 0x4c, 0x79, 0x46, 0x0d, 0xaa, 0x1e, 0xc5, 0x31, 0xb3, - 0x49, 0x06, 0xae, 0x99, 0xf9, 0x55, 0xff, 0x5e, 0x82, 0x75, 0xcb, 0xf1, 0x42, 0x97, 0x4c, 0xfa, - 0x9c, 0x50, 0xcc, 0xf1, 0x2d, 0xac, 0x47, 0x14, 0x87, 0x81, 0x1f, 0xd3, 0xe0, 0x66, 0x9d, 0xd5, - 0x73, 0xbe, 0xb8, 0xe1, 0xa3, 0x42, 0x7c, 0xec, 0x5c, 0xa6, 0x15, 0x2b, 0x53, 0x92, 0xe5, 0x5c, - 0x12, 0x3e, 0x87, 0x6a, 0x98, 0x66, 0xd0, 0x56, 0x5a, 0x8a, 0x51, 0xeb, 0x6c, 0x2e, 0x4c, 0x6f, - 0xe6, 0x2c, 0x91, 0xf5, 0xcc, 0x71, 0xdd, 0x41, 0x12, 0x53, 0xe4, 0x33, 0x8f, 0xb4, 0x72, 0x4b, - 0x31, 0x56, 0xcd, 0xba, 0x00, 0xfb, 0x19, 0x86, 0x06, 0x34, 0x24, 0x29, 0x60, 0x09, 0x3f, 0x1f, - 0xc4, 0xc3, 0x20, 0x24, 0xad, 0x22, 0x79, 0xaa, 0xc0, 0x7b, 0x02, 0xb6, 0x04, 0x8a, 0x3b, 0x70, - 0x67, 0xda, 0xa4, 0x9c, 0x9b, 0x56, 0x95, 0x7d, 0x68, 0xb3, 0x7d, 0x4c, 0xe7, 0x6a, 0xaa, 0x13, - 0x01, 0xf2, 0xae, 0x7f, 0x05, 0x35, 0x1f, 0x5c, 0x8a, 0x17, 0x45, 0x29, 0x37, 0x12, 0xd5, 0x84, - 0xd5, 0x89, 0x9e, 0x74, 0x2f, 0x93, 0x3b, 0x3e, 0x84, 0x5a, 0x51, 0xc6, 0x8a, 0x7c, 0x86, 0x60, - 0x22, 0x41, 0x3f, 0x84, 0x2d, 0x8b, 0x47, 0xc4, 0x3c, 0xc7, 0xb7, 0x0f, 0xfc, 0x30, 0xe1, 0xbb, - 0xcc, 0x75, 0xf3, 0x25, 0x2e, 0xdb, 0x8a, 0x7e, 0x0a, 0xcd, 0x45, 0xd9, 0x32, 0x65, 0xaf, 0xe0, - 0x3e, 0xb3, 0xed, 0x88, 0x6c, 0xc6, 0x69, 0x34, 0xc8, 0x62, 0xd2, 0xed, 0xa6, 0x36, 0xdb, 0x9c, - 0x3e, 0x67, 0xa9, 0xc5, 0x9a, 0xf5, 0x03, 0xc0, 0x3c, 0xc7, 0x09, 0x8b, 0x98, 0x47, 0x9c, 0x22, - 0xe9, 0xd0, 0x42, 0xa8, 0x3c, 0x0b, 0xb9, 0x8e, 0xcf, 0x29, 0xba, 0x60, 0x62, 0xc7, 0x99, 0x67, - 0x20, 0x87, 0xfa, 0xb1, 0xfe, 0xad, 0x54, 0xe8, 0xb0, 0x97, 0xf0, 0x39, 0xc1, 0x7f, 0xea, 0xda, - 0x8f, 0xb0, 0x31, 0x89, 0x0f, 0x27, 0xad, 0x6a, 0xa5, 0xd6, 0x8a, 0x51, 0xeb, 0xb4, 0x66, 0xb3, - 0x5c, 0x95, 0x64, 0x62, 0x74, 0x55, 0xe6, 0xd2, 0x1e, 0xff, 0x0b, 0xa6, 0x3c, 0x86, 0xed, 0x85, - 0x43, 0xfa, 0x4d, 0x87, 0x3e, 0x7d, 0x07, 0xb5, 0xc2, 0xcc, 0xb0, 0x01, 0xf5, 0xdd, 0xde, 0xd1, - 0x89, 0xd9, 0xb5, 0xac, 0x9d, 0xf7, 0x87, 0xdd, 0xc6, 0x2d, 0x44, 0x50, 0xfb, 0xc7, 0x33, 0x98, - 0x82, 0x00, 0xb7, 0xcd, 0x9d, 0xe3, 0xbd, 0xde, 0x51, 0xa3, 0xd4, 0xf9, 0x51, 0x86, 0xda, 0x29, - 0xc5, 0xdc, 0xa2, 0xe8, 0xc2, 0x19, 0x12, 0xbe, 0x84, 0x35, 0xf9, 0x0b, 0x14, 0x6d, 0xe1, 0xc6, - 0x9c, 0x2e, 0xf1, 0xd0, 0x5c, 0x04, 0xe2, 0x3e, 0xac, 0xf5, 0x7d, 0x16, 0xa5, 0x61, 0xdb, 0xb3, - 0x8c, 0x99, 0xdf, 0x57, 0xf3, 0xc1, 0xe2, 0xc7, 0x6c, 0x00, 0x2e, 0x6c, 0x2c, 0x98, 0x0f, 0x1a, - 0x73, 0x41, 0xd7, 0xfa, 0xac, 0xf9, 0xe4, 0x06, 0xcc, 0xb4, 0xd6, 0x0b, 0x05, 0x1d, 0xc0, 0xab, - 0x1f, 0x15, 0x3e, 0xbe, 0x26, 0xc5, 0xfc, 0x47, 0xdc, 0x34, 0x7e, 0x4d, 0x4c, 0x4b, 0x19, 0xa2, - 0x94, 0xba, 0x9f, 0xb8, 0xee, 0x5e, 0x12, 0xba, 0xf4, 0xe5, 0x9f, 0x69, 0x32, 0x14, 0xa9, 0x4a, - 0xfd, 0xc0, 0xdc, 0xb3, 0xff, 0x50, 0xaa, 0xd3, 0x87, 0x7b, 0x7d, 0x5f, 0x6e, 0xd0, 0x23, 0x9f, - 0xd3, 0x28, 0x77, 0xd1, 0x1b, 0xb8, 0x3b, 0x83, 0x2f, 0xe7, 0xa6, 0x9f, 0x01, 0x00, 0x00, 0xff, - 0xff, 0xdd, 0xb5, 0x50, 0x6f, 0xa2, 0x07, 0x00, 0x00, + // 664 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0xdd, 0x6e, 0xd3, 0x4c, + 0x10, 0xfd, 0x9c, 0x26, 0x4d, 0x3b, 0x49, 0xfd, 0x85, 0x2d, 0x55, 0xdd, 0x14, 0x89, 0xc8, 0x5c, + 0x60, 0x90, 0x48, 0x51, 0x10, 0x5c, 0x20, 0x01, 0x2a, 0x6d, 0x2a, 0x2a, 0xb5, 0x4d, 0xb1, 0x9b, + 0xeb, 0x68, 0x9b, 0x4c, 0x5d, 0x4b, 0xfe, 0xc3, 0xbb, 0xae, 0x48, 0x2f, 0x78, 0x19, 0x1e, 0x82, + 0x0b, 0x5e, 0x0e, 0xed, 0xda, 0x4e, 0x9c, 0xd4, 0x15, 0x0d, 0x7f, 0x57, 0xf1, 0x9e, 0x39, 0x33, + 0x3b, 0x67, 0xe6, 0xd8, 0x81, 0x4d, 0x3b, 0x0a, 0x87, 0x03, 0x8e, 0x8c, 0x3b, 0xbe, 0xbd, 0x23, + 0x7e, 0xdb, 0x61, 0x14, 0xf0, 0x80, 0xd4, 0x45, 0xa0, 0x9d, 0x06, 0xf4, 0x2a, 0x54, 0xba, 0x5e, + 0xc8, 0xc7, 0xfa, 0x11, 0x54, 0x4f, 0xe9, 0xd8, 0x0d, 0xe8, 0x88, 0x3c, 0x83, 0x32, 0x1f, 0x87, + 0xa8, 0x29, 0x2d, 0xc5, 0x50, 0x3b, 0x5b, 0xed, 0x7c, 0x42, 0x3b, 0x25, 0x9d, 0x8d, 0x43, 0x34, + 0x25, 0x8d, 0x10, 0x28, 0x9f, 0x07, 0xa3, 0xb1, 0x56, 0x6a, 0x29, 0x46, 0xdd, 0x94, 0xcf, 0xfa, + 0x6b, 0x80, 0xee, 0xf0, 0x32, 0xb0, 0x38, 0xe5, 0x31, 0x13, 0x8c, 0x61, 0x30, 0x4a, 0x0a, 0x56, + 0x4c, 0xf9, 0x4c, 0x34, 0xa8, 0x7a, 0xc8, 0x18, 0xb5, 0x51, 0x26, 0xae, 0x9a, 0xd9, 0x51, 0xff, + 0x56, 0x82, 0x35, 0xcb, 0xf1, 0x42, 0x17, 0x4d, 0xfc, 0x14, 0x23, 0xe3, 0xe4, 0x2d, 0xac, 0x45, + 0xc8, 0xc2, 0xc0, 0x67, 0x38, 0xb8, 0x5b, 0x67, 0xf5, 0x8c, 0x2f, 0x4e, 0xe4, 0x51, 0x2e, 0x9f, + 0x39, 0xd7, 0xc9, 0x8d, 0x95, 0x29, 0xc9, 0x72, 0xae, 0x91, 0xec, 0x40, 0x35, 0x4c, 0x2a, 0x68, + 0x4b, 0x2d, 0xc5, 0xa8, 0x75, 0x36, 0x0a, 0xcb, 0x9b, 0x19, 0x4b, 0x54, 0xbd, 0x70, 0x5c, 0x77, + 0x10, 0x33, 0x8c, 0x7c, 0xea, 0xa1, 0x56, 0x6e, 0x29, 0xc6, 0x8a, 0x59, 0x17, 0x60, 0x3f, 0xc5, + 0x88, 0x01, 0x0d, 0x49, 0x0a, 0x68, 0xcc, 0x2f, 0x07, 0x6c, 0x18, 0x84, 0xa8, 0x55, 0x24, 0x4f, + 0x15, 0x78, 0x4f, 0xc0, 0x96, 0x40, 0xc9, 0x2e, 0xfc, 0x3f, 0x6d, 0x52, 0xce, 0x4d, 0xab, 0xca, + 0x3e, 0xb4, 0xd9, 0x3e, 0xa6, 0x73, 0x35, 0xd5, 0x89, 0x00, 0x79, 0xd6, 0xbf, 0x80, 0x9a, 0x0d, + 0x2e, 0xc1, 0xf3, 0xa2, 0x94, 0x3b, 0x89, 0x6a, 0xc2, 0xca, 0x44, 0x4f, 0xb2, 0x97, 0xc9, 0x99, + 0x3c, 0x84, 0x5a, 0x5e, 0xc6, 0x92, 0x0c, 0x43, 0x30, 0x91, 0xa0, 0x1f, 0xc1, 0x96, 0xc5, 0x23, + 0xa4, 0x9e, 0xe3, 0xdb, 0x87, 0x7e, 0x18, 0xf3, 0x3d, 0xea, 0xba, 0xd9, 0x12, 0x17, 0x6d, 0x45, + 0x3f, 0x83, 0x66, 0x51, 0xb5, 0x54, 0xd9, 0x2b, 0xd8, 0xa4, 0xb6, 0x1d, 0xa1, 0x4d, 0x39, 0x8e, + 0x06, 0x69, 0x4e, 0xb2, 0xdd, 0xc4, 0x66, 0x1b, 0xd3, 0x70, 0x5a, 0x5a, 0xac, 0x59, 0x3f, 0x04, + 0x92, 0xd5, 0x38, 0xa5, 0x11, 0xf5, 0x90, 0x63, 0x24, 0x1d, 0x9a, 0x4b, 0x95, 0xcf, 0x42, 0xae, + 0xe3, 0x73, 0x8c, 0xae, 0xa8, 0xd8, 0x71, 0xea, 0x19, 0xc8, 0xa0, 0x3e, 0xd3, 0xbf, 0x96, 0x72, + 0x1d, 0xf6, 0x62, 0x3e, 0x27, 0xf8, 0x77, 0x5d, 0xfb, 0x11, 0xd6, 0x27, 0xf9, 0xe1, 0xa4, 0x55, + 0xad, 0xd4, 0x5a, 0x32, 0x6a, 0x9d, 0xd6, 0x6c, 0x95, 0x9b, 0x92, 0x4c, 0x12, 0xdd, 0x94, 0xb9, + 0xb0, 0xc7, 0xff, 0x80, 0x29, 0x4f, 0x60, 0xbb, 0x70, 0x48, 0xbf, 0xe8, 0xd0, 0xa7, 0xef, 0xa0, + 0x96, 0x9b, 0x19, 0x69, 0x40, 0x7d, 0xaf, 0x77, 0x7c, 0x6a, 0x76, 0x2d, 0x6b, 0xf7, 0xfd, 0x51, + 0xb7, 0xf1, 0x1f, 0x21, 0xa0, 0xf6, 0x4f, 0x66, 0x30, 0x85, 0x00, 0x2c, 0x9b, 0xbb, 0x27, 0xfb, + 0xbd, 0xe3, 0x46, 0xa9, 0xf3, 0xbd, 0x0c, 0xb5, 0x33, 0x64, 0xdc, 0xc2, 0xe8, 0xca, 0x19, 0x22, + 0x79, 0x09, 0xab, 0xf2, 0x13, 0x28, 0xda, 0x22, 0xeb, 0x73, 0xba, 0x44, 0xa0, 0x59, 0x04, 0x92, + 0x03, 0x58, 0xed, 0xfb, 0x34, 0x4a, 0xd2, 0xb6, 0x67, 0x19, 0x33, 0x9f, 0xaf, 0xe6, 0x83, 0xe2, + 0x60, 0x3a, 0x00, 0x17, 0xd6, 0x0b, 0xe6, 0x43, 0x8c, 0xb9, 0xa4, 0x5b, 0x7d, 0xd6, 0x7c, 0x72, + 0x07, 0x66, 0x72, 0xd7, 0x73, 0x85, 0x38, 0x40, 0x6e, 0xbe, 0x54, 0xe4, 0xf1, 0x2d, 0x25, 0xe6, + 0x5f, 0xe2, 0xa6, 0xf1, 0x73, 0x62, 0x72, 0x95, 0x21, 0xae, 0x52, 0x0f, 0x62, 0xd7, 0xdd, 0x8f, + 0x43, 0x17, 0x3f, 0xff, 0x35, 0x4d, 0x86, 0x22, 0x55, 0xa9, 0x1f, 0xa8, 0x7b, 0xf1, 0x0f, 0xae, + 0xea, 0xf4, 0xe1, 0x7e, 0xdf, 0x97, 0x1b, 0xf4, 0xd0, 0xe7, 0x38, 0xca, 0x5c, 0xf4, 0x06, 0xee, + 0xcd, 0xe0, 0x8b, 0xb9, 0xe9, 0x7c, 0x59, 0xfe, 0x39, 0xbf, 0xf8, 0x11, 0x00, 0x00, 0xff, 0xff, + 0x87, 0xd4, 0xf3, 0x98, 0xb7, 0x07, 0x00, 0x00, } diff --git a/vendor/google.golang.org/grpc/interop/grpc_testing/test.proto b/vendor/google.golang.org/grpc/interop/grpc_testing/test.proto index cc2bb74..f9f303d 100644 --- a/vendor/google.golang.org/grpc/interop/grpc_testing/test.proto +++ b/vendor/google.golang.org/grpc/interop/grpc_testing/test.proto @@ -1,6 +1,20 @@ +// Copyright 2017 gRPC authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + // An integration test service that covers all the method signature permutations // of unary/streaming requests/responses. -syntax = "proto2"; +syntax = "proto3"; package grpc.testing; @@ -21,58 +35,58 @@ enum PayloadType { // A block of data, to simply increase gRPC message size. message Payload { // The type of data in body. - optional PayloadType type = 1; + PayloadType type = 1; // Primary contents of payload. - optional bytes body = 2; + bytes body = 2; } // A protobuf representation for grpc status. This is used by test // clients to specify a status that the server should attempt to return. message EchoStatus { - optional int32 code = 1; - optional string message = 2; + int32 code = 1; + string message = 2; } // Unary request. message SimpleRequest { // Desired payload type in the response from the server. // If response_type is RANDOM, server randomly chooses one from other formats. - optional PayloadType response_type = 1; + PayloadType response_type = 1; // Desired payload size in the response from the server. // If response_type is COMPRESSABLE, this denotes the size before compression. - optional int32 response_size = 2; + int32 response_size = 2; // Optional input payload sent along with the request. - optional Payload payload = 3; + Payload payload = 3; // Whether SimpleResponse should include username. - optional bool fill_username = 4; + bool fill_username = 4; // Whether SimpleResponse should include OAuth scope. - optional bool fill_oauth_scope = 5; + bool fill_oauth_scope = 5; // Whether server should return a given status - optional EchoStatus response_status = 7; + EchoStatus response_status = 7; } // Unary response, as configured by the request. message SimpleResponse { // Payload to increase message size. - optional Payload payload = 1; + Payload payload = 1; // The user the request came from, for verifying authentication was // successful when the client expected it. - optional string username = 2; + string username = 2; // OAuth scope. - optional string oauth_scope = 3; + string oauth_scope = 3; } // Client-streaming request. message StreamingInputCallRequest { // Optional input payload sent along with the request. - optional Payload payload = 1; + Payload payload = 1; // Not expecting any payload from the response. } @@ -80,18 +94,18 @@ message StreamingInputCallRequest { // Client-streaming response. message StreamingInputCallResponse { // Aggregated size of payloads received from the client. - optional int32 aggregated_payload_size = 1; + int32 aggregated_payload_size = 1; } // Configuration for a particular response. message ResponseParameters { // Desired payload sizes in responses from the server. // If response_type is COMPRESSABLE, this denotes the size before compression. - optional int32 size = 1; + int32 size = 1; // Desired interval between consecutive responses in the response stream in // microseconds. - optional int32 interval_us = 2; + int32 interval_us = 2; } // Server-streaming request. @@ -100,22 +114,22 @@ message StreamingOutputCallRequest { // If response_type is RANDOM, the payload from each response in the stream // might be of different types. This is to simulate a mixed type of payload // stream. - optional PayloadType response_type = 1; + PayloadType response_type = 1; // Configuration for each expected response message. repeated ResponseParameters response_parameters = 2; // Optional input payload sent along with the request. - optional Payload payload = 3; + Payload payload = 3; // Whether server should return a given status - optional EchoStatus response_status = 7; + EchoStatus response_status = 7; } // Server-streaming response, as configured by the request and parameters. message StreamingOutputCallResponse { // Payload to increase response size. - optional Payload payload = 1; + Payload payload = 1; } // A simple service to test the various types of RPCs and experiment with diff --git a/vendor/google.golang.org/grpc/interop/http2/negative_http2_client.go b/vendor/google.golang.org/grpc/interop/http2/negative_http2_client.go index 9c09ad7..1806d46 100644 --- a/vendor/google.golang.org/grpc/interop/http2/negative_http2_client.go +++ b/vendor/google.golang.org/grpc/interop/http2/negative_http2_client.go @@ -1,33 +1,18 @@ /* * - * Copyright 2016, Google Inc. - * All rights reserved. + * Copyright 2016 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * * * Client used to test http2 error edge cases like GOAWAYs and RST_STREAMs @@ -45,13 +30,13 @@ import ( "sync" "time" - "github.com/golang/protobuf/proto" "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/interop" testpb "google.golang.org/grpc/interop/grpc_testing" + "google.golang.org/grpc/status" ) var ( @@ -72,8 +57,8 @@ var ( func largeSimpleRequest() *testpb.SimpleRequest { pl := interop.ClientNewPayload(testpb.PayloadType_COMPRESSABLE, largeReqSize) return &testpb.SimpleRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), - ResponseSize: proto.Int32(int32(largeRespSize)), + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseSize: int32(largeRespSize), Payload: pl, } } @@ -93,8 +78,8 @@ func rstAfterHeader(tc testpb.TestServiceClient) { if reply != nil { grpclog.Fatalf("Client received reply despite server sending rst stream after header") } - if grpc.Code(err) != codes.Internal { - grpclog.Fatalf("%v.UnaryCall() = _, %v, want _, %v", tc, grpc.Code(err), codes.Internal) + if status.Code(err) != codes.Internal { + grpclog.Fatalf("%v.UnaryCall() = _, %v, want _, %v", tc, status.Code(err), codes.Internal) } } @@ -104,8 +89,8 @@ func rstDuringData(tc testpb.TestServiceClient) { if reply != nil { grpclog.Fatalf("Client received reply despite server sending rst stream during data") } - if grpc.Code(err) != codes.Unknown { - grpclog.Fatalf("%v.UnaryCall() = _, %v, want _, %v", tc, grpc.Code(err), codes.Unknown) + if status.Code(err) != codes.Unknown { + grpclog.Fatalf("%v.UnaryCall() = _, %v, want _, %v", tc, status.Code(err), codes.Unknown) } } @@ -115,8 +100,8 @@ func rstAfterData(tc testpb.TestServiceClient) { if reply != nil { grpclog.Fatalf("Client received reply despite server sending rst stream after data") } - if grpc.Code(err) != codes.Internal { - grpclog.Fatalf("%v.UnaryCall() = _, %v, want _, %v", tc, grpc.Code(err), codes.Internal) + if status.Code(err) != codes.Internal { + grpclog.Fatalf("%v.UnaryCall() = _, %v, want _, %v", tc, status.Code(err), codes.Internal) } } diff --git a/vendor/google.golang.org/grpc/interop/server/server.go b/vendor/google.golang.org/grpc/interop/server/server.go index 36ebcb6..49d54e8 100644 --- a/vendor/google.golang.org/grpc/interop/server/server.go +++ b/vendor/google.golang.org/grpc/interop/server/server.go @@ -1,33 +1,18 @@ /* * - * Copyright 2014, Google Inc. - * All rights reserved. + * Copyright 2014 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -40,20 +25,26 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/credentials" + "google.golang.org/grpc/credentials/alts" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/interop" testpb "google.golang.org/grpc/interop/grpc_testing" + "google.golang.org/grpc/testdata" ) var ( useTLS = flag.Bool("use_tls", false, "Connection uses TLS if true, else plain TCP") - certFile = flag.String("tls_cert_file", "testdata/server1.pem", "The TLS cert file") - keyFile = flag.String("tls_key_file", "testdata/server1.key", "The TLS key file") + useALTS = flag.Bool("use_alts", false, "Connection uses ALTS if true (this option can only be used on GCP)") + certFile = flag.String("tls_cert_file", "", "The TLS cert file") + keyFile = flag.String("tls_key_file", "", "The TLS key file") port = flag.Int("port", 10000, "The server port") ) func main() { flag.Parse() + if *useTLS && *useALTS { + grpclog.Fatalf("use_tls and use_alts cannot be both set to true") + } p := strconv.Itoa(*port) lis, err := net.Listen("tcp", ":"+p) if err != nil { @@ -61,11 +52,20 @@ func main() { } var opts []grpc.ServerOption if *useTLS { + if *certFile == "" { + *certFile = testdata.Path("server1.pem") + } + if *keyFile == "" { + *keyFile = testdata.Path("server1.key") + } creds, err := credentials.NewServerTLSFromFile(*certFile, *keyFile) if err != nil { grpclog.Fatalf("Failed to generate credentials %v", err) } - opts = []grpc.ServerOption{grpc.Creds(creds)} + opts = append(opts, grpc.Creds(creds)) + } else if *useALTS { + altsTC := alts.NewServerCreds() + opts = append(opts, grpc.Creds(altsTC)) } server := grpc.NewServer(opts...) testpb.RegisterTestServiceServer(server, interop.NewTestServer()) diff --git a/vendor/google.golang.org/grpc/interop/server/testdata/ca.pem b/vendor/google.golang.org/grpc/interop/server/testdata/ca.pem deleted file mode 100644 index 6c8511a..0000000 --- a/vendor/google.golang.org/grpc/interop/server/testdata/ca.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICSjCCAbOgAwIBAgIJAJHGGR4dGioHMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV -BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX -aWRnaXRzIFB0eSBMdGQxDzANBgNVBAMTBnRlc3RjYTAeFw0xNDExMTEyMjMxMjla -Fw0yNDExMDgyMjMxMjlaMFYxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0 -YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDzANBgNVBAMT -BnRlc3RjYTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwEDfBV5MYdlHVHJ7 -+L4nxrZy7mBfAVXpOc5vMYztssUI7mL2/iYujiIXM+weZYNTEpLdjyJdu7R5gGUu -g1jSVK/EPHfc74O7AyZU34PNIP4Sh33N+/A5YexrNgJlPY+E3GdVYi4ldWJjgkAd -Qah2PH5ACLrIIC6tRka9hcaBlIECAwEAAaMgMB4wDAYDVR0TBAUwAwEB/zAOBgNV -HQ8BAf8EBAMCAgQwDQYJKoZIhvcNAQELBQADgYEAHzC7jdYlzAVmddi/gdAeKPau -sPBG/C2HCWqHzpCUHcKuvMzDVkY/MP2o6JIW2DBbY64bO/FceExhjcykgaYtCH/m -oIU63+CFOTtR7otyQAWHqXa7q4SbCDlG7DyRFxqG0txPtGvy12lgldA2+RgcigQG -Dfcog5wrJytaQ6UA0wE= ------END CERTIFICATE----- diff --git a/vendor/google.golang.org/grpc/interop/server/testdata/server1.key b/vendor/google.golang.org/grpc/interop/server/testdata/server1.key deleted file mode 100644 index 143a5b8..0000000 --- a/vendor/google.golang.org/grpc/interop/server/testdata/server1.key +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAOHDFScoLCVJpYDD -M4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlumN+fm+AjPEK5GHhGn1BgzkWF+slf -3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wHNVX77fBZOgp9VlSMVfyd9N8YwbBY -AckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAECgYAn7qGnM2vbjJNBm0VZCkOkTIWm -V10okw7EPJrdL2mkre9NasghNXbE1y5zDshx5Nt3KsazKOxTT8d0Jwh/3KbaN+YY -tTCbKGW0pXDRBhwUHRcuRzScjli8Rih5UOCiZkhefUTcRb6xIhZJuQy71tjaSy0p -dHZRmYyBYO2YEQ8xoQJBAPrJPhMBkzmEYFtyIEqAxQ/o/A6E+E4w8i+KM7nQCK7q -K4JXzyXVAjLfyBZWHGM2uro/fjqPggGD6QH1qXCkI4MCQQDmdKeb2TrKRh5BY1LR -81aJGKcJ2XbcDu6wMZK4oqWbTX2KiYn9GB0woM6nSr/Y6iy1u145YzYxEV/iMwff -DJULAkB8B2MnyzOg0pNFJqBJuH29bKCcHa8gHJzqXhNO5lAlEbMK95p/P2Wi+4Hd -aiEIAF1BF326QJcvYKmwSmrORp85AkAlSNxRJ50OWrfMZnBgzVjDx3xG6KsFQVk2 -ol6VhqL6dFgKUORFUWBvnKSyhjJxurlPEahV6oo6+A+mPhFY8eUvAkAZQyTdupP3 -XEFQKctGz+9+gKkemDp7LBBMEMBXrGTLPhpEfcjv/7KPdnFHYmhYeBTBnuVmTVWe -F98XJ7tIFfJq ------END PRIVATE KEY----- diff --git a/vendor/google.golang.org/grpc/interop/server/testdata/server1.pem b/vendor/google.golang.org/grpc/interop/server/testdata/server1.pem deleted file mode 100644 index f3d43fc..0000000 --- a/vendor/google.golang.org/grpc/interop/server/testdata/server1.pem +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICnDCCAgWgAwIBAgIBBzANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJBVTET -MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQ -dHkgTHRkMQ8wDQYDVQQDEwZ0ZXN0Y2EwHhcNMTUxMTA0MDIyMDI0WhcNMjUxMTAx -MDIyMDI0WjBlMQswCQYDVQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNV -BAcTB0NoaWNhZ28xFTATBgNVBAoTDEV4YW1wbGUsIENvLjEaMBgGA1UEAxQRKi50 -ZXN0Lmdvb2dsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOHDFSco -LCVJpYDDM4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlumN+fm+AjPEK5GHhGn1Bg -zkWF+slf3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wHNVX77fBZOgp9VlSMVfyd -9N8YwbBYAckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAGjazBpMAkGA1UdEwQCMAAw -CwYDVR0PBAQDAgXgME8GA1UdEQRIMEaCECoudGVzdC5nb29nbGUuZnKCGHdhdGVy -em9vaS50ZXN0Lmdvb2dsZS5iZYISKi50ZXN0LnlvdXR1YmUuY29thwTAqAEDMA0G -CSqGSIb3DQEBCwUAA4GBAJFXVifQNub1LUP4JlnX5lXNlo8FxZ2a12AFQs+bzoJ6 -hM044EDjqyxUqSbVePK0ni3w1fHQB5rY9yYC5f8G7aqqTY1QOhoUk8ZTSTRpnkTh -y4jjdvTZeLDVBlueZUTDRmy2feY5aZIU18vFDK08dTG0A87pppuv1LNIR3loveU8 ------END CERTIFICATE----- diff --git a/vendor/google.golang.org/grpc/interop/test_utils.go b/vendor/google.golang.org/grpc/interop/test_utils.go index 15ec008..c3cd3fc 100644 --- a/vendor/google.golang.org/grpc/interop/test_utils.go +++ b/vendor/google.golang.org/grpc/interop/test_utils.go @@ -1,36 +1,23 @@ /* * - * Copyright 2014, Google Inc. - * All rights reserved. + * Copyright 2014 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ +//go:generate protoc --go_out=plugins=grpc:. grpc_testing/test.proto + package interop import ( @@ -49,6 +36,7 @@ import ( "google.golang.org/grpc/grpclog" testpb "google.golang.org/grpc/interop/grpc_testing" "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" ) var ( @@ -74,7 +62,7 @@ func ClientNewPayload(t testpb.PayloadType, size int) *testpb.Payload { grpclog.Fatalf("Unsupported payload type: %d", t) } return &testpb.Payload{ - Type: t.Enum(), + Type: t, Body: body, } } @@ -94,8 +82,8 @@ func DoEmptyUnaryCall(tc testpb.TestServiceClient, args ...grpc.CallOption) { func DoLargeUnaryCall(tc testpb.TestServiceClient, args ...grpc.CallOption) { pl := ClientNewPayload(testpb.PayloadType_COMPRESSABLE, largeReqSize) req := &testpb.SimpleRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), - ResponseSize: proto.Int32(int32(largeRespSize)), + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseSize: int32(largeRespSize), Payload: pl, } reply, err := tc.UnaryCall(context.Background(), req, args...) @@ -140,11 +128,11 @@ func DoServerStreaming(tc testpb.TestServiceClient, args ...grpc.CallOption) { respParam := make([]*testpb.ResponseParameters, len(respSizes)) for i, s := range respSizes { respParam[i] = &testpb.ResponseParameters{ - Size: proto.Int32(int32(s)), + Size: int32(s), } } req := &testpb.StreamingOutputCallRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseType: testpb.PayloadType_COMPRESSABLE, ResponseParameters: respParam, } stream, err := tc.StreamingOutputCall(context.Background(), req, args...) @@ -189,12 +177,12 @@ func DoPingPong(tc testpb.TestServiceClient, args ...grpc.CallOption) { for index < len(reqSizes) { respParam := []*testpb.ResponseParameters{ { - Size: proto.Int32(int32(respSizes[index])), + Size: int32(respSizes[index]), }, } pl := ClientNewPayload(testpb.PayloadType_COMPRESSABLE, reqSizes[index]) req := &testpb.StreamingOutputCallRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseType: testpb.PayloadType_COMPRESSABLE, ResponseParameters: respParam, Payload: pl, } @@ -243,22 +231,20 @@ func DoTimeoutOnSleepingServer(tc testpb.TestServiceClient, args ...grpc.CallOpt defer cancel() stream, err := tc.FullDuplexCall(ctx, args...) if err != nil { - if grpc.Code(err) == codes.DeadlineExceeded { + if status.Code(err) == codes.DeadlineExceeded { return } grpclog.Fatalf("%v.FullDuplexCall(_) = _, %v", tc, err) } pl := ClientNewPayload(testpb.PayloadType_COMPRESSABLE, 27182) req := &testpb.StreamingOutputCallRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseType: testpb.PayloadType_COMPRESSABLE, Payload: pl, } - if err := stream.Send(req); err != nil { - if grpc.Code(err) != codes.DeadlineExceeded { - grpclog.Fatalf("%v.Send(_) = %v", stream, err) - } + if err := stream.Send(req); err != nil && err != io.EOF { + grpclog.Fatalf("%v.Send(_) = %v", stream, err) } - if _, err := stream.Recv(); grpc.Code(err) != codes.DeadlineExceeded { + if _, err := stream.Recv(); status.Code(err) != codes.DeadlineExceeded { grpclog.Fatalf("%v.Recv() = _, %v, want error code %d", stream, err, codes.DeadlineExceeded) } } @@ -267,11 +253,11 @@ func DoTimeoutOnSleepingServer(tc testpb.TestServiceClient, args ...grpc.CallOpt func DoComputeEngineCreds(tc testpb.TestServiceClient, serviceAccount, oauthScope string) { pl := ClientNewPayload(testpb.PayloadType_COMPRESSABLE, largeReqSize) req := &testpb.SimpleRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), - ResponseSize: proto.Int32(int32(largeRespSize)), + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseSize: int32(largeRespSize), Payload: pl, - FillUsername: proto.Bool(true), - FillOauthScope: proto.Bool(true), + FillUsername: true, + FillOauthScope: true, } reply, err := tc.UnaryCall(context.Background(), req) if err != nil { @@ -299,11 +285,11 @@ func getServiceAccountJSONKey(keyFile string) []byte { func DoServiceAccountCreds(tc testpb.TestServiceClient, serviceAccountKeyFile, oauthScope string) { pl := ClientNewPayload(testpb.PayloadType_COMPRESSABLE, largeReqSize) req := &testpb.SimpleRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), - ResponseSize: proto.Int32(int32(largeRespSize)), + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseSize: int32(largeRespSize), Payload: pl, - FillUsername: proto.Bool(true), - FillOauthScope: proto.Bool(true), + FillUsername: true, + FillOauthScope: true, } reply, err := tc.UnaryCall(context.Background(), req) if err != nil { @@ -324,10 +310,10 @@ func DoServiceAccountCreds(tc testpb.TestServiceClient, serviceAccountKeyFile, o func DoJWTTokenCreds(tc testpb.TestServiceClient, serviceAccountKeyFile string) { pl := ClientNewPayload(testpb.PayloadType_COMPRESSABLE, largeReqSize) req := &testpb.SimpleRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), - ResponseSize: proto.Int32(int32(largeRespSize)), + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseSize: int32(largeRespSize), Payload: pl, - FillUsername: proto.Bool(true), + FillUsername: true, } reply, err := tc.UnaryCall(context.Background(), req) if err != nil { @@ -358,11 +344,11 @@ func GetToken(serviceAccountKeyFile string, oauthScope string) *oauth2.Token { func DoOauth2TokenCreds(tc testpb.TestServiceClient, serviceAccountKeyFile, oauthScope string) { pl := ClientNewPayload(testpb.PayloadType_COMPRESSABLE, largeReqSize) req := &testpb.SimpleRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), - ResponseSize: proto.Int32(int32(largeRespSize)), + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseSize: int32(largeRespSize), Payload: pl, - FillUsername: proto.Bool(true), - FillOauthScope: proto.Bool(true), + FillUsername: true, + FillOauthScope: true, } reply, err := tc.UnaryCall(context.Background(), req) if err != nil { @@ -384,14 +370,14 @@ func DoPerRPCCreds(tc testpb.TestServiceClient, serviceAccountKeyFile, oauthScop jsonKey := getServiceAccountJSONKey(serviceAccountKeyFile) pl := ClientNewPayload(testpb.PayloadType_COMPRESSABLE, largeReqSize) req := &testpb.SimpleRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), - ResponseSize: proto.Int32(int32(largeRespSize)), + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseSize: int32(largeRespSize), Payload: pl, - FillUsername: proto.Bool(true), - FillOauthScope: proto.Bool(true), + FillUsername: true, + FillOauthScope: true, } token := GetToken(serviceAccountKeyFile, oauthScope) - kv := map[string]string{"authorization": token.TokenType + " " + token.AccessToken} + kv := map[string]string{"authorization": token.Type() + " " + token.AccessToken} ctx := metadata.NewOutgoingContext(context.Background(), metadata.MD{"authorization": []string{kv["authorization"]}}) reply, err := tc.UnaryCall(ctx, req) if err != nil { @@ -407,12 +393,10 @@ func DoPerRPCCreds(tc testpb.TestServiceClient, serviceAccountKeyFile, oauthScop } } -var ( - testMetadata = metadata.MD{ - "key1": []string{"value1"}, - "key2": []string{"value2"}, - } -) +var testMetadata = metadata.MD{ + "key1": []string{"value1"}, + "key2": []string{"value2"}, +} // DoCancelAfterBegin cancels the RPC after metadata has been sent but before payloads are sent. func DoCancelAfterBegin(tc testpb.TestServiceClient, args ...grpc.CallOption) { @@ -423,8 +407,8 @@ func DoCancelAfterBegin(tc testpb.TestServiceClient, args ...grpc.CallOption) { } cancel() _, err = stream.CloseAndRecv() - if grpc.Code(err) != codes.Canceled { - grpclog.Fatalf("%v.CloseAndRecv() got error code %d, want %d", stream, grpc.Code(err), codes.Canceled) + if status.Code(err) != codes.Canceled { + grpclog.Fatalf("%v.CloseAndRecv() got error code %d, want %d", stream, status.Code(err), codes.Canceled) } } @@ -437,12 +421,12 @@ func DoCancelAfterFirstResponse(tc testpb.TestServiceClient, args ...grpc.CallOp } respParam := []*testpb.ResponseParameters{ { - Size: proto.Int32(31415), + Size: 31415, }, } pl := ClientNewPayload(testpb.PayloadType_COMPRESSABLE, 27182) req := &testpb.StreamingOutputCallRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseType: testpb.PayloadType_COMPRESSABLE, ResponseParameters: respParam, Payload: pl, } @@ -453,8 +437,8 @@ func DoCancelAfterFirstResponse(tc testpb.TestServiceClient, args ...grpc.CallOp grpclog.Fatalf("%v.Recv() = %v", stream, err) } cancel() - if _, err := stream.Recv(); grpc.Code(err) != codes.Canceled { - grpclog.Fatalf("%v compleled with error code %d, want %d", stream, grpc.Code(err), codes.Canceled) + if _, err := stream.Recv(); status.Code(err) != codes.Canceled { + grpclog.Fatalf("%v compleled with error code %d, want %d", stream, status.Code(err), codes.Canceled) } } @@ -487,8 +471,8 @@ func DoCustomMetadata(tc testpb.TestServiceClient, args ...grpc.CallOption) { // Testing with UnaryCall. pl := ClientNewPayload(testpb.PayloadType_COMPRESSABLE, 1) req := &testpb.SimpleRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), - ResponseSize: proto.Int32(int32(1)), + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseSize: int32(1), Payload: pl, } ctx := metadata.NewOutgoingContext(context.Background(), customMetadata) @@ -516,11 +500,11 @@ func DoCustomMetadata(tc testpb.TestServiceClient, args ...grpc.CallOption) { } respParam := []*testpb.ResponseParameters{ { - Size: proto.Int32(1), + Size: 1, }, } streamReq := &testpb.StreamingOutputCallRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseType: testpb.PayloadType_COMPRESSABLE, ResponseParameters: respParam, Payload: pl, } @@ -548,10 +532,10 @@ func DoCustomMetadata(tc testpb.TestServiceClient, args ...grpc.CallOption) { func DoStatusCodeAndMessage(tc testpb.TestServiceClient, args ...grpc.CallOption) { var code int32 = 2 msg := "test status message" - expectedErr := grpc.Errorf(codes.Code(code), msg) + expectedErr := status.Error(codes.Code(code), msg) respStatus := &testpb.EchoStatus{ - Code: proto.Int32(code), - Message: proto.String(msg), + Code: code, + Message: msg, } // Test UnaryCall. req := &testpb.SimpleRequest{ @@ -582,15 +566,15 @@ func DoStatusCodeAndMessage(tc testpb.TestServiceClient, args ...grpc.CallOption // DoUnimplementedService attempts to call a method from an unimplemented service. func DoUnimplementedService(tc testpb.UnimplementedServiceClient) { _, err := tc.UnimplementedCall(context.Background(), &testpb.Empty{}) - if grpc.Code(err) != codes.Unimplemented { - grpclog.Fatalf("%v.UnimplementedCall() = _, %v, want _, %v", tc, grpc.Code(err), codes.Unimplemented) + if status.Code(err) != codes.Unimplemented { + grpclog.Fatalf("%v.UnimplementedCall() = _, %v, want _, %v", tc, status.Code(err), codes.Unimplemented) } } // DoUnimplementedMethod attempts to call an unimplemented method. func DoUnimplementedMethod(cc *grpc.ClientConn) { var req, reply proto.Message - if err := grpc.Invoke(context.Background(), "/grpc.testing.TestService/UnimplementedCall", req, reply, cc); err == nil || grpc.Code(err) != codes.Unimplemented { + if err := grpc.Invoke(context.Background(), "/grpc.testing.TestService/UnimplementedCall", req, reply, cc); err == nil || status.Code(err) != codes.Unimplemented { grpclog.Fatalf("grpc.Invoke(_, _, _, _, _) = %v, want error code %s", err, codes.Unimplemented) } } @@ -620,13 +604,13 @@ func serverNewPayload(t testpb.PayloadType, size int32) (*testpb.Payload, error) return nil, fmt.Errorf("unsupported payload type: %d", t) } return &testpb.Payload{ - Type: t.Enum(), + Type: t, Body: body, }, nil } func (s *testServer) UnaryCall(ctx context.Context, in *testpb.SimpleRequest) (*testpb.SimpleResponse, error) { - status := in.GetResponseStatus() + st := in.GetResponseStatus() if md, ok := metadata.FromIncomingContext(ctx); ok { if initialMetadata, ok := md[initialMetadataKey]; ok { header := metadata.Pairs(initialMetadataKey, initialMetadata[0]) @@ -637,8 +621,8 @@ func (s *testServer) UnaryCall(ctx context.Context, in *testpb.SimpleRequest) (* grpc.SetTrailer(ctx, trailer) } } - if status != nil && *status.Code != 0 { - return nil, grpc.Errorf(codes.Code(*status.Code), *status.Message) + if st != nil && st.Code != 0 { + return nil, status.Error(codes.Code(st.Code), st.Message) } pl, err := serverNewPayload(in.GetResponseType(), in.GetResponseSize()) if err != nil { @@ -674,7 +658,7 @@ func (s *testServer) StreamingInputCall(stream testpb.TestService_StreamingInput in, err := stream.Recv() if err == io.EOF { return stream.SendAndClose(&testpb.StreamingInputCallResponse{ - AggregatedPayloadSize: proto.Int32(int32(sum)), + AggregatedPayloadSize: int32(sum), }) } if err != nil { @@ -705,9 +689,9 @@ func (s *testServer) FullDuplexCall(stream testpb.TestService_FullDuplexCallServ if err != nil { return err } - status := in.GetResponseStatus() - if status != nil && *status.Code != 0 { - return grpc.Errorf(codes.Code(*status.Code), *status.Message) + st := in.GetResponseStatus() + if st != nil && st.Code != 0 { + return status.Error(codes.Code(st.Code), st.Message) } cs := in.GetResponseParameters() for _, c := range cs { diff --git a/vendor/google.golang.org/grpc/keepalive/keepalive.go b/vendor/google.golang.org/grpc/keepalive/keepalive.go index 0f855ff..f8adc7e 100644 --- a/vendor/google.golang.org/grpc/keepalive/keepalive.go +++ b/vendor/google.golang.org/grpc/keepalive/keepalive.go @@ -1,33 +1,18 @@ /* * - * Copyright 2017, Google Inc. - * All rights reserved. + * Copyright 2017 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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/google.golang.org/grpc/metadata/metadata.go b/vendor/google.golang.org/grpc/metadata/metadata.go index 0668813..e7c9946 100644 --- a/vendor/google.golang.org/grpc/metadata/metadata.go +++ b/vendor/google.golang.org/grpc/metadata/metadata.go @@ -1,38 +1,24 @@ /* * - * Copyright 2014, Google Inc. - * All rights reserved. + * Copyright 2014 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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 metadata define the structure of the metadata supported by gRPC library. -// Please refer to http://www.grpc.io/docs/guides/wire.html for more information about custom-metadata. +// Please refer to https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md +// for more information about custom-metadata. package metadata // import "google.golang.org/grpc/metadata" import ( @@ -52,7 +38,16 @@ func DecodeKeyValue(k, v string) (string, string, error) { type MD map[string][]string // New creates an MD from a given key-value map. -// Keys are automatically converted to lowercase. +// +// Only the following ASCII characters are allowed in keys: +// - digits: 0-9 +// - uppercase letters: A-Z (normalized to lower) +// - lowercase letters: a-z +// - special characters: -_. +// Uppercase letters are automatically converted to lowercase. +// +// Keys beginning with "grpc-" are reserved for grpc-internal use only and may +// result in errors if set in metadata. func New(m map[string]string) MD { md := MD{} for k, val := range m { @@ -64,7 +59,16 @@ func New(m map[string]string) MD { // Pairs returns an MD formed by the mapping of key, value ... // Pairs panics if len(kv) is odd. -// Keys are automatically converted to lowercase. +// +// Only the following ASCII characters are allowed in keys: +// - digits: 0-9 +// - uppercase letters: A-Z (normalized to lower) +// - lowercase letters: a-z +// - special characters: -_. +// Uppercase letters are automatically converted to lowercase. +// +// Keys beginning with "grpc-" are reserved for grpc-internal use only and may +// result in errors if set in metadata. func Pairs(kv ...string) MD { if len(kv)%2 == 1 { panic(fmt.Sprintf("metadata: Pairs got the odd number of input pairs for metadata: %d", len(kv))) @@ -107,24 +111,31 @@ func Join(mds ...MD) MD { type mdIncomingKey struct{} type mdOutgoingKey struct{} -// NewContext is a wrapper for NewOutgoingContext(ctx, md). Deprecated. -func NewContext(ctx context.Context, md MD) context.Context { - return NewOutgoingContext(ctx, md) -} - // NewIncomingContext creates a new context with incoming md attached. func NewIncomingContext(ctx context.Context, md MD) context.Context { return context.WithValue(ctx, mdIncomingKey{}, md) } -// NewOutgoingContext creates a new context with outgoing md attached. +// NewOutgoingContext creates a new context with outgoing md attached. If used +// in conjunction with AppendToOutgoingContext, NewOutgoingContext will +// overwrite any previously-appended metadata. func NewOutgoingContext(ctx context.Context, md MD) context.Context { - return context.WithValue(ctx, mdOutgoingKey{}, md) + return context.WithValue(ctx, mdOutgoingKey{}, rawMD{md: md}) } -// FromContext is a wrapper for FromIncomingContext(ctx). Deprecated. -func FromContext(ctx context.Context) (md MD, ok bool) { - return FromIncomingContext(ctx) +// AppendToOutgoingContext returns a new context with the provided kv merged +// with any existing metadata in the context. Please refer to the +// documentation of Pairs for a description of kv. +func AppendToOutgoingContext(ctx context.Context, kv ...string) context.Context { + if len(kv)%2 == 1 { + panic(fmt.Sprintf("metadata: AppendToOutgoingContext got an odd number of input pairs for metadata: %d", len(kv))) + } + md, _ := ctx.Value(mdOutgoingKey{}).(rawMD) + added := make([][]string, len(md.added)+1) + copy(added, md.added) + added[len(added)-1] = make([]string, len(kv)) + copy(added[len(added)-1], kv) + return context.WithValue(ctx, mdOutgoingKey{}, rawMD{md: md.md, added: added}) } // FromIncomingContext returns the incoming metadata in ctx if it exists. The @@ -135,10 +146,39 @@ func FromIncomingContext(ctx context.Context) (md MD, ok bool) { return } +// FromOutgoingContextRaw returns the un-merged, intermediary contents +// of rawMD. Remember to perform strings.ToLower on the keys. The returned +// MD should not be modified. Writing to it may cause races. Modification +// should be made to copies of the returned MD. +// +// This is intended for gRPC-internal use ONLY. +func FromOutgoingContextRaw(ctx context.Context) (MD, [][]string, bool) { + raw, ok := ctx.Value(mdOutgoingKey{}).(rawMD) + if !ok { + return nil, nil, false + } + + return raw.md, raw.added, true +} + // FromOutgoingContext returns the outgoing metadata in ctx if it exists. The // returned MD should not be modified. Writing to it may cause races. -// Modification should be made to the copies of the returned MD. -func FromOutgoingContext(ctx context.Context) (md MD, ok bool) { - md, ok = ctx.Value(mdOutgoingKey{}).(MD) - return +// Modification should be made to copies of the returned MD. +func FromOutgoingContext(ctx context.Context) (MD, bool) { + raw, ok := ctx.Value(mdOutgoingKey{}).(rawMD) + if !ok { + return nil, false + } + + mds := make([]MD, 0, len(raw.added)+1) + mds = append(mds, raw.md) + for _, vv := range raw.added { + mds = append(mds, Pairs(vv...)) + } + return Join(mds...), ok +} + +type rawMD struct { + md MD + added [][]string } diff --git a/vendor/google.golang.org/grpc/metadata/metadata_test.go b/vendor/google.golang.org/grpc/metadata/metadata_test.go index bd982cc..526e0b6 100644 --- a/vendor/google.golang.org/grpc/metadata/metadata_test.go +++ b/vendor/google.golang.org/grpc/metadata/metadata_test.go @@ -1,33 +1,18 @@ /* * - * Copyright 2014, Google Inc. - * All rights reserved. + * Copyright 2014 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -35,7 +20,10 @@ package metadata import ( "reflect" + "strconv" "testing" + + "golang.org/x/net/context" ) func TestPairsMD(t *testing.T) { @@ -84,3 +72,96 @@ func TestJoin(t *testing.T) { } } } + +func TestAppendToOutgoingContext(t *testing.T) { + // Pre-existing metadata + ctx := NewOutgoingContext(context.Background(), Pairs("k1", "v1", "k2", "v2")) + ctx = AppendToOutgoingContext(ctx, "k1", "v3") + ctx = AppendToOutgoingContext(ctx, "k1", "v4") + md, ok := FromOutgoingContext(ctx) + if !ok { + t.Errorf("Expected MD to exist in ctx, but got none") + } + want := Pairs("k1", "v1", "k1", "v3", "k1", "v4", "k2", "v2") + if !reflect.DeepEqual(md, want) { + t.Errorf("context's metadata is %v, want %v", md, want) + } + + // No existing metadata + ctx = AppendToOutgoingContext(context.Background(), "k1", "v1") + md, ok = FromOutgoingContext(ctx) + if !ok { + t.Errorf("Expected MD to exist in ctx, but got none") + } + want = Pairs("k1", "v1") + if !reflect.DeepEqual(md, want) { + t.Errorf("context's metadata is %v, want %v", md, want) + } +} + +func TestAppendToOutgoingContext_Repeated(t *testing.T) { + ctx := context.Background() + + for i := 0; i < 100; i = i + 2 { + ctx1 := AppendToOutgoingContext(ctx, "k", strconv.Itoa(i)) + ctx2 := AppendToOutgoingContext(ctx, "k", strconv.Itoa(i+1)) + + md1, _ := FromOutgoingContext(ctx1) + md2, _ := FromOutgoingContext(ctx2) + + if reflect.DeepEqual(md1, md2) { + t.Fatalf("md1, md2 = %v, %v; should not be equal", md1, md2) + } + + ctx = ctx1 + } +} + +func TestAppendToOutgoingContext_FromKVSlice(t *testing.T) { + const k, v = "a", "b" + kv := []string{k, v} + ctx := AppendToOutgoingContext(context.Background(), kv...) + md, _ := FromOutgoingContext(ctx) + if md[k][0] != v { + t.Fatalf("md[%q] = %q; want %q", k, md[k], v) + } + kv[1] = "xxx" + md, _ = FromOutgoingContext(ctx) + if md[k][0] != v { + t.Fatalf("md[%q] = %q; want %q", k, md[k], v) + } +} + +// Old/slow approach to adding metadata to context +func Benchmark_AddingMetadata_ContextManipulationApproach(b *testing.B) { + // TODO: Add in N=1-100 tests once Go1.6 support is removed. + const num = 10 + for n := 0; n < b.N; n++ { + ctx := context.Background() + for i := 0; i < num; i++ { + md, _ := FromOutgoingContext(ctx) + NewOutgoingContext(ctx, Join(Pairs("k1", "v1", "k2", "v2"), md)) + } + } +} + +// Newer/faster approach to adding metadata to context +func BenchmarkAppendToOutgoingContext(b *testing.B) { + const num = 10 + for n := 0; n < b.N; n++ { + ctx := context.Background() + for i := 0; i < num; i++ { + ctx = AppendToOutgoingContext(ctx, "k1", "v1", "k2", "v2") + } + } +} + +func BenchmarkFromOutgoingContext(b *testing.B) { + ctx := context.Background() + ctx = NewOutgoingContext(ctx, MD{"k3": {"v3", "v4"}}) + ctx = AppendToOutgoingContext(ctx, "k1", "v1", "k2", "v2") + + for n := 0; n < b.N; n++ { + FromOutgoingContext(ctx) + } +} diff --git a/vendor/google.golang.org/grpc/naming/dns_resolver.go b/vendor/google.golang.org/grpc/naming/dns_resolver.go new file mode 100644 index 0000000..7e69a2c --- /dev/null +++ b/vendor/google.golang.org/grpc/naming/dns_resolver.go @@ -0,0 +1,290 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package naming + +import ( + "errors" + "fmt" + "net" + "strconv" + "time" + + "golang.org/x/net/context" + "google.golang.org/grpc/grpclog" +) + +const ( + defaultPort = "443" + defaultFreq = time.Minute * 30 +) + +var ( + errMissingAddr = errors.New("missing address") + errWatcherClose = errors.New("watcher has been closed") +) + +// NewDNSResolverWithFreq creates a DNS Resolver that can resolve DNS names, and +// create watchers that poll the DNS server using the frequency set by freq. +func NewDNSResolverWithFreq(freq time.Duration) (Resolver, error) { + return &dnsResolver{freq: freq}, nil +} + +// NewDNSResolver creates a DNS Resolver that can resolve DNS names, and create +// watchers that poll the DNS server using the default frequency defined by defaultFreq. +func NewDNSResolver() (Resolver, error) { + return NewDNSResolverWithFreq(defaultFreq) +} + +// dnsResolver handles name resolution for names following the DNS scheme +type dnsResolver struct { + // frequency of polling the DNS server that the watchers created by this resolver will use. + freq time.Duration +} + +// formatIP returns ok = false if addr is not a valid textual representation of an IP address. +// If addr is an IPv4 address, return the addr and ok = true. +// If addr is an IPv6 address, return the addr enclosed in square brackets and ok = true. +func formatIP(addr string) (addrIP string, ok bool) { + ip := net.ParseIP(addr) + if ip == nil { + return "", false + } + if ip.To4() != nil { + return addr, true + } + return "[" + addr + "]", true +} + +// parseTarget takes the user input target string, returns formatted host and port info. +// If target doesn't specify a port, set the port to be the defaultPort. +// If target is in IPv6 format and host-name is enclosed in sqarue brackets, brackets +// are strippd when setting the host. +// examples: +// target: "www.google.com" returns host: "www.google.com", port: "443" +// target: "ipv4-host:80" returns host: "ipv4-host", port: "80" +// target: "[ipv6-host]" returns host: "ipv6-host", port: "443" +// target: ":80" returns host: "localhost", port: "80" +// target: ":" returns host: "localhost", port: "443" +func parseTarget(target string) (host, port string, err error) { + if target == "" { + return "", "", errMissingAddr + } + + if ip := net.ParseIP(target); ip != nil { + // target is an IPv4 or IPv6(without brackets) address + return target, defaultPort, nil + } + if host, port, err := net.SplitHostPort(target); err == nil { + // target has port, i.e ipv4-host:port, [ipv6-host]:port, host-name:port + if host == "" { + // Keep consistent with net.Dial(): If the host is empty, as in ":80", the local system is assumed. + host = "localhost" + } + if port == "" { + // If the port field is empty(target ends with colon), e.g. "[::1]:", defaultPort is used. + port = defaultPort + } + return host, port, nil + } + if host, port, err := net.SplitHostPort(target + ":" + defaultPort); err == nil { + // target doesn't have port + return host, port, nil + } + return "", "", fmt.Errorf("invalid target address %v", target) +} + +// Resolve creates a watcher that watches the name resolution of the target. +func (r *dnsResolver) Resolve(target string) (Watcher, error) { + host, port, err := parseTarget(target) + if err != nil { + return nil, err + } + + if net.ParseIP(host) != nil { + ipWatcher := &ipWatcher{ + updateChan: make(chan *Update, 1), + } + host, _ = formatIP(host) + ipWatcher.updateChan <- &Update{Op: Add, Addr: host + ":" + port} + return ipWatcher, nil + } + + ctx, cancel := context.WithCancel(context.Background()) + return &dnsWatcher{ + r: r, + host: host, + port: port, + ctx: ctx, + cancel: cancel, + t: time.NewTimer(0), + }, nil +} + +// dnsWatcher watches for the name resolution update for a specific target +type dnsWatcher struct { + r *dnsResolver + host string + port string + // The latest resolved address set + curAddrs map[string]*Update + ctx context.Context + cancel context.CancelFunc + t *time.Timer +} + +// ipWatcher watches for the name resolution update for an IP address. +type ipWatcher struct { + updateChan chan *Update +} + +// Next returns the adrress resolution Update for the target. For IP address, +// the resolution is itself, thus polling name server is unncessary. Therefore, +// Next() will return an Update the first time it is called, and will be blocked +// for all following calls as no Update exisits until watcher is closed. +func (i *ipWatcher) Next() ([]*Update, error) { + u, ok := <-i.updateChan + if !ok { + return nil, errWatcherClose + } + return []*Update{u}, nil +} + +// Close closes the ipWatcher. +func (i *ipWatcher) Close() { + close(i.updateChan) +} + +// AddressType indicates the address type returned by name resolution. +type AddressType uint8 + +const ( + // Backend indicates the server is a backend server. + Backend AddressType = iota + // GRPCLB indicates the server is a grpclb load balancer. + GRPCLB +) + +// AddrMetadataGRPCLB contains the information the name resolver for grpclb should provide. The +// name resolver used by the grpclb balancer is required to provide this type of metadata in +// its address updates. +type AddrMetadataGRPCLB struct { + // AddrType is the type of server (grpc load balancer or backend). + AddrType AddressType + // ServerName is the name of the grpc load balancer. Used for authentication. + ServerName string +} + +// compileUpdate compares the old resolved addresses and newly resolved addresses, +// and generates an update list +func (w *dnsWatcher) compileUpdate(newAddrs map[string]*Update) []*Update { + var res []*Update + for a, u := range w.curAddrs { + if _, ok := newAddrs[a]; !ok { + u.Op = Delete + res = append(res, u) + } + } + for a, u := range newAddrs { + if _, ok := w.curAddrs[a]; !ok { + res = append(res, u) + } + } + return res +} + +func (w *dnsWatcher) lookupSRV() map[string]*Update { + newAddrs := make(map[string]*Update) + _, srvs, err := lookupSRV(w.ctx, "grpclb", "tcp", w.host) + if err != nil { + grpclog.Infof("grpc: failed dns SRV record lookup due to %v.\n", err) + return nil + } + for _, s := range srvs { + lbAddrs, err := lookupHost(w.ctx, s.Target) + if err != nil { + grpclog.Warningf("grpc: failed load banlacer address dns lookup due to %v.\n", err) + continue + } + for _, a := range lbAddrs { + a, ok := formatIP(a) + if !ok { + grpclog.Errorf("grpc: failed IP parsing due to %v.\n", err) + continue + } + addr := a + ":" + strconv.Itoa(int(s.Port)) + newAddrs[addr] = &Update{Addr: addr, + Metadata: AddrMetadataGRPCLB{AddrType: GRPCLB, ServerName: s.Target}} + } + } + return newAddrs +} + +func (w *dnsWatcher) lookupHost() map[string]*Update { + newAddrs := make(map[string]*Update) + addrs, err := lookupHost(w.ctx, w.host) + if err != nil { + grpclog.Warningf("grpc: failed dns A record lookup due to %v.\n", err) + return nil + } + for _, a := range addrs { + a, ok := formatIP(a) + if !ok { + grpclog.Errorf("grpc: failed IP parsing due to %v.\n", err) + continue + } + addr := a + ":" + w.port + newAddrs[addr] = &Update{Addr: addr} + } + return newAddrs +} + +func (w *dnsWatcher) lookup() []*Update { + newAddrs := w.lookupSRV() + if newAddrs == nil { + // If failed to get any balancer address (either no corresponding SRV for the + // target, or caused by failure during resolution/parsing of the balancer target), + // return any A record info available. + newAddrs = w.lookupHost() + } + result := w.compileUpdate(newAddrs) + w.curAddrs = newAddrs + return result +} + +// Next returns the resolved address update(delta) for the target. If there's no +// change, it will sleep for 30 mins and try to resolve again after that. +func (w *dnsWatcher) Next() ([]*Update, error) { + for { + select { + case <-w.ctx.Done(): + return nil, errWatcherClose + case <-w.t.C: + } + result := w.lookup() + // Next lookup should happen after an interval defined by w.r.freq. + w.t.Reset(w.r.freq) + if len(result) > 0 { + return result, nil + } + } +} + +func (w *dnsWatcher) Close() { + w.cancel() +} diff --git a/vendor/google.golang.org/grpc/naming/dns_resolver_test.go b/vendor/google.golang.org/grpc/naming/dns_resolver_test.go new file mode 100644 index 0000000..be1ac1a --- /dev/null +++ b/vendor/google.golang.org/grpc/naming/dns_resolver_test.go @@ -0,0 +1,315 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package naming + +import ( + "fmt" + "net" + "reflect" + "sync" + "testing" + "time" +) + +func newUpdateWithMD(op Operation, addr, lb string) *Update { + return &Update{ + Op: op, + Addr: addr, + Metadata: AddrMetadataGRPCLB{AddrType: GRPCLB, ServerName: lb}, + } +} + +func toMap(u []*Update) map[string]*Update { + m := make(map[string]*Update) + for _, v := range u { + m[v.Addr] = v + } + return m +} + +func TestCompileUpdate(t *testing.T) { + tests := []struct { + oldAddrs []string + newAddrs []string + want []*Update + }{ + { + []string{}, + []string{"1.0.0.1"}, + []*Update{{Op: Add, Addr: "1.0.0.1"}}, + }, + { + []string{"1.0.0.1"}, + []string{"1.0.0.1"}, + []*Update{}, + }, + { + []string{"1.0.0.0"}, + []string{"1.0.0.1"}, + []*Update{{Op: Delete, Addr: "1.0.0.0"}, {Op: Add, Addr: "1.0.0.1"}}, + }, + { + []string{"1.0.0.1"}, + []string{"1.0.0.0"}, + []*Update{{Op: Add, Addr: "1.0.0.0"}, {Op: Delete, Addr: "1.0.0.1"}}, + }, + { + []string{"1.0.0.1"}, + []string{"1.0.0.1", "1.0.0.2", "1.0.0.3"}, + []*Update{{Op: Add, Addr: "1.0.0.2"}, {Op: Add, Addr: "1.0.0.3"}}, + }, + { + []string{"1.0.0.1", "1.0.0.2", "1.0.0.3"}, + []string{"1.0.0.0"}, + []*Update{{Op: Add, Addr: "1.0.0.0"}, {Op: Delete, Addr: "1.0.0.1"}, {Op: Delete, Addr: "1.0.0.2"}, {Op: Delete, Addr: "1.0.0.3"}}, + }, + { + []string{"1.0.0.1", "1.0.0.3", "1.0.0.5"}, + []string{"1.0.0.2", "1.0.0.3", "1.0.0.6"}, + []*Update{{Op: Delete, Addr: "1.0.0.1"}, {Op: Add, Addr: "1.0.0.2"}, {Op: Delete, Addr: "1.0.0.5"}, {Op: Add, Addr: "1.0.0.6"}}, + }, + { + []string{"1.0.0.1", "1.0.0.1", "1.0.0.2"}, + []string{"1.0.0.1"}, + []*Update{{Op: Delete, Addr: "1.0.0.2"}}, + }, + } + + var w dnsWatcher + for _, c := range tests { + w.curAddrs = make(map[string]*Update) + newUpdates := make(map[string]*Update) + for _, a := range c.oldAddrs { + w.curAddrs[a] = &Update{Addr: a} + } + for _, a := range c.newAddrs { + newUpdates[a] = &Update{Addr: a} + } + r := w.compileUpdate(newUpdates) + if !reflect.DeepEqual(toMap(c.want), toMap(r)) { + t.Errorf("w(%+v).compileUpdate(%+v) = %+v, want %+v", c.oldAddrs, c.newAddrs, updatesToSlice(r), updatesToSlice(c.want)) + } + } +} + +func TestResolveFunc(t *testing.T) { + tests := []struct { + addr string + want error + }{ + // TODO(yuxuanli): More false cases? + {"www.google.com", nil}, + {"foo.bar:12345", nil}, + {"127.0.0.1", nil}, + {"127.0.0.1:12345", nil}, + {"[::1]:80", nil}, + {"[2001:db8:a0b:12f0::1]:21", nil}, + {":80", nil}, + {"127.0.0...1:12345", nil}, + {"[fe80::1%lo0]:80", nil}, + {"golang.org:http", nil}, + {"[2001:db8::1]:http", nil}, + {":", nil}, + {"", errMissingAddr}, + {"[2001:db8:a0b:12f0::1", fmt.Errorf("invalid target address %v", "[2001:db8:a0b:12f0::1")}, + } + + r, err := NewDNSResolver() + if err != nil { + t.Errorf("%v", err) + } + for _, v := range tests { + _, err := r.Resolve(v.addr) + if !reflect.DeepEqual(err, v.want) { + t.Errorf("Resolve(%q) = %v, want %v", v.addr, err, v.want) + } + } +} + +var hostLookupTbl = map[string][]string{ + "foo.bar.com": {"1.2.3.4", "5.6.7.8"}, + "ipv4.single.fake": {"1.2.3.4"}, + "ipv4.multi.fake": {"1.2.3.4", "5.6.7.8", "9.10.11.12"}, + "ipv6.single.fake": {"2607:f8b0:400a:801::1001"}, + "ipv6.multi.fake": {"2607:f8b0:400a:801::1001", "2607:f8b0:400a:801::1002", "2607:f8b0:400a:801::1003"}, +} + +func hostLookup(host string) ([]string, error) { + if addrs, ok := hostLookupTbl[host]; ok { + return addrs, nil + } + return nil, fmt.Errorf("failed to lookup host:%s resolution in hostLookupTbl", host) +} + +var srvLookupTbl = map[string][]*net.SRV{ + "_grpclb._tcp.srv.ipv4.single.fake": {&net.SRV{Target: "ipv4.single.fake", Port: 1234}}, + "_grpclb._tcp.srv.ipv4.multi.fake": {&net.SRV{Target: "ipv4.multi.fake", Port: 1234}}, + "_grpclb._tcp.srv.ipv6.single.fake": {&net.SRV{Target: "ipv6.single.fake", Port: 1234}}, + "_grpclb._tcp.srv.ipv6.multi.fake": {&net.SRV{Target: "ipv6.multi.fake", Port: 1234}}, +} + +func srvLookup(service, proto, name string) (string, []*net.SRV, error) { + cname := "_" + service + "._" + proto + "." + name + if srvs, ok := srvLookupTbl[cname]; ok { + return cname, srvs, nil + } + return "", nil, fmt.Errorf("failed to lookup srv record for %s in srvLookupTbl", cname) +} + +func updatesToSlice(updates []*Update) []Update { + res := make([]Update, len(updates)) + for i, u := range updates { + res[i] = *u + } + return res +} + +func testResolver(t *testing.T, freq time.Duration, slp time.Duration) { + tests := []struct { + target string + want []*Update + }{ + { + "foo.bar.com", + []*Update{{Op: Add, Addr: "1.2.3.4" + colonDefaultPort}, {Op: Add, Addr: "5.6.7.8" + colonDefaultPort}}, + }, + { + "foo.bar.com:1234", + []*Update{{Op: Add, Addr: "1.2.3.4:1234"}, {Op: Add, Addr: "5.6.7.8:1234"}}, + }, + { + "srv.ipv4.single.fake", + []*Update{newUpdateWithMD(Add, "1.2.3.4:1234", "ipv4.single.fake")}, + }, + { + "srv.ipv4.multi.fake", + []*Update{ + newUpdateWithMD(Add, "1.2.3.4:1234", "ipv4.multi.fake"), + newUpdateWithMD(Add, "5.6.7.8:1234", "ipv4.multi.fake"), + newUpdateWithMD(Add, "9.10.11.12:1234", "ipv4.multi.fake")}, + }, + { + "srv.ipv6.single.fake", + []*Update{newUpdateWithMD(Add, "[2607:f8b0:400a:801::1001]:1234", "ipv6.single.fake")}, + }, + { + "srv.ipv6.multi.fake", + []*Update{ + newUpdateWithMD(Add, "[2607:f8b0:400a:801::1001]:1234", "ipv6.multi.fake"), + newUpdateWithMD(Add, "[2607:f8b0:400a:801::1002]:1234", "ipv6.multi.fake"), + newUpdateWithMD(Add, "[2607:f8b0:400a:801::1003]:1234", "ipv6.multi.fake"), + }, + }, + } + + for _, a := range tests { + r, err := NewDNSResolverWithFreq(freq) + if err != nil { + t.Fatalf("%v\n", err) + } + w, err := r.Resolve(a.target) + if err != nil { + t.Fatalf("%v\n", err) + } + updates, err := w.Next() + if err != nil { + t.Fatalf("%v\n", err) + } + if !reflect.DeepEqual(toMap(a.want), toMap(updates)) { + t.Errorf("Resolve(%q) = %+v, want %+v\n", a.target, updatesToSlice(updates), updatesToSlice(a.want)) + } + var wg sync.WaitGroup + wg.Add(1) + go func() { + defer wg.Done() + for { + _, err := w.Next() + if err != nil { + return + } + t.Error("Execution shouldn't reach here, since w.Next() should be blocked until close happen.") + } + }() + // Sleep for sometime to let watcher do more than one lookup + time.Sleep(slp) + w.Close() + wg.Wait() + } +} + +func TestResolve(t *testing.T) { + defer replaceNetFunc()() + testResolver(t, time.Millisecond*5, time.Millisecond*10) +} + +const colonDefaultPort = ":" + defaultPort + +func TestIPWatcher(t *testing.T) { + tests := []struct { + target string + want []*Update + }{ + {"127.0.0.1", []*Update{{Op: Add, Addr: "127.0.0.1" + colonDefaultPort}}}, + {"127.0.0.1:12345", []*Update{{Op: Add, Addr: "127.0.0.1:12345"}}}, + {"::1", []*Update{{Op: Add, Addr: "[::1]" + colonDefaultPort}}}, + {"[::1]:12345", []*Update{{Op: Add, Addr: "[::1]:12345"}}}, + {"[::1]:", []*Update{{Op: Add, Addr: "[::1]:443"}}}, + {"2001:db8:85a3::8a2e:370:7334", []*Update{{Op: Add, Addr: "[2001:db8:85a3::8a2e:370:7334]" + colonDefaultPort}}}, + {"[2001:db8:85a3::8a2e:370:7334]", []*Update{{Op: Add, Addr: "[2001:db8:85a3::8a2e:370:7334]" + colonDefaultPort}}}, + {"[2001:db8:85a3::8a2e:370:7334]:12345", []*Update{{Op: Add, Addr: "[2001:db8:85a3::8a2e:370:7334]:12345"}}}, + {"[2001:db8::1]:http", []*Update{{Op: Add, Addr: "[2001:db8::1]:http"}}}, + // TODO(yuxuanli): zone support? + } + + for _, v := range tests { + r, err := NewDNSResolverWithFreq(time.Millisecond * 5) + if err != nil { + t.Fatalf("%v\n", err) + } + w, err := r.Resolve(v.target) + if err != nil { + t.Fatalf("%v\n", err) + } + var updates []*Update + var wg sync.WaitGroup + wg.Add(1) + count := 0 + go func() { + defer wg.Done() + for { + u, err := w.Next() + if err != nil { + return + } + updates = u + count++ + } + }() + // Sleep for sometime to let watcher do more than one lookup + time.Sleep(time.Millisecond * 10) + w.Close() + wg.Wait() + if !reflect.DeepEqual(v.want, updates) { + t.Errorf("Resolve(%q) = %v, want %+v\n", v.target, updatesToSlice(updates), updatesToSlice(v.want)) + } + if count != 1 { + t.Errorf("IPWatcher Next() should return only once, not %d times\n", count) + } + } +} diff --git a/vendor/google.golang.org/grpc/naming/go17.go b/vendor/google.golang.org/grpc/naming/go17.go new file mode 100644 index 0000000..57b65d7 --- /dev/null +++ b/vendor/google.golang.org/grpc/naming/go17.go @@ -0,0 +1,34 @@ +// +build go1.6,!go1.8 + +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package naming + +import ( + "net" + + "golang.org/x/net/context" +) + +var ( + lookupHost = func(ctx context.Context, host string) ([]string, error) { return net.LookupHost(host) } + lookupSRV = func(ctx context.Context, service, proto, name string) (string, []*net.SRV, error) { + return net.LookupSRV(service, proto, name) + } +) diff --git a/vendor/google.golang.org/grpc/naming/go17_test.go b/vendor/google.golang.org/grpc/naming/go17_test.go new file mode 100644 index 0000000..db39b9a --- /dev/null +++ b/vendor/google.golang.org/grpc/naming/go17_test.go @@ -0,0 +1,42 @@ +// +build go1.6, !go1.8 + +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package naming + +import ( + "net" + + "golang.org/x/net/context" +) + +func replaceNetFunc() func() { + oldLookupHost := lookupHost + oldLookupSRV := lookupSRV + lookupHost = func(ctx context.Context, host string) ([]string, error) { + return hostLookup(host) + } + lookupSRV = func(ctx context.Context, service, proto, name string) (string, []*net.SRV, error) { + return srvLookup(service, proto, name) + } + return func() { + lookupHost = oldLookupHost + lookupSRV = oldLookupSRV + } +} diff --git a/vendor/google.golang.org/grpc/naming/go18.go b/vendor/google.golang.org/grpc/naming/go18.go new file mode 100644 index 0000000..b5a0f84 --- /dev/null +++ b/vendor/google.golang.org/grpc/naming/go18.go @@ -0,0 +1,28 @@ +// +build go1.8 + +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package naming + +import "net" + +var ( + lookupHost = net.DefaultResolver.LookupHost + lookupSRV = net.DefaultResolver.LookupSRV +) diff --git a/vendor/google.golang.org/grpc/naming/go18_test.go b/vendor/google.golang.org/grpc/naming/go18_test.go new file mode 100644 index 0000000..5e29753 --- /dev/null +++ b/vendor/google.golang.org/grpc/naming/go18_test.go @@ -0,0 +1,41 @@ +// +build go1.8 + +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package naming + +import ( + "context" + "net" +) + +func replaceNetFunc() func() { + oldLookupHost := lookupHost + oldLookupSRV := lookupSRV + lookupHost = func(ctx context.Context, host string) ([]string, error) { + return hostLookup(host) + } + lookupSRV = func(ctx context.Context, service, proto, name string) (string, []*net.SRV, error) { + return srvLookup(service, proto, name) + } + return func() { + lookupHost = oldLookupHost + lookupSRV = oldLookupSRV + } +} diff --git a/vendor/google.golang.org/grpc/naming/naming.go b/vendor/google.golang.org/grpc/naming/naming.go index c2e0871..1af7e32 100644 --- a/vendor/google.golang.org/grpc/naming/naming.go +++ b/vendor/google.golang.org/grpc/naming/naming.go @@ -1,33 +1,18 @@ /* * - * Copyright 2014, Google Inc. - * All rights reserved. + * Copyright 2014 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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/google.golang.org/grpc/peer/peer.go b/vendor/google.golang.org/grpc/peer/peer.go index fa7de9a..317b8b9 100644 --- a/vendor/google.golang.org/grpc/peer/peer.go +++ b/vendor/google.golang.org/grpc/peer/peer.go @@ -1,33 +1,18 @@ /* * - * Copyright 2014, Google Inc. - * All rights reserved. + * Copyright 2014 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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/google.golang.org/grpc/picker_wrapper.go b/vendor/google.golang.org/grpc/picker_wrapper.go new file mode 100644 index 0000000..4d00825 --- /dev/null +++ b/vendor/google.golang.org/grpc/picker_wrapper.go @@ -0,0 +1,158 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package grpc + +import ( + "sync" + + "golang.org/x/net/context" + "google.golang.org/grpc/balancer" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/status" + "google.golang.org/grpc/transport" +) + +// pickerWrapper is a wrapper of balancer.Picker. It blocks on certain pick +// actions and unblock when there's a picker update. +type pickerWrapper struct { + mu sync.Mutex + done bool + blockingCh chan struct{} + picker balancer.Picker + + // The latest connection happened. + connErrMu sync.Mutex + connErr error +} + +func newPickerWrapper() *pickerWrapper { + bp := &pickerWrapper{blockingCh: make(chan struct{})} + return bp +} + +func (bp *pickerWrapper) updateConnectionError(err error) { + bp.connErrMu.Lock() + bp.connErr = err + bp.connErrMu.Unlock() +} + +func (bp *pickerWrapper) connectionError() error { + bp.connErrMu.Lock() + err := bp.connErr + bp.connErrMu.Unlock() + return err +} + +// updatePicker is called by UpdateBalancerState. It unblocks all blocked pick. +func (bp *pickerWrapper) updatePicker(p balancer.Picker) { + bp.mu.Lock() + if bp.done { + bp.mu.Unlock() + return + } + bp.picker = p + // bp.blockingCh should never be nil. + close(bp.blockingCh) + bp.blockingCh = make(chan struct{}) + bp.mu.Unlock() +} + +// pick returns the transport that will be used for the RPC. +// It may block in the following cases: +// - there's no picker +// - the current picker returns ErrNoSubConnAvailable +// - the current picker returns other errors and failfast is false. +// - the subConn returned by the current picker is not READY +// When one of these situations happens, pick blocks until the picker gets updated. +func (bp *pickerWrapper) pick(ctx context.Context, failfast bool, opts balancer.PickOptions) (transport.ClientTransport, func(balancer.DoneInfo), error) { + var ( + p balancer.Picker + ch chan struct{} + ) + + for { + bp.mu.Lock() + if bp.done { + bp.mu.Unlock() + return nil, nil, ErrClientConnClosing + } + + if bp.picker == nil { + ch = bp.blockingCh + } + if ch == bp.blockingCh { + // This could happen when either: + // - bp.picker is nil (the previous if condition), or + // - has called pick on the current picker. + bp.mu.Unlock() + select { + case <-ctx.Done(): + return nil, nil, ctx.Err() + case <-ch: + } + continue + } + + ch = bp.blockingCh + p = bp.picker + bp.mu.Unlock() + + subConn, done, err := p.Pick(ctx, opts) + + if err != nil { + switch err { + case balancer.ErrNoSubConnAvailable: + continue + case balancer.ErrTransientFailure: + if !failfast { + continue + } + return nil, nil, status.Errorf(codes.Unavailable, "%v, latest connection error: %v", err, bp.connectionError()) + default: + // err is some other error. + return nil, nil, toRPCErr(err) + } + } + + acw, ok := subConn.(*acBalancerWrapper) + if !ok { + grpclog.Infof("subconn returned from pick is not *acBalancerWrapper") + continue + } + if t, ok := acw.getAddrConn().getReadyTransport(); ok { + return t, done, nil + } + grpclog.Infof("blockingPicker: the picked transport is not ready, loop back to repick") + // If ok == false, ac.state is not READY. + // A valid picker always returns READY subConn. This means the state of ac + // just changed, and picker will be updated shortly. + // continue back to the beginning of the for loop to repick. + } +} + +func (bp *pickerWrapper) close() { + bp.mu.Lock() + defer bp.mu.Unlock() + if bp.done { + return + } + bp.done = true + close(bp.blockingCh) +} diff --git a/vendor/google.golang.org/grpc/picker_wrapper_test.go b/vendor/google.golang.org/grpc/picker_wrapper_test.go new file mode 100644 index 0000000..37dffa9 --- /dev/null +++ b/vendor/google.golang.org/grpc/picker_wrapper_test.go @@ -0,0 +1,160 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package grpc + +import ( + "fmt" + "sync/atomic" + "testing" + "time" + + "golang.org/x/net/context" + "google.golang.org/grpc/balancer" + "google.golang.org/grpc/connectivity" + _ "google.golang.org/grpc/grpclog/glogger" + "google.golang.org/grpc/test/leakcheck" + "google.golang.org/grpc/transport" +) + +const goroutineCount = 5 + +var ( + testT = &testTransport{} + testSC = &acBalancerWrapper{ac: &addrConn{ + state: connectivity.Ready, + transport: testT, + }} + testSCNotReady = &acBalancerWrapper{ac: &addrConn{ + state: connectivity.TransientFailure, + }} +) + +type testTransport struct { + transport.ClientTransport +} + +type testingPicker struct { + err error + sc balancer.SubConn + maxCalled int64 +} + +func (p *testingPicker) Pick(ctx context.Context, opts balancer.PickOptions) (balancer.SubConn, func(balancer.DoneInfo), error) { + if atomic.AddInt64(&p.maxCalled, -1) < 0 { + return nil, nil, fmt.Errorf("Pick called to many times (> goroutineCount)") + } + if p.err != nil { + return nil, nil, p.err + } + return p.sc, nil, nil +} + +func TestBlockingPickTimeout(t *testing.T) { + defer leakcheck.Check(t) + bp := newPickerWrapper() + ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond) + defer cancel() + if _, _, err := bp.pick(ctx, true, balancer.PickOptions{}); err != context.DeadlineExceeded { + t.Errorf("bp.pick returned error %v, want DeadlineExceeded", err) + } +} + +func TestBlockingPick(t *testing.T) { + defer leakcheck.Check(t) + bp := newPickerWrapper() + // All goroutines should block because picker is nil in bp. + var finishedCount uint64 + for i := goroutineCount; i > 0; i-- { + go func() { + if tr, _, err := bp.pick(context.Background(), true, balancer.PickOptions{}); err != nil || tr != testT { + t.Errorf("bp.pick returned non-nil error: %v", err) + } + atomic.AddUint64(&finishedCount, 1) + }() + } + time.Sleep(50 * time.Millisecond) + if c := atomic.LoadUint64(&finishedCount); c != 0 { + t.Errorf("finished goroutines count: %v, want 0", c) + } + bp.updatePicker(&testingPicker{sc: testSC, maxCalled: goroutineCount}) +} + +func TestBlockingPickNoSubAvailable(t *testing.T) { + defer leakcheck.Check(t) + bp := newPickerWrapper() + var finishedCount uint64 + bp.updatePicker(&testingPicker{err: balancer.ErrNoSubConnAvailable, maxCalled: goroutineCount}) + // All goroutines should block because picker returns no sc available. + for i := goroutineCount; i > 0; i-- { + go func() { + if tr, _, err := bp.pick(context.Background(), true, balancer.PickOptions{}); err != nil || tr != testT { + t.Errorf("bp.pick returned non-nil error: %v", err) + } + atomic.AddUint64(&finishedCount, 1) + }() + } + time.Sleep(50 * time.Millisecond) + if c := atomic.LoadUint64(&finishedCount); c != 0 { + t.Errorf("finished goroutines count: %v, want 0", c) + } + bp.updatePicker(&testingPicker{sc: testSC, maxCalled: goroutineCount}) +} + +func TestBlockingPickTransientWaitforready(t *testing.T) { + defer leakcheck.Check(t) + bp := newPickerWrapper() + bp.updatePicker(&testingPicker{err: balancer.ErrTransientFailure, maxCalled: goroutineCount}) + var finishedCount uint64 + // All goroutines should block because picker returns transientFailure and + // picks are not failfast. + for i := goroutineCount; i > 0; i-- { + go func() { + if tr, _, err := bp.pick(context.Background(), false, balancer.PickOptions{}); err != nil || tr != testT { + t.Errorf("bp.pick returned non-nil error: %v", err) + } + atomic.AddUint64(&finishedCount, 1) + }() + } + time.Sleep(time.Millisecond) + if c := atomic.LoadUint64(&finishedCount); c != 0 { + t.Errorf("finished goroutines count: %v, want 0", c) + } + bp.updatePicker(&testingPicker{sc: testSC, maxCalled: goroutineCount}) +} + +func TestBlockingPickSCNotReady(t *testing.T) { + defer leakcheck.Check(t) + bp := newPickerWrapper() + bp.updatePicker(&testingPicker{sc: testSCNotReady, maxCalled: goroutineCount}) + var finishedCount uint64 + // All goroutines should block because sc is not ready. + for i := goroutineCount; i > 0; i-- { + go func() { + if tr, _, err := bp.pick(context.Background(), true, balancer.PickOptions{}); err != nil || tr != testT { + t.Errorf("bp.pick returned non-nil error: %v", err) + } + atomic.AddUint64(&finishedCount, 1) + }() + } + time.Sleep(time.Millisecond) + if c := atomic.LoadUint64(&finishedCount); c != 0 { + t.Errorf("finished goroutines count: %v, want 0", c) + } + bp.updatePicker(&testingPicker{sc: testSC, maxCalled: goroutineCount}) +} diff --git a/vendor/google.golang.org/grpc/pickfirst.go b/vendor/google.golang.org/grpc/pickfirst.go new file mode 100644 index 0000000..bf659d4 --- /dev/null +++ b/vendor/google.golang.org/grpc/pickfirst.go @@ -0,0 +1,108 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package grpc + +import ( + "golang.org/x/net/context" + "google.golang.org/grpc/balancer" + "google.golang.org/grpc/connectivity" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/resolver" +) + +// PickFirstBalancerName is the name of the pick_first balancer. +const PickFirstBalancerName = "pick_first" + +func newPickfirstBuilder() balancer.Builder { + return &pickfirstBuilder{} +} + +type pickfirstBuilder struct{} + +func (*pickfirstBuilder) Build(cc balancer.ClientConn, opt balancer.BuildOptions) balancer.Balancer { + return &pickfirstBalancer{cc: cc} +} + +func (*pickfirstBuilder) Name() string { + return PickFirstBalancerName +} + +type pickfirstBalancer struct { + cc balancer.ClientConn + sc balancer.SubConn +} + +func (b *pickfirstBalancer) HandleResolvedAddrs(addrs []resolver.Address, err error) { + if err != nil { + grpclog.Infof("pickfirstBalancer: HandleResolvedAddrs called with error %v", err) + return + } + if b.sc == nil { + b.sc, err = b.cc.NewSubConn(addrs, balancer.NewSubConnOptions{}) + if err != nil { + grpclog.Errorf("pickfirstBalancer: failed to NewSubConn: %v", err) + return + } + b.cc.UpdateBalancerState(connectivity.Idle, &picker{sc: b.sc}) + b.sc.Connect() + } else { + b.sc.UpdateAddresses(addrs) + b.sc.Connect() + } +} + +func (b *pickfirstBalancer) HandleSubConnStateChange(sc balancer.SubConn, s connectivity.State) { + grpclog.Infof("pickfirstBalancer: HandleSubConnStateChange: %p, %v", sc, s) + if b.sc != sc { + grpclog.Infof("pickfirstBalancer: ignored state change because sc is not recognized") + return + } + if s == connectivity.Shutdown { + b.sc = nil + return + } + + switch s { + case connectivity.Ready, connectivity.Idle: + b.cc.UpdateBalancerState(s, &picker{sc: sc}) + case connectivity.Connecting: + b.cc.UpdateBalancerState(s, &picker{err: balancer.ErrNoSubConnAvailable}) + case connectivity.TransientFailure: + b.cc.UpdateBalancerState(s, &picker{err: balancer.ErrTransientFailure}) + } +} + +func (b *pickfirstBalancer) Close() { +} + +type picker struct { + err error + sc balancer.SubConn +} + +func (p *picker) Pick(ctx context.Context, opts balancer.PickOptions) (balancer.SubConn, func(balancer.DoneInfo), error) { + if p.err != nil { + return nil, nil, p.err + } + return p.sc, nil, nil +} + +func init() { + balancer.Register(newPickfirstBuilder()) +} diff --git a/vendor/google.golang.org/grpc/pickfirst_test.go b/vendor/google.golang.org/grpc/pickfirst_test.go new file mode 100644 index 0000000..2f85feb --- /dev/null +++ b/vendor/google.golang.org/grpc/pickfirst_test.go @@ -0,0 +1,360 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package grpc + +import ( + "math" + "sync" + "testing" + "time" + + "golang.org/x/net/context" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/resolver" + "google.golang.org/grpc/resolver/manual" + "google.golang.org/grpc/status" + "google.golang.org/grpc/test/leakcheck" +) + +func errorDesc(err error) string { + if s, ok := status.FromError(err); ok { + return s.Message() + } + return err.Error() +} + +func TestOneBackendPickfirst(t *testing.T) { + defer leakcheck.Check(t) + r, rcleanup := manual.GenerateAndRegisterManualResolver() + defer rcleanup() + + numServers := 1 + servers, _, scleanup := startServers(t, numServers, math.MaxInt32) + defer scleanup() + + cc, err := Dial(r.Scheme()+":///test.server", WithInsecure(), WithCodec(testCodec{})) + if err != nil { + t.Fatalf("failed to dial: %v", err) + } + defer cc.Close() + // The first RPC should fail because there's no address. + ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond) + defer cancel() + req := "port" + var reply string + if err := Invoke(ctx, "/foo/bar", &req, &reply, cc); err == nil || status.Code(err) != codes.DeadlineExceeded { + t.Fatalf("EmptyCall() = _, %v, want _, DeadlineExceeded", err) + } + + r.NewAddress([]resolver.Address{{Addr: servers[0].addr}}) + // The second RPC should succeed. + for i := 0; i < 1000; i++ { + if err = Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err != nil && errorDesc(err) == servers[0].port { + return + } + time.Sleep(time.Millisecond) + } + t.Fatalf("EmptyCall() = _, %v, want _, %v", err, servers[0].port) +} + +func TestBackendsPickfirst(t *testing.T) { + defer leakcheck.Check(t) + r, rcleanup := manual.GenerateAndRegisterManualResolver() + defer rcleanup() + + numServers := 2 + servers, _, scleanup := startServers(t, numServers, math.MaxInt32) + defer scleanup() + + cc, err := Dial(r.Scheme()+":///test.server", WithInsecure(), WithCodec(testCodec{})) + if err != nil { + t.Fatalf("failed to dial: %v", err) + } + defer cc.Close() + // The first RPC should fail because there's no address. + ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond) + defer cancel() + req := "port" + var reply string + if err := Invoke(ctx, "/foo/bar", &req, &reply, cc); err == nil || status.Code(err) != codes.DeadlineExceeded { + t.Fatalf("EmptyCall() = _, %v, want _, DeadlineExceeded", err) + } + + r.NewAddress([]resolver.Address{{Addr: servers[0].addr}, {Addr: servers[1].addr}}) + // The second RPC should succeed with the first server. + for i := 0; i < 1000; i++ { + if err = Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err != nil && errorDesc(err) == servers[0].port { + return + } + time.Sleep(time.Millisecond) + } + t.Fatalf("EmptyCall() = _, %v, want _, %v", err, servers[0].port) +} + +func TestNewAddressWhileBlockingPickfirst(t *testing.T) { + defer leakcheck.Check(t) + r, rcleanup := manual.GenerateAndRegisterManualResolver() + defer rcleanup() + + numServers := 1 + servers, _, scleanup := startServers(t, numServers, math.MaxInt32) + defer scleanup() + + cc, err := Dial(r.Scheme()+":///test.server", WithInsecure(), WithCodec(testCodec{})) + if err != nil { + t.Fatalf("failed to dial: %v", err) + } + defer cc.Close() + // The first RPC should fail because there's no address. + ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond) + defer cancel() + req := "port" + var reply string + if err := Invoke(ctx, "/foo/bar", &req, &reply, cc); err == nil || status.Code(err) != codes.DeadlineExceeded { + t.Fatalf("EmptyCall() = _, %v, want _, DeadlineExceeded", err) + } + + var wg sync.WaitGroup + for i := 0; i < 3; i++ { + wg.Add(1) + go func() { + defer wg.Done() + // This RPC blocks until NewAddress is called. + Invoke(context.Background(), "/foo/bar", &req, &reply, cc) + }() + } + time.Sleep(50 * time.Millisecond) + r.NewAddress([]resolver.Address{{Addr: servers[0].addr}}) + wg.Wait() +} + +func TestCloseWithPendingRPCPickfirst(t *testing.T) { + defer leakcheck.Check(t) + r, rcleanup := manual.GenerateAndRegisterManualResolver() + defer rcleanup() + + numServers := 1 + _, _, scleanup := startServers(t, numServers, math.MaxInt32) + defer scleanup() + + cc, err := Dial(r.Scheme()+":///test.server", WithInsecure(), WithCodec(testCodec{})) + if err != nil { + t.Fatalf("failed to dial: %v", err) + } + defer cc.Close() + // The first RPC should fail because there's no address. + ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond) + defer cancel() + req := "port" + var reply string + if err := Invoke(ctx, "/foo/bar", &req, &reply, cc); err == nil || status.Code(err) != codes.DeadlineExceeded { + t.Fatalf("EmptyCall() = _, %v, want _, DeadlineExceeded", err) + } + + var wg sync.WaitGroup + for i := 0; i < 3; i++ { + wg.Add(1) + go func() { + defer wg.Done() + // This RPC blocks until NewAddress is called. + Invoke(context.Background(), "/foo/bar", &req, &reply, cc) + }() + } + time.Sleep(50 * time.Millisecond) + cc.Close() + wg.Wait() +} + +func TestOneServerDownPickfirst(t *testing.T) { + defer leakcheck.Check(t) + r, rcleanup := manual.GenerateAndRegisterManualResolver() + defer rcleanup() + + numServers := 2 + servers, _, scleanup := startServers(t, numServers, math.MaxInt32) + defer scleanup() + + cc, err := Dial(r.Scheme()+":///test.server", WithInsecure(), WithCodec(testCodec{}), WithWaitForHandshake()) + if err != nil { + t.Fatalf("failed to dial: %v", err) + } + defer cc.Close() + // The first RPC should fail because there's no address. + ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond) + defer cancel() + req := "port" + var reply string + if err := Invoke(ctx, "/foo/bar", &req, &reply, cc); err == nil || status.Code(err) != codes.DeadlineExceeded { + t.Fatalf("EmptyCall() = _, %v, want _, DeadlineExceeded", err) + } + + r.NewAddress([]resolver.Address{{Addr: servers[0].addr}, {Addr: servers[1].addr}}) + // The second RPC should succeed with the first server. + for i := 0; i < 1000; i++ { + if err = Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err != nil && errorDesc(err) == servers[0].port { + break + } + time.Sleep(time.Millisecond) + } + + servers[0].stop() + for i := 0; i < 1000; i++ { + if err = Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err != nil && errorDesc(err) == servers[1].port { + return + } + time.Sleep(time.Millisecond) + } + t.Fatalf("EmptyCall() = _, %v, want _, %v", err, servers[0].port) +} + +func TestAllServersDownPickfirst(t *testing.T) { + defer leakcheck.Check(t) + r, rcleanup := manual.GenerateAndRegisterManualResolver() + defer rcleanup() + + numServers := 2 + servers, _, scleanup := startServers(t, numServers, math.MaxInt32) + defer scleanup() + + cc, err := Dial(r.Scheme()+":///test.server", WithInsecure(), WithCodec(testCodec{}), WithWaitForHandshake()) + if err != nil { + t.Fatalf("failed to dial: %v", err) + } + defer cc.Close() + // The first RPC should fail because there's no address. + ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond) + defer cancel() + req := "port" + var reply string + if err := Invoke(ctx, "/foo/bar", &req, &reply, cc); err == nil || status.Code(err) != codes.DeadlineExceeded { + t.Fatalf("EmptyCall() = _, %v, want _, DeadlineExceeded", err) + } + + r.NewAddress([]resolver.Address{{Addr: servers[0].addr}, {Addr: servers[1].addr}}) + // The second RPC should succeed with the first server. + for i := 0; i < 1000; i++ { + if err = Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err != nil && errorDesc(err) == servers[0].port { + break + } + time.Sleep(time.Millisecond) + } + + for i := 0; i < numServers; i++ { + servers[i].stop() + } + for i := 0; i < 1000; i++ { + if err = Invoke(context.Background(), "/foo/bar", &req, &reply, cc); status.Code(err) == codes.Unavailable { + return + } + time.Sleep(time.Millisecond) + } + t.Fatalf("EmptyCall() = _, %v, want _, error with code unavailable", err) +} + +func TestAddressesRemovedPickfirst(t *testing.T) { + defer leakcheck.Check(t) + r, rcleanup := manual.GenerateAndRegisterManualResolver() + defer rcleanup() + + numServers := 3 + servers, _, scleanup := startServers(t, numServers, math.MaxInt32) + defer scleanup() + + cc, err := Dial(r.Scheme()+":///test.server", WithInsecure(), WithCodec(testCodec{})) + if err != nil { + t.Fatalf("failed to dial: %v", err) + } + defer cc.Close() + // The first RPC should fail because there's no address. + ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond) + defer cancel() + req := "port" + var reply string + if err := Invoke(ctx, "/foo/bar", &req, &reply, cc); err == nil || status.Code(err) != codes.DeadlineExceeded { + t.Fatalf("EmptyCall() = _, %v, want _, DeadlineExceeded", err) + } + + r.NewAddress([]resolver.Address{{Addr: servers[0].addr}, {Addr: servers[1].addr}, {Addr: servers[2].addr}}) + for i := 0; i < 1000; i++ { + if err = Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err != nil && errorDesc(err) == servers[0].port { + break + } + time.Sleep(time.Millisecond) + } + for i := 0; i < 20; i++ { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err == nil || errorDesc(err) != servers[0].port { + t.Fatalf("Index %d: Invoke(_, _, _, _, _) = %v, want %s", 0, err, servers[0].port) + } + time.Sleep(10 * time.Millisecond) + } + + // Remove server[0]. + r.NewAddress([]resolver.Address{{Addr: servers[1].addr}, {Addr: servers[2].addr}}) + for i := 0; i < 1000; i++ { + if err = Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err != nil && errorDesc(err) == servers[1].port { + break + } + time.Sleep(time.Millisecond) + } + for i := 0; i < 20; i++ { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err == nil || errorDesc(err) != servers[1].port { + t.Fatalf("Index %d: Invoke(_, _, _, _, _) = %v, want %s", 1, err, servers[1].port) + } + time.Sleep(10 * time.Millisecond) + } + + // Append server[0], nothing should change. + r.NewAddress([]resolver.Address{{Addr: servers[1].addr}, {Addr: servers[2].addr}, {Addr: servers[0].addr}}) + for i := 0; i < 20; i++ { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err == nil || errorDesc(err) != servers[1].port { + t.Fatalf("Index %d: Invoke(_, _, _, _, _) = %v, want %s", 1, err, servers[1].port) + } + time.Sleep(10 * time.Millisecond) + } + + // Remove server[1]. + r.NewAddress([]resolver.Address{{Addr: servers[2].addr}, {Addr: servers[0].addr}}) + for i := 0; i < 1000; i++ { + if err = Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err != nil && errorDesc(err) == servers[2].port { + break + } + time.Sleep(time.Millisecond) + } + for i := 0; i < 20; i++ { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err == nil || errorDesc(err) != servers[2].port { + t.Fatalf("Index %d: Invoke(_, _, _, _, _) = %v, want %s", 2, err, servers[2].port) + } + time.Sleep(10 * time.Millisecond) + } + + // Remove server[2]. + r.NewAddress([]resolver.Address{{Addr: servers[0].addr}}) + for i := 0; i < 1000; i++ { + if err = Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err != nil && errorDesc(err) == servers[0].port { + break + } + time.Sleep(time.Millisecond) + } + for i := 0; i < 20; i++ { + if err := Invoke(context.Background(), "/foo/bar", &req, &reply, cc); err == nil || errorDesc(err) != servers[0].port { + t.Fatalf("Index %d: Invoke(_, _, _, _, _) = %v, want %s", 0, err, servers[0].port) + } + time.Sleep(10 * time.Millisecond) + } +} diff --git a/vendor/google.golang.org/grpc/proxy.go b/vendor/google.golang.org/grpc/proxy.go index 10188dc..2d40236 100644 --- a/vendor/google.golang.org/grpc/proxy.go +++ b/vendor/google.golang.org/grpc/proxy.go @@ -1,33 +1,18 @@ /* * - * Copyright 2017, Google Inc. - * All rights reserved. + * Copyright 2017 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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/google.golang.org/grpc/proxy_test.go b/vendor/google.golang.org/grpc/proxy_test.go index bd00706..39ee123 100644 --- a/vendor/google.golang.org/grpc/proxy_test.go +++ b/vendor/google.golang.org/grpc/proxy_test.go @@ -1,33 +1,20 @@ +// +build !race + /* * - * Copyright 2017, Google Inc. - * All rights reserved. + * Copyright 2017 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -43,6 +30,7 @@ import ( "time" "golang.org/x/net/context" + "google.golang.org/grpc/test/leakcheck" ) const ( @@ -60,29 +48,6 @@ func overwrite(hpfe func(req *http.Request) (*url.URL, error)) func() { } } -func TestMapAddressEnv(t *testing.T) { - // Overwrite the function in the test and restore them in defer. - hpfe := func(req *http.Request) (*url.URL, error) { - if req.URL.Host == envTestAddr { - return &url.URL{ - Scheme: "https", - Host: envProxyAddr, - }, nil - } - return nil, nil - } - defer overwrite(hpfe)() - - // envTestAddr should be handled by ProxyFromEnvironment. - got, err := mapAddress(context.Background(), envTestAddr) - if err != nil { - t.Error(err) - } - if got != envProxyAddr { - t.Errorf("want %v, got %v", envProxyAddr, got) - } -} - type proxyServer struct { t *testing.T lis net.Listener @@ -133,6 +98,7 @@ func (p *proxyServer) stop() { } func TestHTTPConnect(t *testing.T) { + defer leakcheck.Check(t) plis, err := net.Listen("tcp", "localhost:0") if err != nil { t.Fatalf("failed to listen: %v", err) @@ -190,3 +156,27 @@ func TestHTTPConnect(t *testing.T) { t.Fatalf("received msg: %v, want %v", recvBuf, msg) } } + +func TestMapAddressEnv(t *testing.T) { + defer leakcheck.Check(t) + // Overwrite the function in the test and restore them in defer. + hpfe := func(req *http.Request) (*url.URL, error) { + if req.URL.Host == envTestAddr { + return &url.URL{ + Scheme: "https", + Host: envProxyAddr, + }, nil + } + return nil, nil + } + defer overwrite(hpfe)() + + // envTestAddr should be handled by ProxyFromEnvironment. + got, err := mapAddress(context.Background(), envTestAddr) + if err != nil { + t.Error(err) + } + if got != envProxyAddr { + t.Errorf("want %v, got %v", envProxyAddr, got) + } +} diff --git a/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection.pb.go b/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection.pb.go index 76987a4..b407253 100644 --- a/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection.pb.go +++ b/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection.pb.go @@ -1,12 +1,11 @@ -// Code generated by protoc-gen-go. -// source: reflection.proto -// DO NOT EDIT! +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: grpc_reflection_v1alpha/reflection.proto /* Package grpc_reflection_v1alpha is a generated protocol buffer package. It is generated from these files: - reflection.proto + grpc_reflection_v1alpha/reflection.proto It has these top-level messages: ServerReflectionRequest @@ -94,6 +93,13 @@ func (m *ServerReflectionRequest) GetMessageRequest() isServerReflectionRequest_ return nil } +func (m *ServerReflectionRequest) GetHost() string { + if m != nil { + return m.Host + } + return "" +} + func (m *ServerReflectionRequest) GetFileByFilename() string { if x, ok := m.GetMessageRequest().(*ServerReflectionRequest_FileByFilename); ok { return x.FileByFilename @@ -257,11 +263,25 @@ func (m *ExtensionRequest) String() string { return proto.CompactText func (*ExtensionRequest) ProtoMessage() {} func (*ExtensionRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } +func (m *ExtensionRequest) GetContainingType() string { + if m != nil { + return m.ContainingType + } + return "" +} + +func (m *ExtensionRequest) GetExtensionNumber() int32 { + if m != nil { + return m.ExtensionNumber + } + return 0 +} + // The message sent by the server to answer ServerReflectionInfo method. type ServerReflectionResponse struct { ValidHost string `protobuf:"bytes,1,opt,name=valid_host,json=validHost" json:"valid_host,omitempty"` OriginalRequest *ServerReflectionRequest `protobuf:"bytes,2,opt,name=original_request,json=originalRequest" json:"original_request,omitempty"` - // The server set one of the following fields accroding to the message_request + // The server set one of the following fields according to the message_request // in the request. // // Types that are valid to be assigned to MessageResponse: @@ -307,6 +327,13 @@ func (m *ServerReflectionResponse) GetMessageResponse() isServerReflectionRespon return nil } +func (m *ServerReflectionResponse) GetValidHost() string { + if m != nil { + return m.ValidHost + } + return "" +} + func (m *ServerReflectionResponse) GetOriginalRequest() *ServerReflectionRequest { if m != nil { return m.OriginalRequest @@ -469,13 +496,20 @@ func (m *FileDescriptorResponse) String() string { return proto.Compa func (*FileDescriptorResponse) ProtoMessage() {} func (*FileDescriptorResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } +func (m *FileDescriptorResponse) GetFileDescriptorProto() [][]byte { + if m != nil { + return m.FileDescriptorProto + } + return nil +} + // A list of extension numbers sent by the server answering // all_extension_numbers_of_type request. type ExtensionNumberResponse struct { // Full name of the base type, including the package name. The format // is . BaseTypeName string `protobuf:"bytes,1,opt,name=base_type_name,json=baseTypeName" json:"base_type_name,omitempty"` - ExtensionNumber []int32 `protobuf:"varint,2,rep,name=extension_number,json=extensionNumber" json:"extension_number,omitempty"` + ExtensionNumber []int32 `protobuf:"varint,2,rep,packed,name=extension_number,json=extensionNumber" json:"extension_number,omitempty"` } func (m *ExtensionNumberResponse) Reset() { *m = ExtensionNumberResponse{} } @@ -483,6 +517,20 @@ func (m *ExtensionNumberResponse) String() string { return proto.Comp func (*ExtensionNumberResponse) ProtoMessage() {} func (*ExtensionNumberResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } +func (m *ExtensionNumberResponse) GetBaseTypeName() string { + if m != nil { + return m.BaseTypeName + } + return "" +} + +func (m *ExtensionNumberResponse) GetExtensionNumber() []int32 { + if m != nil { + return m.ExtensionNumber + } + return nil +} + // A list of ServiceResponse sent by the server answering list_services request. type ListServiceResponse struct { // The information of each service may be expanded in the future, so we use @@ -515,6 +563,13 @@ func (m *ServiceResponse) String() string { return proto.CompactTextS func (*ServiceResponse) ProtoMessage() {} func (*ServiceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } +func (m *ServiceResponse) GetName() string { + if m != nil { + return m.Name + } + return "" +} + // The error code and error message sent by the server when an error occurs. type ErrorResponse struct { // This field uses the error codes defined in grpc::StatusCode. @@ -527,6 +582,20 @@ func (m *ErrorResponse) String() string { return proto.CompactTextStr func (*ErrorResponse) ProtoMessage() {} func (*ErrorResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } +func (m *ErrorResponse) GetErrorCode() int32 { + if m != nil { + return m.ErrorCode + } + return 0 +} + +func (m *ErrorResponse) GetErrorMessage() string { + if m != nil { + return m.ErrorMessage + } + return "" +} + func init() { proto.RegisterType((*ServerReflectionRequest)(nil), "grpc.reflection.v1alpha.ServerReflectionRequest") proto.RegisterType((*ExtensionRequest)(nil), "grpc.reflection.v1alpha.ExtensionRequest") @@ -643,52 +712,52 @@ var _ServerReflection_serviceDesc = grpc.ServiceDesc{ ClientStreams: true, }, }, - Metadata: "reflection.proto", + Metadata: "grpc_reflection_v1alpha/reflection.proto", } -func init() { proto.RegisterFile("reflection.proto", fileDescriptor0) } +func init() { proto.RegisterFile("grpc_reflection_v1alpha/reflection.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 646 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x94, 0x54, 0xdd, 0x6e, 0xd3, 0x4c, - 0x10, 0xfd, 0xd2, 0xe6, 0x47, 0x99, 0xfc, 0xf9, 0xdb, 0x86, 0xc4, 0x05, 0x15, 0x21, 0x43, 0x21, - 0x45, 0x28, 0xb4, 0x46, 0xe2, 0x01, 0x52, 0x40, 0x45, 0x2a, 0x2d, 0x72, 0xb8, 0x41, 0x5c, 0x58, - 0x8e, 0xb3, 0x4e, 0x0d, 0x8e, 0xd7, 0xec, 0xba, 0x81, 0x5c, 0xf1, 0x10, 0x3c, 0x14, 0xaf, 0xc4, - 0x25, 0xbb, 0xeb, 0x9f, 0x38, 0xae, 0x0d, 0xea, 0x95, 0xad, 0xb3, 0x33, 0x7b, 0x66, 0xe6, 0x9c, - 0x59, 0x50, 0x28, 0x76, 0x3c, 0x6c, 0x87, 0x2e, 0xf1, 0xc7, 0x01, 0x25, 0x21, 0x41, 0xc3, 0x05, - 0x0d, 0xec, 0x71, 0x06, 0x5e, 0x9d, 0x58, 0x5e, 0x70, 0x65, 0x69, 0xbf, 0x77, 0x60, 0x38, 0xc5, - 0x74, 0x85, 0xa9, 0x91, 0x1e, 0x1a, 0xf8, 0xeb, 0x35, 0x66, 0x21, 0x42, 0x50, 0xbd, 0x22, 0x2c, - 0x54, 0x2b, 0x0f, 0x2a, 0xa3, 0xa6, 0x21, 0xff, 0xd1, 0x53, 0x50, 0x1c, 0xd7, 0xc3, 0xe6, 0x6c, - 0x6d, 0x8a, 0xaf, 0x6f, 0x2d, 0xb1, 0xba, 0x2b, 0xce, 0xcf, 0xfe, 0x33, 0xba, 0x02, 0x99, 0xac, - 0xdf, 0xc4, 0x38, 0x7a, 0x09, 0x03, 0x19, 0x6b, 0x13, 0x3f, 0xb4, 0x5c, 0xdf, 0xf5, 0x17, 0x26, - 0x5b, 0x2f, 0x67, 0xc4, 0x53, 0xab, 0x71, 0x46, 0x5f, 0x9c, 0x9f, 0xa6, 0xc7, 0x53, 0x79, 0x8a, - 0x16, 0xb0, 0x9f, 0xcf, 0xc3, 0xdf, 0x43, 0xec, 0x33, 0x5e, 0x9b, 0x5a, 0xe3, 0xa9, 0x2d, 0xfd, - 0x68, 0x5c, 0xd2, 0xd0, 0xf8, 0x75, 0x12, 0x19, 0x77, 0xc1, 0x59, 0x86, 0xdb, 0x2c, 0x69, 0x04, - 0x9a, 0xc0, 0x81, 0xe5, 0x79, 0x9b, 0xcb, 0x4d, 0xff, 0x7a, 0x39, 0xc3, 0x94, 0x99, 0xc4, 0x31, - 0xc3, 0x75, 0x80, 0xd5, 0x7a, 0x5c, 0xe7, 0x3e, 0x0f, 0x4b, 0xd3, 0x2e, 0xa2, 0xa0, 0x4b, 0xe7, - 0x03, 0x0f, 0x41, 0x87, 0xd0, 0xf1, 0x5c, 0x16, 0x9a, 0x8c, 0x0f, 0xd1, 0xb5, 0x31, 0x53, 0x1b, - 0x71, 0x4e, 0x5b, 0xc0, 0xd3, 0x18, 0x9d, 0xfc, 0x0f, 0xbd, 0x25, 0x66, 0xcc, 0x5a, 0x60, 0x93, - 0x46, 0x85, 0x69, 0x0e, 0x28, 0xf9, 0x62, 0xd1, 0x13, 0xe8, 0x65, 0xba, 0x96, 0x35, 0x44, 0xd3, - 0xef, 0x6e, 0x60, 0x49, 0x7b, 0x04, 0x4a, 0xbe, 0x6c, 0x75, 0x87, 0x47, 0xd6, 0x8c, 0x1e, 0xde, - 0x2e, 0x54, 0xfb, 0x55, 0x05, 0xf5, 0xa6, 0xc4, 0x2c, 0x20, 0x3e, 0xc3, 0xe8, 0x00, 0x60, 0x65, - 0x79, 0xee, 0xdc, 0xcc, 0x28, 0xdd, 0x94, 0xc8, 0x99, 0x90, 0xfb, 0x13, 0x28, 0x84, 0xba, 0x0b, - 0xd7, 0xb7, 0xbc, 0xa4, 0x6e, 0x49, 0xd3, 0xd2, 0x8f, 0x4b, 0x15, 0x28, 0xb1, 0x93, 0xd1, 0x4b, - 0x6e, 0x4a, 0x9a, 0xfd, 0x02, 0xaa, 0xd4, 0x79, 0x8e, 0x99, 0x4d, 0xdd, 0x20, 0x24, 0x94, 0x73, - 0x44, 0x75, 0x49, 0x87, 0xb4, 0xf4, 0xe7, 0xa5, 0x24, 0xc2, 0x64, 0xaf, 0xd2, 0xbc, 0xa4, 0x1d, - 0x3e, 0x76, 0x69, 0xb9, 0x9b, 0x27, 0xe8, 0x1b, 0xdc, 0x2f, 0xd6, 0x3a, 0xa5, 0xac, 0xfd, 0xa3, - 0xaf, 0x9c, 0x01, 0x32, 0x9c, 0xf7, 0x0a, 0xec, 0x91, 0x12, 0xcf, 0x61, 0xb0, 0x65, 0x90, 0x0d, - 0x61, 0x5d, 0x12, 0x3e, 0x2b, 0x25, 0x3c, 0xdf, 0x18, 0x28, 0x43, 0xd6, 0xcf, 0xfa, 0x2a, 0x65, - 0xb9, 0x84, 0x2e, 0xa6, 0x34, 0x3b, 0xc1, 0x86, 0xbc, 0xfd, 0x71, 0x79, 0x3b, 0x22, 0x3c, 0x73, - 0x6f, 0x07, 0x67, 0x81, 0x09, 0x02, 0x65, 0x63, 0xd8, 0x08, 0xd3, 0xce, 0x61, 0x50, 0x3c, 0x77, - 0xa4, 0xc3, 0x9d, 0xbc, 0x94, 0xf2, 0xe1, 0xe1, 0x8e, 0xda, 0x1d, 0xb5, 0x8d, 0xbd, 0x6d, 0x51, - 0xde, 0x8b, 0x23, 0xed, 0x33, 0x0c, 0x4b, 0x46, 0x8a, 0x1e, 0x41, 0x77, 0x66, 0x31, 0x2c, 0x17, - 0xc0, 0x94, 0x6f, 0x4c, 0xe4, 0xcc, 0xb6, 0x40, 0x85, 0xff, 0x2f, 0xc4, 0xfb, 0x52, 0xbc, 0x03, - 0xbb, 0x45, 0x3b, 0xf0, 0x11, 0xf6, 0x0a, 0xa6, 0xc9, 0x1f, 0x80, 0x46, 0x2c, 0x8b, 0x2c, 0xb4, - 0xa5, 0x8f, 0xfe, 0xea, 0xea, 0x4c, 0xaa, 0x91, 0x24, 0x6a, 0x87, 0xd0, 0xcb, 0x5f, 0xcb, 0x1f, - 0xce, 0x4c, 0xd1, 0xf2, 0x5f, 0x9b, 0x42, 0x67, 0x6b, 0xe2, 0x62, 0xf3, 0x22, 0xc5, 0x6c, 0x32, - 0x8f, 0x42, 0x6b, 0x46, 0x53, 0x22, 0xa7, 0x1c, 0x40, 0x0f, 0x21, 0x12, 0xc4, 0x8c, 0x55, 0x90, - 0x6b, 0xc7, 0x27, 0x20, 0xc1, 0x77, 0x11, 0xa6, 0xff, 0xac, 0x80, 0x92, 0x5f, 0x37, 0xf4, 0x03, - 0xfa, 0x79, 0xec, 0xad, 0xef, 0x10, 0x74, 0xeb, 0x8d, 0xbd, 0x7b, 0x72, 0x8b, 0x8c, 0xa8, 0xab, - 0x51, 0xe5, 0xb8, 0x32, 0xab, 0x4b, 0xe9, 0x5f, 0xfc, 0x09, 0x00, 0x00, 0xff, 0xff, 0xe9, 0x3f, - 0x7b, 0x08, 0x87, 0x06, 0x00, 0x00, + // 656 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0x51, 0x73, 0xd2, 0x40, + 0x10, 0x6e, 0x5a, 0x68, 0x87, 0x85, 0x02, 0x5e, 0x2b, 0xa4, 0x3a, 0x75, 0x98, 0x68, 0x35, 0x75, + 0x1c, 0xda, 0xe2, 0x8c, 0x3f, 0x80, 0xaa, 0x83, 0x33, 0xb5, 0x75, 0x0e, 0x5f, 0x1c, 0x1f, 0x6e, + 0x02, 0x2c, 0x34, 0x1a, 0x72, 0xf1, 0x2e, 0x45, 0x79, 0xf2, 0x47, 0xf8, 0xa3, 0xfc, 0x4b, 0x3e, + 0x3a, 0x77, 0x09, 0x21, 0xa4, 0x44, 0xa7, 0x4f, 0x30, 0xdf, 0xee, 0xde, 0xb7, 0xbb, 0xdf, 0xb7, + 0x01, 0x7b, 0x22, 0x82, 0x21, 0x13, 0x38, 0xf6, 0x70, 0x18, 0xba, 0xdc, 0x67, 0xb3, 0x33, 0xc7, + 0x0b, 0xae, 0x9d, 0x93, 0x25, 0xd4, 0x0e, 0x04, 0x0f, 0x39, 0x69, 0xaa, 0xcc, 0x76, 0x0a, 0x8e, + 0x33, 0xad, 0x3f, 0x9b, 0xd0, 0xec, 0xa3, 0x98, 0xa1, 0xa0, 0x49, 0x90, 0xe2, 0xb7, 0x1b, 0x94, + 0x21, 0x21, 0x50, 0xb8, 0xe6, 0x32, 0x34, 0x8d, 0x96, 0x61, 0x97, 0xa8, 0xfe, 0x4f, 0x9e, 0x43, + 0x7d, 0xec, 0x7a, 0xc8, 0x06, 0x73, 0xa6, 0x7e, 0x7d, 0x67, 0x8a, 0xe6, 0x96, 0x8a, 0xf7, 0x36, + 0x68, 0x55, 0x21, 0xdd, 0xf9, 0xdb, 0x18, 0x27, 0xaf, 0xa0, 0xa1, 0x73, 0x87, 0xdc, 0x0f, 0x1d, + 0xd7, 0x77, 0xfd, 0x09, 0x93, 0xf3, 0xe9, 0x80, 0x7b, 0x66, 0x21, 0xae, 0xd8, 0x57, 0xf1, 0xf3, + 0x24, 0xdc, 0xd7, 0x51, 0x32, 0x81, 0x83, 0x6c, 0x1d, 0xfe, 0x08, 0xd1, 0x97, 0x2e, 0xf7, 0xcd, + 0x62, 0xcb, 0xb0, 0xcb, 0x9d, 0xe3, 0x76, 0xce, 0x40, 0xed, 0x37, 0x8b, 0xcc, 0x78, 0x8a, 0xde, + 0x06, 0x6d, 0xae, 0xb2, 0x24, 0x19, 0xa4, 0x0b, 0x87, 0x8e, 0xe7, 0x2d, 0x1f, 0x67, 0xfe, 0xcd, + 0x74, 0x80, 0x42, 0x32, 0x3e, 0x66, 0xe1, 0x3c, 0x40, 0x73, 0x3b, 0xee, 0xf3, 0xc0, 0xf1, 0xbc, + 0xa4, 0xec, 0x32, 0x4a, 0xba, 0x1a, 0x7f, 0x9c, 0x07, 0x48, 0x8e, 0x60, 0xd7, 0x73, 0x65, 0xc8, + 0x24, 0x8a, 0x99, 0x3b, 0x44, 0x69, 0xee, 0xc4, 0x35, 0x15, 0x05, 0xf7, 0x63, 0xb4, 0x7b, 0x0f, + 0x6a, 0x53, 0x94, 0xd2, 0x99, 0x20, 0x13, 0x51, 0x63, 0xd6, 0x18, 0xea, 0xd9, 0x66, 0xc9, 0x33, + 0xa8, 0xa5, 0xa6, 0xd6, 0x3d, 0x44, 0xdb, 0xaf, 0x2e, 0x61, 0x4d, 0x7b, 0x0c, 0xf5, 0x6c, 0xdb, + 0xe6, 0x66, 0xcb, 0xb0, 0x8b, 0xb4, 0x86, 0xab, 0x8d, 0x5a, 0xbf, 0x0b, 0x60, 0xde, 0x96, 0x58, + 0x06, 0xdc, 0x97, 0x48, 0x0e, 0x01, 0x66, 0x8e, 0xe7, 0x8e, 0x58, 0x4a, 0xe9, 0x92, 0x46, 0x7a, + 0x4a, 0xee, 0xcf, 0x50, 0xe7, 0xc2, 0x9d, 0xb8, 0xbe, 0xe3, 0x2d, 0xfa, 0xd6, 0x34, 0xe5, 0xce, + 0x69, 0xae, 0x02, 0x39, 0x76, 0xa2, 0xb5, 0xc5, 0x4b, 0x8b, 0x61, 0xbf, 0x82, 0xa9, 0x75, 0x1e, + 0xa1, 0x1c, 0x0a, 0x37, 0x08, 0xb9, 0x60, 0x22, 0xee, 0x4b, 0x3b, 0xa4, 0xdc, 0x39, 0xc9, 0x25, + 0x51, 0x26, 0x7b, 0x9d, 0xd4, 0x2d, 0xc6, 0xe9, 0x6d, 0x50, 0x6d, 0xb9, 0xdb, 0x11, 0xf2, 0x1d, + 0x1e, 0xad, 0xd7, 0x3a, 0xa1, 0x2c, 0xfe, 0x67, 0xae, 0x8c, 0x01, 0x52, 0x9c, 0x0f, 0xd7, 0xd8, + 0x23, 0x21, 0x1e, 0x41, 0x63, 0xc5, 0x20, 0x4b, 0xc2, 0x6d, 0x4d, 0xf8, 0x22, 0x97, 0xf0, 0x62, + 0x69, 0xa0, 0x14, 0xd9, 0x7e, 0xda, 0x57, 0x09, 0xcb, 0x15, 0x54, 0x51, 0x88, 0xf4, 0x06, 0x77, + 0xf4, 0xeb, 0x4f, 0xf3, 0xc7, 0x51, 0xe9, 0xa9, 0x77, 0x77, 0x31, 0x0d, 0x74, 0x09, 0xd4, 0x97, + 0x86, 0x8d, 0x30, 0xeb, 0x02, 0x1a, 0xeb, 0xf7, 0x4e, 0x3a, 0x70, 0x3f, 0x2b, 0xa5, 0xfe, 0xf0, + 0x98, 0x46, 0x6b, 0xcb, 0xae, 0xd0, 0xbd, 0x55, 0x51, 0x3e, 0xa8, 0x90, 0xf5, 0x05, 0x9a, 0x39, + 0x2b, 0x25, 0x4f, 0xa0, 0x3a, 0x70, 0x24, 0xea, 0x03, 0x60, 0xfa, 0x1b, 0x13, 0x39, 0xb3, 0xa2, + 0x50, 0xe5, 0xff, 0x4b, 0xf5, 0x7d, 0x59, 0x7f, 0x03, 0x5b, 0xeb, 0x6e, 0xe0, 0x13, 0xec, 0xad, + 0xd9, 0x26, 0xe9, 0xc2, 0x4e, 0x2c, 0x8b, 0x6e, 0xb4, 0xdc, 0xb1, 0xff, 0xe9, 0xea, 0x54, 0x29, + 0x5d, 0x14, 0x5a, 0x47, 0x50, 0xcb, 0x3e, 0x4b, 0xa0, 0x90, 0x6a, 0x5a, 0xff, 0xb7, 0xfa, 0xb0, + 0xbb, 0xb2, 0x71, 0x75, 0x79, 0x91, 0x62, 0x43, 0x3e, 0x8a, 0x52, 0x8b, 0xb4, 0xa4, 0x91, 0x73, + 0x3e, 0x42, 0xf2, 0x18, 0x22, 0x41, 0x58, 0xac, 0x82, 0x3e, 0xbb, 0x12, 0xad, 0x68, 0xf0, 0x7d, + 0x84, 0x75, 0x7e, 0x19, 0x50, 0xcf, 0x9e, 0x1b, 0xf9, 0x09, 0xfb, 0x59, 0xec, 0x9d, 0x3f, 0xe6, + 0xe4, 0xce, 0x17, 0xfb, 0xe0, 0xec, 0x0e, 0x15, 0xd1, 0x54, 0xb6, 0x71, 0x6a, 0x0c, 0xb6, 0xb5, + 0xf4, 0x2f, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x85, 0x02, 0x09, 0x9d, 0x9f, 0x06, 0x00, 0x00, } diff --git a/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection.proto b/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection.proto index 276ff0e..c52ccc6 100644 --- a/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection.proto +++ b/vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection.proto @@ -1,31 +1,16 @@ -// Copyright 2016, Google Inc. -// All rights reserved. +// Copyright 2016 gRPC authors. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// 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 // -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// http://www.apache.org/licenses/LICENSE-2.0 // -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// 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. // Service exported by server reflection @@ -87,7 +72,7 @@ message ExtensionRequest { message ServerReflectionResponse { string valid_host = 1; ServerReflectionRequest original_request = 2; - // The server set one of the following fields accroding to the message_request + // The server set one of the following fields according to the message_request // in the request. oneof message_response { // This message is used to answer file_by_filename, file_containing_symbol, diff --git a/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2.pb.go b/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2.pb.go index 0b503d6..5b01618 100644 --- a/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2.pb.go +++ b/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: proto2.proto -// DO NOT EDIT! /* Package grpc_testing is a generated protocol buffer package. @@ -69,7 +68,7 @@ func init() { proto.RegisterFile("proto2.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ // 86 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xe2, 0x29, 0x28, 0xca, 0x2f, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x29, 0x28, 0xca, 0x2f, 0xc9, 0x37, 0xd2, 0x03, 0x53, 0x42, 0x3c, 0xe9, 0x45, 0x05, 0xc9, 0x7a, 0x25, 0xa9, 0xc5, 0x25, 0x99, 0x79, 0xe9, 0x4a, 0x6a, 0x5c, 0x3c, 0x21, 0xf9, 0x4e, 0xa9, 0xae, 0x15, 0x25, 0xa9, 0x79, 0x29, 0xa9, 0x29, 0x42, 0x02, 0x5c, 0xcc, 0x69, 0xf9, 0xf9, 0x12, 0x8c, 0x0a, 0x4c, 0x1a, 0xac, diff --git a/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2.proto b/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2.proto index 6b120f3..a675d14 100644 --- a/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2.proto +++ b/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2.proto @@ -1,3 +1,17 @@ +// Copyright 2017 gRPC authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + syntax = "proto2"; package grpc.testing; diff --git a/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2_ext.pb.go b/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2_ext.pb.go index dbd0942..9ae4f07 100644 --- a/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2_ext.pb.go +++ b/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2_ext.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: proto2_ext.proto -// DO NOT EDIT! package grpc_testing @@ -68,7 +67,7 @@ func init() { proto.RegisterFile("proto2_ext.proto", fileDescriptor1) } var fileDescriptor1 = []byte{ // 179 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0x12, 0x28, 0x28, 0xca, 0x2f, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x28, 0x28, 0xca, 0x2f, 0xc9, 0x37, 0x8a, 0x4f, 0xad, 0x28, 0xd1, 0x03, 0x33, 0x85, 0x78, 0xd2, 0x8b, 0x0a, 0x92, 0xf5, 0x4a, 0x52, 0x8b, 0x4b, 0x32, 0xf3, 0xd2, 0xa5, 0x78, 0x20, 0xf2, 0x10, 0x39, 0x29, 0x2e, 0x90, 0x30, 0x84, 0xad, 0xa4, 0xca, 0xc5, 0xe9, 0x5a, 0x51, 0x92, 0x9a, 0x57, 0x9c, 0x99, 0x9f, 0x27, diff --git a/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2_ext.proto b/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2_ext.proto index b669141..a4942e4 100644 --- a/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2_ext.proto +++ b/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2_ext.proto @@ -1,3 +1,17 @@ +// Copyright 2017 gRPC authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + syntax = "proto2"; package grpc.testing; diff --git a/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2_ext2.pb.go b/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2_ext2.pb.go index 0aaec7c..26ec982 100644 --- a/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2_ext2.pb.go +++ b/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2_ext2.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: proto2_ext2.proto -// DO NOT EDIT! package grpc_testing @@ -58,7 +57,7 @@ func init() { proto.RegisterFile("proto2_ext2.proto", fileDescriptor2) } var fileDescriptor2 = []byte{ // 165 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0x12, 0x2c, 0x28, 0xca, 0x2f, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x2c, 0x28, 0xca, 0x2f, 0xc9, 0x37, 0x8a, 0x4f, 0xad, 0x28, 0x31, 0xd2, 0x03, 0xb3, 0x85, 0x78, 0xd2, 0x8b, 0x0a, 0x92, 0xf5, 0x4a, 0x52, 0x8b, 0x4b, 0x32, 0xf3, 0xd2, 0xa5, 0x78, 0x20, 0x0a, 0x20, 0x72, 0x4a, 0x36, 0x5c, 0x02, 0x8e, 0x79, 0xf9, 0x25, 0x19, 0xa9, 0x45, 0xae, 0x15, 0x25, 0xa9, 0x79, 0xc5, 0x99, diff --git a/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2_ext2.proto b/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2_ext2.proto index 16fa69e..d91ba00 100644 --- a/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2_ext2.proto +++ b/vendor/google.golang.org/grpc/reflection/grpc_testing/proto2_ext2.proto @@ -1,3 +1,17 @@ +// Copyright 2017 gRPC authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + syntax = "proto2"; package grpc.testing; diff --git a/vendor/google.golang.org/grpc/reflection/grpc_testing/test.pb.go b/vendor/google.golang.org/grpc/reflection/grpc_testing/test.pb.go index 27d71fc..62f71ff 100644 --- a/vendor/google.golang.org/grpc/reflection/grpc_testing/test.pb.go +++ b/vendor/google.golang.org/grpc/reflection/grpc_testing/test.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: test.proto -// DO NOT EDIT! package grpc_testing @@ -230,7 +229,7 @@ func init() { proto.RegisterFile("test.proto", fileDescriptor3) } var fileDescriptor3 = []byte{ // 231 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xa4, 0x91, 0xbd, 0x4a, 0xc5, 0x40, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x91, 0xbd, 0x4a, 0xc5, 0x40, 0x10, 0x85, 0x59, 0x83, 0xd1, 0x3b, 0xfe, 0x32, 0x58, 0x84, 0x68, 0x11, 0xae, 0x08, 0xa9, 0x16, 0xb9, 0xd6, 0x56, 0xb6, 0x16, 0xb2, 0x79, 0x82, 0x6b, 0x18, 0xe2, 0x42, 0x4c, 0x36, 0x33, 0x13, 0xc1, 0x87, 0xb1, 0xf5, 0x39, 0x25, 0x59, 0x23, 0x0a, 0x62, 0x63, 0xb7, 0xe7, 0xe3, 0xcc, 0xb7, diff --git a/vendor/google.golang.org/grpc/reflection/grpc_testing/test.proto b/vendor/google.golang.org/grpc/reflection/grpc_testing/test.proto index d74d0fc..cae3f01 100644 --- a/vendor/google.golang.org/grpc/reflection/grpc_testing/test.proto +++ b/vendor/google.golang.org/grpc/reflection/grpc_testing/test.proto @@ -1,3 +1,17 @@ +// Copyright 2017 gRPC authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + syntax = "proto3"; package grpc.testing; diff --git a/vendor/google.golang.org/grpc/reflection/grpc_testingv3/testv3.pb.go b/vendor/google.golang.org/grpc/reflection/grpc_testingv3/testv3.pb.go new file mode 100644 index 0000000..767efdd --- /dev/null +++ b/vendor/google.golang.org/grpc/reflection/grpc_testingv3/testv3.pb.go @@ -0,0 +1,457 @@ +// Code generated by protoc-gen-go. +// source: testv3.proto +// DO NOT EDIT! + +/* +Package grpc_testingv3 is a generated protocol buffer package. + +It is generated from these files: + testv3.proto + +It has these top-level messages: + SearchResponseV3 + SearchRequestV3 +*/ +package grpc_testingv3 + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +type SearchResponseV3_State int32 + +const ( + SearchResponseV3_UNKNOWN SearchResponseV3_State = 0 + SearchResponseV3_FRESH SearchResponseV3_State = 1 + SearchResponseV3_STALE SearchResponseV3_State = 2 +) + +var SearchResponseV3_State_name = map[int32]string{ + 0: "UNKNOWN", + 1: "FRESH", + 2: "STALE", +} +var SearchResponseV3_State_value = map[string]int32{ + "UNKNOWN": 0, + "FRESH": 1, + "STALE": 2, +} + +func (x SearchResponseV3_State) String() string { + return proto.EnumName(SearchResponseV3_State_name, int32(x)) +} +func (SearchResponseV3_State) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 0} } + +type SearchResponseV3 struct { + Results []*SearchResponseV3_Result `protobuf:"bytes,1,rep,name=results" json:"results,omitempty"` + State SearchResponseV3_State `protobuf:"varint,2,opt,name=state,enum=grpc.testingv3.SearchResponseV3_State" json:"state,omitempty"` +} + +func (m *SearchResponseV3) Reset() { *m = SearchResponseV3{} } +func (m *SearchResponseV3) String() string { return proto.CompactTextString(m) } +func (*SearchResponseV3) ProtoMessage() {} +func (*SearchResponseV3) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *SearchResponseV3) GetResults() []*SearchResponseV3_Result { + if m != nil { + return m.Results + } + return nil +} + +func (m *SearchResponseV3) GetState() SearchResponseV3_State { + if m != nil { + return m.State + } + return SearchResponseV3_UNKNOWN +} + +type SearchResponseV3_Result struct { + Url string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"` + Title string `protobuf:"bytes,2,opt,name=title" json:"title,omitempty"` + Snippets []string `protobuf:"bytes,3,rep,name=snippets" json:"snippets,omitempty"` + Metadata map[string]*SearchResponseV3_Result_Value `protobuf:"bytes,4,rep,name=metadata" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *SearchResponseV3_Result) Reset() { *m = SearchResponseV3_Result{} } +func (m *SearchResponseV3_Result) String() string { return proto.CompactTextString(m) } +func (*SearchResponseV3_Result) ProtoMessage() {} +func (*SearchResponseV3_Result) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 0} } + +func (m *SearchResponseV3_Result) GetUrl() string { + if m != nil { + return m.Url + } + return "" +} + +func (m *SearchResponseV3_Result) GetTitle() string { + if m != nil { + return m.Title + } + return "" +} + +func (m *SearchResponseV3_Result) GetSnippets() []string { + if m != nil { + return m.Snippets + } + return nil +} + +func (m *SearchResponseV3_Result) GetMetadata() map[string]*SearchResponseV3_Result_Value { + if m != nil { + return m.Metadata + } + return nil +} + +type SearchResponseV3_Result_Value struct { + // Types that are valid to be assigned to Val: + // *SearchResponseV3_Result_Value_Str + // *SearchResponseV3_Result_Value_Int + // *SearchResponseV3_Result_Value_Real + Val isSearchResponseV3_Result_Value_Val `protobuf_oneof:"val"` +} + +func (m *SearchResponseV3_Result_Value) Reset() { *m = SearchResponseV3_Result_Value{} } +func (m *SearchResponseV3_Result_Value) String() string { return proto.CompactTextString(m) } +func (*SearchResponseV3_Result_Value) ProtoMessage() {} +func (*SearchResponseV3_Result_Value) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{0, 0, 0} +} + +type isSearchResponseV3_Result_Value_Val interface { + isSearchResponseV3_Result_Value_Val() +} + +type SearchResponseV3_Result_Value_Str struct { + Str string `protobuf:"bytes,1,opt,name=str,oneof"` +} +type SearchResponseV3_Result_Value_Int struct { + Int int64 `protobuf:"varint,2,opt,name=int,oneof"` +} +type SearchResponseV3_Result_Value_Real struct { + Real float64 `protobuf:"fixed64,3,opt,name=real,oneof"` +} + +func (*SearchResponseV3_Result_Value_Str) isSearchResponseV3_Result_Value_Val() {} +func (*SearchResponseV3_Result_Value_Int) isSearchResponseV3_Result_Value_Val() {} +func (*SearchResponseV3_Result_Value_Real) isSearchResponseV3_Result_Value_Val() {} + +func (m *SearchResponseV3_Result_Value) GetVal() isSearchResponseV3_Result_Value_Val { + if m != nil { + return m.Val + } + return nil +} + +func (m *SearchResponseV3_Result_Value) GetStr() string { + if x, ok := m.GetVal().(*SearchResponseV3_Result_Value_Str); ok { + return x.Str + } + return "" +} + +func (m *SearchResponseV3_Result_Value) GetInt() int64 { + if x, ok := m.GetVal().(*SearchResponseV3_Result_Value_Int); ok { + return x.Int + } + return 0 +} + +func (m *SearchResponseV3_Result_Value) GetReal() float64 { + if x, ok := m.GetVal().(*SearchResponseV3_Result_Value_Real); ok { + return x.Real + } + return 0 +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*SearchResponseV3_Result_Value) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _SearchResponseV3_Result_Value_OneofMarshaler, _SearchResponseV3_Result_Value_OneofUnmarshaler, _SearchResponseV3_Result_Value_OneofSizer, []interface{}{ + (*SearchResponseV3_Result_Value_Str)(nil), + (*SearchResponseV3_Result_Value_Int)(nil), + (*SearchResponseV3_Result_Value_Real)(nil), + } +} + +func _SearchResponseV3_Result_Value_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*SearchResponseV3_Result_Value) + // val + switch x := m.Val.(type) { + case *SearchResponseV3_Result_Value_Str: + b.EncodeVarint(1<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Str) + case *SearchResponseV3_Result_Value_Int: + b.EncodeVarint(2<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.Int)) + case *SearchResponseV3_Result_Value_Real: + b.EncodeVarint(3<<3 | proto.WireFixed64) + b.EncodeFixed64(math.Float64bits(x.Real)) + case nil: + default: + return fmt.Errorf("SearchResponseV3_Result_Value.Val has unexpected type %T", x) + } + return nil +} + +func _SearchResponseV3_Result_Value_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*SearchResponseV3_Result_Value) + switch tag { + case 1: // val.str + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Val = &SearchResponseV3_Result_Value_Str{x} + return true, err + case 2: // val.int + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Val = &SearchResponseV3_Result_Value_Int{int64(x)} + return true, err + case 3: // val.real + if wire != proto.WireFixed64 { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeFixed64() + m.Val = &SearchResponseV3_Result_Value_Real{math.Float64frombits(x)} + return true, err + default: + return false, nil + } +} + +func _SearchResponseV3_Result_Value_OneofSizer(msg proto.Message) (n int) { + m := msg.(*SearchResponseV3_Result_Value) + // val + switch x := m.Val.(type) { + case *SearchResponseV3_Result_Value_Str: + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Str))) + n += len(x.Str) + case *SearchResponseV3_Result_Value_Int: + n += proto.SizeVarint(2<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.Int)) + case *SearchResponseV3_Result_Value_Real: + n += proto.SizeVarint(3<<3 | proto.WireFixed64) + n += 8 + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type SearchRequestV3 struct { + Query string `protobuf:"bytes,1,opt,name=query" json:"query,omitempty"` +} + +func (m *SearchRequestV3) Reset() { *m = SearchRequestV3{} } +func (m *SearchRequestV3) String() string { return proto.CompactTextString(m) } +func (*SearchRequestV3) ProtoMessage() {} +func (*SearchRequestV3) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *SearchRequestV3) GetQuery() string { + if m != nil { + return m.Query + } + return "" +} + +func init() { + proto.RegisterType((*SearchResponseV3)(nil), "grpc.testingv3.SearchResponseV3") + proto.RegisterType((*SearchResponseV3_Result)(nil), "grpc.testingv3.SearchResponseV3.Result") + proto.RegisterType((*SearchResponseV3_Result_Value)(nil), "grpc.testingv3.SearchResponseV3.Result.Value") + proto.RegisterType((*SearchRequestV3)(nil), "grpc.testingv3.SearchRequestV3") + proto.RegisterEnum("grpc.testingv3.SearchResponseV3_State", SearchResponseV3_State_name, SearchResponseV3_State_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion3 + +// Client API for SearchServiceV3 service + +type SearchServiceV3Client interface { + Search(ctx context.Context, in *SearchRequestV3, opts ...grpc.CallOption) (*SearchResponseV3, error) + StreamingSearch(ctx context.Context, opts ...grpc.CallOption) (SearchServiceV3_StreamingSearchClient, error) +} + +type searchServiceV3Client struct { + cc *grpc.ClientConn +} + +func NewSearchServiceV3Client(cc *grpc.ClientConn) SearchServiceV3Client { + return &searchServiceV3Client{cc} +} + +func (c *searchServiceV3Client) Search(ctx context.Context, in *SearchRequestV3, opts ...grpc.CallOption) (*SearchResponseV3, error) { + out := new(SearchResponseV3) + err := grpc.Invoke(ctx, "/grpc.testingv3.SearchServiceV3/Search", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *searchServiceV3Client) StreamingSearch(ctx context.Context, opts ...grpc.CallOption) (SearchServiceV3_StreamingSearchClient, error) { + stream, err := grpc.NewClientStream(ctx, &_SearchServiceV3_serviceDesc.Streams[0], c.cc, "/grpc.testingv3.SearchServiceV3/StreamingSearch", opts...) + if err != nil { + return nil, err + } + x := &searchServiceV3StreamingSearchClient{stream} + return x, nil +} + +type SearchServiceV3_StreamingSearchClient interface { + Send(*SearchRequestV3) error + Recv() (*SearchResponseV3, error) + grpc.ClientStream +} + +type searchServiceV3StreamingSearchClient struct { + grpc.ClientStream +} + +func (x *searchServiceV3StreamingSearchClient) Send(m *SearchRequestV3) error { + return x.ClientStream.SendMsg(m) +} + +func (x *searchServiceV3StreamingSearchClient) Recv() (*SearchResponseV3, error) { + m := new(SearchResponseV3) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// Server API for SearchServiceV3 service + +type SearchServiceV3Server interface { + Search(context.Context, *SearchRequestV3) (*SearchResponseV3, error) + StreamingSearch(SearchServiceV3_StreamingSearchServer) error +} + +func RegisterSearchServiceV3Server(s *grpc.Server, srv SearchServiceV3Server) { + s.RegisterService(&_SearchServiceV3_serviceDesc, srv) +} + +func _SearchServiceV3_Search_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SearchRequestV3) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SearchServiceV3Server).Search(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.testingv3.SearchServiceV3/Search", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SearchServiceV3Server).Search(ctx, req.(*SearchRequestV3)) + } + return interceptor(ctx, in, info, handler) +} + +func _SearchServiceV3_StreamingSearch_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(SearchServiceV3Server).StreamingSearch(&searchServiceV3StreamingSearchServer{stream}) +} + +type SearchServiceV3_StreamingSearchServer interface { + Send(*SearchResponseV3) error + Recv() (*SearchRequestV3, error) + grpc.ServerStream +} + +type searchServiceV3StreamingSearchServer struct { + grpc.ServerStream +} + +func (x *searchServiceV3StreamingSearchServer) Send(m *SearchResponseV3) error { + return x.ServerStream.SendMsg(m) +} + +func (x *searchServiceV3StreamingSearchServer) Recv() (*SearchRequestV3, error) { + m := new(SearchRequestV3) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +var _SearchServiceV3_serviceDesc = grpc.ServiceDesc{ + ServiceName: "grpc.testingv3.SearchServiceV3", + HandlerType: (*SearchServiceV3Server)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Search", + Handler: _SearchServiceV3_Search_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "StreamingSearch", + Handler: _SearchServiceV3_StreamingSearch_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: fileDescriptor0, +} + +func init() { proto.RegisterFile("testv3.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 416 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x93, 0xd1, 0x6a, 0xd4, 0x40, + 0x14, 0x86, 0x77, 0x36, 0x9b, 0x6d, 0xf7, 0xac, 0xb6, 0x61, 0xe8, 0x45, 0xc8, 0x8d, 0x61, 0x2f, + 0x6c, 0x10, 0x0c, 0x92, 0x20, 0x88, 0x78, 0x53, 0x65, 0x65, 0xa1, 0x75, 0xc5, 0x89, 0xae, 0xde, + 0x8e, 0xeb, 0x61, 0x8d, 0x4d, 0xb3, 0xe9, 0xcc, 0x49, 0x60, 0x9f, 0xc5, 0x17, 0xf1, 0x55, 0x7c, + 0x1b, 0x99, 0x99, 0xa6, 0x50, 0x41, 0xba, 0x17, 0xde, 0xcd, 0x7f, 0x38, 0xff, 0x37, 0xff, 0x3f, + 0x24, 0xf0, 0x80, 0x50, 0x53, 0x97, 0xa7, 0x8d, 0xda, 0xd2, 0x96, 0x1f, 0x6d, 0x54, 0xb3, 0x4e, + 0xcd, 0xa8, 0xac, 0x37, 0x5d, 0x3e, 0xfb, 0x39, 0x82, 0xa0, 0x40, 0xa9, 0xd6, 0xdf, 0x05, 0xea, + 0x66, 0x5b, 0x6b, 0x5c, 0xe5, 0xfc, 0x0c, 0x0e, 0x14, 0xea, 0xb6, 0x22, 0x1d, 0xb2, 0xd8, 0x4b, + 0xa6, 0xd9, 0x69, 0x7a, 0xd7, 0x96, 0xfe, 0x6d, 0x49, 0x85, 0xdd, 0x17, 0xbd, 0x8f, 0xbf, 0x02, + 0x5f, 0x93, 0x24, 0x0c, 0x87, 0x31, 0x4b, 0x8e, 0xb2, 0xc7, 0xf7, 0x02, 0x0a, 0xb3, 0x2d, 0x9c, + 0x29, 0xfa, 0x3d, 0x84, 0xb1, 0x23, 0xf2, 0x00, 0xbc, 0x56, 0x55, 0x21, 0x8b, 0x59, 0x32, 0x11, + 0xe6, 0xc8, 0x4f, 0xc0, 0xa7, 0x92, 0x2a, 0x87, 0x9e, 0x08, 0x27, 0x78, 0x04, 0x87, 0xba, 0x2e, + 0x9b, 0x06, 0x49, 0x87, 0x5e, 0xec, 0x25, 0x13, 0x71, 0xab, 0xf9, 0x07, 0x38, 0xbc, 0x42, 0x92, + 0xdf, 0x24, 0xc9, 0x70, 0x64, 0x0b, 0x3d, 0xdf, 0xb3, 0x50, 0xfa, 0xee, 0xc6, 0x37, 0xaf, 0x49, + 0xed, 0xc4, 0x2d, 0x26, 0xba, 0x00, 0x7f, 0x25, 0xab, 0x16, 0x39, 0x07, 0x4f, 0x93, 0x72, 0xf9, + 0x16, 0x03, 0x61, 0x84, 0x99, 0x95, 0x35, 0xd9, 0x7c, 0x9e, 0x99, 0x95, 0x35, 0xf1, 0x13, 0x18, + 0x29, 0x94, 0x55, 0xe8, 0xc5, 0x2c, 0x61, 0x8b, 0x81, 0xb0, 0xea, 0xb5, 0x0f, 0x5e, 0x27, 0xab, + 0xe8, 0x07, 0x3c, 0xbc, 0x73, 0x91, 0x69, 0x7d, 0x89, 0xbb, 0xbe, 0xf5, 0x25, 0xee, 0xf8, 0x1b, + 0xf0, 0x3b, 0x73, 0xa1, 0xa5, 0x4e, 0xb3, 0xa7, 0xfb, 0x16, 0xb0, 0x29, 0x85, 0xf3, 0xbe, 0x1c, + 0xbe, 0x60, 0xb3, 0x27, 0xe0, 0xdb, 0xb7, 0xe6, 0x53, 0x38, 0xf8, 0xb4, 0x3c, 0x5f, 0xbe, 0xff, + 0xbc, 0x0c, 0x06, 0x7c, 0x02, 0xfe, 0x5b, 0x31, 0x2f, 0x16, 0x01, 0x33, 0xc7, 0xe2, 0xe3, 0xd9, + 0xc5, 0x3c, 0x18, 0xce, 0x4e, 0xe1, 0xb8, 0xe7, 0x5e, 0xb7, 0xa8, 0x69, 0x95, 0x9b, 0xd7, 0xbf, + 0x6e, 0x51, 0xf5, 0xd9, 0x9c, 0xc8, 0x7e, 0xb1, 0x7e, 0xb3, 0x40, 0xd5, 0x95, 0x6b, 0xf3, 0x15, + 0x9d, 0xc3, 0xd8, 0x8d, 0xf8, 0xa3, 0x7f, 0x85, 0xbd, 0x81, 0x46, 0xf1, 0x7d, 0x6d, 0xf8, 0x17, + 0x38, 0x2e, 0x48, 0xa1, 0xbc, 0x2a, 0xeb, 0xcd, 0x7f, 0xa3, 0x26, 0xec, 0x19, 0xfb, 0x3a, 0xb6, + 0x3f, 0x46, 0xfe, 0x27, 0x00, 0x00, 0xff, 0xff, 0xed, 0xa2, 0x8d, 0x75, 0x28, 0x03, 0x00, 0x00, +} diff --git a/vendor/google.golang.org/grpc/reflection/grpc_testingv3/testv3.proto b/vendor/google.golang.org/grpc/reflection/grpc_testingv3/testv3.proto new file mode 100644 index 0000000..ee4966b --- /dev/null +++ b/vendor/google.golang.org/grpc/reflection/grpc_testingv3/testv3.proto @@ -0,0 +1,35 @@ +syntax = "proto3"; + +package grpc.testingv3; + +message SearchResponseV3 { + message Result { + string url = 1; + string title = 2; + repeated string snippets = 3; + message Value { + oneof val { + string str = 1; + int64 int = 2; + double real = 3; + } + } + map metadata = 4; + } + enum State { + UNKNOWN = 0; + FRESH = 1; + STALE = 2; + } + repeated Result results = 1; + State state = 2; +} + +message SearchRequestV3 { + string query = 1; +} + +service SearchServiceV3 { + rpc Search(SearchRequestV3) returns (SearchResponseV3); + rpc StreamingSearch(stream SearchRequestV3) returns (stream SearchResponseV3); +} diff --git a/vendor/google.golang.org/grpc/reflection/serverreflection.go b/vendor/google.golang.org/grpc/reflection/serverreflection.go index f28304d..dd22a2d 100644 --- a/vendor/google.golang.org/grpc/reflection/serverreflection.go +++ b/vendor/google.golang.org/grpc/reflection/serverreflection.go @@ -1,36 +1,23 @@ /* * - * Copyright 2016, Google Inc. - * All rights reserved. + * Copyright 2016 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ +//go:generate protoc --go_out=plugins=grpc:. grpc_reflection_v1alpha/reflection.proto + /* Package reflection implements server reflection service. @@ -58,19 +45,23 @@ import ( "io" "io/ioutil" "reflect" - "strings" + "sort" + "sync" "github.com/golang/protobuf/proto" dpb "github.com/golang/protobuf/protoc-gen-go/descriptor" "google.golang.org/grpc" "google.golang.org/grpc/codes" rpb "google.golang.org/grpc/reflection/grpc_reflection_v1alpha" + "google.golang.org/grpc/status" ) type serverReflectionServer struct { s *grpc.Server - // TODO add more cache if necessary - serviceInfo map[string]grpc.ServiceInfo // cache for s.GetServiceInfo() + + initSymbols sync.Once + serviceNames []string + symbols map[string]*dpb.FileDescriptorProto // map of fully-qualified names to files } // Register registers the server reflection service on the given gRPC server. @@ -88,6 +79,112 @@ type protoMessage interface { Descriptor() ([]byte, []int) } +func (s *serverReflectionServer) getSymbols() (svcNames []string, symbolIndex map[string]*dpb.FileDescriptorProto) { + s.initSymbols.Do(func() { + serviceInfo := s.s.GetServiceInfo() + + s.symbols = map[string]*dpb.FileDescriptorProto{} + s.serviceNames = make([]string, 0, len(serviceInfo)) + processed := map[string]struct{}{} + for svc, info := range serviceInfo { + s.serviceNames = append(s.serviceNames, svc) + fdenc, ok := parseMetadata(info.Metadata) + if !ok { + continue + } + fd, err := decodeFileDesc(fdenc) + if err != nil { + continue + } + s.processFile(fd, processed) + } + sort.Strings(s.serviceNames) + }) + + return s.serviceNames, s.symbols +} + +func (s *serverReflectionServer) processFile(fd *dpb.FileDescriptorProto, processed map[string]struct{}) { + filename := fd.GetName() + if _, ok := processed[filename]; ok { + return + } + processed[filename] = struct{}{} + + prefix := fd.GetPackage() + + for _, msg := range fd.MessageType { + s.processMessage(fd, prefix, msg) + } + for _, en := range fd.EnumType { + s.processEnum(fd, prefix, en) + } + for _, ext := range fd.Extension { + s.processField(fd, prefix, ext) + } + for _, svc := range fd.Service { + svcName := fqn(prefix, svc.GetName()) + s.symbols[svcName] = fd + for _, meth := range svc.Method { + name := fqn(svcName, meth.GetName()) + s.symbols[name] = fd + } + } + + for _, dep := range fd.Dependency { + fdenc := proto.FileDescriptor(dep) + fdDep, err := decodeFileDesc(fdenc) + if err != nil { + continue + } + s.processFile(fdDep, processed) + } +} + +func (s *serverReflectionServer) processMessage(fd *dpb.FileDescriptorProto, prefix string, msg *dpb.DescriptorProto) { + msgName := fqn(prefix, msg.GetName()) + s.symbols[msgName] = fd + + for _, nested := range msg.NestedType { + s.processMessage(fd, msgName, nested) + } + for _, en := range msg.EnumType { + s.processEnum(fd, msgName, en) + } + for _, ext := range msg.Extension { + s.processField(fd, msgName, ext) + } + for _, fld := range msg.Field { + s.processField(fd, msgName, fld) + } + for _, oneof := range msg.OneofDecl { + oneofName := fqn(msgName, oneof.GetName()) + s.symbols[oneofName] = fd + } +} + +func (s *serverReflectionServer) processEnum(fd *dpb.FileDescriptorProto, prefix string, en *dpb.EnumDescriptorProto) { + enName := fqn(prefix, en.GetName()) + s.symbols[enName] = fd + + for _, val := range en.Value { + valName := fqn(enName, val.GetName()) + s.symbols[valName] = fd + } +} + +func (s *serverReflectionServer) processField(fd *dpb.FileDescriptorProto, prefix string, fld *dpb.FieldDescriptorProto) { + fldName := fqn(prefix, fld.GetName()) + s.symbols[fldName] = fd +} + +func fqn(prefix, name string) string { + if prefix == "" { + return name + } + return prefix + "." + name +} + // fileDescForType gets the file descriptor for the given type. // The given type should be a proto message. func (s *serverReflectionServer) fileDescForType(st reflect.Type) (*dpb.FileDescriptorProto, error) { @@ -97,12 +194,12 @@ func (s *serverReflectionServer) fileDescForType(st reflect.Type) (*dpb.FileDesc } enc, _ := m.Descriptor() - return s.decodeFileDesc(enc) + return decodeFileDesc(enc) } // decodeFileDesc does decompression and unmarshalling on the given // file descriptor byte slice. -func (s *serverReflectionServer) decodeFileDesc(enc []byte) (*dpb.FileDescriptorProto, error) { +func decodeFileDesc(enc []byte) (*dpb.FileDescriptorProto, error) { raw, err := decompress(enc) if err != nil { return nil, fmt.Errorf("failed to decompress enc: %v", err) @@ -128,7 +225,7 @@ func decompress(b []byte) ([]byte, error) { return out, nil } -func (s *serverReflectionServer) typeForName(name string) (reflect.Type, error) { +func typeForName(name string) (reflect.Type, error) { pt := proto.MessageType(name) if pt == nil { return nil, fmt.Errorf("unknown type: %q", name) @@ -138,7 +235,7 @@ func (s *serverReflectionServer) typeForName(name string) (reflect.Type, error) return st, nil } -func (s *serverReflectionServer) fileDescContainingExtension(st reflect.Type, ext int32) (*dpb.FileDescriptorProto, error) { +func fileDescContainingExtension(st reflect.Type, ext int32) (*dpb.FileDescriptorProto, error) { m, ok := reflect.Zero(reflect.PtrTo(st)).Interface().(proto.Message) if !ok { return nil, fmt.Errorf("failed to create message from type: %v", st) @@ -156,7 +253,7 @@ func (s *serverReflectionServer) fileDescContainingExtension(st reflect.Type, ex return nil, fmt.Errorf("failed to find registered extension for extension number %v", ext) } - return s.decodeFileDesc(proto.FileDescriptor(extDesc.Filename)) + return decodeFileDesc(proto.FileDescriptor(extDesc.Filename)) } func (s *serverReflectionServer) allExtensionNumbersForType(st reflect.Type) ([]int32, error) { @@ -180,85 +277,50 @@ func (s *serverReflectionServer) fileDescEncodingByFilename(name string) ([]byte if enc == nil { return nil, fmt.Errorf("unknown file: %v", name) } - fd, err := s.decodeFileDesc(enc) + fd, err := decodeFileDesc(enc) if err != nil { return nil, err } return proto.Marshal(fd) } -// serviceMetadataForSymbol finds the metadata for name in s.serviceInfo. -// name should be a service name or a method name. -func (s *serverReflectionServer) serviceMetadataForSymbol(name string) (interface{}, error) { - if s.serviceInfo == nil { - s.serviceInfo = s.s.GetServiceInfo() +// parseMetadata finds the file descriptor bytes specified meta. +// For SupportPackageIsVersion4, m is the name of the proto file, we +// call proto.FileDescriptor to get the byte slice. +// For SupportPackageIsVersion3, m is a byte slice itself. +func parseMetadata(meta interface{}) ([]byte, bool) { + // Check if meta is the file name. + if fileNameForMeta, ok := meta.(string); ok { + return proto.FileDescriptor(fileNameForMeta), true } - // Check if it's a service name. - if info, ok := s.serviceInfo[name]; ok { - return info.Metadata, nil + // Check if meta is the byte slice. + if enc, ok := meta.([]byte); ok { + return enc, true } - // Check if it's a method name. - pos := strings.LastIndex(name, ".") - // Not a valid method name. - if pos == -1 { - return nil, fmt.Errorf("unknown symbol: %v", name) - } - - info, ok := s.serviceInfo[name[:pos]] - // Substring before last "." is not a service name. - if !ok { - return nil, fmt.Errorf("unknown symbol: %v", name) - } - - // Search the method name in info.Methods. - var found bool - for _, m := range info.Methods { - if m.Name == name[pos+1:] { - found = true - break - } - } - if found { - return info.Metadata, nil - } - - return nil, fmt.Errorf("unknown symbol: %v", name) + return nil, false } // fileDescEncodingContainingSymbol finds the file descriptor containing the given symbol, // does marshalling on it and returns the marshalled result. // The given symbol can be a type, a service or a method. func (s *serverReflectionServer) fileDescEncodingContainingSymbol(name string) ([]byte, error) { - var ( - fd *dpb.FileDescriptorProto - ) - // Check if it's a type name. - if st, err := s.typeForName(name); err == nil { - fd, err = s.fileDescForType(st) - if err != nil { - return nil, err - } - } else { // Check if it's a service name or a method name. - meta, err := s.serviceMetadataForSymbol(name) - - // Metadata not found. - if err != nil { - return nil, err - } - - // Metadata not valid. - fileNameForMeta, ok := meta.(string) - if !ok { - return nil, fmt.Errorf("invalid file descriptor for symbol: %v", name) + _, symbols := s.getSymbols() + fd := symbols[name] + if fd == nil { + // Check if it's a type name that was not present in the + // transitive dependencies of the registered services. + if st, err := typeForName(name); err == nil { + fd, err = s.fileDescForType(st) + if err != nil { + return nil, err + } } + } - enc := proto.FileDescriptor(fileNameForMeta) - fd, err = s.decodeFileDesc(enc) - if err != nil { - return nil, err - } + if fd == nil { + return nil, fmt.Errorf("unknown symbol: %v", name) } return proto.Marshal(fd) @@ -267,11 +329,11 @@ func (s *serverReflectionServer) fileDescEncodingContainingSymbol(name string) ( // fileDescEncodingContainingExtension finds the file descriptor containing given extension, // does marshalling on it and returns the marshalled result. func (s *serverReflectionServer) fileDescEncodingContainingExtension(typeName string, extNum int32) ([]byte, error) { - st, err := s.typeForName(typeName) + st, err := typeForName(typeName) if err != nil { return nil, err } - fd, err := s.fileDescContainingExtension(st, extNum) + fd, err := fileDescContainingExtension(st, extNum) if err != nil { return nil, err } @@ -280,7 +342,7 @@ func (s *serverReflectionServer) fileDescEncodingContainingExtension(typeName st // allExtensionNumbersForTypeName returns all extension numbers for the given type. func (s *serverReflectionServer) allExtensionNumbersForTypeName(name string) ([]int32, error) { - st, err := s.typeForName(name) + st, err := typeForName(name) if err != nil { return nil, err } @@ -369,14 +431,12 @@ func (s *serverReflectionServer) ServerReflectionInfo(stream rpb.ServerReflectio } } case *rpb.ServerReflectionRequest_ListServices: - if s.serviceInfo == nil { - s.serviceInfo = s.s.GetServiceInfo() - } - serviceResponses := make([]*rpb.ServiceResponse, 0, len(s.serviceInfo)) - for n := range s.serviceInfo { - serviceResponses = append(serviceResponses, &rpb.ServiceResponse{ + svcNames, _ := s.getSymbols() + serviceResponses := make([]*rpb.ServiceResponse, len(svcNames)) + for i, n := range svcNames { + serviceResponses[i] = &rpb.ServiceResponse{ Name: n, - }) + } } out.MessageResponse = &rpb.ServerReflectionResponse_ListServicesResponse{ ListServicesResponse: &rpb.ListServiceResponse{ @@ -384,7 +444,7 @@ func (s *serverReflectionServer) ServerReflectionInfo(stream rpb.ServerReflectio }, } default: - return grpc.Errorf(codes.InvalidArgument, "invalid MessageRequest: %v", in.MessageRequest) + return status.Errorf(codes.InvalidArgument, "invalid MessageRequest: %v", in.MessageRequest) } if err := stream.Send(out); err != nil { diff --git a/vendor/google.golang.org/grpc/reflection/serverreflection_test.go b/vendor/google.golang.org/grpc/reflection/serverreflection_test.go index 13b05b6..e2c7416 100644 --- a/vendor/google.golang.org/grpc/reflection/serverreflection_test.go +++ b/vendor/google.golang.org/grpc/reflection/serverreflection_test.go @@ -1,36 +1,26 @@ /* * - * Copyright 2016, Google Inc. - * All rights reserved. + * Copyright 2016 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ +//go:generate protoc -I grpc_testing --go_out=plugins=grpc:grpc_testing/ grpc_testing/proto2.proto grpc_testing/proto2_ext.proto grpc_testing/proto2_ext2.proto grpc_testing/test.proto + +// Note: grpc_testingv3/testv3.pb.go is not re-generated because it was +// intentionally generated by an older version of protoc-gen-go. + package reflection import ( @@ -46,17 +36,20 @@ import ( "google.golang.org/grpc" rpb "google.golang.org/grpc/reflection/grpc_reflection_v1alpha" pb "google.golang.org/grpc/reflection/grpc_testing" + pbv3 "google.golang.org/grpc/reflection/grpc_testingv3" ) var ( s = &serverReflectionServer{} // fileDescriptor of each test proto file. fdTest *dpb.FileDescriptorProto + fdTestv3 *dpb.FileDescriptorProto fdProto2 *dpb.FileDescriptorProto fdProto2Ext *dpb.FileDescriptorProto fdProto2Ext2 *dpb.FileDescriptorProto // fileDescriptor marshalled. fdTestByte []byte + fdTestv3Byte []byte fdProto2Byte []byte fdProto2ExtByte []byte fdProto2Ext2Byte []byte @@ -67,7 +60,7 @@ func loadFileDesc(filename string) (*dpb.FileDescriptorProto, []byte) { if enc == nil { panic(fmt.Sprintf("failed to find fd for file: %v", filename)) } - fd, err := s.decodeFileDesc(enc) + fd, err := decodeFileDesc(enc) if err != nil { panic(fmt.Sprintf("failed to decode enc: %v", err)) } @@ -80,6 +73,7 @@ func loadFileDesc(filename string) (*dpb.FileDescriptorProto, []byte) { func init() { fdTest, fdTestByte = loadFileDesc("test.proto") + fdTestv3, fdTestv3Byte = loadFileDesc("testv3.proto") fdProto2, fdProto2Byte = loadFileDesc("proto2.proto") fdProto2Ext, fdProto2ExtByte = loadFileDesc("proto2_ext.proto") fdProto2Ext2, fdProto2Ext2Byte = loadFileDesc("proto2_ext2.proto") @@ -107,7 +101,7 @@ func TestTypeForName(t *testing.T) { }{ {"grpc.testing.SearchResponse", reflect.TypeOf(pb.SearchResponse{})}, } { - r, err := s.typeForName(test.name) + r, err := typeForName(test.name) if err != nil || r != test.want { t.Errorf("typeForName(%q) = %q, %v, want %q, ", test.name, r, err, test.want) } @@ -118,7 +112,7 @@ func TestTypeForNameNotFound(t *testing.T) { for _, test := range []string{ "grpc.testing.not_exiting", } { - _, err := s.typeForName(test) + _, err := typeForName(test) if err == nil { t.Errorf("typeForName(%q) = _, %v, want _, ", test, err) } @@ -137,7 +131,7 @@ func TestFileDescContainingExtension(t *testing.T) { {reflect.TypeOf(pb.ToBeExtended{}), 23, fdProto2Ext2}, {reflect.TypeOf(pb.ToBeExtended{}), 29, fdProto2Ext2}, } { - fd, err := s.fileDescContainingExtension(test.st, test.extNum) + fd, err := fileDescContainingExtension(test.st, test.extNum) if err != nil || !proto.Equal(fd, test.want) { t.Errorf("fileDescContainingExtension(%q) = %q, %v, want %q, ", test.st, fd, err, test.want) } @@ -178,6 +172,16 @@ func (s *server) StreamingSearch(stream pb.SearchService_StreamingSearchServer) return nil } +type serverV3 struct{} + +func (s *serverV3) Search(ctx context.Context, in *pbv3.SearchRequestV3) (*pbv3.SearchResponseV3, error) { + return &pbv3.SearchResponseV3{}, nil +} + +func (s *serverV3) StreamingSearch(stream pbv3.SearchServiceV3_StreamingSearchServer) error { + return nil +} + func TestReflectionEnd2end(t *testing.T) { // Start server. lis, err := net.Listen("tcp", "localhost:0") @@ -186,6 +190,7 @@ func TestReflectionEnd2end(t *testing.T) { } s := grpc.NewServer() pb.RegisterSearchServiceServer(s, &server{}) + pbv3.RegisterSearchServiceV3Server(s, &serverV3{}) // Register reflection service on s. Register(s) go s.Serve(lis) @@ -198,7 +203,7 @@ func TestReflectionEnd2end(t *testing.T) { defer conn.Close() c := rpb.NewServerReflectionClient(conn) - stream, err := c.ServerReflectionInfo(context.Background()) + stream, err := c.ServerReflectionInfo(context.Background(), grpc.FailFast(false)) if err != nil { t.Fatalf("cannot get ServerReflectionInfo: %v", err) } @@ -286,6 +291,17 @@ func testFileContainingSymbol(t *testing.T, stream rpb.ServerReflection_ServerRe {"grpc.testing.SearchService.StreamingSearch", fdTestByte}, {"grpc.testing.SearchResponse", fdTestByte}, {"grpc.testing.ToBeExtended", fdProto2Byte}, + // Test support package v3. + {"grpc.testingv3.SearchServiceV3", fdTestv3Byte}, + {"grpc.testingv3.SearchServiceV3.Search", fdTestv3Byte}, + {"grpc.testingv3.SearchServiceV3.StreamingSearch", fdTestv3Byte}, + {"grpc.testingv3.SearchResponseV3", fdTestv3Byte}, + // search for field, oneof, enum, and enum value symbols, too + {"grpc.testingv3.SearchResponseV3.Result.snippets", fdTestv3Byte}, + {"grpc.testingv3.SearchResponseV3.Result.Value.val", fdTestv3Byte}, + {"grpc.testingv3.SearchResponseV3.Result.Value.str", fdTestv3Byte}, + {"grpc.testingv3.SearchResponseV3.State", fdTestv3Byte}, + {"grpc.testingv3.SearchResponseV3.State.FRESH", fdTestv3Byte}, } { if err := stream.Send(&rpb.ServerReflectionRequest{ MessageRequest: &rpb.ServerReflectionRequest_FileContainingSymbol{ @@ -484,7 +500,11 @@ func testListServices(t *testing.T, stream rpb.ServerReflection_ServerReflection switch r.MessageResponse.(type) { case *rpb.ServerReflectionResponse_ListServicesResponse: services := r.GetListServicesResponse().Service - want := []string{"grpc.testing.SearchService", "grpc.reflection.v1alpha.ServerReflection"} + want := []string{ + "grpc.testingv3.SearchServiceV3", + "grpc.testing.SearchService", + "grpc.reflection.v1alpha.ServerReflection", + } // Compare service names in response with want. if len(services) != len(want) { t.Errorf("= %v, want service names: %v", services, want) diff --git a/vendor/google.golang.org/grpc/resolver/dns/dns_resolver.go b/vendor/google.golang.org/grpc/resolver/dns/dns_resolver.go new file mode 100644 index 0000000..a543a70 --- /dev/null +++ b/vendor/google.golang.org/grpc/resolver/dns/dns_resolver.go @@ -0,0 +1,377 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Package dns implements a dns resolver to be installed as the default resolver +// in grpc. +package dns + +import ( + "encoding/json" + "errors" + "fmt" + "math/rand" + "net" + "os" + "strconv" + "strings" + "sync" + "time" + + "golang.org/x/net/context" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/resolver" +) + +func init() { + resolver.Register(NewBuilder()) +} + +const ( + defaultPort = "443" + defaultFreq = time.Minute * 30 + golang = "GO" + // In DNS, service config is encoded in a TXT record via the mechanism + // described in RFC-1464 using the attribute name grpc_config. + txtAttribute = "grpc_config=" +) + +var errMissingAddr = errors.New("missing address") + +// NewBuilder creates a dnsBuilder which is used to factory DNS resolvers. +func NewBuilder() resolver.Builder { + return &dnsBuilder{freq: defaultFreq} +} + +type dnsBuilder struct { + // frequency of polling the DNS server. + freq time.Duration +} + +// Build creates and starts a DNS resolver that watches the name resolution of the target. +func (b *dnsBuilder) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOption) (resolver.Resolver, error) { + host, port, err := parseTarget(target.Endpoint) + if err != nil { + return nil, err + } + + // IP address. + if net.ParseIP(host) != nil { + host, _ = formatIP(host) + addr := []resolver.Address{{Addr: host + ":" + port}} + i := &ipResolver{ + cc: cc, + ip: addr, + rn: make(chan struct{}, 1), + q: make(chan struct{}), + } + cc.NewAddress(addr) + go i.watcher() + return i, nil + } + + // DNS address (non-IP). + ctx, cancel := context.WithCancel(context.Background()) + d := &dnsResolver{ + freq: b.freq, + host: host, + port: port, + ctx: ctx, + cancel: cancel, + cc: cc, + t: time.NewTimer(0), + rn: make(chan struct{}, 1), + } + + d.wg.Add(1) + go d.watcher() + return d, nil +} + +// Scheme returns the naming scheme of this resolver builder, which is "dns". +func (b *dnsBuilder) Scheme() string { + return "dns" +} + +// ipResolver watches for the name resolution update for an IP address. +type ipResolver struct { + cc resolver.ClientConn + ip []resolver.Address + // rn channel is used by ResolveNow() to force an immediate resolution of the target. + rn chan struct{} + q chan struct{} +} + +// ResolveNow resend the address it stores, no resolution is needed. +func (i *ipResolver) ResolveNow(opt resolver.ResolveNowOption) { + select { + case i.rn <- struct{}{}: + default: + } +} + +// Close closes the ipResolver. +func (i *ipResolver) Close() { + close(i.q) +} + +func (i *ipResolver) watcher() { + for { + select { + case <-i.rn: + i.cc.NewAddress(i.ip) + case <-i.q: + return + } + } +} + +// dnsResolver watches for the name resolution update for a non-IP target. +type dnsResolver struct { + freq time.Duration + host string + port string + ctx context.Context + cancel context.CancelFunc + cc resolver.ClientConn + // rn channel is used by ResolveNow() to force an immediate resolution of the target. + rn chan struct{} + t *time.Timer + // wg is used to enforce Close() to return after the watcher() goroutine has finished. + // Otherwise, data race will be possible. [Race Example] in dns_resolver_test we + // replace the real lookup functions with mocked ones to facilitate testing. + // If Close() doesn't wait for watcher() goroutine finishes, race detector sometimes + // will warns lookup (READ the lookup function pointers) inside watcher() goroutine + // has data race with replaceNetFunc (WRITE the lookup function pointers). + wg sync.WaitGroup +} + +// ResolveNow invoke an immediate resolution of the target that this dnsResolver watches. +func (d *dnsResolver) ResolveNow(opt resolver.ResolveNowOption) { + select { + case d.rn <- struct{}{}: + default: + } +} + +// Close closes the dnsResolver. +func (d *dnsResolver) Close() { + d.cancel() + d.wg.Wait() + d.t.Stop() +} + +func (d *dnsResolver) watcher() { + defer d.wg.Done() + for { + select { + case <-d.ctx.Done(): + return + case <-d.t.C: + case <-d.rn: + } + result, sc := d.lookup() + // Next lookup should happen after an interval defined by d.freq. + d.t.Reset(d.freq) + d.cc.NewServiceConfig(string(sc)) + d.cc.NewAddress(result) + } +} + +func (d *dnsResolver) lookupSRV() []resolver.Address { + var newAddrs []resolver.Address + _, srvs, err := lookupSRV(d.ctx, "grpclb", "tcp", d.host) + if err != nil { + grpclog.Infof("grpc: failed dns SRV record lookup due to %v.\n", err) + return nil + } + for _, s := range srvs { + lbAddrs, err := lookupHost(d.ctx, s.Target) + if err != nil { + grpclog.Warningf("grpc: failed load banlacer address dns lookup due to %v.\n", err) + continue + } + for _, a := range lbAddrs { + a, ok := formatIP(a) + if !ok { + grpclog.Errorf("grpc: failed IP parsing due to %v.\n", err) + continue + } + addr := a + ":" + strconv.Itoa(int(s.Port)) + newAddrs = append(newAddrs, resolver.Address{Addr: addr, Type: resolver.GRPCLB, ServerName: s.Target}) + } + } + return newAddrs +} + +func (d *dnsResolver) lookupTXT() string { + ss, err := lookupTXT(d.ctx, d.host) + if err != nil { + grpclog.Warningf("grpc: failed dns TXT record lookup due to %v.\n", err) + return "" + } + var res string + for _, s := range ss { + res += s + } + + // TXT record must have "grpc_config=" attribute in order to be used as service config. + if !strings.HasPrefix(res, txtAttribute) { + grpclog.Warningf("grpc: TXT record %v missing %v attribute", res, txtAttribute) + return "" + } + return strings.TrimPrefix(res, txtAttribute) +} + +func (d *dnsResolver) lookupHost() []resolver.Address { + var newAddrs []resolver.Address + addrs, err := lookupHost(d.ctx, d.host) + if err != nil { + grpclog.Warningf("grpc: failed dns A record lookup due to %v.\n", err) + return nil + } + for _, a := range addrs { + a, ok := formatIP(a) + if !ok { + grpclog.Errorf("grpc: failed IP parsing due to %v.\n", err) + continue + } + addr := a + ":" + d.port + newAddrs = append(newAddrs, resolver.Address{Addr: addr}) + } + return newAddrs +} + +func (d *dnsResolver) lookup() ([]resolver.Address, string) { + var newAddrs []resolver.Address + newAddrs = d.lookupSRV() + // Support fallback to non-balancer address. + newAddrs = append(newAddrs, d.lookupHost()...) + sc := d.lookupTXT() + return newAddrs, canaryingSC(sc) +} + +// formatIP returns ok = false if addr is not a valid textual representation of an IP address. +// If addr is an IPv4 address, return the addr and ok = true. +// If addr is an IPv6 address, return the addr enclosed in square brackets and ok = true. +func formatIP(addr string) (addrIP string, ok bool) { + ip := net.ParseIP(addr) + if ip == nil { + return "", false + } + if ip.To4() != nil { + return addr, true + } + return "[" + addr + "]", true +} + +// parseTarget takes the user input target string, returns formatted host and port info. +// If target doesn't specify a port, set the port to be the defaultPort. +// If target is in IPv6 format and host-name is enclosed in sqarue brackets, brackets +// are strippd when setting the host. +// examples: +// target: "www.google.com" returns host: "www.google.com", port: "443" +// target: "ipv4-host:80" returns host: "ipv4-host", port: "80" +// target: "[ipv6-host]" returns host: "ipv6-host", port: "443" +// target: ":80" returns host: "localhost", port: "80" +// target: ":" returns host: "localhost", port: "443" +func parseTarget(target string) (host, port string, err error) { + if target == "" { + return "", "", errMissingAddr + } + if ip := net.ParseIP(target); ip != nil { + // target is an IPv4 or IPv6(without brackets) address + return target, defaultPort, nil + } + if host, port, err = net.SplitHostPort(target); err == nil { + // target has port, i.e ipv4-host:port, [ipv6-host]:port, host-name:port + if host == "" { + // Keep consistent with net.Dial(): If the host is empty, as in ":80", the local system is assumed. + host = "localhost" + } + if port == "" { + // If the port field is empty(target ends with colon), e.g. "[::1]:", defaultPort is used. + port = defaultPort + } + return host, port, nil + } + if host, port, err = net.SplitHostPort(target + ":" + defaultPort); err == nil { + // target doesn't have port + return host, port, nil + } + return "", "", fmt.Errorf("invalid target address %v, error info: %v", target, err) +} + +type rawChoice struct { + ClientLanguage *[]string `json:"clientLanguage,omitempty"` + Percentage *int `json:"percentage,omitempty"` + ClientHostName *[]string `json:"clientHostName,omitempty"` + ServiceConfig *json.RawMessage `json:"serviceConfig,omitempty"` +} + +func containsString(a *[]string, b string) bool { + if a == nil { + return true + } + for _, c := range *a { + if c == b { + return true + } + } + return false +} + +func chosenByPercentage(a *int) bool { + if a == nil { + return true + } + s := rand.NewSource(time.Now().UnixNano()) + r := rand.New(s) + if r.Intn(100)+1 > *a { + return false + } + return true +} + +func canaryingSC(js string) string { + if js == "" { + return "" + } + var rcs []rawChoice + err := json.Unmarshal([]byte(js), &rcs) + if err != nil { + grpclog.Warningf("grpc: failed to parse service config json string due to %v.\n", err) + return "" + } + cliHostname, err := os.Hostname() + if err != nil { + grpclog.Warningf("grpc: failed to get client hostname due to %v.\n", err) + return "" + } + var sc string + for _, c := range rcs { + if !containsString(c.ClientLanguage, golang) || + !chosenByPercentage(c.Percentage) || + !containsString(c.ClientHostName, cliHostname) || + c.ServiceConfig == nil { + continue + } + sc = string(*c.ServiceConfig) + break + } + return sc +} diff --git a/vendor/google.golang.org/grpc/resolver/dns/dns_resolver_test.go b/vendor/google.golang.org/grpc/resolver/dns/dns_resolver_test.go new file mode 100644 index 0000000..41a9ecb --- /dev/null +++ b/vendor/google.golang.org/grpc/resolver/dns/dns_resolver_test.go @@ -0,0 +1,894 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package dns + +import ( + "fmt" + "net" + "os" + "reflect" + "sync" + "testing" + "time" + + "google.golang.org/grpc/resolver" + "google.golang.org/grpc/test/leakcheck" +) + +func TestMain(m *testing.M) { + cleanup := replaceNetFunc() + code := m.Run() + cleanup() + os.Exit(code) +} + +const ( + txtBytesLimit = 255 +) + +type testClientConn struct { + target string + m1 sync.Mutex + addrs []resolver.Address + a int + m2 sync.Mutex + sc string + s int +} + +func (t *testClientConn) NewAddress(addresses []resolver.Address) { + t.m1.Lock() + defer t.m1.Unlock() + t.addrs = addresses + t.a++ +} + +func (t *testClientConn) getAddress() ([]resolver.Address, int) { + t.m1.Lock() + defer t.m1.Unlock() + return t.addrs, t.a +} + +func (t *testClientConn) NewServiceConfig(serviceConfig string) { + t.m2.Lock() + defer t.m2.Unlock() + t.sc = serviceConfig + t.s++ +} + +func (t *testClientConn) getSc() (string, int) { + t.m2.Lock() + defer t.m2.Unlock() + return t.sc, t.s +} + +var hostLookupTbl = struct { + sync.Mutex + tbl map[string][]string +}{ + tbl: map[string][]string{ + "foo.bar.com": {"1.2.3.4", "5.6.7.8"}, + "ipv4.single.fake": {"1.2.3.4"}, + "srv.ipv4.single.fake": {"2.4.6.8"}, + "ipv4.multi.fake": {"1.2.3.4", "5.6.7.8", "9.10.11.12"}, + "ipv6.single.fake": {"2607:f8b0:400a:801::1001"}, + "ipv6.multi.fake": {"2607:f8b0:400a:801::1001", "2607:f8b0:400a:801::1002", "2607:f8b0:400a:801::1003"}, + }, +} + +func hostLookup(host string) ([]string, error) { + hostLookupTbl.Lock() + defer hostLookupTbl.Unlock() + if addrs, cnt := hostLookupTbl.tbl[host]; cnt { + return addrs, nil + } + return nil, fmt.Errorf("failed to lookup host:%s resolution in hostLookupTbl", host) +} + +var srvLookupTbl = struct { + sync.Mutex + tbl map[string][]*net.SRV +}{ + tbl: map[string][]*net.SRV{ + "_grpclb._tcp.srv.ipv4.single.fake": {&net.SRV{Target: "ipv4.single.fake", Port: 1234}}, + "_grpclb._tcp.srv.ipv4.multi.fake": {&net.SRV{Target: "ipv4.multi.fake", Port: 1234}}, + "_grpclb._tcp.srv.ipv6.single.fake": {&net.SRV{Target: "ipv6.single.fake", Port: 1234}}, + "_grpclb._tcp.srv.ipv6.multi.fake": {&net.SRV{Target: "ipv6.multi.fake", Port: 1234}}, + }, +} + +func srvLookup(service, proto, name string) (string, []*net.SRV, error) { + cname := "_" + service + "._" + proto + "." + name + srvLookupTbl.Lock() + defer srvLookupTbl.Unlock() + if srvs, cnt := srvLookupTbl.tbl[cname]; cnt { + return cname, srvs, nil + } + return "", nil, fmt.Errorf("failed to lookup srv record for %s in srvLookupTbl", cname) +} + +// div divides a byte slice into a slice of strings, each of which is of maximum +// 255 bytes length, which is the length limit per TXT record in DNS. +func div(b []byte) []string { + var r []string + for i := 0; i < len(b); i += txtBytesLimit { + if i+txtBytesLimit > len(b) { + r = append(r, string(b[i:])) + } else { + r = append(r, string(b[i:i+txtBytesLimit])) + } + } + return r +} + +// scfs contains an array of service config file string in JSON format. +// Notes about the scfs contents and usage: +// scfs contains 4 service config file JSON strings for testing. Inside each +// service config file, there are multiple choices. scfs[0:3] each contains 5 +// choices, and first 3 choices are nonmatching choices based on canarying rule, +// while the last two are matched choices. scfs[3] only contains 3 choices, and +// all of them are nonmatching based on canarying rule. For each of scfs[0:3], +// the eventually returned service config, which is from the first of the two +// matched choices, is stored in the corresponding scs element (e.g. +// scfs[0]->scs[0]). scfs and scs elements are used in pair to test the dns +// resolver functionality, with scfs as the input and scs used for validation of +// the output. For scfs[3], it corresponds to empty service config, since there +// isn't a matched choice. +var scfs = []string{ + `[ + { + "clientLanguage": [ + "CPP", + "JAVA" + ], + "serviceConfig": { + "loadBalancingPolicy": "grpclb", + "methodConfig": [ + { + "name": [ + { + "service": "all" + } + ], + "timeout": "1s" + } + ] + } + }, + { + "percentage": 0, + "serviceConfig": { + "loadBalancingPolicy": "grpclb", + "methodConfig": [ + { + "name": [ + { + "service": "all" + } + ], + "timeout": "1s" + } + ] + } + }, + { + "clientHostName": [ + "localhost" + ], + "serviceConfig": { + "loadBalancingPolicy": "grpclb", + "methodConfig": [ + { + "name": [ + { + "service": "all" + } + ], + "timeout": "1s" + } + ] + } + }, + { + "clientLanguage": [ + "GO" + ], + "percentage": 100, + "serviceConfig": { + "methodConfig": [ + { + "name": [ + { + "method": "bar" + } + ], + "maxRequestMessageBytes": 1024, + "maxResponseMessageBytes": 1024 + } + ] + } + }, + { + "serviceConfig": { + "loadBalancingPolicy": "round_robin", + "methodConfig": [ + { + "name": [ + { + "service": "foo", + "method": "bar" + } + ], + "waitForReady": true + } + ] + } + } +]`, + `[ + { + "clientLanguage": [ + "CPP", + "JAVA" + ], + "serviceConfig": { + "loadBalancingPolicy": "grpclb", + "methodConfig": [ + { + "name": [ + { + "service": "all" + } + ], + "timeout": "1s" + } + ] + } + }, + { + "percentage": 0, + "serviceConfig": { + "loadBalancingPolicy": "grpclb", + "methodConfig": [ + { + "name": [ + { + "service": "all" + } + ], + "timeout": "1s" + } + ] + } + }, + { + "clientHostName": [ + "localhost" + ], + "serviceConfig": { + "loadBalancingPolicy": "grpclb", + "methodConfig": [ + { + "name": [ + { + "service": "all" + } + ], + "timeout": "1s" + } + ] + } + }, + { + "clientLanguage": [ + "GO" + ], + "percentage": 100, + "serviceConfig": { + "methodConfig": [ + { + "name": [ + { + "service": "foo", + "method": "bar" + } + ], + "waitForReady": true, + "timeout": "1s", + "maxRequestMessageBytes": 1024, + "maxResponseMessageBytes": 1024 + } + ] + } + }, + { + "serviceConfig": { + "loadBalancingPolicy": "round_robin", + "methodConfig": [ + { + "name": [ + { + "service": "foo", + "method": "bar" + } + ], + "waitForReady": true + } + ] + } + } +]`, + `[ + { + "clientLanguage": [ + "CPP", + "JAVA" + ], + "serviceConfig": { + "loadBalancingPolicy": "grpclb", + "methodConfig": [ + { + "name": [ + { + "service": "all" + } + ], + "timeout": "1s" + } + ] + } + }, + { + "percentage": 0, + "serviceConfig": { + "loadBalancingPolicy": "grpclb", + "methodConfig": [ + { + "name": [ + { + "service": "all" + } + ], + "timeout": "1s" + } + ] + } + }, + { + "clientHostName": [ + "localhost" + ], + "serviceConfig": { + "loadBalancingPolicy": "grpclb", + "methodConfig": [ + { + "name": [ + { + "service": "all" + } + ], + "timeout": "1s" + } + ] + } + }, + { + "clientLanguage": [ + "GO" + ], + "percentage": 100, + "serviceConfig": { + "loadBalancingPolicy": "round_robin", + "methodConfig": [ + { + "name": [ + { + "service": "foo" + } + ], + "waitForReady": true, + "timeout": "1s" + }, + { + "name": [ + { + "service": "bar" + } + ], + "waitForReady": false + } + ] + } + }, + { + "serviceConfig": { + "loadBalancingPolicy": "round_robin", + "methodConfig": [ + { + "name": [ + { + "service": "foo", + "method": "bar" + } + ], + "waitForReady": true + } + ] + } + } +]`, + `[ + { + "clientLanguage": [ + "CPP", + "JAVA" + ], + "serviceConfig": { + "loadBalancingPolicy": "grpclb", + "methodConfig": [ + { + "name": [ + { + "service": "all" + } + ], + "timeout": "1s" + } + ] + } + }, + { + "percentage": 0, + "serviceConfig": { + "loadBalancingPolicy": "grpclb", + "methodConfig": [ + { + "name": [ + { + "service": "all" + } + ], + "timeout": "1s" + } + ] + } + }, + { + "clientHostName": [ + "localhost" + ], + "serviceConfig": { + "loadBalancingPolicy": "grpclb", + "methodConfig": [ + { + "name": [ + { + "service": "all" + } + ], + "timeout": "1s" + } + ] + } + } +]`, +} + +// scs contains an array of service config string in JSON format. +var scs = []string{ + `{ + "methodConfig": [ + { + "name": [ + { + "method": "bar" + } + ], + "maxRequestMessageBytes": 1024, + "maxResponseMessageBytes": 1024 + } + ] + }`, + `{ + "methodConfig": [ + { + "name": [ + { + "service": "foo", + "method": "bar" + } + ], + "waitForReady": true, + "timeout": "1s", + "maxRequestMessageBytes": 1024, + "maxResponseMessageBytes": 1024 + } + ] + }`, + `{ + "loadBalancingPolicy": "round_robin", + "methodConfig": [ + { + "name": [ + { + "service": "foo" + } + ], + "waitForReady": true, + "timeout": "1s" + }, + { + "name": [ + { + "service": "bar" + } + ], + "waitForReady": false + } + ] + }`, +} + +// scLookupTbl is a set, which contains targets that have service config. Target +// not in this set should not have service config. +var scLookupTbl = map[string]bool{ + "foo.bar.com": true, + "srv.ipv4.single.fake": true, + "srv.ipv4.multi.fake": true, + "no.attribute": true, +} + +// generateSCF generates a slice of strings (aggregately representing a single +// service config file) for the input name, which mocks the result from a real +// DNS TXT record lookup. +func generateSCF(name string) []string { + var b []byte + switch name { + case "foo.bar.com": + b = []byte(scfs[0]) + case "srv.ipv4.single.fake": + b = []byte(scfs[1]) + case "srv.ipv4.multi.fake": + b = []byte(scfs[2]) + default: + b = []byte(scfs[3]) + } + if name == "no.attribute" { + return div(b) + } + return div(append([]byte(txtAttribute), b...)) +} + +// generateSC returns a service config string in JSON format for the input name. +func generateSC(name string) string { + _, cnt := scLookupTbl[name] + if !cnt || name == "no.attribute" { + return "" + } + switch name { + case "foo.bar.com": + return scs[0] + case "srv.ipv4.single.fake": + return scs[1] + case "srv.ipv4.multi.fake": + return scs[2] + default: + return "" + } +} + +var txtLookupTbl = struct { + sync.Mutex + tbl map[string][]string +}{ + tbl: map[string][]string{ + "foo.bar.com": generateSCF("foo.bar.com"), + "srv.ipv4.single.fake": generateSCF("srv.ipv4.single.fake"), + "srv.ipv4.multi.fake": generateSCF("srv.ipv4.multi.fake"), + "srv.ipv6.single.fake": generateSCF("srv.ipv6.single.fake"), + "srv.ipv6.multi.fake": generateSCF("srv.ipv6.multi.fake"), + "no.attribute": generateSCF("no.attribute"), + }, +} + +func txtLookup(host string) ([]string, error) { + txtLookupTbl.Lock() + defer txtLookupTbl.Unlock() + if scs, cnt := txtLookupTbl.tbl[host]; cnt { + return scs, nil + } + return nil, fmt.Errorf("failed to lookup TXT:%s resolution in txtLookupTbl", host) +} + +func TestResolve(t *testing.T) { + testDNSResolver(t) + testDNSResolveNow(t) + testIPResolver(t) +} + +func testDNSResolver(t *testing.T) { + defer leakcheck.Check(t) + tests := []struct { + target string + addrWant []resolver.Address + scWant string + }{ + { + "foo.bar.com", + []resolver.Address{{Addr: "1.2.3.4" + colonDefaultPort}, {Addr: "5.6.7.8" + colonDefaultPort}}, + generateSC("foo.bar.com"), + }, + { + "foo.bar.com:1234", + []resolver.Address{{Addr: "1.2.3.4:1234"}, {Addr: "5.6.7.8:1234"}}, + generateSC("foo.bar.com"), + }, + { + "srv.ipv4.single.fake", + []resolver.Address{{Addr: "1.2.3.4:1234", Type: resolver.GRPCLB, ServerName: "ipv4.single.fake"}, {Addr: "2.4.6.8" + colonDefaultPort}}, + generateSC("srv.ipv4.single.fake"), + }, + { + "srv.ipv4.multi.fake", + []resolver.Address{ + {Addr: "1.2.3.4:1234", Type: resolver.GRPCLB, ServerName: "ipv4.multi.fake"}, + {Addr: "5.6.7.8:1234", Type: resolver.GRPCLB, ServerName: "ipv4.multi.fake"}, + {Addr: "9.10.11.12:1234", Type: resolver.GRPCLB, ServerName: "ipv4.multi.fake"}, + }, + generateSC("srv.ipv4.multi.fake"), + }, + { + "srv.ipv6.single.fake", + []resolver.Address{{Addr: "[2607:f8b0:400a:801::1001]:1234", Type: resolver.GRPCLB, ServerName: "ipv6.single.fake"}}, + generateSC("srv.ipv6.single.fake"), + }, + { + "srv.ipv6.multi.fake", + []resolver.Address{ + {Addr: "[2607:f8b0:400a:801::1001]:1234", Type: resolver.GRPCLB, ServerName: "ipv6.multi.fake"}, + {Addr: "[2607:f8b0:400a:801::1002]:1234", Type: resolver.GRPCLB, ServerName: "ipv6.multi.fake"}, + {Addr: "[2607:f8b0:400a:801::1003]:1234", Type: resolver.GRPCLB, ServerName: "ipv6.multi.fake"}, + }, + generateSC("srv.ipv6.multi.fake"), + }, + { + "no.attribute", + nil, + generateSC("no.attribute"), + }, + } + + for _, a := range tests { + b := NewBuilder() + cc := &testClientConn{target: a.target} + r, err := b.Build(resolver.Target{Endpoint: a.target}, cc, resolver.BuildOption{}) + if err != nil { + t.Fatalf("%v\n", err) + } + var addrs []resolver.Address + var cnt int + for { + addrs, cnt = cc.getAddress() + if cnt > 0 { + break + } + time.Sleep(time.Millisecond) + } + var sc string + for { + sc, cnt = cc.getSc() + if cnt > 0 { + break + } + time.Sleep(time.Millisecond) + } + if !reflect.DeepEqual(a.addrWant, addrs) { + t.Errorf("Resolved addresses of target: %q = %+v, want %+v\n", a.target, addrs, a.addrWant) + } + if !reflect.DeepEqual(a.scWant, sc) { + t.Errorf("Resolved service config of target: %q = %+v, want %+v\n", a.target, sc, a.scWant) + } + r.Close() + } +} + +func mutateTbl(target string) func() { + hostLookupTbl.Lock() + oldHostTblEntry := hostLookupTbl.tbl[target] + hostLookupTbl.tbl[target] = hostLookupTbl.tbl[target][:len(oldHostTblEntry)-1] + hostLookupTbl.Unlock() + txtLookupTbl.Lock() + oldTxtTblEntry := txtLookupTbl.tbl[target] + txtLookupTbl.tbl[target] = []string{""} + txtLookupTbl.Unlock() + + return func() { + hostLookupTbl.Lock() + hostLookupTbl.tbl[target] = oldHostTblEntry + hostLookupTbl.Unlock() + txtLookupTbl.Lock() + txtLookupTbl.tbl[target] = oldTxtTblEntry + txtLookupTbl.Unlock() + } +} + +func testDNSResolveNow(t *testing.T) { + defer leakcheck.Check(t) + tests := []struct { + target string + addrWant []resolver.Address + addrNext []resolver.Address + scWant string + scNext string + }{ + { + "foo.bar.com", + []resolver.Address{{Addr: "1.2.3.4" + colonDefaultPort}, {Addr: "5.6.7.8" + colonDefaultPort}}, + []resolver.Address{{Addr: "1.2.3.4" + colonDefaultPort}}, + generateSC("foo.bar.com"), + "", + }, + } + + for _, a := range tests { + b := NewBuilder() + cc := &testClientConn{target: a.target} + r, err := b.Build(resolver.Target{Endpoint: a.target}, cc, resolver.BuildOption{}) + if err != nil { + t.Fatalf("%v\n", err) + } + var addrs []resolver.Address + var cnt int + for { + addrs, cnt = cc.getAddress() + if cnt > 0 { + break + } + time.Sleep(time.Millisecond) + } + var sc string + for { + sc, cnt = cc.getSc() + if cnt > 0 { + break + } + time.Sleep(time.Millisecond) + } + if !reflect.DeepEqual(a.addrWant, addrs) { + t.Errorf("Resolved addresses of target: %q = %+v, want %+v\n", a.target, addrs, a.addrWant) + } + if !reflect.DeepEqual(a.scWant, sc) { + t.Errorf("Resolved service config of target: %q = %+v, want %+v\n", a.target, sc, a.scWant) + } + revertTbl := mutateTbl(a.target) + r.ResolveNow(resolver.ResolveNowOption{}) + for { + addrs, cnt = cc.getAddress() + if cnt == 2 { + break + } + time.Sleep(time.Millisecond) + } + for { + sc, cnt = cc.getSc() + if cnt == 2 { + break + } + time.Sleep(time.Millisecond) + } + if !reflect.DeepEqual(a.addrNext, addrs) { + t.Errorf("Resolved addresses of target: %q = %+v, want %+v\n", a.target, addrs, a.addrNext) + } + if !reflect.DeepEqual(a.scNext, sc) { + t.Errorf("Resolved service config of target: %q = %+v, want %+v\n", a.target, sc, a.scNext) + } + revertTbl() + r.Close() + } +} + +const colonDefaultPort = ":" + defaultPort + +func testIPResolver(t *testing.T) { + defer leakcheck.Check(t) + tests := []struct { + target string + want []resolver.Address + }{ + {"127.0.0.1", []resolver.Address{{Addr: "127.0.0.1" + colonDefaultPort}}}, + {"127.0.0.1:12345", []resolver.Address{{Addr: "127.0.0.1:12345"}}}, + {"::1", []resolver.Address{{Addr: "[::1]" + colonDefaultPort}}}, + {"[::1]:12345", []resolver.Address{{Addr: "[::1]:12345"}}}, + {"[::1]:", []resolver.Address{{Addr: "[::1]:443"}}}, + {"2001:db8:85a3::8a2e:370:7334", []resolver.Address{{Addr: "[2001:db8:85a3::8a2e:370:7334]" + colonDefaultPort}}}, + {"[2001:db8:85a3::8a2e:370:7334]", []resolver.Address{{Addr: "[2001:db8:85a3::8a2e:370:7334]" + colonDefaultPort}}}, + {"[2001:db8:85a3::8a2e:370:7334]:12345", []resolver.Address{{Addr: "[2001:db8:85a3::8a2e:370:7334]:12345"}}}, + {"[2001:db8::1]:http", []resolver.Address{{Addr: "[2001:db8::1]:http"}}}, + // TODO(yuxuanli): zone support? + } + + for _, v := range tests { + b := NewBuilder() + cc := &testClientConn{target: v.target} + r, err := b.Build(resolver.Target{Endpoint: v.target}, cc, resolver.BuildOption{}) + if err != nil { + t.Fatalf("%v\n", err) + } + var addrs []resolver.Address + var cnt int + for { + addrs, cnt = cc.getAddress() + if cnt > 0 { + break + } + time.Sleep(time.Millisecond) + } + if !reflect.DeepEqual(v.want, addrs) { + t.Errorf("Resolved addresses of target: %q = %+v, want %+v\n", v.target, addrs, v.want) + } + r.ResolveNow(resolver.ResolveNowOption{}) + for { + addrs, cnt = cc.getAddress() + if cnt == 2 { + break + } + time.Sleep(time.Millisecond) + } + if !reflect.DeepEqual(v.want, addrs) { + t.Errorf("Resolved addresses of target: %q = %+v, want %+v\n", v.target, addrs, v.want) + } + r.Close() + } +} + +func TestResolveFunc(t *testing.T) { + defer leakcheck.Check(t) + tests := []struct { + addr string + want error + }{ + // TODO(yuxuanli): More false cases? + {"www.google.com", nil}, + {"foo.bar:12345", nil}, + {"127.0.0.1", nil}, + {"127.0.0.1:12345", nil}, + {"[::1]:80", nil}, + {"[2001:db8:a0b:12f0::1]:21", nil}, + {":80", nil}, + {"127.0.0...1:12345", nil}, + {"[fe80::1%lo0]:80", nil}, + {"golang.org:http", nil}, + {"[2001:db8::1]:http", nil}, + {":", nil}, + {"", errMissingAddr}, + {"[2001:db8:a0b:12f0::1", errForInvalidTarget}, + } + + b := NewBuilder() + for _, v := range tests { + cc := &testClientConn{target: v.addr} + r, err := b.Build(resolver.Target{Endpoint: v.addr}, cc, resolver.BuildOption{}) + if err == nil { + r.Close() + } + if !reflect.DeepEqual(err, v.want) { + t.Errorf("Build(%q, cc, resolver.BuildOption{}) = %v, want %v", v.addr, err, v.want) + } + } +} diff --git a/vendor/google.golang.org/grpc/resolver/dns/go17.go b/vendor/google.golang.org/grpc/resolver/dns/go17.go new file mode 100644 index 0000000..b466bc8 --- /dev/null +++ b/vendor/google.golang.org/grpc/resolver/dns/go17.go @@ -0,0 +1,35 @@ +// +build go1.6, !go1.8 + +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package dns + +import ( + "net" + + "golang.org/x/net/context" +) + +var ( + lookupHost = func(ctx context.Context, host string) ([]string, error) { return net.LookupHost(host) } + lookupSRV = func(ctx context.Context, service, proto, name string) (string, []*net.SRV, error) { + return net.LookupSRV(service, proto, name) + } + lookupTXT = func(ctx context.Context, name string) ([]string, error) { return net.LookupTXT(name) } +) diff --git a/vendor/google.golang.org/grpc/resolver/dns/go17_test.go b/vendor/google.golang.org/grpc/resolver/dns/go17_test.go new file mode 100644 index 0000000..21eaa88 --- /dev/null +++ b/vendor/google.golang.org/grpc/resolver/dns/go17_test.go @@ -0,0 +1,50 @@ +// +build go1.6, !go1.8 + +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package dns + +import ( + "fmt" + "net" + + "golang.org/x/net/context" +) + +var errForInvalidTarget = fmt.Errorf("invalid target address [2001:db8:a0b:12f0::1, error info: missing ']' in address [2001:db8:a0b:12f0::1:443") + +func replaceNetFunc() func() { + oldLookupHost := lookupHost + oldLookupSRV := lookupSRV + oldLookupTXT := lookupTXT + lookupHost = func(ctx context.Context, host string) ([]string, error) { + return hostLookup(host) + } + lookupSRV = func(ctx context.Context, service, proto, name string) (string, []*net.SRV, error) { + return srvLookup(service, proto, name) + } + lookupTXT = func(ctx context.Context, host string) ([]string, error) { + return txtLookup(host) + } + return func() { + lookupHost = oldLookupHost + lookupSRV = oldLookupSRV + lookupTXT = oldLookupTXT + } +} diff --git a/vendor/google.golang.org/grpc/resolver/dns/go18.go b/vendor/google.golang.org/grpc/resolver/dns/go18.go new file mode 100644 index 0000000..fa34f14 --- /dev/null +++ b/vendor/google.golang.org/grpc/resolver/dns/go18.go @@ -0,0 +1,29 @@ +// +build go1.8 + +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package dns + +import "net" + +var ( + lookupHost = net.DefaultResolver.LookupHost + lookupSRV = net.DefaultResolver.LookupSRV + lookupTXT = net.DefaultResolver.LookupTXT +) diff --git a/vendor/google.golang.org/grpc/resolver/dns/go18_test.go b/vendor/google.golang.org/grpc/resolver/dns/go18_test.go new file mode 100644 index 0000000..b0149c8 --- /dev/null +++ b/vendor/google.golang.org/grpc/resolver/dns/go18_test.go @@ -0,0 +1,49 @@ +// +build go1.8 + +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package dns + +import ( + "context" + "fmt" + "net" +) + +var errForInvalidTarget = fmt.Errorf("invalid target address [2001:db8:a0b:12f0::1, error info: address [2001:db8:a0b:12f0::1:443: missing ']' in address") + +func replaceNetFunc() func() { + oldLookupHost := lookupHost + oldLookupSRV := lookupSRV + oldLookupTXT := lookupTXT + lookupHost = func(ctx context.Context, host string) ([]string, error) { + return hostLookup(host) + } + lookupSRV = func(ctx context.Context, service, proto, name string) (string, []*net.SRV, error) { + return srvLookup(service, proto, name) + } + lookupTXT = func(ctx context.Context, host string) ([]string, error) { + return txtLookup(host) + } + return func() { + lookupHost = oldLookupHost + lookupSRV = oldLookupSRV + lookupTXT = oldLookupTXT + } +} diff --git a/vendor/google.golang.org/grpc/resolver/manual/manual.go b/vendor/google.golang.org/grpc/resolver/manual/manual.go new file mode 100644 index 0000000..50ed762 --- /dev/null +++ b/vendor/google.golang.org/grpc/resolver/manual/manual.go @@ -0,0 +1,91 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Package manual defines a resolver that can be used to manually send resolved +// addresses to ClientConn. +package manual + +import ( + "strconv" + "time" + + "google.golang.org/grpc/resolver" +) + +// NewBuilderWithScheme creates a new test resolver builder with the given scheme. +func NewBuilderWithScheme(scheme string) *Resolver { + return &Resolver{ + scheme: scheme, + } +} + +// Resolver is also a resolver builder. +// It's build() function always returns itself. +type Resolver struct { + scheme string + + // Fields actually belong to the resolver. + cc resolver.ClientConn + bootstrapAddrs []resolver.Address +} + +// InitialAddrs adds resolved addresses to the resolver so that +// NewAddress doesn't need to be explicitly called after Dial. +func (r *Resolver) InitialAddrs(addrs []resolver.Address) { + r.bootstrapAddrs = addrs +} + +// Build returns itself for Resolver, because it's both a builder and a resolver. +func (r *Resolver) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOption) (resolver.Resolver, error) { + r.cc = cc + if r.bootstrapAddrs != nil { + r.NewAddress(r.bootstrapAddrs) + } + return r, nil +} + +// Scheme returns the test scheme. +func (r *Resolver) Scheme() string { + return r.scheme +} + +// ResolveNow is a noop for Resolver. +func (*Resolver) ResolveNow(o resolver.ResolveNowOption) {} + +// Close is a noop for Resolver. +func (*Resolver) Close() {} + +// NewAddress calls cc.NewAddress. +func (r *Resolver) NewAddress(addrs []resolver.Address) { + r.cc.NewAddress(addrs) +} + +// NewServiceConfig calls cc.NewServiceConfig. +func (r *Resolver) NewServiceConfig(sc string) { + r.cc.NewServiceConfig(sc) +} + +// GenerateAndRegisterManualResolver generates a random scheme and a Resolver +// with it. It also regieter this Resolver. +// It returns the Resolver and a cleanup function to unregister it. +func GenerateAndRegisterManualResolver() (*Resolver, func()) { + scheme := strconv.FormatInt(time.Now().UnixNano(), 36) + r := NewBuilderWithScheme(scheme) + resolver.Register(r) + return r, func() { resolver.UnregisterForTesting(scheme) } +} diff --git a/vendor/google.golang.org/grpc/resolver/passthrough/passthrough.go b/vendor/google.golang.org/grpc/resolver/passthrough/passthrough.go new file mode 100644 index 0000000..b76010d --- /dev/null +++ b/vendor/google.golang.org/grpc/resolver/passthrough/passthrough.go @@ -0,0 +1,57 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Package passthrough implements a pass-through resolver. It sends the target +// name without scheme back to gRPC as resolved address. +package passthrough + +import "google.golang.org/grpc/resolver" + +const scheme = "passthrough" + +type passthroughBuilder struct{} + +func (*passthroughBuilder) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOption) (resolver.Resolver, error) { + r := &passthroughResolver{ + target: target, + cc: cc, + } + r.start() + return r, nil +} + +func (*passthroughBuilder) Scheme() string { + return scheme +} + +type passthroughResolver struct { + target resolver.Target + cc resolver.ClientConn +} + +func (r *passthroughResolver) start() { + r.cc.NewAddress([]resolver.Address{{Addr: r.target.Endpoint}}) +} + +func (*passthroughResolver) ResolveNow(o resolver.ResolveNowOption) {} + +func (*passthroughResolver) Close() {} + +func init() { + resolver.Register(&passthroughBuilder{}) +} diff --git a/vendor/google.golang.org/grpc/resolver/resolver.go b/vendor/google.golang.org/grpc/resolver/resolver.go new file mode 100644 index 0000000..9efcffb --- /dev/null +++ b/vendor/google.golang.org/grpc/resolver/resolver.go @@ -0,0 +1,152 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Package resolver defines APIs for name resolution in gRPC. +// All APIs in this package are experimental. +package resolver + +var ( + // m is a map from scheme to resolver builder. + m = make(map[string]Builder) + // defaultScheme is the default scheme to use. + defaultScheme = "passthrough" +) + +// TODO(bar) install dns resolver in init(){}. + +// Register registers the resolver builder to the resolver map. +// b.Scheme will be used as the scheme registered with this builder. +func Register(b Builder) { + m[b.Scheme()] = b +} + +// Get returns the resolver builder registered with the given scheme. +// If no builder is register with the scheme, the default scheme will +// be used. +// If the default scheme is not modified, "passthrough" will be the default +// scheme, and the preinstalled dns resolver will be used. +// If the default scheme is modified, and a resolver is registered with +// the scheme, that resolver will be returned. +// If the default scheme is modified, and no resolver is registered with +// the scheme, nil will be returned. +func Get(scheme string) Builder { + if b, ok := m[scheme]; ok { + return b + } + if b, ok := m[defaultScheme]; ok { + return b + } + return nil +} + +// SetDefaultScheme sets the default scheme that will be used. +// The default default scheme is "passthrough". +func SetDefaultScheme(scheme string) { + defaultScheme = scheme +} + +// AddressType indicates the address type returned by name resolution. +type AddressType uint8 + +const ( + // Backend indicates the address is for a backend server. + Backend AddressType = iota + // GRPCLB indicates the address is for a grpclb load balancer. + GRPCLB +) + +// Address represents a server the client connects to. +// This is the EXPERIMENTAL API and may be changed or extended in the future. +type Address struct { + // Addr is the server address on which a connection will be established. + Addr string + // Type is the type of this address. + Type AddressType + // ServerName is the name of this address. + // + // e.g. if Type is GRPCLB, ServerName should be the name of the remote load + // balancer, not the name of the backend. + ServerName string + // Metadata is the information associated with Addr, which may be used + // to make load balancing decision. + Metadata interface{} +} + +// BuildOption includes additional information for the builder to create +// the resolver. +type BuildOption struct { +} + +// ClientConn contains the callbacks for resolver to notify any updates +// to the gRPC ClientConn. +// +// This interface is to be implemented by gRPC. Users should not need a +// brand new implementation of this interface. For the situations like +// testing, the new implementation should embed this interface. This allows +// gRPC to add new methods to this interface. +type ClientConn interface { + // NewAddress is called by resolver to notify ClientConn a new list + // of resolved addresses. + // The address list should be the complete list of resolved addresses. + NewAddress(addresses []Address) + // NewServiceConfig is called by resolver to notify ClientConn a new + // service config. The service config should be provided as a json string. + NewServiceConfig(serviceConfig string) +} + +// Target represents a target for gRPC, as specified in: +// https://github.com/grpc/grpc/blob/master/doc/naming.md. +type Target struct { + Scheme string + Authority string + Endpoint string +} + +// Builder creates a resolver that will be used to watch name resolution updates. +type Builder interface { + // Build creates a new resolver for the given target. + // + // gRPC dial calls Build synchronously, and fails if the returned error is + // not nil. + Build(target Target, cc ClientConn, opts BuildOption) (Resolver, error) + // Scheme returns the scheme supported by this resolver. + // Scheme is defined at https://github.com/grpc/grpc/blob/master/doc/naming.md. + Scheme() string +} + +// ResolveNowOption includes additional information for ResolveNow. +type ResolveNowOption struct{} + +// Resolver watches for the updates on the specified target. +// Updates include address updates and service config updates. +type Resolver interface { + // ResolveNow will be called by gRPC to try to resolve the target name + // again. It's just a hint, resolver can ignore this if it's not necessary. + // + // It could be called multiple times concurrently. + ResolveNow(ResolveNowOption) + // Close closes the resolver. + Close() +} + +// UnregisterForTesting removes the resolver builder with the given scheme from the +// resolver map. +// This function is for testing only. +func UnregisterForTesting(scheme string) { + delete(m, scheme) +} diff --git a/vendor/google.golang.org/grpc/resolver_conn_wrapper.go b/vendor/google.golang.org/grpc/resolver_conn_wrapper.go new file mode 100644 index 0000000..3e9c759 --- /dev/null +++ b/vendor/google.golang.org/grpc/resolver_conn_wrapper.go @@ -0,0 +1,160 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package grpc + +import ( + "fmt" + "strings" + + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/resolver" +) + +// ccResolverWrapper is a wrapper on top of cc for resolvers. +// It implements resolver.ClientConnection interface. +type ccResolverWrapper struct { + cc *ClientConn + resolver resolver.Resolver + addrCh chan []resolver.Address + scCh chan string + done chan struct{} +} + +// split2 returns the values from strings.SplitN(s, sep, 2). +// If sep is not found, it returns ("", s, false) instead. +func split2(s, sep string) (string, string, bool) { + spl := strings.SplitN(s, sep, 2) + if len(spl) < 2 { + return "", "", false + } + return spl[0], spl[1], true +} + +// parseTarget splits target into a struct containing scheme, authority and +// endpoint. +func parseTarget(target string) (ret resolver.Target) { + var ok bool + ret.Scheme, ret.Endpoint, ok = split2(target, "://") + if !ok { + return resolver.Target{Endpoint: target} + } + ret.Authority, ret.Endpoint, ok = split2(ret.Endpoint, "/") + if !ok { + return resolver.Target{Endpoint: target} + } + return ret +} + +// newCCResolverWrapper parses cc.target for scheme and gets the resolver +// builder for this scheme. It then builds the resolver and starts the +// monitoring goroutine for it. +// +// If withResolverBuilder dial option is set, the specified resolver will be +// used instead. +func newCCResolverWrapper(cc *ClientConn) (*ccResolverWrapper, error) { + grpclog.Infof("dialing to target with scheme: %q", cc.parsedTarget.Scheme) + + rb := cc.dopts.resolverBuilder + if rb == nil { + rb = resolver.Get(cc.parsedTarget.Scheme) + if rb == nil { + return nil, fmt.Errorf("could not get resolver for scheme: %q", cc.parsedTarget.Scheme) + } + } + + ccr := &ccResolverWrapper{ + cc: cc, + addrCh: make(chan []resolver.Address, 1), + scCh: make(chan string, 1), + done: make(chan struct{}), + } + + var err error + ccr.resolver, err = rb.Build(cc.parsedTarget, ccr, resolver.BuildOption{}) + if err != nil { + return nil, err + } + return ccr, nil +} + +func (ccr *ccResolverWrapper) start() { + go ccr.watcher() +} + +// watcher processes address updates and service config updates sequencially. +// Otherwise, we need to resolve possible races between address and service +// config (e.g. they specify different balancer types). +func (ccr *ccResolverWrapper) watcher() { + for { + select { + case <-ccr.done: + return + default: + } + + select { + case addrs := <-ccr.addrCh: + select { + case <-ccr.done: + return + default: + } + grpclog.Infof("ccResolverWrapper: sending new addresses to cc: %v", addrs) + ccr.cc.handleResolvedAddrs(addrs, nil) + case sc := <-ccr.scCh: + select { + case <-ccr.done: + return + default: + } + grpclog.Infof("ccResolverWrapper: got new service config: %v", sc) + ccr.cc.handleServiceConfig(sc) + case <-ccr.done: + return + } + } +} + +func (ccr *ccResolverWrapper) resolveNow(o resolver.ResolveNowOption) { + ccr.resolver.ResolveNow(o) +} + +func (ccr *ccResolverWrapper) close() { + ccr.resolver.Close() + close(ccr.done) +} + +// NewAddress is called by the resolver implemenetion to send addresses to gRPC. +func (ccr *ccResolverWrapper) NewAddress(addrs []resolver.Address) { + select { + case <-ccr.addrCh: + default: + } + ccr.addrCh <- addrs +} + +// NewServiceConfig is called by the resolver implemenetion to send service +// configs to gPRC. +func (ccr *ccResolverWrapper) NewServiceConfig(sc string) { + select { + case <-ccr.scCh: + default: + } + ccr.scCh <- sc +} diff --git a/vendor/google.golang.org/grpc/resolver_conn_wrapper_test.go b/vendor/google.golang.org/grpc/resolver_conn_wrapper_test.go new file mode 100644 index 0000000..3752c42 --- /dev/null +++ b/vendor/google.golang.org/grpc/resolver_conn_wrapper_test.go @@ -0,0 +1,87 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package grpc + +import ( + "testing" + + "google.golang.org/grpc/resolver" +) + +func TestParseTarget(t *testing.T) { + for _, test := range []resolver.Target{ + {"", "", ""}, + {"a", "", ""}, + {"", "a", ""}, + {"", "", "a"}, + {"a", "b", ""}, + {"a", "", "b"}, + {"", "a", "b"}, + {"a", "b", "c"}, + {"dns", "", "google.com"}, + {"dns", "a.server.com", "google.com"}, + {"dns", "a.server.com", "google.com/?a=b"}, + {"", "", "/unix/socket/address"}, + } { + str := test.Scheme + "://" + test.Authority + "/" + test.Endpoint + got := parseTarget(str) + if got != test { + t.Errorf("parseTarget(%q) = %+v, want %+v", str, got, test) + } + } +} + +func TestParseTargetString(t *testing.T) { + for _, test := range []struct { + targetStr string + want resolver.Target + }{ + {"", resolver.Target{"", "", ""}}, + {":///", resolver.Target{"", "", ""}}, + {"a:///", resolver.Target{"a", "", ""}}, + {"://a/", resolver.Target{"", "a", ""}}, + {":///a", resolver.Target{"", "", "a"}}, + {"a://b/", resolver.Target{"a", "b", ""}}, + {"a:///b", resolver.Target{"a", "", "b"}}, + {"://a/b", resolver.Target{"", "a", "b"}}, + {"a://b/c", resolver.Target{"a", "b", "c"}}, + {"dns:///google.com", resolver.Target{"dns", "", "google.com"}}, + {"dns://a.server.com/google.com", resolver.Target{"dns", "a.server.com", "google.com"}}, + {"dns://a.server.com/google.com/?a=b", resolver.Target{"dns", "a.server.com", "google.com/?a=b"}}, + + {"/", resolver.Target{"", "", "/"}}, + {"google.com", resolver.Target{"", "", "google.com"}}, + {"google.com/?a=b", resolver.Target{"", "", "google.com/?a=b"}}, + {"/unix/socket/address", resolver.Target{"", "", "/unix/socket/address"}}, + + // If we can only parse part of the target. + {"://", resolver.Target{"", "", "://"}}, + {"unix://domain", resolver.Target{"", "", "unix://domain"}}, + {"a:b", resolver.Target{"", "", "a:b"}}, + {"a/b", resolver.Target{"", "", "a/b"}}, + {"a:/b", resolver.Target{"", "", "a:/b"}}, + {"a//b", resolver.Target{"", "", "a//b"}}, + {"a://b", resolver.Target{"", "", "a://b"}}, + } { + got := parseTarget(test.targetStr) + if got != test.want { + t.Errorf("parseTarget(%q) = %+v, want %+v", test.targetStr, got, test.want) + } + } +} diff --git a/vendor/google.golang.org/grpc/rpc_util.go b/vendor/google.golang.org/grpc/rpc_util.go index a24257a..4cad61c 100644 --- a/vendor/google.golang.org/grpc/rpc_util.go +++ b/vendor/google.golang.org/grpc/rpc_util.go @@ -1,33 +1,18 @@ /* * - * Copyright 2014, Google Inc. - * All rights reserved. + * Copyright 2014 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -37,15 +22,19 @@ import ( "bytes" "compress/gzip" "encoding/binary" + "fmt" "io" "io/ioutil" "math" + "strings" "sync" "time" "golang.org/x/net/context" "google.golang.org/grpc/codes" "google.golang.org/grpc/credentials" + "google.golang.org/grpc/encoding" + "google.golang.org/grpc/encoding/proto" "google.golang.org/grpc/metadata" "google.golang.org/grpc/peer" "google.golang.org/grpc/stats" @@ -67,17 +56,34 @@ type gzipCompressor struct { // NewGZIPCompressor creates a Compressor based on GZIP. func NewGZIPCompressor() Compressor { + c, _ := NewGZIPCompressorWithLevel(gzip.DefaultCompression) + return c +} + +// NewGZIPCompressorWithLevel is like NewGZIPCompressor but specifies the gzip compression level instead +// of assuming DefaultCompression. +// +// The error returned will be nil if the level is valid. +func NewGZIPCompressorWithLevel(level int) (Compressor, error) { + if level < gzip.DefaultCompression || level > gzip.BestCompression { + return nil, fmt.Errorf("grpc: invalid compression level: %d", level) + } return &gzipCompressor{ pool: sync.Pool{ New: func() interface{} { - return gzip.NewWriter(ioutil.Discard) + w, err := gzip.NewWriterLevel(ioutil.Discard, level) + if err != nil { + panic(err) + } + return w }, }, - } + }, nil } func (c *gzipCompressor) Do(w io.Writer, p []byte) error { z := c.pool.Get().(*gzip.Writer) + defer c.pool.Put(z) z.Reset(w) if _, err := z.Write(p); err != nil { return err @@ -136,17 +142,20 @@ func (d *gzipDecompressor) Type() string { // callInfo contains all related configuration and information about an RPC. type callInfo struct { + compressorType string failFast bool - headerMD metadata.MD - trailerMD metadata.MD - peer *peer.Peer + stream *clientStream traceInfo traceInfo // in trace.go maxReceiveMessageSize *int maxSendMessageSize *int creds credentials.PerRPCCredentials + contentSubtype string + codec baseCodec } -var defaultCallInfo = callInfo{failFast: true} +func defaultCallInfo() *callInfo { + return &callInfo{failFast: true} +} // CallOption configures a Call before it starts or extracts information from // a Call after it completes. @@ -168,81 +177,233 @@ type EmptyCallOption struct{} func (EmptyCallOption) before(*callInfo) error { return nil } func (EmptyCallOption) after(*callInfo) {} -type beforeCall func(c *callInfo) error - -func (o beforeCall) before(c *callInfo) error { return o(c) } -func (o beforeCall) after(c *callInfo) {} - -type afterCall func(c *callInfo) - -func (o afterCall) before(c *callInfo) error { return nil } -func (o afterCall) after(c *callInfo) { o(c) } - // Header returns a CallOptions that retrieves the header metadata // for a unary RPC. func Header(md *metadata.MD) CallOption { - return afterCall(func(c *callInfo) { - *md = c.headerMD - }) + return HeaderCallOption{HeaderAddr: md} +} + +// HeaderCallOption is a CallOption for collecting response header metadata. +// The metadata field will be populated *after* the RPC completes. +// This is an EXPERIMENTAL API. +type HeaderCallOption struct { + HeaderAddr *metadata.MD +} + +func (o HeaderCallOption) before(c *callInfo) error { return nil } +func (o HeaderCallOption) after(c *callInfo) { + if c.stream != nil { + *o.HeaderAddr, _ = c.stream.Header() + } } // Trailer returns a CallOptions that retrieves the trailer metadata // for a unary RPC. func Trailer(md *metadata.MD) CallOption { - return afterCall(func(c *callInfo) { - *md = c.trailerMD - }) + return TrailerCallOption{TrailerAddr: md} +} + +// TrailerCallOption is a CallOption for collecting response trailer metadata. +// The metadata field will be populated *after* the RPC completes. +// This is an EXPERIMENTAL API. +type TrailerCallOption struct { + TrailerAddr *metadata.MD +} + +func (o TrailerCallOption) before(c *callInfo) error { return nil } +func (o TrailerCallOption) after(c *callInfo) { + if c.stream != nil { + *o.TrailerAddr = c.stream.Trailer() + } } // Peer returns a CallOption that retrieves peer information for a // unary RPC. -func Peer(peer *peer.Peer) CallOption { - return afterCall(func(c *callInfo) { - if c.peer != nil { - *peer = *c.peer +func Peer(p *peer.Peer) CallOption { + return PeerCallOption{PeerAddr: p} +} + +// PeerCallOption is a CallOption for collecting the identity of the remote +// peer. The peer field will be populated *after* the RPC completes. +// This is an EXPERIMENTAL API. +type PeerCallOption struct { + PeerAddr *peer.Peer +} + +func (o PeerCallOption) before(c *callInfo) error { return nil } +func (o PeerCallOption) after(c *callInfo) { + if c.stream != nil { + if x, ok := peer.FromContext(c.stream.Context()); ok { + *o.PeerAddr = *x } - }) + } } // FailFast configures the action to take when an RPC is attempted on broken -// connections or unreachable servers. If failfast is true, the RPC will fail +// connections or unreachable servers. If failFast is true, the RPC will fail // immediately. Otherwise, the RPC client will block the call until a -// connection is available (or the call is canceled or times out) and will retry -// the call if it fails due to a transient error. Please refer to +// connection is available (or the call is canceled or times out) and will +// retry the call if it fails due to a transient error. gRPC will not retry if +// data was written to the wire unless the server indicates it did not process +// the data. Please refer to // https://github.com/grpc/grpc/blob/master/doc/wait-for-ready.md. -// Note: failFast is default to true. +// +// By default, RPCs are "Fail Fast". func FailFast(failFast bool) CallOption { - return beforeCall(func(c *callInfo) error { - c.failFast = failFast - return nil - }) + return FailFastCallOption{FailFast: failFast} +} + +// FailFastCallOption is a CallOption for indicating whether an RPC should fail +// fast or not. +// This is an EXPERIMENTAL API. +type FailFastCallOption struct { + FailFast bool +} + +func (o FailFastCallOption) before(c *callInfo) error { + c.failFast = o.FailFast + return nil } +func (o FailFastCallOption) after(c *callInfo) { return } // MaxCallRecvMsgSize returns a CallOption which sets the maximum message size the client can receive. func MaxCallRecvMsgSize(s int) CallOption { - return beforeCall(func(o *callInfo) error { - o.maxReceiveMessageSize = &s - return nil - }) + return MaxRecvMsgSizeCallOption{MaxRecvMsgSize: s} +} + +// MaxRecvMsgSizeCallOption is a CallOption that indicates the maximum message +// size the client can receive. +// This is an EXPERIMENTAL API. +type MaxRecvMsgSizeCallOption struct { + MaxRecvMsgSize int } +func (o MaxRecvMsgSizeCallOption) before(c *callInfo) error { + c.maxReceiveMessageSize = &o.MaxRecvMsgSize + return nil +} +func (o MaxRecvMsgSizeCallOption) after(c *callInfo) { return } + // MaxCallSendMsgSize returns a CallOption which sets the maximum message size the client can send. func MaxCallSendMsgSize(s int) CallOption { - return beforeCall(func(o *callInfo) error { - o.maxSendMessageSize = &s - return nil - }) + return MaxSendMsgSizeCallOption{MaxSendMsgSize: s} +} + +// MaxSendMsgSizeCallOption is a CallOption that indicates the maximum message +// size the client can send. +// This is an EXPERIMENTAL API. +type MaxSendMsgSizeCallOption struct { + MaxSendMsgSize int +} + +func (o MaxSendMsgSizeCallOption) before(c *callInfo) error { + c.maxSendMessageSize = &o.MaxSendMsgSize + return nil } +func (o MaxSendMsgSizeCallOption) after(c *callInfo) { return } // PerRPCCredentials returns a CallOption that sets credentials.PerRPCCredentials // for a call. func PerRPCCredentials(creds credentials.PerRPCCredentials) CallOption { - return beforeCall(func(c *callInfo) error { - c.creds = creds - return nil - }) + return PerRPCCredsCallOption{Creds: creds} +} + +// PerRPCCredsCallOption is a CallOption that indicates the per-RPC +// credentials to use for the call. +// This is an EXPERIMENTAL API. +type PerRPCCredsCallOption struct { + Creds credentials.PerRPCCredentials +} + +func (o PerRPCCredsCallOption) before(c *callInfo) error { + c.creds = o.Creds + return nil +} +func (o PerRPCCredsCallOption) after(c *callInfo) { return } + +// UseCompressor returns a CallOption which sets the compressor used when +// sending the request. If WithCompressor is also set, UseCompressor has +// higher priority. +// +// This API is EXPERIMENTAL. +func UseCompressor(name string) CallOption { + return CompressorCallOption{CompressorType: name} +} + +// CompressorCallOption is a CallOption that indicates the compressor to use. +// This is an EXPERIMENTAL API. +type CompressorCallOption struct { + CompressorType string +} + +func (o CompressorCallOption) before(c *callInfo) error { + c.compressorType = o.CompressorType + return nil +} +func (o CompressorCallOption) after(c *callInfo) { return } + +// CallContentSubtype returns a CallOption that will set the content-subtype +// for a call. For example, if content-subtype is "json", the Content-Type over +// the wire will be "application/grpc+json". The content-subtype is converted +// to lowercase before being included in Content-Type. See Content-Type on +// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests for +// more details. +// +// If CallCustomCodec is not also used, the content-subtype will be used to +// look up the Codec to use in the registry controlled by RegisterCodec. See +// the documention on RegisterCodec for details on registration. The lookup +// of content-subtype is case-insensitive. If no such Codec is found, the call +// will result in an error with code codes.Internal. +// +// If CallCustomCodec is also used, that Codec will be used for all request and +// response messages, with the content-subtype set to the given contentSubtype +// here for requests. +func CallContentSubtype(contentSubtype string) CallOption { + return ContentSubtypeCallOption{ContentSubtype: strings.ToLower(contentSubtype)} +} + +// ContentSubtypeCallOption is a CallOption that indicates the content-subtype +// used for marshaling messages. +// This is an EXPERIMENTAL API. +type ContentSubtypeCallOption struct { + ContentSubtype string +} + +func (o ContentSubtypeCallOption) before(c *callInfo) error { + c.contentSubtype = o.ContentSubtype + return nil +} +func (o ContentSubtypeCallOption) after(c *callInfo) { return } + +// CallCustomCodec returns a CallOption that will set the given Codec to be +// used for all request and response messages for a call. The result of calling +// String() will be used as the content-subtype in a case-insensitive manner. +// +// See Content-Type on +// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests for +// more details. Also see the documentation on RegisterCodec and +// CallContentSubtype for more details on the interaction between Codec and +// content-subtype. +// +// This function is provided for advanced users; prefer to use only +// CallContentSubtype to select a registered codec instead. +func CallCustomCodec(codec Codec) CallOption { + return CustomCodecCallOption{Codec: codec} +} + +// CustomCodecCallOption is a CallOption that indicates the codec used for +// marshaling messages. +// This is an EXPERIMENTAL API. +type CustomCodecCallOption struct { + Codec Codec } +func (o CustomCodecCallOption) before(c *callInfo) error { + c.codec = o.Codec + return nil +} +func (o CustomCodecCallOption) after(c *callInfo) { return } + // The format of the payload: compressed or not? type payloadFormat uint8 @@ -258,8 +419,8 @@ type parser struct { // error types. r io.Reader - // The header of a gRPC message. Find more detail - // at http://www.grpc.io/docs/guides/wire.html. + // The header of a gRPC message. Find more detail at + // https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md header [5]byte } @@ -287,8 +448,11 @@ func (p *parser) recvMsg(maxReceiveMessageSize int) (pf payloadFormat, msg []byt if length == 0 { return pf, nil, nil } - if length > uint32(maxReceiveMessageSize) { - return 0, nil, Errorf(codes.ResourceExhausted, "grpc: received message larger than max (%d vs. %d)", length, maxReceiveMessageSize) + if int64(length) > int64(maxInt) { + return 0, nil, status.Errorf(codes.ResourceExhausted, "grpc: received message larger than max length allowed on current machine (%d vs. %d)", length, maxInt) + } + if int(length) > maxReceiveMessageSize { + return 0, nil, status.Errorf(codes.ResourceExhausted, "grpc: received message larger than max (%d vs. %d)", length, maxReceiveMessageSize) } // TODO(bradfitz,zhaoq): garbage. reuse buffer after proto decoding instead // of making it for each message: @@ -302,19 +466,23 @@ func (p *parser) recvMsg(maxReceiveMessageSize int) (pf payloadFormat, msg []byt return pf, msg, nil } -// encode serializes msg and prepends the message header. If msg is nil, it -// generates the message header of 0 message length. -func encode(c Codec, msg interface{}, cp Compressor, cbuf *bytes.Buffer, outPayload *stats.OutPayload) ([]byte, error) { +// encode serializes msg and returns a buffer of message header and a buffer of msg. +// If msg is nil, it generates the message header and an empty msg buffer. +// TODO(ddyihai): eliminate extra Compressor parameter. +func encode(c baseCodec, msg interface{}, cp Compressor, outPayload *stats.OutPayload, compressor encoding.Compressor) ([]byte, []byte, error) { var ( - b []byte - length uint + b []byte + cbuf *bytes.Buffer + ) + const ( + payloadLen = 1 + sizeLen = 4 ) if msg != nil { var err error - // TODO(zhaoq): optimize to reduce memory alloc and copying. b, err = c.Marshal(msg) if err != nil { - return nil, err + return nil, nil, status.Errorf(codes.Internal, "grpc: error while marshaling: %v", err.Error()) } if outPayload != nil { outPayload.Payload = msg @@ -322,57 +490,63 @@ func encode(c Codec, msg interface{}, cp Compressor, cbuf *bytes.Buffer, outPayl outPayload.Data = b outPayload.Length = len(b) } - if cp != nil { - if err := cp.Do(cbuf, b); err != nil { - return nil, err + if compressor != nil || cp != nil { + cbuf = new(bytes.Buffer) + // Has compressor, check Compressor is set by UseCompressor first. + if compressor != nil { + z, _ := compressor.Compress(cbuf) + if _, err := z.Write(b); err != nil { + return nil, nil, status.Errorf(codes.Internal, "grpc: error while compressing: %v", err.Error()) + } + z.Close() + } else { + // If Compressor is not set by UseCompressor, use default Compressor + if err := cp.Do(cbuf, b); err != nil { + return nil, nil, status.Errorf(codes.Internal, "grpc: error while compressing: %v", err.Error()) + } } b = cbuf.Bytes() } - length = uint(len(b)) } - if length > math.MaxUint32 { - return nil, Errorf(codes.ResourceExhausted, "grpc: message too large (%d bytes)", length) + if uint(len(b)) > math.MaxUint32 { + return nil, nil, status.Errorf(codes.ResourceExhausted, "grpc: message too large (%d bytes)", len(b)) } - const ( - payloadLen = 1 - sizeLen = 4 - ) - - var buf = make([]byte, payloadLen+sizeLen+len(b)) - - // Write payload format - if cp == nil { - buf[0] = byte(compressionNone) + bufHeader := make([]byte, payloadLen+sizeLen) + if compressor != nil || cp != nil { + bufHeader[0] = byte(compressionMade) } else { - buf[0] = byte(compressionMade) + bufHeader[0] = byte(compressionNone) } - // Write length of b into buf - binary.BigEndian.PutUint32(buf[1:], uint32(length)) - // Copy encoded msg to buf - copy(buf[5:], b) + // Write length of b into buf + binary.BigEndian.PutUint32(bufHeader[payloadLen:], uint32(len(b))) if outPayload != nil { - outPayload.WireLength = len(buf) + outPayload.WireLength = payloadLen + sizeLen + len(b) } - - return buf, nil + return bufHeader, b, nil } -func checkRecvPayload(pf payloadFormat, recvCompress string, dc Decompressor) error { +func checkRecvPayload(pf payloadFormat, recvCompress string, haveCompressor bool) *status.Status { switch pf { case compressionNone: case compressionMade: - if dc == nil || recvCompress != dc.Type() { - return Errorf(codes.Unimplemented, "grpc: Decompressor is not installed for grpc-encoding %q", recvCompress) + if recvCompress == "" || recvCompress == encoding.Identity { + return status.New(codes.Internal, "grpc: compressed flag set with identity or empty encoding") + } + if !haveCompressor { + return status.Newf(codes.Unimplemented, "grpc: Decompressor is not installed for grpc-encoding %q", recvCompress) } default: - return Errorf(codes.Internal, "grpc: received unexpected payload format %d", pf) + return status.Newf(codes.Internal, "grpc: received unexpected payload format %d", pf) } return nil } -func recv(p *parser, c Codec, s *transport.Stream, dc Decompressor, m interface{}, maxReceiveMessageSize int, inPayload *stats.InPayload) error { +// For the two compressor parameters, both should not be set, but if they are, +// dc takes precedence over compressor. +// TODO(dfawley): wrap the old compressor/decompressor using the new API? +func recv(p *parser, c baseCodec, s *transport.Stream, dc Decompressor, m interface{}, maxReceiveMessageSize int, inPayload *stats.InPayload, compressor encoding.Compressor) error { pf, d, err := p.recvMsg(maxReceiveMessageSize) if err != nil { return err @@ -380,22 +554,37 @@ func recv(p *parser, c Codec, s *transport.Stream, dc Decompressor, m interface{ if inPayload != nil { inPayload.WireLength = len(d) } - if err := checkRecvPayload(pf, s.RecvCompress(), dc); err != nil { - return err + + if st := checkRecvPayload(pf, s.RecvCompress(), compressor != nil || dc != nil); st != nil { + return st.Err() } + if pf == compressionMade { - d, err = dc.Do(bytes.NewReader(d)) - if err != nil { - return Errorf(codes.Internal, "grpc: failed to decompress the received message %v", err) + // To match legacy behavior, if the decompressor is set by WithDecompressor or RPCDecompressor, + // use this decompressor as the default. + if dc != nil { + d, err = dc.Do(bytes.NewReader(d)) + if err != nil { + return status.Errorf(codes.Internal, "grpc: failed to decompress the received message %v", err) + } + } else { + dcReader, err := compressor.Decompress(bytes.NewReader(d)) + if err != nil { + return status.Errorf(codes.Internal, "grpc: failed to decompress the received message %v", err) + } + d, err = ioutil.ReadAll(dcReader) + if err != nil { + return status.Errorf(codes.Internal, "grpc: failed to decompress the received message %v", err) + } } } if len(d) > maxReceiveMessageSize { // TODO: Revisit the error code. Currently keep it consistent with java // implementation. - return Errorf(codes.ResourceExhausted, "grpc: received message larger than max (%d vs. %d)", len(d), maxReceiveMessageSize) + return status.Errorf(codes.ResourceExhausted, "grpc: received message larger than max (%d vs. %d)", len(d), maxReceiveMessageSize) } if err := c.Unmarshal(d, m); err != nil { - return Errorf(codes.Internal, "grpc: failed to unmarshal the received message %v", err) + return status.Errorf(codes.Internal, "grpc: failed to unmarshal the received message %v", err) } if inPayload != nil { inPayload.RecvTime = time.Now() @@ -408,14 +597,13 @@ func recv(p *parser, c Codec, s *transport.Stream, dc Decompressor, m interface{ } type rpcInfo struct { - bytesSent bool - bytesReceived bool + failfast bool } type rpcInfoContextKey struct{} -func newContextWithRPCInfo(ctx context.Context) context.Context { - return context.WithValue(ctx, rpcInfoContextKey{}, &rpcInfo{}) +func newContextWithRPCInfo(ctx context.Context, failfast bool) context.Context { + return context.WithValue(ctx, rpcInfoContextKey{}, &rpcInfo{failfast: failfast}) } func rpcInfoFromContext(ctx context.Context) (s *rpcInfo, ok bool) { @@ -423,17 +611,10 @@ func rpcInfoFromContext(ctx context.Context) (s *rpcInfo, ok bool) { return } -func updateRPCInfoInContext(ctx context.Context, s rpcInfo) { - if ss, ok := rpcInfoFromContext(ctx); ok { - *ss = s - } - return -} - // Code returns the error code for err if it was produced by the rpc system. // Otherwise, it returns codes.Unknown. // -// Deprecated; use status.FromError and Code method instead. +// Deprecated: use status.FromError and Code method instead. func Code(err error) codes.Code { if s, ok := status.FromError(err); ok { return s.Code() @@ -444,7 +625,7 @@ func Code(err error) codes.Code { // ErrorDesc returns the error description of err if it was produced by the rpc system. // Otherwise, it returns err.Error() or empty string when err is nil. // -// Deprecated; use status.FromError and Message method instead. +// Deprecated: use status.FromError and Message method instead. func ErrorDesc(err error) string { if s, ok := status.FromError(err); ok { return s.Message() @@ -455,79 +636,47 @@ func ErrorDesc(err error) string { // Errorf returns an error containing an error code and a description; // Errorf returns nil if c is OK. // -// Deprecated; use status.Errorf instead. +// Deprecated: use status.Errorf instead. func Errorf(c codes.Code, format string, a ...interface{}) error { return status.Errorf(c, format, a...) } -// MethodConfig defines the configuration recommended by the service providers for a -// particular method. -// This is EXPERIMENTAL and subject to change. -type MethodConfig struct { - // WaitForReady indicates whether RPCs sent to this method should wait until - // the connection is ready by default (!failfast). The value specified via the - // gRPC client API will override the value set here. - WaitForReady *bool - // Timeout is the default timeout for RPCs sent to this method. The actual - // deadline used will be the minimum of the value specified here and the value - // set by the application via the gRPC client API. If either one is not set, - // then the other will be used. If neither is set, then the RPC has no deadline. - Timeout *time.Duration - // MaxReqSize is the maximum allowed payload size for an individual request in a - // stream (client->server) in bytes. The size which is measured is the serialized - // payload after per-message compression (but before stream compression) in bytes. - // The actual value used is the minumum of the value specified here and the value set - // by the application via the gRPC client API. If either one is not set, then the other - // will be used. If neither is set, then the built-in default is used. - MaxReqSize *int - // MaxRespSize is the maximum allowed payload size for an individual response in a - // stream (server->client) in bytes. - MaxRespSize *int -} - -// ServiceConfig is provided by the service provider and contains parameters for how -// clients that connect to the service should behave. -// This is EXPERIMENTAL and subject to change. -type ServiceConfig struct { - // LB is the load balancer the service providers recommends. The balancer specified - // via grpc.WithBalancer will override this. - LB Balancer - // Methods contains a map for the methods in this service. - // If there is an exact match for a method (i.e. /service/method) in the map, use the corresponding MethodConfig. - // If there's no exact match, look for the default config for the service (/service/) and use the corresponding MethodConfig if it exists. - // Otherwise, the method has no MethodConfig to use. - Methods map[string]MethodConfig -} - -func min(a, b *int) *int { - if *a < *b { - return a +// setCallInfoCodec should only be called after CallOptions have been applied. +func setCallInfoCodec(c *callInfo) error { + if c.codec != nil { + // codec was already set by a CallOption; use it. + return nil } - return b -} -func getMaxSize(mcMax, doptMax *int, defaultVal int) *int { - if mcMax == nil && doptMax == nil { - return &defaultVal - } - if mcMax != nil && doptMax != nil { - return min(mcMax, doptMax) + if c.contentSubtype == "" { + // No codec specified in CallOptions; use proto by default. + c.codec = encoding.GetCodec(proto.Name) + return nil } - if mcMax != nil { - return mcMax + + // c.contentSubtype is already lowercased in CallContentSubtype + c.codec = encoding.GetCodec(c.contentSubtype) + if c.codec == nil { + return status.Errorf(codes.Internal, "no codec registered for content-subtype %s", c.contentSubtype) } - return doptMax + return nil } -// SupportPackageIsVersion4 is referenced from generated protocol buffer files -// to assert that that code is compatible with this version of the grpc package. +// The SupportPackageIsVersion variables are referenced from generated protocol +// buffer files to ensure compatibility with the gRPC version used. The latest +// support package version is 5. // -// This constant may be renamed in the future if a change in the generated code -// requires a synchronised update of grpc-go and protoc-gen-go. This constant -// should not be referenced from any other code. -const SupportPackageIsVersion4 = true +// Older versions are kept for compatibility. They may be removed if +// compatibility cannot be maintained. +// +// These constants should not be referenced from any other code. +const ( + SupportPackageIsVersion3 = true + SupportPackageIsVersion4 = true + SupportPackageIsVersion5 = true +) // Version is the current grpc version. -const Version = "1.4.0-dev" +const Version = "1.11.0-dev" const grpcUA = "grpc-go/" + Version diff --git a/vendor/google.golang.org/grpc/rpc_util_test.go b/vendor/google.golang.org/grpc/rpc_util_test.go index cbaaa52..bf93331 100644 --- a/vendor/google.golang.org/grpc/rpc_util_test.go +++ b/vendor/google.golang.org/grpc/rpc_util_test.go @@ -1,33 +1,18 @@ /* * - * Copyright 2014, Google Inc. - * All rights reserved. + * Copyright 2014 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -35,6 +20,7 @@ package grpc import ( "bytes" + "compress/gzip" "io" "math" "reflect" @@ -42,6 +28,8 @@ import ( "github.com/golang/protobuf/proto" "google.golang.org/grpc/codes" + "google.golang.org/grpc/encoding" + protoenc "google.golang.org/grpc/encoding/proto" "google.golang.org/grpc/status" perfpb "google.golang.org/grpc/test/codec_perf" "google.golang.org/grpc/transport" @@ -119,19 +107,40 @@ func TestEncode(t *testing.T) { msg proto.Message cp Compressor // outputs - b []byte - err error + hdr []byte + data []byte + err error }{ - {nil, nil, []byte{0, 0, 0, 0, 0}, nil}, + {nil, nil, []byte{0, 0, 0, 0, 0}, []byte{}, nil}, } { - b, err := encode(protoCodec{}, test.msg, nil, nil, nil) - if err != test.err || !bytes.Equal(b, test.b) { - t.Fatalf("encode(_, _, %v, _) = %v, %v\nwant %v, %v", test.cp, b, err, test.b, test.err) + hdr, data, err := encode(encoding.GetCodec(protoenc.Name), test.msg, nil, nil, nil) + if err != test.err || !bytes.Equal(hdr, test.hdr) || !bytes.Equal(data, test.data) { + t.Fatalf("encode(_, _, %v, _) = %v, %v, %v\nwant %v, %v, %v", test.cp, hdr, data, err, test.hdr, test.data, test.err) } } } func TestCompress(t *testing.T) { + + bestCompressor, err := NewGZIPCompressorWithLevel(gzip.BestCompression) + if err != nil { + t.Fatalf("Could not initialize gzip compressor with best compression.") + } + bestSpeedCompressor, err := NewGZIPCompressorWithLevel(gzip.BestSpeed) + if err != nil { + t.Fatalf("Could not initialize gzip compressor with best speed compression.") + } + + defaultCompressor, err := NewGZIPCompressorWithLevel(gzip.BestSpeed) + if err != nil { + t.Fatalf("Could not initialize gzip compressor with default compression.") + } + + level5, err := NewGZIPCompressorWithLevel(5) + if err != nil { + t.Fatalf("Could not initialize gzip compressor with level 5 compression.") + } + for _, test := range []struct { // input data []byte @@ -141,6 +150,10 @@ func TestCompress(t *testing.T) { err error }{ {make([]byte, 1024), NewGZIPCompressor(), NewGZIPDecompressor(), nil}, + {make([]byte, 1024), bestCompressor, NewGZIPDecompressor(), nil}, + {make([]byte, 1024), bestSpeedCompressor, NewGZIPDecompressor(), nil}, + {make([]byte, 1024), defaultCompressor, NewGZIPDecompressor(), nil}, + {make([]byte, 1024), level5, NewGZIPDecompressor(), nil}, } { b := new(bytes.Buffer) if err := test.cp.Do(b, test.data); err != test.err { @@ -163,7 +176,7 @@ func TestToRPCErr(t *testing.T) { errOut error }{ {transport.StreamError{Code: codes.Unknown, Desc: ""}, status.Error(codes.Unknown, "")}, - {transport.ErrConnClosing, status.Error(codes.Internal, transport.ErrConnClosing.Desc)}, + {transport.ErrConnClosing, status.Error(codes.Unavailable, transport.ErrConnClosing.Desc)}, } { err := toRPCErr(test.errIn) if _, ok := status.FromError(err); !ok { @@ -178,13 +191,14 @@ func TestToRPCErr(t *testing.T) { // bmEncode benchmarks encoding a Protocol Buffer message containing mSize // bytes. func bmEncode(b *testing.B, mSize int) { + cdc := encoding.GetCodec(protoenc.Name) msg := &perfpb.Buffer{Body: make([]byte, mSize)} - encoded, _ := encode(protoCodec{}, msg, nil, nil, nil) - encodedSz := int64(len(encoded)) + encodeHdr, encodeData, _ := encode(cdc, msg, nil, nil, nil) + encodedSz := int64(len(encodeHdr) + len(encodeData)) b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { - encode(protoCodec{}, msg, nil, nil, nil) + encode(cdc, msg, nil, nil, nil) } b.SetBytes(encodedSz) } diff --git a/vendor/google.golang.org/grpc/server.go b/vendor/google.golang.org/grpc/server.go index c2b523c..0063906 100644 --- a/vendor/google.golang.org/grpc/server.go +++ b/vendor/google.golang.org/grpc/server.go @@ -1,33 +1,18 @@ /* * - * Copyright 2014, Google Inc. - * All rights reserved. + * Copyright 2014 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -38,6 +23,7 @@ import ( "errors" "fmt" "io" + "math" "net" "net/http" "reflect" @@ -46,11 +32,15 @@ import ( "sync" "time" + "io/ioutil" + "golang.org/x/net/context" "golang.org/x/net/http2" "golang.org/x/net/trace" "google.golang.org/grpc/codes" "google.golang.org/grpc/credentials" + "google.golang.org/grpc/encoding" + "google.golang.org/grpc/encoding/proto" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/internal" "google.golang.org/grpc/keepalive" @@ -63,7 +53,7 @@ import ( const ( defaultServerMaxReceiveMessageSize = 1024 * 1024 * 4 - defaultServerMaxSendMessageSize = 1024 * 1024 * 4 + defaultServerMaxSendMessageSize = math.MaxInt32 ) type methodHandler func(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor UnaryServerInterceptor) (interface{}, error) @@ -101,19 +91,22 @@ type Server struct { mu sync.Mutex // guards following lis map[net.Listener]bool conns map[io.Closer]bool + serve bool drain bool - ctx context.Context - cancel context.CancelFunc - // A CondVar to let GracefulStop() blocks until all the pending RPCs are finished - // and all the transport goes away. - cv *sync.Cond + cv *sync.Cond // signaled when connections close for GracefulStop m map[string]*service // service name -> service info events trace.EventLog + + quit chan struct{} + done chan struct{} + quitOnce sync.Once + doneOnce sync.Once + serveWG sync.WaitGroup // counts active Serve goroutines for GracefulStop } type options struct { creds credentials.TransportCredentials - codec Codec + codec baseCodec cp Compressor dc Decompressor unaryInt UnaryServerInterceptor @@ -129,16 +122,36 @@ type options struct { keepalivePolicy keepalive.EnforcementPolicy initialWindowSize int32 initialConnWindowSize int32 + writeBufferSize int + readBufferSize int + connectionTimeout time.Duration } var defaultServerOptions = options{ maxReceiveMessageSize: defaultServerMaxReceiveMessageSize, maxSendMessageSize: defaultServerMaxSendMessageSize, + connectionTimeout: 120 * time.Second, } // A ServerOption sets options such as credentials, codec and keepalive parameters, etc. type ServerOption func(*options) +// WriteBufferSize lets you set the size of write buffer, this determines how much data can be batched +// before doing a write on the wire. +func WriteBufferSize(s int) ServerOption { + return func(o *options) { + o.writeBufferSize = s + } +} + +// ReadBufferSize lets you set the size of read buffer, this determines how much data can be read at most +// for one read syscall. +func ReadBufferSize(s int) ServerOption { + return func(o *options) { + o.readBufferSize = s + } +} + // InitialWindowSize returns a ServerOption that sets window size for stream. // The lower bound for window size is 64K and any value smaller than that will be ignored. func InitialWindowSize(s int32) ServerOption { @@ -170,20 +183,32 @@ func KeepaliveEnforcementPolicy(kep keepalive.EnforcementPolicy) ServerOption { } // CustomCodec returns a ServerOption that sets a codec for message marshaling and unmarshaling. +// +// This will override any lookups by content-subtype for Codecs registered with RegisterCodec. func CustomCodec(codec Codec) ServerOption { return func(o *options) { o.codec = codec } } -// RPCCompressor returns a ServerOption that sets a compressor for outbound messages. +// RPCCompressor returns a ServerOption that sets a compressor for outbound +// messages. For backward compatibility, all outbound messages will be sent +// using this compressor, regardless of incoming message compression. By +// default, server messages will be sent using the same compressor with which +// request messages were sent. +// +// Deprecated: use encoding.RegisterCompressor instead. func RPCCompressor(cp Compressor) ServerOption { return func(o *options) { o.cp = cp } } -// RPCDecompressor returns a ServerOption that sets a decompressor for inbound messages. +// RPCDecompressor returns a ServerOption that sets a decompressor for inbound +// messages. It has higher priority than decompressors registered via +// encoding.RegisterCompressor. +// +// Deprecated: use encoding.RegisterCompressor instead. func RPCDecompressor(dc Decompressor) ServerOption { return func(o *options) { o.dc = dc @@ -273,7 +298,7 @@ func StatsHandler(h stats.Handler) ServerOption { // handler that will be invoked instead of returning the "unimplemented" gRPC // error whenever a request is received for an unregistered service or method. // The handling function has full access to the Context of the request and the -// stream, and the invocation passes through interceptors. +// stream, and the invocation bypasses interceptors. func UnknownServiceHandler(streamHandler StreamHandler) ServerOption { return func(o *options) { o.unknownStreamDesc = &StreamDesc{ @@ -286,6 +311,18 @@ func UnknownServiceHandler(streamHandler StreamHandler) ServerOption { } } +// ConnectionTimeout returns a ServerOption that sets the timeout for +// connection establishment (up to and including HTTP/2 handshaking) for all +// new connections. If this is not set, the default is 120 seconds. A zero or +// negative value will result in an immediate timeout. +// +// This API is EXPERIMENTAL. +func ConnectionTimeout(d time.Duration) ServerOption { + return func(o *options) { + o.connectionTimeout = d + } +} + // NewServer creates a gRPC server which has no service registered and has not // started to accept requests yet. func NewServer(opt ...ServerOption) *Server { @@ -293,18 +330,15 @@ func NewServer(opt ...ServerOption) *Server { for _, o := range opt { o(&opts) } - if opts.codec == nil { - // Set the default codec. - opts.codec = protoCodec{} - } s := &Server{ lis: make(map[net.Listener]bool), opts: opts, conns: make(map[io.Closer]bool), m: make(map[string]*service), + quit: make(chan struct{}), + done: make(chan struct{}), } s.cv = sync.NewCond(&s.mu) - s.ctx, s.cancel = context.WithCancel(context.Background()) if EnableTracing { _, file, line, _ := runtime.Caller(1) s.events = trace.NewEventLog("grpc.Server", fmt.Sprintf("%s:%d", file, line)) @@ -344,6 +378,9 @@ func (s *Server) register(sd *ServiceDesc, ss interface{}) { s.mu.Lock() defer s.mu.Unlock() s.printf("RegisterService(%q)", sd.ServiceName) + if s.serve { + grpclog.Fatalf("grpc: Server.RegisterService after Server.Serve for %q", sd.ServiceName) + } if _, ok := s.m[sd.ServiceName]; ok { grpclog.Fatalf("grpc: Server.RegisterService found duplicate service registration for %q", sd.ServiceName) } @@ -410,11 +447,9 @@ func (s *Server) GetServiceInfo() map[string]ServiceInfo { return ret } -var ( - // ErrServerStopped indicates that the operation is now illegal because of - // the server being stopped. - ErrServerStopped = errors.New("grpc: the server has been stopped") -) +// ErrServerStopped indicates that the operation is now illegal because of +// the server being stopped. +var ErrServerStopped = errors.New("grpc: the server has been stopped") func (s *Server) useTransportAuthenticator(rawConn net.Conn) (net.Conn, credentials.AuthInfo, error) { if s.opts.creds == nil { @@ -428,15 +463,29 @@ func (s *Server) useTransportAuthenticator(rawConn net.Conn) (net.Conn, credenti // read gRPC requests and then call the registered handlers to reply to them. // Serve returns when lis.Accept fails with fatal errors. lis will be closed when // this method returns. -// Serve always returns non-nil error. +// Serve will return a non-nil error unless Stop or GracefulStop is called. func (s *Server) Serve(lis net.Listener) error { s.mu.Lock() s.printf("serving") + s.serve = true if s.lis == nil { + // Serve called after Stop or GracefulStop. s.mu.Unlock() lis.Close() return ErrServerStopped } + + s.serveWG.Add(1) + defer func() { + s.serveWG.Done() + select { + // Stop or GracefulStop called; block until done and return nil. + case <-s.quit: + <-s.done + default: + } + }() + s.lis[lis] = true s.mu.Unlock() defer func() { @@ -470,36 +519,52 @@ func (s *Server) Serve(lis net.Listener) error { timer := time.NewTimer(tempDelay) select { case <-timer.C: - case <-s.ctx.Done(): + case <-s.quit: + timer.Stop() + return nil } - timer.Stop() continue } s.mu.Lock() s.printf("done serving; Accept = %v", err) s.mu.Unlock() + + select { + case <-s.quit: + return nil + default: + } return err } tempDelay = 0 - // Start a new goroutine to deal with rawConn - // so we don't stall this Accept loop goroutine. - go s.handleRawConn(rawConn) + // Start a new goroutine to deal with rawConn so we don't stall this Accept + // loop goroutine. + // + // Make sure we account for the goroutine so GracefulStop doesn't nil out + // s.conns before this conn can be added. + s.serveWG.Add(1) + go func() { + s.handleRawConn(rawConn) + s.serveWG.Done() + }() } } -// handleRawConn is run in its own goroutine and handles a just-accepted -// connection that has not had any I/O performed on it yet. +// handleRawConn forks a goroutine to handle a just-accepted connection that +// has not had any I/O performed on it yet. func (s *Server) handleRawConn(rawConn net.Conn) { + rawConn.SetDeadline(time.Now().Add(s.opts.connectionTimeout)) conn, authInfo, err := s.useTransportAuthenticator(rawConn) if err != nil { s.mu.Lock() s.errorf("ServerHandshake(%q) failed: %v", rawConn.RemoteAddr(), err) s.mu.Unlock() - grpclog.Printf("grpc: Server.Serve failed to complete security handshake from %q: %v", rawConn.RemoteAddr(), err) - // If serverHandShake returns ErrConnDispatched, keep rawConn open. + grpclog.Warningf("grpc: Server.Serve failed to complete security handshake from %q: %v", rawConn.RemoteAddr(), err) + // If serverHandshake returns ErrConnDispatched, keep rawConn open. if err != credentials.ErrConnDispatched { rawConn.Close() } + rawConn.SetDeadline(time.Time{}) return } @@ -511,19 +576,33 @@ func (s *Server) handleRawConn(rawConn net.Conn) { } s.mu.Unlock() + var serve func() + c := conn.(io.Closer) if s.opts.useHandlerImpl { - s.serveUsingHandler(conn) + serve = func() { s.serveUsingHandler(conn) } } else { - s.serveHTTP2Transport(conn, authInfo) + // Finish handshaking (HTTP2) + st := s.newHTTP2Transport(conn, authInfo) + if st == nil { + return + } + c = st + serve = func() { s.serveStreams(st) } + } + + rawConn.SetDeadline(time.Time{}) + if !s.addConn(c) { + return } + go func() { + serve() + s.removeConn(c) + }() } -// serveHTTP2Transport sets up a http/2 transport (using the -// gRPC http2 server transport in transport/http2_server.go) and -// serves streams on it. -// This is run in its own goroutine (it does network I/O in -// transport.NewServerTransport). -func (s *Server) serveHTTP2Transport(c net.Conn, authInfo credentials.AuthInfo) { +// newHTTP2Transport sets up a http/2 transport (using the +// gRPC http2 server transport in transport/http2_server.go). +func (s *Server) newHTTP2Transport(c net.Conn, authInfo credentials.AuthInfo) transport.ServerTransport { config := &transport.ServerConfig{ MaxStreams: s.opts.maxConcurrentStreams, AuthInfo: authInfo, @@ -533,6 +612,8 @@ func (s *Server) serveHTTP2Transport(c net.Conn, authInfo credentials.AuthInfo) KeepalivePolicy: s.opts.keepalivePolicy, InitialWindowSize: s.opts.initialWindowSize, InitialConnWindowSize: s.opts.initialConnWindowSize, + WriteBufferSize: s.opts.writeBufferSize, + ReadBufferSize: s.opts.readBufferSize, } st, err := transport.NewServerTransport("http2", c, config) if err != nil { @@ -540,18 +621,13 @@ func (s *Server) serveHTTP2Transport(c net.Conn, authInfo credentials.AuthInfo) s.errorf("NewServerTransport(%q) failed: %v", c.RemoteAddr(), err) s.mu.Unlock() c.Close() - grpclog.Println("grpc: Server.Serve failed to create ServerTransport: ", err) - return - } - if !s.addConn(st) { - st.Close() - return + grpclog.Warningln("grpc: Server.Serve failed to create ServerTransport: ", err) + return nil } - s.serveStreams(st) + return st } func (s *Server) serveStreams(st transport.ServerTransport) { - defer s.removeConn(st) defer st.Close() var wg sync.WaitGroup st.HandleStreams(func(stream *transport.Stream) { @@ -585,11 +661,6 @@ var _ http.Handler = (*Server)(nil) // // conn is the *tls.Conn that's already been authenticated. func (s *Server) serveUsingHandler(conn net.Conn) { - if !s.addConn(conn) { - conn.Close() - return - } - defer s.removeConn(conn) h2s := &http2.Server{ MaxConcurrentStreams: s.opts.maxConcurrentStreams, } @@ -598,14 +669,37 @@ func (s *Server) serveUsingHandler(conn net.Conn) { }) } +// ServeHTTP implements the Go standard library's http.Handler +// interface by responding to the gRPC request r, by looking up +// the requested gRPC method in the gRPC server s. +// +// The provided HTTP request must have arrived on an HTTP/2 +// connection. When using the Go standard library's server, +// practically this means that the Request must also have arrived +// over TLS. +// +// To share one port (such as 443 for https) between gRPC and an +// existing http.Handler, use a root http.Handler such as: +// +// if r.ProtoMajor == 2 && strings.HasPrefix( +// r.Header.Get("Content-Type"), "application/grpc") { +// grpcServer.ServeHTTP(w, r) +// } else { +// yourMux.ServeHTTP(w, r) +// } +// +// Note that ServeHTTP uses Go's HTTP/2 server implementation which is totally +// separate from grpc-go's HTTP/2 server. Performance and features may vary +// between the two paths. ServeHTTP does not support some gRPC features +// available through grpc-go's HTTP/2 server, and it is currently EXPERIMENTAL +// and subject to change. func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { - st, err := transport.NewServerHandlerTransport(w, r) + st, err := transport.NewServerHandlerTransport(w, r, s.opts.statsHandler) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } if !s.addConn(st) { - st.Close() return } defer s.removeConn(st) @@ -635,9 +729,15 @@ func (s *Server) traceInfo(st transport.ServerTransport, stream *transport.Strea func (s *Server) addConn(c io.Closer) bool { s.mu.Lock() defer s.mu.Unlock() - if s.conns == nil || s.drain { + if s.conns == nil { + c.Close() return false } + if s.drain { + // Transport added after we drained our existing conns: drain it + // immediately. + c.(transport.ServerTransport).Drain() + } s.conns[c] = true return true } @@ -651,32 +751,22 @@ func (s *Server) removeConn(c io.Closer) { } } -func (s *Server) sendResponse(t transport.ServerTransport, stream *transport.Stream, msg interface{}, cp Compressor, opts *transport.Options) error { +func (s *Server) sendResponse(t transport.ServerTransport, stream *transport.Stream, msg interface{}, cp Compressor, opts *transport.Options, comp encoding.Compressor) error { var ( - cbuf *bytes.Buffer outPayload *stats.OutPayload ) - if cp != nil { - cbuf = new(bytes.Buffer) - } if s.opts.statsHandler != nil { outPayload = &stats.OutPayload{} } - p, err := encode(s.opts.codec, msg, cp, cbuf, outPayload) + hdr, data, err := encode(s.getCodec(stream.ContentSubtype()), msg, cp, outPayload, comp) if err != nil { - // This typically indicates a fatal issue (e.g., memory - // corruption or hardware faults) the application program - // cannot handle. - // - // TODO(zhaoq): There exist other options also such as only closing the - // faulty stream locally and remotely (Other streams can keep going). Find - // the optimal option. - grpclog.Fatalf("grpc: Server failed to encode response %v", err) + grpclog.Errorln("grpc: server failed to encode response: ", err) + return err } - if len(p) > s.opts.maxSendMessageSize { - return status.Errorf(codes.ResourceExhausted, "grpc: trying to send message larger than max (%d vs. %d)", len(p), s.opts.maxSendMessageSize) + if len(data) > s.opts.maxSendMessageSize { + return status.Errorf(codes.ResourceExhausted, "grpc: trying to send message larger than max (%d vs. %d)", len(data), s.opts.maxSendMessageSize) } - err = t.Write(stream, p, opts) + err = t.Write(stream, hdr, data, opts) if err == nil && outPayload != nil { outPayload.SentTime = time.Now() s.opts.statsHandler.HandleRPC(stream.Context(), outPayload) @@ -687,13 +777,15 @@ func (s *Server) sendResponse(t transport.ServerTransport, stream *transport.Str func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport.Stream, srv *service, md *MethodDesc, trInfo *traceInfo) (err error) { sh := s.opts.statsHandler if sh != nil { + beginTime := time.Now() begin := &stats.Begin{ - BeginTime: time.Now(), + BeginTime: beginTime, } sh.HandleRPC(stream.Context(), begin) defer func() { end := &stats.End{ - EndTime: time.Now(), + BeginTime: beginTime, + EndTime: time.Now(), } if err != nil && err != io.EOF { end.Error = toRPCErr(err) @@ -712,10 +804,43 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. } }() } + + // comp and cp are used for compression. decomp and dc are used for + // decompression. If comp and decomp are both set, they are the same; + // however they are kept separate to ensure that at most one of the + // compressor/decompressor variable pairs are set for use later. + var comp, decomp encoding.Compressor + var cp Compressor + var dc Decompressor + + // If dc is set and matches the stream's compression, use it. Otherwise, try + // to find a matching registered compressor for decomp. + if rc := stream.RecvCompress(); s.opts.dc != nil && s.opts.dc.Type() == rc { + dc = s.opts.dc + } else if rc != "" && rc != encoding.Identity { + decomp = encoding.GetCompressor(rc) + if decomp == nil { + st := status.Newf(codes.Unimplemented, "grpc: Decompressor is not installed for grpc-encoding %q", rc) + t.WriteStatus(stream, st) + return st.Err() + } + } + + // If cp is set, use it. Otherwise, attempt to compress the response using + // the incoming message compression method. + // + // NOTE: this needs to be ahead of all handling, https://github.com/grpc/grpc-go/issues/686. if s.opts.cp != nil { - // NOTE: this needs to be ahead of all handling, https://github.com/grpc/grpc-go/issues/686. - stream.SetSendCompress(s.opts.cp.Type()) + cp = s.opts.cp + stream.SetSendCompress(cp.Type()) + } else if rc := stream.RecvCompress(); rc != "" && rc != encoding.Identity { + // Legacy compressor not specified; attempt to respond with same encoding. + comp = encoding.GetCompressor(rc) + if comp != nil { + stream.SetSendCompress(rc) + } } + p := &parser{r: stream} pf, req, err := p.recvMsg(s.opts.maxReceiveMessageSize) if err == io.EOF { @@ -723,12 +848,12 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. return err } if err == io.ErrUnexpectedEOF { - err = Errorf(codes.Internal, io.ErrUnexpectedEOF.Error()) + err = status.Errorf(codes.Internal, io.ErrUnexpectedEOF.Error()) } if err != nil { if st, ok := status.FromError(err); ok { if e := t.WriteStatus(stream, st); e != nil { - grpclog.Printf("grpc: Server.processUnaryRPC failed to write status %v", e) + grpclog.Warningf("grpc: Server.processUnaryRPC failed to write status %v", e) } } else { switch st := err.(type) { @@ -736,7 +861,7 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. // Nothing to do here. case transport.StreamError: if e := t.WriteStatus(stream, status.New(st.Code, st.Desc)); e != nil { - grpclog.Printf("grpc: Server.processUnaryRPC failed to write status %v", e) + grpclog.Warningf("grpc: Server.processUnaryRPC failed to write status %v", e) } default: panic(fmt.Sprintf("grpc: Unexpected error (%T) from recvMsg: %v", st, st)) @@ -744,19 +869,11 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. } return err } - - if err := checkRecvPayload(pf, stream.RecvCompress(), s.opts.dc); err != nil { - if st, ok := status.FromError(err); ok { - if e := t.WriteStatus(stream, st); e != nil { - grpclog.Printf("grpc: Server.processUnaryRPC failed to write status %v", e) - } - return err - } - if e := t.WriteStatus(stream, status.New(codes.Internal, err.Error())); e != nil { - grpclog.Printf("grpc: Server.processUnaryRPC failed to write status %v", e) + if st := checkRecvPayload(pf, stream.RecvCompress(), dc != nil || decomp != nil); st != nil { + if e := t.WriteStatus(stream, st); e != nil { + grpclog.Warningf("grpc: Server.processUnaryRPC failed to write status %v", e) } - - // TODO checkRecvPayload always return RPC error. Add a return here if necessary. + return st.Err() } var inPayload *stats.InPayload if sh != nil { @@ -770,9 +887,17 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. } if pf == compressionMade { var err error - req, err = s.opts.dc.Do(bytes.NewReader(req)) - if err != nil { - return Errorf(codes.Internal, err.Error()) + if dc != nil { + req, err = dc.Do(bytes.NewReader(req)) + if err != nil { + return status.Errorf(codes.Internal, err.Error()) + } + } else { + tmp, _ := decomp.Decompress(bytes.NewReader(req)) + req, err = ioutil.ReadAll(tmp) + if err != nil { + return status.Errorf(codes.Internal, "grpc: failed to decompress the received message %v", err) + } } } if len(req) > s.opts.maxReceiveMessageSize { @@ -780,7 +905,7 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. // java implementation. return status.Errorf(codes.ResourceExhausted, "grpc: received message larger than max (%d vs. %d)", len(req), s.opts.maxReceiveMessageSize) } - if err := s.opts.codec.Unmarshal(req, v); err != nil { + if err := s.getCodec(stream.ContentSubtype()).Unmarshal(req, v); err != nil { return status.Errorf(codes.Internal, "grpc: error unmarshalling request: %v", err) } if inPayload != nil { @@ -794,12 +919,13 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. } return nil } - reply, appErr := md.Handler(srv.server, stream.Context(), df, s.opts.unaryInt) + ctx := NewContextWithServerTransportStream(stream.Context(), stream) + reply, appErr := md.Handler(srv.server, ctx, df, s.opts.unaryInt) if appErr != nil { appStatus, ok := status.FromError(appErr) if !ok { // Convert appErr if it is not a grpc status error. - appErr = status.Error(convertCode(appErr), appErr.Error()) + appErr = status.Error(codes.Unknown, appErr.Error()) appStatus, _ = status.FromError(appErr) } if trInfo != nil { @@ -807,7 +933,7 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. trInfo.tr.SetError() } if e := t.WriteStatus(stream, appStatus); e != nil { - grpclog.Printf("grpc: Server.processUnaryRPC failed to write status: %v", e) + grpclog.Warningf("grpc: Server.processUnaryRPC failed to write status: %v", e) } return appErr } @@ -818,14 +944,15 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. Last: true, Delay: false, } - if err := s.sendResponse(t, stream, reply, s.opts.cp, opts); err != nil { + + if err := s.sendResponse(t, stream, reply, cp, opts, comp); err != nil { if err == io.EOF { // The entire stream is done (for unary RPC only). return err } if s, ok := status.FromError(err); ok { if e := t.WriteStatus(stream, s); e != nil { - grpclog.Printf("grpc: Server.processUnaryRPC failed to write status: %v", e) + grpclog.Warningf("grpc: Server.processUnaryRPC failed to write status: %v", e) } } else { switch st := err.(type) { @@ -833,7 +960,7 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. // Nothing to do here. case transport.StreamError: if e := t.WriteStatus(stream, status.New(st.Code, st.Desc)); e != nil { - grpclog.Printf("grpc: Server.processUnaryRPC failed to write status %v", e) + grpclog.Warningf("grpc: Server.processUnaryRPC failed to write status %v", e) } default: panic(fmt.Sprintf("grpc: Unexpected error (%T) from sendResponse: %v", st, st)) @@ -853,13 +980,15 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. func (s *Server) processStreamingRPC(t transport.ServerTransport, stream *transport.Stream, srv *service, sd *StreamDesc, trInfo *traceInfo) (err error) { sh := s.opts.statsHandler if sh != nil { + beginTime := time.Now() begin := &stats.Begin{ - BeginTime: time.Now(), + BeginTime: beginTime, } sh.HandleRPC(stream.Context(), begin) defer func() { end := &stats.End{ - EndTime: time.Now(), + BeginTime: beginTime, + EndTime: time.Now(), } if err != nil && err != io.EOF { end.Error = toRPCErr(err) @@ -867,24 +996,47 @@ func (s *Server) processStreamingRPC(t transport.ServerTransport, stream *transp sh.HandleRPC(stream.Context(), end) }() } - if s.opts.cp != nil { - stream.SetSendCompress(s.opts.cp.Type()) - } + ctx := NewContextWithServerTransportStream(stream.Context(), stream) ss := &serverStream{ + ctx: ctx, t: t, s: stream, p: &parser{r: stream}, - codec: s.opts.codec, - cp: s.opts.cp, - dc: s.opts.dc, + codec: s.getCodec(stream.ContentSubtype()), maxReceiveMessageSize: s.opts.maxReceiveMessageSize, maxSendMessageSize: s.opts.maxSendMessageSize, trInfo: trInfo, statsHandler: sh, } - if ss.cp != nil { - ss.cbuf = new(bytes.Buffer) + + // If dc is set and matches the stream's compression, use it. Otherwise, try + // to find a matching registered compressor for decomp. + if rc := stream.RecvCompress(); s.opts.dc != nil && s.opts.dc.Type() == rc { + ss.dc = s.opts.dc + } else if rc != "" && rc != encoding.Identity { + ss.decomp = encoding.GetCompressor(rc) + if ss.decomp == nil { + st := status.Newf(codes.Unimplemented, "grpc: Decompressor is not installed for grpc-encoding %q", rc) + t.WriteStatus(ss.s, st) + return st.Err() + } + } + + // If cp is set, use it. Otherwise, attempt to compress the response using + // the incoming message compression method. + // + // NOTE: this needs to be ahead of all handling, https://github.com/grpc/grpc-go/issues/686. + if s.opts.cp != nil { + ss.cp = s.opts.cp + stream.SetSendCompress(s.opts.cp.Type()) + } else if rc := stream.RecvCompress(); rc != "" && rc != encoding.Identity { + // Legacy compressor not specified; attempt to respond with same encoding. + ss.comp = encoding.GetCompressor(rc) + if ss.comp != nil { + stream.SetSendCompress(rc) + } } + if trInfo != nil { trInfo.tr.LazyLog(&trInfo.firstLine, false) defer func() { @@ -920,7 +1072,7 @@ func (s *Server) processStreamingRPC(t transport.ServerTransport, stream *transp case transport.StreamError: appStatus = status.New(err.Code, err.Desc) default: - appStatus = status.New(convertCode(appErr), appErr.Error()) + appStatus = status.New(codes.Unknown, appErr.Error()) } appErr = appStatus.Err() } @@ -940,7 +1092,6 @@ func (s *Server) processStreamingRPC(t transport.ServerTransport, stream *transp ss.mu.Unlock() } return t.WriteStatus(ss.s, status.New(codes.OK, "")) - } func (s *Server) handleStream(t transport.ServerTransport, stream *transport.Stream, trInfo *traceInfo) { @@ -960,7 +1111,7 @@ func (s *Server) handleStream(t transport.ServerTransport, stream *transport.Str trInfo.tr.LazyLog(&fmtStringer{"%v", []interface{}{err}}, true) trInfo.tr.SetError() } - grpclog.Printf("grpc: Server.handleStream failed to write status: %v", err) + grpclog.Warningf("grpc: Server.handleStream failed to write status: %v", err) } if trInfo != nil { trInfo.tr.Finish() @@ -985,7 +1136,7 @@ func (s *Server) handleStream(t transport.ServerTransport, stream *transport.Str trInfo.tr.LazyLog(&fmtStringer{"%v", []interface{}{err}}, true) trInfo.tr.SetError() } - grpclog.Printf("grpc: Server.handleStream failed to write status: %v", err) + grpclog.Warningf("grpc: Server.handleStream failed to write status: %v", err) } if trInfo != nil { trInfo.tr.Finish() @@ -1015,19 +1166,64 @@ func (s *Server) handleStream(t transport.ServerTransport, stream *transport.Str trInfo.tr.LazyLog(&fmtStringer{"%v", []interface{}{err}}, true) trInfo.tr.SetError() } - grpclog.Printf("grpc: Server.handleStream failed to write status: %v", err) + grpclog.Warningf("grpc: Server.handleStream failed to write status: %v", err) } if trInfo != nil { trInfo.tr.Finish() } } +// The key to save ServerTransportStream in the context. +type streamKey struct{} + +// NewContextWithServerTransportStream creates a new context from ctx and +// attaches stream to it. +// +// This API is EXPERIMENTAL. +func NewContextWithServerTransportStream(ctx context.Context, stream ServerTransportStream) context.Context { + return context.WithValue(ctx, streamKey{}, stream) +} + +// ServerTransportStream is a minimal interface that a transport stream must +// implement. This can be used to mock an actual transport stream for tests of +// handler code that use, for example, grpc.SetHeader (which requires some +// stream to be in context). +// +// See also NewContextWithServerTransportStream. +// +// This API is EXPERIMENTAL. +type ServerTransportStream interface { + Method() string + SetHeader(md metadata.MD) error + SendHeader(md metadata.MD) error + SetTrailer(md metadata.MD) error +} + +// serverStreamFromContext returns the server stream saved in ctx. Returns +// nil if the given context has no stream associated with it (which implies +// it is not an RPC invocation context). +func serverTransportStreamFromContext(ctx context.Context) ServerTransportStream { + s, _ := ctx.Value(streamKey{}).(ServerTransportStream) + return s +} + // Stop stops the gRPC server. It immediately closes all open // connections and listeners. // It cancels all active RPCs on the server side and the corresponding // pending RPCs on the client side will get notified by connection // errors. func (s *Server) Stop() { + s.quitOnce.Do(func() { + close(s.quit) + }) + + defer func() { + s.serveWG.Wait() + s.doneOnce.Do(func() { + close(s.done) + }) + }() + s.mu.Lock() listeners := s.lis s.lis = nil @@ -1045,7 +1241,6 @@ func (s *Server) Stop() { } s.mu.Lock() - s.cancel() if s.events != nil { s.events.Finish() s.events = nil @@ -1057,22 +1252,38 @@ func (s *Server) Stop() { // accepting new connections and RPCs and blocks until all the pending RPCs are // finished. func (s *Server) GracefulStop() { + s.quitOnce.Do(func() { + close(s.quit) + }) + + defer func() { + s.doneOnce.Do(func() { + close(s.done) + }) + }() + s.mu.Lock() - defer s.mu.Unlock() if s.conns == nil { + s.mu.Unlock() return } for lis := range s.lis { lis.Close() } s.lis = nil - s.cancel() if !s.drain { for c := range s.conns { c.(transport.ServerTransport).Drain() } s.drain = true } + + // Wait for serving threads to be ready to exit. Only then can we be sure no + // new conns will be created. + s.mu.Unlock() + s.serveWG.Wait() + s.mu.Lock() + for len(s.conns) != 0 { s.cv.Wait() } @@ -1081,26 +1292,29 @@ func (s *Server) GracefulStop() { s.events.Finish() s.events = nil } + s.mu.Unlock() } func init() { - internal.TestingCloseConns = func(arg interface{}) { - arg.(*Server).testingCloseConns() - } internal.TestingUseHandlerImpl = func(arg interface{}) { arg.(*Server).opts.useHandlerImpl = true } } -// testingCloseConns closes all existing transports but keeps s.lis -// accepting new connections. -func (s *Server) testingCloseConns() { - s.mu.Lock() - for c := range s.conns { - c.Close() - delete(s.conns, c) +// contentSubtype must be lowercase +// cannot return nil +func (s *Server) getCodec(contentSubtype string) baseCodec { + if s.opts.codec != nil { + return s.opts.codec } - s.mu.Unlock() + if contentSubtype == "" { + return encoding.GetCodec(proto.Name) + } + codec := encoding.GetCodec(contentSubtype) + if codec == nil { + return encoding.GetCodec(proto.Name) + } + return codec } // SetHeader sets the header metadata. @@ -1113,9 +1327,9 @@ func SetHeader(ctx context.Context, md metadata.MD) error { if md.Len() == 0 { return nil } - stream, ok := transport.StreamFromContext(ctx) - if !ok { - return Errorf(codes.Internal, "grpc: failed to fetch the stream from the context %v", ctx) + stream := serverTransportStreamFromContext(ctx) + if stream == nil { + return status.Errorf(codes.Internal, "grpc: failed to fetch the stream from the context %v", ctx) } return stream.SetHeader(md) } @@ -1123,15 +1337,11 @@ func SetHeader(ctx context.Context, md metadata.MD) error { // SendHeader sends header metadata. It may be called at most once. // The provided md and headers set by SetHeader() will be sent. func SendHeader(ctx context.Context, md metadata.MD) error { - stream, ok := transport.StreamFromContext(ctx) - if !ok { - return Errorf(codes.Internal, "grpc: failed to fetch the stream from the context %v", ctx) - } - t := stream.ServerTransport() - if t == nil { - grpclog.Fatalf("grpc: SendHeader: %v has no ServerTransport to send header metadata.", stream) + stream := serverTransportStreamFromContext(ctx) + if stream == nil { + return status.Errorf(codes.Internal, "grpc: failed to fetch the stream from the context %v", ctx) } - if err := t.WriteHeader(stream, md); err != nil { + if err := stream.SendHeader(md); err != nil { return toRPCErr(err) } return nil @@ -1143,9 +1353,9 @@ func SetTrailer(ctx context.Context, md metadata.MD) error { if md.Len() == 0 { return nil } - stream, ok := transport.StreamFromContext(ctx) - if !ok { - return Errorf(codes.Internal, "grpc: failed to fetch the stream from the context %v", ctx) + stream := serverTransportStreamFromContext(ctx) + if stream == nil { + return status.Errorf(codes.Internal, "grpc: failed to fetch the stream from the context %v", ctx) } return stream.SetTrailer(md) } diff --git a/vendor/google.golang.org/grpc/server_test.go b/vendor/google.golang.org/grpc/server_test.go index 53968cc..a9fb05a 100644 --- a/vendor/google.golang.org/grpc/server_test.go +++ b/vendor/google.golang.org/grpc/server_test.go @@ -1,33 +1,18 @@ /* * - * Copyright 2016, Google Inc. - * All rights reserved. + * Copyright 2016 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -38,6 +23,11 @@ import ( "reflect" "strings" "testing" + "time" + + "golang.org/x/net/context" + "google.golang.org/grpc/test/leakcheck" + "google.golang.org/grpc/transport" ) type emptyServiceServer interface{} @@ -45,6 +35,7 @@ type emptyServiceServer interface{} type testServer struct{} func TestStopBeforeServe(t *testing.T) { + defer leakcheck.Check(t) lis, err := net.Listen("tcp", "localhost:0") if err != nil { t.Fatalf("failed to create listener: %v", err) @@ -60,12 +51,34 @@ func TestStopBeforeServe(t *testing.T) { // server.Serve is responsible for closing the listener, even if the // server was already stopped. err = lis.Close() - if got, want := ErrorDesc(err), "use of closed"; !strings.Contains(got, want) { + if got, want := errorDesc(err), "use of closed"; !strings.Contains(got, want) { t.Errorf("Close() error = %q, want %q", got, want) } } +func TestGracefulStop(t *testing.T) { + defer leakcheck.Check(t) + + lis, err := net.Listen("tcp", "localhost:0") + if err != nil { + t.Fatalf("failed to create listener: %v", err) + } + + server := NewServer() + go func() { + // make sure Serve() is called + time.Sleep(time.Millisecond * 500) + server.GracefulStop() + }() + + err = server.Serve(lis) + if err != nil { + t.Fatalf("Serve() returned non-nil error on GracefulStop: %v", err) + } +} + func TestGetServiceInfo(t *testing.T) { + defer leakcheck.Check(t) testSd := ServiceDesc{ ServiceName: "grpc.testing.EmptyService", HandlerType: (*emptyServiceServer)(nil), @@ -111,3 +124,13 @@ func TestGetServiceInfo(t *testing.T) { t.Errorf("GetServiceInfo() = %+v, want %+v", info, want) } } + +func TestStreamContext(t *testing.T) { + expectedStream := &transport.Stream{} + ctx := NewContextWithServerTransportStream(context.Background(), expectedStream) + s := serverTransportStreamFromContext(ctx) + stream, ok := s.(*transport.Stream) + if !ok || expectedStream != stream { + t.Fatalf("GetStreamFromContext(%v) = %v, %t, want: %v, true", ctx, stream, ok, expectedStream) + } +} diff --git a/vendor/google.golang.org/grpc/service_config.go b/vendor/google.golang.org/grpc/service_config.go new file mode 100644 index 0000000..53fa88f --- /dev/null +++ b/vendor/google.golang.org/grpc/service_config.go @@ -0,0 +1,226 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package grpc + +import ( + "encoding/json" + "fmt" + "strconv" + "strings" + "time" + + "google.golang.org/grpc/grpclog" +) + +const maxInt = int(^uint(0) >> 1) + +// MethodConfig defines the configuration recommended by the service providers for a +// particular method. +// DEPRECATED: Users should not use this struct. Service config should be received +// through name resolver, as specified here +// https://github.com/grpc/grpc/blob/master/doc/service_config.md +type MethodConfig struct { + // WaitForReady indicates whether RPCs sent to this method should wait until + // the connection is ready by default (!failfast). The value specified via the + // gRPC client API will override the value set here. + WaitForReady *bool + // Timeout is the default timeout for RPCs sent to this method. The actual + // deadline used will be the minimum of the value specified here and the value + // set by the application via the gRPC client API. If either one is not set, + // then the other will be used. If neither is set, then the RPC has no deadline. + Timeout *time.Duration + // MaxReqSize is the maximum allowed payload size for an individual request in a + // stream (client->server) in bytes. The size which is measured is the serialized + // payload after per-message compression (but before stream compression) in bytes. + // The actual value used is the minimum of the value specified here and the value set + // by the application via the gRPC client API. If either one is not set, then the other + // will be used. If neither is set, then the built-in default is used. + MaxReqSize *int + // MaxRespSize is the maximum allowed payload size for an individual response in a + // stream (server->client) in bytes. + MaxRespSize *int +} + +// ServiceConfig is provided by the service provider and contains parameters for how +// clients that connect to the service should behave. +// DEPRECATED: Users should not use this struct. Service config should be received +// through name resolver, as specified here +// https://github.com/grpc/grpc/blob/master/doc/service_config.md +type ServiceConfig struct { + // LB is the load balancer the service providers recommends. The balancer specified + // via grpc.WithBalancer will override this. + LB *string + // Methods contains a map for the methods in this service. + // If there is an exact match for a method (i.e. /service/method) in the map, use the corresponding MethodConfig. + // If there's no exact match, look for the default config for the service (/service/) and use the corresponding MethodConfig if it exists. + // Otherwise, the method has no MethodConfig to use. + Methods map[string]MethodConfig +} + +func parseDuration(s *string) (*time.Duration, error) { + if s == nil { + return nil, nil + } + if !strings.HasSuffix(*s, "s") { + return nil, fmt.Errorf("malformed duration %q", *s) + } + ss := strings.SplitN((*s)[:len(*s)-1], ".", 3) + if len(ss) > 2 { + return nil, fmt.Errorf("malformed duration %q", *s) + } + // hasDigits is set if either the whole or fractional part of the number is + // present, since both are optional but one is required. + hasDigits := false + var d time.Duration + if len(ss[0]) > 0 { + i, err := strconv.ParseInt(ss[0], 10, 32) + if err != nil { + return nil, fmt.Errorf("malformed duration %q: %v", *s, err) + } + d = time.Duration(i) * time.Second + hasDigits = true + } + if len(ss) == 2 && len(ss[1]) > 0 { + if len(ss[1]) > 9 { + return nil, fmt.Errorf("malformed duration %q", *s) + } + f, err := strconv.ParseInt(ss[1], 10, 64) + if err != nil { + return nil, fmt.Errorf("malformed duration %q: %v", *s, err) + } + for i := 9; i > len(ss[1]); i-- { + f *= 10 + } + d += time.Duration(f) + hasDigits = true + } + if !hasDigits { + return nil, fmt.Errorf("malformed duration %q", *s) + } + + return &d, nil +} + +type jsonName struct { + Service *string + Method *string +} + +func (j jsonName) generatePath() (string, bool) { + if j.Service == nil { + return "", false + } + res := "/" + *j.Service + "/" + if j.Method != nil { + res += *j.Method + } + return res, true +} + +// TODO(lyuxuan): delete this struct after cleaning up old service config implementation. +type jsonMC struct { + Name *[]jsonName + WaitForReady *bool + Timeout *string + MaxRequestMessageBytes *int64 + MaxResponseMessageBytes *int64 +} + +// TODO(lyuxuan): delete this struct after cleaning up old service config implementation. +type jsonSC struct { + LoadBalancingPolicy *string + MethodConfig *[]jsonMC +} + +func parseServiceConfig(js string) (ServiceConfig, error) { + var rsc jsonSC + err := json.Unmarshal([]byte(js), &rsc) + if err != nil { + grpclog.Warningf("grpc: parseServiceConfig error unmarshaling %s due to %v", js, err) + return ServiceConfig{}, err + } + sc := ServiceConfig{ + LB: rsc.LoadBalancingPolicy, + Methods: make(map[string]MethodConfig), + } + if rsc.MethodConfig == nil { + return sc, nil + } + + for _, m := range *rsc.MethodConfig { + if m.Name == nil { + continue + } + d, err := parseDuration(m.Timeout) + if err != nil { + grpclog.Warningf("grpc: parseServiceConfig error unmarshaling %s due to %v", js, err) + return ServiceConfig{}, err + } + + mc := MethodConfig{ + WaitForReady: m.WaitForReady, + Timeout: d, + } + if m.MaxRequestMessageBytes != nil { + if *m.MaxRequestMessageBytes > int64(maxInt) { + mc.MaxReqSize = newInt(maxInt) + } else { + mc.MaxReqSize = newInt(int(*m.MaxRequestMessageBytes)) + } + } + if m.MaxResponseMessageBytes != nil { + if *m.MaxResponseMessageBytes > int64(maxInt) { + mc.MaxRespSize = newInt(maxInt) + } else { + mc.MaxRespSize = newInt(int(*m.MaxResponseMessageBytes)) + } + } + for _, n := range *m.Name { + if path, valid := n.generatePath(); valid { + sc.Methods[path] = mc + } + } + } + + return sc, nil +} + +func min(a, b *int) *int { + if *a < *b { + return a + } + return b +} + +func getMaxSize(mcMax, doptMax *int, defaultVal int) *int { + if mcMax == nil && doptMax == nil { + return &defaultVal + } + if mcMax != nil && doptMax != nil { + return min(mcMax, doptMax) + } + if mcMax != nil { + return mcMax + } + return doptMax +} + +func newInt(b int) *int { + return &b +} diff --git a/vendor/google.golang.org/grpc/service_config_test.go b/vendor/google.golang.org/grpc/service_config_test.go new file mode 100644 index 0000000..8301a50 --- /dev/null +++ b/vendor/google.golang.org/grpc/service_config_test.go @@ -0,0 +1,386 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package grpc + +import ( + "fmt" + "math" + "reflect" + "testing" + "time" +) + +func TestParseLoadBalancer(t *testing.T) { + testcases := []struct { + scjs string + wantSC ServiceConfig + wantErr bool + }{ + { + `{ + "loadBalancingPolicy": "round_robin", + "methodConfig": [ + { + "name": [ + { + "service": "foo", + "method": "Bar" + } + ], + "waitForReady": true + } + ] +}`, + ServiceConfig{ + LB: newString("round_robin"), + Methods: map[string]MethodConfig{ + "/foo/Bar": { + WaitForReady: newBool(true), + }, + }, + }, + false, + }, + { + `{ + "loadBalancingPolicy": 1, + "methodConfig": [ + { + "name": [ + { + "service": "foo", + "method": "Bar" + } + ], + "waitForReady": false + } + ] +}`, + ServiceConfig{}, + true, + }, + } + + for _, c := range testcases { + sc, err := parseServiceConfig(c.scjs) + if c.wantErr != (err != nil) || !reflect.DeepEqual(sc, c.wantSC) { + t.Fatalf("parseServiceConfig(%s) = %+v, %v, want %+v, %v", c.scjs, sc, err, c.wantSC, c.wantErr) + } + } +} + +func TestParseWaitForReady(t *testing.T) { + testcases := []struct { + scjs string + wantSC ServiceConfig + wantErr bool + }{ + { + `{ + "methodConfig": [ + { + "name": [ + { + "service": "foo", + "method": "Bar" + } + ], + "waitForReady": true + } + ] +}`, + ServiceConfig{ + Methods: map[string]MethodConfig{ + "/foo/Bar": { + WaitForReady: newBool(true), + }, + }, + }, + false, + }, + { + `{ + "methodConfig": [ + { + "name": [ + { + "service": "foo", + "method": "Bar" + } + ], + "waitForReady": false + } + ] +}`, + ServiceConfig{ + Methods: map[string]MethodConfig{ + "/foo/Bar": { + WaitForReady: newBool(false), + }, + }, + }, + false, + }, + { + `{ + "methodConfig": [ + { + "name": [ + { + "service": "foo", + "method": "Bar" + } + ], + "waitForReady": fall + }, + { + "name": [ + { + "service": "foo", + "method": "Bar" + } + ], + "waitForReady": true + } + ] +}`, + ServiceConfig{}, + true, + }, + } + + for _, c := range testcases { + sc, err := parseServiceConfig(c.scjs) + if c.wantErr != (err != nil) || !reflect.DeepEqual(sc, c.wantSC) { + t.Fatalf("parseServiceConfig(%s) = %+v, %v, want %+v, %v", c.scjs, sc, err, c.wantSC, c.wantErr) + } + } +} + +func TestPraseTimeOut(t *testing.T) { + testcases := []struct { + scjs string + wantSC ServiceConfig + wantErr bool + }{ + { + `{ + "methodConfig": [ + { + "name": [ + { + "service": "foo", + "method": "Bar" + } + ], + "timeout": "1s" + } + ] +}`, + ServiceConfig{ + Methods: map[string]MethodConfig{ + "/foo/Bar": { + Timeout: newDuration(time.Second), + }, + }, + }, + false, + }, + { + `{ + "methodConfig": [ + { + "name": [ + { + "service": "foo", + "method": "Bar" + } + ], + "timeout": "3c" + } + ] +}`, + ServiceConfig{}, + true, + }, + { + `{ + "methodConfig": [ + { + "name": [ + { + "service": "foo", + "method": "Bar" + } + ], + "timeout": "3c" + }, + { + "name": [ + { + "service": "foo", + "method": "Bar" + } + ], + "timeout": "1s" + } + ] +}`, + ServiceConfig{}, + true, + }, + } + + for _, c := range testcases { + sc, err := parseServiceConfig(c.scjs) + if c.wantErr != (err != nil) || !reflect.DeepEqual(sc, c.wantSC) { + t.Fatalf("parseServiceConfig(%s) = %+v, %v, want %+v, %v", c.scjs, sc, err, c.wantSC, c.wantErr) + } + } +} + +func TestPraseMsgSize(t *testing.T) { + testcases := []struct { + scjs string + wantSC ServiceConfig + wantErr bool + }{ + { + `{ + "methodConfig": [ + { + "name": [ + { + "service": "foo", + "method": "Bar" + } + ], + "maxRequestMessageBytes": 1024, + "maxResponseMessageBytes": 2048 + } + ] +}`, + ServiceConfig{ + Methods: map[string]MethodConfig{ + "/foo/Bar": { + MaxReqSize: newInt(1024), + MaxRespSize: newInt(2048), + }, + }, + }, + false, + }, + { + `{ + "methodConfig": [ + { + "name": [ + { + "service": "foo", + "method": "Bar" + } + ], + "maxRequestMessageBytes": "1024", + "maxResponseMessageBytes": "2048" + }, + { + "name": [ + { + "service": "foo", + "method": "Bar" + } + ], + "maxRequestMessageBytes": 1024, + "maxResponseMessageBytes": 2048 + } + ] +}`, + ServiceConfig{}, + true, + }, + } + + for _, c := range testcases { + sc, err := parseServiceConfig(c.scjs) + if c.wantErr != (err != nil) || !reflect.DeepEqual(sc, c.wantSC) { + t.Fatalf("parseServiceConfig(%s) = %+v, %v, want %+v, %v", c.scjs, sc, err, c.wantSC, c.wantErr) + } + } +} + +func TestParseDuration(t *testing.T) { + testCases := []struct { + s *string + want *time.Duration + err bool + }{ + {s: nil, want: nil}, + {s: newString("1s"), want: newDuration(time.Second)}, + {s: newString("-1s"), want: newDuration(-time.Second)}, + {s: newString("1.1s"), want: newDuration(1100 * time.Millisecond)}, + {s: newString("1.s"), want: newDuration(time.Second)}, + {s: newString("1.0s"), want: newDuration(time.Second)}, + {s: newString(".002s"), want: newDuration(2 * time.Millisecond)}, + {s: newString(".002000s"), want: newDuration(2 * time.Millisecond)}, + {s: newString("0.003s"), want: newDuration(3 * time.Millisecond)}, + {s: newString("0.000004s"), want: newDuration(4 * time.Microsecond)}, + {s: newString("5000.000000009s"), want: newDuration(5000*time.Second + 9*time.Nanosecond)}, + {s: newString("4999.999999999s"), want: newDuration(5000*time.Second - time.Nanosecond)}, + {s: newString("1"), err: true}, + {s: newString("s"), err: true}, + {s: newString(".s"), err: true}, + {s: newString("1 s"), err: true}, + {s: newString(" 1s"), err: true}, + {s: newString("1ms"), err: true}, + {s: newString("1.1.1s"), err: true}, + {s: newString("Xs"), err: true}, + {s: newString("as"), err: true}, + {s: newString(".0000000001s"), err: true}, + {s: newString(fmt.Sprint(math.MaxInt32) + "s"), want: newDuration(math.MaxInt32 * time.Second)}, + {s: newString(fmt.Sprint(int64(math.MaxInt32)+1) + "s"), err: true}, + } + for _, tc := range testCases { + got, err := parseDuration(tc.s) + if tc.err != (err != nil) || + (got == nil) != (tc.want == nil) || + (got != nil && *got != *tc.want) { + wantErr := "" + if tc.err { + wantErr = "" + } + s := "" + if tc.s != nil { + s = `&"` + *tc.s + `"` + } + t.Errorf("parseDuration(%v) = %v, %v; want %v, %v", s, got, err, tc.want, wantErr) + } + } +} + +func newBool(b bool) *bool { + return &b +} + +func newDuration(b time.Duration) *time.Duration { + return &b +} + +func newString(b string) *string { + return &b +} diff --git a/vendor/google.golang.org/grpc/stats/grpc_testing/test.pb.go b/vendor/google.golang.org/grpc/stats/grpc_testing/test.pb.go index 5730004..c0c14a2 100644 --- a/vendor/google.golang.org/grpc/stats/grpc_testing/test.pb.go +++ b/vendor/google.golang.org/grpc/stats/grpc_testing/test.pb.go @@ -1,12 +1,11 @@ -// Code generated by protoc-gen-go. -// source: test.proto -// DO NOT EDIT! +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: grpc_testing/test.proto /* Package grpc_testing is a generated protocol buffer package. It is generated from these files: - test.proto + grpc_testing/test.proto It has these top-level messages: SimpleRequest @@ -347,24 +346,24 @@ var _TestService_serviceDesc = grpc.ServiceDesc{ ServerStreams: true, }, }, - Metadata: "test.proto", + Metadata: "grpc_testing/test.proto", } -func init() { proto.RegisterFile("test.proto", fileDescriptor0) } +func init() { proto.RegisterFile("grpc_testing/test.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 196 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xe2, 0x2a, 0x49, 0x2d, 0x2e, - 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x49, 0x2f, 0x2a, 0x48, 0xd6, 0x03, 0x09, 0x64, - 0xe6, 0xa5, 0x2b, 0xc9, 0x73, 0xf1, 0x06, 0x67, 0xe6, 0x16, 0xe4, 0xa4, 0x06, 0xa5, 0x16, 0x96, - 0xa6, 0x16, 0x97, 0x08, 0xf1, 0x71, 0x31, 0x65, 0xa6, 0x48, 0x30, 0x29, 0x30, 0x6a, 0xb0, 0x06, - 0x31, 0x65, 0xa6, 0x28, 0x29, 0x70, 0xf1, 0xc1, 0x14, 0x14, 0x17, 0xe4, 0xe7, 0x15, 0xa7, 0x42, - 0x55, 0x30, 0xc3, 0x54, 0x18, 0x9d, 0x60, 0xe2, 0xe2, 0x0e, 0x49, 0x2d, 0x2e, 0x09, 0x4e, 0x2d, - 0x2a, 0xcb, 0x4c, 0x4e, 0x15, 0x72, 0xe3, 0xe2, 0x0c, 0xcd, 0x4b, 0x2c, 0xaa, 0x74, 0x4e, 0xcc, - 0xc9, 0x11, 0x92, 0xd6, 0x43, 0xb6, 0x4e, 0x0f, 0xc5, 0x2e, 0x29, 0x19, 0xec, 0x92, 0x50, 0x7b, - 0xfc, 0xb9, 0xf8, 0xdc, 0x4a, 0x73, 0x72, 0x5c, 0x4a, 0x0b, 0x72, 0x52, 0x2b, 0x28, 0x34, 0x4c, - 0x83, 0xd1, 0x80, 0x51, 0xc8, 0x9f, 0x4b, 0xc0, 0x39, 0x27, 0x33, 0x35, 0xaf, 0x24, 0xb8, 0xa4, - 0x28, 0x35, 0x31, 0x97, 0x62, 0x23, 0x41, 0x06, 0x82, 0x3c, 0x9d, 0x5a, 0x44, 0x15, 0x03, 0x0d, - 0x18, 0x93, 0xd8, 0xc0, 0x51, 0x64, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0x61, 0x49, 0x59, 0xe6, - 0xb0, 0x01, 0x00, 0x00, + // 202 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4f, 0x2f, 0x2a, 0x48, + 0x8e, 0x2f, 0x49, 0x2d, 0x2e, 0xc9, 0xcc, 0x4b, 0xd7, 0x07, 0xd1, 0x7a, 0x05, 0x45, 0xf9, 0x25, + 0xf9, 0x42, 0x3c, 0x20, 0x09, 0x3d, 0xa8, 0x84, 0x92, 0x3c, 0x17, 0x6f, 0x70, 0x66, 0x6e, 0x41, + 0x4e, 0x6a, 0x50, 0x6a, 0x61, 0x69, 0x6a, 0x71, 0x89, 0x10, 0x1f, 0x17, 0x53, 0x66, 0x8a, 0x04, + 0x93, 0x02, 0xa3, 0x06, 0x6b, 0x10, 0x53, 0x66, 0x8a, 0x92, 0x02, 0x17, 0x1f, 0x4c, 0x41, 0x71, + 0x41, 0x7e, 0x5e, 0x71, 0x2a, 0x54, 0x05, 0x33, 0x4c, 0x85, 0xd1, 0x09, 0x26, 0x2e, 0xee, 0x90, + 0xd4, 0xe2, 0x92, 0xe0, 0xd4, 0xa2, 0xb2, 0xcc, 0xe4, 0x54, 0x21, 0x37, 0x2e, 0xce, 0xd0, 0xbc, + 0xc4, 0xa2, 0x4a, 0xe7, 0xc4, 0x9c, 0x1c, 0x21, 0x69, 0x3d, 0x64, 0xeb, 0xf4, 0x50, 0xec, 0x92, + 0x92, 0xc1, 0x2e, 0x09, 0xb5, 0xc7, 0x9f, 0x8b, 0xcf, 0xad, 0x34, 0x27, 0xc7, 0xa5, 0xb4, 0x20, + 0x27, 0xb5, 0x82, 0x42, 0xc3, 0x34, 0x18, 0x0d, 0x18, 0x85, 0xfc, 0xb9, 0x04, 0x9c, 0x73, 0x32, + 0x53, 0xf3, 0x4a, 0x82, 0x4b, 0x8a, 0x52, 0x13, 0x73, 0x29, 0x36, 0x12, 0x64, 0x20, 0xc8, 0xd3, + 0xa9, 0x45, 0x54, 0x31, 0xd0, 0x80, 0x31, 0x89, 0x0d, 0x1c, 0x45, 0xc6, 0x80, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x4c, 0x43, 0x27, 0x67, 0xbd, 0x01, 0x00, 0x00, } diff --git a/vendor/google.golang.org/grpc/stats/grpc_testing/test.proto b/vendor/google.golang.org/grpc/stats/grpc_testing/test.proto index bea8c4c..b49a0d5 100644 --- a/vendor/google.golang.org/grpc/stats/grpc_testing/test.proto +++ b/vendor/google.golang.org/grpc/stats/grpc_testing/test.proto @@ -1,3 +1,17 @@ +// Copyright 2017 gRPC authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + syntax = "proto3"; package grpc.testing; diff --git a/vendor/google.golang.org/grpc/stats/handlers.go b/vendor/google.golang.org/grpc/stats/handlers.go index 5fdce2f..05b384c 100644 --- a/vendor/google.golang.org/grpc/stats/handlers.go +++ b/vendor/google.golang.org/grpc/stats/handlers.go @@ -1,33 +1,18 @@ /* * - * Copyright 2016, Google Inc. - * All rights reserved. + * Copyright 2016 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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/google.golang.org/grpc/stats/stats.go b/vendor/google.golang.org/grpc/stats/stats.go index 6c406c7..3f13190 100644 --- a/vendor/google.golang.org/grpc/stats/stats.go +++ b/vendor/google.golang.org/grpc/stats/stats.go @@ -1,36 +1,23 @@ /* * - * Copyright 2016, Google Inc. - * All rights reserved. + * Copyright 2016 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ +//go:generate protoc --go_out=plugins=grpc:. grpc_testing/test.proto + // Package stats is for collecting and reporting various network and RPC stats. // This package is for monitoring purpose only. All fields are read-only. // All APIs are experimental. @@ -39,6 +26,8 @@ package stats // import "google.golang.org/grpc/stats" import ( "net" "time" + + "golang.org/x/net/context" ) // RPCStats contains stats information about RPCs. @@ -146,8 +135,6 @@ func (s *OutPayload) isRPCStats() {} type OutHeader struct { // Client is true if this OutHeader is from client side. Client bool - // WireLength is the wire length of header. - WireLength int // The following fields are valid only if Client is true. // FullMethod is the full RPC method string, i.e., /package.service/method. @@ -182,9 +169,13 @@ func (s *OutTrailer) isRPCStats() {} type End struct { // Client is true if this End is from client side. Client bool + // BeginTime is the time when the RPC began. + BeginTime time.Time // EndTime is the time when the RPC ends. EndTime time.Time - // Error is the error just happened. It implements status.Status if non-nil. + // Error is the error the RPC ended with. It is an error generated from + // status.Status and can be converted back to status.Status using + // status.FromError if non-nil. Error error } @@ -221,3 +212,85 @@ type ConnEnd struct { func (s *ConnEnd) IsClient() bool { return s.Client } func (s *ConnEnd) isConnStats() {} + +type incomingTagsKey struct{} +type outgoingTagsKey struct{} + +// SetTags attaches stats tagging data to the context, which will be sent in +// the outgoing RPC with the header grpc-tags-bin. Subsequent calls to +// SetTags will overwrite the values from earlier calls. +// +// NOTE: this is provided only for backward compatibility with existing clients +// and will likely be removed in an upcoming release. New uses should transmit +// this type of data using metadata with a different, non-reserved (i.e. does +// not begin with "grpc-") header name. +func SetTags(ctx context.Context, b []byte) context.Context { + return context.WithValue(ctx, outgoingTagsKey{}, b) +} + +// Tags returns the tags from the context for the inbound RPC. +// +// NOTE: this is provided only for backward compatibility with existing clients +// and will likely be removed in an upcoming release. New uses should transmit +// this type of data using metadata with a different, non-reserved (i.e. does +// not begin with "grpc-") header name. +func Tags(ctx context.Context) []byte { + b, _ := ctx.Value(incomingTagsKey{}).([]byte) + return b +} + +// SetIncomingTags attaches stats tagging data to the context, to be read by +// the application (not sent in outgoing RPCs). +// +// This is intended for gRPC-internal use ONLY. +func SetIncomingTags(ctx context.Context, b []byte) context.Context { + return context.WithValue(ctx, incomingTagsKey{}, b) +} + +// OutgoingTags returns the tags from the context for the outbound RPC. +// +// This is intended for gRPC-internal use ONLY. +func OutgoingTags(ctx context.Context) []byte { + b, _ := ctx.Value(outgoingTagsKey{}).([]byte) + return b +} + +type incomingTraceKey struct{} +type outgoingTraceKey struct{} + +// SetTrace attaches stats tagging data to the context, which will be sent in +// the outgoing RPC with the header grpc-trace-bin. Subsequent calls to +// SetTrace will overwrite the values from earlier calls. +// +// NOTE: this is provided only for backward compatibility with existing clients +// and will likely be removed in an upcoming release. New uses should transmit +// this type of data using metadata with a different, non-reserved (i.e. does +// not begin with "grpc-") header name. +func SetTrace(ctx context.Context, b []byte) context.Context { + return context.WithValue(ctx, outgoingTraceKey{}, b) +} + +// Trace returns the trace from the context for the inbound RPC. +// +// NOTE: this is provided only for backward compatibility with existing clients +// and will likely be removed in an upcoming release. New uses should transmit +// this type of data using metadata with a different, non-reserved (i.e. does +// not begin with "grpc-") header name. +func Trace(ctx context.Context) []byte { + b, _ := ctx.Value(incomingTraceKey{}).([]byte) + return b +} + +// SetIncomingTrace attaches stats tagging data to the context, to be read by +// the application (not sent in outgoing RPCs). It is intended for +// gRPC-internal use. +func SetIncomingTrace(ctx context.Context, b []byte) context.Context { + return context.WithValue(ctx, incomingTraceKey{}, b) +} + +// OutgoingTrace returns the trace from the context for the outbound RPC. It is +// intended for gRPC-internal use. +func OutgoingTrace(ctx context.Context) []byte { + b, _ := ctx.Value(outgoingTraceKey{}).([]byte) + return b +} diff --git a/vendor/google.golang.org/grpc/stats/stats_test.go b/vendor/google.golang.org/grpc/stats/stats_test.go index 467d6a5..00a5e4f 100644 --- a/vendor/google.golang.org/grpc/stats/stats_test.go +++ b/vendor/google.golang.org/grpc/stats/stats_test.go @@ -1,33 +1,20 @@ +// +build go1.7 + /* * - * Copyright 2016, Google Inc. - * All rights reserved. + * Copyright 2016 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -48,6 +35,7 @@ import ( "google.golang.org/grpc/metadata" "google.golang.org/grpc/stats" testpb "google.golang.org/grpc/stats/grpc_testing" + "google.golang.org/grpc/status" ) func init() { @@ -78,10 +66,10 @@ func (s *testServer) UnaryCall(ctx context.Context, in *testpb.SimpleRequest) (* md, ok := metadata.FromIncomingContext(ctx) if ok { if err := grpc.SendHeader(ctx, md); err != nil { - return nil, grpc.Errorf(grpc.Code(err), "grpc.SendHeader(_, %v) = %v, want ", md, err) + return nil, status.Errorf(status.Code(err), "grpc.SendHeader(_, %v) = %v, want ", md, err) } if err := grpc.SetTrailer(ctx, testTrailerMetadata); err != nil { - return nil, grpc.Errorf(grpc.Code(err), "grpc.SetTrailer(_, %v) = %v, want ", testTrailerMetadata, err) + return nil, status.Errorf(status.Code(err), "grpc.SetTrailer(_, %v) = %v, want ", testTrailerMetadata, err) } } @@ -96,7 +84,7 @@ func (s *testServer) FullDuplexCall(stream testpb.TestService_FullDuplexCallServ md, ok := metadata.FromIncomingContext(stream.Context()) if ok { if err := stream.SendHeader(md); err != nil { - return grpc.Errorf(grpc.Code(err), "%v.SendHeader(%v) = %v, want %v", stream, md, err, nil) + return status.Errorf(status.Code(err), "%v.SendHeader(%v) = %v, want %v", stream, md, err, nil) } stream.SetTrailer(testTrailerMetadata) } @@ -121,10 +109,10 @@ func (s *testServer) FullDuplexCall(stream testpb.TestService_FullDuplexCallServ } func (s *testServer) ClientStreamCall(stream testpb.TestService_ClientStreamCallServer) error { - md, ok := metadata.FromContext(stream.Context()) + md, ok := metadata.FromIncomingContext(stream.Context()) if ok { if err := stream.SendHeader(md); err != nil { - return grpc.Errorf(grpc.Code(err), "%v.SendHeader(%v) = %v, want %v", stream, md, err, nil) + return status.Errorf(status.Code(err), "%v.SendHeader(%v) = %v, want %v", stream, md, err, nil) } stream.SetTrailer(testTrailerMetadata) } @@ -145,10 +133,10 @@ func (s *testServer) ClientStreamCall(stream testpb.TestService_ClientStreamCall } func (s *testServer) ServerStreamCall(in *testpb.SimpleRequest, stream testpb.TestService_ServerStreamCallServer) error { - md, ok := metadata.FromContext(stream.Context()) + md, ok := metadata.FromIncomingContext(stream.Context()) if ok { if err := stream.SendHeader(md); err != nil { - return grpc.Errorf(grpc.Code(err), "%v.SendHeader(%v) = %v, want %v", stream, md, err, nil) + return status.Errorf(status.Code(err), "%v.SendHeader(%v) = %v, want %v", stream, md, err, nil) } stream.SetTrailer(testTrailerMetadata) } @@ -230,14 +218,9 @@ func (te *test) startServer(ts testpb.TestServiceServer) { if te.testServer != nil { testpb.RegisterTestServiceServer(s, te.testServer) } - _, port, err := net.SplitHostPort(lis.Addr().String()) - if err != nil { - te.t.Fatalf("Failed to parse listener address: %v", err) - } - addr := "127.0.0.1:" + port go s.Serve(lis) - te.srvAddr = addr + te.srvAddr = lis.Addr().String() } func (te *test) clientConn() *grpc.ClientConn { @@ -273,11 +256,10 @@ const ( ) type rpcConfig struct { - count int // Number of requests and responses for streaming RPCs. - success bool // Whether the RPC should succeed or return error. - failfast bool - callType rpcType // Type of RPC. - noLastRecv bool // Whether to call recv for io.EOF. When true, last recv won't be called. Only valid for streaming RPCs. + count int // Number of requests and responses for streaming RPCs. + success bool // Whether the RPC should succeed or return error. + failfast bool + callType rpcType // Type of RPC. } func (te *test) doUnaryCall(c *rpcConfig) (*testpb.SimpleRequest, *testpb.SimpleResponse, error) { @@ -330,14 +312,8 @@ func (te *test) doFullDuplexCallRoundtrip(c *rpcConfig) ([]*testpb.SimpleRequest if err = stream.CloseSend(); err != nil && err != io.EOF { return reqs, resps, err } - if !c.noLastRecv { - if _, err = stream.Recv(); err != io.EOF { - return reqs, resps, err - } - } else { - // In the case of not calling the last recv, sleep to avoid - // returning too fast to miss the remaining stats (InTrailer and End). - time.Sleep(time.Second) + if _, err = stream.Recv(); err != io.EOF { + return reqs, resps, err } return reqs, resps, nil @@ -350,7 +326,7 @@ func (te *test) doClientStreamCall(c *rpcConfig) ([]*testpb.SimpleRequest, *test err error ) tc := testpb.NewTestServiceClient(te.clientConn()) - stream, err := tc.ClientStreamCall(metadata.NewContext(context.Background(), testMetadata), grpc.FailFast(c.failfast)) + stream, err := tc.ClientStreamCall(metadata.NewOutgoingContext(context.Background(), testMetadata), grpc.FailFast(c.failfast)) if err != nil { return reqs, resp, err } @@ -385,7 +361,7 @@ func (te *test) doServerStreamCall(c *rpcConfig) (*testpb.SimpleRequest, []*test startID = errorID } req = &testpb.SimpleRequest{Id: startID} - stream, err := tc.ServerStreamCall(metadata.NewContext(context.Background(), testMetadata), req, grpc.FailFast(c.failfast)) + stream, err := tc.ServerStreamCall(metadata.NewOutgoingContext(context.Background(), testMetadata), req, grpc.FailFast(c.failfast)) if err != nil { return req, resps, err } @@ -464,10 +440,6 @@ func checkInHeader(t *testing.T, d *gotData, e *expectedData) { if d.ctx == nil { t.Fatalf("d.ctx = nil, want ") } - // TODO check real length, not just > 0. - if st.WireLength <= 0 { - t.Fatalf("st.Lenght = 0, want > 0") - } if !d.client { if st.FullMethod != e.method { t.Fatalf("st.FullMethod = %s, want %v", st.FullMethod, e.method) @@ -550,18 +522,13 @@ func checkInPayload(t *testing.T, d *gotData, e *expectedData) { func checkInTrailer(t *testing.T, d *gotData, e *expectedData) { var ( ok bool - st *stats.InTrailer ) - if st, ok = d.s.(*stats.InTrailer); !ok { + if _, ok = d.s.(*stats.InTrailer); !ok { t.Fatalf("got %T, want InTrailer", d.s) } if d.ctx == nil { t.Fatalf("d.ctx = nil, want ") } - // TODO check real length, not just > 0. - if st.WireLength <= 0 { - t.Fatalf("st.Lenght = 0, want > 0") - } } func checkOutHeader(t *testing.T, d *gotData, e *expectedData) { @@ -575,10 +542,6 @@ func checkOutHeader(t *testing.T, d *gotData, e *expectedData) { if d.ctx == nil { t.Fatalf("d.ctx = nil, want ") } - // TODO check real length, not just > 0. - if st.WireLength <= 0 { - t.Fatalf("st.Lenght = 0, want > 0") - } if d.client { if st.FullMethod != e.method { t.Fatalf("st.FullMethod = %s, want %v", st.FullMethod, e.method) @@ -662,10 +625,6 @@ func checkOutTrailer(t *testing.T, d *gotData, e *expectedData) { if st.Client { t.Fatalf("st IsClient = true, want false") } - // TODO check real length, not just > 0. - if st.WireLength <= 0 { - t.Fatalf("st.Lenght = 0, want > 0") - } } func checkEnd(t *testing.T, d *gotData, e *expectedData) { @@ -679,10 +638,20 @@ func checkEnd(t *testing.T, d *gotData, e *expectedData) { if d.ctx == nil { t.Fatalf("d.ctx = nil, want ") } + if st.BeginTime.IsZero() { + t.Fatalf("st.BeginTime = %v, want ", st.BeginTime) + } if st.EndTime.IsZero() { t.Fatalf("st.EndTime = %v, want ", st.EndTime) } - if grpc.Code(st.Error) != grpc.Code(e.err) || grpc.ErrorDesc(st.Error) != grpc.ErrorDesc(e.err) { + + actual, ok := status.FromError(st.Error) + if !ok { + t.Fatalf("expected st.Error to be a statusError, got %v (type %T)", st.Error, st.Error) + } + + expectedStatus, _ := status.FromError(e.err) + if actual.Code() != expectedStatus.Code() || actual.Message() != expectedStatus.Message() { t.Fatalf("st.Error = %v, want %v", st.Error, e.err) } } @@ -850,7 +819,9 @@ func testServerStats(t *testing.T, tc *testConfig, cc *rpcConfig, checkFuncs []f err: err, } + h.mu.Lock() checkConnStats(t, h.gotConn) + h.mu.Unlock() checkServerStats(t, h.gotRPC, expect, checkFuncs) } @@ -1143,7 +1114,9 @@ func testClientStats(t *testing.T, tc *testConfig, cc *rpcConfig, checkFuncs map err: err, } + h.mu.Lock() checkConnStats(t, h.gotConn) + h.mu.Unlock() checkClientStats(t, h.gotRPC, expect, checkFuncs) } @@ -1245,16 +1218,40 @@ func TestClientStatsFullDuplexRPCError(t *testing.T) { }) } -// If the user doesn't call the last recv() on clientStream. -func TestClientStatsFullDuplexRPCNotCallingLastRecv(t *testing.T) { - count := 1 - testClientStats(t, &testConfig{compress: "gzip"}, &rpcConfig{count: count, success: true, failfast: false, callType: fullDuplexStreamRPC, noLastRecv: true}, map[int]*checkFuncWithCount{ - begin: {checkBegin, 1}, - outHeader: {checkOutHeader, 1}, - outPayload: {checkOutPayload, count}, - inHeader: {checkInHeader, 1}, - inPayload: {checkInPayload, count}, - inTrailer: {checkInTrailer, 1}, - end: {checkEnd, 1}, - }) +func TestTags(t *testing.T) { + b := []byte{5, 2, 4, 3, 1} + ctx := stats.SetTags(context.Background(), b) + if tg := stats.OutgoingTags(ctx); !reflect.DeepEqual(tg, b) { + t.Errorf("OutgoingTags(%v) = %v; want %v", ctx, tg, b) + } + if tg := stats.Tags(ctx); tg != nil { + t.Errorf("Tags(%v) = %v; want nil", ctx, tg) + } + + ctx = stats.SetIncomingTags(context.Background(), b) + if tg := stats.Tags(ctx); !reflect.DeepEqual(tg, b) { + t.Errorf("Tags(%v) = %v; want %v", ctx, tg, b) + } + if tg := stats.OutgoingTags(ctx); tg != nil { + t.Errorf("OutgoingTags(%v) = %v; want nil", ctx, tg) + } +} + +func TestTrace(t *testing.T) { + b := []byte{5, 2, 4, 3, 1} + ctx := stats.SetTrace(context.Background(), b) + if tr := stats.OutgoingTrace(ctx); !reflect.DeepEqual(tr, b) { + t.Errorf("OutgoingTrace(%v) = %v; want %v", ctx, tr, b) + } + if tr := stats.Trace(ctx); tr != nil { + t.Errorf("Trace(%v) = %v; want nil", ctx, tr) + } + + ctx = stats.SetIncomingTrace(context.Background(), b) + if tr := stats.Trace(ctx); !reflect.DeepEqual(tr, b) { + t.Errorf("Trace(%v) = %v; want %v", ctx, tr, b) + } + if tr := stats.OutgoingTrace(ctx); tr != nil { + t.Errorf("OutgoingTrace(%v) = %v; want nil", ctx, tr) + } } diff --git a/vendor/google.golang.org/grpc/status/status.go b/vendor/google.golang.org/grpc/status/status.go index 99a4cbe..3a42dc6 100644 --- a/vendor/google.golang.org/grpc/status/status.go +++ b/vendor/google.golang.org/grpc/status/status.go @@ -1,33 +1,18 @@ /* * - * Copyright 2017, Google Inc. - * All rights reserved. + * Copyright 2017 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -43,9 +28,11 @@ package status import ( + "errors" "fmt" "github.com/golang/protobuf/proto" + "github.com/golang/protobuf/ptypes" spb "google.golang.org/genproto/googleapis/rpc/status" "google.golang.org/grpc/codes" ) @@ -133,13 +120,70 @@ func FromProto(s *spb.Status) *Status { } // FromError returns a Status representing err if it was produced from this -// package, otherwise it returns nil, false. +// package. Otherwise, ok is false and a Status is returned with codes.Unknown +// and the original error message. func FromError(err error) (s *Status, ok bool) { if err == nil { return &Status{s: &spb.Status{Code: int32(codes.OK)}}, true } - if s, ok := err.(*statusError); ok { - return s.status(), true + if se, ok := err.(*statusError); ok { + return se.status(), true } - return nil, false + return New(codes.Unknown, err.Error()), false +} + +// Convert is a convenience function which removes the need to handle the +// boolean return value from FromError. +func Convert(err error) *Status { + s, _ := FromError(err) + return s +} + +// WithDetails returns a new status with the provided details messages appended to the status. +// If any errors are encountered, it returns nil and the first error encountered. +func (s *Status) WithDetails(details ...proto.Message) (*Status, error) { + if s.Code() == codes.OK { + return nil, errors.New("no error details for status with code OK") + } + // s.Code() != OK implies that s.Proto() != nil. + p := s.Proto() + for _, detail := range details { + any, err := ptypes.MarshalAny(detail) + if err != nil { + return nil, err + } + p.Details = append(p.Details, any) + } + return &Status{s: p}, nil +} + +// Details returns a slice of details messages attached to the status. +// If a detail cannot be decoded, the error is returned in place of the detail. +func (s *Status) Details() []interface{} { + if s == nil || s.s == nil { + return nil + } + details := make([]interface{}, 0, len(s.s.Details)) + for _, any := range s.s.Details { + detail := &ptypes.DynamicAny{} + if err := ptypes.UnmarshalAny(any, detail); err != nil { + details = append(details, err) + continue + } + details = append(details, detail.Message) + } + return details +} + +// Code returns the Code of the error if it is a Status error, codes.OK if err +// is nil, or codes.Unknown otherwise. +func Code(err error) codes.Code { + // Don't use FromError to avoid allocation of OK status. + if err == nil { + return codes.OK + } + if se, ok := err.(*statusError); ok { + return se.status().Code() + } + return codes.Unknown } diff --git a/vendor/google.golang.org/grpc/status/status_test.go b/vendor/google.golang.org/grpc/status/status_test.go index 9a4f39a..8b74c27 100644 --- a/vendor/google.golang.org/grpc/status/status_test.go +++ b/vendor/google.golang.org/grpc/status/status_test.go @@ -1,44 +1,35 @@ /* * - * Copyright 2017, Google Inc. - * All rights reserved. + * Copyright 2017 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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 status import ( + "errors" + "fmt" "reflect" "testing" "github.com/golang/protobuf/proto" + "github.com/golang/protobuf/ptypes" apb "github.com/golang/protobuf/ptypes/any" + dpb "github.com/golang/protobuf/ptypes/duration" + cpb "google.golang.org/genproto/googleapis/rpc/code" + epb "google.golang.org/genproto/googleapis/rpc/errdetails" spb "google.golang.org/genproto/googleapis/rpc/status" "google.golang.org/grpc/codes" ) @@ -127,3 +118,171 @@ func TestFromErrorOK(t *testing.T) { t.Fatalf("FromError(nil) = %v, %v; want , true", s, ok, code, message) } } + +func TestFromErrorUnknownError(t *testing.T) { + code, message := codes.Unknown, "unknown error" + err := errors.New("unknown error") + s, ok := FromError(err) + if ok || s.Code() != code || s.Message() != message { + t.Fatalf("FromError(%v) = %v, %v; want , false", err, s, ok, code, message) + } +} + +func TestConvertKnownError(t *testing.T) { + code, message := codes.Internal, "test description" + err := Error(code, message) + s := Convert(err) + if s.Code() != code || s.Message() != message { + t.Fatalf("Convert(%v) = %v; want ", err, s, code, message) + } +} + +func TestConvertUnknownError(t *testing.T) { + code, message := codes.Unknown, "unknown error" + err := errors.New("unknown error") + s := Convert(err) + if s.Code() != code || s.Message() != message { + t.Fatalf("Convert(%v) = %v; want ", err, s, code, message) + } +} + +func TestStatus_ErrorDetails(t *testing.T) { + tests := []struct { + code codes.Code + details []proto.Message + }{ + { + code: codes.NotFound, + details: nil, + }, + { + code: codes.NotFound, + details: []proto.Message{ + &epb.ResourceInfo{ + ResourceType: "book", + ResourceName: "projects/1234/books/5678", + Owner: "User", + }, + }, + }, + { + code: codes.Internal, + details: []proto.Message{ + &epb.DebugInfo{ + StackEntries: []string{ + "first stack", + "second stack", + }, + }, + }, + }, + { + code: codes.Unavailable, + details: []proto.Message{ + &epb.RetryInfo{ + RetryDelay: &dpb.Duration{Seconds: 60}, + }, + &epb.ResourceInfo{ + ResourceType: "book", + ResourceName: "projects/1234/books/5678", + Owner: "User", + }, + }, + }, + } + + for _, tc := range tests { + s, err := New(tc.code, "").WithDetails(tc.details...) + if err != nil { + t.Fatalf("(%v).WithDetails(%+v) failed: %v", str(s), tc.details, err) + } + details := s.Details() + for i := range details { + if !proto.Equal(details[i].(proto.Message), tc.details[i]) { + t.Fatalf("(%v).Details()[%d] = %+v, want %+v", str(s), i, details[i], tc.details[i]) + } + } + } +} + +func TestStatus_WithDetails_Fail(t *testing.T) { + tests := []*Status{ + nil, + FromProto(nil), + New(codes.OK, ""), + } + for _, s := range tests { + if s, err := s.WithDetails(); err == nil || s != nil { + t.Fatalf("(%v).WithDetails(%+v) = %v, %v; want nil, non-nil", str(s), []proto.Message{}, s, err) + } + } +} + +func TestStatus_ErrorDetails_Fail(t *testing.T) { + tests := []struct { + s *Status + i []interface{} + }{ + { + nil, + nil, + }, + { + FromProto(nil), + nil, + }, + { + New(codes.OK, ""), + []interface{}{}, + }, + { + FromProto(&spb.Status{ + Code: int32(cpb.Code_CANCELLED), + Details: []*apb.Any{ + { + TypeUrl: "", + Value: []byte{}, + }, + mustMarshalAny(&epb.ResourceInfo{ + ResourceType: "book", + ResourceName: "projects/1234/books/5678", + Owner: "User", + }), + }, + }), + []interface{}{ + errors.New(`message type url "" is invalid`), + &epb.ResourceInfo{ + ResourceType: "book", + ResourceName: "projects/1234/books/5678", + Owner: "User", + }, + }, + }, + } + for _, tc := range tests { + got := tc.s.Details() + if !reflect.DeepEqual(got, tc.i) { + t.Errorf("(%v).Details() = %+v, want %+v", str(tc.s), got, tc.i) + } + } +} + +func str(s *Status) string { + if s == nil { + return "nil" + } + if s.s == nil { + return "" + } + return fmt.Sprintf("", codes.Code(s.s.GetCode()), s.s.GetMessage(), s.s.GetDetails()) +} + +// mustMarshalAny converts a protobuf message to an any. +func mustMarshalAny(msg proto.Message) *apb.Any { + any, err := ptypes.MarshalAny(msg) + if err != nil { + panic(fmt.Sprintf("ptypes.MarshalAny(%+v) failed: %v", msg, err)) + } + return any +} diff --git a/vendor/google.golang.org/grpc/stream.go b/vendor/google.golang.org/grpc/stream.go index ed0ebe7..ff376cb 100644 --- a/vendor/google.golang.org/grpc/stream.go +++ b/vendor/google.golang.org/grpc/stream.go @@ -1,40 +1,24 @@ /* * - * Copyright 2014, Google Inc. - * All rights reserved. + * Copyright 2014 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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 grpc import ( - "bytes" "errors" "io" "sync" @@ -42,7 +26,9 @@ import ( "golang.org/x/net/context" "golang.org/x/net/trace" + "google.golang.org/grpc/balancer" "google.golang.org/grpc/codes" + "google.golang.org/grpc/encoding" "google.golang.org/grpc/metadata" "google.golang.org/grpc/stats" "google.golang.org/grpc/status" @@ -50,7 +36,10 @@ import ( ) // StreamHandler defines the handler called by gRPC server to complete the -// execution of a streaming RPC. +// execution of a streaming RPC. If a StreamHandler returns an error, it +// should be produced by the status package, or else gRPC will use +// codes.Unknown as the status code and err.Error() as the status message +// of the RPC. type StreamHandler func(srv interface{}, stream ServerStream) error // StreamDesc represents a streaming RPC service's method specification. @@ -64,6 +53,8 @@ type StreamDesc struct { } // Stream defines the common interface a client or server stream has to satisfy. +// +// All errors returned from Stream are compatible with the status package. type Stream interface { // Context returns the context for this stream. Context() context.Context @@ -73,11 +64,17 @@ type Stream interface { // side. On server side, it simply returns the error to the caller. // SendMsg is called by generated code. Also Users can call SendMsg // directly when it is really needed in their use cases. + // It's safe to have a goroutine calling SendMsg and another goroutine calling + // recvMsg on the same stream at the same time. + // But it is not safe to call SendMsg on the same stream in different goroutines. SendMsg(m interface{}) error // RecvMsg blocks until it receives a message or the stream is // done. On client side, it returns io.EOF when the stream is done. On // any other error, it aborts the stream and returns an RPC status. On // server side, it simply returns the error to the caller. + // It's safe to have a goroutine calling SendMsg and another goroutine calling + // recvMsg on the same stream at the same time. + // But it is not safe to call RecvMsg on the same stream in different goroutines. RecvMsg(m interface{}) error } @@ -93,51 +90,99 @@ type ClientStream interface { // CloseSend closes the send direction of the stream. It closes the stream // when non-nil error is met. CloseSend() error + // Stream.SendMsg() may return a non-nil error when something wrong happens sending + // the request. The returned error indicates the status of this sending, not the final + // status of the RPC. + // + // Always call Stream.RecvMsg() to drain the stream and get the final + // status, otherwise there could be leaked resources. Stream } -// NewClientStream creates a new Stream for the client side. This is called -// by generated code. -func NewClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, opts ...CallOption) (_ ClientStream, err error) { +// NewStream creates a new Stream for the client side. This is typically +// called by generated code. +func (cc *ClientConn) NewStream(ctx context.Context, desc *StreamDesc, method string, opts ...CallOption) (ClientStream, error) { + // allow interceptor to see all applicable call options, which means those + // configured as defaults from dial option as well as per-call options + opts = append(cc.dopts.callOptions, opts...) + if cc.dopts.streamInt != nil { return cc.dopts.streamInt(ctx, desc, cc, method, newClientStream, opts...) } return newClientStream(ctx, desc, cc, method, opts...) } +// NewClientStream creates a new Stream for the client side. This is typically +// called by generated code. +// +// DEPRECATED: Use ClientConn.NewStream instead. +func NewClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, opts ...CallOption) (ClientStream, error) { + return cc.NewStream(ctx, desc, method, opts...) +} + func newClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, opts ...CallOption) (_ ClientStream, err error) { - var ( - t transport.ClientTransport - s *transport.Stream - put func() - cancel context.CancelFunc - ) - c := defaultCallInfo + c := defaultCallInfo() mc := cc.GetMethodConfig(method) if mc.WaitForReady != nil { c.failFast = !*mc.WaitForReady } - if mc.Timeout != nil { + // Possible context leak: + // The cancel function for the child context we create will only be called + // when RecvMsg returns a non-nil error, if the ClientConn is closed, or if + // an error is generated by SendMsg. + // https://github.com/grpc/grpc-go/issues/1818. + var cancel context.CancelFunc + if mc.Timeout != nil && *mc.Timeout >= 0 { ctx, cancel = context.WithTimeout(ctx, *mc.Timeout) + } else { + ctx, cancel = context.WithCancel(ctx) } + defer func() { + if err != nil { + cancel() + } + }() - opts = append(cc.dopts.callOptions, opts...) for _, o := range opts { - if err := o.before(&c); err != nil { + if err := o.before(c); err != nil { return nil, toRPCErr(err) } } c.maxSendMessageSize = getMaxSize(mc.MaxReqSize, c.maxSendMessageSize, defaultClientMaxSendMessageSize) c.maxReceiveMessageSize = getMaxSize(mc.MaxRespSize, c.maxReceiveMessageSize, defaultClientMaxReceiveMessageSize) + if err := setCallInfoCodec(c); err != nil { + return nil, err + } callHdr := &transport.CallHdr{ Host: cc.authority, Method: method, - Flush: desc.ServerStreams && desc.ClientStreams, - } - if cc.dopts.cp != nil { + // If it's not client streaming, we should already have the request to be sent, + // so we don't flush the header. + // If it's client streaming, the user may never send a request or send it any + // time soon, so we ask the transport to flush the header. + Flush: desc.ClientStreams, + ContentSubtype: c.contentSubtype, + } + + // Set our outgoing compression according to the UseCompressor CallOption, if + // set. In that case, also find the compressor from the encoding package. + // Otherwise, use the compressor configured by the WithCompressor DialOption, + // if set. + var cp Compressor + var comp encoding.Compressor + if ct := c.compressorType; ct != "" { + callHdr.SendCompress = ct + if ct != encoding.Identity { + comp = encoding.GetCompressor(ct) + if comp == nil { + return nil, status.Errorf(codes.Internal, "grpc: Compressor is not installed for requested grpc-encoding %q", ct) + } + } + } else if cc.dopts.cp != nil { callHdr.SendCompress = cc.dopts.cp.Type() + cp = cc.dopts.cp } if c.creds != nil { callHdr.Creds = c.creds @@ -161,13 +206,15 @@ func newClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, meth } }() } - ctx = newContextWithRPCInfo(ctx) + ctx = newContextWithRPCInfo(ctx, c.failFast) sh := cc.dopts.copts.StatsHandler + var beginTime time.Time if sh != nil { ctx = sh.TagRPC(ctx, &stats.RPCTagInfo{FullMethodName: method, FailFast: c.failFast}) + beginTime = time.Now() begin := &stats.Begin{ Client: true, - BeginTime: time.Now(), + BeginTime: beginTime, FailFast: c.failFast, } sh.HandleRPC(ctx, begin) @@ -175,349 +222,369 @@ func newClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, meth if err != nil { // Only handle end stats if err != nil. end := &stats.End{ - Client: true, - Error: err, + Client: true, + Error: err, + BeginTime: beginTime, + EndTime: time.Now(), } sh.HandleRPC(ctx, end) } }() } - gopts := BalancerGetOptions{ - BlockingWait: !c.failFast, - } + + var ( + t transport.ClientTransport + s *transport.Stream + done func(balancer.DoneInfo) + ) for { - t, put, err = cc.getTransport(ctx, gopts) + // Check to make sure the context has expired. This will prevent us from + // looping forever if an error occurs for wait-for-ready RPCs where no data + // is sent on the wire. + select { + case <-ctx.Done(): + return nil, toRPCErr(ctx.Err()) + default: + } + + t, done, err = cc.getTransport(ctx, c.failFast) if err != nil { - // TODO(zhaoq): Probably revisit the error handling. - if _, ok := status.FromError(err); ok { - return nil, err - } - if err == errConnClosing || err == errConnUnavailable { - if c.failFast { - return nil, Errorf(codes.Unavailable, "%v", err) - } - continue - } - // All the other errors are treated as Internal errors. - return nil, Errorf(codes.Internal, "%v", err) + return nil, err } s, err = t.NewStream(ctx, callHdr) if err != nil { - if _, ok := err.(transport.ConnectionError); ok && put != nil { - // If error is connection error, transport was sending data on wire, - // and we are not sure if anything has been sent on wire. - // If error is not connection error, we are sure nothing has been sent. - updateRPCInfoInContext(ctx, rpcInfo{bytesSent: true, bytesReceived: false}) - } - if put != nil { - put() - put = nil + if done != nil { + done(balancer.DoneInfo{Err: err}) + done = nil } - if _, ok := err.(transport.ConnectionError); (ok || err == transport.ErrStreamDrain) && !c.failFast { + // In the event of any error from NewStream, we never attempted to write + // anything to the wire, so we can retry indefinitely for non-fail-fast + // RPCs. + if !c.failFast { continue } return nil, toRPCErr(err) } break } + cs := &clientStream{ opts: opts, c: c, desc: desc, - codec: cc.dopts.codec, - cp: cc.dopts.cp, - dc: cc.dopts.dc, + codec: c.codec, + cp: cp, + comp: comp, cancel: cancel, - - put: put, - t: t, - s: s, - p: &parser{r: s}, - - tracing: EnableTracing, - trInfo: trInfo, - - statsCtx: ctx, - statsHandler: cc.dopts.copts.StatsHandler, - } - if cc.dopts.cp != nil { - cs.cbuf = new(bytes.Buffer) + attempt: &csAttempt{ + t: t, + s: s, + p: &parser{r: s}, + done: done, + dc: cc.dopts.dc, + ctx: ctx, + trInfo: trInfo, + statsHandler: sh, + beginTime: beginTime, + }, + } + cs.c.stream = cs + cs.attempt.cs = cs + if desc != unaryStreamDesc { + // Listen on cc and stream contexts to cleanup when the user closes the + // ClientConn or cancels the stream context. In all other cases, an error + // should already be injected into the recv buffer by the transport, which + // the client will eventually receive, and then we will cancel the stream's + // context in clientStream.finish. + go func() { + select { + case <-cc.ctx.Done(): + cs.finish(ErrClientConnClosing) + case <-ctx.Done(): + cs.finish(toRPCErr(ctx.Err())) + } + }() } - // Listen on ctx.Done() to detect cancellation and s.Done() to detect normal termination - // when there is no pending I/O operations on this stream. - go func() { - select { - case <-t.Error(): - // Incur transport error, simply exit. - case <-cc.ctx.Done(): - cs.finish(ErrClientConnClosing) - cs.closeTransportStream(ErrClientConnClosing) - case <-s.Done(): - // TODO: The trace of the RPC is terminated here when there is no pending - // I/O, which is probably not the optimal solution. - cs.finish(s.Status().Err()) - cs.closeTransportStream(nil) - case <-s.GoAway(): - cs.finish(errConnDrain) - cs.closeTransportStream(errConnDrain) - case <-s.Context().Done(): - err := s.Context().Err() - cs.finish(err) - cs.closeTransportStream(transport.ContextErr(err)) - } - }() return cs, nil } // clientStream implements a client side Stream. type clientStream struct { - opts []CallOption - c callInfo - t transport.ClientTransport - s *transport.Stream - p *parser - desc *StreamDesc - codec Codec - cp Compressor - cbuf *bytes.Buffer - dc Decompressor - cancel context.CancelFunc + opts []CallOption + c *callInfo + desc *StreamDesc + + codec baseCodec + cp Compressor + comp encoding.Compressor + + cancel context.CancelFunc // cancels all attempts + + sentLast bool // sent an end stream - tracing bool // set to EnableTracing when the clientStream is created. + mu sync.Mutex // guards finished + finished bool // TODO: replace with atomic cmpxchg or sync.Once? - mu sync.Mutex - put func() - closed bool - finished bool - // trInfo.tr is set when the clientStream is created (if EnableTracing is true), - // and is set to nil when the clientStream's finish method is called. + attempt *csAttempt // the active client stream attempt + // TODO(hedging): hedging will have multiple attempts simultaneously. +} + +// csAttempt implements a single transport stream attempt within a +// clientStream. +type csAttempt struct { + cs *clientStream + t transport.ClientTransport + s *transport.Stream + p *parser + done func(balancer.DoneInfo) + + dc Decompressor + decomp encoding.Compressor + decompSet bool + + ctx context.Context // the application's context, wrapped by stats/tracing + + mu sync.Mutex // guards trInfo.tr + // trInfo.tr is set when created (if EnableTracing is true), + // and cleared when the finish method is called. trInfo traceInfo - // statsCtx keeps the user context for stats handling. - // All stats collection should use the statsCtx (instead of the stream context) - // so that all the generated stats for a particular RPC can be associated in the processing phase. - statsCtx context.Context statsHandler stats.Handler + beginTime time.Time } func (cs *clientStream) Context() context.Context { - return cs.s.Context() + // TODO(retry): commit the current attempt (the context has peer-aware data). + return cs.attempt.context() } func (cs *clientStream) Header() (metadata.MD, error) { - m, err := cs.s.Header() + m, err := cs.attempt.header() if err != nil { - if _, ok := err.(transport.ConnectionError); !ok { - cs.closeTransportStream(err) - } + // TODO(retry): maybe retry on error or commit attempt on success. + err = toRPCErr(err) + cs.finish(err) } return m, err } func (cs *clientStream) Trailer() metadata.MD { - return cs.s.Trailer() + // TODO(retry): on error, maybe retry (trailers-only). + return cs.attempt.trailer() } func (cs *clientStream) SendMsg(m interface{}) (err error) { - if cs.tracing { - cs.mu.Lock() - if cs.trInfo.tr != nil { - cs.trInfo.tr.LazyLog(&payload{sent: true, msg: m}, true) - } + // TODO(retry): buffer message for replaying if not committed. + return cs.attempt.sendMsg(m) +} + +func (cs *clientStream) RecvMsg(m interface{}) (err error) { + // TODO(retry): maybe retry on error or commit attempt on success. + return cs.attempt.recvMsg(m) +} + +func (cs *clientStream) CloseSend() error { + cs.attempt.closeSend() + return nil +} + +func (cs *clientStream) finish(err error) { + if err == io.EOF { + // Ending a stream with EOF indicates a success. + err = nil + } + cs.mu.Lock() + if cs.finished { cs.mu.Unlock() + return + } + cs.finished = true + cs.mu.Unlock() + // TODO(retry): commit current attempt if necessary. + cs.attempt.finish(err) + for _, o := range cs.opts { + o.after(cs.c) } + cs.cancel() +} + +func (a *csAttempt) context() context.Context { + return a.s.Context() +} + +func (a *csAttempt) header() (metadata.MD, error) { + return a.s.Header() +} + +func (a *csAttempt) trailer() metadata.MD { + return a.s.Trailer() +} + +func (a *csAttempt) sendMsg(m interface{}) (err error) { // TODO Investigate how to signal the stats handling party. // generate error stats if err != nil && err != io.EOF? + cs := a.cs defer func() { - if err != nil { + // For non-client-streaming RPCs, we return nil instead of EOF on success + // because the generated code requires it. finish is not called; RecvMsg() + // will call it with the stream's status independently. + if err == io.EOF && !cs.desc.ClientStreams { + err = nil + } + if err != nil && err != io.EOF { + // Call finish on the client stream for errors generated by this SendMsg + // call, as these indicate problems created by this client. (Transport + // errors are converted to an io.EOF error below; the real error will be + // returned from RecvMsg eventually in that case, or be retried.) cs.finish(err) } - if err == nil { - return - } - if err == io.EOF { - // Specialize the process for server streaming. SendMesg is only called - // once when creating the stream object. io.EOF needs to be skipped when - // the rpc is early finished (before the stream object is created.). - // TODO: It is probably better to move this into the generated code. - if !cs.desc.ClientStreams && cs.desc.ServerStreams { - err = nil - } - return - } - if _, ok := err.(transport.ConnectionError); !ok { - cs.closeTransportStream(err) - } - err = toRPCErr(err) }() + // TODO: Check cs.sentLast and error if we already ended the stream. + if EnableTracing { + a.mu.Lock() + if a.trInfo.tr != nil { + a.trInfo.tr.LazyLog(&payload{sent: true, msg: m}, true) + } + a.mu.Unlock() + } var outPayload *stats.OutPayload - if cs.statsHandler != nil { + if a.statsHandler != nil { outPayload = &stats.OutPayload{ Client: true, } } - out, err := encode(cs.codec, m, cs.cp, cs.cbuf, outPayload) - defer func() { - if cs.cbuf != nil { - cs.cbuf.Reset() - } - }() + hdr, data, err := encode(cs.codec, m, cs.cp, outPayload, cs.comp) if err != nil { - return Errorf(codes.Internal, "grpc: %v", err) + return err } - if cs.c.maxSendMessageSize == nil { - return Errorf(codes.Internal, "callInfo maxSendMessageSize field uninitialized(nil)") + if len(data) > *cs.c.maxSendMessageSize { + return status.Errorf(codes.ResourceExhausted, "trying to send message larger than max (%d vs. %d)", len(data), *cs.c.maxSendMessageSize) } - if len(out) > *cs.c.maxSendMessageSize { - return Errorf(codes.ResourceExhausted, "trying to send message larger than max (%d vs. %d)", len(out), *cs.c.maxSendMessageSize) + if !cs.desc.ClientStreams { + cs.sentLast = true } - err = cs.t.Write(cs.s, out, &transport.Options{Last: false}) - if err == nil && outPayload != nil { - outPayload.SentTime = time.Now() - cs.statsHandler.HandleRPC(cs.statsCtx, outPayload) + err = a.t.Write(a.s, hdr, data, &transport.Options{Last: !cs.desc.ClientStreams}) + if err == nil { + if outPayload != nil { + outPayload.SentTime = time.Now() + a.statsHandler.HandleRPC(a.ctx, outPayload) + } + return nil } - return err + return io.EOF } -func (cs *clientStream) RecvMsg(m interface{}) (err error) { +func (a *csAttempt) recvMsg(m interface{}) (err error) { + cs := a.cs + defer func() { + if err != nil || !cs.desc.ServerStreams { + // err != nil or non-server-streaming indicates end of stream. + cs.finish(err) + } + }() var inPayload *stats.InPayload - if cs.statsHandler != nil { + if a.statsHandler != nil { inPayload = &stats.InPayload{ Client: true, } } - if cs.c.maxReceiveMessageSize == nil { - return Errorf(codes.Internal, "callInfo maxReceiveMessageSize field uninitialized(nil)") - } - err = recv(cs.p, cs.codec, cs.s, cs.dc, m, *cs.c.maxReceiveMessageSize, inPayload) - defer func() { - // err != nil indicates the termination of the stream. - if err != nil { - cs.finish(err) - } - }() - if err == nil { - if cs.tracing { - cs.mu.Lock() - if cs.trInfo.tr != nil { - cs.trInfo.tr.LazyLog(&payload{sent: false, msg: m}, true) + if !a.decompSet { + // Block until we receive headers containing received message encoding. + if ct := a.s.RecvCompress(); ct != "" && ct != encoding.Identity { + if a.dc == nil || a.dc.Type() != ct { + // No configured decompressor, or it does not match the incoming + // message encoding; attempt to find a registered compressor that does. + a.dc = nil + a.decomp = encoding.GetCompressor(ct) } - cs.mu.Unlock() - } - if inPayload != nil { - cs.statsHandler.HandleRPC(cs.statsCtx, inPayload) - } - if !cs.desc.ClientStreams || cs.desc.ServerStreams { - return - } - // Special handling for client streaming rpc. - // This recv expects EOF or errors, so we don't collect inPayload. - if cs.c.maxReceiveMessageSize == nil { - return Errorf(codes.Internal, "callInfo maxReceiveMessageSize field uninitialized(nil)") - } - err = recv(cs.p, cs.codec, cs.s, cs.dc, m, *cs.c.maxReceiveMessageSize, nil) - cs.closeTransportStream(err) - if err == nil { - return toRPCErr(errors.New("grpc: client streaming protocol violation: get , want ")) + } else { + // No compression is used; disable our decompressor. + a.dc = nil } + // Only initialize this state once per stream. + a.decompSet = true + } + err = recv(a.p, cs.codec, a.s, a.dc, m, *cs.c.maxReceiveMessageSize, inPayload, a.decomp) + if err != nil { if err == io.EOF { - if se := cs.s.Status().Err(); se != nil { - return se + if statusErr := a.s.Status().Err(); statusErr != nil { + return statusErr } - cs.finish(err) - return nil + return io.EOF // indicates successful end of stream. } return toRPCErr(err) } - if _, ok := err.(transport.ConnectionError); !ok { - cs.closeTransportStream(err) - } - if err == io.EOF { - if statusErr := cs.s.Status().Err(); statusErr != nil { - return statusErr + if EnableTracing { + a.mu.Lock() + if a.trInfo.tr != nil { + a.trInfo.tr.LazyLog(&payload{sent: false, msg: m}, true) } - // Returns io.EOF to indicate the end of the stream. - return + a.mu.Unlock() } - return toRPCErr(err) -} - -func (cs *clientStream) CloseSend() (err error) { - err = cs.t.Write(cs.s, nil, &transport.Options{Last: true}) - defer func() { - if err != nil { - cs.finish(err) - } - }() - if err == nil || err == io.EOF { + if inPayload != nil { + a.statsHandler.HandleRPC(a.ctx, inPayload) + } + if cs.desc.ServerStreams { + // Subsequent messages should be received by subsequent RecvMsg calls. return nil } - if _, ok := err.(transport.ConnectionError); !ok { - cs.closeTransportStream(err) + + // Special handling for non-server-stream rpcs. + // This recv expects EOF or errors, so we don't collect inPayload. + err = recv(a.p, cs.codec, a.s, a.dc, m, *cs.c.maxReceiveMessageSize, nil, a.decomp) + if err == nil { + return toRPCErr(errors.New("grpc: client streaming protocol violation: get , want ")) } - err = toRPCErr(err) - return + if err == io.EOF { + return a.s.Status().Err() // non-server streaming Recv returns nil on success + } + return toRPCErr(err) } -func (cs *clientStream) closeTransportStream(err error) { - cs.mu.Lock() - if cs.closed { - cs.mu.Unlock() +func (a *csAttempt) closeSend() { + cs := a.cs + if cs.sentLast { return } - cs.closed = true - cs.mu.Unlock() - cs.t.CloseStream(cs.s, err) + cs.sentLast = true + cs.attempt.t.Write(cs.attempt.s, nil, nil, &transport.Options{Last: true}) + // We ignore errors from Write. Any error it would return would also be + // returned by a subsequent RecvMsg call, and the user is supposed to always + // finish the stream by calling RecvMsg until it returns err != nil. } -func (cs *clientStream) finish(err error) { - cs.mu.Lock() - defer cs.mu.Unlock() - if cs.finished { - return - } - cs.finished = true - defer func() { - if cs.cancel != nil { - cs.cancel() - } - }() - for _, o := range cs.opts { - o.after(&cs.c) - } - if cs.put != nil { - updateRPCInfoInContext(cs.s.Context(), rpcInfo{ - bytesSent: cs.s.BytesSent(), - bytesReceived: cs.s.BytesReceived(), +func (a *csAttempt) finish(err error) { + a.mu.Lock() + a.t.CloseStream(a.s, err) + + if a.done != nil { + a.done(balancer.DoneInfo{ + Err: err, + BytesSent: true, + BytesReceived: a.s.BytesReceived(), }) - cs.put() - cs.put = nil } - if cs.statsHandler != nil { + if a.statsHandler != nil { end := &stats.End{ - Client: true, - EndTime: time.Now(), - } - if err != io.EOF { - // end.Error is nil if the RPC finished successfully. - end.Error = toRPCErr(err) + Client: true, + BeginTime: a.beginTime, + EndTime: time.Now(), + Error: err, } - cs.statsHandler.HandleRPC(cs.statsCtx, end) + a.statsHandler.HandleRPC(a.ctx, end) } - if !cs.tracing { - return - } - if cs.trInfo.tr != nil { - if err == nil || err == io.EOF { - cs.trInfo.tr.LazyPrintf("RPC: [OK]") + if a.trInfo.tr != nil { + if err == nil { + a.trInfo.tr.LazyPrintf("RPC: [OK]") } else { - cs.trInfo.tr.LazyPrintf("RPC: [%v]", err) - cs.trInfo.tr.SetError() + a.trInfo.tr.LazyPrintf("RPC: [%v]", err) + a.trInfo.tr.SetError() } - cs.trInfo.tr.Finish() - cs.trInfo.tr = nil + a.trInfo.tr.Finish() + a.trInfo.tr = nil } + a.mu.Unlock() } // ServerStream defines the interface a server stream has to satisfy. @@ -541,13 +608,17 @@ type ServerStream interface { // serverStream implements a server side Stream. type serverStream struct { - t transport.ServerTransport - s *transport.Stream - p *parser - codec Codec - cp Compressor - dc Decompressor - cbuf *bytes.Buffer + ctx context.Context + t transport.ServerTransport + s *transport.Stream + p *parser + codec baseCodec + + cp Compressor + dc Decompressor + comp encoding.Compressor + decomp encoding.Compressor + maxReceiveMessageSize int maxSendMessageSize int trInfo *traceInfo @@ -558,7 +629,7 @@ type serverStream struct { } func (ss *serverStream) Context() context.Context { - return ss.s.Context() + return ss.ctx } func (ss *serverStream) SetHeader(md metadata.MD) error { @@ -594,25 +665,23 @@ func (ss *serverStream) SendMsg(m interface{}) (err error) { } ss.mu.Unlock() } + if err != nil && err != io.EOF { + st, _ := status.FromError(toRPCErr(err)) + ss.t.WriteStatus(ss.s, st) + } }() var outPayload *stats.OutPayload if ss.statsHandler != nil { outPayload = &stats.OutPayload{} } - out, err := encode(ss.codec, m, ss.cp, ss.cbuf, outPayload) - defer func() { - if ss.cbuf != nil { - ss.cbuf.Reset() - } - }() + hdr, data, err := encode(ss.codec, m, ss.cp, outPayload, ss.comp) if err != nil { - err = Errorf(codes.Internal, "grpc: %v", err) return err } - if len(out) > ss.maxSendMessageSize { - return Errorf(codes.ResourceExhausted, "trying to send message larger than max (%d vs. %d)", len(out), ss.maxSendMessageSize) + if len(data) > ss.maxSendMessageSize { + return status.Errorf(codes.ResourceExhausted, "trying to send message larger than max (%d vs. %d)", len(data), ss.maxSendMessageSize) } - if err := ss.t.Write(ss.s, out, &transport.Options{Last: false}); err != nil { + if err := ss.t.Write(ss.s, hdr, data, &transport.Options{Last: false}); err != nil { return toRPCErr(err) } if outPayload != nil { @@ -636,17 +705,21 @@ func (ss *serverStream) RecvMsg(m interface{}) (err error) { } ss.mu.Unlock() } + if err != nil && err != io.EOF { + st, _ := status.FromError(toRPCErr(err)) + ss.t.WriteStatus(ss.s, st) + } }() var inPayload *stats.InPayload if ss.statsHandler != nil { inPayload = &stats.InPayload{} } - if err := recv(ss.p, ss.codec, ss.s, ss.dc, m, ss.maxReceiveMessageSize, inPayload); err != nil { + if err := recv(ss.p, ss.codec, ss.s, ss.dc, m, ss.maxReceiveMessageSize, inPayload, ss.decomp); err != nil { if err == io.EOF { return err } if err == io.ErrUnexpectedEOF { - err = Errorf(codes.Internal, io.ErrUnexpectedEOF.Error()) + err = status.Errorf(codes.Internal, io.ErrUnexpectedEOF.Error()) } return toRPCErr(err) } @@ -655,3 +728,13 @@ func (ss *serverStream) RecvMsg(m interface{}) (err error) { } return nil } + +// MethodFromServerStream returns the method string for the input stream. +// The returned string is in the format of "/service/method". +func MethodFromServerStream(stream ServerStream) (string, bool) { + s := serverTransportStreamFromContext(stream.Context()) + if s == nil { + return "", false + } + return s.Method(), true +} diff --git a/vendor/google.golang.org/grpc/stress/client/main.go b/vendor/google.golang.org/grpc/stress/client/main.go index dff85ff..6e7e733 100644 --- a/vendor/google.golang.org/grpc/stress/client/main.go +++ b/vendor/google.golang.org/grpc/stress/client/main.go @@ -1,36 +1,23 @@ /* * - * Copyright 2016, Google Inc. - * All rights reserved. + * Copyright 2016 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ +//go:generate protoc -I ../grpc_testing --go_out=plugins=grpc:../grpc_testing ../grpc_testing/metrics.proto + // client starts an interop client to do stress test and a metrics server to report qps. package main @@ -51,7 +38,9 @@ import ( "google.golang.org/grpc/grpclog" "google.golang.org/grpc/interop" testpb "google.golang.org/grpc/interop/grpc_testing" + "google.golang.org/grpc/status" metricspb "google.golang.org/grpc/stress/grpc_testing" + "google.golang.org/grpc/testdata" ) var ( @@ -64,9 +53,7 @@ var ( useTLS = flag.Bool("use_tls", false, "Connection uses TLS if true, else plain TCP") testCA = flag.Bool("use_test_ca", false, "Whether to replace platform root CAs with test CA as the CA root") tlsServerName = flag.String("server_host_override", "foo.test.google.fr", "The server name use to verify the hostname returned by TLS handshake if it is not empty. Otherwise, --server_host is used.") - - // The test CA root cert file - testCAFile = "testdata/ca.pem" + caFile = flag.String("ca_file", "", "The file containning the CA root cert file") ) // testCaseWithWeight contains the test case type and its weight. @@ -190,7 +177,7 @@ func (s *server) GetGauge(ctx context.Context, in *metricspb.GaugeRequest) (*met if g, ok := s.gauges[in.Name]; ok { return &metricspb.GaugeResponse{Name: in.Name, Value: &metricspb.GaugeResponse_LongValue{LongValue: g.get()}}, nil } - return nil, grpc.Errorf(codes.InvalidArgument, "gauge with name %s not found", in.Name) + return nil, status.Errorf(codes.InvalidArgument, "gauge with name %s not found", in.Name) } // createGauge creates a gauge using the given name in metrics server. @@ -292,7 +279,10 @@ func newConn(address string, useTLS, testCA bool, tlsServerName string) (*grpc.C var creds credentials.TransportCredentials if testCA { var err error - creds, err = credentials.NewClientTLSFromFile(testCAFile, sn) + if *caFile == "" { + *caFile = testdata.Path("ca.pem") + } + creds, err = credentials.NewClientTLSFromFile(*caFile, sn) if err != nil { grpclog.Fatalf("Failed to create TLS credentials %v", err) } diff --git a/vendor/google.golang.org/grpc/stress/client/testdata/ca.pem b/vendor/google.golang.org/grpc/stress/client/testdata/ca.pem deleted file mode 100644 index 6c8511a..0000000 --- a/vendor/google.golang.org/grpc/stress/client/testdata/ca.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICSjCCAbOgAwIBAgIJAJHGGR4dGioHMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV -BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX -aWRnaXRzIFB0eSBMdGQxDzANBgNVBAMTBnRlc3RjYTAeFw0xNDExMTEyMjMxMjla -Fw0yNDExMDgyMjMxMjlaMFYxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0 -YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDzANBgNVBAMT -BnRlc3RjYTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwEDfBV5MYdlHVHJ7 -+L4nxrZy7mBfAVXpOc5vMYztssUI7mL2/iYujiIXM+weZYNTEpLdjyJdu7R5gGUu -g1jSVK/EPHfc74O7AyZU34PNIP4Sh33N+/A5YexrNgJlPY+E3GdVYi4ldWJjgkAd -Qah2PH5ACLrIIC6tRka9hcaBlIECAwEAAaMgMB4wDAYDVR0TBAUwAwEB/zAOBgNV -HQ8BAf8EBAMCAgQwDQYJKoZIhvcNAQELBQADgYEAHzC7jdYlzAVmddi/gdAeKPau -sPBG/C2HCWqHzpCUHcKuvMzDVkY/MP2o6JIW2DBbY64bO/FceExhjcykgaYtCH/m -oIU63+CFOTtR7otyQAWHqXa7q4SbCDlG7DyRFxqG0txPtGvy12lgldA2+RgcigQG -Dfcog5wrJytaQ6UA0wE= ------END CERTIFICATE----- diff --git a/vendor/google.golang.org/grpc/stress/client/testdata/server1.key b/vendor/google.golang.org/grpc/stress/client/testdata/server1.key deleted file mode 100644 index 143a5b8..0000000 --- a/vendor/google.golang.org/grpc/stress/client/testdata/server1.key +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAOHDFScoLCVJpYDD -M4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlumN+fm+AjPEK5GHhGn1BgzkWF+slf -3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wHNVX77fBZOgp9VlSMVfyd9N8YwbBY -AckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAECgYAn7qGnM2vbjJNBm0VZCkOkTIWm -V10okw7EPJrdL2mkre9NasghNXbE1y5zDshx5Nt3KsazKOxTT8d0Jwh/3KbaN+YY -tTCbKGW0pXDRBhwUHRcuRzScjli8Rih5UOCiZkhefUTcRb6xIhZJuQy71tjaSy0p -dHZRmYyBYO2YEQ8xoQJBAPrJPhMBkzmEYFtyIEqAxQ/o/A6E+E4w8i+KM7nQCK7q -K4JXzyXVAjLfyBZWHGM2uro/fjqPggGD6QH1qXCkI4MCQQDmdKeb2TrKRh5BY1LR -81aJGKcJ2XbcDu6wMZK4oqWbTX2KiYn9GB0woM6nSr/Y6iy1u145YzYxEV/iMwff -DJULAkB8B2MnyzOg0pNFJqBJuH29bKCcHa8gHJzqXhNO5lAlEbMK95p/P2Wi+4Hd -aiEIAF1BF326QJcvYKmwSmrORp85AkAlSNxRJ50OWrfMZnBgzVjDx3xG6KsFQVk2 -ol6VhqL6dFgKUORFUWBvnKSyhjJxurlPEahV6oo6+A+mPhFY8eUvAkAZQyTdupP3 -XEFQKctGz+9+gKkemDp7LBBMEMBXrGTLPhpEfcjv/7KPdnFHYmhYeBTBnuVmTVWe -F98XJ7tIFfJq ------END PRIVATE KEY----- diff --git a/vendor/google.golang.org/grpc/stress/client/testdata/server1.pem b/vendor/google.golang.org/grpc/stress/client/testdata/server1.pem deleted file mode 100644 index f3d43fc..0000000 --- a/vendor/google.golang.org/grpc/stress/client/testdata/server1.pem +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICnDCCAgWgAwIBAgIBBzANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJBVTET -MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQ -dHkgTHRkMQ8wDQYDVQQDEwZ0ZXN0Y2EwHhcNMTUxMTA0MDIyMDI0WhcNMjUxMTAx -MDIyMDI0WjBlMQswCQYDVQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNV -BAcTB0NoaWNhZ28xFTATBgNVBAoTDEV4YW1wbGUsIENvLjEaMBgGA1UEAxQRKi50 -ZXN0Lmdvb2dsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOHDFSco -LCVJpYDDM4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlumN+fm+AjPEK5GHhGn1Bg -zkWF+slf3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wHNVX77fBZOgp9VlSMVfyd -9N8YwbBYAckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAGjazBpMAkGA1UdEwQCMAAw -CwYDVR0PBAQDAgXgME8GA1UdEQRIMEaCECoudGVzdC5nb29nbGUuZnKCGHdhdGVy -em9vaS50ZXN0Lmdvb2dsZS5iZYISKi50ZXN0LnlvdXR1YmUuY29thwTAqAEDMA0G -CSqGSIb3DQEBCwUAA4GBAJFXVifQNub1LUP4JlnX5lXNlo8FxZ2a12AFQs+bzoJ6 -hM044EDjqyxUqSbVePK0ni3w1fHQB5rY9yYC5f8G7aqqTY1QOhoUk8ZTSTRpnkTh -y4jjdvTZeLDVBlueZUTDRmy2feY5aZIU18vFDK08dTG0A87pppuv1LNIR3loveU8 ------END CERTIFICATE----- diff --git a/vendor/google.golang.org/grpc/stress/grpc_testing/metrics.pb.go b/vendor/google.golang.org/grpc/stress/grpc_testing/metrics.pb.go index a1310b5..466668a 100644 --- a/vendor/google.golang.org/grpc/stress/grpc_testing/metrics.pb.go +++ b/vendor/google.golang.org/grpc/stress/grpc_testing/metrics.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: metrics.proto -// DO NOT EDIT! /* Package grpc_testing is a generated protocol buffer package. @@ -35,7 +34,7 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package -// Reponse message containing the gauge name and value +// Response message containing the gauge name and value type GaugeResponse struct { Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` // Types that are valid to be assigned to Value: @@ -75,6 +74,13 @@ func (m *GaugeResponse) GetValue() isGaugeResponse_Value { return nil } +func (m *GaugeResponse) GetName() string { + if m != nil { + return m.Name + } + return "" +} + func (m *GaugeResponse) GetLongValue() int64 { if x, ok := m.GetValue().(*GaugeResponse_LongValue); ok { return x.LongValue @@ -185,6 +191,13 @@ func (m *GaugeRequest) String() string { return proto.CompactTextStri func (*GaugeRequest) ProtoMessage() {} func (*GaugeRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } +func (m *GaugeRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + type EmptyMessage struct { } @@ -341,21 +354,21 @@ var _MetricsService_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("metrics.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 253 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xe2, 0xcd, 0x4d, 0x2d, 0x29, - 0xca, 0x4c, 0x2e, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x49, 0x2f, 0x2a, 0x48, 0xd6, - 0x2b, 0x49, 0x2d, 0x2e, 0xc9, 0xcc, 0x4b, 0x57, 0x9a, 0xce, 0xc8, 0xc5, 0xeb, 0x9e, 0x58, 0x9a, - 0x9e, 0x1a, 0x94, 0x5a, 0x5c, 0x90, 0x9f, 0x57, 0x9c, 0x2a, 0x24, 0xc4, 0xc5, 0x92, 0x97, 0x98, - 0x9b, 0x2a, 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, 0x19, 0x04, 0x66, 0x0b, 0xc9, 0x73, 0x71, 0xe5, 0xe4, - 0xe7, 0xa5, 0xc7, 0x97, 0x25, 0xe6, 0x94, 0xa6, 0x4a, 0x30, 0x01, 0x65, 0x98, 0x3d, 0x18, 0x82, - 0x38, 0x41, 0x62, 0x61, 0x20, 0x21, 0x21, 0x65, 0x2e, 0x9e, 0x94, 0xfc, 0xd2, 0xa4, 0x9c, 0x54, - 0xa8, 0x12, 0x66, 0xa0, 0x12, 0x46, 0xa0, 0x12, 0x6e, 0x88, 0x28, 0x5c, 0x51, 0x31, 0xd0, 0x25, - 0x70, 0x73, 0x58, 0x40, 0x36, 0x80, 0x14, 0x41, 0x44, 0xc1, 0x8a, 0x9c, 0xd8, 0xb9, 0x58, 0xc1, - 0xb2, 0x4a, 0x4a, 0x5c, 0x3c, 0x50, 0x87, 0x15, 0x96, 0x02, 0x1d, 0x8b, 0xcd, 0x5d, 0x4a, 0x7c, - 0x5c, 0x3c, 0xae, 0xb9, 0x05, 0x25, 0x95, 0xbe, 0xa9, 0xc5, 0xc5, 0x89, 0xe9, 0xa9, 0x46, 0x0b, - 0x18, 0xb9, 0xf8, 0x7c, 0x21, 0xbe, 0x0d, 0x4e, 0x2d, 0x2a, 0xcb, 0x4c, 0x4e, 0x15, 0xf2, 0x04, - 0x1a, 0x93, 0x5a, 0xe2, 0x98, 0x93, 0x03, 0x36, 0xac, 0x58, 0x48, 0x4a, 0x0f, 0xd9, 0xff, 0x7a, - 0xc8, 0xda, 0xa5, 0xa4, 0x51, 0xe5, 0x50, 0xc2, 0xc5, 0x80, 0x51, 0xc8, 0x99, 0x8b, 0x03, 0x68, - 0x14, 0x58, 0x14, 0xdd, 0x18, 0x64, 0x97, 0xe2, 0x35, 0x26, 0x89, 0x0d, 0x1c, 0x0b, 0xc6, 0x80, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x5e, 0x7d, 0xb2, 0xc9, 0x96, 0x01, 0x00, 0x00, + // 256 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0x3f, 0x4f, 0xc3, 0x30, + 0x10, 0xc5, 0x6b, 0x5a, 0xfe, 0xf4, 0x70, 0x3b, 0x78, 0xaa, 0xca, 0x40, 0x14, 0x96, 0x4c, 0x11, + 0x82, 0x4f, 0x00, 0x08, 0xa5, 0x0c, 0x5d, 0x82, 0xc4, 0x8a, 0xd2, 0x70, 0xb2, 0x22, 0x39, 0x71, + 0xf0, 0x5d, 0x2a, 0xf1, 0x49, 0x58, 0xf9, 0xa8, 0xc8, 0x4e, 0x55, 0xa5, 0x08, 0x75, 0xb3, 0x7e, + 0xf7, 0xfc, 0xfc, 0x9e, 0x0f, 0x66, 0x35, 0xb2, 0xab, 0x4a, 0x4a, 0x5b, 0x67, 0xd9, 0x2a, 0xa9, + 0x5d, 0x5b, 0xa6, 0x8c, 0xc4, 0x55, 0xa3, 0xe3, 0x6f, 0x01, 0xb3, 0xac, 0xe8, 0x34, 0xe6, 0x48, + 0xad, 0x6d, 0x08, 0x95, 0x82, 0x49, 0x53, 0xd4, 0xb8, 0x10, 0x91, 0x48, 0xa6, 0x79, 0x38, 0xab, + 0x6b, 0x00, 0x63, 0x1b, 0xfd, 0xbe, 0x2d, 0x4c, 0x87, 0x8b, 0x93, 0x48, 0x24, 0xe3, 0xd5, 0x28, + 0x9f, 0x7a, 0xf6, 0xe6, 0x91, 0xba, 0x01, 0xf9, 0x61, 0xbb, 0x8d, 0xc1, 0x9d, 0x64, 0x1c, 0x89, + 0x44, 0xac, 0x46, 0xf9, 0x65, 0x4f, 0xf7, 0x22, 0x62, 0x57, 0xed, 0x7d, 0x26, 0xfe, 0x05, 0x2f, + 0xea, 0x69, 0x10, 0x3d, 0x9e, 0xc3, 0x69, 0x98, 0xc6, 0x31, 0xc8, 0x5d, 0xb0, 0xcf, 0x0e, 0x89, + 0xff, 0xcb, 0x15, 0xcf, 0x41, 0x3e, 0xd7, 0x2d, 0x7f, 0xad, 0x91, 0xa8, 0xd0, 0x78, 0xf7, 0x23, + 0x60, 0xbe, 0xee, 0xdb, 0xbe, 0xa2, 0xdb, 0x56, 0x25, 0xaa, 0x17, 0x90, 0x19, 0xf2, 0x83, 0x31, + 0xc1, 0x8c, 0xd4, 0x32, 0x1d, 0xf6, 0x4f, 0x87, 0xd7, 0x97, 0x57, 0x87, 0xb3, 0x83, 0x7f, 0xb9, + 0x15, 0xea, 0x09, 0x2e, 0x32, 0xe4, 0x40, 0xff, 0xda, 0x0c, 0x93, 0x1e, 0xb5, 0xd9, 0x9c, 0x85, + 0x2d, 0xdc, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x5e, 0x7d, 0xb2, 0xc9, 0x96, 0x01, 0x00, 0x00, } diff --git a/vendor/google.golang.org/grpc/stress/grpc_testing/metrics.proto b/vendor/google.golang.org/grpc/stress/grpc_testing/metrics.proto index 1202b20..6950400 100644 --- a/vendor/google.golang.org/grpc/stress/grpc_testing/metrics.proto +++ b/vendor/google.golang.org/grpc/stress/grpc_testing/metrics.proto @@ -1,31 +1,16 @@ -// Copyright 2015-2016, Google Inc. -// All rights reserved. +// Copyright 2015-2016 gRPC authors. // -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: +// 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 // -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. +// http://www.apache.org/licenses/LICENSE-2.0 // -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// 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. // Contains the definitions for a metrics service and the type of metrics // exposed by the service. @@ -37,7 +22,7 @@ syntax = "proto3"; package grpc.testing; -// Reponse message containing the gauge name and value +// Response message containing the gauge name and value message GaugeResponse { string name = 1; oneof value { diff --git a/vendor/google.golang.org/grpc/stress/metrics_client/main.go b/vendor/google.golang.org/grpc/stress/metrics_client/main.go index 983a8ff..6405ec8 100644 --- a/vendor/google.golang.org/grpc/stress/metrics_client/main.go +++ b/vendor/google.golang.org/grpc/stress/metrics_client/main.go @@ -1,33 +1,18 @@ /* * - * Copyright 2016, Google Inc. - * All rights reserved. + * Copyright 2016 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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/google.golang.org/grpc/tap/tap.go b/vendor/google.golang.org/grpc/tap/tap.go index 0f36647..22b8fb5 100644 --- a/vendor/google.golang.org/grpc/tap/tap.go +++ b/vendor/google.golang.org/grpc/tap/tap.go @@ -1,33 +1,18 @@ /* * - * Copyright 2016, Google Inc. - * All rights reserved. + * Copyright 2016 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -47,8 +32,20 @@ type Info struct { // TODO: More to be added. } -// ServerInHandle defines the function which runs when a new stream is created -// on the server side. Note that it is executed in the per-connection I/O goroutine(s) instead -// of per-RPC goroutine. Therefore, users should NOT have any blocking/time-consuming -// work in this handle. Otherwise all the RPCs would slow down. +// ServerInHandle defines the function which runs before a new stream is created +// on the server side. If it returns a non-nil error, the stream will not be +// created and a RST_STREAM will be sent back to the client with REFUSED_STREAM. +// The client will receive an RPC error "code = Unavailable, desc = stream +// terminated by RST_STREAM with error code: REFUSED_STREAM". +// +// It's intended to be used in situations where you don't want to waste the +// resources to accept the new stream (e.g. rate-limiting). And the content of +// the error will be ignored and won't be sent back to the client. For other +// general usages, please use interceptors. +// +// Note that it is executed in the per-connection I/O goroutine(s) instead of +// per-RPC goroutine. Therefore, users should NOT have any +// blocking/time-consuming work in this handle. Otherwise all the RPCs would +// slow down. Also, for the same reason, this handle won't be called +// concurrently by gRPC. type ServerInHandle func(ctx context.Context, info *Info) (context.Context, error) diff --git a/vendor/google.golang.org/grpc/test/bufconn/bufconn.go b/vendor/google.golang.org/grpc/test/bufconn/bufconn.go new file mode 100644 index 0000000..bdb5d81 --- /dev/null +++ b/vendor/google.golang.org/grpc/test/bufconn/bufconn.go @@ -0,0 +1,244 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Package bufconn provides a net.Conn implemented by a buffer and related +// dialing and listening functionality. +package bufconn + +import ( + "fmt" + "io" + "net" + "sync" + "time" +) + +// Listener implements a net.Listener that creates local, buffered net.Conns +// via its Accept and Dial method. +type Listener struct { + mu sync.Mutex + sz int + ch chan net.Conn + done chan struct{} +} + +var errClosed = fmt.Errorf("Closed") + +// Listen returns a Listener that can only be contacted by its own Dialers and +// creates buffered connections between the two. +func Listen(sz int) *Listener { + return &Listener{sz: sz, ch: make(chan net.Conn), done: make(chan struct{})} +} + +// Accept blocks until Dial is called, then returns a net.Conn for the server +// half of the connection. +func (l *Listener) Accept() (net.Conn, error) { + select { + case <-l.done: + return nil, errClosed + case c := <-l.ch: + return c, nil + } +} + +// Close stops the listener. +func (l *Listener) Close() error { + l.mu.Lock() + defer l.mu.Unlock() + select { + case <-l.done: + // Already closed. + break + default: + close(l.done) + } + return nil +} + +// Addr reports the address of the listener. +func (l *Listener) Addr() net.Addr { return addr{} } + +// Dial creates an in-memory full-duplex network connection, unblocks Accept by +// providing it the server half of the connection, and returns the client half +// of the connection. +func (l *Listener) Dial() (net.Conn, error) { + p1, p2 := newPipe(l.sz), newPipe(l.sz) + select { + case <-l.done: + return nil, errClosed + case l.ch <- &conn{p1, p2}: + return &conn{p2, p1}, nil + } +} + +type pipe struct { + mu sync.Mutex + + // buf contains the data in the pipe. It is a ring buffer of fixed capacity, + // with r and w pointing to the offset to read and write, respsectively. + // + // Data is read between [r, w) and written to [w, r), wrapping around the end + // of the slice if necessary. + // + // The buffer is empty if r == len(buf), otherwise if r == w, it is full. + // + // w and r are always in the range [0, cap(buf)) and [0, len(buf)]. + buf []byte + w, r int + + wwait sync.Cond + rwait sync.Cond + + closed bool + writeClosed bool +} + +func newPipe(sz int) *pipe { + p := &pipe{buf: make([]byte, 0, sz)} + p.wwait.L = &p.mu + p.rwait.L = &p.mu + return p +} + +func (p *pipe) empty() bool { + return p.r == len(p.buf) +} + +func (p *pipe) full() bool { + return p.r < len(p.buf) && p.r == p.w +} + +func (p *pipe) Read(b []byte) (n int, err error) { + p.mu.Lock() + defer p.mu.Unlock() + // Block until p has data. + for { + if p.closed { + return 0, io.ErrClosedPipe + } + if !p.empty() { + break + } + if p.writeClosed { + return 0, io.EOF + } + p.rwait.Wait() + } + wasFull := p.full() + + n = copy(b, p.buf[p.r:len(p.buf)]) + p.r += n + if p.r == cap(p.buf) { + p.r = 0 + p.buf = p.buf[:p.w] + } + + // Signal a blocked writer, if any + if wasFull { + p.wwait.Signal() + } + + return n, nil +} + +func (p *pipe) Write(b []byte) (n int, err error) { + p.mu.Lock() + defer p.mu.Unlock() + if p.closed { + return 0, io.ErrClosedPipe + } + for len(b) > 0 { + // Block until p is not full. + for { + if p.closed || p.writeClosed { + return 0, io.ErrClosedPipe + } + if !p.full() { + break + } + p.wwait.Wait() + } + wasEmpty := p.empty() + + end := cap(p.buf) + if p.w < p.r { + end = p.r + } + x := copy(p.buf[p.w:end], b) + b = b[x:] + n += x + p.w += x + if p.w > len(p.buf) { + p.buf = p.buf[:p.w] + } + if p.w == cap(p.buf) { + p.w = 0 + } + + // Signal a blocked reader, if any. + if wasEmpty { + p.rwait.Signal() + } + } + return n, nil +} + +func (p *pipe) Close() error { + p.mu.Lock() + defer p.mu.Unlock() + p.closed = true + // Signal all blocked readers and writers to return an error. + p.rwait.Broadcast() + p.wwait.Broadcast() + return nil +} + +func (p *pipe) closeWrite() error { + p.mu.Lock() + defer p.mu.Unlock() + p.writeClosed = true + // Signal all blocked readers and writers to return an error. + p.rwait.Broadcast() + p.wwait.Broadcast() + return nil +} + +type conn struct { + io.Reader + io.Writer +} + +func (c *conn) Close() error { + err1 := c.Reader.(*pipe).Close() + err2 := c.Writer.(*pipe).closeWrite() + if err1 != nil { + return err1 + } + return err2 +} + +func (*conn) LocalAddr() net.Addr { return addr{} } +func (*conn) RemoteAddr() net.Addr { return addr{} } +func (c *conn) SetDeadline(t time.Time) error { return fmt.Errorf("unsupported") } +func (c *conn) SetReadDeadline(t time.Time) error { return fmt.Errorf("unsupported") } +func (c *conn) SetWriteDeadline(t time.Time) error { return fmt.Errorf("unsupported") } + +type addr struct{} + +func (addr) Network() string { return "bufconn" } +func (addr) String() string { return "bufconn" } diff --git a/vendor/google.golang.org/grpc/test/bufconn/bufconn_test.go b/vendor/google.golang.org/grpc/test/bufconn/bufconn_test.go new file mode 100644 index 0000000..65b4caa --- /dev/null +++ b/vendor/google.golang.org/grpc/test/bufconn/bufconn_test.go @@ -0,0 +1,199 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package bufconn + +import ( + "fmt" + "io" + "net" + "reflect" + "testing" + "time" +) + +func testRW(r io.Reader, w io.Writer) error { + for i := 0; i < 20; i++ { + d := make([]byte, i) + for j := 0; j < i; j++ { + d[j] = byte(i - j) + } + var rn int + var rerr error + b := make([]byte, i) + done := make(chan struct{}) + go func() { + for rn < len(b) && rerr == nil { + var x int + x, rerr = r.Read(b[rn:]) + rn += x + } + close(done) + }() + wn, werr := w.Write(d) + if wn != i || werr != nil { + return fmt.Errorf("%v: w.Write(%v) = %v, %v; want %v, nil", i, d, wn, werr, i) + } + select { + case <-done: + case <-time.After(500 * time.Millisecond): + return fmt.Errorf("%v: r.Read never returned", i) + } + if rn != i || rerr != nil { + return fmt.Errorf("%v: r.Read = %v, %v; want %v, nil", i, rn, rerr, i) + } + if !reflect.DeepEqual(b, d) { + return fmt.Errorf("%v: r.Read read %v; want %v", i, b, d) + } + } + return nil +} + +func TestPipe(t *testing.T) { + p := newPipe(10) + if err := testRW(p, p); err != nil { + t.Fatalf(err.Error()) + } +} + +func TestPipeClose(t *testing.T) { + p := newPipe(10) + p.Close() + if _, err := p.Write(nil); err != io.ErrClosedPipe { + t.Fatalf("p.Write = _, %v; want _, %v", err, io.ErrClosedPipe) + } + if _, err := p.Read(nil); err != io.ErrClosedPipe { + t.Fatalf("p.Read = _, %v; want _, %v", err, io.ErrClosedPipe) + } +} + +func TestConn(t *testing.T) { + p1, p2 := newPipe(10), newPipe(10) + c1, c2 := &conn{p1, p2}, &conn{p2, p1} + + if err := testRW(c1, c2); err != nil { + t.Fatalf(err.Error()) + } + if err := testRW(c2, c1); err != nil { + t.Fatalf(err.Error()) + } +} + +func TestConnCloseWithData(t *testing.T) { + lis := Listen(7) + errChan := make(chan error) + var lisConn net.Conn + go func() { + var err error + if lisConn, err = lis.Accept(); err != nil { + errChan <- err + } + close(errChan) + }() + dialConn, err := lis.Dial() + if err != nil { + t.Fatalf("Dial error: %v", err) + } + if err := <-errChan; err != nil { + t.Fatalf("Listen error: %v", err) + } + + // Write some data on both sides of the connection. + n, err := dialConn.Write([]byte("hello")) + if n != 5 || err != nil { + t.Fatalf("dialConn.Write([]byte{\"hello\"}) = %v, %v; want 5, ", n, err) + } + n, err = lisConn.Write([]byte("hello")) + if n != 5 || err != nil { + t.Fatalf("lisConn.Write([]byte{\"hello\"}) = %v, %v; want 5, ", n, err) + } + + // Close dial-side; writes from either side should fail. + dialConn.Close() + if _, err := lisConn.Write([]byte("hello")); err != io.ErrClosedPipe { + t.Fatalf("lisConn.Write() = _, ; want _, ") + } + if _, err := dialConn.Write([]byte("hello")); err != io.ErrClosedPipe { + t.Fatalf("dialConn.Write() = _, ; want _, ") + } + + // Read from both sides; reads on lisConn should work, but dialConn should + // fail. + buf := make([]byte, 6) + if _, err := dialConn.Read(buf); err != io.ErrClosedPipe { + t.Fatalf("dialConn.Read(buf) = %v, %v; want _, io.ErrClosedPipe", n, err) + } + n, err = lisConn.Read(buf) + if n != 5 || err != nil { + t.Fatalf("lisConn.Read(buf) = %v, %v; want 5, ", n, err) + } +} + +func TestListener(t *testing.T) { + l := Listen(7) + var s net.Conn + var serr error + done := make(chan struct{}) + go func() { + s, serr = l.Accept() + close(done) + }() + c, cerr := l.Dial() + <-done + if cerr != nil || serr != nil { + t.Fatalf("cerr = %v, serr = %v; want nil, nil", cerr, serr) + } + if err := testRW(c, s); err != nil { + t.Fatalf(err.Error()) + } + if err := testRW(s, c); err != nil { + t.Fatalf(err.Error()) + } +} + +func TestCloseWhileDialing(t *testing.T) { + l := Listen(7) + var c net.Conn + var err error + done := make(chan struct{}) + go func() { + c, err = l.Dial() + close(done) + }() + l.Close() + <-done + if c != nil || err != errClosed { + t.Fatalf("c, err = %v, %v; want nil, %v", c, err, errClosed) + } +} + +func TestCloseWhileAccepting(t *testing.T) { + l := Listen(7) + var c net.Conn + var err error + done := make(chan struct{}) + go func() { + c, err = l.Accept() + close(done) + }() + l.Close() + <-done + if c != nil || err != errClosed { + t.Fatalf("c, err = %v, %v; want nil, %v", c, err, errClosed) + } +} diff --git a/vendor/google.golang.org/grpc/test/codec_perf/perf.pb.go b/vendor/google.golang.org/grpc/test/codec_perf/perf.pb.go index c88756e..fb6fc5d 100644 --- a/vendor/google.golang.org/grpc/test/codec_perf/perf.pb.go +++ b/vendor/google.golang.org/grpc/test/codec_perf/perf.pb.go @@ -1,12 +1,11 @@ -// Code generated by protoc-gen-go. -// source: perf.proto -// DO NOT EDIT! +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: codec_perf/perf.proto /* Package codec_perf is a generated protocol buffer package. It is generated from these files: - perf.proto + codec_perf/perf.proto It has these top-level messages: Buffer @@ -31,8 +30,7 @@ const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package // Buffer is a message that contains a body of bytes that is used to exercise // encoding and decoding overheads. type Buffer struct { - Body []byte `protobuf:"bytes,1,opt,name=body" json:"body,omitempty"` - XXX_unrecognized []byte `json:"-"` + Body []byte `protobuf:"bytes,1,opt,name=body,proto3" json:"body,omitempty"` } func (m *Buffer) Reset() { *m = Buffer{} } @@ -51,13 +49,14 @@ func init() { proto.RegisterType((*Buffer)(nil), "codec.perf.Buffer") } -func init() { proto.RegisterFile("perf.proto", fileDescriptor0) } +func init() { proto.RegisterFile("codec_perf/perf.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 73 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xe2, 0x2a, 0x48, 0x2d, 0x4a, - 0xd3, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x4a, 0xce, 0x4f, 0x49, 0x4d, 0xd6, 0x03, 0x89, - 0x28, 0xc9, 0x70, 0xb1, 0x39, 0x95, 0xa6, 0xa5, 0xa5, 0x16, 0x09, 0x09, 0x71, 0xb1, 0x24, 0xe5, - 0xa7, 0x54, 0x4a, 0x30, 0x2a, 0x30, 0x6a, 0xf0, 0x04, 0x81, 0xd9, 0x80, 0x00, 0x00, 0x00, 0xff, - 0xff, 0x3a, 0x58, 0x92, 0x53, 0x36, 0x00, 0x00, 0x00, + // 83 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4d, 0xce, 0x4f, 0x49, + 0x4d, 0x8e, 0x2f, 0x48, 0x2d, 0x4a, 0xd3, 0x07, 0x11, 0x7a, 0x05, 0x45, 0xf9, 0x25, 0xf9, 0x42, + 0x5c, 0x60, 0x61, 0x3d, 0x90, 0x88, 0x92, 0x0c, 0x17, 0x9b, 0x53, 0x69, 0x5a, 0x5a, 0x6a, 0x91, + 0x90, 0x10, 0x17, 0x4b, 0x52, 0x7e, 0x4a, 0xa5, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0x4f, 0x10, 0x98, + 0x9d, 0xc4, 0x06, 0xd6, 0x60, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0xa3, 0x5f, 0x4f, 0x3c, 0x49, + 0x00, 0x00, 0x00, } diff --git a/vendor/google.golang.org/grpc/test/codec_perf/perf.proto b/vendor/google.golang.org/grpc/test/codec_perf/perf.proto index 4cf561f..594c6f0 100644 --- a/vendor/google.golang.org/grpc/test/codec_perf/perf.proto +++ b/vendor/google.golang.org/grpc/test/codec_perf/perf.proto @@ -1,11 +1,25 @@ +// Copyright 2017 gRPC authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + // Messages used for performance tests that may not reference grpc directly for // reasons of import cycles. -syntax = "proto2"; +syntax = "proto3"; package codec.perf; // Buffer is a message that contains a body of bytes that is used to exercise // encoding and decoding overheads. message Buffer { - optional bytes body = 1; + bytes body = 1; } diff --git a/vendor/google.golang.org/grpc/test/end2end_test.go b/vendor/google.golang.org/grpc/test/end2end_test.go index 52f8ce7..4a76352 100644 --- a/vendor/google.golang.org/grpc/test/end2end_test.go +++ b/vendor/google.golang.org/grpc/test/end2end_test.go @@ -1,36 +1,24 @@ /* * - * Copyright 2014, Google Inc. - * All rights reserved. + * Copyright 2014 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ +//go:generate protoc --go_out=plugins=grpc:. codec_perf/perf.proto +//go:generate protoc --go_out=plugins=grpc:. grpc_testing/test.proto + package test import ( @@ -40,15 +28,14 @@ import ( "flag" "fmt" "io" - "log" "math" "net" "os" "reflect" "runtime" - "sort" "strings" "sync" + "sync/atomic" "syscall" "testing" "time" @@ -59,17 +46,26 @@ import ( "golang.org/x/net/http2" spb "google.golang.org/genproto/googleapis/rpc/status" "google.golang.org/grpc" + "google.golang.org/grpc/balancer/roundrobin" "google.golang.org/grpc/codes" + "google.golang.org/grpc/connectivity" "google.golang.org/grpc/credentials" - "google.golang.org/grpc/grpclog" + _ "google.golang.org/grpc/encoding/gzip" + _ "google.golang.org/grpc/grpclog/glogger" "google.golang.org/grpc/health" healthpb "google.golang.org/grpc/health/grpc_health_v1" "google.golang.org/grpc/internal" "google.golang.org/grpc/metadata" "google.golang.org/grpc/peer" + "google.golang.org/grpc/resolver" + "google.golang.org/grpc/resolver/manual" + _ "google.golang.org/grpc/resolver/passthrough" + "google.golang.org/grpc/stats" "google.golang.org/grpc/status" "google.golang.org/grpc/tap" testpb "google.golang.org/grpc/test/grpc_testing" + "google.golang.org/grpc/test/leakcheck" + "google.golang.org/grpc/testdata" ) var ( @@ -109,7 +105,7 @@ var ( }) ) -var raceMode bool // set by race_test.go in race mode +var raceMode bool // set by race.go in race mode type testServer struct { security string // indicate the authentication protocol used by this server. @@ -117,6 +113,7 @@ type testServer struct { setAndSendHeader bool // whether to call setHeader and sendHeader. setHeaderOnly bool // whether to only call setHeader, not sendHeader. multipleSetTrailer bool // whether to call setTrailer multiple times. + unaryCallSleepTime time.Duration } func (s *testServer) EmptyCall(ctx context.Context, in *testpb.Empty) (*testpb.Empty, error) { @@ -148,7 +145,7 @@ func newPayload(t testpb.PayloadType, size int32) (*testpb.Payload, error) { return nil, fmt.Errorf("Unsupported payload type: %d", t) } return &testpb.Payload{ - Type: t.Enum(), + Type: t, Body: body, }, nil } @@ -157,42 +154,42 @@ func (s *testServer) UnaryCall(ctx context.Context, in *testpb.SimpleRequest) (* md, ok := metadata.FromIncomingContext(ctx) if ok { if _, exists := md[":authority"]; !exists { - return nil, grpc.Errorf(codes.DataLoss, "expected an :authority metadata: %v", md) + return nil, status.Errorf(codes.DataLoss, "expected an :authority metadata: %v", md) } if s.setAndSendHeader { if err := grpc.SetHeader(ctx, md); err != nil { - return nil, grpc.Errorf(grpc.Code(err), "grpc.SetHeader(_, %v) = %v, want ", md, err) + return nil, status.Errorf(status.Code(err), "grpc.SetHeader(_, %v) = %v, want ", md, err) } if err := grpc.SendHeader(ctx, testMetadata2); err != nil { - return nil, grpc.Errorf(grpc.Code(err), "grpc.SendHeader(_, %v) = %v, want ", testMetadata2, err) + return nil, status.Errorf(status.Code(err), "grpc.SendHeader(_, %v) = %v, want ", testMetadata2, err) } } else if s.setHeaderOnly { if err := grpc.SetHeader(ctx, md); err != nil { - return nil, grpc.Errorf(grpc.Code(err), "grpc.SetHeader(_, %v) = %v, want ", md, err) + return nil, status.Errorf(status.Code(err), "grpc.SetHeader(_, %v) = %v, want ", md, err) } if err := grpc.SetHeader(ctx, testMetadata2); err != nil { - return nil, grpc.Errorf(grpc.Code(err), "grpc.SetHeader(_, %v) = %v, want ", testMetadata2, err) + return nil, status.Errorf(status.Code(err), "grpc.SetHeader(_, %v) = %v, want ", testMetadata2, err) } } else { if err := grpc.SendHeader(ctx, md); err != nil { - return nil, grpc.Errorf(grpc.Code(err), "grpc.SendHeader(_, %v) = %v, want ", md, err) + return nil, status.Errorf(status.Code(err), "grpc.SendHeader(_, %v) = %v, want ", md, err) } } if err := grpc.SetTrailer(ctx, testTrailerMetadata); err != nil { - return nil, grpc.Errorf(grpc.Code(err), "grpc.SetTrailer(_, %v) = %v, want ", testTrailerMetadata, err) + return nil, status.Errorf(status.Code(err), "grpc.SetTrailer(_, %v) = %v, want ", testTrailerMetadata, err) } if s.multipleSetTrailer { if err := grpc.SetTrailer(ctx, testTrailerMetadata2); err != nil { - return nil, grpc.Errorf(grpc.Code(err), "grpc.SetTrailer(_, %v) = %v, want ", testTrailerMetadata2, err) + return nil, status.Errorf(status.Code(err), "grpc.SetTrailer(_, %v) = %v, want ", testTrailerMetadata2, err) } } } pr, ok := peer.FromContext(ctx) if !ok { - return nil, grpc.Errorf(codes.DataLoss, "failed to get peer from ctx") + return nil, status.Error(codes.DataLoss, "failed to get peer from ctx") } if pr.Addr == net.Addr(nil) { - return nil, grpc.Errorf(codes.DataLoss, "failed to get peer address") + return nil, status.Error(codes.DataLoss, "failed to get peer address") } if s.security != "" { // Check Auth info @@ -202,17 +199,17 @@ func (s *testServer) UnaryCall(ctx context.Context, in *testpb.SimpleRequest) (* authType = info.AuthType() serverName = info.State.ServerName default: - return nil, grpc.Errorf(codes.Unauthenticated, "Unknown AuthInfo type") + return nil, status.Error(codes.Unauthenticated, "Unknown AuthInfo type") } if authType != s.security { - return nil, grpc.Errorf(codes.Unauthenticated, "Wrong auth type: got %q, want %q", authType, s.security) + return nil, status.Errorf(codes.Unauthenticated, "Wrong auth type: got %q, want %q", authType, s.security) } if serverName != "x.test.youtube.com" { - return nil, grpc.Errorf(codes.Unauthenticated, "Unknown server name %q", serverName) + return nil, status.Errorf(codes.Unauthenticated, "Unknown server name %q", serverName) } } // Simulate some service delay. - time.Sleep(time.Second) + time.Sleep(s.unaryCallSleepTime) payload, err := newPayload(in.GetResponseType(), in.GetResponseSize()) if err != nil { @@ -227,12 +224,12 @@ func (s *testServer) UnaryCall(ctx context.Context, in *testpb.SimpleRequest) (* func (s *testServer) StreamingOutputCall(args *testpb.StreamingOutputCallRequest, stream testpb.TestService_StreamingOutputCallServer) error { if md, ok := metadata.FromIncomingContext(stream.Context()); ok { if _, exists := md[":authority"]; !exists { - return grpc.Errorf(codes.DataLoss, "expected an :authority metadata: %v", md) + return status.Errorf(codes.DataLoss, "expected an :authority metadata: %v", md) } // For testing purpose, returns an error if user-agent is failAppUA. // To test that client gets the correct error. if ua, ok := md["user-agent"]; !ok || strings.HasPrefix(ua[0], failAppUA) { - return grpc.Errorf(codes.DataLoss, "error for testing: "+failAppUA) + return status.Error(codes.DataLoss, "error for testing: "+failAppUA) } } cs := args.GetResponseParameters() @@ -261,7 +258,7 @@ func (s *testServer) StreamingInputCall(stream testpb.TestService_StreamingInput in, err := stream.Recv() if err == io.EOF { return stream.SendAndClose(&testpb.StreamingInputCallResponse{ - AggregatedPayloadSize: proto.Int32(int32(sum)), + AggregatedPayloadSize: int32(sum), }) } if err != nil { @@ -270,7 +267,7 @@ func (s *testServer) StreamingInputCall(stream testpb.TestService_StreamingInput p := in.GetPayload().GetBody() sum += len(p) if s.earlyFail { - return grpc.Errorf(codes.NotFound, "not found") + return status.Error(codes.NotFound, "not found") } } } @@ -280,21 +277,21 @@ func (s *testServer) FullDuplexCall(stream testpb.TestService_FullDuplexCallServ if ok { if s.setAndSendHeader { if err := stream.SetHeader(md); err != nil { - return grpc.Errorf(grpc.Code(err), "%v.SetHeader(_, %v) = %v, want ", stream, md, err) + return status.Errorf(status.Code(err), "%v.SetHeader(_, %v) = %v, want ", stream, md, err) } if err := stream.SendHeader(testMetadata2); err != nil { - return grpc.Errorf(grpc.Code(err), "%v.SendHeader(_, %v) = %v, want ", stream, testMetadata2, err) + return status.Errorf(status.Code(err), "%v.SendHeader(_, %v) = %v, want ", stream, testMetadata2, err) } } else if s.setHeaderOnly { if err := stream.SetHeader(md); err != nil { - return grpc.Errorf(grpc.Code(err), "%v.SetHeader(_, %v) = %v, want ", stream, md, err) + return status.Errorf(status.Code(err), "%v.SetHeader(_, %v) = %v, want ", stream, md, err) } if err := stream.SetHeader(testMetadata2); err != nil { - return grpc.Errorf(grpc.Code(err), "%v.SetHeader(_, %v) = %v, want ", stream, testMetadata2, err) + return status.Errorf(status.Code(err), "%v.SetHeader(_, %v) = %v, want ", stream, testMetadata2, err) } } else { if err := stream.SendHeader(md); err != nil { - return grpc.Errorf(grpc.Code(err), "%v.SendHeader(%v) = %v, want %v", stream, md, err, nil) + return status.Errorf(status.Code(err), "%v.SendHeader(%v) = %v, want %v", stream, md, err, nil) } } stream.SetTrailer(testTrailerMetadata) @@ -309,6 +306,10 @@ func (s *testServer) FullDuplexCall(stream testpb.TestService_FullDuplexCallServ return nil } if err != nil { + // to facilitate testSvrWriteStatusEarlyWrite + if status.Code(err) == codes.ResourceExhausted { + return status.Errorf(codes.Internal, "fake error for test testSvrWriteStatusEarlyWrite. true error: %s", err.Error()) + } return err } cs := in.GetResponseParameters() @@ -325,6 +326,10 @@ func (s *testServer) FullDuplexCall(stream testpb.TestService_FullDuplexCallServ if err := stream.Send(&testpb.StreamingOutputCallResponse{ Payload: payload, }); err != nil { + // to facilitate testSvrWriteStatusEarlyWrite + if status.Code(err) == codes.ResourceExhausted { + return status.Errorf(codes.Internal, "fake error for test testSvrWriteStatusEarlyWrite. true error: %s", err.Error()) + } return err } } @@ -366,14 +371,13 @@ func (s *testServer) HalfDuplexCall(stream testpb.TestService_HalfDuplexCallServ return nil } -const tlsDir = "testdata/" - type env struct { - name string - network string // The type of network such as tcp, unix, etc. - security string // The security protocol such as TLS, SSH, etc. - httpHandler bool // whether to use the http.Handler ServerTransport; requires TLS - balancer bool // whether to use balancer + name string + network string // The type of network such as tcp, unix, etc. + security string // The security protocol such as TLS, SSH, etc. + httpHandler bool // whether to use the http.Handler ServerTransport; requires TLS + balancer string // One of "round_robin", "pick_first", "v1", or "". + customDialer func(string, string, time.Duration) (net.Conn, error) } func (e env) runnable() bool { @@ -384,18 +388,20 @@ func (e env) runnable() bool { } func (e env) dialer(addr string, timeout time.Duration) (net.Conn, error) { + if e.customDialer != nil { + return e.customDialer(e.network, addr, timeout) + } return net.DialTimeout(e.network, addr, timeout) } var ( - tcpClearEnv = env{name: "tcp-clear", network: "tcp", balancer: true} - tcpTLSEnv = env{name: "tcp-tls", network: "tcp", security: "tls", balancer: true} - unixClearEnv = env{name: "unix-clear", network: "unix", balancer: true} - unixTLSEnv = env{name: "unix-tls", network: "unix", security: "tls", balancer: true} - handlerEnv = env{name: "handler-tls", network: "tcp", security: "tls", httpHandler: true, balancer: true} - noBalancerEnv = env{name: "no-balancer", network: "tcp", security: "tls", balancer: false} - // TODO add handlerEnv back when ServeHTTP is stable. - allEnv = []env{tcpClearEnv, tcpTLSEnv, unixClearEnv, unixTLSEnv /*handlerEnv,*/, noBalancerEnv} + tcpClearEnv = env{name: "tcp-clear-v1-balancer", network: "tcp", balancer: "v1"} + tcpTLSEnv = env{name: "tcp-tls-v1-balancer", network: "tcp", security: "tls", balancer: "v1"} + tcpClearRREnv = env{name: "tcp-clear", network: "tcp", balancer: "round_robin"} + tcpTLSRREnv = env{name: "tcp-tls", network: "tcp", security: "tls", balancer: "round_robin"} + handlerEnv = env{name: "handler-tls", network: "tcp", security: "tls", httpHandler: true, balancer: "round_robin"} + noBalancerEnv = env{name: "no-balancer", network: "tcp", security: "tls"} + allEnv = []env{tcpClearEnv, tcpTLSEnv, tcpClearRREnv, tcpTLSRREnv, handlerEnv, noBalancerEnv} ) var onlyEnv = flag.String("only_env", "", "If non-empty, one of 'tcp-clear', 'tcp-tls', 'unix-clear', 'unix-tls', or 'handler-tls' to only run the tests for that environment. Empty means all.") @@ -431,18 +437,24 @@ type test struct { cancel context.CancelFunc // Configurable knobs, after newTest returns: - testServer testpb.TestServiceServer // nil means none - healthServer *health.Server // nil means disabled - maxStream uint32 - tapHandle tap.ServerInHandle - maxMsgSize *int - maxClientReceiveMsgSize *int - maxClientSendMsgSize *int - maxServerReceiveMsgSize *int - maxServerSendMsgSize *int - userAgent string - clientCompression bool - serverCompression bool + testServer testpb.TestServiceServer // nil means none + healthServer *health.Server // nil means disabled + maxStream uint32 + tapHandle tap.ServerInHandle + maxMsgSize *int + maxClientReceiveMsgSize *int + maxClientSendMsgSize *int + maxServerReceiveMsgSize *int + maxServerSendMsgSize *int + userAgent string + // clientCompression and serverCompression are set to test the deprecated API + // WithCompressor and WithDecompressor. + clientCompression bool + serverCompression bool + // clientUseCompression is set to test the new compressor registration API UseCompressor. + clientUseCompression bool + // clientNopCompression is set to create a compressor whose type is not supported. + clientNopCompression bool unaryClientInt grpc.UnaryClientInterceptor streamClientInt grpc.StreamClientInterceptor unaryServerInt grpc.UnaryServerInterceptor @@ -455,6 +467,12 @@ type test struct { clientInitialWindowSize int32 clientInitialConnWindowSize int32 perRPCCreds credentials.PerRPCCredentials + customDialOptions []grpc.DialOption + resolverScheme string + + // All test dialing is blocking by default. Set this to true if dial + // should be non-blocking. + nonBlockingDial bool // srv and srvAddr are set once startServer is called. srv *grpc.Server @@ -546,13 +564,11 @@ func (te *test) startServer(ts testpb.TestServiceServer) { } switch te.e.security { case "tls": - creds, err := credentials.NewServerTLSFromFile(tlsDir+"server1.pem", tlsDir+"server1.key") + creds, err := credentials.NewServerTLSFromFile(testdata.Path("server1.pem"), testdata.Path("server1.key")) if err != nil { te.t.Fatalf("Failed to generate credentials %v", err) } sopts = append(sopts, grpc.Creds(creds)) - case "clientAlwaysFailCred": - sopts = append(sopts, grpc.Creds(clientAlwaysFailCred{})) case "clientTimeoutCreds": sopts = append(sopts, grpc.Creds(&clientTimeoutCreds{})) } @@ -585,14 +601,37 @@ func (te *test) startServer(ts testpb.TestServiceServer) { te.srvAddr = addr } -func (te *test) clientConn() *grpc.ClientConn { +type nopCompressor struct { + grpc.Compressor +} + +// NewNopCompressor creates a compressor to test the case that type is not supported. +func NewNopCompressor() grpc.Compressor { + return &nopCompressor{grpc.NewGZIPCompressor()} +} + +func (c *nopCompressor) Type() string { + return "nop" +} + +type nopDecompressor struct { + grpc.Decompressor +} + +// NewNopDecompressor creates a decompressor to test the case that type is not supported. +func NewNopDecompressor() grpc.Decompressor { + return &nopDecompressor{grpc.NewGZIPDecompressor()} +} + +func (d *nopDecompressor) Type() string { + return "nop" +} + +func (te *test) clientConn(opts ...grpc.DialOption) *grpc.ClientConn { if te.cc != nil { return te.cc } - opts := []grpc.DialOption{ - grpc.WithDialer(te.e.dialer), - grpc.WithUserAgent(te.userAgent), - } + opts = append(opts, grpc.WithDialer(te.e.dialer), grpc.WithUserAgent(te.userAgent)) if te.sc != nil { opts = append(opts, grpc.WithServiceConfig(te.sc)) @@ -604,6 +643,15 @@ func (te *test) clientConn() *grpc.ClientConn { grpc.WithDecompressor(grpc.NewGZIPDecompressor()), ) } + if te.clientUseCompression { + opts = append(opts, grpc.WithDefaultCallOptions(grpc.UseCompressor("gzip"))) + } + if te.clientNopCompression { + opts = append(opts, + grpc.WithCompressor(NewNopCompressor()), + grpc.WithDecompressor(NewNopDecompressor()), + ) + } if te.unaryClientInt != nil { opts = append(opts, grpc.WithUnaryInterceptor(te.unaryClientInt)) } @@ -621,20 +669,28 @@ func (te *test) clientConn() *grpc.ClientConn { } switch te.e.security { case "tls": - creds, err := credentials.NewClientTLSFromFile(tlsDir+"ca.pem", "x.test.youtube.com") + creds, err := credentials.NewClientTLSFromFile(testdata.Path("ca.pem"), "x.test.youtube.com") if err != nil { te.t.Fatalf("Failed to load credentials: %v", err) } opts = append(opts, grpc.WithTransportCredentials(creds)) - case "clientAlwaysFailCred": - opts = append(opts, grpc.WithTransportCredentials(clientAlwaysFailCred{})) case "clientTimeoutCreds": opts = append(opts, grpc.WithTransportCredentials(&clientTimeoutCreds{})) default: opts = append(opts, grpc.WithInsecure()) } - if te.e.balancer { + // TODO(bar) switch balancer case "pick_first". + var scheme string + if te.resolverScheme == "" { + scheme = "passthrough:///" + } else { + scheme = te.resolverScheme + ":///" + } + switch te.e.balancer { + case "v1": opts = append(opts, grpc.WithBalancer(grpc.RoundRobin(nil))) + case "round_robin": + opts = append(opts, grpc.WithBalancerName(roundrobin.Name)) } if te.clientInitialWindowSize > 0 { opts = append(opts, grpc.WithInitialWindowSize(te.clientInitialWindowSize)) @@ -646,12 +702,20 @@ func (te *test) clientConn() *grpc.ClientConn { opts = append(opts, grpc.WithPerRPCCredentials(te.perRPCCreds)) } if te.customCodec != nil { - opts = append(opts, grpc.WithCodec(te.customCodec)) + opts = append(opts, grpc.WithDefaultCallOptions(grpc.CallCustomCodec(te.customCodec))) + } + if !te.nonBlockingDial && te.srvAddr != "" { + // Only do a blocking dial if server is up. + opts = append(opts, grpc.WithBlock()) } + if te.srvAddr == "" { + te.srvAddr = "client.side.only.test" + } + opts = append(opts, te.customDialOptions...) var err error - te.cc, err = grpc.Dial(te.srvAddr, opts...) + te.cc, err = grpc.Dial(scheme+te.srvAddr, opts...) if err != nil { - te.t.Fatalf("Dial(%q) = %v", te.srvAddr, err) + te.t.Fatalf("Dial(%q) = %v", scheme+te.srvAddr, err) } return te.cc } @@ -677,8 +741,55 @@ func (te *test) withServerTester(fn func(st *serverTester)) { fn(st) } +type lazyConn struct { + net.Conn + beLazy int32 +} + +func (l *lazyConn) Write(b []byte) (int, error) { + if atomic.LoadInt32(&(l.beLazy)) == 1 { + // The sleep duration here needs to less than the leakCheck deadline. + time.Sleep(time.Second) + } + return l.Conn.Write(b) +} + +func TestContextDeadlineNotIgnored(t *testing.T) { + defer leakcheck.Check(t) + e := noBalancerEnv + var lc *lazyConn + e.customDialer = func(network, addr string, timeout time.Duration) (net.Conn, error) { + conn, err := net.DialTimeout(network, addr, timeout) + if err != nil { + return nil, err + } + lc = &lazyConn{Conn: conn} + return lc, nil + } + + te := newTest(t, e) + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + + cc := te.clientConn() + tc := testpb.NewTestServiceClient(cc) + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); err != nil { + t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want _, ", err) + } + atomic.StoreInt32(&(lc.beLazy), 1) + ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond) + defer cancel() + t1 := time.Now() + if _, err := tc.EmptyCall(ctx, &testpb.Empty{}); status.Code(err) != codes.DeadlineExceeded { + t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want _, context.DeadlineExceeded", err) + } + if time.Since(t1) > 2*time.Second { + t.Fatalf("TestService/EmptyCall(_, _) ran over the deadline") + } +} + func TestTimeoutOnDeadServer(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testTimeoutOnDeadServer(t, e) } @@ -686,6 +797,7 @@ func TestTimeoutOnDeadServer(t *testing.T) { func testTimeoutOnDeadServer(t *testing.T, e env) { te := newTest(t, e) + te.customDialOptions = []grpc.DialOption{grpc.WithWaitForHandshake()} te.userAgent = testAppUA te.declareLogNoise( "transport: http2Client.notifyError got notified that the client transport was broken EOF", @@ -701,9 +813,20 @@ func testTimeoutOnDeadServer(t *testing.T, e env) { t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want _, ", err) } te.srv.Stop() - ctx, _ := context.WithTimeout(context.Background(), time.Millisecond) + + // Wait for the client to notice the connection is gone. + ctx, cancel := context.WithTimeout(context.Background(), 500*time.Millisecond) + state := cc.GetState() + for ; state == connectivity.Ready && cc.WaitForStateChange(ctx, state); state = cc.GetState() { + } + cancel() + if state == connectivity.Ready { + t.Fatalf("Timed out waiting for non-ready state") + } + ctx, cancel = context.WithTimeout(context.Background(), time.Millisecond) _, err := tc.EmptyCall(ctx, &testpb.Empty{}, grpc.FailFast(false)) - if e.balancer && grpc.Code(err) != codes.DeadlineExceeded { + cancel() + if e.balancer != "" && status.Code(err) != codes.DeadlineExceeded { // If e.balancer == nil, the ac will stop reconnecting because the dialer returns non-temp error, // the error will be an internal error. t.Fatalf("TestService/EmptyCall(%v, _) = _, %v, want _, error code: %s", ctx, err, codes.DeadlineExceeded) @@ -712,7 +835,7 @@ func testTimeoutOnDeadServer(t *testing.T, e env) { } func TestServerGracefulStopIdempotent(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { if e.name == "handler-tls" { continue @@ -733,7 +856,7 @@ func testServerGracefulStopIdempotent(t *testing.T, e env) { } func TestServerGoAway(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { if e.name == "handler-tls" { continue @@ -761,14 +884,15 @@ func testServerGoAway(t *testing.T, e env) { }() // Loop until the server side GoAway signal is propagated to the client. for { - ctx, _ := context.WithTimeout(context.Background(), 10*time.Millisecond) - if _, err := tc.EmptyCall(ctx, &testpb.Empty{}, grpc.FailFast(false)); err == nil { - continue + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Millisecond) + if _, err := tc.EmptyCall(ctx, &testpb.Empty{}); err != nil && status.Code(err) != codes.DeadlineExceeded { + cancel() + break } - break + cancel() } // A new RPC should fail. - if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); grpc.Code(err) != codes.Unavailable && grpc.Code(err) != codes.Internal { + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); status.Code(err) != codes.Unavailable && status.Code(err) != codes.Internal { t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want _, %s or %s", err, codes.Unavailable, codes.Internal) } <-ch @@ -776,7 +900,7 @@ func testServerGoAway(t *testing.T, e env) { } func TestServerGoAwayPendingRPC(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { if e.name == "handler-tls" { continue @@ -798,7 +922,7 @@ func testServerGoAwayPendingRPC(t *testing.T, e env) { cc := te.clientConn() tc := testpb.NewTestServiceClient(cc) - ctx, cancel := context.WithCancel(context.Background()) + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) stream, err := tc.FullDuplexCall(ctx, grpc.FailFast(false)) if err != nil { t.Fatalf("%v.FullDuplexCall(_) = _, %v, want ", tc, err) @@ -813,24 +937,27 @@ func testServerGoAwayPendingRPC(t *testing.T, e env) { close(ch) }() // Loop until the server side GoAway signal is propagated to the client. - for { - ctx, _ := context.WithTimeout(context.Background(), 10*time.Millisecond) - if _, err := tc.EmptyCall(ctx, &testpb.Empty{}, grpc.FailFast(false)); err == nil { - continue + start := time.Now() + errored := false + for time.Since(start) < time.Second { + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Millisecond) + _, err := tc.EmptyCall(ctx, &testpb.Empty{}, grpc.FailFast(false)) + cancel() + if err != nil { + errored = true + break } - break } - respParam := []*testpb.ResponseParameters{ - { - Size: proto.Int32(1), - }, + if !errored { + t.Fatalf("GoAway never received by client") } + respParam := []*testpb.ResponseParameters{{Size: 1}} payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, int32(100)) if err != nil { t.Fatal(err) } req := &testpb.StreamingOutputCallRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseType: testpb.PayloadType_COMPRESSABLE, ResponseParameters: respParam, Payload: payload, } @@ -841,13 +968,14 @@ func testServerGoAwayPendingRPC(t *testing.T, e env) { if _, err := stream.Recv(); err != nil { t.Fatalf("%v.Recv() = _, %v, want _, ", stream, err) } + // The RPC will run until canceled. cancel() <-ch awaitNewConnLogOutput() } func TestServerMultipleGoAwayPendingRPC(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { if e.name == "handler-tls" { continue @@ -890,11 +1018,12 @@ func testServerMultipleGoAwayPendingRPC(t *testing.T, e env) { }() // Loop until the server side GoAway signal is propagated to the client. for { - ctx, _ := context.WithTimeout(context.Background(), 10*time.Millisecond) - if _, err := tc.EmptyCall(ctx, &testpb.Empty{}, grpc.FailFast(false)); err == nil { - continue + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Millisecond) + if _, err := tc.EmptyCall(ctx, &testpb.Empty{}, grpc.FailFast(false)); err != nil { + cancel() + break } - break + cancel() } select { case <-ch1: @@ -905,7 +1034,7 @@ func testServerMultipleGoAwayPendingRPC(t *testing.T, e env) { } respParam := []*testpb.ResponseParameters{ { - Size: proto.Int32(1), + Size: 1, }, } payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, int32(100)) @@ -913,7 +1042,7 @@ func testServerMultipleGoAwayPendingRPC(t *testing.T, e env) { t.Fatal(err) } req := &testpb.StreamingOutputCallRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseType: testpb.PayloadType_COMPRESSABLE, ResponseParameters: respParam, Payload: payload, } @@ -934,7 +1063,7 @@ func testServerMultipleGoAwayPendingRPC(t *testing.T, e env) { } func TestConcurrentClientConnCloseAndServerGoAway(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { if e.name == "handler-tls" { continue @@ -972,7 +1101,7 @@ func testConcurrentClientConnCloseAndServerGoAway(t *testing.T, e env) { } func TestConcurrentServerStopAndGoAway(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { if e.name == "handler-tls" { continue @@ -1009,17 +1138,18 @@ func testConcurrentServerStopAndGoAway(t *testing.T, e env) { }() // Loop until the server side GoAway signal is propagated to the client. for { - ctx, _ := context.WithTimeout(context.Background(), 10*time.Millisecond) - if _, err := tc.EmptyCall(ctx, &testpb.Empty{}, grpc.FailFast(false)); err == nil { - continue + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Millisecond) + if _, err := tc.EmptyCall(ctx, &testpb.Empty{}, grpc.FailFast(false)); err != nil { + cancel() + break } - break + cancel() } // Stop the server and close all the connections. te.srv.Stop() respParam := []*testpb.ResponseParameters{ { - Size: proto.Int32(1), + Size: 1, }, } payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, int32(100)) @@ -1027,21 +1157,33 @@ func testConcurrentServerStopAndGoAway(t *testing.T, e env) { t.Fatal(err) } req := &testpb.StreamingOutputCallRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseType: testpb.PayloadType_COMPRESSABLE, ResponseParameters: respParam, Payload: payload, } - if err := stream.Send(req); err == nil { - if _, err := stream.Recv(); err == nil { - t.Fatalf("%v.Recv() = _, %v, want _, ", stream, err) + sendStart := time.Now() + for { + if err := stream.Send(req); err == io.EOF { + // stream.Send should eventually send io.EOF + break + } else if err != nil { + // Send should never return a transport-level error. + t.Fatalf("stream.Send(%v) = %v; want ", req, err) } + if time.Since(sendStart) > 2*time.Second { + t.Fatalf("stream.Send(_) did not return io.EOF after 2s") + } + time.Sleep(time.Millisecond) + } + if _, err := stream.Recv(); err == nil || err == io.EOF { + t.Fatalf("%v.Recv() = _, %v, want _, ", stream, err) } <-ch awaitNewConnLogOutput() } func TestClientConnCloseAfterGoAwayWithActiveStream(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { if e.name == "handler-tls" { continue @@ -1057,7 +1199,9 @@ func testClientConnCloseAfterGoAwayWithActiveStream(t *testing.T, e env) { cc := te.clientConn() tc := testpb.NewTestServiceClient(cc) - if _, err := tc.FullDuplexCall(context.Background()); err != nil { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + if _, err := tc.FullDuplexCall(ctx); err != nil { t.Fatalf("%v.FullDuplexCall(_) = _, %v, want _, ", tc, err) } done := make(chan struct{}) @@ -1065,7 +1209,7 @@ func testClientConnCloseAfterGoAwayWithActiveStream(t *testing.T, e env) { te.srv.GracefulStop() close(done) }() - time.Sleep(time.Second) + time.Sleep(50 * time.Millisecond) cc.Close() timeout := time.NewTimer(time.Second) select { @@ -1076,7 +1220,7 @@ func testClientConnCloseAfterGoAwayWithActiveStream(t *testing.T, e env) { } func TestFailFast(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testFailFast(t, e) } @@ -1095,36 +1239,37 @@ func testFailFast(t *testing.T, e env) { cc := te.clientConn() tc := testpb.NewTestServiceClient(cc) - if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); err != nil { + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + if _, err := tc.EmptyCall(ctx, &testpb.Empty{}); err != nil { t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want _, ", err) } - // Stop the server and tear down all the exisiting connections. + // Stop the server and tear down all the existing connections. te.srv.Stop() // Loop until the server teardown is propagated to the client. for { - _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}) - if grpc.Code(err) == codes.Unavailable { + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + _, err := tc.EmptyCall(ctx, &testpb.Empty{}) + cancel() + if status.Code(err) == codes.Unavailable { break } - fmt.Printf("%v.EmptyCall(_, _) = _, %v", tc, err) + t.Logf("%v.EmptyCall(_, _) = _, %v", tc, err) time.Sleep(10 * time.Millisecond) } // The client keeps reconnecting and ongoing fail-fast RPCs should fail with code.Unavailable. - if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); grpc.Code(err) != codes.Unavailable { + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); status.Code(err) != codes.Unavailable { t.Fatalf("TestService/EmptyCall(_, _, _) = _, %v, want _, error code: %s", err, codes.Unavailable) } - if _, err := tc.StreamingInputCall(context.Background()); grpc.Code(err) != codes.Unavailable { + if _, err := tc.StreamingInputCall(context.Background()); status.Code(err) != codes.Unavailable { t.Fatalf("TestService/StreamingInputCall(_) = _, %v, want _, error code: %s", err, codes.Unavailable) } awaitNewConnLogOutput() } -func testServiceConfigSetup(t *testing.T, e env) (*test, chan grpc.ServiceConfig) { +func testServiceConfigSetup(t *testing.T, e env) *test { te := newTest(t, e) - // We write before read. - ch := make(chan grpc.ServiceConfig, 1) - te.sc = ch te.userAgent = testAppUA te.declareLogNoise( "transport: http2Client.notifyError got notified that the client transport was broken EOF", @@ -1132,7 +1277,7 @@ func testServiceConfigSetup(t *testing.T, e env) (*test, chan grpc.ServiceConfig "grpc: addrConn.resetTransport failed to create client transport: connection error", "Failed to dial : context canceled; please retry.", ) - return te, ch + return te } func newBool(b bool) (a *bool) { @@ -1149,197 +1294,275 @@ func newDuration(b time.Duration) (a *time.Duration) { return } -func TestServiceConfigGetMethodConfig(t *testing.T) { - defer leakCheck(t)() - for _, e := range listTestEnv() { - testGetMethodConfig(t, e) - } -} - -func testGetMethodConfig(t *testing.T, e env) { - te, ch := testServiceConfigSetup(t, e) +func TestGetMethodConfig(t *testing.T) { + te := testServiceConfigSetup(t, tcpClearRREnv) defer te.tearDown() + r, rcleanup := manual.GenerateAndRegisterManualResolver() + defer rcleanup() - mc1 := grpc.MethodConfig{ - WaitForReady: newBool(true), - Timeout: newDuration(time.Millisecond), - } - mc2 := grpc.MethodConfig{WaitForReady: newBool(false)} - m := make(map[string]grpc.MethodConfig) - m["/grpc.testing.TestService/EmptyCall"] = mc1 - m["/grpc.testing.TestService/"] = mc2 - sc := grpc.ServiceConfig{ - Methods: m, - } - ch <- sc - + te.resolverScheme = r.Scheme() cc := te.clientConn() + r.NewAddress([]resolver.Address{{Addr: te.srvAddr}}) + r.NewServiceConfig(`{ + "methodConfig": [ + { + "name": [ + { + "service": "grpc.testing.TestService", + "method": "EmptyCall" + } + ], + "waitForReady": true, + "timeout": ".001s" + }, + { + "name": [ + { + "service": "grpc.testing.TestService" + } + ], + "waitForReady": false + } + ] +}`) + tc := testpb.NewTestServiceClient(cc) + + // Make sure service config has been processed by grpc. + for { + if cc.GetMethodConfig("/grpc.testing.TestService/EmptyCall").WaitForReady != nil { + break + } + time.Sleep(time.Millisecond) + } + // The following RPCs are expected to become non-fail-fast ones with 1ms deadline. - if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); grpc.Code(err) != codes.DeadlineExceeded { + var err error + if _, err = tc.EmptyCall(context.Background(), &testpb.Empty{}); status.Code(err) != codes.DeadlineExceeded { t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want _, %s", err, codes.DeadlineExceeded) } - m = make(map[string]grpc.MethodConfig) - m["/grpc.testing.TestService/UnaryCall"] = mc1 - m["/grpc.testing.TestService/"] = mc2 - sc = grpc.ServiceConfig{ - Methods: m, - } - ch <- sc - // Wait for the new service config to propagate. + r.NewServiceConfig(`{ + "methodConfig": [ + { + "name": [ + { + "service": "grpc.testing.TestService", + "method": "UnaryCall" + } + ], + "waitForReady": true, + "timeout": ".001s" + }, + { + "name": [ + { + "service": "grpc.testing.TestService" + } + ], + "waitForReady": false + } + ] +}`) + + // Make sure service config has been processed by grpc. for { - if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); grpc.Code(err) == codes.DeadlineExceeded { - continue + if mc := cc.GetMethodConfig("/grpc.testing.TestService/EmptyCall"); mc.WaitForReady != nil && !*mc.WaitForReady { + break } - break + time.Sleep(time.Millisecond) } // The following RPCs are expected to become fail-fast. - if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); grpc.Code(err) != codes.Unavailable { + if _, err = tc.EmptyCall(context.Background(), &testpb.Empty{}); status.Code(err) != codes.Unavailable { t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want _, %s", err, codes.Unavailable) } } func TestServiceConfigWaitForReady(t *testing.T) { - defer leakCheck(t)() - for _, e := range listTestEnv() { - testServiceConfigWaitForReady(t, e) - } -} - -func testServiceConfigWaitForReady(t *testing.T, e env) { - te, ch := testServiceConfigSetup(t, e) + te := testServiceConfigSetup(t, tcpClearRREnv) defer te.tearDown() + r, rcleanup := manual.GenerateAndRegisterManualResolver() + defer rcleanup() // Case1: Client API set failfast to be false, and service config set wait_for_ready to be false, Client API should win, and the rpc will wait until deadline exceeds. - mc := grpc.MethodConfig{ - WaitForReady: newBool(false), - Timeout: newDuration(time.Millisecond), - } - m := make(map[string]grpc.MethodConfig) - m["/grpc.testing.TestService/EmptyCall"] = mc - m["/grpc.testing.TestService/FullDuplexCall"] = mc - sc := grpc.ServiceConfig{ - Methods: m, - } - ch <- sc - + te.resolverScheme = r.Scheme() cc := te.clientConn() + r.NewAddress([]resolver.Address{{Addr: te.srvAddr}}) + r.NewServiceConfig(`{ + "methodConfig": [ + { + "name": [ + { + "service": "grpc.testing.TestService", + "method": "EmptyCall" + }, + { + "service": "grpc.testing.TestService", + "method": "FullDuplexCall" + } + ], + "waitForReady": false, + "timeout": ".001s" + } + ] +}`) + tc := testpb.NewTestServiceClient(cc) + + // Make sure service config has been processed by grpc. + for { + if cc.GetMethodConfig("/grpc.testing.TestService/FullDuplexCall").WaitForReady != nil { + break + } + time.Sleep(time.Millisecond) + } + // The following RPCs are expected to become non-fail-fast ones with 1ms deadline. - if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}, grpc.FailFast(false)); grpc.Code(err) != codes.DeadlineExceeded { + var err error + if _, err = tc.EmptyCall(context.Background(), &testpb.Empty{}, grpc.FailFast(false)); status.Code(err) != codes.DeadlineExceeded { t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want _, %s", err, codes.DeadlineExceeded) } - if _, err := tc.FullDuplexCall(context.Background(), grpc.FailFast(false)); grpc.Code(err) != codes.DeadlineExceeded { + if _, err := tc.FullDuplexCall(context.Background(), grpc.FailFast(false)); status.Code(err) != codes.DeadlineExceeded { t.Fatalf("TestService/FullDuplexCall(_) = _, %v, want %s", err, codes.DeadlineExceeded) } // Generate a service config update. - // Case2: Client API does not set failfast, and service config set wait_for_ready to be true, and the rpc will wait until deadline exceeds. - mc.WaitForReady = newBool(true) - m = make(map[string]grpc.MethodConfig) - m["/grpc.testing.TestService/EmptyCall"] = mc - m["/grpc.testing.TestService/FullDuplexCall"] = mc - sc = grpc.ServiceConfig{ - Methods: m, - } - ch <- sc + // Case2:Client API set failfast to be false, and service config set wait_for_ready to be true, and the rpc will wait until deadline exceeds. + r.NewServiceConfig(`{ + "methodConfig": [ + { + "name": [ + { + "service": "grpc.testing.TestService", + "method": "EmptyCall" + }, + { + "service": "grpc.testing.TestService", + "method": "FullDuplexCall" + } + ], + "waitForReady": true, + "timeout": ".001s" + } + ] +}`) // Wait for the new service config to take effect. - mc = cc.GetMethodConfig("/grpc.testing.TestService/EmptyCall") for { - if !*mc.WaitForReady { - time.Sleep(100 * time.Millisecond) - mc = cc.GetMethodConfig("/grpc.testing.TestService/EmptyCall") - continue + if mc := cc.GetMethodConfig("/grpc.testing.TestService/EmptyCall"); mc.WaitForReady != nil && *mc.WaitForReady { + break } - break + time.Sleep(time.Millisecond) } // The following RPCs are expected to become non-fail-fast ones with 1ms deadline. - if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); grpc.Code(err) != codes.DeadlineExceeded { + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); status.Code(err) != codes.DeadlineExceeded { t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want _, %s", err, codes.DeadlineExceeded) } - if _, err := tc.FullDuplexCall(context.Background()); grpc.Code(err) != codes.DeadlineExceeded { + if _, err := tc.FullDuplexCall(context.Background()); status.Code(err) != codes.DeadlineExceeded { t.Fatalf("TestService/FullDuplexCall(_) = _, %v, want %s", err, codes.DeadlineExceeded) } } func TestServiceConfigTimeout(t *testing.T) { - defer leakCheck(t)() - for _, e := range listTestEnv() { - testServiceConfigTimeout(t, e) - } -} - -func testServiceConfigTimeout(t *testing.T, e env) { - te, ch := testServiceConfigSetup(t, e) + te := testServiceConfigSetup(t, tcpClearRREnv) defer te.tearDown() + r, rcleanup := manual.GenerateAndRegisterManualResolver() + defer rcleanup() // Case1: Client API sets timeout to be 1ns and ServiceConfig sets timeout to be 1hr. Timeout should be 1ns (min of 1ns and 1hr) and the rpc will wait until deadline exceeds. - mc := grpc.MethodConfig{ - Timeout: newDuration(time.Hour), - } - m := make(map[string]grpc.MethodConfig) - m["/grpc.testing.TestService/EmptyCall"] = mc - m["/grpc.testing.TestService/FullDuplexCall"] = mc - sc := grpc.ServiceConfig{ - Methods: m, - } - ch <- sc - + te.resolverScheme = r.Scheme() cc := te.clientConn() + r.NewAddress([]resolver.Address{{Addr: te.srvAddr}}) + r.NewServiceConfig(`{ + "methodConfig": [ + { + "name": [ + { + "service": "grpc.testing.TestService", + "method": "EmptyCall" + }, + { + "service": "grpc.testing.TestService", + "method": "FullDuplexCall" + } + ], + "waitForReady": true, + "timeout": "3600s" + } + ] +}`) + tc := testpb.NewTestServiceClient(cc) + + // Make sure service config has been processed by grpc. + for { + if cc.GetMethodConfig("/grpc.testing.TestService/FullDuplexCall").Timeout != nil { + break + } + time.Sleep(time.Millisecond) + } + // The following RPCs are expected to become non-fail-fast ones with 1ns deadline. - ctx, _ := context.WithTimeout(context.Background(), time.Nanosecond) - if _, err := tc.EmptyCall(ctx, &testpb.Empty{}, grpc.FailFast(false)); grpc.Code(err) != codes.DeadlineExceeded { + var err error + ctx, cancel := context.WithTimeout(context.Background(), time.Nanosecond) + if _, err = tc.EmptyCall(ctx, &testpb.Empty{}, grpc.FailFast(false)); status.Code(err) != codes.DeadlineExceeded { t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want _, %s", err, codes.DeadlineExceeded) } - ctx, _ = context.WithTimeout(context.Background(), time.Nanosecond) - if _, err := tc.FullDuplexCall(ctx, grpc.FailFast(false)); grpc.Code(err) != codes.DeadlineExceeded { + cancel() + + ctx, cancel = context.WithTimeout(context.Background(), time.Nanosecond) + if _, err = tc.FullDuplexCall(ctx, grpc.FailFast(false)); status.Code(err) != codes.DeadlineExceeded { t.Fatalf("TestService/FullDuplexCall(_) = _, %v, want %s", err, codes.DeadlineExceeded) } + cancel() // Generate a service config update. // Case2: Client API sets timeout to be 1hr and ServiceConfig sets timeout to be 1ns. Timeout should be 1ns (min of 1ns and 1hr) and the rpc will wait until deadline exceeds. - mc.Timeout = newDuration(time.Nanosecond) - m = make(map[string]grpc.MethodConfig) - m["/grpc.testing.TestService/EmptyCall"] = mc - m["/grpc.testing.TestService/FullDuplexCall"] = mc - sc = grpc.ServiceConfig{ - Methods: m, - } - ch <- sc + r.NewServiceConfig(`{ + "methodConfig": [ + { + "name": [ + { + "service": "grpc.testing.TestService", + "method": "EmptyCall" + }, + { + "service": "grpc.testing.TestService", + "method": "FullDuplexCall" + } + ], + "waitForReady": true, + "timeout": ".000000001s" + } + ] +}`) // Wait for the new service config to take effect. - mc = cc.GetMethodConfig("/grpc.testing.TestService/FullDuplexCall") for { - if *mc.Timeout != time.Nanosecond { - time.Sleep(100 * time.Millisecond) - mc = cc.GetMethodConfig("/grpc.testing.TestService/FullDuplexCall") - continue + if mc := cc.GetMethodConfig("/grpc.testing.TestService/FullDuplexCall"); mc.Timeout != nil && *mc.Timeout == time.Nanosecond { + break } - break + time.Sleep(time.Millisecond) } - ctx, _ = context.WithTimeout(context.Background(), time.Hour) - if _, err := tc.EmptyCall(ctx, &testpb.Empty{}, grpc.FailFast(false)); grpc.Code(err) != codes.DeadlineExceeded { + ctx, cancel = context.WithTimeout(context.Background(), time.Hour) + if _, err = tc.EmptyCall(ctx, &testpb.Empty{}, grpc.FailFast(false)); status.Code(err) != codes.DeadlineExceeded { t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want _, %s", err, codes.DeadlineExceeded) } + cancel() - ctx, _ = context.WithTimeout(context.Background(), time.Hour) - if _, err := tc.FullDuplexCall(ctx, grpc.FailFast(false)); grpc.Code(err) != codes.DeadlineExceeded { + ctx, cancel = context.WithTimeout(context.Background(), time.Hour) + if _, err = tc.FullDuplexCall(ctx, grpc.FailFast(false)); status.Code(err) != codes.DeadlineExceeded { t.Fatalf("TestService/FullDuplexCall(_) = _, %v, want %s", err, codes.DeadlineExceeded) } + cancel() } func TestServiceConfigMaxMsgSize(t *testing.T) { - defer leakCheck(t)() - for _, e := range listTestEnv() { - testServiceConfigMaxMsgSize(t, e) - } -} + e := tcpClearRREnv + r, rcleanup := manual.GenerateAndRegisterManualResolver() + defer rcleanup() -func testServiceConfigMaxMsgSize(t *testing.T, e env) { // Setting up values and objects shared across all test cases. const smallSize = 1 const largeSize = 1024 @@ -1358,50 +1581,71 @@ func testServiceConfigMaxMsgSize(t *testing.T, e env) { t.Fatal(err) } - mc := grpc.MethodConfig{ - MaxReqSize: newInt(extraLargeSize), - MaxRespSize: newInt(extraLargeSize), - } + scjs := `{ + "methodConfig": [ + { + "name": [ + { + "service": "grpc.testing.TestService", + "method": "UnaryCall" + }, + { + "service": "grpc.testing.TestService", + "method": "FullDuplexCall" + } + ], + "maxRequestMessageBytes": 2048, + "maxResponseMessageBytes": 2048 + } + ] +}` - m := make(map[string]grpc.MethodConfig) - m["/grpc.testing.TestService/UnaryCall"] = mc - m["/grpc.testing.TestService/FullDuplexCall"] = mc - sc := grpc.ServiceConfig{ - Methods: m, - } // Case1: sc set maxReqSize to 2048 (send), maxRespSize to 2048 (recv). - te1, ch1 := testServiceConfigSetup(t, e) - te1.startServer(&testServer{security: e.security}) + te1 := testServiceConfigSetup(t, e) defer te1.tearDown() - ch1 <- sc - tc := testpb.NewTestServiceClient(te1.clientConn()) + te1.resolverScheme = r.Scheme() + te1.nonBlockingDial = true + te1.startServer(&testServer{security: e.security}) + cc1 := te1.clientConn() + + r.NewAddress([]resolver.Address{{Addr: te1.srvAddr}}) + r.NewServiceConfig(scjs) + tc := testpb.NewTestServiceClient(cc1) req := &testpb.SimpleRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), - ResponseSize: proto.Int32(int32(extraLargeSize)), + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseSize: int32(extraLargeSize), Payload: smallPayload, } + + for { + if cc1.GetMethodConfig("/grpc.testing.TestService/FullDuplexCall").MaxReqSize != nil { + break + } + time.Sleep(time.Millisecond) + } + // Test for unary RPC recv. - if _, err := tc.UnaryCall(context.Background(), req); err == nil || grpc.Code(err) != codes.ResourceExhausted { + if _, err = tc.UnaryCall(context.Background(), req, grpc.FailFast(false)); err == nil || status.Code(err) != codes.ResourceExhausted { t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want _, error code: %s", err, codes.ResourceExhausted) } // Test for unary RPC send. req.Payload = extraLargePayload - req.ResponseSize = proto.Int32(int32(smallSize)) - if _, err := tc.UnaryCall(context.Background(), req); err == nil || grpc.Code(err) != codes.ResourceExhausted { + req.ResponseSize = int32(smallSize) + if _, err := tc.UnaryCall(context.Background(), req); err == nil || status.Code(err) != codes.ResourceExhausted { t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want _, error code: %s", err, codes.ResourceExhausted) } // Test for streaming RPC recv. respParam := []*testpb.ResponseParameters{ { - Size: proto.Int32(int32(extraLargeSize)), + Size: int32(extraLargeSize), }, } sreq := &testpb.StreamingOutputCallRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseType: testpb.PayloadType_COMPRESSABLE, ResponseParameters: respParam, Payload: smallPayload, } @@ -1409,104 +1653,129 @@ func testServiceConfigMaxMsgSize(t *testing.T, e env) { if err != nil { t.Fatalf("%v.FullDuplexCall(_) = _, %v, want ", tc, err) } - if err := stream.Send(sreq); err != nil { + if err = stream.Send(sreq); err != nil { t.Fatalf("%v.Send(%v) = %v, want ", stream, sreq, err) } - if _, err := stream.Recv(); err == nil || grpc.Code(err) != codes.ResourceExhausted { + if _, err = stream.Recv(); err == nil || status.Code(err) != codes.ResourceExhausted { t.Fatalf("%v.Recv() = _, %v, want _, error code: %s", stream, err, codes.ResourceExhausted) } // Test for streaming RPC send. - respParam[0].Size = proto.Int32(int32(smallSize)) + respParam[0].Size = int32(smallSize) sreq.Payload = extraLargePayload stream, err = tc.FullDuplexCall(te1.ctx) if err != nil { t.Fatalf("%v.FullDuplexCall(_) = _, %v, want ", tc, err) } - if err := stream.Send(sreq); err == nil || grpc.Code(err) != codes.ResourceExhausted { + if err = stream.Send(sreq); err == nil || status.Code(err) != codes.ResourceExhausted { t.Fatalf("%v.Send(%v) = %v, want _, error code: %s", stream, sreq, err, codes.ResourceExhausted) } // Case2: Client API set maxReqSize to 1024 (send), maxRespSize to 1024 (recv). Sc sets maxReqSize to 2048 (send), maxRespSize to 2048 (recv). - te2, ch2 := testServiceConfigSetup(t, e) + te2 := testServiceConfigSetup(t, e) + te2.resolverScheme = r.Scheme() + te2.nonBlockingDial = true te2.maxClientReceiveMsgSize = newInt(1024) te2.maxClientSendMsgSize = newInt(1024) + te2.startServer(&testServer{security: e.security}) defer te2.tearDown() - ch2 <- sc - tc = testpb.NewTestServiceClient(te2.clientConn()) + cc2 := te2.clientConn() + r.NewAddress([]resolver.Address{{Addr: te2.srvAddr}}) + r.NewServiceConfig(scjs) + tc = testpb.NewTestServiceClient(cc2) + + for { + if cc2.GetMethodConfig("/grpc.testing.TestService/FullDuplexCall").MaxReqSize != nil { + break + } + time.Sleep(time.Millisecond) + } // Test for unary RPC recv. req.Payload = smallPayload - req.ResponseSize = proto.Int32(int32(largeSize)) + req.ResponseSize = int32(largeSize) - if _, err := tc.UnaryCall(context.Background(), req); err == nil || grpc.Code(err) != codes.ResourceExhausted { + if _, err = tc.UnaryCall(context.Background(), req, grpc.FailFast(false)); err == nil || status.Code(err) != codes.ResourceExhausted { t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want _, error code: %s", err, codes.ResourceExhausted) } // Test for unary RPC send. req.Payload = largePayload - req.ResponseSize = proto.Int32(int32(smallSize)) - if _, err := tc.UnaryCall(context.Background(), req); err == nil || grpc.Code(err) != codes.ResourceExhausted { + req.ResponseSize = int32(smallSize) + if _, err := tc.UnaryCall(context.Background(), req); err == nil || status.Code(err) != codes.ResourceExhausted { t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want _, error code: %s", err, codes.ResourceExhausted) } // Test for streaming RPC recv. stream, err = tc.FullDuplexCall(te2.ctx) - respParam[0].Size = proto.Int32(int32(largeSize)) + respParam[0].Size = int32(largeSize) sreq.Payload = smallPayload if err != nil { t.Fatalf("%v.FullDuplexCall(_) = _, %v, want ", tc, err) } - if err := stream.Send(sreq); err != nil { + if err = stream.Send(sreq); err != nil { t.Fatalf("%v.Send(%v) = %v, want ", stream, sreq, err) } - if _, err := stream.Recv(); err == nil || grpc.Code(err) != codes.ResourceExhausted { + if _, err = stream.Recv(); err == nil || status.Code(err) != codes.ResourceExhausted { t.Fatalf("%v.Recv() = _, %v, want _, error code: %s", stream, err, codes.ResourceExhausted) } // Test for streaming RPC send. - respParam[0].Size = proto.Int32(int32(smallSize)) + respParam[0].Size = int32(smallSize) sreq.Payload = largePayload stream, err = tc.FullDuplexCall(te2.ctx) if err != nil { t.Fatalf("%v.FullDuplexCall(_) = _, %v, want ", tc, err) } - if err := stream.Send(sreq); err == nil || grpc.Code(err) != codes.ResourceExhausted { + if err = stream.Send(sreq); err == nil || status.Code(err) != codes.ResourceExhausted { t.Fatalf("%v.Send(%v) = %v, want _, error code: %s", stream, sreq, err, codes.ResourceExhausted) } // Case3: Client API set maxReqSize to 4096 (send), maxRespSize to 4096 (recv). Sc sets maxReqSize to 2048 (send), maxRespSize to 2048 (recv). - te3, ch3 := testServiceConfigSetup(t, e) + te3 := testServiceConfigSetup(t, e) + te3.resolverScheme = r.Scheme() + te3.nonBlockingDial = true te3.maxClientReceiveMsgSize = newInt(4096) te3.maxClientSendMsgSize = newInt(4096) + te3.startServer(&testServer{security: e.security}) defer te3.tearDown() - ch3 <- sc - tc = testpb.NewTestServiceClient(te3.clientConn()) + + cc3 := te3.clientConn() + r.NewAddress([]resolver.Address{{Addr: te3.srvAddr}}) + r.NewServiceConfig(scjs) + tc = testpb.NewTestServiceClient(cc3) + + for { + if cc3.GetMethodConfig("/grpc.testing.TestService/FullDuplexCall").MaxReqSize != nil { + break + } + time.Sleep(time.Millisecond) + } // Test for unary RPC recv. req.Payload = smallPayload - req.ResponseSize = proto.Int32(int32(largeSize)) + req.ResponseSize = int32(largeSize) - if _, err := tc.UnaryCall(context.Background(), req); err != nil { + if _, err = tc.UnaryCall(context.Background(), req, grpc.FailFast(false)); err != nil { t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want ", err) } - req.ResponseSize = proto.Int32(int32(extraLargeSize)) - if _, err := tc.UnaryCall(context.Background(), req); err == nil || grpc.Code(err) != codes.ResourceExhausted { + req.ResponseSize = int32(extraLargeSize) + if _, err := tc.UnaryCall(context.Background(), req); err == nil || status.Code(err) != codes.ResourceExhausted { t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want _, error code: %s", err, codes.ResourceExhausted) } // Test for unary RPC send. req.Payload = largePayload - req.ResponseSize = proto.Int32(int32(smallSize)) + req.ResponseSize = int32(smallSize) if _, err := tc.UnaryCall(context.Background(), req); err != nil { t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want ", err) } req.Payload = extraLargePayload - if _, err := tc.UnaryCall(context.Background(), req); err == nil || grpc.Code(err) != codes.ResourceExhausted { + if _, err = tc.UnaryCall(context.Background(), req); err == nil || status.Code(err) != codes.ResourceExhausted { t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want _, error code: %s", err, codes.ResourceExhausted) } @@ -1515,27 +1784,27 @@ func testServiceConfigMaxMsgSize(t *testing.T, e env) { if err != nil { t.Fatalf("%v.FullDuplexCall(_) = _, %v, want ", tc, err) } - respParam[0].Size = proto.Int32(int32(largeSize)) + respParam[0].Size = int32(largeSize) sreq.Payload = smallPayload - if err := stream.Send(sreq); err != nil { + if err = stream.Send(sreq); err != nil { t.Fatalf("%v.Send(%v) = %v, want ", stream, sreq, err) } - if _, err := stream.Recv(); err != nil { + if _, err = stream.Recv(); err != nil { t.Fatalf("%v.Recv() = _, %v, want ", stream, err) } - respParam[0].Size = proto.Int32(int32(extraLargeSize)) + respParam[0].Size = int32(extraLargeSize) - if err := stream.Send(sreq); err != nil { + if err = stream.Send(sreq); err != nil { t.Fatalf("%v.Send(%v) = %v, want ", stream, sreq, err) } - if _, err := stream.Recv(); err == nil || grpc.Code(err) != codes.ResourceExhausted { + if _, err = stream.Recv(); err == nil || status.Code(err) != codes.ResourceExhausted { t.Fatalf("%v.Recv() = _, %v, want _, error code: %s", stream, err, codes.ResourceExhausted) } // Test for streaming RPC send. - respParam[0].Size = proto.Int32(int32(smallSize)) + respParam[0].Size = int32(smallSize) sreq.Payload = largePayload stream, err = tc.FullDuplexCall(te3.ctx) if err != nil { @@ -1545,13 +1814,87 @@ func testServiceConfigMaxMsgSize(t *testing.T, e env) { t.Fatalf("%v.Send(%v) = %v, want ", stream, sreq, err) } sreq.Payload = extraLargePayload - if err := stream.Send(sreq); err == nil || grpc.Code(err) != codes.ResourceExhausted { + if err := stream.Send(sreq); err == nil || status.Code(err) != codes.ResourceExhausted { t.Fatalf("%v.Send(%v) = %v, want _, error code: %s", stream, sreq, err, codes.ResourceExhausted) } } +// Reading from a streaming RPC may fail with context canceled if timeout was +// set by service config (https://github.com/grpc/grpc-go/issues/1818). This +// test makes sure read from streaming RPC doesn't fail in this case. +func TestStreamingRPCWithTimeoutInServiceConfigRecv(t *testing.T) { + te := testServiceConfigSetup(t, tcpClearRREnv) + te.startServer(&testServer{security: tcpClearRREnv.security}) + defer te.tearDown() + r, rcleanup := manual.GenerateAndRegisterManualResolver() + defer rcleanup() + + te.resolverScheme = r.Scheme() + te.nonBlockingDial = true + fmt.Println("1") + cc := te.clientConn() + fmt.Println("10") + tc := testpb.NewTestServiceClient(cc) + + r.NewAddress([]resolver.Address{{Addr: te.srvAddr}}) + r.NewServiceConfig(`{ + "methodConfig": [ + { + "name": [ + { + "service": "grpc.testing.TestService", + "method": "FullDuplexCall" + } + ], + "waitForReady": true, + "timeout": "10s" + } + ] + }`) + // Make sure service config has been processed by grpc. + for { + if cc.GetMethodConfig("/grpc.testing.TestService/FullDuplexCall").Timeout != nil { + break + } + time.Sleep(time.Millisecond) + } + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + stream, err := tc.FullDuplexCall(ctx, grpc.FailFast(false)) + if err != nil { + t.Fatalf("TestService/FullDuplexCall(_) = _, %v, want ", err) + } + + payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, 0) + if err != nil { + t.Fatalf("failed to newPayload: %v", err) + } + req := &testpb.StreamingOutputCallRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseParameters: []*testpb.ResponseParameters{{Size: 0}}, + Payload: payload, + } + if err := stream.Send(req); err != nil { + t.Fatalf("stream.Send(%v) = %v, want ", req, err) + } + stream.CloseSend() + time.Sleep(time.Second) + // Sleep 1 second before recv to make sure the final status is received + // before the recv. + if _, err := stream.Recv(); err != nil { + t.Fatalf("stream.Recv = _, %v, want _, ", err) + } + // Keep reading to drain the stream. + for { + if _, err := stream.Recv(); err != nil { + break + } + } +} + func TestMaxMsgSizeClientDefault(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testMaxMsgSizeClientDefault(t, e) } @@ -1560,8 +1903,6 @@ func TestMaxMsgSizeClientDefault(t *testing.T) { func testMaxMsgSizeClientDefault(t *testing.T, e env) { te := newTest(t, e) te.userAgent = testAppUA - // To avoid error on server side. - te.maxServerSendMsgSize = newInt(5 * 1024 * 1024) te.declareLogNoise( "transport: http2Client.notifyError got notified that the client transport was broken EOF", "grpc: addrConn.transportMonitor exits due to: grpc: the connection is closing", @@ -1579,35 +1920,23 @@ func testMaxMsgSizeClientDefault(t *testing.T, e env) { if err != nil { t.Fatal(err) } - - largePayload, err := newPayload(testpb.PayloadType_COMPRESSABLE, largeSize) - if err != nil { - t.Fatal(err) - } req := &testpb.SimpleRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), - ResponseSize: proto.Int32(int32(largeSize)), + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseSize: int32(largeSize), Payload: smallPayload, } // Test for unary RPC recv. - if _, err := tc.UnaryCall(context.Background(), req); err == nil || grpc.Code(err) != codes.ResourceExhausted { - t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want _, error code: %s", err, codes.ResourceExhausted) - } - - // Test for unary RPC send. - req.Payload = largePayload - req.ResponseSize = proto.Int32(int32(smallSize)) - if _, err := tc.UnaryCall(context.Background(), req); err == nil || grpc.Code(err) != codes.ResourceExhausted { + if _, err := tc.UnaryCall(context.Background(), req); err == nil || status.Code(err) != codes.ResourceExhausted { t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want _, error code: %s", err, codes.ResourceExhausted) } respParam := []*testpb.ResponseParameters{ { - Size: proto.Int32(int32(largeSize)), + Size: int32(largeSize), }, } sreq := &testpb.StreamingOutputCallRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseType: testpb.PayloadType_COMPRESSABLE, ResponseParameters: respParam, Payload: smallPayload, } @@ -1620,24 +1949,13 @@ func testMaxMsgSizeClientDefault(t *testing.T, e env) { if err := stream.Send(sreq); err != nil { t.Fatalf("%v.Send(%v) = %v, want ", stream, sreq, err) } - if _, err := stream.Recv(); err == nil || grpc.Code(err) != codes.ResourceExhausted { + if _, err := stream.Recv(); err == nil || status.Code(err) != codes.ResourceExhausted { t.Fatalf("%v.Recv() = _, %v, want _, error code: %s", stream, err, codes.ResourceExhausted) } - - // Test for streaming RPC send. - respParam[0].Size = proto.Int32(int32(smallSize)) - sreq.Payload = largePayload - stream, err = tc.FullDuplexCall(te.ctx) - if err != nil { - t.Fatalf("%v.FullDuplexCall(_) = _, %v, want ", tc, err) - } - if err := stream.Send(sreq); err == nil || grpc.Code(err) != codes.ResourceExhausted { - t.Fatalf("%v.Send(%v) = %v, want _, error codes: %s", stream, sreq, err, codes.ResourceExhausted) - } } func TestMaxMsgSizeClientAPI(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testMaxMsgSizeClientAPI(t, e) } @@ -1673,29 +1991,29 @@ func testMaxMsgSizeClientAPI(t *testing.T, e env) { t.Fatal(err) } req := &testpb.SimpleRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), - ResponseSize: proto.Int32(int32(largeSize)), + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseSize: int32(largeSize), Payload: smallPayload, } // Test for unary RPC recv. - if _, err := tc.UnaryCall(context.Background(), req); err == nil || grpc.Code(err) != codes.ResourceExhausted { + if _, err := tc.UnaryCall(context.Background(), req); err == nil || status.Code(err) != codes.ResourceExhausted { t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want _, error code: %s", err, codes.ResourceExhausted) } // Test for unary RPC send. req.Payload = largePayload - req.ResponseSize = proto.Int32(int32(smallSize)) - if _, err := tc.UnaryCall(context.Background(), req); err == nil || grpc.Code(err) != codes.ResourceExhausted { + req.ResponseSize = int32(smallSize) + if _, err := tc.UnaryCall(context.Background(), req); err == nil || status.Code(err) != codes.ResourceExhausted { t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want _, error code: %s", err, codes.ResourceExhausted) } respParam := []*testpb.ResponseParameters{ { - Size: proto.Int32(int32(largeSize)), + Size: int32(largeSize), }, } sreq := &testpb.StreamingOutputCallRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseType: testpb.PayloadType_COMPRESSABLE, ResponseParameters: respParam, Payload: smallPayload, } @@ -1708,24 +2026,24 @@ func testMaxMsgSizeClientAPI(t *testing.T, e env) { if err := stream.Send(sreq); err != nil { t.Fatalf("%v.Send(%v) = %v, want ", stream, sreq, err) } - if _, err := stream.Recv(); err == nil || grpc.Code(err) != codes.ResourceExhausted { + if _, err := stream.Recv(); err == nil || status.Code(err) != codes.ResourceExhausted { t.Fatalf("%v.Recv() = _, %v, want _, error code: %s", stream, err, codes.ResourceExhausted) } // Test for streaming RPC send. - respParam[0].Size = proto.Int32(int32(smallSize)) + respParam[0].Size = int32(smallSize) sreq.Payload = largePayload stream, err = tc.FullDuplexCall(te.ctx) if err != nil { t.Fatalf("%v.FullDuplexCall(_) = _, %v, want ", tc, err) } - if err := stream.Send(sreq); err == nil || grpc.Code(err) != codes.ResourceExhausted { + if err := stream.Send(sreq); err == nil || status.Code(err) != codes.ResourceExhausted { t.Fatalf("%v.Send(%v) = %v, want _, error code: %s", stream, sreq, err, codes.ResourceExhausted) } } func TestMaxMsgSizeServerAPI(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testMaxMsgSizeServerAPI(t, e) } @@ -1759,29 +2077,29 @@ func testMaxMsgSizeServerAPI(t *testing.T, e env) { t.Fatal(err) } req := &testpb.SimpleRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), - ResponseSize: proto.Int32(int32(largeSize)), + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseSize: int32(largeSize), Payload: smallPayload, } // Test for unary RPC send. - if _, err := tc.UnaryCall(context.Background(), req); err == nil || grpc.Code(err) != codes.ResourceExhausted { + if _, err := tc.UnaryCall(context.Background(), req); err == nil || status.Code(err) != codes.ResourceExhausted { t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want _, error code: %s", err, codes.ResourceExhausted) } // Test for unary RPC recv. req.Payload = largePayload - req.ResponseSize = proto.Int32(int32(smallSize)) - if _, err := tc.UnaryCall(context.Background(), req); err == nil || grpc.Code(err) != codes.ResourceExhausted { + req.ResponseSize = int32(smallSize) + if _, err := tc.UnaryCall(context.Background(), req); err == nil || status.Code(err) != codes.ResourceExhausted { t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want _, error code: %s", err, codes.ResourceExhausted) } respParam := []*testpb.ResponseParameters{ { - Size: proto.Int32(int32(largeSize)), + Size: int32(largeSize), }, } sreq := &testpb.StreamingOutputCallRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseType: testpb.PayloadType_COMPRESSABLE, ResponseParameters: respParam, Payload: smallPayload, } @@ -1794,12 +2112,12 @@ func testMaxMsgSizeServerAPI(t *testing.T, e env) { if err := stream.Send(sreq); err != nil { t.Fatalf("%v.Send(%v) = %v, want ", stream, sreq, err) } - if _, err := stream.Recv(); err == nil || grpc.Code(err) != codes.ResourceExhausted { + if _, err := stream.Recv(); err == nil || status.Code(err) != codes.ResourceExhausted { t.Fatalf("%v.Recv() = _, %v, want _, error code: %s", stream, err, codes.ResourceExhausted) } // Test for streaming RPC recv. - respParam[0].Size = proto.Int32(int32(smallSize)) + respParam[0].Size = int32(smallSize) sreq.Payload = largePayload stream, err = tc.FullDuplexCall(te.ctx) if err != nil { @@ -1808,13 +2126,13 @@ func testMaxMsgSizeServerAPI(t *testing.T, e env) { if err := stream.Send(sreq); err != nil { t.Fatalf("%v.Send(%v) = %v, want ", stream, sreq, err) } - if _, err := stream.Recv(); err == nil || grpc.Code(err) != codes.ResourceExhausted { + if _, err := stream.Recv(); err == nil || status.Code(err) != codes.ResourceExhausted { t.Fatalf("%v.Recv() = _, %v, want _, error code: %s", stream, err, codes.ResourceExhausted) } } func TestTap(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { if e.name == "handler-tls" { continue @@ -1866,17 +2184,18 @@ func testTap(t *testing.T, e env) { } req := &testpb.SimpleRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), - ResponseSize: proto.Int32(45), + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseSize: 45, Payload: payload, } - if _, err := tc.UnaryCall(context.Background(), req); grpc.Code(err) != codes.Unavailable { + if _, err := tc.UnaryCall(context.Background(), req); status.Code(err) != codes.Unavailable { t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want _, %s", err, codes.Unavailable) } } func healthCheck(d time.Duration, cc *grpc.ClientConn, serviceName string) (*healthpb.HealthCheckResponse, error) { - ctx, _ := context.WithTimeout(context.Background(), d) + ctx, cancel := context.WithTimeout(context.Background(), d) + defer cancel() hc := healthpb.NewHealthClient(cc) req := &healthpb.HealthCheckRequest{ Service: serviceName, @@ -1885,7 +2204,7 @@ func healthCheck(d time.Duration, cc *grpc.ClientConn, serviceName string) (*hea } func TestHealthCheckOnSuccess(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testHealthCheckOnSuccess(t, e) } @@ -1906,14 +2225,14 @@ func testHealthCheckOnSuccess(t *testing.T, e env) { } func TestHealthCheckOnFailure(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testHealthCheckOnFailure(t, e) } } func testHealthCheckOnFailure(t *testing.T, e env) { - defer leakCheck(t)() + defer leakcheck.Check(t) te := newTest(t, e) te.declareLogNoise( "Failed to dial ", @@ -1926,7 +2245,7 @@ func testHealthCheckOnFailure(t *testing.T, e env) { defer te.tearDown() cc := te.clientConn() - wantErr := grpc.Errorf(codes.DeadlineExceeded, "context deadline exceeded") + wantErr := status.Error(codes.DeadlineExceeded, "context deadline exceeded") if _, err := healthCheck(0*time.Second, cc, "grpc.health.v1.Health"); !reflect.DeepEqual(err, wantErr) { t.Fatalf("Health/Check(_, _) = _, %v, want _, error code %s", err, codes.DeadlineExceeded) } @@ -1934,7 +2253,7 @@ func testHealthCheckOnFailure(t *testing.T, e env) { } func TestHealthCheckOff(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { // TODO(bradfitz): Temporarily skip this env due to #619. if e.name == "handler-tls" { @@ -1948,18 +2267,18 @@ func testHealthCheckOff(t *testing.T, e env) { te := newTest(t, e) te.startServer(&testServer{security: e.security}) defer te.tearDown() - want := grpc.Errorf(codes.Unimplemented, "unknown service grpc.health.v1.Health") + want := status.Error(codes.Unimplemented, "unknown service grpc.health.v1.Health") if _, err := healthCheck(1*time.Second, te.clientConn(), ""); !reflect.DeepEqual(err, want) { t.Fatalf("Health/Check(_, _) = _, %v, want _, %v", err, want) } } func TestUnknownHandler(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) // An example unknownHandler that returns a different code and a different method, making sure that we do not // expose what methods are implemented to a client that is not authenticated. unknownHandler := func(srv interface{}, stream grpc.ServerStream) error { - return grpc.Errorf(codes.Unauthenticated, "user unauthenticated") + return status.Error(codes.Unauthenticated, "user unauthenticated") } for _, e := range listTestEnv() { // TODO(bradfitz): Temporarily skip this env due to #619. @@ -1975,14 +2294,14 @@ func testUnknownHandler(t *testing.T, e env, unknownHandler grpc.StreamHandler) te.unknownHandler = unknownHandler te.startServer(&testServer{security: e.security}) defer te.tearDown() - want := grpc.Errorf(codes.Unauthenticated, "user unauthenticated") + want := status.Error(codes.Unauthenticated, "user unauthenticated") if _, err := healthCheck(1*time.Second, te.clientConn(), ""); !reflect.DeepEqual(err, want) { t.Fatalf("Health/Check(_, _) = _, %v, want _, %v", err, want) } } func TestHealthCheckServingStatus(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testHealthCheckServingStatus(t, e) } @@ -2003,7 +2322,7 @@ func testHealthCheckServingStatus(t *testing.T, e env) { if out.Status != healthpb.HealthCheckResponse_SERVING { t.Fatalf("Got the serving status %v, want SERVING", out.Status) } - wantErr := grpc.Errorf(codes.NotFound, "unknown service") + wantErr := status.Error(codes.NotFound, "unknown service") if _, err := healthCheck(1*time.Second, cc, "grpc.health.v1.Health"); !reflect.DeepEqual(err, wantErr) { t.Fatalf("Health/Check(_, _) = _, %v, want _, error code %s", err, codes.NotFound) } @@ -2026,26 +2345,8 @@ func testHealthCheckServingStatus(t *testing.T, e env) { } -func TestErrorChanNoIO(t *testing.T) { - defer leakCheck(t)() - for _, e := range listTestEnv() { - testErrorChanNoIO(t, e) - } -} - -func testErrorChanNoIO(t *testing.T, e env) { - te := newTest(t, e) - te.startServer(&testServer{security: e.security}) - defer te.tearDown() - - tc := testpb.NewTestServiceClient(te.clientConn()) - if _, err := tc.FullDuplexCall(context.Background()); err != nil { - t.Fatalf("%v.FullDuplexCall(_) = _, %v, want ", tc, err) - } -} - func TestEmptyUnaryWithUserAgent(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testEmptyUnaryWithUserAgent(t, e) } @@ -2072,8 +2373,13 @@ func testEmptyUnaryWithUserAgent(t *testing.T, e env) { } func TestFailedEmptyUnary(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { + if e.name == "handler-tls" { + // This test covers status details, but + // Grpc-Status-Details-Bin is not support in handler_server. + continue + } testFailedEmptyUnary(t, e) } } @@ -2093,7 +2399,7 @@ func testFailedEmptyUnary(t *testing.T, e env) { } func TestLargeUnary(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testLargeUnary(t, e) } @@ -2114,8 +2420,8 @@ func testLargeUnary(t *testing.T, e env) { } req := &testpb.SimpleRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), - ResponseSize: proto.Int32(respSize), + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseSize: respSize, Payload: payload, } reply, err := tc.UnaryCall(context.Background(), req) @@ -2129,9 +2435,9 @@ func testLargeUnary(t *testing.T, e env) { } } -// Test backward-compatability API for setting msg size limit. +// Test backward-compatibility API for setting msg size limit. func TestExceedMsgLimit(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testExceedMsgLimit(t, e) } @@ -2158,17 +2464,17 @@ func testExceedMsgLimit(t *testing.T, e env) { // Test on server side for unary RPC. req := &testpb.SimpleRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), - ResponseSize: proto.Int32(smallSize), + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseSize: smallSize, Payload: payload, } - if _, err := tc.UnaryCall(context.Background(), req); err == nil || grpc.Code(err) != codes.ResourceExhausted { + if _, err := tc.UnaryCall(context.Background(), req); err == nil || status.Code(err) != codes.ResourceExhausted { t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want _, error code: %s", err, codes.ResourceExhausted) } // Test on client side for unary RPC. - req.ResponseSize = proto.Int32(int32(*te.maxMsgSize) + 1) + req.ResponseSize = int32(*te.maxMsgSize) + 1 req.Payload = smallPayload - if _, err := tc.UnaryCall(context.Background(), req); err == nil || grpc.Code(err) != codes.ResourceExhausted { + if _, err := tc.UnaryCall(context.Background(), req); err == nil || status.Code(err) != codes.ResourceExhausted { t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want _, error code: %s", err, codes.ResourceExhausted) } @@ -2179,7 +2485,7 @@ func testExceedMsgLimit(t *testing.T, e env) { } respParam := []*testpb.ResponseParameters{ { - Size: proto.Int32(1), + Size: 1, }, } @@ -2189,14 +2495,14 @@ func testExceedMsgLimit(t *testing.T, e env) { } sreq := &testpb.StreamingOutputCallRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseType: testpb.PayloadType_COMPRESSABLE, ResponseParameters: respParam, Payload: spayload, } if err := stream.Send(sreq); err != nil { t.Fatalf("%v.Send(%v) = %v, want ", stream, sreq, err) } - if _, err := stream.Recv(); err == nil || grpc.Code(err) != codes.ResourceExhausted { + if _, err := stream.Recv(); err == nil || status.Code(err) != codes.ResourceExhausted { t.Fatalf("%v.Recv() = _, %v, want _, error code: %s", stream, err, codes.ResourceExhausted) } @@ -2205,19 +2511,19 @@ func testExceedMsgLimit(t *testing.T, e env) { if err != nil { t.Fatalf("%v.FullDuplexCall(_) = _, %v, want ", tc, err) } - respParam[0].Size = proto.Int32(int32(*te.maxMsgSize) + 1) + respParam[0].Size = int32(*te.maxMsgSize) + 1 sreq.Payload = smallPayload if err := stream.Send(sreq); err != nil { t.Fatalf("%v.Send(%v) = %v, want ", stream, sreq, err) } - if _, err := stream.Recv(); err == nil || grpc.Code(err) != codes.ResourceExhausted { + if _, err := stream.Recv(); err == nil || status.Code(err) != codes.ResourceExhausted { t.Fatalf("%v.Recv() = _, %v, want _, error code: %s", stream, err, codes.ResourceExhausted) } } func TestPeerClientSide(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testPeerClientSide(t, e) } @@ -2257,7 +2563,7 @@ func testPeerClientSide(t *testing.T, e env) { // doesn't cause a segmentation fault. // issue#1141 https://github.com/grpc/grpc-go/issues/1141 func TestPeerNegative(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testPeerNegative(t, e) } @@ -2276,8 +2582,64 @@ func testPeerNegative(t *testing.T, e env) { tc.EmptyCall(ctx, &testpb.Empty{}, grpc.Peer(peer)) } +func TestPeerFailedRPC(t *testing.T) { + defer leakcheck.Check(t) + for _, e := range listTestEnv() { + testPeerFailedRPC(t, e) + } +} + +func testPeerFailedRPC(t *testing.T, e env) { + te := newTest(t, e) + te.maxServerReceiveMsgSize = newInt(1 * 1024) + te.startServer(&testServer{security: e.security}) + + defer te.tearDown() + tc := testpb.NewTestServiceClient(te.clientConn()) + + // first make a successful request to the server + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); err != nil { + t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want _, ", err) + } + + // make a second request that will be rejected by the server + const largeSize = 5 * 1024 + largePayload, err := newPayload(testpb.PayloadType_COMPRESSABLE, largeSize) + if err != nil { + t.Fatal(err) + } + req := &testpb.SimpleRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE, + Payload: largePayload, + } + + peer := new(peer.Peer) + if _, err := tc.UnaryCall(context.Background(), req, grpc.Peer(peer)); err == nil || status.Code(err) != codes.ResourceExhausted { + t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want _, error code: %s", err, codes.ResourceExhausted) + } else { + pa := peer.Addr.String() + if e.network == "unix" { + if pa != te.srvAddr { + t.Fatalf("peer.Addr = %v, want %v", pa, te.srvAddr) + } + return + } + _, pp, err := net.SplitHostPort(pa) + if err != nil { + t.Fatalf("Failed to parse address from peer.") + } + _, sp, err := net.SplitHostPort(te.srvAddr) + if err != nil { + t.Fatalf("Failed to parse address of test server.") + } + if pp != sp { + t.Fatalf("peer.Addr = localhost:%v, want localhost:%v", pp, sp) + } + } +} + func TestMetadataUnaryRPC(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testMetadataUnaryRPC(t, e) } @@ -2298,8 +2660,8 @@ func testMetadataUnaryRPC(t *testing.T, e env) { } req := &testpb.SimpleRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), - ResponseSize: proto.Int32(respSize), + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseSize: respSize, Payload: payload, } var header, trailer metadata.MD @@ -2312,6 +2674,7 @@ func testMetadataUnaryRPC(t *testing.T, e env) { delete(header, "trailer") // RFC 2616 says server SHOULD (but optional) declare trailers delete(header, "date") // the Date header is also optional delete(header, "user-agent") + delete(header, "content-type") } if !reflect.DeepEqual(header, testMetadata) { t.Fatalf("Received header metadata %v, want %v", header, testMetadata) @@ -2322,7 +2685,7 @@ func testMetadataUnaryRPC(t *testing.T, e env) { } func TestMultipleSetTrailerUnaryRPC(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testMultipleSetTrailerUnaryRPC(t, e) } @@ -2344,8 +2707,8 @@ func testMultipleSetTrailerUnaryRPC(t *testing.T, e env) { } req := &testpb.SimpleRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), - ResponseSize: proto.Int32(respSize), + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseSize: respSize, Payload: payload, } var trailer metadata.MD @@ -2360,7 +2723,7 @@ func testMultipleSetTrailerUnaryRPC(t *testing.T, e env) { } func TestMultipleSetTrailerStreamingRPC(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testMultipleSetTrailerStreamingRPC(t, e) } @@ -2392,7 +2755,7 @@ func testMultipleSetTrailerStreamingRPC(t *testing.T, e env) { } func TestSetAndSendHeaderUnaryRPC(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { if e.name == "handler-tls" { continue @@ -2418,8 +2781,8 @@ func testSetAndSendHeaderUnaryRPC(t *testing.T, e env) { } req := &testpb.SimpleRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), - ResponseSize: proto.Int32(respSize), + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseSize: respSize, Payload: payload, } var header metadata.MD @@ -2428,6 +2791,7 @@ func testSetAndSendHeaderUnaryRPC(t *testing.T, e env) { t.Fatalf("TestService.UnaryCall(%v, _, _, _) = _, %v; want _, ", ctx, err) } delete(header, "user-agent") + delete(header, "content-type") expectedHeader := metadata.Join(testMetadata, testMetadata2) if !reflect.DeepEqual(header, expectedHeader) { t.Fatalf("Received header metadata %v, want %v", header, expectedHeader) @@ -2435,7 +2799,7 @@ func testSetAndSendHeaderUnaryRPC(t *testing.T, e env) { } func TestMultipleSetHeaderUnaryRPC(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { if e.name == "handler-tls" { continue @@ -2461,8 +2825,8 @@ func testMultipleSetHeaderUnaryRPC(t *testing.T, e env) { } req := &testpb.SimpleRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), - ResponseSize: proto.Int32(respSize), + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseSize: respSize, Payload: payload, } @@ -2472,6 +2836,7 @@ func testMultipleSetHeaderUnaryRPC(t *testing.T, e env) { t.Fatalf("TestService.UnaryCall(%v, _, _, _) = _, %v; want _, ", ctx, err) } delete(header, "user-agent") + delete(header, "content-type") expectedHeader := metadata.Join(testMetadata, testMetadata2) if !reflect.DeepEqual(header, expectedHeader) { t.Fatalf("Received header metadata %v, want %v", header, expectedHeader) @@ -2479,7 +2844,7 @@ func testMultipleSetHeaderUnaryRPC(t *testing.T, e env) { } func TestMultipleSetHeaderUnaryRPCError(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { if e.name == "handler-tls" { continue @@ -2505,8 +2870,8 @@ func testMultipleSetHeaderUnaryRPCError(t *testing.T, e env) { } req := &testpb.SimpleRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), - ResponseSize: proto.Int32(respSize), + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseSize: respSize, Payload: payload, } var header metadata.MD @@ -2515,6 +2880,7 @@ func testMultipleSetHeaderUnaryRPCError(t *testing.T, e env) { t.Fatalf("TestService.UnaryCall(%v, _, _, _) = _, %v; want _, ", ctx, err) } delete(header, "user-agent") + delete(header, "content-type") expectedHeader := metadata.Join(testMetadata, testMetadata2) if !reflect.DeepEqual(header, expectedHeader) { t.Fatalf("Received header metadata %v, want %v", header, expectedHeader) @@ -2522,7 +2888,7 @@ func testMultipleSetHeaderUnaryRPCError(t *testing.T, e env) { } func TestSetAndSendHeaderStreamingRPC(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { if e.name == "handler-tls" { continue @@ -2559,6 +2925,7 @@ func testSetAndSendHeaderStreamingRPC(t *testing.T, e env) { t.Fatalf("%v.Header() = _, %v, want _, ", stream, err) } delete(header, "user-agent") + delete(header, "content-type") expectedHeader := metadata.Join(testMetadata, testMetadata2) if !reflect.DeepEqual(header, expectedHeader) { t.Fatalf("Received header metadata %v, want %v", header, expectedHeader) @@ -2566,7 +2933,7 @@ func testSetAndSendHeaderStreamingRPC(t *testing.T, e env) { } func TestMultipleSetHeaderStreamingRPC(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { if e.name == "handler-tls" { continue @@ -2598,9 +2965,9 @@ func testMultipleSetHeaderStreamingRPC(t *testing.T, e env) { } req := &testpb.StreamingOutputCallRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseType: testpb.PayloadType_COMPRESSABLE, ResponseParameters: []*testpb.ResponseParameters{ - {Size: proto.Int32(respSize)}, + {Size: respSize}, }, Payload: payload, } @@ -2622,6 +2989,7 @@ func testMultipleSetHeaderStreamingRPC(t *testing.T, e env) { t.Fatalf("%v.Header() = _, %v, want _, ", stream, err) } delete(header, "user-agent") + delete(header, "content-type") expectedHeader := metadata.Join(testMetadata, testMetadata2) if !reflect.DeepEqual(header, expectedHeader) { t.Fatalf("Received header metadata %v, want %v", header, expectedHeader) @@ -2630,7 +2998,7 @@ func testMultipleSetHeaderStreamingRPC(t *testing.T, e env) { } func TestMultipleSetHeaderStreamingRPCError(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { if e.name == "handler-tls" { continue @@ -2662,9 +3030,9 @@ func testMultipleSetHeaderStreamingRPCError(t *testing.T, e env) { } req := &testpb.StreamingOutputCallRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseType: testpb.PayloadType_COMPRESSABLE, ResponseParameters: []*testpb.ResponseParameters{ - {Size: proto.Int32(respSize)}, + {Size: respSize}, }, Payload: payload, } @@ -2680,6 +3048,7 @@ func testMultipleSetHeaderStreamingRPCError(t *testing.T, e env) { t.Fatalf("%v.Header() = _, %v, want _, ", stream, err) } delete(header, "user-agent") + delete(header, "content-type") expectedHeader := metadata.Join(testMetadata, testMetadata2) if !reflect.DeepEqual(header, expectedHeader) { t.Fatalf("Received header metadata %v, want %v", header, expectedHeader) @@ -2693,8 +3062,13 @@ func testMultipleSetHeaderStreamingRPCError(t *testing.T, e env) { // TestMalformedHTTP2Metedata verfies the returned error when the client // sends an illegal metadata. func TestMalformedHTTP2Metadata(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { + if e.name == "handler-tls" { + // Failed with "server stops accepting new RPCs". + // Server stops accepting new RPCs when the client sends an illegal http2 header. + continue + } testMalformedHTTP2Metadata(t, e) } } @@ -2711,99 +3085,79 @@ func testMalformedHTTP2Metadata(t *testing.T, e env) { } req := &testpb.SimpleRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), - ResponseSize: proto.Int32(314), + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseSize: 314, Payload: payload, } ctx := metadata.NewOutgoingContext(context.Background(), malformedHTTP2Metadata) - if _, err := tc.UnaryCall(ctx, req); grpc.Code(err) != codes.Internal { + if _, err := tc.UnaryCall(ctx, req); status.Code(err) != codes.Internal { t.Fatalf("TestService.UnaryCall(%v, _) = _, %v; want _, %s", ctx, err, codes.Internal) } } -func performOneRPC(t *testing.T, tc testpb.TestServiceClient, wg *sync.WaitGroup) { - defer wg.Done() - const argSize = 2718 - const respSize = 314 - - payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, argSize) - if err != nil { - t.Error(err) - return - } - - req := &testpb.SimpleRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), - ResponseSize: proto.Int32(respSize), - Payload: payload, - } - reply, err := tc.UnaryCall(context.Background(), req, grpc.FailFast(false)) - if err != nil { - t.Errorf("TestService/UnaryCall(_, _) = _, %v, want _, ", err) - return - } - pt := reply.GetPayload().GetType() - ps := len(reply.GetPayload().GetBody()) - if pt != testpb.PayloadType_COMPRESSABLE || ps != respSize { - t.Errorf("Got reply with type %d len %d; want %d, %d", pt, ps, testpb.PayloadType_COMPRESSABLE, respSize) - return - } -} - func TestRetry(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { + if e.name == "handler-tls" { + // Fails with RST_STREAM / FLOW_CONTROL_ERROR + continue + } testRetry(t, e) } } -// This test mimics a user who sends 1000 RPCs concurrently on a faulty transport. -// TODO(zhaoq): Refactor to make this clearer and add more cases to test racy -// and error-prone paths. +// This test make sure RPCs are retried times when they receive a RST_STREAM +// with the REFUSED_STREAM error code, which the InTapHandle provokes. func testRetry(t *testing.T, e env) { te := newTest(t, e) - te.declareLogNoise("transport: http2Client.notifyError got notified that the client transport was broken") + attempts := 0 + successAttempt := 2 + te.tapHandle = func(ctx context.Context, _ *tap.Info) (context.Context, error) { + attempts++ + if attempts < successAttempt { + return nil, errors.New("not now") + } + return ctx, nil + } te.startServer(&testServer{security: e.security}) defer te.tearDown() cc := te.clientConn() - tc := testpb.NewTestServiceClient(cc) - var wg sync.WaitGroup - - numRPC := 1000 - rpcSpacing := 2 * time.Millisecond - if raceMode { - // The race detector has a limit on how many goroutines it can track. - // This test is near the upper limit, and goes over the limit - // depending on the environment (the http.Handler environment uses - // more goroutines) - t.Logf("Shortening test in race mode.") - numRPC /= 2 - rpcSpacing *= 2 - } + tsc := testpb.NewTestServiceClient(cc) + testCases := []struct { + successAttempt int + failFast bool + errCode codes.Code + }{{ + successAttempt: 1, + }, { + successAttempt: 2, + }, { + successAttempt: 3, + errCode: codes.Unavailable, + }, { + successAttempt: 1, + failFast: true, + }, { + successAttempt: 2, + failFast: true, + errCode: codes.Unavailable, // We won't retry on fail fast. + }} + for _, tc := range testCases { + attempts = 0 + successAttempt = tc.successAttempt - wg.Add(1) - go func() { - // Halfway through starting RPCs, kill all connections: - time.Sleep(time.Duration(numRPC/2) * rpcSpacing) - - // The server shuts down the network connection to make a - // transport error which will be detected by the client side - // code. - internal.TestingCloseConns(te.srv) - wg.Done() - }() - // All these RPCs should succeed eventually. - for i := 0; i < numRPC; i++ { - time.Sleep(rpcSpacing) - wg.Add(1) - go performOneRPC(t, tc, &wg) + ctx, cancel := context.WithTimeout(context.Background(), time.Second) + _, err := tsc.EmptyCall(ctx, &testpb.Empty{}, grpc.FailFast(tc.failFast)) + cancel() + if status.Code(err) != tc.errCode { + t.Errorf("%+v: tsc.EmptyCall(_, _) = _, %v, want _, Code=%v", tc, err, tc.errCode) + } } - wg.Wait() } func TestRPCTimeout(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testRPCTimeout(t, e) } @@ -2812,7 +3166,7 @@ func TestRPCTimeout(t *testing.T) { // TODO(zhaoq): Have a better test coverage of timeout and cancellation mechanism. func testRPCTimeout(t *testing.T, e env) { te := newTest(t, e) - te.startServer(&testServer{security: e.security}) + te.startServer(&testServer{security: e.security, unaryCallSleepTime: 50 * time.Millisecond}) defer te.tearDown() cc := te.clientConn() @@ -2827,20 +3181,21 @@ func testRPCTimeout(t *testing.T, e env) { } req := &testpb.SimpleRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), - ResponseSize: proto.Int32(respSize), + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseSize: respSize, Payload: payload, } for i := -1; i <= 10; i++ { - ctx, _ := context.WithTimeout(context.Background(), time.Duration(i)*time.Millisecond) - if _, err := tc.UnaryCall(ctx, req); grpc.Code(err) != codes.DeadlineExceeded { + ctx, cancel := context.WithTimeout(context.Background(), time.Duration(i)*time.Millisecond) + if _, err := tc.UnaryCall(ctx, req); status.Code(err) != codes.DeadlineExceeded { t.Fatalf("TestService/UnaryCallv(_, _) = _, %v; want , error code: %s", err, codes.DeadlineExceeded) } + cancel() } } func TestCancel(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testCancel(t, e) } @@ -2849,7 +3204,7 @@ func TestCancel(t *testing.T) { func testCancel(t *testing.T, e env) { te := newTest(t, e) te.declareLogNoise("grpc: the client connection is closing; please retry") - te.startServer(&testServer{security: e.security}) + te.startServer(&testServer{security: e.security, unaryCallSleepTime: time.Second}) defer te.tearDown() cc := te.clientConn() @@ -2864,20 +3219,20 @@ func testCancel(t *testing.T, e env) { } req := &testpb.SimpleRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), - ResponseSize: proto.Int32(respSize), + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseSize: respSize, Payload: payload, } ctx, cancel := context.WithCancel(context.Background()) time.AfterFunc(1*time.Millisecond, cancel) - if r, err := tc.UnaryCall(ctx, req); grpc.Code(err) != codes.Canceled { + if r, err := tc.UnaryCall(ctx, req); status.Code(err) != codes.Canceled { t.Fatalf("TestService/UnaryCall(_, _) = %v, %v; want _, error code: %s", r, err, codes.Canceled) } awaitNewConnLogOutput() } func TestCancelNoIO(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testCancelNoIO(t, e) } @@ -2909,14 +3264,13 @@ func testCancelNoIO(t *testing.T, e env) { // succeeding. // TODO(bradfitz): add internal test hook for this (Issue 534) for { - ctx, cancelSecond := context.WithTimeout(context.Background(), 250*time.Millisecond) + ctx, cancelSecond := context.WithTimeout(context.Background(), 50*time.Millisecond) _, err := tc.StreamingInputCall(ctx) cancelSecond() if err == nil { - time.Sleep(50 * time.Millisecond) continue } - if grpc.Code(err) == codes.DeadlineExceeded { + if status.Code(err) == codes.DeadlineExceeded { break } t.Fatalf("%v.StreamingInputCall(_) = _, %v, want _, %s", tc, err, codes.DeadlineExceeded) @@ -2924,21 +3278,19 @@ func testCancelNoIO(t *testing.T, e env) { // If there are any RPCs in flight before the client receives // the max streams setting, let them be expired. // TODO(bradfitz): add internal test hook for this (Issue 534) - time.Sleep(500 * time.Millisecond) + time.Sleep(50 * time.Millisecond) - ch := make(chan struct{}) go func() { - defer close(ch) - - // This should be blocked until the 1st is canceled. - ctx, cancelThird := context.WithTimeout(context.Background(), 2*time.Second) - if _, err := tc.StreamingInputCall(ctx); err != nil { - t.Errorf("%v.StreamingInputCall(_) = _, %v, want _, ", tc, err) - } - cancelThird() + time.Sleep(50 * time.Millisecond) + cancelFirst() }() - cancelFirst() - <-ch + + // This should be blocked until the 1st is canceled, then succeed. + ctx, cancelThird := context.WithTimeout(context.Background(), 500*time.Millisecond) + if _, err := tc.StreamingInputCall(ctx); err != nil { + t.Errorf("%v.StreamingInputCall(_) = _, %v, want _, ", tc, err) + } + cancelThird() } // The following tests the gRPC streaming RPC implementations. @@ -2949,7 +3301,7 @@ var ( ) func TestNoService(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testNoService(t, e) } @@ -2967,13 +3319,13 @@ func testNoService(t *testing.T, e env) { if err != nil { t.Fatalf("%v.FullDuplexCall(_) = _, %v, want ", tc, err) } - if _, err := stream.Recv(); grpc.Code(err) != codes.Unimplemented { + if _, err := stream.Recv(); status.Code(err) != codes.Unimplemented { t.Fatalf("stream.Recv() = _, %v, want _, error code %s", err, codes.Unimplemented) } } func TestPingPong(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testPingPong(t, e) } @@ -2993,7 +3345,7 @@ func testPingPong(t *testing.T, e env) { for index < len(reqSizes) { respParam := []*testpb.ResponseParameters{ { - Size: proto.Int32(int32(respSizes[index])), + Size: int32(respSizes[index]), }, } @@ -3003,7 +3355,7 @@ func testPingPong(t *testing.T, e env) { } req := &testpb.StreamingOutputCallRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseType: testpb.PayloadType_COMPRESSABLE, ResponseParameters: respParam, Payload: payload, } @@ -3033,7 +3385,7 @@ func testPingPong(t *testing.T, e env) { } func TestMetadataStreamingRPC(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testMetadataStreamingRPC(t, e) } @@ -3057,6 +3409,7 @@ func testMetadataStreamingRPC(t *testing.T, e env) { } delete(headerMD, "trailer") // ignore if present delete(headerMD, "user-agent") + delete(headerMD, "content-type") if err != nil || !reflect.DeepEqual(testMetadata, headerMD) { t.Errorf("#1 %v.Header() = %v, %v, want %v, ", stream, headerMD, err, testMetadata) } @@ -3064,6 +3417,7 @@ func testMetadataStreamingRPC(t *testing.T, e env) { headerMD, err = stream.Header() delete(headerMD, "trailer") // ignore if present delete(headerMD, "user-agent") + delete(headerMD, "content-type") if err != nil || !reflect.DeepEqual(testMetadata, headerMD) { t.Errorf("#2 %v.Header() = %v, %v, want %v, ", stream, headerMD, err, testMetadata) } @@ -3071,7 +3425,7 @@ func testMetadataStreamingRPC(t *testing.T, e env) { for index := 0; index < len(reqSizes); index++ { respParam := []*testpb.ResponseParameters{ { - Size: proto.Int32(int32(respSizes[index])), + Size: int32(respSizes[index]), }, } @@ -3081,7 +3435,7 @@ func testMetadataStreamingRPC(t *testing.T, e env) { } req := &testpb.StreamingOutputCallRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseType: testpb.PayloadType_COMPRESSABLE, ResponseParameters: respParam, Payload: payload, } @@ -3109,7 +3463,7 @@ func testMetadataStreamingRPC(t *testing.T, e env) { } func TestServerStreaming(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testServerStreaming(t, e) } @@ -3124,11 +3478,11 @@ func testServerStreaming(t *testing.T, e env) { respParam := make([]*testpb.ResponseParameters, len(respSizes)) for i, s := range respSizes { respParam[i] = &testpb.ResponseParameters{ - Size: proto.Int32(int32(s)), + Size: int32(s), } } req := &testpb.StreamingOutputCallRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseType: testpb.PayloadType_COMPRESSABLE, ResponseParameters: respParam, } stream, err := tc.StreamingOutputCall(context.Background(), req) @@ -3164,7 +3518,7 @@ func testServerStreaming(t *testing.T, e env) { } func TestFailedServerStreaming(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testFailedServerStreaming(t, e) } @@ -3180,11 +3534,11 @@ func testFailedServerStreaming(t *testing.T, e env) { respParam := make([]*testpb.ResponseParameters, len(respSizes)) for i, s := range respSizes { respParam[i] = &testpb.ResponseParameters{ - Size: proto.Int32(int32(s)), + Size: int32(s), } } req := &testpb.StreamingOutputCallRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseType: testpb.PayloadType_COMPRESSABLE, ResponseParameters: respParam, } ctx := metadata.NewOutgoingContext(te.ctx, testMetadata) @@ -3192,7 +3546,7 @@ func testFailedServerStreaming(t *testing.T, e env) { if err != nil { t.Fatalf("%v.StreamingOutputCall(_) = _, %v, want ", tc, err) } - wantErr := grpc.Errorf(codes.DataLoss, "error for testing: "+failAppUA) + wantErr := status.Error(codes.DataLoss, "error for testing: "+failAppUA) if _, err := stream.Recv(); !reflect.DeepEqual(err, wantErr) { t.Fatalf("%v.Recv() = _, %v, want _, %v", stream, err, wantErr) } @@ -3221,7 +3575,7 @@ func (s concurrentSendServer) StreamingOutputCall(args *testpb.StreamingOutputCa // Tests doing a bunch of concurrent streaming output calls. func TestServerStreamingConcurrent(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testServerStreamingConcurrent(t, e) } @@ -3301,7 +3655,7 @@ func generatePayloadSizes() [][]int { } func TestClientStreaming(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, s := range generatePayloadSizes() { for _, e := range listTestEnv() { testClientStreaming(t, e, s) @@ -3315,7 +3669,8 @@ func testClientStreaming(t *testing.T, e env, sizes []int) { defer te.tearDown() tc := testpb.NewTestServiceClient(te.clientConn()) - ctx, _ := context.WithTimeout(te.ctx, time.Second*30) + ctx, cancel := context.WithTimeout(te.ctx, time.Second*30) + defer cancel() stream, err := tc.StreamingInputCall(ctx) if err != nil { t.Fatalf("%v.StreamingInputCall(_) = _, %v, want ", tc, err) @@ -3346,7 +3701,7 @@ func testClientStreaming(t *testing.T, e env, sizes []int) { } func TestClientStreamingError(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { if e.name == "handler-tls" { continue @@ -3381,7 +3736,7 @@ func testClientStreamingError(t *testing.T, e env) { if err := stream.Send(req); err != io.EOF { continue } - if _, err := stream.CloseAndRecv(); grpc.Code(err) != codes.NotFound { + if _, err := stream.CloseAndRecv(); status.Code(err) != codes.NotFound { t.Fatalf("%v.CloseAndRecv() = %v, want error %s", stream, err, codes.NotFound) } break @@ -3389,7 +3744,7 @@ func testClientStreamingError(t *testing.T, e env) { } func TestExceedMaxStreamsLimit(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testExceedMaxStreamsLimit(t, e) } @@ -3415,64 +3770,22 @@ func testExceedMaxStreamsLimit(t *testing.T, e env) { } // Loop until receiving the new max stream setting from the server. for { - ctx, cancel := context.WithTimeout(context.Background(), time.Second) + ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond) defer cancel() _, err := tc.StreamingInputCall(ctx) if err == nil { - time.Sleep(time.Second) + time.Sleep(50 * time.Millisecond) continue } - if grpc.Code(err) == codes.DeadlineExceeded { + if status.Code(err) == codes.DeadlineExceeded { break } t.Fatalf("%v.StreamingInputCall(_) = _, %v, want _, %s", tc, err, codes.DeadlineExceeded) } } -const defaultMaxStreamsClient = 100 - -func TestExceedDefaultMaxStreamsLimit(t *testing.T) { - defer leakCheck(t)() - for _, e := range listTestEnv() { - testExceedDefaultMaxStreamsLimit(t, e) - } -} - -func testExceedDefaultMaxStreamsLimit(t *testing.T, e env) { - te := newTest(t, e) - te.declareLogNoise( - "http2Client.notifyError got notified that the client transport was broken", - "Conn.resetTransport failed to create client transport", - "grpc: the connection is closing", - ) - // When masStream is set to 0 the server doesn't send a settings frame for - // MaxConcurrentStreams, essentially allowing infinite (math.MaxInt32) streams. - // In such a case, there should be a default cap on the client-side. - te.maxStream = 0 - te.startServer(&testServer{security: e.security}) - defer te.tearDown() - - cc := te.clientConn() - tc := testpb.NewTestServiceClient(cc) - - // Create as many streams as a client can. - for i := 0; i < defaultMaxStreamsClient; i++ { - if _, err := tc.StreamingInputCall(te.ctx); err != nil { - t.Fatalf("%v.StreamingInputCall(_) = _, %v, want _, ", tc, err) - } - } - - // Trying to create one more should timeout. - ctx, cancel := context.WithTimeout(context.Background(), time.Second) - defer cancel() - _, err := tc.StreamingInputCall(ctx) - if err == nil || grpc.Code(err) != codes.DeadlineExceeded { - t.Fatalf("%v.StreamingInputCall(_) = _, %v, want _, %s", tc, err, codes.DeadlineExceeded) - } -} - func TestStreamsQuotaRecovery(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testStreamsQuotaRecovery(t, e) } @@ -3491,22 +3804,24 @@ func testStreamsQuotaRecovery(t *testing.T, e env) { cc := te.clientConn() tc := testpb.NewTestServiceClient(cc) - if _, err := tc.StreamingInputCall(context.Background()); err != nil { - t.Fatalf("%v.StreamingInputCall(_) = _, %v, want _, ", tc, err) + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + if _, err := tc.StreamingInputCall(ctx); err != nil { + t.Fatalf("tc.StreamingInputCall(_) = _, %v, want _, ", err) } // Loop until the new max stream setting is effective. for { - ctx, cancel := context.WithTimeout(context.Background(), time.Second) - defer cancel() + ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond) _, err := tc.StreamingInputCall(ctx) + cancel() if err == nil { - time.Sleep(time.Second) + time.Sleep(5 * time.Millisecond) continue } - if grpc.Code(err) == codes.DeadlineExceeded { + if status.Code(err) == codes.DeadlineExceeded { break } - t.Fatalf("%v.StreamingInputCall(_) = _, %v, want _, %s", tc, err, codes.DeadlineExceeded) + t.Fatalf("tc.StreamingInputCall(_) = _, %v, want _, %s", err, codes.DeadlineExceeded) } var wg sync.WaitGroup @@ -3520,22 +3835,31 @@ func testStreamsQuotaRecovery(t *testing.T, e env) { return } req := &testpb.SimpleRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), - ResponseSize: proto.Int32(1592), + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseSize: 1592, Payload: payload, } // No rpc should go through due to the max streams limit. - ctx, _ := context.WithTimeout(context.Background(), 10*time.Millisecond) - if _, err := tc.UnaryCall(ctx, req, grpc.FailFast(false)); grpc.Code(err) != codes.DeadlineExceeded { - t.Errorf("TestService/UnaryCall(_, _) = _, %v, want _, %s", err, codes.DeadlineExceeded) + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Millisecond) + defer cancel() + if _, err := tc.UnaryCall(ctx, req, grpc.FailFast(false)); status.Code(err) != codes.DeadlineExceeded { + t.Errorf("tc.UnaryCall(_, _) = _, %v, want _, %s", err, codes.DeadlineExceeded) } }() } wg.Wait() + + cancel() + // A new stream should be allowed after canceling the first one. + ctx, cancel = context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + if _, err := tc.StreamingInputCall(ctx); err != nil { + t.Fatalf("tc.StreamingInputCall(_) = _, %v, want _, %v", err, nil) + } } func TestCompressServerHasNoSupport(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testCompressServerHasNoSupport(t, e) } @@ -3544,7 +3868,8 @@ func TestCompressServerHasNoSupport(t *testing.T) { func testCompressServerHasNoSupport(t *testing.T, e env) { te := newTest(t, e) te.serverCompression = false - te.clientCompression = true + te.clientCompression = false + te.clientNopCompression = true te.startServer(&testServer{security: e.security}) defer te.tearDown() tc := testpb.NewTestServiceClient(te.clientConn()) @@ -3556,11 +3881,11 @@ func testCompressServerHasNoSupport(t *testing.T, e env) { t.Fatal(err) } req := &testpb.SimpleRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), - ResponseSize: proto.Int32(respSize), + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseSize: respSize, Payload: payload, } - if _, err := tc.UnaryCall(context.Background(), req); err == nil || grpc.Code(err) != codes.Unimplemented { + if _, err := tc.UnaryCall(context.Background(), req); err == nil || status.Code(err) != codes.Unimplemented { t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want _, error code %s", err, codes.Unimplemented) } // Streaming RPC @@ -3568,30 +3893,13 @@ func testCompressServerHasNoSupport(t *testing.T, e env) { if err != nil { t.Fatalf("%v.FullDuplexCall(_) = _, %v, want ", tc, err) } - respParam := []*testpb.ResponseParameters{ - { - Size: proto.Int32(31415), - }, - } - payload, err = newPayload(testpb.PayloadType_COMPRESSABLE, int32(31415)) - if err != nil { - t.Fatal(err) - } - sreq := &testpb.StreamingOutputCallRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), - ResponseParameters: respParam, - Payload: payload, - } - if err := stream.Send(sreq); err != nil { - t.Fatalf("%v.Send(%v) = %v, want ", stream, sreq, err) - } - if _, err := stream.Recv(); err == nil || grpc.Code(err) != codes.Unimplemented { + if _, err := stream.Recv(); err == nil || status.Code(err) != codes.Unimplemented { t.Fatalf("%v.Recv() = %v, want error code %s", stream, err, codes.Unimplemented) } } func TestCompressOK(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testCompressOK(t, e) } @@ -3613,8 +3921,8 @@ func testCompressOK(t *testing.T, e env) { t.Fatal(err) } req := &testpb.SimpleRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), - ResponseSize: proto.Int32(respSize), + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseSize: respSize, Payload: payload, } ctx := metadata.NewOutgoingContext(context.Background(), metadata.Pairs("something", "something")) @@ -3630,7 +3938,7 @@ func testCompressOK(t *testing.T, e env) { } respParam := []*testpb.ResponseParameters{ { - Size: proto.Int32(31415), + Size: 31415, }, } payload, err = newPayload(testpb.PayloadType_COMPRESSABLE, int32(31415)) @@ -3638,71 +3946,130 @@ func testCompressOK(t *testing.T, e env) { t.Fatal(err) } sreq := &testpb.StreamingOutputCallRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseType: testpb.PayloadType_COMPRESSABLE, ResponseParameters: respParam, Payload: payload, } if err := stream.Send(sreq); err != nil { t.Fatalf("%v.Send(%v) = %v, want ", stream, sreq, err) } + stream.CloseSend() if _, err := stream.Recv(); err != nil { t.Fatalf("%v.Recv() = %v, want ", stream, err) } -} - -func TestUnaryClientInterceptor(t *testing.T) { - defer leakCheck(t)() - for _, e := range listTestEnv() { - testUnaryClientInterceptor(t, e) + if _, err := stream.Recv(); err != io.EOF { + t.Fatalf("%v.Recv() = %v, want io.EOF", stream, err) } } -func failOkayRPC(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error { - err := invoker(ctx, method, req, reply, cc, opts...) - if err == nil { - return grpc.Errorf(codes.NotFound, "") +func TestIdentityEncoding(t *testing.T) { + defer leakcheck.Check(t) + for _, e := range listTestEnv() { + testIdentityEncoding(t, e) } - return err } -func testUnaryClientInterceptor(t *testing.T, e env) { +func testIdentityEncoding(t *testing.T, e env) { te := newTest(t, e) - te.userAgent = testAppUA - te.unaryClientInt = failOkayRPC te.startServer(&testServer{security: e.security}) defer te.tearDown() - tc := testpb.NewTestServiceClient(te.clientConn()) - if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); grpc.Code(err) != codes.NotFound { - t.Fatalf("%v.EmptyCall(_, _) = _, %v, want _, error code %s", tc, err, codes.NotFound) - } -} -func TestStreamClientInterceptor(t *testing.T) { - defer leakCheck(t)() - for _, e := range listTestEnv() { - testStreamClientInterceptor(t, e) + // Unary call + payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, 5) + if err != nil { + t.Fatal(err) } -} - -func failOkayStream(ctx context.Context, desc *grpc.StreamDesc, cc *grpc.ClientConn, method string, streamer grpc.Streamer, opts ...grpc.CallOption) (grpc.ClientStream, error) { - s, err := streamer(ctx, desc, cc, method, opts...) - if err == nil { - return nil, grpc.Errorf(codes.NotFound, "") + req := &testpb.SimpleRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseSize: 10, + Payload: payload, } - return s, nil -} - -func testStreamClientInterceptor(t *testing.T, e env) { - te := newTest(t, e) - te.streamClientInt = failOkayStream - te.startServer(&testServer{security: e.security}) + ctx := metadata.NewOutgoingContext(context.Background(), metadata.Pairs("something", "something")) + if _, err := tc.UnaryCall(ctx, req); err != nil { + t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want _, ", err) + } + // Streaming RPC + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + stream, err := tc.FullDuplexCall(ctx, grpc.UseCompressor("identity")) + if err != nil { + t.Fatalf("%v.FullDuplexCall(_) = _, %v, want ", tc, err) + } + payload, err = newPayload(testpb.PayloadType_COMPRESSABLE, int32(31415)) + if err != nil { + t.Fatal(err) + } + sreq := &testpb.StreamingOutputCallRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseParameters: []*testpb.ResponseParameters{{Size: 10}}, + Payload: payload, + } + if err := stream.Send(sreq); err != nil { + t.Fatalf("%v.Send(%v) = %v, want ", stream, sreq, err) + } + stream.CloseSend() + if _, err := stream.Recv(); err != nil { + t.Fatalf("%v.Recv() = %v, want ", stream, err) + } + if _, err := stream.Recv(); err != io.EOF { + t.Fatalf("%v.Recv() = %v, want io.EOF", stream, err) + } +} + +func TestUnaryClientInterceptor(t *testing.T) { + defer leakcheck.Check(t) + for _, e := range listTestEnv() { + testUnaryClientInterceptor(t, e) + } +} + +func failOkayRPC(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error { + err := invoker(ctx, method, req, reply, cc, opts...) + if err == nil { + return status.Error(codes.NotFound, "") + } + return err +} + +func testUnaryClientInterceptor(t *testing.T, e env) { + te := newTest(t, e) + te.userAgent = testAppUA + te.unaryClientInt = failOkayRPC + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + + tc := testpb.NewTestServiceClient(te.clientConn()) + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); status.Code(err) != codes.NotFound { + t.Fatalf("%v.EmptyCall(_, _) = _, %v, want _, error code %s", tc, err, codes.NotFound) + } +} + +func TestStreamClientInterceptor(t *testing.T) { + defer leakcheck.Check(t) + for _, e := range listTestEnv() { + testStreamClientInterceptor(t, e) + } +} + +func failOkayStream(ctx context.Context, desc *grpc.StreamDesc, cc *grpc.ClientConn, method string, streamer grpc.Streamer, opts ...grpc.CallOption) (grpc.ClientStream, error) { + s, err := streamer(ctx, desc, cc, method, opts...) + if err == nil { + return nil, status.Error(codes.NotFound, "") + } + return s, nil +} + +func testStreamClientInterceptor(t *testing.T, e env) { + te := newTest(t, e) + te.streamClientInt = failOkayStream + te.startServer(&testServer{security: e.security}) defer te.tearDown() tc := testpb.NewTestServiceClient(te.clientConn()) respParam := []*testpb.ResponseParameters{ { - Size: proto.Int32(int32(1)), + Size: int32(1), }, } payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, int32(1)) @@ -3710,24 +4077,24 @@ func testStreamClientInterceptor(t *testing.T, e env) { t.Fatal(err) } req := &testpb.StreamingOutputCallRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseType: testpb.PayloadType_COMPRESSABLE, ResponseParameters: respParam, Payload: payload, } - if _, err := tc.StreamingOutputCall(context.Background(), req); grpc.Code(err) != codes.NotFound { + if _, err := tc.StreamingOutputCall(context.Background(), req); status.Code(err) != codes.NotFound { t.Fatalf("%v.StreamingOutputCall(_) = _, %v, want _, error code %s", tc, err, codes.NotFound) } } func TestUnaryServerInterceptor(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testUnaryServerInterceptor(t, e) } } func errInjector(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { - return nil, grpc.Errorf(codes.PermissionDenied, "") + return nil, status.Error(codes.PermissionDenied, "") } func testUnaryServerInterceptor(t *testing.T, e env) { @@ -3737,13 +4104,13 @@ func testUnaryServerInterceptor(t *testing.T, e env) { defer te.tearDown() tc := testpb.NewTestServiceClient(te.clientConn()) - if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); grpc.Code(err) != codes.PermissionDenied { + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); status.Code(err) != codes.PermissionDenied { t.Fatalf("%v.EmptyCall(_, _) = _, %v, want _, error code %s", tc, err, codes.PermissionDenied) } } func TestStreamServerInterceptor(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { // TODO(bradfitz): Temporarily skip this env due to #619. if e.name == "handler-tls" { @@ -3758,7 +4125,7 @@ func fullDuplexOnly(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServ return handler(srv, ss) } // Reject the other methods. - return grpc.Errorf(codes.PermissionDenied, "") + return status.Error(codes.PermissionDenied, "") } func testStreamServerInterceptor(t *testing.T, e env) { @@ -3770,7 +4137,7 @@ func testStreamServerInterceptor(t *testing.T, e env) { tc := testpb.NewTestServiceClient(te.clientConn()) respParam := []*testpb.ResponseParameters{ { - Size: proto.Int32(int32(1)), + Size: int32(1), }, } payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, int32(1)) @@ -3778,7 +4145,7 @@ func testStreamServerInterceptor(t *testing.T, e env) { t.Fatal(err) } req := &testpb.StreamingOutputCallRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseType: testpb.PayloadType_COMPRESSABLE, ResponseParameters: respParam, Payload: payload, } @@ -3786,7 +4153,7 @@ func testStreamServerInterceptor(t *testing.T, e env) { if err != nil { t.Fatalf("%v.StreamingOutputCall(_) = _, %v, want _, ", tc, err) } - if _, err := s1.Recv(); grpc.Code(err) != codes.PermissionDenied { + if _, err := s1.Recv(); status.Code(err) != codes.PermissionDenied { t.Fatalf("%v.StreamingInputCall(_) = _, %v, want _, error code %s", tc, err, codes.PermissionDenied) } s2, err := tc.FullDuplexCall(context.Background()) @@ -3809,6 +4176,7 @@ type funcServer struct { testpb.TestServiceServer unaryCall func(ctx context.Context, in *testpb.SimpleRequest) (*testpb.SimpleResponse, error) streamingInputCall func(stream testpb.TestService_StreamingInputCallServer) error + fullDuplexCall func(stream testpb.TestService_FullDuplexCallServer) error } func (s *funcServer) UnaryCall(ctx context.Context, in *testpb.SimpleRequest) (*testpb.SimpleResponse, error) { @@ -3819,8 +4187,12 @@ func (s *funcServer) StreamingInputCall(stream testpb.TestService_StreamingInput return s.streamingInputCall(stream) } +func (s *funcServer) FullDuplexCall(stream testpb.TestService_FullDuplexCallServer) error { + return s.fullDuplexCall(stream) +} + func TestClientRequestBodyErrorUnexpectedEOF(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testClientRequestBodyErrorUnexpectedEOF(t, e) } @@ -3844,7 +4216,7 @@ func testClientRequestBodyErrorUnexpectedEOF(t *testing.T, e env) { } func TestClientRequestBodyErrorCloseAfterLength(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testClientRequestBodyErrorCloseAfterLength(t, e) } @@ -3869,7 +4241,7 @@ func testClientRequestBodyErrorCloseAfterLength(t *testing.T, e env) { } func TestClientRequestBodyErrorCancel(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testClientRequestBodyErrorCancel(t, e) } @@ -3906,7 +4278,7 @@ func testClientRequestBodyErrorCancel(t *testing.T, e env) { } func TestClientRequestBodyErrorCancelStreamingInput(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testClientRequestBodyErrorCancelStreamingInput(t, e) } @@ -3940,77 +4312,73 @@ func testClientRequestBodyErrorCancelStreamingInput(t *testing.T, e env) { }) } -const clientAlwaysFailCredErrorMsg = "clientAlwaysFailCred always fails" - -var errClientAlwaysFailCred = errors.New(clientAlwaysFailCredErrorMsg) - -type clientAlwaysFailCred struct{} - -func (c clientAlwaysFailCred) ClientHandshake(ctx context.Context, addr string, rawConn net.Conn) (net.Conn, credentials.AuthInfo, error) { - return nil, nil, errClientAlwaysFailCred -} -func (c clientAlwaysFailCred) ServerHandshake(rawConn net.Conn) (net.Conn, credentials.AuthInfo, error) { - return rawConn, nil, nil -} -func (c clientAlwaysFailCred) Info() credentials.ProtocolInfo { - return credentials.ProtocolInfo{} -} -func (c clientAlwaysFailCred) Clone() credentials.TransportCredentials { - return nil -} -func (c clientAlwaysFailCred) OverrideServerName(s string) error { - return nil -} - -func TestDialWithBlockErrorOnBadCertificates(t *testing.T) { - te := newTest(t, env{name: "bad-cred", network: "tcp", security: "clientAlwaysFailCred", balancer: true}) - te.startServer(&testServer{security: te.e.security}) - defer te.tearDown() - - var ( - err error - opts []grpc.DialOption - ) - opts = append(opts, grpc.WithTransportCredentials(clientAlwaysFailCred{}), grpc.WithBlock()) - te.cc, err = grpc.Dial(te.srvAddr, opts...) - if err != errClientAlwaysFailCred { - te.t.Fatalf("Dial(%q) = %v, want %v", te.srvAddr, err, errClientAlwaysFailCred) +func TestClientResourceExhaustedCancelFullDuplex(t *testing.T) { + defer leakcheck.Check(t) + for _, e := range listTestEnv() { + if e.httpHandler { + // httpHandler write won't be blocked on flow control window. + continue + } + testClientResourceExhaustedCancelFullDuplex(t, e) } } -func TestFailFastRPCErrorOnBadCertificates(t *testing.T) { - te := newTest(t, env{name: "bad-cred", network: "tcp", security: "clientAlwaysFailCred", balancer: true}) - te.startServer(&testServer{security: te.e.security}) +func testClientResourceExhaustedCancelFullDuplex(t *testing.T, e env) { + te := newTest(t, e) + recvErr := make(chan error, 1) + ts := &funcServer{fullDuplexCall: func(stream testpb.TestService_FullDuplexCallServer) error { + defer close(recvErr) + _, err := stream.Recv() + if err != nil { + return status.Errorf(codes.Internal, "stream.Recv() got error: %v, want ", err) + } + // create a payload that's larger than the default flow control window. + payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, 10) + if err != nil { + return err + } + resp := &testpb.StreamingOutputCallResponse{ + Payload: payload, + } + ce := make(chan error) + go func() { + var err error + for { + if err = stream.Send(resp); err != nil { + break + } + } + ce <- err + }() + select { + case err = <-ce: + case <-time.After(10 * time.Second): + err = errors.New("10s timeout reached") + } + recvErr <- err + return err + }} + te.startServer(ts) defer te.tearDown() - + // set a low limit on receive message size to error with Resource Exhausted on + // client side when server send a large message. + te.maxClientReceiveMsgSize = newInt(10) cc := te.clientConn() tc := testpb.NewTestServiceClient(cc) - if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); !strings.Contains(err.Error(), clientAlwaysFailCredErrorMsg) { - te.t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want err.Error() contains %q", err, clientAlwaysFailCredErrorMsg) + stream, err := tc.FullDuplexCall(context.Background()) + if err != nil { + t.Fatalf("%v.FullDuplexCall(_) = _, %v, want ", tc, err) } -} - -func TestFailFastRPCWithNoBalancerErrorOnBadCertificates(t *testing.T) { - te := newTest(t, env{name: "bad-cred", network: "tcp", security: "clientAlwaysFailCred", balancer: false}) - te.startServer(&testServer{security: te.e.security}) - defer te.tearDown() - - cc := te.clientConn() - tc := testpb.NewTestServiceClient(cc) - if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); !strings.Contains(err.Error(), clientAlwaysFailCredErrorMsg) { - te.t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want err.Error() contains %q", err, clientAlwaysFailCredErrorMsg) + req := &testpb.StreamingOutputCallRequest{} + if err := stream.Send(req); err != nil { + t.Fatalf("%v.Send(%v) = %v, want ", stream, req, err) } -} - -func TestNonFailFastRPCWithNoBalancerErrorOnBadCertificates(t *testing.T) { - te := newTest(t, env{name: "bad-cred", network: "tcp", security: "clientAlwaysFailCred", balancer: false}) - te.startServer(&testServer{security: te.e.security}) - defer te.tearDown() - - cc := te.clientConn() - tc := testpb.NewTestServiceClient(cc) - if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}, grpc.FailFast(false)); !strings.Contains(err.Error(), clientAlwaysFailCredErrorMsg) { - te.t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want err.Error() contains %q", err, clientAlwaysFailCredErrorMsg) + if _, err := stream.Recv(); status.Code(err) != codes.ResourceExhausted { + t.Fatalf("%v.Recv() = _, %v, want _, error code: %s", stream, err, codes.ResourceExhausted) + } + err = <-recvErr + if status.Code(err) != codes.Canceled { + t.Fatalf("server got error %v, want error code: %s", err, codes.Canceled) } } @@ -4039,7 +4407,7 @@ func (c *clientTimeoutCreds) OverrideServerName(s string) error { } func TestNonFailFastRPCSucceedOnTimeoutCreds(t *testing.T) { - te := newTest(t, env{name: "timeout-cred", network: "tcp", security: "clientTimeoutCreds", balancer: false}) + te := newTest(t, env{name: "timeout-cred", network: "tcp", security: "clientTimeoutCreds", balancer: "v1"}) te.userAgent = testAppUA te.startServer(&testServer{security: te.e.security}) defer te.tearDown() @@ -4053,21 +4421,22 @@ func TestNonFailFastRPCSucceedOnTimeoutCreds(t *testing.T) { } type serverDispatchCred struct { - ready chan struct{} - rawConn net.Conn + rawConnCh chan net.Conn } func newServerDispatchCred() *serverDispatchCred { return &serverDispatchCred{ - ready: make(chan struct{}), + rawConnCh: make(chan net.Conn, 1), } } func (c *serverDispatchCred) ClientHandshake(ctx context.Context, addr string, rawConn net.Conn) (net.Conn, credentials.AuthInfo, error) { return rawConn, nil, nil } func (c *serverDispatchCred) ServerHandshake(rawConn net.Conn) (net.Conn, credentials.AuthInfo, error) { - c.rawConn = rawConn - close(c.ready) + select { + case c.rawConnCh <- rawConn: + default: + } return nil, nil, credentials.ErrConnDispatched } func (c *serverDispatchCred) Info() credentials.ProtocolInfo { @@ -4080,8 +4449,7 @@ func (c *serverDispatchCred) OverrideServerName(s string) error { return nil } func (c *serverDispatchCred) getRawConn() net.Conn { - <-c.ready - return c.rawConn + return <-c.rawConnCh } func TestServerCredsDispatch(t *testing.T) { @@ -4100,17 +4468,128 @@ func TestServerCredsDispatch(t *testing.T) { } defer cc.Close() + rawConn := cred.getRawConn() + // Give grpc a chance to see the error and potentially close the connection. + // And check that connection is not closed after that. + time.Sleep(100 * time.Millisecond) // Check rawConn is not closed. - if n, err := cred.getRawConn().Write([]byte{0}); n <= 0 || err != nil { + if n, err := rawConn.Write([]byte{0}); n <= 0 || err != nil { t.Errorf("Read() = %v, %v; want n>0, ", n, err) } } +type authorityCheckCreds struct { + got string +} + +func (c *authorityCheckCreds) ServerHandshake(rawConn net.Conn) (net.Conn, credentials.AuthInfo, error) { + return rawConn, nil, nil +} +func (c *authorityCheckCreds) ClientHandshake(ctx context.Context, authority string, rawConn net.Conn) (net.Conn, credentials.AuthInfo, error) { + c.got = authority + return rawConn, nil, nil +} +func (c *authorityCheckCreds) Info() credentials.ProtocolInfo { + return credentials.ProtocolInfo{} +} +func (c *authorityCheckCreds) Clone() credentials.TransportCredentials { + return c +} +func (c *authorityCheckCreds) OverrideServerName(s string) error { + return nil +} + +// This test makes sure that the authority client handshake gets is the endpoint +// in dial target, not the resolved ip address. +func TestCredsHandshakeAuthority(t *testing.T) { + const testAuthority = "test.auth.ori.ty" + + lis, err := net.Listen("tcp", "localhost:0") + if err != nil { + t.Fatalf("Failed to listen: %v", err) + } + cred := &authorityCheckCreds{} + s := grpc.NewServer() + go s.Serve(lis) + defer s.Stop() + + r, rcleanup := manual.GenerateAndRegisterManualResolver() + defer rcleanup() + + cc, err := grpc.Dial(r.Scheme()+":///"+testAuthority, grpc.WithTransportCredentials(cred)) + if err != nil { + t.Fatalf("grpc.Dial(%q) = %v", lis.Addr().String(), err) + } + defer cc.Close() + r.NewAddress([]resolver.Address{{Addr: lis.Addr().String()}}) + + ctx, cancel := context.WithTimeout(context.Background(), 100*time.Millisecond) + defer cancel() + for { + s := cc.GetState() + if s == connectivity.Ready { + break + } + if !cc.WaitForStateChange(ctx, s) { + // ctx got timeout or canceled. + t.Fatalf("ClientConn is not ready after 100 ms") + } + } + + if cred.got != testAuthority { + t.Fatalf("client creds got authority: %q, want: %q", cred.got, testAuthority) + } +} + +type clientFailCreds struct { + got string +} + +func (c *clientFailCreds) ServerHandshake(rawConn net.Conn) (net.Conn, credentials.AuthInfo, error) { + return rawConn, nil, nil +} +func (c *clientFailCreds) ClientHandshake(ctx context.Context, authority string, rawConn net.Conn) (net.Conn, credentials.AuthInfo, error) { + return nil, nil, fmt.Errorf("client handshake fails with fatal error") +} +func (c *clientFailCreds) Info() credentials.ProtocolInfo { + return credentials.ProtocolInfo{} +} +func (c *clientFailCreds) Clone() credentials.TransportCredentials { + return c +} +func (c *clientFailCreds) OverrideServerName(s string) error { + return nil +} + +// This test makes sure that failfast RPCs fail if client handshake fails with +// fatal errors. +func TestFailfastRPCFailOnFatalHandshakeError(t *testing.T) { + lis, err := net.Listen("tcp", "localhost:0") + if err != nil { + t.Fatalf("Failed to listen: %v", err) + } + defer lis.Close() + + cc, err := grpc.Dial("passthrough:///"+lis.Addr().String(), grpc.WithTransportCredentials(&clientFailCreds{})) + if err != nil { + t.Fatalf("grpc.Dial(_) = %v", err) + } + defer cc.Close() + + tc := testpb.NewTestServiceClient(cc) + // This unary call should fail, but not timeout. + ctx, cancel := context.WithTimeout(context.Background(), time.Second) + defer cancel() + if _, err := tc.EmptyCall(ctx, &testpb.Empty{}, grpc.FailFast(true)); status.Code(err) != codes.Unavailable { + t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want ", err) + } +} + func TestFlowControlLogicalRace(t *testing.T) { // Test for a regression of https://github.com/grpc/grpc-go/issues/632, // and other flow control bugs. - defer leakCheck(t)() + defer leakcheck.Check(t) const ( itemCount = 100 @@ -4118,7 +4597,7 @@ func TestFlowControlLogicalRace(t *testing.T) { recvCount = 2 maxFailures = 3 - requestTimeout = time.Second + requestTimeout = time.Second * 5 ) requestCount := 10000 @@ -4166,7 +4645,7 @@ func TestFlowControlLogicalRace(t *testing.T) { if err == io.EOF { break loop } - switch grpc.Code(err) { + switch status.Code(err) { case codes.DeadlineExceeded: break loop default: @@ -4217,76 +4696,6 @@ func (s *flowControlLogicalRaceServer) StreamingOutputCall(req *testpb.Streaming return nil } -// interestingGoroutines returns all goroutines we care about for the purpose -// of leak checking. It excludes testing or runtime ones. -func interestingGoroutines() (gs []string) { - buf := make([]byte, 2<<20) - buf = buf[:runtime.Stack(buf, true)] - for _, g := range strings.Split(string(buf), "\n\n") { - sl := strings.SplitN(g, "\n", 2) - if len(sl) != 2 { - continue - } - stack := strings.TrimSpace(sl[1]) - if strings.HasPrefix(stack, "testing.RunTests") { - continue - } - - if stack == "" || - strings.Contains(stack, "testing.Main(") || - strings.Contains(stack, "testing.tRunner(") || - strings.Contains(stack, "runtime.goexit") || - strings.Contains(stack, "created by runtime.gc") || - strings.Contains(stack, "created by runtime/trace.Start") || - strings.Contains(stack, "created by google3/base/go/log.init") || - strings.Contains(stack, "interestingGoroutines") || - strings.Contains(stack, "runtime.MHeap_Scavenger") || - strings.Contains(stack, "signal.signal_recv") || - strings.Contains(stack, "sigterm.handler") || - strings.Contains(stack, "runtime_mcall") || - strings.Contains(stack, "goroutine in C code") { - continue - } - gs = append(gs, g) - } - sort.Strings(gs) - return -} - -// leakCheck snapshots the currently-running goroutines and returns a -// function to be run at the end of tests to see whether any -// goroutines leaked. -func leakCheck(t testing.TB) func() { - orig := map[string]bool{} - for _, g := range interestingGoroutines() { - orig[g] = true - } - return func() { - // Loop, waiting for goroutines to shut down. - // Wait up to 10 seconds, but finish as quickly as possible. - deadline := time.Now().Add(10 * time.Second) - for { - var leaked []string - for _, g := range interestingGoroutines() { - if !orig[g] { - leaked = append(leaked, g) - } - } - if len(leaked) == 0 { - return - } - if time.Now().Before(deadline) { - time.Sleep(50 * time.Millisecond) - continue - } - for _, g := range leaked { - t.Errorf("Leaked goroutine: %v", g) - } - return - } - } -} - type lockingWriter struct { mu sync.Mutex w io.Writer @@ -4350,10 +4759,6 @@ func logOutputHasContents(v []byte, wakeup chan<- bool) bool { return false } -func init() { - grpclog.SetLogger(log.New(testLogOutput, "", log.LstdFlags)) -} - var verboseLogs = flag.Bool("verbose_logs", false, "show all grpclog output, without filtering") func noop() {} @@ -4435,14 +4840,14 @@ func (ss *stubServer) FullDuplexCall(stream testpb.TestService_FullDuplexCallSer } // Start starts the server and creates a client connected to it. -func (ss *stubServer) Start() error { +func (ss *stubServer) Start(sopts []grpc.ServerOption) error { lis, err := net.Listen("tcp", "localhost:0") if err != nil { return fmt.Errorf(`net.Listen("tcp", "localhost:0") = %v`, err) } ss.cleanups = append(ss.cleanups, func() { lis.Close() }) - s := grpc.NewServer() + s := grpc.NewServer(sopts...) testpb.RegisterTestServiceServer(s, ss) go s.Serve(lis) ss.cleanups = append(ss.cleanups, s.Stop) @@ -4475,7 +4880,7 @@ func TestUnaryProxyDoesNotForwardMetadata(t *testing.T) { return &testpb.Empty{}, nil }, } - if err := endpoint.Start(); err != nil { + if err := endpoint.Start(nil); err != nil { t.Fatalf("Error starting endpoint server: %v", err) } defer endpoint.Stop() @@ -4490,7 +4895,7 @@ func TestUnaryProxyDoesNotForwardMetadata(t *testing.T) { return endpoint.client.EmptyCall(ctx, in) }, } - if err := proxy.Start(); err != nil { + if err := proxy.Start(nil); err != nil { t.Fatalf("Error starting proxy server: %v", err) } defer proxy.Stop() @@ -4538,7 +4943,7 @@ func TestStreamingProxyDoesNotForwardMetadata(t *testing.T) { return nil }, } - if err := endpoint.Start(); err != nil { + if err := endpoint.Start(nil); err != nil { t.Fatalf("Error starting endpoint server: %v", err) } defer endpoint.Stop() @@ -4554,7 +4959,7 @@ func TestStreamingProxyDoesNotForwardMetadata(t *testing.T) { return doFDC(ctx, endpoint.client) }, } - if err := proxy.Start(); err != nil { + if err := proxy.Start(nil); err != nil { t.Fatalf("Error starting proxy server: %v", err) } defer proxy.Stop() @@ -4575,22 +4980,142 @@ func TestStreamingProxyDoesNotForwardMetadata(t *testing.T) { } } -type windowSizeConfig struct { - serverStream int32 - serverConn int32 - clientStream int32 - clientConn int32 -} +func TestStatsTagsAndTrace(t *testing.T) { + // Data added to context by client (typically in a stats handler). + tags := []byte{1, 5, 2, 4, 3} + trace := []byte{5, 2, 1, 3, 4} -func max(a, b int32) int32 { - if a > b { - return a + // endpoint ensures Tags() and Trace() in context match those that were added + // by the client and returns an error if not. + endpoint := &stubServer{ + emptyCall: func(ctx context.Context, in *testpb.Empty) (*testpb.Empty, error) { + md, _ := metadata.FromIncomingContext(ctx) + if tg := stats.Tags(ctx); !reflect.DeepEqual(tg, tags) { + return nil, status.Errorf(codes.Internal, "stats.Tags(%v)=%v; want %v", ctx, tg, tags) + } + if !reflect.DeepEqual(md["grpc-tags-bin"], []string{string(tags)}) { + return nil, status.Errorf(codes.Internal, "md['grpc-tags-bin']=%v; want %v", md["grpc-tags-bin"], tags) + } + if tr := stats.Trace(ctx); !reflect.DeepEqual(tr, trace) { + return nil, status.Errorf(codes.Internal, "stats.Trace(%v)=%v; want %v", ctx, tr, trace) + } + if !reflect.DeepEqual(md["grpc-trace-bin"], []string{string(trace)}) { + return nil, status.Errorf(codes.Internal, "md['grpc-trace-bin']=%v; want %v", md["grpc-trace-bin"], trace) + } + return &testpb.Empty{}, nil + }, + } + if err := endpoint.Start(nil); err != nil { + t.Fatalf("Error starting endpoint server: %v", err) + } + defer endpoint.Stop() + + ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) + defer cancel() + + testCases := []struct { + ctx context.Context + want codes.Code + }{ + {ctx: ctx, want: codes.Internal}, + {ctx: stats.SetTags(ctx, tags), want: codes.Internal}, + {ctx: stats.SetTrace(ctx, trace), want: codes.Internal}, + {ctx: stats.SetTags(stats.SetTrace(ctx, tags), tags), want: codes.Internal}, + {ctx: stats.SetTags(stats.SetTrace(ctx, trace), tags), want: codes.OK}, + } + + for _, tc := range testCases { + _, err := endpoint.client.EmptyCall(tc.ctx, &testpb.Empty{}) + if tc.want == codes.OK && err != nil { + t.Fatalf("endpoint.client.EmptyCall(%v, _) = _, %v; want _, nil", tc.ctx, err) + } + if s, ok := status.FromError(err); !ok || s.Code() != tc.want { + t.Fatalf("endpoint.client.EmptyCall(%v, _) = _, %v; want _, ", tc.ctx, err, tc.want) + } + } +} + +func TestTapTimeout(t *testing.T) { + sopts := []grpc.ServerOption{ + grpc.InTapHandle(func(ctx context.Context, _ *tap.Info) (context.Context, error) { + c, cancel := context.WithCancel(ctx) + // Call cancel instead of setting a deadline so we can detect which error + // occurred -- this cancellation (desired) or the client's deadline + // expired (indicating this cancellation did not affect the RPC). + time.AfterFunc(10*time.Millisecond, cancel) + return c, nil + }), + } + + ss := &stubServer{ + emptyCall: func(ctx context.Context, in *testpb.Empty) (*testpb.Empty, error) { + <-ctx.Done() + return &testpb.Empty{}, nil + }, + } + if err := ss.Start(sopts); err != nil { + t.Fatalf("Error starting endpoint server: %v", err) + } + defer ss.Stop() + + // This was known to be flaky; test several times. + for i := 0; i < 10; i++ { + // Set our own deadline in case the server hangs. + ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) + res, err := ss.client.EmptyCall(ctx, &testpb.Empty{}) + cancel() + if s, ok := status.FromError(err); !ok || s.Code() != codes.Canceled { + t.Fatalf("ss.client.EmptyCall(context.Background(), _) = %v, %v; want nil, ", res, err) + } + } + +} + +func TestClientWriteFailsAfterServerClosesStream(t *testing.T) { + ss := &stubServer{ + fullDuplexCall: func(stream testpb.TestService_FullDuplexCallServer) error { + return status.Errorf(codes.Internal, "") + }, + } + sopts := []grpc.ServerOption{} + if err := ss.Start(sopts); err != nil { + t.Fatalf("Error starting endpoing server: %v", err) + } + defer ss.Stop() + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + stream, err := ss.client.FullDuplexCall(ctx) + if err != nil { + t.Fatalf("Error while creating stream: %v", err) + } + for { + if err := stream.Send(&testpb.StreamingOutputCallRequest{}); err == nil { + time.Sleep(5 * time.Millisecond) + } else if err == io.EOF { + break // Success. + } else { + t.Fatalf("stream.Send(_) = %v, want io.EOF", err) + } + } + +} + +type windowSizeConfig struct { + serverStream int32 + serverConn int32 + clientStream int32 + clientConn int32 +} + +func max(a, b int32) int32 { + if a > b { + return a } return b } func TestConfigurableWindowSizeWithLargeWindow(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) wc := windowSizeConfig{ serverStream: 8 * 1024 * 1024, serverConn: 12 * 1024 * 1024, @@ -4603,7 +5128,7 @@ func TestConfigurableWindowSizeWithLargeWindow(t *testing.T) { } func TestConfigurableWindowSizeWithSmallWindow(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) wc := windowSizeConfig{ serverStream: 1, serverConn: 1, @@ -4641,11 +5166,11 @@ func testConfigurableWindowSize(t *testing.T, e env, wc windowSizeConfig) { } respParams := []*testpb.ResponseParameters{ { - Size: proto.Int32(messageSize), + Size: messageSize, }, } req := &testpb.StreamingOutputCallRequest{ - ResponseType: testpb.PayloadType_COMPRESSABLE.Enum(), + ResponseType: testpb.PayloadType_COMPRESSABLE, ResponseParameters: respParams, Payload: payload, } @@ -4698,7 +5223,7 @@ func authHandle(ctx context.Context, info *tap.Info) (context.Context, error) { } func TestPerRPCCredentialsViaDialOptions(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testPerRPCCredentialsViaDialOptions(t, e) } @@ -4719,7 +5244,7 @@ func testPerRPCCredentialsViaDialOptions(t *testing.T, e env) { } func TestPerRPCCredentialsViaCallOptions(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testPerRPCCredentialsViaCallOptions(t, e) } @@ -4739,7 +5264,7 @@ func testPerRPCCredentialsViaCallOptions(t *testing.T, e env) { } func TestPerRPCCredentialsViaDialOptionsAndCallOptions(t *testing.T) { - defer leakCheck(t)() + defer leakcheck.Check(t) for _, e := range listTestEnv() { testPerRPCCredentialsViaDialOptionsAndCallOptions(t, e) } @@ -4778,3 +5303,890 @@ func testPerRPCCredentialsViaDialOptionsAndCallOptions(t *testing.T, e env) { t.Fatalf("Test failed. Reason: %v", err) } } + +func TestWaitForReadyConnection(t *testing.T) { + defer leakcheck.Check(t) + for _, e := range listTestEnv() { + testWaitForReadyConnection(t, e) + } + +} + +func testWaitForReadyConnection(t *testing.T, e env) { + te := newTest(t, e) + te.userAgent = testAppUA + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + + cc := te.clientConn() // Non-blocking dial. + tc := testpb.NewTestServiceClient(cc) + ctx, cancel := context.WithTimeout(context.Background(), time.Second) + defer cancel() + state := cc.GetState() + // Wait for connection to be Ready. + for ; state != connectivity.Ready && cc.WaitForStateChange(ctx, state); state = cc.GetState() { + } + if state != connectivity.Ready { + t.Fatalf("Want connection state to be Ready, got %v", state) + } + ctx, cancel = context.WithTimeout(context.Background(), time.Second) + defer cancel() + // Make a fail-fast RPC. + if _, err := tc.EmptyCall(ctx, &testpb.Empty{}); err != nil { + t.Fatalf("TestService/EmptyCall(_,_) = _, %v, want _, nil", err) + } +} + +type errCodec struct { + noError bool +} + +func (c *errCodec) Marshal(v interface{}) ([]byte, error) { + if c.noError { + return []byte{}, nil + } + return nil, fmt.Errorf("3987^12 + 4365^12 = 4472^12") +} + +func (c *errCodec) Unmarshal(data []byte, v interface{}) error { + return nil +} + +func (c *errCodec) String() string { + return "Fermat's near-miss." +} + +func TestEncodeDoesntPanic(t *testing.T) { + defer leakcheck.Check(t) + for _, e := range listTestEnv() { + testEncodeDoesntPanic(t, e) + } +} + +func testEncodeDoesntPanic(t *testing.T, e env) { + te := newTest(t, e) + erc := &errCodec{} + te.customCodec = erc + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + te.customCodec = nil + tc := testpb.NewTestServiceClient(te.clientConn()) + // Failure case, should not panic. + tc.EmptyCall(context.Background(), &testpb.Empty{}) + erc.noError = true + // Passing case. + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); err != nil { + t.Fatalf("EmptyCall(_, _) = _, %v, want _, ", err) + } +} + +func TestSvrWriteStatusEarlyWrite(t *testing.T) { + defer leakcheck.Check(t) + for _, e := range listTestEnv() { + testSvrWriteStatusEarlyWrite(t, e) + } +} + +func testSvrWriteStatusEarlyWrite(t *testing.T, e env) { + te := newTest(t, e) + const smallSize = 1024 + const largeSize = 2048 + const extraLargeSize = 4096 + te.maxServerReceiveMsgSize = newInt(largeSize) + te.maxServerSendMsgSize = newInt(largeSize) + smallPayload, err := newPayload(testpb.PayloadType_COMPRESSABLE, smallSize) + if err != nil { + t.Fatal(err) + } + extraLargePayload, err := newPayload(testpb.PayloadType_COMPRESSABLE, extraLargeSize) + if err != nil { + t.Fatal(err) + } + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + tc := testpb.NewTestServiceClient(te.clientConn()) + respParam := []*testpb.ResponseParameters{ + { + Size: int32(smallSize), + }, + } + sreq := &testpb.StreamingOutputCallRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseParameters: respParam, + Payload: extraLargePayload, + } + // Test recv case: server receives a message larger than maxServerReceiveMsgSize. + stream, err := tc.FullDuplexCall(te.ctx) + if err != nil { + t.Fatalf("%v.FullDuplexCall(_) = _, %v, want ", tc, err) + } + if err = stream.Send(sreq); err != nil { + t.Fatalf("%v.Send() = _, %v, want ", stream, err) + } + if _, err = stream.Recv(); err == nil || status.Code(err) != codes.ResourceExhausted { + t.Fatalf("%v.Recv() = _, %v, want _, error code: %s", stream, err, codes.ResourceExhausted) + } + // Test send case: server sends a message larger than maxServerSendMsgSize. + sreq.Payload = smallPayload + respParam[0].Size = int32(extraLargeSize) + + stream, err = tc.FullDuplexCall(te.ctx) + if err != nil { + t.Fatalf("%v.FullDuplexCall(_) = _, %v, want ", tc, err) + } + if err = stream.Send(sreq); err != nil { + t.Fatalf("%v.Send(%v) = %v, want ", stream, sreq, err) + } + if _, err = stream.Recv(); err == nil || status.Code(err) != codes.ResourceExhausted { + t.Fatalf("%v.Recv() = _, %v, want _, error code: %s", stream, err, codes.ResourceExhausted) + } +} + +// The following functions with function name ending with TD indicates that they +// should be deleted after old service config API is deprecated and deleted. +func testServiceConfigSetupTD(t *testing.T, e env) (*test, chan grpc.ServiceConfig) { + te := newTest(t, e) + // We write before read. + ch := make(chan grpc.ServiceConfig, 1) + te.sc = ch + te.userAgent = testAppUA + te.declareLogNoise( + "transport: http2Client.notifyError got notified that the client transport was broken EOF", + "grpc: addrConn.transportMonitor exits due to: grpc: the connection is closing", + "grpc: addrConn.resetTransport failed to create client transport: connection error", + "Failed to dial : context canceled; please retry.", + ) + return te, ch +} + +func TestServiceConfigGetMethodConfigTD(t *testing.T) { + defer leakcheck.Check(t) + for _, e := range listTestEnv() { + testGetMethodConfigTD(t, e) + } +} + +func testGetMethodConfigTD(t *testing.T, e env) { + te, ch := testServiceConfigSetupTD(t, e) + defer te.tearDown() + + mc1 := grpc.MethodConfig{ + WaitForReady: newBool(true), + Timeout: newDuration(time.Millisecond), + } + mc2 := grpc.MethodConfig{WaitForReady: newBool(false)} + m := make(map[string]grpc.MethodConfig) + m["/grpc.testing.TestService/EmptyCall"] = mc1 + m["/grpc.testing.TestService/"] = mc2 + sc := grpc.ServiceConfig{ + Methods: m, + } + ch <- sc + + cc := te.clientConn() + tc := testpb.NewTestServiceClient(cc) + // The following RPCs are expected to become non-fail-fast ones with 1ms deadline. + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); status.Code(err) != codes.DeadlineExceeded { + t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want _, %s", err, codes.DeadlineExceeded) + } + + m = make(map[string]grpc.MethodConfig) + m["/grpc.testing.TestService/UnaryCall"] = mc1 + m["/grpc.testing.TestService/"] = mc2 + sc = grpc.ServiceConfig{ + Methods: m, + } + ch <- sc + // Wait for the new service config to propagate. + for { + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); status.Code(err) == codes.DeadlineExceeded { + continue + } + break + } + // The following RPCs are expected to become fail-fast. + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); status.Code(err) != codes.Unavailable { + t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want _, %s", err, codes.Unavailable) + } +} + +func TestServiceConfigWaitForReadyTD(t *testing.T) { + defer leakcheck.Check(t) + for _, e := range listTestEnv() { + testServiceConfigWaitForReadyTD(t, e) + } +} + +func testServiceConfigWaitForReadyTD(t *testing.T, e env) { + te, ch := testServiceConfigSetupTD(t, e) + defer te.tearDown() + + // Case1: Client API set failfast to be false, and service config set wait_for_ready to be false, Client API should win, and the rpc will wait until deadline exceeds. + mc := grpc.MethodConfig{ + WaitForReady: newBool(false), + Timeout: newDuration(time.Millisecond), + } + m := make(map[string]grpc.MethodConfig) + m["/grpc.testing.TestService/EmptyCall"] = mc + m["/grpc.testing.TestService/FullDuplexCall"] = mc + sc := grpc.ServiceConfig{ + Methods: m, + } + ch <- sc + + cc := te.clientConn() + tc := testpb.NewTestServiceClient(cc) + // The following RPCs are expected to become non-fail-fast ones with 1ms deadline. + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}, grpc.FailFast(false)); status.Code(err) != codes.DeadlineExceeded { + t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want _, %s", err, codes.DeadlineExceeded) + } + if _, err := tc.FullDuplexCall(context.Background(), grpc.FailFast(false)); status.Code(err) != codes.DeadlineExceeded { + t.Fatalf("TestService/FullDuplexCall(_) = _, %v, want %s", err, codes.DeadlineExceeded) + } + + // Generate a service config update. + // Case2: Client API does not set failfast, and service config set wait_for_ready to be true, and the rpc will wait until deadline exceeds. + mc.WaitForReady = newBool(true) + m = make(map[string]grpc.MethodConfig) + m["/grpc.testing.TestService/EmptyCall"] = mc + m["/grpc.testing.TestService/FullDuplexCall"] = mc + sc = grpc.ServiceConfig{ + Methods: m, + } + ch <- sc + + // Wait for the new service config to take effect. + mc = cc.GetMethodConfig("/grpc.testing.TestService/EmptyCall") + for { + if !*mc.WaitForReady { + time.Sleep(100 * time.Millisecond) + mc = cc.GetMethodConfig("/grpc.testing.TestService/EmptyCall") + continue + } + break + } + // The following RPCs are expected to become non-fail-fast ones with 1ms deadline. + if _, err := tc.EmptyCall(context.Background(), &testpb.Empty{}); status.Code(err) != codes.DeadlineExceeded { + t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want _, %s", err, codes.DeadlineExceeded) + } + if _, err := tc.FullDuplexCall(context.Background()); status.Code(err) != codes.DeadlineExceeded { + t.Fatalf("TestService/FullDuplexCall(_) = _, %v, want %s", err, codes.DeadlineExceeded) + } +} + +func TestServiceConfigTimeoutTD(t *testing.T) { + defer leakcheck.Check(t) + for _, e := range listTestEnv() { + testServiceConfigTimeoutTD(t, e) + } +} + +func testServiceConfigTimeoutTD(t *testing.T, e env) { + te, ch := testServiceConfigSetupTD(t, e) + defer te.tearDown() + + // Case1: Client API sets timeout to be 1ns and ServiceConfig sets timeout to be 1hr. Timeout should be 1ns (min of 1ns and 1hr) and the rpc will wait until deadline exceeds. + mc := grpc.MethodConfig{ + Timeout: newDuration(time.Hour), + } + m := make(map[string]grpc.MethodConfig) + m["/grpc.testing.TestService/EmptyCall"] = mc + m["/grpc.testing.TestService/FullDuplexCall"] = mc + sc := grpc.ServiceConfig{ + Methods: m, + } + ch <- sc + + cc := te.clientConn() + tc := testpb.NewTestServiceClient(cc) + // The following RPCs are expected to become non-fail-fast ones with 1ns deadline. + ctx, cancel := context.WithTimeout(context.Background(), time.Nanosecond) + if _, err := tc.EmptyCall(ctx, &testpb.Empty{}, grpc.FailFast(false)); status.Code(err) != codes.DeadlineExceeded { + t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want _, %s", err, codes.DeadlineExceeded) + } + cancel() + ctx, cancel = context.WithTimeout(context.Background(), time.Nanosecond) + if _, err := tc.FullDuplexCall(ctx, grpc.FailFast(false)); status.Code(err) != codes.DeadlineExceeded { + t.Fatalf("TestService/FullDuplexCall(_) = _, %v, want %s", err, codes.DeadlineExceeded) + } + cancel() + + // Generate a service config update. + // Case2: Client API sets timeout to be 1hr and ServiceConfig sets timeout to be 1ns. Timeout should be 1ns (min of 1ns and 1hr) and the rpc will wait until deadline exceeds. + mc.Timeout = newDuration(time.Nanosecond) + m = make(map[string]grpc.MethodConfig) + m["/grpc.testing.TestService/EmptyCall"] = mc + m["/grpc.testing.TestService/FullDuplexCall"] = mc + sc = grpc.ServiceConfig{ + Methods: m, + } + ch <- sc + + // Wait for the new service config to take effect. + mc = cc.GetMethodConfig("/grpc.testing.TestService/FullDuplexCall") + for { + if *mc.Timeout != time.Nanosecond { + time.Sleep(100 * time.Millisecond) + mc = cc.GetMethodConfig("/grpc.testing.TestService/FullDuplexCall") + continue + } + break + } + + ctx, cancel = context.WithTimeout(context.Background(), time.Hour) + if _, err := tc.EmptyCall(ctx, &testpb.Empty{}, grpc.FailFast(false)); status.Code(err) != codes.DeadlineExceeded { + t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want _, %s", err, codes.DeadlineExceeded) + } + cancel() + + ctx, cancel = context.WithTimeout(context.Background(), time.Hour) + if _, err := tc.FullDuplexCall(ctx, grpc.FailFast(false)); status.Code(err) != codes.DeadlineExceeded { + t.Fatalf("TestService/FullDuplexCall(_) = _, %v, want %s", err, codes.DeadlineExceeded) + } + cancel() +} + +func TestServiceConfigMaxMsgSizeTD(t *testing.T) { + defer leakcheck.Check(t) + for _, e := range listTestEnv() { + testServiceConfigMaxMsgSizeTD(t, e) + } +} + +func testServiceConfigMaxMsgSizeTD(t *testing.T, e env) { + // Setting up values and objects shared across all test cases. + const smallSize = 1 + const largeSize = 1024 + const extraLargeSize = 2048 + + smallPayload, err := newPayload(testpb.PayloadType_COMPRESSABLE, smallSize) + if err != nil { + t.Fatal(err) + } + largePayload, err := newPayload(testpb.PayloadType_COMPRESSABLE, largeSize) + if err != nil { + t.Fatal(err) + } + extraLargePayload, err := newPayload(testpb.PayloadType_COMPRESSABLE, extraLargeSize) + if err != nil { + t.Fatal(err) + } + + mc := grpc.MethodConfig{ + MaxReqSize: newInt(extraLargeSize), + MaxRespSize: newInt(extraLargeSize), + } + + m := make(map[string]grpc.MethodConfig) + m["/grpc.testing.TestService/UnaryCall"] = mc + m["/grpc.testing.TestService/FullDuplexCall"] = mc + sc := grpc.ServiceConfig{ + Methods: m, + } + // Case1: sc set maxReqSize to 2048 (send), maxRespSize to 2048 (recv). + te1, ch1 := testServiceConfigSetupTD(t, e) + te1.startServer(&testServer{security: e.security}) + defer te1.tearDown() + + ch1 <- sc + tc := testpb.NewTestServiceClient(te1.clientConn()) + + req := &testpb.SimpleRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseSize: int32(extraLargeSize), + Payload: smallPayload, + } + // Test for unary RPC recv. + if _, err := tc.UnaryCall(context.Background(), req); err == nil || status.Code(err) != codes.ResourceExhausted { + t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want _, error code: %s", err, codes.ResourceExhausted) + } + + // Test for unary RPC send. + req.Payload = extraLargePayload + req.ResponseSize = int32(smallSize) + if _, err := tc.UnaryCall(context.Background(), req); err == nil || status.Code(err) != codes.ResourceExhausted { + t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want _, error code: %s", err, codes.ResourceExhausted) + } + + // Test for streaming RPC recv. + respParam := []*testpb.ResponseParameters{ + { + Size: int32(extraLargeSize), + }, + } + sreq := &testpb.StreamingOutputCallRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseParameters: respParam, + Payload: smallPayload, + } + stream, err := tc.FullDuplexCall(te1.ctx) + if err != nil { + t.Fatalf("%v.FullDuplexCall(_) = _, %v, want ", tc, err) + } + if err := stream.Send(sreq); err != nil { + t.Fatalf("%v.Send(%v) = %v, want ", stream, sreq, err) + } + if _, err := stream.Recv(); err == nil || status.Code(err) != codes.ResourceExhausted { + t.Fatalf("%v.Recv() = _, %v, want _, error code: %s", stream, err, codes.ResourceExhausted) + } + + // Test for streaming RPC send. + respParam[0].Size = int32(smallSize) + sreq.Payload = extraLargePayload + stream, err = tc.FullDuplexCall(te1.ctx) + if err != nil { + t.Fatalf("%v.FullDuplexCall(_) = _, %v, want ", tc, err) + } + if err := stream.Send(sreq); err == nil || status.Code(err) != codes.ResourceExhausted { + t.Fatalf("%v.Send(%v) = %v, want _, error code: %s", stream, sreq, err, codes.ResourceExhausted) + } + + // Case2: Client API set maxReqSize to 1024 (send), maxRespSize to 1024 (recv). Sc sets maxReqSize to 2048 (send), maxRespSize to 2048 (recv). + te2, ch2 := testServiceConfigSetupTD(t, e) + te2.maxClientReceiveMsgSize = newInt(1024) + te2.maxClientSendMsgSize = newInt(1024) + te2.startServer(&testServer{security: e.security}) + defer te2.tearDown() + ch2 <- sc + tc = testpb.NewTestServiceClient(te2.clientConn()) + + // Test for unary RPC recv. + req.Payload = smallPayload + req.ResponseSize = int32(largeSize) + + if _, err := tc.UnaryCall(context.Background(), req); err == nil || status.Code(err) != codes.ResourceExhausted { + t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want _, error code: %s", err, codes.ResourceExhausted) + } + + // Test for unary RPC send. + req.Payload = largePayload + req.ResponseSize = int32(smallSize) + if _, err := tc.UnaryCall(context.Background(), req); err == nil || status.Code(err) != codes.ResourceExhausted { + t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want _, error code: %s", err, codes.ResourceExhausted) + } + + // Test for streaming RPC recv. + stream, err = tc.FullDuplexCall(te2.ctx) + respParam[0].Size = int32(largeSize) + sreq.Payload = smallPayload + if err != nil { + t.Fatalf("%v.FullDuplexCall(_) = _, %v, want ", tc, err) + } + if err := stream.Send(sreq); err != nil { + t.Fatalf("%v.Send(%v) = %v, want ", stream, sreq, err) + } + if _, err := stream.Recv(); err == nil || status.Code(err) != codes.ResourceExhausted { + t.Fatalf("%v.Recv() = _, %v, want _, error code: %s", stream, err, codes.ResourceExhausted) + } + + // Test for streaming RPC send. + respParam[0].Size = int32(smallSize) + sreq.Payload = largePayload + stream, err = tc.FullDuplexCall(te2.ctx) + if err != nil { + t.Fatalf("%v.FullDuplexCall(_) = _, %v, want ", tc, err) + } + if err := stream.Send(sreq); err == nil || status.Code(err) != codes.ResourceExhausted { + t.Fatalf("%v.Send(%v) = %v, want _, error code: %s", stream, sreq, err, codes.ResourceExhausted) + } + + // Case3: Client API set maxReqSize to 4096 (send), maxRespSize to 4096 (recv). Sc sets maxReqSize to 2048 (send), maxRespSize to 2048 (recv). + te3, ch3 := testServiceConfigSetupTD(t, e) + te3.maxClientReceiveMsgSize = newInt(4096) + te3.maxClientSendMsgSize = newInt(4096) + te3.startServer(&testServer{security: e.security}) + defer te3.tearDown() + ch3 <- sc + tc = testpb.NewTestServiceClient(te3.clientConn()) + + // Test for unary RPC recv. + req.Payload = smallPayload + req.ResponseSize = int32(largeSize) + + if _, err := tc.UnaryCall(context.Background(), req); err != nil { + t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want ", err) + } + + req.ResponseSize = int32(extraLargeSize) + if _, err := tc.UnaryCall(context.Background(), req); err == nil || status.Code(err) != codes.ResourceExhausted { + t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want _, error code: %s", err, codes.ResourceExhausted) + } + + // Test for unary RPC send. + req.Payload = largePayload + req.ResponseSize = int32(smallSize) + if _, err := tc.UnaryCall(context.Background(), req); err != nil { + t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want ", err) + } + + req.Payload = extraLargePayload + if _, err := tc.UnaryCall(context.Background(), req); err == nil || status.Code(err) != codes.ResourceExhausted { + t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want _, error code: %s", err, codes.ResourceExhausted) + } + + // Test for streaming RPC recv. + stream, err = tc.FullDuplexCall(te3.ctx) + if err != nil { + t.Fatalf("%v.FullDuplexCall(_) = _, %v, want ", tc, err) + } + respParam[0].Size = int32(largeSize) + sreq.Payload = smallPayload + + if err := stream.Send(sreq); err != nil { + t.Fatalf("%v.Send(%v) = %v, want ", stream, sreq, err) + } + if _, err := stream.Recv(); err != nil { + t.Fatalf("%v.Recv() = _, %v, want ", stream, err) + } + + respParam[0].Size = int32(extraLargeSize) + + if err := stream.Send(sreq); err != nil { + t.Fatalf("%v.Send(%v) = %v, want ", stream, sreq, err) + } + if _, err := stream.Recv(); err == nil || status.Code(err) != codes.ResourceExhausted { + t.Fatalf("%v.Recv() = _, %v, want _, error code: %s", stream, err, codes.ResourceExhausted) + } + + // Test for streaming RPC send. + respParam[0].Size = int32(smallSize) + sreq.Payload = largePayload + stream, err = tc.FullDuplexCall(te3.ctx) + if err != nil { + t.Fatalf("%v.FullDuplexCall(_) = _, %v, want ", tc, err) + } + if err := stream.Send(sreq); err != nil { + t.Fatalf("%v.Send(%v) = %v, want ", stream, sreq, err) + } + sreq.Payload = extraLargePayload + if err := stream.Send(sreq); err == nil || status.Code(err) != codes.ResourceExhausted { + t.Fatalf("%v.Send(%v) = %v, want _, error code: %s", stream, sreq, err, codes.ResourceExhausted) + } +} + +func TestMethodFromServerStream(t *testing.T) { + defer leakcheck.Check(t) + const testMethod = "/package.service/method" + e := tcpClearRREnv + te := newTest(t, e) + var method string + var ok bool + te.unknownHandler = func(srv interface{}, stream grpc.ServerStream) error { + method, ok = grpc.MethodFromServerStream(stream) + return nil + } + + te.startServer(nil) + defer te.tearDown() + _ = te.clientConn().Invoke(context.Background(), testMethod, nil, nil) + if !ok || method != testMethod { + t.Fatalf("Invoke with method %q, got %q, %v, want %q, true", testMethod, method, ok, testMethod) + } +} + +func TestInterceptorCanAccessCallOptions(t *testing.T) { + defer leakcheck.Check(t) + e := tcpClearRREnv + te := newTest(t, e) + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + + type observedOptions struct { + headers []*metadata.MD + trailers []*metadata.MD + peer []*peer.Peer + creds []credentials.PerRPCCredentials + failFast []bool + maxRecvSize []int + maxSendSize []int + compressor []string + subtype []string + } + var observedOpts observedOptions + populateOpts := func(opts []grpc.CallOption) { + for _, o := range opts { + switch o := o.(type) { + case grpc.HeaderCallOption: + observedOpts.headers = append(observedOpts.headers, o.HeaderAddr) + case grpc.TrailerCallOption: + observedOpts.trailers = append(observedOpts.trailers, o.TrailerAddr) + case grpc.PeerCallOption: + observedOpts.peer = append(observedOpts.peer, o.PeerAddr) + case grpc.PerRPCCredsCallOption: + observedOpts.creds = append(observedOpts.creds, o.Creds) + case grpc.FailFastCallOption: + observedOpts.failFast = append(observedOpts.failFast, o.FailFast) + case grpc.MaxRecvMsgSizeCallOption: + observedOpts.maxRecvSize = append(observedOpts.maxRecvSize, o.MaxRecvMsgSize) + case grpc.MaxSendMsgSizeCallOption: + observedOpts.maxSendSize = append(observedOpts.maxSendSize, o.MaxSendMsgSize) + case grpc.CompressorCallOption: + observedOpts.compressor = append(observedOpts.compressor, o.CompressorType) + case grpc.ContentSubtypeCallOption: + observedOpts.subtype = append(observedOpts.subtype, o.ContentSubtype) + } + } + } + + te.unaryClientInt = func(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error { + populateOpts(opts) + return nil + } + te.streamClientInt = func(ctx context.Context, desc *grpc.StreamDesc, cc *grpc.ClientConn, method string, streamer grpc.Streamer, opts ...grpc.CallOption) (grpc.ClientStream, error) { + populateOpts(opts) + return nil, nil + } + + defaults := []grpc.CallOption{ + grpc.FailFast(false), + grpc.MaxCallRecvMsgSize(1010), + } + tc := testpb.NewTestServiceClient(te.clientConn(grpc.WithDefaultCallOptions(defaults...))) + + var headers metadata.MD + var trailers metadata.MD + var pr peer.Peer + tc.UnaryCall(context.Background(), &testpb.SimpleRequest{}, + grpc.MaxCallRecvMsgSize(100), + grpc.MaxCallSendMsgSize(200), + grpc.PerRPCCredentials(testPerRPCCredentials{}), + grpc.Header(&headers), + grpc.Trailer(&trailers), + grpc.Peer(&pr)) + expected := observedOptions{ + failFast: []bool{false}, + maxRecvSize: []int{1010, 100}, + maxSendSize: []int{200}, + creds: []credentials.PerRPCCredentials{testPerRPCCredentials{}}, + headers: []*metadata.MD{&headers}, + trailers: []*metadata.MD{&trailers}, + peer: []*peer.Peer{&pr}, + } + + if !reflect.DeepEqual(expected, observedOpts) { + t.Errorf("unary call did not observe expected options: expected %#v, got %#v", expected, observedOpts) + } + + observedOpts = observedOptions{} // reset + + tc.StreamingInputCall(context.Background(), + grpc.FailFast(true), + grpc.MaxCallSendMsgSize(2020), + grpc.UseCompressor("comp-type"), + grpc.CallContentSubtype("json")) + expected = observedOptions{ + failFast: []bool{false, true}, + maxRecvSize: []int{1010}, + maxSendSize: []int{2020}, + compressor: []string{"comp-type"}, + subtype: []string{"json"}, + } + + if !reflect.DeepEqual(expected, observedOpts) { + t.Errorf("streaming call did not observe expected options: expected %#v, got %#v", expected, observedOpts) + } +} + +func TestCompressorRegister(t *testing.T) { + defer leakcheck.Check(t) + for _, e := range listTestEnv() { + testCompressorRegister(t, e) + } +} + +func testCompressorRegister(t *testing.T, e env) { + te := newTest(t, e) + te.clientCompression = false + te.serverCompression = false + te.clientUseCompression = true + + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + tc := testpb.NewTestServiceClient(te.clientConn()) + + // Unary call + const argSize = 271828 + const respSize = 314159 + payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, argSize) + if err != nil { + t.Fatal(err) + } + req := &testpb.SimpleRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseSize: respSize, + Payload: payload, + } + ctx := metadata.NewOutgoingContext(context.Background(), metadata.Pairs("something", "something")) + if _, err := tc.UnaryCall(ctx, req); err != nil { + t.Fatalf("TestService/UnaryCall(_, _) = _, %v, want _, ", err) + } + // Streaming RPC + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + stream, err := tc.FullDuplexCall(ctx) + if err != nil { + t.Fatalf("%v.FullDuplexCall(_) = _, %v, want ", tc, err) + } + respParam := []*testpb.ResponseParameters{ + { + Size: 31415, + }, + } + payload, err = newPayload(testpb.PayloadType_COMPRESSABLE, int32(31415)) + if err != nil { + t.Fatal(err) + } + sreq := &testpb.StreamingOutputCallRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE, + ResponseParameters: respParam, + Payload: payload, + } + if err := stream.Send(sreq); err != nil { + t.Fatalf("%v.Send(%v) = %v, want ", stream, sreq, err) + } + if _, err := stream.Recv(); err != nil { + t.Fatalf("%v.Recv() = %v, want ", stream, err) + } +} + +func TestServeExitsWhenListenerClosed(t *testing.T) { + defer leakcheck.Check(t) + + ss := &stubServer{ + emptyCall: func(context.Context, *testpb.Empty) (*testpb.Empty, error) { + return &testpb.Empty{}, nil + }, + } + + s := grpc.NewServer() + testpb.RegisterTestServiceServer(s, ss) + + lis, err := net.Listen("tcp", "localhost:0") + if err != nil { + t.Fatalf("Failed to create listener: %v", err) + } + + done := make(chan struct{}) + go func() { + s.Serve(lis) + close(done) + }() + + cc, err := grpc.Dial(lis.Addr().String(), grpc.WithInsecure(), grpc.WithBlock()) + if err != nil { + t.Fatalf("Failed to dial server: %v", err) + } + defer cc.Close() + c := testpb.NewTestServiceClient(cc) + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + if _, err := c.EmptyCall(ctx, &testpb.Empty{}); err != nil { + t.Fatalf("Failed to send test RPC to server: %v", err) + } + + if err := lis.Close(); err != nil { + t.Fatalf("Failed to close listener: %v", err) + } + const timeout = 5 * time.Second + timer := time.NewTimer(timeout) + select { + case <-done: + return + case <-timer.C: + t.Fatalf("Serve did not return after %v", timeout) + } +} + +func TestClientDoesntDeadlockWhileWritingErrornousLargeMessages(t *testing.T) { + defer leakcheck.Check(t) + for _, e := range listTestEnv() { + if e.httpHandler { + continue + } + testClientDoesntDeadlockWhileWritingErrornousLargeMessages(t, e) + } +} + +func testClientDoesntDeadlockWhileWritingErrornousLargeMessages(t *testing.T, e env) { + te := newTest(t, e) + te.userAgent = testAppUA + smallSize := 1024 + te.maxServerReceiveMsgSize = &smallSize + te.startServer(&testServer{security: e.security}) + defer te.tearDown() + tc := testpb.NewTestServiceClient(te.clientConn()) + payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, 1048576) + if err != nil { + t.Fatal(err) + } + req := &testpb.SimpleRequest{ + ResponseType: testpb.PayloadType_COMPRESSABLE, + Payload: payload, + } + var wg sync.WaitGroup + for i := 0; i < 10; i++ { + wg.Add(1) + go func() { + defer wg.Done() + for j := 0; j < 100; j++ { + ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(time.Second*10)) + defer cancel() + if _, err := tc.UnaryCall(ctx, req); status.Code(err) != codes.ResourceExhausted { + t.Errorf("TestService/UnaryCall(_,_) = _. %v, want code: %s", err, codes.ResourceExhausted) + return + } + } + }() + } + wg.Wait() +} + +const clientAlwaysFailCredErrorMsg = "clientAlwaysFailCred always fails" + +var errClientAlwaysFailCred = errors.New(clientAlwaysFailCredErrorMsg) + +type clientAlwaysFailCred struct{} + +func (c clientAlwaysFailCred) ClientHandshake(ctx context.Context, addr string, rawConn net.Conn) (net.Conn, credentials.AuthInfo, error) { + return nil, nil, errClientAlwaysFailCred +} +func (c clientAlwaysFailCred) ServerHandshake(rawConn net.Conn) (net.Conn, credentials.AuthInfo, error) { + return rawConn, nil, nil +} +func (c clientAlwaysFailCred) Info() credentials.ProtocolInfo { + return credentials.ProtocolInfo{} +} +func (c clientAlwaysFailCred) Clone() credentials.TransportCredentials { + return nil +} +func (c clientAlwaysFailCred) OverrideServerName(s string) error { + return nil +} + +func TestFailFastRPCErrorOnBadCertificates(t *testing.T) { + te := newTest(t, env{name: "bad-cred", network: "tcp", security: "clientAlwaysFailCred", balancer: "round_robin"}) + te.startServer(&testServer{security: te.e.security}) + defer te.tearDown() + + opts := []grpc.DialOption{grpc.WithTransportCredentials(clientAlwaysFailCred{})} + ctx, cancel := context.WithTimeout(context.Background(), time.Second) + defer cancel() + cc, err := grpc.DialContext(ctx, te.srvAddr, opts...) + if err != nil { + t.Fatalf("Dial(_) = %v, want %v", err, nil) + } + defer cc.Close() + + tc := testpb.NewTestServiceClient(cc) + for i := 0; i < 1000; i++ { + // This loop runs for at most 1 second. The first several RPCs will fail + // with Unavailable because the connection hasn't started. When the + // first connection failed with creds error, the next RPC should also + // fail with the expected error. + if _, err = tc.EmptyCall(context.Background(), &testpb.Empty{}); strings.Contains(err.Error(), clientAlwaysFailCredErrorMsg) { + return + } + time.Sleep(time.Millisecond) + } + te.t.Fatalf("TestService/EmptyCall(_, _) = _, %v, want err.Error() contains %q", err, clientAlwaysFailCredErrorMsg) +} diff --git a/vendor/google.golang.org/grpc/test/gracefulstop_test.go b/vendor/google.golang.org/grpc/test/gracefulstop_test.go new file mode 100644 index 0000000..7ac12b0 --- /dev/null +++ b/vendor/google.golang.org/grpc/test/gracefulstop_test.go @@ -0,0 +1,215 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package test + +import ( + "fmt" + "net" + "sync" + "testing" + "time" + + "golang.org/x/net/context" + "google.golang.org/grpc" + "google.golang.org/grpc/test/leakcheck" + + testpb "google.golang.org/grpc/test/grpc_testing" +) + +type delayListener struct { + net.Listener + closeCalled chan struct{} + acceptCalled chan struct{} + allowCloseCh chan struct{} + cc *delayConn + dialed bool +} + +func (d *delayListener) Accept() (net.Conn, error) { + select { + case <-d.acceptCalled: + // On the second call, block until closed, then return an error. + <-d.closeCalled + <-d.allowCloseCh + return nil, fmt.Errorf("listener is closed") + default: + close(d.acceptCalled) + return d.Listener.Accept() + } +} + +func (d *delayListener) allowClose() { + close(d.allowCloseCh) +} +func (d *delayListener) Close() error { + close(d.closeCalled) + go func() { + <-d.allowCloseCh + d.Listener.Close() + }() + return nil +} + +func (d *delayListener) allowClientRead() { + d.cc.allowRead() +} + +func (d *delayListener) Dial(to time.Duration) (net.Conn, error) { + if d.dialed { + // Only hand out one connection (net.Dial can return more even after the + // listener is closed). This is not thread-safe, but Dial should never be + // called concurrently in this environment. + return nil, fmt.Errorf("no more conns") + } + d.dialed = true + c, err := net.DialTimeout("tcp", d.Listener.Addr().String(), to) + if err != nil { + return nil, err + } + d.cc = &delayConn{Conn: c, blockRead: make(chan struct{})} + return d.cc, nil +} + +func (d *delayListener) clientWriteCalledChan() <-chan struct{} { + return d.cc.writeCalledChan() +} + +type delayConn struct { + net.Conn + blockRead chan struct{} + mu sync.Mutex + writeCalled chan struct{} +} + +func (d *delayConn) writeCalledChan() <-chan struct{} { + d.mu.Lock() + defer d.mu.Unlock() + d.writeCalled = make(chan struct{}) + return d.writeCalled +} +func (d *delayConn) allowRead() { + close(d.blockRead) +} +func (d *delayConn) Read(b []byte) (n int, err error) { + <-d.blockRead + return d.Conn.Read(b) +} +func (d *delayConn) Write(b []byte) (n int, err error) { + d.mu.Lock() + if d.writeCalled != nil { + close(d.writeCalled) + d.writeCalled = nil + } + d.mu.Unlock() + return d.Conn.Write(b) +} + +func TestGracefulStop(t *testing.T) { + defer leakcheck.Check(t) + // This test ensures GracefulStop cannot race and break RPCs on new + // connections created after GracefulStop was called but before + // listener.Accept() returns a "closing" error. + // + // Steps of this test: + // 1. Start Server + // 2. GracefulStop() Server after listener's Accept is called, but don't + // allow Accept() to exit when Close() is called on it. + // 3. Create a new connection to the server after listener.Close() is called. + // Server will want to send a GoAway on the new conn, but we delay client + // reads until 5. + // 4. Send an RPC on the new connection. + // 5. Allow the client to read the GoAway. The RPC should complete + // successfully. + + lis, err := net.Listen("tcp", "localhost:0") + if err != nil { + t.Fatalf("Error listenening: %v", err) + } + dlis := &delayListener{ + Listener: lis, + acceptCalled: make(chan struct{}), + closeCalled: make(chan struct{}), + allowCloseCh: make(chan struct{}), + } + d := func(_ string, to time.Duration) (net.Conn, error) { return dlis.Dial(to) } + + ss := &stubServer{ + emptyCall: func(ctx context.Context, in *testpb.Empty) (*testpb.Empty, error) { + return &testpb.Empty{}, nil + }, + } + s := grpc.NewServer() + testpb.RegisterTestServiceServer(s, ss) + + // 1. Start Server + wg := sync.WaitGroup{} + wg.Add(1) + go func() { + s.Serve(dlis) + wg.Done() + }() + + // 2. GracefulStop() Server after listener's Accept is called, but don't + // allow Accept() to exit when Close() is called on it. + <-dlis.acceptCalled + wg.Add(1) + go func() { + s.GracefulStop() + wg.Done() + }() + + // 3. Create a new connection to the server after listener.Close() is called. + // Server will want to send a GoAway on the new conn, but we delay it + // until 5. + + <-dlis.closeCalled // Block until GracefulStop calls dlis.Close() + + // Now dial. The listener's Accept method will return a valid connection, + // even though GracefulStop has closed the listener. + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + cc, err := grpc.DialContext(ctx, "", grpc.WithInsecure(), grpc.WithBlock(), grpc.WithDialer(d)) + if err != nil { + t.Fatalf("grpc.Dial(%q) = %v", lis.Addr().String(), err) + } + cancel() + client := testpb.NewTestServiceClient(cc) + defer cc.Close() + + dlis.allowClose() + + wcch := dlis.clientWriteCalledChan() + go func() { + // 5. Allow the client to read the GoAway. The RPC should complete + // successfully. + <-wcch + dlis.allowClientRead() + }() + + // 4. Send an RPC on the new connection. + // The server would send a GOAWAY first, but we are delaying the server's + // writes for now until the client writes more than the preface. + ctx, cancel = context.WithTimeout(context.Background(), 5*time.Second) + if _, err := client.EmptyCall(ctx, &testpb.Empty{}); err != nil { + t.Fatalf("EmptyCall() = %v; want ", err) + } + + // 5. happens above, then we finish the call. + cancel() + wg.Wait() +} diff --git a/vendor/google.golang.org/grpc/test/grpc_testing/test.pb.go b/vendor/google.golang.org/grpc/test/grpc_testing/test.pb.go index e584c4d..ab48a15 100644 --- a/vendor/google.golang.org/grpc/test/grpc_testing/test.pb.go +++ b/vendor/google.golang.org/grpc/test/grpc_testing/test.pb.go @@ -1,12 +1,11 @@ -// Code generated by protoc-gen-go. -// source: test.proto -// DO NOT EDIT! +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: grpc_testing/test.proto /* Package grpc_testing is a generated protocol buffer package. It is generated from these files: - test.proto + grpc_testing/test.proto It has these top-level messages: Empty @@ -64,26 +63,12 @@ var PayloadType_value = map[string]int32{ "RANDOM": 2, } -func (x PayloadType) Enum() *PayloadType { - p := new(PayloadType) - *p = x - return p -} func (x PayloadType) String() string { return proto.EnumName(PayloadType_name, int32(x)) } -func (x *PayloadType) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(PayloadType_value, data, "PayloadType") - if err != nil { - return err - } - *x = PayloadType(value) - return nil -} func (PayloadType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } type Empty struct { - XXX_unrecognized []byte `json:"-"` } func (m *Empty) Reset() { *m = Empty{} } @@ -94,10 +79,9 @@ func (*Empty) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } // A block of data, to simply increase gRPC message size. type Payload struct { // The type of data in body. - Type *PayloadType `protobuf:"varint,1,opt,name=type,enum=grpc.testing.PayloadType" json:"type,omitempty"` + Type PayloadType `protobuf:"varint,1,opt,name=type,enum=grpc.testing.PayloadType" json:"type,omitempty"` // Primary contents of payload. - Body []byte `protobuf:"bytes,2,opt,name=body" json:"body,omitempty"` - XXX_unrecognized []byte `json:"-"` + Body []byte `protobuf:"bytes,2,opt,name=body,proto3" json:"body,omitempty"` } func (m *Payload) Reset() { *m = Payload{} } @@ -106,8 +90,8 @@ func (*Payload) ProtoMessage() {} func (*Payload) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } func (m *Payload) GetType() PayloadType { - if m != nil && m.Type != nil { - return *m.Type + if m != nil { + return m.Type } return PayloadType_COMPRESSABLE } @@ -123,17 +107,16 @@ func (m *Payload) GetBody() []byte { type SimpleRequest struct { // Desired payload type in the response from the server. // If response_type is RANDOM, server randomly chooses one from other formats. - ResponseType *PayloadType `protobuf:"varint,1,opt,name=response_type,json=responseType,enum=grpc.testing.PayloadType" json:"response_type,omitempty"` + ResponseType PayloadType `protobuf:"varint,1,opt,name=response_type,json=responseType,enum=grpc.testing.PayloadType" json:"response_type,omitempty"` // Desired payload size in the response from the server. // If response_type is COMPRESSABLE, this denotes the size before compression. - ResponseSize *int32 `protobuf:"varint,2,opt,name=response_size,json=responseSize" json:"response_size,omitempty"` + ResponseSize int32 `protobuf:"varint,2,opt,name=response_size,json=responseSize" json:"response_size,omitempty"` // Optional input payload sent along with the request. Payload *Payload `protobuf:"bytes,3,opt,name=payload" json:"payload,omitempty"` // Whether SimpleResponse should include username. - FillUsername *bool `protobuf:"varint,4,opt,name=fill_username,json=fillUsername" json:"fill_username,omitempty"` + FillUsername bool `protobuf:"varint,4,opt,name=fill_username,json=fillUsername" json:"fill_username,omitempty"` // Whether SimpleResponse should include OAuth scope. - FillOauthScope *bool `protobuf:"varint,5,opt,name=fill_oauth_scope,json=fillOauthScope" json:"fill_oauth_scope,omitempty"` - XXX_unrecognized []byte `json:"-"` + FillOauthScope bool `protobuf:"varint,5,opt,name=fill_oauth_scope,json=fillOauthScope" json:"fill_oauth_scope,omitempty"` } func (m *SimpleRequest) Reset() { *m = SimpleRequest{} } @@ -142,15 +125,15 @@ func (*SimpleRequest) ProtoMessage() {} func (*SimpleRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } func (m *SimpleRequest) GetResponseType() PayloadType { - if m != nil && m.ResponseType != nil { - return *m.ResponseType + if m != nil { + return m.ResponseType } return PayloadType_COMPRESSABLE } func (m *SimpleRequest) GetResponseSize() int32 { - if m != nil && m.ResponseSize != nil { - return *m.ResponseSize + if m != nil { + return m.ResponseSize } return 0 } @@ -163,15 +146,15 @@ func (m *SimpleRequest) GetPayload() *Payload { } func (m *SimpleRequest) GetFillUsername() bool { - if m != nil && m.FillUsername != nil { - return *m.FillUsername + if m != nil { + return m.FillUsername } return false } func (m *SimpleRequest) GetFillOauthScope() bool { - if m != nil && m.FillOauthScope != nil { - return *m.FillOauthScope + if m != nil { + return m.FillOauthScope } return false } @@ -182,10 +165,9 @@ type SimpleResponse struct { Payload *Payload `protobuf:"bytes,1,opt,name=payload" json:"payload,omitempty"` // The user the request came from, for verifying authentication was // successful when the client expected it. - Username *string `protobuf:"bytes,2,opt,name=username" json:"username,omitempty"` + Username string `protobuf:"bytes,2,opt,name=username" json:"username,omitempty"` // OAuth scope. - OauthScope *string `protobuf:"bytes,3,opt,name=oauth_scope,json=oauthScope" json:"oauth_scope,omitempty"` - XXX_unrecognized []byte `json:"-"` + OauthScope string `protobuf:"bytes,3,opt,name=oauth_scope,json=oauthScope" json:"oauth_scope,omitempty"` } func (m *SimpleResponse) Reset() { *m = SimpleResponse{} } @@ -201,15 +183,15 @@ func (m *SimpleResponse) GetPayload() *Payload { } func (m *SimpleResponse) GetUsername() string { - if m != nil && m.Username != nil { - return *m.Username + if m != nil { + return m.Username } return "" } func (m *SimpleResponse) GetOauthScope() string { - if m != nil && m.OauthScope != nil { - return *m.OauthScope + if m != nil { + return m.OauthScope } return "" } @@ -217,8 +199,7 @@ func (m *SimpleResponse) GetOauthScope() string { // Client-streaming request. type StreamingInputCallRequest struct { // Optional input payload sent along with the request. - Payload *Payload `protobuf:"bytes,1,opt,name=payload" json:"payload,omitempty"` - XXX_unrecognized []byte `json:"-"` + Payload *Payload `protobuf:"bytes,1,opt,name=payload" json:"payload,omitempty"` } func (m *StreamingInputCallRequest) Reset() { *m = StreamingInputCallRequest{} } @@ -236,8 +217,7 @@ func (m *StreamingInputCallRequest) GetPayload() *Payload { // Client-streaming response. type StreamingInputCallResponse struct { // Aggregated size of payloads received from the client. - AggregatedPayloadSize *int32 `protobuf:"varint,1,opt,name=aggregated_payload_size,json=aggregatedPayloadSize" json:"aggregated_payload_size,omitempty"` - XXX_unrecognized []byte `json:"-"` + AggregatedPayloadSize int32 `protobuf:"varint,1,opt,name=aggregated_payload_size,json=aggregatedPayloadSize" json:"aggregated_payload_size,omitempty"` } func (m *StreamingInputCallResponse) Reset() { *m = StreamingInputCallResponse{} } @@ -246,8 +226,8 @@ func (*StreamingInputCallResponse) ProtoMessage() {} func (*StreamingInputCallResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } func (m *StreamingInputCallResponse) GetAggregatedPayloadSize() int32 { - if m != nil && m.AggregatedPayloadSize != nil { - return *m.AggregatedPayloadSize + if m != nil { + return m.AggregatedPayloadSize } return 0 } @@ -256,11 +236,10 @@ func (m *StreamingInputCallResponse) GetAggregatedPayloadSize() int32 { type ResponseParameters struct { // Desired payload sizes in responses from the server. // If response_type is COMPRESSABLE, this denotes the size before compression. - Size *int32 `protobuf:"varint,1,opt,name=size" json:"size,omitempty"` + Size int32 `protobuf:"varint,1,opt,name=size" json:"size,omitempty"` // Desired interval between consecutive responses in the response stream in // microseconds. - IntervalUs *int32 `protobuf:"varint,2,opt,name=interval_us,json=intervalUs" json:"interval_us,omitempty"` - XXX_unrecognized []byte `json:"-"` + IntervalUs int32 `protobuf:"varint,2,opt,name=interval_us,json=intervalUs" json:"interval_us,omitempty"` } func (m *ResponseParameters) Reset() { *m = ResponseParameters{} } @@ -269,15 +248,15 @@ func (*ResponseParameters) ProtoMessage() {} func (*ResponseParameters) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } func (m *ResponseParameters) GetSize() int32 { - if m != nil && m.Size != nil { - return *m.Size + if m != nil { + return m.Size } return 0 } func (m *ResponseParameters) GetIntervalUs() int32 { - if m != nil && m.IntervalUs != nil { - return *m.IntervalUs + if m != nil { + return m.IntervalUs } return 0 } @@ -288,12 +267,11 @@ type StreamingOutputCallRequest struct { // If response_type is RANDOM, the payload from each response in the stream // might be of different types. This is to simulate a mixed type of payload // stream. - ResponseType *PayloadType `protobuf:"varint,1,opt,name=response_type,json=responseType,enum=grpc.testing.PayloadType" json:"response_type,omitempty"` + ResponseType PayloadType `protobuf:"varint,1,opt,name=response_type,json=responseType,enum=grpc.testing.PayloadType" json:"response_type,omitempty"` // Configuration for each expected response message. ResponseParameters []*ResponseParameters `protobuf:"bytes,2,rep,name=response_parameters,json=responseParameters" json:"response_parameters,omitempty"` // Optional input payload sent along with the request. - Payload *Payload `protobuf:"bytes,3,opt,name=payload" json:"payload,omitempty"` - XXX_unrecognized []byte `json:"-"` + Payload *Payload `protobuf:"bytes,3,opt,name=payload" json:"payload,omitempty"` } func (m *StreamingOutputCallRequest) Reset() { *m = StreamingOutputCallRequest{} } @@ -302,8 +280,8 @@ func (*StreamingOutputCallRequest) ProtoMessage() {} func (*StreamingOutputCallRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } func (m *StreamingOutputCallRequest) GetResponseType() PayloadType { - if m != nil && m.ResponseType != nil { - return *m.ResponseType + if m != nil { + return m.ResponseType } return PayloadType_COMPRESSABLE } @@ -325,8 +303,7 @@ func (m *StreamingOutputCallRequest) GetPayload() *Payload { // Server-streaming response, as configured by the request and parameters. type StreamingOutputCallResponse struct { // Payload to increase response size. - Payload *Payload `protobuf:"bytes,1,opt,name=payload" json:"payload,omitempty"` - XXX_unrecognized []byte `json:"-"` + Payload *Payload `protobuf:"bytes,1,opt,name=payload" json:"payload,omitempty"` } func (m *StreamingOutputCallResponse) Reset() { *m = StreamingOutputCallResponse{} } @@ -742,47 +719,48 @@ var _TestService_serviceDesc = grpc.ServiceDesc{ ClientStreams: true, }, }, - Metadata: "test.proto", + Metadata: "grpc_testing/test.proto", } -func init() { proto.RegisterFile("test.proto", fileDescriptor0) } +func init() { proto.RegisterFile("grpc_testing/test.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 567 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xbc, 0x54, 0x51, 0x6f, 0xd2, 0x50, - 0x14, 0xb6, 0x03, 0x64, 0x1c, 0x58, 0x43, 0x0e, 0x59, 0x64, 0x9d, 0x89, 0x4b, 0x7d, 0xb0, 0x9a, - 0x88, 0x86, 0x44, 0x1f, 0x35, 0x73, 0x63, 0x71, 0x09, 0x03, 0x6c, 0xe1, 0x99, 0x5c, 0xe1, 0x0e, - 0x9b, 0x94, 0xb6, 0xb6, 0xb7, 0x46, 0x7c, 0xf0, 0x8f, 0xf9, 0x67, 0xfc, 0x11, 0xfe, 0x00, 0xef, - 0xbd, 0x6d, 0xa1, 0x40, 0x17, 0x99, 0xc6, 0xbd, 0xb5, 0xdf, 0xf9, 0xce, 0x77, 0xbe, 0xef, 0x9e, - 0xdb, 0x02, 0x30, 0x1a, 0xb2, 0x96, 0x1f, 0x78, 0xcc, 0xc3, 0xda, 0x2c, 0xf0, 0x27, 0x2d, 0x01, - 0xd8, 0xee, 0x4c, 0x2f, 0x43, 0xa9, 0x33, 0xf7, 0xd9, 0x42, 0xef, 0x42, 0x79, 0x40, 0x16, 0x8e, - 0x47, 0xa6, 0xf8, 0x1c, 0x8a, 0x6c, 0xe1, 0xd3, 0xa6, 0x72, 0xa2, 0x18, 0x6a, 0xfb, 0xa8, 0x95, - 0x6d, 0x68, 0x25, 0xa4, 0x21, 0x27, 0x98, 0x92, 0x86, 0x08, 0xc5, 0x8f, 0xde, 0x74, 0xd1, 0xdc, - 0xe3, 0xf4, 0x9a, 0x29, 0x9f, 0xf5, 0x5f, 0x0a, 0x1c, 0x58, 0xf6, 0xdc, 0x77, 0xa8, 0x49, 0x3f, - 0x47, 0xbc, 0x15, 0xdf, 0xc0, 0x41, 0x40, 0x43, 0xdf, 0x73, 0x43, 0x3a, 0xde, 0x4d, 0xbd, 0x96, - 0xf2, 0xc5, 0x1b, 0x3e, 0xce, 0xf4, 0x87, 0xf6, 0x37, 0x2a, 0xc7, 0x95, 0x56, 0x24, 0x8b, 0x63, - 0xf8, 0x02, 0xca, 0x7e, 0xac, 0xd0, 0x2c, 0xf0, 0x72, 0xb5, 0x7d, 0x98, 0x2b, 0x6f, 0xa6, 0x2c, - 0xa1, 0x7a, 0x6d, 0x3b, 0xce, 0x38, 0x0a, 0x69, 0xe0, 0x92, 0x39, 0x6d, 0x16, 0x79, 0xdb, 0xbe, - 0x59, 0x13, 0xe0, 0x28, 0xc1, 0xd0, 0x80, 0xba, 0x24, 0x79, 0x24, 0x62, 0x9f, 0xc6, 0xe1, 0xc4, - 0xe3, 0xee, 0x4b, 0x92, 0xa7, 0x0a, 0xbc, 0x2f, 0x60, 0x4b, 0xa0, 0xfa, 0x77, 0x50, 0xd3, 0xd4, - 0xb1, 0xab, 0xac, 0x23, 0x65, 0x27, 0x47, 0x1a, 0xec, 0x2f, 0xcd, 0x88, 0x88, 0x15, 0x73, 0xf9, - 0x8e, 0x8f, 0xa0, 0x9a, 0xf5, 0x50, 0x90, 0x65, 0xf0, 0x56, 0xf3, 0xbb, 0x70, 0x64, 0xb1, 0x80, - 0x92, 0x39, 0x97, 0xbe, 0x74, 0xfd, 0x88, 0x9d, 0x11, 0xc7, 0x49, 0x37, 0x70, 0x5b, 0x2b, 0xfa, - 0x10, 0xb4, 0x3c, 0xb5, 0x24, 0xd9, 0x6b, 0x78, 0x40, 0x66, 0xb3, 0x80, 0xce, 0x08, 0xa3, 0xd3, - 0x71, 0xd2, 0x13, 0xaf, 0x46, 0x91, 0xab, 0x39, 0x5c, 0x95, 0x13, 0x69, 0xb1, 0x23, 0xfd, 0x12, - 0x30, 0xd5, 0x18, 0x90, 0x80, 0xc7, 0x62, 0x34, 0x08, 0xc5, 0x25, 0xca, 0xb4, 0xca, 0x67, 0x11, - 0xd7, 0x76, 0x79, 0xf5, 0x0b, 0x11, 0x0b, 0x4a, 0x16, 0x0e, 0x29, 0x34, 0x0a, 0xf5, 0x9f, 0x4a, - 0xc6, 0x61, 0x3f, 0x62, 0x1b, 0x81, 0xff, 0xf5, 0xca, 0x7d, 0x80, 0xc6, 0xb2, 0xdf, 0x5f, 0x5a, - 0xe5, 0x3e, 0x0a, 0xfc, 0xf0, 0x4e, 0xd6, 0x55, 0xb6, 0x23, 0x99, 0x18, 0x6c, 0xc7, 0xbc, 0xed, - 0x05, 0xd5, 0x7b, 0x70, 0x9c, 0x9b, 0xf0, 0x2f, 0xaf, 0xd7, 0xb3, 0xb7, 0x50, 0xcd, 0x04, 0xc6, - 0x3a, 0xd4, 0xce, 0xfa, 0x57, 0x03, 0xb3, 0x63, 0x59, 0xa7, 0xef, 0xba, 0x9d, 0xfa, 0x3d, 0xbe, - 0x08, 0x75, 0xd4, 0x5b, 0xc3, 0x14, 0x04, 0xb8, 0x6f, 0x9e, 0xf6, 0xce, 0xfb, 0x57, 0xf5, 0xbd, - 0xf6, 0x8f, 0x22, 0x54, 0x87, 0x5c, 0xdd, 0xe2, 0x4b, 0xb0, 0x27, 0x14, 0x5f, 0x41, 0x45, 0xfe, - 0x40, 0x84, 0x2d, 0x6c, 0xac, 0x4f, 0x97, 0x05, 0x2d, 0x0f, 0xc4, 0x0b, 0xa8, 0x8c, 0x5c, 0x12, - 0xc4, 0x6d, 0xc7, 0xeb, 0x8c, 0xb5, 0x1f, 0x87, 0xf6, 0x30, 0xbf, 0x98, 0x1c, 0x80, 0x03, 0x8d, - 0x9c, 0xf3, 0x41, 0x63, 0xa3, 0xe9, 0xc6, 0x4b, 0xa2, 0x3d, 0xdd, 0x81, 0x19, 0xcf, 0x7a, 0xa9, - 0xa0, 0x0d, 0xb8, 0xfd, 0x45, 0xe0, 0x93, 0x1b, 0x24, 0x36, 0xbf, 0x40, 0xcd, 0xf8, 0x33, 0x31, - 0x1e, 0x65, 0x88, 0x51, 0xea, 0x45, 0xe4, 0x38, 0xe7, 0x11, 0x4f, 0xfb, 0xf5, 0xbf, 0x65, 0x32, - 0x14, 0x99, 0x4a, 0x7d, 0x4f, 0x9c, 0xeb, 0x3b, 0x18, 0xf5, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x4c, - 0x41, 0xfe, 0xb6, 0x89, 0x06, 0x00, 0x00, + // 587 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0xdb, 0x6e, 0xd3, 0x40, + 0x10, 0x65, 0xdb, 0xf4, 0x36, 0x49, 0xad, 0x68, 0xab, 0xaa, 0xae, 0x8b, 0x84, 0x65, 0x1e, 0x30, + 0x48, 0xa4, 0x28, 0x08, 0x1e, 0x41, 0xa5, 0x17, 0x51, 0x29, 0x4d, 0x82, 0x9d, 0x3c, 0x47, 0xdb, + 0x64, 0x6b, 0x2c, 0x39, 0xf6, 0xb2, 0x5e, 0x57, 0xa4, 0x0f, 0xfc, 0x18, 0x3f, 0xc3, 0x47, 0xf0, + 0x01, 0x68, 0xd7, 0x76, 0xe2, 0x24, 0xae, 0x48, 0x41, 0xf0, 0x14, 0x7b, 0xe6, 0xcc, 0x99, 0x73, + 0x3c, 0xb3, 0x1b, 0x38, 0xf0, 0x38, 0x1b, 0x0e, 0x04, 0x8d, 0x85, 0x1f, 0x7a, 0xc7, 0xf2, 0xb7, + 0xc1, 0x78, 0x24, 0x22, 0x5c, 0x93, 0x89, 0x46, 0x96, 0xb0, 0xb6, 0x60, 0xe3, 0x7c, 0xcc, 0xc4, + 0xc4, 0x6a, 0xc1, 0x56, 0x97, 0x4c, 0x82, 0x88, 0x8c, 0xf0, 0x4b, 0xa8, 0x88, 0x09, 0xa3, 0x3a, + 0x32, 0x91, 0xad, 0x35, 0x0f, 0x1b, 0xc5, 0x82, 0x46, 0x06, 0xea, 0x4d, 0x18, 0x75, 0x14, 0x0c, + 0x63, 0xa8, 0x5c, 0x47, 0xa3, 0x89, 0xbe, 0x66, 0x22, 0xbb, 0xe6, 0xa8, 0x67, 0xeb, 0x27, 0x82, + 0x5d, 0xd7, 0x1f, 0xb3, 0x80, 0x3a, 0xf4, 0x4b, 0x42, 0x63, 0x81, 0xdf, 0xc1, 0x2e, 0xa7, 0x31, + 0x8b, 0xc2, 0x98, 0x0e, 0x56, 0x63, 0xaf, 0xe5, 0x78, 0xf9, 0x86, 0x9f, 0x16, 0xea, 0x63, 0xff, + 0x8e, 0xaa, 0x76, 0x1b, 0x33, 0x90, 0xeb, 0xdf, 0x51, 0x7c, 0x0c, 0x5b, 0x2c, 0x65, 0xd0, 0xd7, + 0x4d, 0x64, 0x57, 0x9b, 0xfb, 0xa5, 0xf4, 0x4e, 0x8e, 0x92, 0xac, 0x37, 0x7e, 0x10, 0x0c, 0x92, + 0x98, 0xf2, 0x90, 0x8c, 0xa9, 0x5e, 0x31, 0x91, 0xbd, 0xed, 0xd4, 0x64, 0xb0, 0x9f, 0xc5, 0xb0, + 0x0d, 0x75, 0x05, 0x8a, 0x48, 0x22, 0x3e, 0x0f, 0xe2, 0x61, 0xc4, 0xa8, 0xbe, 0xa1, 0x70, 0x9a, + 0x8c, 0x77, 0x64, 0xd8, 0x95, 0x51, 0xeb, 0x1b, 0x68, 0xb9, 0xeb, 0x54, 0x55, 0x51, 0x11, 0x5a, + 0x49, 0x91, 0x01, 0xdb, 0x53, 0x31, 0xd2, 0xe2, 0x8e, 0x33, 0x7d, 0xc7, 0x4f, 0xa0, 0x5a, 0xd4, + 0xb0, 0xae, 0xd2, 0x10, 0xcd, 0xfa, 0xb7, 0xe0, 0xd0, 0x15, 0x9c, 0x92, 0xb1, 0x1f, 0x7a, 0x97, + 0x21, 0x4b, 0xc4, 0x29, 0x09, 0x82, 0x7c, 0x02, 0x0f, 0x95, 0x62, 0xf5, 0xc0, 0x28, 0x63, 0xcb, + 0x9c, 0xbd, 0x85, 0x03, 0xe2, 0x79, 0x9c, 0x7a, 0x44, 0xd0, 0xd1, 0x20, 0xab, 0x49, 0x47, 0x83, + 0xd4, 0x68, 0xf6, 0x67, 0xe9, 0x8c, 0x5a, 0xce, 0xc8, 0xba, 0x04, 0x9c, 0x73, 0x74, 0x09, 0x27, + 0x63, 0x2a, 0x28, 0x8f, 0xe5, 0x12, 0x15, 0x4a, 0xd5, 0xb3, 0xb4, 0xeb, 0x87, 0x82, 0xf2, 0x5b, + 0x22, 0x07, 0x94, 0x0d, 0x1c, 0xf2, 0x50, 0x3f, 0xb6, 0x7e, 0xa0, 0x82, 0xc2, 0x4e, 0x22, 0x16, + 0x0c, 0xff, 0xed, 0xca, 0x7d, 0x82, 0xbd, 0x69, 0x3d, 0x9b, 0x4a, 0xd5, 0xd7, 0xcc, 0x75, 0xbb, + 0xda, 0x34, 0xe7, 0x59, 0x96, 0x2d, 0x39, 0x98, 0x2f, 0xdb, 0x7c, 0xe8, 0x82, 0x5a, 0x6d, 0x38, + 0x2a, 0x75, 0xf8, 0x87, 0xeb, 0xf5, 0xe2, 0x3d, 0x54, 0x0b, 0x86, 0x71, 0x1d, 0x6a, 0xa7, 0x9d, + 0xab, 0xae, 0x73, 0xee, 0xba, 0x27, 0x1f, 0x5a, 0xe7, 0xf5, 0x47, 0x18, 0x83, 0xd6, 0x6f, 0xcf, + 0xc5, 0x10, 0x06, 0xd8, 0x74, 0x4e, 0xda, 0x67, 0x9d, 0xab, 0xfa, 0x5a, 0xf3, 0x7b, 0x05, 0xaa, + 0x3d, 0x1a, 0x0b, 0x97, 0xf2, 0x5b, 0x7f, 0x48, 0xf1, 0x1b, 0xd8, 0x51, 0x17, 0x88, 0x94, 0x85, + 0xf7, 0xe6, 0xbb, 0xab, 0x84, 0x51, 0x16, 0xc4, 0x17, 0xb0, 0xd3, 0x0f, 0x09, 0x4f, 0xcb, 0x8e, + 0xe6, 0x11, 0x73, 0x17, 0x87, 0xf1, 0xb8, 0x3c, 0x99, 0x7d, 0x80, 0x00, 0xf6, 0x4a, 0xbe, 0x0f, + 0xb6, 0x17, 0x8a, 0xee, 0x5d, 0x12, 0xe3, 0xf9, 0x0a, 0xc8, 0xb4, 0xd7, 0x2b, 0x84, 0x7d, 0xc0, + 0xcb, 0x27, 0x02, 0x3f, 0xbb, 0x87, 0x62, 0xf1, 0x04, 0x1a, 0xf6, 0xef, 0x81, 0x69, 0x2b, 0x5b, + 0xb6, 0xd2, 0x2e, 0x92, 0x20, 0x38, 0x4b, 0x58, 0x40, 0xbf, 0xfe, 0x33, 0x4f, 0x36, 0x52, 0xae, + 0xb4, 0x8f, 0x24, 0xb8, 0xf9, 0x0f, 0xad, 0xae, 0x37, 0xd5, 0x7f, 0xd0, 0xeb, 0x5f, 0x01, 0x00, + 0x00, 0xff, 0xff, 0x07, 0xc7, 0x76, 0x69, 0x9e, 0x06, 0x00, 0x00, } diff --git a/vendor/google.golang.org/grpc/test/grpc_testing/test.proto b/vendor/google.golang.org/grpc/test/grpc_testing/test.proto index b5bfe05..6f62f3a 100644 --- a/vendor/google.golang.org/grpc/test/grpc_testing/test.proto +++ b/vendor/google.golang.org/grpc/test/grpc_testing/test.proto @@ -1,6 +1,20 @@ +// Copyright 2017 gRPC authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + // An integration test service that covers all the method signature permutations // of unary/streaming requests/responses. -syntax = "proto2"; +syntax = "proto3"; package grpc.testing; @@ -21,48 +35,48 @@ enum PayloadType { // A block of data, to simply increase gRPC message size. message Payload { // The type of data in body. - optional PayloadType type = 1; + PayloadType type = 1; // Primary contents of payload. - optional bytes body = 2; + bytes body = 2; } // Unary request. message SimpleRequest { // Desired payload type in the response from the server. // If response_type is RANDOM, server randomly chooses one from other formats. - optional PayloadType response_type = 1; + PayloadType response_type = 1; // Desired payload size in the response from the server. // If response_type is COMPRESSABLE, this denotes the size before compression. - optional int32 response_size = 2; + int32 response_size = 2; // Optional input payload sent along with the request. - optional Payload payload = 3; + Payload payload = 3; // Whether SimpleResponse should include username. - optional bool fill_username = 4; + bool fill_username = 4; // Whether SimpleResponse should include OAuth scope. - optional bool fill_oauth_scope = 5; + bool fill_oauth_scope = 5; } // Unary response, as configured by the request. message SimpleResponse { // Payload to increase message size. - optional Payload payload = 1; + Payload payload = 1; // The user the request came from, for verifying authentication was // successful when the client expected it. - optional string username = 2; + string username = 2; // OAuth scope. - optional string oauth_scope = 3; + string oauth_scope = 3; } // Client-streaming request. message StreamingInputCallRequest { // Optional input payload sent along with the request. - optional Payload payload = 1; + Payload payload = 1; // Not expecting any payload from the response. } @@ -70,18 +84,18 @@ message StreamingInputCallRequest { // Client-streaming response. message StreamingInputCallResponse { // Aggregated size of payloads received from the client. - optional int32 aggregated_payload_size = 1; + int32 aggregated_payload_size = 1; } // Configuration for a particular response. message ResponseParameters { // Desired payload sizes in responses from the server. // If response_type is COMPRESSABLE, this denotes the size before compression. - optional int32 size = 1; + int32 size = 1; // Desired interval between consecutive responses in the response stream in // microseconds. - optional int32 interval_us = 2; + int32 interval_us = 2; } // Server-streaming request. @@ -90,19 +104,19 @@ message StreamingOutputCallRequest { // If response_type is RANDOM, the payload from each response in the stream // might be of different types. This is to simulate a mixed type of payload // stream. - optional PayloadType response_type = 1; + PayloadType response_type = 1; // Configuration for each expected response message. repeated ResponseParameters response_parameters = 2; // Optional input payload sent along with the request. - optional Payload payload = 3; + Payload payload = 3; } // Server-streaming response, as configured by the request and parameters. message StreamingOutputCallResponse { // Payload to increase response size. - optional Payload payload = 1; + Payload payload = 1; } // A simple service to test the various types of RPCs and experiment with diff --git a/vendor/google.golang.org/grpc/test/leakcheck/leakcheck.go b/vendor/google.golang.org/grpc/test/leakcheck/leakcheck.go new file mode 100644 index 0000000..76f9fc5 --- /dev/null +++ b/vendor/google.golang.org/grpc/test/leakcheck/leakcheck.go @@ -0,0 +1,118 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Package leakcheck contains functions to check leaked goroutines. +// +// Call "defer leakcheck.Check(t)" at the beginning of tests. +package leakcheck + +import ( + "runtime" + "sort" + "strings" + "time" +) + +var goroutinesToIgnore = []string{ + "testing.Main(", + "testing.tRunner(", + "testing.(*M).", + "runtime.goexit", + "created by runtime.gc", + "created by runtime/trace.Start", + "interestingGoroutines", + "runtime.MHeap_Scavenger", + "signal.signal_recv", + "sigterm.handler", + "runtime_mcall", + "(*loggingT).flushDaemon", + "goroutine in C code", +} + +// RegisterIgnoreGoroutine appends s into the ignore goroutine list. The +// goroutines whose stack trace contains s will not be identified as leaked +// goroutines. Not thread-safe, only call this function in init(). +func RegisterIgnoreGoroutine(s string) { + goroutinesToIgnore = append(goroutinesToIgnore, s) +} + +func ignore(g string) bool { + sl := strings.SplitN(g, "\n", 2) + if len(sl) != 2 { + return true + } + stack := strings.TrimSpace(sl[1]) + if strings.HasPrefix(stack, "testing.RunTests") { + return true + } + + if stack == "" { + return true + } + + for _, s := range goroutinesToIgnore { + if strings.Contains(stack, s) { + return true + } + } + + return false +} + +// interestingGoroutines returns all goroutines we care about for the purpose of +// leak checking. It excludes testing or runtime ones. +func interestingGoroutines() (gs []string) { + buf := make([]byte, 2<<20) + buf = buf[:runtime.Stack(buf, true)] + for _, g := range strings.Split(string(buf), "\n\n") { + if !ignore(g) { + gs = append(gs, g) + } + } + sort.Strings(gs) + return +} + +// Errorfer is the interface that wraps the Errorf method. It's a subset of +// testing.TB to make it easy to use Check. +type Errorfer interface { + Errorf(format string, args ...interface{}) +} + +func check(efer Errorfer, timeout time.Duration) { + // Loop, waiting for goroutines to shut down. + // Wait up to timeout, but finish as quickly as possible. + deadline := time.Now().Add(timeout) + var leaked []string + for time.Now().Before(deadline) { + if leaked = interestingGoroutines(); len(leaked) == 0 { + return + } + time.Sleep(50 * time.Millisecond) + } + for _, g := range leaked { + efer.Errorf("Leaked goroutine: %v", g) + } +} + +// Check looks at the currently-running goroutines and checks if there are any +// interestring (created by gRPC) goroutines leaked. It waits up to 10 seconds +// in the error cases. +func Check(efer Errorfer) { + check(efer, 10*time.Second) +} diff --git a/vendor/google.golang.org/grpc/test/leakcheck/leakcheck_test.go b/vendor/google.golang.org/grpc/test/leakcheck/leakcheck_test.go new file mode 100644 index 0000000..50927e9 --- /dev/null +++ b/vendor/google.golang.org/grpc/test/leakcheck/leakcheck_test.go @@ -0,0 +1,76 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package leakcheck + +import ( + "fmt" + "strings" + "testing" + "time" +) + +type testErrorfer struct { + errorCount int + errors []string +} + +func (e *testErrorfer) Errorf(format string, args ...interface{}) { + e.errors = append(e.errors, fmt.Sprintf(format, args...)) + e.errorCount++ +} + +func TestCheck(t *testing.T) { + const leakCount = 3 + for i := 0; i < leakCount; i++ { + go func() { time.Sleep(2 * time.Second) }() + } + if ig := interestingGoroutines(); len(ig) == 0 { + t.Error("blah") + } + e := &testErrorfer{} + check(e, time.Second) + if e.errorCount != leakCount { + t.Errorf("check found %v leaks, want %v leaks", e.errorCount, leakCount) + t.Logf("leaked goroutines:\n%v", strings.Join(e.errors, "\n")) + } + check(t, 3*time.Second) +} + +func ignoredTestingLeak(d time.Duration) { + time.Sleep(d) +} + +func TestCheckRegisterIgnore(t *testing.T) { + RegisterIgnoreGoroutine("ignoredTestingLeak") + const leakCount = 3 + for i := 0; i < leakCount; i++ { + go func() { time.Sleep(2 * time.Second) }() + } + go func() { ignoredTestingLeak(3 * time.Second) }() + if ig := interestingGoroutines(); len(ig) == 0 { + t.Error("blah") + } + e := &testErrorfer{} + check(e, time.Second) + if e.errorCount != leakCount { + t.Errorf("check found %v leaks, want %v leaks", e.errorCount, leakCount) + t.Logf("leaked goroutines:\n%v", strings.Join(e.errors, "\n")) + } + check(t, 3*time.Second) +} diff --git a/vendor/google.golang.org/grpc/test/race.go b/vendor/google.golang.org/grpc/test/race.go index 2dc7cf8..acfa0df 100644 --- a/vendor/google.golang.org/grpc/test/race.go +++ b/vendor/google.golang.org/grpc/test/race.go @@ -1,34 +1,19 @@ // +build race /* - * Copyright 2016, Google Inc. - * All rights reserved. + * Copyright 2016 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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/google.golang.org/grpc/test/servertester.go b/vendor/google.golang.org/grpc/test/servertester.go index ed3724d..daeca06 100644 --- a/vendor/google.golang.org/grpc/test/servertester.go +++ b/vendor/google.golang.org/grpc/test/servertester.go @@ -1,32 +1,17 @@ /* - * Copyright 2016, Google Inc. - * All rights reserved. + * Copyright 2016 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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 test diff --git a/vendor/google.golang.org/grpc/test/testdata/ca.pem b/vendor/google.golang.org/grpc/test/testdata/ca.pem deleted file mode 100644 index 6c8511a..0000000 --- a/vendor/google.golang.org/grpc/test/testdata/ca.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICSjCCAbOgAwIBAgIJAJHGGR4dGioHMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV -BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX -aWRnaXRzIFB0eSBMdGQxDzANBgNVBAMTBnRlc3RjYTAeFw0xNDExMTEyMjMxMjla -Fw0yNDExMDgyMjMxMjlaMFYxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0 -YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDzANBgNVBAMT -BnRlc3RjYTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwEDfBV5MYdlHVHJ7 -+L4nxrZy7mBfAVXpOc5vMYztssUI7mL2/iYujiIXM+weZYNTEpLdjyJdu7R5gGUu -g1jSVK/EPHfc74O7AyZU34PNIP4Sh33N+/A5YexrNgJlPY+E3GdVYi4ldWJjgkAd -Qah2PH5ACLrIIC6tRka9hcaBlIECAwEAAaMgMB4wDAYDVR0TBAUwAwEB/zAOBgNV -HQ8BAf8EBAMCAgQwDQYJKoZIhvcNAQELBQADgYEAHzC7jdYlzAVmddi/gdAeKPau -sPBG/C2HCWqHzpCUHcKuvMzDVkY/MP2o6JIW2DBbY64bO/FceExhjcykgaYtCH/m -oIU63+CFOTtR7otyQAWHqXa7q4SbCDlG7DyRFxqG0txPtGvy12lgldA2+RgcigQG -Dfcog5wrJytaQ6UA0wE= ------END CERTIFICATE----- diff --git a/vendor/google.golang.org/grpc/test/testdata/server1.key b/vendor/google.golang.org/grpc/test/testdata/server1.key deleted file mode 100644 index 143a5b8..0000000 --- a/vendor/google.golang.org/grpc/test/testdata/server1.key +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAOHDFScoLCVJpYDD -M4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlumN+fm+AjPEK5GHhGn1BgzkWF+slf -3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wHNVX77fBZOgp9VlSMVfyd9N8YwbBY -AckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAECgYAn7qGnM2vbjJNBm0VZCkOkTIWm -V10okw7EPJrdL2mkre9NasghNXbE1y5zDshx5Nt3KsazKOxTT8d0Jwh/3KbaN+YY -tTCbKGW0pXDRBhwUHRcuRzScjli8Rih5UOCiZkhefUTcRb6xIhZJuQy71tjaSy0p -dHZRmYyBYO2YEQ8xoQJBAPrJPhMBkzmEYFtyIEqAxQ/o/A6E+E4w8i+KM7nQCK7q -K4JXzyXVAjLfyBZWHGM2uro/fjqPggGD6QH1qXCkI4MCQQDmdKeb2TrKRh5BY1LR -81aJGKcJ2XbcDu6wMZK4oqWbTX2KiYn9GB0woM6nSr/Y6iy1u145YzYxEV/iMwff -DJULAkB8B2MnyzOg0pNFJqBJuH29bKCcHa8gHJzqXhNO5lAlEbMK95p/P2Wi+4Hd -aiEIAF1BF326QJcvYKmwSmrORp85AkAlSNxRJ50OWrfMZnBgzVjDx3xG6KsFQVk2 -ol6VhqL6dFgKUORFUWBvnKSyhjJxurlPEahV6oo6+A+mPhFY8eUvAkAZQyTdupP3 -XEFQKctGz+9+gKkemDp7LBBMEMBXrGTLPhpEfcjv/7KPdnFHYmhYeBTBnuVmTVWe -F98XJ7tIFfJq ------END PRIVATE KEY----- diff --git a/vendor/google.golang.org/grpc/test/testdata/server1.pem b/vendor/google.golang.org/grpc/test/testdata/server1.pem deleted file mode 100644 index f3d43fc..0000000 --- a/vendor/google.golang.org/grpc/test/testdata/server1.pem +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICnDCCAgWgAwIBAgIBBzANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJBVTET -MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQ -dHkgTHRkMQ8wDQYDVQQDEwZ0ZXN0Y2EwHhcNMTUxMTA0MDIyMDI0WhcNMjUxMTAx -MDIyMDI0WjBlMQswCQYDVQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNV -BAcTB0NoaWNhZ28xFTATBgNVBAoTDEV4YW1wbGUsIENvLjEaMBgGA1UEAxQRKi50 -ZXN0Lmdvb2dsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOHDFSco -LCVJpYDDM4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlumN+fm+AjPEK5GHhGn1Bg -zkWF+slf3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wHNVX77fBZOgp9VlSMVfyd -9N8YwbBYAckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAGjazBpMAkGA1UdEwQCMAAw -CwYDVR0PBAQDAgXgME8GA1UdEQRIMEaCECoudGVzdC5nb29nbGUuZnKCGHdhdGVy -em9vaS50ZXN0Lmdvb2dsZS5iZYISKi50ZXN0LnlvdXR1YmUuY29thwTAqAEDMA0G -CSqGSIb3DQEBCwUAA4GBAJFXVifQNub1LUP4JlnX5lXNlo8FxZ2a12AFQs+bzoJ6 -hM044EDjqyxUqSbVePK0ni3w1fHQB5rY9yYC5f8G7aqqTY1QOhoUk8ZTSTRpnkTh -y4jjdvTZeLDVBlueZUTDRmy2feY5aZIU18vFDK08dTG0A87pppuv1LNIR3loveU8 ------END CERTIFICATE----- diff --git a/vendor/google.golang.org/grpc/testdata/testdata.go b/vendor/google.golang.org/grpc/testdata/testdata.go new file mode 100644 index 0000000..5609b19 --- /dev/null +++ b/vendor/google.golang.org/grpc/testdata/testdata.go @@ -0,0 +1,63 @@ +/* + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package testdata + +import ( + "log" + "os" + "path/filepath" +) + +// Path returns the absolute path the given relative file or directory path, +// relative to the google.golang.org/grpc/testdata directory in the user's GOPATH. +// If rel is already absolute, it is returned unmodified. +func Path(rel string) string { + if filepath.IsAbs(rel) { + return rel + } + + v, err := goPackagePath("google.golang.org/grpc/testdata") + if err != nil { + log.Fatalf("Error finding google.golang.org/grpc/testdata directory: %v", err) + } + + return filepath.Join(v, rel) +} + +func goPackagePath(pkg string) (path string, err error) { + gp := os.Getenv("GOPATH") + if gp == "" { + return path, os.ErrNotExist + } + + for _, p := range filepath.SplitList(gp) { + dir := filepath.Join(p, "src", filepath.FromSlash(pkg)) + fi, err := os.Stat(dir) + if os.IsNotExist(err) { + continue + } + if err != nil { + return "", err + } + if !fi.IsDir() { + continue + } + return dir, nil + } + return path, os.ErrNotExist +} diff --git a/vendor/google.golang.org/grpc/trace.go b/vendor/google.golang.org/grpc/trace.go index f6747e1..c1c96de 100644 --- a/vendor/google.golang.org/grpc/trace.go +++ b/vendor/google.golang.org/grpc/trace.go @@ -1,33 +1,18 @@ /* * - * Copyright 2015, Google Inc. - * All rights reserved. + * Copyright 2015 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -46,7 +31,7 @@ import ( // EnableTracing controls whether to trace RPCs using the golang.org/x/net/trace package. // This should only be set before any RPCs are sent or received by this program. -var EnableTracing = true +var EnableTracing bool // methodFamily returns the trace family for the given method. // It turns "/pkg.Service/GetFoo" into "pkg.Service". @@ -91,6 +76,15 @@ func (f *firstLine) String() string { return line.String() } +const truncateSize = 100 + +func truncate(x string, l int) string { + if l > len(x) { + return x + } + return x[:l] +} + // payload represents an RPC request or response payload. type payload struct { sent bool // whether this is an outgoing payload @@ -100,9 +94,9 @@ type payload struct { func (p payload) String() string { if p.sent { - return fmt.Sprintf("sent: %v", p.msg) + return truncate(fmt.Sprintf("sent: %v", p.msg), truncateSize) } - return fmt.Sprintf("recv: %v", p.msg) + return truncate(fmt.Sprintf("recv: %v", p.msg), truncateSize) } type fmtStringer struct { diff --git a/vendor/google.golang.org/grpc/transport/bdp_estimator.go b/vendor/google.golang.org/grpc/transport/bdp_estimator.go new file mode 100644 index 0000000..63cd262 --- /dev/null +++ b/vendor/google.golang.org/grpc/transport/bdp_estimator.go @@ -0,0 +1,140 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package transport + +import ( + "sync" + "time" +) + +const ( + // bdpLimit is the maximum value the flow control windows + // will be increased to. + bdpLimit = (1 << 20) * 4 + // alpha is a constant factor used to keep a moving average + // of RTTs. + alpha = 0.9 + // If the current bdp sample is greater than or equal to + // our beta * our estimated bdp and the current bandwidth + // sample is the maximum bandwidth observed so far, we + // increase our bbp estimate by a factor of gamma. + beta = 0.66 + // To put our bdp to be smaller than or equal to twice the real BDP, + // we should multiply our current sample with 4/3, however to round things out + // we use 2 as the multiplication factor. + gamma = 2 +) + +// Adding arbitrary data to ping so that its ack can be identified. +// Easter-egg: what does the ping message say? +var bdpPing = &ping{data: [8]byte{2, 4, 16, 16, 9, 14, 7, 7}} + +type bdpEstimator struct { + // sentAt is the time when the ping was sent. + sentAt time.Time + + mu sync.Mutex + // bdp is the current bdp estimate. + bdp uint32 + // sample is the number of bytes received in one measurement cycle. + sample uint32 + // bwMax is the maximum bandwidth noted so far (bytes/sec). + bwMax float64 + // bool to keep track of the beginning of a new measurement cycle. + isSent bool + // Callback to update the window sizes. + updateFlowControl func(n uint32) + // sampleCount is the number of samples taken so far. + sampleCount uint64 + // round trip time (seconds) + rtt float64 +} + +// timesnap registers the time bdp ping was sent out so that +// network rtt can be calculated when its ack is received. +// It is called (by controller) when the bdpPing is +// being written on the wire. +func (b *bdpEstimator) timesnap(d [8]byte) { + if bdpPing.data != d { + return + } + b.sentAt = time.Now() +} + +// add adds bytes to the current sample for calculating bdp. +// It returns true only if a ping must be sent. This can be used +// by the caller (handleData) to make decision about batching +// a window update with it. +func (b *bdpEstimator) add(n uint32) bool { + b.mu.Lock() + defer b.mu.Unlock() + if b.bdp == bdpLimit { + return false + } + if !b.isSent { + b.isSent = true + b.sample = n + b.sentAt = time.Time{} + b.sampleCount++ + return true + } + b.sample += n + return false +} + +// calculate is called when an ack for a bdp ping is received. +// Here we calculate the current bdp and bandwidth sample and +// decide if the flow control windows should go up. +func (b *bdpEstimator) calculate(d [8]byte) { + // Check if the ping acked for was the bdp ping. + if bdpPing.data != d { + return + } + b.mu.Lock() + rttSample := time.Since(b.sentAt).Seconds() + if b.sampleCount < 10 { + // Bootstrap rtt with an average of first 10 rtt samples. + b.rtt += (rttSample - b.rtt) / float64(b.sampleCount) + } else { + // Heed to the recent past more. + b.rtt += (rttSample - b.rtt) * float64(alpha) + } + b.isSent = false + // The number of bytes accumulated so far in the sample is smaller + // than or equal to 1.5 times the real BDP on a saturated connection. + bwCurrent := float64(b.sample) / (b.rtt * float64(1.5)) + if bwCurrent > b.bwMax { + b.bwMax = bwCurrent + } + // If the current sample (which is smaller than or equal to the 1.5 times the real BDP) is + // greater than or equal to 2/3rd our perceived bdp AND this is the maximum bandwidth seen so far, we + // should update our perception of the network BDP. + if float64(b.sample) >= beta*float64(b.bdp) && bwCurrent == b.bwMax && b.bdp != bdpLimit { + sampleFloat := float64(b.sample) + b.bdp = uint32(gamma * sampleFloat) + if b.bdp > bdpLimit { + b.bdp = bdpLimit + } + bdp := b.bdp + b.mu.Unlock() + b.updateFlowControl(bdp) + return + } + b.mu.Unlock() +} diff --git a/vendor/google.golang.org/grpc/transport/control.go b/vendor/google.golang.org/grpc/transport/control.go index 68dfdd5..0474b09 100644 --- a/vendor/google.golang.org/grpc/transport/control.go +++ b/vendor/google.golang.org/grpc/transport/control.go @@ -1,33 +1,18 @@ /* * - * Copyright 2014, Google Inc. - * All rights reserved. + * Copyright 2014 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -35,19 +20,20 @@ package transport import ( "fmt" + "io" "math" "sync" "time" "golang.org/x/net/http2" + "golang.org/x/net/http2/hpack" ) const ( // The default value of flow control window size in HTTP2 spec. defaultWindowSize = 65535 // The initial window size for flow control. - initialWindowSize = defaultWindowSize // for an RPC - initialConnWindowSize = defaultWindowSize * 16 // for a connection + initialWindowSize = defaultWindowSize // for an RPC infinity = time.Duration(math.MaxInt64) defaultClientKeepaliveTime = infinity defaultClientKeepaliveTimeout = time.Duration(20 * time.Second) @@ -60,11 +46,41 @@ const ( defaultKeepalivePolicyMinTime = time.Duration(5 * time.Minute) // max window limit set by HTTP2 Specs. maxWindowSize = math.MaxInt32 + // defaultLocalSendQuota sets is default value for number of data + // bytes that each stream can schedule before some of it being + // flushed out. + defaultLocalSendQuota = 128 * 1024 ) // The following defines various control items which could flow through // the control buffer of transport. They represent different aspects of // control tasks, e.g., flow control, settings, streaming resetting, etc. + +type headerFrame struct { + streamID uint32 + hf []hpack.HeaderField + endStream bool +} + +func (*headerFrame) item() {} + +type continuationFrame struct { + streamID uint32 + endHeaders bool + headerBlockFragment []byte +} + +type dataFrame struct { + streamID uint32 + endStream bool + d []byte + f func() +} + +func (*dataFrame) item() {} + +func (*continuationFrame) item() {} + type windowUpdate struct { streamID uint32 increment uint32 @@ -73,12 +89,16 @@ type windowUpdate struct { func (*windowUpdate) item() {} type settings struct { - ack bool - ss []http2.Setting + ss []http2.Setting } func (*settings) item() {} +type settingsAck struct { +} + +func (*settingsAck) item() {} + type resetStream struct { streamID uint32 code http2.ErrCode @@ -89,11 +109,14 @@ func (*resetStream) item() {} type goAway struct { code http2.ErrCode debugData []byte + headsUp bool + closeConn bool } func (*goAway) item() {} type flushIO struct { + closeTr bool } func (*flushIO) item() {} @@ -108,21 +131,17 @@ func (*ping) item() {} // quotaPool is a pool which accumulates the quota and sends it to acquire() // when it is available. type quotaPool struct { - c chan int - - mu sync.Mutex - quota int + mu sync.Mutex + c chan struct{} + version uint32 + quota int } // newQuotaPool creates a quotaPool which has quota q available to consume. func newQuotaPool(q int) *quotaPool { qb := "aPool{ - c: make(chan int, 1), - } - if q > 0 { - qb.c <- q - } else { - qb.quota = q + quota: q, + c: make(chan struct{}, 1), } return qb } @@ -132,37 +151,92 @@ func newQuotaPool(q int) *quotaPool { func (qb *quotaPool) add(v int) { qb.mu.Lock() defer qb.mu.Unlock() - select { - case n := <-qb.c: - qb.quota += n - default: + qb.lockedAdd(v) +} + +func (qb *quotaPool) lockedAdd(v int) { + var wakeUp bool + if qb.quota <= 0 { + wakeUp = true // Wake up potential waiters. } qb.quota += v - if qb.quota <= 0 { - return + if wakeUp && qb.quota > 0 { + select { + case qb.c <- struct{}{}: + default: + } } - // After the pool has been created, this is the only place that sends on - // the channel. Since mu is held at this point and any quota that was sent - // on the channel has been retrieved, we know that this code will always - // place any positive quota value on the channel. - select { - case qb.c <- qb.quota: - qb.quota = 0 - default: +} + +func (qb *quotaPool) addAndUpdate(v int) { + qb.mu.Lock() + qb.lockedAdd(v) + qb.version++ + qb.mu.Unlock() +} + +func (qb *quotaPool) get(v int, wc waiters) (int, uint32, error) { + qb.mu.Lock() + if qb.quota > 0 { + if v > qb.quota { + v = qb.quota + } + qb.quota -= v + ver := qb.version + qb.mu.Unlock() + return v, ver, nil + } + qb.mu.Unlock() + for { + select { + case <-wc.ctx.Done(): + return 0, 0, ContextErr(wc.ctx.Err()) + case <-wc.tctx.Done(): + return 0, 0, ErrConnClosing + case <-wc.done: + return 0, 0, io.EOF + case <-wc.goAway: + return 0, 0, errStreamDrain + case <-qb.c: + qb.mu.Lock() + if qb.quota > 0 { + if v > qb.quota { + v = qb.quota + } + qb.quota -= v + ver := qb.version + if qb.quota > 0 { + select { + case qb.c <- struct{}{}: + default: + } + } + qb.mu.Unlock() + return v, ver, nil + + } + qb.mu.Unlock() + } } } -// acquire returns the channel on which available quota amounts are sent. -func (qb *quotaPool) acquire() <-chan int { - return qb.c +func (qb *quotaPool) compareAndExecute(version uint32, success, failure func()) bool { + qb.mu.Lock() + if version == qb.version { + success() + qb.mu.Unlock() + return true + } + failure() + qb.mu.Unlock() + return false } // inFlow deals with inbound flow control type inFlow struct { + mu sync.Mutex // The inbound flow control limit for pending data. limit uint32 - - mu sync.Mutex // pendingData is the overall data which have been received but not been // consumed by applications. pendingData uint32 @@ -174,6 +248,16 @@ type inFlow struct { delta uint32 } +// newLimit updates the inflow window to a new value n. +// It assumes that n is always greater than the old limit. +func (f *inFlow) newLimit(n uint32) uint32 { + f.mu.Lock() + defer f.mu.Unlock() + d := n - f.limit + f.limit = n + return d +} + func (f *inFlow) maybeAdjust(n uint32) uint32 { if n > uint32(math.MaxInt32) { n = uint32(math.MaxInt32) @@ -241,10 +325,10 @@ func (f *inFlow) onRead(n uint32) uint32 { return 0 } -func (f *inFlow) resetPendingData() uint32 { +func (f *inFlow) resetPendingUpdate() uint32 { f.mu.Lock() defer f.mu.Unlock() - n := f.pendingData - f.pendingData = 0 + n := f.pendingUpdate + f.pendingUpdate = 0 return n } diff --git a/vendor/google.golang.org/grpc/transport/go16.go b/vendor/google.golang.org/grpc/transport/go16.go index 252509e..5babcf9 100644 --- a/vendor/google.golang.org/grpc/transport/go16.go +++ b/vendor/google.golang.org/grpc/transport/go16.go @@ -1,34 +1,20 @@ // +build go1.6,!go1.7 /* - * Copyright 2016, Google Inc. - * All rights reserved. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * Copyright 2016 gRPC authors. * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * 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 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -36,6 +22,7 @@ package transport import ( "net" + "net/http" "google.golang.org/grpc/codes" @@ -57,3 +44,8 @@ func ContextErr(err error) StreamError { } return streamErrorf(codes.Internal, "Unexpected error from context packet: %v", err) } + +// contextFromRequest returns a background context. +func contextFromRequest(r *http.Request) context.Context { + return context.Background() +} diff --git a/vendor/google.golang.org/grpc/transport/go17.go b/vendor/google.golang.org/grpc/transport/go17.go index 29f8b14..b7fa6bd 100644 --- a/vendor/google.golang.org/grpc/transport/go17.go +++ b/vendor/google.golang.org/grpc/transport/go17.go @@ -1,34 +1,20 @@ // +build go1.7 /* - * Copyright 2016, Google Inc. - * All rights reserved. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * Copyright 2016 gRPC authors. * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * 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 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -37,6 +23,7 @@ package transport import ( "context" "net" + "net/http" "google.golang.org/grpc/codes" @@ -58,3 +45,8 @@ func ContextErr(err error) StreamError { } return streamErrorf(codes.Internal, "Unexpected error from context packet: %v", err) } + +// contextFromRequest returns a context from the HTTP Request. +func contextFromRequest(r *http.Request) context.Context { + return r.Context() +} diff --git a/vendor/google.golang.org/grpc/transport/handler_server.go b/vendor/google.golang.org/grpc/transport/handler_server.go index 6164409..1a5e96c 100644 --- a/vendor/google.golang.org/grpc/transport/handler_server.go +++ b/vendor/google.golang.org/grpc/transport/handler_server.go @@ -1,32 +1,18 @@ /* - * Copyright 2016, Google Inc. - * All rights reserved. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * Copyright 2016 gRPC authors. * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * 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 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -47,26 +33,31 @@ import ( "sync" "time" + "github.com/golang/protobuf/proto" "golang.org/x/net/context" "golang.org/x/net/http2" "google.golang.org/grpc/codes" "google.golang.org/grpc/credentials" "google.golang.org/grpc/metadata" "google.golang.org/grpc/peer" + "google.golang.org/grpc/stats" "google.golang.org/grpc/status" ) // NewServerHandlerTransport returns a ServerTransport handling gRPC // from inside an http.Handler. It requires that the http Server // supports HTTP/2. -func NewServerHandlerTransport(w http.ResponseWriter, r *http.Request) (ServerTransport, error) { +func NewServerHandlerTransport(w http.ResponseWriter, r *http.Request, stats stats.Handler) (ServerTransport, error) { if r.ProtoMajor != 2 { return nil, errors.New("gRPC requires HTTP/2") } if r.Method != "POST" { return nil, errors.New("invalid gRPC request method") } - if !validContentType(r.Header.Get("Content-Type")) { + contentType := r.Header.Get("Content-Type") + // TODO: do we assume contentType is lowercase? we did before + contentSubtype, validContentType := contentSubtype(contentType) + if !validContentType { return nil, errors.New("invalid gRPC request content-type") } if _, ok := w.(http.Flusher); !ok { @@ -77,10 +68,13 @@ func NewServerHandlerTransport(w http.ResponseWriter, r *http.Request) (ServerTr } st := &serverHandlerTransport{ - rw: w, - req: r, - closedCh: make(chan struct{}), - writes: make(chan func()), + rw: w, + req: r, + closedCh: make(chan struct{}), + writes: make(chan func()), + contentType: contentType, + contentSubtype: contentSubtype, + stats: stats, } if v := r.Header.Get("grpc-timeout"); v != "" { @@ -92,7 +86,7 @@ func NewServerHandlerTransport(w http.ResponseWriter, r *http.Request) (ServerTr st.timeout = to } - var metakv []string + metakv := []string{"content-type", contentType} if r.Host != "" { metakv = append(metakv, ":authority", r.Host) } @@ -102,18 +96,9 @@ func NewServerHandlerTransport(w http.ResponseWriter, r *http.Request) (ServerTr continue } for _, v := range vv { - if k == "user-agent" { - // user-agent is special. Copying logic of http_util.go. - if i := strings.LastIndex(v, " "); i == -1 { - // There is no application user agent string being set - continue - } else { - v = v[:i] - } - } v, err := decodeMetadataHeader(k, v) if err != nil { - return nil, streamErrorf(codes.InvalidArgument, "malformed binary metadata: %v", err) + return nil, streamErrorf(codes.Internal, "malformed binary metadata: %v", err) } metakv = append(metakv, k, v) } @@ -144,6 +129,18 @@ type serverHandlerTransport struct { // ServeHTTP (HandleStreams) goroutine. The channel is closed // when WriteStatus is called. writes chan func() + + // block concurrent WriteStatus calls + // e.g. grpc/(*serverStream).SendMsg/RecvMsg + writeStatusMu sync.Mutex + + // we just mirror the request content-type + contentType string + // we store both contentType and contentSubtype so we don't keep recreating them + // TODO make sure this is consistent across handler_server and http2_server + contentSubtype string + + stats stats.Handler } func (ht *serverHandlerTransport) Close() error { @@ -190,11 +187,13 @@ func (ht *serverHandlerTransport) do(fn func()) error { case <-ht.closedCh: return ErrConnClosing } - } } func (ht *serverHandlerTransport) WriteStatus(s *Stream, st *status.Status) error { + ht.writeStatusMu.Lock() + defer ht.writeStatusMu.Unlock() + err := ht.do(func() { ht.writeCommonHeaders(s) @@ -209,7 +208,15 @@ func (ht *serverHandlerTransport) WriteStatus(s *Stream, st *status.Status) erro h.Set("Grpc-Message", encodeGrpcMessage(m)) } - // TODO: Support Grpc-Status-Details-Bin + if p := st.Proto(); p != nil && len(p.Details) > 0 { + stBytes, err := proto.Marshal(p) + if err != nil { + // TODO: return error instead, when callers are able to handle it. + panic(err) + } + + h.Set("Grpc-Status-Details-Bin", encodeBinHeader(stBytes)) + } if md := s.Trailer(); len(md) > 0 { for k, vv := range md { @@ -225,7 +232,14 @@ func (ht *serverHandlerTransport) WriteStatus(s *Stream, st *status.Status) erro } } }) - close(ht.writes) + + if err == nil { // transport has not been closed + if ht.stats != nil { + ht.stats.HandleRPC(s.Context(), &stats.OutTrailer{}) + } + ht.Close() + close(ht.writes) + } return err } @@ -239,7 +253,7 @@ func (ht *serverHandlerTransport) writeCommonHeaders(s *Stream) { h := ht.rw.Header() h["Date"] = nil // suppress Date to make tests happy; TODO: restore - h.Set("Content-Type", "application/grpc") + h.Set("Content-Type", ht.contentType) // Predeclare trailers we'll set later in WriteStatus (after the body). // This is a SHOULD in the HTTP RFC, and the way you add (known) @@ -248,16 +262,17 @@ func (ht *serverHandlerTransport) writeCommonHeaders(s *Stream) { // and https://golang.org/pkg/net/http/#example_ResponseWriter_trailers h.Add("Trailer", "Grpc-Status") h.Add("Trailer", "Grpc-Message") - // TODO: Support Grpc-Status-Details-Bin + h.Add("Trailer", "Grpc-Status-Details-Bin") if s.sendCompress != "" { h.Set("Grpc-Encoding", s.sendCompress) } } -func (ht *serverHandlerTransport) Write(s *Stream, data []byte, opts *Options) error { +func (ht *serverHandlerTransport) Write(s *Stream, hdr []byte, data []byte, opts *Options) error { return ht.do(func() { ht.writeCommonHeaders(s) + ht.rw.Write(hdr) ht.rw.Write(data) if !opts.Delay { ht.rw.(http.Flusher).Flush() @@ -266,7 +281,7 @@ func (ht *serverHandlerTransport) Write(s *Stream, data []byte, opts *Options) e } func (ht *serverHandlerTransport) WriteHeader(s *Stream, md metadata.MD) error { - return ht.do(func() { + err := ht.do(func() { ht.writeCommonHeaders(s) h := ht.rw.Header() for k, vv := range md { @@ -282,17 +297,24 @@ func (ht *serverHandlerTransport) WriteHeader(s *Stream, md metadata.MD) error { ht.rw.WriteHeader(200) ht.rw.(http.Flusher).Flush() }) + + if err == nil { + if ht.stats != nil { + ht.stats.HandleRPC(s.Context(), &stats.OutHeader{}) + } + } + return err } func (ht *serverHandlerTransport) HandleStreams(startStream func(*Stream), traceCtx func(context.Context, string) context.Context) { // With this transport type there will be exactly 1 stream: this HTTP request. - var ctx context.Context + ctx := contextFromRequest(ht.req) var cancel context.CancelFunc if ht.timeoutSet { - ctx, cancel = context.WithTimeout(context.Background(), ht.timeout) + ctx, cancel = context.WithTimeout(ctx, ht.timeout) } else { - ctx, cancel = context.WithCancel(context.Background()) + ctx, cancel = context.WithCancel(ctx) } // requestOver is closed when either the request's context is done @@ -316,13 +338,14 @@ func (ht *serverHandlerTransport) HandleStreams(startStream func(*Stream), trace req := ht.req s := &Stream{ - id: 0, // irrelevant - requestRead: func(int) {}, - cancel: cancel, - buf: newRecvBuffer(), - st: ht, - method: req.URL.Path, - recvCompress: req.Header.Get("grpc-encoding"), + id: 0, // irrelevant + requestRead: func(int) {}, + cancel: cancel, + buf: newRecvBuffer(), + st: ht, + method: req.URL.Path, + recvCompress: req.Header.Get("grpc-encoding"), + contentSubtype: ht.contentSubtype, } pr := &peer.Peer{ Addr: ht.RemoteAddr(), @@ -331,8 +354,16 @@ func (ht *serverHandlerTransport) HandleStreams(startStream func(*Stream), trace pr.AuthInfo = credentials.TLSInfo{State: *req.TLS} } ctx = metadata.NewIncomingContext(ctx, ht.headerMD) - ctx = peer.NewContext(ctx, pr) - s.ctx = newContextWithStream(ctx, s) + s.ctx = peer.NewContext(ctx, pr) + if ht.stats != nil { + s.ctx = ht.stats.TagRPC(s.ctx, &stats.RPCTagInfo{FullMethodName: s.method}) + inHeader := &stats.InHeader{ + FullMethod: s.method, + RemoteAddr: ht.RemoteAddr(), + Compression: s.recvCompress, + } + ht.stats.HandleRPC(s.ctx, inHeader) + } s.trReader = &transportReader{ reader: &recvBufferReader{ctx: s.ctx, recv: s.buf}, windowHandler: func(int) {}, @@ -348,11 +379,11 @@ func (ht *serverHandlerTransport) HandleStreams(startStream func(*Stream), trace for buf := make([]byte, readSize); ; { n, err := req.Body.Read(buf) if n > 0 { - s.buf.put(&recvMsg{data: buf[:n:n]}) + s.buf.put(recvMsg{data: buf[:n:n]}) buf = buf[n:] } if err != nil { - s.buf.put(&recvMsg{err: mapRecvMsgError(err)}) + s.buf.put(recvMsg{err: mapRecvMsgError(err)}) return } if len(buf) == 0 { diff --git a/vendor/google.golang.org/grpc/transport/handler_server_test.go b/vendor/google.golang.org/grpc/transport/handler_server_test.go index 8437848..3261b8e 100644 --- a/vendor/google.golang.org/grpc/transport/handler_server_test.go +++ b/vendor/google.golang.org/grpc/transport/handler_server_test.go @@ -1,32 +1,18 @@ /* - * Copyright 2016, Google Inc. - * All rights reserved. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * Copyright 2016 gRPC authors. * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * 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 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -40,10 +26,14 @@ import ( "net/http/httptest" "net/url" "reflect" + "sync" "testing" "time" + "github.com/golang/protobuf/proto" + dpb "github.com/golang/protobuf/ptypes/duration" "golang.org/x/net/context" + epb "google.golang.org/genproto/googleapis/rpc/errdetails" "google.golang.org/grpc/codes" "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" @@ -209,10 +199,12 @@ func TestHandlerTransport_NewServerHandlerTransport(t *testing.T) { }, check: func(ht *serverHandlerTransport, tt *testCase) error { want := metadata.MD{ - "meta-bar": {"bar-val1", "bar-val2"}, - "user-agent": {"x/y"}, - "meta-foo": {"foo-val"}, + "meta-bar": {"bar-val1", "bar-val2"}, + "user-agent": {"x/y a/b"}, + "meta-foo": {"foo-val"}, + "content-type": {"application/grpc"}, } + if !reflect.DeepEqual(ht.headerMD, want) { return fmt.Errorf("metdata = %#v; want %#v", ht.headerMD, want) } @@ -226,7 +218,7 @@ func TestHandlerTransport_NewServerHandlerTransport(t *testing.T) { if tt.modrw != nil { rw = tt.modrw(rw) } - got, gotErr := NewServerHandlerTransport(rw, tt.req) + got, gotErr := NewServerHandlerTransport(rw, tt.req, nil) if (gotErr != nil) != (tt.wantErr != "") || (gotErr != nil && gotErr.Error() != tt.wantErr) { t.Errorf("%s: error = %v; want %q", tt.name, gotErr, tt.wantErr) continue @@ -280,7 +272,7 @@ func newHandleStreamTest(t *testing.T) *handleStreamTest { Body: bodyr, } rw := newTestHandlerResponseWriter().(testHandlerResponseWriter) - ht, err := NewServerHandlerTransport(rw, req) + ht, err := NewServerHandlerTransport(rw, req, nil) if err != nil { t.Fatal(err) } @@ -308,7 +300,7 @@ func TestHandlerTransport_HandleStreams(t *testing.T) { wantHeader := http.Header{ "Date": nil, "Content-Type": {"application/grpc"}, - "Trailer": {"Grpc-Status", "Grpc-Message"}, + "Trailer": {"Grpc-Status", "Grpc-Message", "Grpc-Status-Details-Bin"}, "Grpc-Status": {"0"}, } if !reflect.DeepEqual(st.rw.HeaderMap, wantHeader) { @@ -328,6 +320,7 @@ func TestHandlerTransport_HandleStreams_InvalidArgument(t *testing.T) { func handleStreamCloseBodyTest(t *testing.T, statusCode codes.Code, msg string) { st := newHandleStreamTest(t) + handleStream := func(s *Stream) { st.ht.WriteStatus(s, status.New(statusCode, msg)) } @@ -338,10 +331,11 @@ func handleStreamCloseBodyTest(t *testing.T, statusCode codes.Code, msg string) wantHeader := http.Header{ "Date": nil, "Content-Type": {"application/grpc"}, - "Trailer": {"Grpc-Status", "Grpc-Message"}, + "Trailer": {"Grpc-Status", "Grpc-Message", "Grpc-Status-Details-Bin"}, "Grpc-Status": {fmt.Sprint(uint32(statusCode))}, "Grpc-Message": {encodeGrpcMessage(msg)}, } + if !reflect.DeepEqual(st.rw.HeaderMap, wantHeader) { t.Errorf("Header+Trailer mismatch.\n got: %#v\nwant: %#v", st.rw.HeaderMap, wantHeader) } @@ -363,7 +357,7 @@ func TestHandlerTransport_HandleStreams_Timeout(t *testing.T) { Body: bodyr, } rw := newTestHandlerResponseWriter().(testHandlerResponseWriter) - ht, err := NewServerHandlerTransport(rw, req) + ht, err := NewServerHandlerTransport(rw, req, nil) if err != nil { t.Fatal(err) } @@ -389,7 +383,7 @@ func TestHandlerTransport_HandleStreams_Timeout(t *testing.T) { wantHeader := http.Header{ "Date": nil, "Content-Type": {"application/grpc"}, - "Trailer": {"Grpc-Status", "Grpc-Message"}, + "Trailer": {"Grpc-Status", "Grpc-Message", "Grpc-Status-Details-Bin"}, "Grpc-Status": {"4"}, "Grpc-Message": {encodeGrpcMessage("too slow")}, } @@ -397,3 +391,92 @@ func TestHandlerTransport_HandleStreams_Timeout(t *testing.T) { t.Errorf("Header+Trailer Map mismatch.\n got: %#v\nwant: %#v", rw.HeaderMap, wantHeader) } } + +// TestHandlerTransport_HandleStreams_MultiWriteStatus ensures that +// concurrent "WriteStatus"s do not panic writing to closed "writes" channel. +func TestHandlerTransport_HandleStreams_MultiWriteStatus(t *testing.T) { + testHandlerTransportHandleStreams(t, func(st *handleStreamTest, s *Stream) { + if want := "/service/foo.bar"; s.method != want { + t.Errorf("stream method = %q; want %q", s.method, want) + } + st.bodyw.Close() // no body + + var wg sync.WaitGroup + wg.Add(5) + for i := 0; i < 5; i++ { + go func() { + defer wg.Done() + st.ht.WriteStatus(s, status.New(codes.OK, "")) + }() + } + wg.Wait() + }) +} + +// TestHandlerTransport_HandleStreams_WriteStatusWrite ensures that "Write" +// following "WriteStatus" does not panic writing to closed "writes" channel. +func TestHandlerTransport_HandleStreams_WriteStatusWrite(t *testing.T) { + testHandlerTransportHandleStreams(t, func(st *handleStreamTest, s *Stream) { + if want := "/service/foo.bar"; s.method != want { + t.Errorf("stream method = %q; want %q", s.method, want) + } + st.bodyw.Close() // no body + + st.ht.WriteStatus(s, status.New(codes.OK, "")) + st.ht.Write(s, []byte("hdr"), []byte("data"), &Options{}) + }) +} + +func testHandlerTransportHandleStreams(t *testing.T, handleStream func(st *handleStreamTest, s *Stream)) { + st := newHandleStreamTest(t) + st.ht.HandleStreams( + func(s *Stream) { go handleStream(st, s) }, + func(ctx context.Context, method string) context.Context { return ctx }, + ) +} + +func TestHandlerTransport_HandleStreams_ErrDetails(t *testing.T) { + errDetails := []proto.Message{ + &epb.RetryInfo{ + RetryDelay: &dpb.Duration{Seconds: 60}, + }, + &epb.ResourceInfo{ + ResourceType: "foo bar", + ResourceName: "service.foo.bar", + Owner: "User", + }, + } + + statusCode := codes.ResourceExhausted + msg := "you are being throttled" + st, err := status.New(statusCode, msg).WithDetails(errDetails...) + if err != nil { + t.Fatal(err) + } + + stBytes, err := proto.Marshal(st.Proto()) + if err != nil { + t.Fatal(err) + } + + hst := newHandleStreamTest(t) + handleStream := func(s *Stream) { + hst.ht.WriteStatus(s, st) + } + hst.ht.HandleStreams( + func(s *Stream) { go handleStream(s) }, + func(ctx context.Context, method string) context.Context { return ctx }, + ) + wantHeader := http.Header{ + "Date": nil, + "Content-Type": {"application/grpc"}, + "Trailer": {"Grpc-Status", "Grpc-Message", "Grpc-Status-Details-Bin"}, + "Grpc-Status": {fmt.Sprint(uint32(statusCode))}, + "Grpc-Message": {encodeGrpcMessage(msg)}, + "Grpc-Status-Details-Bin": {encodeBinHeader(stBytes)}, + } + + if !reflect.DeepEqual(hst.rw.HeaderMap, wantHeader) { + t.Errorf("Header+Trailer mismatch.\n got: %#v\nwant: %#v", hst.rw.HeaderMap, wantHeader) + } +} diff --git a/vendor/google.golang.org/grpc/transport/http2_client.go b/vendor/google.golang.org/grpc/transport/http2_client.go index 713f762..8b5be0d 100644 --- a/vendor/google.golang.org/grpc/transport/http2_client.go +++ b/vendor/google.golang.org/grpc/transport/http2_client.go @@ -1,33 +1,18 @@ /* * - * Copyright 2014, Google Inc. - * All rights reserved. + * Copyright 2014 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -35,6 +20,7 @@ package transport import ( "bytes" + "fmt" "io" "math" "net" @@ -48,7 +34,6 @@ import ( "golang.org/x/net/http2/hpack" "google.golang.org/grpc/codes" "google.golang.org/grpc/credentials" - "google.golang.org/grpc/grpclog" "google.golang.org/grpc/keepalive" "google.golang.org/grpc/metadata" "google.golang.org/grpc/peer" @@ -59,7 +44,7 @@ import ( // http2Client implements the ClientTransport interface with HTTP2. type http2Client struct { ctx context.Context - target string // server name/addr + cancel context.CancelFunc userAgent string md interface{} conn net.Conn // underlying communication channel @@ -68,17 +53,6 @@ type http2Client struct { authInfo credentials.AuthInfo // auth info about the connection nextID uint32 // the next stream ID to be used - // writableChan synchronizes write access to the transport. - // A writer acquires the write lock by sending a value on writableChan - // and releases it by receiving from writableChan. - writableChan chan int - // shutdownChan is closed when Close is called. - // Blocking operations should select on shutdownChan to avoid - // blocking forever after Close. - // TODO(zhaoq): Maybe have a channel context? - shutdownChan chan struct{} - // errorChan is closed to notify the I/O error to the caller. - errorChan chan struct{} // goAway is closed to notify the upper layer (i.e., addrConn.transportMonitor) // that the server sent GoAway on this transport. goAway chan struct{} @@ -91,10 +65,13 @@ type http2Client struct { // controlBuf delivers all the control related tasks (e.g., window // updates, reset streams, and various settings) to the controller. - controlBuf *recvBuffer + controlBuf *controlBuffer fc *inFlow // sendQuotaPool provides flow control to outbound message. sendQuotaPool *quotaPool + // localSendQuota limits the amount of data that can be scheduled + // for writing before it is actually written out. + localSendQuota *quotaPool // streamsQuota limits the max number of concurrent streams. streamsQuota *quotaPool @@ -114,6 +91,14 @@ type http2Client struct { initialWindowSize int32 + bdpEst *bdpEstimator + outQuotaVersion uint32 + + // onSuccess is a callback that client transport calls upon + // receiving server preface to signal that a succefull HTTP2 + // connection was established. + onSuccess func() + mu sync.Mutex // guard the following variables state transportState // the state of underlying connection activeStreams map[uint32]*Stream @@ -121,8 +106,6 @@ type http2Client struct { maxStreams int // the per-stream outbound flow control window size set by the peer. streamSendQuota uint32 - // goAwayID records the Last-Stream-ID in the GoAway frame from the server. - goAwayID uint32 // prevGoAway ID records the Last-Stream-ID in the previous GOAway frame. prevGoAwayID uint32 // goAwayReason records the http2.ErrCode and debug data received with the @@ -138,18 +121,6 @@ func dial(ctx context.Context, fn func(context.Context, string) (net.Conn, error } func isTemporary(err error) bool { - switch err { - case io.EOF: - // Connection closures may be resolved upon retry, and are thus - // treated as temporary. - return true - case context.DeadlineExceeded: - // In Go 1.7, context.DeadlineExceeded implements Timeout(), and this - // special case is not needed. Until then, we need to keep this - // clause. - return true - } - switch err := err.(type) { case interface { Temporary() bool @@ -162,15 +133,22 @@ func isTemporary(err error) bool { // temporary. return err.Timeout() } - return false + return true } // newHTTP2Client constructs a connected ClientTransport to addr based on HTTP2 // and starts to receive messages on it. Non-nil error returns if construction // fails. -func newHTTP2Client(ctx context.Context, addr TargetInfo, opts ConnectOptions) (_ ClientTransport, err error) { +func newHTTP2Client(connectCtx, ctx context.Context, addr TargetInfo, opts ConnectOptions, onSuccess func()) (_ ClientTransport, err error) { scheme := "http" - conn, err := dial(ctx, opts.Dialer, addr.Addr) + ctx, cancel := context.WithCancel(ctx) + defer func() { + if err != nil { + cancel() + } + }() + + conn, err := dial(connectCtx, opts.Dialer, addr.Addr) if err != nil { if opts.FailOnNonTempDialError { return nil, connectionErrorf(isTemporary(err), err, "transport: error while dialing: %v", err) @@ -189,12 +167,9 @@ func newHTTP2Client(ctx context.Context, addr TargetInfo, opts ConnectOptions) ( ) if creds := opts.TransportCredentials; creds != nil { scheme = "https" - conn, authInfo, err = creds.ClientHandshake(ctx, addr.Addr, conn) + conn, authInfo, err = creds.ClientHandshake(connectCtx, addr.Authority, conn) if err != nil { - // Credentials handshake errors are typically considered permanent - // to avoid retrying on e.g. bad certificates. - temp := isTemporary(err) - return nil, connectionErrorf(temp, err, "transport: authentication handshake failed: %v", err) + return nil, connectionErrorf(isTemporary(err), err, "transport: authentication handshake failed: %v", err) } isSecure = true } @@ -206,14 +181,24 @@ func newHTTP2Client(ctx context.Context, addr TargetInfo, opts ConnectOptions) ( if kp.Timeout == 0 { kp.Timeout = defaultClientKeepaliveTimeout } - icwz := int32(initialConnWindowSize) + dynamicWindow := true + icwz := int32(initialWindowSize) if opts.InitialConnWindowSize >= defaultWindowSize { icwz = opts.InitialConnWindowSize + dynamicWindow = false } var buf bytes.Buffer + writeBufSize := defaultWriteBufSize + if opts.WriteBufferSize > 0 { + writeBufSize = opts.WriteBufferSize + } + readBufSize := defaultReadBufSize + if opts.ReadBufferSize > 0 { + readBufSize = opts.ReadBufferSize + } t := &http2Client{ ctx: ctx, - target: addr.Addr, + cancel: cancel, userAgent: opts.UserAgent, md: addr.Metadata, conn: conn, @@ -222,17 +207,15 @@ func newHTTP2Client(ctx context.Context, addr TargetInfo, opts ConnectOptions) ( authInfo: authInfo, // The client initiated stream id is odd starting from 1. nextID: 1, - writableChan: make(chan int, 1), - shutdownChan: make(chan struct{}), - errorChan: make(chan struct{}), goAway: make(chan struct{}), awakenKeepalive: make(chan struct{}, 1), - framer: newFramer(conn), hBuf: &buf, hEnc: hpack.NewEncoder(&buf), - controlBuf: newRecvBuffer(), + framer: newFramer(conn, writeBufSize, readBufSize), + controlBuf: newControlBuffer(), fc: &inFlow{limit: uint32(icwz)}, sendQuotaPool: newQuotaPool(defaultWindowSize), + localSendQuota: newQuotaPool(defaultLocalSendQuota), scheme: scheme, state: reachable, activeStreams: make(map[uint32]*Stream), @@ -244,9 +227,17 @@ func newHTTP2Client(ctx context.Context, addr TargetInfo, opts ConnectOptions) ( kp: kp, statsHandler: opts.StatsHandler, initialWindowSize: initialWindowSize, + onSuccess: onSuccess, } if opts.InitialWindowSize >= defaultWindowSize { t.initialWindowSize = opts.InitialWindowSize + dynamicWindow = false + } + if dynamicWindow { + t.bdpEst = &bdpEstimator{ + bdp: initialWindowSize, + updateFlowControl: t.updateFlowControl, + } } // Make sure awakenKeepalive can't be written upon. // keepalive routine will make it writable, if need be. @@ -276,12 +267,12 @@ func newHTTP2Client(ctx context.Context, addr TargetInfo, opts ConnectOptions) ( return nil, connectionErrorf(true, err, "transport: preface mismatch, wrote %d bytes; want %d", n, len(clientPreface)) } if t.initialWindowSize != defaultWindowSize { - err = t.framer.writeSettings(true, http2.Setting{ + err = t.framer.fr.WriteSettings(http2.Setting{ ID: http2.SettingInitialWindowSize, Val: uint32(t.initialWindowSize), }) } else { - err = t.framer.writeSettings(true) + err = t.framer.fr.WriteSettings() } if err != nil { t.Close() @@ -289,31 +280,35 @@ func newHTTP2Client(ctx context.Context, addr TargetInfo, opts ConnectOptions) ( } // Adjust the connection flow control window if needed. if delta := uint32(icwz - defaultWindowSize); delta > 0 { - if err := t.framer.writeWindowUpdate(true, 0, delta); err != nil { + if err := t.framer.fr.WriteWindowUpdate(0, delta); err != nil { t.Close() return nil, connectionErrorf(true, err, "transport: failed to write window update: %v", err) } } - go t.controller() + t.framer.writer.Flush() + go func() { + loopyWriter(t.ctx, t.controlBuf, t.itemHandler) + t.conn.Close() + }() if t.kp.Time != infinity { go t.keepalive() } - t.writableChan <- 0 return t, nil } func (t *http2Client) newStream(ctx context.Context, callHdr *CallHdr) *Stream { // TODO(zhaoq): Handle uint32 overflow of Stream.id. s := &Stream{ - id: t.nextID, - done: make(chan struct{}), - goAway: make(chan struct{}), - method: callHdr.Method, - sendCompress: callHdr.SendCompress, - buf: newRecvBuffer(), - fc: &inFlow{limit: uint32(t.initialWindowSize)}, - sendQuotaPool: newQuotaPool(int(t.streamSendQuota)), - headerChan: make(chan struct{}), + id: t.nextID, + done: make(chan struct{}), + goAway: make(chan struct{}), + method: callHdr.Method, + sendCompress: callHdr.SendCompress, + buf: newRecvBuffer(), + fc: &inFlow{limit: uint32(t.initialWindowSize)}, + sendQuotaPool: newQuotaPool(int(t.streamSendQuota)), + headerChan: make(chan struct{}), + contentSubtype: callHdr.ContentSubtype, } t.nextID += 2 s.requestRead = func(n int) { @@ -333,7 +328,12 @@ func (t *http2Client) newStream(ctx context.Context, callHdr *CallHdr) *Stream { t.updateWindow(s, uint32(n)) }, } - + s.waiters = waiters{ + ctx: s.ctx, + tctx: t.ctx, + done: s.done, + goAway: s.goAway, + } return s } @@ -355,23 +355,22 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (_ *Strea // Create an audience string only if needed. if len(t.creds) > 0 || callHdr.Creds != nil { // Construct URI required to get auth request metadata. - var port string - if pos := strings.LastIndex(t.target, ":"); pos != -1 { - // Omit port if it is the default one. - if t.target[pos+1:] != "443" { - port = ":" + t.target[pos+1:] - } - } + // Omit port if it is the default one. + host := strings.TrimSuffix(callHdr.Host, ":443") pos := strings.LastIndex(callHdr.Method, "/") if pos == -1 { pos = len(callHdr.Method) } - audience = "https://" + callHdr.Host + port + callHdr.Method[:pos] + audience = "https://" + host + callHdr.Method[:pos] } for _, c := range t.creds { data, err := c.GetRequestMetadata(ctx, audience) if err != nil { - return nil, streamErrorf(codes.Internal, "transport: %v", err) + if _, ok := status.FromError(err); ok { + return nil, err + } + + return nil, streamErrorf(codes.Unauthenticated, "transport: %v", err) } for k, v := range data { // Capital header names are illegal in HTTP/2. @@ -379,13 +378,13 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (_ *Strea authData[k] = v } } - callAuthData := make(map[string]string) + callAuthData := map[string]string{} // Check if credentials.PerRPCCredentials were provided via call options. // Note: if these credentials are provided both via dial options and call // options, then both sets of credentials will be applied. if callCreds := callHdr.Creds; callCreds != nil { if !t.isSecure && callCreds.RequireTransportSecurity() { - return nil, streamErrorf(codes.Unauthenticated, "transport: cannot send secure credentials on an insecure conneciton") + return nil, streamErrorf(codes.Unauthenticated, "transport: cannot send secure credentials on an insecure connection") } data, err := callCreds.GetRequestMetadata(ctx, audience) if err != nil { @@ -404,94 +403,75 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (_ *Strea } if t.state == draining { t.mu.Unlock() - return nil, ErrStreamDrain + return nil, errStreamDrain } if t.state != reachable { t.mu.Unlock() return nil, ErrConnClosing } t.mu.Unlock() - sq, err := wait(ctx, nil, nil, t.shutdownChan, t.streamsQuota.acquire()) - if err != nil { - return nil, err - } - // Returns the quota balance back. - if sq > 1 { - t.streamsQuota.add(sq - 1) - } - if _, err := wait(ctx, nil, nil, t.shutdownChan, t.writableChan); err != nil { - // Return the quota back now because there is no stream returned to the caller. - if _, ok := err.(StreamError); ok { - t.streamsQuota.add(1) - } + // Get a quota of 1 from streamsQuota. + if _, _, err := t.streamsQuota.get(1, waiters{ctx: ctx, tctx: t.ctx}); err != nil { return nil, err } - t.mu.Lock() - if t.state == draining { - t.mu.Unlock() - t.streamsQuota.add(1) - // Need to make t writable again so that the rpc in flight can still proceed. - t.writableChan <- 0 - return nil, ErrStreamDrain - } - if t.state != reachable { - t.mu.Unlock() - return nil, ErrConnClosing - } - s := t.newStream(ctx, callHdr) - t.activeStreams[s.id] = s - // If the number of active streams change from 0 to 1, then check if keepalive - // has gone dormant. If so, wake it up. - if len(t.activeStreams) == 1 { - select { - case t.awakenKeepalive <- struct{}{}: - t.framer.writePing(false, false, [8]byte{}) - default: - } - } - - t.mu.Unlock() - - // HPACK encodes various headers. Note that once WriteField(...) is - // called, the corresponding headers/continuation frame has to be sent - // because hpack.Encoder is stateful. - t.hBuf.Reset() - t.hEnc.WriteField(hpack.HeaderField{Name: ":method", Value: "POST"}) - t.hEnc.WriteField(hpack.HeaderField{Name: ":scheme", Value: t.scheme}) - t.hEnc.WriteField(hpack.HeaderField{Name: ":path", Value: callHdr.Method}) - t.hEnc.WriteField(hpack.HeaderField{Name: ":authority", Value: callHdr.Host}) - t.hEnc.WriteField(hpack.HeaderField{Name: "content-type", Value: "application/grpc"}) - t.hEnc.WriteField(hpack.HeaderField{Name: "user-agent", Value: t.userAgent}) - t.hEnc.WriteField(hpack.HeaderField{Name: "te", Value: "trailers"}) + // TODO(mmukhi): Benchmark if the performance gets better if count the metadata and other header fields + // first and create a slice of that exact size. + // Make the slice of certain predictable size to reduce allocations made by append. + hfLen := 7 // :method, :scheme, :path, :authority, content-type, user-agent, te + hfLen += len(authData) + len(callAuthData) + headerFields := make([]hpack.HeaderField, 0, hfLen) + headerFields = append(headerFields, hpack.HeaderField{Name: ":method", Value: "POST"}) + headerFields = append(headerFields, hpack.HeaderField{Name: ":scheme", Value: t.scheme}) + headerFields = append(headerFields, hpack.HeaderField{Name: ":path", Value: callHdr.Method}) + headerFields = append(headerFields, hpack.HeaderField{Name: ":authority", Value: callHdr.Host}) + headerFields = append(headerFields, hpack.HeaderField{Name: "content-type", Value: contentType(callHdr.ContentSubtype)}) + headerFields = append(headerFields, hpack.HeaderField{Name: "user-agent", Value: t.userAgent}) + headerFields = append(headerFields, hpack.HeaderField{Name: "te", Value: "trailers"}) if callHdr.SendCompress != "" { - t.hEnc.WriteField(hpack.HeaderField{Name: "grpc-encoding", Value: callHdr.SendCompress}) + headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-encoding", Value: callHdr.SendCompress}) } if dl, ok := ctx.Deadline(); ok { // Send out timeout regardless its value. The server can detect timeout context by itself. + // TODO(mmukhi): Perhaps this field should be updated when actually writing out to the wire. timeout := dl.Sub(time.Now()) - t.hEnc.WriteField(hpack.HeaderField{Name: "grpc-timeout", Value: encodeTimeout(timeout)}) + headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-timeout", Value: encodeTimeout(timeout)}) } - for k, v := range authData { - t.hEnc.WriteField(hpack.HeaderField{Name: k, Value: encodeMetadataHeader(k, v)}) + headerFields = append(headerFields, hpack.HeaderField{Name: k, Value: encodeMetadataHeader(k, v)}) } for k, v := range callAuthData { - t.hEnc.WriteField(hpack.HeaderField{Name: k, Value: encodeMetadataHeader(k, v)}) + headerFields = append(headerFields, hpack.HeaderField{Name: k, Value: encodeMetadataHeader(k, v)}) } - var ( - hasMD bool - endHeaders bool - ) - if md, ok := metadata.FromOutgoingContext(ctx); ok { - hasMD = true + if b := stats.OutgoingTags(ctx); b != nil { + headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-tags-bin", Value: encodeBinHeader(b)}) + } + if b := stats.OutgoingTrace(ctx); b != nil { + headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-trace-bin", Value: encodeBinHeader(b)}) + } + + if md, added, ok := metadata.FromOutgoingContextRaw(ctx); ok { + var k string + for _, vv := range added { + for i, v := range vv { + if i%2 == 0 { + k = v + continue + } + // HTTP doesn't allow you to set pseudoheaders after non pseudoheaders were set. + if isReservedHeader(k) { + continue + } + headerFields = append(headerFields, hpack.HeaderField{Name: strings.ToLower(k), Value: encodeMetadataHeader(k, v)}) + } + } for k, vv := range md { // HTTP doesn't allow you to set pseudoheaders after non pseudoheaders were set. if isReservedHeader(k) { continue } for _, v := range vv { - t.hEnc.WriteField(hpack.HeaderField{Name: k, Value: encodeMetadataHeader(k, v)}) + headerFields = append(headerFields, hpack.HeaderField{Name: k, Value: encodeMetadataHeader(k, v)}) } } } @@ -501,52 +481,45 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (_ *Strea continue } for _, v := range vv { - t.hEnc.WriteField(hpack.HeaderField{Name: k, Value: encodeMetadataHeader(k, v)}) + headerFields = append(headerFields, hpack.HeaderField{Name: k, Value: encodeMetadataHeader(k, v)}) } } } - first := true - bufLen := t.hBuf.Len() - // Sends the headers in a single batch even when they span multiple frames. - for !endHeaders { - size := t.hBuf.Len() - if size > http2MaxFrameLen { - size = http2MaxFrameLen - } else { - endHeaders = true - } - var flush bool - if endHeaders && (hasMD || callHdr.Flush) { - flush = true - } - if first { - // Sends a HeadersFrame to server to start a new stream. - p := http2.HeadersFrameParam{ - StreamID: s.id, - BlockFragment: t.hBuf.Next(size), - EndStream: false, - EndHeaders: endHeaders, - } - // Do a force flush for the buffered frames iff it is the last headers frame - // and there is header metadata to be sent. Otherwise, there is flushing until - // the corresponding data frame is written. - err = t.framer.writeHeaders(flush, p) - first = false - } else { - // Sends Continuation frames for the leftover headers. - err = t.framer.writeContinuation(flush, s.id, endHeaders, t.hBuf.Next(size)) - } - if err != nil { - t.notifyError(err) - return nil, connectionErrorf(true, err, "transport: %v", err) + t.mu.Lock() + if t.state == draining { + t.mu.Unlock() + t.streamsQuota.add(1) + return nil, errStreamDrain + } + if t.state != reachable { + t.mu.Unlock() + return nil, ErrConnClosing + } + s := t.newStream(ctx, callHdr) + t.activeStreams[s.id] = s + // If the number of active streams change from 0 to 1, then check if keepalive + // has gone dormant. If so, wake it up. + if len(t.activeStreams) == 1 { + select { + case t.awakenKeepalive <- struct{}{}: + t.controlBuf.put(&ping{data: [8]byte{}}) + // Fill the awakenKeepalive channel again as this channel must be + // kept non-writable except at the point that the keepalive() + // goroutine is waiting either to be awaken or shutdown. + t.awakenKeepalive <- struct{}{} + default: } } - s.bytesSent = true + t.controlBuf.put(&headerFrame{ + streamID: s.id, + hf: headerFields, + endStream: false, + }) + t.mu.Unlock() if t.statsHandler != nil { outHeader := &stats.OutHeader{ Client: true, - WireLength: bufLen, FullMethod: callHdr.Method, RemoteAddr: t.remoteAddr, LocalAddr: t.localAddr, @@ -554,7 +527,6 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (_ *Strea } t.statsHandler.HandleRPC(s.ctx, outHeader) } - t.writableChan <- 0 return s, nil } @@ -566,6 +538,10 @@ func (t *http2Client) CloseStream(s *Stream, err error) { t.mu.Unlock() return } + if err != nil { + // notify in-flight streams, before the deletion + s.write(recvMsg{err: err}) + } delete(t.activeStreams, s.id) if t.state == draining && len(t.activeStreams) == 0 { // The transport is draining and s is the last live stream on t. @@ -595,11 +571,6 @@ func (t *http2Client) CloseStream(s *Stream, err error) { s.mu.Lock() rstStream = s.rstStream rstError = s.rstError - if q := s.fc.resetPendingData(); q > 0 { - if n := t.fc.onRead(q); n > 0 { - t.controlBuf.put(&windowUpdate{0, n}) - } - } if s.state == streamDone { s.mu.Unlock() return @@ -610,7 +581,7 @@ func (t *http2Client) CloseStream(s *Stream, err error) { } s.state = streamDone s.mu.Unlock() - if _, ok := err.(StreamError); ok { + if err != nil && !rstStream { rstStream = true rstError = http2.ErrCodeCancel } @@ -619,19 +590,16 @@ func (t *http2Client) CloseStream(s *Stream, err error) { // Close kicks off the shutdown process of the transport. This should be called // only once on a transport. Once it is called, the transport should not be // accessed any more. -func (t *http2Client) Close() (err error) { +func (t *http2Client) Close() error { t.mu.Lock() if t.state == closing { t.mu.Unlock() - return - } - if t.state == reachable || t.state == draining { - close(t.errorChan) + return nil } t.state = closing t.mu.Unlock() - close(t.shutdownChan) - err = t.conn.Close() + t.cancel() + err := t.conn.Close() t.mu.Lock() streams := t.activeStreams t.activeStreams = nil @@ -652,41 +620,18 @@ func (t *http2Client) Close() (err error) { } t.statsHandler.HandleConn(t.ctx, connEnd) } - return + return err } +// GracefulClose sets the state to draining, which prevents new streams from +// being created and causes the transport to be closed when the last active +// stream is closed. If there are no active streams, the transport is closed +// immediately. This does nothing if the transport is already draining or +// closing. func (t *http2Client) GracefulClose() error { t.mu.Lock() switch t.state { - case unreachable: - // The server may close the connection concurrently. t is not available for - // any streams. Close it now. - t.mu.Unlock() - t.Close() - return nil - case closing: - t.mu.Unlock() - return nil - } - // Notify the streams which were initiated after the server sent GOAWAY. - select { - case <-t.goAway: - n := t.prevGoAwayID - if n == 0 && t.nextID > 1 { - n = t.nextID - 2 - } - m := t.goAwayID + 2 - if m == 2 { - m = 1 - } - for i := m; i <= n; i += 2 { - if s, ok := t.activeStreams[i]; ok { - close(s.goAway) - } - } - default: - } - if t.state == draining { + case closing, draining: t.mu.Unlock() return nil } @@ -701,95 +646,102 @@ func (t *http2Client) GracefulClose() error { // Write formats the data into HTTP2 data frame(s) and sends it out. The caller // should proceed only if Write returns nil. -// TODO(zhaoq): opts.Delay is ignored in this implementation. Support it later -// if it improves the performance. -func (t *http2Client) Write(s *Stream, data []byte, opts *Options) error { - r := bytes.NewBuffer(data) - for { - var p []byte - if r.Len() > 0 { +func (t *http2Client) Write(s *Stream, hdr []byte, data []byte, opts *Options) error { + select { + case <-s.ctx.Done(): + return ContextErr(s.ctx.Err()) + case <-s.done: + return io.EOF + case <-t.ctx.Done(): + return ErrConnClosing + default: + } + + if hdr == nil && data == nil && opts.Last { + // stream.CloseSend uses this to send an empty frame with endStream=True + t.controlBuf.put(&dataFrame{streamID: s.id, endStream: true, f: func() {}}) + return nil + } + // Add data to header frame so that we can equally distribute data across frames. + emptyLen := http2MaxFrameLen - len(hdr) + if emptyLen > len(data) { + emptyLen = len(data) + } + hdr = append(hdr, data[:emptyLen]...) + data = data[emptyLen:] + var ( + streamQuota int + streamQuotaVer uint32 + err error + ) + for idx, r := range [][]byte{hdr, data} { + for len(r) > 0 { size := http2MaxFrameLen - // Wait until the stream has some quota to send the data. - sq, err := wait(s.ctx, s.done, s.goAway, t.shutdownChan, s.sendQuotaPool.acquire()) - if err != nil { - return err + if size > len(r) { + size = len(r) + } + if streamQuota == 0 { // Used up all the locally cached stream quota. + // Get all the stream quota there is. + streamQuota, streamQuotaVer, err = s.sendQuotaPool.get(math.MaxInt32, s.waiters) + if err != nil { + return err + } + } + if size > streamQuota { + size = streamQuota } - // Wait until the transport has some quota to send the data. - tq, err := wait(s.ctx, s.done, s.goAway, t.shutdownChan, t.sendQuotaPool.acquire()) + + // Get size worth quota from transport. + tq, _, err := t.sendQuotaPool.get(size, s.waiters) if err != nil { return err } - if sq < size { - size = sq - } if tq < size { size = tq } - p = r.Next(size) - ps := len(p) - if ps < sq { - // Overbooked stream quota. Return it back. - s.sendQuotaPool.add(sq - ps) + ltq, _, err := t.localSendQuota.get(size, s.waiters) + if err != nil { + // Add the acquired quota back to transport. + t.sendQuotaPool.add(tq) + return err } - if ps < tq { - // Overbooked transport quota. Return it back. - t.sendQuotaPool.add(tq - ps) + // even if ltq is smaller than size we don't adjust size since + // ltq is only a soft limit. + streamQuota -= size + p := r[:size] + var endStream bool + // See if this is the last frame to be written. + if opts.Last { + if len(r)-size == 0 { // No more data in r after this iteration. + if idx == 0 { // We're writing data header. + if len(data) == 0 { // There's no data to follow. + endStream = true + } + } else { // We're writing data. + endStream = true + } + } } - } - var ( - endStream bool - forceFlush bool - ) - if opts.Last && r.Len() == 0 { - endStream = true - } - // Indicate there is a writer who is about to write a data frame. - t.framer.adjustNumWriters(1) - // Got some quota. Try to acquire writing privilege on the transport. - if _, err := wait(s.ctx, s.done, s.goAway, t.shutdownChan, t.writableChan); err != nil { - if _, ok := err.(StreamError); ok || err == io.EOF { - // Return the connection quota back. - t.sendQuotaPool.add(len(p)) + success := func() { + ltq := ltq + t.controlBuf.put(&dataFrame{streamID: s.id, endStream: endStream, d: p, f: func() { t.localSendQuota.add(ltq) }}) + r = r[size:] } - if t.framer.adjustNumWriters(-1) == 0 { - // This writer is the last one in this batch and has the - // responsibility to flush the buffered frames. It queues - // a flush request to controlBuf instead of flushing directly - // in order to avoid the race with other writing or flushing. - t.controlBuf.put(&flushIO{}) + failure := func() { // The stream quota version must have changed. + // Our streamQuota cache is invalidated now, so give it back. + s.sendQuotaPool.lockedAdd(streamQuota + size) } - return err - } - select { - case <-s.ctx.Done(): - t.sendQuotaPool.add(len(p)) - if t.framer.adjustNumWriters(-1) == 0 { - t.controlBuf.put(&flushIO{}) + if !s.sendQuotaPool.compareAndExecute(streamQuotaVer, success, failure) { + // Couldn't send this chunk out. + t.sendQuotaPool.add(size) + t.localSendQuota.add(ltq) + streamQuota = 0 } - t.writableChan <- 0 - return ContextErr(s.ctx.Err()) - default: - } - if r.Len() == 0 && t.framer.adjustNumWriters(0) == 1 { - // Do a force flush iff this is last frame for the entire gRPC message - // and the caller is the only writer at this moment. - forceFlush = true - } - // If WriteData fails, all the pending streams will be handled - // by http2Client.Close(). No explicit CloseStream() needs to be - // invoked. - if err := t.framer.writeData(forceFlush, s.id, endStream, p); err != nil { - t.notifyError(err) - return connectionErrorf(true, err, "transport: %v", err) - } - if t.framer.adjustNumWriters(-1) == 0 { - t.framer.flushWrite() - } - t.writableChan <- 0 - if r.Len() == 0 { - break } } + if streamQuota > 0 { // Add the left over quota back to stream. + s.sendQuotaPool.add(streamQuota) + } if !opts.Last { return nil } @@ -818,6 +770,10 @@ func (t *http2Client) adjustWindow(s *Stream, n uint32) { return } if w := s.fc.maybeAdjust(n); w > 0 { + // Piggyback connection's window update along. + if cw := t.fc.resetPendingUpdate(); cw > 0 { + t.controlBuf.put(&windowUpdate{0, cw}) + } t.controlBuf.put(&windowUpdate{s.id, w}) } } @@ -831,36 +787,75 @@ func (t *http2Client) updateWindow(s *Stream, n uint32) { if s.state == streamDone { return } - if w := t.fc.onRead(n); w > 0 { - t.controlBuf.put(&windowUpdate{0, w}) - } if w := s.fc.onRead(n); w > 0 { + if cw := t.fc.resetPendingUpdate(); cw > 0 { + t.controlBuf.put(&windowUpdate{0, cw}) + } t.controlBuf.put(&windowUpdate{s.id, w}) } } +// updateFlowControl updates the incoming flow control windows +// for the transport and the stream based on the current bdp +// estimation. +func (t *http2Client) updateFlowControl(n uint32) { + t.mu.Lock() + for _, s := range t.activeStreams { + s.fc.newLimit(n) + } + t.initialWindowSize = int32(n) + t.mu.Unlock() + t.controlBuf.put(&windowUpdate{0, t.fc.newLimit(n)}) + t.controlBuf.put(&settings{ + ss: []http2.Setting{ + { + ID: http2.SettingInitialWindowSize, + Val: uint32(n), + }, + }, + }) +} + func (t *http2Client) handleData(f *http2.DataFrame) { size := f.Header().Length - if err := t.fc.onData(uint32(size)); err != nil { - t.notifyError(connectionErrorf(true, err, "%v", err)) - return + var sendBDPPing bool + if t.bdpEst != nil { + sendBDPPing = t.bdpEst.add(uint32(size)) + } + // Decouple connection's flow control from application's read. + // An update on connection's flow control should not depend on + // whether user application has read the data or not. Such a + // restriction is already imposed on the stream's flow control, + // and therefore the sender will be blocked anyways. + // Decoupling the connection flow control will prevent other + // active(fast) streams from starving in presence of slow or + // inactive streams. + // + // Furthermore, if a bdpPing is being sent out we can piggyback + // connection's window update for the bytes we just received. + if sendBDPPing { + if size != 0 { // Could've been an empty data frame. + t.controlBuf.put(&windowUpdate{0, uint32(size)}) + } + t.controlBuf.put(bdpPing) + } else { + if err := t.fc.onData(uint32(size)); err != nil { + t.Close() + return + } + if w := t.fc.onRead(uint32(size)); w > 0 { + t.controlBuf.put(&windowUpdate{0, w}) + } } // Select the right stream to dispatch. s, ok := t.getStream(f) if !ok { - if w := t.fc.onRead(uint32(size)); w > 0 { - t.controlBuf.put(&windowUpdate{0, w}) - } return } if size > 0 { s.mu.Lock() if s.state == streamDone { s.mu.Unlock() - // The stream has been closed. Release the corresponding quota. - if w := t.fc.onRead(uint32(size)); w > 0 { - t.controlBuf.put(&windowUpdate{0, w}) - } return } if err := s.fc.onData(uint32(size)); err != nil { @@ -872,9 +867,6 @@ func (t *http2Client) handleData(f *http2.DataFrame) { return } if f.Header().Flags.Has(http2.FlagDataPadded) { - if w := t.fc.onRead(uint32(size) - uint32(len(f.Data()))); w > 0 { - t.controlBuf.put(&windowUpdate{0, w}) - } if w := s.fc.onRead(uint32(size) - uint32(len(f.Data()))); w > 0 { t.controlBuf.put(&windowUpdate{s.id, w}) } @@ -917,31 +909,72 @@ func (t *http2Client) handleRSTStream(f *http2.RSTStreamFrame) { close(s.headerChan) s.headerDone = true } - statusCode, ok := http2ErrConvTab[http2.ErrCode(f.ErrCode)] + + code := http2.ErrCode(f.ErrCode) + if code == http2.ErrCodeRefusedStream { + // The stream was unprocessed by the server. + s.unprocessed = true + } + statusCode, ok := http2ErrConvTab[code] if !ok { - grpclog.Println("transport: http2Client.handleRSTStream found no mapped gRPC status for the received http2 error ", f.ErrCode) + warningf("transport: http2Client.handleRSTStream found no mapped gRPC status for the received http2 error %v", f.ErrCode) statusCode = codes.Unknown } - s.finish(status.Newf(statusCode, "stream terminated by RST_STREAM with error code: %d", f.ErrCode)) + s.finish(status.Newf(statusCode, "stream terminated by RST_STREAM with error code: %v", f.ErrCode)) s.mu.Unlock() s.write(recvMsg{err: io.EOF}) } -func (t *http2Client) handleSettings(f *http2.SettingsFrame) { +func (t *http2Client) handleSettings(f *http2.SettingsFrame, isFirst bool) { if f.IsAck() { return } - var ss []http2.Setting + var rs []http2.Setting + var ps []http2.Setting + isMaxConcurrentStreamsMissing := true f.ForeachSetting(func(s http2.Setting) error { - ss = append(ss, s) + if s.ID == http2.SettingMaxConcurrentStreams { + isMaxConcurrentStreamsMissing = false + } + if t.isRestrictive(s) { + rs = append(rs, s) + } else { + ps = append(ps, s) + } return nil }) - // The settings will be applied once the ack is sent. - t.controlBuf.put(&settings{ack: true, ss: ss}) + if isFirst && isMaxConcurrentStreamsMissing { + // This means server is imposing no limits on + // maximum number of concurrent streams initiated by client. + // So we must remove our self-imposed limit. + ps = append(ps, http2.Setting{ + ID: http2.SettingMaxConcurrentStreams, + Val: math.MaxUint32, + }) + } + t.applySettings(rs) + t.controlBuf.put(&settingsAck{}) + t.applySettings(ps) +} + +func (t *http2Client) isRestrictive(s http2.Setting) bool { + switch s.ID { + case http2.SettingMaxConcurrentStreams: + return int(s.Val) < t.maxStreams + case http2.SettingInitialWindowSize: + // Note: we don't acquire a lock here to read streamSendQuota + // because the same goroutine updates it later. + return s.Val < t.streamSendQuota + } + return false } func (t *http2Client) handlePing(f *http2.PingFrame) { - if f.IsAck() { // Do nothing. + if f.IsAck() { + // Maybe it's a BDP ping. + if t.bdpEst != nil { + t.bdpEst.calculate(f.Data) + } return } pingAck := &ping{ack: true} @@ -950,36 +983,65 @@ func (t *http2Client) handlePing(f *http2.PingFrame) { } func (t *http2Client) handleGoAway(f *http2.GoAwayFrame) { + t.mu.Lock() + if t.state != reachable && t.state != draining { + t.mu.Unlock() + return + } if f.ErrCode == http2.ErrCodeEnhanceYourCalm { - grpclog.Printf("Client received GoAway with http2.ErrCodeEnhanceYourCalm.") + infof("Client received GoAway with http2.ErrCodeEnhanceYourCalm.") } - t.mu.Lock() - if t.state == reachable || t.state == draining { - if f.LastStreamID > 0 && f.LastStreamID%2 != 1 { - t.mu.Unlock() - t.notifyError(connectionErrorf(true, nil, "received illegal http2 GOAWAY frame: stream ID %d is even", f.LastStreamID)) - return - } - select { - case <-t.goAway: - id := t.goAwayID - // t.goAway has been closed (i.e.,multiple GoAways). - if id < f.LastStreamID { - t.mu.Unlock() - t.notifyError(connectionErrorf(true, nil, "received illegal http2 GOAWAY frame: previously recv GOAWAY frame with LastStramID %d, currently recv %d", id, f.LastStreamID)) - return - } - t.prevGoAwayID = id - t.goAwayID = f.LastStreamID + id := f.LastStreamID + if id > 0 && id%2 != 1 { + t.mu.Unlock() + t.Close() + return + } + // A client can receive multiple GoAways from the server (see + // https://github.com/grpc/grpc-go/issues/1387). The idea is that the first + // GoAway will be sent with an ID of MaxInt32 and the second GoAway will be + // sent after an RTT delay with the ID of the last stream the server will + // process. + // + // Therefore, when we get the first GoAway we don't necessarily close any + // streams. While in case of second GoAway we close all streams created after + // the GoAwayId. This way streams that were in-flight while the GoAway from + // server was being sent don't get killed. + select { + case <-t.goAway: // t.goAway has been closed (i.e.,multiple GoAways). + // If there are multiple GoAways the first one should always have an ID greater than the following ones. + if id > t.prevGoAwayID { t.mu.Unlock() + t.Close() return - default: - t.setGoAwayReason(f) } - t.goAwayID = f.LastStreamID + default: + t.setGoAwayReason(f) close(t.goAway) + t.state = draining + } + // All streams with IDs greater than the GoAwayId + // and smaller than the previous GoAway ID should be killed. + upperLimit := t.prevGoAwayID + if upperLimit == 0 { // This is the first GoAway Frame. + upperLimit = math.MaxUint32 // Kill all streams after the GoAway ID. + } + for streamID, stream := range t.activeStreams { + if streamID > id && streamID <= upperLimit { + // The stream was unprocessed by the server. + stream.mu.Lock() + stream.unprocessed = true + stream.finish(statusGoAway) + stream.mu.Unlock() + close(stream.goAway) + } } + t.prevGoAwayID = id + active := len(t.activeStreams) t.mu.Unlock() + if active == 0 { + t.Close() + } } // setGoAwayReason sets the value of t.goAwayReason based @@ -987,11 +1049,11 @@ func (t *http2Client) handleGoAway(f *http2.GoAwayFrame) { // It expects a lock on transport's mutext to be held by // the caller. func (t *http2Client) setGoAwayReason(f *http2.GoAwayFrame) { - t.goAwayReason = NoReason + t.goAwayReason = GoAwayNoReason switch f.ErrCode { case http2.ErrCodeEnhanceYourCalm: if string(f.DebugData()) == "too_many_pings" { - t.goAwayReason = TooManyPings + t.goAwayReason = GoAwayTooManyPings } } } @@ -1020,7 +1082,9 @@ func (t *http2Client) operateHeaders(frame *http2.MetaHeadersFrame) { if !ok { return } + s.mu.Lock() s.bytesReceived = true + s.mu.Unlock() var state decodeState if err := state.decodeResponseHeader(frame); err != nil { s.mu.Lock() @@ -1055,22 +1119,22 @@ func (t *http2Client) operateHeaders(frame *http2.MetaHeadersFrame) { }() s.mu.Lock() - if !endStream { - s.recvCompress = state.encoding - } if !s.headerDone { - if !endStream && len(state.mdata) > 0 { - s.header = state.mdata + if !endStream { + // Headers frame is not actually a trailers-only frame. + isHeader = true + s.recvCompress = state.encoding + if len(state.mdata) > 0 { + s.header = state.mdata + } } close(s.headerChan) s.headerDone = true - isHeader = true } if !endStream || s.state == streamDone { s.mu.Unlock() return } - if len(state.mdata) > 0 { s.trailer = state.mdata } @@ -1097,22 +1161,23 @@ func handleMalformedHTTP2(s *Stream, err error) { // TODO(zhaoq): Check the validity of the incoming frame sequence. func (t *http2Client) reader() { // Check the validity of server preface. - frame, err := t.framer.readFrame() + frame, err := t.framer.fr.ReadFrame() if err != nil { - t.notifyError(err) + t.Close() return } atomic.CompareAndSwapUint32(&t.activity, 0, 1) sf, ok := frame.(*http2.SettingsFrame) if !ok { - t.notifyError(err) + t.Close() return } - t.handleSettings(sf) + t.onSuccess() + t.handleSettings(sf, true) // loop to keep reading incoming messages on this transport. for { - frame, err := t.framer.readFrame() + frame, err := t.framer.fr.ReadFrame() atomic.CompareAndSwapUint32(&t.activity, 0, 1) if err != nil { // Abort an active stream if the http2.Framer returns a @@ -1124,12 +1189,12 @@ func (t *http2Client) reader() { t.mu.Unlock() if s != nil { // use error detail to provide better err message - handleMalformedHTTP2(s, streamErrorf(http2ErrConvTab[se.Code], "%v", t.framer.errorDetail())) + handleMalformedHTTP2(s, streamErrorf(http2ErrConvTab[se.Code], "%v", t.framer.fr.ErrorDetail())) } continue } else { // Transport error. - t.notifyError(err) + t.Close() return } } @@ -1141,7 +1206,7 @@ func (t *http2Client) reader() { case *http2.RSTStreamFrame: t.handleRSTStream(frame) case *http2.SettingsFrame: - t.handleSettings(frame) + t.handleSettings(frame, false) case *http2.PingFrame: t.handlePing(frame) case *http2.GoAwayFrame: @@ -1149,7 +1214,7 @@ func (t *http2Client) reader() { case *http2.WindowUpdateFrame: t.handleWindowUpdate(frame) default: - grpclog.Printf("transport: http2Client.reader got unhandled frame type %v.", frame) + errorf("transport: http2Client.reader got unhandled frame type %v.", frame) } } } @@ -1164,16 +1229,14 @@ func (t *http2Client) applySettings(ss []http2.Setting) { if s.Val > math.MaxInt32 { s.Val = math.MaxInt32 } - t.mu.Lock() ms := t.maxStreams t.maxStreams = int(s.Val) - t.mu.Unlock() t.streamsQuota.add(int(s.Val) - ms) case http2.SettingInitialWindowSize: t.mu.Lock() for _, stream := range t.activeStreams { // Adjust the sending quota for each stream. - stream.sendQuotaPool.add(int(s.Val - t.streamSendQuota)) + stream.sendQuotaPool.addAndUpdate(int(s.Val) - int(t.streamSendQuota)) } t.streamSendQuota = s.Val t.mu.Unlock() @@ -1181,48 +1244,81 @@ func (t *http2Client) applySettings(ss []http2.Setting) { } } -// controller running in a separate goroutine takes charge of sending control -// frames (e.g., window update, reset stream, setting, etc.) to the server. -func (t *http2Client) controller() { - for { - select { - case i := <-t.controlBuf.get(): - t.controlBuf.load() - select { - case <-t.writableChan: - switch i := i.(type) { - case *windowUpdate: - t.framer.writeWindowUpdate(true, i.streamID, i.increment) - case *settings: - if i.ack { - t.framer.writeSettingsAck(true) - t.applySettings(i.ss) - } else { - t.framer.writeSettings(true, i.ss...) - } - case *resetStream: - // If the server needs to be to intimated about stream closing, - // then we need to make sure the RST_STREAM frame is written to - // the wire before the headers of the next stream waiting on - // streamQuota. We ensure this by adding to the streamsQuota pool - // only after having acquired the writableChan to send RST_STREAM. - t.streamsQuota.add(1) - t.framer.writeRSTStream(true, i.streamID, i.code) - case *flushIO: - t.framer.flushWrite() - case *ping: - t.framer.writePing(true, i.ack, i.data) - default: - grpclog.Printf("transport: http2Client.controller got unexpected item type %v\n", i) - } - t.writableChan <- 0 - continue - case <-t.shutdownChan: - return +// TODO(mmukhi): A lot of this code(and code in other places in the tranpsort layer) +// is duplicated between the client and the server. +// The transport layer needs to be refactored to take care of this. +func (t *http2Client) itemHandler(i item) (err error) { + defer func() { + if err != nil { + errorf(" error in itemHandler: %v", err) + } + }() + switch i := i.(type) { + case *dataFrame: + if err := t.framer.fr.WriteData(i.streamID, i.endStream, i.d); err != nil { + return err + } + i.f() + return nil + case *headerFrame: + t.hBuf.Reset() + for _, f := range i.hf { + t.hEnc.WriteField(f) + } + endHeaders := false + first := true + for !endHeaders { + size := t.hBuf.Len() + if size > http2MaxFrameLen { + size = http2MaxFrameLen + } else { + endHeaders = true } - case <-t.shutdownChan: - return + if first { + first = false + err = t.framer.fr.WriteHeaders(http2.HeadersFrameParam{ + StreamID: i.streamID, + BlockFragment: t.hBuf.Next(size), + EndStream: i.endStream, + EndHeaders: endHeaders, + }) + } else { + err = t.framer.fr.WriteContinuation( + i.streamID, + endHeaders, + t.hBuf.Next(size), + ) + } + if err != nil { + return err + } + } + return nil + case *windowUpdate: + return t.framer.fr.WriteWindowUpdate(i.streamID, i.increment) + case *settings: + return t.framer.fr.WriteSettings(i.ss...) + case *settingsAck: + return t.framer.fr.WriteSettingsAck() + case *resetStream: + // If the server needs to be to intimated about stream closing, + // then we need to make sure the RST_STREAM frame is written to + // the wire before the headers of the next stream waiting on + // streamQuota. We ensure this by adding to the streamsQuota pool + // only after having acquired the writableChan to send RST_STREAM. + err := t.framer.fr.WriteRSTStream(i.streamID, i.code) + t.streamsQuota.add(1) + return err + case *flushIO: + return t.framer.writer.Flush() + case *ping: + if !i.ack { + t.bdpEst.timesnap(i.data) } + return t.framer.fr.WritePing(i.ack, i.data) + default: + errorf("transport: http2Client.controller got unexpected item type %v", i) + return fmt.Errorf("transport: http2Client.controller got unexpected item type %v", i) } } @@ -1247,7 +1343,7 @@ func (t *http2Client) keepalive() { case <-t.awakenKeepalive: // If the control gets here a ping has been sent // need to reset the timer with keepalive.Timeout. - case <-t.shutdownChan: + case <-t.ctx.Done(): return } } else { @@ -1266,13 +1362,13 @@ func (t *http2Client) keepalive() { } t.Close() return - case <-t.shutdownChan: + case <-t.ctx.Done(): if !timer.Stop() { <-timer.C } return } - case <-t.shutdownChan: + case <-t.ctx.Done(): if !timer.Stop() { <-timer.C } @@ -1282,25 +1378,9 @@ func (t *http2Client) keepalive() { } func (t *http2Client) Error() <-chan struct{} { - return t.errorChan + return t.ctx.Done() } func (t *http2Client) GoAway() <-chan struct{} { return t.goAway } - -func (t *http2Client) notifyError(err error) { - t.mu.Lock() - // make sure t.errorChan is closed only once. - if t.state == draining { - t.mu.Unlock() - t.Close() - return - } - if t.state == reachable { - t.state = unreachable - close(t.errorChan) - grpclog.Printf("transport: http2Client.notifyError got notified that the client transport was broken %v.", err) - } - t.mu.Unlock() -} diff --git a/vendor/google.golang.org/grpc/transport/http2_server.go b/vendor/google.golang.org/grpc/transport/http2_server.go index 559d28d..97b214c 100644 --- a/vendor/google.golang.org/grpc/transport/http2_server.go +++ b/vendor/google.golang.org/grpc/transport/http2_server.go @@ -1,33 +1,18 @@ /* * - * Copyright 2014, Google Inc. - * All rights reserved. + * Copyright 2014 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -36,6 +21,7 @@ package transport import ( "bytes" "errors" + "fmt" "io" "math" "math/rand" @@ -51,7 +37,6 @@ import ( "golang.org/x/net/http2/hpack" "google.golang.org/grpc/codes" "google.golang.org/grpc/credentials" - "google.golang.org/grpc/grpclog" "google.golang.org/grpc/keepalive" "google.golang.org/grpc/metadata" "google.golang.org/grpc/peer" @@ -67,35 +52,28 @@ var ErrIllegalHeaderWrite = errors.New("transport: the stream is done or WriteHe // http2Server implements the ServerTransport interface with HTTP2. type http2Server struct { ctx context.Context + cancel context.CancelFunc conn net.Conn remoteAddr net.Addr localAddr net.Addr maxStreamID uint32 // max stream ID ever seen authInfo credentials.AuthInfo // auth info about the connection inTapHandle tap.ServerInHandle - // writableChan synchronizes write access to the transport. - // A writer acquires the write lock by receiving a value on writableChan - // and releases it by sending on writableChan. - writableChan chan int - // shutdownChan is closed when Close is called. - // Blocking operations should select on shutdownChan to avoid - // blocking forever after Close. - shutdownChan chan struct{} - framer *framer - hBuf *bytes.Buffer // the buffer for HPACK encoding - hEnc *hpack.Encoder // HPACK encoder - + framer *framer + hBuf *bytes.Buffer // the buffer for HPACK encoding + hEnc *hpack.Encoder // HPACK encoder // The max number of concurrent streams. maxStreams uint32 // controlBuf delivers all the control related tasks (e.g., window // updates, reset streams, and various settings) to the controller. - controlBuf *recvBuffer + controlBuf *controlBuffer fc *inFlow // sendQuotaPool provides flow control to outbound message. sendQuotaPool *quotaPool - - stats stats.Handler - + // localSendQuota limits the amount of data that can be scheduled + // for writing before it is actually written out. + localSendQuota *quotaPool + stats stats.Handler // Flag to keep track of reading activity on transport. // 1 is true and 0 is false. activity uint32 // Accessed atomically. @@ -111,17 +89,25 @@ type http2Server struct { // Flag to signify that number of ping strikes should be reset to 0. // This is set whenever data or header frames are sent. // 1 means yes. - resetPingStrikes uint32 // Accessed atomically. - + resetPingStrikes uint32 // Accessed atomically. initialWindowSize int32 + bdpEst *bdpEstimator + + mu sync.Mutex // guard the following - mu sync.Mutex // guard the following + // drainChan is initialized when drain(...) is called the first time. + // After which the server writes out the first GoAway(with ID 2^31-1) frame. + // Then an independent goroutine will be launched to later send the second GoAway. + // During this time we don't want to write another first GoAway(with ID 2^31 -1) frame. + // Thus call to drain(...) will be a no-op if drainChan is already initialized since draining is + // already underway. + drainChan chan struct{} state transportState activeStreams map[uint32]*Stream // the per-stream outbound flow control window size set by the peer. streamSendQuota uint32 // idle is the time instant when the connection went idle. - // This is either the begining of the connection or when the number of + // This is either the beginning of the connection or when the number of // RPCs go down to 0. // When the connection is busy, this value is set to 0. idle time.Time @@ -130,40 +116,51 @@ type http2Server struct { // newHTTP2Server constructs a ServerTransport based on HTTP2. ConnectionError is // returned if something goes wrong. func newHTTP2Server(conn net.Conn, config *ServerConfig) (_ ServerTransport, err error) { - framer := newFramer(conn) + writeBufSize := defaultWriteBufSize + if config.WriteBufferSize > 0 { + writeBufSize = config.WriteBufferSize + } + readBufSize := defaultReadBufSize + if config.ReadBufferSize > 0 { + readBufSize = config.ReadBufferSize + } + framer := newFramer(conn, writeBufSize, readBufSize) // Send initial settings as connection preface to client. - var settings []http2.Setting + var isettings []http2.Setting // TODO(zhaoq): Have a better way to signal "no limit" because 0 is // permitted in the HTTP2 spec. maxStreams := config.MaxStreams if maxStreams == 0 { maxStreams = math.MaxUint32 } else { - settings = append(settings, http2.Setting{ + isettings = append(isettings, http2.Setting{ ID: http2.SettingMaxConcurrentStreams, Val: maxStreams, }) } + dynamicWindow := true iwz := int32(initialWindowSize) if config.InitialWindowSize >= defaultWindowSize { iwz = config.InitialWindowSize + dynamicWindow = false } - icwz := int32(initialConnWindowSize) + icwz := int32(initialWindowSize) if config.InitialConnWindowSize >= defaultWindowSize { icwz = config.InitialConnWindowSize + dynamicWindow = false } if iwz != defaultWindowSize { - settings = append(settings, http2.Setting{ + isettings = append(isettings, http2.Setting{ ID: http2.SettingInitialWindowSize, Val: uint32(iwz)}) } - if err := framer.writeSettings(true, settings...); err != nil { - return nil, connectionErrorf(true, err, "transport: %v", err) + if err := framer.fr.WriteSettings(isettings...); err != nil { + return nil, connectionErrorf(false, err, "transport: %v", err) } // Adjust the connection flow control window if needed. if delta := uint32(icwz - defaultWindowSize); delta > 0 { - if err := framer.writeWindowUpdate(true, 0, delta); err != nil { - return nil, connectionErrorf(true, err, "transport: %v", err) + if err := framer.fr.WriteWindowUpdate(0, delta); err != nil { + return nil, connectionErrorf(false, err, "transport: %v", err) } } kp := config.KeepaliveParams @@ -189,8 +186,10 @@ func newHTTP2Server(conn net.Conn, config *ServerConfig) (_ ServerTransport, err kep.MinTime = defaultKeepalivePolicyMinTime } var buf bytes.Buffer + ctx, cancel := context.WithCancel(context.Background()) t := &http2Server{ - ctx: context.Background(), + ctx: ctx, + cancel: cancel, conn: conn, remoteAddr: conn.RemoteAddr(), localAddr: conn.LocalAddr(), @@ -200,12 +199,11 @@ func newHTTP2Server(conn net.Conn, config *ServerConfig) (_ ServerTransport, err hEnc: hpack.NewEncoder(&buf), maxStreams: maxStreams, inTapHandle: config.InTapHandle, - controlBuf: newRecvBuffer(), + controlBuf: newControlBuffer(), fc: &inFlow{limit: uint32(icwz)}, sendQuotaPool: newQuotaPool(defaultWindowSize), + localSendQuota: newQuotaPool(defaultLocalSendQuota), state: reachable, - writableChan: make(chan int, 1), - shutdownChan: make(chan struct{}), activeStreams: make(map[uint32]*Stream), streamSendQuota: defaultWindowSize, stats: config.StatsHandler, @@ -214,6 +212,12 @@ func newHTTP2Server(conn net.Conn, config *ServerConfig) (_ ServerTransport, err kep: kep, initialWindowSize: iwz, } + if dynamicWindow { + t.bdpEst = &bdpEstimator{ + bdp: initialWindowSize, + updateFlowControl: t.updateFlowControl, + } + } if t.stats != nil { t.ctx = t.stats.TagConn(t.ctx, &stats.ConnTagInfo{ RemoteAddr: t.remoteAddr, @@ -222,37 +226,74 @@ func newHTTP2Server(conn net.Conn, config *ServerConfig) (_ ServerTransport, err connBegin := &stats.ConnBegin{} t.stats.HandleConn(t.ctx, connBegin) } - go t.controller() + t.framer.writer.Flush() + + defer func() { + if err != nil { + t.Close() + } + }() + + // Check the validity of client preface. + preface := make([]byte, len(clientPreface)) + if _, err := io.ReadFull(t.conn, preface); err != nil { + return nil, connectionErrorf(false, err, "transport: http2Server.HandleStreams failed to receive the preface from client: %v", err) + } + if !bytes.Equal(preface, clientPreface) { + return nil, connectionErrorf(false, nil, "transport: http2Server.HandleStreams received bogus greeting from client: %q", preface) + } + + frame, err := t.framer.fr.ReadFrame() + if err == io.EOF || err == io.ErrUnexpectedEOF { + return nil, err + } + if err != nil { + return nil, connectionErrorf(false, err, "transport: http2Server.HandleStreams failed to read initial settings frame: %v", err) + } + atomic.StoreUint32(&t.activity, 1) + sf, ok := frame.(*http2.SettingsFrame) + if !ok { + return nil, connectionErrorf(false, nil, "transport: http2Server.HandleStreams saw invalid preface type %T from client", frame) + } + t.handleSettings(sf) + + go func() { + loopyWriter(t.ctx, t.controlBuf, t.itemHandler) + t.conn.Close() + }() go t.keepalive() - t.writableChan <- 0 return t, nil } // operateHeader takes action on the decoded headers. func (t *http2Server) operateHeaders(frame *http2.MetaHeadersFrame, handle func(*Stream), traceCtx func(context.Context, string) context.Context) (close bool) { - buf := newRecvBuffer() - s := &Stream{ - id: frame.Header().StreamID, - st: t, - buf: buf, - fc: &inFlow{limit: uint32(t.initialWindowSize)}, - } + streamID := frame.Header().StreamID var state decodeState for _, hf := range frame.Fields { if err := state.processHeaderField(hf); err != nil { if se, ok := err.(StreamError); ok { - t.controlBuf.put(&resetStream{s.id, statusCodeConvTab[se.Code]}) + t.controlBuf.put(&resetStream{streamID, statusCodeConvTab[se.Code]}) } return } } + buf := newRecvBuffer() + s := &Stream{ + id: streamID, + st: t, + buf: buf, + fc: &inFlow{limit: uint32(t.initialWindowSize)}, + recvCompress: state.encoding, + method: state.method, + contentSubtype: state.contentSubtype, + } + if frame.StreamEnded() { // s is just created by the caller. No lock needed. s.state = streamReadDone } - s.recvCompress = state.encoding if state.timeoutSet { s.ctx, s.cancel = context.WithTimeout(t.ctx, state.timeout) } else { @@ -266,25 +307,16 @@ func (t *http2Server) operateHeaders(frame *http2.MetaHeadersFrame, handle func( pr.AuthInfo = t.authInfo } s.ctx = peer.NewContext(s.ctx, pr) - // Cache the current stream to the context so that the server application - // can find out. Required when the server wants to send some metadata - // back to the client (unary call only). - s.ctx = newContextWithStream(s.ctx, s) // Attach the received metadata to the context. if len(state.mdata) > 0 { s.ctx = metadata.NewIncomingContext(s.ctx, state.mdata) } - s.trReader = &transportReader{ - reader: &recvBufferReader{ - ctx: s.ctx, - recv: s.buf, - }, - windowHandler: func(n int) { - t.updateWindow(s, uint32(n)) - }, + if state.statsTags != nil { + s.ctx = stats.SetIncomingTags(s.ctx, state.statsTags) + } + if state.statsTrace != nil { + s.ctx = stats.SetIncomingTrace(s.ctx, state.statsTrace) } - s.recvCompress = state.encoding - s.method = state.method if t.inTapHandle != nil { var err error info := &tap.Info{ @@ -292,7 +324,7 @@ func (t *http2Server) operateHeaders(frame *http2.MetaHeadersFrame, handle func( } s.ctx, err = t.inTapHandle(s.ctx, info) if err != nil { - grpclog.Printf("transport: http2Server.operateHeaders got an error from InTapHandle: %v", err) + warningf("transport: http2Server.operateHeaders got an error from InTapHandle: %v", err) t.controlBuf.put(&resetStream{s.id, http2.ErrCodeRefusedStream}) return } @@ -304,18 +336,18 @@ func (t *http2Server) operateHeaders(frame *http2.MetaHeadersFrame, handle func( } if uint32(len(t.activeStreams)) >= t.maxStreams { t.mu.Unlock() - t.controlBuf.put(&resetStream{s.id, http2.ErrCodeRefusedStream}) + t.controlBuf.put(&resetStream{streamID, http2.ErrCodeRefusedStream}) return } - if s.id%2 != 1 || s.id <= t.maxStreamID { + if streamID%2 != 1 || streamID <= t.maxStreamID { t.mu.Unlock() // illegal gRPC stream id. - grpclog.Println("transport: http2Server.HandleStreams received an illegal stream id: ", s.id) + errorf("transport: http2Server.HandleStreams received an illegal stream id: %v", streamID) return true } - t.maxStreamID = s.id + t.maxStreamID = streamID s.sendQuotaPool = newQuotaPool(int(t.streamSendQuota)) - t.activeStreams[s.id] = s + t.activeStreams[streamID] = s if len(t.activeStreams) == 1 { t.idle = time.Time{} } @@ -335,6 +367,19 @@ func (t *http2Server) operateHeaders(frame *http2.MetaHeadersFrame, handle func( } t.stats.HandleRPC(s.ctx, inHeader) } + s.trReader = &transportReader{ + reader: &recvBufferReader{ + ctx: s.ctx, + recv: s.buf, + }, + windowHandler: func(n int) { + t.updateWindow(s, uint32(n)) + }, + } + s.waiters = waiters{ + ctx: s.ctx, + tctx: t.ctx, + } handle(s) return } @@ -343,43 +388,8 @@ func (t *http2Server) operateHeaders(frame *http2.MetaHeadersFrame, handle func( // typically run in a separate goroutine. // traceCtx attaches trace to ctx and returns the new context. func (t *http2Server) HandleStreams(handle func(*Stream), traceCtx func(context.Context, string) context.Context) { - // Check the validity of client preface. - preface := make([]byte, len(clientPreface)) - if _, err := io.ReadFull(t.conn, preface); err != nil { - // Only log if it isn't a simple tcp accept check (ie: tcp balancer doing open/close socket) - if err != io.EOF { - grpclog.Printf("transport: http2Server.HandleStreams failed to receive the preface from client: %v", err) - } - t.Close() - return - } - if !bytes.Equal(preface, clientPreface) { - grpclog.Printf("transport: http2Server.HandleStreams received bogus greeting from client: %q", preface) - t.Close() - return - } - - frame, err := t.framer.readFrame() - if err == io.EOF || err == io.ErrUnexpectedEOF { - t.Close() - return - } - if err != nil { - grpclog.Printf("transport: http2Server.HandleStreams failed to read initial settings frame: %v", err) - t.Close() - return - } - atomic.StoreUint32(&t.activity, 1) - sf, ok := frame.(*http2.SettingsFrame) - if !ok { - grpclog.Printf("transport: http2Server.HandleStreams saw invalid preface type %T from client", frame) - t.Close() - return - } - t.handleSettings(sf) - for { - frame, err := t.framer.readFrame() + frame, err := t.framer.fr.ReadFrame() atomic.StoreUint32(&t.activity, 1) if err != nil { if se, ok := err.(http2.StreamError); ok { @@ -396,7 +406,7 @@ func (t *http2Server) HandleStreams(handle func(*Stream), traceCtx func(context. t.Close() return } - grpclog.Printf("transport: http2Server.HandleStreams failed to read frame: %v", err) + warningf("transport: http2Server.HandleStreams failed to read frame: %v", err) t.Close() return } @@ -419,7 +429,7 @@ func (t *http2Server) HandleStreams(handle func(*Stream), traceCtx func(context. case *http2.GoAwayFrame: // TODO: Handle GoAway from the client appropriately. default: - grpclog.Printf("transport: http2Server.HandleStreams found unhandled frame type %v.", frame) + errorf("transport: http2Server.HandleStreams found unhandled frame type %v.", frame) } } } @@ -449,6 +459,9 @@ func (t *http2Server) adjustWindow(s *Stream, n uint32) { return } if w := s.fc.maybeAdjust(n); w > 0 { + if cw := t.fc.resetPendingUpdate(); cw > 0 { + t.controlBuf.put(&windowUpdate{0, cw}) + } t.controlBuf.put(&windowUpdate{s.id, w}) } } @@ -462,37 +475,77 @@ func (t *http2Server) updateWindow(s *Stream, n uint32) { if s.state == streamDone { return } - if w := t.fc.onRead(n); w > 0 { - t.controlBuf.put(&windowUpdate{0, w}) - } if w := s.fc.onRead(n); w > 0 { + if cw := t.fc.resetPendingUpdate(); cw > 0 { + t.controlBuf.put(&windowUpdate{0, cw}) + } t.controlBuf.put(&windowUpdate{s.id, w}) } } +// updateFlowControl updates the incoming flow control windows +// for the transport and the stream based on the current bdp +// estimation. +func (t *http2Server) updateFlowControl(n uint32) { + t.mu.Lock() + for _, s := range t.activeStreams { + s.fc.newLimit(n) + } + t.initialWindowSize = int32(n) + t.mu.Unlock() + t.controlBuf.put(&windowUpdate{0, t.fc.newLimit(n)}) + t.controlBuf.put(&settings{ + ss: []http2.Setting{ + { + ID: http2.SettingInitialWindowSize, + Val: uint32(n), + }, + }, + }) + +} + func (t *http2Server) handleData(f *http2.DataFrame) { size := f.Header().Length - if err := t.fc.onData(uint32(size)); err != nil { - grpclog.Printf("transport: http2Server %v", err) - t.Close() - return + var sendBDPPing bool + if t.bdpEst != nil { + sendBDPPing = t.bdpEst.add(uint32(size)) + } + // Decouple connection's flow control from application's read. + // An update on connection's flow control should not depend on + // whether user application has read the data or not. Such a + // restriction is already imposed on the stream's flow control, + // and therefore the sender will be blocked anyways. + // Decoupling the connection flow control will prevent other + // active(fast) streams from starving in presence of slow or + // inactive streams. + // + // Furthermore, if a bdpPing is being sent out we can piggyback + // connection's window update for the bytes we just received. + if sendBDPPing { + if size != 0 { // Could be an empty frame. + t.controlBuf.put(&windowUpdate{0, uint32(size)}) + } + t.controlBuf.put(bdpPing) + } else { + if err := t.fc.onData(uint32(size)); err != nil { + errorf("transport: http2Server %v", err) + t.Close() + return + } + if w := t.fc.onRead(uint32(size)); w > 0 { + t.controlBuf.put(&windowUpdate{0, w}) + } } // Select the right stream to dispatch. s, ok := t.getStream(f) if !ok { - if w := t.fc.onRead(uint32(size)); w > 0 { - t.controlBuf.put(&windowUpdate{0, w}) - } return } if size > 0 { s.mu.Lock() if s.state == streamDone { s.mu.Unlock() - // The stream has been closed. Release the corresponding quota. - if w := t.fc.onRead(uint32(size)); w > 0 { - t.controlBuf.put(&windowUpdate{0, w}) - } return } if err := s.fc.onData(uint32(size)); err != nil { @@ -502,9 +555,6 @@ func (t *http2Server) handleData(f *http2.DataFrame) { return } if f.Header().Flags.Has(http2.FlagDataPadded) { - if w := t.fc.onRead(uint32(size) - uint32(len(f.Data()))); w > 0 { - t.controlBuf.put(&windowUpdate{0, w}) - } if w := s.fc.onRead(uint32(size) - uint32(len(f.Data()))); w > 0 { t.controlBuf.put(&windowUpdate{s.id, w}) } @@ -542,13 +592,43 @@ func (t *http2Server) handleSettings(f *http2.SettingsFrame) { if f.IsAck() { return } - var ss []http2.Setting + var rs []http2.Setting + var ps []http2.Setting f.ForeachSetting(func(s http2.Setting) error { - ss = append(ss, s) + if t.isRestrictive(s) { + rs = append(rs, s) + } else { + ps = append(ps, s) + } return nil }) - // The settings will be applied once the ack is sent. - t.controlBuf.put(&settings{ack: true, ss: ss}) + t.applySettings(rs) + t.controlBuf.put(&settingsAck{}) + t.applySettings(ps) +} + +func (t *http2Server) isRestrictive(s http2.Setting) bool { + switch s.ID { + case http2.SettingInitialWindowSize: + // Note: we don't acquire a lock here to read streamSendQuota + // because the same goroutine updates it later. + return s.Val < t.streamSendQuota + } + return false +} + +func (t *http2Server) applySettings(ss []http2.Setting) { + for _, s := range ss { + if s.ID == http2.SettingInitialWindowSize { + t.mu.Lock() + for _, stream := range t.activeStreams { + stream.sendQuotaPool.addAndUpdate(int(s.Val) - int(t.streamSendQuota)) + } + t.streamSendQuota = s.Val + t.mu.Unlock() + } + + } } const ( @@ -557,7 +637,15 @@ const ( ) func (t *http2Server) handlePing(f *http2.PingFrame) { - if f.IsAck() { // Do nothing. + if f.IsAck() { + if f.Data == goAwayPing.data && t.drainChan != nil { + close(t.drainChan) + return + } + // Maybe it's a BDP ping. + if t.bdpEst != nil { + t.bdpEst.calculate(f.Data) + } return } pingAck := &ping{ack: true} @@ -580,7 +668,7 @@ func (t *http2Server) handlePing(f *http2.PingFrame) { t.mu.Unlock() if ns < 1 && !t.kep.PermitWithoutStream { // Keepalive shouldn't be active thus, this new ping should - // have come after atleast defaultPingTimeout. + // have come after at least defaultPingTimeout. if t.lastPingAt.Add(defaultPingTimeout).After(now) { t.pingStrikes++ } @@ -593,7 +681,8 @@ func (t *http2Server) handlePing(f *http2.PingFrame) { if t.pingStrikes > maxPingStrikes { // Send goaway and close the connection. - t.controlBuf.put(&goAway{code: http2.ErrCodeEnhanceYourCalm, debugData: []byte("too_many_pings")}) + errorf("transport: Got too many pings from the client, closing the connection.") + t.controlBuf.put(&goAway{code: http2.ErrCodeEnhanceYourCalm, debugData: []byte("too_many_pings"), closeConn: true}) } } @@ -609,47 +698,16 @@ func (t *http2Server) handleWindowUpdate(f *http2.WindowUpdateFrame) { } } -func (t *http2Server) writeHeaders(s *Stream, b *bytes.Buffer, endStream bool) error { - first := true - endHeaders := false - var err error - defer func() { - if err == nil { - // Reset ping strikes when seding headers since that might cause the - // peer to send ping. - atomic.StoreUint32(&t.resetPingStrikes, 1) - } - }() - // Sends the headers in a single batch. - for !endHeaders { - size := t.hBuf.Len() - if size > http2MaxFrameLen { - size = http2MaxFrameLen - } else { - endHeaders = true - } - if first { - p := http2.HeadersFrameParam{ - StreamID: s.id, - BlockFragment: b.Next(size), - EndStream: endStream, - EndHeaders: endHeaders, - } - err = t.framer.writeHeaders(endHeaders, p) - first = false - } else { - err = t.framer.writeContinuation(endHeaders, s.id, endHeaders, b.Next(size)) - } - if err != nil { - t.Close() - return connectionErrorf(true, err, "transport: %v", err) - } - } - return nil -} - // WriteHeader sends the header metedata md back to the client. func (t *http2Server) WriteHeader(s *Stream, md metadata.MD) error { + select { + case <-s.ctx.Done(): + return ContextErr(s.ctx.Err()) + case <-t.ctx.Done(): + return ErrConnClosing + default: + } + s.mu.Lock() if s.headerOk || s.state == streamDone { s.mu.Unlock() @@ -665,14 +723,13 @@ func (t *http2Server) WriteHeader(s *Stream, md metadata.MD) error { } md = s.header s.mu.Unlock() - if _, err := wait(s.ctx, nil, nil, t.shutdownChan, t.writableChan); err != nil { - return err - } - t.hBuf.Reset() - t.hEnc.WriteField(hpack.HeaderField{Name: ":status", Value: "200"}) - t.hEnc.WriteField(hpack.HeaderField{Name: "content-type", Value: "application/grpc"}) + // TODO(mmukhi): Benchmark if the performance gets better if count the metadata and other header fields + // first and create a slice of that exact size. + headerFields := make([]hpack.HeaderField, 0, 2) // at least :status, content-type will be there if none else. + headerFields = append(headerFields, hpack.HeaderField{Name: ":status", Value: "200"}) + headerFields = append(headerFields, hpack.HeaderField{Name: "content-type", Value: contentType(s.contentSubtype)}) if s.sendCompress != "" { - t.hEnc.WriteField(hpack.HeaderField{Name: "grpc-encoding", Value: s.sendCompress}) + headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-encoding", Value: s.sendCompress}) } for k, vv := range md { if isReservedHeader(k) { @@ -680,20 +737,20 @@ func (t *http2Server) WriteHeader(s *Stream, md metadata.MD) error { continue } for _, v := range vv { - t.hEnc.WriteField(hpack.HeaderField{Name: k, Value: encodeMetadataHeader(k, v)}) + headerFields = append(headerFields, hpack.HeaderField{Name: k, Value: encodeMetadataHeader(k, v)}) } } - bufLen := t.hBuf.Len() - if err := t.writeHeaders(s, t.hBuf, false); err != nil { - return err - } + t.controlBuf.put(&headerFrame{ + streamID: s.id, + hf: headerFields, + endStream: false, + }) if t.stats != nil { - outHeader := &stats.OutHeader{ - WireLength: bufLen, - } + // Note: WireLength is not set in outHeader. + // TODO(mmukhi): Revisit this later, if needed. + outHeader := &stats.OutHeader{} t.stats.HandleRPC(s.Context(), outHeader) } - t.writableChan <- 0 return nil } @@ -702,6 +759,12 @@ func (t *http2Server) WriteHeader(s *Stream, md metadata.MD) error { // TODO(zhaoq): Now it indicates the end of entire stream. Revisit if early // OK is adopted. func (t *http2Server) WriteStatus(s *Stream, st *status.Status) error { + select { + case <-t.ctx.Done(): + return ErrConnClosing + default: + } + var headersSent, hasHeader bool s.mu.Lock() if s.state == streamDone { @@ -721,20 +784,15 @@ func (t *http2Server) WriteStatus(s *Stream, st *status.Status) error { headersSent = true } - if _, err := wait(s.ctx, nil, nil, t.shutdownChan, t.writableChan); err != nil { - return err - } - t.hBuf.Reset() + // TODO(mmukhi): Benchmark if the performance gets better if count the metadata and other header fields + // first and create a slice of that exact size. + headerFields := make([]hpack.HeaderField, 0, 2) // grpc-status and grpc-message will be there if none else. if !headersSent { - t.hEnc.WriteField(hpack.HeaderField{Name: ":status", Value: "200"}) - t.hEnc.WriteField(hpack.HeaderField{Name: "content-type", Value: "application/grpc"}) + headerFields = append(headerFields, hpack.HeaderField{Name: ":status", Value: "200"}) + headerFields = append(headerFields, hpack.HeaderField{Name: "content-type", Value: contentType(s.contentSubtype)}) } - t.hEnc.WriteField( - hpack.HeaderField{ - Name: "grpc-status", - Value: strconv.Itoa(int(st.Code())), - }) - t.hEnc.WriteField(hpack.HeaderField{Name: "grpc-message", Value: encodeGrpcMessage(st.Message())}) + headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-status", Value: strconv.Itoa(int(st.Code()))}) + headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-message", Value: encodeGrpcMessage(st.Message())}) if p := st.Proto(); p != nil && len(p.Details) > 0 { stBytes, err := proto.Marshal(p) @@ -743,7 +801,7 @@ func (t *http2Server) WriteStatus(s *Stream, st *status.Status) error { panic(err) } - t.hEnc.WriteField(hpack.HeaderField{Name: "grpc-status-details-bin", Value: encodeBinHeader(stBytes)}) + headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-status-details-bin", Value: encodeBinHeader(stBytes)}) } // Attach the trailer metadata. @@ -753,35 +811,34 @@ func (t *http2Server) WriteStatus(s *Stream, st *status.Status) error { continue } for _, v := range vv { - t.hEnc.WriteField(hpack.HeaderField{Name: k, Value: encodeMetadataHeader(k, v)}) + headerFields = append(headerFields, hpack.HeaderField{Name: k, Value: encodeMetadataHeader(k, v)}) } } - bufLen := t.hBuf.Len() - if err := t.writeHeaders(s, t.hBuf, true); err != nil { - t.Close() - return err - } + t.controlBuf.put(&headerFrame{ + streamID: s.id, + hf: headerFields, + endStream: true, + }) if t.stats != nil { - outTrailer := &stats.OutTrailer{ - WireLength: bufLen, - } - t.stats.HandleRPC(s.Context(), outTrailer) + t.stats.HandleRPC(s.Context(), &stats.OutTrailer{}) } t.closeStream(s) - t.writableChan <- 0 return nil } // Write converts the data into HTTP2 data frame and sends it out. Non-nil error // is returns if it fails (e.g., framing error, transport error). -func (t *http2Server) Write(s *Stream, data []byte, opts *Options) (err error) { - // TODO(zhaoq): Support multi-writers for a single stream. +func (t *http2Server) Write(s *Stream, hdr []byte, data []byte, opts *Options) error { + select { + case <-s.ctx.Done(): + return ContextErr(s.ctx.Err()) + case <-t.ctx.Done(): + return ErrConnClosing + default: + } + var writeHeaderFrame bool s.mu.Lock() - if s.state == streamDone { - s.mu.Unlock() - return streamErrorf(codes.Unknown, "the stream has been done") - } if !s.headerOk { writeHeaderFrame = true } @@ -789,107 +846,83 @@ func (t *http2Server) Write(s *Stream, data []byte, opts *Options) (err error) { if writeHeaderFrame { t.WriteHeader(s, nil) } - defer func() { - if err == nil { - // Reset ping strikes when sending data since this might cause - // the peer to send ping. - atomic.StoreUint32(&t.resetPingStrikes, 1) - } - }() - r := bytes.NewBuffer(data) - for { - if r.Len() == 0 { - return nil - } - size := http2MaxFrameLen - // Wait until the stream has some quota to send the data. - sq, err := wait(s.ctx, nil, nil, t.shutdownChan, s.sendQuotaPool.acquire()) - if err != nil { - return err - } - // Wait until the transport has some quota to send the data. - tq, err := wait(s.ctx, nil, nil, t.shutdownChan, t.sendQuotaPool.acquire()) - if err != nil { - return err - } - if sq < size { - size = sq - } - if tq < size { - size = tq - } - p := r.Next(size) - ps := len(p) - if ps < sq { - // Overbooked stream quota. Return it back. - s.sendQuotaPool.add(sq - ps) - } - if ps < tq { - // Overbooked transport quota. Return it back. - t.sendQuotaPool.add(tq - ps) - } - t.framer.adjustNumWriters(1) - // Got some quota. Try to acquire writing privilege on the - // transport. - if _, err := wait(s.ctx, nil, nil, t.shutdownChan, t.writableChan); err != nil { - if _, ok := err.(StreamError); ok { - // Return the connection quota back. - t.sendQuotaPool.add(ps) + // Add data to header frame so that we can equally distribute data across frames. + emptyLen := http2MaxFrameLen - len(hdr) + if emptyLen > len(data) { + emptyLen = len(data) + } + hdr = append(hdr, data[:emptyLen]...) + data = data[emptyLen:] + var ( + streamQuota int + streamQuotaVer uint32 + err error + ) + for _, r := range [][]byte{hdr, data} { + for len(r) > 0 { + size := http2MaxFrameLen + if size > len(r) { + size = len(r) } - if t.framer.adjustNumWriters(-1) == 0 { - // This writer is the last one in this batch and has the - // responsibility to flush the buffered frames. It queues - // a flush request to controlBuf instead of flushing directly - // in order to avoid the race with other writing or flushing. - t.controlBuf.put(&flushIO{}) + if streamQuota == 0 { // Used up all the locally cached stream quota. + // Get all the stream quota there is. + streamQuota, streamQuotaVer, err = s.sendQuotaPool.get(math.MaxInt32, s.waiters) + if err != nil { + return err + } } - return err - } - select { - case <-s.ctx.Done(): - t.sendQuotaPool.add(ps) - if t.framer.adjustNumWriters(-1) == 0 { - t.controlBuf.put(&flushIO{}) + if size > streamQuota { + size = streamQuota } - t.writableChan <- 0 - return ContextErr(s.ctx.Err()) - default: - } - var forceFlush bool - if r.Len() == 0 && t.framer.adjustNumWriters(0) == 1 && !opts.Last { - forceFlush = true - } - if err := t.framer.writeData(forceFlush, s.id, false, p); err != nil { - t.Close() - return connectionErrorf(true, err, "transport: %v", err) - } - if t.framer.adjustNumWriters(-1) == 0 { - t.framer.flushWrite() - } - t.writableChan <- 0 - } - -} - -func (t *http2Server) applySettings(ss []http2.Setting) { - for _, s := range ss { - if s.ID == http2.SettingInitialWindowSize { - t.mu.Lock() - defer t.mu.Unlock() - for _, stream := range t.activeStreams { - stream.sendQuotaPool.add(int(s.Val - t.streamSendQuota)) + // Get size worth quota from transport. + tq, _, err := t.sendQuotaPool.get(size, s.waiters) + if err != nil { + return err + } + if tq < size { + size = tq + } + ltq, _, err := t.localSendQuota.get(size, s.waiters) + if err != nil { + // Add the acquired quota back to transport. + t.sendQuotaPool.add(tq) + return err + } + // even if ltq is smaller than size we don't adjust size since, + // ltq is only a soft limit. + streamQuota -= size + p := r[:size] + success := func() { + ltq := ltq + t.controlBuf.put(&dataFrame{streamID: s.id, endStream: false, d: p, f: func() { + t.localSendQuota.add(ltq) + }}) + r = r[size:] + } + failure := func() { // The stream quota version must have changed. + // Our streamQuota cache is invalidated now, so give it back. + s.sendQuotaPool.lockedAdd(streamQuota + size) + } + if !s.sendQuotaPool.compareAndExecute(streamQuotaVer, success, failure) { + // Couldn't send this chunk out. + t.sendQuotaPool.add(size) + t.localSendQuota.add(ltq) + streamQuota = 0 } - t.streamSendQuota = s.Val } - } + if streamQuota > 0 { + // ADd the left over quota back to stream. + s.sendQuotaPool.add(streamQuota) + } + return nil } // keepalive running in a separate goroutine does the following: // 1. Gracefully closes an idle connection after a duration of keepalive.MaxConnectionIdle. // 2. Gracefully closes any connection after a duration of keepalive.MaxConnectionAge. // 3. Forcibly closes a connection after an additive period of keepalive.MaxConnectionAgeGrace over keepalive.MaxConnectionAge. -// 4. Makes sure a connection is alive by sending pings with a frequency of keepalive.Time and closes a non-resposive connection +// 4. Makes sure a connection is alive by sending pings with a frequency of keepalive.Time and closes a non-responsive connection // after an additional duration of keepalive.Timeout. func (t *http2Server) keepalive() { p := &ping{} @@ -898,7 +931,7 @@ func (t *http2Server) keepalive() { maxAge := time.NewTimer(t.kp.MaxConnectionAge) keepalive := time.NewTimer(t.kp.Time) // NOTE: All exit paths of this function should reset their - // respecitve timers. A failure to do so will cause the + // respective timers. A failure to do so will cause the // following clean-up to deadlock and eventually leak. defer func() { if !maxIdle.Stop() { @@ -922,23 +955,18 @@ func (t *http2Server) keepalive() { continue } val := t.kp.MaxConnectionIdle - time.Since(idle) + t.mu.Unlock() if val <= 0 { // The connection has been idle for a duration of keepalive.MaxConnectionIdle or more. // Gracefully close the connection. - t.state = draining - t.mu.Unlock() - t.Drain() + t.drain(http2.ErrCodeNo, []byte{}) // Reseting the timer so that the clean-up doesn't deadlock. maxIdle.Reset(infinity) return } - t.mu.Unlock() maxIdle.Reset(val) case <-maxAge.C: - t.mu.Lock() - t.state = draining - t.mu.Unlock() - t.Drain() + t.drain(http2.ErrCodeNo, []byte{}) maxAge.Reset(t.kp.MaxConnectionAgeGrace) select { case <-maxAge.C: @@ -946,7 +974,7 @@ func (t *http2Server) keepalive() { t.Close() // Reseting the timer so that the clean-up doesn't deadlock. maxAge.Reset(infinity) - case <-t.shutdownChan: + case <-t.ctx.Done(): } return case <-keepalive.C: @@ -964,69 +992,146 @@ func (t *http2Server) keepalive() { pingSent = true t.controlBuf.put(p) keepalive.Reset(t.kp.Timeout) - case <-t.shutdownChan: + case <-t.ctx.Done(): return } } } -// controller running in a separate goroutine takes charge of sending control -// frames (e.g., window update, reset stream, setting, etc.) to the server. -func (t *http2Server) controller() { - for { - select { - case i := <-t.controlBuf.get(): - t.controlBuf.load() +var goAwayPing = &ping{data: [8]byte{1, 6, 1, 8, 0, 3, 3, 9}} + +// TODO(mmukhi): A lot of this code(and code in other places in the tranpsort layer) +// is duplicated between the client and the server. +// The transport layer needs to be refactored to take care of this. +func (t *http2Server) itemHandler(i item) error { + switch i := i.(type) { + case *dataFrame: + // Reset ping strikes when sending data since this might cause + // the peer to send ping. + atomic.StoreUint32(&t.resetPingStrikes, 1) + if err := t.framer.fr.WriteData(i.streamID, i.endStream, i.d); err != nil { + return err + } + i.f() + return nil + case *headerFrame: + t.hBuf.Reset() + for _, f := range i.hf { + t.hEnc.WriteField(f) + } + first := true + endHeaders := false + for !endHeaders { + size := t.hBuf.Len() + if size > http2MaxFrameLen { + size = http2MaxFrameLen + } else { + endHeaders = true + } + var err error + if first { + first = false + err = t.framer.fr.WriteHeaders(http2.HeadersFrameParam{ + StreamID: i.streamID, + BlockFragment: t.hBuf.Next(size), + EndStream: i.endStream, + EndHeaders: endHeaders, + }) + } else { + err = t.framer.fr.WriteContinuation( + i.streamID, + endHeaders, + t.hBuf.Next(size), + ) + } + if err != nil { + return err + } + } + atomic.StoreUint32(&t.resetPingStrikes, 1) + return nil + case *windowUpdate: + return t.framer.fr.WriteWindowUpdate(i.streamID, i.increment) + case *settings: + return t.framer.fr.WriteSettings(i.ss...) + case *settingsAck: + return t.framer.fr.WriteSettingsAck() + case *resetStream: + return t.framer.fr.WriteRSTStream(i.streamID, i.code) + case *goAway: + t.mu.Lock() + if t.state == closing { + t.mu.Unlock() + // The transport is closing. + return fmt.Errorf("transport: Connection closing") + } + sid := t.maxStreamID + if !i.headsUp { + // Stop accepting more streams now. + t.state = draining + if len(t.activeStreams) == 0 { + i.closeConn = true + } + t.mu.Unlock() + if err := t.framer.fr.WriteGoAway(sid, i.code, i.debugData); err != nil { + return err + } + if i.closeConn { + // Abruptly close the connection following the GoAway (via + // loopywriter). But flush out what's inside the buffer first. + t.controlBuf.put(&flushIO{closeTr: true}) + } + return nil + } + t.mu.Unlock() + // For a graceful close, send out a GoAway with stream ID of MaxUInt32, + // Follow that with a ping and wait for the ack to come back or a timer + // to expire. During this time accept new streams since they might have + // originated before the GoAway reaches the client. + // After getting the ack or timer expiration send out another GoAway this + // time with an ID of the max stream server intends to process. + if err := t.framer.fr.WriteGoAway(math.MaxUint32, http2.ErrCodeNo, []byte{}); err != nil { + return err + } + if err := t.framer.fr.WritePing(false, goAwayPing.data); err != nil { + return err + } + go func() { + timer := time.NewTimer(time.Minute) + defer timer.Stop() select { - case <-t.writableChan: - switch i := i.(type) { - case *windowUpdate: - t.framer.writeWindowUpdate(true, i.streamID, i.increment) - case *settings: - if i.ack { - t.framer.writeSettingsAck(true) - t.applySettings(i.ss) - } else { - t.framer.writeSettings(true, i.ss...) - } - case *resetStream: - t.framer.writeRSTStream(true, i.streamID, i.code) - case *goAway: - t.mu.Lock() - if t.state == closing { - t.mu.Unlock() - // The transport is closing. - return - } - sid := t.maxStreamID - t.state = draining - t.mu.Unlock() - t.framer.writeGoAway(true, sid, i.code, i.debugData) - if i.code == http2.ErrCodeEnhanceYourCalm { - t.Close() - } - case *flushIO: - t.framer.flushWrite() - case *ping: - t.framer.writePing(true, i.ack, i.data) - default: - grpclog.Printf("transport: http2Server.controller got unexpected item type %v\n", i) - } - t.writableChan <- 0 - continue - case <-t.shutdownChan: + case <-t.drainChan: + case <-timer.C: + case <-t.ctx.Done(): return } - case <-t.shutdownChan: - return + t.controlBuf.put(&goAway{code: i.code, debugData: i.debugData}) + }() + return nil + case *flushIO: + if err := t.framer.writer.Flush(); err != nil { + return err + } + if i.closeTr { + return ErrConnClosing + } + return nil + case *ping: + if !i.ack { + t.bdpEst.timesnap(i.data) } + return t.framer.fr.WritePing(i.ack, i.data) + default: + err := status.Errorf(codes.Internal, "transport: http2Server.controller got unexpected item type %t", i) + errorf("%v", err) + return err } } // Close starts shutting down the http2Server transport. // TODO(zhaoq): Now the destruction is not blocked on any pending streams. This // could cause some resource issue. Revisit this later. -func (t *http2Server) Close() (err error) { +func (t *http2Server) Close() error { t.mu.Lock() if t.state == closing { t.mu.Unlock() @@ -1036,8 +1141,8 @@ func (t *http2Server) Close() (err error) { streams := t.activeStreams t.activeStreams = nil t.mu.Unlock() - close(t.shutdownChan) - err = t.conn.Close() + t.cancel() + err := t.conn.Close() // Cancel all active streams. for _, s := range streams { s.cancel() @@ -1046,7 +1151,7 @@ func (t *http2Server) Close() (err error) { connEnd := &stats.ConnEnd{} t.stats.HandleConn(t.ctx, connEnd) } - return + return err } // closeStream clears the footprint of a stream when the stream is not needed @@ -1058,7 +1163,7 @@ func (t *http2Server) closeStream(s *Stream) { t.idle = time.Now() } if t.state == draining && len(t.activeStreams) == 0 { - defer t.Close() + defer t.controlBuf.put(&flushIO{closeTr: true}) } t.mu.Unlock() // In case stream sending and receiving are invoked in separate @@ -1066,11 +1171,6 @@ func (t *http2Server) closeStream(s *Stream) { // called to interrupt the potential blocking on other goroutines. s.cancel() s.mu.Lock() - if q := s.fc.resetPendingData(); q > 0 { - if w := t.fc.onRead(q); w > 0 { - t.controlBuf.put(&windowUpdate{0, w}) - } - } if s.state == streamDone { s.mu.Unlock() return @@ -1084,7 +1184,17 @@ func (t *http2Server) RemoteAddr() net.Addr { } func (t *http2Server) Drain() { - t.controlBuf.put(&goAway{code: http2.ErrCodeNo}) + t.drain(http2.ErrCodeNo, []byte{}) +} + +func (t *http2Server) drain(code http2.ErrCode, debugData []byte) { + t.mu.Lock() + defer t.mu.Unlock() + if t.drainChan != nil { + return + } + t.drainChan = make(chan struct{}) + t.controlBuf.put(&goAway{code: code, debugData: debugData, headsUp: true}) } var rgen = rand.New(rand.NewSource(time.Now().UnixNano())) diff --git a/vendor/google.golang.org/grpc/transport/http_util.go b/vendor/google.golang.org/grpc/transport/http_util.go index 9b31717..de37e38 100644 --- a/vendor/google.golang.org/grpc/transport/http_util.go +++ b/vendor/google.golang.org/grpc/transport/http_util.go @@ -1,33 +1,18 @@ /* * - * Copyright 2014, Google Inc. - * All rights reserved. + * Copyright 2014 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -43,7 +28,6 @@ import ( "net/http" "strconv" "strings" - "sync/atomic" "time" "github.com/golang/protobuf/proto" @@ -51,7 +35,6 @@ import ( "golang.org/x/net/http2/hpack" spb "google.golang.org/genproto/googleapis/rpc/status" "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" "google.golang.org/grpc/status" ) @@ -61,7 +44,14 @@ const ( // http://http2.github.io/http2-spec/#SettingValues http2InitHeaderTableSize = 4096 // http2IOBufSize specifies the buffer size for sending frames. - http2IOBufSize = 32 * 1024 + defaultWriteBufSize = 32 * 1024 + defaultReadBufSize = 32 * 1024 + // baseContentType is the base content-type for gRPC. This is a valid + // content-type on it's own, but can also include a content-subtype such as + // "proto" as a suffix after "+" or ";". See + // https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests + // for more details. + baseContentType = "application/grpc" ) var ( @@ -80,7 +70,7 @@ var ( http2.ErrCodeConnect: codes.Internal, http2.ErrCodeEnhanceYourCalm: codes.ResourceExhausted, http2.ErrCodeInadequateSecurity: codes.PermissionDenied, - http2.ErrCodeHTTP11Required: codes.FailedPrecondition, + http2.ErrCodeHTTP11Required: codes.Internal, } statusCodeConvTab = map[codes.Code]http2.ErrCode{ codes.Internal: http2.ErrCodeInternal, @@ -127,7 +117,10 @@ type decodeState struct { timeout time.Duration method string // key-value metadata map from the peer. - mdata map[string][]string + mdata map[string][]string + statsTags []byte + statsTrace []byte + contentSubtype string } // isReservedHeader checks whether hdr belongs to HTTP2 headers @@ -163,17 +156,44 @@ func isWhitelistedPseudoHeader(hdr string) bool { } } -func validContentType(t string) bool { - e := "application/grpc" - if !strings.HasPrefix(t, e) { - return false +// contentSubtype returns the content-subtype for the given content-type. The +// given content-type must be a valid content-type that starts with +// "application/grpc". A content-subtype will follow "application/grpc" after a +// "+" or ";". See +// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests for +// more details. +// +// If contentType is not a valid content-type for gRPC, the boolean +// will be false, otherwise true. If content-type == "application/grpc", +// "application/grpc+", or "application/grpc;", the boolean will be true, +// but no content-subtype will be returned. +// +// contentType is assumed to be lowercase already. +func contentSubtype(contentType string) (string, bool) { + if contentType == baseContentType { + return "", true + } + if !strings.HasPrefix(contentType, baseContentType) { + return "", false + } + // guaranteed since != baseContentType and has baseContentType prefix + switch contentType[len(baseContentType)] { + case '+', ';': + // this will return true for "application/grpc+" or "application/grpc;" + // which the previous validContentType function tested to be valid, so we + // just say that no content-subtype is specified in this case + return contentType[len(baseContentType)+1:], true + default: + return "", false } - // Support variations on the content-type - // (e.g. "application/grpc+blah", "application/grpc;blah"). - if len(t) > len(e) && t[len(e)] != '+' && t[len(e)] != ';' { - return false +} + +// contentSubtype is assumed to be lowercase +func contentType(contentSubtype string) string { + if contentSubtype == "" { + return baseContentType } - return true + return baseContentType + "+" + contentSubtype } func (d *decodeState) status() *status.Status { @@ -251,12 +271,26 @@ func (d *decodeState) decodeResponseHeader(frame *http2.MetaHeadersFrame) error } +func (d *decodeState) addMetadata(k, v string) { + if d.mdata == nil { + d.mdata = make(map[string][]string) + } + d.mdata[k] = append(d.mdata[k], v) +} + func (d *decodeState) processHeaderField(f hpack.HeaderField) error { switch f.Name { case "content-type": - if !validContentType(f.Value) { - return streamErrorf(codes.FailedPrecondition, "transport: received the unexpected content-type %q", f.Value) + contentSubtype, validContentType := contentSubtype(f.Value) + if !validContentType { + return streamErrorf(codes.Internal, "transport: received the unexpected content-type %q", f.Value) } + d.contentSubtype = contentSubtype + // TODO: do we want to propagate the whole content-type in the metadata, + // or come up with a way to just propagate the content-subtype if it was set? + // ie {"content-type": "application/grpc+proto"} or {"content-subtype": "proto"} + // in the metadata? + d.addMetadata(f.Name, f.Value) case "grpc-encoding": d.encoding = f.Value case "grpc-status": @@ -291,18 +325,30 @@ func (d *decodeState) processHeaderField(f hpack.HeaderField) error { return streamErrorf(codes.Internal, "transport: malformed http-status: %v", err) } d.httpStatus = &code + case "grpc-tags-bin": + v, err := decodeBinHeader(f.Value) + if err != nil { + return streamErrorf(codes.Internal, "transport: malformed grpc-tags-bin: %v", err) + } + d.statsTags = v + d.addMetadata(f.Name, string(v)) + case "grpc-trace-bin": + v, err := decodeBinHeader(f.Value) + if err != nil { + return streamErrorf(codes.Internal, "transport: malformed grpc-trace-bin: %v", err) + } + d.statsTrace = v + d.addMetadata(f.Name, string(v)) default: - if !isReservedHeader(f.Name) || isWhitelistedPseudoHeader(f.Name) { - if d.mdata == nil { - d.mdata = make(map[string][]string) - } - v, err := decodeMetadataHeader(f.Name, f.Value) - if err != nil { - grpclog.Printf("Failed to decode (%q, %q): %v", f.Name, f.Value, err) - return nil - } - d.mdata[f.Name] = append(d.mdata[f.Name], v) + if isReservedHeader(f.Name) && !isWhitelistedPseudoHeader(f.Name) { + break + } + v, err := decodeMetadataHeader(f.Name, f.Value) + if err != nil { + errorf("Failed to decode metadata header (%q, %q): %v", f.Name, f.Value, err) + return nil } + d.addMetadata(f.Name, string(v)) } return nil } @@ -470,10 +516,10 @@ type framer struct { fr *http2.Framer } -func newFramer(conn net.Conn) *framer { +func newFramer(conn net.Conn, writeBufferSize, readBufferSize int) *framer { f := &framer{ - reader: bufio.NewReaderSize(conn, http2IOBufSize), - writer: bufio.NewWriterSize(conn, http2IOBufSize), + reader: bufio.NewReaderSize(conn, readBufferSize), + writer: bufio.NewWriterSize(conn, writeBufferSize), } f.fr = http2.NewFramer(f.writer, f.reader) // Opt-in to Frame reuse API on framer to reduce garbage. @@ -482,132 +528,3 @@ func newFramer(conn net.Conn) *framer { f.fr.ReadMetaHeaders = hpack.NewDecoder(http2InitHeaderTableSize, nil) return f } - -func (f *framer) adjustNumWriters(i int32) int32 { - return atomic.AddInt32(&f.numWriters, i) -} - -// The following writeXXX functions can only be called when the caller gets -// unblocked from writableChan channel (i.e., owns the privilege to write). - -func (f *framer) writeContinuation(forceFlush bool, streamID uint32, endHeaders bool, headerBlockFragment []byte) error { - if err := f.fr.WriteContinuation(streamID, endHeaders, headerBlockFragment); err != nil { - return err - } - if forceFlush { - return f.writer.Flush() - } - return nil -} - -func (f *framer) writeData(forceFlush bool, streamID uint32, endStream bool, data []byte) error { - if err := f.fr.WriteData(streamID, endStream, data); err != nil { - return err - } - if forceFlush { - return f.writer.Flush() - } - return nil -} - -func (f *framer) writeGoAway(forceFlush bool, maxStreamID uint32, code http2.ErrCode, debugData []byte) error { - if err := f.fr.WriteGoAway(maxStreamID, code, debugData); err != nil { - return err - } - if forceFlush { - return f.writer.Flush() - } - return nil -} - -func (f *framer) writeHeaders(forceFlush bool, p http2.HeadersFrameParam) error { - if err := f.fr.WriteHeaders(p); err != nil { - return err - } - if forceFlush { - return f.writer.Flush() - } - return nil -} - -func (f *framer) writePing(forceFlush, ack bool, data [8]byte) error { - if err := f.fr.WritePing(ack, data); err != nil { - return err - } - if forceFlush { - return f.writer.Flush() - } - return nil -} - -func (f *framer) writePriority(forceFlush bool, streamID uint32, p http2.PriorityParam) error { - if err := f.fr.WritePriority(streamID, p); err != nil { - return err - } - if forceFlush { - return f.writer.Flush() - } - return nil -} - -func (f *framer) writePushPromise(forceFlush bool, p http2.PushPromiseParam) error { - if err := f.fr.WritePushPromise(p); err != nil { - return err - } - if forceFlush { - return f.writer.Flush() - } - return nil -} - -func (f *framer) writeRSTStream(forceFlush bool, streamID uint32, code http2.ErrCode) error { - if err := f.fr.WriteRSTStream(streamID, code); err != nil { - return err - } - if forceFlush { - return f.writer.Flush() - } - return nil -} - -func (f *framer) writeSettings(forceFlush bool, settings ...http2.Setting) error { - if err := f.fr.WriteSettings(settings...); err != nil { - return err - } - if forceFlush { - return f.writer.Flush() - } - return nil -} - -func (f *framer) writeSettingsAck(forceFlush bool) error { - if err := f.fr.WriteSettingsAck(); err != nil { - return err - } - if forceFlush { - return f.writer.Flush() - } - return nil -} - -func (f *framer) writeWindowUpdate(forceFlush bool, streamID, incr uint32) error { - if err := f.fr.WriteWindowUpdate(streamID, incr); err != nil { - return err - } - if forceFlush { - return f.writer.Flush() - } - return nil -} - -func (f *framer) flushWrite() error { - return f.writer.Flush() -} - -func (f *framer) readFrame() (http2.Frame, error) { - return f.fr.ReadFrame() -} - -func (f *framer) errorDetail() error { - return f.fr.ErrorDetail() -} diff --git a/vendor/google.golang.org/grpc/transport/http_util_test.go b/vendor/google.golang.org/grpc/transport/http_util_test.go index b369801..c375478 100644 --- a/vendor/google.golang.org/grpc/transport/http_util_test.go +++ b/vendor/google.golang.org/grpc/transport/http_util_test.go @@ -1,33 +1,18 @@ /* * - * Copyright 2014, Google Inc. - * All rights reserved. + * Copyright 2014 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -87,24 +72,25 @@ func TestTimeoutDecode(t *testing.T) { } } -func TestValidContentType(t *testing.T) { +func TestContentSubtype(t *testing.T) { tests := []struct { - h string - want bool + contentType string + want string + wantValid bool }{ - {"application/grpc", true}, - {"application/grpc+", true}, - {"application/grpc+blah", true}, - {"application/grpc;", true}, - {"application/grpc;blah", true}, - {"application/grpcd", false}, - {"application/grpd", false}, - {"application/grp", false}, + {"application/grpc", "", true}, + {"application/grpc+", "", true}, + {"application/grpc+blah", "blah", true}, + {"application/grpc;", "", true}, + {"application/grpc;blah", "blah", true}, + {"application/grpcd", "", false}, + {"application/grpd", "", false}, + {"application/grp", "", false}, } for _, tt := range tests { - got := validContentType(tt.h) - if got != tt.want { - t.Errorf("validContentType(%q) = %v; want %v", tt.h, got, tt.want) + got, gotValid := contentSubtype(tt.contentType) + if got != tt.want || gotValid != tt.wantValid { + t.Errorf("contentSubtype(%q) = (%v, %v); want (%v, %v)", tt.contentType, got, gotValid, tt.want, tt.wantValid) } } } diff --git a/vendor/google.golang.org/grpc/transport/log.go b/vendor/google.golang.org/grpc/transport/log.go new file mode 100644 index 0000000..ac8e358 --- /dev/null +++ b/vendor/google.golang.org/grpc/transport/log.go @@ -0,0 +1,50 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// This file contains wrappers for grpclog functions. +// The transport package only logs to verbose level 2 by default. + +package transport + +import "google.golang.org/grpc/grpclog" + +const logLevel = 2 + +func infof(format string, args ...interface{}) { + if grpclog.V(logLevel) { + grpclog.Infof(format, args...) + } +} + +func warningf(format string, args ...interface{}) { + if grpclog.V(logLevel) { + grpclog.Warningf(format, args...) + } +} + +func errorf(format string, args ...interface{}) { + if grpclog.V(logLevel) { + grpclog.Errorf(format, args...) + } +} + +func fatalf(format string, args ...interface{}) { + if grpclog.V(logLevel) { + grpclog.Fatalf(format, args...) + } +} diff --git a/vendor/google.golang.org/grpc/transport/testdata/ca.pem b/vendor/google.golang.org/grpc/transport/testdata/ca.pem deleted file mode 100644 index 6c8511a..0000000 --- a/vendor/google.golang.org/grpc/transport/testdata/ca.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICSjCCAbOgAwIBAgIJAJHGGR4dGioHMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV -BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX -aWRnaXRzIFB0eSBMdGQxDzANBgNVBAMTBnRlc3RjYTAeFw0xNDExMTEyMjMxMjla -Fw0yNDExMDgyMjMxMjlaMFYxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0 -YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDzANBgNVBAMT -BnRlc3RjYTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwEDfBV5MYdlHVHJ7 -+L4nxrZy7mBfAVXpOc5vMYztssUI7mL2/iYujiIXM+weZYNTEpLdjyJdu7R5gGUu -g1jSVK/EPHfc74O7AyZU34PNIP4Sh33N+/A5YexrNgJlPY+E3GdVYi4ldWJjgkAd -Qah2PH5ACLrIIC6tRka9hcaBlIECAwEAAaMgMB4wDAYDVR0TBAUwAwEB/zAOBgNV -HQ8BAf8EBAMCAgQwDQYJKoZIhvcNAQELBQADgYEAHzC7jdYlzAVmddi/gdAeKPau -sPBG/C2HCWqHzpCUHcKuvMzDVkY/MP2o6JIW2DBbY64bO/FceExhjcykgaYtCH/m -oIU63+CFOTtR7otyQAWHqXa7q4SbCDlG7DyRFxqG0txPtGvy12lgldA2+RgcigQG -Dfcog5wrJytaQ6UA0wE= ------END CERTIFICATE----- diff --git a/vendor/google.golang.org/grpc/transport/testdata/server1.key b/vendor/google.golang.org/grpc/transport/testdata/server1.key deleted file mode 100644 index 143a5b8..0000000 --- a/vendor/google.golang.org/grpc/transport/testdata/server1.key +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAOHDFScoLCVJpYDD -M4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlumN+fm+AjPEK5GHhGn1BgzkWF+slf -3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wHNVX77fBZOgp9VlSMVfyd9N8YwbBY -AckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAECgYAn7qGnM2vbjJNBm0VZCkOkTIWm -V10okw7EPJrdL2mkre9NasghNXbE1y5zDshx5Nt3KsazKOxTT8d0Jwh/3KbaN+YY -tTCbKGW0pXDRBhwUHRcuRzScjli8Rih5UOCiZkhefUTcRb6xIhZJuQy71tjaSy0p -dHZRmYyBYO2YEQ8xoQJBAPrJPhMBkzmEYFtyIEqAxQ/o/A6E+E4w8i+KM7nQCK7q -K4JXzyXVAjLfyBZWHGM2uro/fjqPggGD6QH1qXCkI4MCQQDmdKeb2TrKRh5BY1LR -81aJGKcJ2XbcDu6wMZK4oqWbTX2KiYn9GB0woM6nSr/Y6iy1u145YzYxEV/iMwff -DJULAkB8B2MnyzOg0pNFJqBJuH29bKCcHa8gHJzqXhNO5lAlEbMK95p/P2Wi+4Hd -aiEIAF1BF326QJcvYKmwSmrORp85AkAlSNxRJ50OWrfMZnBgzVjDx3xG6KsFQVk2 -ol6VhqL6dFgKUORFUWBvnKSyhjJxurlPEahV6oo6+A+mPhFY8eUvAkAZQyTdupP3 -XEFQKctGz+9+gKkemDp7LBBMEMBXrGTLPhpEfcjv/7KPdnFHYmhYeBTBnuVmTVWe -F98XJ7tIFfJq ------END PRIVATE KEY----- diff --git a/vendor/google.golang.org/grpc/transport/testdata/server1.pem b/vendor/google.golang.org/grpc/transport/testdata/server1.pem deleted file mode 100644 index f3d43fc..0000000 --- a/vendor/google.golang.org/grpc/transport/testdata/server1.pem +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICnDCCAgWgAwIBAgIBBzANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJBVTET -MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQ -dHkgTHRkMQ8wDQYDVQQDEwZ0ZXN0Y2EwHhcNMTUxMTA0MDIyMDI0WhcNMjUxMTAx -MDIyMDI0WjBlMQswCQYDVQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNV -BAcTB0NoaWNhZ28xFTATBgNVBAoTDEV4YW1wbGUsIENvLjEaMBgGA1UEAxQRKi50 -ZXN0Lmdvb2dsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOHDFSco -LCVJpYDDM4HYtIdV6Ake/sMNaaKdODjDMsux/4tDydlumN+fm+AjPEK5GHhGn1Bg -zkWF+slf3BxhrA/8dNsnunstVA7ZBgA/5qQxMfGAq4wHNVX77fBZOgp9VlSMVfyd -9N8YwbBYAckOeUQadTi2X1S6OgJXgQ0m3MWhAgMBAAGjazBpMAkGA1UdEwQCMAAw -CwYDVR0PBAQDAgXgME8GA1UdEQRIMEaCECoudGVzdC5nb29nbGUuZnKCGHdhdGVy -em9vaS50ZXN0Lmdvb2dsZS5iZYISKi50ZXN0LnlvdXR1YmUuY29thwTAqAEDMA0G -CSqGSIb3DQEBCwUAA4GBAJFXVifQNub1LUP4JlnX5lXNlo8FxZ2a12AFQs+bzoJ6 -hM044EDjqyxUqSbVePK0ni3w1fHQB5rY9yYC5f8G7aqqTY1QOhoUk8ZTSTRpnkTh -y4jjdvTZeLDVBlueZUTDRmy2feY5aZIU18vFDK08dTG0A87pppuv1LNIR3loveU8 ------END CERTIFICATE----- diff --git a/vendor/google.golang.org/grpc/transport/transport.go b/vendor/google.golang.org/grpc/transport/transport.go index 82efa4a..e0c1e34 100644 --- a/vendor/google.golang.org/grpc/transport/transport.go +++ b/vendor/google.golang.org/grpc/transport/transport.go @@ -1,44 +1,27 @@ /* * - * Copyright 2014, Google Inc. - * All rights reserved. + * Copyright 2014 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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 transport defines and implements message oriented communication channel -to complete various transactions (e.g., an RPC). -*/ +// Package transport defines and implements message oriented communication +// channel to complete various transactions (e.g., an RPC). It is meant for +// grpc-internal usage and is not intended to be imported directly by users. package transport // import "google.golang.org/grpc/transport" import ( - "bytes" "fmt" "io" "net" @@ -65,58 +48,56 @@ type recvMsg struct { err error } -func (*recvMsg) item() {} - -// All items in an out of a recvBuffer should be the same type. -type item interface { - item() -} - -// recvBuffer is an unbounded channel of item. +// recvBuffer is an unbounded channel of recvMsg structs. +// Note recvBuffer differs from controlBuffer only in that recvBuffer +// holds a channel of only recvMsg structs instead of objects implementing "item" interface. +// recvBuffer is written to much more often than +// controlBuffer and using strict recvMsg structs helps avoid allocation in "recvBuffer.put" type recvBuffer struct { - c chan item + c chan recvMsg mu sync.Mutex - backlog []item + backlog []recvMsg } func newRecvBuffer() *recvBuffer { b := &recvBuffer{ - c: make(chan item, 1), + c: make(chan recvMsg, 1), } return b } -func (b *recvBuffer) put(r item) { +func (b *recvBuffer) put(r recvMsg) { b.mu.Lock() - defer b.mu.Unlock() if len(b.backlog) == 0 { select { case b.c <- r: + b.mu.Unlock() return default: } } b.backlog = append(b.backlog, r) + b.mu.Unlock() } func (b *recvBuffer) load() { b.mu.Lock() - defer b.mu.Unlock() if len(b.backlog) > 0 { select { case b.c <- b.backlog[0]: - b.backlog[0] = nil + b.backlog[0] = recvMsg{} b.backlog = b.backlog[1:] default: } } + b.mu.Unlock() } -// get returns the channel that receives an item in the buffer. +// get returns the channel that receives a recvMsg in the buffer. // -// Upon receipt of an item, the caller should call load to send another -// item onto the channel if there is any. -func (b *recvBuffer) get() <-chan item { +// Upon receipt of a recvMsg, the caller should call load to send another +// recvMsg onto the channel if there is any. +func (b *recvBuffer) get() <-chan recvMsg { return b.c } @@ -126,7 +107,7 @@ type recvBufferReader struct { ctx context.Context goAway chan struct{} recv *recvBuffer - last *bytes.Reader // Stores the remaining data in the previous calls. + last []byte // Stores the remaining data in the previous calls. err error } @@ -137,25 +118,85 @@ func (r *recvBufferReader) Read(p []byte) (n int, err error) { if r.err != nil { return 0, r.err } - defer func() { r.err = err }() - if r.last != nil && r.last.Len() > 0 { + n, r.err = r.read(p) + return n, r.err +} + +func (r *recvBufferReader) read(p []byte) (n int, err error) { + if r.last != nil && len(r.last) > 0 { // Read remaining data left in last call. - return r.last.Read(p) + copied := copy(p, r.last) + r.last = r.last[copied:] + return copied, nil } select { case <-r.ctx.Done(): return 0, ContextErr(r.ctx.Err()) case <-r.goAway: - return 0, ErrStreamDrain - case i := <-r.recv.get(): + return 0, errStreamDrain + case m := <-r.recv.get(): r.recv.load() - m := i.(*recvMsg) if m.err != nil { return 0, m.err } - r.last = bytes.NewReader(m.data) - return r.last.Read(p) + copied := copy(p, m.data) + r.last = m.data[copied:] + return copied, nil + } +} + +// All items in an out of a controlBuffer should be the same type. +type item interface { + item() +} + +// controlBuffer is an unbounded channel of item. +type controlBuffer struct { + c chan item + mu sync.Mutex + backlog []item +} + +func newControlBuffer() *controlBuffer { + b := &controlBuffer{ + c: make(chan item, 1), + } + return b +} + +func (b *controlBuffer) put(r item) { + b.mu.Lock() + if len(b.backlog) == 0 { + select { + case b.c <- r: + b.mu.Unlock() + return + default: + } } + b.backlog = append(b.backlog, r) + b.mu.Unlock() +} + +func (b *controlBuffer) load() { + b.mu.Lock() + if len(b.backlog) > 0 { + select { + case b.c <- b.backlog[0]: + b.backlog[0] = nil + b.backlog = b.backlog[1:] + default: + } + } + b.mu.Unlock() +} + +// get returns the channel that receives an item in the buffer. +// +// Upon receipt of an item, the caller should call load to send another +// item onto the channel if there is any. +func (b *controlBuffer) get() <-chan item { + return b.c } type streamState uint8 @@ -169,65 +210,71 @@ const ( // Stream represents an RPC in the transport layer. type Stream struct { - id uint32 - // nil for client side Stream. - st ServerTransport - // ctx is the associated context of the stream. - ctx context.Context - // cancel is always nil for client side Stream. - cancel context.CancelFunc - // done is closed when the final status arrives. - done chan struct{} - // goAway is closed when the server sent GoAways signal before this stream was initiated. - goAway chan struct{} - // method records the associated RPC method of the stream. - method string + id uint32 + st ServerTransport // nil for client side Stream + ctx context.Context // the associated context of the stream + cancel context.CancelFunc // always nil for client side Stream + done chan struct{} // closed when the final status arrives + goAway chan struct{} // closed when a GOAWAY control message is received + method string // the associated RPC method of the stream recvCompress string sendCompress string buf *recvBuffer trReader io.Reader fc *inFlow recvQuota uint32 - - // TODO: Remote this unused variable. - // The accumulated inbound quota pending for window update. - updateQuota uint32 + waiters waiters // Callback to state application's intentions to read data. This - // is used to adjust flow control, if need be. + // is used to adjust flow control, if needed. requestRead func(int) sendQuotaPool *quotaPool - // Close headerChan to indicate the end of reception of header metadata. - headerChan chan struct{} - // header caches the received header metadata. - header metadata.MD - // The key-value map of trailer metadata. - trailer metadata.MD - - mu sync.RWMutex // guard the following - // headerOK becomes true from the first header is about to send. - headerOk bool + headerChan chan struct{} // closed to indicate the end of header metadata. + headerDone bool // set when headerChan is closed. Used to avoid closing headerChan multiple times. + header metadata.MD // the received header metadata. + trailer metadata.MD // the key-value map of trailer metadata. + + mu sync.RWMutex // guard the following + headerOk bool // becomes true from the first header is about to send state streamState - // true iff headerChan is closed. Used to avoid closing headerChan - // multiple times. - headerDone bool - // the status error received from the server. - status *status.Status - // rstStream indicates whether a RST_STREAM frame needs to be sent - // to the server to signify that this stream is closing. - rstStream bool - // rstError is the error that needs to be sent along with the RST_STREAM frame. - rstError http2.ErrCode - // bytesSent and bytesReceived indicates whether any bytes have been sent or - // received on this stream. - bytesSent bool - bytesReceived bool + + status *status.Status // the status error received from the server + + rstStream bool // indicates whether a RST_STREAM frame needs to be sent + rstError http2.ErrCode // the error that needs to be sent along with the RST_STREAM frame + + bytesReceived bool // indicates whether any bytes have been received on this stream + unprocessed bool // set if the server sends a refused stream or GOAWAY including this stream + + // contentSubtype is the content-subtype for requests. + // this must be lowercase or the behavior is undefined. + contentSubtype string +} + +func (s *Stream) waitOnHeader() error { + if s.headerChan == nil { + // On the server headerChan is always nil since a stream originates + // only after having received headers. + return nil + } + wc := s.waiters + select { + case <-wc.ctx.Done(): + return ContextErr(wc.ctx.Err()) + case <-wc.goAway: + return errStreamDrain + case <-s.headerChan: + return nil + } } // RecvCompress returns the compression algorithm applied to the inbound // message. It is empty string if there is no compression applied. func (s *Stream) RecvCompress() string { + if err := s.waitOnHeader(); err != nil { + return "" + } return s.recvCompress } @@ -252,14 +299,14 @@ func (s *Stream) GoAway() <-chan struct{} { // is available. It blocks until i) the metadata is ready or ii) there is no // header metadata or iii) the stream is canceled/expired. func (s *Stream) Header() (metadata.MD, error) { + err := s.waitOnHeader() + // Even if the stream is closed, header is returned if available. select { - case <-s.ctx.Done(): - return nil, ContextErr(s.ctx.Err()) - case <-s.goAway: - return nil, ErrStreamDrain case <-s.headerChan: return s.header.Copy(), nil + default: } + return nil, err } // Trailer returns the cached trailer metedata. Note that if it is not called @@ -267,8 +314,9 @@ func (s *Stream) Header() (metadata.MD, error) { // side only. func (s *Stream) Trailer() metadata.MD { s.mu.RLock() - defer s.mu.RUnlock() - return s.trailer.Copy() + c := s.trailer.Copy() + s.mu.RUnlock() + return c } // ServerTransport returns the underlying ServerTransport for the stream. @@ -277,6 +325,15 @@ func (s *Stream) ServerTransport() ServerTransport { return s.st } +// ContentSubtype returns the content-subtype for a request. For example, a +// content-subtype of "proto" will result in a content-type of +// "application/grpc+proto". This will always be lowercase. See +// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests for +// more details. +func (s *Stream) ContentSubtype() string { + return s.contentSubtype +} + // Context returns the context of the stream. func (s *Stream) Context() context.Context { return s.ctx @@ -296,17 +353,27 @@ func (s *Stream) Status() *status.Status { // Server side only. func (s *Stream) SetHeader(md metadata.MD) error { s.mu.Lock() - defer s.mu.Unlock() if s.headerOk || s.state == streamDone { + s.mu.Unlock() return ErrIllegalHeaderWrite } if md.Len() == 0 { + s.mu.Unlock() return nil } s.header = metadata.Join(s.header, md) + s.mu.Unlock() return nil } +// SendHeader sends the given header metadata. The given metadata is +// combined with any metadata set by previous calls to SetHeader and +// then written to the transport stream. +func (s *Stream) SendHeader(md metadata.MD) error { + t := s.ServerTransport() + return t.WriteHeader(s, md) +} + // SetTrailer sets the trailer metadata which will be sent with the RPC status // by the server. This can be called multiple times. Server side only. func (s *Stream) SetTrailer(md metadata.MD) error { @@ -314,13 +381,13 @@ func (s *Stream) SetTrailer(md metadata.MD) error { return nil } s.mu.Lock() - defer s.mu.Unlock() s.trailer = metadata.Join(s.trailer, md) + s.mu.Unlock() return nil } func (s *Stream) write(m recvMsg) { - s.buf.put(&m) + s.buf.put(m) } // Read reads all p bytes from the wire for this stream. @@ -363,18 +430,21 @@ func (s *Stream) finish(st *status.Status) { close(s.done) } -// BytesSent indicates whether any bytes have been sent on this stream. -func (s *Stream) BytesSent() bool { +// BytesReceived indicates whether any bytes have been received on this stream. +func (s *Stream) BytesReceived() bool { s.mu.Lock() - defer s.mu.Unlock() - return s.bytesSent + br := s.bytesReceived + s.mu.Unlock() + return br } -// BytesReceived indicates whether any bytes have been received on this stream. -func (s *Stream) BytesReceived() bool { +// Unprocessed indicates whether the server did not process this stream -- +// i.e. it sent a refused stream or GOAWAY including this stream ID. +func (s *Stream) Unprocessed() bool { s.mu.Lock() - defer s.mu.Unlock() - return s.bytesReceived + br := s.unprocessed + s.mu.Unlock() + return br } // GoString is implemented by Stream so context.String() won't @@ -383,27 +453,11 @@ func (s *Stream) GoString() string { return fmt.Sprintf("", s, s.method) } -// The key to save transport.Stream in the context. -type streamKey struct{} - -// newContextWithStream creates a new context from ctx and attaches stream -// to it. -func newContextWithStream(ctx context.Context, stream *Stream) context.Context { - return context.WithValue(ctx, streamKey{}, stream) -} - -// StreamFromContext returns the stream saved in ctx. -func StreamFromContext(ctx context.Context) (s *Stream, ok bool) { - s, ok = ctx.Value(streamKey{}).(*Stream) - return -} - // state of transport type transportState int const ( reachable transportState = iota - unreachable closing draining ) @@ -418,6 +472,8 @@ type ServerConfig struct { KeepalivePolicy keepalive.EnforcementPolicy InitialWindowSize int32 InitialConnWindowSize int32 + WriteBufferSize int + ReadBufferSize int } // NewServerTransport creates a ServerTransport with conn or non-nil error @@ -445,22 +501,27 @@ type ConnectOptions struct { KeepaliveParams keepalive.ClientParameters // StatsHandler stores the handler for stats. StatsHandler stats.Handler - // InitialWindowSize sets the intial window size for a stream. + // InitialWindowSize sets the initial window size for a stream. InitialWindowSize int32 - // InitialConnWindowSize sets the intial window size for a connection. + // InitialConnWindowSize sets the initial window size for a connection. InitialConnWindowSize int32 + // WriteBufferSize sets the size of write buffer which in turn determines how much data can be batched before it's written on the wire. + WriteBufferSize int + // ReadBufferSize sets the size of read buffer, which in turn determines how much data can be read at most for one read syscall. + ReadBufferSize int } // TargetInfo contains the information of the target such as network address and metadata. type TargetInfo struct { - Addr string - Metadata interface{} + Addr string + Metadata interface{} + Authority string } // NewClientTransport establishes the transport with the required ConnectOptions // and returns it to the caller. -func NewClientTransport(ctx context.Context, target TargetInfo, opts ConnectOptions) (ClientTransport, error) { - return newHTTP2Client(ctx, target, opts) +func NewClientTransport(connectCtx, ctx context.Context, target TargetInfo, opts ConnectOptions, onSuccess func()) (ClientTransport, error) { + return newHTTP2Client(connectCtx, ctx, target, opts, onSuccess) } // Options provides additional hints and information for message @@ -472,7 +533,7 @@ type Options struct { // Delay is a hint to the transport implementation for whether // the data could be buffered for a batching write. The - // Transport implementation may ignore the hint. + // transport implementation may ignore the hint. Delay bool } @@ -484,10 +545,6 @@ type CallHdr struct { // Method specifies the operation to perform. Method string - // RecvCompress specifies the compression algorithm applied on - // inbound messages. - RecvCompress string - // SendCompress specifies the compression algorithm applied on // outbound message. SendCompress string @@ -497,9 +554,19 @@ type CallHdr struct { // Flush indicates whether a new stream command should be sent // to the peer without waiting for the first data. This is - // only a hint. The transport may modify the flush decision + // only a hint. + // If it's true, the transport may modify the flush decision // for performance purposes. + // If it's false, new stream will never be flushed. Flush bool + + // ContentSubtype specifies the content-subtype for a request. For example, a + // content-subtype of "proto" will result in a content-type of + // "application/grpc+proto". The value of ContentSubtype must be all + // lowercase, otherwise the behavior is undefined. See + // https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests + // for more details. + ContentSubtype string } // ClientTransport is the common interface for all gRPC client-side transport @@ -516,7 +583,7 @@ type ClientTransport interface { // Write sends the data for the given stream. A nil stream indicates // the write is to be performed on the transport as a whole. - Write(s *Stream, data []byte, opts *Options) error + Write(s *Stream, hdr []byte, data []byte, opts *Options) error // NewStream creates a Stream for an RPC. NewStream(ctx context.Context, callHdr *CallHdr) (*Stream, error) @@ -534,7 +601,7 @@ type ClientTransport interface { // once the transport is initiated. Error() <-chan struct{} - // GoAway returns a channel that is closed when ClientTranspor + // GoAway returns a channel that is closed when ClientTransport // receives the draining signal from the server (e.g., GOAWAY frame in // HTTP/2). GoAway() <-chan struct{} @@ -558,7 +625,7 @@ type ServerTransport interface { // Write sends the data for the given stream. // Write may not be called on all streams. - Write(s *Stream, data []byte, opts *Options) error + Write(s *Stream, hdr []byte, data []byte, opts *Options) error // WriteStatus sends the status of a stream to the client. WriteStatus is // the final call made on a stream and always occurs. @@ -623,9 +690,13 @@ func (e ConnectionError) Origin() error { var ( // ErrConnClosing indicates that the transport is closing. ErrConnClosing = connectionErrorf(true, nil, "transport is closing") - // ErrStreamDrain indicates that the stream is rejected by the server because - // the server stops accepting new RPCs. - ErrStreamDrain = streamErrorf(codes.Unavailable, "the server stops accepting new RPCs") + // errStreamDrain indicates that the stream is rejected because the + // connection is draining. This could be caused by goaway or balancer + // removing the address. + errStreamDrain = streamErrorf(codes.Unavailable, "the connection is draining") + // StatusGoAway indicates that the server sent a GOAWAY that included this + // stream's ID in unprocessed RPCs. + statusGoAway = status.New(codes.Unavailable, "the stream is rejected because server is draining the connection") ) // TODO: See if we can replace StreamError with status package errors. @@ -640,43 +711,61 @@ func (e StreamError) Error() string { return fmt.Sprintf("stream error: code = %s desc = %q", e.Code, e.Desc) } -// wait blocks until it can receive from ctx.Done, closing, or proceed. -// If it receives from ctx.Done, it returns 0, the StreamError for ctx.Err. -// If it receives from done, it returns 0, io.EOF if ctx is not done; otherwise -// it return the StreamError for ctx.Err. -// If it receives from goAway, it returns 0, ErrStreamDrain. -// If it receives from closing, it returns 0, ErrConnClosing. -// If it receives from proceed, it returns the received integer, nil. -func wait(ctx context.Context, done, goAway, closing <-chan struct{}, proceed <-chan int) (int, error) { - select { - case <-ctx.Done(): - return 0, ContextErr(ctx.Err()) - case <-done: - // User cancellation has precedence. - select { - case <-ctx.Done(): - return 0, ContextErr(ctx.Err()) - default: - } - return 0, io.EOF - case <-goAway: - return 0, ErrStreamDrain - case <-closing: - return 0, ErrConnClosing - case i := <-proceed: - return i, nil - } +// waiters are passed to quotaPool get methods to +// wait on in addition to waiting on quota. +type waiters struct { + ctx context.Context + tctx context.Context + done chan struct{} + goAway chan struct{} } // GoAwayReason contains the reason for the GoAway frame received. type GoAwayReason uint8 const ( - // Invalid indicates that no GoAway frame is received. - Invalid GoAwayReason = 0 - // NoReason is the default value when GoAway frame is received. - NoReason GoAwayReason = 1 - // TooManyPings indicates that a GoAway frame with ErrCodeEnhanceYourCalm - // was recieved and that the debug data said "too_many_pings". - TooManyPings GoAwayReason = 2 + // GoAwayInvalid indicates that no GoAway frame is received. + GoAwayInvalid GoAwayReason = 0 + // GoAwayNoReason is the default value when GoAway frame is received. + GoAwayNoReason GoAwayReason = 1 + // GoAwayTooManyPings indicates that a GoAway frame with + // ErrCodeEnhanceYourCalm was received and that the debug data said + // "too_many_pings". + GoAwayTooManyPings GoAwayReason = 2 ) + +// loopyWriter is run in a separate go routine. It is the single code path that will +// write data on wire. +func loopyWriter(ctx context.Context, cbuf *controlBuffer, handler func(item) error) { + for { + select { + case i := <-cbuf.get(): + cbuf.load() + if err := handler(i); err != nil { + errorf("transport: Error while handling item. Err: %v", err) + return + } + case <-ctx.Done(): + return + } + hasData: + for { + select { + case i := <-cbuf.get(): + cbuf.load() + if err := handler(i); err != nil { + errorf("transport: Error while handling item. Err: %v", err) + return + } + case <-ctx.Done(): + return + default: + if err := handler(&flushIO{}); err != nil { + errorf("transport: Error while flushing. Err: %v", err) + return + } + break hasData + } + } + } +} diff --git a/vendor/google.golang.org/grpc/transport/transport_test.go b/vendor/google.golang.org/grpc/transport/transport_test.go index 72bd104..42261df 100644 --- a/vendor/google.golang.org/grpc/transport/transport_test.go +++ b/vendor/google.golang.org/grpc/transport/transport_test.go @@ -1,33 +1,18 @@ /* * - * Copyright 2014, Google Inc. - * All rights reserved. + * Copyright 2014 gRPC authors. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * 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 * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. + * http://www.apache.org/licenses/LICENSE-2.0 * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * 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. * */ @@ -64,6 +49,7 @@ type server struct { startedErr chan error // error (or nil) with server start value mu sync.Mutex conns map[ServerTransport]bool + h *testStreamHandler } var ( @@ -75,7 +61,8 @@ var ( ) type testStreamHandler struct { - t *http2Server + t *http2Server + notify chan struct{} } type hType int @@ -83,6 +70,7 @@ type hType int const ( normal hType = iota suspended + notifyCall misbehaved encodingRequiredStatus invalidHeaderField @@ -91,6 +79,19 @@ const ( pingpong ) +func (h *testStreamHandler) handleStreamAndNotify(s *Stream) { + if h.notify == nil { + return + } + go func() { + select { + case <-h.notify: + default: + close(h.notify) + } + }() +} + func (h *testStreamHandler) handleStream(t *testing.T, s *Stream) { req := expectedRequest resp := expectedResponse @@ -107,15 +108,19 @@ func (h *testStreamHandler) handleStream(t *testing.T, s *Stream) { t.Fatalf("handleStream got %v, want %v", p, req) } // send a response back to the client. - h.t.Write(s, resp, &Options{}) + h.t.Write(s, nil, resp, &Options{}) // send the trailer to end the stream. h.t.WriteStatus(s, status.New(codes.OK, "")) } func (h *testStreamHandler) handleStreamPingPong(t *testing.T, s *Stream) { header := make([]byte, 5) - for i := 0; i < 10; i++ { + for { if _, err := s.Read(header); err != nil { + if err == io.EOF { + h.t.WriteStatus(s, status.New(codes.OK, "")) + return + } t.Fatalf("Error on server while reading data header: %v", err) } sz := binary.BigEndian.Uint32(header[1:]) @@ -127,17 +132,10 @@ func (h *testStreamHandler) handleStreamPingPong(t *testing.T, s *Stream) { buf[0] = byte(0) binary.BigEndian.PutUint32(buf[1:], uint32(sz)) copy(buf[5:], msg) - h.t.Write(s, buf, &Options{}) + h.t.Write(s, nil, buf, &Options{}) } } -// handleStreamSuspension blocks until s.ctx is canceled. -func (h *testStreamHandler) handleStreamSuspension(s *Stream) { - go func() { - <-s.ctx.Done() - }() -} - func (h *testStreamHandler) handleStreamMisbehave(t *testing.T, s *Stream) { conn, ok := s.ServerTransport().(*http2Server) if !ok { @@ -146,7 +144,6 @@ func (h *testStreamHandler) handleStreamMisbehave(t *testing.T, s *Stream) { var sent int p := make([]byte, http2MaxFrameLen) for sent < initialWindowSize { - <-conn.writableChan n := initialWindowSize - sent // The last message may be smaller than http2MaxFrameLen if n <= http2MaxFrameLen { @@ -159,11 +156,7 @@ func (h *testStreamHandler) handleStreamMisbehave(t *testing.T, s *Stream) { p = make([]byte, n+1) } } - if err := conn.framer.writeData(true, s.id, false, p); err != nil { - conn.writableChan <- 0 - break - } - conn.writableChan <- 0 + conn.controlBuf.put(&dataFrame{s.id, false, p, func() {}}) sent += len(p) } } @@ -174,13 +167,13 @@ func (h *testStreamHandler) handleStreamEncodingRequiredStatus(t *testing.T, s * } func (h *testStreamHandler) handleStreamInvalidHeaderField(t *testing.T, s *Stream) { - <-h.t.writableChan - h.t.hBuf.Reset() - h.t.hEnc.WriteField(hpack.HeaderField{Name: "content-type", Value: expectedInvalidHeaderField}) - if err := h.t.writeHeaders(s, h.t.hBuf, false); err != nil { - t.Fatalf("Failed to write headers: %v", err) - } - h.t.writableChan <- 0 + headerFields := []hpack.HeaderField{} + headerFields = append(headerFields, hpack.HeaderField{Name: "content-type", Value: expectedInvalidHeaderField}) + h.t.controlBuf.put(&headerFrame{ + streamID: s.id, + hf: headerFields, + endStream: false, + }) } func (h *testStreamHandler) handleStreamDelayRead(t *testing.T, s *Stream) { @@ -205,7 +198,7 @@ func (h *testStreamHandler) handleStreamDelayRead(t *testing.T, s *Stream) { t.Fatalf("handleStream got %v, want %v", p, req) } // send a response back to the client. - h.t.Write(s, resp, &Options{}) + h.t.Write(s, nil, resp, &Options{}) // send the trailer to end the stream. h.t.WriteStatus(s, status.New(codes.OK, "")) } @@ -230,7 +223,7 @@ func (h *testStreamHandler) handleStreamDelayWrite(t *testing.T, s *Stream) { // Wait before sending. Give time to client to start reading // before server starts sending. time.Sleep(2 * time.Second) - h.t.Write(s, resp, &Options{}) + h.t.Write(s, nil, resp, &Options{}) // send the trailer to end the stream. h.t.WriteStatus(s, status.New(codes.OK, "")) } @@ -271,11 +264,17 @@ func (s *server) start(t *testing.T, port int, serverConfig *ServerConfig, ht hT return } s.conns[transport] = true + h := &testStreamHandler{t: transport.(*http2Server)} + s.h = h s.mu.Unlock() - h := &testStreamHandler{transport.(*http2Server)} switch ht { + case notifyCall: + go transport.HandleStreams(h.handleStreamAndNotify, + func(ctx context.Context, _ string) context.Context { + return ctx + }) case suspended: - go transport.HandleStreams(h.handleStreamSuspension, + go transport.HandleStreams(func(*Stream) {}, // Do nothing to handle the stream. func(ctx context.Context, method string) context.Context { return ctx }) @@ -362,8 +361,10 @@ func setUpWithOptions(t *testing.T, port int, serverConfig *ServerConfig, ht hTy target := TargetInfo{ Addr: addr, } - ct, connErr = NewClientTransport(context.Background(), target, copts) + connectCtx, cancel := context.WithDeadline(context.Background(), time.Now().Add(2*time.Second)) + ct, connErr = NewClientTransport(connectCtx, context.Background(), target, copts, func() {}) if connErr != nil { + cancel() // Do not cancel in success path. t.Fatalf("failed to create transport: %v", connErr) } return server, ct @@ -385,8 +386,10 @@ func setUpWithNoPingServer(t *testing.T, copts ConnectOptions, done chan net.Con } done <- conn }() - tr, err := NewClientTransport(context.Background(), TargetInfo{Addr: lis.Addr().String()}, copts) + connectCtx, cancel := context.WithDeadline(context.Background(), time.Now().Add(2*time.Second)) + tr, err := NewClientTransport(connectCtx, context.Background(), TargetInfo{Addr: lis.Addr().String()}, copts, func() {}) if err != nil { + cancel() // Do not cancel in success path. // Server clean-up. lis.Close() if conn, ok := <-done; ok { @@ -397,6 +400,43 @@ func setUpWithNoPingServer(t *testing.T, copts ConnectOptions, done chan net.Con return tr } +// TestInflightStreamClosing ensures that closing in-flight stream +// sends StreamError to concurrent stream reader. +func TestInflightStreamClosing(t *testing.T) { + serverConfig := &ServerConfig{} + server, client := setUpWithOptions(t, 0, serverConfig, suspended, ConnectOptions{}) + defer server.stop() + defer client.Close() + + stream, err := client.NewStream(context.Background(), &CallHdr{}) + if err != nil { + t.Fatalf("Client failed to create RPC request: %v", err) + } + + donec := make(chan struct{}) + serr := StreamError{Desc: "client connection is closing"} + go func() { + defer close(donec) + if _, err := stream.Read(make([]byte, defaultWindowSize)); err != serr { + t.Errorf("unexpected Stream error %v, expected %v", err, serr) + } + }() + + // should unblock concurrent stream.Read + client.CloseStream(stream, serr) + + // wait for stream.Read error + timeout := time.NewTimer(5 * time.Second) + select { + case <-donec: + if !timeout.Stop() { + <-timeout.C + } + case <-timeout.C: + t.Fatalf("Test timed out, expected a StreamError.") + } +} + // TestMaxConnectionIdle tests that a server will send GoAway to a idle client. // An idle client is one who doesn't make any RPC calls for a duration of // MaxConnectionIdle time. @@ -481,7 +521,7 @@ func TestMaxConnectionAge(t *testing.T) { } } -// TestKeepaliveServer tests that a server closes conneciton with a client that doesn't respond to keepalive pings. +// TestKeepaliveServer tests that a server closes connection with a client that doesn't respond to keepalive pings. func TestKeepaliveServer(t *testing.T) { serverConfig := &ServerConfig{ KeepaliveParams: keepalive.ServerParameters{ @@ -497,8 +537,18 @@ func TestKeepaliveServer(t *testing.T) { t.Fatalf("Failed to dial: %v", err) } defer client.Close() + // Set read deadline on client conn so that it doesn't block forever in errorsome cases. - client.SetReadDeadline(time.Now().Add(10 * time.Second)) + client.SetDeadline(time.Now().Add(10 * time.Second)) + + if n, err := client.Write(clientPreface); err != nil || n != len(clientPreface) { + t.Fatalf("Error writing client preface; n=%v, err=%v", n, err) + } + framer := newFramer(client, defaultWriteBufSize, defaultReadBufSize) + if err := framer.fr.WriteSettings(http2.Setting{}); err != nil { + t.Fatal("Error writing settings frame:", err) + } + framer.writer.Flush() // Wait for keepalive logic to close the connection. time.Sleep(4 * time.Second) b := make([]byte, 24) @@ -639,7 +689,7 @@ func TestKeepaliveServerEnforcementWithAbusiveClientNoRPC(t *testing.T) { clientOptions := ConnectOptions{ KeepaliveParams: keepalive.ClientParameters{ Time: 50 * time.Millisecond, - Timeout: 50 * time.Millisecond, + Timeout: 1 * time.Second, PermitWithoutStream: true, }, } @@ -647,7 +697,7 @@ func TestKeepaliveServerEnforcementWithAbusiveClientNoRPC(t *testing.T) { defer server.stop() defer client.Close() - timeout := time.NewTimer(2 * time.Second) + timeout := time.NewTimer(10 * time.Second) select { case <-client.GoAway(): if !timeout.Stop() { @@ -674,7 +724,7 @@ func TestKeepaliveServerEnforcementWithAbusiveClientWithRPC(t *testing.T) { clientOptions := ConnectOptions{ KeepaliveParams: keepalive.ClientParameters{ Time: 50 * time.Millisecond, - Timeout: 50 * time.Millisecond, + Timeout: 1 * time.Second, }, } server, client := setUpWithOptions(t, 0, serverConfig, suspended, clientOptions) @@ -684,7 +734,7 @@ func TestKeepaliveServerEnforcementWithAbusiveClientWithRPC(t *testing.T) { if _, err := client.NewStream(context.Background(), &CallHdr{Flush: true}); err != nil { t.Fatalf("Client failed to create stream.") } - timeout := time.NewTimer(2 * time.Second) + timeout := time.NewTimer(10 * time.Second) select { case <-client.GoAway(): if !timeout.Stop() { @@ -712,7 +762,7 @@ func TestKeepaliveServerEnforcementWithObeyingClientNoRPC(t *testing.T) { clientOptions := ConnectOptions{ KeepaliveParams: keepalive.ClientParameters{ Time: 101 * time.Millisecond, - Timeout: 50 * time.Millisecond, + Timeout: 1 * time.Second, PermitWithoutStream: true, }, } @@ -721,7 +771,7 @@ func TestKeepaliveServerEnforcementWithObeyingClientNoRPC(t *testing.T) { defer client.Close() // Give keepalive enough time. - time.Sleep(2 * time.Second) + time.Sleep(3 * time.Second) // Assert that connection is healthy. ct := client.(*http2Client) ct.mu.Lock() @@ -740,7 +790,7 @@ func TestKeepaliveServerEnforcementWithObeyingClientWithRPC(t *testing.T) { clientOptions := ConnectOptions{ KeepaliveParams: keepalive.ClientParameters{ Time: 101 * time.Millisecond, - Timeout: 50 * time.Millisecond, + Timeout: 1 * time.Second, }, } server, client := setUpWithOptions(t, 0, serverConfig, suspended, clientOptions) @@ -752,7 +802,7 @@ func TestKeepaliveServerEnforcementWithObeyingClientWithRPC(t *testing.T) { } // Give keepalive enough time. - time.Sleep(2 * time.Second) + time.Sleep(3 * time.Second) // Assert that connection is healthy. ct := client.(*http2Client) ct.mu.Lock() @@ -786,7 +836,7 @@ func TestClientSendAndReceive(t *testing.T) { Last: true, Delay: false, } - if err := ct.Write(s1, expectedRequest, &opts); err != nil && err != io.EOF { + if err := ct.Write(s1, nil, expectedRequest, &opts); err != nil && err != io.EOF { t.Fatalf("failed to send data: %v", err) } p := make([]byte, len(expectedResponse)) @@ -823,7 +873,7 @@ func performOneRPC(ct ClientTransport) { Last: true, Delay: false, } - if err := ct.Write(s, expectedRequest, &opts); err == nil || err == io.EOF { + if err := ct.Write(s, []byte{}, expectedRequest, &opts); err == nil || err == io.EOF { time.Sleep(5 * time.Millisecond) // The following s.Recv()'s could error out because the // underlying transport is gone. @@ -867,7 +917,7 @@ func TestLargeMessage(t *testing.T) { if err != nil { t.Errorf("%v.NewStream(_, _) = _, %v, want _, ", ct, err) } - if err := ct.Write(s, expectedRequestLarge, &Options{Last: true, Delay: false}); err != nil && err != io.EOF { + if err := ct.Write(s, []byte{}, expectedRequestLarge, &Options{Last: true, Delay: false}); err != nil && err != io.EOF { t.Errorf("%v.Write(_, _, _) = %v, want ", ct, err) } p := make([]byte, len(expectedResponseLarge)) @@ -899,7 +949,7 @@ func TestLargeMessageWithDelayRead(t *testing.T) { if err != nil { t.Errorf("%v.NewStream(_, _) = _, %v, want _, ", ct, err) } - if err := ct.Write(s, expectedRequestLarge, &Options{Last: true, Delay: false}); err != nil && err != io.EOF { + if err := ct.Write(s, []byte{}, expectedRequestLarge, &Options{Last: true, Delay: false}); err != nil && err != io.EOF { t.Errorf("%v.Write(_, _, _) = %v, want ", ct, err) } p := make([]byte, len(expectedResponseLarge)) @@ -937,7 +987,7 @@ func TestLargeMessageDelayWrite(t *testing.T) { // Give time to server to start reading before client starts sending. time.Sleep(2 * time.Second) - if err := ct.Write(s, expectedRequestLarge, &Options{Last: true, Delay: false}); err != nil && err != io.EOF { + if err := ct.Write(s, []byte{}, expectedRequestLarge, &Options{Last: true, Delay: false}); err != nil && err != io.EOF { t.Errorf("%v.Write(_, _, _) = %v, want ", ct, err) } p := make([]byte, len(expectedResponseLarge)) @@ -973,8 +1023,8 @@ func TestGracefulClose(t *testing.T) { wg.Add(1) go func() { defer wg.Done() - if _, err := ct.NewStream(context.Background(), callHdr); err != ErrStreamDrain { - t.Errorf("%v.NewStream(_, _) = _, %v, want _, %v", ct, err, ErrStreamDrain) + if _, err := ct.NewStream(context.Background(), callHdr); err != errStreamDrain { + t.Errorf("%v.NewStream(_, _) = _, %v, want _, %v", ct, err, errStreamDrain) } }() } @@ -983,7 +1033,7 @@ func TestGracefulClose(t *testing.T) { Delay: false, } // The stream which was created before graceful close can still proceed. - if err := ct.Write(s, expectedRequest, &opts); err != nil && err != io.EOF { + if err := ct.Write(s, nil, expectedRequest, &opts); err != nil && err != io.EOF { t.Fatalf("%v.Write(_, _, _) = %v, want ", ct, err) } p := make([]byte, len(expectedResponse)) @@ -1005,13 +1055,15 @@ func TestLargeMessageSuspension(t *testing.T) { Method: "foo.Large", } // Set a long enough timeout for writing a large message out. - ctx, _ := context.WithTimeout(context.Background(), time.Second) + ctx, cancel := context.WithTimeout(context.Background(), time.Second) + defer cancel() s, err := ct.NewStream(ctx, callHdr) if err != nil { t.Fatalf("failed to open stream: %v", err) } // Write should not be done successfully due to flow control. - err = ct.Write(s, expectedRequestLarge, &Options{Last: true, Delay: false}) + msg := make([]byte, initialWindowSize*8) + err = ct.Write(s, nil, msg, &Options{Last: true, Delay: false}) expectedErr := streamErrorf(codes.DeadlineExceeded, "%v", context.DeadlineExceeded) if err != expectedErr { t.Fatalf("Write got %v, want %v", err, expectedErr) @@ -1055,43 +1107,29 @@ func TestMaxStreams(t *testing.T) { } } }() + // Test these conditions until they pass or + // we reach the deadline (failure case). for { select { case <-ch: case <-done: - t.Fatalf("Client has not received the max stream setting in 5 seconds.") + t.Fatalf("streamsQuota.quota shouldn't be non-zero.") } - cc.mu.Lock() - // cc.maxStreams should be equal to 1 after having received settings frame from - // server. - if cc.maxStreams == 1 { - cc.mu.Unlock() - select { - case <-cc.streamsQuota.acquire(): - t.Fatalf("streamsQuota.acquire() becomes readable mistakenly.") - default: - cc.streamsQuota.mu.Lock() - quota := cc.streamsQuota.quota - cc.streamsQuota.mu.Unlock() - if quota != 0 { - t.Fatalf("streamsQuota.quota got non-zero quota mistakenly.") - } - } + cc.streamsQuota.mu.Lock() + sq := cc.streamsQuota.quota + cc.streamsQuota.mu.Unlock() + if sq == 0 { break } - cc.mu.Unlock() } close(ready) // Close the pending stream so that the streams quota becomes available for the next new stream. ct.CloseStream(s, nil) - select { - case i := <-cc.streamsQuota.acquire(): - if i != 1 { - t.Fatalf("streamsQuota.acquire() got %d quota, want 1.", i) - } - cc.streamsQuota.add(i) - default: - t.Fatalf("streamsQuota.acquire() is not readable.") + cc.streamsQuota.mu.Lock() + i := cc.streamsQuota.quota + cc.streamsQuota.mu.Unlock() + if i != 1 { + t.Fatalf("streamsQuota is %d, want 1.", i) } if _, err := ct.NewStream(context.Background(), callHdr); err != nil { t.Fatalf("Failed to open stream: %v", err) @@ -1133,12 +1171,7 @@ func TestServerContextCanceledOnClosedConnection(t *testing.T) { if err != nil { t.Fatalf("Failed to open stream: %v", err) } - // Make sure the headers frame is flushed out. - <-cc.writableChan - if err = cc.framer.writeData(true, s.id, false, make([]byte, http2MaxFrameLen)); err != nil { - t.Fatalf("Failed to write data: %v", err) - } - cc.writableChan <- 0 + cc.controlBuf.put(&dataFrame{s.id, false, make([]byte, http2MaxFrameLen), func() {}}) // Loop until the server side stream is created. var ss *Stream for { @@ -1164,8 +1197,182 @@ func TestServerContextCanceledOnClosedConnection(t *testing.T) { server.stop() } +func TestClientConnDecoupledFromApplicationRead(t *testing.T) { + connectOptions := ConnectOptions{ + InitialWindowSize: defaultWindowSize, + InitialConnWindowSize: defaultWindowSize, + } + server, client := setUpWithOptions(t, 0, &ServerConfig{}, notifyCall, connectOptions) + defer server.stop() + defer client.Close() + + waitWhileTrue(t, func() (bool, error) { + server.mu.Lock() + defer server.mu.Unlock() + + if len(server.conns) == 0 { + return true, fmt.Errorf("timed-out while waiting for connection to be created on the server") + } + return false, nil + }) + + var st *http2Server + server.mu.Lock() + for k := range server.conns { + st = k.(*http2Server) + } + notifyChan := make(chan struct{}) + server.h.notify = notifyChan + server.mu.Unlock() + cstream1, err := client.NewStream(context.Background(), &CallHdr{Flush: true}) + if err != nil { + t.Fatalf("Client failed to create first stream. Err: %v", err) + } + + <-notifyChan + var sstream1 *Stream + // Access stream on the server. + st.mu.Lock() + for _, v := range st.activeStreams { + if v.id == cstream1.id { + sstream1 = v + } + } + st.mu.Unlock() + if sstream1 == nil { + t.Fatalf("Didn't find stream corresponding to client cstream.id: %v on the server", cstream1.id) + } + // Exhaust client's connection window. + if err := st.Write(sstream1, []byte{}, make([]byte, defaultWindowSize), &Options{}); err != nil { + t.Fatalf("Server failed to write data. Err: %v", err) + } + notifyChan = make(chan struct{}) + server.mu.Lock() + server.h.notify = notifyChan + server.mu.Unlock() + // Create another stream on client. + cstream2, err := client.NewStream(context.Background(), &CallHdr{Flush: true}) + if err != nil { + t.Fatalf("Client failed to create second stream. Err: %v", err) + } + <-notifyChan + var sstream2 *Stream + st.mu.Lock() + for _, v := range st.activeStreams { + if v.id == cstream2.id { + sstream2 = v + } + } + st.mu.Unlock() + if sstream2 == nil { + t.Fatalf("Didn't find stream corresponding to client cstream.id: %v on the server", cstream2.id) + } + // Server should be able to send data on the new stream, even though the client hasn't read anything on the first stream. + if err := st.Write(sstream2, []byte{}, make([]byte, defaultWindowSize), &Options{}); err != nil { + t.Fatalf("Server failed to write data. Err: %v", err) + } + + // Client should be able to read data on second stream. + if _, err := cstream2.Read(make([]byte, defaultWindowSize)); err != nil { + t.Fatalf("_.Read(_) = _, %v, want _, ", err) + } + + // Client should be able to read data on first stream. + if _, err := cstream1.Read(make([]byte, defaultWindowSize)); err != nil { + t.Fatalf("_.Read(_) = _, %v, want _, ", err) + } +} + +func TestServerConnDecoupledFromApplicationRead(t *testing.T) { + serverConfig := &ServerConfig{ + InitialWindowSize: defaultWindowSize, + InitialConnWindowSize: defaultWindowSize, + } + server, client := setUpWithOptions(t, 0, serverConfig, suspended, ConnectOptions{}) + defer server.stop() + defer client.Close() + waitWhileTrue(t, func() (bool, error) { + server.mu.Lock() + defer server.mu.Unlock() + + if len(server.conns) == 0 { + return true, fmt.Errorf("timed-out while waiting for connection to be created on the server") + } + return false, nil + }) + var st *http2Server + server.mu.Lock() + for k := range server.conns { + st = k.(*http2Server) + } + server.mu.Unlock() + cstream1, err := client.NewStream(context.Background(), &CallHdr{Flush: true}) + if err != nil { + t.Fatalf("Failed to create 1st stream. Err: %v", err) + } + // Exhaust server's connection window. + if err := client.Write(cstream1, nil, make([]byte, defaultWindowSize), &Options{Last: true}); err != nil { + t.Fatalf("Client failed to write data. Err: %v", err) + } + //Client should be able to create another stream and send data on it. + cstream2, err := client.NewStream(context.Background(), &CallHdr{Flush: true}) + if err != nil { + t.Fatalf("Failed to create 2nd stream. Err: %v", err) + } + if err := client.Write(cstream2, nil, make([]byte, defaultWindowSize), &Options{}); err != nil { + t.Fatalf("Client failed to write data. Err: %v", err) + } + // Get the streams on server. + waitWhileTrue(t, func() (bool, error) { + st.mu.Lock() + defer st.mu.Unlock() + + if len(st.activeStreams) != 2 { + return true, fmt.Errorf("timed-out while waiting for server to have created the streams") + } + return false, nil + }) + var sstream1 *Stream + st.mu.Lock() + for _, v := range st.activeStreams { + if v.id == 1 { + sstream1 = v + } + } + st.mu.Unlock() + // Trying to write more on a max-ed out stream should result in a RST_STREAM from the server. + ct := client.(*http2Client) + ct.controlBuf.put(&dataFrame{cstream2.id, true, make([]byte, 1), func() {}}) + code := http2ErrConvTab[http2.ErrCodeFlowControl] + waitWhileTrue(t, func() (bool, error) { + cstream2.mu.Lock() + defer cstream2.mu.Unlock() + if cstream2.status.Code() != code { + return true, fmt.Errorf("want code = %v, got %v", code, cstream2.status.Code()) + } + return false, nil + }) + // Reading from the stream on server should succeed. + if _, err := sstream1.Read(make([]byte, defaultWindowSize)); err != nil { + t.Fatalf("_.Read(_) = %v, want ", err) + } + + if _, err := sstream1.Read(make([]byte, 1)); err != io.EOF { + t.Fatalf("_.Read(_) = %v, want io.EOF", err) + } + +} + func TestServerWithMisbehavedClient(t *testing.T) { - server, ct := setUp(t, 0, math.MaxUint32, suspended) + serverConfig := &ServerConfig{ + InitialWindowSize: defaultWindowSize, + InitialConnWindowSize: defaultWindowSize, + } + connectOptions := ConnectOptions{ + InitialWindowSize: defaultWindowSize, + InitialConnWindowSize: defaultWindowSize, + } + server, ct := setUpWithOptions(t, 0, serverConfig, suspended, connectOptions) callHdr := &CallHdr{ Host: "localhost", Method: "foo", @@ -1200,11 +1407,7 @@ func TestServerWithMisbehavedClient(t *testing.T) { } var sent int // Drain the stream flow control window - <-cc.writableChan - if err = cc.framer.writeData(true, s.id, false, make([]byte, http2MaxFrameLen)); err != nil { - t.Fatalf("Failed to write data: %v", err) - } - cc.writableChan <- 0 + cc.controlBuf.put(&dataFrame{s.id, false, make([]byte, http2MaxFrameLen), func() {}}) sent += http2MaxFrameLen // Wait until the server creates the corresponding stream and receive some data. var ss *Stream @@ -1224,16 +1427,12 @@ func TestServerWithMisbehavedClient(t *testing.T) { } ss.fc.mu.Unlock() } - if ss.fc.pendingData != http2MaxFrameLen || ss.fc.pendingUpdate != 0 || sc.fc.pendingData != http2MaxFrameLen || sc.fc.pendingUpdate != 0 { - t.Fatalf("Server mistakenly updates inbound flow control params: got %d, %d, %d, %d; want %d, %d, %d, %d", ss.fc.pendingData, ss.fc.pendingUpdate, sc.fc.pendingData, sc.fc.pendingUpdate, http2MaxFrameLen, 0, http2MaxFrameLen, 0) + if ss.fc.pendingData != http2MaxFrameLen || ss.fc.pendingUpdate != 0 || sc.fc.pendingData != 0 || sc.fc.pendingUpdate != 0 { + t.Fatalf("Server mistakenly updates inbound flow control params: got %d, %d, %d, %d; want %d, %d, %d, %d", ss.fc.pendingData, ss.fc.pendingUpdate, sc.fc.pendingData, sc.fc.pendingUpdate, http2MaxFrameLen, 0, 0, 0) } // Keep sending until the server inbound window is drained for that stream. for sent <= initialWindowSize { - <-cc.writableChan - if err = cc.framer.writeData(true, s.id, false, make([]byte, 1)); err != nil { - t.Fatalf("Failed to write data: %v", err) - } - cc.writableChan <- 0 + cc.controlBuf.put(&dataFrame{s.id, false, make([]byte, 1), func() {}}) sent++ } // Server sent a resetStream for s already. @@ -1245,30 +1444,18 @@ func TestServerWithMisbehavedClient(t *testing.T) { t.Fatalf("%v got status %v; want Code=%v", s, s.status, code) } - if ss.fc.pendingData != 0 || ss.fc.pendingUpdate != 0 || sc.fc.pendingData != 0 || sc.fc.pendingUpdate <= initialWindowSize { - t.Fatalf("Server mistakenly resets inbound flow control params: got %d, %d, %d, %d; want 0, 0, 0, >%d", ss.fc.pendingData, ss.fc.pendingUpdate, sc.fc.pendingData, sc.fc.pendingUpdate, initialWindowSize) - } ct.CloseStream(s, nil) - // Test server behavior for violation of connection flow control window size restriction. - // - // Keep creating new streams until the connection window is drained on the server and - // the server tears down the connection. - for { - s, err := ct.NewStream(context.Background(), callHdr) - if err != nil { - // The server tears down the connection. - break - } - <-cc.writableChan - cc.framer.writeData(true, s.id, true, make([]byte, http2MaxFrameLen)) - cc.writableChan <- 0 - } ct.Close() server.stop() } func TestClientWithMisbehavedServer(t *testing.T) { - server, ct := setUp(t, 0, math.MaxUint32, misbehaved) + // Turn off BDP estimation so that the server can + // violate stream window. + connectOptions := ConnectOptions{ + InitialWindowSize: initialWindowSize, + } + server, ct := setUpWithOptions(t, 0, &ServerConfig{}, misbehaved, connectOptions) callHdr := &CallHdr{ Host: "localhost", Method: "foo.Stream", @@ -1283,7 +1470,7 @@ func TestClientWithMisbehavedServer(t *testing.T) { t.Fatalf("Failed to open stream: %v", err) } d := make([]byte, 1) - if err := ct.Write(s, d, &Options{Last: true, Delay: false}); err != nil && err != io.EOF { + if err := ct.Write(s, nil, d, &Options{Last: true, Delay: false}); err != nil && err != io.EOF { t.Fatalf("Failed to write: %v", err) } // Read without window update. @@ -1293,8 +1480,8 @@ func TestClientWithMisbehavedServer(t *testing.T) { break } } - if s.fc.pendingData <= initialWindowSize || s.fc.pendingUpdate != 0 || conn.fc.pendingData <= initialWindowSize || conn.fc.pendingUpdate != 0 { - t.Fatalf("Client mistakenly updates inbound flow control params: got %d, %d, %d, %d; want >%d, %d, >%d, %d", s.fc.pendingData, s.fc.pendingUpdate, conn.fc.pendingData, conn.fc.pendingUpdate, initialWindowSize, 0, initialWindowSize, 0) + if s.fc.pendingData <= initialWindowSize || s.fc.pendingUpdate != 0 || conn.fc.pendingData != 0 || conn.fc.pendingUpdate != 0 { + t.Fatalf("Client mistakenly updates inbound flow control params: got %d, %d, %d, %d; want >%d, %d, %d, >%d", s.fc.pendingData, s.fc.pendingUpdate, conn.fc.pendingData, conn.fc.pendingUpdate, initialWindowSize, 0, 0, 0) } if err != io.EOF { @@ -1305,25 +1492,6 @@ func TestClientWithMisbehavedServer(t *testing.T) { } conn.CloseStream(s, err) - if s.fc.pendingData != 0 || s.fc.pendingUpdate != 0 || conn.fc.pendingData != 0 || conn.fc.pendingUpdate <= initialWindowSize { - t.Fatalf("Client mistakenly resets inbound flow control params: got %d, %d, %d, %d; want 0, 0, 0, >%d", s.fc.pendingData, s.fc.pendingUpdate, conn.fc.pendingData, conn.fc.pendingUpdate, initialWindowSize) - } - // Test the logic for the violation of the connection flow control window size restriction. - // - // Generate enough streams to drain the connection window. Make the server flood the traffic - // to violate flow control window size of the connection. - callHdr.Method = "foo.Connection" - for i := 0; i < int(initialConnWindowSize/initialWindowSize+10); i++ { - s, err := ct.NewStream(context.Background(), callHdr) - if err != nil { - break - } - if err := ct.Write(s, d, &Options{Last: true, Delay: false}); err != nil { - break - } - } - // http2Client.errChan is closed due to connection flow control window size violation. - <-conn.Error() ct.Close() server.stop() } @@ -1344,7 +1512,7 @@ func TestEncodingRequiredStatus(t *testing.T) { Last: true, Delay: false, } - if err := ct.Write(s, expectedRequest, &opts); err != nil && err != io.EOF { + if err := ct.Write(s, nil, expectedRequest, &opts); err != nil && err != io.EOF { t.Fatalf("Failed to write the request: %v", err) } p := make([]byte, http2MaxFrameLen) @@ -1372,27 +1540,18 @@ func TestInvalidHeaderField(t *testing.T) { Last: true, Delay: false, } - if err := ct.Write(s, expectedRequest, &opts); err != nil && err != io.EOF { + if err := ct.Write(s, nil, expectedRequest, &opts); err != nil && err != io.EOF { t.Fatalf("Failed to write the request: %v", err) } p := make([]byte, http2MaxFrameLen) _, err = s.trReader.(*transportReader).Read(p) - if se, ok := err.(StreamError); !ok || se.Code != codes.FailedPrecondition || !strings.Contains(err.Error(), expectedInvalidHeaderField) { - t.Fatalf("Read got error %v, want error with code %s and contains %q", err, codes.FailedPrecondition, expectedInvalidHeaderField) + if se, ok := err.(StreamError); !ok || se.Code != codes.Internal || !strings.Contains(err.Error(), expectedInvalidHeaderField) { + t.Fatalf("Read got error %v, want error with code %s and contains %q", err, codes.Internal, expectedInvalidHeaderField) } ct.Close() server.stop() } -func TestStreamContext(t *testing.T) { - expectedStream := &Stream{} - ctx := newContextWithStream(context.Background(), expectedStream) - s, ok := StreamFromContext(ctx) - if !ok || expectedStream != s { - t.Fatalf("GetStreamFromContext(%v) = %v, %t, want: %v, true", ctx, s, ok, expectedStream) - } -} - func TestIsReservedHeader(t *testing.T) { tests := []struct { h string @@ -1514,14 +1673,22 @@ func testAccountCheckWindowSize(t *testing.T, wc windowSizeConfig) { time.Sleep(time.Second) waitWhileTrue(t, func() (bool, error) { - if lim := st.fc.limit; lim != uint32(serverConfig.InitialConnWindowSize) { + st.fc.mu.Lock() + lim := st.fc.limit + st.fc.mu.Unlock() + if lim != uint32(serverConfig.InitialConnWindowSize) { return true, fmt.Errorf("Server transport flow control window size: got %v, want %v", lim, serverConfig.InitialConnWindowSize) } return false, nil }) ctx, cancel := context.WithTimeout(context.Background(), time.Second) - serverSendQuota, err := wait(ctx, nil, nil, nil, st.sendQuotaPool.acquire()) + serverSendQuota, _, err := st.sendQuotaPool.get(math.MaxInt32, waiters{ + ctx: ctx, + tctx: st.ctx, + done: nil, + goAway: nil, + }) if err != nil { t.Fatalf("Error while acquiring sendQuota on server. Err: %v", err) } @@ -1531,15 +1698,24 @@ func testAccountCheckWindowSize(t *testing.T, wc windowSizeConfig) { t.Fatalf("Server send quota(%v) not equal to client's window size(%v) on conn.", serverSendQuota, connectOptions.InitialConnWindowSize) } st.mu.Lock() - if st.streamSendQuota != uint32(connectOptions.InitialWindowSize) { - t.Fatalf("Server stream send quota(%v) not equal to client's window size(%v) on stream.", ct.streamSendQuota, connectOptions.InitialWindowSize) - } + ssq := st.streamSendQuota st.mu.Unlock() - if ct.fc.limit != uint32(connectOptions.InitialConnWindowSize) { - t.Fatalf("Client transport flow control window size is %v, want %v", ct.fc.limit, connectOptions.InitialConnWindowSize) + if ssq != uint32(connectOptions.InitialWindowSize) { + t.Fatalf("Server stream send quota(%v) not equal to client's window size(%v) on stream.", ssq, connectOptions.InitialWindowSize) + } + ct.fc.mu.Lock() + limit := ct.fc.limit + ct.fc.mu.Unlock() + if limit != uint32(connectOptions.InitialConnWindowSize) { + t.Fatalf("Client transport flow control window size is %v, want %v", limit, connectOptions.InitialConnWindowSize) } ctx, cancel = context.WithTimeout(context.Background(), time.Second) - clientSendQuota, err := wait(ctx, nil, nil, nil, ct.sendQuotaPool.acquire()) + clientSendQuota, _, err := ct.sendQuotaPool.get(math.MaxInt32, waiters{ + ctx: ctx, + tctx: ct.ctx, + done: nil, + goAway: nil, + }) if err != nil { t.Fatalf("Error while acquiring sendQuota on client. Err: %v", err) } @@ -1549,12 +1725,16 @@ func testAccountCheckWindowSize(t *testing.T, wc windowSizeConfig) { t.Fatalf("Client send quota(%v) not equal to server's window size(%v) on conn.", clientSendQuota, serverConfig.InitialConnWindowSize) } ct.mu.Lock() - if ct.streamSendQuota != uint32(serverConfig.InitialWindowSize) { - t.Fatalf("Client stream send quota(%v) not equal to server's window size(%v) on stream.", ct.streamSendQuota, serverConfig.InitialWindowSize) - } + ssq = ct.streamSendQuota ct.mu.Unlock() - if cstream.fc.limit != uint32(connectOptions.InitialWindowSize) { - t.Fatalf("Client stream flow control window size is %v, want %v", cstream.fc.limit, connectOptions.InitialWindowSize) + if ssq != uint32(serverConfig.InitialWindowSize) { + t.Fatalf("Client stream send quota(%v) not equal to server's window size(%v) on stream.", ssq, serverConfig.InitialWindowSize) + } + cstream.fc.mu.Lock() + limit = cstream.fc.limit + cstream.fc.mu.Unlock() + if limit != uint32(connectOptions.InitialWindowSize) { + t.Fatalf("Client stream flow control window size is %v, want %v", limit, connectOptions.InitialWindowSize) } var sstream *Stream st.mu.Lock() @@ -1562,8 +1742,11 @@ func testAccountCheckWindowSize(t *testing.T, wc windowSizeConfig) { sstream = v } st.mu.Unlock() - if sstream.fc.limit != uint32(serverConfig.InitialWindowSize) { - t.Fatalf("Server stream flow control window size is %v, want %v", sstream.fc.limit, serverConfig.InitialWindowSize) + sstream.fc.mu.Lock() + limit = sstream.fc.limit + sstream.fc.mu.Unlock() + if limit != uint32(serverConfig.InitialWindowSize) { + t.Fatalf("Server stream flow control window size is %v, want %v", limit, serverConfig.InitialWindowSize) } } @@ -1601,7 +1784,7 @@ func TestAccountCheckExpandingWindow(t *testing.T) { opts := Options{} header := make([]byte, 5) for i := 1; i <= 10; i++ { - if err := ct.Write(cstream, buf, &opts); err != nil { + if err := ct.Write(cstream, nil, buf, &opts); err != nil { t.Fatalf("Error on client while writing message: %v", err) } if _, err := cstream.Read(header); err != nil { @@ -1616,6 +1799,12 @@ func TestAccountCheckExpandingWindow(t *testing.T) { t.Fatalf("Length of message received by client: %v, want: %v", len(recvMsg), len(msg)) } } + defer func() { + ct.Write(cstream, nil, nil, &Options{Last: true}) // Close the stream. + if _, err := cstream.Read(header); err != io.EOF { + t.Fatalf("Client expected an EOF from the server. Got: %v", err) + } + }() var sstream *Stream st.mu.Lock() for _, v := range st.activeStreams { @@ -1667,60 +1856,84 @@ func TestAccountCheckExpandingWindow(t *testing.T) { st.fc.mu.Unlock() // Check flow conrtrol window on client stream is equal to out flow on server stream. - ctx, _ := context.WithTimeout(context.Background(), time.Second) - serverStreamSendQuota, err := wait(ctx, nil, nil, nil, sstream.sendQuotaPool.acquire()) + ctx, cancel := context.WithTimeout(context.Background(), time.Second) + serverStreamSendQuota, _, err := sstream.sendQuotaPool.get(math.MaxInt32, waiters{ + ctx: ctx, + tctx: context.Background(), + done: nil, + goAway: nil, + }) + cancel() if err != nil { return true, fmt.Errorf("error while acquiring server stream send quota. Err: %v", err) } sstream.sendQuotaPool.add(serverStreamSendQuota) cstream.fc.mu.Lock() - if uint32(serverStreamSendQuota) != cstream.fc.limit-cstream.fc.pendingUpdate { - cstream.fc.mu.Unlock() - return true, fmt.Errorf("server stream outflow: %v, estimated by client: %v", serverStreamSendQuota, cstream.fc.limit-cstream.fc.pendingUpdate) - } + clientEst := cstream.fc.limit - cstream.fc.pendingUpdate cstream.fc.mu.Unlock() + if uint32(serverStreamSendQuota) != clientEst { + return true, fmt.Errorf("server stream outflow: %v, estimated by client: %v", serverStreamSendQuota, clientEst) + } // Check flow control window on server stream is equal to out flow on client stream. - ctx, _ = context.WithTimeout(context.Background(), time.Second) - clientStreamSendQuota, err := wait(ctx, nil, nil, nil, cstream.sendQuotaPool.acquire()) + ctx, cancel = context.WithTimeout(context.Background(), time.Second) + clientStreamSendQuota, _, err := cstream.sendQuotaPool.get(math.MaxInt32, waiters{ + ctx: ctx, + tctx: context.Background(), + done: nil, + goAway: nil, + }) + cancel() if err != nil { return true, fmt.Errorf("error while acquiring client stream send quota. Err: %v", err) } cstream.sendQuotaPool.add(clientStreamSendQuota) sstream.fc.mu.Lock() - if uint32(clientStreamSendQuota) != sstream.fc.limit-sstream.fc.pendingUpdate { - sstream.fc.mu.Unlock() - return true, fmt.Errorf("client stream outflow: %v. estimated by server: %v", clientStreamSendQuota, sstream.fc.limit-sstream.fc.pendingUpdate) - } + serverEst := sstream.fc.limit - sstream.fc.pendingUpdate sstream.fc.mu.Unlock() + if uint32(clientStreamSendQuota) != serverEst { + return true, fmt.Errorf("client stream outflow: %v. estimated by server: %v", clientStreamSendQuota, serverEst) + } // Check flow control window on client transport is equal to out flow of server transport. - ctx, _ = context.WithTimeout(context.Background(), time.Second) - serverTrSendQuota, err := wait(ctx, nil, nil, nil, st.sendQuotaPool.acquire()) + ctx, cancel = context.WithTimeout(context.Background(), time.Second) + serverTrSendQuota, _, err := st.sendQuotaPool.get(math.MaxInt32, waiters{ + ctx: ctx, + tctx: st.ctx, + done: nil, + goAway: nil, + }) + cancel() if err != nil { return true, fmt.Errorf("error while acquring server transport send quota. Err: %v", err) } st.sendQuotaPool.add(serverTrSendQuota) ct.fc.mu.Lock() - if uint32(serverTrSendQuota) != ct.fc.limit-ct.fc.pendingUpdate { - ct.fc.mu.Unlock() - return true, fmt.Errorf("server transport outflow: %v, estimated by client: %v", serverTrSendQuota, ct.fc.limit-ct.fc.pendingUpdate) - } + clientEst = ct.fc.limit - ct.fc.pendingUpdate ct.fc.mu.Unlock() + if uint32(serverTrSendQuota) != clientEst { + return true, fmt.Errorf("server transport outflow: %v, estimated by client: %v", serverTrSendQuota, clientEst) + } // Check flow control window on server transport is equal to out flow of client transport. - ctx, _ = context.WithTimeout(context.Background(), time.Second) - clientTrSendQuota, err := wait(ctx, nil, nil, nil, ct.sendQuotaPool.acquire()) + ctx, cancel = context.WithTimeout(context.Background(), time.Second) + clientTrSendQuota, _, err := ct.sendQuotaPool.get(math.MaxInt32, waiters{ + ctx: ctx, + tctx: ct.ctx, + done: nil, + goAway: nil, + }) + cancel() if err != nil { return true, fmt.Errorf("error while acquiring client transport send quota. Err: %v", err) } ct.sendQuotaPool.add(clientTrSendQuota) st.fc.mu.Lock() - if uint32(clientTrSendQuota) != st.fc.limit-st.fc.pendingUpdate { - st.fc.mu.Unlock() - return true, fmt.Errorf("client transport outflow: %v, estimated by client: %v", clientTrSendQuota, st.fc.limit-st.fc.pendingUpdate) - } + serverEst = st.fc.limit - st.fc.pendingUpdate st.fc.mu.Unlock() + if uint32(clientTrSendQuota) != serverEst { + return true, fmt.Errorf("client transport outflow: %v, estimated by client: %v", clientTrSendQuota, serverEst) + } return false, nil }) @@ -1759,15 +1972,12 @@ func writeOneHeader(framer *http2.Framer, sid uint32, httpStatus int) error { var buf bytes.Buffer henc := hpack.NewEncoder(&buf) henc.WriteField(hpack.HeaderField{Name: ":status", Value: fmt.Sprint(httpStatus)}) - if err := framer.WriteHeaders(http2.HeadersFrameParam{ + return framer.WriteHeaders(http2.HeadersFrameParam{ StreamID: sid, BlockFragment: buf.Bytes(), EndStream: true, EndHeaders: true, - }); err != nil { - return err - } - return nil + }) } func writeTwoHeaders(framer *http2.Framer, sid uint32, httpStatus int) error { @@ -1789,15 +1999,12 @@ func writeTwoHeaders(framer *http2.Framer, sid uint32, httpStatus int) error { Name: ":status", Value: fmt.Sprint(httpStatus), }) - if err := framer.WriteHeaders(http2.HeadersFrameParam{ + return framer.WriteHeaders(http2.HeadersFrameParam{ StreamID: sid, BlockFragment: buf.Bytes(), EndStream: true, EndHeaders: true, - }); err != nil { - return err - } - return nil + }) } type httpServer struct { @@ -1821,8 +2028,8 @@ func (s *httpServer) start(t *testing.T, lis net.Listener) { t.Errorf("Error at server-side while reading preface from cleint. Err: %v", err) return } - reader := bufio.NewReaderSize(s.conn, http2IOBufSize) - writer := bufio.NewWriterSize(s.conn, http2IOBufSize) + reader := bufio.NewReaderSize(s.conn, defaultWriteBufSize) + writer := bufio.NewWriterSize(s.conn, defaultReadBufSize) framer := http2.NewFramer(writer, reader) if err = framer.WriteSettingsAck(); err != nil { t.Errorf("Error at server-side while sending Settings ack. Err: %v", err) @@ -1887,8 +2094,10 @@ func setUpHTTPStatusTest(t *testing.T, httpStatus int, wh writeHeaders) (stream wh: wh, } server.start(t, lis) - client, err = newHTTP2Client(context.Background(), TargetInfo{Addr: lis.Addr().String()}, ConnectOptions{}) + connectCtx, cancel := context.WithDeadline(context.Background(), time.Now().Add(2*time.Second)) + client, err = newHTTP2Client(connectCtx, context.Background(), TargetInfo{Addr: lis.Addr().String()}, ConnectOptions{}, func() {}) if err != nil { + cancel() // Do not cancel in success path. t.Fatalf("Error creating client. Err: %v", err) } stream, err = client.NewStream(context.Background(), &CallHdr{Method: "bogus/method", Flush: true}) @@ -1988,3 +2197,73 @@ func TestReadGivesSameErrorAfterAnyErrorOccurs(t *testing.T) { } } } + +func TestPingPong1B(t *testing.T) { + runPingPongTest(t, 1) +} + +func TestPingPong1KB(t *testing.T) { + runPingPongTest(t, 1024) +} + +func TestPingPong64KB(t *testing.T) { + runPingPongTest(t, 65536) +} + +func TestPingPong1MB(t *testing.T) { + runPingPongTest(t, 1048576) +} + +//This is a stress-test of flow control logic. +func runPingPongTest(t *testing.T, msgSize int) { + server, client := setUp(t, 0, 0, pingpong) + defer server.stop() + defer client.Close() + waitWhileTrue(t, func() (bool, error) { + server.mu.Lock() + defer server.mu.Unlock() + if len(server.conns) == 0 { + return true, fmt.Errorf("timed out while waiting for server transport to be created") + } + return false, nil + }) + ct := client.(*http2Client) + stream, err := client.NewStream(context.Background(), &CallHdr{}) + if err != nil { + t.Fatalf("Failed to create stream. Err: %v", err) + } + msg := make([]byte, msgSize) + outgoingHeader := make([]byte, 5) + outgoingHeader[0] = byte(0) + binary.BigEndian.PutUint32(outgoingHeader[1:], uint32(msgSize)) + opts := &Options{} + incomingHeader := make([]byte, 5) + done := make(chan struct{}) + go func() { + timer := time.NewTimer(time.Second * 5) + <-timer.C + close(done) + }() + for { + select { + case <-done: + ct.Write(stream, nil, nil, &Options{Last: true}) + if _, err := stream.Read(incomingHeader); err != io.EOF { + t.Fatalf("Client expected EOF from the server. Got: %v", err) + } + return + default: + if err := ct.Write(stream, outgoingHeader, msg, opts); err != nil { + t.Fatalf("Error on client while writing message. Err: %v", err) + } + if _, err := stream.Read(incomingHeader); err != nil { + t.Fatalf("Error on client while reading data header. Err: %v", err) + } + sz := binary.BigEndian.Uint32(incomingHeader[1:]) + recvMsg := make([]byte, int(sz)) + if _, err := stream.Read(recvMsg); err != nil { + t.Fatalf("Error on client while reading data. Err: %v", err) + } + } + } +} diff --git a/vendor/google.golang.org/grpc/vet.sh b/vendor/google.golang.org/grpc/vet.sh new file mode 100755 index 0000000..2ad94fe --- /dev/null +++ b/vendor/google.golang.org/grpc/vet.sh @@ -0,0 +1,84 @@ +#!/bin/bash + +set -ex # Exit on error; debugging enabled. +set -o pipefail # Fail a pipe if any sub-command fails. + +die() { + echo "$@" >&2 + exit 1 +} + +PATH="$GOPATH/bin:$GOROOT/bin:$PATH" + +# Check proto in manual runs or cron runs. +if [[ "$TRAVIS" != "true" || "$TRAVIS_EVENT_TYPE" = "cron" ]]; then + check_proto="true" +fi + +if [ "$1" = "-install" ]; then + go get -d \ + google.golang.org/grpc/... + go get -u \ + github.com/golang/lint/golint \ + golang.org/x/tools/cmd/goimports \ + honnef.co/go/tools/cmd/staticcheck \ + github.com/client9/misspell/cmd/misspell \ + github.com/golang/protobuf/protoc-gen-go + if [[ "$check_proto" = "true" ]]; then + if [[ "$TRAVIS" = "true" ]]; then + PROTOBUF_VERSION=3.3.0 + PROTOC_FILENAME=protoc-${PROTOBUF_VERSION}-linux-x86_64.zip + pushd /home/travis + wget https://github.com/google/protobuf/releases/download/v${PROTOBUF_VERSION}/${PROTOC_FILENAME} + unzip ${PROTOC_FILENAME} + bin/protoc --version + popd + elif ! which protoc > /dev/null; then + die "Please install protoc into your path" + fi + fi + exit 0 +elif [[ "$#" -ne 0 ]]; then + die "Unknown argument(s): $*" +fi + +# TODO: Remove this check and the mangling below once "context" is imported +# directly. +if git status --porcelain | read; then + die "Uncommitted or untracked files found; commit changes first" +fi + +git ls-files "*.go" | xargs grep -L "\(Copyright [0-9]\{4,\} gRPC authors\)\|DO NOT EDIT" 2>&1 | tee /dev/stderr | (! read) +gofmt -s -d -l . 2>&1 | tee /dev/stderr | (! read) +goimports -l . 2>&1 | tee /dev/stderr | (! read) +golint ./... 2>&1 | (grep -vE "(_mock|\.pb)\.go:" || true) | tee /dev/stderr | (! read) + +# Undo any edits made by this script. +cleanup() { + git reset --hard HEAD +} +trap cleanup EXIT + +# Rewrite golang.org/x/net/context -> context imports (see grpc/grpc-go#1484). +# TODO: Remove this mangling once "context" is imported directly (grpc/grpc-go#711). +git ls-files "*.go" | xargs sed -i 's:"golang.org/x/net/context":"context":' +set +o pipefail +# TODO: Stop filtering pb.go files once golang/protobuf#214 is fixed. +go tool vet -all . 2>&1 | grep -vE '(clientconn|transport\/transport_test).go:.*cancel (function|var)' | grep -vF '.pb.go:' | tee /dev/stderr | (! read) +set -o pipefail +git reset --hard HEAD + +if [[ "$check_proto" = "true" ]]; then + PATH="/home/travis/bin:$PATH" make proto && \ + git status --porcelain 2>&1 | (! read) || \ + (git status; git --no-pager diff; exit 1) +fi + +# TODO(menghanl): fix errors in transport_test. +staticcheck -ignore ' +google.golang.org/grpc/transport/transport_test.go:SA2002 +google.golang.org/grpc/benchmark/benchmain/main.go:SA1019 +google.golang.org/grpc/stats/stats_test.go:SA1019 +google.golang.org/grpc/test/end2end_test.go:SA1019 +' ./... +misspell -error . diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/.travis.yml b/vendor/gopkg.in/alecthomas/kingpin.v2/.travis.yml new file mode 100644 index 0000000..e564b74 --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/.travis.yml @@ -0,0 +1,4 @@ +sudo: false +language: go +install: go get -t -v ./... +go: 1.2 diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/COPYING b/vendor/gopkg.in/alecthomas/kingpin.v2/COPYING new file mode 100644 index 0000000..2993ec0 --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/COPYING @@ -0,0 +1,19 @@ +Copyright (C) 2014 Alec Thomas + +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/gopkg.in/alecthomas/kingpin.v2/README.md b/vendor/gopkg.in/alecthomas/kingpin.v2/README.md new file mode 100644 index 0000000..498704c --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/README.md @@ -0,0 +1,674 @@ +# Kingpin - A Go (golang) command line and flag parser +[![](https://godoc.org/github.com/alecthomas/kingpin?status.svg)](http://godoc.org/github.com/alecthomas/kingpin) [![Build Status](https://travis-ci.org/alecthomas/kingpin.svg?branch=master)](https://travis-ci.org/alecthomas/kingpin) [![Gitter chat](https://badges.gitter.im/alecthomas.png)](https://gitter.im/alecthomas/Lobby) + + + + + +- [Overview](#overview) +- [Features](#features) +- [User-visible changes between v1 and v2](#user-visible-changes-between-v1-and-v2) + - [Flags can be used at any point after their definition.](#flags-can-be-used-at-any-point-after-their-definition) + - [Short flags can be combined with their parameters](#short-flags-can-be-combined-with-their-parameters) +- [API changes between v1 and v2](#api-changes-between-v1-and-v2) +- [Versions](#versions) + - [V2 is the current stable version](#v2-is-the-current-stable-version) + - [V1 is the OLD stable version](#v1-is-the-old-stable-version) +- [Change History](#change-history) +- [Examples](#examples) + - [Simple Example](#simple-example) + - [Complex Example](#complex-example) +- [Reference Documentation](#reference-documentation) + - [Displaying errors and usage information](#displaying-errors-and-usage-information) + - [Sub-commands](#sub-commands) + - [Custom Parsers](#custom-parsers) + - [Repeatable flags](#repeatable-flags) + - [Boolean Values](#boolean-values) + - [Default Values](#default-values) + - [Place-holders in Help](#place-holders-in-help) + - [Consuming all remaining arguments](#consuming-all-remaining-arguments) + - [Bash/ZSH Shell Completion](#bashzsh-shell-completion) + - [Supporting -h for help](#supporting--h-for-help) + - [Custom help](#custom-help) + + + +## Overview + +Kingpin is a [fluent-style](http://en.wikipedia.org/wiki/Fluent_interface), +type-safe command-line parser. It supports flags, nested commands, and +positional arguments. + +Install it with: + + $ go get gopkg.in/alecthomas/kingpin.v2 + +It looks like this: + +```go +var ( + verbose = kingpin.Flag("verbose", "Verbose mode.").Short('v').Bool() + name = kingpin.Arg("name", "Name of user.").Required().String() +) + +func main() { + kingpin.Parse() + fmt.Printf("%v, %s\n", *verbose, *name) +} +``` + +More [examples](https://github.com/alecthomas/kingpin/tree/master/_examples) are available. + +Second to parsing, providing the user with useful help is probably the most +important thing a command-line parser does. Kingpin tries to provide detailed +contextual help if `--help` is encountered at any point in the command line +(excluding after `--`). + +## Features + +- Help output that isn't as ugly as sin. +- Fully [customisable help](#custom-help), via Go templates. +- Parsed, type-safe flags (`kingpin.Flag("f", "help").Int()`) +- Parsed, type-safe positional arguments (`kingpin.Arg("a", "help").Int()`). +- Parsed, type-safe, arbitrarily deep commands (`kingpin.Command("c", "help")`). +- Support for required flags and required positional arguments (`kingpin.Flag("f", "").Required().Int()`). +- Support for arbitrarily nested default commands (`command.Default()`). +- Callbacks per command, flag and argument (`kingpin.Command("c", "").Action(myAction)`). +- POSIX-style short flag combining (`-a -b` -> `-ab`). +- Short-flag+parameter combining (`-a parm` -> `-aparm`). +- Read command-line from files (`@`). +- Automatically generate man pages (`--help-man`). + +## User-visible changes between v1 and v2 + +### Flags can be used at any point after their definition. + +Flags can be specified at any point after their definition, not just +*immediately after their associated command*. From the chat example below, the +following used to be required: + +``` +$ chat --server=chat.server.com:8080 post --image=~/Downloads/owls.jpg pics +``` + +But the following will now work: + +``` +$ chat post --server=chat.server.com:8080 --image=~/Downloads/owls.jpg pics +``` + +### Short flags can be combined with their parameters + +Previously, if a short flag was used, any argument to that flag would have to +be separated by a space. That is no longer the case. + +## API changes between v1 and v2 + +- `ParseWithFileExpansion()` is gone. The new parser directly supports expanding `@`. +- Added `FatalUsage()` and `FatalUsageContext()` for displaying an error + usage and terminating. +- `Dispatch()` renamed to `Action()`. +- Added `ParseContext()` for parsing a command line into its intermediate context form without executing. +- Added `Terminate()` function to override the termination function. +- Added `UsageForContextWithTemplate()` for printing usage via a custom template. +- Added `UsageTemplate()` for overriding the default template to use. Two templates are included: + 1. `DefaultUsageTemplate` - default template. + 2. `CompactUsageTemplate` - compact command template for larger applications. + +## Versions + +Kingpin uses [gopkg.in](https://gopkg.in/alecthomas/kingpin) for versioning. + +The current stable version is [gopkg.in/alecthomas/kingpin.v2](https://gopkg.in/alecthomas/kingpin.v2). The previous version, [gopkg.in/alecthomas/kingpin.v1](https://gopkg.in/alecthomas/kingpin.v1), is deprecated and in maintenance mode. + +### [V2](https://gopkg.in/alecthomas/kingpin.v2) is the current stable version + +Installation: + +```sh +$ go get gopkg.in/alecthomas/kingpin.v2 +``` + +### [V1](https://gopkg.in/alecthomas/kingpin.v1) is the OLD stable version + +Installation: + +```sh +$ go get gopkg.in/alecthomas/kingpin.v1 +``` + +## Change History + +- *2015-09-19* -- Stable v2.1.0 release. + - Added `command.Default()` to specify a default command to use if no other + command matches. This allows for convenient user shortcuts. + - Exposed `HelpFlag` and `VersionFlag` for further customisation. + - `Action()` and `PreAction()` added and both now support an arbitrary + number of callbacks. + - `kingpin.SeparateOptionalFlagsUsageTemplate`. + - `--help-long` and `--help-man` (hidden by default) flags. + - Flags are "interspersed" by default, but can be disabled with `app.Interspersed(false)`. + - Added flags for all simple builtin types (int8, uint16, etc.) and slice variants. + - Use `app.Writer(os.Writer)` to specify the default writer for all output functions. + - Dropped `os.Writer` prefix from all printf-like functions. + +- *2015-05-22* -- Stable v2.0.0 release. + - Initial stable release of v2.0.0. + - Fully supports interspersed flags, commands and arguments. + - Flags can be present at any point after their logical definition. + - Application.Parse() terminates if commands are present and a command is not parsed. + - Dispatch() -> Action(). + - Actions are dispatched after all values are populated. + - Override termination function (defaults to os.Exit). + - Override output stream (defaults to os.Stderr). + - Templatised usage help, with default and compact templates. + - Make error/usage functions more consistent. + - Support argument expansion from files by default (with @). + - Fully public data model is available via .Model(). + - Parser has been completely refactored. + - Parsing and execution has been split into distinct stages. + - Use `go generate` to generate repeated flags. + - Support combined short-flag+argument: -fARG. + +- *2015-01-23* -- Stable v1.3.4 release. + - Support "--" for separating flags from positional arguments. + - Support loading flags from files (ParseWithFileExpansion()). Use @FILE as an argument. + - Add post-app and post-cmd validation hooks. This allows arbitrary validation to be added. + - A bunch of improvements to help usage and formatting. + - Support arbitrarily nested sub-commands. + +- *2014-07-08* -- Stable v1.2.0 release. + - Pass any value through to `Strings()` when final argument. + Allows for values that look like flags to be processed. + - Allow `--help` to be used with commands. + - Support `Hidden()` flags. + - Parser for [units.Base2Bytes](https://github.com/alecthomas/units) + type. Allows for flags like `--ram=512MB` or `--ram=1GB`. + - Add an `Enum()` value, allowing only one of a set of values + to be selected. eg. `Flag(...).Enum("debug", "info", "warning")`. + +- *2014-06-27* -- Stable v1.1.0 release. + - Bug fixes. + - Always return an error (rather than panicing) when misconfigured. + - `OpenFile(flag, perm)` value type added, for finer control over opening files. + - Significantly improved usage formatting. + +- *2014-06-19* -- Stable v1.0.0 release. + - Support [cumulative positional](#consuming-all-remaining-arguments) arguments. + - Return error rather than panic when there are fatal errors not caught by + the type system. eg. when a default value is invalid. + - Use gokpg.in. + +- *2014-06-10* -- Place-holder streamlining. + - Renamed `MetaVar` to `PlaceHolder`. + - Removed `MetaVarFromDefault`. Kingpin now uses [heuristics](#place-holders-in-help) + to determine what to display. + +## Examples + +### Simple Example + +Kingpin can be used for simple flag+arg applications like so: + +``` +$ ping --help +usage: ping [] [] + +Flags: + --debug Enable debug mode. + --help Show help. + -t, --timeout=5s Timeout waiting for ping. + +Args: + IP address to ping. + [] Number of packets to send +$ ping 1.2.3.4 5 +Would ping: 1.2.3.4 with timeout 5s and count 5 +``` + +From the following source: + +```go +package main + +import ( + "fmt" + + "gopkg.in/alecthomas/kingpin.v2" +) + +var ( + debug = kingpin.Flag("debug", "Enable debug mode.").Bool() + timeout = kingpin.Flag("timeout", "Timeout waiting for ping.").Default("5s").OverrideDefaultFromEnvar("PING_TIMEOUT").Short('t').Duration() + ip = kingpin.Arg("ip", "IP address to ping.").Required().IP() + count = kingpin.Arg("count", "Number of packets to send").Int() +) + +func main() { + kingpin.Version("0.0.1") + kingpin.Parse() + fmt.Printf("Would ping: %s with timeout %s and count %d\n", *ip, *timeout, *count) +} +``` + +### Complex Example + +Kingpin can also produce complex command-line applications with global flags, +subcommands, and per-subcommand flags, like this: + +``` +$ chat --help +usage: chat [] [] [ ...] + +A command-line chat application. + +Flags: + --help Show help. + --debug Enable debug mode. + --server=127.0.0.1 Server address. + +Commands: + help [] + Show help for a command. + + register + Register a new user. + + post [] [] + Post a message to a channel. + +$ chat help post +usage: chat [] post [] [] + +Post a message to a channel. + +Flags: + --image=IMAGE Image to post. + +Args: + Channel to post to. + [] Text to post. + +$ chat post --image=~/Downloads/owls.jpg pics +... +``` + +From this code: + +```go +package main + +import ( + "os" + "strings" + "gopkg.in/alecthomas/kingpin.v2" +) + +var ( + app = kingpin.New("chat", "A command-line chat application.") + debug = app.Flag("debug", "Enable debug mode.").Bool() + serverIP = app.Flag("server", "Server address.").Default("127.0.0.1").IP() + + register = app.Command("register", "Register a new user.") + registerNick = register.Arg("nick", "Nickname for user.").Required().String() + registerName = register.Arg("name", "Name of user.").Required().String() + + post = app.Command("post", "Post a message to a channel.") + postImage = post.Flag("image", "Image to post.").File() + postChannel = post.Arg("channel", "Channel to post to.").Required().String() + postText = post.Arg("text", "Text to post.").Strings() +) + +func main() { + switch kingpin.MustParse(app.Parse(os.Args[1:])) { + // Register user + case register.FullCommand(): + println(*registerNick) + + // Post message + case post.FullCommand(): + if *postImage != nil { + } + text := strings.Join(*postText, " ") + println("Post:", text) + } +} +``` + +## Reference Documentation + +### Displaying errors and usage information + +Kingpin exports a set of functions to provide consistent errors and usage +information to the user. + +Error messages look something like this: + + : error: + +The functions on `Application` are: + +Function | Purpose +---------|-------------- +`Errorf(format, args)` | Display a printf formatted error to the user. +`Fatalf(format, args)` | As with Errorf, but also call the termination handler. +`FatalUsage(format, args)` | As with Fatalf, but also print contextual usage information. +`FatalUsageContext(context, format, args)` | As with Fatalf, but also print contextual usage information from a `ParseContext`. +`FatalIfError(err, format, args)` | Conditionally print an error prefixed with format+args, then call the termination handler + +There are equivalent global functions in the kingpin namespace for the default +`kingpin.CommandLine` instance. + +### Sub-commands + +Kingpin supports nested sub-commands, with separate flag and positional +arguments per sub-command. Note that positional arguments may only occur after +sub-commands. + +For example: + +```go +var ( + deleteCommand = kingpin.Command("delete", "Delete an object.") + deleteUserCommand = deleteCommand.Command("user", "Delete a user.") + deleteUserUIDFlag = deleteUserCommand.Flag("uid", "Delete user by UID rather than username.") + deleteUserUsername = deleteUserCommand.Arg("username", "Username to delete.") + deletePostCommand = deleteCommand.Command("post", "Delete a post.") +) + +func main() { + switch kingpin.Parse() { + case "delete user": + case "delete post": + } +} +``` + +### Custom Parsers + +Kingpin supports both flag and positional argument parsers for converting to +Go types. For example, some included parsers are `Int()`, `Float()`, +`Duration()` and `ExistingFile()` (see [parsers.go](./parsers.go) for a complete list of included parsers). + +Parsers conform to Go's [`flag.Value`](http://godoc.org/flag#Value) +interface, so any existing implementations will work. + +For example, a parser for accumulating HTTP header values might look like this: + +```go +type HTTPHeaderValue http.Header + +func (h *HTTPHeaderValue) Set(value string) error { + parts := strings.SplitN(value, ":", 2) + if len(parts) != 2 { + return fmt.Errorf("expected HEADER:VALUE got '%s'", value) + } + (*http.Header)(h).Add(parts[0], parts[1]) + return nil +} + +func (h *HTTPHeaderValue) String() string { + return "" +} +``` + +As a convenience, I would recommend something like this: + +```go +func HTTPHeader(s Settings) (target *http.Header) { + target = &http.Header{} + s.SetValue((*HTTPHeaderValue)(target)) + return +} +``` + +You would use it like so: + +```go +headers = HTTPHeader(kingpin.Flag("header", "Add a HTTP header to the request.").Short('H')) +``` + +### Repeatable flags + +Depending on the `Value` they hold, some flags may be repeated. The +`IsCumulative() bool` function on `Value` tells if it's safe to call `Set()` +multiple times or if an error should be raised if several values are passed. + +The built-in `Value`s returning slices and maps, as well as `Counter` are +examples of `Value`s that make a flag repeatable. + +### Boolean values + +Boolean values are uniquely managed by Kingpin. Each boolean flag will have a negative complement: +`--` and `--no-`. + +### Default Values + +The default value is the zero value for a type. This can be overridden with +the `Default(value...)` function on flags and arguments. This function accepts +one or several strings, which are parsed by the value itself, so they *must* +be compliant with the format expected. + +### Place-holders in Help + +The place-holder value for a flag is the value used in the help to describe +the value of a non-boolean flag. + +The value provided to PlaceHolder() is used if provided, then the value +provided by Default() if provided, then finally the capitalised flag name is +used. + +Here are some examples of flags with various permutations: + + --name=NAME // Flag(...).String() + --name="Harry" // Flag(...).Default("Harry").String() + --name=FULL-NAME // Flag(...).PlaceHolder("FULL-NAME").Default("Harry").String() + +### Consuming all remaining arguments + +A common command-line idiom is to use all remaining arguments for some +purpose. eg. The following command accepts an arbitrary number of +IP addresses as positional arguments: + + ./cmd ping 10.1.1.1 192.168.1.1 + +Such arguments are similar to [repeatable flags](#repeatable-flags), but for +arguments. Therefore they use the same `IsCumulative() bool` function on the +underlying `Value`, so the built-in `Value`s for which the `Set()` function +can be called several times will consume multiple arguments. + +To implement the above example with a custom `Value`, we might do something +like this: + +```go +type ipList []net.IP + +func (i *ipList) Set(value string) error { + if ip := net.ParseIP(value); ip == nil { + return fmt.Errorf("'%s' is not an IP address", value) + } else { + *i = append(*i, ip) + return nil + } +} + +func (i *ipList) String() string { + return "" +} + +func (i *ipList) IsCumulative() bool { + return true +} + +func IPList(s Settings) (target *[]net.IP) { + target = new([]net.IP) + s.SetValue((*ipList)(target)) + return +} +``` + +And use it like so: + +```go +ips := IPList(kingpin.Arg("ips", "IP addresses to ping.")) +``` + +### Bash/ZSH Shell Completion + +By default, all flags and commands/subcommands generate completions +internally. + +Out of the box, CLI tools using kingpin should be able to take advantage +of completion hinting for flags and commands. By specifying +`--completion-bash` as the first argument, your CLI tool will show +possible subcommands. By ending your argv with `--`, hints for flags +will be shown. + +To allow your end users to take advantage you must package a +`/etc/bash_completion.d` script with your distribution (or the equivalent +for your target platform/shell). An alternative is to instruct your end +user to source a script from their `bash_profile` (or equivalent). + +Fortunately Kingpin makes it easy to generate or source a script for use +with end users shells. `./yourtool --completion-script-bash` and +`./yourtool --completion-script-zsh` will generate these scripts for you. + +**Installation by Package** + +For the best user experience, you should bundle your pre-created +completion script with your CLI tool and install it inside +`/etc/bash_completion.d` (or equivalent). A good suggestion is to add +this as an automated step to your build pipeline, in the implementation +is improved for bug fixed. + +**Installation by `bash_profile`** + +Alternatively, instruct your users to add an additional statement to +their `bash_profile` (or equivalent): + +``` +eval "$(your-cli-tool --completion-script-bash)" +``` + +Or for ZSH + +``` +eval "$(your-cli-tool --completion-script-zsh)" +``` + +#### Additional API +To provide more flexibility, a completion option API has been +exposed for flags to allow user defined completion options, to extend +completions further than just EnumVar/Enum. + + +**Provide Static Options** + +When using an `Enum` or `EnumVar`, users are limited to only the options +given. Maybe we wish to hint possible options to the user, but also +allow them to provide their own custom option. `HintOptions` gives +this functionality to flags. + +``` +app := kingpin.New("completion", "My application with bash completion.") +app.Flag("port", "Provide a port to connect to"). + Required(). + HintOptions("80", "443", "8080"). + IntVar(&c.port) +``` + +**Provide Dynamic Options** +Consider the case that you needed to read a local database or a file to +provide suggestions. You can dynamically generate the options + +``` +func listHosts() []string { + // Provide a dynamic list of hosts from a hosts file or otherwise + // for bash completion. In this example we simply return static slice. + + // You could use this functionality to reach into a hosts file to provide + // completion for a list of known hosts. + return []string{"sshhost.example", "webhost.example", "ftphost.example"} +} + +app := kingpin.New("completion", "My application with bash completion.") +app.Flag("flag-1", "").HintAction(listHosts).String() +``` + +**EnumVar/Enum** +When using `Enum` or `EnumVar`, any provided options will be automatically +used for bash autocompletion. However, if you wish to provide a subset or +different options, you can use `HintOptions` or `HintAction` which will override +the default completion options for `Enum`/`EnumVar`. + + +**Examples** +You can see an in depth example of the completion API within +`examples/completion/main.go` + + +### Supporting -h for help + +`kingpin.CommandLine.HelpFlag.Short('h')` + +### Custom help + +Kingpin v2 supports templatised help using the text/template library (actually, [a fork](https://github.com/alecthomas/template)). + +You can specify the template to use with the [Application.UsageTemplate()](http://godoc.org/gopkg.in/alecthomas/kingpin.v2#Application.UsageTemplate) function. + +There are four included templates: `kingpin.DefaultUsageTemplate` is the default, +`kingpin.CompactUsageTemplate` provides a more compact representation for more complex command-line structures, +`kingpin.SeparateOptionalFlagsUsageTemplate` looks like the default template, but splits required +and optional command flags into separate lists, and `kingpin.ManPageTemplate` is used to generate man pages. + +See the above templates for examples of usage, and the the function [UsageForContextWithTemplate()](https://github.com/alecthomas/kingpin/blob/master/usage.go#L198) method for details on the context. + +#### Default help template + +``` +$ go run ./examples/curl/curl.go --help +usage: curl [] [ ...] + +An example implementation of curl. + +Flags: + --help Show help. + -t, --timeout=5s Set connection timeout. + -H, --headers=HEADER=VALUE + Add HTTP headers to the request. + +Commands: + help [...] + Show help. + + get url + Retrieve a URL. + + get file + Retrieve a file. + + post [] + POST a resource. +``` + +#### Compact help template + +``` +$ go run ./examples/curl/curl.go --help +usage: curl [] [ ...] + +An example implementation of curl. + +Flags: + --help Show help. + -t, --timeout=5s Set connection timeout. + -H, --headers=HEADER=VALUE + Add HTTP headers to the request. + +Commands: + help [...] + get [] + url + file + post [] +``` diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/_examples/chat1/main.go b/vendor/gopkg.in/alecthomas/kingpin.v2/_examples/chat1/main.go new file mode 100644 index 0000000..2a233fc --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/_examples/chat1/main.go @@ -0,0 +1,20 @@ +package main + +import ( + "fmt" + + "gopkg.in/alecthomas/kingpin.v2" +) + +var ( + debug = kingpin.Flag("debug", "Enable debug mode.").Bool() + timeout = kingpin.Flag("timeout", "Timeout waiting for ping.").Default("5s").OverrideDefaultFromEnvar("PING_TIMEOUT").Short('t').Duration() + ip = kingpin.Arg("ip", "IP address to ping.").Required().IP() + count = kingpin.Arg("count", "Number of packets to send").Int() +) + +func main() { + kingpin.Version("0.0.1") + kingpin.Parse() + fmt.Printf("Would ping: %s with timeout %s and count %d", *ip, *timeout, *count) +} diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/_examples/chat2/main.go b/vendor/gopkg.in/alecthomas/kingpin.v2/_examples/chat2/main.go new file mode 100644 index 0000000..83891a7 --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/_examples/chat2/main.go @@ -0,0 +1,38 @@ +package main + +import ( + "os" + "strings" + + "gopkg.in/alecthomas/kingpin.v2" +) + +var ( + app = kingpin.New("chat", "A command-line chat application.") + debug = app.Flag("debug", "Enable debug mode.").Bool() + serverIP = app.Flag("server", "Server address.").Default("127.0.0.1").IP() + + register = app.Command("register", "Register a new user.") + registerNick = register.Arg("nick", "Nickname for user.").Required().String() + registerName = register.Arg("name", "Name of user.").Required().String() + + post = app.Command("post", "Post a message to a channel.") + postImage = post.Flag("image", "Image to post.").File() + postChannel = post.Arg("channel", "Channel to post to.").Required().String() + postText = post.Arg("text", "Text to post.").Strings() +) + +func main() { + switch kingpin.MustParse(app.Parse(os.Args[1:])) { + // Register user + case register.FullCommand(): + println(*registerNick) + + // Post message + case post.FullCommand(): + if *postImage != nil { + } + text := strings.Join(*postText, " ") + println("Post:", text) + } +} diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/_examples/completion/main.go b/vendor/gopkg.in/alecthomas/kingpin.v2/_examples/completion/main.go new file mode 100644 index 0000000..0bbabe3 --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/_examples/completion/main.go @@ -0,0 +1,96 @@ +package main + +import ( + "fmt" + "os" + + "gopkg.in/alecthomas/kingpin.v2" +) + +func listHosts() []string { + // Provide a dynamic list of hosts from a hosts file or otherwise + // for bash completion. In this example we simply return static slice. + + // You could use this functionality to reach into a hosts file to provide + // completion for a list of known hosts. + return []string{"sshhost.example", "webhost.example", "ftphost.example"} +} + +type NetcatCommand struct { + hostName string + port int + format string +} + +func (n *NetcatCommand) run(c *kingpin.ParseContext) error { + fmt.Printf("Would have run netcat to hostname %v, port %d, and output format %v\n", n.hostName, n.port, n.format) + return nil +} + +func configureNetcatCommand(app *kingpin.Application) { + c := &NetcatCommand{} + nc := app.Command("nc", "Connect to a Host").Action(c.run) + nc.Flag("nop-flag", "Example of a flag with no options").Bool() + + // You can provide hint options using a function to generate them + nc.Flag("host", "Provide a hostname to nc"). + Required(). + HintAction(listHosts). + StringVar(&c.hostName) + + // You can provide hint options statically + nc.Flag("port", "Provide a port to connect to"). + Required(). + HintOptions("80", "443", "8080"). + IntVar(&c.port) + + // Enum/EnumVar options will be turned into completion options automatically + nc.Flag("format", "Define the output format"). + Default("raw"). + EnumVar(&c.format, "raw", "json") + + // You can combine HintOptions with HintAction too + nc.Flag("host-with-multi", "Define a hostname"). + HintAction(listHosts). + HintOptions("myhost.com"). + String() + + // And combine with themselves + nc.Flag("host-with-multi-options", "Define a hostname"). + HintOptions("myhost.com"). + HintOptions("myhost2.com"). + String() + + // If you specify HintOptions/HintActions for Enum/EnumVar, the options + // provided for Enum/EnumVar will be overridden. + nc.Flag("format-with-override-1", "Define a format"). + HintAction(listHosts). + Enum("option1", "option2") + + nc.Flag("format-with-override-2", "Define a format"). + HintOptions("myhost.com", "myhost2.com"). + Enum("option1", "option2") +} + +func addSubCommand(app *kingpin.Application, name string, description string) { + c := app.Command(name, description).Action(func(c *kingpin.ParseContext) error { + fmt.Printf("Would have run command %s.\n", name) + return nil + }) + c.Flag("nop-flag", "Example of a flag with no options").Bool() +} + +func main() { + app := kingpin.New("completion", "My application with bash completion.") + app.Flag("flag-1", "").String() + app.Flag("flag-2", "").HintOptions("opt1", "opt2").String() + + configureNetcatCommand(app) + + // Add some additional top level commands + addSubCommand(app, "ls", "Additional top level command to show command completion") + addSubCommand(app, "ping", "Additional top level command to show command completion") + addSubCommand(app, "nmap", "Additional top level command to show command completion") + + kingpin.MustParse(app.Parse(os.Args[1:])) +} diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/_examples/curl/main.go b/vendor/gopkg.in/alecthomas/kingpin.v2/_examples/curl/main.go new file mode 100644 index 0000000..a877e7b --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/_examples/curl/main.go @@ -0,0 +1,105 @@ +// A curl-like HTTP command-line client. +package main + +import ( + "errors" + "fmt" + "io" + "net/http" + "os" + "strings" + + "gopkg.in/alecthomas/kingpin.v2" +) + +var ( + timeout = kingpin.Flag("timeout", "Set connection timeout.").Short('t').Default("5s").Duration() + headers = HTTPHeader(kingpin.Flag("headers", "Add HTTP headers to the request.").Short('H').PlaceHolder("HEADER=VALUE")) + + get = kingpin.Command("get", "GET a resource.").Default() + getFlag = get.Flag("test", "Test flag").Bool() + getURL = get.Command("url", "Retrieve a URL.").Default() + getURLURL = getURL.Arg("url", "URL to GET.").Required().URL() + getFile = get.Command("file", "Retrieve a file.") + getFileFile = getFile.Arg("file", "File to retrieve.").Required().ExistingFile() + + post = kingpin.Command("post", "POST a resource.") + postData = post.Flag("data", "Key-value data to POST").Short('d').PlaceHolder("KEY:VALUE").StringMap() + postBinaryFile = post.Flag("data-binary", "File with binary data to POST.").File() + postURL = post.Arg("url", "URL to POST to.").Required().URL() +) + +type HTTPHeaderValue http.Header + +func (h HTTPHeaderValue) Set(value string) error { + parts := strings.SplitN(value, "=", 2) + if len(parts) != 2 { + return fmt.Errorf("expected HEADER=VALUE got '%s'", value) + } + (http.Header)(h).Add(parts[0], parts[1]) + return nil +} + +func (h HTTPHeaderValue) String() string { + return "" +} + +func HTTPHeader(s kingpin.Settings) (target *http.Header) { + target = &http.Header{} + s.SetValue((*HTTPHeaderValue)(target)) + return +} + +func applyRequest(req *http.Request) error { + req.Header = *headers + resp, err := http.DefaultClient.Do(req) + if err != nil { + return err + } + defer resp.Body.Close() + if resp.StatusCode < 200 || resp.StatusCode > 299 { + return fmt.Errorf("HTTP request failed: %s", resp.Status) + } + _, err = io.Copy(os.Stdout, resp.Body) + return err +} + +func apply(method string, url string) error { + req, err := http.NewRequest(method, url, nil) + if err != nil { + return err + } + return applyRequest(req) +} + +func applyPOST() error { + req, err := http.NewRequest("POST", (*postURL).String(), nil) + if err != nil { + return err + } + if len(*postData) > 0 { + for key, value := range *postData { + req.Form.Set(key, value) + } + } else if postBinaryFile != nil { + if headers.Get("Content-Type") != "" { + headers.Set("Content-Type", "application/octet-stream") + } + req.Body = *postBinaryFile + } else { + return errors.New("--data or --data-binary must be provided to POST") + } + return applyRequest(req) +} + +func main() { + kingpin.UsageTemplate(kingpin.CompactUsageTemplate).Version("1.0").Author("Alec Thomas") + kingpin.CommandLine.Help = "An example implementation of curl." + switch kingpin.Parse() { + case "get url": + kingpin.FatalIfError(apply("GET", (*getURLURL).String()), "GET failed") + + case "post": + kingpin.FatalIfError(applyPOST(), "POST failed") + } +} diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/_examples/modular/main.go b/vendor/gopkg.in/alecthomas/kingpin.v2/_examples/modular/main.go new file mode 100644 index 0000000..34cfa0b --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/_examples/modular/main.go @@ -0,0 +1,30 @@ +package main + +import ( + "fmt" + "os" + + "gopkg.in/alecthomas/kingpin.v2" +) + +// Context for "ls" command +type LsCommand struct { + All bool +} + +func (l *LsCommand) run(c *kingpin.ParseContext) error { + fmt.Printf("all=%v\n", l.All) + return nil +} + +func configureLsCommand(app *kingpin.Application) { + c := &LsCommand{} + ls := app.Command("ls", "List files.").Action(c.run) + ls.Flag("all", "List all files.").Short('a').BoolVar(&c.All) +} + +func main() { + app := kingpin.New("modular", "My modular application.") + configureLsCommand(app) + kingpin.MustParse(app.Parse(os.Args[1:])) +} diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/_examples/ping/main.go b/vendor/gopkg.in/alecthomas/kingpin.v2/_examples/ping/main.go new file mode 100644 index 0000000..41ea263 --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/_examples/ping/main.go @@ -0,0 +1,20 @@ +package main + +import ( + "fmt" + + "gopkg.in/alecthomas/kingpin.v2" +) + +var ( + debug = kingpin.Flag("debug", "Enable debug mode.").Bool() + timeout = kingpin.Flag("timeout", "Timeout waiting for ping.").OverrideDefaultFromEnvar("PING_TIMEOUT").Required().Short('t').Duration() + ip = kingpin.Arg("ip", "IP address to ping.").Required().IP() + count = kingpin.Arg("count", "Number of packets to send").Int() +) + +func main() { + kingpin.Version("0.0.1") + kingpin.Parse() + fmt.Printf("Would ping: %s with timeout %s and count %d", *ip, *timeout, *count) +} diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/actions.go b/vendor/gopkg.in/alecthomas/kingpin.v2/actions.go new file mode 100644 index 0000000..72d6cbd --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/actions.go @@ -0,0 +1,42 @@ +package kingpin + +// Action callback executed at various stages after all values are populated. +// The application, commands, arguments and flags all have corresponding +// actions. +type Action func(*ParseContext) error + +type actionMixin struct { + actions []Action + preActions []Action +} + +type actionApplier interface { + applyActions(*ParseContext) error + applyPreActions(*ParseContext) error +} + +func (a *actionMixin) addAction(action Action) { + a.actions = append(a.actions, action) +} + +func (a *actionMixin) addPreAction(action Action) { + a.preActions = append(a.preActions, action) +} + +func (a *actionMixin) applyActions(context *ParseContext) error { + for _, action := range a.actions { + if err := action(context); err != nil { + return err + } + } + return nil +} + +func (a *actionMixin) applyPreActions(context *ParseContext) error { + for _, preAction := range a.preActions { + if err := preAction(context); err != nil { + return err + } + } + return nil +} diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/app.go b/vendor/gopkg.in/alecthomas/kingpin.v2/app.go new file mode 100644 index 0000000..1a1a5ef --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/app.go @@ -0,0 +1,688 @@ +package kingpin + +import ( + "fmt" + "io" + "os" + "regexp" + "strings" +) + +var ( + ErrCommandNotSpecified = fmt.Errorf("command not specified") +) + +var ( + envarTransformRegexp = regexp.MustCompile(`[^a-zA-Z0-9_]+`) +) + +type ApplicationValidator func(*Application) error + +// An Application contains the definitions of flags, arguments and commands +// for an application. +type Application struct { + cmdMixin + initialized bool + + Name string + Help string + + author string + version string + errorWriter io.Writer // Destination for errors. + usageWriter io.Writer // Destination for usage + usageTemplate string + validator ApplicationValidator + terminate func(status int) // See Terminate() + noInterspersed bool // can flags be interspersed with args (or must they come first) + defaultEnvars bool + completion bool + + // Help flag. Exposed for user customisation. + HelpFlag *FlagClause + // Help command. Exposed for user customisation. May be nil. + HelpCommand *CmdClause + // Version flag. Exposed for user customisation. May be nil. + VersionFlag *FlagClause +} + +// New creates a new Kingpin application instance. +func New(name, help string) *Application { + a := &Application{ + Name: name, + Help: help, + errorWriter: os.Stderr, // Left for backwards compatibility purposes. + usageWriter: os.Stderr, + usageTemplate: DefaultUsageTemplate, + terminate: os.Exit, + } + a.flagGroup = newFlagGroup() + a.argGroup = newArgGroup() + a.cmdGroup = newCmdGroup(a) + a.HelpFlag = a.Flag("help", "Show context-sensitive help (also try --help-long and --help-man).") + a.HelpFlag.Bool() + a.Flag("help-long", "Generate long help.").Hidden().PreAction(a.generateLongHelp).Bool() + a.Flag("help-man", "Generate a man page.").Hidden().PreAction(a.generateManPage).Bool() + a.Flag("completion-bash", "Output possible completions for the given args.").Hidden().BoolVar(&a.completion) + a.Flag("completion-script-bash", "Generate completion script for bash.").Hidden().PreAction(a.generateBashCompletionScript).Bool() + a.Flag("completion-script-zsh", "Generate completion script for ZSH.").Hidden().PreAction(a.generateZSHCompletionScript).Bool() + + return a +} + +func (a *Application) generateLongHelp(c *ParseContext) error { + a.Writer(os.Stdout) + if err := a.UsageForContextWithTemplate(c, 2, LongHelpTemplate); err != nil { + return err + } + a.terminate(0) + return nil +} + +func (a *Application) generateManPage(c *ParseContext) error { + a.Writer(os.Stdout) + if err := a.UsageForContextWithTemplate(c, 2, ManPageTemplate); err != nil { + return err + } + a.terminate(0) + return nil +} + +func (a *Application) generateBashCompletionScript(c *ParseContext) error { + a.Writer(os.Stdout) + if err := a.UsageForContextWithTemplate(c, 2, BashCompletionTemplate); err != nil { + return err + } + a.terminate(0) + return nil +} + +func (a *Application) generateZSHCompletionScript(c *ParseContext) error { + a.Writer(os.Stdout) + if err := a.UsageForContextWithTemplate(c, 2, ZshCompletionTemplate); err != nil { + return err + } + a.terminate(0) + return nil +} + +// DefaultEnvars configures all flags (that do not already have an associated +// envar) to use a default environment variable in the form "_". +// +// For example, if the application is named "foo" and a flag is named "bar- +// waz" the environment variable: "FOO_BAR_WAZ". +func (a *Application) DefaultEnvars() *Application { + a.defaultEnvars = true + return a +} + +// Terminate specifies the termination handler. Defaults to os.Exit(status). +// If nil is passed, a no-op function will be used. +func (a *Application) Terminate(terminate func(int)) *Application { + if terminate == nil { + terminate = func(int) {} + } + a.terminate = terminate + return a +} + +// Writer specifies the writer to use for usage and errors. Defaults to os.Stderr. +// DEPRECATED: See ErrorWriter and UsageWriter. +func (a *Application) Writer(w io.Writer) *Application { + a.errorWriter = w + a.usageWriter = w + return a +} + +// ErrorWriter sets the io.Writer to use for errors. +func (a *Application) ErrorWriter(w io.Writer) *Application { + a.errorWriter = w + return a +} + +// UsageWriter sets the io.Writer to use for errors. +func (a *Application) UsageWriter(w io.Writer) *Application { + a.usageWriter = w + return a +} + +// UsageTemplate specifies the text template to use when displaying usage +// information. The default is UsageTemplate. +func (a *Application) UsageTemplate(template string) *Application { + a.usageTemplate = template + return a +} + +// Validate sets a validation function to run when parsing. +func (a *Application) Validate(validator ApplicationValidator) *Application { + a.validator = validator + return a +} + +// ParseContext parses the given command line and returns the fully populated +// ParseContext. +func (a *Application) ParseContext(args []string) (*ParseContext, error) { + return a.parseContext(false, args) +} + +func (a *Application) parseContext(ignoreDefault bool, args []string) (*ParseContext, error) { + if err := a.init(); err != nil { + return nil, err + } + context := tokenize(args, ignoreDefault) + err := parse(context, a) + return context, err +} + +// Parse parses command-line arguments. It returns the selected command and an +// error. The selected command will be a space separated subcommand, if +// subcommands have been configured. +// +// This will populate all flag and argument values, call all callbacks, and so +// on. +func (a *Application) Parse(args []string) (command string, err error) { + + context, parseErr := a.ParseContext(args) + selected := []string{} + var setValuesErr error + + if context == nil { + // Since we do not throw error immediately, there could be a case + // where a context returns nil. Protect against that. + return "", parseErr + } + + if err = a.setDefaults(context); err != nil { + return "", err + } + + selected, setValuesErr = a.setValues(context) + + if err = a.applyPreActions(context, !a.completion); err != nil { + return "", err + } + + if a.completion { + a.generateBashCompletion(context) + a.terminate(0) + } else { + if parseErr != nil { + return "", parseErr + } + + a.maybeHelp(context) + if !context.EOL() { + return "", fmt.Errorf("unexpected argument '%s'", context.Peek()) + } + + if setValuesErr != nil { + return "", setValuesErr + } + + command, err = a.execute(context, selected) + if err == ErrCommandNotSpecified { + a.writeUsage(context, nil) + } + } + return command, err +} + +func (a *Application) writeUsage(context *ParseContext, err error) { + if err != nil { + a.Errorf("%s", err) + } + if err := a.UsageForContext(context); err != nil { + panic(err) + } + if err != nil { + a.terminate(1) + } else { + a.terminate(0) + } +} + +func (a *Application) maybeHelp(context *ParseContext) { + for _, element := range context.Elements { + if flag, ok := element.Clause.(*FlagClause); ok && flag == a.HelpFlag { + // Re-parse the command-line ignoring defaults, so that help works correctly. + context, _ = a.parseContext(true, context.rawArgs) + a.writeUsage(context, nil) + } + } +} + +// Version adds a --version flag for displaying the application version. +func (a *Application) Version(version string) *Application { + a.version = version + a.VersionFlag = a.Flag("version", "Show application version.").PreAction(func(*ParseContext) error { + fmt.Fprintln(a.usageWriter, version) + a.terminate(0) + return nil + }) + a.VersionFlag.Bool() + return a +} + +// Author sets the author output by some help templates. +func (a *Application) Author(author string) *Application { + a.author = author + return a +} + +// Action callback to call when all values are populated and parsing is +// complete, but before any command, flag or argument actions. +// +// All Action() callbacks are called in the order they are encountered on the +// command line. +func (a *Application) Action(action Action) *Application { + a.addAction(action) + return a +} + +// Action called after parsing completes but before validation and execution. +func (a *Application) PreAction(action Action) *Application { + a.addPreAction(action) + return a +} + +// Command adds a new top-level command. +func (a *Application) Command(name, help string) *CmdClause { + return a.addCommand(name, help) +} + +// Interspersed control if flags can be interspersed with positional arguments +// +// true (the default) means that they can, false means that all the flags must appear before the first positional arguments. +func (a *Application) Interspersed(interspersed bool) *Application { + a.noInterspersed = !interspersed + return a +} + +func (a *Application) defaultEnvarPrefix() string { + if a.defaultEnvars { + return a.Name + } + return "" +} + +func (a *Application) init() error { + if a.initialized { + return nil + } + if a.cmdGroup.have() && a.argGroup.have() { + return fmt.Errorf("can't mix top-level Arg()s with Command()s") + } + + // If we have subcommands, add a help command at the top-level. + if a.cmdGroup.have() { + var command []string + a.HelpCommand = a.Command("help", "Show help.").PreAction(func(context *ParseContext) error { + a.Usage(command) + a.terminate(0) + return nil + }) + a.HelpCommand.Arg("command", "Show help on command.").StringsVar(&command) + // Make help first command. + l := len(a.commandOrder) + a.commandOrder = append(a.commandOrder[l-1:l], a.commandOrder[:l-1]...) + } + + if err := a.flagGroup.init(a.defaultEnvarPrefix()); err != nil { + return err + } + if err := a.cmdGroup.init(); err != nil { + return err + } + if err := a.argGroup.init(); err != nil { + return err + } + for _, cmd := range a.commands { + if err := cmd.init(); err != nil { + return err + } + } + flagGroups := []*flagGroup{a.flagGroup} + for _, cmd := range a.commandOrder { + if err := checkDuplicateFlags(cmd, flagGroups); err != nil { + return err + } + } + a.initialized = true + return nil +} + +// Recursively check commands for duplicate flags. +func checkDuplicateFlags(current *CmdClause, flagGroups []*flagGroup) error { + // Check for duplicates. + for _, flags := range flagGroups { + for _, flag := range current.flagOrder { + if flag.shorthand != 0 { + if _, ok := flags.short[string(flag.shorthand)]; ok { + return fmt.Errorf("duplicate short flag -%c", flag.shorthand) + } + } + if _, ok := flags.long[flag.name]; ok { + return fmt.Errorf("duplicate long flag --%s", flag.name) + } + } + } + flagGroups = append(flagGroups, current.flagGroup) + // Check subcommands. + for _, subcmd := range current.commandOrder { + if err := checkDuplicateFlags(subcmd, flagGroups); err != nil { + return err + } + } + return nil +} + +func (a *Application) execute(context *ParseContext, selected []string) (string, error) { + var err error + + if err = a.validateRequired(context); err != nil { + return "", err + } + + if err = a.applyValidators(context); err != nil { + return "", err + } + + if err = a.applyActions(context); err != nil { + return "", err + } + + command := strings.Join(selected, " ") + if command == "" && a.cmdGroup.have() { + return "", ErrCommandNotSpecified + } + return command, err +} + +func (a *Application) setDefaults(context *ParseContext) error { + flagElements := map[string]*ParseElement{} + for _, element := range context.Elements { + if flag, ok := element.Clause.(*FlagClause); ok { + if flag.name == "help" { + return nil + } + flagElements[flag.name] = element + } + } + + argElements := map[string]*ParseElement{} + for _, element := range context.Elements { + if arg, ok := element.Clause.(*ArgClause); ok { + argElements[arg.name] = element + } + } + + // Check required flags and set defaults. + for _, flag := range context.flags.long { + if flagElements[flag.name] == nil { + if err := flag.setDefault(); err != nil { + return err + } + } + } + + for _, arg := range context.arguments.args { + if argElements[arg.name] == nil { + if err := arg.setDefault(); err != nil { + return err + } + } + } + + return nil +} + +func (a *Application) validateRequired(context *ParseContext) error { + flagElements := map[string]*ParseElement{} + for _, element := range context.Elements { + if flag, ok := element.Clause.(*FlagClause); ok { + flagElements[flag.name] = element + } + } + + argElements := map[string]*ParseElement{} + for _, element := range context.Elements { + if arg, ok := element.Clause.(*ArgClause); ok { + argElements[arg.name] = element + } + } + + // Check required flags and set defaults. + for _, flag := range context.flags.long { + if flagElements[flag.name] == nil { + // Check required flags were provided. + if flag.needsValue() { + return fmt.Errorf("required flag --%s not provided", flag.name) + } + } + } + + for _, arg := range context.arguments.args { + if argElements[arg.name] == nil { + if arg.needsValue() { + return fmt.Errorf("required argument '%s' not provided", arg.name) + } + } + } + return nil +} + +func (a *Application) setValues(context *ParseContext) (selected []string, err error) { + // Set all arg and flag values. + var ( + lastCmd *CmdClause + flagSet = map[string]struct{}{} + ) + for _, element := range context.Elements { + switch clause := element.Clause.(type) { + case *FlagClause: + if _, ok := flagSet[clause.name]; ok { + if v, ok := clause.value.(repeatableFlag); !ok || !v.IsCumulative() { + return nil, fmt.Errorf("flag '%s' cannot be repeated", clause.name) + } + } + if err = clause.value.Set(*element.Value); err != nil { + return + } + flagSet[clause.name] = struct{}{} + + case *ArgClause: + if err = clause.value.Set(*element.Value); err != nil { + return + } + + case *CmdClause: + if clause.validator != nil { + if err = clause.validator(clause); err != nil { + return + } + } + selected = append(selected, clause.name) + lastCmd = clause + } + } + + if lastCmd != nil && len(lastCmd.commands) > 0 { + return nil, fmt.Errorf("must select a subcommand of '%s'", lastCmd.FullCommand()) + } + + return +} + +func (a *Application) applyValidators(context *ParseContext) (err error) { + // Call command validation functions. + for _, element := range context.Elements { + if cmd, ok := element.Clause.(*CmdClause); ok && cmd.validator != nil { + if err = cmd.validator(cmd); err != nil { + return err + } + } + } + + if a.validator != nil { + err = a.validator(a) + } + return err +} + +func (a *Application) applyPreActions(context *ParseContext, dispatch bool) error { + if err := a.actionMixin.applyPreActions(context); err != nil { + return err + } + // Dispatch to actions. + if dispatch { + for _, element := range context.Elements { + if applier, ok := element.Clause.(actionApplier); ok { + if err := applier.applyPreActions(context); err != nil { + return err + } + } + } + } + + return nil +} + +func (a *Application) applyActions(context *ParseContext) error { + if err := a.actionMixin.applyActions(context); err != nil { + return err + } + // Dispatch to actions. + for _, element := range context.Elements { + if applier, ok := element.Clause.(actionApplier); ok { + if err := applier.applyActions(context); err != nil { + return err + } + } + } + return nil +} + +// Errorf prints an error message to w in the format ": error: ". +func (a *Application) Errorf(format string, args ...interface{}) { + fmt.Fprintf(a.errorWriter, a.Name+": error: "+format+"\n", args...) +} + +// Fatalf writes a formatted error to w then terminates with exit status 1. +func (a *Application) Fatalf(format string, args ...interface{}) { + a.Errorf(format, args...) + a.terminate(1) +} + +// FatalUsage prints an error message followed by usage information, then +// exits with a non-zero status. +func (a *Application) FatalUsage(format string, args ...interface{}) { + a.Errorf(format, args...) + // Force usage to go to error output. + a.usageWriter = a.errorWriter + a.Usage([]string{}) + a.terminate(1) +} + +// FatalUsageContext writes a printf formatted error message to w, then usage +// information for the given ParseContext, before exiting. +func (a *Application) FatalUsageContext(context *ParseContext, format string, args ...interface{}) { + a.Errorf(format, args...) + if err := a.UsageForContext(context); err != nil { + panic(err) + } + a.terminate(1) +} + +// FatalIfError prints an error and exits if err is not nil. The error is printed +// with the given formatted string, if any. +func (a *Application) FatalIfError(err error, format string, args ...interface{}) { + if err != nil { + prefix := "" + if format != "" { + prefix = fmt.Sprintf(format, args...) + ": " + } + a.Errorf(prefix+"%s", err) + a.terminate(1) + } +} + +func (a *Application) completionOptions(context *ParseContext) []string { + args := context.rawArgs + + var ( + currArg string + prevArg string + target cmdMixin + ) + + numArgs := len(args) + if numArgs > 1 { + args = args[1:] + currArg = args[len(args)-1] + } + if numArgs > 2 { + prevArg = args[len(args)-2] + } + + target = a.cmdMixin + if context.SelectedCommand != nil { + // A subcommand was in use. We will use it as the target + target = context.SelectedCommand.cmdMixin + } + + if (currArg != "" && strings.HasPrefix(currArg, "--")) || strings.HasPrefix(prevArg, "--") { + // Perform completion for A flag. The last/current argument started with "-" + var ( + flagName string // The name of a flag if given (could be half complete) + flagValue string // The value assigned to a flag (if given) (could be half complete) + ) + + if strings.HasPrefix(prevArg, "--") && !strings.HasPrefix(currArg, "--") { + // Matches: ./myApp --flag value + // Wont Match: ./myApp --flag -- + flagName = prevArg[2:] // Strip the "--" + flagValue = currArg + } else if strings.HasPrefix(currArg, "--") { + // Matches: ./myApp --flag -- + // Matches: ./myApp --flag somevalue -- + // Matches: ./myApp -- + flagName = currArg[2:] // Strip the "--" + } + + options, flagMatched, valueMatched := target.FlagCompletion(flagName, flagValue) + if valueMatched { + // Value Matched. Show cmdCompletions + return target.CmdCompletion(context) + } + + // Add top level flags if we're not at the top level and no match was found. + if context.SelectedCommand != nil && !flagMatched { + topOptions, topFlagMatched, topValueMatched := a.FlagCompletion(flagName, flagValue) + if topValueMatched { + // Value Matched. Back to cmdCompletions + return target.CmdCompletion(context) + } + + if topFlagMatched { + // Top level had a flag which matched the input. Return it's options. + options = topOptions + } else { + // Add top level flags + options = append(options, topOptions...) + } + } + return options + } + + // Perform completion for sub commands and arguments. + return target.CmdCompletion(context) +} + +func (a *Application) generateBashCompletion(context *ParseContext) { + options := a.completionOptions(context) + fmt.Printf("%s", strings.Join(options, "\n")) +} + +func envarTransform(name string) string { + return strings.ToUpper(envarTransformRegexp.ReplaceAllString(name, "_")) +} diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/app_test.go b/vendor/gopkg.in/alecthomas/kingpin.v2/app_test.go new file mode 100644 index 0000000..b9083a6 --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/app_test.go @@ -0,0 +1,404 @@ +package kingpin + +import ( + "io/ioutil" + + "github.com/stretchr/testify/assert" + + "sort" + "strings" + "testing" + "time" +) + +func newTestApp() *Application { + return New("test", "").Terminate(nil) +} + +func TestCommander(t *testing.T) { + c := newTestApp() + ping := c.Command("ping", "Ping an IP address.") + pingTTL := ping.Flag("ttl", "TTL for ICMP packets").Short('t').Default("5s").Duration() + + selected, err := c.Parse([]string{"ping"}) + assert.NoError(t, err) + assert.Equal(t, "ping", selected) + assert.Equal(t, 5*time.Second, *pingTTL) + + selected, err = c.Parse([]string{"ping", "--ttl=10s"}) + assert.NoError(t, err) + assert.Equal(t, "ping", selected) + assert.Equal(t, 10*time.Second, *pingTTL) +} + +func TestRequiredFlags(t *testing.T) { + c := newTestApp() + c.Flag("a", "a").String() + c.Flag("b", "b").Required().String() + + _, err := c.Parse([]string{"--a=foo"}) + assert.Error(t, err) + _, err = c.Parse([]string{"--b=foo"}) + assert.NoError(t, err) +} + +func TestRepeatableFlags(t *testing.T) { + c := newTestApp() + c.Flag("a", "a").String() + c.Flag("b", "b").Strings() + _, err := c.Parse([]string{"--a=foo", "--a=bar"}) + assert.Error(t, err) + _, err = c.Parse([]string{"--b=foo", "--b=bar"}) + assert.NoError(t, err) +} + +func TestInvalidDefaultFlagValueErrors(t *testing.T) { + c := newTestApp() + c.Flag("foo", "foo").Default("a").Int() + _, err := c.Parse([]string{}) + assert.Error(t, err) +} + +func TestInvalidDefaultArgValueErrors(t *testing.T) { + c := newTestApp() + cmd := c.Command("cmd", "cmd") + cmd.Arg("arg", "arg").Default("one").Int() + _, err := c.Parse([]string{"cmd"}) + assert.Error(t, err) +} + +func TestArgsRequiredAfterNonRequiredErrors(t *testing.T) { + c := newTestApp() + cmd := c.Command("cmd", "") + cmd.Arg("a", "a").String() + cmd.Arg("b", "b").Required().String() + _, err := c.Parse([]string{"cmd"}) + assert.Error(t, err) +} + +func TestArgsMultipleRequiredThenNonRequired(t *testing.T) { + c := newTestApp().Writer(ioutil.Discard) + cmd := c.Command("cmd", "") + cmd.Arg("a", "a").Required().String() + cmd.Arg("b", "b").Required().String() + cmd.Arg("c", "c").String() + cmd.Arg("d", "d").String() + _, err := c.Parse([]string{"cmd", "a", "b"}) + assert.NoError(t, err) + _, err = c.Parse([]string{}) + assert.Error(t, err) +} + +func TestDispatchCallbackIsCalled(t *testing.T) { + dispatched := false + c := newTestApp() + c.Command("cmd", "").Action(func(*ParseContext) error { + dispatched = true + return nil + }) + + _, err := c.Parse([]string{"cmd"}) + assert.NoError(t, err) + assert.True(t, dispatched) +} + +func TestTopLevelArgWorks(t *testing.T) { + c := newTestApp() + s := c.Arg("arg", "help").String() + _, err := c.Parse([]string{"foo"}) + assert.NoError(t, err) + assert.Equal(t, "foo", *s) +} + +func TestTopLevelArgCantBeUsedWithCommands(t *testing.T) { + c := newTestApp() + c.Arg("arg", "help").String() + c.Command("cmd", "help") + _, err := c.Parse([]string{}) + assert.Error(t, err) +} + +func TestTooManyArgs(t *testing.T) { + a := newTestApp() + a.Arg("a", "").String() + _, err := a.Parse([]string{"a", "b"}) + assert.Error(t, err) +} + +func TestTooManyArgsAfterCommand(t *testing.T) { + a := newTestApp() + a.Command("a", "") + assert.NoError(t, a.init()) + _, err := a.Parse([]string{"a", "b"}) + assert.Error(t, err) +} + +func TestArgsLooksLikeFlagsWithConsumeRemainder(t *testing.T) { + a := newTestApp() + a.Arg("opts", "").Required().Strings() + _, err := a.Parse([]string{"hello", "-world"}) + assert.Error(t, err) +} + +func TestCommandParseDoesNotResetFlagsToDefault(t *testing.T) { + app := newTestApp() + flag := app.Flag("flag", "").Default("default").String() + app.Command("cmd", "") + + _, err := app.Parse([]string{"--flag=123", "cmd"}) + assert.NoError(t, err) + assert.Equal(t, "123", *flag) +} + +func TestCommandParseDoesNotFailRequired(t *testing.T) { + app := newTestApp() + flag := app.Flag("flag", "").Required().String() + app.Command("cmd", "") + + _, err := app.Parse([]string{"cmd", "--flag=123"}) + assert.NoError(t, err) + assert.Equal(t, "123", *flag) +} + +func TestSelectedCommand(t *testing.T) { + app := newTestApp() + c0 := app.Command("c0", "") + c0.Command("c1", "") + s, err := app.Parse([]string{"c0", "c1"}) + assert.NoError(t, err) + assert.Equal(t, "c0 c1", s) +} + +func TestSubCommandRequired(t *testing.T) { + app := newTestApp() + c0 := app.Command("c0", "") + c0.Command("c1", "") + _, err := app.Parse([]string{"c0"}) + assert.Error(t, err) +} + +func TestInterspersedFalse(t *testing.T) { + app := newTestApp().Interspersed(false) + a1 := app.Arg("a1", "").String() + a2 := app.Arg("a2", "").String() + f1 := app.Flag("flag", "").String() + + _, err := app.Parse([]string{"a1", "--flag=flag"}) + assert.NoError(t, err) + assert.Equal(t, "a1", *a1) + assert.Equal(t, "--flag=flag", *a2) + assert.Equal(t, "", *f1) +} + +func TestInterspersedTrue(t *testing.T) { + // test once with the default value and once with explicit true + for i := 0; i < 2; i++ { + app := newTestApp() + if i != 0 { + t.Log("Setting explicit") + app.Interspersed(true) + } else { + t.Log("Using default") + } + a1 := app.Arg("a1", "").String() + a2 := app.Arg("a2", "").String() + f1 := app.Flag("flag", "").String() + + _, err := app.Parse([]string{"a1", "--flag=flag"}) + assert.NoError(t, err) + assert.Equal(t, "a1", *a1) + assert.Equal(t, "", *a2) + assert.Equal(t, "flag", *f1) + } +} + +func TestDefaultEnvars(t *testing.T) { + a := New("some-app", "").Terminate(nil).DefaultEnvars() + f0 := a.Flag("some-flag", "") + f0.Bool() + f1 := a.Flag("some-other-flag", "").NoEnvar() + f1.Bool() + f2 := a.Flag("a-1-flag", "") + f2.Bool() + _, err := a.Parse([]string{}) + assert.NoError(t, err) + assert.Equal(t, "SOME_APP_SOME_FLAG", f0.envar) + assert.Equal(t, "", f1.envar) + assert.Equal(t, "SOME_APP_A_1_FLAG", f2.envar) +} + +func TestBashCompletionOptionsWithEmptyApp(t *testing.T) { + a := newTestApp() + context, err := a.ParseContext([]string{"--completion-bash"}) + if err != nil { + t.Errorf("Unexpected error whilst parsing context: [%v]", err) + } + args := a.completionOptions(context) + assert.Equal(t, []string(nil), args) +} + +func TestBashCompletionOptions(t *testing.T) { + a := newTestApp() + a.Command("one", "") + a.Flag("flag-0", "").String() + a.Flag("flag-1", "").HintOptions("opt1", "opt2", "opt3").String() + + two := a.Command("two", "") + two.Flag("flag-2", "").String() + two.Flag("flag-3", "").HintOptions("opt4", "opt5", "opt6").String() + + three := a.Command("three", "") + three.Flag("flag-4", "").String() + three.Arg("arg-1", "").String() + three.Arg("arg-2", "").HintOptions("arg-2-opt-1", "arg-2-opt-2").String() + three.Arg("arg-3", "").String() + three.Arg("arg-4", "").HintAction(func() []string { + return []string{"arg-4-opt-1", "arg-4-opt-2"} + }).String() + + cases := []struct { + Args string + ExpectedOptions []string + }{ + { + Args: "--completion-bash", + ExpectedOptions: []string{"help", "one", "three", "two"}, + }, + { + Args: "--completion-bash --", + ExpectedOptions: []string{"--flag-0", "--flag-1", "--help"}, + }, + { + Args: "--completion-bash --fla", + ExpectedOptions: []string{"--flag-0", "--flag-1", "--help"}, + }, + { + // No options available for flag-0, return to cmd completion + Args: "--completion-bash --flag-0", + ExpectedOptions: []string{"help", "one", "three", "two"}, + }, + { + Args: "--completion-bash --flag-0 --", + ExpectedOptions: []string{"--flag-0", "--flag-1", "--help"}, + }, + { + Args: "--completion-bash --flag-1", + ExpectedOptions: []string{"opt1", "opt2", "opt3"}, + }, + { + Args: "--completion-bash --flag-1 opt", + ExpectedOptions: []string{"opt1", "opt2", "opt3"}, + }, + { + Args: "--completion-bash --flag-1 opt1", + ExpectedOptions: []string{"help", "one", "three", "two"}, + }, + { + Args: "--completion-bash --flag-1 opt1 --", + ExpectedOptions: []string{"--flag-0", "--flag-1", "--help"}, + }, + + // Try Subcommand + { + Args: "--completion-bash two", + ExpectedOptions: []string(nil), + }, + { + Args: "--completion-bash two --", + ExpectedOptions: []string{"--help", "--flag-2", "--flag-3", "--flag-0", "--flag-1"}, + }, + { + Args: "--completion-bash two --flag", + ExpectedOptions: []string{"--help", "--flag-2", "--flag-3", "--flag-0", "--flag-1"}, + }, + { + Args: "--completion-bash two --flag-2", + ExpectedOptions: []string(nil), + }, + { + // Top level flags carry downwards + Args: "--completion-bash two --flag-1", + ExpectedOptions: []string{"opt1", "opt2", "opt3"}, + }, + { + // Top level flags carry downwards + Args: "--completion-bash two --flag-1 opt", + ExpectedOptions: []string{"opt1", "opt2", "opt3"}, + }, + { + // Top level flags carry downwards + Args: "--completion-bash two --flag-1 opt1", + ExpectedOptions: []string(nil), + }, + { + Args: "--completion-bash two --flag-3", + ExpectedOptions: []string{"opt4", "opt5", "opt6"}, + }, + { + Args: "--completion-bash two --flag-3 opt", + ExpectedOptions: []string{"opt4", "opt5", "opt6"}, + }, + { + Args: "--completion-bash two --flag-3 opt4", + ExpectedOptions: []string(nil), + }, + { + Args: "--completion-bash two --flag-3 opt4 --", + ExpectedOptions: []string{"--help", "--flag-2", "--flag-3", "--flag-0", "--flag-1"}, + }, + + // Args complete + { + // After a command with an arg with no options, nothing should be + // shown + Args: "--completion-bash three ", + ExpectedOptions: []string(nil), + }, + { + // After a command with an arg, explicitly starting a flag should + // complete flags + Args: "--completion-bash three --", + ExpectedOptions: []string{"--flag-0", "--flag-1", "--flag-4", "--help"}, + }, + { + // After a command with an arg that does have completions, they + // should be shown + Args: "--completion-bash three arg1 ", + ExpectedOptions: []string{"arg-2-opt-1", "arg-2-opt-2"}, + }, + { + // After a command with an arg that does have completions, but a + // flag is started, flag options should be completed + Args: "--completion-bash three arg1 --", + ExpectedOptions: []string{"--flag-0", "--flag-1", "--flag-4", "--help"}, + }, + { + // After a command with an arg that has no completions, and isn't first, + // nothing should be shown + Args: "--completion-bash three arg1 arg2 ", + ExpectedOptions: []string(nil), + }, + { + // After a command with a different arg that also has completions, + // those different options should be shown + Args: "--completion-bash three arg1 arg2 arg3 ", + ExpectedOptions: []string{"arg-4-opt-1", "arg-4-opt-2"}, + }, + { + // After a command with all args listed, nothing should complete + Args: "--completion-bash three arg1 arg2 arg3 arg4", + ExpectedOptions: []string(nil), + }, + } + + for _, c := range cases { + context, _ := a.ParseContext(strings.Split(c.Args, " ")) + args := a.completionOptions(context) + + sort.Strings(args) + sort.Strings(c.ExpectedOptions) + + assert.Equal(t, c.ExpectedOptions, args, "Expected != Actual: [%v] != [%v]. \nInput was: [%v]", c.ExpectedOptions, args, c.Args) + } + +} diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/args.go b/vendor/gopkg.in/alecthomas/kingpin.v2/args.go new file mode 100644 index 0000000..3400694 --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/args.go @@ -0,0 +1,184 @@ +package kingpin + +import ( + "fmt" +) + +type argGroup struct { + args []*ArgClause +} + +func newArgGroup() *argGroup { + return &argGroup{} +} + +func (a *argGroup) have() bool { + return len(a.args) > 0 +} + +// GetArg gets an argument definition. +// +// This allows existing arguments to be modified after definition but before parsing. Useful for +// modular applications. +func (a *argGroup) GetArg(name string) *ArgClause { + for _, arg := range a.args { + if arg.name == name { + return arg + } + } + return nil +} + +func (a *argGroup) Arg(name, help string) *ArgClause { + arg := newArg(name, help) + a.args = append(a.args, arg) + return arg +} + +func (a *argGroup) init() error { + required := 0 + seen := map[string]struct{}{} + previousArgMustBeLast := false + for i, arg := range a.args { + if previousArgMustBeLast { + return fmt.Errorf("Args() can't be followed by another argument '%s'", arg.name) + } + if arg.consumesRemainder() { + previousArgMustBeLast = true + } + if _, ok := seen[arg.name]; ok { + return fmt.Errorf("duplicate argument '%s'", arg.name) + } + seen[arg.name] = struct{}{} + if arg.required && required != i { + return fmt.Errorf("required arguments found after non-required") + } + if arg.required { + required++ + } + if err := arg.init(); err != nil { + return err + } + } + return nil +} + +type ArgClause struct { + actionMixin + parserMixin + completionsMixin + envarMixin + name string + help string + defaultValues []string + required bool +} + +func newArg(name, help string) *ArgClause { + a := &ArgClause{ + name: name, + help: help, + } + return a +} + +func (a *ArgClause) setDefault() error { + if a.HasEnvarValue() { + if v, ok := a.value.(remainderArg); !ok || !v.IsCumulative() { + // Use the value as-is + return a.value.Set(a.GetEnvarValue()) + } + for _, value := range a.GetSplitEnvarValue() { + if err := a.value.Set(value); err != nil { + return err + } + } + return nil + } + + if len(a.defaultValues) > 0 { + for _, defaultValue := range a.defaultValues { + if err := a.value.Set(defaultValue); err != nil { + return err + } + } + return nil + } + + return nil +} + +func (a *ArgClause) needsValue() bool { + haveDefault := len(a.defaultValues) > 0 + return a.required && !(haveDefault || a.HasEnvarValue()) +} + +func (a *ArgClause) consumesRemainder() bool { + if r, ok := a.value.(remainderArg); ok { + return r.IsCumulative() + } + return false +} + +// Required arguments must be input by the user. They can not have a Default() value provided. +func (a *ArgClause) Required() *ArgClause { + a.required = true + return a +} + +// Default values for this argument. They *must* be parseable by the value of the argument. +func (a *ArgClause) Default(values ...string) *ArgClause { + a.defaultValues = values + return a +} + +// Envar overrides the default value(s) for a flag from an environment variable, +// if it is set. Several default values can be provided by using new lines to +// separate them. +func (a *ArgClause) Envar(name string) *ArgClause { + a.envar = name + a.noEnvar = false + return a +} + +// NoEnvar forces environment variable defaults to be disabled for this flag. +// Most useful in conjunction with app.DefaultEnvars(). +func (a *ArgClause) NoEnvar() *ArgClause { + a.envar = "" + a.noEnvar = true + return a +} + +func (a *ArgClause) Action(action Action) *ArgClause { + a.addAction(action) + return a +} + +func (a *ArgClause) PreAction(action Action) *ArgClause { + a.addPreAction(action) + return a +} + +// HintAction registers a HintAction (function) for the arg to provide completions +func (a *ArgClause) HintAction(action HintAction) *ArgClause { + a.addHintAction(action) + return a +} + +// HintOptions registers any number of options for the flag to provide completions +func (a *ArgClause) HintOptions(options ...string) *ArgClause { + a.addHintAction(func() []string { + return options + }) + return a +} + +func (a *ArgClause) init() error { + if a.required && len(a.defaultValues) > 0 { + return fmt.Errorf("required argument '%s' with unusable default value", a.name) + } + if a.value == nil { + return fmt.Errorf("no parser defined for arg '%s'", a.name) + } + return nil +} diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/args_test.go b/vendor/gopkg.in/alecthomas/kingpin.v2/args_test.go new file mode 100644 index 0000000..c16a630 --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/args_test.go @@ -0,0 +1,84 @@ +package kingpin + +import ( + "io/ioutil" + "os" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestArgRemainder(t *testing.T) { + app := New("test", "") + v := app.Arg("test", "").Strings() + args := []string{"hello", "world"} + _, err := app.Parse(args) + assert.NoError(t, err) + assert.Equal(t, args, *v) +} + +func TestArgRemainderErrorsWhenNotLast(t *testing.T) { + a := newArgGroup() + a.Arg("test", "").Strings() + a.Arg("test2", "").String() + assert.Error(t, a.init()) +} + +func TestArgMultipleRequired(t *testing.T) { + terminated := false + app := New("test", "") + app.Version("0.0.0").Writer(ioutil.Discard) + app.Arg("a", "").Required().String() + app.Arg("b", "").Required().String() + app.Terminate(func(int) { terminated = true }) + + _, err := app.Parse([]string{}) + assert.Error(t, err) + _, err = app.Parse([]string{"A"}) + assert.Error(t, err) + _, err = app.Parse([]string{"A", "B"}) + assert.NoError(t, err) + _, err = app.Parse([]string{"--version"}) + assert.True(t, terminated) +} + +func TestInvalidArgsDefaultCanBeOverridden(t *testing.T) { + app := New("test", "") + app.Arg("a", "").Default("invalid").Bool() + _, err := app.Parse([]string{}) + assert.Error(t, err) +} + +func TestArgMultipleValuesDefault(t *testing.T) { + app := New("test", "") + a := app.Arg("a", "").Default("default1", "default2").Strings() + _, err := app.Parse([]string{}) + assert.NoError(t, err) + assert.Equal(t, []string{"default1", "default2"}, *a) +} + +func TestRequiredArgWithEnvarMissingErrors(t *testing.T) { + app := newTestApp() + app.Arg("t", "").Envar("TEST_ARG_ENVAR").Required().Int() + _, err := app.Parse([]string{}) + assert.Error(t, err) +} + +func TestArgRequiredWithEnvar(t *testing.T) { + os.Setenv("TEST_ARG_ENVAR", "123") + app := newTestApp() + flag := app.Arg("t", "").Envar("TEST_ARG_ENVAR").Required().Int() + _, err := app.Parse([]string{}) + assert.NoError(t, err) + assert.Equal(t, 123, *flag) +} + +func TestSubcommandArgRequiredWithEnvar(t *testing.T) { + os.Setenv("TEST_ARG_ENVAR", "123") + app := newTestApp() + cmd := app.Command("command", "") + flag := cmd.Arg("t", "").Envar("TEST_ARG_ENVAR").Required().Int() + _, err := app.Parse([]string{"command"}) + assert.NoError(t, err) + assert.Equal(t, 123, *flag) +} diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/cmd.go b/vendor/gopkg.in/alecthomas/kingpin.v2/cmd.go new file mode 100644 index 0000000..0473b87 --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/cmd.go @@ -0,0 +1,274 @@ +package kingpin + +import ( + "fmt" + "strings" +) + +type cmdMixin struct { + *flagGroup + *argGroup + *cmdGroup + actionMixin +} + +// CmdCompletion returns completion options for arguments, if that's where +// parsing left off, or commands if there aren't any unsatisfied args. +func (c *cmdMixin) CmdCompletion(context *ParseContext) []string { + var options []string + + // Count args already satisfied - we won't complete those, and add any + // default commands' alternatives, since they weren't listed explicitly + // and the user may want to explicitly list something else. + argsSatisfied := 0 + for _, el := range context.Elements { + switch clause := el.Clause.(type) { + case *ArgClause: + if el.Value != nil && *el.Value != "" { + argsSatisfied++ + } + case *CmdClause: + options = append(options, clause.completionAlts...) + default: + } + } + + if argsSatisfied < len(c.argGroup.args) { + // Since not all args have been satisfied, show options for the current one + options = append(options, c.argGroup.args[argsSatisfied].resolveCompletions()...) + } else { + // If all args are satisfied, then go back to completing commands + for _, cmd := range c.cmdGroup.commandOrder { + if !cmd.hidden { + options = append(options, cmd.name) + } + } + } + + return options +} + +func (c *cmdMixin) FlagCompletion(flagName string, flagValue string) (choices []string, flagMatch bool, optionMatch bool) { + // Check if flagName matches a known flag. + // If it does, show the options for the flag + // Otherwise, show all flags + + options := []string{} + + for _, flag := range c.flagGroup.flagOrder { + // Loop through each flag and determine if a match exists + if flag.name == flagName { + // User typed entire flag. Need to look for flag options. + options = flag.resolveCompletions() + if len(options) == 0 { + // No Options to Choose From, Assume Match. + return options, true, true + } + + // Loop options to find if the user specified value matches + isPrefix := false + matched := false + + for _, opt := range options { + if flagValue == opt { + matched = true + } else if strings.HasPrefix(opt, flagValue) { + isPrefix = true + } + } + + // Matched Flag Directly + // Flag Value Not Prefixed, and Matched Directly + return options, true, !isPrefix && matched + } + + if !flag.hidden { + options = append(options, "--"+flag.name) + } + } + // No Flag directly matched. + return options, false, false + +} + +type cmdGroup struct { + app *Application + parent *CmdClause + commands map[string]*CmdClause + commandOrder []*CmdClause +} + +func (c *cmdGroup) defaultSubcommand() *CmdClause { + for _, cmd := range c.commandOrder { + if cmd.isDefault { + return cmd + } + } + return nil +} + +func (c *cmdGroup) cmdNames() []string { + names := make([]string, 0, len(c.commandOrder)) + for _, cmd := range c.commandOrder { + names = append(names, cmd.name) + } + return names +} + +// GetArg gets a command definition. +// +// This allows existing commands to be modified after definition but before parsing. Useful for +// modular applications. +func (c *cmdGroup) GetCommand(name string) *CmdClause { + return c.commands[name] +} + +func newCmdGroup(app *Application) *cmdGroup { + return &cmdGroup{ + app: app, + commands: make(map[string]*CmdClause), + } +} + +func (c *cmdGroup) flattenedCommands() (out []*CmdClause) { + for _, cmd := range c.commandOrder { + if len(cmd.commands) == 0 { + out = append(out, cmd) + } + out = append(out, cmd.flattenedCommands()...) + } + return +} + +func (c *cmdGroup) addCommand(name, help string) *CmdClause { + cmd := newCommand(c.app, name, help) + c.commands[name] = cmd + c.commandOrder = append(c.commandOrder, cmd) + return cmd +} + +func (c *cmdGroup) init() error { + seen := map[string]bool{} + if c.defaultSubcommand() != nil && !c.have() { + return fmt.Errorf("default subcommand %q provided but no subcommands defined", c.defaultSubcommand().name) + } + defaults := []string{} + for _, cmd := range c.commandOrder { + if cmd.isDefault { + defaults = append(defaults, cmd.name) + } + if seen[cmd.name] { + return fmt.Errorf("duplicate command %q", cmd.name) + } + seen[cmd.name] = true + for _, alias := range cmd.aliases { + if seen[alias] { + return fmt.Errorf("alias duplicates existing command %q", alias) + } + c.commands[alias] = cmd + } + if err := cmd.init(); err != nil { + return err + } + } + if len(defaults) > 1 { + return fmt.Errorf("more than one default subcommand exists: %s", strings.Join(defaults, ", ")) + } + return nil +} + +func (c *cmdGroup) have() bool { + return len(c.commands) > 0 +} + +type CmdClauseValidator func(*CmdClause) error + +// A CmdClause is a single top-level command. It encapsulates a set of flags +// and either subcommands or positional arguments. +type CmdClause struct { + cmdMixin + app *Application + name string + aliases []string + help string + isDefault bool + validator CmdClauseValidator + hidden bool + completionAlts []string +} + +func newCommand(app *Application, name, help string) *CmdClause { + c := &CmdClause{ + app: app, + name: name, + help: help, + } + c.flagGroup = newFlagGroup() + c.argGroup = newArgGroup() + c.cmdGroup = newCmdGroup(app) + return c +} + +// Add an Alias for this command. +func (c *CmdClause) Alias(name string) *CmdClause { + c.aliases = append(c.aliases, name) + return c +} + +// Validate sets a validation function to run when parsing. +func (c *CmdClause) Validate(validator CmdClauseValidator) *CmdClause { + c.validator = validator + return c +} + +func (c *CmdClause) FullCommand() string { + out := []string{c.name} + for p := c.parent; p != nil; p = p.parent { + out = append([]string{p.name}, out...) + } + return strings.Join(out, " ") +} + +// Command adds a new sub-command. +func (c *CmdClause) Command(name, help string) *CmdClause { + cmd := c.addCommand(name, help) + cmd.parent = c + return cmd +} + +// Default makes this command the default if commands don't match. +func (c *CmdClause) Default() *CmdClause { + c.isDefault = true + return c +} + +func (c *CmdClause) Action(action Action) *CmdClause { + c.addAction(action) + return c +} + +func (c *CmdClause) PreAction(action Action) *CmdClause { + c.addPreAction(action) + return c +} + +func (c *CmdClause) init() error { + if err := c.flagGroup.init(c.app.defaultEnvarPrefix()); err != nil { + return err + } + if c.argGroup.have() && c.cmdGroup.have() { + return fmt.Errorf("can't mix Arg()s with Command()s") + } + if err := c.argGroup.init(); err != nil { + return err + } + if err := c.cmdGroup.init(); err != nil { + return err + } + return nil +} + +func (c *CmdClause) Hidden() *CmdClause { + c.hidden = true + return c +} diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/cmd/genvalues/main.go b/vendor/gopkg.in/alecthomas/kingpin.v2/cmd/genvalues/main.go new file mode 100644 index 0000000..5d22ad0 --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/cmd/genvalues/main.go @@ -0,0 +1,134 @@ +package main + +import ( + "encoding/json" + "os" + "os/exec" + "strings" + + "github.com/alecthomas/template" +) + +const ( + tmpl = `package kingpin + +// This file is autogenerated by "go generate .". Do not modify. + +{{range .}} +{{if not .NoValueParser}} +// -- {{.Type}} Value +type {{.|ValueName}} struct { v *{{.Type}} } + +func new{{.|Name}}Value(p *{{.Type}}) *{{.|ValueName}} { + return &{{.|ValueName}}{p} +} + +func (f *{{.|ValueName}}) Set(s string) error { + v, err := {{.Parser}} + if err == nil { + *f.v = ({{.Type}})(v) + } + return err +} + +func (f *{{.|ValueName}}) Get() interface{} { return ({{.Type}})(*f.v) } + +func (f *{{.|ValueName}}) String() string { return {{.|Format}} } + +{{if .Help}} +// {{.Help}} +{{else}}\ +// {{.|Name}} parses the next command-line value as {{.Type}}. +{{end}}\ +func (p *parserMixin) {{.|Name}}() (target *{{.Type}}) { + target = new({{.Type}}) + p.{{.|Name}}Var(target) + return +} + +func (p *parserMixin) {{.|Name}}Var(target *{{.Type}}) { + p.SetValue(new{{.|Name}}Value(target)) +} + +{{end}} +// {{.|Plural}} accumulates {{.Type}} values into a slice. +func (p *parserMixin) {{.|Plural}}() (target *[]{{.Type}}) { + target = new([]{{.Type}}) + p.{{.|Plural}}Var(target) + return +} + +func (p *parserMixin) {{.|Plural}}Var(target *[]{{.Type}}) { + p.SetValue(newAccumulator(target, func(v interface{}) Value { + return new{{.|Name}}Value(v.(*{{.Type}})) + })) +} + +{{end}} +` +) + +type Value struct { + Name string `json:"name"` + NoValueParser bool `json:"no_value_parser"` + Type string `json:"type"` + Parser string `json:"parser"` + Format string `json:"format"` + Plural string `json:"plural"` + Help string `json:"help"` +} + +func fatalIfError(err error) { + if err != nil { + panic(err) + } +} + +func main() { + r, err := os.Open("values.json") + fatalIfError(err) + defer r.Close() + + v := []Value{} + err = json.NewDecoder(r).Decode(&v) + fatalIfError(err) + + valueName := func(v *Value) string { + if v.Name != "" { + return v.Name + } + return strings.Title(v.Type) + } + + t, err := template.New("genvalues").Funcs(template.FuncMap{ + "Lower": strings.ToLower, + "Format": func(v *Value) string { + if v.Format != "" { + return v.Format + } + return "fmt.Sprintf(\"%v\", *f.v)" + }, + "ValueName": func(v *Value) string { + name := valueName(v) + return strings.ToLower(name[0:1]) + name[1:] + "Value" + }, + "Name": valueName, + "Plural": func(v *Value) string { + if v.Plural != "" { + return v.Plural + } + return valueName(v) + "List" + }, + }).Parse(tmpl) + fatalIfError(err) + + w, err := os.Create("values_generated.go") + fatalIfError(err) + defer w.Close() + + err = t.Execute(w, v) + fatalIfError(err) + + err = exec.Command("goimports", "-w", "values_generated.go").Run() + fatalIfError(err) +} diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/cmd_test.go b/vendor/gopkg.in/alecthomas/kingpin.v2/cmd_test.go new file mode 100644 index 0000000..d531589 --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/cmd_test.go @@ -0,0 +1,374 @@ +package kingpin + +import ( + "sort" + "strings" + + "github.com/stretchr/testify/assert" + + "testing" +) + +func parseAndExecute(app *Application, context *ParseContext) (string, error) { + if err := parse(context, app); err != nil { + return "", err + } + + selected, err := app.setValues(context) + if err != nil { + return "", err + } + + return app.execute(context, selected) +} + +func complete(t *testing.T, app *Application, args ...string) []string { + context, err := app.ParseContext(args) + assert.NoError(t, err) + if err != nil { + return nil + } + + completions := app.completionOptions(context) + sort.Strings(completions) + + return completions +} + +func TestNestedCommands(t *testing.T) { + app := New("app", "") + sub1 := app.Command("sub1", "") + sub1.Flag("sub1", "") + subsub1 := sub1.Command("sub1sub1", "") + subsub1.Command("sub1sub1end", "") + + sub2 := app.Command("sub2", "") + sub2.Flag("sub2", "") + sub2.Command("sub2sub1", "") + + context := tokenize([]string{"sub1", "sub1sub1", "sub1sub1end"}, false) + selected, err := parseAndExecute(app, context) + assert.NoError(t, err) + assert.True(t, context.EOL()) + assert.Equal(t, "sub1 sub1sub1 sub1sub1end", selected) +} + +func TestNestedCommandsWithArgs(t *testing.T) { + app := New("app", "") + cmd := app.Command("a", "").Command("b", "") + a := cmd.Arg("a", "").String() + b := cmd.Arg("b", "").String() + context := tokenize([]string{"a", "b", "c", "d"}, false) + selected, err := parseAndExecute(app, context) + assert.NoError(t, err) + assert.True(t, context.EOL()) + assert.Equal(t, "a b", selected) + assert.Equal(t, "c", *a) + assert.Equal(t, "d", *b) +} + +func TestNestedCommandsWithFlags(t *testing.T) { + app := New("app", "") + cmd := app.Command("a", "").Command("b", "") + a := cmd.Flag("aaa", "").Short('a').String() + b := cmd.Flag("bbb", "").Short('b').String() + err := app.init() + assert.NoError(t, err) + context := tokenize(strings.Split("a b --aaa x -b x", " "), false) + selected, err := parseAndExecute(app, context) + assert.NoError(t, err) + assert.True(t, context.EOL()) + assert.Equal(t, "a b", selected) + assert.Equal(t, "x", *a) + assert.Equal(t, "x", *b) +} + +func TestNestedCommandWithMergedFlags(t *testing.T) { + app := New("app", "") + cmd0 := app.Command("a", "") + cmd0f0 := cmd0.Flag("aflag", "").Bool() + // cmd1 := app.Command("b", "") + // cmd1f0 := cmd0.Flag("bflag", "").Bool() + cmd00 := cmd0.Command("aa", "") + cmd00f0 := cmd00.Flag("aaflag", "").Bool() + err := app.init() + assert.NoError(t, err) + context := tokenize(strings.Split("a aa --aflag --aaflag", " "), false) + selected, err := parseAndExecute(app, context) + assert.NoError(t, err) + assert.True(t, *cmd0f0) + assert.True(t, *cmd00f0) + assert.Equal(t, "a aa", selected) +} + +func TestNestedCommandWithDuplicateFlagErrors(t *testing.T) { + app := New("app", "") + app.Flag("test", "").Bool() + app.Command("cmd0", "").Flag("test", "").Bool() + err := app.init() + assert.Error(t, err) +} + +func TestNestedCommandWithArgAndMergedFlags(t *testing.T) { + app := New("app", "") + cmd0 := app.Command("a", "") + cmd0f0 := cmd0.Flag("aflag", "").Bool() + // cmd1 := app.Command("b", "") + // cmd1f0 := cmd0.Flag("bflag", "").Bool() + cmd00 := cmd0.Command("aa", "") + cmd00a0 := cmd00.Arg("arg", "").String() + cmd00f0 := cmd00.Flag("aaflag", "").Bool() + err := app.init() + assert.NoError(t, err) + context := tokenize(strings.Split("a aa hello --aflag --aaflag", " "), false) + selected, err := parseAndExecute(app, context) + assert.NoError(t, err) + assert.True(t, *cmd0f0) + assert.True(t, *cmd00f0) + assert.Equal(t, "a aa", selected) + assert.Equal(t, "hello", *cmd00a0) +} + +func TestDefaultSubcommandEOL(t *testing.T) { + app := newTestApp() + c0 := app.Command("c0", "").Default() + c0.Command("c01", "").Default() + c0.Command("c02", "") + + cmd, err := app.Parse([]string{"c0"}) + assert.NoError(t, err) + assert.Equal(t, "c0 c01", cmd) +} + +func TestDefaultSubcommandWithArg(t *testing.T) { + app := newTestApp() + c0 := app.Command("c0", "").Default() + c01 := c0.Command("c01", "").Default() + c012 := c01.Command("c012", "").Default() + a0 := c012.Arg("a0", "").String() + c0.Command("c02", "") + + cmd, err := app.Parse([]string{"c0", "hello"}) + assert.NoError(t, err) + assert.Equal(t, "c0 c01 c012", cmd) + assert.Equal(t, "hello", *a0) +} + +func TestDefaultSubcommandWithFlags(t *testing.T) { + app := newTestApp() + c0 := app.Command("c0", "").Default() + _ = c0.Flag("f0", "").Int() + c0c1 := c0.Command("c1", "").Default() + c0c1f1 := c0c1.Flag("f1", "").Int() + selected, err := app.Parse([]string{"--f1=2"}) + assert.NoError(t, err) + assert.Equal(t, "c0 c1", selected) + assert.Equal(t, 2, *c0c1f1) + _, err = app.Parse([]string{"--f2"}) + assert.Error(t, err) +} + +func TestMultipleDefaultCommands(t *testing.T) { + app := newTestApp() + app.Command("c0", "").Default() + app.Command("c1", "").Default() + _, err := app.Parse([]string{}) + assert.Error(t, err) +} + +func TestAliasedCommand(t *testing.T) { + app := newTestApp() + app.Command("one", "").Alias("two") + selected, _ := app.Parse([]string{"one"}) + assert.Equal(t, "one", selected) + selected, _ = app.Parse([]string{"two"}) + assert.Equal(t, "one", selected) + // 2 due to "help" and "one" + assert.Equal(t, 2, len(app.Model().FlattenedCommands())) +} + +func TestDuplicateAlias(t *testing.T) { + app := newTestApp() + app.Command("one", "") + app.Command("two", "").Alias("one") + _, err := app.Parse([]string{"one"}) + assert.Error(t, err) +} + +func TestFlagCompletion(t *testing.T) { + app := newTestApp() + app.Command("one", "") + two := app.Command("two", "") + two.Flag("flag-1", "") + two.Flag("flag-2", "").HintOptions("opt1", "opt2", "opt3") + two.Flag("flag-3", "") + + cases := []struct { + target cmdMixin + flagName string + flagValue string + expectedFlagMatch bool + expectedOptionMatch bool + expectedFlags []string + }{ + { + // Test top level flags + target: app.cmdMixin, + flagName: "", + flagValue: "", + expectedFlagMatch: false, + expectedOptionMatch: false, + expectedFlags: []string{"--help"}, + }, + { + // Test no flag passed + target: two.cmdMixin, + flagName: "", + flagValue: "", + expectedFlagMatch: false, + expectedOptionMatch: false, + expectedFlags: []string{"--flag-1", "--flag-2", "--flag-3"}, + }, + { + // Test an incomplete flag. Should still give all options as if the flag wasn't given at all. + target: two.cmdMixin, + flagName: "flag-", + flagValue: "", + expectedFlagMatch: false, + expectedOptionMatch: false, + expectedFlags: []string{"--flag-1", "--flag-2", "--flag-3"}, + }, + { + // Test with a complete flag. Should show available choices for the flag + // This flag has no options. No options should be produced. + // Should also report an option was matched + target: two.cmdMixin, + flagName: "flag-1", + flagValue: "", + expectedFlagMatch: true, + expectedOptionMatch: true, + expectedFlags: []string(nil), + }, + { + // Test with a complete flag. Should show available choices for the flag + target: two.cmdMixin, + flagName: "flag-2", + flagValue: "", + expectedFlagMatch: true, + expectedOptionMatch: false, + expectedFlags: []string{"opt1", "opt2", "opt3"}, + }, + { + // Test with a complete flag and complete option for that flag. + target: two.cmdMixin, + flagName: "flag-2", + flagValue: "opt1", + expectedFlagMatch: true, + expectedOptionMatch: true, + expectedFlags: []string{"opt1", "opt2", "opt3"}, + }, + } + + for i, c := range cases { + choices, flagMatch, optionMatch := c.target.FlagCompletion(c.flagName, c.flagValue) + assert.Equal(t, c.expectedFlags, choices, "Test case %d: expectedFlags != actual flags", i+1) + assert.Equal(t, c.expectedFlagMatch, flagMatch, "Test case %d: expectedFlagMatch != flagMatch", i+1) + assert.Equal(t, c.expectedOptionMatch, optionMatch, "Test case %d: expectedOptionMatch != optionMatch", i+1) + } + +} + +func TestCmdCompletion(t *testing.T) { + app := newTestApp() + app.Command("one", "") + two := app.Command("two", "") + two.Command("sub1", "") + two.Command("sub2", "") + + assert.Equal(t, []string{"help", "one", "two"}, complete(t, app)) + assert.Equal(t, []string{"sub1", "sub2"}, complete(t, app, "two")) +} + +func TestHiddenCmdCompletion(t *testing.T) { + app := newTestApp() + + // top level visible & hidden cmds, with no sub-cmds + app.Command("visible1", "") + app.Command("hidden1", "").Hidden() + + // visible cmd with visible & hidden sub-cmds + visible2 := app.Command("visible2", "") + visible2.Command("visible2-visible", "") + visible2.Command("visible2-hidden", "").Hidden() + + // hidden cmd with visible & hidden sub-cmds + hidden2 := app.Command("hidden2", "").Hidden() + hidden2.Command("hidden2-visible", "") + hidden2.Command("hidden2-hidden", "").Hidden() + + // Only top level visible cmds should show + assert.Equal(t, []string{"help", "visible1", "visible2"}, complete(t, app)) + + // Only visible sub-cmds should show + assert.Equal(t, []string{"visible2-visible"}, complete(t, app, "visible2")) + + // Hidden commands should still complete visible sub-cmds + assert.Equal(t, []string{"hidden2-visible"}, complete(t, app, "hidden2")) +} + +func TestDefaultCmdCompletion(t *testing.T) { + app := newTestApp() + + cmd1 := app.Command("cmd1", "") + + cmd1Sub1 := cmd1.Command("cmd1-sub1", "") + cmd1Sub1.Arg("cmd1-sub1-arg1", "").HintOptions("cmd1-arg1").String() + + cmd2 := app.Command("cmd2", "").Default() + + cmd2.Command("cmd2-sub1", "") + + cmd2Sub2 := cmd2.Command("cmd2-sub2", "").Default() + + cmd2Sub2Sub1 := cmd2Sub2.Command("cmd2-sub2-sub1", "").Default() + cmd2Sub2Sub1.Arg("cmd2-sub2-sub1-arg1", "").HintOptions("cmd2-sub2-sub1-arg1").String() + cmd2Sub2Sub1.Arg("cmd2-sub2-sub1-arg2", "").HintOptions("cmd2-sub2-sub1-arg2").String() + + // Without args, should get: + // - root cmds (including implicit "help") + // - thread of default cmds + // - first arg hints for the final default cmd + assert.Equal(t, []string{"cmd1", "cmd2", "cmd2-sub1", "cmd2-sub2", "cmd2-sub2-sub1", "cmd2-sub2-sub1-arg1", "help"}, complete(t, app)) + + // With a non-default cmd already listed, should get: + // - sub cmds of that arg + assert.Equal(t, []string{"cmd1-sub1"}, complete(t, app, "cmd1")) + + // With an explicit default cmd listed, should get: + // - default child-cmds + // - first arg hints for the final default cmd + assert.Equal(t, []string{"cmd2-sub1", "cmd2-sub2", "cmd2-sub2-sub1", "cmd2-sub2-sub1-arg1"}, complete(t, app, "cmd2")) + + // Args should be completed when all preceding cmds are explicit, and when + // any of them are implicit (not listed). Check this by trying all possible + // combinations of choosing/excluding the three levels of cmds. This tests + // root-level default, middle default, and end default. + for i := 0; i < 8; i++ { + var cmdline []string + + if i&1 != 0 { + cmdline = append(cmdline, "cmd2") + } + if i&2 != 0 { + cmdline = append(cmdline, "cmd2-sub2") + } + if i&4 != 0 { + cmdline = append(cmdline, "cmd2-sub2-sub1") + } + + assert.Contains(t, complete(t, app, cmdline...), "cmd2-sub2-sub1-arg1", "with cmdline: %v", cmdline) + } + + // With both args of a default sub cmd, should get no completions + assert.Empty(t, complete(t, app, "arg1", "arg2")) +} diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/completions.go b/vendor/gopkg.in/alecthomas/kingpin.v2/completions.go new file mode 100644 index 0000000..6e7b409 --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/completions.go @@ -0,0 +1,33 @@ +package kingpin + +// HintAction is a function type who is expected to return a slice of possible +// command line arguments. +type HintAction func() []string +type completionsMixin struct { + hintActions []HintAction + builtinHintActions []HintAction +} + +func (a *completionsMixin) addHintAction(action HintAction) { + a.hintActions = append(a.hintActions, action) +} + +// Allow adding of HintActions which are added internally, ie, EnumVar +func (a *completionsMixin) addHintActionBuiltin(action HintAction) { + a.builtinHintActions = append(a.builtinHintActions, action) +} + +func (a *completionsMixin) resolveCompletions() []string { + var hints []string + + options := a.builtinHintActions + if len(a.hintActions) > 0 { + // User specified their own hintActions. Use those instead. + options = a.hintActions + } + + for _, hintAction := range options { + hints = append(hints, hintAction()...) + } + return hints +} diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/completions_test.go b/vendor/gopkg.in/alecthomas/kingpin.v2/completions_test.go new file mode 100644 index 0000000..7da9c06 --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/completions_test.go @@ -0,0 +1,78 @@ +package kingpin + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestResolveWithBuiltin(t *testing.T) { + a := completionsMixin{} + + hintAction1 := func() []string { + return []string{"opt1", "opt2"} + } + hintAction2 := func() []string { + return []string{"opt3", "opt4"} + } + + a.builtinHintActions = []HintAction{hintAction1, hintAction2} + + args := a.resolveCompletions() + assert.Equal(t, []string{"opt1", "opt2", "opt3", "opt4"}, args) +} + +func TestResolveWithUser(t *testing.T) { + a := completionsMixin{} + hintAction1 := func() []string { + return []string{"opt1", "opt2"} + } + hintAction2 := func() []string { + return []string{"opt3", "opt4"} + } + + a.hintActions = []HintAction{hintAction1, hintAction2} + + args := a.resolveCompletions() + assert.Equal(t, []string{"opt1", "opt2", "opt3", "opt4"}, args) +} + +func TestResolveWithCombination(t *testing.T) { + a := completionsMixin{} + builtin := func() []string { + return []string{"opt1", "opt2"} + } + user := func() []string { + return []string{"opt3", "opt4"} + } + + a.builtinHintActions = []HintAction{builtin} + a.hintActions = []HintAction{user} + + args := a.resolveCompletions() + // User provided args take preference over builtin (enum-defined) args. + assert.Equal(t, []string{"opt3", "opt4"}, args) +} + +func TestAddHintAction(t *testing.T) { + a := completionsMixin{} + hintFunc := func() []string { + return []string{"opt1", "opt2"} + } + a.addHintAction(hintFunc) + + args := a.resolveCompletions() + assert.Equal(t, []string{"opt1", "opt2"}, args) +} + +func TestAddHintActionBuiltin(t *testing.T) { + a := completionsMixin{} + hintFunc := func() []string { + return []string{"opt1", "opt2"} + } + + a.addHintActionBuiltin(hintFunc) + + args := a.resolveCompletions() + assert.Equal(t, []string{"opt1", "opt2"}, args) +} diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/doc.go b/vendor/gopkg.in/alecthomas/kingpin.v2/doc.go new file mode 100644 index 0000000..cb951a8 --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/doc.go @@ -0,0 +1,68 @@ +// Package kingpin provides command line interfaces like this: +// +// $ chat +// usage: chat [] [] [ ...] +// +// Flags: +// --debug enable debug mode +// --help Show help. +// --server=127.0.0.1 server address +// +// Commands: +// help +// Show help for a command. +// +// post [] +// Post a message to a channel. +// +// register +// Register a new user. +// +// $ chat help post +// usage: chat [] post [] [] +// +// Post a message to a channel. +// +// Flags: +// --image=IMAGE image to post +// +// Args: +// channel to post to +// [] text to post +// $ chat post --image=~/Downloads/owls.jpg pics +// +// From code like this: +// +// package main +// +// import "gopkg.in/alecthomas/kingpin.v2" +// +// var ( +// debug = kingpin.Flag("debug", "enable debug mode").Default("false").Bool() +// serverIP = kingpin.Flag("server", "server address").Default("127.0.0.1").IP() +// +// register = kingpin.Command("register", "Register a new user.") +// registerNick = register.Arg("nick", "nickname for user").Required().String() +// registerName = register.Arg("name", "name of user").Required().String() +// +// post = kingpin.Command("post", "Post a message to a channel.") +// postImage = post.Flag("image", "image to post").ExistingFile() +// postChannel = post.Arg("channel", "channel to post to").Required().String() +// postText = post.Arg("text", "text to post").String() +// ) +// +// func main() { +// switch kingpin.Parse() { +// // Register user +// case "register": +// println(*registerNick) +// +// // Post message +// case "post": +// if *postImage != nil { +// } +// if *postText != "" { +// } +// } +// } +package kingpin diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/envar.go b/vendor/gopkg.in/alecthomas/kingpin.v2/envar.go new file mode 100644 index 0000000..c01a27d --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/envar.go @@ -0,0 +1,45 @@ +package kingpin + +import ( + "os" + "regexp" +) + +var ( + envVarValuesSeparator = "\r?\n" + envVarValuesTrimmer = regexp.MustCompile(envVarValuesSeparator + "$") + envVarValuesSplitter = regexp.MustCompile(envVarValuesSeparator) +) + +type envarMixin struct { + envar string + noEnvar bool +} + +func (e *envarMixin) HasEnvarValue() bool { + return e.GetEnvarValue() != "" +} + +func (e *envarMixin) GetEnvarValue() string { + if e.noEnvar || e.envar == "" { + return "" + } + return os.Getenv(e.envar) +} + +func (e *envarMixin) GetSplitEnvarValue() []string { + values := make([]string, 0) + + envarValue := e.GetEnvarValue() + if envarValue == "" { + return values + } + + // Split by new line to extract multiple values, if any. + trimmed := envVarValuesTrimmer.ReplaceAllString(envarValue, "") + for _, value := range envVarValuesSplitter.Split(trimmed, -1) { + values = append(values, value) + } + + return values +} diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/examples_test.go b/vendor/gopkg.in/alecthomas/kingpin.v2/examples_test.go new file mode 100644 index 0000000..7c3e34f --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/examples_test.go @@ -0,0 +1,46 @@ +package kingpin + +import ( + "fmt" + "net/http" + "strings" +) + +type HTTPHeaderValue http.Header + +func (h *HTTPHeaderValue) Set(value string) error { + parts := strings.SplitN(value, ":", 2) + if len(parts) != 2 { + return fmt.Errorf("expected HEADER:VALUE got '%s'", value) + } + (*http.Header)(h).Add(parts[0], parts[1]) + return nil +} + +func (h *HTTPHeaderValue) Get() interface{} { + return (http.Header)(*h) +} + +func (h *HTTPHeaderValue) String() string { + return "" +} + +func HTTPHeader(s Settings) (target *http.Header) { + target = new(http.Header) + s.SetValue((*HTTPHeaderValue)(target)) + return +} + +// This example ilustrates how to define custom parsers. HTTPHeader +// cumulatively parses each encountered --header flag into a http.Header struct. +func ExampleValue() { + var ( + curl = New("curl", "transfer a URL") + headers = HTTPHeader(curl.Flag("headers", "Add HTTP headers to the request.").Short('H').PlaceHolder("HEADER:VALUE")) + ) + + curl.Parse([]string{"-H Content-Type:application/octet-stream"}) + for key, value := range *headers { + fmt.Printf("%s = %s\n", key, value) + } +} diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/flags.go b/vendor/gopkg.in/alecthomas/kingpin.v2/flags.go new file mode 100644 index 0000000..8f33721 --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/flags.go @@ -0,0 +1,308 @@ +package kingpin + +import ( + "fmt" + "strings" +) + +type flagGroup struct { + short map[string]*FlagClause + long map[string]*FlagClause + flagOrder []*FlagClause +} + +func newFlagGroup() *flagGroup { + return &flagGroup{ + short: map[string]*FlagClause{}, + long: map[string]*FlagClause{}, + } +} + +// GetFlag gets a flag definition. +// +// This allows existing flags to be modified after definition but before parsing. Useful for +// modular applications. +func (f *flagGroup) GetFlag(name string) *FlagClause { + return f.long[name] +} + +// Flag defines a new flag with the given long name and help. +func (f *flagGroup) Flag(name, help string) *FlagClause { + flag := newFlag(name, help) + f.long[name] = flag + f.flagOrder = append(f.flagOrder, flag) + return flag +} + +func (f *flagGroup) init(defaultEnvarPrefix string) error { + if err := f.checkDuplicates(); err != nil { + return err + } + for _, flag := range f.long { + if defaultEnvarPrefix != "" && !flag.noEnvar && flag.envar == "" { + flag.envar = envarTransform(defaultEnvarPrefix + "_" + flag.name) + } + if err := flag.init(); err != nil { + return err + } + if flag.shorthand != 0 { + f.short[string(flag.shorthand)] = flag + } + } + return nil +} + +func (f *flagGroup) checkDuplicates() error { + seenShort := map[rune]bool{} + seenLong := map[string]bool{} + for _, flag := range f.flagOrder { + if flag.shorthand != 0 { + if _, ok := seenShort[flag.shorthand]; ok { + return fmt.Errorf("duplicate short flag -%c", flag.shorthand) + } + seenShort[flag.shorthand] = true + } + if _, ok := seenLong[flag.name]; ok { + return fmt.Errorf("duplicate long flag --%s", flag.name) + } + seenLong[flag.name] = true + } + return nil +} + +func (f *flagGroup) parse(context *ParseContext) (*FlagClause, error) { + var token *Token + +loop: + for { + token = context.Peek() + switch token.Type { + case TokenEOL: + break loop + + case TokenLong, TokenShort: + flagToken := token + defaultValue := "" + var flag *FlagClause + var ok bool + invert := false + + name := token.Value + if token.Type == TokenLong { + flag, ok = f.long[name] + if !ok { + if strings.HasPrefix(name, "no-") { + name = name[3:] + invert = true + } + flag, ok = f.long[name] + } + if !ok { + return nil, fmt.Errorf("unknown long flag '%s'", flagToken) + } + } else { + flag, ok = f.short[name] + if !ok { + return nil, fmt.Errorf("unknown short flag '%s'", flagToken) + } + } + + context.Next() + + fb, ok := flag.value.(boolFlag) + if ok && fb.IsBoolFlag() { + if invert { + defaultValue = "false" + } else { + defaultValue = "true" + } + } else { + if invert { + context.Push(token) + return nil, fmt.Errorf("unknown long flag '%s'", flagToken) + } + token = context.Peek() + if token.Type != TokenArg { + context.Push(token) + return nil, fmt.Errorf("expected argument for flag '%s'", flagToken) + } + context.Next() + defaultValue = token.Value + } + + context.matchedFlag(flag, defaultValue) + return flag, nil + + default: + break loop + } + } + return nil, nil +} + +// FlagClause is a fluid interface used to build flags. +type FlagClause struct { + parserMixin + actionMixin + completionsMixin + envarMixin + name string + shorthand rune + help string + defaultValues []string + placeholder string + hidden bool +} + +func newFlag(name, help string) *FlagClause { + f := &FlagClause{ + name: name, + help: help, + } + return f +} + +func (f *FlagClause) setDefault() error { + if f.HasEnvarValue() { + if v, ok := f.value.(repeatableFlag); !ok || !v.IsCumulative() { + // Use the value as-is + return f.value.Set(f.GetEnvarValue()) + } else { + for _, value := range f.GetSplitEnvarValue() { + if err := f.value.Set(value); err != nil { + return err + } + } + return nil + } + } + + if len(f.defaultValues) > 0 { + for _, defaultValue := range f.defaultValues { + if err := f.value.Set(defaultValue); err != nil { + return err + } + } + return nil + } + + return nil +} + +func (f *FlagClause) needsValue() bool { + haveDefault := len(f.defaultValues) > 0 + return f.required && !(haveDefault || f.HasEnvarValue()) +} + +func (f *FlagClause) init() error { + if f.required && len(f.defaultValues) > 0 { + return fmt.Errorf("required flag '--%s' with default value that will never be used", f.name) + } + if f.value == nil { + return fmt.Errorf("no type defined for --%s (eg. .String())", f.name) + } + if v, ok := f.value.(repeatableFlag); (!ok || !v.IsCumulative()) && len(f.defaultValues) > 1 { + return fmt.Errorf("invalid default for '--%s', expecting single value", f.name) + } + return nil +} + +// Dispatch to the given function after the flag is parsed and validated. +func (f *FlagClause) Action(action Action) *FlagClause { + f.addAction(action) + return f +} + +func (f *FlagClause) PreAction(action Action) *FlagClause { + f.addPreAction(action) + return f +} + +// HintAction registers a HintAction (function) for the flag to provide completions +func (a *FlagClause) HintAction(action HintAction) *FlagClause { + a.addHintAction(action) + return a +} + +// HintOptions registers any number of options for the flag to provide completions +func (a *FlagClause) HintOptions(options ...string) *FlagClause { + a.addHintAction(func() []string { + return options + }) + return a +} + +func (a *FlagClause) EnumVar(target *string, options ...string) { + a.parserMixin.EnumVar(target, options...) + a.addHintActionBuiltin(func() []string { + return options + }) +} + +func (a *FlagClause) Enum(options ...string) (target *string) { + a.addHintActionBuiltin(func() []string { + return options + }) + return a.parserMixin.Enum(options...) +} + +// Default values for this flag. They *must* be parseable by the value of the flag. +func (f *FlagClause) Default(values ...string) *FlagClause { + f.defaultValues = values + return f +} + +// DEPRECATED: Use Envar(name) instead. +func (f *FlagClause) OverrideDefaultFromEnvar(envar string) *FlagClause { + return f.Envar(envar) +} + +// Envar overrides the default value(s) for a flag from an environment variable, +// if it is set. Several default values can be provided by using new lines to +// separate them. +func (f *FlagClause) Envar(name string) *FlagClause { + f.envar = name + f.noEnvar = false + return f +} + +// NoEnvar forces environment variable defaults to be disabled for this flag. +// Most useful in conjunction with app.DefaultEnvars(). +func (f *FlagClause) NoEnvar() *FlagClause { + f.envar = "" + f.noEnvar = true + return f +} + +// PlaceHolder sets the place-holder string used for flag values in the help. The +// default behaviour is to use the value provided by Default() if provided, +// then fall back on the capitalized flag name. +func (f *FlagClause) PlaceHolder(placeholder string) *FlagClause { + f.placeholder = placeholder + return f +} + +// Hidden hides a flag from usage but still allows it to be used. +func (f *FlagClause) Hidden() *FlagClause { + f.hidden = true + return f +} + +// Required makes the flag required. You can not provide a Default() value to a Required() flag. +func (f *FlagClause) Required() *FlagClause { + f.required = true + return f +} + +// Short sets the short flag name. +func (f *FlagClause) Short(name rune) *FlagClause { + f.shorthand = name + return f +} + +// Bool makes this flag a boolean flag. +func (f *FlagClause) Bool() (target *bool) { + target = new(bool) + f.SetValue(newBoolValue(target)) + return +} diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/flags_test.go b/vendor/gopkg.in/alecthomas/kingpin.v2/flags_test.go new file mode 100644 index 0000000..29327e6 --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/flags_test.go @@ -0,0 +1,368 @@ +package kingpin + +import ( + "io/ioutil" + "os" + + "github.com/stretchr/testify/assert" + + "testing" +) + +func TestBool(t *testing.T) { + app := newTestApp() + b := app.Flag("b", "").Bool() + _, err := app.Parse([]string{"--b"}) + assert.NoError(t, err) + assert.True(t, *b) +} + +func TestNoBool(t *testing.T) { + fg := newFlagGroup() + f := fg.Flag("b", "").Default("true") + b := f.Bool() + fg.init("") + tokens := tokenize([]string{"--no-b"}, false) + _, err := fg.parse(tokens) + assert.NoError(t, err) + assert.False(t, *b) +} + +func TestNegateNonBool(t *testing.T) { + fg := newFlagGroup() + f := fg.Flag("b", "") + f.Int() + fg.init("") + tokens := tokenize([]string{"--no-b"}, false) + _, err := fg.parse(tokens) + assert.Error(t, err) +} + +func TestNegativePrefixLongFlag(t *testing.T) { + fg := newFlagGroup() + f := fg.Flag("no-comment", "") + b := f.Bool() + fg.init("") + tokens := tokenize([]string{"--no-comment"}, false) + _, err := fg.parse(tokens) + assert.NoError(t, err) + assert.False(t, *b) +} + +func TestInvalidFlagDefaultCanBeOverridden(t *testing.T) { + app := newTestApp() + app.Flag("a", "").Default("invalid").Bool() + _, err := app.Parse([]string{}) + assert.Error(t, err) +} + +func TestRequiredFlag(t *testing.T) { + app := newTestApp() + app.Version("0.0.0").Writer(ioutil.Discard) + exits := 0 + app.Terminate(func(int) { exits++ }) + app.Flag("a", "").Required().Bool() + _, err := app.Parse([]string{"--a"}) + assert.NoError(t, err) + _, err = app.Parse([]string{}) + assert.Error(t, err) + _, err = app.Parse([]string{"--version"}) + assert.Equal(t, 1, exits) +} + +func TestShortFlag(t *testing.T) { + app := newTestApp() + f := app.Flag("long", "").Short('s').Bool() + _, err := app.Parse([]string{"-s"}) + assert.NoError(t, err) + assert.True(t, *f) +} + +func TestUnicodeShortFlag(t *testing.T) { + app := newTestApp() + f := app.Flag("aaa", "").Short('ä').Bool() + _, err := app.Parse([]string{"-ä"}) + assert.NoError(t, err) + assert.True(t, *f) +} + +func TestCombinedShortFlags(t *testing.T) { + app := newTestApp() + a := app.Flag("short0", "").Short('0').Bool() + b := app.Flag("short1", "").Short('1').Bool() + c := app.Flag("short2", "").Short('2').Bool() + _, err := app.Parse([]string{"-01"}) + assert.NoError(t, err) + assert.True(t, *a) + assert.True(t, *b) + assert.False(t, *c) +} + +func TestCombinedUnicodeShortFlags(t *testing.T) { + app := newTestApp() + a := app.Flag("short0", "").Short('0').Bool() + b := app.Flag("short1", "").Short('1').Bool() + c := app.Flag("short2", "").Short('ä').Bool() + d := app.Flag("short3", "").Short('2').Bool() + _, err := app.Parse([]string{"-0ä1"}) + assert.NoError(t, err) + assert.True(t, *a) + assert.True(t, *b) + assert.True(t, *c) + assert.False(t, *d) +} + +func TestCombinedShortFlagArg(t *testing.T) { + a := newTestApp() + n := a.Flag("short", "").Short('s').Int() + _, err := a.Parse([]string{"-s10"}) + assert.NoError(t, err) + assert.Equal(t, 10, *n) +} + +func TestCombinedUnicodeShortFlagArg(t *testing.T) { + app := newTestApp() + a := app.Flag("short", "").Short('ä').Int() + _, err := app.Parse([]string{"-ä10"}) + assert.NoError(t, err) + assert.Equal(t, 10, *a) +} + +func TestCombinedUnicodeShortFlagUnicodeArg(t *testing.T) { + app := newTestApp() + a := app.Flag("short", "").Short('ä').String() + _, err := app.Parse([]string{"-äöö"}) + assert.NoError(t, err) + assert.Equal(t, "öö", *a) +} + +func TestEmptyShortFlagIsAnError(t *testing.T) { + _, err := newTestApp().Parse([]string{"-"}) + assert.Error(t, err) +} + +func TestRequiredWithEnvarMissingErrors(t *testing.T) { + app := newTestApp() + app.Flag("t", "").OverrideDefaultFromEnvar("TEST_ENVAR").Required().Int() + _, err := app.Parse([]string{}) + assert.Error(t, err) +} + +func TestRequiredWithEnvar(t *testing.T) { + os.Setenv("TEST_ENVAR", "123") + app := newTestApp() + flag := app.Flag("t", "").Envar("TEST_ENVAR").Required().Int() + _, err := app.Parse([]string{}) + assert.NoError(t, err) + assert.Equal(t, 123, *flag) +} + +func TestSubcommandFlagRequiredWithEnvar(t *testing.T) { + os.Setenv("TEST_ENVAR", "123") + app := newTestApp() + cmd := app.Command("command", "") + flag := cmd.Flag("t", "").Envar("TEST_ENVAR").Required().Int() + _, err := app.Parse([]string{"command"}) + assert.NoError(t, err) + assert.Equal(t, 123, *flag) +} + +func TestRegexp(t *testing.T) { + app := newTestApp() + flag := app.Flag("reg", "").Regexp() + _, err := app.Parse([]string{"--reg", "^abc$"}) + assert.NoError(t, err) + assert.NotNil(t, *flag) + assert.Equal(t, "^abc$", (*flag).String()) + assert.Regexp(t, *flag, "abc") + assert.NotRegexp(t, *flag, "abcd") +} + +func TestDuplicateShortFlag(t *testing.T) { + app := newTestApp() + app.Flag("a", "").Short('a').String() + app.Flag("b", "").Short('a').String() + _, err := app.Parse([]string{}) + assert.Error(t, err) +} + +func TestDuplicateLongFlag(t *testing.T) { + app := newTestApp() + app.Flag("a", "").String() + app.Flag("a", "").String() + _, err := app.Parse([]string{}) + assert.Error(t, err) +} + +func TestGetFlagAndOverrideDefault(t *testing.T) { + app := newTestApp() + a := app.Flag("a", "").Default("default").String() + _, err := app.Parse([]string{}) + assert.NoError(t, err) + assert.Equal(t, "default", *a) + app.GetFlag("a").Default("new") + _, err = app.Parse([]string{}) + assert.NoError(t, err) + assert.Equal(t, "new", *a) +} + +func TestEnvarOverrideDefault(t *testing.T) { + os.Setenv("TEST_ENVAR", "123") + app := newTestApp() + flag := app.Flag("t", "").Default("default").Envar("TEST_ENVAR").String() + _, err := app.Parse([]string{}) + assert.NoError(t, err) + assert.Equal(t, "123", *flag) +} + +func TestFlagMultipleValuesDefault(t *testing.T) { + app := newTestApp() + a := app.Flag("a", "").Default("default1", "default2").Strings() + _, err := app.Parse([]string{}) + assert.NoError(t, err) + assert.Equal(t, []string{"default1", "default2"}, *a) +} + +func TestFlagMultipleValuesDefaultNonRepeatable(t *testing.T) { + c := newTestApp() + c.Flag("foo", "foo").Default("a", "b").String() + _, err := c.Parse([]string{}) + assert.Error(t, err) +} + +func TestFlagMultipleValuesDefaultEnvarUnix(t *testing.T) { + app := newTestApp() + a := app.Flag("a", "").Envar("TEST_MULTIPLE_VALUES").Strings() + os.Setenv("TEST_MULTIPLE_VALUES", "123\n456\n") + _, err := app.Parse([]string{}) + assert.NoError(t, err) + assert.Equal(t, []string{"123", "456"}, *a) +} + +func TestFlagMultipleValuesDefaultEnvarWindows(t *testing.T) { + app := newTestApp() + a := app.Flag("a", "").Envar("TEST_MULTIPLE_VALUES").Strings() + os.Setenv("TEST_MULTIPLE_VALUES", "123\r\n456\r\n") + _, err := app.Parse([]string{}) + assert.NoError(t, err) + assert.Equal(t, []string{"123", "456"}, *a) +} + +func TestFlagMultipleValuesDefaultEnvarNonRepeatable(t *testing.T) { + c := newTestApp() + a := c.Flag("foo", "foo").Envar("TEST_MULTIPLE_VALUES_NON_REPEATABLE").String() + os.Setenv("TEST_MULTIPLE_VALUES_NON_REPEATABLE", "123\n456") + _, err := c.Parse([]string{}) + assert.NoError(t, err) + assert.Equal(t, "123\n456", *a) +} + +func TestFlagHintAction(t *testing.T) { + c := newTestApp() + + action := func() []string { + return []string{"opt1", "opt2"} + } + + a := c.Flag("foo", "foo").HintAction(action) + args := a.resolveCompletions() + assert.Equal(t, []string{"opt1", "opt2"}, args) +} + +func TestFlagHintOptions(t *testing.T) { + c := newTestApp() + + a := c.Flag("foo", "foo").HintOptions("opt1", "opt2") + args := a.resolveCompletions() + assert.Equal(t, []string{"opt1", "opt2"}, args) +} + +func TestFlagEnumVar(t *testing.T) { + c := newTestApp() + var bar string + + a := c.Flag("foo", "foo") + a.Enum("opt1", "opt2") + b := c.Flag("bar", "bar") + b.EnumVar(&bar, "opt3", "opt4") + + args := a.resolveCompletions() + assert.Equal(t, []string{"opt1", "opt2"}, args) + + args = b.resolveCompletions() + assert.Equal(t, []string{"opt3", "opt4"}, args) +} + +func TestMultiHintOptions(t *testing.T) { + c := newTestApp() + + a := c.Flag("foo", "foo").HintOptions("opt1").HintOptions("opt2") + args := a.resolveCompletions() + assert.Equal(t, []string{"opt1", "opt2"}, args) +} +func TestMultiHintActions(t *testing.T) { + c := newTestApp() + + a := c.Flag("foo", "foo"). + HintAction(func() []string { + return []string{"opt1"} + }). + HintAction(func() []string { + return []string{"opt2"} + }) + args := a.resolveCompletions() + assert.Equal(t, []string{"opt1", "opt2"}, args) +} + +func TestCombinationHintActionsOptions(t *testing.T) { + c := newTestApp() + + a := c.Flag("foo", "foo").HintAction(func() []string { + return []string{"opt1"} + }).HintOptions("opt2") + args := a.resolveCompletions() + assert.Equal(t, []string{"opt1", "opt2"}, args) +} + +func TestCombinationEnumActions(t *testing.T) { + c := newTestApp() + var foo string + + a := c.Flag("foo", "foo"). + HintAction(func() []string { + return []string{"opt1", "opt2"} + }) + a.Enum("opt3", "opt4") + + b := c.Flag("bar", "bar"). + HintAction(func() []string { + return []string{"opt5", "opt6"} + }) + b.EnumVar(&foo, "opt3", "opt4") + + // Provided HintActions should override automatically generated Enum options. + args := a.resolveCompletions() + assert.Equal(t, []string{"opt1", "opt2"}, args) + + args = b.resolveCompletions() + assert.Equal(t, []string{"opt5", "opt6"}, args) +} + +func TestCombinationEnumOptions(t *testing.T) { + c := newTestApp() + var foo string + + a := c.Flag("foo", "foo").HintOptions("opt1", "opt2") + a.Enum("opt3", "opt4") + + b := c.Flag("bar", "bar").HintOptions("opt5", "opt6") + b.EnumVar(&foo, "opt3", "opt4") + + // Provided HintOptions should override automatically generated Enum options. + args := a.resolveCompletions() + assert.Equal(t, []string{"opt1", "opt2"}, args) + + args = b.resolveCompletions() + assert.Equal(t, []string{"opt5", "opt6"}, args) + +} diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/global.go b/vendor/gopkg.in/alecthomas/kingpin.v2/global.go new file mode 100644 index 0000000..10a2913 --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/global.go @@ -0,0 +1,94 @@ +package kingpin + +import ( + "os" + "path/filepath" +) + +var ( + // CommandLine is the default Kingpin parser. + CommandLine = New(filepath.Base(os.Args[0]), "") + // Global help flag. Exposed for user customisation. + HelpFlag = CommandLine.HelpFlag + // Top-level help command. Exposed for user customisation. May be nil. + HelpCommand = CommandLine.HelpCommand + // Global version flag. Exposed for user customisation. May be nil. + VersionFlag = CommandLine.VersionFlag +) + +// Command adds a new command to the default parser. +func Command(name, help string) *CmdClause { + return CommandLine.Command(name, help) +} + +// Flag adds a new flag to the default parser. +func Flag(name, help string) *FlagClause { + return CommandLine.Flag(name, help) +} + +// Arg adds a new argument to the top-level of the default parser. +func Arg(name, help string) *ArgClause { + return CommandLine.Arg(name, help) +} + +// Parse and return the selected command. Will call the termination handler if +// an error is encountered. +func Parse() string { + selected := MustParse(CommandLine.Parse(os.Args[1:])) + if selected == "" && CommandLine.cmdGroup.have() { + Usage() + CommandLine.terminate(0) + } + return selected +} + +// Errorf prints an error message to stderr. +func Errorf(format string, args ...interface{}) { + CommandLine.Errorf(format, args...) +} + +// Fatalf prints an error message to stderr and exits. +func Fatalf(format string, args ...interface{}) { + CommandLine.Fatalf(format, args...) +} + +// FatalIfError prints an error and exits if err is not nil. The error is printed +// with the given prefix. +func FatalIfError(err error, format string, args ...interface{}) { + CommandLine.FatalIfError(err, format, args...) +} + +// FatalUsage prints an error message followed by usage information, then +// exits with a non-zero status. +func FatalUsage(format string, args ...interface{}) { + CommandLine.FatalUsage(format, args...) +} + +// FatalUsageContext writes a printf formatted error message to stderr, then +// usage information for the given ParseContext, before exiting. +func FatalUsageContext(context *ParseContext, format string, args ...interface{}) { + CommandLine.FatalUsageContext(context, format, args...) +} + +// Usage prints usage to stderr. +func Usage() { + CommandLine.Usage(os.Args[1:]) +} + +// Set global usage template to use (defaults to DefaultUsageTemplate). +func UsageTemplate(template string) *Application { + return CommandLine.UsageTemplate(template) +} + +// MustParse can be used with app.Parse(args) to exit with an error if parsing fails. +func MustParse(command string, err error) string { + if err != nil { + Fatalf("%s, try --help", err) + } + return command +} + +// Version adds a flag for displaying the application version number. +func Version(version string) *Application { + return CommandLine.Version(version) +} diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/guesswidth.go b/vendor/gopkg.in/alecthomas/kingpin.v2/guesswidth.go new file mode 100644 index 0000000..a269531 --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/guesswidth.go @@ -0,0 +1,9 @@ +// +build appengine !linux,!freebsd,!darwin,!dragonfly,!netbsd,!openbsd + +package kingpin + +import "io" + +func guessWidth(w io.Writer) int { + return 80 +} diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/guesswidth_unix.go b/vendor/gopkg.in/alecthomas/kingpin.v2/guesswidth_unix.go new file mode 100644 index 0000000..ad8163f --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/guesswidth_unix.go @@ -0,0 +1,38 @@ +// +build !appengine,linux freebsd darwin dragonfly netbsd openbsd + +package kingpin + +import ( + "io" + "os" + "strconv" + "syscall" + "unsafe" +) + +func guessWidth(w io.Writer) int { + // check if COLUMNS env is set to comply with + // http://pubs.opengroup.org/onlinepubs/009604499/basedefs/xbd_chap08.html + colsStr := os.Getenv("COLUMNS") + if colsStr != "" { + if cols, err := strconv.Atoi(colsStr); err == nil { + return cols + } + } + + if t, ok := w.(*os.File); ok { + fd := t.Fd() + var dimensions [4]uint16 + + if _, _, err := syscall.Syscall6( + syscall.SYS_IOCTL, + uintptr(fd), + uintptr(syscall.TIOCGWINSZ), + uintptr(unsafe.Pointer(&dimensions)), + 0, 0, 0, + ); err == 0 { + return int(dimensions[1]) + } + } + return 80 +} diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/model.go b/vendor/gopkg.in/alecthomas/kingpin.v2/model.go new file mode 100644 index 0000000..a4ee83b --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/model.go @@ -0,0 +1,227 @@ +package kingpin + +import ( + "fmt" + "strconv" + "strings" +) + +// Data model for Kingpin command-line structure. + +type FlagGroupModel struct { + Flags []*FlagModel +} + +func (f *FlagGroupModel) FlagSummary() string { + out := []string{} + count := 0 + for _, flag := range f.Flags { + if flag.Name != "help" { + count++ + } + if flag.Required { + if flag.IsBoolFlag() { + out = append(out, fmt.Sprintf("--[no-]%s", flag.Name)) + } else { + out = append(out, fmt.Sprintf("--%s=%s", flag.Name, flag.FormatPlaceHolder())) + } + } + } + if count != len(out) { + out = append(out, "[]") + } + return strings.Join(out, " ") +} + +type FlagModel struct { + Name string + Help string + Short rune + Default []string + Envar string + PlaceHolder string + Required bool + Hidden bool + Value Value +} + +func (f *FlagModel) String() string { + return f.Value.String() +} + +func (f *FlagModel) IsBoolFlag() bool { + if fl, ok := f.Value.(boolFlag); ok { + return fl.IsBoolFlag() + } + return false +} + +func (f *FlagModel) FormatPlaceHolder() string { + if f.PlaceHolder != "" { + return f.PlaceHolder + } + if len(f.Default) > 0 { + ellipsis := "" + if len(f.Default) > 1 { + ellipsis = "..." + } + if _, ok := f.Value.(*stringValue); ok { + return strconv.Quote(f.Default[0]) + ellipsis + } + return f.Default[0] + ellipsis + } + return strings.ToUpper(f.Name) +} + +type ArgGroupModel struct { + Args []*ArgModel +} + +func (a *ArgGroupModel) ArgSummary() string { + depth := 0 + out := []string{} + for _, arg := range a.Args { + h := "<" + arg.Name + ">" + if !arg.Required { + h = "[" + h + depth++ + } + out = append(out, h) + } + out[len(out)-1] = out[len(out)-1] + strings.Repeat("]", depth) + return strings.Join(out, " ") +} + +type ArgModel struct { + Name string + Help string + Default []string + Envar string + Required bool + Value Value +} + +func (a *ArgModel) String() string { + return a.Value.String() +} + +type CmdGroupModel struct { + Commands []*CmdModel +} + +func (c *CmdGroupModel) FlattenedCommands() (out []*CmdModel) { + for _, cmd := range c.Commands { + if len(cmd.Commands) == 0 { + out = append(out, cmd) + } + out = append(out, cmd.FlattenedCommands()...) + } + return +} + +type CmdModel struct { + Name string + Aliases []string + Help string + FullCommand string + Depth int + Hidden bool + Default bool + *FlagGroupModel + *ArgGroupModel + *CmdGroupModel +} + +func (c *CmdModel) String() string { + return c.FullCommand +} + +type ApplicationModel struct { + Name string + Help string + Version string + Author string + *ArgGroupModel + *CmdGroupModel + *FlagGroupModel +} + +func (a *Application) Model() *ApplicationModel { + return &ApplicationModel{ + Name: a.Name, + Help: a.Help, + Version: a.version, + Author: a.author, + FlagGroupModel: a.flagGroup.Model(), + ArgGroupModel: a.argGroup.Model(), + CmdGroupModel: a.cmdGroup.Model(), + } +} + +func (a *argGroup) Model() *ArgGroupModel { + m := &ArgGroupModel{} + for _, arg := range a.args { + m.Args = append(m.Args, arg.Model()) + } + return m +} + +func (a *ArgClause) Model() *ArgModel { + return &ArgModel{ + Name: a.name, + Help: a.help, + Default: a.defaultValues, + Envar: a.envar, + Required: a.required, + Value: a.value, + } +} + +func (f *flagGroup) Model() *FlagGroupModel { + m := &FlagGroupModel{} + for _, fl := range f.flagOrder { + m.Flags = append(m.Flags, fl.Model()) + } + return m +} + +func (f *FlagClause) Model() *FlagModel { + return &FlagModel{ + Name: f.name, + Help: f.help, + Short: rune(f.shorthand), + Default: f.defaultValues, + Envar: f.envar, + PlaceHolder: f.placeholder, + Required: f.required, + Hidden: f.hidden, + Value: f.value, + } +} + +func (c *cmdGroup) Model() *CmdGroupModel { + m := &CmdGroupModel{} + for _, cm := range c.commandOrder { + m.Commands = append(m.Commands, cm.Model()) + } + return m +} + +func (c *CmdClause) Model() *CmdModel { + depth := 0 + for i := c; i != nil; i = i.parent { + depth++ + } + return &CmdModel{ + Name: c.name, + Aliases: c.aliases, + Help: c.help, + Depth: depth, + Hidden: c.hidden, + Default: c.isDefault, + FullCommand: c.FullCommand(), + FlagGroupModel: c.flagGroup.Model(), + ArgGroupModel: c.argGroup.Model(), + CmdGroupModel: c.cmdGroup.Model(), + } +} diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/parser.go b/vendor/gopkg.in/alecthomas/kingpin.v2/parser.go new file mode 100644 index 0000000..2a18351 --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/parser.go @@ -0,0 +1,396 @@ +package kingpin + +import ( + "bufio" + "fmt" + "os" + "strings" + "unicode/utf8" +) + +type TokenType int + +// Token types. +const ( + TokenShort TokenType = iota + TokenLong + TokenArg + TokenError + TokenEOL +) + +func (t TokenType) String() string { + switch t { + case TokenShort: + return "short flag" + case TokenLong: + return "long flag" + case TokenArg: + return "argument" + case TokenError: + return "error" + case TokenEOL: + return "" + } + return "?" +} + +var ( + TokenEOLMarker = Token{-1, TokenEOL, ""} +) + +type Token struct { + Index int + Type TokenType + Value string +} + +func (t *Token) Equal(o *Token) bool { + return t.Index == o.Index +} + +func (t *Token) IsFlag() bool { + return t.Type == TokenShort || t.Type == TokenLong +} + +func (t *Token) IsEOF() bool { + return t.Type == TokenEOL +} + +func (t *Token) String() string { + switch t.Type { + case TokenShort: + return "-" + t.Value + case TokenLong: + return "--" + t.Value + case TokenArg: + return t.Value + case TokenError: + return "error: " + t.Value + case TokenEOL: + return "" + default: + panic("unhandled type") + } +} + +// A union of possible elements in a parse stack. +type ParseElement struct { + // Clause is either *CmdClause, *ArgClause or *FlagClause. + Clause interface{} + // Value is corresponding value for an ArgClause or FlagClause (if any). + Value *string +} + +// ParseContext holds the current context of the parser. When passed to +// Action() callbacks Elements will be fully populated with *FlagClause, +// *ArgClause and *CmdClause values and their corresponding arguments (if +// any). +type ParseContext struct { + SelectedCommand *CmdClause + ignoreDefault bool + argsOnly bool + peek []*Token + argi int // Index of current command-line arg we're processing. + args []string + rawArgs []string + flags *flagGroup + arguments *argGroup + argumenti int // Cursor into arguments + // Flags, arguments and commands encountered and collected during parse. + Elements []*ParseElement +} + +func (p *ParseContext) nextArg() *ArgClause { + if p.argumenti >= len(p.arguments.args) { + return nil + } + arg := p.arguments.args[p.argumenti] + if !arg.consumesRemainder() { + p.argumenti++ + } + return arg +} + +func (p *ParseContext) next() { + p.argi++ + p.args = p.args[1:] +} + +// HasTrailingArgs returns true if there are unparsed command-line arguments. +// This can occur if the parser can not match remaining arguments. +func (p *ParseContext) HasTrailingArgs() bool { + return len(p.args) > 0 +} + +func tokenize(args []string, ignoreDefault bool) *ParseContext { + return &ParseContext{ + ignoreDefault: ignoreDefault, + args: args, + rawArgs: args, + flags: newFlagGroup(), + arguments: newArgGroup(), + } +} + +func (p *ParseContext) mergeFlags(flags *flagGroup) { + for _, flag := range flags.flagOrder { + if flag.shorthand != 0 { + p.flags.short[string(flag.shorthand)] = flag + } + p.flags.long[flag.name] = flag + p.flags.flagOrder = append(p.flags.flagOrder, flag) + } +} + +func (p *ParseContext) mergeArgs(args *argGroup) { + for _, arg := range args.args { + p.arguments.args = append(p.arguments.args, arg) + } +} + +func (p *ParseContext) EOL() bool { + return p.Peek().Type == TokenEOL +} + +func (p *ParseContext) Error() bool { + return p.Peek().Type == TokenError +} + +// Next token in the parse context. +func (p *ParseContext) Next() *Token { + if len(p.peek) > 0 { + return p.pop() + } + + // End of tokens. + if len(p.args) == 0 { + return &Token{Index: p.argi, Type: TokenEOL} + } + + arg := p.args[0] + p.next() + + if p.argsOnly { + return &Token{p.argi, TokenArg, arg} + } + + // All remaining args are passed directly. + if arg == "--" { + p.argsOnly = true + return p.Next() + } + + if strings.HasPrefix(arg, "--") { + parts := strings.SplitN(arg[2:], "=", 2) + token := &Token{p.argi, TokenLong, parts[0]} + if len(parts) == 2 { + p.Push(&Token{p.argi, TokenArg, parts[1]}) + } + return token + } + + if strings.HasPrefix(arg, "-") { + if len(arg) == 1 { + return &Token{Index: p.argi, Type: TokenShort} + } + shortRune, size := utf8.DecodeRuneInString(arg[1:]) + short := string(shortRune) + flag, ok := p.flags.short[short] + // Not a known short flag, we'll just return it anyway. + if !ok { + } else if fb, ok := flag.value.(boolFlag); ok && fb.IsBoolFlag() { + // Bool short flag. + } else { + // Short flag with combined argument: -fARG + token := &Token{p.argi, TokenShort, short} + if len(arg) > size+1 { + p.Push(&Token{p.argi, TokenArg, arg[size+1:]}) + } + return token + } + + if len(arg) > size+1 { + p.args = append([]string{"-" + arg[size+1:]}, p.args...) + } + return &Token{p.argi, TokenShort, short} + } else if strings.HasPrefix(arg, "@") { + expanded, err := ExpandArgsFromFile(arg[1:]) + if err != nil { + return &Token{p.argi, TokenError, err.Error()} + } + if len(p.args) == 0 { + p.args = expanded + } else { + p.args = append(expanded, p.args...) + } + return p.Next() + } + + return &Token{p.argi, TokenArg, arg} +} + +func (p *ParseContext) Peek() *Token { + if len(p.peek) == 0 { + return p.Push(p.Next()) + } + return p.peek[len(p.peek)-1] +} + +func (p *ParseContext) Push(token *Token) *Token { + p.peek = append(p.peek, token) + return token +} + +func (p *ParseContext) pop() *Token { + end := len(p.peek) - 1 + token := p.peek[end] + p.peek = p.peek[0:end] + return token +} + +func (p *ParseContext) String() string { + return p.SelectedCommand.FullCommand() +} + +func (p *ParseContext) matchedFlag(flag *FlagClause, value string) { + p.Elements = append(p.Elements, &ParseElement{Clause: flag, Value: &value}) +} + +func (p *ParseContext) matchedArg(arg *ArgClause, value string) { + p.Elements = append(p.Elements, &ParseElement{Clause: arg, Value: &value}) +} + +func (p *ParseContext) matchedCmd(cmd *CmdClause) { + p.Elements = append(p.Elements, &ParseElement{Clause: cmd}) + p.mergeFlags(cmd.flagGroup) + p.mergeArgs(cmd.argGroup) + p.SelectedCommand = cmd +} + +// Expand arguments from a file. Lines starting with # will be treated as comments. +func ExpandArgsFromFile(filename string) (out []string, err error) { + if filename == "" { + return nil, fmt.Errorf("expected @ file to expand arguments from") + } + r, err := os.Open(filename) + if err != nil { + return nil, fmt.Errorf("failed to open arguments file %q: %s", filename, err) + } + defer r.Close() + scanner := bufio.NewScanner(r) + for scanner.Scan() { + line := scanner.Text() + if strings.HasPrefix(line, "#") { + continue + } + out = append(out, line) + } + err = scanner.Err() + if err != nil { + return nil, fmt.Errorf("failed to read arguments from %q: %s", filename, err) + } + return +} + +func parse(context *ParseContext, app *Application) (err error) { + context.mergeFlags(app.flagGroup) + context.mergeArgs(app.argGroup) + + cmds := app.cmdGroup + ignoreDefault := context.ignoreDefault + +loop: + for !context.EOL() && !context.Error() { + token := context.Peek() + + switch token.Type { + case TokenLong, TokenShort: + if flag, err := context.flags.parse(context); err != nil { + if !ignoreDefault { + if cmd := cmds.defaultSubcommand(); cmd != nil { + cmd.completionAlts = cmds.cmdNames() + context.matchedCmd(cmd) + cmds = cmd.cmdGroup + break + } + } + return err + } else if flag == HelpFlag { + ignoreDefault = true + } + + case TokenArg: + if cmds.have() { + selectedDefault := false + cmd, ok := cmds.commands[token.String()] + if !ok { + if !ignoreDefault { + if cmd = cmds.defaultSubcommand(); cmd != nil { + cmd.completionAlts = cmds.cmdNames() + selectedDefault = true + } + } + if cmd == nil { + return fmt.Errorf("expected command but got %q", token) + } + } + if cmd == HelpCommand { + ignoreDefault = true + } + cmd.completionAlts = nil + context.matchedCmd(cmd) + cmds = cmd.cmdGroup + if !selectedDefault { + context.Next() + } + } else if context.arguments.have() { + if app.noInterspersed { + // no more flags + context.argsOnly = true + } + arg := context.nextArg() + if arg == nil { + break loop + } + context.matchedArg(arg, token.String()) + context.Next() + } else { + break loop + } + + case TokenEOL: + break loop + } + } + + // Move to innermost default command. + for !ignoreDefault { + if cmd := cmds.defaultSubcommand(); cmd != nil { + cmd.completionAlts = cmds.cmdNames() + context.matchedCmd(cmd) + cmds = cmd.cmdGroup + } else { + break + } + } + + if context.Error() { + return fmt.Errorf("%s", context.Peek().Value) + } + + if !context.EOL() { + return fmt.Errorf("unexpected %s", context.Peek()) + } + + // Set defaults for all remaining args. + for arg := context.nextArg(); arg != nil && !arg.consumesRemainder(); arg = context.nextArg() { + for _, defaultValue := range arg.defaultValues { + if err := arg.value.Set(defaultValue); err != nil { + return fmt.Errorf("invalid default value '%s' for argument '%s'", defaultValue, arg.name) + } + } + } + + return +} diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/parser_test.go b/vendor/gopkg.in/alecthomas/kingpin.v2/parser_test.go new file mode 100644 index 0000000..43dfde9 --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/parser_test.go @@ -0,0 +1,122 @@ +package kingpin + +import ( + "io/ioutil" + "os" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestParserExpandFromFile(t *testing.T) { + f, err := ioutil.TempFile("", "") + assert.NoError(t, err) + defer os.Remove(f.Name()) + f.WriteString("hello\nworld\n") + f.Close() + + app := New("test", "") + arg0 := app.Arg("arg0", "").String() + arg1 := app.Arg("arg1", "").String() + + _, err = app.Parse([]string{"@" + f.Name()}) + assert.NoError(t, err) + assert.Equal(t, "hello", *arg0) + assert.Equal(t, "world", *arg1) +} + +func TestParserExpandFromFileLeadingArg(t *testing.T) { + f, err := ioutil.TempFile("", "") + assert.NoError(t, err) + defer os.Remove(f.Name()) + f.WriteString("hello\nworld\n") + f.Close() + + app := New("test", "") + arg0 := app.Arg("arg0", "").String() + arg1 := app.Arg("arg1", "").String() + arg2 := app.Arg("arg2", "").String() + + _, err = app.Parse([]string{"prefix", "@" + f.Name()}) + assert.NoError(t, err) + assert.Equal(t, "prefix", *arg0) + assert.Equal(t, "hello", *arg1) + assert.Equal(t, "world", *arg2) +} + +func TestParserExpandFromFileTrailingArg(t *testing.T) { + f, err := ioutil.TempFile("", "") + assert.NoError(t, err) + defer os.Remove(f.Name()) + f.WriteString("hello\nworld\n") + f.Close() + + app := New("test", "") + arg0 := app.Arg("arg0", "").String() + arg1 := app.Arg("arg1", "").String() + arg2 := app.Arg("arg2", "").String() + + _, err = app.Parse([]string{"@" + f.Name(), "suffix"}) + assert.NoError(t, err) + assert.Equal(t, "hello", *arg0) + assert.Equal(t, "world", *arg1) + assert.Equal(t, "suffix", *arg2) +} + +func TestParserExpandFromFileMultipleSurroundingArgs(t *testing.T) { + f, err := ioutil.TempFile("", "") + assert.NoError(t, err) + defer os.Remove(f.Name()) + f.WriteString("hello\nworld\n") + f.Close() + + app := New("test", "") + arg0 := app.Arg("arg0", "").String() + arg1 := app.Arg("arg1", "").String() + arg2 := app.Arg("arg2", "").String() + arg3 := app.Arg("arg3", "").String() + + _, err = app.Parse([]string{"prefix", "@" + f.Name(), "suffix"}) + assert.NoError(t, err) + assert.Equal(t, "prefix", *arg0) + assert.Equal(t, "hello", *arg1) + assert.Equal(t, "world", *arg2) + assert.Equal(t, "suffix", *arg3) +} + +func TestParserExpandFromFileMultipleFlags(t *testing.T) { + f, err := ioutil.TempFile("", "") + assert.NoError(t, err) + defer os.Remove(f.Name()) + f.WriteString("--flag1=f1\n--flag2=f2\n") + f.Close() + + app := New("test", "") + flag0 := app.Flag("flag0", "").String() + flag1 := app.Flag("flag1", "").String() + flag2 := app.Flag("flag2", "").String() + flag3 := app.Flag("flag3", "").String() + + _, err = app.Parse([]string{"--flag0=f0", "@" + f.Name(), "--flag3=f3"}) + assert.NoError(t, err) + assert.Equal(t, "f0", *flag0) + assert.Equal(t, "f1", *flag1) + assert.Equal(t, "f2", *flag2) + assert.Equal(t, "f3", *flag3) +} + +func TestParseContextPush(t *testing.T) { + app := New("test", "") + app.Command("foo", "").Command("bar", "") + c := tokenize([]string{"foo", "bar"}, false) + a := c.Next() + assert.Equal(t, TokenArg, a.Type) + b := c.Next() + assert.Equal(t, TokenArg, b.Type) + c.Push(b) + c.Push(a) + a = c.Next() + assert.Equal(t, "foo", a.Value) + b = c.Next() + assert.Equal(t, "bar", b.Value) +} diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/parsers.go b/vendor/gopkg.in/alecthomas/kingpin.v2/parsers.go new file mode 100644 index 0000000..d9ad57e --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/parsers.go @@ -0,0 +1,212 @@ +package kingpin + +import ( + "net" + "net/url" + "os" + "time" + + "github.com/alecthomas/units" +) + +type Settings interface { + SetValue(value Value) +} + +type parserMixin struct { + value Value + required bool +} + +func (p *parserMixin) SetValue(value Value) { + p.value = value +} + +// StringMap provides key=value parsing into a map. +func (p *parserMixin) StringMap() (target *map[string]string) { + target = &(map[string]string{}) + p.StringMapVar(target) + return +} + +// Duration sets the parser to a time.Duration parser. +func (p *parserMixin) Duration() (target *time.Duration) { + target = new(time.Duration) + p.DurationVar(target) + return +} + +// Bytes parses numeric byte units. eg. 1.5KB +func (p *parserMixin) Bytes() (target *units.Base2Bytes) { + target = new(units.Base2Bytes) + p.BytesVar(target) + return +} + +// IP sets the parser to a net.IP parser. +func (p *parserMixin) IP() (target *net.IP) { + target = new(net.IP) + p.IPVar(target) + return +} + +// TCP (host:port) address. +func (p *parserMixin) TCP() (target **net.TCPAddr) { + target = new(*net.TCPAddr) + p.TCPVar(target) + return +} + +// TCPVar (host:port) address. +func (p *parserMixin) TCPVar(target **net.TCPAddr) { + p.SetValue(newTCPAddrValue(target)) +} + +// ExistingFile sets the parser to one that requires and returns an existing file. +func (p *parserMixin) ExistingFile() (target *string) { + target = new(string) + p.ExistingFileVar(target) + return +} + +// ExistingDir sets the parser to one that requires and returns an existing directory. +func (p *parserMixin) ExistingDir() (target *string) { + target = new(string) + p.ExistingDirVar(target) + return +} + +// ExistingFileOrDir sets the parser to one that requires and returns an existing file OR directory. +func (p *parserMixin) ExistingFileOrDir() (target *string) { + target = new(string) + p.ExistingFileOrDirVar(target) + return +} + +// File returns an os.File against an existing file. +func (p *parserMixin) File() (target **os.File) { + target = new(*os.File) + p.FileVar(target) + return +} + +// File attempts to open a File with os.OpenFile(flag, perm). +func (p *parserMixin) OpenFile(flag int, perm os.FileMode) (target **os.File) { + target = new(*os.File) + p.OpenFileVar(target, flag, perm) + return +} + +// URL provides a valid, parsed url.URL. +func (p *parserMixin) URL() (target **url.URL) { + target = new(*url.URL) + p.URLVar(target) + return +} + +// StringMap provides key=value parsing into a map. +func (p *parserMixin) StringMapVar(target *map[string]string) { + p.SetValue(newStringMapValue(target)) +} + +// Float sets the parser to a float64 parser. +func (p *parserMixin) Float() (target *float64) { + return p.Float64() +} + +// Float sets the parser to a float64 parser. +func (p *parserMixin) FloatVar(target *float64) { + p.Float64Var(target) +} + +// Duration sets the parser to a time.Duration parser. +func (p *parserMixin) DurationVar(target *time.Duration) { + p.SetValue(newDurationValue(target)) +} + +// BytesVar parses numeric byte units. eg. 1.5KB +func (p *parserMixin) BytesVar(target *units.Base2Bytes) { + p.SetValue(newBytesValue(target)) +} + +// IP sets the parser to a net.IP parser. +func (p *parserMixin) IPVar(target *net.IP) { + p.SetValue(newIPValue(target)) +} + +// ExistingFile sets the parser to one that requires and returns an existing file. +func (p *parserMixin) ExistingFileVar(target *string) { + p.SetValue(newExistingFileValue(target)) +} + +// ExistingDir sets the parser to one that requires and returns an existing directory. +func (p *parserMixin) ExistingDirVar(target *string) { + p.SetValue(newExistingDirValue(target)) +} + +// ExistingDir sets the parser to one that requires and returns an existing directory. +func (p *parserMixin) ExistingFileOrDirVar(target *string) { + p.SetValue(newExistingFileOrDirValue(target)) +} + +// FileVar opens an existing file. +func (p *parserMixin) FileVar(target **os.File) { + p.SetValue(newFileValue(target, os.O_RDONLY, 0)) +} + +// OpenFileVar calls os.OpenFile(flag, perm) +func (p *parserMixin) OpenFileVar(target **os.File, flag int, perm os.FileMode) { + p.SetValue(newFileValue(target, flag, perm)) +} + +// URL provides a valid, parsed url.URL. +func (p *parserMixin) URLVar(target **url.URL) { + p.SetValue(newURLValue(target)) +} + +// URLList provides a parsed list of url.URL values. +func (p *parserMixin) URLList() (target *[]*url.URL) { + target = new([]*url.URL) + p.URLListVar(target) + return +} + +// URLListVar provides a parsed list of url.URL values. +func (p *parserMixin) URLListVar(target *[]*url.URL) { + p.SetValue(newURLListValue(target)) +} + +// Enum allows a value from a set of options. +func (p *parserMixin) Enum(options ...string) (target *string) { + target = new(string) + p.EnumVar(target, options...) + return +} + +// EnumVar allows a value from a set of options. +func (p *parserMixin) EnumVar(target *string, options ...string) { + p.SetValue(newEnumFlag(target, options...)) +} + +// Enums allows a set of values from a set of options. +func (p *parserMixin) Enums(options ...string) (target *[]string) { + target = new([]string) + p.EnumsVar(target, options...) + return +} + +// EnumVar allows a value from a set of options. +func (p *parserMixin) EnumsVar(target *[]string, options ...string) { + p.SetValue(newEnumsFlag(target, options...)) +} + +// A Counter increments a number each time it is encountered. +func (p *parserMixin) Counter() (target *int) { + target = new(int) + p.CounterVar(target) + return +} + +func (p *parserMixin) CounterVar(target *int) { + p.SetValue(newCounterValue(target)) +} diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/parsers_test.go b/vendor/gopkg.in/alecthomas/kingpin.v2/parsers_test.go new file mode 100644 index 0000000..81708c7 --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/parsers_test.go @@ -0,0 +1,98 @@ +package kingpin + +import ( + "io/ioutil" + "net" + "net/url" + "os" + + "github.com/stretchr/testify/assert" + + "testing" +) + +func TestParseStrings(t *testing.T) { + p := parserMixin{} + v := p.Strings() + p.value.Set("a") + p.value.Set("b") + assert.Equal(t, []string{"a", "b"}, *v) +} + +func TestStringsStringer(t *testing.T) { + target := []string{} + v := newAccumulator(&target, func(v interface{}) Value { return newStringValue(v.(*string)) }) + v.Set("hello") + v.Set("world") + assert.Equal(t, "hello,world", v.String()) +} + +func TestParseStringMap(t *testing.T) { + p := parserMixin{} + v := p.StringMap() + p.value.Set("a:b") + p.value.Set("b:c") + assert.Equal(t, map[string]string{"a": "b", "b": "c"}, *v) +} + +func TestParseIP(t *testing.T) { + p := parserMixin{} + v := p.IP() + p.value.Set("10.1.1.2") + ip := net.ParseIP("10.1.1.2") + assert.Equal(t, ip, *v) +} + +func TestParseURL(t *testing.T) { + p := parserMixin{} + v := p.URL() + p.value.Set("http://w3.org") + u, err := url.Parse("http://w3.org") + assert.NoError(t, err) + assert.Equal(t, *u, **v) +} + +func TestParseExistingFile(t *testing.T) { + f, err := ioutil.TempFile("", "") + if err != nil { + t.Fatal(err) + } + defer f.Close() + defer os.Remove(f.Name()) + + p := parserMixin{} + v := p.ExistingFile() + err = p.value.Set(f.Name()) + assert.NoError(t, err) + assert.Equal(t, f.Name(), *v) + err = p.value.Set("/etc/hostsDEFINITELYMISSING") + assert.Error(t, err) +} + +func TestParseTCPAddr(t *testing.T) { + p := parserMixin{} + v := p.TCP() + err := p.value.Set("127.0.0.1:1234") + assert.NoError(t, err) + expected, err := net.ResolveTCPAddr("tcp", "127.0.0.1:1234") + assert.NoError(t, err) + assert.Equal(t, *expected, **v) +} + +func TestParseTCPAddrList(t *testing.T) { + p := parserMixin{} + _ = p.TCPList() + err := p.value.Set("127.0.0.1:1234") + assert.NoError(t, err) + err = p.value.Set("127.0.0.1:1235") + assert.NoError(t, err) + assert.Equal(t, "127.0.0.1:1234,127.0.0.1:1235", p.value.String()) +} + +func TestFloat32(t *testing.T) { + p := parserMixin{} + v := p.Float32() + err := p.value.Set("123.45") + assert.NoError(t, err) + assert.InEpsilon(t, 123.45, *v, 0.001) +} diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/templates.go b/vendor/gopkg.in/alecthomas/kingpin.v2/templates.go new file mode 100644 index 0000000..97b5c9f --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/templates.go @@ -0,0 +1,262 @@ +package kingpin + +// Default usage template. +var DefaultUsageTemplate = `{{define "FormatCommand"}}\ +{{if .FlagSummary}} {{.FlagSummary}}{{end}}\ +{{range .Args}} {{if not .Required}}[{{end}}<{{.Name}}>{{if .Value|IsCumulative}}...{{end}}{{if not .Required}}]{{end}}{{end}}\ +{{end}}\ + +{{define "FormatCommands"}}\ +{{range .FlattenedCommands}}\ +{{if not .Hidden}}\ + {{.FullCommand}}{{if .Default}}*{{end}}{{template "FormatCommand" .}} +{{.Help|Wrap 4}} +{{end}}\ +{{end}}\ +{{end}}\ + +{{define "FormatUsage"}}\ +{{template "FormatCommand" .}}{{if .Commands}} [ ...]{{end}} +{{if .Help}} +{{.Help|Wrap 0}}\ +{{end}}\ + +{{end}}\ + +{{if .Context.SelectedCommand}}\ +usage: {{.App.Name}} {{.Context.SelectedCommand}}{{template "FormatUsage" .Context.SelectedCommand}} +{{else}}\ +usage: {{.App.Name}}{{template "FormatUsage" .App}} +{{end}}\ +{{if .Context.Flags}}\ +Flags: +{{.Context.Flags|FlagsToTwoColumns|FormatTwoColumns}} +{{end}}\ +{{if .Context.Args}}\ +Args: +{{.Context.Args|ArgsToTwoColumns|FormatTwoColumns}} +{{end}}\ +{{if .Context.SelectedCommand}}\ +{{if len .Context.SelectedCommand.Commands}}\ +Subcommands: +{{template "FormatCommands" .Context.SelectedCommand}} +{{end}}\ +{{else if .App.Commands}}\ +Commands: +{{template "FormatCommands" .App}} +{{end}}\ +` + +// Usage template where command's optional flags are listed separately +var SeparateOptionalFlagsUsageTemplate = `{{define "FormatCommand"}}\ +{{if .FlagSummary}} {{.FlagSummary}}{{end}}\ +{{range .Args}} {{if not .Required}}[{{end}}<{{.Name}}>{{if .Value|IsCumulative}}...{{end}}{{if not .Required}}]{{end}}{{end}}\ +{{end}}\ + +{{define "FormatCommands"}}\ +{{range .FlattenedCommands}}\ +{{if not .Hidden}}\ + {{.FullCommand}}{{if .Default}}*{{end}}{{template "FormatCommand" .}} +{{.Help|Wrap 4}} +{{end}}\ +{{end}}\ +{{end}}\ + +{{define "FormatUsage"}}\ +{{template "FormatCommand" .}}{{if .Commands}} [ ...]{{end}} +{{if .Help}} +{{.Help|Wrap 0}}\ +{{end}}\ + +{{end}}\ +{{if .Context.SelectedCommand}}\ +usage: {{.App.Name}} {{.Context.SelectedCommand}}{{template "FormatUsage" .Context.SelectedCommand}} +{{else}}\ +usage: {{.App.Name}}{{template "FormatUsage" .App}} +{{end}}\ + +{{if .Context.Flags|RequiredFlags}}\ +Required flags: +{{.Context.Flags|RequiredFlags|FlagsToTwoColumns|FormatTwoColumns}} +{{end}}\ +{{if .Context.Flags|OptionalFlags}}\ +Optional flags: +{{.Context.Flags|OptionalFlags|FlagsToTwoColumns|FormatTwoColumns}} +{{end}}\ +{{if .Context.Args}}\ +Args: +{{.Context.Args|ArgsToTwoColumns|FormatTwoColumns}} +{{end}}\ +{{if .Context.SelectedCommand}}\ +Subcommands: +{{if .Context.SelectedCommand.Commands}}\ +{{template "FormatCommands" .Context.SelectedCommand}} +{{end}}\ +{{else if .App.Commands}}\ +Commands: +{{template "FormatCommands" .App}} +{{end}}\ +` + +// Usage template with compactly formatted commands. +var CompactUsageTemplate = `{{define "FormatCommand"}}\ +{{if .FlagSummary}} {{.FlagSummary}}{{end}}\ +{{range .Args}} {{if not .Required}}[{{end}}<{{.Name}}>{{if .Value|IsCumulative}}...{{end}}{{if not .Required}}]{{end}}{{end}}\ +{{end}}\ + +{{define "FormatCommandList"}}\ +{{range .}}\ +{{if not .Hidden}}\ +{{.Depth|Indent}}{{.Name}}{{if .Default}}*{{end}}{{template "FormatCommand" .}} +{{end}}\ +{{template "FormatCommandList" .Commands}}\ +{{end}}\ +{{end}}\ + +{{define "FormatUsage"}}\ +{{template "FormatCommand" .}}{{if .Commands}} [ ...]{{end}} +{{if .Help}} +{{.Help|Wrap 0}}\ +{{end}}\ + +{{end}}\ + +{{if .Context.SelectedCommand}}\ +usage: {{.App.Name}} {{.Context.SelectedCommand}}{{template "FormatUsage" .Context.SelectedCommand}} +{{else}}\ +usage: {{.App.Name}}{{template "FormatUsage" .App}} +{{end}}\ +{{if .Context.Flags}}\ +Flags: +{{.Context.Flags|FlagsToTwoColumns|FormatTwoColumns}} +{{end}}\ +{{if .Context.Args}}\ +Args: +{{.Context.Args|ArgsToTwoColumns|FormatTwoColumns}} +{{end}}\ +{{if .Context.SelectedCommand}}\ +{{if .Context.SelectedCommand.Commands}}\ +Commands: + {{.Context.SelectedCommand}} +{{template "FormatCommandList" .Context.SelectedCommand.Commands}} +{{end}}\ +{{else if .App.Commands}}\ +Commands: +{{template "FormatCommandList" .App.Commands}} +{{end}}\ +` + +var ManPageTemplate = `{{define "FormatFlags"}}\ +{{range .Flags}}\ +{{if not .Hidden}}\ +.TP +\fB{{if .Short}}-{{.Short|Char}}, {{end}}--{{.Name}}{{if not .IsBoolFlag}}={{.FormatPlaceHolder}}{{end}}\\fR +{{.Help}} +{{end}}\ +{{end}}\ +{{end}}\ + +{{define "FormatCommand"}}\ +{{if .FlagSummary}} {{.FlagSummary}}{{end}}\ +{{range .Args}} {{if not .Required}}[{{end}}<{{.Name}}{{if .Default}}*{{end}}>{{if .Value|IsCumulative}}...{{end}}{{if not .Required}}]{{end}}{{end}}\ +{{end}}\ + +{{define "FormatCommands"}}\ +{{range .FlattenedCommands}}\ +{{if not .Hidden}}\ +.SS +\fB{{.FullCommand}}{{template "FormatCommand" .}}\\fR +.PP +{{.Help}} +{{template "FormatFlags" .}}\ +{{end}}\ +{{end}}\ +{{end}}\ + +{{define "FormatUsage"}}\ +{{template "FormatCommand" .}}{{if .Commands}} [ ...]{{end}}\\fR +{{end}}\ + +.TH {{.App.Name}} 1 {{.App.Version}} "{{.App.Author}}" +.SH "NAME" +{{.App.Name}} +.SH "SYNOPSIS" +.TP +\fB{{.App.Name}}{{template "FormatUsage" .App}} +.SH "DESCRIPTION" +{{.App.Help}} +.SH "OPTIONS" +{{template "FormatFlags" .App}}\ +{{if .App.Commands}}\ +.SH "COMMANDS" +{{template "FormatCommands" .App}}\ +{{end}}\ +` + +// Default usage template. +var LongHelpTemplate = `{{define "FormatCommand"}}\ +{{if .FlagSummary}} {{.FlagSummary}}{{end}}\ +{{range .Args}} {{if not .Required}}[{{end}}<{{.Name}}>{{if .Value|IsCumulative}}...{{end}}{{if not .Required}}]{{end}}{{end}}\ +{{end}}\ + +{{define "FormatCommands"}}\ +{{range .FlattenedCommands}}\ +{{if not .Hidden}}\ + {{.FullCommand}}{{template "FormatCommand" .}} +{{.Help|Wrap 4}} +{{with .Flags|FlagsToTwoColumns}}{{FormatTwoColumnsWithIndent . 4 2}}{{end}} +{{end}}\ +{{end}}\ +{{end}}\ + +{{define "FormatUsage"}}\ +{{template "FormatCommand" .}}{{if .Commands}} [ ...]{{end}} +{{if .Help}} +{{.Help|Wrap 0}}\ +{{end}}\ + +{{end}}\ + +usage: {{.App.Name}}{{template "FormatUsage" .App}} +{{if .Context.Flags}}\ +Flags: +{{.Context.Flags|FlagsToTwoColumns|FormatTwoColumns}} +{{end}}\ +{{if .Context.Args}}\ +Args: +{{.Context.Args|ArgsToTwoColumns|FormatTwoColumns}} +{{end}}\ +{{if .App.Commands}}\ +Commands: +{{template "FormatCommands" .App}} +{{end}}\ +` + +var BashCompletionTemplate = ` +_{{.App.Name}}_bash_autocomplete() { + local cur prev opts base + COMPREPLY=() + cur="${COMP_WORDS[COMP_CWORD]}" + opts=$( ${COMP_WORDS[0]} --completion-bash ${COMP_WORDS[@]:1:$COMP_CWORD} ) + COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) + return 0 +} +complete -F _{{.App.Name}}_bash_autocomplete {{.App.Name}} + +` + +var ZshCompletionTemplate = ` +#compdef {{.App.Name}} +autoload -U compinit && compinit +autoload -U bashcompinit && bashcompinit + +_{{.App.Name}}_bash_autocomplete() { + local cur prev opts base + COMPREPLY=() + cur="${COMP_WORDS[COMP_CWORD]}" + opts=$( ${COMP_WORDS[0]} --completion-bash ${COMP_WORDS[@]:1:$COMP_CWORD} ) + COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) + return 0 +} +complete -F _{{.App.Name}}_bash_autocomplete {{.App.Name}} +` diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/usage.go b/vendor/gopkg.in/alecthomas/kingpin.v2/usage.go new file mode 100644 index 0000000..44af6f6 --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/usage.go @@ -0,0 +1,211 @@ +package kingpin + +import ( + "bytes" + "fmt" + "go/doc" + "io" + "strings" + + "github.com/alecthomas/template" +) + +var ( + preIndent = " " +) + +func formatTwoColumns(w io.Writer, indent, padding, width int, rows [][2]string) { + // Find size of first column. + s := 0 + for _, row := range rows { + if c := len(row[0]); c > s && c < 30 { + s = c + } + } + + indentStr := strings.Repeat(" ", indent) + offsetStr := strings.Repeat(" ", s+padding) + + for _, row := range rows { + buf := bytes.NewBuffer(nil) + doc.ToText(buf, row[1], "", preIndent, width-s-padding-indent) + lines := strings.Split(strings.TrimRight(buf.String(), "\n"), "\n") + fmt.Fprintf(w, "%s%-*s%*s", indentStr, s, row[0], padding, "") + if len(row[0]) >= 30 { + fmt.Fprintf(w, "\n%s%s", indentStr, offsetStr) + } + fmt.Fprintf(w, "%s\n", lines[0]) + for _, line := range lines[1:] { + fmt.Fprintf(w, "%s%s%s\n", indentStr, offsetStr, line) + } + } +} + +// Usage writes application usage to w. It parses args to determine +// appropriate help context, such as which command to show help for. +func (a *Application) Usage(args []string) { + context, err := a.parseContext(true, args) + a.FatalIfError(err, "") + if err := a.UsageForContextWithTemplate(context, 2, a.usageTemplate); err != nil { + panic(err) + } +} + +func formatAppUsage(app *ApplicationModel) string { + s := []string{app.Name} + if len(app.Flags) > 0 { + s = append(s, app.FlagSummary()) + } + if len(app.Args) > 0 { + s = append(s, app.ArgSummary()) + } + return strings.Join(s, " ") +} + +func formatCmdUsage(app *ApplicationModel, cmd *CmdModel) string { + s := []string{app.Name, cmd.String()} + if len(app.Flags) > 0 { + s = append(s, app.FlagSummary()) + } + if len(app.Args) > 0 { + s = append(s, app.ArgSummary()) + } + return strings.Join(s, " ") +} + +func formatFlag(haveShort bool, flag *FlagModel) string { + flagString := "" + if flag.Short != 0 { + flagString += fmt.Sprintf("-%c, --%s", flag.Short, flag.Name) + } else { + if haveShort { + flagString += fmt.Sprintf(" --%s", flag.Name) + } else { + flagString += fmt.Sprintf("--%s", flag.Name) + } + } + if !flag.IsBoolFlag() { + flagString += fmt.Sprintf("=%s", flag.FormatPlaceHolder()) + } + if v, ok := flag.Value.(repeatableFlag); ok && v.IsCumulative() { + flagString += " ..." + } + return flagString +} + +type templateParseContext struct { + SelectedCommand *CmdModel + *FlagGroupModel + *ArgGroupModel +} + +type templateContext struct { + App *ApplicationModel + Width int + Context *templateParseContext +} + +// UsageForContext displays usage information from a ParseContext (obtained from +// Application.ParseContext() or Action(f) callbacks). +func (a *Application) UsageForContext(context *ParseContext) error { + return a.UsageForContextWithTemplate(context, 2, a.usageTemplate) +} + +// UsageForContextWithTemplate is the base usage function. You generally don't need to use this. +func (a *Application) UsageForContextWithTemplate(context *ParseContext, indent int, tmpl string) error { + width := guessWidth(a.usageWriter) + funcs := template.FuncMap{ + "Indent": func(level int) string { + return strings.Repeat(" ", level*indent) + }, + "Wrap": func(indent int, s string) string { + buf := bytes.NewBuffer(nil) + indentText := strings.Repeat(" ", indent) + doc.ToText(buf, s, indentText, " "+indentText, width-indent) + return buf.String() + }, + "FormatFlag": formatFlag, + "FlagsToTwoColumns": func(f []*FlagModel) [][2]string { + rows := [][2]string{} + haveShort := false + for _, flag := range f { + if flag.Short != 0 { + haveShort = true + break + } + } + for _, flag := range f { + if !flag.Hidden { + rows = append(rows, [2]string{formatFlag(haveShort, flag), flag.Help}) + } + } + return rows + }, + "RequiredFlags": func(f []*FlagModel) []*FlagModel { + requiredFlags := []*FlagModel{} + for _, flag := range f { + if flag.Required { + requiredFlags = append(requiredFlags, flag) + } + } + return requiredFlags + }, + "OptionalFlags": func(f []*FlagModel) []*FlagModel { + optionalFlags := []*FlagModel{} + for _, flag := range f { + if !flag.Required { + optionalFlags = append(optionalFlags, flag) + } + } + return optionalFlags + }, + "ArgsToTwoColumns": func(a []*ArgModel) [][2]string { + rows := [][2]string{} + for _, arg := range a { + s := "<" + arg.Name + ">" + if !arg.Required { + s = "[" + s + "]" + } + rows = append(rows, [2]string{s, arg.Help}) + } + return rows + }, + "FormatTwoColumns": func(rows [][2]string) string { + buf := bytes.NewBuffer(nil) + formatTwoColumns(buf, indent, indent, width, rows) + return buf.String() + }, + "FormatTwoColumnsWithIndent": func(rows [][2]string, indent, padding int) string { + buf := bytes.NewBuffer(nil) + formatTwoColumns(buf, indent, padding, width, rows) + return buf.String() + }, + "FormatAppUsage": formatAppUsage, + "FormatCommandUsage": formatCmdUsage, + "IsCumulative": func(value Value) bool { + r, ok := value.(remainderArg) + return ok && r.IsCumulative() + }, + "Char": func(c rune) string { + return string(c) + }, + } + t, err := template.New("usage").Funcs(funcs).Parse(tmpl) + if err != nil { + return err + } + var selectedCommand *CmdModel + if context.SelectedCommand != nil { + selectedCommand = context.SelectedCommand.Model() + } + ctx := templateContext{ + App: a.Model(), + Width: width, + Context: &templateParseContext{ + SelectedCommand: selectedCommand, + FlagGroupModel: context.flags.Model(), + ArgGroupModel: context.arguments.Model(), + }, + } + return t.Execute(a.usageWriter, ctx) +} diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/usage_test.go b/vendor/gopkg.in/alecthomas/kingpin.v2/usage_test.go new file mode 100644 index 0000000..2b81857 --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/usage_test.go @@ -0,0 +1,65 @@ +package kingpin + +import ( + "bytes" + "strings" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestFormatTwoColumns(t *testing.T) { + buf := bytes.NewBuffer(nil) + formatTwoColumns(buf, 2, 2, 20, [][2]string{ + {"--hello", "Hello world help with something that is cool."}, + }) + expected := ` --hello Hello + world + help with + something + that is + cool. +` + assert.Equal(t, expected, buf.String()) +} + +func TestFormatTwoColumnsWide(t *testing.T) { + samples := [][2]string{ + {strings.Repeat("x", 29), "29 chars"}, + {strings.Repeat("x", 30), "30 chars"}} + buf := bytes.NewBuffer(nil) + formatTwoColumns(buf, 0, 0, 200, samples) + expected := `xxxxxxxxxxxxxxxxxxxxxxxxxxxxx29 chars +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + 30 chars +` + assert.Equal(t, expected, buf.String()) +} + +func TestHiddenCommand(t *testing.T) { + templates := []struct{ name, template string }{ + {"default", DefaultUsageTemplate}, + {"Compact", CompactUsageTemplate}, + {"Long", LongHelpTemplate}, + {"Man", ManPageTemplate}, + } + + var buf bytes.Buffer + t.Log("1") + + a := New("test", "Test").Writer(&buf).Terminate(nil) + a.Command("visible", "visible") + a.Command("hidden", "hidden").Hidden() + + for _, tp := range templates { + buf.Reset() + a.UsageTemplate(tp.template) + a.Parse(nil) + // a.Parse([]string{"--help"}) + usage := buf.String() + t.Logf("Usage for %s is:\n%s\n", tp.name, usage) + + assert.NotContains(t, usage, "hidden") + assert.Contains(t, usage, "visible") + } +} diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/values.go b/vendor/gopkg.in/alecthomas/kingpin.v2/values.go new file mode 100644 index 0000000..7ee9a3b --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/values.go @@ -0,0 +1,470 @@ +package kingpin + +//go:generate go run ./cmd/genvalues/main.go + +import ( + "fmt" + "net" + "net/url" + "os" + "reflect" + "regexp" + "strings" + "time" + + "github.com/alecthomas/units" +) + +// NOTE: Most of the base type values were lifted from: +// http://golang.org/src/pkg/flag/flag.go?s=20146:20222 + +// Value is the interface to the dynamic value stored in a flag. +// (The default value is represented as a string.) +// +// If a Value has an IsBoolFlag() bool method returning true, the command-line +// parser makes --name equivalent to -name=true rather than using the next +// command-line argument, and adds a --no-name counterpart for negating the +// flag. +type Value interface { + String() string + Set(string) error +} + +// Getter is an interface that allows the contents of a Value to be retrieved. +// It wraps the Value interface, rather than being part of it, because it +// appeared after Go 1 and its compatibility rules. All Value types provided +// by this package satisfy the Getter interface. +type Getter interface { + Value + Get() interface{} +} + +// Optional interface to indicate boolean flags that don't accept a value, and +// implicitly have a --no- negation counterpart. +type boolFlag interface { + Value + IsBoolFlag() bool +} + +// Optional interface for arguments that cumulatively consume all remaining +// input. +type remainderArg interface { + Value + IsCumulative() bool +} + +// Optional interface for flags that can be repeated. +type repeatableFlag interface { + Value + IsCumulative() bool +} + +type accumulator struct { + element func(value interface{}) Value + typ reflect.Type + slice reflect.Value +} + +// Use reflection to accumulate values into a slice. +// +// target := []string{} +// newAccumulator(&target, func (value interface{}) Value { +// return newStringValue(value.(*string)) +// }) +func newAccumulator(slice interface{}, element func(value interface{}) Value) *accumulator { + typ := reflect.TypeOf(slice) + if typ.Kind() != reflect.Ptr || typ.Elem().Kind() != reflect.Slice { + panic("expected a pointer to a slice") + } + return &accumulator{ + element: element, + typ: typ.Elem().Elem(), + slice: reflect.ValueOf(slice), + } +} + +func (a *accumulator) String() string { + out := []string{} + s := a.slice.Elem() + for i := 0; i < s.Len(); i++ { + out = append(out, a.element(s.Index(i).Addr().Interface()).String()) + } + return strings.Join(out, ",") +} + +func (a *accumulator) Set(value string) error { + e := reflect.New(a.typ) + if err := a.element(e.Interface()).Set(value); err != nil { + return err + } + slice := reflect.Append(a.slice.Elem(), e.Elem()) + a.slice.Elem().Set(slice) + return nil +} + +func (a *accumulator) Get() interface{} { + return a.slice.Interface() +} + +func (a *accumulator) IsCumulative() bool { + return true +} + +func (b *boolValue) IsBoolFlag() bool { return true } + +// -- time.Duration Value +type durationValue time.Duration + +func newDurationValue(p *time.Duration) *durationValue { + return (*durationValue)(p) +} + +func (d *durationValue) Set(s string) error { + v, err := time.ParseDuration(s) + *d = durationValue(v) + return err +} + +func (d *durationValue) Get() interface{} { return time.Duration(*d) } + +func (d *durationValue) String() string { return (*time.Duration)(d).String() } + +// -- map[string]string Value +type stringMapValue map[string]string + +func newStringMapValue(p *map[string]string) *stringMapValue { + return (*stringMapValue)(p) +} + +var stringMapRegex = regexp.MustCompile("[:=]") + +func (s *stringMapValue) Set(value string) error { + parts := stringMapRegex.Split(value, 2) + if len(parts) != 2 { + return fmt.Errorf("expected KEY=VALUE got '%s'", value) + } + (*s)[parts[0]] = parts[1] + return nil +} + +func (s *stringMapValue) Get() interface{} { + return (map[string]string)(*s) +} + +func (s *stringMapValue) String() string { + return fmt.Sprintf("%s", map[string]string(*s)) +} + +func (s *stringMapValue) IsCumulative() bool { + return true +} + +// -- net.IP Value +type ipValue net.IP + +func newIPValue(p *net.IP) *ipValue { + return (*ipValue)(p) +} + +func (i *ipValue) Set(value string) error { + if ip := net.ParseIP(value); ip == nil { + return fmt.Errorf("'%s' is not an IP address", value) + } else { + *i = *(*ipValue)(&ip) + return nil + } +} + +func (i *ipValue) Get() interface{} { + return (net.IP)(*i) +} + +func (i *ipValue) String() string { + return (*net.IP)(i).String() +} + +// -- *net.TCPAddr Value +type tcpAddrValue struct { + addr **net.TCPAddr +} + +func newTCPAddrValue(p **net.TCPAddr) *tcpAddrValue { + return &tcpAddrValue{p} +} + +func (i *tcpAddrValue) Set(value string) error { + if addr, err := net.ResolveTCPAddr("tcp", value); err != nil { + return fmt.Errorf("'%s' is not a valid TCP address: %s", value, err) + } else { + *i.addr = addr + return nil + } +} + +func (t *tcpAddrValue) Get() interface{} { + return (*net.TCPAddr)(*t.addr) +} + +func (i *tcpAddrValue) String() string { + return (*i.addr).String() +} + +// -- existingFile Value + +type fileStatValue struct { + path *string + predicate func(os.FileInfo) error +} + +func newFileStatValue(p *string, predicate func(os.FileInfo) error) *fileStatValue { + return &fileStatValue{ + path: p, + predicate: predicate, + } +} + +func (e *fileStatValue) Set(value string) error { + if s, err := os.Stat(value); os.IsNotExist(err) { + return fmt.Errorf("path '%s' does not exist", value) + } else if err != nil { + return err + } else if err := e.predicate(s); err != nil { + return err + } + *e.path = value + return nil +} + +func (f *fileStatValue) Get() interface{} { + return (string)(*f.path) +} + +func (e *fileStatValue) String() string { + return *e.path +} + +// -- os.File value + +type fileValue struct { + f **os.File + flag int + perm os.FileMode +} + +func newFileValue(p **os.File, flag int, perm os.FileMode) *fileValue { + return &fileValue{p, flag, perm} +} + +func (f *fileValue) Set(value string) error { + if fd, err := os.OpenFile(value, f.flag, f.perm); err != nil { + return err + } else { + *f.f = fd + return nil + } +} + +func (f *fileValue) Get() interface{} { + return (*os.File)(*f.f) +} + +func (f *fileValue) String() string { + if *f.f == nil { + return "" + } + return (*f.f).Name() +} + +// -- url.URL Value +type urlValue struct { + u **url.URL +} + +func newURLValue(p **url.URL) *urlValue { + return &urlValue{p} +} + +func (u *urlValue) Set(value string) error { + if url, err := url.Parse(value); err != nil { + return fmt.Errorf("invalid URL: %s", err) + } else { + *u.u = url + return nil + } +} + +func (u *urlValue) Get() interface{} { + return (*url.URL)(*u.u) +} + +func (u *urlValue) String() string { + if *u.u == nil { + return "" + } + return (*u.u).String() +} + +// -- []*url.URL Value +type urlListValue []*url.URL + +func newURLListValue(p *[]*url.URL) *urlListValue { + return (*urlListValue)(p) +} + +func (u *urlListValue) Set(value string) error { + if url, err := url.Parse(value); err != nil { + return fmt.Errorf("invalid URL: %s", err) + } else { + *u = append(*u, url) + return nil + } +} + +func (u *urlListValue) Get() interface{} { + return ([]*url.URL)(*u) +} + +func (u *urlListValue) String() string { + out := []string{} + for _, url := range *u { + out = append(out, url.String()) + } + return strings.Join(out, ",") +} + +func (u *urlListValue) IsCumulative() bool { + return true +} + +// A flag whose value must be in a set of options. +type enumValue struct { + value *string + options []string +} + +func newEnumFlag(target *string, options ...string) *enumValue { + return &enumValue{ + value: target, + options: options, + } +} + +func (a *enumValue) String() string { + return *a.value +} + +func (a *enumValue) Set(value string) error { + for _, v := range a.options { + if v == value { + *a.value = value + return nil + } + } + return fmt.Errorf("enum value must be one of %s, got '%s'", strings.Join(a.options, ","), value) +} + +func (e *enumValue) Get() interface{} { + return (string)(*e.value) +} + +// -- []string Enum Value +type enumsValue struct { + value *[]string + options []string +} + +func newEnumsFlag(target *[]string, options ...string) *enumsValue { + return &enumsValue{ + value: target, + options: options, + } +} + +func (s *enumsValue) Set(value string) error { + for _, v := range s.options { + if v == value { + *s.value = append(*s.value, value) + return nil + } + } + return fmt.Errorf("enum value must be one of %s, got '%s'", strings.Join(s.options, ","), value) +} + +func (e *enumsValue) Get() interface{} { + return ([]string)(*e.value) +} + +func (s *enumsValue) String() string { + return strings.Join(*s.value, ",") +} + +func (s *enumsValue) IsCumulative() bool { + return true +} + +// -- units.Base2Bytes Value +type bytesValue units.Base2Bytes + +func newBytesValue(p *units.Base2Bytes) *bytesValue { + return (*bytesValue)(p) +} + +func (d *bytesValue) Set(s string) error { + v, err := units.ParseBase2Bytes(s) + *d = bytesValue(v) + return err +} + +func (d *bytesValue) Get() interface{} { return units.Base2Bytes(*d) } + +func (d *bytesValue) String() string { return (*units.Base2Bytes)(d).String() } + +func newExistingFileValue(target *string) *fileStatValue { + return newFileStatValue(target, func(s os.FileInfo) error { + if s.IsDir() { + return fmt.Errorf("'%s' is a directory", s.Name()) + } + return nil + }) +} + +func newExistingDirValue(target *string) *fileStatValue { + return newFileStatValue(target, func(s os.FileInfo) error { + if !s.IsDir() { + return fmt.Errorf("'%s' is a file", s.Name()) + } + return nil + }) +} + +func newExistingFileOrDirValue(target *string) *fileStatValue { + return newFileStatValue(target, func(s os.FileInfo) error { return nil }) +} + +type counterValue int + +func newCounterValue(n *int) *counterValue { + return (*counterValue)(n) +} + +func (c *counterValue) Set(s string) error { + *c++ + return nil +} + +func (c *counterValue) Get() interface{} { return (int)(*c) } +func (c *counterValue) IsBoolFlag() bool { return true } +func (c *counterValue) String() string { return fmt.Sprintf("%d", *c) } +func (c *counterValue) IsCumulative() bool { return true } + +func resolveHost(value string) (net.IP, error) { + if ip := net.ParseIP(value); ip != nil { + return ip, nil + } else { + if addr, err := net.ResolveIPAddr("ip", value); err != nil { + return nil, err + } else { + return addr.IP, nil + } + } +} diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/values.json b/vendor/gopkg.in/alecthomas/kingpin.v2/values.json new file mode 100644 index 0000000..23c6744 --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/values.json @@ -0,0 +1,25 @@ +[ + {"type": "bool", "parser": "strconv.ParseBool(s)"}, + {"type": "string", "parser": "s, error(nil)", "format": "string(*f.v)", "plural": "Strings"}, + {"type": "uint", "parser": "strconv.ParseUint(s, 0, 64)", "plural": "Uints"}, + {"type": "uint8", "parser": "strconv.ParseUint(s, 0, 8)"}, + {"type": "uint16", "parser": "strconv.ParseUint(s, 0, 16)"}, + {"type": "uint32", "parser": "strconv.ParseUint(s, 0, 32)"}, + {"type": "uint64", "parser": "strconv.ParseUint(s, 0, 64)"}, + {"type": "int", "parser": "strconv.ParseFloat(s, 64)", "plural": "Ints"}, + {"type": "int8", "parser": "strconv.ParseInt(s, 0, 8)"}, + {"type": "int16", "parser": "strconv.ParseInt(s, 0, 16)"}, + {"type": "int32", "parser": "strconv.ParseInt(s, 0, 32)"}, + {"type": "int64", "parser": "strconv.ParseInt(s, 0, 64)"}, + {"type": "float64", "parser": "strconv.ParseFloat(s, 64)"}, + {"type": "float32", "parser": "strconv.ParseFloat(s, 32)"}, + {"name": "Duration", "type": "time.Duration", "no_value_parser": true}, + {"name": "IP", "type": "net.IP", "no_value_parser": true}, + {"name": "TCPAddr", "Type": "*net.TCPAddr", "plural": "TCPList", "no_value_parser": true}, + {"name": "ExistingFile", "Type": "string", "plural": "ExistingFiles", "no_value_parser": true}, + {"name": "ExistingDir", "Type": "string", "plural": "ExistingDirs", "no_value_parser": true}, + {"name": "ExistingFileOrDir", "Type": "string", "plural": "ExistingFilesOrDirs", "no_value_parser": true}, + {"name": "Regexp", "Type": "*regexp.Regexp", "parser": "regexp.Compile(s)"}, + {"name": "ResolvedIP", "Type": "net.IP", "parser": "resolveHost(s)", "help": "Resolve a hostname or IP to an IP."}, + {"name": "HexBytes", "Type": "[]byte", "parser": "hex.DecodeString(s)", "help": "Bytes as a hex string."} +] diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/values_generated.go b/vendor/gopkg.in/alecthomas/kingpin.v2/values_generated.go new file mode 100644 index 0000000..8d492bf --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/values_generated.go @@ -0,0 +1,821 @@ +package kingpin + +import ( + "encoding/hex" + "fmt" + "net" + "regexp" + "strconv" + "time" +) + +// This file is autogenerated by "go generate .". Do not modify. + +// -- bool Value +type boolValue struct{ v *bool } + +func newBoolValue(p *bool) *boolValue { + return &boolValue{p} +} + +func (f *boolValue) Set(s string) error { + v, err := strconv.ParseBool(s) + if err == nil { + *f.v = (bool)(v) + } + return err +} + +func (f *boolValue) Get() interface{} { return (bool)(*f.v) } + +func (f *boolValue) String() string { return fmt.Sprintf("%v", *f.v) } + +// Bool parses the next command-line value as bool. +func (p *parserMixin) Bool() (target *bool) { + target = new(bool) + p.BoolVar(target) + return +} + +func (p *parserMixin) BoolVar(target *bool) { + p.SetValue(newBoolValue(target)) +} + +// BoolList accumulates bool values into a slice. +func (p *parserMixin) BoolList() (target *[]bool) { + target = new([]bool) + p.BoolListVar(target) + return +} + +func (p *parserMixin) BoolListVar(target *[]bool) { + p.SetValue(newAccumulator(target, func(v interface{}) Value { + return newBoolValue(v.(*bool)) + })) +} + +// -- string Value +type stringValue struct{ v *string } + +func newStringValue(p *string) *stringValue { + return &stringValue{p} +} + +func (f *stringValue) Set(s string) error { + v, err := s, error(nil) + if err == nil { + *f.v = (string)(v) + } + return err +} + +func (f *stringValue) Get() interface{} { return (string)(*f.v) } + +func (f *stringValue) String() string { return string(*f.v) } + +// String parses the next command-line value as string. +func (p *parserMixin) String() (target *string) { + target = new(string) + p.StringVar(target) + return +} + +func (p *parserMixin) StringVar(target *string) { + p.SetValue(newStringValue(target)) +} + +// Strings accumulates string values into a slice. +func (p *parserMixin) Strings() (target *[]string) { + target = new([]string) + p.StringsVar(target) + return +} + +func (p *parserMixin) StringsVar(target *[]string) { + p.SetValue(newAccumulator(target, func(v interface{}) Value { + return newStringValue(v.(*string)) + })) +} + +// -- uint Value +type uintValue struct{ v *uint } + +func newUintValue(p *uint) *uintValue { + return &uintValue{p} +} + +func (f *uintValue) Set(s string) error { + v, err := strconv.ParseUint(s, 0, 64) + if err == nil { + *f.v = (uint)(v) + } + return err +} + +func (f *uintValue) Get() interface{} { return (uint)(*f.v) } + +func (f *uintValue) String() string { return fmt.Sprintf("%v", *f.v) } + +// Uint parses the next command-line value as uint. +func (p *parserMixin) Uint() (target *uint) { + target = new(uint) + p.UintVar(target) + return +} + +func (p *parserMixin) UintVar(target *uint) { + p.SetValue(newUintValue(target)) +} + +// Uints accumulates uint values into a slice. +func (p *parserMixin) Uints() (target *[]uint) { + target = new([]uint) + p.UintsVar(target) + return +} + +func (p *parserMixin) UintsVar(target *[]uint) { + p.SetValue(newAccumulator(target, func(v interface{}) Value { + return newUintValue(v.(*uint)) + })) +} + +// -- uint8 Value +type uint8Value struct{ v *uint8 } + +func newUint8Value(p *uint8) *uint8Value { + return &uint8Value{p} +} + +func (f *uint8Value) Set(s string) error { + v, err := strconv.ParseUint(s, 0, 8) + if err == nil { + *f.v = (uint8)(v) + } + return err +} + +func (f *uint8Value) Get() interface{} { return (uint8)(*f.v) } + +func (f *uint8Value) String() string { return fmt.Sprintf("%v", *f.v) } + +// Uint8 parses the next command-line value as uint8. +func (p *parserMixin) Uint8() (target *uint8) { + target = new(uint8) + p.Uint8Var(target) + return +} + +func (p *parserMixin) Uint8Var(target *uint8) { + p.SetValue(newUint8Value(target)) +} + +// Uint8List accumulates uint8 values into a slice. +func (p *parserMixin) Uint8List() (target *[]uint8) { + target = new([]uint8) + p.Uint8ListVar(target) + return +} + +func (p *parserMixin) Uint8ListVar(target *[]uint8) { + p.SetValue(newAccumulator(target, func(v interface{}) Value { + return newUint8Value(v.(*uint8)) + })) +} + +// -- uint16 Value +type uint16Value struct{ v *uint16 } + +func newUint16Value(p *uint16) *uint16Value { + return &uint16Value{p} +} + +func (f *uint16Value) Set(s string) error { + v, err := strconv.ParseUint(s, 0, 16) + if err == nil { + *f.v = (uint16)(v) + } + return err +} + +func (f *uint16Value) Get() interface{} { return (uint16)(*f.v) } + +func (f *uint16Value) String() string { return fmt.Sprintf("%v", *f.v) } + +// Uint16 parses the next command-line value as uint16. +func (p *parserMixin) Uint16() (target *uint16) { + target = new(uint16) + p.Uint16Var(target) + return +} + +func (p *parserMixin) Uint16Var(target *uint16) { + p.SetValue(newUint16Value(target)) +} + +// Uint16List accumulates uint16 values into a slice. +func (p *parserMixin) Uint16List() (target *[]uint16) { + target = new([]uint16) + p.Uint16ListVar(target) + return +} + +func (p *parserMixin) Uint16ListVar(target *[]uint16) { + p.SetValue(newAccumulator(target, func(v interface{}) Value { + return newUint16Value(v.(*uint16)) + })) +} + +// -- uint32 Value +type uint32Value struct{ v *uint32 } + +func newUint32Value(p *uint32) *uint32Value { + return &uint32Value{p} +} + +func (f *uint32Value) Set(s string) error { + v, err := strconv.ParseUint(s, 0, 32) + if err == nil { + *f.v = (uint32)(v) + } + return err +} + +func (f *uint32Value) Get() interface{} { return (uint32)(*f.v) } + +func (f *uint32Value) String() string { return fmt.Sprintf("%v", *f.v) } + +// Uint32 parses the next command-line value as uint32. +func (p *parserMixin) Uint32() (target *uint32) { + target = new(uint32) + p.Uint32Var(target) + return +} + +func (p *parserMixin) Uint32Var(target *uint32) { + p.SetValue(newUint32Value(target)) +} + +// Uint32List accumulates uint32 values into a slice. +func (p *parserMixin) Uint32List() (target *[]uint32) { + target = new([]uint32) + p.Uint32ListVar(target) + return +} + +func (p *parserMixin) Uint32ListVar(target *[]uint32) { + p.SetValue(newAccumulator(target, func(v interface{}) Value { + return newUint32Value(v.(*uint32)) + })) +} + +// -- uint64 Value +type uint64Value struct{ v *uint64 } + +func newUint64Value(p *uint64) *uint64Value { + return &uint64Value{p} +} + +func (f *uint64Value) Set(s string) error { + v, err := strconv.ParseUint(s, 0, 64) + if err == nil { + *f.v = (uint64)(v) + } + return err +} + +func (f *uint64Value) Get() interface{} { return (uint64)(*f.v) } + +func (f *uint64Value) String() string { return fmt.Sprintf("%v", *f.v) } + +// Uint64 parses the next command-line value as uint64. +func (p *parserMixin) Uint64() (target *uint64) { + target = new(uint64) + p.Uint64Var(target) + return +} + +func (p *parserMixin) Uint64Var(target *uint64) { + p.SetValue(newUint64Value(target)) +} + +// Uint64List accumulates uint64 values into a slice. +func (p *parserMixin) Uint64List() (target *[]uint64) { + target = new([]uint64) + p.Uint64ListVar(target) + return +} + +func (p *parserMixin) Uint64ListVar(target *[]uint64) { + p.SetValue(newAccumulator(target, func(v interface{}) Value { + return newUint64Value(v.(*uint64)) + })) +} + +// -- int Value +type intValue struct{ v *int } + +func newIntValue(p *int) *intValue { + return &intValue{p} +} + +func (f *intValue) Set(s string) error { + v, err := strconv.ParseFloat(s, 64) + if err == nil { + *f.v = (int)(v) + } + return err +} + +func (f *intValue) Get() interface{} { return (int)(*f.v) } + +func (f *intValue) String() string { return fmt.Sprintf("%v", *f.v) } + +// Int parses the next command-line value as int. +func (p *parserMixin) Int() (target *int) { + target = new(int) + p.IntVar(target) + return +} + +func (p *parserMixin) IntVar(target *int) { + p.SetValue(newIntValue(target)) +} + +// Ints accumulates int values into a slice. +func (p *parserMixin) Ints() (target *[]int) { + target = new([]int) + p.IntsVar(target) + return +} + +func (p *parserMixin) IntsVar(target *[]int) { + p.SetValue(newAccumulator(target, func(v interface{}) Value { + return newIntValue(v.(*int)) + })) +} + +// -- int8 Value +type int8Value struct{ v *int8 } + +func newInt8Value(p *int8) *int8Value { + return &int8Value{p} +} + +func (f *int8Value) Set(s string) error { + v, err := strconv.ParseInt(s, 0, 8) + if err == nil { + *f.v = (int8)(v) + } + return err +} + +func (f *int8Value) Get() interface{} { return (int8)(*f.v) } + +func (f *int8Value) String() string { return fmt.Sprintf("%v", *f.v) } + +// Int8 parses the next command-line value as int8. +func (p *parserMixin) Int8() (target *int8) { + target = new(int8) + p.Int8Var(target) + return +} + +func (p *parserMixin) Int8Var(target *int8) { + p.SetValue(newInt8Value(target)) +} + +// Int8List accumulates int8 values into a slice. +func (p *parserMixin) Int8List() (target *[]int8) { + target = new([]int8) + p.Int8ListVar(target) + return +} + +func (p *parserMixin) Int8ListVar(target *[]int8) { + p.SetValue(newAccumulator(target, func(v interface{}) Value { + return newInt8Value(v.(*int8)) + })) +} + +// -- int16 Value +type int16Value struct{ v *int16 } + +func newInt16Value(p *int16) *int16Value { + return &int16Value{p} +} + +func (f *int16Value) Set(s string) error { + v, err := strconv.ParseInt(s, 0, 16) + if err == nil { + *f.v = (int16)(v) + } + return err +} + +func (f *int16Value) Get() interface{} { return (int16)(*f.v) } + +func (f *int16Value) String() string { return fmt.Sprintf("%v", *f.v) } + +// Int16 parses the next command-line value as int16. +func (p *parserMixin) Int16() (target *int16) { + target = new(int16) + p.Int16Var(target) + return +} + +func (p *parserMixin) Int16Var(target *int16) { + p.SetValue(newInt16Value(target)) +} + +// Int16List accumulates int16 values into a slice. +func (p *parserMixin) Int16List() (target *[]int16) { + target = new([]int16) + p.Int16ListVar(target) + return +} + +func (p *parserMixin) Int16ListVar(target *[]int16) { + p.SetValue(newAccumulator(target, func(v interface{}) Value { + return newInt16Value(v.(*int16)) + })) +} + +// -- int32 Value +type int32Value struct{ v *int32 } + +func newInt32Value(p *int32) *int32Value { + return &int32Value{p} +} + +func (f *int32Value) Set(s string) error { + v, err := strconv.ParseInt(s, 0, 32) + if err == nil { + *f.v = (int32)(v) + } + return err +} + +func (f *int32Value) Get() interface{} { return (int32)(*f.v) } + +func (f *int32Value) String() string { return fmt.Sprintf("%v", *f.v) } + +// Int32 parses the next command-line value as int32. +func (p *parserMixin) Int32() (target *int32) { + target = new(int32) + p.Int32Var(target) + return +} + +func (p *parserMixin) Int32Var(target *int32) { + p.SetValue(newInt32Value(target)) +} + +// Int32List accumulates int32 values into a slice. +func (p *parserMixin) Int32List() (target *[]int32) { + target = new([]int32) + p.Int32ListVar(target) + return +} + +func (p *parserMixin) Int32ListVar(target *[]int32) { + p.SetValue(newAccumulator(target, func(v interface{}) Value { + return newInt32Value(v.(*int32)) + })) +} + +// -- int64 Value +type int64Value struct{ v *int64 } + +func newInt64Value(p *int64) *int64Value { + return &int64Value{p} +} + +func (f *int64Value) Set(s string) error { + v, err := strconv.ParseInt(s, 0, 64) + if err == nil { + *f.v = (int64)(v) + } + return err +} + +func (f *int64Value) Get() interface{} { return (int64)(*f.v) } + +func (f *int64Value) String() string { return fmt.Sprintf("%v", *f.v) } + +// Int64 parses the next command-line value as int64. +func (p *parserMixin) Int64() (target *int64) { + target = new(int64) + p.Int64Var(target) + return +} + +func (p *parserMixin) Int64Var(target *int64) { + p.SetValue(newInt64Value(target)) +} + +// Int64List accumulates int64 values into a slice. +func (p *parserMixin) Int64List() (target *[]int64) { + target = new([]int64) + p.Int64ListVar(target) + return +} + +func (p *parserMixin) Int64ListVar(target *[]int64) { + p.SetValue(newAccumulator(target, func(v interface{}) Value { + return newInt64Value(v.(*int64)) + })) +} + +// -- float64 Value +type float64Value struct{ v *float64 } + +func newFloat64Value(p *float64) *float64Value { + return &float64Value{p} +} + +func (f *float64Value) Set(s string) error { + v, err := strconv.ParseFloat(s, 64) + if err == nil { + *f.v = (float64)(v) + } + return err +} + +func (f *float64Value) Get() interface{} { return (float64)(*f.v) } + +func (f *float64Value) String() string { return fmt.Sprintf("%v", *f.v) } + +// Float64 parses the next command-line value as float64. +func (p *parserMixin) Float64() (target *float64) { + target = new(float64) + p.Float64Var(target) + return +} + +func (p *parserMixin) Float64Var(target *float64) { + p.SetValue(newFloat64Value(target)) +} + +// Float64List accumulates float64 values into a slice. +func (p *parserMixin) Float64List() (target *[]float64) { + target = new([]float64) + p.Float64ListVar(target) + return +} + +func (p *parserMixin) Float64ListVar(target *[]float64) { + p.SetValue(newAccumulator(target, func(v interface{}) Value { + return newFloat64Value(v.(*float64)) + })) +} + +// -- float32 Value +type float32Value struct{ v *float32 } + +func newFloat32Value(p *float32) *float32Value { + return &float32Value{p} +} + +func (f *float32Value) Set(s string) error { + v, err := strconv.ParseFloat(s, 32) + if err == nil { + *f.v = (float32)(v) + } + return err +} + +func (f *float32Value) Get() interface{} { return (float32)(*f.v) } + +func (f *float32Value) String() string { return fmt.Sprintf("%v", *f.v) } + +// Float32 parses the next command-line value as float32. +func (p *parserMixin) Float32() (target *float32) { + target = new(float32) + p.Float32Var(target) + return +} + +func (p *parserMixin) Float32Var(target *float32) { + p.SetValue(newFloat32Value(target)) +} + +// Float32List accumulates float32 values into a slice. +func (p *parserMixin) Float32List() (target *[]float32) { + target = new([]float32) + p.Float32ListVar(target) + return +} + +func (p *parserMixin) Float32ListVar(target *[]float32) { + p.SetValue(newAccumulator(target, func(v interface{}) Value { + return newFloat32Value(v.(*float32)) + })) +} + +// DurationList accumulates time.Duration values into a slice. +func (p *parserMixin) DurationList() (target *[]time.Duration) { + target = new([]time.Duration) + p.DurationListVar(target) + return +} + +func (p *parserMixin) DurationListVar(target *[]time.Duration) { + p.SetValue(newAccumulator(target, func(v interface{}) Value { + return newDurationValue(v.(*time.Duration)) + })) +} + +// IPList accumulates net.IP values into a slice. +func (p *parserMixin) IPList() (target *[]net.IP) { + target = new([]net.IP) + p.IPListVar(target) + return +} + +func (p *parserMixin) IPListVar(target *[]net.IP) { + p.SetValue(newAccumulator(target, func(v interface{}) Value { + return newIPValue(v.(*net.IP)) + })) +} + +// TCPList accumulates *net.TCPAddr values into a slice. +func (p *parserMixin) TCPList() (target *[]*net.TCPAddr) { + target = new([]*net.TCPAddr) + p.TCPListVar(target) + return +} + +func (p *parserMixin) TCPListVar(target *[]*net.TCPAddr) { + p.SetValue(newAccumulator(target, func(v interface{}) Value { + return newTCPAddrValue(v.(**net.TCPAddr)) + })) +} + +// ExistingFiles accumulates string values into a slice. +func (p *parserMixin) ExistingFiles() (target *[]string) { + target = new([]string) + p.ExistingFilesVar(target) + return +} + +func (p *parserMixin) ExistingFilesVar(target *[]string) { + p.SetValue(newAccumulator(target, func(v interface{}) Value { + return newExistingFileValue(v.(*string)) + })) +} + +// ExistingDirs accumulates string values into a slice. +func (p *parserMixin) ExistingDirs() (target *[]string) { + target = new([]string) + p.ExistingDirsVar(target) + return +} + +func (p *parserMixin) ExistingDirsVar(target *[]string) { + p.SetValue(newAccumulator(target, func(v interface{}) Value { + return newExistingDirValue(v.(*string)) + })) +} + +// ExistingFilesOrDirs accumulates string values into a slice. +func (p *parserMixin) ExistingFilesOrDirs() (target *[]string) { + target = new([]string) + p.ExistingFilesOrDirsVar(target) + return +} + +func (p *parserMixin) ExistingFilesOrDirsVar(target *[]string) { + p.SetValue(newAccumulator(target, func(v interface{}) Value { + return newExistingFileOrDirValue(v.(*string)) + })) +} + +// -- *regexp.Regexp Value +type regexpValue struct{ v **regexp.Regexp } + +func newRegexpValue(p **regexp.Regexp) *regexpValue { + return ®expValue{p} +} + +func (f *regexpValue) Set(s string) error { + v, err := regexp.Compile(s) + if err == nil { + *f.v = (*regexp.Regexp)(v) + } + return err +} + +func (f *regexpValue) Get() interface{} { return (*regexp.Regexp)(*f.v) } + +func (f *regexpValue) String() string { return fmt.Sprintf("%v", *f.v) } + +// Regexp parses the next command-line value as *regexp.Regexp. +func (p *parserMixin) Regexp() (target **regexp.Regexp) { + target = new(*regexp.Regexp) + p.RegexpVar(target) + return +} + +func (p *parserMixin) RegexpVar(target **regexp.Regexp) { + p.SetValue(newRegexpValue(target)) +} + +// RegexpList accumulates *regexp.Regexp values into a slice. +func (p *parserMixin) RegexpList() (target *[]*regexp.Regexp) { + target = new([]*regexp.Regexp) + p.RegexpListVar(target) + return +} + +func (p *parserMixin) RegexpListVar(target *[]*regexp.Regexp) { + p.SetValue(newAccumulator(target, func(v interface{}) Value { + return newRegexpValue(v.(**regexp.Regexp)) + })) +} + +// -- net.IP Value +type resolvedIPValue struct{ v *net.IP } + +func newResolvedIPValue(p *net.IP) *resolvedIPValue { + return &resolvedIPValue{p} +} + +func (f *resolvedIPValue) Set(s string) error { + v, err := resolveHost(s) + if err == nil { + *f.v = (net.IP)(v) + } + return err +} + +func (f *resolvedIPValue) Get() interface{} { return (net.IP)(*f.v) } + +func (f *resolvedIPValue) String() string { return fmt.Sprintf("%v", *f.v) } + +// Resolve a hostname or IP to an IP. +func (p *parserMixin) ResolvedIP() (target *net.IP) { + target = new(net.IP) + p.ResolvedIPVar(target) + return +} + +func (p *parserMixin) ResolvedIPVar(target *net.IP) { + p.SetValue(newResolvedIPValue(target)) +} + +// ResolvedIPList accumulates net.IP values into a slice. +func (p *parserMixin) ResolvedIPList() (target *[]net.IP) { + target = new([]net.IP) + p.ResolvedIPListVar(target) + return +} + +func (p *parserMixin) ResolvedIPListVar(target *[]net.IP) { + p.SetValue(newAccumulator(target, func(v interface{}) Value { + return newResolvedIPValue(v.(*net.IP)) + })) +} + +// -- []byte Value +type hexBytesValue struct{ v *[]byte } + +func newHexBytesValue(p *[]byte) *hexBytesValue { + return &hexBytesValue{p} +} + +func (f *hexBytesValue) Set(s string) error { + v, err := hex.DecodeString(s) + if err == nil { + *f.v = ([]byte)(v) + } + return err +} + +func (f *hexBytesValue) Get() interface{} { return ([]byte)(*f.v) } + +func (f *hexBytesValue) String() string { return fmt.Sprintf("%v", *f.v) } + +// Bytes as a hex string. +func (p *parserMixin) HexBytes() (target *[]byte) { + target = new([]byte) + p.HexBytesVar(target) + return +} + +func (p *parserMixin) HexBytesVar(target *[]byte) { + p.SetValue(newHexBytesValue(target)) +} + +// HexBytesList accumulates []byte values into a slice. +func (p *parserMixin) HexBytesList() (target *[][]byte) { + target = new([][]byte) + p.HexBytesListVar(target) + return +} + +func (p *parserMixin) HexBytesListVar(target *[][]byte) { + p.SetValue(newAccumulator(target, func(v interface{}) Value { + return newHexBytesValue(v.(*[]byte)) + })) +} diff --git a/vendor/gopkg.in/alecthomas/kingpin.v2/values_test.go b/vendor/gopkg.in/alecthomas/kingpin.v2/values_test.go new file mode 100644 index 0000000..e16ee2a --- /dev/null +++ b/vendor/gopkg.in/alecthomas/kingpin.v2/values_test.go @@ -0,0 +1,98 @@ +package kingpin + +import ( + "net" + + "github.com/stretchr/testify/assert" + + "testing" +) + +func TestAccumulatorStrings(t *testing.T) { + target := []string{} + acc := newAccumulator(&target, func(v interface{}) Value { return newStringValue(v.(*string)) }) + acc.Set("a") + assert.Equal(t, []string{"a"}, target) + acc.Set("b") + assert.Equal(t, []string{"a", "b"}, target) +} + +func TestStrings(t *testing.T) { + app := New("", "") + app.Arg("a", "").Required().String() + app.Arg("b", "").Required().String() + c := app.Arg("c", "").Required().Strings() + app.Parse([]string{"a", "b", "a", "b"}) + assert.Equal(t, []string{"a", "b"}, *c) +} + +func TestEnum(t *testing.T) { + app := New("", "") + a := app.Arg("a", "").Enum("one", "two", "three") + _, err := app.Parse([]string{"moo"}) + assert.Error(t, err) + _, err = app.Parse([]string{"one"}) + assert.NoError(t, err) + assert.Equal(t, "one", *a) +} + +func TestEnumVar(t *testing.T) { + app := New("", "") + var a string + app.Arg("a", "").EnumVar(&a, "one", "two", "three") + _, err := app.Parse([]string{"moo"}) + assert.Error(t, err) + _, err = app.Parse([]string{"one"}) + assert.NoError(t, err) + assert.Equal(t, "one", a) +} + +func TestCounter(t *testing.T) { + app := New("", "") + c := app.Flag("f", "").Counter() + _, err := app.Parse([]string{"--f", "--f", "--f"}) + assert.NoError(t, err) + assert.Equal(t, 3, *c) +} + +func TestIPv4Addr(t *testing.T) { + app := newTestApp() + flag := app.Flag("addr", "").ResolvedIP() + _, err := app.Parse([]string{"--addr", net.IPv4(1, 2, 3, 4).String()}) + assert.NoError(t, err) + assert.NotNil(t, *flag) + assert.Equal(t, net.IPv4(1, 2, 3, 4), *flag) +} + +func TestInvalidIPv4Addr(t *testing.T) { + app := newTestApp() + app.Flag("addr", "").ResolvedIP() + _, err := app.Parse([]string{"--addr", "1.2.3.256"}) + assert.Error(t, err) +} + +func TestIPv6Addr(t *testing.T) { + app := newTestApp() + flag := app.Flag("addr", "").ResolvedIP() + _, err := app.Parse([]string{"--addr", net.IPv6interfacelocalallnodes.String()}) + assert.NoError(t, err) + assert.NotNil(t, *flag) + assert.Equal(t, net.IPv6interfacelocalallnodes, *flag) +} + +func TestHexBytes(t *testing.T) { + app := newTestApp() + actual := app.Arg("bytes", "").HexBytes() + _, err := app.Parse([]string{"01020aff"}) + assert.NoError(t, err) + assert.Equal(t, []byte{0x01, 0x02, 0x0a, 0xff}, *actual) +} + +func TestSetValueDoesNotReset(t *testing.T) { + app := newTestApp() + mapping := map[string]string{ + "key": "value", + } + app.Flag("set", "").StringMapVar(&mapping) + assert.NotEmpty(t, mapping) +} diff --git a/vendor/gopkg.in/gcfg.v1/errors.go b/vendor/gopkg.in/gcfg.v1/errors.go index 853c760..83a591d 100644 --- a/vendor/gopkg.in/gcfg.v1/errors.go +++ b/vendor/gopkg.in/gcfg.v1/errors.go @@ -1,8 +1,6 @@ package gcfg -import ( - "gopkg.in/warnings.v0" -) +import warnings "gopkg.in/warnings.v0" // FatalOnly filters the results of a Read*Into invocation and returns only // fatal errors. That is, errors (warnings) indicating data for unknown @@ -21,21 +19,39 @@ func isFatal(err error) bool { return !ok } -type extraData struct { +type loc struct { section string subsection *string variable *string } -func (e extraData) Error() string { - s := "can't store data at section \"" + e.section + "\"" - if e.subsection != nil { - s += ", subsection \"" + *e.subsection + "\"" +type extraData struct { + loc +} + +type locErr struct { + msg string + loc +} + +func (l loc) String() string { + s := "section \"" + l.section + "\"" + if l.subsection != nil { + s += ", subsection \"" + *l.subsection + "\"" } - if e.variable != nil { - s += ", variable \"" + *e.variable + "\"" + if l.variable != nil { + s += ", variable \"" + *l.variable + "\"" } return s } +func (e extraData) Error() string { + return "can't store data at " + e.loc.String() +} + +func (e locErr) Error() string { + return e.msg + " at " + e.loc.String() +} + var _ error = extraData{} +var _ error = locErr{} diff --git a/vendor/gopkg.in/gcfg.v1/issues_test.go b/vendor/gopkg.in/gcfg.v1/issues_test.go index 796dd10..872abdb 100644 --- a/vendor/gopkg.in/gcfg.v1/issues_test.go +++ b/vendor/gopkg.in/gcfg.v1/issues_test.go @@ -14,7 +14,7 @@ type Config1 struct { } } -var testsIssue1 = []struct { +var testsGoogleCodeIssue1 = []struct { cfg string typename string }{ @@ -29,8 +29,8 @@ var testsIssue1 = []struct { // Value parse error should: // - include plain type name // - not include reflect internals -func TestIssue1(t *testing.T) { - for i, tt := range testsIssue1 { +func TestGoogleCodeIssue1(t *testing.T) { + for i, tt := range testsGoogleCodeIssue1 { var c Config1 err := ReadStringInto(&c, tt.cfg) switch { @@ -48,16 +48,47 @@ func TestIssue1(t *testing.T) { } } -type confIssue2 struct{ Main struct{ Foo string } } +type confGoogleCodeIssue2 struct{ Main struct{ Foo string } } -var testsIssue2 = []readtest{ - {"[main]\n;\nfoo = bar\n", &confIssue2{struct{ Foo string }{"bar"}}, true}, - {"[main]\r\n;\r\nfoo = bar\r\n", &confIssue2{struct{ Foo string }{"bar"}}, true}, +var testsGoogleCodeIssue2 = []readtest{ + {"[main]\n;\nfoo = bar\n", &confGoogleCodeIssue2{struct{ Foo string }{"bar"}}, true}, + {"[main]\r\n;\r\nfoo = bar\r\n", &confGoogleCodeIssue2{struct{ Foo string }{"bar"}}, true}, } -func TestIssue2(t *testing.T) { - for i, tt := range testsIssue2 { +func TestGoogleCodeIssue2(t *testing.T) { + for i, tt := range testsGoogleCodeIssue2 { id := fmt.Sprintf("issue2:%d", i) testRead(t, id, tt) } } + +type ConfigIssue11 struct { + Sect struct { + Var bool + } +} + +var testsIssue11 = []struct { + cfg string + loc string +}{ + {"[Sect]\nVar=X", "Sect"}, + {"[Sect]\nVar=X", "Var"}, +} + +// Value parse error should include location +func TestIssue11(t *testing.T) { + for i, tt := range testsIssue11 { + var c ConfigIssue11 + err := ReadStringInto(&c, tt.cfg) + switch { + case err == nil: + t.Errorf("%d fail: got ok; wanted error", i) + case !strings.Contains(err.Error(), tt.loc): + t.Errorf("%d fail: error message doesn't contain location %q: %v", + i, tt.loc, err) + default: + t.Logf("%d pass: %v", i, err) + } + } +} diff --git a/vendor/gopkg.in/gcfg.v1/set.go b/vendor/gopkg.in/gcfg.v1/set.go index e85ec15..4cf5cb9 100644 --- a/vendor/gopkg.in/gcfg.v1/set.go +++ b/vendor/gopkg.in/gcfg.v1/set.go @@ -192,7 +192,9 @@ func scanSetter(d interface{}, blank bool, val string, tt tag) error { return types.ScanFully(d, val, 'v') } -func newValue(sect string, vCfg reflect.Value, vType reflect.Type) (reflect.Value, error) { +func newValue(c *warnings.Collector, sect string, vCfg reflect.Value, + vType reflect.Type) (reflect.Value, error) { + // pv := reflect.New(vType) dfltName := "default-" + sect dfltField, _ := fieldFold(vCfg, dfltName) @@ -200,13 +202,11 @@ func newValue(sect string, vCfg reflect.Value, vType reflect.Type) (reflect.Valu if dfltField.IsValid() { b := bytes.NewBuffer(nil) ge := gob.NewEncoder(b) - err = ge.EncodeValue(dfltField) - if err != nil { + if err = c.Collect(ge.EncodeValue(dfltField)); err != nil { return pv, err } gd := gob.NewDecoder(bytes.NewReader(b.Bytes())) - err = gd.DecodeValue(pv.Elem()) - if err != nil { + if err = c.Collect(gd.DecodeValue(pv.Elem())); err != nil { return pv, err } } @@ -222,8 +222,9 @@ func set(c *warnings.Collector, cfg interface{}, sect, sub, name string, } vCfg := vPCfg.Elem() vSect, _ := fieldFold(vCfg, sect) + l := loc{section: sect} if !vSect.IsValid() { - err := extraData{section: sect} + err := extraData{loc: l} return c.Collect(err) } isSubsect := vSect.Kind() == reflect.Map @@ -231,6 +232,7 @@ func set(c *warnings.Collector, cfg interface{}, sect, sub, name string, return nil } if isSubsect { + l.subsection = &sub vst := vSect.Type() if vst.Key().Kind() != reflect.String || vst.Elem().Kind() != reflect.Ptr || @@ -246,8 +248,7 @@ func set(c *warnings.Collector, cfg interface{}, sect, sub, name string, if !pv.IsValid() { vType := vSect.Type().Elem().Elem() var err error - pv, err = newValue(sect, vCfg, vType) - if err != nil { + if pv, err = newValue(c, sect, vCfg, vType); err != nil { return err } vSect.SetMapIndex(k, pv) @@ -257,8 +258,7 @@ func set(c *warnings.Collector, cfg interface{}, sect, sub, name string, panic(fmt.Errorf("field for section must be a map or a struct: "+ "section %q", sect)) } else if sub != "" { - err := extraData{section: sect, subsection: &sub} - return c.Collect(err) + return c.Collect(extraData{loc: l}) } // Empty name is a special value, meaning that only the // section/subsection object is to be created, with no values set. @@ -266,14 +266,9 @@ func set(c *warnings.Collector, cfg interface{}, sect, sub, name string, return nil } vVar, t := fieldFold(vSect, name) + l.variable = &name if !vVar.IsValid() { - var err error - if isSubsect { - err = extraData{section: sect, subsection: &sub, variable: &name} - } else { - err = extraData{section: sect, variable: &name} - } - return c.Collect(err) + return c.Collect(extraData{loc: l}) } // vVal is either single-valued var, or newly allocated value within multi-valued var var vVal reflect.Value @@ -316,12 +311,12 @@ func set(c *warnings.Collector, cfg interface{}, sect, sub, name string, break } if err != errUnsupportedType { - return err + return locErr{msg: err.Error(), loc: l} } } if !ok { // in case all setters returned errUnsupportedType - return err + return locErr{msg: err.Error(), loc: l} } if isNew { // set reference if it was dereferenced and newly allocated vVal.Set(vAddr) diff --git a/vendor/gopkg.in/olivere/elastic.v2/.gitignore b/vendor/gopkg.in/olivere/elastic.v2/.gitignore deleted file mode 100644 index 3bf973e..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/.gitignore +++ /dev/null @@ -1,29 +0,0 @@ -# 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 - -/generator -/cluster-test/cluster-test -/cluster-test/*.log -/cluster-test/es-chaos-monkey -/spec -/tmp diff --git a/vendor/gopkg.in/olivere/elastic.v2/.travis.yml b/vendor/gopkg.in/olivere/elastic.v2/.travis.yml deleted file mode 100644 index 102173f..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/.travis.yml +++ /dev/null @@ -1,21 +0,0 @@ -sudo: false -language: go -go: - - 1.7 - - tip -matrix: - allow_failures: - - go: tip -env: - global: - - GO15VENDOREXPERIMENT=1 - matrix: - - ES_VERSION=1.7.6 - allow_failures: - - go: tip -before_script: - - mkdir ${HOME}/elasticsearch - - wget http://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-${ES_VERSION}.tar.gz - - tar -xzf elasticsearch-${ES_VERSION}.tar.gz -C ${HOME}/elasticsearch - - ${HOME}/elasticsearch/elasticsearch-${ES_VERSION}/bin/elasticsearch >& /dev/null & - - sleep 15 diff --git a/vendor/gopkg.in/olivere/elastic.v2/CONTRIBUTORS b/vendor/gopkg.in/olivere/elastic.v2/CONTRIBUTORS deleted file mode 100644 index d8b9c16..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/CONTRIBUTORS +++ /dev/null @@ -1,89 +0,0 @@ -# This is a list of people who have contributed code -# to the Elastic repository. -# -# It is just my small "thank you" to all those that helped -# making Elastic what it is. -# -# Please keep this list sorted. - -0x6875790d0a [@huydx](https://github.com/huydx) -Adam Alix [@adamalix](https://github.com/adamalix) -Adam Weiner [@adamweiner](https://github.com/adamweiner) -Adrian Lungu [@AdrianLungu](https://github.com/AdrianLungu) -Alex [@akotlar](https://github.com/akotlar) -Alexandre Olivier [@aliphen](https://github.com/aliphen) -Alexey Sharov [@nizsheanez](https://github.com/nizsheanez) -AndreKR [@AndreKR](https://github.com/AndreKR) -Andrew Gaul [@andrewgaul](https://github.com/andrewgaul) -Benjamin Fernandes [@LotharSee](https://github.com/LotharSee) -Benjamin Zarzycki [@kf6nux](https://github.com/kf6nux) -Braden Bassingthwaite [@bbassingthwaite-va](https://github.com/bbassingthwaite-va) -Brady Love [@bradylove](https://github.com/bradylove) -Bryan Conklin [@bmconklin](https://github.com/bmconklin) -Bruce Zhou [@brucez-isell](https://github.com/brucez-isell) -Chris M [@tebriel](https://github.com/tebriel) -Christophe Courtaut [@kri5](https://github.com/kri5) -Conrad Pankoff [@deoxxa](https://github.com/deoxxa) -Corey Scott [@corsc](https://github.com/corsc) -Daniel Barrett [@shendaras](https://github.com/shendaras) -Daniel Heckrath [@DanielHeckrath](https://github.com/DanielHeckrath) -Daniel Imfeld [@dimfeld](https://github.com/dimfeld) -Dwayne Schultz [@myshkin5](https://github.com/myshkin5) -Ellison Leão [@ellisonleao](https://github.com/ellisonleao) -Eugene Egorov [@EugeneEgorov](https://github.com/EugeneEgorov) -Faolan C-P [@fcheslack](https://github.com/fcheslack) -Gerhard Häring [@ghaering](https://github.com/ghaering) -Guilherme Silveira [@guilherme-santos](https://github.com/guilherme-santos) -Guillaume J. Charmes [@creack](https://github.com/creack) -Guiseppe [@gm42](https://github.com/gm42) -Han Yu [@MoonighT](https://github.com/MoonighT) -Harrison Wright [@wright8191](https://github.com/wright8191) -Igor Dubinskiy [@idubinskiy](https://github.com/idubinskiy) -initialcontext [@initialcontext](https://github.com/initialcontext) -Isaac Saldana [@isaldana](https://github.com/isaldana) -Jack Lindamood [@cep21](https://github.com/cep21) -Jacob [@jdelgad](https://github.com/jdelgad) -Jayme Rotsaert [@jrots](https://github.com/jrots) -Jeremy Canady [@jrmycanady](https://github.com/jrmycanady) -Joe Buck [@four2five](https://github.com/four2five) -John Barker [@j16r](https://github.com/j16r) -John Goodall [@jgoodall](https://github.com/jgoodall) -John Stanford [@jxstanford](https://github.com/jxstanford) -jun [@coseyo](https://github.com/coseyo) -Junpei Tsuji [@jun06t](https://github.com/jun06t) -Kenta SUZUKI [@suzuken](https://github.com/suzuken) -Kyle Brandt [@kylebrandt](https://github.com/kylebrandt) -Leandro Piccilli [@lpic10](https://github.com/lpic10) -Maciej Lisiewski [@c2h5oh](https://github.com/c2h5oh) -Mara Kim [@autochthe](https://github.com/autochthe) -Marcy Buccellato [@marcybuccellato](https://github.com/marcybuccellato) -Mark Costello [@mcos](https://github.com/mcos) -Medhi Bechina [@mdzor](https://github.com/mdzor) -mosa [@mosasiru](https://github.com/mosasiru) -naimulhaider [@naimulhaider](https://github.com/naimulhaider) -Naoya Yoshizawa [@azihsoyn](https://github.com/azihsoyn) -navins [@ishare](https://github.com/ishare) -Naoya Tsutsumi [@tutuming](https://github.com/tutuming) -Nicholas Wolff [@nwolff](https://github.com/nwolff) -Nick K [@utrack](https://github.com/utrack) -Nick Whyte [@nickw444](https://github.com/nickw444) -Orne Brocaar [@brocaar](https://github.com/brocaar) -Radoslaw Wesolowski [r--w](https://github.com/r--w) -Ryan Schmukler [@rschmukler](https://github.com/rschmukler) -Sacheendra talluri [@sacheendra](https://github.com/sacheendra) -Sean DuBois [@Sean-Der](https://github.com/Sean-Der) -Shalin LK [@shalinlk](https://github.com/shalinlk) -Stephen Kubovic [@stephenkubovic](https://github.com/stephenkubovic) -Stuart Warren [@Woz](https://github.com/stuart-warren) -Sulaiman [@salajlan](https://github.com/salajlan) -Sundar [@sundarv85](https://github.com/sundarv85) -Take [ww24](https://github.com/ww24) -Tetsuya Morimoto [@t2y](https://github.com/t2y) -TimeEmit [@TimeEmit](https://github.com/timeemit) -TusharM [@tusharm](https://github.com/tusharm) -wangtuo [@wangtuo](https://github.com/wangtuo) -wolfkdy [@wolfkdy](https://github.com/wolfkdy) -Wyndham Blanton [@wyndhblb](https://github.com/wyndhblb) -Yarden Bar [@ayashjorden](https://github.com/ayashjorden) -zakthomas [@zakthomas](https://github.com/zakthomas) -singham [@zhaochenxiao90](https://github.com/zhaochenxiao90) diff --git a/vendor/gopkg.in/olivere/elastic.v2/README.md b/vendor/gopkg.in/olivere/elastic.v2/README.md deleted file mode 100644 index 6f90305..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/README.md +++ /dev/null @@ -1,424 +0,0 @@ -# Elastic - -Elastic is an [Elasticsearch](http://www.elasticsearch.org/) client for the -[Go](http://www.golang.org/) programming language. - -[![Build Status](https://travis-ci.org/olivere/elastic.svg?branch=release-branch.v3)](https://travis-ci.org/olivere/elastic) -[![Godoc](http://img.shields.io/badge/godoc-reference-blue.svg?style=flat)](https://godoc.org/gopkg.in/olivere/elastic.v2) -[![license](http://img.shields.io/badge/license-MIT-red.svg?style=flat)](https://raw.githubusercontent.com/olivere/elastic/master/LICENSE) - -See the [wiki](https://github.com/olivere/elastic/wiki) for additional information about Elastic. - - -## Releases - -**The release branches (e.g. [`release-branch.v2`](https://github.com/olivere/elastic/tree/release-branch.v2)) are actively being worked on and can break at any time. If you want to use stable versions of Elastic, please use the packages released via [gopkg.in](https://gopkg.in).** - -Here's the version matrix: - -Elasticsearch version | Elastic version -| Package URL -----------------------|------------------|------------ -2.x | 3.0 | [`gopkg.in/olivere/elastic.v3`](https://gopkg.in/olivere/elastic.v3) ([source](https://github.com/olivere/elastic/tree/release-branch.v3) [doc](http://godoc.org/gopkg.in/olivere/elastic.v3)) -1.x | 2.0 | [`gopkg.in/olivere/elastic.v2`](https://gopkg.in/olivere/elastic.v2) ([source](https://github.com/olivere/elastic/tree/release-branch.v2) [doc](http://godoc.org/gopkg.in/olivere/elastic.v2)) -0.9-1.3 | 1.0 | [`gopkg.in/olivere/elastic.v1`](https://gopkg.in/olivere/elastic.v1) ([source](https://github.com/olivere/elastic/tree/release-branch.v1) [doc](http://godoc.org/gopkg.in/olivere/elastic.v1)) - -**Example:** - -You have installed Elasticsearch 1.7.4 and want to use Elastic. As listed above, you should use Elastic 2.0. So you first install the stable release of Elastic 2.0 from gopkg.in. - -```sh -$ go get gopkg.in/olivere/elastic.v2 -``` - -You then import it with this import path: - -```go -import "gopkg.in/olivere/elastic.v2" -``` - - -### Elastic 3.0 - -Elastic 3.0 targets Elasticsearch 2.0 and later. Elasticsearch 2.0.0 was [released on 28th October 2015](https://www.elastic.co/blog/elasticsearch-2-0-0-released). - -Notice that there are a lot of [breaking changes in Elasticsearch 2.0](https://www.elastic.co/guide/en/elasticsearch/reference/2.0/breaking-changes-2.0.html) and we used this as an opportunity to [clean up and refactor Elastic as well](https://github.com/olivere/elastic/blob/release-branch.v3/CHANGELOG-3.0.md). - -### Elastic 2.0 - -Elastic 2.0 targets Elasticsearch 1.x and published via [`gopkg.in/olivere/elastic.v2`](https://gopkg.in/olivere/elastic.v2). - -### Elastic 1.0 - -Elastic 1.0 is deprecated. You should really update Elasticsearch and Elastic -to a recent version. - -However, if you cannot update for some reason, don't worry. Version 1.0 is -still available. All you need to do is go-get it and change your import path -as described above. - - -## Status - -We use Elastic in production since 2012. Although Elastic is quite stable -from our experience, we don't have a stable API yet. The reason for this -is that Elasticsearch changes quite often and at a fast pace. -At this moment we focus on features, not on a stable API. - -Having said that, there have been no big API changes that required you -to rewrite your application big time. -More often than not it's renaming APIs and adding/removing features -so that we are in sync with the Elasticsearch API. - -Elastic has been used in production with the following Elasticsearch versions: -0.90, 1.0-1.7. Furthermore, we use [Travis CI](https://travis-ci.org/) -to test Elastic with the most recent versions of Elasticsearch and Go. -See the [.travis.yml](https://github.com/olivere/elastic/blob/master/.travis.yml) -file for the exact matrix and [Travis](https://travis-ci.org/olivere/elastic) -for the results. - -Elasticsearch has quite a few features. A lot of them are -not yet implemented in Elastic (see below for details). -I add features and APIs as required. It's straightforward -to implement missing pieces. I'm accepting pull requests :-) - -Having said that, I hope you find the project useful. - - -## Usage - -The first thing you do is to create a Client. The client connects to -Elasticsearch on http://127.0.0.1:9200 by default. - -You typically create one client for your app. Here's a complete example. - -```go -// Create a client -client, err := elastic.NewClient() -if err != nil { - // Handle error -} - -// Create an index -_, err = client.CreateIndex("twitter").Do() -if err != nil { - // Handle error - panic(err) -} - -// Add a document to the index -tweet := Tweet{User: "olivere", Message: "Take Five"} -_, err = client.Index(). - Index("twitter"). - Type("tweet"). - Id("1"). - BodyJson(tweet). - Do() -if err != nil { - // Handle error - panic(err) -} - -// Search with a term query -termQuery := elastic.NewTermQuery("user", "olivere") -searchResult, err := client.Search(). - Index("twitter"). // search in index "twitter" - Query(&termQuery). // specify the query - Sort("user", true). // sort by "user" field, ascending - From(0).Size(10). // take documents 0-9 - Pretty(true). // pretty print request and response JSON - Do() // execute -if err != nil { - // Handle error - panic(err) -} - -// searchResult is of type SearchResult and returns hits, suggestions, -// and all kinds of other information from Elasticsearch. -fmt.Printf("Query took %d milliseconds\n", searchResult.TookInMillis) - -// Each is a convenience function that iterates over hits in a search result. -// It makes sure you don't need to check for nil values in the response. -// However, it ignores errors in serialization. If you want full control -// over iterating the hits, see below. -var ttyp Tweet -for _, item := range searchResult.Each(reflect.TypeOf(ttyp)) { - if t, ok := item.(Tweet); ok { - fmt.Printf("Tweet by %s: %s\n", t.User, t.Message) - } -} -// TotalHits is another convenience function that works even when something goes wrong. -fmt.Printf("Found a total of %d tweets\n", searchResult.TotalHits()) - -// Here's how you iterate through results with full control over each step. -if searchResult.Hits.TotalHits > 0 { - fmt.Printf("Found a total of %d tweets\n", searchResult.Hits.TotalHits) - - // Iterate through results - for _, hit := range searchResult.Hits.Hits { - // hit.Index contains the name of the index - - // Deserialize hit.Source into a Tweet (could also be just a map[string]interface{}). - var t Tweet - err := json.Unmarshal(*hit.Source, &t) - if err != nil { - // Deserialization failed - } - - // Work with tweet - fmt.Printf("Tweet by %s: %s\n", t.User, t.Message) - } -} else { - // No hits - fmt.Print("Found no tweets\n") -} - -// Delete the index again -_, err = client.DeleteIndex("twitter").Do() -if err != nil { - // Handle error - panic(err) -} -``` - -See the [wiki](https://github.com/olivere/elastic/wiki) for more details. - - -## API Status - -Here's the current API status. - -### APIs - -- [x] Search (most queries, filters, facets, aggregations etc. are implemented: see below) -- [x] Index -- [x] Get -- [x] Delete -- [x] Delete By Query -- [x] Update -- [x] Multi Get -- [x] Bulk -- [ ] Bulk UDP -- [x] Term vectors -- [x] Multi term vectors -- [x] Count -- [ ] Validate -- [x] Explain -- [x] Search -- [ ] Search shards -- [x] Search template -- [x] Facets (most are implemented, see below) -- [x] Aggregates (most are implemented, see below) -- [x] Multi Search -- [x] Percolate -- [ ] More like this -- [ ] Benchmark - -### Indices - -- [x] Create index -- [x] Delete index -- [x] Get index -- [x] Indices exists -- [x] Open/close index -- [x] Put mapping -- [x] Get mapping -- [ ] Get field mapping -- [x] Types exist -- [x] Delete mapping -- [x] Index aliases -- [ ] Update indices settings -- [x] Get settings -- [ ] Analyze -- [x] Index templates -- [x] Warmers -- [ ] Status -- [x] Indices stats -- [ ] Indices segments -- [ ] Indices recovery -- [ ] Clear cache -- [x] Flush -- [x] Refresh -- [x] Optimize -- [ ] Upgrade - -### Snapshot and Restore - -- [ ] Snapshot -- [ ] Restore -- [ ] Snapshot status -- [ ] Monitoring snapshot/restore progress -- [ ] Partial restore - -### Cat APIs - -Not implemented. Those are better suited for operating with Elasticsearch -on the command line. - -### Cluster - -- [x] Health -- [x] State -- [x] Stats -- [ ] Pending cluster tasks -- [ ] Cluster reroute -- [ ] Cluster update settings -- [ ] Nodes stats -- [x] Nodes info -- [ ] Nodes hot_threads -- [ ] Nodes shutdown - -### Search - -- [x] Inner hits (for ES >= 1.5.0; see [docs](www.elastic.co/guide/en/elasticsearch/reference/1.5/search-request-inner-hits.html)) - -### Query DSL - -#### Queries - -- [x] `match` -- [x] `multi_match` -- [x] `bool` -- [x] `boosting` -- [ ] `common_terms` -- [x] `constant_score` -- [x] `dis_max` -- [x] `filtered` -- [x] `fuzzy_like_this_query` (`flt`) -- [x] `fuzzy_like_this_field_query` (`flt_field`) -- [x] `function_score` -- [x] `fuzzy` -- [ ] `geo_shape` -- [x] `has_child` -- [x] `has_parent` -- [x] `ids` -- [ ] `indices` -- [x] `match_all` -- [x] `mlt` -- [x] `mlt_field` -- [x] `nested` -- [x] `prefix` -- [x] `query_string` -- [x] `simple_query_string` -- [x] `range` -- [x] `regexp` -- [ ] `span_first` -- [ ] `span_multi_term` -- [ ] `span_near` -- [ ] `span_not` -- [ ] `span_or` -- [ ] `span_term` -- [x] `term` -- [x] `terms` -- [ ] `top_children` -- [x] `wildcard` -- [x] `minimum_should_match` -- [ ] `multi_term_query_rewrite` -- [x] `template_query` - -#### Filters - -- [x] `and` -- [x] `bool` -- [x] `exists` -- [ ] `geo_bounding_box` -- [x] `geo_distance` -- [ ] `geo_distance_range` -- [x] `geo_polygon` -- [ ] `geoshape` -- [ ] `geohash` -- [x] `has_child` -- [x] `has_parent` -- [x] `ids` -- [ ] `indices` -- [x] `limit` -- [x] `match_all` -- [x] `missing` -- [x] `nested` -- [x] `not` -- [x] `or` -- [x] `prefix` -- [x] `query` -- [x] `range` -- [x] `regexp` -- [ ] `script` -- [x] `term` -- [x] `terms` -- [x] `type` - -### Facets - -- [x] Terms -- [x] Range -- [x] Histogram -- [x] Date Histogram -- [x] Filter -- [x] Query -- [x] Statistical -- [x] Terms Stats -- [x] Geo Distance - -### Aggregations - -- [x] min -- [x] max -- [x] sum -- [x] avg -- [x] stats -- [x] extended stats -- [x] value count -- [x] percentiles -- [x] percentile ranks -- [x] cardinality -- [x] geo bounds -- [x] top hits -- [ ] scripted metric -- [x] global -- [x] filter -- [x] filters -- [x] missing -- [x] nested -- [x] reverse nested -- [x] children -- [x] terms -- [x] significant terms -- [x] range -- [x] date range -- [x] ipv4 range -- [x] histogram -- [x] date histogram -- [x] geo distance -- [x] geohash grid - -### Sorting - -- [x] Sort by score -- [x] Sort by field -- [x] Sort by geo distance -- [x] Sort by script - -### Scan - -Scrolling through documents (e.g. `search_type=scan`) are implemented via -the `Scroll` and `Scan` services. The `ClearScroll` API is implemented as well. - -## How to contribute - -Read [the contribution guidelines](https://github.com/olivere/elastic/blob/master/CONTRIBUTING.md). - -## Credits - -Thanks a lot for the great folks working hard on -[Elasticsearch](http://www.elasticsearch.org/) -and -[Go](http://www.golang.org/). - -Elastic uses portions of the -[uritemplates](https://github.com/jtacoma/uritemplates) library -by Joshua Tacoma and -[backoff](https://github.com/cenkalti/backoff) by Cenk Altı. - -## LICENSE - -MIT-LICENSE. See [LICENSE](http://olivere.mit-license.org/) -or the LICENSE file provided in the repository for details. - diff --git a/vendor/gopkg.in/olivere/elastic.v2/alias.go b/vendor/gopkg.in/olivere/elastic.v2/alias.go deleted file mode 100644 index 399bd0f..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/alias.go +++ /dev/null @@ -1,290 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "net/url" - "strings" -) - -// -- Actions -- - -// AliasAction is an action to apply to an alias, e.g. "add" or "remove". -type AliasAction interface { - Source() interface{} -} - -// AliasAddAction is an action to add to an alias. -type AliasAddAction struct { - index []string // index name(s) - alias string // alias name - filter Filter - routing string - searchRouting string - indexRouting string -} - -// NewAliasAddAction returns an action to add an alias. -func NewAliasAddAction(alias string) *AliasAddAction { - return &AliasAddAction{ - alias: alias, - } -} - -// Index associates one or more indices to the alias. -func (a *AliasAddAction) Index(index ...string) *AliasAddAction { - a.index = append(a.index, index...) - return a -} - -func (a *AliasAddAction) removeBlankIndexNames() { - var indices []string - for _, index := range a.index { - if len(index) > 0 { - indices = append(indices, index) - } - } - a.index = indices -} - -// Filter associates a filter to the alias. -func (a *AliasAddAction) Filter(filter Filter) *AliasAddAction { - a.filter = filter - return a -} - -// Routing associates a routing value to the alias. -// This basically sets index and search routing to the same value. -func (a *AliasAddAction) Routing(routing string) *AliasAddAction { - a.routing = routing - return a -} - -// IndexRouting associates an index routing value to the alias. -func (a *AliasAddAction) IndexRouting(routing string) *AliasAddAction { - a.indexRouting = routing - return a -} - -// SearchRouting associates a search routing value to the alias. -func (a *AliasAddAction) SearchRouting(routing ...string) *AliasAddAction { - a.searchRouting = strings.Join(routing, ",") - return a -} - -// Validate checks if the operation is valid. -func (a *AliasAddAction) Validate() error { - var invalid []string - if len(a.alias) == 0 { - invalid = append(invalid, "Alias") - } - if len(a.index) == 0 { - invalid = append(invalid, "Index") - } - if len(invalid) > 0 { - return fmt.Errorf("missing required fields: %v", invalid) - } - return nil -} - -// Source returns the JSON-serializable data. -func (a *AliasAddAction) Source() interface{} { - a.removeBlankIndexNames() - if err := a.Validate(); err != nil { - return nil - } - src := make(map[string]interface{}) - act := make(map[string]interface{}) - src["add"] = act - act["alias"] = a.alias - switch len(a.index) { - case 1: - act["index"] = a.index[0] - default: - act["indices"] = a.index - } - if a.filter != nil { - act["filter"] = a.filter.Source() - } - if len(a.routing) > 0 { - act["routing"] = a.routing - } - if len(a.indexRouting) > 0 { - act["index_routing"] = a.indexRouting - } - if len(a.searchRouting) > 0 { - act["search_routing"] = a.searchRouting - } - return src -} - -// AliasRemoveAction is an action to remove an alias. -type AliasRemoveAction struct { - index []string // index name(s) - alias string // alias name -} - -// NewAliasRemoveAction returns an action to remove an alias. -func NewAliasRemoveAction(alias string) *AliasRemoveAction { - return &AliasRemoveAction{ - alias: alias, - } -} - -// Index associates one or more indices to the alias. -func (a *AliasRemoveAction) Index(index ...string) *AliasRemoveAction { - a.index = append(a.index, index...) - return a -} - -func (a *AliasRemoveAction) removeBlankIndexNames() { - var indices []string - for _, index := range a.index { - if len(index) > 0 { - indices = append(indices, index) - } - } - a.index = indices -} - -// Validate checks if the operation is valid. -func (a *AliasRemoveAction) Validate() error { - var invalid []string - if len(a.alias) == 0 { - invalid = append(invalid, "Alias") - } - if len(a.index) == 0 { - invalid = append(invalid, "Index") - } - if len(invalid) > 0 { - return fmt.Errorf("missing required fields: %v", invalid) - } - return nil -} - -// Source returns the JSON-serializable data. -func (a *AliasRemoveAction) Source() interface{} { - a.removeBlankIndexNames() - if err := a.Validate(); err != nil { - return nil - } - src := make(map[string]interface{}) - act := make(map[string]interface{}) - src["remove"] = act - act["alias"] = a.alias - switch len(a.index) { - case 1: - act["index"] = a.index[0] - default: - act["indices"] = a.index - } - return src -} - -// -- Service -- - -// AliasService enables users to add or remove an alias. -// See https://www.elastic.co/guide/en/elasticsearch/reference/1.7/indices-aliases.html -// for details. -type AliasService struct { - client *Client - actions []AliasAction - pretty bool -} - -// NewAliasService implements a service to manage aliases. -func NewAliasService(client *Client) *AliasService { - builder := &AliasService{ - client: client, - } - return builder -} - -// Pretty asks Elasticsearch to indent the HTTP response. -func (s *AliasService) Pretty(pretty bool) *AliasService { - s.pretty = pretty - return s -} - -// Add adds an alias to an index. -func (s *AliasService) Add(indexName string, aliasName string) *AliasService { - action := NewAliasAddAction(aliasName).Index(indexName) - s.actions = append(s.actions, action) - return s -} - -// Add adds an alias to an index and associates a filter to the alias. -func (s *AliasService) AddWithFilter(indexName string, aliasName string, filter Query) *AliasService { - action := NewAliasAddAction(aliasName).Index(indexName).Filter(filter) - s.actions = append(s.actions, action) - return s -} - -// Remove removes an alias. -func (s *AliasService) Remove(indexName string, aliasName string) *AliasService { - action := NewAliasRemoveAction(aliasName).Index(indexName) - s.actions = append(s.actions, action) - return s -} - -// Action accepts one or more AliasAction instances which can be -// of type AliasAddAction or AliasRemoveAction. -func (s *AliasService) Action(action ...AliasAction) *AliasService { - s.actions = append(s.actions, action...) - return s -} - -// buildURL builds the URL for the operation. -func (s *AliasService) buildURL() (string, url.Values, error) { - path := "/_aliases" - - // Add query string parameters - params := url.Values{} - if s.pretty { - params.Set("pretty", fmt.Sprintf("%v", s.pretty)) - } - return path, params, nil -} - -// Do executes the command. -func (s *AliasService) Do() (*AliasResult, error) { - path, params, err := s.buildURL() - if err != nil { - return nil, err - } - - // Body with actions - body := make(map[string]interface{}) - var actions []interface{} - for _, action := range s.actions { - src := action.Source() - if src == nil { - continue - } - actions = append(actions, src) - } - body["actions"] = actions - - // Get response - res, err := s.client.PerformRequest("POST", path, params, body) - if err != nil { - return nil, err - } - - // Return results - ret := new(AliasResult) - if err := s.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -// -- Result of an alias request. - -// AliasResult is the outcome of calling Do on AliasService. -type AliasResult struct { - Acknowledged bool `json:"acknowledged"` -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/alias_test.go b/vendor/gopkg.in/olivere/elastic.v2/alias_test.go deleted file mode 100644 index b72fedd..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/alias_test.go +++ /dev/null @@ -1,221 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -const ( - testAliasName = "elastic-test-alias" -) - -func TestAliasLifecycle(t *testing.T) { - var err error - - client := setupTestClientAndCreateIndex(t) - - // Some tweets - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "sandrae", Message: "Cycling is fun."} - tweet3 := tweet{User: "olivere", Message: "Another unrelated topic."} - - // Add tweets to first index - _, err = client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - // Add tweets to second index - _, err = client.Index().Index(testIndexName2).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - // Flush - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - _, err = client.Flush().Index(testIndexName2).Do() - if err != nil { - t.Fatal(err) - } - - // Add both indices to a new alias - aliasCreate, err := client.Alias(). - Add(testIndexName, testAliasName). - Add(testIndexName2, testAliasName). - //Pretty(true). - Do() - if err != nil { - t.Fatal(err) - } - if !aliasCreate.Acknowledged { - t.Errorf("expected AliasResult.Acknowledged %v; got %v", true, aliasCreate.Acknowledged) - } - - // Search should return all 3 tweets - matchAll := NewMatchAllQuery() - searchResult1, err := client.Search().Index(testAliasName).Query(&matchAll).Do() - if err != nil { - t.Fatal(err) - } - if searchResult1.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } - if searchResult1.Hits.TotalHits != 3 { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 3, searchResult1.Hits.TotalHits) - } - - // Remove first index should remove two tweets, so should only yield 1 - aliasRemove1, err := client.Alias(). - Remove(testIndexName, testAliasName). - //Pretty(true). - Do() - if err != nil { - t.Fatal(err) - } - if !aliasRemove1.Acknowledged { - t.Errorf("expected AliasResult.Acknowledged %v; got %v", true, aliasRemove1.Acknowledged) - } - - searchResult2, err := client.Search().Index(testAliasName).Query(&matchAll).Do() - if err != nil { - t.Fatal(err) - } - if searchResult2.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } - if searchResult2.Hits.TotalHits != 1 { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 1, searchResult2.Hits.TotalHits) - } -} - -func TestAliasAddAction(t *testing.T) { - var tests = []struct { - Action *AliasAddAction - Expected string - Invalid bool - }{ - { - Action: NewAliasAddAction("").Index(""), - Invalid: true, - }, - { - Action: NewAliasAddAction("alias1").Index(""), - Invalid: true, - }, - { - Action: NewAliasAddAction("").Index("index1"), - Invalid: true, - }, - { - Action: NewAliasAddAction("alias1").Index("index1"), - Expected: `{"add":{"alias":"alias1","index":"index1"}}`, - }, - { - Action: NewAliasAddAction("alias1").Index("index1", "index2"), - Expected: `{"add":{"alias":"alias1","indices":["index1","index2"]}}`, - }, - { - Action: NewAliasAddAction("alias1").Index("index1").Routing("routing1"), - Expected: `{"add":{"alias":"alias1","index":"index1","routing":"routing1"}}`, - }, - { - Action: NewAliasAddAction("alias1").Index("index1").Routing("routing1").IndexRouting("indexRouting1"), - Expected: `{"add":{"alias":"alias1","index":"index1","index_routing":"indexRouting1","routing":"routing1"}}`, - }, - { - Action: NewAliasAddAction("alias1").Index("index1").Routing("routing1").SearchRouting("searchRouting1"), - Expected: `{"add":{"alias":"alias1","index":"index1","routing":"routing1","search_routing":"searchRouting1"}}`, - }, - { - Action: NewAliasAddAction("alias1").Index("index1").Routing("routing1").SearchRouting("searchRouting1", "searchRouting2"), - Expected: `{"add":{"alias":"alias1","index":"index1","routing":"routing1","search_routing":"searchRouting1,searchRouting2"}}`, - }, - { - Action: NewAliasAddAction("alias1").Index("index1").Filter(NewTermQuery("user", "olivere")), - Expected: `{"add":{"alias":"alias1","filter":{"term":{"user":"olivere"}},"index":"index1"}}`, - }, - } - - for i, tt := range tests { - src := tt.Action.Source() - if src == nil { - if !tt.Invalid { - t.Errorf("#%d: expected to succeed", i) - } - } else { - if tt.Invalid { - t.Errorf("#%d: expected to fail", i) - } else { - dst, err := json.Marshal(src) - if err != nil { - t.Fatal(err) - } - if want, have := tt.Expected, string(dst); want != have { - t.Errorf("#%d: expected %s, got %s", i, want, have) - } - } - } - } -} - -func TestAliasRemoveAction(t *testing.T) { - var tests = []struct { - Action *AliasRemoveAction - Expected string - Invalid bool - }{ - { - Action: NewAliasRemoveAction(""), - Invalid: true, - }, - { - Action: NewAliasRemoveAction("alias1"), - Invalid: true, - }, - { - Action: NewAliasRemoveAction("").Index("index1"), - Invalid: true, - }, - { - Action: NewAliasRemoveAction("alias1").Index("index1"), - Expected: `{"remove":{"alias":"alias1","index":"index1"}}`, - }, - { - Action: NewAliasRemoveAction("alias1").Index("index1", "index2"), - Expected: `{"remove":{"alias":"alias1","indices":["index1","index2"]}}`, - }, - } - - for i, tt := range tests { - src := tt.Action.Source() - if src == nil { - if !tt.Invalid { - t.Errorf("#%d: expected to succeed", i) - } - } else { - if tt.Invalid { - t.Errorf("#%d: expected to fail", i) - } else { - dst, err := json.Marshal(src) - if err != nil { - t.Fatal(err) - } - if want, have := tt.Expected, string(dst); want != have { - t.Errorf("#%d: expected %s, got %s", i, want, have) - } - } - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/aliases.go b/vendor/gopkg.in/olivere/elastic.v2/aliases.go deleted file mode 100644 index 9857f51..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/aliases.go +++ /dev/null @@ -1,159 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "net/url" - "strings" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -type AliasesService struct { - client *Client - indices []string - pretty bool -} - -func NewAliasesService(client *Client) *AliasesService { - builder := &AliasesService{ - client: client, - indices: make([]string, 0), - } - return builder -} - -func (s *AliasesService) Pretty(pretty bool) *AliasesService { - s.pretty = pretty - return s -} - -func (s *AliasesService) Index(indexName string) *AliasesService { - s.indices = append(s.indices, indexName) - return s -} - -func (s *AliasesService) Indices(indexNames ...string) *AliasesService { - s.indices = append(s.indices, indexNames...) - return s -} - -func (s *AliasesService) Do() (*AliasesResult, error) { - var err error - - // Build url - path := "/" - - // Indices part - indexPart := make([]string, 0) - for _, index := range s.indices { - index, err = uritemplates.Expand("{index}", map[string]string{ - "index": index, - }) - if err != nil { - return nil, err - } - indexPart = append(indexPart, index) - } - path += strings.Join(indexPart, ",") - - // TODO Add types here - - // Search - path += "/_aliases" - - // Parameters - params := make(url.Values) - if s.pretty { - params.Set("pretty", fmt.Sprintf("%v", s.pretty)) - } - - // Get response - res, err := s.client.PerformRequest("GET", path, params, nil) - if err != nil { - return nil, err - } - - // { - // "indexName" : { - // "aliases" : { - // "alias1" : { }, - // "alias2" : { } - // } - // }, - // "indexName2" : { - // ... - // }, - // } - indexMap := make(map[string]interface{}) - if err := s.client.decoder.Decode(res.Body, &indexMap); err != nil { - return nil, err - } - - // Each (indexName, _) - ret := &AliasesResult{ - Indices: make(map[string]indexResult), - } - for indexName, indexData := range indexMap { - indexOut, found := ret.Indices[indexName] - if !found { - indexOut = indexResult{Aliases: make([]aliasResult, 0)} - } - - // { "aliases" : { ... } } - indexDataMap, ok := indexData.(map[string]interface{}) - if ok { - aliasesData, ok := indexDataMap["aliases"].(map[string]interface{}) - if ok { - for aliasName, _ := range aliasesData { - aliasRes := aliasResult{AliasName: aliasName} - indexOut.Aliases = append(indexOut.Aliases, aliasRes) - } - } - } - - ret.Indices[indexName] = indexOut - } - - return ret, nil -} - -// -- Result of an alias request. - -type AliasesResult struct { - Indices map[string]indexResult -} - -type indexResult struct { - Aliases []aliasResult -} - -type aliasResult struct { - AliasName string -} - -func (ar AliasesResult) IndicesByAlias(aliasName string) []string { - indices := make([]string, 0) - - for indexName, indexInfo := range ar.Indices { - for _, aliasInfo := range indexInfo.Aliases { - if aliasInfo.AliasName == aliasName { - indices = append(indices, indexName) - } - } - } - - return indices -} - -func (ir indexResult) HasAlias(aliasName string) bool { - for _, alias := range ir.Aliases { - if alias.AliasName == aliasName { - return true - } - } - return false -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/aliases_test.go b/vendor/gopkg.in/olivere/elastic.v2/aliases_test.go deleted file mode 100644 index 5d3949c..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/aliases_test.go +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "testing" -) - -func TestAliases(t *testing.T) { - var err error - - client := setupTestClientAndCreateIndex(t) - - // Some tweets - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "sandrae", Message: "Cycling is fun."} - tweet3 := tweet{User: "olivere", Message: "Another unrelated topic."} - - // Add tweets to first index - _, err = client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - // Add tweets to second index - _, err = client.Index().Index(testIndexName2).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - // Flush - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - _, err = client.Flush().Index(testIndexName2).Do() - if err != nil { - t.Fatal(err) - } - - // Alias should not yet exist - aliasesResult1, err := client.Aliases(). - Indices(testIndexName, testIndexName2). - //Pretty(true). - Do() - if err != nil { - t.Fatal(err) - } - if len(aliasesResult1.Indices) != 2 { - t.Errorf("expected len(AliasesResult.Indices) = %d; got %d", 2, len(aliasesResult1.Indices)) - } - for indexName, indexDetails := range aliasesResult1.Indices { - if len(indexDetails.Aliases) != 0 { - t.Errorf("expected len(AliasesResult.Indices[%s].Aliases) = %d; got %d", indexName, 0, len(indexDetails.Aliases)) - } - } - - // Add both indices to a new alias - aliasCreate, err := client.Alias(). - Add(testIndexName, testAliasName). - Add(testIndexName2, testAliasName). - //Pretty(true). - Do() - if err != nil { - t.Fatal(err) - } - if !aliasCreate.Acknowledged { - t.Errorf("expected AliasResult.Acknowledged %v; got %v", true, aliasCreate.Acknowledged) - } - - // Alias should now exist - aliasesResult2, err := client.Aliases(). - Indices(testIndexName, testIndexName2). - //Pretty(true). - Do() - if err != nil { - t.Fatal(err) - } - if len(aliasesResult2.Indices) != 2 { - t.Errorf("expected len(AliasesResult.Indices) = %d; got %d", 2, len(aliasesResult2.Indices)) - } - for indexName, indexDetails := range aliasesResult2.Indices { - if len(indexDetails.Aliases) != 1 { - t.Errorf("expected len(AliasesResult.Indices[%s].Aliases) = %d; got %d", indexName, 1, len(indexDetails.Aliases)) - } - } - - // Check the reverse function: - indexInfo1, found := aliasesResult2.Indices[testIndexName] - if !found { - t.Errorf("expected info about index %s = %v; got %v", testIndexName, true, found) - } - aliasFound := indexInfo1.HasAlias(testAliasName) - if !aliasFound { - t.Errorf("expected alias %s to include index %s; got %v", testAliasName, testIndexName, aliasFound) - } - - // Check the reverse function: - indexInfo2, found := aliasesResult2.Indices[testIndexName2] - if !found { - t.Errorf("expected info about index %s = %v; got %v", testIndexName, true, found) - } - aliasFound = indexInfo2.HasAlias(testAliasName) - if !aliasFound { - t.Errorf("expected alias %s to include index %s; got %v", testAliasName, testIndexName2, aliasFound) - } - - // Remove first index should remove two tweets, so should only yield 1 - aliasRemove1, err := client.Alias(). - Remove(testIndexName, testAliasName). - //Pretty(true). - Do() - if err != nil { - t.Fatal(err) - } - if !aliasRemove1.Acknowledged { - t.Errorf("expected AliasResult.Acknowledged %v; got %v", true, aliasRemove1.Acknowledged) - } - - // Alias should now exist only for index 2 - aliasesResult3, err := client.Aliases().Indices(testIndexName, testIndexName2).Do() - if err != nil { - t.Fatal(err) - } - if len(aliasesResult3.Indices) != 2 { - t.Errorf("expected len(AliasesResult.Indices) = %d; got %d", 2, len(aliasesResult3.Indices)) - } - for indexName, indexDetails := range aliasesResult3.Indices { - if indexName == testIndexName { - if len(indexDetails.Aliases) != 0 { - t.Errorf("expected len(AliasesResult.Indices[%s].Aliases) = %d; got %d", indexName, 0, len(indexDetails.Aliases)) - } - } else if indexName == testIndexName2 { - if len(indexDetails.Aliases) != 1 { - t.Errorf("expected len(AliasesResult.Indices[%s].Aliases) = %d; got %d", indexName, 1, len(indexDetails.Aliases)) - } - } else { - t.Errorf("got index %s", indexName) - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/backoff.go b/vendor/gopkg.in/olivere/elastic.v2/backoff.go deleted file mode 100644 index 2b4f874..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/backoff.go +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "math" - "math/rand" - "sync" - "time" -) - -// BackoffFunc specifies the signature of a function that returns the -// time to wait before the next call to a resource. To stop retrying -// return false in the 2nd return value. -type BackoffFunc func(retry int) (time.Duration, bool) - -// Backoff allows callers to implement their own Backoff strategy. -type Backoff interface { - // Next implements a BackoffFunc. - Next(retry int) (time.Duration, bool) -} - -// -- ZeroBackoff -- - -// ZeroBackoff is a fixed backoff policy whose backoff time is always zero, -// meaning that the operation is retried immediately without waiting, -// indefinitely. -type ZeroBackoff struct{} - -// Next implements BackoffFunc for ZeroBackoff. -func (b ZeroBackoff) Next(retry int) (time.Duration, bool) { - return 0, true -} - -// -- StopBackoff -- - -// StopBackoff is a fixed backoff policy that always returns false for -// Next(), meaning that the operation should never be retried. -type StopBackoff struct{} - -// Next implements BackoffFunc for StopBackoff. -func (b StopBackoff) Next(retry int) (time.Duration, bool) { - return 0, false -} - -// -- ConstantBackoff -- - -// ConstantBackoff is a backoff policy that always returns the same delay. -type ConstantBackoff struct { - interval time.Duration -} - -// NewConstantBackoff returns a new ConstantBackoff. -func NewConstantBackoff(interval time.Duration) *ConstantBackoff { - return &ConstantBackoff{interval: interval} -} - -// Next implements BackoffFunc for ConstantBackoff. -func (b *ConstantBackoff) Next(retry int) (time.Duration, bool) { - return b.interval, true -} - -// -- Exponential -- - -// ExponentialBackoff implements the simple exponential backoff described by -// Douglas Thain at http://dthain.blogspot.de/2009/02/exponential-backoff-in-distributed.html. -type ExponentialBackoff struct { - sync.Mutex - t float64 // initial timeout (in msec) - f float64 // exponential factor (e.g. 2) - m float64 // maximum timeout (in msec) -} - -// NewExponentialBackoff returns a ExponentialBackoff backoff policy. -// Use initialTimeout to set the first/minimal interval -// and maxTimeout to set the maximum wait interval. -func NewExponentialBackoff(initialTimeout, maxTimeout time.Duration) *ExponentialBackoff { - return &ExponentialBackoff{ - t: float64(int64(initialTimeout / time.Millisecond)), - f: 2.0, - m: float64(int64(maxTimeout / time.Millisecond)), - } -} - -// Next implements BackoffFunc for ExponentialBackoff. -func (b *ExponentialBackoff) Next(retry int) (time.Duration, bool) { - b.Lock() - defer b.Unlock() - - r := 1.0 + rand.Float64() // random number in [1..2] - m := math.Min(r*b.t*math.Pow(b.f, float64(retry)), b.m) - if m >= b.m { - return 0, false - } - d := time.Duration(int64(m)) * time.Millisecond - return d, true -} - -// -- Simple Backoff -- - -// SimpleBackoff takes a list of fixed values for backoff intervals. -// Each call to Next returns the next value from that fixed list. -// After each value is returned, subsequent calls to Next will only return -// the last element. The values are optionally "jittered" (off by default). -type SimpleBackoff struct { - sync.Mutex - ticks []int - jitter bool -} - -// NewSimpleBackoff creates a SimpleBackoff algorithm with the specified -// list of fixed intervals in milliseconds. -func NewSimpleBackoff(ticks ...int) *SimpleBackoff { - return &SimpleBackoff{ - ticks: ticks, - jitter: false, - } -} - -// Jitter enables or disables jittering values. -func (b *SimpleBackoff) Jitter(flag bool) *SimpleBackoff { - b.Lock() - b.jitter = flag - b.Unlock() - return b -} - -// jitter randomizes the interval to return a value of [0.5*millis .. 1.5*millis]. -func jitter(millis int) int { - if millis <= 0 { - return 0 - } - return millis/2 + rand.Intn(millis) -} - -// Next implements BackoffFunc for SimpleBackoff. -func (b *SimpleBackoff) Next(retry int) (time.Duration, bool) { - b.Lock() - defer b.Unlock() - - if retry >= len(b.ticks) { - return 0, false - } - - ms := b.ticks[retry] - if b.jitter { - ms = jitter(ms) - } - return time.Duration(ms) * time.Millisecond, true -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/backoff/LICENSE b/vendor/gopkg.in/olivere/elastic.v2/backoff/LICENSE deleted file mode 100644 index f6f2dcc..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/backoff/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Portions of this code rely on this LICENSE: - -The MIT License (MIT) - -Copyright (c) 2014 Cenk Altı - -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/gopkg.in/olivere/elastic.v2/backoff/backoff.go b/vendor/gopkg.in/olivere/elastic.v2/backoff/backoff.go deleted file mode 100644 index f6d7ad9..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/backoff/backoff.go +++ /dev/null @@ -1,159 +0,0 @@ -// Copyright 2012-2016 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package backoff - -import ( - "math" - "math/rand" - "sync" - "sync/atomic" - "time" -) - -// Backoff is an interface for different types of backoff algorithms. -type Backoff interface { - Next() time.Duration - Reset() -} - -// Stop is used as a signal to indicate that no more retries should be made. -const Stop time.Duration = -1 - -// -- Simple Backoff -- - -// SimpleBackoff takes a list of fixed values for backoff intervals. -// Each call to Next returns the next value from that fixed list. -// After each value is returned, subsequent calls to Next will only return -// the last element. The caller may specify if the values are "jittered". -type SimpleBackoff struct { - sync.Mutex - ticks []int - index int - jitter bool - stop bool -} - -// NewSimpleBackoff creates a SimpleBackoff algorithm with the specified -// list of fixed intervals in milliseconds. -func NewSimpleBackoff(ticks ...int) *SimpleBackoff { - return &SimpleBackoff{ - ticks: ticks, - index: 0, - jitter: false, - stop: false, - } -} - -// Jitter, when set, randomizes to return a value of [0.5*value .. 1.5*value]. -func (b *SimpleBackoff) Jitter(doJitter bool) *SimpleBackoff { - b.Lock() - defer b.Unlock() - b.jitter = doJitter - return b -} - -// SendStop, when enables, makes Next to return Stop once -// the list of values is exhausted. -func (b *SimpleBackoff) SendStop(doStop bool) *SimpleBackoff { - b.Lock() - defer b.Unlock() - b.stop = doStop - return b -} - -// Next returns the next wait interval. -func (b *SimpleBackoff) Next() time.Duration { - b.Lock() - defer b.Unlock() - - i := b.index - if i >= len(b.ticks) { - if b.stop { - return Stop - } - i = len(b.ticks) - 1 - b.index = i - } else { - b.index++ - } - - ms := b.ticks[i] - if b.jitter { - ms = jitter(ms) - } - return time.Duration(ms) * time.Millisecond -} - -// Reset resets SimpleBackoff. -func (b *SimpleBackoff) Reset() { - b.Lock() - b.index = 0 - b.Unlock() -} - -// jitter randomizes the interval to return a value of [0.5*millis .. 1.5*millis]. -func jitter(millis int) int { - if millis <= 0 { - return 0 - } - return millis/2 + rand.Intn(millis) -} - -// -- Exponential -- - -// ExponentialBackoff implements the simple exponential backoff described by -// Douglas Thain at http://dthain.blogspot.de/2009/02/exponential-backoff-in-distributed.html. -type ExponentialBackoff struct { - sync.Mutex - t float64 // initial timeout (in msec) - f float64 // exponential factor (e.g. 2) - m float64 // maximum timeout (in msec) - n int64 // number of retries - stop bool // indicates whether Next should send "Stop" whan max timeout is reached -} - -// NewExponentialBackoff returns a ExponentialBackoff backoff policy. -// Use initialTimeout to set the first/minimal interval -// and maxTimeout to set the maximum wait interval. -func NewExponentialBackoff(initialTimeout, maxTimeout time.Duration) *ExponentialBackoff { - return &ExponentialBackoff{ - t: float64(int64(initialTimeout / time.Millisecond)), - f: 2.0, - m: float64(int64(maxTimeout / time.Millisecond)), - n: 0, - stop: false, - } -} - -// SendStop, when enables, makes Next to return Stop once -// the maximum timeout is reached. -func (b *ExponentialBackoff) SendStop(doStop bool) *ExponentialBackoff { - b.Lock() - defer b.Unlock() - b.stop = doStop - return b -} - -// Next returns the next wait interval. -func (t *ExponentialBackoff) Next() time.Duration { - t.Lock() - defer t.Unlock() - - n := float64(atomic.AddInt64(&t.n, 1)) - r := 1.0 + rand.Float64() // random number in [1..2] - m := math.Min(r*t.t*math.Pow(t.f, n), t.m) - if t.stop && m >= t.m { - return Stop - } - d := time.Duration(int64(m)) * time.Millisecond - return d -} - -// Reset resets the backoff policy so that it can be reused. -func (t *ExponentialBackoff) Reset() { - t.Lock() - t.n = 0 - t.Unlock() -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/backoff/backoff_test.go b/vendor/gopkg.in/olivere/elastic.v2/backoff/backoff_test.go deleted file mode 100644 index 9b5bcf0..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/backoff/backoff_test.go +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright 2012-2016 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package backoff - -import ( - "math/rand" - "testing" - "time" -) - -func TestSimpleBackoff(t *testing.T) { - b := NewSimpleBackoff(1, 2, 7) - - if got, want := b.Next(), time.Duration(1)*time.Millisecond; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - if got, want := b.Next(), time.Duration(2)*time.Millisecond; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - if got, want := b.Next(), time.Duration(7)*time.Millisecond; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - if got, want := b.Next(), time.Duration(7)*time.Millisecond; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - - b.Reset() - - if got, want := b.Next(), time.Duration(1)*time.Millisecond; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - if got, want := b.Next(), time.Duration(2)*time.Millisecond; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - if got, want := b.Next(), time.Duration(7)*time.Millisecond; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - if got, want := b.Next(), time.Duration(7)*time.Millisecond; got != want { - t.Errorf("expected %v; got: %v", want, got) - } -} - -func TestSimpleBackoffWithStop(t *testing.T) { - b := NewSimpleBackoff(1, 2, 7).SendStop(true) - - // It should eventually return Stop (-1) after some loops. - var last time.Duration - for i := 0; i < 10; i++ { - last = b.Next() - if last == Stop { - break - } - } - if got, want := last, Stop; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - - b.Reset() - - // It should eventually return Stop (-1) after some loops. - for i := 0; i < 10; i++ { - last = b.Next() - if last == Stop { - break - } - } - if got, want := last, Stop; got != want { - t.Errorf("expected %v; got: %v", want, got) - } -} - -func TestExponentialBackoff(t *testing.T) { - rand.Seed(time.Now().UnixNano()) - - min := time.Duration(8) * time.Millisecond - max := time.Duration(256) * time.Millisecond - b := NewExponentialBackoff(min, max) - - between := func(value time.Duration, a, b int) bool { - x := int(value / time.Millisecond) - return a <= x && x <= b - } - - if got := b.Next(); !between(got, 8, 256) { - t.Errorf("expected [%v..%v]; got: %v", 8, 256, got) - } - if got := b.Next(); !between(got, 8, 256) { - t.Errorf("expected [%v..%v]; got: %v", 8, 256, got) - } - if got := b.Next(); !between(got, 8, 256) { - t.Errorf("expected [%v..%v]; got: %v", 8, 256, got) - } - if got := b.Next(); !between(got, 8, 256) { - t.Errorf("expected [%v..%v]; got: %v", 8, 256, got) - } - - b.Reset() - - if got := b.Next(); !between(got, 8, 256) { - t.Errorf("expected [%v..%v]; got: %v", 8, 256, got) - } - if got := b.Next(); !between(got, 8, 256) { - t.Errorf("expected [%v..%v]; got: %v", 8, 256, got) - } - if got := b.Next(); !between(got, 8, 256) { - t.Errorf("expected [%v..%v]; got: %v", 8, 256, got) - } - if got := b.Next(); !between(got, 8, 256) { - t.Errorf("expected [%v..%v]; got: %v", 8, 256, got) - } -} - -func TestExponentialBackoffWithStop(t *testing.T) { - rand.Seed(time.Now().UnixNano()) - - min := time.Duration(8) * time.Millisecond - max := time.Duration(256) * time.Millisecond - b := NewExponentialBackoff(min, max).SendStop(true) - - // It should eventually return Stop (-1) after some loops. - var last time.Duration - for i := 0; i < 10; i++ { - last = b.Next() - if last == Stop { - break - } - } - if got, want := last, Stop; got != want { - t.Errorf("expected %v; got: %v", want, got) - } - - b.Reset() - - // It should eventually return Stop (-1) after some loops. - for i := 0; i < 10; i++ { - last = b.Next() - if last == Stop { - break - } - } - if got, want := last, Stop; got != want { - t.Errorf("expected %v; got: %v", want, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/backoff/retry.go b/vendor/gopkg.in/olivere/elastic.v2/backoff/retry.go deleted file mode 100644 index 701e03c..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/backoff/retry.go +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2012-2016 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -// This file is (c) 2014 Cenk Altı and governed by the MIT license. -// See https://github.com/cenkalti/backoff for original source. - -package backoff - -import "time" - -// An Operation is executing by Retry() or RetryNotify(). -// The operation will be retried using a backoff policy if it returns an error. -type Operation func() error - -// Notify is a notify-on-error function. It receives an operation error and -// backoff delay if the operation failed (with an error). -// -// NOTE that if the backoff policy stated to stop retrying, -// the notify function isn't called. -type Notify func(error, time.Duration) - -// Retry the function f until it does not return error or BackOff stops. -// f is guaranteed to be run at least once. -// It is the caller's responsibility to reset b after Retry returns. -// -// Retry sleeps the goroutine for the duration returned by BackOff after a -// failed operation returns. -func Retry(o Operation, b Backoff) error { return RetryNotify(o, b, nil) } - -// RetryNotify calls notify function with the error and wait duration -// for each failed attempt before sleep. -func RetryNotify(operation Operation, b Backoff, notify Notify) error { - var err error - var next time.Duration - - b.Reset() - for { - if err = operation(); err == nil { - return nil - } - - if next = b.Next(); next == Stop { - return err - } - - if notify != nil { - notify(err, next) - } - - time.Sleep(next) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/backoff/retry_test.go b/vendor/gopkg.in/olivere/elastic.v2/backoff/retry_test.go deleted file mode 100644 index 0dd4540..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/backoff/retry_test.go +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2012-2016 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -// This file is (c) 2014 Cenk Altı and governed by the MIT license. -// See https://github.com/cenkalti/backoff for original source. - -package backoff - -import ( - "errors" - "log" - "testing" - "time" -) - -func TestRetry(t *testing.T) { - const successOn = 3 - var i = 0 - - // This function is successfull on "successOn" calls. - f := func() error { - i++ - log.Printf("function is called %d. time\n", i) - - if i == successOn { - log.Println("OK") - return nil - } - - log.Println("error") - return errors.New("error") - } - - min := time.Duration(8) * time.Millisecond - max := time.Duration(256) * time.Millisecond - err := Retry(f, NewExponentialBackoff(min, max).SendStop(true)) - if err != nil { - t.Errorf("unexpected error: %s", err.Error()) - } - if i != successOn { - t.Errorf("invalid number of retries: %d", i) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/backoff_test.go b/vendor/gopkg.in/olivere/elastic.v2/backoff_test.go deleted file mode 100644 index aba7dcf..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/backoff_test.go +++ /dev/null @@ -1,142 +0,0 @@ -package elastic - -import ( - "math/rand" - "testing" - "time" -) - -func TestZeroBackoff(t *testing.T) { - b := ZeroBackoff{} - _, ok := b.Next(0) - if !ok { - t.Fatalf("expected %v, got %v", true, ok) - } -} - -func TestStopBackoff(t *testing.T) { - b := StopBackoff{} - _, ok := b.Next(0) - if ok { - t.Fatalf("expected %v, got %v", false, ok) - } -} - -func TestConstantBackoff(t *testing.T) { - b := NewConstantBackoff(time.Second) - d, ok := b.Next(0) - if !ok { - t.Fatalf("expected %v, got %v", true, ok) - } - if d != time.Second { - t.Fatalf("expected %v, got %v", time.Second, d) - } -} - -func TestSimpleBackoff(t *testing.T) { - var tests = []struct { - Duration time.Duration - Continue bool - }{ - // #0 - { - Duration: 1 * time.Millisecond, - Continue: true, - }, - // #1 - { - Duration: 2 * time.Millisecond, - Continue: true, - }, - // #2 - { - Duration: 7 * time.Millisecond, - Continue: true, - }, - // #3 - { - Duration: 0, - Continue: false, - }, - // #4 - { - Duration: 0, - Continue: false, - }, - } - - b := NewSimpleBackoff(1, 2, 7) - - for i, tt := range tests { - d, ok := b.Next(i) - if got, want := ok, tt.Continue; got != want { - t.Fatalf("#%d: expected %v, got %v", i, want, got) - } - if got, want := d, tt.Duration; got != want { - t.Fatalf("#%d: expected %v, got %v", i, want, got) - } - } -} - -func TestExponentialBackoff(t *testing.T) { - rand.Seed(time.Now().UnixNano()) - - min := time.Duration(8) * time.Millisecond - max := time.Duration(256) * time.Millisecond - b := NewExponentialBackoff(min, max) - - between := func(value time.Duration, a, b int) bool { - x := int(value / time.Millisecond) - return a <= x && x <= b - } - - got, ok := b.Next(0) - if !ok { - t.Fatalf("expected %v, got %v", true, ok) - } - if !between(got, 8, 256) { - t.Errorf("expected [%v..%v], got %v", 8, 256, got) - } - - got, ok = b.Next(1) - if !ok { - t.Fatalf("expected %v, got %v", true, ok) - } - if !between(got, 8, 256) { - t.Errorf("expected [%v..%v], got %v", 8, 256, got) - } - - got, ok = b.Next(2) - if !ok { - t.Fatalf("expected %v, got %v", true, ok) - } - if !between(got, 8, 256) { - t.Errorf("expected [%v..%v], got %v", 8, 256, got) - } - - got, ok = b.Next(3) - if !ok { - t.Fatalf("expected %v, got %v", true, ok) - } - if !between(got, 8, 256) { - t.Errorf("expected [%v..%v], got %v", 8, 256, got) - } - - got, ok = b.Next(4) - if !ok { - t.Fatalf("expected %v, got %v", true, ok) - } - if !between(got, 8, 256) { - t.Errorf("expected [%v..%v], got %v", 8, 256, got) - } - - got, ok = b.Next(5) - if ok { - t.Fatalf("expected %v, got %v", false, ok) - } - - got, ok = b.Next(6) - if ok { - t.Fatalf("expected %v, got %v", false, ok) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/bulk.go b/vendor/gopkg.in/olivere/elastic.v2/bulk.go deleted file mode 100644 index d740d96..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/bulk.go +++ /dev/null @@ -1,350 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "bytes" - "errors" - "fmt" - "net/url" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -// BulkService allows for batching bulk requests and sending them to -// Elasticsearch in one roundtrip. Use the Add method with BulkIndexRequest, -// BulkUpdateRequest, and BulkDeleteRequest to add bulk requests to a batch, -// then use Do to send them to Elasticsearch. -// -// BulkService will be reset after each Do call. In other words, you can -// reuse BulkService to send many batches. You do not have to create a new -// BulkService for each batch. -// -// See https://www.elastic.co/guide/en/elasticsearch/reference/1.7/docs-bulk.html -// for more details. -type BulkService struct { - client *Client - - index string - typ string - requests []BulkableRequest - timeout string - refresh *bool - pretty bool - - sizeInBytes int64 -} - -// NewBulkService initializes a new BulkService. -func NewBulkService(client *Client) *BulkService { - builder := &BulkService{ - client: client, - } - return builder -} - -func (s *BulkService) reset() { - s.requests = make([]BulkableRequest, 0) - s.sizeInBytes = 0 -} - -// Index specifies the index to use for all batches. You may also leave -// this blank and specify the index in the individual bulk requests. -func (s *BulkService) Index(index string) *BulkService { - s.index = index - return s -} - -// Type specifies the type to use for all batches. You may also leave -// this blank and specify the type in the individual bulk requests. -func (s *BulkService) Type(typ string) *BulkService { - s.typ = typ - return s -} - -// Timeout is a global timeout for processing bulk requests. This is a -// server-side timeout, i.e. it tells Elasticsearch the time after which -// it should stop processing. -func (s *BulkService) Timeout(timeout string) *BulkService { - s.timeout = timeout - return s -} - -// Refresh indicates whether Elasticsearch to make the bulk requests -// available to search immediately after being processed. Normally, this -// only happens after a specified refresh interval. -func (s *BulkService) Refresh(refresh bool) *BulkService { - s.refresh = &refresh - return s -} - -// Pretty tells Elasticsearch whether to return a formatted JSON response. -func (s *BulkService) Pretty(pretty bool) *BulkService { - s.pretty = pretty - return s -} - -// Add adds bulkable requests, i.e. BulkIndexRequest, BulkUpdateRequest, -// and/or BulkDeleteRequest. -func (s *BulkService) Add(requests ...BulkableRequest) *BulkService { - for _, r := range requests { - s.requests = append(s.requests, r) - s.sizeInBytes += s.estimateSizeInBytes(r) - } - return s -} - -// EstimatedSizeInBytes returns the estimated size of all bulkable -// requests added via Add. -func (s *BulkService) EstimatedSizeInBytes() int64 { - return s.sizeInBytes -} - -// estimateSizeInBytes returns the estimates size of the given -// bulkable request, i.e. BulkIndexRequest, BulkUpdateRequest, and -// BulkDeleteRequest. -func (s *BulkService) estimateSizeInBytes(r BulkableRequest) int64 { - lines, _ := r.Source() - size := 0 - for _, line := range lines { - // +1 for the \n - size += len(line) + 1 - } - return int64(size) -} - -// NumberOfActions returns the number of bulkable requests that need to -// be sent to Elasticsearch on the next batch. -func (s *BulkService) NumberOfActions() int { - return len(s.requests) -} - -func (s *BulkService) bodyAsString() (string, error) { - var buf bytes.Buffer - - for _, req := range s.requests { - source, err := req.Source() - if err != nil { - return "", err - } - for _, line := range source { - buf.WriteString(line) - buf.WriteByte('\n') - } - } - - return buf.String(), nil -} - -// Do sends the batched requests to Elasticsearch. Note that, when successful, -// you can reuse the BulkService for the next batch as the list of bulk -// requests is cleared on success. -func (s *BulkService) Do() (*BulkResponse, error) { - // No actions? - if s.NumberOfActions() == 0 { - return nil, errors.New("elastic: No bulk actions to commit") - } - - // Get body - body, err := s.bodyAsString() - if err != nil { - return nil, err - } - - // Build url - path := "/" - if len(s.index) > 0 { - index, err := uritemplates.Expand("{index}", map[string]string{ - "index": s.index, - }) - if err != nil { - return nil, err - } - path += index + "/" - } - if len(s.typ) > 0 { - typ, err := uritemplates.Expand("{type}", map[string]string{ - "type": s.typ, - }) - if err != nil { - return nil, err - } - path += typ + "/" - } - path += "_bulk" - - // Parameters - params := make(url.Values) - if s.pretty { - params.Set("pretty", fmt.Sprintf("%v", s.pretty)) - } - if s.refresh != nil { - params.Set("refresh", fmt.Sprintf("%v", *s.refresh)) - } - if s.timeout != "" { - params.Set("timeout", s.timeout) - } - - // Get response - res, err := s.client.PerformRequest("POST", path, params, body) - if err != nil { - return nil, err - } - - // Return results - ret := new(BulkResponse) - if err := s.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - - // Reset so the request can be reused - s.reset() - - return ret, nil -} - -// BulkResponse is a response to a bulk execution. -// -// Example: -// { -// "took":3, -// "errors":false, -// "items":[{ -// "index":{ -// "_index":"index1", -// "_type":"tweet", -// "_id":"1", -// "_version":3, -// "status":201 -// } -// },{ -// "index":{ -// "_index":"index2", -// "_type":"tweet", -// "_id":"2", -// "_version":3, -// "status":200 -// } -// },{ -// "delete":{ -// "_index":"index1", -// "_type":"tweet", -// "_id":"1", -// "_version":4, -// "status":200, -// "found":true -// } -// },{ -// "update":{ -// "_index":"index2", -// "_type":"tweet", -// "_id":"2", -// "_version":4, -// "status":200 -// } -// }] -// } -type BulkResponse struct { - Took int `json:"took,omitempty"` - Errors bool `json:"errors,omitempty"` - Items []map[string]*BulkResponseItem `json:"items,omitempty"` -} - -// BulkResponseItem is the result of a single bulk request. -type BulkResponseItem struct { - Index string `json:"_index,omitempty"` - Type string `json:"_type,omitempty"` - Id string `json:"_id,omitempty"` - Version int `json:"_version,omitempty"` - Status int `json:"status,omitempty"` - Found bool `json:"found,omitempty"` - Error string `json:"error,omitempty"` -} - -// Indexed returns all bulk request results of "index" actions. -func (r *BulkResponse) Indexed() []*BulkResponseItem { - return r.ByAction("index") -} - -// Created returns all bulk request results of "create" actions. -func (r *BulkResponse) Created() []*BulkResponseItem { - return r.ByAction("create") -} - -// Updated returns all bulk request results of "update" actions. -func (r *BulkResponse) Updated() []*BulkResponseItem { - return r.ByAction("update") -} - -// Deleted returns all bulk request results of "delete" actions. -func (r *BulkResponse) Deleted() []*BulkResponseItem { - return r.ByAction("delete") -} - -// ByAction returns all bulk request results of a certain action, -// e.g. "index" or "delete". -func (r *BulkResponse) ByAction(action string) []*BulkResponseItem { - if r.Items == nil { - return nil - } - var items []*BulkResponseItem - for _, item := range r.Items { - if result, found := item[action]; found { - items = append(items, result) - } - } - return items -} - -// ById returns all bulk request results of a given document id, -// regardless of the action ("index", "delete" etc.). -func (r *BulkResponse) ById(id string) []*BulkResponseItem { - if r.Items == nil { - return nil - } - var items []*BulkResponseItem - for _, item := range r.Items { - for _, result := range item { - if result.Id == id { - items = append(items, result) - } - } - } - return items -} - -// Failed returns those items of a bulk response that have errors, -// i.e. those that don't have a status code between 200 and 299. -func (r *BulkResponse) Failed() []*BulkResponseItem { - if r.Items == nil { - return nil - } - var errors []*BulkResponseItem - for _, item := range r.Items { - for _, result := range item { - if !(result.Status >= 200 && result.Status <= 299) { - errors = append(errors, result) - } - } - } - return errors -} - -// Succeeded returns those items of a bulk response that have no errors, -// i.e. those have a status code between 200 and 299. -func (r *BulkResponse) Succeeded() []*BulkResponseItem { - if r.Items == nil { - return nil - } - var succeeded []*BulkResponseItem - for _, item := range r.Items { - for _, result := range item { - if result.Status >= 200 && result.Status <= 299 { - succeeded = append(succeeded, result) - } - } - } - return succeeded -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/bulk_delete_request.go b/vendor/gopkg.in/olivere/elastic.v2/bulk_delete_request.go deleted file mode 100644 index bcc4596..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/bulk_delete_request.go +++ /dev/null @@ -1,158 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "fmt" - "strings" -) - -// -- Bulk delete request -- - -// BulkDeleteRequest is a bulk request to remove a document from Elasticsearch. -// -// See https://www.elastic.co/guide/en/elasticsearch/reference/1.7/docs-bulk.html -// for details. -type BulkDeleteRequest struct { - BulkableRequest - index string - typ string - id string - parent string - routing string - refresh *bool - version int64 // default is MATCH_ANY - versionType string // default is "internal" - - source []string -} - -// NewBulkDeleteRequest returns a new BulkDeleteRequest. -func NewBulkDeleteRequest() *BulkDeleteRequest { - return &BulkDeleteRequest{} -} - -// Index specifies the Elasticsearch index to use for this delete request. -// If unspecified, the index set on the BulkService will be used. -func (r *BulkDeleteRequest) Index(index string) *BulkDeleteRequest { - r.index = index - r.source = nil - return r -} - -// Type specifies the Elasticsearch type to use for this delete request. -// If unspecified, the type set on the BulkService will be used. -func (r *BulkDeleteRequest) Type(typ string) *BulkDeleteRequest { - r.typ = typ - r.source = nil - return r -} - -// Id specifies the identifier of the document to delete. -func (r *BulkDeleteRequest) Id(id string) *BulkDeleteRequest { - r.id = id - r.source = nil - return r -} - -// Parent specifies the parent of the request, which is used in parent/child -// mappings. -func (r *BulkDeleteRequest) Parent(parent string) *BulkDeleteRequest { - r.parent = parent - r.source = nil - return r -} - -// Routing specifies a routing value for the request. -func (r *BulkDeleteRequest) Routing(routing string) *BulkDeleteRequest { - r.routing = routing - r.source = nil - return r -} - -// Refresh indicates whether to update the shards immediately after -// the delete has been processed. Deleted documents will disappear -// in search immediately at the cost of slower bulk performance. -func (r *BulkDeleteRequest) Refresh(refresh bool) *BulkDeleteRequest { - r.refresh = &refresh - r.source = nil - return r -} - -// Version indicates the version to be deleted as part of an optimistic -// concurrency model. -func (r *BulkDeleteRequest) Version(version int64) *BulkDeleteRequest { - r.version = version - r.source = nil - return r -} - -// VersionType can be "internal" (default), "external", "external_gte", -// "external_gt", or "force". -func (r *BulkDeleteRequest) VersionType(versionType string) *BulkDeleteRequest { - r.versionType = versionType - r.source = nil - return r -} - -// String returns the on-wire representation of the delete request, -// concatenated as a single string. -func (r *BulkDeleteRequest) String() string { - lines, err := r.Source() - if err != nil { - return fmt.Sprintf("error: %v", err) - } - return strings.Join(lines, "\n") -} - -// Source returns the on-wire representation of the delete request, -// split into an action-and-meta-data line and an (optional) source line. -// See https://www.elastic.co/guide/en/elasticsearch/reference/1.7/docs-bulk.html -// for details. -func (r *BulkDeleteRequest) Source() ([]string, error) { - if r.source != nil { - return r.source, nil - } - lines := make([]string, 1) - - source := make(map[string]interface{}) - deleteCommand := make(map[string]interface{}) - if r.index != "" { - deleteCommand["_index"] = r.index - } - if r.typ != "" { - deleteCommand["_type"] = r.typ - } - if r.id != "" { - deleteCommand["_id"] = r.id - } - if r.parent != "" { - deleteCommand["_parent"] = r.parent - } - if r.routing != "" { - deleteCommand["_routing"] = r.routing - } - if r.version > 0 { - deleteCommand["_version"] = r.version - } - if r.versionType != "" { - deleteCommand["_version_type"] = r.versionType - } - if r.refresh != nil { - deleteCommand["refresh"] = *r.refresh - } - source["delete"] = deleteCommand - - body, err := json.Marshal(source) - if err != nil { - return nil, err - } - - lines[0] = string(body) - r.source = lines - - return lines, nil -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/bulk_delete_request_test.go b/vendor/gopkg.in/olivere/elastic.v2/bulk_delete_request_test.go deleted file mode 100644 index 6ac429d..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/bulk_delete_request_test.go +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "testing" -) - -func TestBulkDeleteRequestSerialization(t *testing.T) { - tests := []struct { - Request BulkableRequest - Expected []string - }{ - // #0 - { - Request: NewBulkDeleteRequest().Index("index1").Type("tweet").Id("1"), - Expected: []string{ - `{"delete":{"_id":"1","_index":"index1","_type":"tweet"}}`, - }, - }, - // #1 - { - Request: NewBulkDeleteRequest().Index("index1").Type("tweet").Id("1").Parent("2"), - Expected: []string{ - `{"delete":{"_id":"1","_index":"index1","_parent":"2","_type":"tweet"}}`, - }, - }, - // #2 - { - Request: NewBulkDeleteRequest().Index("index1").Type("tweet").Id("1").Routing("3"), - Expected: []string{ - `{"delete":{"_id":"1","_index":"index1","_routing":"3","_type":"tweet"}}`, - }, - }, - } - - for i, test := range tests { - lines, err := test.Request.Source() - if err != nil { - t.Fatalf("case #%d: expected no error, got: %v", i, err) - } - if lines == nil { - t.Fatalf("case #%d: expected lines, got nil", i) - } - if len(lines) != len(test.Expected) { - t.Fatalf("case #%d: expected %d lines, got %d", i, len(test.Expected), len(lines)) - } - for j, line := range lines { - if line != test.Expected[j] { - t.Errorf("case #%d: expected line #%d to be %s, got: %s", i, j, test.Expected[j], line) - } - } - } -} - -var bulkDeleteRequestSerializationResult string - -func BenchmarkBulkDeleteRequestSerialization(b *testing.B) { - r := NewBulkDeleteRequest().Index(testIndexName).Type("tweet").Id("1") - var s string - for n := 0; n < b.N; n++ { - s = r.String() - r.source = nil // Don't let caching spoil the benchmark - } - bulkDeleteRequestSerializationResult = s // ensure the compiler doesn't optimize -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/bulk_index_request.go b/vendor/gopkg.in/olivere/elastic.v2/bulk_index_request.go deleted file mode 100644 index dbfcdf6..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/bulk_index_request.go +++ /dev/null @@ -1,232 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "fmt" - "strings" -) - -// BulkIndexRequest is a bulk request to add a document to Elasticsearch. -// -// See https://www.elastic.co/guide/en/elasticsearch/reference/1.7/docs-bulk.html -// for details. -type BulkIndexRequest struct { - BulkableRequest - index string - typ string - id string - opType string - routing string - parent string - timestamp string - ttl int64 - refresh *bool - version int64 // default is MATCH_ANY - versionType string // default is "internal" - doc interface{} - - source []string -} - -// NewBulkIndexRequest returns a new BulkIndexRequest. -// The operation type is "index" by default. -func NewBulkIndexRequest() *BulkIndexRequest { - return &BulkIndexRequest{ - opType: "index", - } -} - -// Index specifies the Elasticsearch index to use for this index request. -// If unspecified, the index set on the BulkService will be used. -func (r *BulkIndexRequest) Index(index string) *BulkIndexRequest { - r.index = index - r.source = nil - return r -} - -// Type specifies the Elasticsearch type to use for this index request. -// If unspecified, the type set on the BulkService will be used. -func (r *BulkIndexRequest) Type(typ string) *BulkIndexRequest { - r.typ = typ - r.source = nil - return r -} - -// Id specifies the identifier of the document to index. -func (r *BulkIndexRequest) Id(id string) *BulkIndexRequest { - r.id = id - r.source = nil - return r -} - -// OpType specifies if this request should follow create-only or upsert -// behavior. This follows the OpType of the standard document index API. -// See https://www.elastic.co/guide/en/elasticsearch/reference/1.7/docs-index_.html#operation-type -// for details. -func (r *BulkIndexRequest) OpType(opType string) *BulkIndexRequest { - r.opType = opType - r.source = nil - return r -} - -// Routing specifies a routing value for the request. -func (r *BulkIndexRequest) Routing(routing string) *BulkIndexRequest { - r.routing = routing - r.source = nil - return r -} - -// Parent specifies the identifier of the parent document (if available). -func (r *BulkIndexRequest) Parent(parent string) *BulkIndexRequest { - r.parent = parent - r.source = nil - return r -} - -// Timestamp can be used to index a document with a timestamp. -// This is deprecated as of 2.0.0-beta2; you should use a normal date field -// and set its value explicitly. -func (r *BulkIndexRequest) Timestamp(timestamp string) *BulkIndexRequest { - r.timestamp = timestamp - r.source = nil - return r -} - -// Ttl (time to live) sets an expiration date for the document. Expired -// documents will be expunged automatically. -// This is deprecated as of 2.0.0-beta2 and will be replaced by a different -// implementation in a future version. -func (r *BulkIndexRequest) Ttl(ttl int64) *BulkIndexRequest { - r.ttl = ttl - r.source = nil - return r -} - -// Refresh indicates whether to update the shards immediately after -// the request has been processed. Newly added documents will appear -// in search immediately at the cost of slower bulk performance. -func (r *BulkIndexRequest) Refresh(refresh bool) *BulkIndexRequest { - r.refresh = &refresh - r.source = nil - return r -} - -// Version indicates the version of the document as part of an optimistic -// concurrency model. -func (r *BulkIndexRequest) Version(version int64) *BulkIndexRequest { - r.version = version - r.source = nil - return r -} - -// VersionType specifies how versions are created. It can be e.g. internal, -// external, external_gte, or force. -// -// See https://www.elastic.co/guide/en/elasticsearch/reference/1.7/docs-index_.html#index-versioning -// for details. -func (r *BulkIndexRequest) VersionType(versionType string) *BulkIndexRequest { - r.versionType = versionType - r.source = nil - return r -} - -// Doc specifies the document to index. -func (r *BulkIndexRequest) Doc(doc interface{}) *BulkIndexRequest { - r.doc = doc - r.source = nil - return r -} - -// String returns the on-wire representation of the index request, -// concatenated as a single string. -func (r *BulkIndexRequest) String() string { - lines, err := r.Source() - if err != nil { - return fmt.Sprintf("error: %v", err) - } - return strings.Join(lines, "\n") -} - -// Source returns the on-wire representation of the index request, -// split into an action-and-meta-data line and an (optional) source line. -// See https://www.elastic.co/guide/en/elasticsearch/reference/1.7/docs-bulk.html -// for details. -func (r *BulkIndexRequest) Source() ([]string, error) { - // { "index" : { "_index" : "test", "_type" : "type1", "_id" : "1" } } - // { "field1" : "value1" } - - if r.source != nil { - return r.source, nil - } - - lines := make([]string, 2) - - // "index" ... - command := make(map[string]interface{}) - indexCommand := make(map[string]interface{}) - if r.index != "" { - indexCommand["_index"] = r.index - } - if r.typ != "" { - indexCommand["_type"] = r.typ - } - if r.id != "" { - indexCommand["_id"] = r.id - } - if r.routing != "" { - indexCommand["_routing"] = r.routing - } - if r.parent != "" { - indexCommand["_parent"] = r.parent - } - if r.timestamp != "" { - indexCommand["_timestamp"] = r.timestamp - } - if r.ttl > 0 { - indexCommand["_ttl"] = r.ttl - } - if r.version > 0 { - indexCommand["_version"] = r.version - } - if r.versionType != "" { - indexCommand["_version_type"] = r.versionType - } - if r.refresh != nil { - indexCommand["refresh"] = *r.refresh - } - command[r.opType] = indexCommand - line, err := json.Marshal(command) - if err != nil { - return nil, err - } - lines[0] = string(line) - - // "field1" ... - if r.doc != nil { - switch t := r.doc.(type) { - default: - body, err := json.Marshal(r.doc) - if err != nil { - return nil, err - } - lines[1] = string(body) - case json.RawMessage: - lines[1] = string(t) - case *json.RawMessage: - lines[1] = string(*t) - case string: - lines[1] = t - case *string: - lines[1] = *t - } - } else { - lines[1] = "{}" - } - - r.source = lines - return lines, nil -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/bulk_index_request_test.go b/vendor/gopkg.in/olivere/elastic.v2/bulk_index_request_test.go deleted file mode 100644 index a66ba0b..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/bulk_index_request_test.go +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "testing" - "time" -) - -func TestBulkIndexRequestSerialization(t *testing.T) { - tests := []struct { - Request BulkableRequest - Expected []string - }{ - // #0 - { - Request: NewBulkIndexRequest().Index("index1").Type("tweet").Id("1"). - Doc(tweet{User: "olivere", Created: time.Date(2014, 1, 18, 23, 59, 58, 0, time.UTC)}), - Expected: []string{ - `{"index":{"_id":"1","_index":"index1","_type":"tweet"}}`, - `{"user":"olivere","message":"","retweets":0,"created":"2014-01-18T23:59:58Z"}`, - }, - }, - // #1 - { - Request: NewBulkIndexRequest().OpType("create").Index("index1").Type("tweet").Id("1"). - Doc(tweet{User: "olivere", Created: time.Date(2014, 1, 18, 23, 59, 58, 0, time.UTC)}), - Expected: []string{ - `{"create":{"_id":"1","_index":"index1","_type":"tweet"}}`, - `{"user":"olivere","message":"","retweets":0,"created":"2014-01-18T23:59:58Z"}`, - }, - }, - // #2 - { - Request: NewBulkIndexRequest().OpType("index").Index("index1").Type("tweet").Id("1"). - Doc(tweet{User: "olivere", Created: time.Date(2014, 1, 18, 23, 59, 58, 0, time.UTC)}), - Expected: []string{ - `{"index":{"_id":"1","_index":"index1","_type":"tweet"}}`, - `{"user":"olivere","message":"","retweets":0,"created":"2014-01-18T23:59:58Z"}`, - }, - }, - } - - for i, test := range tests { - lines, err := test.Request.Source() - if err != nil { - t.Fatalf("case #%d: expected no error, got: %v", i, err) - } - if lines == nil { - t.Fatalf("case #%d: expected lines, got nil", i) - } - if len(lines) != len(test.Expected) { - t.Fatalf("case #%d: expected %d lines, got %d", i, len(test.Expected), len(lines)) - } - for j, line := range lines { - if line != test.Expected[j] { - t.Errorf("case #%d: expected line #%d to be %s, got: %s", i, j, test.Expected[j], line) - } - } - } -} - -var bulkIndexRequestSerializationResult string - -func BenchmarkBulkIndexRequestSerialization(b *testing.B) { - r := NewBulkIndexRequest().Index(testIndexName).Type("tweet").Id("1"). - Doc(tweet{User: "olivere", Created: time.Date(2014, 1, 18, 23, 59, 58, 0, time.UTC)}) - var s string - for n := 0; n < b.N; n++ { - s = r.String() - r.source = nil // Don't let caching spoil the benchmark - } - bulkIndexRequestSerializationResult = s // ensure the compiler doesn't optimize -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/bulk_request.go b/vendor/gopkg.in/olivere/elastic.v2/bulk_request.go deleted file mode 100644 index 315b535..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/bulk_request.go +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" -) - -// -- Bulkable request (index/update/delete) -- - -// Generic interface to bulkable requests. -type BulkableRequest interface { - fmt.Stringer - Source() ([]string, error) -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/bulk_test.go b/vendor/gopkg.in/olivere/elastic.v2/bulk_test.go deleted file mode 100644 index 666d6ee..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/bulk_test.go +++ /dev/null @@ -1,460 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestBulk(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "sandrae", Message: "Dancing all night long. Yeah."} - - index1Req := NewBulkIndexRequest().Index(testIndexName).Type("tweet").Id("1").Doc(tweet1) - index2Req := NewBulkIndexRequest().Index(testIndexName).Type("tweet").Id("2").Doc(tweet2) - delete1Req := NewBulkDeleteRequest().Index(testIndexName).Type("tweet").Id("1") - - bulkRequest := client.Bulk() - bulkRequest = bulkRequest.Add(index1Req) - bulkRequest = bulkRequest.Add(index2Req) - bulkRequest = bulkRequest.Add(delete1Req) - - if bulkRequest.NumberOfActions() != 3 { - t.Errorf("expected bulkRequest.NumberOfActions %d; got %d", 3, bulkRequest.NumberOfActions()) - } - - bulkResponse, err := bulkRequest.Do() - if err != nil { - t.Fatal(err) - } - if bulkResponse == nil { - t.Errorf("expected bulkResponse to be != nil; got nil") - } - - if bulkRequest.NumberOfActions() != 0 { - t.Errorf("expected bulkRequest.NumberOfActions %d; got %d", 0, bulkRequest.NumberOfActions()) - } - - // Document with Id="1" should not exist - exists, err := client.Exists().Index(testIndexName).Type("tweet").Id("1").Do() - if err != nil { - t.Fatal(err) - } - if exists { - t.Errorf("expected exists %v; got %v", false, exists) - } - - // Document with Id="2" should exist - exists, err = client.Exists().Index(testIndexName).Type("tweet").Id("2").Do() - if err != nil { - t.Fatal(err) - } - if !exists { - t.Errorf("expected exists %v; got %v", true, exists) - } - - // Update - updateDoc := struct { - Retweets int `json:"retweets"` - }{ - 42, - } - update1Req := NewBulkUpdateRequest().Index(testIndexName).Type("tweet").Id("2").Doc(&updateDoc) - bulkRequest = client.Bulk() - bulkRequest = bulkRequest.Add(update1Req) - - if bulkRequest.NumberOfActions() != 1 { - t.Errorf("expected bulkRequest.NumberOfActions %d; got %d", 1, bulkRequest.NumberOfActions()) - } - - bulkResponse, err = bulkRequest.Do() - if err != nil { - t.Fatal(err) - } - if bulkResponse == nil { - t.Errorf("expected bulkResponse to be != nil; got nil") - } - - if bulkRequest.NumberOfActions() != 0 { - t.Errorf("expected bulkRequest.NumberOfActions %d; got %d", 0, bulkRequest.NumberOfActions()) - } - - // Document with Id="1" should have a retweets count of 42 - doc, err := client.Get().Index(testIndexName).Type("tweet").Id("2").Do() - if err != nil { - t.Fatal(err) - } - if doc == nil { - t.Fatal("expected doc to be != nil; got nil") - } - if !doc.Found { - t.Fatalf("expected doc to be found; got found = %v", doc.Found) - } - if doc.Source == nil { - t.Fatal("expected doc source to be != nil; got nil") - } - var updatedTweet tweet - err = json.Unmarshal(*doc.Source, &updatedTweet) - if err != nil { - t.Fatal(err) - } - if updatedTweet.Retweets != 42 { - t.Errorf("expected updated tweet retweets = %v; got %v", 42, updatedTweet.Retweets) - } -} - -func TestBulkWithIndexSetOnClient(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "sandrae", Message: "Dancing all night long. Yeah."} - - index1Req := NewBulkIndexRequest().Index(testIndexName).Type("tweet").Id("1").Doc(tweet1) - index2Req := NewBulkIndexRequest().Index(testIndexName).Type("tweet").Id("2").Doc(tweet2) - delete1Req := NewBulkDeleteRequest().Index(testIndexName).Type("tweet").Id("1") - - bulkRequest := client.Bulk().Index(testIndexName).Type("tweet") - bulkRequest = bulkRequest.Add(index1Req) - bulkRequest = bulkRequest.Add(index2Req) - bulkRequest = bulkRequest.Add(delete1Req) - - if bulkRequest.NumberOfActions() != 3 { - t.Errorf("expected bulkRequest.NumberOfActions %d; got %d", 3, bulkRequest.NumberOfActions()) - } - - bulkResponse, err := bulkRequest.Do() - if err != nil { - t.Fatal(err) - } - if bulkResponse == nil { - t.Errorf("expected bulkResponse to be != nil; got nil") - } - - // Document with Id="1" should not exist - exists, err := client.Exists().Index(testIndexName).Type("tweet").Id("1").Do() - if err != nil { - t.Fatal(err) - } - if exists { - t.Errorf("expected exists %v; got %v", false, exists) - } - - // Document with Id="2" should exist - exists, err = client.Exists().Index(testIndexName).Type("tweet").Id("2").Do() - if err != nil { - t.Fatal(err) - } - if !exists { - t.Errorf("expected exists %v; got %v", true, exists) - } -} - -func TestBulkRequestsSerialization(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "sandrae", Message: "Dancing all night long. Yeah."} - - index1Req := NewBulkIndexRequest().Index(testIndexName).Type("tweet").Id("1").Doc(tweet1) - index2Req := NewBulkIndexRequest().OpType("create").Index(testIndexName).Type("tweet").Id("2").Doc(tweet2) - delete1Req := NewBulkDeleteRequest().Index(testIndexName).Type("tweet").Id("1") - update2Req := NewBulkUpdateRequest().Index(testIndexName).Type("tweet").Id("2"). - Doc(struct { - Retweets int `json:"retweets"` - }{ - Retweets: 42, - }) - - bulkRequest := client.Bulk() - bulkRequest = bulkRequest.Add(index1Req) - bulkRequest = bulkRequest.Add(index2Req) - bulkRequest = bulkRequest.Add(delete1Req) - bulkRequest = bulkRequest.Add(update2Req) - - if bulkRequest.NumberOfActions() != 4 { - t.Errorf("expected bulkRequest.NumberOfActions %d; got %d", 4, bulkRequest.NumberOfActions()) - } - - expected := `{"index":{"_id":"1","_index":"` + testIndexName + `","_type":"tweet"}} -{"user":"olivere","message":"Welcome to Golang and Elasticsearch.","retweets":0,"created":"0001-01-01T00:00:00Z"} -{"create":{"_id":"2","_index":"` + testIndexName + `","_type":"tweet"}} -{"user":"sandrae","message":"Dancing all night long. Yeah.","retweets":0,"created":"0001-01-01T00:00:00Z"} -{"delete":{"_id":"1","_index":"` + testIndexName + `","_type":"tweet"}} -{"update":{"_id":"2","_index":"` + testIndexName + `","_type":"tweet"}} -{"doc":{"retweets":42}} -` - got, err := bulkRequest.bodyAsString() - if err != nil { - t.Fatalf("expected no error, got: %v", err) - } - if got != expected { - t.Errorf("expected\n%s\ngot:\n%s", expected, got) - } - - // Run the bulk request - bulkResponse, err := bulkRequest.Do() - if err != nil { - t.Fatal(err) - } - if bulkResponse == nil { - t.Errorf("expected bulkResponse to be != nil; got nil") - } - if bulkResponse.Took == 0 { - t.Errorf("expected took to be > 0; got %d", bulkResponse.Took) - } - if bulkResponse.Errors { - t.Errorf("expected errors to be %v; got %v", false, bulkResponse.Errors) - } - if len(bulkResponse.Items) != 4 { - t.Fatalf("expected 4 result items; got %d", len(bulkResponse.Items)) - } - - // Indexed actions - indexed := bulkResponse.Indexed() - if indexed == nil { - t.Fatal("expected indexed to be != nil; got nil") - } - if len(indexed) != 1 { - t.Fatalf("expected len(indexed) == %d; got %d", 1, len(indexed)) - } - if indexed[0].Id != "1" { - t.Errorf("expected indexed[0].Id == %s; got %s", "1", indexed[0].Id) - } - if indexed[0].Status != 201 { - t.Errorf("expected indexed[0].Status == %d; got %d", 201, indexed[0].Status) - } - - // Created actions - created := bulkResponse.Created() - if created == nil { - t.Fatal("expected created to be != nil; got nil") - } - if len(created) != 1 { - t.Fatalf("expected len(created) == %d; got %d", 1, len(created)) - } - if created[0].Id != "2" { - t.Errorf("expected created[0].Id == %s; got %s", "2", created[0].Id) - } - if created[0].Status != 201 { - t.Errorf("expected created[0].Status == %d; got %d", 201, created[0].Status) - } - - // Deleted actions - deleted := bulkResponse.Deleted() - if deleted == nil { - t.Fatal("expected deleted to be != nil; got nil") - } - if len(deleted) != 1 { - t.Fatalf("expected len(deleted) == %d; got %d", 1, len(deleted)) - } - if deleted[0].Id != "1" { - t.Errorf("expected deleted[0].Id == %s; got %s", "1", deleted[0].Id) - } - if deleted[0].Status != 200 { - t.Errorf("expected deleted[0].Status == %d; got %d", 200, deleted[0].Status) - } - if !deleted[0].Found { - t.Errorf("expected deleted[0].Found == %v; got %v", true, deleted[0].Found) - } - - // Updated actions - updated := bulkResponse.Updated() - if updated == nil { - t.Fatal("expected updated to be != nil; got nil") - } - if len(updated) != 1 { - t.Fatalf("expected len(updated) == %d; got %d", 1, len(updated)) - } - if updated[0].Id != "2" { - t.Errorf("expected updated[0].Id == %s; got %s", "2", updated[0].Id) - } - if updated[0].Status != 200 { - t.Errorf("expected updated[0].Status == %d; got %d", 200, updated[0].Status) - } - if updated[0].Version != 2 { - t.Errorf("expected updated[0].Version == %d; got %d", 2, updated[0].Version) - } - - // Succeeded actions - succeeded := bulkResponse.Succeeded() - if succeeded == nil { - t.Fatal("expected succeeded to be != nil; got nil") - } - if len(succeeded) != 4 { - t.Fatalf("expected len(succeeded) == %d; got %d", 4, len(succeeded)) - } - - // ById - id1Results := bulkResponse.ById("1") - if id1Results == nil { - t.Fatal("expected id1Results to be != nil; got nil") - } - if len(id1Results) != 2 { - t.Fatalf("expected len(id1Results) == %d; got %d", 2, len(id1Results)) - } - if id1Results[0].Id != "1" { - t.Errorf("expected id1Results[0].Id == %s; got %s", "1", id1Results[0].Id) - } - if id1Results[0].Status != 201 { - t.Errorf("expected id1Results[0].Status == %d; got %d", 201, id1Results[0].Status) - } - if id1Results[0].Version != 1 { - t.Errorf("expected id1Results[0].Version == %d; got %d", 1, id1Results[0].Version) - } - if id1Results[1].Id != "1" { - t.Errorf("expected id1Results[1].Id == %s; got %s", "1", id1Results[1].Id) - } - if id1Results[1].Status != 200 { - t.Errorf("expected id1Results[1].Status == %d; got %d", 200, id1Results[1].Status) - } - if id1Results[1].Version != 2 { - t.Errorf("expected id1Results[1].Version == %d; got %d", 2, id1Results[1].Version) - } -} - -func TestFailedBulkRequests(t *testing.T) { - js := `{ - "took" : 2, - "errors" : true, - "items" : [ { - "index" : { - "_index" : "elastic-test", - "_type" : "tweet", - "_id" : "1", - "_version" : 1, - "status" : 201 - } - }, { - "create" : { - "_index" : "elastic-test", - "_type" : "tweet", - "_id" : "2", - "_version" : 1, - "status" : 423, - "error" : "Locked" - } - }, { - "delete" : { - "_index" : "elastic-test", - "_type" : "tweet", - "_id" : "1", - "_version" : 2, - "status" : 404, - "found" : false - } - }, { - "update" : { - "_index" : "elastic-test", - "_type" : "tweet", - "_id" : "2", - "_version" : 2, - "status" : 200 - } - } ] -}` - - var resp BulkResponse - err := json.Unmarshal([]byte(js), &resp) - if err != nil { - t.Fatal(err) - } - failed := resp.Failed() - if len(failed) != 2 { - t.Errorf("expected %d failed items; got: %d", 2, len(failed)) - } -} - -func TestBulkEstimatedSizeInBytes(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "sandrae", Message: "Dancing all night long. Yeah."} - - index1Req := NewBulkIndexRequest().Index(testIndexName).Type("tweet").Id("1").Doc(tweet1) - index2Req := NewBulkIndexRequest().OpType("create").Index(testIndexName).Type("tweet").Id("2").Doc(tweet2) - delete1Req := NewBulkDeleteRequest().Index(testIndexName).Type("tweet").Id("1") - update2Req := NewBulkUpdateRequest().Index(testIndexName).Type("tweet").Id("2"). - Doc(struct { - Retweets int `json:"retweets"` - }{ - Retweets: 42, - }) - - bulkRequest := client.Bulk() - bulkRequest = bulkRequest.Add(index1Req) - bulkRequest = bulkRequest.Add(index2Req) - bulkRequest = bulkRequest.Add(delete1Req) - bulkRequest = bulkRequest.Add(update2Req) - - if bulkRequest.NumberOfActions() != 4 { - t.Errorf("expected bulkRequest.NumberOfActions %d; got %d", 4, bulkRequest.NumberOfActions()) - } - - // The estimated size of the bulk request in bytes must be at least - // the length of the body request. - raw, err := bulkRequest.bodyAsString() - if err != nil { - t.Fatal(err) - } - rawlen := int64(len([]byte(raw))) - - if got, want := bulkRequest.EstimatedSizeInBytes(), rawlen; got < want { - t.Errorf("expected an EstimatedSizeInBytes = %d; got: %v", want, got) - } - - // Reset should also reset the calculated estimated byte size - bulkRequest.reset() - - if got, want := bulkRequest.EstimatedSizeInBytes(), int64(0); got != want { - t.Errorf("expected an EstimatedSizeInBytes = %d; got: %v", want, got) - } -} - -func TestBulkEstimateSizeInBytesLength(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - s := client.Bulk() - r := NewBulkDeleteRequest().Index(testIndexName).Type("tweet").Id("1") - s = s.Add(r) - if got, want := s.estimateSizeInBytes(r), int64(1+len(r.String())); got != want { - t.Fatalf("expected %d; got: %d", want, got) - } -} - -var benchmarkBulkEstimatedSizeInBytes int64 - -func BenchmarkBulkEstimatedSizeInBytesWith1Request(b *testing.B) { - client := setupTestClientAndCreateIndex(b) - s := client.Bulk() - var result int64 - for n := 0; n < b.N; n++ { - s = s.Add(NewBulkIndexRequest().Index(testIndexName).Type("tweet").Id("1").Doc(struct{ A string }{"1"})) - s = s.Add(NewBulkUpdateRequest().Index(testIndexName).Type("tweet").Id("1").Doc(struct{ A string }{"2"})) - s = s.Add(NewBulkDeleteRequest().Index(testIndexName).Type("tweet").Id("1")) - result = s.EstimatedSizeInBytes() - s.reset() - } - b.ReportAllocs() - benchmarkBulkEstimatedSizeInBytes = result // ensure the compiler doesn't optimize -} - -func BenchmarkBulkEstimatedSizeInBytesWith100Requests(b *testing.B) { - client := setupTestClientAndCreateIndex(b) - s := client.Bulk() - var result int64 - for n := 0; n < b.N; n++ { - for i := 0; i < 100; i++ { - s = s.Add(NewBulkIndexRequest().Index(testIndexName).Type("tweet").Id("1").Doc(struct{ A string }{"1"})) - s = s.Add(NewBulkUpdateRequest().Index(testIndexName).Type("tweet").Id("1").Doc(struct{ A string }{"2"})) - s = s.Add(NewBulkDeleteRequest().Index(testIndexName).Type("tweet").Id("1")) - } - result = s.EstimatedSizeInBytes() - s.reset() - } - b.ReportAllocs() - benchmarkBulkEstimatedSizeInBytes = result // ensure the compiler doesn't optimize -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/bulk_update_request.go b/vendor/gopkg.in/olivere/elastic.v2/bulk_update_request.go deleted file mode 100644 index 85f3120..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/bulk_update_request.go +++ /dev/null @@ -1,308 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "fmt" - "strings" -) - -// Bulk request to update a document in Elasticsearch. -// -// See https://www.elastic.co/guide/en/elasticsearch/reference/1.7/docs-bulk.html -// for details. -type BulkUpdateRequest struct { - BulkableRequest - index string - typ string - id string - - routing string - parent string - script string - scriptType string - scriptLang string - scriptParams map[string]interface{} - version int64 // default is MATCH_ANY - versionType string // default is "internal" - retryOnConflict *int - refresh *bool - upsert interface{} - docAsUpsert *bool - doc interface{} - ttl int64 - timestamp string - - source []string -} - -// NewBulkUpdateRequest returns a new BulkUpdateRequest. -func NewBulkUpdateRequest() *BulkUpdateRequest { - return &BulkUpdateRequest{} -} - -// Index specifies the Elasticsearch index to use for this update request. -// If unspecified, the index set on the BulkService will be used. -func (r *BulkUpdateRequest) Index(index string) *BulkUpdateRequest { - r.index = index - r.source = nil - return r -} - -// Type specifies the Elasticsearch type to use for this update request. -// If unspecified, the type set on the BulkService will be used. -func (r *BulkUpdateRequest) Type(typ string) *BulkUpdateRequest { - r.typ = typ - r.source = nil - return r -} - -// Id specifies the identifier of the document to update. -func (r *BulkUpdateRequest) Id(id string) *BulkUpdateRequest { - r.id = id - r.source = nil - return r -} - -// Routing specifies a routing value for the request. -func (r *BulkUpdateRequest) Routing(routing string) *BulkUpdateRequest { - r.routing = routing - r.source = nil - return r -} - -// Parent specifies the identifier of the parent document (if available). -func (r *BulkUpdateRequest) Parent(parent string) *BulkUpdateRequest { - r.parent = parent - r.source = nil - return r -} - -// Script specifies the update script. -func (r *BulkUpdateRequest) Script(script string) *BulkUpdateRequest { - r.script = script - r.source = nil - return r -} - -// ScriptType specifies the type of the update script. -func (r *BulkUpdateRequest) ScriptType(scriptType string) *BulkUpdateRequest { - r.scriptType = scriptType - r.source = nil - return r -} - -// ScriptLang specifies the language of the update script. -func (r *BulkUpdateRequest) ScriptLang(scriptLang string) *BulkUpdateRequest { - r.scriptLang = scriptLang - r.source = nil - return r -} - -// ScriptParams specifies parameters to pass to the update script. -func (r *BulkUpdateRequest) ScriptParams(params map[string]interface{}) *BulkUpdateRequest { - r.scriptParams = params - r.source = nil - return r -} - -// RetryOnConflict specifies how often to retry in case of a version conflict. -func (r *BulkUpdateRequest) RetryOnConflict(retryOnConflict int) *BulkUpdateRequest { - r.retryOnConflict = &retryOnConflict - r.source = nil - return r -} - -// Version indicates the version of the document as part of an optimistic -// concurrency model. -func (r *BulkUpdateRequest) Version(version int64) *BulkUpdateRequest { - r.version = version - r.source = nil - return r -} - -// VersionType can be "internal" (default), "external", "external_gte", -// "external_gt", or "force". -func (r *BulkUpdateRequest) VersionType(versionType string) *BulkUpdateRequest { - r.versionType = versionType - r.source = nil - return r -} - -// Refresh indicates whether to update the shards immediately after -// the request has been processed. Updated documents will appear -// in search immediately at the cost of slower bulk performance. -func (r *BulkUpdateRequest) Refresh(refresh bool) *BulkUpdateRequest { - r.refresh = &refresh - r.source = nil - return r -} - -// Doc specifies the updated document. -func (r *BulkUpdateRequest) Doc(doc interface{}) *BulkUpdateRequest { - r.doc = doc - r.source = nil - return r -} - -// DocAsUpsert indicates whether the contents of Doc should be used as -// the Upsert value. -// -// See https://www.elastic.co/guide/en/elasticsearch/reference/1.7/docs-update.html#_literal_doc_as_upsert_literal -// for details. -func (r *BulkUpdateRequest) DocAsUpsert(docAsUpsert bool) *BulkUpdateRequest { - r.docAsUpsert = &docAsUpsert - r.source = nil - return r -} - -// Upsert specifies the document to use for upserts. It will be used for -// create if the original document does not exist. -func (r *BulkUpdateRequest) Upsert(doc interface{}) *BulkUpdateRequest { - r.upsert = doc - r.source = nil - return r -} - -// Ttl specifies the time to live, and optional expiry time. -// This is deprecated as of 2.0.0-beta2. -func (r *BulkUpdateRequest) Ttl(ttl int64) *BulkUpdateRequest { - r.ttl = ttl - r.source = nil - return r -} - -// Timestamp specifies a timestamp for the document. -// This is deprecated as of 2.0.0-beta2. -func (r *BulkUpdateRequest) Timestamp(timestamp string) *BulkUpdateRequest { - r.timestamp = timestamp - r.source = nil - return r -} - -// String returns the on-wire representation of the update request, -// concatenated as a single string. -func (r *BulkUpdateRequest) String() string { - lines, err := r.Source() - if err != nil { - return fmt.Sprintf("error: %v", err) - } - return strings.Join(lines, "\n") -} - -func (r *BulkUpdateRequest) getSourceAsString(data interface{}) (string, error) { - switch t := data.(type) { - default: - body, err := json.Marshal(data) - if err != nil { - return "", err - } - return string(body), nil - case json.RawMessage: - return string(t), nil - case *json.RawMessage: - return string(*t), nil - case string: - return t, nil - case *string: - return *t, nil - } -} - -// Source returns the on-wire representation of the update request, -// split into an action-and-meta-data line and an (optional) source line. -// See https://www.elastic.co/guide/en/elasticsearch/reference/1.7/docs-bulk.html -// for details. -func (r BulkUpdateRequest) Source() ([]string, error) { - // { "update" : { "_index" : "test", "_type" : "type1", "_id" : "1", ... } } - // { "doc" : { "field1" : "value1", ... } } - // or - // { "update" : { "_index" : "test", "_type" : "type1", "_id" : "1", ... } } - // { "script" : { ... } } - - if r.source != nil { - return r.source, nil - } - - lines := make([]string, 2) - - // "update" ... - command := make(map[string]interface{}) - updateCommand := make(map[string]interface{}) - if r.index != "" { - updateCommand["_index"] = r.index - } - if r.typ != "" { - updateCommand["_type"] = r.typ - } - if r.id != "" { - updateCommand["_id"] = r.id - } - if r.routing != "" { - updateCommand["_routing"] = r.routing - } - if r.parent != "" { - updateCommand["_parent"] = r.parent - } - if r.timestamp != "" { - updateCommand["_timestamp"] = r.timestamp - } - if r.ttl > 0 { - updateCommand["_ttl"] = r.ttl - } - if r.version > 0 { - updateCommand["_version"] = r.version - } - if r.versionType != "" { - updateCommand["_version_type"] = r.versionType - } - if r.refresh != nil { - updateCommand["refresh"] = *r.refresh - } - if r.retryOnConflict != nil { - updateCommand["_retry_on_conflict"] = *r.retryOnConflict - } - command["update"] = updateCommand - line, err := json.Marshal(command) - if err != nil { - return nil, err - } - lines[0] = string(line) - - // 2nd line: {"doc" : { ... }} or {"script": {...}} - source := make(map[string]interface{}) - if r.docAsUpsert != nil { - source["doc_as_upsert"] = *r.docAsUpsert - } - if r.upsert != nil { - source["upsert"] = r.upsert - } - if r.doc != nil { - // {"doc":{...}} - source["doc"] = r.doc - } else if r.script != "" { - // {"script":...} - source["script"] = r.script - if r.scriptLang != "" { - source["lang"] = r.scriptLang - } - /* - if r.scriptType != "" { - source["script_type"] = r.scriptType - } - */ - if r.scriptParams != nil && len(r.scriptParams) > 0 { - source["params"] = r.scriptParams - } - } - lines[1], err = r.getSourceAsString(source) - if err != nil { - return nil, err - } - - r.source = lines - return lines, nil -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/bulk_update_request_test.go b/vendor/gopkg.in/olivere/elastic.v2/bulk_update_request_test.go deleted file mode 100644 index eb50a49..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/bulk_update_request_test.go +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright 2012-2016 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "testing" -) - -func TestBulkUpdateRequestSerialization(t *testing.T) { - tests := []struct { - Request BulkableRequest - Expected []string - }{ - // #0 - { - Request: NewBulkUpdateRequest().Index("index1").Type("tweet").Id("1").Doc(struct { - Counter int64 `json:"counter"` - }{ - Counter: 42, - }), - Expected: []string{ - `{"update":{"_id":"1","_index":"index1","_type":"tweet"}}`, - `{"doc":{"counter":42}}`, - }, - }, - // #1 - { - Request: NewBulkUpdateRequest().Index("index1").Type("tweet").Id("1"). - RetryOnConflict(3). - DocAsUpsert(true). - Doc(struct { - Counter int64 `json:"counter"` - }{ - Counter: 42, - }), - Expected: []string{ - `{"update":{"_id":"1","_index":"index1","_retry_on_conflict":3,"_type":"tweet"}}`, - `{"doc":{"counter":42},"doc_as_upsert":true}`, - }, - }, - // #2 - { - Request: NewBulkUpdateRequest().Index("index1").Type("tweet").Id("1"). - RetryOnConflict(3). - Script(`ctx._source.retweets += param1`). - ScriptLang("js"). - ScriptParams(map[string]interface{}{"param1": 42}). - Upsert(struct { - Counter int64 `json:"counter"` - }{ - Counter: 42, - }), - Expected: []string{ - `{"update":{"_id":"1","_index":"index1","_retry_on_conflict":3,"_type":"tweet"}}`, - `{"lang":"js","params":{"param1":42},"script":"ctx._source.retweets += param1","upsert":{"counter":42}}`, - }, - }, - } - - for i, test := range tests { - lines, err := test.Request.Source() - if err != nil { - t.Fatalf("case #%d: expected no error, got: %v", i, err) - } - if lines == nil { - t.Fatalf("case #%d: expected lines, got nil", i) - } - if len(lines) != len(test.Expected) { - t.Fatalf("case #%d: expected %d lines, got %d", i, len(test.Expected), len(lines)) - } - for j, line := range lines { - if line != test.Expected[j] { - t.Errorf("case #%d: expected line #%d to be\n%s, got:\n%s", i, j, test.Expected[j], line) - } - } - } -} - -var bulkUpdateRequestSerializationResult string - -func BenchmarkBulkUpdateRequestSerialization(b *testing.B) { - r := NewBulkUpdateRequest().Index("index1").Type("tweet").Id("1").Doc(struct { - Counter int64 `json:"counter"` - }{ - Counter: 42, - }) - var s string - for n := 0; n < b.N; n++ { - s = r.String() - r.source = nil // Don't let caching spoil the benchmark - } - bulkUpdateRequestSerializationResult = s // ensure the compiler doesn't optimize -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/clear_scroll.go b/vendor/gopkg.in/olivere/elastic.v2/clear_scroll.go deleted file mode 100644 index a0098cc..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/clear_scroll.go +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "log" - "net/url" - "strings" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -var ( - _ = fmt.Print - _ = log.Print - _ = strings.Index - _ = uritemplates.Expand - _ = url.Parse -) - -// ClearScrollService is documented at http://www.elasticsearch.org/guide/en/elasticsearch/reference/1.4/search-request-scroll.html. -type ClearScrollService struct { - client *Client - pretty bool - scrollId []string - bodyJson interface{} - bodyString string -} - -// NewClearScrollService creates a new ClearScrollService. -func NewClearScrollService(client *Client) *ClearScrollService { - return &ClearScrollService{ - client: client, - scrollId: make([]string, 0), - } -} - -// ScrollId is a list of scroll IDs to clear. -// Use _all to clear all search contexts. -func (s *ClearScrollService) ScrollId(scrollId ...string) *ClearScrollService { - s.scrollId = make([]string, 0) - s.scrollId = append(s.scrollId, scrollId...) - return s -} - -// buildURL builds the URL for the operation. -func (s *ClearScrollService) buildURL() (string, url.Values, error) { - path, err := uritemplates.Expand("/_search/scroll", map[string]string{}) - if err != nil { - return "", url.Values{}, err - } - return path, url.Values{}, nil -} - -// Validate checks if the operation is valid. -func (s *ClearScrollService) Validate() error { - return nil -} - -// Do executes the operation. -func (s *ClearScrollService) Do() (*ClearScrollResponse, error) { - // Check pre-conditions - if err := s.Validate(); err != nil { - return nil, err - } - - // Get URL for request - path, params, err := s.buildURL() - if err != nil { - return nil, err - } - - // Setup HTTP request body - body := strings.Join(s.scrollId, ",") - - // Get HTTP response - res, err := s.client.PerformRequest("DELETE", path, params, body) - if err != nil { - return nil, err - } - - // Return operation response - ret := new(ClearScrollResponse) - if err := s.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -// ClearScrollResponse is the response of ClearScrollService.Do. -type ClearScrollResponse struct { -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/clear_scroll_test.go b/vendor/gopkg.in/olivere/elastic.v2/clear_scroll_test.go deleted file mode 100644 index c251fc2..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/clear_scroll_test.go +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - _ "net/http" - "testing" -) - -func TestClearScroll(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Match all should return all documents - res, err := client.Scroll(testIndexName).Size(1).Do() - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Errorf("expected results != nil; got nil") - } - if res.ScrollId == "" { - t.Errorf("expected scrollId in results; got %q", res.ScrollId) - } - - // Search should succeed - _, err = client.Scroll(testIndexName).Size(1).ScrollId(res.ScrollId).Do() - if err != nil { - t.Fatal(err) - } - - // Clear scroll id - clearScrollRes, err := client.ClearScroll().ScrollId(res.ScrollId).Do() - if err != nil { - t.Fatal(err) - } - if clearScrollRes == nil { - t.Error("expected results != nil; got nil") - } - - // Search result should fail - _, err = client.Scroll(testIndexName).Size(1).ScrollId(res.ScrollId).Do() - if err == nil { - t.Fatalf("expected scroll to fail") - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/client.go b/vendor/gopkg.in/olivere/elastic.v2/client.go deleted file mode 100644 index 2e22108..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/client.go +++ /dev/null @@ -1,1550 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "bytes" - "encoding/json" - "errors" - "fmt" - "net/http" - "net/http/httputil" - "net/url" - "regexp" - "strings" - "sync" - "time" -) - -const ( - // Version is the current version of Elastic. - Version = "2.0.58" - - // DefaultURL is the default endpoint of Elasticsearch on the local machine. - // It is used e.g. when initializing a new Client without a specific URL. - DefaultURL = "http://127.0.0.1:9200" - - // DefaultScheme is the default protocol scheme to use when sniffing - // the Elasticsearch cluster. - DefaultScheme = "http" - - // DefaultHealthcheckEnabled specifies if healthchecks are enabled by default. - DefaultHealthcheckEnabled = true - - // DefaultHealthcheckTimeoutStartup is the time the healthcheck waits - // for a response from Elasticsearch on startup, i.e. when creating a - // client. After the client is started, a shorter timeout is commonly used - // (its default is specified in DefaultHealthcheckTimeout). - DefaultHealthcheckTimeoutStartup = 5 * time.Second - - // DefaultHealthcheckTimeout specifies the time a running client waits for - // a response from Elasticsearch. Notice that the healthcheck timeout - // when a client is created is larger by default (see DefaultHealthcheckTimeoutStartup). - DefaultHealthcheckTimeout = 1 * time.Second - - // DefaultHealthcheckInterval is the default interval between - // two health checks of the nodes in the cluster. - DefaultHealthcheckInterval = 60 * time.Second - - // DefaultSnifferEnabled specifies if the sniffer is enabled by default. - DefaultSnifferEnabled = true - - // DefaultSnifferInterval is the interval between two sniffing procedures, - // i.e. the lookup of all nodes in the cluster and their addition/removal - // from the list of actual connections. - DefaultSnifferInterval = 15 * time.Minute - - // DefaultSnifferTimeoutStartup is the default timeout for the sniffing - // process that is initiated while creating a new client. For subsequent - // sniffing processes, DefaultSnifferTimeout is used (by default). - DefaultSnifferTimeoutStartup = 5 * time.Second - - // DefaultSnifferTimeout is the default timeout after which the - // sniffing process times out. Notice that for the initial sniffing - // process, DefaultSnifferTimeoutStartup is used. - DefaultSnifferTimeout = 2 * time.Second - - // DefaultSendGetBodyAs is the HTTP method to use when elastic is sending - // a GET request with a body. - DefaultSendGetBodyAs = "GET" - - // DefaultGzipEnabled specifies if gzip compression is enabled by default. - DefaultGzipEnabled = false - - // off is used to disable timeouts. - off = -1 * time.Second -) - -var ( - // ErrNoClient is raised when no Elasticsearch node is available. - ErrNoClient = errors.New("no Elasticsearch node available") - - // ErrRetry is raised when a request cannot be executed after the configured - // number of retries. - ErrRetry = errors.New("cannot connect after several retries") - - // ErrTimeout is raised when a request timed out, e.g. when WaitForStatus - // didn't return in time. - ErrTimeout = errors.New("timeout") - - // noRetries is a retrier that does not retry. - noRetries = NewStopRetrier() -) - -// ClientOptionFunc is a function that configures a Client. -// It is used in NewClient. -type ClientOptionFunc func(*Client) error - -// Client is an Elasticsearch client. Create one by calling NewClient. -type Client struct { - c *http.Client // net/http Client to use for requests - - connsMu sync.RWMutex // connsMu guards the next block - conns []*conn // all connections - cindex int // index into conns - - mu sync.RWMutex // guards the next block - urls []string // set of URLs passed initially to the client - running bool // true if the client's background processes are running - errorlog Logger // error log for critical messages - infolog Logger // information log for e.g. response times - tracelog Logger // trace log for debugging - maxRetries int // max. number of retries - scheme string // http or https - healthcheckEnabled bool // healthchecks enabled or disabled - healthcheckTimeoutStartup time.Duration // time the healthcheck waits for a response from Elasticsearch on startup - healthcheckTimeout time.Duration // time the healthcheck waits for a response from Elasticsearch - healthcheckInterval time.Duration // interval between healthchecks - healthcheckStop chan bool // notify healthchecker to stop, and notify back - snifferEnabled bool // sniffer enabled or disabled - snifferTimeoutStartup time.Duration // time the sniffer waits for a response from nodes info API on startup - snifferTimeout time.Duration // time the sniffer waits for a response from nodes info API - snifferInterval time.Duration // interval between sniffing - snifferStop chan bool // notify sniffer to stop, and notify back - decoder Decoder // used to decode data sent from Elasticsearch - basicAuth bool // indicates whether to send HTTP Basic Auth credentials - basicAuthUsername string // username for HTTP Basic Auth - basicAuthPassword string // password for HTTP Basic Auth - sendGetBodyAs string // override for when sending a GET with a body - gzipEnabled bool // gzip compression enabled or disabled (default) - retrier Retrier // strategy for retries -} - -// NewClient creates a new client to work with Elasticsearch. -// -// NewClient, by default, is meant to be long-lived and shared across -// your application. If you need a short-lived client, e.g. for request-scope, -// consider using NewSimpleClient instead. -// -// The caller can configure the new client by passing configuration options -// to the func. -// -// Example: -// -// client, err := elastic.NewClient( -// elastic.SetURL("http://127.0.0.1:9200", "http://127.0.0.1:9201"), -// elastic.SetBasicAuth("user", "secret")) -// -// If no URL is configured, Elastic uses DefaultURL by default. -// -// If the sniffer is enabled (the default), the new client then sniffes -// the cluster via the Nodes Info API -// (see http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/cluster-nodes-info.html#cluster-nodes-info). -// It uses the URLs specified by the caller. The caller is responsible -// to only pass a list of URLs of nodes that belong to the same cluster. -// This sniffing process is run on startup and periodically. -// Use SnifferInterval to set the interval between two sniffs (default is -// 15 minutes). In other words: By default, the client will find new nodes -// in the cluster and remove those that are no longer available every -// 15 minutes. Disable the sniffer by passing SetSniff(false) to NewClient. -// -// The list of nodes found in the sniffing process will be used to make -// connections to the REST API of Elasticsearch. These nodes are also -// periodically checked in a shorter time frame. This process is called -// a health check. By default, a health check is done every 60 seconds. -// You can set a shorter or longer interval by SetHealthcheckInterval. -// Disabling health checks is not recommended, but can be done by -// SetHealthcheck(false). -// -// Connections are automatically marked as dead or healthy while -// making requests to Elasticsearch. When a request fails, Elastic will -// call into the Retry strategy which can be specified with SetRetry. -// The Retry strategy is also responsible for handling backoff i.e. the time -// to wait before starting the next request. There are various standard -// backoff implementations, e.g. ExponentialBackoff or SimpleBackoff. -// Retries are disabled by default. -// -// If no HttpClient is configured, then http.DefaultClient is used. -// You can use your own http.Client with some http.Transport for -// advanced scenarios. -// -// An error is also returned when some configuration option is invalid or -// the new client cannot sniff the cluster (if enabled). -func NewClient(options ...ClientOptionFunc) (*Client, error) { - // Set up the client - c := &Client{ - c: http.DefaultClient, - conns: make([]*conn, 0), - cindex: -1, - scheme: DefaultScheme, - decoder: &DefaultDecoder{}, - healthcheckEnabled: DefaultHealthcheckEnabled, - healthcheckTimeoutStartup: DefaultHealthcheckTimeoutStartup, - healthcheckTimeout: DefaultHealthcheckTimeout, - healthcheckInterval: DefaultHealthcheckInterval, - healthcheckStop: make(chan bool), - snifferEnabled: DefaultSnifferEnabled, - snifferTimeoutStartup: DefaultSnifferTimeoutStartup, - snifferTimeout: DefaultSnifferTimeout, - snifferInterval: DefaultSnifferInterval, - snifferStop: make(chan bool), - sendGetBodyAs: DefaultSendGetBodyAs, - gzipEnabled: DefaultGzipEnabled, - retrier: noRetries, // no retries by default - } - - // Run the options on it - for _, option := range options { - if err := option(c); err != nil { - return nil, err - } - } - - if len(c.urls) == 0 { - c.urls = []string{DefaultURL} - } - c.urls = canonicalize(c.urls...) - - // Check if we can make a request to any of the specified URLs - if c.healthcheckEnabled { - if err := c.startupHealthcheck(c.healthcheckTimeoutStartup); err != nil { - return nil, err - } - } - - if c.snifferEnabled { - // Sniff the cluster initially - if err := c.sniff(c.snifferTimeoutStartup); err != nil { - return nil, err - } - } else { - // Do not sniff the cluster initially. Use the provided URLs instead. - for _, url := range c.urls { - c.conns = append(c.conns, newConn(url, url)) - } - } - - if c.healthcheckEnabled { - // Perform an initial health check - c.healthcheck(c.healthcheckTimeoutStartup, true) - } - // Ensure that we have at least one connection available - if err := c.mustActiveConn(); err != nil { - return nil, err - } - - if c.snifferEnabled { - go c.sniffer() // periodically update cluster information - } - if c.healthcheckEnabled { - go c.healthchecker() // start goroutine periodically ping all nodes of the cluster - } - - c.mu.Lock() - c.running = true - c.mu.Unlock() - - return c, nil -} - -// NewSimpleClient creates a new short-lived Client that can be used in -// use cases where you need e.g. one client per request. -// -// While NewClient by default sets up e.g. periodic health checks -// and sniffing for new nodes in separate goroutines, NewSimpleClient does -// not and is meant as a simple replacement where you don't need all the -// heavy lifting of NewClient. -// -// NewSimpleClient does the following by default: First, all health checks -// are disabled, including timeouts and periodic checks. Second, sniffing -// is disabled, including timeouts and periodic checks. The number of retries -// is set to 1. NewSimpleClient also does not start any goroutines. -// -// Notice that you can still override settings by passing additional options, -// just like with NewClient. -func NewSimpleClient(options ...ClientOptionFunc) (*Client, error) { - c := &Client{ - c: http.DefaultClient, - conns: make([]*conn, 0), - cindex: -1, - scheme: DefaultScheme, - decoder: &DefaultDecoder{}, - healthcheckEnabled: false, - healthcheckTimeoutStartup: off, - healthcheckTimeout: off, - healthcheckInterval: off, - healthcheckStop: make(chan bool), - snifferEnabled: false, - snifferTimeoutStartup: off, - snifferTimeout: off, - snifferInterval: off, - snifferStop: make(chan bool), - sendGetBodyAs: DefaultSendGetBodyAs, - gzipEnabled: DefaultGzipEnabled, - retrier: noRetries, // no retries by default - } - - // Run the options on it - for _, option := range options { - if err := option(c); err != nil { - return nil, err - } - } - - if len(c.urls) == 0 { - c.urls = []string{DefaultURL} - } - c.urls = canonicalize(c.urls...) - - for _, url := range c.urls { - c.conns = append(c.conns, newConn(url, url)) - } - - // Ensure that we have at least one connection available - if err := c.mustActiveConn(); err != nil { - return nil, err - } - - c.mu.Lock() - c.running = true - c.mu.Unlock() - - return c, nil -} - -// SetHttpClient can be used to specify the http.Client to use when making -// HTTP requests to Elasticsearch. -func SetHttpClient(httpClient *http.Client) ClientOptionFunc { - return func(c *Client) error { - if httpClient != nil { - c.c = httpClient - } else { - c.c = http.DefaultClient - } - return nil - } -} - -// SetBasicAuth can be used to specify the HTTP Basic Auth credentials to -// use when making HTTP requests to Elasticsearch. -func SetBasicAuth(username, password string) ClientOptionFunc { - return func(c *Client) error { - c.basicAuthUsername = username - c.basicAuthPassword = password - c.basicAuth = c.basicAuthUsername != "" || c.basicAuthPassword != "" - return nil - } -} - -// SetURL defines the URL endpoints of the Elasticsearch nodes. Notice that -// when sniffing is enabled, these URLs are used to initially sniff the -// cluster on startup. -func SetURL(urls ...string) ClientOptionFunc { - return func(c *Client) error { - switch len(urls) { - case 0: - c.urls = []string{DefaultURL} - default: - c.urls = urls - } - return nil - } -} - -// SetScheme sets the HTTP scheme to look for when sniffing (http or https). -// This is http by default. -func SetScheme(scheme string) ClientOptionFunc { - return func(c *Client) error { - c.scheme = scheme - return nil - } -} - -// SetSniff enables or disables the sniffer (enabled by default). -func SetSniff(enabled bool) ClientOptionFunc { - return func(c *Client) error { - c.snifferEnabled = enabled - return nil - } -} - -// SetSnifferTimeoutStartup sets the timeout for the sniffer that is used -// when creating a new client. The default is 5 seconds. Notice that the -// timeout being used for subsequent sniffing processes is set with -// SetSnifferTimeout. -func SetSnifferTimeoutStartup(timeout time.Duration) ClientOptionFunc { - return func(c *Client) error { - c.snifferTimeoutStartup = timeout - return nil - } -} - -// SetSnifferTimeout sets the timeout for the sniffer that finds the -// nodes in a cluster. The default is 2 seconds. Notice that the timeout -// used when creating a new client on startup is usually greater and can -// be set with SetSnifferTimeoutStartup. -func SetSnifferTimeout(timeout time.Duration) ClientOptionFunc { - return func(c *Client) error { - c.snifferTimeout = timeout - return nil - } -} - -// SetSnifferInterval sets the interval between two sniffing processes. -// The default interval is 15 minutes. -func SetSnifferInterval(interval time.Duration) ClientOptionFunc { - return func(c *Client) error { - c.snifferInterval = interval - return nil - } -} - -// SetHealthcheck enables or disables healthchecks (enabled by default). -func SetHealthcheck(enabled bool) ClientOptionFunc { - return func(c *Client) error { - c.healthcheckEnabled = enabled - return nil - } -} - -// SetHealthcheckTimeoutStartup sets the timeout for the initial health check. -// The default timeout is 5 seconds (see DefaultHealthcheckTimeoutStartup). -// Notice that timeouts for subsequent health checks can be modified with -// SetHealthcheckTimeout. -func SetHealthcheckTimeoutStartup(timeout time.Duration) ClientOptionFunc { - return func(c *Client) error { - c.healthcheckTimeoutStartup = timeout - return nil - } -} - -// SetHealthcheckTimeout sets the timeout for periodic health checks. -// The default timeout is 1 second (see DefaultHealthcheckTimeout). -// Notice that a different (usually larger) timeout is used for the initial -// healthcheck, which is initiated while creating a new client. -// The startup timeout can be modified with SetHealthcheckTimeoutStartup. -func SetHealthcheckTimeout(timeout time.Duration) ClientOptionFunc { - return func(c *Client) error { - c.healthcheckTimeout = timeout - return nil - } -} - -// SetHealthcheckInterval sets the interval between two health checks. -// The default interval is 60 seconds. -func SetHealthcheckInterval(interval time.Duration) ClientOptionFunc { - return func(c *Client) error { - c.healthcheckInterval = interval - return nil - } -} - -// SetMaxRetries sets the maximum number of retries before giving up when -// performing a HTTP request to Elasticsearch. -// -// Deprecated: Replace with a Retry implementation. -func SetMaxRetries(maxRetries int) ClientOptionFunc { - return func(c *Client) error { - if maxRetries < 0 { - return errors.New("MaxRetries must be greater than or equal to 0") - } else if maxRetries == 0 { - c.retrier = noRetries - } else { - // Create a Retrier that will wait for 100ms (+/- jitter) between requests. - // This resembles the old behavior with maxRetries. - ticks := make([]int, maxRetries) - for i := 0; i < len(ticks); i++ { - ticks[i] = 100 - } - backoff := NewSimpleBackoff(ticks...) - c.retrier = NewBackoffRetrier(backoff) - } - return nil - } -} - -// SetGzip enables or disables gzip compression (disabled by default). -func SetGzip(enabled bool) ClientOptionFunc { - return func(c *Client) error { - c.gzipEnabled = enabled - return nil - } -} - -// SetDecoder sets the Decoder to use when decoding data from Elasticsearch. -// DefaultDecoder is used by default. -func SetDecoder(decoder Decoder) ClientOptionFunc { - return func(c *Client) error { - if decoder != nil { - c.decoder = decoder - } else { - c.decoder = &DefaultDecoder{} - } - return nil - } -} - -// SetErrorLog sets the logger for critical messages like nodes joining -// or leaving the cluster or failing requests. It is nil by default. -func SetErrorLog(logger Logger) ClientOptionFunc { - return func(c *Client) error { - c.errorlog = logger - return nil - } -} - -// SetInfoLog sets the logger for informational messages, e.g. requests -// and their response times. It is nil by default. -func SetInfoLog(logger Logger) ClientOptionFunc { - return func(c *Client) error { - c.infolog = logger - return nil - } -} - -// SetTraceLog specifies the log.Logger to use for output of HTTP requests -// and responses which is helpful during debugging. It is nil by default. -func SetTraceLog(logger Logger) ClientOptionFunc { - return func(c *Client) error { - c.tracelog = logger - return nil - } -} - -// SendGetBodyAs specifies the HTTP method to use when sending a GET request -// with a body. It is GET by default. -func SetSendGetBodyAs(httpMethod string) ClientOptionFunc { - return func(c *Client) error { - c.sendGetBodyAs = httpMethod - return nil - } -} - -// SetRetrier specifies the retry strategy that handles errors during -// HTTP request/response with Elasticsearch. -func SetRetrier(retrier Retrier) ClientOptionFunc { - return func(c *Client) error { - if retrier == nil { - retrier = noRetries // no retries by default - } - c.retrier = retrier - return nil - } -} - -// String returns a string representation of the client status. -func (c *Client) String() string { - c.connsMu.Lock() - conns := c.conns - c.connsMu.Unlock() - - var buf bytes.Buffer - for i, conn := range conns { - if i > 0 { - buf.WriteString(", ") - } - buf.WriteString(conn.String()) - } - return buf.String() -} - -// IsRunning returns true if the background processes of the client are -// running, false otherwise. -func (c *Client) IsRunning() bool { - c.mu.RLock() - defer c.mu.RUnlock() - return c.running -} - -// Start starts the background processes like sniffing the cluster and -// periodic health checks. You don't need to run Start when creating a -// client with NewClient; the background processes are run by default. -// -// If the background processes are already running, this is a no-op. -func (c *Client) Start() { - c.mu.RLock() - if c.running { - c.mu.RUnlock() - return - } - c.mu.RUnlock() - - if c.snifferEnabled { - go c.sniffer() - } - if c.healthcheckEnabled { - go c.healthchecker() - } - - c.mu.Lock() - c.running = true - c.mu.Unlock() - - c.infof("elastic: client started") -} - -// Stop stops the background processes that the client is running, -// i.e. sniffing the cluster periodically and running health checks -// on the nodes. -// -// If the background processes are not running, this is a no-op. -func (c *Client) Stop() { - c.mu.RLock() - if !c.running { - c.mu.RUnlock() - return - } - c.mu.RUnlock() - - if c.healthcheckEnabled { - c.healthcheckStop <- true - <-c.healthcheckStop - } - - if c.snifferEnabled { - c.snifferStop <- true - <-c.snifferStop - } - - c.mu.Lock() - c.running = false - c.mu.Unlock() - - c.infof("elastic: client stopped") -} - -// errorf logs to the error log. -func (c *Client) errorf(format string, args ...interface{}) { - if c.errorlog != nil { - c.errorlog.Printf(format, args...) - } -} - -// infof logs informational messages. -func (c *Client) infof(format string, args ...interface{}) { - if c.infolog != nil { - c.infolog.Printf(format, args...) - } -} - -// tracef logs to the trace log. -func (c *Client) tracef(format string, args ...interface{}) { - if c.tracelog != nil { - c.tracelog.Printf(format, args...) - } -} - -// dumpRequest dumps the given HTTP request to the trace log. -func (c *Client) dumpRequest(r *http.Request) { - if c.tracelog != nil { - out, err := httputil.DumpRequestOut(r, true) - if err == nil { - c.tracef("%s\n", string(out)) - } - } -} - -// dumpResponse dumps the given HTTP response to the trace log. -func (c *Client) dumpResponse(resp *http.Response) { - if c.tracelog != nil { - out, err := httputil.DumpResponse(resp, true) - if err == nil { - c.tracef("%s\n", string(out)) - } - } -} - -// sniffer periodically runs sniff. -func (c *Client) sniffer() { - c.mu.RLock() - timeout := c.snifferTimeout - interval := c.snifferInterval - c.mu.RUnlock() - - ticker := time.NewTicker(interval) - defer ticker.Stop() - - for { - select { - case <-c.snifferStop: - // we are asked to stop, so we signal back that we're stopping now - c.snifferStop <- true - return - case <-ticker.C: - c.sniff(timeout) - } - } -} - -// sniff uses the Node Info API to return the list of nodes in the cluster. -// It uses the list of URLs passed on startup plus the list of URLs found -// by the preceding sniffing process (if sniffing is enabled). -// -// If sniffing is disabled, this is a no-op. -func (c *Client) sniff(timeout time.Duration) error { - c.mu.RLock() - if !c.snifferEnabled { - c.mu.RUnlock() - return nil - } - - // Use all available URLs provided to sniff the cluster. - urlsMap := make(map[string]bool) - urls := make([]string, 0) - - // Add all URLs provided on startup - for _, url := range c.urls { - urlsMap[url] = true - urls = append(urls, url) - } - c.mu.RUnlock() - - // Add all URLs found by sniffing - c.connsMu.RLock() - for _, conn := range c.conns { - if !conn.IsDead() { - url := conn.URL() - if _, found := urlsMap[url]; !found { - urls = append(urls, url) - } - } - } - c.connsMu.RUnlock() - - if len(urls) == 0 { - return ErrNoClient - } - - // Start sniffing on all found URLs - ch := make(chan []*conn, len(urls)) - for _, url := range urls { - go func(url string) { ch <- c.sniffNode(url) }(url) - } - - // Wait for the results to come back, or the process times out. - for { - select { - case conns := <-ch: - if len(conns) > 0 { - c.updateConns(conns) - return nil - } - case <-time.After(timeout): - // We get here if no cluster responds in time - return ErrNoClient - } - } -} - -// reSniffHostAndPort is used to extract hostname and port from a result -// from a Nodes Info API (example: "inet[/127.0.0.1:9200]"). -var reSniffHostAndPort = regexp.MustCompile(`\/([^:]*):([0-9]+)\]`) - -// sniffNode sniffs a single node. This method is run as a goroutine -// in sniff. If successful, it returns the list of node URLs extracted -// from the result of calling Nodes Info API. Otherwise, an empty array -// is returned. -func (c *Client) sniffNode(url string) []*conn { - nodes := make([]*conn, 0) - - // Call the Nodes Info API at /_nodes/http - req, err := NewRequest("GET", url+"/_nodes/http") - if err != nil { - return nodes - } - - c.mu.RLock() - if c.basicAuth { - req.SetBasicAuth(c.basicAuthUsername, c.basicAuthPassword) - } - c.mu.RUnlock() - - res, err := c.c.Do((*http.Request)(req)) - if err != nil { - return nodes - } - if res == nil { - return nodes - } - - if res.Body != nil { - defer res.Body.Close() - } - - var info NodesInfoResponse - if err := json.NewDecoder(res.Body).Decode(&info); err == nil { - if len(info.Nodes) > 0 { - switch c.scheme { - case "https": - for nodeID, node := range info.Nodes { - m := reSniffHostAndPort.FindStringSubmatch(node.HTTPSAddress) - if len(m) == 3 { - url := fmt.Sprintf("https://%s:%s", m[1], m[2]) - nodes = append(nodes, newConn(nodeID, url)) - } - } - default: - for nodeID, node := range info.Nodes { - m := reSniffHostAndPort.FindStringSubmatch(node.HTTPAddress) - if len(m) == 3 { - url := fmt.Sprintf("http://%s:%s", m[1], m[2]) - nodes = append(nodes, newConn(nodeID, url)) - } - } - } - } - } - return nodes -} - -// updateConns updates the clients' connections with new information -// gather by a sniff operation. -func (c *Client) updateConns(conns []*conn) { - c.connsMu.Lock() - - newConns := make([]*conn, 0) - - // Build up new connections: - // If we find an existing connection, use that (including no. of failures etc.). - // If we find a new connection, add it. - for _, conn := range conns { - var found bool - for _, oldConn := range c.conns { - if oldConn.NodeID() == conn.NodeID() { - // Take over the old connection - newConns = append(newConns, oldConn) - found = true - break - } - } - if !found { - // New connection didn't exist, so add it to our list of new conns. - c.infof("elastic: %s joined the cluster", conn.URL()) - newConns = append(newConns, conn) - } - } - - c.conns = newConns - c.cindex = -1 - c.connsMu.Unlock() -} - -// healthchecker periodically runs healthcheck. -func (c *Client) healthchecker() { - c.mu.RLock() - timeout := c.healthcheckTimeout - interval := c.healthcheckInterval - c.mu.RUnlock() - - ticker := time.NewTicker(interval) - defer ticker.Stop() - - for { - select { - case <-c.healthcheckStop: - // we are asked to stop, so we signal back that we're stopping now - c.healthcheckStop <- true - return - case <-ticker.C: - c.healthcheck(timeout, false) - } - } -} - -// healthcheck does a health check on all nodes in the cluster. Depending on -// the node state, it marks connections as dead, sets them alive etc. -// If healthchecks are disabled this is a no-op. -// The timeout specifies how long to wait for a response from Elasticsearch. -func (c *Client) healthcheck(timeout time.Duration, force bool) { - c.mu.RLock() - if !c.healthcheckEnabled && !force { - c.mu.RUnlock() - return - } - c.mu.RUnlock() - - c.connsMu.RLock() - conns := c.conns - basicAuth := c.basicAuth - basicAuthUsername := c.basicAuthUsername - basicAuthPassword := c.basicAuthPassword - c.connsMu.RUnlock() - - timeoutInMillis := int64(timeout / time.Millisecond) - - for _, conn := range conns { - params := make(url.Values) - params.Set("timeout", fmt.Sprintf("%dms", timeoutInMillis)) - req, err := NewRequest("HEAD", conn.URL()+"/?"+params.Encode()) - if err == nil { - if basicAuth { - req.SetBasicAuth(basicAuthUsername, basicAuthPassword) - } - res, err := c.c.Do((*http.Request)(req)) - if err == nil { - if res.Body != nil { - defer res.Body.Close() - } - if res.StatusCode >= 200 && res.StatusCode < 300 { - conn.MarkAsAlive() - } else { - conn.MarkAsDead() - c.errorf("elastic: %s is dead [status=%d]", conn.URL(), res.StatusCode) - } - } else { - c.errorf("elastic: %s is dead", conn.URL()) - conn.MarkAsDead() - } - } else { - c.errorf("elastic: %s is dead", conn.URL()) - conn.MarkAsDead() - } - } -} - -// startupHealthcheck is used at startup to check if the server is available -// at all. -func (c *Client) startupHealthcheck(timeout time.Duration) error { - c.mu.Lock() - urls := c.urls - basicAuth := c.basicAuth - basicAuthUsername := c.basicAuthUsername - basicAuthPassword := c.basicAuthPassword - c.mu.Unlock() - - // If we don't get a connection after "timeout", we bail. - start := time.Now() - for { - // Make a copy of the HTTP client provided via options to respect - // settings like Basic Auth or a user-specified http.Transport. - cl := new(http.Client) - *cl = *c.c - cl.Timeout = timeout - - for _, url := range urls { - req, err := http.NewRequest("HEAD", url, nil) - if err != nil { - return err - } - if basicAuth { - req.SetBasicAuth(basicAuthUsername, basicAuthPassword) - } - res, err := cl.Do(req) - if err == nil && res != nil && res.StatusCode >= 200 && res.StatusCode < 300 { - return nil - } - } - time.Sleep(1 * time.Second) - if time.Now().Sub(start) > timeout { - break - } - } - return ErrNoClient -} - -// next returns the next available connection, or ErrNoClient. -func (c *Client) next() (*conn, error) { - // We do round-robin here. - // TODO(oe) This should be a pluggable strategy, like the Selector in the official clients. - c.connsMu.Lock() - defer c.connsMu.Unlock() - - i := 0 - numConns := len(c.conns) - for { - i += 1 - if i > numConns { - break // we visited all conns: they all seem to be dead - } - c.cindex += 1 - if c.cindex >= numConns { - c.cindex = 0 - } - conn := c.conns[c.cindex] - if !conn.IsDead() { - return conn, nil - } - } - - // We have a deadlock here: All nodes are marked as dead. - // If sniffing is disabled, connections will never be marked alive again. - // So we are marking them as alive--if sniffing is disabled. - // They'll then be picked up in the next call to PerformRequest. - if !c.snifferEnabled { - c.errorf("elastic: all %d nodes marked as dead; resurrecting them to prevent deadlock", len(c.conns)) - for _, conn := range c.conns { - conn.MarkAsAlive() - } - } - - // We tried hard, but there is no node available - return nil, ErrNoClient -} - -// mustActiveConn returns nil if there is an active connection, -// otherwise ErrNoClient is returned. -func (c *Client) mustActiveConn() error { - c.connsMu.Lock() - defer c.connsMu.Unlock() - - for _, c := range c.conns { - if !c.IsDead() { - return nil - } - } - return ErrNoClient -} - -// PerformRequest does a HTTP request to Elasticsearch. -// It returns a response (which might be nil) and an error on failure. -// -// Optionally, a list of HTTP error codes to ignore can be passed. -// This is necessary for services that expect e.g. HTTP status 404 as a -// valid outcome (Exists, IndicesExists, IndicesTypeExists). -func (c *Client) PerformRequest(method, path string, params url.Values, body interface{}, ignoreErrors ...int) (*Response, error) { - start := time.Now().UTC() - - c.mu.RLock() - timeout := c.healthcheckTimeout - basicAuth := c.basicAuth - basicAuthUsername := c.basicAuthUsername - basicAuthPassword := c.basicAuthPassword - sendGetBodyAs := c.sendGetBodyAs - gzipEnabled := c.gzipEnabled - c.mu.RUnlock() - - var err error - var conn *conn - var req *Request - var resp *Response - var retried bool - var n int - - // Change method if sendGetBodyAs is specified. - if method == "GET" && body != nil && sendGetBodyAs != "GET" { - method = sendGetBodyAs - } - - for { - pathWithParams := path - if len(params) > 0 { - pathWithParams += "?" + params.Encode() - } - - // Get a connection - conn, err = c.next() - if err == ErrNoClient { - n++ - if !retried { - // Force a healtcheck as all connections seem to be dead. - c.healthcheck(timeout, false) - } - wait, ok, rerr := c.retrier.Retry(n, nil, nil, err) - if rerr != nil { - return nil, rerr - } - if !ok { - return nil, err - } - retried = true - time.Sleep(wait) - continue // try again - } - if err != nil { - c.errorf("elastic: cannot get connection from pool") - return nil, err - } - - req, err = NewRequest(method, conn.URL()+pathWithParams) - if err != nil { - c.errorf("elastic: cannot create request for %s %s: %v", strings.ToUpper(method), conn.URL()+pathWithParams, err) - return nil, err - } - - if basicAuth { - req.SetBasicAuth(basicAuthUsername, basicAuthPassword) - } - - // Set body - if body != nil { - err = req.SetBody(body, gzipEnabled) - if err != nil { - c.errorf("elastic: couldn't set body %+v for request: %v", body, err) - return nil, err - } - } - - // Tracing - c.dumpRequest((*http.Request)(req)) - - // Get response - res, err := c.c.Do((*http.Request)(req)) - if err != nil { - n++ - wait, ok, rerr := c.retrier.Retry(n, (*http.Request)(req), res, err) - if rerr != nil { - c.errorf("elastic: %s is dead", conn.URL()) - conn.MarkAsDead() - return nil, rerr - } - if !ok { - c.errorf("elastic: %s is dead", conn.URL()) - conn.MarkAsDead() - return nil, err - } - retried = true - time.Sleep(wait) - continue // try again - } - if res.Body != nil { - defer res.Body.Close() - } - - // Check for errors - if err := checkResponse((*http.Request)(req), res, ignoreErrors...); err != nil { - // No retry if request succeeded - // Notice that we still try to return a response, even if something went wrong - resp, _ = c.newResponse(res) - return resp, err - } - - // Tracing - c.dumpResponse(res) - - // We successfully made a request with this connection - conn.MarkAsHealthy() - - resp, err = c.newResponse(res) - if err != nil { - return nil, err - } - - break - } - - duration := time.Now().UTC().Sub(start) - c.infof("%s %s [status:%d, request:%.3fs]", - strings.ToUpper(method), - req.URL, - resp.StatusCode, - float64(int64(duration/time.Millisecond))/1000) - - return resp, nil -} - -// ElasticsearchVersion returns the version number of Elasticsearch -// running on the given URL. -func (c *Client) ElasticsearchVersion(url string) (string, error) { - res, _, err := c.Ping().URL(url).Do() - if err != nil { - return "", err - } - return res.Version.Number, nil -} - -// IndexNames returns the names of all indices in the cluster. -func (c *Client) IndexNames() ([]string, error) { - res, err := c.IndexGetSettings().Index("_all").Do() - if err != nil { - return nil, err - } - var names []string - for name, _ := range res { - names = append(names, name) - } - return names, nil -} - -// Ping checks if a given node in a cluster exists and (optionally) -// returns some basic information about the Elasticsearch server, -// e.g. the Elasticsearch version number. -func (c *Client) Ping() *PingService { - return NewPingService(c) -} - -// CreateIndex returns a service to create a new index. -func (c *Client) CreateIndex(name string) *CreateIndexService { - builder := NewCreateIndexService(c) - builder.Index(name) - return builder -} - -// DeleteIndex returns a service to delete an index. -func (c *Client) DeleteIndex(name string) *DeleteIndexService { - builder := NewDeleteIndexService(c) - builder.Index(name) - return builder -} - -// IndexExists allows to check if an index exists. -func (c *Client) IndexExists(name string) *IndexExistsService { - builder := NewIndexExistsService(c) - builder.Index(name) - return builder -} - -// TypeExists allows to check if one or more types exist in one or more indices. -func (c *Client) TypeExists() *IndicesExistsTypeService { - return NewIndicesExistsTypeService(c) -} - -// IndexStats provides statistics on different operations happining -// in one or more indices. -func (c *Client) IndexStats(indices ...string) *IndicesStatsService { - builder := NewIndicesStatsService(c) - builder = builder.Index(indices...) - return builder -} - -// OpenIndex opens an index. -func (c *Client) OpenIndex(name string) *OpenIndexService { - builder := NewOpenIndexService(c) - builder.Index(name) - return builder -} - -// CloseIndex closes an index. -func (c *Client) CloseIndex(name string) *CloseIndexService { - builder := NewCloseIndexService(c) - builder.Index(name) - return builder -} - -// Index a document. -func (c *Client) Index() *IndexService { - builder := NewIndexService(c) - return builder -} - -// IndexGet retrieves information about one or more indices. -// IndexGet is only available for Elasticsearch 1.4 or later. -func (c *Client) IndexGet() *IndicesGetService { - builder := NewIndicesGetService(c) - return builder -} - -// IndexGetSettings retrieves settings of all, one or more indices. -func (c *Client) IndexGetSettings(indices ...string) *IndicesGetSettingsService { - builder := NewIndicesGetSettingsService(c).Index(indices...) - return builder -} - -// IndexPutSettings sets settings for all, one or more indices. -func (c *Client) IndexPutSettings(indices ...string) *IndicesPutSettingsService { - return NewIndicesPutSettingsService(c).Index(indices...) -} - -// Update a document. -func (c *Client) Update() *UpdateService { - builder := NewUpdateService(c) - return builder -} - -// Delete a document. -func (c *Client) Delete() *DeleteService { - builder := NewDeleteService(c) - return builder -} - -// DeleteByQuery deletes documents as found by a query. -func (c *Client) DeleteByQuery() *DeleteByQueryService { - builder := NewDeleteByQueryService(c) - return builder -} - -// Get a document. -func (c *Client) Get() *GetService { - builder := NewGetService(c) - return builder -} - -// MultiGet retrieves multiple documents in one roundtrip. -func (c *Client) MultiGet() *MultiGetService { - builder := NewMultiGetService(c) - return builder -} - -// FieldStats returns statistical information about fields in indices -func (c *Client) FieldStats(indices ...string) *FieldStatsService { - return NewFieldStatsService(c).Index(indices...) -} - -// Exists checks if a document exists. -func (c *Client) Exists() *ExistsService { - builder := NewExistsService(c) - return builder -} - -// Count documents. -func (c *Client) Count(indices ...string) *CountService { - builder := NewCountService(c) - builder.Indices(indices...) - return builder -} - -// Search is the entry point for searches. -func (c *Client) Search(indices ...string) *SearchService { - builder := NewSearchService(c) - builder.Indices(indices...) - return builder -} - -// Percolate allows to send a document and return matching queries. -// See http://www.elastic.co/guide/en/elasticsearch/reference/current/search-percolate.html. -func (c *Client) Percolate() *PercolateService { - builder := NewPercolateService(c) - return builder -} - -// MultiSearch is the entry point for multi searches. -func (c *Client) MultiSearch() *MultiSearchService { - return NewMultiSearchService(c) -} - -// Suggest returns a service to return suggestions. -func (c *Client) Suggest(indices ...string) *SuggestService { - builder := NewSuggestService(c) - builder.Indices(indices...) - return builder -} - -// Scan through documents. Use this to iterate inside a server process -// where the results will be processed without returning them to a client. -func (c *Client) Scan(indices ...string) *ScanService { - builder := NewScanService(c) - builder.Indices(indices...) - return builder -} - -// Scroll through documents. Use this to efficiently scroll through results -// while returning the results to a client. Use Scan when you don't need -// to return requests to a client (i.e. not paginating via request/response). -func (c *Client) Scroll(indices ...string) *ScrollService { - builder := NewScrollService(c) - builder.Indices(indices...) - return builder -} - -// ClearScroll can be used to clear search contexts manually. -func (c *Client) ClearScroll() *ClearScrollService { - builder := NewClearScrollService(c) - return builder -} - -// Optimize asks Elasticsearch to optimize one or more indices. -func (c *Client) Optimize(indices ...string) *OptimizeService { - builder := NewOptimizeService(c) - builder.Indices(indices...) - return builder -} - -// Refresh asks Elasticsearch to refresh one or more indices. -func (c *Client) Refresh(indices ...string) *RefreshService { - builder := NewRefreshService(c) - builder.Indices(indices...) - return builder -} - -// Flush asks Elasticsearch to free memory from the index and -// flush data to disk. -func (c *Client) Flush(indices ...string) *FlushService { - return NewFlushService(c).Indices(indices...) -} - -// Explain computes a score explanation for a query and a specific document. -func (c *Client) Explain(index, typ, id string) *ExplainService { - builder := NewExplainService(c) - builder = builder.Index(index).Type(typ).Id(id) - return builder -} - -// Bulk is the entry point to mass insert/update/delete documents. -func (c *Client) Bulk() *BulkService { - builder := NewBulkService(c) - return builder -} - -// BulkProcessor allows setting up a concurrent processor of bulk requests. -func (c *Client) BulkProcessor() *BulkProcessorService { - return NewBulkProcessorService(c) -} - -// Alias enables the caller to add and/or remove aliases. -func (c *Client) Alias() *AliasService { - builder := NewAliasService(c) - return builder -} - -// Aliases returns aliases by index name(s). -func (c *Client) Aliases() *AliasesService { - builder := NewAliasesService(c) - return builder -} - -// GetTemplate gets a search template. -// Use IndexXXXTemplate funcs to manage index templates. -func (c *Client) GetTemplate() *GetTemplateService { - return NewGetTemplateService(c) -} - -// PutTemplate creates or updates a search template. -// Use IndexXXXTemplate funcs to manage index templates. -func (c *Client) PutTemplate() *PutTemplateService { - return NewPutTemplateService(c) -} - -// DeleteTemplate deletes a search template. -// Use IndexXXXTemplate funcs to manage index templates. -func (c *Client) DeleteTemplate() *DeleteTemplateService { - return NewDeleteTemplateService(c) -} - -// IndexGetTemplate gets an index template. -// Use XXXTemplate funcs to manage search templates. -func (c *Client) IndexGetTemplate(names ...string) *IndicesGetTemplateService { - builder := NewIndicesGetTemplateService(c) - builder = builder.Name(names...) - return builder -} - -// IndexTemplateExists gets check if an index template exists. -// Use XXXTemplate funcs to manage search templates. -func (c *Client) IndexTemplateExists(name string) *IndicesExistsTemplateService { - builder := NewIndicesExistsTemplateService(c) - builder = builder.Name(name) - return builder -} - -// IndexPutTemplate creates or updates an index template. -// Use XXXTemplate funcs to manage search templates. -func (c *Client) IndexPutTemplate(name string) *IndicesPutTemplateService { - builder := NewIndicesPutTemplateService(c) - builder = builder.Name(name) - return builder -} - -// IndexDeleteTemplate deletes an index template. -// Use XXXTemplate funcs to manage search templates. -func (c *Client) IndexDeleteTemplate(name string) *IndicesDeleteTemplateService { - builder := NewIndicesDeleteTemplateService(c) - builder = builder.Name(name) - return builder -} - -// GetMapping gets a mapping. -func (c *Client) GetMapping() *GetMappingService { - return NewGetMappingService(c) -} - -// PutMapping registers a mapping. -func (c *Client) PutMapping() *PutMappingService { - return NewPutMappingService(c) -} - -// DeleteMapping deletes a mapping. -func (c *Client) DeleteMapping() *DeleteMappingService { - return NewDeleteMappingService(c) -} - -// GetWarmer gets one or more warmers by name. -func (c *Client) GetWarmer() *IndicesGetWarmerService { - return NewIndicesGetWarmerService(c) -} - -// PutWarmer registers a warmer. -func (c *Client) PutWarmer() *IndicesPutWarmerService { - return NewIndicesPutWarmerService(c) -} - -// DeleteWarmer deletes one or more warmers. -func (c *Client) DeleteWarmer() *IndicesDeleteWarmerService { - return NewIndicesDeleteWarmerService(c) -} - -// ClusterHealth retrieves the health of the cluster. -func (c *Client) ClusterHealth() *ClusterHealthService { - return NewClusterHealthService(c) -} - -// ClusterState retrieves the state of the cluster. -func (c *Client) ClusterState() *ClusterStateService { - return NewClusterStateService(c) -} - -// ClusterStats retrieves cluster statistics. -func (c *Client) ClusterStats() *ClusterStatsService { - return NewClusterStatsService(c) -} - -// NodesInfo retrieves one or more or all of the cluster nodes information. -func (c *Client) NodesInfo() *NodesInfoService { - return NewNodesInfoService(c) -} - -// NodesStats retrieves one or more or all of the cluster nodes statistics. -func (c *Client) NodesStats() *NodesStatsService { - return NewNodesStatsService(c) -} - -// Reindex returns a service that will reindex documents from a source -// index into a target index. See -// http://www.elastic.co/guide/en/elasticsearch/guide/current/reindex.html -// for more information about reindexing. -func (c *Client) Reindex(sourceIndex, targetIndex string) *Reindexer { - return NewReindexer(c, sourceIndex, CopyToTargetIndex(targetIndex)) -} - -// WaitForStatus waits for the cluster to have the given status. -// This is a shortcut method for the ClusterHealth service. -// -// WaitForStatus waits for the specified timeout, e.g. "10s". -// If the cluster will have the given state within the timeout, nil is returned. -// If the request timed out, ErrTimeout is returned. -func (c *Client) WaitForStatus(status string, timeout string) error { - health, err := c.ClusterHealth().WaitForStatus(status).Timeout(timeout).Do() - if err != nil { - return err - } - if health.TimedOut { - return ErrTimeout - } - return nil -} - -// WaitForGreenStatus waits for the cluster to have the "green" status. -// See WaitForStatus for more details. -func (c *Client) WaitForGreenStatus(timeout string) error { - return c.WaitForStatus("green", timeout) -} - -// WaitForYellowStatus waits for the cluster to have the "yellow" status. -// See WaitForStatus for more details. -func (c *Client) WaitForYellowStatus(timeout string) error { - return c.WaitForStatus("yellow", timeout) -} - -// TermVector returns information and statistics on terms in the fields -// of a particular document. -func (c *Client) TermVector(index, typ string) *TermvectorService { - builder := NewTermvectorService(c) - builder = builder.Index(index).Type(typ) - return builder -} - -// MultiTermVectors returns information and statistics on terms in the fields -// of multiple documents. -func (c *Client) MultiTermVectors() *MultiTermvectorService { - return NewMultiTermvectorService(c) -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/client_test.go b/vendor/gopkg.in/olivere/elastic.v2/client_test.go deleted file mode 100644 index ea7269f..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/client_test.go +++ /dev/null @@ -1,829 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "bytes" - "encoding/json" - "errors" - "fmt" - "log" - "net/http" - "regexp" - "strings" - "testing" - "time" -) - -func findConn(s string, slice ...*conn) (int, bool) { - for i, t := range slice { - if s == t.URL() { - return i, true - } - } - return -1, false -} - -// -- NewClient -- - -func TestClientDefaults(t *testing.T) { - client, err := NewClient() - if err != nil { - t.Fatal(err) - } - if client.healthcheckEnabled != true { - t.Errorf("expected health checks to be enabled, got: %v", client.healthcheckEnabled) - } - if client.healthcheckTimeoutStartup != DefaultHealthcheckTimeoutStartup { - t.Errorf("expected health checks timeout on startup = %v, got: %v", DefaultHealthcheckTimeoutStartup, client.healthcheckTimeoutStartup) - } - if client.healthcheckTimeout != DefaultHealthcheckTimeout { - t.Errorf("expected health checks timeout = %v, got: %v", DefaultHealthcheckTimeout, client.healthcheckTimeout) - } - if client.healthcheckInterval != DefaultHealthcheckInterval { - t.Errorf("expected health checks interval = %v, got: %v", DefaultHealthcheckInterval, client.healthcheckInterval) - } - if client.snifferEnabled != true { - t.Errorf("expected sniffing to be enabled, got: %v", client.snifferEnabled) - } - if client.snifferTimeoutStartup != DefaultSnifferTimeoutStartup { - t.Errorf("expected sniffer timeout on startup = %v, got: %v", DefaultSnifferTimeoutStartup, client.snifferTimeoutStartup) - } - if client.snifferTimeout != DefaultSnifferTimeout { - t.Errorf("expected sniffer timeout = %v, got: %v", DefaultSnifferTimeout, client.snifferTimeout) - } - if client.snifferInterval != DefaultSnifferInterval { - t.Errorf("expected sniffer interval = %v, got: %v", DefaultSnifferInterval, client.snifferInterval) - } - if client.basicAuth != false { - t.Errorf("expected no basic auth; got: %v", client.basicAuth) - } - if client.basicAuthUsername != "" { - t.Errorf("expected no basic auth username; got: %q", client.basicAuthUsername) - } - if client.basicAuthPassword != "" { - t.Errorf("expected no basic auth password; got: %q", client.basicAuthUsername) - } - if client.sendGetBodyAs != "GET" { - t.Errorf("expected sendGetBodyAs to be GET; got: %q", client.sendGetBodyAs) - } -} - -func TestClientWithoutURL(t *testing.T) { - client, err := NewClient() - if err != nil { - t.Fatal(err) - } - // Two things should happen here: - // 1. The client starts sniffing the cluster on DefaultURL - // 2. The sniffing process should find (at least) one node in the cluster, i.e. the DefaultURL - if len(client.conns) == 0 { - t.Fatalf("expected at least 1 node in the cluster, got: %d (%v)", len(client.conns), client.conns) - } - if !isTravis() { - if _, found := findConn(DefaultURL, client.conns...); !found { - t.Errorf("expected to find node with default URL of %s in %v", DefaultURL, client.conns) - } - } -} - -func TestClientWithSingleURL(t *testing.T) { - client, err := NewClient(SetURL("http://localhost:9200")) - if err != nil { - t.Fatal(err) - } - // Two things should happen here: - // 1. The client starts sniffing the cluster on DefaultURL - // 2. The sniffing process should find (at least) one node in the cluster, i.e. the DefaultURL - if len(client.conns) == 0 { - t.Fatalf("expected at least 1 node in the cluster, got: %d (%v)", len(client.conns), client.conns) - } - if !isTravis() { - if _, found := findConn(DefaultURL, client.conns...); !found { - t.Errorf("expected to find node with default URL of %s in %v", DefaultURL, client.conns) - } - } -} - -func TestClientWithMultipleURLs(t *testing.T) { - client, err := NewClient(SetURL("http://localhost:9200", "http://localhost:9201")) - if err != nil { - t.Fatal(err) - } - // The client should sniff both URLs, but only localhost:9200 should return nodes. - if len(client.conns) != 1 { - t.Fatalf("expected exactly 1 node in the local cluster, got: %d (%v)", len(client.conns), client.conns) - } - if !isTravis() { - if client.conns[0].URL() != DefaultURL { - t.Errorf("expected to find node with default URL of %s in %v", DefaultURL, client.conns) - } - } -} - -func TestClientWithBasicAuth(t *testing.T) { - client, err := NewClient(SetBasicAuth("user", "secret")) - if err != nil { - t.Fatal(err) - } - if client.basicAuth != true { - t.Errorf("expected basic auth; got: %v", client.basicAuth) - } - if got, want := client.basicAuthUsername, "user"; got != want { - t.Errorf("expected basic auth username %q; got: %q", want, got) - } - if got, want := client.basicAuthPassword, "secret"; got != want { - t.Errorf("expected basic auth password %q; got: %q", want, got) - } -} - -func TestClientSniffSuccess(t *testing.T) { - client, err := NewClient(SetURL("http://localhost:19200", "http://localhost:9200")) - if err != nil { - t.Fatal(err) - } - // The client should sniff both URLs, but only localhost:9200 should return nodes. - if len(client.conns) != 1 { - t.Fatalf("expected exactly 1 node in the local cluster, got: %d (%v)", len(client.conns), client.conns) - } -} - -func TestClientSniffFailure(t *testing.T) { - _, err := NewClient(SetURL("http://localhost:19200", "http://localhost:19201")) - if err == nil { - t.Fatalf("expected cluster to fail with no nodes found") - } -} - -func TestClientSniffDisabled(t *testing.T) { - client, err := NewClient(SetSniff(false), SetURL("http://localhost:9200", "http://localhost:9201")) - if err != nil { - t.Fatal(err) - } - // The client should not sniff, so it should have two connections. - if len(client.conns) != 2 { - t.Fatalf("expected 2 nodes, got: %d (%v)", len(client.conns), client.conns) - } - // Make two requests, so that both connections are being used - for i := 0; i < len(client.conns); i++ { - client.Flush().Do() - } - // The first connection (localhost:9200) should now be okay. - if i, found := findConn("http://localhost:9200", client.conns...); !found { - t.Fatalf("expected connection to %q to be found", "http://localhost:9200") - } else { - if conn := client.conns[i]; conn.IsDead() { - t.Fatal("expected connection to be alive, but it is dead") - } - } - // The second connection (localhost:9201) should now be marked as dead. - if i, found := findConn("http://localhost:9201", client.conns...); !found { - t.Fatalf("expected connection to %q to be found", "http://localhost:9201") - } else { - if conn := client.conns[i]; !conn.IsDead() { - t.Fatal("expected connection to be dead, but it is alive") - } - } -} - -func TestClientHealthcheckStartupTimeout(t *testing.T) { - start := time.Now() - _, err := NewClient(SetURL("http://localhost:9299"), SetHealthcheckTimeoutStartup(5*time.Second)) - duration := time.Now().Sub(start) - if err != ErrNoClient { - t.Fatal(err) - } - if duration < 5*time.Second { - t.Fatalf("expected a timeout in more than 5 seconds; got: %v", duration) - } -} - -func TestClientWillMarkConnectionsAsAliveWhenAllAreDead(t *testing.T) { - client, err := NewClient(SetURL("http://127.0.0.1:9201"), - SetSniff(false), SetHealthcheck(false), SetMaxRetries(0)) - if err != nil { - t.Fatal(err) - } - // We should have a connection. - if len(client.conns) != 1 { - t.Fatalf("expected 1 node, got: %d (%v)", len(client.conns), client.conns) - } - - // Make a request, so that the connections is marked as dead. - client.Flush().Do() - - // The connection should now be marked as dead. - if i, found := findConn("http://127.0.0.1:9201", client.conns...); !found { - t.Fatalf("expected connection to %q to be found", "http://127.0.0.1:9201") - } else { - if conn := client.conns[i]; !conn.IsDead() { - t.Fatalf("expected connection to be dead, got: %v", conn) - } - } - - // Now send another request and the connection should be marked as alive again. - client.Flush().Do() - - if i, found := findConn("http://127.0.0.1:9201", client.conns...); !found { - t.Fatalf("expected connection to %q to be found", "http://127.0.0.1:9201") - } else { - if conn := client.conns[i]; conn.IsDead() { - t.Fatalf("expected connection to be alive, got: %v", conn) - } - } -} - -// -- Start and stop -- - -func TestClientStartAndStop(t *testing.T) { - client, err := NewClient() - if err != nil { - t.Fatal(err) - } - - running := client.IsRunning() - if !running { - t.Fatalf("expected background processes to run; got: %v", running) - } - - // Stop - client.Stop() - running = client.IsRunning() - if running { - t.Fatalf("expected background processes to be stopped; got: %v", running) - } - - // Stop again => no-op - client.Stop() - running = client.IsRunning() - if running { - t.Fatalf("expected background processes to be stopped; got: %v", running) - } - - // Start - client.Start() - running = client.IsRunning() - if !running { - t.Fatalf("expected background processes to run; got: %v", running) - } - - // Start again => no-op - client.Start() - running = client.IsRunning() - if !running { - t.Fatalf("expected background processes to run; got: %v", running) - } -} - -func TestClientStartAndStopWithSnifferAndHealthchecksDisabled(t *testing.T) { - client, err := NewClient(SetSniff(false), SetHealthcheck(false)) - if err != nil { - t.Fatal(err) - } - - running := client.IsRunning() - if !running { - t.Fatalf("expected background processes to run; got: %v", running) - } - - // Stop - client.Stop() - running = client.IsRunning() - if running { - t.Fatalf("expected background processes to be stopped; got: %v", running) - } - - // Stop again => no-op - client.Stop() - running = client.IsRunning() - if running { - t.Fatalf("expected background processes to be stopped; got: %v", running) - } - - // Start - client.Start() - running = client.IsRunning() - if !running { - t.Fatalf("expected background processes to run; got: %v", running) - } - - // Start again => no-op - client.Start() - running = client.IsRunning() - if !running { - t.Fatalf("expected background processes to run; got: %v", running) - } -} - -// -- Sniffing -- - -func TestClientSniffNode(t *testing.T) { - client, err := NewClient() - if err != nil { - t.Fatal(err) - } - - ch := make(chan []*conn) - go func() { ch <- client.sniffNode(DefaultURL) }() - - select { - case nodes := <-ch: - if len(nodes) != 1 { - t.Fatalf("expected %d nodes; got: %d", 1, len(nodes)) - } - pattern := `http:\/\/[\d\.]+:9200` - matched, err := regexp.MatchString(pattern, nodes[0].URL()) - if err != nil { - t.Fatal(err) - } - if !matched { - t.Fatalf("expected node URL pattern %q; got: %q", pattern, nodes[0].URL()) - } - case <-time.After(2 * time.Second): - t.Fatal("expected no timeout in sniff node") - break - } -} - -func TestClientSniffOnDefaultURL(t *testing.T) { - client, _ := NewClient() - if client == nil { - t.Fatal("no client returned") - } - - ch := make(chan error, 1) - go func() { - ch <- client.sniff(DefaultSnifferTimeoutStartup) - }() - - select { - case err := <-ch: - if err != nil { - t.Fatalf("expected sniff to succeed; got: %v", err) - } - if len(client.conns) != 1 { - t.Fatalf("expected %d nodes; got: %d", 1, len(client.conns)) - } - pattern := `http:\/\/[\d\.]+:9200` - matched, err := regexp.MatchString(pattern, client.conns[0].URL()) - if err != nil { - t.Fatal(err) - } - if !matched { - t.Fatalf("expected node URL pattern %q; got: %q", pattern, client.conns[0].URL()) - } - case <-time.After(2 * time.Second): - t.Fatal("expected no timeout in sniff") - break - } -} - -// -- Selector -- - -func TestClientSelectConnHealthy(t *testing.T) { - client, err := NewClient( - SetSniff(false), - SetHealthcheck(false), - SetURL("http://127.0.0.1:9200", "http://127.0.0.1:9201")) - if err != nil { - t.Fatal(err) - } - - // Both are healthy, so we should get both URLs in round-robin - client.conns[0].MarkAsHealthy() - client.conns[1].MarkAsHealthy() - - // #1: Return 1st - c, err := client.next() - if err != nil { - t.Fatal(err) - } - if c.URL() != client.conns[0].URL() { - t.Fatalf("expected %s; got: %s", c.URL(), client.conns[0].URL()) - } - // #2: Return 2nd - c, err = client.next() - if err != nil { - t.Fatal(err) - } - if c.URL() != client.conns[1].URL() { - t.Fatalf("expected %s; got: %s", c.URL(), client.conns[1].URL()) - } - // #3: Return 1st - c, err = client.next() - if err != nil { - t.Fatal(err) - } - if c.URL() != client.conns[0].URL() { - t.Fatalf("expected %s; got: %s", c.URL(), client.conns[0].URL()) - } -} - -func TestClientSelectConnHealthyAndDead(t *testing.T) { - client, err := NewClient( - SetSniff(false), - SetHealthcheck(false), - SetURL("http://127.0.0.1:9200", "http://127.0.0.1:9201")) - if err != nil { - t.Fatal(err) - } - - // 1st is healthy, second is dead - client.conns[0].MarkAsHealthy() - client.conns[1].MarkAsDead() - - // #1: Return 1st - c, err := client.next() - if err != nil { - t.Fatal(err) - } - if c.URL() != client.conns[0].URL() { - t.Fatalf("expected %s; got: %s", c.URL(), client.conns[0].URL()) - } - // #2: Return 1st again - c, err = client.next() - if err != nil { - t.Fatal(err) - } - if c.URL() != client.conns[0].URL() { - t.Fatalf("expected %s; got: %s", c.URL(), client.conns[0].URL()) - } - // #3: Return 1st again and again - c, err = client.next() - if err != nil { - t.Fatal(err) - } - if c.URL() != client.conns[0].URL() { - t.Fatalf("expected %s; got: %s", c.URL(), client.conns[0].URL()) - } -} - -func TestClientSelectConnDeadAndHealthy(t *testing.T) { - client, err := NewClient( - SetSniff(false), - SetHealthcheck(false), - SetURL("http://127.0.0.1:9200", "http://127.0.0.1:9201")) - if err != nil { - t.Fatal(err) - } - - // 1st is dead, 2nd is healthy - client.conns[0].MarkAsDead() - client.conns[1].MarkAsHealthy() - - // #1: Return 2nd - c, err := client.next() - if err != nil { - t.Fatal(err) - } - if c.URL() != client.conns[1].URL() { - t.Fatalf("expected %s; got: %s", c.URL(), client.conns[1].URL()) - } - // #2: Return 2nd again - c, err = client.next() - if err != nil { - t.Fatal(err) - } - if c.URL() != client.conns[1].URL() { - t.Fatalf("expected %s; got: %s", c.URL(), client.conns[1].URL()) - } - // #3: Return 2nd again and again - c, err = client.next() - if err != nil { - t.Fatal(err) - } - if c.URL() != client.conns[1].URL() { - t.Fatalf("expected %s; got: %s", c.URL(), client.conns[1].URL()) - } -} - -func TestClientSelectConnAllDead(t *testing.T) { - client, err := NewClient( - SetSniff(false), - SetHealthcheck(false), - SetURL("http://127.0.0.1:9200", "http://127.0.0.1:9201")) - if err != nil { - t.Fatal(err) - } - - // Both are dead - client.conns[0].MarkAsDead() - client.conns[1].MarkAsDead() - - // If all connections are dead, next should make them alive again, but - // still return ErrNoClient when it first finds out. - c, err := client.next() - if err != ErrNoClient { - t.Fatal(err) - } - if c != nil { - t.Fatalf("expected no connection; got: %v", c) - } - // Return a connection - c, err = client.next() - if err != nil { - t.Fatalf("expected no error; got: %v", err) - } - if c == nil { - t.Fatalf("expected connection; got: %v", c) - } - // Return a connection - c, err = client.next() - if err != nil { - t.Fatalf("expected no error; got: %v", err) - } - if c == nil { - t.Fatalf("expected connection; got: %v", c) - } -} - -// -- ElasticsearchVersion -- - -func TestElasticsearchVersion(t *testing.T) { - client, err := NewClient() - if err != nil { - t.Fatal(err) - } - version, err := client.ElasticsearchVersion(DefaultURL) - if err != nil { - t.Fatal(err) - } - if version == "" { - t.Errorf("expected a version number, got: %q", version) - } -} - -// -- IndexNames -- - -func TestIndexNames(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - names, err := client.IndexNames() - if err != nil { - t.Fatal(err) - } - if len(names) == 0 { - t.Fatalf("expected some index names, got: %d", len(names)) - } - var found bool - for _, name := range names { - if name == testIndexName { - found = true - break - } - } - if !found { - t.Fatalf("expected to find index %q; got: %v", testIndexName, found) - } -} - -// -- PerformRequest -- - -func TestPerformRequest(t *testing.T) { - client, err := NewClient() - if err != nil { - t.Fatal(err) - } - res, err := client.PerformRequest("GET", "/", nil, nil) - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatal("expected response to be != nil") - } - - ret := new(PingResult) - if err := json.Unmarshal(res.Body, ret); err != nil { - t.Fatalf("expected no error on decode; got: %v", err) - } - if ret.Status != 200 { - t.Errorf("expected HTTP status 200; got: %d", ret.Status) - } -} - -func TestPerformRequestWithLogger(t *testing.T) { - var w bytes.Buffer - out := log.New(&w, "LOGGER ", log.LstdFlags) - - client, err := NewClient(SetInfoLog(out), SetSniff(false)) - if err != nil { - t.Fatal(err) - } - - res, err := client.PerformRequest("GET", "/", nil, nil) - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatal("expected response to be != nil") - } - - ret := new(PingResult) - if err := json.Unmarshal(res.Body, ret); err != nil { - t.Fatalf("expected no error on decode; got: %v", err) - } - if ret.Status != 200 { - t.Errorf("expected HTTP status 200; got: %d", ret.Status) - } - - got := w.String() - pattern := `^LOGGER \d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2} GET http://.*/ \[status:200, request:\d+\.\d{3}s\]\n` - matched, err := regexp.MatchString(pattern, got) - if err != nil { - t.Fatalf("expected log line to match %q; got: %v", pattern, err) - } - if !matched { - t.Errorf("expected log line to match %q; got: %v", pattern, got) - } -} - -func TestPerformRequestWithLoggerAndTracer(t *testing.T) { - var lw bytes.Buffer - lout := log.New(&lw, "LOGGER ", log.LstdFlags) - - var tw bytes.Buffer - tout := log.New(&tw, "TRACER ", log.LstdFlags) - - client, err := NewClient(SetInfoLog(lout), SetTraceLog(tout), SetSniff(false)) - if err != nil { - t.Fatal(err) - } - - res, err := client.PerformRequest("GET", "/", nil, nil) - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatal("expected response to be != nil") - } - - ret := new(PingResult) - if err := json.Unmarshal(res.Body, ret); err != nil { - t.Fatalf("expected no error on decode; got: %v", err) - } - if ret.Status != 200 { - t.Errorf("expected HTTP status 200; got: %d", ret.Status) - } - - lgot := lw.String() - if lgot == "" { - t.Errorf("expected logger output; got: %q", lgot) - } - - tgot := tw.String() - if tgot == "" { - t.Errorf("expected tracer output; got: %q", tgot) - } -} - -type customLogger struct { - out bytes.Buffer -} - -func (l *customLogger) Printf(format string, v ...interface{}) { - l.out.WriteString(fmt.Sprintf(format, v...) + "\n") -} - -func TestPerformRequestWithCustomLogger(t *testing.T) { - logger := &customLogger{} - - client, err := NewClient(SetInfoLog(logger), SetSniff(false)) - if err != nil { - t.Fatal(err) - } - - res, err := client.PerformRequest("GET", "/", nil, nil) - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatal("expected response to be != nil") - } - - ret := new(PingResult) - if err := json.Unmarshal(res.Body, ret); err != nil { - t.Fatalf("expected no error on decode; got: %v", err) - } - if ret.ClusterName == "" { - t.Errorf("expected cluster name; got: %q", ret.ClusterName) - } - - got := logger.out.String() - pattern := `^GET http://.*/ \[status:200, request:\d+\.\d{3}s\]\n` - matched, err := regexp.MatchString(pattern, got) - if err != nil { - t.Fatalf("expected log line to match %q; got: %v", pattern, err) - } - if !matched { - t.Errorf("expected log line to match %q; got: %v", pattern, got) - } -} - -// failingTransport will run a fail callback if it sees a given URL path prefix. -type failingTransport struct { - path string // path prefix to look for - fail func(*http.Request) (*http.Response, error) // call when path prefix is found - next http.RoundTripper // next round-tripper (use http.DefaultTransport if nil) -} - -// RoundTrip implements a failing transport. -func (tr *failingTransport) RoundTrip(r *http.Request) (*http.Response, error) { - if strings.HasPrefix(r.URL.Path, tr.path) && tr.fail != nil { - return tr.fail(r) - } - if tr.next != nil { - return tr.next.RoundTrip(r) - } - return http.DefaultTransport.RoundTrip(r) -} - -// CancelRequest is required in a http.Transport to support timeouts. -func (tr *failingTransport) CancelRequest(req *http.Request) { -} - -func TestPerformRequestRetryOnHttpError(t *testing.T) { - var numFailedReqs int - fail := func(r *http.Request) (*http.Response, error) { - numFailedReqs += 1 - //return &http.Response{Request: r, StatusCode: 400}, nil - return nil, errors.New("request failed") - } - - // Run against a failing endpoint and see if PerformRequest - // retries correctly. - tr := &failingTransport{path: "/fail", fail: fail} - httpClient := &http.Client{Transport: tr} - - client, err := NewClient(SetHttpClient(httpClient), SetMaxRetries(5), SetHealthcheck(false)) - if err != nil { - t.Fatal(err) - } - - res, err := client.PerformRequest("GET", "/fail", nil, nil) - if err == nil { - t.Fatal("expected error") - } - if res != nil { - t.Fatal("expected no response") - } - // Connection should be marked as dead after it failed - if numFailedReqs != 5 { - t.Errorf("expected %d failed requests; got: %d", 5, numFailedReqs) - } -} - -func TestPerformRequestNoRetryOnValidButUnsuccessfulHttpStatus(t *testing.T) { - var numFailedReqs int - fail := func(r *http.Request) (*http.Response, error) { - numFailedReqs += 1 - return &http.Response{Request: r, StatusCode: 500}, nil - } - - // Run against a failing endpoint and see if PerformRequest - // retries correctly. - tr := &failingTransport{path: "/fail", fail: fail} - httpClient := &http.Client{Transport: tr} - - client, err := NewClient(SetHttpClient(httpClient), SetMaxRetries(5), SetHealthcheck(false)) - if err != nil { - t.Fatal(err) - } - - res, err := client.PerformRequest("GET", "/fail", nil, nil) - if err == nil { - t.Fatal("expected error") - } - if res == nil { - t.Fatal("expected response, got nil") - } - if want, got := 500, res.StatusCode; want != got { - t.Fatalf("expected status code = %v, got %v", want, got) - } - // Retry should not have triggered additional requests because - if numFailedReqs != 1 { - t.Errorf("expected %d failed requests; got: %d", 1, numFailedReqs) - } -} - -// failingBody will return an error when json.Marshal is called on it. -type failingBody struct{} - -// MarshalJSON implements the json.Marshaler interface and always returns an error. -func (fb failingBody) MarshalJSON() ([]byte, error) { - return nil, errors.New("failing to marshal") -} - -func TestPerformRequestWithSetBodyError(t *testing.T) { - client, err := NewClient() - if err != nil { - t.Fatal(err) - } - res, err := client.PerformRequest("GET", "/", nil, failingBody{}) - if err == nil { - t.Fatal("expected error") - } - if res != nil { - t.Fatal("expected no response") - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/cluster_health.go b/vendor/gopkg.in/olivere/elastic.v2/cluster_health.go deleted file mode 100644 index 8d5ff93..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/cluster_health.go +++ /dev/null @@ -1,185 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "net/url" - "strings" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -// ClusterHealthService allows to get the status of the cluster. -// It is documented at http://www.elasticsearch.org/guide/en/elasticsearch/reference/1.4/cluster-health.html. -type ClusterHealthService struct { - client *Client - pretty bool - indices []string - waitForStatus string - level string - local *bool - masterTimeout string - timeout string - waitForActiveShards *int - waitForNodes string - waitForRelocatingShards *int -} - -// NewClusterHealthService creates a new ClusterHealthService. -func NewClusterHealthService(client *Client) *ClusterHealthService { - return &ClusterHealthService{client: client, indices: make([]string, 0)} -} - -// Index limits the information returned to a specific index. -func (s *ClusterHealthService) Index(index string) *ClusterHealthService { - s.indices = make([]string, 0) - s.indices = append(s.indices, index) - return s -} - -// Indices limits the information returned to specific indices. -func (s *ClusterHealthService) Indices(indices ...string) *ClusterHealthService { - s.indices = make([]string, 0) - s.indices = append(s.indices, indices...) - return s -} - -// MasterTimeout specifies an explicit operation timeout for connection to master node. -func (s *ClusterHealthService) MasterTimeout(masterTimeout string) *ClusterHealthService { - s.masterTimeout = masterTimeout - return s -} - -// Timeout specifies an explicit operation timeout. -func (s *ClusterHealthService) Timeout(timeout string) *ClusterHealthService { - s.timeout = timeout - return s -} - -// WaitForActiveShards can be used to wait until the specified number of shards are active. -func (s *ClusterHealthService) WaitForActiveShards(waitForActiveShards int) *ClusterHealthService { - s.waitForActiveShards = &waitForActiveShards - return s -} - -// WaitForNodes can be used to wait until the specified number of nodes are available. -func (s *ClusterHealthService) WaitForNodes(waitForNodes string) *ClusterHealthService { - s.waitForNodes = waitForNodes - return s -} - -// WaitForRelocatingShards can be used to wait until the specified number of relocating shards is finished. -func (s *ClusterHealthService) WaitForRelocatingShards(waitForRelocatingShards int) *ClusterHealthService { - s.waitForRelocatingShards = &waitForRelocatingShards - return s -} - -// WaitForStatus can be used to wait until the cluster is in a specific state. -// Valid values are: green, yellow, or red. -func (s *ClusterHealthService) WaitForStatus(waitForStatus string) *ClusterHealthService { - s.waitForStatus = waitForStatus - return s -} - -// Level specifies the level of detail for returned information. -func (s *ClusterHealthService) Level(level string) *ClusterHealthService { - s.level = level - return s -} - -// Local indicates whether to return local information. If it is true, -// we do not retrieve the state from master node (default: false). -func (s *ClusterHealthService) Local(local bool) *ClusterHealthService { - s.local = &local - return s -} - -// buildURL builds the URL for the operation. -func (s *ClusterHealthService) buildURL() (string, url.Values, error) { - // Build URL - path, err := uritemplates.Expand("/_cluster/health/{index}", map[string]string{ - "index": strings.Join(s.indices, ","), - }) - if err != nil { - return "", url.Values{}, err - } - - // Add query string parameters - params := url.Values{} - if s.waitForRelocatingShards != nil { - params.Set("wait_for_relocating_shards", fmt.Sprintf("%d", *s.waitForRelocatingShards)) - } - if s.waitForStatus != "" { - params.Set("wait_for_status", s.waitForStatus) - } - if s.level != "" { - params.Set("level", s.level) - } - if s.local != nil { - params.Set("local", fmt.Sprintf("%v", *s.local)) - } - if s.masterTimeout != "" { - params.Set("master_timeout", s.masterTimeout) - } - if s.timeout != "" { - params.Set("timeout", s.timeout) - } - if s.waitForActiveShards != nil { - params.Set("wait_for_active_shards", fmt.Sprintf("%d", *s.waitForActiveShards)) - } - if s.waitForNodes != "" { - params.Set("wait_for_nodes", s.waitForNodes) - } - - return path, params, nil -} - -// Validate checks if the operation is valid. -func (s *ClusterHealthService) Validate() error { - return nil -} - -// Do executes the operation. -func (s *ClusterHealthService) Do() (*ClusterHealthResponse, error) { - // Check pre-conditions - if err := s.Validate(); err != nil { - return nil, err - } - - // Get URL for request - path, params, err := s.buildURL() - if err != nil { - return nil, err - } - - // Get HTTP response - res, err := s.client.PerformRequest("GET", path, params, nil) - if err != nil { - return nil, err - } - - // Return operation response - ret := new(ClusterHealthResponse) - if err := s.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -// ClusterHealthResponse is the response of ClusterHealthService.Do. -type ClusterHealthResponse struct { - ClusterName string `json:"cluster_name"` - Status string `json:"status"` - TimedOut bool `json:"timed_out"` - NumberOfNodes int `json:"number_of_nodes"` - NumberOfDataNodes int `json:"number_of_data_nodes"` - ActivePrimaryShards int `json:"active_primary_shards"` - ActiveShards int `json:"active_shards"` - RelocatingShards int `json:"relocating_shards"` - InitializingShards int `json:"initializing_shards"` - UnassignedShards int `json:"unassigned_shards"` - NumberOfPendingTasks int `json:"number_of_pending_tasks"` -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/cluster_state.go b/vendor/gopkg.in/olivere/elastic.v2/cluster_state.go deleted file mode 100644 index 266439c..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/cluster_state.go +++ /dev/null @@ -1,196 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "net/url" - "strings" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -// ClusterStateService returns the state of the cluster. -// It is documented at http://www.elasticsearch.org/guide/en/elasticsearch/reference/1.4/cluster-state.html. -type ClusterStateService struct { - client *Client - pretty bool - indices []string - metrics []string - local *bool - masterTimeout string - flatSettings *bool -} - -// NewClusterStateService creates a new ClusterStateService. -func NewClusterStateService(client *Client) *ClusterStateService { - return &ClusterStateService{ - client: client, - indices: make([]string, 0), - metrics: make([]string, 0), - } -} - -// Index the name of the index. Use _all or an empty string to perform -// the operation on all indices. -func (s *ClusterStateService) Index(index string) *ClusterStateService { - s.indices = make([]string, 0) - s.indices = append(s.indices, index) - return s -} - -// Indices is a list of index names. Use _all or an empty string to -// perform the operation on all indices. -func (s *ClusterStateService) Indices(indices ...string) *ClusterStateService { - s.indices = make([]string, 0) - s.indices = append(s.indices, indices...) - return s -} - -// Metric limits the information returned to the specified metric. -// It can be one of: version, master_node, nodes, routing_table, metadata, -// blocks, or customs. -func (s *ClusterStateService) Metric(metric string) *ClusterStateService { - s.metrics = make([]string, 0) - s.metrics = append(s.metrics, metric) - return s -} - -// Metrics limits the information returned to the specified metrics. -// It can be any of: version, master_node, nodes, routing_table, metadata, -// blocks, or customs. -func (s *ClusterStateService) Metrics(metrics ...string) *ClusterStateService { - s.metrics = make([]string, 0) - s.metrics = append(s.metrics, metrics...) - return s -} - -// Local indicates whether to return local information. If it is true, -// we do not retrieve the state from master node (default: false). -func (s *ClusterStateService) Local(local bool) *ClusterStateService { - s.local = &local - return s -} - -// MasterTimeout specifies the timeout for connection to master. -func (s *ClusterStateService) MasterTimeout(masterTimeout string) *ClusterStateService { - s.masterTimeout = masterTimeout - return s -} - -// FlatSettings indicates whether to return settings in flat format (default: false). -func (s *ClusterStateService) FlatSettings(flatSettings bool) *ClusterStateService { - s.flatSettings = &flatSettings - return s -} - -// buildURL builds the URL for the operation. -func (s *ClusterStateService) buildURL() (string, url.Values, error) { - // Build URL - metrics := strings.Join(s.metrics, ",") - if metrics == "" { - metrics = "_all" - } - indices := strings.Join(s.indices, ",") - if indices == "" { - indices = "_all" - } - path, err := uritemplates.Expand("/_cluster/state/{metrics}/{indices}", map[string]string{ - "metrics": metrics, - "indices": indices, - }) - if err != nil { - return "", url.Values{}, err - } - - // Add query string parameters - params := url.Values{} - if s.masterTimeout != "" { - params.Set("master_timeout", s.masterTimeout) - } - if s.flatSettings != nil { - params.Set("flat_settings", fmt.Sprintf("%v", *s.flatSettings)) - } - if s.local != nil { - params.Set("local", fmt.Sprintf("%v", *s.local)) - } - - return path, params, nil -} - -// Validate checks if the operation is valid. -func (s *ClusterStateService) Validate() error { - return nil -} - -// Do executes the operation. -func (s *ClusterStateService) Do() (*ClusterStateResponse, error) { - // Check pre-conditions - if err := s.Validate(); err != nil { - return nil, err - } - - // Get URL for request - path, params, err := s.buildURL() - if err != nil { - return nil, err - } - - // Get HTTP response - res, err := s.client.PerformRequest("GET", path, params, nil) - if err != nil { - return nil, err - } - - // Return operation response - ret := new(ClusterStateResponse) - if err := s.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -// ClusterStateResponse is the response of ClusterStateService.Do. -type ClusterStateResponse struct { - ClusterName string `json:"cluster_name"` - Version int `json:"version"` - MasterNode string `json:"master_node"` - Blocks map[string]interface{} `json:"blocks"` - Nodes map[string]*ClusterStateNode `json:"nodes"` - Metadata *ClusterStateMetadata `json:"metadata"` - RoutingTable map[string]*ClusterStateRoutingTable `json:"routing_table"` - RoutingNodes *ClusterStateRoutingNode `json:"routing_nodes"` - Allocations []interface{} `json:"allocations"` - Customs map[string]interface{} `json:"customs"` -} - -type ClusterStateMetadata struct { - Templates map[string]interface{} `json:"templates"` - Indices map[string]interface{} `json:"indices"` - Repositories map[string]interface{} `json:"repositories"` -} - -type ClusterStateNode struct { - Name string `json:"name"` - TransportAddress string `json:"transport_address"` - Attributes map[string]interface{} `json:"attributes"` - - // TODO(oe) are these still valid? - State string `json:"state"` - Primary bool `json:"primary"` - Node string `json:"node"` - RelocatingNode *string `json:"relocating_node"` - Shard int `json:"shard"` - Index string `json:"index"` -} - -type ClusterStateRoutingTable struct { - Indices map[string]interface{} `json:"indices"` -} - -type ClusterStateRoutingNode struct { - Unassigned []interface{} `json:"unassigned"` - Nodes map[string]interface{} `json:"nodes"` -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/config/elasticsearch.yml b/vendor/gopkg.in/olivere/elastic.v2/config/elasticsearch.yml deleted file mode 100644 index c02e30f..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/config/elasticsearch.yml +++ /dev/null @@ -1,14 +0,0 @@ -bootstrap.ignore_system_bootstrap_checks: true - -discovery.zen.minimum_master_nodes: 1 - -#network.host: -#- _local_ -#- _site_ - -network.publish_host: 127.0.0.1 - -# Enable scripting as described here: https://www.elastic.co/guide/en/elasticsearch/reference/master/modules-scripting.html -script.inline: true -script.stored: true -script.file: true diff --git a/vendor/gopkg.in/olivere/elastic.v2/config/logging.yml b/vendor/gopkg.in/olivere/elastic.v2/config/logging.yml deleted file mode 100644 index c2681ac..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/config/logging.yml +++ /dev/null @@ -1,15 +0,0 @@ -# you can override this using by setting a system property, for example -Des.logger.level=DEBUG -es.logger.level: INFO -rootLogger: ${es.logger.level}, console -logger: - # log action execution errors for easier debugging - action: DEBUG - # reduce the logging for aws, too much is logged under the default INFO - com.amazonaws: WARN - -appender: - console: - type: console - layout: - type: consolePattern - conversionPattern: "[%d{ISO8601}][%-5p][%-25c] %m%n" diff --git a/vendor/gopkg.in/olivere/elastic.v2/count.go b/vendor/gopkg.in/olivere/elastic.v2/count.go deleted file mode 100644 index 37cd60e..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/count.go +++ /dev/null @@ -1,325 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "net/url" - "strings" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -// CountService is a convenient service for determining the -// number of documents in an index. Use SearchService with -// a SearchType of count for counting with queries etc. -type CountService struct { - client *Client - pretty bool - index []string - typ []string - allowNoIndices *bool - analyzeWildcard *bool - analyzer string - defaultOperator string - df string - expandWildcards string - ignoreUnavailable *bool - lenient *bool - lowercaseExpandedTerms *bool - minScore interface{} - preference string - q string - query Query - routing string - bodyJson interface{} - bodyString string -} - -// NewCountService creates a new CountService. -func NewCountService(client *Client) *CountService { - return &CountService{ - client: client, - index: make([]string, 0), - typ: make([]string, 0), - } -} - -// Index sets the name of the index to use to restrict the results. -func (s *CountService) Index(index string) *CountService { - if s.index == nil { - s.index = make([]string, 0) - } - s.index = append(s.index, index) - return s -} - -// Indices sets the names of the indices to restrict the results. -func (s *CountService) Indices(indices ...string) *CountService { - if s.index == nil { - s.index = make([]string, 0) - } - s.index = append(s.index, indices...) - return s -} - -// Type sets the type to use to restrict the results. -func (s *CountService) Type(typ string) *CountService { - if s.typ == nil { - s.typ = make([]string, 0) - } - s.typ = append(s.typ, typ) - return s -} - -// Types sets the types to use to restrict the results. -func (s *CountService) Types(types ...string) *CountService { - if s.typ == nil { - s.typ = make([]string, 0) - } - s.typ = append(s.typ, types...) - return s -} - -// AllowNoIndices indicates whether to ignore if a wildcard indices -// expression resolves into no concrete indices. (This includes "_all" string -// or when no indices have been specified). -func (s *CountService) AllowNoIndices(allowNoIndices bool) *CountService { - s.allowNoIndices = &allowNoIndices - return s -} - -// AnalyzeWildcard specifies whether wildcard and prefix queries should be -// analyzed (default: false). -func (s *CountService) AnalyzeWildcard(analyzeWildcard bool) *CountService { - s.analyzeWildcard = &analyzeWildcard - return s -} - -// Analyzer specifies the analyzer to use for the query string. -func (s *CountService) Analyzer(analyzer string) *CountService { - s.analyzer = analyzer - return s -} - -// DefaultOperator specifies the default operator for query string query (AND or OR). -func (s *CountService) DefaultOperator(defaultOperator string) *CountService { - s.defaultOperator = defaultOperator - return s -} - -// Df specifies the field to use as default where no field prefix is given -// in the query string. -func (s *CountService) Df(df string) *CountService { - s.df = df - return s -} - -// ExpandWildcards indicates whether to expand wildcard expression to -// concrete indices that are open, closed or both. -func (s *CountService) ExpandWildcards(expandWildcards string) *CountService { - s.expandWildcards = expandWildcards - return s -} - -// IgnoreUnavailable indicates whether specified concrete indices should be -// ignored when unavailable (missing or closed). -func (s *CountService) IgnoreUnavailable(ignoreUnavailable bool) *CountService { - s.ignoreUnavailable = &ignoreUnavailable - return s -} - -// Lenient specifies whether format-based query failures (such as -// providing text to a numeric field) should be ignored. -func (s *CountService) Lenient(lenient bool) *CountService { - s.lenient = &lenient - return s -} - -// LowercaseExpandedTerms specifies whether query terms should be lowercased. -func (s *CountService) LowercaseExpandedTerms(lowercaseExpandedTerms bool) *CountService { - s.lowercaseExpandedTerms = &lowercaseExpandedTerms - return s -} - -// MinScore indicates to include only documents with a specific `_score` -// value in the result. -func (s *CountService) MinScore(minScore interface{}) *CountService { - s.minScore = minScore - return s -} - -// Preference specifies the node or shard the operation should be -// performed on (default: random). -func (s *CountService) Preference(preference string) *CountService { - s.preference = preference - return s -} - -// Q in the Lucene query string syntax. You can also use Query to pass -// a Query struct. -func (s *CountService) Q(q string) *CountService { - s.q = q - return s -} - -// Query specifies the query to pass. You can also pass a query string with Q. -func (s *CountService) Query(query Query) *CountService { - s.query = query - return s -} - -// Routing specifies the routing value. -func (s *CountService) Routing(routing string) *CountService { - s.routing = routing - return s -} - -// Pretty indicates that the JSON response be indented and human readable. -func (s *CountService) Pretty(pretty bool) *CountService { - s.pretty = pretty - return s -} - -// BodyJson specifies the query to restrict the results specified with the -// Query DSL (optional). The interface{} will be serialized to a JSON document, -// so use a map[string]interface{}. -func (s *CountService) BodyJson(body interface{}) *CountService { - s.bodyJson = body - return s -} - -// Body specifies a query to restrict the results specified with -// the Query DSL (optional). -func (s *CountService) BodyString(body string) *CountService { - s.bodyString = body - return s -} - -// buildURL builds the URL for the operation. -func (s *CountService) buildURL() (string, url.Values, error) { - var err error - var path string - - if len(s.index) > 0 && len(s.typ) > 0 { - path, err = uritemplates.Expand("/{index}/{type}/_count", map[string]string{ - "index": strings.Join(s.index, ","), - "type": strings.Join(s.typ, ","), - }) - } else if len(s.index) > 0 { - path, err = uritemplates.Expand("/{index}/_count", map[string]string{ - "index": strings.Join(s.index, ","), - }) - } else if len(s.typ) > 0 { - path, err = uritemplates.Expand("/_all/{type}/_count", map[string]string{ - "type": strings.Join(s.typ, ","), - }) - } else { - path = "/_all/_count" - } - if err != nil { - return "", url.Values{}, err - } - - // Add query string parameters - params := url.Values{} - if s.pretty { - params.Set("pretty", "1") - } - if s.allowNoIndices != nil { - params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) - } - if s.analyzeWildcard != nil { - params.Set("analyze_wildcard", fmt.Sprintf("%v", *s.analyzeWildcard)) - } - if s.analyzer != "" { - params.Set("analyzer", s.analyzer) - } - if s.defaultOperator != "" { - params.Set("default_operator", s.defaultOperator) - } - if s.df != "" { - params.Set("df", s.df) - } - if s.expandWildcards != "" { - params.Set("expand_wildcards", s.expandWildcards) - } - if s.ignoreUnavailable != nil { - params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) - } - if s.lenient != nil { - params.Set("lenient", fmt.Sprintf("%v", *s.lenient)) - } - if s.lowercaseExpandedTerms != nil { - params.Set("lowercase_expanded_terms", fmt.Sprintf("%v", *s.lowercaseExpandedTerms)) - } - if s.minScore != nil { - params.Set("min_score", fmt.Sprintf("%v", s.minScore)) - } - if s.preference != "" { - params.Set("preference", s.preference) - } - if s.q != "" { - params.Set("q", s.q) - } - if s.routing != "" { - params.Set("routing", s.routing) - } - return path, params, nil -} - -// Validate checks if the operation is valid. -func (s *CountService) Validate() error { - return nil -} - -// Do executes the operation. -func (s *CountService) Do() (int64, error) { - // Check pre-conditions - if err := s.Validate(); err != nil { - return 0, err - } - - // Get URL for request - path, params, err := s.buildURL() - if err != nil { - return 0, err - } - - // Setup HTTP request body - var body interface{} - if s.query != nil { - query := make(map[string]interface{}) - query["query"] = s.query.Source() - body = query - } else if s.bodyJson != nil { - body = s.bodyJson - } else if s.bodyString != "" { - body = s.bodyString - } - - // Get HTTP response - res, err := s.client.PerformRequest("POST", path, params, body) - if err != nil { - return 0, err - } - - // Return result - ret := new(CountResponse) - if err := s.client.decoder.Decode(res.Body, ret); err != nil { - return 0, err - } - if ret != nil { - return ret.Count, nil - } - - return int64(0), nil -} - -// CountResponse is the response of using the Count API. -type CountResponse struct { - Count int64 `json:"count"` - Shards shardsInfo `json:"_shards,omitempty"` -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/count_test.go b/vendor/gopkg.in/olivere/elastic.v2/count_test.go deleted file mode 100644 index 44ecadf..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/count_test.go +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import "testing" - -func TestCountURL(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tests := []struct { - Indices []string - Types []string - Expected string - }{ - { - []string{}, - []string{}, - "/_all/_count", - }, - { - []string{}, - []string{"tweet"}, - "/_all/tweet/_count", - }, - { - []string{"twitter-*"}, - []string{"tweet", "follower"}, - "/twitter-%2A/tweet%2Cfollower/_count", - }, - { - []string{"twitter-2014", "twitter-2015"}, - []string{"tweet", "follower"}, - "/twitter-2014%2Ctwitter-2015/tweet%2Cfollower/_count", - }, - } - - for _, test := range tests { - path, _, err := client.Count().Indices(test.Indices...).Types(test.Types...).buildURL() - if err != nil { - t.Fatal(err) - } - if path != test.Expected { - t.Errorf("expected %q; got: %q", test.Expected, path) - } - } -} - -func TestCount(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Count documents - count, err := client.Count(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - if count != 3 { - t.Errorf("expected Count = %d; got %d", 3, count) - } - - // Count documents - count, err = client.Count(testIndexName).Type("tweet").Do() - if err != nil { - t.Fatal(err) - } - if count != 3 { - t.Errorf("expected Count = %d; got %d", 3, count) - } - - // Count documents - count, err = client.Count(testIndexName).Type("gezwitscher").Do() - if err != nil { - t.Fatal(err) - } - if count != 0 { - t.Errorf("expected Count = %d; got %d", 0, count) - } - - // Count with query - query := NewTermQuery("user", "olivere") - count, err = client.Count(testIndexName).Query(query).Do() - if err != nil { - t.Fatal(err) - } - if count != 2 { - t.Errorf("expected Count = %d; got %d", 2, count) - } - - // Count with query and type - query = NewTermQuery("user", "olivere") - count, err = client.Count(testIndexName).Type("tweet").Query(query).Do() - if err != nil { - t.Fatal(err) - } - if count != 2 { - t.Errorf("expected Count = %d; got %d", 2, count) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/create_index.go b/vendor/gopkg.in/olivere/elastic.v2/create_index.go deleted file mode 100644 index d4ba213..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/create_index.go +++ /dev/null @@ -1,125 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "errors" - "net/url" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -// CreateIndexService creates a new index. -type CreateIndexService struct { - client *Client - pretty bool - index string - timeout string - masterTimeout string - bodyJson interface{} - bodyString string -} - -// NewCreateIndexService returns a new CreateIndexService. -func NewCreateIndexService(client *Client) *CreateIndexService { - return &CreateIndexService{client: client} -} - -// Index is the name of the index to create. -func (b *CreateIndexService) Index(index string) *CreateIndexService { - b.index = index - return b -} - -// Timeout the explicit operation timeout, e.g. "5s". -func (s *CreateIndexService) Timeout(timeout string) *CreateIndexService { - s.timeout = timeout - return s -} - -// MasterTimeout specifies the timeout for connection to master. -func (s *CreateIndexService) MasterTimeout(masterTimeout string) *CreateIndexService { - s.masterTimeout = masterTimeout - return s -} - -// Body specifies the configuration of the index as a string. -// It is an alias for BodyString. -func (b *CreateIndexService) Body(body string) *CreateIndexService { - b.bodyString = body - return b -} - -// BodyString specifies the configuration of the index as a string. -func (b *CreateIndexService) BodyString(body string) *CreateIndexService { - b.bodyString = body - return b -} - -// BodyJson specifies the configuration of the index. The interface{} will -// be serializes as a JSON document, so use a map[string]interface{}. -func (b *CreateIndexService) BodyJson(body interface{}) *CreateIndexService { - b.bodyJson = body - return b -} - -// Pretty indicates that the JSON response be indented and human readable. -func (b *CreateIndexService) Pretty(pretty bool) *CreateIndexService { - b.pretty = pretty - return b -} - -// Do executes the operation. -func (b *CreateIndexService) Do() (*CreateIndexResult, error) { - if b.index == "" { - return nil, errors.New("missing index name") - } - - // Build url - path, err := uritemplates.Expand("/{index}", map[string]string{ - "index": b.index, - }) - if err != nil { - return nil, err - } - - params := make(url.Values) - if b.pretty { - params.Set("pretty", "1") - } - if b.masterTimeout != "" { - params.Set("master_timeout", b.masterTimeout) - } - if b.timeout != "" { - params.Set("timeout", b.timeout) - } - - // Setup HTTP request body - var body interface{} - if b.bodyJson != nil { - body = b.bodyJson - } else { - body = b.bodyString - } - - // Get response - res, err := b.client.PerformRequest("PUT", path, params, body) - if err != nil { - return nil, err - } - - ret := new(CreateIndexResult) - if err := b.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -// -- Result of a create index request. - -// CreateIndexResult is the outcome of creating a new index. -type CreateIndexResult struct { - Acknowledged bool `json:"acknowledged"` -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/decoder.go b/vendor/gopkg.in/olivere/elastic.v2/decoder.go deleted file mode 100644 index 765a5be..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/decoder.go +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" -) - -// Decoder is used to decode responses from Elasticsearch. -// Users of elastic can implement their own marshaler for advanced purposes -// and set them per Client (see SetDecoder). If none is specified, -// DefaultDecoder is used. -type Decoder interface { - Decode(data []byte, v interface{}) error -} - -// DefaultDecoder uses json.Unmarshal from the Go standard library -// to decode JSON data. -type DefaultDecoder struct{} - -// Decode decodes with json.Unmarshal from the Go standard library. -func (u *DefaultDecoder) Decode(data []byte, v interface{}) error { - return json.Unmarshal(data, v) -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/delete.go b/vendor/gopkg.in/olivere/elastic.v2/delete.go deleted file mode 100644 index 2ee857b..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/delete.go +++ /dev/null @@ -1,129 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "net/url" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -type DeleteService struct { - client *Client - index string - _type string - id string - routing string - refresh *bool - version *int - pretty bool -} - -func NewDeleteService(client *Client) *DeleteService { - builder := &DeleteService{ - client: client, - } - return builder -} - -func (s *DeleteService) Index(index string) *DeleteService { - s.index = index - return s -} - -func (s *DeleteService) Type(_type string) *DeleteService { - s._type = _type - return s -} - -func (s *DeleteService) Id(id string) *DeleteService { - s.id = id - return s -} - -func (s *DeleteService) Parent(parent string) *DeleteService { - if s.routing == "" { - s.routing = parent - } - return s -} - -func (s *DeleteService) Refresh(refresh bool) *DeleteService { - s.refresh = &refresh - return s -} - -func (s *DeleteService) Version(version int) *DeleteService { - s.version = &version - return s -} - -func (s *DeleteService) Pretty(pretty bool) *DeleteService { - s.pretty = pretty - return s -} - -// Do deletes the document. It fails if any of index, type, and identifier -// are missing. -func (s *DeleteService) Do() (*DeleteResult, error) { - if s.index == "" { - return nil, ErrMissingIndex - } - if s._type == "" { - return nil, ErrMissingType - } - if s.id == "" { - return nil, ErrMissingId - } - - // Build url - path, err := uritemplates.Expand("/{index}/{type}/{id}", map[string]string{ - "index": s.index, - "type": s._type, - "id": s.id, - }) - if err != nil { - return nil, err - } - - // Parameters - params := make(url.Values) - if s.refresh != nil { - params.Set("refresh", fmt.Sprintf("%v", *s.refresh)) - } - if s.version != nil { - params.Set("version", fmt.Sprintf("%d", *s.version)) - } - if s.routing != "" { - params.Set("routing", fmt.Sprintf("%s", s.routing)) - } - if s.pretty { - params.Set("pretty", fmt.Sprintf("%v", s.pretty)) - } - - // Get response - res, err := s.client.PerformRequest("DELETE", path, params, nil) - if err != nil { - return nil, err - } - - // Return response - ret := new(DeleteResult) - if err := s.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -// -- Result of a delete request. - -type DeleteResult struct { - Found bool `json:"found"` - Index string `json:"_index"` - Type string `json:"_type"` - Id string `json:"_id"` - Version int64 `json:"_version"` -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/delete_by_query.go b/vendor/gopkg.in/olivere/elastic.v2/delete_by_query.go deleted file mode 100644 index 9dd34a0..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/delete_by_query.go +++ /dev/null @@ -1,291 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "net/url" - "strings" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -// DeleteByQueryService deletes documents that match a query. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/master/docs-delete-by-query.html. -type DeleteByQueryService struct { - client *Client - indices []string - types []string - analyzer string - consistency string - defaultOper string - df string - ignoreUnavailable *bool - allowNoIndices *bool - expandWildcards string - replication string - routing string - timeout string - pretty bool - q string - query Query -} - -// NewDeleteByQueryService creates a new DeleteByQueryService. -// You typically use the client's DeleteByQuery to get a reference to -// the service. -func NewDeleteByQueryService(client *Client) *DeleteByQueryService { - builder := &DeleteByQueryService{ - client: client, - } - return builder -} - -// Index limits the delete-by-query to a single index. -// You can use _all to perform the operation on all indices. -func (s *DeleteByQueryService) Index(index string) *DeleteByQueryService { - if s.indices == nil { - s.indices = make([]string, 0) - } - s.indices = append(s.indices, index) - return s -} - -// Indices sets the indices on which to perform the delete operation. -func (s *DeleteByQueryService) Indices(indices ...string) *DeleteByQueryService { - if s.indices == nil { - s.indices = make([]string, 0) - } - s.indices = append(s.indices, indices...) - return s -} - -// Type limits the delete operation to the given type. -func (s *DeleteByQueryService) Type(typ string) *DeleteByQueryService { - if s.types == nil { - s.types = make([]string, 0) - } - s.types = append(s.types, typ) - return s -} - -// Types limits the delete operation to the given types. -func (s *DeleteByQueryService) Types(types ...string) *DeleteByQueryService { - if s.types == nil { - s.types = make([]string, 0) - } - s.types = append(s.types, types...) - return s -} - -// Analyzer to use for the query string. -func (s *DeleteByQueryService) Analyzer(analyzer string) *DeleteByQueryService { - s.analyzer = analyzer - return s -} - -// Consistency represents the specific write consistency setting for the operation. -// It can be one, quorum, or all. -func (s *DeleteByQueryService) Consistency(consistency string) *DeleteByQueryService { - s.consistency = consistency - return s -} - -// DefaultOperator for query string query (AND or OR). -func (s *DeleteByQueryService) DefaultOperator(defaultOperator string) *DeleteByQueryService { - s.defaultOper = defaultOperator - return s -} - -// DF is the field to use as default where no field prefix is given in the query string. -func (s *DeleteByQueryService) DF(defaultField string) *DeleteByQueryService { - s.df = defaultField - return s -} - -// DefaultField is the field to use as default where no field prefix is given in the query string. -// It is an alias to the DF func. -func (s *DeleteByQueryService) DefaultField(defaultField string) *DeleteByQueryService { - s.df = defaultField - return s -} - -// IgnoreUnavailable indicates whether specified concrete indices should be -// ignored when unavailable (missing or closed). -func (s *DeleteByQueryService) IgnoreUnavailable(ignore bool) *DeleteByQueryService { - s.ignoreUnavailable = &ignore - return s -} - -// AllowNoIndices indicates whether to ignore if a wildcard indices -// expression resolves into no concrete indices (including the _all string -// or when no indices have been specified). -func (s *DeleteByQueryService) AllowNoIndices(allow bool) *DeleteByQueryService { - s.allowNoIndices = &allow - return s -} - -// ExpandWildcards indicates whether to expand wildcard expression to -// concrete indices that are open, closed or both. It can be "open" or "closed". -func (s *DeleteByQueryService) ExpandWildcards(expand string) *DeleteByQueryService { - s.expandWildcards = expand - return s -} - -// Replication sets a specific replication type (sync or async). -func (s *DeleteByQueryService) Replication(replication string) *DeleteByQueryService { - s.replication = replication - return s -} - -// Q specifies the query in Lucene query string syntax. You can also use -// Query to programmatically specify the query. -func (s *DeleteByQueryService) Q(query string) *DeleteByQueryService { - s.q = query - return s -} - -// QueryString is an alias to Q. Notice that you can also use Query to -// programmatically set the query. -func (s *DeleteByQueryService) QueryString(query string) *DeleteByQueryService { - s.q = query - return s -} - -// Routing sets a specific routing value. -func (s *DeleteByQueryService) Routing(routing string) *DeleteByQueryService { - s.routing = routing - return s -} - -// Timeout sets an explicit operation timeout, e.g. "1s" or "10000ms". -func (s *DeleteByQueryService) Timeout(timeout string) *DeleteByQueryService { - s.timeout = timeout - return s -} - -// Pretty indents the JSON output from Elasticsearch. -func (s *DeleteByQueryService) Pretty(pretty bool) *DeleteByQueryService { - s.pretty = pretty - return s -} - -// Query sets the query programmatically. -func (s *DeleteByQueryService) Query(query Query) *DeleteByQueryService { - s.query = query - return s -} - -// Do executes the delete-by-query operation. -func (s *DeleteByQueryService) Do() (*DeleteByQueryResult, error) { - var err error - - // Build url - path := "/" - - // Indices part - indexPart := make([]string, 0) - for _, index := range s.indices { - index, err = uritemplates.Expand("{index}", map[string]string{ - "index": index, - }) - if err != nil { - return nil, err - } - indexPart = append(indexPart, index) - } - if len(indexPart) > 0 { - path += strings.Join(indexPart, ",") - } - - // Types part - typesPart := make([]string, 0) - for _, typ := range s.types { - typ, err = uritemplates.Expand("{type}", map[string]string{ - "type": typ, - }) - if err != nil { - return nil, err - } - typesPart = append(typesPart, typ) - } - if len(typesPart) > 0 { - path += "/" + strings.Join(typesPart, ",") - } - - // Search - path += "/_query" - - // Parameters - params := make(url.Values) - if s.analyzer != "" { - params.Set("analyzer", s.analyzer) - } - if s.consistency != "" { - params.Set("consistency", s.consistency) - } - if s.defaultOper != "" { - params.Set("default_operator", s.defaultOper) - } - if s.df != "" { - params.Set("df", s.df) - } - if s.ignoreUnavailable != nil { - params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) - } - if s.allowNoIndices != nil { - params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) - } - if s.expandWildcards != "" { - params.Set("expand_wildcards", s.expandWildcards) - } - if s.replication != "" { - params.Set("replication", s.replication) - } - if s.routing != "" { - params.Set("routing", s.routing) - } - if s.timeout != "" { - params.Set("timeout", s.timeout) - } - if s.pretty { - params.Set("pretty", fmt.Sprintf("%v", s.pretty)) - } - if s.q != "" { - params.Set("q", s.q) - } - - // Set body if there is a query set - var body interface{} - if s.query != nil { - query := make(map[string]interface{}) - query["query"] = s.query.Source() - body = query - } - - // Get response - res, err := s.client.PerformRequest("DELETE", path, params, body) - if err != nil { - return nil, err - } - - // Return result - ret := new(DeleteByQueryResult) - if err := s.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -// DeleteByQueryResult is the outcome of executing Do with DeleteByQueryService. -type DeleteByQueryResult struct { - Indices map[string]IndexDeleteByQueryResult `json:"_indices"` -} - -// IndexDeleteByQueryResult is the result of a delete-by-query for a specific -// index. -type IndexDeleteByQueryResult struct { - Shards shardsInfo `json:"_shards"` -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/delete_by_query_test.go b/vendor/gopkg.in/olivere/elastic.v2/delete_by_query_test.go deleted file mode 100644 index a9a235d..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/delete_by_query_test.go +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "testing" -) - -func TestDeleteByQuery(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Count documents - count, err := client.Count(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - if count != 3 { - t.Fatalf("expected count = %d; got: %d", 3, count) - } - - // Delete all documents by sandrae - q := NewTermQuery("user", "sandrae") - res, err := client.DeleteByQuery().Index(testIndexName).Type("tweet").Query(q).Do() - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatalf("expected response != nil; got: %v", res) - } - idx, found := res.Indices[testIndexName] - if !found { - t.Errorf("expected Found = true; got: %v", found) - } - if idx.Shards.Failed > 0 { - t.Errorf("expected no failed shards; got: %d", idx.Shards.Failed) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - count, err = client.Count(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - if count != 2 { - t.Fatalf("expected Count = %d; got: %d", 2, count) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/delete_index.go b/vendor/gopkg.in/olivere/elastic.v2/delete_index.go deleted file mode 100644 index 4d03fdd..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/delete_index.go +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import "gopkg.in/olivere/elastic.v2/uritemplates" - -type DeleteIndexService struct { - client *Client - index string -} - -func NewDeleteIndexService(client *Client) *DeleteIndexService { - builder := &DeleteIndexService{ - client: client, - } - return builder -} - -func (b *DeleteIndexService) Index(index string) *DeleteIndexService { - b.index = index - return b -} - -func (b *DeleteIndexService) Do() (*DeleteIndexResult, error) { - // Build url - path, err := uritemplates.Expand("/{index}/", map[string]string{ - "index": b.index, - }) - if err != nil { - return nil, err - } - - // Get response - res, err := b.client.PerformRequest("DELETE", path, nil, nil) - if err != nil { - return nil, err - } - - // Return result - ret := new(DeleteIndexResult) - if err := b.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -// -- Result of a delete index request. - -type DeleteIndexResult struct { - Acknowledged bool `json:"acknowledged"` -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/delete_mapping.go b/vendor/gopkg.in/olivere/elastic.v2/delete_mapping.go deleted file mode 100644 index f081260..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/delete_mapping.go +++ /dev/null @@ -1,135 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "log" - "net/url" - "strings" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -var ( - _ = fmt.Print - _ = log.Print - _ = strings.Index - _ = uritemplates.Expand - _ = url.Parse -) - -// DeleteMappingService allows to delete a mapping along with its data. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-delete-mapping.html. -type DeleteMappingService struct { - client *Client - pretty bool - index []string - typ []string - masterTimeout string -} - -// NewDeleteMappingService creates a new DeleteMappingService. -func NewDeleteMappingService(client *Client) *DeleteMappingService { - return &DeleteMappingService{ - client: client, - index: make([]string, 0), - typ: make([]string, 0), - } -} - -// Index is a list of index names (supports wildcards). Use `_all` for all indices. -func (s *DeleteMappingService) Index(index ...string) *DeleteMappingService { - s.index = append(s.index, index...) - return s -} - -// Type is a list of document types to delete (supports wildcards). -// Use `_all` to delete all document types in the specified indices.. -func (s *DeleteMappingService) Type(typ ...string) *DeleteMappingService { - s.typ = append(s.typ, typ...) - return s -} - -// MasterTimeout specifies the timeout for connecting to master. -func (s *DeleteMappingService) MasterTimeout(masterTimeout string) *DeleteMappingService { - s.masterTimeout = masterTimeout - return s -} - -// Pretty indicates that the JSON response be indented and human readable. -func (s *DeleteMappingService) Pretty(pretty bool) *DeleteMappingService { - s.pretty = pretty - return s -} - -// buildURL builds the URL for the operation. -func (s *DeleteMappingService) buildURL() (string, url.Values, error) { - // Build URL - path, err := uritemplates.Expand("/{index}/_mapping/{type}", map[string]string{ - "index": strings.Join(s.index, ","), - "type": strings.Join(s.typ, ","), - }) - if err != nil { - return "", url.Values{}, err - } - - // Add query string parameters - params := url.Values{} - if s.pretty { - params.Set("pretty", "1") - } - if s.masterTimeout != "" { - params.Set("master_timeout", s.masterTimeout) - } - return path, params, nil -} - -// Validate checks if the operation is valid. -func (s *DeleteMappingService) Validate() error { - var invalid []string - if len(s.index) == 0 { - invalid = append(invalid, "Index") - } - if len(s.typ) == 0 { - invalid = append(invalid, "Type") - } - if len(invalid) > 0 { - return fmt.Errorf("missing required fields: %v", invalid) - } - return nil -} - -// Do executes the operation. -func (s *DeleteMappingService) Do() (*DeleteMappingResponse, error) { - // Check pre-conditions - if err := s.Validate(); err != nil { - return nil, err - } - - // Get URL for request - path, params, err := s.buildURL() - if err != nil { - return nil, err - } - - // Get HTTP response - res, err := s.client.PerformRequest("DELETE", path, params, nil) - if err != nil { - return nil, err - } - - // Return operation response - ret := new(DeleteMappingResponse) - if err := s.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -// DeleteMappingResponse is the response of DeleteMappingService.Do. -type DeleteMappingResponse struct { - Acknowledged bool `json:"acknowledged"` -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/delete_mapping_test.go b/vendor/gopkg.in/olivere/elastic.v2/delete_mapping_test.go deleted file mode 100644 index 517477d..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/delete_mapping_test.go +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "testing" -) - -func TestDeleteMappingURL(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tests := []struct { - Indices []string - Types []string - Expected string - }{ - { - []string{"twitter"}, - []string{"tweet"}, - "/twitter/_mapping/tweet", - }, - { - []string{"store-1", "store-2"}, - []string{"tweet", "user"}, - "/store-1%2Cstore-2/_mapping/tweet%2Cuser", - }, - } - - for _, test := range tests { - path, _, err := client.DeleteMapping().Index(test.Indices...).Type(test.Types...).buildURL() - if err != nil { - t.Fatal(err) - } - if path != test.Expected { - t.Errorf("expected %q; got: %q", test.Expected, path) - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/delete_template.go b/vendor/gopkg.in/olivere/elastic.v2/delete_template.go deleted file mode 100644 index b863e1e..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/delete_template.go +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "net/url" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -// DeleteTemplateService deletes a search template. More information can -// be found at http://www.elasticsearch.org/guide/en/elasticsearch/reference/master/search-template.html. -type DeleteTemplateService struct { - client *Client - pretty bool - id string - version *int - versionType string -} - -// NewDeleteTemplateService creates a new DeleteTemplateService. -func NewDeleteTemplateService(client *Client) *DeleteTemplateService { - return &DeleteTemplateService{ - client: client, - } -} - -// Id is the template ID. -func (s *DeleteTemplateService) Id(id string) *DeleteTemplateService { - s.id = id - return s -} - -// Version an explicit version number for concurrency control. -func (s *DeleteTemplateService) Version(version int) *DeleteTemplateService { - s.version = &version - return s -} - -// VersionType specifies a version type. -func (s *DeleteTemplateService) VersionType(versionType string) *DeleteTemplateService { - s.versionType = versionType - return s -} - -// buildURL builds the URL for the operation. -func (s *DeleteTemplateService) buildURL() (string, url.Values, error) { - // Build URL - path, err := uritemplates.Expand("/_search/template/{id}", map[string]string{ - "id": s.id, - }) - if err != nil { - return "", url.Values{}, err - } - - // Add query string parameters - params := url.Values{} - if s.version != nil { - params.Set("version", fmt.Sprintf("%d", *s.version)) - } - if s.versionType != "" { - params.Set("version_type", s.versionType) - } - - return path, params, nil -} - -// Validate checks if the operation is valid. -func (s *DeleteTemplateService) Validate() error { - var invalid []string - if s.id == "" { - invalid = append(invalid, "Id") - } - if len(invalid) > 0 { - return fmt.Errorf("missing required fields: %v", invalid) - } - return nil -} - -// Do executes the operation. -func (s *DeleteTemplateService) Do() (*DeleteTemplateResponse, error) { - // Check pre-conditions - if err := s.Validate(); err != nil { - return nil, err - } - - // Get URL for request - path, params, err := s.buildURL() - if err != nil { - return nil, err - } - - // Get HTTP response - res, err := s.client.PerformRequest("DELETE", path, params, nil) - if err != nil { - return nil, err - } - - // Return operation response - ret := new(DeleteTemplateResponse) - if err := s.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -// DeleteTemplateResponse is the response of DeleteTemplateService.Do. -type DeleteTemplateResponse struct { - Found bool `json:"found"` - Index string `json:"_index"` - Type string `json:"_type"` - Id string `json:"_id"` - Version int `json:"_version"` -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/delete_test.go b/vendor/gopkg.in/olivere/elastic.v2/delete_test.go deleted file mode 100644 index ed07842..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/delete_test.go +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "testing" -) - -func TestDelete(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Count documents - count, err := client.Count(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - if count != 3 { - t.Errorf("expected Count = %d; got %d", 3, count) - } - - // Delete document 1 - res, err := client.Delete().Index(testIndexName).Type("tweet").Id("1").Do() - if err != nil { - t.Fatal(err) - } - if res.Found != true { - t.Errorf("expected Found = true; got %v", res.Found) - } - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - count, err = client.Count(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - if count != 2 { - t.Errorf("expected Count = %d; got %d", 2, count) - } - - // Delete non existent document 99 - res, err = client.Delete().Index(testIndexName).Type("tweet").Id("99").Refresh(true).Do() - if err != nil { - t.Fatal(err) - } - if res.Found != false { - t.Errorf("expected Found = false; got %v", res.Found) - } - count, err = client.Count(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - if count != 2 { - t.Errorf("expected Count = %d; got %d", 2, count) - } -} - -func TestDeleteWithEmptyIDFails(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Delete document with blank ID - _, err = client.Delete().Index(testIndexName).Type("tweet").Id("").Do() - if err != ErrMissingId { - t.Fatalf("expected to not accept delete without identifier, got: %v", err) - } - - // Delete document with blank type - _, err = client.Delete().Index(testIndexName).Type("").Id("1").Do() - if err != ErrMissingType { - t.Fatalf("expected to not accept delete without type, got: %v", err) - } - - // Delete document with blank index - _, err = client.Delete().Index("").Type("tweet").Id("1").Do() - if err != ErrMissingIndex { - t.Fatalf("expected to not accept delete without index, got: %v", err) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/doc.go b/vendor/gopkg.in/olivere/elastic.v2/doc.go deleted file mode 100644 index 336a734..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/doc.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -/* -Package elastic provides an interface to the Elasticsearch server -(http://www.elasticsearch.org/). - -The first thing you do is to create a Client. If you have Elasticsearch -installed and running with its default settings -(i.e. available at http://127.0.0.1:9200), all you need to do is: - - client, err := elastic.NewClient() - if err != nil { - // Handle error - } - -If your Elasticsearch server is running on a different IP and/or port, -just provide a URL to NewClient: - - // Create a client and connect to http://192.168.2.10:9201 - client, err := elastic.NewClient(elastic.SetURL("http://192.168.2.10:9201")) - if err != nil { - // Handle error - } - -You can pass many more configuration parameters to NewClient. Review the -documentation of NewClient for more information. - -If no Elasticsearch server is available, services will fail when creating -a new request and will return ErrNoClient. - -A Client provides services. The services usually come with a variety of -methods to prepare the query and a Do function to execute it against the -Elasticsearch REST interface and return a response. Here is an example -of the IndexExists service that checks if a given index already exists. - - exists, err := client.IndexExists("twitter").Do() - if err != nil { - // Handle error - } - if !exists { - // Index does not exist yet. - } - -Look up the documentation for Client to get an idea of the services provided -and what kinds of responses you get when executing the Do function of a service. -Also see the wiki on Github for more details. - -*/ -package elastic diff --git a/vendor/gopkg.in/olivere/elastic.v2/errors.go b/vendor/gopkg.in/olivere/elastic.v2/errors.go deleted file mode 100644 index ebd3c20..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/errors.go +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "errors" - "fmt" - "io/ioutil" - "net/http" -) - -var ( - // ErrMissingIndex is returned e.g. from DeleteService if the index is missing. - ErrMissingIndex = errors.New("elastic: index is missing") - - // ErrMissingType is returned e.g. from DeleteService if the type is missing. - ErrMissingType = errors.New("elastic: type is missing") - - // ErrMissingId is returned e.g. from DeleteService if the document identifier is missing. - ErrMissingId = errors.New("elastic: id is missing") -) - -// checkResponse will return an error if the request/response indicates -// an error returned from Elasticsearch. -// -// HTTP status codes between in the range [200..299] are considered successful. -// All other errors are considered errors except they are specified in -// ignoreErrors. This is necessary because for some services, HTTP status 404 -// is a valid response from Elasticsearch (e.g. the Exists service). -// -// The func tries to parse error details as returned from Elasticsearch -// and encapsulates them in type elastic.Error. -func checkResponse(req *http.Request, res *http.Response, ignoreErrors ...int) error { - // 200-299 and 404 are valid status codes - if (res.StatusCode >= 200 && res.StatusCode <= 299) || res.StatusCode == http.StatusNotFound { - return nil - } - // Ignore certain errors? - for _, code := range ignoreErrors { - if code == res.StatusCode { - return nil - } - } - if res.Body == nil { - return fmt.Errorf("elastic: Error %d (%s)", res.StatusCode, http.StatusText(res.StatusCode)) - } - slurp, err := ioutil.ReadAll(res.Body) - if err != nil { - return fmt.Errorf("elastic: Error %d (%s) when reading body: %v", res.StatusCode, http.StatusText(res.StatusCode), err) - } - return createResponseError(res.StatusCode, slurp) -} - -// createResponseError creates an Error structure from the HTTP response, -// its status code and the error information sent by Elasticsearch. -func createResponseError(statusCode int, data []byte) error { - errReply := new(Error) - err := json.Unmarshal(data, errReply) - if err != nil { - return fmt.Errorf("elastic: Error %d (%s)", statusCode, http.StatusText(statusCode)) - } - if errReply != nil { - if errReply.Status == 0 { - errReply.Status = statusCode - } - return errReply - } - return fmt.Errorf("elastic: Error %d (%s)", statusCode, http.StatusText(statusCode)) -} - -// Error encapsulates error details as returned from Elasticsearch. -type Error struct { - Status int `json:"status"` - Message string `json:"error"` -} - -// Error returns a string representation of the error. -func (e *Error) Error() string { - if e.Message != "" { - return fmt.Sprintf("elastic: Error %d (%s): %s", e.Status, http.StatusText(e.Status), e.Message) - } else { - return fmt.Sprintf("elastic: Error %d (%s)", e.Status, http.StatusText(e.Status)) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/errors_test.go b/vendor/gopkg.in/olivere/elastic.v2/errors_test.go deleted file mode 100644 index 7682f4d..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/errors_test.go +++ /dev/null @@ -1,109 +0,0 @@ -package elastic - -import ( - "bufio" - "fmt" - "net/http" - "strings" - "testing" -) - -func TestResponseError(t *testing.T) { - message := "Something went seriously wrong." - raw := "HTTP/1.1 500 Internal Server Error\r\n" + - "\r\n" + - `{"status":500,"error":"` + message + `"}` + "\r\n" - r := bufio.NewReader(strings.NewReader(raw)) - - req, err := http.NewRequest("GET", "/", nil) - if err != nil { - t.Fatal(err) - } - - resp, err := http.ReadResponse(r, nil) - if err != nil { - t.Fatal(err) - } - err = checkResponse(req, resp) - if err == nil { - t.Fatalf("expected error; got: %v", err) - } - - // Check for correct error message - expected := fmt.Sprintf("elastic: Error %d (%s): %s", resp.StatusCode, http.StatusText(resp.StatusCode), message) - got := err.Error() - if got != expected { - t.Fatalf("expected %q; got: %q", expected, got) - } - - // Check that error is of type *elastic.Error, which contains additional information - e, ok := err.(*Error) - if !ok { - t.Fatal("expected error to be of type *elastic.Error") - } - if e.Status != resp.StatusCode { - t.Fatalf("expected status code %d; got: %d", resp.StatusCode, e.Status) - } - if e.Message != message { - t.Fatalf("expected error message %q; got: %q", message, e.Message) - } -} - -func TestResponseErrorHTML(t *testing.T) { - raw := "HTTP/1.1 413 Request Entity Too Large\r\n" + - "\r\n" + - ` -413 Request Entity Too Large - -

413 Request Entity Too Large

-
nginx/1.6.2
- -` + "\r\n" - r := bufio.NewReader(strings.NewReader(raw)) - - req, err := http.NewRequest("GET", "/", nil) - if err != nil { - t.Fatal(err) - } - - resp, err := http.ReadResponse(r, nil) - if err != nil { - t.Fatal(err) - } - err = checkResponse(req, resp) - if err == nil { - t.Fatalf("expected error; got: %v", err) - } - - // Check for correct error message - expected := fmt.Sprintf("elastic: Error %d (%s)", http.StatusRequestEntityTooLarge, http.StatusText(http.StatusRequestEntityTooLarge)) - got := err.Error() - if got != expected { - t.Fatalf("expected %q; got: %q", expected, got) - } -} - -func TestResponseErrorWithIgnore(t *testing.T) { - raw := "HTTP/1.1 500 Not Found\r\n" + - "\r\n" + - `{"some":"response"}` + "\r\n" - r := bufio.NewReader(strings.NewReader(raw)) - - req, err := http.NewRequest("HEAD", "/", nil) - if err != nil { - t.Fatal(err) - } - - resp, err := http.ReadResponse(r, nil) - if err != nil { - t.Fatal(err) - } - err = checkResponse(req, resp) - if err == nil { - t.Fatalf("expected error; got: %v", err) - } - err = checkResponse(req, resp, 500) // ignore 500 errors - if err != nil { - t.Fatalf("expected no error; got: %v", err) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/example_test.go b/vendor/gopkg.in/olivere/elastic.v2/example_test.go deleted file mode 100644 index 720ebb1..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/example_test.go +++ /dev/null @@ -1,547 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic_test - -import ( - "encoding/json" - "fmt" - "log" - "os" - "reflect" - "time" - - elastic "gopkg.in/olivere/elastic.v2" -) - -type Tweet struct { - User string `json:"user"` - Message string `json:"message"` - Retweets int `json:"retweets"` - Image string `json:"image,omitempty"` - Created time.Time `json:"created,omitempty"` - Tags []string `json:"tags,omitempty"` - Location string `json:"location,omitempty"` - Suggest *elastic.SuggestField `json:"suggest_field,omitempty"` -} - -func Example() { - errorlog := log.New(os.Stdout, "APP ", log.LstdFlags) - - // Obtain a client. You can provide your own HTTP client here. - client, err := elastic.NewClient(elastic.SetErrorLog(errorlog)) - if err != nil { - // Handle error - panic(err) - } - - // Trace request and response details like this - //client.SetTracer(log.New(os.Stdout, "", 0)) - - // Ping the Elasticsearch server to get e.g. the version number - info, code, err := client.Ping().Do() - if err != nil { - // Handle error - panic(err) - } - fmt.Printf("Elasticsearch returned with code %d and version %s", code, info.Version.Number) - - // Getting the ES version number is quite common, so there's a shortcut - esversion, err := client.ElasticsearchVersion("http://127.0.0.1:9200") - if err != nil { - // Handle error - panic(err) - } - fmt.Printf("Elasticsearch version %s", esversion) - - // Use the IndexExists service to check if a specified index exists. - exists, err := client.IndexExists("twitter").Do() - if err != nil { - // Handle error - panic(err) - } - if !exists { - // Create a new index. - createIndex, err := client.CreateIndex("twitter").Do() - if err != nil { - // Handle error - panic(err) - } - if !createIndex.Acknowledged { - // Not acknowledged - } - } - - // Index a tweet (using JSON serialization) - tweet1 := Tweet{User: "olivere", Message: "Take Five", Retweets: 0} - put1, err := client.Index(). - Index("twitter"). - Type("tweet"). - Id("1"). - BodyJson(tweet1). - Do() - if err != nil { - // Handle error - panic(err) - } - fmt.Printf("Indexed tweet %s to index %s, type %s\n", put1.Id, put1.Index, put1.Type) - - // Index a second tweet (by string) - tweet2 := `{"user" : "olivere", "message" : "It's a Raggy Waltz"}` - put2, err := client.Index(). - Index("twitter"). - Type("tweet"). - Id("2"). - BodyString(tweet2). - Do() - if err != nil { - // Handle error - panic(err) - } - fmt.Printf("Indexed tweet %s to index %s, type %s\n", put2.Id, put2.Index, put2.Type) - - // Get tweet with specified ID - get1, err := client.Get(). - Index("twitter"). - Type("tweet"). - Id("1"). - Do() - if err != nil { - // Handle error - panic(err) - } - if get1.Found { - fmt.Printf("Got document %s in version %d from index %s, type %s\n", get1.Id, get1.Version, get1.Index, get1.Type) - } - - // Flush to make sure the documents got written. - _, err = client.Flush().Index("twitter").Do() - if err != nil { - panic(err) - } - - // Search with a term query - termQuery := elastic.NewTermQuery("user", "olivere") - searchResult, err := client.Search(). - Index("twitter"). // search in index "twitter" - Query(&termQuery). // specify the query - Sort("user", true). // sort by "user" field, ascending - From(0).Size(10). // take documents 0-9 - Pretty(true). // pretty print request and response JSON - Do() // execute - if err != nil { - // Handle error - panic(err) - } - - // searchResult is of type SearchResult and returns hits, suggestions, - // and all kinds of other information from Elasticsearch. - fmt.Printf("Query took %d milliseconds\n", searchResult.TookInMillis) - - // Each is a convenience function that iterates over hits in a search result. - // It makes sure you don't need to check for nil values in the response. - // However, it ignores errors in serialization. If you want full control - // over iterating the hits, see below. - var ttyp Tweet - for _, item := range searchResult.Each(reflect.TypeOf(ttyp)) { - t := item.(Tweet) - fmt.Printf("Tweet by %s: %s\n", t.User, t.Message) - } - // TotalHits is another convenience function that works even when something goes wrong. - fmt.Printf("Found a total of %d tweets\n", searchResult.TotalHits()) - - // Here's how you iterate through results with full control over each step. - if searchResult.Hits.TotalHits > 0 { - fmt.Printf("Found a total of %d tweets\n", searchResult.Hits.TotalHits) - - // Iterate through results - for _, hit := range searchResult.Hits.Hits { - // hit.Index contains the name of the index - - // Deserialize hit.Source into a Tweet (could also be just a map[string]interface{}). - var t Tweet - err := json.Unmarshal(*hit.Source, &t) - if err != nil { - // Deserialization failed - } - - // Work with tweet - fmt.Printf("Tweet by %s: %s\n", t.User, t.Message) - } - } else { - // No hits - fmt.Print("Found no tweets\n") - } - - // Update a tweet by the update API of Elasticsearch. - // We just increment the number of retweets. - update, err := client.Update().Index("twitter").Type("tweet").Id("1"). - Script("ctx._source.retweets += num"). - ScriptParams(map[string]interface{}{"num": 1}). - Upsert(map[string]interface{}{"retweets": 0}). - Do() - if err != nil { - // Handle error - panic(err) - } - fmt.Printf("New version of tweet %q is now %d", update.Id, update.Version) - - // ... - - // Delete an index. - deleteIndex, err := client.DeleteIndex("twitter").Do() - if err != nil { - // Handle error - panic(err) - } - if !deleteIndex.Acknowledged { - // Not acknowledged - } -} - -func ExampleClient_NewClient_default() { - // Obtain a client to the Elasticsearch instance on http://localhost:9200. - client, err := elastic.NewClient() - if err != nil { - // Handle error - fmt.Printf("connection failed: %v\n", err) - } else { - fmt.Println("connected") - } - _ = client - // Output: - // connected -} - -func ExampleClient_NewClient_cluster() { - // Obtain a client for an Elasticsearch cluster of two nodes, - // running on 10.0.1.1 and 10.0.1.2. - client, err := elastic.NewClient(elastic.SetURL("http://10.0.1.1:9200", "http://10.0.1.2:9200")) - if err != nil { - // Handle error - panic(err) - } - _ = client -} - -func ExampleClient_NewClient_manyOptions() { - // Obtain a client for an Elasticsearch cluster of two nodes, - // running on 10.0.1.1 and 10.0.1.2. Do not run the sniffer. - // Set the healthcheck interval to 10s. When requests fail, - // retry 5 times. Print error messages to os.Stderr and informational - // messages to os.Stdout. - client, err := elastic.NewClient( - elastic.SetURL("http://10.0.1.1:9200", "http://10.0.1.2:9200"), - elastic.SetSniff(false), - elastic.SetHealthcheckInterval(10*time.Second), - elastic.SetMaxRetries(5), - elastic.SetErrorLog(log.New(os.Stderr, "ELASTIC ", log.LstdFlags)), - elastic.SetInfoLog(log.New(os.Stdout, "", log.LstdFlags))) - if err != nil { - // Handle error - panic(err) - } - _ = client -} - -func ExampleIndexExistsService() { - // Get a client to the local Elasticsearch instance. - client, err := elastic.NewClient() - if err != nil { - // Handle error - panic(err) - } - // Use the IndexExists service to check if the index "twitter" exists. - exists, err := client.IndexExists("twitter").Do() - if err != nil { - // Handle error - panic(err) - } - if exists { - // ... - } -} - -func ExampleCreateIndexService() { - // Get a client to the local Elasticsearch instance. - client, err := elastic.NewClient() - if err != nil { - // Handle error - panic(err) - } - // Create a new index. - createIndex, err := client.CreateIndex("twitter").Do() - if err != nil { - // Handle error - panic(err) - } - if !createIndex.Acknowledged { - // Not acknowledged - } -} - -func ExampleDeleteIndexService() { - // Get a client to the local Elasticsearch instance. - client, err := elastic.NewClient() - if err != nil { - // Handle error - panic(err) - } - // Delete an index. - deleteIndex, err := client.DeleteIndex("twitter").Do() - if err != nil { - // Handle error - panic(err) - } - if !deleteIndex.Acknowledged { - // Not acknowledged - } -} - -func ExampleSearchService() { - // Get a client to the local Elasticsearch instance. - client, err := elastic.NewClient() - if err != nil { - // Handle error - panic(err) - } - - // Search with a term query - termQuery := elastic.NewTermQuery("user", "olivere") - searchResult, err := client.Search(). - Index("twitter"). // search in index "twitter" - Query(&termQuery). // specify the query - Sort("user", true). // sort by "user" field, ascending - From(0).Size(10). // take documents 0-9 - Pretty(true). // pretty print request and response JSON - Do() // execute - if err != nil { - // Handle error - panic(err) - } - - // searchResult is of type SearchResult and returns hits, suggestions, - // and all kinds of other information from Elasticsearch. - fmt.Printf("Query took %d milliseconds\n", searchResult.TookInMillis) - - // Number of hits - if searchResult.Hits.TotalHits > 0 { - fmt.Printf("Found a total of %d tweets\n", searchResult.Hits.TotalHits) - - // Iterate through results - for _, hit := range searchResult.Hits.Hits { - // hit.Index contains the name of the index - - // Deserialize hit.Source into a Tweet (could also be just a map[string]interface{}). - var t Tweet - err := json.Unmarshal(*hit.Source, &t) - if err != nil { - // Deserialization failed - } - - // Work with tweet - fmt.Printf("Tweet by %s: %s\n", t.User, t.Message) - } - } else { - // No hits - fmt.Print("Found no tweets\n") - } -} - -func ExampleAggregations() { - // Get a client to the local Elasticsearch instance. - client, err := elastic.NewClient() - if err != nil { - // Handle error - panic(err) - } - - // Create an aggregation for users and a sub-aggregation for a date histogram of tweets (per year). - timeline := elastic.NewTermsAggregation().Field("user").Size(10).OrderByCountDesc() - histogram := elastic.NewDateHistogramAggregation().Field("created").Interval("year") - timeline = timeline.SubAggregation("history", histogram) - - // Search with a term query - searchResult, err := client.Search(). - Index("twitter"). // search in index "twitter" - Query(elastic.NewMatchAllQuery()). // return all results, but ... - SearchType("count"). // ... do not return hits, just the count - Aggregation("timeline", timeline). // add our aggregation to the query - Pretty(true). // pretty print request and response JSON - Do() // execute - if err != nil { - // Handle error - panic(err) - } - - // Access "timeline" aggregate in search result. - agg, found := searchResult.Aggregations.Terms("timeline") - if !found { - log.Fatalf("we should have a terms aggregation called %q", "timeline") - } - for _, userBucket := range agg.Buckets { - // Every bucket should have the user field as key. - user := userBucket.Key - - // The sub-aggregation history should have the number of tweets per year. - histogram, found := userBucket.DateHistogram("history") - if found { - for _, year := range histogram.Buckets { - fmt.Printf("user %q has %d tweets in %q\n", user, year.DocCount, year.KeyAsString) - } - } - } -} - -func ExampleSearchResult() { - client, err := elastic.NewClient() - if err != nil { - panic(err) - } - - // Do a search - searchResult, err := client.Search().Index("twitter").Query(elastic.NewMatchAllQuery()).Do() - if err != nil { - panic(err) - } - - // searchResult is of type SearchResult and returns hits, suggestions, - // and all kinds of other information from Elasticsearch. - fmt.Printf("Query took %d milliseconds\n", searchResult.TookInMillis) - - // Each is a utility function that iterates over hits in a search result. - // It makes sure you don't need to check for nil values in the response. - // However, it ignores errors in serialization. If you want full control - // over iterating the hits, see below. - var ttyp Tweet - for _, item := range searchResult.Each(reflect.TypeOf(ttyp)) { - t := item.(Tweet) - fmt.Printf("Tweet by %s: %s\n", t.User, t.Message) - } - fmt.Printf("Found a total of %d tweets\n", searchResult.TotalHits()) - - // Here's how you iterate hits with full control. - if searchResult.Hits.TotalHits > 0 { - fmt.Printf("Found a total of %d tweets\n", searchResult.Hits.TotalHits) - - // Iterate through results - for _, hit := range searchResult.Hits.Hits { - // hit.Index contains the name of the index - - // Deserialize hit.Source into a Tweet (could also be just a map[string]interface{}). - var t Tweet - err := json.Unmarshal(*hit.Source, &t) - if err != nil { - // Deserialization failed - } - - // Work with tweet - fmt.Printf("Tweet by %s: %s\n", t.User, t.Message) - } - } else { - // No hits - fmt.Print("Found no tweets\n") - } -} - -func ExamplePutTemplateService() { - client, err := elastic.NewClient() - if err != nil { - panic(err) - } - - // Create search template - tmpl := `{"template":{"query":{"match":{"title":"{{query_string}}"}}}}` - - // Create template - resp, err := client.PutTemplate(). - Id("my-search-template"). // Name of the template - BodyString(tmpl). // Search template itself - Do() // Execute - if err != nil { - panic(err) - } - if resp.Created { - fmt.Println("search template created") - } -} - -func ExampleGetTemplateService() { - client, err := elastic.NewClient() - if err != nil { - panic(err) - } - - // Get template stored under "my-search-template" - resp, err := client.GetTemplate().Id("my-search-template").Do() - if err != nil { - panic(err) - } - fmt.Printf("search template is: %q\n", resp.Template) -} - -func ExampleDeleteTemplateService() { - client, err := elastic.NewClient() - if err != nil { - panic(err) - } - - // Delete template - resp, err := client.DeleteTemplate().Id("my-search-template").Do() - if err != nil { - panic(err) - } - if resp != nil && resp.Found { - fmt.Println("template deleted") - } -} - -func ExampleClusterHealthService() { - client, err := elastic.NewClient() - if err != nil { - panic(err) - } - - // Get cluster health - res, err := client.ClusterHealth().Index("twitter").Do() - if err != nil { - panic(err) - } - if res == nil { - panic(err) - } - fmt.Printf("Cluster status is %q\n", res.Status) -} - -func ExampleClusterHealthService_WaitForGreen() { - client, err := elastic.NewClient() - if err != nil { - panic(err) - } - - // Wait for status green - res, err := client.ClusterHealth().WaitForStatus("green").Timeout("15s").Do() - if err != nil { - panic(err) - } - if res.TimedOut { - fmt.Printf("time out waiting for cluster status %q\n", "green") - } else { - fmt.Printf("cluster status is %q\n", res.Status) - } -} - -func ExampleClusterStateService() { - client, err := elastic.NewClient() - if err != nil { - panic(err) - } - - // Get cluster state - res, err := client.ClusterState().Metric("version").Do() - if err != nil { - panic(err) - } - fmt.Printf("Cluster %q has version %d", res.ClusterName, res.Version) -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/exists_test.go b/vendor/gopkg.in/olivere/elastic.v2/exists_test.go deleted file mode 100644 index 80573a7..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/exists_test.go +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import "testing" - -func TestExists(t *testing.T) { - client := setupTestClientAndCreateIndexAndAddDocs(t) //, SetTraceLog(log.New(os.Stdout, "", 0))) - - exists, err := client.Exists().Index(testIndexName).Type("comment").Id("1").Parent("tweet").Do() - if err != nil { - t.Fatal(err) - } - if !exists { - t.Fatal("expected document to exist") - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/fetch_source_context.go b/vendor/gopkg.in/olivere/elastic.v2/fetch_source_context.go deleted file mode 100644 index 6c9b91b..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/fetch_source_context.go +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "net/url" - "strings" -) - -type FetchSourceContext struct { - fetchSource bool - transformSource bool - includes []string - excludes []string -} - -func NewFetchSourceContext(fetchSource bool) *FetchSourceContext { - return &FetchSourceContext{ - fetchSource: fetchSource, - includes: make([]string, 0), - excludes: make([]string, 0), - } -} - -func (fsc *FetchSourceContext) FetchSource() bool { - return fsc.fetchSource -} - -func (fsc *FetchSourceContext) SetFetchSource(fetchSource bool) { - fsc.fetchSource = fetchSource -} - -func (fsc *FetchSourceContext) Include(includes ...string) *FetchSourceContext { - fsc.includes = append(fsc.includes, includes...) - return fsc -} - -func (fsc *FetchSourceContext) Exclude(excludes ...string) *FetchSourceContext { - fsc.excludes = append(fsc.excludes, excludes...) - return fsc -} - -func (fsc *FetchSourceContext) TransformSource(transformSource bool) *FetchSourceContext { - fsc.transformSource = transformSource - return fsc -} - -func (fsc *FetchSourceContext) Source() interface{} { - if !fsc.fetchSource { - return false - } - return map[string]interface{}{ - "includes": fsc.includes, - "excludes": fsc.excludes, - } -} - -// Query returns the parameters in a form suitable for a URL query string. -func (fsc *FetchSourceContext) Query() url.Values { - params := url.Values{} - if !fsc.fetchSource { - params.Add("_source", "false") - return params - } - if len(fsc.includes) > 0 { - params.Add("_source_include", strings.Join(fsc.includes, ",")) - } - if len(fsc.excludes) > 0 { - params.Add("_source_exclude", strings.Join(fsc.excludes, ",")) - } - return params -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/field_stats.go b/vendor/gopkg.in/olivere/elastic.v2/field_stats.go deleted file mode 100644 index 18e930e..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/field_stats.go +++ /dev/null @@ -1,255 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "net/http" - "net/url" - "strings" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -const ( - FieldStatsClusterLevel = "cluster" - FieldStatsIndicesLevel = "indices" -) - -// FieldStatsService allows finding statistical properties of a field without executing a search, -// but looking up measurements that are natively available in the Lucene index. -// -// See https://www.elastic.co/guide/en/elasticsearch/reference/current/search-field-stats.html -// for details -type FieldStatsService struct { - client *Client - pretty bool - level string - index []string - allowNoIndices *bool - expandWildcards string - fields []string - ignoreUnavailable *bool - bodyJson interface{} - bodyString string -} - -// NewFieldStatsService creates a new FieldStatsService -func NewFieldStatsService(client *Client) *FieldStatsService { - return &FieldStatsService{ - client: client, - index: make([]string, 0), - fields: make([]string, 0), - } -} - -// Index is a list of index names; use `_all` or empty string to perform -// the operation on all indices. -func (s *FieldStatsService) Index(index ...string) *FieldStatsService { - s.index = append(s.index, index...) - return s -} - -// AllowNoIndices indicates whether to ignore if a wildcard indices expression -// resolves into no concrete indices. -// (This includes `_all` string or when no indices have been specified). -func (s *FieldStatsService) AllowNoIndices(allowNoIndices bool) *FieldStatsService { - s.allowNoIndices = &allowNoIndices - return s -} - -// ExpandWildcards indicates whether to expand wildcard expression to -// concrete indices that are open, closed or both. -func (s *FieldStatsService) ExpandWildcards(expandWildcards string) *FieldStatsService { - s.expandWildcards = expandWildcards - return s -} - -// Fields is a list of fields for to get field statistics -// for (min value, max value, and more). -func (s *FieldStatsService) Fields(fields ...string) *FieldStatsService { - s.fields = append(s.fields, fields...) - return s -} - -// IgnoreUnavailable is documented as: Whether specified concrete indices should be ignored when unavailable (missing or closed). -func (s *FieldStatsService) IgnoreUnavailable(ignoreUnavailable bool) *FieldStatsService { - s.ignoreUnavailable = &ignoreUnavailable - return s -} - -// Level sets if stats should be returned on a per index level or on a cluster wide level; -// should be one of 'cluster' or 'indices'; defaults to former -func (s *FieldStatsService) Level(level string) *FieldStatsService { - s.level = level - return s -} - -// ClusterLevel is a helper that sets Level to "cluster". -func (s *FieldStatsService) ClusterLevel() *FieldStatsService { - s.level = FieldStatsClusterLevel - return s -} - -// IndicesLevel is a helper that sets Level to "indices". -func (s *FieldStatsService) IndicesLevel() *FieldStatsService { - s.level = FieldStatsIndicesLevel - return s -} - -// Pretty indicates that the JSON response be indented and human readable. -func (s *FieldStatsService) Pretty(pretty bool) *FieldStatsService { - s.pretty = pretty - return s -} - -// BodyJson is documented as: Field json objects containing the name and optionally a range to filter out indices result, that have results outside the defined bounds. -func (s *FieldStatsService) BodyJson(body interface{}) *FieldStatsService { - s.bodyJson = body - return s -} - -// BodyString is documented as: Field json objects containing the name and optionally a range to filter out indices result, that have results outside the defined bounds. -func (s *FieldStatsService) BodyString(body string) *FieldStatsService { - s.bodyString = body - return s -} - -// buildURL builds the URL for the operation. -func (s *FieldStatsService) buildURL() (string, url.Values, error) { - // Build URL - var err error - var path string - if len(s.index) > 0 { - path, err = uritemplates.Expand("/{index}/_field_stats", map[string]string{ - "index": strings.Join(s.index, ","), - }) - } else { - path = "/_field_stats" - } - if err != nil { - return "", url.Values{}, err - } - - // Add query string parameters - params := url.Values{} - if s.allowNoIndices != nil { - params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) - } - if s.expandWildcards != "" { - params.Set("expand_wildcards", s.expandWildcards) - } - if len(s.fields) > 0 { - params.Set("fields", strings.Join(s.fields, ",")) - } - if s.ignoreUnavailable != nil { - params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) - } - if s.level != "" { - params.Set("level", s.level) - } - return path, params, nil -} - -// Validate checks if the operation is valid. -func (s *FieldStatsService) Validate() error { - var invalid []string - if s.level != "" && (s.level != FieldStatsIndicesLevel && s.level != FieldStatsClusterLevel) { - invalid = append(invalid, "Level") - } - if len(invalid) != 0 { - return fmt.Errorf("missing or invalid required fields: %v", invalid) - } - return nil -} - -// Do executes the operation. -func (s *FieldStatsService) Do() (*FieldStatsResponse, error) { - // Check pre-conditions - if err := s.Validate(); err != nil { - return nil, err - } - - // Get URL for request - path, params, err := s.buildURL() - if err != nil { - return nil, err - } - - // Setup HTTP request body - var body interface{} - if s.bodyJson != nil { - body = s.bodyJson - } else { - body = s.bodyString - } - - // Get HTTP response - res, err := s.client.PerformRequest("POST", path, params, body) - if err != nil { - return nil, err - } - - // TODO(oe): Is 404 really a valid response here? - if res.StatusCode == http.StatusNotFound { - return &FieldStatsResponse{make(map[string]IndexFieldStats)}, nil - } - - // Return operation response - ret := new(FieldStatsResponse) - if err := s.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -// -- Request -- - -// FieldStatsRequest can be used to set up the body to be used in the -// Field Stats API. -type FieldStatsRequest struct { - Fields []string `json:"fields"` - IndexConstraints map[string]*FieldStatsConstraints `json:"index_constraints,omitempty"` -} - -// FieldStatsConstraints is a constraint on a field. -type FieldStatsConstraints struct { - Min *FieldStatsComparison `json:"min_value,omitempty"` - Max *FieldStatsComparison `json:"max_value,omitempty"` -} - -// FieldStatsComparison contain all comparison operations that can be used -// in FieldStatsConstraints. -type FieldStatsComparison struct { - Lte interface{} `json:"lte,omitempty"` - Lt interface{} `json:"lt,omitempty"` - Gte interface{} `json:"gte,omitempty"` - Gt interface{} `json:"gt,omitempty"` -} - -// -- Response -- - -// FieldStatsResponse is the response body content -type FieldStatsResponse struct { - Indices map[string]IndexFieldStats `json:"indices,omitempty"` -} - -// IndexFieldStats contains field stats for an index -type IndexFieldStats struct { - Fields map[string]FieldStats `json:"fields,omitempty"` -} - -// FieldStats contains stats of an individual field -type FieldStats struct { - MaxDoc int64 `json:"max_doc"` - DocCount int64 `json:"doc_count"` - Density int64 `json:"density"` - SumDocFrequeny int64 `json:"sum_doc_freq"` - SumTotalTermFrequency int64 `json:"sum_total_term_freq"` - MinValue interface{} `json:"min_value"` - MinValueAsString string `json:"min_value_as_string"` - MaxValue interface{} `json:"max_value"` - MaxValueAsString string `json:"max_value_as_string"` -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/field_stats_test.go b/vendor/gopkg.in/olivere/elastic.v2/field_stats_test.go deleted file mode 100644 index cd75d19..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/field_stats_test.go +++ /dev/null @@ -1,267 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "net/url" - "reflect" - "sort" - "testing" -) - -func TestFieldStatsURLs(t *testing.T) { - tests := []struct { - Service *FieldStatsService - ExpectedPath string - ExpectedParams url.Values - }{ - { - Service: &FieldStatsService{}, - ExpectedPath: "/_field_stats", - ExpectedParams: url.Values{}, - }, - { - Service: &FieldStatsService{ - level: FieldStatsClusterLevel, - }, - ExpectedPath: "/_field_stats", - ExpectedParams: url.Values{"level": []string{FieldStatsClusterLevel}}, - }, - { - Service: &FieldStatsService{ - level: FieldStatsIndicesLevel, - }, - ExpectedPath: "/_field_stats", - ExpectedParams: url.Values{"level": []string{FieldStatsIndicesLevel}}, - }, - { - Service: &FieldStatsService{ - level: FieldStatsClusterLevel, - index: []string{"index1"}, - }, - ExpectedPath: "/index1/_field_stats", - ExpectedParams: url.Values{"level": []string{FieldStatsClusterLevel}}, - }, - { - Service: &FieldStatsService{ - level: FieldStatsIndicesLevel, - index: []string{"index1", "index2"}, - }, - ExpectedPath: "/index1%2Cindex2/_field_stats", - ExpectedParams: url.Values{"level": []string{FieldStatsIndicesLevel}}, - }, - { - Service: &FieldStatsService{ - level: FieldStatsIndicesLevel, - index: []string{"index_*"}, - }, - ExpectedPath: "/index_%2A/_field_stats", - ExpectedParams: url.Values{"level": []string{FieldStatsIndicesLevel}}, - }, - } - - for _, test := range tests { - gotPath, gotParams, err := test.Service.buildURL() - if err != nil { - t.Fatalf("expected no error; got: %v", err) - } - if gotPath != test.ExpectedPath { - t.Errorf("expected URL path = %q; got: %q", test.ExpectedPath, gotPath) - } - if gotParams.Encode() != test.ExpectedParams.Encode() { - t.Errorf("expected URL params = %v; got: %v", test.ExpectedParams, gotParams) - } - } -} - -func TestFieldStatsValidate(t *testing.T) { - tests := []struct { - Service *FieldStatsService - Valid bool - }{ - { - Service: &FieldStatsService{}, - Valid: true, - }, - { - Service: &FieldStatsService{ - fields: []string{"field"}, - }, - Valid: true, - }, - { - Service: &FieldStatsService{ - bodyJson: &FieldStatsRequest{ - Fields: []string{"field"}, - }, - }, - Valid: true, - }, - { - Service: &FieldStatsService{ - level: FieldStatsClusterLevel, - bodyJson: &FieldStatsRequest{ - Fields: []string{"field"}, - }, - }, - Valid: true, - }, - { - Service: &FieldStatsService{ - level: FieldStatsIndicesLevel, - bodyJson: &FieldStatsRequest{ - Fields: []string{"field"}, - }, - }, - Valid: true, - }, - { - Service: &FieldStatsService{ - level: "random", - }, - Valid: false, - }, - } - - for _, test := range tests { - err := test.Service.Validate() - isValid := err == nil - if isValid != test.Valid { - t.Errorf("expected validity to be %v, got %v", test.Valid, isValid) - } - } -} - -func TestFieldStatsRequestSerialize(t *testing.T) { - req := &FieldStatsRequest{ - Fields: []string{"creation_date", "answer_count"}, - IndexConstraints: map[string]*FieldStatsConstraints{ - "creation_date": &FieldStatsConstraints{ - Min: &FieldStatsComparison{Gte: "2014-01-01T00:00:00.000Z"}, - Max: &FieldStatsComparison{Lt: "2015-01-01T10:00:00.000Z"}, - }, - }, - } - data, err := json.Marshal(req) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"fields":["creation_date","answer_count"],"index_constraints":{"creation_date":{"min_value":{"gte":"2014-01-01T00:00:00.000Z"},"max_value":{"lt":"2015-01-01T10:00:00.000Z"}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestFieldStatsRequestDeserialize(t *testing.T) { - body := `{ - "fields" : ["creation_date", "answer_count"], - "index_constraints" : { - "creation_date" : { - "min_value" : { - "gte" : "2014-01-01T00:00:00.000Z" - }, - "max_value" : { - "lt" : "2015-01-01T10:00:00.000Z" - } - } - } - }` - - var request FieldStatsRequest - if err := json.Unmarshal([]byte(body), &request); err != nil { - t.Errorf("unexpected error during unmarshalling: %v", err) - } - - sort.Sort(lexicographically{request.Fields}) - - expectedFields := []string{"answer_count", "creation_date"} - if !reflect.DeepEqual(request.Fields, expectedFields) { - t.Errorf("expected fields to be %v, got %v", expectedFields, request.Fields) - } - - constraints, ok := request.IndexConstraints["creation_date"] - if !ok { - t.Errorf("expected field creation_date, didn't find it!") - } - if constraints.Min.Lt != nil { - t.Errorf("expected min value less than constraint to be empty, got %v", constraints.Min.Lt) - } - if constraints.Min.Gte != "2014-01-01T00:00:00.000Z" { - t.Errorf("expected min value >= %v, found %v", "2014-01-01T00:00:00.000Z", constraints.Min.Gte) - } - if constraints.Max.Lt != "2015-01-01T10:00:00.000Z" { - t.Errorf("expected max value < %v, found %v", "2015-01-01T10:00:00.000Z", constraints.Max.Lt) - } -} - -func TestFieldStatsResponseUnmarshalling(t *testing.T) { - clusterStats := `{ - "_shards": { - "total": 1, - "successful": 1, - "failed": 0 - }, - "indices": { - "_all": { - "fields": { - "creation_date": { - "max_doc": 1326564, - "doc_count": 564633, - "density": 42, - "sum_doc_freq": 2258532, - "sum_total_term_freq": -1, - "min_value_as_string": "2008-08-01T16:37:51.513Z", - "max_value_as_string": "2013-06-02T03:23:11.593Z" - }, - "answer_count": { - "max_doc": 1326564, - "doc_count": 139885, - "density": 10, - "sum_doc_freq": 559540, - "sum_total_term_freq": -1, - "min_value_as_string": "0", - "max_value_as_string": "160" - } - } - } - } - }` - - var response FieldStatsResponse - if err := json.Unmarshal([]byte(clusterStats), &response); err != nil { - t.Errorf("unexpected error during unmarshalling: %v", err) - } - - stats, ok := response.Indices["_all"] - if !ok { - t.Errorf("expected _all to be in the indices map, didn't find it") - } - - fieldStats, ok := stats.Fields["creation_date"] - if !ok { - t.Errorf("expected creation_date to be in the fields map, didn't find it") - } - if fieldStats.MinValueAsString != "2008-08-01T16:37:51.513Z" { - t.Errorf("expected creation_date min value to be %v, got %v", "2008-08-01T16:37:51.513Z", fieldStats.MinValueAsString) - } -} - -type lexicographically struct { - strings []string -} - -func (l lexicographically) Len() int { - return len(l.strings) -} - -func (l lexicographically) Less(i, j int) bool { - return l.strings[i] < l.strings[j] -} - -func (l lexicographically) Swap(i, j int) { - l.strings[i], l.strings[j] = l.strings[j], l.strings[i] -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/filter.go b/vendor/gopkg.in/olivere/elastic.v2/filter.go deleted file mode 100644 index ba1f012..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/filter.go +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -type Filter interface { - Source() interface{} -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/flush.go b/vendor/gopkg.in/olivere/elastic.v2/flush.go deleted file mode 100644 index 94773f2..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/flush.go +++ /dev/null @@ -1,166 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "net/url" - "strings" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -// Flush allows to flush one or more indices. The flush process of an index -// basically frees memory from the index by flushing data to the index -// storage and clearing the internal transaction log. -// -// See http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-flush.html -// for details. -type FlushService struct { - client *Client - - indices []string - force *bool - full *bool - waitIfOngoing *bool - ignoreUnavailable *bool - allowNoIndices *bool - expandWildcards string -} - -func NewFlushService(client *Client) *FlushService { - builder := &FlushService{ - client: client, - } - return builder -} - -func (s *FlushService) Index(index string) *FlushService { - if s.indices == nil { - s.indices = make([]string, 0) - } - s.indices = append(s.indices, index) - return s -} - -func (s *FlushService) Indices(indices ...string) *FlushService { - if s.indices == nil { - s.indices = make([]string, 0) - } - s.indices = append(s.indices, indices...) - return s -} - -// Force specifies whether to force a flush even if it is not necessary. -func (s *FlushService) Force(force bool) *FlushService { - s.force = &force - return s -} - -// Full, when set to true, creates a new index writer for the index and -// refreshes all settings related to the index. -func (s *FlushService) Full(full bool) *FlushService { - s.full = &full - return s -} - -// WaitIfOngoing will block until the flush can be executed (if set to true) -// if another flush operation is already executing. The default is false -// and will cause an exception to be thrown on the shard level if another -// flush operation is already running. [1.4.0.Beta1] -func (s *FlushService) WaitIfOngoing(wait bool) *FlushService { - s.waitIfOngoing = &wait - return s -} - -// IgnoreUnavailable specifies whether concrete indices should be ignored -// when unavailable (e.g. missing or closed). -func (s *FlushService) IgnoreUnavailable(ignoreUnavailable bool) *FlushService { - s.ignoreUnavailable = &ignoreUnavailable - return s -} - -// AllowNoIndices specifies whether to ignore if a wildcard expression -// yields no indices. This includes the _all index or when no indices -// have been specified. -func (s *FlushService) AllowNoIndices(allowNoIndices bool) *FlushService { - s.allowNoIndices = &allowNoIndices - return s -} - -// ExpandWildcards specifies whether to expand wildcards to concrete indices -// that are open, closed, or both. Use one of "open", "closed", "none", or "all". -func (s *FlushService) ExpandWildcards(expandWildcards string) *FlushService { - s.expandWildcards = expandWildcards - return s -} - -// Do executes the service. -func (s *FlushService) Do() (*FlushResult, error) { - // Build url - path := "/" - - // Indices part - if len(s.indices) > 0 { - indexPart := make([]string, 0) - for _, index := range s.indices { - index, err := uritemplates.Expand("{index}", map[string]string{ - "index": index, - }) - if err != nil { - return nil, err - } - indexPart = append(indexPart, index) - } - path += strings.Join(indexPart, ",") + "/" - } - path += "_flush" - - // Parameters - params := make(url.Values) - if s.force != nil { - params.Set("force", fmt.Sprintf("%v", *s.force)) - } - if s.full != nil { - params.Set("full", fmt.Sprintf("%v", *s.full)) - } - if s.waitIfOngoing != nil { - params.Set("wait_if_ongoing", fmt.Sprintf("%v", *s.waitIfOngoing)) - } - if s.ignoreUnavailable != nil { - params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) - } - if s.allowNoIndices != nil { - params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) - } - if s.expandWildcards != "" { - params.Set("expand_wildcards", s.expandWildcards) - } - - // Get response - res, err := s.client.PerformRequest("POST", path, params, nil) - if err != nil { - return nil, err - } - - // Return result - ret := new(FlushResult) - if err := s.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -// -- Result of a flush request. - -type shardsInfo struct { - Total int `json:"total"` - Successful int `json:"successful"` - Failed int `json:"failed"` -} - -type FlushResult struct { - Shards shardsInfo `json:"_shards"` -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/flush_test.go b/vendor/gopkg.in/olivere/elastic.v2/flush_test.go deleted file mode 100644 index 515ff3a..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/flush_test.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "testing" -) - -func TestFlush(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - // Flush all indices - res, err := client.Flush().Do() - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Errorf("expected res to be != nil; got: %v", res) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/get.go b/vendor/gopkg.in/olivere/elastic.v2/get.go deleted file mode 100644 index 69f1e3d..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/get.go +++ /dev/null @@ -1,223 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "fmt" - "net/url" - "strings" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -type GetService struct { - client *Client - index string - typ string - id string - routing string - preference string - fields []string - refresh *bool - realtime *bool - fsc *FetchSourceContext - versionType string - version *int64 - ignoreErrorsOnGeneratedFields *bool -} - -func NewGetService(client *Client) *GetService { - builder := &GetService{ - client: client, - typ: "_all", - } - return builder -} - -func (b *GetService) String() string { - return fmt.Sprintf("[%v][%v][%v]: routing [%v]", - b.index, - b.typ, - b.id, - b.routing) -} - -func (b *GetService) Index(index string) *GetService { - b.index = index - return b -} - -func (b *GetService) Type(typ string) *GetService { - b.typ = typ - return b -} - -func (b *GetService) Id(id string) *GetService { - b.id = id - return b -} - -func (b *GetService) Parent(parent string) *GetService { - if b.routing == "" { - b.routing = parent - } - return b -} - -func (b *GetService) Routing(routing string) *GetService { - b.routing = routing - return b -} - -func (b *GetService) Preference(preference string) *GetService { - b.preference = preference - return b -} - -func (b *GetService) Fields(fields ...string) *GetService { - if b.fields == nil { - b.fields = make([]string, 0) - } - b.fields = append(b.fields, fields...) - return b -} - -func (s *GetService) FetchSource(fetchSource bool) *GetService { - if s.fsc == nil { - s.fsc = NewFetchSourceContext(fetchSource) - } else { - s.fsc.SetFetchSource(fetchSource) - } - return s -} - -func (s *GetService) FetchSourceContext(fetchSourceContext *FetchSourceContext) *GetService { - s.fsc = fetchSourceContext - return s -} - -func (b *GetService) Refresh(refresh bool) *GetService { - b.refresh = &refresh - return b -} - -func (b *GetService) Realtime(realtime bool) *GetService { - b.realtime = &realtime - return b -} - -func (b *GetService) VersionType(versionType string) *GetService { - b.versionType = versionType - return b -} - -func (b *GetService) Version(version int64) *GetService { - b.version = &version - return b -} - -func (b *GetService) IgnoreErrorsOnGeneratedFields(ignore bool) *GetService { - b.ignoreErrorsOnGeneratedFields = &ignore - return b -} - -// Validate checks if the operation is valid. -func (s *GetService) Validate() error { - var invalid []string - if s.id == "" { - invalid = append(invalid, "Id") - } - if s.index == "" { - invalid = append(invalid, "Index") - } - if s.typ == "" { - invalid = append(invalid, "Type") - } - if len(invalid) > 0 { - return fmt.Errorf("missing required fields: %v", invalid) - } - return nil -} - -func (b *GetService) Do() (*GetResult, error) { - // Check pre-conditions - if err := b.Validate(); err != nil { - return nil, err - } - - // Build url - path, err := uritemplates.Expand("/{index}/{type}/{id}", map[string]string{ - "index": b.index, - "type": b.typ, - "id": b.id, - }) - if err != nil { - return nil, err - } - - params := make(url.Values) - if b.realtime != nil { - params.Add("realtime", fmt.Sprintf("%v", *b.realtime)) - } - if len(b.fields) > 0 { - params.Add("fields", strings.Join(b.fields, ",")) - } - if b.routing != "" { - params.Add("routing", b.routing) - } - if b.preference != "" { - params.Add("preference", b.preference) - } - if b.refresh != nil { - params.Add("refresh", fmt.Sprintf("%v", *b.refresh)) - } - if b.realtime != nil { - params.Add("realtime", fmt.Sprintf("%v", *b.realtime)) - } - if b.ignoreErrorsOnGeneratedFields != nil { - params.Add("ignore_errors_on_generated_fields", fmt.Sprintf("%v", *b.ignoreErrorsOnGeneratedFields)) - } - if len(b.fields) > 0 { - params.Add("_fields", strings.Join(b.fields, ",")) - } - if b.version != nil { - params.Add("version", fmt.Sprintf("%d", *b.version)) - } - if b.versionType != "" { - params.Add("version_type", b.versionType) - } - if b.fsc != nil { - for k, values := range b.fsc.Query() { - params.Add(k, strings.Join(values, ",")) - } - } - - // Get response - res, err := b.client.PerformRequest("GET", path, params, nil) - if err != nil { - return nil, err - } - - // Return result - ret := new(GetResult) - if err := b.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -// -- Result of a get request. - -type GetResult struct { - Index string `json:"_index"` - Type string `json:"_type"` - Id string `json:"_id"` - Version int64 `json:"_version,omitempty"` - Source *json.RawMessage `json:"_source,omitempty"` - Found bool `json:"found,omitempty"` - Fields map[string]interface{} `json:"fields,omitempty"` - Error string `json:"error,omitempty"` // used only in MultiGet -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/get_mapping.go b/vendor/gopkg.in/olivere/elastic.v2/get_mapping.go deleted file mode 100644 index ad006db..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/get_mapping.go +++ /dev/null @@ -1,162 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "net/url" - "strings" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -// GetMappingService retrieves the mapping definitions for an index or -// index/type. -// -// See https://www.elastic.co/guide/en/elasticsearch/reference/1.7/indices-get-mapping.html -// for details. -type GetMappingService struct { - client *Client - pretty bool - index []string - typ []string - local *bool - ignoreUnavailable *bool - allowNoIndices *bool - expandWildcards string -} - -// NewGetMappingService creates a new GetMappingService. -func NewGetMappingService(client *Client) *GetMappingService { - return &GetMappingService{ - client: client, - index: make([]string, 0), - typ: make([]string, 0), - } -} - -// Index is a list of index names. -func (s *GetMappingService) Index(index ...string) *GetMappingService { - s.index = append(s.index, index...) - return s -} - -// Type is a list of document types. -func (s *GetMappingService) Type(typ ...string) *GetMappingService { - s.typ = append(s.typ, typ...) - return s -} - -// AllowNoIndices indicates whether to ignore if a wildcard indices -// expression resolves into no concrete indices. -// This includes `_all` string or when no indices have been specified. -func (s *GetMappingService) AllowNoIndices(allowNoIndices bool) *GetMappingService { - s.allowNoIndices = &allowNoIndices - return s -} - -// ExpandWildcards indicates whether to expand wildcard expression to -// concrete indices that are open, closed or both.. -func (s *GetMappingService) ExpandWildcards(expandWildcards string) *GetMappingService { - s.expandWildcards = expandWildcards - return s -} - -// Local indicates whether to return local information, do not retrieve -// the state from master node (default: false). -func (s *GetMappingService) Local(local bool) *GetMappingService { - s.local = &local - return s -} - -// IgnoreUnavailable indicates whether specified concrete indices should be -// ignored when unavailable (missing or closed). -func (s *GetMappingService) IgnoreUnavailable(ignoreUnavailable bool) *GetMappingService { - s.ignoreUnavailable = &ignoreUnavailable - return s -} - -// Pretty indicates that the JSON response be indented and human readable. -func (s *GetMappingService) Pretty(pretty bool) *GetMappingService { - s.pretty = pretty - return s -} - -// buildURL builds the URL for the operation. -func (s *GetMappingService) buildURL() (string, url.Values, error) { - var index, typ []string - - if len(s.index) > 0 { - index = s.index - } else { - index = []string{"_all"} - } - - if len(s.typ) > 0 { - typ = s.typ - } else { - typ = []string{"_all"} - } - - // Build URL - path, err := uritemplates.Expand("/{index}/_mapping/{type}", map[string]string{ - "index": strings.Join(index, ","), - "type": strings.Join(typ, ","), - }) - if err != nil { - return "", url.Values{}, err - } - - // Add query string parameters - params := url.Values{} - if s.pretty { - params.Set("pretty", "1") - } - if s.ignoreUnavailable != nil { - params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) - } - if s.allowNoIndices != nil { - params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) - } - if s.expandWildcards != "" { - params.Set("expand_wildcards", s.expandWildcards) - } - if s.local != nil { - params.Set("local", fmt.Sprintf("%v", *s.local)) - } - return path, params, nil -} - -// Validate checks if the operation is valid. -func (s *GetMappingService) Validate() error { - return nil -} - -// Do executes the operation. -func (s *GetMappingService) Do() (map[string]interface{}, error) { - // Check pre-conditions - if err := s.Validate(); err != nil { - return nil, err - } - - // Get URL for request - path, params, err := s.buildURL() - if err != nil { - return nil, err - } - - // Get HTTP response - res, err := s.client.PerformRequest("GET", path, params, nil) - if err != nil { - return nil, err - } - - // Return operation response - var ret map[string]interface{} - if err := s.client.decoder.Decode(res.Body, &ret); err != nil { - return nil, err - } - return ret, nil -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/get_mapping_test.go b/vendor/gopkg.in/olivere/elastic.v2/get_mapping_test.go deleted file mode 100644 index 1cdbd0b..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/get_mapping_test.go +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "testing" -) - -func TestGetMappingURL(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tests := []struct { - Indices []string - Types []string - Expected string - }{ - { - []string{}, - []string{}, - "/_all/_mapping/_all", - }, - { - []string{}, - []string{"tweet"}, - "/_all/_mapping/tweet", - }, - { - []string{"twitter"}, - []string{"tweet"}, - "/twitter/_mapping/tweet", - }, - { - []string{"store-1", "store-2"}, - []string{"tweet", "user"}, - "/store-1%2Cstore-2/_mapping/tweet%2Cuser", - }, - } - - for _, test := range tests { - path, _, err := client.GetMapping().Index(test.Indices...).Type(test.Types...).buildURL() - if err != nil { - t.Fatal(err) - } - if path != test.Expected { - t.Errorf("expected %q; got: %q", test.Expected, path) - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/get_template.go b/vendor/gopkg.in/olivere/elastic.v2/get_template.go deleted file mode 100644 index 0ad6271..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/get_template.go +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "net/url" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -// GetTemplateService reads a search template. -// It is documented at http://www.elasticsearch.org/guide/en/elasticsearch/reference/master/search-template.html. -type GetTemplateService struct { - client *Client - pretty bool - id string - version interface{} - versionType string -} - -// NewGetTemplateService creates a new GetTemplateService. -func NewGetTemplateService(client *Client) *GetTemplateService { - return &GetTemplateService{ - client: client, - } -} - -// Id is the template ID. -func (s *GetTemplateService) Id(id string) *GetTemplateService { - s.id = id - return s -} - -// Version is an explicit version number for concurrency control. -func (s *GetTemplateService) Version(version interface{}) *GetTemplateService { - s.version = version - return s -} - -// VersionType is a specific version type. -func (s *GetTemplateService) VersionType(versionType string) *GetTemplateService { - s.versionType = versionType - return s -} - -// buildURL builds the URL for the operation. -func (s *GetTemplateService) buildURL() (string, url.Values, error) { - // Build URL - path, err := uritemplates.Expand("/_search/template/{id}", map[string]string{ - "id": s.id, - }) - if err != nil { - return "", url.Values{}, err - } - - // Add query string parameters - params := url.Values{} - if s.version != nil { - params.Set("version", fmt.Sprintf("%v", s.version)) - } - if s.versionType != "" { - params.Set("version_type", s.versionType) - } - - return path, params, nil -} - -// Validate checks if the operation is valid. -func (s *GetTemplateService) Validate() error { - var invalid []string - if s.id == "" { - invalid = append(invalid, "Id") - } - if len(invalid) > 0 { - return fmt.Errorf("missing required fields: %v", invalid) - } - return nil -} - -// Do executes the operation and returns the template. -func (s *GetTemplateService) Do() (*GetTemplateResponse, error) { - // Check pre-conditions - if err := s.Validate(); err != nil { - return nil, err - } - - // Get URL for request - path, params, err := s.buildURL() - if err != nil { - return nil, err - } - - // Get HTTP response - res, err := s.client.PerformRequest("GET", path, params, nil) - if err != nil { - return nil, err - } - - // Return result - ret := new(GetTemplateResponse) - if err := s.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -type GetTemplateResponse struct { - Template string `json:"template"` -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/get_template_test.go b/vendor/gopkg.in/olivere/elastic.v2/get_template_test.go deleted file mode 100644 index 00aea68..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/get_template_test.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "testing" -) - -func TestGetPutDeleteTemplate(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - // This is a search template, not an index template! - tmpl := `{ - "template": { - "query" : { "term" : { "{{my_field}}" : "{{my_value}}" } }, - "size" : "{{my_size}}" - }, - "params":{ - "my_field" : "user", - "my_value" : "olivere", - "my_size" : 5 - } -}` - putres, err := client.PutTemplate().Id("elastic-template").BodyString(tmpl).Do() - if err != nil { - t.Fatalf("expected no error; got: %v", err) - } - if putres == nil { - t.Fatalf("expected response; got: %v", putres) - } - if !putres.Created { - t.Fatalf("expected template to be created; got: %v", putres.Created) - } - - // Always delete template - defer client.DeleteTemplate().Id("elastic-template").Do() - - // Get template - getres, err := client.GetTemplate().Id("elastic-template").Do() - if err != nil { - t.Fatalf("expected no error; got: %v", err) - } - if getres == nil { - t.Fatalf("expected response; got: %v", getres) - } - if getres.Template == "" { - t.Errorf("expected template %q; got: %q", tmpl, getres.Template) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/get_test.go b/vendor/gopkg.in/olivere/elastic.v2/get_test.go deleted file mode 100644 index 64f5444..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/get_test.go +++ /dev/null @@ -1,168 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestGet(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - // Get document 1 - res, err := client.Get().Index(testIndexName).Type("tweet").Id("1").Do() - if err != nil { - t.Fatal(err) - } - if res.Found != true { - t.Errorf("expected Found = true; got %v", res.Found) - } - if res.Source == nil { - t.Errorf("expected Source != nil; got %v", res.Source) - } - - // Get non existent document 99 - res, err = client.Get().Index(testIndexName).Type("tweet").Id("99").Do() - if err != nil { - t.Fatal(err) - } - if res.Found != false { - t.Errorf("expected Found = false; got %v", res.Found) - } - if res.Source != nil { - t.Errorf("expected Source == nil; got %v", res.Source) - } -} - -func TestGetWithSourceFiltering(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - // Get document 1, without source - res, err := client.Get().Index(testIndexName).Type("tweet").Id("1").FetchSource(false).Do() - if err != nil { - t.Fatal(err) - } - if res.Found != true { - t.Errorf("expected Found = true; got %v", res.Found) - } - if res.Source != nil { - t.Errorf("expected Source == nil; got %v", res.Source) - } - - // Get document 1, exclude Message field - fsc := NewFetchSourceContext(true).Exclude("message") - res, err = client.Get().Index(testIndexName).Type("tweet").Id("1").FetchSourceContext(fsc).Do() - if err != nil { - t.Fatal(err) - } - if res.Found != true { - t.Errorf("expected Found = true; got %v", res.Found) - } - if res.Source == nil { - t.Errorf("expected Source != nil; got %v", res.Source) - } - var tw tweet - err = json.Unmarshal(*res.Source, &tw) - if err != nil { - t.Fatal(err) - } - if tw.User != "olivere" { - t.Errorf("expected user %q; got: %q", "olivere", tw.User) - } - if tw.Message != "" { - t.Errorf("expected message %q; got: %q", "", tw.Message) - } -} - -func TestGetWithFields(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").Timestamp("12345").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - // Get document 1, specifying fields - res, err := client.Get().Index(testIndexName).Type("tweet").Id("1").Fields("message", "_timestamp").Do() - if err != nil { - t.Fatal(err) - } - if res.Found != true { - t.Errorf("expected Found = true; got %v", res.Found) - } - - timestamp, ok := res.Fields["_timestamp"].(float64) - if !ok { - t.Fatalf("Cannot retrieve \"_timestamp\" field from document") - } - if timestamp != 12345 { - t.Fatalf("Expected timestamp %v; got %v", 12345, timestamp) - } - - messageField, ok := res.Fields["message"] - if !ok { - t.Fatalf("Cannot retrieve \"message\" field from document") - } - - // Depending on the version of elasticsearch the message field will be returned - // as a string or a slice of strings. This test works in both cases. - - messageString, ok := messageField.(string) - if !ok { - messageArray, ok := messageField.([]interface{}) - if ok { - messageString, ok = messageArray[0].(string) - } - if !ok { - t.Fatalf("\"message\" field should be a string or a slice of strings") - } - } - - if messageString != tweet1.Message { - t.Errorf("Expected message %s; got %s", tweet1.Message, messageString) - } -} - -func TestGetFailsWithMissingParams(t *testing.T) { - // Mitigate against http://stackoverflow.com/questions/27491738/elasticsearch-go-index-failures-no-feature-for-name - client := setupTestClientAndCreateIndex(t) - if _, err := client.Get().Do(); err == nil { - t.Fatal("expected Get to fail") - } - if _, err := client.Get().Index(testIndexName).Do(); err == nil { - t.Fatal("expected Get to fail") - } - if _, err := client.Get().Type("tweet").Do(); err == nil { - t.Fatal("expected Get to fail") - } - if _, err := client.Get().Id("1").Do(); err == nil { - t.Fatal("expected Get to fail") - } - if _, err := client.Get().Index(testIndexName).Type("tweet").Do(); err == nil { - t.Fatal("expected Get to fail") - } - /* - if _, err := client.Get().Index(testIndexName).Id("1").Do(); err == nil { - t.Fatal("expected Get to fail") - } - */ - if _, err := client.Get().Type("tweet").Id("1").Do(); err == nil { - t.Fatal("expected Get to fail") - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/highlight_test.go b/vendor/gopkg.in/olivere/elastic.v2/highlight_test.go deleted file mode 100644 index 9538172..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/highlight_test.go +++ /dev/null @@ -1,168 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - _ "net/http" - "testing" -) - -func TestHighlighterField(t *testing.T) { - field := NewHighlighterField("grade") - data, err := json.Marshal(field.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestHighlighterFieldWithOptions(t *testing.T) { - field := NewHighlighterField("grade").FragmentSize(2).NumOfFragments(1) - data, err := json.Marshal(field.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"fragment_size":2,"number_of_fragments":1}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestHighlightWithStringField(t *testing.T) { - builder := NewHighlight().Field("grade") - data, err := json.Marshal(builder.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"fields":{"grade":{}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestHighlightWithFields(t *testing.T) { - gradeField := NewHighlighterField("grade") - builder := NewHighlight().Fields(gradeField) - data, err := json.Marshal(builder.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"fields":{"grade":{}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestHighlightWithMultipleFields(t *testing.T) { - gradeField := NewHighlighterField("grade") - colorField := NewHighlighterField("color") - builder := NewHighlight().Fields(gradeField, colorField) - data, err := json.Marshal(builder.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"fields":{"color":{},"grade":{}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestHighlighterWithExplicitFieldOrder(t *testing.T) { - gradeField := NewHighlighterField("grade").FragmentSize(2) - colorField := NewHighlighterField("color").FragmentSize(2).NumOfFragments(1) - builder := NewHighlight().Fields(gradeField, colorField).UseExplicitFieldOrder(true) - data, err := json.Marshal(builder.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"fields":[{"grade":{"fragment_size":2}},{"color":{"fragment_size":2,"number_of_fragments":1}}]}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestHighlightWithTermQuery(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun to do."} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Specify highlighter - hl := NewHighlight() - hl = hl.Fields(NewHighlighterField("message")) - hl = hl.PreTags("").PostTags("") - - // Match all should return all documents - query := NewPrefixQuery("message", "golang") - searchResult, err := client.Search(). - Index(testIndexName). - Highlight(hl). - Query(&query). - Do() - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Fatalf("expected SearchResult.Hits != nil; got nil") - } - if searchResult.Hits.TotalHits != 1 { - t.Fatalf("expected SearchResult.Hits.TotalHits = %d; got %d", 1, searchResult.Hits.TotalHits) - } - if len(searchResult.Hits.Hits) != 1 { - t.Fatalf("expected len(SearchResult.Hits.Hits) = %d; got %d", 1, len(searchResult.Hits.Hits)) - } - - hit := searchResult.Hits.Hits[0] - var tw tweet - if err := json.Unmarshal(*hit.Source, &tw); err != nil { - t.Fatal(err) - } - if hit.Highlight == nil || len(hit.Highlight) == 0 { - t.Fatal("expected hit to have a highlight; got nil") - } - if hl, found := hit.Highlight["message"]; found { - if len(hl) != 1 { - t.Fatalf("expected to have one highlight for field \"message\"; got %d", len(hl)) - } - expected := "Welcome to Golang and Elasticsearch." - if hl[0] != expected { - t.Errorf("expected to have highlight \"%s\"; got \"%s\"", expected, hl[0]) - } - } else { - t.Fatal("expected to have a highlight on field \"message\"; got none") - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/index.go b/vendor/gopkg.in/olivere/elastic.v2/index.go deleted file mode 100644 index aab47e8..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/index.go +++ /dev/null @@ -1,216 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "net/url" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -// IndexResult is the result of indexing a document in Elasticsearch. -type IndexResult struct { - Index string `json:"_index"` - Type string `json:"_type"` - Id string `json:"_id"` - Version int `json:"_version"` - Created bool `json:"created"` -} - -// IndexService adds documents to Elasticsearch. -type IndexService struct { - client *Client - index string - _type string - id string - routing string - parent string - opType string - refresh *bool - version *int64 - versionType string - timestamp string - ttl string - timeout string - bodyString string - bodyJson interface{} - pretty bool -} - -func NewIndexService(client *Client) *IndexService { - builder := &IndexService{ - client: client, - } - return builder -} - -func (b *IndexService) Index(name string) *IndexService { - b.index = name - return b -} - -func (b *IndexService) Type(_type string) *IndexService { - b._type = _type - return b -} - -func (b *IndexService) Id(id string) *IndexService { - b.id = id - return b -} - -func (b *IndexService) Routing(routing string) *IndexService { - b.routing = routing - return b -} - -func (b *IndexService) Parent(parent string) *IndexService { - b.parent = parent - return b -} - -// OpType is either "create" or "index" (the default). -func (b *IndexService) OpType(opType string) *IndexService { - b.opType = opType - return b -} - -func (b *IndexService) Refresh(refresh bool) *IndexService { - b.refresh = &refresh - return b -} - -func (b *IndexService) Version(version int64) *IndexService { - b.version = &version - return b -} - -// VersionType is either "internal" (default), "external", -// "external_gt", "external_gte", or "force". -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-index_.html#_version_types -// for details. -func (b *IndexService) VersionType(versionType string) *IndexService { - b.versionType = versionType - return b -} - -func (b *IndexService) Timestamp(timestamp string) *IndexService { - b.timestamp = timestamp - return b -} - -func (b *IndexService) TTL(ttl string) *IndexService { - b.ttl = ttl - return b -} - -func (b *IndexService) Timeout(timeout string) *IndexService { - b.timeout = timeout - return b -} - -func (b *IndexService) BodyString(body string) *IndexService { - b.bodyString = body - return b -} - -func (b *IndexService) BodyJson(json interface{}) *IndexService { - b.bodyJson = json - return b -} - -func (b *IndexService) Pretty(pretty bool) *IndexService { - b.pretty = pretty - return b -} - -func (b *IndexService) Do() (*IndexResult, error) { - // Build url - var path, method string - if b.id != "" { - // Create document with manual id - method = "PUT" - path = "/{index}/{type}/{id}" - } else { - // Automatic ID generation - // See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-index_.html#index-creation - method = "POST" - path = "/{index}/{type}/" - } - path, err := uritemplates.Expand(path, map[string]string{ - "index": b.index, - "type": b._type, - "id": b.id, - }) - if err != nil { - return nil, err - } - - // Parameters - params := make(url.Values) - if b.pretty { - params.Set("pretty", "true") - } - if b.routing != "" { - params.Set("routing", b.routing) - } - if b.parent != "" { - params.Set("parent", b.parent) - } - if b.opType != "" { - params.Set("op_type", b.opType) - } - if b.refresh != nil && *b.refresh { - params.Set("refresh", "true") - } - if b.version != nil { - params.Set("version", fmt.Sprintf("%d", *b.version)) - } - if b.versionType != "" { - params.Set("version_type", b.versionType) - } - if b.timestamp != "" { - params.Set("timestamp", b.timestamp) - } - if b.ttl != "" { - params.Set("ttl", b.ttl) - } - if b.timeout != "" { - params.Set("timeout", b.timeout) - } - - /* - routing string - parent string - opType string - refresh *bool - version *int64 - versionType string - timestamp string - ttl string - */ - - // Body - var body interface{} - if b.bodyJson != nil { - body = b.bodyJson - } else { - body = b.bodyString - } - - // Get response - res, err := b.client.PerformRequest(method, path, params, body) - if err != nil { - return nil, err - } - - // Return result - ret := new(IndexResult) - if err := b.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/index_close.go b/vendor/gopkg.in/olivere/elastic.v2/index_close.go deleted file mode 100644 index 1a16c68..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/index_close.go +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "net/url" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -// CloseIndexService closes an index. -// See documentation at http://www.elasticsearch.org/guide/en/elasticsearch/reference/1.4/indices-open-close.html. -type CloseIndexService struct { - client *Client - pretty bool - index string - ignoreUnavailable *bool - allowNoIndices *bool - expandWildcards string - timeout string - masterTimeout string -} - -// NewCloseIndexService creates a new CloseIndexService. -func NewCloseIndexService(client *Client) *CloseIndexService { - return &CloseIndexService{client: client} -} - -// Index is the name of the index. -func (s *CloseIndexService) Index(index string) *CloseIndexService { - s.index = index - return s -} - -// Timeout is an explicit operation timeout. -func (s *CloseIndexService) Timeout(timeout string) *CloseIndexService { - s.timeout = timeout - return s -} - -// MasterTimeout specifies the timeout for connection to master. -func (s *CloseIndexService) MasterTimeout(masterTimeout string) *CloseIndexService { - s.masterTimeout = masterTimeout - return s -} - -// IgnoreUnavailable indicates whether specified concrete indices should be -// ignored when unavailable (missing or closed). -func (s *CloseIndexService) IgnoreUnavailable(ignoreUnavailable bool) *CloseIndexService { - s.ignoreUnavailable = &ignoreUnavailable - return s -} - -// AllowNoIndices indicates whether to ignore if a wildcard indices -// expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified). -func (s *CloseIndexService) AllowNoIndices(allowNoIndices bool) *CloseIndexService { - s.allowNoIndices = &allowNoIndices - return s -} - -// ExpandWildcards indicates whether to expand wildcard expression to -// concrete indices that are open, closed or both. -func (s *CloseIndexService) ExpandWildcards(expandWildcards string) *CloseIndexService { - s.expandWildcards = expandWildcards - return s -} - -// buildURL builds the URL for the operation. -func (s *CloseIndexService) buildURL() (string, url.Values, error) { - // Build URL - path, err := uritemplates.Expand("/{index}/_close", map[string]string{ - "index": s.index, - }) - if err != nil { - return "", url.Values{}, err - } - - // Add query string parameters - params := url.Values{} - if s.allowNoIndices != nil { - params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) - } - if s.expandWildcards != "" { - params.Set("expand_wildcards", s.expandWildcards) - } - if s.timeout != "" { - params.Set("timeout", s.timeout) - } - if s.masterTimeout != "" { - params.Set("master_timeout", s.masterTimeout) - } - if s.ignoreUnavailable != nil { - params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) - } - - return path, params, nil -} - -// Validate checks if the operation is valid. -func (s *CloseIndexService) Validate() error { - var invalid []string - if s.index == "" { - invalid = append(invalid, "Index") - } - if len(invalid) > 0 { - return fmt.Errorf("missing required fields: %v", invalid) - } - return nil -} - -// Do executes the operation. -func (s *CloseIndexService) Do() (*CloseIndexResponse, error) { - // Check pre-conditions - if err := s.Validate(); err != nil { - return nil, err - } - - // Get URL for request - path, params, err := s.buildURL() - if err != nil { - return nil, err - } - - // Get HTTP response - res, err := s.client.PerformRequest("POST", path, params, nil) - if err != nil { - return nil, err - } - - // Return operation response - ret := new(CloseIndexResponse) - if err := s.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -// CloseIndexResponse is the response of CloseIndexService.Do. -type CloseIndexResponse struct { - Acknowledged bool `json:"acknowledged"` -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/index_exists.go b/vendor/gopkg.in/olivere/elastic.v2/index_exists.go deleted file mode 100644 index fcf4ada..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/index_exists.go +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -type IndexExistsService struct { - client *Client - index string -} - -func NewIndexExistsService(client *Client) *IndexExistsService { - builder := &IndexExistsService{ - client: client, - } - return builder -} - -func (b *IndexExistsService) Index(index string) *IndexExistsService { - b.index = index - return b -} - -func (b *IndexExistsService) Do() (bool, error) { - // Build url - path, err := uritemplates.Expand("/{index}", map[string]string{ - "index": b.index, - }) - if err != nil { - return false, err - } - - // Get response - res, err := b.client.PerformRequest("HEAD", path, nil, nil) - if err != nil { - return false, err - } - if res.StatusCode == 200 { - return true, nil - } else if res.StatusCode == 404 { - return false, nil - } - return false, fmt.Errorf("elastic: got HTTP code %d when it should have been either 200 or 404", res.StatusCode) -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/index_get.go b/vendor/gopkg.in/olivere/elastic.v2/index_get.go deleted file mode 100644 index fd763f2..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/index_get.go +++ /dev/null @@ -1,185 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "log" - "net/url" - "strings" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -var ( - _ = fmt.Print - _ = log.Print - _ = strings.Index - _ = uritemplates.Expand - _ = url.Parse -) - -// IndicesGetService retrieves information about one or more indices. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-get-index.html. -type IndicesGetService struct { - client *Client - pretty bool - index []string - feature []string - expandWildcards string - local *bool - ignoreUnavailable *bool - allowNoIndices *bool -} - -// NewIndicesGetService creates a new IndicesGetService. -func NewIndicesGetService(client *Client) *IndicesGetService { - return &IndicesGetService{ - client: client, - index: make([]string, 0), - feature: make([]string, 0), - } -} - -// Index is a list of index names. Use _all to retrieve information about -// all indices of a cluster. -func (s *IndicesGetService) Index(index ...string) *IndicesGetService { - s.index = append(s.index, index...) - return s -} - -// Feature is a list of features (e.g. _settings,_mappings,_warmers, and _aliases). -func (s *IndicesGetService) Feature(feature ...string) *IndicesGetService { - s.feature = append(s.feature, feature...) - return s -} - -// ExpandWildcards indicates whether wildcard expressions should -// get expanded to open or closed indices (default: open). -func (s *IndicesGetService) ExpandWildcards(expandWildcards string) *IndicesGetService { - s.expandWildcards = expandWildcards - return s -} - -// Local indicates whether to return local information (do not retrieve -// the state from master node (default: false)). -func (s *IndicesGetService) Local(local bool) *IndicesGetService { - s.local = &local - return s -} - -// IgnoreUnavailable indicates whether to ignore unavailable indexes (default: false). -func (s *IndicesGetService) IgnoreUnavailable(ignoreUnavailable bool) *IndicesGetService { - s.ignoreUnavailable = &ignoreUnavailable - return s -} - -// AllowNoIndices indicates whether to ignore if a wildcard expression -// resolves to no concrete indices (default: false). -func (s *IndicesGetService) AllowNoIndices(allowNoIndices bool) *IndicesGetService { - s.allowNoIndices = &allowNoIndices - return s -} - -// Pretty indicates that the JSON response be indented and human readable. -func (s *IndicesGetService) Pretty(pretty bool) *IndicesGetService { - s.pretty = pretty - return s -} - -// buildURL builds the URL for the operation. -func (s *IndicesGetService) buildURL() (string, url.Values, error) { - var err error - var path string - var index []string - - if len(s.index) > 0 { - index = s.index - } else { - index = []string{"_all"} - } - - if len(s.feature) > 0 { - // Build URL - path, err = uritemplates.Expand("/{index}/{feature}", map[string]string{ - "index": strings.Join(index, ","), - "feature": strings.Join(s.feature, ","), - }) - } else { - // Build URL - path, err = uritemplates.Expand("/{index}", map[string]string{ - "index": strings.Join(index, ","), - }) - } - if err != nil { - return "", url.Values{}, err - } - - // Add query string parameters - params := url.Values{} - if s.pretty { - params.Set("pretty", "1") - } - if s.expandWildcards != "" { - params.Set("expand_wildcards", s.expandWildcards) - } - if s.local != nil { - params.Set("local", fmt.Sprintf("%v", *s.local)) - } - if s.ignoreUnavailable != nil { - params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) - } - if s.allowNoIndices != nil { - params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) - } - return path, params, nil -} - -// Validate checks if the operation is valid. -func (s *IndicesGetService) Validate() error { - var invalid []string - if len(s.index) == 0 { - invalid = append(invalid, "Index") - } - if len(invalid) > 0 { - return fmt.Errorf("missing required fields: %v", invalid) - } - return nil -} - -// Do executes the operation. -func (s *IndicesGetService) Do() (map[string]*IndicesGetResponse, error) { - // Check pre-conditions - if err := s.Validate(); err != nil { - return nil, err - } - - // Get URL for request - path, params, err := s.buildURL() - if err != nil { - return nil, err - } - - // Get HTTP response - res, err := s.client.PerformRequest("GET", path, params, nil) - if err != nil { - return nil, err - } - - // Return operation response - var ret map[string]*IndicesGetResponse - if err := s.client.decoder.Decode(res.Body, &ret); err != nil { - return nil, err - } - return ret, nil -} - -// IndicesGetResponse is part of the response of IndicesGetService.Do. -type IndicesGetResponse struct { - Aliases map[string]interface{} `json:"aliases"` - Mappings map[string]interface{} `json:"mappings"` - Settings map[string]interface{} `json:"settings"` - Warmers map[string]interface{} `json:"warmers"` -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/index_get_test.go b/vendor/gopkg.in/olivere/elastic.v2/index_get_test.go deleted file mode 100644 index 3883925..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/index_get_test.go +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "testing" -) - -func TestIndexGetURL(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tests := []struct { - Indices []string - Features []string - Expected string - }{ - { - []string{}, - []string{}, - "/_all", - }, - { - []string{}, - []string{"_mappings"}, - "/_all/_mappings", - }, - { - []string{"twitter"}, - []string{"_mappings", "_settings"}, - "/twitter/_mappings%2C_settings", - }, - { - []string{"store-1", "store-2"}, - []string{"_mappings", "_settings"}, - "/store-1%2Cstore-2/_mappings%2C_settings", - }, - } - - for _, test := range tests { - path, _, err := client.IndexGet().Index(test.Indices...).Feature(test.Features...).buildURL() - if err != nil { - t.Fatal(err) - } - if path != test.Expected { - t.Errorf("expected %q; got: %q", test.Expected, path) - } - } -} - -func TestIndexGetService(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - esversion, err := client.ElasticsearchVersion(DefaultURL) - if err != nil { - t.Fatal(err) - } - if esversion < "1.4.0" { - t.Skip("Index Get API is available since 1.4") - return - } - - res, err := client.IndexGet().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatalf("expected result; got: %v", res) - } - info, found := res[testIndexName] - if !found { - t.Fatalf("expected index %q to be found; got: %v", testIndexName, found) - } - if info == nil { - t.Fatalf("expected index %q to be != nil; got: %v", testIndexName, info) - } - if info.Mappings == nil { - t.Errorf("expected mappings to be != nil; got: %v", info.Mappings) - } - if info.Settings == nil { - t.Errorf("expected settings to be != nil; got: %v", info.Settings) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/index_open.go b/vendor/gopkg.in/olivere/elastic.v2/index_open.go deleted file mode 100644 index b6b17d6..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/index_open.go +++ /dev/null @@ -1,145 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "net/url" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -// OpenIndexService opens an index. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/1.4/indices-open-close.html. -type OpenIndexService struct { - client *Client - pretty bool - index string - expandWildcards string - timeout string - masterTimeout string - ignoreUnavailable *bool - allowNoIndices *bool -} - -// NewOpenIndexService creates a new OpenIndexService. -func NewOpenIndexService(client *Client) *OpenIndexService { - return &OpenIndexService{client: client} -} - -// Index is the name of the index to open. -func (s *OpenIndexService) Index(index string) *OpenIndexService { - s.index = index - return s -} - -// Timeout is an explicit operation timeout. -func (s *OpenIndexService) Timeout(timeout string) *OpenIndexService { - s.timeout = timeout - return s -} - -// MasterTimeout specifies the timeout for connection to master. -func (s *OpenIndexService) MasterTimeout(masterTimeout string) *OpenIndexService { - s.masterTimeout = masterTimeout - return s -} - -// IgnoreUnavailable indicates whether specified concrete indices should -// be ignored when unavailable (missing or closed). -func (s *OpenIndexService) IgnoreUnavailable(ignoreUnavailable bool) *OpenIndexService { - s.ignoreUnavailable = &ignoreUnavailable - return s -} - -// AllowNoIndices indicates whether to ignore if a wildcard indices -// expression resolves into no concrete indices. -// (This includes `_all` string or when no indices have been specified). -func (s *OpenIndexService) AllowNoIndices(allowNoIndices bool) *OpenIndexService { - s.allowNoIndices = &allowNoIndices - return s -} - -// ExpandWildcards indicates whether to expand wildcard expression to -// concrete indices that are open, closed or both.. -func (s *OpenIndexService) ExpandWildcards(expandWildcards string) *OpenIndexService { - s.expandWildcards = expandWildcards - return s -} - -// buildURL builds the URL for the operation. -func (s *OpenIndexService) buildURL() (string, url.Values, error) { - // Build URL - path, err := uritemplates.Expand("/{index}/_open", map[string]string{ - "index": s.index, - }) - if err != nil { - return "", url.Values{}, err - } - - // Add query string parameters - params := url.Values{} - if s.timeout != "" { - params.Set("timeout", s.timeout) - } - if s.masterTimeout != "" { - params.Set("master_timeout", s.masterTimeout) - } - if s.ignoreUnavailable != nil { - params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) - } - if s.allowNoIndices != nil { - params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) - } - if s.expandWildcards != "" { - params.Set("expand_wildcards", s.expandWildcards) - } - - return path, params, nil -} - -// Validate checks if the operation is valid. -func (s *OpenIndexService) Validate() error { - var invalid []string - if s.index == "" { - invalid = append(invalid, "Index") - } - if len(invalid) > 0 { - return fmt.Errorf("missing required fields: %v", invalid) - } - return nil -} - -// Do executes the operation. -func (s *OpenIndexService) Do() (*OpenIndexResponse, error) { - // Check pre-conditions - if err := s.Validate(); err != nil { - return nil, err - } - - // Get URL for request - path, params, err := s.buildURL() - if err != nil { - return nil, err - } - - // Get HTTP response - res, err := s.client.PerformRequest("POST", path, params, nil) - if err != nil { - return nil, err - } - - // Return operation response - ret := new(OpenIndexResponse) - if err := s.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -// OpenIndexResponse is the response of OpenIndexService.Do. -type OpenIndexResponse struct { - Acknowledged bool `json:"acknowledged"` -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/index_test.go b/vendor/gopkg.in/olivere/elastic.v2/index_test.go deleted file mode 100644 index 187eab1..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/index_test.go +++ /dev/null @@ -1,552 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "fmt" - "log" - "os" - "testing" - "time" -) - -const ( - testIndexName = "elastic-test" - testIndexName2 = "elastic-test2" - testMapping = ` -{ - "settings":{ - "number_of_shards":1, - "number_of_replicas":0 - }, - "mappings":{ - "_default_": { - "_timestamp": { - "enabled": true, - "store": "yes" - }, - "_ttl": { - "enabled": true, - "store": "yes" - } - }, - "tweet":{ - "properties":{ - "tags":{ - "type":"string" - }, - "location":{ - "type":"geo_point" - }, - "suggest_field":{ - "type":"completion", - "payloads":true - } - } - }, - "comment":{ - "_parent": { - "type": "tweet" - } - } - } -} -` -) - -type tweet struct { - User string `json:"user"` - Message string `json:"message"` - Retweets int `json:"retweets"` - Image string `json:"image,omitempty"` - Created time.Time `json:"created,omitempty"` - Tags []string `json:"tags,omitempty"` - Location string `json:"location,omitempty"` - Suggest *SuggestField `json:"suggest_field,omitempty"` -} - -func (t tweet) String() string { - return fmt.Sprintf("tweet{User:%q,Message:%q,Retweets:%d}", t.User, t.Message, t.Retweets) -} - -type comment struct { - User string `json:"user"` - Comment string `json:"comment"` - Created time.Time `json:"created,omitempty"` -} - -func (c comment) String() string { - return fmt.Sprintf("comment{User:%q,Comment:%q}", c.User, c.Comment) -} - -func isTravis() bool { - return os.Getenv("TRAVIS") != "" -} - -func travisGoVersion() string { - return os.Getenv("TRAVIS_GO_VERSION") -} - -type logger interface { - Error(args ...interface{}) - Errorf(format string, args ...interface{}) - Fatal(args ...interface{}) - Fatalf(format string, args ...interface{}) - Fail() - FailNow() - Log(args ...interface{}) - Logf(format string, args ...interface{}) -} - -func setupTestClient(t logger, options ...ClientOptionFunc) (client *Client) { - var err error - - client, err = NewClient(options...) - if err != nil { - t.Fatal(err) - } - - client.DeleteIndex(testIndexName).Do() - client.DeleteIndex(testIndexName2).Do() - - return client -} - -func setupTestClientAndCreateIndex(t logger, options ...ClientOptionFunc) *Client { - client := setupTestClient(t, options...) - - // Create index - createIndex, err := client.CreateIndex(testIndexName).Body(testMapping).Do() - if err != nil { - t.Fatal(err) - } - if createIndex == nil { - t.Errorf("expected result to be != nil; got: %v", createIndex) - } - - // Create second index - createIndex2, err := client.CreateIndex(testIndexName2).Body(testMapping).Do() - if err != nil { - t.Fatal(err) - } - if createIndex2 == nil { - t.Errorf("expected result to be != nil; got: %v", createIndex2) - } - - return client -} - -func setupTestClientAndCreateIndexAndLog(t logger, options ...ClientOptionFunc) *Client { - return setupTestClientAndCreateIndex(t, SetTraceLog(log.New(os.Stdout, "", 0))) -} - -func setupTestClientAndCreateIndexAndAddDocs(t logger, options ...ClientOptionFunc) *Client { - client := setupTestClientAndCreateIndex(t, options...) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - comment1 := comment{User: "nico", Comment: "You bet."} - - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").Routing("someroutingkey").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - _, err = client.Index().Index(testIndexName).Type("comment").Id("1").Parent("3").BodyJson(&comment1).Do() - if err != nil { - t.Fatal(err) - } - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - return client -} - -func TestIndexLifecycle(t *testing.T) { - client := setupTestClient(t) - - // Create index - createIndex, err := client.CreateIndex(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - if !createIndex.Acknowledged { - t.Errorf("expected CreateIndexResult.Acknowledged %v; got %v", true, createIndex.Acknowledged) - } - - // Check if index exists - indexExists, err := client.IndexExists(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - if !indexExists { - t.Fatalf("index %s should exist, but doesn't\n", testIndexName) - } - - // Delete index - deleteIndex, err := client.DeleteIndex(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - if !deleteIndex.Acknowledged { - t.Errorf("expected DeleteIndexResult.Acknowledged %v; got %v", true, deleteIndex.Acknowledged) - } - - // Check if index exists - indexExists, err = client.IndexExists(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - if indexExists { - t.Fatalf("index %s should not exist, but does\n", testIndexName) - } -} - -func TestIndexExistScenarios(t *testing.T) { - client := setupTestClient(t) - - // Should return false if index does not exist - indexExists, err := client.IndexExists(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - if indexExists { - t.Fatalf("expected index exists to return %v, got %v", false, indexExists) - } - - // Create index - createIndex, err := client.CreateIndex(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - if !createIndex.Acknowledged { - t.Errorf("expected CreateIndexResult.Ack %v; got %v", true, createIndex.Acknowledged) - } - - // Should return true if index does not exist - indexExists, err = client.IndexExists(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - if !indexExists { - t.Fatalf("expected index exists to return %v, got %v", true, indexExists) - } -} - -// TODO(oe): Find out why this test fails on Travis CI. -/* -func TestIndexOpenAndClose(t *testing.T) { - client := setupTestClient(t) - - // Create index - createIndex, err := client.CreateIndex(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - if !createIndex.Acknowledged { - t.Errorf("expected CreateIndexResult.Acknowledged %v; got %v", true, createIndex.Acknowledged) - } - defer func() { - // Delete index - deleteIndex, err := client.DeleteIndex(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - if !deleteIndex.Acknowledged { - t.Errorf("expected DeleteIndexResult.Acknowledged %v; got %v", true, deleteIndex.Acknowledged) - } - }() - - waitForYellow := func() { - // Wait for status yellow - res, err := client.ClusterHealth().WaitForStatus("yellow").Timeout("15s").Do() - if err != nil { - t.Fatal(err) - } - if res != nil && res.TimedOut { - t.Fatalf("cluster time out waiting for status %q", "yellow") - } - } - - // Wait for cluster - waitForYellow() - - // Close index - cresp, err := client.CloseIndex(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - if !cresp.Acknowledged { - t.Fatalf("expected close index of %q to be acknowledged\n", testIndexName) - } - - // Wait for cluster - waitForYellow() - - // Open index again - oresp, err := client.OpenIndex(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - if !oresp.Acknowledged { - t.Fatalf("expected open index of %q to be acknowledged\n", testIndexName) - } -} -*/ - -func TestDocumentLifecycle(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - - // Add a document - indexResult, err := client.Index(). - Index(testIndexName). - Type("tweet"). - Id("1"). - BodyJson(&tweet1). - Do() - if err != nil { - t.Fatal(err) - } - if indexResult == nil { - t.Errorf("expected result to be != nil; got: %v", indexResult) - } - - // Exists - exists, err := client.Exists().Index(testIndexName).Type("tweet").Id("1").Do() - if err != nil { - t.Fatal(err) - } - if !exists { - t.Errorf("expected exists %v; got %v", true, exists) - } - - // Get document - getResult, err := client.Get(). - Index(testIndexName). - Type("tweet"). - Id("1"). - Do() - if err != nil { - t.Fatal(err) - } - if getResult.Index != testIndexName { - t.Errorf("expected GetResult.Index %q; got %q", testIndexName, getResult.Index) - } - if getResult.Type != "tweet" { - t.Errorf("expected GetResult.Type %q; got %q", "tweet", getResult.Type) - } - if getResult.Id != "1" { - t.Errorf("expected GetResult.Id %q; got %q", "1", getResult.Id) - } - if getResult.Source == nil { - t.Errorf("expected GetResult.Source to be != nil; got nil") - } - - // Decode the Source field - var tweetGot tweet - err = json.Unmarshal(*getResult.Source, &tweetGot) - if err != nil { - t.Fatal(err) - } - if tweetGot.User != tweet1.User { - t.Errorf("expected Tweet.User to be %q; got %q", tweet1.User, tweetGot.User) - } - if tweetGot.Message != tweet1.Message { - t.Errorf("expected Tweet.Message to be %q; got %q", tweet1.Message, tweetGot.Message) - } - - // Delete document again - deleteResult, err := client.Delete().Index(testIndexName).Type("tweet").Id("1").Do() - if err != nil { - t.Fatal(err) - } - if deleteResult == nil { - t.Errorf("expected result to be != nil; got: %v", deleteResult) - } - - // Exists - exists, err = client.Exists().Index(testIndexName).Type("tweet").Id("1").Do() - if err != nil { - t.Fatal(err) - } - if exists { - t.Errorf("expected exists %v; got %v", false, exists) - } -} - -func TestDocumentLifecycleWithAutomaticIDGeneration(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - - // Add a document - indexResult, err := client.Index(). - Index(testIndexName). - Type("tweet"). - BodyJson(&tweet1). - Do() - if err != nil { - t.Fatal(err) - } - if indexResult == nil { - t.Errorf("expected result to be != nil; got: %v", indexResult) - } - if indexResult.Id == "" { - t.Fatalf("expected Es to generate an automatic ID, got: %v", indexResult.Id) - } - id := indexResult.Id - - // Exists - exists, err := client.Exists().Index(testIndexName).Type("tweet").Id(id).Do() - if err != nil { - t.Fatal(err) - } - if !exists { - t.Errorf("expected exists %v; got %v", true, exists) - } - - // Get document - getResult, err := client.Get(). - Index(testIndexName). - Type("tweet"). - Id(id). - Do() - if err != nil { - t.Fatal(err) - } - if getResult.Index != testIndexName { - t.Errorf("expected GetResult.Index %q; got %q", testIndexName, getResult.Index) - } - if getResult.Type != "tweet" { - t.Errorf("expected GetResult.Type %q; got %q", "tweet", getResult.Type) - } - if getResult.Id != id { - t.Errorf("expected GetResult.Id %q; got %q", id, getResult.Id) - } - if getResult.Source == nil { - t.Errorf("expected GetResult.Source to be != nil; got nil") - } - - // Decode the Source field - var tweetGot tweet - err = json.Unmarshal(*getResult.Source, &tweetGot) - if err != nil { - t.Fatal(err) - } - if tweetGot.User != tweet1.User { - t.Errorf("expected Tweet.User to be %q; got %q", tweet1.User, tweetGot.User) - } - if tweetGot.Message != tweet1.Message { - t.Errorf("expected Tweet.Message to be %q; got %q", tweet1.Message, tweetGot.Message) - } - - // Delete document again - deleteResult, err := client.Delete().Index(testIndexName).Type("tweet").Id(id).Do() - if err != nil { - t.Fatal(err) - } - if deleteResult == nil { - t.Errorf("expected result to be != nil; got: %v", deleteResult) - } - - // Exists - exists, err = client.Exists().Index(testIndexName).Type("tweet").Id(id).Do() - if err != nil { - t.Fatal(err) - } - if exists { - t.Errorf("expected exists %v; got %v", false, exists) - } -} - -func TestIndexCreateExistsOpenCloseDelete(t *testing.T) { - // TODO: Find out how to make these test robust - t.Skip("test fails regularly with 409 (Conflict): " + - "IndexPrimaryShardNotAllocatedException[[elastic-test] " + - "primary not allocated post api... skipping") - - client := setupTestClient(t) - - // Create index - createIndex, err := client.CreateIndex(testIndexName).Body(testMapping).Do() - if err != nil { - t.Fatal(err) - } - if createIndex == nil { - t.Fatalf("expected response; got: %v", createIndex) - } - if !createIndex.Acknowledged { - t.Errorf("expected ack for creating index; got: %v", createIndex.Acknowledged) - } - - // Exists - indexExists, err := client.IndexExists(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - if !indexExists { - t.Fatalf("expected index exists=%v; got %v", true, indexExists) - } - - // Flush - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Close index - closeIndex, err := client.CloseIndex(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - if closeIndex == nil { - t.Fatalf("expected response; got: %v", closeIndex) - } - if !closeIndex.Acknowledged { - t.Errorf("expected ack for closing index; got: %v", closeIndex.Acknowledged) - } - - // Open index - openIndex, err := client.OpenIndex(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - if openIndex == nil { - t.Fatalf("expected response; got: %v", openIndex) - } - if !openIndex.Acknowledged { - t.Errorf("expected ack for opening index; got: %v", openIndex.Acknowledged) - } - - // Flush - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Delete index - deleteIndex, err := client.DeleteIndex(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - if deleteIndex == nil { - t.Fatalf("expected response; got: %v", deleteIndex) - } - if !deleteIndex.Acknowledged { - t.Errorf("expected ack for deleting index; got %v", deleteIndex.Acknowledged) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/indices_delete_warmer.go b/vendor/gopkg.in/olivere/elastic.v2/indices_delete_warmer.go deleted file mode 100644 index bd0c231..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/indices_delete_warmer.go +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "net/url" - "strings" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -// IndicesDeleteWarmerService allows to delete a warmer. -// See https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-warmers.html. -type IndicesDeleteWarmerService struct { - client *Client - pretty bool - index []string - name []string - masterTimeout string -} - -// NewIndicesDeleteWarmerService creates a new IndicesDeleteWarmerService. -func NewIndicesDeleteWarmerService(client *Client) *IndicesDeleteWarmerService { - return &IndicesDeleteWarmerService{ - client: client, - index: make([]string, 0), - name: make([]string, 0), - } -} - -// Index is a list of index names the mapping should be added to -// (supports wildcards); use `_all` or omit to add the mapping on all indices. -func (s *IndicesDeleteWarmerService) Index(indices ...string) *IndicesDeleteWarmerService { - s.index = append(s.index, indices...) - return s -} - -// Name is a list of warmer names to delete (supports wildcards); -// use `_all` to delete all warmers in the specified indices. -func (s *IndicesDeleteWarmerService) Name(name ...string) *IndicesDeleteWarmerService { - s.name = append(s.name, name...) - return s -} - -// MasterTimeout specifies the timeout for connection to master. -func (s *IndicesDeleteWarmerService) MasterTimeout(masterTimeout string) *IndicesDeleteWarmerService { - s.masterTimeout = masterTimeout - return s -} - -// Pretty indicates that the JSON response be indented and human readable. -func (s *IndicesDeleteWarmerService) Pretty(pretty bool) *IndicesDeleteWarmerService { - s.pretty = pretty - return s -} - -// buildURL builds the URL for the operation. -func (s *IndicesDeleteWarmerService) buildURL() (string, url.Values, error) { - // Build URL - path, err := uritemplates.Expand("/{index}/_warmer/{name}", map[string]string{ - "index": strings.Join(s.index, ","), - "name": strings.Join(s.name, ","), - }) - if err != nil { - return "", url.Values{}, err - } - - // Add query string parameters - params := url.Values{} - if s.pretty { - params.Set("pretty", "1") - } - if s.masterTimeout != "" { - params.Set("master_timeout", s.masterTimeout) - } - if len(s.name) > 0 { - params.Set("name", strings.Join(s.name, ",")) - } - return path, params, nil -} - -// Validate checks if the operation is valid. -func (s *IndicesDeleteWarmerService) Validate() error { - var invalid []string - if len(s.index) == 0 { - invalid = append(invalid, "Index") - } - if len(s.name) == 0 { - invalid = append(invalid, "Name") - } - if len(invalid) > 0 { - return fmt.Errorf("missing required fields: %v", invalid) - } - return nil -} - -// Do executes the operation. -func (s *IndicesDeleteWarmerService) Do() (*DeleteWarmerResponse, error) { - // Check pre-conditions - if err := s.Validate(); err != nil { - return nil, err - } - - // Get URL for request - path, params, err := s.buildURL() - if err != nil { - return nil, err - } - - // Get HTTP response - res, err := s.client.PerformRequest("DELETE", path, params, nil) - if err != nil { - return nil, err - } - - // Return operation response - ret := new(DeleteWarmerResponse) - if err := s.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -// DeleteWarmerResponse is the response of IndicesDeleteWarmerService.Do. -type DeleteWarmerResponse struct { - Acknowledged bool `json:"acknowledged"` -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/indices_delete_warmer_test.go b/vendor/gopkg.in/olivere/elastic.v2/indices_delete_warmer_test.go deleted file mode 100644 index 3d811ea..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/indices_delete_warmer_test.go +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import "testing" - -func TestDeleteWarmerBuildURL(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tests := []struct { - Indices []string - Names []string - Expected string - }{ - { - []string{"test"}, - []string{"warmer_1"}, - "/test/_warmer/warmer_1", - }, - { - []string{"*"}, - []string{"warmer_1"}, - "/%2A/_warmer/warmer_1", - }, - { - []string{"_all"}, - []string{"warmer_1"}, - "/_all/_warmer/warmer_1", - }, - { - []string{"index-1", "index-2"}, - []string{"warmer_1", "warmer_2"}, - "/index-1%2Cindex-2/_warmer/warmer_1%2Cwarmer_2", - }, - } - - for _, test := range tests { - path, _, err := client.DeleteWarmer().Index(test.Indices...).Name(test.Names...).buildURL() - if err != nil { - t.Fatal(err) - } - if path != test.Expected { - t.Errorf("expected %q; got: %q", test.Expected, path) - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/indices_exists_type_test.go b/vendor/gopkg.in/olivere/elastic.v2/indices_exists_type_test.go deleted file mode 100644 index b37d42f..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/indices_exists_type_test.go +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "testing" -) - -func TestTypeExistsBuildURL(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tests := []struct { - Indices []string - Types []string - Expected string - ExpectValidateFailure bool - }{ - { - []string{}, - []string{}, - "", - true, - }, - { - []string{"index1"}, - []string{}, - "", - true, - }, - { - []string{}, - []string{"type1"}, - "", - true, - }, - { - []string{"index1"}, - []string{"type1"}, - "/index1/type1", - false, - }, - { - []string{"index1", "index2"}, - []string{"type1"}, - "/index1%2Cindex2/type1", - false, - }, - { - []string{"index1", "index2"}, - []string{"type1", "type2"}, - "/index1%2Cindex2/type1%2Ctype2", - false, - }, - } - - for i, test := range tests { - err := client.TypeExists().Index(test.Indices...).Type(test.Types...).Validate() - if err == nil && test.ExpectValidateFailure { - t.Errorf("case #%d: expected validate to fail", i+1) - continue - } - if err != nil && !test.ExpectValidateFailure { - t.Errorf("case #%d: expected validate to succeed", i+1) - continue - } - if !test.ExpectValidateFailure { - path, _, err := client.TypeExists().Index(test.Indices...).Type(test.Types...).buildURL() - if err != nil { - t.Fatalf("case #%d: %v", i+1, err) - } - if path != test.Expected { - t.Errorf("case #%d: expected %q; got: %q", i+1, test.Expected, path) - } - } - } -} - -func TestTypeExists(t *testing.T) { - client := setupTestClient(t) - - // Create index with tweet type - createIndex, err := client.CreateIndex(testIndexName).Body(testMapping).Do() - if err != nil { - t.Fatal(err) - } - if createIndex == nil { - t.Errorf("expected result to be != nil; got: %v", createIndex) - } - if !createIndex.Acknowledged { - t.Errorf("expected CreateIndexResult.Acknowledged %v; got %v", true, createIndex.Acknowledged) - } - - // Check if type exists - exists, err := client.TypeExists().Index(testIndexName).Type("tweet").Do() - if err != nil { - t.Fatal(err) - } - if !exists { - t.Fatalf("type %s should exist in index %s, but doesn't\n", "tweet", testIndexName) - } - - // Delete index - deleteIndex, err := client.DeleteIndex(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - if !deleteIndex.Acknowledged { - t.Errorf("expected DeleteIndexResult.Acknowledged %v; got %v", true, deleteIndex.Acknowledged) - } - - // Check if type exists - exists, err = client.TypeExists().Index(testIndexName).Type("tweet").Do() - if err != nil { - t.Fatal(err) - } - if exists { - t.Fatalf("type %s should not exist in index %s, but it does\n", "tweet", testIndexName) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/indices_get_warmer.go b/vendor/gopkg.in/olivere/elastic.v2/indices_get_warmer.go deleted file mode 100644 index 8a084bd..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/indices_get_warmer.go +++ /dev/null @@ -1,193 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "net/url" - "strings" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -// IndicesGetWarmerService allows to get the definition of a warmer for a -// specific index (or alias, or several indices) based on its name. -// The provided name can be a simple wildcard expression or omitted to get -// all warmers. -// -// See https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-warmers.html -// for more information. -type IndicesGetWarmerService struct { - client *Client - pretty bool - index []string - name []string - typ []string - allowNoIndices *bool - expandWildcards string - ignoreUnavailable *bool - local *bool -} - -// NewIndicesGetWarmerService creates a new IndicesGetWarmerService. -func NewIndicesGetWarmerService(client *Client) *IndicesGetWarmerService { - return &IndicesGetWarmerService{ - client: client, - typ: make([]string, 0), - index: make([]string, 0), - name: make([]string, 0), - } -} - -// Index is a list of index names to restrict the operation; use `_all` to perform the operation on all indices. -func (s *IndicesGetWarmerService) Index(indices ...string) *IndicesGetWarmerService { - s.index = append(s.index, indices...) - return s -} - -// Name is the name of the warmer (supports wildcards); leave empty to get all warmers. -func (s *IndicesGetWarmerService) Name(name ...string) *IndicesGetWarmerService { - s.name = append(s.name, name...) - return s -} - -// Type is a list of type names the mapping should be added to -// (supports wildcards); use `_all` or omit to add the mapping on all types. -func (s *IndicesGetWarmerService) Type(typ ...string) *IndicesGetWarmerService { - s.typ = append(s.typ, typ...) - return s -} - -// AllowNoIndices indicates whether to ignore if a wildcard indices -// expression resolves into no concrete indices. -// This includes `_all` string or when no indices have been specified. -func (s *IndicesGetWarmerService) AllowNoIndices(allowNoIndices bool) *IndicesGetWarmerService { - s.allowNoIndices = &allowNoIndices - return s -} - -// ExpandWildcards indicates whether to expand wildcard expression to -// concrete indices that are open, closed or both. -func (s *IndicesGetWarmerService) ExpandWildcards(expandWildcards string) *IndicesGetWarmerService { - s.expandWildcards = expandWildcards - return s -} - -// IgnoreUnavailable indicates whether specified concrete indices should be -// ignored when unavailable (missing or closed). -func (s *IndicesGetWarmerService) IgnoreUnavailable(ignoreUnavailable bool) *IndicesGetWarmerService { - s.ignoreUnavailable = &ignoreUnavailable - return s -} - -// Local indicates wether or not to return local information, -// do not retrieve the state from master node (default: false). -func (s *IndicesGetWarmerService) Local(local bool) *IndicesGetWarmerService { - s.local = &local - return s -} - -// Pretty indicates that the JSON response be indented and human readable. -func (s *IndicesGetWarmerService) Pretty(pretty bool) *IndicesGetWarmerService { - s.pretty = pretty - return s -} - -// buildURL builds the URL for the operation. -func (s *IndicesGetWarmerService) buildURL() (string, url.Values, error) { - var err error - var path string - - if len(s.index) == 0 && len(s.typ) == 0 && len(s.name) == 0 { - path = "/_warmer" - } else if len(s.index) == 0 && len(s.typ) == 0 && len(s.name) > 0 { - path, err = uritemplates.Expand("/_warmer/{name}", map[string]string{ - "name": strings.Join(s.name, ","), - }) - } else if len(s.index) == 0 && len(s.typ) > 0 && len(s.name) == 0 { - path, err = uritemplates.Expand("/_all/{type}/_warmer", map[string]string{ - "type": strings.Join(s.typ, ","), - }) - } else if len(s.index) == 0 && len(s.typ) > 0 && len(s.name) > 0 { - path, err = uritemplates.Expand("/_all/{type}/_warmer/{name}", map[string]string{ - "type": strings.Join(s.typ, ","), - "name": strings.Join(s.name, ","), - }) - } else if len(s.index) > 0 && len(s.typ) == 0 && len(s.name) == 0 { - path, err = uritemplates.Expand("/{index}/_warmer", map[string]string{ - "index": strings.Join(s.index, ","), - }) - } else if len(s.index) > 0 && len(s.typ) == 0 && len(s.name) > 0 { - path, err = uritemplates.Expand("/{index}/_warmer/{name}", map[string]string{ - "index": strings.Join(s.index, ","), - "name": strings.Join(s.name, ","), - }) - } else if len(s.index) > 0 && len(s.typ) > 0 && len(s.name) == 0 { - path, err = uritemplates.Expand("/{index}/{type}/_warmer", map[string]string{ - "index": strings.Join(s.index, ","), - "type": strings.Join(s.typ, ","), - }) - } else if len(s.index) > 0 && len(s.typ) > 0 && len(s.name) > 0 { - path, err = uritemplates.Expand("/{index}/{type}/_warmer/{name}", map[string]string{ - "index": strings.Join(s.index, ","), - "type": strings.Join(s.typ, ","), - "name": strings.Join(s.name, ","), - }) - } - if err != nil { - return "", url.Values{}, err - } - - // Add query string parameters - params := url.Values{} - if s.pretty { - params.Set("pretty", "1") - } - if s.allowNoIndices != nil { - params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) - } - if s.expandWildcards != "" { - params.Set("expand_wildcards", s.expandWildcards) - } - if s.ignoreUnavailable != nil { - params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) - } - if s.local != nil { - params.Set("local", fmt.Sprintf("%v", *s.local)) - } - return path, params, nil -} - -// Validate checks if the operation is valid. -func (s *IndicesGetWarmerService) Validate() error { - return nil -} - -// Do executes the operation. -func (s *IndicesGetWarmerService) Do() (map[string]interface{}, error) { - // Check pre-conditions - if err := s.Validate(); err != nil { - return nil, err - } - - // Get URL for request - path, params, err := s.buildURL() - if err != nil { - return nil, err - } - - // Get HTTP response - res, err := s.client.PerformRequest("GET", path, params, nil) - if err != nil { - return nil, err - } - - // Return operation response - var ret map[string]interface{} - if err := s.client.decoder.Decode(res.Body, &ret); err != nil { - return nil, err - } - return ret, nil -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/indices_get_warmer_test.go b/vendor/gopkg.in/olivere/elastic.v2/indices_get_warmer_test.go deleted file mode 100644 index ea01a62..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/indices_get_warmer_test.go +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import "testing" - -func TestGetWarmerBuildURL(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tests := []struct { - Indices []string - Types []string - Names []string - Expected string - }{ - { - []string{}, - []string{}, - []string{}, - "/_warmer", - }, - { - []string{}, - []string{}, - []string{"warmer_1"}, - "/_warmer/warmer_1", - }, - { - []string{}, - []string{"tweet"}, - []string{}, - "/_all/tweet/_warmer", - }, - { - []string{}, - []string{"tweet"}, - []string{"warmer_1"}, - "/_all/tweet/_warmer/warmer_1", - }, - { - []string{"test"}, - []string{}, - []string{}, - "/test/_warmer", - }, - { - []string{"test"}, - []string{}, - []string{"warmer_1"}, - "/test/_warmer/warmer_1", - }, - { - []string{"*"}, - []string{}, - []string{"warmer_1"}, - "/%2A/_warmer/warmer_1", - }, - { - []string{"test"}, - []string{"tweet"}, - []string{"warmer_1"}, - "/test/tweet/_warmer/warmer_1", - }, - { - []string{"index-1", "index-2"}, - []string{"type-1", "type-2"}, - []string{"warmer_1", "warmer_2"}, - "/index-1%2Cindex-2/type-1%2Ctype-2/_warmer/warmer_1%2Cwarmer_2", - }, - } - - for _, test := range tests { - path, _, err := client.GetWarmer().Index(test.Indices...).Type(test.Types...).Name(test.Names...).buildURL() - if err != nil { - t.Fatal(err) - } - if path != test.Expected { - t.Errorf("expected %q; got: %q", test.Expected, path) - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/indices_put_warmer.go b/vendor/gopkg.in/olivere/elastic.v2/indices_put_warmer.go deleted file mode 100644 index d27394a..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/indices_put_warmer.go +++ /dev/null @@ -1,221 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "net/url" - "strings" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -// IndicesPutWarmerService allows to register a warmer. -// See https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-warmers.html. -type IndicesPutWarmerService struct { - client *Client - pretty bool - typ []string - index []string - name string - masterTimeout string - ignoreUnavailable *bool - allowNoIndices *bool - requestCache *bool - expandWildcards string - bodyJson map[string]interface{} - bodyString string -} - -// NewIndicesPutWarmerService creates a new IndicesPutWarmerService. -func NewIndicesPutWarmerService(client *Client) *IndicesPutWarmerService { - return &IndicesPutWarmerService{ - client: client, - index: make([]string, 0), - typ: make([]string, 0), - } -} - -// Index is a list of index names the mapping should be added to -// (supports wildcards); use `_all` or omit to add the mapping on all indices. -func (s *IndicesPutWarmerService) Index(indices ...string) *IndicesPutWarmerService { - s.index = append(s.index, indices...) - return s -} - -// Type is a list of type names the mapping should be added to -// (supports wildcards); use `_all` or omit to add the mapping on all types. -func (s *IndicesPutWarmerService) Type(typ ...string) *IndicesPutWarmerService { - s.typ = append(s.typ, typ...) - return s -} - -// Name specifies the name of the warmer (supports wildcards); -// leave empty to get all warmers -func (s *IndicesPutWarmerService) Name(name string) *IndicesPutWarmerService { - s.name = name - return s -} - -// MasterTimeout specifies the timeout for connection to master. -func (s *IndicesPutWarmerService) MasterTimeout(masterTimeout string) *IndicesPutWarmerService { - s.masterTimeout = masterTimeout - return s -} - -// IgnoreUnavailable indicates whether specified concrete indices should be -// ignored when unavailable (missing or closed). -func (s *IndicesPutWarmerService) IgnoreUnavailable(ignoreUnavailable bool) *IndicesPutWarmerService { - s.ignoreUnavailable = &ignoreUnavailable - return s -} - -// AllowNoIndices indicates whether to ignore if a wildcard indices -// expression resolves into no concrete indices. -// This includes `_all` string or when no indices have been specified. -func (s *IndicesPutWarmerService) AllowNoIndices(allowNoIndices bool) *IndicesPutWarmerService { - s.allowNoIndices = &allowNoIndices - return s -} - -// RequestCache specifies whether the request to be warmed should use the request cache, -// defaults to index level setting -func (s *IndicesPutWarmerService) RequestCache(requestCache bool) *IndicesPutWarmerService { - s.requestCache = &requestCache - return s -} - -// ExpandWildcards indicates whether to expand wildcard expression to -// concrete indices that are open, closed or both. -func (s *IndicesPutWarmerService) ExpandWildcards(expandWildcards string) *IndicesPutWarmerService { - s.expandWildcards = expandWildcards - return s -} - -// Pretty indicates that the JSON response be indented and human readable. -func (s *IndicesPutWarmerService) Pretty(pretty bool) *IndicesPutWarmerService { - s.pretty = pretty - return s -} - -// BodyJson contains the mapping definition. -func (s *IndicesPutWarmerService) BodyJson(mapping map[string]interface{}) *IndicesPutWarmerService { - s.bodyJson = mapping - return s -} - -// BodyString is the mapping definition serialized as a string. -func (s *IndicesPutWarmerService) BodyString(mapping string) *IndicesPutWarmerService { - s.bodyString = mapping - return s -} - -// buildURL builds the URL for the operation. -func (s *IndicesPutWarmerService) buildURL() (string, url.Values, error) { - var err error - var path string - - if len(s.index) == 0 && len(s.typ) == 0 { - path, err = uritemplates.Expand("/_warmer/{name}", map[string]string{ - "name": s.name, - }) - } else if len(s.index) == 0 && len(s.typ) > 0 { - path, err = uritemplates.Expand("/_all/{type}/_warmer/{name}", map[string]string{ - "type": strings.Join(s.typ, ","), - "name": s.name, - }) - } else if len(s.index) > 0 && len(s.typ) == 0 { - path, err = uritemplates.Expand("/{index}/_warmer/{name}", map[string]string{ - "index": strings.Join(s.index, ","), - "name": s.name, - }) - } else { - path, err = uritemplates.Expand("/{index}/{type}/_warmer/{name}", map[string]string{ - "index": strings.Join(s.index, ","), - "type": strings.Join(s.typ, ","), - "name": s.name, - }) - } - if err != nil { - return "", url.Values{}, err - } - - // Add query string parameters - params := url.Values{} - if s.pretty { - params.Set("pretty", "1") - } - if s.ignoreUnavailable != nil { - params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) - } - if s.allowNoIndices != nil { - params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) - } - if s.requestCache != nil { - params.Set("request_cache", fmt.Sprintf("%v", *s.requestCache)) - } - if s.expandWildcards != "" { - params.Set("expand_wildcards", s.expandWildcards) - } - if s.masterTimeout != "" { - params.Set("master_timeout", s.masterTimeout) - } - return path, params, nil -} - -// Validate checks if the operation is valid. -func (s *IndicesPutWarmerService) Validate() error { - var invalid []string - if s.name == "" { - invalid = append(invalid, "Name") - } - if s.bodyString == "" && s.bodyJson == nil { - invalid = append(invalid, "BodyJson") - } - if len(invalid) > 0 { - return fmt.Errorf("missing required fields: %v", invalid) - } - return nil -} - -// Do executes the operation. -func (s *IndicesPutWarmerService) Do() (*PutWarmerResponse, error) { - // Check pre-conditions - if err := s.Validate(); err != nil { - return nil, err - } - - // Get URL for request - path, params, err := s.buildURL() - if err != nil { - return nil, err - } - - // Setup HTTP request body - var body interface{} - if s.bodyJson != nil { - body = s.bodyJson - } else { - body = s.bodyString - } - - // Get HTTP response - res, err := s.client.PerformRequest("PUT", path, params, body) - if err != nil { - return nil, err - } - - // Return operation response - ret := new(PutWarmerResponse) - if err := s.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -// PutWarmerResponse is the response of IndicesPutWarmerService.Do. -type PutWarmerResponse struct { - Acknowledged bool `json:"acknowledged"` -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/indices_put_warmer_test.go b/vendor/gopkg.in/olivere/elastic.v2/indices_put_warmer_test.go deleted file mode 100644 index 54563fb..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/indices_put_warmer_test.go +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import "testing" - -func TestPutWarmerBuildURL(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tests := []struct { - Indices []string - Types []string - Name string - Expected string - }{ - { - []string{}, - []string{}, - "warmer_1", - "/_warmer/warmer_1", - }, - { - []string{"*"}, - []string{}, - "warmer_1", - "/%2A/_warmer/warmer_1", - }, - { - []string{}, - []string{"*"}, - "warmer_1", - "/_all/%2A/_warmer/warmer_1", - }, - { - []string{"index-1", "index-2"}, - []string{"type-1", "type-2"}, - "warmer_1", - "/index-1%2Cindex-2/type-1%2Ctype-2/_warmer/warmer_1", - }, - } - - for _, test := range tests { - path, _, err := client.PutWarmer().Index(test.Indices...).Type(test.Types...).Name(test.Name).buildURL() - if err != nil { - t.Fatal(err) - } - if path != test.Expected { - t.Errorf("expected %q; got: %q", test.Expected, path) - } - } -} - -func TestWarmerLifecycle(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - // Ensure preconditions are met: A green cluster. - health, err := client.ClusterHealth().Do() - if err != nil { - t.Fatal(err) - } - if got, want := health.Status, "green"; got != want { - t.Skipf("precondition failed: expected cluster to be %q, not %q", want, got) - } - - mapping := `{ - "query": { - "match_all": {} - } - }` - - // Ensure well prepared test index - client.Flush().Index(testIndexName2).Do() - if err := client.WaitForGreenStatus("3s"); err != nil { - t.Fatal(err) - } - - putresp, err := client.PutWarmer().Index(testIndexName2).Type("tweet").Name("warmer_1").BodyString(mapping).Do() - if err != nil { - t.Fatalf("expected put warmer to succeed; got: %v", err) - } - if putresp == nil { - t.Fatalf("expected put warmer response; got: %v", putresp) - } - if !putresp.Acknowledged { - t.Fatalf("expected put warmer ack; got: %v", putresp.Acknowledged) - } - - getresp, err := client.GetWarmer().Index(testIndexName2).Name("warmer_1").Do() - if err != nil { - t.Fatalf("expected get warmer to succeed; got: %v", err) - } - if getresp == nil { - t.Fatalf("expected get warmer response; got: %v", getresp) - } - props, ok := getresp[testIndexName2] - if !ok { - t.Fatalf("expected JSON root to be of type map[string]interface{}; got: %#v", props) - } - - delresp, err := client.DeleteWarmer().Index(testIndexName2).Name("warmer_1").Do() - if err != nil { - t.Fatalf("expected del warmer to succeed; got: %v", err) - } - if delresp == nil { - t.Fatalf("expected del warmer response; got: %v", getresp) - } - if !delresp.Acknowledged { - t.Fatalf("expected del warmer ack; got: %v", delresp.Acknowledged) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/inner_hit_test.go b/vendor/gopkg.in/olivere/elastic.v2/inner_hit_test.go deleted file mode 100644 index dfd77ec..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/inner_hit_test.go +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestInnerHitEmpty(t *testing.T) { - hit := NewInnerHit() - data, err := json.Marshal(hit.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestInnerHitWithName(t *testing.T) { - hit := NewInnerHit().Name("comments") - data, err := json.Marshal(hit.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"name":"comments"}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/multi_get.go b/vendor/gopkg.in/olivere/elastic.v2/multi_get.go deleted file mode 100644 index bf035fc..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/multi_get.go +++ /dev/null @@ -1,193 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "net/url" -) - -type MultiGetService struct { - client *Client - preference string - realtime *bool - refresh *bool - items []*MultiGetItem -} - -func NewMultiGetService(client *Client) *MultiGetService { - builder := &MultiGetService{ - client: client, - items: make([]*MultiGetItem, 0), - } - return builder -} - -func (b *MultiGetService) Preference(preference string) *MultiGetService { - b.preference = preference - return b -} - -func (b *MultiGetService) Refresh(refresh bool) *MultiGetService { - b.refresh = &refresh - return b -} - -func (b *MultiGetService) Realtime(realtime bool) *MultiGetService { - b.realtime = &realtime - return b -} - -func (b *MultiGetService) Add(items ...*MultiGetItem) *MultiGetService { - b.items = append(b.items, items...) - return b -} - -func (b *MultiGetService) Source() interface{} { - source := make(map[string]interface{}) - items := make([]interface{}, len(b.items)) - for i, item := range b.items { - items[i] = item.Source() - } - source["docs"] = items - return source -} - -func (b *MultiGetService) Do() (*MultiGetResult, error) { - // Build url - path := "/_mget" - - params := make(url.Values) - if b.realtime != nil { - params.Add("realtime", fmt.Sprintf("%v", *b.realtime)) - } - if b.preference != "" { - params.Add("preference", b.preference) - } - if b.refresh != nil { - params.Add("refresh", fmt.Sprintf("%v", *b.refresh)) - } - - // Set body - body := b.Source() - - // Get response - res, err := b.client.PerformRequest("GET", path, params, body) - if err != nil { - return nil, err - } - - // Return result - ret := new(MultiGetResult) - if err := b.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -// -- Multi Get Item -- - -// MultiGetItem is a single document to retrieve via the MultiGetService. -type MultiGetItem struct { - index string - typ string - id string - routing string - fields []string - version *int64 // see org.elasticsearch.common.lucene.uid.Versions - versionType string // see org.elasticsearch.index.VersionType - fsc *FetchSourceContext -} - -func NewMultiGetItem() *MultiGetItem { - return &MultiGetItem{} -} - -func (item *MultiGetItem) Index(index string) *MultiGetItem { - item.index = index - return item -} - -func (item *MultiGetItem) Type(typ string) *MultiGetItem { - item.typ = typ - return item -} - -func (item *MultiGetItem) Id(id string) *MultiGetItem { - item.id = id - return item -} - -func (item *MultiGetItem) Routing(routing string) *MultiGetItem { - item.routing = routing - return item -} - -func (item *MultiGetItem) Fields(fields ...string) *MultiGetItem { - if item.fields == nil { - item.fields = make([]string, 0) - } - item.fields = append(item.fields, fields...) - return item -} - -// Version can be MatchAny (-3), MatchAnyPre120 (0), NotFound (-1), -// or NotSet (-2). These are specified in org.elasticsearch.common.lucene.uid.Versions. -// The default in Elasticsearch is MatchAny (-3). -func (item *MultiGetItem) Version(version int64) *MultiGetItem { - item.version = &version - return item -} - -// VersionType can be "internal", "external", "external_gt", "external_gte", -// or "force". See org.elasticsearch.index.VersionType in Elasticsearch source. -// It is "internal" by default. -func (item *MultiGetItem) VersionType(versionType string) *MultiGetItem { - item.versionType = versionType - return item -} - -func (item *MultiGetItem) FetchSource(fetchSourceContext *FetchSourceContext) *MultiGetItem { - item.fsc = fetchSourceContext - return item -} - -// Source returns the serialized JSON to be sent to Elasticsearch as -// part of a MultiGet search. -func (item *MultiGetItem) Source() interface{} { - source := make(map[string]interface{}) - - source["_id"] = item.id - - if item.index != "" { - source["_index"] = item.index - } - if item.typ != "" { - source["_type"] = item.typ - } - if item.fsc != nil { - source["_source"] = item.fsc.Source() - } - if item.fields != nil { - source["fields"] = item.fields - } - if item.routing != "" { - source["_routing"] = item.routing - } - if item.version != nil { - source["version"] = fmt.Sprintf("%d", *item.version) - } - if item.versionType != "" { - source["version_type"] = item.versionType - } - - return source -} - -// -- Result of a Multi Get request. - -type MultiGetResult struct { - Docs []*GetResult `json:"docs,omitempty"` -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/multi_get_test.go b/vendor/gopkg.in/olivere/elastic.v2/multi_get_test.go deleted file mode 100644 index 64b4722..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/multi_get_test.go +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestMultiGet(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add some documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Count documents - count, err := client.Count(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - if count != 3 { - t.Errorf("expected Count = %d; got %d", 3, count) - } - - // Get documents 1 and 3 - res, err := client.MultiGet(). - Add(NewMultiGetItem().Index(testIndexName).Type("tweet").Id("1")). - Add(NewMultiGetItem().Index(testIndexName).Type("tweet").Id("3")). - Do() - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatal("expected result to be != nil; got nil") - } - if res.Docs == nil { - t.Fatal("expected result docs to be != nil; got nil") - } - if len(res.Docs) != 2 { - t.Fatalf("expected to have 2 docs; got %d", len(res.Docs)) - } - - item := res.Docs[0] - if item.Error != "" { - t.Errorf("expected no error on item 0; got %q", item.Error) - } - if item.Source == nil { - t.Errorf("expected Source != nil; got %v", item.Source) - } - var doc tweet - if err := json.Unmarshal(*item.Source, &doc); err != nil { - t.Fatalf("expected to unmarshal item Source; got %v", err) - } - if doc.Message != tweet1.Message { - t.Errorf("expected Message of first tweet to be %q; got %q", tweet1.Message, doc.Message) - } - - item = res.Docs[1] - if item.Error != "" { - t.Errorf("expected no error on item 1; got %q", item.Error) - } - if item.Source == nil { - t.Errorf("expected Source != nil; got %v", item.Source) - } - if err := json.Unmarshal(*item.Source, &doc); err != nil { - t.Fatalf("expected to unmarshal item Source; got %v", err) - } - if doc.Message != tweet3.Message { - t.Errorf("expected Message of second tweet to be %q; got %q", tweet3.Message, doc.Message) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/multi_search.go b/vendor/gopkg.in/olivere/elastic.v2/multi_search.go deleted file mode 100644 index b989539..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/multi_search.go +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "fmt" - "net/url" - "strings" -) - -// MultiSearch executes one or more searches in one roundtrip. -// See http://www.elasticsearch.org/guide/reference/api/multi-search/ -type MultiSearchService struct { - client *Client - requests []*SearchRequest - indices []string - pretty bool - routing string - preference string -} - -func NewMultiSearchService(client *Client) *MultiSearchService { - builder := &MultiSearchService{ - client: client, - requests: make([]*SearchRequest, 0), - indices: make([]string, 0), - } - return builder -} - -func (s *MultiSearchService) Add(requests ...*SearchRequest) *MultiSearchService { - s.requests = append(s.requests, requests...) - return s -} - -func (s *MultiSearchService) Index(index string) *MultiSearchService { - s.indices = append(s.indices, index) - return s -} - -func (s *MultiSearchService) Indices(indices ...string) *MultiSearchService { - s.indices = append(s.indices, indices...) - return s -} - -func (s *MultiSearchService) Pretty(pretty bool) *MultiSearchService { - s.pretty = pretty - return s -} - -func (s *MultiSearchService) Do() (*MultiSearchResult, error) { - // Build url - path := "/_msearch" - - // Parameters - params := make(url.Values) - if s.pretty { - params.Set("pretty", fmt.Sprintf("%v", s.pretty)) - } - - // Set body - lines := make([]string, 0) - for _, sr := range s.requests { - // Set default indices if not specified in the request - if !sr.HasIndices() && len(s.indices) > 0 { - sr = sr.Indices(s.indices...) - } - - header, err := json.Marshal(sr.header()) - if err != nil { - return nil, err - } - body, err := json.Marshal(sr.body()) - if err != nil { - return nil, err - } - lines = append(lines, string(header)) - lines = append(lines, string(body)) - } - body := strings.Join(lines, "\n") + "\n" // Don't forget trailing \n - - // Get response - res, err := s.client.PerformRequest("GET", path, params, body) - if err != nil { - return nil, err - } - - // Return result - ret := new(MultiSearchResult) - if err := s.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -type MultiSearchResult struct { - Responses []*SearchResult `json:"responses,omitempty"` -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/multi_search_test.go b/vendor/gopkg.in/olivere/elastic.v2/multi_search_test.go deleted file mode 100644 index 1741890..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/multi_search_test.go +++ /dev/null @@ -1,197 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - _ "net/http" - "testing" -) - -func TestMultiSearch(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{ - User: "olivere", - Message: "Welcome to Golang and Elasticsearch.", - Tags: []string{"golang", "elasticsearch"}, - } - tweet2 := tweet{ - User: "olivere", - Message: "Another unrelated topic.", - Tags: []string{"golang"}, - } - tweet3 := tweet{ - User: "sandrae", - Message: "Cycling is fun.", - Tags: []string{"sports", "cycling"}, - } - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Spawn two search queries with one roundtrip - q1 := NewMatchAllQuery() - q2 := NewTermQuery("tags", "golang") - - sreq1 := NewSearchRequest().Indices(testIndexName, testIndexName2). - Source(NewSearchSource().Query(q1).Size(10)) - sreq2 := NewSearchRequest().Index(testIndexName).Type("tweet"). - Source(NewSearchSource().Query(q2)) - - searchResult, err := client.MultiSearch(). - Add(sreq1, sreq2). - Do() - if err != nil { - t.Fatal(err) - } - if searchResult.Responses == nil { - t.Fatal("expected responses != nil; got nil") - } - if len(searchResult.Responses) != 2 { - t.Fatalf("expected 2 responses; got %d", len(searchResult.Responses)) - } - - sres := searchResult.Responses[0] - if sres.Hits == nil { - t.Errorf("expected Hits != nil; got nil") - } - if sres.Hits.TotalHits != 3 { - t.Errorf("expected Hits.TotalHits = %d; got %d", 3, sres.Hits.TotalHits) - } - if len(sres.Hits.Hits) != 3 { - t.Errorf("expected len(Hits.Hits) = %d; got %d", 3, len(sres.Hits.Hits)) - } - for _, hit := range sres.Hits.Hits { - if hit.Index != testIndexName { - t.Errorf("expected Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - item := make(map[string]interface{}) - err := json.Unmarshal(*hit.Source, &item) - if err != nil { - t.Fatal(err) - } - } - - sres = searchResult.Responses[1] - if sres.Hits == nil { - t.Errorf("expected Hits != nil; got nil") - } - if sres.Hits.TotalHits != 2 { - t.Errorf("expected Hits.TotalHits = %d; got %d", 2, sres.Hits.TotalHits) - } - if len(sres.Hits.Hits) != 2 { - t.Errorf("expected len(Hits.Hits) = %d; got %d", 2, len(sres.Hits.Hits)) - } - for _, hit := range sres.Hits.Hits { - if hit.Index != testIndexName { - t.Errorf("expected Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - item := make(map[string]interface{}) - err := json.Unmarshal(*hit.Source, &item) - if err != nil { - t.Fatal(err) - } - } -} - -func TestMultiSearchWithOneRequest(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{ - User: "olivere", - Message: "Welcome to Golang and Elasticsearch.", - Tags: []string{"golang", "elasticsearch"}, - } - tweet2 := tweet{ - User: "olivere", - Message: "Another unrelated topic.", - Tags: []string{"golang"}, - } - tweet3 := tweet{ - User: "sandrae", - Message: "Cycling is fun.", - Tags: []string{"sports", "cycling"}, - } - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Spawn two search queries with one roundtrip - query := NewMatchAllQuery() - source := NewSearchSource().Query(query).Size(10) - sreq := NewSearchRequest().Source(source) - - searchResult, err := client.MultiSearch(). - Index(testIndexName). - Add(sreq). - Do() - if err != nil { - t.Fatal(err) - } - if searchResult.Responses == nil { - t.Fatal("expected responses != nil; got nil") - } - if len(searchResult.Responses) != 1 { - t.Fatalf("expected 1 responses; got %d", len(searchResult.Responses)) - } - - sres := searchResult.Responses[0] - if sres.Hits == nil { - t.Errorf("expected Hits != nil; got nil") - } - if sres.Hits.TotalHits != 3 { - t.Errorf("expected Hits.TotalHits = %d; got %d", 3, sres.Hits.TotalHits) - } - if len(sres.Hits.Hits) != 3 { - t.Errorf("expected len(Hits.Hits) = %d; got %d", 3, len(sres.Hits.Hits)) - } - for _, hit := range sres.Hits.Hits { - if hit.Index != testIndexName { - t.Errorf("expected Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - item := make(map[string]interface{}) - err := json.Unmarshal(*hit.Source, &item) - if err != nil { - t.Fatal(err) - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/optimize.go b/vendor/gopkg.in/olivere/elastic.v2/optimize.go deleted file mode 100644 index d9e3d4e..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/optimize.go +++ /dev/null @@ -1,134 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "net/url" - "strings" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -type OptimizeService struct { - client *Client - indices []string - maxNumSegments *int - onlyExpungeDeletes *bool - flush *bool - waitForMerge *bool - force *bool - pretty bool -} - -func NewOptimizeService(client *Client) *OptimizeService { - builder := &OptimizeService{ - client: client, - indices: make([]string, 0), - } - return builder -} - -func (s *OptimizeService) Index(index string) *OptimizeService { - s.indices = append(s.indices, index) - return s -} - -func (s *OptimizeService) Indices(indices ...string) *OptimizeService { - s.indices = append(s.indices, indices...) - return s -} - -func (s *OptimizeService) MaxNumSegments(maxNumSegments int) *OptimizeService { - s.maxNumSegments = &maxNumSegments - return s -} - -func (s *OptimizeService) OnlyExpungeDeletes(onlyExpungeDeletes bool) *OptimizeService { - s.onlyExpungeDeletes = &onlyExpungeDeletes - return s -} - -func (s *OptimizeService) Flush(flush bool) *OptimizeService { - s.flush = &flush - return s -} - -func (s *OptimizeService) WaitForMerge(waitForMerge bool) *OptimizeService { - s.waitForMerge = &waitForMerge - return s -} - -func (s *OptimizeService) Force(force bool) *OptimizeService { - s.force = &force - return s -} - -func (s *OptimizeService) Pretty(pretty bool) *OptimizeService { - s.pretty = pretty - return s -} - -func (s *OptimizeService) Do() (*OptimizeResult, error) { - // Build url - path := "/" - - // Indices part - indexPart := make([]string, 0) - for _, index := range s.indices { - index, err := uritemplates.Expand("{index}", map[string]string{ - "index": index, - }) - if err != nil { - return nil, err - } - indexPart = append(indexPart, index) - } - if len(indexPart) > 0 { - path += strings.Join(indexPart, ",") - } - - path += "/_optimize" - - // Parameters - params := make(url.Values) - if s.maxNumSegments != nil { - params.Set("max_num_segments", fmt.Sprintf("%d", *s.maxNumSegments)) - } - if s.onlyExpungeDeletes != nil { - params.Set("only_expunge_deletes", fmt.Sprintf("%v", *s.onlyExpungeDeletes)) - } - if s.flush != nil { - params.Set("flush", fmt.Sprintf("%v", *s.flush)) - } - if s.waitForMerge != nil { - params.Set("wait_for_merge", fmt.Sprintf("%v", *s.waitForMerge)) - } - if s.force != nil { - params.Set("force", fmt.Sprintf("%v", *s.force)) - } - if s.pretty { - params.Set("pretty", fmt.Sprintf("%v", s.pretty)) - } - - // Get response - res, err := s.client.PerformRequest("POST", path, params, nil) - if err != nil { - return nil, err - } - - // Return result - ret := new(OptimizeResult) - if err := s.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -// -- Result of an optimize request. - -type OptimizeResult struct { - Shards shardsInfo `json:"_shards,omitempty"` -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/optimize_test.go b/vendor/gopkg.in/olivere/elastic.v2/optimize_test.go deleted file mode 100644 index c47de3a..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/optimize_test.go +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "testing" -) - -func TestOptimize(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add some documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Optimize documents - res, err := client.Optimize(testIndexName, testIndexName2).Do() - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatal("expected result; got nil") - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/percolate.go b/vendor/gopkg.in/olivere/elastic.v2/percolate.go deleted file mode 100644 index 55d8874..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/percolate.go +++ /dev/null @@ -1,309 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "net/url" - "strings" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -// PercolateService is documented at http://www.elasticsearch.org/guide/en/elasticsearch/reference/1.4/search-percolate.html. -type PercolateService struct { - client *Client - pretty bool - index string - typ string - id string - version interface{} - versionType string - routing []string - preference string - ignoreUnavailable *bool - percolateIndex string - percolatePreference string - percolateRouting string - source string - allowNoIndices *bool - expandWildcards string - percolateFormat string - percolateType string - bodyJson interface{} - bodyString string -} - -// NewPercolateService creates a new PercolateService. -func NewPercolateService(client *Client) *PercolateService { - return &PercolateService{ - client: client, - routing: make([]string, 0), - } -} - -// Index is the name of the index of the document being percolated. -func (s *PercolateService) Index(index string) *PercolateService { - s.index = index - return s -} - -// Type is the type of the document being percolated. -func (s *PercolateService) Type(typ string) *PercolateService { - s.typ = typ - return s -} - -// Id is to substitute the document in the request body with a -// document that is known by the specified id. On top of the id, -// the index and type parameter will be used to retrieve -// the document from within the cluster. -func (s *PercolateService) Id(id string) *PercolateService { - s.id = id - return s -} - -// ExpandWildcards indicates whether to expand wildcard expressions -// to concrete indices that are open, closed or both. -func (s *PercolateService) ExpandWildcards(expandWildcards string) *PercolateService { - s.expandWildcards = expandWildcards - return s -} - -// PercolateFormat indicates whether to return an array of matching -// query IDs instead of objects. -func (s *PercolateService) PercolateFormat(percolateFormat string) *PercolateService { - s.percolateFormat = percolateFormat - return s -} - -// PercolateType is the type to percolate document into. Defaults to type. -func (s *PercolateService) PercolateType(percolateType string) *PercolateService { - s.percolateType = percolateType - return s -} - -// PercolateRouting is the routing value to use when percolating -// the existing document. -func (s *PercolateService) PercolateRouting(percolateRouting string) *PercolateService { - s.percolateRouting = percolateRouting - return s -} - -// Source is the URL-encoded request definition. -func (s *PercolateService) Source(source string) *PercolateService { - s.source = source - return s -} - -// AllowNoIndices indicates whether to ignore if a wildcard indices -// expression resolves into no concrete indices. -// (This includes `_all` string or when no indices have been specified). -func (s *PercolateService) AllowNoIndices(allowNoIndices bool) *PercolateService { - s.allowNoIndices = &allowNoIndices - return s -} - -// IgnoreUnavailable indicates whether specified concrete indices should -// be ignored when unavailable (missing or closed). -func (s *PercolateService) IgnoreUnavailable(ignoreUnavailable bool) *PercolateService { - s.ignoreUnavailable = &ignoreUnavailable - return s -} - -// PercolateIndex is the index to percolate the document into. Defaults to index. -func (s *PercolateService) PercolateIndex(percolateIndex string) *PercolateService { - s.percolateIndex = percolateIndex - return s -} - -// PercolatePreference defines which shard to prefer when executing -// the percolate request. -func (s *PercolateService) PercolatePreference(percolatePreference string) *PercolateService { - s.percolatePreference = percolatePreference - return s -} - -// Version is an explicit version number for concurrency control. -func (s *PercolateService) Version(version interface{}) *PercolateService { - s.version = version - return s -} - -// VersionType is the specific version type. -func (s *PercolateService) VersionType(versionType string) *PercolateService { - s.versionType = versionType - return s -} - -// Routing is a list of specific routing values. -func (s *PercolateService) Routing(routing []string) *PercolateService { - s.routing = routing - return s -} - -// Preference specifies the node or shard the operation should be -// performed on (default: random). -func (s *PercolateService) Preference(preference string) *PercolateService { - s.preference = preference - return s -} - -// Pretty indicates that the JSON response be indented and human readable. -func (s *PercolateService) Pretty(pretty bool) *PercolateService { - s.pretty = pretty - return s -} - -// Doc wraps the given document into the "doc" key of the body. -func (s *PercolateService) Doc(doc interface{}) *PercolateService { - return s.BodyJson(map[string]interface{}{"doc": doc}) -} - -// BodyJson is the percolator request definition using the percolate DSL. -func (s *PercolateService) BodyJson(body interface{}) *PercolateService { - s.bodyJson = body - return s -} - -// BodyString is the percolator request definition using the percolate DSL. -func (s *PercolateService) BodyString(body string) *PercolateService { - s.bodyString = body - return s -} - -// buildURL builds the URL for the operation. -func (s *PercolateService) buildURL() (string, url.Values, error) { - // Build URL - var path string - var err error - if s.id == "" { - path, err = uritemplates.Expand("/{index}/{type}/_percolate", map[string]string{ - "index": s.index, - "type": s.typ, - }) - } else { - path, err = uritemplates.Expand("/{index}/{type}/{id}/_percolate", map[string]string{ - "index": s.index, - "type": s.typ, - "id": s.id, - }) - } - if err != nil { - return "", url.Values{}, err - } - - // Add query string parameters - params := url.Values{} - if s.pretty { - params.Set("pretty", "1") - } - if s.version != nil { - params.Set("version", fmt.Sprintf("%v", s.version)) - } - if s.versionType != "" { - params.Set("version_type", s.versionType) - } - if len(s.routing) > 0 { - params.Set("routing", strings.Join(s.routing, ",")) - } - if s.preference != "" { - params.Set("preference", s.preference) - } - if s.ignoreUnavailable != nil { - params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) - } - if s.percolateIndex != "" { - params.Set("percolate_index", s.percolateIndex) - } - if s.percolatePreference != "" { - params.Set("percolate_preference", s.percolatePreference) - } - if s.percolateRouting != "" { - params.Set("percolate_routing", s.percolateRouting) - } - if s.source != "" { - params.Set("source", s.source) - } - if s.allowNoIndices != nil { - params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) - } - if s.expandWildcards != "" { - params.Set("expand_wildcards", s.expandWildcards) - } - if s.percolateFormat != "" { - params.Set("percolate_format", s.percolateFormat) - } - if s.percolateType != "" { - params.Set("percolate_type", s.percolateType) - } - return path, params, nil -} - -// Validate checks if the operation is valid. -func (s *PercolateService) Validate() error { - var invalid []string - if s.index == "" { - invalid = append(invalid, "Index") - } - if s.typ == "" { - invalid = append(invalid, "Type") - } - if len(invalid) > 0 { - return fmt.Errorf("missing required fields: %v", invalid) - } - return nil -} - -// Do executes the operation. -func (s *PercolateService) Do() (*PercolateResponse, error) { - // Check pre-conditions - if err := s.Validate(); err != nil { - return nil, err - } - - // Get URL for request - path, params, err := s.buildURL() - if err != nil { - return nil, err - } - - // Setup HTTP request body - var body interface{} - if s.bodyJson != nil { - body = s.bodyJson - } else { - body = s.bodyString - } - - // Get HTTP response - res, err := s.client.PerformRequest("GET", path, params, body) - if err != nil { - return nil, err - } - - // Return operation response - ret := new(PercolateResponse) - if err := s.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -// PercolateResponse is the response of PercolateService.Do. -type PercolateResponse struct { - TookInMillis int64 `json:"took"` // search time in milliseconds - Total int64 `json:"total"` // total matches - Matches []*PercolateMatch `json:"matches,omitempty"` - Facets SearchFacets `json:"facets,omitempty"` // results from facets - Aggregations Aggregations `json:"aggregations,omitempty"` // results from aggregations -} - -// PercolateMatch returns a single match in a PercolateResponse. -type PercolateMatch struct { - Index string `json:"_index,omitempty"` - Id string `json:"_id"` - Score float64 `json:"_score,omitempty"` -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/percolate_test.go b/vendor/gopkg.in/olivere/elastic.v2/percolate_test.go deleted file mode 100644 index cb4863d..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/percolate_test.go +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import "testing" - -func TestPercolate(t *testing.T) { - client := setupTestClientAndCreateIndex(t) //, SetTraceLog(log.New(os.Stdout, "", 0))) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - - // Add a document - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - // Register a query in the ".percolator" type. - search := NewSearchSource().Query(NewMatchQuery("message", "Golang")) - _, err = client.Index(). - Index(testIndexName).Type(".percolator").Id("1"). - BodyJson(search.Source()). - Do() - if err != nil { - t.Fatal(err) - } - - // Percolate should return our registered query - newTweet := tweet{User: "olivere", Message: "Golang is fun."} - res, err := client.Percolate(). - Index(testIndexName).Type("tweet"). - Doc(newTweet). // shortcut for: BodyJson(map[string]interface{}{"doc": newTweet}). - Pretty(true). - Do() - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Errorf("expected results != nil; got nil") - } - if res.Total != 1 { - t.Fatalf("expected 1 result; got: %d", res.Total) - } - if res.Matches == nil { - t.Fatalf("expected Matches; got: %v", res.Matches) - } - matches := res.Matches - if matches == nil { - t.Fatalf("expected matches as map; got: %v", matches) - } - if len(matches) != 1 { - t.Fatalf("expected %d registered matches; got: %d", 1, len(matches)) - } - if matches[0].Id != "1" { - t.Errorf("expected to return query %q; got: %q", "1", matches[0].Id) - } - - // Percolating an existsing document should return our registered query - res, err = client.Percolate(). - Index(testIndexName).Type("tweet"). - Id("1"). - Pretty(true). - Do() - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Errorf("expected results != nil; got nil") - } - if res.Total != 1 { - t.Fatalf("expected 1 result; got: %d", res.Total) - } - if res.Matches == nil { - t.Fatalf("expected Matches; got: %v", res.Matches) - } - matches = res.Matches - if matches == nil { - t.Fatalf("expected matches as map; got: %v", matches) - } - if len(matches) != 1 { - t.Fatalf("expected %d registered matches; got: %d", 1, len(matches)) - } - if matches[0].Id != "1" { - t.Errorf("expected to return query %q; got: %q", "1", matches[0].Id) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/ping_test.go b/vendor/gopkg.in/olivere/elastic.v2/ping_test.go deleted file mode 100644 index ba76dcf..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/ping_test.go +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "net/http" - "testing" -) - -func TestPingGet(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - res, code, err := client.Ping().Do() - if err != nil { - t.Fatal(err) - } - if code != http.StatusOK { - t.Errorf("expected status code = %d; got %d", http.StatusOK, code) - } - if res == nil { - t.Fatalf("expected to return result, got: %v", res) - } - if res.Status != http.StatusOK { - t.Errorf("expected Status = %d; got %d", http.StatusOK, res.Status) - } - if res.Name == "" { - t.Errorf("expected Name != \"\"; got %q", res.Name) - } - if res.Version.Number == "" { - t.Errorf("expected Version.Number != \"\"; got %q", res.Version.Number) - } -} - -func TestPingHead(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - res, code, err := client.Ping().HttpHeadOnly(true).Do() - if err != nil { - t.Fatal(err) - } - if code != http.StatusOK { - t.Errorf("expected status code = %d; got %d", http.StatusOK, code) - } - if res != nil { - t.Errorf("expected not to return result, got: %v", res) - } -} - -func TestPingHeadFailure(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - res, code, err := client.Ping(). - URL("http://127.0.0.1:9299"). - HttpHeadOnly(true). - Do() - if err == nil { - t.Error("expected error, got nil") - } - if code == http.StatusOK { - t.Errorf("expected status code != %d; got %d", http.StatusOK, code) - } - if res != nil { - t.Errorf("expected not to return result, got: %v", res) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/put_mapping.go b/vendor/gopkg.in/olivere/elastic.v2/put_mapping.go deleted file mode 100644 index 7cf0542..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/put_mapping.go +++ /dev/null @@ -1,221 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "log" - "net/url" - "strings" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -var ( - _ = fmt.Print - _ = log.Print - _ = strings.Index - _ = uritemplates.Expand - _ = url.Parse -) - -// PutMappingService allows to register specific mapping definition -// for a specific type. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-put-mapping.html. -type PutMappingService struct { - client *Client - pretty bool - typ string - index []string - masterTimeout string - ignoreUnavailable *bool - allowNoIndices *bool - expandWildcards string - ignoreConflicts *bool - timeout string - bodyJson map[string]interface{} - bodyString string -} - -// NewPutMappingService creates a new PutMappingService. -func NewPutMappingService(client *Client) *PutMappingService { - return &PutMappingService{ - client: client, - index: make([]string, 0), - } -} - -// Index is a list of index names the mapping should be added to -// (supports wildcards); use `_all` or omit to add the mapping on all indices. -func (s *PutMappingService) Index(index ...string) *PutMappingService { - s.index = append(s.index, index...) - return s -} - -// Type is the name of the document type. -func (s *PutMappingService) Type(typ string) *PutMappingService { - s.typ = typ - return s -} - -// Timeout is an explicit operation timeout. -func (s *PutMappingService) Timeout(timeout string) *PutMappingService { - s.timeout = timeout - return s -} - -// MasterTimeout specifies the timeout for connection to master. -func (s *PutMappingService) MasterTimeout(masterTimeout string) *PutMappingService { - s.masterTimeout = masterTimeout - return s -} - -// IgnoreUnavailable indicates whether specified concrete indices should be -// ignored when unavailable (missing or closed). -func (s *PutMappingService) IgnoreUnavailable(ignoreUnavailable bool) *PutMappingService { - s.ignoreUnavailable = &ignoreUnavailable - return s -} - -// AllowNoIndices indicates whether to ignore if a wildcard indices -// expression resolves into no concrete indices. -// This includes `_all` string or when no indices have been specified. -func (s *PutMappingService) AllowNoIndices(allowNoIndices bool) *PutMappingService { - s.allowNoIndices = &allowNoIndices - return s -} - -// ExpandWildcards indicates whether to expand wildcard expression to -// concrete indices that are open, closed or both. -func (s *PutMappingService) ExpandWildcards(expandWildcards string) *PutMappingService { - s.expandWildcards = expandWildcards - return s -} - -// IgnoreConflicts specifies whether to ignore conflicts while updating -// the mapping (default: false). -func (s *PutMappingService) IgnoreConflicts(ignoreConflicts bool) *PutMappingService { - s.ignoreConflicts = &ignoreConflicts - return s -} - -// Pretty indicates that the JSON response be indented and human readable. -func (s *PutMappingService) Pretty(pretty bool) *PutMappingService { - s.pretty = pretty - return s -} - -// BodyJson contains the mapping definition. -func (s *PutMappingService) BodyJson(mapping map[string]interface{}) *PutMappingService { - s.bodyJson = mapping - return s -} - -// BodyString is the mapping definition serialized as a string. -func (s *PutMappingService) BodyString(mapping string) *PutMappingService { - s.bodyString = mapping - return s -} - -// buildURL builds the URL for the operation. -func (s *PutMappingService) buildURL() (string, url.Values, error) { - var err error - var path string - - // Build URL: Typ MUST be specified and is verified in Validate. - if len(s.index) > 0 { - path, err = uritemplates.Expand("/{index}/_mapping/{type}", map[string]string{ - "index": strings.Join(s.index, ","), - "type": s.typ, - }) - } else { - path, err = uritemplates.Expand("/_mapping/{type}", map[string]string{ - "type": s.typ, - }) - } - if err != nil { - return "", url.Values{}, err - } - - // Add query string parameters - params := url.Values{} - if s.pretty { - params.Set("pretty", "1") - } - if s.ignoreUnavailable != nil { - params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) - } - if s.allowNoIndices != nil { - params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) - } - if s.expandWildcards != "" { - params.Set("expand_wildcards", s.expandWildcards) - } - if s.ignoreConflicts != nil { - params.Set("ignore_conflicts", fmt.Sprintf("%v", *s.ignoreConflicts)) - } - if s.timeout != "" { - params.Set("timeout", s.timeout) - } - if s.masterTimeout != "" { - params.Set("master_timeout", s.masterTimeout) - } - return path, params, nil -} - -// Validate checks if the operation is valid. -func (s *PutMappingService) Validate() error { - var invalid []string - if s.typ == "" { - invalid = append(invalid, "Type") - } - if s.bodyString == "" && s.bodyJson == nil { - invalid = append(invalid, "BodyJson") - } - if len(invalid) > 0 { - return fmt.Errorf("missing required fields: %v", invalid) - } - return nil -} - -// Do executes the operation. -func (s *PutMappingService) Do() (*PutMappingResponse, error) { - // Check pre-conditions - if err := s.Validate(); err != nil { - return nil, err - } - - // Get URL for request - path, params, err := s.buildURL() - if err != nil { - return nil, err - } - - // Setup HTTP request body - var body interface{} - if s.bodyJson != nil { - body = s.bodyJson - } else { - body = s.bodyString - } - - // Get HTTP response - res, err := s.client.PerformRequest("PUT", path, params, body) - if err != nil { - return nil, err - } - - // Return operation response - ret := new(PutMappingResponse) - if err := s.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -// PutMappingResponse is the response of PutMappingService.Do. -type PutMappingResponse struct { - Acknowledged bool `json:"acknowledged"` -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/put_mapping_test.go b/vendor/gopkg.in/olivere/elastic.v2/put_mapping_test.go deleted file mode 100644 index d6245c2..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/put_mapping_test.go +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "testing" -) - -func TestPutMappingURL(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tests := []struct { - Indices []string - Type string - Expected string - }{ - { - []string{}, - "tweet", - "/_mapping/tweet", - }, - { - []string{"*"}, - "tweet", - "/%2A/_mapping/tweet", - }, - { - []string{"store-1", "store-2"}, - "tweet", - "/store-1%2Cstore-2/_mapping/tweet", - }, - } - - for _, test := range tests { - path, _, err := client.PutMapping().Index(test.Indices...).Type(test.Type).buildURL() - if err != nil { - t.Fatal(err) - } - if path != test.Expected { - t.Errorf("expected %q; got: %q", test.Expected, path) - } - } -} - -func TestMappingLifecycle(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - mapping := `{ - "tweetdoc":{ - "properties":{ - "message":{ - "type":"string", - "store":true - } - } - } - }` - - putresp, err := client.PutMapping().Index(testIndexName2).Type("tweetdoc").BodyString(mapping).Do() - if err != nil { - t.Fatalf("expected put mapping to succeed; got: %v", err) - } - if putresp == nil { - t.Fatalf("expected put mapping response; got: %v", putresp) - } - if !putresp.Acknowledged { - t.Fatalf("expected put mapping ack; got: %v", putresp.Acknowledged) - } - - getresp, err := client.GetMapping().Index(testIndexName2).Type("tweetdoc").Do() - if err != nil { - t.Fatalf("expected get mapping to succeed; got: %v", err) - } - if getresp == nil { - t.Fatalf("expected get mapping response; got: %v", getresp) - } - props, ok := getresp[testIndexName2] - if !ok { - t.Fatalf("expected JSON root to be of type map[string]interface{}; got: %#v", props) - } - - delresp, err := client.DeleteMapping().Index(testIndexName2).Type("tweetdoc").Do() - if err != nil { - t.Fatalf("expected delete mapping to succeed; got: %v", err) - } - if delresp == nil { - t.Fatalf("expected delete mapping response; got: %v", delresp) - } - if !delresp.Acknowledged { - t.Fatalf("expected delete mapping ack; got: %v", delresp.Acknowledged) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/put_template.go b/vendor/gopkg.in/olivere/elastic.v2/put_template.go deleted file mode 100644 index 7169e75..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/put_template.go +++ /dev/null @@ -1,151 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "net/url" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -// PutTemplateService creates or updates a search template. -// The documentation can be found at -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/master/search-template.html. -type PutTemplateService struct { - client *Client - pretty bool - id string - opType string - version *int - versionType string - bodyJson interface{} - bodyString string -} - -// NewPutTemplateService creates a new PutTemplateService. -func NewPutTemplateService(client *Client) *PutTemplateService { - return &PutTemplateService{ - client: client, - } -} - -// Id is the template ID. -func (s *PutTemplateService) Id(id string) *PutTemplateService { - s.id = id - return s -} - -// OpType is an explicit operation type. -func (s *PutTemplateService) OpType(opType string) *PutTemplateService { - s.opType = opType - return s -} - -// Version is an explicit version number for concurrency control. -func (s *PutTemplateService) Version(version int) *PutTemplateService { - s.version = &version - return s -} - -// VersionType is a specific version type. -func (s *PutTemplateService) VersionType(versionType string) *PutTemplateService { - s.versionType = versionType - return s -} - -// BodyJson is the document as a JSON serializable object. -func (s *PutTemplateService) BodyJson(body interface{}) *PutTemplateService { - s.bodyJson = body - return s -} - -// BodyString is the document as a string. -func (s *PutTemplateService) BodyString(body string) *PutTemplateService { - s.bodyString = body - return s -} - -// buildURL builds the URL for the operation. -func (s *PutTemplateService) buildURL() (string, url.Values, error) { - // Build URL - path, err := uritemplates.Expand("/_search/template/{id}", map[string]string{ - "id": s.id, - }) - if err != nil { - return "", url.Values{}, err - } - - // Add query string parameters - params := url.Values{} - if s.version != nil { - params.Set("version", fmt.Sprintf("%d", *s.version)) - } - if s.versionType != "" { - params.Set("version_type", s.versionType) - } - if s.opType != "" { - params.Set("op_type", s.opType) - } - - return path, params, nil -} - -// Validate checks if the operation is valid. -func (s *PutTemplateService) Validate() error { - var invalid []string - if s.id == "" { - invalid = append(invalid, "Id") - } - if s.bodyString == "" && s.bodyJson == nil { - invalid = append(invalid, "BodyJson") - } - if len(invalid) > 0 { - return fmt.Errorf("missing required fields: %v", invalid) - } - return nil -} - -// Do executes the operation. -func (s *PutTemplateService) Do() (*PutTemplateResponse, error) { - // Check pre-conditions - if err := s.Validate(); err != nil { - return nil, err - } - - // Get URL for request - path, params, err := s.buildURL() - if err != nil { - return nil, err - } - - // Setup HTTP request body - var body interface{} - if s.bodyJson != nil { - body = s.bodyJson - } else { - body = s.bodyString - } - - // Get HTTP response - res, err := s.client.PerformRequest("PUT", path, params, body) - if err != nil { - return nil, err - } - - // Return operation response - ret := new(PutTemplateResponse) - if err := s.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -// PutTemplateResponse is the response of PutTemplateService.Do. -type PutTemplateResponse struct { - Id string `json:"_id"` - Version int `json:"_version"` - Created bool `json:"created"` -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/query.go b/vendor/gopkg.in/olivere/elastic.v2/query.go deleted file mode 100644 index 0c9e670..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/query.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// Represents the generic query interface. -// A querys' only purpose is to return the -// source of the query as a JSON-serializable -// object. Returning a map[string]interface{} -// will do. -type Query interface { - Source() interface{} -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/refresh.go b/vendor/gopkg.in/olivere/elastic.v2/refresh.go deleted file mode 100644 index ab71306..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/refresh.go +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "net/url" - "strings" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -type RefreshService struct { - client *Client - indices []string - force *bool - pretty bool -} - -func NewRefreshService(client *Client) *RefreshService { - builder := &RefreshService{ - client: client, - indices: make([]string, 0), - } - return builder -} - -func (s *RefreshService) Index(index string) *RefreshService { - s.indices = append(s.indices, index) - return s -} - -func (s *RefreshService) Indices(indices ...string) *RefreshService { - s.indices = append(s.indices, indices...) - return s -} - -func (s *RefreshService) Force(force bool) *RefreshService { - s.force = &force - return s -} - -func (s *RefreshService) Pretty(pretty bool) *RefreshService { - s.pretty = pretty - return s -} - -func (s *RefreshService) Do() (*RefreshResult, error) { - // Build url - path := "/" - - // Indices part - indexPart := make([]string, 0) - for _, index := range s.indices { - index, err := uritemplates.Expand("{index}", map[string]string{ - "index": index, - }) - if err != nil { - return nil, err - } - indexPart = append(indexPart, index) - } - if len(indexPart) > 0 { - path += strings.Join(indexPart, ",") - } - - path += "/_refresh" - - // Parameters - params := make(url.Values) - if s.force != nil { - params.Set("force", fmt.Sprintf("%v", *s.force)) - } - if s.pretty { - params.Set("pretty", fmt.Sprintf("%v", s.pretty)) - } - - // Get response - res, err := s.client.PerformRequest("POST", path, params, nil) - if err != nil { - return nil, err - } - - // Return result - ret := new(RefreshResult) - if err := s.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -// -- Result of a refresh request. - -type RefreshResult struct { - Shards shardsInfo `json:"_shards,omitempty"` -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/refresh_test.go b/vendor/gopkg.in/olivere/elastic.v2/refresh_test.go deleted file mode 100644 index 885e633..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/refresh_test.go +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "testing" -) - -func TestRefresh(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add some documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Refresh indices - res, err := client.Refresh(testIndexName, testIndexName2).Do() - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatal("expected result; got nil") - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/reindexer.go b/vendor/gopkg.in/olivere/elastic.v2/reindexer.go deleted file mode 100644 index 5810f19..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/reindexer.go +++ /dev/null @@ -1,270 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "errors" -) - -// Reindexer simplifies the process of reindexing an index. You typically -// reindex a source index to a target index. However, you can also specify -// a query that filters out documents from the source index before bulk -// indexing them into the target index. The caller may also specify a -// different client for the target, e.g. when copying indices from one -// Elasticsearch cluster to another. -// -// Internally, the Reindex users a scan and scroll operation on the source -// index and bulk indexing to push data into the target index. -// -// By default the reindexer fetches the _source, _parent, and _routing -// attributes from the source index, using the provided CopyToTargetIndex -// will copy those attributes into the destinationIndex. -// This behaviour can be overridden by setting the ScanFields and providing a -// custom ReindexerFunc. -// -// The caller is responsible for setting up and/or clearing the target index -// before starting the reindex process. -// -// See http://www.elastic.co/guide/en/elasticsearch/guide/current/reindex.html -// for more information about reindexing. -type Reindexer struct { - sourceClient, targetClient *Client - sourceIndex string - query Query - scanFields []string - bulkSize int - size int - scroll string - reindexerFunc ReindexerFunc - progress ReindexerProgressFunc - statsOnly bool -} - -// A ReindexerFunc receives each hit from the sourceIndex. -// It can choose to add any number of BulkableRequests to the bulkService. -type ReindexerFunc func(hit *SearchHit, bulkService *BulkService) error - -// CopyToTargetIndex returns a ReindexerFunc that copies the SearchHit's -// _source, _parent, and _routing attributes into the targetIndex -func CopyToTargetIndex(targetIndex string) ReindexerFunc { - return func(hit *SearchHit, bulkService *BulkService) error { - // TODO(oe) Do we need to deserialize here? - source := make(map[string]interface{}) - if err := json.Unmarshal(*hit.Source, &source); err != nil { - return err - } - req := NewBulkIndexRequest().Index(targetIndex).Type(hit.Type).Id(hit.Id).Doc(source) - if parent, ok := hit.Fields["_parent"].(string); ok { - req.Parent(parent) - } - if routing, ok := hit.Fields["_routing"].(string); ok { - req.Routing(routing) - } - bulkService.Add(req) - return nil - } -} - -// ReindexerProgressFunc is a callback that can be used with Reindexer -// to report progress while reindexing data. -type ReindexerProgressFunc func(current, total int64) - -// ReindexerResponse is returned from the Do func in a Reindexer. -// By default, it returns the number of succeeded and failed bulk operations. -// To return details about all failed items, set StatsOnly to false in -// Reindexer. -type ReindexerResponse struct { - Success int64 - Failed int64 - Errors []*BulkResponseItem -} - -// NewReindexer returns a new Reindexer. -func NewReindexer(client *Client, source string, reindexerFunc ReindexerFunc) *Reindexer { - return &Reindexer{ - sourceClient: client, - sourceIndex: source, - reindexerFunc: reindexerFunc, - statsOnly: true, - } -} - -// TargetClient specifies a different client for the target. This is -// necessary when the target index is in a different Elasticsearch cluster. -// By default, the source and target clients are the same. -func (ix *Reindexer) TargetClient(c *Client) *Reindexer { - ix.targetClient = c - return ix -} - -// Query specifies the query to apply to the source. It filters out those -// documents to be indexed into target. A nil query does not filter out any -// documents. -func (ix *Reindexer) Query(q Query) *Reindexer { - ix.query = q - return ix -} - -// ScanFields specifies the fields the scan query should load. -// The default fields are _source, _parent, _routing. -func (ix *Reindexer) ScanFields(scanFields ...string) *Reindexer { - ix.scanFields = scanFields - return ix -} - -// BulkSize returns the number of documents to send to Elasticsearch per chunk. -// The default is 500. -func (ix *Reindexer) BulkSize(bulkSize int) *Reindexer { - ix.bulkSize = bulkSize - return ix -} - -// Size is the number of results to return per shard, not per request. -// So a size of 10 which hits 5 shards will return a maximum of 50 results -// per scan request. -func (ix *Reindexer) Size(size int) *Reindexer { - ix.size = size - return ix -} - -// Scroll specifies for how long the scroll operation on the source index -// should be maintained. The default is 5m. -func (ix *Reindexer) Scroll(timeout string) *Reindexer { - ix.scroll = timeout - return ix -} - -// Progress indicates a callback that will be called while indexing. -func (ix *Reindexer) Progress(f ReindexerProgressFunc) *Reindexer { - ix.progress = f - return ix -} - -// StatsOnly indicates whether the Do method should return details e.g. about -// the documents that failed while indexing. It is true by default, i.e. only -// the number of documents that succeeded/failed are returned. Set to false -// if you want all the details. -func (ix *Reindexer) StatsOnly(statsOnly bool) *Reindexer { - ix.statsOnly = statsOnly - return ix -} - -// Do starts the reindexing process. -func (ix *Reindexer) Do() (*ReindexerResponse, error) { - if ix.sourceClient == nil { - return nil, errors.New("no source client") - } - if ix.sourceIndex == "" { - return nil, errors.New("no source index") - } - if ix.targetClient == nil { - ix.targetClient = ix.sourceClient - } - if ix.scanFields == nil { - ix.scanFields = []string{"_source", "_parent", "_routing"} - } - if ix.bulkSize <= 0 { - ix.bulkSize = 500 - } - if ix.scroll == "" { - ix.scroll = "5m" - } - - // Count total to report progress (if necessary) - var err error - var current, total int64 - if ix.progress != nil { - total, err = ix.count() - if err != nil { - return nil, err - } - } - - // Prepare scan and scroll to iterate through the source index - scanner := ix.sourceClient.Scan(ix.sourceIndex).Scroll(ix.scroll).Fields(ix.scanFields...) - if ix.query != nil { - scanner = scanner.Query(ix.query) - } - if ix.size > 0 { - scanner = scanner.Size(ix.size) - } - cursor, err := scanner.Do() - - bulk := ix.targetClient.Bulk() - - ret := &ReindexerResponse{ - Errors: make([]*BulkResponseItem, 0), - } - - // Main loop iterates through the source index and bulk indexes into target. - for { - docs, err := cursor.Next() - if err == EOS { - break - } - if err != nil { - return ret, err - } - - if docs.TotalHits() > 0 { - for _, hit := range docs.Hits.Hits { - if ix.progress != nil { - current++ - ix.progress(current, total) - } - - err := ix.reindexerFunc(hit, bulk) - if err != nil { - return ret, err - } - - if bulk.NumberOfActions() >= ix.bulkSize { - bulk, err = ix.commit(bulk, ret) - if err != nil { - return ret, err - } - } - } - } - } - - // Final flush - if bulk.NumberOfActions() > 0 { - bulk, err = ix.commit(bulk, ret) - if err != nil { - return ret, err - } - bulk = nil - } - - return ret, nil -} - -// count returns the number of documents in the source index. -// The query is taken into account, if specified. -func (ix *Reindexer) count() (int64, error) { - service := ix.sourceClient.Count(ix.sourceIndex) - if ix.query != nil { - service = service.Query(ix.query) - } - return service.Do() -} - -// commit commits a bulk, updates the stats, and returns a fresh bulk service. -func (ix *Reindexer) commit(bulk *BulkService, ret *ReindexerResponse) (*BulkService, error) { - bres, err := bulk.Do() - if err != nil { - return nil, err - } - ret.Success += int64(len(bres.Succeeded())) - failed := bres.Failed() - ret.Failed += int64(len(failed)) - if !ix.statsOnly { - ret.Errors = append(ret.Errors, failed...) - } - bulk = ix.targetClient.Bulk() - return bulk, nil -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/reindexer_test.go b/vendor/gopkg.in/olivere/elastic.v2/reindexer_test.go deleted file mode 100644 index 82f839e..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/reindexer_test.go +++ /dev/null @@ -1,292 +0,0 @@ -package elastic - -import ( - "encoding/json" - "testing" - "time" -) - -func TestReindexer(t *testing.T) { - - client := setupTestClientAndCreateIndexAndAddDocs(t) - - sourceCount, err := client.Count(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - if sourceCount <= 0 { - t.Fatalf("expected more than %d documents; got: %d", 0, sourceCount) - } - - targetCount, err := client.Count(testIndexName2).Do() - if err != nil { - t.Fatal(err) - } - if targetCount != 0 { - t.Fatalf("expected %d documents; got: %d", 0, targetCount) - } - - r := NewReindexer(client, testIndexName, CopyToTargetIndex(testIndexName2)) - ret, err := r.Do() - if err != nil { - t.Fatal(err) - } - if ret == nil { - t.Fatalf("expected result != %v; got: %v", nil, ret) - } - if ret.Success != sourceCount { - t.Errorf("expected success = %d; got: %d", sourceCount, ret.Success) - } - if ret.Failed != 0 { - t.Errorf("expected failed = %d; got: %d", 0, ret.Failed) - } - if len(ret.Errors) != 0 { - t.Errorf("expected to return no errors by default; got: %v", ret.Errors) - } - - if _, err := client.Flush().Index(testIndexName2).Do(); err != nil { - t.Fatal(err) - } - - targetCount, err = client.Count(testIndexName2).Do() - if err != nil { - t.Fatal(err) - } - if targetCount != sourceCount { - t.Fatalf("expected %d documents; got: %d", sourceCount, targetCount) - } -} - -func TestReindexerWithQuery(t *testing.T) { - client := setupTestClientAndCreateIndexAndAddDocs(t) - - q := NewTermQuery("user", "olivere") - - sourceCount, err := client.Count(testIndexName).Query(q).Do() - if err != nil { - t.Fatal(err) - } - if sourceCount <= 0 { - t.Fatalf("expected more than %d documents; got: %d", 0, sourceCount) - } - - targetCount, err := client.Count(testIndexName2).Do() - if err != nil { - t.Fatal(err) - } - if targetCount != 0 { - t.Fatalf("expected %d documents; got: %d", 0, targetCount) - } - - r := NewReindexer(client, testIndexName, CopyToTargetIndex(testIndexName2)) - r = r.Query(q) - ret, err := r.Do() - if err != nil { - t.Fatal(err) - } - if ret == nil { - t.Fatalf("expected result != %v; got: %v", nil, ret) - } - if ret.Success != sourceCount { - t.Errorf("expected success = %d; got: %d", sourceCount, ret.Success) - } - if ret.Failed != 0 { - t.Errorf("expected failed = %d; got: %d", 0, ret.Failed) - } - if len(ret.Errors) != 0 { - t.Errorf("expected to return no errors by default; got: %v", ret.Errors) - } - - if _, err := client.Flush().Index(testIndexName2).Do(); err != nil { - t.Fatal(err) - } - - targetCount, err = client.Count(testIndexName2).Do() - if err != nil { - t.Fatal(err) - } - if targetCount != sourceCount { - t.Fatalf("expected %d documents; got: %d", sourceCount, targetCount) - } -} - -func TestReindexerProgress(t *testing.T) { - client := setupTestClientAndCreateIndexAndAddDocs(t) - - sourceCount, err := client.Count(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - if sourceCount <= 0 { - t.Fatalf("expected more than %d documents; got: %d", 0, sourceCount) - } - - var calls int64 - totalsOk := true - progress := func(current, total int64) { - calls += 1 - totalsOk = totalsOk && total == sourceCount - } - - r := NewReindexer(client, testIndexName, CopyToTargetIndex(testIndexName2)) - r = r.Progress(progress) - ret, err := r.Do() - if err != nil { - t.Fatal(err) - } - if ret == nil { - t.Fatalf("expected result != %v; got: %v", nil, ret) - } - if ret.Success != sourceCount { - t.Errorf("expected success = %d; got: %d", sourceCount, ret.Success) - } - if ret.Failed != 0 { - t.Errorf("expected failed = %d; got: %d", 0, ret.Failed) - } - if len(ret.Errors) != 0 { - t.Errorf("expected to return no errors by default; got: %v", ret.Errors) - } - - if calls != sourceCount { - t.Errorf("expected progress to be called %d times; got: %d", sourceCount, calls) - } - if !totalsOk { - t.Errorf("expected totals in progress to be %d", sourceCount) - } -} - -func TestReindexerWithTargetClient(t *testing.T) { - sourceClient := setupTestClientAndCreateIndexAndAddDocs(t) - targetClient, err := NewClient() - if err != nil { - t.Fatal(err) - } - - sourceCount, err := sourceClient.Count(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - if sourceCount <= 0 { - t.Fatalf("expected more than %d documents; got: %d", 0, sourceCount) - } - - // Timing issue with the target client - time.Sleep(2 * time.Second) - - targetCount, err := targetClient.Count(testIndexName2).Do() - if err != nil { - t.Fatal(err) - } - if targetCount != 0 { - t.Fatalf("expected %d documents; got: %d", 0, targetCount) - } - - r := NewReindexer(sourceClient, testIndexName, CopyToTargetIndex(testIndexName2)) - r = r.TargetClient(targetClient) - ret, err := r.Do() - if err != nil { - t.Fatal(err) - } - if ret == nil { - t.Fatalf("expected result != %v; got: %v", nil, ret) - } - if ret.Success != sourceCount { - t.Errorf("expected success = %d; got: %d", sourceCount, ret.Success) - } - if ret.Failed != 0 { - t.Errorf("expected failed = %d; got: %d", 0, ret.Failed) - } - if len(ret.Errors) != 0 { - t.Errorf("expected to return no errors by default; got: %v", ret.Errors) - } - - if _, err := targetClient.Flush().Index(testIndexName2).Do(); err != nil { - t.Fatal(err) - } - - targetCount, err = targetClient.Count(testIndexName2).Do() - if err != nil { - t.Fatal(err) - } - if targetCount != sourceCount { - t.Fatalf("expected %d documents; got: %d", sourceCount, targetCount) - } -} - -// TestReindexerPreservingTTL shows how a caller can take control of the -// copying process by providing ScanFields and a custom ReindexerFunc. -func TestReindexerPreservingTTL(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").TTL("999999").Version(10).VersionType("external").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - sourceCount, err := client.Count(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - if sourceCount <= 0 { - t.Fatalf("expected more than %d documents; got: %d", 0, sourceCount) - } - - targetCount, err := client.Count(testIndexName2).Do() - if err != nil { - t.Fatal(err) - } - if targetCount != 0 { - t.Fatalf("expected %d documents; got: %d", 0, targetCount) - } - - // Carries over the source item's ttl to the reindexed item - copyWithTTL := func(hit *SearchHit, bulkService *BulkService) error { - source := make(map[string]interface{}) - if err := json.Unmarshal(*hit.Source, &source); err != nil { - return err - } - req := NewBulkIndexRequest().Index(testIndexName2).Type(hit.Type).Id(hit.Id).Doc(source) - if ttl, ok := hit.Fields["_ttl"].(float64); ok { - req.Ttl(int64(ttl)) - } - bulkService.Add(req) - return nil - } - - r := NewReindexer(client, testIndexName, copyWithTTL).ScanFields("_source", "_ttl") - - ret, err := r.Do() - if err != nil { - t.Fatal(err) - } - if ret == nil { - t.Fatalf("expected result != %v; got: %v", nil, ret) - } - if ret.Success != sourceCount { - t.Errorf("expected success = %d; got: %d", sourceCount, ret.Success) - } - if ret.Failed != 0 { - t.Errorf("expected failed = %d; got: %d", 0, ret.Failed) - } - if len(ret.Errors) != 0 { - t.Errorf("expected to return no errors by default; got: %v", ret.Errors) - } - - getResult, err := client.Get().Index(testIndexName2).Id("1").Fields("_source", "_ttl").Do() - if err != nil { - t.Fatal(err) - } - - _, ok := getResult.Fields["_ttl"].(float64) - if !ok { - t.Errorf("Cannot retrieve TTL from reindexed document") - } - -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/request.go b/vendor/gopkg.in/olivere/elastic.v2/request.go deleted file mode 100644 index 1347e1b..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/request.go +++ /dev/null @@ -1,123 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "bytes" - "compress/gzip" - "encoding/json" - "io" - "io/ioutil" - "net/http" - "runtime" - "strings" -) - -// Elasticsearch-specific HTTP request -type Request http.Request - -// NewRequest is a http.Request and adds features such as encoding the body. -func NewRequest(method, url string) (*Request, error) { - req, err := http.NewRequest(method, url, nil) - if err != nil { - return nil, err - } - req.Header.Add("User-Agent", "elastic/"+Version+" ("+runtime.GOOS+"-"+runtime.GOARCH+")") - req.Header.Add("Accept", "application/json") - return (*Request)(req), nil -} - -// SetBasicAuth wraps http.Request's SetBasicAuth. -func (r *Request) SetBasicAuth(username, password string) { - ((*http.Request)(r)).SetBasicAuth(username, password) -} - -// SetBody encodes the body in the request. Optionally, it performs GZIP compression. -func (r *Request) SetBody(body interface{}, gzipCompress bool) error { - switch b := body.(type) { - case string: - if gzipCompress { - return r.setBodyGzip(b) - } else { - return r.setBodyString(b) - } - default: - if gzipCompress { - return r.setBodyGzip(body) - } else { - return r.setBodyJson(body) - } - } -} - -// setBodyJson encodes the body as a struct to be marshaled via json.Marshal. -func (r *Request) setBodyJson(data interface{}) error { - body, err := json.Marshal(data) - if err != nil { - return err - } - r.Header.Set("Content-Type", "application/json") - r.setBodyReader(bytes.NewReader(body)) - return nil -} - -// setBodyString encodes the body as a string. -func (r *Request) setBodyString(body string) error { - return r.setBodyReader(strings.NewReader(body)) -} - -// setBodyGzip gzip's the body. It accepts both strings and structs as body. -// The latter will be encoded via json.Marshal. -func (r *Request) setBodyGzip(body interface{}) error { - switch b := body.(type) { - case string: - buf := new(bytes.Buffer) - w := gzip.NewWriter(buf) - if _, err := w.Write([]byte(b)); err != nil { - return err - } - if err := w.Close(); err != nil { - return err - } - r.Header.Add("Content-Encoding", "gzip") - r.Header.Add("Vary", "Accept-Encoding") - return r.setBodyReader(bytes.NewReader(buf.Bytes())) - default: - data, err := json.Marshal(b) - if err != nil { - return err - } - buf := new(bytes.Buffer) - w := gzip.NewWriter(buf) - if _, err := w.Write(data); err != nil { - return err - } - if err := w.Close(); err != nil { - return err - } - r.Header.Add("Content-Encoding", "gzip") - r.Header.Add("Vary", "Accept-Encoding") - r.Header.Set("Content-Type", "application/json") - return r.setBodyReader(bytes.NewReader(buf.Bytes())) - } -} - -// setBodyReader writes the body from an io.Reader. -func (r *Request) setBodyReader(body io.Reader) error { - rc, ok := body.(io.ReadCloser) - if !ok && body != nil { - rc = ioutil.NopCloser(body) - } - r.Body = rc - if body != nil { - switch v := body.(type) { - case *strings.Reader: - r.ContentLength = int64(v.Len()) - case *bytes.Buffer: - r.ContentLength = int64(v.Len()) - } - } - return nil -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/retrier.go b/vendor/gopkg.in/olivere/elastic.v2/retrier.go deleted file mode 100644 index 750447e..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/retrier.go +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "net/http" - "time" -) - -// RetrierFunc specifies the signature of a Retry function. -type RetrierFunc func(int, *http.Request, *http.Response, error) (time.Duration, bool, error) - -// Retrier decides whether to retry a failed HTTP request with Elasticsearch. -type Retrier interface { - // Retry is called when a request has failed. It decides whether to retry - // the call, how long to wait for the next call, or whether to return an - // error (which will be returned to the service that started the HTTP - // request in the first place). - // - // Callers may also use this to inspect the HTTP request/response and - // the error that happened. - Retry(retry int, req *http.Request, resp *http.Response, err error) (time.Duration, bool, error) -} - -// -- StopRetrier -- - -// StopRetrier is an implementation that does no retries. -type StopRetrier struct { -} - -// NewStopRetrier returns a retrier that does no retries. -func NewStopRetrier() *StopRetrier { - return &StopRetrier{} -} - -// Retry does not retry. -func (r *StopRetrier) Retry(retry int, req *http.Request, resp *http.Response, err error) (time.Duration, bool, error) { - return 0, false, nil -} - -// -- BackoffRetrier -- - -// BackoffRetrier is an implementation that does nothing but return nil on Retry. -type BackoffRetrier struct { - backoff Backoff -} - -// NewBackoffRetrier returns a retrier that uses the given backoff strategy. -func NewBackoffRetrier(backoff Backoff) *BackoffRetrier { - return &BackoffRetrier{backoff: backoff} -} - -// Retry calls into the backoff strategy and its wait interval. -func (r *BackoffRetrier) Retry(retry int, req *http.Request, resp *http.Response, err error) (time.Duration, bool, error) { - wait, goahead := r.backoff.Next(retry) - return wait, goahead, nil -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/retrier_test.go b/vendor/gopkg.in/olivere/elastic.v2/retrier_test.go deleted file mode 100644 index 0d68434..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/retrier_test.go +++ /dev/null @@ -1,122 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "errors" - "net/http" - "sync/atomic" - "testing" - "time" -) - -type testRetrier struct { - Retrier - N int64 - Err error -} - -func (r *testRetrier) Retry(retry int, req *http.Request, resp *http.Response, err error) (time.Duration, bool, error) { - atomic.AddInt64(&r.N, 1) - if r.Err != nil { - return 0, false, r.Err - } - return r.Retrier.Retry(retry, req, resp, err) -} - -func TestStopRetrier(t *testing.T) { - r := NewStopRetrier() - wait, ok, err := r.Retry(1, nil, nil, nil) - if want, got := 0*time.Second, wait; want != got { - t.Fatalf("expected %v, got %v", want, got) - } - if want, got := false, ok; want != got { - t.Fatalf("expected %v, got %v", want, got) - } - if err != nil { - t.Fatalf("expected nil, got %v", err) - } -} - -func TestRetrier(t *testing.T) { - var numFailedReqs int - fail := func(r *http.Request) (*http.Response, error) { - numFailedReqs += 1 - //return &http.Response{Request: r, StatusCode: 400}, nil - return nil, errors.New("request failed") - } - - tr := &failingTransport{path: "/fail", fail: fail} - httpClient := &http.Client{Transport: tr} - - retrier := &testRetrier{ - Retrier: NewBackoffRetrier(NewSimpleBackoff(100, 100, 100, 100, 100)), - } - - client, err := NewClient( - SetHttpClient(httpClient), - SetMaxRetries(5), - SetHealthcheck(false), - SetRetrier(retrier)) - if err != nil { - t.Fatal(err) - } - - res, err := client.PerformRequest("GET", "/fail", nil, nil) - if err == nil { - t.Fatal("expected error") - } - if res != nil { - t.Fatal("expected no response") - } - // Connection should be marked as dead after it failed - if numFailedReqs != 5 { - t.Errorf("expected %d failed requests; got: %d", 5, numFailedReqs) - } - if retrier.N != 5 { - t.Errorf("expected %d Retrier calls; got: %d", 5, retrier.N) - } -} - -func TestRetrierWithError(t *testing.T) { - var numFailedReqs int - fail := func(r *http.Request) (*http.Response, error) { - numFailedReqs += 1 - //return &http.Response{Request: r, StatusCode: 400}, nil - return nil, errors.New("request failed") - } - - tr := &failingTransport{path: "/fail", fail: fail} - httpClient := &http.Client{Transport: tr} - - kaboom := errors.New("kaboom") - retrier := &testRetrier{ - Err: kaboom, - Retrier: NewBackoffRetrier(NewSimpleBackoff(100, 100, 100, 100, 100)), - } - - client, err := NewClient( - SetHttpClient(httpClient), - SetMaxRetries(5), - SetHealthcheck(false), - SetRetrier(retrier)) - if err != nil { - t.Fatal(err) - } - - res, err := client.PerformRequest("GET", "/fail", nil, nil) - if err != kaboom { - t.Fatalf("expected %v, got %v", kaboom, err) - } - if res != nil { - t.Fatal("expected no response") - } - if numFailedReqs != 1 { - t.Errorf("expected %d failed requests; got: %d", 1, numFailedReqs) - } - if retrier.N != 1 { - t.Errorf("expected %d Retrier calls; got: %d", 1, retrier.N) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/run-es.sh b/vendor/gopkg.in/olivere/elastic.v2/run-es.sh deleted file mode 100755 index 5db398b..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/run-es.sh +++ /dev/null @@ -1 +0,0 @@ -docker run --rm --privileged=true -p 9200:9200 -p 9300:9300 -v "$PWD/config:/usr/share/elasticsearch/config" -e ES_JAVA_OPTS='-Xms1g -Xmx1g' elasticsearch:1.7.6 elasticsearch diff --git a/vendor/gopkg.in/olivere/elastic.v2/scan.go b/vendor/gopkg.in/olivere/elastic.v2/scan.go deleted file mode 100644 index e3b71fa..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/scan.go +++ /dev/null @@ -1,387 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "errors" - "fmt" - "net/url" - "strings" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -const ( - defaultKeepAlive = "5m" -) - -var ( - // End of stream (or scan) - EOS = errors.New("EOS") - - // No ScrollId - ErrNoScrollId = errors.New("no scrollId") -) - -// ScanService manages a cursor through documents in Elasticsearch. -type ScanService struct { - client *Client - indices []string - types []string - keepAlive string - searchSource *SearchSource - pretty bool - routing string - preference string - size *int - body interface{} -} - -// NewScanService creates a new service to iterate through the results -// of a query. -func NewScanService(client *Client) *ScanService { - builder := &ScanService{ - client: client, - searchSource: NewSearchSource().Query(NewMatchAllQuery()), - } - return builder -} - -// Index sets the name of the index to use for scan. -func (s *ScanService) Index(index string) *ScanService { - if s.indices == nil { - s.indices = make([]string, 0) - } - s.indices = append(s.indices, index) - return s -} - -// Indices sets the names of the indices to use for scan. -func (s *ScanService) Indices(indices ...string) *ScanService { - if s.indices == nil { - s.indices = make([]string, 0) - } - s.indices = append(s.indices, indices...) - return s -} - -// Type restricts the scan to the given type. -func (s *ScanService) Type(typ string) *ScanService { - if s.types == nil { - s.types = make([]string, 0) - } - s.types = append(s.types, typ) - return s -} - -// Types allows to restrict the scan to a list of types. -func (s *ScanService) Types(types ...string) *ScanService { - if s.types == nil { - s.types = make([]string, 0) - } - s.types = append(s.types, types...) - return s -} - -// Scroll is an alias for KeepAlive, the time to keep -// the cursor alive (e.g. "5m" for 5 minutes). -func (s *ScanService) Scroll(keepAlive string) *ScanService { - s.keepAlive = keepAlive - return s -} - -// KeepAlive sets the maximum time the cursor will be -// available before expiration (e.g. "5m" for 5 minutes). -func (s *ScanService) KeepAlive(keepAlive string) *ScanService { - s.keepAlive = keepAlive - return s -} - -// Fields tells Elasticsearch to only load specific fields from a search hit. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-fields.html. -func (s *ScanService) Fields(fields ...string) *ScanService { - s.searchSource = s.searchSource.Fields(fields...) - return s -} - -// SearchSource sets the search source builder to use with this service. -func (s *ScanService) SearchSource(searchSource *SearchSource) *ScanService { - s.searchSource = searchSource - if s.searchSource == nil { - s.searchSource = NewSearchSource().Query(NewMatchAllQuery()) - } - return s -} - -// Routing allows for (a comma-separated) list of specific routing values. -func (s *ScanService) Routing(routings ...string) *ScanService { - s.routing = strings.Join(routings, ",") - return s -} - -// Preference specifies the node or shard the operation should be -// performed on (default: "random"). -func (s *ScanService) Preference(preference string) *ScanService { - s.preference = preference - return s -} - -// Query sets the query to perform, e.g. MatchAllQuery. -func (s *ScanService) Query(query Query) *ScanService { - s.searchSource = s.searchSource.Query(query) - return s -} - -// PostFilter is executed as the last filter. It only affects the -// search hits but not facets. See -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-post-filter.html -// for details. -func (s *ScanService) PostFilter(postFilter Filter) *ScanService { - s.searchSource = s.searchSource.PostFilter(postFilter) - return s -} - -// FetchSource indicates whether the response should contain the stored -// _source for every hit. -func (s *ScanService) FetchSource(fetchSource bool) *ScanService { - s.searchSource = s.searchSource.FetchSource(fetchSource) - return s -} - -// FetchSourceContext indicates how the _source should be fetched. -func (s *ScanService) FetchSourceContext(fetchSourceContext *FetchSourceContext) *ScanService { - s.searchSource = s.searchSource.FetchSourceContext(fetchSourceContext) - return s -} - -// Version can be set to true to return a version for each search hit. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-version.html. -func (s *ScanService) Version(version bool) *ScanService { - s.searchSource = s.searchSource.Version(version) - return s -} - -// Sort the results by the given field, in the given order. -// Use the alternative SortWithInfo to use a struct to define the sorting. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-sort.html -// for detailed documentation of sorting. -func (s *ScanService) Sort(field string, ascending bool) *ScanService { - s.searchSource = s.searchSource.Sort(field, ascending) - return s -} - -// SortWithInfo defines how to sort results. -// Use the Sort func for a shortcut. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-sort.html -// for detailed documentation of sorting. -func (s *ScanService) SortWithInfo(info SortInfo) *ScanService { - s.searchSource = s.searchSource.SortWithInfo(info) - return s -} - -// SortBy defines how to sort results. -// Use the Sort func for a shortcut. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-sort.html -// for detailed documentation of sorting. -func (s *ScanService) SortBy(sorter ...Sorter) *ScanService { - s.searchSource = s.searchSource.SortBy(sorter...) - return s -} - -// Pretty enables the caller to indent the JSON output. -func (s *ScanService) Pretty(pretty bool) *ScanService { - s.pretty = pretty - return s -} - -// Size is the number of results to return per shard, not per request. -// So a size of 10 which hits 5 shards will return a maximum of 50 results -// per scan request. -func (s *ScanService) Size(size int) *ScanService { - s.size = &size - return s -} - -// Body sets the raw body to send to Elasticsearch. This can be e.g. a string, -// a map[string]interface{} or anything that can be serialized into JSON. -// Notice that setting the body disables the use of SearchSource and many -// other properties of the ScanService. -func (s *ScanService) Body(body interface{}) *ScanService { - s.body = body - return s -} - -// Do executes the query and returns a "server-side cursor". -func (s *ScanService) Do() (*ScanCursor, error) { - // Build url - path := "/" - - // Indices part - indexPart := make([]string, 0) - for _, index := range s.indices { - index, err := uritemplates.Expand("{index}", map[string]string{ - "index": index, - }) - if err != nil { - return nil, err - } - indexPart = append(indexPart, index) - } - if len(indexPart) > 0 { - path += strings.Join(indexPart, ",") - } - - // Types - typesPart := make([]string, 0) - for _, typ := range s.types { - typ, err := uritemplates.Expand("{type}", map[string]string{ - "type": typ, - }) - if err != nil { - return nil, err - } - typesPart = append(typesPart, typ) - } - if len(typesPart) > 0 { - path += "/" + strings.Join(typesPart, ",") - } - - // Search - path += "/_search" - - // Parameters - params := make(url.Values) - if !s.searchSource.hasSort() { - params.Set("search_type", "scan") - } - if s.pretty { - params.Set("pretty", fmt.Sprintf("%v", s.pretty)) - } - if s.keepAlive != "" { - params.Set("scroll", s.keepAlive) - } else { - params.Set("scroll", defaultKeepAlive) - } - if s.size != nil && *s.size > 0 { - params.Set("size", fmt.Sprintf("%d", *s.size)) - } - if s.routing != "" { - params.Set("routing", s.routing) - } - - // Get response - var body interface{} - if s.body != nil { - body = s.body - } else { - body = s.searchSource.Source() - } - res, err := s.client.PerformRequest("POST", path, params, body) - if err != nil { - return nil, err - } - - // Return result - searchResult := new(SearchResult) - if err := s.client.decoder.Decode(res.Body, searchResult); err != nil { - return nil, err - } - - cursor := NewScanCursor(s.client, s.keepAlive, s.pretty, searchResult) - - return cursor, nil -} - -// scanCursor represents a single page of results from -// an Elasticsearch Scan operation. -type ScanCursor struct { - Results *SearchResult - - client *Client - keepAlive string - pretty bool - currentPage int -} - -// newScanCursor returns a new initialized instance -// of scanCursor. -func NewScanCursor(client *Client, keepAlive string, pretty bool, searchResult *SearchResult) *ScanCursor { - return &ScanCursor{ - client: client, - keepAlive: keepAlive, - pretty: pretty, - Results: searchResult, - } -} - -// TotalHits is a convenience method that returns the number -// of hits the cursor will iterate through. -func (c *ScanCursor) TotalHits() int64 { - if c.Results.Hits == nil { - return 0 - } - return c.Results.Hits.TotalHits -} - -// Next returns the next search result or nil when all -// documents have been scanned. -// -// Usage: -// -// for { -// res, err := cursor.Next() -// if err == elastic.EOS { -// // End of stream (or scan) -// break -// } -// if err != nil { -// // Handle error -// } -// // Work with res -// } -// -func (c *ScanCursor) Next() (*SearchResult, error) { - if c.currentPage > 0 { - if c.Results.Hits == nil || len(c.Results.Hits.Hits) == 0 || c.Results.Hits.TotalHits == 0 { - return nil, EOS - } - } - if c.Results.ScrollId == "" { - return nil, EOS - } - - // Build url - path := "/_search/scroll" - - // Parameters - params := make(url.Values) - if c.pretty { - params.Set("pretty", fmt.Sprintf("%v", c.pretty)) - } - if c.keepAlive != "" { - params.Set("scroll", c.keepAlive) - } else { - params.Set("scroll", defaultKeepAlive) - } - - // Set body - body := c.Results.ScrollId - - // Get response - res, err := c.client.PerformRequest("POST", path, params, body) - if err != nil { - return nil, err - } - - // Return result - c.Results = &SearchResult{ScrollId: body} - if err := c.client.decoder.Decode(res.Body, c.Results); err != nil { - return nil, err - } - - c.currentPage += 1 - - return c.Results, nil -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/scan_test.go b/vendor/gopkg.in/olivere/elastic.v2/scan_test.go deleted file mode 100644 index 84663ad..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/scan_test.go +++ /dev/null @@ -1,690 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - _ "net/http" - "testing" -) - -func TestScan(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Match all should return all documents - cursor, err := client.Scan(testIndexName).Size(1).Do() - if err != nil { - t.Fatal(err) - } - - if cursor.Results == nil { - t.Fatalf("expected results != nil; got nil") - } - if cursor.Results.Hits == nil { - t.Fatalf("expected results.Hits != nil; got nil") - } - if cursor.Results.Hits.TotalHits != 3 { - t.Fatalf("expected results.Hits.TotalHits = %d; got %d", 3, cursor.Results.Hits.TotalHits) - } - if len(cursor.Results.Hits.Hits) != 0 { - t.Fatalf("expected len(results.Hits.Hits) = %d; got %d", 0, len(cursor.Results.Hits.Hits)) - } - - pages := 0 - numDocs := 0 - - for { - searchResult, err := cursor.Next() - if err == EOS { - break - } - if err != nil { - t.Fatal(err) - } - - pages += 1 - - for _, hit := range searchResult.Hits.Hits { - if hit.Index != testIndexName { - t.Fatalf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - item := make(map[string]interface{}) - err := json.Unmarshal(*hit.Source, &item) - if err != nil { - t.Fatal(err) - } - numDocs += 1 - } - } - - if pages <= 0 { - t.Errorf("expected to retrieve at least 1 page; got %d", pages) - } - - if numDocs != 3 { - t.Errorf("expected to retrieve %d hits; got %d", 3, numDocs) - } -} - -func TestScanWithSort(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch.", Retweets: 4} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic.", Retweets: 10} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun.", Retweets: 3} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // We sort on a numerical field, because sorting on the 'message' string field would - // raise the whole question of tokenizing and analyzing. - cursor, err := client.Scan(testIndexName).Sort("retweets", true).Size(1).Do() - if err != nil { - t.Fatal(err) - } - - if cursor.Results == nil { - t.Fatalf("expected results != nil; got nil") - } - if cursor.Results.Hits == nil { - t.Fatalf("expected results.Hits != nil; got nil") - } - if cursor.Results.Hits.TotalHits != 3 { - t.Fatalf("expected results.Hits.TotalHits = %d; got %d", 3, cursor.Results.Hits.TotalHits) - } - if len(cursor.Results.Hits.Hits) != 1 { - t.Fatalf("expected len(results.Hits.Hits) = %d; got %d", 1, len(cursor.Results.Hits.Hits)) - } - - if cursor.Results.Hits.Hits[0].Id != "3" { - t.Fatalf("expected hitID = %v; got %v", "3", cursor.Results.Hits.Hits[0].Id) - - } - - numDocs := 1 // The cursor already gave us a result - pages := 0 - - for { - searchResult, err := cursor.Next() - if err == EOS { - break - } - if err != nil { - t.Fatal(err) - } - - pages += 1 - - for _, hit := range searchResult.Hits.Hits { - if hit.Index != testIndexName { - t.Fatalf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - item := make(map[string]interface{}) - err := json.Unmarshal(*hit.Source, &item) - if err != nil { - t.Fatal(err) - } - numDocs += 1 - } - } - - if pages <= 0 { - t.Errorf("expected to retrieve at least 1 page; got %d", pages) - } - - if numDocs != 3 { - t.Errorf("expected to retrieve %d hits; got %d", 3, numDocs) - } -} - -func TestScanWithSearchSource(t *testing.T) { - //client := setupTestClientAndCreateIndexAndLog(t) - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch.", Retweets: 4} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic.", Retweets: 10} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun.", Retweets: 3} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - src := NewSearchSource(). - Query(NewTermQuery("user", "olivere")). - FetchSourceContext(NewFetchSourceContext(true).Include("retweets")) - cursor, err := client.Scan(testIndexName).SearchSource(src).Size(1).Do() - if err != nil { - t.Fatal(err) - } - - if cursor.Results == nil { - t.Fatalf("expected results != nil; got nil") - } - if cursor.Results.Hits == nil { - t.Fatalf("expected results.Hits != nil; got nil") - } - if cursor.Results.Hits.TotalHits != 2 { - t.Fatalf("expected results.Hits.TotalHits = %d; got %d", 2, cursor.Results.Hits.TotalHits) - } - - numDocs := 0 - pages := 0 - - for { - searchResult, err := cursor.Next() - if err == EOS { - break - } - if err != nil { - t.Fatal(err) - } - - pages += 1 - - for _, hit := range searchResult.Hits.Hits { - if hit.Index != testIndexName { - t.Fatalf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - item := make(map[string]interface{}) - err := json.Unmarshal(*hit.Source, &item) - if err != nil { - t.Fatal(err) - } - if _, found := item["message"]; found { - t.Fatalf("expected to not see field %q; got: %#v", "message", item) - } - numDocs += 1 - } - } - - if pages != 3 { - t.Errorf("expected to retrieve %d pages; got %d", 2, pages) - } - - if numDocs != 2 { - t.Errorf("expected to retrieve %d hits; got %d", 2, numDocs) - } -} - -func TestScanWithQuery(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Return tweets from olivere only - termQuery := NewTermQuery("user", "olivere") - cursor, err := client.Scan(testIndexName). - Size(1). - Query(termQuery). - Do() - if err != nil { - t.Fatal(err) - } - - if cursor.Results == nil { - t.Fatalf("expected results != nil; got nil") - } - if cursor.Results.Hits == nil { - t.Fatalf("expected results.Hits != nil; got nil") - } - if cursor.Results.Hits.TotalHits != 2 { - t.Fatalf("expected results.Hits.TotalHits = %d; got %d", 2, cursor.Results.Hits.TotalHits) - } - if len(cursor.Results.Hits.Hits) != 0 { - t.Fatalf("expected len(results.Hits.Hits) = %d; got %d", 0, len(cursor.Results.Hits.Hits)) - } - - pages := 0 - numDocs := 0 - - for { - searchResult, err := cursor.Next() - if err == EOS { - break - } - if err != nil { - t.Fatal(err) - } - - pages += 1 - - for _, hit := range searchResult.Hits.Hits { - if hit.Index != testIndexName { - t.Fatalf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - item := make(map[string]interface{}) - err := json.Unmarshal(*hit.Source, &item) - if err != nil { - t.Fatal(err) - } - numDocs += 1 - } - } - - if pages <= 0 { - t.Errorf("expected to retrieve at least 1 page; got %d", pages) - } - - if numDocs != 2 { - t.Errorf("expected to retrieve %d hits; got %d", 2, numDocs) - } -} - -func TestScanAndScrollWithMissingIndex(t *testing.T) { - client := setupTestClient(t) // does not create testIndexName - - cursor, err := client.Scan(testIndexName).Scroll("30s").Do() - if err != nil { - t.Fatal(err) - } - if cursor == nil { - t.Fatalf("expected cursor; got: %v", cursor) - } - - // First request immediately returns EOS - res, err := cursor.Next() - if err != EOS { - t.Fatal(err) - } - if res != nil { - t.Fatalf("expected results == %v; got: %v", nil, res) - } -} - -func TestScanAndScrollWithEmptyIndex(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - if isTravis() { - t.Skip("test on Travis failes regularly with " + - "Error 503 (Service Unavailable): SearchPhaseExecutionException[Failed to execute phase [init_scan], all shards failed]") - } - - _, err := client.Flush().Index(testIndexName).WaitIfOngoing(true).Do() - if err != nil { - t.Fatal(err) - } - - cursor, err := client.Scan(testIndexName).Scroll("30s").Do() - if err != nil { - t.Fatal(err) - } - if cursor == nil { - t.Fatalf("expected cursor; got: %v", cursor) - } - - // First request returns no error, but no hits - res, err := cursor.Next() - if err != nil { - t.Fatal(err) - } - if res == nil { - t.Fatalf("expected results != nil; got: nil") - } - if res.ScrollId == "" { - t.Fatalf("expected scrollId in results; got: %q", res.ScrollId) - } - if res.TotalHits() != 0 { - t.Fatalf("expected TotalHits() = %d; got %d", 0, res.TotalHits()) - } - if res.Hits == nil { - t.Fatalf("expected results.Hits != nil; got: nil") - } - if res.Hits.TotalHits != 0 { - t.Fatalf("expected results.Hits.TotalHits = %d; got %d", 0, res.Hits.TotalHits) - } - if res.Hits.Hits == nil { - t.Fatalf("expected results.Hits.Hits != nil; got: %v", res.Hits.Hits) - } - if len(res.Hits.Hits) != 0 { - t.Fatalf("expected len(results.Hits.Hits) == %d; got: %d", 0, len(res.Hits.Hits)) - } - - // Subsequent requests return EOS - res, err = cursor.Next() - if err != EOS { - t.Fatal(err) - } - if res != nil { - t.Fatalf("expected results == %v; got: %v", nil, res) - } - - res, err = cursor.Next() - if err != EOS { - t.Fatal(err) - } - if res != nil { - t.Fatalf("expected results == %v; got: %v", nil, res) - } -} - -func TestIssue119(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - comment1 := comment{User: "nico", Comment: "You bet."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - _, err = client.Index().Index(testIndexName).Type("comment").Id("1").Parent("1").BodyJson(&comment1).Do() - if err != nil { - t.Fatal(err) - } - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Match all should return all documents - cursor, err := client.Scan(testIndexName).Fields("_source", "_parent").Size(1).Do() - if err != nil { - t.Fatal(err) - } - - for { - searchResult, err := cursor.Next() - if err == EOS { - break - } - if err != nil { - t.Fatal(err) - } - - for _, hit := range searchResult.Hits.Hits { - if hit.Type == "tweet" { - if _, ok := hit.Fields["_parent"].(string); ok { - t.Errorf("Type `tweet` cannot have any parent...") - - toPrint, _ := json.MarshalIndent(hit, "", " ") - t.Fatal(string(toPrint)) - } - } - - item := make(map[string]interface{}) - err := json.Unmarshal(*hit.Source, &item) - if err != nil { - t.Fatal(err) - } - } - } -} - -func TestScanWithSorter(t *testing.T) { - //client := setupTestClientAndCreateIndexAndLog(t, SetTraceLog(log.New(os.Stdout, "", 0))) - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "user1", Message: "Welcome to Golang and Elasticsearch.", Retweets: 8} - tweet2 := tweet{User: "user2", Message: "Another unrelated topic.", Retweets: 4} - tweet3 := tweet{User: "user3", Message: "Cycling is fun.", Retweets: 1} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Return tweets from olivere only - cursor, err := client.Scan(testIndexName). - Size(1). - SortBy(NewFieldSort("retweets").Desc()). - Do() - if err != nil { - t.Fatal(err) - } - - res := cursor.Results - - if res == nil { - t.Fatalf("expected results != nil; got nil") - } - if res.Hits == nil { - t.Fatalf("expected results.Hits != nil; got nil") - } - if res.Hits.TotalHits != 3 { - t.Fatalf("expected results.Hits.TotalHits = %d; got %d", 3, cursor.Results.Hits.TotalHits) - } - - pages := 0 - numDocs := 0 - - for { - pages += 1 - - for _, hit := range res.Hits.Hits { - if hit.Index != testIndexName { - t.Fatalf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - var doc tweet - err := json.Unmarshal(*hit.Source, &doc) - if err != nil { - t.Fatal(err) - } - numDocs += 1 - switch numDocs { - case 1: - if got, want := doc.User, "user1"; got != want { - t.Fatalf("expected document from %q first; got: %q", want, got) - } - case 2: - if got, want := doc.User, "user2"; got != want { - t.Fatalf("expected document from %q first; got: %q", want, got) - } - case 3: - if got, want := doc.User, "user3"; got != want { - t.Fatalf("expected document from %q first; got: %q", want, got) - } - default: - t.Fatalf("expected no more than 3 documents; got: %d", numDocs) - } - } - - res, err = cursor.Next() - if err == EOS { - break - } - if err != nil { - t.Fatal(err) - } - } - - if pages <= 0 { - t.Errorf("expected to retrieve at least 1 page; got %d", pages) - } - - if numDocs != 3 { - t.Errorf("expected to retrieve %d hits; got %d", 2, numDocs) - } -} - -func TestScanWithRawBody(t *testing.T) { - //client := setupTestClientAndCreateIndexAndLog(t) - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch.", Retweets: 4} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic.", Retweets: 10} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun.", Retweets: 3} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - cursor, err := client. - Scan(testIndexName). - Body(`{"query":{"term":{"user":"olivere"}}}`). - Size(1). - Do() - if err != nil { - t.Fatal(err) - } - - if cursor.Results == nil { - t.Fatalf("expected results != nil; got nil") - } - if cursor.Results.Hits == nil { - t.Fatalf("expected results.Hits != nil; got nil") - } - if cursor.Results.Hits.TotalHits != 2 { - t.Fatalf("expected results.Hits.TotalHits = %d; got %d", 2, cursor.Results.Hits.TotalHits) - } - if len(cursor.Results.Hits.Hits) != 0 { - t.Fatalf("expected len(results.Hits.Hits) = %d; got %d", 0, len(cursor.Results.Hits.Hits)) - } - - pages := 0 - numDocs := 0 - - for { - searchResult, err := cursor.Next() - if err == EOS { - break - } - if err != nil { - t.Fatal(err) - } - - pages += 1 - - for _, hit := range searchResult.Hits.Hits { - if hit.Index != testIndexName { - t.Fatalf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - item := make(map[string]interface{}) - err := json.Unmarshal(*hit.Source, &item) - if err != nil { - t.Fatal(err) - } - numDocs += 1 - } - } - - if pages <= 0 { - t.Errorf("expected to retrieve at least 1 page; got %d", pages) - } - - if numDocs != 2 { - t.Errorf("expected to retrieve %d hits; got %d", 2, numDocs) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/scroll.go b/vendor/gopkg.in/olivere/elastic.v2/scroll.go deleted file mode 100644 index 23a413a..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/scroll.go +++ /dev/null @@ -1,218 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "net/url" - "strings" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -// ScrollService manages a cursor through documents in Elasticsearch. -type ScrollService struct { - client *Client - indices []string - types []string - keepAlive string - query Query - size *int - pretty bool - scrollId string -} - -func NewScrollService(client *Client) *ScrollService { - builder := &ScrollService{ - client: client, - query: NewMatchAllQuery(), - } - return builder -} - -func (s *ScrollService) Index(index string) *ScrollService { - if s.indices == nil { - s.indices = make([]string, 0) - } - s.indices = append(s.indices, index) - return s -} - -func (s *ScrollService) Indices(indices ...string) *ScrollService { - if s.indices == nil { - s.indices = make([]string, 0) - } - s.indices = append(s.indices, indices...) - return s -} - -func (s *ScrollService) Type(typ string) *ScrollService { - if s.types == nil { - s.types = make([]string, 0) - } - s.types = append(s.types, typ) - return s -} - -func (s *ScrollService) Types(types ...string) *ScrollService { - if s.types == nil { - s.types = make([]string, 0) - } - s.types = append(s.types, types...) - return s -} - -// Scroll is an alias for KeepAlive, the time to keep -// the cursor alive (e.g. "5m" for 5 minutes). -func (s *ScrollService) Scroll(keepAlive string) *ScrollService { - s.keepAlive = keepAlive - return s -} - -// KeepAlive sets the maximum time the cursor will be -// available before expiration (e.g. "5m" for 5 minutes). -func (s *ScrollService) KeepAlive(keepAlive string) *ScrollService { - s.keepAlive = keepAlive - return s -} - -func (s *ScrollService) Query(query Query) *ScrollService { - s.query = query - return s -} - -func (s *ScrollService) Pretty(pretty bool) *ScrollService { - s.pretty = pretty - return s -} - -func (s *ScrollService) Size(size int) *ScrollService { - s.size = &size - return s -} - -func (s *ScrollService) ScrollId(scrollId string) *ScrollService { - s.scrollId = scrollId - return s -} - -func (s *ScrollService) Do() (*SearchResult, error) { - if s.scrollId == "" { - return s.GetFirstPage() - } - return s.GetNextPage() -} - -func (s *ScrollService) GetFirstPage() (*SearchResult, error) { - // Build url - path := "/" - - // Indices part - indexPart := make([]string, 0) - for _, index := range s.indices { - index, err := uritemplates.Expand("{index}", map[string]string{ - "index": index, - }) - if err != nil { - return nil, err - } - indexPart = append(indexPart, index) - } - if len(indexPart) > 0 { - path += strings.Join(indexPart, ",") - } - - // Types - typesPart := make([]string, 0) - for _, typ := range s.types { - typ, err := uritemplates.Expand("{type}", map[string]string{ - "type": typ, - }) - if err != nil { - return nil, err - } - typesPart = append(typesPart, typ) - } - if len(typesPart) > 0 { - path += "/" + strings.Join(typesPart, ",") - } - - // Search - path += "/_search" - - // Parameters - params := make(url.Values) - params.Set("search_type", "scan") - if s.pretty { - params.Set("pretty", fmt.Sprintf("%v", s.pretty)) - } - if s.keepAlive != "" { - params.Set("scroll", s.keepAlive) - } else { - params.Set("scroll", defaultKeepAlive) - } - if s.size != nil && *s.size > 0 { - params.Set("size", fmt.Sprintf("%d", *s.size)) - } - - // Set body - body := make(map[string]interface{}) - if s.query != nil { - body["query"] = s.query.Source() - } - - // Get response - res, err := s.client.PerformRequest("POST", path, params, body) - if err != nil { - return nil, err - } - - // Return result - searchResult := new(SearchResult) - if err := s.client.decoder.Decode(res.Body, searchResult); err != nil { - return nil, err - } - - return searchResult, nil -} - -func (s *ScrollService) GetNextPage() (*SearchResult, error) { - if s.scrollId == "" { - return nil, EOS - } - - // Build url - path := "/_search/scroll" - - // Parameters - params := make(url.Values) - if s.pretty { - params.Set("pretty", fmt.Sprintf("%v", s.pretty)) - } - if s.keepAlive != "" { - params.Set("scroll", s.keepAlive) - } else { - params.Set("scroll", defaultKeepAlive) - } - - // Get response - res, err := s.client.PerformRequest("POST", path, params, s.scrollId) - if err != nil { - return nil, err - } - - // Return result - searchResult := new(SearchResult) - if err := s.client.decoder.Decode(res.Body, searchResult); err != nil { - return nil, err - } - - // Determine last page - if searchResult == nil || searchResult.Hits == nil || len(searchResult.Hits.Hits) == 0 || searchResult.Hits.TotalHits == 0 { - return nil, EOS - } - - return searchResult, nil -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/scroll_test.go b/vendor/gopkg.in/olivere/elastic.v2/scroll_test.go deleted file mode 100644 index 58347e8..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/scroll_test.go +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - _ "net/http" - "testing" -) - -func TestScroll(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Match all should return all documents - res, err := client.Scroll(testIndexName).Size(1).Do() - if err != nil { - t.Fatal(err) - } - - if res == nil { - t.Errorf("expected results != nil; got nil") - } - if res.Hits == nil { - t.Errorf("expected results.Hits != nil; got nil") - } - if res.Hits.TotalHits != 3 { - t.Errorf("expected results.Hits.TotalHits = %d; got %d", 3, res.Hits.TotalHits) - } - if len(res.Hits.Hits) != 0 { - t.Errorf("expected len(results.Hits.Hits) = %d; got %d", 0, len(res.Hits.Hits)) - } - if res.ScrollId == "" { - t.Errorf("expected scrollId in results; got %q", res.ScrollId) - } - - pages := 0 - numDocs := 0 - scrollId := res.ScrollId - - for { - searchResult, err := client.Scroll(testIndexName). - Size(1). - ScrollId(scrollId). - Do() - if err == EOS { - break - } - if err != nil { - t.Fatal(err) - } - - pages += 1 - - for _, hit := range searchResult.Hits.Hits { - if hit.Index != testIndexName { - t.Errorf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - item := make(map[string]interface{}) - err := json.Unmarshal(*hit.Source, &item) - if err != nil { - t.Fatal(err) - } - numDocs += 1 - } - - scrollId = searchResult.ScrollId - if scrollId == "" { - t.Errorf("expected scrollId in results; got %q", scrollId) - } - } - - if pages <= 0 { - t.Errorf("expected to retrieve at least 1 page; got %d", pages) - } - - if numDocs != 3 { - t.Errorf("expected to retrieve %d hits; got %d", 3, numDocs) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search.go b/vendor/gopkg.in/olivere/elastic.v2/search.go deleted file mode 100644 index 6c97562..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search.go +++ /dev/null @@ -1,586 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "fmt" - "net/url" - "reflect" - "strings" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -// Search for documents in Elasticsearch. -type SearchService struct { - client *Client - searchSource *SearchSource - source interface{} - pretty bool - searchType string - indices []string - queryHint string - routing string - preference string - types []string - ignoreUnavailable *bool - allowNoIndices *bool - expandWildcards string -} - -// NewSearchService creates a new service for searching in Elasticsearch. -// You typically do not create the service yourself manually, but access -// it via client.Search(). -func NewSearchService(client *Client) *SearchService { - builder := &SearchService{ - client: client, - searchSource: NewSearchSource(), - } - return builder -} - -// SearchSource sets the search source builder to use with this service. -func (s *SearchService) SearchSource(searchSource *SearchSource) *SearchService { - s.searchSource = searchSource - if s.searchSource == nil { - s.searchSource = NewSearchSource() - } - return s -} - -// Source allows the user to set the request body manually without using -// any of the structs and interfaces in Elastic. -func (s *SearchService) Source(source interface{}) *SearchService { - s.source = source - return s -} - -// Index sets the name of the index to use for search. -func (s *SearchService) Index(index string) *SearchService { - if s.indices == nil { - s.indices = make([]string, 0) - } - s.indices = append(s.indices, index) - return s -} - -// Indices sets the names of the indices to use for search. -func (s *SearchService) Indices(indices ...string) *SearchService { - if s.indices == nil { - s.indices = make([]string, 0) - } - s.indices = append(s.indices, indices...) - return s -} - -// Type adds a search restriction for the given type. -func (s *SearchService) Type(typ string) *SearchService { - if s.types == nil { - s.types = []string{typ} - } else { - s.types = append(s.types, typ) - } - return s -} - -// Types adds search restrictions for a list of types. -func (s *SearchService) Types(types ...string) *SearchService { - if s.types == nil { - s.types = make([]string, 0) - } - s.types = append(s.types, types...) - return s -} - -// Pretty enables the caller to indent the JSON output. -func (s *SearchService) Pretty(pretty bool) *SearchService { - s.pretty = pretty - return s -} - -// Timeout sets the timeout to use, e.g. "1s" or "1000ms". -func (s *SearchService) Timeout(timeout string) *SearchService { - s.searchSource = s.searchSource.Timeout(timeout) - return s -} - -// TimeoutInMillis sets the timeout in milliseconds. -func (s *SearchService) TimeoutInMillis(timeoutInMillis int) *SearchService { - s.searchSource = s.searchSource.TimeoutInMillis(timeoutInMillis) - return s -} - -// SearchType sets the search operation type. Valid values are: -// "query_then_fetch", "query_and_fetch", "dfs_query_then_fetch", -// "dfs_query_and_fetch", "count", "scan". -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-search-type.html#search-request-search-type -// for details. -func (s *SearchService) SearchType(searchType string) *SearchService { - s.searchType = searchType - return s -} - -// Routing allows for (a comma-separated) list of specific routing values. -func (s *SearchService) Routing(routings ...string) *SearchService { - s.routing = strings.Join(routings, ",") - return s -} - -// Preference specifies the node or shard the operation should be -// performed on (default: "random"). -func (s *SearchService) Preference(preference string) *SearchService { - s.preference = preference - return s -} - -func (s *SearchService) QueryHint(queryHint string) *SearchService { - s.queryHint = queryHint - return s -} - -// Query sets the query to perform, e.g. MatchAllQuery. -func (s *SearchService) Query(query Query) *SearchService { - s.searchSource = s.searchSource.Query(query) - return s -} - -// PostFilter is executed as the last filter. It only affects the -// search hits but not facets. See -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-post-filter.html -// for details. -func (s *SearchService) PostFilter(postFilter Filter) *SearchService { - s.searchSource = s.searchSource.PostFilter(postFilter) - return s -} - -// FetchSource indicates whether the response should contain the stored -// _source for every hit. -func (s *SearchService) FetchSource(fetchSource bool) *SearchService { - s.searchSource = s.searchSource.FetchSource(fetchSource) - return s -} - -// FetchSourceContext indicates how the _source should be fetched. -func (s *SearchService) FetchSourceContext(fetchSourceContext *FetchSourceContext) *SearchService { - s.searchSource = s.searchSource.FetchSourceContext(fetchSourceContext) - return s -} - -// Highlight sets the highlighting. See -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-highlighting.html -// for details. -func (s *SearchService) Highlight(highlight *Highlight) *SearchService { - s.searchSource = s.searchSource.Highlight(highlight) - return s -} - -// GlobalSuggestText sets the global text for suggesters. See -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-suggesters.html#global-suggest -// for details. -func (s *SearchService) GlobalSuggestText(globalText string) *SearchService { - s.searchSource = s.searchSource.GlobalSuggestText(globalText) - return s -} - -// Suggester sets the suggester. See -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-suggesters.html -// for details. -func (s *SearchService) Suggester(suggester Suggester) *SearchService { - s.searchSource = s.searchSource.Suggester(suggester) - return s -} - -// Facet adds a facet to the search. See -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-facets.html -// to get an overview of Elasticsearch facets. -func (s *SearchService) Facet(name string, facet Facet) *SearchService { - s.searchSource = s.searchSource.Facet(name, facet) - return s -} - -// Aggregation adds an aggregation to the search. See -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations.html -// for an overview of aggregations in Elasticsearch. -func (s *SearchService) Aggregation(name string, aggregation Aggregation) *SearchService { - s.searchSource = s.searchSource.Aggregation(name, aggregation) - return s -} - -// MinScore excludes documents which have a score less than the minimum -// specified here. See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-min-score.html. -func (s *SearchService) MinScore(minScore float64) *SearchService { - s.searchSource = s.searchSource.MinScore(minScore) - return s -} - -// From defines the offset from the first result you want to fetch. -// Use it in combination with Size to paginate through results. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-from-size.html -// for details. -func (s *SearchService) From(from int) *SearchService { - s.searchSource = s.searchSource.From(from) - return s -} - -// Size defines the maximum number of hits to be returned. -// Use it in combination with From to paginate through results. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-from-size.html -// for details. -func (s *SearchService) Size(size int) *SearchService { - s.searchSource = s.searchSource.Size(size) - return s -} - -// Explain can be enabled to provide an explanation for each hit and how its -// score was computed. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-explain.html -// for details. -func (s *SearchService) Explain(explain bool) *SearchService { - s.searchSource = s.searchSource.Explain(explain) - return s -} - -// Version can be set to true to return a version for each search hit. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-version.html. -func (s *SearchService) Version(version bool) *SearchService { - s.searchSource = s.searchSource.Version(version) - return s -} - -// Sort the results by the given field, in the given order. -// Use the alternative SortWithInfo to use a struct to define the sorting. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-sort.html -// for detailed documentation of sorting. -func (s *SearchService) Sort(field string, ascending bool) *SearchService { - s.searchSource = s.searchSource.Sort(field, ascending) - return s -} - -// SortWithInfo defines how to sort results. -// Use the Sort func for a shortcut. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-sort.html -// for detailed documentation of sorting. -func (s *SearchService) SortWithInfo(info SortInfo) *SearchService { - s.searchSource = s.searchSource.SortWithInfo(info) - return s -} - -// SortBy defines how to sort results. -// Use the Sort func for a shortcut. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-sort.html -// for detailed documentation of sorting. -func (s *SearchService) SortBy(sorter ...Sorter) *SearchService { - s.searchSource = s.searchSource.SortBy(sorter...) - return s -} - -// Fields tells Elasticsearch to only load specific fields from a search hit. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-fields.html. -func (s *SearchService) Fields(fields ...string) *SearchService { - s.searchSource = s.searchSource.Fields(fields...) - return s -} - -// IgnoreUnavailable indicates whether the specified concrete indices -// should be ignored when unavailable (missing or closed). -func (s *SearchService) IgnoreUnavailable(ignoreUnavailable bool) *SearchService { - s.ignoreUnavailable = &ignoreUnavailable - return s -} - -// AllowNoIndices indicates whether to ignore if a wildcard indices -// expression resolves into no concrete indices. (This includes `_all` string -// or when no indices have been specified). -func (s *SearchService) AllowNoIndices(allowNoIndices bool) *SearchService { - s.allowNoIndices = &allowNoIndices - return s -} - -// ExpandWildcards indicates whether to expand wildcard expression to -// concrete indices that are open, closed or both. -func (s *SearchService) ExpandWildcards(expandWildcards string) *SearchService { - s.expandWildcards = expandWildcards - return s -} - -// buildURL builds the URL for the operation. -func (s *SearchService) buildURL() (string, url.Values, error) { - var err error - var path string - - if len(s.indices) > 0 && len(s.types) > 0 { - path, err = uritemplates.Expand("/{index}/{type}/_search", map[string]string{ - "index": strings.Join(s.indices, ","), - "type": strings.Join(s.types, ","), - }) - } else if len(s.indices) > 0 { - path, err = uritemplates.Expand("/{index}/_search", map[string]string{ - "index": strings.Join(s.indices, ","), - }) - } else if len(s.types) > 0 { - path, err = uritemplates.Expand("/_all/{type}/_search", map[string]string{ - "type": strings.Join(s.types, ","), - }) - } else { - path = "/_search" - } - if err != nil { - return "", url.Values{}, err - } - - // Add query string parameters - params := url.Values{} - if s.pretty { - params.Set("pretty", fmt.Sprintf("%v", s.pretty)) - } - if s.searchType != "" { - params.Set("search_type", s.searchType) - } - if s.routing != "" { - params.Set("routing", s.routing) - } - if s.preference != "" { - params.Set("preference", s.preference) - } - if s.allowNoIndices != nil { - params.Set("allow_no_indices", fmt.Sprintf("%v", *s.allowNoIndices)) - } - if s.expandWildcards != "" { - params.Set("expand_wildcards", s.expandWildcards) - } - if s.ignoreUnavailable != nil { - params.Set("ignore_unavailable", fmt.Sprintf("%v", *s.ignoreUnavailable)) - } - return path, params, nil -} - -// Validate checks if the operation is valid. -func (s *SearchService) Validate() error { - return nil -} - -// Do executes the search and returns a SearchResult. -func (s *SearchService) Do() (*SearchResult, error) { - // Check pre-conditions - if err := s.Validate(); err != nil { - return nil, err - } - - // Get URL for request - path, params, err := s.buildURL() - if err != nil { - return nil, err - } - - // Perform request - var body interface{} - if s.source != nil { - body = s.source - } else { - body = s.searchSource.Source() - } - res, err := s.client.PerformRequest("POST", path, params, body) - if err != nil { - return nil, err - } - - // Return search results - ret := new(SearchResult) - if err := s.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -// SearchResult is the result of a search in Elasticsearch. -type SearchResult struct { - TookInMillis int64 `json:"took"` // search time in milliseconds - ScrollId string `json:"_scroll_id"` // only used with Scroll and Scan operations - Hits *SearchHits `json:"hits"` // the actual search hits - Suggest SearchSuggest `json:"suggest"` // results from suggesters - Facets SearchFacets `json:"facets"` // results from facets - Aggregations Aggregations `json:"aggregations"` // results from aggregations - TimedOut bool `json:"timed_out"` // true if the search timed out - Error string `json:"error,omitempty"` // used in MultiSearch only -} - -// TotalHits is a convenience function to return the number of hits for -// a search result. -func (r *SearchResult) TotalHits() int64 { - if r.Hits != nil { - return r.Hits.TotalHits - } - return 0 -} - -// Each is a utility function to iterate over all hits. It saves you from -// checking for nil values. Notice that Each will ignore errors in -// serializing JSON. -func (r *SearchResult) Each(typ reflect.Type) []interface{} { - if r.Hits == nil || r.Hits.Hits == nil || len(r.Hits.Hits) == 0 { - return nil - } - slice := make([]interface{}, 0) - for _, hit := range r.Hits.Hits { - v := reflect.New(typ).Elem() - if err := json.Unmarshal(*hit.Source, v.Addr().Interface()); err == nil { - slice = append(slice, v.Interface()) - } - } - return slice -} - -// SearchHits specifies the list of search hits. -type SearchHits struct { - TotalHits int64 `json:"total"` // total number of hits found - MaxScore *float64 `json:"max_score"` // maximum score of all hits - Hits []*SearchHit `json:"hits"` // the actual hits returned -} - -// SearchHit is a single hit. -type SearchHit struct { - Score *float64 `json:"_score"` // computed score - Index string `json:"_index"` // index name - Id string `json:"_id"` // external or internal - Type string `json:"_type"` // type - Version *int64 `json:"_version"` // version number, when Version is set to true in SearchService - Sort []interface{} `json:"sort"` // sort information - Highlight SearchHitHighlight `json:"highlight"` // highlighter information - Source *json.RawMessage `json:"_source"` // stored document source - Fields map[string]interface{} `json:"fields"` // returned fields - Explanation *SearchExplanation `json:"_explanation"` // explains how the score was computed - MatchedQueries []string `json:"matched_queries"` // matched queries - InnerHits map[string]*SearchHitInnerHits `json:"inner_hits"` // inner hits with ES >= 1.5.0 - - // Shard - // HighlightFields - // SortValues - // MatchedFilters -} - -type SearchHitInnerHits struct { - Hits *SearchHits `json:"hits"` -} - -// SearchExplanation explains how the score for a hit was computed. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-explain.html. -type SearchExplanation struct { - Value float64 `json:"value"` // e.g. 1.0 - Description string `json:"description"` // e.g. "boost" or "ConstantScore(*:*), product of:" - Details []SearchExplanation `json:"details,omitempty"` // recursive details -} - -// Suggest - -// SearchSuggest is a map of suggestions. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-suggesters.html. -type SearchSuggest map[string][]SearchSuggestion - -// SearchSuggestion is a single search suggestion. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-suggesters.html. -type SearchSuggestion struct { - Text string `json:"text"` - Offset int `json:"offset"` - Length int `json:"length"` - Options []SearchSuggestionOption `json:"options"` -} - -// SearchSuggestionOption is an option of a SearchSuggestion. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-suggesters.html. -type SearchSuggestionOption struct { - Text string `json:"text"` - Highlighted string `json:"highlighted"` - Score float32 `json:"score"` - CollateMatch bool `json:"collate_match"` - Freq int `json:"freq"` // deprecated - Payload interface{} `json:"payload"` -} - -// Facets - -// SearchFacets is a map of facets. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-facets.html. -type SearchFacets map[string]*SearchFacet - -// SearchFacet is a single facet. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-facets.html. -type SearchFacet struct { - Type string `json:"_type"` - Missing int `json:"missing"` - Total int `json:"total"` - Other int `json:"other"` - Terms []searchFacetTerm `json:"terms"` - Ranges []searchFacetRange `json:"ranges"` - Entries []searchFacetEntry `json:"entries"` -} - -// searchFacetTerm is the result of a terms/terms_stats facet. -// See https://www.elastic.co/guide/en/elasticsearch/reference/1.7/search-facets-terms-facet.html -// and https://www.elastic.co/guide/en/elasticsearch/reference/1.7/search-facets-terms-stats-facet.html. -type searchFacetTerm struct { - Term interface{} `json:"term"` - Count int `json:"count"` - - // The following fields are returned for terms_stats facets. - // See https://www.elastic.co/guide/en/elasticsearch/reference/1.7/search-facets-terms-stats-facet.html. - - TotalCount int `json:"total_count"` - Min float64 `json:"min"` - Max float64 `json:"max"` - Total float64 `json:"total"` - Mean float64 `json:"mean"` -} - -// searchFacetRange is the result of a range facet. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-facets-range-facet.html. -type searchFacetRange struct { - From *float64 `json:"from"` - FromStr *string `json:"from_str"` - To *float64 `json:"to"` - ToStr *string `json:"to_str"` - Count int `json:"count"` - Min *float64 `json:"min"` - Max *float64 `json:"max"` - TotalCount int `json:"total_count"` - Total *float64 `json:"total"` - Mean *float64 `json:"mean"` -} - -// searchFacetEntry is a general facet entry. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-facets.html -type searchFacetEntry struct { - // Key for this facet, e.g. in histograms - Key interface{} `json:"key"` - // Date histograms contain the number of milliseconds as date: - // If e.Time = 1293840000000, then: Time.at(1293840000000/1000) => 2011-01-01 - Time int64 `json:"time"` - // Number of hits for this facet - Count int `json:"count"` - // Min is either a string like "Infinity" or a float64. - // This is returned with some DateHistogram facets. - Min interface{} `json:"min,omitempty"` - // Max is either a string like "-Infinity" or a float64 - // This is returned with some DateHistogram facets. - Max interface{} `json:"max,omitempty"` - // Total is the sum of all entries on the recorded Time - // This is returned with some DateHistogram facets. - Total float64 `json:"total,omitempty"` - // TotalCount is the number of entries for Total - // This is returned with some DateHistogram facets. - TotalCount int `json:"total_count,omitempty"` - // Mean is the mean value - // This is returned with some DateHistogram facets. - Mean float64 `json:"mean,omitempty"` -} - -// Aggregations (see search_aggs.go) - -// Highlighting - -// SearchHitHighlight is the highlight information of a search hit. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-highlighting.html -// for a general discussion of highlighting. -type SearchHitHighlight map[string][]string diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs.go deleted file mode 100644 index 19ad96e..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs.go +++ /dev/null @@ -1,964 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "bytes" - "encoding/json" -) - -// Aggregations can be seen as a unit-of-work that build -// analytic information over a set of documents. It is -// (in many senses) the follow-up of facets in Elasticsearch. -// For more details about aggregations, visit: -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations.html -type Aggregation interface { - Source() interface{} -} - -// Aggregations is a list of aggregations that are part of a search result. -type Aggregations map[string]*json.RawMessage - -// Min returns min aggregation results. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-min-aggregation.html -func (a Aggregations) Min(name string) (*AggregationValueMetric, bool) { - if raw, found := a[name]; found { - agg := new(AggregationValueMetric) - if raw == nil { - return agg, true - } - if err := json.Unmarshal(*raw, agg); err == nil { - return agg, true - } - } - return nil, false -} - -// Max returns max aggregation results. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-max-aggregation.html -func (a Aggregations) Max(name string) (*AggregationValueMetric, bool) { - if raw, found := a[name]; found { - agg := new(AggregationValueMetric) - if raw == nil { - return agg, true - } - if err := json.Unmarshal(*raw, agg); err == nil { - return agg, true - } - } - return nil, false -} - -// Sum returns sum aggregation results. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-sum-aggregation.html -func (a Aggregations) Sum(name string) (*AggregationValueMetric, bool) { - if raw, found := a[name]; found { - agg := new(AggregationValueMetric) - if raw == nil { - return agg, true - } - if err := json.Unmarshal(*raw, agg); err == nil { - return agg, true - } - } - return nil, false -} - -// Avg returns average aggregation results. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-avg-aggregation.html -func (a Aggregations) Avg(name string) (*AggregationValueMetric, bool) { - if raw, found := a[name]; found { - agg := new(AggregationValueMetric) - if raw == nil { - return agg, true - } - if err := json.Unmarshal(*raw, agg); err == nil { - return agg, true - } - } - return nil, false -} - -// ValueCount returns value-count aggregation results. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-valuecount-aggregation.html -func (a Aggregations) ValueCount(name string) (*AggregationValueMetric, bool) { - if raw, found := a[name]; found { - agg := new(AggregationValueMetric) - if raw == nil { - return agg, true - } - if err := json.Unmarshal(*raw, agg); err == nil { - return agg, true - } - } - return nil, false -} - -// Cardinality returns cardinality aggregation results. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-cardinality-aggregation.html -func (a Aggregations) Cardinality(name string) (*AggregationValueMetric, bool) { - if raw, found := a[name]; found { - agg := new(AggregationValueMetric) - if raw == nil { - return agg, true - } - if err := json.Unmarshal(*raw, agg); err == nil { - return agg, true - } - } - return nil, false -} - -// Stats returns stats aggregation results. -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-stats-aggregation.html -func (a Aggregations) Stats(name string) (*AggregationStatsMetric, bool) { - if raw, found := a[name]; found { - agg := new(AggregationStatsMetric) - if raw == nil { - return agg, true - } - if err := json.Unmarshal(*raw, agg); err == nil { - return agg, true - } - } - return nil, false -} - -// ExtendedStats returns extended stats aggregation results. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-extendedstats-aggregation.html -func (a Aggregations) ExtendedStats(name string) (*AggregationExtendedStatsMetric, bool) { - if raw, found := a[name]; found { - agg := new(AggregationExtendedStatsMetric) - if raw == nil { - return agg, true - } - if err := json.Unmarshal(*raw, agg); err == nil { - return agg, true - } - } - return nil, false -} - -// Percentiles returns percentiles results. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-percentile-aggregation.html -func (a Aggregations) Percentiles(name string) (*AggregationPercentilesMetric, bool) { - if raw, found := a[name]; found { - agg := new(AggregationPercentilesMetric) - if raw == nil { - return agg, true - } - if err := json.Unmarshal(*raw, agg); err == nil { - return agg, true - } - } - return nil, false -} - -// PercentileRanks returns percentile ranks results. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-percentile-rank-aggregation.html -func (a Aggregations) PercentileRanks(name string) (*AggregationPercentilesMetric, bool) { - if raw, found := a[name]; found { - agg := new(AggregationPercentilesMetric) - if raw == nil { - return agg, true - } - if err := json.Unmarshal(*raw, agg); err == nil { - return agg, true - } - } - return nil, false -} - -// TopHits returns top-hits aggregation results. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-top-hits-aggregation.html -func (a Aggregations) TopHits(name string) (*AggregationTopHitsMetric, bool) { - if raw, found := a[name]; found { - agg := new(AggregationTopHitsMetric) - if raw == nil { - return agg, true - } - if err := json.Unmarshal(*raw, agg); err == nil { - return agg, true - } - } - return nil, false -} - -// Global returns global results. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-global-aggregation.html -func (a Aggregations) Global(name string) (*AggregationSingleBucket, bool) { - if raw, found := a[name]; found { - agg := new(AggregationSingleBucket) - if raw == nil { - return agg, true - } - if err := json.Unmarshal(*raw, agg); err == nil { - return agg, true - } - } - return nil, false -} - -// Filter returns filter results. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filter-aggregation.html -func (a Aggregations) Filter(name string) (*AggregationSingleBucket, bool) { - if raw, found := a[name]; found { - agg := new(AggregationSingleBucket) - if raw == nil { - return agg, true - } - if err := json.Unmarshal(*raw, agg); err == nil { - return agg, true - } - } - return nil, false -} - -// Filters returns filters results. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filters-aggregation.html -func (a Aggregations) Filters(name string) (*AggregationBucketFilters, bool) { - if raw, found := a[name]; found { - agg := new(AggregationBucketFilters) - if raw == nil { - return agg, true - } - if err := json.Unmarshal(*raw, agg); err == nil { - return agg, true - } - } - return nil, false -} - -// Missing returns missing results. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-missing-aggregation.html -func (a Aggregations) Missing(name string) (*AggregationSingleBucket, bool) { - if raw, found := a[name]; found { - agg := new(AggregationSingleBucket) - if raw == nil { - return agg, true - } - if err := json.Unmarshal(*raw, agg); err == nil { - return agg, true - } - } - return nil, false -} - -// Nested returns nested results. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-nested-aggregation.html -func (a Aggregations) Nested(name string) (*AggregationSingleBucket, bool) { - if raw, found := a[name]; found { - agg := new(AggregationSingleBucket) - if raw == nil { - return agg, true - } - if err := json.Unmarshal(*raw, agg); err == nil { - return agg, true - } - } - return nil, false -} - -// ReverseNested returns reverse-nested results. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-reverse-nested-aggregation.html -func (a Aggregations) ReverseNested(name string) (*AggregationSingleBucket, bool) { - if raw, found := a[name]; found { - agg := new(AggregationSingleBucket) - if raw == nil { - return agg, true - } - if err := json.Unmarshal(*raw, agg); err == nil { - return agg, true - } - } - return nil, false -} - -// Children returns children results. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-children-aggregation.html -func (a Aggregations) Children(name string) (*AggregationSingleBucket, bool) { - if raw, found := a[name]; found { - agg := new(AggregationSingleBucket) - if raw == nil { - return agg, true - } - if err := json.Unmarshal(*raw, agg); err == nil { - return agg, true - } - } - return nil, false -} - -// Terms returns terms aggregation results. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html -func (a Aggregations) Terms(name string) (*AggregationBucketKeyItems, bool) { - if raw, found := a[name]; found { - agg := new(AggregationBucketKeyItems) - if raw == nil { - return agg, true - } - if err := json.Unmarshal(*raw, agg); err == nil { - return agg, true - } - } - return nil, false -} - -// SignificantTerms returns significant terms aggregation results. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-significantterms-aggregation.html -func (a Aggregations) SignificantTerms(name string) (*AggregationBucketSignificantTerms, bool) { - if raw, found := a[name]; found { - agg := new(AggregationBucketSignificantTerms) - if raw == nil { - return agg, true - } - if err := json.Unmarshal(*raw, agg); err == nil { - return agg, true - } - } - return nil, false -} - -// Range returns range aggregation results. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-range-aggregation.html -func (a Aggregations) Range(name string) (*AggregationBucketRangeItems, bool) { - if raw, found := a[name]; found { - agg := new(AggregationBucketRangeItems) - if raw == nil { - return agg, true - } - if err := json.Unmarshal(*raw, agg); err == nil { - return agg, true - } - } - return nil, false -} - -// KeyedRange returns keyed range aggregation results. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-range-aggregation.html. -func (a Aggregations) KeyedRange(name string) (*AggregationBucketKeyedRangeItems, bool) { - if raw, found := a[name]; found { - agg := new(AggregationBucketKeyedRangeItems) - if raw == nil { - return agg, true - } - if err := json.Unmarshal(*raw, agg); err == nil { - return agg, true - } - } - return nil, false -} - -// DateRange returns date range aggregation results. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-daterange-aggregation.html -func (a Aggregations) DateRange(name string) (*AggregationBucketRangeItems, bool) { - if raw, found := a[name]; found { - agg := new(AggregationBucketRangeItems) - if raw == nil { - return agg, true - } - if err := json.Unmarshal(*raw, agg); err == nil { - return agg, true - } - } - return nil, false -} - -// IPv4Range returns IPv4 range aggregation results. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-iprange-aggregation.html -func (a Aggregations) IPv4Range(name string) (*AggregationBucketRangeItems, bool) { - if raw, found := a[name]; found { - agg := new(AggregationBucketRangeItems) - if raw == nil { - return agg, true - } - if err := json.Unmarshal(*raw, agg); err == nil { - return agg, true - } - } - return nil, false -} - -// Histogram returns histogram aggregation results. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-histogram-aggregation.html -func (a Aggregations) Histogram(name string) (*AggregationBucketHistogramItems, bool) { - if raw, found := a[name]; found { - agg := new(AggregationBucketHistogramItems) - if raw == nil { - return agg, true - } - if err := json.Unmarshal(*raw, agg); err == nil { - return agg, true - } - } - return nil, false -} - -// DateHistogram returns date histogram aggregation results. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-datehistogram-aggregation.html -func (a Aggregations) DateHistogram(name string) (*AggregationBucketHistogramItems, bool) { - if raw, found := a[name]; found { - agg := new(AggregationBucketHistogramItems) - if raw == nil { - return agg, true - } - if err := json.Unmarshal(*raw, agg); err == nil { - return agg, true - } - } - return nil, false -} - -// GeoBounds returns geo-bounds aggregation results. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-geobounds-aggregation.html -func (a Aggregations) GeoBounds(name string) (*AggregationGeoBoundsMetric, bool) { - if raw, found := a[name]; found { - agg := new(AggregationGeoBoundsMetric) - if raw == nil { - return agg, true - } - if err := json.Unmarshal(*raw, agg); err == nil { - return agg, true - } - } - return nil, false -} - -// GeoHash returns geo-hash aggregation results. -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-geohashgrid-aggregation.html -func (a Aggregations) GeoHash(name string) (*AggregationBucketKeyItems, bool) { - if raw, found := a[name]; found { - agg := new(AggregationBucketKeyItems) - if raw == nil { - return agg, true - } - if err := json.Unmarshal(*raw, agg); err == nil { - return agg, true - } - } - return nil, false -} - -// GeoDistance returns geo distance aggregation results. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-geodistance-aggregation.html -func (a Aggregations) GeoDistance(name string) (*AggregationBucketRangeItems, bool) { - if raw, found := a[name]; found { - agg := new(AggregationBucketRangeItems) - if raw == nil { - return agg, true - } - if err := json.Unmarshal(*raw, agg); err == nil { - return agg, true - } - } - return nil, false -} - -// -- Single value metric -- - -// AggregationValueMetric is a single-value metric, returned e.g. by a -// Min or Max aggregation. -type AggregationValueMetric struct { - Aggregations - - Value *float64 //`json:"value"` -} - -// UnmarshalJSON decodes JSON data and initializes an AggregationValueMetric structure. -func (a *AggregationValueMetric) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage - if err := json.Unmarshal(data, &aggs); err != nil { - return err - } - if v, ok := aggs["value"]; ok && v != nil { - json.Unmarshal(*v, &a.Value) - } - a.Aggregations = aggs - return nil -} - -// -- Stats metric -- - -// AggregationStatsMetric is a multi-value metric, returned by a Stats aggregation. -type AggregationStatsMetric struct { - Aggregations - - Count int64 // `json:"count"` - Min *float64 //`json:"min,omitempty"` - Max *float64 //`json:"max,omitempty"` - Avg *float64 //`json:"avg,omitempty"` - Sum *float64 //`json:"sum,omitempty"` -} - -// UnmarshalJSON decodes JSON data and initializes an AggregationStatsMetric structure. -func (a *AggregationStatsMetric) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage - if err := json.Unmarshal(data, &aggs); err != nil { - return err - } - if v, ok := aggs["count"]; ok && v != nil { - json.Unmarshal(*v, &a.Count) - } - if v, ok := aggs["min"]; ok && v != nil { - json.Unmarshal(*v, &a.Min) - } - if v, ok := aggs["max"]; ok && v != nil { - json.Unmarshal(*v, &a.Max) - } - if v, ok := aggs["avg"]; ok && v != nil { - json.Unmarshal(*v, &a.Avg) - } - if v, ok := aggs["sum"]; ok && v != nil { - json.Unmarshal(*v, &a.Sum) - } - a.Aggregations = aggs - return nil -} - -// -- Extended stats metric -- - -// AggregationExtendedStatsMetric is a multi-value metric, returned by an ExtendedStats aggregation. -type AggregationExtendedStatsMetric struct { - Aggregations - - Count int64 // `json:"count"` - Min *float64 //`json:"min,omitempty"` - Max *float64 //`json:"max,omitempty"` - Avg *float64 //`json:"avg,omitempty"` - Sum *float64 //`json:"sum,omitempty"` - SumOfSquares *float64 //`json:"sum_of_squares,omitempty"` - Variance *float64 //`json:"variance,omitempty"` - StdDeviation *float64 //`json:"std_deviation,omitempty"` -} - -// UnmarshalJSON decodes JSON data and initializes an AggregationExtendedStatsMetric structure. -func (a *AggregationExtendedStatsMetric) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage - if err := json.Unmarshal(data, &aggs); err != nil { - return err - } - if v, ok := aggs["count"]; ok && v != nil { - json.Unmarshal(*v, &a.Count) - } - if v, ok := aggs["min"]; ok && v != nil { - json.Unmarshal(*v, &a.Min) - } - if v, ok := aggs["max"]; ok && v != nil { - json.Unmarshal(*v, &a.Max) - } - if v, ok := aggs["avg"]; ok && v != nil { - json.Unmarshal(*v, &a.Avg) - } - if v, ok := aggs["sum"]; ok && v != nil { - json.Unmarshal(*v, &a.Sum) - } - if v, ok := aggs["sum_of_squares"]; ok && v != nil { - json.Unmarshal(*v, &a.SumOfSquares) - } - if v, ok := aggs["variance"]; ok && v != nil { - json.Unmarshal(*v, &a.Variance) - } - if v, ok := aggs["std_deviation"]; ok && v != nil { - json.Unmarshal(*v, &a.StdDeviation) - } - a.Aggregations = aggs - return nil -} - -// -- Percentiles metric -- - -// AggregationPercentilesMetric is a multi-value metric, returned by a Percentiles aggregation. -type AggregationPercentilesMetric struct { - Aggregations - - Values map[string]float64 // `json:"values"` -} - -// UnmarshalJSON decodes JSON data and initializes an AggregationPercentilesMetric structure. -func (a *AggregationPercentilesMetric) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage - if err := json.Unmarshal(data, &aggs); err != nil { - return err - } - if v, ok := aggs["values"]; ok && v != nil { - json.Unmarshal(*v, &a.Values) - } - a.Aggregations = aggs - return nil -} - -// -- Top-hits metric -- - -// AggregationTopHitsMetric is a metric returned by a TopHits aggregation. -type AggregationTopHitsMetric struct { - Aggregations - - Hits *SearchHits //`json:"hits"` -} - -// UnmarshalJSON decodes JSON data and initializes an AggregationTopHitsMetric structure. -func (a *AggregationTopHitsMetric) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage - if err := json.Unmarshal(data, &aggs); err != nil { - return err - } - a.Aggregations = aggs - a.Hits = new(SearchHits) - if v, ok := aggs["hits"]; ok && v != nil { - json.Unmarshal(*v, &a.Hits) - } - return nil -} - -// -- Geo-bounds metric -- - -// AggregationGeoBoundsMetric is a metric as returned by a GeoBounds aggregation. -type AggregationGeoBoundsMetric struct { - Aggregations - - Bounds struct { - TopLeft struct { - Latitude float64 `json:"lat"` - Longitude float64 `json:"lon"` - } `json:"top_left"` - BottomRight struct { - Latitude float64 `json:"lat"` - Longitude float64 `json:"lon"` - } `json:"bottom_right"` - } `json:"bounds"` -} - -// UnmarshalJSON decodes JSON data and initializes an AggregationGeoBoundsMetric structure. -func (a *AggregationGeoBoundsMetric) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage - if err := json.Unmarshal(data, &aggs); err != nil { - return err - } - if v, ok := aggs["bounds"]; ok && v != nil { - json.Unmarshal(*v, &a.Bounds) - } - a.Aggregations = aggs - return nil -} - -// -- Single bucket -- - -// AggregationSingleBucket is a single bucket, returned e.g. via an aggregation of type Global. -type AggregationSingleBucket struct { - Aggregations - - DocCount int64 // `json:"doc_count"` -} - -// UnmarshalJSON decodes JSON data and initializes an AggregationSingleBucket structure. -func (a *AggregationSingleBucket) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage - if err := json.Unmarshal(data, &aggs); err != nil { - return err - } - if v, ok := aggs["doc_count"]; ok && v != nil { - json.Unmarshal(*v, &a.DocCount) - } - a.Aggregations = aggs - return nil -} - -// -- Bucket range items -- - -// AggregationBucketRangeItems is a bucket aggregation that is e.g. returned -// with a range aggregation. -type AggregationBucketRangeItems struct { - Aggregations - - DocCountErrorUpperBound int64 //`json:"doc_count_error_upper_bound"` - SumOfOtherDocCount int64 //`json:"sum_other_doc_count"` - Buckets []*AggregationBucketRangeItem //`json:"buckets"` -} - -// UnmarshalJSON decodes JSON data and initializes an AggregationBucketRangeItems structure. -func (a *AggregationBucketRangeItems) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage - if err := json.Unmarshal(data, &aggs); err != nil { - return err - } - if v, ok := aggs["doc_count_error_upper_bound"]; ok && v != nil { - json.Unmarshal(*v, &a.DocCountErrorUpperBound) - } - if v, ok := aggs["sum_other_doc_count"]; ok && v != nil { - json.Unmarshal(*v, &a.SumOfOtherDocCount) - } - if v, ok := aggs["buckets"]; ok && v != nil { - json.Unmarshal(*v, &a.Buckets) - } - a.Aggregations = aggs - return nil -} - -// AggregationBucketKeyedRangeItems is a bucket aggregation that is e.g. returned -// with a keyed range aggregation. -type AggregationBucketKeyedRangeItems struct { - Aggregations - - DocCountErrorUpperBound int64 //`json:"doc_count_error_upper_bound"` - SumOfOtherDocCount int64 //`json:"sum_other_doc_count"` - Buckets map[string]*AggregationBucketRangeItem //`json:"buckets"` -} - -// UnmarshalJSON decodes JSON data and initializes an AggregationBucketRangeItems structure. -func (a *AggregationBucketKeyedRangeItems) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage - if err := json.Unmarshal(data, &aggs); err != nil { - return err - } - if v, ok := aggs["doc_count_error_upper_bound"]; ok && v != nil { - json.Unmarshal(*v, &a.DocCountErrorUpperBound) - } - if v, ok := aggs["sum_other_doc_count"]; ok && v != nil { - json.Unmarshal(*v, &a.SumOfOtherDocCount) - } - if v, ok := aggs["buckets"]; ok && v != nil { - json.Unmarshal(*v, &a.Buckets) - } - a.Aggregations = aggs - return nil -} - -// AggregationBucketRangeItem is a single bucket of an AggregationBucketRangeItems structure. -type AggregationBucketRangeItem struct { - Aggregations - - Key string //`json:"key"` - DocCount int64 //`json:"doc_count"` - From *float64 //`json:"from"` - FromAsString string //`json:"from_as_string"` - To *float64 //`json:"to"` - ToAsString string //`json:"to_as_string"` -} - -// UnmarshalJSON decodes JSON data and initializes an AggregationBucketRangeItem structure. -func (a *AggregationBucketRangeItem) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage - if err := json.Unmarshal(data, &aggs); err != nil { - return err - } - if v, ok := aggs["key"]; ok && v != nil { - json.Unmarshal(*v, &a.Key) - } - if v, ok := aggs["doc_count"]; ok && v != nil { - json.Unmarshal(*v, &a.DocCount) - } - if v, ok := aggs["from"]; ok && v != nil { - json.Unmarshal(*v, &a.From) - } - if v, ok := aggs["from_as_string"]; ok && v != nil { - json.Unmarshal(*v, &a.FromAsString) - } - if v, ok := aggs["to"]; ok && v != nil { - json.Unmarshal(*v, &a.To) - } - if v, ok := aggs["to_as_string"]; ok && v != nil { - json.Unmarshal(*v, &a.ToAsString) - } - a.Aggregations = aggs - return nil -} - -// -- Bucket key items -- - -// AggregationBucketKeyItems is a bucket aggregation that is e.g. returned -// with a terms aggregation. -type AggregationBucketKeyItems struct { - Aggregations - - DocCountErrorUpperBound int64 //`json:"doc_count_error_upper_bound"` - SumOfOtherDocCount int64 //`json:"sum_other_doc_count"` - Buckets []*AggregationBucketKeyItem //`json:"buckets"` -} - -// UnmarshalJSON decodes JSON data and initializes an AggregationBucketKeyItems structure. -func (a *AggregationBucketKeyItems) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage - if err := json.Unmarshal(data, &aggs); err != nil { - return err - } - if v, ok := aggs["doc_count_error_upper_bound"]; ok && v != nil { - json.Unmarshal(*v, &a.DocCountErrorUpperBound) - } - if v, ok := aggs["sum_other_doc_count"]; ok && v != nil { - json.Unmarshal(*v, &a.SumOfOtherDocCount) - } - if v, ok := aggs["buckets"]; ok && v != nil { - json.Unmarshal(*v, &a.Buckets) - } - a.Aggregations = aggs - return nil -} - -// AggregationBucketKeyItem is a single bucket of an AggregationBucketKeyItems structure. -type AggregationBucketKeyItem struct { - Aggregations - - Key interface{} //`json:"key"` - KeyAsString *string //`json:"key_as_string"` - KeyNumber json.Number - DocCount int64 //`json:"doc_count"` -} - -// UnmarshalJSON decodes JSON data and initializes an AggregationBucketKeyItem structure. -func (a *AggregationBucketKeyItem) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage - dec := json.NewDecoder(bytes.NewReader(data)) - dec.UseNumber() - if err := dec.Decode(&aggs); err != nil { - return err - } - if v, ok := aggs["key"]; ok && v != nil { - json.Unmarshal(*v, &a.Key) - json.Unmarshal(*v, &a.KeyNumber) - } - if v, ok := aggs["key_as_string"]; ok && v != nil { - json.Unmarshal(*v, &a.KeyAsString) - } - if v, ok := aggs["doc_count"]; ok && v != nil { - json.Unmarshal(*v, &a.DocCount) - } - a.Aggregations = aggs - return nil -} - -// -- Bucket types for significant terms -- - -// AggregationBucketSignificantTerms is a bucket aggregation returned -// with a significant terms aggregation. -type AggregationBucketSignificantTerms struct { - Aggregations - - DocCount int64 //`json:"doc_count"` - Buckets []*AggregationBucketSignificantTerm //`json:"buckets"` -} - -// UnmarshalJSON decodes JSON data and initializes an AggregationBucketSignificantTerms structure. -func (a *AggregationBucketSignificantTerms) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage - if err := json.Unmarshal(data, &aggs); err != nil { - return err - } - if v, ok := aggs["doc_count"]; ok && v != nil { - json.Unmarshal(*v, &a.DocCount) - } - if v, ok := aggs["buckets"]; ok && v != nil { - json.Unmarshal(*v, &a.Buckets) - } - a.Aggregations = aggs - return nil -} - -// AggregationBucketSignificantTerm is a single bucket of an AggregationBucketSignificantTerms structure. -type AggregationBucketSignificantTerm struct { - Aggregations - - Key string //`json:"key"` - DocCount int64 //`json:"doc_count"` - BgCount int64 //`json:"bg_count"` - Score float64 //`json:"score"` -} - -// UnmarshalJSON decodes JSON data and initializes an AggregationBucketSignificantTerm structure. -func (a *AggregationBucketSignificantTerm) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage - if err := json.Unmarshal(data, &aggs); err != nil { - return err - } - if v, ok := aggs["key"]; ok && v != nil { - json.Unmarshal(*v, &a.Key) - } - if v, ok := aggs["doc_count"]; ok && v != nil { - json.Unmarshal(*v, &a.DocCount) - } - if v, ok := aggs["bg_count"]; ok && v != nil { - json.Unmarshal(*v, &a.BgCount) - } - if v, ok := aggs["score"]; ok && v != nil { - json.Unmarshal(*v, &a.Score) - } - a.Aggregations = aggs - return nil -} - -// -- Bucket filters -- - -// AggregationBucketFilters is a multi-bucket aggregation that is returned -// with a filters aggregation. -type AggregationBucketFilters struct { - Aggregations - - Buckets []*AggregationBucketKeyItem //`json:"buckets"` - NamedBuckets map[string]*AggregationBucketKeyItem //`json:"buckets"` -} - -// UnmarshalJSON decodes JSON data and initializes an AggregationBucketFilters structure. -func (a *AggregationBucketFilters) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage - if err := json.Unmarshal(data, &aggs); err != nil { - return err - } - if v, ok := aggs["buckets"]; ok && v != nil { - json.Unmarshal(*v, &a.Buckets) - json.Unmarshal(*v, &a.NamedBuckets) - } - a.Aggregations = aggs - return nil -} - -// -- Bucket histogram items -- - -// AggregationBucketHistogramItems is a bucket aggregation that is returned -// with a date histogram aggregation. -type AggregationBucketHistogramItems struct { - Aggregations - - Buckets []*AggregationBucketHistogramItem //`json:"buckets"` -} - -// UnmarshalJSON decodes JSON data and initializes an AggregationBucketHistogramItems structure. -func (a *AggregationBucketHistogramItems) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage - if err := json.Unmarshal(data, &aggs); err != nil { - return err - } - if v, ok := aggs["buckets"]; ok && v != nil { - json.Unmarshal(*v, &a.Buckets) - } - a.Aggregations = aggs - return nil -} - -// AggregationBucketHistogramItem is a single bucket of an AggregationBucketHistogramItems structure. -type AggregationBucketHistogramItem struct { - Aggregations - - Key int64 //`json:"key"` - KeyAsString *string //`json:"key_as_string"` - DocCount int64 //`json:"doc_count"` -} - -// UnmarshalJSON decodes JSON data and initializes an AggregationBucketHistogramItem structure. -func (a *AggregationBucketHistogramItem) UnmarshalJSON(data []byte) error { - var aggs map[string]*json.RawMessage - if err := json.Unmarshal(data, &aggs); err != nil { - return err - } - if v, ok := aggs["key"]; ok && v != nil { - json.Unmarshal(*v, &a.Key) - } - if v, ok := aggs["key_as_string"]; ok && v != nil { - json.Unmarshal(*v, &a.KeyAsString) - } - if v, ok := aggs["doc_count"]; ok && v != nil { - json.Unmarshal(*v, &a.DocCount) - } - a.Aggregations = aggs - return nil -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_avg.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_avg.go deleted file mode 100644 index 7b01ee0..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_avg.go +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// AvgAggregation is a single-value metrics aggregation that computes -// the average of numeric values that are extracted from the -// aggregated documents. These values can be extracted either from -// specific numeric fields in the documents, or be generated by -// a provided script. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-avg-aggregation.html -type AvgAggregation struct { - field string - script string - scriptFile string - lang string - format string - params map[string]interface{} - subAggregations map[string]Aggregation -} - -func NewAvgAggregation() AvgAggregation { - a := AvgAggregation{ - params: make(map[string]interface{}), - subAggregations: make(map[string]Aggregation), - } - return a -} - -func (a AvgAggregation) Field(field string) AvgAggregation { - a.field = field - return a -} - -func (a AvgAggregation) Script(script string) AvgAggregation { - a.script = script - return a -} - -func (a AvgAggregation) ScriptFile(scriptFile string) AvgAggregation { - a.scriptFile = scriptFile - return a -} - -func (a AvgAggregation) Lang(lang string) AvgAggregation { - a.lang = lang - return a -} - -func (a AvgAggregation) Format(format string) AvgAggregation { - a.format = format - return a -} - -func (a AvgAggregation) Param(name string, value interface{}) AvgAggregation { - a.params[name] = value - return a -} - -func (a AvgAggregation) SubAggregation(name string, subAggregation Aggregation) AvgAggregation { - a.subAggregations[name] = subAggregation - return a -} - -func (a AvgAggregation) Source() interface{} { - // Example: - // { - // "aggs" : { - // "avg_grade" : { "avg" : { "field" : "grade" } } - // } - // } - // This method returns only the { "avg" : { "field" : "grade" } } part. - - source := make(map[string]interface{}) - opts := make(map[string]interface{}) - source["avg"] = opts - - // ValuesSourceAggregationBuilder - if a.field != "" { - opts["field"] = a.field - } - if a.script != "" { - opts["script"] = a.script - } - if a.scriptFile != "" { - opts["script_file"] = a.scriptFile - } - if a.lang != "" { - opts["lang"] = a.lang - } - if a.format != "" { - opts["format"] = a.format - } - if len(a.params) > 0 { - opts["params"] = a.params - } - - // AggregationBuilder (SubAggregations) - if len(a.subAggregations) > 0 { - aggsMap := make(map[string]interface{}) - source["aggregations"] = aggsMap - for name, aggregate := range a.subAggregations { - aggsMap[name] = aggregate.Source() - } - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_avg_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_avg_test.go deleted file mode 100644 index 8ddd831..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_avg_test.go +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestAvgAggregation(t *testing.T) { - agg := NewAvgAggregation().Field("grade") - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"avg":{"field":"grade"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestAvgAggregationWithFormat(t *testing.T) { - agg := NewAvgAggregation().Field("grade").Format("000.0") - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"avg":{"field":"grade","format":"000.0"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_cardinality.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_cardinality.go deleted file mode 100644 index 5d64134..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_cardinality.go +++ /dev/null @@ -1,128 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// CardinalityAggregation is a single-value metrics aggregation that -// calculates an approximate count of distinct values. -// Values can be extracted either from specific fields in the document -// or generated by a script. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-cardinality-aggregation.html -type CardinalityAggregation struct { - field string - script string - scriptFile string - lang string - format string - params map[string]interface{} - subAggregations map[string]Aggregation - precisionThreshold *int64 - rehash *bool -} - -func NewCardinalityAggregation() CardinalityAggregation { - a := CardinalityAggregation{ - params: make(map[string]interface{}), - subAggregations: make(map[string]Aggregation), - } - return a -} - -func (a CardinalityAggregation) Field(field string) CardinalityAggregation { - a.field = field - return a -} - -func (a CardinalityAggregation) Script(script string) CardinalityAggregation { - a.script = script - return a -} - -func (a CardinalityAggregation) ScriptFile(scriptFile string) CardinalityAggregation { - a.scriptFile = scriptFile - return a -} - -func (a CardinalityAggregation) Lang(lang string) CardinalityAggregation { - a.lang = lang - return a -} - -func (a CardinalityAggregation) Format(format string) CardinalityAggregation { - a.format = format - return a -} - -func (a CardinalityAggregation) Param(name string, value interface{}) CardinalityAggregation { - a.params[name] = value - return a -} - -func (a CardinalityAggregation) SubAggregation(name string, subAggregation Aggregation) CardinalityAggregation { - a.subAggregations[name] = subAggregation - return a -} - -func (a CardinalityAggregation) PrecisionThreshold(threshold int64) CardinalityAggregation { - a.precisionThreshold = &threshold - return a -} - -func (a CardinalityAggregation) Rehash(rehash bool) CardinalityAggregation { - a.rehash = &rehash - return a -} - -func (a CardinalityAggregation) Source() interface{} { - // Example: - // { - // "aggs" : { - // "author_count" : { - // "cardinality" : { "field" : "author" } - // } - // } - // } - // This method returns only the "cardinality" : { "field" : "author" } part. - - source := make(map[string]interface{}) - opts := make(map[string]interface{}) - source["cardinality"] = opts - - // ValuesSourceAggregationBuilder - if a.field != "" { - opts["field"] = a.field - } - if a.script != "" { - opts["script"] = a.script - } - if a.scriptFile != "" { - opts["script_file"] = a.scriptFile - } - if a.lang != "" { - opts["lang"] = a.lang - } - if a.format != "" { - opts["format"] = a.format - } - if len(a.params) > 0 { - opts["params"] = a.params - } - if a.precisionThreshold != nil { - opts["precision_threshold"] = *a.precisionThreshold - } - if a.rehash != nil { - opts["rehash"] = *a.rehash - } - - // AggregationBuilder (SubAggregations) - if len(a.subAggregations) > 0 { - aggsMap := make(map[string]interface{}) - source["aggregations"] = aggsMap - for name, aggregate := range a.subAggregations { - aggsMap[name] = aggregate.Source() - } - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_cardinality_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_cardinality_test.go deleted file mode 100644 index f2ff3df..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_cardinality_test.go +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestCardinalityAggregation(t *testing.T) { - agg := NewCardinalityAggregation().Field("author.hash") - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"cardinality":{"field":"author.hash"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestCardinalityAggregationWithOptions(t *testing.T) { - agg := NewCardinalityAggregation().Field("author.hash").PrecisionThreshold(100).Rehash(true) - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"cardinality":{"field":"author.hash","precision_threshold":100,"rehash":true}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestCardinalityAggregationWithFormat(t *testing.T) { - agg := NewCardinalityAggregation().Field("author.hash").Format("00000") - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"cardinality":{"field":"author.hash","format":"00000"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_children.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_children.go deleted file mode 100644 index 4fb3639..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_children.go +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// ChildrenAggregation is a special single bucket aggregation that enables -// aggregating from buckets on parent document types to buckets on child documents. -// It is available from 1.4.0.Beta1 upwards. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-children-aggregation.html -type ChildrenAggregation struct { - typ string - subAggregations map[string]Aggregation -} - -func NewChildrenAggregation() ChildrenAggregation { - a := ChildrenAggregation{ - subAggregations: make(map[string]Aggregation), - } - return a -} - -func (a ChildrenAggregation) Type(typ string) ChildrenAggregation { - a.typ = typ - return a -} - -func (a ChildrenAggregation) SubAggregation(name string, subAggregation Aggregation) ChildrenAggregation { - a.subAggregations[name] = subAggregation - return a -} - -func (a ChildrenAggregation) Source() interface{} { - // Example: - // { - // "aggs" : { - // "to-answers" : { - // "children": { - // "type" : "answer" - // } - // } - // } - // } - // This method returns only the { "type" : ... } part. - - source := make(map[string]interface{}) - opts := make(map[string]interface{}) - source["children"] = opts - opts["type"] = a.typ - - // AggregationBuilder (SubAggregations) - if len(a.subAggregations) > 0 { - aggsMap := make(map[string]interface{}) - source["aggregations"] = aggsMap - for name, aggregate := range a.subAggregations { - aggsMap[name] = aggregate.Source() - } - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_children_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_children_test.go deleted file mode 100644 index 05d258c..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_children_test.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestChildrenAggregation(t *testing.T) { - agg := NewChildrenAggregation().Type("answer") - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"children":{"type":"answer"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestChildrenAggregationWithSubAggregation(t *testing.T) { - subAgg := NewTermsAggregation().Field("owner.display_name").Size(10) - agg := NewChildrenAggregation().Type("answer") - agg = agg.SubAggregation("top-names", subAgg) - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"aggregations":{"top-names":{"terms":{"field":"owner.display_name","size":10}}},"children":{"type":"answer"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_date_histogram.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_date_histogram.go deleted file mode 100644 index 9b593bd..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_date_histogram.go +++ /dev/null @@ -1,303 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// DateHistogramAggregation is a multi-bucket aggregation similar to the -// histogram except it can only be applied on date values. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-datehistogram-aggregation.html -type DateHistogramAggregation struct { - field string - script string - scriptFile string - lang string - params map[string]interface{} - subAggregations map[string]Aggregation - - interval string - order string - orderAsc bool - minDocCount *int64 - extendedBoundsMin interface{} - extendedBoundsMax interface{} - preZone string - postZone string - preZoneAdjustLargeInterval *bool - format string - preOffset int64 - postOffset int64 - factor *float32 -} - -func NewDateHistogramAggregation() DateHistogramAggregation { - a := DateHistogramAggregation{ - params: make(map[string]interface{}), - subAggregations: make(map[string]Aggregation), - } - return a -} - -func (a DateHistogramAggregation) Field(field string) DateHistogramAggregation { - a.field = field - return a -} - -func (a DateHistogramAggregation) Script(script string) DateHistogramAggregation { - a.script = script - return a -} - -func (a DateHistogramAggregation) ScriptFile(scriptFile string) DateHistogramAggregation { - a.scriptFile = scriptFile - return a -} - -func (a DateHistogramAggregation) Lang(lang string) DateHistogramAggregation { - a.lang = lang - return a -} - -func (a DateHistogramAggregation) Param(name string, value interface{}) DateHistogramAggregation { - a.params[name] = value - return a -} - -func (a DateHistogramAggregation) SubAggregation(name string, subAggregation Aggregation) DateHistogramAggregation { - a.subAggregations[name] = subAggregation - return a -} - -// Allowed values are: "year", "quarter", "month", "week", "day", -// "hour", "minute". It also supports time settings like "1.5h" -// (up to "w" for weeks). -func (a DateHistogramAggregation) Interval(interval string) DateHistogramAggregation { - a.interval = interval - return a -} - -// Order specifies the sort order. Valid values for order are: -// "_key", "_count", a sub-aggregation name, or a sub-aggregation name -// with a metric. -func (a DateHistogramAggregation) Order(order string, asc bool) DateHistogramAggregation { - a.order = order - a.orderAsc = asc - return a -} - -func (a DateHistogramAggregation) OrderByCount(asc bool) DateHistogramAggregation { - // "order" : { "_count" : "asc" } - a.order = "_count" - a.orderAsc = asc - return a -} - -func (a DateHistogramAggregation) OrderByCountAsc() DateHistogramAggregation { - return a.OrderByCount(true) -} - -func (a DateHistogramAggregation) OrderByCountDesc() DateHistogramAggregation { - return a.OrderByCount(false) -} - -func (a DateHistogramAggregation) OrderByKey(asc bool) DateHistogramAggregation { - // "order" : { "_key" : "asc" } - a.order = "_key" - a.orderAsc = asc - return a -} - -func (a DateHistogramAggregation) OrderByKeyAsc() DateHistogramAggregation { - return a.OrderByKey(true) -} - -func (a DateHistogramAggregation) OrderByKeyDesc() DateHistogramAggregation { - return a.OrderByKey(false) -} - -// OrderByAggregation creates a bucket ordering strategy which sorts buckets -// based on a single-valued calc get. -func (a DateHistogramAggregation) OrderByAggregation(aggName string, asc bool) DateHistogramAggregation { - // { - // "aggs" : { - // "genders" : { - // "terms" : { - // "field" : "gender", - // "order" : { "avg_height" : "desc" } - // }, - // "aggs" : { - // "avg_height" : { "avg" : { "field" : "height" } } - // } - // } - // } - // } - a.order = aggName - a.orderAsc = asc - return a -} - -// OrderByAggregationAndMetric creates a bucket ordering strategy which -// sorts buckets based on a multi-valued calc get. -func (a DateHistogramAggregation) OrderByAggregationAndMetric(aggName, metric string, asc bool) DateHistogramAggregation { - // { - // "aggs" : { - // "genders" : { - // "terms" : { - // "field" : "gender", - // "order" : { "height_stats.avg" : "desc" } - // }, - // "aggs" : { - // "height_stats" : { "stats" : { "field" : "height" } } - // } - // } - // } - // } - a.order = aggName + "." + metric - a.orderAsc = asc - return a -} - -func (a DateHistogramAggregation) MinDocCount(minDocCount int64) DateHistogramAggregation { - a.minDocCount = &minDocCount - return a -} - -func (a DateHistogramAggregation) PreZone(preZone string) DateHistogramAggregation { - a.preZone = preZone - return a -} - -func (a DateHistogramAggregation) PostZone(postZone string) DateHistogramAggregation { - a.postZone = postZone - return a -} - -func (a DateHistogramAggregation) PreZoneAdjustLargeInterval(preZoneAdjustLargeInterval bool) DateHistogramAggregation { - a.preZoneAdjustLargeInterval = &preZoneAdjustLargeInterval - return a -} - -func (a DateHistogramAggregation) PreOffset(preOffset int64) DateHistogramAggregation { - a.preOffset = preOffset - return a -} - -func (a DateHistogramAggregation) PostOffset(postOffset int64) DateHistogramAggregation { - a.postOffset = postOffset - return a -} - -func (a DateHistogramAggregation) Factor(factor float32) DateHistogramAggregation { - a.factor = &factor - return a -} - -func (a DateHistogramAggregation) Format(format string) DateHistogramAggregation { - a.format = format - return a -} - -// ExtendedBoundsMin accepts int, int64, string, or time.Time values. -func (a DateHistogramAggregation) ExtendedBoundsMin(min interface{}) DateHistogramAggregation { - a.extendedBoundsMin = min - return a -} - -// ExtendedBoundsMax accepts int, int64, string, or time.Time values. -func (a DateHistogramAggregation) ExtendedBoundsMax(max interface{}) DateHistogramAggregation { - a.extendedBoundsMax = max - return a -} - -func (a DateHistogramAggregation) Source() interface{} { - // Example: - // { - // "aggs" : { - // "articles_over_time" : { - // "date_histogram" : { - // "field" : "date", - // "interval" : "month" - // } - // } - // } - // } - // - // This method returns only the { "date_histogram" : { ... } } part. - - source := make(map[string]interface{}) - opts := make(map[string]interface{}) - source["date_histogram"] = opts - - // ValuesSourceAggregationBuilder - if a.field != "" { - opts["field"] = a.field - } - if a.script != "" { - opts["script"] = a.script - } - if a.scriptFile != "" { - opts["script_file"] = a.scriptFile - } - if a.lang != "" { - opts["lang"] = a.lang - } - if len(a.params) > 0 { - opts["params"] = a.params - } - - opts["interval"] = a.interval - if a.minDocCount != nil { - opts["min_doc_count"] = *a.minDocCount - } - if a.order != "" { - o := make(map[string]interface{}) - if a.orderAsc { - o[a.order] = "asc" - } else { - o[a.order] = "desc" - } - opts["order"] = o - } - if a.preZone != "" { - opts["pre_zone"] = a.preZone - } - if a.postZone != "" { - opts["post_zone"] = a.postZone - } - if a.preZoneAdjustLargeInterval != nil { - opts["pre_zone_adjust_large_interval"] = *a.preZoneAdjustLargeInterval - } - if a.preOffset != 0 { - opts["pre_offset"] = a.preOffset - } - if a.postOffset != 0 { - opts["post_offset"] = a.postOffset - } - if a.factor != nil { - opts["factor"] = *a.factor - } - if a.format != "" { - opts["format"] = a.format - } - if a.extendedBoundsMin != nil || a.extendedBoundsMax != nil { - bounds := make(map[string]interface{}) - if a.extendedBoundsMin != nil { - bounds["min"] = a.extendedBoundsMin - } - if a.extendedBoundsMax != nil { - bounds["max"] = a.extendedBoundsMax - } - opts["extended_bounds"] = bounds - } - - // AggregationBuilder (SubAggregations) - if len(a.subAggregations) > 0 { - aggsMap := make(map[string]interface{}) - source["aggregations"] = aggsMap - for name, aggregate := range a.subAggregations { - aggsMap[name] = aggregate.Source() - } - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_date_histogram_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_date_histogram_test.go deleted file mode 100644 index 0e461c6..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_date_histogram_test.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestDateHistogramAggregation(t *testing.T) { - agg := NewDateHistogramAggregation().Field("date").Interval("month").Format("YYYY-MM") - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"date_histogram":{"field":"date","format":"YYYY-MM","interval":"month"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_date_range.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_date_range.go deleted file mode 100644 index c0c550e..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_date_range.go +++ /dev/null @@ -1,243 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "time" -) - -// DateRangeAggregation is a range aggregation that is dedicated for -// date values. The main difference between this aggregation and the -// normal range aggregation is that the from and to values can be expressed -// in Date Math expressions, and it is also possible to specify a -// date format by which the from and to response fields will be returned. -// Note that this aggregration includes the from value and excludes the to -// value for each range. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-daterange-aggregation.html -type DateRangeAggregation struct { - field string - script string - scriptFile string - lang string - params map[string]interface{} - subAggregations map[string]Aggregation - keyed *bool - unmapped *bool - format string - entries []DateRangeAggregationEntry -} - -type DateRangeAggregationEntry struct { - Key string - From interface{} - To interface{} -} - -func NewDateRangeAggregation() DateRangeAggregation { - a := DateRangeAggregation{ - params: make(map[string]interface{}), - subAggregations: make(map[string]Aggregation), - entries: make([]DateRangeAggregationEntry, 0), - } - return a -} - -func (a DateRangeAggregation) Field(field string) DateRangeAggregation { - a.field = field - return a -} - -func (a DateRangeAggregation) Script(script string) DateRangeAggregation { - a.script = script - return a -} - -func (a DateRangeAggregation) ScriptFile(scriptFile string) DateRangeAggregation { - a.scriptFile = scriptFile - return a -} - -func (a DateRangeAggregation) Lang(lang string) DateRangeAggregation { - a.lang = lang - return a -} - -func (a DateRangeAggregation) Param(name string, value interface{}) DateRangeAggregation { - a.params[name] = value - return a -} - -func (a DateRangeAggregation) SubAggregation(name string, subAggregation Aggregation) DateRangeAggregation { - a.subAggregations[name] = subAggregation - return a -} - -func (a DateRangeAggregation) Keyed(keyed bool) DateRangeAggregation { - a.keyed = &keyed - return a -} - -func (a DateRangeAggregation) Unmapped(unmapped bool) DateRangeAggregation { - a.unmapped = &unmapped - return a -} - -func (a DateRangeAggregation) Format(format string) DateRangeAggregation { - a.format = format - return a -} - -func (a DateRangeAggregation) AddRange(from, to interface{}) DateRangeAggregation { - a.entries = append(a.entries, DateRangeAggregationEntry{From: from, To: to}) - return a -} - -func (a DateRangeAggregation) AddRangeWithKey(key string, from, to interface{}) DateRangeAggregation { - a.entries = append(a.entries, DateRangeAggregationEntry{Key: key, From: from, To: to}) - return a -} - -func (a DateRangeAggregation) AddUnboundedTo(from interface{}) DateRangeAggregation { - a.entries = append(a.entries, DateRangeAggregationEntry{From: from, To: nil}) - return a -} - -func (a DateRangeAggregation) AddUnboundedToWithKey(key string, from interface{}) DateRangeAggregation { - a.entries = append(a.entries, DateRangeAggregationEntry{Key: key, From: from, To: nil}) - return a -} - -func (a DateRangeAggregation) AddUnboundedFrom(to interface{}) DateRangeAggregation { - a.entries = append(a.entries, DateRangeAggregationEntry{From: nil, To: to}) - return a -} - -func (a DateRangeAggregation) AddUnboundedFromWithKey(key string, to interface{}) DateRangeAggregation { - a.entries = append(a.entries, DateRangeAggregationEntry{Key: key, From: nil, To: to}) - return a -} - -func (a DateRangeAggregation) Lt(to interface{}) DateRangeAggregation { - a.entries = append(a.entries, DateRangeAggregationEntry{From: nil, To: to}) - return a -} - -func (a DateRangeAggregation) LtWithKey(key string, to interface{}) DateRangeAggregation { - a.entries = append(a.entries, DateRangeAggregationEntry{Key: key, From: nil, To: to}) - return a -} - -func (a DateRangeAggregation) Between(from, to interface{}) DateRangeAggregation { - a.entries = append(a.entries, DateRangeAggregationEntry{From: from, To: to}) - return a -} - -func (a DateRangeAggregation) BetweenWithKey(key string, from, to interface{}) DateRangeAggregation { - a.entries = append(a.entries, DateRangeAggregationEntry{Key: key, From: from, To: to}) - return a -} - -func (a DateRangeAggregation) Gt(from interface{}) DateRangeAggregation { - a.entries = append(a.entries, DateRangeAggregationEntry{From: from, To: nil}) - return a -} - -func (a DateRangeAggregation) GtWithKey(key string, from interface{}) DateRangeAggregation { - a.entries = append(a.entries, DateRangeAggregationEntry{Key: key, From: from, To: nil}) - return a -} - -func (a DateRangeAggregation) Source() interface{} { - // Example: - // { - // "aggs" : { - // "range" : { - // "date_range": { - // "field": "date", - // "format": "MM-yyy", - // "ranges": [ - // { "to": "now-10M/M" }, - // { "from": "now-10M/M" } - // ] - // } - // } - // } - // } - // } - // - // This method returns only the { "date_range" : { ... } } part. - - source := make(map[string]interface{}) - opts := make(map[string]interface{}) - source["date_range"] = opts - - // ValuesSourceAggregationBuilder - if a.field != "" { - opts["field"] = a.field - } - if a.script != "" { - opts["script"] = a.script - } - if a.scriptFile != "" { - opts["script_file"] = a.scriptFile - } - if a.lang != "" { - opts["lang"] = a.lang - } - if len(a.params) > 0 { - opts["params"] = a.params - } - - if a.keyed != nil { - opts["keyed"] = *a.keyed - } - if a.unmapped != nil { - opts["unmapped"] = *a.unmapped - } - if a.format != "" { - opts["format"] = a.format - } - - ranges := make([]interface{}, 0) - for _, ent := range a.entries { - r := make(map[string]interface{}) - if ent.Key != "" { - r["key"] = ent.Key - } - if ent.From != nil { - switch from := ent.From.(type) { - case int, int16, int32, int64, float32, float64: - r["from"] = from - case time.Time: - r["from"] = from.Format(time.RFC3339) - case string: - r["from"] = from - } - } - if ent.To != nil { - switch to := ent.To.(type) { - case int, int16, int32, int64, float32, float64: - r["to"] = to - case time.Time: - r["to"] = to.Format(time.RFC3339) - case string: - r["to"] = to - } - } - ranges = append(ranges, r) - } - opts["ranges"] = ranges - - // AggregationBuilder (SubAggregations) - if len(a.subAggregations) > 0 { - aggsMap := make(map[string]interface{}) - source["aggregations"] = aggsMap - for name, aggregate := range a.subAggregations { - aggsMap[name] = aggregate.Source() - } - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_date_range_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_date_range_test.go deleted file mode 100644 index 87221c1..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_date_range_test.go +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestDateRangeAggregation(t *testing.T) { - agg := NewDateRangeAggregation().Field("created_at") - agg = agg.AddRange(nil, "2012-12-31") - agg = agg.AddRange("2013-01-01", "2013-12-31") - agg = agg.AddRange("2014-01-01", nil) - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"date_range":{"field":"created_at","ranges":[{"to":"2012-12-31"},{"from":"2013-01-01","to":"2013-12-31"},{"from":"2014-01-01"}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestDateRangeAggregationWithUnbounded(t *testing.T) { - agg := NewDateRangeAggregation().Field("created_at"). - AddUnboundedFrom("2012-12-31"). - AddRange("2013-01-01", "2013-12-31"). - AddUnboundedTo("2014-01-01") - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"date_range":{"field":"created_at","ranges":[{"to":"2012-12-31"},{"from":"2013-01-01","to":"2013-12-31"},{"from":"2014-01-01"}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestDateRangeAggregationWithLtAndCo(t *testing.T) { - agg := NewDateRangeAggregation().Field("created_at"). - Lt("2012-12-31"). - Between("2013-01-01", "2013-12-31"). - Gt("2014-01-01") - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"date_range":{"field":"created_at","ranges":[{"to":"2012-12-31"},{"from":"2013-01-01","to":"2013-12-31"},{"from":"2014-01-01"}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestDateRangeAggregationWithKeyedFlag(t *testing.T) { - agg := NewDateRangeAggregation().Field("created_at"). - Keyed(true). - Lt("2012-12-31"). - Between("2013-01-01", "2013-12-31"). - Gt("2014-01-01") - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"date_range":{"field":"created_at","keyed":true,"ranges":[{"to":"2012-12-31"},{"from":"2013-01-01","to":"2013-12-31"},{"from":"2014-01-01"}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestDateRangeAggregationWithKeys(t *testing.T) { - agg := NewDateRangeAggregation().Field("created_at"). - Keyed(true). - LtWithKey("pre-2012", "2012-12-31"). - BetweenWithKey("2013", "2013-01-01", "2013-12-31"). - GtWithKey("post-2013", "2014-01-01") - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"date_range":{"field":"created_at","keyed":true,"ranges":[{"key":"pre-2012","to":"2012-12-31"},{"from":"2013-01-01","key":"2013","to":"2013-12-31"},{"from":"2014-01-01","key":"post-2013"}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestDateRangeAggregationWithSpecialNames(t *testing.T) { - agg := NewDateRangeAggregation().Field("created_at"). - AddRange("now-10M/M", "now+10M/M") - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"date_range":{"field":"created_at","ranges":[{"from":"now-10M/M","to":"now+10M/M"}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_extended_stats.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_extended_stats.go deleted file mode 100644 index 76cd572..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_extended_stats.go +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// ExtendedExtendedStatsAggregation is a multi-value metrics aggregation that -// computes stats over numeric values extracted from the aggregated documents. -// These values can be extracted either from specific numeric fields -// in the documents, or be generated by a provided script. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-extendedstats-aggregation.html -type ExtendedStatsAggregation struct { - field string - script string - scriptFile string - lang string - format string - params map[string]interface{} - subAggregations map[string]Aggregation -} - -func NewExtendedStatsAggregation() ExtendedStatsAggregation { - a := ExtendedStatsAggregation{ - params: make(map[string]interface{}), - subAggregations: make(map[string]Aggregation), - } - return a -} - -func (a ExtendedStatsAggregation) Field(field string) ExtendedStatsAggregation { - a.field = field - return a -} - -func (a ExtendedStatsAggregation) Script(script string) ExtendedStatsAggregation { - a.script = script - return a -} - -func (a ExtendedStatsAggregation) ScriptFile(scriptFile string) ExtendedStatsAggregation { - a.scriptFile = scriptFile - return a -} - -func (a ExtendedStatsAggregation) Lang(lang string) ExtendedStatsAggregation { - a.lang = lang - return a -} - -func (a ExtendedStatsAggregation) Format(format string) ExtendedStatsAggregation { - a.format = format - return a -} - -func (a ExtendedStatsAggregation) Param(name string, value interface{}) ExtendedStatsAggregation { - a.params[name] = value - return a -} - -func (a ExtendedStatsAggregation) SubAggregation(name string, subAggregation Aggregation) ExtendedStatsAggregation { - a.subAggregations[name] = subAggregation - return a -} - -func (a ExtendedStatsAggregation) Source() interface{} { - // Example: - // { - // "aggs" : { - // "grades_stats" : { "extended_stats" : { "field" : "grade" } } - // } - // } - // This method returns only the { "extended_stats" : { "field" : "grade" } } part. - - source := make(map[string]interface{}) - opts := make(map[string]interface{}) - source["extended_stats"] = opts - - // ValuesSourceAggregationBuilder - if a.field != "" { - opts["field"] = a.field - } - if a.script != "" { - opts["script"] = a.script - } - if a.scriptFile != "" { - opts["script_file"] = a.scriptFile - } - if a.lang != "" { - opts["lang"] = a.lang - } - if a.format != "" { - opts["format"] = a.format - } - if len(a.params) > 0 { - opts["params"] = a.params - } - - // AggregationBuilder (SubAggregations) - if len(a.subAggregations) > 0 { - aggsMap := make(map[string]interface{}) - source["aggregations"] = aggsMap - for name, aggregate := range a.subAggregations { - aggsMap[name] = aggregate.Source() - } - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_extended_stats_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_extended_stats_test.go deleted file mode 100644 index 8771c46..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_extended_stats_test.go +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestExtendedStatsAggregation(t *testing.T) { - agg := NewExtendedStatsAggregation().Field("grade") - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"extended_stats":{"field":"grade"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestExtendedStatsAggregationWithFormat(t *testing.T) { - agg := NewExtendedStatsAggregation().Field("grade").Format("000.0") - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"extended_stats":{"field":"grade","format":"000.0"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_filter.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_filter.go deleted file mode 100644 index d165f35..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_filter.go +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// FilterAggregation defines a single bucket of all the documents -// in the current document set context that match a specified filter. -// Often this will be used to narrow down the current aggregation context -// to a specific set of documents. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filter-aggregation.html -type FilterAggregation struct { - filter Filter - subAggregations map[string]Aggregation -} - -func NewFilterAggregation() FilterAggregation { - a := FilterAggregation{ - subAggregations: make(map[string]Aggregation), - } - return a -} - -func (a FilterAggregation) SubAggregation(name string, subAggregation Aggregation) FilterAggregation { - a.subAggregations[name] = subAggregation - return a -} - -func (a FilterAggregation) Filter(filter Filter) FilterAggregation { - a.filter = filter - return a -} - -func (a FilterAggregation) Source() interface{} { - // Example: - // { - // "aggs" : { - // "in_stock_products" : { - // "filter" : { "range" : { "stock" : { "gt" : 0 } } } - // } - // } - // } - // This method returns only the { "filter" : {} } part. - - source := make(map[string]interface{}) - source["filter"] = a.filter.Source() - - // AggregationBuilder (SubAggregations) - if len(a.subAggregations) > 0 { - aggsMap := make(map[string]interface{}) - source["aggregations"] = aggsMap - for name, aggregate := range a.subAggregations { - aggsMap[name] = aggregate.Source() - } - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_filter_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_filter_test.go deleted file mode 100644 index b901378..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_filter_test.go +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestFilterAggregation(t *testing.T) { - filter := NewRangeFilter("stock").Gt(0) - agg := NewFilterAggregation().Filter(filter) - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"filter":{"range":{"stock":{"from":0,"include_lower":false,"include_upper":true,"to":null}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestFilterAggregationWithSubAggregation(t *testing.T) { - avgPriceAgg := NewAvgAggregation().Field("price") - filter := NewRangeFilter("stock").Gt(0) - agg := NewFilterAggregation().Filter(filter). - SubAggregation("avg_price", avgPriceAgg) - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"aggregations":{"avg_price":{"avg":{"field":"price"}}},"filter":{"range":{"stock":{"from":0,"include_lower":false,"include_upper":true,"to":null}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_filters.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_filters.go deleted file mode 100644 index bbe342b..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_filters.go +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// FiltersAggregation defines a multi bucket aggregations where each bucket -// is associated with a filter. Each bucket will collect all documents that -// match its associated filter. -// -// Notice that the caller has to decide whether to add filters by name -// (using FilterWithName) or unnamed filters (using Filter or Filters). One cannot -// use both named and unnamed filters. -// -// For details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filters-aggregation.html -type FiltersAggregation struct { - unnamedFilters []Filter - namedFilters map[string]Filter - subAggregations map[string]Aggregation -} - -// NewFiltersAggregation initializes a new FiltersAggregation. -func NewFiltersAggregation() FiltersAggregation { - return FiltersAggregation{ - unnamedFilters: make([]Filter, 0), - namedFilters: make(map[string]Filter), - subAggregations: make(map[string]Aggregation), - } -} - -// Filter adds an unnamed filter. Notice that you can -// either use named or unnamed filters, but not both. -func (a FiltersAggregation) Filter(filter Filter) FiltersAggregation { - a.unnamedFilters = append(a.unnamedFilters, filter) - return a -} - -// Filters adds one or more unnamed filters. Notice that you can -// either use named or unnamed filters, but not both. -func (a FiltersAggregation) Filters(filters ...Filter) FiltersAggregation { - if len(filters) > 0 { - a.unnamedFilters = append(a.unnamedFilters, filters...) - } - return a -} - -// FilterWithName adds a filter with a specific name. Notice that you can -// either use named or unnamed filters, but not both. -func (a FiltersAggregation) FilterWithName(name string, filter Filter) FiltersAggregation { - a.namedFilters[name] = filter - return a -} - -// SubAggregation adds a sub-aggregation to this aggregation. -func (a FiltersAggregation) SubAggregation(name string, subAggregation Aggregation) FiltersAggregation { - a.subAggregations[name] = subAggregation - return a -} - -// Source returns the a JSON-serializable interface. -func (a FiltersAggregation) Source() interface{} { - // Example: - // { - // "aggs" : { - // "messages" : { - // "filters" : { - // "filters" : { - // "errors" : { "term" : { "body" : "error" }}, - // "warnings" : { "term" : { "body" : "warning" }} - // } - // } - // } - // } - // } - // This method returns only the (outer) { "filters" : {} } part. - - source := make(map[string]interface{}) - filters := make(map[string]interface{}) - source["filters"] = filters - - // TODO We cannot return an error here due to compatibility reasons - // in elastic.v2, so we're going to return only the unnamed filters for now. - - if len(a.unnamedFilters) > 0 { - arr := make([]interface{}, len(a.unnamedFilters)) - for i, filter := range a.unnamedFilters { - arr[i] = filter.Source() - } - filters["filters"] = arr - } else { - dict := make(map[string]interface{}) - for key, filter := range a.namedFilters { - dict[key] = filter.Source() - } - filters["filters"] = dict - } - - // AggregationBuilder (SubAggregations) - if len(a.subAggregations) > 0 { - aggsMap := make(map[string]interface{}) - source["aggregations"] = aggsMap - for name, aggregate := range a.subAggregations { - aggsMap[name] = aggregate.Source() - } - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_filters_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_filters_test.go deleted file mode 100644 index 9168c39..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_filters_test.go +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestFiltersAggregationFilters(t *testing.T) { - f1 := NewRangeFilter("stock").Gt(0) - f2 := NewTermFilter("symbol", "GOOG") - agg := NewFiltersAggregation().Filters(f1, f2) - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"filters":{"filters":[{"range":{"stock":{"from":0,"include_lower":false,"include_upper":true,"to":null}}},{"term":{"symbol":"GOOG"}}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestFiltersAggregationFilterWithName(t *testing.T) { - f1 := NewRangeQuery("stock").Gt(0) - f2 := NewTermQuery("symbol", "GOOG") - agg := NewFiltersAggregation(). - FilterWithName("f1", f1). - FilterWithName("f2", f2) - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"filters":{"filters":{"f1":{"range":{"stock":{"from":0,"include_lower":false,"include_upper":true,"to":null}}},"f2":{"term":{"symbol":"GOOG"}}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestFiltersAggregationWithKeyedAndNonKeyedFilters(t *testing.T) { - // When both filter types are specified, we should return an error. - // However, elastic.v2--for compatibility reasons--does not return an error - // from the Source func. So we choose to return only unnamed filters in - // that situation. Here's a test for that. - agg := NewFiltersAggregation(). - Filter(NewTermQuery("symbol", "MSFT")). // unnamed - FilterWithName("one", NewTermQuery("symbol", "GOOG")) // named filter - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"filters":{"filters":[{"term":{"symbol":"MSFT"}}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestFiltersAggregationWithSubAggregation(t *testing.T) { - avgPriceAgg := NewAvgAggregation().Field("price") - f1 := NewRangeFilter("stock").Gt(0) - f2 := NewTermFilter("symbol", "GOOG") - agg := NewFiltersAggregation().Filters(f1, f2).SubAggregation("avg_price", avgPriceAgg) - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"aggregations":{"avg_price":{"avg":{"field":"price"}}},"filters":{"filters":[{"range":{"stock":{"from":0,"include_lower":false,"include_upper":true,"to":null}}},{"term":{"symbol":"GOOG"}}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_geo_bounds.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_geo_bounds.go deleted file mode 100644 index 33d9eb9..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_geo_bounds.go +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// GeoBoundsAggregation is a metric aggregation that computes the -// bounding box containing all geo_point values for a field. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-geobounds-aggregation.html -type GeoBoundsAggregation struct { - field string - script string - scriptFile string - lang string - params map[string]interface{} - wrapLongitude *bool -} - -func NewGeoBoundsAggregation() GeoBoundsAggregation { - a := GeoBoundsAggregation{} - return a -} - -func (a GeoBoundsAggregation) Field(field string) GeoBoundsAggregation { - a.field = field - return a -} - -func (a GeoBoundsAggregation) Script(script string) GeoBoundsAggregation { - a.script = script - return a -} - -func (a GeoBoundsAggregation) ScriptFile(scriptFile string) GeoBoundsAggregation { - a.scriptFile = scriptFile - return a -} - -func (a GeoBoundsAggregation) Lang(lang string) GeoBoundsAggregation { - a.lang = lang - return a -} - -func (a GeoBoundsAggregation) Params(params map[string]interface{}) GeoBoundsAggregation { - a.params = params - return a -} - -func (a GeoBoundsAggregation) Param(name string, value interface{}) GeoBoundsAggregation { - if a.params == nil { - a.params = make(map[string]interface{}) - } - a.params[name] = value - return a -} - -func (a GeoBoundsAggregation) WrapLongitude(wrapLongitude bool) GeoBoundsAggregation { - a.wrapLongitude = &wrapLongitude - return a -} - -func (a GeoBoundsAggregation) Source() interface{} { - // Example: - // { - // "query" : { - // "match" : { "business_type" : "shop" } - // }, - // "aggs" : { - // "viewport" : { - // "geo_bounds" : { - // "field" : "location" - // "wrap_longitude" : "true" - // } - // } - // } - // } - // - // This method returns only the { "geo_bounds" : { ... } } part. - - source := make(map[string]interface{}) - opts := make(map[string]interface{}) - source["geo_bounds"] = opts - - if a.field != "" { - opts["field"] = a.field - } - if a.script != "" { - opts["script"] = a.script - } - if a.scriptFile != "" { - opts["script_file"] = a.scriptFile - } - if a.lang != "" { - opts["lang"] = a.lang - } - if a.params != nil && len(a.params) > 0 { - opts["params"] = a.params - } - if a.wrapLongitude != nil { - opts["wrap_longitude"] = *a.wrapLongitude - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_geo_bounds_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_geo_bounds_test.go deleted file mode 100644 index 904d7a2..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_geo_bounds_test.go +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestGeoBoundsAggregation(t *testing.T) { - agg := NewGeoBoundsAggregation().Field("location") - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"geo_bounds":{"field":"location"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestGeoBoundsAggregationWithWrapLongitude(t *testing.T) { - agg := NewGeoBoundsAggregation().Field("location").WrapLongitude(true) - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"geo_bounds":{"field":"location","wrap_longitude":true}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_geo_distance.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_geo_distance.go deleted file mode 100644 index d63af53..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_geo_distance.go +++ /dev/null @@ -1,180 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// GeoDistanceAggregation is a multi-bucket aggregation that works on geo_point fields -// and conceptually works very similar to the range aggregation. -// The user can define a point of origin and a set of distance range buckets. -// The aggregation evaluate the distance of each document value from -// the origin point and determines the buckets it belongs to based on -// the ranges (a document belongs to a bucket if the distance between the -// document and the origin falls within the distance range of the bucket). -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/master/search-aggregations-bucket-geodistance-aggregation.html -type GeoDistanceAggregation struct { - field string - unit string - distanceType string - point string - ranges []geoDistAggRange - subAggregations map[string]Aggregation -} - -type geoDistAggRange struct { - Key string - From interface{} - To interface{} -} - -func NewGeoDistanceAggregation() GeoDistanceAggregation { - a := GeoDistanceAggregation{ - subAggregations: make(map[string]Aggregation), - ranges: make([]geoDistAggRange, 0), - } - return a -} - -func (a GeoDistanceAggregation) Field(field string) GeoDistanceAggregation { - a.field = field - return a -} - -func (a GeoDistanceAggregation) Unit(unit string) GeoDistanceAggregation { - a.unit = unit - return a -} - -func (a GeoDistanceAggregation) DistanceType(distanceType string) GeoDistanceAggregation { - a.distanceType = distanceType - return a -} - -func (a GeoDistanceAggregation) Point(latLon string) GeoDistanceAggregation { - a.point = latLon - return a -} - -func (a GeoDistanceAggregation) SubAggregation(name string, subAggregation Aggregation) GeoDistanceAggregation { - a.subAggregations[name] = subAggregation - return a -} - -func (a GeoDistanceAggregation) AddRange(from, to interface{}) GeoDistanceAggregation { - a.ranges = append(a.ranges, geoDistAggRange{From: from, To: to}) - return a -} - -func (a GeoDistanceAggregation) AddRangeWithKey(key string, from, to interface{}) GeoDistanceAggregation { - a.ranges = append(a.ranges, geoDistAggRange{Key: key, From: from, To: to}) - return a -} - -func (a GeoDistanceAggregation) AddUnboundedTo(from float64) GeoDistanceAggregation { - a.ranges = append(a.ranges, geoDistAggRange{From: from, To: nil}) - return a -} - -func (a GeoDistanceAggregation) AddUnboundedToWithKey(key string, from float64) GeoDistanceAggregation { - a.ranges = append(a.ranges, geoDistAggRange{Key: key, From: from, To: nil}) - return a -} - -func (a GeoDistanceAggregation) AddUnboundedFrom(to float64) GeoDistanceAggregation { - a.ranges = append(a.ranges, geoDistAggRange{From: nil, To: to}) - return a -} - -func (a GeoDistanceAggregation) AddUnboundedFromWithKey(key string, to float64) GeoDistanceAggregation { - a.ranges = append(a.ranges, geoDistAggRange{Key: key, From: nil, To: to}) - return a -} - -func (a GeoDistanceAggregation) Between(from, to interface{}) GeoDistanceAggregation { - a.ranges = append(a.ranges, geoDistAggRange{From: from, To: to}) - return a -} - -func (a GeoDistanceAggregation) BetweenWithKey(key string, from, to interface{}) GeoDistanceAggregation { - a.ranges = append(a.ranges, geoDistAggRange{Key: key, From: from, To: to}) - return a -} - -func (a GeoDistanceAggregation) Source() interface{} { - // Example: - // { - // "aggs" : { - // "rings_around_amsterdam" : { - // "geo_distance" : { - // "field" : "location", - // "origin" : "52.3760, 4.894", - // "ranges" : [ - // { "to" : 100 }, - // { "from" : 100, "to" : 300 }, - // { "from" : 300 } - // ] - // } - // } - // } - // } - // - // This method returns only the { "range" : { ... } } part. - - source := make(map[string]interface{}) - opts := make(map[string]interface{}) - source["geo_distance"] = opts - - if a.field != "" { - opts["field"] = a.field - } - if a.unit != "" { - opts["unit"] = a.unit - } - if a.distanceType != "" { - opts["distance_type"] = a.distanceType - } - if a.point != "" { - opts["origin"] = a.point - } - - ranges := make([]interface{}, 0) - for _, ent := range a.ranges { - r := make(map[string]interface{}) - if ent.Key != "" { - r["key"] = ent.Key - } - if ent.From != nil { - switch from := ent.From.(type) { - case int, int16, int32, int64, float32, float64: - r["from"] = from - case *int, *int16, *int32, *int64, *float32, *float64: - r["from"] = from - case string: - r["from"] = from - } - } - if ent.To != nil { - switch to := ent.To.(type) { - case int, int16, int32, int64, float32, float64: - r["to"] = to - case *int, *int16, *int32, *int64, *float32, *float64: - r["to"] = to - case string: - r["to"] = to - } - } - ranges = append(ranges, r) - } - opts["ranges"] = ranges - - // AggregationBuilder (SubAggregations) - if len(a.subAggregations) > 0 { - aggsMap := make(map[string]interface{}) - source["aggregations"] = aggsMap - for name, aggregate := range a.subAggregations { - aggsMap[name] = aggregate.Source() - } - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_geo_distance_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_geo_distance_test.go deleted file mode 100644 index 85729e5..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_geo_distance_test.go +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestGeoDistanceAggregation(t *testing.T) { - agg := NewGeoDistanceAggregation().Field("location").Point("52.3760, 4.894") - agg = agg.AddRange(nil, 100) - agg = agg.AddRange(100, 300) - agg = agg.AddRange(300, nil) - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"geo_distance":{"field":"location","origin":"52.3760, 4.894","ranges":[{"to":100},{"from":100,"to":300},{"from":300}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestGeoDistanceAggregationWithUnbounded(t *testing.T) { - agg := NewGeoDistanceAggregation().Field("location").Point("52.3760, 4.894") - agg = agg.AddUnboundedFrom(100) - agg = agg.AddRange(100, 300) - agg = agg.AddUnboundedTo(300) - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"geo_distance":{"field":"location","origin":"52.3760, 4.894","ranges":[{"to":100},{"from":100,"to":300},{"from":300}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_geohash_grid.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_geohash_grid.go deleted file mode 100644 index b992818..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_geohash_grid.go +++ /dev/null @@ -1,98 +0,0 @@ -package elastic - -type GeoHashGridAggregation struct { - field string - precision int - size int - shardSize int - subAggregations map[string]Aggregation - meta map[string]interface{} -} - -func NewGeoHashGridAggregation() *GeoHashGridAggregation { - return &GeoHashGridAggregation{ - subAggregations: make(map[string]Aggregation), - precision: -1, - size: -1, - shardSize: -1, - } -} - -func (a *GeoHashGridAggregation) Field(field string) *GeoHashGridAggregation { - a.field = field - return a -} - -func (a *GeoHashGridAggregation) Precision(precision int) *GeoHashGridAggregation { - a.precision = precision - return a -} - -func (a *GeoHashGridAggregation) Size(size int) *GeoHashGridAggregation { - a.size = size - return a -} - -func (a *GeoHashGridAggregation) ShardSize(shardSize int) *GeoHashGridAggregation { - a.shardSize = shardSize - return a -} - -func (a *GeoHashGridAggregation) SubAggregation(name string, subAggregation Aggregation) *GeoHashGridAggregation { - a.subAggregations[name] = subAggregation - return a -} - -func (a *GeoHashGridAggregation) Meta(metaData map[string]interface{}) *GeoHashGridAggregation { - a.meta = metaData - return a -} - -func (a *GeoHashGridAggregation) Source() interface{} { - // Example: - // { - // "aggs": { - // "new_york": { - // "geohash_grid": { - // "field": "location", - // "precision": 5 - // } - // } - // } - // } - - source := make(map[string]interface{}) - opts := make(map[string]interface{}) - source["geohash_grid"] = opts - - if a.field != "" { - opts["field"] = a.field - } - - if a.precision != -1 { - opts["precision"] = a.precision - } - - if a.size != -1 { - opts["size"] = a.size - } - - if a.shardSize != -1 { - opts["shard_size"] = a.shardSize - } - - // AggregationBuilder (SubAggregations) - if len(a.subAggregations) > 0 { - aggsMap := make(map[string]interface{}) - source["aggregations"] = aggsMap - for name, aggregate := range a.subAggregations { - aggsMap[name] = aggregate.Source() - } - } - - if len(a.meta) > 0 { - source["meta"] = a.meta - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_geohash_grid_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_geohash_grid_test.go deleted file mode 100644 index 9487ad1..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_geohash_grid_test.go +++ /dev/null @@ -1,64 +0,0 @@ -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestGeoHashGridAggregation(t *testing.T) { - agg := NewGeoHashGridAggregation().Field("location").Precision(5) - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("Marshalling to JSON failed: %v", err) - } - got := string(data) - expected := `{"geohash_grid":{"field":"location","precision":5}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestGeoHashGridAggregationWithMetaData(t *testing.T) { - agg := NewGeoHashGridAggregation().Field("location").Precision(5) - agg = agg.Meta(map[string]interface{}{"name": "Oliver"}) - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("Marshalling to JSON failed: %v", err) - } - got := string(data) - expected := `{"geohash_grid":{"field":"location","precision":5},"meta":{"name":"Oliver"}}` - - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestGeoHashGridAggregationWithSize(t *testing.T) { - agg := NewGeoHashGridAggregation().Field("location").Precision(5).Size(5) - agg = agg.Meta(map[string]interface{}{"name": "Oliver"}) - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("Marshalling to JSON failed: %v", err) - } - got := string(data) - expected := `{"geohash_grid":{"field":"location","precision":5,"size":5},"meta":{"name":"Oliver"}}` - - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestGeoHashGridAggregationWithShardSize(t *testing.T) { - agg := NewGeoHashGridAggregation().Field("location").Precision(5).ShardSize(5) - agg = agg.Meta(map[string]interface{}{"name": "Oliver"}) - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("Marshalling to JSON failed: %v", err) - } - got := string(data) - expected := `{"geohash_grid":{"field":"location","precision":5,"shard_size":5},"meta":{"name":"Oliver"}}` - - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_global.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_global.go deleted file mode 100644 index 4d56297..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_global.go +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// GlobalAggregation defines a single bucket of all the documents within -// the search execution context. This context is defined by the indices -// and the document types you’re searching on, but is not influenced -// by the search query itself. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-global-aggregation.html -type GlobalAggregation struct { - subAggregations map[string]Aggregation -} - -func NewGlobalAggregation() GlobalAggregation { - a := GlobalAggregation{ - subAggregations: make(map[string]Aggregation), - } - return a -} - -func (a GlobalAggregation) SubAggregation(name string, subAggregation Aggregation) GlobalAggregation { - a.subAggregations[name] = subAggregation - return a -} - -func (a GlobalAggregation) Source() interface{} { - // Example: - // { - // "aggs" : { - // "all_products" : { - // "global" : {}, - // "aggs" : { - // "avg_price" : { "avg" : { "field" : "price" } } - // } - // } - // } - // } - // This method returns only the { "global" : {} } part. - - source := make(map[string]interface{}) - opts := make(map[string]interface{}) - source["global"] = opts - - // AggregationBuilder (SubAggregations) - if len(a.subAggregations) > 0 { - aggsMap := make(map[string]interface{}) - source["aggregations"] = aggsMap - for name, aggregate := range a.subAggregations { - aggsMap[name] = aggregate.Source() - } - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_global_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_global_test.go deleted file mode 100644 index 5b28bb3..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_global_test.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestGlobalAggregation(t *testing.T) { - agg := NewGlobalAggregation() - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"global":{}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_histogram.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_histogram.go deleted file mode 100644 index 250d3f7..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_histogram.go +++ /dev/null @@ -1,234 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// HistogramAggregation is a multi-bucket values source based aggregation -// that can be applied on numeric values extracted from the documents. -// It dynamically builds fixed size (a.k.a. interval) buckets over the -// values. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-histogram-aggregation.html -type HistogramAggregation struct { - field string - script string - scriptFile string - lang string - params map[string]interface{} - subAggregations map[string]Aggregation - - interval int64 - order string - orderAsc bool - minDocCount *int64 - extendedBoundsMin *int64 - extendedBoundsMax *int64 -} - -func NewHistogramAggregation() HistogramAggregation { - a := HistogramAggregation{ - params: make(map[string]interface{}), - subAggregations: make(map[string]Aggregation), - } - return a -} - -func (a HistogramAggregation) Field(field string) HistogramAggregation { - a.field = field - return a -} - -func (a HistogramAggregation) Script(script string) HistogramAggregation { - a.script = script - return a -} - -func (a HistogramAggregation) ScriptFile(scriptFile string) HistogramAggregation { - a.scriptFile = scriptFile - return a -} - -func (a HistogramAggregation) Lang(lang string) HistogramAggregation { - a.lang = lang - return a -} - -func (a HistogramAggregation) Param(name string, value interface{}) HistogramAggregation { - a.params[name] = value - return a -} - -func (a HistogramAggregation) SubAggregation(name string, subAggregation Aggregation) HistogramAggregation { - a.subAggregations[name] = subAggregation - return a -} - -func (a HistogramAggregation) Interval(interval int64) HistogramAggregation { - a.interval = interval - return a -} - -// Order specifies the sort order. Valid values for order are: -// "_key", "_count", a sub-aggregation name, or a sub-aggregation name -// with a metric. -func (a HistogramAggregation) Order(order string, asc bool) HistogramAggregation { - a.order = order - a.orderAsc = asc - return a -} - -func (a HistogramAggregation) OrderByCount(asc bool) HistogramAggregation { - // "order" : { "_count" : "asc" } - a.order = "_count" - a.orderAsc = asc - return a -} - -func (a HistogramAggregation) OrderByCountAsc() HistogramAggregation { - return a.OrderByCount(true) -} - -func (a HistogramAggregation) OrderByCountDesc() HistogramAggregation { - return a.OrderByCount(false) -} - -func (a HistogramAggregation) OrderByKey(asc bool) HistogramAggregation { - // "order" : { "_key" : "asc" } - a.order = "_key" - a.orderAsc = asc - return a -} - -func (a HistogramAggregation) OrderByKeyAsc() HistogramAggregation { - return a.OrderByKey(true) -} - -func (a HistogramAggregation) OrderByKeyDesc() HistogramAggregation { - return a.OrderByKey(false) -} - -// OrderByAggregation creates a bucket ordering strategy which sorts buckets -// based on a single-valued calc get. -func (a HistogramAggregation) OrderByAggregation(aggName string, asc bool) HistogramAggregation { - // { - // "aggs" : { - // "genders" : { - // "terms" : { - // "field" : "gender", - // "order" : { "avg_height" : "desc" } - // }, - // "aggs" : { - // "avg_height" : { "avg" : { "field" : "height" } } - // } - // } - // } - // } - a.order = aggName - a.orderAsc = asc - return a -} - -// OrderByAggregationAndMetric creates a bucket ordering strategy which -// sorts buckets based on a multi-valued calc get. -func (a HistogramAggregation) OrderByAggregationAndMetric(aggName, metric string, asc bool) HistogramAggregation { - // { - // "aggs" : { - // "genders" : { - // "terms" : { - // "field" : "gender", - // "order" : { "height_stats.avg" : "desc" } - // }, - // "aggs" : { - // "height_stats" : { "stats" : { "field" : "height" } } - // } - // } - // } - // } - a.order = aggName + "." + metric - a.orderAsc = asc - return a -} - -func (a HistogramAggregation) MinDocCount(minDocCount int64) HistogramAggregation { - a.minDocCount = &minDocCount - return a -} - -func (a HistogramAggregation) ExtendedBoundsMin(min int64) HistogramAggregation { - a.extendedBoundsMin = &min - return a -} - -func (a HistogramAggregation) ExtendedBoundsMax(max int64) HistogramAggregation { - a.extendedBoundsMax = &max - return a -} - -func (a HistogramAggregation) Source() interface{} { - // Example: - // { - // "aggs" : { - // "prices" : { - // "histogram" : { - // "field" : "price", - // "interval" : 50 - // } - // } - // } - // } - // - // This method returns only the { "histogram" : { ... } } part. - - source := make(map[string]interface{}) - opts := make(map[string]interface{}) - source["histogram"] = opts - - // ValuesSourceAggregationBuilder - if a.field != "" { - opts["field"] = a.field - } - if a.script != "" { - opts["script"] = a.script - } - if a.lang != "" { - opts["lang"] = a.lang - } - if len(a.params) > 0 { - opts["params"] = a.params - } - - opts["interval"] = a.interval - if a.order != "" { - o := make(map[string]interface{}) - if a.orderAsc { - o[a.order] = "asc" - } else { - o[a.order] = "desc" - } - opts["order"] = o - } - if a.minDocCount != nil { - opts["min_doc_count"] = *a.minDocCount - } - if a.extendedBoundsMin != nil || a.extendedBoundsMax != nil { - bounds := make(map[string]interface{}) - if a.extendedBoundsMin != nil { - bounds["min"] = a.extendedBoundsMin - } - if a.extendedBoundsMax != nil { - bounds["max"] = a.extendedBoundsMax - } - opts["extended_bounds"] = bounds - } - - // AggregationBuilder (SubAggregations) - if len(a.subAggregations) > 0 { - aggsMap := make(map[string]interface{}) - source["aggregations"] = aggsMap - for name, aggregate := range a.subAggregations { - aggsMap[name] = aggregate.Source() - } - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_histogram_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_histogram_test.go deleted file mode 100644 index 19c5021..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_histogram_test.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestHistogramAggregation(t *testing.T) { - agg := NewHistogramAggregation().Field("price").Interval(50) - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"histogram":{"field":"price","interval":50}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_max.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_max.go deleted file mode 100644 index 9e77ef7..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_max.go +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// MaxAggregation is a single-value metrics aggregation that keeps track and -// returns the maximum value among the numeric values extracted from -// the aggregated documents. These values can be extracted either from -// specific numeric fields in the documents, or be generated by -// a provided script. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-max-aggregation.html -type MaxAggregation struct { - field string - script string - scriptFile string - lang string - format string - params map[string]interface{} - subAggregations map[string]Aggregation -} - -func NewMaxAggregation() MaxAggregation { - a := MaxAggregation{ - params: make(map[string]interface{}), - subAggregations: make(map[string]Aggregation), - } - return a -} - -func (a MaxAggregation) Field(field string) MaxAggregation { - a.field = field - return a -} - -func (a MaxAggregation) Script(script string) MaxAggregation { - a.script = script - return a -} - -func (a MaxAggregation) ScriptFile(scriptFile string) MaxAggregation { - a.scriptFile = scriptFile - return a -} - -func (a MaxAggregation) Lang(lang string) MaxAggregation { - a.lang = lang - return a -} - -func (a MaxAggregation) Format(format string) MaxAggregation { - a.format = format - return a -} - -func (a MaxAggregation) Param(name string, value interface{}) MaxAggregation { - a.params[name] = value - return a -} - -func (a MaxAggregation) SubAggregation(name string, subAggregation Aggregation) MaxAggregation { - a.subAggregations[name] = subAggregation - return a -} - -func (a MaxAggregation) Source() interface{} { - // Example: - // { - // "aggs" : { - // "max_price" : { "max" : { "field" : "price" } } - // } - // } - // This method returns only the { "max" : { "field" : "price" } } part. - - source := make(map[string]interface{}) - opts := make(map[string]interface{}) - source["max"] = opts - - // ValuesSourceAggregationBuilder - if a.field != "" { - opts["field"] = a.field - } - if a.script != "" { - opts["script"] = a.script - } - if a.scriptFile != "" { - opts["script_file"] = a.scriptFile - } - if a.lang != "" { - opts["lang"] = a.lang - } - if a.format != "" { - opts["format"] = a.format - } - if len(a.params) > 0 { - opts["params"] = a.params - } - - // AggregationBuilder (SubAggregations) - if len(a.subAggregations) > 0 { - aggsMap := make(map[string]interface{}) - source["aggregations"] = aggsMap - for name, aggregate := range a.subAggregations { - aggsMap[name] = aggregate.Source() - } - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_max_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_max_test.go deleted file mode 100644 index 60d3779..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_max_test.go +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestMaxAggregation(t *testing.T) { - agg := NewMaxAggregation().Field("price") - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"max":{"field":"price"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMaxAggregationWithFormat(t *testing.T) { - agg := NewMaxAggregation().Field("price").Format("00000.00") - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"max":{"field":"price","format":"00000.00"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_min.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_min.go deleted file mode 100644 index 9e00bd3..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_min.go +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// MinAggregation is a single-value metrics aggregation that keeps track and -// returns the minimum value among numeric values extracted from the -// aggregated documents. These values can be extracted either from -// specific numeric fields in the documents, or be generated by a -// provided script. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-min-aggregation.html -type MinAggregation struct { - field string - script string - scriptFile string - lang string - format string - params map[string]interface{} - subAggregations map[string]Aggregation -} - -func NewMinAggregation() MinAggregation { - a := MinAggregation{ - params: make(map[string]interface{}), - subAggregations: make(map[string]Aggregation), - } - return a -} - -func (a MinAggregation) Field(field string) MinAggregation { - a.field = field - return a -} - -func (a MinAggregation) Script(script string) MinAggregation { - a.script = script - return a -} - -func (a MinAggregation) ScriptFile(scriptFile string) MinAggregation { - a.scriptFile = scriptFile - return a -} - -func (a MinAggregation) Lang(lang string) MinAggregation { - a.lang = lang - return a -} - -func (a MinAggregation) Format(format string) MinAggregation { - a.format = format - return a -} - -func (a MinAggregation) Param(name string, value interface{}) MinAggregation { - a.params[name] = value - return a -} - -func (a MinAggregation) SubAggregation(name string, subAggregation Aggregation) MinAggregation { - a.subAggregations[name] = subAggregation - return a -} - -func (a MinAggregation) Source() interface{} { - // Example: - // { - // "aggs" : { - // "min_price" : { "min" : { "field" : "price" } } - // } - // } - // This method returns only the { "min" : { "field" : "price" } } part. - - source := make(map[string]interface{}) - opts := make(map[string]interface{}) - source["min"] = opts - - // ValuesSourceAggregationBuilder - if a.field != "" { - opts["field"] = a.field - } - if a.script != "" { - opts["script"] = a.script - } - if a.scriptFile != "" { - opts["script_file"] = a.scriptFile - } - if a.lang != "" { - opts["lang"] = a.lang - } - if a.format != "" { - opts["format"] = a.format - } - if len(a.params) > 0 { - opts["params"] = a.params - } - - // AggregationBuilder (SubAggregations) - if len(a.subAggregations) > 0 { - aggsMap := make(map[string]interface{}) - source["aggregations"] = aggsMap - for name, aggregate := range a.subAggregations { - aggsMap[name] = aggregate.Source() - } - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_min_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_min_test.go deleted file mode 100644 index a52cc02..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_min_test.go +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestMinAggregation(t *testing.T) { - agg := NewMinAggregation().Field("price") - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"min":{"field":"price"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMinAggregationWithFormat(t *testing.T) { - agg := NewMinAggregation().Field("price").Format("00000.00") - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"min":{"field":"price","format":"00000.00"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_missing.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_missing.go deleted file mode 100644 index 4e0f526..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_missing.go +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// MissingAggregation is a field data based single bucket aggregation, -// that creates a bucket of all documents in the current document set context -// that are missing a field value (effectively, missing a field or having -// the configured NULL value set). This aggregator will often be used in -// conjunction with other field data bucket aggregators (such as ranges) -// to return information for all the documents that could not be placed -// in any of the other buckets due to missing field data values. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-missing-aggregation.html -type MissingAggregation struct { - field string - subAggregations map[string]Aggregation -} - -func NewMissingAggregation() MissingAggregation { - a := MissingAggregation{ - subAggregations: make(map[string]Aggregation), - } - return a -} - -func (a MissingAggregation) Field(field string) MissingAggregation { - a.field = field - return a -} - -func (a MissingAggregation) SubAggregation(name string, subAggregation Aggregation) MissingAggregation { - a.subAggregations[name] = subAggregation - return a -} - -func (a MissingAggregation) Source() interface{} { - // Example: - // { - // "aggs" : { - // "products_without_a_price" : { - // "missing" : { "field" : "price" } - // } - // } - // } - // This method returns only the { "missing" : { ... } } part. - - source := make(map[string]interface{}) - opts := make(map[string]interface{}) - source["missing"] = opts - - if a.field != "" { - opts["field"] = a.field - } - - // AggregationBuilder (SubAggregations) - if len(a.subAggregations) > 0 { - aggsMap := make(map[string]interface{}) - source["aggregations"] = aggsMap - for name, aggregate := range a.subAggregations { - aggsMap[name] = aggregate.Source() - } - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_missing_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_missing_test.go deleted file mode 100644 index 4ed528a..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_missing_test.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestMissingAggregation(t *testing.T) { - agg := NewMissingAggregation().Field("price") - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"missing":{"field":"price"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_nested.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_nested.go deleted file mode 100644 index feab5be..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_nested.go +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// NestedAggregation is a special single bucket aggregation that enables -// aggregating nested documents. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/master/search-aggregations-bucket-nested-aggregation.html -type NestedAggregation struct { - path string - subAggregations map[string]Aggregation -} - -func NewNestedAggregation() NestedAggregation { - a := NestedAggregation{ - subAggregations: make(map[string]Aggregation), - } - return a -} - -func (a NestedAggregation) SubAggregation(name string, subAggregation Aggregation) NestedAggregation { - a.subAggregations[name] = subAggregation - return a -} - -func (a NestedAggregation) Path(path string) NestedAggregation { - a.path = path - return a -} - -func (a NestedAggregation) Source() interface{} { - // Example: - // { - // "query" : { - // "match" : { "name" : "led tv" } - // } - // "aggs" : { - // "resellers" : { - // "nested" : { - // "path" : "resellers" - // }, - // "aggs" : { - // "min_price" : { "min" : { "field" : "resellers.price" } } - // } - // } - // } - // } - // This method returns only the { "nested" : {} } part. - - source := make(map[string]interface{}) - opts := make(map[string]interface{}) - source["nested"] = opts - - opts["path"] = a.path - - // AggregationBuilder (SubAggregations) - if len(a.subAggregations) > 0 { - aggsMap := make(map[string]interface{}) - source["aggregations"] = aggsMap - for name, aggregate := range a.subAggregations { - aggsMap[name] = aggregate.Source() - } - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_nested_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_nested_test.go deleted file mode 100644 index 78c897f..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_nested_test.go +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestNestedAggregation(t *testing.T) { - agg := NewNestedAggregation().Path("resellers") - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"nested":{"path":"resellers"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestNestedAggregationWithSubAggregation(t *testing.T) { - minPriceAgg := NewMinAggregation().Field("resellers.price") - agg := NewNestedAggregation().Path("resellers").SubAggregation("min_price", minPriceAgg) - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"aggregations":{"min_price":{"min":{"field":"resellers.price"}}},"nested":{"path":"resellers"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_percentile_ranks.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_percentile_ranks.go deleted file mode 100644 index 7e058d5..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_percentile_ranks.go +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// PercentileRanksAggregation -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-percentile-rank-aggregation.html -type PercentileRanksAggregation struct { - field string - script string - scriptFile string - lang string - format string - params map[string]interface{} - subAggregations map[string]Aggregation - values []float64 - compression *float64 - estimator string -} - -func NewPercentileRanksAggregation() PercentileRanksAggregation { - a := PercentileRanksAggregation{ - params: make(map[string]interface{}), - subAggregations: make(map[string]Aggregation), - values: make([]float64, 0), - } - return a -} - -func (a PercentileRanksAggregation) Field(field string) PercentileRanksAggregation { - a.field = field - return a -} - -func (a PercentileRanksAggregation) Script(script string) PercentileRanksAggregation { - a.script = script - return a -} - -func (a PercentileRanksAggregation) ScriptFile(scriptFile string) PercentileRanksAggregation { - a.scriptFile = scriptFile - return a -} - -func (a PercentileRanksAggregation) Lang(lang string) PercentileRanksAggregation { - a.lang = lang - return a -} - -func (a PercentileRanksAggregation) Format(format string) PercentileRanksAggregation { - a.format = format - return a -} - -func (a PercentileRanksAggregation) Param(name string, value interface{}) PercentileRanksAggregation { - a.params[name] = value - return a -} - -func (a PercentileRanksAggregation) SubAggregation(name string, subAggregation Aggregation) PercentileRanksAggregation { - a.subAggregations[name] = subAggregation - return a -} - -func (a PercentileRanksAggregation) Values(values ...float64) PercentileRanksAggregation { - a.values = make([]float64, 0) - a.values = append(a.values, values...) - return a -} - -func (a PercentileRanksAggregation) Compression(compression float64) PercentileRanksAggregation { - a.compression = &compression - return a -} - -func (a PercentileRanksAggregation) Estimator(estimator string) PercentileRanksAggregation { - a.estimator = estimator - return a -} - -func (a PercentileRanksAggregation) Source() interface{} { - // Example: - // { - // "aggs" : { - // "load_time_outlier" : { - // "percentile_ranks" : { - // "field" : "load_time" - // "values" : [15, 30] - // } - // } - // } - // } - // This method returns only the - // { "percentile_ranks" : { "field" : "load_time", "values" : [15, 30] } } - // part. - - source := make(map[string]interface{}) - opts := make(map[string]interface{}) - source["percentile_ranks"] = opts - - // ValuesSourceAggregationBuilder - if a.field != "" { - opts["field"] = a.field - } - if a.script != "" { - opts["script"] = a.script - } - if a.scriptFile != "" { - opts["script_file"] = a.scriptFile - } - if a.lang != "" { - opts["lang"] = a.lang - } - if a.format != "" { - opts["format"] = a.format - } - if len(a.params) > 0 { - opts["params"] = a.params - } - if len(a.values) > 0 { - opts["values"] = a.values - } - if a.compression != nil { - opts["compression"] = *a.compression - } - if a.estimator != "" { - opts["estimator"] = a.estimator - } - - // AggregationBuilder (SubAggregations) - if len(a.subAggregations) > 0 { - aggsMap := make(map[string]interface{}) - source["aggregations"] = aggsMap - for name, aggregate := range a.subAggregations { - aggsMap[name] = aggregate.Source() - } - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_percentile_ranks_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_percentile_ranks_test.go deleted file mode 100644 index 61f4a5d..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_percentile_ranks_test.go +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestPercentileRanksAggregation(t *testing.T) { - agg := NewPercentileRanksAggregation().Field("load_time") - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"percentile_ranks":{"field":"load_time"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestPercentileRanksAggregationWithCustomValues(t *testing.T) { - agg := NewPercentileRanksAggregation().Field("load_time").Values(15, 30) - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"percentile_ranks":{"field":"load_time","values":[15,30]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestPercentileRanksAggregationWithFormat(t *testing.T) { - agg := NewPercentileRanksAggregation().Field("load_time").Format("000.0") - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"percentile_ranks":{"field":"load_time","format":"000.0"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_percentiles.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_percentiles.go deleted file mode 100644 index 5b6cff9..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_percentiles.go +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// PercentilesAggregation -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-percentile-aggregation.html -type PercentilesAggregation struct { - field string - script string - scriptFile string - lang string - format string - params map[string]interface{} - subAggregations map[string]Aggregation - percentiles []float64 - compression *float64 - estimator string -} - -func NewPercentilesAggregation() PercentilesAggregation { - a := PercentilesAggregation{ - params: make(map[string]interface{}), - subAggregations: make(map[string]Aggregation), - percentiles: make([]float64, 0), - } - return a -} - -func (a PercentilesAggregation) Field(field string) PercentilesAggregation { - a.field = field - return a -} - -func (a PercentilesAggregation) Script(script string) PercentilesAggregation { - a.script = script - return a -} - -func (a PercentilesAggregation) ScriptFile(scriptFile string) PercentilesAggregation { - a.scriptFile = scriptFile - return a -} - -func (a PercentilesAggregation) Lang(lang string) PercentilesAggregation { - a.lang = lang - return a -} - -func (a PercentilesAggregation) Format(format string) PercentilesAggregation { - a.format = format - return a -} - -func (a PercentilesAggregation) Param(name string, value interface{}) PercentilesAggregation { - a.params[name] = value - return a -} - -func (a PercentilesAggregation) SubAggregation(name string, subAggregation Aggregation) PercentilesAggregation { - a.subAggregations[name] = subAggregation - return a -} - -func (a PercentilesAggregation) Percentiles(percentiles ...float64) PercentilesAggregation { - a.percentiles = make([]float64, 0) - a.percentiles = append(a.percentiles, percentiles...) - return a -} - -func (a PercentilesAggregation) Compression(compression float64) PercentilesAggregation { - a.compression = &compression - return a -} - -func (a PercentilesAggregation) Estimator(estimator string) PercentilesAggregation { - a.estimator = estimator - return a -} - -func (a PercentilesAggregation) Source() interface{} { - // Example: - // { - // "aggs" : { - // "load_time_outlier" : { - // "percentiles" : { - // "field" : "load_time" - // } - // } - // } - // } - // This method returns only the - // { "percentiles" : { "field" : "load_time" } } - // part. - - source := make(map[string]interface{}) - opts := make(map[string]interface{}) - source["percentiles"] = opts - - // ValuesSourceAggregationBuilder - if a.field != "" { - opts["field"] = a.field - } - if a.script != "" { - opts["script"] = a.script - } - if a.scriptFile != "" { - opts["script_file"] = a.scriptFile - } - if a.lang != "" { - opts["lang"] = a.lang - } - if a.format != "" { - opts["format"] = a.format - } - if len(a.params) > 0 { - opts["params"] = a.params - } - if len(a.percentiles) > 0 { - opts["percents"] = a.percentiles - } - if a.compression != nil { - opts["compression"] = *a.compression - } - if a.estimator != "" { - opts["estimator"] = a.estimator - } - - // AggregationBuilder (SubAggregations) - if len(a.subAggregations) > 0 { - aggsMap := make(map[string]interface{}) - source["aggregations"] = aggsMap - for name, aggregate := range a.subAggregations { - aggsMap[name] = aggregate.Source() - } - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_percentiles_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_percentiles_test.go deleted file mode 100644 index c8e7522..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_percentiles_test.go +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestPercentilesAggregation(t *testing.T) { - agg := NewPercentilesAggregation().Field("price") - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"percentiles":{"field":"price"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestPercentilesAggregationWithCustomPercents(t *testing.T) { - agg := NewPercentilesAggregation().Field("price").Percentiles(0.2, 0.5, 0.9) - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"percentiles":{"field":"price","percents":[0.2,0.5,0.9]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestPercentilesAggregationWithFormat(t *testing.T) { - agg := NewPercentilesAggregation().Field("price").Format("00000.00") - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"percentiles":{"field":"price","format":"00000.00"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_range.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_range.go deleted file mode 100644 index 5b05423..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_range.go +++ /dev/null @@ -1,232 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "time" -) - -// RangeAggregation is a multi-bucket value source based aggregation that -// enables the user to define a set of ranges - each representing a bucket. -// During the aggregation process, the values extracted from each document -// will be checked against each bucket range and "bucket" the -// relevant/matching document. Note that this aggregration includes the -// from value and excludes the to value for each range. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-range-aggregation.html -type RangeAggregation struct { - field string - script string - scriptFile string - lang string - params map[string]interface{} - subAggregations map[string]Aggregation - keyed *bool - unmapped *bool - entries []rangeAggregationEntry -} - -type rangeAggregationEntry struct { - Key string - From interface{} - To interface{} -} - -func NewRangeAggregation() RangeAggregation { - a := RangeAggregation{ - params: make(map[string]interface{}), - subAggregations: make(map[string]Aggregation), - entries: make([]rangeAggregationEntry, 0), - } - return a -} - -func (a RangeAggregation) Field(field string) RangeAggregation { - a.field = field - return a -} - -func (a RangeAggregation) Script(script string) RangeAggregation { - a.script = script - return a -} - -func (a RangeAggregation) ScriptFile(scriptFile string) RangeAggregation { - a.scriptFile = scriptFile - return a -} - -func (a RangeAggregation) Lang(lang string) RangeAggregation { - a.lang = lang - return a -} - -func (a RangeAggregation) Param(name string, value interface{}) RangeAggregation { - a.params[name] = value - return a -} - -func (a RangeAggregation) SubAggregation(name string, subAggregation Aggregation) RangeAggregation { - a.subAggregations[name] = subAggregation - return a -} - -func (a RangeAggregation) Keyed(keyed bool) RangeAggregation { - a.keyed = &keyed - return a -} - -func (a RangeAggregation) Unmapped(unmapped bool) RangeAggregation { - a.unmapped = &unmapped - return a -} - -func (a RangeAggregation) AddRange(from, to interface{}) RangeAggregation { - a.entries = append(a.entries, rangeAggregationEntry{From: from, To: to}) - return a -} - -func (a RangeAggregation) AddRangeWithKey(key string, from, to interface{}) RangeAggregation { - a.entries = append(a.entries, rangeAggregationEntry{Key: key, From: from, To: to}) - return a -} - -func (a RangeAggregation) AddUnboundedTo(from interface{}) RangeAggregation { - a.entries = append(a.entries, rangeAggregationEntry{From: from, To: nil}) - return a -} - -func (a RangeAggregation) AddUnboundedToWithKey(key string, from interface{}) RangeAggregation { - a.entries = append(a.entries, rangeAggregationEntry{Key: key, From: from, To: nil}) - return a -} - -func (a RangeAggregation) AddUnboundedFrom(to interface{}) RangeAggregation { - a.entries = append(a.entries, rangeAggregationEntry{From: nil, To: to}) - return a -} - -func (a RangeAggregation) AddUnboundedFromWithKey(key string, to interface{}) RangeAggregation { - a.entries = append(a.entries, rangeAggregationEntry{Key: key, From: nil, To: to}) - return a -} - -func (a RangeAggregation) Lt(to interface{}) RangeAggregation { - a.entries = append(a.entries, rangeAggregationEntry{From: nil, To: to}) - return a -} - -func (a RangeAggregation) LtWithKey(key string, to interface{}) RangeAggregation { - a.entries = append(a.entries, rangeAggregationEntry{Key: key, From: nil, To: to}) - return a -} - -func (a RangeAggregation) Between(from, to interface{}) RangeAggregation { - a.entries = append(a.entries, rangeAggregationEntry{From: from, To: to}) - return a -} - -func (a RangeAggregation) BetweenWithKey(key string, from, to interface{}) RangeAggregation { - a.entries = append(a.entries, rangeAggregationEntry{Key: key, From: from, To: to}) - return a -} - -func (a RangeAggregation) Gt(from interface{}) RangeAggregation { - a.entries = append(a.entries, rangeAggregationEntry{From: from, To: nil}) - return a -} - -func (a RangeAggregation) GtWithKey(key string, from interface{}) RangeAggregation { - a.entries = append(a.entries, rangeAggregationEntry{Key: key, From: from, To: nil}) - return a -} - -func (a RangeAggregation) Source() interface{} { - // Example: - // { - // "aggs" : { - // "price_ranges" : { - // "range" : { - // "field" : "price", - // "ranges" : [ - // { "to" : 50 }, - // { "from" : 50, "to" : 100 }, - // { "from" : 100 } - // ] - // } - // } - // } - // } - // - // This method returns only the { "range" : { ... } } part. - - source := make(map[string]interface{}) - opts := make(map[string]interface{}) - source["range"] = opts - - // ValuesSourceAggregationBuilder - if a.field != "" { - opts["field"] = a.field - } - if a.script != "" { - opts["script"] = a.script - } - if a.scriptFile != "" { - opts["script_file"] = a.scriptFile - } - if a.lang != "" { - opts["lang"] = a.lang - } - if len(a.params) > 0 { - opts["params"] = a.params - } - - if a.keyed != nil { - opts["keyed"] = *a.keyed - } - if a.unmapped != nil { - opts["unmapped"] = *a.unmapped - } - - ranges := make([]interface{}, 0) - for _, ent := range a.entries { - r := make(map[string]interface{}) - if ent.Key != "" { - r["key"] = ent.Key - } - if ent.From != nil { - switch from := ent.From.(type) { - case int, int16, int32, int64, float32, float64: - r["from"] = from - case time.Time: - r["from"] = from.Format(time.RFC3339) - case string: - r["from"] = from - } - } - if ent.To != nil { - switch to := ent.To.(type) { - case int, int16, int32, int64, float32, float64: - r["to"] = to - case time.Time: - r["to"] = to.Format(time.RFC3339) - case string: - r["to"] = to - } - } - ranges = append(ranges, r) - } - opts["ranges"] = ranges - - // AggregationBuilder (SubAggregations) - if len(a.subAggregations) > 0 { - aggsMap := make(map[string]interface{}) - source["aggregations"] = aggsMap - for name, aggregate := range a.subAggregations { - aggsMap[name] = aggregate.Source() - } - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_range_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_range_test.go deleted file mode 100644 index 771310c..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_range_test.go +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestRangeAggregation(t *testing.T) { - agg := NewRangeAggregation().Field("price") - agg = agg.AddRange(nil, 50) - agg = agg.AddRange(50, 100) - agg = agg.AddRange(100, nil) - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"range":{"field":"price","ranges":[{"to":50},{"from":50,"to":100},{"from":100}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestRangeAggregationWithUnbounded(t *testing.T) { - agg := NewRangeAggregation().Field("field_name"). - AddUnboundedFrom(50). - AddRange(20, 70). - AddRange(70, 120). - AddUnboundedTo(150) - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"range":{"field":"field_name","ranges":[{"to":50},{"from":20,"to":70},{"from":70,"to":120},{"from":150}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestRangeAggregationWithLtAndCo(t *testing.T) { - agg := NewRangeAggregation().Field("field_name"). - Lt(50). - Between(20, 70). - Between(70, 120). - Gt(150) - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"range":{"field":"field_name","ranges":[{"to":50},{"from":20,"to":70},{"from":70,"to":120},{"from":150}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestRangeAggregationWithKeyedFlag(t *testing.T) { - agg := NewRangeAggregation().Field("field_name"). - Keyed(true). - Lt(50). - Between(20, 70). - Between(70, 120). - Gt(150) - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"range":{"field":"field_name","keyed":true,"ranges":[{"to":50},{"from":20,"to":70},{"from":70,"to":120},{"from":150}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestRangeAggregationWithKeys(t *testing.T) { - agg := NewRangeAggregation().Field("field_name"). - Keyed(true). - LtWithKey("cheap", 50). - BetweenWithKey("affordable", 20, 70). - BetweenWithKey("average", 70, 120). - GtWithKey("expensive", 150) - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"range":{"field":"field_name","keyed":true,"ranges":[{"key":"cheap","to":50},{"from":20,"key":"affordable","to":70},{"from":70,"key":"average","to":120},{"from":150,"key":"expensive"}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_reverse_nested.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_reverse_nested.go deleted file mode 100644 index 0b95255..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_reverse_nested.go +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// ReverseNestedAggregation defines a special single bucket aggregation -// that enables aggregating on parent docs from nested documents. -// Effectively this aggregation can break out of the nested block -// structure and link to other nested structures or the root document, -// which allows nesting other aggregations that aren’t part of -// the nested object in a nested aggregation. -// -// See: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-reverse-nested-aggregation.html -type ReverseNestedAggregation struct { - path string - subAggregations map[string]Aggregation - meta map[string]interface{} -} - -// NewReverseNestedAggregation initializes a new ReverseNestedAggregation -// bucket aggregation. -func NewReverseNestedAggregation() ReverseNestedAggregation { - return ReverseNestedAggregation{ - subAggregations: make(map[string]Aggregation), - } -} - -// Path set the path to use for this nested aggregation. The path must match -// the path to a nested object in the mappings. If it is not specified -// then this aggregation will go back to the root document. -func (a ReverseNestedAggregation) Path(path string) ReverseNestedAggregation { - a.path = path - return a -} - -func (a ReverseNestedAggregation) SubAggregation(name string, subAggregation Aggregation) ReverseNestedAggregation { - a.subAggregations[name] = subAggregation - return a -} - -// Meta sets the meta data to be included in the aggregation response. -func (a ReverseNestedAggregation) Meta(metaData map[string]interface{}) ReverseNestedAggregation { - a.meta = metaData - return a -} - -func (a ReverseNestedAggregation) Source() interface{} { - // Example: - // { - // "aggs" : { - // "reverse_nested" : { - // "path": "..." - // } - // } - // } - // This method returns only the { "reverse_nested" : {} } part. - - source := make(map[string]interface{}) - opts := make(map[string]interface{}) - source["reverse_nested"] = opts - - if a.path != "" { - opts["path"] = a.path - } - - // AggregationBuilder (SubAggregations) - if len(a.subAggregations) > 0 { - aggsMap := make(map[string]interface{}) - source["aggregations"] = aggsMap - for name, aggregate := range a.subAggregations { - aggsMap[name] = aggregate.Source() - } - } - - // Add Meta data if available - if len(a.meta) > 0 { - source["meta"] = a.meta - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_reverse_nested_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_reverse_nested_test.go deleted file mode 100644 index 1c58fdf..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_reverse_nested_test.go +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestReverseNestedAggregation(t *testing.T) { - agg := NewReverseNestedAggregation() - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"reverse_nested":{}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestReverseNestedAggregationWithPath(t *testing.T) { - agg := NewReverseNestedAggregation().Path("comments") - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"reverse_nested":{"path":"comments"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestReverseNestedAggregationWithSubAggregation(t *testing.T) { - avgPriceAgg := NewAvgAggregation().Field("price") - agg := NewReverseNestedAggregation(). - Path("a_path"). - SubAggregation("avg_price", avgPriceAgg) - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"aggregations":{"avg_price":{"avg":{"field":"price"}}},"reverse_nested":{"path":"a_path"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestReverseNestedAggregationWithMeta(t *testing.T) { - agg := NewReverseNestedAggregation(). - Path("a_path"). - Meta(map[string]interface{}{"name": "Oliver"}) - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"meta":{"name":"Oliver"},"reverse_nested":{"path":"a_path"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_significant_terms.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_significant_terms.go deleted file mode 100644 index 0308223..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_significant_terms.go +++ /dev/null @@ -1,122 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// SignificantSignificantTermsAggregation is an aggregation that returns interesting -// or unusual occurrences of terms in a set. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-significantterms-aggregation.html -type SignificantTermsAggregation struct { - field string - subAggregations map[string]Aggregation - - minDocCount *int - shardMinDocCount *int - requiredSize *int - shardSize *int - filter Filter - executionHint string -} - -func NewSignificantTermsAggregation() SignificantTermsAggregation { - a := SignificantTermsAggregation{ - subAggregations: make(map[string]Aggregation, 0), - } - return a -} - -func (a SignificantTermsAggregation) Field(field string) SignificantTermsAggregation { - a.field = field - return a -} - -func (a SignificantTermsAggregation) SubAggregation(name string, subAggregation Aggregation) SignificantTermsAggregation { - a.subAggregations[name] = subAggregation - return a -} - -func (a SignificantTermsAggregation) MinDocCount(minDocCount int) SignificantTermsAggregation { - a.minDocCount = &minDocCount - return a -} - -func (a SignificantTermsAggregation) ShardMinDocCount(shardMinDocCount int) SignificantTermsAggregation { - a.shardMinDocCount = &shardMinDocCount - return a -} - -func (a SignificantTermsAggregation) RequiredSize(requiredSize int) SignificantTermsAggregation { - a.requiredSize = &requiredSize - return a -} - -func (a SignificantTermsAggregation) ShardSize(shardSize int) SignificantTermsAggregation { - a.shardSize = &shardSize - return a -} - -func (a SignificantTermsAggregation) BackgroundFilter(filter Filter) SignificantTermsAggregation { - a.filter = filter - return a -} - -func (a SignificantTermsAggregation) ExecutionHint(hint string) SignificantTermsAggregation { - a.executionHint = hint - return a -} - -func (a SignificantTermsAggregation) Source() interface{} { - // Example: - // { - // "query" : { - // "terms" : {"force" : [ "British Transport Police" ]} - // }, - // "aggregations" : { - // "significantCrimeTypes" : { - // "significant_terms" : { "field" : "crime_type" } - // } - // } - // } - // - // This method returns only the - // { "significant_terms" : { "field" : "crime_type" } - // part. - - source := make(map[string]interface{}) - opts := make(map[string]interface{}) - source["significant_terms"] = opts - - if a.field != "" { - opts["field"] = a.field - } - if a.requiredSize != nil { - opts["size"] = *a.requiredSize // not a typo! - } - if a.shardSize != nil { - opts["shard_size"] = *a.shardSize - } - if a.minDocCount != nil { - opts["min_doc_count"] = *a.minDocCount - } - if a.shardMinDocCount != nil { - opts["shard_min_doc_count"] = *a.shardMinDocCount - } - if a.filter != nil { - opts["background_filter"] = a.filter.Source() - } - if a.executionHint != "" { - opts["execution_hint"] = a.executionHint - } - - // AggregationBuilder (SubAggregations) - if len(a.subAggregations) > 0 { - aggsMap := make(map[string]interface{}) - source["aggregations"] = aggsMap - for name, aggregate := range a.subAggregations { - aggsMap[name] = aggregate.Source() - } - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_significant_terms_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_significant_terms_test.go deleted file mode 100644 index c53740c..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_significant_terms_test.go +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestSignificantTermsAggregation(t *testing.T) { - agg := NewSignificantTermsAggregation().Field("crime_type") - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"significant_terms":{"field":"crime_type"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSignificantTermsAggregationWithArgs(t *testing.T) { - agg := NewSignificantTermsAggregation(). - Field("crime_type"). - ExecutionHint("map"). - ShardSize(5). - MinDocCount(10). - BackgroundFilter(NewTermFilter("city", "London")) - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"significant_terms":{"background_filter":{"term":{"city":"London"}},"execution_hint":"map","field":"crime_type","min_doc_count":10,"shard_size":5}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSignificantTermsAggregationSubAggregation(t *testing.T) { - crimeTypesAgg := NewSignificantTermsAggregation().Field("crime_type") - agg := NewTermsAggregation().Field("force") - agg = agg.SubAggregation("significantCrimeTypes", crimeTypesAgg) - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"aggregations":{"significantCrimeTypes":{"significant_terms":{"field":"crime_type"}}},"terms":{"field":"force"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_stats.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_stats.go deleted file mode 100644 index 2bc6b27..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_stats.go +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// StatsAggregation is a multi-value metrics aggregation that computes stats -// over numeric values extracted from the aggregated documents. -// These values can be extracted either from specific numeric fields -// in the documents, or be generated by a provided script. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-stats-aggregation.html -type StatsAggregation struct { - field string - script string - scriptFile string - lang string - format string - params map[string]interface{} - subAggregations map[string]Aggregation -} - -func NewStatsAggregation() StatsAggregation { - a := StatsAggregation{ - params: make(map[string]interface{}), - subAggregations: make(map[string]Aggregation), - } - return a -} - -func (a StatsAggregation) Field(field string) StatsAggregation { - a.field = field - return a -} - -func (a StatsAggregation) Script(script string) StatsAggregation { - a.script = script - return a -} - -func (a StatsAggregation) ScriptFile(scriptFile string) StatsAggregation { - a.scriptFile = scriptFile - return a -} - -func (a StatsAggregation) Lang(lang string) StatsAggregation { - a.lang = lang - return a -} - -func (a StatsAggregation) Format(format string) StatsAggregation { - a.format = format - return a -} - -func (a StatsAggregation) Param(name string, value interface{}) StatsAggregation { - a.params[name] = value - return a -} - -func (a StatsAggregation) SubAggregation(name string, subAggregation Aggregation) StatsAggregation { - a.subAggregations[name] = subAggregation - return a -} - -func (a StatsAggregation) Source() interface{} { - // Example: - // { - // "aggs" : { - // "grades_stats" : { "stats" : { "field" : "grade" } } - // } - // } - // This method returns only the { "stats" : { "field" : "grade" } } part. - - source := make(map[string]interface{}) - opts := make(map[string]interface{}) - source["stats"] = opts - - // ValuesSourceAggregationBuilder - if a.field != "" { - opts["field"] = a.field - } - if a.script != "" { - opts["script"] = a.script - } - if a.scriptFile != "" { - opts["script_file"] = a.scriptFile - } - if a.lang != "" { - opts["lang"] = a.lang - } - if a.format != "" { - opts["format"] = a.format - } - if len(a.params) > 0 { - opts["params"] = a.params - } - - // AggregationBuilder (SubAggregations) - if len(a.subAggregations) > 0 { - aggsMap := make(map[string]interface{}) - source["aggregations"] = aggsMap - for name, aggregate := range a.subAggregations { - aggsMap[name] = aggregate.Source() - } - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_stats_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_stats_test.go deleted file mode 100644 index 616bfde..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_stats_test.go +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestStatsAggregation(t *testing.T) { - agg := NewStatsAggregation().Field("grade") - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"stats":{"field":"grade"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestStatsAggregationWithFormat(t *testing.T) { - agg := NewStatsAggregation().Field("grade").Format("0000.0") - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"stats":{"field":"grade","format":"0000.0"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_sum.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_sum.go deleted file mode 100644 index 2aaee60..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_sum.go +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// SumAggregation is a single-value metrics aggregation that sums up -// numeric values that are extracted from the aggregated documents. -// These values can be extracted either from specific numeric fields -// in the documents, or be generated by a provided script. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-sum-aggregation.html -type SumAggregation struct { - field string - script string - scriptFile string - lang string - format string - params map[string]interface{} - subAggregations map[string]Aggregation -} - -func NewSumAggregation() SumAggregation { - a := SumAggregation{ - params: make(map[string]interface{}), - subAggregations: make(map[string]Aggregation), - } - return a -} - -func (a SumAggregation) Field(field string) SumAggregation { - a.field = field - return a -} - -func (a SumAggregation) Script(script string) SumAggregation { - a.script = script - return a -} - -func (a SumAggregation) ScriptFile(scriptFile string) SumAggregation { - a.scriptFile = scriptFile - return a -} - -func (a SumAggregation) Lang(lang string) SumAggregation { - a.lang = lang - return a -} - -func (a SumAggregation) Format(format string) SumAggregation { - a.format = format - return a -} - -func (a SumAggregation) Param(name string, value interface{}) SumAggregation { - a.params[name] = value - return a -} - -func (a SumAggregation) SubAggregation(name string, subAggregation Aggregation) SumAggregation { - a.subAggregations[name] = subAggregation - return a -} - -func (a SumAggregation) Source() interface{} { - // Example: - // { - // "aggs" : { - // "intraday_return" : { "sum" : { "field" : "change" } } - // } - // } - // This method returns only the { "sum" : { "field" : "change" } } part. - - source := make(map[string]interface{}) - opts := make(map[string]interface{}) - source["sum"] = opts - - // ValuesSourceAggregationBuilder - if a.field != "" { - opts["field"] = a.field - } - if a.script != "" { - opts["script"] = a.script - } - if a.scriptFile != "" { - opts["script_file"] = a.scriptFile - } - if a.lang != "" { - opts["lang"] = a.lang - } - if a.format != "" { - opts["format"] = a.format - } - if len(a.params) > 0 { - opts["params"] = a.params - } - - // AggregationBuilder (SubAggregations) - if len(a.subAggregations) > 0 { - aggsMap := make(map[string]interface{}) - source["aggregations"] = aggsMap - for name, aggregate := range a.subAggregations { - aggsMap[name] = aggregate.Source() - } - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_sum_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_sum_test.go deleted file mode 100644 index de87e79..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_sum_test.go +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestSumAggregation(t *testing.T) { - agg := NewSumAggregation().Field("price") - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"sum":{"field":"price"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSumAggregationWithFormat(t *testing.T) { - agg := NewSumAggregation().Field("price").Format("00000.00") - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"sum":{"field":"price","format":"00000.00"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_terms.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_terms.go deleted file mode 100644 index d38c066..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_terms.go +++ /dev/null @@ -1,339 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// TermsAggregation is a multi-bucket value source based aggregation -// where buckets are dynamically built - one per unique value. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html -type TermsAggregation struct { - field string - script string - scriptFile string - lang string - params map[string]interface{} - subAggregations map[string]Aggregation - - size *int - shardSize *int - requiredSize *int - minDocCount *int - shardMinDocCount *int - valueType string - order string - orderAsc bool - includePattern string - includeFlags *int - excludePattern string - excludeFlags *int - executionHint string - collectionMode string - showTermDocCountError *bool - includeTerms []string - excludeTerms []string -} - -func NewTermsAggregation() TermsAggregation { - a := TermsAggregation{ - params: make(map[string]interface{}), - subAggregations: make(map[string]Aggregation, 0), - includeTerms: make([]string, 0), - excludeTerms: make([]string, 0), - } - return a -} - -func (a TermsAggregation) Field(field string) TermsAggregation { - a.field = field - return a -} - -func (a TermsAggregation) Script(script string) TermsAggregation { - a.script = script - return a -} - -func (a TermsAggregation) ScriptFile(scriptFile string) TermsAggregation { - a.scriptFile = scriptFile - return a -} - -func (a TermsAggregation) Lang(lang string) TermsAggregation { - a.lang = lang - return a -} - -func (a TermsAggregation) Param(name string, value interface{}) TermsAggregation { - a.params[name] = value - return a -} - -func (a TermsAggregation) SubAggregation(name string, subAggregation Aggregation) TermsAggregation { - a.subAggregations[name] = subAggregation - return a -} - -func (a TermsAggregation) Size(size int) TermsAggregation { - a.size = &size - return a -} - -func (a TermsAggregation) RequiredSize(requiredSize int) TermsAggregation { - a.requiredSize = &requiredSize - return a -} - -func (a TermsAggregation) ShardSize(shardSize int) TermsAggregation { - a.shardSize = &shardSize - return a -} - -func (a TermsAggregation) MinDocCount(minDocCount int) TermsAggregation { - a.minDocCount = &minDocCount - return a -} - -func (a TermsAggregation) ShardMinDocCount(shardMinDocCount int) TermsAggregation { - a.shardMinDocCount = &shardMinDocCount - return a -} - -func (a TermsAggregation) Include(regexp string) TermsAggregation { - a.includePattern = regexp - return a -} - -func (a TermsAggregation) IncludeWithFlags(regexp string, flags int) TermsAggregation { - a.includePattern = regexp - a.includeFlags = &flags - return a -} - -func (a TermsAggregation) Exclude(regexp string) TermsAggregation { - a.excludePattern = regexp - return a -} - -func (a TermsAggregation) ExcludeWithFlags(regexp string, flags int) TermsAggregation { - a.excludePattern = regexp - a.excludeFlags = &flags - return a -} - -// ValueType can be string, long, or double. -func (a TermsAggregation) ValueType(valueType string) TermsAggregation { - a.valueType = valueType - return a -} - -func (a TermsAggregation) Order(order string, asc bool) TermsAggregation { - a.order = order - a.orderAsc = asc - return a -} - -func (a TermsAggregation) OrderByCount(asc bool) TermsAggregation { - // "order" : { "_count" : "asc" } - a.order = "_count" - a.orderAsc = asc - return a -} - -func (a TermsAggregation) OrderByCountAsc() TermsAggregation { - return a.OrderByCount(true) -} - -func (a TermsAggregation) OrderByCountDesc() TermsAggregation { - return a.OrderByCount(false) -} - -func (a TermsAggregation) OrderByTerm(asc bool) TermsAggregation { - // "order" : { "_term" : "asc" } - a.order = "_term" - a.orderAsc = asc - return a -} - -func (a TermsAggregation) OrderByTermAsc() TermsAggregation { - return a.OrderByTerm(true) -} - -func (a TermsAggregation) OrderByTermDesc() TermsAggregation { - return a.OrderByTerm(false) -} - -// OrderByAggregation creates a bucket ordering strategy which sorts buckets -// based on a single-valued calc get. -func (a TermsAggregation) OrderByAggregation(aggName string, asc bool) TermsAggregation { - // { - // "aggs" : { - // "genders" : { - // "terms" : { - // "field" : "gender", - // "order" : { "avg_height" : "desc" } - // }, - // "aggs" : { - // "avg_height" : { "avg" : { "field" : "height" } } - // } - // } - // } - // } - a.order = aggName - a.orderAsc = asc - return a -} - -// OrderByAggregationAndMetric creates a bucket ordering strategy which -// sorts buckets based on a multi-valued calc get. -func (a TermsAggregation) OrderByAggregationAndMetric(aggName, metric string, asc bool) TermsAggregation { - // { - // "aggs" : { - // "genders" : { - // "terms" : { - // "field" : "gender", - // "order" : { "height_stats.avg" : "desc" } - // }, - // "aggs" : { - // "height_stats" : { "stats" : { "field" : "height" } } - // } - // } - // } - // } - a.order = aggName + "." + metric - a.orderAsc = asc - return a -} - -func (a TermsAggregation) ExecutionHint(hint string) TermsAggregation { - a.executionHint = hint - return a -} - -// Collection mode can be depth_first or breadth_first as of 1.4.0. -func (a TermsAggregation) CollectionMode(collectionMode string) TermsAggregation { - a.collectionMode = collectionMode - return a -} - -func (a TermsAggregation) ShowTermDocCountError(showTermDocCountError bool) TermsAggregation { - a.showTermDocCountError = &showTermDocCountError - return a -} - -func (a TermsAggregation) IncludeTerms(terms ...string) TermsAggregation { - a.includeTerms = append(a.includeTerms, terms...) - return a -} - -func (a TermsAggregation) ExcludeTerms(terms ...string) TermsAggregation { - a.excludeTerms = append(a.excludeTerms, terms...) - return a -} - -func (a TermsAggregation) Source() interface{} { - // Example: - // { - // "aggs" : { - // "genders" : { - // "terms" : { "field" : "gender" } - // } - // } - // } - // This method returns only the { "terms" : { "field" : "gender" } } part. - - source := make(map[string]interface{}) - opts := make(map[string]interface{}) - source["terms"] = opts - - // ValuesSourceAggregationBuilder - if a.field != "" { - opts["field"] = a.field - } - if a.script != "" { - opts["script"] = a.script - } - if a.scriptFile != "" { - opts["script_file"] = a.scriptFile - } - if a.lang != "" { - opts["lang"] = a.lang - } - if len(a.params) > 0 { - opts["params"] = a.params - } - - // AggregationBuilder (SubAggregations) - if len(a.subAggregations) > 0 { - aggsMap := make(map[string]interface{}) - source["aggregations"] = aggsMap - for name, aggregate := range a.subAggregations { - aggsMap[name] = aggregate.Source() - } - } - - // TermsBuilder - if a.size != nil && *a.size >= 0 { - opts["size"] = *a.size - } - if a.shardSize != nil && *a.shardSize >= 0 { - opts["shard_size"] = *a.shardSize - } - if a.requiredSize != nil && *a.requiredSize >= 0 { - opts["required_size"] = *a.requiredSize - } - if a.minDocCount != nil && *a.minDocCount >= 0 { - opts["min_doc_count"] = *a.minDocCount - } - if a.shardMinDocCount != nil && *a.shardMinDocCount >= 0 { - opts["shard_min_doc_count"] = *a.shardMinDocCount - } - if a.showTermDocCountError != nil { - opts["show_term_doc_count_error"] = *a.showTermDocCountError - } - if a.collectionMode != "" { - opts["collect_mode"] = a.collectionMode - } - if a.valueType != "" { - opts["value_type"] = a.valueType - } - if a.order != "" { - o := make(map[string]interface{}) - if a.orderAsc { - o[a.order] = "asc" - } else { - o[a.order] = "desc" - } - opts["order"] = o - } - if len(a.includeTerms) > 0 { - opts["include"] = a.includeTerms - } - if a.includePattern != "" { - if a.includeFlags == nil || *a.includeFlags == 0 { - opts["include"] = a.includePattern - } else { - p := make(map[string]interface{}) - p["pattern"] = a.includePattern - p["flags"] = *a.includeFlags - opts["include"] = p - } - } - if len(a.excludeTerms) > 0 { - opts["exclude"] = a.excludeTerms - } - if a.excludePattern != "" { - if a.excludeFlags == nil || *a.excludeFlags == 0 { - opts["exclude"] = a.excludePattern - } else { - p := make(map[string]interface{}) - p["pattern"] = a.excludePattern - p["flags"] = *a.excludeFlags - opts["exclude"] = p - } - } - if a.executionHint != "" { - opts["execution_hint"] = a.executionHint - } - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_terms_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_terms_test.go deleted file mode 100644 index e3bb767..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_terms_test.go +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestTermsAggregation(t *testing.T) { - agg := NewTermsAggregation().Field("gender").Size(10).OrderByTermDesc() - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"terms":{"field":"gender","order":{"_term":"desc"},"size":10}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestTermsAggregationWithSubAggregation(t *testing.T) { - subAgg := NewAvgAggregation().Field("height") - agg := NewTermsAggregation().Field("gender").Size(10). - OrderByAggregation("avg_height", false) - agg = agg.SubAggregation("avg_height", subAgg) - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"aggregations":{"avg_height":{"avg":{"field":"height"}}},"terms":{"field":"gender","order":{"avg_height":"desc"},"size":10}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestTermsAggregationWithMultipleSubAggregation(t *testing.T) { - subAgg1 := NewAvgAggregation().Field("height") - subAgg2 := NewAvgAggregation().Field("width") - agg := NewTermsAggregation().Field("gender").Size(10). - OrderByAggregation("avg_height", false) - agg = agg.SubAggregation("avg_height", subAgg1) - agg = agg.SubAggregation("avg_width", subAgg2) - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"aggregations":{"avg_height":{"avg":{"field":"height"}},"avg_width":{"avg":{"field":"width"}}},"terms":{"field":"gender","order":{"avg_height":"desc"},"size":10}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_test.go deleted file mode 100644 index 80ff982..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_test.go +++ /dev/null @@ -1,2683 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "strings" - "testing" - "time" -) - -func TestAggs(t *testing.T) { - //client := setupTestClientAndCreateIndex(t, SetTraceLog(log.New(os.Stdout, "", log.LstdFlags))) - client := setupTestClientAndCreateIndex(t) - - esversion, err := client.ElasticsearchVersion(DefaultURL) - if err != nil { - t.Fatal(err) - } - - tweet1 := tweet{ - User: "olivere", - Retweets: 108, - Message: "Welcome to Golang and Elasticsearch.", - Image: "http://golang.org/doc/gopher/gophercolor.png", - Tags: []string{"golang", "elasticsearch"}, - Location: "48.1333,11.5667", // lat,lon - Created: time.Date(2012, 12, 12, 17, 38, 34, 0, time.UTC), - } - tweet2 := tweet{ - User: "olivere", - Retweets: 0, - Message: "Another unrelated topic.", - Tags: []string{"golang"}, - Location: "48.1189,11.4289", // lat,lon - Created: time.Date(2012, 10, 10, 8, 12, 03, 0, time.UTC), - } - tweet3 := tweet{ - User: "sandrae", - Retweets: 12, - Message: "Cycling is fun.", - Tags: []string{"sports", "cycling"}, - Location: "47.7167,11.7167", // lat,lon - Created: time.Date(2011, 11, 11, 10, 58, 12, 0, time.UTC), - } - - // Add all documents - _, err = client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Match all should return all documents - all := NewMatchAllQuery() - - // Terms Aggregate by user name - globalAgg := NewGlobalAggregation() - usersAgg := NewTermsAggregation().Field("user").Size(10).OrderByCountDesc() - retweetsAgg := NewTermsAggregation().Field("retweets").Size(10) - avgRetweetsAgg := NewAvgAggregation().Field("retweets") - minRetweetsAgg := NewMinAggregation().Field("retweets") - maxRetweetsAgg := NewMaxAggregation().Field("retweets") - sumRetweetsAgg := NewSumAggregation().Field("retweets") - statsRetweetsAgg := NewStatsAggregation().Field("retweets") - extstatsRetweetsAgg := NewExtendedStatsAggregation().Field("retweets") - valueCountRetweetsAgg := NewValueCountAggregation().Field("retweets") - percentilesRetweetsAgg := NewPercentilesAggregation().Field("retweets") - percentileRanksRetweetsAgg := NewPercentileRanksAggregation().Field("retweets").Values(25, 50, 75) - cardinalityAgg := NewCardinalityAggregation().Field("user") - significantTermsAgg := NewSignificantTermsAggregation().Field("message") - retweetsRangeAgg := NewRangeAggregation().Field("retweets").Lt(10).Between(10, 100).Gt(100) - retweetsKeyedRangeAgg := NewRangeAggregation().Field("retweets").Keyed(true).Lt(10).Between(10, 100).Gt(100) - dateRangeAgg := NewDateRangeAggregation().Field("created").Lt("2012-01-01").Between("2012-01-01", "2013-01-01").Gt("2013-01-01") - missingTagsAgg := NewMissingAggregation().Field("tags") - retweetsHistoAgg := NewHistogramAggregation().Field("retweets").Interval(100) - dateHistoAgg := NewDateHistogramAggregation().Field("created").Interval("year") - retweetsFilterAgg := NewFilterAggregation().Filter( - NewRangeFilter("created").Gte("2012-01-01").Lte("2012-12-31")). - SubAggregation("avgRetweetsSub", NewAvgAggregation().Field("retweets")) - queryFilterAgg := NewFilterAggregation().Filter(NewQueryFilter(NewTermQuery("tags", "golang"))) - topTagsHitsAgg := NewTopHitsAggregation().Sort("created", false).Size(5).FetchSource(true) - topTagsAgg := NewTermsAggregation().Field("tags").Size(3).SubAggregation("top_tag_hits", topTagsHitsAgg) - geoBoundsAgg := NewGeoBoundsAggregation().Field("location") - geoHashAgg := NewGeoHashGridAggregation().Field("location").Precision(5) - - // Run query - builder := client.Search().Index(testIndexName).Query(&all) - builder = builder.Aggregation("global", globalAgg) - builder = builder.Aggregation("users", usersAgg) - builder = builder.Aggregation("retweets", retweetsAgg) - builder = builder.Aggregation("avgRetweets", avgRetweetsAgg) - builder = builder.Aggregation("minRetweets", minRetweetsAgg) - builder = builder.Aggregation("maxRetweets", maxRetweetsAgg) - builder = builder.Aggregation("sumRetweets", sumRetweetsAgg) - builder = builder.Aggregation("statsRetweets", statsRetweetsAgg) - builder = builder.Aggregation("extstatsRetweets", extstatsRetweetsAgg) - builder = builder.Aggregation("valueCountRetweets", valueCountRetweetsAgg) - builder = builder.Aggregation("percentilesRetweets", percentilesRetweetsAgg) - builder = builder.Aggregation("percentileRanksRetweets", percentileRanksRetweetsAgg) - builder = builder.Aggregation("usersCardinality", cardinalityAgg) - builder = builder.Aggregation("significantTerms", significantTermsAgg) - builder = builder.Aggregation("retweetsRange", retweetsRangeAgg) - builder = builder.Aggregation("retweetsKeyedRange", retweetsKeyedRangeAgg) - builder = builder.Aggregation("dateRange", dateRangeAgg) - builder = builder.Aggregation("missingTags", missingTagsAgg) - builder = builder.Aggregation("retweetsHisto", retweetsHistoAgg) - builder = builder.Aggregation("dateHisto", dateHistoAgg) - builder = builder.Aggregation("retweetsFilter", retweetsFilterAgg) - builder = builder.Aggregation("queryFilter", queryFilterAgg) - builder = builder.Aggregation("top-tags", topTagsAgg) - builder = builder.Aggregation("viewport", geoBoundsAgg) - builder = builder.Aggregation("geohashed", geoHashAgg) - if esversion >= "1.4" { - // Unnamed filters - countByUserAgg := NewFiltersAggregation(). - Filters(NewTermQuery("user", "olivere"), NewTermQuery("user", "sandrae")) - builder = builder.Aggregation("countByUser", countByUserAgg) - // Named filters - countByUserAgg2 := NewFiltersAggregation(). - FilterWithName("olivere", NewTermQuery("user", "olivere")). - FilterWithName("sandrae", NewTermQuery("user", "sandrae")) - builder = builder.Aggregation("countByUser2", countByUserAgg2) - } - searchResult, err := builder.Do() - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Errorf("expected Hits != nil; got: nil") - } - if searchResult.Hits.TotalHits != 3 { - t.Errorf("expected Hits.TotalHits = %d; got: %d", 3, searchResult.Hits.TotalHits) - } - if len(searchResult.Hits.Hits) != 3 { - t.Errorf("expected len(Hits.Hits) = %d; got: %d", 3, len(searchResult.Hits.Hits)) - } - agg := searchResult.Aggregations - if agg == nil { - t.Fatalf("expected Aggregations != nil; got: nil") - } - - // Search for non-existent aggregate should return (nil, false) - unknownAgg, found := agg.Terms("no-such-aggregate") - if found { - t.Errorf("expected unknown aggregation to not be found; got: %v", found) - } - if unknownAgg != nil { - t.Errorf("expected unknown aggregation to return %v; got %v", nil, unknownAgg) - } - - // Global - globalAggRes, found := agg.Global("global") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if globalAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if globalAggRes.DocCount != 3 { - t.Errorf("expected DocCount = %d; got: %d", 3, globalAggRes.DocCount) - } - - // Search for existent aggregate (by name) should return (aggregate, true) - termsAggRes, found := agg.Terms("users") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if termsAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if len(termsAggRes.Buckets) != 2 { - t.Fatalf("expected %d; got: %d", 2, len(termsAggRes.Buckets)) - } - if termsAggRes.Buckets[0].Key != "olivere" { - t.Errorf("expected %q; got: %q", "olivere", termsAggRes.Buckets[0].Key) - } - if termsAggRes.Buckets[0].DocCount != 2 { - t.Errorf("expected %d; got: %d", 2, termsAggRes.Buckets[0].DocCount) - } - if termsAggRes.Buckets[1].Key != "sandrae" { - t.Errorf("expected %q; got: %q", "sandrae", termsAggRes.Buckets[1].Key) - } - if termsAggRes.Buckets[1].DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, termsAggRes.Buckets[1].DocCount) - } - - // A terms aggregate with keys that are not strings - retweetsAggRes, found := agg.Terms("retweets") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if retweetsAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if len(retweetsAggRes.Buckets) != 3 { - t.Fatalf("expected %d; got: %d", 3, len(retweetsAggRes.Buckets)) - } - - if retweetsAggRes.Buckets[0].Key != float64(0) { - t.Errorf("expected %v; got: %v", float64(0), retweetsAggRes.Buckets[0].Key) - } - if got, err := retweetsAggRes.Buckets[0].KeyNumber.Int64(); err != nil { - t.Errorf("expected %d; got: %v", 0, retweetsAggRes.Buckets[0].Key) - } else if got != 0 { - t.Errorf("expected %d; got: %d", 0, got) - } - if retweetsAggRes.Buckets[0].KeyNumber != "0" { - t.Errorf("expected %q; got: %q", "0", retweetsAggRes.Buckets[0].KeyNumber) - } - if retweetsAggRes.Buckets[0].DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, retweetsAggRes.Buckets[0].DocCount) - } - - if retweetsAggRes.Buckets[1].Key != float64(12) { - t.Errorf("expected %v; got: %v", float64(12), retweetsAggRes.Buckets[1].Key) - } - if got, err := retweetsAggRes.Buckets[1].KeyNumber.Int64(); err != nil { - t.Errorf("expected %d; got: %v", 0, retweetsAggRes.Buckets[1].KeyNumber) - } else if got != 12 { - t.Errorf("expected %d; got: %d", 12, got) - } - if retweetsAggRes.Buckets[1].KeyNumber != "12" { - t.Errorf("expected %q; got: %q", "12", retweetsAggRes.Buckets[1].KeyNumber) - } - if retweetsAggRes.Buckets[1].DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, retweetsAggRes.Buckets[1].DocCount) - } - - if retweetsAggRes.Buckets[2].Key != float64(108) { - t.Errorf("expected %v; got: %v", float64(108), retweetsAggRes.Buckets[2].Key) - } - if got, err := retweetsAggRes.Buckets[2].KeyNumber.Int64(); err != nil { - t.Errorf("expected %d; got: %v", 108, retweetsAggRes.Buckets[2].KeyNumber) - } else if got != 108 { - t.Errorf("expected %d; got: %d", 108, got) - } - if retweetsAggRes.Buckets[2].KeyNumber != "108" { - t.Errorf("expected %q; got: %q", "108", retweetsAggRes.Buckets[2].KeyNumber) - } - if retweetsAggRes.Buckets[2].DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, retweetsAggRes.Buckets[2].DocCount) - } - - // avgRetweets - avgAggRes, found := agg.Avg("avgRetweets") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if avgAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if avgAggRes.Value == nil { - t.Fatalf("expected != nil; got: %v", *avgAggRes.Value) - } - if *avgAggRes.Value != 40.0 { - t.Errorf("expected %v; got: %v", 40.0, *avgAggRes.Value) - } - - // minRetweets - minAggRes, found := agg.Min("minRetweets") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if minAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if minAggRes.Value == nil { - t.Fatalf("expected != nil; got: %v", *minAggRes.Value) - } - if *minAggRes.Value != 0.0 { - t.Errorf("expected %v; got: %v", 0.0, *minAggRes.Value) - } - - // maxRetweets - maxAggRes, found := agg.Max("maxRetweets") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if maxAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if maxAggRes.Value == nil { - t.Fatalf("expected != nil; got: %v", *maxAggRes.Value) - } - if *maxAggRes.Value != 108.0 { - t.Errorf("expected %v; got: %v", 108.0, *maxAggRes.Value) - } - - // sumRetweets - sumAggRes, found := agg.Sum("sumRetweets") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if sumAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if sumAggRes.Value == nil { - t.Fatalf("expected != nil; got: %v", *sumAggRes.Value) - } - if *sumAggRes.Value != 120.0 { - t.Errorf("expected %v; got: %v", 120.0, *sumAggRes.Value) - } - - // statsRetweets - statsAggRes, found := agg.Stats("statsRetweets") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if statsAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if statsAggRes.Count != 3 { - t.Errorf("expected %d; got: %d", 3, statsAggRes.Count) - } - if statsAggRes.Min == nil { - t.Fatalf("expected != nil; got: %v", *statsAggRes.Min) - } - if *statsAggRes.Min != 0.0 { - t.Errorf("expected %v; got: %v", 0.0, *statsAggRes.Min) - } - if statsAggRes.Max == nil { - t.Fatalf("expected != nil; got: %v", *statsAggRes.Max) - } - if *statsAggRes.Max != 108.0 { - t.Errorf("expected %v; got: %v", 108.0, *statsAggRes.Max) - } - if statsAggRes.Avg == nil { - t.Fatalf("expected != nil; got: %v", *statsAggRes.Avg) - } - if *statsAggRes.Avg != 40.0 { - t.Errorf("expected %v; got: %v", 40.0, *statsAggRes.Avg) - } - if statsAggRes.Sum == nil { - t.Fatalf("expected != nil; got: %v", *statsAggRes.Sum) - } - if *statsAggRes.Sum != 120.0 { - t.Errorf("expected %v; got: %v", 120.0, *statsAggRes.Sum) - } - - // extstatsRetweets - extStatsAggRes, found := agg.ExtendedStats("extstatsRetweets") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if extStatsAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if extStatsAggRes.Count != 3 { - t.Errorf("expected %d; got: %d", 3, extStatsAggRes.Count) - } - if extStatsAggRes.Min == nil { - t.Fatalf("expected != nil; got: %v", *extStatsAggRes.Min) - } - if *extStatsAggRes.Min != 0.0 { - t.Errorf("expected %v; got: %v", 0.0, *extStatsAggRes.Min) - } - if extStatsAggRes.Max == nil { - t.Fatalf("expected != nil; got: %v", *extStatsAggRes.Max) - } - if *extStatsAggRes.Max != 108.0 { - t.Errorf("expected %v; got: %v", 108.0, *extStatsAggRes.Max) - } - if extStatsAggRes.Avg == nil { - t.Fatalf("expected != nil; got: %v", *extStatsAggRes.Avg) - } - if *extStatsAggRes.Avg != 40.0 { - t.Errorf("expected %v; got: %v", 40.0, *extStatsAggRes.Avg) - } - if extStatsAggRes.Sum == nil { - t.Fatalf("expected != nil; got: %v", *extStatsAggRes.Sum) - } - if *extStatsAggRes.Sum != 120.0 { - t.Errorf("expected %v; got: %v", 120.0, *extStatsAggRes.Sum) - } - if extStatsAggRes.SumOfSquares == nil { - t.Fatalf("expected != nil; got: %v", *extStatsAggRes.SumOfSquares) - } - if *extStatsAggRes.SumOfSquares != 11808.0 { - t.Errorf("expected %v; got: %v", 11808.0, *extStatsAggRes.SumOfSquares) - } - if extStatsAggRes.Variance == nil { - t.Fatalf("expected != nil; got: %v", *extStatsAggRes.Variance) - } - if *extStatsAggRes.Variance != 2336.0 { - t.Errorf("expected %v; got: %v", 2336.0, *extStatsAggRes.Variance) - } - if extStatsAggRes.StdDeviation == nil { - t.Fatalf("expected != nil; got: %v", *extStatsAggRes.StdDeviation) - } - if *extStatsAggRes.StdDeviation != 48.33218389437829 { - t.Errorf("expected %v; got: %v", 48.33218389437829, *extStatsAggRes.StdDeviation) - } - - // valueCountRetweets - valueCountAggRes, found := agg.ValueCount("valueCountRetweets") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if valueCountAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if valueCountAggRes.Value == nil { - t.Fatalf("expected != nil; got: %v", *valueCountAggRes.Value) - } - if *valueCountAggRes.Value != 3.0 { - t.Errorf("expected %v; got: %v", 3.0, *valueCountAggRes.Value) - } - - // percentilesRetweets - percentilesAggRes, found := agg.Percentiles("percentilesRetweets") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if percentilesAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - // ES 1.4.x returns 7: {"1.0":...} - // ES 1.5.0 returns 14: {"1.0":..., "1.0_as_string":...} - // So we're relaxing the test here. - if len(percentilesAggRes.Values) == 0 { - t.Errorf("expected at least %d value; got: %d\nValues are: %#v", 1, len(percentilesAggRes.Values), percentilesAggRes.Values) - } - if _, found := percentilesAggRes.Values["0.0"]; found { - t.Errorf("expected %v; got: %v", false, found) - } - if percentilesAggRes.Values["1.0"] != 0.24 { - t.Errorf("expected %v; got: %v", 0.24, percentilesAggRes.Values["1.0"]) - } - if percentilesAggRes.Values["25.0"] != 6.0 { - t.Errorf("expected %v; got: %v", 6.0, percentilesAggRes.Values["25.0"]) - } - if percentilesAggRes.Values["99.0"] != 106.08 { - t.Errorf("expected %v; got: %v", 106.08, percentilesAggRes.Values["99.0"]) - } - - // percentileRanksRetweets - percentileRanksAggRes, found := agg.PercentileRanks("percentileRanksRetweets") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if percentileRanksAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if len(percentileRanksAggRes.Values) == 0 { - t.Errorf("expected at least %d value; got %d\nValues are: %#v", 1, len(percentileRanksAggRes.Values), percentileRanksAggRes.Values) - } - if _, found := percentileRanksAggRes.Values["0.0"]; found { - t.Errorf("expected %v; got: %v", true, found) - } - if percentileRanksAggRes.Values["25.0"] != 21.180555555555557 { - t.Errorf("expected %v; got: %v", 21.180555555555557, percentileRanksAggRes.Values["25.0"]) - } - if percentileRanksAggRes.Values["50.0"] != 29.86111111111111 { - t.Errorf("expected %v; got: %v", 29.86111111111111, percentileRanksAggRes.Values["50.0"]) - } - if percentileRanksAggRes.Values["75.0"] != 38.54166666666667 { - t.Errorf("expected %v; got: %v", 38.54166666666667, percentileRanksAggRes.Values["75.0"]) - } - - // usersCardinality - cardAggRes, found := agg.Cardinality("usersCardinality") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if cardAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if cardAggRes.Value == nil { - t.Fatalf("expected != nil; got: %v", *cardAggRes.Value) - } - if *cardAggRes.Value != 2 { - t.Errorf("expected %v; got: %v", 2, *cardAggRes.Value) - } - - // retweetsFilter - filterAggRes, found := agg.Filter("retweetsFilter") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if filterAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if filterAggRes.DocCount != 2 { - t.Fatalf("expected %v; got: %v", 2, filterAggRes.DocCount) - } - - // Retrieve sub-aggregation - avgRetweetsAggRes, found := filterAggRes.Avg("avgRetweetsSub") - if !found { - t.Error("expected sub-aggregation \"avgRetweets\" to be found; got false") - } - if avgRetweetsAggRes == nil { - t.Fatal("expected sub-aggregation \"avgRetweets\"; got nil") - } - if avgRetweetsAggRes.Value == nil { - t.Fatalf("expected != nil; got: %v", avgRetweetsAggRes.Value) - } - if *avgRetweetsAggRes.Value != 54.0 { - t.Errorf("expected %v; got: %v", 54.0, *avgRetweetsAggRes.Value) - } - - // queryFilter - queryFilterAggRes, found := agg.Filter("queryFilter") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if queryFilterAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if queryFilterAggRes.DocCount != 2 { - t.Fatalf("expected %v; got: %v", 2, queryFilterAggRes.DocCount) - } - - // significantTerms - stAggRes, found := agg.SignificantTerms("significantTerms") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if stAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if stAggRes.DocCount != 3 { - t.Errorf("expected %v; got: %v", 3, stAggRes.DocCount) - } - if len(stAggRes.Buckets) != 0 { - t.Errorf("expected %v; got: %v", 0, len(stAggRes.Buckets)) - } - - // retweetsRange - rangeAggRes, found := agg.Range("retweetsRange") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if rangeAggRes == nil { - t.Fatal("expected != nil; got: nil") - } - if len(rangeAggRes.Buckets) != 3 { - t.Fatalf("expected %d; got: %d", 3, len(rangeAggRes.Buckets)) - } - if rangeAggRes.Buckets[0].DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, rangeAggRes.Buckets[0].DocCount) - } - if rangeAggRes.Buckets[1].DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, rangeAggRes.Buckets[1].DocCount) - } - if rangeAggRes.Buckets[2].DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, rangeAggRes.Buckets[2].DocCount) - } - - // retweetsKeyedRange - keyedRangeAggRes, found := agg.KeyedRange("retweetsKeyedRange") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if keyedRangeAggRes == nil { - t.Fatal("expected != nil; got: nil") - } - if len(keyedRangeAggRes.Buckets) != 3 { - t.Fatalf("expected %d; got: %d", 3, len(keyedRangeAggRes.Buckets)) - } - _, found = keyedRangeAggRes.Buckets["no-such-key"] - if found { - t.Fatalf("expected bucket to not be found; got: %v", found) - } - bucket, found := keyedRangeAggRes.Buckets["*-10.0"] - if !found { - t.Fatalf("expected bucket to be found; got: %v", found) - } - if bucket.DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, bucket.DocCount) - } - bucket, found = keyedRangeAggRes.Buckets["10.0-100.0"] - if !found { - t.Fatalf("expected bucket to be found; got: %v", found) - } - if bucket.DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, bucket.DocCount) - } - bucket, found = keyedRangeAggRes.Buckets["100.0-*"] - if !found { - t.Fatalf("expected bucket to be found; got: %v", found) - } - if bucket.DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, bucket.DocCount) - } - - // dateRange - dateRangeRes, found := agg.DateRange("dateRange") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if dateRangeRes == nil { - t.Fatal("expected != nil; got: nil") - } - if dateRangeRes.Buckets[0].DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, dateRangeRes.Buckets[0].DocCount) - } - if dateRangeRes.Buckets[0].From != nil { - t.Fatal("expected From to be nil") - } - if dateRangeRes.Buckets[0].To == nil { - t.Fatal("expected To to be != nil") - } - if *dateRangeRes.Buckets[0].To != 1.325376e+12 { - t.Errorf("expected %v; got: %v", 1.325376e+12, *dateRangeRes.Buckets[0].To) - } - if dateRangeRes.Buckets[0].ToAsString != "2012-01-01T00:00:00.000Z" { - t.Errorf("expected %q; got: %q", "2012-01-01T00:00:00.000Z", dateRangeRes.Buckets[0].ToAsString) - } - if dateRangeRes.Buckets[1].DocCount != 2 { - t.Errorf("expected %d; got: %d", 2, dateRangeRes.Buckets[1].DocCount) - } - if dateRangeRes.Buckets[1].From == nil { - t.Fatal("expected From to be != nil") - } - if *dateRangeRes.Buckets[1].From != 1.325376e+12 { - t.Errorf("expected From = %v; got: %v", 1.325376e+12, *dateRangeRes.Buckets[1].From) - } - if dateRangeRes.Buckets[1].FromAsString != "2012-01-01T00:00:00.000Z" { - t.Errorf("expected FromAsString = %q; got: %q", "2012-01-01T00:00:00.000Z", dateRangeRes.Buckets[1].FromAsString) - } - if dateRangeRes.Buckets[1].To == nil { - t.Fatal("expected To to be != nil") - } - if *dateRangeRes.Buckets[1].To != 1.3569984e+12 { - t.Errorf("expected To = %v; got: %v", 1.3569984e+12, *dateRangeRes.Buckets[1].To) - } - if dateRangeRes.Buckets[1].ToAsString != "2013-01-01T00:00:00.000Z" { - t.Errorf("expected ToAsString = %q; got: %q", "2013-01-01T00:00:00.000Z", dateRangeRes.Buckets[1].ToAsString) - } - if dateRangeRes.Buckets[2].DocCount != 0 { - t.Errorf("expected %d; got: %d", 0, dateRangeRes.Buckets[2].DocCount) - } - if dateRangeRes.Buckets[2].To != nil { - t.Fatal("expected To to be nil") - } - if dateRangeRes.Buckets[2].From == nil { - t.Fatal("expected From to be != nil") - } - if *dateRangeRes.Buckets[2].From != 1.3569984e+12 { - t.Errorf("expected %v; got: %v", 1.3569984e+12, *dateRangeRes.Buckets[2].From) - } - if dateRangeRes.Buckets[2].FromAsString != "2013-01-01T00:00:00.000Z" { - t.Errorf("expected %q; got: %q", "2013-01-01T00:00:00.000Z", dateRangeRes.Buckets[2].FromAsString) - } - - // missingTags - missingRes, found := agg.Missing("missingTags") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if missingRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if missingRes.DocCount != 0 { - t.Errorf("expected searchResult.Aggregations[\"missingTags\"].DocCount = %v; got %v", 0, missingRes.DocCount) - } - - // retweetsHisto - histoRes, found := agg.Histogram("retweetsHisto") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if histoRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if len(histoRes.Buckets) != 2 { - t.Fatalf("expected %d; got: %d", 2, len(histoRes.Buckets)) - } - if histoRes.Buckets[0].DocCount != 2 { - t.Errorf("expected %d; got: %d", 2, histoRes.Buckets[0].DocCount) - } - if histoRes.Buckets[0].Key != 0.0 { - t.Errorf("expected %v; got: %v", 0.0, histoRes.Buckets[0].Key) - } - if histoRes.Buckets[1].DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, histoRes.Buckets[1].DocCount) - } - if histoRes.Buckets[1].Key != 100.0 { - t.Errorf("expected %v; got: %v", 100.0, histoRes.Buckets[1].Key) - } - - // dateHisto - dateHistoRes, found := agg.DateHistogram("dateHisto") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if dateHistoRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if len(dateHistoRes.Buckets) != 2 { - t.Fatalf("expected %d; got: %d", 2, len(dateHistoRes.Buckets)) - } - if dateHistoRes.Buckets[0].DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, dateHistoRes.Buckets[0].DocCount) - } - if dateHistoRes.Buckets[0].Key != 1.29384e+12 { - t.Errorf("expected %v; got: %v", 1.29384e+12, dateHistoRes.Buckets[0].Key) - } - if dateHistoRes.Buckets[0].KeyAsString == nil { - t.Fatalf("expected != nil; got: %q", dateHistoRes.Buckets[0].KeyAsString) - } - if *dateHistoRes.Buckets[0].KeyAsString != "2011-01-01T00:00:00.000Z" { - t.Errorf("expected %q; got: %q", "2011-01-01T00:00:00.000Z", *dateHistoRes.Buckets[0].KeyAsString) - } - if dateHistoRes.Buckets[1].DocCount != 2 { - t.Errorf("expected %d; got: %d", 2, dateHistoRes.Buckets[1].DocCount) - } - if dateHistoRes.Buckets[1].Key != 1.325376e+12 { - t.Errorf("expected %v; got: %v", 1.325376e+12, dateHistoRes.Buckets[1].Key) - } - if dateHistoRes.Buckets[1].KeyAsString == nil { - t.Fatalf("expected != nil; got: %q", dateHistoRes.Buckets[1].KeyAsString) - } - if *dateHistoRes.Buckets[1].KeyAsString != "2012-01-01T00:00:00.000Z" { - t.Errorf("expected %q; got: %q", "2012-01-01T00:00:00.000Z", *dateHistoRes.Buckets[1].KeyAsString) - } - - // topHits - topTags, found := agg.Terms("top-tags") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if topTags == nil { - t.Fatalf("expected != nil; got: nil") - } - if esversion >= "1.4.0" { - if topTags.DocCountErrorUpperBound != 0 { - t.Errorf("expected %v; got: %v", 0, topTags.DocCountErrorUpperBound) - } - if topTags.SumOfOtherDocCount != 1 { - t.Errorf("expected %v; got: %v", 1, topTags.SumOfOtherDocCount) - } - } - if len(topTags.Buckets) != 3 { - t.Fatalf("expected %d; got: %d", 3, len(topTags.Buckets)) - } - if topTags.Buckets[0].DocCount != 2 { - t.Errorf("expected %d; got: %d", 2, topTags.Buckets[0].DocCount) - } - if topTags.Buckets[0].Key != "golang" { - t.Errorf("expected %v; got: %v", "golang", topTags.Buckets[0].Key) - } - topHits, found := topTags.Buckets[0].TopHits("top_tag_hits") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if topHits == nil { - t.Fatal("expected != nil; got: nil") - } - if topHits.Hits == nil { - t.Fatalf("expected != nil; got: nil") - } - if topHits.Hits.TotalHits != 2 { - t.Errorf("expected %d; got: %d", 2, topHits.Hits.TotalHits) - } - if topHits.Hits.Hits == nil { - t.Fatalf("expected != nil; got: nil") - } - if len(topHits.Hits.Hits) != 2 { - t.Fatalf("expected %d; got: %d", 2, len(topHits.Hits.Hits)) - } - hit := topHits.Hits.Hits[0] - if !found { - t.Fatalf("expected %v; got: %v", true, found) - } - if hit == nil { - t.Fatal("expected != nil; got: nil") - } - var tw tweet - if err := json.Unmarshal(*hit.Source, &tw); err != nil { - t.Fatalf("expected no error; got: %v", err) - } - if tw.Message != "Welcome to Golang and Elasticsearch." { - t.Errorf("expected %q; got: %q", "Welcome to Golang and Elasticsearch.", tw.Message) - } - if topTags.Buckets[1].DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, topTags.Buckets[1].DocCount) - } - if topTags.Buckets[1].Key != "cycling" { - t.Errorf("expected %v; got: %v", "cycling", topTags.Buckets[1].Key) - } - topHits, found = topTags.Buckets[1].TopHits("top_tag_hits") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if topHits == nil { - t.Fatal("expected != nil; got: nil") - } - if topHits.Hits == nil { - t.Fatal("expected != nil; got nil") - } - if topHits.Hits.TotalHits != 1 { - t.Errorf("expected %d; got: %d", 1, topHits.Hits.TotalHits) - } - if topTags.Buckets[2].DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, topTags.Buckets[2].DocCount) - } - if topTags.Buckets[2].Key != "elasticsearch" { - t.Errorf("expected %v; got: %v", "elasticsearch", topTags.Buckets[2].Key) - } - topHits, found = topTags.Buckets[2].TopHits("top_tag_hits") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if topHits == nil { - t.Fatal("expected != nil; got: nil") - } - if topHits.Hits == nil { - t.Fatal("expected != nil; got: nil") - } - if topHits.Hits.TotalHits != 1 { - t.Errorf("expected %d; got: %d", 1, topHits.Hits.TotalHits) - } - - // viewport via geo_bounds (1.3.0 has an error in that it doesn't output the aggregation name) - geoBoundsRes, found := agg.GeoBounds("viewport") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if geoBoundsRes == nil { - t.Fatalf("expected != nil; got: nil") - } - - // geohashed via geohash - geoHashRes, found := agg.GeoHash("geohashed") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if geoHashRes == nil { - t.Fatalf("expected != nil; got: nil") - } - - if esversion >= "1.4" { - // Filters agg "countByUser" (unnamed) - countByUserAggRes, found := agg.Filters("countByUser") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if countByUserAggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if len(countByUserAggRes.Buckets) != 2 { - t.Fatalf("expected %d; got: %d", 2, len(countByUserAggRes.Buckets)) - } - if len(countByUserAggRes.NamedBuckets) != 0 { - t.Fatalf("expected %d; got: %d", 0, len(countByUserAggRes.NamedBuckets)) - } - if countByUserAggRes.Buckets[0].DocCount != 2 { - t.Errorf("expected %d; got: %d", 2, countByUserAggRes.Buckets[0].DocCount) - } - if countByUserAggRes.Buckets[1].DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, countByUserAggRes.Buckets[1].DocCount) - } - - // Filters agg "countByUser2" (named) - countByUser2AggRes, found := agg.Filters("countByUser2") - if !found { - t.Errorf("expected %v; got: %v", true, found) - } - if countByUser2AggRes == nil { - t.Fatalf("expected != nil; got: nil") - } - if len(countByUser2AggRes.Buckets) != 0 { - t.Fatalf("expected %d; got: %d", 0, len(countByUser2AggRes.Buckets)) - } - if len(countByUser2AggRes.NamedBuckets) != 2 { - t.Fatalf("expected %d; got: %d", 2, len(countByUser2AggRes.NamedBuckets)) - } - b, found := countByUser2AggRes.NamedBuckets["olivere"] - if !found { - t.Fatalf("expected bucket %q; got: %v", "olivere", found) - } - if b == nil { - t.Fatalf("expected bucket %q; got: %v", "olivere", b) - } - if b.DocCount != 2 { - t.Errorf("expected %d; got: %d", 2, b.DocCount) - } - b, found = countByUser2AggRes.NamedBuckets["sandrae"] - if !found { - t.Fatalf("expected bucket %q; got: %v", "sandrae", found) - } - if b == nil { - t.Fatalf("expected bucket %q; got: %v", "sandrae", b) - } - if b.DocCount != 1 { - t.Errorf("expected %d; got: %d", 1, b.DocCount) - } - } -} - -// TestAggsMarshal ensures that marshaling aggregations back into a string -// does not yield base64 encoded data. See https://github.com/olivere/elastic/issues/51 -// and https://groups.google.com/forum/#!topic/Golang-Nuts/38ShOlhxAYY for details. -func TestAggsMarshal(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{ - User: "olivere", - Retweets: 108, - Message: "Welcome to Golang and Elasticsearch.", - Image: "http://golang.org/doc/gopher/gophercolor.png", - Tags: []string{"golang", "elasticsearch"}, - Location: "48.1333,11.5667", // lat,lon - Created: time.Date(2012, 12, 12, 17, 38, 34, 0, time.UTC), - } - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Match all should return all documents - all := NewMatchAllQuery() - dhagg := NewDateHistogramAggregation().Field("created").Interval("year") - - // Run query - builder := client.Search().Index(testIndexName).Query(&all) - builder = builder.Aggregation("dhagg", dhagg) - searchResult, err := builder.Do() - if err != nil { - t.Fatal(err) - } - if searchResult.TotalHits() != 1 { - t.Errorf("expected Hits.TotalHits = %d; got: %d", 1, searchResult.TotalHits()) - } - if _, found := searchResult.Aggregations["dhagg"]; !found { - t.Fatalf("expected aggregation %q", "dhagg") - } - buf, err := json.Marshal(searchResult) - if err != nil { - t.Fatal(err) - } - s := string(buf) - if i := strings.Index(s, `{"dhagg":{"buckets":[{"key_as_string":"2012-01-01`); i < 0 { - t.Errorf("expected to serialize aggregation into string; got: %v", s) - } -} - -func TestAggsMin(t *testing.T) { - s := `{ - "min_price": { - "value": 10 - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Min("min_price") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Value == nil { - t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) - } - if *agg.Value != float64(10) { - t.Fatalf("expected aggregation value = %v; got: %v", float64(10), *agg.Value) - } -} - -func TestAggsMax(t *testing.T) { - s := `{ - "max_price": { - "value": 35 - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Max("max_price") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Value == nil { - t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) - } - if *agg.Value != float64(35) { - t.Fatalf("expected aggregation value = %v; got: %v", float64(35), *agg.Value) - } -} - -func TestAggsSum(t *testing.T) { - s := `{ - "intraday_return": { - "value": 2.18 - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Sum("intraday_return") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Value == nil { - t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) - } - if *agg.Value != float64(2.18) { - t.Fatalf("expected aggregation value = %v; got: %v", float64(2.18), *agg.Value) - } -} - -func TestAggsAvg(t *testing.T) { - s := `{ - "avg_grade": { - "value": 75 - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Avg("avg_grade") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Value == nil { - t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) - } - if *agg.Value != float64(75) { - t.Fatalf("expected aggregation value = %v; got: %v", float64(75), *agg.Value) - } -} - -func TestAggsValueCount(t *testing.T) { - s := `{ - "grades_count": { - "value": 10 - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.ValueCount("grades_count") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Value == nil { - t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) - } - if *agg.Value != float64(10) { - t.Fatalf("expected aggregation value = %v; got: %v", float64(10), *agg.Value) - } -} - -func TestAggsCardinality(t *testing.T) { - s := `{ - "author_count": { - "value": 12 - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Cardinality("author_count") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Value == nil { - t.Fatalf("expected aggregation value != nil; got: %v", agg.Value) - } - if *agg.Value != float64(12) { - t.Fatalf("expected aggregation value = %v; got: %v", float64(12), *agg.Value) - } -} - -func TestAggsStats(t *testing.T) { - s := `{ - "grades_stats": { - "count": 6, - "min": 60, - "max": 98, - "avg": 78.5, - "sum": 471 - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Stats("grades_stats") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Count != int64(6) { - t.Fatalf("expected aggregation Count = %v; got: %v", int64(6), agg.Count) - } - if agg.Min == nil { - t.Fatalf("expected aggregation Min != nil; got: %v", agg.Min) - } - if *agg.Min != float64(60) { - t.Fatalf("expected aggregation Min = %v; got: %v", float64(60), *agg.Min) - } - if agg.Max == nil { - t.Fatalf("expected aggregation Max != nil; got: %v", agg.Max) - } - if *agg.Max != float64(98) { - t.Fatalf("expected aggregation Max = %v; got: %v", float64(98), *agg.Max) - } - if agg.Avg == nil { - t.Fatalf("expected aggregation Avg != nil; got: %v", agg.Avg) - } - if *agg.Avg != float64(78.5) { - t.Fatalf("expected aggregation Avg = %v; got: %v", float64(78.5), *agg.Avg) - } - if agg.Sum == nil { - t.Fatalf("expected aggregation Sum != nil; got: %v", agg.Sum) - } - if *agg.Sum != float64(471) { - t.Fatalf("expected aggregation Sum = %v; got: %v", float64(471), *agg.Sum) - } -} - -func TestAggsExtendedStats(t *testing.T) { - s := `{ - "grades_stats": { - "count": 6, - "min": 72, - "max": 117.6, - "avg": 94.2, - "sum": 565.2, - "sum_of_squares": 54551.51999999999, - "variance": 218.2799999999976, - "std_deviation": 14.774302013969987 - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.ExtendedStats("grades_stats") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Count != int64(6) { - t.Fatalf("expected aggregation Count = %v; got: %v", int64(6), agg.Count) - } - if agg.Min == nil { - t.Fatalf("expected aggregation Min != nil; got: %v", agg.Min) - } - if *agg.Min != float64(72) { - t.Fatalf("expected aggregation Min = %v; got: %v", float64(72), *agg.Min) - } - if agg.Max == nil { - t.Fatalf("expected aggregation Max != nil; got: %v", agg.Max) - } - if *agg.Max != float64(117.6) { - t.Fatalf("expected aggregation Max = %v; got: %v", float64(117.6), *agg.Max) - } - if agg.Avg == nil { - t.Fatalf("expected aggregation Avg != nil; got: %v", agg.Avg) - } - if *agg.Avg != float64(94.2) { - t.Fatalf("expected aggregation Avg = %v; got: %v", float64(94.2), *agg.Avg) - } - if agg.Sum == nil { - t.Fatalf("expected aggregation Sum != nil; got: %v", agg.Sum) - } - if *agg.Sum != float64(565.2) { - t.Fatalf("expected aggregation Sum = %v; got: %v", float64(565.2), *agg.Sum) - } - if agg.SumOfSquares == nil { - t.Fatalf("expected aggregation sum_of_squares != nil; got: %v", agg.SumOfSquares) - } - if *agg.SumOfSquares != float64(54551.51999999999) { - t.Fatalf("expected aggregation sum_of_squares = %v; got: %v", float64(54551.51999999999), *agg.SumOfSquares) - } - if agg.Variance == nil { - t.Fatalf("expected aggregation Variance != nil; got: %v", agg.Variance) - } - if *agg.Variance != float64(218.2799999999976) { - t.Fatalf("expected aggregation Variance = %v; got: %v", float64(218.2799999999976), *agg.Variance) - } - if agg.StdDeviation == nil { - t.Fatalf("expected aggregation StdDeviation != nil; got: %v", agg.StdDeviation) - } - if *agg.StdDeviation != float64(14.774302013969987) { - t.Fatalf("expected aggregation StdDeviation = %v; got: %v", float64(14.774302013969987), *agg.StdDeviation) - } -} - -func TestAggsPercentiles(t *testing.T) { - s := `{ - "load_time_outlier": { - "values" : { - "1.0": 15, - "5.0": 20, - "25.0": 23, - "50.0": 25, - "75.0": 29, - "95.0": 60, - "99.0": 150 - } - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Percentiles("load_time_outlier") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Values == nil { - t.Fatalf("expected aggregation Values != nil; got: %v", agg.Values) - } - if len(agg.Values) != 7 { - t.Fatalf("expected %d aggregation Values; got: %d", 7, len(agg.Values)) - } - if agg.Values["1.0"] != float64(15) { - t.Errorf("expected aggregation value for \"1.0\" = %v; got: %v", float64(15), agg.Values["1.0"]) - } - if agg.Values["5.0"] != float64(20) { - t.Errorf("expected aggregation value for \"5.0\" = %v; got: %v", float64(20), agg.Values["5.0"]) - } - if agg.Values["25.0"] != float64(23) { - t.Errorf("expected aggregation value for \"25.0\" = %v; got: %v", float64(23), agg.Values["25.0"]) - } - if agg.Values["50.0"] != float64(25) { - t.Errorf("expected aggregation value for \"50.0\" = %v; got: %v", float64(25), agg.Values["50.0"]) - } - if agg.Values["75.0"] != float64(29) { - t.Errorf("expected aggregation value for \"75.0\" = %v; got: %v", float64(29), agg.Values["75.0"]) - } - if agg.Values["95.0"] != float64(60) { - t.Errorf("expected aggregation value for \"95.0\" = %v; got: %v", float64(60), agg.Values["95.0"]) - } - if agg.Values["99.0"] != float64(150) { - t.Errorf("expected aggregation value for \"99.0\" = %v; got: %v", float64(150), agg.Values["99.0"]) - } -} - -func TestAggsPercentilRanks(t *testing.T) { - s := `{ - "load_time_outlier": { - "values" : { - "15": 92, - "30": 100 - } - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.PercentileRanks("load_time_outlier") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Values == nil { - t.Fatalf("expected aggregation Values != nil; got: %v", agg.Values) - } - if len(agg.Values) != 2 { - t.Fatalf("expected %d aggregation Values; got: %d", 7, len(agg.Values)) - } - if agg.Values["15"] != float64(92) { - t.Errorf("expected aggregation value for \"15\" = %v; got: %v", float64(92), agg.Values["15"]) - } - if agg.Values["30"] != float64(100) { - t.Errorf("expected aggregation value for \"30\" = %v; got: %v", float64(100), agg.Values["30"]) - } -} - -func TestAggsTopHits(t *testing.T) { - s := `{ - "top-tags": { - "buckets": [ - { - "key": "windows-7", - "doc_count": 25365, - "top_tags_hits": { - "hits": { - "total": 25365, - "max_score": 1, - "hits": [ - { - "_index": "stack", - "_type": "question", - "_id": "602679", - "_score": 1, - "_source": { - "title": "Windows port opening" - }, - "sort": [ - 1370143231177 - ] - } - ] - } - } - }, - { - "key": "linux", - "doc_count": 18342, - "top_tags_hits": { - "hits": { - "total": 18342, - "max_score": 1, - "hits": [ - { - "_index": "stack", - "_type": "question", - "_id": "602672", - "_score": 1, - "_source": { - "title": "Ubuntu RFID Screensaver lock-unlock" - }, - "sort": [ - 1370143379747 - ] - } - ] - } - } - }, - { - "key": "windows", - "doc_count": 18119, - "top_tags_hits": { - "hits": { - "total": 18119, - "max_score": 1, - "hits": [ - { - "_index": "stack", - "_type": "question", - "_id": "602678", - "_score": 1, - "_source": { - "title": "If I change my computers date / time, what could be affected?" - }, - "sort": [ - 1370142868283 - ] - } - ] - } - } - } - ] - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Terms("top-tags") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Buckets == nil { - t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) - } - if len(agg.Buckets) != 3 { - t.Errorf("expected %d bucket entries; got: %d", 3, len(agg.Buckets)) - } - if agg.Buckets[0].Key != "windows-7" { - t.Errorf("expected bucket key = %q; got: %q", "windows-7", agg.Buckets[0].Key) - } - if agg.Buckets[1].Key != "linux" { - t.Errorf("expected bucket key = %q; got: %q", "linux", agg.Buckets[1].Key) - } - if agg.Buckets[2].Key != "windows" { - t.Errorf("expected bucket key = %q; got: %q", "windows", agg.Buckets[2].Key) - } - - // Sub-aggregation of top-hits - subAgg, found := agg.Buckets[0].TopHits("top_tags_hits") - if !found { - t.Fatalf("expected sub aggregation to be found; got: %v", found) - } - if subAgg == nil { - t.Fatalf("expected sub aggregation != nil; got: %v", subAgg) - } - if subAgg.Hits == nil { - t.Fatalf("expected sub aggregation Hits != nil; got: %v", subAgg.Hits) - } - if subAgg.Hits.TotalHits != 25365 { - t.Fatalf("expected sub aggregation Hits.TotalHits = %d; got: %d", 25365, subAgg.Hits.TotalHits) - } - if subAgg.Hits.MaxScore == nil { - t.Fatalf("expected sub aggregation Hits.MaxScore != %v; got: %v", nil, *subAgg.Hits.MaxScore) - } - if *subAgg.Hits.MaxScore != float64(1.0) { - t.Fatalf("expected sub aggregation Hits.MaxScore = %v; got: %v", float64(1.0), *subAgg.Hits.MaxScore) - } - - subAgg, found = agg.Buckets[1].TopHits("top_tags_hits") - if !found { - t.Fatalf("expected sub aggregation to be found; got: %v", found) - } - if subAgg == nil { - t.Fatalf("expected sub aggregation != nil; got: %v", subAgg) - } - if subAgg.Hits == nil { - t.Fatalf("expected sub aggregation Hits != nil; got: %v", subAgg.Hits) - } - if subAgg.Hits.TotalHits != 18342 { - t.Fatalf("expected sub aggregation Hits.TotalHits = %d; got: %d", 18342, subAgg.Hits.TotalHits) - } - if subAgg.Hits.MaxScore == nil { - t.Fatalf("expected sub aggregation Hits.MaxScore != %v; got: %v", nil, *subAgg.Hits.MaxScore) - } - if *subAgg.Hits.MaxScore != float64(1.0) { - t.Fatalf("expected sub aggregation Hits.MaxScore = %v; got: %v", float64(1.0), *subAgg.Hits.MaxScore) - } - - subAgg, found = agg.Buckets[2].TopHits("top_tags_hits") - if !found { - t.Fatalf("expected sub aggregation to be found; got: %v", found) - } - if subAgg == nil { - t.Fatalf("expected sub aggregation != nil; got: %v", subAgg) - } - if subAgg.Hits == nil { - t.Fatalf("expected sub aggregation Hits != nil; got: %v", subAgg.Hits) - } - if subAgg.Hits.TotalHits != 18119 { - t.Fatalf("expected sub aggregation Hits.TotalHits = %d; got: %d", 18119, subAgg.Hits.TotalHits) - } - if subAgg.Hits.MaxScore == nil { - t.Fatalf("expected sub aggregation Hits.MaxScore != %v; got: %v", nil, *subAgg.Hits.MaxScore) - } - if *subAgg.Hits.MaxScore != float64(1.0) { - t.Fatalf("expected sub aggregation Hits.MaxScore = %v; got: %v", float64(1.0), *subAgg.Hits.MaxScore) - } -} - -func TestAggsGlobal(t *testing.T) { - s := `{ - "all_products" : { - "doc_count" : 100, - "avg_price" : { - "value" : 56.3 - } - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Global("all_products") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.DocCount != 100 { - t.Fatalf("expected aggregation DocCount = %d; got: %d", 100, agg.DocCount) - } - - // Sub-aggregation - subAgg, found := agg.Avg("avg_price") - if !found { - t.Fatalf("expected sub-aggregation to be found; got: %v", found) - } - if subAgg == nil { - t.Fatalf("expected sub-aggregation != nil; got: %v", subAgg) - } - if subAgg.Value == nil { - t.Fatalf("expected sub-aggregation value != nil; got: %v", subAgg.Value) - } - if *subAgg.Value != float64(56.3) { - t.Fatalf("expected sub-aggregation value = %v; got: %v", float64(56.3), *subAgg.Value) - } -} - -func TestAggsFilter(t *testing.T) { - s := `{ - "in_stock_products" : { - "doc_count" : 100, - "avg_price" : { "value" : 56.3 } - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Filter("in_stock_products") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.DocCount != 100 { - t.Fatalf("expected aggregation DocCount = %d; got: %d", 100, agg.DocCount) - } - - // Sub-aggregation - subAgg, found := agg.Avg("avg_price") - if !found { - t.Fatalf("expected sub-aggregation to be found; got: %v", found) - } - if subAgg == nil { - t.Fatalf("expected sub-aggregation != nil; got: %v", subAgg) - } - if subAgg.Value == nil { - t.Fatalf("expected sub-aggregation value != nil; got: %v", subAgg.Value) - } - if *subAgg.Value != float64(56.3) { - t.Fatalf("expected sub-aggregation value = %v; got: %v", float64(56.3), *subAgg.Value) - } -} - -func TestAggsFiltersWithBuckets(t *testing.T) { - s := `{ - "messages" : { - "buckets" : [ - { - "doc_count" : 34, - "monthly" : { - "buckets" : [] - } - }, - { - "doc_count" : 439, - "monthly" : { - "buckets" : [] - } - } - ] - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Filters("messages") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Buckets == nil { - t.Fatalf("expected aggregation buckets != %v; got: %v", nil, agg.Buckets) - } - if len(agg.Buckets) != 2 { - t.Fatalf("expected %d buckets; got: %d", 2, len(agg.Buckets)) - } - - if agg.Buckets[0].DocCount != 34 { - t.Fatalf("expected DocCount = %d; got: %d", 34, agg.Buckets[0].DocCount) - } - subAgg, found := agg.Buckets[0].Histogram("monthly") - if !found { - t.Fatalf("expected sub aggregation to be found; got: %v", found) - } - if subAgg == nil { - t.Fatalf("expected sub aggregation != %v; got: %v", nil, subAgg) - } - - if agg.Buckets[1].DocCount != 439 { - t.Fatalf("expected DocCount = %d; got: %d", 439, agg.Buckets[1].DocCount) - } - subAgg, found = agg.Buckets[1].Histogram("monthly") - if !found { - t.Fatalf("expected sub aggregation to be found; got: %v", found) - } - if subAgg == nil { - t.Fatalf("expected sub aggregation != %v; got: %v", nil, subAgg) - } -} - -func TestAggsFiltersWithNamedBuckets(t *testing.T) { - s := `{ - "messages" : { - "buckets" : { - "errors" : { - "doc_count" : 34, - "monthly" : { - "buckets" : [] - } - }, - "warnings" : { - "doc_count" : 439, - "monthly" : { - "buckets" : [] - } - } - } - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Filters("messages") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.NamedBuckets == nil { - t.Fatalf("expected aggregation buckets != %v; got: %v", nil, agg.NamedBuckets) - } - if len(agg.NamedBuckets) != 2 { - t.Fatalf("expected %d buckets; got: %d", 2, len(agg.NamedBuckets)) - } - - if agg.NamedBuckets["errors"].DocCount != 34 { - t.Fatalf("expected DocCount = %d; got: %d", 34, agg.NamedBuckets["errors"].DocCount) - } - subAgg, found := agg.NamedBuckets["errors"].Histogram("monthly") - if !found { - t.Fatalf("expected sub aggregation to be found; got: %v", found) - } - if subAgg == nil { - t.Fatalf("expected sub aggregation != %v; got: %v", nil, subAgg) - } - - if agg.NamedBuckets["warnings"].DocCount != 439 { - t.Fatalf("expected DocCount = %d; got: %d", 439, agg.NamedBuckets["warnings"].DocCount) - } - subAgg, found = agg.NamedBuckets["warnings"].Histogram("monthly") - if !found { - t.Fatalf("expected sub aggregation to be found; got: %v", found) - } - if subAgg == nil { - t.Fatalf("expected sub aggregation != %v; got: %v", nil, subAgg) - } -} - -func TestAggsMissing(t *testing.T) { - s := `{ - "products_without_a_price" : { - "doc_count" : 10 - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Missing("products_without_a_price") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.DocCount != 10 { - t.Fatalf("expected aggregation DocCount = %d; got: %d", 10, agg.DocCount) - } -} - -func TestAggsNested(t *testing.T) { - s := `{ - "resellers": { - "min_price": { - "value" : 350 - } - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Nested("resellers") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.DocCount != 0 { - t.Fatalf("expected aggregation DocCount = %d; got: %d", 0, agg.DocCount) - } - - // Sub-aggregation - subAgg, found := agg.Avg("min_price") - if !found { - t.Fatalf("expected sub-aggregation to be found; got: %v", found) - } - if subAgg == nil { - t.Fatalf("expected sub-aggregation != nil; got: %v", subAgg) - } - if subAgg.Value == nil { - t.Fatalf("expected sub-aggregation value != nil; got: %v", subAgg.Value) - } - if *subAgg.Value != float64(350) { - t.Fatalf("expected sub-aggregation value = %v; got: %v", float64(350), *subAgg.Value) - } -} - -func TestAggsReverseNested(t *testing.T) { - s := `{ - "comment_to_issue": { - "doc_count" : 10 - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.ReverseNested("comment_to_issue") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.DocCount != 10 { - t.Fatalf("expected aggregation DocCount = %d; got: %d", 10, agg.DocCount) - } -} - -func TestAggsChildren(t *testing.T) { - s := `{ - "to-answers": { - "doc_count" : 10 - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Children("to-answers") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.DocCount != 10 { - t.Fatalf("expected aggregation DocCount = %d; got: %d", 10, agg.DocCount) - } -} - -func TestAggsTerms(t *testing.T) { - s := `{ - "users" : { - "doc_count_error_upper_bound" : 1, - "sum_other_doc_count" : 2, - "buckets" : [ { - "key" : "olivere", - "doc_count" : 2 - }, { - "key" : "sandrae", - "doc_count" : 1 - } ] - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Terms("users") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Buckets == nil { - t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) - } - if len(agg.Buckets) != 2 { - t.Errorf("expected %d bucket entries; got: %d", 2, len(agg.Buckets)) - } - if agg.Buckets[0].Key != "olivere" { - t.Errorf("expected key %q; got: %q", "olivere", agg.Buckets[0].Key) - } - if agg.Buckets[0].DocCount != 2 { - t.Errorf("expected doc count %d; got: %d", 2, agg.Buckets[0].DocCount) - } - if agg.Buckets[1].Key != "sandrae" { - t.Errorf("expected key %q; got: %q", "sandrae", agg.Buckets[1].Key) - } - if agg.Buckets[1].DocCount != 1 { - t.Errorf("expected doc count %d; got: %d", 1, agg.Buckets[1].DocCount) - } -} - -func TestAggsTermsWithNumericKeys(t *testing.T) { - s := `{ - "users" : { - "doc_count_error_upper_bound" : 1, - "sum_other_doc_count" : 2, - "buckets" : [ { - "key" : 17, - "doc_count" : 2 - }, { - "key" : 21, - "doc_count" : 1 - } ] - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Terms("users") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Buckets == nil { - t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) - } - if len(agg.Buckets) != 2 { - t.Errorf("expected %d bucket entries; got: %d", 2, len(agg.Buckets)) - } - if agg.Buckets[0].Key != float64(17) { - t.Errorf("expected key %v; got: %v", 17, agg.Buckets[0].Key) - } - if got, err := agg.Buckets[0].KeyNumber.Int64(); err != nil { - t.Errorf("expected to convert key to int64; got: %v", err) - } else if got != 17 { - t.Errorf("expected key %v; got: %v", 17, agg.Buckets[0].Key) - } - if agg.Buckets[0].DocCount != 2 { - t.Errorf("expected doc count %d; got: %d", 2, agg.Buckets[0].DocCount) - } - if agg.Buckets[1].Key != float64(21) { - t.Errorf("expected key %v; got: %v", 21, agg.Buckets[1].Key) - } - if got, err := agg.Buckets[1].KeyNumber.Int64(); err != nil { - t.Errorf("expected to convert key to int64; got: %v", err) - } else if got != 21 { - t.Errorf("expected key %v; got: %v", 21, agg.Buckets[1].Key) - } - if agg.Buckets[1].DocCount != 1 { - t.Errorf("expected doc count %d; got: %d", 1, agg.Buckets[1].DocCount) - } -} - -func TestAggsTermsWithBoolKeys(t *testing.T) { - s := `{ - "users" : { - "doc_count_error_upper_bound" : 1, - "sum_other_doc_count" : 2, - "buckets" : [ { - "key" : true, - "doc_count" : 2 - }, { - "key" : false, - "doc_count" : 1 - } ] - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Terms("users") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Buckets == nil { - t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) - } - if len(agg.Buckets) != 2 { - t.Errorf("expected %d bucket entries; got: %d", 2, len(agg.Buckets)) - } - if agg.Buckets[0].Key != true { - t.Errorf("expected key %v; got: %v", true, agg.Buckets[0].Key) - } - if agg.Buckets[0].DocCount != 2 { - t.Errorf("expected doc count %d; got: %d", 2, agg.Buckets[0].DocCount) - } - if agg.Buckets[1].Key != false { - t.Errorf("expected key %v; got: %v", false, agg.Buckets[1].Key) - } - if agg.Buckets[1].DocCount != 1 { - t.Errorf("expected doc count %d; got: %d", 1, agg.Buckets[1].DocCount) - } -} - -func TestAggsSignificantTerms(t *testing.T) { - s := `{ - "significantCrimeTypes" : { - "doc_count": 47347, - "buckets" : [ - { - "key": "Bicycle theft", - "doc_count": 3640, - "score": 0.371235374214817, - "bg_count": 66799 - } - ] - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.SignificantTerms("significantCrimeTypes") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.DocCount != 47347 { - t.Fatalf("expected aggregation DocCount != %d; got: %d", 47347, agg.DocCount) - } - if agg.Buckets == nil { - t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) - } - if len(agg.Buckets) != 1 { - t.Errorf("expected %d bucket entries; got: %d", 1, len(agg.Buckets)) - } - if agg.Buckets[0].Key != "Bicycle theft" { - t.Errorf("expected key = %q; got: %q", "Bicycle theft", agg.Buckets[0].Key) - } - if agg.Buckets[0].DocCount != 3640 { - t.Errorf("expected doc count = %d; got: %d", 3640, agg.Buckets[0].DocCount) - } - if agg.Buckets[0].Score != float64(0.371235374214817) { - t.Errorf("expected score = %v; got: %v", float64(0.371235374214817), agg.Buckets[0].Score) - } - if agg.Buckets[0].BgCount != 66799 { - t.Errorf("expected BgCount = %d; got: %d", 66799, agg.Buckets[0].BgCount) - } -} - -func TestAggsRange(t *testing.T) { - s := `{ - "price_ranges" : { - "buckets": [ - { - "to": 50, - "doc_count": 2 - }, - { - "from": 50, - "to": 100, - "doc_count": 4 - }, - { - "from": 100, - "doc_count": 4 - } - ] - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Range("price_ranges") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Buckets == nil { - t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) - } - if len(agg.Buckets) != 3 { - t.Errorf("expected %d bucket entries; got: %d", 3, len(agg.Buckets)) - } - if agg.Buckets[0].From != nil { - t.Errorf("expected From = %v; got: %v", nil, agg.Buckets[0].From) - } - if agg.Buckets[0].To == nil { - t.Errorf("expected To != %v; got: %v", nil, agg.Buckets[0].To) - } - if *agg.Buckets[0].To != float64(50) { - t.Errorf("expected To = %v; got: %v", float64(50), *agg.Buckets[0].To) - } - if agg.Buckets[0].DocCount != 2 { - t.Errorf("expected DocCount = %d; got: %d", 2, agg.Buckets[0].DocCount) - } - if agg.Buckets[1].From == nil { - t.Errorf("expected From != %v; got: %v", nil, agg.Buckets[1].From) - } - if *agg.Buckets[1].From != float64(50) { - t.Errorf("expected From = %v; got: %v", float64(50), *agg.Buckets[1].From) - } - if agg.Buckets[1].To == nil { - t.Errorf("expected To != %v; got: %v", nil, agg.Buckets[1].To) - } - if *agg.Buckets[1].To != float64(100) { - t.Errorf("expected To = %v; got: %v", float64(100), *agg.Buckets[1].To) - } - if agg.Buckets[1].DocCount != 4 { - t.Errorf("expected DocCount = %d; got: %d", 4, agg.Buckets[1].DocCount) - } - if agg.Buckets[2].From == nil { - t.Errorf("expected From != %v; got: %v", nil, agg.Buckets[2].From) - } - if *agg.Buckets[2].From != float64(100) { - t.Errorf("expected From = %v; got: %v", float64(100), *agg.Buckets[2].From) - } - if agg.Buckets[2].To != nil { - t.Errorf("expected To = %v; got: %v", nil, agg.Buckets[2].To) - } - if agg.Buckets[2].DocCount != 4 { - t.Errorf("expected DocCount = %d; got: %d", 4, agg.Buckets[2].DocCount) - } -} - -func TestAggsDateRange(t *testing.T) { - s := `{ - "range": { - "buckets": [ - { - "to": 1.3437792E+12, - "to_as_string": "08-2012", - "doc_count": 7 - }, - { - "from": 1.3437792E+12, - "from_as_string": "08-2012", - "doc_count": 2 - } - ] - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.DateRange("range") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Buckets == nil { - t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) - } - if len(agg.Buckets) != 2 { - t.Errorf("expected %d bucket entries; got: %d", 2, len(agg.Buckets)) - } - if agg.Buckets[0].From != nil { - t.Errorf("expected From = %v; got: %v", nil, agg.Buckets[0].From) - } - if agg.Buckets[0].To == nil { - t.Errorf("expected To != %v; got: %v", nil, agg.Buckets[0].To) - } - if *agg.Buckets[0].To != float64(1.3437792E+12) { - t.Errorf("expected To = %v; got: %v", float64(1.3437792E+12), *agg.Buckets[0].To) - } - if agg.Buckets[0].ToAsString != "08-2012" { - t.Errorf("expected ToAsString = %q; got: %q", "08-2012", agg.Buckets[0].ToAsString) - } - if agg.Buckets[0].DocCount != 7 { - t.Errorf("expected DocCount = %d; got: %d", 7, agg.Buckets[0].DocCount) - } - if agg.Buckets[1].From == nil { - t.Errorf("expected From != %v; got: %v", nil, agg.Buckets[1].From) - } - if *agg.Buckets[1].From != float64(1.3437792E+12) { - t.Errorf("expected From = %v; got: %v", float64(1.3437792E+12), *agg.Buckets[1].From) - } - if agg.Buckets[1].FromAsString != "08-2012" { - t.Errorf("expected FromAsString = %q; got: %q", "08-2012", agg.Buckets[1].FromAsString) - } - if agg.Buckets[1].To != nil { - t.Errorf("expected To = %v; got: %v", nil, agg.Buckets[1].To) - } - if agg.Buckets[1].DocCount != 2 { - t.Errorf("expected DocCount = %d; got: %d", 2, agg.Buckets[1].DocCount) - } -} - -func TestAggsIPv4Range(t *testing.T) { - s := `{ - "ip_ranges": { - "buckets" : [ - { - "to": 167772165, - "to_as_string": "10.0.0.5", - "doc_count": 4 - }, - { - "from": 167772165, - "from_as_string": "10.0.0.5", - "doc_count": 6 - } - ] - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.IPv4Range("ip_ranges") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Buckets == nil { - t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) - } - if len(agg.Buckets) != 2 { - t.Errorf("expected %d bucket entries; got: %d", 2, len(agg.Buckets)) - } - if agg.Buckets[0].From != nil { - t.Errorf("expected From = %v; got: %v", nil, agg.Buckets[0].From) - } - if agg.Buckets[0].To == nil { - t.Errorf("expected To != %v; got: %v", nil, agg.Buckets[0].To) - } - if *agg.Buckets[0].To != float64(167772165) { - t.Errorf("expected To = %v; got: %v", float64(167772165), *agg.Buckets[0].To) - } - if agg.Buckets[0].ToAsString != "10.0.0.5" { - t.Errorf("expected ToAsString = %q; got: %q", "10.0.0.5", agg.Buckets[0].ToAsString) - } - if agg.Buckets[0].DocCount != 4 { - t.Errorf("expected DocCount = %d; got: %d", 4, agg.Buckets[0].DocCount) - } - if agg.Buckets[1].From == nil { - t.Errorf("expected From != %v; got: %v", nil, agg.Buckets[1].From) - } - if *agg.Buckets[1].From != float64(167772165) { - t.Errorf("expected From = %v; got: %v", float64(167772165), *agg.Buckets[1].From) - } - if agg.Buckets[1].FromAsString != "10.0.0.5" { - t.Errorf("expected FromAsString = %q; got: %q", "10.0.0.5", agg.Buckets[1].FromAsString) - } - if agg.Buckets[1].To != nil { - t.Errorf("expected To = %v; got: %v", nil, agg.Buckets[1].To) - } - if agg.Buckets[1].DocCount != 6 { - t.Errorf("expected DocCount = %d; got: %d", 6, agg.Buckets[1].DocCount) - } -} - -func TestAggsHistogram(t *testing.T) { - s := `{ - "prices" : { - "buckets": [ - { - "key": 0, - "doc_count": 2 - }, - { - "key": 50, - "doc_count": 4 - }, - { - "key": 150, - "doc_count": 3 - } - ] - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.Histogram("prices") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Buckets == nil { - t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) - } - if len(agg.Buckets) != 3 { - t.Errorf("expected %d buckets; got: %d", 3, len(agg.Buckets)) - } - if agg.Buckets[0].Key != 0 { - t.Errorf("expected key = %v; got: %v", 0, agg.Buckets[0].Key) - } - if agg.Buckets[0].KeyAsString != nil { - t.Fatalf("expected key_as_string = %v; got: %q", nil, *agg.Buckets[0].KeyAsString) - } - if agg.Buckets[0].DocCount != 2 { - t.Errorf("expected doc count = %d; got: %d", 2, agg.Buckets[0].DocCount) - } - if agg.Buckets[1].Key != 50 { - t.Errorf("expected key = %v; got: %v", 50, agg.Buckets[1].Key) - } - if agg.Buckets[1].KeyAsString != nil { - t.Fatalf("expected key_as_string = %v; got: %q", nil, *agg.Buckets[1].KeyAsString) - } - if agg.Buckets[1].DocCount != 4 { - t.Errorf("expected doc count = %d; got: %d", 4, agg.Buckets[1].DocCount) - } - if agg.Buckets[2].Key != 150 { - t.Errorf("expected key = %v; got: %v", 150, agg.Buckets[2].Key) - } - if agg.Buckets[2].KeyAsString != nil { - t.Fatalf("expected key_as_string = %v; got: %q", nil, *agg.Buckets[2].KeyAsString) - } - if agg.Buckets[2].DocCount != 3 { - t.Errorf("expected doc count = %d; got: %d", 3, agg.Buckets[2].DocCount) - } -} - -func TestAggsDateHistogram(t *testing.T) { - s := `{ - "articles_over_time": { - "buckets": [ - { - "key_as_string": "2013-02-02", - "key": 1328140800000, - "doc_count": 1 - }, - { - "key_as_string": "2013-03-02", - "key": 1330646400000, - "doc_count": 2 - } - ] - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.DateHistogram("articles_over_time") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Buckets == nil { - t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) - } - if len(agg.Buckets) != 2 { - t.Errorf("expected %d bucket entries; got: %d", 2, len(agg.Buckets)) - } - if agg.Buckets[0].Key != 1328140800000 { - t.Errorf("expected key %v; got: %v", 1328140800000, agg.Buckets[0].Key) - } - if agg.Buckets[0].KeyAsString == nil { - t.Fatalf("expected key_as_string != nil; got: %v", agg.Buckets[0].KeyAsString) - } - if *agg.Buckets[0].KeyAsString != "2013-02-02" { - t.Errorf("expected key_as_string %q; got: %q", "2013-02-02", *agg.Buckets[0].KeyAsString) - } - if agg.Buckets[0].DocCount != 1 { - t.Errorf("expected doc count %d; got: %d", 1, agg.Buckets[0].DocCount) - } - if agg.Buckets[1].Key != 1330646400000 { - t.Errorf("expected key %v; got: %v", 1330646400000, agg.Buckets[1].Key) - } - if agg.Buckets[1].KeyAsString == nil { - t.Fatalf("expected key_as_string != nil; got: %v", agg.Buckets[1].KeyAsString) - } - if *agg.Buckets[1].KeyAsString != "2013-03-02" { - t.Errorf("expected key_as_string %q; got: %q", "2013-03-02", *agg.Buckets[1].KeyAsString) - } - if agg.Buckets[1].DocCount != 2 { - t.Errorf("expected doc count %d; got: %d", 2, agg.Buckets[1].DocCount) - } -} - -func TestAggsGeoBounds(t *testing.T) { - s := `{ - "viewport": { - "bounds": { - "top_left": { - "lat": 80.45, - "lon": -160.22 - }, - "bottom_right": { - "lat": 40.65, - "lon": 42.57 - } - } - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.GeoBounds("viewport") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Bounds.TopLeft.Latitude != float64(80.45) { - t.Fatalf("expected Bounds.TopLeft.Latitude != %v; got: %v", float64(80.45), agg.Bounds.TopLeft.Latitude) - } - if agg.Bounds.TopLeft.Longitude != float64(-160.22) { - t.Fatalf("expected Bounds.TopLeft.Longitude != %v; got: %v", float64(-160.22), agg.Bounds.TopLeft.Longitude) - } - if agg.Bounds.BottomRight.Latitude != float64(40.65) { - t.Fatalf("expected Bounds.BottomRight.Latitude != %v; got: %v", float64(40.65), agg.Bounds.BottomRight.Latitude) - } - if agg.Bounds.BottomRight.Longitude != float64(42.57) { - t.Fatalf("expected Bounds.BottomRight.Longitude != %v; got: %v", float64(42.57), agg.Bounds.BottomRight.Longitude) - } -} - -func TestAggsGeoHash(t *testing.T) { - s := `{ - "myLarge-GrainGeoHashGrid": { - "buckets": [ - { - "key": "svz", - "doc_count": 10964 - }, - { - "key": "sv8", - "doc_count": 3198 - } - ] - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.GeoHash("myLarge-GrainGeoHashGrid") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Buckets == nil { - t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) - } - if len(agg.Buckets) != 2 { - t.Errorf("expected %d bucket entries; got: %d", 2, len(agg.Buckets)) - } - if agg.Buckets[0].Key != "svz" { - t.Errorf("expected key %q; got: %q", "svz", agg.Buckets[0].Key) - } - if agg.Buckets[0].DocCount != 10964 { - t.Errorf("expected doc count %d; got: %d", 10964, agg.Buckets[0].DocCount) - } - if agg.Buckets[1].Key != "sv8" { - t.Errorf("expected key %q; got: %q", "sv8", agg.Buckets[1].Key) - } - if agg.Buckets[1].DocCount != 3198 { - t.Errorf("expected doc count %d; got: %d", 3198, agg.Buckets[1].DocCount) - } -} - -func TestAggsGeoDistance(t *testing.T) { - s := `{ - "rings" : { - "buckets": [ - { - "unit": "km", - "to": 100.0, - "doc_count": 3 - }, - { - "unit": "km", - "from": 100.0, - "to": 300.0, - "doc_count": 1 - }, - { - "unit": "km", - "from": 300.0, - "doc_count": 7 - } - ] - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(s), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - agg, found := aggs.GeoDistance("rings") - if !found { - t.Fatalf("expected aggregation to be found; got: %v", found) - } - if agg == nil { - t.Fatalf("expected aggregation != nil; got: %v", agg) - } - if agg.Buckets == nil { - t.Fatalf("expected aggregation buckets != nil; got: %v", agg.Buckets) - } - if len(agg.Buckets) != 3 { - t.Errorf("expected %d bucket entries; got: %d", 3, len(agg.Buckets)) - } - if agg.Buckets[0].From != nil { - t.Errorf("expected From = %v; got: %v", nil, agg.Buckets[0].From) - } - if agg.Buckets[0].To == nil { - t.Errorf("expected To != %v; got: %v", nil, agg.Buckets[0].To) - } - if *agg.Buckets[0].To != float64(100.0) { - t.Errorf("expected To = %v; got: %v", float64(100.0), *agg.Buckets[0].To) - } - if agg.Buckets[0].DocCount != 3 { - t.Errorf("expected DocCount = %d; got: %d", 4, agg.Buckets[0].DocCount) - } - - if agg.Buckets[1].From == nil { - t.Errorf("expected From != %v; got: %v", nil, agg.Buckets[1].From) - } - if *agg.Buckets[1].From != float64(100.0) { - t.Errorf("expected From = %v; got: %v", float64(100.0), *agg.Buckets[1].From) - } - if agg.Buckets[1].To == nil { - t.Errorf("expected To != %v; got: %v", nil, agg.Buckets[1].To) - } - if *agg.Buckets[1].To != float64(300.0) { - t.Errorf("expected From = %v; got: %v", float64(300.0), *agg.Buckets[1].To) - } - if agg.Buckets[1].DocCount != 1 { - t.Errorf("expected DocCount = %d; got: %d", 1, agg.Buckets[1].DocCount) - } - - if agg.Buckets[2].From == nil { - t.Errorf("expected From != %v; got: %v", nil, agg.Buckets[2].From) - } - if *agg.Buckets[2].From != float64(300.0) { - t.Errorf("expected From = %v; got: %v", float64(300.0), *agg.Buckets[2].From) - } - if agg.Buckets[2].To != nil { - t.Errorf("expected To = %v; got: %v", nil, agg.Buckets[2].To) - } - if agg.Buckets[2].DocCount != 7 { - t.Errorf("expected DocCount = %d; got: %d", 7, agg.Buckets[2].DocCount) - } -} - -func TestAggsSubAggregates(t *testing.T) { - rs := `{ - "users" : { - "doc_count_error_upper_bound" : 1, - "sum_other_doc_count" : 2, - "buckets" : [ { - "key" : "olivere", - "doc_count" : 2, - "ts" : { - "buckets" : [ { - "key_as_string" : "2012-01-01T00:00:00.000Z", - "key" : 1325376000000, - "doc_count" : 2 - } ] - } - }, { - "key" : "sandrae", - "doc_count" : 1, - "ts" : { - "buckets" : [ { - "key_as_string" : "2011-01-01T00:00:00.000Z", - "key" : 1293840000000, - "doc_count" : 1 - } ] - } - } ] - } -}` - - aggs := new(Aggregations) - err := json.Unmarshal([]byte(rs), &aggs) - if err != nil { - t.Fatalf("expected no error decoding; got: %v", err) - } - - // Access top-level aggregation - users, found := aggs.Terms("users") - if !found { - t.Fatalf("expected users aggregation to be found; got: %v", found) - } - if users == nil { - t.Fatalf("expected users aggregation; got: %v", users) - } - if users.Buckets == nil { - t.Fatalf("expected users buckets; got: %v", users.Buckets) - } - if len(users.Buckets) != 2 { - t.Errorf("expected %d bucket entries; got: %d", 2, len(users.Buckets)) - } - if users.Buckets[0].Key != "olivere" { - t.Errorf("expected key %q; got: %q", "olivere", users.Buckets[0].Key) - } - if users.Buckets[0].DocCount != 2 { - t.Errorf("expected doc count %d; got: %d", 2, users.Buckets[0].DocCount) - } - if users.Buckets[1].Key != "sandrae" { - t.Errorf("expected key %q; got: %q", "sandrae", users.Buckets[1].Key) - } - if users.Buckets[1].DocCount != 1 { - t.Errorf("expected doc count %d; got: %d", 1, users.Buckets[1].DocCount) - } - - // Access sub-aggregation - ts, found := users.Buckets[0].DateHistogram("ts") - if !found { - t.Fatalf("expected ts aggregation to be found; got: %v", found) - } - if ts == nil { - t.Fatalf("expected ts aggregation; got: %v", ts) - } - if ts.Buckets == nil { - t.Fatalf("expected ts buckets; got: %v", ts.Buckets) - } - if len(ts.Buckets) != 1 { - t.Errorf("expected %d bucket entries; got: %d", 1, len(ts.Buckets)) - } - if ts.Buckets[0].Key != 1325376000000 { - t.Errorf("expected key %v; got: %v", 1325376000000, ts.Buckets[0].Key) - } - if ts.Buckets[0].KeyAsString == nil { - t.Fatalf("expected key_as_string != %v; got: %v", nil, ts.Buckets[0].KeyAsString) - } - if *ts.Buckets[0].KeyAsString != "2012-01-01T00:00:00.000Z" { - t.Errorf("expected key_as_string %q; got: %q", "2012-01-01T00:00:00.000Z", *ts.Buckets[0].KeyAsString) - } -} - -/* -// TestAggsRawMessage is a test for issue #51 (https://github.com/olivere/elastic/issues/51). -// See also: http://play.golang.org/p/b8fzGMxrMC -func TestAggsRawMessage(t *testing.T) { - f := json.RawMessage([]byte(`42`)) - m := Aggregations(map[string]*json.RawMessage{ - "k": &f, - }) - b, _ := json.Marshal(m) - if string(b) != `{"k":42}` { - t.Errorf("expected %s; got: %s", `{"k":42}`, string(b)) - } -} -*/ diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_tophits.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_tophits.go deleted file mode 100644 index 4930463..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_tophits.go +++ /dev/null @@ -1,150 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// TopHitsAggregation keeps track of the most relevant document -// being aggregated. This aggregator is intended to be used as a -// sub aggregator, so that the top matching documents -// can be aggregated per bucket. -// -// It can effectively be used to group result sets by certain fields via -// a bucket aggregator. One or more bucket aggregators determines by -// which properties a result set get sliced into. -// -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-top-hits-aggregation.html -type TopHitsAggregation struct { - searchSource *SearchSource -} - -func NewTopHitsAggregation() TopHitsAggregation { - a := TopHitsAggregation{ - searchSource: NewSearchSource(), - } - return a -} - -func (a TopHitsAggregation) From(from int) TopHitsAggregation { - a.searchSource = a.searchSource.From(from) - return a -} - -func (a TopHitsAggregation) Size(size int) TopHitsAggregation { - a.searchSource = a.searchSource.Size(size) - return a -} - -func (a TopHitsAggregation) TrackScores(trackScores bool) TopHitsAggregation { - a.searchSource = a.searchSource.TrackScores(trackScores) - return a -} - -func (a TopHitsAggregation) Explain(explain bool) TopHitsAggregation { - a.searchSource = a.searchSource.Explain(explain) - return a -} - -func (a TopHitsAggregation) Version(version bool) TopHitsAggregation { - a.searchSource = a.searchSource.Version(version) - return a -} - -func (a TopHitsAggregation) NoFields() TopHitsAggregation { - a.searchSource = a.searchSource.NoFields() - return a -} - -func (a TopHitsAggregation) FetchSource(fetchSource bool) TopHitsAggregation { - a.searchSource = a.searchSource.FetchSource(fetchSource) - return a -} - -func (a TopHitsAggregation) FetchSourceContext(fetchSourceContext *FetchSourceContext) TopHitsAggregation { - a.searchSource = a.searchSource.FetchSourceContext(fetchSourceContext) - return a -} - -func (a TopHitsAggregation) FieldDataFields(fieldDataFields ...string) TopHitsAggregation { - a.searchSource = a.searchSource.FieldDataFields(fieldDataFields...) - return a -} - -func (a TopHitsAggregation) FieldDataField(fieldDataField string) TopHitsAggregation { - a.searchSource = a.searchSource.FieldDataField(fieldDataField) - return a -} - -func (a TopHitsAggregation) ScriptFields(scriptFields ...*ScriptField) TopHitsAggregation { - a.searchSource = a.searchSource.ScriptFields(scriptFields...) - return a -} - -func (a TopHitsAggregation) ScriptField(scriptField *ScriptField) TopHitsAggregation { - a.searchSource = a.searchSource.ScriptField(scriptField) - return a -} - -func (a TopHitsAggregation) PartialFields(partialFields ...*PartialField) TopHitsAggregation { - a.searchSource = a.searchSource.PartialFields(partialFields...) - return a -} - -func (a TopHitsAggregation) PartialField(partialField *PartialField) TopHitsAggregation { - a.searchSource = a.searchSource.PartialField(partialField) - return a -} - -func (a TopHitsAggregation) Sort(field string, ascending bool) TopHitsAggregation { - a.searchSource = a.searchSource.Sort(field, ascending) - return a -} - -func (a TopHitsAggregation) SortWithInfo(info SortInfo) TopHitsAggregation { - a.searchSource = a.searchSource.SortWithInfo(info) - return a -} - -func (a TopHitsAggregation) SortBy(sorter ...Sorter) TopHitsAggregation { - a.searchSource = a.searchSource.SortBy(sorter...) - return a -} - -func (a TopHitsAggregation) Highlight(highlight *Highlight) TopHitsAggregation { - a.searchSource = a.searchSource.Highlight(highlight) - return a -} - -func (a TopHitsAggregation) Highlighter() *Highlight { - return a.searchSource.Highlighter() -} - -func (a TopHitsAggregation) Source() interface{} { - // Example: - // { - // "aggs": { - // "top_tag_hits": { - // "top_hits": { - // "sort": [ - // { - // "last_activity_date": { - // "order": "desc" - // } - // } - // ], - // "_source": { - // "include": [ - // "title" - // ] - // }, - // "size" : 1 - // } - // } - // } - // } - // This method returns only the { "top_hits" : { ... } } part. - - source := make(map[string]interface{}) - source["top_hits"] = a.searchSource.Source() - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_tophits_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_tophits_test.go deleted file mode 100644 index 474b11e..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_tophits_test.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestTopHitsAggregation(t *testing.T) { - fsc := NewFetchSourceContext(true).Include("title") - agg := NewTopHitsAggregation(). - Sort("last_activity_date", false). - FetchSourceContext(fsc). - Size(1) - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"top_hits":{"_source":{"excludes":[],"includes":["title"]},"size":1,"sort":[{"last_activity_date":{"order":"desc"}}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_value_count.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_value_count.go deleted file mode 100644 index b38d783..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_value_count.go +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// ValueCountAggregation is a single-value metrics aggregation that counts -// the number of values that are extracted from the aggregated documents. -// These values can be extracted either from specific fields in the documents, -// or be generated by a provided script. Typically, this aggregator will be -// used in conjunction with other single-value aggregations. -// For example, when computing the avg one might be interested in the -// number of values the average is computed over. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-valuecount-aggregation.html -type ValueCountAggregation struct { - field string - script string - scriptFile string - lang string - format string - params map[string]interface{} - subAggregations map[string]Aggregation -} - -func NewValueCountAggregation() ValueCountAggregation { - a := ValueCountAggregation{ - params: make(map[string]interface{}), - subAggregations: make(map[string]Aggregation), - } - return a -} - -func (a ValueCountAggregation) Field(field string) ValueCountAggregation { - a.field = field - return a -} - -func (a ValueCountAggregation) Script(script string) ValueCountAggregation { - a.script = script - return a -} - -func (a ValueCountAggregation) ScriptFile(scriptFile string) ValueCountAggregation { - a.scriptFile = scriptFile - return a -} - -func (a ValueCountAggregation) Lang(lang string) ValueCountAggregation { - a.lang = lang - return a -} - -func (a ValueCountAggregation) Format(format string) ValueCountAggregation { - a.format = format - return a -} - -func (a ValueCountAggregation) Param(name string, value interface{}) ValueCountAggregation { - a.params[name] = value - return a -} - -func (a ValueCountAggregation) SubAggregation(name string, subAggregation Aggregation) ValueCountAggregation { - a.subAggregations[name] = subAggregation - return a -} - -func (a ValueCountAggregation) Source() interface{} { - // Example: - // { - // "aggs" : { - // "grades_count" : { "value_count" : { "field" : "grade" } } - // } - // } - // This method returns only the { "value_count" : { "field" : "grade" } } part. - - source := make(map[string]interface{}) - opts := make(map[string]interface{}) - source["value_count"] = opts - - // ValuesSourceAggregationBuilder - if a.field != "" { - opts["field"] = a.field - } - if a.script != "" { - opts["script"] = a.script - } - if a.scriptFile != "" { - opts["script_file"] = a.scriptFile - } - if a.lang != "" { - opts["lang"] = a.lang - } - if a.format != "" { - opts["format"] = a.format - } - if len(a.params) > 0 { - opts["params"] = a.params - } - - // AggregationBuilder (SubAggregations) - if len(a.subAggregations) > 0 { - aggsMap := make(map[string]interface{}) - source["aggregations"] = aggsMap - for name, aggregate := range a.subAggregations { - aggsMap[name] = aggregate.Source() - } - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_value_count_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_aggs_value_count_test.go deleted file mode 100644 index 247b5f5..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_aggs_value_count_test.go +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestValueCountAggregation(t *testing.T) { - agg := NewValueCountAggregation().Field("grade") - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"value_count":{"field":"grade"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestValueCountAggregationWithFormat(t *testing.T) { - // Format comes with 1.5.0+ - agg := NewValueCountAggregation().Field("grade").Format("0000.0") - data, err := json.Marshal(agg.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"value_count":{"field":"grade","format":"0000.0"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_facets.go b/vendor/gopkg.in/olivere/elastic.v2/search_facets.go deleted file mode 100644 index 2e69980..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_facets.go +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// Represents a glimpse into the data. -// For more details about facets, visit: -// http://elasticsearch.org/guide/reference/api/search/facets/ -type Facet interface { - Source() interface{} -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_facets_date_histogram.go b/vendor/gopkg.in/olivere/elastic.v2/search_facets_date_histogram.go deleted file mode 100644 index b13d27e..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_facets_date_histogram.go +++ /dev/null @@ -1,198 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// A specific histogram facet that can work with date field types -// enhancing it over the regular histogram facet. -// See: -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-facets-date-histogram-facet.html -type DateHistogramFacet struct { - facetFilter Filter - global *bool - nested string - mode string - keyField string - valueField *string - interval string - preZone string - preZoneAdjustLargeInterval *bool - postZone string - preOffset string - postOffset string - factor *float32 - comparatorType string - valueScript string - params map[string]interface{} - lang string -} - -func NewDateHistogramFacet() DateHistogramFacet { - return DateHistogramFacet{ - params: make(map[string]interface{}), - } -} - -func (f DateHistogramFacet) FacetFilter(filter Facet) DateHistogramFacet { - f.facetFilter = filter - return f -} - -func (f DateHistogramFacet) Global(global bool) DateHistogramFacet { - f.global = &global - return f -} - -func (f DateHistogramFacet) Nested(nested string) DateHistogramFacet { - f.nested = nested - return f -} - -func (f DateHistogramFacet) Mode(mode string) DateHistogramFacet { - f.mode = mode - return f -} - -func (f DateHistogramFacet) Field(field string) DateHistogramFacet { - f.keyField = field - return f -} - -func (f DateHistogramFacet) KeyField(keyField string) DateHistogramFacet { - f.keyField = keyField - return f -} - -func (f DateHistogramFacet) ValueField(valueField string) DateHistogramFacet { - f.valueField = &valueField - return f -} - -func (f DateHistogramFacet) ValueScript(valueScript string) DateHistogramFacet { - f.valueScript = valueScript - return f -} - -func (f DateHistogramFacet) Param(name string, value interface{}) DateHistogramFacet { - f.params[name] = value - return f -} - -func (f DateHistogramFacet) Lang(lang string) DateHistogramFacet { - f.lang = lang - return f -} - -// Allowed values are: "year", "quarter", "month", "week", "day", -// "hour", "minute". It also supports time settings like "1.5h" -// (up to "w" for weeks). -func (f DateHistogramFacet) Interval(interval string) DateHistogramFacet { - f.interval = interval - return f -} - -func (f DateHistogramFacet) PreZoneAdjustLargeInterval(preZoneAdjustLargeInterval bool) DateHistogramFacet { - f.preZoneAdjustLargeInterval = &preZoneAdjustLargeInterval - return f -} - -func (f DateHistogramFacet) PreZone(preZone string) DateHistogramFacet { - f.preZone = preZone - return f -} - -func (f DateHistogramFacet) PostZone(postZone string) DateHistogramFacet { - f.postZone = postZone - return f -} - -func (f DateHistogramFacet) PreOffset(preOffset string) DateHistogramFacet { - f.preOffset = preOffset - return f -} - -func (f DateHistogramFacet) PostOffset(postOffset string) DateHistogramFacet { - f.postOffset = postOffset - return f -} - -func (f DateHistogramFacet) Factor(factor float32) DateHistogramFacet { - f.factor = &factor - return f -} - -func (f DateHistogramFacet) Comparator(comparator string) DateHistogramFacet { - f.comparatorType = comparator - return f -} - -func (f DateHistogramFacet) addFilterFacetAndGlobal(source map[string]interface{}) { - if f.facetFilter != nil { - source["facet_filter"] = f.facetFilter.Source() - } - if f.nested != "" { - source["nested"] = f.nested - } - if f.global != nil { - source["global"] = *f.global - } - if f.mode != "" { - source["mode"] = f.mode - } -} - -func (f DateHistogramFacet) Source() interface{} { - /* - "histo1" : { - "date_histogram" : { - "field" : "field_name", - "interval" : "day" - } - } - */ - source := make(map[string]interface{}) - f.addFilterFacetAndGlobal(source) - facet := make(map[string]interface{}) - source["date_histogram"] = facet - - if f.valueField != nil { - facet["key_field"] = f.keyField - facet["value_field"] = *f.valueField - } else { - facet["field"] = f.keyField - } - - if f.valueScript != "" { - facet["value_script"] = f.valueScript - if f.lang != "" { - facet["lang"] = f.lang - } - if len(f.params) > 0 { - facet["params"] = f.params - } - } - facet["interval"] = f.interval - if f.preZone != "" { - facet["pre_zone"] = f.preZone - } - if f.preZoneAdjustLargeInterval != nil { - facet["pre_zone_adjust_large_interval"] = *f.preZoneAdjustLargeInterval - } - if f.postZone != "" { - facet["post_zone"] = f.postZone - } - if f.preOffset != "" { - facet["pre_offset"] = f.preOffset - } - if f.postOffset != "" { - facet["post_offset"] = f.postOffset - } - if f.factor != nil { - facet["factor"] = *f.factor - } - if f.comparatorType != "" { - facet["comparator"] = f.comparatorType - } - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_facets_date_histogram_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_facets_date_histogram_test.go deleted file mode 100644 index a9ff716..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_facets_date_histogram_test.go +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestDateHistogramFacetWithField(t *testing.T) { - f := NewDateHistogramFacet().Field("field_name").Interval("day") - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"date_histogram":{"field":"field_name","interval":"day"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestDateHistogramFacetWithValueField(t *testing.T) { - f := NewDateHistogramFacet(). - KeyField("timestamp"). - ValueField("price"). - Interval("day") - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"date_histogram":{"interval":"day","key_field":"timestamp","value_field":"price"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestDateHistogramFacetWithGlobals(t *testing.T) { - f := NewDateHistogramFacet(). - KeyField("timestamp"). - ValueField("price"). - Interval("day"). - Global(true). - FacetFilter(NewTermFilter("user", "kimchy")) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"date_histogram":{"interval":"day","key_field":"timestamp","value_field":"price"},"facet_filter":{"term":{"user":"kimchy"}},"global":true}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_facets_filter.go b/vendor/gopkg.in/olivere/elastic.v2/search_facets_filter.go deleted file mode 100644 index 1b5719d..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_facets_filter.go +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// A filter facet (not to be confused with a facet filter) allows you -// to return a count of the hits matching the filter. -// The filter itself can be expressed using the Query DSL. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-facets-filter-facet.html -type FilterFacet struct { - facetFilter Filter - global *bool - nested string - mode string - filter Filter -} - -func NewFilterFacet() FilterFacet { - return FilterFacet{} -} - -func (f FilterFacet) FacetFilter(filter Facet) FilterFacet { - f.facetFilter = filter - return f -} - -func (f FilterFacet) Global(global bool) FilterFacet { - f.global = &global - return f -} - -func (f FilterFacet) Nested(nested string) FilterFacet { - f.nested = nested - return f -} - -func (f FilterFacet) Mode(mode string) FilterFacet { - f.mode = mode - return f -} - -func (f FilterFacet) Filter(filter Filter) FilterFacet { - f.filter = filter - return f -} - -func (f FilterFacet) addFilterFacetAndGlobal(source map[string]interface{}) { - if f.facetFilter != nil { - source["facet_filter"] = f.facetFilter.Source() - } - if f.nested != "" { - source["nested"] = f.nested - } - if f.global != nil { - source["global"] = *f.global - } - if f.mode != "" { - source["mode"] = f.mode - } -} - -func (f FilterFacet) Source() interface{} { - source := make(map[string]interface{}) - f.addFilterFacetAndGlobal(source) - source["filter"] = f.filter.Source() - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_facets_filter_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_facets_filter_test.go deleted file mode 100644 index 9566b84..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_facets_filter_test.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestFilterFacet(t *testing.T) { - f := NewFilterFacet().Filter(NewTermFilter("tag", "wow")) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"filter":{"term":{"tag":"wow"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestFilterFacetWithGlobals(t *testing.T) { - f := NewFilterFacet().Filter(NewTermFilter("tag", "wow")). - Global(true). - FacetFilter(NewTermFilter("user", "kimchy")) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"facet_filter":{"term":{"user":"kimchy"}},"filter":{"term":{"tag":"wow"}},"global":true}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_facets_geo_distance.go b/vendor/gopkg.in/olivere/elastic.v2/search_facets_geo_distance.go deleted file mode 100644 index faa3ee7..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_facets_geo_distance.go +++ /dev/null @@ -1,202 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// The geo_distance facet is a facet providing information for ranges of -// distances from a provided geo_point including count of the number of hits -// that fall within each range, and aggregation information (like total). -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-facets-geo-distance-facet.html -type GeoDistanceFacet struct { - facetFilter Filter - global *bool - nested string - mode string - fieldName string - valueFieldName string - lat float64 - lon float64 - geoHash string - geoDistance string - unit string - params map[string]interface{} - valueScript string - lang string - entries []geoDistanceFacetEntry -} - -func NewGeoDistanceFacet() GeoDistanceFacet { - return GeoDistanceFacet{ - params: make(map[string]interface{}), - entries: make([]geoDistanceFacetEntry, 0), - } -} - -func (f GeoDistanceFacet) FacetFilter(filter Facet) GeoDistanceFacet { - f.facetFilter = filter - return f -} - -func (f GeoDistanceFacet) Global(global bool) GeoDistanceFacet { - f.global = &global - return f -} - -func (f GeoDistanceFacet) Nested(nested string) GeoDistanceFacet { - f.nested = nested - return f -} - -func (f GeoDistanceFacet) Mode(mode string) GeoDistanceFacet { - f.mode = mode - return f -} - -func (f GeoDistanceFacet) Field(fieldName string) GeoDistanceFacet { - f.fieldName = fieldName - return f -} - -func (f GeoDistanceFacet) ValueField(valueFieldName string) GeoDistanceFacet { - f.valueFieldName = valueFieldName - return f -} - -func (f GeoDistanceFacet) ValueScript(valueScript string) GeoDistanceFacet { - f.valueScript = valueScript - return f -} - -func (f GeoDistanceFacet) Lang(lang string) GeoDistanceFacet { - f.lang = lang - return f -} - -func (f GeoDistanceFacet) ScriptParam(name string, value interface{}) GeoDistanceFacet { - f.params[name] = value - return f -} - -func (f GeoDistanceFacet) Point(lat, lon float64) GeoDistanceFacet { - f.lat = lat - f.lon = lon - return f -} - -func (f GeoDistanceFacet) Lat(lat float64) GeoDistanceFacet { - f.lat = lat - return f -} - -func (f GeoDistanceFacet) Lon(lon float64) GeoDistanceFacet { - f.lon = lon - return f -} - -func (f GeoDistanceFacet) GeoHash(geoHash string) GeoDistanceFacet { - f.geoHash = geoHash - return f -} - -func (f GeoDistanceFacet) GeoDistance(geoDistance string) GeoDistanceFacet { - f.geoDistance = geoDistance - return f -} - -func (f GeoDistanceFacet) AddRange(from, to float64) GeoDistanceFacet { - f.entries = append(f.entries, geoDistanceFacetEntry{From: from, To: to}) - return f -} - -func (f GeoDistanceFacet) AddUnboundedTo(from float64) GeoDistanceFacet { - f.entries = append(f.entries, geoDistanceFacetEntry{From: from, To: nil}) - return f -} - -func (f GeoDistanceFacet) AddUnboundedFrom(to float64) GeoDistanceFacet { - f.entries = append(f.entries, geoDistanceFacetEntry{From: nil, To: to}) - return f -} - -func (f GeoDistanceFacet) Unit(distanceUnit string) GeoDistanceFacet { - f.unit = distanceUnit - return f -} - -func (f GeoDistanceFacet) addFilterFacetAndGlobal(source map[string]interface{}) { - if f.facetFilter != nil { - source["facet_filter"] = f.facetFilter.Source() - } - if f.nested != "" { - source["nested"] = f.nested - } - if f.global != nil { - source["global"] = *f.global - } - if f.mode != "" { - source["mode"] = f.mode - } -} - -func (f GeoDistanceFacet) Source() interface{} { - source := make(map[string]interface{}) - f.addFilterFacetAndGlobal(source) - opts := make(map[string]interface{}) - source["geo_distance"] = opts - - if f.geoHash != "" { - opts[f.fieldName] = f.geoHash - } else { - opts[f.fieldName] = []float64{f.lat, f.lon} - } - if f.valueFieldName != "" { - opts["value_field"] = f.valueFieldName - } - if f.valueScript != "" { - opts["value_script"] = f.valueScript - if f.lang != "" { - opts["lang"] = f.lang - } - if len(f.params) > 0 { - opts["params"] = f.params - } - } - - ranges := make([]interface{}, 0) - for _, ent := range f.entries { - r := make(map[string]interface{}) - if ent.From != nil { - switch from := ent.From.(type) { - case int, int16, int32, int64, float32, float64: - r["from"] = from - case string: - r["from"] = from - } - } - if ent.To != nil { - switch to := ent.To.(type) { - case int, int16, int32, int64, float32, float64: - r["to"] = to - case string: - r["to"] = to - } - } - ranges = append(ranges, r) - } - opts["ranges"] = ranges - - if f.unit != "" { - opts["unit"] = f.unit - } - if f.geoDistance != "" { - opts["distance_type"] = f.geoDistance - } - - return source -} - -type geoDistanceFacetEntry struct { - From interface{} - To interface{} -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_facets_geo_distance_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_facets_geo_distance_test.go deleted file mode 100644 index 65efa66..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_facets_geo_distance_test.go +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestGeoDistanceFacet(t *testing.T) { - f := NewGeoDistanceFacet().Field("pin.location"). - Point(40, -70). - AddUnboundedFrom(10). - AddRange(10, 20). - AddRange(20, 100). - AddUnboundedTo(100) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"geo_distance":{"pin.location":[40,-70],"ranges":[{"to":10},{"from":10,"to":20},{"from":20,"to":100},{"from":100}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestGeoDistanceFacetWithGlobals(t *testing.T) { - f := NewGeoDistanceFacet().Field("pin.location"). - Point(40, -70). - AddUnboundedFrom(10). - AddRange(10, 20). - AddRange(20, 100). - AddUnboundedTo(100). - Global(true). - FacetFilter(NewTermFilter("user", "kimchy")) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"facet_filter":{"term":{"user":"kimchy"}},"geo_distance":{"pin.location":[40,-70],"ranges":[{"to":10},{"from":10,"to":20},{"from":20,"to":100},{"from":100}]},"global":true}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_facets_histogram.go b/vendor/gopkg.in/olivere/elastic.v2/search_facets_histogram.go deleted file mode 100644 index 9fa0695..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_facets_histogram.go +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// Histogram Facet -// See: http://www.elasticsearch.org/guide/reference/api/search/facets/histogram-facet.html -type HistogramFacet struct { - facetFilter Filter - global *bool - nested string - mode string - keyField string - valueField string - interval int64 - timeInterval string - comparatorType string -} - -func NewHistogramFacet() HistogramFacet { - return HistogramFacet{ - interval: -1, - } -} - -func (f HistogramFacet) FacetFilter(filter Facet) HistogramFacet { - f.facetFilter = filter - return f -} - -func (f HistogramFacet) Global(global bool) HistogramFacet { - f.global = &global - return f -} - -func (f HistogramFacet) Nested(nested string) HistogramFacet { - f.nested = nested - return f -} - -func (f HistogramFacet) Mode(mode string) HistogramFacet { - f.mode = mode - return f -} - -func (f HistogramFacet) Field(field string) HistogramFacet { - f.keyField = field - return f -} - -func (f HistogramFacet) KeyField(keyField string) HistogramFacet { - f.keyField = keyField - return f -} - -func (f HistogramFacet) ValueField(valueField string) HistogramFacet { - f.valueField = valueField - return f -} - -func (f HistogramFacet) Interval(interval int64) HistogramFacet { - f.interval = interval - return f -} - -func (f HistogramFacet) TimeInterval(timeInterval string) HistogramFacet { - f.timeInterval = timeInterval - return f -} - -func (f HistogramFacet) addFilterFacetAndGlobal(source map[string]interface{}) { - if f.facetFilter != nil { - source["facet_filter"] = f.facetFilter.Source() - } - if f.nested != "" { - source["nested"] = f.nested - } - if f.global != nil { - source["global"] = *f.global - } - if f.mode != "" { - source["mode"] = f.mode - } -} - -func (f HistogramFacet) Source() interface{} { - source := make(map[string]interface{}) - f.addFilterFacetAndGlobal(source) - opts := make(map[string]interface{}) - source["histogram"] = opts - - if f.valueField != "" { - opts["key_field"] = f.keyField - opts["value_field"] = f.valueField - } else { - opts["field"] = f.keyField - } - if f.timeInterval != "" { - opts["time_interval"] = f.timeInterval - } else { - opts["interval"] = f.interval - } - - if f.comparatorType != "" { - opts["comparator"] = f.comparatorType - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_facets_histogram_script.go b/vendor/gopkg.in/olivere/elastic.v2/search_facets_histogram_script.go deleted file mode 100644 index fcf815f..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_facets_histogram_script.go +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// Histogram Facet -// See: http://www.elasticsearch.org/guide/reference/api/search/facets/histogram-facet.html -type HistogramScriptFacet struct { - facetFilter Filter - global *bool - nested string - mode string - lang string - keyField string - keyScript string - valueScript string - params map[string]interface{} - interval int64 - comparatorType string -} - -func NewHistogramScriptFacet() HistogramScriptFacet { - return HistogramScriptFacet{ - interval: -1, - params: make(map[string]interface{}), - } -} - -func (f HistogramScriptFacet) FacetFilter(filter Facet) HistogramScriptFacet { - f.facetFilter = filter - return f -} - -func (f HistogramScriptFacet) Global(global bool) HistogramScriptFacet { - f.global = &global - return f -} - -func (f HistogramScriptFacet) Nested(nested string) HistogramScriptFacet { - f.nested = nested - return f -} - -func (f HistogramScriptFacet) Mode(mode string) HistogramScriptFacet { - f.mode = mode - return f -} - -func (f HistogramScriptFacet) KeyField(keyField string) HistogramScriptFacet { - f.keyField = keyField - return f -} - -func (f HistogramScriptFacet) KeyScript(keyScript string) HistogramScriptFacet { - f.keyScript = keyScript - return f -} - -func (f HistogramScriptFacet) ValueScript(valueScript string) HistogramScriptFacet { - f.valueScript = valueScript - return f -} - -func (f HistogramScriptFacet) Interval(interval int64) HistogramScriptFacet { - f.interval = interval - return f -} - -func (f HistogramScriptFacet) Param(name string, value interface{}) HistogramScriptFacet { - f.params[name] = value - return f -} - -func (f HistogramScriptFacet) Comparator(comparatorType string) HistogramScriptFacet { - f.comparatorType = comparatorType - return f -} - -func (f HistogramScriptFacet) addFilterFacetAndGlobal(source map[string]interface{}) { - if f.facetFilter != nil { - source["facet_filter"] = f.facetFilter.Source() - } - if f.nested != "" { - source["nested"] = f.nested - } - if f.global != nil { - source["global"] = *f.global - } - if f.mode != "" { - source["mode"] = f.mode - } -} - -func (f HistogramScriptFacet) Source() interface{} { - source := make(map[string]interface{}) - f.addFilterFacetAndGlobal(source) - opts := make(map[string]interface{}) - source["histogram"] = opts - - if f.keyField != "" { - opts["key_field"] = f.keyField - } else if f.keyScript != "" { - opts["key_script"] = f.keyScript - } - opts["value_script"] = f.valueScript - if f.lang != "" { - opts["lang"] = f.lang - } - if f.interval > 0 { - opts["interval"] = f.interval - } - if len(f.params) > 0 { - opts["params"] = f.params - } - if f.comparatorType != "" { - opts["comparator"] = f.comparatorType - } - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_facets_histogram_script_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_facets_histogram_script_test.go deleted file mode 100644 index a354205..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_facets_histogram_script_test.go +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestHistogramScriptFacetWithKeyScripts(t *testing.T) { - f := NewHistogramScriptFacet(). - KeyScript("doc['date'].date.minuteOfHour"). - ValueScript("doc['num1'].value") - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"histogram":{"key_script":"doc['date'].date.minuteOfHour","value_script":"doc['num1'].value"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestHistogramScriptFacetWithParams(t *testing.T) { - f := NewHistogramScriptFacet(). - KeyScript("doc['date'].date.minuteOfHour * factor1"). - ValueScript("doc['num1'].value * factor2"). - Param("factor1", 2). - Param("factor2", 3) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"histogram":{"key_script":"doc['date'].date.minuteOfHour * factor1","params":{"factor1":2,"factor2":3},"value_script":"doc['num1'].value * factor2"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestHistogramScriptFacetWithGlobals(t *testing.T) { - f := NewHistogramScriptFacet(). - KeyScript("doc['date'].date.minuteOfHour"). - ValueScript("doc['num1'].value"). - Global(true). - FacetFilter(NewTermFilter("user", "kimchy")) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"facet_filter":{"term":{"user":"kimchy"}},"global":true,"histogram":{"key_script":"doc['date'].date.minuteOfHour","value_script":"doc['num1'].value"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_facets_histogram_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_facets_histogram_test.go deleted file mode 100644 index 5645b66..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_facets_histogram_test.go +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestHistogramFacetWithField(t *testing.T) { - f := NewHistogramFacet().Field("field_name").Interval(100) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"histogram":{"field":"field_name","interval":100}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestHistogramFacetWithValueField(t *testing.T) { - f := NewHistogramFacet(). - KeyField("timestamp"). - ValueField("price"). - TimeInterval("1.5d") - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"histogram":{"key_field":"timestamp","time_interval":"1.5d","value_field":"price"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestHistogramFacetWithGlobals(t *testing.T) { - f := NewHistogramFacet(). - KeyField("timestamp"). - ValueField("price"). - Interval(1000). - Global(true). - FacetFilter(NewTermFilter("user", "kimchy")) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"facet_filter":{"term":{"user":"kimchy"}},"global":true,"histogram":{"interval":1000,"key_field":"timestamp","value_field":"price"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_facets_query.go b/vendor/gopkg.in/olivere/elastic.v2/search_facets_query.go deleted file mode 100644 index 184c8b3..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_facets_query.go +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// Query Facet -// See: http://www.elasticsearch.org/guide/reference/api/search/facets/query-facet.html -type QueryFacet struct { - facetFilter Filter - global *bool - nested string - mode string - query Query -} - -func NewQueryFacet() QueryFacet { - return QueryFacet{} -} - -func (f QueryFacet) FacetFilter(filter Facet) QueryFacet { - f.facetFilter = filter - return f -} - -func (f QueryFacet) Global(global bool) QueryFacet { - f.global = &global - return f -} - -func (f QueryFacet) Nested(nested string) QueryFacet { - f.nested = nested - return f -} - -func (f QueryFacet) Mode(mode string) QueryFacet { - f.mode = mode - return f -} - -func (f QueryFacet) Query(query Query) QueryFacet { - f.query = query - return f -} - -func (f QueryFacet) addFilterFacetAndGlobal(source map[string]interface{}) { - if f.facetFilter != nil { - source["facet_filter"] = f.facetFilter.Source() - } - if f.nested != "" { - source["nested"] = f.nested - } - if f.global != nil { - source["global"] = *f.global - } - if f.mode != "" { - source["mode"] = f.mode - } -} - -func (f QueryFacet) Source() interface{} { - source := make(map[string]interface{}) - f.addFilterFacetAndGlobal(source) - source["query"] = f.query.Source() - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_facets_query_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_facets_query_test.go deleted file mode 100644 index d5d9348..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_facets_query_test.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestQueryFacet(t *testing.T) { - f := NewQueryFacet().Query(NewTermQuery("tag", "wow")) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"query":{"term":{"tag":"wow"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestQueryFacetWithGlobals(t *testing.T) { - f := NewQueryFacet().Query(NewTermQuery("tag", "wow")). - Global(true). - FacetFilter(NewTermFilter("user", "kimchy")) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"facet_filter":{"term":{"user":"kimchy"}},"global":true,"query":{"term":{"tag":"wow"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_facets_range.go b/vendor/gopkg.in/olivere/elastic.v2/search_facets_range.go deleted file mode 100644 index 864b355..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_facets_range.go +++ /dev/null @@ -1,158 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "time" -) - -// Range facet allows to specify a set of ranges and get both the -// number of docs (count) that fall within each range, -// and aggregated data either based on the field, or using another field. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-facets-range-facet.html -type RangeFacet struct { - facetFilter Filter - global *bool - nested string - mode string - keyField string - valueField string - entries []rangeFacetEntry -} - -type rangeFacetEntry struct { - From interface{} - To interface{} -} - -func NewRangeFacet() RangeFacet { - return RangeFacet{ - entries: make([]rangeFacetEntry, 0), - } -} - -func (f RangeFacet) FacetFilter(filter Facet) RangeFacet { - f.facetFilter = filter - return f -} - -func (f RangeFacet) Global(global bool) RangeFacet { - f.global = &global - return f -} - -func (f RangeFacet) Nested(nested string) RangeFacet { - f.nested = nested - return f -} - -func (f RangeFacet) Mode(mode string) RangeFacet { - f.mode = mode - return f -} - -func (f RangeFacet) Field(field string) RangeFacet { - f.keyField = field - f.valueField = field - return f -} - -func (f RangeFacet) KeyField(keyField string) RangeFacet { - f.keyField = keyField - return f -} - -func (f RangeFacet) ValueField(valueField string) RangeFacet { - f.valueField = valueField - return f -} - -func (f RangeFacet) AddRange(from, to interface{}) RangeFacet { - f.entries = append(f.entries, rangeFacetEntry{From: from, To: to}) - return f -} - -func (f RangeFacet) AddUnboundedTo(from interface{}) RangeFacet { - f.entries = append(f.entries, rangeFacetEntry{From: from, To: nil}) - return f -} - -func (f RangeFacet) AddUnboundedFrom(to interface{}) RangeFacet { - f.entries = append(f.entries, rangeFacetEntry{From: nil, To: to}) - return f -} - -func (f RangeFacet) Lt(to interface{}) RangeFacet { - f.entries = append(f.entries, rangeFacetEntry{From: nil, To: to}) - return f -} - -func (f RangeFacet) Between(from, to interface{}) RangeFacet { - f.entries = append(f.entries, rangeFacetEntry{From: from, To: to}) - return f -} - -func (f RangeFacet) Gt(from interface{}) RangeFacet { - f.entries = append(f.entries, rangeFacetEntry{From: from, To: nil}) - return f -} - -func (f RangeFacet) addFilterFacetAndGlobal(source map[string]interface{}) { - if f.facetFilter != nil { - source["facet_filter"] = f.facetFilter.Source() - } - if f.nested != "" { - source["nested"] = f.nested - } - if f.global != nil { - source["global"] = *f.global - } - if f.mode != "" { - source["mode"] = f.mode - } -} - -func (f RangeFacet) Source() interface{} { - source := make(map[string]interface{}) - f.addFilterFacetAndGlobal(source) - opts := make(map[string]interface{}) - source["range"] = opts - - if f.valueField != "" && f.keyField != f.valueField { - opts["key_field"] = f.keyField - opts["value_field"] = f.valueField - } else { - opts["field"] = f.keyField - } - - ranges := make([]interface{}, 0) - for _, ent := range f.entries { - r := make(map[string]interface{}) - if ent.From != nil { - switch from := ent.From.(type) { - case int, int16, int32, int64, float32, float64: - r["from"] = from - case time.Time: - r["from"] = from.Format(time.RFC3339) - case string: - r["from"] = from - } - } - if ent.To != nil { - switch to := ent.To.(type) { - case int, int16, int32, int64, float32, float64: - r["to"] = to - case time.Time: - r["to"] = to.Format(time.RFC3339) - case string: - r["to"] = to - } - } - ranges = append(ranges, r) - } - opts["ranges"] = ranges - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_facets_range_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_facets_range_test.go deleted file mode 100644 index 042393c..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_facets_range_test.go +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestRangeFacet(t *testing.T) { - f := NewRangeFacet().Field("field_name"). - AddUnboundedFrom(50). - AddRange(20, 70). - AddRange(70, 120). - AddUnboundedTo(150) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"range":{"field":"field_name","ranges":[{"to":50},{"from":20,"to":70},{"from":70,"to":120},{"from":150}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestRangeFacetWithLtAndCo(t *testing.T) { - f := NewRangeFacet().Field("field_name"). - Lt(50). - Between(20, 70). - Between(70, 120). - Gt(150) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"range":{"field":"field_name","ranges":[{"to":50},{"from":20,"to":70},{"from":70,"to":120},{"from":150}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestRangeFacetWithGlobals(t *testing.T) { - f := NewRangeFacet().Field("field_name"). - AddUnboundedFrom(50). - AddRange(20, 70). - AddRange(70, 120). - AddUnboundedTo(150). - Global(true). - FacetFilter(NewTermFilter("user", "kimchy")) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"facet_filter":{"term":{"user":"kimchy"}},"global":true,"range":{"field":"field_name","ranges":[{"to":50},{"from":20,"to":70},{"from":70,"to":120},{"from":150}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_facets_statistical.go b/vendor/gopkg.in/olivere/elastic.v2/search_facets_statistical.go deleted file mode 100644 index 5a813a1..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_facets_statistical.go +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// Statistical facet allows to compute statistical data on a numeric fields. -// The statistical data include count, total, sum of squares, mean (average), -// minimum, maximum, variance, and standard deviation. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-facets-statistical-facet.html -type StatisticalFacet struct { - facetFilter Filter - global *bool - nested string - mode string - fieldName string - fieldNames []string -} - -func NewStatisticalFacet() StatisticalFacet { - return StatisticalFacet{ - fieldNames: make([]string, 0), - } -} - -func (f StatisticalFacet) FacetFilter(filter Facet) StatisticalFacet { - f.facetFilter = filter - return f -} - -func (f StatisticalFacet) Global(global bool) StatisticalFacet { - f.global = &global - return f -} - -func (f StatisticalFacet) Nested(nested string) StatisticalFacet { - f.nested = nested - return f -} - -func (f StatisticalFacet) Mode(mode string) StatisticalFacet { - f.mode = mode - return f -} - -func (f StatisticalFacet) Field(fieldName string) StatisticalFacet { - f.fieldName = fieldName - return f -} - -func (f StatisticalFacet) Fields(fieldNames ...string) StatisticalFacet { - f.fieldNames = append(f.fieldNames, fieldNames...) - return f -} - -func (f StatisticalFacet) addFilterFacetAndGlobal(source map[string]interface{}) { - if f.facetFilter != nil { - source["facet_filter"] = f.facetFilter.Source() - } - if f.nested != "" { - source["nested"] = f.nested - } - if f.global != nil { - source["global"] = *f.global - } - if f.mode != "" { - source["mode"] = f.mode - } -} - -func (f StatisticalFacet) Source() interface{} { - source := make(map[string]interface{}) - f.addFilterFacetAndGlobal(source) - opts := make(map[string]interface{}) - source["statistical"] = opts - - if len(f.fieldNames) > 0 { - if len(f.fieldNames) == 1 { - opts["field"] = f.fieldNames[0] - } else { - opts["fields"] = f.fieldNames - } - } else { - opts["field"] = f.fieldName - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_facets_statistical_script.go b/vendor/gopkg.in/olivere/elastic.v2/search_facets_statistical_script.go deleted file mode 100644 index 36a60d5..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_facets_statistical_script.go +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// Statistical facet allows to compute statistical data on a numeric fields. -// The statistical data include count, total, sum of squares, mean (average), -// minimum, maximum, variance, and standard deviation. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-facets-statistical-facet.html -type StatisticalScriptFacet struct { - facetFilter Filter - global *bool - nested string - mode string - lang string - script string - params map[string]interface{} -} - -func NewStatisticalScriptFacet() StatisticalScriptFacet { - return StatisticalScriptFacet{ - params: make(map[string]interface{}), - } -} - -func (f StatisticalScriptFacet) FacetFilter(filter Facet) StatisticalScriptFacet { - f.facetFilter = filter - return f -} - -func (f StatisticalScriptFacet) Global(global bool) StatisticalScriptFacet { - f.global = &global - return f -} - -func (f StatisticalScriptFacet) Nested(nested string) StatisticalScriptFacet { - f.nested = nested - return f -} - -func (f StatisticalScriptFacet) Mode(mode string) StatisticalScriptFacet { - f.mode = mode - return f -} - -func (f StatisticalScriptFacet) Lang(lang string) StatisticalScriptFacet { - f.lang = lang - return f -} - -func (f StatisticalScriptFacet) Script(script string) StatisticalScriptFacet { - f.script = script - return f -} - -func (f StatisticalScriptFacet) Param(name string, value interface{}) StatisticalScriptFacet { - f.params[name] = value - return f -} - -func (f StatisticalScriptFacet) addFilterFacetAndGlobal(source map[string]interface{}) { - if f.facetFilter != nil { - source["facet_filter"] = f.facetFilter.Source() - } - if f.nested != "" { - source["nested"] = f.nested - } - if f.global != nil { - source["global"] = *f.global - } - if f.mode != "" { - source["mode"] = f.mode - } -} - -func (f StatisticalScriptFacet) Source() interface{} { - source := make(map[string]interface{}) - f.addFilterFacetAndGlobal(source) - opts := make(map[string]interface{}) - source["statistical"] = opts - - opts["script"] = f.script - if f.lang != "" { - opts["lang"] = f.lang - } - if len(f.params) > 0 { - opts["params"] = f.params - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_facets_statistical_script_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_facets_statistical_script_test.go deleted file mode 100644 index c1b5c9b..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_facets_statistical_script_test.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestStatisticalScriptFacet(t *testing.T) { - f := NewStatisticalScriptFacet().Script("doc['num1'].value + doc['num2'].value") - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"statistical":{"script":"doc['num1'].value + doc['num2'].value"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestStatisticalScriptFacetWithGlobals(t *testing.T) { - f := NewStatisticalScriptFacet().Script("doc['num1'].value + doc['num2'].value"). - Global(true). - FacetFilter(NewTermFilter("user", "kimchy")) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"facet_filter":{"term":{"user":"kimchy"}},"global":true,"statistical":{"script":"doc['num1'].value + doc['num2'].value"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_facets_statistical_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_facets_statistical_test.go deleted file mode 100644 index 2ef10ed..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_facets_statistical_test.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestStatisticalFacet(t *testing.T) { - f := NewStatisticalFacet().Field("num1") - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"statistical":{"field":"num1"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestStatisticalFacetWithGlobals(t *testing.T) { - f := NewStatisticalFacet().Field("num1"). - Global(true). - FacetFilter(NewTermFilter("user", "kimchy")) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"facet_filter":{"term":{"user":"kimchy"}},"global":true,"statistical":{"field":"num1"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_facets_terms.go b/vendor/gopkg.in/olivere/elastic.v2/search_facets_terms.go deleted file mode 100644 index a013342..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_facets_terms.go +++ /dev/null @@ -1,203 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// Allow to specify field facets that return the N most frequent terms. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-facets-terms-facet.html -type TermsFacet struct { - facetFilter Filter - global *bool - nested string - mode string - - fieldName string - fields []string - size int - shardSize *int - allTerms *bool - exclude []string - regex string - regexFlags string - comparatorType string - script string - lang string - params map[string]interface{} - executionHint string - index string -} - -func NewTermsFacet() TermsFacet { - f := TermsFacet{ - size: 10, - fields: make([]string, 0), - exclude: make([]string, 0), - params: make(map[string]interface{}), - } - return f -} - -func (f TermsFacet) FacetFilter(filter Facet) TermsFacet { - f.facetFilter = filter - return f -} - -func (f TermsFacet) Global(global bool) TermsFacet { - f.global = &global - return f -} - -func (f TermsFacet) Nested(nested string) TermsFacet { - f.nested = nested - return f -} - -func (f TermsFacet) Mode(mode string) TermsFacet { - f.mode = mode - return f -} - -func (f TermsFacet) Field(fieldName string) TermsFacet { - f.fieldName = fieldName - return f -} - -func (f TermsFacet) Fields(fields ...string) TermsFacet { - f.fields = append(f.fields, fields...) - return f -} - -func (f TermsFacet) ScriptField(scriptField string) TermsFacet { - f.script = scriptField - return f -} - -func (f TermsFacet) Exclude(exclude ...string) TermsFacet { - f.exclude = append(f.exclude, exclude...) - return f -} - -func (f TermsFacet) Size(size int) TermsFacet { - f.size = size - return f -} - -func (f TermsFacet) ShardSize(shardSize int) TermsFacet { - f.shardSize = &shardSize - return f -} - -func (f TermsFacet) Regex(regex string) TermsFacet { - f.regex = regex - return f -} - -func (f TermsFacet) RegexFlags(regexFlags string) TermsFacet { - f.regexFlags = regexFlags - return f -} - -func (f TermsFacet) Order(order string) TermsFacet { - f.comparatorType = order - return f -} - -func (f TermsFacet) Comparator(comparatorType string) TermsFacet { - f.comparatorType = comparatorType - return f -} - -func (f TermsFacet) Script(script string) TermsFacet { - f.script = script - return f -} - -func (f TermsFacet) Lang(lang string) TermsFacet { - f.lang = lang - return f -} - -func (f TermsFacet) ExecutionHint(hint string) TermsFacet { - f.executionHint = hint - return f -} - -func (f TermsFacet) Param(name string, value interface{}) TermsFacet { - f.params[name] = value - return f -} - -func (f TermsFacet) AllTerms(allTerms bool) TermsFacet { - f.allTerms = &allTerms - return f -} - -func (f TermsFacet) Index(index string) TermsFacet { - f.index = index - return f -} - -func (f TermsFacet) addFilterFacetAndGlobal(source map[string]interface{}) { - if f.facetFilter != nil { - source["facet_filter"] = f.facetFilter.Source() - } - if f.nested != "" { - source["nested"] = f.nested - } - if f.global != nil { - source["global"] = *f.global - } - if f.mode != "" { - source["mode"] = f.mode - } -} - -func (f TermsFacet) Source() interface{} { - source := make(map[string]interface{}) - f.addFilterFacetAndGlobal(source) - opts := make(map[string]interface{}) - source["terms"] = opts - - if len(f.fields) > 0 { - if len(f.fields) == 1 { - opts["field"] = f.fields[0] - } else { - opts["fields"] = f.fields - } - } else { - opts["field"] = f.fieldName - } - opts["size"] = f.size - if f.shardSize != nil && *f.shardSize > f.size { - opts["shard_size"] = *f.shardSize - } - if len(f.exclude) > 0 { - opts["exclude"] = f.exclude - } - if f.regex != "" { - opts["regex"] = f.regex - if f.regexFlags != "" { - opts["regex_flags"] = f.regexFlags - } - } - if f.comparatorType != "" { - opts["order"] = f.comparatorType - } - if f.allTerms != nil { - opts["all_terms"] = *f.allTerms - } - if f.script != "" { - opts["script"] = f.script - if f.lang != "" { - opts["lang"] = f.lang - } - if len(f.params) > 0 { - opts["params"] = f.params - } - } - if f.executionHint != "" { - opts["execution_hint"] = f.executionHint - } - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_facets_terms_stats.go b/vendor/gopkg.in/olivere/elastic.v2/search_facets_terms_stats.go deleted file mode 100644 index 8f68f3d..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_facets_terms_stats.go +++ /dev/null @@ -1,142 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// The terms_stats facet combines both the terms and statistical allowing -// to compute stats computed on a field, per term value driven -// by another field. -// See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-facets-terms-stats-facet.html -type TermsStatsFacet struct { - facetFilter Filter - global *bool - nested string - mode string - keyField string - valueField string - size int - shardSize int - comparatorType string - script string - lang string - params map[string]interface{} -} - -func NewTermsStatsFacet() TermsStatsFacet { - return TermsStatsFacet{ - size: -1, - shardSize: -1, - params: make(map[string]interface{}), - } -} - -func (f TermsStatsFacet) FacetFilter(filter Facet) TermsStatsFacet { - f.facetFilter = filter - return f -} - -func (f TermsStatsFacet) Global(global bool) TermsStatsFacet { - f.global = &global - return f -} - -func (f TermsStatsFacet) Nested(nested string) TermsStatsFacet { - f.nested = nested - return f -} - -func (f TermsStatsFacet) Mode(mode string) TermsStatsFacet { - f.mode = mode - return f -} - -func (f TermsStatsFacet) KeyField(keyField string) TermsStatsFacet { - f.keyField = keyField - return f -} - -func (f TermsStatsFacet) ValueField(valueField string) TermsStatsFacet { - f.valueField = valueField - return f -} - -func (f TermsStatsFacet) Order(comparatorType string) TermsStatsFacet { - f.comparatorType = comparatorType - return f -} - -func (f TermsStatsFacet) Size(size int) TermsStatsFacet { - f.size = size - return f -} - -func (f TermsStatsFacet) ShardSize(shardSize int) TermsStatsFacet { - f.shardSize = shardSize - return f -} - -func (f TermsStatsFacet) AllTerms() TermsStatsFacet { - f.size = 0 - return f -} - -func (f TermsStatsFacet) ValueScript(script string) TermsStatsFacet { - f.script = script - return f -} - -func (f TermsStatsFacet) Param(name string, value interface{}) TermsStatsFacet { - f.params[name] = value - return f -} - -func (f TermsStatsFacet) addFilterFacetAndGlobal(source map[string]interface{}) { - if f.facetFilter != nil { - source["facet_filter"] = f.facetFilter.Source() - } - if f.nested != "" { - source["nested"] = f.nested - } - if f.global != nil { - source["global"] = *f.global - } - if f.mode != "" { - source["mode"] = f.mode - } -} - -func (f TermsStatsFacet) Source() interface{} { - source := make(map[string]interface{}) - f.addFilterFacetAndGlobal(source) - opts := make(map[string]interface{}) - source["terms_stats"] = opts - - opts["key_field"] = f.keyField - if f.valueField != "" { - opts["value_field"] = f.valueField - } - - if f.script != "" { - opts["value_script"] = f.script - if f.lang != "" { - opts["lang"] = f.lang - } - if len(f.params) > 0 { - opts["params"] = f.params - } - } - - if f.comparatorType != "" { - opts["order"] = f.comparatorType - } - - if f.size != -1 { - opts["size"] = f.size - } - if f.shardSize > f.size { - opts["shard_size"] = f.shardSize - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_facets_terms_stats_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_facets_terms_stats_test.go deleted file mode 100644 index 0395592..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_facets_terms_stats_test.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestTermsStatsFacet(t *testing.T) { - f := NewTermsStatsFacet().KeyField("tag").ValueField("price") - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"terms_stats":{"key_field":"tag","value_field":"price"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestTermsStatsFacetWithGlobals(t *testing.T) { - f := NewTermsStatsFacet().KeyField("tag").ValueField("price"). - Global(true). - FacetFilter(NewTermFilter("user", "kimchy")) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"facet_filter":{"term":{"user":"kimchy"}},"global":true,"terms_stats":{"key_field":"tag","value_field":"price"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_facets_terms_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_facets_terms_test.go deleted file mode 100644 index aaddbe7..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_facets_terms_test.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestTermsFacet(t *testing.T) { - f := NewTermsFacet().Field("tag").Size(10).Order("term") - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"terms":{"field":"tag","order":"term","size":10}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestTermsFacetWithGlobals(t *testing.T) { - f := NewTermsFacet().Field("tag").Size(10).Order("term"). - Global(true). - FacetFilter(NewTermFilter("user", "kimchy")) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"facet_filter":{"term":{"user":"kimchy"}},"global":true,"terms":{"field":"tag","order":"term","size":10}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_facets_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_facets_test.go deleted file mode 100644 index f102158..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_facets_test.go +++ /dev/null @@ -1,533 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - _ "encoding/json" - _ "net/http" - "testing" - "time" -) - -func TestSearchFacets(t *testing.T) { - client := setupTestClientAndCreateIndex(t) //, SetTraceLog(log.New(os.Stdout, "", 0))) - - tweet1 := tweet{ - User: "olivere", - Retweets: 108, - Message: "Welcome to Golang and Elasticsearch.", - Created: time.Date(2012, 12, 12, 17, 38, 34, 0, time.UTC), - } - tweet2 := tweet{ - User: "olivere", - Retweets: 0, - Message: "Another unrelated topic.", - Created: time.Date(2012, 10, 10, 8, 12, 03, 0, time.UTC), - } - tweet3 := tweet{ - User: "sandrae", - Retweets: 12, - Message: "Cycling is fun.", - Created: time.Date(2011, 11, 11, 10, 58, 12, 0, time.UTC), - } - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Match all should return all documents - all := NewMatchAllQuery() - - // Terms Facet by user name - userFacet := NewTermsFacet().Field("user").Size(10).Order("count") - - // Terms Facet with numerical key - retweetsNumFacet := NewTermsFacet().Field("retweets") - - // Range Facet by retweets - retweetsFacet := NewRangeFacet().Field("retweets").Lt(10).Between(10, 100).Gt(100) - - // Histogram Facet by retweets - retweetsHistoFacet := NewHistogramFacet().KeyField("retweets").Interval(100) - - // Histogram Facet with time interval by retweets - retweetsTimeHistoFacet := NewHistogramFacet().KeyField("retweets").TimeInterval("1m") - - // Date Histogram Facet by creation date - dateHisto := NewDateHistogramFacet().Field("created").Interval("year") - - // Date Histogram Facet with Key and Value field by creation date - dateHistoWithKeyValue := NewDateHistogramFacet(). - Interval("year"). - KeyField("created"). - ValueField("retweets") - - // Query Facet - queryFacet := NewQueryFacet().Query(NewTermQuery("user", "olivere")).Global(true) - - // Range Facet by creation date - dateRangeFacet := NewRangeFacet().Field("created").Lt("2012-01-01").Between("2012-01-01", "2013-01-01").Gt("2013-01-01") - - // Range Facet with time.Time by creation date - d20120101 := time.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC) - d20130101 := time.Date(2013, 1, 1, 0, 0, 0, 0, time.UTC) - dateRangeWithTimeFacet := NewRangeFacet().Field("created"). - Lt(d20120101). - Between(d20120101, d20130101). - Gt(d20130101) - - // Terms Stats Facet - termsStatsFacet := NewTermsStatsFacet().KeyField("user").ValueField("retweets") - - // Run query - searchResult, err := client.Search().Index(testIndexName). - Query(&all). - Facet("user", userFacet). - Facet("retweetsNum", retweetsNumFacet). - Facet("retweets", retweetsFacet). - Facet("retweetsHistogram", retweetsHistoFacet). - Facet("retweetsTimeHisto", retweetsTimeHistoFacet). - Facet("dateHisto", dateHisto). - Facet("createdWithKeyValue", dateHistoWithKeyValue). - Facet("queryFacet", queryFacet). - Facet("dateRangeFacet", dateRangeFacet). - Facet("dateRangeWithTimeFacet", dateRangeWithTimeFacet). - Facet("termsStatsFacet", termsStatsFacet). - Pretty(true). - Do() - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } - if searchResult.Hits.TotalHits != 3 { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 3, searchResult.Hits.TotalHits) - } - if len(searchResult.Hits.Hits) != 3 { - t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", 3, len(searchResult.Hits.Hits)) - } - if searchResult.Facets == nil { - t.Errorf("expected SearchResult.Facets != nil; got nil") - } - - // Search for non-existent facet field should return (nil, false) - facet, found := searchResult.Facets["no-such-field"] - if found { - t.Errorf("expected SearchResult.Facets.For(...) = %v; got %v", false, found) - } - if facet != nil { - t.Errorf("expected SearchResult.Facets.For(...) = nil; got %v", facet) - } - - // Search for existent facet should return (facet, true) - facet, found = searchResult.Facets["user"] - if !found { - t.Errorf("expected searchResult.Facets[\"user\"] = %v; got %v", true, found) - } - if facet == nil { - t.Errorf("expected searchResult.Facets[\"user\"] != nil; got nil") - } - - // Check facet details - if facet.Type != "terms" { - t.Errorf("expected searchResult.Facets[\"user\"].Type = %v; got %v", "terms", facet.Type) - } - if facet.Total != 3 { - t.Errorf("expected searchResult.Facets[\"user\"].Total = %v; got %v", 3, facet.Total) - } - if len(facet.Terms) != 2 { - t.Errorf("expected len(searchResult.Facets[\"user\"].Terms) = %v; got %v", 2, len(facet.Terms)) - } - - // Search for retweetsNum facet - facet, found = searchResult.Facets["retweetsNum"] - if !found { - t.Errorf("expected searchResult.Facets[\"retweetsNum\"] = %v; got %v", true, found) - } - if facet == nil { - t.Errorf("expected searchResult.Facets[\"retweetsNum\"] != nil; got nil") - } - if facet.Type != "terms" { - t.Errorf("expected searchResult.Facets[\"retweetsNum\"].Type = %v; got %v", "terms", facet.Type) - } - if facet.Total != 3 { - t.Errorf("expected searchResult.Facets[\"retweetsNum\"].Total = %v; got %v", 3, facet.Total) - } - if len(facet.Terms) != 3 { - t.Errorf("expected len(searchResult.Facets[\"retweetsNum\"].Terms) = %v; got %v", 2, len(facet.Terms)) - } - - // Search for range facet should return (facet, true) - facet, found = searchResult.Facets["retweets"] - if !found { - t.Errorf("expected searchResult.Facets[\"retweets\"] = %v; got %v", true, found) - } - if facet == nil { - t.Errorf("expected searchResult.Facets[\"retweets\"] != nil; got nil") - } - - // Check facet details - if facet.Type != "range" { - t.Errorf("expected searchResult.Facets[\"retweets\"].Type = %v; got %v", "range", facet.Type) - } - if len(facet.Ranges) != 3 { - t.Errorf("expected len(searchResult.Facets[\"retweets\"].Ranges) = %v; got %v", 3, len(facet.Ranges)) - } - - if facet.Ranges[0].Count != 1 { - t.Errorf("expected searchResult.Facets[\"retweets\"][0].Count = %v; got %v", 1, facet.Ranges[0].Count) - } - if facet.Ranges[0].TotalCount != 1 { - t.Errorf("expected searchResult.Facets[\"retweets\"][0].TotalCount = %v; got %v", 1, facet.Ranges[0].TotalCount) - } - if facet.Ranges[0].From != nil { - t.Errorf("expected searchResult.Facets[\"retweets\"][0].From = %v; got %v", nil, facet.Ranges[0].From) - } - if to := facet.Ranges[0].To; to == nil || (*to) != 10.0 { - t.Errorf("expected searchResult.Facets[\"retweets\"][0].To = %v; got %v", 10.0, to) - } - - if facet.Ranges[1].Count != 1 { - t.Errorf("expected searchResult.Facets[\"retweets\"][1].Count = %v; got %v", 1, facet.Ranges[1].Count) - } - if facet.Ranges[1].TotalCount != 1 { - t.Errorf("expected searchResult.Facets[\"retweets\"][1].TotalCount = %v; got %v", 1, facet.Ranges[1].TotalCount) - } - if from := facet.Ranges[1].From; from == nil || (*from) != 10.0 { - t.Errorf("expected searchResult.Facets[\"retweets\"][1].From = %v; got %v", 10.0, from) - } - if to := facet.Ranges[1].To; to == nil || (*to) != 100.0 { - t.Errorf("expected searchResult.Facets[\"retweets\"][1].To = %v; got %v", 100.0, facet.Ranges[1].To) - } - - if facet.Ranges[2].Count != 1 { - t.Errorf("expected searchResult.Facets[\"retweets\"][2].Count = %v; got %v", 1, facet.Ranges[2].Count) - } - if facet.Ranges[2].TotalCount != 1 { - t.Errorf("expected searchResult.Facets[\"retweets\"][2].TotalCount = %v; got %v", 1, facet.Ranges[2].TotalCount) - } - if from := facet.Ranges[2].From; from == nil || (*from) != 100.0 { - t.Errorf("expected searchResult.Facets[\"retweets\"][2].From = %v; got %v", 100.0, facet.Ranges[2].From) - } - if facet.Ranges[2].To != nil { - t.Errorf("expected searchResult.Facets[\"retweets\"][2].To = %v; got %v", nil, facet.Ranges[2].To) - } - - // Search for histogram facet should return (facet, true) - facet, found = searchResult.Facets["retweetsHistogram"] - if !found { - t.Errorf("expected searchResult.Facets[\"retweetsHistogram\"] = %v; got %v", true, found) - } - if facet == nil { - t.Errorf("expected searchResult.Facets[\"retweetsHistogram\"] != nil; got nil") - } - - // Check facet details - if facet.Type != "histogram" { - t.Errorf("expected searchResult.Facets[\"retweetsHistogram\"].Type = %v; got %v", "histogram", facet.Type) - } - if len(facet.Entries) != 2 { - t.Errorf("expected len(searchResult.Facets[\"retweetsHistogram\"].Entries) = %v; got %v", 3, len(facet.Entries)) - } - if facet.Entries[0].Key.(float64) != 0 { - t.Errorf("expected searchResult.Facets[\"retweetsHistogram\"].Entries[0].Key = %v; got %v", 0, facet.Entries[0].Key) - } - if facet.Entries[0].Count != 2 { - t.Errorf("expected searchResult.Facets[\"retweetsHistogram\"].Entries[0].Count = %v; got %v", 2, facet.Entries[0].Count) - } - if facet.Entries[1].Key.(float64) != 100 { - t.Errorf("expected searchResult.Facets[\"retweetsHistogram\"].Entries[1].Key = %v; got %v", 100, facet.Entries[1].Key) - } - if facet.Entries[1].Count != 1 { - t.Errorf("expected searchResult.Facets[\"retweetsHistogram\"].Entries[1].Count = %v; got %v", 1, facet.Entries[1].Count) - } - - // Search for histogram facet with time interval should return (facet, true) - facet, found = searchResult.Facets["retweetsTimeHisto"] - if !found { - t.Errorf("expected searchResult.Facets[\"retweetsTimeHisto\"] = %v; got %v", true, found) - } - if facet == nil { - t.Errorf("expected searchResult.Facets[\"retweetsTimeHisto\"] != nil; got nil") - } - - // Search for date histogram facet - facet, found = searchResult.Facets["dateHisto"] - if !found { - t.Errorf("expected searchResult.Facets[\"dateHisto\"] = %v; got %v", true, found) - } - if facet == nil { - t.Errorf("expected searchResult.Facets[\"dateHisto\"] != nil; got nil") - } - if facet.Entries[0].Time != 1293840000000 { - t.Errorf("expected searchResult.Facets[\"dateHisto\"].Entries[0].Time = %v; got %v", 1293840000000, facet.Entries[0].Time) - } - if facet.Entries[0].Count != 1 { - t.Errorf("expected searchResult.Facets[\"dateHisto\"].Entries[0].Count = %v; got %v", 1, facet.Entries[0].Count) - } - if facet.Entries[1].Time != 1325376000000 { - t.Errorf("expected searchResult.Facets[\"dateHisto\"].Entries[1].Time = %v; got %v", 1325376000000, facet.Entries[0].Time) - } - if facet.Entries[1].Count != 2 { - t.Errorf("expected searchResult.Facets[\"dateHisto\"].Entries[1].Count = %v; got %v", 2, facet.Entries[1].Count) - } - - // Search for date histogram with key/value fields facet - facet, found = searchResult.Facets["createdWithKeyValue"] - if !found { - t.Errorf("expected searchResult.Facets[\"createdWithKeyValue\"] = %v; got %v", true, found) - } - if facet == nil { - t.Errorf("expected searchResult.Facets[\"createdWithKeyValue\"] != nil; got nil") - } - if len(facet.Entries) != 2 { - t.Errorf("expected len(searchResult.Facets[\"createdWithKeyValue\"].Entries) = %v; got %v", 2, len(facet.Entries)) - } - if facet.Entries[0].Time != 1293840000000 { - t.Errorf("expected searchResult.Facets[\"createdWithKeyValue\"].Entries[0].Time = %v; got %v", 1293840000000, facet.Entries[0].Time) - } - if facet.Entries[0].Count != 1 { - t.Errorf("expected searchResult.Facets[\"createdWithKeyValue\"].Entries[0].Count = %v; got %v", 1, facet.Entries[0].Count) - } - if facet.Entries[0].Min.(float64) != 12.0 { - t.Errorf("expected searchResult.Facets[\"createdWithKeyValue\"].Entries[0].Min = %v; got %v", 12.0, facet.Entries[0].Min) - } - if facet.Entries[0].Max.(float64) != 12.0 { - t.Errorf("expected searchResult.Facets[\"createdWithKeyValue\"].Entries[0].Max = %v; got %v", 12.0, facet.Entries[0].Max) - } - if facet.Entries[0].Total != 12.0 { - t.Errorf("expected searchResult.Facets[\"createdWithKeyValue\"].Entries[0].Total = %v; got %v", 12.0, facet.Entries[0].Total) - } - if facet.Entries[0].TotalCount != 1 { - t.Errorf("expected searchResult.Facets[\"createdWithKeyValue\"].Entries[0].TotalCount = %v; got %v", 1, facet.Entries[0].TotalCount) - } - if facet.Entries[0].Mean != 12.0 { - t.Errorf("expected searchResult.Facets[\"createdWithKeyValue\"].Entries[0].Mean = %v; got %v", 12.0, facet.Entries[0].Mean) - } - if facet.Entries[1].Time != 1325376000000 { - t.Errorf("expected searchResult.Facets[\"createdWithKeyValue\"].Entries[1].Time = %v; got %v", 1325376000000, facet.Entries[1].Time) - } - if facet.Entries[1].Count != 2 { - t.Errorf("expected searchResult.Facets[\"createdWithKeyValue\"].Entries[1].Count = %v; got %v", 2, facet.Entries[1].Count) - } - if facet.Entries[1].Min.(float64) != 0.0 { - t.Errorf("expected searchResult.Facets[\"createdWithKeyValue\"].Entries[1].Min = %v; got %v", 0.0, facet.Entries[1].Min) - } - if facet.Entries[1].Max.(float64) != 108.0 { - t.Errorf("expected searchResult.Facets[\"createdWithKeyValue\"].Entries[1].Max = %v; got %v", 108.0, facet.Entries[1].Max) - } - if facet.Entries[1].Total != 108.0 { - t.Errorf("expected searchResult.Facets[\"createdWithKeyValue\"].Entries[1].Total = %v; got %v", 108.0, facet.Entries[1].Total) - } - if facet.Entries[1].TotalCount != 2 { - t.Errorf("expected searchResult.Facets[\"createdWithKeyValue\"].Entries[1].TotalCount = %v; got %v", 2, facet.Entries[1].TotalCount) - } - if facet.Entries[1].Mean != 54.0 { - t.Errorf("expected searchResult.Facets[\"createdWithKeyValue\"].Entries[1].Mean = %v; got %v", 54.0, facet.Entries[1].Mean) - } - - // Search for date range facet - facet, found = searchResult.Facets["dateRangeFacet"] - if !found { - t.Errorf("expected searchResult.Facets[\"dateRangeFacet\"] = %v; got %v", true, found) - } - if facet == nil { - t.Errorf("expected searchResult.Facets[\"dateRangeFacet\"] != nil; got nil") - } - if len(facet.Ranges) != 3 { - t.Errorf("expected len(searchResult.Facets[\"dateRangeFacet\"].Ranges) = %v; got %v", 3, len(facet.Ranges)) - } - if facet.Ranges[0].From != nil { - t.Fatalf("expected searchResult.Facets[\"dateRangeFacet\"].Ranges[0].From to be nil") - } - if facet.Ranges[0].To == nil { - t.Fatalf("expected searchResult.Facets[\"dateRangeFacet\"].Ranges[0].To to be != nil") - } - if *facet.Ranges[0].To != 1.325376e+12 { - t.Errorf("expected searchResult.Facets[\"dateRangeFacet\"].Ranges[0].To = %v; got %v", 1.325376e+12, *facet.Ranges[0].To) - } - if facet.Ranges[0].ToStr == nil { - t.Fatalf("expected searchResult.Facets[\"dateRangeFacet\"].Ranges[0].ToStr to be != nil") - } - if *facet.Ranges[0].ToStr != "2012-01-01" { - t.Errorf("expected searchResult.Facets[\"dateRangeFacet\"].Ranges[0].ToStr = %v; got %v", "2012-01-01", *facet.Ranges[0].ToStr) - } - if facet.Ranges[1].From == nil { - t.Fatalf("expected searchResult.Facets[\"dateRangeFacet\"].Ranges[1].From to be != nil") - } - if *facet.Ranges[1].From != 1.325376e+12 { - t.Errorf("expected searchResult.Facets[\"dateRangeFacet\"].Ranges[1].From = %v; got %v", 1.325376e+12, *facet.Ranges[1].From) - } - if facet.Ranges[1].FromStr == nil { - t.Fatalf("expected searchResult.Facets[\"dateRangeFacet\"].Ranges[1].FromStr to be != nil") - } - if *facet.Ranges[1].FromStr != "2012-01-01" { - t.Errorf("expected searchResult.Facets[\"dateRangeFacet\"].Ranges[1].FromStr = %v; got %v", "2012-01-01", *facet.Ranges[1].FromStr) - } - if facet.Ranges[1].To == nil { - t.Fatalf("expected searchResult.Facets[\"dateRangeFacet\"].Ranges[1].To to be != nil") - } - if *facet.Ranges[1].To != 1.3569984e+12 { - t.Errorf("expected searchResult.Facets[\"dateRangeFacet\"].Ranges[1].To = %v; got %v", 1.3569984e+12, *facet.Ranges[1].To) - } - if facet.Ranges[1].ToStr == nil { - t.Fatalf("expected searchResult.Facets[\"dateRangeFacet\"].Ranges[1].ToStr to be != nil") - } - if *facet.Ranges[1].ToStr != "2013-01-01" { - t.Errorf("expected searchResult.Facets[\"dateRangeFacet\"].Ranges[1].ToStr = %v; got %v", "2013-01-01", *facet.Ranges[1].ToStr) - } - if facet.Ranges[2].To != nil { - t.Fatalf("expected searchResult.Facets[\"dateRangeFacet\"].Ranges[2].To to be nil") - } - if facet.Ranges[2].From == nil { - t.Fatalf("expected searchResult.Facets[\"dateRangeFacet\"].Ranges[2].From to be != nil") - } - if *facet.Ranges[2].From != 1.3569984e+12 { - t.Errorf("expected searchResult.Facets[\"dateRangeFacet\"].Ranges[2].From = %v; got %v", 1.3569984e+12, *facet.Ranges[2].From) - } - if facet.Ranges[2].FromStr == nil { - t.Fatalf("expected searchResult.Facets[\"dateRangeFacet\"].Ranges[2].FromStr to be != nil") - } - if *facet.Ranges[2].FromStr != "2013-01-01" { - t.Errorf("expected searchResult.Facets[\"dateRangeFacet\"].Ranges[2].FromStr = %v; got %v", "2013-01-01", *facet.Ranges[2].FromStr) - } - - // Search for date range facet - facet, found = searchResult.Facets["dateRangeWithTimeFacet"] - if !found { - t.Errorf("expected searchResult.Facets[\"dateRangeWithTimeFacet\"] = %v; got %v", true, found) - } - if facet == nil { - t.Errorf("expected searchResult.Facets[\"dateRangeWithTimeFacet\"] != nil; got nil") - } - if len(facet.Ranges) != 3 { - t.Errorf("expected len(searchResult.Facets[\"dateRangeWithTimeFacet\"].Ranges) = %v; got %v", 3, len(facet.Ranges)) - } - if facet.Ranges[0].From != nil { - t.Fatalf("expected searchResult.Facets[\"dateRangeWithTimeFacet\"].Ranges[0].From to be nil") - } - if facet.Ranges[0].To == nil { - t.Fatalf("expected searchResult.Facets[\"dateRangeWithTimeFacet\"].Ranges[0].To to be != nil") - } - if *facet.Ranges[0].To != 1.325376e+12 { - t.Errorf("expected searchResult.Facets[\"dateRangeWithTimeFacet\"].Ranges[0].To = %v; got %v", 1.325376e+12, *facet.Ranges[0].To) - } - if facet.Ranges[0].ToStr == nil { - t.Fatalf("expected searchResult.Facets[\"dateRangeWithTimeFacet\"].Ranges[0].ToStr to be != nil") - } - if *facet.Ranges[0].ToStr != "2012-01-01T00:00:00Z" { - t.Errorf("expected searchResult.Facets[\"dateRangeWithTimeFacet\"].Ranges[0].ToStr = %v; got %v", "2012-01-01T00:00:00Z", *facet.Ranges[0].ToStr) - } - if facet.Ranges[1].From == nil { - t.Fatalf("expected searchResult.Facets[\"dateRangeWithTimeFacet\"].Ranges[1].From to be != nil") - } - if *facet.Ranges[1].From != 1.325376e+12 { - t.Errorf("expected searchResult.Facets[\"dateRangeWithTimeFacet\"].Ranges[1].From = %v; got %v", 1.325376e+12, *facet.Ranges[1].From) - } - if facet.Ranges[1].FromStr == nil { - t.Fatalf("expected searchResult.Facets[\"dateRangeWithTimeFacet\"].Ranges[1].FromStr to be != nil") - } - if *facet.Ranges[1].FromStr != "2012-01-01T00:00:00Z" { - t.Errorf("expected searchResult.Facets[\"dateRangeWithTimeFacet\"].Ranges[1].FromStr = %v; got %v", "2012-01-01T00:00:00Z", *facet.Ranges[1].FromStr) - } - if facet.Ranges[1].To == nil { - t.Fatalf("expected searchResult.Facets[\"dateRangeWithTimeFacet\"].Ranges[1].To to be != nil") - } - if *facet.Ranges[1].To != 1.3569984e+12 { - t.Errorf("expected searchResult.Facets[\"dateRangeWithTimeFacet\"].Ranges[1].To = %v; got %v", 1.3569984e+12, *facet.Ranges[1].To) - } - if facet.Ranges[1].ToStr == nil { - t.Fatalf("expected searchResult.Facets[\"dateRangeWithTimeFacet\"].Ranges[1].ToStr to be != nil") - } - if *facet.Ranges[1].ToStr != "2013-01-01T00:00:00Z" { - t.Errorf("expected searchResult.Facets[\"dateRangeWithTimeFacet\"].Ranges[1].ToStr = %v; got %v", "2013-01-01T00:00:00Z", *facet.Ranges[1].ToStr) - } - if facet.Ranges[2].To != nil { - t.Fatalf("expected searchResult.Facets[\"dateRangeWithTimeFacet\"].Ranges[2].To to be nil") - } - if facet.Ranges[2].From == nil { - t.Fatalf("expected searchResult.Facets[\"dateRangeWithTimeFacet\"].Ranges[2].From to be != nil") - } - if *facet.Ranges[2].From != 1.3569984e+12 { - t.Errorf("expected searchResult.Facets[\"dateRangeWithTimeFacet\"].Ranges[2].From = %v; got %v", 1.3569984e+12, *facet.Ranges[2].From) - } - if facet.Ranges[2].FromStr == nil { - t.Fatalf("expected searchResult.Facets[\"dateRangeWithTimeFacet\"].Ranges[2].FromStr to be != nil") - } - if *facet.Ranges[2].FromStr != "2013-01-01T00:00:00Z" { - t.Errorf("expected searchResult.Facets[\"dateRangeWithTimeFacet\"].Ranges[2].FromStr = %v; got %v", "2013-01-01T00:00:00Z", *facet.Ranges[2].FromStr) - } - - // Search for terms_stats facet - facet, found = searchResult.Facets["termsStatsFacet"] - if !found { - t.Errorf("expected searchResult.Facets[\"termsStatsFacet\"] = %v; got %v", true, found) - } - if facet == nil { - t.Errorf("expected searchResult.Facets[\"termsStatsFacet\"] != nil; got nil") - } - - // Check facet details - if got, want := facet.Type, "terms_stats"; got != want { - t.Errorf("expected searchResult.Facets[\"termsStatsFacet\"].Type = %v; got %v", want, got) - } - if got, want := len(facet.Terms), 2; got != want { - t.Errorf("expected len(searchResult.Facets[\"termsStatsFacet\"].Terms) = %v; got %v", want, got) - } - if got, want := facet.Terms[0].Term, "olivere"; got != want { - t.Errorf("expected searchResult.Facets[\"termsStatsFacet\"].Terms[0].Term = %v; got %v", want, got) - } - if got, want := facet.Terms[0].Count, 2; got != want { - t.Errorf("expected searchResult.Facets[\"termsStatsFacet\"].Terms[0].Count = %v; got %v", want, got) - } - if got, want := facet.Terms[0].TotalCount, 2; got != want { - t.Errorf("expected searchResult.Facets[\"termsStatsFacet\"].Terms[0].TotalCount = %v; got %v", want, got) - } - if got, want := facet.Terms[0].Min, 0.0; got != want { - t.Errorf("expected searchResult.Facets[\"termsStatsFacet\"].Terms[0].Min = %v; got %v", want, got) - } - if got, want := facet.Terms[0].Max, 108.0; got != want { - t.Errorf("expected searchResult.Facets[\"termsStatsFacet\"].Terms[0].Max = %v; got %v", want, got) - } - if got, want := facet.Terms[0].Mean, 54.0; got != want { - t.Errorf("expected searchResult.Facets[\"termsStatsFacet\"].Terms[0].Mean = %v; got %v", want, got) - } - if got, want := facet.Terms[1].Term, "sandrae"; got != want { - t.Errorf("expected searchResult.Facets[\"termsStatsFacet\"].Terms[1].Term = %v; got %v", want, got) - } - if got, want := facet.Terms[1].Count, 1; got != want { - t.Errorf("expected searchResult.Facets[\"termsStatsFacet\"].Terms[1].Count = %v; got %v", want, got) - } - if got, want := facet.Terms[1].TotalCount, 1; got != want { - t.Errorf("expected searchResult.Facets[\"termsStatsFacet\"].Terms[1].TotalCount = %v; got %v", want, got) - } - if got, want := facet.Terms[1].Min, 12.0; got != want { - t.Errorf("expected searchResult.Facets[\"termsStatsFacet\"].Terms[1].Min = %v; got %v", want, got) - } - if got, want := facet.Terms[1].Max, 12.0; got != want { - t.Errorf("expected searchResult.Facets[\"termsStatsFacet\"].Terms[1].Max = %v; got %v", want, got) - } - if got, want := facet.Terms[1].Mean, 12.0; got != want { - t.Errorf("expected searchResult.Facets[\"termsStatsFacet\"].Terms[1].Mean = %v; got %v", want, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_and.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_and.go deleted file mode 100644 index 60c0117..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_and.go +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// A filter that matches documents using AND boolean operator -// on other filters. Can be placed within queries that accept a filter. -// For details, see: -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-and-filter.html -type AndFilter struct { - filters []Filter - cache *bool - cacheKey string - filterName string -} - -func NewAndFilter(filters ...Filter) AndFilter { - f := AndFilter{ - filters: make([]Filter, 0), - } - if len(filters) > 0 { - f.filters = append(f.filters, filters...) - } - return f -} - -func (f AndFilter) Add(filter Filter) AndFilter { - f.filters = append(f.filters, filter) - return f -} - -func (f AndFilter) Cache(cache bool) AndFilter { - f.cache = &cache - return f -} - -func (f AndFilter) CacheKey(cacheKey string) AndFilter { - f.cacheKey = cacheKey - return f -} - -func (f AndFilter) FilterName(filterName string) AndFilter { - f.filterName = filterName - return f -} - -func (f AndFilter) Source() interface{} { - // { - // "and" : [ - // ... filters ... - // ] - // } - - source := make(map[string]interface{}) - - params := make(map[string]interface{}) - source["and"] = params - - filters := make([]interface{}, 0) - for _, filter := range f.filters { - filters = append(filters, filter.Source()) - } - params["filters"] = filters - - if f.cache != nil { - params["_cache"] = *f.cache - } - if f.cacheKey != "" { - params["_cache_key"] = f.cacheKey - } - if f.filterName != "" { - params["_name"] = f.filterName - } - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_and_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_and_test.go deleted file mode 100644 index c1fb346..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_and_test.go +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestAndFilter(t *testing.T) { - f := NewAndFilter() - postDateFilter := NewRangeFilter("postDate").From("2010-03-01").To("2010-04-01") - f = f.Add(postDateFilter) - prefixFilter := NewPrefixFilter("name.second", "ba") - f = f.Add(prefixFilter) - f = f.Cache(true) - f = f.CacheKey("MyAndFilter") - f = f.FilterName("MyFilterName") - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"and":{"_cache":true,"_cache_key":"MyAndFilter","_name":"MyFilterName","filters":[{"range":{"postDate":{"from":"2010-03-01","include_lower":true,"include_upper":true,"to":"2010-04-01"}}},{"prefix":{"name.second":"ba"}}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestNewAndFilter1(t *testing.T) { - f := NewAndFilter(NewTermFilter("user", "olivere")) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"and":{"filters":[{"term":{"user":"olivere"}}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestNewAndFilter2(t *testing.T) { - tf := NewTermsFilter("user", "oliver", "test") - mf := NewMissingFilter("user") - f := NewAndFilter(tf, mf) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"and":{"filters":[{"terms":{"user":["oliver","test"]}},{"missing":{"field":"user"}}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_bool.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_bool.go deleted file mode 100644 index 75d1e86..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_bool.go +++ /dev/null @@ -1,135 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// A filter that matches documents matching boolean combinations -// of other queries. Similar in concept to Boolean query, -// except that the clauses are other filters. -// Can be placed within queries that accept a filter. -// For more details, see: -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-bool-filter.html -type BoolFilter struct { - mustClauses []Filter - shouldClauses []Filter - mustNotClauses []Filter - cache *bool - cacheKey string - filterName string -} - -// NewBoolFilter creates a new bool filter. -func NewBoolFilter() BoolFilter { - f := BoolFilter{ - mustClauses: make([]Filter, 0), - shouldClauses: make([]Filter, 0), - mustNotClauses: make([]Filter, 0), - } - return f -} - -func (f BoolFilter) Must(filters ...Filter) BoolFilter { - f.mustClauses = append(f.mustClauses, filters...) - return f -} - -func (f BoolFilter) MustNot(filters ...Filter) BoolFilter { - f.mustNotClauses = append(f.mustNotClauses, filters...) - return f -} - -func (f BoolFilter) Should(filters ...Filter) BoolFilter { - f.shouldClauses = append(f.shouldClauses, filters...) - return f -} - -func (f BoolFilter) FilterName(filterName string) BoolFilter { - f.filterName = filterName - return f -} - -func (f BoolFilter) Cache(cache bool) BoolFilter { - f.cache = &cache - return f -} - -func (f BoolFilter) CacheKey(cacheKey string) BoolFilter { - f.cacheKey = cacheKey - return f -} - -// Creates the query source for the bool query. -func (f BoolFilter) Source() interface{} { - // { - // "bool" : { - // "must" : { - // "term" : { "user" : "kimchy" } - // }, - // "must_not" : { - // "range" : { - // "age" : { "from" : 10, "to" : 20 } - // } - // }, - // "should" : [ - // { - // "term" : { "tag" : "wow" } - // }, - // { - // "term" : { "tag" : "elasticsearch" } - // } - // ], - // "_cache" : true - // } - // } - - source := make(map[string]interface{}) - - boolClause := make(map[string]interface{}) - source["bool"] = boolClause - - // must - if len(f.mustClauses) == 1 { - boolClause["must"] = f.mustClauses[0].Source() - } else if len(f.mustClauses) > 1 { - clauses := make([]interface{}, 0) - for _, subQuery := range f.mustClauses { - clauses = append(clauses, subQuery.Source()) - } - boolClause["must"] = clauses - } - - // must_not - if len(f.mustNotClauses) == 1 { - boolClause["must_not"] = f.mustNotClauses[0].Source() - } else if len(f.mustNotClauses) > 1 { - clauses := make([]interface{}, 0) - for _, subQuery := range f.mustNotClauses { - clauses = append(clauses, subQuery.Source()) - } - boolClause["must_not"] = clauses - } - - // should - if len(f.shouldClauses) == 1 { - boolClause["should"] = f.shouldClauses[0].Source() - } else if len(f.shouldClauses) > 1 { - clauses := make([]interface{}, 0) - for _, subQuery := range f.shouldClauses { - clauses = append(clauses, subQuery.Source()) - } - boolClause["should"] = clauses - } - - if f.filterName != "" { - boolClause["_name"] = f.filterName - } - if f.cache != nil { - boolClause["_cache"] = *f.cache - } - if f.cacheKey != "" { - boolClause["_cache_key"] = f.cacheKey - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_bool_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_bool_test.go deleted file mode 100644 index 089dfd8..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_bool_test.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestBoolFilter(t *testing.T) { - f := NewBoolFilter() - f = f.Must(NewTermFilter("tag", "wow")) - f = f.MustNot(NewRangeFilter("age").From(10).To(20)) - f = f.Should(NewTermFilter("tag", "sometag"), NewTermFilter("tag", "sometagtag")) - f = f.Cache(true) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"bool":{"_cache":true,"must":{"term":{"tag":"wow"}},"must_not":{"range":{"age":{"from":10,"include_lower":true,"include_upper":true,"to":20}}},"should":[{"term":{"tag":"sometag"}},{"term":{"tag":"sometagtag"}}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_exists.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_exists.go deleted file mode 100644 index 7785880..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_exists.go +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// Filters documents where a specific field has a value in them. -// For details, see: -// http://www.elasticsearch.org/guide/reference/query-dsl/exists-filter.html -type ExistsFilter struct { - Filter - name string - filterName string -} - -func NewExistsFilter(name string) ExistsFilter { - f := ExistsFilter{name: name} - return f -} - -func (f ExistsFilter) FilterName(filterName string) ExistsFilter { - f.filterName = filterName - return f -} - -func (f ExistsFilter) Source() interface{} { - // { - // "exists" : { - // "field" : "..." - // } - // } - - source := make(map[string]interface{}) - params := make(map[string]interface{}) - source["exists"] = params - params["field"] = f.name - if f.filterName != "" { - params["_name"] = f.filterName - } - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_exists_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_exists_test.go deleted file mode 100644 index 8931ec3..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_exists_test.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestExistsFilter(t *testing.T) { - f := NewExistsFilter("user").FilterName("_my_filter") - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"exists":{"_name":"_my_filter","field":"user"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_geo_distance.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_geo_distance.go deleted file mode 100644 index 17f8812..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_geo_distance.go +++ /dev/null @@ -1,136 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// GeoDistanceFilter filters documents that include only hits that exists -// within a specific distance from a geo point. -// -// For more details, see: -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-geo-distance-filter.html -type GeoDistanceFilter struct { - Filter - name string - distance string - lat float64 - lon float64 - geohash string - distanceType string - optimizeBbox string - cache *bool - cacheKey string - filterName string -} - -// NewGeoDistanceFilter creates a new GeoDistanceFilter. -func NewGeoDistanceFilter(name string) GeoDistanceFilter { - f := GeoDistanceFilter{name: name} - return f -} - -func (f GeoDistanceFilter) Distance(distance string) GeoDistanceFilter { - f.distance = distance - return f -} - -func (f GeoDistanceFilter) GeoPoint(point *GeoPoint) GeoDistanceFilter { - f.lat = point.Lat - f.lon = point.Lon - return f -} - -func (f GeoDistanceFilter) Point(lat, lon float64) GeoDistanceFilter { - f.lat = lat - f.lon = lon - return f -} - -func (f GeoDistanceFilter) Lat(lat float64) GeoDistanceFilter { - f.lat = lat - return f -} - -func (f GeoDistanceFilter) Lon(lon float64) GeoDistanceFilter { - f.lon = lon - return f -} - -func (f GeoDistanceFilter) GeoHash(geohash string) GeoDistanceFilter { - f.geohash = geohash - return f -} - -func (f GeoDistanceFilter) DistanceType(distanceType string) GeoDistanceFilter { - f.distanceType = distanceType - return f -} - -func (f GeoDistanceFilter) OptimizeBbox(optimizeBbox string) GeoDistanceFilter { - f.optimizeBbox = optimizeBbox - return f -} - -func (f GeoDistanceFilter) Cache(cache bool) GeoDistanceFilter { - f.cache = &cache - return f -} - -func (f GeoDistanceFilter) CacheKey(cacheKey string) GeoDistanceFilter { - f.cacheKey = cacheKey - return f -} - -func (f GeoDistanceFilter) FilterName(filterName string) GeoDistanceFilter { - f.filterName = filterName - return f -} - -// Creates the query source for the geo_distance filter. -func (f GeoDistanceFilter) Source() interface{} { - // { - // "geo_distance" : { - // "distance" : "200km", - // "pin.location" : { - // "lat" : 40, - // "lon" : -70 - // } - // } - // } - - source := make(map[string]interface{}) - - params := make(map[string]interface{}) - - if f.geohash != "" { - params[f.name] = f.geohash - } else { - location := make(map[string]interface{}) - location["lat"] = f.lat - location["lon"] = f.lon - params[f.name] = location - } - - if f.distance != "" { - params["distance"] = f.distance - } - if f.distanceType != "" { - params["distance_type"] = f.distanceType - } - if f.optimizeBbox != "" { - params["optimize_bbox"] = f.optimizeBbox - } - if f.cache != nil { - params["_cache"] = *f.cache - } - if f.cacheKey != "" { - params["_cache_key"] = f.cacheKey - } - if f.filterName != "" { - params["_name"] = f.filterName - } - - source["geo_distance"] = params - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_geo_distance_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_geo_distance_test.go deleted file mode 100644 index 3eca109..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_geo_distance_test.go +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestGeoDistanceFilter(t *testing.T) { - f := NewGeoDistanceFilter("pin.location") - f = f.Lat(40) - f = f.Lon(-70) - f = f.Distance("200km") - f = f.DistanceType("plane") - f = f.OptimizeBbox("memory") - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"geo_distance":{"distance":"200km","distance_type":"plane","optimize_bbox":"memory","pin.location":{"lat":40,"lon":-70}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestGeoDistanceFilterWithGeoPoint(t *testing.T) { - f := NewGeoDistanceFilter("pin.location") - f = f.GeoPoint(GeoPointFromLatLon(40, -70)) - f = f.Distance("200km") - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"geo_distance":{"distance":"200km","pin.location":{"lat":40,"lon":-70}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestGeoDistanceFilterWithGeoHash(t *testing.T) { - f := NewGeoDistanceFilter("pin.location") - f = f.GeoHash("drm3btev3e86") - f = f.Distance("12km") - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"geo_distance":{"distance":"12km","pin.location":"drm3btev3e86"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_geo_polygon.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_geo_polygon.go deleted file mode 100644 index 7032bcc..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_geo_polygon.go +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// A filter allowing to include hits that only fall within a polygon of points. -// For details, see: -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-geo-polygon-filter.html -type GeoPolygonFilter struct { - Filter - name string - points []*GeoPoint - cache *bool - cacheKey string - filterName string -} - -func NewGeoPolygonFilter(name string) GeoPolygonFilter { - f := GeoPolygonFilter{name: name, points: make([]*GeoPoint, 0)} - return f -} - -func (f GeoPolygonFilter) Cache(cache bool) GeoPolygonFilter { - f.cache = &cache - return f -} - -func (f GeoPolygonFilter) CacheKey(cacheKey string) GeoPolygonFilter { - f.cacheKey = cacheKey - return f -} - -func (f GeoPolygonFilter) FilterName(filterName string) GeoPolygonFilter { - f.filterName = filterName - return f -} - -func (f GeoPolygonFilter) AddPoint(point *GeoPoint) GeoPolygonFilter { - f.points = append(f.points, point) - return f -} - -func (f GeoPolygonFilter) Source() interface{} { - // "geo_polygon" : { - // "person.location" : { - // "points" : [ - // {"lat" : 40, "lon" : -70}, - // {"lat" : 30, "lon" : -80}, - // {"lat" : 20, "lon" : -90} - // ] - // } - // } - source := make(map[string]interface{}) - - params := make(map[string]interface{}) - source["geo_polygon"] = params - - polygon := make(map[string]interface{}) - params[f.name] = polygon - - points := make([]interface{}, 0) - for _, point := range f.points { - points = append(points, point.Source()) - } - polygon["points"] = points - - if f.filterName != "" { - params["_name"] = f.filterName - } - - if f.cache != nil { - params["_cache"] = *f.cache - } - - if f.cacheKey != "" { - params["_cache_key"] = f.cacheKey - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_geo_polygon_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_geo_polygon_test.go deleted file mode 100644 index c33a02f..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_geo_polygon_test.go +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestGeoPolygonFilter(t *testing.T) { - f := NewGeoPolygonFilter("person.location") - f = f.AddPoint(&GeoPoint{Lat: 40, Lon: -70}) - f = f.AddPoint(GeoPointFromLatLon(30, -80)) - point, err := GeoPointFromString("20,-90") - if err != nil { - t.Fatalf("GeoPointFromString failed: %v", err) - } - f = f.AddPoint(point) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"geo_polygon":{"person.location":{"points":[{"lat":40,"lon":-70},{"lat":30,"lon":-80},{"lat":20,"lon":-90}]}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_has_child.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_has_child.go deleted file mode 100644 index 6d291d1..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_has_child.go +++ /dev/null @@ -1,125 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// The has_child query works the same as the has_child filter, -// by automatically wrapping the filter with a constant_score -// (when using the default score type). -// For more details, see -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-has-child-query.html -type HasChildFilter struct { - filter Filter - query Query - childType string - filterName string - cache *bool - cacheKey string - shortCircuitCutoff *int - minChildren *int - maxChildren *int - innerHit *InnerHit -} - -// NewHasChildFilter creates a new has_child query. -func NewHasChildFilter(childType string) HasChildFilter { - f := HasChildFilter{ - childType: childType, - } - return f -} - -func (f HasChildFilter) Query(query Query) HasChildFilter { - f.query = query - return f -} - -func (f HasChildFilter) Filter(filter Filter) HasChildFilter { - f.filter = filter - return f -} - -func (f HasChildFilter) FilterName(filterName string) HasChildFilter { - f.filterName = filterName - return f -} - -func (f HasChildFilter) Cache(cache bool) HasChildFilter { - f.cache = &cache - return f -} - -func (f HasChildFilter) CacheKey(cacheKey string) HasChildFilter { - f.cacheKey = cacheKey - return f -} - -func (f HasChildFilter) ShortCircuitCutoff(shortCircuitCutoff int) HasChildFilter { - f.shortCircuitCutoff = &shortCircuitCutoff - return f -} - -func (f HasChildFilter) MinChildren(minChildren int) HasChildFilter { - f.minChildren = &minChildren - return f -} - -func (f HasChildFilter) MaxChildren(maxChildren int) HasChildFilter { - f.maxChildren = &maxChildren - return f -} - -func (f HasChildFilter) InnerHit(innerHit *InnerHit) HasChildFilter { - f.innerHit = innerHit - return f -} - -// Source returns the JSON document for the filter. -func (f HasChildFilter) Source() interface{} { - // { - // "has_child" : { - // "type" : "blog_tag", - // "query" : { - // "term" : { - // "tag" : "something" - // } - // } - // } - // } - - source := make(map[string]interface{}) - - filter := make(map[string]interface{}) - source["has_child"] = filter - - if f.query != nil { - filter["query"] = f.query.Source() - } else if f.filter != nil { - filter["filter"] = f.filter.Source() - } - - filter["type"] = f.childType - if f.filterName != "" { - filter["_name"] = f.filterName - } - if f.cache != nil { - filter["_cache"] = *f.cache - } - if f.cacheKey != "" { - filter["_cache_key"] = f.cacheKey - } - if f.shortCircuitCutoff != nil { - filter["short_circuit_cutoff"] = *f.shortCircuitCutoff - } - if f.minChildren != nil { - filter["min_children"] = *f.minChildren - } - if f.maxChildren != nil { - filter["max_children"] = *f.maxChildren - } - if f.innerHit != nil { - filter["inner_hits"] = f.innerHit.Source() - } - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_has_child_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_has_child_test.go deleted file mode 100644 index 34b55fd..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_has_child_test.go +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestHasChildFilter(t *testing.T) { - f := NewHasChildFilter("blog_tag") - f = f.Query(NewTermQuery("tag", "something")) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"has_child":{"query":{"term":{"tag":"something"}},"type":"blog_tag"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestHasChildFilterWithInnerHits(t *testing.T) { - f := NewHasChildFilter("blog_tag") - f = f.Query(NewTermQuery("tag", "something")) - f = f.InnerHit(NewInnerHit()) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"has_child":{"inner_hits":{},"query":{"term":{"tag":"something"}},"type":"blog_tag"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestHasChildFilterWithInnerHitsName(t *testing.T) { - f := NewHasChildFilter("blog_tag") - f = f.Query(NewTermQuery("tag", "something")) - f = f.InnerHit(NewInnerHit().Name("comments")) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"has_child":{"inner_hits":{"name":"comments"},"query":{"term":{"tag":"something"}},"type":"blog_tag"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestHasChildFilterWithInnerHitsQuery(t *testing.T) { - f := NewHasChildFilter("blog_tag") - f = f.Query(NewTermQuery("tag", "something")) - hit := NewInnerHit().Query(NewTermQuery("user", "olivere")) - f = f.InnerHit(hit) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"has_child":{"inner_hits":{"query":{"term":{"user":"olivere"}}},"query":{"term":{"tag":"something"}},"type":"blog_tag"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_has_parent.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_has_parent.go deleted file mode 100644 index bfbbaa3..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_has_parent.go +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// The has_parent filter accepts a query and a parent type. -// The query is executed in the parent document space, -// which is specified by the parent type. -// This filter return child documents which associated parents have matched. -// For more details, see -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-has-parent-filter.html -type HasParentFilter struct { - filter Filter - query Query - parentType string - filterName string - cache *bool - cacheKey string - innerHit *InnerHit -} - -// NewHasParentFilter creates a new has_parent filter. -func NewHasParentFilter(parentType string) HasParentFilter { - f := HasParentFilter{ - parentType: parentType, - } - return f -} - -func (f HasParentFilter) Query(query Query) HasParentFilter { - f.query = query - return f -} - -func (f HasParentFilter) Filter(filter Filter) HasParentFilter { - f.filter = filter - return f -} - -func (f HasParentFilter) FilterName(filterName string) HasParentFilter { - f.filterName = filterName - return f -} - -func (f HasParentFilter) Cache(cache bool) HasParentFilter { - f.cache = &cache - return f -} - -func (f HasParentFilter) CacheKey(cacheKey string) HasParentFilter { - f.cacheKey = cacheKey - return f -} - -func (f HasParentFilter) InnerHit(innerHit *InnerHit) HasParentFilter { - f.innerHit = innerHit - return f -} - -// Source returns the JSON document for the filter. -func (f HasParentFilter) Source() interface{} { - // { - // "has_parent" : { - // "parent_type" : "blog", - // "query" : { - // "term" : { - // "tag" : "something" - // } - // } - // } - // } - - source := make(map[string]interface{}) - - filter := make(map[string]interface{}) - source["has_parent"] = filter - - if f.query != nil { - filter["query"] = f.query.Source() - } else if f.filter != nil { - filter["filter"] = f.filter.Source() - } - - filter["parent_type"] = f.parentType - if f.filterName != "" { - filter["_name"] = f.filterName - } - if f.cache != nil { - filter["_cache"] = *f.cache - } - if f.cacheKey != "" { - filter["_cache_key"] = f.cacheKey - } - if f.innerHit != nil { - filter["inner_hits"] = f.innerHit.Source() - } - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_has_parent_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_has_parent_test.go deleted file mode 100644 index 3f59f91..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_has_parent_test.go +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestHasParentFilter(t *testing.T) { - f := NewHasParentFilter("blog") - f = f.Query(NewTermQuery("tag", "something")) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"has_parent":{"parent_type":"blog","query":{"term":{"tag":"something"}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestHasParentFilterWithInnerHits(t *testing.T) { - f := NewHasParentFilter("blog") - f = f.Query(NewTermQuery("tag", "something")) - f = f.InnerHit(NewInnerHit()) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"has_parent":{"inner_hits":{},"parent_type":"blog","query":{"term":{"tag":"something"}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestHasParentFilterWithInnerHitsName(t *testing.T) { - f := NewHasParentFilter("blog") - f = f.Query(NewTermQuery("tag", "something")) - f = f.InnerHit(NewInnerHit().Name("comments")) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"has_parent":{"inner_hits":{"name":"comments"},"parent_type":"blog","query":{"term":{"tag":"something"}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestHasParentFilterWithInnerHitsQuery(t *testing.T) { - f := NewHasParentFilter("blog") - f = f.Query(NewTermQuery("tag", "something")) - f = f.InnerHit(NewInnerHit().Query(NewTermQuery("user", "olivere"))) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"has_parent":{"inner_hits":{"query":{"term":{"user":"olivere"}}},"parent_type":"blog","query":{"term":{"tag":"something"}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_ids.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_ids.go deleted file mode 100644 index 2a612c9..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_ids.go +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// Filters documents that only have the provided ids. -// Note, this filter does not require the _id field to be indexed -// since it works using the _uid field. -// For details, see: -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-ids-filter.html -type IdsFilter struct { - Filter - types []string - values []string - filterName string -} - -func NewIdsFilter(types ...string) IdsFilter { - return IdsFilter{ - types: types, - values: make([]string, 0), - } -} - -func (f IdsFilter) Ids(ids ...string) IdsFilter { - f.values = append(f.values, ids...) - return f -} - -func (f IdsFilter) FilterName(filterName string) IdsFilter { - f.filterName = filterName - return f -} - -func (f IdsFilter) Source() interface{} { - // { - // "ids" : { - // "type" : "my_type", - // "values" : ["1", "4", "100"] - // } - // } - source := make(map[string]interface{}) - params := make(map[string]interface{}) - source["ids"] = params - - // type(s) - if len(f.types) == 1 { - params["type"] = f.types[0] - } else if len(f.types) > 1 { - params["types"] = f.types - } - - // values - params["values"] = f.values - - // filter name - if f.filterName != "" { - params["_name"] = f.filterName - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_ids_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_ids_test.go deleted file mode 100644 index 2e0837a..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_ids_test.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestIdsFilter(t *testing.T) { - f := NewIdsFilter("my_type").Ids("1", "4", "100") - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"ids":{"type":"my_type","values":["1","4","100"]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_limit.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_limit.go deleted file mode 100644 index 14f0d9d..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_limit.go +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// A limit filter limits the number of documents (per shard) to execute on. -// For details, see: -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-limit-filter.html -type LimitFilter struct { - Filter - limit int -} - -func NewLimitFilter(limit int) LimitFilter { - f := LimitFilter{limit: limit} - return f -} - -func (f LimitFilter) Source() interface{} { - // { - // "limit" : { - // "value" : "..." - // } - // } - source := make(map[string]interface{}) - params := make(map[string]interface{}) - source["limit"] = params - params["value"] = f.limit - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_limit_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_limit_test.go deleted file mode 100644 index d7ca265..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_limit_test.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestLimitFilter(t *testing.T) { - f := NewLimitFilter(42) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"limit":{"value":42}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_match_all.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_match_all.go deleted file mode 100644 index 5092e6d..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_match_all.go +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// A filter that matches on all documents. -// For details, see: -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-match-all-filter.html -type MatchAllFilter struct { - Filter -} - -func NewMatchAllFilter() MatchAllFilter { - return MatchAllFilter{} -} - -func (f MatchAllFilter) Source() interface{} { - // { - // "match_all" : {} - // } - source := make(map[string]interface{}) - source["match_all"] = make(map[string]interface{}) - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_match_all_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_match_all_test.go deleted file mode 100644 index 0ce39a6..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_match_all_test.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestMatchAllFilter(t *testing.T) { - f := NewMatchAllFilter() - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"match_all":{}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_missing.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_missing.go deleted file mode 100644 index d734281..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_missing.go +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// Filters documents where a specific field has no value in them. -// For details, see: -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-missing-filter.html -type MissingFilter struct { - Filter - name string - filterName string - nullValue *bool - existence *bool -} - -func NewMissingFilter(name string) MissingFilter { - f := MissingFilter{name: name} - return f -} - -func (f MissingFilter) FilterName(filterName string) MissingFilter { - f.filterName = filterName - return f -} - -func (f MissingFilter) NullValue(nullValue bool) MissingFilter { - f.nullValue = &nullValue - return f -} - -func (f MissingFilter) Existence(existence bool) MissingFilter { - f.existence = &existence - return f -} - -func (f MissingFilter) Source() interface{} { - // { - // "missing" : { - // "field" : "..." - // } - // } - - source := make(map[string]interface{}) - params := make(map[string]interface{}) - source["missing"] = params - params["field"] = f.name - if f.nullValue != nil { - params["null_value"] = *f.nullValue - } - if f.existence != nil { - params["existence"] = *f.existence - } - if f.filterName != "" { - params["_name"] = f.filterName - } - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_missing_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_missing_test.go deleted file mode 100644 index 88b4dc5..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_missing_test.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestMissingFilter(t *testing.T) { - f := NewMissingFilter("user").FilterName("_my_filter") - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"missing":{"_name":"_my_filter","field":"user"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_nested.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_nested.go deleted file mode 100644 index 222f43d..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_nested.go +++ /dev/null @@ -1,122 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// A nested filter, works in a similar fashion to the nested query, -// except used as a filter. It follows exactly the same structure, but -// also allows to cache the results (set _cache to true), -// and have it named (set the _name value). -// -// For details, see: -// http://www.elasticsearch.org/guide/reference/query-dsl/nested-filter/ -type NestedFilter struct { - query Query - filter Filter - path string - join *bool - cache *bool - cacheKey string - filterName string - innerHit *InnerHit -} - -func NewNestedFilter(path string) NestedFilter { - return NestedFilter{path: path} -} - -func (f NestedFilter) Query(query Query) NestedFilter { - f.query = query - return f -} - -func (f NestedFilter) Filter(filter Filter) NestedFilter { - f.filter = filter - return f -} - -func (f NestedFilter) Path(path string) NestedFilter { - f.path = path - return f -} - -func (f NestedFilter) Join(join bool) NestedFilter { - f.join = &join - return f -} - -func (f NestedFilter) Cache(cache bool) NestedFilter { - f.cache = &cache - return f -} - -func (f NestedFilter) CacheKey(cacheKey string) NestedFilter { - f.cacheKey = cacheKey - return f -} - -func (f NestedFilter) FilterName(filterName string) NestedFilter { - f.filterName = filterName - return f -} - -func (f NestedFilter) InnerHit(innerHit *InnerHit) NestedFilter { - f.innerHit = innerHit - return f -} - -func (f NestedFilter) Source() interface{} { - // { - // "filtered" : { - // "query" : { "match_all" : {} }, - // "filter" : { - // "nested" : { - // "path" : "obj1", - // "query" : { - // "bool" : { - // "must" : [ - // { - // "match" : {"obj1.name" : "blue"} - // }, - // { - // "range" : {"obj1.count" : {"gt" : 5}} - // } - // ] - // } - // }, - // "_cache" : true - // } - // } - // } - // } - source := make(map[string]interface{}) - - params := make(map[string]interface{}) - source["nested"] = params - - if f.query != nil { - params["query"] = f.query.Source() - } - if f.filter != nil { - params["filter"] = f.filter.Source() - } - if f.join != nil { - params["join"] = *f.join - } - params["path"] = f.path - if f.filterName != "" { - params["_name"] = f.filterName - } - if f.cache != nil { - params["_cache"] = *f.cache - } - if f.cacheKey != "" { - params["_cache_key"] = f.cacheKey - } - if f.innerHit != nil { - params["inner_hits"] = f.innerHit.Source() - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_nested_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_nested_test.go deleted file mode 100644 index 8e0cec6..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_nested_test.go +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestNestedFilter(t *testing.T) { - f := NewNestedFilter("obj1") - bq := NewBoolQuery() - bq = bq.Must(NewTermQuery("obj1.name", "blue")) - bq = bq.Must(NewRangeQuery("obj1.count").Gt(5)) - f = f.Query(bq) - f = f.Cache(true) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"nested":{"_cache":true,"path":"obj1","query":{"bool":{"must":[{"term":{"obj1.name":"blue"}},{"range":{"obj1.count":{"from":5,"include_lower":false,"include_upper":true,"to":null}}}]}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestNestedFilterWithInnerHit(t *testing.T) { - f := NewNestedFilter("obj1") - bq := NewBoolQuery() - bq = bq.Must(NewTermQuery("obj1.name", "blue")) - bq = bq.Must(NewRangeQuery("obj1.count").Gt(5)) - f = f.Query(bq) - f = f.Cache(true) - f = f.InnerHit(NewInnerHit().Name("comments").Query(NewTermQuery("user", "olivere"))) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"nested":{"_cache":true,"inner_hits":{"name":"comments","query":{"term":{"user":"olivere"}}},"path":"obj1","query":{"bool":{"must":[{"term":{"obj1.name":"blue"}},{"range":{"obj1.count":{"from":5,"include_lower":false,"include_upper":true,"to":null}}}]}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_not.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_not.go deleted file mode 100644 index 3dc0c2d..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_not.go +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// A filter that filters out matched documents using a query. Can be placed -// within queries that accept a filter. -// For details, see: -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-not-filter.html#query-dsl-not-filter. -type NotFilter struct { - filter Filter - cache *bool - cacheKey string - filterName string -} - -func NewNotFilter(filter Filter) NotFilter { - return NotFilter{ - filter: filter, - } -} - -func (f NotFilter) Cache(cache bool) NotFilter { - f.cache = &cache - return f -} - -func (f NotFilter) CacheKey(cacheKey string) NotFilter { - f.cacheKey = cacheKey - return f -} - -func (f NotFilter) FilterName(filterName string) NotFilter { - f.filterName = filterName - return f -} - -func (f NotFilter) Source() interface{} { - // { - // "not" : { - // "filter" : { ... } - // } - // } - - source := make(map[string]interface{}) - - params := make(map[string]interface{}) - source["not"] = params - params["filter"] = f.filter.Source() - - if f.cache != nil { - params["_cache"] = *f.cache - } - if f.cacheKey != "" { - params["_cache_key"] = f.cacheKey - } - if f.filterName != "" { - params["_name"] = f.filterName - } - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_not_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_not_test.go deleted file mode 100644 index 7669911..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_not_test.go +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestNotFilter(t *testing.T) { - f := NewNotFilter(NewTermFilter("user", "olivere")) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"not":{"filter":{"term":{"user":"olivere"}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestNotFilterWithParams(t *testing.T) { - postDateFilter := NewRangeFilter("postDate").From("2010-03-01").To("2010-04-01") - f := NewNotFilter(postDateFilter) - f = f.Cache(true) - f = f.CacheKey("MyNotFilter") - f = f.FilterName("MyFilterName") - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"not":{"_cache":true,"_cache_key":"MyNotFilter","_name":"MyFilterName","filter":{"range":{"postDate":{"from":"2010-03-01","include_lower":true,"include_upper":true,"to":"2010-04-01"}}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_or.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_or.go deleted file mode 100644 index 31b2c67..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_or.go +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// A filter that matches documents using OR boolean operator -// on other queries. Can be placed within queries that accept a filter. -// For details, see: -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-or-filter.html -type OrFilter struct { - filters []Filter - cache *bool - cacheKey string - filterName string -} - -func NewOrFilter(filters ...Filter) OrFilter { - f := OrFilter{ - filters: make([]Filter, 0), - } - if len(filters) > 0 { - f.filters = append(f.filters, filters...) - } - return f -} - -func (f OrFilter) Add(filter Filter) OrFilter { - f.filters = append(f.filters, filter) - return f -} - -func (f OrFilter) Cache(cache bool) OrFilter { - f.cache = &cache - return f -} - -func (f OrFilter) CacheKey(cacheKey string) OrFilter { - f.cacheKey = cacheKey - return f -} - -func (f OrFilter) FilterName(filterName string) OrFilter { - f.filterName = filterName - return f -} - -func (f OrFilter) Source() interface{} { - // { - // "or" : [ - // ... filters ... - // ] - // } - - source := make(map[string]interface{}) - - params := make(map[string]interface{}) - source["or"] = params - - filters := make([]interface{}, len(f.filters)) - params["filters"] = filters - for i, filter := range f.filters { - filters[i] = filter.Source() - } - - if f.cache != nil { - params["_cache"] = *f.cache - } - if f.cacheKey != "" { - params["_cache_key"] = f.cacheKey - } - if f.filterName != "" { - params["_name"] = f.filterName - } - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_or_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_or_test.go deleted file mode 100644 index 4d86007..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_or_test.go +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestOrFilter(t *testing.T) { - f := NewOrFilter() - postDateFilter := NewRangeFilter("postDate").From("2010-03-01").To("2010-04-01") - f = f.Add(postDateFilter) - prefixFilter := NewPrefixFilter("name.second", "ba") - f = f.Add(prefixFilter) - f = f.Cache(true) - f = f.CacheKey("MyOrFilter") - f = f.FilterName("MyFilterName") - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"or":{"_cache":true,"_cache_key":"MyOrFilter","_name":"MyFilterName","filters":[{"range":{"postDate":{"from":"2010-03-01","include_lower":true,"include_upper":true,"to":"2010-04-01"}}},{"prefix":{"name.second":"ba"}}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestNewOrFilter(t *testing.T) { - tf := NewTermsFilter("user", "oliver", "test") - mf := NewMissingFilter("user") - f := NewOrFilter(tf, mf) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"or":{"filters":[{"terms":{"user":["oliver","test"]}},{"missing":{"field":"user"}}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_prefix.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_prefix.go deleted file mode 100644 index de19ebd..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_prefix.go +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// Filters documents that have fields containing terms -// with a specified prefix (not analyzed). -// For details, see: -// http://www.elasticsearch.org/guide/reference/query-dsl/prefix-filter.html -type PrefixFilter struct { - Filter - name string - prefix string - cache *bool - cacheKey string - filterName string -} - -func NewPrefixFilter(name string, prefix string) PrefixFilter { - f := PrefixFilter{name: name, prefix: prefix} - return f -} - -func (f PrefixFilter) Cache(cache bool) PrefixFilter { - f.cache = &cache - return f -} - -func (f PrefixFilter) CacheKey(cacheKey string) PrefixFilter { - f.cacheKey = cacheKey - return f -} - -func (f PrefixFilter) FilterName(filterName string) PrefixFilter { - f.filterName = filterName - return f -} - -func (f PrefixFilter) Source() interface{} { - // { - // "prefix" : { - // "..." : "..." - // } - // } - - source := make(map[string]interface{}) - - params := make(map[string]interface{}) - source["prefix"] = params - - params[f.name] = f.prefix - - if f.filterName != "" { - params["_name"] = f.filterName - } - - if f.cache != nil { - params["_cache"] = *f.cache - } - - if f.cacheKey != "" { - params["_cache_key"] = f.cacheKey - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_prefix_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_prefix_test.go deleted file mode 100644 index 7392572..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_prefix_test.go +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestPrefixFilter(t *testing.T) { - f := NewPrefixFilter("user", "ki") - f = f.Cache(true) - f = f.CacheKey("MyPrefixFilter") - f = f.FilterName("MyFilterName") - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"prefix":{"_cache":true,"_cache_key":"MyPrefixFilter","_name":"MyFilterName","user":"ki"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_query.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_query.go deleted file mode 100644 index 2fc7c4c..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_query.go +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// QueryFilter wraps any query to be used as a filter. It can be placed -// within queries that accept a filter. -// For details, see: -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-query-filter.html -type QueryFilter struct { - Filter - name string - query Query - cache *bool - filterName string -} - -func NewQueryFilter(query Query) QueryFilter { - f := QueryFilter{query: query} - return f -} - -func (f QueryFilter) Name(name string) QueryFilter { - f.name = name - return f -} - -func (f QueryFilter) Query(query Query) QueryFilter { - f.query = query - return f -} - -func (f QueryFilter) Cache(cache bool) QueryFilter { - f.cache = &cache - return f -} - -func (f QueryFilter) FilterName(filterName string) QueryFilter { - f.filterName = filterName - return f -} - -func (f QueryFilter) Source() interface{} { - // { - // "query" : { - // "..." : "..." - // } - // } - - source := make(map[string]interface{}) - - if f.filterName == "" && (f.cache == nil || *f.cache == false) { - source["query"] = f.query.Source() - } else { - params := make(map[string]interface{}) - source["fquery"] = params - params["query"] = f.query.Source() - if f.filterName != "" { - params["_name"] = f.filterName - } - if f.cache != nil { - params["_cache"] = *f.cache - } - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_query_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_query_test.go deleted file mode 100644 index 9dffc45..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_query_test.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestQueryFilter(t *testing.T) { - f := NewQueryFilter(NewQueryStringQuery("this AND that OR thus")) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"query":{"query_string":{"query":"this AND that OR thus"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestQueryFilterWithName(t *testing.T) { - f := NewQueryFilter(NewQueryStringQuery("this AND that OR thus")) - f = f.Cache(true) - f = f.FilterName("MyFilterName") - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"fquery":{"_cache":true,"_name":"MyFilterName","query":{"query_string":{"query":"this AND that OR thus"}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_range.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_range.go deleted file mode 100644 index 4fc1349..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_range.go +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// Filters documents with fields that have terms within -// a certain range. For details, see: -// http://www.elasticsearch.org/guide/reference/query-dsl/range-filter.html -type RangeFilter struct { - Filter - name string - from *interface{} - to *interface{} - timeZone string - format string - includeLower bool - includeUpper bool - cache *bool - cacheKey string - filterName string - execution string -} - -func NewRangeFilter(name string) RangeFilter { - f := RangeFilter{name: name, includeLower: true, includeUpper: true} - return f -} - -// TimeZone allows for adjusting the from/to fields using a time zone. -// Only valid for date fields. -func (f RangeFilter) TimeZone(timeZone string) RangeFilter { - f.timeZone = timeZone - return f -} - -// Format is a valid option for date fields in a Range filter. -func (f RangeFilter) Format(format string) RangeFilter { - f.format = format - return f -} - -func (f RangeFilter) From(from interface{}) RangeFilter { - f.from = &from - return f -} - -func (f RangeFilter) Gt(from interface{}) RangeFilter { - f.from = &from - f.includeLower = false - return f -} - -func (f RangeFilter) Gte(from interface{}) RangeFilter { - f.from = &from - f.includeLower = true - return f -} - -func (f RangeFilter) To(to interface{}) RangeFilter { - f.to = &to - return f -} - -func (f RangeFilter) Lt(to interface{}) RangeFilter { - f.to = &to - f.includeUpper = false - return f -} - -func (f RangeFilter) Lte(to interface{}) RangeFilter { - f.to = &to - f.includeUpper = true - return f -} - -func (f RangeFilter) IncludeLower(includeLower bool) RangeFilter { - f.includeLower = includeLower - return f -} - -func (f RangeFilter) IncludeUpper(includeUpper bool) RangeFilter { - f.includeUpper = includeUpper - return f -} - -func (f RangeFilter) Cache(cache bool) RangeFilter { - f.cache = &cache - return f -} - -func (f RangeFilter) CacheKey(cacheKey string) RangeFilter { - f.cacheKey = cacheKey - return f -} - -func (f RangeFilter) FilterName(filterName string) RangeFilter { - f.filterName = filterName - return f -} - -func (f RangeFilter) Execution(execution string) RangeFilter { - f.execution = execution - return f -} - -func (f RangeFilter) Source() interface{} { - // { - // "range" : { - // "name" : { - // "..." : "..." - // } - // } - // } - - source := make(map[string]interface{}) - - rangeQ := make(map[string]interface{}) - source["range"] = rangeQ - - params := make(map[string]interface{}) - rangeQ[f.name] = params - - params["from"] = f.from - params["to"] = f.to - if f.timeZone != "" { - params["time_zone"] = f.timeZone - } - if f.format != "" { - params["format"] = f.format - } - params["include_lower"] = f.includeLower - params["include_upper"] = f.includeUpper - - if f.filterName != "" { - rangeQ["_name"] = f.filterName - } - - if f.cache != nil { - rangeQ["_cache"] = *f.cache - } - - if f.cacheKey != "" { - rangeQ["_cache_key"] = f.cacheKey - } - - if f.execution != "" { - rangeQ["execution"] = f.execution - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_range_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_range_test.go deleted file mode 100644 index 70aea53..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_range_test.go +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestRangeFilter(t *testing.T) { - f := NewRangeFilter("postDate").From("2010-03-01").To("2010-04-01") - f = f.Cache(true) - f = f.CacheKey("MyAndFilter") - f = f.FilterName("MyFilterName") - f = f.Execution("index") - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"range":{"_cache":true,"_cache_key":"MyAndFilter","_name":"MyFilterName","execution":"index","postDate":{"from":"2010-03-01","include_lower":true,"include_upper":true,"to":"2010-04-01"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -/* -func TestRangeFilterGte(t *testing.T) { - f := NewRangeFilter("postDate").Gte("2010-03-01") - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"range":{"postDate":{"gte":"2010-03-01"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} -*/ - -func TestRangeFilterWithTimeZone(t *testing.T) { - f := NewRangeFilter("born"). - Gte("2012-01-01"). - Lte("now"). - TimeZone("+1:00") - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"range":{"born":{"from":"2012-01-01","include_lower":true,"include_upper":true,"time_zone":"+1:00","to":"now"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestRangeFilterWithFormat(t *testing.T) { - f := NewRangeFilter("born"). - Gte("2012/01/01"). - Lte("now"). - Format("yyyy/MM/dd") - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"range":{"born":{"format":"yyyy/MM/dd","from":"2012/01/01","include_lower":true,"include_upper":true,"to":"now"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_regexp.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_regexp.go deleted file mode 100644 index 107a1e9..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_regexp.go +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// RegexpFilter allows filtering for regular expressions. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-regexp-filter.html -// and http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-regexp-query.html#regexp-syntax -// for details. -type RegexpFilter struct { - Filter - name string - regexp string - flags *string - maxDeterminizedStates *int - cache *bool - cacheKey string - filterName string -} - -// NewRegexpFilter sets up a new RegexpFilter. -func NewRegexpFilter(name, regexp string) RegexpFilter { - return RegexpFilter{name: name, regexp: regexp} -} - -// Flags sets the regexp flags. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-regexp-query.html#_optional_operators -// for details. -func (f RegexpFilter) Flags(flags string) RegexpFilter { - f.flags = &flags - return f -} - -func (f RegexpFilter) MaxDeterminizedStates(maxDeterminizedStates int) RegexpFilter { - f.maxDeterminizedStates = &maxDeterminizedStates - return f -} - -func (f RegexpFilter) Cache(cache bool) RegexpFilter { - f.cache = &cache - return f -} - -func (f RegexpFilter) CacheKey(cacheKey string) RegexpFilter { - f.cacheKey = cacheKey - return f -} - -func (f RegexpFilter) FilterName(filterName string) RegexpFilter { - f.filterName = filterName - return f -} - -func (f RegexpFilter) Source() interface{} { - // { - // "regexp" : { - // "..." : "..." - // } - // } - - source := make(map[string]interface{}) - - params := make(map[string]interface{}) - source["regexp"] = params - - if f.flags == nil { - params[f.name] = f.regexp - } else { - x := make(map[string]interface{}) - x["value"] = f.regexp - x["flags"] = *f.flags - if f.maxDeterminizedStates != nil { - x["max_determinized_states"] = *f.maxDeterminizedStates - } - params[f.name] = x - } - - if f.filterName != "" { - params["_name"] = f.filterName - } - if f.cache != nil { - params["_cache"] = *f.cache - } - if f.cacheKey != "" { - params["_cache_key"] = f.cacheKey - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_regexp_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_regexp_test.go deleted file mode 100644 index 6498722..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_regexp_test.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestRegexpFilter(t *testing.T) { - f := NewRegexpFilter("name.first", "s.*y") - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"regexp":{"name.first":"s.*y"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestRegexpFilterWithFlags(t *testing.T) { - f := NewRegexpFilter("name.first", "s.*y") - f = f.Flags("INTERSECTION|COMPLEMENT|EMPTY") - f = f.FilterName("test").Cache(true).CacheKey("key") - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"regexp":{"_cache":true,"_cache_key":"key","_name":"test","name.first":{"flags":"INTERSECTION|COMPLEMENT|EMPTY","value":"s.*y"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_term.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_term.go deleted file mode 100644 index db22f7a..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_term.go +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// Filters documents that have fields that contain -// a term (not analyzed). For details, see: -// http://www.elasticsearch.org/guide/reference/query-dsl/term-filter.html -type TermFilter struct { - Filter - name string - value interface{} - cache *bool - cacheKey string - filterName string -} - -func NewTermFilter(name string, value interface{}) TermFilter { - f := TermFilter{name: name, value: value} - return f -} - -func (f TermFilter) Cache(cache bool) TermFilter { - f.cache = &cache - return f -} - -func (f TermFilter) CacheKey(cacheKey string) TermFilter { - f.cacheKey = cacheKey - return f -} - -func (f TermFilter) FilterName(filterName string) TermFilter { - f.filterName = filterName - return f -} - -func (f TermFilter) Source() interface{} { - // { - // "term" : { - // "..." : "..." - // } - // } - - source := make(map[string]interface{}) - - params := make(map[string]interface{}) - source["term"] = params - - params[f.name] = f.value - - if f.filterName != "" { - params["_name"] = f.filterName - } - - if f.cache != nil { - params["_cache"] = *f.cache - } - - if f.cacheKey != "" { - params["_cache_key"] = f.cacheKey - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_term_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_term_test.go deleted file mode 100644 index a0975b3..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_term_test.go +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestTermFilter(t *testing.T) { - f := NewTermFilter("user", "ki") - f = f.Cache(true) - f = f.CacheKey("MyTermFilter") - f = f.FilterName("MyFilterName") - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"term":{"_cache":true,"_cache_key":"MyTermFilter","_name":"MyFilterName","user":"ki"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_terms.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_terms.go deleted file mode 100644 index 1705c43..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_terms.go +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// Filters documents that have fields that match -// any of the provided terms (not analyzed). For details, see: -// http://www.elasticsearch.org/guide/reference/query-dsl/terms-filter/ -type TermsFilter struct { - Filter - name string - values []interface{} - cache *bool - cacheKey string - filterName string - execution string -} - -func NewTermsFilter(name string, values ...interface{}) TermsFilter { - f := TermsFilter{ - name: name, - values: make([]interface{}, 0), - } - f.values = append(f.values, values...) - return f -} - -func (f TermsFilter) Cache(cache bool) TermsFilter { - f.cache = &cache - return f -} - -func (f TermsFilter) CacheKey(cacheKey string) TermsFilter { - f.cacheKey = cacheKey - return f -} - -func (f TermsFilter) FilterName(filterName string) TermsFilter { - f.filterName = filterName - return f -} - -func (f TermsFilter) Execution(execution string) TermsFilter { - f.execution = execution - return f -} - -func (f TermsFilter) Source() interface{} { - // { - // "terms" : { - // "..." : "..." - // } - // } - - source := make(map[string]interface{}) - params := make(map[string]interface{}) - source["terms"] = params - params[f.name] = f.values - if f.filterName != "" { - params["_name"] = f.filterName - } - if f.execution != "" { - params["execution"] = f.execution - } - if f.cache != nil { - params["_cache"] = *f.cache - } - if f.cacheKey != "" { - params["_cache_key"] = f.cacheKey - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_terms_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_terms_test.go deleted file mode 100644 index 6354084..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_terms_test.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestTermsFilter(t *testing.T) { - f := NewTermsFilter("user", "kimchy", "elasticsearch") - f = f.Cache(true) - f = f.CacheKey("MyTermsFilter") - f = f.FilterName("MyFilterName") - f = f.Execution("plain") - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"terms":{"_cache":true,"_cache_key":"MyTermsFilter","_name":"MyFilterName","execution":"plain","user":["kimchy","elasticsearch"]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_type.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_type.go deleted file mode 100644 index f64a244..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_type.go +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// Filters documents matching the provided document / mapping type. -// Note, this filter can work even when the _type field is not indexed -// (using the _uid field). -// For details, see: -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-type-filter.html -type TypeFilter struct { - Filter - typ string -} - -func NewTypeFilter(typ string) TypeFilter { - f := TypeFilter{typ: typ} - return f -} - -func (f TypeFilter) Source() interface{} { - // { - // "type" : { - // "value" : "..." - // } - // } - source := make(map[string]interface{}) - params := make(map[string]interface{}) - source["type"] = params - params["value"] = f.typ - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_filters_type_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_filters_type_test.go deleted file mode 100644 index e172ed7..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_filters_type_test.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestTypeFilter(t *testing.T) { - f := NewTypeFilter("my_type") - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"type":{"value":"my_type"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_bool.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_bool.go deleted file mode 100644 index 9fc053c..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_bool.go +++ /dev/null @@ -1,153 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// A bool query matches documents matching boolean -// combinations of other queries. -// For more details, see: -// http://www.elasticsearch.org/guide/reference/query-dsl/bool-query.html -type BoolQuery struct { - Query - mustClauses []Query - shouldClauses []Query - mustNotClauses []Query - boost *float32 - disableCoord *bool - minimumShouldMatch string - adjustPureNegative *bool - queryName string -} - -// Creates a new bool query. -func NewBoolQuery() BoolQuery { - q := BoolQuery{ - mustClauses: make([]Query, 0), - shouldClauses: make([]Query, 0), - mustNotClauses: make([]Query, 0), - } - return q -} - -func (q BoolQuery) Must(queries ...Query) BoolQuery { - q.mustClauses = append(q.mustClauses, queries...) - return q -} - -func (q BoolQuery) MustNot(queries ...Query) BoolQuery { - q.mustNotClauses = append(q.mustNotClauses, queries...) - return q -} - -func (q BoolQuery) Should(queries ...Query) BoolQuery { - q.shouldClauses = append(q.shouldClauses, queries...) - return q -} - -func (q BoolQuery) Boost(boost float32) BoolQuery { - q.boost = &boost - return q -} - -func (q BoolQuery) DisableCoord(disableCoord bool) BoolQuery { - q.disableCoord = &disableCoord - return q -} - -func (q BoolQuery) MinimumShouldMatch(minimumShouldMatch string) BoolQuery { - q.minimumShouldMatch = minimumShouldMatch - return q -} - -func (q BoolQuery) AdjustPureNegative(adjustPureNegative bool) BoolQuery { - q.adjustPureNegative = &adjustPureNegative - return q -} - -func (q BoolQuery) QueryName(queryName string) BoolQuery { - q.queryName = queryName - return q -} - -// Creates the query source for the bool query. -func (q BoolQuery) Source() interface{} { - // { - // "bool" : { - // "must" : { - // "term" : { "user" : "kimchy" } - // }, - // "must_not" : { - // "range" : { - // "age" : { "from" : 10, "to" : 20 } - // } - // }, - // "should" : [ - // { - // "term" : { "tag" : "wow" } - // }, - // { - // "term" : { "tag" : "elasticsearch" } - // } - // ], - // "minimum_number_should_match" : 1, - // "boost" : 1.0 - // } - // } - - query := make(map[string]interface{}) - - boolClause := make(map[string]interface{}) - query["bool"] = boolClause - - // must - if len(q.mustClauses) == 1 { - boolClause["must"] = q.mustClauses[0].Source() - } else if len(q.mustClauses) > 1 { - clauses := make([]interface{}, 0) - for _, subQuery := range q.mustClauses { - clauses = append(clauses, subQuery.Source()) - } - boolClause["must"] = clauses - } - - // must_not - if len(q.mustNotClauses) == 1 { - boolClause["must_not"] = q.mustNotClauses[0].Source() - } else if len(q.mustNotClauses) > 1 { - clauses := make([]interface{}, 0) - for _, subQuery := range q.mustNotClauses { - clauses = append(clauses, subQuery.Source()) - } - boolClause["must_not"] = clauses - } - - // should - if len(q.shouldClauses) == 1 { - boolClause["should"] = q.shouldClauses[0].Source() - } else if len(q.shouldClauses) > 1 { - clauses := make([]interface{}, 0) - for _, subQuery := range q.shouldClauses { - clauses = append(clauses, subQuery.Source()) - } - boolClause["should"] = clauses - } - - if q.boost != nil { - boolClause["boost"] = *q.boost - } - if q.disableCoord != nil { - boolClause["disable_coord"] = *q.disableCoord - } - if q.minimumShouldMatch != "" { - boolClause["minimum_should_match"] = q.minimumShouldMatch - } - if q.adjustPureNegative != nil { - boolClause["adjust_pure_negative"] = *q.adjustPureNegative - } - if q.queryName != "" { - boolClause["_name"] = q.queryName - } - - return query -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_bool_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_bool_test.go deleted file mode 100644 index 07ecc49..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_bool_test.go +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestBoolQuery(t *testing.T) { - q := NewBoolQuery() - q = q.Must(NewTermQuery("tag", "wow")) - q = q.MustNot(NewRangeQuery("age").From(10).To(20)) - q = q.Should(NewTermQuery("tag", "sometag"), NewTermQuery("tag", "sometagtag")) - q = q.Boost(10) - q = q.DisableCoord(true) - q = q.QueryName("Test") - data, err := json.Marshal(q.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"bool":{"_name":"Test","boost":10,"disable_coord":true,"must":{"term":{"tag":"wow"}},"must_not":{"range":{"age":{"from":10,"include_lower":true,"include_upper":true,"to":20}}},"should":[{"term":{"tag":"sometag"}},{"term":{"tag":"sometagtag"}}]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_boosting.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_boosting.go deleted file mode 100644 index 29b7a62..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_boosting.go +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// A boosting query can be used to effectively -// demote results that match a given query. -// For more details, see: -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-boosting-query.html -type BoostingQuery struct { - Query - positiveClause Query - negativeClause Query - negativeBoost *float64 - boost *float64 -} - -// Creates a new boosting query. -func NewBoostingQuery() BoostingQuery { - return BoostingQuery{} -} - -func (q BoostingQuery) Positive(positive Query) BoostingQuery { - q.positiveClause = positive - return q -} - -func (q BoostingQuery) Negative(negative Query) BoostingQuery { - q.negativeClause = negative - return q -} - -func (q BoostingQuery) NegativeBoost(negativeBoost float64) BoostingQuery { - q.negativeBoost = &negativeBoost - return q -} - -func (q BoostingQuery) Boost(boost float64) BoostingQuery { - q.boost = &boost - return q -} - -// Creates the query source for the boosting query. -func (q BoostingQuery) Source() interface{} { - // { - // "boosting" : { - // "positive" : { - // "term" : { - // "field1" : "value1" - // } - // }, - // "negative" : { - // "term" : { - // "field2" : "value2" - // } - // }, - // "negative_boost" : 0.2 - // } - // } - - query := make(map[string]interface{}) - - boostingClause := make(map[string]interface{}) - query["boosting"] = boostingClause - - // Negative and positive clause as well as negative boost - // are mandatory in the Java client. - - // positive - if q.positiveClause != nil { - boostingClause["positive"] = q.positiveClause.Source() - } - - // negative - if q.negativeClause != nil { - boostingClause["negative"] = q.negativeClause.Source() - } - - if q.negativeBoost != nil { - boostingClause["negative_boost"] = *q.negativeBoost - } - - if q.boost != nil { - boostingClause["boost"] = *q.boost - } - - return query -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_common.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_common.go deleted file mode 100644 index f15f868..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_common.go +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// The common terms query is a modern alternative to stopwords -// which improves the precision and recall of search results -// (by taking stopwords into account), without sacrificing performance. -// For more details, see: -// http://www.elasticsearch.org/guide/reference/query-dsl/common-terms-query/ -type CommonQuery struct { - Query - name string - query string - cutoffFreq *float64 - highFreq *float64 - highFreqOp string - highFreqMinMatch interface{} - lowFreq *float64 - lowFreqOp string - lowFreqMinMatch interface{} - analyzer string - boost *float64 - disableCoords *bool -} - -// Creates a new common query. -func NewCommonQuery(name string, query string) CommonQuery { - q := CommonQuery{name: name, query: query} - return q -} - -func (q *CommonQuery) CutoffFrequency(f float64) *CommonQuery { - q.cutoffFreq = &f - return q -} - -func (q *CommonQuery) HighFreq(f float64) *CommonQuery { - q.highFreq = &f - return q -} - -func (q *CommonQuery) HighFreqOperator(op string) *CommonQuery { - q.highFreqOp = op - return q -} - -func (q *CommonQuery) HighFreqMinMatch(min interface{}) *CommonQuery { - q.highFreqMinMatch = min - return q -} - -func (q *CommonQuery) LowFreq(f float64) *CommonQuery { - q.lowFreq = &f - return q -} - -func (q *CommonQuery) LowFreqOperator(op string) *CommonQuery { - q.lowFreqOp = op - return q -} - -func (q *CommonQuery) LowFreqMinMatch(min interface{}) *CommonQuery { - q.lowFreqMinMatch = min - return q -} - -func (q *CommonQuery) Analyzer(analyzer string) *CommonQuery { - q.analyzer = analyzer - return q -} - -func (q *CommonQuery) Boost(boost float64) *CommonQuery { - q.boost = &boost - return q -} - -func (q *CommonQuery) DisableCoords(disable bool) *CommonQuery { - q.disableCoords = &disable - return q -} - -// Creates the query source for the common query. -func (q CommonQuery) Source() interface{} { - // { - // "common": { - // "body": { - // "query": "this is bonsai cool", - // "cutoff_frequency": 0.001 - // } - // } - // } - source := make(map[string]interface{}) - body := make(map[string]interface{}) - query := make(map[string]interface{}) - - source["common"] = body - body[q.name] = query - query["query"] = q.query - - if q.cutoffFreq != nil { - query["cutoff_frequency"] = *(q.cutoffFreq) - } - - if q.highFreq != nil { - query["high_freq"] = *(q.highFreq) - } - if q.highFreqOp != "" { - query["high_freq_operator"] = q.highFreqOp - } - - if q.lowFreq != nil { - query["low_freq"] = *(q.lowFreq) - } - if q.lowFreqOp != "" { - query["low_freq_operator"] = q.lowFreqOp - } - - if q.lowFreqMinMatch != nil || q.highFreqMinMatch != nil { - mm := make(map[string]interface{}) - if q.lowFreqMinMatch != nil { - mm["low_freq"] = q.lowFreqMinMatch - } - if q.highFreqMinMatch != nil { - mm["high_freq"] = q.highFreqMinMatch - } - query["minimum_should_match"] = mm - } - - if q.analyzer != "" { - query["analyzer"] = q.analyzer - } - - if q.disableCoords != nil { - query["disable_coords"] = *(q.disableCoords) - } - - if q.boost != nil { - query["boost"] = *(q.boost) - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_common_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_common_test.go deleted file mode 100644 index 85270b6..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_common_test.go +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - _ "net/http" - "testing" -) - -func TestSearchQueriesCommon(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Common query - q := NewCommonQuery("message", "Golang") - searchResult, err := client.Search().Index(testIndexName).Query(&q).Do() - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } - if searchResult.Hits.TotalHits != 1 { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 1, searchResult.Hits.TotalHits) - } - if len(searchResult.Hits.Hits) != 1 { - t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", 1, len(searchResult.Hits.Hits)) - } - - for _, hit := range searchResult.Hits.Hits { - if hit.Index != testIndexName { - t.Errorf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - item := make(map[string]interface{}) - err := json.Unmarshal(*hit.Source, &item) - if err != nil { - t.Fatal(err) - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_constant_score.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_constant_score.go deleted file mode 100644 index 60407dc..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_constant_score.go +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// ConstantScoreQuery wraps a filter or another query and simply returns -// a constant score equal to the query boost for every document in the filter. -// -// For more details, see -// https://www.elastic.co/guide/en/elasticsearch/reference/1.7/query-dsl-constant-score-query.html -type ConstantScoreQuery struct { - query Query - filter Filter - boost *float64 -} - -// NewConstantScoreQuery creates a new constant score query. -func NewConstantScoreQuery() ConstantScoreQuery { - return ConstantScoreQuery{} -} - -// Query to wrap in this constant score query. -func (q ConstantScoreQuery) Query(query Query) ConstantScoreQuery { - q.query = query - q.filter = nil - return q -} - -// Filter to wrap in this constant score query. -func (q ConstantScoreQuery) Filter(filter Filter) ConstantScoreQuery { - q.query = nil - q.filter = filter - return q -} - -// Boost sets the boost for this query. Documents matching this query -// will (in addition to the normal weightings) have their score multiplied -// by the boost provided. -func (q ConstantScoreQuery) Boost(boost float64) ConstantScoreQuery { - q.boost = &boost - return q -} - -// Source returns JSON for the function score query. -func (q ConstantScoreQuery) Source() interface{} { - source := make(map[string]interface{}) - query := make(map[string]interface{}) - source["constant_score"] = query - - if q.query != nil { - query["query"] = q.query.Source() - } else if q.filter != nil { - query["filter"] = q.filter.Source() - } - if q.boost != nil { - query["boost"] = *q.boost - } - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_constant_score_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_constant_score_test.go deleted file mode 100644 index f3d70e1..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_constant_score_test.go +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestConstantScoreQueryWithQuery(t *testing.T) { - q := NewConstantScoreQuery(). - Query(NewTermQuery("user", "kimchy")). - Boost(1.2) - data, err := json.Marshal(q.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"constant_score":{"boost":1.2,"query":{"term":{"user":"kimchy"}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestConstantScoreQueryWithFilter(t *testing.T) { - q := NewConstantScoreQuery(). - Filter(NewTermFilter("user", "kimchy")). - Boost(1.2) - data, err := json.Marshal(q.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"constant_score":{"boost":1.2,"filter":{"term":{"user":"kimchy"}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_custom_filters_score.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_custom_filters_score.go deleted file mode 100644 index f0503a3..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_custom_filters_score.go +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// A custom_filters_score query allows to execute a query, -// and if the hit matches a provided filter (ordered), -// use either a boost or a script associated with it to compute the score. -// -// For more details, see: -// http://www.elasticsearch.org/guide/reference/query-dsl/custom-filters-score-query/ -type CustomFiltersScoreQuery struct { - query Query - filters []Filter - scoreMode string - maxBoost *float32 - script string -} - -// Creates a new custom_filters_score query. -func NewCustomFiltersScoreQuery() CustomFiltersScoreQuery { - q := CustomFiltersScoreQuery{ - filters: make([]Filter, 0), - } - return q -} - -func (q CustomFiltersScoreQuery) Query(query Query) CustomFiltersScoreQuery { - q.query = query - return q -} - -func (q CustomFiltersScoreQuery) Filter(filter Filter) CustomFiltersScoreQuery { - q.filters = append(q.filters, filter) - return q -} - -func (q CustomFiltersScoreQuery) ScoreMode(scoreMode string) CustomFiltersScoreQuery { - q.scoreMode = scoreMode - return q -} - -func (q CustomFiltersScoreQuery) MaxBoost(maxBoost float32) CustomFiltersScoreQuery { - q.maxBoost = &maxBoost - return q -} - -func (q CustomFiltersScoreQuery) Script(script string) CustomFiltersScoreQuery { - q.script = script - return q -} - -// Creates the query source for the custom_filters_score query. -func (q CustomFiltersScoreQuery) Source() interface{} { - // { - // "custom_filters_score" : { - // "query" : { - // "match_all" : {} - // }, - // "filters" : [ - // { - // "filter" : { "range" : { "age" : {"from" : 0, "to" : 10} } }, - // "boost" : "3" - // }, - // { - // "filter" : { "range" : { "age" : {"from" : 10, "to" : 20} } }, - // "boost" : "2" - // } - // ], - // "score_mode" : "first" - // } - // } - - query := make(map[string]interface{}) - - cfs := make(map[string]interface{}) - query["custom_filters_score"] = cfs - - // query - if q.query != nil { - cfs["query"] = q.query.Source() - } - // filters - clauses := make([]interface{}, 0) - for _, filter := range q.filters { - clauses = append(clauses, filter.Source()) - } - cfs["filters"] = clauses - - // scoreMode - if q.scoreMode != "" { - cfs["score_mode"] = q.scoreMode - } - - // max_boost - if q.maxBoost != nil { - cfs["max_boost"] = *q.maxBoost - } - - // script - if q.script != "" { - cfs["script"] = q.script - } - - return query -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_custom_score.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_custom_score.go deleted file mode 100644 index 8eadfcb..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_custom_score.go +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// custom_score query allows to wrap another query and customize -// the scoring of it optionally with a computation derived from -// other field values in the doc (numeric ones) using script expression. -// -// For more details, see: -// http://www.elasticsearch.org/guide/reference/query-dsl/custom-score-query/ -type CustomScoreQuery struct { - query Query - filter Filter - script string - lang string - boost *float32 - params map[string]interface{} -} - -// Creates a new custom_score query. -func NewCustomScoreQuery() CustomScoreQuery { - q := CustomScoreQuery{ - params: make(map[string]interface{}), - } - return q -} - -func (q CustomScoreQuery) Query(query Query) CustomScoreQuery { - q.query = query - return q -} - -func (q CustomScoreQuery) Filter(filter Filter) CustomScoreQuery { - q.filter = filter - return q -} - -func (q CustomScoreQuery) Script(script string) CustomScoreQuery { - q.script = script - return q -} - -func (q CustomScoreQuery) Lang(lang string) CustomScoreQuery { - q.lang = lang - return q -} - -func (q CustomScoreQuery) Boost(boost float32) CustomScoreQuery { - q.boost = &boost - return q -} - -func (q CustomScoreQuery) Params(params map[string]interface{}) CustomScoreQuery { - q.params = params - return q -} - -func (q CustomScoreQuery) Param(name string, value interface{}) CustomScoreQuery { - q.params[name] = value - return q -} - -// Creates the query source for the custom_fscore query. -func (q CustomScoreQuery) Source() interface{} { - // "custom_score" : { - // "query" : { - // .... - // }, - // "params" : { - // "param1" : 2, - // "param2" : 3.1 - // }, - // "script" : "_score * doc['my_numeric_field'].value / pow(param1, param2)" - // } - - query := make(map[string]interface{}) - - csq := make(map[string]interface{}) - query["custom_score"] = csq - - // query - if q.query != nil { - csq["query"] = q.query.Source() - } else if q.filter != nil { - csq["filter"] = q.filter.Source() - } - - csq["script"] = q.script - - // lang - if q.lang != "" { - csq["lang"] = q.lang - } - - // params - if len(q.params) > 0 { - csq["params"] = q.params - } - - // boost - if q.boost != nil { - csq["boost"] = *q.boost - } - - return query -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_dis_max.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_dis_max.go deleted file mode 100644 index 76be783..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_dis_max.go +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// A query that generates the union of documents produced by its subqueries, -// and that scores each document with the maximum score for that document -// as produced by any subquery, plus a tie breaking increment for -// any additional matching subqueries. -// -// For more details, see: -// http://www.elasticsearch.org/guide/reference/query-dsl/dis-max-query/ -type DisMaxQuery struct { - queries []Query - boost *float32 - tieBreaker *float32 -} - -// Creates a new dis_max query. -func NewDisMaxQuery() DisMaxQuery { - q := DisMaxQuery{ - queries: make([]Query, 0), - } - return q -} - -func (q DisMaxQuery) Query(query Query) DisMaxQuery { - q.queries = append(q.queries, query) - return q -} - -func (q DisMaxQuery) Boost(boost float32) DisMaxQuery { - q.boost = &boost - return q -} - -func (q DisMaxQuery) TieBreaker(tieBreaker float32) DisMaxQuery { - q.tieBreaker = &tieBreaker - return q -} - -// Creates the query source for the dis_max query. -func (q DisMaxQuery) Source() interface{} { - // { - // "dis_max" : { - // "tie_breaker" : 0.7, - // "boost" : 1.2, - // "queries" : { - // { - // "term" : { "age" : 34 } - // }, - // { - // "term" : { "age" : 35 } - // } - // ] - // } - // } - - query := make(map[string]interface{}) - - disMax := make(map[string]interface{}) - query["dis_max"] = disMax - - // tieBreaker - if q.tieBreaker != nil { - disMax["tie_breaker"] = *q.tieBreaker - } - - // boost - if q.boost != nil { - disMax["boost"] = *q.boost - } - - // queries - clauses := make([]interface{}, 0) - for _, subQuery := range q.queries { - clauses = append(clauses, subQuery.Source()) - } - disMax["queries"] = clauses - - return query -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_filtered.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_filtered.go deleted file mode 100644 index 150ecf1..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_filtered.go +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// FilteredQuery is a query that applies a filter to the results of another query. -// For more details, see -// http://www.elasticsearch.org/guide/reference/query-dsl/filtered-query.html -type FilteredQuery struct { - query Query - filters []Filter - boost *float32 -} - -// NewFilteredQuery creates a new filtered query. -func NewFilteredQuery(query Query) FilteredQuery { - q := FilteredQuery{ - query: query, - filters: make([]Filter, 0), - } - return q -} - -func (q FilteredQuery) Query(query Query) FilteredQuery { - q.query = query - return q -} - -func (q FilteredQuery) Filter(filter Filter) FilteredQuery { - q.filters = append(q.filters, filter) - return q -} - -func (q FilteredQuery) Boost(boost float32) FilteredQuery { - q.boost = &boost - return q -} - -// Creates the query source for the filtered query. -func (q FilteredQuery) Source() interface{} { - // { - // "filtered" : { - // "query" : { - // "term" : { "tag" : "wow" } - // }, - // "filter" : { - // "range" : { - // "age" : { "from" : 10, "to" : 20 } - // } - // } - // } - // } - - source := make(map[string]interface{}) - - filtered := make(map[string]interface{}) - source["filtered"] = filtered - - if q.query != nil { - filtered["query"] = q.query.Source() - } - - if len(q.filters) == 1 { - filtered["filter"] = q.filters[0].Source() - } else if len(q.filters) > 1 { - filter := make(map[string]interface{}) - filtered["filter"] = filter - and := make(map[string]interface{}) - filter["and"] = and - filters := make([]interface{}, 0) - for _, f := range q.filters { - filters = append(filters, f.Source()) - } - and["filters"] = filters - } - - if q.boost != nil { - filtered["boost"] = *q.boost - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_fsq.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_fsq.go deleted file mode 100644 index 6f2f3e8..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_fsq.go +++ /dev/null @@ -1,137 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// The function_score allows you to modify the score of documents that -// are retrieved by a query. This can be useful if, for example, -// a score function is computationally expensive and it is sufficient -// to compute the score on a filtered set of documents. -// For more details, see -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html -type FunctionScoreQuery struct { - query Query - filter Filter - boost *float32 - maxBoost *float32 - scoreMode string - boostMode string - filters []Filter - scoreFuncs []ScoreFunction - minScore *float32 - weight *float64 -} - -// NewFunctionScoreQuery creates a new function score query. -func NewFunctionScoreQuery() FunctionScoreQuery { - return FunctionScoreQuery{ - filters: make([]Filter, 0), - scoreFuncs: make([]ScoreFunction, 0), - } -} - -func (q FunctionScoreQuery) Query(query Query) FunctionScoreQuery { - q.query = query - q.filter = nil - return q -} - -func (q FunctionScoreQuery) Filter(filter Filter) FunctionScoreQuery { - q.query = nil - q.filter = filter - return q -} - -func (q FunctionScoreQuery) Add(filter Filter, scoreFunc ScoreFunction) FunctionScoreQuery { - q.filters = append(q.filters, filter) - q.scoreFuncs = append(q.scoreFuncs, scoreFunc) - return q -} - -func (q FunctionScoreQuery) AddScoreFunc(scoreFunc ScoreFunction) FunctionScoreQuery { - q.filters = append(q.filters, nil) - q.scoreFuncs = append(q.scoreFuncs, scoreFunc) - return q -} - -func (q FunctionScoreQuery) ScoreMode(scoreMode string) FunctionScoreQuery { - q.scoreMode = scoreMode - return q -} - -func (q FunctionScoreQuery) BoostMode(boostMode string) FunctionScoreQuery { - q.boostMode = boostMode - return q -} - -func (q FunctionScoreQuery) MaxBoost(maxBoost float32) FunctionScoreQuery { - q.maxBoost = &maxBoost - return q -} - -func (q FunctionScoreQuery) Boost(boost float32) FunctionScoreQuery { - q.boost = &boost - return q -} - -func (q FunctionScoreQuery) MinScore(minScore float32) FunctionScoreQuery { - q.minScore = &minScore - return q -} - -// Source returns JSON for the function score query. -func (q FunctionScoreQuery) Source() interface{} { - source := make(map[string]interface{}) - query := make(map[string]interface{}) - source["function_score"] = query - - if q.query != nil { - query["query"] = q.query.Source() - } else if q.filter != nil { - query["filter"] = q.filter.Source() - } - - if len(q.filters) == 1 && q.filters[0] == nil { - // Weight needs to be serialized on this level. - if weight := q.scoreFuncs[0].GetWeight(); weight != nil { - query["weight"] = weight - } - // Serialize the score function - query[q.scoreFuncs[0].Name()] = q.scoreFuncs[0].Source() - } else { - funcs := make([]interface{}, len(q.filters)) - for i, filter := range q.filters { - hsh := make(map[string]interface{}) - if filter != nil { - hsh["filter"] = filter.Source() - } - // Weight needs to be serialized on this level. - if weight := q.scoreFuncs[i].GetWeight(); weight != nil { - hsh["weight"] = weight - } - // Serialize the score function - hsh[q.scoreFuncs[i].Name()] = q.scoreFuncs[i].Source() - funcs[i] = hsh - } - query["functions"] = funcs - } - - if q.scoreMode != "" { - query["score_mode"] = q.scoreMode - } - if q.boostMode != "" { - query["boost_mode"] = q.boostMode - } - if q.maxBoost != nil { - query["max_boost"] = *q.maxBoost - } - if q.boost != nil { - query["boost"] = *q.boost - } - if q.minScore != nil { - query["min_score"] = *q.minScore - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_fsq_score_funcs.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_fsq_score_funcs.go deleted file mode 100644 index 5fde765..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_fsq_score_funcs.go +++ /dev/null @@ -1,627 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "strings" -) - -// ScoreFunction is used in combination with the Function Score Query. -type ScoreFunction interface { - Name() string - GetWeight() *float64 // returns the weight which must be serialized at the level of FunctionScoreQuery - Source() interface{} -} - -// -- Exponential Decay -- - -// ExponentialDecayFunction builds an exponential decay score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html -// for details. -type ExponentialDecayFunction struct { - fieldName string - origin interface{} - scale interface{} - decay *float64 - offset interface{} - multiValueMode string - weight *float64 -} - -// NewExponentialDecayFunction creates a new ExponentialDecayFunction. -func NewExponentialDecayFunction() ExponentialDecayFunction { - return ExponentialDecayFunction{} -} - -// Name represents the JSON field name under which the output of Source -// needs to be serialized by FunctionScoreQuery (see FunctionScoreQuery.Source). -func (fn ExponentialDecayFunction) Name() string { - return "exp" -} - -// FieldName specifies the name of the field to which this decay function is applied to. -func (fn ExponentialDecayFunction) FieldName(fieldName string) ExponentialDecayFunction { - fn.fieldName = fieldName - return fn -} - -// Origin defines the "central point" by which the decay function calculates -// "distance". -func (fn ExponentialDecayFunction) Origin(origin interface{}) ExponentialDecayFunction { - fn.origin = origin - return fn -} - -// Scale defines the scale to be used with Decay. -func (fn ExponentialDecayFunction) Scale(scale interface{}) ExponentialDecayFunction { - fn.scale = scale - return fn -} - -// Decay defines how documents are scored at the distance given a Scale. -// If no decay is defined, documents at the distance Scale will be scored 0.5. -func (fn ExponentialDecayFunction) Decay(decay float64) ExponentialDecayFunction { - fn.decay = &decay - return fn -} - -// Offset, if defined, computes the decay function only for a distance -// greater than the defined offset. -func (fn ExponentialDecayFunction) Offset(offset interface{}) ExponentialDecayFunction { - fn.offset = offset - return fn -} - -// Weight adjusts the score of the score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#_using_function_score -// for details. -func (fn ExponentialDecayFunction) Weight(weight float64) ExponentialDecayFunction { - fn.weight = &weight - return fn -} - -// GetWeight returns the adjusted score. It is part of the ScoreFunction interface. -// Returns nil if weight is not specified. -func (fn ExponentialDecayFunction) GetWeight() *float64 { - return fn.weight -} - -// MultiValueMode specifies how the decay function should be calculated -// on a field that has multiple values. -// Valid modes are: min, max, avg, and sum. -func (fn ExponentialDecayFunction) MultiValueMode(mode string) ExponentialDecayFunction { - fn.multiValueMode = mode - return fn -} - -// Source returns the serializable JSON data of this score function. -func (fn ExponentialDecayFunction) Source() interface{} { - source := make(map[string]interface{}) - params := make(map[string]interface{}) - source[fn.fieldName] = params - if fn.origin != nil { - params["origin"] = fn.origin - } - params["scale"] = fn.scale - if fn.decay != nil && *fn.decay > 0 { - params["decay"] = *fn.decay - } - if fn.offset != nil { - params["offset"] = fn.offset - } - if fn.multiValueMode != "" { - source["multi_value_mode"] = fn.multiValueMode - } - return source -} - -// -- Gauss Decay -- - -// GaussDecayFunction builds a gauss decay score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html -// for details. -type GaussDecayFunction struct { - fieldName string - origin interface{} - scale interface{} - decay *float64 - offset interface{} - multiValueMode string - weight *float64 -} - -// NewGaussDecayFunction returns a new GaussDecayFunction. -func NewGaussDecayFunction() GaussDecayFunction { - return GaussDecayFunction{} -} - -// Name represents the JSON field name under which the output of Source -// needs to be serialized by FunctionScoreQuery (see FunctionScoreQuery.Source). -func (fn GaussDecayFunction) Name() string { - return "gauss" -} - -// FieldName specifies the name of the field to which this decay function is applied to. -func (fn GaussDecayFunction) FieldName(fieldName string) GaussDecayFunction { - fn.fieldName = fieldName - return fn -} - -// Origin defines the "central point" by which the decay function calculates -// "distance". -func (fn GaussDecayFunction) Origin(origin interface{}) GaussDecayFunction { - fn.origin = origin - return fn -} - -// Scale defines the scale to be used with Decay. -func (fn GaussDecayFunction) Scale(scale interface{}) GaussDecayFunction { - fn.scale = scale - return fn -} - -// Decay defines how documents are scored at the distance given a Scale. -// If no decay is defined, documents at the distance Scale will be scored 0.5. -func (fn GaussDecayFunction) Decay(decay float64) GaussDecayFunction { - fn.decay = &decay - return fn -} - -// Offset, if defined, computes the decay function only for a distance -// greater than the defined offset. -func (fn GaussDecayFunction) Offset(offset interface{}) GaussDecayFunction { - fn.offset = offset - return fn -} - -// Weight adjusts the score of the score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#_using_function_score -// for details. -func (fn GaussDecayFunction) Weight(weight float64) GaussDecayFunction { - fn.weight = &weight - return fn -} - -// GetWeight returns the adjusted score. It is part of the ScoreFunction interface. -// Returns nil if weight is not specified. -func (fn GaussDecayFunction) GetWeight() *float64 { - return fn.weight -} - -// MultiValueMode specifies how the decay function should be calculated -// on a field that has multiple values. -// Valid modes are: min, max, avg, and sum. -func (fn GaussDecayFunction) MultiValueMode(mode string) GaussDecayFunction { - fn.multiValueMode = mode - return fn -} - -// Source returns the serializable JSON data of this score function. -func (fn GaussDecayFunction) Source() interface{} { - source := make(map[string]interface{}) - params := make(map[string]interface{}) - source[fn.fieldName] = params - if fn.origin != nil { - params["origin"] = fn.origin - } - params["scale"] = fn.scale - if fn.decay != nil && *fn.decay > 0 { - params["decay"] = *fn.decay - } - if fn.offset != nil { - params["offset"] = fn.offset - } - if fn.multiValueMode != "" { - source["multi_value_mode"] = fn.multiValueMode - } - // Notice that the weight has to be serialized in FunctionScoreQuery. - return source -} - -// -- Linear Decay -- - -// LinearDecayFunction builds a linear decay score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html -// for details. -type LinearDecayFunction struct { - fieldName string - origin interface{} - scale interface{} - decay *float64 - offset interface{} - multiValueMode string - weight *float64 -} - -// NewLinearDecayFunction initializes and returns a new LinearDecayFunction. -func NewLinearDecayFunction() LinearDecayFunction { - return LinearDecayFunction{} -} - -// Name represents the JSON field name under which the output of Source -// needs to be serialized by FunctionScoreQuery (see FunctionScoreQuery.Source). -func (fn LinearDecayFunction) Name() string { - return "linear" -} - -// FieldName specifies the name of the field to which this decay function is applied to. -func (fn LinearDecayFunction) FieldName(fieldName string) LinearDecayFunction { - fn.fieldName = fieldName - return fn -} - -// Origin defines the "central point" by which the decay function calculates -// "distance". -func (fn LinearDecayFunction) Origin(origin interface{}) LinearDecayFunction { - fn.origin = origin - return fn -} - -// Scale defines the scale to be used with Decay. -func (fn LinearDecayFunction) Scale(scale interface{}) LinearDecayFunction { - fn.scale = scale - return fn -} - -// Decay defines how documents are scored at the distance given a Scale. -// If no decay is defined, documents at the distance Scale will be scored 0.5. -func (fn LinearDecayFunction) Decay(decay float64) LinearDecayFunction { - fn.decay = &decay - return fn -} - -// Offset, if defined, computes the decay function only for a distance -// greater than the defined offset. -func (fn LinearDecayFunction) Offset(offset interface{}) LinearDecayFunction { - fn.offset = offset - return fn -} - -// Weight adjusts the score of the score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#_using_function_score -// for details. -func (fn LinearDecayFunction) Weight(weight float64) LinearDecayFunction { - fn.weight = &weight - return fn -} - -// GetWeight returns the adjusted score. It is part of the ScoreFunction interface. -// Returns nil if weight is not specified. -func (fn LinearDecayFunction) GetWeight() *float64 { - return fn.weight -} - -// MultiValueMode specifies how the decay function should be calculated -// on a field that has multiple values. -// Valid modes are: min, max, avg, and sum. -func (fn LinearDecayFunction) MultiValueMode(mode string) LinearDecayFunction { - fn.multiValueMode = mode - return fn -} - -// GetMultiValueMode returns how the decay function should be calculated -// on a field that has multiple values. -// Valid modes are: min, max, avg, and sum. -func (fn LinearDecayFunction) GetMultiValueMode() string { - return fn.multiValueMode -} - -// Source returns the serializable JSON data of this score function. -func (fn LinearDecayFunction) Source() interface{} { - source := make(map[string]interface{}) - params := make(map[string]interface{}) - source[fn.fieldName] = params - if fn.origin != nil { - params["origin"] = fn.origin - } - params["scale"] = fn.scale - if fn.decay != nil && *fn.decay > 0 { - params["decay"] = *fn.decay - } - if fn.offset != nil { - params["offset"] = fn.offset - } - if fn.multiValueMode != "" { - source["multi_value_mode"] = fn.multiValueMode - } - // Notice that the weight has to be serialized in FunctionScoreQuery. - return source -} - -// -- Script -- - -// ScriptFunction builds a script score function. It uses a script to -// compute or influence the score of documents that match with the inner -// query or filter. -// -// See https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#_script_score -// for details. -type ScriptFunction struct { - script string - lang string - params map[string]interface{} - weight *float64 -} - -// NewScriptFunction initializes and returns a new ScriptFunction. -func NewScriptFunction(script string) ScriptFunction { - return ScriptFunction{ - script: script, - params: make(map[string]interface{}), - } -} - -// Name represents the JSON field name under which the output of Source -// needs to be serialized by FunctionScoreQuery (see FunctionScoreQuery.Source). -func (fn ScriptFunction) Name() string { - return "script_score" -} - -// Script specifies the script to be executed. -func (fn ScriptFunction) Script(script string) ScriptFunction { - fn.script = script - return fn -} - -// Lang specifies the language of the Script. -func (fn ScriptFunction) Lang(lang string) ScriptFunction { - fn.lang = lang - return fn -} - -// Param adds a single parameter to the script. -func (fn ScriptFunction) Param(name string, value interface{}) ScriptFunction { - fn.params[name] = value - return fn -} - -// Params sets all script parameters in a single step. -func (fn ScriptFunction) Params(params map[string]interface{}) ScriptFunction { - fn.params = params - return fn -} - -// Weight adjusts the score of the score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#_using_function_score -// for details. -func (fn ScriptFunction) Weight(weight float64) ScriptFunction { - fn.weight = &weight - return fn -} - -// GetWeight returns the adjusted score. It is part of the ScoreFunction interface. -// Returns nil if weight is not specified. -func (fn ScriptFunction) GetWeight() *float64 { - return fn.weight -} - -// Source returns the serializable JSON data of this score function. -func (fn ScriptFunction) Source() interface{} { - source := make(map[string]interface{}) - if fn.script != "" { - source["script"] = fn.script - } - if fn.lang != "" { - source["lang"] = fn.lang - } - if len(fn.params) > 0 { - source["params"] = fn.params - } - // Notice that the weight has to be serialized in FunctionScoreQuery. - return source -} - -// -- Factor -- - -// FactorFunction is deprecated. -// See https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html -// for details. -type FactorFunction struct { - boostFactor *float32 -} - -// NewFactorFunction initializes and returns a new FactorFunction. -func NewFactorFunction() FactorFunction { - return FactorFunction{} -} - -// Name represents the JSON field name under which the output of Source -// needs to be serialized by FunctionScoreQuery (see FunctionScoreQuery.Source). -func (fn FactorFunction) Name() string { - return "boost_factor" -} - -// BoostFactor specifies a boost for this score function. -func (fn FactorFunction) BoostFactor(boost float32) FactorFunction { - fn.boostFactor = &boost - return fn -} - -// GetWeight always returns nil for (deprecated) FactorFunction. -func (fn FactorFunction) GetWeight() *float64 { - return nil -} - -// Source returns the serializable JSON data of this score function. -func (fn FactorFunction) Source() interface{} { - // Notice that the weight has to be serialized in FunctionScoreQuery. - return fn.boostFactor -} - -// -- Field value factor -- - -// FieldValueFactorFunction is a function score function that allows you -// to use a field from a document to influence the score. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#_field_value_factor. -type FieldValueFactorFunction struct { - field string - factor *float64 - missing *float64 - weight *float64 - modifier string -} - -// NewFieldValueFactorFunction initializes and returns a new FieldValueFactorFunction. -func NewFieldValueFactorFunction() FieldValueFactorFunction { - return FieldValueFactorFunction{} -} - -// Name represents the JSON field name under which the output of Source -// needs to be serialized by FunctionScoreQuery (see FunctionScoreQuery.Source). -func (fn FieldValueFactorFunction) Name() string { - return "field_value_factor" -} - -// Field is the field to be extracted from the document. -func (fn FieldValueFactorFunction) Field(field string) FieldValueFactorFunction { - fn.field = field - return fn -} - -// Factor is the (optional) factor to multiply the field with. If you do not -// specify a factor, the default is 1. -func (fn FieldValueFactorFunction) Factor(factor float64) FieldValueFactorFunction { - fn.factor = &factor - return fn -} - -// Modifier to apply to the field value. It can be one of: none, log, log1p, -// log2p, ln, ln1p, ln2p, square, sqrt, or reciprocal. Defaults to: none. -func (fn FieldValueFactorFunction) Modifier(modifier string) FieldValueFactorFunction { - fn.modifier = modifier - return fn -} - -// Weight adjusts the score of the score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#_using_function_score -// for details. -func (fn FieldValueFactorFunction) Weight(weight float64) FieldValueFactorFunction { - fn.weight = &weight - return fn -} - -// GetWeight returns the adjusted score. It is part of the ScoreFunction interface. -// Returns nil if weight is not specified. -func (fn FieldValueFactorFunction) GetWeight() *float64 { - return fn.weight -} - -// Missing is used if a document does not have that field. -func (fn FieldValueFactorFunction) Missing(missing float64) FieldValueFactorFunction { - fn.missing = &missing - return fn -} - -// Source returns the serializable JSON data of this score function. -func (fn FieldValueFactorFunction) Source() interface{} { - source := make(map[string]interface{}) - if fn.field != "" { - source["field"] = fn.field - } - if fn.factor != nil { - source["factor"] = *fn.factor - } - if fn.missing != nil { - source["missing"] = *fn.missing - } - if fn.modifier != "" { - source["modifier"] = strings.ToLower(fn.modifier) - } - // Notice that the weight has to be serialized in FunctionScoreQuery. - return source -} - -// -- Weight Factor -- - -// WeightFactorFunction builds a weight factor function that multiplies -// the weight to the score. -// See https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#_weight -// for details. -type WeightFactorFunction struct { - weight float64 -} - -// NewWeightFactorFunction initializes and returns a new WeightFactorFunction. -func NewWeightFactorFunction(weight float64) WeightFactorFunction { - return WeightFactorFunction{weight: weight} -} - -// Name represents the JSON field name under which the output of Source -// needs to be serialized by FunctionScoreQuery (see FunctionScoreQuery.Source). -func (fn WeightFactorFunction) Name() string { - return "weight" -} - -// Weight adjusts the score of the score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#_using_function_score -// for details. -func (fn WeightFactorFunction) Weight(weight float64) WeightFactorFunction { - fn.weight = weight - return fn -} - -// GetWeight returns the adjusted score. It is part of the ScoreFunction interface. -// Returns nil if weight is not specified. -func (fn WeightFactorFunction) GetWeight() *float64 { - return &fn.weight -} - -// Source returns the serializable JSON data of this score function. -func (fn WeightFactorFunction) Source() interface{} { - // Notice that the weight has to be serialized in FunctionScoreQuery. - return fn.weight -} - -// -- Random -- - -// RandomFunction builds a random score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#_random -// for details. -type RandomFunction struct { - seed interface{} - weight *float64 -} - -// NewRandomFunction initializes and returns a new RandomFunction. -func NewRandomFunction() RandomFunction { - return RandomFunction{} -} - -// Name represents the JSON field name under which the output of Source -// needs to be serialized by FunctionScoreQuery (see FunctionScoreQuery.Source). -func (fn RandomFunction) Name() string { - return "random_score" -} - -// Seed is documented in 1.6 as a numeric value. However, in the source code -// of the Java client, it also accepts strings. So we accept both here, too. -func (fn RandomFunction) Seed(seed interface{}) RandomFunction { - fn.seed = seed - return fn -} - -// Weight adjusts the score of the score function. -// See https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#_using_function_score -// for details. -func (fn RandomFunction) Weight(weight float64) RandomFunction { - fn.weight = &weight - return fn -} - -// GetWeight returns the adjusted score. It is part of the ScoreFunction interface. -// Returns nil if weight is not specified. -func (fn RandomFunction) GetWeight() *float64 { - return fn.weight -} - -// Source returns the serializable JSON data of this score function. -func (fn RandomFunction) Source() interface{} { - source := make(map[string]interface{}) - if fn.seed != nil { - source["seed"] = fn.seed - } - // Notice that the weight has to be serialized in FunctionScoreQuery. - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_fuzzy.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_fuzzy.go deleted file mode 100644 index 22d83bb..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_fuzzy.go +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// FuzzyQuery uses similarity based on Levenshtein edit distance for -// string fields, and a +/- margin on numeric and date fields. -// For more details, see -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-fuzzy-query.html -type FuzzyQuery struct { - Query - - name string - value interface{} - boost float32 - fuzziness interface{} - prefixLength *int - maxExpansions *int - transpositions *bool - queryName string -} - -// NewFuzzyQuery creates a new fuzzy query. -func NewFuzzyQuery() FuzzyQuery { - q := FuzzyQuery{ - boost: -1.0, - } - return q -} - -func (q FuzzyQuery) Name(name string) FuzzyQuery { - q.name = name - return q -} - -func (q FuzzyQuery) Value(value interface{}) FuzzyQuery { - q.value = value - return q -} - -func (q FuzzyQuery) Boost(boost float32) FuzzyQuery { - q.boost = boost - return q -} - -// Fuzziness can be an integer/long like 0, 1 or 2 as well as strings like "auto", -// "0..1", "1..4" or "0.0..1.0". -func (q FuzzyQuery) Fuzziness(fuzziness interface{}) FuzzyQuery { - q.fuzziness = fuzziness - return q -} - -func (q FuzzyQuery) PrefixLength(prefixLength int) FuzzyQuery { - q.prefixLength = &prefixLength - return q -} - -func (q FuzzyQuery) MaxExpansions(maxExpansions int) FuzzyQuery { - q.maxExpansions = &maxExpansions - return q -} - -func (q FuzzyQuery) Transpositions(transpositions bool) FuzzyQuery { - q.transpositions = &transpositions - return q -} - -func (q FuzzyQuery) QueryName(queryName string) FuzzyQuery { - q.queryName = queryName - return q -} - -// Creates the query source for the ids query. -func (q FuzzyQuery) Source() interface{} { - // { - // "fuzzy" : { - // "user" : { - // "value" : "ki", - // "boost" : 1.0, - // "fuzziness" : 2, - // "prefix_length" : 0, - // "max_expansions" : 100 - // } - // } - - source := make(map[string]interface{}) - - query := make(map[string]interface{}) - source["fuzzy"] = query - - fq := make(map[string]interface{}) - query[q.name] = fq - - fq["value"] = q.value - - if q.boost != -1.0 { - fq["boost"] = q.boost - } - if q.transpositions != nil { - fq["transpositions"] = *q.transpositions - } - if q.fuzziness != nil { - fq["fuzziness"] = q.fuzziness - } - if q.prefixLength != nil { - fq["prefix_length"] = *q.prefixLength - } - if q.maxExpansions != nil { - fq["max_expansions"] = *q.maxExpansions - } - if q.queryName != "" { - fq["_name"] = q.queryName - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_fuzzy_like_this.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_fuzzy_like_this.go deleted file mode 100644 index 90a837d..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_fuzzy_like_this.go +++ /dev/null @@ -1,136 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// FuzzyLikeThisQuery finds documents that are "like" provided text by -// running it against one or more fields. -// For more details, see -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-flt-query.html -type FuzzyLikeThisQuery struct { - Query - - fields []string - boost *float32 - likeText *string - fuzziness interface{} - prefixLength *int - maxQueryTerms *int - ignoreTF *bool - analyzer string - failOnUnsupportedField *bool - queryName string -} - -// NewFuzzyLikeThisQuery creates a new fuzzy query. -func NewFuzzyLikeThisQuery() FuzzyLikeThisQuery { - q := FuzzyLikeThisQuery{ - fields: make([]string, 0), - } - return q -} - -func (q FuzzyLikeThisQuery) Field(field string) FuzzyLikeThisQuery { - q.fields = append(q.fields, field) - return q -} - -func (q FuzzyLikeThisQuery) Fields(fields ...string) FuzzyLikeThisQuery { - q.fields = append(q.fields, fields...) - return q -} - -func (q FuzzyLikeThisQuery) LikeText(likeText string) FuzzyLikeThisQuery { - q.likeText = &likeText - return q -} - -// Fuzziness can be an integer/long like 0, 1 or 2 as well as strings like "auto", -// "0..1", "1..4" or "0.0..1.0". -func (q FuzzyLikeThisQuery) Fuzziness(fuzziness interface{}) FuzzyLikeThisQuery { - q.fuzziness = fuzziness - return q -} - -func (q FuzzyLikeThisQuery) PrefixLength(prefixLength int) FuzzyLikeThisQuery { - q.prefixLength = &prefixLength - return q -} - -func (q FuzzyLikeThisQuery) MaxQueryTerms(maxQueryTerms int) FuzzyLikeThisQuery { - q.maxQueryTerms = &maxQueryTerms - return q -} - -func (q FuzzyLikeThisQuery) IgnoreTF(ignoreTF bool) FuzzyLikeThisQuery { - q.ignoreTF = &ignoreTF - return q -} - -func (q FuzzyLikeThisQuery) Analyzer(analyzer string) FuzzyLikeThisQuery { - q.analyzer = analyzer - return q -} - -func (q FuzzyLikeThisQuery) Boost(boost float32) FuzzyLikeThisQuery { - q.boost = &boost - return q -} - -func (q FuzzyLikeThisQuery) FailOnUnsupportedField(fail bool) FuzzyLikeThisQuery { - q.failOnUnsupportedField = &fail - return q -} - -func (q FuzzyLikeThisQuery) QueryName(queryName string) FuzzyLikeThisQuery { - q.queryName = queryName - return q -} - -// Creates the query source for the ids query. -func (q FuzzyLikeThisQuery) Source() interface{} { - // { - // "fuzzy_like_this" : { - // "fields" : ["name.first", "name.last"], - // "like_text" : "text like this one", - // "max_query_terms" : 12 - // } - - source := make(map[string]interface{}) - - query := make(map[string]interface{}) - source["fuzzy_like_this"] = query - - if len(q.fields) > 0 { - query["fields"] = q.fields - } - query["like_text"] = q.likeText - - if q.maxQueryTerms != nil { - query["max_query_terms"] = *q.maxQueryTerms - } - if q.fuzziness != nil { - query["fuzziness"] = q.fuzziness - } - if q.prefixLength != nil { - query["prefix_length"] = *q.prefixLength - } - if q.ignoreTF != nil { - query["ignore_tf"] = *q.ignoreTF - } - if q.boost != nil { - query["boost"] = *q.boost - } - if q.analyzer != "" { - query["analyzer"] = q.analyzer - } - if q.failOnUnsupportedField != nil { - query["fail_on_unsupported_field"] = *q.failOnUnsupportedField - } - if q.queryName != "" { - query["_name"] = q.queryName - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_fuzzy_like_this_field_query.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_fuzzy_like_this_field_query.go deleted file mode 100644 index eb0b531..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_fuzzy_like_this_field_query.go +++ /dev/null @@ -1,128 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// FuzzyLikeThisFieldQuery is the same as the fuzzy_like_this query, -// except that it runs against a single field. It provides nicer query DSL -// over the generic fuzzy_like_this query, and support typed fields query -// (automatically wraps typed fields with type filter to match only on the specific type). -// For more details, see -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-flt-field-query.html -type FuzzyLikeThisFieldQuery struct { - Query - - field string - boost *float32 - likeText *string - fuzziness interface{} - prefixLength *int - maxQueryTerms *int - ignoreTF *bool - analyzer string - failOnUnsupportedField *bool - queryName string -} - -// NewFuzzyLikeThisFieldQuery creates a new fuzzy like this field query. -func NewFuzzyLikeThisFieldQuery(field string) FuzzyLikeThisFieldQuery { - q := FuzzyLikeThisFieldQuery{ - field: field, - } - return q -} - -func (q FuzzyLikeThisFieldQuery) LikeText(likeText string) FuzzyLikeThisFieldQuery { - q.likeText = &likeText - return q -} - -// Fuzziness can be an integer/long like 0, 1 or 2 as well as strings like "auto", -// "0..1", "1..4" or "0.0..1.0". -func (q FuzzyLikeThisFieldQuery) Fuzziness(fuzziness interface{}) FuzzyLikeThisFieldQuery { - q.fuzziness = fuzziness - return q -} - -func (q FuzzyLikeThisFieldQuery) PrefixLength(prefixLength int) FuzzyLikeThisFieldQuery { - q.prefixLength = &prefixLength - return q -} - -func (q FuzzyLikeThisFieldQuery) MaxQueryTerms(maxQueryTerms int) FuzzyLikeThisFieldQuery { - q.maxQueryTerms = &maxQueryTerms - return q -} - -func (q FuzzyLikeThisFieldQuery) IgnoreTF(ignoreTF bool) FuzzyLikeThisFieldQuery { - q.ignoreTF = &ignoreTF - return q -} - -func (q FuzzyLikeThisFieldQuery) Analyzer(analyzer string) FuzzyLikeThisFieldQuery { - q.analyzer = analyzer - return q -} - -func (q FuzzyLikeThisFieldQuery) Boost(boost float32) FuzzyLikeThisFieldQuery { - q.boost = &boost - return q -} - -func (q FuzzyLikeThisFieldQuery) FailOnUnsupportedField(fail bool) FuzzyLikeThisFieldQuery { - q.failOnUnsupportedField = &fail - return q -} - -func (q FuzzyLikeThisFieldQuery) QueryName(queryName string) FuzzyLikeThisFieldQuery { - q.queryName = queryName - return q -} - -// Creates the query source for the ids query. -func (q FuzzyLikeThisFieldQuery) Source() interface{} { - // { - // "fuzzy_like_this_field" : { - // "name.first": { - // "like_text" : "text like this one", - // "max_query_terms" : 12 - // } - // } - - source := make(map[string]interface{}) - - query := make(map[string]interface{}) - source["fuzzy_like_this_field"] = query - fq := make(map[string]interface{}) - query[q.field] = fq - - fq["like_text"] = q.likeText - - if q.maxQueryTerms != nil { - fq["max_query_terms"] = *q.maxQueryTerms - } - if q.fuzziness != nil { - fq["fuzziness"] = q.fuzziness - } - if q.prefixLength != nil { - fq["prefix_length"] = *q.prefixLength - } - if q.ignoreTF != nil { - fq["ignore_tf"] = *q.ignoreTF - } - if q.boost != nil { - fq["boost"] = *q.boost - } - if q.analyzer != "" { - fq["analyzer"] = q.analyzer - } - if q.failOnUnsupportedField != nil { - fq["fail_on_unsupported_field"] = *q.failOnUnsupportedField - } - if q.queryName != "" { - fq["_name"] = q.queryName - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_fuzzy_like_this_field_query_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_fuzzy_like_this_field_query_test.go deleted file mode 100644 index 20bb1c4..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_fuzzy_like_this_field_query_test.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestFuzzyLikeThisFieldQuery(t *testing.T) { - q := NewFuzzyLikeThisFieldQuery("name.first").LikeText("text like this one").MaxQueryTerms(12) - data, err := json.Marshal(q.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"fuzzy_like_this_field":{"name.first":{"like_text":"text like this one","max_query_terms":12}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_fuzzy_like_this_query_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_fuzzy_like_this_query_test.go deleted file mode 100644 index 42ad1a7..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_fuzzy_like_this_query_test.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestFuzzyLikeThisQuery(t *testing.T) { - q := NewFuzzyLikeThisQuery().Fields("name.first", "name.last").LikeText("text like this one").MaxQueryTerms(12) - data, err := json.Marshal(q.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"fuzzy_like_this":{"fields":["name.first","name.last"],"like_text":"text like this one","max_query_terms":12}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_fuzzy_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_fuzzy_test.go deleted file mode 100644 index 47e4efb..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_fuzzy_test.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestFuzzyQuery(t *testing.T) { - q := NewFuzzyQuery().Name("user").Value("ki").Boost(1.5).Fuzziness(2).PrefixLength(0).MaxExpansions(100) - data, err := json.Marshal(q.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"fuzzy":{"user":{"boost":1.5,"fuzziness":2,"max_expansions":100,"prefix_length":0,"value":"ki"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_has_child.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_has_child.go deleted file mode 100644 index 17bcb56..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_has_child.go +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// The has_child query works the same as the has_child filter, -// by automatically wrapping the filter with a constant_score -// (when using the default score type). -// For more details, see -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-has-child-query.html -type HasChildQuery struct { - query Query - childType string - boost *float32 - scoreType string - minChildren *int - maxChildren *int - shortCircuitCutoff *int - queryName string - innerHit *InnerHit -} - -// NewHasChildQuery creates a new has_child query. -func NewHasChildQuery(childType string, query Query) HasChildQuery { - q := HasChildQuery{ - query: query, - childType: childType, - } - return q -} - -func (q HasChildQuery) Boost(boost float32) HasChildQuery { - q.boost = &boost - return q -} - -func (q HasChildQuery) ScoreType(scoreType string) HasChildQuery { - q.scoreType = scoreType - return q -} - -func (q HasChildQuery) MinChildren(minChildren int) HasChildQuery { - q.minChildren = &minChildren - return q -} - -func (q HasChildQuery) MaxChildren(maxChildren int) HasChildQuery { - q.maxChildren = &maxChildren - return q -} - -func (q HasChildQuery) ShortCircuitCutoff(shortCircuitCutoff int) HasChildQuery { - q.shortCircuitCutoff = &shortCircuitCutoff - return q -} - -func (q HasChildQuery) QueryName(queryName string) HasChildQuery { - q.queryName = queryName - return q -} - -func (q HasChildQuery) InnerHit(innerHit *InnerHit) HasChildQuery { - q.innerHit = innerHit - return q -} - -// Creates the query source for the ids query. -func (q HasChildQuery) Source() interface{} { - // { - // "has_child" : { - // "type" : "blog_tag", - // "query" : { - // "term" : { - // "tag" : "something" - // } - // } - // } - // } - source := make(map[string]interface{}) - - query := make(map[string]interface{}) - source["has_child"] = query - - query["query"] = q.query.Source() - query["type"] = q.childType - if q.boost != nil { - query["boost"] = *q.boost - } - if q.scoreType != "" { - query["score_type"] = q.scoreType - } - if q.minChildren != nil { - query["min_children"] = *q.minChildren - } - if q.maxChildren != nil { - query["max_children"] = *q.maxChildren - } - if q.shortCircuitCutoff != nil { - query["short_circuit_cutoff"] = *q.shortCircuitCutoff - } - if q.queryName != "" { - query["_name"] = q.queryName - } - if q.innerHit != nil { - query["inner_hits"] = q.innerHit.Source() - } - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_has_child_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_has_child_test.go deleted file mode 100644 index 6c16790..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_has_child_test.go +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestHasChildQuery(t *testing.T) { - f := NewHasChildQuery("blog_tag", NewTermQuery("tag", "something")) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"has_child":{"query":{"term":{"tag":"something"}},"type":"blog_tag"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestHasChildQueryWithInnerHit(t *testing.T) { - f := NewHasChildQuery("blog_tag", NewTermQuery("tag", "something")) - f = f.InnerHit(NewInnerHit().Name("comments")) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"has_child":{"inner_hits":{"name":"comments"},"query":{"term":{"tag":"something"}},"type":"blog_tag"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_has_parent.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_has_parent.go deleted file mode 100644 index ff22acd..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_has_parent.go +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// The has_parent query works the same as the has_parent filter, -// by automatically wrapping the filter with a -// constant_score (when using the default score type). -// It has the same syntax as the has_parent filter. -// For more details, see -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-has-parent-query.html -type HasParentQuery struct { - query Query - parentType string - boost *float32 - scoreType string - queryName string - innerHit *InnerHit -} - -// NewHasParentQuery creates a new has_parent query. -func NewHasParentQuery(parentType string, query Query) HasParentQuery { - q := HasParentQuery{ - query: query, - parentType: parentType, - } - return q -} - -func (q HasParentQuery) Boost(boost float32) HasParentQuery { - q.boost = &boost - return q -} - -func (q HasParentQuery) ScoreType(scoreType string) HasParentQuery { - q.scoreType = scoreType - return q -} - -func (q HasParentQuery) QueryName(queryName string) HasParentQuery { - q.queryName = queryName - return q -} - -func (q HasParentQuery) InnerHit(innerHit *InnerHit) HasParentQuery { - q.innerHit = innerHit - return q -} - -// Creates the query source for the ids query. -func (q HasParentQuery) Source() interface{} { - // { - // "has_parent" : { - // "parent_type" : "blog", - // "query" : { - // "term" : { - // "tag" : "something" - // } - // } - // } - // } - source := make(map[string]interface{}) - - query := make(map[string]interface{}) - source["has_parent"] = query - - query["query"] = q.query.Source() - query["parent_type"] = q.parentType - if q.boost != nil { - query["boost"] = *q.boost - } - if q.scoreType != "" { - query["score_type"] = q.scoreType - } - if q.queryName != "" { - query["_name"] = q.queryName - } - if q.innerHit != nil { - query["inner_hits"] = q.innerHit.Source() - } - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_has_parent_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_has_parent_test.go deleted file mode 100644 index 08619c7..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_has_parent_test.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestHasParentQueryTest(t *testing.T) { - f := NewHasParentQuery("blog", NewTermQuery("tag", "something")) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"has_parent":{"parent_type":"blog","query":{"term":{"tag":"something"}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_ids.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_ids.go deleted file mode 100644 index 9a01a04..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_ids.go +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// Filters documents that only have the provided ids. -// Note, this filter does not require the _id field to be indexed -// since it works using the _uid field. -// For more details, see -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-ids-query.html -type IdsQuery struct { - Query - types []string - values []string - boost float32 - queryName string -} - -// NewIdsQuery creates a new ids query. -func NewIdsQuery(types ...string) IdsQuery { - q := IdsQuery{ - types: types, - values: make([]string, 0), - boost: -1.0, - } - return q -} - -func (q IdsQuery) Ids(ids ...string) IdsQuery { - q.values = append(q.values, ids...) - return q -} - -func (q IdsQuery) Boost(boost float32) IdsQuery { - q.boost = boost - return q -} - -func (q IdsQuery) QueryName(queryName string) IdsQuery { - q.queryName = queryName - return q -} - -// Creates the query source for the ids query. -func (q IdsQuery) Source() interface{} { - // { - // "ids" : { - // "type" : "my_type", - // "values" : ["1", "4", "100"] - // } - // } - - source := make(map[string]interface{}) - - query := make(map[string]interface{}) - source["ids"] = query - - // type(s) - if len(q.types) == 1 { - query["type"] = q.types[0] - } else if len(q.types) > 1 { - query["types"] = q.types - } - - // values - query["values"] = q.values - - if q.boost != -1.0 { - query["boost"] = q.boost - } - if q.queryName != "" { - query["_name"] = q.queryName - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_match.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_match.go deleted file mode 100644 index 04d34f6..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_match.go +++ /dev/null @@ -1,198 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// MatchQuery is a family of queries that accept text/numerics/dates, -// analyzes it, and constructs a query out of it. For more details, -// see http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html. -// -// To create a new MatchQuery, use NewMatchQuery. To create specific types -// of queries, e.g. a match_phrase query, use NewMatchQuery(...).Type("phrase"), -// or use one of the shortcuts like NewMatchPhraseQuery(...). -type MatchQuery struct { - Query - name string - value interface{} - matchQueryType string // boolean, phrase, phrase_prefix - operator string // or / and - analyzer string - boost *float32 - slop *int - fuzziness string - prefixLength *int - maxExpansions *int - minimumShouldMatch string - rewrite string - fuzzyRewrite string - lenient *bool - fuzzyTranspositions *bool - zeroTermsQuery string - cutoffFrequency *float32 - queryName string -} - -// NewMatchQuery creates a new MatchQuery. -func NewMatchQuery(name string, value interface{}) MatchQuery { - q := MatchQuery{name: name, value: value} - return q -} - -// NewMatchPhraseQuery creates a new MatchQuery with type phrase. -func NewMatchPhraseQuery(name string, value interface{}) MatchQuery { - q := MatchQuery{name: name, value: value, matchQueryType: "phrase"} - return q -} - -// NewMatchPhrasePrefixQuery creates a new MatchQuery with type phrase_prefix. -func NewMatchPhrasePrefixQuery(name string, value interface{}) MatchQuery { - q := MatchQuery{name: name, value: value, matchQueryType: "phrase_prefix"} - return q -} - -// Type can be "boolean", "phrase", or "phrase_prefix". -func (q MatchQuery) Type(matchQueryType string) MatchQuery { - q.matchQueryType = matchQueryType - return q -} - -func (q MatchQuery) Operator(operator string) MatchQuery { - q.operator = operator - return q -} - -func (q MatchQuery) Analyzer(analyzer string) MatchQuery { - q.analyzer = analyzer - return q -} - -func (q MatchQuery) Boost(boost float32) MatchQuery { - q.boost = &boost - return q -} - -func (q MatchQuery) Slop(slop int) MatchQuery { - q.slop = &slop - return q -} - -func (q MatchQuery) Fuzziness(fuzziness string) MatchQuery { - q.fuzziness = fuzziness - return q -} - -func (q MatchQuery) PrefixLength(prefixLength int) MatchQuery { - q.prefixLength = &prefixLength - return q -} - -func (q MatchQuery) MaxExpansions(maxExpansions int) MatchQuery { - q.maxExpansions = &maxExpansions - return q -} - -func (q MatchQuery) MinimumShouldMatch(minimumShouldMatch string) MatchQuery { - q.minimumShouldMatch = minimumShouldMatch - return q -} - -func (q MatchQuery) Rewrite(rewrite string) MatchQuery { - q.rewrite = rewrite - return q -} - -func (q MatchQuery) FuzzyRewrite(fuzzyRewrite string) MatchQuery { - q.fuzzyRewrite = fuzzyRewrite - return q -} - -func (q MatchQuery) Lenient(lenient bool) MatchQuery { - q.lenient = &lenient - return q -} - -func (q MatchQuery) FuzzyTranspositions(fuzzyTranspositions bool) MatchQuery { - q.fuzzyTranspositions = &fuzzyTranspositions - return q -} - -// ZeroTermsQuery can be "all" or "none". -func (q MatchQuery) ZeroTermsQuery(zeroTermsQuery string) MatchQuery { - q.zeroTermsQuery = zeroTermsQuery - return q -} - -func (q MatchQuery) CutoffFrequency(cutoff float32) MatchQuery { - q.cutoffFrequency = &cutoff - return q -} - -func (q MatchQuery) QueryName(queryName string) MatchQuery { - q.queryName = queryName - return q -} - -func (q MatchQuery) Source() interface{} { - // {"match":{"name":{"query":"value","type":"boolean/phrase"}}} - source := make(map[string]interface{}) - - match := make(map[string]interface{}) - source["match"] = match - - query := make(map[string]interface{}) - match[q.name] = query - - query["query"] = q.value - - if q.matchQueryType != "" { - query["type"] = q.matchQueryType - } - if q.operator != "" { - query["operator"] = q.operator - } - if q.analyzer != "" { - query["analyzer"] = q.analyzer - } - if q.boost != nil { - query["boost"] = *q.boost - } - if q.slop != nil { - query["slop"] = *q.slop - } - if q.fuzziness != "" { - query["fuzziness"] = q.fuzziness - } - if q.prefixLength != nil { - query["prefix_length"] = *q.prefixLength - } - if q.maxExpansions != nil { - query["max_expansions"] = *q.maxExpansions - } - if q.minimumShouldMatch != "" { - query["minimum_should_match"] = q.minimumShouldMatch - } - if q.rewrite != "" { - query["rewrite"] = q.rewrite - } - if q.fuzzyRewrite != "" { - query["fuzzy_rewrite"] = q.fuzzyRewrite - } - if q.lenient != nil { - query["lenient"] = *q.lenient - } - if q.fuzzyTranspositions != nil { - query["fuzzy_transpositions"] = *q.fuzzyTranspositions - } - if q.zeroTermsQuery != "" { - query["zero_terms_query"] = q.zeroTermsQuery - } - if q.cutoffFrequency != nil { - query["cutoff_frequency"] = q.cutoffFrequency - } - if q.queryName != "" { - query["_name"] = q.queryName - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_match_all.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_match_all.go deleted file mode 100644 index d2ba3eb..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_match_all.go +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// A query that matches all documents. Maps to Lucene MatchAllDocsQuery. -// For more details, see -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-match-all-query.html -type MatchAllQuery struct { - Query - normsField string - boost *float32 -} - -// NewMatchAllQuery creates a new match all query. -func NewMatchAllQuery() MatchAllQuery { - q := MatchAllQuery{} - return q -} - -func (q MatchAllQuery) NormsField(normsField string) MatchAllQuery { - q.normsField = normsField - return q -} - -func (q MatchAllQuery) Boost(boost float32) MatchAllQuery { - q.boost = &boost - return q -} - -// Creates the query source for the match all query. -func (q MatchAllQuery) Source() interface{} { - // { - // "match_all" : { ... } - // } - source := make(map[string]interface{}) - params := make(map[string]interface{}) - source["match_all"] = params - if q.boost != nil { - params["boost"] = q.boost - } - if q.normsField != "" { - params["norms_field"] = q.normsField - } - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_match_all_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_match_all_test.go deleted file mode 100644 index 626c912..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_match_all_test.go +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestMatchAllQuery(t *testing.T) { - q := NewMatchAllQuery() - data, err := json.Marshal(q.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"match_all":{}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMatchAllQueryWithParams(t *testing.T) { - q := NewMatchAllQuery().NormsField("field_name").Boost(3.14) - data, err := json.Marshal(q.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"match_all":{"boost":3.14,"norms_field":"field_name"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_match_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_match_test.go deleted file mode 100644 index 64ad82d..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_match_test.go +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestMatchQuery(t *testing.T) { - q := NewMatchQuery("message", "this is a test") - data, err := json.Marshal(q.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"match":{"message":{"query":"this is a test"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMatchPhraseQuery(t *testing.T) { - q := NewMatchPhraseQuery("message", "this is a test") - data, err := json.Marshal(q.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"match":{"message":{"query":"this is a test","type":"phrase"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMatchPhrasePrefixQuery(t *testing.T) { - q := NewMatchPhrasePrefixQuery("message", "this is a test") - data, err := json.Marshal(q.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"match":{"message":{"query":"this is a test","type":"phrase_prefix"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMatchQueryWithOptions(t *testing.T) { - q := NewMatchQuery("message", "this is a test").Analyzer("whitespace").Operator("or").Boost(2.5) - data, err := json.Marshal(q.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"match":{"message":{"analyzer":"whitespace","boost":2.5,"operator":"or","query":"this is a test"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_more_like_this.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_more_like_this.go deleted file mode 100644 index df12026..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_more_like_this.go +++ /dev/null @@ -1,399 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "math" -) - -// More like this query find documents that are “like” provided text -// by running it against one or more fields. For more details, see -// http://www.elasticsearch.org/guide/reference/query-dsl/mlt-query/ -type MoreLikeThisQuery struct { - fields []string - likeText string - ids []string - docs []*MoreLikeThisQueryItem - include *bool - minimumShouldMatch string - minTermFreq *int - maxQueryTerms *int - stopWords []string - minDocFreq *int - maxDocFreq *int - minWordLen *int - maxWordLen *int - boostTerms *float64 - boost *float64 - analyzer string - failOnUnsupportedField *bool - queryName string -} - -// NewMoreLikeThisQuery creates a new more-like-this query. -func NewMoreLikeThisQuery(likeText string) MoreLikeThisQuery { - return MoreLikeThisQuery{ - likeText: likeText, - fields: make([]string, 0), - ids: make([]string, 0), - docs: make([]*MoreLikeThisQueryItem, 0), - stopWords: make([]string, 0), - } -} - -// Field adds one or more field names to the query. -func (q MoreLikeThisQuery) Field(fields ...string) MoreLikeThisQuery { - q.fields = append(q.fields, fields...) - return q -} - -// Fields adds one or more field names to the query. -// Deprecated: Use Field for compatibility with elastic.v3. -func (q MoreLikeThisQuery) Fields(fields ...string) MoreLikeThisQuery { - q.fields = append(q.fields, fields...) - return q -} - -// StopWord sets the stopwords. Any word in this set is considered -// "uninteresting" and ignored. Even if your Analyzer allows stopwords, -// you might want to tell the MoreLikeThis code to ignore them, as for -// the purposes of document similarity it seems reasonable to assume that -// "a stop word is never interesting". -func (q MoreLikeThisQuery) StopWord(stopWords ...string) MoreLikeThisQuery { - q.stopWords = append(q.stopWords, stopWords...) - return q -} - -// StopWords is an alias for StopWord. -// Deprecated: Use StopWord for compatibility with elastic.v3. -func (q MoreLikeThisQuery) StopWords(stopWords ...string) MoreLikeThisQuery { - q.stopWords = append(q.stopWords, stopWords...) - return q -} - -// LikeText sets the text to use in order to find documents that are "like" this. -func (q MoreLikeThisQuery) LikeText(likeText string) MoreLikeThisQuery { - q.likeText = likeText - return q -} - -// Docs sets the documents to use in order to find documents that are "like" this. -func (q MoreLikeThisQuery) Docs(docs ...*MoreLikeThisQueryItem) MoreLikeThisQuery { - q.docs = append(q.docs, docs...) - return q -} - -// Ids sets the document ids to use in order to find documents that are "like" this. -func (q MoreLikeThisQuery) Ids(ids ...string) MoreLikeThisQuery { - q.ids = append(q.ids, ids...) - return q -} - -// Include specifies whether the input documents should also be included -// in the results returned. Defaults to false. -func (q MoreLikeThisQuery) Include(include bool) MoreLikeThisQuery { - q.include = &include - return q -} - -// PercentTermsToMatch will be changed to MinimumShouldMatch. -func (q MoreLikeThisQuery) PercentTermsToMatch(percentTermsToMatch float64) MoreLikeThisQuery { - q.minimumShouldMatch = fmt.Sprintf("%d%%", int(math.Floor(percentTermsToMatch*100))) - return q -} - -// MinimumShouldMatch sets the number of terms that must match the generated -// query expressed in the common syntax for minimum should match. -// The default value is "30%". -// -// This used to be "PercentTermsToMatch". -func (q MoreLikeThisQuery) MinimumShouldMatch(minimumShouldMatch string) MoreLikeThisQuery { - q.minimumShouldMatch = minimumShouldMatch - return q -} - -// MinTermFreq is the frequency below which terms will be ignored in the -// source doc. The default frequency is 2. -func (q MoreLikeThisQuery) MinTermFreq(minTermFreq int) MoreLikeThisQuery { - q.minTermFreq = &minTermFreq - return q -} - -// MaxQueryTerms sets the maximum number of query terms that will be included -// in any generated query. It defaults to 25. -func (q MoreLikeThisQuery) MaxQueryTerms(maxQueryTerms int) MoreLikeThisQuery { - q.maxQueryTerms = &maxQueryTerms - return q -} - -// MinDocFreq sets the frequency at which words will be ignored which do -// not occur in at least this many docs. The default is 5. -func (q MoreLikeThisQuery) MinDocFreq(minDocFreq int) MoreLikeThisQuery { - q.minDocFreq = &minDocFreq - return q -} - -// MaxDocFreq sets the maximum frequency for which words may still appear. -// Words that appear in more than this many docs will be ignored. -// It defaults to unbounded. -func (q MoreLikeThisQuery) MaxDocFreq(maxDocFreq int) MoreLikeThisQuery { - q.maxDocFreq = &maxDocFreq - return q -} - -// MinWordLength sets the minimum word length below which words will be -// ignored. It defaults to 0. -func (q MoreLikeThisQuery) MinWordLen(minWordLen int) MoreLikeThisQuery { - q.minWordLen = &minWordLen - return q -} - -// MaxWordLen sets the maximum word length above which words will be ignored. -// Defaults to unbounded (0). -func (q MoreLikeThisQuery) MaxWordLen(maxWordLen int) MoreLikeThisQuery { - q.maxWordLen = &maxWordLen - return q -} - -// BoostTerms sets the boost factor to use when boosting terms. -// It defaults to 1. -func (q MoreLikeThisQuery) BoostTerms(boostTerms float64) MoreLikeThisQuery { - q.boostTerms = &boostTerms - return q -} - -// Analyzer specifies the analyzer that will be use to analyze the text. -// Defaults to the analyzer associated with the field. -func (q MoreLikeThisQuery) Analyzer(analyzer string) MoreLikeThisQuery { - q.analyzer = analyzer - return q -} - -// Boost sets the boost for this query. -func (q MoreLikeThisQuery) Boost(boost float64) MoreLikeThisQuery { - q.boost = &boost - return q -} - -// FailOnUnsupportedField indicates whether to fail or return no result -// when this query is run against a field which is not supported such as -// a binary/numeric field. -func (q MoreLikeThisQuery) FailOnUnsupportedField(fail bool) MoreLikeThisQuery { - q.failOnUnsupportedField = &fail - return q -} - -// QueryName sets the query name for the filter that can be used when -// searching for matched_filters per hit. -func (q MoreLikeThisQuery) QueryName(queryName string) MoreLikeThisQuery { - q.queryName = queryName - return q -} - -// Creates the query source for the mlt query. -func (q MoreLikeThisQuery) Source() interface{} { - // { - // "match_all" : { ... } - // } - params := make(map[string]interface{}) - source := make(map[string]interface{}) - source["mlt"] = params - - if q.likeText == "" && len(q.docs) == 0 && len(q.ids) == 0 { - // We have no form of returning errors for invalid queries as of Elastic v2. - // We also don't have access to the client here, so we can't log anything. - // All we can do is to return an empty query, I suppose. - // TODO Is there a better approach here? - //return nil, errors.New(`more_like_this requires some documents to be "liked"`) - return source - } - - if len(q.fields) > 0 { - params["fields"] = q.fields - } - if q.likeText != "" { - params["like_text"] = q.likeText - } - if q.minimumShouldMatch != "" { - params["minimum_should_match"] = q.minimumShouldMatch - } - if q.minTermFreq != nil { - params["min_term_freq"] = *q.minTermFreq - } - if q.maxQueryTerms != nil { - params["max_query_terms"] = *q.maxQueryTerms - } - if len(q.stopWords) > 0 { - params["stop_words"] = q.stopWords - } - if q.minDocFreq != nil { - params["min_doc_freq"] = *q.minDocFreq - } - if q.maxDocFreq != nil { - params["max_doc_freq"] = *q.maxDocFreq - } - if q.minWordLen != nil { - params["min_word_len"] = *q.minWordLen - } - if q.maxWordLen != nil { - params["max_word_len"] = *q.maxWordLen - } - if q.boostTerms != nil { - params["boost_terms"] = *q.boostTerms - } - if q.boost != nil { - params["boost"] = *q.boost - } - if q.analyzer != "" { - params["analyzer"] = q.analyzer - } - if q.failOnUnsupportedField != nil { - params["fail_on_unsupported_field"] = *q.failOnUnsupportedField - } - if q.queryName != "" { - params["_name"] = q.queryName - } - if len(q.ids) > 0 { - params["ids"] = q.ids - } - if len(q.docs) > 0 { - docs := make([]interface{}, 0) - for _, doc := range q.docs { - docs = append(docs, doc.Source()) - } - params["docs"] = docs - } - if q.include != nil { - params["exclude"] = !(*q.include) // ES 1.x only has exclude - } - - return source -} - -// -- MoreLikeThisQueryItem -- - -// MoreLikeThisQueryItem represents a single item of a MoreLikeThisQuery -// to be "liked" or "unliked". -type MoreLikeThisQueryItem struct { - likeText string - - index string - typ string - id string - doc interface{} - fields []string - routing string - fsc *FetchSourceContext - version int64 - versionType string -} - -// NewMoreLikeThisQueryItem creates and initializes a MoreLikeThisQueryItem. -func NewMoreLikeThisQueryItem() *MoreLikeThisQueryItem { - return &MoreLikeThisQueryItem{ - version: -1, - } -} - -// LikeText represents a text to be "liked". -func (item *MoreLikeThisQueryItem) LikeText(likeText string) *MoreLikeThisQueryItem { - item.likeText = likeText - return item -} - -// Index represents the index of the item. -func (item *MoreLikeThisQueryItem) Index(index string) *MoreLikeThisQueryItem { - item.index = index - return item -} - -// Type represents the document type of the item. -func (item *MoreLikeThisQueryItem) Type(typ string) *MoreLikeThisQueryItem { - item.typ = typ - return item -} - -// Id represents the document id of the item. -func (item *MoreLikeThisQueryItem) Id(id string) *MoreLikeThisQueryItem { - item.id = id - return item -} - -// Doc represents a raw document template for the item. -func (item *MoreLikeThisQueryItem) Doc(doc interface{}) *MoreLikeThisQueryItem { - item.doc = doc - return item -} - -// Fields represents the list of fields of the item. -func (item *MoreLikeThisQueryItem) Fields(fields ...string) *MoreLikeThisQueryItem { - item.fields = append(item.fields, fields...) - return item -} - -// Routing sets the routing associated with the item. -func (item *MoreLikeThisQueryItem) Routing(routing string) *MoreLikeThisQueryItem { - item.routing = routing - return item -} - -// FetchSourceContext represents the fetch source of the item which controls -// if and how _source should be returned. -func (item *MoreLikeThisQueryItem) FetchSourceContext(fsc *FetchSourceContext) *MoreLikeThisQueryItem { - item.fsc = fsc - return item -} - -// Version specifies the version of the item. -func (item *MoreLikeThisQueryItem) Version(version int64) *MoreLikeThisQueryItem { - item.version = version - return item -} - -// VersionType represents the version type of the item. -func (item *MoreLikeThisQueryItem) VersionType(versionType string) *MoreLikeThisQueryItem { - item.versionType = versionType - return item -} - -// Source returns the JSON-serializable fragment of the entity. -func (item *MoreLikeThisQueryItem) Source() interface{} { - if item.likeText != "" { - return item.likeText - } - - source := make(map[string]interface{}) - - if item.index != "" { - source["_index"] = item.index - } - if item.typ != "" { - source["_type"] = item.typ - } - if item.id != "" { - source["_id"] = item.id - } - if item.doc != nil { - source["doc"] = item.doc - } - if len(item.fields) > 0 { - source["fields"] = item.fields - } - if item.routing != "" { - source["_routing"] = item.routing - } - if item.fsc != nil { - source["_source"] = item.fsc.Source() - } - if item.version >= 0 { - source["_version"] = item.version - } - if item.versionType != "" { - source["_version_type"] = item.versionType - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_more_like_this_field.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_more_like_this_field.go deleted file mode 100644 index e3d723b..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_more_like_this_field.go +++ /dev/null @@ -1,189 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// The more_like_this_field query is the same as the more_like_this query, -// except it runs against a single field. It provides nicer query DSL -// over the generic more_like_this query, and support typed fields query -// (automatically wraps typed fields with type filter to match only -// on the specific type). -// -// For more details, see: -// http://www.elasticsearch.org/guide/reference/query-dsl/mlt-field-query/ -type MoreLikeThisFieldQuery struct { - Query - - name string - likeText string - percentTermsToMatch *float32 - minTermFreq *int - maxQueryTerms *int - stopWords []string - minDocFreq *int - maxDocFreq *int - minWordLen *int - maxWordLen *int - boostTerms *float32 - boost *float32 - analyzer string - failOnUnsupportedField *bool -} - -// Creates a new mlt_field query. -func NewMoreLikeThisFieldQuery(name, likeText string) MoreLikeThisFieldQuery { - q := MoreLikeThisFieldQuery{ - name: name, - likeText: likeText, - stopWords: make([]string, 0), - } - return q -} - -func (q MoreLikeThisFieldQuery) Name(name string) MoreLikeThisFieldQuery { - q.name = name - return q -} - -func (q MoreLikeThisFieldQuery) StopWord(stopWord string) MoreLikeThisFieldQuery { - q.stopWords = append(q.stopWords, stopWord) - return q -} - -func (q MoreLikeThisFieldQuery) StopWords(stopWords ...string) MoreLikeThisFieldQuery { - q.stopWords = append(q.stopWords, stopWords...) - return q -} - -func (q MoreLikeThisFieldQuery) LikeText(likeText string) MoreLikeThisFieldQuery { - q.likeText = likeText - return q -} - -func (q MoreLikeThisFieldQuery) PercentTermsToMatch(percentTermsToMatch float32) MoreLikeThisFieldQuery { - q.percentTermsToMatch = &percentTermsToMatch - return q -} - -func (q MoreLikeThisFieldQuery) MinTermFreq(minTermFreq int) MoreLikeThisFieldQuery { - q.minTermFreq = &minTermFreq - return q -} - -func (q MoreLikeThisFieldQuery) MaxQueryTerms(maxQueryTerms int) MoreLikeThisFieldQuery { - q.maxQueryTerms = &maxQueryTerms - return q -} - -func (q MoreLikeThisFieldQuery) MinDocFreq(minDocFreq int) MoreLikeThisFieldQuery { - q.minDocFreq = &minDocFreq - return q -} - -func (q MoreLikeThisFieldQuery) MaxDocFreq(maxDocFreq int) MoreLikeThisFieldQuery { - q.maxDocFreq = &maxDocFreq - return q -} - -func (q MoreLikeThisFieldQuery) MinWordLen(minWordLen int) MoreLikeThisFieldQuery { - q.minWordLen = &minWordLen - return q -} - -func (q MoreLikeThisFieldQuery) MaxWordLen(maxWordLen int) MoreLikeThisFieldQuery { - q.maxWordLen = &maxWordLen - return q -} - -func (q MoreLikeThisFieldQuery) BoostTerms(boostTerms float32) MoreLikeThisFieldQuery { - q.boostTerms = &boostTerms - return q -} - -func (q MoreLikeThisFieldQuery) Analyzer(analyzer string) MoreLikeThisFieldQuery { - q.analyzer = analyzer - return q -} - -func (q MoreLikeThisFieldQuery) Boost(boost float32) MoreLikeThisFieldQuery { - q.boost = &boost - return q -} - -func (q MoreLikeThisFieldQuery) FailOnUnsupportedField(fail bool) MoreLikeThisFieldQuery { - q.failOnUnsupportedField = &fail - return q -} - -// Creates the query source for the mlt query. -func (q MoreLikeThisFieldQuery) Source() interface{} { - // { - // "more_like_this_field" : { - // "name.first" : { - // "like_text" : "text like this one", - // "min_term_freq" : 1, - // "max_query_terms" : 12 - // } - // } - // } - - source := make(map[string]interface{}) - - params := make(map[string]interface{}) - source["more_like_this_field"] = params - - mlt := make(map[string]interface{}) - params[q.name] = mlt - - mlt["like_text"] = q.likeText - - if q.percentTermsToMatch != nil { - mlt["percent_terms_to_match"] = *q.percentTermsToMatch - } - - if q.minTermFreq != nil { - mlt["min_term_freq"] = *q.minTermFreq - } - - if q.maxQueryTerms != nil { - mlt["max_query_terms"] = *q.maxQueryTerms - } - - if len(q.stopWords) > 0 { - mlt["stop_words"] = q.stopWords - } - - if q.minDocFreq != nil { - mlt["min_doc_freq"] = *q.minDocFreq - } - - if q.maxDocFreq != nil { - mlt["max_doc_freq"] = *q.maxDocFreq - } - - if q.minWordLen != nil { - mlt["min_word_len"] = *q.minWordLen - } - - if q.maxWordLen != nil { - mlt["max_word_len"] = *q.maxWordLen - } - - if q.boostTerms != nil { - mlt["boost_terms"] = *q.boostTerms - } - - if q.boost != nil { - mlt["boost"] = *q.boost - } - - if q.analyzer != "" { - mlt["analyzer"] = q.analyzer - } - - if q.failOnUnsupportedField != nil { - mlt["fail_on_unsupported_field"] = *q.failOnUnsupportedField - } - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_more_like_this_field_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_more_like_this_field_test.go deleted file mode 100644 index 03f760f..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_more_like_this_field_test.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "testing" -) - -func TestMoreLikeThisFieldQuery(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another Golang topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Common query - q := NewMoreLikeThisFieldQuery("message", "Golang topic.") - searchResult, err := client.Search(). - Index(testIndexName). - Query(&q). - Do() - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_more_like_this_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_more_like_this_test.go deleted file mode 100644 index 074474d..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_more_like_this_test.go +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestMoreLikeThisQuerySourceWithLikeText(t *testing.T) { - q := NewMoreLikeThisQuery("Golang topic").Field("message") - data, err := json.Marshal(q.Source()) - if err != nil { - t.Fatal(err) - } - got := string(data) - expected := `{"mlt":{"fields":["message"],"like_text":"Golang topic"}}` - if got != expected { - t.Fatalf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMoreLikeThisQuerySourceWithIds(t *testing.T) { - q := NewMoreLikeThisQuery("") - q = q.Ids("1", "2") - data, err := json.Marshal(q.Source()) - if err != nil { - t.Fatal(err) - } - got := string(data) - expected := `{"mlt":{"ids":["1","2"]}}` - if got != expected { - t.Fatalf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMoreLikeThisQuerySourceWithDocs(t *testing.T) { - q := NewMoreLikeThisQuery("") - q = q.Docs( - NewMoreLikeThisQueryItem().Id("1"), - NewMoreLikeThisQueryItem().Index(testIndexName2).Type("comment").Id("2").Routing("routing_id"), - ) - q = q.Include(false) - data, err := json.Marshal(q.Source()) - if err != nil { - t.Fatal(err) - } - got := string(data) - expected := `{"mlt":{"docs":[{"_id":"1"},{"_id":"2","_index":"elastic-test2","_routing":"routing_id","_type":"comment"}],"exclude":true}}` - if got != expected { - t.Fatalf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestMoreLikeThisQuery(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another Golang topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Common query - q := NewMoreLikeThisQuery("Golang topic.") - q = q.Fields("message") - searchResult, err := client.Search(). - Index(testIndexName). - Query(&q). - Do() - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_multi_match.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_multi_match.go deleted file mode 100644 index a52b853..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_multi_match.go +++ /dev/null @@ -1,253 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "strings" -) - -// The multi_match query builds further on top of the match query by allowing multiple fields to be specified. -// For more details, see: -// http://www.elasticsearch.org/guide/reference/query-dsl/multi-match-query.html -type MultiMatchQuery struct { - Query - text interface{} - fields []string - fieldBoosts map[string]*float32 - matchQueryType string // best_fields, most_fields, cross_fields, phrase, phrase_prefix - operator string // and / or - analyzer string - boost *float32 - slop *int - fuzziness string - prefixLength *int - maxExpansions *int - minimumShouldMatch string - rewrite string - fuzzyRewrite string - useDisMax *bool - tieBreaker *float32 - lenient *bool - cutoffFrequency *float32 - zeroTermsQuery string - queryName string -} - -func NewMultiMatchQuery(text interface{}, fields ...string) MultiMatchQuery { - q := MultiMatchQuery{ - text: text, - fields: make([]string, 0), - fieldBoosts: make(map[string]*float32), - } - q.fields = append(q.fields, fields...) - return q -} - -func (q MultiMatchQuery) Field(field string) MultiMatchQuery { - q.fields = append(q.fields, field) - return q -} - -func (q MultiMatchQuery) FieldWithBoost(field string, boost float32) MultiMatchQuery { - q.fields = append(q.fields, field) - q.fieldBoosts[field] = &boost - return q -} - -// Type can be: "best_fields", "boolean", "most_fields", "cross_fields", -// "phrase", or "phrase_prefix". -func (q MultiMatchQuery) Type(matchQueryType string) MultiMatchQuery { - zero := float32(0.0) - one := float32(1.0) - - switch strings.ToLower(matchQueryType) { - default: // best_fields / boolean - q.matchQueryType = "best_fields" - q.tieBreaker = &zero - case "most_fields": - q.matchQueryType = "most_fields" - q.tieBreaker = &one - case "cross_fields": - q.matchQueryType = "cross_fields" - q.tieBreaker = &zero - case "phrase": - q.matchQueryType = "phrase" - q.tieBreaker = &zero - case "phrase_prefix": - q.matchQueryType = "phrase_prefix" - q.tieBreaker = &zero - } - return q -} - -func (q MultiMatchQuery) Operator(operator string) MultiMatchQuery { - q.operator = operator - return q -} - -func (q MultiMatchQuery) Analyzer(analyzer string) MultiMatchQuery { - q.analyzer = analyzer - return q -} - -func (q MultiMatchQuery) Boost(boost float32) MultiMatchQuery { - q.boost = &boost - return q -} - -func (q MultiMatchQuery) Slop(slop int) MultiMatchQuery { - q.slop = &slop - return q -} - -func (q MultiMatchQuery) Fuzziness(fuzziness string) MultiMatchQuery { - q.fuzziness = fuzziness - return q -} - -func (q MultiMatchQuery) PrefixLength(prefixLength int) MultiMatchQuery { - q.prefixLength = &prefixLength - return q -} - -func (q MultiMatchQuery) MaxExpansions(maxExpansions int) MultiMatchQuery { - q.maxExpansions = &maxExpansions - return q -} - -func (q MultiMatchQuery) MinimumShouldMatch(minimumShouldMatch string) MultiMatchQuery { - q.minimumShouldMatch = minimumShouldMatch - return q -} - -func (q MultiMatchQuery) Rewrite(rewrite string) MultiMatchQuery { - q.rewrite = rewrite - return q -} - -func (q MultiMatchQuery) FuzzyRewrite(fuzzyRewrite string) MultiMatchQuery { - q.fuzzyRewrite = fuzzyRewrite - return q -} - -// Deprecated. -func (q MultiMatchQuery) UseDisMax(useDisMax bool) MultiMatchQuery { - q.useDisMax = &useDisMax - return q -} - -func (q MultiMatchQuery) TieBreaker(tieBreaker float32) MultiMatchQuery { - q.tieBreaker = &tieBreaker - return q -} - -func (q MultiMatchQuery) Lenient(lenient bool) MultiMatchQuery { - q.lenient = &lenient - return q -} - -func (q MultiMatchQuery) CutoffFrequency(cutoff float32) MultiMatchQuery { - q.cutoffFrequency = &cutoff - return q -} - -// ZeroTermsQuery can be "all" or "none". -func (q MultiMatchQuery) ZeroTermsQuery(zeroTermsQuery string) MultiMatchQuery { - q.zeroTermsQuery = zeroTermsQuery - return q -} - -func (q MultiMatchQuery) QueryName(queryName string) MultiMatchQuery { - q.queryName = queryName - return q -} - -func (q MultiMatchQuery) Source() interface{} { - // - // { - // "multi_match" : { - // "query" : "this is a test", - // "fields" : [ "subject", "message" ] - // } - // } - - source := make(map[string]interface{}) - - multiMatch := make(map[string]interface{}) - source["multi_match"] = multiMatch - - multiMatch["query"] = q.text - - if len(q.fields) > 0 { - fields := make([]string, 0) - for _, field := range q.fields { - if boost, found := q.fieldBoosts[field]; found { - if boost != nil { - fields = append(fields, fmt.Sprintf("%s^%f", field, *boost)) - } else { - fields = append(fields, field) - } - } else { - fields = append(fields, field) - } - } - multiMatch["fields"] = fields - } - - if q.matchQueryType != "" { - multiMatch["type"] = q.matchQueryType - } - - if q.operator != "" { - multiMatch["operator"] = q.operator - } - if q.analyzer != "" { - multiMatch["analyzer"] = q.analyzer - } - if q.boost != nil { - multiMatch["boost"] = *q.boost - } - if q.slop != nil { - multiMatch["slop"] = *q.slop - } - if q.fuzziness != "" { - multiMatch["fuzziness"] = q.fuzziness - } - if q.prefixLength != nil { - multiMatch["prefix_length"] = *q.prefixLength - } - if q.maxExpansions != nil { - multiMatch["max_expansions"] = *q.maxExpansions - } - if q.minimumShouldMatch != "" { - multiMatch["minimum_should_match"] = q.minimumShouldMatch - } - if q.rewrite != "" { - multiMatch["rewrite"] = q.rewrite - } - if q.fuzzyRewrite != "" { - multiMatch["fuzzy_rewrite"] = q.fuzzyRewrite - } - if q.useDisMax != nil { - multiMatch["use_dis_max"] = *q.useDisMax - } - if q.tieBreaker != nil { - multiMatch["tie_breaker"] = *q.tieBreaker - } - if q.lenient != nil { - multiMatch["lenient"] = *q.lenient - } - if q.cutoffFrequency != nil { - multiMatch["cutoff_frequency"] = *q.cutoffFrequency - } - if q.zeroTermsQuery != "" { - multiMatch["zero_terms_query"] = q.zeroTermsQuery - } - if q.queryName != "" { - multiMatch["_name"] = q.queryName - } - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_nested.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_nested.go deleted file mode 100644 index 375be65..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_nested.go +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// Nested query allows to query nested objects / docs (see nested mapping). -// The query is executed against the nested objects / docs as if they were -// indexed as separate docs (they are, internally) and resulting in the -// root parent doc (or parent nested mapping). -// -// For more details, see: -// http://www.elasticsearch.org/guide/reference/query-dsl/nested-query/ -type NestedQuery struct { - query Query - filter Filter - path string - scoreMode string - boost *float32 - queryName string - innerHit *InnerHit -} - -// Creates a new nested_query query. -func NewNestedQuery(path string) NestedQuery { - return NestedQuery{path: path} -} - -func (q NestedQuery) Query(query Query) NestedQuery { - q.query = query - return q -} - -func (q NestedQuery) Filter(filter Filter) NestedQuery { - q.filter = filter - return q -} - -func (q NestedQuery) Path(path string) NestedQuery { - q.path = path - return q -} - -func (q NestedQuery) ScoreMode(scoreMode string) NestedQuery { - q.scoreMode = scoreMode - return q -} - -func (q NestedQuery) Boost(boost float32) NestedQuery { - q.boost = &boost - return q -} - -func (q NestedQuery) QueryName(queryName string) NestedQuery { - q.queryName = queryName - return q -} - -func (q NestedQuery) InnerHit(innerHit *InnerHit) NestedQuery { - q.innerHit = innerHit - return q -} - -// Creates the query source for the nested_query query. -func (q NestedQuery) Source() interface{} { - // { - // "nested" : { - // "query" : { - // "bool" : { - // "must" : [ - // { - // "match" : {"obj1.name" : "blue"} - // }, - // { - // "range" : {"obj1.count" : {"gt" : 5}} - // } - // ] - // } - // }, - // "filter" : { - // ... - // }, - // "path" : "obj1", - // "score_mode" : "avg", - // "boost" : 1.0 - // } - // } - - query := make(map[string]interface{}) - - nq := make(map[string]interface{}) - query["nested"] = nq - if q.query != nil { - nq["query"] = q.query.Source() - } - if q.filter != nil { - nq["filter"] = q.filter.Source() - } - nq["path"] = q.path - if q.scoreMode != "" { - nq["score_mode"] = q.scoreMode - } - if q.boost != nil { - nq["boost"] = *q.boost - } - if q.queryName != "" { - nq["_name"] = q.queryName - } - if q.innerHit != nil { - nq["inner_hits"] = q.innerHit.Source() - } - return query -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_nested_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_nested_test.go deleted file mode 100644 index 58609d6..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_nested_test.go +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestNestedQuery(t *testing.T) { - f := NewNestedQuery("obj1") - bq := NewBoolQuery() - bq = bq.Must(NewTermQuery("obj1.name", "blue")) - bq = bq.Must(NewRangeQuery("obj1.count").Gt(5)) - f = f.Query(bq) - f = f.QueryName("qname") - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"nested":{"_name":"qname","path":"obj1","query":{"bool":{"must":[{"term":{"obj1.name":"blue"}},{"range":{"obj1.count":{"from":5,"include_lower":false,"include_upper":true,"to":null}}}]}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestNestedQueryWithInnerHit(t *testing.T) { - f := NewNestedQuery("obj1") - bq := NewBoolQuery() - bq = bq.Must(NewTermQuery("obj1.name", "blue")) - bq = bq.Must(NewRangeQuery("obj1.count").Gt(5)) - f = f.Query(bq) - f = f.QueryName("qname") - f = f.InnerHit(NewInnerHit().Name("comments").Query(NewTermQuery("user", "olivere"))) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"nested":{"_name":"qname","inner_hits":{"name":"comments","query":{"term":{"user":"olivere"}}},"path":"obj1","query":{"bool":{"must":[{"term":{"obj1.name":"blue"}},{"range":{"obj1.count":{"from":5,"include_lower":false,"include_upper":true,"to":null}}}]}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_prefix.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_prefix.go deleted file mode 100644 index 02e95d2..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_prefix.go +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// Matches documents that have fields containing terms -// with a specified prefix (not analyzed). -// For more details, see -// http://www.elasticsearch.org/guide/reference/query-dsl/prefix-query.html -type PrefixQuery struct { - Query - name string - prefix string - boost *float32 - rewrite string - queryName string -} - -// Creates a new prefix query. -func NewPrefixQuery(name string, prefix string) PrefixQuery { - q := PrefixQuery{name: name, prefix: prefix} - return q -} - -func (q PrefixQuery) Boost(boost float32) PrefixQuery { - q.boost = &boost - return q -} - -func (q PrefixQuery) Rewrite(rewrite string) PrefixQuery { - q.rewrite = rewrite - return q -} - -func (q PrefixQuery) QueryName(queryName string) PrefixQuery { - q.queryName = queryName - return q -} - -// Creates the query source for the prefix query. -func (q PrefixQuery) Source() interface{} { - // { - // "prefix" : { - // "user" : { - // "prefix" : "ki", - // "boost" : 2.0 - // } - // } - // } - - source := make(map[string]interface{}) - - query := make(map[string]interface{}) - source["prefix"] = query - - if q.boost == nil && q.rewrite == "" && q.queryName == "" { - query[q.name] = q.prefix - } else { - subQuery := make(map[string]interface{}) - subQuery["prefix"] = q.prefix - if q.boost != nil { - subQuery["boost"] = *q.boost - } - if q.rewrite != "" { - subQuery["rewrite"] = q.rewrite - } - if q.queryName != "" { - subQuery["_name"] = q.queryName - } - query[q.name] = subQuery - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_prefix_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_prefix_test.go deleted file mode 100644 index 0c2ac92..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_prefix_test.go +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestPrefixQuery(t *testing.T) { - q := NewPrefixQuery("user", "ki") - data, err := json.Marshal(q.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"prefix":{"user":"ki"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestPrefixQueryWithOptions(t *testing.T) { - q := NewPrefixQuery("user", "ki") - q = q.QueryName("my_query_name") - data, err := json.Marshal(q.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"prefix":{"user":{"_name":"my_query_name","prefix":"ki"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_query_string.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_query_string.go deleted file mode 100644 index d1b24e8..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_query_string.go +++ /dev/null @@ -1,304 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" -) - -// A query that uses the query parser in order to parse -// its content. For more details, see -// http://www.elasticsearch.org/guide/reference/query-dsl/query-string-query.html -type QueryStringQuery struct { - Query - - queryString string - defaultField string - defaultOper string - analyzer string - quoteAnalyzer string - quoteFieldSuffix string - autoGeneratePhraseQueries *bool - allowLeadingWildcard *bool - lowercaseExpandedTerms *bool - enablePositionIncrements *bool - analyzeWildcard *bool - boost *float32 - fuzzyMinSim *float32 - fuzzyPrefixLength *int - fuzzyMaxExpansions *int - fuzzyRewrite string - phraseSlop *int - fields []string - fieldBoosts map[string]*float32 - useDisMax *bool - tieBreaker *float32 - rewrite string - minimumShouldMatch string - lenient *bool - timeZone string - maxDeterminizedStates *int -} - -// Creates a new query string query. -func NewQueryStringQuery(queryString string) QueryStringQuery { - q := QueryStringQuery{ - queryString: queryString, - fields: make([]string, 0), - fieldBoosts: make(map[string]*float32), - } - return q -} - -func (q QueryStringQuery) DefaultField(defaultField string) QueryStringQuery { - q.defaultField = defaultField - return q -} - -func (q QueryStringQuery) Field(field string) QueryStringQuery { - q.fields = append(q.fields, field) - return q -} - -func (q QueryStringQuery) FieldWithBoost(field string, boost float32) QueryStringQuery { - q.fields = append(q.fields, field) - q.fieldBoosts[field] = &boost - return q -} - -func (q QueryStringQuery) UseDisMax(useDisMax bool) QueryStringQuery { - q.useDisMax = &useDisMax - return q -} - -func (q QueryStringQuery) TieBreaker(tieBreaker float32) QueryStringQuery { - q.tieBreaker = &tieBreaker - return q -} - -func (q QueryStringQuery) DefaultOperator(operator string) QueryStringQuery { - q.defaultOper = operator - return q -} - -func (q QueryStringQuery) Analyzer(analyzer string) QueryStringQuery { - q.analyzer = analyzer - return q -} - -func (q QueryStringQuery) QuoteAnalyzer(quoteAnalyzer string) QueryStringQuery { - q.quoteAnalyzer = quoteAnalyzer - return q -} - -func (q QueryStringQuery) AutoGeneratePhraseQueries(autoGeneratePhraseQueries bool) QueryStringQuery { - q.autoGeneratePhraseQueries = &autoGeneratePhraseQueries - return q -} - -// MaxDeterminizedState protects against too-difficult regular expression queries. -func (q QueryStringQuery) MaxDeterminizedState(maxDeterminizedStates int) QueryStringQuery { - q.maxDeterminizedStates = &maxDeterminizedStates - return q -} - -func (q QueryStringQuery) AllowLeadingWildcard(allowLeadingWildcard bool) QueryStringQuery { - q.allowLeadingWildcard = &allowLeadingWildcard - return q -} - -func (q QueryStringQuery) LowercaseExpandedTerms(lowercaseExpandedTerms bool) QueryStringQuery { - q.lowercaseExpandedTerms = &lowercaseExpandedTerms - return q -} - -func (q QueryStringQuery) EnablePositionIncrements(enablePositionIncrements bool) QueryStringQuery { - q.enablePositionIncrements = &enablePositionIncrements - return q -} - -func (q QueryStringQuery) FuzzyMinSim(fuzzyMinSim float32) QueryStringQuery { - q.fuzzyMinSim = &fuzzyMinSim - return q -} - -func (q QueryStringQuery) FuzzyMaxExpansions(fuzzyMaxExpansions int) QueryStringQuery { - q.fuzzyMaxExpansions = &fuzzyMaxExpansions - return q -} - -func (q QueryStringQuery) FuzzyRewrite(fuzzyRewrite string) QueryStringQuery { - q.fuzzyRewrite = fuzzyRewrite - return q -} - -func (q QueryStringQuery) PhraseSlop(phraseSlop int) QueryStringQuery { - q.phraseSlop = &phraseSlop - return q -} - -func (q QueryStringQuery) AnalyzeWildcard(analyzeWildcard bool) QueryStringQuery { - q.analyzeWildcard = &analyzeWildcard - return q -} - -func (q QueryStringQuery) Rewrite(rewrite string) QueryStringQuery { - q.rewrite = rewrite - return q -} - -func (q QueryStringQuery) MinimumShouldMatch(minimumShouldMatch string) QueryStringQuery { - q.minimumShouldMatch = minimumShouldMatch - return q -} - -func (q QueryStringQuery) Boost(boost float32) QueryStringQuery { - q.boost = &boost - return q -} - -func (q QueryStringQuery) QuoteFieldSuffix(quoteFieldSuffix string) QueryStringQuery { - q.quoteFieldSuffix = quoteFieldSuffix - return q -} - -func (q QueryStringQuery) Lenient(lenient bool) QueryStringQuery { - q.lenient = &lenient - return q -} - -// TimeZone can be used to automatically adjust to/from fields using a -// timezone. Only used with date fields, of course. -func (q QueryStringQuery) TimeZone(timeZone string) QueryStringQuery { - q.timeZone = timeZone - return q -} - -// Creates the query source for the query string query. -func (q QueryStringQuery) Source() interface{} { - // { - // "query_string" : { - // "default_field" : "content", - // "query" : "this AND that OR thus" - // } - // } - - source := make(map[string]interface{}) - - query := make(map[string]interface{}) - source["query_string"] = query - - query["query"] = q.queryString - - if q.defaultField != "" { - query["default_field"] = q.defaultField - } - - if len(q.fields) > 0 { - fields := make([]string, 0) - for _, field := range q.fields { - if boost, found := q.fieldBoosts[field]; found { - if boost != nil { - fields = append(fields, fmt.Sprintf("%s^%f", field, *boost)) - } else { - fields = append(fields, field) - } - } else { - fields = append(fields, field) - } - } - query["fields"] = fields - } - - if q.tieBreaker != nil { - query["tie_breaker"] = *q.tieBreaker - } - - if q.useDisMax != nil { - query["use_dis_max"] = *q.useDisMax - } - - if q.defaultOper != "" { - query["default_operator"] = q.defaultOper - } - - if q.analyzer != "" { - query["analyzer"] = q.analyzer - } - - if q.quoteAnalyzer != "" { - query["quote_analyzer"] = q.quoteAnalyzer - } - - if q.autoGeneratePhraseQueries != nil { - query["auto_generate_phrase_queries"] = *q.autoGeneratePhraseQueries - } - - if q.maxDeterminizedStates != nil { - query["max_determinized_states"] = *q.maxDeterminizedStates - } - - if q.allowLeadingWildcard != nil { - query["allow_leading_wildcard"] = *q.allowLeadingWildcard - } - - if q.lowercaseExpandedTerms != nil { - query["lowercase_expanded_terms"] = *q.lowercaseExpandedTerms - } - - if q.enablePositionIncrements != nil { - query["enable_position_increments"] = *q.enablePositionIncrements - } - - if q.fuzzyMinSim != nil { - query["fuzzy_min_sim"] = *q.fuzzyMinSim - } - - if q.boost != nil { - query["boost"] = *q.boost - } - - if q.fuzzyPrefixLength != nil { - query["fuzzy_prefix_length"] = *q.fuzzyPrefixLength - } - - if q.fuzzyMaxExpansions != nil { - query["fuzzy_max_expansions"] = *q.fuzzyMaxExpansions - } - - if q.fuzzyRewrite != "" { - query["fuzzy_rewrite"] = q.fuzzyRewrite - } - - if q.phraseSlop != nil { - query["phrase_slop"] = *q.phraseSlop - } - - if q.analyzeWildcard != nil { - query["analyze_wildcard"] = *q.analyzeWildcard - } - - if q.rewrite != "" { - query["rewrite"] = q.rewrite - } - - if q.minimumShouldMatch != "" { - query["minimum_should_match"] = q.minimumShouldMatch - } - - if q.quoteFieldSuffix != "" { - query["quote_field_suffix"] = q.quoteFieldSuffix - } - - if q.lenient != nil { - query["lenient"] = *q.lenient - } - - if q.timeZone != "" { - query["time_zone"] = q.timeZone - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_range.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_range.go deleted file mode 100644 index 1474e95..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_range.go +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// Matches documents with fields that have terms within a certain range. -// For details, see: -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-range-query.html -type RangeQuery struct { - Query - name string - from *interface{} - to *interface{} - timeZone string - format string - includeLower bool - includeUpper bool - boost *float64 - queryName string -} - -func NewRangeQuery(name string) RangeQuery { - q := RangeQuery{name: name, includeLower: true, includeUpper: true} - return q -} - -// TimeZone allows for adjusting the from/to fields using a time zone. -// Only valid for date fields. -func (q RangeQuery) TimeZone(timeZone string) RangeQuery { - q.timeZone = timeZone - return q -} - -// Format is a valid option for date fields in a Range query. -func (q RangeQuery) Format(format string) RangeQuery { - q.format = format - return q -} - -func (q RangeQuery) From(from interface{}) RangeQuery { - q.from = &from - return q -} - -func (q RangeQuery) Gt(from interface{}) RangeQuery { - q.from = &from - q.includeLower = false - return q -} - -func (q RangeQuery) Gte(from interface{}) RangeQuery { - q.from = &from - q.includeLower = true - return q -} - -func (q RangeQuery) To(to interface{}) RangeQuery { - q.to = &to - return q -} - -func (q RangeQuery) Lt(to interface{}) RangeQuery { - q.to = &to - q.includeUpper = false - return q -} - -func (q RangeQuery) Lte(to interface{}) RangeQuery { - q.to = &to - q.includeUpper = true - return q -} - -func (q RangeQuery) IncludeLower(includeLower bool) RangeQuery { - q.includeLower = includeLower - return q -} - -func (q RangeQuery) IncludeUpper(includeUpper bool) RangeQuery { - q.includeUpper = includeUpper - return q -} - -func (q RangeQuery) Boost(boost float64) RangeQuery { - q.boost = &boost - return q -} - -func (q RangeQuery) QueryName(queryName string) RangeQuery { - q.queryName = queryName - return q -} - -func (q RangeQuery) Source() interface{} { - // { - // "range" : { - // "name" : { - // "..." : "..." - // } - // } - // } - - source := make(map[string]interface{}) - - rangeQ := make(map[string]interface{}) - source["range"] = rangeQ - - params := make(map[string]interface{}) - rangeQ[q.name] = params - - params["from"] = q.from - params["to"] = q.to - if q.timeZone != "" { - params["time_zone"] = q.timeZone - } - if q.format != "" { - params["format"] = q.format - } - if q.boost != nil { - params["boost"] = *q.boost - } - params["include_lower"] = q.includeLower - params["include_upper"] = q.includeUpper - - if q.queryName != "" { - rangeQ["_name"] = q.queryName - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_regexp.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_regexp.go deleted file mode 100644 index 9d3bb5a..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_regexp.go +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// RegexpQuery allows you to use regular expression term queries. -// For more details, see -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-regexp-query.html. -type RegexpQuery struct { - Query - name string - regexp string - flags *string - boost *float64 - rewrite *string - queryName *string - maxDeterminizedStates *int -} - -// NewRegexpQuery creates a new regexp query. -func NewRegexpQuery(name string, regexp string) RegexpQuery { - return RegexpQuery{name: name, regexp: regexp} -} - -// Flags sets the regexp flags. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-regexp-query.html#_optional_operators -// for details. -func (q RegexpQuery) Flags(flags string) RegexpQuery { - q.flags = &flags - return q -} - -func (q RegexpQuery) MaxDeterminizedStates(maxDeterminizedStates int) RegexpQuery { - q.maxDeterminizedStates = &maxDeterminizedStates - return q -} - -func (q RegexpQuery) Boost(boost float64) RegexpQuery { - q.boost = &boost - return q -} - -func (q RegexpQuery) Rewrite(rewrite string) RegexpQuery { - q.rewrite = &rewrite - return q -} - -func (q RegexpQuery) QueryName(queryName string) RegexpQuery { - q.queryName = &queryName - return q -} - -// Source returns the JSON-serializable query data. -func (q RegexpQuery) Source() interface{} { - // { - // "regexp" : { - // "name.first" : { - // "value" : "s.*y", - // "boost" : 1.2 - // } - // } - // } - - source := make(map[string]interface{}) - query := make(map[string]interface{}) - source["regexp"] = query - - x := make(map[string]interface{}) - x["value"] = q.regexp - if q.flags != nil { - x["flags"] = *q.flags - } - if q.maxDeterminizedStates != nil { - x["max_determinized_states"] = *q.maxDeterminizedStates - } - if q.boost != nil { - x["boost"] = *q.boost - } - if q.rewrite != nil { - x["rewrite"] = *q.rewrite - } - if q.queryName != nil { - x["name"] = *q.queryName - } - query[q.name] = x - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_simple_query_string.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_simple_query_string.go deleted file mode 100644 index 3e82e6a..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_simple_query_string.go +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "strings" -) - -// SimpleQueryStringQuery is a query that uses the SimpleQueryParser -// to parse its context. Unlike the regular query_string query, -// the simple_query_string query will never throw an exception, -// and discards invalid parts of the query. -// For more details, see -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-simple-query-string-query.html -type SimpleQueryStringQuery struct { - queryText string - analyzer string - operator string - fields []string - fieldBoosts map[string]*float32 -} - -// Creates a new simple query string query. -func NewSimpleQueryStringQuery(text string) SimpleQueryStringQuery { - q := SimpleQueryStringQuery{ - queryText: text, - fields: make([]string, 0), - fieldBoosts: make(map[string]*float32), - } - return q -} - -func (q SimpleQueryStringQuery) Field(field string) SimpleQueryStringQuery { - q.fields = append(q.fields, field) - return q -} - -func (q SimpleQueryStringQuery) FieldWithBoost(field string, boost float32) SimpleQueryStringQuery { - q.fields = append(q.fields, field) - q.fieldBoosts[field] = &boost - return q -} - -func (q SimpleQueryStringQuery) Analyzer(analyzer string) SimpleQueryStringQuery { - q.analyzer = analyzer - return q -} - -func (q SimpleQueryStringQuery) DefaultOperator(defaultOperator string) SimpleQueryStringQuery { - q.operator = defaultOperator - return q -} - -// Creates the query source for the query string query. -func (q SimpleQueryStringQuery) Source() interface{} { - // { - // "simple_query_string" : { - // "query" : "\"fried eggs\" +(eggplant | potato) -frittata", - // "analyzer" : "snowball", - // "fields" : ["body^5","_all"], - // "default_operator" : "and" - // } - // } - - source := make(map[string]interface{}) - - query := make(map[string]interface{}) - source["simple_query_string"] = query - - query["query"] = q.queryText - - if len(q.fields) > 0 { - fields := make([]string, 0) - for _, field := range q.fields { - if boost, found := q.fieldBoosts[field]; found { - if boost != nil { - fields = append(fields, fmt.Sprintf("%s^%f", field, *boost)) - } else { - fields = append(fields, field) - } - } else { - fields = append(fields, field) - } - } - query["fields"] = fields - } - - if q.analyzer != "" { - query["analyzer"] = q.analyzer - } - - if q.operator != "" { - query["default_operator"] = strings.ToLower(q.operator) - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_simple_query_string_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_simple_query_string_test.go deleted file mode 100644 index 6f6ad7d..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_simple_query_string_test.go +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestSimpleQueryStringQuery(t *testing.T) { - q := NewSimpleQueryStringQuery(`"fried eggs" +(eggplant | potato) -frittata`) - data, err := json.Marshal(q.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"simple_query_string":{"query":"\"fried eggs\" +(eggplant | potato) -frittata"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSimpleQueryStringQueryExec(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Match all should return all documents - query := NewSimpleQueryStringQuery("+Golang +Elasticsearch") - searchResult, err := client.Search(). - Index(testIndexName). - Query(&query). - Do() - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } - if searchResult.Hits.TotalHits != 1 { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 1, searchResult.Hits.TotalHits) - } - if len(searchResult.Hits.Hits) != 1 { - t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", 1, len(searchResult.Hits.Hits)) - } - - for _, hit := range searchResult.Hits.Hits { - if hit.Index != testIndexName { - t.Errorf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - item := make(map[string]interface{}) - err := json.Unmarshal(*hit.Source, &item) - if err != nil { - t.Fatal(err) - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_template_query.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_template_query.go deleted file mode 100644 index 184d424..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_template_query.go +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// TemplateQuery is a query that accepts a query template and a -// map of key/value pairs to fill in template parameters. -// -// For more details, see: -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-template-query.html -type TemplateQuery struct { - vars map[string]interface{} - template string - templateType string -} - -// NewTemplateQuery creates a new TemplateQuery. -func NewTemplateQuery(name string) TemplateQuery { - return TemplateQuery{ - template: name, - vars: make(map[string]interface{}), - } -} - -// Template specifies the name of the template. -func (q TemplateQuery) Template(name string) TemplateQuery { - q.template = name - return q -} - -// TemplateType defines which kind of query we use. The values can be: -// inline, indexed, or file. If undefined, inline is used. -func (q TemplateQuery) TemplateType(typ string) TemplateQuery { - q.templateType = typ - return q -} - -// Var sets a single parameter pair. -func (q TemplateQuery) Var(name string, value interface{}) TemplateQuery { - q.vars[name] = value - return q -} - -// Vars sets parameters for the template query. -func (q TemplateQuery) Vars(vars map[string]interface{}) TemplateQuery { - q.vars = vars - return q -} - -// Source returns the JSON serializable content for the search. -func (q TemplateQuery) Source() interface{} { - // { - // "template" : { - // "query" : {"match_{{template}}": {}}, - // "params" : { - // "template": "all" - // } - // } - // } - - query := make(map[string]interface{}) - - tmpl := make(map[string]interface{}) - query["template"] = tmpl - - // TODO(oe): Implementation differs from online documentation at http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-template-query.html - var fieldname string - switch q.templateType { - case "file": // file - fieldname = "file" - case "indexed", "id": // indexed - fieldname = "id" - default: // inline - fieldname = "query" - } - - tmpl[fieldname] = q.template - if len(q.vars) > 0 { - tmpl["params"] = q.vars - } - - return query -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_template_query_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_template_query_test.go deleted file mode 100644 index 74ba2a3..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_template_query_test.go +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestTemplateQueryInlineTest(t *testing.T) { - f := NewTemplateQuery("\"match_{{template}}\": {}}\"").Vars(map[string]interface{}{"template": "all"}) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"template":{"params":{"template":"all"},"query":"\"match_{{template}}\": {}}\""}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestTemplateQueryIndexedTest(t *testing.T) { - f := NewTemplateQuery("indexedTemplate"). - TemplateType("id"). - Vars(map[string]interface{}{"template": "all"}) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"template":{"id":"indexedTemplate","params":{"template":"all"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestTemplateQueryFileTest(t *testing.T) { - f := NewTemplateQuery("storedTemplate"). - TemplateType("file"). - Vars(map[string]interface{}{"template": "all"}) - data, err := json.Marshal(f.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"template":{"file":"storedTemplate","params":{"template":"all"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_term.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_term.go deleted file mode 100644 index 7b8b518..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_term.go +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// A term query matches documents that contain -// a term (not analyzed). For more details, see -// http://www.elasticsearch.org/guide/reference/query-dsl/term-query.html -type TermQuery struct { - Query - name string - value interface{} - boost *float32 - queryName string -} - -// Creates a new term query. -func NewTermQuery(name string, value interface{}) TermQuery { - t := TermQuery{name: name, value: value} - return t -} - -func (q TermQuery) Boost(boost float32) TermQuery { - q.boost = &boost - return q -} - -func (q TermQuery) QueryName(queryName string) TermQuery { - q.queryName = queryName - return q -} - -// Creates the query source for the term query. -func (q TermQuery) Source() interface{} { - // {"term":{"name":"value"}} - source := make(map[string]interface{}) - tq := make(map[string]interface{}) - source["term"] = tq - - if q.boost == nil && q.queryName == "" { - tq[q.name] = q.value - } else { - subQ := make(map[string]interface{}) - subQ["value"] = q.value - if q.boost != nil { - subQ["boost"] = *q.boost - } - if q.queryName != "" { - subQ["_name"] = q.queryName - } - tq[q.name] = subQ - } - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_terms.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_terms.go deleted file mode 100644 index 40a8ed9..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_terms.go +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// A query that match on any (configurable) of the provided terms. -// This is a simpler syntax query for using a bool query with -// several term queries in the should clauses. -// For more details, see -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-terms-query.html -type TermsQuery struct { - Query - name string - values []interface{} - minimumShouldMatch string - disableCoord *bool - boost *float32 - queryName string -} - -// NewTermsQuery creates a new terms query. -func NewTermsQuery(name string, values ...interface{}) TermsQuery { - t := TermsQuery{ - name: name, - values: make([]interface{}, 0), - } - if len(values) > 0 { - t.values = append(t.values, values...) - } - return t -} - -func (q TermsQuery) MinimumShouldMatch(minimumShouldMatch string) TermsQuery { - q.minimumShouldMatch = minimumShouldMatch - return q -} - -func (q TermsQuery) DisableCoord(disableCoord bool) TermsQuery { - q.disableCoord = &disableCoord - return q -} - -func (q TermsQuery) Boost(boost float32) TermsQuery { - q.boost = &boost - return q -} - -func (q TermsQuery) QueryName(queryName string) TermsQuery { - q.queryName = queryName - return q -} - -// Creates the query source for the term query. -func (q TermsQuery) Source() interface{} { - // {"terms":{"name":["value1","value2"]}} - source := make(map[string]interface{}) - params := make(map[string]interface{}) - source["terms"] = params - params[q.name] = q.values - if q.minimumShouldMatch != "" { - params["minimum_should_match"] = q.minimumShouldMatch - } - if q.disableCoord != nil { - params["disable_coord"] = *q.disableCoord - } - if q.boost != nil { - params["boost"] = *q.boost - } - if q.queryName != "" { - params["_name"] = q.queryName - } - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_terms_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_terms_test.go deleted file mode 100644 index 020d87f..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_terms_test.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestTermsQuery(t *testing.T) { - q := NewTermsQuery("user", "ki") - data, err := json.Marshal(q.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"terms":{"user":["ki"]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestTermQuerysWithOptions(t *testing.T) { - q := NewTermsQuery("user", "ki", "ko") - q = q.Boost(2.79) - q = q.QueryName("my_tq") - data, err := json.Marshal(q.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"terms":{"_name":"my_tq","boost":2.79,"user":["ki","ko"]}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_wildcard.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_wildcard.go deleted file mode 100644 index 5a25e24..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_wildcard.go +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// WildcardQuery matches documents that have fields matching a wildcard -// expression (not analyzed). Supported wildcards are *, which matches -// any character sequence (including the empty one), and ?, which matches -// any single character. Note this query can be slow, as it needs to iterate -// over many terms. In order to prevent extremely slow wildcard queries, -// a wildcard term should not start with one of the wildcards * or ?. -// The wildcard query maps to Lucene WildcardQuery. -// -// For more details, see -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-wildcard-query.html. -type WildcardQuery struct { - Query - - name string - wildcard string - boost float32 - rewrite string - queryName string -} - -// NewWildcardQuery creates a new wildcard query. -func NewWildcardQuery(name, wildcard string) WildcardQuery { - q := WildcardQuery{ - name: name, - wildcard: wildcard, - boost: -1.0, - } - return q -} - -// Name is the name of the field name. -func (q WildcardQuery) Name(name string) WildcardQuery { - q.name = name - return q -} - -// Wildcard is the wildcard to be used in the query, e.g. ki*y??. -func (q WildcardQuery) Wildcard(wildcard string) WildcardQuery { - q.wildcard = wildcard - return q -} - -// Boost sets the boost for this query. -func (q WildcardQuery) Boost(boost float32) WildcardQuery { - q.boost = boost - return q -} - -// Rewrite controls the rewriting. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-multi-term-rewrite.html -// for details. -func (q WildcardQuery) Rewrite(rewrite string) WildcardQuery { - q.rewrite = rewrite - return q -} - -// QueryName sets the name of this query. -func (q WildcardQuery) QueryName(queryName string) WildcardQuery { - q.queryName = queryName - return q -} - -// Source returns the JSON serializable body of this query. -func (q WildcardQuery) Source() interface{} { - // { - // "wildcard" : { - // "user" : { - // "wildcard" : "ki*y", - // "boost" : 1.0 - // } - // } - - source := make(map[string]interface{}) - - query := make(map[string]interface{}) - source["wildcard"] = query - - wq := make(map[string]interface{}) - query[q.name] = wq - - wq["wildcard"] = q.wildcard - - if q.boost != -1.0 { - wq["boost"] = q.boost - } - if q.rewrite != "" { - wq["rewrite"] = q.rewrite - } - if q.queryName != "" { - wq["_name"] = q.queryName - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_queries_wildcard_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_queries_wildcard_test.go deleted file mode 100644 index d17bd64..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_queries_wildcard_test.go +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic_test - -import ( - "encoding/json" - "testing" - - elastic "gopkg.in/olivere/elastic.v2" -) - -func ExampleWildcardQuery() { - // Get a client to the local Elasticsearch instance. - client, err := elastic.NewClient() - if err != nil { - // Handle error - panic(err) - } - - // Define wildcard query - q := elastic.NewWildcardQuery("user", "oli*er?").Boost(1.2) - searchResult, err := client.Search(). - Index("twitter"). // search in index "twitter" - Query(q). // use wildcard query defined above - Do() // execute - if err != nil { - // Handle error - panic(err) - } - _ = searchResult -} - -func TestWildcardQuery(t *testing.T) { - q := elastic.NewWildcardQuery("user", "ki*y??") - data, err := json.Marshal(q.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"wildcard":{"user":{"wildcard":"ki*y??"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestWildcardQueryWithBoost(t *testing.T) { - q := elastic.NewWildcardQuery("user", "ki*y??").Boost(1.2) - data, err := json.Marshal(q.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"wildcard":{"user":{"boost":1.2,"wildcard":"ki*y??"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_request.go b/vendor/gopkg.in/olivere/elastic.v2/search_request.go deleted file mode 100644 index 2fc0311..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_request.go +++ /dev/null @@ -1,158 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "strings" -) - -// SearchRequest combines a search request and its -// query details (see SearchSource). -// It is used in combination with MultiSearch. -type SearchRequest struct { - searchType string // default in ES is "query_then_fetch" - indices []string - types []string - routing *string - preference *string - source interface{} -} - -// NewSearchRequest creates a new search request. -func NewSearchRequest() *SearchRequest { - return &SearchRequest{ - indices: make([]string, 0), - types: make([]string, 0), - } -} - -// SearchRequest must be one of "query_then_fetch", "query_and_fetch", -// "scan", "count", "dfs_query_then_fetch", or "dfs_query_and_fetch". -// Use one of the constants defined via SearchType. -func (r *SearchRequest) SearchType(searchType string) *SearchRequest { - r.searchType = searchType - return r -} - -func (r *SearchRequest) SearchTypeDfsQueryThenFetch() *SearchRequest { - return r.SearchType("dfs_query_then_fetch") -} - -func (r *SearchRequest) SearchTypeDfsQueryAndFetch() *SearchRequest { - return r.SearchType("dfs_query_and_fetch") -} - -func (r *SearchRequest) SearchTypeQueryThenFetch() *SearchRequest { - return r.SearchType("query_then_fetch") -} - -func (r *SearchRequest) SearchTypeQueryAndFetch() *SearchRequest { - return r.SearchType("query_and_fetch") -} - -func (r *SearchRequest) SearchTypeScan() *SearchRequest { - return r.SearchType("scan") -} - -func (r *SearchRequest) SearchTypeCount() *SearchRequest { - return r.SearchType("count") -} - -func (r *SearchRequest) Index(index string) *SearchRequest { - r.indices = append(r.indices, index) - return r -} - -func (r *SearchRequest) Indices(indices ...string) *SearchRequest { - r.indices = append(r.indices, indices...) - return r -} - -func (r *SearchRequest) HasIndices() bool { - return len(r.indices) > 0 -} - -func (r *SearchRequest) Type(typ string) *SearchRequest { - r.types = append(r.types, typ) - return r -} - -func (r *SearchRequest) Types(types ...string) *SearchRequest { - r.types = append(r.types, types...) - return r -} - -func (r *SearchRequest) Routing(routing string) *SearchRequest { - r.routing = &routing - return r -} - -func (r *SearchRequest) Routings(routings ...string) *SearchRequest { - if routings != nil { - routings := strings.Join(routings, ",") - r.routing = &routings - } else { - r.routing = nil - } - return r -} - -func (r *SearchRequest) Preference(preference string) *SearchRequest { - r.preference = &preference - return r -} - -func (r *SearchRequest) Source(source interface{}) *SearchRequest { - switch v := source.(type) { - case *SearchSource: - r.source = v.Source() - default: - r.source = source - } - return r -} - -// header is used by MultiSearch to get information about the search header -// of one SearchRequest. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-multi-search.html -func (r *SearchRequest) header() interface{} { - h := make(map[string]interface{}) - if r.searchType != "" { - h["search_type"] = r.searchType - } - - switch len(r.indices) { - case 0: - case 1: - h["index"] = r.indices[0] - default: - h["indices"] = r.indices - } - - switch len(r.types) { - case 0: - case 1: - h["types"] = r.types[0] - default: - h["type"] = r.types - } - - if r.routing != nil && *r.routing != "" { - h["routing"] = *r.routing - } - - if r.preference != nil && *r.preference != "" { - h["preference"] = *r.preference - } - - return h -} - -// bidy is used by MultiSearch to get information about the search body -// of one SearchRequest. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-multi-search.html -func (r *SearchRequest) body() interface{} { - return r.source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_request_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_request_test.go deleted file mode 100644 index 1185643..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_request_test.go +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - _ "net/http" - "testing" -) - -func TestSearchRequestIndex(t *testing.T) { - builder := NewSearchRequest().Index("test") - data, err := json.Marshal(builder.header()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"index":"test"}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchRequestIndices(t *testing.T) { - builder := NewSearchRequest().Indices("test", "test2") - data, err := json.Marshal(builder.header()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"indices":["test","test2"]}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchRequestHasIndices(t *testing.T) { - builder := NewSearchRequest() - if builder.HasIndices() { - t.Errorf("expected HasIndices to return true; got %v", builder.HasIndices()) - } - builder = builder.Indices("test", "test2") - if !builder.HasIndices() { - t.Errorf("expected HasIndices to return false; got %v", builder.HasIndices()) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_source.go b/vendor/gopkg.in/olivere/elastic.v2/search_source.go deleted file mode 100644 index 70f98f7..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_source.go +++ /dev/null @@ -1,542 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" -) - -// SearchSource enables users to build the search source. -// It resembles the SearchSourceBuilder in Elasticsearch. -type SearchSource struct { - query Query - postFilter Filter - from int - size int - explain *bool - version *bool - sorters []Sorter - trackScores bool - minScore *float64 - timeout string - fieldNames []string - fieldDataFields []string - scriptFields []*ScriptField - partialFields []*PartialField - fetchSourceContext *FetchSourceContext - facets map[string]Facet - aggregations map[string]Aggregation - highlight *Highlight - globalSuggestText string - suggesters []Suggester - rescores []*Rescore - defaultRescoreWindowSize *int - indexBoosts map[string]float64 - stats []string - innerHits map[string]*InnerHit -} - -// NewSearchSource initializes a new SearchSource. -func NewSearchSource() *SearchSource { - return &SearchSource{ - from: -1, - size: -1, - trackScores: false, - sorters: make([]Sorter, 0), - fieldDataFields: make([]string, 0), - scriptFields: make([]*ScriptField, 0), - partialFields: make([]*PartialField, 0), - facets: make(map[string]Facet), - aggregations: make(map[string]Aggregation), - rescores: make([]*Rescore, 0), - indexBoosts: make(map[string]float64), - stats: make([]string, 0), - innerHits: make(map[string]*InnerHit), - } -} - -// Query sets the query to use with this search source. -func (s *SearchSource) Query(query Query) *SearchSource { - s.query = query - return s -} - -// PostFilter will be executed after the query has been executed and -// only affects the search hits, not the aggregations. -// This filter is always executed as the last filtering mechanism. -func (s *SearchSource) PostFilter(postFilter Filter) *SearchSource { - s.postFilter = postFilter - return s -} - -// From index to start the search from. Defaults to 0. -func (s *SearchSource) From(from int) *SearchSource { - s.from = from - return s -} - -// Size is the number of search hits to return. Defaults to 10. -func (s *SearchSource) Size(size int) *SearchSource { - s.size = size - return s -} - -// MinScore sets the minimum score below which docs will be filtered out. -func (s *SearchSource) MinScore(minScore float64) *SearchSource { - s.minScore = &minScore - return s -} - -// Explain indicates whether each search hit should be returned with -// an explanation of the hit (ranking). -func (s *SearchSource) Explain(explain bool) *SearchSource { - s.explain = &explain - return s -} - -// Version indicates whether each search hit should be returned with -// a version associated to it. -func (s *SearchSource) Version(version bool) *SearchSource { - s.version = &version - return s -} - -// Timeout controls how long a search is allowed to take, e.g. "1s" or "500ms". -func (s *SearchSource) Timeout(timeout string) *SearchSource { - s.timeout = timeout - return s -} - -// TimeoutInMillis controls how many milliseconds a search is allowed -// to take before it is canceled. -func (s *SearchSource) TimeoutInMillis(timeoutInMillis int) *SearchSource { - s.timeout = fmt.Sprintf("%dms", timeoutInMillis) - return s -} - -// Sort adds a sort order. -func (s *SearchSource) Sort(field string, ascending bool) *SearchSource { - s.sorters = append(s.sorters, SortInfo{Field: field, Ascending: ascending}) - return s -} - -// SortWithInfo adds a sort order. -func (s *SearchSource) SortWithInfo(info SortInfo) *SearchSource { - s.sorters = append(s.sorters, info) - return s -} - -// SortBy adds a sort order. -func (s *SearchSource) SortBy(sorter ...Sorter) *SearchSource { - s.sorters = append(s.sorters, sorter...) - return s -} - -func (s *SearchSource) hasSort() bool { - return len(s.sorters) > 0 -} - -// TrackScores is applied when sorting and controls if scores will be -// tracked as well. Defaults to false. -func (s *SearchSource) TrackScores(trackScores bool) *SearchSource { - s.trackScores = trackScores - return s -} - -// Facet adds a facet to perform as part of the search. -func (s *SearchSource) Facet(name string, facet Facet) *SearchSource { - s.facets[name] = facet - return s -} - -// Aggregation adds an aggreation to perform as part of the search. -func (s *SearchSource) Aggregation(name string, aggregation Aggregation) *SearchSource { - s.aggregations[name] = aggregation - return s -} - -// DefaultRescoreWindowSize sets the rescore window size for rescores -// that don't specify their window. -func (s *SearchSource) DefaultRescoreWindowSize(defaultRescoreWindowSize int) *SearchSource { - s.defaultRescoreWindowSize = &defaultRescoreWindowSize - return s -} - -// Highlight adds highlighting to the search. -func (s *SearchSource) Highlight(highlight *Highlight) *SearchSource { - s.highlight = highlight - return s -} - -// Highlighter returns the highlighter. -func (s *SearchSource) Highlighter() *Highlight { - if s.highlight == nil { - s.highlight = NewHighlight() - } - return s.highlight -} - -// GlobalSuggestText defines the global text to use with all suggesters. -// This avoids repetition. -func (s *SearchSource) GlobalSuggestText(text string) *SearchSource { - s.globalSuggestText = text - return s -} - -// Suggester adds a suggester to the search. -func (s *SearchSource) Suggester(suggester Suggester) *SearchSource { - s.suggesters = append(s.suggesters, suggester) - return s -} - -// AddRescorer adds a rescorer to the search. -func (s *SearchSource) AddRescore(rescore *Rescore) *SearchSource { - s.rescores = append(s.rescores, rescore) - return s -} - -// ClearRescorers removes all rescorers from the search. -func (s *SearchSource) ClearRescores() *SearchSource { - s.rescores = make([]*Rescore, 0) - return s -} - -// FetchSource indicates whether the response should contain the stored -// _source for every hit. -func (s *SearchSource) FetchSource(fetchSource bool) *SearchSource { - if s.fetchSourceContext == nil { - s.fetchSourceContext = NewFetchSourceContext(fetchSource) - } else { - s.fetchSourceContext.SetFetchSource(fetchSource) - } - return s -} - -// FetchSourceContext indicates how the _source should be fetched. -func (s *SearchSource) FetchSourceContext(fetchSourceContext *FetchSourceContext) *SearchSource { - s.fetchSourceContext = fetchSourceContext - return s -} - -// Fields sets the fields to load and return as part of the search request. -// If none are specified, the source of the document will be returned. -func (s *SearchSource) Fields(fieldNames ...string) *SearchSource { - if s.fieldNames == nil { - s.fieldNames = make([]string, 0) - } - s.fieldNames = append(s.fieldNames, fieldNames...) - return s -} - -// Field adds a single field to load and return (note, must be stored) as -// part of the search request. If none are specified, the source of the -// document will be returned. -func (s *SearchSource) Field(fieldName string) *SearchSource { - if s.fieldNames == nil { - s.fieldNames = make([]string, 0) - } - s.fieldNames = append(s.fieldNames, fieldName) - return s -} - -// NoFields indicates that no fields should be loaded, resulting in only -// id and type to be returned per field. -func (s *SearchSource) NoFields() *SearchSource { - s.fieldNames = make([]string, 0) - return s -} - -// FieldDataFields adds one or more fields to load from the field data cache -// and return as part of the search request. -func (s *SearchSource) FieldDataFields(fieldDataFields ...string) *SearchSource { - s.fieldDataFields = append(s.fieldDataFields, fieldDataFields...) - return s -} - -// FieldDataField adds a single field to load from the field data cache -// and return as part of the search request. -func (s *SearchSource) FieldDataField(fieldDataField string) *SearchSource { - s.fieldDataFields = append(s.fieldDataFields, fieldDataField) - return s -} - -// ScriptFields adds one or more script fields with the provided scripts. -func (s *SearchSource) ScriptFields(scriptFields ...*ScriptField) *SearchSource { - s.scriptFields = append(s.scriptFields, scriptFields...) - return s -} - -// ScriptField adds a single script field with the provided script. -func (s *SearchSource) ScriptField(scriptField *ScriptField) *SearchSource { - s.scriptFields = append(s.scriptFields, scriptField) - return s -} - -// PartialFields adds partial fields. -func (s *SearchSource) PartialFields(partialFields ...*PartialField) *SearchSource { - s.partialFields = append(s.partialFields, partialFields...) - return s -} - -// PartialField adds a partial field. -func (s *SearchSource) PartialField(partialField *PartialField) *SearchSource { - s.partialFields = append(s.partialFields, partialField) - return s -} - -// IndexBoost sets the boost that a specific index will receive when the -// query is executed against it. -func (s *SearchSource) IndexBoost(index string, boost float64) *SearchSource { - s.indexBoosts[index] = boost - return s -} - -// Stats group this request will be aggregated under. -func (s *SearchSource) Stats(statsGroup ...string) *SearchSource { - s.stats = append(s.stats, statsGroup...) - return s -} - -// InnerHit adds an inner hit to return with the result. -func (s *SearchSource) InnerHit(name string, innerHit *InnerHit) *SearchSource { - s.innerHits[name] = innerHit - return s -} - -// Source returns the serializable JSON for the source builder. -func (s *SearchSource) Source() interface{} { - source := make(map[string]interface{}) - - if s.from != -1 { - source["from"] = s.from - } - if s.size != -1 { - source["size"] = s.size - } - if s.timeout != "" { - source["timeout"] = s.timeout - } - if s.query != nil { - source["query"] = s.query.Source() - } - if s.postFilter != nil { - source["post_filter"] = s.postFilter.Source() - } - if s.minScore != nil { - source["min_score"] = *s.minScore - } - if s.version != nil { - source["version"] = *s.version - } - if s.explain != nil { - source["explain"] = *s.explain - } - if s.fetchSourceContext != nil { - source["_source"] = s.fetchSourceContext.Source() - } - - if s.fieldNames != nil { - switch len(s.fieldNames) { - case 1: - source["fields"] = s.fieldNames[0] - default: - source["fields"] = s.fieldNames - } - } - - if len(s.fieldDataFields) > 0 { - source["fielddata_fields"] = s.fieldDataFields - } - - if len(s.partialFields) > 0 { - pfmap := make(map[string]interface{}) - for _, partialField := range s.partialFields { - pfmap[partialField.Name] = partialField.Source() - } - source["partial_fields"] = pfmap - } - - if len(s.scriptFields) > 0 { - sfmap := make(map[string]interface{}) - for _, scriptField := range s.scriptFields { - sfmap[scriptField.FieldName] = scriptField.Source() - } - source["script_fields"] = sfmap - } - - if len(s.sorters) > 0 { - sortarr := make([]interface{}, 0) - for _, sorter := range s.sorters { - sortarr = append(sortarr, sorter.Source()) - } - source["sort"] = sortarr - } - - if s.trackScores { - source["track_scores"] = s.trackScores - } - - if len(s.indexBoosts) > 0 { - source["indices_boost"] = s.indexBoosts - } - - if len(s.facets) > 0 { - facetsMap := make(map[string]interface{}) - for field, facet := range s.facets { - facetsMap[field] = facet.Source() - } - source["facets"] = facetsMap - } - - if len(s.aggregations) > 0 { - aggsMap := make(map[string]interface{}) - for name, aggregate := range s.aggregations { - aggsMap[name] = aggregate.Source() - } - source["aggregations"] = aggsMap - } - - if s.highlight != nil { - source["highlight"] = s.highlight.Source() - } - - if len(s.suggesters) > 0 { - suggesters := make(map[string]interface{}) - for _, s := range s.suggesters { - suggesters[s.Name()] = s.Source(false) - } - if s.globalSuggestText != "" { - suggesters["text"] = s.globalSuggestText - } - source["suggest"] = suggesters - } - - if len(s.rescores) > 0 { - // Strip empty rescores from request - rescores := make([]*Rescore, 0) - for _, r := range s.rescores { - if !r.IsEmpty() { - rescores = append(rescores, r) - } - } - - if len(rescores) == 1 { - rescores[0].defaultRescoreWindowSize = s.defaultRescoreWindowSize - source["rescore"] = rescores[0].Source() - } else { - slice := make([]interface{}, 0) - for _, r := range rescores { - r.defaultRescoreWindowSize = s.defaultRescoreWindowSize - slice = append(slice, r.Source()) - } - source["rescore"] = slice - } - } - - if len(s.stats) > 0 { - source["stats"] = s.stats - } - - if len(s.innerHits) > 0 { - // Top-level inner hits - // See http://www.elastic.co/guide/en/elasticsearch/reference/1.5/search-request-inner-hits.html#top-level-inner-hits - // "inner_hits": { - // "": { - // "": { - // "": { - // , - // [,"inner_hits" : { []+ } ]? - // } - // } - // }, - // [,"" : { ... } ]* - // } - m := make(map[string]interface{}) - for name, hit := range s.innerHits { - if hit.path != "" { - path := make(map[string]interface{}) - path[hit.path] = hit.Source() - m[name] = map[string]interface{}{ - "path": path, - } - } else if hit.typ != "" { - typ := make(map[string]interface{}) - typ[hit.typ] = hit.Source() - m[name] = map[string]interface{}{ - "type": typ, - } - } else { - // TODO the Java client throws here, because either path or typ must be specified - } - } - source["inner_hits"] = m - } - - return source -} - -// -- Script Field -- - -type ScriptField struct { - FieldName string - - script string - lang string - params map[string]interface{} -} - -func NewScriptField(fieldName, script, lang string, params map[string]interface{}) *ScriptField { - return &ScriptField{fieldName, script, lang, params} -} - -func (f *ScriptField) Source() interface{} { - source := make(map[string]interface{}) - source["script"] = f.script - if f.lang != "" { - source["lang"] = f.lang - } - if f.params != nil && len(f.params) > 0 { - source["params"] = f.params - } - return source -} - -// -- Partial Field -- - -type PartialField struct { - Name string - includes []string - excludes []string -} - -func NewPartialField(name string, includes, excludes []string) *PartialField { - return &PartialField{name, includes, excludes} -} - -func (f *PartialField) Source() interface{} { - source := make(map[string]interface{}) - - if f.includes != nil { - switch len(f.includes) { - case 0: - case 1: - source["include"] = f.includes[0] - default: - source["include"] = f.includes - } - } - - if f.excludes != nil { - switch len(f.excludes) { - case 0: - case 1: - source["exclude"] = f.excludes[0] - default: - source["exclude"] = f.excludes - } - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_source_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_source_test.go deleted file mode 100644 index 06c5cc8..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_source_test.go +++ /dev/null @@ -1,221 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestSearchSourceMatchAllQuery(t *testing.T) { - matchAllQ := NewMatchAllQuery() - builder := NewSearchSource().Query(matchAllQ) - data, err := json.Marshal(builder.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"query":{"match_all":{}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchSourceFromAndSize(t *testing.T) { - matchAllQ := NewMatchAllQuery() - builder := NewSearchSource().Query(matchAllQ).From(21).Size(20) - data, err := json.Marshal(builder.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"from":21,"query":{"match_all":{}},"size":20}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchSourceNoFields(t *testing.T) { - matchAllQ := NewMatchAllQuery() - builder := NewSearchSource().Query(matchAllQ).NoFields() - data, err := json.Marshal(builder.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"fields":[],"query":{"match_all":{}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchSourceFields(t *testing.T) { - matchAllQ := NewMatchAllQuery() - builder := NewSearchSource().Query(matchAllQ).Fields("message", "tags") - data, err := json.Marshal(builder.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"fields":["message","tags"],"query":{"match_all":{}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchSourceFetchSourceDisabled(t *testing.T) { - matchAllQ := NewMatchAllQuery() - builder := NewSearchSource().Query(matchAllQ).FetchSource(false) - data, err := json.Marshal(builder.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"_source":false,"query":{"match_all":{}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchSourceFetchSourceByWildcards(t *testing.T) { - matchAllQ := NewMatchAllQuery() - fsc := NewFetchSourceContext(true).Include("obj1.*", "obj2.*").Exclude("*.description") - builder := NewSearchSource().Query(matchAllQ).FetchSourceContext(fsc) - data, err := json.Marshal(builder.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"_source":{"excludes":["*.description"],"includes":["obj1.*","obj2.*"]},"query":{"match_all":{}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchSourceFieldDataFields(t *testing.T) { - matchAllQ := NewMatchAllQuery() - builder := NewSearchSource().Query(matchAllQ).FieldDataFields("test1", "test2") - data, err := json.Marshal(builder.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"fielddata_fields":["test1","test2"],"query":{"match_all":{}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchSourceScriptFields(t *testing.T) { - matchAllQ := NewMatchAllQuery() - sf1 := NewScriptField("test1", "doc['my_field_name'].value * 2", "", nil) - sf2 := NewScriptField("test2", "doc['my_field_name'].value * factor", "", map[string]interface{}{"factor": 3.1415927}) - builder := NewSearchSource().Query(matchAllQ).ScriptFields(sf1, sf2) - data, err := json.Marshal(builder.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"query":{"match_all":{}},"script_fields":{"test1":{"script":"doc['my_field_name'].value * 2"},"test2":{"params":{"factor":3.1415927},"script":"doc['my_field_name'].value * factor"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchSourcePostFilter(t *testing.T) { - matchAllQ := NewMatchAllQuery() - pf := NewTermFilter("tag", "important") - builder := NewSearchSource().Query(matchAllQ).PostFilter(pf) - data, err := json.Marshal(builder.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"post_filter":{"term":{"tag":"important"}},"query":{"match_all":{}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchSourceHighlight(t *testing.T) { - matchAllQ := NewMatchAllQuery() - hl := NewHighlight().Field("content") - builder := NewSearchSource().Query(matchAllQ).Highlight(hl) - data, err := json.Marshal(builder.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"highlight":{"fields":{"content":{}}},"query":{"match_all":{}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchSourceRescoring(t *testing.T) { - matchAllQ := NewMatchAllQuery() - rescorerQuery := NewMatchQuery("field1", "the quick brown fox").Type("phrase").Slop(2) - rescorer := NewQueryRescorer(rescorerQuery) - rescorer = rescorer.QueryWeight(0.7) - rescorer = rescorer.RescoreQueryWeight(1.2) - rescore := NewRescore().WindowSize(50).Rescorer(rescorer) - builder := NewSearchSource().Query(matchAllQ).AddRescore(rescore) - data, err := json.Marshal(builder.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"query":{"match_all":{}},"rescore":{"query":{"query_weight":0.7,"rescore_query":{"match":{"field1":{"query":"the quick brown fox","slop":2,"type":"phrase"}}},"rescore_query_weight":1.2},"window_size":50}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchSourceIndexBoost(t *testing.T) { - matchAllQ := NewMatchAllQuery() - builder := NewSearchSource().Query(matchAllQ).IndexBoost("index1", 1.4).IndexBoost("index2", 1.3) - data, err := json.Marshal(builder.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"indices_boost":{"index1":1.4,"index2":1.3},"query":{"match_all":{}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchSourceMixDifferentSorters(t *testing.T) { - matchAllQ := NewMatchAllQuery() - builder := NewSearchSource().Query(matchAllQ). - Sort("a", false). - SortWithInfo(SortInfo{Field: "b", Ascending: true}). - SortBy(NewScriptSort("doc['field_name'].value * factor", "number").Param("factor", 1.1)) - data, err := json.Marshal(builder.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"query":{"match_all":{}},"sort":[{"a":{"order":"desc"}},{"b":{"order":"asc"}},{"_script":{"params":{"factor":1.1},"script":"doc['field_name'].value * factor","type":"number"}}]}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSearchSourceInnerHits(t *testing.T) { - matchAllQ := NewMatchAllQuery() - builder := NewSearchSource().Query(matchAllQ). - InnerHit("comments", NewInnerHit().Type("comment").Query(NewMatchQuery("user", "olivere"))). - InnerHit("views", NewInnerHit().Path("view")) - data, err := json.Marshal(builder.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"inner_hits":{"comments":{"type":{"comment":{"query":{"match":{"user":{"query":"olivere"}}}}}},"views":{"path":{"view":{}}}},"query":{"match_all":{}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_suggester_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_suggester_test.go deleted file mode 100644 index c70cdf9..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_suggester_test.go +++ /dev/null @@ -1,259 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - _ "encoding/json" - _ "net/http" - "testing" -) - -func TestTermSuggester(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Match all should return all documents - all := NewMatchAllQuery() - - tsName := "my-suggestions" - ts := NewTermSuggester(tsName) - ts = ts.Text("Goolang") - ts = ts.Field("message") - - searchResult, err := client.Search(). - Index(testIndexName). - Query(&all). - Suggester(ts). - Do() - if err != nil { - t.Fatal(err) - } - if searchResult.Suggest == nil { - t.Errorf("expected SearchResult.Suggest != nil; got nil") - } - mySuggestions, found := searchResult.Suggest[tsName] - if !found { - t.Errorf("expected to find SearchResult.Suggest[%s]; got false", tsName) - } - if mySuggestions == nil { - t.Errorf("expected SearchResult.Suggest[%s] != nil; got nil", tsName) - } - - if len(mySuggestions) != 1 { - t.Errorf("expected 1 suggestion; got %d", len(mySuggestions)) - } - mySuggestion := mySuggestions[0] - if mySuggestion.Text != "goolang" { - t.Errorf("expected Text = 'goolang'; got %s", mySuggestion.Text) - } - if mySuggestion.Offset != 0 { - t.Errorf("expected Offset = %d; got %d", 0, mySuggestion.Offset) - } - if mySuggestion.Length != 7 { - t.Errorf("expected Length = %d; got %d", 7, mySuggestion.Length) - } - if len(mySuggestion.Options) != 1 { - t.Errorf("expected 1 option; got %d", len(mySuggestion.Options)) - } - myOption := mySuggestion.Options[0] - if myOption.Text != "golang" { - t.Errorf("expected Text = 'golang'; got %s", myOption.Text) - } - if myOption.Score == float32(0.0) { - t.Errorf("expected Score != 0.0; got %v", myOption.Score) - } - if myOption.Freq == 0 { - t.Errorf("expected Freq != 0; got %v", myOption.Freq) - } -} - -func TestPhraseSuggester(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Match all should return all documents - all := NewMatchAllQuery() - - phraseSuggesterName := "my-suggestions" - ps := NewPhraseSuggester(phraseSuggesterName) - ps = ps.Text("Goolang") - ps = ps.Field("message") - - searchResult, err := client.Search(). - Index(testIndexName). - Query(&all). - Suggester(ps). - Do() - if err != nil { - t.Fatal(err) - } - if searchResult.Suggest == nil { - t.Errorf("expected SearchResult.Suggest != nil; got nil") - } - mySuggestions, found := searchResult.Suggest[phraseSuggesterName] - if !found { - t.Errorf("expected to find SearchResult.Suggest[%s]; got false", phraseSuggesterName) - } - if mySuggestions == nil { - t.Errorf("expected SearchResult.Suggest[%s] != nil; got nil", phraseSuggesterName) - } - - if len(mySuggestions) != 1 { - t.Errorf("expected 1 suggestion; got %d", len(mySuggestions)) - } - mySuggestion := mySuggestions[0] - if mySuggestion.Text != "Goolang" { - t.Errorf("expected Text = 'Goolang'; got %s", mySuggestion.Text) - } - if mySuggestion.Offset != 0 { - t.Errorf("expected Offset = %d; got %d", 0, mySuggestion.Offset) - } - if mySuggestion.Length != 7 { - t.Errorf("expected Length = %d; got %d", 7, mySuggestion.Length) - } - /* - if len(mySuggestion.Options) != 1 { - t.Errorf("expected 1 option; got %d", len(mySuggestion.Options)) - } - myOption := mySuggestion.Options[0] - if myOption.Text != "golang" { - t.Errorf("expected Text = 'golang'; got %s", myOption.Text) - } - if myOption.Score == float32(0.0) { - t.Errorf("expected Score != 0.0; got %v", myOption.Score) - } - */ -} - -// TODO(oe): I get a "Completion suggester not supported" exception on 0.90.2?! -/* -func TestCompletionSuggester(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Match all should return all documents - all := NewMatchAllQuery() - - suggesterName := "my-suggestions" - cs := NewCompletionSuggester(suggesterName) - cs = cs.Text("Goolang") - cs = cs.Field("message") - - searchResult, err := client.Search(). - Index(testIndexName). - Query(&all). - Suggester(cs). - Do() - if err != nil { - t.Fatal(err) - } - if searchResult.Suggest == nil { - t.Errorf("expected SearchResult.Suggest != nil; got nil") - } - mySuggestions, found := searchResult.Suggest[suggesterName] - if !found { - t.Errorf("expected to find SearchResult.Suggest[%s]; got false") - } - if mySuggestions == nil { - t.Errorf("expected SearchResult.Suggest[%s] != nil; got nil", suggesterName) - } - - if len(mySuggestions) != 1 { - t.Errorf("expected 1 suggestion; got %d", len(mySuggestions)) - } - mySuggestion := mySuggestions[0] - if mySuggestion.Text != "Goolang" { - t.Errorf("expected Text = 'Goolang'; got %s", mySuggestion.Text) - } - if mySuggestion.Offset != 0 { - t.Errorf("expected Offset = %d; got %d", 0, mySuggestion.Offset) - } - if mySuggestion.Length != 7 { - t.Errorf("expected Length = %d; got %d", 7, mySuggestion.Length) - } - if len(mySuggestion.Options) != 1 { - t.Errorf("expected 1 option; got %d", len(mySuggestion.Options)) - } - myOption := mySuggestion.Options[0] - if myOption.Text != "golang" { - t.Errorf("expected Text = 'golang'; got %s", myOption.Text) - } - if myOption.Score == float32(0.0) { - t.Errorf("expected Score != 0.0; got %v", myOption.Score) - } -} -//*/ diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_templates_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_templates_test.go deleted file mode 100644 index eebc97f..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_templates_test.go +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "testing" -) - -func TestSearchTemplatesLifecycle(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - // Template - tmpl := `{"template":{"query":{"match":{"title":"{{query_string}}"}}}}` - - // Create template - cresp, err := client.PutTemplate().Id("elastic-test").BodyString(tmpl).Do() - if err != nil { - t.Fatal(err) - } - if cresp == nil { - t.Fatalf("expected response != nil; got: %v", cresp) - } - if !cresp.Created { - t.Errorf("expected created = %v; got: %v", true, cresp.Created) - } - - // Get template - resp, err := client.GetTemplate().Id("elastic-test").Do() - if err != nil { - t.Fatal(err) - } - if resp == nil { - t.Fatalf("expected response != nil; got: %v", resp) - } - if resp.Template == "" { - t.Errorf("expected template != %q; got: %q", "", resp.Template) - } - - // Delete template - dresp, err := client.DeleteTemplate().Id("elastic-test").Do() - if err != nil { - t.Fatal(err) - } - if dresp == nil { - t.Fatalf("expected response != nil; got: %v", dresp) - } - if !dresp.Found { - t.Fatalf("expected found = %v; got: %v", true, dresp.Found) - } -} - -func TestSearchTemplatesInlineQuery(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Run query with (inline) search template - // See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-template-query.html - tq := NewTemplateQuery(`{"match_{{template}}": {}}`).Var("template", "all") - resp, err := client.Search(testIndexName).Query(&tq).Do() - if err != nil { - t.Fatal(err) - } - if resp == nil { - t.Fatalf("expected response != nil; got: %v", resp) - } - if resp.Hits == nil { - t.Fatalf("expected response hits != nil; got: %v", resp.Hits) - } - if resp.Hits.TotalHits != 3 { - t.Fatalf("expected 3 hits; got: %d", resp.Hits.TotalHits) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/search_test.go b/vendor/gopkg.in/olivere/elastic.v2/search_test.go deleted file mode 100644 index a65276b..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/search_test.go +++ /dev/null @@ -1,939 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - _ "net/http" - "reflect" - "testing" - "time" -) - -func TestSearchMatchAll(t *testing.T) { - client := setupTestClientAndCreateIndexAndAddDocs(t) - - // Match all should return all documents - all := NewMatchAllQuery() - searchResult, err := client.Search().Index(testIndexName).Query(&all).Do() - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } - if searchResult.Hits.TotalHits != 4 { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 4, searchResult.Hits.TotalHits) - } - if len(searchResult.Hits.Hits) != 4 { - t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", 4, len(searchResult.Hits.Hits)) - } - - for _, hit := range searchResult.Hits.Hits { - if hit.Index != testIndexName { - t.Errorf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - item := make(map[string]interface{}) - err := json.Unmarshal(*hit.Source, &item) - if err != nil { - t.Fatal(err) - } - } -} - -func BenchmarkSearchMatchAll(b *testing.B) { - client := setupTestClientAndCreateIndexAndAddDocs(b) - - for n := 0; n < b.N; n++ { - // Match all should return all documents - all := NewMatchAllQuery() - searchResult, err := client.Search().Index(testIndexName).Query(&all).Do() - if err != nil { - b.Fatal(err) - } - if searchResult.Hits == nil { - b.Errorf("expected SearchResult.Hits != nil; got nil") - } - if searchResult.Hits.TotalHits != 4 { - b.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 4, searchResult.Hits.TotalHits) - } - if len(searchResult.Hits.Hits) != 4 { - b.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", 4, len(searchResult.Hits.Hits)) - } - } -} - -func TestSearchResultTotalHits(t *testing.T) { - client := setupTestClientAndCreateIndexAndAddDocs(t) - - count, err := client.Count(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - all := NewMatchAllQuery() - searchResult, err := client.Search().Index(testIndexName).Query(&all).Do() - if err != nil { - t.Fatal(err) - } - - got := searchResult.TotalHits() - if got != count { - t.Fatalf("expected %d hits; got: %d", count, got) - } - - // No hits - searchResult = &SearchResult{} - got = searchResult.TotalHits() - if got != 0 { - t.Errorf("expected %d hits; got: %d", 0, got) - } -} - -func TestSearchResultEach(t *testing.T) { - client := setupTestClientAndCreateIndexAndAddDocs(t) - - all := NewMatchAllQuery() - searchResult, err := client.Search().Index(testIndexName).Query(&all).Do() - if err != nil { - t.Fatal(err) - } - - // Iterate over non-ptr type - var aTweet tweet - count := 0 - for _, item := range searchResult.Each(reflect.TypeOf(aTweet)) { - count++ - _, ok := item.(tweet) - if !ok { - t.Fatalf("expected hit to be serialized as tweet; got: %v", reflect.ValueOf(item)) - } - } - if count == 0 { - t.Errorf("expected to find some hits; got: %d", count) - } - - // Iterate over ptr-type - count = 0 - var aTweetPtr *tweet - for _, item := range searchResult.Each(reflect.TypeOf(aTweetPtr)) { - count++ - tw, ok := item.(*tweet) - if !ok { - t.Fatalf("expected hit to be serialized as tweet; got: %v", reflect.ValueOf(item)) - } - if tw == nil { - t.Fatal("expected hit to not be nil") - } - } - if count == 0 { - t.Errorf("expected to find some hits; got: %d", count) - } - - // Does not iterate when no hits are found - searchResult = &SearchResult{Hits: nil} - count = 0 - for _, item := range searchResult.Each(reflect.TypeOf(aTweet)) { - count++ - _ = item - } - if count != 0 { - t.Errorf("expected to not find any hits; got: %d", count) - } - searchResult = &SearchResult{Hits: &SearchHits{Hits: make([]*SearchHit, 0)}} - count = 0 - for _, item := range searchResult.Each(reflect.TypeOf(aTweet)) { - count++ - _ = item - } - if count != 0 { - t.Errorf("expected to not find any hits; got: %d", count) - } -} - -func TestSearchSorting(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{ - User: "olivere", Retweets: 108, - Message: "Welcome to Golang and Elasticsearch.", - Created: time.Date(2012, 12, 12, 17, 38, 34, 0, time.UTC), - } - tweet2 := tweet{ - User: "olivere", Retweets: 0, - Message: "Another unrelated topic.", - Created: time.Date(2012, 10, 10, 8, 12, 03, 0, time.UTC), - } - tweet3 := tweet{ - User: "sandrae", Retweets: 12, - Message: "Cycling is fun.", - Created: time.Date(2011, 11, 11, 10, 58, 12, 0, time.UTC), - } - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Match all should return all documents - all := NewMatchAllQuery() - searchResult, err := client.Search(). - Index(testIndexName). - Query(&all). - Sort("created", false). - Timeout("1s"). - Do() - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } - if searchResult.Hits.TotalHits != 3 { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 3, searchResult.Hits.TotalHits) - } - if len(searchResult.Hits.Hits) != 3 { - t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", 3, len(searchResult.Hits.Hits)) - } - - for _, hit := range searchResult.Hits.Hits { - if hit.Index != testIndexName { - t.Errorf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - item := make(map[string]interface{}) - err := json.Unmarshal(*hit.Source, &item) - if err != nil { - t.Fatal(err) - } - } -} - -func TestSearchSortingBySorters(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{ - User: "olivere", Retweets: 108, - Message: "Welcome to Golang and Elasticsearch.", - Created: time.Date(2012, 12, 12, 17, 38, 34, 0, time.UTC), - } - tweet2 := tweet{ - User: "olivere", Retweets: 0, - Message: "Another unrelated topic.", - Created: time.Date(2012, 10, 10, 8, 12, 03, 0, time.UTC), - } - tweet3 := tweet{ - User: "sandrae", Retweets: 12, - Message: "Cycling is fun.", - Created: time.Date(2011, 11, 11, 10, 58, 12, 0, time.UTC), - } - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Match all should return all documents - all := NewMatchAllQuery() - searchResult, err := client.Search(). - Index(testIndexName). - Query(&all). - SortBy(NewFieldSort("created").Desc(), NewScoreSort()). - Timeout("1s"). - Do() - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } - if searchResult.Hits.TotalHits != 3 { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 3, searchResult.Hits.TotalHits) - } - if len(searchResult.Hits.Hits) != 3 { - t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", 3, len(searchResult.Hits.Hits)) - } - - for _, hit := range searchResult.Hits.Hits { - if hit.Index != testIndexName { - t.Errorf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - item := make(map[string]interface{}) - err := json.Unmarshal(*hit.Source, &item) - if err != nil { - t.Fatal(err) - } - } -} - -func TestSearchSpecificFields(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - tweet2 := tweet{User: "olivere", Message: "Another unrelated topic."} - tweet3 := tweet{User: "sandrae", Message: "Cycling is fun."} - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Match all should return all documents - all := NewMatchAllQuery() - searchResult, err := client.Search(). - Index(testIndexName). - Query(&all). - Fields("message"). - Do() - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } - if searchResult.Hits.TotalHits != 3 { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 3, searchResult.Hits.TotalHits) - } - if len(searchResult.Hits.Hits) != 3 { - t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", 3, len(searchResult.Hits.Hits)) - } - - for _, hit := range searchResult.Hits.Hits { - if hit.Index != testIndexName { - t.Errorf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - if hit.Source != nil { - t.Fatalf("expected SearchResult.Hits.Hit.Source to be nil; got: %q", hit.Source) - } - if hit.Fields == nil { - t.Fatal("expected SearchResult.Hits.Hit.Fields to be != nil") - } - field, found := hit.Fields["message"] - if !found { - t.Errorf("expected SearchResult.Hits.Hit.Fields[%s] to be found", "message") - } - fields, ok := field.([]interface{}) - if !ok { - t.Errorf("expected []interface{}; got: %v", reflect.TypeOf(fields)) - } - if len(fields) != 1 { - t.Errorf("expected a field with 1 entry; got: %d", len(fields)) - } - message, ok := fields[0].(string) - if !ok { - t.Errorf("expected a string; got: %v", reflect.TypeOf(fields[0])) - } - if message == "" { - t.Errorf("expected a message; got: %q", message) - } - } -} - -func TestSearchExplain(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{ - User: "olivere", Retweets: 108, - Message: "Welcome to Golang and Elasticsearch.", - Created: time.Date(2012, 12, 12, 17, 38, 34, 0, time.UTC), - } - tweet2 := tweet{ - User: "olivere", Retweets: 0, - Message: "Another unrelated topic.", - Created: time.Date(2012, 10, 10, 8, 12, 03, 0, time.UTC), - } - tweet3 := tweet{ - User: "sandrae", Retweets: 12, - Message: "Cycling is fun.", - Created: time.Date(2011, 11, 11, 10, 58, 12, 0, time.UTC), - } - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Match all should return all documents - all := NewMatchAllQuery() - searchResult, err := client.Search(). - Index(testIndexName). - Query(&all). - Explain(true). - Timeout("1s"). - // Pretty(true). - Do() - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } - if searchResult.Hits.TotalHits != 3 { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 3, searchResult.Hits.TotalHits) - } - if len(searchResult.Hits.Hits) != 3 { - t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", 3, len(searchResult.Hits.Hits)) - } - - for _, hit := range searchResult.Hits.Hits { - if hit.Index != testIndexName { - t.Errorf("expected SearchResult.Hits.Hit.Index = %q; got %q", testIndexName, hit.Index) - } - if hit.Explanation == nil { - t.Fatal("expected search explanation") - } - if hit.Explanation.Value <= 0.0 { - t.Errorf("expected explanation value to be > 0.0; got: %v", hit.Explanation.Value) - } - if hit.Explanation.Description == "" { - t.Errorf("expected explanation description != %q; got: %q", "", hit.Explanation.Description) - } - } -} - -func TestSearchSource(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{ - User: "olivere", Retweets: 108, - Message: "Welcome to Golang and Elasticsearch.", - Created: time.Date(2012, 12, 12, 17, 38, 34, 0, time.UTC), - } - tweet2 := tweet{ - User: "olivere", Retweets: 0, - Message: "Another unrelated topic.", - Created: time.Date(2012, 10, 10, 8, 12, 03, 0, time.UTC), - } - tweet3 := tweet{ - User: "sandrae", Retweets: 12, - Message: "Cycling is fun.", - Created: time.Date(2011, 11, 11, 10, 58, 12, 0, time.UTC), - } - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Set up the request JSON manually to pass to the search service via Source() - source := map[string]interface{}{ - "query": map[string]interface{}{ - "match_all": map[string]interface{}{}, - }, - } - - searchResult, err := client.Search(). - Index(testIndexName). - Source(source). // sets the JSON request - Do() - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } - if searchResult.Hits.TotalHits != 3 { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 3, searchResult.Hits.TotalHits) - } -} - -func TestSearchSearchSource(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{ - User: "olivere", Retweets: 108, - Message: "Welcome to Golang and Elasticsearch.", - Created: time.Date(2012, 12, 12, 17, 38, 34, 0, time.UTC), - } - tweet2 := tweet{ - User: "olivere", Retweets: 0, - Message: "Another unrelated topic.", - Created: time.Date(2012, 10, 10, 8, 12, 03, 0, time.UTC), - } - tweet3 := tweet{ - User: "sandrae", Retweets: 12, - Message: "Cycling is fun.", - Created: time.Date(2011, 11, 11, 10, 58, 12, 0, time.UTC), - } - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Set up the search source manually and pass it to the search service via SearchSource() - ss := NewSearchSource().Query(NewMatchAllQuery()).From(0).Size(2) - - // One can use ss.Source() to get to the raw interface{} that will be used - // as the search request JSON by the SearchService. - - searchResult, err := client.Search(). - Index(testIndexName). - SearchSource(ss). // sets the SearchSource - Do() - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } - if searchResult.Hits.TotalHits != 3 { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 3, searchResult.Hits.TotalHits) - } - if len(searchResult.Hits.Hits) != 2 { - t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", 2, len(searchResult.Hits.Hits)) - } -} - -func TestSearchInnerHitsOnHasChild(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - // Check for valid ES version - esversion, err := client.ElasticsearchVersion(DefaultURL) - if err != nil { - t.Fatal(err) - } - if esversion < "1.5.0" { - t.Skip("InnerHits feature is only available for Elasticsearch 1.5+") - return - } - - tweet1 := tweet{ - User: "olivere", Retweets: 108, - Message: "Welcome to Golang and Elasticsearch.", - Created: time.Date(2012, 12, 12, 17, 38, 34, 0, time.UTC), - } - tweet2 := tweet{ - User: "olivere", Retweets: 0, - Message: "Another unrelated topic.", - Created: time.Date(2012, 10, 10, 8, 12, 03, 0, time.UTC), - } - comment2a := comment{User: "sandrae", Comment: "What does that even mean?"} - tweet3 := tweet{ - User: "sandrae", Retweets: 12, - Message: "Cycling is fun.", - Created: time.Date(2011, 11, 11, 10, 58, 12, 0, time.UTC), - } - comment3a := comment{User: "nico", Comment: "You bet."} - comment3b := comment{User: "olivere", Comment: "It sure is."} - - // Add all documents - _, err = client.Index().Index(testIndexName).Type("tweet").Id("t1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - _, err = client.Index().Index(testIndexName).Type("tweet").Id("t2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - _, err = client.Index().Index(testIndexName).Type("comment").Id("c2a").Parent("t2").BodyJson(&comment2a).Do() - if err != nil { - t.Fatal(err) - } - _, err = client.Index().Index(testIndexName).Type("tweet").Id("t3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - _, err = client.Index().Index(testIndexName).Type("comment").Id("c3a").Parent("t3").BodyJson(&comment3a).Do() - if err != nil { - t.Fatal(err) - } - _, err = client.Index().Index(testIndexName).Type("comment").Id("c3b").Parent("t3").BodyJson(&comment3b).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - fq := NewFilteredQuery(NewMatchAllQuery()) - fq = fq.Filter( - NewHasChildFilter("comment"). - Query(NewMatchAllQuery()). - InnerHit(NewInnerHit().Name("comments"))) - - searchResult, err := client.Search(). - Index(testIndexName). - Query(fq). - Pretty(true). - Do() - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } - if searchResult.Hits.TotalHits != 2 { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 2, searchResult.Hits.TotalHits) - } - if len(searchResult.Hits.Hits) != 2 { - t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", 2, len(searchResult.Hits.Hits)) - } - - hit := searchResult.Hits.Hits[0] - if hit.Id != "t2" { - t.Fatalf("expected tweet %q; got: %q", "t2", hit.Id) - } - if hit.InnerHits == nil { - t.Fatalf("expected inner hits; got: %v", hit.InnerHits) - } - if len(hit.InnerHits) != 1 { - t.Fatalf("expected %d inner hits; got: %d", 1, len(hit.InnerHits)) - } - innerHits, found := hit.InnerHits["comments"] - if !found { - t.Fatalf("expected inner hits for name %q", "comments") - } - if innerHits == nil || innerHits.Hits == nil { - t.Fatal("expected inner hits != nil") - } - if len(innerHits.Hits.Hits) != 1 { - t.Fatalf("expected %d inner hits; got: %d", 1, len(innerHits.Hits.Hits)) - } - if innerHits.Hits.Hits[0].Id != "c2a" { - t.Fatalf("expected inner hit with id %q; got: %q", "c2a", innerHits.Hits.Hits[0].Id) - } - - hit = searchResult.Hits.Hits[1] - if hit.Id != "t3" { - t.Fatalf("expected tweet %q; got: %q", "t3", hit.Id) - } - if hit.InnerHits == nil { - t.Fatalf("expected inner hits; got: %v", hit.InnerHits) - } - if len(hit.InnerHits) != 1 { - t.Fatalf("expected %d inner hits; got: %d", 1, len(hit.InnerHits)) - } - innerHits, found = hit.InnerHits["comments"] - if !found { - t.Fatalf("expected inner hits for name %q", "comments") - } - if innerHits == nil || innerHits.Hits == nil { - t.Fatal("expected inner hits != nil") - } - if len(innerHits.Hits.Hits) != 2 { - t.Fatalf("expected %d inner hits; got: %d", 2, len(innerHits.Hits.Hits)) - } - if innerHits.Hits.Hits[0].Id != "c3a" { - t.Fatalf("expected inner hit with id %q; got: %q", "c3a", innerHits.Hits.Hits[0].Id) - } - if innerHits.Hits.Hits[1].Id != "c3b" { - t.Fatalf("expected inner hit with id %q; got: %q", "c3b", innerHits.Hits.Hits[1].Id) - } -} - -func TestSearchInnerHitsOnHasParent(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - // Check for valid ES version - esversion, err := client.ElasticsearchVersion(DefaultURL) - if err != nil { - t.Fatal(err) - } - if esversion < "1.5.0" { - t.Skip("InnerHits feature is only available for Elasticsearch 1.5+") - return - } - - tweet1 := tweet{ - User: "olivere", Retweets: 108, - Message: "Welcome to Golang and Elasticsearch.", - Created: time.Date(2012, 12, 12, 17, 38, 34, 0, time.UTC), - } - tweet2 := tweet{ - User: "olivere", Retweets: 0, - Message: "Another unrelated topic.", - Created: time.Date(2012, 10, 10, 8, 12, 03, 0, time.UTC), - } - comment2a := comment{User: "sandrae", Comment: "What does that even mean?"} - tweet3 := tweet{ - User: "sandrae", Retweets: 12, - Message: "Cycling is fun.", - Created: time.Date(2011, 11, 11, 10, 58, 12, 0, time.UTC), - } - comment3a := comment{User: "nico", Comment: "You bet."} - comment3b := comment{User: "olivere", Comment: "It sure is."} - - // Add all documents - _, err = client.Index().Index(testIndexName).Type("tweet").Id("t1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - _, err = client.Index().Index(testIndexName).Type("tweet").Id("t2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - _, err = client.Index().Index(testIndexName).Type("comment").Id("c2a").Parent("t2").BodyJson(&comment2a).Do() - if err != nil { - t.Fatal(err) - } - _, err = client.Index().Index(testIndexName).Type("tweet").Id("t3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - _, err = client.Index().Index(testIndexName).Type("comment").Id("c3a").Parent("t3").BodyJson(&comment3a).Do() - if err != nil { - t.Fatal(err) - } - _, err = client.Index().Index(testIndexName).Type("comment").Id("c3b").Parent("t3").BodyJson(&comment3b).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - fq := NewFilteredQuery(NewMatchAllQuery()) - fq = fq.Filter( - NewHasParentFilter("tweet"). - Query(NewMatchAllQuery()). - InnerHit(NewInnerHit().Name("tweets"))) - - searchResult, err := client.Search(). - Index(testIndexName). - Query(fq). - Pretty(true). - Do() - if err != nil { - t.Fatal(err) - } - if searchResult.Hits == nil { - t.Errorf("expected SearchResult.Hits != nil; got nil") - } - if searchResult.Hits.TotalHits != 3 { - t.Errorf("expected SearchResult.Hits.TotalHits = %d; got %d", 3, searchResult.Hits.TotalHits) - } - if len(searchResult.Hits.Hits) != 3 { - t.Errorf("expected len(SearchResult.Hits.Hits) = %d; got %d", 3, len(searchResult.Hits.Hits)) - } - - hit := searchResult.Hits.Hits[0] - if hit.Id != "c2a" { - t.Fatalf("expected tweet %q; got: %q", "c2a", hit.Id) - } - if hit.InnerHits == nil { - t.Fatalf("expected inner hits; got: %v", hit.InnerHits) - } - if len(hit.InnerHits) != 1 { - t.Fatalf("expected %d inner hits; got: %d", 1, len(hit.InnerHits)) - } - innerHits, found := hit.InnerHits["tweets"] - if !found { - t.Fatalf("expected inner hits for name %q", "tweets") - } - if innerHits == nil || innerHits.Hits == nil { - t.Fatal("expected inner hits != nil") - } - if len(innerHits.Hits.Hits) != 1 { - t.Fatalf("expected %d inner hits; got: %d", 1, len(innerHits.Hits.Hits)) - } - if innerHits.Hits.Hits[0].Id != "t2" { - t.Fatalf("expected inner hit with id %q; got: %q", "t2", innerHits.Hits.Hits[0].Id) - } - - hit = searchResult.Hits.Hits[1] - if hit.Id != "c3a" { - t.Fatalf("expected tweet %q; got: %q", "c3a", hit.Id) - } - if hit.InnerHits == nil { - t.Fatalf("expected inner hits; got: %v", hit.InnerHits) - } - if len(hit.InnerHits) != 1 { - t.Fatalf("expected %d inner hits; got: %d", 1, len(hit.InnerHits)) - } - innerHits, found = hit.InnerHits["tweets"] - if !found { - t.Fatalf("expected inner hits for name %q", "tweets") - } - if innerHits == nil || innerHits.Hits == nil { - t.Fatal("expected inner hits != nil") - } - if len(innerHits.Hits.Hits) != 1 { - t.Fatalf("expected %d inner hits; got: %d", 1, len(innerHits.Hits.Hits)) - } - if innerHits.Hits.Hits[0].Id != "t3" { - t.Fatalf("expected inner hit with id %q; got: %q", "t3", innerHits.Hits.Hits[0].Id) - } - - hit = searchResult.Hits.Hits[2] - if hit.Id != "c3b" { - t.Fatalf("expected tweet %q; got: %q", "c3b", hit.Id) - } - if hit.InnerHits == nil { - t.Fatalf("expected inner hits; got: %v", hit.InnerHits) - } - if len(hit.InnerHits) != 1 { - t.Fatalf("expected %d inner hits; got: %d", 1, len(hit.InnerHits)) - } - innerHits, found = hit.InnerHits["tweets"] - if !found { - t.Fatalf("expected inner hits for name %q", "tweets") - } - if innerHits == nil || innerHits.Hits == nil { - t.Fatal("expected inner hits != nil") - } - if len(innerHits.Hits.Hits) != 1 { - t.Fatalf("expected %d inner hits; got: %d", 1, len(innerHits.Hits.Hits)) - } - if innerHits.Hits.Hits[0].Id != "t3" { - t.Fatalf("expected inner hit with id %q; got: %q", "t3", innerHits.Hits.Hits[0].Id) - } -} - -func TestSearchBuildURL(t *testing.T) { - client := setupTestClient(t) - - tests := []struct { - Indices []string - Types []string - Expected string - }{ - { - []string{}, - []string{}, - "/_search", - }, - { - []string{"index1"}, - []string{}, - "/index1/_search", - }, - { - []string{"index1", "index2"}, - []string{}, - "/index1%2Cindex2/_search", - }, - { - []string{}, - []string{"type1"}, - "/_all/type1/_search", - }, - { - []string{"index1"}, - []string{"type1"}, - "/index1/type1/_search", - }, - { - []string{"index1", "index2"}, - []string{"type1", "type2"}, - "/index1%2Cindex2/type1%2Ctype2/_search", - }, - { - []string{}, - []string{"type1", "type2"}, - "/_all/type1%2Ctype2/_search", - }, - } - - for i, test := range tests { - path, _, err := client.Search().Indices(test.Indices...).Types(test.Types...).buildURL() - if err != nil { - t.Errorf("case #%d: %v", i+1, err) - continue - } - if path != test.Expected { - t.Errorf("case #%d: expected %q; got: %q", i+1, test.Expected, path) - } - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/sort.go b/vendor/gopkg.in/olivere/elastic.v2/sort.go deleted file mode 100644 index e9f9aa3..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/sort.go +++ /dev/null @@ -1,487 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// -- Sorter -- - -// Sorter is an interface for sorting strategies, e.g. ScoreSort or FieldSort. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-sort.html. -type Sorter interface { - Source() interface{} -} - -// -- SortInfo -- - -// SortInfo contains information about sorting a field. -type SortInfo struct { - Sorter - Field string - Ascending bool - Missing interface{} - IgnoreUnmapped *bool - SortMode string - NestedFilter Filter - NestedPath string -} - -func (info SortInfo) Source() interface{} { - prop := make(map[string]interface{}) - if info.Ascending { - prop["order"] = "asc" - } else { - prop["order"] = "desc" - } - if info.Missing != nil { - prop["missing"] = info.Missing - } - if info.IgnoreUnmapped != nil { - prop["ignore_unmapped"] = *info.IgnoreUnmapped - } - if info.SortMode != "" { - prop["mode"] = info.SortMode - } - if info.NestedFilter != nil { - prop["nested_filter"] = info.NestedFilter.Source() - } - if info.NestedPath != "" { - prop["nested_path"] = info.NestedPath - } - source := make(map[string]interface{}) - source[info.Field] = prop - return source -} - -// -- ScoreSort -- - -// ScoreSort sorts by relevancy score. -type ScoreSort struct { - Sorter - ascending bool -} - -// NewScoreSort creates a new ScoreSort. -func NewScoreSort() ScoreSort { - return ScoreSort{ascending: false} // Descending by default! -} - -// Order defines whether sorting ascending (default) or descending. -func (s ScoreSort) Order(ascending bool) ScoreSort { - s.ascending = ascending - return s -} - -// Asc sets ascending sort order. -func (s ScoreSort) Asc() ScoreSort { - s.ascending = true - return s -} - -// Desc sets descending sort order. -func (s ScoreSort) Desc() ScoreSort { - s.ascending = false - return s -} - -// Source returns the JSON-serializable data. -func (s ScoreSort) Source() interface{} { - source := make(map[string]interface{}) - x := make(map[string]interface{}) - source["_score"] = x - if s.ascending { - x["reverse"] = true - } - return source -} - -// -- FieldSort -- - -// FieldSort sorts by a given field. -type FieldSort struct { - Sorter - fieldName string - ascending bool - missing interface{} - ignoreUnmapped *bool - unmappedType *string - sortMode *string - nestedFilter Filter - nestedPath *string -} - -// NewFieldSort creates a new FieldSort. -func NewFieldSort(fieldName string) FieldSort { - return FieldSort{ - fieldName: fieldName, - ascending: true, - } -} - -// FieldName specifies the name of the field to be used for sorting. -func (s FieldSort) FieldName(fieldName string) FieldSort { - s.fieldName = fieldName - return s -} - -// Order defines whether sorting ascending (default) or descending. -func (s FieldSort) Order(ascending bool) FieldSort { - s.ascending = ascending - return s -} - -// Asc sets ascending sort order. -func (s FieldSort) Asc() FieldSort { - s.ascending = true - return s -} - -// Desc sets descending sort order. -func (s FieldSort) Desc() FieldSort { - s.ascending = false - return s -} - -// Missing sets the value to be used when a field is missing in a document. -// You can also use "_last" or "_first" to sort missing last or first -// respectively. -func (s FieldSort) Missing(missing interface{}) FieldSort { - s.missing = missing - return s -} - -// IgnoreUnmapped specifies what happens if the field does not exist in -// the index. Set it to true to ignore, or set it to false to not ignore (default). -func (s FieldSort) IgnoreUnmapped(ignoreUnmapped bool) FieldSort { - s.ignoreUnmapped = &ignoreUnmapped - return s -} - -// UnmappedType sets the type to use when the current field is not mapped -// in an index. -func (s FieldSort) UnmappedType(typ string) FieldSort { - s.unmappedType = &typ - return s -} - -// SortMode specifies what values to pick in case a document contains -// multiple values for the targeted sort field. Possible values are: -// min, max, sum, and avg. -func (s FieldSort) SortMode(sortMode string) FieldSort { - s.sortMode = &sortMode - return s -} - -// NestedFilter sets a filter that nested objects should match with -// in order to be taken into account for sorting. -func (s FieldSort) NestedFilter(nestedFilter Filter) FieldSort { - s.nestedFilter = nestedFilter - return s -} - -// NestedPath is used if sorting occurs on a field that is inside a -// nested object. -func (s FieldSort) NestedPath(nestedPath string) FieldSort { - s.nestedPath = &nestedPath - return s -} - -// Source returns the JSON-serializable data. -func (s FieldSort) Source() interface{} { - source := make(map[string]interface{}) - x := make(map[string]interface{}) - source[s.fieldName] = x - if s.ascending { - x["order"] = "asc" - } else { - x["order"] = "desc" - } - if s.missing != nil { - x["missing"] = s.missing - } - if s.ignoreUnmapped != nil { - x["ignore_unmapped"] = *s.ignoreUnmapped - } - if s.unmappedType != nil { - x["unmapped_type"] = *s.unmappedType - } - if s.sortMode != nil { - x["mode"] = *s.sortMode - } - if s.nestedFilter != nil { - x["nested_filter"] = s.nestedFilter.Source() - } - if s.nestedPath != nil { - x["nested_path"] = *s.nestedPath - } - return source -} - -// -- GeoDistanceSort -- - -// GeoDistanceSort allows for sorting by geographic distance. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-sort.html#_geo_distance_sorting. -type GeoDistanceSort struct { - Sorter - fieldName string - points []*GeoPoint - geohashes []string - geoDistance *string - unit string - ascending bool - sortMode *string - nestedFilter Filter - nestedPath *string -} - -// NewGeoDistanceSort creates a new sorter for geo distances. -func NewGeoDistanceSort(fieldName string) GeoDistanceSort { - return GeoDistanceSort{ - fieldName: fieldName, - points: make([]*GeoPoint, 0), - geohashes: make([]string, 0), - ascending: true, - } -} - -// FieldName specifies the name of the (geo) field to use for sorting. -func (s GeoDistanceSort) FieldName(fieldName string) GeoDistanceSort { - s.fieldName = fieldName - return s -} - -// Order defines whether sorting ascending (default) or descending. -func (s GeoDistanceSort) Order(ascending bool) GeoDistanceSort { - s.ascending = ascending - return s -} - -// Asc sets ascending sort order. -func (s GeoDistanceSort) Asc() GeoDistanceSort { - s.ascending = true - return s -} - -// Desc sets descending sort order. -func (s GeoDistanceSort) Desc() GeoDistanceSort { - s.ascending = false - return s -} - -// Point specifies a point to create the range distance facets from. -func (s GeoDistanceSort) Point(lat, lon float64) GeoDistanceSort { - s.points = append(s.points, GeoPointFromLatLon(lat, lon)) - return s -} - -// Points specifies the geo point(s) to create the range distance facets from. -func (s GeoDistanceSort) Points(points ...*GeoPoint) GeoDistanceSort { - s.points = append(s.points, points...) - return s -} - -// GeoHashes specifies the geo point to create the range distance facets from. -func (s GeoDistanceSort) GeoHashes(geohashes ...string) GeoDistanceSort { - s.geohashes = append(s.geohashes, geohashes...) - return s -} - -// GeoDistance represents how to compute the distance. -// It can be sloppy_arc (default), arc, or plane. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-sort.html#_geo_distance_sorting. -func (s GeoDistanceSort) GeoDistance(geoDistance string) GeoDistanceSort { - s.geoDistance = &geoDistance - return s -} - -// Unit specifies the distance unit to use. It defaults to km. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/common-options.html#distance-units -// for details. -func (s GeoDistanceSort) Unit(unit string) GeoDistanceSort { - s.unit = unit - return s -} - -// SortMode specifies what values to pick in case a document contains -// multiple values for the targeted sort field. Possible values are: -// min, max, sum, and avg. -func (s GeoDistanceSort) SortMode(sortMode string) GeoDistanceSort { - s.sortMode = &sortMode - return s -} - -// NestedFilter sets a filter that nested objects should match with -// in order to be taken into account for sorting. -func (s GeoDistanceSort) NestedFilter(nestedFilter Filter) GeoDistanceSort { - s.nestedFilter = nestedFilter - return s -} - -// NestedPath is used if sorting occurs on a field that is inside a -// nested object. -func (s GeoDistanceSort) NestedPath(nestedPath string) GeoDistanceSort { - s.nestedPath = &nestedPath - return s -} - -// Source returns the JSON-serializable data. -func (s GeoDistanceSort) Source() interface{} { - source := make(map[string]interface{}) - x := make(map[string]interface{}) - source["_geo_distance"] = x - - // Points - ptarr := make([]interface{}, 0) - for _, pt := range s.points { - ptarr = append(ptarr, pt.Source()) - } - for _, geohash := range s.geohashes { - ptarr = append(ptarr, geohash) - } - x[s.fieldName] = ptarr - - if s.unit != "" { - x["unit"] = s.unit - } - if s.geoDistance != nil { - x["distance_type"] = *s.geoDistance - } - - if !s.ascending { - x["reverse"] = true - } - if s.sortMode != nil { - x["mode"] = *s.sortMode - } - if s.nestedFilter != nil { - x["nested_filter"] = s.nestedFilter.Source() - } - if s.nestedPath != nil { - x["nested_path"] = *s.nestedPath - } - return source -} - -// -- ScriptSort -- - -// ScriptSort sorts by a custom script. See -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-scripting.html#modules-scripting -// for details about scripting. -type ScriptSort struct { - Sorter - lang string - script string - typ string - params map[string]interface{} - ascending bool - sortMode *string - nestedFilter Filter - nestedPath *string -} - -// NewScriptSort creates a new ScriptSort. -func NewScriptSort(script, typ string) ScriptSort { - return ScriptSort{ - script: script, - typ: typ, - ascending: true, - params: make(map[string]interface{}), - } -} - -// Lang specifies the script language to use. It can be one of: -// groovy (the default for ES >= 1.4), mvel (default for ES < 1.4), -// js, python, expression, or native. See -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-scripting.html#modules-scripting -// for details. -func (s ScriptSort) Lang(lang string) ScriptSort { - s.lang = lang - return s -} - -// Type sets the script type, which can be either string or number. -func (s ScriptSort) Type(typ string) ScriptSort { - s.typ = typ - return s -} - -// Param adds a parameter to the script. -func (s ScriptSort) Param(name string, value interface{}) ScriptSort { - s.params[name] = value - return s -} - -// Params sets the parameters of the script. -func (s ScriptSort) Params(params map[string]interface{}) ScriptSort { - s.params = params - return s -} - -// Order defines whether sorting ascending (default) or descending. -func (s ScriptSort) Order(ascending bool) ScriptSort { - s.ascending = ascending - return s -} - -// Asc sets ascending sort order. -func (s ScriptSort) Asc() ScriptSort { - s.ascending = true - return s -} - -// Desc sets descending sort order. -func (s ScriptSort) Desc() ScriptSort { - s.ascending = false - return s -} - -// SortMode specifies what values to pick in case a document contains -// multiple values for the targeted sort field. Possible values are: -// min or max. -func (s ScriptSort) SortMode(sortMode string) ScriptSort { - s.sortMode = &sortMode - return s -} - -// NestedFilter sets a filter that nested objects should match with -// in order to be taken into account for sorting. -func (s ScriptSort) NestedFilter(nestedFilter Filter) ScriptSort { - s.nestedFilter = nestedFilter - return s -} - -// NestedPath is used if sorting occurs on a field that is inside a -// nested object. -func (s ScriptSort) NestedPath(nestedPath string) ScriptSort { - s.nestedPath = &nestedPath - return s -} - -// Source returns the JSON-serializable data. -func (s ScriptSort) Source() interface{} { - source := make(map[string]interface{}) - x := make(map[string]interface{}) - source["_script"] = x - - x["script"] = s.script - x["type"] = s.typ - if !s.ascending { - x["reverse"] = true - } - if s.lang != "" { - x["lang"] = s.lang - } - if len(s.params) > 0 { - x["params"] = s.params - } - if s.sortMode != nil { - x["mode"] = *s.sortMode - } - if s.nestedFilter != nil { - x["nested_filter"] = s.nestedFilter.Source() - } - if s.nestedPath != nil { - x["nested_path"] = *s.nestedPath - } - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/sort_test.go b/vendor/gopkg.in/olivere/elastic.v2/sort_test.go deleted file mode 100644 index f9a149e..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/sort_test.go +++ /dev/null @@ -1,195 +0,0 @@ -// Copyright 2012-present Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestSortInfo(t *testing.T) { - builder := SortInfo{Field: "grade", Ascending: false} - data, err := json.Marshal(builder.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"grade":{"order":"desc"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSortInfoComplex(t *testing.T) { - builder := SortInfo{ - Field: "price", - Ascending: false, - Missing: "_last", - SortMode: "avg", - NestedFilter: NewTermQuery("product.color", "blue"), - NestedPath: "variant", - } - src := builder.Source() - data, err := json.Marshal(src) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"price":{"missing":"_last","mode":"avg","nested_filter":{"term":{"product.color":"blue"}},"nested_path":"variant","order":"desc"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestScoreSort(t *testing.T) { - builder := NewScoreSort() - if builder.ascending != false { - t.Error("expected score sorter to be ascending by default") - } - data, err := json.Marshal(builder.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"_score":{}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestScoreSortOrderAscending(t *testing.T) { - builder := NewScoreSort().Asc() - data, err := json.Marshal(builder.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"_score":{"reverse":true}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestScoreSortOrderDescending(t *testing.T) { - builder := NewScoreSort().Desc() - data, err := json.Marshal(builder.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"_score":{}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestFieldSort(t *testing.T) { - builder := NewFieldSort("grade") - data, err := json.Marshal(builder.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"grade":{"order":"asc"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestFieldSortOrderDesc(t *testing.T) { - builder := NewFieldSort("grade").Desc() - data, err := json.Marshal(builder.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"grade":{"order":"desc"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestFieldSortComplex(t *testing.T) { - builder := NewFieldSort("price").Desc(). - SortMode("avg"). - Missing("_last"). - UnmappedType("product"). - NestedFilter(NewTermFilter("product.color", "blue")). - NestedPath("variant") - data, err := json.Marshal(builder.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"price":{"missing":"_last","mode":"avg","nested_filter":{"term":{"product.color":"blue"}},"nested_path":"variant","order":"desc","unmapped_type":"product"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestGeoDistanceSort(t *testing.T) { - builder := NewGeoDistanceSort("pin.location"). - Point(-70, 40). - Order(true). - Unit("km"). - SortMode("min"). - GeoDistance("sloppy_arc") - data, err := json.Marshal(builder.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"_geo_distance":{"distance_type":"sloppy_arc","mode":"min","pin.location":[{"lat":-70,"lon":40}],"unit":"km"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestGeoDistanceSortOrderDesc(t *testing.T) { - builder := NewGeoDistanceSort("pin.location"). - Point(-70, 40). - Unit("km"). - SortMode("min"). - GeoDistance("sloppy_arc"). - Desc() - data, err := json.Marshal(builder.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"_geo_distance":{"distance_type":"sloppy_arc","mode":"min","pin.location":[{"lat":-70,"lon":40}],"reverse":true,"unit":"km"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} -func TestScriptSort(t *testing.T) { - builder := NewScriptSort("doc['field_name'].value * factor", "number"). - Param("factor", 1.1). - Order(true) - data, err := json.Marshal(builder.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"_script":{"params":{"factor":1.1},"script":"doc['field_name'].value * factor","type":"number"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestScriptSortOrderDesc(t *testing.T) { - builder := NewScriptSort("doc['field_name'].value * factor", "number"). - Param("factor", 1.1). - Desc() - data, err := json.Marshal(builder.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"_script":{"params":{"factor":1.1},"reverse":true,"script":"doc['field_name'].value * factor","type":"number"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/suggest.go b/vendor/gopkg.in/olivere/elastic.v2/suggest.go deleted file mode 100644 index db0e56d..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/suggest.go +++ /dev/null @@ -1,145 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "fmt" - "net/url" - "strings" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -// SuggestService returns suggestions for text. -type SuggestService struct { - client *Client - pretty bool - routing string - preference string - indices []string - suggesters []Suggester -} - -func NewSuggestService(client *Client) *SuggestService { - builder := &SuggestService{ - client: client, - indices: make([]string, 0), - suggesters: make([]Suggester, 0), - } - return builder -} - -func (s *SuggestService) Index(index string) *SuggestService { - s.indices = append(s.indices, index) - return s -} - -func (s *SuggestService) Indices(indices ...string) *SuggestService { - s.indices = append(s.indices, indices...) - return s -} - -func (s *SuggestService) Pretty(pretty bool) *SuggestService { - s.pretty = pretty - return s -} - -func (s *SuggestService) Routing(routing string) *SuggestService { - s.routing = routing - return s -} - -func (s *SuggestService) Preference(preference string) *SuggestService { - s.preference = preference - return s -} - -func (s *SuggestService) Suggester(suggester Suggester) *SuggestService { - s.suggesters = append(s.suggesters, suggester) - return s -} - -func (s *SuggestService) Do() (SuggestResult, error) { - // Build url - path := "/" - - // Indices part - indexPart := make([]string, 0) - for _, index := range s.indices { - index, err := uritemplates.Expand("{index}", map[string]string{ - "index": index, - }) - if err != nil { - return nil, err - } - indexPart = append(indexPart, index) - } - path += strings.Join(indexPart, ",") - - // Suggest - path += "/_suggest" - - // Parameters - params := make(url.Values) - if s.pretty { - params.Set("pretty", fmt.Sprintf("%v", s.pretty)) - } - if s.routing != "" { - params.Set("routing", s.routing) - } - if s.preference != "" { - params.Set("preference", s.preference) - } - - // Set body - body := make(map[string]interface{}) - for _, s := range s.suggesters { - body[s.Name()] = s.Source(false) - } - - // Get response - res, err := s.client.PerformRequest("POST", path, params, body) - if err != nil { - return nil, err - } - - // There is a _shard object that cannot be deserialized. - // So we use json.RawMessage instead. - var suggestions map[string]*json.RawMessage - if err := s.client.decoder.Decode(res.Body, &suggestions); err != nil { - return nil, err - } - - ret := make(SuggestResult) - for name, result := range suggestions { - if name != "_shards" { - var sug []Suggestion - if err := s.client.decoder.Decode(*result, &sug); err != nil { - return nil, err - } - ret[name] = sug - } - } - - return ret, nil -} - -type SuggestResult map[string][]Suggestion - -type Suggestion struct { - Text string `json:"text"` - Offset int `json:"offset"` - Length int `json:"length"` - Options []suggestionOption `json:"options"` -} - -type suggestionOption struct { - Text string `json:"text"` - Score float32 `json:"score"` - Freq int `json:"freq"` - Payload interface{} `json:"payload"` - CollateMatch bool `json:"collate_match"` -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/suggest_field.go b/vendor/gopkg.in/olivere/elastic.v2/suggest_field.go deleted file mode 100644 index a6e0ff6..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/suggest_field.go +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" -) - -// SuggestField can be used by the caller to specify a suggest field -// at index time. For a detailed example, see e.g. -// http://www.elasticsearch.org/blog/you-complete-me/. -type SuggestField struct { - inputs []string - output *string - payload interface{} - weight int - contextQueries []SuggesterContextQuery -} - -func NewSuggestField() *SuggestField { - return &SuggestField{weight: -1} -} - -func (f *SuggestField) Input(input ...string) *SuggestField { - if f.inputs == nil { - f.inputs = make([]string, 0) - } - f.inputs = append(f.inputs, input...) - return f -} - -func (f *SuggestField) Output(output string) *SuggestField { - f.output = &output - return f -} - -func (f *SuggestField) Payload(payload interface{}) *SuggestField { - f.payload = payload - return f -} - -func (f *SuggestField) Weight(weight int) *SuggestField { - f.weight = weight - return f -} - -func (f *SuggestField) ContextQuery(queries ...SuggesterContextQuery) *SuggestField { - f.contextQueries = append(f.contextQueries, queries...) - return f -} - -// MarshalJSON encodes SuggestField into JSON. -func (f *SuggestField) MarshalJSON() ([]byte, error) { - source := make(map[string]interface{}) - - if f.inputs != nil { - switch len(f.inputs) { - case 1: - source["input"] = f.inputs[0] - default: - source["input"] = f.inputs - } - } - - if f.output != nil { - source["output"] = *f.output - } - - if f.payload != nil { - source["payload"] = f.payload - } - - if f.weight >= 0 { - source["weight"] = f.weight - } - - switch len(f.contextQueries) { - case 0: - case 1: - source["context"] = f.contextQueries[0].Source() - default: - var ctxq []interface{} - for _, query := range f.contextQueries { - ctxq = append(ctxq, query.Source()) - } - source["context"] = ctxq - } - - return json.Marshal(source) -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/suggest_field_test.go b/vendor/gopkg.in/olivere/elastic.v2/suggest_field_test.go deleted file mode 100644 index b01cf0a..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/suggest_field_test.go +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestSuggestField(t *testing.T) { - field := NewSuggestField(). - Input("Welcome to Golang and Elasticsearch.", "Golang and Elasticsearch"). - Output("Golang and Elasticsearch: An introduction."). - Weight(1). - ContextQuery( - NewSuggesterCategoryMapping("color").FieldName("color_field").DefaultValues("red", "green", "blue"), - NewSuggesterGeoMapping("location").Precision("5m").Neighbors(true).DefaultLocations(GeoPointFromLatLon(52.516275, 13.377704)), - ) - data, err := json.Marshal(field) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"context":[{"color":{"default":["red","green","blue"],"path":"color_field","type":"category"}},{"location":{"default":{"lat":52.516275,"lon":13.377704},"neighbors":true,"precision":["5m"],"type":"geo"}}],"input":["Welcome to Golang and Elasticsearch.","Golang and Elasticsearch"],"output":"Golang and Elasticsearch: An introduction.","weight":1}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/suggest_test.go b/vendor/gopkg.in/olivere/elastic.v2/suggest_test.go deleted file mode 100644 index 50a4a09..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/suggest_test.go +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - _ "net/http" - "testing" -) - -func TestSuggestService(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{ - User: "olivere", - Message: "Welcome to Golang and Elasticsearch.", - Tags: []string{"golang", "elasticsearch"}, - Location: "48.1333,11.5667", // lat,lon - Suggest: NewSuggestField(). - Input("Welcome to Golang and Elasticsearch.", "Golang and Elasticsearch"). - Output("Golang and Elasticsearch: An introduction."). - Weight(0), - } - tweet2 := tweet{ - User: "olivere", - Message: "Another unrelated topic.", - Tags: []string{"golang"}, - Location: "48.1189,11.4289", // lat,lon - Suggest: NewSuggestField(). - Input("Another unrelated topic.", "Golang topic."). - Output("About Golang."). - Weight(1), - } - tweet3 := tweet{ - User: "sandrae", - Message: "Cycling is fun.", - Tags: []string{"sports", "cycling"}, - Location: "47.7167,11.7167", // lat,lon - Suggest: NewSuggestField(). - Input("Cycling is fun."). - Output("Cycling is a fun sport."), - } - - // Add all documents - _, err := client.Index().Index(testIndexName).Type("tweet").Id("1").BodyJson(&tweet1).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("2").BodyJson(&tweet2).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Index().Index(testIndexName).Type("tweet").Id("3").BodyJson(&tweet3).Do() - if err != nil { - t.Fatal(err) - } - - _, err = client.Flush().Index(testIndexName).Do() - if err != nil { - t.Fatal(err) - } - - // Test _suggest endpoint - termSuggesterName := "my-term-suggester" - termSuggester := NewTermSuggester(termSuggesterName).Text("Goolang").Field("message") - phraseSuggesterName := "my-phrase-suggester" - phraseSuggester := NewPhraseSuggester(phraseSuggesterName).Text("Goolang").Field("message") - completionSuggesterName := "my-completion-suggester" - completionSuggester := NewCompletionSuggester(completionSuggesterName).Text("Go").Field("suggest_field") - - result, err := client.Suggest(). - Index(testIndexName). - Suggester(termSuggester). - Suggester(phraseSuggester). - Suggester(completionSuggester). - Do() - if err != nil { - t.Fatal(err) - } - if result == nil { - t.Errorf("expected result != nil; got nil") - } - if len(result) != 3 { - t.Errorf("expected 3 suggester results; got %d", len(result)) - } - - termSuggestions, found := result[termSuggesterName] - if !found { - t.Errorf("expected to find Suggest[%s]; got false", termSuggesterName) - } - if termSuggestions == nil { - t.Errorf("expected Suggest[%s] != nil; got nil", termSuggesterName) - } - if len(termSuggestions) != 1 { - t.Errorf("expected 1 suggestion; got %d", len(termSuggestions)) - } - - phraseSuggestions, found := result[phraseSuggesterName] - if !found { - t.Errorf("expected to find Suggest[%s]; got false", phraseSuggesterName) - } - if phraseSuggestions == nil { - t.Errorf("expected Suggest[%s] != nil; got nil", phraseSuggesterName) - } - if len(phraseSuggestions) != 1 { - t.Errorf("expected 1 suggestion; got %d", len(phraseSuggestions)) - } - - completionSuggestions, found := result[completionSuggesterName] - if !found { - t.Errorf("expected to find Suggest[%s]; got false", completionSuggesterName) - } - if completionSuggestions == nil { - t.Errorf("expected Suggest[%s] != nil; got nil", completionSuggesterName) - } - if len(completionSuggestions) != 1 { - t.Errorf("expected 1 suggestion; got %d", len(completionSuggestions)) - } - if len(completionSuggestions[0].Options) != 2 { - t.Errorf("expected 2 suggestion options; got %d", len(completionSuggestions[0].Options)) - } - if completionSuggestions[0].Options[0].Text != "About Golang." { - t.Errorf("expected Suggest[%s][0].Options[0].Text == %q; got %q", completionSuggesterName, "About Golang.", completionSuggestions[0].Options[0].Text) - } - if completionSuggestions[0].Options[1].Text != "Golang and Elasticsearch: An introduction." { - t.Errorf("expected Suggest[%s][0].Options[1].Text == %q; got %q", completionSuggesterName, "Golang and Elasticsearch: An introduction.", completionSuggestions[0].Options[1].Text) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/suggester_completion.go b/vendor/gopkg.in/olivere/elastic.v2/suggester_completion.go deleted file mode 100644 index c8e8951..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/suggester_completion.go +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// CompletionSuggester is a fast suggester for e.g. type-ahead completion. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-suggesters-completion.html -// for more details. -type CompletionSuggester struct { - Suggester - name string - text string - field string - analyzer string - size *int - shardSize *int - contextQueries []SuggesterContextQuery -} - -// Creates a new completion suggester. -func NewCompletionSuggester(name string) CompletionSuggester { - return CompletionSuggester{ - name: name, - contextQueries: make([]SuggesterContextQuery, 0), - } -} - -func (q CompletionSuggester) Name() string { - return q.name -} - -func (q CompletionSuggester) Text(text string) CompletionSuggester { - q.text = text - return q -} - -func (q CompletionSuggester) Field(field string) CompletionSuggester { - q.field = field - return q -} - -func (q CompletionSuggester) Analyzer(analyzer string) CompletionSuggester { - q.analyzer = analyzer - return q -} - -func (q CompletionSuggester) Size(size int) CompletionSuggester { - q.size = &size - return q -} - -func (q CompletionSuggester) ShardSize(shardSize int) CompletionSuggester { - q.shardSize = &shardSize - return q -} - -func (q CompletionSuggester) ContextQuery(query SuggesterContextQuery) CompletionSuggester { - q.contextQueries = append(q.contextQueries, query) - return q -} - -func (q CompletionSuggester) ContextQueries(queries ...SuggesterContextQuery) CompletionSuggester { - q.contextQueries = append(q.contextQueries, queries...) - return q -} - -// completionSuggesterRequest is necessary because the order in which -// the JSON elements are routed to Elasticsearch is relevant. -// We got into trouble when using plain maps because the text element -// needs to go before the completion element. -type completionSuggesterRequest struct { - Text string `json:"text"` - Completion interface{} `json:"completion"` -} - -// Creates the source for the completion suggester. -func (q CompletionSuggester) Source(includeName bool) interface{} { - cs := &completionSuggesterRequest{} - - if q.text != "" { - cs.Text = q.text - } - - suggester := make(map[string]interface{}) - cs.Completion = suggester - - if q.analyzer != "" { - suggester["analyzer"] = q.analyzer - } - if q.field != "" { - suggester["field"] = q.field - } - if q.size != nil { - suggester["size"] = *q.size - } - if q.shardSize != nil { - suggester["shard_size"] = *q.shardSize - } - switch len(q.contextQueries) { - case 0: - case 1: - suggester["context"] = q.contextQueries[0].Source() - default: - ctxq := make(map[string]interface{}) - for _, query := range q.contextQueries { - src := query.Source() - // Merge the dictionary into ctxq - m, ok := src.(map[string]interface{}) - if !ok { - // We have no way of reporting errors in v2, so we just swallow it. - continue - } - for k, v := range m { - ctxq[k] = v - } - } - suggester["context"] = ctxq - } - - // TODO(oe) Add competion-suggester specific parameters here - - if !includeName { - return cs - } - - source := make(map[string]interface{}) - source[q.name] = cs - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/suggester_completion_fuzzy.go b/vendor/gopkg.in/olivere/elastic.v2/suggester_completion_fuzzy.go deleted file mode 100644 index 3539381..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/suggester_completion_fuzzy.go +++ /dev/null @@ -1,171 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// FuzzyFuzzyCompletionSuggester is a FuzzyCompletionSuggester that allows fuzzy -// completion. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-suggesters-completion.html -// for details, and -// http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-suggesters-completion.html#fuzzy -// for details about the fuzzy completion suggester. -type FuzzyCompletionSuggester struct { - Suggester - name string - text string - field string - analyzer string - size *int - shardSize *int - contextQueries []SuggesterContextQuery - - fuzziness interface{} - fuzzyTranspositions *bool - fuzzyMinLength *int - fuzzyPrefixLength *int - unicodeAware *bool -} - -// Fuzziness defines the fuzziness which is used in FuzzyCompletionSuggester. -type Fuzziness struct { -} - -// Creates a new completion suggester. -func NewFuzzyCompletionSuggester(name string) FuzzyCompletionSuggester { - return FuzzyCompletionSuggester{ - name: name, - contextQueries: make([]SuggesterContextQuery, 0), - } -} - -func (q FuzzyCompletionSuggester) Name() string { - return q.name -} - -func (q FuzzyCompletionSuggester) Text(text string) FuzzyCompletionSuggester { - q.text = text - return q -} - -func (q FuzzyCompletionSuggester) Field(field string) FuzzyCompletionSuggester { - q.field = field - return q -} - -func (q FuzzyCompletionSuggester) Analyzer(analyzer string) FuzzyCompletionSuggester { - q.analyzer = analyzer - return q -} - -func (q FuzzyCompletionSuggester) Size(size int) FuzzyCompletionSuggester { - q.size = &size - return q -} - -func (q FuzzyCompletionSuggester) ShardSize(shardSize int) FuzzyCompletionSuggester { - q.shardSize = &shardSize - return q -} - -func (q FuzzyCompletionSuggester) ContextQuery(query SuggesterContextQuery) FuzzyCompletionSuggester { - q.contextQueries = append(q.contextQueries, query) - return q -} - -func (q FuzzyCompletionSuggester) ContextQueries(queries ...SuggesterContextQuery) FuzzyCompletionSuggester { - q.contextQueries = append(q.contextQueries, queries...) - return q -} - -// Fuzziness defines the strategy used to describe what "fuzzy" actually -// means for the suggester, e.g. 1, 2, "0", "1..2", ">4", or "AUTO". -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/common-options.html#fuzziness -// for a detailed description. -func (q FuzzyCompletionSuggester) Fuzziness(fuzziness interface{}) FuzzyCompletionSuggester { - q.fuzziness = fuzziness - return q -} - -func (q FuzzyCompletionSuggester) FuzzyTranspositions(fuzzyTranspositions bool) FuzzyCompletionSuggester { - q.fuzzyTranspositions = &fuzzyTranspositions - return q -} - -func (q FuzzyCompletionSuggester) FuzzyMinLength(minLength int) FuzzyCompletionSuggester { - q.fuzzyMinLength = &minLength - return q -} - -func (q FuzzyCompletionSuggester) FuzzyPrefixLength(prefixLength int) FuzzyCompletionSuggester { - q.fuzzyPrefixLength = &prefixLength - return q -} - -func (q FuzzyCompletionSuggester) UnicodeAware(unicodeAware bool) FuzzyCompletionSuggester { - q.unicodeAware = &unicodeAware - return q -} - -// Creates the source for the completion suggester. -func (q FuzzyCompletionSuggester) Source(includeName bool) interface{} { - cs := &completionSuggesterRequest{} - - if q.text != "" { - cs.Text = q.text - } - - suggester := make(map[string]interface{}) - cs.Completion = suggester - - if q.analyzer != "" { - suggester["analyzer"] = q.analyzer - } - if q.field != "" { - suggester["field"] = q.field - } - if q.size != nil { - suggester["size"] = *q.size - } - if q.shardSize != nil { - suggester["shard_size"] = *q.shardSize - } - switch len(q.contextQueries) { - case 0: - case 1: - suggester["context"] = q.contextQueries[0].Source() - default: - ctxq := make([]interface{}, 0) - for _, query := range q.contextQueries { - ctxq = append(ctxq, query.Source()) - } - suggester["context"] = ctxq - } - - // Fuzzy Completion Suggester fields - fuzzy := make(map[string]interface{}) - suggester["fuzzy"] = fuzzy - if q.fuzziness != nil { - fuzzy["fuzziness"] = q.fuzziness - } - if q.fuzzyTranspositions != nil { - fuzzy["transpositions"] = *q.fuzzyTranspositions - } - if q.fuzzyMinLength != nil { - fuzzy["min_length"] = *q.fuzzyMinLength - } - if q.fuzzyPrefixLength != nil { - fuzzy["prefix_length"] = *q.fuzzyPrefixLength - } - if q.unicodeAware != nil { - fuzzy["unicode_aware"] = *q.unicodeAware - } - - if !includeName { - return cs - } - - source := make(map[string]interface{}) - source[q.name] = cs - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/suggester_completion_fuzzy_test.go b/vendor/gopkg.in/olivere/elastic.v2/suggester_completion_fuzzy_test.go deleted file mode 100644 index a7d9afc..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/suggester_completion_fuzzy_test.go +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestFuzzyCompletionSuggesterSource(t *testing.T) { - s := NewFuzzyCompletionSuggester("song-suggest"). - Text("n"). - Field("suggest"). - Fuzziness(2) - data, err := json.Marshal(s.Source(true)) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"song-suggest":{"text":"n","completion":{"field":"suggest","fuzzy":{"fuzziness":2}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestFuzzyCompletionSuggesterWithStringFuzzinessSource(t *testing.T) { - s := NewFuzzyCompletionSuggester("song-suggest"). - Text("n"). - Field("suggest"). - Fuzziness("1..4") - data, err := json.Marshal(s.Source(true)) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"song-suggest":{"text":"n","completion":{"field":"suggest","fuzzy":{"fuzziness":"1..4"}}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/suggester_completion_test.go b/vendor/gopkg.in/olivere/elastic.v2/suggester_completion_test.go deleted file mode 100644 index 82a4d14..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/suggester_completion_test.go +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestCompletionSuggesterSource(t *testing.T) { - s := NewCompletionSuggester("song-suggest"). - Text("n"). - Field("suggest") - data, err := json.Marshal(s.Source(true)) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"song-suggest":{"text":"n","completion":{"field":"suggest"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestCompletionSuggesterSourceWithMultipleContexts(t *testing.T) { - s := NewCompletionSuggester("song-suggest"). - Text("n"). - Field("suggest"). - ContextQueries( - NewSuggesterCategoryQuery("artist", "Sting"), - NewSuggesterCategoryQuery("label", "BMG"), - ) - data, err := json.Marshal(s.Source(true)) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"song-suggest":{"text":"n","completion":{"context":{"artist":"Sting","label":"BMG"},"field":"suggest"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/suggester_context.go b/vendor/gopkg.in/olivere/elastic.v2/suggester_context.go deleted file mode 100644 index 96d6c9e..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/suggester_context.go +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// SuggesterContextQuery is used to define context information within -// a suggestion request. -type SuggesterContextQuery interface { - Source() interface{} -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/suggester_context_category.go b/vendor/gopkg.in/olivere/elastic.v2/suggester_context_category.go deleted file mode 100644 index 1699c7b..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/suggester_context_category.go +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// -- SuggesterCategoryMapping -- - -// SuggesterCategoryMapping provides a mapping for a category context in a suggester. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/suggester-context.html#_category_mapping. -type SuggesterCategoryMapping struct { - name string - fieldName string - defaultValues []string -} - -// NewSuggesterCategoryMapping creates a new SuggesterCategoryMapping. -func NewSuggesterCategoryMapping(name string) *SuggesterCategoryMapping { - return &SuggesterCategoryMapping{ - name: name, - defaultValues: make([]string, 0), - } -} - -func (q *SuggesterCategoryMapping) DefaultValues(values ...string) *SuggesterCategoryMapping { - q.defaultValues = append(q.defaultValues, values...) - return q -} - -func (q *SuggesterCategoryMapping) FieldName(fieldName string) *SuggesterCategoryMapping { - q.fieldName = fieldName - return q -} - -// Source returns a map that will be used to serialize the context query as JSON. -func (q *SuggesterCategoryMapping) Source() interface{} { - source := make(map[string]interface{}) - - x := make(map[string]interface{}) - source[q.name] = x - - x["type"] = "category" - - switch len(q.defaultValues) { - case 0: - x["default"] = q.defaultValues - case 1: - x["default"] = q.defaultValues[0] - default: - x["default"] = q.defaultValues - } - - if q.fieldName != "" { - x["path"] = q.fieldName - } - return source -} - -// -- SuggesterCategoryQuery -- - -// SuggesterCategoryQuery provides querying a category context in a suggester. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/suggester-context.html#_category_query. -type SuggesterCategoryQuery struct { - name string - values []string -} - -// NewSuggesterCategoryQuery creates a new SuggesterCategoryQuery. -func NewSuggesterCategoryQuery(name string, values ...string) *SuggesterCategoryQuery { - q := &SuggesterCategoryQuery{ - name: name, - values: make([]string, 0), - } - if len(values) > 0 { - q.values = append(q.values, values...) - } - return q -} - -func (q *SuggesterCategoryQuery) Values(values ...string) *SuggesterCategoryQuery { - q.values = append(q.values, values...) - return q -} - -// Source returns a map that will be used to serialize the context query as JSON. -func (q *SuggesterCategoryQuery) Source() interface{} { - source := make(map[string]interface{}) - - switch len(q.values) { - case 0: - source[q.name] = q.values - case 1: - source[q.name] = q.values[0] - default: - source[q.name] = q.values - } - - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/suggester_context_category_test.go b/vendor/gopkg.in/olivere/elastic.v2/suggester_context_category_test.go deleted file mode 100644 index 1d380fb..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/suggester_context_category_test.go +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestSuggesterCategoryMapping(t *testing.T) { - q := NewSuggesterCategoryMapping("color"). - DefaultValues("red") - data, err := json.Marshal(q.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"color":{"default":"red","type":"category"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSuggesterCategoryMappingWithTwoDefaultValues(t *testing.T) { - q := NewSuggesterCategoryMapping("color"). - DefaultValues("red", "orange") - data, err := json.Marshal(q.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"color":{"default":["red","orange"],"type":"category"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSuggesterCategoryMappingWithFieldName(t *testing.T) { - q := NewSuggesterCategoryMapping("color"). - DefaultValues("red", "orange"). - FieldName("color_field") - data, err := json.Marshal(q.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"color":{"default":["red","orange"],"path":"color_field","type":"category"}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSuggesterCategoryQuery(t *testing.T) { - q := NewSuggesterCategoryQuery("color", "red") - data, err := json.Marshal(q.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"color":"red"}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} - -func TestSuggesterCategoryQueryWithTwoValues(t *testing.T) { - q := NewSuggesterCategoryQuery("color", "red", "yellow") - data, err := json.Marshal(q.Source()) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"color":["red","yellow"]}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/suggester_phrase.go b/vendor/gopkg.in/olivere/elastic.v2/suggester_phrase.go deleted file mode 100644 index d25c4f7..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/suggester_phrase.go +++ /dev/null @@ -1,538 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// For more details, see -// http://www.elasticsearch.org/guide/reference/api/search/phrase-suggest/ -type PhraseSuggester struct { - Suggester - name string - text string - field string - analyzer string - size *int - shardSize *int - contextQueries []SuggesterContextQuery - - // fields specific to a phrase suggester - maxErrors *float32 - separator *string - realWordErrorLikelihood *float32 - confidence *float32 - generators map[string][]CandidateGenerator - gramSize *int - smoothingModel SmoothingModel - forceUnigrams *bool - tokenLimit *int - preTag, postTag *string - collateQuery *string - collateFilter *string - collatePreference *string - collateParams map[string]interface{} - collatePrune *bool -} - -// Creates a new phrase suggester. -func NewPhraseSuggester(name string) PhraseSuggester { - return PhraseSuggester{ - name: name, - contextQueries: make([]SuggesterContextQuery, 0), - collateParams: make(map[string]interface{}), - } -} - -func (q PhraseSuggester) Name() string { - return q.name -} - -func (q PhraseSuggester) Text(text string) PhraseSuggester { - q.text = text - return q -} - -func (q PhraseSuggester) Field(field string) PhraseSuggester { - q.field = field - return q -} - -func (q PhraseSuggester) Analyzer(analyzer string) PhraseSuggester { - q.analyzer = analyzer - return q -} - -func (q PhraseSuggester) Size(size int) PhraseSuggester { - q.size = &size - return q -} - -func (q PhraseSuggester) ShardSize(shardSize int) PhraseSuggester { - q.shardSize = &shardSize - return q -} - -func (q PhraseSuggester) ContextQuery(query SuggesterContextQuery) PhraseSuggester { - q.contextQueries = append(q.contextQueries, query) - return q -} - -func (q PhraseSuggester) ContextQueries(queries ...SuggesterContextQuery) PhraseSuggester { - q.contextQueries = append(q.contextQueries, queries...) - return q -} - -func (q PhraseSuggester) GramSize(gramSize int) PhraseSuggester { - if gramSize >= 1 { - q.gramSize = &gramSize - } - return q -} - -func (q PhraseSuggester) MaxErrors(maxErrors float32) PhraseSuggester { - q.maxErrors = &maxErrors - return q -} - -func (q PhraseSuggester) Separator(separator string) PhraseSuggester { - q.separator = &separator - return q -} - -func (q PhraseSuggester) RealWordErrorLikelihood(realWordErrorLikelihood float32) PhraseSuggester { - q.realWordErrorLikelihood = &realWordErrorLikelihood - return q -} - -func (q PhraseSuggester) Confidence(confidence float32) PhraseSuggester { - q.confidence = &confidence - return q -} - -func (q PhraseSuggester) CandidateGenerator(generator CandidateGenerator) PhraseSuggester { - if q.generators == nil { - q.generators = make(map[string][]CandidateGenerator) - } - typ := generator.Type() - if _, found := q.generators[typ]; !found { - q.generators[typ] = make([]CandidateGenerator, 0) - } - q.generators[typ] = append(q.generators[typ], generator) - return q -} - -func (q PhraseSuggester) CandidateGenerators(generators ...CandidateGenerator) PhraseSuggester { - for _, g := range generators { - q = q.CandidateGenerator(g) - } - return q -} - -func (q PhraseSuggester) ClearCandidateGenerator() PhraseSuggester { - q.generators = nil - return q -} - -func (q PhraseSuggester) ForceUnigrams(forceUnigrams bool) PhraseSuggester { - q.forceUnigrams = &forceUnigrams - return q -} - -func (q PhraseSuggester) SmoothingModel(smoothingModel SmoothingModel) PhraseSuggester { - q.smoothingModel = smoothingModel - return q -} - -func (q PhraseSuggester) TokenLimit(tokenLimit int) PhraseSuggester { - q.tokenLimit = &tokenLimit - return q -} - -func (q PhraseSuggester) Highlight(preTag, postTag string) PhraseSuggester { - q.preTag = &preTag - q.postTag = &postTag - return q -} - -func (q PhraseSuggester) CollateQuery(collateQuery string) PhraseSuggester { - q.collateQuery = &collateQuery - return q -} - -func (q PhraseSuggester) CollateFilter(collateFilter string) PhraseSuggester { - q.collateFilter = &collateFilter - return q -} - -func (q PhraseSuggester) CollatePreference(collatePreference string) PhraseSuggester { - q.collatePreference = &collatePreference - return q -} - -func (q PhraseSuggester) CollateParams(collateParams map[string]interface{}) PhraseSuggester { - q.collateParams = collateParams - return q -} - -func (q PhraseSuggester) CollatePrune(collatePrune bool) PhraseSuggester { - q.collatePrune = &collatePrune - return q -} - -// simplePhraseSuggesterRequest is necessary because the order in which -// the JSON elements are routed to Elasticsearch is relevant. -// We got into trouble when using plain maps because the text element -// needs to go before the simple_phrase element. -type phraseSuggesterRequest struct { - Text string `json:"text"` - Phrase interface{} `json:"phrase"` -} - -// Creates the source for the phrase suggester. -func (q PhraseSuggester) Source(includeName bool) interface{} { - ps := &phraseSuggesterRequest{} - - if q.text != "" { - ps.Text = q.text - } - - suggester := make(map[string]interface{}) - ps.Phrase = suggester - - if q.analyzer != "" { - suggester["analyzer"] = q.analyzer - } - if q.field != "" { - suggester["field"] = q.field - } - if q.size != nil { - suggester["size"] = *q.size - } - if q.shardSize != nil { - suggester["shard_size"] = *q.shardSize - } - switch len(q.contextQueries) { - case 0: - case 1: - suggester["context"] = q.contextQueries[0].Source() - default: - ctxq := make([]interface{}, 0) - for _, query := range q.contextQueries { - ctxq = append(ctxq, query.Source()) - } - suggester["context"] = ctxq - } - - // Phase-specified parameters - if q.realWordErrorLikelihood != nil { - suggester["real_word_error_likelihood"] = *q.realWordErrorLikelihood - } - if q.confidence != nil { - suggester["confidence"] = *q.confidence - } - if q.separator != nil { - suggester["separator"] = *q.separator - } - if q.maxErrors != nil { - suggester["max_errors"] = *q.maxErrors - } - if q.gramSize != nil { - suggester["gram_size"] = *q.gramSize - } - if q.forceUnigrams != nil { - suggester["force_unigrams"] = *q.forceUnigrams - } - if q.tokenLimit != nil { - suggester["token_limit"] = *q.tokenLimit - } - if q.generators != nil && len(q.generators) > 0 { - for typ, generators := range q.generators { - arr := make([]interface{}, 0) - for _, g := range generators { - arr = append(arr, g.Source()) - } - suggester[typ] = arr - } - } - if q.smoothingModel != nil { - x := make(map[string]interface{}) - x[q.smoothingModel.Type()] = q.smoothingModel.Source() - suggester["smoothing"] = x - } - if q.preTag != nil { - hl := make(map[string]string) - hl["pre_tag"] = *q.preTag - if q.postTag != nil { - hl["post_tag"] = *q.postTag - } - suggester["highlight"] = hl - } - if q.collateQuery != nil || q.collateFilter != nil { - collate := make(map[string]interface{}) - suggester["collate"] = collate - if q.collateQuery != nil { - collate["query"] = *q.collateQuery - } - if q.collateFilter != nil { - collate["filter"] = *q.collateFilter - } - if q.collatePreference != nil { - collate["preference"] = *q.collatePreference - } - if len(q.collateParams) > 0 { - collate["params"] = q.collateParams - } - if q.collatePrune != nil { - collate["prune"] = *q.collatePrune - } - } - - if !includeName { - return ps - } - - source := make(map[string]interface{}) - source[q.name] = ps - return source -} - -// -- Smoothing models -- - -type SmoothingModel interface { - Type() string - Source() interface{} -} - -// StupidBackoffSmoothingModel implements a stupid backoff smoothing model. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-suggesters-phrase.html#_smoothing_models -// for details about smoothing models. -type StupidBackoffSmoothingModel struct { - discount float64 -} - -func NewStupidBackoffSmoothingModel(discount float64) *StupidBackoffSmoothingModel { - return &StupidBackoffSmoothingModel{ - discount: discount, - } -} - -func (sm *StupidBackoffSmoothingModel) Type() string { - return "stupid_backoff" -} - -func (sm *StupidBackoffSmoothingModel) Source() interface{} { - source := make(map[string]interface{}) - source["discount"] = sm.discount - return source -} - -// -- - -// LaplaceSmoothingModel implements a laplace smoothing model. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-suggesters-phrase.html#_smoothing_models -// for details about smoothing models. -type LaplaceSmoothingModel struct { - alpha float64 -} - -func NewLaplaceSmoothingModel(alpha float64) *LaplaceSmoothingModel { - return &LaplaceSmoothingModel{ - alpha: alpha, - } -} - -func (sm *LaplaceSmoothingModel) Type() string { - return "laplace" -} - -func (sm *LaplaceSmoothingModel) Source() interface{} { - source := make(map[string]interface{}) - source["alpha"] = sm.alpha - return source -} - -// -- - -// LinearInterpolationSmoothingModel implements a linear interpolation -// smoothing model. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-suggesters-phrase.html#_smoothing_models -// for details about smoothing models. -type LinearInterpolationSmoothingModel struct { - trigramLamda float64 - bigramLambda float64 - unigramLambda float64 -} - -func NewLinearInterpolationSmoothingModel(trigramLamda, bigramLambda, unigramLambda float64) *LinearInterpolationSmoothingModel { - return &LinearInterpolationSmoothingModel{ - trigramLamda: trigramLamda, - bigramLambda: bigramLambda, - unigramLambda: unigramLambda, - } -} - -func (sm *LinearInterpolationSmoothingModel) Type() string { - return "linear_interpolation" -} - -func (sm *LinearInterpolationSmoothingModel) Source() interface{} { - source := make(map[string]interface{}) - source["trigram_lambda"] = sm.trigramLamda - source["bigram_lambda"] = sm.bigramLambda - source["unigram_lambda"] = sm.unigramLambda - return source -} - -// -- CandidateGenerator -- - -type CandidateGenerator interface { - Type() string - Source() interface{} -} - -// DirectCandidateGenerator implements a direct candidate generator. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-suggesters-phrase.html#_smoothing_models -// for details about smoothing models. -type DirectCandidateGenerator struct { - field string - preFilter *string - postFilter *string - suggestMode *string - accuracy *float64 - size *int - sort *string - stringDistance *string - maxEdits *int - maxInspections *int - maxTermFreq *float64 - prefixLength *int - minWordLength *int - minDocFreq *float64 -} - -func NewDirectCandidateGenerator(field string) *DirectCandidateGenerator { - return &DirectCandidateGenerator{ - field: field, - } -} - -func (g *DirectCandidateGenerator) Type() string { - return "direct_generator" -} - -func (g *DirectCandidateGenerator) Field(field string) *DirectCandidateGenerator { - g.field = field - return g -} - -func (g *DirectCandidateGenerator) PreFilter(preFilter string) *DirectCandidateGenerator { - g.preFilter = &preFilter - return g -} - -func (g *DirectCandidateGenerator) PostFilter(postFilter string) *DirectCandidateGenerator { - g.postFilter = &postFilter - return g -} - -func (g *DirectCandidateGenerator) SuggestMode(suggestMode string) *DirectCandidateGenerator { - g.suggestMode = &suggestMode - return g -} - -func (g *DirectCandidateGenerator) Accuracy(accuracy float64) *DirectCandidateGenerator { - g.accuracy = &accuracy - return g -} - -func (g *DirectCandidateGenerator) Size(size int) *DirectCandidateGenerator { - g.size = &size - return g -} - -func (g *DirectCandidateGenerator) Sort(sort string) *DirectCandidateGenerator { - g.sort = &sort - return g -} - -func (g *DirectCandidateGenerator) StringDistance(stringDistance string) *DirectCandidateGenerator { - g.stringDistance = &stringDistance - return g -} - -func (g *DirectCandidateGenerator) MaxEdits(maxEdits int) *DirectCandidateGenerator { - g.maxEdits = &maxEdits - return g -} - -func (g *DirectCandidateGenerator) MaxInspections(maxInspections int) *DirectCandidateGenerator { - g.maxInspections = &maxInspections - return g -} - -func (g *DirectCandidateGenerator) MaxTermFreq(maxTermFreq float64) *DirectCandidateGenerator { - g.maxTermFreq = &maxTermFreq - return g -} - -func (g *DirectCandidateGenerator) PrefixLength(prefixLength int) *DirectCandidateGenerator { - g.prefixLength = &prefixLength - return g -} - -func (g *DirectCandidateGenerator) MinWordLength(minWordLength int) *DirectCandidateGenerator { - g.minWordLength = &minWordLength - return g -} - -func (g *DirectCandidateGenerator) MinDocFreq(minDocFreq float64) *DirectCandidateGenerator { - g.minDocFreq = &minDocFreq - return g -} - -func (g *DirectCandidateGenerator) Source() interface{} { - source := make(map[string]interface{}) - if g.field != "" { - source["field"] = g.field - } - if g.suggestMode != nil { - source["suggest_mode"] = *g.suggestMode - } - if g.accuracy != nil { - source["accuracy"] = *g.accuracy - } - if g.size != nil { - source["size"] = *g.size - } - if g.sort != nil { - source["sort"] = *g.sort - } - if g.stringDistance != nil { - source["string_distance"] = *g.stringDistance - } - if g.maxEdits != nil { - source["max_edits"] = *g.maxEdits - } - if g.maxInspections != nil { - source["max_inspections"] = *g.maxInspections - } - if g.maxTermFreq != nil { - source["max_term_freq"] = *g.maxTermFreq - } - if g.prefixLength != nil { - source["prefix_length"] = *g.prefixLength - } - if g.minWordLength != nil { - source["min_word_length"] = *g.minWordLength - } - if g.minDocFreq != nil { - source["min_doc_freq"] = *g.minDocFreq - } - if g.preFilter != nil { - source["pre_filter"] = *g.preFilter - } - if g.postFilter != nil { - source["post_filter"] = *g.postFilter - } - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/suggester_term.go b/vendor/gopkg.in/olivere/elastic.v2/suggester_term.go deleted file mode 100644 index f19484d..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/suggester_term.go +++ /dev/null @@ -1,225 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -// For more details, see -// http://www.elasticsearch.org/guide/reference/api/search/term-suggest/ -type TermSuggester struct { - Suggester - name string - text string - field string - analyzer string - size *int - shardSize *int - contextQueries []SuggesterContextQuery - - // fields specific to term suggester - suggestMode string - accuracy *float32 - sort string - stringDistance string - maxEdits *int - maxInspections *int - maxTermFreq *float32 - prefixLength *int - minWordLength *int - minDocFreq *float32 -} - -// Creates a new term suggester. -func NewTermSuggester(name string) TermSuggester { - return TermSuggester{ - name: name, - contextQueries: make([]SuggesterContextQuery, 0), - } -} - -func (q TermSuggester) Name() string { - return q.name -} - -func (q TermSuggester) Text(text string) TermSuggester { - q.text = text - return q -} - -func (q TermSuggester) Field(field string) TermSuggester { - q.field = field - return q -} - -func (q TermSuggester) Analyzer(analyzer string) TermSuggester { - q.analyzer = analyzer - return q -} - -func (q TermSuggester) Size(size int) TermSuggester { - q.size = &size - return q -} - -func (q TermSuggester) ShardSize(shardSize int) TermSuggester { - q.shardSize = &shardSize - return q -} - -func (q TermSuggester) ContextQuery(query SuggesterContextQuery) TermSuggester { - q.contextQueries = append(q.contextQueries, query) - return q -} - -func (q TermSuggester) ContextQueries(queries ...SuggesterContextQuery) TermSuggester { - q.contextQueries = append(q.contextQueries, queries...) - return q -} - -func (q TermSuggester) SuggestMode(suggestMode string) TermSuggester { - q.suggestMode = suggestMode - return q -} - -func (q TermSuggester) Accuracy(accuracy float32) TermSuggester { - q.accuracy = &accuracy - return q -} - -func (q TermSuggester) Sort(sort string) TermSuggester { - q.sort = sort - return q -} - -func (q TermSuggester) StringDistance(stringDistance string) TermSuggester { - q.stringDistance = stringDistance - return q -} - -func (q TermSuggester) MaxEdits(maxEdits int) TermSuggester { - q.maxEdits = &maxEdits - return q -} - -func (q TermSuggester) MaxInspections(maxInspections int) TermSuggester { - q.maxInspections = &maxInspections - return q -} - -func (q TermSuggester) MaxTermFreq(maxTermFreq float32) TermSuggester { - q.maxTermFreq = &maxTermFreq - return q -} - -func (q TermSuggester) PrefixLength(prefixLength int) TermSuggester { - q.prefixLength = &prefixLength - return q -} - -func (q TermSuggester) MinWordLength(minWordLength int) TermSuggester { - q.minWordLength = &minWordLength - return q -} - -func (q TermSuggester) MinDocFreq(minDocFreq float32) TermSuggester { - q.minDocFreq = &minDocFreq - return q -} - -// termSuggesterRequest is necessary because the order in which -// the JSON elements are routed to Elasticsearch is relevant. -// We got into trouble when using plain maps because the text element -// needs to go before the term element. -type termSuggesterRequest struct { - Text string `json:"text"` - Term interface{} `json:"term"` -} - -// Creates the source for the term suggester. -func (q TermSuggester) Source(includeName bool) interface{} { - // "suggest" : { - // "my-suggest-1" : { - // "text" : "the amsterdma meetpu", - // "term" : { - // "field" : "body" - // } - // }, - // "my-suggest-2" : { - // "text" : "the rottredam meetpu", - // "term" : { - // "field" : "title", - // } - // } - // } - ts := &termSuggesterRequest{} - if q.text != "" { - ts.Text = q.text - } - - suggester := make(map[string]interface{}) - ts.Term = suggester - - if q.analyzer != "" { - suggester["analyzer"] = q.analyzer - } - if q.field != "" { - suggester["field"] = q.field - } - if q.size != nil { - suggester["size"] = *q.size - } - if q.shardSize != nil { - suggester["shard_size"] = *q.shardSize - } - switch len(q.contextQueries) { - case 0: - case 1: - suggester["context"] = q.contextQueries[0].Source() - default: - ctxq := make([]interface{}, 0) - for _, query := range q.contextQueries { - ctxq = append(ctxq, query.Source()) - } - suggester["context"] = ctxq - } - - // Specific to term suggester - if q.suggestMode != "" { - suggester["suggest_mode"] = q.suggestMode - } - if q.accuracy != nil { - suggester["accuracy"] = *q.accuracy - } - if q.sort != "" { - suggester["sort"] = q.sort - } - if q.stringDistance != "" { - suggester["string_distance"] = q.stringDistance - } - if q.maxEdits != nil { - suggester["max_edits"] = *q.maxEdits - } - if q.maxInspections != nil { - suggester["max_inspections"] = *q.maxInspections - } - if q.maxTermFreq != nil { - suggester["max_term_freq"] = *q.maxTermFreq - } - if q.prefixLength != nil { - suggester["prefix_len"] = *q.prefixLength - } - if q.minWordLength != nil { - suggester["min_word_len"] = *q.minWordLength - } - if q.minDocFreq != nil { - suggester["min_doc_freq"] = *q.minDocFreq - } - - if !includeName { - return ts - } - - source := make(map[string]interface{}) - source[q.name] = ts - return source -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/suggester_term_test.go b/vendor/gopkg.in/olivere/elastic.v2/suggester_term_test.go deleted file mode 100644 index 6d71629..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/suggester_term_test.go +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "testing" -) - -func TestTermSuggesterSource(t *testing.T) { - s := NewTermSuggester("name"). - Text("n"). - Field("suggest") - data, err := json.Marshal(s.Source(true)) - if err != nil { - t.Fatalf("marshaling to JSON failed: %v", err) - } - got := string(data) - expected := `{"name":{"text":"n","term":{"field":"suggest"}}}` - if got != expected { - t.Errorf("expected\n%s\n,got:\n%s", expected, got) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/termvector.go b/vendor/gopkg.in/olivere/elastic.v2/termvector.go deleted file mode 100644 index dd346fd..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/termvector.go +++ /dev/null @@ -1,321 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "net/url" - "strings" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -// TermvectorService returns information and statistics on terms in the -// fields of a particular document. The document could be stored in the -// index or artificially provided by the user. -// -// See https://www.elastic.co/guide/en/elasticsearch/reference/1.7/docs-termvectors.html -// for documentation. -type TermvectorService struct { - client *Client - pretty bool - index string - typ string - id string - doc interface{} - fieldStatistics *bool - fields []string - perFieldAnalyzer map[string]string - offsets *bool - parent string - payloads *bool - positions *bool - preference string - realtime *bool - routing string - termStatistics *bool - bodyJson interface{} - bodyString string -} - -// NewTermvectorService creates a new TermvectorService. -func NewTermvectorService(client *Client) *TermvectorService { - return &TermvectorService{ - client: client, - } -} - -// Index in which the document resides. -func (s *TermvectorService) Index(index string) *TermvectorService { - s.index = index - return s -} - -// Type of the document. -func (s *TermvectorService) Type(typ string) *TermvectorService { - s.typ = typ - return s -} - -// Id of the document. -func (s *TermvectorService) Id(id string) *TermvectorService { - s.id = id - return s -} - -// Doc is the document to analyze. -func (s *TermvectorService) Doc(doc interface{}) *TermvectorService { - s.doc = doc - return s -} - -// FieldStatistics specifies if document count, sum of document frequencies -// and sum of total term frequencies should be returned. -func (s *TermvectorService) FieldStatistics(fieldStatistics bool) *TermvectorService { - s.fieldStatistics = &fieldStatistics - return s -} - -// Fields a list of fields to return. -func (s *TermvectorService) Fields(fields ...string) *TermvectorService { - if s.fields == nil { - s.fields = make([]string, 0) - } - s.fields = append(s.fields, fields...) - return s -} - -// PerFieldAnalyzer allows to specify a different analyzer than the one -// at the field. -func (s *TermvectorService) PerFieldAnalyzer(perFieldAnalyzer map[string]string) *TermvectorService { - s.perFieldAnalyzer = perFieldAnalyzer - return s -} - -// Offsets specifies if term offsets should be returned. -func (s *TermvectorService) Offsets(offsets bool) *TermvectorService { - s.offsets = &offsets - return s -} - -// Parent id of documents. -func (s *TermvectorService) Parent(parent string) *TermvectorService { - s.parent = parent - return s -} - -// Payloads specifies if term payloads should be returned. -func (s *TermvectorService) Payloads(payloads bool) *TermvectorService { - s.payloads = &payloads - return s -} - -// Positions specifies if term positions should be returned. -func (s *TermvectorService) Positions(positions bool) *TermvectorService { - s.positions = &positions - return s -} - -// Preference specify the node or shard the operation -// should be performed on (default: random). -func (s *TermvectorService) Preference(preference string) *TermvectorService { - s.preference = preference - return s -} - -// Realtime specifies if request is real-time as opposed to -// near-real-time (default: true). -func (s *TermvectorService) Realtime(realtime bool) *TermvectorService { - s.realtime = &realtime - return s -} - -// Routing is a specific routing value. -func (s *TermvectorService) Routing(routing string) *TermvectorService { - s.routing = routing - return s -} - -// TermStatistics specifies if total term frequency and document frequency -// should be returned. -func (s *TermvectorService) TermStatistics(termStatistics bool) *TermvectorService { - s.termStatistics = &termStatistics - return s -} - -// Pretty indicates that the JSON response be indented and human readable. -func (s *TermvectorService) Pretty(pretty bool) *TermvectorService { - s.pretty = pretty - return s -} - -// BodyJson defines the body parameters. See documentation. -func (s *TermvectorService) BodyJson(body interface{}) *TermvectorService { - s.bodyJson = body - return s -} - -// BodyString defines the body parameters as a string. See documentation. -func (s *TermvectorService) BodyString(body string) *TermvectorService { - s.bodyString = body - return s -} - -// buildURL builds the URL for the operation. -func (s *TermvectorService) buildURL() (string, url.Values, error) { - var pathParam = map[string]string{ - "index": s.index, - "type": s.typ, - } - var path string - var err error - - // Build URL - if s.id != "" { - pathParam["id"] = s.id - path, err = uritemplates.Expand("/{index}/{type}/{id}/_termvector", pathParam) - } else { - path, err = uritemplates.Expand("/{index}/{type}/_termvector", pathParam) - } - - if err != nil { - return "", url.Values{}, err - } - - // Add query string parameters - params := url.Values{} - if s.pretty { - params.Set("pretty", "1") - } - if s.fieldStatistics != nil { - params.Set("field_statistics", fmt.Sprintf("%v", *s.fieldStatistics)) - } - if len(s.fields) > 0 { - params.Set("fields", strings.Join(s.fields, ",")) - } - if s.offsets != nil { - params.Set("offsets", fmt.Sprintf("%v", *s.offsets)) - } - if s.parent != "" { - params.Set("parent", s.parent) - } - if s.payloads != nil { - params.Set("payloads", fmt.Sprintf("%v", *s.payloads)) - } - if s.positions != nil { - params.Set("positions", fmt.Sprintf("%v", *s.positions)) - } - if s.preference != "" { - params.Set("preference", s.preference) - } - if s.realtime != nil { - params.Set("realtime", fmt.Sprintf("%v", *s.realtime)) - } - if s.routing != "" { - params.Set("routing", s.routing) - } - if s.termStatistics != nil { - params.Set("term_statistics", fmt.Sprintf("%v", *s.termStatistics)) - } - return path, params, nil -} - -// Validate checks if the operation is valid. -func (s *TermvectorService) Validate() error { - var invalid []string - if s.index == "" { - invalid = append(invalid, "Index") - } - if s.typ == "" { - invalid = append(invalid, "Type") - } - if len(invalid) > 0 { - return fmt.Errorf("missing required fields: %v", invalid) - } - return nil -} - -// Do executes the operation. -func (s *TermvectorService) Do() (*TermvectorsResponse, error) { - // Check pre-conditions - if err := s.Validate(); err != nil { - return nil, err - } - - // Get URL for request - path, params, err := s.buildURL() - if err != nil { - return nil, err - } - - // Setup HTTP request body - var body interface{} - if s.bodyJson != nil { - body = s.bodyJson - } else if s.bodyString != "" { - body = s.bodyString - } else if s.doc != nil || s.perFieldAnalyzer != nil { - data := make(map[string]interface{}) - if s.doc != nil { - data["doc"] = s.doc - } - if len(s.perFieldAnalyzer) > 0 { - data["per_field_analyzer"] = s.perFieldAnalyzer - } - body = data - } else { - body = "" - } - - // Get HTTP response - res, err := s.client.PerformRequest("GET", path, params, body) - if err != nil { - return nil, err - } - - // Return operation response - ret := new(TermvectorsResponse) - if err := s.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} - -type TokenInfo struct { - StartOffset int64 `json:"start_offset"` - EndOffset int64 `json:"end_offset"` - Position int64 `json:"position"` - Payload string `json:"payload"` -} - -type TermsInfo struct { - DocFreq int64 `json:"doc_freq"` - Score float64 `json:"score"` - TermFreq int64 `json:"term_freq"` - Ttf int64 `json:"ttf"` - Tokens []TokenInfo `json:"tokens"` -} - -type FieldStatistics struct { - DocCount int64 `json:"doc_count"` - SumDocFreq int64 `json:"sum_doc_freq"` - SumTtf int64 `json:"sum_ttf"` -} - -type TermVectorsFieldInfo struct { - FieldStatistics FieldStatistics `json:"field_statistics"` - Terms map[string]TermsInfo `json:"terms"` -} - -// TermvectorsResponse is the response of TermvectorService.Do. -type TermvectorsResponse struct { - Index string `json:"_index"` - Type string `json:"_type"` - Id string `json:"_id,omitempty"` - Version int `json:"_version"` - Found bool `json:"found"` - Took int64 `json:"took"` - TermVectors map[string]TermVectorsFieldInfo `json:"term_vectors"` -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/termvector_test.go b/vendor/gopkg.in/olivere/elastic.v2/termvector_test.go deleted file mode 100644 index dfb732b..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/termvector_test.go +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "testing" - "time" -) - -func TestTermVectorBuildURL(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tests := []struct { - Index string - Type string - Id string - Expected string - }{ - { - "twitter", - "tweet", - "", - "/twitter/tweet/_termvector", - }, - { - "twitter", - "tweet", - "1", - "/twitter/tweet/1/_termvector", - }, - } - - for _, test := range tests { - builder := client.TermVector(test.Index, test.Type) - if test.Id != "" { - builder = builder.Id(test.Id) - } - path, _, err := builder.buildURL() - if err != nil { - t.Fatal(err) - } - if path != test.Expected { - t.Errorf("expected %q; got: %q", test.Expected, path) - } - } -} - -func TestTermVectorWithId(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - tweet1 := tweet{User: "olivere", Message: "Welcome to Golang and Elasticsearch."} - - // Add a document - indexResult, err := client.Index(). - Index(testIndexName). - Type("tweet"). - Id("1"). - BodyJson(&tweet1). - Refresh(true). - Do() - if err != nil { - t.Fatal(err) - } - if indexResult == nil { - t.Errorf("expected result to be != nil; got: %v", indexResult) - } - - // TermVectors by specifying ID - field := "Message" - result, err := client.TermVector(testIndexName, "tweet"). - Id("1"). - Fields(field). - FieldStatistics(true). - TermStatistics(true). - Do() - if err != nil { - t.Fatal(err) - } - if result == nil { - t.Fatal("expected to return information and statistics") - } - if !result.Found { - t.Errorf("expected found to be %v; got: %v", true, result.Found) - } - if result.Took <= 0 { - t.Errorf("expected took in millis > 0; got: %v", result.Took) - } -} - -func TestTermVectorWithDoc(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - // Travis lags sometimes - if isTravis() { - time.Sleep(2 * time.Second) - } - - // TermVectors by specifying Doc - var doc = map[string]interface{}{ - "fullname": "John Doe", - "text": "twitter test test test", - } - var perFieldAnalyzer = map[string]string{ - "fullname": "keyword", - } - - result, err := client.TermVector(testIndexName, "tweet"). - Doc(doc). - PerFieldAnalyzer(perFieldAnalyzer). - FieldStatistics(true). - TermStatistics(true). - Do() - if err != nil { - t.Fatal(err) - } - if result == nil { - t.Fatal("expected to return information and statistics") - } - if !result.Found { - t.Errorf("expected found to be %v; got: %v", true, result.Found) - } - if result.Took <= 0 { - t.Errorf("expected took in millis > 0; got: %v", result.Took) - } -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/update.go b/vendor/gopkg.in/olivere/elastic.v2/update.go deleted file mode 100644 index 2d1d1c1..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/update.go +++ /dev/null @@ -1,346 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "fmt" - "net/http" - "net/url" - "strings" - - "gopkg.in/olivere/elastic.v2/uritemplates" -) - -// UpdateResult is the result of updating a document in Elasticsearch. -type UpdateResult struct { - Index string `json:"_index"` - Type string `json:"_type"` - Id string `json:"_id"` - Version int `json:"_version"` - Created bool `json:"created"` - GetResult *GetResult `json:"get"` -} - -// UpdateService updates a document in Elasticsearch. -// See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-update.html -// for details. -type UpdateService struct { - client *Client - index string - typ string - id string - routing string - parent string - script string - scriptId string - scriptFile string - scriptType string - scriptLang string - scriptParams map[string]interface{} - fields []string - version *int64 - versionType string - retryOnConflict *int - refresh *bool - replicationType string - consistencyLevel string - upsert interface{} - scriptedUpsert *bool - docAsUpsert *bool - detectNoop *bool - doc interface{} - timeout string - pretty bool -} - -// NewUpdateService creates the service to update documents in Elasticsearch. -func NewUpdateService(client *Client) *UpdateService { - builder := &UpdateService{ - client: client, - scriptParams: make(map[string]interface{}), - fields: make([]string, 0), - } - return builder -} - -// Index is the name of the Elasticsearch index (required). -func (b *UpdateService) Index(name string) *UpdateService { - b.index = name - return b -} - -// Type is the type of the document (required). -func (b *UpdateService) Type(typ string) *UpdateService { - b.typ = typ - return b -} - -// Id is the identifier of the document to update (required). -func (b *UpdateService) Id(id string) *UpdateService { - b.id = id - return b -} - -// Routing specifies a specific routing value. -func (b *UpdateService) Routing(routing string) *UpdateService { - b.routing = routing - return b -} - -// Parent sets the id of the parent document. -func (b *UpdateService) Parent(parent string) *UpdateService { - b.parent = parent - return b -} - -// Script is the URL-encoded script definition. -func (b *UpdateService) Script(script string) *UpdateService { - b.script = script - return b -} - -// ScriptId is the id of a stored script. -func (b *UpdateService) ScriptId(scriptId string) *UpdateService { - b.scriptId = scriptId - return b -} - -// ScriptFile is the file name of a stored script. -// See https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting.html for details. -func (b *UpdateService) ScriptFile(scriptFile string) *UpdateService { - b.scriptFile = scriptFile - return b -} - -func (b *UpdateService) ScriptType(scriptType string) *UpdateService { - b.scriptType = scriptType - return b -} - -// ScriptLang defines the scripting language (default: groovy). -func (b *UpdateService) ScriptLang(scriptLang string) *UpdateService { - b.scriptLang = scriptLang - return b -} - -func (b *UpdateService) ScriptParams(params map[string]interface{}) *UpdateService { - b.scriptParams = params - return b -} - -// RetryOnConflict specifies how many times the operation should be retried -// when a conflict occurs (default: 0). -func (b *UpdateService) RetryOnConflict(retryOnConflict int) *UpdateService { - b.retryOnConflict = &retryOnConflict - return b -} - -// Fields is a list of fields to return in the response. -func (b *UpdateService) Fields(fields ...string) *UpdateService { - b.fields = make([]string, 0, len(fields)) - b.fields = append(b.fields, fields...) - return b -} - -// Version defines the explicit version number for concurrency control. -func (b *UpdateService) Version(version int64) *UpdateService { - b.version = &version - return b -} - -// VersionType is one of "internal" or "force". -func (b *UpdateService) VersionType(versionType string) *UpdateService { - b.versionType = versionType - return b -} - -// Refresh the index after performing the update. -func (b *UpdateService) Refresh(refresh bool) *UpdateService { - b.refresh = &refresh - return b -} - -// ReplicationType is one of "sync" or "async". -func (b *UpdateService) ReplicationType(replicationType string) *UpdateService { - b.replicationType = replicationType - return b -} - -// ConsistencyLevel is one of "one", "quorum", or "all". -// It sets the write consistency setting for the update operation. -func (b *UpdateService) ConsistencyLevel(consistencyLevel string) *UpdateService { - b.consistencyLevel = consistencyLevel - return b -} - -// Doc allows for updating a partial document. -func (b *UpdateService) Doc(doc interface{}) *UpdateService { - b.doc = doc - return b -} - -// Upsert can be used to index the document when it doesn't exist yet. -// Use this e.g. to initialize a document with a default value. -func (b *UpdateService) Upsert(doc interface{}) *UpdateService { - b.upsert = doc - return b -} - -// DocAsUpsert can be used to insert the document if it doesn't already exist. -func (b *UpdateService) DocAsUpsert(docAsUpsert bool) *UpdateService { - b.docAsUpsert = &docAsUpsert - return b -} - -// DetectNoop will instruct Elasticsearch to check if changes will occur -// when updating via Doc. It there aren't any changes, the request will -// turn into a no-op. -func (b *UpdateService) DetectNoop(detectNoop bool) *UpdateService { - b.detectNoop = &detectNoop - return b -} - -// ScriptedUpsert should be set to true if the referenced script -// (defined in Script or ScriptId) should be called to perform an insert. -// The default is false. -func (b *UpdateService) ScriptedUpsert(scriptedUpsert bool) *UpdateService { - b.scriptedUpsert = &scriptedUpsert - return b -} - -// Timeout is an explicit timeout for the operation, e.g. "1000", "1s" or "500ms". -func (b *UpdateService) Timeout(timeout string) *UpdateService { - b.timeout = timeout - return b -} - -// Pretty instructs to return human readable, prettified JSON. -func (b *UpdateService) Pretty(pretty bool) *UpdateService { - b.pretty = pretty - return b -} - -// url returns the URL part of the document request. -func (b *UpdateService) url() (string, url.Values, error) { - // Build url - path := "/{index}/{type}/{id}/_update" - path, err := uritemplates.Expand(path, map[string]string{ - "index": b.index, - "type": b.typ, - "id": b.id, - }) - if err != nil { - return "", url.Values{}, err - } - - // Parameters - params := make(url.Values) - if b.pretty { - params.Set("pretty", "true") - } - if b.routing != "" { - params.Set("routing", b.routing) - } - if b.parent != "" { - params.Set("parent", b.parent) - } - if b.timeout != "" { - params.Set("timeout", b.timeout) - } - if b.refresh != nil { - params.Set("refresh", fmt.Sprintf("%v", *b.refresh)) - } - if b.replicationType != "" { - params.Set("replication", b.replicationType) - } - if b.consistencyLevel != "" { - params.Set("consistency", b.consistencyLevel) - } - if len(b.fields) > 0 { - params.Set("fields", strings.Join(b.fields, ",")) - } - if b.version != nil { - params.Set("version", fmt.Sprintf("%d", *b.version)) - } - if b.versionType != "" { - params.Set("version_type", b.versionType) - } - if b.retryOnConflict != nil { - params.Set("retry_on_conflict", fmt.Sprintf("%v", *b.retryOnConflict)) - } - - return path, params, nil -} - -// body returns the body part of the document request. -func (b *UpdateService) body() (interface{}, error) { - source := make(map[string]interface{}) - - if b.script != "" { - source["script"] = b.script - } - if b.scriptId != "" { - source["script_id"] = b.scriptId - } - if b.scriptFile != "" { - source["script_file"] = b.scriptFile - } - if b.scriptLang != "" { - source["lang"] = b.scriptLang - } - if len(b.scriptParams) > 0 { - source["params"] = b.scriptParams - } - if b.scriptedUpsert != nil { - source["scripted_upsert"] = *b.scriptedUpsert - } - - if b.upsert != nil { - source["upsert"] = b.upsert - } - - if b.doc != nil { - source["doc"] = b.doc - } - if b.docAsUpsert != nil { - source["doc_as_upsert"] = *b.docAsUpsert - } - if b.detectNoop != nil { - source["detect_noop"] = *b.detectNoop - } - - return source, nil -} - -// Do executes the update operation. -func (b *UpdateService) Do() (*UpdateResult, error) { - path, params, err := b.url() - if err != nil { - return nil, err - } - - // Get body of the request - body, err := b.body() - if err != nil { - return nil, err - } - - // Get response - res, err := b.client.PerformRequest("POST", path, params, body) - if err != nil { - return nil, err - } - // 404 indicates an error for failed updates - if res.StatusCode == http.StatusNotFound { - return nil, createResponseError(res.StatusCode, res.Body) - } - - // Return result - ret := new(UpdateResult) - if err := b.client.decoder.Decode(res.Body, ret); err != nil { - return nil, err - } - return ret, nil -} diff --git a/vendor/gopkg.in/olivere/elastic.v2/update_test.go b/vendor/gopkg.in/olivere/elastic.v2/update_test.go deleted file mode 100644 index fdb0d26..0000000 --- a/vendor/gopkg.in/olivere/elastic.v2/update_test.go +++ /dev/null @@ -1,344 +0,0 @@ -// Copyright 2012-2015 Oliver Eilhard. All rights reserved. -// Use of this source code is governed by a MIT-license. -// See http://olivere.mit-license.org/license.txt for details. - -package elastic - -import ( - "encoding/json" - "net/url" - "testing" - "time" -) - -func TestUpdateViaScript(t *testing.T) { - client := setupTestClient(t) - update := client.Update(). - Index("test").Type("type1").Id("1"). - Script("ctx._source.tags += tag"). - ScriptParams(map[string]interface{}{"tag": "blue"}). - ScriptLang("groovy") - path, params, err := update.url() - if err != nil { - t.Fatalf("expected to return URL, got: %v", err) - } - expectedPath := `/test/type1/1/_update` - if expectedPath != path { - t.Errorf("expected URL path\n%s\ngot:\n%s", expectedPath, path) - } - expectedParams := url.Values{} - if expectedParams.Encode() != params.Encode() { - t.Errorf("expected URL parameters\n%s\ngot:\n%s", expectedParams.Encode(), params.Encode()) - } - body, err := update.body() - if err != nil { - t.Fatalf("expected to return body, got: %v", err) - } - data, err := json.Marshal(body) - if err != nil { - t.Fatalf("expected to marshal body as JSON, got: %v", err) - } - got := string(data) - expected := `{"lang":"groovy","params":{"tag":"blue"},"script":"ctx._source.tags += tag"}` - if got != expected { - t.Errorf("expected\n%s\ngot:\n%s", expected, got) - } -} - -func TestUpdateViaScriptId(t *testing.T) { - client := setupTestClient(t) - - scriptParams := map[string]interface{}{ - "pageViewEvent": map[string]interface{}{ - "url": "foo.com/bar", - "response": 404, - "time": "2014-01-01 12:32", - }, - } - - update := client.Update(). - Index("sessions").Type("session").Id("dh3sgudg8gsrgl"). - ScriptId("my_web_session_summariser"). - ScriptedUpsert(true). - ScriptParams(scriptParams). - Upsert(map[string]interface{}{}) - path, params, err := update.url() - if err != nil { - t.Fatalf("expected to return URL, got: %v", err) - } - expectedPath := `/sessions/session/dh3sgudg8gsrgl/_update` - if expectedPath != path { - t.Errorf("expected URL path\n%s\ngot:\n%s", expectedPath, path) - } - expectedParams := url.Values{} - if expectedParams.Encode() != params.Encode() { - t.Errorf("expected URL parameters\n%s\ngot:\n%s", expectedParams.Encode(), params.Encode()) - } - body, err := update.body() - if err != nil { - t.Fatalf("expected to return body, got: %v", err) - } - data, err := json.Marshal(body) - if err != nil { - t.Fatalf("expected to marshal body as JSON, got: %v", err) - } - got := string(data) - expected := `{"params":{"pageViewEvent":{"response":404,"time":"2014-01-01 12:32","url":"foo.com/bar"}},"script_id":"my_web_session_summariser","scripted_upsert":true,"upsert":{}}` - if got != expected { - t.Errorf("expected\n%s\ngot:\n%s", expected, got) - } -} - -func TestUpdateViaScriptFile(t *testing.T) { - client := setupTestClient(t) - - scriptParams := map[string]interface{}{ - "pageViewEvent": map[string]interface{}{ - "url": "foo.com/bar", - "response": 404, - "time": "2014-01-01 12:32", - }, - } - - update := client.Update(). - Index("sessions").Type("session").Id("dh3sgudg8gsrgl"). - ScriptFile("update_script"). - ScriptedUpsert(true). - ScriptParams(scriptParams). - Upsert(map[string]interface{}{}) - path, params, err := update.url() - if err != nil { - t.Fatalf("expected to return URL, got: %v", err) - } - expectedPath := `/sessions/session/dh3sgudg8gsrgl/_update` - if expectedPath != path { - t.Errorf("expected URL path\n%s\ngot:\n%s", expectedPath, path) - } - expectedParams := url.Values{} - if expectedParams.Encode() != params.Encode() { - t.Errorf("expected URL parameters\n%s\ngot:\n%s", expectedParams.Encode(), params.Encode()) - } - body, err := update.body() - if err != nil { - t.Fatalf("expected to return body, got: %v", err) - } - data, err := json.Marshal(body) - if err != nil { - t.Fatalf("expected to marshal body as JSON, got: %v", err) - } - got := string(data) - expected := `{"params":{"pageViewEvent":{"response":404,"time":"2014-01-01 12:32","url":"foo.com/bar"}},"script_file":"update_script","scripted_upsert":true,"upsert":{}}` - if got != expected { - t.Errorf("expected\n%s\ngot:\n%s", expected, got) - } -} - -func TestUpdateViaScriptAndUpsert(t *testing.T) { - client := setupTestClient(t) - update := client.Update(). - Index("test").Type("type1").Id("1"). - Script("ctx._source.counter += count"). - ScriptParams(map[string]interface{}{"count": 4}). - Upsert(map[string]interface{}{"counter": 1}) - path, params, err := update.url() - if err != nil { - t.Fatalf("expected to return URL, got: %v", err) - } - expectedPath := `/test/type1/1/_update` - if expectedPath != path { - t.Errorf("expected URL path\n%s\ngot:\n%s", expectedPath, path) - } - expectedParams := url.Values{} - if expectedParams.Encode() != params.Encode() { - t.Errorf("expected URL parameters\n%s\ngot:\n%s", expectedParams.Encode(), params.Encode()) - } - body, err := update.body() - if err != nil { - t.Fatalf("expected to return body, got: %v", err) - } - data, err := json.Marshal(body) - if err != nil { - t.Fatalf("expected to marshal body as JSON, got: %v", err) - } - got := string(data) - expected := `{"params":{"count":4},"script":"ctx._source.counter += count","upsert":{"counter":1}}` - if got != expected { - t.Errorf("expected\n%s\ngot:\n%s", expected, got) - } -} - -func TestUpdateViaDoc(t *testing.T) { - client := setupTestClient(t) - update := client.Update(). - Index("test").Type("type1").Id("1"). - Doc(map[string]interface{}{"name": "new_name"}). - DetectNoop(true) - path, params, err := update.url() - if err != nil { - t.Fatalf("expected to return URL, got: %v", err) - } - expectedPath := `/test/type1/1/_update` - if expectedPath != path { - t.Errorf("expected URL path\n%s\ngot:\n%s", expectedPath, path) - } - expectedParams := url.Values{} - if expectedParams.Encode() != params.Encode() { - t.Errorf("expected URL parameters\n%s\ngot:\n%s", expectedParams.Encode(), params.Encode()) - } - body, err := update.body() - if err != nil { - t.Fatalf("expected to return body, got: %v", err) - } - data, err := json.Marshal(body) - if err != nil { - t.Fatalf("expected to marshal body as JSON, got: %v", err) - } - got := string(data) - expected := `{"detect_noop":true,"doc":{"name":"new_name"}}` - if got != expected { - t.Errorf("expected\n%s\ngot:\n%s", expected, got) - } -} - -func TestUpdateViaDocAndUpsert(t *testing.T) { - client := setupTestClient(t) - update := client.Update(). - Index("test").Type("type1").Id("1"). - Doc(map[string]interface{}{"name": "new_name"}). - DocAsUpsert(true). - Timeout("1s"). - Refresh(true) - path, params, err := update.url() - if err != nil { - t.Fatalf("expected to return URL, got: %v", err) - } - expectedPath := `/test/type1/1/_update` - if expectedPath != path { - t.Errorf("expected URL path\n%s\ngot:\n%s", expectedPath, path) - } - expectedParams := url.Values{"refresh": []string{"true"}, "timeout": []string{"1s"}} - if expectedParams.Encode() != params.Encode() { - t.Errorf("expected URL parameters\n%s\ngot:\n%s", expectedParams.Encode(), params.Encode()) - } - body, err := update.body() - if err != nil { - t.Fatalf("expected to return body, got: %v", err) - } - data, err := json.Marshal(body) - if err != nil { - t.Fatalf("expected to marshal body as JSON, got: %v", err) - } - got := string(data) - expected := `{"doc":{"name":"new_name"},"doc_as_upsert":true}` - if got != expected { - t.Errorf("expected\n%s\ngot:\n%s", expected, got) - } -} - -func TestUpdateViaScriptIntegration(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - esversion, err := client.ElasticsearchVersion(DefaultURL) - if err != nil { - t.Fatal(err) - } - if esversion >= "1.4.3" || (esversion < "1.4.0" && esversion >= "1.3.8") { - t.Skip("groovy scripting has been disabled as for [1.3.8,1.4.0) and 1.4.3+") - return - } - - tweet1 := tweet{User: "olivere", Retweets: 10, Message: "Welcome to Golang and Elasticsearch."} - - // Add a document - indexResult, err := client.Index(). - Index(testIndexName). - Type("tweet"). - Id("1"). - BodyJson(&tweet1). - Do() - if err != nil { - t.Fatal(err) - } - if indexResult == nil { - t.Errorf("expected result to be != nil; got: %v", indexResult) - } - - // Update number of retweets - increment := 1 - update, err := client.Update().Index(testIndexName).Type("tweet").Id("1"). - Script("ctx._source.retweets += num"). - ScriptParams(map[string]interface{}{"num": increment}). - ScriptLang("groovy"). // Use "groovy" as default language as 1.3 uses MVEL by default - Do() - if err != nil { - t.Fatal(err) - } - if update == nil { - t.Errorf("expected update to be != nil; got %v", update) - } - if update.Version != indexResult.Version+1 { - t.Errorf("expected version to be %d; got %d", indexResult.Version+1, update.Version) - } - - // Get document - getResult, err := client.Get(). - Index(testIndexName). - Type("tweet"). - Id("1"). - Do() - if err != nil { - t.Fatal(err) - } - if getResult.Index != testIndexName { - t.Errorf("expected GetResult.Index %q; got %q", testIndexName, getResult.Index) - } - if getResult.Type != "tweet" { - t.Errorf("expected GetResult.Type %q; got %q", "tweet", getResult.Type) - } - if getResult.Id != "1" { - t.Errorf("expected GetResult.Id %q; got %q", "1", getResult.Id) - } - if getResult.Source == nil { - t.Errorf("expected GetResult.Source to be != nil; got nil") - } - - // Decode the Source field - var tweetGot tweet - err = json.Unmarshal(*getResult.Source, &tweetGot) - if err != nil { - t.Fatal(err) - } - if tweetGot.Retweets != tweet1.Retweets+increment { - t.Errorf("expected Tweet.Retweets to be %d; got %d", tweet1.Retweets+increment, tweetGot.Retweets) - } -} - -func TestUpdateReturnsErrorOnFailure(t *testing.T) { - client := setupTestClientAndCreateIndex(t) - - // Travis lags sometimes - if isTravis() { - time.Sleep(2 * time.Second) - } - - // Ensure that no tweet with id #1 exists - exists, err := client.Exists().Index(testIndexName).Type("tweet").Id("1").Do() - if err != nil { - t.Fatal(err) - } - if exists { - t.Fatalf("expected no document; got: %v", exists) - } - - // Update (non-existent) tweet with id #1 - update, err := client.Update(). - Index(testIndexName).Type("tweet").Id("1"). - Doc(map[string]interface{}{"retweets": 42}). - Do() - if err == nil { - t.Fatalf("expected error to be != nil; got: %v", err) - } - if update != nil { - t.Fatalf("expected update to be == nil; got %v", update) - } -} diff --git a/vendor/gopkg.in/warnings.v0/README b/vendor/gopkg.in/warnings.v0/README index 77f46dd..974212b 100644 --- a/vendor/gopkg.in/warnings.v0/README +++ b/vendor/gopkg.in/warnings.v0/README @@ -62,6 +62,9 @@ could look like using the warnings package: return c.Done() } +For an example of a non-trivial code base using this library, see +gopkg.in/gcfg.v1 + Rules for using warnings - ensure that warnings are programmatically distinguishable from fatal diff --git a/vendor/gopkg.in/warnings.v0/warnings.go b/vendor/gopkg.in/warnings.v0/warnings.go index 5b57f43..b849d1e 100644 --- a/vendor/gopkg.in/warnings.v0/warnings.go +++ b/vendor/gopkg.in/warnings.v0/warnings.go @@ -57,6 +57,9 @@ // return c.Done() // } // +// For an example of a non-trivial code base using this library, see +// gopkg.in/gcfg.v1 +// // Rules for using warnings // // - ensure that warnings are programmatically distinguishable from fatal diff --git a/vendor/gopkg.in/warnings.v0/warnings_test.go b/vendor/gopkg.in/warnings.v0/warnings_test.go index 8d6ad0d..b4a6ea4 100644 --- a/vendor/gopkg.in/warnings.v0/warnings_test.go +++ b/vendor/gopkg.in/warnings.v0/warnings_test.go @@ -8,7 +8,7 @@ import ( w "gopkg.in/warnings.v0" ) -var _ error = List{} +var _ error = w.List{} type warn string